diff --git a/Cargo.lock b/Cargo.lock index aba14250..835ad07e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -411,6 +411,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +[[package]] +name = "az" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6dff4a1892b54d70af377bf7a17064192e822865791d812957f21e3108c325" + [[package]] name = "backtrace" version = "0.3.61" @@ -451,6 +457,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" +[[package]] +name = "base64" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" + [[package]] name = "base64" version = "0.12.3" @@ -918,6 +930,12 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" +[[package]] +name = "bytemuck" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72957246c41db82b8ef88a5486143830adeb8227ef9837740bdec67724cf2c5b" + [[package]] name = "byteorder" version = "1.4.3" @@ -1868,6 +1886,12 @@ dependencies = [ "syn 1.0.75", ] +[[package]] +name = "difference" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" + [[package]] name = "digest" version = "0.8.1" @@ -2224,6 +2248,18 @@ dependencies = [ "scale-info", ] +[[package]] +name = "fixed" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d333a26ec13a023c6dff4b7584de4d323cfee2e508f5dd2bbee6669e4f7efdf" +dependencies = [ + "az", + "bytemuck", + "half", + "typenum", +] + [[package]] name = "fixed-hash" version = "0.7.0" @@ -2236,6 +2272,49 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "fixed-macro" +version = "1.1.1" +source = "git+https://github.com/kvinwang/fixed-macro.git#fe688ef1dbb350c67d4be00bb808f726439289dd" +dependencies = [ + "fixed", + "fixed-macro-impl", + "fixed-macro-types", +] + +[[package]] +name = "fixed-macro-impl" +version = "1.1.1" +source = "git+https://github.com/kvinwang/fixed-macro.git#fe688ef1dbb350c67d4be00bb808f726439289dd" +dependencies = [ + "fixed", + "paste", + "proc-macro-error 1.0.4", + "proc-macro2 1.0.28", + "quote 1.0.9", + "syn 1.0.75", +] + +[[package]] +name = "fixed-macro-types" +version = "1.1.1" +source = "git+https://github.com/kvinwang/fixed-macro.git#fe688ef1dbb350c67d4be00bb808f726439289dd" +dependencies = [ + "fixed", + "fixed-macro-impl", +] + +[[package]] +name = "fixed-sqrt" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73d44f350be1d321180dc53d14b3a03570607ae6b3d9d681607e554f95b284c8" +dependencies = [ + "fixed", + "integer-sqrt", + "typenum", +] + [[package]] name = "fixedbitset" version = "0.2.0" @@ -2423,6 +2502,36 @@ dependencies = [ "syn 1.0.75", ] +[[package]] +name = "frame-support-test" +version = "3.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.9#91061a7d925b5bc597804293da283477512ba4ff" +dependencies = [ + "frame-metadata", + "frame-support", + "frame-support-test-pallet", + "frame-system", + "parity-scale-codec", + "pretty_assertions", + "rustversion", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "trybuild", +] + +[[package]] +name = "frame-support-test-pallet" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.9#91061a7d925b5bc597804293da283477512ba4ff" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", +] + [[package]] name = "frame-system" version = "4.0.0-dev" @@ -2632,7 +2741,7 @@ checksum = "3a1387e07917c711fb4ee4f48ea0adb04a3c9739e53ef85bf43ae1edc2937a8b" dependencies = [ "futures-io", "rustls 0.19.1", - "webpki", + "webpki 0.21.4", ] [[package]] @@ -2825,6 +2934,12 @@ dependencies = [ "tracing-futures", ] +[[package]] +name = "half" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62aca2aba2d62b4a7f5b33f3712cb1b0692779a56fb510499d5c0aa594daeaf3" + [[package]] name = "handlebars" version = "3.5.5" @@ -3150,7 +3265,7 @@ dependencies = [ "rustls-native-certs 0.4.0", "tokio 0.2.25", "tokio-rustls 0.14.1", - "webpki", + "webpki 0.21.4", ] [[package]] @@ -3927,10 +4042,10 @@ dependencies = [ "parity-multiaddr", "parking_lot 0.11.1", "pin-project 1.0.8", - "prost", + "prost 0.7.0", "prost-build", "rand 0.7.3", - "ring", + "ring 0.16.20", "rw-stream-sink", "sha2 0.9.5", "smallvec 1.6.1", @@ -3977,7 +4092,7 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "prost", + "prost 0.7.0", "prost-build", "rand 0.7.3", "smallvec 1.6.1", @@ -3999,7 +4114,7 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "prost", + "prost 0.7.0", "prost-build", "rand 0.7.3", "regex", @@ -4019,7 +4134,7 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "prost", + "prost 0.7.0", "prost-build", "smallvec 1.6.1", "wasm-timer", @@ -4040,7 +4155,7 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "prost", + "prost 0.7.0", "prost-build", "rand 0.7.3", "sha2 0.9.5", @@ -4102,7 +4217,7 @@ dependencies = [ "lazy_static", "libp2p-core", "log", - "prost", + "prost 0.7.0", "prost-build", "rand 0.7.3", "sha2 0.9.5", @@ -4138,7 +4253,7 @@ dependencies = [ "futures 0.3.16", "libp2p-core", "log", - "prost", + "prost 0.7.0", "prost-build", "unsigned-varint 0.7.0", "void", @@ -4172,7 +4287,7 @@ dependencies = [ "libp2p-swarm", "log", "pin-project 1.0.8", - "prost", + "prost 0.7.0", "prost-build", "rand 0.7.3", "smallvec 1.6.1", @@ -4988,6 +5103,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "output_vt100" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53cdc5b785b7a58c5aad8216b3dfa114df64b0b06ae6e1501cef91df2fbdf8f9" +dependencies = [ + "winapi 0.3.9", +] + [[package]] name = "owning_ref" version = "0.4.1" @@ -5480,6 +5604,14 @@ dependencies = [ "sp-runtime", ] +[[package]] +name = "pallet-mq-runtime-api" +version = "0.1.0" +dependencies = [ + "phala-mq", + "sp-api", +] + [[package]] name = "pallet-multisig" version = "4.0.0-dev" @@ -6212,6 +6344,110 @@ dependencies = [ "indexmap", ] +[[package]] +name = "phala-mq" +version = "0.1.0" +dependencies = [ + "derive_more 0.99.16", + "hex", + "parity-scale-codec", + "primitive-types", + "sp-core", + "spin 0.9.2", +] + +[[package]] +name = "phala-node-rpc-ext" +version = "0.1.0" +dependencies = [ + "hex", + "impl-serde", + "jsonrpc-core", + "jsonrpc-core-client", + "jsonrpc-derive", + "log", + "pallet-mq-runtime-api", + "parity-scale-codec", + "phala-mq", + "phala-pallets", + "sc-client-api", + "sc-rpc", + "sc-transaction-pool-api", + "serde", + "sp-api", + "sp-blockchain", + "sp-runtime", + "thiserror", +] + +[[package]] +name = "phala-pallets" +version = "3.2.6" +dependencies = [ + "assert_matches", + "base64 0.11.0", + "chrono", + "fixed", + "fixed-macro", + "fixed-sqrt", + "frame-benchmarking", + "frame-support", + "frame-support-test", + "frame-system", + "hex", + "hex-literal 0.3.3", + "libsecp256k1 0.3.5", + "log", + "pallet-balances", + "pallet-randomness-collective-flip", + "pallet-timestamp", + "parity-scale-codec", + "phala-types", + "primitive-types", + "rand 0.7.3", + "serde_json", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "untrusted", + "webpki 0.22.0", + "webpki 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "phala-trie-storage" +version = "0.1.0" +dependencies = [ + "hash256-std-hasher", + "hex", + "impl-serde", + "parity-scale-codec", + "serde", + "serde_json", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-runtime", + "sp-state-machine", + "sp-trie", +] + +[[package]] +name = "phala-types" +version = "0.3.0" +dependencies = [ + "hex", + "parity-scale-codec", + "phala-mq", + "phala-trie-storage", + "prpc", + "serde", + "sp-core", + "sp-runtime", +] + [[package]] name = "pin-project" version = "0.4.28" @@ -7381,6 +7617,18 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +[[package]] +name = "pretty_assertions" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f81e1644e1b54f5a68959a29aa86cde704219254669da328ecfdf6a1f09d427" +dependencies = [ + "ansi_term 0.11.0", + "ctor", + "difference", + "output_vt100", +] + [[package]] name = "primitive-types" version = "0.10.1" @@ -7514,7 +7762,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e6984d2f1a23009bd270b8bb56d0926810a3d483f59c987d77969e9d8e840b2" dependencies = [ "bytes 1.0.1", - "prost-derive", + "prost-derive 0.7.0", +] + +[[package]] +name = "prost" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de5e2533f59d08fcf364fd374ebda0692a70bd6d7e66ef97f306f45c6c5d8020" +dependencies = [ + "bytes 1.0.1", + "prost-derive 0.8.0", ] [[package]] @@ -7529,7 +7787,7 @@ dependencies = [ "log", "multimap", "petgraph", - "prost", + "prost 0.7.0", "prost-types", "tempfile", "which", @@ -7548,6 +7806,19 @@ dependencies = [ "syn 1.0.75", ] +[[package]] +name = "prost-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "600d2f334aa05acb02a755e217ef1ab6dea4d51b58b7846588b747edec04efba" +dependencies = [ + "anyhow", + "itertools 0.10.1", + "proc-macro2 1.0.28", + "quote 1.0.9", + "syn 1.0.75", +] + [[package]] name = "prost-types" version = "0.7.0" @@ -7555,7 +7826,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b518d7cdd93dab1d1122cf07fa9a60771836c668dde9d9e2a139f957f0d9f1bb" dependencies = [ "bytes 1.0.1", - "prost", + "prost 0.7.0", +] + +[[package]] +name = "prpc" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "derive_more 0.99.16", + "parity-scale-codec", + "prost 0.8.0", ] [[package]] @@ -7961,6 +8243,18 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9c17925a9027d298a4603d286befe3f9dc0e8ed02523141914eb628798d6e5b" +[[package]] +name = "ring" +version = "0.16.20-1" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted", + "winapi 0.3.9", +] + [[package]] name = "ring" version = "0.16.20" @@ -7970,7 +8264,7 @@ dependencies = [ "cc", "libc", "once_cell", - "spin", + "spin 0.5.2", "untrusted", "web-sys", "winapi 0.3.9", @@ -8122,9 +8416,9 @@ checksum = "5d1126dcf58e93cee7d098dbda643b5f92ed724f1f6a63007c1116eed6700c81" dependencies = [ "base64 0.12.3", "log", - "ring", + "ring 0.16.20", "sct", - "webpki", + "webpki 0.21.4", ] [[package]] @@ -8135,9 +8429,9 @@ checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" dependencies = [ "base64 0.13.0", "log", - "ring", + "ring 0.16.20", "sct", - "webpki", + "webpki 0.21.4", ] [[package]] @@ -8164,6 +8458,12 @@ dependencies = [ "security-framework 2.3.1", ] +[[package]] +name = "rustversion" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61b3909d758bb75c79f23d4736fac9433868679d3ad2ea7a61e3c25cfda9a088" + [[package]] name = "ruzstd" version = "0.2.4" @@ -8243,7 +8543,7 @@ dependencies = [ "libp2p", "log", "parity-scale-codec", - "prost", + "prost 0.7.0", "prost-build", "rand 0.7.3", "sc-client-api", @@ -8839,7 +9139,7 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.11.1", "pin-project 1.0.8", - "prost", + "prost 0.7.0", "prost-build", "rand 0.7.3", "sc-block-builder", @@ -9297,7 +9597,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" dependencies = [ - "ring", + "ring 0.16.20", "untrusted", ] @@ -9606,7 +9906,7 @@ dependencies = [ "chacha20poly1305", "rand 0.7.3", "rand_core 0.5.1", - "ring", + "ring 0.16.20", "rustc_version 0.2.3", "sha2 0.9.5", "subtle 2.4.1", @@ -10346,6 +10646,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "spin" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "511254be0c5bcf062b019a6c89c01a664aa359ded62f78aa72c6fc137c0590e5" + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -10924,7 +11230,7 @@ dependencies = [ "futures-core", "rustls 0.18.1", "tokio 0.2.25", - "webpki", + "webpki 0.21.4", ] [[package]] @@ -10936,7 +11242,7 @@ dependencies = [ "futures-core", "rustls 0.19.1", "tokio 0.2.25", - "webpki", + "webpki 0.21.4", ] [[package]] @@ -11246,6 +11552,20 @@ dependencies = [ "structopt", ] +[[package]] +name = "trybuild" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bdaf2a1d317f3d58b44b31c7f6436b9b9acafe7bddfeace50897c2b804d7792" +dependencies = [ + "glob", + "lazy_static", + "serde", + "serde_json", + "termcolor", + "toml", +] + [[package]] name = "twox-hash" version = "1.6.1" @@ -11809,7 +12129,26 @@ version = "0.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" dependencies = [ - "ring", + "ring 0.16.20", + "untrusted", +] + +[[package]] +name = "webpki" +version = "0.22.0" +dependencies = [ + "ring 0.16.20", + "ring 0.16.20-1", + "untrusted", +] + +[[package]] +name = "webpki" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +dependencies = [ + "ring 0.16.20", "untrusted", ] @@ -11819,7 +12158,7 @@ version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" dependencies = [ - "webpki", + "webpki 0.21.4", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index b750978f..e48811a9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,9 +3,22 @@ panic = "unwind" [workspace] resolver = "2" + +exclude = [ + "vendor/webpki", + "vendor/ring", +] + members = [ "node", "parachains-common", + "crates/phala-types", + "crates/phala-mq", + "crates/phala-node-rpc-ext", + "crates/prpc", + "crates/phala-trie-storage", + "pallets/phala", + "pallets/phala/mq-runtime-api", "pallets/bridge", "pallets/bridge_transfer", "pallets/parachain-info", diff --git a/crates/phala-mq/.gitignore b/crates/phala-mq/.gitignore new file mode 100644 index 00000000..5a44eef0 --- /dev/null +++ b/crates/phala-mq/.gitignore @@ -0,0 +1 @@ +/Cargo.lock diff --git a/crates/phala-mq/Cargo.toml b/crates/phala-mq/Cargo.toml new file mode 100644 index 00000000..c99cedfb --- /dev/null +++ b/crates/phala-mq/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "phala-mq" +version = "0.1.0" +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +hex = { version = "0.4.3", default-features = false } +derive_more = { version = "0.99", default-features = false, features = ["display"] } +parity-scale-codec = { version = "2.2", default-features = false, features = ["derive"] } +primitive-types = { version = "0.10", default-features = false, features = ["codec", "byteorder"] } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false } + +spin = { version = "0.9", default-features = false, features = ["mutex", "use_ticket_mutex"], optional = true } + +[features] +default = ["dispatcher", "queue", "signers"] +dispatcher = ["spin"] +queue = ["spin"] +signers = ["sp-core/full_crypto"] diff --git a/crates/phala-mq/src/dispatcher.rs b/crates/phala-mq/src/dispatcher.rs new file mode 100644 index 00000000..4679d594 --- /dev/null +++ b/crates/phala-mq/src/dispatcher.rs @@ -0,0 +1,168 @@ +use core::marker::PhantomData; + +use alloc::{collections::BTreeMap, vec::Vec}; + +use crate::simple_mpsc::{channel, ReceiveError, Receiver as RawReceiver, Sender, Seq}; +use crate::types::{Message, Path}; +use crate::{BindTopic, MessageOrigin}; +use derive_more::Display; +use parity_scale_codec::{Decode, Error as CodecError}; + +impl Seq for (u64, Message) { + fn seq(&self) -> u64 { + self.0 + } +} + +#[derive(Default)] +pub struct MessageDispatcher { + subscribers: BTreeMap>>, + local_index: u64, + //match_subscribers: Vec>>, +} + +pub type Receiver = RawReceiver<(u64, T)>; + +impl MessageDispatcher { + pub fn new() -> Self { + MessageDispatcher { + subscribers: Default::default(), + local_index: 0, + } + } + + /// Subscribe messages which are sent to `path`. + /// Returns a Receiver channel end. + pub fn subscribe(&mut self, path: impl Into) -> Receiver { + let (rx, tx) = channel(); + let entry = self.subscribers.entry(path.into()).or_default(); + entry.push(tx); + rx + } + + /// Subscribe messages which implementing BindTopic + /// Returns a TypedReceiver channel end. + pub fn subscribe_bound(&mut self) -> TypedReceiver { + self.subscribe(::topic()).into() + } + + /// Dispatch a message. + /// Returns number of receivers dispatched to. + pub fn dispatch(&mut self, message: Message) -> usize { + let mut count = 0; + let sn = self.local_index; + self.local_index += 1; + if let Some(receivers) = self.subscribers.get_mut(message.destination.path()) { + receivers.retain(|receiver| { + if let Err(error) = receiver.send((sn, message.clone())) { + use crate::simple_mpsc::SendError::*; + match error { + ReceiverGone => false, + } + } else { + count += 1; + true + } + }); + } + count + } + + pub fn reset_local_index(&mut self) { + self.local_index = 0; + } + + /// Drop all unhandled messages. + pub fn clear(&mut self) -> usize { + let mut count = 0; + for subscriber in self.subscribers.values_mut().flatten() { + count += subscriber.clear(); + } + count + } +} + +#[derive(Display, Debug)] +pub enum TypedReceiveError { + #[display(fmt = "All senders of the channel have gone")] + SenderGone, + #[display(fmt = "Decode message failed: {}", _0)] + CodecError(CodecError), +} + +impl From for TypedReceiveError { + fn from(e: CodecError) -> Self { + Self::CodecError(e) + } +} + +pub struct TypedReceiver { + queue: Receiver, + _t: PhantomData, +} + +impl TypedReceiver { + pub fn try_next(&mut self) -> Result, TypedReceiveError> { + let message = self.queue.try_next().map_err(|e| match e { + ReceiveError::SenderGone => TypedReceiveError::SenderGone, + })?; + let (sn, msg) = match message { + None => return Ok(None), + Some(m) => m, + }; + let typed = Decode::decode(&mut &msg.payload[..])?; + Ok(Some((sn, typed, msg.sender))) + } + + pub fn peek_ind(&self) -> Result, ReceiveError> { + self.queue.peek_ind() + } +} + +impl From> for TypedReceiver { + fn from(queue: Receiver) -> Self { + Self { + queue, + _t: Default::default(), + } + } +} + +#[macro_export] +macro_rules! select { + ( + $( $bind:pat = $mq:expr => $block:expr, )+ + ) => {{ + let mut min = None; + let mut min_ind = 0; + let mut ind = 0; + $({ + match $mq.peek_ind() { + Ok(Some(sn)) => match min { + None => { min = Some(sn); min_ind = ind; } + Some(old) if sn < old => { min = Some(sn); min_ind = ind; } + _ => (), + }, + Err(_) => { min = Some(0); min_ind = ind; } + _ => (), + } + ind += 1; + })+ + + let mut ind = 0; + let mut rv = None; + if min.is_some() { + $({ + if min_ind == ind { + let msg = $mq.try_next().transpose(); + rv = match msg { + Some($bind) => Some($block), + None => None + }; + } + ind += 1; + })+ + } + rv + }}; +} diff --git a/crates/phala-mq/src/lib.rs b/crates/phala-mq/src/lib.rs new file mode 100644 index 00000000..13bf52b9 --- /dev/null +++ b/crates/phala-mq/src/lib.rs @@ -0,0 +1,44 @@ +#![no_std] + +#[cfg(feature = "sgx")] +pub extern crate serde_sgx as serde; + +extern crate alloc; + +mod signer; +pub mod types; + +#[cfg(feature = "dispatcher")] +mod dispatcher; +#[cfg(feature = "queue")] +mod send_queue; +#[cfg(any(feature = "queue", feature = "dispatcher"))] +mod simple_mpsc; + +#[cfg(feature = "dispatcher")] +pub use dispatcher::{MessageDispatcher, TypedReceiveError, TypedReceiver}; +#[cfg(feature = "queue")] +pub use send_queue::{MessageChannel, MessageSendQueue}; +#[cfg(any(feature = "queue", feature = "dispatcher"))] +pub use simple_mpsc::{ReceiveError, Receiver}; + +pub use signer::MessageSigner; + +pub use types::*; + +// TODO.kevin: use std::sync::Mutex instead. +// See: +// https://matklad.github.io/2020/01/02/spinlocks-considered-harmful.html +// https://matklad.github.io/2020/01/04/mutexes-are-faster-than-spinlocks.html +#[cfg(any(feature = "queue", feature = "dispatcher"))] +use spin::mutex::Mutex; + +#[cfg(all(feature = "queue", feature = "signers"))] +pub use alias::*; + +#[cfg(all(feature = "queue", feature = "signers"))] +mod alias { + use super::*; + use sp_core::sr25519; + pub type Sr25519MessageChannel = MessageChannel; +} diff --git a/crates/phala-mq/src/send_queue.rs b/crates/phala-mq/src/send_queue.rs new file mode 100644 index 00000000..2f38e042 --- /dev/null +++ b/crates/phala-mq/src/send_queue.rs @@ -0,0 +1,148 @@ +use crate::types::{Message, MessageToBeSigned, SignedMessage}; +use crate::{MessageOrigin, MessageSigner, Mutex, SenderId}; +use alloc::{collections::BTreeMap, sync::Arc, vec::Vec}; + + +#[derive(Default)] +struct Channel { + sequence: u64, + messages: Vec, + dummy: bool, +} + +#[derive(Clone, Default)] +pub struct MessageSendQueue { + inner: Arc>>, +} + +impl MessageSendQueue { + pub fn new() -> Self { + MessageSendQueue { + inner: Default::default(), + } + } + + pub fn channel(&self, sender: SenderId, signer: Si) -> MessageChannel { + MessageChannel::new(self.clone(), sender, signer) + } + + pub fn enqueue_message( + &self, + sender: SenderId, + constructor: impl FnOnce(u64) -> SignedMessage, + ) { + let mut inner = self.inner.lock(); + let entry = inner.entry(sender).or_default(); + if !entry.dummy { + let message = constructor(entry.sequence); + entry.messages.push(message); + } + entry.sequence += 1; + } + + pub fn set_dummy_mode(&self, sender: SenderId, dummy: bool) { + let mut inner = self.inner.lock(); + let entry = inner.entry(sender).or_default(); + entry.dummy = dummy; + } + + pub fn all_messages(&self) -> Vec { + let inner = self.inner.lock(); + inner + .iter() + .flat_map(|(_k, v)| v.messages.iter().cloned()) + .collect() + } + + pub fn all_messages_grouped(&self) -> BTreeMap> { + let inner = self.inner.lock(); + inner + .iter() + .map(|(k, v)| (k.clone(), v.messages.clone())) + .collect() + } + + pub fn messages(&self, sender: &SenderId) -> Vec { + let inner = self.inner.lock(); + inner.get(sender).map(|x| x.messages.clone()).unwrap_or_default() + } + + pub fn count_messages(&self) -> usize { + self.inner.lock() + .iter() + .map(|(_k, v)| v.messages.len()) + .sum() + } + + /// Purge the messages which are aready accepted on chain. + pub fn purge(&self, next_sequence_for: impl Fn(&SenderId) -> u64) { + let mut inner = self.inner.lock(); + for (k, v) in inner.iter_mut() { + let seq = next_sequence_for(k); + v.messages.retain(|msg| msg.sequence >= seq); + } + } +} + +pub use msg_channel::*; +mod msg_channel { + use super::*; + use crate::{types::Path, BindTopic, MessageSigner, SenderId}; + use parity_scale_codec::Encode; + + #[derive(Clone)] + pub struct MessageChannel { + queue: MessageSendQueue, + sender: SenderId, + signer: Si, + } + + impl MessageChannel { + pub fn new(queue: MessageSendQueue, sender: SenderId, signer: Si) -> Self { + MessageChannel { + queue, + sender, + signer, + } + } + + pub fn send_data(&self, payload: Vec, to: impl Into) { + let sender = self.sender.clone(); + let signer = &self.signer; + + self.queue.enqueue_message(sender.clone(), move |sequence| { + let message = Message { + sender, + destination: to.into().into(), + payload, + }; + let be_signed = MessageToBeSigned { + message: &message, + sequence, + } + .encode(); + let signature = signer.sign(&be_signed); + // TODO.kevin: log + // info!("send msg: data[{}], sig[{}], seq={}", be_signed.len(), signature.len(), sequence); + SignedMessage { + message, + sequence, + signature, + } + }) + } + + pub fn sendto(&self, message: &M, to: impl Into) { + self.send_data(message.encode(), to) + } + + pub fn send(&self, message: &M) { + self.sendto(message, ::topic()) + } + + /// Set the channel to dummy mode which increasing the sequence but dropping the message. + pub fn set_dummy(&self, dummy: bool) { + self.queue.set_dummy_mode(self.sender.clone(), dummy); + } + } +} diff --git a/crates/phala-mq/src/signer/mod.rs b/crates/phala-mq/src/signer/mod.rs new file mode 100644 index 00000000..6ec87705 --- /dev/null +++ b/crates/phala-mq/src/signer/mod.rs @@ -0,0 +1,23 @@ +use alloc::vec::Vec; + +use crate::SignedMessage; + +pub trait MessageSigner { + fn sign(&self, data: &[u8]) -> Vec; +} +pub trait MessageVerifier { + fn verify(&self, message: &SignedMessage) -> bool; +} + +#[cfg(feature = "signers")] +mod signers { + use super::MessageSigner; + use alloc::vec::Vec; + use sp_core::{crypto::Pair as PairTrait, sr25519}; + + impl MessageSigner for sr25519::Pair { + fn sign(&self, data: &[u8]) -> Vec { + PairTrait::sign(self, data).0.to_vec() + } + } +} diff --git a/crates/phala-mq/src/simple_mpsc.rs b/crates/phala-mq/src/simple_mpsc.rs new file mode 100644 index 00000000..ae9361b1 --- /dev/null +++ b/crates/phala-mq/src/simple_mpsc.rs @@ -0,0 +1,128 @@ +use crate::Mutex; +use alloc::collections::VecDeque; +use alloc::sync::Arc; +use alloc::vec::Vec; +use derive_more::Display; + +struct Channel { + deque: VecDeque, + sender_count: usize, + receiver_gone: bool, +} + +impl Channel { + fn new() -> Self { + Self::with_capacity(4) + } + + fn with_capacity(cap: usize) -> Self { + Self { + deque: VecDeque::with_capacity(cap), + sender_count: 1, + receiver_gone: false, + } + } +} + +type ArcCh = Arc>>; +pub struct Sender(ArcCh); + +#[derive(Display, Debug)] +pub enum SendError { + #[display(fmt = "The receiver of the channel has gone")] + ReceiverGone, +} + +impl Sender { + pub fn send(&self, value: T) -> Result<(), SendError> { + let mut ch = self.0.lock(); + if ch.receiver_gone { + Err(SendError::ReceiverGone) + } else { + ch.deque.push_back(value); + // TODO.kevin: awake the receiver task + Ok(()) + } + } + + pub fn clear(&self) -> usize { + let mut ch = self.0.lock(); + ch.deque.drain(..).count() + } +} + +impl Clone for Sender { + fn clone(&self) -> Sender { + self.0.lock().sender_count += 1; + Sender(self.0.clone()) + } +} + +impl Drop for Sender { + fn drop(&mut self) { + let mut inner = self.0.lock(); + inner.sender_count -= 1; + if inner.sender_count == 0 { + // TODO.kevin: awake the receiver task + } + } +} + +pub struct Receiver(ArcCh); + +#[derive(Display, Debug)] +pub enum ReceiveError { + #[display(fmt = "All senders of the channel have gone")] + SenderGone, +} + +impl Receiver { + #[allow(clippy::should_implement_trait)] + pub fn try_next(&mut self) -> Result, ReceiveError> { + let mut ch = self.0.lock(); + if let Some(value) = ch.deque.pop_front() { + return Ok(Some(value)); + } else if ch.sender_count == 0 { + return Err(ReceiveError::SenderGone); + } + Ok(None) + } + + pub fn drain(&mut self) -> impl Iterator { + let mut ch = self.0.lock(); + ch.deque.drain(..).collect::>().into_iter() + } + + pub fn clear(&mut self) { + let _ = self.0.lock().deque.drain(..); + } +} + +impl Receiver { + pub fn peek_ind(&self) -> Result, ReceiveError> { + let ch = self.0.lock(); + if let Some(value) = ch.deque.get(0) { + return Ok(Some(value.seq())); + } else if ch.sender_count == 0 { + return Err(ReceiveError::SenderGone); + } + Ok(None) + } +} + +impl Drop for Receiver { + fn drop(&mut self) { + self.0.lock().receiver_gone = true; + } +} + +pub fn channel() -> (Receiver, Sender) { + let ch = Arc::new(Mutex::new(Channel::new())); + let rx = Receiver(ch.clone()); + let tx = Sender(ch); + (rx, tx) +} + +pub trait Seq { + fn seq(&self) -> u64; +} diff --git a/crates/phala-mq/src/types.rs b/crates/phala-mq/src/types.rs new file mode 100644 index 00000000..a08849c7 --- /dev/null +++ b/crates/phala-mq/src/types.rs @@ -0,0 +1,287 @@ +use alloc::vec::Vec; +use alloc::string::String; +use core::hash::{Hash, Hasher}; +use primitive_types::H256; + +use parity_scale_codec::{Decode, Encode}; +use sp_core::crypto::{AccountId32, UncheckedFrom}; +use derive_more::Display; + +pub type Path = Vec; +pub type SenderId = MessageOrigin; +pub type ContractId = H256; +pub type AccountId = H256; + +pub fn contract_id256(id: u32) -> ContractId { + ContractId::from_low_u64_be(id as u64) +} + +/// The origin of a Phala message +// TODO: should we use XCM MultiLocation directly? +// [Reference](https://github.com/paritytech/xcm-format#multilocation-universal-destination-identifiers) +#[derive(Encode, Decode, Debug, Clone, Eq, PartialOrd, Ord, Display)] +pub enum MessageOrigin { + /// Runtime pallets (identified by pallet name) + #[display(fmt = "Pallet(\"{}\")", "String::from_utf8_lossy(_0)")] + Pallet(Vec), + /// A confidential contract + #[display(fmt = "Contract({})", "hex::encode(_0)")] + Contract(ContractId), + /// A pRuntime worker + #[display(fmt = "Worker({})", "hex::encode(_0)")] + Worker(sp_core::sr25519::Public), + /// A user + #[display(fmt = "AccountId({})", "hex::encode(_0)")] + AccountId(AccountId), + /// A remote location (parachain, etc.) + #[display(fmt = "MultiLocation({})", "hex::encode(_0)")] + MultiLocation(Vec), + /// All gatekeepers share the same origin + Gatekeeper, +} + +impl Hash for MessageOrigin { + fn hash(&self, state: &mut H) { + let encoded = Encode::encode(self); + encoded.hash(state); + } +} + +// PartialEq must agree with Hash. +// See: https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq +impl PartialEq for MessageOrigin { + fn eq(&self, other: &Self) -> bool { + let encoded_self = Encode::encode(self); + let encoded_other = Encode::encode(other); + encoded_self == encoded_other + } +} + +impl MessageOrigin { + /// Builds a new native confidential contract `MessageOrigin` + pub fn native_contract(id: u32) -> Self { + Self::Contract(contract_id256(id)) + } + + /// Returns if the origin is located off-chain + pub fn is_offchain(&self) -> bool { + matches!(self, Self::Contract(_) | Self::Worker(_) | Self::Gatekeeper) + } + + /// Returns if the origin is from a Pallet + pub fn is_pallet(&self) -> bool { + matches!(self, Self::Pallet(_)) + } + + /// Returns if the origin is from a Gatekeeper + pub fn is_gatekeeper(&self) -> bool { + matches!(self, Self::Gatekeeper) + } + + /// Returns the account id if the origin is from a user, or `Err(BadOrigin)` otherwise + pub fn account(self) -> Result { + match self { + Self::AccountId(account_id) => Ok(AccountId32::unchecked_from(account_id)), + _ => Err(BadOrigin), + } + } +} + +pub struct BadOrigin; + +/// The topic in the message queue, indicating a group of destination message receivers. +/// +/// A topic can be any non-empty binary string except there are some reserved value for the first byte. +/// +/// # The reserved values for the first byte: +/// +/// ~!@#$%&*_+-=|<>?,./;:' +/// +/// # Indicator byte +/// Meaning of some special values appearing at the first byte: +/// +/// - b'^': The topic's subscribers are on-chain only. +/// +/// # Example: +/// ```rust +/// use phala_mq::Topic; +/// +/// // An on-chain only topic. Messages sent to this topic will not be dispatched +/// // to off-chain components. +/// let an_onchain_topic = Topic::new(*b"^topic path"); +/// assert!(!an_onchain_topic.is_offchain()); +/// +/// // An normal topic. Messages sent to this topic will be dispatched to off-chain subscribers +/// // as well as on-chain ones. +/// let a_normal_topic = Topic::new(*b"topic path"); +/// assert!(a_normal_topic.is_offchain()); +/// ``` +/// +#[derive(Encode, Decode, Clone, Eq, PartialEq, Hash)] +pub struct Topic(Path); + +impl core::fmt::Debug for Topic { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + let repr = alloc::string::String::from_utf8_lossy(&self.0[..]); + f.write_str(repr.as_ref()) + } +} + +impl Topic { + const RESERVED_BYTES: &'static [u8] = b"~!@#$%&*_+-=|<>?,./;:'"; + + pub fn new(path: impl Into) -> Self { + Self(path.into()) + } + + pub fn path(&self) -> &Path { + &self.0 + } + + pub fn is_offchain(&self) -> bool { + if !self.is_valid() { + return false; + } + self.0[0] != b'^' + } + + pub fn is_valid(&self) -> bool { + if self.0.is_empty() { + return false; + } + !Self::RESERVED_BYTES.contains(&self.0[0]) + } +} + +impl From for Topic { + fn from(path: Path) -> Self { + Self::new(path) + } +} + +impl From for Path { + fn from(topic: Topic) -> Self { + topic.0 + } +} + +/// Messages implementing BindTopic can be sent without giving the destination. +pub trait BindTopic { + fn topic() -> Path; +} + +impl BindTopic for () { + fn topic() -> Path { + Vec::new() + } +} + +/// Indicates the type is a contract command +pub trait ContractCommand { + fn contract_id() -> ContractId; +} + +#[macro_export] +macro_rules! bind_topic { + ($t: ident, $path: expr) => { + impl $crate::types::BindTopic for $t { + fn topic() -> Vec { + $path.to_vec() + } + } + }; + ($t: ident<$($gt: ident),+>, $path: expr) => { + impl<$($gt),+> $crate::types::BindTopic for $t<$($gt),+> { + fn topic() -> Vec { + $path.to_vec() + } + } + } +} + +#[macro_export] +macro_rules! bind_contract32 { + ($t: ident, $id: expr) => { + impl $crate::types::ContractCommand for $t { + fn contract_id() -> $crate::types::ContractId { + $crate::types::contract_id256($id) + } + } + }; + ($t: ident<$($gt: ident),+>, $id: expr) => { + impl<$($gt),+> $crate::types::ContractCommand for $t<$($gt),+> { + fn contract_id() -> $crate::types::ContractId { + $crate::types::contract_id256($id) + } + } + } +} + +#[derive(Encode, Decode, Debug, Clone, Eq, PartialEq)] +pub struct Message { + pub sender: SenderId, + pub destination: Topic, + pub payload: Vec, +} + +impl Message { + pub fn new( + sender: impl Into, + destination: impl Into, + payload: Vec, + ) -> Self { + Message { + sender: sender.into(), + destination: Topic::new(destination), + payload, + } + } + + pub fn decode_payload(&self) -> Option { + Decode::decode(&mut &self.payload[..]).ok() + } + + pub fn decode(&self) -> Option> { + let payload = Decode::decode(&mut &self.payload[..]).ok()?; + Some(DecodedMessage { + sender: self.sender.clone(), + destination: self.destination.clone(), + payload, + }) + } +} + +pub struct DecodedMessage { + pub sender: SenderId, + pub destination: Topic, + pub payload: T, +} + +#[derive(Encode, Decode, Debug, Clone, Eq, PartialEq)] +pub struct SignedMessage { + pub message: Message, + pub sequence: u64, + pub signature: Vec, +} + +impl SignedMessage { + pub fn data_be_signed(&self) -> Vec { + MessageToBeSigned { + message: &self.message, + sequence: self.sequence, + } + .raw_data() + } +} + +#[derive(Encode)] +pub(crate) struct MessageToBeSigned<'a> { + pub(crate) message: &'a Message, + pub(crate) sequence: u64, +} + +impl<'a> MessageToBeSigned<'a> { + pub(crate) fn raw_data(&self) -> Vec { + self.encode() + } +} diff --git a/crates/phala-mq/tests/tests.rs b/crates/phala-mq/tests/tests.rs new file mode 100644 index 00000000..213b4ba0 --- /dev/null +++ b/crates/phala-mq/tests/tests.rs @@ -0,0 +1,174 @@ +use phala_mq::MessageOrigin; + +#[cfg(feature = "queue")] +#[test] +fn test_send_message() { + struct TestSigner(Vec); + + impl MessageSigner for TestSigner { + fn sign(&self, _data: &[u8]) -> Vec { + self.0.clone() + } + } + + use phala_mq::{MessageSendQueue, MessageSigner}; + let queue = MessageSendQueue::new(); + let runtime = MessageOrigin::Pallet(b"p0".to_vec()); + let worker0 = MessageOrigin::Worker(sp_core::sr25519::Public::from_raw([0u8; 32])); + + { + let signer = TestSigner(b"key0".to_vec()); + + let handle00 = queue.channel(runtime.clone(), signer); + + handle00.send_data(b"payload00".to_vec(), b"phala.network/test0".to_vec()); + + let signer = TestSigner(b"key1".to_vec()); + + let handle01 = queue.channel(runtime.clone(), signer); + handle01.send_data(b"payload01".to_vec(), b"phala.network/test1".to_vec()); + + handle00.send_data(b"payload02".to_vec(), b"phala.network/test1".to_vec()); + + let messages = queue.all_messages(); + + assert_eq!(messages.len(), 3); + + assert_eq!(messages[0].message.sender, runtime); + assert_eq!(messages[0].sequence, 0); + assert_eq!(messages[0].signature, b"key0"); + + assert_eq!(messages[1].message.sender, runtime); + assert_eq!(messages[1].sequence, 1); + assert_eq!(messages[1].signature, b"key1"); + + assert_eq!(messages[2].message.sender, runtime); + assert_eq!(messages[2].sequence, 2); + assert_eq!(messages[2].signature, b"key0"); + } + + { + let signer = TestSigner(b"a key".to_vec()); + let handle = queue.channel(worker0.clone(), signer); + + handle.send_data(b"energy".to_vec(), b"/the/hole".to_vec()); + handle.send_data(b"energy".to_vec(), b"/the/hole".to_vec()); + handle.send_data(b"energy".to_vec(), b"/the/hole".to_vec()); + + assert_eq!(queue.messages(&worker0).len(), 3); + } + + { + queue.purge(|sender| match &sender { + MessageOrigin::Pallet(_) => 1, + _ => 0, + }); + + let runtime_msgs = queue.messages(&runtime); + let contract1_msgs = queue.messages(&worker0); + + assert_eq!(runtime_msgs.len(), 2); + assert_eq!(contract1_msgs.len(), 3); + } +} + +#[cfg(feature = "dispatcher")] +#[test] +fn test_dispatcher() { + use phala_mq::{Message, MessageDispatcher}; + let sender0 = MessageOrigin::Pallet(b"sender0".to_vec()); + let sender1 = MessageOrigin::Pallet(b"sender1".to_vec()); + + let mut dispatcher = MessageDispatcher::new(); + + let mut sub0 = dispatcher.subscribe(*b"path0"); + let mut sub1 = dispatcher.subscribe(*b"path1"); + + let n = dispatcher.dispatch(Message::new( + sender0.clone(), + *b"path0", + b"payload0".to_vec(), + )); + assert_eq!(n, 1); + + let mut sub2 = dispatcher.subscribe(*b"path0"); + let n = dispatcher.dispatch(Message::new( + sender0.clone(), + *b"path1", + b"payload1".to_vec(), + )); + assert_eq!(n, 1); + let _ = dispatcher.dispatch(Message::new( + sender1.clone(), + *b"path1", + b"payload2".to_vec(), + )); + let n = dispatcher.dispatch(Message::new( + sender1.clone(), + *b"path0", + b"payload3".to_vec(), + )); + assert_eq!(n, 2); + + { + let msgs: Vec = sub0.drain().map(|x| x.1).collect(); + assert_eq!(msgs.len(), 2); + assert_eq!(&msgs[0].sender, &sender0); + assert_eq!(msgs[0].destination.path(), b"path0"); + assert_eq!(msgs[0].payload, b"payload0"); + assert_eq!(&msgs[1].sender, &sender1); + assert_eq!(msgs[1].destination.path(), b"path0"); + assert_eq!(msgs[1].payload, b"payload3"); + } + { + let msgs: Vec = sub1.drain().map(|x| x.1).collect(); + + assert_eq!(msgs.len(), 2); + assert_eq!(&msgs[0].sender, &sender0); + assert_eq!(msgs[0].destination.path(), b"path1"); + assert_eq!(msgs[0].payload, b"payload1"); + assert_eq!(&msgs[1].sender, &sender1); + assert_eq!(msgs[1].destination.path(), b"path1"); + assert_eq!(msgs[1].payload, b"payload2"); + } + { + let msgs: Vec = sub2.drain().map(|x| x.1).collect(); + assert_eq!(msgs.len(), 1); + assert_eq!(&msgs[0].sender, &sender1); + assert_eq!(msgs[0].destination.path(), b"path0"); + assert_eq!(msgs[0].payload, b"payload3"); + } +} + +#[cfg(feature = "dispatcher")] +#[test] +fn test_select_order() { + use phala_mq::{Message, MessageDispatcher}; + + let sender = MessageOrigin::Pallet(b"sender1".to_vec()); + let mut dispatcher = MessageDispatcher::new(); + + let mut sub0 = dispatcher.subscribe(*b"path0"); + let mut sub1 = dispatcher.subscribe(*b"path1"); + + dispatcher.dispatch(Message::new(sender.clone(), *b"path0", b"0".to_vec())); + dispatcher.dispatch(Message::new(sender.clone(), *b"path1", b"1".to_vec())); + dispatcher.dispatch(Message::new(sender.clone(), *b"path0", b"2".to_vec())); + dispatcher.dispatch(Message::new(sender.clone(), *b"path0", b"3".to_vec())); + dispatcher.dispatch(Message::new(sender.clone(), *b"path1", b"4".to_vec())); + let mut payloads = Vec::new(); + loop { + let ok = phala_mq::select! { + msg = sub0 => { + payloads.push(msg.unwrap().0); + }, + msg = sub1 => { + payloads.push(msg.unwrap().0); + }, + }; + if ok.is_none() { + break; + } + } + assert_eq!(payloads, [0, 1, 2, 3, 4]); +} diff --git a/crates/phala-node-rpc-ext/Cargo.toml b/crates/phala-node-rpc-ext/Cargo.toml new file mode 100644 index 00000000..e6a1c7d9 --- /dev/null +++ b/crates/phala-node-rpc-ext/Cargo.toml @@ -0,0 +1,34 @@ +[package] +name = "phala-node-rpc-ext" +version = "0.1.0" +edition = "2018" +authors = ["Phala Network"] +license = "Apache-2.0" +homepage = "https://phala.network/" +repository = "https://github.com/Phala-Network/phala-blockchain" + +[dependencies] +# third-party dependencies +serde = { version = "1.0.102", features = ["derive"] } +thiserror = "1.0" +jsonrpc-derive = "15.1.0" +jsonrpc-core = "15.1.0" +jsonrpc-core-client = "15.1.0" +impl-serde = "0.3" +log = { version = "0.4.14", default-features = false } +hex = { version = "0.4.3", default-features = false } +codec = { version = "2.2", package = "parity-scale-codec" } + +# primitives +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9" } + +# client dependencies +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9" } +sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9" } +sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9" } + +phala-mq = { path = "../../crates/phala-mq", default-features = false } +phala-pallets = { path = "../../pallets/phala", default-features = false } +pallet-mq-runtime-api = { path = "../../pallets/phala/mq-runtime-api", default-features = false } diff --git a/crates/phala-node-rpc-ext/src/lib.rs b/crates/phala-node-rpc-ext/src/lib.rs new file mode 100644 index 00000000..8ccfdd07 --- /dev/null +++ b/crates/phala-node-rpc-ext/src/lib.rs @@ -0,0 +1,130 @@ +use std::marker::PhantomData; +use std::sync::Arc; + +use jsonrpc_derive::rpc; +use mq_seq::Error as MqSeqError; +use pallet_mq_runtime_api::MqApi; +use sc_client_api::blockchain::{HeaderBackend, HeaderMetadata}; +use sc_client_api::{backend, Backend, BlockBackend, StorageProvider}; +use sc_transaction_pool_api::{InPoolTransaction, TransactionPool}; +use serde::{Deserialize, Serialize}; +use sp_api::{ApiExt, Core, ProvideRuntimeApi, StateBackend}; +use sp_runtime::traits::Header; +use sp_runtime::{generic::BlockId, traits::Block as BlockT}; +use std::fmt::Display; +use storage_changes::Error as StorageChangesError; + +pub use storage_changes::{GetStorageChangesResponse, MakeInto, StorageChanges}; + +mod mq_seq; +mod storage_changes; + +/// Base code for all errors. +const CUSTOM_RPC_ERROR: i64 = 10000; + +#[rpc] +pub trait NodeRpcExtApi { + /// Return the storage changes made by each block one by one from `from` to `to`(both inclusive). + /// To get better performance, the client should limit the amount of requested block properly. + /// 100 blocks for each call should be OK. REQUESTS FOR TOO LARGE NUMBER OF BLOCKS WILL BE REJECTED. + #[rpc(name = "pha_getStorageChanges")] + fn get_storage_changes( + &self, + from: BlockHash, + to: BlockHash, + ) -> Result; + + /// Return the next mq sequence number for given sender which take the ready transactions in count. + #[rpc(name = "pha_getMqNextSequence")] + fn get_mq_seq(&self, sender_hex: String) -> Result; +} + +/// Stuffs for custom RPC +struct NodeRpcExt { + client: Arc, + backend: Arc, + is_archive_mode: bool, + pool: Arc

, + _phantom: PhantomData, +} + +impl NodeRpcExt { + fn new(client: Arc, backend: Arc, is_archive_mode: bool, pool: Arc

) -> Self { + Self { + client, + backend, + is_archive_mode, + pool, + _phantom: Default::default(), + } + } +} + +impl NodeRpcExtApi + for NodeRpcExt +where + BE: Backend, + Client: StorageProvider + + HeaderBackend + + BlockBackend + + HeaderMetadata + + ProvideRuntimeApi, + Client::Api: + sp_api::Metadata + ApiExt>, + Client::Api: MqApi, + Block: BlockT + 'static, + <::Header as Header>::Number: Into, + P: TransactionPool + 'static, +{ + fn get_storage_changes( + &self, + from: Block::Hash, + to: Block::Hash, + ) -> Result { + if !self.is_archive_mode { + Err(StorageChangesError::Unavailable( + r#"Add "--pruning=archive" to the command line to enable this RPC"#.into(), + )) + } else { + storage_changes::get_storage_changes( + self.client.as_ref(), + self.backend.as_ref(), + from, + to, + ) + } + } + + fn get_mq_seq(&self, sender_hex: String) -> Result { + mq_seq::get_mq_seq(&*self.client, &self.pool, sender_hex) + } +} + +pub fn extend_rpc( + io: &mut jsonrpc_core::IoHandler, + client: Arc, + backend: Arc, + is_archive_mode: bool, + pool: Arc

, +) where + BE: Backend + 'static, + Client: StorageProvider + + HeaderBackend + + BlockBackend + + HeaderMetadata + + ProvideRuntimeApi + + 'static, + Block: BlockT + 'static, + Client::Api: + sp_api::Metadata + ApiExt>, + Client::Api: MqApi, + <::Header as Header>::Number: Into, + P: TransactionPool + 'static, +{ + io.extend_with(NodeRpcExtApi::to_delegate(NodeRpcExt::new( + client, + backend, + is_archive_mode, + pool, + ))); +} diff --git a/crates/phala-node-rpc-ext/src/mq_seq.rs b/crates/phala-node-rpc-ext/src/mq_seq.rs new file mode 100644 index 00000000..28db7482 --- /dev/null +++ b/crates/phala-node-rpc-ext/src/mq_seq.rs @@ -0,0 +1,86 @@ +use super::*; +use codec::Decode; +use pallet_mq_runtime_api::MqApi; +use phala_mq::MessageOrigin; +use phala_pallets::mq::tag; +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum Error { + #[error("invalid sender")] + InvalidSender, + #[error("{0}")] + ApiError(#[from] sp_api::ApiError), +} + +impl From for jsonrpc_core::Error { + fn from(e: Error) -> Self { + jsonrpc_core::Error { + code: jsonrpc_core::ErrorCode::ServerError(CUSTOM_RPC_ERROR), + message: e.to_string(), + data: None, + } + } +} + +pub(super) fn get_mq_seq( + client: &Client, + pool: &Arc

, + sender_hex: String, +) -> Result +where + BE: Backend, + Client: StorageProvider + + HeaderBackend + + BlockBackend + + HeaderMetadata + + ProvideRuntimeApi, + Block: BlockT + 'static, + Client::Api: + sp_api::Metadata + ApiExt>, + Client::Api: MqApi, + <::Header as Header>::Number: Into, + P: TransactionPool, +{ + let sender_scl = hex::decode(sender_hex).map_err(|_| Error::InvalidSender)?; + let sender = MessageOrigin::decode(&mut &sender_scl[..]).map_err(|_| Error::InvalidSender)?; + + let api = client.runtime_api(); + let best_hash = client.info().best_hash; + let at = BlockId::hash(best_hash); + + let seq = api.sender_sequence(&at, &sender)?.unwrap_or(0); + + log::debug!(target: "rpc-ext", "State seq for {}: {}", sender, seq); + + // Now we need to query the transaction pool + // and find transactions originating from the same sender. + // + // Since extrinsics are opaque to us, we look for them using + // `provides` tag. And increment the sequence if we find a transaction + // that matches the current one. + let mut current_seq = seq.clone(); + let mut current_tag = tag(&sender, seq); + for tx in pool.ready() { + log::debug!( + target: "rpc-ext", + "Current seq to {}, checking {} vs {:?}", + current_seq, + hex::encode(¤t_tag), + tx.provides().iter().map(|x| format!("{}", hex::encode(x))).collect::>(), + ); + // since transactions in `ready()` need to be ordered by sequence + // it's fine to continue with current iterator. + for tg in tx.provides() { + if tg == ¤t_tag { + current_seq += 1; + current_tag = tag(&sender, current_seq); + break; + } + } + } + + log::debug!(target: "rpc-ext", "return seq {}", current_seq); + + Ok(current_seq) +} diff --git a/crates/phala-node-rpc-ext/src/storage_changes.rs b/crates/phala-node-rpc-ext/src/storage_changes.rs new file mode 100644 index 00000000..8ffa589c --- /dev/null +++ b/crates/phala-node-rpc-ext/src/storage_changes.rs @@ -0,0 +1,210 @@ +use super::*; + +/// State RPC errors. +#[derive(Debug, thiserror::Error)] +pub enum Error { + /// Provided block range couldn't be resolved to a list of blocks. + #[error("Cannot resolve a block range ['{from}' ... '{to}].")] + InvalidBlockRange { + /// Beginning of the block range. + from: String, + /// End of the block range. + to: String, + }, + + /// Aborted due resource limiting such as MAX_NUMBER_OF_BLOCKS. + #[error("Resource limited, {0}.")] + ResourceLimited(String), + + /// Error occurred while processing some block. + #[error("Error occurred while processing the block {0}.")] + InvalidBlock(String), + + /// The RPC is unavailable. + #[error("This RPC is unavailable. {0}")] + Unavailable(String), +} + +impl Error { + fn invalid_block(id: BlockId, error: E) -> Self { + Self::InvalidBlock(format!("{}: {}", id, error)) + } +} + +impl From for jsonrpc_core::Error { + fn from(e: Error) -> Self { + jsonrpc_core::Error { + code: jsonrpc_core::ErrorCode::ServerError(CUSTOM_RPC_ERROR), + message: e.to_string(), + data: None, + } + } +} + +/// Storage key. +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct StorageKey(#[serde(with = "impl_serde::serialize")] Vec); + +/// Storage value. +pub type StorageValue = StorageKey; + +/// In memory array of storage values. +pub type StorageCollection = Vec<(K, Option)>; + +/// In memory arrays of storage values for multiple child tries. +pub type ChildStorageCollection = Vec<(K, StorageCollection)>; + +#[derive(Serialize, Deserialize, Clone, Debug)] +#[serde(rename_all = "camelCase")] +pub struct StorageChanges { + /// A value of `None` means that it was deleted. + pub main_storage_changes: StorageCollection, + /// All changes to the child storages. + pub child_storage_changes: ChildStorageCollection, +} + +/// Response for the `pha_getStorageChanges` RPC. +pub type GetStorageChangesResponse = Vec; + +pub(super) fn get_storage_changes( + client: &Client, + backend: &BE, + from: Block::Hash, + to: Block::Hash, +) -> Result +where + BE: Backend, + Client: StorageProvider + + HeaderBackend + + BlockBackend + + HeaderMetadata + + ProvideRuntimeApi, + Block: BlockT + 'static, + Client::Api: sp_api::Metadata + + ApiExt>, + <::Header as Header>::Number: Into, +{ + fn header, Block: BlockT>( + client: &Client, + id: BlockId, + ) -> Result { + client + .header(id) + .map_err(|e| Error::invalid_block(id, e))? + .ok_or_else(|| Error::invalid_block(id, "header not found")) + } + + let n_from: u64 = (*header(client, BlockId::Hash(from))?.number()).into(); + let n_to: u64 = (*header(client, BlockId::Hash(to))?.number()).into(); + + if n_from > n_to { + return Err(Error::InvalidBlockRange { + from: format!("{}({})", from, n_from), + to: format!("{}({})", to, n_to), + }); + } + + // TODO: Set max_number_of_blocks properly. + let max_number_of_blocks = 10000u64; + if n_to - n_from > max_number_of_blocks { + return Err(Error::ResourceLimited("Too large number of blocks".into())); + } + + let api = client.runtime_api(); + let mut changes = vec![]; + let mut this_block = to; + + loop { + let id = BlockId::Hash(this_block); + let mut header = header(client, id)?; + let extrinsics = client + .block_body(&id) + .map_err(|e| Error::invalid_block(id, e))? + .ok_or_else(|| Error::invalid_block(id, "block body not found"))?; + let parent_hash = *header.parent_hash(); + let parent_id = BlockId::Hash(parent_hash); + + if (*header.number()).into() == 0u64 { + let state = backend + .state_at(id) + .map_err(|e| Error::invalid_block(parent_id, e))?; + changes.push(StorageChanges { + main_storage_changes: state + .pairs() + .into_iter() + .map(|(k, v)| (StorageKey(k), Some(StorageKey(v)))) + .collect(), + child_storage_changes: vec![], + }); + break; + } + + // Remove all `Seal`s as they are added by the consensus engines after building the block. + // On import they are normally removed by the consensus engine. + header.digest_mut().logs.retain(|d| d.as_seal().is_none()); + + let block = Block::new(header, extrinsics); + api.execute_block(&parent_id, block) + .map_err(|e| Error::invalid_block(id, e))?; + + let state = backend + .state_at(parent_id) + .map_err(|e| Error::invalid_block(parent_id, e))?; + + let storage_changes = api + .into_storage_changes(&state, None, parent_hash) + .map_err(|e| Error::invalid_block(parent_id, e))?; + + changes.push(StorageChanges { + main_storage_changes: storage_changes.main_storage_changes.into_(), + child_storage_changes: storage_changes.child_storage_changes.into_(), + }); + if this_block == from { + break; + } else { + this_block = parent_hash; + } + } + changes.reverse(); + Ok(changes) +} + +// Stuffs to convert ChildStorageCollection and StorageCollection types, +// in order to dump the keys values into hex strings instead of list of dec numbers. +pub trait MakeInto: Sized { + fn into_(self) -> T; +} + +impl MakeInto for Vec { + fn into_(self) -> StorageKey { + StorageKey(self) + } +} + +impl MakeInto> for StorageKey { + fn into_(self) -> Vec { + self.0 + } +} + +impl, T> MakeInto> for Option { + fn into_(self) -> Option { + self.map(|v| v.into_()) + } +} + +impl MakeInto<(T1, T2)> for (F1, F2) +where + F1: MakeInto, + F2: MakeInto, +{ + fn into_(self) -> (T1, T2) { + (self.0.into_(), self.1.into_()) + } +} + +impl, T> MakeInto> for Vec { + fn into_(self) -> Vec { + self.into_iter().map(|v| v.into_()).collect() + } +} diff --git a/crates/phala-trie-storage/.gitignore b/crates/phala-trie-storage/.gitignore new file mode 100644 index 00000000..ea8c4bf7 --- /dev/null +++ b/crates/phala-trie-storage/.gitignore @@ -0,0 +1 @@ +/target diff --git a/crates/phala-trie-storage/Cargo.toml b/crates/phala-trie-storage/Cargo.toml new file mode 100644 index 00000000..3b98d9cc --- /dev/null +++ b/crates/phala-trie-storage/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "phala-trie-storage" +version = "0.1.0" +edition = "2018" +authors = ["Phala Network"] +license = "Apache-2.0" +homepage = "https://phala.network/" +repository = "https://github.com/Phala-Network/phala-blockchain" + +[dependencies] +parity-scale-codec = { version = "2.2", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false, features = ["full_crypto"] } +sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false, features = ["disable_panic_handler", "disable_oom", "disable_allocator"] } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false } + +serde = { version = "1.0", default-features = false, features = ["derive", "alloc"], optional = true } + +[dev-dependencies] +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false, features = ["full_crypto"] } +hash256-std-hasher = { version = "0.15", default-features = false } +hex = "0.4" +serde_json = "1.0" +impl-serde = "0.3" + +[features] +default = ["serde"] diff --git a/crates/phala-trie-storage/src/lib.rs b/crates/phala-trie-storage/src/lib.rs new file mode 100644 index 00000000..959bbc53 --- /dev/null +++ b/crates/phala-trie-storage/src/lib.rs @@ -0,0 +1,118 @@ +#![no_std] + +extern crate alloc; + +#[cfg(feature = "serde")] +pub mod ser; + +use alloc::vec::Vec; + +use parity_scale_codec::Codec; +use sp_core::storage::ChildInfo; +use sp_core::Hasher; +use sp_state_machine::{Backend, TrieBackend}; +use sp_trie::{trie_types::TrieDBMut, MemoryDB, TrieMut}; + +/// Storage key. +pub type StorageKey = Vec; + +/// Storage value. +pub type StorageValue = Vec; + +/// In memory array of storage values. +pub type StorageCollection = Vec<(StorageKey, Option)>; + +/// In memory arrays of storage values for multiple child tries. +pub type ChildStorageCollection = Vec<(StorageKey, StorageCollection)>; + +pub struct TrieStorage(TrieBackend, H>); + +impl Default for TrieStorage +where + H::Out: Codec, +{ + fn default() -> Self { + Self(TrieBackend::new(Default::default(), Default::default())) + } +} + +impl TrieStorage +where + H::Out: Codec + Ord, +{ + /// Overwrite all data in the trie DB with given key/value pairs. + pub fn load(&mut self, pairs: impl Iterator, impl AsRef<[u8]>)>) { + let trie_be = core::mem::take(self).0; + let mut root = Default::default(); + let mut mdb = trie_be.into_storage(); + mdb.clear(); + { + let mut trie_db = TrieDBMut::new(&mut mdb, &mut root); + for (key, value) in pairs { + if trie_db.insert(key.as_ref(), value.as_ref()).is_err() { + panic!("Insert item into trie DB should not fail"); + } + } + } + let _ = core::mem::replace(&mut self.0, TrieBackend::new(mdb, root)); + } + + /// Calculate the new state root given storage changes. Returns the new root and a transaction to apply. + #[allow(clippy::ptr_arg)] + pub fn calc_root_if_changes<'a>( + &self, + delta: &'a StorageCollection, + child_deltas: &'a ChildStorageCollection, + ) -> (H::Out, MemoryDB) { + let child_deltas: Vec<(ChildInfo, &StorageCollection)> = child_deltas + .iter() + .map(|(k, v)| { + let chinfo = ChildInfo::new_default(k); + (chinfo, v) + }) + .collect(); + self.0.full_storage_root( + delta + .iter() + .map(|(k, v)| (k.as_ref(), v.as_ref().map(|v| v.as_ref()))), + child_deltas.iter().map(|(k, v)| { + ( + k, + v.iter() + .map(|(k, v)| (k.as_ref(), v.as_ref().map(|v| v.as_ref()))), + ) + }), + ) + } + + /// Apply storage changes calculated from `calc_root_if_changes`. + pub fn apply_changes(&mut self, root: H::Out, transaction: MemoryDB) { + self.0.backend_storage_mut().consolidate(transaction); + // TODO: purge in a lower frequency for better performance. + self.0.backend_storage_mut().purge(); + let trie_be = core::mem::take(self).0; + let _ = core::mem::replace(&mut self.0, TrieBackend::new(trie_be.into_storage(), root)); + } + + /// Return the state root hash + pub fn root(&self) -> &H::Out { + self.0.root() + } + + /// Given storage key return storage value + pub fn get(&self, key: impl AsRef<[u8]>) -> Option> { + self.0.storage(key.as_ref()).ok().flatten() + } + + /// Return storage pairs which start with given storage key prefix + pub fn pairs(&self, prefix: impl AsRef<[u8]>) -> Vec<(Vec, Vec)> { + self.0 + .keys(prefix.as_ref()) + .into_iter() + .map(|key| { + let value = self.get(&key).expect("Reflected key should exists"); + (key, value) + }) + .collect() + } +} diff --git a/crates/phala-trie-storage/src/ser.rs b/crates/phala-trie-storage/src/ser.rs new file mode 100644 index 00000000..fe44a1f3 --- /dev/null +++ b/crates/phala-trie-storage/src/ser.rs @@ -0,0 +1,18 @@ +use alloc::vec::Vec; +use serde::{Deserialize, Serialize}; +use parity_scale_codec::{Encode, Decode}; + +use super::{ChildStorageCollection, StorageCollection}; + +#[derive(Serialize, Deserialize, Encode, Decode, Clone, Debug, Default)] +#[serde(rename_all = "camelCase", crate = "serde")] +pub struct StorageChanges { + pub main_storage_changes: StorageCollection, + pub child_storage_changes: ChildStorageCollection, +} + +#[derive(Serialize, Deserialize, Encode, Decode, Clone, Debug)] +#[serde(crate = "serde")] +pub struct StorageData { + pub inner: Vec<(Vec, Vec)>, +} diff --git a/crates/phala-trie-storage/tests/data/changes.json b/crates/phala-trie-storage/tests/data/changes.json new file mode 100644 index 00000000..3f59590f --- /dev/null +++ b/crates/phala-trie-storage/tests/data/changes.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","result":[{"childStorageChanges":[],"mainStorageChanges":[["0x11f3ba2e1cdd6d62f2ff9b5589e7ff81ba7fb8745735dc3be2a2c61a72c39e78","0x18d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a4890b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e1cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c"],["0x160f30b56aafa7a26eec6068148674c6018ca972549721220d90af177ede718332a5935f6edc617ae178fef9eb1e211fbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x204255494c54494e30840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179800000000000000000101640000000801000000040000008000000000"],["0x160f30b56aafa7a26eec6068148674c651774b991db9164d0b92ebf8d30170a4","0x08000000"],["0x160f30b56aafa7a26eec6068148674c669f1404d36d4ac0f36ef705e52f439edde1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d","0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f"],["0x160f30b56aafa7a26eec6068148674c6878d434d6125b40443fe11fd292d13a4","0x03000206"],["0x160f30b56aafa7a26eec6068148674c69d72629262c16cac33c68ea69d5560be","0x28000000"],["0x160f30b56aafa7a26eec6068148674c69e398eac426144e0109a76ba5048d71b","0x14000000"],["0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbe0e0d969b0e48cab707000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbe39b9d2792f8bd4c305000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbe47ab1c010b3bff4908000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbe5153cb1f00942ff401000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbe598b52bf1678443909000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbe9eb2dcce60f37a2702000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbeb4def25cfda6ef3a00000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbeb61f803a716bd3b906000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbebfb27f1eaef06bb903000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbed9c986912843223804000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0x160f30b56aafa7a26eec6068148674c69f22aa01729ed4ece3529364da1e677d","0x0a000000"],["0x160f30b56aafa7a26eec6068148674c6b04b1cafc8a27d9b578908a17470e55332a5935f6edc617ae178fef9eb1e211fbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d00000000be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f"],["0x160f30b56aafa7a26eec6068148674c6e41b6264a7cb4bfa399721dac9486ad1","0x05000000"],["0x1809d78346727a0ef58c0fa03bafa323878d434d6125b40443fe11fd292d13a4","0x03000000"],["0x1a736d37504c2e3fb73dad160c55b291878d434d6125b40443fe11fd292d13a4","0x03000000"],["0x1cb6f36e027abb2091cfb5110ab5087f5e0621c4869aa60c02be9adcc98a0d1d","0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0100000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f66e8f035c8adbe7f1547b43c51e6f8a4","0x00000000"],["0x1cb6f36e027abb2091cfb5110ab5087f878d434d6125b40443fe11fd292d13a4","0x03000000"],["0x1cb6f36e027abb2091cfb5110ab5087faacf00b9b41fda7a9268821c2a2b3e4c","0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0100000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fdc6b171b77304263c292cc3ea5ed31ef","0x0100000000000000040000000000000001"],["0x2099d7f109d6e535fb000bba623fd4404c014e6bf8b8c2c011e7290b85696bb3","0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"],["0x2099d7f109d6e535fb000bba623fd440878d434d6125b40443fe11fd292d13a4","0x03000000"],["0x2099d7f109d6e535fb000bba623fd4409f99a2ce711f3a31b2fc05604c93f179","0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x0000000000000000000000000000000000204aa9d1010000"],["0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710","0x01"],["0x26aa394eea5630e07c48ae0c9558cef7878d434d6125b40443fe11fd292d13a4","0x03000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x4545454545454545454545454545454545454545454545454545454545454545"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000","0x4545454545454545454545454545454545454545454545454545454545454545"],["0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439","0x01"],["0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9007cbc1270b5b091758f9c42f5915b3e8ac59e11963af19174d0b94d5d78041c233f55d2e19324665bafdfb62925af2d","0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da923a05cabf6d3bde7ca3ef0d11596b5611cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c","0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da932a5935f6edc617ae178fef9eb1e211fbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x000000000300000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000c16ff286230000000000000000000000c16ff28623000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da94f9aea1afa791265fae359272badc1cf8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48","0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da95ecffd7b6c0f78751baa9d281e0bfa3a6d6f646c70792f74727372790000000000000000000000000000000000000000","0x000000000000000001000000000000000010a5d4e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da96f2e33376834a63c86a195bcf685aebbfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e","0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da98578796c363c105114787203e4d93ca6101191192fc877c24d725b337120fa3edc63d227bbc92705db1e2cb65f56981a","0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b0edae20838083f2cde1c4080db8cf8090b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22","0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b321d16960ce1d9190b61e2421cc60131e07379407fecc4b89eb7dbd287c2c781cfb1907a96947a3eb18e4f8e7198625","0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9de1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d","0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9e5e802737cce3a54b0bc9e3d3e6be26e306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20","0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9edeaa42c2163f68084a988529a0e2ec5e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e","0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9f3f619a1c2956443880db9cc9a13d058e860f1b1c7227f7c22602f53f15af80747814dffd839719731ee3bba6edc126c","0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8","0x84287068616c652d6e6f6465"],["0x2aeddc77fe58c98d50bd37f1b90840f9878d434d6125b40443fe11fd292d13a4","0x03000000"],["0x2b06af9719ac64d755623cda8ddd9b94878d434d6125b40443fe11fd292d13a4","0x03000000"],["0x2b06af9719ac64d755623cda8ddd9b949f99a2ce711f3a31b2fc05604c93f179","0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"],["0x2c5de123c468aef7f3ac2ab3a76f87ce878d434d6125b40443fe11fd292d13a4","0x03000000"],["0x2f85f1e1378cb2d7b83adbaf0b5869c2878d434d6125b40443fe11fd292d13a4","0x03000000"],["0x3a2d6c9353500637d8f8e3e0fa0bb1c5878d434d6125b40443fe11fd292d13a4","0x03000000"],["0x3a636f6465","0x52bc537646db8e0528b52ffd00583c4a057ed5860c1652107055c4e9f0323f83a3512c3cda84a40c9417c527ca9ce805947825a8e708c7f9095179b8369ef75f19e8c5cb88f184d014d1fd8dc2184670b3ab2f2fa32c3d9b094e6db3d8c2107ceb262222b4c9967b0732161f155e17075b4f802096bb3ffc2c1396d27c5609cd835e9191d42fe44a6bbe8bc61e36770745cfec3ef223412b321990bddfd266b0a439a4a44a229148fd4264f2e8a0e6b3391c85e413ae275c23d207f9b56a90ef6bbeff1edeb27b1d09f03da45d5bd49dc78ccf7b15414b047de3b5bc4f3436e0963477def5bada84559b54d6076ee097031c7dcfe9738973892362f61e8e461edd758ee8f44d77a42b8b88d9c350b8839fa570c8494e24092249f46834809c01e4909ddade95299dda1e8e387cb2aad11064e7ce264fee6ed6ecddf42aa5f14e6da6a310355ba66337f2f89ed2a95a737d4adf7c35939daab7acf92ba170f7bcae34bdfc8051942851a2ac4e8fc562b156dce9a335db3d5ab30d416e79333d6fa7f2b42dd520a43d90db65e46a82261ec89f49199144d05d71370df9d2f48dd9fdfb7dea2b513d36d6962dd9d9fb57d63cd337de2804ad82c5ca1e4ee23d09125a63b1b24e29f775b85c1f7ad61373bfd62a57220922535a536f6df99d7a65121d2ef7395a461293bd875c8924885c694dbf9666e7ef66cdfd61b37ea66f90d428d9fb3d1d87a0d9c394d23436bb53aea4f913a276657be2038c00da565b6791ef87e81b3355c403fac63ce5f48d496505e89bcef736af7c7fa371ec8a5eb151594ec9a64d4675b7ef4da4e30eef5d76f74a21fadfb751889afb5d196ee30172da7ea559737d8f42d4f77bdcd17fd8a57d58c72172da002d44f7471fd647edb08ffa7ee99baea4f9744fa6dc7cea1b1abb010ba8f7fb30fcde95debfd2eccebd8e42d4dcdd2bcd16bdb23bedba372b73e5907a9ae9d8a39bc8d5eb9bb6b54c65786ef56458f42069ec4914729f7bbffe0915f925d3d89318e4704467c26ff3fe95dcb791883ef795fd9ae9c3b08e3b9428007c87cfeee01540571d6652a3aca0f8ce9566cddce998800f04b10231b5aa7bcfaaee733ab4024957e0ea0341acba77a7f507ae894cdf2311f6dce9d803ccd82c22535ae361930bad48fbc6e45e8770ef9b22cdc18d05e03942a694c6e45e4fc71d5c3fa7b9721b7970427036a7bb92ae3891d61fbc2688b0efd1c776fbbb53797aa7f2f4667f904ad1f4cd96ed492a324e5dcd647b4f9440f89e999b2e53fae93df7e4b7f7b83c7c0bf79ef1f5ede1d323bde7e530479df079bac974187c964a37bdf8e9e7099f25d54f3f612edef41e123eadbd874fefa4c54fea4f7bfcd247179dc367cac316ef71f1f03d203ec1d7faf0844f182753a779257ffa597fc267d7ddc32778efe7e9e17bb8b7c0e7caca53f049fa87cfef2fc29f2f1ee29344fa193ee62a9e77119f5d77109f247c9607ef91eefd14efe1b353f9d97dc663fcf41e039f2b2b67c127cb49f2189f2bf82c24cb63fc241f039ff823e19f9f0a3f49a9e053e52c2c8f51616181f114081e97201882df0b96134c89e491f50361483664e94c2f3ab1da53c954ed0bd2237920c9127622cc09c6be30953af0fb48a147b294440fe6134f25b2da0a9a5e742ca48ee544b23434bcb09a5e84b729c5006968544e21e99b31e367fd8c191f0c0c8cd778f635220d1a3fc1d3a0f182244d87f11922f8195d4dcdcf17afa1a9b12616ef304ee3543a8ddbfc84b9cd8c193fc3cf8831e3363fbf8e86267c7118afe9585e5369686868fc244f039f343425d26d62c4287f8a2fbfc3f80cfc320563f3193f4f9f515323e331f059f3548ccff8093ef5d383a1ba8a4a3d1dc669caf2298c1ff332f5f267e9a53dcd6bfc34bd46b5f96d7e9a6e53554fd9bcc64f98a77edacfa8f961fc33fe9f2ffefa33fc1f23e6298ccf129fe5538fc18ff9293ea6feec1ee3353fbdd75419343fc9d3e05306cd61e053c6317ecd4fd261fcfc5e039f34685c85cf187cc65c45e5c7678b168fc1e7afa2f2989f2c8fc1678b98b7f829e21caba257dd2625a6bcc4670b7cb67879513c8c9fe061e0332575183f437cc4aae8536ef313c44b5815bd0d3e69e0277546f818f804c1afe073e5618c873f3ffc80109f60f8e313bcf85dfcf902176155f4ffc98287b02afa1a7cd2b05c063e61e013c663bcb80a9fa999c3c0e70bde6082d6ea45cf8bd7d80b7cc260ea02579655d1cf606a5532d8acaf4c7fc29e55d1e312e6c7678ccb5be01306e6270c3e4d987cc1d4aa50d8acad4cef82a955b560b3fe64fa123efd24e124ac8afe844f16fca4ae7a4c5fc167e92af889cdaa87f4147c9ac697f04922fd24e193c436234cad4a84cdea93e9476c56a04cef611c151b6155f4223e43fc24b5eab907f1f9e1275ff5f4d47b3f3d7c76f856457ff62fa656b561b3c2525645dfd8acae4cbf23e2a93bdd0ec853773e9eba5379aa388307940749635cb822b7641afb800b2c2d6fcfe91bebd3a9edf4f66571c66f3771647ad326d39ba94c6f3ed39ba74c6f9299dee28cb86756b59d8a2d1ca165d98043a9af762fc8eb6879b32f0e53ab325b289bf695b70b41f2ac5c422c9043eacd5a31121a255b57a7b6e7b44b780569d659de1e5628ec2b0eaf20ede9b8c3de078d922d36794ab3b272bdb795b5ba38bc82dc2e044957db73acc543eecdfbeebe9d8e0be0dee1138a7b0ed798556d38bc82bc18d5a3b23696c5e9a167684287284441c11c4cd05a4121eb9bfaed356671e88a87083f40c32ce8063998021156666de90802156be8011cac50d3c1caac2e1e1b40c103141b0cc1410d6d5899d5875af18127a8500736b0a0c78a95595f3c2df0c0169c488216e810148395597ff2168304394c71842d38a9031a566685e58d0bb51fd0c089160c25810e2bb302e50d8758202b2bd3bc9dce6c7888a5652ab3e3f174732208e9e98c4963d97ea339eee9c35bdee89475659b7a8be3dd3e6571bedbbf70b7c741739cd670b7ff4ab255dcbdd26b1577b26f4c966c4fade2badb581186b27923dbb3d01c35dbaea49dba25ad24f1f53da2b6d7dc19b59dc68cd0834c634578c32d6ba6f99635d77107f7ce346604583e758a7b8fdb963b4c3bc561daa99ab772eb14a535f476a7796ef71a421e3423a951727d2dc71284b56b8799c63ed0a4e6ea04165cd88ef435d398117c904f9da247b2654a6b284652a3e48fd6b44552a3644a375a7ab4a6ef02077b91be6fcb019034e6248b6c8ab5ac59fc680e9abbefd11cb453e64bae27651a7332cba74e55dad58a28ada11b1013212633264fdc812e80ecd3fe1685dcf744f246a800b29eb60ff4340c690e49631ea8c1fba6df4ff54d777b4004b9edaabbdb48585fcbd3993e22a499ce9864ee87f5b6de147387b67e88ad65e7585ec28d2d529aa3de346bb636c89aede9e9c8c3626fcb632d2f298d422bd6d2e6710927d2f21251447324a9ac8c24885cdfa723111bab8e3d4856ae17fb86e666e54a2999a90c8fad6d869066da37669f7eebd79bf4212d69a7b6db20fbf4f67424a23f8462daa90de39ce6e98a8090e690db6dfac6f470f48d49a6fac6b4c9f7f737fa66cbf7a7bea94ea8018b7cffd238bdbaa77d63b3a923dffe7d4adfd8dfdf8b7d537f4f672e1e42633b21cd21df37e696ea1bf3337dd3d9c6684045b6171ba75734b9b3f992eda90d91f09ece9836d93ebc65cd61156f497358c7ad53f76ee7fed100dbbbe77418363dbda5e9e57b5a9a57dc4aef746c6cf2e4a69544b179bf3dc776e9fd9634d7ad24bdfb9b128656a4e38e994ed9d7bfac6597b7349fef432b6ee5773a7ad8e4c9de73da8eb4924c2fd5d8d4b19976ea1efca96fb6dbbf6cb562b31e7c15c97c6b493b453b15be8e3c6ade3a1562333cf85ad21c963a36f7c3dab45ad12d69ee53bef72cce93af68abcc2ddf535a63bee47bfb1ceb95dfc1922c4d2f73ef915292d8a9faad53dce9ebb8e3c3281fddbd7b62ee775c49c71d177b9dea93a7ada4f99ec5d9582c168bb5b24fd11c76c62653199eafde2884340749634df8641a6ba26523d318eb8a1c521a2405004963ac1d649a69eedb110719635191cd2df7bd7acfa31687b6ca2473bd4966d3cbf4fdad6fee4feff50dcdf4a11d776cd807b2fb2dbb8755ec9ed33d168027770febd8837b874deedcc31e77f81865ee39bd9535df92e61e776c0fabd895dce9483b65a6e41ad2f16273897cdf95a697bb73a5c99d76aa7b8ee54a9abbd2dcb892663a5eac6373a7eae94c73b569a13892f4940b69dfd89b5ea6a7b5a479eb9b3e7d684b9abbac396c5bd6bcf54d3d7dd8a22debc31bd2de25bc82dc6edfafe38e16ebd8d807b23edcc61df575dcf0d6a97e78c53ad6d3d162daa97e4e8755ac65cd743c00cdb6a499a76bc541486b90e188ce98cfef9bad53f6f421a541d671473d1d79d44c3b659fd3b5a49d32bd6c7f83ecdb8764dfd04ed1dba7f44dadd9f4b24966fbb08a64dfd06c4fc7fa9ccee92e513ebcdcf77263948ffef6fe86756aae9876cadc323d1d7bd43736fbf539ddb50a21a43964df3c657bfb53dfd0dbbff44dbdfdd63875654ff64d75220e55647bda37349b29d99ece583ce499caf0d4ca23a43d90a45c9dc8c31d32258594865390385727d6a082dce5eac41a5cb966ca12d21a92de90da90f4867406496fc8833a021588010c5100be20144248847008215018841008210f425858839006e10c429f1004a10ac227a1094257e8442882b004610ac21584548421e0680062017601f4024803c3008a01c4023806018437007d00520182000c01c805908967858f0adfec93c2d784cf096013c02084507c2af87cbe157c2cf85af081e00bc127826f041f09be287c25f89cf85c9f09be137c28f0eee0e1011c42d8030201948227f39ce03d01fc01b805d0099e113c228042008de0a9c0f3f156e0b1c06b01c804f0095c0d3a207453745280577435e86cd0bd3a27ba13744f7843e846001201044357020e0b5c16c02c7c45e082382b7045e08cc0c538247049e0940042018c029804b008a0074025805370330097d0c1ba1e743be87070a37450743f9d0fba28b8262e10e40a01cc02bcc2f5c1fdc195e24e71a1b83db83f17073707dc15e017ee0dc21e7426d8b0b065e1936d419b16c0187804508aad0adf13dd0c36296c54d8661b136e145b1336d9e604b00a1009201028e364d04b0899844dae15174a57716b706de009b512be177c30f0b0f084d049f082e001816500add04800ad00abd041e968d0b10e065d0cbe2a7c4ce8237c557c4bf0b2e0a5a08de03de1a1003c41170114013802d009d049530136017b4013804f9a08e007c056c783ced543e842d089601bda96d042d894b055e155d1401e1242271d84b089d003e0191a08e014402a7065e0aed05370567055f0b8d05278537840e072d03fe07cb8156c1fd8aed03ed8acb05db145619b4347b14161b3e256e1c21a76757077e061a17be051e115e1fbf952d03cf85adf1350a8a10083402df40e4016d8443706af09ad036f091e13be297c50f878f029a173f021e14bc267c54745e3e01bc247044e071c0ab8145ca00b841b840f079e1d3c3a7875e882d03fdc8c13e2a86828dc103822b4ac9bd04ca87968568d5267505ff505f5897a826a82caaa2e30522403448608614045810680d0f1c3e5010692087f4228601ebe327c30cf045506de153507de152a0cbc13d4127c35f85edf0c92d4185c3adc38d4107c79d8805075e081815bc2c784838235822d821dc212244229262081081c114402ac09c29a69e54cf0b50da20488057e1c011224891f3fc26a912812e4c70f90d620442c0044a7881217f8a17344902442902822e4c78f964f0e48183922081231df1ba812251b08e2a38811214a94045140f9b9812a212204884e10247e04097201185f1ba8910b1411f2630349822881e487902359a748900c6c004811ff6a34c811458c14f901e48822460ea053440923471c91613e3608399237a044c8003690cb6f0d3e7c6a98f9d2404b1f1ae8196812471839924409d467069a44090c08b940112347fc10722407b1009095ca27442f60c44892233f8e084942499220453460e4c706820c81f18d812211a40806842829a2840e90238c2c11a20492203f749218391224098e2f0baa2488101d21498c24a1a304901f18f821e44806720489224092f068f185816a40c8919c24c89024461c4044f981810609a244102510b0002482600003401620e3a35125438e0892c4115fa04a748a04491224892242fe79a188900ba03e2ce8114294141192446789203f3640e4c811203f9204418288102556438e304264f5f26d8166e007101d204800d1096200d2a7050e08210244888e90224254be2be890238c10b1c08f203a4a1c11648920a5cf0a34891101882f9d135d3541085899f28434c662e5ca635b387b027b827aa4761b1040e0504a291040e078f5525a6b0ae8715eeddeba6bafd6ad76ab701da9d6fad54abbe39a5eae7ab77a5ded181db6b7ba59aea55bec361d281d3aba39ae7e96b3b66d37adfdc3c9b3b67b6890bb5eb576eb11c78d6a371ad9d168341add518f465c8ba4d1c85aafbb6d0e00340eee76d76b2d37dadadab6bdb54ccb54198eab5db9cbbdd45a6bb76749ddd65aae72b55e7b656470ba6d739ce538ceb6b5a4ee96d15dabdc701c77fbd64a7da0b7db52aeb97b6ddfb0613fce56aed6e6b896e96e1bdddd35ba39ee72cdc56c31fd7d6d378ee3b8ba719c6dcbd9b65cd7da83bd6dbb5adbd65a12a96f5fafabddae8de95b397bb76eceda2ad3b5860d0dd3775b2ec7b5edaedd9c9d619be3642e27c335dddadab6f6d496bb5cd7704d23234677c7b5b52a525b6b55dd5ca760d4deba6db7741baadb36d76d28aeb9b67d37db5d7793484db2b7db76db8a39aeb6e5ba6bedae5c7b5db9ae9cb5b739aeb3cd75dfe6b8dbd75e8ee3b817ddcdb968ae723d63ad4cc73567b96e198ee364ba36c7919ae3babb6bdb7e8d9beb92b32412a9bb56cbf5e538dbb6d6da6d9beb6bdb76731dd3cd75ddcdf5886bce76735c73cdd5cadd3e757375436ddce5aaed6abbf6edca35c775ed6e8eeb6ad7ca71b49ed64a6b6d416b0cc7d5aeabb552ce6bf159985abf17d4b67177db38954b6b77d7ae956e1c6ddb711c47229148a4900721cc9e306084480b0946d8d2e2421a7204100b10216224490c17204192b8a40419f243678920455aa4b4947494085922c80b29034652422e1024c9116c42a52809828122409238028745821c3902e4a5e5480680e828099201213ad739028892224092e8fcd01192010b28a144250651f223034690280224096ed151f2634812231ad0095264e6a4840503a915248a00f91124099023193072430548102247fc08820120498ce828f94104c8114688c41091104204c8921f4a52688d0c08d129a244126cba808e1230a6258224f143a7889024477e1ca14448065e4a468c24f98144902441904862e4c78d0f3d0411924427c68d1b98258c6840a7c58d0f3d9470f450e3470f4186002162811f1828222409254092789781163648920bfc48624407c81146881001f242d249024447098c1e64c8221810a2a4fc946c20c8901f4708216201258ea492287131422288122541921cc98091237e2409b2c4c8114192d41872e3430f478e08a204474ce2081d2016f89184122145845c2025230aa203244990224130f00300357cf0a107245c8c1bb88090244196fc00a204892382fc30a2736403498e28452241960421f263092019f88181224230800123447ee82c11246649912036a4357e143122444992204b7ee80451f2638920481411f2a3881020491c71810b18f9a1b344902f2912c4baa0bd81244632102403dc922241ec0cd1ac29cfdde1e9b69d7a792ec7c3537776ba1d1e9e8d67dbe1e1e1767ae7eeecf08046509ecf08bab3b3b34377280fcf8e3582f270b78da07467a7f2ecec582376767676783623e80e4f1bb1b3538de0a93bd5084a8dd8a93b3c3cd6889dbab3c3638de0a9d408bab3d319b15379aa113c95a7f254bb19417978787878ae1194a71a41db089ecac3c3638d08809d42a594d60c280142033434d78c18ad8675a2a9d178b9e01dd3aa8475c8accace9899f08e6985c23a6256656b5ab00e20abb235ae13d601b32a4b030bb18e1f1a308a849f1f1d2c24fc04657b53072bdbff40b3382bf8bcfd0f41164765c53b95421ab11b2f951e66356aa7218b93724ab179a168cc6ac07a60dd80a5bc844f1b178dd88d570fb35acde28c5260d9d2a0d5888d6ec458a10d8d590d580fac1b30218b238636311ab5b0c68cc58656c3e56233b361d1b275b1a9d5f0f06933b361d5a0d9d46abc6c62346a356636b41a2e1b180d5a8d1b3548375e5f8d1a37b371d188d58085376fc0be1e58dcebce6e4cc44ab979236603a341e36acc4e376bb85a6eda906c621f8d9acacacacd1ab453e872b3c6ab05976edad4644c9bd9e8050e572cdbdacbc5d9cd6b8595ed4f38b09006f39598cbc57be95e2d5bd44daf6c3f6b7117d80dab545ee62f7168c771b1c4625e7ad5645cfc05ce6ce62e7058329fb981e1cbf8e0f2e1053e715ce013873583cf1b980c3e7dc0d8075a894f1cdaf189e33a6f4e1f62b00f1e3e716a38287cdecc7c68816f58385838b0f386e6030cbe71e170e1c46e6a3ebce09b970dcbe5e68d99ab07dab5f11285221bb4132da58757edb260366aa49b376a5f0f3091a66283b5622326ba798345f281258a3515bc635ab9783dc456f08e6975225d29a7ab8b4d1bab1dd36a74f3866b64651f66aed84dede6c6e5430c070b7643bb99ddb07c80d55e2a37715c37311f6a3ebc566ee2d05670662a3803e1dcc07ca0993eb8cc1f60d9fe00647146f86c81591c115fd42bdb1cb4174703c0cce2b8dc9b5cd9de6596ad4b6596ed69d97e84cf1f5e3968395e38682f99c539e1d1c51f58d972ff00c0bae75cd9ded86c74133e7f70cd00e0c231a3fd10b3382978d4a2f2955ab68f65fb1456b61fe1800120d6e27254ade52e3960a7b7fcac65cbf2138e170060287ce670c1678e167c02e0844f1c2c1800278e9a55d9abe03347ecccc13a71c000103b7f600180c3670ed7c5278e180048daf80269dd6b7b9168e30c74753300b8482ed10c8c753f6c0060914e57e2cd1c31510e560880d8bd890336ba898344e28f7086d544233e893803e5808520263f9c6335bc635a75d8b3aa3e5d7138cbaccade04002ce3fc6355f674b599385ed9be0364cd7d9322e187226196a90ccfdd51f1545baf506bd976a7272d0e77fa93c5b9a7bfc5d94e1f72e06ff9adecca53e55e79b27cc7b4eabefd846201e23b2e3c37736ddbef4f281620fa16f3c67b3fa955bdee77f027140b20ff51da1dfdd6d941d3557e42b180d24d34f04e2ae9a00dada9e0b3899371e52c4d5a41ac54eea4ae4e28169072959fd4aa4c8f059f156655f62bd8495da9e033c7aaec53ec4df8ac34abb22f61277505e2d3c6aaec49f88855d97ff834023ba9ab8bcf3ab32afb11be55d96ff8ac31abb217612775e5e193b42afb11d79755d977f8a456652f622775c5e1b3085c5d5675679b8be3c8fbfa6ed6d836e34e69a72beea64d476bf77405deac34ee7405e21dd3eadea4b10fef9856dbe9aabb5959d97aa72bef6685e5aee44ad2aaea6f79b2aafaadbc55d55acb54662785a776370b47b4a67e4473d05795b07280a42f91d073805cd26524959595f0e424162ba1b4c6a43566bd799a9720eb9720690c49d842753469d158f59d6c3154478b66654d3dacee9dd455bb501dad0d4575b4c417aaa395024375b45e5a501dad9995c567f7960d91ea68d2aa596d77c2ad6e0ad5d1ea54a88ed66885ea68b1b0501dad9813d5d182b16a7c726fd9e0a88e264cba55cb66d57762571b1ea98e568ba88e1638a23a5a2592ea68b990a88e165ed9d397a88e568c95c5e77dcb464775b4ee4a476bfca88e960a4875b460569b8e968bd5864ffb968d4a75b4bca63a5aa4a53a5aa78dea687dd53a5aa9958ec6e7f61dd3aaeb9ae33a7cba97c3a4c567cbc6cafe62cfaaea5b3656a769b5e193898d12a57ec7b46ad95835be55d5d3ef707593dd4c63606851240ce5daa336912d1ded929a7972129b8ca4667b9346293f10e234f9de040afb581547b4bf35e78994c6f26c37725f37fae851eede792311d5e57d231136b47645e68eebf3443b0af18d4474b6ff4aba0a3d6fe451d79091d43ce4eedee8a31e2146471f61cc27d6b1477d81ff4602f064b14721ea2b23a9b40c3eec4a452273e745698d098a5f8f3e88cd9aed2a04c5afa42bafa42b8b2bb52273271f61287f25e99567856127d29187c566bd94c6f6d86e2ded14c7614b4722b6db3cc40ac1614a6b4cfb6aed905abfd95b6c6ea0ee34cfb55c1b8ef0b259e48af3763a56db61f895e0c3d2143fe47bf830a4e27df72d8764d984c6cc701cdfdd95a3371e4892241f5e912c9b9074ec775d6328e4479c1dde895d49e3904952f4a658888c00871cbefb6848f7f0661786e1e9b823acddc3511547e5f82e6d26c70a90e3e9480172fcf8d08aa312e7701347231791a9813cbef3a8a470c821588a238f11276911588ab81b7c4e83176bd67ef470047a1f896e1b23a95144259298dc0f6d097606bd5b6f2c91d4288d29a50141fa8ede2bbb7a5a49386ff8d4a99a772acfd81e1242089037d3181571c8f5e10802641b7235c21546982287a39dd176d3bee22f23b151b69b45debcedc3453c6c7a27c213452d5f5ce4ccdbebbddb723b1d89a05370650f43e176b259ef57048826b17c8bd029b8f2bdc981ec7d1817f163041a594882b744b65c49bf95f6748c800b561d6bc50b513031036b7b85c28219810d9e782571f1ea818ca573846691a1b068642109ac254034892dc1817c0fc503348b558759348b15c527fd4e1118c8400b4ddc81556fb179242f8004062fdc200f4d58ac152d8029f3f44ef358cb29c16eb791d4285bedbc7b6fefdd77f7725b5973c8957d7f70bf6ddcdd36bb7567e1883a84428cf0043582144273747dc3fd467370a7bf3447b57fe99487ea6e7367548769ac08b57a6f7375420d69c87514427ae06ff8ebfd7abf0fbd83defdf57ebfdf7bcfd14e796fef36d35811e2e09dab513e4c3be575e5a535f474dc684dcd74e65a1f14c15584581e351ec29d7b01cebdd6ad08accc9de61e0940b1c91980e6a0bf0fb9b24fe94804f77e570ee1de95c32677faf07ba525cd5e699adcbfd777e590af1b7d74ff0c00fec3a697bfd711c9124d3cd0042b27a157c283c4d4801df010252ba1b39f274090c32be1c92136bf7be157d20c96e612b9bb0f109b4b7cdf503ebad3d3777888772467366df6bee1ee3d0a01665ad26cc71d5dee6e723f97698c8a3a505a734b8fe7ab5b1eb04a58eb56eb264484032a60904f2f21a565a5945624c22de555f48d974d7a45debe9ddb9eb9e790f7383c3289bee1aea36fb6ccfd0135c8dc27d038db8ab34199a355640e4726c22b737fe99bce1cc77117fb6686c34368add3f0831d40a15123481a8312855c59f974c6acac5201643d14f416e7d9529acdca828245ae4d648acdca1a295eb2657a4a73a07a8079bb49b390b727b1c91b4632caf4268d924d7b2464b69876aa56169410890f195c90229b4ab43045a6ef8183492dd3da0328821ed033c8dc430a84a4b19f5ae67e1f76231161369570020a389b4af8600619acc12023a151a2e441944d9d3078e114836ceafcc4200c4336754210864c7fe004fc81931e88810752f0408adc0747222a2c73ffa0108a1225531e3406451694d47c291ed2dcc39a44c7cb486894bcbd1b85a03128b290b96f588953d639e5ceb1b7ac3a9841a625121b250a0f1afb6143de5ecbed5d72efd1877d7d78c53bf24052a394b7ec71c77d8eada549633860e57e3712d134c8dcb9b147bf62f3e24a6beafbf54bbc4c4f633f2fc874f461a344c9f43c5ce5b22005163926d70f01966f144378e51824b5bc0fe9c8a3b15973fba8dfb029451af228446f264fde6e4b948f1bc5907bb3e6c64b54ecb7e774784b24344a942844c4e4fa7a97a864d1622b6f14d9963a9d5be47e69862dd2d19643fadbbd5827ccb11fd0b24e678bcdfe929aed6d4cb6654cee92e65aea84999ee7d64e43d80fb7305649db6164fbfb5a528a87cc959bc8954d981c3993d1c923726513928ed5a447f50033c5484679099297acd3b96228dcef6916b24d0eaf1dce89b4a471c85cd9c4868911257878395adb5e4e84a446c9505a5f716f7a6b6fa2ee353716b92beb736c58cb7e2d6d0e775480a4cfe926740685922e2fe98c8124950224c5826291432bc2c8740d39bca21b72687ba3db56b91891a9814c71e75b5238648ac94ec1c8169fbaac79b3db0cc29ac3d10fb2de7e8312eb9fe8569e3a557f90f5f4670801723b25c31edced435b72f65cf77e77efd7dadb9de3acd7e1d31a0f0ff17ec33a5e2c768a86a11589b8580ce9d859ebf5bd1d25cabedebe4b947d97b5be8e44f4bbee7ad7e1329220be27b1e7ee95358efbc77de53dc785b6d4e1b23d579a7d6f09c06385b8b71c367932f7ae34ed8778ef1eda24e2bfeb88a21545d1dafbb047a579b7a5d9d9fbbdb75e8f42dc7bd83ec7769cd96dbf6112acde0b6c10b43ddc4e239ae9d8b492c8f3d4ba80107c38bade77b004cb1ef7f774e401fee634f87542d4efdebbd76efb42b0fc96d46cd625357f0f9bd6b6222436a384b0d9bb874f6be86bfef090ee391cd51cd27107ad24b253de6df2f71e7780d8e4c9e073ec579e86bc3cadb1c9f41789e7a3a3dbed470790fd8365cd5ea750dc65e4b02bcd908e1f064baf34795456465263de732c58d67f65d3cb6124355fccd3d52d0e210196b005265778c10c8a105b5131a4349c82c421cde78aa3bee2d0d1375dae7ffd4cbd91eb451ab30d2087d8c3c866ae0faf69932f0f01be7c7fb79b169b3bd9defc0a40c5902f86b2fdb4dc7ecb06d0c80212a2ace86d699ed99adc89f0b820773777f23da53f504ac3a4b11a9020ebd4dc7118ca49bfc313456db5619679e68b4d7bf3cbfd1c6b4b1811a05370ade861641bdb5508432af258171ade87b714c23b4a882ed7d7be77fa008c2488dcbdff1d55ffbd5f7174aa6d3df7aed8a653fd91473d2a45ebbff208cd22db5209305b9c2409771db0662edfbc659b3b875c67ef855d9afdfbae4435f6c161cf49deb612c928d7f7764f471f5cee0d9b16a37a58b3cb8d9174b99ec7abdb08c2264c6a9455f8264c38d60abc93afa0e85e1fd616c3b0a4abb008ef75886a84b7dd7b9745badc0fbdb203b94bb3e6ed67eed2ecbc3191bb34ade8953b797bb8895ec993bb346f6f5ec981dcdbc68324ebc86334bae2c32bda5108d251de49efdb71887bef25c98f4427452292347a28be7b773b3c44f4ee343791c7db7b7f2f3662d63c7eec4478c8129bc5f71a72873bd1bb7be38e0e27b9d7d9f2c566af210f59627337a4fb3dcda32851f2782b5e1445d8e4c9e3e9e8a3c3a81eb6cb1d46d265f1179bf744badc8d3dba27b99191d4bc04494c16b178cf49e6c61d1dc62253b16f8f3c6a7ec0b8437cd862edee6e7bb97b39911b7778dedd6c57ca7176bb1c6d5ad273232da253d65a3bf22091ecc8833c4a7432896f238f3e2a67e4f11dc5fd9b1985281de5bdf43e871f82230feea87beedfc8633beae2ed357ff7bc37bd47a9b7953573df4695187387c1710711e4cea5016bb503937e7bf790961c2d2fa5a5cde126d2b27378455ad61cd24a3b11922e8bbe816c6e27d2f950760eabb895366f37879bb8955ce6c4ada33809994b7a70e44621ba2cc2f5456bec7800ea21e1311ef57dbc3d01787277f0bbf89ac191c73d8afbfdf6b0acab90542289c94bb66c76279d2c977cd91c9d84756c5e4111f2129b47a7a38f9a32e41146124494dce5b048a93c42bb2b31e6ee61275e67cb621635f4c4213a458de8147df77013ed28043daa088cc4468992fb0aefa821bc28e4eddbc8831e65441679c36506ba6c76d9a4ef7b6591aeec40de4ab3667ae6ad34bb4b26f2569ab6cb9dbc95e62676c993b7d2bc993ebc629b5ca60f39b14b0ee4ad34bb4c5f45ae1d7737db9de848974d245dee4e71f76ddc8100b2c34974c67cbfbdacab3b26f1519385ed3e62a244b95b390449104359c7d29809f09097d84c7dd8889269f724281f62a6d7f932ad02e52326f775b6dc340d999ee69ca65df7aebb3427d1297a11cee9147d575f4b47895e3a79918778d4e8222e422a8daf3b44af638f4a86103f6293bc48be45d29b7c93ace86259f3589a2469c9db718768243ea74937323da923d38fb08d08e310cb54a7e8479a4c1f765d93ba02c5a3bc8befdf727b5756d4f70e17a1598065b3566279846691a407cd22f77778a75b157bdca16488ee179bfdee435025627287a18487d2fa2ac43b348bd50eecebe8838a61089a6dd822586eac151dbd5b9a7dd4109409b92f4a431ecd728f44d02cb277b0a42b3a7edc737a47920f9ff0bb92c364a7e86fb9d1db92d6d399daed34cf6765bc30823464ebcaf634d841b64e64eee1c843d2a326289b47727d8fb358d92459acbcdd2b93e88c79c32611ebcaa61231d9bb9901f35e8998bcddbee224255043b647f9e835e47a9d2d574c738f4458571e52df9d8a6c9dc83c79063bc866ab210fa92311d6896cdf231115db77a7a30f6f0e54e45aa4d590ebbbf248ab2157efde4d2f0e51640f1bf1e210859221ea396c76afd8e4c926a535268dc5800599bb89c446c94b363564ee43d0dc61287ddb80c63c9706acd54884752273183504cddbb79b46ac2b6fcf8075e50d2b31e67a5bd2ccc355ab0312ec20c7641a238108f208eeb03da4b63439d0854b83212e0d585d9a9706acdcb7e5c9812eb056363713dd7b88be31fb50ec57f4d6deb3aaedab0f04b199264fee7cb189f27e6fe67bee5d9a503adcc4a5016b655f7fc7083c0c3780831758400536ac4e328a130ca1072380328795c527141e4642009aef154057f6f62157d26ccbd31e8a2275e4c19351dc5104a0d93b0f9a3dcc93397c84e7a4c1136960ada0e8f3e4b08af596a87b9a87dcdb92092878d07ccf44778bf28ebaf8c869e6c91e4631c0be7b02ec3b0c45918b87f479729f088b051a9e60e53e599d200229b2086a905d641a0bc11db68b9dbaaf23119d10b0f0c3cab653f74490dcebbb243b754fc7067451a2448912250fabd34689720f40ee603bcdfdd7ae3f3c085b52643037cdd12f5b688dbdf7eb7de342b388fcbd4bb37e48dfdb3e9ce40b1f7ee2c54f142fd640f0f56115c5b27b0d0f7e18498d92bf876077b0fbcaafe6ee8dcb7e8ecde95adef7ef9bc39e55d99356651f5a81a4b127b5fc812056dc6f493b554722c0dc78c88669a7fa446bec0b407eb9e653e6762a8fb55b14e1f6d0cbdd8eee39bdf5cd776f8a99d26f7dd3a81e1b01b2789b513d6ca6f9be5a5abeef7c6fd60c82d926de5108efd5059c587d5ce0f39526c781dcfd8e3ec025e4219b770651b28751e0bd0ff1b049e4c5159e0898bd13d171249ba21301b3785acbe33b8f37b7fc9d8e04e03942e628cd97c7e7f41d890045df461f57bca8bcb4e6fb1d7b741eb179e6eeb7dcb2dd2e3699e0c4e7748bd876be216e5af37106f8cc2288e87cb1c9e3618e0758d6eccadd6d0858dff79abf4055a8da1695355015aab63544cbfaa706e1a8ad5407b5cf1255565b75a8fed020af87ba5581a8d0a985daa7cae850aa83faa706d5168e96d1d5d74055a8fa5c19403e3262b6455fc4066485accf6d712d3b647feed026bb3e1b9015b23eb7c5b56a16e80add9fadb505d921fb738736d9f511ba41176813b2b2cde7cab6a1edc7c7065dd936b4fdf8d8a01b748136212bdb7c2cd015ba3f5b6b0bb2aaa62bb7b501e5b642b947eb939b6b91ae4f4996db0ee5b63fdcd0fd316d419bbd42b92fd0b6f9c86e1089ae6c6e5eba52dddc86c4ed67a45645e3a60dc23284389fcca5b814ee42b943a04fa813fa8238ae14fe7c435f1894fb42b90fe213140a818438a12f4896c1d6e70d71b2dc07cafd7d5c902764554d4fbf9faf05ca5838a0b095f2f980413eb9493eb9fff9804121f703fa7c3f5f0b947140610b6c7dde1007025955b7106a114a0981c04fc8f4057d9e504b504af8030e993e993704027132b06502fa5ab2dc618b03fac9dde29f0fde318141b949a08c985535f793fb9ec5d931adc294a14ec60d7d29415e10fd5fba96275b49514919ea645c4a901764559d8f07a41234ea84547c5ef0d905752d4f48e5872ca14edecfca4a6b4545d6fd74432295168cca90d742793ea74acbaa7ac86b793e9db7d2529175dd50e701a974422a3e3041b94f439d8c1bf25e7e4e29a8a0dc5d4bf6122452f14109753e2b1ed04b4b24eb7ebc9fdcca7d52191aa130f55a2c1d506e4ce3f2842c8e09f765bc2c4e49868fc521614c922716a021920a50ee1559eebe0c208b238a27a117961fa195938a1089cf130b10cb900a900c66713e6c0acacde2b3e2f39d7e72af04e53e09fd58550b9d8054847e2c4e88512b2b3fa6a0dc0f4f3e2b2b402296168b0c756aadac00b1b45864a7d6ca496655cd1274f25911b2aa0e62f159f139fdac04c988599c1dd34a05058ab2d167140a7fc2211b6cd2a016e08b18c432fe8c432570483c099fa26cf411b2aafe0987686093d65a44a11148d46a11ca449fbfe0530c1a7f4670680636a9500a16874699c8871406893f2b63ab650c12fdac844222d0d81a432111481c1a65229f3048fc114720512b94892a6c521a13231eacb8d8b4f1bc0d9b38bace6293c6380c72afc12695c1e0f3ac31ceba8a51a371599cba8a81cdcaaad8ac2d1a53868f0cb094d192e1ea4a19ac1843658c9a55d52e54218a2f3ca126c58fcc47286c350a627478031d9ce0030e05fd8c433e360e4251a6a0431a80644240a34ce423fed0d450bbc20b5fa8c22a0c1287fe861744e143822c6031b6543e5510410b7ad6205bd11507721f839e608427c4a1891088e06745579e7753f4238241c1e209ad15a4807411080f573481421ab068c18aaebab03b386af9e43e09348a80728f8272974a1ff9907e4452268a64a3d10f09880c12058d8646402419292412225b231929881c120d913e231929881c120d913e2320928c14120991add10f09880c12058d86acaa7d48a44c241b098d5a241f124804340a0a4b2aa4210f881b5a9199548448409e10d70999567c5282bc1f2e88c567e52768853bf9e43ec972d31520d2595ab959642ba7d64903f49d21f89a73fc28039b0f2b364f600d36498b81cc1835d5ac540579a58a56aa844a55cdaaacf841118a20852400b5808284a8ec0932bce1063dc081cc4716341aaa2d8032843ae0c00d3f413f24a1d6186254ac200a51986225121a01850004557099204606943992652e84800624d0029310ace86ac4a420276aa03dd1023b0cade8ca238772fbd092cd810c3dd0011b98903e58b8420da04cc182d78aae42135049a8e493d2227f4ca5a1d24f8a0fa9650a32b54a293f24219390c9a724230d99864ca5a09452cb34642a05a5945a2621934f4996421a3205995aa5941f9290a93454fa49f121b54c4025a1924f4a8bfc110da50009f990add147561a2afd744026a1d28f1814b6729b7c4ab29386728b2940b94d425d0a8b691a328d2696d395673a5724b31474f630e1de536ae566c2d934acb833910a4ac12713375364f5315ea67f38c64b8cf118241997f195fe616a5534a749519dae7abea7e09aab4a0e9015ab1e834632e11e26e17b764c2bd34def29954a3de29984ef39490fa2869910c59eef4cc27abaea31e11832ab6a26be4f094f5e823463c86204599c12eec7a0591c523f463fc6cce27c781443b6635ab9fc7c2d4132540b15d40294bbe402d42284126af9691982817291b5f8b8b45e5043a81f171f17a1918b8f8b100aa8a515835f5a2d3e2e2d9720d4500aa37e502d3f2d43281f1719aa850a6a0172016a1172f9711942c9acaa835a5e5a825c568672a364b95b642d422717a095162ac804c4d23294db4586f2c98d126af969b904e546fde4460d995a5e5c7c5af0c94508455a553d0a2877ca4b2b376e69e57e8c97c52991c81a6c7ae289069ba40c6c9e64c4723f0636df5795327c684dff244dd52cf74d152bf74d193e41b398a0fb5c28c6a785ac1623f49f1640313f2d826282ee73a1189f1632a198a1161f8a016a211423f49f1640313f2d82682d7c0e54b6625a0cbd7559e9d3a215d37aebb2d2a7452ba6d5c2e740652ba6c550cc508b0fc500b5007d588272df6745e8938541e3cf4968e527f7177e8845c8035a8919cadde227770894bb95bbc550ee334696bb858d163c80022c4c01076a4869f95bb94f5a45158290022826600206d30a66e2b2133e718840065568a2c749084a2ca3d2e71c79e10b4c78028bda07563167e2c58c6989988955ea3ba6d5ca4f6e172da0dc175d003d080f54ac764c2b266686b0acfcc9cde2c267e6e765240acafd12680628f7cb8c506e99a1dcf874e152ca546664642bf7475828b74c50ee54506e18333eb96584729741782885cf992018f89cf179814f1917f82c67301e3a4bd939233b675a2796c13241270e3a4ba019a0198c656686b0acfc71e153e2991f173f2e5a402e8e1fa4043670375bb45c00fdb4801ef4e3c26748f603243334130434239b69c90409c9e8197a98045da10b4558d15508de9c09a2031c6ec0fa000b072bba4a196fcef8d8290091e1052c3a1061e5dd9411923949c31c40a086282bba8ac13b263c640521c880056368030dcaa0dc57b52ccec9b23861f89fdcb2dc3f1fcc50ee179fdcaff0279fdc3240b953607c720bfde42ee113ffc8c860867c7c5ab9657e605a6150ee03e53ee113fbc800c1c0bcfca85c166728b78ccfcb50ee128cec45c622945ba62594fb2ca5904ceb4508a6057e092a87647c5e8660642f322cf303d382097a015f6eb862075830c2d08fece7c7850e51a84216baf005211f201f981610adb1810e3db2113409c2ad1f199f97a117264c41c5141f18a2028cac1caa49688307923043030b567455c2678a76b314da584e6034f0401c4670529916499b821dcca0853944614557e2f6119b2f4254094298831d6a297843174e109b2f41b9db03402b9841140fc8614557213e53413ba615387a1de743fa17822f865efc90565e22a15e5e04c1e013c60b3e610c5955bbe094ccaafa2df8741164552d63c1270c9f157ca654308c147ca67eacaa854af87c0144c2278c20abea9318464bc4270cd987cf944f884f17203e5f0c59557f845ffc58557fc4e70b21abea7bf884016455fd0e9fa99655f5397cbef0b1aabe08bf68c100e57ee193fb85506ea0dca956ee17addc3fb95f0ce596e54ef9e41eca0d94bb951b4650eed44f6ea1dce3cd17b2dc307c72c310ca9d02caed2228f7286219402f8272cb80fde4feb08c1f1843b965bc52b2dc327c5cc872d79b327c723f156453348b4357179bdfb0795a596c92d94c05651a9a0ccf66ab0bbe1092dce96db7db71179dfee2aa89131c2bef1f188a63ca554eef59d18824994a47ad5a354565e54d9c9c562c6fe2845cb9bc89136fd5f2531327362b14e652ab4b6bd43771f2d5466bd453ea433dbd4ba9426bd4b79429b446fda934d11af52ce50aad51bf52b2d01af52ae589d6a84f295b688d7a53e9d11af5a5b2a335ea49e5476bd49325486bd48fca90d6a8179522ad513f962eb446bd58a2688dfab07ca135eac11286d6a8ffca16b446bd57c6d01af55d29a235eab972a435ea6f39a235eab792a435ea6d49a235eabb2cd11af53b2ed5ce423a635224cc720e699e66d01407c824346e73dad375df31adecbd3fbb06c19f57f41ad2996cef21893013e0f719a233d9384022a939a7456bece9aa47f46126484c88ea97204d1a0bea700f93ee3ddfbedd5edc73efd9b2b1e2f0b9635a75ac61976c11ee11894461cf6a6d24ea58c3ea8c6ca9a71687847b4867d2bd877491966db36a88cf9e9db56655b67e06ee01cfa4c34c30a9515650d4385df55cfcd9627acbc6ca4faf044f57c1a7f84ee51f3e45277daf4962f31affcaa695cdb2aa5775d994fd2a5fd9b22cab1a5152af6b56d5b576b5ab766511654e4b196b589dd15aacd62aadb2de33d6abba6c9ad6ae0aa333da35d257b1f97e5dd10c6c9e6a8cc33ba61a6c92b4cecb39419695ed6b941c206b60ddf6b38d7776591b0cb456c66dbf3457b6df629fb5179f77765ed6b9c12ccdba621cde6ad9de9faf6c2f9a654bfac9caf6b06cef756d315bb32f208bd3a97c3f5b7e3a7997a3deb2b1ea54b0ca4fefa697cef2bf656335e233c4e74af795871f9f82cf113e457c6e173f7aca397c5e7c8a48072ffa3d777b9b920364cdb9f2d6cafb2a3752b9b14a0b2b39d7cb1b638965fb9572ab956ad95ea5dc5e5d69679e6996ed534a8e55b2b2fda8bc30970bcbf662b9d1485ab6ffcacd55dad8e6caf6a7d2c62a0f9cd4207682a117d0662cd80b0c3ed882144dac0006b6468bcd6076408319c600071f1aebd65e17b6d16ccc0729be90051551bc604557dbcdcdc59d610e5324a10e6980b2a22b91e826e76ac2109430051629f8c2105674452231f1dd18854214ac2db8628085d78aae407cb66cac489809ae268733b4000e7680026545571d66e2da997592051c664340026c45571b3e459809d28e6925da5ed9fe589cf33ba6d506fee0763a81248987d98a096a83a8ad4c8f46c901b2a6a6445233e334cfc04a3ac7d69435f712640c166e5bcb6844cbb616eb3c9af7da3eceb2ed58dd2cc5ab79af8ff0c9d16a318fe6dac08bb16c0fbab27d47cb76fb581e6cc427d7b1665ecd1b71ddababb97c5eac8365fb13377aacf07b79b30ec6bd4eef7b7933abb25cf7ea6a9fcbe3407c762eabb2b48fe56d5cad8b81aed1a3913492d5cdba17e8d5c6d9e822699b07eb3e1617eb5e635723bdd8f67130950e167aac933723bf17f78a05e5d02cce196471c4109c7d3011640d8921165bc4574b180343d0f5c5441838fb60a28b55134de04b8485337196ed6bd98a610c045d5f4cc8e29870cbc60af5d140d88a185b0959210d8543d7570363614d9c852eabb25f0d0c6be2eca3813031168634f025c2c26f067e3090d5e25281892eb42f06ba545e626c06d646df0c7c8930310c591f0d64f9e9261833a142717633aca9c0385da5e09ba16b84596cbc7a7085afd12cdbd3b2f57aa8f5f06a11c31b341bb4991e60228dc506ccbb51b351f38125d66cb0666eb06cc0dc70f5101b5934366cb86eb87a888d2c1b34d886cb079658b371836523d68348b371a366a3d643ad079175c306cdc6ab0757f89af540b32a0be324828db47136628d66a7914b141b6b23da181b8d44a3687c91ac114ce412d144afd145ba44b5514cf41a5da44b541bc5c617c91ac1442e116d34128d30d1c8251a6b23da1813c146da38628d665f6d14c146acd16c9c8d35516ce41ad1c69888251abd46b5112672894630923566d12b8bf2289649d7e86a96300c6f7a956625d689a491606118bab22dc54835133923bd50f834956625920633956024da0c1923b97e7c9a5c31123923bd4ab5d28b34439130128ba5442b9162e48b2cd14aa418f9224ba5975559124962995825188946c6482e92667a9566251609467a913393ab1423d54834928b8c99582558e9459a915824ac54cbb0122d03955c39468a651959235f1409acdccaac94590acb045379a9d4f24b0596424b71adb04cb194590acb045379a9d4b2cf8a4b25965233cd525e2ab0145a8a6b85658a659789b6f25299a5c054582931536d05a6e252a1a5c44cb515988a4b8566a2adbc5466293015d68a4b25965233cd525e26984a4de595324b61a5b84cb115960a2c8596524b7999662b2e9598ca4c85950233d1565e39b415588e900a2da7a6e2ca194a89e504996a348b6cd2182c28dbe700e5c058682cae95d809d6c2ca999d622c3596d7caacc5c5426371adc44eb016568eace5759a9d582b3416d829c6526379adcc5a5c39b1955a0bec4463899d5c2c3316564becf43ad558662cac96d8e975aaadd45a60271a4bece46a799d6627d60a8d05b6126b619d602c341617cb6b65d6e23ac5586a27160b6c85d6f23acd4eb4938b25b6526b81e5b85a62393ea75aceebf4caf96199e5b458583d6433085aac95ed83100a82f6e242c55c6a2d3397570eeb053543b15a5c602f2e54cca5d63273790531f40243d150ae1697d80b6a8662b5b8c082a8bdc45035d4cb85e5327b99bdb0503017970bed65f6c242c15c5c2eb49718aa867ab9b05c5e6028544bcde5c5ecc5d5123bb9d4c2970b0c456b799d6621cbc5658ab5b4d44e3014cd056542bd5e5c662717560e5f62b1190e42f6f212c40c054b9dae4a3888205af67010402eae205cd9de0c0228db07e163715c16c7f35ab060602c2f34182d6631af20601687966d0b174c4c2606f6522bf1d98205037ba1cd625e3f16a78c89b1b4a8b57879302c9859f916f86c416b011383bdd48278599c12c6058c2b66c62a61682d6030303598570cad452cc605538379c5d05ac4625c30ae98590c0ba6052cd6a2d6e205c38289b9f9427311f39a69319361c1606230375f6a2e6260332d68322e9916af12667618968b98d84c8bdae9aac5cd185696395de19b2d60306ec2d05c3133173800b51678c7b48ab919439bc10118c23037635c323808168c16b1205aa59b30425665615e29d90c404c28db074066714a2d6e1f8098c5f14a5ee97aac14532b95340cb30f00cde2c4781e8cb21653be3ec3b1b32e83cfd2f5584c8d86615665832c0e8c2783679855c254775de630f059d6ca59ecac99c561c12dfec232d8c5f232d6a2641d866b31ca197e95acc370ad9ce1d75f98865f2b635665f10cb3cabbfee2664c0d5696aec73e3babc4b1b256becad3ee2af10cb3b0ab8cbddc7ccdfbabc4b41207e0c54d5c0b007e0500f652ce020094c265007c0e03b309442d003e432cb59919930c4b66f6e2c2e562160097c57911ba785dc635e3f25cd0646833f89c99c9b064662e5c2e660168591c940b99d70c6d46a636f372f19271cdb8a0c9d002c062999181b980b99881cdd458666232b1172c172c17b199984cec05cb05cb456c4606e6620636537321f39aa1c9d466646633172ed3cc0cc542b9645cd0bc97c9659aa1cdbc5c645cd4645e9e0b9869a696513330960c0c88d9f18e6955de7cc10222c8aa2ccb4d17312068375db0501808a19b3331206456656562379b40bcb2bd09842cdb03f163714ef804e26571764cabf0b36c63b4d38b650f44cce294380c3f93a2952996cb7b0183514bcd6230682f60b08000b2382ca99a4bca050316c278bd88cde0339562c170bd80c1a80101b3382df8acd4cb0423d632a3a5602a18339617ae172998ca0563f6c2f5a2c64ac188bd98bda0a5522e18305e2fc2540c06ad741306cbe5859aa158bf090386abe505cc85e6e242c160bc5ec45a5235969ba9970b8c18ea05edc5cc7453c56299c140f8a460c740b860cc648068d53c0c04eb856bc8351bcaf63a822ccee96266714c30a6d7b255bd68bc9aab667ac1ca560593e12a69342cd38f4f95ea45f3aad1b8844cae6c55314fc6cb24631683f6bfc0670c154c868b46c3d241b3387f65ab9a9532608f11a3e60296ad8a96ed65c45cc498c988a1a2c988c598c988f152cd64c062c462d462b85431192f19b318a89b34afbb586a2555cd7b792e130deb34165609567a7934938cd95d2ca7abf2a60c98cccd18b5d8ebaad9b18e5669ca88b1601d2e196cca6095b00e9f99999b31663a5e566561cc18301dac107fc7b462655bf3a289c17848aba160d9d2cc68b05247cd70cd78b1d0b2a5e19a01539da526369b8179f19757b69f11a3c5f80c4dad86058367c4d4d45ad4b8641c86068c06e373c6ecaca99d35ae93860c4c033b69bcc0e78c580d8da66655f631700d8b86866b06ac46856b66670d8c66665596066b460acf78cd60d5bc68623360e0193515ad4463bd6862b5192fd40c570d8c6646833503366ba98905e115648b2077996eb95bae4ed156dc7d1def5b00622db72af362b158dfdb9147e7eee10e18a9fed49ffa538a95a52abaf321e8e6528cd678a1c3a31ce4be1d804892b65696880e2d4196d5074aadae6d1befefc8a3b37d288458a178ef4a28a37f2514b084d2fa6a74d0c77eb0fac3e8a7d2e8b7499a5e67f38325411a61555f202be98ac2e8a7fe504202a5d1c722f741d2b5614a739494406bfa1d36fb8e42dc6cb1f5c2d60218c04bee6ecea44637c52cba999229fd46738039ae0b9a032cb7ec95dfa8fc6056f501e5ce1c07525bed1685af25bd1dc8e5466bbe6fe38ef021de3ed807b3de069636df2b8265e70f7cfd56529afa700909b4a66fcb52122a8d3e5776255aee8f64b92f2acd729f1b7b6c19e446216a2ec57a00963577638fed8a06b043a47db37561871022b5385ea6f7ca0758559f8e508ab0aabec56296fb74e42e84487f6fd2d8dc006f5617647ab3becc5a834cffc170a4b472df7cc9749c1187acaa4371a84fa52a1a8774595563f20a9c1da31036932f9b2d17c87a93740911f21877f0681e438875243293bb0f31eee80ede99cc4d60867ab5768bded6956e7726db8d74f98c7e60b93f8aa0714498550d7d37c727728737bdf12659aaa2535b6065d324cbdd07a9c8fdaeb2b2a98a5c0afac97d5b5e91fb630966714a312f7fb83fc4b8e396a290fb560ba51eb607c0231ce22697e9c5adfe604bdb05e87188ce76dc51b10d22eb76d2b8b7638fcedd168b821c40a7fadb9843bb522be21e0e21d2bea994a39496208e0f3dc61e16ebb83d461c38723f248078438227c0b8e37e996e67ee4e53dbe9900b9638c61d1c7743801b9600a38d4d6ecfc7b8230b5d01c61ddc43ae24eb9b926cbc29e67b93cce2ef2f36899c3278ee21589664659b8004c1e7f47d78dfbd7e2cc3f1f72111e20d794fc4b883c829d71331eea8b854859944b6afa579226b796f4b223bc052ec860c1fd671c7783b1271ef691e9f33ee18b10fe41d6f00eec52fdda953fd536eb10cc30760dc11863ae80c1d5fad40d29cd3a52afaa6c8a914eb1beefd922ccc61b74c478bc36228de717878e7b48202e5e32b72cab4535bbf0063aab9ec95a52a5ad537c02844670e97629dea5b2c90b5cbab23c701520e30925d6e40fc408448c4e8d90c2ec9b6a9eabe88b18797bbce5ee96128ecedbb211d674f33f7206ccd408c05e0c9f608187b587c3102466a0512146b5973029ac8dc3993034d53f709187b6cb97ba880cf0345dc7b87870bea05a645cc4b2c33e3e2c589c5654525c554229123d12886e0e7752e3044dc6f576b2ea6a5b9e5ea22d314d2cec6e3ed6c3c77a7f2705d535185eed5a7e30e2c768a8959e6be95669582ecd2dbc853de1a96b7770fb792f47e406e6657e122733bc8decdae62ab75cabefa60ab6dd9dc6a0dcb1ec9751cd7b086752fcb838d482a7b5b09e5be4b1d9b776cb9bf75d72cd01c74bbd9526fc2a04ef7e64a0aa9d2304b23ee6629d3d331f74d30d330f74d7733cc74fb61ab34fa94d6f44d9be96dd9d1547f2b65d054bf2b694d99a24c53a64aeecba03794a6cc974c69ea62b325f79b2773ddcd9b3bae72254f922d371e62a386caf23a6553a2675564df74d85e74931cfd16e77efba814956349ad4a3cb5382793482a77e71e7625e9c1c89a45aa0a7fb23838accafec3e6e93b78022fe2d05c228706e87288717807b1e979ffb0497adf70649b1f406bec6b0fc87a930625a9f64552d923ef653a6e1b86724f4728adaf2ede49ada040f9e822a95c5996a7db7e50edad44fcdefe6eb53221c9125ba76c63b366dbbdd21c3a3577df1e76a5d72928481e1bade1ce7994c3dffae6e2ba71b7f73aac533387513e7a49cd970ca2e161eb1b948fbef721dd8780e76ea6f4f8b0d91dbcc5211dc1dfd2dc86d04e5d1ffdef346beeb6aff4f056f2644e4ca94bb0a53ded8f9b78436edbededb8c3621fc85ad6d7f1e2ed8a75dcd1b5366149e71f7b9dcedbfbb4e974ae17a21ec996eb37fbad5e0126532b5ef0846747113656456f5594b42a4b6dfae64f57248949cfc7e7e4d3a3c796b76f4d9c74b7a30f9b8b38bdc3ddcb3dcbf24ea7f63c92349fcd063222e52db517995ae102226432532b5ca0032c669994690c8b23e494f3e40b802d9bc67147ca51a5e965d4574a7389bc72b3b4e7ca213c684e79caefe8c3e6160fa9c539a1f85fc2264f2e5d9c6401e7f695e7d88dae503e54ce7296ab8474e4b0b944e67e4b2848384903fae417e09198090f375ef92d7bb87cbb0bca87e9db37bcc466d4554ec71d281f2e67390b5e62f39012a7b2cb735a1c77c4bc832cce09c502fa5d0335cde278b87bf73d6c8455d9373e3b5c8455d99f6a24adceacaa2bfb5bb980ee8d4ff0ddc3f2e45985af230a01fdee11e8778f40656de5e9e4abb235de7b13521c7d6c79c3e64ede1e869e477a9ec7c48ee8fd265e87cfd1bb777bdf11df39cdc4cee88d59a3264ec677471531be05f33e5d79e4f81e8b18fd8e3eb67cb1697acae91801f0c725cfca8e44dcbc6153e529987b8e8d297b70b9c55bca6fd3b1b9051e627acacd5a6b7d25ba58321939190f1e66c41b2897585469a6f2101d9b537e711d7d58d3dbc7c7c7c7c90b1e725969d7c5dbe6a4fb492795379649a7e38e96bfd5fdb72ba168c14882c824145ec26512090f69398de59c76c1a6b7826925fcd9d6caed2dcbe2f4576e9e566e92b93d6fd6b4f074b6ba93b0b9bd542a4d2f33713a5d9d8e3b48cfe9cde238e9be7d2b756c2ee1255c6e39a94412446ec1504eef4a2641ac4e6fda68009bb76f7514c29eca0d740d546bb51a8be9669db9cc9a4de7ca21a6a7e0255ca6a30f53b984cb1bae338b53c2a6e791b0499217dbb7e79164369b76b2374fa108148bc99a8c2df1216ed96c0cc78fb8256228900491b787d48a174421b7646ac50b60396cb181c89340b158939128f34e92e4882449912443b2f555f851c964e4e47bcbc48b9809133be0bd8feee43bcfaa6716e774f21579ef169fddc9b31aefe4abf03b9dd34cec74f730abfbe823ccc40e78f2a20590237c761f9d2ccb537c78af64a2ef3decf1014d440f1b4092255d8d4aba0a4565eb2bef63c964e4e47b78b174f255f7bae12150bcd3580ecb2e998ce85844875b5f81d8c9879904b1f2f006fa0d647178563159ee990f1acb5b0bd57a286f751b0265032dcb43cc7b281be85e44f7ad3497b0aa6d08940d54572cd391474ebed8a4312662b9c22c4edfd2d5c9247956d5c72479aaab01fd7abbed348fdda93cdd0ec8b3753248b0dd6eb721cd412bad56749fd33420bfd3bcdd6eb77613a2e6bb1d7bb4866edf1242fa0092c6ae101ad98094552634514513b9b7d37b8b69196281dcbe9dfb1d7770d80772c3a81ecfdb9fb129e6fa932c16ab89153d37eea8d807b2e6f09a65ae3fd02734913951078da0529a0411d4ae150977b0e666bba09269cc0a3b58216445d066ad15322baad8eeb65921c565c934664509b8991d66429fe7cd8266b24fac25159fd77117ec66105619544a7720be6ad73a73d1d88cd5b6bb460521bb594b85202b6eb051a18acd76bd22dac144a0ba8316a910837cea544985136c622da9d0ca27ee8ef4e51d7758bc4d6148ec1b31d3d814d2c099b4d089b524338d4dc109f9e4892999c6a63005f5ba4f84eaf165fb0e6416841506a4182a21eb3b45f1e9094f701cc7bd9694d6742d0847db48348a2178ebe76153e9de26d19aed5296bc7d3bddb6db6cbfb16ddbb66d3679bb97a435db65d9eebd179bf7dee7d84bf68d97b77b16c78a681c77376ced669bab5c575a73e953f7f7f97ee6debb172f99ef7dc9f7f9720fadc85d5b65238f52ee688e52be1cc771d8e438ee3996f352b03d1c8561dbadec4c47225a633fd21a7b91d6d8df8bc92f64fbfb2ad43766fd02ad6feeed6b1664ca899ca9b45cca94d67c81e62865fbb0764bb33e21bfa1460d6cc84226f64ddf66460d397c0d6648831bc6b05d8ca446d9a81432a535db376c6e1baeb29a0292e652a67f020eaf20ab2c9b6476825ca938394d480155d19cd304174dd16c9f527fc869c2139446bdc969020c688a66b345b67709b1405620649acd528b09426a01d2def468ec0935c8fdad3793fcf68dce6c1778225799139ae42a63e50a65cbb25c471fb50933b9a335f661adb585c281ce84b4904d2f0dd9fec54cd134a106b9ca7a5459aeb2fa03cdd50992be42a13994d426b942a135f43994dce006b96224354a6e9a4349c566fba84d38d11cdbed5b680e27d01c55466be89df0049ac3a3391a237948ab0a481a936141bb6ceff50dc5667d42a65fb69789205b1b93b9209bef53fe727d02ade9688e6b056b29ad416f29a576cbf69456d121cd740b6f71604e3fc491ea6371624e2b78fa1c8bf39d3e098bf3e2f4d5657150a7af4016e765747a1c1647747a232c4e79fadab238e2e92bcce2cca49cdec6e2984eff008b533a7d65591c18a7af3f16873c3d7dcae29c4e5f84c59139fd121667e5f4f56571f0e8824d2fbb9ca594c13d34323ee32a25c63d32f82e4e2a61a40ee3aa8f65597395cf7858cee01e17e567ee952f704f8dca69de9528dc03e3c5639c2b5f662ef3f2b784c13da8c3bccb181ce3aabf784bd9d313f3973381965d9e42b36a1173988fca9e18fc44c6aa677ccc510751f88968f5bfe09e968f0e839fa8ac7abaa37e7a79cac19bca9e9794c35c0473d153f013bbea61f9e85fd903839fd4ac7a4887111dfc56f688f01320563de16340fce465d5031ef517fc2465d5f3f2eda5b247c60cfca465d5e31df51afcc45bf5bcbc6f69602e033fe1563da2d2aa47e5a3af943d31f013d4aae7e557859fccac7a4e1f3d75b1ec49e127e0aaa704033f19ad7ac4c7fc057e8263d5c31d75b2ec61d2c3b372819fc058f5bcdcbec44f54ab9e958fbe97c7af65cf0c7ed2ab1ef23067d2c3b392c14f02b0ea193d06f77c29a4937f525731c7f809ceaae73b0af7a0fea4aeca5bf6bce09e2775f5f218f02dca9e97969fcef295abfc495da1704f4f4fcfe8a28f171f3ec7ba943bb1dc52d2326555f42ce54aa952d657692a6dac8abe543ec0aae849656559153d59d61faba21f95a455d18b4a1c56453f96656d95156655f46079b22afaaff4ca24ac8abe2babcbaae8b9b2025915fd2db7d29647caea6355f4b5dc49e1a93b2dd6c3414867cc0d96690e92c6aa18ca34a60429b249cb3456450a72d31c352741d280eef64558ef0df8eebd08ef74dc91044903c0732f827bf81033019e0bc573a28bf3016140f695fbe10f886dcbaabc83073113df3d2f3c185a1968679f15b2354acb9ea57d3696fbb701a806d87bf73013dd2d46d5dbf3ace80a55c447472409a0ab8f95fb45785b6b01dd5145bc72ffe459fde4fece8a8e0b40555c842bf7edf680f3e21eb22cab327ba8ae6e896a00f7fbcb71e7685c90ccd53eaddcaedc4116e7deae6c5967a8065c26b8df155dade8b8a30804d45550ee138a06d4354cf104d60ad5000eefd87be00729f8e008f62c8b051a9e60ed90591cee7d5ad02d39eeb77fb8f23eac6303ee395c4b405d51ab32ab506e99553550ae376bac0275aa7d302b151b6cfb6890de43ae3487d8b66f1ef4be9a43eeb96fdf4ebb7bd871651501f99dd67f40dfe76d1eeec61d5d57d602f00ca13d90d509da4f26e5ea441eee90eb4804f78acd21f67daeda21f75b7dc5a92bfa3adad3f1d67a5b7a7616d62ade909bdd6cd7d3b1becaba7b0464db3789f2e1e57a2f578cf2612bcc86e6064d0ac74ba7b897530a99428ab7e2e87470b97befbddcbdf77a4e3a9a2e84f5d77bdf26426be86b69d25aa60f6bcf467b923062022010bd223c103c8032492173482643e4e8d0f1e4e5644936a7fc84d2d3d0748adef3fe3dbc2167574421a6e3869c49d52851a244c9d58ab962d37be711a1b45c318efa81ee386c3a75a3b4e9943d4d6aa653d65a92f9fa01b2efbdd6f22fa794530a59fbe6b5de7b4e8bd5eb6e7a9ee75dae52eed6ba2a9a414867b60514017637bfeffbb8cee438ac6333f7071451005ae61ede905ba7ecedbb923649ecd40086c8d111e2b85171dcb0e914b7e37b2a735e69ebb883e69de266e8e7ddc3a697bd77dfc19b5df7bdfb3ea4f30e9adf3d1d9bbf7ff8c52b53481b1a1b9a547f17d11aee339ff9cb29a509b23fd21aeed5869b48fba672dca9ed4a3791486b380f9b357bafd57bff7b4e4f80d6707f7d687affba9bdff77dd7e3de71dc254269160f21eb0a13b07922b96fdcefcd6de32a7729f71a9af5dc56cfbd87705d9e9c70b97befbdf75eaf77efdd0ff12e77efbdb4345ff27de9eae60ab79bcd76ffd099be0eb9f6f7ea74a6e696efe90dbd79ef96efed2f366bbedfee1b87b7b4f76e76cbb5c7c662b15899be8e3d2a8b4563996ed5c2200c433af3d45fca30a429df3bccbd7a076f729c77cefb10ae3b58d24e75f7b08ecdde3d7cea4ab26fbad787ddb99bd50364776f24a2fb100fd72664bfc35cb975eade3389d0e47afa9ce6f12ae783fa43d64c45187277b35dab07c89a298fc661572d1d46b93ac1861ccc989c8be6a835b73e57ee9b241c6a55e6f5c97db325d3578a73394076cfe9ea9594d6d4518818249d779a3dafe69aa4f6bd120af7fba23a38197033e068c0d580b3017703920425fc097110e620d441b883100aaa43e481d80311264621fae00754479396cdaa7427dbca2405d5d1daa6a03a5a2210a88e564a10a88ed60b10d5d19a1102d5d1a2b943a03a884075b43c2aa88e165904aaa3753202d5d1fa11c03789bb63b2814cba2851a2989766c24c3acca4eb4e3b26d40a45a083c704fcd9ba01e20f04b122f179b23e7c7e208895884f9e1d24e103a633e998746fe2445c891ff7734b5981e247123fb22fe2d2c57174d993be93f8b4b498139a15f80df40ca115c513a488b23acf9d32b8600b3e3f41275831e94a982371f9337cf9e9c2d27f71a4cc675a5abc53565c937ecee093bc0cb6397f160113fe059f1b6d6351fb2253c499cbd6cfc0169874798a687b8d3fbb61f049fe051f31a2ba9cd0acb88ff0b9d55c16d6ae1c1b9aeb235db06985ecc35af0f9fd842bccaafa65553ddb5eb17eb1ea4b5cc1dfcfd68d9568ec7755c127f8145c6bb49ecd1a5663309a158a40875908e2b3694d9c882b110efbad1bab109f1fee5ab36a5c1d963087294c01852668d5470c36284316a0ec7413a488c20456dca105ab105b56cdc2b6186d9bd55c1b8df56a9135172ce6fa5e56df9dccbc2ceb25a656e29d9c6635d6458992072d64e1092d8031e95a3756e19d886bc0c216c41003d916561debaaa0022c08e10352500393eec6acaa1b8c410783ee059d0bba16742ce856d075efb00abc147828f09ef04ee099c073c2db4eadcabb775a02128c40042100c1135a83d21a17c7ea7ec066759da456b7e7abdb84bb93d3ea32a135621687c34db83bf156b7095aa3ef845c5d0fd01a7dcf8b75d83cf56f0c680e24344abe31a035fdfe65591c0e53aaaabfd8f4c84c5295c5e62986d2d473ae976dbb15423a63d2d096a83f34a80ef550890ab55005ea567d8057879a7650fbd0a12a4be2d44215a85bd5d5b2fea941b503a718a87467d35967432d0932a69099a1194c000843160030381c1a0e064349ce8bf614800c72a47c66569a4893148e529821c618000006000040004084340c009d3d409c6b4b374ee3662f85a3a48ec92a28b3c1d4261450d3c0269b1def84086d3342522c6504fdc223d0448d4f8550eb68793a9ca05ea89de2db44d4499e21e5f73e2d41d249ae328c5912579bcb061c349c87c14913ad6a84a8f63975c33872f6dac9118627790181b5a9d0aeb786b4546396866e53874c18423eab5456b821976f2527cc6d5202b79d0946aa64b2c088e823c05063648de3bd11801bc9546c103daaca90950498eacb925499c623a72c3e76975180b1dd2a9963c05c84fa11c4167cc8b2c297db4291dc053dd58ece9db1a19d575d5f47d9423e48d891ea0336eb100e0bc998b7fddb0770af6ecb3e8f0bf274fb8e7662664a4805eb92bc699d1cf9f521f93ea5afa3baa33db169a895666df57a1f11b8ea78dc983ad23c4e24def46a3d3c93091b202b09413fc6c0c7391345754926df041ec7225170a70bd1f53e6d7284e78109fa335fd9948e36965d77560c657c47522c4ba0c1b25b35f6fc33358f709b0b90d3b2bf619f8c7bdf6be5665ab0b7b79890b5f77a7710e86410336f56e60634a34ef449e4a64daa5faa7f853d2817426789968b999230ba1cf740385dcc362845e9abaf11d5d69f824789744d1c7328ceadbee166979cea544b8ab1b0713359a139fc4ebc2637258d14a15fa0bd9182de907481a82d481f2d5288856bbe80f38316e9fdcad0d5b31389af2029289515e07a0c7d791e5fb76ce04bbdff1ceb722ccfdefc0f6447172d97995ade0ccbaa504435a4d55bb9e5f857181803602a196743291f2e214b8237c9cc8e35153e5747100e07e9f8d02d9f95c034133130c0787815ee82162e2e52f73120309b2281ac4f37da753c086b1bc6833cb5110d9697dc6ea79e995152f72ed79ac4c7031446cbc7ea0033590c1faebd768c9f80fd5f83a75dc319025f03d239cbbac898aab0259c17848087c2d95b2fff05ba6acd7daaa281bd8c8e1222404999a634262303c58c2fe27dd86cb0cd32d6f41c92f2548023ff55c2fa2d03947d6823872a15c0babd2801521bd888274cce76ed31a48364735002dac06494917b8cfaffde0bb19b777db07c4d8978773301dd314d37cfd1de6e83138730a5a1f8aab095db90b4c95dabb124f4a05b5dcb2dc7da99b16e91e64877cf50f9db30ae7e9ed493067780f9a5aa25354843e968769125ede6270b58e7ad5560564028cb60cd3c5a1a3e526876a0a7eed4dc53e86adc2afa104e3b99694f6fc554f26ad5d4370ea90865f5095a84303907ae64301e4cfc1af31a95262d2782975f7e2ff035eb445df706b0ab7253b87adcf2495a4c2b69923ca7f9a9e985ffc2b4f442d4154f700aac4347afdd73b7d620e8a6dcbd140b773dd451e1ace31bd71dbca10f9fe17e0517309d3402be3451e6976e60540541dec5e487058d753ee64037d377c212e20cd3d56e01cf86b1d062192a27c87b462ec719fa602a8839b6538fb87d3201d47d6e1173da60c666d922b0dfeb86e50a9dd9f4eb7654c163dabc78d95fc72720ac6d6544bde48ee34a37a20ec3291ad723573aaf2fc0f37989f7300ed271fa2416826533802e705d8f380a11f04abe3ad954523f874b38d642af1b6899e3a08f9dd3c809d626306b8dcbe7d0f1a6db5c06b001f8c131db2b025bf5601e9bd77e24d1f00378a2766187ceed8d920fd1661a62f9e7810ccdc8f78e10fb3741bec7299baec9e2eb0898e148e4417eac586485cd7b5e5ba64a86f141b25f8815f8b7ca1108cb7520e14efb98119465258fd3f6800cea8f7ec58f8bf9eb090970ce35fddfa9f2f88391a87a866ace3822f9cc599bd4f742f66edd7ca89c5d8458525c34c61dd8fb21d4e98f36229468d5363f8fa2811d306514f2c96bfe68960889ec5e20e23bb31ede3d3d9472bf42269aab31759315b1570d80fe73798de3f27ac6058a8685b521d6ebca7ee86b297e2c38918594ecfe11a5250fd77649d0c2e50122ea1ff96d28a639a2fa1058573ab2f25677c1ec77f940ea84c56c23052ff0decc02ba3850b9d6b116004fd44ff2b9e47066e63f06c8f11fa391d8e1d1340b3add51f5173739da55686998eb4c186faac877e85b49bd7891281f96df5080e7c212fab19f0bdb387518e3ffb9f069858730fa76c424675dc1ac0c38e4e3346dfca2666bd8298fd432168acd4229d92f28a21115d5cc103a758ef73926487ecb0a712bcbf58f8cf1953147a5b69ad157b9e74bf4a66425c93b57d921b9861d020298280255001721267282e4d6190956e70d4774ebb81cca3868ff76b626636b0c29819cae8309322babbbcde89ba183b34ba87a5cf58633970b677232cd0a18b673b60cf7232e467a61d741698cfcb66bdd5d7d3851e3a6391e99b9a9a12e767460a18671dcbd502aa12a88b7f4c3d4dd299dd17cbc7a1845ba08ac1ab621899152df37f7cbb392bf9381a97eb0d8dbd9768586c0cc1ab0b6936f45a4460bbd9ed8dd9d797d0205d37182c1c478339b6a989dd5f10b5243d2bf928063f056f055b4e7628cf6c0b841e1ee9a01e914a824c39076d14e9f7578bfcd741fd2ce5bd67a6836244f5ee16d63c5907c4c2f171ad27417666b48d790c6c17c37d0ab59dc9a4720157c0eceadb25e7cdfc890feffbcb97d648251b770851e096a6928ddf82844e9a6bbad3b59caa607b37157c13117650cb41cf451f845ef4f61ec5dd755d296d372f250606e6547e668fbf822dcb2c31ee26cbeb79ef9ed3b24c64df80ef71bb652fae06721e20623010019c82d6a6a6c011a4809b3bd364e211c7c6aa24beca9d7874c84b7d6f40161a7411f2e503a92004efb0fd175cf24d03f24515786844d7fe5c29ba914b18461e9a7429a72f490bcc2f4cb11dd8c7f6bc24d39101db4258758c28bc6c93abee34866061b166a7653c927c6aedbeb84021c2342d5bab3d7a332c9bd0629983194e4545d37e7a28945d31815b3f8463e79b240cbc89ee8483ae98b84cdc3e45dfa53824ebd410c2f9c25dda18d9e6cc08c1a908cb250e607bb30a6253620a7813578f847b91a4b3c8130a69b689c15cde1da163b7343698f33adf9c151bba28edbf4ce7c064a0b446c6b5a16c6760ac45603006dd74697f8d7fdbcbdd4da2a6b6e18d36a30480aee0741247eebe22fb816f3d665c786293720ff0ebc8fe77f0bd85a10e1334a704aa48694469d9a6ac1b8b5496fa417f528a0714306254763e74d7efcfafe9d50321c666f93651fdf10c3e6c1a15e6e1cca84cf3cee638ac03a0994fccef34101e2889989c6b6b5c747e1a71ad5b6412a951107ecd2124dfabf8940c602ff65aee0fd8a9c62cca54a8c6122ac80c10a53cb52b7e1dcfa8fe03671cced90025f953345392c199676ef116592a45599c13f0572440bf40cbc69c745d54033b0e370504625ff1e58b08ad5e72d9244c5a1542993adc4967a96dcd9b5d401ed31d50c84e683d6e04f79f7134747708187bb3161633e7118a7ef5b8745c05cb48df86198a7307704a8546f3e6cbdf1e9eb3b0d108bacefee73c5c84e170d6d5f85e7b9f8f8e30673b456b88adce2ef005684a5ede7a8bb238157f8a6a4e1dc9e09a883841d4810c1b414efadce2cac694be628aaadc1eb86582ed3761469b54f8c99a0d24ff8177ef192465850620aa38ee532f2931ffb5054885d8554d01abac420676119363bddab57ace6284a762977a321ae5c898b67a6cf841da4ce642ee74ff9eac7840ae896ac23a15a8cea26cdd3c6b2d7a94c34507234a045aaaa998b7f917a6ed8e5177d32e3c354537ff9cb09772728ec103f826c4cf74c5047086044b79b15e6a0c53447ff39557ee9efdb712abb0fd708e348235d5d340985ec263b3d1bb09a5ed378141d1548ccd32bc8c0c1a7e96e0aef53f1ad131f8ebd2f46689d0b1ee37115673f65e7f408231e026b366244018b7de24c94ae94ed68e250aaf07c8da48a323eb0a67b5809cdd426c2fde72a2ae329625c04193fde838be8ec3ee92e5e8c50c5e50e7fe0219228eccb804bb3304410b399c0724a840870d30fcad965b8167d943edae50ee867196164c1123ed63d46075fcae2f3ed54b4097e542ee47e491238ad77cfd0d7001249c4eb92e31a109f500a8186094b5e5a2b559894fc114d768092a3f187d3316b61ae2c79f207798b35feb04181cef3111a2339dc03d8115d5e3e88360e4ab2e4d91e8df36bf47b30ab9cac90ff96d42ef5aee2a0a8ba5dcf646056fe0f4c31ba70845817d522e01d9f1e59bf5345afbb55301dca163235173dff78d1e50e46bd2488da787092be5f7cd1c6ff0579d414fbbca891ce64ea6c0f4cfd28295c9f0334a124407e082e374707d11f21c2a4a608494816653a2ba72340aae4b0324d252d5ec1992dec9a9d13fe00af37f370daeafe3831850fe0d54de8002be8839bc50daed8a5fb3be78cfaac1a27f810b86dda01d6bc216c569fc7b412aca2e75eccdcb4e818ef2c53bbb4b007e93d0e7a7b92aee447f06693075466b4aa047f828fc1c5e635aacdf499d0a835063f865737e1b39cddc384c6cab22f8b7c407dd380f646ebb08b8fc984be96987cfaf46211145510d092b9f4d7379d752ac23d35971e514cd8a11f0137973e5cd2fc4cbaa7e728a49bcbe3e8445d3e4e1f33d6e5fa89b216f0185410c389389d3f0bcbb95011956c68ab85b445507f3a400cee430cb765eb3d2183be018dfa288048fabfe0d85f69e7bd3ef2aab8ddaff78a770fd6c4133b69dffedbaaabf24c55b85477a3819537f68970bd717a617a703d861ce22bd99fca2bbc47e189a086ffd86acdad9452cc9d5c5fb5fd46238a11c842063b82229651d079027cda9fec02137d8450c765f59caba11647e00bcea1b06166436ac19d6fa87335044a11eae1b8d381e54d04dd6cde7ba472b9739859ccc0cd7b706a9da2116675af8d111b1f23c28b53118d62a23b9448ad9308d5c69327870643f8b3c95766fde501845bcd28569a089beedfad07e261f86f3c18a4c6cb52335703f35a6c82999732b88051b7f94008349ab12363223a4208c98aa781ea1a54367c8412772ad3b0f75974f709d95f599c283d8b347bbaf1c02666a62e906a3ab549ddb7382253eb75341c4be3d10fb588c1f4c55babff4dfcc8054a95c2f40032942fca1047886acd40cc3a1246df21cec1594e7a264c07933ba410c71b3b96fd15be5f9cbb2bb0898affd0734c83de7183b15920f3cb9363fb83d1ec89a416c3e1f930927d6a9aa2770e278fbd400c62418caca9093e44db2c75302bcfb7e495445441ccfa0a428837f7b125380249fbcaeeafbffeeb50cb49afc54e7a571ebd6dbd6dbd561d84c9a160a651260d19e0fe979571387d5b5d79e9bdda536fdedc8ac72ae4ad7c3d6cbdec7a2c3d6c1d136a0efba3d46fbd5450508338569c88521a3f90484097b095cfa399ef6a54907a56238a32c415c85d1d0baa8080c8f167dd29bcd0ab255c7691d0e70002c1011b2440b3e19be1032c75a1b671c6026f1eab2e0996abda75de7851888140857711fd270fe5955d6293cf114b67fb3711ae71d38ee741acda958449d1a1892be62587c6e11385a5a3afd169b95e895ce8b0a992e3192336c8bab856cbabf310560df6dedf10348e932ade76cb9063f0750a15121d33930525e7a802b8648a960b52ebc002d04987b292483f410ac93bc367b8dc315d866008c73b0545d72920b989541d7cde17f6155c74734b4c479bd1747dc4fa42694d96eec038d96b9ce715c98c477fcd802fe26e29666512394775ae5e30c48f4e8acc7daf2b540011936d0dc8dc404cd6ef0e7746941bfaeb789f95811b3798830c20aa51d243217351bde2c659a962607907379cbd5a9eb8cab751e42a7f07ef2707f3a0739bb8451c6f7db47b0db787d42b44fbd17f259aaa1773d1924a2f54d9c577fc0994f260c1aa51f90278e239c8787cb7a9778dea8317a8e24f8ec2db89a0be2bb1a633f96237ff13437a9da93bc9d5156d57a9ab8b1b00f2df0db7ffc63cd1d9930519abee9bd3c3ea2ce22dde688993e8ec230e51559d92b7ad7f5b8dd13c0ddd07d31aded2508f0ca5d6ec076b68a1b9b44e2c68348406d67a274b43e4116b4d509b6958d5b1031585e5fd90d1a4a44cac0de7f45282e361e76cd57d0713bad4f6ac2b545292a5331cd2d126394a45c77d6332e5a7755355d963852c1d511ddf954cb6a6eaa648b795d73973f4d538ab7de1844e63ce720a65dc741a6a32f23b600ae478a1520e898b958890f7b106197dd1c23b93f8ed87f91d131846d4a61092c516184a144ca3fd6417eb13fac72aae3584496cc589d8d85bf490a5207de6224a9f893c8b6a5eff5c963796e50cb6df387afee4e6331d5dae7501802e864049802b4739a5037649778ab10c4ae4c64e805a08c6aeeaace890974f49db144fc8f09f7f1271d235a827e8e6b9c7b9cde261c55e9adf5d6622416e1b1cda69f05b96d0e9848ad5065aa510f1245448b167917382e97c4784aeb988a152c7462c1c68d3148dc35740dff2a0bf047265f6234644a7b2550b3f4ad3776b3e40985056377d1cbc1287526061fea3dcab00d13cbcb2809bd06a2201a701548c62f926443f4e505ddaa86d61e3c5385a41ba9898e05543642342e3e54256e73620a4e95242d789b663bf3dbcff9a3bc551c1db74aab210cf732ea30beb75bf8dc62a9f8b40f9e2402d129b521d4e462c84caabe759b40fe2cab11e26d1925b3bc0fd3ec7d302eb37057ffd82a8e6821aac3c851143f539b28ad45a95b68a943c483cbb3216f539146e26b47dc1025a8300b19fc54c45007125f099929685a61dfcda443ad59a4993988c2350a56263a05c90fbb86c12ba9e26ac998e3aa584614038d33fa6e8398ec10e3493e81a8bca1c4c3cfcc03bc15a5b4bcafc12b50851636955111d773ce98f208bfe44886332063ada639bec65ab169b7d812070b57f70b0b7585db0ccda4148747743ddc83b40912be09352b5aef52c8c1af491432cda53e41a772738b6ea651fa98e0dfa443a6cac826e66d8f3eca5b8675be42a350c4220701620c35a9bf2b617a02e3690aa93c9e33d4981bfd42436ba729069ca332468d0bd86c685b4fd26e6406401729441a695d681130d6d144e34379ba157469d1d57ac180dd2dd720a200e8fe9bd7f8da158c3b1bf2f783534c987c6271efcb1abb9d250bd055bc98d1425a277ef44050b6df3bb3e742e4a1f331aba958862053988908b054c6894a07c41577c62e136876c398704c8c7c5125e0518d3698752796fe0840262fe556a292d1235b826640bbc5418c93ca6d8837b8badec6480ea3b97c7f3d3cad93232aa6b85b47714984ae38bc797e267645333ade0a3666ee32169eda147443426e5384272a4e5174ff633933c1e88e1ac5ef18f7b386d2d95a9cb5c51f59550cee5007f814845b11bfb8fabb57119b951bf9afbb7e4bb92b4abcb15f0a09062924a33ea09d7656537bf09255db735dba5bb1318b8440325ab1a428c4acc91be573462947069395f94e6b332ac715c713c52ca5f90546e7f766c9ca8d77b4acde562279e030c9c6e007ec56eed0c716653f92aec7c50b3ff2b63bf8c22556b257b73d09b8d89e20cb93c522df5baf661ba3caf698f960ebed700ca0d7f6be8848c5c971968d7310a79c9b141777f7e483e5630bad6a4bdf405604ee1b18ed89d758784c5b45e167b6ae16e686f02e0b2666707841dd8e7ed66e8116e68e14b88afe3d1381714b6708b9b311047e723b18671bd1a67d02c40b139c3fe9c14548f3ec76e45778f0a35be1655de2f6589c98f247d7c912ae63c7cbd58e865e6f96ab3dca6738edd10b78d6f08187bf921b2ed8d7e7af76a8fd179f1dd275b443cbdfc1869d022b57ae857bde0033cd1d79627bf20e31447a4ba06a16d823b6a4107d6dd7437a4e6e7b469e6382d84e3ffab22166ebf31373f53ef2ad922ded615f2741119ac8da630c778bc903995b4167af3b8f8468898e3bc282ad114ce7bdeb00ff1e3748d32335337a7f2114d554dbb2c0d523944e879d90de55578861e2bd2f7fbc0b09368c1b6d03499db85a2670c10985dd756ad5b6466ac8e67c5d614f2960bc09860f785fa609ddeb6ed06c49153e3d04d39f61c1074d66e122f00c25a00cb3c3c27ba1d7aad8e6ebe3038a4afb87998d4f2d369e891ea86f4e4b87b2cde761d330da5c0f3be27e31fae6e700417121d849e946b457fc4a1bb68be45f09556957770e1ff8720d99e88f3ea19dad7f02271c1fc4a0af5c7ee6c7fb1560a0f4b229cdb5f541f92970cf173d4fb2834963b274541faa8fd44f962bfd87eec6f6ce7d8c9f82b6ede3e68d12a4a27841761d2dd30e2e7912637615a8616044a6ccbd090de279f9770dfa46831f56fb5b06ec55547e43cb3036a6b42da5d1b498f24b1629a741f080ca0208a79349d7d0dd9783025962f59b7fd0542b94a30ecccb1bda373bbb7ed8d42a7eae96101c1c242909cddcda17948a4e3f5f7ae7fb5d94aaaece7b29f3a311a5b6136f019940942788d029ab2b38df8013a3ad93584d949e2d9eb4e8c8f10192f85447644bc6e185d8f39a923dca9ebedf6345e7d1a1c89a297707648b4959ce8cca803ddd9fab962d23e9f682ab947d827f45bfda093d759f901f23a88b52bf67a561c64a73ea2205ec0899b60b8b82918308807cca56aa664a58e1e430197eb63fab0529fda8683a8752f7700d02691cc7f90b98e22bef356672776d92655dfc295d7183b159dc9104de0ffd7352318a39d58144ed239bd48c959b042af81c8513fc2250dbc7e8733ad611df6390458b506ee52140c51d33e2f46418014cd23324bbf8ad112030a8de2a833e801e8aef90633216385a6419bb41d904ee58a5451a71c798c6ab9fd27d79e7c5b32d380f728b49b1d4f441e288c58678d2c97cc101471098ada6d16ee14bdbb371f50f679d511cd5b43be2c608cd42c5bb661068c319023ca5b30c8861b3c1a55e5060e8b63922485346ed0ea54de08e84954a0cba5760e4c06dea66230da8eb531a419f0a484abf20daddd57252854093732cc7949bf4a962499526238f8506372ca843505e3bad081e7a4ae7d0ecc5523cd72b45a8614210ebbdda01960cf053d8bfce724d5b66ad3ff19c837b7055f5b7f93dc25ab307e8ec2c07488afefef87f696826469d8a1316d664027e94ee28fed8fc6e7e4dc627d9c47eb05d9ee9352deb51720e2b82f9b7c814f68e6e5dac1d9d1338854499664d1b24d1657faa7635646522000b7cd180ae496405a2f2a46d9a6daad8b711a5010c4246b6e6f2930c94574148ba0e40d04e2f1c50a63583b3f9219a9cd71e6ca7dddb9e92df29131301b8081ea0cd6e303dfc613117c7faae735a9789b8169185c1a0101a2e9f3222c59e7b94cd4309bd9a2c27bd7951cec762279d605fc0312d4f87a15f2620639e6d367ebc498c5446b2f0a5bd0483eef15f26a481a3658fdf293c5dc47a51c9e599345c24e6c130db1342362d6cd802cad2161bd295ccc11b1b4031c925537db33900b5247bb435a34f35704bcb1ec594c1e7fb8295db13cb93bda7038385273a160f022526fdce90f2f21fb36ab977a9bcf0291bd4f46fd19a54cb1b868df520bd153a5db045f2d0c100eb8102e50c55ee5208eca1d09b022d36955a8baddb1baf2b9e29e758c54bcec161eb27ac8a110ee5076a61510dc00dbfbca27cb35f312d83d0e8e181de5ec63a8d4be564c4ce84543dbcf55716a9bddeabb712c1cdbbf8731937444e40919155773c38031578f7495a8141cec1b5f31092132b0ab0a1602aa0f347517d6e927dbdb3a25d6e71af74bf26c2cdab281ac17e785c5169261180bf6c9cf30191968b12077a82cbe1041a019d66069c7c8918b01cb2f2ba5b059eea9a8495625aeeb2547e71c08fc3e6682aa88fa340b8c9f88d7e868c0e2ad485fd060d959c425b0767316239db751ab8b9299f115ab1f757d79c2b0cfd784418a6c1f629f4cceafd386294ac7d4750e38d5a5dbb885a2243c48bfc48a95a255cb5ce05f744ae6de1a0de2b1edf98b81f388f3e9f43a78aca67d7459ad5ca1888a201fd6e3f1dd63f1c660c17a5a2e9722647afc82bf442647fe351e3d34f767ff1a60961cd7f74cf593441d240d16c158a00cd478bb253b6f7c6137b7c23e02fee5074036c036960518c88475d66e652db8593a1114537c04a6d404463109d2f8ee6b1b3ac700c82fe1522fee52afa66d5c3a3d6897f8b153442ad34dc089e0d6eaefd80c3d434c63992ca9d3a3779ca9e1d0d22c7c5ecb061306141e5e072febc58a894b838630035b88511b561c007ffd18d4bf627eb3775308b0575727dbb705836cc54ff6f9b6bd87b31bfc37deb6efba0da59ac4e8e1a9cd8924bed518163f56bcff3d85307f59da665ed26b951c8d76cc5310eb49cdafb0644ec1909b3edd35a0d48ebdcc8ce89b1d934647b073be98f7242243daee2ee2ae0703b4dcf14954bbfa49a30a85f63b30dfd4c2783a770dd3374b1078ddcb4185644a3c9bb142b5767e2d82f57948e8f8797aea2f384faa68c2ea8bdd4d888fda35cbce6894a7e744253db9191f0d4e08bb19691dea95c4fc9332ec77998a7b603b2af2bb0ee30d7a0a47375093830e9700e23c5c7ea59b1e893e65ae61f3972033ba01e5cb2bec05d29ab0227aa472f807b59b2d05e96faa9cae967c400cb570eb92816c0c1c0b479adf293d608025a623489835104d4bc1e2641486050cdaf54bbfb898bd009660e604e603fcfafc08dd7c9fd7a89cf62c19cafb7bf1f37ec0ad831944a60e6cbe8198f1a5a36ebc4f85ac46774c467294027b797d2c343346fa7235b276c8165356445a13e6ddac74b44f4bf0d727ceeb2c867d22aa7ffcaec0f604fc57dc1a6dafa9c11c04032870557cc00e98d1a83e677b0ad5a07269fe6e5cb4f7b783b1a36d5f2d0689a401f962b609a37684810f94764ff4fd70d03343a8c66257c59f1a30b7e32810e67d6b8709533610ff645faaf985919b73025b3af631aebcde058ce53eb99238a06c51b79a088d4d2cdd1369d9e0b9677336814b780deb2d19eda5afe41691112486e2c7727068a602106305e9ad0180f05c7de230c6ff384c12eefa14621a58fd122d8497f7409f22646d1d509a1086a7f6dcc3a37b24a7d36d72cc5d594579cc3e576e77cccdcced03582953a2a3a7e74e37c1ca7c3e3adcda87a6d80a062da90bb47116ba453342d39396e710f803e3c72d6d07ec8a83ec3bb4fbcef834c1bef365713638f7000b6863cca1870f90421160169bc67a9e1965673045eee0551bd0b56ec12c0a41a48c480c415885179a2cbff13e3d345593438ef660ec2b0db66c6ef0909d238fa51fde1b4041d146f021980f43f46f106edd1938d120b77c321613e3322d4f04019d247d3c2189f18424440bec97ae4849840f98606561c20a8455fddca34df056033ed13c28356c2842e9b30ec9d3989111c2a1fed694ff52c6726e995264bcdb0a66396740e3901b10c7931f305eef761bce2b090d7e94960e868686c9dbd8f44f406ee9503c80218c521e524a2d5938a816b52b1eb70bfce4cb63ccc36806412fc9b676038326272210f080b03083c779e2f01715ba8d314506dcb02f9e31abb15dc201ad5f3b0d556cdf9f3b186b6e47568678306b1f3154012e07b356a36a05f68be0f3a133c195756833f01f45c0bf6d593b2fe78e8b45a01603bbb0c8852af56ad8564e46f062d656120df374610a888ede36920e89793e697f5ac8c5713e09fde6daf2f094816e00b620f29c299571760b24234c0e05bdcfbe6dcc9e2f6b6b8dc27734fa505790a47523045c86af69568a46545a3adfd505d95a9196057172cb334fb5ca0a4de93cc44e535284e5698a3111171d41e5553aeaf108b8a780f817276c7bb84cd82ca164d796578a789677c29ea5090bf40f3126d78b5cfd62c58a77b2a3c0c92b8893acdeb8d5899cfc6636896bf2bbec4968682d42db1d8944493464883e829931bdb8cda0a4084bb636967705d7b3b67ab3f2be799e4fb94b33a88051675d0f7debf4d4b198b18bb84d1da8921e8e42e2554a5760b03ec053d39673fa759fc95d2293ef7d3afd0b4784d3a4fa741e02e1f47b6d2bdad861b224fab98dbf579b88888901b0c705beacd27bcdb4992c25b1210ba41bd8330a235d0d86bb460c3e2dde520ace456599ceeb0f3dc50711a337428c52e265a59f1add2319a42c6094f86d14c15f64829223a4f125b92616f53c6bc3ebfbe82631ed75ba0cf68cad3677e0ee1e28cdf70d45356df56af84646ca68daeb718f575352f6e2471eb2f012a379f0d84723686d9512ea3e7ee5b5f013e47c4902c7203b1bc861b094ace3821f3d6430db477a27abac90f81790728f619e310bd36580be0db4bd46fece3b7dfb04264d7ac539af07ed7f0aededf552dd4eaf5d24a3d3437c2a1225547d70d989dc098e2db4c6062e866b1418012627d1fd540ce86db372c7985482724fb78d666797b41c407c2d2f93e97214403349ffb82ae09481da8e7fe214e6b400fce113cec9f5fe69a6977e58c2bf55e70cbd22031610ed21b0e83a16ba8ea4349c399d8fdd63164b58540f3a87c4377014bbef83acfa2bcee08ca9fc035d4110629057a26ef2e1ea0a815aa2a53c5aed575e9240d06288b1b276fe5816c8c35d7c8405b0187795bb388dda34ad5ccff78a273d0c4c7058b0f2e0dc13fdd33169b4a297257d4bcb2cbd6a890c264fbd2b542d01426d485e1f70cc36a11db7bdd345210e39459d9827490f746548201f5cee7fa258d16febde8a6d1be6e8a499e0d4fdda55965606934f07052ae6c79fdee27e93dea1e954ec69d4e79339150bd462c2c76a92870c3a4d71f896650970e3c7b4dd54613c99a83aa5522d497dc79c65b4519d5dca4e296e8d71ce71f8d7dda3ac56e6d818cc1cd148f7226660c723abfc18a082d0beb98449e87eb67bc7f7905547ae17eee4a6b81ec5f8d17d6bf8169eccc575201319da578c0fd543b33600a65a52ef073753a3e547434e09dc76f55c80d9337dea88697cf124bd6642e0117cdbc7afef1eaf0834a4624fe1d88fa2066e33c5b7193c1b584864df0fb008651b8f13f6dd8bd5683222da673e037d894c3ff31099a4761979073af80cb7a23a1bad8920b1570657c51d0b4e8f13a12bed2f30811cf45c0f966eab71609f175712775e06f82200c1f5a12b55d5e3e03dc94ff093044837d98882f818b8bd170f4460289e82b51a83be1a0eb3546b852385b48463a136d020b9d92c66af838dcd649be6f7bac4bd20386c8afce721569c1f3cb45fdcaffb05aa0a3c5331b81839464fb5c4a7bf549a3a5a30af83f7d99660817ef2b450cd058591432d6038aa228df93c7348481c28eb567a67516d006106fe4de7ae14f40b5d41527860c2b58eef252421bc7072c278472c2be33da449f792cf6c0ce6c01e17131cf665b52e77be6eeea2e3dc05e4556eb19b0cddad9845ba3b490ce1c204b633a76b64c92234ba20484f2c8fedb8951f19a4378b061cd5d51ba335401b847189ae6f816810c19d72128137122be6b2f5183326b047c02f231005bdffa872a8c5e85098e2d4c6d12ed6b005fb5250d6c5a5686ffc6777310cbf5674ed720ecdf51e0cf4af10dfcb65f00218c84e679b86aeb830b74b4a67b055821797021cb02aabd00645353edee7a406ad8687c19470cff8c8e0d4890debc017060cab6a980dfdc3f331ca7398cb23470c6547b112d2e58533a4e38db9b5c17f6c58c7d1c35a069b8ffd4a8a75d85d3ee363400229e334409b112a88927c6e4aa0b2958080930e41d165892e127a5243e4094b26273ea1bdd07e4f0a3cd9557542127012f8855b2ff6e5f2d68816a5251e5cb500b98578c7cc5c4c93578a4f3f56a16ce10637d23478b4d79c7aee13da87794c1fa82fdcf014f8e25e01f603c69a75d3e4e8425884be1e31d0d147803b7a3264ec65536832cdf994a151363dbd9f10bfd2c2ae91a247bb807010166618eb36ffc4776b714562ba9f2effc1b284fb29f31f630bbe8736ff99d0051a22ef822c00b952b02fef01d477edf2729e2afac4e0690fe758041ddefdda31b215f158b9485d6efd3370b8b7e51f4959597e27f5c045d729377f9ce3eeab909f36a67ddbef76e492c0bb25dfc9da73bd9e1972bf4cdfa341ffa377411e4d351d35fa5ca412a6279380caf8be1fa241476e3d01c8481f06b33f4d3ea1d098a660c99407406cda5ac609a86aa0d2ad6f7c724889c5d3262a72ba6b93544148c91d23fa8612bbd53a6d26d4d17e2a5d0db21de4eeae86044abfceb87fe5585de4f2080e114526ab997ad69e21324936796e135c1c6713c8684a216864433e9704856984f270dbc2727e1e1863f92c0851dd2f4f10c6a9c691781c2c4b8713454285b58b02f69031ebd13e7b2e18707214beb8a410b854b71ef9b5144ae6b50326a80769011bfdfa2e921a39a74c891ecef9c7ec693935f5906f0fa84a496f7fab389911e37d03bb99201dca684a80dc3eea6f260fd4cd5c5eff2a2f7c831d990cf668daee093fdccc68d971a43f638ceaa2e83f2518a7fafb51a9452455a070beb3f32e493e48254b639c66124e2cbf074ff4244456541c92c9e4e3642ac76710d69e6e1e4a381aec2049191802b6281ad39363cea9992a11241a0fb2878ad970dc4797546ab816b5688ab27d483b79f4b7aa68d2de73ccc770779216eb9fe4a046316402bea6dea3786dc3a6f31b61e368b6e921e88b6ee1e05b33bec85274ddd549d934f55ae2248073efb6ed3e8431c0bd1b037781bc72ed58abb9175de595fcbd4d91f7dabd61f4d37b1f88097976fbc98b175750b6c7a6bf92f2c496e8d6217093a0d894fd33fdbaf6b411e7849071372b35057cb38c0b2e629d0d153edcedceaf98b13a4ce42b8c664a2ec4a7014e444bc8466c94399f297143dc0c2a4578bdd7063448e39de2b392827c8cb355364498e7487aab498e92d4fac683914f5cb3a1b5c625678d72c9b35b8a693668d54ef4c477214a771a6903387ac477579fd4e9ae252fd6374e28b4f8868edaf9f6ac3f614db49f9eaf76ee6b3290261b8bf222637134ca178a55e0505a49a9f6135d74149ceecc254a38984ac74ca8bf896ed5884863ea3c910f646b7e2eaa3e4a1fd5b5daaeb8ca24aa0937c2ad332239a9b65e729ff63655698e82ed543617761da2254302e9f7d688a7cf7bea139eb9791e3ba7a6f5e1a87ad93f113c5e38e05607c8a661c61ac6fd6154807ca2c63e538575df1ea2e88f92b7b86dc0697476a41342d57368ffa77c79a56dbdc607973de0bb74b7b761378f4b8d1bed660da34b9d883453d3fb10ea5d6c44242eb11cf37716054e8b88c1fc26504402e82e808ae0373caa9444db0e12c8ae257fc88a44c393c4ea0de70f5cd183bf7cd2dfc804777e24398c4c14dfed3a996e0e65b81ac083c22523a3279984a52066d73e7abe689132620ed52320295817855f785f4eeca75319540ad279759245f84b958300dda801aa3a4af741e07cdf0f47a15f16dce1dcb76d6abac3472263c20490cdbc8ed3a01b1b0043edb8627d9255c9edaef49e240cf937971b5605034e1f734575da07322207748d48669606a705e2d8b16ab821b3f7c61ad32518da84640328d6e751063cf003aef5c8bf4b94216efe8e20be28f22e67443009d1ac69fd33e32d7006d20cc29b5ba64ebcdb19683d71c91adbacad4caae15cff616eab828aa7ab8f0d50e1ca645318a032ae19afb01e82617d700ae5cf0277197331b3e7fdbe639b5383f09215eceb38853a97d7a8c955654382a997c2b283d60ee54f8292a010fca1c51d705b99dd8f9305e61ef2205f26bb0b92d282e2891657b853c9a25b1683bfe22eb2c9ccebd21eac58a106c6d503aed894594c4d25063e980c889e15641f69646105a50ca9b5ecc38f3e07be564eeae62a2cb3a20f946299af09ea131c483258b8e84192a5d604dcc4650235fc1cb04c1eae309bc9f6c706569458d61a4d0f040cb0c3ab9d0461f5e84c24e1eca14fe033358583565e025d11c05dc48ad457401e5e1d9f13e58198331fc4b6f415603011a6c55f5a606bdb5f5feaf44dd80d5a02d421a1968f857b3ac997163d819cbcf7ce062b1b3be765b7354aed588597474f7501a43b806beccf09d36e270ac9970d4f317381e2196f8db9671142c12cd23425602a5c429dc1755201e85eb5324f0e5bed43132d1ac813072238aa7d218be02042fc7694687cd09932a476ec7f9c86cf9e79dd1a2a55ae60f617b6af4cf36927f2c974ab587aae8a025934b0230fa64da8f6f87b78925380a5cb73bee60d7bc5f13b2c59a43e892592c1c6ca4304c68682569c9160d2e581d0160c918264892ded9a576ab4e8276c9425803bf4bc0443ab512afd3ba37981d633ec6ee10c864e49ff44a901a7fe42e22524500b7bfb40800e3f469516409e0d33979ecf67d8830663fdaa55ff868603c34ce4c28a1eed28b55c1d1eb982cf787ed67bb662aa0d106874cc33e7cbd975b7a67ff7567c06e9eac092d083e92f24b9e11ec8c65ad031dbf5813b5f2a98ac378caad256745fcca989969de7e0c33ef591ff0efbb3bf49cdf666c8803f6bed9bc484d869dc9554ed1af8ebafff049275ce5167d269b95cea9902b1e9bd373a4fc560a87814461d416acf5bdc4a3e6363438e0a8fb66ec7a9f049f65ae2e7609b5dcee9eac10374283f859316443dd99fa6686bfa5b74659e4b865e36288c2538725d3de14f01b45957ebe9affd5c93c91e678e6053d71aa41eabdf41cfa8fb11be455478fb4f24a1f2d0783f04e0749a0d4ea85bac01a2a9b085dd0ff193659869f2f5cd34e64eb4508d5fbfd5420aeae695b23b2be5c8cc4b2921d8d91975667c90becccac8faf5d55b63ad0a950fb6ed4c7aaae5c694139beea53db36d63da532d7e9db28f483e74cc23fe4ccbb74f584590e41b21362a288c36abb31b66ce30dea8623f69d334075771c6712655b7288b8d387535f38e69a6b8bd9918f1cbaa3e26a022b02f4eb2a2a00aaaec633e69df30ed74c37dc967b6d84d7846e3de14a79b6ed808520263cf82918dadf07ef6e9d47de1ca28f7ef3b4ba332a5022c296e9db4b5067ee8e1b76a0862d64c5169f0435e2da706504cc5546b069b251b8ebca533175211977151d01525d94806fb19e5015734ed49c319fbb3cd951bd24fa3c17ebaaf4992ce68e11dfb93e0ca331af66d012c89ecbfa33d1cedffd4d4d3a60e16b791fde70955c4149828cc81ffcf354d35e94a61815806c9865db552ac36bc255144fd542ba495926facd482a2d6495f6a80ec99e2e1ac3c92400d399d5ed69fe57c6102443300d817d6c41bab4d7b3d65b85e89b0894265c04f9adddabbd3fe3b08d6e7b59237adc7ac54beb9e4b4b6fc4ae527d91a933211a0da8579c5d5d8308ac9507902718a9e2880f07ba87f8d9c26d549f9762accbe2b20466474f154602c938a2c5632cfbe312db2329f8a875575f74541a2ea155e8b4237ddc2946a4989e752430e119f417705a475ed5295e0a75058a050852c860b088280c079f8604ca121b5ae9974474a55f87d6715f28f70df3f2d1ffd2ac7c56cee785733dacd4e08fcd5d9b0ac58717dc1db8b55d7f253862c2be7964ef92452d3ec4cc5a946301448e6436c72ad692ff5187506dd95c46c0806da5e92d7fe7963f44abac6595a123c9521a6824151754403f7c847450a1dd8dc58a9a70bfaa15869a483242e241a116d35dbb5da919aa0f123a6aa8dfa225297fc167befd74a821147af0905559a0cc005fa9f810ceb0f7b08532c895f43888119de264843198cdaa4b3bcd55c81025dcf7a2e235098bb2b32c1da19d24ff1ded85f4d8cfc3c7bbc9183b7e649c9ba916366c19d0cf24ba2d6e901fb2f3bf4efd1e5b7d05045e696ff9c914d2d7f49b9fa0cc361faafad2829ebe83e2ca5cde5dbf26809883856e11536ebba157c7e272910c9c3237fe50155b0bf56c528b88008ef15bf43220a7be187a6383123aadc3bedefbf6c2543fb204f56573d289e4a7240e31353cb6a70da154b65d97db432b54dc1414b5693cb59994f98e7f7a3b3e251f084508e0dacf69dddace6a25a39f5453f83f05a6720dcd49c46a2599105e415aa5e700d20a16d8084d081fd4615fbd504f92ce2eaaca0fc08a2deae599beaac56b464b1f396a5e900b32d7f7f8336a8a2608d7ddc999f2168661e39140f96bedfe2aefd00d97920ecccd30d0caa406ac55e70b0538b30027d11e7857a299ea40de08009d05b2b8d98c9d1ab59c7922c515c75c15d6c22fb7747a496823a10d15205cadde96133604765d010081fa323657b8c6613de26fc2420551277019e5080a899c6355c5792494950d38020d78ee567f874364968bf63c084e0010917d2b3f62e002a4eee088dc0941bbde5334bb9d529c6a329665e1bd29b24470f9709c4509caff8985084d4d3e0e26814d6be4f3e1c4e6204333c42f4e9083b632cbd8830c3b0845d4d5e28e4776049d3a67b4665a5cde9ccdc681b04e75836eca480e748186874cbb5cc84af39b8108d1713b847a64254627386231b8a3e5c9198bb9576fb14709f4e1e4652077d88292d49f3787d240239e198236613343142a5cb5bc38679955e0548ef780aec410925fd3480dc2484bf768cec78329fd4b3b5323681bdcfd31b33e04bb4848e080b601c00d79988960d51a5b9003a2f5288caf4d88a06e29a2d59185052e1fff0e26a2313450820fb97b0829828c55ded846b384356816bbb735313e3bd3df52c0a34b2f537e991bbfc4eed8b1111d74d1ac37f3d277d30318d050cf9a12e61a540c3563c9464cf3bbab4bf00d34287eecacbf5bcecc80b43a7d9b272e6fdb0098e333a61f2561ebf056a45d2730a19c618b3915252caf5d64373e63d8bcf244e22ea9ac76c51eefa13fe30582e09008822285f48e69d64a9720cb7c8e2cd584f16f84c260382a05964459e1d47e59e73eb56e43f21141535761a78dc5d554c837873c8a44ad22adb746dd29c17261dd070f932d66151156ee2210d1295e0e9841b142e61c262030bb5e4f39ba412335cb56f8485ab7d583ddd48ad389d8d76290e8ede85dc8c5d4a7ea459674d6796ae94ca5e0451aa72854ed792a7a46a5be142ba8081c23a59b98022ec572d78643ab6d483043152021f39ed4a8cb490f5519eb33c2319a787c18bfbc4080562ef033857759fca0ab7f16a6a8e21aa649b8b336d5a3d95983f092b4def3a7d16d5df3423dd03bcf409544a97090a1abfd140c05eff2931062a903ba6b14930d23c07b3649881fc7d0e083a6c692649c8ff86301b784e347e916db7c4061a0b8c28be962a27a2b250c336462e6ef011def9db720d4876ec744b07c6db20f9c8472701958978dde5ed55b9e26036d4ace9c1bc8c717775fee1c018db1f792553ec60fbb9824de8809c4ab301a711562af1f9999b8142493f59e002ce105eb08aaf8102e16d6557566b97690eebb7abab125e0e2cd81a5f4fbd1fc69d02927e0da70ffcf8ff672e2e0bf9e13fa85692a49246ee1c960a7b08ca51f23d6e88d388954087cd69ebe981ea1c292b89dc3e13b7534318f2e045e7032583e6a82c86cc45f317b2685a7a10509a0588cb161648e29d3f2152a441bf523c321ba27263a1f3d4a35d9358055e4716b09a45ee39e56195368d1c0b9be6d5f48b0d1355694ee946d3c0060e7c9a15a58a07b2c95dfb8c3e430108a7097d6b9ed4c5938b1981d6efa62db203989b49b89141e462ab64dd2ba74f6732361f696b94ec555459d3b81de4ac571280def16036c96b4cad2b7a3f61ca20d80b4f66150e0f55f31f185c5f08c22f186ed28279827e710ad611e551b296d92b8b30a7c5aea777f35f3406d81848774899829ff4d8d331a34b3b7bd274f9194938b15d80e982f5d12fca7c7f130ef7deb1741206090a1d73ecf719ee6238a62d7747a247f9d4347dee54b53d7c733673fc62bb178ec1e4a6b2e994d60ca54c89cb3f096ed2b4b1ac49a6544ed796501730292b6c48a94cc179c894aabcc3c48818cb39149b98d520b89e6e13acb0b58aba6c6e5c361b88c3274c0c5cdc7176e96d15084460e05b8749e098232794860c2487c06195ff51d230e3838111a25562fa3531a7867d69c85c79062cd596603404971944016be91b144956518bc7a770ff8be85106530e30abb2c9d7cb22540ae85a976e29023b1b51b46321d349aaf80fa729b4b98f46c065f5218acb3c40bcf74bff5d75bb276f5482546a57ff7db1bd857cfec6283e6f6c9074fb313d58ead2611933e1806c4e0bf82f45d139c7819c80a666a2ded85de02f2bb7884569be8dfe3335284f9735c8a6518ab69e5402776afe7eaa04ef6280ff14381ec378cda5294c3dac8ab18e34c9a97df7de86c165399b2f850e0c9e9e512da1815c890cd44eff63d87f5a1191a01dc56faf74435c9d9e3bd910aad94170b265147300f3cb72a034b5661bbff366d0b2f0840e10a0d2ccc6dd929b0d21b20327a2209939525d85b79d001195782a3cbded80af8d31bdf0f8ff16e0d7ff80a2d8bb3c69be56b8048f70c2346fb160eed400fe49bc6c259bd056245a4244bd3c5a45ae881477b559e55efc359c51ec3bba5b5c6ae68b45bf2fa8c3fc26ef5b70a31ed90b40ca03bc68b3109c7beb3cb04bbfccf265f1726a3080e14f0dcaaaac53d2e45971f4bf27eca26c4c513b71a0819b89de970402c604054fa416c157f89025c6fb840dfc4daa4bbc1a3e6b52003edc3c4ee4dda6af4fedce4ed8d524ae9c6d95982c4b2907a797b54895e071a90af0fc171e941f03f8dbf3434fd3e01aea48e78b6f71b00e87d569ef5204b81cf7f850e43c2cbf65648943ce30776c8851abfa252c8021bad3ad5b60ef39a24495aef0eb8ea2617e6c3f2e541f9b7b40a4cf758d101276f74dbe005440d5bcdb3559f3fdeb12e43318a423664b177e92a6b8eee5b1dad2aa678c95d8b4f4c7d0998c2fff4b4ae8007dbfeedf8d15c43cef95c9bc8a792595214f890951a70606e145c7a419c317cf110f345f60a7f661a11342273e82e434632272908eed98eed23343888c8eab4c227a8b930aa8f1f38a55670c25e7c024f9f4c7e407988d6a9a3bf9902eebc74d741a6e7beff58df11d48d4f23fa042a21d4a82703cee87e150ac193dfbff9a383ac42c4e399aaa8181bf04b9607c84555b3ce5e667ab93112bfaa4641bef5ba11938dac30c41080f2c89f6d40967d70776710343b256538eff9e511248be3742bea461cf08d3198917c4d73d0994031ea3caddedb18ab13ccf16e7fab631bbcec34a985515512f378729acb927b78f6a097227cc329335b9a42d6f404aeccf1f658f454807091bfdfb2196438ff770f73f8c0e00217afaf6c50b7de43b2f2713136b334d560bceeca4ff0893b3048dc27760242403fd46fae57d17ebc25d450fb015ba740ba352e2fa3a489daf2ed0c572db2641106366ebc7ed02910d3f3201a3265b13e99100a211fc219d4ea7f4ef867b8c45d5dc1f18baddddbc6eaee915ce8a937cbb3c4ffdb87c7ec45283bef965684b9dcb23f8676439610012617e09b6f92e43027d9e1e7038d27f56a8cfe460dc6be3fd241a705208e418f2ea90e7bc0c1d1e3a7a59e8ca01d923d4afddff93aeea8f1b141ca894ac5a5463059234e18c6e45498f0fd9843a91fb14e0e55399769a8fb5cad34f2715bf644412d819e9030d19e7bbdd8c1348cefa9386b14fa3fb6c89e02856901bbc7415d3b67758bcbd0401af9f45137f643c829086da3692c64215282d77640506fe7f4606d03de20a0debec44471444f6d017cfd2e1268412c28b2abd075329aead24bee758c859d7adc31d685b3225ceb3b11d548eb8363c4a20b58b64b120f6bdf405ddd59d0a05e165f27f0fd7df787382070c0a5b3275f546c0b43660b3beb0c92cd99ced0e1f654d5afe47eeb47f3fd1a0c58c0c7c5b2acd19003e82398d3e2938538ec20a88a7758ef4d73c01cd63dec009f6d197dc102f9dd2532048d0837885a82c515144c924a9083fe58594faa2ab25bff12a5fa950ad7c890de14cc27a502213d4be7d25bfc0963fcbde572cd41c74943fb58b09aee06d7b5f60d540266ad0b71cd6b970e3b7da276dca6101eb4d83c1a6386b60331a7439f105f401c0c3a90356e829c7deab46e29279ce0972e837aee0bf3e6e817ff3752f7d6793ccec4b2dea64c68928a576513cca3125fd60136cf8440229aba281e6bb3d68a93f45b36026f19590871d17f9ec5e222e96073eb0befe3429df507e2d8634c24144648bf1ab100c4f52535f4a040ae42708a6a505b283cb682b3e19f547cd0344041ce41e5a57031c0ab22eff9e1388e4627b17f2697eef0d1370928bcfb819de158a39aa7d93173d50cd7c74d5ce945b749dc338f4ef4ba06f04ed1d4288298bee5e7c6f8c2462096765dc239064fbe31542fc3d508dc28c70a769dec6b929e1132fccab8823a7c5e05a5b3d02e80262064b364b09c38e9e98f21fead7576075a7707799ba2d64773450bf71d0a732c3ad4417fe42cd72705849a117d99eb5621c607bcf9f709424294522353048f88ef1e87e874df11e9467888758c6efc37f05d4afe0d94980150c904477dcdc6b1d2457e2e6a35af6911fba61872eeb41a277eb5ee15e867d18c8272b5c7a19d89d4ed4ee74a90f2f2885f40ae51bc4358d1c1d3e72eff27bd04da39586626d3eb67920e939c5624b49b1aaa74a4977d525dd54f4b4648455f5d7ebac01eed0247882debbb79fc4c3272c14487cd5e3a58e7679a682c9178c96d919707c50ce62d505e85d47808ab5b90966ccf6d54ca59fb3ee5c64af6693ce7e008b5cf17293a8c80b35ee45580ad9e2e854d17d2298fbb8541b6931559475a94411bd09cbfcc1a9f3f490f85c9bffb7e14cf6529b2606634c49a598a7dffff38a361536e71e2516d43165be892a0de29fa4cc542d8657168e730afdef3dd5fa6faccfa4e0b862825f6a2661b577e51145628dff653aada7434e73b86ae623fd28e31c54696740dc3cf94a850595e594ad21f1901c74175a32997a734cebae0aa6e36f3bc5438bd358613a00dfd3b261645933f0e1043887b3b750b866a83bba955a9434251624a0ed293c2f8be626f2e253fb0e2876a2b55bc44af679d63677f84069777eb5c527b8aff640008d03ae557c60138d7198a88177acfa385cfe105598326a957a2707fc9c305b24d85f41fd7910d1e399d81424ca1f725f7c499ede1a44ca521707206e5c8c9efee7b037e42f4cbc794cf81e1b5dafa6eda6c6c8a84dc9022733ec8ead63c9eded89f7b88cf441de3175df062c33060426e1abec6ec9db59e2c384e47245b84f278c32508f3e497c3b8d55e0bb1668c4c92bad82e52d2f2277b7ce0a44984c0a149c787763bec37669baaa3029788472c2ed37743c92b3a5d4979749e69a7acb282c0a958fa79e4a99825926bc86ce0af8fdf094894d5f19f969f468b54f60fa3c5da234aee163cdb1eddd06a5064601442e2c5acc2f51eb464c7adcc295f475a705e5376461ad63bb2e1bdb98189041a831de7668319b0f2c5eeabc1b9779bfdf02008850f5ad34d72c7b91d060dc9c4437c9604261abbae1edac6d735513f37374a473359bca0de3dadbcf5a4aae6967607b0875d3e83489ed8d285cc9689d6fe9a674bbe8079319a7018d8da4ad1822bc8825e4221cf53b4259b14417fcb9296f1c1640d4cc64dd277bcac9121ab7c03163c99a15f0bf95923ed023f8441377d5bea8da4ba06a9308e309fef84f4017f270db9f72f0e33c7ee66fedbdc9390ac082067cb43c24df369882261b267050945cbaa05ca40a4facdb8a3975c8adc925f229aa47aa911ab0d5a27cb77808053e9703f6883d303de3e63b0c0e958665875d381246b6a453d8fc00bfffc7c900ab461128a011d60366603a83f0b5b3d91ff5284152fbc2e6304a631c74f57f6b7ce624082dec179d8592c2f7874bf10bcd988de6b3530f251180d83f1001bffdabeec7b3480ec687b71abc96a5dac107193e70e5879ceb1d55d66926011cdf297622259e3ad1ec12c877f87af48a4412bc12c2f61d87895508b7bd4462b0aef6d84d3b9ae1f876f60f2a489e32c4ac2151afe57f895c38fb13831410747f996542afc6cae84069255fd5f47a95af3fbec5990dc02828943d9d2a1f6f3c48c592c691d145e26f194eff842ac27ac5fae616841c8b4a17352e974045b6d553d4ace58b08c4701c5a78dc469c6c62d1d08d038cfe485af1dffe94d7c6e0450f202ab8c4e779dbf291c44c5df8017c5837e89010f3bdb1e2c4d9859950fe7291c164d90ddca2a027ec7e662b8d398abd4a10f218e009aacb3fb594ae072e0261c5c2937bf4f7e9477987ed6d318ba21b3539b3257a891c7130a30ea14807420f21a978b35ff9665dc53e6e3d8029e24cf1d947e1a02a4fc19c04ee0c45bfc87a842ed5c6edf76dd22c465147fb3c6442c2c0db806a51fcca6ce790203cbe9550853286a06e1c4d829ac35143bc3b6b6b2142c71513a1eee2b4effd7feaf120548c4f36c8be97dd88d8c0cd3142570c643f0626ca7f4b5deb9100bcae8af10423e396e374cb56df279a026604d6ca94e51a1284269638ed03d47511dc86779904fdc0ea3a3790c586480a7fc7cc611c43b5575dae83c4adbb4444f8bb077e9a8169af9aa759e0cb5312c8694e2b480857b933e53e2ff5ca424e5f3428830471563c6741de25a4a6046b93f4a5ac136b7697824733ca61630798bcba6391037dfa621f80e066f3e059142f890c3afafcad20fac42f961e17fa5f3990d2e95775e5ba2a175aee5a2965cd5967d2cc0f12f4b50512a472df2a3924a8b3f18006697d8123844cb0f294123cb12fc296fc25414cf5bbde37eeebb22e12d2c978b5431168f208bccac60aeb710795037f99dc5d01ccf0d969bcdf79a34b70396f36b8c7088bb223666e4a5f9d53d7d4858871bcda8d55e2c49d2ff9ed8e8b694ec553da9f3b84bcda99da910d87f50264836b54ed8df0881a601f0cf4b625e1a4ff8881beac96d8369dbbbf8a811ede969e4b49113b0b6d0581db4bcc1654b3d8a240d3336e61acc09fc745de36ff760ef379ab2cac02a4b27427217c3e74ad8b36347482002e08b88746577e7880fc5e66357cd81e75926a585670e26446956cfe2e26d7c705d2684721f39449a69944358818aa373a584caf1df1f582222aab44c3dc3fe07a91a981a3b71bcb221c717d5156611b35f0266433385e252a15ca0ac7cf8cd6099347806caf03110ce548d721814e443ecdf6d88f5a6812422af3d2a922b3a10520df7109eed393eb18b511bf86fb89c9b77acfee07e3400cb28a0d1fda8ad07f68f81568931d77a2b65892cb4fd877a3a4a8d9741ebc992fc0676d2a0ac1085ee21d394c106fa5b4b2ceb1506e26b8ed4ccbbc2899d69145bb2c98f709d5ed5f17b0571d277f5d0cc157ba50c05d0b7e0e4569fe45c5ce7c5dbad08084e0afd66d5a4a4ed7113ffacf8adab236fc9b9f08e305090892c6f3491b40abe7810e1fb2c349fcd8102ac594fef9ae6581616b43775f969e3d0c9baad3c0deb8cadd30df3a505e9a6fa308cd636f0afe4b44e76253035ffaa542b745ed491e4c536dd3b3e915da54f812d192339df47fc92eaef1058ce8bb5a35629a0b6d460d5e87a13490fc30f410b6e4483a3e00059746462af9522da0f1651b7c8f581eaa94745b4c9b306da76f7312499b0558500f48cbe365989248234055fde339dac2b3237eb50d4f06546a17de732d7b4132cc7412bccd142abfcf478cfc49e069117b51062efad5ef377ea39badc706b1c773e93bc4508ab5bdbce64c4656aa63507531f7f01033cd519d327a4454ca085dbf7169c28fbbf116b5414ad74742989d1e44d35ae1e715ef86e05e2fe764f6b87b31947eef15e379cd01e7e2db9993bd809573e761c71bb8015c65a0edb539a9b59f857d2808340122cd739054b6bbd3e6b7a402da53e06269b2f3671c78bb8caee7ef07ce281e620309a8926ceae15fbc13703e05321e7f60d0e8c3b1f7bdb63f5d45defaeccb7243550cbc3902fbb5b3b9b12e603518cd80dd0343cf01d8e62eb3cf885165697cdb56c2b47fb29021fc4f780711edc50c8d2f28257bd76bbf00bedbb2f932bc2d740c78a8306663b81f70c9c92c3890794d1a2ac9a225a09f61f90c98dbe24a59f3a0c63c9914db9e5899d64c11bd275f7acb584fac85d0070ffda14ccd44c20fd2190558c4ef18cbfa50272be2be55c19829732c19ccc7b744b8b1a367752992b945deff7f3ef4434542d644eed1d55aac760e915d88fe953a79b8c9940972c06438422b29277b5d4fc088c4ded9974e8658927f0194f42e2f1f678a27aa05924dde2d0e545b74457b2ed336080d0af51799e1ec4c348e3af8b9c9d9e5ad617c22125240c1b3b56937319acffa7cf0e0fe4cfa239e28aaec5995f997bdaab3ab55f0b31b799855c6a6a4ed9a4e26754912159f3fa30117f49f4469425369caf8ced1e20a09a6abe1c4cd4a65c202da94897a3e7b1fca82051e182c4e460dd63d0868bdce4cf16021d364f7349aeee1627bc36a3bae9c087474020a1011b82f6d0580f5e3f9b56cb8bfc748a237ef392ff55ec54385255734eb89d77a5fe5e4dd5869ee335af49e96c27b7145f9a774cd3b974ceee44a339ef34aef551cbc172be77c46abde69517c1f5792f994aebce3a2d97dae68de735ef59e0ad3fbb1f2accfb4ec3d2dea52acb172d6e7b4f49e9684f771613d527596177a4f97e79a294dabf5e1f24ae9f081b183b8789c8ba9bfd1cc274fb2389f5df4feb0bf3c0195509b880883f44369176bd116fa6726560a6a6314cb6489bdd4d6fcf3e1177d200c5aab772a3e55d84ad56af2d811c4538a5e05168185596b6800f88e514d8c57c8bba069bf266f1d8ca7d593768b94a931564585af0b28d3695c4c8b4d86bae528dd173b5cf64cdf444969a1d2574a156dd3c7ad53ecb0a1cd5b2fce027efbee4d8b4f2ac60385a0f7b102f5e91289266d1c3222041683ce7d40dbf44741ee3a6c499d41fb0264a970d4da57689a78cf8aa226f17068360b7c9c622b47f5e814599dba505d47442d387a8f5d6e16d5d2ef596044479c109d54a84448a1ea8fff27b4857facfc8b89fc28bdda8427911aacdf8846c1b3b3ab0016c67d3fe48bd921955e49a0bb59070933b6db59501f83b7d2c4d9b7ec7fdc65185bfd9471eabb80b267c419042c154995352eb7b058c05875cc4ba39b795dae580de64e40f0dcbc291fe312e4cc758390e1864c41dea4b9bf26542d4a22718d9a8100e1f9dffe385f04b4b80b9c4f665d45cc00fa181a3dd32b74671e653a56bafa70b01391e45652ee92a0def7ad0a0a791829ba3d34b219133dfc3076cafc98c45af60e7b88f109eb41c026e743abd772b53f38980fc04c6b7d62c4137fb94dfc59c5688d571008fd374e0f2bb49e62d55eb37e049fd32d528d0721bc359cbf9a173acc71adc92069d9e17e664d256a57d3f2e17d267aeefb50b51f769ff3b1e133a91d011b1b47c3775a5dd799eea3b3e72c7b064391cebfa216c3245de47d62f7b4b5374c1671b3ac33e37f429f5288cf12e297caddaf09072a6d9fc804a2d8650c06edc41e82c444af34de2cbce0db9677547fc7ac44b6b7cd50bc5a4f3a33ec2643a7b04179d6bfbd23c5094c20e365d0ce782dbaf775c2b9c416752d4cbff1b2c26b76976cbf623a97181721beadf85d9046a01c9e5c740991262f28a2eb95adb5a84c12c3cd880a6cc1b164439514b47d008d4ae8585896718b952ec7438a1ec6f7c0ae6bb7424c1a71f703cc40a241c6d89853725fa47ff8899aa7984c867b3692442b9a354a9b622b98023247957f349b4d239cf49e91ae6552abf5bdbddb6fdddba1565631e507ff8cc5e8ad5794a968d8bc1f2087a534c263cc2d85733b20dc4a5b11523c21e56a49b4437a50b9442672d5b1b621f136886cfd31672080f6993f105221684876bada70899577cd1a6cad80c1b1757e8047deb9fd178fe7a7a2e2e40ae49b7dc7b33aa5baa180ff64b9f61fb3fefd7d3221944dce12b560f537f0ca26e571cf646506ecd82f96df3b7f3322b3715d2946258c80960d1857dd09fb45e8a613fc4687c1e0187800e52b72188d882018f1ed04bcc624d76ae2c4a7e1b818bc594508de07fbffee06d6c8e8826b7e262b87ebeb46d6a801d4620c87551444e754e6d77eb12b75f8567c5ba899103862e3692d68326d01c5c254802817e74be008dd9fe9a0ec1d4f1934af9a1f7e58a64bc03badae2cb05b863162f0ede2f44f4bdea6f8fa3c0aac9bd75e9f80d7f619c8c77108171fbec7a7f3f15a1fe48ead64f495e8f6612197c2950fed8056d6adb04a2ed6e4f061c8bfcde7bdf751952976b5bb9ff2e0a226d6d3dd48a81455af70c268ddd39dc143855dd97ba8f125cd1882f46af64ca13d805cc663273c7ca9f16d064108d360ddcc8cb8e5556642e060ea2efc942e84816a489339de014682724865517f3e4f578aba13dc193e108a90f91871e108ba9f4ef7d978325ef39152068095da416f065ac25c06b07d3faed361fe3a21437ba497bc7093dc7450afe64b2e6165bf8780f6340335894c2264b609f3cdc3df0e03ab7745ed039e559569c4f0fad25ec4afba00b8378b411f1f9bcdb930e311167a1190cbec0dc3107c346c39c267885e2f997dccaff51cb62fc07fe88536d326e51f40802bad7b9142d6a2eaf2ebbd2c66ccc9414ca67b31e87855185010d075e435105c49cabf6964d888eb33055407f30b9628c5e29c35f57b0c71cb65b30d7b6384b1387db65dde7c2d79a649c102ee8afa14fee69f932f59b8312f433c12077d1058504ee03fa0b237783892caa9d9c8150ea0638e51d799e0f89b1667c75384e8838bd6fe69124fe01734a86ffcf1bb01d0a381b9ba38976e0b088dbd43b6911dda185efc36ffec1731eee0ae5482310ad968bc988f2ec598cd14b1370d6c12da9819602ead91968ca6454cd31574c00407442196ca78f4232fb5e870ea218d107ba7ce203f0d3573618cd40cd0713bd413346cc779e9c2124a2e54204eac842ab80fd5d441973cf05c9512ff186609f402242004bab26fb952206011a70d494f3927ae09ebb771248cddf1f0d15c1b1b58b3e46e110c7274171da0ae4ac26e0a432b32c92ed3beee8ccef890ea35b3d4ecfa27cad56b703444027de0dfcccc1ab18448e42612d9ddddbd038c0ba80b950b45aeced5b93c93e5be6ceeceddc198669f05001aba6aa0a0bec3c7d7bee6666a43021ff1b5f4991718fc9f0b8a4926037a2d1e06e409a1bf63fbb5959b75d2ce71cc85b5b81f33851f23992cf2f10ffe917fedf4ea5ead6cf00edee9f2e95b6a290aa5261e3e5237f6c13eb25f5bb9a96df75e5bb9c9b530c108a9cfd1703eee84311f654e0f17b15807eb480004e0c5b1c954e31000191a7236c0fed335381688e268e049be975dacbe562b08326cc770b36f5ace30bc6338392707a23b86ebfa73ed5a464b8c0c0e2d15be68285328ff419d93ffa02b65a5437c1f7e1655f46584ccd7e24f2f33e00ee4317dca098ac765bc7610878132b7a8736337f3e95ed5fa19a77dd2198b7055f66aa6d020966eac06ab9193dba0fcc6319c6a826164b47818192d3898ee0a900801c8efa40069c807f1998741f1b016cd6b4e105048c4d7bd62b85e358acbde521017329fcecaed5499d3c380d41f1bce7afdce033b86ebf765b6c75c464688d6e26184d03d02131e21cb7e50fdba63702ffdfef859697fddabec7df43715f42ffd4dbdbdcadec37a60331996cd39e7c57cdcbb311a8ca6cb1fc245947de93fac39910925af9cb0e00532e4a8a1081cb8b083112f7a4cf4c665844c132eb381b88c905779ed13559a102864d7cc1a18355dfe26e2b3891c89aa4d46e6c84f546d417eba7cdd4554693838ba0bd74c653f5c2e2351a5f5f418e9f2f76ba6b69b9d24aab4214376922e5f63cd14d662b1ba7c0d485469ade8523353db4c0b88ec1a8986a1511c0b8c9d23f695873b8765010206fd94154d27ba48cd27bac8a8e268a28b7c1d19ae0641f0d84fbcbb82101d17acd8c1f5ec2174f9463a51153b2d74ae06d0466705d8c2d144559723bb2d749f1115a29018443a425d18421de8405c741e007160007d80dbbec08160d3bcb055a1ed1dcd8aadbbb043a03317f48e9c6d218b20c38a645760580bd808f0cd0226c1b558e8b704b666d604f50ab4d713d069058a8229ab3053208388d046f6f26510de8745cf11b6d087b157407c060288bdd201844624fe49c6b7025b6afd28a5b6f24170d82310dec7638543d8427fafb217c3e3509e724f76a3b9a1cbe7bc0bfd7633e47f4897ef6d256c2ff1ded0e570284f592b7bf95a2be47d9d91ec7d1d17f2636c256c1779cf5538c7a12c927f9b992b9d4be4e9d217bacc1e0a879325f3be8ea7d3b81e105b098d8864911fc4d45cf254fa0fe67c37647c33a6a6a33f9408555acfe8bf49fa8fa24cffe15ea14ee79a86e3c3cdff349c1c1a117992586ba6b61b9d99d27cb49ea8da64445ff2be2fbdf63ed3f6f6676fe47db27fda6f373395fdd07c666a9b992c3251b505892ef245def7a692f799b4b7bd4df391e9f2b389674fe2d86f33252f7f0b125510ba845e7ef683e34ab699d0160463ae737d9deb6dcf280ecb61e71b381fdc0f7992bd7a1c0d6c996f08712b6209ff742722511e90afe1682e89825da6d47a524fa0ce853a1d7a36c6b6f644bf8a5dc93c7620385017128d4825538909ca49849b769fd30ee3c620a20801c8193ada9d23c622bad36f479f189ea80eddadbe252626a6d853cc2b7ddc2bfd59e77cf14fefd39faf9e0177b7ddf6e75ee9d03dfedc617f721dba5f8bfd69af302c089be3725d0e3bb49e07b45ed92bad3d4f67dd3d5b449e746ae97a7b65ed5b2eec8eb419a481fa09e14dd3365cdd804ae9d3a740ff994c3aac376ce271345ae49688c5b13831723b449e5a2d23375cd4505b3359ec4db769b03faa4cd500713d667685b5514ad915e1685c33c5fd98d6e37c94411e40c2703fda40650d23b823689dd7c62e695f55eb439ee46f4b6369269f93de4a4df4561b8b60ff1ab12f273afd96b32bacb5fd850822f62a7b2232ac52ab166f9a876544c88e71dba3886d67eccce5b1e71911daa959d837a7bd08aa379ffd722b23806d599685e2eecfd850649144b67ae3cf365e7d264bfda92f3c63af6e9219bb224142834e19afec54a2748b0d5587e4c6cb8c938c5f31a17022acb50e67c858e92829fc752ece64d2feb7d3e9e5a5dfced1c0961ed56471f3b18f1b8a2c921080d6dcf66a67b6f10cad79edd9c694d71c97abee6c9baaa3d3e563bc1aa93cd5a2b4e6b4673be79db3ac12d92bead15d712a4e975feddda175b2b8ec734a6b3efbe6758b7a739365dfb25759ad435ab586d65cf68cd720bbd6d46c31846c755bada01c4d3c82e63e721baa21a441b5e62e5480a72bc093fcdd69e1660ba3d44a1fb557aa1cbf7b855520f224bffea83fac66e58d233484364ad9c7894cbf51a3ff64bc701d3e066d6415f6f059a00dd1c3074054911e7e2e71ad97f48c571f72579a4a53e2a6ce09a1af39d6c286e4519d91d611877d967889963869ab253eb25697b8a8dfab4b3cd435b7d1fe729b11af3df0ae337586e7a5833b01108155196c5716069a51449624db1409928ca32180dc45def4e7276bcdef97f876efbdf7ea1d733d7a446f4ab52e71dd351e2164f9b03e1ff47d60ef18aed3cf2211b73d4b2de2b5e7a9459cf64cb588cf9eab1671d9b388daabd9177148bdbdb72ef1dcb5ace912cf7ac669cfb6e98bbe365de218c7690ee3ae710a69d4078d3608a44bfc769d2e711b0ae912af7d4724d2a31d43bbe94b9cf63cd22508a3f12695a1cb1f1979c9c90623a44d7948bac465d79c16d1a13ab4b4e90eddd1258ac399b60da598de7649c994b312cdfe36794720a1a14465290300916e1137bda13756c4fe75ae28572023949a4562b4f3e79426f152c66db62fe136333892fa96b1d295d2084de2230ae407fd41836c5a436b6c681217d1996943599415eab5ded024debdddab6c0d9ccd47807a4e427315c253e9f2bcb88e770cedd38324be617b75671279928fed890487d673df5d77bd9f806de8d8637a00b98bbde7cffcc9fae5f388b6a7cff42171ac5fdeb92417fa0c6880f2b46d256acf41e2b8735c8834b9bd0a7dcea149dc768d4318d05e5d358460016456ebbc3b6467a2dbab3a1f357be4497eb7e76bbe320efb0ded18da434fe2b4e70268129f3c3ba26d3375a68e2671d93d9b4dd326ce6491add92ae157e09e7dd63884c16c52be74378db98c160fb3cd3c4c8a49c67c5235fb1a8730188421a1f059c3477b35da36f3c7e4ddc88493b612b59746a290016a49b3df4b6e0f792a1de2a31a46d8d8ab2474888b88709149241289e4658829335993e5d2327bcc993933840c1b3bc67ad3878d3d69268d4ac750112fd288e4913c44b8c81ef992af9721e491e9e3d2a2ea42b5e54f4e425b1ee9fdf8188ff044ffc6e723208eeedec8ee3c02099b5d7b03870e7150cf5d8738d7914842d75d45125fe48e71dcf3c3ec276816035767d422aab783f6f955c0e9c9225267f32e4767952581935cc893fc24b6dc19800e71ad6702e810df7ada92258d3251afbd5b69d40c981c982d5dd2b5b9fd10cf3d4563004406b0254e0e1de259dfdc06b72401b68dac9135218ef51ca3431cf75c8010bf1d536198113924901c5bfe903f722ca1519cfd25f62a7f6e4287b8ed18b7e17e731bd06bd06f5ab656257b5439939f8afc990b2e97f2c35efa1b7b55f26870b9946de45f62c7644ffa58624b1ad228138196d0dbd62fa25de3329b27643ee632330fa3c5c308d1d5c4c4afc05df425fc0aae8b3ee3d8abecd1e0669e48cce9c523d4c747f45954459fabe861af9fc45e558f0627aaa22344222f76f1f3a3f5672e388d7dd60f3b867934388d69fd70c7682f2699114944d2a5b53f3f66f661cffe88bdca321e551fb363ac2765a66439a149da6f6eb3fd887752802e548063e8f24569e8f24dba0b5dbeedae0059e41780096800a9cdc7216dd71c7612873dc4678ff1272f4089c75b823e273cd56762c7d06e3f37014b1cf669bd2f057d3e6ca95f80bdea3e1b4087b8ec9bdb688f719bed49a34c64354f7b4c3ca12dc72af6b3660cfbcd630ff1d891d84df0e8d837b163302ff634b1e32b6b62c7d0de7d764204c594118eb4fbb577b7068eaee1afa06abb812ef221bc0277730457d3e57f345ab21fa2140602a6382cab18a7d7e4cef92f7b3587d84df088a95e342277e4993d4f8d71d931863359e47752802cf6b180bdd0e57764e892a3c9eab41e8dbdc368937fe8f233d7808ce3ce7179944ba0bda233e3b66f1cc2743d49aa084a91555ae78a76af1e3964cb967480ae1c8ab2143ae3f3a646fef8e1d9689b9cd936922559257e05eef533e5b4dfca6d60bcc639d7649197cb6831f330303c1859be2e0e5d3e470588f2032705a88a2f9f63024cdd0fa9e00afd0e1c8e1be229bae0a10fa12c422be8f277c996fdc2a4f0f8335946a36d137d5ed8093f527a79f13249a0c461cff8ed313ac4473996c8317b65a355cc62512f9128f56a4c0c1560af663655d33361f2b9096800a9953c0e994d26dec7a3c41427fe6abfe26f223b01a3d472ad2df50927760ced0680e2ebfe03ec2732cca3f224060e1f8131b6d67ab127be0cd08703204087f8ce3a3d3114354291001de2bad37c80bd9a0ad0219e3bf5990ba0dce6c69d046c9ba8c387a8c38006e810c73d47a143fc32800114c565df80bdda9fa5d0216eb58dd4d380bdca38efeb7c1ab095881dc9b6e9633647a0c4bb1e2de257e08e7fc4afe03ade587b16b3dd2b47d1d96c4fb98da606c806b8872fba7c1156872ebdee0d9045be03a48010a89d03b22dc5031cb05774526eb37de536da777ae28c4911011de2b1679f4e1f402120019ba3014d68ca29e5b36703e8cb376bb2ec99c9e245e7707a1f38567f033cc9ef422c284f380f5d7ea543979f69eee09243af01b4d1b901b6d04455d7135de4779169fa1cbafcfa91d7a7bc7b495495f1f543d8b295886f79f4c861b75c732b28d6f31dc91354b36f001db9ecf68531c7994c6f5fa753ffecab73ad99ea5e9345b2f07413c771c83225114fd4ef7e660a045966499f6fbdcfc427e0c4d6eb773e3335674a2260c7701d7f4e008c52ab8f43e2031c409fec27b86e5fd3e17a742160af3457165a02223cc0ac94be6c808e9cc69b5b53136b5e5ebce84fe8009a99993893f10d6d485eb0c5b35e8b0d53e8f2a71751688e6bd160174be3536c3c5190e0fe8060b2c8ff71bdbc78512930b7b96f3f738c66a6b8d6664595e68a2ef269ec2f3159e45fe8ea38f8d0d39aa9a8ead490a4cbcf2ddc6283d55c2f2f5e523c20de6ab52d53cc69bf7cd36c56e6b5e3ec71963d65cd14eb4527ce383f7e4b79a706d8b286e8d213f2e9f2b71f1c5f48268ff833f61e0073e29c71ce8f31c618638c31c6191fcad4ed976b5873693a3a3fb18ee69a7bd05c5ace8afaf4fc1fd7ea5e5d8f1e3edc2b96a7a8e548940724a6aabdc21e0d6ee269c43402fed49feadda85103422002f7f297c972ca039dd901598a2c45840f989ac6669f9a8360cbfc28f60af4814eb13a47d069842cf3a3d831b8db8f62e7887df28862afa803348acb9fa5d82b2920a03797523c40c7fd80bdb219635a2b8d80de2d9a6fb3240b970544651bc0134ba2724f172f1f235dbeedd15cdda70b1b4054d7936924aa53037cc05e51ef48973ff10081198504eaa594cf08ac44607f9680963b7af30e5c7c8c45b73fbf72085d708cec53f63881d712381479923f816d9ae2011398974e41010aec95cdc56ca514a8801d5e16d8abc9a3f39128cc875efad5fbe6678c773ef2f4c23e47d7234fd2e6b7bff75f2e735f8b87b99e909a81bd8a3146fa93eb3075ec31b057d853debd329a3fe798bdda3b07cd164a2a5e73fb3956bb091e9ea6f254b194811d87cc16d094772f27b03cc5ae47a23c60ea5e9d8fac03d8ab49fbfd7e31f64416d89c94e17a2ef083810c50126800f74816f91bd8abe9752f79923febf0ea1c9893033b86f6f84960af62ac00118410271600044046cb102ea6528c1873cee9c1114d8731787058501e1816b4dea9822c647baffdcbe75ed1b71cd778adbd178709aca9a5d40d57d439e39c5589f85524115f7ea45ed0f8e33e53caf4eda89d522570b19b2686afa9c6b422f6af86adb4eea8bd7a57d4fe9a3ff25ec997b95753d608a99631a1c57a4e8e4728a90c1b2d9c75aface5eed513c32486450ce22a9278b91bde2b2e06f70f8b2e3d0a5bb66ca5c3374d1937ac18b673c82ccb59cfec14359c59eb1df78654fb4ed0216cd17a6f4d13ad38908cf1a59452f2efd4a5a843d2e1773f1dfe0e1745b668ddccc41e51a6c707de80526629a5f442a108b7f66121dadba44528dbb66ddbce113bc769ce040275114a790281768eae0b89a2482482754422e5928c708e48a5bdd2255f15f2497b45daab5269457355ccad843331d127277b25bd9597193525252585a6a4cc94949494149992125352525220c9b47232a168aec45405e44e506ac8785939a17ce6f872ce2de79572cea7e4917328822d7855b26368a7b0057ede9274f8267ba5034a5687ffa3f2c5175ff42e7a6ef8f0d4305264c68eeb2567880c9c9bd31640566a687c4419943883c494e488e8e7057b348fc9ce114f4e505032842929dc0ac6ce21b58c70a2ec950ef8d3e5a3ec95a4f244e9732a4f947af2a547e549a7a470306088341781c49a0844863c41f9d2618c2fa594524a29e58a8c192a114a183030877faf74bc4ec18e1cc2c9972dcc7d3c3a8d2e2acfe5f31ddadb2b1da695f4a2f76de0337588434aa9c3146365437140645be90c42c620601098f6f1e830521ee5c4a4c454228d44a1ff8f70454b0191524a295b3dbe9472cea77dd29f72ca58860c573e519476276f1b6f46b1ff6ab874785e3bcffd713a9461192f336e9046a612d16f1ee25bc75cc87ccdafa0bd669aedd556ecc0bde4b5f89987c19f897492f132a3c60e4f86951e005065d210dad09ce8f43243db9545438de2cfe29036f81fee95ca3591445da8e4338a8be1f11f692904a8d24186f84f1221fb4f06e10aae67ffc99b1f4095be69f94f02e1f49ffc21c47fb2071dbebc0154e92da28b7c19ffc91c04f19ff4d1fa22924fb26040498362f92fee00f15fdc0254699ed885fe5fdca2ff175b7de5bf58a4c32f12410850a58d7cb1051d7e640154e917ff2ff6f8201b3a7c0a4095ee29f92fca90fe833effc11e537e95875155fa0f00325ee00e7c49a9834495f6892e437841ba7c7d1355fac8117da3d23fd145fe2781481e6c1155ba0b8d64b2c8d802638e6bb56a786a5e353e3c51b5891889aa6d84cb89443a740de9b01ae9fb355968f00ffd8aaa9d44f7449506444a2e09ab8be8f57423ac2319c3f64a07cce9f1b1ad070f227de6a08004dfa9c39cbecdc8d3ec1adf7a64de46b3d17cd025facf888f888fa5cfe730b5ddfc8529192125a49f5b9f1085fdfc124c693f5f05dad03fffa18d52ce46b3cd4820dbccd6a384dbe0277193f761d38f3c91f799464fb71bace512fdc8fb54fa97fd187d89f799dee47d1cc9fb701d792abdbec8fb546449f3ee055be46fac755f5eda6d3d72b6998d66c69893e574cff6d8d7abcbda356e7f268b4562637dac8f4cb62f8b556db7303e4f9df9ed1abf34dbe6cedc9920fbd6dc9a57b17863dcb7bbc5bdb93799635de359689b01f10b188c4980f91d1283fbf4e8beaddbca3ceb1a971132372e23a4668edbabfadcfc1cb509b730596a135e61f2d4269cc264aa4df884c9559b700993ad36e1110694650ffa40dd3157cb6fc2214cde8af090a10c46248d79eb76895c9c8b9379e6402010a6750775dd5ecdef7647e19dcb64c4415cb576763a46ce80862e73ad6bbccb9146ce808650e65bcf5e0c5d126d18aa24cb3ad35de65ee2369a0bcb99e58b65bda4618f1ac5702f711bd06f8dcb08b11cd7344b49a29b735dae2ebfd62cdf0d03615badd4ac88dbbb57a6cf18efd57e8cb58857ad3d89dbcc7030da8f320d6fa58b8938ed19d3223e7b89dba03c887390a5a2bc89e9a7d0b80c041943d9315c26e2f2e6ac453cf612d63b86eba6cf5b6bcdfe8db1629293d161e566eca4392dfa0f22d93afc0d55f64fbacefe7bc1f67f35a00beaf0bca08f461255d6c35ad1e524b308641245228d8ba592e6620ebc76cf8cdb702b9d7e10e8f6e1893ee61c64a1904ed1ed479a81a0dbe7facd7ec86e6584936af6630722080d250a65e5ce2108213494a894ce05f311214eb0088c0e75e470d22a1df799c5f671d0657a4ec3fad6e9c8a797defba6bdba9784897438182707bb5c120f891bb75af36e2137beb9b15ee79a41704d4dad7d720c04fff861b10f4c8369acdd2b1bfc76e790585b3e3b880bb1cfd198f08be4de9ffbd3e5dbedc6e21e1bcfe01990ec93df23fbfa5c1f1097d15e48a526d4e21d53bd1b0ff7cad443f6655fd0467e19e3faa0f4fe3051b9409e63b19c6278b7468812130fe206b1f726241add2d4a1d290362655e2ce39a72a2f7a65d1f51755bb7757d74f9f74754dd2143ee8f8b73712e90a8ba44a2cb4c659a4be402319daecb756ba2ea1ab941a2ea2611e2d6dcd77d05718360160bb3ee4d546120778ba8c244ecbda92172b7e8f25db806bb32cd8564a13b7a947e8c31529ee15602fbec358f4469cd13a2244a4554735153e9e9669fe2a7dbd3fcb47baa7f7ed65cf3e81dfd9fdec9a1b99027692ab944de87499a8bf4216dd3689be47d2a23ef33bda8e4ddddda4f6a6d2f9485ad9d1fe0a9d3433c411b9d1c604b7724ba7477802d1d1ea04b9707d8d2f121ba7449604b4805d0a5a3433c61d5da5af713dfab87bf675c5b11b1d75ce81dcd63e7bc17f3684fdef4f5da38fda148a80ff591a92c96dd3ae3b76fbcd268dba6cecc04a9353540accc8b691baff5e6260b6e33207e0173bfd2ba6370a7bbb65a59df78d6757b65bfa32727272727275aeb4dea4e34e908122f6aca8e34b32022150727e3b90b854298ee76e7699aebbe43a2bda22fda3d8577afa97f36eb23cab8b6f1247ef8c3e8e5c52b7b2122d77d9261da744a288675979b678d6f9a5b31ce8f43c61a3b92cdb39eb1cdd8c62dd2d7de78f79a2c9206c7dd565cb1a965a06b5fb6db88f7aa3ec67af3dab36da33262bb5d8de68ab10dcadc06f42736030136b50c94f5b6d1be729babe7e6b71351c4eb45b578155129965195ee4e632c6757db4e32cd66b1301a524722fd09a97b4dea36124993f4e61749b659e6361cb65978e3bff8359c71de70c63952161bf4cb8b57ec0298e1f383e4f5a22c78cda0f17a5199170dd40ba379b568162d14078a1b745d90c7b5b0ae753e5bdcdc48dc27b741e2b635b6c602f9f183be5ad8fa90279a6a7bd899196b652c8bbeb542aa6b7eb8faa4d457ad9acbbe92542448360e616235224f9587561dadee54574ed93849b1956edabd577361342e4c7361d07ddbb238f5466dbb9b16a7dd34ec87b53c3656c7563b6bbdf7ee95cdb52d5bb939915c6cb9cdfd8dd3ea7d7aa3b66d5960d8d5b672b3def9180de603c63e91d83aeb90d159c30816bf26535d0117edcbcfaa1b58cd2ed636ccdbb4737c9bd88e1e8d51e9f3338f69e73ff17d7a72afa64ab739d9b293c74ebcaffefdec878047af272773cefa31ffdc4accc7b0e85650396b7e50ceb6d2af79662fdb50c5b8da6632fd9f4e19550117551909bd1303519a46057892af44cc1115ff8353e8f08352e8f093802aec63d760a3c3875f0d55d51df671a74ca302c46cd02546034f3599c6ae81d73ee9e436dc6b6eb3d10e0371991b5fe26c90886cb5cd36ad2727de666118edf54e16499650032dd2a10991d7c16e5cc7bb35f4dcef74566cab5cf649699c7163c1aec6658464173f699300c42164d9dddbaff675b7da2b4cefac3768e822f613b47fa7fe712ccbb130fda0a0b1637624f63ed3149dfec4d00617694007221d6ee125d35bd082ceb5a08d2e0ead7ed2230de2e0a3e7187ae54fb88c06841041fc6d4515de02c45b907f5da7ffb0cb4854d99791215185cdcc0ce9f22f4e54613d2e91a8c23cd185e77593441526237393b0380e03892acc4574e10248978f6b666ab36a884415de892ed8957730912e3f9339e7cca2595862f0aec763f14e5ef6273e13555c0bfbccf4e08ec0d3e5e7e7b19ba850eac31d418e3e2a44213d887484ba3c843ad081bae83c00e2f000fa00b7dd8103c1a6d961ab42db3f9a155bd7618740673ae81d399b431641861dc9aec0b01cb011e01b074c826be1704bd03dfbea7cf86726e85e7d033d41a56e9828a0b30d3205539a7cd7036dc42eb1e81effac853fcb5e9d3ebfbcbcec55f4e87cca65c829b518fffcb3a71275f23e1eddfbec6370085bb82763af3c8fca53e695c8d38ba606d3a2cb6f098d5c5c3c175dfe10bcebe9583b51d5a901ba88bcaf4bd205deb17d7b40f0ee25bb203894a78e7a7ae765a5f3ecb0bd142dc4c2468ac03cf8255114bf34dd14a319dd2c8a7d284aa7a24e3f42152643fa6f961ea244ffe14ea947f14b9e78e87f98071b9127b95973a6ec4b26aab099eefbb759a6fe6d16e6611fec91309999d23b936526aab01ed1457ee77d6fe25c7a87c3d88c88e32ff1fc7a67f4f2b11e1c377aacc7eb953165716e88e4705ab085b2425cab658d489407a00ee6c1af205656aea5f2448d0cb129cf0a102b13737929016225c28d0eb15733a6007146265e11802aec13c30110b51f3e03a0cabebc4700446995dee14c4054f71cccc2e83b54651a48850eff08880a3d7c1b50b559d145bec97f373a7c1444999e46872f00e8d2b11a0c1155184d74c92213caaf601f1afdeb5e39e8f263789fb4af215af0219a2edf0bb9a0cbe7df0713afc4141aa19c74e8053d44832effdee83b2689bdbb27a0abe310b6c4bd42c1bd3974f528a2a1511c7e1a7b951fd2d4d6a17bfd1a7b5531dd4cccd2a6943e49c3bdb29b6b71432487235193c3a997c3e15af33faec50da9946b0d91a8ea7940f7fa76cba09ecd7d005c4a3dca05ddc9703dc5d03e63db9fd184133457db36edb6be68396180ed44bb271ed7da6811aaa343735cd4d5235974286d4d168ad36f0cf0c4a4f1156794387f68cdee484b9e381c5797cf0de9a285f387d61350709a4b9b824eab4553319a795b19531baba47d4e8c460d90453e1cb01d5a5e98589eac1553feba108a3c2bbdda9633b7dd9eec11f4082490d82bfa484c8c3d0e892bc6b0b6d94891983448129bd6d4e41ea1a5d5d62428101c9bfee81b8a2c92c856e7fb54e374665216ed7b356164b7311110faf17abd5eafd7ab47a6b8d67d69afedf56abd5aaf1646b3b5301aad85d1dc1646d3f2430b011587d6dcf699af96614a279d76f6cc374b6e993d33596866cfeb357fa6cf4c32914c4c2d283480cc6db8a7dc667b3c33869fd269449e260f8f766dad93c5e5cf04d07a1691271d9d9c1fb557b9563ab9d8993b7ce64c576b7e8ab6220e13782ab1f5d61bbf01ca41b398bd9b5a1e7b157b6a0214a021b49129367db6cd8d755a2fe9944f22130727735317823de69bb565328c66748a48a58cbb1addb65a491d739bedf1dcb4fad43aea56d46fa8e38d667c0e99add6d5b60dcbbcd358e6a08ef58a721dfbace80bebbda299eb6e9fb3d65a0cc3300ccb3ef268c13cb8b1c6ca1e95fb9579ee9a46f9dc62dedc6c3a730c9439cef6238dbc59fb99cd1eddecbd76a31dc532bfa1ccad2874e3a59a466fcca3992967c57c2be25781c262750b31ee336e03827c02b704fa00ecdd2621cbfc9b5521597d47ecf84d3b86ebf9b3e52616ab8b58acceb1583d4f6db966b13a66b17aaeda72ca62f5aca25501bfe8f8e78745afa69208e50c224fa43d6b664d9e3e682690f9a3a441bff915b8cfdff864cd19890409870478928f4f51802c5780123587481495299095a93b2d288b8ce592ccb70216508232b92f2ca00ab3bce8f0470055b806c701dea1c38751857da28b8c2a802680a8fa100f1dfe07a00dd3736f8069d8ff8150dd7f21215eb0ff88c8fe1300bc826af41ff442e83f0886d4fdafa49202fd974487df0098d25ca00dd2c37f02da28bda2cabea28bfcbf2fcc8a2abd5313551c2bbac401dac835c03e519569a28bc45458b8c6fb8fe3ffe15887cdb22fcef33e8e7b6f4b4c767256f1f48ef54a4c4aa449682432757a18c08e51897a92547ae636298fa57c96f2945361bf7227a0140e9402e24a997f3c7aa69fcd10f0e8f461cb471f67cea3531beeb3bb69baa39464ed7ff4b19f586e25e8e7bc80af9c761f73e88c97aacd0c961adf3bb701bac09659e356c1ce02a25ab067a20a0f2fc8030c200ac6d347ca38a9ef1940151f6890a40671e32096ec18954ee97fddeb89efd4d2ef93c3913ce2e3d385fc913f1917bd78eab6913b4de88c87ecc59e89fd44c69855d9b77b65dfc6dd4c60ebdd9d837e15f30b4f16913a52e73a01ea5c9fdc66c604c3fde6407f371005716e0990bb028c420ceddccbe7b090d2bfeea5036dc8e75c33a5855490d23fee4e6c7f72fbb55a4fcec79e5a25e6631e7d62dd2be35bd60728b49e0fb0bbee9b7e9d2d7b351390fbe43247ba5c599f5c4a1c9c8c637df2eea5fd1033fa075f3782d400a971758d10f7bc1a1ee7af32e33d2859224d8d1f3e6866609d92520281f837a38372ce39e713e845fc25ba8040a0ef2010080492d13ff8ca337ac49928f382e99212fc9cbff4cce5cceb3cbf33333545744c4386e070db1db55aad21dc76477246cec0d71433a50203be644497fc3f532a50b27cffcf7146cebc904046a6657032fe0463e5576474f1a3e394f5a953f93fbd8a0a0cd20a0c920725cb9f7c7aa658d13ae73bba236ea5e76d74ef881bbddc77bba39189e346dc764722fed125671453ce19a57fbf62844701f2147feb94110c15959a56ceabe8dcdc449e9c1c18373535f1a7a503a3d50a52534467c8109c562bfef4c8d31a1279be8fafd8137da211d2a344178e24594c253b6a9f6fda29b2048aa64b52522e0a67e2fee34a44f34b6ec853fc949292ad861404c61260b45a33156b6a5a261d183a3737a49b9a1a9d960ea9d50a52534467c8109c56ab35e4474747fb11f1cc9496f227fca7353f25c64fe12ff2145f8b7acac3bdca7244393939393928261414fd948b2e9cf6a04471ffe1126dfad121eaf34b649c56e429bee43005145bf244f1c3501c224f34cb81f2dc9e79ee01b2d0ff6e9f72069591fe0bf5f9b39fdb7b667eb25bfb1cffb8ce3d0ec9f3d8efcf19a924ea9ce83e14717054fa2cf11087b065245526a19f6fc2332efb8529cdebf3339cd8c23f3d1c52ceccd4d78cf256790878f4fc728ffee34f74a15ff230d1be3ca1f9da9c3f939ba2ff641f794e881ecbd30c71d9e356627ef145cf8fb98dfe3844a6744e2b571d5edf363a1a912cf461e491a78c97bcee42b2d0c96317fc8b7d3fc63faf631f231289da3fe79cd3fbb0f87386ff78f4edf51dfff18f44654f3f764137efc3f87a1fc78dbccf6452c1e892bdef3be8bfefd9c398829105f4d9e3bdcaa6882ef48d7072468746a2be98e343a23efd43a2e8cb1e12752251b5c34e3feacc14952c1c9427ee455c4717ee714c1c12873495f002c8c0873cc10ee25648cbbf98a4d347e19f29859b781669108f3de3b16f3c8e62ef78ec5ceca5aa4377130e291a6928535a4a775aa6489fad8e5be47d3bba28f3741a06cab358ac157cba633c33157f60949e3e4a54c59ce842df6ed0e4e43f15eee7c34455087874eea7ec1f9402ca7f46acf4915643041010957f3e8b075551e7636ba38474727e52ce39e77cbf751f345fced49c98c8995a331abd361a3dfd1f8d3e1bfd1ee50f39911fe46179023d0e39e2b28738942710cce971833efee4646fb7f761af94d3e96c7bb8419e1358c765cfb4632eb9ea2fbee89c07a3cb673b56f2d926e23a749f5fc2352741bf6f023d0d40dfdb7f3152f1e7a4efadef50df3e802df43fadefd751156ba20bfdbdb7f7e990d141cf7d206e320307fa8feb22cf244f3f332567260b7dee37efc3dd8fbc8fa31f7db0d54455d401fda7f2957ae83faae6175ff4f91b4cfd64a15b155bd185fefcd27662f4a2ff5654451e90f771252fe47db2e7cd273ced27f10b59f64f31531b64d94f3ff26cece17ed01e3d94a7d0f33831f2441e96a790a7e589ca6ebd2ef77e393353534c16faf4a34e547d74a18f7de77d1ce7d12deae43ea728f5f9f43faa3074992f449f8fa9f449b33ebd4f478dbe3d27a667a33d1c33e3f631fe71fd83af4ff6ef77cc3e3f7212455f24531086d297ad0e6360612f1611473ab8e0a7c728658c18b6c4c701f753cc141493e5ad11b81d3c6cd1e1c72e70b643971b6a5eb8971ea517e30f1c72965142f9524a136c919cfd4f3e9478b2448f7a734229a594de371f461ea1c0c19f5c4a0b840c572419b81498c24c251045cbc0842056f8b48629982b951aa72a9e754e11373d19e79b1e459e2214b8cfd463b40247bd97a7f826798aa61ea5074d33156162a7f2fe40c2c7216519b849e58952ef3f8aa2b2d3977dfe37a7bcf3b13cd5fb50fe9cf3428f065721f576c83ea90e3287da9c73ca30641843af17e1a99e603b31af903194c5b26207377bfd085dea571933ab985f24e991d5ab9856d8df817b842df5e7e390545f21bbfd3bfbf5aa98f579ecf26514e640a4471acc618b3e448f3438e2078be2e4e71ae14942d8223d9bfb4270f57148cec71a38ae0919ae408982277992214f4ee04ef224dfa406f7419d1ef4c81a4b4814d4e981912ebf09024894c437242aebf24f47e40976f932640ac2c825564b507992fffd12f0fb5f912829922709a3c74d26701f576419322a4288394e4648940f91c8f4e1ca17697a84228b24722403d701988a026e00da903d3e07208a0ec1052b98428f69e831fe03606a03f1238f8cd3184e12257b7c080131701ff4e1397d96591b06eefb77829ecd8e62a6b6673265d839fd92090b3dc96337c961e076c84ec57fb443efdb21bb3471c1c59e5fffa7bdcd7e1dd00b2df0837cfd907b6073d66b7c0530dbc3027aa1057e60c1080101ec27b84730701b90a8f83a24ea24a676f8b543ee0b1cecb57fdfbf531446ac7cf8965321b712dc7ad67ef6f721d76fb97ea925b7d9aff7a3c8d446653a244bccbc48833c009127d83b8a4c4198f870675e803325bb0eb11085d70620843e1ee67d35eea320c2e08f7b95c7c03d8e89434a3e1ff72b6affa6e83baa0ec9121f87847b7a1b883bdc17bbc0651d66a10bdced50a70607fd345310e6457a5f8d1ea1ab471a6af31d325cb998da18afa518bfe5f8647ffe7d7aff046dc02f5e2f07ecf5e9a9c29f2ff88c2822892eff9b31c41001a8d12284102b4404812100bafc4f2586a904e5c373f4619cb5b6c1064016f9184f00bc0128a21bd1e53720078a99fa68f40f638f0af8c29392214f6ece8fd864718ff309aed3e7708d54409790fcf53ffcb0d6cf1445a78c92d697954a2935ad544a59e9a474cac9868c210a4b96f8d2c562b17ac048a83b0ec923c61b593e8a832cd003713242607c2c624c8932e0fe574e5fff93d1e79b662aea4cef934f7fca87106585d4f72154d9ffee9511dad821bb7c4abf7a589e26a5afe9d7da3f1c613a85ae4aefcbe4438cf1618410c2086184114208218431c6896118c6e529fafdc8bfef11c36aadd8631886eda81d93d1044e462b70d8c72cd6885d5ba3db0aafa44ec8d7fba04f8cde877119c3b01af1331e1f7b8af167c2300c7b8d45ad53f9b1c730953de6512c526b2986c5ffb88e45efbb8f795f7d4cabad3e3d462c248f3bab14e20f1b5f3e3f487430e4a194fe8d94d2186b2a909ce7b6850ee984904b2eaadc9127f85016812d9a9431c6e8c93963163aac120bf2a3f273e449ca59297775f85112a13f5c7cf9509e28973fb0057e9e59e0e2e374f8b2e5c5f9b2c583c6ad8b14cc482453881146225d229931e6dcc730151fe31bebbd354c2fa7e8dd18071c7de658ab29d61a6bc55cc5a7971ade57a9bdd6d65a6ba5b30cf9d4e187ff528cf1e353e46165f42243178e7e583ef4a0851fa127219438248f1aa34e8639f6da7b6b8df5a5caad8fbdcfeb90ca0b238f4fe0e4d78fd1da68ed57cffee5f625d50173ba8d740730a7c31865c419f146a4282e5a7b2ffe8c39d4f7bef63e2cea30a274185f7e87f0b10769a4f1658439599c4bc81e638f330ee3538c39ee33750c1f7baf121fea78e956ca1e798a1c338436648c34461a2395117ea60e3dfaf6314ce1b7de17fff215705c8f2fb74e05e6d12ffee59d8af87647ed9126c3956f443b39f549c6cb8c0824d6f418040cf0249f4394dcdc63343576248a63c91318208acb029e64adf46636636ddb998d01f7ed18705f88e6ce4fa4839f3b995ebe867d4d96f8e25a9245fee9f42fed0b492482137162dc51b42351d8877c74f9219a8e33fdbfde99298eb56377e88eded13b44ba15f4cb349b254f39e71dbd036d40017c3450fabf23f07fa82150a04a739d84c8b856a61b7bca5553e8e26c468d1b5807555a347af8f97221f6319cfdce1ecb7e6b5b2dddbb6553c31d76c2815250e82665bc2b5d2e23e40ad9b12ca467b6756f9be211c934b7b9ad5c211eee55104090ba3d12953ea3b892a76ea8042b9aaaa21c558a6644000000d315000020140c8884021291268bba07140012659a6462664816a8398e821432062142000000c01818009891216900cd3c378697a00d3742f285155441f925f3e48d8d9e4aec6bbd06d6bfdaf46725dd374871fffa3f3d42c06bbe1bc223690abd9022ebfd85f47a2260b377dfdbc20d75de6be7f458ea5d34814a9b9a44bd6dee603b62f7c64714844db423a7c4bda1e40ed005b528f64b47c2b9907204143fd7299024dc1ed8caa8596d5eedc1c497520ccdfc9b991437b16137e97abefdef881f5fb7b75592c41866eb1d51b715e722bbf8eb4f25515d394ab787d3e76fd1b81546f3bd2642433b007aca1edd4c06a19011a0322a7f77fd65df1a728382906c3607764df79b36e5e393cc733a74be04309f73710259e4e4b713f469cefdb54ece0fe32e00a99ccfb8819c09104e8f2692af795a934fdbba8293b1ba98e944c4bce2d78c05d8acf7db44051b70cccc99c4e5d02e9d21cbdecf4467368658a2cf5954e9b07e01f3dd646aea2b12eccc11e8bfaf5131075541afed2150dca1378e59945438bf66367573a3278ddd4a6f01ea8796fe6989df7c3b09a99bf5911bb64364470e3ee9f8ed6611bc131d5191aa7f9350de227a94548fd1e2db354f1531429a86777a5bdbb8dc9306f91a3d953a187ae91bfa75d34bef454c250a81d99e885ebc022e91d7ae598e53bfe0bbd10ae10e00f05667f8a41a77c9edc3676abb47c633218a6d37b83064b877f58a7dd3b8e5cf73fc33f35ef72512890c39b7fa4f1bb595ac7ebe9d388a5df3d1ae546eeaf8e39e2372d8b9ddfc57aa85d965629f918c07cea865f86494837727f7368d7be13aec9a84e81cc3be370f45752b30104b6e100363de9a0895a0669d326ca565cc061517a3ac85ddd11e47daf4fb1c6cbc2b005c0d965b129c26ec3400518398a5812de784f7c2ed379198cd37a9dbe378ecabb7d92aa06b5a693f1562750b886e04fd13f776e415f70baff70067b1af691763ad25ab1dc14d1ed3aec1bf6b2d1cddef66e7905e004945fdfba11b8637f4d43a9e97cd66a4d6bdd6b8687761f533ce901fe5543aa0d6d64349ddd3b1612806d669b747604aa6370a01d56f5bdb93698cc244278cc48a816da5166bd3a87da07f7001d7b50960df4b048336dfb15b6fca4fae36230ac86e909d4db0103ca61366a2bb51729deb0bf6d6e44f6aacaaf5a1cf51cf0e52e9ac52134d64cfa38e9fd420acd0d1e6f302102a1a525baface1927b9e5d687d147b03852080b9206bbcc6844be2ae0ab4028f48ea0fe282a7a712bb928cde02d6ea53408f6ad65f3fad2dd1d66e9f7d7f77ad036a16633d78f19a77f1c84fb1130f6c59292dcb347fc0ef0c8dca08c5ddb1c56ba0fa85ae4c332633e31c84377496058006756f4d1ea8f19e8683361c47190d4ab12832857e4ef6e3123f3db3fc8bd78e8601e7a0b310ac28a011caa78400098f169b7d28b289b795680116196021839a0a5510c147d00af5bfd8c76e88a874795cfe610ca01d07099b69c15915da4bb5288544e400033ea9b27dd0c031eb8a086506f3dbda72b80a22bd1ddac0396e4ce79d0cdc6446a49763d710d9355838ed87b9d0a8091770be9e6899e6dec9cecfdba4c8bd35dd5a32be2f880f2fa9720fb847cbe57c294d331ca3d545b17633b4758ff3500ce2c4e8e31e7c4fb7e6b97328792b670014e5917d4a9aecf55b8738354cf8bd7d4a0723425f4ce5724fedca3826da8f97412adc2ba149354f88bd0ab9070dbf8cdcdb71ab7b871a7ee35a75bc0bc19873bb11ea2dea313141bbd4c4c4d351ce570bd974718bbbd6a759c8c337ec33faf4db2bb8066457c758ca8ac147ac90d8461716b408b8540be5fd085363e7dab943f138c8cc8fcc5b391cfe4369d3c1ba920722ec203a54db0e0d4c806c1d8fee7f60ffd83dbf538a69bb67932735bd1aab09088f4adaa286a4d8a3a7f70ff340d05e5d9472584c049b54f38ab7f8104f2791c33ee7dc865f949ff1a45692a48a42b4e40cabe7239d9e50d2b7c8a4222bd5756286794d760b819be43244c32bd89e0aabd1120469cccea4cd8da5b39384a9933ca6d3ef6599681350c2f0ae189a004d93c4c876721be9fa02b9cd496d27504b0a5a6002d6dd2a57ca42c956596ca9ad1439902a0370d358918508014c475384e4ad8b40698c3e810811a26709e7b005350ddcadbba10f7a0eebcf1ea0210679dabe2b932641b77951ebe54cc297ec9ddaf85d02060f95dc020b52c27134b00f651c21962c5019f9b34817a86afc3c7e60aebe6e7de64f9dc4370cab0191c3f39b2580f242bb5e3388293059ada860699258ae7d93751b6b58e20894b91540ef9d2eee71c992f9874d38c7804f0375628fca74a68c2cc3a13787328d2b22c32e6c07811059948ef89100b7b7c638aa550f855f4c4689e18c2fc29b20e070ca697f8f2c47219936a18d6f80e636c92a6ceeccd63978024168371b13803338586b2b263d2b5cc58b5604f7e42defb1028bea44d5880c940910a4ac9569d96481a3c9519207c88306e5cfcba38365064d14e054dcb9e99e1d8963172031108a4a87424c716eaf752e41f974fdd4a8a65b010a8a82f51bd5745cde5ffc5e46c5becf18f814b12d4fdf9f58f6ac3fe9a104900ead9a0d2061dbe6c54b2cc8a44b462299fa419c5efdc59859ac0428ab95a0ebbf4d57c3b5b8a715d2f6e47034cea4a817ccffab3841aac4d399c132ae75fcf5496a63dfced16a1b4029eb0c36e919c7c77b1c21668a7552e80489ac274cc9aa7e49d7f3ef91a07cf0fb6b46e11f79c58dcdbfcf5340b9d06dbe15e03c1219429847ba6c3d16e9951fe7c3d59eec1a20d87437eb3ee3dc51ce03d0176a895dd32a8db100b68c6fff25167a4022faa137c6dcc0e410c2e1131841f1197a7a48e9242a90758b8487f818abf9643bb8d54c0c36ee768e4a26d16102bc2c7095bdb4e02fe095b24407a12d666563ebdc2f50b834c837b9665ad8980824d67af394be7e92e91e8b3b54ab14ab36c9093f7528f13d732b9f57c0684a253016581ff45b55f6d8587acc093572981bc0db8071378c19c3c9413a74e02334743988362945ad064b269a0c94821d5e743647840e3b21b8d2e9893ab48c3cdcd67280e8a2854d76c9194aeb367a2c45c61a6744a2e3d984f762426401b658c7d77ad6571081d7915ddd04149e085be51463976431ab0450731a09cc9fe106ebbf2a4b3b5488cb3a13f7d969e0891c691c1255bc4900fcdb6cb997d6d227073acb378a8f805e420e04dca4ef4dbc008d2e839e367dc0f55527996cc8e2a4af74c45a9b8b91acaa0e82d9b8c5075422f0cb5e88b010ddad5d83f1bf7dead880cbbfca578755f005da9aa247d1e8a3a011eb3529e1a6ae98b3b38a13480087405669180174d228d782a419230ea53bc5f2f678fd2d55cda76b24c3c18ff0a6d0782c18a2ab552de38fa159dfd76ea351716510204d1702fa665cbeaa6393da6e0e1297eb575430f89fb02cd264c1962b3a71a6a8770fa37d36cec9f318e2ec8843b319f32dd0d49d5168a1e70dfe00ea51144a26ee5bc51b557f7e7a201e6a286d8b8dba0b1b13420c5cb8bbba4571b6304518060cf9dc736a0f6351922e77b00aba54c0a0ef5895dc9496f788ee623ce5de4445f395ed12a00b4f80865b9fa1f1afbf2b898f4cdc43206064569b2ea870b0bf8925deeb5ac00af5b6f0b09c61a1dfcd285a8e7e7542d09fd06e81790053735542fbd2609194119c6fc1ad49d384dcef2108a90daf69d450a54eab32639fb08952bbc59fdf15fd0be863625ff54753c02f887c9a82ac5a0118c7d8e1e7cbdb3ec1d71345daada45d650abab817af06a1ba5b27e01b217b4cc497b9acb2a51c68c051d208f904b7b6fd8ab269434c07899b1ddbda39ab0649c206f79f95ad40fe10867341de8430c54f8b080a0ee99b6e01004ca3761b959a0f62f6e085f59d09e98ce10de619f27c5574851a7f18d63d82c7cc1885c444fe33024a35ce2b83d552abdf5b47c1414ed7db63d53836ba4931a1938b0cab6d1ea0ac6083ace98991de2880cc818ea04ae3447f1707b28dae4bc2e15217d8e7fc6b6636391979303489b16cd17cd8720babe25f9de2cdbc32ea8693ae044f6ffedd20a8438860221c1beb0860374f506f74dfaad4b271ea26c3b3c0ee7d769bfd0377958f02d11f4f7d71919acbdad4f1c7950ef2c12746573a4a011db17712b44365c664cf261f3ea2e0be8ae99a3a3156c5ee0be722badbb477ce429e9f860439716667f0fd32c66cf0fbcd0392741549a08b7c0ac21ac786f652cde528cfe80b74c6413fa68278019d5a9a6b6421f6abf69a4b199d93426dc0d71339aa328695fcb2b997023d5dd0610c87e42e9d481eb263e74d32e21c2aaef321a7746c961487fd829acae9d647c99d3e03f2c910f6ac6665ff084e497065f474a13e9f7ec70a7ca943b7f87df6a9850c2045a2d17b7abd5e6727a750486f98b4f2bba5eeba62bf29fe0dafd43ac335e61256fa14dd2e35c4ce06412df4b04e5a39b1a0e5cdd2fd85da5cb22c1149fde6e01a5ec553cd7da0b04796e906cd43e24623f04fc029f594b0c3e959f2a75dee8f99a4030a6eb13496bd942df887f14cf51fb19aae6b699a48779962d335933a9377c8b5ce1ee83cc0a756be633833bab080f37de8d3225168f887b57afa8142dccbece919da1a36a0ec09f6f424a3215ca8a3746a935234642cc2e9b06e6162ec55e171623885843ad7249c562e5c8a64709a964d5ebc2bd4f6a9b5d0027bdf1fa40a0d0116cd4b411ca43b0b52d8ff33610a0352ccd26e613c2241301d85486b5432b769314025637c379d2cf13994ef1102014009c56d5c3084f0e0d66e57e4c576928c0655c4e9ed0bdafc0bf2dd4d6d5edbbc1749f91721bcee5ae3d398841474ece65404056e467f9da4a42982383e74649ca56313746a052d0b90e4c748b590981edbfab6c5a9f85ecba5209bd2ffe4581c53b4c0e71c1e0721ea69935318d463b508eefbf1752ce8ed6baf07fe4cc2fe0149e9ce37425b0d1de1f44fd06886af0b1f5a58c080f8b6c1458689d26a40f3802fe85b55f2736eb8b7000e00f36ff680fd692aaa7fd22f6c8a64c6f5c52057d2db6f35ccccdec6ff7983bb0cfd21cd4cd9ecd7492ffbaa048c5402a1136bb67c1be050eb658e6b8a67419039fdb2ea08fb36484b07dfe65760970417fb224b6a60dc394db32589b680634374c33b980398f3c9de3c9be0e67e93ea9929f5bb76e174c6aedaa3975c00a1e4c3c05e38f23e3fe7a708cfb9fdea207e625619accacb9e10344f804b06fe71eb863cbd29877f6c6b398458942844292fa378e4feb7c1a175116dc2821e7f141f5f1af11c9f762482a932d87c8a3488eff75df469199eca09c6d8c2f9583ad4289f44ba40b367322cbfc47f4cdbf0b30e27aee255696c61d5cafd210ce514f246776b7a5363f8ce20c7ec8cf8532982f2406cc2a35d8c2117b9de311260b1d595dfa4bf203cc939464dd9760ac52b2e2c4a94d97e9a67f9a3f5573ee14a01b426b9ecff31ae68e79c185077fae8a9902d285fcb464c0ade6673ad80931587ba91e819a84d2bd25a194f07ea43f26aa9f2794a0ae9819304730f468bb1eb26d5cd3ba5013ccf488a1b75e359f5ad0a671db5b091796a2c23496d4c684d50a8a9a191227e5b05816f49d6822d65155be4efc82139d3ddcb932270ba841c11bb34e35641cd6559d2ad69cd8466823d8a6c43bae134ea436d3cdbc9654ed6273a9497de104f05ec13c443bdb0de75e3f007ab1cce4ec3b4758939053477ca8945c2e969c5f4857f47331571068a41ea1cc9efd8d763a63b73932efd7c5121a2f3b8b1302590f15eea4c209a105de36bf785d40c885437fc392497c64d5657e0d272254974bc4da6b8cdc16b00a70da51fcf47e97121793c237a25d35f468d440476e7d73eb9107e01d65cd69fbdf0aeb79782347b8272725aa5cb6a574c276dd922c1d4cc3e685c44fa2b59987a10fae13774bd342b3e4ce913b6e0e29bfacc1c43af8ff47d7839d70531ec82720b2a7a8e68091669caf1c17bc6faffd814f8204446a6ee5b1654adc37c1ef22ed269f0d3caec0a0fb292dec58a96c41a5c4752d19acacb992ebc7b4c40fa840f1602132b85d6ef23f9fd767a70e3fada378bb5e613e0766519be19f739b565cf39e0a4852843da3114ef90772289a20863a42cf226bf1ceb90bfb11d085628c6913af69b8c51cc54bbdb193fa1a8bd0767e74d60a916407f3f3d68b8e4306ab21d47d2d156f281fd625e661eb23b9845792aa0c0711fc03aa48b495c1793a6044ec22fe05a86f6c7b5093ab0f29b5164023d5981f74b48e6b316133382d3badf91c30cb25a68dfbee4603989e753bcad5e67b28aea7ff31cb1abf3ec1f36cb61d8b20e952d8ff92d23251d9cdb80a0e72b705f38e8fec2cc0b9eb25504873658d2e2c9692107815cf3dd16d45f9f79558a6496833b6f2317ef58e10f48a3eaa5865aa23b16eddefcef8c11c19da49745052cda27415ba7e43e832eb7a955a9db6f5bc665e14263af383b325bca2ae94d5f36ba339a33998876f99250f11d9153f20028c2212cebd06f97baf5372e40b093b13bdd0f8e250aabfd4b7f8703c2d96f07c89f8d063045567d0ff51ecf6d4478e740962eb1aef1bc70eff208ca2839364041d6c780c5e992814e557a5a6dc98deb1e330f1ed86c033893fc68ba15ab78d7de691cae828003fbda649183903b13de4e473f1f39bd10b292723ce92d00f722657c0773943f697b37aaf17c5879ae8092be7a71ff1a9bd4515d5018609a70940158392022ca4c28dbeef9072f0051bab15b11168f4b5a252ac40a4c5e7c0b479016048f06e023f08fa97472e20f0216c7f82993662cc47f7ba722d0157661d504945454d24d0de24ea6fd40c7ba8d77319b8bbebe028fe028beb65386bcb17bfc2b20100cd26d7e41cb76428e68bf55a8290702e76b6f13287c2f517cdc351a4054bcdd64f8749a52427b4d3c44161e155953f23987d46a9f70e26056c58622741b70c73373cd050085910066f9589895a968a74ba1d0a911fa0288364165ca2fbe7a6bde8e8a0e1bf2d040b2e2ef28c64fde6f01298d936608bb0006a07576bebb63e3d718f05b6c91cdbd72ba0499a71fc43491b26e81201c26ac6968cc9901e72634995ee6286afa289ac2c3927c266a63c3b4120e96bd25267aba90a82594e38299e54d6fa160ee469ecf7250d47e3f09232bcb77db4e3a6acea058bcda6e1cf4fa2d9ea1c1852675479c189f23c267f43cf7a3aec6e94bdb77610730928830980b4e58904d3a18e0e4b8b89fcdad834e105b2dcb6c564ef0518d264139df2eab2f3ab1c9d1ca5f40633e4f73ddc9bf5a410738b93059225f47af38851f690d985c7c4abf67ea0519fa45ae63c4af652059ef963cfe43ce9739a30d7067ee6f510418a2795296a678666a6ae13bd6b612b1237d0cdf248d88c5f9b7a2608796e6fcd64f3e888e1c907564f0bb5b0abb073b54969b1dae6e2d925b32c551bf07f71d6f1e93f28ade3eae8c33175e60f8ebdbfcfdc32074349a55702fc2bae00ca26daf6495cbbbcd8e13ce63a9363539ef826cb840938b2d276313182e72061ca8d600e6aaad65109182c60c7cea5a1838bb29308269444ac70b183391421175789722dd9a605d10fc25aa813dbd231b4718f623514e4fcde5066830f08a645cd9836423a8e313815ea81c6a245f640441f300a98075553675198abed02136060ef565d5305f5cb2fba6c73a8beba9e32364f57c11b80d1e42f0cdbe2febd18ce5d045edb274110c281838bffae12b7de02701477bd5f359c236fbe5197d90fb890d3c0f21345b3b75eb055cac7aaf4b778bc2a36b626c23f88008db8ec08bc8cf703688780422f0f21db85d326c5cb021716ab8ff3db5742751834ed57c6c6bcb12c9c62def64e511ee46ba8c907604d73dc70568186cc59fd34c84a174f4434b96b28576610c5f8d7f97c1c5d55231993ed5c3a4e66a071d735e3cc757e0ca2cb646485a84a2c0653bd2646f389ef55be88e47823ac2743da76cd0f7d429363553786f2a3c38f523455ea5996d41210f7ff39c479e4443c226cf307d1604951a387efe69a8049e0298b22cefffbf2472c89cf9aed980e27acb7966ce999ff7759832315a73bdddb3a02f54428bd8e5d69abea907b881dc49efda74ac0c5b6814d62ad17d3958953743172a695f9cf86b4abde787b40199471db8f759c6d7b269298b2fcf7e9accc8920915dceb2da48c64fd801ce8f5962d32d44c3fed8520131362c03c5dac3b03a464efd617de867682455b17d7f0c3e96378ece66fa804bf1cda37f89ff2cca7fb3e6c3bdfc044a0d50010e67b292841e9adc7e870dbdc6638ad6d9012de126f084e8bb4135cafa0072314b2d7aa13de46b15e3cbec2dbe2e28e58e07275226df5fa5fc2c3f144c8db12647625bd832bc2d24d78dbe8b1ff368f035a911a528235bde1d5fcd35637c8a2b33573d330483a57e2fb68c505655f4a2985fe6d76b7cdc2f6c9b009458685bbc1bf0dae3a620e312c10f0aad7c847b70b0fd324dbf99eb4e7bf82cf03683e5f8a77b1da0f7a5a138cf359e6044dce3380a16bbfdf250e02bd639342eca76c28cf3746245a228c9fef86234704909717ce4fdf7de0175dc7d130a4c7520cee3135ecc03d1a3fe96ca9fdb51a15ccfa9e085ceb949ce7b50aeffde4095bd124cd48c07f9be5a7dd07b67d95437031d876d0849368bf204777b46d446d40edd3307bf50cd6b765cab8dedb02324967589c750c0df5d1be97eb3db1d13529501f0d6bc67cc74c99594280548dda15d7a73d33c45220e12bc8132581d73ebeafcf2c4f9679b3461f9973d9850b76f1775f47a0d6bfca1a5528ebf65f1bb1da5a9c8ede0a0886f6047f5e6244bd68049b468d7bce3dadd1d3fe9a584cf8dc8b1c2a8ffd79267743c6f47d9dd142861136b2b6931f7af572455231d5358066548ef7ba1e485232c00966298cbf544fe860a9dc38e22409fe24c8dc936c887a9ee02c160b7e92c0926f24ee02cbb689763b2ac080c88cf4ecc94fe90307bdb86c54816475424c1a4265c3b5636299f992ee4403f996d4c1b99cdc978093cee8b43a2660846f1c131cfadba5abd6120f557e205ac46e3b6a72f14a3c39b052c2691467bd18620aa51a3b66897aa9dd9508f63cbee320296042fc78231f3ffd04021a2bc2588b193f3d1d89a1107bca377bfbe312fe633068d291d047051e37f4657c362995459851be5303ebbce080756fa5ebe08c7ed69a15baad9c2fba0443bffa7a051bf5d40a31bc5a36136250f8b82fb6c23e2260d5db8a0e1fd96b2e8d0395f06f761765b267f52448d07563d5dab1253dca3272c1fd9092322ad7c2c6d1261059dcf80102e083cd78894d8281def296d0a975a85d7cbef9397356c04d108804f36133c30768486c2e0929463cf9d4d7c625ca801a8cec8dd54850591e1965773808c7a2bc43ff16c5a031cf647e70ebe3cd13f885fb987bd85242e7e5cac67b17d34fabcff7b3f5a619d6b128ddc19f36413a4613e20288bfe104f12b80d91861ee32930ddb26656d62f763749aa9632eb10b3fe3167c9c6aa0b3e49701bfaa5d41bb7e4ef94b278776d3493ccb72a68e8aee9a586abd57ebc00589fe21e0e6381968002ce001a918b8ad12a91bce76a857cb1724d66a2578030558c41d07bdda3ae572d867038f6e0389ab3d48e131edcb0422bb21dc228498d13e144a7b228b18251423483e01b50db3ee1f4829d8fbbd3784c3c1e436582d2faef692cfeb150ef930f7be0e76d68e3f101018e911b7765ce330ae92bd5a8d6f9b01ea265ef5b5e91fe000b17a2c6066b58c8f40d19e260230e3b450c7823eac729a2367d2c54002ea120c2641bcfeef8f67bd98e1b5103fa3bc4baaa2f93752adfa23e30f9efe176da943860ef99c4720a162b1b1110ff926cacd5f86d7b2cc014b9006715a8f93a41b4a10e43f9bfbc44fb274d6c3d2acd9ba1fd9a02916be152a654332f7355a4773900e68a1f6cc142b339eb27e66672b807c714d70a2c4b92ed2ae29326686745be22aa5b035a3b9a383516bb6df76ddfedf53e8c505e9494e830a75e13e4acdd6f6015745e8b27e2d700e9ecd824d72293e6adcd91603445fbf99de8ae5b2ae88ce4776b7bc4a1bd0b4775dc2f8177bf6047c48c6d0e1b4cea2404e12a17c7a6fdb8e81bbdf640c059b1c1ef0932e0e5f8718b778513bf482a83cc66d5f26fb59ebdb9e230e664a28e388d5f8ea59c6923907224adb026a89f92463b9ef4bc17df5114869eb884585503a19d29955aac958f2a7b6559d7fbd9f0080d42e3bea7a6525141ecc883d8e06520c117a4bb7ce9ab36ba749915f1c3e5c5fb9e5c1970c59efbba0283febe5f36bf09d5fc49d9277ba875869ad2815403402199f20bb5ddfa01dfe5f942f7b3088dae0de53655d5262dbf3e6907ccfbf6a43a8caf2cb95ac51b8ad15179cfb6b8418fc1e048d1b9a8288c49c58ceddd7547692ba9b64cc12286a6c147f3b8dc98d5799cb6c32dadd65d1a43dc027a4fa28f3936efe5c5a7a72e0f7fc54437bd0a145873a7e22d551b67e4715cfd5cd71ae7119d282c2e047869cf9ee300c3e035134426605e1d6812f9843a59db6affc9bbd16f3eb194289856f4bb702f7fa1cd276909bbd06e20ab0d6347c7d08e59448d7890e0fc6c9c1f08376762d4bea93cfcd805cf07887b1c0ca5457101211942060540a9fe588ab421da6e00c9f0c6672c0bc591c42039c846a8e1e9630ca472b833e76643fbde0ebc42bb01eb1b52c3b27cae1a5463149f9b89222c4f5b58fc7b3d4dd191819f6ccc2cc5e8dad94783ed69959fb1cca96268a626eceaa83d5885da0eda16042bf8a919e05ddd1d1e5122721871070555a92159e31002604e5d4c294b13a9c318a16ea00f9750bf6e8990e4c2f6138f4711997182fb1a17c8a548e6cadcc2b03f7153cb33928442ccbf8fa8870b9b510b50b1e502c5cbf20789c6528996255e0aa6657ea4b6455ffa4e68cbc8db038912241992b62993d6b2cc4b5639ba99d59b9d4c4d9ad60a6241d04cdd826ddadc2bbc9a858e697d09bb3b557ab00a052133be2f446f89ee305c9b71c75c6443b74debcdeb6cc736046b03591d7b75e39435766fb1ed832a9889d6db8a4753218ec33fdf77a193967b7b3302453e8e33bdcde52a4230b30585648c1ef8e792ff614d6288431cf977aa0572c36e46b75ff8107f792a20189957b129ac1090df9e1a0c2022542c5ffe6c7f952130be953ea1fd68b5d6a3d3b9ef165229bee175dbb1e69fbe21fd71d21698258cb5e6614cb68dcf31c7546b895efe451bf5c1e4f463b0010d57453fedfdb144b317d0f6f7152f65203de5551415775a06d16bdc35b87f6990ae606576cba2efca3c65f68c901d86ebf306196b3cb2bb86cab15ba3dd66a18fba9fbd4e2c975b57a9e803588a0a0d5b2543de87da8a7f1373acb796a5a6d935bbaec1579099ee77a73ff6b28f78921e9c2d9083f5f48ba128a405893045b88cb742069fbd34d282b7b7e4c09f028bed9a0c81a691e04ab0ed5956b518095441c2b171c71f7f6cb327d6a550035094fc05097a6406e6838513cd6a463835c19ec8d38a7b46bed5341594885853165861b65e93c19fbc51a02fb0ab0f96df56103f3940e8dc0625fa9ce5128770c7d77ce612063e9fa10eda4741944ce0b5b1f5bd002c3292175793876e156440997127ae3d4af6ce78d09bcbdede43b4a6ecad0820df66e4f15fba81d1827a15e57f4f5f9655923b856e039cb560ae3f3b835f2c902fcf77f4507d85f94c6c42e7586d0030e78cc490b56624e1de81d22a9c179cd3e002d5a08a3762cd12657aa759bb029eb17c7d13f961deb7e0f8601a4e13904c82d104fd5e22343666464dd77655cc0b0a6f412d87b2031e84861b0eaf99eefea07434afff1ba54f7e77ef72c615d9bf79b1b1039a4f494abb57a7a534dff4b541191db3c1e29d0ebb7922bd542e118829fcb27a595f9d266f8df802274279c794aa361f203802bf037af43f91b003a82a0c2101f4be7083162019efefc8d459b6e5473b21c37001e1ef6ccace72ea219898c8e812787f36250c67bd11ca5460cc0a39f3db12983bb18934b9d6c5c21d08cae549fbaa01d93a4c5744a86974cd21ab0730655e84a651bd27f908699ff1c2410896775f34a15e10230c68c9d29abdf24581cc04881e10d17d7b58ad4c7676c991a62030f473fb8cab6eb6e5f6e76042e0ada61a50f4b3fd8408b66293ce7a37fc57c47edcff76705a8f201f15bd122155332dd7742c2cf4abd335f354177744c14aed1a0519401deaf8cb62d73f81fba3eccf321946cb350f66fee63c8c2287fd5e2d8f59a57f2e2e9b73452bc5e2ce754a59df5d62936f6d72ffbe28f526dabc85ce3f0ee076879bbe5dcc9c32a706aee6a42e36f1eeff703bf6a41df567d3f560db0fd7494eacc4ee59bdb92718e5e00cacb29986c4771a53f2b2af19ea274a5725700f1201cdfebb58b2a7408a7464d17ea74ac02c7e721f97acff87c347e8ddecb27b7b3fa7dcd673f7351c5a474cafd588c81ad487fb0f6dfc54c8ea328964a95b39863a66953108eeef10d57a5fa38632e3be7949b4b9a27ec81ced2ef4555e05d3579ddf5d89f4d3428324cad032e59541ced3231bea2eba3d2e4d016431c955a804662aae6ec6253b119102afcd91ba314221a9dd57b40c02ee345b523293d74a4367d8c47a9b55508660a1ac845755118a9addd9d3ff862b077897f515dfd1d695e5477129b650cf18baa8c8a1b959d2efe808baafd3a61288b92d17f45c594598b7873844b23a67ff23381b07e32e868dd5830d65af900157eaa1b94791fb59f65c869f76053e794fe779817f85487e1f33b07a3ae20f3de0048b28e86475748e2e28316868cf0e297a62e6eb2117305a1992c232ece0b595740b8681ab4eed0218ce12811d8651d2dc835180b17a2e82a915370e90276b1dcd433f374c22578bbdeb1b64ac76807df191af6fbba877a9e8478b17a279f93c5d3ddedd3302ca40a21e6a160616c5a1e4b0430298cbb88480f87c4e9af81e9bba470222dc2abf53c6865985ac7d608905f9c295917d0c2cb1ffbd981ab17260a60b2faca1021dcae1915784ca51e4440074a886f994103a7463701f00c6b0c958ca80772f93d0b904a090c9a11e7a37386b3203e822498842514c8044832789d32bad1c9339532e9cdff836465dad58dd4c83a6ce6fd26127360ce267541e29fd6f2896d1d89e1edc1647b4847937c1abdf0c54ca5fdfa1c826afb9453f34ef523db345b4981d72ef107bd5772029a5e5751ae9e7572025c79df9394bda56fa5b2f76923219cc84da2294c5fd12419ec40cca987334f9b992a6bdb0cfdbf8698b92a7a7c7253c6dbe5a3488c69c423b916e1444a501fc451aecb9f4e5c6379311f30f549340d20435e4814a4562448098cf5f0f31ce98bc65803169238605f5accacdf3d0713a63faabb63c0ce83e5495a50f8d52d7778a86c17c551e50c3f5e72de21046cc54814e36ba9052e814850cf3634aefe23bf016420e4da548da2571a1370a154a38a2caf31886d30d1a21a55f16c7ca5e0876ad440f01b281aaccfab46ebe934c0ed24dec618d1cd18b631c8ad7350421dc99fe283edbfa8df5d9fc861edbdb736dff3ad364faad19ff9b94a1fca1cb0df3b5b5b84df8c168388204a4133008ca5800421e0d0a3ea70789c24d0f5b3d14045030977ca22c01002e8692af42f8a57e9488545044c5ae305f7175d099f8eea8bda150c0d606586b8fe452b186fbed2abb72120d0ae7fbd2b62bad642beee2ad2dfbf3fd2eceba2212e2f780f114653c9b21829146b349d9eb4f9dc863b6121c7edfd922a3b04107a8c8197590d1367c33fa3faa41d8eaafab0fce80646d49f4d71c87d9abcb324167ba43c344e171310b1aa71512ef3204107b50f4cbf8ee2e33bb055948daac66bf2e2ba11204f8874e47d3b984abece86fc920d9b8b6374e40c93a35296c785e44bcf2b46027f516a92231b9cbd214fd322dcd049a594adb2c9d894be3bc6a22511653513fad6445e76c42891722598aa3ed6794eb756df2a5f8789ac4225bbdfa2930419ddd2f4301b05135bba7fd9e3e3c97ee9c6dd7b747361a405256f65bda5e00c226cf392bad73b9403eb0f9b24e38c34b00a2ecee8306eee635e5af8433ad02c11295a14572009c82a9ea84c2d1b1dfbaf7315d6b8eb1a76a741d729c160ed7f4c8621a286b4f9790e158c469c863b9f18ba1660c56f45c346c9985cfc2ded9938654d3c847efd1b6be4080df79fa05a4363b09088253e518fc873ff1301b923540a1449612e370492f3f432d762bee72837fcf3ef628e79fb678e74aeadeb5bd614287e166efb689feb684a7e064b91657b5d68d4a2f16f83e2910a44281591d03a49af3e73dfb4496e3784d013283cd8aa4195bc31408d37e7096b19d2c708a827a72721bc0425d06c0a346d2e2fb695a95fa3c09d68d741810f96d5216dfe9f152c82d01b82acda7c633b65675ba09b3701e0492830583b5ec6c93ae0b9e5c73a29ad32d260a615a965060e33faf11385b737d5de721e31cf662ab69786448b8d74f8214b623391e8bfd79c60149f6b85ccbeedd7874e94e9aa73648319d48b9bfebb4ff813862dd1f06c4a824f157553588aee25d19da89d65ab75aacace9f735d2774560247317664337daf620b12a864bcdb72408e485d305fc24df0187bed50e08aa83cdcced3cd096d154c09b8b6ef69d37d78d5fc3319d0a72a96fa2599406b50137d9b990895e13530b5826d10f2a15954f2351994f50c8ff3a5ecfe107a87fadabe6a100befb702f9c91f5730d1cff50dcc5a056fb75357de143b712cf794d5d2eeabe75415d26bcd493d48b96389c9d203ed78a98ddaf78c261d0d4b2aad06b467822674c6df12321c106ff468b5b5779cba829e12fd8e4f10f6a41a2c9d8799e6ffe8369ea7a36888c5df5728ad417f516ace7bd89bcd4efa738da68afa41e2299346a23180af09c5a97b15ae80bf6bc695c55281b4e2c5b626a2e871e03eea03b5ceddef1c7565388172268bcf6b94e102d2fd4d1273bb5089d058ac721f245f649b3a70b5e6da7d88db1391def976a5b7f740c4302074bdb711d69179b4b035d4d8867cb18407e8006608787a4cc32317d43e5d49054b51934d61ba650f921b7a3e8cd231314f7a174bbfb4c4784687a29d3711d64b8839369a117a7d784223285c41909ed1390580bd9648d49fd93ef73e7e2f94482755e172e510a4e4a4b13d1b7e17f4a124d45a423f27a976790f536b0f45bd272941bea44f867d87f63c8b4f03663ea786c72513933cff9ba03a915a98d30a31cf7c6efb14cc345b2cbb413d5143f05d513f6e0e7e9beb3f1f374c20d3effcad0307ab7560dd6b5db0e85fe9d325f478b96c70e3aedea6ecf7bcb20775dce78fc69999bd360b0207d17fd519242794b9488bcac2ab538104459e3401b013005837600b4effe8491f8eca522c879a6ae761cd3640324b40f6053fe0191b56eb6ade88f462bb4350f946909612bab94006d1ce367436b29d0d06fae6f7c9fb1a5662b6c1614b92702adbc056fe8fc2e91897ffcef03c01ba62a9e10849d09105d881eed1f478543b010d344a2147521b6351f310948d65ac4606c5dca262c59af88bddb1a063f5f55b52829667f5f2ff5e4462b98177913a5f951894e353f2aecf5b6f425a5e091220f9745870339b1ddefff7c1877c9956a1e3d6b7f0e3467620e76e40c78d0d6c6a8487e35c34e8e3079a4d5366f9e94b86e1bcefb5d422edb3800ae0571d1d2b85e6857ba4c916d5fa7b846866b30b18c8d523dad2d5d856d9f794d49c447be1c5ef3cbaa16b9850c72e7468c9e0f30a711ec4cc59683ae65e8785b7b3abf76a9d8faa987243499e8854fec10d0fe4d5c869ef0a21c323adb136330687a633de51ffd3105952e424025641b2d3c17be011ec1e292fa7995f7f8afba8fe6844e2287d1d26d699489c757aa70f1b6611d6a102e55398c827664a35ac3861a51639039fa560f88596e5a1665ca2db10bfe4c3fb945000ba370d58d86c6dc94fcc0eff1bf48bf58d8e63ffa472eb863094f3a8a5231b727be9f31667369d375d1f5505dab789a16b1bc831108c653c0870753886a88727db410e0d4329e730319a0b8ca544668c9bbd2da583fe5725f0833ecd5b464340fae728d7bc4fdd9eb72f2ffe51ce01503cefc5ae4c7bf13b0a5d86ce58df0713bac3b1893b79e423c902c89b93a384e659730c332dafdfa12e34e52ae0725e9de5427d7881105adbe8011f714eb30c49806921697ae0cde3fc51d2dacbbb80533d48ecb14fed2b5be8d34045e96963b0e1bda8a6e29612314166bf1b5e6e605b7c06b0ce356363a31c7f3c4208896cda3673a314f47e2266b1d9a50032de2e1860f6e2fce8a7927985f0faeca79807e63a3c61d0391a4253eb56238bcd2e9fda35e10f251150d5fea694908c8ff5d17e1122b3a58f2a28bc0202a45f24097f60529852639b3ef03844bab937c5976c0d13680b908605b1b1d88ea9a915f70c824213f35e4c6d415edad00518aea17deeb9a08ea624d82c8825d86e2a13aa6eda640197e18319872114ffe86426ce667c1146c4be6f515c88afe01985a657a4eb735e2e8de07d62c22fe4d93535d59c604c85cecc6f6a82141fe92eab431b66ba840e083a9dc5da6a56c39fa91d0a1578b54550d20d8fa75d5b4d29383a9b7c7e304caf8ddadf523a541524a47b8ffa759521828f7473fe6414a829d44391946bb33a67c402b86e6ee029a17af8c8ea1dae7daf55e2da2f4bbda2053280ba93e29c33eab0cdbf8e6794a7c35e2fff13f6aa67614583aa565f790f5b03734fc51f9498704f20e5adc1f5c23cf27b502e8660893c8fdbcf334b9dc3375287511609ede0dcb2ffb9ecf829bb98b4ed65678acaa2f3a04a37b569c894c58a1b355b499a1efcde94ba46d0d2968a29e1aede9844de33ee6f93697e5df76720b039f82f82ef668be782369aec47a3e6fe4712c5913b905aaf32057f45ab1725c0f378a0f14f16de947bbc792623e4b19cabf75db77481dfe2d95dc5eebd4c477721c5131d920e798c3dae917d73af79d250181b2566955feabd34509bdca1472409f0eeec35f45e6ce40b6efc6917ab2a30d38305647f6a8e31bb0ef3dac7796447641a715699a2c258c78d9624e8d4d3114b95d6526358673507c4be317a6d3673e4141ee4ed012300eeafaf982b36c8d92cb06c606a617d6bf812d1a99e11581f751598c1e74d910cef09aba8f68aacd87ff49decc401644c7d445cb23b44305b7644d39e77d264167f7d08a7b9c20f32f339e8d13316be2028b0181138f220749360e1182a5a0498614ed1f7f305f6350660e5b2d3667e30de2cf3d5054540816050fd6ac84ce1e965553a4dc7de4efe913215c58848aa1f2d025d437227135162a83575d6edb951c231c878de9a7b1a19a0302ecc195a1831d5d62247410c0540fb71372e4469c614394f0362963686a7467769490ae87e53807bc83d0331438e0fa525bee8baa935cf8694a377543668b377475016136e1500df3baae29dddb3ca77d33a4f5056ff78b9e2da63d5abc16e782aa8cf431675b16eabc56a519b5ffacf57824e0c8e1b83a56525bbb79c3082debfa9668b67ffdf686c8d0e55c86cef857541b9ef78ce7ac0651d1673c6b2eabe5358c8ce1039cdea42ae1959506dc7dbcd2cc3d928e12bcfee7c39d4ad4a8778eb7eb7bf2db9165e837cd8e3a1bdea4fe7753f6d6c46f575f7b060acfe975a9b324f5e7ee2fc97bee956ba0234131f0fb59bc229c6ca22b39f6665e07085d630217eb8ea8e350779ab78e5a2c924da57e83a541666f050bf36dfaaa173f165b2fc5887351959dab6e88e8878ce0fba67a279291a93698296194d66fe5494bfad724c4e64810e4d83afbf126cbef6196df4b2d885bd1092bc1487fb10aa97b6de255799fd07a776eeaca7eaef8631444b5cb3323355024c10a5dbde6209169c90be2a7ab4f11016df434bf96688091f82047b4fc7e31989a6581a74abb16ad3c620d5c639035497185d848a77af653c3b2531b25b32c551e037bc041a44334ab15c25206192de0c873018a91c2566782f1e43857971d248aaad709dfd230cc66f01c1018d1379317e851e74b96cb7ec1f112de9cbc95a8d258f6ba28c31f746d93f2da39b2e3130d657fffa89fff161541126ea809ccffef142fcceaa411b9aa002f040fab755261a68ac957aeb8c73d7c84af5090c1b2c14624d11f432877648907a274bf25075ea9e49e6596dab49f62fe28e8b5ae6845aee0a0158a722fb8b00ee6511e8bbe47498341218c3b2d62c4f92daaab7fd703b1ca7f72c3537eb68819439be5b3db01d07b49f9f9334b202ee5e9d63070b0ea9946d63fa157f0d0b3abb6c1b44de95e357ec4c83a141d5bab460dbfa98fe3c042f5401555d155bee1f316df3533c5b33ece23be6ac702e8f9b7f0a2d7ad27a57edb3d190a40de94f34cce51116de03a9ea947ac7f0bbd8fc1bc57bf00d4d95e306fb190f7dc4f2bce8916673706858db422eac6899edc7b1fab6434b3664bb0f651b3e3ee7e15502f987f93a3f67c9d2e693c74f637a524e10987fd5eeb1c52ab2275d7d9d0dff5a318e3d70640a07020d82d440be27d916e60a867f1f3b5f3ac2167c6ae520701dbea18e0b18f24d37ad0b6e72af48968a9bf171df971d22265b7ed7334ad23ad1caf71919cfa896b7a6a5168a265a56de389a587e75ccc2f2fca2aac8287ce98236c8511331107800c3b19db66319957a6436b7de6ceb8e9489b0bcdf1b5c0848ca40eebb722eff3bdda32b60d41af8d5126349d67b5b65d11f883e969b40023be2bcc4359d43bf665dc22bfbd362c14ea8a2488eae8b308b659664b8591f3ad6ce3bc09bc683064778bb95dcab8adfb09aef58e50033e538cc5a961e5f3ae1cd901bd9924b4073c9e287bebb9d15d6f6508020758110b4049ea248034fca35e4632827f9e7a07617b69c6ed4308b384cbda8e43acb7a7a165ca069e76fcf1721f3b82bce25c3697d3bd0abec4414a56f10c5e51424dd080c3d6793792f9adf1be0e5743b8e035b3291db68362c60491e21c9cf1ed340304c743f7339fe120983fafd4a63bf57f5f17fb04a613ca6e24554a4f5ded7ae7637b5801b597d7cbf15ab062d0fdf01a69e1d8542a37b15c429a6d1df6320347fab017db89f59024c183739ba21445ab5b7c157765ddc683c7778d875e17b71d2e763b2f40398000b6a1a606bc4fcf627211f01a16ddee39a4528c403a3ab60b071b716db6735dfb5e120f33115ddd2be81926fa80760b3d6f1edbdf4911b62eabf8f78a6d65650d14df8953b8764c93d52f30d7d65ae5d2acce95143dfba92591f84384e17467eb481efa013fe8748773a7dfdad27c4281b0dd5f09d92b5f04f5f19110e9f4cfabaa6cfb6697b31bebd7886231d23cd265b419312f53e3ec08c1068ee61f7885aa00c7bee1b272ed471bbc50aa256522aa34110dc1bee5736738ebe751d607f2d470876bd67c8055a04ef84af5766e63d421a6468693c723b456228c00620895309cd171791146c405fe7d012485cfa22ca7c94410c610ffb4cca2f1817f273068c2d6da356c5e697a04bc418bb2baf899f45649e67896dfb15c1f81ca7a527667a698ce0f58b8f5b3fbe40f95075feb64d513fdc056bfd7651b7e4045b6ad74064b39ee587f24b476a953ff9c9fb2a2c47961be687dbf169be582fb984d29a79fc22b3765fa3b3cb85e2a78e532071e1b6f0f275c1731ea459aa2f20c64cf6f02b596602bff08b042a020981907d02d9a66e001c9a10a5820321f6b9a21e89a47b6115f17dfa49f7d5477206cb6356bffb50ab0d31e24c06e420e28b758c0ea4818beb38f5c53f4fedd4c4c6ab0f2dca24173eb4209061ca1ba684583e80e992e3965a01229b9510b3bee049f515cfa2f40352ca23ef2f31ea501fb93405d2e180bdfbd1ee1f10bffc28ba76eac0722bda5f269e18b303f5d58621f74f60826224ca0500df8123cf07167c741f86e5cf39ff3638983a6a41d22d7560ca799d52b4b34a80b62b2a8dcbf0f72058656a09402e30a168fb846179d277f4505a38b2bcadc4a7d3a55bd49848f55930bd9e90e69058ea3540e64e52b74abf69d1041ad873a0dd5e1821caa1406d0213377f80a04b5acbe1e0fae4f9c1e3873629ab19182e80ee716bfa497b01969bec48683c9c77b0ba3a96ee4b7a8a853e0164625fb478143f8524d30c54da62fdde63077b6b122715ec14933c7d133f5372a2394814f0d513be523c6e101fe3c8bdf11d90d158cf431d3ee1e371e268078c95c895f12134fb6448c4d2e04f1e448c17d78a4df2850a90df0a3ec603e1810572a9b5c1e8e94d299477c064d741678fbcd2398767ab5d8de59bf83ef692cd0d6716736f44fcfdcec9b0f1a9e81f165b2cf47d57539f2ade54290149c2d3ca964dd2293e5fbff0a8c49c6f8950e535e8524143c61c9dd956afa989151b441942c64210cb5ede94a1d0eb5d759ad488c53f67198dd8b3be01ae9062a2a90d92080bc1cea05042057665608a34a14395565e74b870029f03c9c24f480ace3524c60a753d3880a53e17e162c8ecce2b2edd2217f93ad8a436502d5bf3ca4b2aa028f173907683e3f814026b3d0a52e4e8c22bd2d2f69d02aa8185a07269324d84582fd619102c86a36d0fc32e1f2306cc1914d88a27ce9c2f0d2d2fd1874564226352295fec5127d6095fc707d5a0d1beda9a5db111d8e9fa47463b42b18a4ef0040a1746f4c4aeb438361a6ca127a7ebb4f385f1cf77676bac5be9003e8d1c8ee3acd8a65b17cfe714fdca6689585a3ea2d2a5afd5781d5ffabbabce67eee19661683dd912c012c3b3407fb6ebfb38cd430eefa323fe9e0f622521ba0fe22fef0033405e491b4e6732b5a86414e50e8ac7be293c83ef037a79dd39a2663a6e9345d6c510bf3cf09c3cf4bd5a6d8febb78620b68e8e98621e10d5e53c023db5579a0c7db90f93d99ca1fd94e3745f4f6c1c0cba3315bf1cf9e0d8118dae3053edb33a3972e936f9a486759da95ee6f7c0f14d1afd81835dce2cc953c574aa2b1bd5a6ae2ee7f291fc50e659725841a8554f2771ca1042a170a00ae210f2fd9b95ad74060a4eb61dc403737f0c543cb5a2db09eca71e08e74cd2ce1089f67744f35105330bba9b97d85d70b8d0a78646231e22918720a19a2901940e26cbf403748a414901125a485589d79f8123d6318c44108846912e0d1d00252123d1f4919be0db2f3a1240651550acbd4f6c72c4893d969f5e9ba1ecc45e53199804cc8cfe785bc59953d29581f32b47aa41a6e9019870ee626f5274f24566e164b588a5a1023ca233b50d3b1e1a0e32fc11e3084edb08ee167c6fffacbf06a23da8c079f1c842ae0eb342c79eb5522fa79d265daca35e4fbdc0f5931abffa5490fa8f00f155094aba28a890e06f6743bf0106e722627d1b9a017f41ee7964a69679690e5ce544a4de6dec421191a8a77acfda9a6ea3d47428b0c925b03d4dfd1bdc45203ccbc1686ee6add5e2f31216f589291aa2a1291503036dae8263c6439d019afac64125b0749d38089a1da002e1a894026079a59466808583763f77bfae67f1699f2db3317fb63e627c094d85fea2f75534468a800688036b8eaf9d167b9b755b668798ee69028f3a271010dcb505b5d67c7cf7b932589306a139323ce630c80e2ee003931010c6542a1b4234c610eff578c406d8801e11ea5de3514d1ac7b97735adeeda9020a21a2046974df0104847602884000b2a6b4339d6c23436c76c2e3d62503293ddea171001b7e6448c06ac65be75d8b0fd874a4cafc221168058be88be2859c0411329b26e7c0a760976a7f67f646150567b69bc1cb3ebed2cf4996b3493e2b1641085141d63d4650e837c941be760a0ac394304448a074ab698731967d636b91c36d626f3c6a5d32cce6e4ab2cc229ea6d437494b8581bc24048516d7a669f69821951a4504a343f0e946b4bde877e0ac318ed41c0c313a9c244f51d0622c7a81f825a20941d629b75ce55a01094b4ddade27104c76c2588738ec09b59c854f001a07fb766e9ed56cb41b521b8f7b8b835eb3c609584453d3db9bbca0fab7b92812177afe48542d787a4f173fb09736473fcdfcfd7953bff108fcae91df6ca4da2bcc306f6296b132ff01055272487d7a83ce6101c5b1aa43c64e2f7cad509c5e0ae9ebfd4ebbe2d477244a45ce299ab6a2e3d0af42c5695a57adb8a90e5b6341c5b51b322e00550fc48885435a5b40087c08475331ec0cd4bb7c37d4fd0001d28157eb7182d383031254a8a69122d6297ad7088a808392653bbc3e88bbf140239d66c0fdb2c7bc0710afa5034e207b8ff3ba90f378c1353134d4641c6550209a4d2006e17c3eb05cf03248aa2ade55a52de0cf0931c5262a7edf5f317237907daab20314c5af70c975e0f94ed8ad5d749292ccc01cb4e79bd755e3e53a80663776b5d78d9ce7c7e28a1c2eb19558f5ee0810b46fca08ddbfe2ff468829357256bf707d8d98468c7f71a62728bb9ccce2c58c6b1fc560561c14b68f3ad96f5dabd60c7245c007a75de8fe2e584f1a8abc781f72d60a906190e1101c0d82be403dac5d144df02bf167ccd3a262aa2a8a1e02001f18606d179bc228d50ce6f8ea8046de83b7dfef4a5b97ef9d10a2eab02ef1ca9bb1848fc55bf96d642023946cfda9418b7820f3396d71f8f5d8702333792b60eafab735adc060e801785e8d586c4404203b22d7b63244a122c5de461328b6ebe0ea7903aab54557d5649208c28454dc7f25201a5a0205f5609db6e3bdadccfa76635ff33ffef640203dcf3d87757af05f6a3d57cf9149ac6f1b8b4217ea6740bdaf78d9bca11428039d6c835f861549ff898d072b794d61f66599b4c7be3c048347204f102f741e8af763506171202d6876fc7b6b5452a4280b22270e69f203b92fc7322395ed5a6989deb9959d3dc1dcbb765c40467bb157ef5deb44f83ba1c4a2946a2eaaca277c81bb37c790a047792772a138fb35da83fefeb019ce4ad194c9ecfeab9e046f8fda8c6e560d7d7317523131d56d8187ffee7a5746b4e4ee20f02e970866b60bdb9f59dca01b603998c80c25f56d8ce6c098923aa9cd9ba5d82e30f6e6743f8ff1a6e187141ebb3fee52467eef617e6aaaf305ce088e53db0d1e569c64478c4ac1d6a94995887366297cbefd6d8a2b77fae2b68a98f0c890ce314404a91d938f5211c848beadcf47613df4342dc1fe71e4ff732e28c6a1645ca7fcd8c0e3100cea7c75b3f322e63a9266572752e23cad2c38c0a2e7fe0be4bebf654da540cdbe035a430a4052be44df3a4dc76782e3836d4766704ea6d09d137cd7b63184c97e481586d7024caab6dcb641aa907cf69cc8ae4da191669ae83ebc10560174c675129077f5e910464735ee257d8e862c20cfbc3fd3ae3910686365dbda704f060636919358560703f6d81917cd582635780cb668584653eac90d6177a9123eef67f3ff8d0c2b6074a47441fe7049812176471305db133265dff5af35f93ceebe2d59e6df581ee3503dc113d71f653ca5089a15a3d254d77a14a1943a112540ba53d1fd2609dc24afb5eabce77fc2118ddb6ea6714c5f57502c78e555e8e06adf9af35c4b117dc09310c43f0ae607bc482f96731138b48be0736ab239741c63cd24a0093c3c723ccdd6ad8c20d3c9abadf12fe791cdc8a5c341fa9a51516c60b772b3f63f2a0897e2b85f56df60f97d13915303fd3130b2230be63b998c3b2ca0c9c032b1be5ebb9d312f329ee4b5415d516992c7992911a448eb6c154c20e28ddd15cfce1a7f05d864f3a3b80849f7ac4733088bd5c898a797571636617b4d95670a9f24f6863d6ae4bc60e8c6866b93aa0ba1d52688327c488e1e0782077cd6d0d988e5b580e3c23268f0d72b08855849dc911d4c308a62b3dc41d2b5abf76f48729c13d0310d2dda30bbd826a6b44c4192aab44c16a8773558a61976167ff27a7eb77a3e14be7c0fe0d32338e27b30a2541ed80a99d3aaeaf5ac604d3e2000d7a2e2a80ed2b01e85401341ef12304380b3d884aef85713719cb2268249934ab8839c1558a40f3b82deb80c5aaf3428dbc3bd488c826f055ec00a3b52ca908fb708931f05fc60586a58a3a76dee813e7824f0f3ae66d10b8cdbc9fce6cb6446cdc8fd75b95cc671e7fd3447b8838b9b7a9b7de5a401c985923d65f99220007bed209ff9fee3ea66e559b41d9a50c5aadc07c0cb3b0ac06a3f556910c9e632eac881049adc8bc306777a514535da874d3f2147fc4e62a7df91fb8f3b175001ae01081aa70368101b585e5a12a9064e4c23d641a4f99c843645a2baee22be65dcb3b51ab6f9e0fd284c24677fc60d4af20725139409991a92e600dc0549000bc310ea727891b489bb8368890b3544fc3cf23093c6b36cbc232f12e31e16e10d10174a2a7e206248abf93a1bc8d158204816ad0e08c5d0cbbc06be7407f0181e061ac206ffbcbbc43979ca2fc9d9125d11a50894717ee5449946f9a3f557ece6c6491d757afae6501ebecd964524d425689701a05266f22e5d3704c7c7d61e1cb6e2474d47e6adb0444a165532b0884cf47f2bb83b54154c094237bf62e3dcb148c27d6f9e8299ecffcc4aa77266fa63e87dce6772ca88c8fb2c307dbddda71e35830c81d8f364031776e73d3c2c2f47fb7e8dc9e34ecebe600998fbde7960255bbd1020280c92c8bf0db4dccecd33f56b3ff5cdcf3e8dda8bc251b0e27bfc2dfc4a944b0d91a11e83f68f4d31ec33daa62f613400413cfeb285304ca6c8069a0f9b2184f5727c21ac8149aaf2b640e69b052798f8cad6e262d0340199ff633ed0b22263821ef4560e2f4f31040a0f2aebfb76177e307726b2c5c8c481718bc9595e33d64eaa65776db16921f9a22dbe91356f458c7959b73c6611cc7afdfcad561a1fcf6b402f2ddafb997cb9c5dd73a0524be63985bfbfd561da053560149df2eeae7b806e994cf784c5fd3c4949aaeb75c39ee542841e8ab3717aee90bd68cdfab8d928aba580bf1f49c5292163fb40201d30623c8a153b4a6107ad68bd753e86376041d29963985181eea5eb3c3808ed08ff0744da4110af8767be8b162f399e406f0b29e1fbf9c4fb999f662b7d7440a2a591e32bd60406523d38467688cd4df8f68b41f5caf70cd35a3a2fd0ad4afed74b3b5c76032723a835c24a4a786318fe4f97f66337f25d509f60f4890a90f2189a9aebafff42bae8d24fd4e4b81d734a69849847e95f656dc3b4bbe6b33869832168e71bc4385f71c39594e6787f16da434dc7b44a33a09d2260b1ecda9e1c1ed994173484511d783ff70bc9ce20deb7c4e431ccc821334c4c08227097cc7edf71b8878ba52c2aeee7dda86db1b7b259f02a301accfa9e4beb79932ed508d245a8307fcfec91d9786164c1d8195529bc6f2991f6a2772d08c1946603d3bf66e863f0a7af98c2b5afff55664c7c2e9547ff553f2a3903ec28da8445a997fed8441c13dc814b3184d98a548a1ab9462d8504334fcae08fa8977843223abbe78dfcd8f07ccdd9ae9271b5874070473321430e4a2cb2701692c47be1759fe39d0647771185158f1d4ad2a9b6875098428b3570977078982da613c1aea23656e38760ef79c3a1a7755611309c9b7c95304c0917d17633e6446ee875eeb9ecb2d4a34165e05faa8e288df72d6e03677f0c5e0f0a2d8f704bb8c744d3085af9c9db879e96ce2df800993858b4411da0048d0eeef8e04048492f2d3c12ea010e0eab61d1abe294869c956f0168be469e1ee7aa9e22be062c8f5553cd1c3f17805ad422a1a4ca51423e0b5058e1cea4cd0cada8ce04ee99704dcae39b26aa8bf4260187696242908b5e304dd524a29a55ea9f72337578a7cca594f80c7e3a3157064dbe8b4d4942ec00b8bbec239b12de29e6543dbe815c1d969ba91cef84a984123f816f37e6c8a08857b57921c7942c0b75a7a2b509e8013a1e32193f211f45f44e661aa9407208c0f6992f50ed5e243ea0a25f8f22bc0406e3aa95b4698d014a9256a1d0d9b8d706503dfc20332a6dfe37a9373b153691d124de25e62519da9902dd971fe6e283b41cd62444a4610aad0e43472d18ef0f93b008f559ed9b4811916ac8b0ec4cc436d6fd4448fad9e11d4a5062de35a714d066b499a309cfe1c3950a34539315e5b5511504ccc3a75026e9c841fc111799e48556ee55cd46382d3f13d10bbba05d9989224854fca0d4f0bc1f32041caccb67c8665f60140c60cc4edfd92db0c27a59d2c7c89d7048a006ed3bf9718e8377ab5735edf71458f7f6896e4cf9bed4ae806cd3eaf1f0c0d5f0ee929af1fb45c8f7d3512f5065ad0ff00b5c1b041b9073db478eb06741f1316630f72baea7a4e244638c5bb022bbc2dedfe87df102051ae044fd822cc39511029f855c3652a4af19f9cb574c763e4535f16b7022c7383008a6cefcf7f7df90fc7820b1bd6a8119d6adbd74b93580fc67e4b0305a76a59b1edd4db47f22fcbfeced0eb95b94141b5a018a881907b886dd3c9bf64afe5084ff8630e187d401a1e19d517dee3f3155fe0c12618e0cc01766368a4023b3609185b9040c87158d0d7ebd95c22429c99b7218f53a98abef7ca5a128de1260ff4855255e3a41e30ce8811400b481ba288e24cfc731d2c70eed5c62a788b3acf133fb3121650aaacf8c60410e7e97313528de2ea656e5ff6380af69c06094ce689eb113e327c22ad284ab7c9be7823735d10d90823efc244091bd15723f01b8dd89d5e786de2677888a9ef65b829c56a8a084a8c1a379bc0d4e7b9cf3c66c51344444c5ef453b07f076769a91829c7ac0a8ca61678313500266c133fd37805fca0ed0f46e1709463ceec1df12626b9f82e7e2814313d1d6b28f33ece90702bf7bdba426a4e8a8444d4a239be290c9fe97aba84f3f40dd91d251a76428cafa2371764ed71f978e393eae0343afbd4eaebc85aa7dd3823bf46f3d264aa983fcbd55e0bf099b36082fd61d81eae3b6d720808642260f31a4f9f3e7192f08cbf35bf4259534f4166fdf1d9772640e7114415052379eb0f000be0b7278f77500b994a443e8ace4fabd76cb9e75948a5e81e1c0e179cc1e59ededde672743a8d0e1e655c74f6a35041c2ed9c1ac14ce4aec16ac183afb524e47abcea06e7b586e2510005dae21b3c8c1eb254b3e37125abe3dac633aca3565dee2b3d02de0889394d294a85a49582156a19555029878a664451652b7a68d9252fce1ba36822e53a0b8e942ccb447d0e1780131955be45c74f1428513c1a657e72e9e98ddcf10c2cb62b2fd8ca1ec8855dc2788d68c9d87439bb1068b8df0847deb7f2fd874e534e4861af7f51d1eebd65b66b04151880b5e26a0c385ad7839c63bd47f500a5955955292d8ef063bd2835875ec8ea4a419b67838173d758df830ea5d56143a4b4c7d215ea4e7e61314195c52ca30dd5de8e92ca0bfbffe919060d76bd3f54385fd9c83cc25ef5ccbd3788ae2f7b2bd787377c82aa48e039c0b0142888389f25001476bf7b18b43e9cf3244754be8b25c2f62f97088e5bae04db51a6f8d61eba8a825cc74ffa1532c9ff6c372689afe82ff053c01fc41e4958853877dc2dd4a0fc41241c939c294dd4d436a6886bd46e6c0f189f7456f608a0e34cfe51d967a71acb09eab8957a23532d097fd88e36f17f6818f1e85b6265bca1c2a082abe98d19443e06e0152afb550c327c760771f7bf84958009ecf3a3c762bb9a266511584e325b905739df9bc4531931681c258e51320e032b40187cfa1f4614b9b130cd48a6cfcd14baf041b86d96520dc85ef9f713a3217b9fa0319f8720fa3e0dddd7b5286f37d0a29384d5118b81cb5c3260b3b290fa06b6ebc4188f39e4ff58e678c7b0b434cd5ad3401851b30a1bc3de2af25f8b22c9a263d0c836e406b79ae886c246a167c51a08415f6311d3835723bed833f07f1ef365a5824d39789080ff281d53e234cb6e0c95c5e0c2aaee763d5b7ea6f844fe528f01377c8c13446105895811bcbae64aad6014157c118be59421069ce44b8e3901bd8cc2a4dc55798a419b906f1207bbf37fd6d8d925ea68b1f8619f24ac05995528b42f21ff4aaa0f95c5d3bd178ec9ff070a549f8cf8c05eb4405d8659ed15c13146503cf75d21807a528b6014905d0fd63acb69b0e08924d5f992c877c8a2dba30eebc28c47e4c647e4934b72811e081c006176eb1e26b8ff8192c48f65df17b31c5c2f59039b1ba99e786c80df55d83ab029cc775915cbd9ae1b7ebf523aad850b179e4fcbccd59b0b9ef6a95c7fe52d5ba644a3da299efd1324e28390e7ab6bfd5088bc501610207554807b7291daa13303669d74723182505b9ea13aad26002ec0144cd41ee01abf1c988c23c6676c338da39c477b78b254703d9c5477ff1df94e5f1320426315997db9f669800a9b12143a0b279e57442c2c26af04746868aed63c6649416a8694d7100a9e06a0d84dc2ed93c96c92d271c900e203c491cf8c69e588c7c1047fce8e91e83f4d1f221d9ef3ac9fae688bd62c95dc4af8b858fb37b28cd188d8fc7f6c9dc516b8e3705888b1f6fcd911401d81b1750f5adf71afabaacf909ba404c21b7b36a8bc5ae4304fabe4c91aa4a4a2d6d76be532d81b6092bcfa54ab9a5be6ec8506c30200464fe193a649ed6d375aef49a8bc625a2d18ad96cae1754b8d32acd6b118c7b8101b0c07d6119fd9f54842ede6cd3b8803001ff154e3235ee4c469b6ef37d328409295346bcc0db1c56614c16d8b33d12dc9dbf87202dad139808266a964a56e88e215bfa3edc5c039162a3dbdc3c3a50383916b3475d548c9a1f62d632c14aa3c9f730332aacf9bbc7d22fe26f3cd78c5b0bf9cd7564bb2ac108690031f52c4aa484ec313b2283941cff5fa5c33d4439e9be0f1404846cb9b289b10208f5a56cf2576f56e733d3a3c0ec5ae1809f584e06a6a2cd004f9951d64ae0b4a2fae02db5c2e2004854b11490fb709977bfcfcccca412eb70a59a002f385c9e306d4ce82648fc70b52be3fc40ffd4041c6572bc63252926968ab7dcc9ff181361728ab1c70595a0382568c5534f0290c13c8c967284156e928e0561b342de895ac65188b0e22d9a6c0162ea6a76ef5223cc7b2f0378e28782ab5190c367d701e636f24ea50c115660a9bb5700e0a392e86a35e92eb5b1b44dae7803ee45f58eb41c61d0515e83619036d02d38cd9fcba973a5d33534f635626701cd0d6785501e9908bc7f68eb78fe6f428f445876f64d7ed4fedff39661ec8257590c4a2d79fdedda87c6b5cf826c02ecb1dbf18ac5503cb6b40f3495c651607df466c2ce4a9b1a426b55510b26b870efa62799c992678c16e51b497a62f983a6fd81c9c8de66e1e7f7176b477e21eeb17839b82c1dc2caac47730226f9ce878167e72139ee812b8595aa8270f7285a58c571098b12bdc5f4497a1cc21f4e6106c33586d90f9033e22eb637faa376a45ae56d6b49f2d902f47a5e7b966ac1f5ff5df0c2e65cd1ce859da1e43110ae212ffb6c07e89ac928ae54cf7d63f9c896281782ecf0172db95aefcf751517585d1f77210db73af9f510a25c3dd2aedba5c54afa670a60d5ac3eeb803603fe63042c5b10875ee15635b17e1f9f32209dac0edf3e4feb9683d47364259a995ee2c8a0d07d27bab104ca2804f7836d844df9e873c51e088325a80f3c9795d24d3c9a76376e29c3e2865954a21f7ee00d98e03fdb43c8348e0cd7c3bc41a00bb2b7990e4fe2cbac4211e1c9910a2b63a3c7891532d235ac14e26a8884acf676e41154d664a6f411df3bf0f9cea49c5b8775775a8f282ef5ac67e7f49d5a462a554b029bc306e3afce75e5b1a23f5dd89d3a18557c7b8c7a3268db3ef453e587c46464cc780d3e1534ae693cbdfc9847ff4e4418ffa4e4fddb3aa12848d3d7418b8abe916d2a0bdf1ad8e6503ad3e3f99fbc241e622db0bae15cd24ebed700b14a2ec019c0c1fe226395e3636ab6cd7c01420151b2a5f9eccb9a29dd58d2b739d1cdd29c3278f99be3e4f8aa03bb3870415d3bd6d9bad3ee6317bb401db40b53e9b56ddb35eb4c7410417817962d185a75e20f8a7fa8dc9e7fbce338c6a47ca8eceab1d9f91b2f6d34e6a2fc98b3b42b61f9389bc4619fb880adf1cec5162aa3757caf3a0f3030508ad547dcd8138befd3a27b5a89811f89c7b85668aed6cfb96e375c021ec67a685c857bfecbe7125c1633e671c6339ec05b3bf71efd09d74a336c593d8bf545932817f50f7580223ecaf4d56b32f22880223fde2973ced7f8a1f1b0dca6e8ff367df857c9aa732dd40a8837fc38140a1868bc80bb59c8b36e13b63f8684e13c0a5f7367e0ac79c80168483e59b7c7b4def84122b995cd236f3088df8711c4d07402c7f4a15102617cc8c0cea35e65f8a9405717d752a9e08a715ef4e0de1c7b7cd8abdbab9cecb1b3d040ab5be9db94bf9a87a905b9e5fecca69c27eee1877a028db9538ca9b4dd424951405a7e1c3995072edeb967c2e250c410b9124a6b49848ed64adcd3117e8126acf6b7d95621b8e348909a3e88fc9daaf8b91c0c9d48093a5c13a395a82d8d12d1304c0f70990e364144954d8a2690a78667be0a0e9ee896f360c9c7a95a41f591788ecf42f4548ac12b03b8c5288a06143d1cfb5ac597c5be52023851ac2ec6f4934b4486dd8aa11f4437e90dc3e1883da5a6af8418e4ed02da74568161605455510728345b1dec71c16b493e0960688744a51e7d1361329395a2a3303e0d7a1b61d50156105381c3a5d43f94f31130aef5d762e8b75fd2244d9ab66dc318e456919881a9e2c9c2a139bc8996cbcdfc5e0f126c5b92b64bc8de5b2629a50c7c077a075908b844621a518340564a9d52a7d6e6eeeeee4e7df44da15fb8d43de38b9f855d851aefed01a5145755aab4223535d61ed051252262ab0a8f44d02f3f151ec10eaec627c3bba29452ea18c438c4a00d492a09fc26987ed84194ca49f0e2510f7c5c9190b8b6621004e9a824a42c941c19b1222151c23a8d1829a6e20a830ede48ee15ff8a24706aac24eb664ff162f1c57b2fe85404c1301c39588bd16d83bea67bc5d55887ac467a2b097af1884b8252ea231854516ba33455c2456819433d699e4ca5f1a334b23e8cb288a410e6978641acf2ade0d8489d65bcee1508b6829756da6a04092e610c928c2430c6382472f77bf1e8de7b1d9b388f288d8f2524464a30a8c22952a485c112d7a21185f193d83c9d8c39bcf7de90621ad2cfa693121e5f978a9884c73a64348694528a55ee8a8d55164aa92c83f813630270f560c5a5317e4a59dce6b75aedd7ef83e075968bedac629adf3024c9d5ea4dc0ebef625f2aaed10a5341ba639b028da846802208e29231c5122951d25575377177f7943da9fb257d44999094ded3a6f4a9ff0bd46d7eadae56d3c7e16f4a317540d5e18794524ac35f892ebcf63b1a993658df91a97412c6f228be482823323c4198dfef16b3270631c64e73d993febdb5d64bdf524a2b65b9bf43bf347bd2baab766a6563adb5e23ab3277ebf54a4a5445424d6784bd810537a6faed471686e535feaa31223b5b6bb5afd9f272dc64cbfe0bed2945a1b252fac0eb95f7f40d6c77435566ac3d635c136e871c5d71cab0fc8fa3da09bf699f88f5e4193b2dccf2108826008861734fd5af7d39ef8de7bc16a12bece3af63f09ede997de8a6de869fa5e879024d0353fbabbbbbb39d62128a5945230db4a9fb284e0eada93eaf2eb62be77e5ee3ef22087a18a5363457508592b09c8fad92f0c74ecd83106b7e5e90bd297759d585beb8c7e45196989d2578986e61acba3c910c5567aaf6b1c8dd4da2ebd947a9832a280e2b96b5629251afab50424cddf39d61db8bb3bcc55ee4a1882eeeed89eb4b28c97d65bb3cbb60d3ad75befcb7592cd37699578996aa88eef0d42dc7b2dfdc182effb4c72b9dced76abd56a341a2d168b9de7e972b930c629582cd66ab54aa552ee4e2dced6aaab8cb596662b5ab75fadd75add5ab7d6adb56fdfbab536d33aa3ef37e3e876bcf7d621aca03a39be3dad8b96aae9562b66b068d8d35a04c8e0b2d99d357a311c72683af0d478f8dc80ec695520644f5b85b0a71dd13a44154551144551ac660dfd5144547ffc18e5a88f067f539f1a1215e980080f417f1015f120853e399b6f4888fa501f1c53e6723a7c0cb3f9b0d0500e8444213ea1a19d8f2777cb0501e572a3daed96cb0105e100480539a0a01c723adc6ab71f9fdb0dc76a1afc5dd3e1630bbbdd7c7e6ee0f3e3e6f3d3bbe1d468b51e9e5a6d44a3e9f047d8acd5787a6cc0c3a3c6d3536bd42e408bd17672441acd15d3e0ef980e1f83345ace8e901c1d68393b34d0663e10c6ce184e4f8cc55ce7894d30269abb26d6c3a9410f87580fa72636c4e93a2bafeece93540a4396cb65324be679d69d3d79437557e3acbbca73e11c72bd8b06195cae714ca558ac7f974b061a684064e39281061aae990fb4e0593698012efcb3583618bbc08019082100bbc00017588740ac156b85192c562ab55ab15833569001100dd68c1572ac990f842206410c820e6210c420086210c420e82008a61cbb8fee8fddb13ba06a5b65dc6d2c76c7ee23767777cf3bfc51cdca850e5c6dd7e11e7598d261e83f7a1c3e18ea5c0841864f57ac34b68ddebe8b110daf663e10de6a52644dea464ba5c691245329da2d06b45a8a7673a5663e1093811c2b0c483a1a8d46a3d16864e3e793e4f65183363efa3388175dd626e619fc4fd7a1b9b2718dbf0134db682c5a9cad55d72a6347200c48faa317dde6d7568b1345510cb76b30ac19b5bb3fb5e4a8c37773d73dea5087e1835e336afc21265742247eaa378953318c7af4f6c9958fc651d6213d25e51ac6990f60915a5b759bbb67d16d7eadae3b0cc3f0a903aab6a39b3656872fded1c3d07318869986216873c3f0434dffcb21b85d83ef26bd60f8e06373e3ff6cf88219aec61f82a0e9d5a686d4ee42af16a891b3ae7f5735ab40b44f2baed66d6a8ad28e037f674d63665c58c5d166dc988f34e68aab2fc385555ccd3191a64961786a19627506edc26ccd22d4996924654a59a80d53db0c5b5371d5bf525b03fe046aabd1d3da5a6ca80c4d066bbb7f63e0ff6ecc0c112aaea6ceec9bf25e8d7993f907f3d2b3fe8c9a8abb6f5f861b136690c22e507137533aab6f1f0868a5adad94a8fe29575c2f2003ff97c36b5a4d2baee4c5dd60a67536fbfecb619db1a83d6bc377431f315b13d3f52d4d4c0522756dcba39d873dab6823eb8e3deb0e5f0eb91cdcbbd5a8f146d0402b22ac8911912e9c4294345c41a20b7bd6143fa872f6acd707a4ad6a2757ea24adec5959a83a5a3296a2b16334d3dc6b92f6146d2d3d754a5e58096b529249b5a8a25a2c4daac5d0a45a1c61522d8a98548b54a772ee4839f263c464badfdde45efd3e412a74fa7dd3a1fe94f70dcc9ba6cafb24e5fda57c75176592e4c81e74fd1e1e269f8d5cbd088ef8cb2727d4e7246712f37fd372e6676a61abdbc7b343ddc97d630ee768b747bdfebb9c111c39d8f365c3c5e3dde8f54e70641c9c1c3939afc3646767078f3d7dab47899e1e1f3e279fd309489dd9fff93905a93320a0530bccd229e814f43277a983b6ef3277d9016dff24bf49ab04d526245fd638ad485619863cad4ea751490c540c2c543e09f1a59390898409c34ad7ac4e4227259a1255a24e27142af5fbd3a6a71557f29ba44d247e8fda446a93e9bde2546ffa54c5996fcabb66a5515fbe88324b5eb9ab1a659a272143a7216d5f952ac961b53a0df977954e4427a21311a7a25391c90dadddce068fa74bdc60f57a38ea8c247374d4d9ce0ec9c35522797856e626dfdc650e6ddfa45582a533eacb1aa612556618d2549a4cabd39bde9463589d32d903d9a333fa11260c295d93d22394128dc849e464ca25cfda4e6f9f561bc9ef6ff59ba4efa8ef7daf38127f9facb892bf79d7a4f4e9455e3c9925cf2c77559f74b6c4247df8f89438d4997d12b3cc403d71d499fd112820233f3f4180eeab9e561c09442a2828082152e89242eaccfed01039a4ce884822b2889412594416a1ccde2e39b04b7393f42e7bdafec9f43afb2ac508bfac71df8a9c4444eae8eba8248629869429a36a94503b9d5d0d0bb30f2bd1944c25b3dc99c65cf2def46e63486ffab1e244de944b2f5eb3e495bb72775136ea8cc72b9f561cea06aad7c38153e25071a6b75f66a0e25039eacc7e4e8e8e3adbd941f15029a178784a739738bbc4a1eddfb314c3f4e5ceda4a35acedf24c2653b61967f031a37ab0a78d8d363256a289956862a32dd1a07a74484f9a308cba66d43db2128d388aa3e9f7a77d2cbd7f587127511442f9f0f14101f94105010242b52028682c71b0b69eb5897614dd6b0ca310b2b1ec89b3f196685042423aa317eb09decf90509032b5335c5d0203bf3f7ecf2fe0a7bac485f65c02c3068ddf068d6dee28973858987df1334b5ce2589b9738fe5e71e17bde36b7c4b167afece180125267431418420d514211d9d33e91f770b0361cecfae69218f7665411285b03555402cd6aa836b86ab0368060dd400a2c1d2995a12e6e4cfdb1e78da9218dc780dfb4a8ee7ec2bceb0e2a107efce69daf9577636a0d288cd61d68fb79572068fb79db090c5116fb1504b6876f8eae5f7b2426a228675777a885647000d9f1d985a6120401d2db857a676d7425053f7001cf6ee63e0d2285425d6b09a401217633f52bd0c5b9b0fa9e7725aa4576c7ebf57084863625d2bbfe1455de8559205d5b5c6d33f5f19183be7e7174bd3d5df7e5ddf0c6d49fcbeb5d9c1b8333c10e9f99f3ebcdc138544d5d143fec97524ba9a5311fb6a7eb965a7badafe00a31fa46dfbd231f4ddf7e29eddf77f3b616d0b47e3cff6a0e455405767fef3f1a7ddfe8de6f341a3db5a71dbdff17fee7230fef5bc74eba519d847d81560b8862a594524a29c5380576ff248031c618639c22a6ddbfeffb3ea1fb7de087af9bbff1e36b03aea1da92074490c4eef6da7b690cf834dffb36bcef9f0da85b506d622dd6d19aae453b5af36aab4517f1682965b19eefbdd46d20bebd37bf40ddaffb75bfd729ce5eef1022756dd2fd56227b528c31c64fd3df7ff8fbfee6fb3dbebff1838e3fec0272d334bd8148473bc8bd5ab1ce18ad067963f035bf1f992fee7f262f9cc1ef668d0adc66f0f3c2197f90823a1e6e19f417de187ffbe48db1efe6884447948ec2ef5f3468bef065528bd56d7eadbd945e4a1d50f5a5d74fb04369a069d6293181cee09700f59981803f04f05bdfed6aa9843ed534ea6e37e34f4b2534cfc0996a1ad487662f4681283a9912f17b2f754afd64310f443a0a01697ff8c1aee88c6be20fcd179517cedc6f64d24fe7829b068d6fcccd945299510ec3176cacc62fa23ff3059c67b8da9f628a751c534a6dacd6b93ffc10a46d9afef0430e7d4b3252b4671d08dcb7251abedbd5128dbaa3417d666eaed77b200a40fb5f73bbf405c3a78f71188680bc5fe30a2f597b44b7f9b5d429754addde17af536bffe66bad0ef1bbe175afd8bf6a4720babd6f62ce08411004431c5af0528c575fef3d2f8cde4b3146a9d73106491c82d6c11bbb2188316501b17fd831f6afca507cc137c12006c3f1e210fcf0e8e517833774128336c41fc5d885f17d1b99fde6d19e78653f5cfdc431f6ef5ef0de6bc33ac220fd32bee1fdc0211f1e39e9525b8794e86a647eee7ea9dbfc7a2d76c11074e1ee2e8eb5d8bee53a136d087ea0f8a2bbad33f1eb0da93fe842eb0a821fbec928ded11d8562188e791486231053a7bec2f49ada5fbcf78ee0b535d7993f35f719d3f7de8b478ba37eefbde1bdf7562f5d933db95ff192b75a5befad600bd72665711104c151054795d65a51a00918e211f52bba9eb5f24bdfbadfd24ae6664f5d7cc9eaee2048bfd6a86888c8fdae706114bc2148ba97c46ec55aba25ee25857e432c82e375f7fb95aebb5f6c02efbda05fbfeed4efc57e5338df6b6bb6751682a0289a777447161586b796a7bbfbbdf77a78e965dd1b8aa3a594526aa294527a3249254a2935418c31ce181c85a7983dc10f5531c6d8e94de9ee75ab1af9eb8ec9151d31968ca3a964328da78b2fc6228d24a1c62a04b2fe1d32226f2538e486187b1d824130f5d9e8c53ee2928cb4d4427ccfdba5c36b5fa00fbeceea4086d9627004662a9a9bbeff8afec0b616712211b7181b4ceda5e575d65d64a78b2cc39032d929cb369f3e73498c9619be967c8b285aa19930e4744d8e45c6225b5991e55db5eced0abf3f157e9352f83dd2f84d9ef0bb34e1f74809bf57337eb348f8dd1ae17796f1db25c2ef539f4fab2dc66f150de3b7ecc56f1a0abf6bfa7c6a6d317fbe571c0b7ffeade200f067de35392d7b96176566c96331cb5dd532d9eb2c004cbf61c7c20a2aa440e304134a9841c208324488e1030a26b5a78b8b0d173cde8d5eaf058e191c9c1c39392c74d0ececece0e159d143454f8f0f1f1f1c10fdf3130408480608134141410809e984a4181af2214ee444289c88133f2a799117ddb0dbe56cdc78bc1bbd9e0d070c0e4e8e9c9c9a8e979d9d1d3ce7b7f4a0f5f4f8c027fef9c1414a180848db2f7b31239949b58bb96b2ecc5d9640db6f31c38266858a9631a14b81e244ee662b470ee09034cdcaeb2c28fbb2c6c92263c930e4c9729eb9953fffcc31e4563216020bbd62260c375d73135259515939cf95bcab5e796bc2efaf84dfa419bf47127e9323fc2e65fc1e11e1f72ac66f168cdfad17bfb38bdfae16bf4ffd7a5a6d33bf55348bdf329adf34fd7a6a6db47fbd57dc09fffa5ac5d1f857de3537bdf22a2fae9825cfeeaa5e59799da561622143279850c20c12469021420c182f5cb430cb9e3ab33f63963deae903b5672c8687acf8b184893011260217a9b801b7dbd9e0f1f40d995e0f070ece97232747c7ceceb78387a7474fcfe7c3c707c8cfcf1704080888a0a02f082121214343df90b1f4117d441f115fd157e47243cb6e6783c77bbdec064baf87037c812f13d451673b3b200f1e9027666eda0a73973eb47d15e62e7b9069739f7a973d1513ba14284ee46e313698da8b4b8b8c65e57c9d25ad7c59e3a5b2a29261c897caeb753bfff5af1cc3edcc600f604f869930d4744dcd54a2493953ced7eb3c5ffcfe5cfc26b5f83dea99dfa4ce2c7e973ad3fc1ed179c5ef95ce2a7eb374c6fd6ee9ac7f679d657ebb743e75ceef1507e3f3d32a2ec6e7bc6b6afafc94174fb3e4edaa3ecfd7d91826e8c3c707c60b172d6658d0ac5081d3322680e87e7e820001a500024550501042422784e48686c0217566898840224e25b0082cba61b7b3d980e1f16ef47a351c2f38383972725c74b4ececece0e1a1f590f5f4f8f0f1610112fbf90902b402844a505010610e8786c221754614128545844561910973973decd2076d3f058a13b95b8c0da6f6e2d24293b1c45654ced7eb6ce9fcb2464e3953320c995372aebd3e7fce31d45e795463a4337b1413069aaea1cd463b6d7fe67ab95e3997bcaa5f6f697e7f2b7e9354fc1e71bfc96ad3bf4b99df23267eaf74eb69c5e97eb374aba55b59b75c33bf4fdd7a6a6d29df7aaf3816dffa58c5b5f856de3534fd7ad78b2fb3e4edaa7ebd5e675b98231b3c16342b54e0b48c891d78d83163527ba2a0dcc8f57a3870706e3962727274ececd876c0f0f0f4e8e9a9f978f1f101f2f3e3320ad2f265690434021a01310a1a05d14641080909191a1a0d294b23a211d1888851d1a868e50695ddce068fd77ad88db3d7c3416a917272483aea6c6787c483c443e24131f7993377d943dbbfc5d8606aad55a9a3d461a43772008744b5ce92af2f6bb45c2f5786215bae568b96bff5ad1c032d6712a94767f627260c315d139b9166a912cde7cfad56cebbeafc36c5ef0fc56fd289df63ee3779fb5dc6fc1eb1fd5ee1607eb36cb5dfad8a7bf99d5d7ebbb4f9e67bc5e9defcb3e2f49bf9ffc5bcab3ae7d7596d927cf8d8d7a5407122778bb1c198e50e66c9433dedbf98e50e93daf3e40408eee7270810900c102682828210122209191a220d211191884844a84aa42252d10dbb5dccc60a8f77a3d753c101c3c1c9919373ea48d9d9d9c1c3a3cd47e9f1eae9f1219ae2cf8f18a4ce8080c416a84a62901874626e17cedca508b47d1913e6ce2d65afc5125b51819d2928afdc7a9d15c9316d7efe0c439a6f9ab1d69b6fe61862ad2c0a912a89422a13138653d79ca2d088120dabc56a9966ab45fbfdc97e93ac8de5f7187b5a6d2bbf4badf27b44ab565a35fbcdd2aa57bd575ccbabde55712eaf6a3debc59659f25866b9abbad57a9d7531452143e2d00e1666bf85266389ada8c06ee290985f954422914824422c128b6c37c0ec763678bcda8d975e0f070ece9923252747c7ce0eca8e170f4f8f9e1e978f131f1f203f3fdae6a715370679202020ea6c548d42a3d028a4ce86c6a171885569241a896ee62e79b4fd1873973bb47d1b4cede54c4179b94ef2b7ccd7d991d6973554ac162bc3902a964a759aaf7a558ee134f358c458a433fb12260c2e5de3d23312259a1173c454a94c33e5f787f29ba449464df2b4e25cbf494d526a92114db2d224b0df2c4d52e249ce27f9afb8d893e45de3d2e68fbc68eeaa36cdd7d99859ba6177a6a0bc7272740066527bb258366a3cde8d5eef05870b0e4e8e9c9c161db49d9d1d3c3cb21e2c3d3d3e7c7c5680a8fcfc04012a01919480680505055122290d0d9586d4195189a8544449a954542a62999b553377c983b6ffe2d24293b1aca898b4a82631bfac4132628e64189264848424ebcc66b90697ea499e24c7e05265538d92496757a24453a22a519190a85427bfbffc9ba451bf4793a7d5d6fa5dea12bf4758bf571af5a8f78a733dea5915f77a54c98baa12b3dc55ad52bdcebe4c930d9e89a7edbb4e720eb6cc31cb1cf5b45fc22c3b5067e7c8c80d59af8703078725472c2747c7cececa0e151e9e1e3d3d301fa78f0f909f1f6d3f25080a10101041a620944948c824a4ce864cd33444ab642232118d987b253377a943db6789997b6445c5dca5dee59982a25295a0542519862c294195641bac51b92406c9a31e9567c024d954448992a9e894326160e91a96a9e84b342b9215090a4542f2e9d3d38a53fd26e9d378fad37bc5997ffa55c5b1fe94770d4b93fcea4512b3e4d95dd52424afb32cf374431a9b545f93d6fb96470fd4c7da7c3b3c399bcb41879bbdf5706ab6a66b5c80666b6834d8b3c66cac6688f37461c855e3a2d182b736d8853debb74a69720cad05c89b31035634d8c8405bdd6a5234d8b8523119481af45dd9f8db8cf8add5ddb1664cd1600192d6d97deba1db183a33aaad217c1863c7fe5dbf218d5f4b3463c944dd4110b542bdbd77046bc45b92a424de8ea85c2a975ead4a9c25de8a883c8b9569f9ad89c9abf67a7b7272deceb7282874e5adcf666f59dea585f1641a956009ea928c20498c84aa55ab8488c972659394d789ca89b2e23316994b0b2db8bce8d2d2f2f282800318a0002e106000026865d7a922a3d56c32390d8325e0610a78d8cbbbbcf8e2f2f2f23aab809b0420e0000628800b0418c00e3cece0d1d3c3079f1f250042ed79e2c40dec067603bb81ddc06e6037b01bd80dec06c6e206a66f6037b019195d0a14395cedf662527d02c60b172d58689a152a6664742652a0c8e1626c3035988b4b8621612e3058d669a18596873dac4567f6e28c85a5a525003000c05880d180ad00530196020c05d80930136025c066c048808d00930193c1700f13c0c306f0b0969fbdd8326b69799d1dc08d4c000100000b3456502105144e30a18419248c2083859e91d1dd626c30b51bd8cd8bcb0dec067603bbc1b5b0d03332ba1b59d65e5c5866b05986216733d82cdb7c1a964b62b03cec6179864f3b8b4cb60283b1b0a890020a279850c20c12469021420c182f5cd0f015de597867f99517595658585e6759584185145038c18412669030820c1162c0f0c187dab3a5050b4db342c58c8cee9602c5891c2ec66576e3377ee337351693ea96162c34cd0a1533323a13b714284ee4703136981717da0c965b5959c9c172da613ab2f3c5130505062bc16738093e82cb70113c86c3f017eec25b380bd74ee32b7cf66ec2fb09efb03f5f849d30d8ebec093726943083841164881003c60b172d58681fa83d5754ccc8e84cdcf80d2d365b51213b5552a03891c3c5d8606a2f2e2d349618caed849de70de5a61d4547f62ab293131414172d58e819199debf417ef30de51fef522ca0b05e57516c68dec858b162c34cd0a153bf05077f0b8a5407122073b6f29509cc8e1626c30b5179716da8c25b6a2023ba9bd505eafda494dfb898eec53f28bd9c4e4e464858a19199d895b0a142772da69de59bc9f7c7ef1249f9cbcceb2a059a162464667e2b6030f3b78586acf17eec66f5c5a68b31494172ec606537b7169a1cd58622b2ab033c584964f72a699d0b49be8c8de253e8b656282e2440e176383f9bdaabdfc6eb9fcceda3dc5bbeeddc4c4c4e47556779302c5891c2ec606b3439df150cb1d26b5679631718bada8c04ed749963171a3b5622b2ab03305e5e562c5dee43fc68a6967e9c8de2cf162091111166be62c1ef3155771989f2e73a7bdb7bcb3bec48bac122cd6eb6ccb8d8c366389ada8c076626c30b51797149497eb249b313698da8b4b0acacb7592cd17394bb04a9490c5706a17d1917d4bf6350532d58baad54a4404c55feef213cf6eba9fee29ef2bef22af7a514425b2729382f2729d64f37c7169a1cd5862301e663093d6caa51251a964b25c836be5d2be1a317548bc4862b51a19c96ebabbbbfbc9bbeb7de449bc38426264e475d67573924d111196d88a0aec4c4179a94458622b2ab03305e5b5da591b891a546b1219861c2131926df06a459a3ae18817478c8c90644a8484fbbb933fe245720449de84aa940809d7493657ae936cbe49abc4086b043962046b84a57d247c921045922448c81122ef9faa38d57b46bd7851aa1b111224398c8cdcf8cd8891560916b942a1502b72a59dd409bf24fc9a82b00441db8aa47d4491bc3f597124def32e5fbc25891b92d508b3c441aa6efcc63f25e2ee28529512712fdd6b488129ed604dc1e85e77d383a307cb07ddcb9b118abc016fc01bf0c68422419e57d0b55f31d7d19f6a0a502c251ab1048e26d34de966bc41b5202808044130eb8c46250e56271c8dc25aa2f940f006fbe7b8a6e0032b067688b4e26e15ab39838d210e61087a4b60b7d3363b00bb3b0957bfb03b5d1d80df26d4d7298b97be8a69a905fef0bdf17ddf3d2ff6cfefbdf8f3b709f5c59ffb0f25d0574b3435251ab7634ae4edbd2b6b32b1566f4fa792b728d7884b93909cacb72a55ecdf9a26cdf5b6d5aaa5d474ce3795b7afb795e5edcadb12cdca8b650d7bda48d9dbdad3190903fda16be80ffdbbf67047f2776ac5726de35a87f77f4bdb2df703f59bfe80b50dd63abc570115a24298fca6449b16b57ed322507ed71abc0ba8fcae3d1c62bf2b0ecbcaefaa83ec77dda93de0d336dfae3c2d1605017ed71e02b4b4bcbc240001073040015c686100bf59fa6c65d7a922a3d56c32b91214f0e7eb2a6e017f66976f69d1c1024c4b159000041cc0000570a1851d78d8c1a3a7870f3e3f4a0084da13068634e3bd1486254992406284f7d26a95ff653cad38953ab32fc27be93c5d68b418efa5db6d46e7f3c24b2e7e4c980104002fad10640017a8d0f61203861c20035104bc44c30dbb1dce86e6f16ef47a32384ce0e0e4c8c9d1e948b1b3b3838707458f133d3d3e7c7c72406e3f3f41802a500c10b6a0a02084aa501532345487d4195109662dc24bb5a816c1983b37c3dce509b47d124630b78c0c11cc6d8b01e3858b16332c6856a8c0691913ba14284ee46e31b697d7595ba3c5a5a5850004c835d01f2ff4c74bc9d64c9dd98e46e62273696971711140000080020b2ba890028d134c2861060923c818c09f9fabb816feccdbe6d32e2f7bd1c52c79e5ae6a1797d7d9164c6b8367793f04100000a0c0c20a2aa44063070fdbd3a3fae0634f116ec4e8f570e0e0c0c8f1222747c7ce8e8b1d2d78787af4f4ccf860e1e303e4e78726c80a202020828254048113121252677668e8b44388882c11b6c8c40dbaddce068f97e2068a5e0f070ece891cb99c1c1d3b3bb71d313c3c3d7a7aae0f1f1f203f3f37c80b10101075161474831012ba42ea6c48867987b844442e26d5229831cc5d02d1f661bc70d1628605cd0a15382d63429702c5895ca3c7a854ab36c5bc638604000000200083190000c3601406b22c096288f514001a4f98745850218f92200a6214c520630c00000000000180194344441805b471ecc8c10e4a2ea8c23994d27f00f2ae7b253c2344a31561d42853003fbe5478ae983da92291d5df0cfce689bbd151301765d1101f56b795ae861567b34836595976e951ac282305d76196752cba6e94266ad2a75aa42a498003750a026fd845abc403089641a64cc48d4942d7f23cb017a33e0c7c25ae4ebe8c3b54a4d31cfc892ed1a01c4104db08819fec568cc96a1347f3ee4418be780b8ae978f05be748d4b6fea47c010ff01ec06df40335863b5c6e626b864381c32d79afb3d3c8abca34e4e76cae0572d3e334f74c40c33834c6f73214ceb6bb5c37eaf2d3510d3e8cd27469903eb3887b8d9222a753ead8724de8b06c88b4215c34bdea29309386434745265ec2764e33217c2762561c7aab48d0bcb14dd0699b520d4586514020fae119b16025bdae2e93957d15321be962057461125897f31e2b21c14b574283b951e792a30743ff80f9d427f9a5b1036a31d11018b56fcc61b83e0c8c61176c77b2134c37084628735a2f622229a6da603065639f16379fa4516b2f076303fbb4e6bc5587519d92c162ae3309c3fd87b58fbb128541cdc7d460d79785b14a7b8d381a717d1ceba5e909c3a0034e347c944bb2c6157f24979be40a87e1a07cb9978d8cdef93028148e3316e27a5b81e3288ab1b7c3be0700600000a2db09a0e0b1b1c1cf71be1493f56455ab0c662c70b274b87b942a8f587351ee8bb403e04f1a4575520356dbc6187e848486600f6b37b63bb2c1bb6ed3fa5ab9d79a0a670484335dec951ee956e1f3a297b098fcd0a0dcbc4fc2234c8fe2cd69aaee3dac3c4c4ef283f9b0181f5f17c2f7b0c0b3121a8dc68052caf0af71c8474442c1097c75076c6bf6e428379805642e42188a9002bc025475c6182f2de05f0084df17cede62b2642125403721d4c6ecde75fc7119a4bc2840233f3ee6befa8fe1dd93acacb3a83fa6cc606dcdf4dde7d6ab34323a830abf9bd86f5f69606444055e0f13a17774fac9d261e92276446f70bf6eb2e171dc69c13d2882ad0b916d1754e2142c740f2b601896339778e84dd0822bcc32a939144900604d0c184d411af462a3f8e1251b71287a412b6c12ab8f3067370c7b08ce80dacb390e06712feccb79cf9b65552d0dae45a9223da42f87856db8c14d44834848667663133d1ee647873cdfa395b01273729b84f699ca1caa11cf00b67aa83b022b8374725f4e336a9d44d8b8bb4fd4166165429df44176f1a2534b34203eda892c8a412f73d7a854a2bac842e7ec52342c4417d3c5d07d8680bcf01bc6ed0fae1eaf7b9debd850d4c1833c340e43f19d2ee5943936d0c1f396214e9b36334d80f8db191e06a18fb505499c3d9cb7ad3aed1bfb33ab30e9239a7e7f481e3b9f077eb0cac14f2ce40db5548d2174d2c154d40a06730976249708bdcc18e0d715c7bf327054534210a23410a20fc6425d88558a480b7c1a07af96584aaddcfd3394cdacb6b0bca79b191b926105df0ee8f7d7243624e202ae1fc06e7c4d0ba3bf092825f75767d06993a8046b970bca8bfccf364933121edc0121731e1bc120d4b19628a85bbf0dfff9649a6731ab32b5a3b7f2280b03d783a2a039c84a9666c5235609041c92b3a639ad490e2403485220b39b9f98b3362798716cc8df34f9a1eafe2f7f62b604691bfe66559d11d551fa130168a2cb00689ec82a126562d352917d10030da2900981e9dc88583790a609efffc58a05605a8d9c4183f4db58a31aa23e7684a3735402951b5f8e7e25cade5390fa22b5238a9e6a922af674d19c29a1a344c7b365f746be4f1adecf52b45f897ce735c3274ee3ddb24149d3fcc661f72526db9b66fac4bf2f70d5463c31c66777beb51d7f33e297b33dddd8bf597cf0177dddccc7cefcb62bbc6adae59cf66e25b1c7cc4422132b88a4150a41542eeb5acc2f1a2b92085fd533fc9964c32bade8a219b285d505a82abae44935e4982a2a67a6b10ec038da2ed8dd152b2b54d5a493799f54caed178dcad7542afdec44cdab1918c6dc97cac206c3428593edd81f1837adced019f5044380cf00d1c01ad4260a36bb71d8e6de6c09d7101c01f7b7331c8618aadbcc181d6d5805f9c980eb7df19b9ffffe87fd410c7bfcc9461d8a9c32d4bb942b35d05406123562004faf9c39e5e0c94204696621cc2355c8e0197dfc334d6ca04a4811ac69f9703b112e2ced089ec20e053c61a199a040fa5a947561d1ad13b444ffebb2c2741032ae7112585237036043315b794d9e5965a71c5cc07305321bf31a8638379cd2a0b7839074e8aea6ef3baa9e914086adb10e473f48f434e702c889dd26f790048dd8b6fdc9bffff3c5ed17d7fc93893a143965a877295f728f99e31a0204547385b8b3847b0b1ef20a300861408f4ce146c44aa31063f0b63e3b2fc21af6d8d8ac138373030327a6686096d70430340123165808072030e941f66c4e995546c6226ba59c80643b8507379b81e7388cfaec5d90dbaec178759339d94e1b5634fc136bc337bc37c0f6f18d8341dc575fa2907085342af40bdd8e47ce086c0d920221242d8a67830d1345c059df854fdcd43a17c6084e44ebf6ea8519bd4d1857f25746b6d44eb7417f808f6a5ecfa3abe1b1199ab5c5106a6d8be192b207fc6ead0a4a16b8be2cd71aafd8ffefb6a1e8970de9ac380ce57f529459723c6e8388aadcd2388beb07ef5ed7338fa876d2fb1d8c3433d8f5a430c66e44cb0d8d90cee6597ff53f1fc484594ab7be0a8f7f3f8892d586ec75de18e56862e70d75c27883400f6089c25163f88db0cd63ff65a3f22b954865151a63f84df6e162d11976e8300ec33a7a1fe4707b303f1bd5c406d407255df2a8a6ddab720d08baeb3938526651e76987b5ca96f01b0927e8dbef43f6411f4017db22b76e41094c56892cd4929e5a0b1a492eac698bf8aec21c511e89c299a69fcf9df208a986d5e41c5885844aca68a1294882a246e8b1c7a0eef145033307d545fdee251273153cf00eb5c8eb47dc1a0ba9101e619b84341bbb2de3b3c479134b370d4e2c0479a4217433d1e7479c0808b419fb4990434cd6bd841e0861b3fd3fc10f05bb0bb09c5ac9615b3e6c3ef1a7f5b0dd39a49c2746bf0e79ad52a2bcaed3ec62879165fcf9a8822d8ab82258e01c06440808680ce235b92743612927fff8106b8dcfae5440874678bdbe6f8991d5213767e7c0e51c870622314145a60d589b498be4029a750e535eaf2789fbcf72a84bc79ff3bfe010881442fe7609581c56b6fb6762037dc60bb6049848c9d6852f97e7cf01dd6b7f18d9c55fbdd1e17a7f8983792d67c07cd8a48ce034ee11f667f29218dd8848248bba4d2762a58eb32b1957bbe5efe72e584e3534fdd3ba22484e0e7186cd41bea407dc44499fac8e5c79a75c759db6a24d1cc54e14e22da51650b17c2325a8ccc88e24999db04e0855b4c90933e96747445a1e46a1f9067c673bd69d09c1da894f96f573c01d47f79f0038561e5c05eff061359223ef50675ee70e0d1bf47e4748004f21cf799044f90e7784c030be96de34dffe75c22a92f0449b781293b15683132a6d4e52e3211b5d7e49ccb398d3fc95f13c43b912baa64481f33c52b16293d9791cb22d6ea8339a67367a893487e9dda604841025a1b88d467d7eba33230ad030894ae0624907143b2eadeaf6d6a31206ca4d5b16864789c976bf7aab7eac8ce3044d6f88aa8eef838af056af8a2080acec4590e8bbf1bc52f915e714c1025954044e8a5da96b3a9114cc538ae0ee53041271c0d1e59f93724f6b93da34d6cb2c5284eb1f63a80c45307a5131c1c39c8c34e961d064435e68975ec43dfa0b31f13b188a5c592343371338437f802960fb680c99b6306c3b97c2b57bd9aabfd013f4a4deaa03af5b5c885f227a1f24cb7bf15d65210a4567039ac6a2637b440ac14d3151757bde09c14d7154cd31bb8460d35182c1a6bc68de2b5a8a50a1cdd799c5364b117a3a77c3c5e775161f841462e89a38ebbe03088a5c7e50259c577d03de19485851a89e0fc42463508831a6795c9720b955892ac41fe14400fa102fd9f52128833e8dfa30d0a364162c31a03c45e801cd749d57d9f9815506e900b8039446c22ffc7eb4788f73b33abdb2d1126bc5a32413d14b9d64e671480e76e05f53b2bd0b94ce146621de2e127ed32c492bfd9393f7c75a4b7fe44c7ac93ce1875cd465daafe40ce8a5e88238e691850d476a08bd3732ba426227a2d21afd42167d00edbd22d5b541f148b9357504b31ad46392a03f1f6824b5eb3d9c2bbea9881fc676ef84ae3ade1dba626108b3a104ca2bddb3d6980f2e04a2c846b3cebb89b5972daff7c2a95b6e68f7137e9f199ce3a8cace3bd99963942c2080443340937660f53559705303e7b29ede71a197990d92dc653b727f458d7d5e040adcca63ecb2ef92b876b25c2dfee16f4a0e75d5f2ecea25fd1d013132ab98d734a6d74bfb8608a5ac64cce18085386801010561920600c0b014e09e095e14c9997683f3d3ef37eae337110b332b446eb35abe178f78c15cdf9e3142d32efb8a6d9419d9328a32bdd035166ffb7dd53542b9669ef0bf41047f5b38fbabc9d28508e8a6145bae9eb468337a1746d791f96aa20e423719c1c2fe66b9c0eb4f4407c2b6293809b3b3d09b8018280b16ef84c261c600aaf304a98c04242ead2e7eb127a08776252eb144a34f13f4b6cd6e89f0faa603f083fad3f3c903e2ed557920ac43ce19d795a720bf8eaf4f437e5d5fbf86fc38ae7c05b9755c691f07dde1a855705626cb81bb0591a7e0653156817b3678512467ce71ea3af515ccd5f5ea6b080f3c8033e3a5e1415730d247981cb3e803a95ccd68d78f915e0c9fb7d11c41dc99dc47b422afca52606726212b5ac3caf2973be7b9e7b4b80f32e241883a39e6ffa03e30d8f02ae007431a90ee85e29f8a9de5b7bd4979d26a3583498b38bff2f4a0c136dbd9d256c0e5d0673d11c951b01c3e57baaf8eea5c910eab63125a27f579c19cf790508358984a14ee88493e0147d40477daa67a62d30f9cccd0631ddd38c7b70e78749f671572e83ec73ae4d13f9e55c0837b3cab8047f738de0107fe3926c96f026832b605610ade87170014b1028f67e153353a067fb8cf032f983e805ae16fa0e2491551bf880eb94b202f1eaf0e343c8b65359f0976c40532ad52ec4f3ad7de80b3943aefef12e14771a2ed2dcd004100646c8c353e32ffc89700d0e271a318adfd304d8b1bdd581ebb40ad1ca6a363e879819c12419a38e475d028011be60581c7dec0c65dd7249711ecbc7f1522b973b0d63f70259d70c0c184ea39df763fd71d892f874445f8bebb14083a5c1d9544d87689c404dfd31c1d6da4d3584d60356fde492ba38425ef12f10a268cc3c0b95fe8e985a0db3d1bde679dbb7eefd350f2d6f86b2be875ad827659b6b1b5eb975ea6132fdf17a6e15b31888d5d0826bb48af4bbfb7c10132b21173eb081176908e8ae58b586f3fd99bf90147c204664db7bf22ec511a56c915801088c8fac641970c749b2efb800585cf7c6a835b5561e9e1e44583b537c1e2472229c7851d73cf186c20615c99f2bcb5a065d0b992a5f92a3625f860452208ef9231214db4c917d97388bf9cee8c618509117c70fb296e215ac469b3942cd7bfc1c52bd4abfbabd3a813f716f3ca500f0d355cce472aba0760d40bb8be894f15e19877af3abe38053b717c710af6e2b8eaa11a28ac241ebda4bdd3102e46313820342d321d785f67d2a81748e5c677c477cd636e5264dac4d8bc18259b6bcc5f60065f4a92a530a07f0000bf32d05cb08f848814246b880ddcc5e34405b3c27a91dd535bd56a2ffdc5dc29b469bb1ae7980508b9ed3ccb8cd0bd5004c7c7ba1281d5e578e123134a12a4febb6ef2f1e174b6c44b145577e8ebcb3ec0b59cb2f04ac207875361a3e492a9141f721f5b6932f4beb6936cc8754d25d990eb02fd606d362353d46159bfede3d7f5e1adbbe1dc9fc34c24b8e779ee2168300a7e6ad344ad60e8c56785f24bbd82921ab323f1d1394027c45756ad5a1e98663fd09a7943f71d8171ef75eff941a87f8c2a819e5834a401fe9621f7cf02810a015e406f769ff84acd1118c3c36b35400388c7d3a253e3f218169170cf83c52790d96b3924c3fb8e5a2d9e537e7547b222432b135795eaf5014dc95a3e1419f262dc03288fb16eb0a9f18ff522a3a82c1f123aa1a5d514c062faeb6806ec570e9fbb00262f89d102338a39ecdb17e389ee9d77b3e7328335c9e6273c7fce55d717a7602f8e2baf1c2443e72751625476eee2cb13c1227089decb029ab13902bd9c8924fcf1c14254207aef855e89786c18bf3ed3b0000fe8b47396b330e1d110bc4b1787abc9d755b9ebda8eaed4512d11f17d48893f72beeb58d155b18ac1d0efbc791633992e8e5e52c462fefec9dc83ec8f36953b1e596801441739921f9eb5c09ed0e1f8100c632c29c730207b18062c8304ee041700045301ae37c1d32a3876d791e3145f1a7283761785d0ac7277d1530aea782105fa3b427ed3ae29f5122f569b37e3f539e177276c498a9a5dd67be0ab496d7d58614690c1b3a75ef046558eae0fd07ad0685ae1061909f0a873e99925f2ec7c4286c0b0a47fa86203e401df85ad4380042fea7ac926bcdf5e590b306cda76982086a2667abfc48fc7ce848863a001e53b8514a63f9edfc4a78bf4dcbb471d57bc829c3aae780d39717d71500d30ac17e4c781bace2e3e9e31f6e6e5bd23f3ec05730474a03b376e0633e8d33bd1032d89f155b55fce9acf66302262da04b5aade2ff70a08780bac06e0a090f99e47f7e7f088b28f10ed21fd1f25c91f37664e78fa104b624397ee55390dc0b8175057afeb8dde818e5ade840c67ec2da8ea35ed4574dda660cb895bb137fbe751d6cc3c13919c47759e796f2184ebd62f4fd4f2a57f9ea9e54bbd3c11cb972a4f87489db1abd7b13abe91e23232eed5aed2902ec08e6ca4e6169f4e5a0a64d52181c8d55388796927dab6edf51d479edb08081b6df814482065e7082c1ba81f84747565f49c8d9eb788b35524c2f10018428e3e54c558b8ae1ed397a4b84ef587a2506ed1c5a6b7258e8602d7c94e1aa20f26c8454a4e910360045a7aa6fe7c84be856fd5e89adf679c5b3eaee146e29ea06ac8d6a18ac268dcc9c5fbd66fbfc63cc9eb4083e2706486b3ecaba23df00e70bfc68dd557292a3663088654b792e54847df49d5bdd517c5bbe85ec61ae6a5d0c0884bcfba6500ee41c50bd9f0e179158e913ecf63d74d03ec22012cc8a4a94c0e98ae4d005b65cf26de73a9a434854bf00eb075cff69491f3118b663337effc7843c4e8870bb7704025b2f0688a585235bbfc2d3371840739446f49508f00a1ed887fcce73595f08b138c7ca032d366acb47d5186d9fd52b0e188e5c4fce3595cb042c2833fd14a4aeaa3a4539a85039a5bbac9cc96650d6a1bf250d8c79ab311383a9abfb16c75251d3028121f01447a3d527589bc8144696e733fa36d0bb1b5403068b9cfe8d13eb05cb5025fc76d884141481651251b245034ee0e8bb2b2eb943026c491102d2779c982881bbca4c4ec1d944b38c4a8493c3724e8c2fd487d533248a17f6ea68b9021476bbef719af3ca7f94824aebb5647d8b9b151d932ce59260c49744e000c400f6aa314fdba407201cddeefabdd9a2f31f984b41be3dabf681c054b588d6b511ae5c08c4f634394e9d622c3ea63ab7c6ba31381470575a15a58e88663f7512fbbbd48512cad9190590a3242bf337d2c508c97a12b297f030e034c6cfacf962b5b91aeb21d58f3959eb6715b9c822ae1f9212eba40f7f4060ba28415a133baf105a8291210e6eaea62839c10c88a955e51887bbc8df72bf427804ae1d8b3cd39436f0ac620c3aa1b6c458eb0d61f2000ea053d92c96ed8c77f511dc60bfef7595d2b8818dad9020f1db54fef2fc050b0091068cab2b9c4b84900ff50730201653bbe69ade064e45a1b8f1f043df4b5d967798a9ce4e5216e64d45c41b1bd4cc235d981624422b6214bee03a1137a07242316096e50b44f6eac8c944a66386f7b0705036fe64f97fca98c33abdec4fbc4d5dbe8a2703f85d4764722701cbbd1b14e4b3ac2dc6aafe8a5911f1c1c951f706f29677eeec1a7cc2ac55d0cf3dd58d8d5dd2f7d5a99154dabc6f53799650f0b8e60b5d01c4d50a5f86bb66ae1daa10b252c40383f7275f36476a40f6ab76a499da281d646b3d42dd2ee75d257e895489ac7c22949c5e5462634035d9c463790b257268d110cc5c7ab8b57aa49e009116af13df6ee3c4025d89e5cbc2d23a5b5f72bc92e62d3b5369c1eeadcfaa49ecbaba8dcaeee01f6e004ab4aa3b38e721edf21afd04910ddbfef9c764244a6e87ce7ac4883159efea8b48cf768968cb960cc71842f71c15794ea262a9655026918e1f807434fed487dae288c3a560434f83d2307f9d6eb819e60d1d669a7b78a57a5f204979ffaa4485fc8f8ce5b5161409f02e18c7cad9beed9db73d8cacdb4969b84c8b399eee610cfc3adb1774fcca68806f74506d66937c339b355a946a571914ddb5a7525b27ee7251e39aa105b820be75b1413f739bc177bc9ec8d98ba91aa41cea4f912251402fd388ef76af1bc10a21f04c4ea05ce72108aaa8dca6c915c89721f066ea925547fed87bf92fd3672f074a09e34920c27748db00453722ea3571c1a688d2068900b20ff73dd7f9948505dd40039f1b64d62241f3ef6d4d57a34653174d4eb9e38dd44b7fc7b9e7a9b7ae74e26d7a34b1c6f347e345572dec165058f9ffdaaaeefd4b302ed1ea3b604988424bb163c03e4a017f31f075c19712072aa8ada4a678b2d7ccc4421ce635cd7c8e9e325468bad299682a7a39c9f4ad0b3e23fc2110c2ccbb5e72c05b60b7f191b1ffbcf32954a3ab8eca6f3a7e9412168b6a14014a3f35a06f92b885b1f4bd7465df451d5713b1354f15666f24292e514381d4f7dd840c8467ab749f0b928c1db5cc1071f48765b6a5c1997c3aab4622b0962dee24e580b38868a9154bd5a77d94396444edd1d408395ca032cab88d8a98ca508a6623b6f87647960ec75fa60656ef2028fb393abe887e34b8d645b642a59c34f856ae663ff74736c0ef5d335a00fb536af994fc68613a21ae6b7605b1d311556a691f0e83938872fbddaaf9cec39eb1e9ea6d38141b07c286c6c00c03085c3a0f00c03ca804926744cdde5107916e70e909fcd03ab4a1fd116425b76fb78541eac1cc458725490717016134a6a19a86f65f9e2b0e010d12673a2a5e54dba2c2e68528f10980c87572cbe82c9c6f0554d67e92fe376c9a216f45768a53b5420b4c0c2a477540483eafab5d51114b1122e8d554dcaac03231d56bc3caa8c0664861aede6f23944d3b4d23b4a8ccee57c76b74a56aa9167ae2b475981f158ee157f16d08a825e4446434c35b57bac258871f7f76510d22190a378922b1a6b075351ebf3acf019d009dd4fc0f5b0157efc0b52004852643f6f47227cdb4509872748bd5fcc33c253bbec9c148ef65fa64dbd4b882e3d7da8ac1470f31b9a6741c5391775a74350fc1d833f5c3cdd50a54ecb21c3244ff43238b54a15a725ce23d394d825787ea835ca0bbc7ea73d998404959c9a46a2eb402718d0e86d3616af9f7a15dd98280270469a2461ac5c79f66c7369a80307f712f9e9a1bda7ca52e8fa048afd701c6cd9ccb1659f31c7eb5152f19d97b9041865dd17156ca6f9b8908c50a084914cec291eaf1de382e1b53f047ea21f0d2886c5e0fb6dbec8838d29c2c81b3e4b0ac74b0ac1e15a4e4390d564709d8d89ac43baffc937b35c20ff8c9b1ce0cd154a6756a3a6f467eb95d8934a130a2287587e8245c20c597b1cc47c3f15e799678944213e4dc7b1fc646489c8db871e4593299be128931b00b5e32a7b66926a0f3f96bc4bb745253d3e94169a61246684d3674b4bc9d0cd820bae8dfb25687ddc9d442fa4b7ba0d2a89be04697beb7669b5a7efa80bcdf8d13f9134fa97bd1eadbeaef48842831cbaf46a384611e90e01455fa18cf0ffbf25c9e65eacabc95013b6aaa14f746cefd21311fc378c6a22698046d09796b35c71bfec4b108cb08af0a9bb353133df0ab4a57ac738d85a5d2dbc5bd545028566a77bbfb20e1aac4cf179240cb59b3a3b3f39792cdd054ad24514f7e0911863859ccd6c0fb2cb040afbec58576f48e988b81cb8b77e008423af6c1f7c7a312aef78588036e07fe4c00068e4d9c63494e930dd9c569158372631d429deb872e1d3550354e23d53716bea2c6486992b4084cd5c6c4e322c40d1713855abc037065f358fcfc7db481fc94407716458e32f703d29a6b95a6929a3e0cc4f50d5785553de8547a347c5a4acc514cd433dce517fd55a3957bd40ba68acc86eabbb02b6cfe42b88eea55c32f6a2cbf672b18487695e61f4b2314e48584e25047889b243cea6175712e8a8912ab95144fb62ebf5633428e180da559c34a6fbcd42581085287713e520b8942678b908bb010ac4310b8e3ba57954d2e97fc986271aac6aac8b457a68f028eaf58a627c208fc94428dcce8d4e3f1a66e5680f49935b82620278c6d1f6df265d388a8697f5206e777cd3900e86c99aa7e360534129b0a41dca853a7b9ab77f59cf47d7624af487f67795bd4106ea6bafb762740d0cdfd194b5fb9b4ce1ac9b288494ef7404169a42d1b2d59b25d632a1c4ffd4eda6760ec079c2eb130415ad3eb55e1caa77217651910f6b694ffd2889d0c07dc2a0017ab72fe0eae233a49141d32c6df444305a9c7a1be45fb5ce8d5b667bc611459fd193d8567da95420565412837eac2dbdf958459e225b6772862606155dfcb2fed4dab1529455036de5560e9bb326c36c33e1ee5c393d64615c6dfba8abf029d09fb0644adb4a9160577b7785a5b2a9599bf453aa4141550275fff8f59ac17e2b846283573bca9179bfc25fb8cc521b4115629f912919a00c5082bb08a8764075ece6b4b503a0baebacd9c0e4966d38e5e9c6eed719b88ef6e9cd83353f512e1e54e36789daeab04fa6e97e3b6b3ad048ffd73d74e0d396c7d68afc767dd281422884a8fa1f7cbf0d735deecbd6bdd5268d036b65dfa30fd1f8e1b22c2aa9a65fea5a61d4334ff3b956d08aadfa76a4ffe81eddf906c4311c7d6a8c354f6fc4585120b9b66bda2d3802a8ba658c655eaeedcf6c0d5f1317664f37bbb6e6bbaa2c731f1207108825838befb82acbccb37fdda7a12a0c80c26c379279378b2b4519fe330a6e092516e9135370e8820da8630117c3b42fbd58bd72250ca7bf08305368b990ba959ebd6bb24dd6d2c2e221f0611222e496b1267d3fc2218162943f2a4e5350f001a5f38e8257049645e75cff1500f366dd296324bc55560921c0c45023e5635c106f20550e7d0d2c9ade6138fcbaac0fc2c5a2ce52e5b0abedad940826cc10a435a5f3d03504b054a55c8081255b4e78461237228d296b3e11cfa2168e77682544bd8e1e1150aaa173b948f267bdd8e4b151290cf649c927a3e3c1104d4c306b31c92803859a46514c0998c98aa95422196aaaa63b69638cd2462eeb4399fce7c780679364b438a7333f705c728487e576f60d527ead477da6514fa619a11ad72effd5e44f5d894e4041e5f22dd45d548143da917be7ae28fd57a9a93fb39ef863bf2e77ccc42baa91094be527763975895508123294b37195791640bd993a2bf6f869f637c8ba1a06ba32d41ff8d0a3f971216a5136641b369aa5df79f640ed8ff90c3f371e88014bee10a9aba845524a2747411b228bba6b4ad16ced664437a70d5089a2179b642ab2142f09c5626ba9fdf2f94e48dbe7ac90982fa34c0997f1cf51784524cccf3dac67f718bb54696e27937c0aa3cefd4a0a3fe585a853a5c26afcad115a399724185f43c302a3c6fc96a164a2bee2f8752d879c45502fd2e55c33372151a0e8b8a88dad395e8bb87c27c0bfbffc44285900e7fac93cb0eadd6e1220a797a1614ed0ded3c97ac329f2125b4a68898457e14552108f0acd3ac1cb2c1c784ac3485cbe33c3b0cf8c6e9d9ab9eed83a7897dd96ca17423b9e0f191b95a2e9c3af0d52ccc8635a3376adf8b5f15632fdef7c13718468b07d0dcd523839193c9e74365f2d9ebdf3b4a18e946552c56fa97268ab0a7158a37d545b30131614d0ab91f0f348e6e35b75c95f07276430eddf049e02ecf02a480c7737e9b83b607e649ba698e85252ca2a8c76ffd44a73adde4c746db353e7a9a7325e2a2450e95a5506c44cea157fcd8fd716146897f96a33226a3a3a7ceff1564a1ec10569ca93d774f4334699bb09dbebdf13f01e7add4ff2a2317e4cc0ba0212ea94536fee29975db8cfa84e5248a73beea9b566c94c81c91258432eeb8b009b914e5f79cfb289d9cfe5c682fe1392a20fd0d4b0150435005cc73a42c5294648f54685cd9da2413062f663b8aab578f7b036287862c38955e7e3b7e819a14f0f0cc333502856e3902cbf83a0923a4588abf428d47afaf7e488484385fa87d7e623c2669eabddfca83855bc9b575a7f28ee43cb8684ba8591f0fd640207065465a517ae033cc19207eb3ef2424472a6b1c18f7a1a01ba5fee19e5d1c616b9699b0831329d7d9820c04fb9269a2945bfeadf4d0833130bf05bf78f2e95d9bf08a2c1ad318231b16c281cf3407ba26bfb27c1a12d1c5fac812f7158a35e6e1e8d3a36101e9d5434527271d05bc72b0d52d0425b9509464b129d4caec28c60bb7a7cdf1c85288e01440f7cc3313d4dcb7ffad19a52701b5704e03db34606ff357edbc6f8662887e426aef873f7b2eaa623a0ae0eef9800991526683c4defc9c1c9f17a831a064d753a08783d501d81784d291d49882d0826e0419a871e2940a7bd514571480c6d4a8573bf2f0f7eaa9e0feeb4b523dee4245c3143db0d0508dc030c7f790c5efa6d2f793f0e17879839d13f5787d27c119f6ec8e332d8d258677f50309f62db92a737f6ecc43eeba12b63408d82ccaa1e717ac63a7f91afe450848b5f846919bdd0c211416d16d780d7c4908f7bd79a1c84852b3341a1562707f0a7f26337805a582e5c420fc0fdfbcd8d5999dde1cad62ab2794934f92d1c085a570d3a29ce57e9b6445f89a9ec1faa929b4b0521f3e01fd521c60bad14cfabdb180d8003d181d1aef26fb5333fe11d04f046b92f202965136f140fd59a59b0c41ea1b433b56a8420f68e900298bab418c4a57c61e72bba2f9e4604edcc154a2503277f32cf295b59360fcbbbbdf56872bd090e4cd6d133b7d38e0e1fc05e0114d1a1f46035cd5e09709ec6f19a421a98dbc45e5545f84609334df6e9fd317585e66ff4cc199c3a81c01e4dc898de78e99b67ca8649d079d9ac8e3a2a96d9533c80d617f5896d495f3d19f923fb4db3c1f71096effbde8429de2bd460016e0cf552cf598a710f395cc0ce6a547e75d6875a46a9f1672ef0fe6d2bbb917ebe176cb3c5dfc88315180feea9af6220644fd6295645f06216c196f51ffbeecf0891e87594541e83bf1e708c12b029f836330c3fec2b41587fc849e87aad5827373532e7ff080177fdaad086c74b3b1f508f0618103d0f7b75622fe76d966f4622917f420c9bc4038547ac7d6a88a9875718ff6e0ec15f2c8db6517b37608a317725c96858c34df5142a89f12561606c1c8853c970896b3c6e664433eeead57399461098c97a0622727c022bc0f099c808688c716b74d263dc5a374676b065351c471a76749aa403bf761ba2e24d2653067805c4878fafaba74673c18eae3d87ba01897150889690092a0ef1cc678752fdff77fe12ed14ab819814515a28d4ef1eeeacd9fee88115806f2016ce60ea45bcb8a91375536950273bbc393a41f3809a367a09b1b80d1299d220b0833b0089ad9f7bdaab11d1a92c11392cf7249112366193cc4118f3067b0b8979638b220448a89d19002884a261e80d141b54a7160cf784462e3549bce53da0efe0d36273aa86dac2eab0c742b1fc7c8c596dbc986197192131e28efd2ffc106f5aaf52b816a00378b859a9b44f0fb05d15a409dd0173cd9f7066536a7c4ec85501ce11ab976f0c6905659c2e00a7f9d0f4b2cf45af6790c09c902190f3dba6d0bf84bf3a2bd497db9d72b9d2e420e334f0a48527c5c54a372a5a959be5197d673101a35ecd79c7ff1e701ba921fb1debd8a04c54bff6ca18831e1e5bba2d6ae998bdd06aaa65fee182f1dbfcd17a0c04ee5a28742580c76a696c4e1cba8943b3ea1f6c508d8ef1ce151699973a108e1cc6428e1b987b66391b9cba356d6ebe6b515b9d4ab2472fd6b738e693c779c49b6d7988314d47e68bd5580b1b872d3677163f91c60da84bae30734cb0bcf7b5f559c52fd94829221c33b2228e16ab685722131a74c6985497530b8f014d2a843b2317c4dc1514f763b85566e8f713bde642a0c3f49361996df8a94b6390f7c0da349b96bce6dca55ae89a715857d33ec2258a7a24f3043754e4764ada62260f9287b2f605373ca5c2e7169bd70027f7ccd75502e45132908a8e1511d0c97f9aa3178bef743e75d19729cce2ea886b781fe74693633a28f9da2ae904dddd13983726ce093a3c102be38c690ef7611a2d4f8425a02fcd3de8d8dd675abe3857ab58af52484016f82baba04cac1aa1fbe18331a886481d73eba9cc0f8804b7a80c3562b5ecb10c124e6ccd2ca381907a55b87148ae89ce2f05dae550c04c7083d5a0547a9dff535e0473fe7e813f49280a426513e2912c2e3ec2228314b925b6a88a3eed07905047388c1a2d3f7e306e00a547f9c80421d0738bb195acdf6324f6fdcaf1dd10d5e6ed3f49bda791968657a8ff6fcbd2e30e95ba30e21fd5b4562b686cce9b829ba4be23f4e1070b6d1249f36256b49ee2d140c9b04fbe16d0c21ace2eef2cbce22562c0781e8bafcb4922c28999f5efac5589a6bd4f7a62d292b6f94d4314bf0671542ea30f50bc5dda3d7834f58d62cd47fedef3d6717a8929471744c667bb6f1183a7849344bfc6112a87797ac053af69ae78962ac87ce192241d7472770b11bacfdc4ca4495d1731ce91a1f17cadf985b48ec8c7a9bd9bc52421db806acea7e8823b5055b90c0115228bc1b57b5589929eb25392746c58d587662722c463437ba133b5888b5655e69e82f6987e220556a438682d5ed02e9f4de8eef70610471ff015ae8e831a37c67c404336866cb07f1cdbbba42d3946aad6feed1cd052b15243fe76b78c106058a83cd8335fa2b5b1dae78febd2a0775daa29f3b9bc7a44b771807e0566b69fa4510d9c7d50bffb7d927c5d5e001480fe5a768ad7fe7db4ffdc2bf5e3d16fbeaec20cacd813a9624561d2a41c45d08138ce4c658821b545e1701652b8de64a464ecc798a64a6e34bad360569335bebd4ea9883a3c49f12137f4aa2135540cd7a737e74077480a031f50bf3ab4ef7e451ee9e0a96ee9aa12c5771201c504926c23ea9452d9ab0b40abdd26ca9eca48419911db9b13ac72ec712102095da05d2ad5408b8ed690a91deb639705e7f7a97c20bde52292c1430d6105f891a3dd188ecbf3a5e04a350ccf1dd47eade43a08795a9ea14733c2cf3e831bece236f067d6a653cd60cb98742be801b5f19b52d976a798f5aaa1f1eadd6915f257d9f34ec7022fb592b901494d928f3070ac44da5c645cc9006f3a237178f085411e8ade323198d7f61680426a6b60a581a30a80f55273aa1aa423950b947d31ba90ee991fe664cf73b21436b0a78ea06c89f8256d0d38657358179f9a875255def6b680036b98e4941ae35ff774ab69eeda0ac83e77ada959074e151f658b50fc4c9c0a508fa5d87bdb10d5664046954f92e9c62ecaaa52463452d2033687ed4e15815bf9e16adc3a0f04a41bd74ba901219127cd5a22d0a44c27b4a7bc3487fb99b04a973645dd4ab16dc7c796ca88e9e4394d0fa7159ba226812b0ced40bfd04554ea2a62777905fe7a558259a19b1e4e9bfb90180be8126e011b8450c414f5ab791356b7287bc5be598a9268511d3a270d620f05206a67829d4e7bedafbb500ab922f27a6e605fc86879ee85bcef92035e9f3bf0c4bab35745660f2264c100477a86873382e84c835b8f5e05e4b10212d8154035361b4c95a21415183fe8392db01093322ee24c45ddb994b37c6a39441961ed72432e7d2a06556be89acde25ecfec3c02ca751ceb082dcb30a5c366a642a47f6f843ed608dd0405aadf435568fb988cf06c0630e8df34ec077efabe90f6168298b6a668d1b794cf4a23f3b180a00235844b7fecb3d4ea8b74d8a2cc20a1a288bef291947d41081ea9f632186acde6934de9dc447aa626e7d24ca2ced1dae6d9561097971be7d5cb2a2d88a5c234ad78ca77992f114c533eceb91860283ab1d50fee6194fc1a7ec85d90dec9317d0f59e7f713ca7f3e62b0e33d86405fe1f06192ee647e6186f109278bbd461551763f1504531fd198590418fe72b3f427c0db3115c7b18fbaca95edde4f79f79399133acf02a2ba30a45988fa4d6e86c4427ebf11771c6f516aad7cf0925a054117b8446b0b9649556123815e6a7fdad22caca5a7b046bb7dd5bbc4f8fba34ddd48357c052878243c586e164faa9a824bcc79963f7381dfa5de0e54bb2ac6359eed3dc9b503527d384983e7477e962eeae1759c5e51e87039f970d7872e6496bd04097f5913100714d290bdf44b4191dcfa4e7accf46654efcf8b432766ffc16c13bb050526a102d856cb18cab8b7a4c8f86177733707cb97b47c8f1785eaf4af1a9e0e06d063dd990ee7635253bc7e527674e4d807b604270e75eb94173900b0ee22553e90953b9bc447404f0d5214fc1d72973d65687ef33765e3975e48285812df1740aceeacd9f1e1e31d16939940bf183e4d8c4518c1e33de7db5e110a5106247e6724c9bae00655b9dd03e33e0dc67a18835f2a62e11213d34a7785ac4fe51254aee783a46399454440dcb7ac904f3b125195152c5c638e2c2a79c1a0abdbd3d1f9da3972011de7cfd43b23ec5f5ffcc209aec14e2f3f54efe0393f82d12aba7b207db5ac0dde6a41a243ce438a0ceac754b88e8f9d54d566f673c68d0e4c4e315a467b49960be346a0afefcf867463eb800568234b78d786ac72d11241065ed1d239294fab8850e6a7f8adff0ad3b5ab443c26d997ee0bf59dbec07cd6083ec1ddfe158699b02785eaafc8b18ba8548fc7e7129bcf7912cc317dd6ac4a21b669804fe6180133778bb46440829ef3a59f42935341b5a5888b2b6b9e5f28aa13886189bc0641063347c05b562b60524f21ea61b1e2059e8bd2431b363f79acd3fc3d81c58ae3224b8d8c1dd37ef34ecf4467eb507e05d2aa53ad1808cbc989b8912f69ce45049585bcc977a9875ff8ef4c58d065f2ed4123935aa73418658579b722bb96f4920ff4d41f82dd1860bf164441d09306e0d65b873ac22b92933285e61176e94cfc41460299bbf4ae909e7ca0d51bca9a25eeee81abcbca41762e719492fdc78a776cf139e1909df4f2d5a90b91d4f33b3396789f6fcd15e023b4010ddade9f8674fa6204c830f108ed7933bc8ddeb3acd943d0a22a2f0cbee060f0a7888560db720325f3b077cc8713d6b5ab7f0c588b3cba8704915809629178e16719a74668ca4a46ba948cec9180a46cc11b67b17cd05f87d078fcc806abc4cdb00f2dd5a006db4948b9b45ab51895139c3572ca7c6825a1241b97c00e8ae3e3c2ef748b6c9f3544b6e1f64b8631f09c2409a68026179c9567f0c9f44741cae45532b89f28a2cf8bd0c501af0e548809485283e46f129f0a9ccd7ae6c843424be427b7ff729e6f6f615c341d1a93e80afe200c316dcb944801a23f0c7899a2cf2b818de4806e83a6474a7c9fc3d1cd0d22f36da105d7a1fb25ec9783032d7138e39c154023624e69eb71c7c37a130f7902fe0b4b7492d45c88c477db6b2a698977d911611f9943dcaae7f36dbf4444f359cfa0c49babfa16ce0712f5b3236483ca158e39697e392940c08d7d1442723fc0714ea06b9d04fa24dc9f839c05501854132eb2dbf9d5cceae5415344b186c6fda5f8e736d2a11a993d98647a9c686f49d442304b7a322dc4ed6924e8c5fefa401b7e3826b148c327f18f191c0ac25dca2e3de3d117f28863e1f8228ab7b6ae03f2cf162ce6e086592dbcefc80d3ef06b4e68612030ba0735a6b45707813d363b3e8c2ed7b266a1e48556e2e70b3f00b79d7e81ce088f98d43bd1ba062ef4cf441ececfc2feea0171f6af8eba259122fa544466770b10d863f20c68a957550004e0f6b1ae22dbcae6bf855d0d1bdc4871303279f270aaf3ce6c32361b34e663227df455ec3c6a3b2be432d9d367e8ce555045be9863d56467ed797eb44cb4de66107f86460f34ef04ea3ce1ec50d79cfc9242c1e41f5a3d87b2307f88eca902dbd88bfbed33c2fe24d77b4f513b124a570b702a586b9fb9b9456aac16ab3fa22c856b9e7da1c458780f435db14610b7fa3792ce5d9e821c049685428576501e43f43b7209b3ab6721e79f4705c8e79160f63ebdb5f753e9756017a4072d880c78c56d2ef4b2ad33cffa33ff5e01ebbf729542e62fdde8c0faadd812b499f8fa837faf44ebb7624ba165eead5f58560964fed28dde6c8bf83b59e21ff8d64ab4fe95ab146666677f62d912089939f71796554a76d249e8a06aee19462a5749637628898bfa89d80dce3a671f1e05784be07d19016fda010faef4be7ab9df06ae6c6c35c807fd0cfadf31020cdda95dd4a7046659c19f3eabaef708e0647b4136d6a0494540990b4b50b15ff4c5118c03facf7308e07defab99074d27df18beb06e2931fbf8323bbd7eb7c1d2c8bfa0fc65f2cbed0cb057fe2e90bd17ccdba0fd21fab1c0d3badea41534352666fecaef8174d5dd34548926c2b4dd6d70150740748329891584f389ee0c89138a244934c2bb32c61752f8a58122ceb886458438024e9ae6c5dbe42c9ccbd13cb88b86276c40a478a80bce97d0f738561ef58df588fdbf03ffc3018a786090459f98c79c2577ea071a5865565c93bf1444cbb1b4874f5d38655ed0880d171ad2e3b31f3e2cde88f3b39ab459996a81a3126fa9f4a485662f08ba27a0982f4cf470f4d46da07ae9b34c1c3541e780de91d34ae5fbca469ed1baf83da5604295ab51e8140d7df9f1a2d49a9d4236b80ddbd7d135c59c6affe2486aa14b05ddccd22980ce99f43b679c4f04fe966222fa6b74d788cc5ab86383d3d265de7b5575bb2f02b370dff7f7d29601915f0924cf3281f4a5eb48fee6dd8a4460e279e9ed3fef4dd41d6475e90399ae5de9c6f7d02c83a1bf7247195cad7408dd671bffa182c41f8e79585d777063e477e34e4dd65c6435e8c598ae579bb0b0b65b6fd514bf7ee26a40e09828d61810ef575888faa3cc4bb2004605d0c0d0f496dc871038692893ee587e9bb6bad151f1e14e41bbf72876b9866295983edc1d41e9f8861e9e8c0c8026a8c13326392d51e6bd5651b7bb0df089f66dfaf78405c43f00b1a92100125dcf10601e248146a294ed662305f56f667bb96dac7180ff4f96efd6af16d3e8393a6b917e0f05594b723bf401cf44fabee7d3b5f37fbd73ec55d47a5fc17223e72e20f6fd26afd5c3b11ab2d9f6ca785e535279ce22e05a43a9f303dfe1f35f9bb6fad1f23780a2a0f1dd8b601a9b97f1ec7517cf65f0fe6282bdb0eee54e0a86f1f9add06cf7d76c8d5feed8a3fadde28727c2f75a3d18b6d9367ffecee6943283720838c650dbfa70eff33a39b5f05ecf06e0c4fe454a96a08d36d862f0016bfe730efb8276ab0e931edbca6dd6a0e53adc4059dbd0917a5fc8c459a8a86bdf4aebd0dbf93737409da1136b89ff88d8cc76e2cbec29c8a0a79e343f2cbdd36d56e239473f06429fafee528eced3c957bf6935f0fca4d35b6c25d942c1e42b20ea8fde197eb3368ddb9e47db68980d4864b1c4ee921a19aee69270f51bb179ecfa082361069131ef604e353b0237ce0c023afbeb15575aa129d66f61e9e8fe4a1be262b8c95fc364ea44d9f142c86c54d1e845a046bd78d89aed4674091a6bb802da36ce318f8d4e5ab573cce64bbdd44bb11ab2196f72d498b6b642d65bd3a66da7eccc1097b6757e3b77411b9dd3def072cb928cd19e18ff3ee07f1e44110fe4681665092de460e816c4de8e297f57e45e601331e021c7a0236b4f80cdb0dff736ca41f76f4c107398d6603eb39fc289601761a7ca1ebb093a63001ab2498b79d0b470d9e870be725c221b2eee2c857260c5f3416a2600387353fc2624e5f86ba010670289394ec0fc874906d217fd278d9126be441a7d8feaeddef859dbd19f58aeeb90d6df29ed76135529408f32ea7977e8ad6b5ac9eb0af8eb5b6f856e4b66af44808d46bb59fd063a56b6c70b5ebf52ec93ae5ba83a349eb40ad74e31d76e3aac6ee2ba892e77cb53d9d1388522a84acd738834d00bbd0c9081aef54b3ae7e13fe84855348a3fbc2b594fe6249f0d6605506f289eaabce275d243a50308ab271493815345a973e463a9d975187319b732ba81c12ae0d6ba9a18c55087ba91f2fd80010459e804e4a533d603acfe274b222db4d83457c58520899100939875ccce6bf6ead5b9383815e5ab6e4400dbbf8f1eae9b41605a410c400725b74afd4d9b7cfc726ff93ffd3ba50474193aad673e244e36a444d1a1022c46a5bfa609e8ddddf5903c478f5a7545ea636ac2279909caa7b5fcf6e59898969e78191c27d038b818faadb75e0549aba0b77dd5e6e34da27b07f5818466e52da921d184e6088c242781db9451f44fb50409f09eff4b694b182d16b1493bac21e67cd7221d52a61d7c750423a11abb20dba12b91267187a01b183b08dc3cd2bfd2f2d8e6936b59fbe489bb2998d2413f6e2c534cefb507a0a03809274c888942f8020d89c975ec3257313f83139aa72f9f1510ca05e211261b8273b6a30c5362d23a2edbb2962a09c5b9054a63a555ee2d26af8a4703113a12bf127803f85ddd5b958aa2273c8027d59aeaa637d658d59ab251646d216c9c2c22d866e7624ae8793cfcbf138a9d4b9bcba8655ab0d24f934a4fecaed9ff573c5404fadf84b173253149b173ec66f923544acf401cb7e8de39cae29349827ade4c8c797d360280e77c15e38439882ee0a463be543d9fba406914967cc136bcb492238075813434cae837470ffb61d6a252443e7813dce4f876f55be4e11412bbfbc27f521d6f1fde570cd2b2e212e8210898a9b053097603c408c9a576cefdce6f32fcb10436b020a88adae5241e5d2bb0f6e65eefa4ddb5d1488b7ec995b62643cfabf5788ee3d69f31ea07b6cf53fd11203013465618f3edd3b0187997f3bcfd2689a4ffe611b0e0ba80e9a853656deca9b2c097918d041af154e569b500feb61a945261a92a2b77e47e464fdf2b67cd88e1ea19052d11c9821412d8440861d656285abcc75cf57a0c743cbc7a59360fd0dc9b178315457c1c70357368885710a222f544b0d960cd4bcffe44aba54f72f6a266030e3a23d7bd94b3b5c7af9070c1c7214aac2bbe14a04a287345d17c41faa7082d4d09e4b86ab845a1267ff809714b820ccfafa4329c8ca577ab942519a55c2249e10ffea6e637a9794d2b87913cd740d8051be8d27c3f17ed56feb611781605ad7c77c41cf791bcf82ecff76f57dceac35466bee6a2c41e504497246c24953bdff0bd700b88173323e45874758c173a5277c3f1a327ca4dea94c8d6e374c0ad5a7175e340afcbed7bc5b0178bbf1014afb889dd943d11345d386ee782964c75afdabb9e8e75aaca495c011c5cf7282154f5fb6d0c7f5045efab06f5ce879591619f520a615f63884ed83381b670f55816c33ef4e9f564d8fb57064bb6b951c13e2656991b484ba5f69afd51b57909144f77387fec77755a5a7d9f6de17d3990b2db6e448f5ea1bfba61400f5aeff4bd2f4eae658527dfe5f531a3fd378a6969c6203dead5ef9852550f4c5cebb7c3413c357a85d4fb679a7b4456ef364f101ecbf40c1c00b313b40b030a459e745c4052a2da1c59096d67dd9a86c5ae9a0206ae90e405dd5adcb52073e0bf25965e57b367f7df5dd1aa5db146d49dd9147187d64d067b2177c1402a910a0114205776fd9ed3aacbff9ef8752b9a091f666666d664777777f79652a62465d206b80600072d3c01b3fe2ca56edbb31d56ddddadcd384d52ff767c806669dbb76414b34dbd4a497b4a1c9ab775efeea62f9e654dbd9b17a49255f2e877df9261b6d2cedb7ecbbce0b3aebb3bc5190743dbdaf0644dddfd2da50b5e90e4deee17f46ff9321c87f13a8820eefcee28b7b526a9b732b719cfecf1ee2cf3eeb62d3ce9eed6429a61dd564aea32df12566abbbbad5f7082524a09c461e4874e5da65932076acba3ff019a25bf6966dddddd762ea5940dd3dd30595291e5942d55abd4bf85cab0ceb651719605913333a3d4d20cb3d69dbab5b45eda4024d1ed0b864eab53a74ebbbb6d662d4c46a9a559db89557777c7aab5b2b32f9333f2add72c59ddeeed4e7bbabbbbdba64d9b5a2b1b8ff569dd3239635f6659bbbb7ddadd4d9b568b4798a6ae65491b3fb602e28e5f962fbf93337366234a4fcf6e32ec3a8c7c77777a237377f99f57af418aeeee7626d6da961f3f7ee0e0e0d4d4d4b45a2d168be5e2e2d2dded2b2b2babd5ea743a514a65d775ee3ea1100222e2871f4532119c1a39e594734a39a59cb3b5aa7139c94ecae96870d2659c43d9ff2aa14488757cebc72f77e9945aa5acb07ce8f2c28a91c9d1da51638353c28f00e4ee7e204728f1c3ed2f0929b14347eb2ba55258c297981c3b6c4ae84943b3ee9e562befc29269d5e0fc080ac24fd3f2ddd229b54a5961f9d0e585152393a3b5a3c606a78456f8fd3f8458a0201f6e3f8988a0164d8eaf944a61095f6272ecb0c9b8270dcdba7b5aadbc0b4ba65583238410df32c3225383849555ca0acb872e2fac18991cad1d3536b9bb1fe7c70f428ce0f6df2242e49891f94aa91496f02526c78edc8fb1c43d6968d6ddd36ae55d5832ad1a1f9f1616126a7cb7744aad5256583e747961c5c8e468ed90f9efafc121e22382db0feee0234342cc574aa5b0842f31399a66dd3dad56de8525d39a34d060b371ebc6ef964ea955ca0acb872e2fac18991c312ddfdfea9f4368f0b9fd5f0f0d3130acaf944a61095f629a66dd3dad5626cdbbb064264d879387a7c60a0e95ef964ea955ca0acb872e2fac1816cbf7cbf45fa059ced3c3edf774260f0bc7cb574aa5b0842f4db3ee9e562befc212226445a5bf5b3ae55ea5acb07ce8f2f252e3fb59fd2c089937b8fd5d0b425e6eb87ca5540a4bd834ebee69b5f22e58b7c20a2a295b377eb7744aad5256583e7459f97e17155608c1ede71eb0828b8df02ba552589a66dd3dad563e85145250bafff1bba5536a95b2c212aa7cff2b20051e6effc6801442fc5f2995d234ebee69b582020a28abad1bbf5b3aa55629b9bb7fa59f0028ec70fbb503a0f02d2c5f29d534ebee69b5752698b0526dddca8fdf2d9d52b9bb7fd5ffc3041d6e7f06c404961a2b5fa969d6dd130e8e2ad5e51ebf5b5a597dffa98593c3edc76a70565452bea65977bb4e462685ea563f7e29aaefbffd2e3238dc7ecb924941d97237cd3aaffb47ad52dfdfad9ec8edaf2bbfc21837cdbeee746a967f777fd69d6eb8f794c2589a42b0cbdaa6bbbf7166c3ed772c278da9eb1aaebfe42489f4cd23b23f098f1328fb5f3cce1fb23f883f3cce21d9dfc3a37c324a27a36c32ca25d95fc3a324c2f0d8f296ddcaa5f583000a5081850b0c21f20350db1cd136d4ef4af69aa1234560c82359849e1d8af424620ae53994a58d9dd6dc11c5ecda339f30bf7e7f752ab8e638e9f9b78f3bf3a5279ffec4f2bd9b72369d5f5bcad9f32906e254d26615a1040df9b33c9284939cc416b995e5912488c858f8c08451eeb2c70491cccaf2c81246f9c8124599cbda6bfe79f4dfe877c86d5a28a4736f2104faed6bdb6baebdf4b66c7bfa59db8c534e1fdc168eb3f34ee0b2c67903a8329359cbb2ffb6d13e7bf772b26df372b49036f6ef91e64c7b3a7d682e79dc3e7becb7eeec9dd0856367edbd70eccf5bdb979e01b60fa9f6593806d13efbeca77782f6d9b68559e7ecb7f7e7bc01789f859b17da49e39e176a5b38ce8cf32a5f99cb70cddddd9d9b66cec3ec1b53ef30f753e62cb4d3c7b83db6bdf6a3103b69b2f72c67a10a66a78fecbb72d81b80f610b0a17b2774597b3b7d68e148819d9cbd8796bec5f0cc9bcdd88881ac3d2767f7376a206b356b9f9d50b396d9e9639c796608686f3fd3bebe34c0962dc7cdaeb5dfe1bcdb5ec3e39c9e01e86f61f6fd36cbeca4e9efe7a49d3ea6dce9a6e782564b865bd32caed2ae524a2bad95d25a69c53277fdc98066f5e3b40d360a99196bcd7055826c3bd97f6ce59e198809049898ab94d69a3dc5d53ec5f527a695ce49433ff36ae8ee05b1dda109cdea67c04ebdb99efbdbc6c317264eab6db4efd7240d5582ec64204db349539fa80442deb50c77bcb90036ecf03eee54faa39039bd13e65b15fa9fe52b0369ce71f613d3495381b867274dfde9e560bd72d6e892bbe26f567dc7a390cef37d625bb13fb532b96b19bae7eb1e48d8e60e055eec7312ae94843ddb5a3b12ee0e04ff7eaaa2be0b5ad2ddbe0d73257286a692b0cc1f4e4998fa1b4bae2fb93620bb9530f5515fae9fa5721dbb4cc36ca51909d35c3a3993e90547c233732c07e4fa72c6dd53f8c50b72f3cb8b864dd9e29ea141d03da065f172306c0587093888e088e9345cca14ffa490106a42924a5818b2b68fa561120a63d82a0583c178412e8ccccd3666062481841c5f96c16466b81c3abcfcb4c33fde3b2a4c3dea3d5adfda1b5e0e86d9c8e105a99e0389ec914347a7fda49ec33fab4749319d56afc2eec319eed3364e8664f5afb0175932e44cffc55ee430fd252f23f7637e46ee07b72f0153f43ec10e0ec78d564dcb6bb5786c1773969763ed8b0e2f480d6574d46879470fad52c9a2dd939e870e8644f2e061d36918cb14ffacbc0a877f54be06aeafc2281c4326aabec6b3509414d389a5860abf90e52e7441c8cdda7335b5aaa492ca0aaac60b727356e34a38ec4864b67d353736f7a899521b1b1c1225e590b971a137deffcde6d5e77c741caeaf0df142232412e94b3f49cf51d2b74894447ae9052185a77b4ba49f9f52a2f172306c068784e3ad9ad58fa3a19ec33fa9146ab5c29530d8a75000008017e402a0d3f0cc15ff50fce3bd0af7bce885b5662578416e093e7c04a0ab98be2a23bd2485237dd2974821f71cd7f291917458a4d0ede7c30b427dfc78899146b2a8b321fd784ff2c8abcde8a3ba4aa17e783f4aa2f9a3c6dd2168003469a617f30693c95482f27c2699d6a7add65a9f42c23c21594ddc90ea1e72b70d4dc3e4d1df3ded32109a347d0118cfbd2059f7b80b093571a11fd363aa0b643484caa73cca93f0cff7d6149edef4aaeff00f554941c1983d9954f8c36c387a1312fe51fdca534dd2775f95a828e6b59230baac78bf1ca6adb591a17ba84fbf66bf3a5c336dea5d87fd76b8b3c58e047b123faa9d399b4d89552f3d9749ac3fd2cc9e4958cbcc3fd203694bca345ba94f6965663a296f503f24864c8ce18a283f4a22aa65b9e5cefbf1aefec7f623ebe67463fa1127cb1bd58fb208267fdf8f34ee239fc3baa741207b06d9374898fe139e4cc6f99a35583279f4e8e7a6e77ae58cff4ae52da07e8ee0c46cd81382d393902c24248d90372161fa2f3e6113b85d17f229727f57af4e1dff7cf57bfb859fc250f8c3b4529a9aa847c13d574485af02a51d6d21635dc56a5da94e269cc2a8ffb033913afa3d0bc9a3df91c81efd965acf8bb070f4f9429627801dc1083cd9431784dc6c9f6294468963d8097b138661483cc9a459026e416ed6ecf74c8eee08c791a4e91f6f6479bab93fbe1f5db274211792df2fbfb9a1fb8021d63d35fb9266391225d3cec9a47ba68ff99a34980e0b9b4964c8fddbe72f2fb01cd4fb25a7e641dc20a627802cd3d0765977343d3d92d5aff920fdb875778592a5679b7e4956cbff01fec80ac0f7634a66c9745c00dc38ccc4f0f4024f2653899c48244d7f09cf979c913cc61946ee9f5fc81eed48beb82e46eef7793912b741eeef6fea5ec28e84843d49877dc9e6ee5f807e34248617e5e431ba0e7a8c8e83dc4ffda5fd78cf79ffe19e2b7a7ff190fbdf7317378fc861ee5f3fdc2237bb0f4f91cbb4ec16c8359333fe3e61fcd5bea461ba66d95f26b0b4f6679fab72a6bed5a6ec0a6c72a6d617bc2059ce9ec3a8b7d5b26f61a951fafe7f59c2531e57b7d32e8a350e7840616c654a69f82d9685566ecd20dc5eadeecd3277f7002769aecd95ab5596cd79eb8d0cbb068eeb29bdb1ee4abda7746c02f3086dbbab9cee93cef973ba3bad2e7bcab901c171d266dddd94f60cfd364bfa4bc7ddcdafe6d2dd5bdedd597f8b4b776f79376d8ce258139a251f85da416459b77d4b697bb77477a71db769de8d8c524bb3b619a59666d34a9718394361e48cf794d406a50e43e75c420bad94f58294666e5df65d593b5b765876b76d4a2db52e6519928c2cbf8516e48c74776b2d6d4a6946ada5967695ddd4a5136a5768d6ac51dc90f56f449165bb531fd2053069e4733ebb67ceb991516a69d6766b615959b9d4bb2775c9b174d339e70ca99492ce6e29c3d133ab65340b6db7d7c8dd554ab7eed42da5d2ad3b75ebd4ddc3eeeeeed0ad3b753b3b4bd977056c77eafd494abd6bafa338889cc928b534e3da6edd9aecce248c9cb1166b54273d4aad95f4e4e5c81a6b6d7757d94da57fcbecbe2a5a46a9a55966334a2dcdb06eea6d2bf5b6df32dda996615b4a9651a9028364913bbf57962d2909d53d69e6eedd53fac9567a579d7f4b0b47a6594da794eeee143331214fa54a7daea69c914fb217b4b636fd16ef3965705da6645705a44e9dd2b696d69631932567e412b4bd0f4080126c8e9c99ed4d0f90d11b59d2158b7d24793baa1b9414d38fd38fd268f2dcd4709f6689e13e38c1f5554e3ba3a32725923ca26da05411c917493e877523a0b49369d51079e096aa1ae73e1c2a480b074a52851731330801e0844642c16d27d7c9481558f4abadbb2c7288e8036fa9cbb4ed82dfaac1914318463e37752067fa413cbb98305a4c567fc7eab7af49432150df52ac120104846100036b466d0da710b3c866ad7f2e64df2cedce647d036d3197318a3753663593a6699dcfb6619d093b93cd8bbc03ee721c67c2b3061326c96481b38ba903e7dc35f770fe804d1f9f0eec2c46e23e136e1b5a062ff5283c648891ee51e110d4c7f0222a34423b040d04a55feab0e748ff793924523787f0749dd63de77939ee1c0da59e8e5b7231acf372eaf69e17040be70e9e3789cccd033dcfebe8ea4dd899982e83191af1951413e60aa75e75ce3dd4c12e50047e1fb67d5c05b2bb84a9986fa0b9cf4190e2ce1b966287998ceeed289eb549a48e8ab664b26f4ba65ae37a1be86d60f735511a17222146c90a78bfcded0cf68e55ff2c78bba7e909d51d1da9c8a11fa91f2591e6813874a59a2fafa814b879af54ee834a79fdbc0bdaad51a9e929179c584f8b39ddbed478c16aed05314fa93aa11d4c2119863c72228da8cd8d1716502753f3030ab985ea470946c5a415683c21230a12f66ce90cd37d2c8ae47533f4b676fbdabb858ed0f011c23f2a4f515054de4f287f7aae9974d45a9c655fa9a1d2c4baa7a07cf4e7a4fa52e882909bb92fbdfbf88972a5ec92bcce52c9b24f4f26955337a956582575ee45f653ad3ad944be481d3d4551fa514a31c48acb8f1fabd5caf61172ff5873e4305cf720fb06efa3252d8611307c8b0d9cb38f848eb2ddc09434f649f827b57aba0a53df5e90e6baf329dbe987394ab54a65d5824e69752f075bb98dbda7d54a0d2692d5994937f51249ca99d24f2f87c47dfefe1d043ca5ab9f10dac251570a49ddd6edd6adc55052647a522d9c9fd54fee9f1783eee33e6e3fdb53760aaeb284279369c27d032ad5b6bd9bf6a95f23f8059007adfe7b772150b5f28a42a5babdf89ea650a96e6259adca8a87a25764f93e54011343c5f6a94ca9d509cc179c9f976d9741ebe5502e571568e21cf3d4cacba9dbb7592ddb6bb34c319627fef132c7595b29b6d984a538bdcdcbc142169ad5efad604471e53a8a6947b17b5e35a5568ffd77c1edc3bc7e5f4727fef1def481e0eb7ef892ecafd478bdb4bcc9dcd5f6a94c1e0a86049396314beb4dadaab77daaee53ab89917e564aea2a965318ffa47ed582ca844fab147e212b7de54a48e4867d36d36a2976b7af7695dadb85345b4b6be88290ae7617dc3eead471537bc1edcb3255a5416ed62afd36aee50dbd25930a258525cb2cd3b42779399a067e0ff054904d9c89f41ac899259386a67bccbbe08266f41be49633f547cf41ee2e1c4b24095cd26d01bce0043ef073c1fb3c0a745e2784ebb80a6cdcf682b66916c8b4ec02188601cbc466a0d6a06a80664175dc97c812ecb76fa03fcffec7f2caf3e57452eb4b42c1827c75761a318d903f5f2034895ce60ba6509d4e1a661ad5a366d5fa26f4cd7ce230fd4040bce10fbfdf740f986b4bae5f5f256feed7706441be40dc402e8fda2805771a0de089dff450bf80fca68f9e94c27145ea1ed07bfac86f5cc87b68b52a9184fa08cc631fe1ef2fdede7bfe27d87d4f76fda85928307218fcf3d5f2fd2ddf852d4f438c5bfce5a46d22205fd9e751cd4cdf9b3c977cd5af6104e42b050674760ac9391b6bf99e9efaa3cdba7b5d2676a1be3ff779b559f66f62cf7d58759ce58a25f572b09125d3c2e966e81ef086327021cdd64bc18b61a00bd9ed4b8dd6da7a312cd36efdbeb0ddc76f528ab80a504141aacc9e7915da2861ce696db87432fd82f10eabab16cefd91d575b6f983a9b5d65bf387bb878ad55aaf3bbd9e3bac7eb786fe12a25a971a2c2d8f431b2dddc4367bd7a964b94eae2ebf9bb8b64f4c7309ffa0dec3de04ca99702584ba47bfc52ef8d7e750584896dde5ec0ffb8ae5d43cb1fbc49dbd0b6e54b340e6aa64695fc23fa7a7f807e53bd55b5598f22a8f72fa0f9b5ef55fd540e6589a6bb6a65054524e26d5e7cd1fd5933a4abf7b1249b54aa13afae1ea35e91226e530eceecdd7868d8ec35389ec191a04dd33998060d64e28db4c2275f0e8771f17cfc5e57329e12f639d5010ea43376e7425ec6512fef11ef3bef3bc8b75b6efa2bc979797ae84bb0ebf9065528843091259c281a32b612e9f50b8d4a7567faaa715cb0b7259ac12deb2111784dc9c7dcb6ba5968cc2903a6c8329612ddf18ee4df6de8f21532275f0e82761cbf277498821a13ffb189665bc1c19199b6766ba12ae39478eced29430cd1c0da743d2b4fcb35fc2303053bfe5e5b45a5d498797e3af0334abdf5f04f8ae0e1d3aba12967903533b76f0b8e0b763cad2673f0b71b03a692506d311ad7eccb015ab8583613f72ab5487a792c9041b124326f687d92c4b39b15dc3ed2b7600a108511120221f82805c8945124464f9b76dc6d5ea872c7f250921b2749108a07ea49b3d871ca65a2cd35ad62a87b428e3891b3931440190450d454457cb8fd1a9f61165385124faef74d4d3988187223a9d3c61e2a8724154646d0842911e6cf6740183513602238e844417f8b2541e2902099ed4110481839068bb8c0fa4418421610322444ee081224462d8a2c80c5cd0019e23a0f1d3038424a620a2d5228c40424874592286c4e6a9a28c97e8ba4ee816640489ae1a0320d1c510630846a2abfe14891eee602d94171e285224eab870f488f45d241f8888fea8d4a3421df922e201215107f5ae2c8a262a0b507dea55a1ce1c220c13f8883a2e959048df458d1812fd53a18ee441077808127550a10b3312a9cbcfe0113d3c65561831247a68bf585224ba30a309c524ea1efdf3e88e73680ef9cd1467b8a276fe200569bc7c8250451160e031628813455a8cc1c91dc0c08550876488e7c853d2c30a82be253d60d2a3c50e3b681b96ed208c20f0dcb0c4912391b3c111828cba2b72082ab2591751c51346da34c3053a046d4c14f111b93392f4681bd7799f04bf9f0ff0882496cc306de33aef032fa9643af16ca2eca60884829a742d30e28c20d11b12c4936f1e61021c0081ac13782089cf9d4fb440064f485030112a2a45f18220222609451669f89c9610ca411371be7840c24764d5b06408111d564f172378429568c1237ab88a010c4a3c4189818fd1075a7139d9472e279b0697037938838727a28eab8611a3953cdfe515717d5cc1f36a914add1544484d7860549ae10a274dc469e241630920b164031643a2e9748406520c994ea8946aa5eac1173cb662271dd7bc210629786c7c816448f4d771d978d1c447f4d0d5463042697226c90f67f8885caa7580620a1e514766d1032010115d1d121f310b2c8e281239d50f6e600421d185924313b1073194085259803f7d0f7566d0100d8844d7ca888fe84f439505a09e3e2ad4994c00718227a2cb1b43489c4afc50c64b74a924f1123d3c49544a859292aa62082668e2a14e97a0075cbc76a61ce3871d9ecc3682678697e8c2d1239ebac7cc5ca7470d5c0489ae9622f7d43d523cd4f9224e7cfce9ef88b4041882a08322a28e4b4b43498f28bb870b1c0a1265f7905695c60f4b8044b97217e410040f8a4cb921072a7ac499c3192a202232c1020644628d2f986c4124ba5442329265b65ca1c30b86e49fa62c0a620846a2aba588a8030ca0223c564086194d6a60c0d345d02cc112a25942117c38d26108318a261231a8a1898e231cf0e870e2031e310b33ac189a20f042099138bbb0418f9028732c39c221487481404fc4b9c5163808ad54282b5a84072c82c4ee82086418891265c5831bf064687421247a9862050b8000122348a5065488c123eab8da0a30aeb82e0863258a32868a9cc90d9aacc0472795c40e3910115df7081222a2ec1e2d4d7c9e0669101101d24126cfd76909018d1ed1d53808893f30b24186118fcb8d561829109a4e744006454e0c010d2059c60e9a10d29938f08cd123eab838201c0d89feaed6a2e748f4509a21c313463a7e34648c2773881a84440f6766d1109a14c95104060e00d1749118f8c0278552a5a8ac284142872139a528e2c52377f4140dd968628929da490a7cc043843472e03142114013063ac4808747117830d42d08c1104f0c093588160cf1c83451410d3c334a80a062288711140ca154566a4816ea37ae23d11841183c6277cd6ad76401183ce2ed1efd3aae79140391e8efb2488880473412aa04a97ffafa3bd9f43bb9f43b99f43bf9fe4e067f277fbf93bddfc9ddef64ee77f2f63b39fb9d6c7f47fb9ddc3d779444e3099b700993f0c520feb0873bbce1f91976325f1b92673be66a147161c3139649022221f0b45851040f003d0e966c41c4f23a421a442dd386271c787d9230480084a70e43e8c1519845093ae0d36f850c43bcda6fc20e4ac20c15f088ae8d898f6844c500128c3cc370fbe1088f0daf1b360230041546a2ff8e2867a8b82e9a2c41e668cf71586d21cf07e2407a6a540c291275fc5df3270442a211fb3ba28a02a4886121346bd8d72a7d3615b7be109ab5cfc239d473a8593d89aab876fe0c5fa0794e226d64a183381c4268b618cef20d396d502cc630125d989174a933707154734590e8a1119520f3eb873b79de90603ce123eab86898cc8047f477ad80a089e8a1dfb868d240c11351768f7964c390a2e9d26f5a598c713449483283914c27fdc65f65013eac30a2090f5d1c70f17c7661b89dcb8d171c7e23b748638c2151ca1bdf75f5cea40850c2cdefee9ee2ce8700373307d2e7c0ab43139e2ca47f6604a06470009e334f00cdd1495baa40016c3d9d7e94ba97d3ede5480f94e10d3933dfbd1cf91c75ea33533933a537801ab959b93b09c7d9dc499d249bd535cb9b3f4339a70a43551ce14f2441c43b4282234e850e47148b211c51893ae004b382044328110c9a60010311eed3a4af6801909d228a25d709207ed886963c99af272f2c9420e252b080086c2809118fe20822fb84d00c84cec0a0d0e2a834b4459379040722da0b0a215057ec50a94052647fa04476e475c487ba08ea28a818627a8dd75fdefd5b2b856649bfb97ef32e7da3bd7ca9e1141a667b4e85b6e1c21e59d9f59b15b2cffc868516c761151850e4723fcaa21480f40adf7b21e98657cbb29eaefb2fecde0bbbcfc206ea2610960203da66fb7e15b82c4b2ff3cc5bd96758e8d26265ea5edcf9cad24675cd9d76d19d89552c40e9d2eabef4d2bf18c45fb73233eeccd8775eede79a6b0a66da5c6fad7537fdeef639bd08b428754ac1e0a48b8bd26fdcda509330fd9544c3fef1e296385920e9ceecb9020e93ed9e594a2bcddcbf69cb19ea1be81c6f50ceac77c0499791f2e4d63a8789b9e0f60d31c255199f19a8648c1c263dab6846200000500053160000180c0a884683013d4f83d6fb14000c5d8a486a8038958702510ec3288ac220c818430c30c018640851a6ca661504384d9c8c0795235eca204bc618784c395b73272793e3f8687a4eb0134056257b622896590c74754261857ccb5cfe8c68258bae3f7dd0ec2cf087c87e823edc8a42e9436e89d35f279a9a02481d14a8f75b57073be4e56aa63d6952fc7c7d0ac463357dda0b0d665c0cc633c3409d94f3ced397e7ebe16b513b9ff0650f34c2d4a4017656e245c661b0170cfc38ad2acaa54d4b64d2222096e2a32c6b1fff2bdd2f57b43085dd2452f969a09106893b292669bc7cbeb87ebf2e4e6cdfcbaa5264d7504821347b95875452107ebbd92ce6f7ca54e0136eec30738a52865b19707edae0e41326351c327fe1d7cb0ce2c4c1cb7392504840ec8c8d1a8780569dee914cadee266c27dbde9c77260e6cef34e215cb60e954435cc549ad5801228c23fdca73a3c713dcfcb58be6f9229d45b04430d472dfd4558dc74159167f37f4c71f0e7bae69c31d5f6ca038493b8276e9dd5375e782d02a0126b290a99f999ffb7ad56f51b35f10290b65edb61e89df7df040f0ae6d0561fcea73dabfaf1ecfdadf2b657fa76db59d709baae25b0df58b2c83b7e5f36fecbea9fcaa2edf273839f2cd9e6b7389a32861f91ebc4905963b614806d21feff3b9cd1ea779481c7560d87ee38fe242adfccb22684457704795dfc9a434b570610f4eb6b220d2797a87654a0df6c27a96e61c1b1bc4af6b034a4ecb92ade1cf4549e575763a210626100719c2e84947f847374a51154514518f3aca288d324a384c957b0fe2a869ef137c5da25d129751183d41762d1c8470b156d71e64602c5d2b618ce35a18e4ab7a9f3d6e0246c49011d6e9e342cd17e8c065073f92aa0c8b655a16e147879de03a60e2754ea46ccf78cfe75733f4fd99948c1eb0ad2e0c020a0974ba5fe559840452412d997416b320b2156ec6ed908bfb1b701b4dc462fecc5f69fc996f53083394c0b6caadfe85dd3e0d4fa6aead24a891963eacfdf0513330b14f840e4e86020594284870df8e384e56b6fe9dc5eb66157402c01575e6b114fabad7148d430f3daee17e80892b4ae351df98700bbd79591a60c74ddb93576757c1dd2427601ee597d07b3216157cfff527b5db4fcb196ffb18e7b60e41316efcd8069817f7c9fc23b38ec3cbc5bdbc25e5b042e023e2576628390d5e07f087844d7a7d9eca3cf8c70e2b2e49231a1f1caae14a5b0a52931a936c885aca4cc9901b6be12bdfeeaaa4b53970be49a483e66eff400371061ad0c4051bd7d7831730e6aab93a41b2a5e7d606781c6453896ed8e240a4761fb3b015dc113b8cc050e98a06a6f0195a9e6d206a337b3f2298412d98ab9eeabaca2854f6fba068a7ec111ca9d523b670b1320062d234d8c594433823740c68de1bbd1c2eeebc174d0694de53959057ab0207e8eb2dfed3a68cac454f9093e2fee92b9392447567c3d5df66b09c591887e748800df8fe2e9275ad1d144d74f176953a88b3159b8e80f7edee89725f7ca05584b140294f6a1d30cad3e3218685cfba40be077e36d0d4777d863d01de03c075cb40ea5df897429f8a09815e2655adefc432e0b3c9866b489775f619b091a84e7415509c977fa42b081150c34afa8f99da40d660a9e3807cd5ffc34313cf065f514f10773f2d429530beefaf55c2de503ac5eaeea8072236f1344cc1f788c06a1ef364e145ebf47c9366cf78cc2a51bb8c27484e3bc35e3f092b078a4cc652fd0865a27caf4987fbe8a28e5b37649a7beea47f0170b420f343d3d00ab42b313d23263067313e6ba606e04da4545af8527222001a4c7465572228e8a9777789a64a42602a2a122b5aa306247adda398f7f424ee0563324b6448caa8efde54f0dd1e621ebc0b483d2c0a0ebe9efbf2cd71422cf541678b8db72b893cd27fca70e3af5074520213b45e7b41c9a207889f83dffb20fac92d50618ec1bcd9f2d2a7169be5bc09b1175252309262539875aee40a939b61a2f66f94c092b9e11260d07702630e1029de2d2d531a2ba978e96e3434963726c77820aa33aae4c8c13df147303f327456d8f88ab01d677956caf048682df1ea0d88d7c8502102ccab1edcae7cdb994d3ae54eadd655e55206669f05b60ef83d8bc12cf2a0b5f1c4c14796931e90be9ac61282613af75b2c09f83159f1b98d8a5e0cc95c832706ad3395e3e4f3d28db0ac054365e54aafdfebc2f58d6dd439fea88126360c655adf53569f78f70e6440b1d4407109542126c506231555170063fd58e72e22f56abebcf2fc068a2075793579b173a300023cfb4f1e35461f8c66996423378ea2752bc562306f22954071312bb61a27405be6ce18954132dc528d64a265e0b91c525a4a0e1b44bd4118157a7789d6c41711eaff0b8bc2bd19e9df156ec7135f88c7575f490ae053ffb80f1ff37252b937a4a901c15bc131a0fd71d33e6054c4b71f0cbff9f68d1b506bf985a78712787864b3465db07a1590788f5bd76ba3f362fd2356b33efa06c9e8f9fe4154148c964fc56feeb92fdbe0f9d5f1fab804459df8fb2abb12a0a76ea2ba412a25b750ff3fcf224102c76fee00848c9ed937da6c7264775d9715fb8368064b2bdb84390a8347cdc21b6757ae806645fb9ffb70de6e066cbcb0dbe1ac626fc087b4c287d7c9d7203d96fba2e1d71acfd9652f2d663e1ead8a98fd7dbf7c7e35ff9cbed87fd77fdf4ad1daf7ba554ec10a0d7a2ff56d11c1a7a7de979e99017bef2a06989ff4fb6a3a749f588f9d1e6abd6b19baf7876e49f1619a08a404ae3949636ae6b0a30d11b08b93cd9bab56a9d2c5e0543f36490b71d89d11363d07ef0660dd3765f2a6c26c50701943d6a344fce9c46604a1e31f327e8f2c9424913cec8be7209b08daeaa30149f333d60e79209e1d30db7494f6b386d21870052e019f900ef4a6ae56e84d5549984af5ed9e1e55378bb091b6fb4ed3c1fff58622ab5f3a68113cc2c885ece1bd99fd38aba97bc1cf819c0b018fd85c526cf643be18f7fe13a23e94c03a8cb4958bb10b3007233ea131e238174cca7ec668335d88e92e8c4c82e0b1228bcd90842cd75276f4de5103bec0d465c0f7256d36a0051d05f299abdaa0044ec85555389ff37b54de783391f6982c180dea868395eb6f915ff0d37fc8457d4a496cf67df35a279330d01b3730a3e980afeb9e95c475e20015202507037f10710976d8bae6c8026032d643759ec2f1062fbeb53e60957c21ffbe8ac22c31c2755ddaebce135941f247dabff9ba39f0a13acfdfbac541ee2a1c5387c2fc4cf85bd741d8a84336f552240b89217891dedf3a944f09706e3538ac8a575a6800d715b0e810c2cb4e82bcd38ed0d7ca91cf3b682dcf4dd44332c5453b50a0cab5199db433e8c3dd618bd7dab7302841c1ec941862eb79fd87f1261bc1e63ada33980e7378018cb96095b92a32830d2f08fafea92878e55e7616a06e5ba2a404c8c471fc9dcb6dfc0ac3fc89e0dc57f0edec45b230256ba8bf8e4a4b5b11601ac020c4116387f881f0b62853302fd6a396291d4ba3d3178060aa2970cbfeaa4535588c992ea81e807534e182eb1f5c955d2d6dd057957e54b470449fa3a7ee825300181c903d6dc29e946279d112f77f3599adfd926007f0806f3174aa4b2076a2b172a1e79509e36777d91978a5f6583cdfe67b82ea894593bb0fd9722d0026d3a71c38285f4282405990dbb4154badc07c0a6b41473350c02aa151f08f3d3acad709aa79712ca8be3b066778ba8a016be639883e223e75a689bfff678e8e30634beca81201a770f2b464e63581be02dfce401664a255a215656779143a4808005ec3b2151501f89130b8ff3594ebbd5e0ab871d53fe90bfbecf2b88381763a71e0a45063409af6135a96232dd413c58afc2dffa67f23621edea165a15d4a45076bc2821fa3149eff582b30f433e75bd295823e8f9f0acc72ffbaf53f77139d6337ba7668154a1016fb6fea36eb6e331571b3c78df005bd8bf318ec2b098dac2518fbc0b6ebc6405ce522e54dbb9165d5da47135c7746d3d579a865429fe5c2ead2bae04834bcea00f93df72ea51f5942a50647f2df4cbca68897b7a5fdc41d11c8db82e4d036cd36b614565bfdce8a595b2b70428d155e47bdb4a6868f346041fb377be415a332fe2ae18a05859d4a2e1f49101354aa41a54ff563c9a0b256699b1552718d697eb2c0ebe9e4024e3deab63acf77570341b703c727c4c01595cf8dd311a3cf92cbdfba2edd7602c01eca373420aeb6ccd604ebd3e6c4596bcc1de1292594037bc0eaa86828837a6f6f87726a0116f8c54dc515874828200e1128a266fdf7a71c39609da33671e74bde25708dd1520db4df9cb460aeccad0ce447fd762c98f55314849ff3a945e50e094e04658025951eec144a718aabe357c054d847b7cf549d0d359ef3f6ff6ccb942c73af0e2ee33e09aae6d8af8d4fa64ba306305cb276d779629db2ea259866c9810ab76ba43e74312765afb8ef4680af86f957d8a5fffb7b9c5c32e8b65429ca3189f6129c9407220ed342a116658329862c01df55d2f04ab4657cd0df29e8b06d08af04e8f6128f51e80b45264185f10b3aa70f69080c37328bd901a8e27d8c77e30907483831535e30939182324fa3b8173165db292c4b90dfd53df6c4a941f862b5b5fb87a3e87d7054d9e6a95284b587d113a487e881e1a28139b9a00c53c20f257ee25e12743fc55c31100830cdb04c540cb7530320f233bb5b8f498601083d55307406d3f1eb0760c16de0d1a3fc717bff671c4d4bd284c2457ee41f128c5c5861ef4b1013098a8a5b8878d8166362262e4a9abbc0601d08b869c794250f91d202e4046c0464757fa6ff2f0f484159a0e0a3ba93b17053e1747dbb209381c7df860cd725d5d02cc702003e90528b5bc397a6e568b254a23383459dc996c9d9433d572b0053fce210f895ba4b0452afff55ddd743970ca8a391b345baf1b6c0f4a6b721a504c1b588b01fb701c0bcb1cbe551cfbb715eccbff15b1a3991a49b0a371718a3a8d94e5f15a973b48316aae82afdd69fb603181e854f40ea170590ad44fc43272359cdc326776ed468b2377ef7d74de4615c4366b4ffe44236b8c59621f98485cccd17f1caed48f3e6ee8965190cfeb60cd911a9e5a0f0c8e0c17c7c33b3d17007f4496a85a8368604cdffc0a094d693f3c572c6df92a78cfcb7bfd98a7e462652f4a064c86a8bc4bda7c500dff757c694db58186751994db485ad24ace7ed615d09f25cc986e91f3149945f8fd9b9b84c9c15095e140b45ade26371b9ccacbf764e48a69825d9472d82f9d1917155fd7c1ea1dd197620cac7f4313758180a72fe60a3df17cb1b84ceca9a9de783998d1ef3129e88d5567ec6040930e54057f023cc72f64048026c951cf73c49bdfca060330e0059e3b322683b6a90582f10dbe9008ca5858a72a08572cb46742dc5b1c2cb85760ed50fc4ef06f38431b476b741a59b5979733acf3d303c91aa088b3308dfc21dcb88617323c90f367797239373b119f0e5339866a162eb03156962dcedf4e900cc56576236d2a9c9facc6b707987e0d1e8d04617bda3962091b3ec74359e87731062250a5c0c5605fa350966d62ab129d03b9ad51e81b5ca9fd8eb705ac05205573101e2f921569b23612467efcb35eedb5857c015fb554f74fb7e4e3c10bfc580902d938fab0659e4a46bc18918443557f8d4c4fd62f94550f7e215a10b23d26683268c035bc472d0b20c8b7cc09e06de75712c1ae6271384688ef8adfc80957d808245509193e230340a87ca63242db1094b1524d5637bec601fde97fb8e5dec83a8f3cc88c6a8b80ba733eb3f3d95a52a17b50cbd2d4f350a24f8c6260ff047ccaa00da748d078ec98355f95fa3b0e08f2086e380dd2a01f7550f9172262420ef6a29f87ac1e511ece6f6697e6dcc241c222de2f255987f7fde173cb456197db901dae1ef05a2235e61f1cb346b97634392e590e2be56e8c1fcf94a7d15043e76708938834be9d3a3db7c6620815ad5d22f4e340bb57937c25001a0dd62e20c1dc92ebe41fc9879d4da372be9e4294888611e21c41c5c4b4c27373a3c2c9106537452c007f76c917316c21a942e862662a4153edf323b3bc25252734f04640625233aafb3bd2bd119fff006674c759b600ed88bf4c67612c092f5ec63508fa5f1e00964252469607ae122a74da2c01a78d8303c30c10138728352e25df12e4c48a89309fb529d0d66f071bd0d3bc48246743d242f204c26cfcc50d3a8854c9aae9a92bf5f4e624f69fb8288bec7d83111c6f8eb2f6f871f3b8fcc4bd986b23c313dbcb3adf8a6460e958c0b0b43f74bfc3e5a742a1ff13a1ab9d263b1426e96f32c78f9f2cdeb5d4b8e1fc812869e14e9eda4527edd472a3a49aa55d1558ec179b12cbbc51163c34d10b5f2d6fecd232b3fe5930bf62732155552dd43798a01c130972fc2f26daf5453453897f085e2ca6c2f582247a3d0838d48995365e2988039ec823fffff5a9d454d36da2a90c881ee5e70bea7f9aed63d50654de94dbb8ad9e4b7dd6bfca0c04b7d63137047ad931f05650c8f535d432c056ace7760e8958d122c535eb040ea84c42743b2223dceeb6075bdb4d888cba8740f411dda2795ad6510de4bafb4b5a985681d46848cb385efd221acd32938431fe3189de07b6fc168dc4051210ee0ecaad5278de60c970abfca0239988f7c7aadfaab7f42edd552e581710b9c43741d1b2496a30c425c44056ae00f170e9981b0fafbd3db864843e24452d1e9e687e26227ae151a335f232587b32a22d3797c0f80d198399acda444f442f0e5b8092d0530145a2a46eda58825323cca9b186cf8f890cb8e7ff23164a58ed380a000d62419f387ce091eae3a0065900c1bf7804f20e63abdf455ab92da704918e6d9bc7f24da9e8e5ba12bc67503823ddc8cddcf6cab983ba42528b31348136c82731a73f53ac2c5c9b1e076cd89ecbc8373af265400179a4d4a617b7dda14eac99aaf2e2b03f0dbb00c0d56884ed7b0bd6f4d6bd255acd60188365f65419bd0c37a13143ae9daa05961104f092e1e878b000b4b60ed3ffd6088b86c6c704a275607f9ce2f440cecdbf334c094faeda3e77f75ed7d9ac643ac7c4ceb653e47b75feb8942cd77e66aaa765cd503fd8c64fba4df427a4cfab336a830c3c40669914f8a5941ae454850ccf0ba69192b9d691326cd5e7051eda139c454c3953bba34aab4a121aa830027d2c5d8ea3867557ebe3ed4fe6dd4431f0fe3c4642ed9b396ecedcc72e026e6b4dd04514061fe58c9f8312a1f5b3930b939d85836fd546da18f16473c67a9e76806a28c338f30f60e53ac8683b81480ebed1ecd4f526e729c35a3226a8fc054b76b1a9b1ecdf6549a4acb28a429af140b3337cf35753589385e6872256d951cbfc7248c06bdfb0304c25944fe51ebe06797bc118c3c3724f4b3a2c4ec51b0039fbb47f6363a937f7847ac3f6b3cc9c7dcbd28cfd71991674ec4525685f7eb6925a741130ff3ca922877afeac8468d2bcd9365ef14d074e00b8a3c04a7ec02551d1f3e7f7d56a9a771f33e4c01c7bbfac04086cfcf489e2a153232589cbb1caa1527e41d81c9ddd410de058b8d40546c10f97628982f8194a052ed5386c83bebb634b287c9f07ce1e507c6460d99c3e8961f9ea6a22b420f9cfc6097e76ab44e468e0428cbe70b2a4c53505eb507876196898374abc382f78aa5510287ff52e432d851de97e26e569f208d7f223a57de2cd9f835b3522e7f4ca8130d3d5e9e19725cd6eba6903da930f63fc35e82c6fd1db21346b61244014c9a5d8899725ca31ed151e6537a0a8e968977c46a735bd8ab8f99d68e253b3610a909ae5030abaa3a90d3f73875ab1219182a8dfef13427b674b8fc177b80814f25dbfe94421721acf6d67ec47727aec094e9fe7ad6c984c6554f98c68a8b3c3676003dc312e1656b9f5fcaf0547a753503ce7b7a9cf06cfa24c5a05e54b13698652a9cee4f8ab217cd6fad541ef398bd1531b6097409389a614d6a77417d793fddd1e903d708087b552af24836e188f8a6af51559548e8fe8f41791940bf1bdff9aa11bb9139dc811dbff0efa768eed065fa602dd43e8b20990b6c1f24d854546b80946e985cc6611a0ed0d157abc53f105012e244cb8335fe04b79172b2051e48d8c696a29b944de7ac1935cf9081f3f575117ea63ee70b95456c31882b3dd46070feb54ec7d1667ae617c43b758ab725f0bebd2333239dedd65970d231ba2aae22f6cbdff504a3897fdea1c792dd0bebaf4e7f82d398c43b6850a56e159706c203c014df86a2ebb35f91d325046ce47baf395ca9e92a40171b82c421e1eefb502638e51cea94f8858215909cc671fbdc41c805c744c02fbac505054ce25b7055f157ffab9621e8fcef725237da89683936a05c28aced92351ae3d68840d2724607b1c18f09844a91a6c3319052a1584240b53f4be48fa20a4c9e3bdf83f7e7e975046d5155d8895e3b7586003d49ecc4006bdf283432adf8acf3681513ae7a24339c2370585d7bc74b879f8771e6e331cf7d1e87b3cfc338fbf11867be3b1d37d72ca634e9a0e1c1758291870385bb7c68e8f305990c5b5ec229c14923a44954580303c755838b4234a2f8654fc843560171c939b12b635b6c63d14822e39bffc41cd80c72aa53136a6653bdabe32ace64eb49ea312127c3342fa0d42aa580b49bad6743b9e59341e9e17aa865234729139714a6761e4a56e82a55305ba894db70012556d606cdd5d40eb819590b17b70a6630ced2aebd853a88117d540afa841f4b6b2bd521f41508824e3b9889eb2aaad480344b73c2f70817b27d3d04d981d22643e8537467b60808e06316c3c46547da1dccaa74594ec99f14047136863ce4a9aea3c81b090bb7df06c63aaa756b499f3b0995bc959c860e5b617fa0be12a230c8fb0d1cb70c919dc73db6a82165444021ea15488f476c4dc57ea09ac17e6066085e3305888608a46721f14405292e7867309258807050efc6f9869db24bbf2be4bebc837f40f843422f0100d3597beba6af6ecbae4afdf1903959376e9e588dad200796e1e1065abc047201c8a162000556a02e9c2639c8f956509f2c38654204e1fa9358c7eba4f5d9d83cd172c91646ba91bf0fab151fae28be251689e2d247443413e08bd495c26a20d990e8a249a1b8fb2f5ad91e5d8720f2b3cfa9be15f82250b92394b25adf1f9ab866b88f745a0c7c09004d0f55530c56cbcf1ca34dca32857a1584498988ac325961a69eaeabc916d4db75e868410d554fdd4465e7da3cdb07c84448cfcea029e93e0d03f41a64759d0261e0852bcde826292bae94fc74ad14be61ac77bd153167c2d868db68d4073f9d32d6111e861df7d40f77e8e39ca7e19797213e93800ee9cf91f072e763e2d334c4e543509b1969b93f534862e1ade39ca728ec6dc9bab820a8e353c842d8d35248366eb0f5002eefb47498c414a135d08f271ffd25bdcc958e352408717c82ecc21a1574d43560f2905cd38487dff93d43087cdc77557fad33615939f361254647d39a219b6425dc36b0cccc20f80b022dc935884a1b7cc8ec14c6461cef92d07546b9bf82ad4b28c10c07a404c883a5505c79a0ac62702f8446223038eb38256d0bb226bf88fb0bff45c4873d12f955d09d3830071343898d7e6eeddfbe2370b164b29de4e9e3693f74936e401c27ce5a4f7bc73d6c3c33b2d8fc96cf9697c8fca29cb57327acfe1ddcdeb5c41b6035674c836268bf7fb23c9e15132e9bd092d321c7a2ccd0f4811349b2bd59a0eb9a325d28a40f803d8d74098faf2b14dc0764d84b9a103ef843d7147b7ffbe7f0ee14130ca05f6b96f058ae3227f99146d3ff31fd9e59bcb77f3f813b5535b64d5d8c9c6208a4d00228d0a8fcc345443f222648d73a9d964092abbeecc22ae5b183c44401b7d095c683116003b0fdc10b1a26344615062512a36a808489d0181726c1818ac46a28fe2071c5b12f855118cbb7abd36cd8abb3bf8041846c6f76adb122855108d30ac7059dce69d9b2189cef7d14cf585b8822de7a67ec5586bd42b7a19b76be1755f5723fef798c46ce964a3dae980cf204ec617f5d551ec4e9b80b72dc3c514b328731afe7e16e6c26c685197b3ed2c23908e419534acd9b0d0fcd92a52b13866046a345d32ab920aefec1dc2152c14b2fa080a0f14a6e4e818c57de5ff309b4e435910aab0040698155280ffce80985b86dac5b92808f243d71ae24c35af09f519652cbda4cddd751fb0dc69b01c3000e283d4bd57684413d692872d70b1f8b0b6614c91018228dff721aed595f55022b03ab83a5f6dea89c5382988665727e0475033d70f2025f78d5adeb947de544ebac333bb8c837821752a3a81980aab35cd19e39b1852bfbfb4258069bdd2e9aa4c7e2d80ab8294a526fb484b4170cffb503f86725586c851fb2206dcd55b29a6e7349d9f2160254fde61e009add6682a8053cc36520cb034804a563025e4f35fd2a0ea732410cbebc3aeb77e17711f21d67ce431a2ce284da42ac986f9a153f3161e99edce4237488991903fcb382209b70899bc68f28a9f9895047e3165ec90576712046f131a849df215fedbe3721293c722c05d2895e1907e07639655f9f3da23b373e0f1ea583b5d00264c7be8557cd7d17f6a93509c5d558550dbf6994a2da711061f05d327506bbc06f11bde2e03b5a75937febe883eeef0157fcb3fb0d71fac1257622853ec3e70c6cd7be2b23ca53d3d81524e35ca495bf87dd95404089bf58c9f07b585bfcda24e552603982c7a2988882830f52e2772753d24f5fd304f2dc992b4704fecba0da6ca0720bb7821e562c3e99d4edf1fc716e7dd0ad2222d95d6ac9eca52720ad47a06bd59afc54bed37093147cdf2d886cb05ed848eb44fc36c596fdf5a48469527c30e0575e94ca491c6221314b33f0d1e86310b145bc8d05252bb2051eba0a0b3cdcf4ae5d290d3a3e626e6bea0daa0464b59d0e7aa8c914abcc226db44c910ec0301e84af8cb825058e4851cf3cdd03153151b908f99d417b98d43e468cebe3acddc568fcd06369d53bffec91a5412daca1add714c8cd2f6097b5595cc5cb349e8c3a8fd950a79f54e5e620ff6e92f68c6625f29b76c0953ce7d7d826e119622f02ba024506c3a37f4588b856f9b4b386f192d1e83a3b23f74582e645eb00214336ed15cd2ae9e6d0aba70456a5a96245a538bc2c875c749c295bc1f1df6fc974f094a22557c0dea268ea3c4cb4a012363ff33cf13a9f48de35c2f845140800e156c381e5c15abb03c1da5f55224283c1b3725024eff016213bd56af7cdae799ef641ca287c2ae8c2ae86e390fd7e8a07d72f828fb8f4c829611d041f805b2842a9aa4bfc1578b289699de7a333a95b17ea3da2430b2f4ef3f6c52bad7e5014fb66f8be0d97d01f19810aa4d78a5ed60cc95012d79e49d5d8f0059d2d7ca4571521da0966788c260405d1e05892822ba85036f864339a2d3e04a1d3c3e3a26d3d9fdf6e1e2ec18ae4940777e979295b50ff039aa9faf303091a70fd0aab01d4b36a34ce5c9245142b3bdeee1ce91ae810b7cfd4b8035bf858ca2b0c7fa53162ad96714ab87d78f6a5b5f516b773ddce9550569596ae27ae33a613b2add3ab843ee363684e81afd390093593dd2e4e78d53217797c2f4066c773e6ce8fefb195b51078fb423004a552f851b8cefc97891fe03ba052c49c12c9e2887929b51f1403857e96df2bbe28388446108735fb867051a6e1ed379acf92a0826ecdc3689b8e84f2ba7a4f8c17d68ac95131d451ef584c985fb32400f2415fc1db63ddcffec22a72655c15cd862a1b453fbf4dec42cf58c36eb169574794b0eed6f65950213c979ba2371f860134223247b18290e8ba9512c37caadf655084d945a775d71234f88e845e006194580102ca17b5cbd2b0440cdc7bc08cd85aa46151d07df17d403cf7e2a0eda300ecc9294a20dc6352339a909c74c4407926b55bf2e6e68c86d1e4749a0ff1b71858709dc778d201fd74caaa87ee4ca4339d33b3c02dfbdff85a7f139928182683a57f5940cd98a8b8fb4eeb5fc21c216852a6184fcb06b31b74bbb1b98ffae898125139a3f5c730e5eaa3536fb8067c4d7065dcb97467b90f7dfa7344be99111bfa9f061f2469496a28958d01442708213da32d432b53556e0de46ac800956fb6320680683878d3e5a8acedb9a7410d3675098c95085ea47a04b7243b80b914ed1f72045d48f23bd44d96e3f3073c0bf854d15155616a83148d97cbf09dc50a1a380c9bf58f640c5ac66d14aea4cbcc002c17f666740dab05877de4a40a6d0757ecde90b027fe120435d2d03fa33ec878348b1c5edc4b319e6fbea2bad5b6d0a28cef6fd51a51c425dcfb82dd9f2bd0b5a12d9d13bb0a69b0495078fba4c37f4cb03134cd158e0121b7fa124910655cbc76055c5eca876a336d749cfd9deb17faeb718e6f72f39b711a4cbec96ac20b88f9388eb2ba883a56492c4f3f2e4cf69501fac1ad40180ba22764c4dc02e631babab726f1b32d76babb8f50b2f989514d79bc47c0685e198420213d9963534aa859249554179bc745372f2ce4ff173bc921b3e51bfd1a658fb9dbb0e5d9c6e71ce50de4741089fa9943fe1f8e8f4774f67666903b78118cc6d3cb044079501b71261e25302831751492ba2405e6a62b290977d859e0218a5b27b1ddb5414c044e9e82b68e6d0b1700fa70b1c74be56e449235e55641b888d10be49e912ba37da40e1a5c3367b27f054326762c57f70112038b4ca351aa9e5caf9e195e76a4541ec3e223672842647afc4e142f8de567deecfc74dcd9c7c37382c0b1bbd960226687de506448841dff25212ecfae4d5e221a6743ed66936286497405b87d19ef088b072618d17e3a3533bf0163b93fb2abf0ae13eb5e3903101cabebc2e64c2eb1af0891da695c41ee081a431cde2c980f8ebeabfd329916b145be8ba90ca6c998807ca208e02d176fb85b7962c30ee0caeac003115d3d9a78fc98143944194ceebe75db3d7e1f090af9af57d44e215d8223859b990cd9bc684aaa3aba890a37856cb0efb9101d84d90b1d6d88ad7fda2c6bae7376dc0b166442d97b29d21fdc3827ac2e897f742e9688ba42de9ac22e133f49cd5791907a7c4b22da0e4b087547f2df51472e904b768a21648a5059ad334b892ff341412a7d4217c2ba5ee9f28eeacb56940cebe37496cbd18ae3699abeb4621c0b7a1c9ce4db00e45a9fcf39b90780398d21081ada009cfade39edd9c5de7bdcb2232707895c9fa12f8dc819b4f970a67c17f9fad68f291f7bc775997e216d1fb91fbc9fecfe88d45d5747958f3f68dcbb5833ae308ea84d094b6c453c437641464db3a814da35eeb7c9060322076f5772ba9132057219200217b8eff34195ddf255ca6ada15b2bdd243bfaf1cb524c7bd892efe25c4ea463f2ea4a724d884ef17cf05908d114d1e37f1cfedbaf61684109adb1e6632010109d4fcb69879065fdb62c868498909d4230f21991eb4aad736b5b38e840009ffa60b358cc965e09df697023e26397228b756af312cbd209671343b8110b7cc241eec122a8c2bacdb76c6a94b6aaa63f9a154062c0eef858f63238df6f74b73bdd1cbbeaf2cba791460bf8989d43ade88ec78fed482f01b3d3cba1766f64b6489cd663d125079342ef57d464ca0df443c1dfaaf6f00fe2b8bd4defa3d65bd3549e0d0bfe09878a007025de98a759a58eedb24e4e415856bb2e931b698c9706e673d9b09b9490aa63f03223f10d8482a2ef1842e4f526d0a8e73dc6db89f797a3884cb2bf7be1377d5842fbd83a832f426d829dd72996da6d55149de70f0c99f459e39e50fa304e0407c4b29525033bfaea82f5cd8bbd0b4d0277ad5fdbff72de0d7a8c8308084ea0f9ff0f7442571cc20aaec51975ca378117ff5722028eb2fc3ffa78af7ec7ef6a0bcc53fcb4b551f203869079cff0bd4aa229971ab8a3b99ffbbbc8e70a911b4979a2baa659f14c02ca29b5a02947c6ce4997e907409adf409de0c68d1d42c7f1ab937589394c7eb116094f34c6fd21db8b083a621a6d13c7c3889827bb356058a0c1f81666d043d4eb3922794cff9c8c0082bc42cd13bbc01c52bd2ac9c6498aada52e6a1ed175c0ae4883e8d5497a4a25d2dd7d891f0118f8e93d9762532076b66d490261b7d7c071733093e03aa8439b7a45d15763c8e7cdfb55962a8d090fd668c3c03ff7d128fd9a4a30a650514b74b58fc6ce695f23f49f75a5546a74880d1bfbcd9f929a681c2e1bbe0d3786dcba8d554b6419ab4556fc9fff9d7314b7e68a273c251141726f8be9396839376ba90c1524cdef127106ba60cb435071a9fd7ff86bddea763bd86740253ef99f979a67b9e5a0dd14f07fd2f6d7edffc0a7883466254c3b974bb374959826cd261b6226789b5e40048165c3f23970f4e59531cbeab72bc5eaa078f829703d71ad79d668afd16f860fd1b8d4ba6f73ef663d37eba02eaad5f435db8edc6002682e1ca876609e45040ff7678915950afc9f54d677348fb909ce0ee83b6b51618f2a23fbf7d913cff4b9dd0a3fa407d6da4a22b5f88bd3ff9f85e2dfee8a5668ba7278f3ce9218da01b310317fd050c89af9b3abecf0ba602085c3e579a845eb628be3d7625c6aee1667bc5576c5bac7ca70a549dbad0995cd2ab15e993aec9405eeaea6b8ddaaa5969319dc8e9672c08b02ce919be4cd781ee39e789f2893f4605c643a20a02bd08647e10e3d18dd82eb887742984c6e89580536cfdd4fa190538593468e9e6e819b12212bafd612072cfefc9fda57e262fe1ab8c272f5b3e46b948a244f38cf02d0498c92fe46c89509a9e9357f9cc025d6511777dc9f819820d63f6a6d8d1d200290cb84dc5d699fc67c0a9840f385809648a324a3fad85d0b5a0eea6c57c350dbefc530ef437809a6ed8ca424fb36c74c1dc1d5cdc0221e9f391781e909f5786c7a88d975a183aad43f2ac991eb6c604261e3e467ea80c76d179147c0f74a4a0218ac5cc943bf0b78d0b1903365125c700e85409facde7c5f86b94c72d1afecc6cdf649d1cbd297044317123025a8fe73aa1ecaf8ee23c433f85a2cefb0bccd7255cf22bd17e926a2d75528eb441075fc51f06cbeda18e4d2348c61d9f25de93ac5d8db5b4ba347081b7ec394dd3ae03d7e5db2c82f8cd8478cfa0846b23b228e9c3e084a175f1d474f3f533064ddaf9b61cbaa600186e6fc28925891bca72a2e24524069e0e1f9e90428b4187c6719b534a20df3a9c714c87e49de8a35e8901c0b29f6aebdffcfde47aa4540f94b7161b3227271692c4783b31564a49d7fa7508588bc89da278c0347e088fe0521ee5553e4da9b0976916968fb09ba838d189adb0418c2774d437d9436c52cd2cc93cc9bc53c18211407914d2809f46863940b0d3d43b64bfbc8e851e02c35fea7857a6e1a5bdd1ab0d320501740ee2c17e28409cd6866937e2e6b69ee97da319b8ad9e85ad13536af6db4ec907ca81f02015d47ecbf39d763098a5bbefc0ad60f691e3e548f3dadf486daf61b6d581d848732d2e68e873ec0cdc27e96079359f931f0ecf033fc8ec672beffcc0a4a51364cbec5a2b2414f40ef954c623a00f3376893d2bc5849ada116d4fe2a73fa0a20a6ebbdf6f756c1208a66e74d44eb9b61b41fb7299d345072807c614386122cb43bf38f41a661386247a41353cdcd55278d6cde6bc96ad1db50b121229492a9ade38864e9ad359100b159291136435850317882090c64e8f8bddf1be5532f7bbc7beb0da74ca545d679de697e3ca9e52bd45d1d7877802047c4b4d36ce5b97a2986ba77d95900caff55aa618327369187aba1d051adfe0c23613ecc27cc4e56509eaf9b929f63199a27d62806b541dcfc2a6859c0c993159b0453e60c55a00cd48ec19482d835bf8b60b573459b1e3bb60d38b0d46bf8720e63b7dcb6f934b2ad7566ebe7f17526a640d70c3afa411025fe028d19835bfe30972ffa6c71990b7cb1937fbbd4f25529385cbdfdf9a7c9d2b3fa5da30bedff6d76e5d3f9bbaa1b77cccaa54a506d3156bd3825750ebe9ad06414ddf77a593fa25598d5104762873036287b83d7333b4ac4611bb048c4de56b34737a48e250e4e7062f9f0029b8ec715f0654b9859897e8cd48cf76247ba12886f3604751356e1e9be40b05f6e2beb92598d66f07bf7cb122443d217f954542ee1eae85d7391c54a7e9fd06710620cc00749c319049bc25d4ec5a30c8b4e4f8e6fd26d27c78dcb6903a56291991f4b1137c8c87f6c9009849e34360f5fb6d603e3e8b142a775b3f4a3b5e99f01c53d70ebe0ed9706fe9273ecbfe25d146ac2bbc49ee6ed47d75da0f1980c4b96fc64f6d2d5d2f553d841df16a14f7f3e6e4622cbf9420cb058bf38ee0ec371e99ed3b060ddda4fafe455e0b851bd6f510d4e61811c47f8be8083d61c2ad75bd8b46c88f83014d8130f4df5d04e38b4e8bd72a3abcc3f51c8126b3df9744968827007a47e559a555bc6063097ecb9a726a931b20d5474dcb23376b3a66ff995f5a5000b37c74a1836d42a934f823e525615f35e4305ccd8ddc8d4e0a9b18a8c9018cdb454e9a07cb28d6a990bcf5bb6a7ae2492ccd056c24c10421b4beb5cc44b4e8aa0386fc46cb7746c2e9fad75c17ae4181a9ac30f743f6665647b3bd55f957565c6d76cf9b910befb6207685a9e3f535b02f0a8519d9a22d9d6d0400567c149e82d271c357599f48062b2c775ccadc20b73a913a007d2256deb3a3ef46470a3304f1289dc3172990ff3c98e53e1114627ad1903c7ab6723ca49a1325173a1aab28de53479ef3c018b78a98e0a5fca13aa118a2f7a973013ad01cc1046a5b2c19b1a94d1612256a0255893b9ae9a08c72f015bab03925cb2d8323785d326ff1444cb4329833110872102ea0441cc0fcbdd26d03799d49620a4d43a1213980d9ff5c44e8475d84b6e74dbda40e5d78523122698e40511a6f6a4405d31ffdff32849cc9200ba209a43ae7d4841e0dc746394dfdbac474cfb732f574ae94ca59e025f650c94c3315afde79c89db54e12255add2596a7bbddd99161922e1f5bc822767a81b5f12f5f67dbca54aa158225274ab708f04cf0c5782d1aaa7f85a1f462af2b01cc2ea455681ecf11b757e6bd81d086438321094eecf7fc563cac8e319911a28423b61a83ed51eb63fd6eb58d937a3fa05c0db0fe3cd3b2f1b8b531201fd7f3311f9884d46e344765ebe458190e0abf54f401e9bd3b57c138607c6b28af04e3c0ffdd00310149bf7f5758f251430c11e3b055ae466d64c994d74ca10798bf2eff21642a6befd32cd0682768fe8d0d9e11d7111449ab68d0acd55249cab66b158c3fd0f756c115c178e8970ae2bbe28b5b56e851c5db23cc8dc07742312809cf4dbcdc99322ce89dea597bf77aef7320f138bd81453783a766aae95c07340fb9a8f1a6c0d82005d372374e4c5c09a6259d467d2333aed42b56a4264a1777bdb5f97aac6ba244f4e802d959805abcc9d9ed6f5e091ed2ecaf5ef3d756315a21d1ed12a9b8d7cabab3bd57dc7c6326d02d703786641fcc82b8d63d57003d10da7fe15ac42fa854946d37e6fe5df920cb5067439987992a334452b47cedc750b58b063fa97480e3ffd50af042f6af7bdfb6b810b98fccfd670bc3824271aa89216b0d40be15e8dbdfbc026558a4ee3b15303199dafc2046c84f1d11d752a72941942314f6d3989a9d3f2d76ac3063f25b132cdb9dcfe6e06ab0ce20377cf6bec0102168e66d6b73a804e307a29f47a59664ac772770ac31edfb7005a59a465a8e5aab552df52fe4d52696885689439dd985d5aa6e7926d73dcea15d1548acd72dfaf83d6bc2daa5c3c23f26126fdd3bbe88ab6afe9a95960631f1223e796445fa979a6f5fd1a01f0da9642083341d3f92032d1d8f42dc3ca036bcf60c21cec85397ed94e9b7ae02fb07eca01eae0d8598138166ae189629382195f488b82b0a4c34d5cf912957c559cedb9836e367ea8e1a49982c6097f20115c9524a7b0a065aec8fb205676a1f3cf0ffb54b5b00d48cf765b5b38b71dfc52bf67a3fd0cb9d6fba68e20edb83d5b66a59432d8492aad2ba3bb8f02b562b7ef7161888b0e98d6b72615bef17fc26a25a6d01abf143e810731c50a0872158b5d1f7c35652e7fc41e110329be000a1f9b037ddfadfafdaf6c48c67179ce3a10147cd525ac5967eda4da73e0691f06ba1c384f9067876549174139fe5aa0d1323c77056c268920789a3b625e39ca9f8b8421ad5553f343a87928bf621e30389d1881101ed00a383ab89927899adc20cdedcd5f25da2a843452d98f31b16aeceb1021943c1ae0b28a164ddcb258358077c971d5eb8de037b4e41739f1a982e63a6162f7aca2b8ae7f476499e80c07924cc4a242e27290368c707f1b97ceaa5c8cccd136a09f96d803b7cf05e10a50ed0e6104020ab27a4d511d784569ac0e1aa28916eacc0e841dbff1014fef2e95ac4e013362ba2b5861cc8b113c8f9497442449b35848ee46bdbecdcf256c8ef5a7445d3800a77fcc879fbe6043aa442a5f15286f9b790bd2cb9031d4dd2875abc7b075751b883c25842a6c1a4b47820e888a768e1105c068c922ce7717d2e5202f14e33f88c49cc41cbcbc3d702563cedec74e9bba6cd0f451c45206876f555112a6590099ef917eb9dab4aaa14c4433793d8c9f9432ba85f86881685aee5b24b31c34197436ca721dc3e94f7c3bd223d6ee52cc2b3967066d502fc019efb41e3ea62570dbd18800d26391130decf65950cc3a199c08f827b48f171d3324816b7bccba84090f11ee408e8089682f2cb31186077c9e820e37f202304248ecf296a73d22717e294761642a3af77f0b5d40dfd0f1de80b1c8b624686002426a8be182cb02dd9fdcbad140b3227ba3693641f869c9c823a0ef05e674c02f7776437950c15880cd9240e3ea32bcb1c8ddbf9272f37e52578f2f6635ce250d2549080f867354037c4777bb34bb6a3d5aeaeaa3e97e6fa306e91ec2c151f20ae77855a06ec1542faedbc16d6fb9410fde2ef0dabdc8165c5a8d65108003a6ab7d0bd0958bdbfd07d3fcbc66ca5aaa6a3de5edb5af749aac5821e9e9e6d64ac7d5c3428d9c38cb9cef6b6b83561c47a81ecf8639af0f8918339e8979582af92edc150c9e4bf52eff828e601c1bbaf04f8f7c6734e3ea034069f5b10b06634fe5296e11767c537d07a6fb01f1edd22f015d59e978d5bbe0d9acd841f10b13fa8c4bdd6329d2f82c24589503fe63249b62a71f0fb39ecb1dbff9306fde07ea97930340851cc3ae7c717e617933c65f0c7e52a414641a01fdd7c326fc08f9ff75a10585c45ad64fab939e0c63688f841e4b8b865a8ffe5f9debd3ffdc0d627b442e9deca39095bf60ba07e71fd585849371c07becb25851aaefc59b2e1adfc5f21a88303d8397ce121522f3428f17538b160c8e078d29a56de9622aca3e08e2cd8e562093bd354843238870043fdba350746790d03e6fede1329ae0b68e61821cf7d7142b104996ae09e31b212d99745c503ee31a5fdf6cba36d4e96a280fbf6203f950b354a33e91989c855e906d0252b123bd267f22dba7be308225b9045e35c08f3c9f254ad505b473623afc981960d391de07c2cfaac97050d16e23f08c961b951657c00c7b93bfb2f09dcaed7cab57751836b9a636dd995560fa310d22f1d84b9cca2a29bd24316ba17f37aa537dbdd4deb4f97a5fb0e0c059f9d8b1d6c049626b1ff9131487a57e63db6563603d073ebaefa3f2671d0947e570ebdd58160e8d98487ef2109455cf24bbed4d6de2565bdf5690485c274f34791fb3701bbd6e851b8eee6b0fb123833081d8bef5fe0e0af8c008fc96921a8baa1ad2777948711c2d8747a8574a1e1a9870719f45427111df02d01d56f996a941cc8bcab28c5372786569021dcb2e61655f64eb75bc00870530ea1ab1f7e92ea1a3130e6a8ae11784a13b8fa90d6811f4cb558166265c2118b980e5a63556ba001f479c4db431de2cb279405715c0431e121302ce23836f0be5721611a8af5e8976482d46c8bf4eabaa93871d99be1848adc76642f680097cd8b0a61d292bb76349fa360e92536e63c8560f9180837edbb6d8eaa6bba5436121ca62d6c02084c74f59fec15447a70fea867db9bb70e8d9c1904d4906759c6221307aa222ccab510c221c5ddcde4517e40a10ec183bd5ba81b63562bfa0d9dbdb4826f5c3b99f6dbd6fc17f5d818551b01f51425be613536ba64d2a222246c64da524ed427bb605260d22abca8408efa2cbb9eedd706ea9f9a9e5b1356a140bcf2d7b6ee38dca5a4021b0811f4a9cdd245d097b7ac811e4fdf043f1a1008b6443b195d73ca5787425489e35c96be9482c6827eb68a156fe14a8f0971395826f0485c14127ecca1864454f430388ee399d3d4b1e1bdb573f7842c336d1484ca18aaef2caa7da594d597c67736c71833d9b28e83ee0b8e616a77cac0714edd5c2f7d35a285d8657d5455204a8533ae4bc5ac1b9334aadb6307b46e4f0e92e9be0b47c1030a8dcafc65bf50581b3e7224eef16bf62b0c36806bb709a921121d1f231e48b56e43fdec03ab040530439dc93a692ca85cd69e320dbe0014e19d4ed2df17da9917ec9b265b824c9932ea6fed5bd7513154a6ac2919ba15e55b52880e4f5dce204cff21d3dda27ea13382608bb0d50fb286070668e61227549095865d837a842bf17cf2c46e718ff258296bd3bb2978ddf0c4d5e307c44310f34edf2720b1811e470e08a35671d00cc63f4d041909858168cc78d4068b417fabdba83f09508c22994c2220db677da838ca08e32852e136133176efd5fb1d4dbfa40d72479c7603f82c6ef93e72eb08192b32753c075994c3f0297da2373fd0571d60f29ce2f679b20396e69a80d850e31041372de39bd3dd36f28c30c73a7aade81c08bf866f088ac0c8d60970e9a2d414f2c07060a4010f802081d58cf8205508b70a736094251db67b096f96bdcfd2c3880e9c75558a808276a0418b1509842ee4032bdc0d09bbd87b01c3dd9d84b259c1e313dfade1f0c4772b707ce2bb351c9ef86e05e490590d8bee0fe021bfdab6a432f528ce8ab336803c07a37e73d580e8f68172e8ac8609b61890d8869ca8b03ee0e317db56d59351c0e292b8c421c46cf280090aebe33a194b391310570eaa4e3c564c14385e6d5188ab090dbea4d8e8c45b6f008f4cccc6a639b0b3feb6f0aa32dfcd0123f3c06a3f2866c3730ed838061e8b48317b6d9c1dcf41759f0302790328daa998cb474107d9b862a6443bc743078dca7842d3472de7a544683ac7d0d2c1605c8d751dc3ff0ba6e37b9b6c39206aaa03d5817a0c0fb876f99c8aceb059c9206fd8b3678cbe896cd55c9c7297ac8a6da6a39e7d33eff5cc37835f0f9f997c3dfecceceb79c7cc9c1efc66f8f5e499f1af67af99777ae6cde0d7c367265f8fff35b39f615d5a3d25cb1f7e94fb00306a74e4b9a83c81a8e0672777496e6a1940e29a5483965ae320097f8cbb254ed5de798e0fd50d8dfb516955564b870a0e208c54f281f8a3b207c87b2a7358c0a33207041f15be40f2a9f803b247e53d90392af800e1a79207c41f957d207f5177ff6583bf209fc09b8aa2b87dffda4e7a9600013272c7e0f8ea20cf09412c18a10863b1c916a123f0e2954d222f52ca8640447a958d17b31bb0be60da90fbc28b0dcb2fde6e187d816303ef8b141b7cbed8ddf0f4c5c46ec058d74b2d619b56f1ae34d1f37bd20b59a4b0a333930acb1bbc57f62a81d7a9b9b708a358ebe6a234883669dc47411bdc28e50ab0da6f2848b0e7aa60d3fe0205fcf6710afad9e72b786f2f4f017efb3d0579f6fc15ecdb7f2b18c88d29dd32bc1b51207c643a85748a0f7b4c1e71fb8b60d665afcfeb4b813ace57aa939e19f6ddd3faa4d8af7ca5a8fcef725ea2f3caaf476f95c747172fcf1e7db97c3d3aaabc50745af92dd14be531d1f5e6b272ae86be324c8e39ab7d2363baa3bac78d2323159b0d9bd2cf5cc13ba4409ac7741a14b1703aa5bd968279379a8149d0bcbd8215a126b67eae039dc14b2a8db770d41cdeaba84bbcb1a84579939b7ccb2b8afac14b075585f706d4b39e14aff0513c93af7884052447af7a53a245774b881c5551c01475a3c877ce9361d65d744f9606a1485570cdfa4f25ec4e3095340315b9f27eb193e54ab1815f959403d52b6f072e578609ac97910fecd9a9eb45b3d6474aa954e4548c25a24068b22d5b39004b543e738f1372cf8185c3391e204a6b5c0b5c57e036b902c395e7ca83bbcfb50717cfd52966ffaae1891d00322649a0e1baca503320572a57a8660f01c28f7566717bf8bf140fb5aebcf225a737124b3f375496346e2e5c5abd194fb870bd819d18560846f0af258715acc80d44a37a5580403d7e0a864fc4af437f9ad38009ea92b11c20c12a1161525022a5c90d4a2cde859f541c56b67f81538d25f22d2f4437010495b9c42f70595d28e5a181ff2b8416610a175805446bdb1ab0e8da601d831b0e85eeed145396ad07452cf23500b141d8463273d8d543cd2d73e54a086f0d7dd57071d5d931cc00a42be4472fd22bb038d8919d9d5903e2c647434aefc113cc924922585ac9ca01bacd4de51fd9be70da567082d61bacd9eb4f396209fc2cab67e63441e0588d87c0ae9e7a1293226058898298544e99ac004f23e0d448a30c7d8d0079cf5ce629022c1cd3e242b59aa983e69f3eb8a98aee1f62e2cc38433dffe0f3e61b8703f93a94050e1b37733181c1aa0271d360b87e5c8dc96bb2232f53300f575a367958d703ab9c198f5464e28c7bd6e13dbeacb03dbbfebe8402312ca088d1790a777da6955c38efbb74f8fb90b0797933f459c9a10f17ce9bf2a243de8905851529380ffce54b11920aa3370cb5d9aa96dcbf57c3408686030f32cfdf29870be58fbcfca32da7e21e4cbec105734d463e94bfb6278c1cebbe5ab53cc01701b043268a87d4864019039a4a7f157c6929d2cbeb8005a6053642d83efb07b561c8d9cb0ca16206bf238f1fc88855bb7a088891f6ae4c0bad628a18f7662354b57b878f7b2a132a23970b46c246ed04063465c41df212c5c8529078c74ed95a2164e8fecdc664a33153a72f7d9488f185d2ebc17c2d7bc0eef7b06f834e3bee59239120a0317caa2e48027864152be342ce3ce8ed40b7c6c25d405021a802a32c6aeb1d1aa15cfa27bccecf377dfac941a487c97457fad604689d52873095b5d8fe302f191dc7b740cc5ae32696271c9d62864eb50f5c19538a5c229a31981b871112965a67f4a7955ce1dece997e6e78d0332c68b5fc849960c6d7ac295daa04b2ee04b4f1f9237fdc32fe90d197adbcb88c442097a8ca6c5e1730d575a540fcee8d80eaff27d92f963ee7f171cec538b4719ac52163e6356a463b837bec48a5d1340d3697f350e4a88a5c44e1eebd2610f0f5512ab0164baef89d83e2dd09254cc9a27f9057a14be00764dacbe2747d72065674f6cbaf4a93d3860f8346374e5b4cf1612d9d916cf35696879aa1dd5894d9205f171f62a1eaa529bff69379b5328d463ab3646facfd93007fb188a30ede0a145bd4ee25f4ab80105a6714227b210b76dc652f1e1157d7f0b8aa6abddaa674dd47ac2e4527cc389b1e681a807339f324bcb58b053bc88e24c47889a09f81d22abb7e56c678bcbd70899b1e42abc8552e9c0df18c2a7e57a47d9b7467e7f2ca562ab3b5bac3411da95925ba2f580226cd0933dcb14c730939679527ea9c59813c01d596d67aa555406d27ccc9925cc634be95968eb63695c4a633a1a70608c72c5c95a6731ac28ed6eba8a8d437bd474230ce009d2fc2af868a53ae5372be2c6eb68501a9aa1037604d777a9aa0114e1db6b10c7c30e3c6105c32b391e43e4d4b0a29f2a52472148281ccc84e3d1e0efb71d7d4b57db3f8418d7c5370b02463790c5c3598770686effda23634f798b08f1ed0cd1ea19449eb33683c15215255eb66bd6e93e972242295443dcdb2bcc79db0c66baa89ea0dcc4fa3ce34f463d80d00b2d1a1429a4d3a293b375fe9e0eb0718608522dd1a6e590351a1d99dbd73f4b38494237dc703d8a1f8eb017bc67a3b06192d7000838e7f63993914f15c6a10a32ec727f655ad9af056226fbc5b9ceecb66f6ce14bd5857bd78f04d5ef212fe5b93857859c131200474ff40f6ee01c4605252d92350161f19da1bd5e0fd270bcb43e9c89e820bfe1d3b2a07d6d43d2cfef45005d08b475126d3034ccc67f9e594827c1cae30c98569aae4a7692af7552cf628352de12594ecec885e1265b839ec4b3522f94d80d2789c11093226f83677ddbe71b362d2781a22fc93fea50658344dbd439a4782ae72e87a22f81ccd3f80d4682e0cafad1f2b6bdc5f0b1e13317768e7e4aa757af2214fc1a0683299687c699841c62f9ba7f6f5adbb8855ea57077aa6729e53dc3f30585d43647b04c5e04388517e4780ee4489d2098484b8b38251bf0c44431689aff7b53a0a70cac644e6032a477fa95d40121671c6f2be5d9676858c59aaa38ecdb97e85118e39355e54a42c360ef90d3ea30734f59df73a69806405066ce6aab129ea3776e90eb80bf7a799bdb5ebb3a5527929790d4454b965759592cbb5463202f8efa5262219d7da9652ca450a5d0abc0a59885b34f3546279d2344deb5ae5f7442bf3071b7b44334d3413cde8aa6b591dcf00dc065eacf668d881c5d11d5e517e8758d8700bfbd50e919c79735c99b7289a1915a36bc6a10fa013e9ba32387fb06cc71e6b96f6a6add65ab3aca57d59cb7ad65a4d7bda32a700d6d813b6a9305b4334873d7f411e3b9c53a64c59813cafdec43e6c3695b7afd954e601505dde7c993d2ac483b469fe7c8e5bb1798ba90e611c0ad69839873d6126f4091ab83405cf2c9a2541ac8fc988e8fdc13e184ddd3287348509a107bddd945a5ca9556a955ae3153d56a58d4ece7b07d8be43959dbe5f74d69649bd77c2f545831eb487004bd221bdae4cdc7eba9d42b4df157475b2fae3b9608d99add0f7275c5d15d32766e005a844df7fb19d0f8abeb7600c567b5be81d16d1b39ac39645825872955a16457ab95c2e97c763fc811e7ba809765339703e88476017281539825872955aa5961556668b49a133f50a2cc6700b7d1fbaacaa1ea9e20a8b6a854a5819d2eba6925899ee7465b68f5044279e8c4dc4255ca824446204b19a65a862216ef9f453c661cbb627f61ac10e6b4557a76fdb5304717fb00f56fedafce548afb23c6ffeacf7fc1e45d3ccbbcb21abcca2d939eeac8f11cdae4c5d55d312410c5916351b8218850cc58fc39f3e317d82064974992b3843c539e52d766548972be68ab96218e774d245ba4817e9ba26e935ea2d899539e551e7a6340e648e3a57264453f5671e75ca8cc77ad9eab34210b768466d10444f0002b04aa688614362bbd990a0aa1ff47da9b57df0b70fecb373fac03eb0cf87e7d373faf07c784ca68fec333b7d641f19e945ca4819e9b51d64fae935987eca3830e9819f3a0e26f393b3a9fef4eda7d740e3a98c83c9cc38279cae52c75908289b6a7e8fcf411f4f25d613302885412ef182b0c9669cd4e92a5750cb844d960636d9d315288541af8c4139a0577de198aac80a0de4040403edd86bdf2027a49745ddfe9adff65a16cd4256bdf5612f92f2c12c2a6fed66f99bf761de8e2cf35b34f361862cab32f316b5495bca18dde6eb3d5324c5aa66547b33ac09166088de5a26e558d43d29236527651c276e3195685f8120bdaccaaa42566873aedacb7002a70b9810b2d0bb2556f332d21ba575905a50d4fd3e9132ab05e94551f7f7f3d171a2a3a3ef2d10441c4cc7e1b499320e9f837662dbce8ebeb75788bbd4da6eac6a77add33f17b2fdf313fe5c08e8a7edf84240a6ed58ebd1a298b41eadc706944df6a09fbe6593cd261a4e07bd86cf4d3781261a4edfdee3f42df5ed424cda6c3b0ea00cc2eff1b990543669599b7d5838a69cf32dbe7af6b9f9b8f0c7f571d94fce07f4c9f9e4e87bfb035108e6efb798a681ccef0d09fa6e3ca8a535b5b30e4008931ea07f2e4448145994281c3733b5b3b4b576ad12d319207962e2175d6b4c346c3fbdc7f65316c2a487e99f0b3199a72b53ed01ba10533699596359d4279beae9ca072ceda5dddce87bdb0351bb1947221e691da8b3d44eff4255e6e9bd1df67b22de3e645d99ed26f327d10cf44f369999c78df1ac6e8f58f3b7f3c12e0fc4aef5bda0c41f0cbe25be27166533d59b6836832858a0cd5c330ec60f0a10de4e384202f8ec0ec4fdc1fec13ed807fb601fec5694d6df89ae2cb63124b834d5557bfad35a257aa11f28aad4b2a51f482d4a2dab2265945a5bc5475318132dedd12e741727743d40d62a3f71a84b4c99d80982ae351e1562a729cc072c1d7aa7c5bff00258f39194e074456ceade05b046bc27e2ae0582b973599528efaa3bd7f74a6748ff6ee9cce8df2f9d09ff7da28bf744b87389b86b892e7a0e5bc238a76ff87b6253f7a493b83a3d3cfd83dd0f77452cea73e64a51dfef4f5824c5a6b8716b01b17c56b429f70beb450c5587af21e95573ee70077ddf8277a84398c373d8ae885545e0d3dfaf88026bc4cc82f889dff9659cd3cf13f8ef5f8ec0a7c1fcb90072dca7bff3f72a58a3a82fefee1f1783a67fe0a0cfbb00eed0f4997d743fefe1cfeb509dd7757f01dcd16595174051dcdc3b1fdccfdf877026bd2c8a3b0f03b883cb278bba3f3349c9487ae97bd28ba464e3d1778302d6d8bcc5742096371f809a01ecf896f8601465df69ca44132f4da9cce9f6294e537087a911c0b4820032689b03718b66a299dda8199a165c780186aec41ac63965137fde0e3bc39d3ed399f3f430e84ce8f46559be2c2bf8b241b1a8fb10dea4d8a2e0f0068537038903a417ce49468ccfb51d9719af3060e4b09dcb25c6edbb965559abfaef3d18ab499945915be81be610ea10da843c843d84add0879048582434120211bac22395d3a857140e591685737a0efbab392c439f158bb4055f320da6fabac2a1ae407f01f15c50cca25e70207e30e94262654c5924c5922e3a83738413422487a03338ad5106f6a088e43f1879aaeb63c84ace20c90cbaa2a7e7ca7c5e7f532f0f595645fedeab15ac790565d8747dc91bc665f8803103c665bcc038d52f4f01ac79c92c88305e60a060c0c8202ca244f95f7c3c06f6a088ff4bfe6016750fe3a71ac66d803530320be261fca7e08e67d016df138b92492182649f4d015d7f4b124667a89629aafc60f6c3b9276556d39b2440ed6142a108e2077abf604a633da065e87ee85a1475ef85acb22ccbb0c80d91785044f3e751006bce12d7973d015dbe823a36a87388a2eccb5770874897f7ea779aa6697e87369aa6fd86b1050448905197ff71bf60e9209c2e0fe4c72685c5d23770bafc0da32ebfc322250e5114ad5407a84b4a61c89af2945a54e9c940bd017c1b6672c23d7c452d0b5a8d217f6fb1b1a76b75adb1e703a330df0b68ea9e1c47a19147dc1f4c6f313af3df6f50509afafb4d0aaa2a7fbf51413724d0164cbfdf78b00941df57dc551bf519d39bc29b14fa7e9f3449555b8ca2ee395cd227a64b2041046dc6d0960a718b66a6be0f95e87bbf431dd077e844df87b0980e776e6e4a0722fade624ee70851b7f0087b03f1f70af0552ce282c2dc9b58d40585b9d7b0a80914e6fec422291675714eaf986a0b2280aeb66a41b30a9a6d375786e43851bcf748d89511714153f739e8fb4deef8a0efc32324b92392b029c43df6b0aa053585e288277a8fac96184ddddf9baf4f88224da1b82142ef9698be1fcdbcb99ab7386a9b45330a63a188560a912e5144159a00208fed9e0c9f4a344f000280f505f82aa82b96a14d4cf58929144124417338d49e4a1449c1d9f2d68a420c59a29945dd7b0b85f8aed511e97ee88a7440d09995df7741d019954a53fa7d27049d21fdbe1b82ce8c7edf21e98aa033e1ef3b23e88ce8f7dd4da5017fdf1dd1214167bcdf77492a4df7fb2e037426f4fb4e037486fb7df7f266f86c0ca7699aa66982e6cd7b337cd433c067372836752dde621675bfc56c4c34fddf5fd7d2f7e5ef3fd895b1e9e1abcfefbf1dfb42ebabcfef3b977d01f4fbae75654ebf0f5f56659e5694f69dc30ce87bd18cced8df8bb8a033e7ef455d88a4d099f1f7222fe84ccbef455f541a96af7c732adfa10f14bf45e1b728fa1e91545668ba6f9691a455668b669fe31085a914c6dec4a89309bb586d4fdab77c40f625110654e9469bda2eda7e32fd80362ed4791f280ac55aeb0c54ca9e5ea40adc21a00ad8215a05ec905205ee10db712ec8f1742a4acac821c4f29b948d55885a994da153cdfd3e842b87eb1516557be8cd4c349183c669fa84098ee8dd12d3cc0bfb649305f1f81c0174f5a9e19f8c03935d830983d74a07176c60ab0adc1e62abcf71582aab4fb6ad5c63abfb3aab51aa70c106b63a7dfbb62d7db79bf1a6c9711f0e6ade1f14d6da52db64be2b040e6e459f305d793366688b59d4fdb7ebcbfc5a5fcb6d35f80d82b68240aabec19635df60b5bd562f92525fdeab1857ed5a55597fb0a6cc2c88157f304c020b3044d7dcb9ecf96afe34cdcf40dc5dababab91cce73c1821e2732a9aca9bcaeba8c4aa139b2da129f84307f5bef1d4bc4d60c83d22dad2ba44ef5c36592756098bb24e3e4d65d002276e598e325bc172abdf396c750e4bc1fa1285690d81a7e67900f86e1036476f6ee6bb407034df35a2e9da42b52425240e909270418b1f75ca0b3098d56a66c521ad61ab714ef7eea799d5c9c77b7eeaa6e3ef2da6c374ac556dd62df6dfd4c0badd7c38d0f7cbfb832294f72783174eddef715a5f6d37f30e6f4c3c4cf8d6e600578cb3dda3b3944cd77b307c39cc87ac17ea42d4841a342147d31a34e14646d31a74b1830f56440c6d3fe9b83a844b6d718d8136718bbe3f8859e84bca482f4f2572b4d41aa635e8a205dac4215d63e2b19dea1edbcdcdcd8db5f7d4401db624bdbad62f1129a22684684aad6ae3bebc88a4880db5a596766badd61f5d55f3f426ee7ea0303e501bf75e0563f0a103fd8a638f0cb4538ca802baf0c2493b73e8175a06400035d55614ea468dbd158552a1c679c2c0c030394f1c77fe40a4f381c25c16bc8f36005bbbdb123dce8a66b614b26c422321106110a12b3c120e11220989088b088d086f44335117222e4221ac05555b69d040ad80a2da6b8979f73b492f1de576aac4b3b400cee9e551a72729db6256e5a9386b59e24983460d93051b30356ad4802165a4ec849980b5765fc823003904e9a2a87b0beae02c16b1442ac4fdc1e84ccbf7e7c41462d7b57a10f7286794336a625530df8902eb71c2a3131beddc3b72028a7e690dbce8c0894dade1ab619ec36e3757a6d4faf576b3dd742dd473d8d6288b62dee218e63d96babc517a9762f42eb550788273baa691328e13c571fc51a48c947d301becacce9a74b6898e61c62bb6c1ce743dfdf2206ed10c858ba45899d3ef8cdf7b1aeade6589b689beda48478f94c054935e57c6c2ac1230d82a615156168b6279765e1cacda88dbeee84dca9470b9b1c1ce34f7191f75ac8b1063139722c824d099f2f76416e4167446fb3da9047209a414971c5c7470b171e1c1a507170bb8f8e0f2834b1117232e40b804a1ef0ba6ef77f47d4c5f1e273db051941d3bd3b1267a8b5a8a175f4c118536fa6693e56660937d3d52c515a2190a533d5242dfc360abeddd41ec32b9834226615707d1f34e6c75d5a38e1d75b491a56927a65ac3a30f28cc7d098f3fa030f7243c5e516ddc8ff018843a12a1a2ee433c1e81c2dc8bf0888451566ddc7f78cc82c2dcc7c0a31614e6fe058f5b50987b1878540285b927f1b8040a737f3c3281dab877c12317630b1e59f02885c2dcafe0d10b0a73af82c72faa8d7baf2c4bb0c66af654cd28cff32c47d6c8aada29733abdf78131709ae3b873a11087bb561744070485314261ee2dee8a5098cea5ef6f0ee216cd5038ea33cedd3bd53abab436643f189da9ba25563f1fb4400982beff9e7c4c7c4ddccf892ff641f145f14189f1fd4da1ef77037dbf3f2af4fd7868fefde1c0e5fbcb81beff74a0eff7b703fdf140e5be25566948af6ae3fe5a1bfa605065c69efbbd80ced8cfaad0f7a3ec8b628cf2cd60d482cec4f8fdb8059d7951029d81b1043a433281d29c0b3ae3d2059d199b40675aa4d019162fe8ccca179546c5de344dd334ad4a2c7f5962596bad1c68aba6596b5f6b8eae95c27ae0d2f62888ba82353fea140d639a372f03ce50b596bd1357edc1e0aac79e4a23e3f7a30fc61fd099f18a4a3306a1aa462254d578841109a36ccc82ce7c3098eaee39ec695f95866adf968250c09f8e9b815178b4a913d7cb08691f500c182dda9e3c3e95a77de1b35334183efb458ecf7a51719c9c597a25ae5e005e94764a9e284113adc34c625136099222362e17f972d99cb090cf4fdfb010263d3e3f5d08e8db4179cb70434b805e61838aae8fc0e782f26dddd5fdbd695511854857f48ad5f6d33d056d34bd42ef0ff684c25cd3376cb23f7dc3ff7c834aae13fced7cb09b32d1f0395d9d6a30d5501ae900120d4c599d5ec3f64f16c2a447ade1844303b2a8a2083dacd5299b6aa6a1ae4e7405ca37f376537390aaeded0787acb065a5d8266cd18c0b152439024e122cc842b62a3d46ff164b2046ff9e4af406e011c09e4c4aa8a00909c0251fd057894dddef300952e6c2dab95cec83dd54175b3443005d650be3025402fb76aeccd6d52944edd56ab97375ad99b601bdaa2f4b1720d62354cc34e9a68ffa6f036bbe87f0778fae447b51146d1fba2743d5f5774b40df70b58fd01eddbc0567105db4396459940f09c4f8305fdebcbd6762ed1657eee54dcc63070f6d4b1eba7c89429957bb9ac943f79080b697802e5fde5edbe7c76b370d50b9ec4111cd6c43e91e4d0089013c5abbb7a3ab135d2fba07f228b8a3bc798ffb2caeb7d974deee18d3f91da3cd9b55cba6339b377f4d7c1efc072c4077ee1f700055772ff136afe5fad2357047772dfbe8ce651fdeb59fd8861833db10a3bbac7907b55b708797e928df70b5e866d642f3159c217451c6bb02ba8232ecf2d601fafc079c61865d5ebbcd1f7006abf70d5787f216724119b4ace9336ff3375c5d2dca7c65d97a1d9401a17f39b41ee169e92e01240688f508cf8d0efd048107e874f7137f2ff11ea2cb7b78f3d0de4160cdd7c2b272dea3e03e0f026328b9d3bb86ab0e3971a4a29d845d99db22ae849a88d3bef3fc3ee08e2f54621fa19fbfdd73d8f31414bf4391bd2908e8f2234b4b802e17a0cb07e852cc3bcc17e58fe8204c53a28cbf2f3ac6f482342d6f1ebacc9b3bf810e7ed1db421469f39c8f9d02d280369c7f9d0bdf2ddb513ef21faec516ab8c7e9d5efc43bf4090cd9d5749e7bf913fe7cc3a06b166f1e0af8fcf413d3f0c9a7975801a04cbd500efb6dee2eeff0ae800e7ddea3c79673e80d9ecb36c4e8d06ddee06bcebc8754fd8530e92e780f7169f023de3c34688aa45819ba2ac978c6395dc62948d524d01cc24373f74adf228a84595c6ab7b8cc16070713edbe3e1f7afd9629cfebbeba7be8145d19f166953097721ee53d2ae0944359019f4c6fea047fbdc3ea2efb304faaf16e66d3cc7b88261d3c07d67859862a838a26e5edc6a24452b658add87e8bd5ba41a939648966a2198faa6bb9384e146d5eb27d39dae28fa6e001ba2416756fba3bfa3a71776a8c87fbb6d0166bbabebbb1aada25d1f774aba44c260be9980189d06537281bcf16ab2dbd3f58d5a0cf06caa4d7276ff9836255a6cb92c1f4a63298be364c10af2f8b664145adb11d41aafe7a4a454aae25887b8b6d5658d5be01a4a1d8174e271eab32b3a9beda24889b84e9db02236324cf064509e22eb56024cc33b17da9659aa52256b56ff868336f3c5b887b8b9de7f9dff2eca9de14a20d31da87dd31bae65ddee3d141b5c81dc09efb3550479d629e823ab4536d1a00d55af6a8106d88a97a88ce612df7f158940559d30630180cc69dde1b9e5e7144c5e0b01e947ad3b62e1e14915e219ad97b822556b57fd4202e3a545226e1907445483fce1be68df37910175d86d7360ee8415c3497b7f812c7d4a97ca492370eae796fba1e27d71c84458327bd2b2db1a852118b2a21b1a524b6a4c4a268ce1d576af5b749ace34aadaa7c7b4267eacdcd0dc8e9702c3a654a0f94d03e48a753a6782145fb287d703e3a1fa08f918ff074ca942952b40ff1748a926dca1429fa9ecbe162b8a8ffa85a3bc7b29c0dd7b25c11cbb938245605fe9ebbb1aad1efb9245615fe9e7b714ab82574a6d61fbb8a62188e4620d8751c5796a495c3b8867f9c19c88f1f31b8fcc7f81fa3fce3fcd1f21f2cff31faca6538a74c718186913729ff381fc44593796f50682dff3883b0e81ac44574798d0fc724bf6939d88284e51d8b6be5dc4a117d5fe21fa3dcd2f7415c3489b3d1f735734af49559d1b9a9fb19dfdc16f7b8af554eed4669957b2b38861f1330592c960effa3fe07e93fc4ff18fd07f81fdd7f70ff31812da6b54f80c274b9f51fc445d703a9a46f9790247e8ff7b135b1a82b8ebe5bc411f8cd721fdb12b0fb5e718d3aee7ba58812205cf9bdd2aad9061880682ff30ee2b241a1b5ef15d68d6c07ba7edf00d25a0ec2a29fb78f4d893b65ca17bafedf2b3636c030e58b2f740ebba273654a2d1879a360fc25efbf3c46de638ccbd091f1193abad42a3591913717236ff125c3c89bcc1b1582a4911882db4d2aa7722691b091189230120b52091246c2c83c92aeaa4917e9225da412641127a4aba7a7a7a7a747a7a7a7a787f268b2881564aba7a7a767d4c9236bd441e9801805ad823767c5b884c2f0e8e8e8e88cac91352e699132b246d6c81a594dc4d8480c5562b19118aac4a438a1128b8d62622c8cc5549ab4bc4622486a7939d192849437aae5d5f21ab5bcc49617d8f292a99046622893a99046622893a99046622893a9904662286b4982452893a9c848b2914c94c1482311c60263c18245090aa372306f14eccae45f52dedc0826c24258cea40ce751ce21a8c2e2ea4ecb6b0291450916d788c525b2b8421617c8e252617191466208fe36714942676a9737b7c2d2f72c4556567a4679a5475ce909577ac0bc517aaface4ac2c59516255cf2a5bbcacca2553bb92c4aac6ac828545dd58554bbe5f4162552c59e50a8b2a626554acb0b1322a50ec0a4b25c6e9dc26624c8a8a4a2c56b309c45d92a9bc9c5079a9bc545e2a2f95978a143aa3836a9524146666552a3716854b3b14464657978db2252dd78d7ee99ba36f09442055254949569295643299be5f689ccf4b3ba5739c385e97be7faf813ab0ae998208d05c3b4860e7cad055acc453ea2945316dd854f307fb9e90400c593dbac41f4d47dca25948259ef7bacf7e36bac45afda088be1a7a87499ac3349643087419d29e4a147ddb4f5a755275ee08c42d93589765adb5b9c2609c662fe8d9ecc3bbf5a088deb5bcc53cd35b010b30447bbfe00e2f5727a0d49dbaa3ef3724e8b681aab21fa02a9d2914755f4323fade863de8fb8dc9110f8444360d843be8eba3fe083a734552aa8dfb2146a0431e92d0b76e317b7edb182c100d8a57a36ae779fe3ccf1366b2e11ebefa762c0b4b54b0e679ebf8d6741d639076e5618bce843e84442a4d5884ce84464220c220e80c181ea134e11074264412121116111a11de98375d343ce32546fdc4289cc3300fe11aefb08d7b38e61f4ee120be711156e1215ee12266e123ac3a09cbbc84715c0503e02b78e62c98e62db8857be308e39edd625bcccab023a6dab6b0aca89448233114819fd785b8b3d462c48871dc69af5250871547c0c85bcb40596d6813b6421f42226191d04808441844e80a8f844384484222c22242234ed42b3fd8079371192f31d55e2565b4403303001c322a165650e1460a31366ac0a0809a515da82fcf616dc488c0ac1f6aa39ea1729fbb45a760ebf7e45be27b01b57199cc88a1ed770cbd45b3242f2e90325aa0f905c0f787e35b94f91e9158f85659e17b45856f96991bdf2d297c8f3431dfa48d6f538def13cc77a9b76886c2b789fa3eafbdb870864a52460bb4ce0000878c8a851554b891428c8d1a3028a066c07c77498def8680476fcec676aa3ce89377e38240dca42c54da770f45e976ce5f8ee3b8bccfdb7ba73daf7d9c2fb348cafe2996f9a58ef4f292d0f75e07e6a0efbbfdf580823a54a552a9542ad90ca4b2f031b12398a2374c7bb8eff369dc5943dc5943212fef2e4a4dd2e5dded7027776e20174aa50f889bf4b296064788d0035bab162ca862087583af832c7d5f73a4cc4296f9fbddb56a2c9da28158fd3a8566667246cab6d81665ebc186830e8c3d9fc555087dc25676bf6b43e0030c7c50e67be057c19a8d527a96406a12717b6d3739e22eb54a45405af0708510f4d538f57a608b8135e53f100175b51d5319e87c409f7075d97247374124eaa2a6eeef1127444850533bd4e1031d1065322bdb6e2a8ef9ae9214becb810da8f0dd2456a81ed5e2795ba71071941e00ca4bc319d1f72552d3b416480552455cb872b8e95eff5e404321d3e4625a2ca6554d3335b3964ab5d65a6a915b74ad4bba381a90117d7f8fb8ccf61bb261c279a4d7793e87b526d06733813e9ba969a6064491146bb2cfa2d9cbd75806c4f3e5694edb487be519f35e6869199b58d4bd46ba5c2e8ee338f36a9ac98d3a66b5b664964a1c1e9d8c3a1cf71cf66640e45edaac9dda795e3b35ee9ea77d27aebae6b01e171a9b8c3aa3ced8e4e6264727064dd5c3702ce8ea82ae27a7905994d86a520b920964135c82f05a58a224b7b046f4bd7731206ed1ec054830c171ae29c4524b336366ac678b525a97880bea72e9b849c4eb5d6a7db08fa64c20b1c3072b954aa497bd476895a32b8e9c9132d334ab593bd37c0e4bceaccabc7b024374fdf9fd97ae1ae823e6ab595f9eb71e877fc030650ab98595399132d208481b20718084430a01c905a414b8106ba20998de2f7aa461a81d1562a501f5fd4542b4da3d42dc62d7f7f42c4b2d9abae74aad15973777e62d76ae916851a6f314d6c44cdb33c760f5f95253269068e9fb30c7aa9a5899179dfbd0c6aa281347f0e8d50e6ff4b52e266e9ed03b7ce9dbe93c710412bdc325faae76d8aa42109162515497b80a41446651545b5c8520b2854551bdc5acea0a7dbf4129b5842032b328aa29b88302415b7d725cae377cb40ffbf3f5fb5d8be3387087fd794dd36ef89ca73d398c73fad91579d7b2aa32dfae8895a165de6ecc92a64c1c21d35b3433bf273e18dc6f091a03fad180aace5f937e5480b692fbb07001913b0c2598c084096103a6ea2813e8f3a350947a0010c7cf76a2819c89406a0d99e6e7e2f811c571c461fa67e3b932a6dc758fa15008a8abae658408c38565552fe5494a82ca804efa00890424156c375c4d79ee3caf0c5d7539dd8bf4a230f7a424482fd28bf47a55d30c9177195b5856544aa491188ac0cfeb4ea714067597b1856545a5441a89a108fcbceeb4f3fe6070e5f9a29a2969fa2c738b10612c16cb66754fa9cabc7d8ba66bc808bada72aa65357184159a8233d01fe80aa5c66accb4e35373b5e2835dfa3dd18c1865b3aaeb25428684c1aef90180cdcb10158699d01850c102dd85bd01919c90746e0aa483a07bf607a33d7a73dabe8a66178968cb6be5cf972fef43dba59656725995a69dda4bae52ab54a4d4b22597662295999c01216ed16cbbd9a44bd39b74912eab327f99680288150e1a032a64a077b8b6a44bcd3c4d48c92daa7de827e82386da07d3b4aa9da332a76b79bf484a48af9a49395534bba92e937248af1729c706a7d5b83cd25b3423e92d9a1901220ca2cca16826023faf0bd5bccd8755c3f6e74fabd991188ac0cfeb42d65a16598c182cb2f2a57a1ef85550478fd3376fc3a61ab67f4aad9b2ab56e8a94f384f84541dd85ce404167567eff45516954a04c41674837a03354d01916e8cc0abfff70406954f8fd97033a73e3f79f15742685df7f3aa03331bfff76f0f180ced4f885b94a46a521c7df7f4e5855cbaff9113843d53279571d7a0ddcdd06f61e83bfa780c1dfc0a2ab80c3af80c5b38047f754aa18b018316260ed2a4c350b2ba8702385181b356064c89021037177ad19317e355d7e9f8da163646a51658961dc628ac2fbf381fd8cae05037ca92f8731f6d8dfa82c2b2a251297428c8d1a30a8193262b49817cb18387419b8fb0cec1d85bfc360f035b0e83670f8182c3e053cba77e3c6d853969af61b98ea1430792406934250987b1b981c82dab8af81492228cc3d0c268b4061d2881998bca130f732307901f2886ae39e74d1198e14828624822c823482bca133e405c8232a4d08057b3e872561e54b1460e07821b53ab6b0aca89448dc480c45e0e775a1e71d23d7dbdf7eb5d68ba4ec6ae3c46d310f5957b46bcda3a6b12d8c906158cf965c1b122d5206bec2a09ac971a2f8823a4b2d9b96c3a7604de889215124ea36d9168586bada624f88374a375615c30a5952f47dd752914350d455912e1bda389904920b971c5c7c206514e69e4c02292365a4ccd434b0060c0aa8193262bcc020ef32b6b0aca89446df1f8c344449a9056f88ce2ec606a61426051cfac2245e0d1814503364c4788141de656c61595129e18d43d77a81259ada40d3256eacd04bdc38a163345de2e602da7bf956d65a6be90d91ce00092cf40c4d6780c4136d411a583564abd34d47d9e09ea6b12ca2684cce1a2241d5ccfa016b381d8716273cb68ce3a662a288a157d3981298a816b444106d698662100412543b9aa606c37bd19aee3c6bd66a9a662eaf990f61b109dde1aa51f54a78dfa25908ac314daae96e89ed5620d3344dd3c626e549396b4d8ee3b209c660fe2b958c5098abe3bba9bd621b5e421b8ba27143db4c654818a6339492236d2bb579bbdcf3f0e8c4a2743c8f746975a594f728ca5b0ce55b03d19ecb2100d85b2eba4e3cb9bf005ea80c5da1a0ed6e41dbdf1bd1fea33bae12c9924eab0ce96553f7a47f8ce81056d114ac0152a3594bb5d694c2b8dc0345d121cc690a1ec02443a6f4063a84499afcee5ab56b5d71f4ea07c670935c1a887b88e6ae25a1293883cd267b9ac35e269a829fbe3310710106b033e6161691286f6e45250af79a9289b3595e056f0e8378978a28b70d54363ab12a6fb4a2e5b4dbbc5df2a86351a3933a36199dc840dca38e898745815eb60ab1d2eeda1ff56aba237635b645102db020acc076d5d673d882dac394892454a03b6c35b7c3d311b2d65aabbd6aa75957268d13ea07e656aba560795e24251dbdbf6317e24d026e8ad361ebca3c80f28c5c6c319eb34c624fda696d6c79fb4a7a559aeda6da0851aee30045dd7b5e0b3c9d2911a130f7e3d134881f288ac401aa0a82a68884442a4db8439c5003a111fafe2bf316bbb9dbe2189ba74235f514e2f9f256269ebe9dcef459592c168b656afa34392e537d561dd3e6336f3c5b6c8b95b734f355b0f4b582592be6b4779be0ba7321efa5d64e4c5fd04d1c840b22061975cd2425adaf40db4dafe173501602fae7a62c84490fd0f60f76392e94493706a208f409732b0ad6bc409f706865b1a62958f3a3ea50d55734e3506031d5a11ce6947e085b37f5d2b84cceb84cca4e26fe684b9d8865409fb0b7aaa047856861261551484155dab8096105cb831122c2d78699703fe11ece0d0a0ab34521c56d423c1fe6d0990fdc8737f7a52f16225dedaed5b54418149446e3e103fa8639a41654b524fc0045ddd74cca796959fb94344823482362200509a3a9558b142db1162946564bccaa46d6b53e8847e8054e278f0f7653d8643abee9f7e1117a013bf6984e388dd4fe7acebcbf281f4c34b3b9279b3299ac661ef939ac77592ead13683c85b79f804ff76c17227766fcf17cb2af077f3bfb837d30d8d88409f1f44d7752d8e444aba92c9ae58c3faf27ba62b574e8ca98aebced06a66fb8438314d1cca393514707d4513590f2dabd6bebbd22d3cc4f80949f40bd4bfc28b3a9fea9df7f3c5726efc8362eefaf677f51be19c8025b1c77ef38de8c992080aef24fcc23671b1bd0b7db7c7ee2613a02e8ca944df5a60f59611ab69bde63bb29e3c0a41e07d0b7d7dce374d34f1fb2ca6173d81466623e63baca1702bae9f36c3ae80ac8ffe483f23fa6839e806cbb383d7521dbf1e9a92b007fbb02523fddabdf8581b8b7d8e942f0b7a77e7acd34e06f4f40ea27533d36d59b98de4bcab932279cc6ef493a57e685c3f03dc2d4a0356cd86a96d52ccf6a7b2a4d104ed720a3ae5d680a6d21cb7c3e32a10bd9ce6618c072804ca06a9aa659517933db13acc3d9621a58c3d5ce7561f80bb778935e3636a69f707c1b9b7c1a4fd50d9beab79b26fb140e5fc0f4a660c0f4a668607a5327607a5319634c57294c57264c5719d3d50998ae6860ba8201d3d50ba65bcc0307263d3eff1c87ed2053266bd940a9d5f2aa364a44cc74c9b5752d9b83969719b304b9440a4b68a6bda30fe88c10ba087414027531e1b4e0c69e285f4f0d73288c68f6178830f13cbd56543e87759ddc0774c294249aee4c297228d60ad6a83336b128295f60a16925748874e70b2bf4ce174e68baf3851243d074c70b29b6588cb61c67adb5284b5ad134a6042c68a8ab53dd79cbd05b34d3cab18565e55ca8fb40913822a9ac84be59c8b1856545a5441a89a108fcbc2e746a954663e99b0346f70a3780421d1de6581414abefcdaa3728f57be32161142676f3864d28ccdd7850a87f1cadf98dc77481b8b758eccad4158d6d1102d3450a933b717cddf77977072787f6c876a62c71b9cd07d683fe76305002bdc325a2d799ea4d128bfaf4deaca8375d27e6b0a497386eb1fcda627b8bc5b8340ebd49af2da684b845b3f217d4113a4b5c9558d436b236595761111266557becd14facaadba0d4975e926351a42b479348ac2ae7c424252b048162d1824516046582bebfa48ca6b460915955cb8b5a23e2fe649a99492f1588b68a9ac694c083e9a2292c0852e8e8e0f4167322ee0f665574c70b29f4fdd8c4aae810ecb53284024c77adb420882b87690d9830459778d3298ca48cb80889ae12bf7f7c701db90993d077871b5081df610846a0530214d014e895ef5005210bccc372004553d80d623d32d3d1f5587b9f0fc45473b6d43a1a4d559eab349d0e5505f64067420b501a513522551a151712ab623989557a416d48a130770509ad3660463f68d066871389d33cc22c2f509e6e4e26234c2e45b89044902392b1658816162158568eaca8b8544a4194484090464646621131fc21141111813e805febf32ce0753d74211e429c0db7edb08174007d72f8680af35df3ae6735af5298efdc47c1d04b25a63be0be0beaa8daab36d01d16b5a7124b6c750081eeb0485b307c29a704d32527259d524b0bf14d81b83f5829e703739751506e372009bbb70c73c7fd00f405bae6b046dcdcf5eadbc9df0cc47f2c16897553377f3bb06f4725d68e484dddcfe0b811430395ef42d2bb6b757a772d18a87c77a46fd276c934c0ef1b7a7f30ed7b46e6849bae9277073a296fd2e7a3bc5d72ea61de34f2c1bc6fd0b896f7cc099984d1c8385299de949877cc76735326d0473b0ac44dca02a2a8a8b46d33274d4c1933232200000000c314000028100a8743c20191449726930f14000c6b9a56706e4092a75190a3300819640c2000000200c000c0c0cc0c51009ac6d1f1dcbdac63aa9bf58ce6ecc7ecd0f28e47019d7c1813aa14d2ad8851b5c1eef3f02129509c504a59b2cde4907cde7d8904a9aece13da3cd1041703e71921a0a1cdb2120ba1573ecf3ff5246d016d9559785349748886c7cd9fadbffaead65ff1422fba542ce95ca707e0fe8e349650336921fae64df649ccd22c6ab972f680ac97d134b91045d886f90ca6b038f316d22b8e249b05a3897bc1dd51108e22df658e72d701de70e2222bcfcf4c55e89724b3eeba0f517eeaa6d77386d302204ad59e3bf240fe968af69dc5e18f2362e74f8eec22fff48eaf7cee86f519be7a47bbb65a26f5914e79ed90483ecbc425ce0783f7eba180a95606129d721c54a1096d5a52fd374626f8773fcb86beee412dbd67d5e4e639748bc9003b3477e1fac38cca26b81e3e5ccd990c7267afb937bb5ff3a97cb3f65e95e8a462e4431e9bb1b34024eab97451838937836b2c909a6d4973bef54e5055b64384df58fa9a8d9d665b57a3d9d7a57f4156c559f9dbe6c36fc12363b538ede12d148328015ef06b9bc4976dc41df59535f35d7de7fa57f547861e0adce1a2f45cb96c9f4a97b5005e4831d60bf5c5996d7690b145427101f2954655009fde408e4c56b5edef3fa54b4711eb1046f5bc9746aa6cc288cac75195083b529f010bf3b6b8dbd3dd819e762ae6b0a0f908bbee725490f301e169df21390ffedc99cff5138b9df9fc42cab269c5caa0412385fe8824d0f1007d4a6bff3ef905148d33410bc29f5b9a48e8205eb618e17313dec1a24359e6b6ca432ccf4c2dc5b7722a84cca22e196c8062727b380cc945af72f3d1b1c67c25a456b3a3766d676637b6a0ae7f20a36f1943c990aa934bfab5f8096d74561d1da2ab37fd63fbd96354461be9381177655f5f8b8c801ea26f7cca7de95b67814c0b5a23ae5e425f99501282208b8593c40d9d7f8bd7779748458cbdf227c21dcaec4d9483bdf1a0132c4c450377dcf0328894dccd51039754a34492f17c4e4bed4bfb1dc9123b4e4e0ba0a37787019ee948c4b308f4c207d8416d5e38a69ebd14a4eda6208bd60e9bc6a6ab5fc8dcc6785d5ebac6bb182fe321ae202ddf4828eefd283c9b35448e98379e615b4b9510d671b35ce701a7766902f2d9deeea717c3f6dbb101a2198502502249639d999181884505a0f539303e198f005b845be7006174d7900b585fabe5b5a7201b5a88e9905207da9ded0617cc9f2dc914128b087c94b35038e019426aa2d851ade6818aa0714e5190203ab736c50665981cb4efce65790fc004d13892d79349df1e7c78c1edfb983dfa7efc3e8b37275a326443063220cedde64deee01ad67e0dd47fabc4f9b956160f2b72b59a14e6d6e2c3796871723626e48eebf00ce4ef14e813582b44b46764e7ae9e9a62a1437d9acbb65a55d4211bec3ab6c630a535ca06c9480d128f5e61a919285df2bbabbfd4463667385f29ed912a97ddc50ce5fb24f53aba53995325c52eeb84e4d9854176820b6bfe8841c9aad4b5833abe8628e846c6f591c70c41e501e13296f1fb6f45662852d17654f691f10186a51805aece523ab3d2d3e5c8e581ffe8b2cd0f0889166828b605d5bef321c44a2c7b16c32349626e9c3a7ac23166e77d506266407b9453ce00133effdcf8050b9dd2d852f4a06218b61db93dd459e3c39cc68b2b875c79b166efe3ce5359324cea049afc917d3aa87066fcd05b37186036f1ea8ab3a0c8989e04ff7176a4ee00291b1928c5e95fcba0f358b9a6091edde01081f6410c5eb30f4fc00b840650a4151a5089789a69d5c262a8396e927c0ba6cfe3bd53b5cd8f50ccbd584aba04cd0a3ea9695debd186ecae05490143ec7487113bc721992f261595dcc6f3fd6168322741f38b7195cee0df4ebaac10da844bbfe7890d16f02057ccd089abc6c00a7120468c014e84a886a11abb82267a7fe39da2d89ac7c99c71fe8abcd07cc7b3178e84ae6e0cf9c38fd5525e3009e4765ae9527d8b3839d3b55f36fee2024062b1a89be4b95f13d20a45bfb5d24f360191e6924ff11b5b9be6aae46279c158267fa0bb149b7b4009b4ae6dd22e4ab892ac4e2a2abd0ad4a2de0f5c82e0b49c361105bd06947550fd36e35891004bc45c5351e7d0619b68f7acfab43348b37b27afe6ae2dafdc4abf348dbb8366536faeba3b9caea88a3e083305078c156697273dd37b882dafc72aba88328ce7893ea097d8a7f0dfd06ae15e5a4bb4d606d8e21260957390650b05fb800aa9a1d05bd0d49882bf29c22cc01cf37df81ade152ec6a36f2caf7093b5ef347ea7d92f6034e0a8967599bd2b5a037722dddc5c146c150eec220fc9e431a4e995fe99b37026fb94340d0f2bc1094a2fc3f9c055a9cf6a13b494ef0233f098db526c6299c48940e4d0854cd3b6910be51cbb53b5298dbda158071a38d3c663d179f8cf1e9fdba2b3d36ff98462781357e9c06193f5e26b9cedb0e005548e2f1739e176815a94a1be42e504907f3c01c02d4a63feccd7d99f96bfe1727f52c57cf322e63f0487cc5a96e84f8fd64d3693ee501c31c97d314d7300f410ead84501bc34e60235f9da42309d37d9e2c1af80976a15c9a57ef96e8383c38d26833b37195c5fbe274f8f92903cc45a1cca6f6a1401904c2b3c58a08de3762646d96b5aa791d09c683ae9c078ac9691667862d760a4cf593b91169173786d42b133dbaebeb6275d34060fcc4bf73e746eb0f3c43464d8869a48f7a461e39286ae0915b74249d1537edf0813fc3e75e403d633a279f16a4181340c366b15c70f930326b38dd3b4d6b1d7479c9c4b32237e411ce2fed029838b8620a0d129db7321afd810d3f83df84690c44d1174a956cbd507238cb2e7bf9a3e423b8a356e82904152336d4f51d0d61adca8e33ed677a960d3292cd4f33a0e2ceabb8fd47898588a40508df0493f5345f29f904f30066315e3c1d1eec9b9e978f9f24d78833bbd86466cf4b02aa6c3031b8040749a18c056041d925e732c4657e201af52b2cca0a3d8afbdb6d079c78a52007267e07a0a8a18cca8cc81288a2169b9a8c1097ed94fbc2ce4d04fb4e7d44a685edfce3cd03eadf059c7565254ca52d6056ac17e60b76f251f58a2fa78e399865165f58ad11eae92d70111905a3ba2b0365968c2592206d62a722855526b0b31c84b2fa1211e419cbae8295bbf73405693a83e347671b2643adf78b7736ce83c3a5d3f8acfaeb27a4cdd9208f1571ad33ec85506a6c66404afa6c79301ca00e221b4c436082ae15bd971e0f7e0d8df9e381170001387677fd885b3e346e408423a1344807c58dfdbff28cd5fe122d0acc3c2bf71874e08fe59c334be5e18ad0f5f88f58bd083e4957d1c7967e58046eb53300e5107134fafc1a0a433d3dca1c85191f6e2da81b53b214d6709111f62753a674d91aee1f7536e6050e6110c0d468c0f726094e53a53a593b258f60072110acf32a7d7cbf9a762744ac322286418930b67bc46011dad0403971f77269ea290813384026bd5e9094d81c75e81a5b74ef5fd3df83667a5d427f10854730915e23ee15d753d95bb35029672993d6b172b4a56b08e70e5f9df54a11640a984e2e4dfe6be140893a292d70d7f8295fee1155f83816dddd39aafa220103c2e6888cc261d63db12f13b429490e4f29b423a4c0c4b4a5e20de8f937b315a94eebb578d47a081b8939939e53d62ea869748cad35f01d6ffe359416df63fa90be297e75fb4bf9e8dd6b96cae96a5d0d6490fd295b4f928ff26f59c7af45ea221b89319dcbb024c61b1e777f1b3294852cb9935059e15f14dfd11ae86de2c141229867cf34a64ae03ef1c8fc999c27b318bf23add9a14346226035912bb46092abe9805f34b58900e0a5509d466c3f50273d1df06d16233163ce52d6775cb5dc7f99f3da86e42c8ccb0018e9c77503acbe45e11609520eba73708dced336774c10982f6f406e52063c2c77788d73e0a4d8eda6b51e4db4ffac065bc9560dd22fccc6bd255a15e2d2f8ce05209c2fbb576503833a6a0e637e1199bd41717de1b8003c87978dfa0460b20f2f9d7a65fc6b04b26ff2c6396ebee914bf66b033cab0e5f715732e9864c49192e418dc1e3db75272804e056954eb56ff39c0eeacfa536721383322be67a8d4531e5c102357f76264a78f2e7ffa849d4ff7cd2d5e5c227b755752f4ffcc061594f90658e1ca7d67c032769b04da034750f0422ce13a0a33ec241e57a20eda23bf793581e7f4974a0f1c6ffb52f31044cb50a3bba600090d177d8e230802ca85f6be15cbf2fec377e17984ff576a56084fe04646ec1adaac07344b6645918bcfe5d4790bd40e05d37d29f8f70417388a18d9ceb863bf23826e76d2345041f85952f137120e33ca3fafc7df697dac8410d223506ed75a205158591510976e2775ece0b57450af96fabb2e191b59bc31c0ab0fe85353289a46b5288d38a92b578d0becdf14bd2292516567eeac58bc71d389b719864fd64db3b190046e401b96b18a2c0f423886ce584444a6c7187f46e555574c72985182a92cc14cf2e77f0609724ff59b8b68544d7c79b8b3df66c623c5c38396d9d8537b0f4a3c9051f87ec38a7c06aa631c66984151659bd09998a80c939b29433c45d036e2abc2d91d485a9edfa140a1bc789cac33fe3c37ce37b30919fbe9f3b3a4ffb15ad36833f5d595b68a0c263d49df060a9c0f52e55bdc52db0c005d52bf75afc80b542d8dfe864aa0895a0b69a545a087338fcb2a919c1597651adea152eba40971e71ccbdf5420e99b794b73984c85a6b48651568afdab0f492f72109abcd2124a458d7bb52655588a72f53b82069d897d74a064107076d87a49185d3d6baec49471c1635bbf51135c3b4d14dcc329de6bd22887b8280850c2c080872b3a5e3124b7b79582990e6a501829acaa8a8a111612c5b8d89801c9d0b4962d02efaf5f3e069056862d0a13b673a11793ce0e715de3c28c284d99193b0b5110fb4a905ae4e1c09484e504235c117ed9baf6cc2d434163180d38466d15f0c2a5a6aa2e62c1ec5c43ae4d6d95f3a6a4559b38824ab075c9af796c2797b27f18e5216c5e0c317af9417a4a350731156c179d63d207f4cd8f71ee84b52dacca36ac97755fab26737711e8954e1101ebf8bbf641a43abf5cc52479caf243ea8e62453c1c4534a00e3abc85335ba3837bf54ebd737ba6bab78dfe066637d51dc7a75a64ff4c92e7fd112d287f200c94cb896b907e43ad854f4b04e00132b6ba40db836823bd8437b50ab781612ead312d9006fed0ddb6fa69f191675a647dacd08aaf81b463f3772dbea677b185980bf191c7cbd61241aa4435d855ab284bdae4368816d9dc686ec503ac34230d9db2cfc2baafb5ad82029913c395489be9e2be6e55eccc2329e2381f4446a70b4185c87f8e17bd33c9898ce5fe9173c1f6fb47ddc08a0e65c6cbe2ef9b969f3fbab6a6bb050bd4174d36486fb6c5b30786aaa2fc230f35d3014a76e5049ff165d381f7ca9623e72fe2a81694f22a1f3b04323da0d092437c3704f9520c0c2a90cea0d4116afb0bcc3fef85a9be990c3d5477a81b56651f72c77759569780a80f41a39f53c5967885078cb83f985eff7906575f3b169019ff8380912824e928d6bdc03e2d4d0edd5f8e4125bc31b41363aa306d25528c7cd975b0a15d58b5368766fd0364d046bd307a2c40d6aa672b5c823bb1654b3298be69d0777816a4ad3932b778ecbf39d87472bbfa24e57669f8d26b2ff55c8dc714a5588f56f5b3eadcaa8631eb5fd4ab863054418ce75f7992cdab7cb01b6e8fa6daa76aa01d2197d520e25abcc123f20d26ed1f5e0cd48c02a1089aea40d36310b7e70195ae0fc6c6e6792e3b9882e3f20599af5e510d6e3a5a1f08876c34a0a8b52047d33b5716181ba881ffc67ec79d8f5786374ed8940dff289301e462387dbef0367fd1a7398a2aa30cf9281ef167313e076287f67f7179b9e70a27c0444414a63c92e9ade6db41a75820cfad3a8c41c62e0f30526900cee039ac90c9ca2ce60e47773a891d28cbd02967774920b1cff2c17192a97c40c84b721061f2a4c8eda27a0a0226501e629c930868e5cf408fc494eff918901449e7f81d555210d194d726d1b74503bd7169ef4e624091bd7c3c1c8843d09b254818c37a70008d7c2ebe6c569f53256f68c10ab22bac6ee46edca43443761a14089eed20d9da27c0917b33156818fd5c9f67cfcee92c0168f6c7e66b14a98e749ccbccabcef4bd307599c77e05999408ac5bf1e248a13ef78a10e86c75b889e384039ed46edc95149ff4f54a165eb68d4bced4c24b838409d2168d26962fa04574e6ab5692a5bb5efd9e1aab241da5799ef2957095245006eab164d0c6171bf6215d4251369f841b1c11a4832f6e026742656380658250e847ca8c762ed57c49031cd3e4b8372a782d002fccfcccb7da83cf695280f87de441b59e530ad8fd8101cee6d5fc3feea8348acbeb06f26edce33cf6ab82ec57154e0cbed599d9c21a42346ca134394373c64b10df8ef55234b5b94dc28d5b1889a6302fdfc78a53a2d16ffe9a0f75761a5d17531eeba24becfc72142722514085dffe8be1256f95c3006500963d2314c1d131e04f21ef60798f0ddf33bc656b5e3bd01b47025e8ec7d60e526c2679b1172ee6f87bc66422453c1ce2630db1cb6c3c9f1a3f2f88c5717e1400a1ce14f1403dd83ed0ab4ef4c46855cc2bd4cdf62254d145fb8d3e59a427d763fe3d099ec712a5e1b8eb0cb6c1e17aee43d36120af4a8f4e46c48c4edb2ef6628c661e92141ad1a67516d2748f30fb1dc480cf59e8a17db9991de97b71b8c5c0d37f473b6a8d3c3a27de46e7a2fa9777884352796c91bfc3fe833003d10740ad18af45bb977afd5de5dfcb52d74842c285fa64c0e261c784e9e16b63d33c695fe87ab78b39cfd3b21a3a506406f1c92c2ad5cb26ab04a7c9b59d43acc40892c3f78fdf319841d0db72a5d054af0b0c9793a3975bc87b798ea8c6d1d3c20438d9fe4081efe86cc730b06178ca656a5565ced8ae5137804735b3d132df7c5cb349d1313517c3fc871d0074d1c081ae4483f1e3f8348857382230e64a6607e5e732a9d67813cfce0e331084f5d2ce1237f98a7308f825646369ce7fbff1e0431f6ff0c0c43bbc6870103bd85684cdf49deabfc77661534e9f3a85578e0469a568d456174c295311ce065d3cdeb4c1e88e4f317a912e06f3d5724ff246c554a7b51e4b99d7108695463e0acd2bc04e692b7d77a6e9a1af477ee3840d83fb39880a58fce4a845a51ddbb034f4bdb523f20aa2044e0e8361fa95404b160a0336d4ab655de68b2b08b1e30348a883dc5aa31fd86c529c33890c3076944157ce643966bf8608afa135b4d25d6f436277f8bed06c67a38f6e2f0dcf0f8b09f89fa1e554a48d3520c665ce17829b22173986456efe3b72ae00852c8acf26ad9918f1f495649411de3707bfce8e437985378a0792a1c023724bf549611e4f9eff8390be3fdfbaaa8076125fc490668209c02bc94db4156b1ac619396673f790e0f81a2bb38b187a9d6abcf806c6d0f0004d260d42dc0bfba3e91f611146f9a4b2a652a3d67bde5d330c16918328bf5294b3a71d9ea4741229c70048ac78d314d55d47506a16b0c0dce24ce56d58b9c0974e8633b764a0d6e03c2f5a7202d07eb74059d7f727b0176087ce6df5ef20be578e14a3f2404b14a2bb8261ce052bec2d539bca717e8171f4fdeb400f690b5feeac40b581225d6fde72f5c5649c74ebb461d6b3131df446062410c98fdd04231606abf6f286c4b2c7ae09bef84b551f9bf517ed2cbb488dff8fc903d34c667850beebe949698b0158a9fb31141adc2f2b0686fe51f0af73eabf08ce9073a1823978542e0e70d3bca57f4eb1a75886a4a51aff65656070fb52218f1ade0220382cb9a4676bf1470b4204edaa5b486a51451f408b550c4a0e41af40396a984a81166e87167df34c6eaa3538b06814d8087b6ba1e351ecb0f2467f3302ff02fa4ef48d3d63a39340d4f7f69db0c5da0b48e709c6ec842854969733761ce3c17a572fe9b92b4dadd9282bcc05d077a518e8b748ef4c34d4eb39b14f49bf9dcd3329ff2473e1f79378d1251d7ecb25e23dd99ed8f113a4e37a0630d396fea67d7336b69379adae3137619c1ed21387a4e9b993eac07cac1b9c43e5b7af3db322505b46d69465210e708852ad24c6928ca4106ab244ad221ac53185055a64900794e11b23291490aa31cb0a86a8a2a1146398a40d5944e2a88e80c832a8a3c2928cb31c0503035154166d3209783688de061b16d9017aa0f5b5a380bc65510531c8e2c412289e08a747455027c64b458e2686363ba16e0871d6659754c74d80ac222d26b0a99836b13168125a85ec96e87ec601289e45ce6cc6b6cc21f04c7d5bacc67e8a9237cdf27fe1984682dcb668da67424637846c5f095cc9c99af2f4e5d70326a43cbc3f70b3a057c60163ca980b58d3ef43545109942ba0522c0519025dc3f9acdc67d369177273c3ff06283276e71d6639938d314dda565ee6480538533c6002c054c59cbf23542cff71ac5fea5aa1a280990c077d33208f8fe4f5603513594c2c797f7eeee298819bc6b71bd633f605f1b864831062279d2838c3132270b6b985783b7a7dd69246c3a25a1e79406ee0be72648fc891f64563d367b5d788f0941d9ad6948ce488101a06f273af5d52c371ebeb598680b378b2a871db666fe9096a64f32d218694c720c939a1daec930fb34e15b65a8d9353e87abd403486a65fe2b7e7836df766e405c54b2038e82a92d759ad4b8b4628e38b128b98874c90ff8d0dcf28245d413135fdbd8ddbf1f65065597a680ad19ac04f809baba69e944ef58b88d7981528afb1990b3b36657dacceeae185b48da73fd04ae45460638eca9b5c1544283dfd958645016eaa262347b7b6ddc4c53b8c7c5e567400d6936eb1337da6e3ff433de39fac574628c7e9e8c8a6d9ccadddc7d7e58648c5b44b49f2c1ea8e032cf23bac531c45b8bfdbbc5141a5654f059fb959e1bbd419b5248c20828775957ed4ea5218ffd60e27ae5b0932f4e80df3b5b40de1b2ec7da3612ad0028dbecc04c1cde1752d9c0cdf5d04215fc5f80b6c047e7c672ce3f0ccefd1d08d32913a950f335646637ce44e6e34516659337fe23c76d714d32e262a9b7d5519a7029834a230c63a020db0d1eb2e12590c8c8f69b7d4ff8960325a10b09963bbd0fa5e62190b9a63c79430c23ef557dda09d3a24a0b9983921773586a9ded727777c654dd76ed52cb5ca7e2d484a2170e642b5e89fd49f2faaec3f6dae2f5ff07f2720a86287681f84410a011e8eb452cfdb2ccafe4b6714fbc60ff5a7696008bcccf28428256bc57065b696229c65bb26cae426c9c334fdaee09b1566f0bb154f73054131f7f3474556a9d5778908ab4cd32075ebcd18396263f8060fd9b5d109dbacbc0dfb6953bbf50af844f3ddeed73f8bc0c5cc38dc9163c0edc1ff781560996f67cf3f91bf976b7df0e3c1898b595ad0853ec53980523beac3f9a7a50f1c602344652ba11c2773f38d2108105c63bb094e81fc933a71064ecf397934a7ad77050194ce8210597c9c1ad04f626499988757b8df50e199f4a071d49bbee65a7ee5fc5f59e7ce2ceeeca79dd4c2699f5cc9a30b4befaf0fd39bf2098d20e2953ffcd908da7f44eb4acc00f90e701d9469af358db192c48bb9b06cbf9db598a533767ebc16e11d09391cc9959259613f0fe9467f035713cbb3796a090ecc07d3630eee9867748eb24da1f5b15a5cf63a03a181ae55431289ad68ed49d07c260911fe0a9486396f7f80b9a4762151e5f918d71c1e5ee16e8303af0b58a0106f632b9e9fdbad1ff63ac34fda0bc5f3ef34907a58ac1ca7ec11d7cad0a140a9981da8b5c48ccb16cd5459af9ae302298b89fdcf2cd3964fa1b4f7c02a41f5d23e57171dd41e8e1d4408d86fef46815c8759ad8eb43f60ec3fe599e93e89a6807915b4a1b24a1df42a654cc61d45136e03da08fc4d1679016e64a88839660497a7456b847307e8c384672382a2c4784837bc7c8002218dce5df9bf6ab5bfb94414e5c703d402cef321d779202c85cb0126f024ef000ba0d6dffa4b904082b6cab7f34b5db2d5b3753eff8b60da881f1ceccd4cca7a0542cb444d32df67a3670305c2bb3c60ca5b586e5840c7a3fdb03c840799ad1dd0c1bea0b8a6beedba5ab2549b20bae1763e23eccd3154a0bb6ff562d7b2bf33b3e7182b69cc3c780c1374fdcd2ba7a0deb64d4d2a7562c6942674b514893ba6622c7216cb2be504293fc964c4e2bd4e9cb5971e7de5aa3a885cad05862fd4cce45ce891da37eb30aac912036470a9cc2c52ec2b94ff2909b76596a73cfa0f406bbe66136b4a7efe2db3f85ee431d62e1aab656e7c4f0d12a962f7996499e1caa2cd33bb91baf129ac481fd0b6dda71da4146abb0951e9b8908122d3412bfd87073219a10e33a08cba180d0351750c7530f8308aa6827785913d8509b8551599f9903a5aacdcfc5b50ff251b42ac4d6c68d09a1b0773b852e384a038be1151b781a7084874fddae7c72d468e08a6db0c6ec60ad7b661c30ab7d4475fd95cc0da514664c3ff3eb0b539bfa1284dfe65372aa955a8426ad40130223ad4722753f7f5cba83e40242a95326325ce7470bd33d522c0ed940b93051552d962034a8a5aa758c28a23ce26ba8bd3f175205f18885343c82e41a7d93de04bfbdaded6d03fef7e9a12f32547d9dfba170056e61a4f6df2b63df64ae7b18ca4cf61cc2bf844ba36afb837c57a0164a83f0565c901066f9513b8b7a85152e0c4ef860154c969fc3ba0da249d220dc8b2fb1b0165b34f8896ec9f389065279be2a172cd610a8034e7a38150009ded1031daf2acaa522ec7175584b2e417e278401a1a3c416712b8bd7160ce4ca0239acc0c0434b7b1181dfe41a8b60ed0d4b6173115541e2b8c3ad9abb410c3a24b4574ab049a6d06e66feebfc6a0f6c1ead4be6ac9f0a5a27fa8ffe3cda6b1629bb8f3664296ad7a16b1ce10768ff90737f03009318b78901b4dd9f2bc0c3dc31bf22ba54274ae046967b41d2d64b8f1564ded728d583e5c584a3dfc445dd6cda3d7bdbc7499d7d98f710c7cd163320d1e5bf58a44d94a90221eaea105c2a8f090ae33d6a5c78426a1f9d81593f7ad40725bffe15a4f7a1a7b87dd783bc14e6097243da355df7f52fd9fe53744f9904db2fc86e31936da0c5f628612237da0bad36990aee81a923ee227add61faa26e266ec822f52f9e08824e4ab34c942518f60befb7a3955aa9ba7084eb91125a57f1a0f9fe29c975594e5f2789dce13f33904784b1a94892cf5dcb76342d49e14218107bf6cb17e01e5a06aaf70a5915a986c36df82abcf7b3713ccf261a168715a509f65199a9aa13971cb08f55100a550881f95502e7ff70e7223a0dbef7fec4af60da6dfa042d4e1ebcb5e3a8eed773912a8c617f0b2b0eb96284d1dcb9dec5c20a9b1c5316907094c4c01f92b8bd8586801c90b8b96f65e82e05a3cee5f38168b5faeeb6a57581468594ec6a2a86888e65558eb86df1b920bcaab70b902cce29e4a06a63ca2b87e76cf2b77518d260c99b23bac239533d826fe1c2bd69e4e1f67ae2c6e73cfb34c91fd504943841ee1f44560a05b2a17b206aff445a5894eb8c1cc311b98f52f564b81ab7d6078fa8ab3cbcf94a2fd93dbeaae71c3235617239abab8c35da13462de710e1d0e226f45a13d1aeb6c580f234ab0449774b6d14946070940286c72186480bb29a8e987774b904aae25da18081e84d6b20d83ae0c3bbdd509f4df8e552a94059b84ad894ca7968c2ad8761711e80a928aab3c16485ab1106475a64a86652a0ee8aa87fe956bb327be6cd3d633edcb7b095601a2ed8b449c77163b81cc9a0f024aea8fc9c901ba25356c0491a37679a37038cbfd5d464251251cba4b91a561cdaba222e2743482cdae010792cb7fd8fb28878dcfe096ec1db01be18b83713546aa8c79a3d91d64e6aa6655b0c6ecf4e228423cff159d0d076318c43ded658e0d668c1d1b782baca58fd1ee257b6df2763b5b4f7e2143cd43809fed2745f7dc93be4b5f4d2d751d638b69630dacf4bd8aaccdb16e9a217c3980192c99c5961153bdf4322d0c7ec1fc9ec76105fb4a80948d39596b8da63e944511f314adc59b855bdd11b2d925e3d462efc6bc5402273b806577db53cfc55e97938a8f8025864c375c0c5fbffd876c502c05d4d60974b799aa42b66dcc67b0b140cfb387ecf1316d5fa0dc01ec9c24a11a0b66223a18192152a94ccfde116bb91a451c9f2104ad8270e52e4c3e68b18a3a9b8359a85d25bc1f5ca1488bf0e5046c358e74a849174f1ca78ed962442bf8b69475f1488e9498fba921a4a7cf76ed428a71786416d61dd96d1e9a1e364df06dc559b22b6e8116d062a5d50daadcf491bb115f828ef0bec8aab2d44dc6ec911256d9c9c9d64d495173ea53545efc1cf52416b776ec234e0b04c8dba849d4a834bf99ecf8ed25b3ef396ce28354353924b9b9ee415b11502ce54fffeca08730291519662809e7aa78e1ddb141585e3c7fa66d70cd90f198700688190b9903414a741a2e5fcabec285036aee097363131f1857bc2d86982e961771d192a024aed4106d626688f648529adb1088dfba3b3c34b12d4102f08320c5c65158a5d2476d9844793bc6a44666aba827440271f1dd9b7093705d9bc6fd63d5bb18967dd3e4c4f5dae0c1163194599080bc8fe91c7d5d49fa0fcbd7009effeb14b7c2c749eba1bd47cb555ed2cfe133c1b50958c0d90e29f3c1e6db17e2d0ecdd6f6b7fc37f543c4d62f8f08da94cf85c204f45b506705a844f8ee4a1a3e5645fb0a251bc515722c77c50cb856030fae86fd2b9d6fd10eb48c2efd868e7613b91cecd6539059d0b8cced3c1627b6d293330a6c1e77d9952070193b67b000b36d846100d7c66825e9660f754db9e57e37a93a7daf20d41c52754d4dfddd6ef14161129bd429ef86745af619c14dd89ea55f2fd15d3e9748bf905b3a93e5ef9bfb37f926b78fa701c4ce0124c4279341e76990206f55bdde50e7d6a854fe67e299eff9aa27cc2c2496dca52127cd0f3942e6a6b6e7b6eec448b8ef19007e4a0981eafeda370560ac31aed270887b52e1eda39a2d0f776376576fd25c00eec1f6a4f106a83ed6bcd700fd523056fb1af8a302c8969748bba1df4c178fc215655fde6b86db6166d6ba5dec579d3377e99ee10f58dd5376bc95507640ea1739fcbfa6dc43405792f1b243eb37894892d0bd106de1829bf2109b9fc23a13791ca6b77b69879a07a24f50aeb94b862d37fce658030032c1f235ab195b02ea48ac99ee003fbb130a8f6d545e88578e87f055344eb1297ecde337c89ba4a6ebdebc02b51f54a624800052f854ecb4c4159f9d5135fb0db2daa06a0a580d1f7a75f762522877ad5ccb2d6f5b03e0a5014298a620357ff86b2b6991370a83a92bef51757d4625d3e1a8969cb4a3590f74df9112f1f91b3da8d1d5f049d2fd60be6dc5abc452d1b0f5328d24c68d0d6a3bf725ee51977f0a4552e53acd0a27d2790bff73892568489635d39680c7fd10683e43f42c56f172c673b3ef600ab7ebd741cffc7005863c2e7341aa16c6b8f991c158aec65040f607c9e7effb9b7f019f07a48a20e57bc01b86e115707a98862c6cbf00258ef440db3de4b0d3d45f7a7871d22d064b6f6fff23305d986f20b3933400ecdf3e411f9c8371ea9697722d3709d3ee418a5456a5875f39906e3a305697a8c6598c687e7fd6917d21e7d6edda442c57e280ddf12ee5a29f8cb97167695b8421dafff97a07d40506403fd8c53163226c60e46d63258dfd6edb2f80cdc2997938f0c5142eaed0c4db288ce8f3332b3504fc0189982bfe714992436cb0bc3aea941e9bef46c9495a320b6e74e1a7f6f3ce6a8764397f4da1a05fade32abc11a154dd6c31d31b35b8eca5f9ff941397f6f759111eb6ccb3c1704493d4c35a51acdeb00dd1d307e5a47e7fbc475752f44a69451ba1638469a79ab922951c65c6cab3aaac90a8b10ad1eec98aed7bcdd47710ae59636cbd4736208965e2b4f53778717b3c19879eee9c468e6f1e7d944c2b47003b606395e6df938cb100534fecf70bcbf22700a716813bfe8ab9948ef93220440ecd9b86b225ea8a8e031053a2e1bc153867f7351d8c1b4f99d605e1b3ae12833a1af3ab2cb9d8bf846af9a16a6da17bc25f05cb0a1839e4a105dd8e94994ac25159b6dd9695d7d50635c808926cdaa6decb00541faede55f6bc887a4a0938ae05faff2bef45d02a310c3e3e000adc54825f344edd54fc07c99cf6f064788329834b476ed033de62e67d0c7110282e134bd09cfa4b40480ecea5844e167601e945c5949f66447822283c947ea3382073581e273283361998578ec4788f10e27e13659bbb8a1b69d2f6b700a965a2f6f23a6b7ed24984f124e5ba30ff881375ca4b63f8797ba9c1333ef9dd4bd737665ca613ffcd228228f3b858891a20983819404002436611d534f466a184a8edf10d74a9cdce4b05bf88ea2d4af96d22b248a1a46c6740f9d8a03716ee54f678a8516e291b81bde617a1cbcf2fc1c085ced5034f7b3120e2e9805fd3f19c2cec0ba4107abebaff6ec4df1592ea9c4cd9a1f7f9290532ae95717cf397209eda9e9a68c96b7d8130f89c7f50e693142a8d5efc56917fca2ee8d689eaec026bf8b0720b12a538c0d550074cbb02005aee5bf9a8a09b3ab41ceddf01dd88a41651a678d7bd73da77489462f32a6d11498a174c442c6ec305273a58e215d64f992679d5c3fe08429e055e7228a064f4c52628b01884808b6c43c8e809b7151d66d81827f279bdcdb5a520820eb573248836b15aa2b2e07ca93dd610c9a92447ed7e3bc566b8b5185581859afeb7a809aa18536f26bc7638647951a9e03e62f6480b34e1f5d8aaa82081de99b51468b39309b7cff6aca671c42be707a023434857838cd89aa651e024eaf861a05ddc20ccb7de25eb904230b909093efd091f52eb6c83fef74a2792d3d9cdaf0fc353cb6a44f5e7b294422106ab30e8c76f14720bd77277ae6e65cf224a4e169770a1e116d42e1d8e8476d60512013c1e1c7cd0cf24bb74cc79bf1b9373c5ae3ec63c2138c84c9028bd63339a8c7cb04491d501b0d105e7c96f1d5048216376de79ca136ba62686ba909ab8567f781711808df3494cbba485fcbbc54b5c06b932782efc89774530d030055a78dd6b3d98161b284cc99b2cc652ffe8b285c65191d74658dcc8f266b0de0150f3ab2985af905b983302051f8295a3970370915bc0041533f0ba77616763425d5234e14ed343a832c23c8c7936b45c9b54990860e6c119b95f50e31b14748237a9f6274afac54ddf82dd2f07aec8847fae22438c4983f87b90b6c085c7b4295a8dc8ee3e1bad3b305972d5303b1c68a7fcf4c25494b2e997235feb92bd677c342424e533b6da073476c6621660d12741eed7aa99b12da291a25e05458b589d3be5be6f83cc299d7aa1e0026455956c12599b937eeca5d6e1b865fa0d56d9693cb21be592ea2b912be17a59b2d1867e649281b9c10594a08f7020637086a3a51f011ac6a32883a617bdb8c709751735b46268a4bda1914b62ae44e9eba24fbc0df916a897c2f2c3843939e665a20071ca44f22076d5fd1b25167c626061f7c88cf6dc954da0d5bc701c790a4bd2ec562a01ea9fa77b241cc0d46d2032ae372d80a54836c35f7584a1a11d9dfe037d702fc6425c006716017eedd4a55b8f3d6a9b617111fd41a946dd717ee295a498c11f714cfbebacaf6558654ddf4e34cf2e2354dbd624b1ea83b92d6744967392b8e8bb1143c0a84f5a851935351332f97decdbc035e867d52418bac4a1ff47e86014fded9c1d33b07721cb90ce1a72345298b0082d84832a29ef9c3101776f366c095b54a897fea79e84cfd658407a0268228f275762609548578da741b332d4fbdc339e6e42840f453866d794b95d0992cbd9ca2531a4d9835d1c32d197e4fc960a30cc273feda5c9cb9ef0c04b63304f24bcc032179e54a34b35256a61a52f8da4b2b02a534b5361eead3e9c84122f6b53c25c1676864880159c90c57de73b320cbdd008945b0af62f4dd6e872618f75423aced61676f62ea5947f2e6ca9b7a13381d5d25a3c0b91f31873a2c5dd3c572dfc495cd403c8d1b9924aefbdb0041d6ab1b9608b0fbd6f70aee2e40fcd0f163904849a7f2d0818332fcc0cded97943a63b3a9bac2986f415b37b45c2781ba2fa66fd04cefd436e142f41bde4e5c6501c8ef87aa3478d028b4a7e15db8b3ad7985e223fbdc90eb81d1f6216c921440093ba3b5775040967735c4e40386a4290d08530ea69898d225e13c51c977aaa2f31fdc5385e63d641cc3e3df055b0fa820d7ca314697ab41988a0a769b5426fe722a87f4adadf106a72d665703f1003ffcd99aba31204315f4c78be0ed3025e3aaa450ec011094a124935cfdfa46c2352be1b5e90b7d3a0e81c7ab632e0eefeb916c457b4697018163559b75d47918dbf4a68220b579e17a4c0de986887e580b474f25f171f3e129d0ca409b23ebff7a0fa23792134d7b206b383358bfb14b15b0bc08e459d34bff6cbd8b730e29a1b89d98166508f3d477019a65399989d2a5afca3df5f739230ba0fb303e413a417b80ce30cc13f798c683cfb1eed4366c9490c413720bcd6a0e3d158a821c5b212523d37b5b5a3a1b2580a7add8365645051bb14cfedbd5e9a165b5e28691d09f070b333aa0bca124dab221067fa7bc2a491a0e53fad754be023613b42de936261cfa30f92125ac4a5ecd10049061757a3d1e48d61c1498b12d41dad887c0da06ab40ac440471afcd523a87dc6a4a21488a1d79683a181dab50c5b7e080104ae5800d42484738a6e9c19637575927e31c2ba36cf6ba4605f06ffd3e85379f6ba309b4a72735b75bf3ca1cc212e076c49a1793654c7807b76f06ecbf4f9179ec1213d53f0c00d84ad4981de14cf2f2da83ac277db5cc836475e4df8c9575097c7a6d1acc5f1356db691e2229a248ff88891f4a59d34bd02a20c615c15ff580f00c4c813e793af7dcc12cf638bb9238c0886b28a690089ec5f7b3441cfe5e879d9df8f1b850daa3ed51585ee57bcf6535aebc64ff212c00f2aaa6c1f83742444bf365ef9643a11a88fb948db19c180a22c876fcb518faef5d6ed0ac2efb267817d789fcbbdaf6de74720c555da488da0212ba568ff260200a09fc073980134e72dcb630824da9d504d25a19b560f8a8e01fb6d777e2f50ada6fcb46e625244ba98bed0636ed582f21c96b69f888514594fbd3752e68cb785e6c3c155711cae52efe3b7338df9a66fbda0c126960f60063f57248b4c0a225c43a730ccc06ba4be256d295a15632dd5a4b7b5eab554d89c13edbdf68b88d9be82edbcecbbb3e8ffe6d56c29f11f160d8988c88fcd3bf661195dedc6c7b89107e398604f1c7b3e37b4b8d64fed4cbc725b3d50d93885060cb6c0b21ad72fd1447e41a467d40a2c823ec4f370bbc5810bbeca10748db384ebb114fd872cbf3faa09990a15cd1024f7e3d492ae7ebad4f93beada2c1fabdc16a80092102223cc549316c9febe1d75aae7b3b2474d24f006adc8f7082b895580a4fdd0661e9941b55af57990a8dfca0374245ebe033805a3bce0231d649c91687a405198711598eb86e017b1fb7ba1c552f3759426196f916f4e42ec5e20a91275fc20a13139c608fe4776bba9c436d520d3258ea3545d117cf52d805d3ac377600f8bc6ff2c448ea44cec89c3b7c1d1225d7599eee87954f0dc07d9eeec99f03dc460e8a901835f6cd989dfb67e035c8056de067f134dbcd4f9b6117820f404b7f9e376e2b3650522b9a165607a7e0a2dffbc2075951be7be8a6e2913856544da031a86190e8a1e3ddec6d0adaab69ac6aa3121529c44296600c7df96583d048dbece4b95a9ed6f7bc509c542bee21c9c9b07d6dd40d9c129c3aee7039fc1f91104c2c4dd685002d449a21b13af6068c1bfa530d04ccef45c9b0515d03cba580b1fa04761eae8c7537c6e7c2d81f20f3b14bcbef6d122fa81b43158971ec22ff62eef6247eaad3b04d8580cb48b6ca4429171be18d29ad455ab144dd22e860770bfad16958a00b9d65a5b09d7df01bf42b3670ae5871055201c6802c598aa53d3b28dab3020bc2c4b84eebe156ab70275f7e5cc1b9608d037343dcd4fefd70b2e4f83a85ef10218c06f723807ed7284d6823e027cd6ada2d54271ad40c1692f36ae12e4f2f7c969a99854119cb1bc0bc8bf42d23d2ada9fdf46dd0b4a29796a954e2dce5eabc5b84eae9ef03dc9f3c526bb8c132eadf92993e9ca6a7417a797b5ad868f4959cb3c1f8ac052a429a3c57ba7f56e2b1900ebc78f63142a9340b20562c288f3e8b247f1e93cca96d07d8572505b51594711feb6435b0db9a7b5b715a12bfc7d3cf2ac12cb2f081b79bb0305c98a67994d18348148f007f780155123b02ca26009cda345d0d576de13acc60793e97c07d76c3b9b16a0a4ea3d4ab9e6990a8e1a6624792d2a1f5563e246fdd06a971b6a0a4179ee92812248000964ed5ad2c253dd904e3182179fb01a4fdbd5fbb0d6cfcf63ed7ee2d8ef0c15408947b09220e4f379e43359f2997cf27d5cfd2029e5e766dba1206c109fa391df9fc2baa9d7c66c5a416cb1daf83b74a9d5277dcb82a24534b0a3184ad1b8823eabddbc4701970c140b345cf13e10aea8e7daa96e5405fbc10959f580bf2680b85a1d2f6cde748497e9d522b0a56ab484b49a78a0a800bf3f275aa1aa56d19fae68cf7a69b7d66c0810b0b0f9b12a3753b0a94110708e1535c60eb8f69d1044815b24ec507183a18285c74b0b35c0216a037ee0ad127e2e1ab895b7d6428cca08ce902b75944db45ddb00e334e3b6b34350685f1850124077362aca3ae0519d0f20b3df6890f0cc10b3189a39bab5c2b3d3686fe761522f09c4e09c1a2cbead6923b309a853cab3df12f5ccf1c135659ae1432cd59b76dbc85ab4b49b7fc6ec6748389724d58ebb4cc8469dcbd2f32b095634238b8458149e60752f432391a5680956546528f5b1f41778222bd4816139c3e6580438862e9657acf4b1b8bbcd6a8a1babb8149656c1b4748f4505667ca9a1f21626cb76b8c76772eef25b0c57f20784d6248144745ec1ba27dc9a46945b7a00d80c16bb7ccc2ee8ae18556f1e90d6616bcee8f30c741124f3cf7e10d07f77f733aeb706e9bdf76f9a0c334a0da49d1e20b57605c821c4f7cc097466dd5824f29b522fefbdfcad55791e18eacc08f4ae6e8c0ff9a7d212067e7cba224774b6aa54750a95a214047882932e48c72e74f2f77949a883f92c5f61eb6299bab83a511254e14c76605b126d81d9efe03baba791559061b3fa8a2e39b4578b767a1a82189631e7361fc1b18fb06011da00156ee8a48fbf7851f4b53e6dd600e7cbad905024112b0fa511ef81aa031d00fcda7419f1e0af6d17e461f7cda6aec94523761bd404ca46fb72db7b25bdddbfd666a2fc83ad53c7006ecc6ffcc0e3eaf0aed630be66852720ad5a348c1b810fa6afd7c756e8ec6532c264b372267529630204144c68f1a9b7a73e86d20cd09124caf0348ae61561a8ff8a987e7bb22604eaf66b4414d54b2b7504d68e9f47f4659bc170d5d3ebb1bd0ec160c95d8e6ae331ae17c89d9364b0adb5f34660f5072136eb7d0a7ea6a607d4a11657bb4c9b050a37a1b5609922019a9420b95ed01285023b326d559e3e4b7e2d6789b58ef5c89eb201eb57ec37ecb66ba7d6a99e61d53a88f993f682ff5072596a0a4d98c160ca6a3b94a2021e74648a18ea9b1639d1675910cd9fa52219ab52a6f5b5816c0b0e30546db574d04f9cb7d673d558d567dc0024ee8700702dd831d2fe00f071f03a70010e8ad58fc0edac145d808a364f777d4c135512f9df099b21432b80aae000020d96c01bf0ead416beee5520f2c6345699926307985916c69fee735adccd34b764a5b987c3647aa85751e7671b74f9b95dbc0f794aef812ef0fc6dcfb28a7e7ac5b2c20bb308d082e719afdc2410a33c72ec0b24b5953835637d820ca57b3d532dee22c1db829e91321c151d951e96b0dbf74ea907723e0f760e74768c25bd8ec91dd0f991cc3c9fb25794f5a2182009b4273e3d73cd1de9b7759ab98d6910b2887b35b83dd15969aa329afb47f035a87b5ba0638cefa78d84acd186ba9c91af6193af440a7a71c881f3c9b0187fcab7d6609c8528c8bbddd052a41930433cea2aeb5a91f0e720790af804e0b6a76aa8eae15bb04f3849f7cc20ad9c65996e78081ff25fa80b1cf0b22c6be3c7ab24ee0fb034fe743c2164cb300ff7b478b4a8cf9269d29ce47f4b0fd44df15001b67135969b82144f63c0bc68dac3d353ca32db446b60057589f551de14bb0958407c69566b97c6118e77ca9583838f2a38b8da936bb7ac43f3830650f78c3e3e37031b39b978e538a5c383d8aacd04f8a8c372ca93ea70400537732debda654f119e8495bb9221e277a2ce5b3bba3b6eb262e8ebacb9ef4a80a4b671a15120f5de9d0f8a12500bc6e341ede973a1eeed43dd9ccc6e735f8658e2af7b5242606f9dc8843edd0e5ba9878a87fda4af8644f75ecb418a800784a201d002558ba68ad4261ed3429d8f0a3ba071c346c5991afc35b28ae5fb452cee292f66c7dfcf6db811282d7da05bb7f84637f7e0634e0cb71e3e730cafae5f85adf24fcfc7f80d336cef06e80b9a403083f00a18086839d78d22d5b2528881cc3526596449505602e7b257c6e61bfb34b09f77d581155b36e7cc2cd8a5386ef6620dfb735d15e622fc5226f502c9dfa8f7cb29329b1ed2ddc2fccf3dd7088972032109d505e464043db582973a0d2fa11bfd2923a3ec597d2ee149429fbd6a80dab96a44c849026c85cea117782eeca9fa8ab076fe2e3796e7920e7e0c3f468401dc8e1283ac224f0e069dcb68e1599f9e3b366960b81c37668deb8a8729f835f7f772490c264f77a36f8b822ac83b29cd56b209d660a38227d50f51e2e840890bed28712b7806a4a3da713e5d2e3121826f952e5cccf138b6ecb6dcbca998a62ced925bc57768f0fabfa3b0b49c5680687cef81f80207a16681fa0ec05f8559941be815279888c38aa6900b776b32bc6b0cd3ef8c4dbecf4fbfe608be77e964e98e47619f6578dd198bb9bcedf23c1089b123807d3c6a1a4327a8acd09ce77638baf954ce3da0e8acea9e092b4a6ec31920d827149896036732727125c3c41e39b664b909ce4e166a2890d593a279957e59d5762a6482d81ce26a55d6c1a0968b51c5b8419465b14d54103caeced906805048dc9cbf9bb4fa3ed47866f10518a805ab8ebadf33ad8b6cd7e7700b28885b1c2586f5a83a1e65d3120d175bc444d97473f341055e3c2cd5d2357562ad3f1a6be983ce6762c51dc185cee71fda633498f62abcab51ca5ca7c490573ad0af852c4b09fa1f75ee79f0bd539a5ad971fd2bdd4c086ebaa43096222c338cb284d57c0d9a1f23c454c4d0274ea18a08b780ba681a3275c36d7358a3fffe859664ea5299e75d57c46c395cdd1764a0be3fda4968fa7aad2bd5f530d3c5c9a5caa40e06a511a5379e8c33c58baf32606159f6987ca662c71e4f0cef478e531c4fb393d40f5f506457c50c93ddeb3a1f769793564d825bad99be2a4c68e8ed2bdf11a5388ac7f9f68fd40d1df48a1f350d6b1c7d944e010dc231330172c46fe4c70111ec71df6d88d30931aae2a1c24fe1f4c000346ec7723bcdfc1b436f87cc295d5b130125293844fe21624e9413a131ed13cf31d741808a18f45c07f133b7e737d5c864390ef315c0ef468d4d64f16cf8daa36ee95abb94b9b9da12be9256f3efaa760dbd285fdf730f248ba9cf0b7e72a83ec97d5b5fab78afa5685daafe25d46809f5c7d6ac830da207cb25195c1347852dcfc2e683aeb6e010187e6828bd0790b62eb30404cdcabb6858c8dcd676cd90bb91a95b0b2d3439302a1746e18ede6dad473e137ddd394fc7310a5bf7d6e096e22b44c5ebecefde295fd5517ecdd54da674534fa1a48548862528e81f8584736328c49b530e2d2400750cde21dc66c1f8fc00b4fac1fac526500ffb34cf682dfd81b45cd4019d50249a956e9c83ea427e59935906bb94e16d51a77b0c3454445f487f28cac73c730099355d48c92c3923e4aca76242e722ecf518fe046d3828ed30e5af96e908618a3b89d3080a13bb589612f56fed93f87446915f082e70b02103afb259945c740bb5f55611a10baf5966454077b807300e9fea3bb0ab4be170d4099c61e5f3f6656bf9e78bcb952a6cd441f9cea6f3c771d5f2115a3e52d25c143a71fda9c4e421f99358b46653e62da93278e7a1f09a460dd30e001e461c08230a3a21924cc8375a4bca90bc9c7b6664d216246f7739780b528c59c66a168a9c925b31d863261b9f8e652b334ff70955fa2a46527f126eff52022e0d25b80b6e3a407706ae14ab905810276f668922160d4b3a5acd0ce12fce4788794cadfb78adb5479716a01309840d790471a5d7cd98804886643f48ea3fddad253b69355e039332bb55a346ae6e50fc63b4ed00fae76b374aa5a9b48d95c73be74362ef424d41ca1faf4d8f5b38739a4a8aa4a554ef1041aa29f28e4e3ad55c2ff6322c0588dd37151a20c0b45f5d6acb908ef555d12208e7e0b2d040cf399e16125d5819828733dee17a105f6050edf19b44dc94443801607bb3354c3cb740c5223789edddc906850e8af435a746f12a8875d287ea698670ba675c6dce97959e6c46b5ee22ef560f7267105eec91056e72e434a01e22f99cd59d40d864868fdeb27a1bcc8a56549fc0fdc2ca9eeb085be5f5ad2eadf15339cc89865e6437676970717035c0120eeb31692c86693e561088ca800e162f1c92e87668cb42e0c0832a6857978a829bf2be623d70c4e3995ea9cb9e4477212dee0886bba40b69a65e372557279dd49a8423585ddf774e9885b395f383a5445769f80974a5a9f94283f2f5ee47a525c5505a3d8503a6a4879c72b00a2916f0ac3efb85017183fab252162cef59b10015fb9ab2e2d88d873d9408c79715960062c8cd97b013f47c952e303f5b8ec82b10acea51d557e685d4760db696ba85f93ea2e411b6ab300456641845585e1a3c5f4d232831a99c43df49b5ffa24a1d82c3dda9067a3e0ce5876d8eb9a09c03d8117042245e8718c2589761b2dc86b27e34ca06cb5b38471a5512872bfbd7d57cf897c22e7b38aed1d3b225d3760ad039c4bf8b4c4360381549303c4636a70caae8bd6780ee9a34e1df0c6160f5f98e72ec179194cb48f77f98b73d6153088a5a85bdd601f8a2dc1a0e0fbd0b6c75075a1ec2112b2e2041ee230223d8dd5b340f99d3ea2fbd33a2fd4508b818c921e79e710a36b0952f4b4f296320ca880a8511d7e987c3d91f6c2e6fc26dc0c01ccc2c5336ff729ea82aede6066ac67f3f3de5d7b9f6ff701cb5e5b5e8591542d95b918ffb10a946d15d604325912d1baa159db458881e7ebaaef15b58ddd063dab1581b7c8118e75d0330046982dd00391f704d5917dcdb61a5abdea2a22cc88fd5287c7eee6b06ace4374286d725605290363b6755dbd7281ed784708df26e4a351cd287a9bd8528799d77fc722a912f860f65e27a345bf624cfd872a719375ed91db22b178366b19569a114e59d9b9e5db0cc4c3484d1d3851cc3897430fade12115ae7b0ce5b9038a70ec9f0f360dfa1bcdd10139cbc129a4da23f5096165d71a3aab6d2483310ac547da9a73f985f7c736bd29bfb9fec43f73d0f3ebfc9c8c38f6d661d7c59684196bafc72120d665413f6cf3a62206b8a6e1f665242d68ecd54cb06a738ecec1f53a7b04e52fd7d48ea719a05da81e918452227fa8cb0182682dc8b2d754b8eb88f80a689fca829835fa57410043cfbedfc524941babe32531e5e8cfa77e0e89d2e32d6ab7b31446be2882068a8bd8d5034b8dcf14692a0a8a27eb45f6f25a199d14e04c707b957bc10b116f2b4c958e1ea8bfb65ceb1506ee12a698588a685f1a495d791257852f45f10014682188db8f9aa05f26f873060fd37c4070d3c4f4b4964056d548abc3d5c502626dfea07b2a91defc2d4579d32446e37bd6ce794a209f7a52c31cb134353c5a4f9c06b90c2a69763ff319c38d1036f02425e859f02674ac370b5acf8a38b6951a73b2acb648711e75558cd1a3951819274b21afd352064720e183b42bebc1df71cfc65940b428e7318b21ca6916a67872aa6d23be7cc014eeb7c7203fd1c3dc7eef9e30d372b85b944bf1e58cc90993c90e0d417ebfb022f3611b4125d0f1390358f88a0f812a5039c7575752af8b2f1edc13c55d5ac19ceb69a49fb87a6e9011d4fc703c72bbf0094fd96a39c0d26a34972bcd13c1301ca38310a523c34f66e52a216698eaa181a99f235b29329cdb3f790eda093d9c0279eda6f132d30c9c90f6bd94e079e86b57b382acd9ecdd6fa46714a781ee3148148f52552f4dbb7f8e251136e00f17b613a31fbd35f5bb53a3ad76b39b5ba9d45a19294360a7831392e1aa4979e76c4cb66075dddd03ba02d1d271a0f93e48633869461ed226d284c528b17f76763924cc4edf5dab2364db706fe38ada2d0f563b4ce2f94fa28b10c9d8b6f9d8227a4a557c25aa78b2e2e7be1b53444b050d6e7c5ec4b386a74fd4c1496dbfc3b6d7ee65615dc47427f3bf532155f363236e0427f6a2525270c06b8fe7ce0dfeb9fc1603088ca02aa844c6008638b5418e3c16b53b0e2d356730bffc4ea7afc983517fbb9369a55b8a0431d256fbf240f437d74da3cd06f086caa51dd287d8d48dfbc761ad2ff44152f937a1c54a3d16b675b4d50393610ea8819823b2e40ff67a250c3b2bbfb7fd4f43c6d672b6388f43dbb0a963cbb1b70ec07179d6461d1b0379245a105c9574d5f9399a8c7db1274a417a208db9cc44ecd0cc4e0dc9361be1d446d1ae746975294808453bbe622bed0cfe84558031aadd0d7846c6a9af82ec6f79ebc11a5c2b2936494f6208719ac2a817640c5260279a3d8a34c02e5006832a0f2e6abd6fc732840b82486e7378695593180841a14e6d5ead5251fee994e7acf050d48bbb410bb9f99083cd14f3b14e067626d8d046302cf59c2f3e37125320c63ca94c6636cf8d43d0a9811802ab705d8eeab5fd4114ea41c14b95ffd8daf0d929cff32ae5cd0e30165b42ff583cbf0d45958295aa3eca4fdb045316a45623ce321032ab48676c3c806a1eedb7c600fb1c669484c2ed145bbb9f3d2b9ad273cf97c8333114d1474a6bbabedd4f33836dad16bd33d9d7f05f075b8fe04aff1788af897592a2f8b758ffa5e79705e8bee63de3ead56ef50d615b763bd6b8462fdc9bcc17ba39960db25bda454afd23f35aee9e776298f031e3b09b873edc1c912372a60802858be212a171502d3c1dc68926c8b7abac63dbc69c1ad5cbac64eed3d2e81ae1928ecd1e00d70864e25b9805381aeaeaead588b059a35e05943b1ed3dd5605dda07bacf2a2c0c809c30bbebd9648ae412a97397dee46d0dff23a8524320359a4aea219ec2c5a52374c858a18c6d8e1052ac06ae30ea6e2cac7f6d81205720b16ee2d5655ede6e720389d486277ec4ebdc91ef6570fe344a769dabedfe4e798c35a0b4ec922a8bc71739e56f7ab9005a63006dcf6a576b8a687d21804cc806cb4160346a0d8a9ae0a744e51a73c3f53d2730f5429601e53144d34722a07171391dc1c721ae0560276d8c9206eaf79a40f15ea47b2e3b99ebdeef3bda523c40a42b5df9e588ccd9bba9376c368a365cff892119e2beced182c91a1c609ae68c7be8708cc9d72a307424510fd5537c316fb24a8bacc190615d8d4630d4c7a307cc0d8410799bf7561c3b38aad5f23d441b215ef15e301f26ee4cd7470efa696bdddebf100c381d5595ca566b9a2ef0c26276ffe6f22e02405c17a50f3c2ca33e4770cff7b753265de2ae6b567ee3368b5c6fb335ee452530a105ddad07d5b2868782f034a04d9a1a9b275af78ecc63a41c03e25fcdc1e10b6425ca9018a86083ccfed837a2238620e0563ce82d2ad19514852a7a3845b1676d824a821c5baa53d7c26daa24f16f303f95050e74c3055b436dd7713017812ca4835a4698316459fc3b0e8aaa9f8b6f197fd056a8f1b4ad162c66c7aa7f60826b1133474e7e4d0f91093e8e4dd904be0fb8230150e188ae0be31a839030d53650344fa3212ec7848a543c82ac0f915e04cfaf20e676b395e6e38e97a7074052ef58c03605c0b9c603f7b1126bcada1173098a7d3f3cf6bcaa0c32bae7f91b69de68a1986d8f443f3c6923f1606f01c08e9e4a48d11b44854f18aa651e6433d68e8d13882e47038eefa1ba884fb8b9b4b2b86893a52eb0fc725148ec1742b1f7459da3f8282dc8554a8f7e110ccde24471ac74078218a72b34d474efd53510962ddb6350ad66f225322dd89af0338adf7328a45d1842a667fd13daacd4e4a27e7862cf37af7b676880f379c4c535e1c43ebd4265a5ce6505f12d4e4af8098598461c030243b5fa960834a2de10b02a08273bf0ae07cc74398380e37716dec17172706cd64fcbbe3eb4e20e8bf0473dba9b21212959707456ab7c05de811a2eb8543c56995461118cfb8307ca4c5a358487e42834870d804ba512d4060a5d51a67d55db70a072c945eb74e91d5151820be3fd48a0ee332926abcad5062f2c2b57802c8bf81d534856bd77efb2ec237b960ae56cd43dc77d578ddcf3940d6f0f02af96e794ca6126e142000c1a57d46979aecae6d85cecdef669be7be7650404cc663e7969bfb0293b3ba42919e72a36acbd7c005411022c2a7a0fe114157646054fd3e9545e1080337ee0201bd3912d2cc68a32eea2d26406640ec11cc8cab382858d3235033ecd34df2adb58dd3c5effad60b7d6d36a2eac1801d74b504931574745c45820f740b77302d1c400f4784d3ab9d8c222609e099f6ea6a9ee8cf757676b73b612449be8baf79bed04b3f9bfa2258d7526878af14d75a4a2ac75b81f9d9995145da51c037f990ea0edde3d0e460f8f52fe315f9c1814fb7564145d3c0b67885070a8941b185f1691f690de1394baaa3fc05a12978852e7f638983e8ae80d49ad99bae2f72d185c1102ca239daf69ad02a2e6cd0fe3598cf5f3ed2728fa8e0134741a7029cb42ed1d8849a2a57f76a66a87ea240c06285a276cfb58b204aabf05560f1e5e182e10d05b5ba8b78e988a1ad20da1193958975112a44be5c0451df54c14ecb7c2aff55e12daf5ed1cdc9d04889384c2b11593a20812600474d95c2fc25e8168590f511410ceb938646d8ac1c9aff111b26188741089ca9c5837d34144ce1ff8334758edc6255b87a4c27abb01b344dbe9549c774472c31153c215ec4e8c5c8aae88b1a7f50c54205d352e5adcde7061e1c9fd75968c0b7cf21e18286ce901e29dac0d9ad5a95813494e454b4e9e5515ecd4327922d534e3848ea381241a1e2be396aabf25bfb8635faadc0d0cf1cc4a2708531afe9daf22dce0aa68a598b10a89fab1789449bdcf743ce4c896b023c4a53393e1ecfc3bb33d574b5d3b3a1df2bd3b06c0ac101599b203e0be8bedc20b819e0473fd5b34cd1bc3f289b404114390f0e44de87e9cc7af56b8095c373a880306f6b496a076f7d751a969597262280ab0ccea1087e6d0e31a909fe1bc42e771d09df7666df9058ebb50805a763f99aacc615b6fb79469c7c011f04b367bb757d47e714b11365b56549794d6c98a812b6789a41bc6597b36d3d5cb49ef1841cce85241f404215999a8248170ac85d47e16dc2dac51eb173c73291a41c62066a559745d6b1030aba99aa2cca1a8be6235f0c466d2f4df58b798686b6feaa550a8897f34e0b8b385ec2848c744e8beeea187c056abee95d19c0c7cb2621baff4766787de6128d5ab7b745a084d3845f1c46020647633a8f1073a9e21ac87ce107f34448d1a62bb8688694320dd103738443d0e31640e11a54338ec10fd3b042f0f1136cb815f417958117fe0c311c69103ffcae221ebd2552a2bc6181287c69ecdb9df6c7d6c6090040f7b26efff5a8b36220de1b1b1059cf5a4e36480b0fe6456bf2e798537404e6d603105c1132396e67dc5d74500a8fb2720bd2ad9b76ae4ba57b0228e8836a404254a9d0279e9c27361ec5e328c48b191a14554828edba3461c39e1e2a2141969d78675b7722df0cb77fa725314ac6527f07051f41b9698cfff8359e003f74f932db8a36b1e678dd5ce09d518636c6eadefa23694021f645c82ebf82757d15896418020d941542896852707ecd9831d2f53cf209fb3598d6c35466a292619efef5154f48aa9e6cacd23db4d203ae1121d8ff21aacd1cf83e15609c17ccc585af4228b228f1e087700c0fe48a49e1f077600ad170a6b115bd73e7e5bced8c39be3ce1bc28d2caadd4b96dad1be3c84c95268ec068573aa425c6004ec8098e7909bcbd48baa62a40f2dd1f7551fa19647b90948dbcad2786b5e22f205a24652f176d6488796524ffbcd9f1a340a775ea18b6d7e45ba4015aca203d02b6f26d9879751a0c1e4b0c90b2a2d2dd24f3c6d494ded5803f85c6f48c8ab3181d33f7139faa929af7c78bcdec25fe2297149d0b44f3ddb0d41798a7ea3dd239009f8bc0276964fa1b72b934b288a45ecb90781698d6f7703ba97ab5d4631f01f1b818464ab0691144284a5f6453b42d6942b4db36e15f8459585a55874a010e480e7759b1dff5135b4bc85cf2fa925c415c8a7661fda3c002b1ad6eca67b904577641c9e227c42bd1660cdf6d98bad9f138ecf310acc974b86fe630d271a385f2d4ab30e4d9d698a487c04e41e43eb6ec8b5142f1f4a3356d9a55868e815592c92c7e17b4e079971faf4bc5bb560e6dbd237bfa12a02c0cc2c8c759b5ba515085bfc428f9704876647c99a85679563b0a3199045a72e2572379a8cf20646c5313eacc83553f235227b267339280f760e24f2337b2edc5c1c722e11f91c54b7d53eacc1a70a805289221a81563e90a279340b19e4d4ee5e46bd43663a08e9bff2837a2148c8af941788fc8272cc736d5d9c29d4035eb155aec0bf6999ccf8c21d286d858b20e264de74d25d9b7c7d2c35a5e124d237586bc7d02e222a399d5861c37acfcde36b3dfd9497b730736ba8db0f0e86c3d3515163ad77b1a20aef736c5a0c7ea8cbbaf642788e95fa398eaa066096ceb513d62e8dd15e48a404905850d206502c9cb5b4fac8628b59da8d45000e145c45c2b6b85228e3186806976ea247d10f73b08f0526a180dd8e41c512828563c92fad242e711544bcdb7dd85deb9314bd3047033d5444bb7d2f80f8da372342d6c7045f97df018468d9363cad7443b41082132a9435834aeb79dc0e72d0e1c077f5c3348de8270a1ea20f17f85a745a669192ecf36cde2efdf3d32a9a92fe1c86be9792d58a6a43eded2530e306a54187505a82d58d47bfa72f09876f9fa8162f5310854fb510adcaaf90343ba71b53fb2857e0106036cff078678a0ab988848b7592557d1706372f7a026cb5049af59fc555201a524d07759604ae508e3931a6a37643facb915b127c95a395a82916f68749c3443bf996d62fce3eb0302e00e0e004dabc39fd2e64fdd5e68750dd5ad62a6f33b125139f8f26366b2da4edbdf7965b4a995292015e0cf20b3e0c6e303199a0a17edc13dba81ffc09e2ddc7ac464dfaf13af5b4e7a718a3c6f588dabb9c58ae1863641e8ef13f59be82b180304cfac59bc7556e8edbcf62af9882725222d59188dbb40c9b260f072885eb837972b03461661e162c96f4dc8f7998802f0e83b074f047436979f9df8ed883558b5502b198220d97b90855d242157f0d6fe13a7be1c219162be08ce90aa659e12c180a4c83f2dcc35b5cff380adc84b9e02ed887bde02f180c0ee3e32adcf91f67011584875992e5f94807691464efeb58369802cecc8ff7833f16de6993b43c0b0b0b0b0bf3cdab5a9ee3a4651e1ebe02ce600167e6fb33934eb574cc6a13b3204b07214cff8a4a0aca49895447226ed3328c5e5346d82d272085a611a1a6546d043dca8b62dac68d2ae9042565e5424f79151515953672129580dd5c3fe46007210c640803db7366286802a8364adadf460934411fc7a13ffefc160d8c2ffe05d964f28770d4a568f7c997d0bfa6afeebbb3933d2294813c28ce6187467dcc23871c1a75dd296c28f4f133208ab6d7280d7afd1f0e392fcc2e8410421513cb85292b2bbfc2dccaf38a94524a151595affc90ab697ea690fafcfe193823bf9f06cec46f1d5aebad511a805ea320ec2232800118d39fd90b40987ecd5a800230c804240081446008f803c2f4a35821828040fc00694c2b70a64509e6958730c5839db8fd46c09995efe700a449f97e217006e5fb8f803327dfdf014853fafe0fc019d2371d3524c37f908ddbb00cb7e1196ec3366ebb711bbe419386db6b30f9a0b4561515151595a7eda93c0f955779c8ada8580f854b245b47fca28d5fcb307eca3ff9a5b389519a6023ec5a1334b8e36b9ccbafcd2515bec69c0403a8984b7c0695bffb8af89a508748d6698f736e50bf5e697dd328bee19bf618c94dd7372b6eb5c7bf6a337001157f36849bf4017eec4ef0c6336450704eab51271ebc2f338e24a33d66a0f63cae97f98dcbff42951f85dff8110a62a351193f93c1d0c3b4e688f5d0daa63d7e8cf939a851fc9c46a31e928149ecbe26e51de8cd3ff0859f69e41df6e98db71c68f1e18e4f06bee7a9d89d3c3e3fb4a66fcf2dfda27e676a8fbda8f03f934c0d34d8dddddd8d83a9b5d2a431718c0a156ebf6500f4fa2704e3f607b9b8fd1142e1f6b7c099054098fe7e13d3e8f03c1af5b7798c9ac02c78401d57d0a123871572e4c031060e1c2e3f2e2e27314ea7962ab4b4b084c1c26202c3645aa1c2ca8aca172a2a295ea4a4a0f8a0a09c4ce1e4a4d445a944e28244aa4d6a1d49613412454124e2b6e0b8ad67db342d342d834296615960186542e985c575cd2be69456c4e7c131de7e06c019f705c0996e05c0198e3a50fad1b32974e76b10c2a903386b30613055d0dfd4a93ce41a973c03875484bf4cfa35cd835a1ed05fe66b14eb15f694aed1ba9373ee8474b25478788a7eed3e08449a38f0677eb067fe9dde9d2bdd2783c44482714c3c1eb3c944629c0baf04f2bc7f93a95655af7ae5dd2bca757763230b6f66bb59deab6ef58dbf783245a584723918275fff3a39e94a9d4a27bb51edfcc77ddce7baaeebbaaeabb7ec21777d4daf582592e0355c952fbd7695b6ebe4e737f703a75193e54d409e32fd7c19e429969f4f229198f44d9ce620c0aad1c7d6d146b675fa47e507b7bdd6be515aabc944facf939c1210802aeec92eaa3f6bf78fd1d7ef1e7d4df7aa5ba76f66f7dcf9ed7327a9fb7aa7fbba754fbaaf7f1a88f4351d8492d27d75bec643e8924177fee3f8ea2997bfaeeb33ab44be36729da09dc9d9d8e078fa362e8ffde8f4437b084095d69d523e7b232a51774ac91e08fdac23a224e589e0e84cf4533a20181197095591c75392d25ab71f91fc06047ceb6b240b2fa5b59a4c9ba5d4b71e3fb01603ce38956b7cb28d3ba71377ca33e6646d294fb27c55ac12a42f7549e850c3eacad7b41425525efe666de8638d867a6af99a4e89576e29165ece4616b5714725e6f8cbfccd461c7f996fb25127b2fc653e0b25499bf666cacb27bd04f214abe6a7d89497389e9240dd4769ad26d3bfe7c9c8481c204f451e7f994f69ad26d3bfe7c9c848a0202139b4bac1b993a5f235ed733f7a3f89237d3c05553f77ca4edeace6479ed2535aabc9f4ef79a5c8f3f1b872e54f5eb673bb88444a42e54f241050a3f8e74a0702be2a8ff2383991e529eee79fba2feadcf99f37238f5b2a95fe4b4f3d45bf542a7df554f6a5d75aa08a4422bda60405c3bec5fec03a1b1bede9db64cf7d1288f410802a9637294179157b22752412891437cc324ef5b9a71f2cdd493e66ea4eb23b0d411f7b20f43122dad3971d10eeb1c73a22d9736f4485bd86aa2a98957652d19e8a4f643244b127825b61d2de3ca93c54dd9c54ba21a0aadfa8b167a58b3cf35bdb921f2795dfde880a5e95ee3404f6db03c17e838efd4a0744f4db6f2a2fa29ec25e45e535de48f6ba29b657575ab83df640b6c73a224a569e48fcad53f9950e08f6a28e883fd6417f51e9bc49ebac56ab954a5aba5a5d6a95c02659b0b0ae881220fef48bc4c79e08fa5c57c49fbedf14bbadae8662f99e587825ab75650e8a85389e9a94f43feee3402e14573e146fee7c6d08a8b29ffbdcf924fbb910494aa1a222c922751287e77b93467d7ea3f98d535aabc9f4ef7932321f8fe938ac568ece9dbe73a7f3d4af962ff7780afb497f663f9f813cb5fdd4fee31f6e3ef4d468f6f861337ad17fcc73a7f6dc636f6393fdf66dd31eb532c85fe68b5877fea875e76f37773e3771eefc4c0eddf9da5cddf9d89440fe32bfa6a18a832acd425566a1aadfa87dd3defcabeb557b737ebb517b6af1a75037d1466813d448cf191e8c20adbca3bd4e2500bef45b41b7b8ed4573c783b9a89f8c4c0e8dea2f76dec7bb830b30c8821ad76b1a0275a1c11dfd9a86aa2617130f1f3c74f0cfa1519fc9d428978e5b84f0e56eeda9687b0e7db8fb051adcf1c5300364626e8f3ac5a37a988aa930a583b94340853c97ef07a7d02f049ce15f82e47e3a6e6331032dee37f2613480ee1579cb319d6d6eba0a55fa37d7c3b198028d93284c1aa94d323b18bb1dde62d41f704687cc16d018c3bde018b7b7cbe65ed7434ec9f8cb75bd86aa439830e2880b703d8a68efbabc466544862061843ffdeba3d49fbe771b68ef7a21f4775ca0bdebbdec3fb75e7bd7b3fdf6aeebfaf7ae777eee7f348af4d703b9fe028d1afdf546342afb0bbb20d0bdae871f4ce35ed86fcf3fa451fcd7f59a6318f6dd67e4e34b998e9eed67e47ea3e7bea69bf42412a99f44ea27919ae14c43988c214c96bdc319cc214c867df6cdf5c834194f0d31c6bddecbb8d75378c6bd642ea73f20cc05e9e8422f6c60c60ff872fde5329e82aaeba10cbdae11aa6e5ebc608dd1fde8854d9eb810aa2a90f6ae24b5ab5fd420dd8ff6aeffeabdbebda8f2fa9185d1526ba3a5fc1973d83386619452ecd94218c6bc1d572784311f2541833b3e171db473689ac71c2ac86c7b085787c5715155eb3228b46de3c6c8f156a85f84281cfff5b38ece9b23106e0e4ec426d38d261493a8071fb1ddd8476c61e478b69f8eaeaf30aa1e46c5f139543922e97ed4657ed84679baae371ea895362ca0b7612172e3fa8b86a0e71c73ed6263e48f6f2fe0ca91a5d6f77817ebb2a36164116a615dacd40dffc59b42792c007896a14699de68d44a8b132d2668b16939410b0a5a52d072d3a2821616b440d1d2821617b4bca005876960fe861b6eb8e186bea1fbe20d9fe3e90d000000000000000000c0f3bc00dc80e3061c29fbb5c4e0fa6b2c262e344b142d1bb4a90b08070827478e0b5e07a3ba58971def54a82c3826169e6fc42ca6958b0dad73793ce47af020e2f2d77717b5bfc6b9a48492153d53b8fe9aece87463ae878e261d934e4d9772a6508528ad9507ce746907cec0db9de8e8dc707374d06df868a112f1733c0ea9f1f7c65c8f281a1ab5bea8dfc5722feac5d3a81cd713be1bbeeeaae2aa019cc1c1064cc372e40638609a165a51525456eae862892e1677b1b68b75b174dcef62bdbd9ee50cf04543551bde7daa0d36989e805eb3cab4ea2720ca640454b5e15dac1195d636e7663a46802808b31fc017ff4c07d0f31c9d8a2d1097972eafb9d81311a596bf6497cf19ae8a5019ae3ffcae317c2b2d366eafaefff505d3a85c61c0992a30cd45c6b585cb8cab0b9717ae2f5c41d7191718ae342e35ae305c42a5561775b3e1bf8dc786676666c681c3bbc56e5a40cfdf64372ca0e7bf4501cef047a6c18182d06b911a70589898139c17b880636036cd428e89bf86d1143ad40061dc061dd699ca802f0e0461fc696742438edb0684b9385cba4f87690df8623a03be8c4e709d836aff8eada73d9edb3f6c4cdaf34675d71b4fbdbd5aad56315039103e2e802ff0f67be9d2d671b17490ccf8386cb4bdf63c1cdac5d45ef35f9d95ceda10a3da22b6bf08f72e2727aa49f9f8ce953efbebca4aa491845756bfc65350b57dc5782090a8fb6010e4915da9c348dd57a9c954bb1f1a46b720fe127fb3351689227cf0c8200f8f2c7d7d8969dcc5402dd2e844e34a17291b4d8b72925d534a2965f6417c780a9b9fd27d100806c12129a57cad04542b5005aa9aa6753636274fdf06e5b12ccbae2c3bc9be08f7d7d3ee44fa9337a2a24f3b22285d91f9d963dd8974f240e89f70dd89f4d7fbd32f7540b0e79eeb884cffeb89e8cf3efb36a2aae9d16b16aab46aa594d2f314f7537b69abfd98677beda5fdfefbebb9a7f331b903a66d93bb28555df3faf936f4b11d30cb412b16f2d15e7cd9d5b86c821a6989a2040deef898673ea461294600691e7e0820ea7af84a409a1d42208de7a97109e0850b39c69f02904606be07206af45f4055f81280a8d2c38700a4c98163fcc180ff03a4e1c131fe0b8050b81032b91fcd859f004853f300883ad102f22000a2b6ff72f8602e4af45f001e00002038c6555c0c00697620001c00a4f1f1288d922b0f83b4778122daf30fc22c98d3283e8244a33e488f08e2ee2c05d3300bc6f89ffe9986a5e018ff53b783699010f298c6081c980070a6023639300ddf708c7f9067237303850e4cc3380b80331c030853c3344376601a267c300d11209886570f80336c0208e3cf46fbc3377a5464bc452c16de53f7a33d6779ff160bdbebc1d20169cfbf631692944fc8557967f94159baef0357e57dc5d2a7ff2171a54ac752b014d73f65746148185181205008063586fd888eac12d10ae16fb6619beb8f725222d51b862206387cc35060cff647a38cdc8f7ff48ed5ffe8939e391ee4258dac907e39c4086c700ea0c73e50727dc9f5cf9e09662010611e5c13c019c6018459310d1f61a6a207d7dfe8a7f63372e9ff68943f90678e07af69239751bc2facfcde4650bc5406eda29777364ba8ce50a857d7a6f6fe8b37fa4714bee2c74a6374ccd23921b5b43d9734c649db9b3f3bda45974cbc298cb49392522aff8a52bebb5387fed11bd26e67a2c11d5f0bddf85aff17e74fab44b5e9df5eebd95efae169f1a444621e20d63ecb5efbf8dc469d7e060339477a4f86f3604fa9a39ec2445d84feb2b18952ff21c588bcc68ddc861394cfb8b171be66c5bfac677df84b7c6a65fc25bee66d16facb6424ed45d1d79f418d337ad2d53110a55907c4d369d262bf5aad569483aed0908ea7e2730eb778b55aadea8bbe5625ea8380af888118e8bb13e97fe4d5c8788a6e1fb33f899152a009e42f25cb97813cc53cfe129fd25a819494ec0fd9d9d870bf3de44ea48ef45a06647b8dfbed491d10fada6b1d11ece91b512919f9f4eaf6f6da13413f639bf662e9a1ea54ea86601503f51bf14f3a5ec5ae96efd49e7b20da731d1125a527e2af7da903923dd611e9d69936ae6e73bf3d11dc6f5d112540fab72fe2cf3d11dbd3ae483f695e6dc494ce38e31be129ece9c747c253f2a3e9c2cb3d3e37c6ebe563cfd1df7e5a0e6a56c41ae7c6cf78e8c6d77a752304f297f8357dc9b4177f761ebb51d9bf554212658d5883fb9978e0bba3924c3cfc6185a90a5ffa1b555d4ec10837b85fbdfd8586aaecb18e8c342ba1c102d40bfa04c1915e1bbd44b851c2751c2be216d7a37099883f58b567d39e6bdf966eafc5ec3554f4d8cd91c68f1f7f6b6d11c9c7bfaee8b7fb2faec7c597d5e280307287f0657a398c3ab38e8fdc20695444c261a2d75e131d99af44bc1fb3e6bc419d3f536ea166a5775aea7a8b926e52a0dd3db0a73ee9bfd8ea4982d7703b3ed21e27ea982582371eb11c0fb13bc1b8fd004d9b64d4ba73a33d4d7c7a7a7a6293b8b547bdeda7cfd6ef71eb98f5312bf6f7dcfcf64e7ffe6fbf7d6f2f648b378ddabae9036f56d1a651fdf1468b5c8fa875f75fb4631fd447a9a0d0e426b0c287ec66dda9d64d0ab19bc31cd674f7407f6ba2edf6359e3db6031d4018bed9f3893efd913dd187aa51476e312bb6e291eb9f0f452471c9f58f471af531cb871af5459cfb46a3323ed21149bf78175b545497f6fc8babb8b2993fd71f8cf6bcbbe9832345a31ec2e931729c10271ffab1ef37724fbfa3bddfae2906972d893ab1e5976fdbc5bdd6befd1348c489452e661fb91ed992ca3ddb8fe324a31891fce86d469b68835ae44184db3701d230c1313e842f0f7db777c95926b8fbe213ba76ac51c7eaaec8dcd7c8b2aa54d2466e30e172fd8afa31eb8badebf98b2be11eb7217d7d9bd2a3c456c944fa7ea3728b7b9a0a500c4bb8410bcc5086e442bd90e834eab4a4513b8daa02ce3401d204e1186f798ae4a9fa6e8527c456a34efeb56879f0e0b229c6b671cef920ffa4fbf8caee54737780aa68f9720fdc82c06536dcd2c82a815b4421851bab80304c139b009f20812a0bbe386bbbee16b5b949c9c5ef582a6196afcd26a93fb24f20515f4321893d80303e8849bcfbbab7988364eb2212ad51ddd1072257fb9a6e0bef76b7e66f085ffef957b7da8b3948624ea37adb3ebeb6d998136d6cb51a157336258698eef54a0ca9f3951842b513ae478c5a3784474dfac51fc26c0161a2200508e35fc4a751cd3ed7f7339cd9bebb6f0833fb704f471dc41db4bca8fcdc2f412ff6d32e51973045daa451ece324ae0756fa12e7037dfa1ac63d83e9035ffc2792fb4d1fb7e16256decdc22da290e28e2cfba05dfa19d73f3a3989919b1946118430ed65b46eb556ae07bef35195a965254018ffcbf212200c13208c8fb88aebaf9158d3670e4d31d89861409a211ce3d38bf9c50403ce5c670032cb70bfa9c6f5e913bbe933c9b8fedc135bbd7517955b91b9ffb8878dca3dbf0ad78363c253cce266c73dbc057cf12fe3fa8bbacf34c6f597cc5e5c7f8e632b26893db1079026ae38a605677410771091c099f835f2708fbf78a4a2dfb920f84ead2fd71c9be37a5e57cbe38a69a60fc7f8578f2dffe9f3d53a634bfed750ebcde3008071210cbd82d421b2731c5db8a6866cf4e5b8bad08668648b13604103f9c0191c104ac1ba690f42d1de10984dfdf8865b8c04ce48d1a952a3a0f8f8c82d75321ebbbb3b4a13b47caeda52db22826cda7569dba65d26c09ce02e6d9b9b7671f3790ab5a231b155fd60100edf30ff75953af62131dfe0540b5546340a1600bec08709f88110c20c81106e6ce7675606c2c0e7224a95f49e1a3d3fc9565bb2d05fb8d905b145b4071bc2dfea85a6abc9685b118d829b161f5bd5af5e085f33798a541fbef6e39321a20448e94b4f84f4274fd7504fba52c70f55d542d51132d5e4dca47d3cc537f0338d20c683878ccce7d51acfe463f6ebd6856fa9fd3eca5cc83e97953fad7caa86fac1a00b7f48a720af1ac55df86c0367d8882382344a760c032b98718196f1948cbfc0870f39874eb554f0659c7de00b7cbe812f907d2ee41bd809692051b740c1feb9bb333b333333fb6bceececccdcdf76dbdddd371d442a38d2ee68794466666666666666e6c8ef235ac82c9d522643085e7b38b833ed66cba33dfff8d7b7686068334621f1a5d79efbf5b38bf1e545a99cd7d36bca872fbbab69cfdf1f55a3bbbf8fee8ecf2ea83f1ac5e37a7c27e37a8c31c62649d070a0d90a027d361daca1c1025408db1ba8fa73c7a3bdf8527a9e0c629236c80f20ed35901f416a7c7e006954101f9e49760cc39cd656eee6417364e6eee66e54f5efde8187bbd77417364aee67ba4d77c037703bc4a206887e711f3e208cc6513ee1fafda08f0f3883691b9416aa58c5447b44fac5998030fe70283201679a69bc30c893cac850b9c3870f0ef8018846cd77d691e6296c00616a00617c0d35fe7c6641183554be1dd350bb47338fa798f0177f4a93b47c4d1fe116b3da8b6dfc57bbfe710010dec2d2d23d4bc73ced4d1ffe40e05cffe875009ca17088091638648243cc82305c03f8e24f84eb6fea3ed30fae3f0beb807978988779988787a348c4405add608f1bb99f11175318b2c70dae6b24b71ed8348f4632b1fc650bea451de3e3324efd7c3fbed75f16a5c21f162c8e70c32c357086593a5337e31bf563161633f822ba5159cc62d69541b890ebc1c4101343945666813c90079479980ac230c53cf005760755ae81332cef2d14a97021370454c9c83689ec6064f98feb262d031d69c1852cafd51e1c638c313233e57a308dcccccc31464e61124fc12ce8f9375313ca49895447226ed3328c5e33252505c354524c2a2926cb1006e5a444aa2311b7691946515276dc13183bd259344ce67ac26ccd960c4aa353dbfb84a2a78d7c43b2d11893cb6a775ad88304d69576deb63a7a70906cb8d35e15411e549d50e57fce7216f5df82208c3c4306c92019b4b3d35f7de7f21ddfd9b15034baa68c190f37d19864145ca1c11ddf9561537647c9d208528754803aa5bdeeb4d8127589bf7162af4138c33259474c2da8f304320dd7cb70fde51160ca4d6ad42e08618136a166c1855018d7ff5ba892bebecd0e14d73d922181fc99903fffa61a46951f5feadca0ca2e02c59ff63024d4cfeb9fadf65c2289df40c8d9491db9d35148bf5cd24e7fbe10f92de3cfa8515207bec8973b52472e913a7249a35a7e3f3ad9533d972db923abb8fe4c402ae45c4461c917d0b89feb985035e65071fdceb6342ec99e8b29b87067ece27e52670a69513fd8e3423e7a3c3240141a18357202a2b67802b8a286f97e06e8423e0691e8b791888b71d3e69d34bb4f311f3a69c4a6b4119bd2faad775ac8c5912f5c69a1107d93f09a761f4fb9908fcff41901141282439ea7d82926af0ccbe4c79962f8c2cf97e30fc71fc822739091916217cb85451c196757fa6a2a5592867252aa245ec99d211d38448243123b4225fde74270068e0167b6686a176a141b8d929aa750dee9355d1f9e42e95ce7a4d4f5c81d1c08e33a9e8a30802fae1375a053039d1f9cf8137fe24ffca152db5cb20bf306003d8ff4d0a70700514e05e8f9a3eac53db7912cccec1274897af9a7d5449bb4dbb3e51e55a38c6f4437200c1a621b9c752a40943402f47c1a2575da53510b6f14823071e893abeb2f8dc0c6f58f6b0c216daebfaada1310d25792126c4b42fa9aa6b10669760856c59f8873fdfb7d09125c271641fb2f02e16eff4521c800a2463d31601a1f1cc334bdca49723df2e03a153ba082633c1eb953c8560df87617f583f32702cd39e79cf3e79c7f713da6e738d31c215b4c8304c7f868a7e27a6b0908a3d39e2f913bedf9b3507da9b363c47ca7dd11f4db1f09eebfba214c23972c01672412208c9549809ebf48b4693f052ae8e8e20b2e200c8e2610c6450a3a4e5168d902074b0f8471316901614e2b506851c902c2b0a43041c162e5e40a959215102685c4036150ea134e9c00614aa2264018973a55bc4402a3bc08ecc9254ce34a80311cb7b36d9a2321bb9fcc980061b023f5933aaee382eb2f97c82a98863122ed39b6a47e52e7c785845c28fe4432225009c9c56cbc6cc695a42b2de4e208122e66fda26a7cc98690a77cb0500b5121267c786a040c0315b0135247ea481da92375a48e9c511ae1fa2a99ec41f09c29581132c71acd30be681ba175326e6f233a01a48294ffa214bec611ec7afada68831a1882a0e79f59a862556699a1aaef0842b945ab447479d06db92ee46cd41f7118b5fe061a75fa617effec36d09ee8bb3bd1f67ca37d4222c99614894491451d0f15e3398aa3c91766da58fa0a1dbfafd06ef44fa37a687e5be766d5bd2d9b7c92c7bda707bb2e9f9e1eef111afdfbcb68f45fb3eac56866f90948d480a3ea69227de4cf90d68d5e7632fe321afdc7d7d5ee0c47dd69c45dcc422daaf0c6a5f6ba1a6f74bb98ed31ea227b4e0f2c6ca355425da660cdae62f4137ae13f639441651ad77bb690422e9bff933cb3b3f844641fbb224a80681fbf88fcec8988bffdd615d13e3e5475d9cb2722bef6dac716aadb73ff794ecbcc9eba1b825592c7573dd49ec4993fa89fe419c28150e0b9c145f515e2fa130bb121441fab221135f57841c7b85ec60f88a08468c5f5bfd2f021cec69bcd6adcb0455f09a61a75d4354fef5c9d28136d7d3de5b853098599e11965cc2a990c6694952fada8a8743ff567c8e3e56c761fb4e2fa651e626b55f234eaf31e2c8749a7dc44460563aa51afce5bac94ff9ce5ef2be81d303ca794d3e329698577275ded7a078c94535fa17f32aba43ee47898cc4cfa11e94727fe2dc9ea7e5b92d59da2b7221345d143283af968335b0367e215fdb48cc44e94679452698afe3d95bd48f240182be415120bc924c62cc7152d55f6496e589575dce37cf29fe4c971456b672787776227faacabfe22fa98838b59d18527dd07adb8a2ffbca762b65ec8f1e0a2ee8471c5ec7619b3f64ed288aff6226563d163a2c76ae00c0f4f0f0f4f0faf180787358483c3e2e121e46def3cf1331e4f659f8addcbfceb4fdb65e9a599733e6ca0bdf990eb11048e9e8a217548dd47abc4c1b946ff412b56384d0c2bee7c4f790f4f8f696baebe7682cda7d3698a6a20ccec4eb3a6fd6a2b94071675ae83759e537aefe9e9f1510f7dfb69d743f1054d456c0118d849677182abf230e5d69facfbea8fdc82c64e0cad06a4691dd20c1a4c93069ce157e93e935367a37fd6becc355f9ee3290f6a1da6913a9ea373f97a90a7fca50ea95692d4119d88b0a6a2a9b8fed8c968f64e6d30489d45ef341817c7765275733dbcc99cf23f388617fce32ff1f933eb26bfac829b652f3f48f6b20b121ffa0b07d1b706c27077ba78bb66e73ede53fff39eeb3d44877e7aa887d26814f6fe0e8633204def708cc399eb5d3e0ffa3c481424ea18bb24ce0ed3603086471d6bb76f7529788f8e98fdb7e35a25d73387d12b9b9fde983383fa491ec924c35a0b344031a9e368713fc96345b3752537b3bdea510361e0ade9cc320f0ff3c61c08e3538dca9d64499cf6aeff248e07a962df1c5b46bf99d03b9207ceb4c89eebffc926d7e9c552f6489e346ae738158dd2a1622499c8512779daf30986fa491ec9237b3cc775d0a81d73865cc853d9fb7b90a7e4a7e2471cd38d5cc556a34ea487b7fec859d3b1656c3d48eb882801a27df699d6558913f4bda3bd7ec9337a91164366489e51f7514c0ed1a1ebaf851851dcb632c2e00a257441d3b17107c199c4f114f7de8cbdf7788aeb244ec5bc47f28c71dd8bebcf9ddcc2655090077990074d19e1cc9a882c8d608355d0bd0b9b401fece10bcb40580333530f97f6fc31ae87e76692e8fb71237ce1c7ec063de879fcdc2581c48df24ad92541e4c6871d5fb023f26c86decb7c32738bfa5d383185fbd5db47eafd3e75eacf1eaaf87d786a3ef6445c9f7545b2bf1eeb8a280192fdd55d5f04fbd99de8337b86759002d5bfdfbb0f19bea8913c5e90c2fd9ef9a34fa1452aafffa9f2a346a7511cf79b8f0f97c16788788c1b2cf356d9b4f631f9f8f8f860dd8f918f4f1967f88cb1ba21d920245b33370d9342e5511e7bf6c920fbf8acdaa7714495753c353bff286d1f1d9ff7799ff789dcf2542bc707a56316e3f8c4772cb49693dca4852ad1476e4e899a0408f856ecebb77c353d6771bcc8c2cb2a963fbd8dcbb78858be645d5eb3a7cf6ccbd71f261ca7373d90d39b3a224a444f84c5c4f2a71775405a1ec7e3e888b898be45f4a6bfe4b33c11577712999e65087ff940fa6777123d95dd49d49de41331ff7a22e453f95757440910d3cb8e48cb9b9ec8e959aa8557a56664836445485ecd9babc2cc6263637af92d6f6ab1fc33594e270b552d16aa582c5499503ebeb6f23c3cdb45d84fccc7e784f22baf9244ed4e28bfd24100aab657e91e7bd2e8b36be3f88652f6a1342a49b13f46dadb943e7bc89d50ba1fdb4300aa364efbed8168bf754494d42772d26d5f643ef7dad70e48f6277fd211297545e46f4ab0bffa6977aabf7d7f7f91d99d6a771aa27f7beefd31f9acf394eaecf0f4d0bf1eda703f5f7b1b9bede56737ce43fe12ffc75f707c34201fccc7e67aaa7d4da32a167df8878384309f4bc626dc087386e306107e4308bbb5e67ef01fc237764787cd5c3b84d0ddbda1279910250e2617c9bd82244ff81ad6b006a10bcbbacf44bfbf32f13f1eb7c6257dd81efcc848a8f3e1852faf7c78b10e4af91202bef293604008e6959d90d8d1ad093622ddb7d060a384c8a71f5febd6b4d86116525aabc9f4fdc5304c887cfa3ee0d51eb3f035ab89511f6ab051165ed841ce01f0663de85f18462dbc8c60ec61d0e08e36437d17ff5e8077a7e6e7eed4dfdd0b7faf51b9ab11765e22c33ab73fb68ff65a87fbc9dc6628fac8fd208f4c0e3529a8aa69af77c081fe0efdd20f3f723d44efa351188a0e4020e0728a05f08300976d38b53c3ff514cb3307e0f2f7520108d3ff7597ff9986b1af88cbaf61d647cd4ee58bf5b0c3d734104c73811f4c5304c7f46f806398c6088e81331f84e96f7281229806890d30cd900fce90c008a661a23b3348f065f4273b7aaf519f3d82697420019c3100134c23c3316dfada5ddd4b7d160ba136371c1af521f1c3e87e485ce64ec8f5f3579aa9fbfa0590532cdf007a489a73b2ef679bedfb75e897c94a5d3f4987ebbd46d5ef6bd479ed65f36b9c3fbe22ce7e1cc5c736f858eec7374ac41d7c5cf44eb9c4bcb30b5cb8d1d328178a6e10be4cf3c353f08bdbdbedafde0ffe783c347f007ad00301f43c15c421af70d0d1fde08f5b517dd4b4d71da4610cecc2e5ff44b28310c6e3141aba31856ce6890b21b76215755ed99dfce54315d69dbc3b0d81bd7c22b097da17d18a64af3d548951e18cca6d15dc86c1ed1fd25e33d121019b50f9df0857e082063ce0220a665069cc9d86908f3d11fdda434e0920d9cb8e48d641870054517f914a845cefdde9775ca8a2df8e44af7e48d5651f7ab1623f8004f921f441a03be4089f221af5f1d8c00f9904917b2581c4bd7668afbb9af8ee1f3b19b71e0b2affe7ddf67879e13c91576c737d0cc5f52fde0b5101809ec3d4fb8b7f00204a08e8f9c8a13def9268df570805c017ff0cc3b62ddb9268ef27a86cd3294d1b12120a0a0202faf9f1691f97abb8ab91e85ba73d51f77515779584fb9ae6f959bf30af78c52b5e6d5ac736fde23f79f544c53a1e32bcba3a945ad9a8b2a38e82faf1ea3acf853650499b64157badc9d5e1890b7f6a724355d8c36996edb8d95586edb3f7238da29f69db49d3b02ccbc0d0c9b22ccbb22c7b0ddb6877daa8d60366d967d9f6f26ed96719cdb2ec37ccba09aabff442f56f20fad90d9cb93efbeec96846339ad12cfb9a8c2cc33ec66d7b3a5f9bdf03bc12de1884db930ffeda6bddc987ed7ddbb22ccbb62ccbb66c7b2d6b34eab797bdd699dacb5e76a1f2c31d5927c45b740d7187fc4b5e527e8472ce18638c32464f8b4adb53c31bf7ab324bda732b2a43a1c6f7d94ac47b440f557681061b723dc8cbff4987ec227fae87510ff0f685cf10c6bf07d819696e4ee74a1dba84eee864402ed4a84f0a5dcfccc8d8f8a88e906483ead025ae83e65c0f8af291eb7144e47a70578439855318e51bc5f2686f3ecad7fc003d367cf41a97bf16c30f352e737b4102ffb5d00c90fffa8c1ffff51680f8afd100e2bf4ee3f2d7655c7ec856b800c708f15f5fe1f2b74ea322f0fcbda4511078fede69d410cfdf555cff80ffba672688ff7a0b9a1efeeb28ccfcf05f3771c07fed83f2e1bf0683c6c77fcdc5e57a7dfcd753b8dcc1237ae8a63ced78a4d89a9c9af21f0f1d6a7c34ca71da739447f183699cc5314098c68f708cb72ec034ded299ba15cf719c46519df6a28028ca621aaee547988643e22da6a12d47c2345c0e75968a1ff1568e23f11c09581e1e8895f908d81e0f01db801fc232e07fd89817c212e02fbbc33fc0aa3e087b1f089bfa1f6ccd3bc0c2bc0f1687f76107f03d581b9eea344afeb46704889257809e049266708ccb208ec9611a9906c7f8afa4708e14923f8da2adbe0244511e400f88a519326805889a7165d09134a4106bdd45fd68370179b0a6ef61f91b60e9ef6075bccadabfb6e56beccab7c5f12a165eda6a1497437980c33434876328151cc33aa2fa06d4fc55e18e5c7f9a01310d8703639c6938295a4cc3714738c6bf0138d75fd5d19cdbd574545cef523a1c740c60794d93b1341f63679e0056874fd9053c8c4dc0e36079fc00ac0216609518f2095080026c6686d59c8031fe3c74a0b1da0ac2f8cfc09cc804f09072f6b5ce9b8c3dc0c7d81c9e0016010f630df038d802fc002ceaade59bb24bd07b001cc019ba0308b3321ad5ba83960150a5d2678fb259016c0606e8f923c0666360cf3f079bb5013dff03586dd5de6cc9be250a60e7ca9340c6a5a1e7f293f321de7fed6af996e89b8c05c0c7d81b9e003600bf62773c8c15c0e360bd1f807d790e0752300dd762310d87843bc234b425c56d69b17cb996a6b5ae3f87c4bfbeb4e55f5f01582e08d0f3e7721af5227a28faec5f6cf605e8f97b360b037bfe01b05919a0e70f00ab3d0161fc6fb0d91b36f30284f1b7c1666670cce957ecc96fd7f2408d3a751fdf95f7aefb56dee5bf95c79e723cacfc7f8db7d82237036a1484b7c5c26b2dbcfdddd70443189797b379ca396115adc834ca3f87947717cd26c7a3e0553a1ebb2def22d0616509eecabbbc2d0f11d09272c2e1d27d7c5b523a08d3d2e500a473c3cd808ae06f62798dc5dab0744ae8d337bdbf10fa292615cb5708fa295fd35a8ae5c7b81ecc17733ed06eeb72a0328d4ae9bebe29ef39346aa5fb9ab8fc1026a55554bea6651a453b98944e06c5c27b623fed89eb5fca8032316466c8d29081211b43d6c6f5d7b2783f2ee7fa6340d7756894077ae8724d92eb21d7440fa9949c7e981ee8a19b436dcf657278930ba773a10d3b9a6823b10936426a828d44cc8620f8478ffe422233337b37176b300156869f81d116527239053c3a14ceac5cec5de88e8bbd46b313ed78e84bbf2ff62e645cec7d00e914ece159ad564ea8302ed2c0e462f7fbcbe362bd4a4318b0161766e002f6395cec29fbd0370803dcab47a442fd9cc56a14f67e247b79b36ec3b0cffe721c294cdf1ef66e82da2fbd503f5363df60348a1f8bffbe320d55a10ebad885614dc6c5b4cc7e4692e801def8b0edc987f621fbfeec8d5c2337b31876b1cc74b13761dec57660cd530b1adb8e32a8be3a401b3d9b2f39a3801e4ea3264e7b5140d48ce287461fce28268e161d7f1a4846c3b62ce58451285f495a27d9aa85f7d2a27e328874d9a0e055a6214fb19054545858462ffa202ccf498e258e7d7561022497011776e10417ae86c2821b164471d3a8c6e936c9a0b6209ec05486aa8677816651b98061a4c1598cd39e4f29660ff0b6ec924c1cd6a44222aeb53df74144b3d5de11cdf5a0dd4412bb39081764c43acd3f731ad5adc397c38ede2e3373c747aa9441bee3d54f97c6d2325b3d56ebb82fa64d06c4b4c7e69c59c673cee93dd44343433e5b570f0d699b85aa89d21e8a2b837a07ce5c18ad5ae64c809eef3413a66816aaceef2eea7c2db3dad5a89d17b33a34bea0503fdf59e1d2afbcc6dcc99f3ccbfbe8fd08c8446b21ee8b88b81f42f4db07193df79193cdfdc32693a963fcd8094179f97d82f2fd2728282828dfd282123fc61321487ffa21e5555ea513d2f2fd2727282816de167bbd1243e8c57e88e9d64fb128bc9d7c4d9f94ba99d3cd56ffb43c1cbce894258582649014ea2a204c13208c13b44cc6fffa470ebd1420013f3f5674f6fc5a77da526c5f2d00a24db4a1ea7c51f6a2cbca33d84a34c020d3883268f445b6d167dc6988ed451f647b91e847fc331275fce32f6468451103a0d58fc842d588c5daa0e055a24e09ff13238db768e9d571d9f2959f44f41a6472855cdf3fb50b5ead88cc07f91a1835eed0c4a8f19bf7db71a7f7f8cb2521b7e33b59540d63d272c2296b35d14b1a6219227141e8b8b29b393a2e9758f295459d2c1c269587094f4b19bd595e4d2c968b62715bc70de2fc94d6caf14208f3ed5022da13c31bd3b05ec5893bdf8156542914c49aad2867aba32f3b05d849008bc562d16439b8f091c083bbddcfbbce621c5ff550c657a47266d95fdcddcf77ecfd7c87331ae3352575d69c72c834715897d470d8a668564fc10456a37a077afe557813a0a90c300c3863f234b01aaa1a5db8fe100b348beb5c5c1c0873444efad853d82f3bdf719ece792e2ceae7975b0795eb70a37596b758399bce0e380353b3e5eeddb68d73ea2aa6ec7c07aaa014dc58a52168a5fa66eb6a2edbb4d88db2bd8a46a33a8fefb427832418a01c03cb36206ae5320dd9fb8a19e27f550cd077b097414ce355700c1ad69f00bd97949ff3a9effc19aea0c30c56e8cfc7c0d16cf84e93c177745cdfe931f41a2c4229dde7d2628030a70e43ab0161583a0d7edf6930341aa53e23a583200c4a7f61e4050853ea2ef84e9be14e60545b813d679afee9327ca781b6ce82ef3417208cef5c513fdf417db3d5d3a8af71ee4ea3608f0e7ad0a8937ce84c1a75ca1e7a13a6b9dab3a91766a18513f7e315df3014ede1449e3873e2cca1ce82868686e41a43f371e00c7f95a2ff662b721aed39548934debc873b2924837c673a71bd8dbac689ed36200c1a208c1bfd869623a5eb21ee59be88e8475f847b96ff660b07771a42f4a30f22fa51c712847b9651578429070b2be1ee337257be95e7bf3a2e88b6317bf95a673e60d8caca63f1b91e2b5d929b576d7f6275dc6af9a2f84ea3c8f02a3ae52c6792e34dc0904349b64ea6d136a458bf28275607bc4156d452d740dd6c5dd5f295fdb313b4b3b3b3b3436fccbc8dad8e1b6d1cc29d16bb9a0036b6ae84687d092e3ddf813045940019bde88b70bf7d91d18b02d0899e885137754a4038c3929d952a013e2ad84267a5822a25fc1ff4b6291222fb9c46b1d39dea5d21fc79ad0c497bfed9d7b4c6f9b0e3294969ad2c447edba8c9ce07ede5cb6e0784995113a3fe5c82339b04af418998054d28e08cf6948dee377adabc6cd14229dc69af0bb92074dc4cc7d5323b735a1349a7bc8a7e71714199ad6db61a75dd89a4a7cece75dfb9aca80dd49e77f1d4af87341cb669b52b2dec41c21757c766590539d6ce94b17fb0ab796767677601a958a844ac759655ce32450302000000023314003028140c8884c2d18840931549fc14800c81b2506e689c884910a31042c618420c3100040060046060b44d00c09360af48ce2636f82f75f7ef0fc2170907d61b52ee73f4e1f8e3cb65da8cfc7bdb400f9a87aa5a57c37593863c7310c4177b69c00dfb3cd1c18ff620acbf178deaea44fc98ffb41497c43af8caa730bf1c9bfaa75cc8c0bce5540513e90afa0f7955872fd76fa8fb1786e0298225e53539ca1dcdd8faf7097b6db9ea6c13ded89f5b5648e925738bd523962ba3ea10ac0d660ae8deaa64cef6b2aabf7b82f8672e036302fbd5b07fd998b3df95742b5c2495283ea0fe81ca5b1b4343320e550a87c3c45974ed878d468ac412e899f291d2c65bf7074d1112a409380a8543a837733740f01be83ee37be765cc74cca14aad441708c8f75c0aced29155cfeb1470da5dc6b8a788ca35860c158d26131238ed5c9abbb50bdfc5141c4a3af24e203094d67014d5e1bba0f5788fc9314217add4a3e8d4d0ca53ef12661ed8488acfa7a1a7e46439b3a2574372700bde61d593f08299fb9d3384fe791ea551495925d531c943a57cc57f09a8d9521934b9574af2525d8c4b655a82c920205c8bc5f90632dd9944a12fa0ea655c1922fd387f52d75db7209fa0b383f29dd0afcf90e8c63a3b6787bc3c91ed41cbaee15bbd925ef2a73f110926676900517d3c286f38490da25aaf9f5849714c6de5bcee8207a2408f6b62107710bb0eb2cc10cf3f74b3a2cc86b096c5043978ab8d74aec5e29d45f8250abced945e9c336a3ad8e10f9f2e7f088339557bb9374e060a2269efd54b3151bda74517893881620aa5c851fc81a4d73f61a2143e100faba3715e38eb0aea9565528d7b7a723e2056a6ddad0d9d74f3cd8479b1de06cd99938683407dea7a2129458db2f925b2c3fe7ce9fd111768183824444828ededf727a4ec10abafc56d436f0b5e7a2920db42515da5b8e4d62f04479dee96b75a8bcb191c267417e530b71476622b5c4ade1582fd7ffa02c77090b0d6516f2dca060d33e3ecc7e7017c96e53e5d85df1295e41937cb87e2c0b81c6d28355c38109bfdf8e49605180801a59d9d0cf296f9f95b0a807ddf7482f5331a9dd85f09f1619ca1e6cc8894ec742a8f59661ad0fd4d61e2466f465837cca93764b7d5ca0525bf773d8b7247776ed051e88a11d5f509c787f6cd1d04347659d6ab97caba61b2e3f88d76713bc3b9299d7ef281f616c7ae4b6688e3ae92bc1365fab4685bda2260b7d675d39493af6170d773b446301536a9a315f169de652d147a0af6283974071ff57b5684e5755f6ecd72dc77e47c3bcdc026e315ec725d1704b6f047000e60e1b8f20500ede66b06f71f2ca5471150127e41d96b1ea749ad24d154a48e743f005222cd98c0b8012fe9b3f929d782bb52fd915ecb9212cf454eaa9be245c615988c28e9839af466a20bfae15048c698612e2de80a35cc32bfbca9daa88a65149ca02e2da4e8d8337853e6cbcf8976132883b56cbe90c9e1351ff676e42a7e403b4c28d025e8cebe1b786c399e849aed205b5f76d9f9ecabab9dad1f083104b6e24542f4f0dc0a896047cea92566f74caf5069d597e84e75efeecadf3254ec941dd9b1b9605c4e854f06fe002252dca8ef20fafc17d71bf2bac08ae030632aa9fdccdcb6a3581f947b1eecfa98c2db2213e8310e498d1c73fc40e94fc9b585765049a820ef20bf7132ce8f568591db1c83654fad1bca97046e5f8f54a4cbdac1e1623c462db2c969415dee8f7463facc8ee6cfc2f8f9e074760904654bb7e8f7481971f32691343d7060f24a4c63e484532325e74a1ed2c6046313cb1419bd12b3e72f9bce5fdeea98317ed21f5431d8b398f7e16fb6cfe2ef969f3f1a40fe2e05ec3596b048a36409588d1cf320f71a1c1908258c668c541c67c9da01559792992f56fd8cad11b048d03c4297606bcf031e9460776a92c1999b83f5ffaf7866e32a45bd6f8cf3a535a851fb5f9379ae86fa39750530138e10bb3357da15672608a5960af4a6665b247bbebba3d7c0ccec800d7a0583b295e8c044ae772c677c003f3efc96dbccf5e2aa12cbdc6d106b90a27b419e916e113dd6b7b6551646a94548c35dc34d98f3c21a6409832a8c9f021dc303cbf331a10f4c21eee15b9db34a69659b167530569d521cbf00c1f31770507c5045001a85cb18db609064131afba43c20e5aa9c1b59ecccb099776ab852248a3faa9fb347fe71ff41186cfcd0565aa97e1caf800043cb25f58990d6f68a85b7cc6a705c6b3253e1d5319ba13b673bd67f33330d3e145da0f4bf8b58200250dfccfd97b10563705a82668a55f629e9f6218da521edf8edd04d04094fcd020f2a8e0162eca9019ca3f160800fccd8fb404dcf848d872d7fd89bd28cdf50fedce2e46090f095ebaf550319168a280c805c72cbd6bf9b71067e8ed9d0437420bb88ee4e02d9ecba6f98dac103acf83dbb549c2d1319d24ab6c977e32a52220605ab60f6bd724a559b81177d0482cf144d1b9113c30f924e2a684bbc290f0b5943b9d3d0251842b09660a318f1150697e115fc7084ea3e98c5dc4411b9b90396a77a000c726c17c99a7e9b07b30d612fb20a6c68bda26d1bbbeaf54e4cf98b55bd74cde70ee17e4915fe289b5479e37d0130550107c1d416c3c130596ab8885784144de242d678b2d87802c6ff3b6016bb30df96005f3464c031019452b4f68475fc955ee33b92e8cf2587f8f9a97263e3ac0349b945e2b49ef65f846f66b8bf0b48d9109b2c22711d7e8647574323721dc847fd78a6182db035dc2e3f13211bc91eb6ab26289c411ab7bab11bf5fb1dacfd40e884adc8263b28c6de3cf702d650bf6bbc1dbae0c15063b4278b426149f483fe3816e56282fea7e40cdc4d260d22bfaa50dc49c4b3a4ee6c7e6f6b8516244d094a96f481da68d106ee852ce2da3e674fe7603782c27e87eace3bf64d07f925d804d47cd6081f796fdcf4ff1f645003454cb9b4f83509408765c18271393b0f2e4e9137d1a0bfae30e0a6865f45284fc2f23997e21835f5c3fda86ec0fb0db00b23b1392d02695ec6b0b92a1e8e23586b70374679bd86702cc9d6e80e2ce7ca257520c3045984b3687537c6f80420740d7e73c5d2bf6e42cd758d96de0047c15273c8389cc30eaee728f989ff04aed14d177b50ef1b8607284205a20624085c4e2368f07413a4d69c63f682972a7345956683f784b8397e20ab9b95e1e03d9c8a35dca4a5845d40dbb6950e7a06546211357762545aaeb587953a9505332b4ecb8298e9480a3a1cc1103cb00107be35810976627b7760dab75ddea0e6ce0982ff5c93b02c43f87d8b765725c2159dcf231e2e80e520a92c5a9e6301a901a2b44ad5b3d1ea210819dbcfcf3218e18eca334838c77910e862e631f25df7e0b058f07707a9fd69401fab0f26c1857c44f068d3503f159c01af1ef08e72b61d4e2109463bc2e5a0d7c93f50638bc0ab2d81872f215ea6ff447a9728971d6a971afc3e37480ad21711ee1124b44bc66f0232320c93c4e66c1545f6cfde92d07445a93988a61df9fc8680b5b2771e60677bd69ee95e582d08b735eb07afd504bdf25f587224131cb5a4470585a00a8b6cdd55ed5f3e2884badcd6583b73b90f8b03139c94b98a4100e8d45043ec52af287c494061abf0a9ac5e3b9735466d11c680b54220fa75b166ce19868f538f35e3ccfaf04dff9e2aa388b2214d1681c4478dfdf52b92975c84e02413e8451533e42e2df2e6380e6d472b69d1cac1f25a88bcad95a30ecb874db14973fe16ebfc3a23a7cb14fa47f3177de37efcfde7ea6673801d0c5020711f24f824b1c2b6b728f6ce30084c3056984335595f3b43b480b800d5ba2255905adc07cf6470588d2a74f532d1fa760b31b83303500805cd7cc803c15fb5f6ec3adc822c5b542e464bd063a25174831cd28591afe0eccc413afa2611c1a501ee937ceb24f9e51a98417ddc384923c64123950ebc00fb1a2a3f8ea7107737544bed60227b2bd2c15d220dd53f816830368623b61e94400a5e20ba3cc4af1493fa90ba1f41550ddc5a0213671e62d5eb3c230e86bbbaace04867e8d4847d18330ba3182100f2770309d66b2ec0c94dce42444582ee396dd1c91dc66c1526faecab8f2dd77b2f7a98a9a5521bd58d114cb542d34dd2789596dc6ebb56cb34749b3fa10c2fa4f6424726db9f0a2f24c66dcee769f6b7f330a56ba16781ae2b6345c110c8823bd254b3070ad09e137fdf0d89992b03b937404aa6776f75f236da8c09d45a59f7442093f9cf581c186f84f245621f48e6b904ac82b0cd0d50b7e123b8a29b4dcf92802b64287808079e3381f829238bfa34283196c6393d81319e317415eeac6a63744c662c740ff2b4a5cf28d2df12d81963cbed81849e37cc8cafe9e1e2e68f6946638a07f2233016b343023eb31965a09382f372745f5c03d062aec47ce32c0cbce07cf1eeee1ea83b2a788ffee3017fa1e73e678c053432d5a92c7592262c50bca9c7930f99706b3557ba87260b03fc10f463baa43a5c9fe12ab663ffaed2bb24908eb16e3ca30a76a475c2b9c4a205b7f5d285c536d3b90f49ba156f9ff93bcf7415dfc36158d1f0f33a8d44a22856b7a191ba6406ceaa9ec5430cb7a5bf3c3fd8b00fc9a441e3717f0b8bf4d4a5337f2b6cf50f2336b9d50ed8fab1070688d52dc035143497c337e21d70b9d0584b7a24bf12582b12b38fb81267b5f3889c01eea5eb199f425af4e09a5e335f05ffce1ff8e3d28662372104e6d4e4bf47d14fda7c746c9412066b7930fc5e2b0d60c7e61c6820fdaa4a5d8a29ec25bc0bc4a25df69a2e8225506af5c1b3913023e347b4ac3d92937b7276a1138c3b7b247186454c1aa9b9d5262c55cdaa52f7177e53ed99562be1cf80cdcbbdf08db25e0b228212e81764f73493e3a158338cb1f5c67658c8d1c837fdf441c9e03d33dc6cdc39413dc301386f0192281c56b4695c548ce3297d8c86bb712c8b42efd8db902325266b80bbe3ba290c35f5ac97dbc7f4964d2ec932c502fd83281214bb6c2dc8e3351f29d764ea17f97b4b9268786bcca4c4c0f2419b0cb5a45f64a9d64a5f279d4f66505299ecb07c6123e132c2ffa32f69a7132ae514afe06c02998e0cfab794163f8900428bb599be1412c2af24f7fb6dc8e62f0cef56e3bb861278484816bd80312afaa4470843c5b80f63fe78d2c7fb089724072db4d053c3d22752cd65c8a50082188a7b1ec072b78b2b11dcddc3b31f67ddd2a3943c71e7410188041c94bc35ab9adb38ed3d9bc90e2af11b192377d525a2bf248a422c228011f4eb7ccbf84ec366db8ec068889692d28ab701189bb54ab82cd482c4b24a59e0b477c6fcd475529a782cd4aed22abe895e2cd1c71f92b19e8a5269b00d92fd85f53b5b54ad5a75030d2fd7d4d4484595dd0d3b63f3a42a174d43d5e19d5a001a54c379ad2d69aac07585e05ada460c80fea0d22496990a2368d18adba61eaea232838438ddba048630c05d551a1dafd1e0d3f4d27c6061a5a36a2713d4c1a6b84fdf676506ad2c568a046d30bc5d5f9b536a2aa78dea044dbea361f42b42f5701fc51a7eefa3b24159caeac038e8a74ec08b08a239ebb96fd784d833fee97eb5cd2e3e36c689ff7280387b8ef9922501d4a97c9c2d565e6d8373aaa56f084574f0a984feb967a504074e3f783fb6fa84fd434e471229029b45e0e9a590eaf46a5c9e62da56636cf81ae73dbd177e8d964eae7b1410c129e0c7d61a3c1e26018f983fbbe273ccb4b5920b270854dc221e902ba1de0dae412ff0f87e424ae32927f217cd4dd7375fe7707e86065cd4730cedaf0814e6b5372582e37d7277a44363ac12003960e150c935dd893ef34ea2bc2d0dbb31138286a463536d088605ce8118ac6359d92201f13e33944b87616365174422c7c33f39443c02845d4cee6a59d43e92d2c5f9ce2930c27b6020626a4151a52c110fdbadb86d81a433bd7a20d236754aaea8cd8e54dac6e406d2ac2ea2e165174ac21b0885dc20c03067f2d832be7d8692224859227ac8fe93c172d197e4b06eb5646103e76ad51f6a5061aa9fe2a02ed1efd58f6d7624a35889557c32c5a4df3da7e3eb0293c7770d7049cc9dd351820483821ab2c3c7330f46742f40b50a7c9b8932685adeee1db7398e8327dd057b1bd98d4008179ac8e3b7307d4e33c60d8d09d0bacac47a76926e32bb69fb7235de8ae78005931c95790f2321129ea1c7ed69063d059078c11d32ae00b7d409601990f6ff281557522921b652d38a949462959b516e68e300e84380820db8d42f7eb19534f871e0154b98879569d5ac76df7e4f54807579d702208f406d19dd37f64d2a3a698d93a1af0c4752e59d3d2f8a7584b0a36a40f53f5d79be2ce6a60390ace4c59f4ce03c8a473dba8cdcb7f48e87c099e3c62429f613f6b3c98735d9dc5b5ef84ed361ace882854f7b87a6e51ea5634c7fc966e44c3b22188b6f33738ee5a0f374e4dd2887a79dabf36acf3cd9312f09ab7498b0a9ec09b1e887dd7db181d549ba9fbc8de2dfe9d3842b1d5d05d9b88ec98e78c177cdf7750c40227ca267256f5a124b62ab9da15eb7824e2ca0158fe66301ca8876b889fbb433d4a789a5ca4f5757dd46b452df5d66ff9a17216675294091adab3c31c40fd4f258067104ae061e21a6779ca5dd16f705d21b8b2a947f13cf18b5ce5ba096721150245270a15c5812e45b9a16b87410dd969008e56cb388bf78c2f1751853d18e905f4604b7e77e5a293ce64db7c6838ec5f9ea0341fa16995e83a53bfdfa0582941132215cec17a905079da00308f2c607e9ec7ebcff050482d46c80ce93a71502c1ea0cf68b36cb3e5234b6050457b7604a9f639951f80b0411296620c8bfc5eb0e6a3610e47d2d5f20989bf51ed2ee7bba0be08514dcb04496cb3280472239d60521ea7fbe87093b951a3a3c5589725d472d22241f66024b6172f4d7dea003a5bcd021eb43eec6423c3a8d108b87a043b63dbdcc6b468107e0f28c36487ca04df2260068a72889f10f3905b97ab6824d9b7c229764cb863a4240e9910687b1bd63dad09514249fdd0579557c9392fe4b775297ccf37beaf0f2745064c3319e7165daf6c6bc2328d8ef63b0a5d30a9968c8e88c60a8c6064e8c336ac0fb90fb9a095cdf39d337c96615bb3d52595a44f0c7f0aa02726fdba90d0da28f9e5aaa80a6bf29f33cbbec33910961e08c91487ed212407614d6e5c981752af4aee872182a8ce0b49f7b42ef47745319f81a452b0809d75e8c27ca23b4ed89dcdbac4b0c4e24e244f63e181e8d06058ec7917f259b9af495559562d75fcd22b8f43efe2d3a25d3667deea2290e99f0167089009b0ab568bbb808ab4e078bbafc513da413914954b9a66aadca8562d81c85774838c85c541a2940761900be80e968c9afbd4424859fbd4eb04504c885362faee910b11e99cc16cb024b74b3f3070fa99e900846e4dec9ee5244d5f722305f542909d497c6a4c7f57572eb81612ae3f83d07e5feebb770ec928847167696113201fb17d6807402235d623388369014bb64d9eb2d21c1c827f36e878af5da7cb8be2a285ced8365eaa01de7cb48ea44ed556e75ed5ca27bfcd8d53882680dd5a78b3572ddd043d5ab540e14ca5f9131d98c4f92ddfe48482b09a1da6be509a7e83f67f0954384ff87c5849cfef31d5c4eaf1d7047e11dd46b693e17b5a0ba305482ad55c0e751116b418e04de0cb3d4b20ae5645ad5f2deadf564b4059a642dcf3fdd58c9c858c2809f33e115b184fbd74186664c3e80810018c80a159c3f4edca5aa94165ec24c7fabbc20589979094f8b8e0b659a881af16cf5ab0d4d69b1d537e7724b69613d4b7d18fd079eaae9ddeb27a149ded1733355b8b02649a67213d3890c6e8cd298c5b1678cc8e6844dffc237825ea7bd8672394b8d48b250964529e450acaccf11434a64c01c5e9a98d052ebbd0c31e4288276d6844b6d51fd0934820b54f5d83c130645e896cffec803929458b302b3cc027c48b0ebc5691d1998f29701d1e3bb2d9fe41cbc55615d4caed94a164c267002e9eecc0af402e3bb12026b333ce46405c73abe3cd830892584df45f0f122338da4d8d7588c0ad8e661d8a8a9c4a41dd4d0f2f38c07c67c4e20b6ebe9d45f510aacd81e4a20154e88d0435d68994c19da0385bccd1ebe955749d1b99299c63857cada2713c0100b59448b3a8a0c0b1ed91e55dc79a3b1c067cc622c1e3ae0f3abb157700c564fcd7902bf701a8ba7e9c01880dd9b706ace8146581bdf6eade47b04846d7057bf08ec4a1ad1a18371c292d126d6ea0a08d253942c4af417776ad3b2cc8f21d8e5a2350cc651cef8752cef51484001194786ef640a8653cb781c2a59b521584d60360f027cb756272d5c1ce63b4524d2b3fc4684b16f83dbed61450c1cced66b1802561f06fd7d7d21e87008e4133ec93be1ddf407317c901fe7d51ab537018d4f000d04c43f7d2aa57269e62e4232bef3be8d00bc74223cfb22f53fdcc733c8b2f5bf74ae0a3065e1e512b013f289c915d4455ffcfe46f258ef37aa4e720e50e1b899e222126d9ad6c12cb5f8f665c0bf92ead054c0a457849ab54a7214a0d4f892ceacc8b246ccb50ed9dd49473e395acc2fca7a5b07115fc17f4969c7b89525a685443215387687446b2766d0392f8354a7d6d0cea96bef49c44446c920ca6050b0cb3bec75e56ab986f2e3d271d2034c1fbc44dce2749845fbc84a0c0891cc234a7fa7f129604a89ea3735d1081d3a60dada0dacb4c001d7a0216d27499a58966bca5bbfdd94af981b7d77b68139f4483445035a661f42efd7b9147117b5808ca4381f1ada5108c292a9f5b72c38454c35dde88ae7204e460c97769009b0575384c9d77c917aac7b6454244975a7e6767d9c1a2b0b49bacc01b600e04111a6da12183c37122a4c8f3460eef4d6001ad3e4d4bc785c3164db38dc57375c44e29e23955ac2a4591ab50e625309d3efcfec44a263c228a67168b0c92a9d3ff56d4d59e1d49a4acea3d916cf757f9aa4f97f08487664bd816c29a65abb5f7f8ae67caaa141d447bdedae0036aea7259602c0370191869fa88b875e301267898336ed861f5c63f19779fe9db9cd2d6e54fd484e5038017826425969fd73108514a1370f8a66d41f5c1a9fa1c86dbf5dfa554967da1226ba14eb289512fb135ef87570fac395da06313aea19eb153b656f774788a7cfad43c0ddb30c97db67a4baf91ce9dabed8737553eded429e24da4f8d7e6dc85c96104c0ef8ee4136be57ea7a4a8664427a07ef0fc0bb91b98619dd0a84151a5586b4e3e209ebf9c2dce5ed24885c5613bac47424a3c8c5c8efe79496e4684849e407f478f840089f2121a0294a8855d28b5225664ac61555a2173b25e19d3dfda951a81f9f44af99745297c404e85fe1d26ca58d52394f99230b60d29c76dfd36ed17481928c74b948098e6e12787e98f04f56122ceb4b1e1321ea7dc92551baf72ba8b8f1267524cc1ec17ef99f67f82b84f1636c92bd3c0c76074cbb1e46f0fa5822264d9cb82e86307d86532144e3e012876c2a00f378b849f4c360575b157836ba21c1ad0d99d95868733b46fd3998b19aeb6088942aa763c72acf552c12a2c005ac093a974e8fafbb887d02327a16f91f3a411fe460d0f7ba7680135e0a38a74196be9cc4ccc94a03bda694f1857d55959f59e86af6eac37e11c3a59aecf62a0150e17f4415e2be00a7a6a50ce84fb44cbdf05760f8e00d5eb46326b237f88317f18e9e0a736914623eccafe2d0403bfa137175252d18e5e6be3ea1f4ed16fcc9d420f57c69f55844b4bdf36dd75ba3bb985a79df63a9c03f48b2c4269c6c1cd252f1673e0954f4c05408cc23294ff8a6f3acffb1d8576856f06e3bcda0e651b32fa5275a7e474233b234803004ea9ecad801738e4870e5ad88a441edbcf8795551e822b9e7d9e1abccd2ba9654484b3442344eccc6bb312d8e284ffc8e4301370296354e976b6cc6068f7bb52eec60859d5ea3c643f4896f01be378f48217a079557c2a07524fa924cce7095243e8a207f9e1700646cd5f92c19a8a71bc5c026e55d013da10b1a042f00222b33cce1f9c89368c3d01d719105f6b5036a5b980e192a04182ce4df935e5c211a026a92f58c864d1cd9db22247a01d303328109b7db911386191287a7dea3589977f42c592ab080662fa111ce23c6f82fd4ba8218e6695164d07571eb8a9ff0f8be54b2f8922e68e9dee1c6880d931cdb9ef08ea39d9309cbace004aea21665d730f43993325cebd1f7b362ce86b3003b8f5a824b22f6fe2b4af99373d35e021ef634501c361104d319916bfcdf567c708a89765bff4f01bbb8710077bb209bf6b49b6a89fbe7cb5345f03d681e5a82384d241dbbb53082285a306aa6d3cc8c92724b98fd32d5ac210956cf6fab63857873424114d8c777e260e8b6d903337867773fef08ff6de6155a0732c862ca7d1ac0d6948e88e4262c740ceef6628ca625c562b8ed7c957566c07d3b17cf80d015fae1a49fa0172d4d86566b6e7369e4cf4570e278a7fb0ee3677a9ad60073b53c4c061b692ee2dfb007508ca71b1beb64d51c24c5a4b4eef3448a4c44f12078413296782f8a8b67905bc7a38c2d7ac434ab508db46b90b1344703481d3445ba8b2eb536dd61aa54d7fc1f2b7799ec9cbc08242ab63c9edec9f842fa5fc2c52dca0a50684829866a90a84e956d88f80288c7c87ce7b07ba696261599f9cf793de4ea4b1bbae4a03818e0c2a87f20457dee4ee20a2a32d17489824a237f3f08156cfaed81f42aba482c58e8d75dfdadbc6b9b34c25d4acee49fa0ff7d6b86a3b08a08f0f7f643d669e8496e3ff607ea38102f9b90e86f5a813c1ccaba3e5a0c92aab9fb26b72876d23c6d740c741397fc5b6f119224cb7f26302ec4f20c1d60828a31cf1edbf3e60635c025c3b038eec82b1e6c0e487650ff79a288252ae5519d90ed3f4731cb90eebdc0fd50ae2c4f9ae4f9188decbe3510a3962c6249593ff3dc72cecd73bdd0be9adc0560a1ae439a57044d8d2c292f26b1b0460f488f6fa1d668ef28f13d1142ce048253da3c2b57e8bc50f57f1418f6710a3e336f410d147f9e313be4be6a70a428638d063ded5cf944de675d8f1e67fe8368d3a90c2e4cd44d062f12146a3b9bb016a8ef01f5a666eaecdb069006e11742dd89d03a27620bc912f66e09dd6f72fd1a4e1240a612a58218a226e955fd9c738698e852ac0616de92e0c39edc0f1f5b2e83a23934dad87fabf83fe607070f1c8fb9f8ca90556531bb94aca661e8954b3fc3c4a0db2a3bdb8447afadb25fff973f4a8dc807b4e05a8eb60455ce46ede57ade47db3b989ad643d75c414c6040660211559b1b423787140745d9a3841558d169a19eaabc17a4d436a90c57754f21755b3fccc8774d52b72c0383bb26906384c5b80f445b6ad3e9cdf4b87054c0465d00dfa2551bb42cf223d6764f5e7837e547887f80bcbb898956db2c11330804bd8922eb1610c61e8d1d00559496e03e803756716cb9452ffe442662b4ebfb77f9c2ea60346827993e348846924189908c3ef1a27d581315a8c5107a2f95da8c1b066df226e09be3009f53a22e3fc8159f8f5c4d21edd8388a7eac29579db64330818b3d1d2fbc7cf644f00f59f8f1452c45c223b68bd58894e02c3190a9a39d657040154446730427a838dcc2e1ef1012381b929e5bd32dd73a43244596664f4c7031f6c52bd8c4b4f68f7ec9dcc403336a41cfda546ab6ae52bee74536c4e04151ca6bbc62edd7775631ee6188ba14e252b24920c37dd4d01ba1b54ba791f3783af4fb44f2012a07225e071028e23c812bfb201038d5633fcb5ce0e2337eaac4f5537a6b4201036ccf69642bc69049dc34f756726fec9620b771854ba03847e9387e844fd9dd4f833749b98af5e3b3b8b02d2308ce15c29beef079ec9b87c234ca3d30c0357613ebebed0fe2256e293f16986148c9026f07022a2dfa37e74737535083260e94f951787fb081e7193928ef9016e0048b6a1fbd4b892070e2da25dcaecc9e41c773e87a5c8e22e43679b63e3f6ce7207bcc84bf85199541cfdc394018f4edcc5c320567a40bcac7c076748b94f1cd3578ebf139025e50e4fd1a6b769665b500fe87c6ab3d72ca55a76cfbe309c51a22b6363fbb8bd6d3dda5f5e30f2f15672637668fbd76a5eddc9d160dccb274e102d51e859726660c15758800efe452d6695414728cf73c47560b4403355e5829b4b84f0b91ffb526b8165d5cd034a8adc10eb3d037ff28e61384c92e57bec679314906ef754a911bc978dbf211d9698e24ae865df1a0144ed820cecddae7ab9ff18e0d93cf493b47a6193ac36a4ac821e1b5690bd60f549879a1448dc9904d46322282236bdafe7674c9154b032c927fe0618347f08904b8cc0c67c48af20b8a7e3b6ca180c429ba92cae456a0b7d9355395b7efac7d06fba716ee3bcaf3d7b62caf0a909825e4d545b7069f8f8aa124c96802a8584235bc2e70aa17bd42d1287d2cbeb3b1935345bf404f131109909c61d7bfdf6445ad821d5fa27360d511db2beb6c24d6b5f574285efa801fd0ea294282776b1f8d839f8b245093ff4284e34cd0b919bf0cc8b3145ab8154de12fa890f2595641382c092a80f39dd3dd003dcd7443cbb8d73634bb1420a1e9d7c457c5b97cd0bb7f05442e9b1fce14340e5a56f785e82286fd0ee231848b0a163da02dd6880707f00209c91830ca24663d604a2bed4291782c1cb717a801cab5bf89947522ea0f5d2e8622df5f990de0e2ce621add13e3a808829f325a0065b20e047c1690f3001d48f5d11e5d818916ab02dc1144e8c7edef1ec9668c963cd8822ca13543cf24a7a6efe8c8c400969a4276e8ea1c113cb83b05d06da808820ddf680fc4df6494060154899fd7df4bce2cd03be707bce4cb0f35802ed8888a09b1806cc173a292631380b6e398b585fec04ef8001178b2dfaadb60a86af9b5b5336e8e87dd904aa89e2e4ef29ae960c576217ec579ffd2bec2ebec7dd596e83940db1d10fd37d0a359e19898df82f0ffe93fb58d45e6b911a4fff2fad83b6e57f6899a1c00cf32d3c88d90b760222685f9c7ac2d925ee4b2b7dab705476429117b927d73e5321c0395339fe9b45bed2e8fe55504b0b4bd4655b49f4bbcaa76808649c6149736e8bf0cd96999a3e80f3d1e5769dec51c17511c819b69beae5ec11a1606d92125f1e272f19cd2b6e0875f3994d0fdddb61fde5b9923226ddbf5a88f45245e453505a0bfac6deaa82662628e90c463b56d0b9fcf274114da5bda31c7756ccba82dcf18ba9efb4d9f5a3ad66ebe01b11445bcc845aef6a79c9a505f481c1b40c0b241162589abb47b0a972722c2a30021a4a0f69ec747ea0a14ee8576fafd44cc608056fe4a2b47d68dc84ca04970303ea3af1572727c8773bc0efb40eb2e6b83f8246027ae887f84c4682408e20167fc57c802f5c42f4353c80f3767fd966a3412b8dffe1ac0ba802eb8407dc2ad92d3824ed0146e686acd39cc0541206408c93ab2d455d35b44ea8dd3425b742f3115de0371e1e382686c164acc77e6ef1fd35cd2309009d216af4437b116bbab733d94ef9151a606d22b365f1421ee11d314caa6b0ca0d980f828bec755e09410752be9c04ecf14135d0fb002b82c596f516a90f174e5aeae321ea956f09057f681a0285abef092fdc236ec04c7a8a7a5e906f7ba2970e969f0d1dd60825b5223089afea53cc7a3c46bb227dddc8231ec4fec0eb3337a94ced31f1afc94040d96c0b7478db00a37477757dedd91844c7dcc513fa6398aae00ca6fb93e3ccbf0561adb57df91932cf7daecc6720d4672d48f97ab2a7e2e8e2895d06363a360cc6f4c1d6a38a8926271908e9854a860bd068b6b87305a12be13210d440095c6920b0404022542028722556db752410a05d91b08bd59e3ba43efd5510e463b292425734da7bbe8e6e0a381d0387d5d7fdda726694dac22c82db9edd7f46fb1f8b5bc49a1931c1857c473cf15a68248e3881d2c30dd8418de48719dcd9c5cb533f205ddb97c944a3a76c9caba2997e81b146c01e6b6c8610cd352272257f78c4f5c96dddf92ccca1fdb88a51b0938da35de534e8669fc574527cae0fb04d520bf3743422045411ef95f8954c64f006a06645e602ef45e2db6fa095932068afbf64095868154981d8cd7a2031e29b0a3bd9121f1107a89d6cf198bf816a5efb3e88ec7e4de19aaba4959338d236c2102a6f0289c2cb122ab0b08e796e9a5d918da0b05ea298ee139a47c7d5e7b02d879c76002a3107e48649654da6cbdfaff8f7c401b103ef7b69847afea894f5a3389b967b0531b6c62cf7638eac6e0409b64b18cf157aceffe89927ab0cf50dda62c6463d2a116017cc9f262df3fd1d79307987bd8c92abe9edf2803007ce412e1bc24525054b170a272ac0d639715d6223d8154a6b551986defa9fb861d12d45bc4fadd7e5d52b37192bfed615445d25b3ca1cee69a78aa98aaa78d0183a497ddf0bfdf7822e675acbce75dd6c17834d151efebe14817ab5aa00531af1c5bbeb29585fe77237fcb63a576c65273b72f04f1e996306a80f77c54f0504cc46ab2a921ed1fcf0ea6f948c44f446c5cced1f2d3a87cb72d2a01d04baebca569e898d39fa68891a6a2c576fbaba6f49f7e3f857f8c6692fa6809e32b568ad6918ae234cd03e8e94189a1037ceae9f749ee90e17d2749feeee2215974e20d61a2c11bc499d6858dd8d3ee4cb54314be82857b080feae2a1e84c7a8c1337424ae5c641b6f31ee29175802bf667e9f2df3062ae2971195af79277f9aed770b59cb15c2128cbbc5100075c87ca0e5b870dc4f2519ad794a790973510a3071dca8a22868589309333df93642186930744b7a3f4b10b16a691f883ebe78a40f415e6e3c3fad5b69788895c2b8f51b0d5fa6d2781979cd3b27bf223c72e758b9f51ac9bae35351c10796fd0a910d81b812b4a597347191a512359eec5139948c70b909bc18f01fefcfa729b54b5bdd73f90fc1565965c5b99855e18f7c0a9809484421af6a8036d97505e99ec4578ad19d81ef321aaa2e13d0277a3e451d17580d8273b8ea4df057da31082e2a898829e4ac8f9e753f03c64e677ec45eb9d04bf6642de408d7bc7f5951a6ea554ca8dfc3f34b4da8f473ee71d6c493fec648a0d54ba42753f80af13102cf751c1cc142874c457893bb987d4816d3eac4778c375cf0b946a75adf014d401ee1b1b68c0faad0a3f9d5a333bace06b66e1fe7ef5abb24fd17eaf424b5b0ce8c30caaa2795cfcf5b4c7be0a19378c5b8a17ca6bd5c0f737de4101c52737efc07b3f424f0ce3bc1e17ef37aee0f8d3f50f500a4ae2b60fe83b763afb91e8be9b1ee7c2db9bcd838a42fd367f6345cb85d2d07f4ac2bcc1a17e2f80576e2d4a46aba7c1f31eca3d7014d91e2ff528db6df69b97a12dac1edcc1f96e160fc5f536b298227573b3f6bc7aafb1eb20c4a93b2653c00b469e2239869291cd41b2c05cf30623229be4c0910a2e0b09481015331a810c51022139b5ba8e355900f5730d186718e5d4c4694f14004e39c920dc2fad8fe1ab06f1fd088a54684662647dc1eeec3c3057b056f1987f4cacc2c337120c3a9ee5cc0873a8e9d256c3b0673b12e51b4ad1fecae92eb88c19a66bdecdbaaa18e2eaae6ef23388563ece65a4032ee0cfde75469dbb5184f93a4d3d4e0afad3ac11cd6a94c252dd0e0886dc23c090361eaae8fe593635e315460055c7983a3c60290fb5a3f8805a39d751f01407c1ee1a601e33f04b78e99c9a459804cc2723f16997b30019366869b0af2bc794645a78b5c693fe865bce89e3bb30c0c9d7a41b5cfc7246cdf84ab956a6bab7d73b4301004e59b35771af6e24b68a139cf1bef110c00d1ee59d88a5ecda52b607bb68a2ee6060b02b69f3d015f66b8f349e28aca348a92b32a8138e5a5bfb2599be935d261c3723e12af5a393d917a51054b0b61af238a81e002ca831431abd523be4f5ed123c4e003bd5cc3ad0d89ffc715366e48112aa3552f0ea3044ea4a259e5280dc76fcfcd1552591a7724934975e7ed11663f489d3d20222d4e7d26b3b11428db4fa4c0ca1f37e719c9269c03b98308432685555d962a760a03b5f4125f5ec51556464d513c78cec110df14e372f00819269f51bb2f00f51f42aa2d5fc9affb57d4d5bbd80b25060e87dbe37795d70a5f137782d6398fab6e3e17ff0fb6384311094004c6e3486086036e325467876a4b6c5c5d1333ef221549d493721ee2ed4d42695fedcf20bf2f587af7a22fd0c698f9b09e3e9df7dc9c261ad9a8e868d9c4ca6237b6c1faed30a6ff7a8c9c878941c74c863191b32ffe6893133fa260ddadfc19638e5ccbf0fad24e98e78fc198726de7ac75f5c0a8cdb8956a4533a15b6ba523e473312d8c93d49b48eb8ebae6e0fd323e97de1a050e86c2701991537ca926ec410e41f8e449b6a8abb08e2deaaaa473debd3fecb0751a9562ff2758b22e889e708be4223cbfbea8d6cb1399a24ab986a326a43526d805d34c77b7fbf4b88e72b015afa586cc4de48a0e8f29b959e61262cdab22f304f2d77421cd22a1e1ac3dbe5e950a9ffa767f9de97d82fbf8f6bb98f5ba40fe1bd674a058faa9870213c9dc83f09313c6fd08dbb02265f133ab7c486c99bfc39c8f9bc21ad032e32541f350602b39a63379b051e1971630535c0d505fcd3e0798422fda0e5ebc43c616ad570514e91cf92ea8331a38fbb396494ee83eb7d89e32bdcd53a297690c6cc36aa8d375489e1d443ab5490674ec4280046f10062500ca2ef7cde639684d8bf83fb65a53377b0d4aff6b364ba03f0f0ada55b7c2f2cb43510d25991de6f952c9288e56c050ca473ee1f899ad6ac1b45931b971a47a7974438a52d3a722618c8a6f87f67aa851233f064430cdc33dbfc133c8f30267b256a93b8801e33bb52353246473743069a382ea64e29cb23920ba93b073d4be90e1a64d9acdfd97698b7fb817273a54a4907b4de64a09765d3a10b9b6899358f151dcc4c50b80b35036829b3b6b1dcb950387d0c00215c84d1505ea0741cc25f89f1689d88c5eea74e67a80fff1f36d0d6f5b5ae1cf3db0559b513dccb67dfe488571b0904c94e1d8676a54dd11605e3046e962d166f89111e8aa5cba7a7a94897248a43638ae08cf22c43d93fab1d6913560a17b1b2e5675786b63e7526cd7204d45b0641aed96ca87bb4555c622fc6ce844a078c5054cf3c3499a7e8f50cf1bbbcee79cc7792b12e0f404729fc1aae8b001b98002d2445601c162afcf6521ab5a11b372d77d4ce3fa5f69a79cb7cc3d55f8c2a8f902a170bcdd612a23dd990fcc5ee03f8dee66802ae615c037f97838acb8d2e402790285aba635c0fff414dce581e0678f13d7703167047112a5f1b5cf0254a3ed4278cb15e0e0f8fb10bbb0967f6fcade8ba69665e4d3eae95aeed3591e6fa9d19331299de468e853034bcae86330a5a4feced5167cabd197ba21ede0bdc8b42848b5b1d6cb008c1d14e40e4fcc947dbdceb23b0030c85623deded1d2e4ed3974345986c020e4da648968ee354b5b9b2274e17dcff0338d31a7761ef2a665ccad0f5cce363dd7ed6693fba93fb0f6ecb53ef21282ed7efb650f2b87be094d1011e526605c3369460d5df2c9b12bd6e728c401dfd253e28ffe01177643c97d1a1908e355cc22dd7246bfab54093a3de1de920cb0878835df6c73f85b5db058a9f9a668070e6e14445da202a90a77fdd658ceb08cdd6d2eb95f11a9ff052ff1569bcaddd5de5fcdf676a52e824708d588788f777dda322b4a973345f32d69f02e8b83883af8718da8a0b1ed71db19333953dd27e4b122d70fabd6b6109dbbbf45d461adb99061e61ee5c87309a9734303f5cc27955f72040b2956b2635a7dbc8184b9f4e3bfbd8fd5883a9158a7ac405f4f6afa2a4d654345ff7926b5266dad7be7d1cb27c5b5468bb8f71bb5d6fecdd6aa7304dd035d0d7e7789fea082afc80bf35d457419b0157802467cf820efdf500d2339888c24688c84a8451446383e8a7a078e1a6efacf89313f26e2ae848635726117136d8e20897892c7c1552a7c4b52c509e7467a34adede7aaff5b6f9d04d4176cae1b857caba6cab296843eabff5c0e92ab8cb909004e587d2ae3dd62c8d18020d41e47a8ee192708edcec84a886d390603ba3e2d265fba4681845e5393851e514350fefabeb9c099d43c12918eaa5a151d938ad44386095b210f41356ed4e99b343d447293c15c8095a658733719bed4fddd59983a9261953332a19d585d99a8f3520d1b86748b729bbe745c48b4a9abb9e6b74170b50ac5e86b627727dc78fe09074f8c294c9d3d28b1081bfa1de3279a5a099eb4ed2fe019df59c47a79ce6d5c595e6cc4f4aab7384137130a854fefedc34e788c459fa232373261850aa20d182fbd70573e413157b3a7636716a1db8600cdc1d46430dd6376d0167efd007955a04417d351f26575388984a003e781d6287e3658fbd175bfcda1fb7c238df0237509b6afe6f8d63bf04f62a6b9aed9f8797cd0d6e85d7c65284c762f1d86b71bc6f00ded72cf7a2b7f99c8c349cddbb12aa0d6e2b36fc50593d570489b9fd6e23bfad4431d91f5079c7bf122207e2d9d47cdcfaf8807c6858ab20fcb9ee7707cdc845f43f0630852e02332c93cfb77131f632ed91a491c6f7e78ca433e9db3dd7dca0ba42cd42247874bb43310bd10d32b1d5a8f9be9d429faaf5953ae30996f3ae8230a9e5a959d41f36f3748d0f8020654a0ef5fef6709952ac666fcd5bc8c2d811495b3b7c823f159e1531413cad77eb105d3ea25ad4ffed56bfaebfed20ddd7827692be98ce5ee4ac71430e8d386900dcc59f5f813f69c42dc08e0dd212a74678afc1cee15a5f86f4480422a50a17e32b2f73dc3f2c7eae8484e03d15fd86436aa9baa10d0838b34b94273c416526d790969ed90809c9a9e780dae766a74247331611db0e529ccd74c85ba072728fd4bcbd329a87b7f203d71aff340daa0896cdcc0b906891e95411b86485add2a0739e57510fc0c4b5099e1268471d6361a71b85b2d8d31165a2a2fa455b500e2d3a1c34fd3aaceac73e6095ea54cec47d3900797af0826bb44ee98ca84d472da574d4d9cd330861f00d87783a2fca51e908c506d6c7dae7beed85184cadbeeb7fc33616fe2aa7b6c576551f4541bd8a324ade2a67e6473803c709b6b70fa4617c11d445ae44f433e51b9bbe29e7a486e0a16627d6ace447f9cbb268acb8822f202be1fd93292ee93d884069da96d77db7c7694bbde292cda48d416c11eb53967ce35ea5ce3ce42dea1caf000c00175024763f92c4ed29a1304958f6610e2a482610f4f9f0495fae4803c8794d2c4cec1278136d491913d39f0a0b63991c9758eb93f8478d5e0e80ca3c95eda158ee58a65996a788dbc41912c578b68f4b36a4c03c68bdc14aecc7013a1fd7cc0ed9caa0d66ae2fda6f7a9a3d3c1e2b739d6ba184d40273e0e53808cee3eb9708e2a90f6e7df553a86952c7c1ca5d1142741fe65b98d70a559212bbaf045559bf296fe369ad4829309124fda3a344115eeeab63ef608f7c7c8613720fa7aa6015745620a982b028215328a9b237c2eb11864658e0a814a5b96e6e4a8cf38ed24aad88f84f11f2b7b02e21aca760289c601b71275fb42a9a65c1cc4c4e4f766b4a12571a9d5b3adb790eb5be79894663905b33447b8970f6e0c16b4404bfb6ba9e06698758f85ec690ab617bbe8bf788a61af7998d0dac5e3e5922f443a904a0e0812fc44216e015ae38709cea845aa03d8b09e92e4e4710099985b0b6d0cf0dd81efce57559a5387c633ce2a91788269bff73d10a76b6096f6a4360052cea6b639ea377f6675858f3312c80bf0a7b2ce14e27669afdd279dc39f0c2c26a2d1361e0d6f031214db0911b089dd9aeaede12b274b55d94bce4fd85793c43f84c433b3815525092df1976fe3019ade6cc2033ad0c1194c553f0b1d62234bec2f2055b641741491a21770600665bce371a4a24dc22e20b16b245a969e196b5004851d7155ea4a62794a997f5d220d1f490bd6b5c47974fca98562064c7866217881a4111038633c609856e46ec80614a22fa3b5209a4a68ddb94f66830ec49316926f880744d0f0a2e71c66d88021a5d7a2a96d47a085a1115707e6ba82b34959ae5327e9c04600b7243c190c9d2392cc234382ad0569b7c9e97eace435a608ef86d12c085c23b706e500b60b5c609be7bbbf2c42022e7dc003eb30c12cee35df2fa0e8681d2558cb0d3078c1617527312c00379df6156a22db59ec783e6db6b8b9cbdeea388b5e85ee950af85016c431aab0c722ac7e34fe29224a8b4b99753830ccae054a57cb309e9ad9f0b897c8a68f1099545fc9561dc9554be3e50076311f3dfb97508b26ab5a47d79acf55120713e28e50697c3c5d6be1c6f5e38dc685f3e8e91c6bff2bf664fe939011a5e8470302806214860453f14f3278e0ec561963c8938730c63b1c2b4cf7d123e0e0f358339106db564518216c1c9188b52be7289cc1dad4a505210a753215b317faf64ed1de1432650262c93b180ebe301a5cffbfdc090260cf88b8ccb87c94a7560111b84a3625f7ecb18c956a8946c941655c0d394ce8bed82428c2fa7a65e9a4743c310087409f3e64ceac84f3f7a31c508dba5459c6fb42170e3e99630b3d312936996a1a4408c8949bbb023f56048b5085a1b1b0b82c448bd4943bc974c6c04eab1b52ca2a9c93a5a8cacaf8fc0521663f1ca213beb96f40acaa8d385842c4518e7618ee571d13b4a2fb9b82f34aaeeea7d4c788c27201ab3b26523abb36c1768d78189e6ba158036fe7f15dcf2bc8652e434d4c9904a29139af06f4602ad2672c203543fe8305b8ab9862840cdcb9ee21c2848e3e018e79b9f7693a4d62e10b7b4a52e91171fa7121d2ca722f6d503394404f5b1604b9d0c55e2564176a9dabf70c93010c208b4120eae8f539dde476939a0208cea9896643548efcd254b760ac99c782557505191bbe682810083125770b13bda7e85c6e2383fb68da411a1cc7e08ea8696325945b8bb30dca82e5942780aa66025ecb5298424272803795bb78ab0d2ce626e9537f73e25a8b6aa2c9354401d8aa19268399f0caf9dbacb126602414682fcbba846f40b5ada409c09a2fd8ad1d36a3bc8ef5653469bbbf291c5f00cfaadb9ebddfa6e7176f5a8af70c56a50aa9731fd5131ecac35ccce5dcebab2df1b8c9673292eeaed6531e32ca4d889e5fd70dd2e5e5772cf1c7440fca39841356139c68abf19f0dd649eeff655e01ce2d0e1f576e2ed3699cfcb0278c8006fbf2ed74f204b8637893d1e4e6bd12f125dafa6c879f609b09e186100baff31bf739444e293d2d3061997183d659269b9f064b29ec0a9797d8e0dd928aaa990a67c2f45fe436cea5898036b65accd7a346d141a5fdc680faf6283c66993143af317ff878412da374e9036c3cc35df020b630f094da36f27eceb09caea3d3f21ff60505e86985ad7d0b32e0f351f38e58f37696cea261d740daf328fd568a4e2db05eb9a8f70d21a9ac7db82e1c13ae1c9dca292b7c624f8fd623b634a709b1686df5d03f7c9a2357859112b81d197a07dcdea2b85463a0b04501f0588fab8451e157a6fa9a3f7d60829f43d74e3e1592397d11b79f51792f7967d0d84f0d07de8a70f6ea49ec5461cb8389fbe6318a66e60b260b741f202e435e267b21359fa84db2229dfbacb0a9c10df218ac82894cef95c896b782d965909469cc3404d91c893cc1d327d321efedd414ae0f5388a4364572889967dd6c55ee594b5c027234f8000edcbf42a87501035040ec8b18439715ef1c2494b01bd20414734704d9f09c94149b458883334cadf1e8164f0c360a83a45a7ce733399a1539886b22002773111a3e20ba22713cc464deb0821158ca2e9d1201b4d3d7dc99badc945006f9afb03a28d07463a3dde016b669f68aa274fb0e77d12f01b2c31bc2a7004d4458c770216d13a08a87d6c143298d1507f7007fae2b7a179518949644198528eca7a2a347b0653b468ca957c828aa1f1ac29bdb247de5d7fc12cd68a60fb9d6f45d6d9a8eb2dbf7698757c60a90bcca8631f0fcc75da2027013f60a8e8a97423fd1011d7470d3c923204b07e1bd816fa8fa323c481ef032a782b2e395225dbcf687972c495c5900eff19ae06f686775c408499fab09bd74037d69ac4deec5a4b3a32746763544092c238f903bb99e9622547d35d2689c6ed9b1d191a81ba562b454009c38757201aeb6b904c48f0fbdb31667a004a4d93ddf02fc72fcd6f5fdbbad86290f67673ae4083af68d2fffe5fcd7393e7ac0b3f974107b6c8b45305a13a5e1597b1db5430f0460029494506d0ec6c6ae2b250940132b2b419a83dc94e67c85d0d6043bc8b0d7891f27dbde481262fc5c6803d30a6d4ca87e98431e3c1c67d08a2c21ad9c432d776c217f653bd0ef6a381c6035e5a03430271be5153f99cb1122c82be491501fe8af1f17ee41a314347cf899436076eccc1aaef8da750a5527994530c744e0112e87c4f5c410f65e24e54883d3237702f0921120c43c7dc13ec17e84950c06c5478ca1bae29ef880e121c87d5823038dce73223d389ddd638614e4ecc3ee42d0d1b5e361e8290b0b68287198c4ce14985798c8b3681f4f93ae9141df3126e4b490f7dc738402e4ebb71ebd64a70a9e4af3ce1dc7c18514b1e52e4125b90ab4caff114d92899dfd24922a08241c160df2f6f9afd34adb8bce9e03387d29c7280fc3692f27ef4d5bd50782e46f7874cf354a62ff5a5d10f875265e604b2d6bc6fc9d45da650980fae79a02c81dfcc09a86f1ad9e9d19067deb012bdb15817f712684ab6f9f141b899193224f23eb0fb169bf48d8bd0ae080d89abc797ea175fc72dd7443b5a857dbf3825278256b555205acb80bee4ce08df4ee21a86b84dace2d03ee7be06a9d0bdf1708f242b5fd1405b698228cfc329dd7e3644ae678143ec391c7e3f63ddf7f7122e27a681e3d3788233d63380d04986b1048ea44bd8b13a4d16da7730b4e662aa5cc65bc7e44d250a3971e34a4b2da1aab6b99b0a9c366751b92db0a9ebac3c460e3b4a6834269f69cd28cd77535a81f4a5b6244c3dd0cc31f35f4a1515f7d150530f8be634a25646e1e9b67f63b13af37a3704fd1ca17cf08b06d38d198080563820714d583dc295b0a03275280a2f045f46122217702c5e059561ef1ab0facb11bd3eb2d3b36b733655ff4f9531b540b025d216e3a961d9d0213b4388b267d3d2631bc8bfa53a78780a3bf38b3b5981ed8f1466fcf09e04b169434f6d53587c2b1370cb0e323108b205e7cf34022f998aaea85c8a6b190e18e55b477a3a26efc63549970a139762019b9d384a8eb25998247e6bf097d0eab000629a8680f6d4348af9fc6c1a89b80097a2b9fed20cd04a5d0e735876b21cce9085ce8e1bc043cc6ed140a0773b3ba5edc724786a08ded0b0dfcc0c852216e73ad6e253074ce70a41a2a47cf1be2a8287558649c556fdc1521bca9963b2a08fde42ba5e05f90d564b28e64a435a538f0ffcc9377405ce8163b2cf81bc9e746232a89c1850161f39e6c3698e488426008035797c04f8be6c5dace78c453d94b81ba13e08c64bba982f885d70fa1874cb9707fbfb1be4afd474404eee700bcb06a8edff65d4f0750c97a43e329347d6aa1442e9247a593fb44167356e22002c1037a545027170b992bdaa40181cba93f95b6660a2c9d9defef43b62ccc42958a962b23bcc03bc8910f7d8dd89c87e7e3048f63460bc1994ed758c99bb324ad42f91c2121f146267873303862942e046609a6dc6a6828e31462fecdb33ec980620a107c58c7922a0555f8b4020f45375930357cefaa42d1f0993d09fab47ae03710920f2bb2f731b6a2363fb946d0877d5bc11ac8cab04cbae084489db108e8c171d032f9181efc740af06192419bd3847919ece1a9580dc94a416a652899a94e7988e0bde35c8162d92a72e45585e9a2f330239c7ca5eeda206955266227537d4f419b393e36a878ba34c86e1648875479e3de6c26e2209e51dd434ed6f603b10ce2c0857e2358973f796fb2539ad18d53f6d324def2b7dfaf4352c62bf0f54200ba761a424bf01936362a3421ed897e62f9c633b11e97817ce688375e87c9f51c73f5f3b0b495d15404f69923c5d19f413405ec4ed95ccedb7d574c8924d4c198666a0713ee2eb1720afc8147956ed37f83ecc8417e7d83c974db28ff0c3e8f55d482a7873ec3a9d49ba92dc93fcb5fa3cf7302f1aba841036a6a5da777a17d73a49de77f1e2da190fb685342fb3e8c12c2b2dafa01c6baf28143f2c26092bec6803bba2453dc45f12b14114692228b158f08b0b1fb01cf07ee35658f00c0c0d006f64e3f47c4596e390fdc3b24ebb9990b2764ebca12dafb8533da4479986a833a94619318c578e1d324ab1b754b28aa51adca11c3aa0d87730e3f9f67351a93d1d69e2301ddfe8f1a165be6139f8adf215825053643b566c59994f6f232b63f0c59af1f2b35c59c1f0a64cd9d2de416d0d63fbb06bf611223cd79f0bb0dd97ceab786c2d74727b984b43aba96be6ecc4e7ecf1c69bc45a41d3bd4fd3d9ba731f4f68cca917b133550ffe2b1bd2fb4285e58fc8c66feb050bd8282c958c1a605f09f64977e94e705be76b5655c589f067b0af129a17420926396d35471d804912b23785aff40a0678211271d8c93c926e342de06199dca626687bb65c8ae866f3ea3c3726f16d60889790b423e29581ba6171bb1645b2ff421f641874dff7e954772af8ad96020898e0c0e0ee3f55219adf92146acc5743d3029836fe15545ecd30534222119574e59da5d231e2d0e20e57cd01e61f8425b61f893d09608a643e372d501a37e2208c67b8e9a004e2442d9ce048d59740c6087500c343e3870622b71eadc6d5bb85283a1aa5b855bb402bd27eb919a162ca1a70fd9d14cde7ffc8a39050e8e3d362c52107d2bea2411f0b041f3c40fd2a9222dad6605b3a3dd7d4330897f857832e3e117d4f4b3cfe88a4e4c8b15a4a9dfcfba5795af10224aab2d42cff2e23e8a5b10c8fa188f7ebe827932f1382a6628a1a94b2b03537b0c4cd1624e946361f273af651e162a2e7f40831200622586de81f8e59cf9d8a9d171e40ea3e9a41e51fc90b3106760c81863887e67cfb348a3759630e94a10772d8d7d6b0ed72961e0f60c8684616245b7744ebd531586f221d5f9a989cd816516f180f6c5264b831c7b8d91353f93dafb55d1c7031dac523a2f55c3099908233d75fe881c957aae739da1c70856547567c3fdb841340666d1fda32b663d5e732d5addc507f1278a0c3cc9209eb0da44de4acf23b0f061c065c12a2c6d99e4219b62736a6398e616ed9d3a19a73aa1cde6762dac4ff968e6be93c026fe12b2e29eb11315d58ea9712d75d01b94df72201765404e9c4ec8175e8c04ae5bc55916e0bba425d10d270cf4b4ab8512607aeaad271ce0c298ea3bf83029e559b78cf6347df357e3fe2913da9b4dde6999247880ac96823cb0af3397fc2467655cc9c5bfe6004f55121f459743fa409092766bcd72fc971ac1abb5b36e477b82fbc2da1e9e131544238a45746da3c9f7892488d60ddcb16073bac6e1335aaa2e5f881120687d64b01428c54089a417bc645a01c0dec22c050056f10ce4adeb141a79a43e724c1681177b8d276ca021e868885a7ef7e723499d4ab7d184ec81a336f5a53251bc5ca1304f58a922e938291d2b256c601611e64a9c33f66d166684e4af6ca82879392d3bcb21ecf34de7602ed9bb793d166e278053a36f69e8e7a9896b1ecb3e02d7efa454126cf93e2305b41e9a4e9c49823e65720e4c69999ccaa934ce636f3b3012841186dbff4064be696939d257318aec0601fe09e166074a47027f146d4244b893a984c8450880350d2ac6346a1593672c462547e1f379dba37ba148a77d068aab432b6d25f1bf5f61147316f4730673dedda5d53289336ef47e6c1985fe9797a372c8ca159079aea518f1d18cb69f1824ab902f78fe7a8e82367aa24659f40a18618eed97e7b6f0a0941f096ad5af494d391af892115d0a32e0ebdcf994ff32667ebea2277e2182a55d4881fd6022399a72f98736a4bc9c38a274316ed0e60aaef5031e4e44833163e1bae646467e3db2ba684db8c740a2407ca4bc0ce2fd89d2028c2fd4e19a2ede0bfe0bc3b1f1b7a1005d126a1f0853993812ce905b3f5d3b2b8f91cefb79eb2bcec998eaca7985392895d76310ea7a43d065f8782eb6ca7bfd75c0611e9edf842257bf7e31543859addf15df8f969b8f8cc3ab5620ac23e46560c36fd2c463323af628b5caede60e13ab82775b3c12cc1592ed4bb64318df24792bd8c96e09d79ed6ff7c33573da6450e76fd40a2e39510ca598795a31f1370df3dbb95f47aa8be9f4bb8dbfbc86e2838eb42a535bc9142da346665f3d8c996b0e444730922c619d49672a03af227147bffb2a67d5c9b0650c8844926b2fe6828b09059fd7cdf248174bf62d791b4d243acd6375dfb3a14d5750645be2b8976210417dc9b9e62291284245d042bb7cfa4e26cb15de6514dc943fc2cce5d3252d4b2f114835d998cca8b1c3e18c70284215f7f16acc60b731664fcb7214659cc4b25e39aafd1d35e567d5392c8aa4fa7730fd521781abf96591f3b597bd59a8c27808907d07980f00026ca1eed48c190cac554f3dee4329683607049bcc39101c9dd39b0854bf6ac7b2f2bb3a52df2d58fa2e9856db3c36a85a09bd44e773124ba8203fc3cf4e82f7d571903e7030b6365bd1d2d30d99b498dde04736d95c80e27abee98d7e1e34dde85aefd42debff06b15e68dff4af0a7434f11e19b10886170901f120a877d51e5bd74a89f6c282a0e3085e6e8fdefa552bca36ad05c6f14b5c162b9980932afa67207187bdd0c7f180c6a96e85f10b40c5e076e6ee212164a3a35bdb6a6a04c2588e08b6d5692a429a62cf639aee444953f9fd0120428f631524d73de6fc1295a6760e24a7d21d1882a7b6e3d758a7e15f7a29a9d307789abedd4d1fec5469b605d336b91636b52c688ab7d0e2a7e12d3b58d8ba2073d0ae48eacda86ec6469f7ccd4a73278f51d08e848e8f35d9c5f527bdf2c5bdc3380ca296598923394d1033cfd2da9a3942d2620af6bc314cf07d47d84ea7d28154f48088da7a175ab0bd368a3abcf68f5197f7c6fb6675ec0962104d463051e0109f6ade18a99540a2ab906fc89c2d2d898b194acfb46454d673cdd54f232ffe3f828fd1711b16d0db83a554f046d0da97273e04f6ec0760f5e5804e4dfe54ea430fd0621e2302969e7fea542e4aefb37923c535cb3c27ace473a33a4934536dc40e8e187cad086957a88a8b452bc5673c0c90f98d94fccc8a7ad707d07d7f102b3f4fb192857f7d599bf53190939a281136a84954749604efad2a0b6101c932e507741fbdbf5c5731e0b223d21f855299d790649231fc0cbbd131c44091b45ba7f9679781e15989f450b646d3d8f630aa66eeff0cf4b2ac9c31267a1d554ce9c92a29d05a35567ccfc790a9fdbab5848f7097456d438b5795a3c854aa0d9d0ad53e3de807f7bb309dcfd89c0ca120078f9c3f16b8dc031d7989399708779e0082df7c65dc8d14583c31622a30cf958de3892231e5a4db3943cc9623c89e8fe53193c47a731ffb1a1d9b5138137e4daa6e68a918a8f0bc53b8535213b665b397b4755524613849a658215e2fd5bc43a03d7eba78081a56bd0e19377886d63ec5453e5c17804a6de73b96465e40237e1a0fd9c1567a34007c2b78e27cdd1b12e346c0bf58ed08498d01e1919dacf29436b3d0d93da18af466a322f9586a51e62c7688b9d5ab13fd71639796d5f6c524f04734f1f3aec8c0162c3dc96f9a3d5beec4c9f03ea3bd4d73626667bc3fc80377d4aa16a4e86ea2c728a8f3012b06c747b30332ce0ed6d7b3600a51249670721bc8950ea3af932a9e466c8fe432cc6c8e317dec0b36075a201352ca5d6c14c397218f9257ad7242e2d6e97b9710b7efafa1e19e104c113585a0858428d7b9e5fd94ae0685f10187f427ebdd4b5a1e81e359611908c50181fd13c7c2df9ed6a28b30dfa34a5ccd0e8c779f7897f0525f9c70a734670ee0f5b2886bf93a0248ab07d348c97fd6ecd9e7499d73d2d198fd50d420bab89607fc83ec58ec96a61481e89f5888634fe95b440d3020b29083cacccd86aec51d9bc925c9fedb4368301070af3a50860297fe5d248c01c9f29d82e1046f508ac522062b828a0d397e14d687714d62c5266f31d093c153f30f4dcc63934a74fa98bfcd95b15549c28280884c3ccfa729e294fbc00133060ead08e40d73efb381e2594d45af8e1a619df95ff599585d57b028781d46f002bf4eefc08e3cefa00d0ebbbb87c177d8a53b410a315738414224f25433891c943838d9faaa16fc559eb1d3771af96e50557fd717ccc1b38285bedd0ed7fb871b48a58d9bbf7144faebb9c4bd7abe44f7199085b5792c59ae7331226eff1565b0aaaa9a9de25f6e4c5a32763e4150ce76f445b381d3b70ff1d31a298f2c3353b36922a9779c3949e1069bba9993ff8291ccfcdd9bb9bcb69dbaeabfe4cad97e3aeead214c2aba536218379955fb554a32c2d0bfd08b4968e4d075c775505d840af9d8d4b73179d619a794ce4333d541d060133e3082c016888d6385f494453e3051e2182c9c1a61a2463be1e1749dd7d4185d224a1937d4753f41f53b8226417cf48e21e10356e3085ac00581055dcfb7a5834b5e8339da87ddefd02cbd233fe55bd09fc4abcf963c89e6b1b7f9c0dbe9b7042262e2f413330c5497fe9dc548dce2442aa276b30dc0cd94ebb9d5f79d2bbb99680a0485674545b208ac2d608c1c9973f3fa79d281f310da6bbde311563c88f61a6362081da83fbb46db115a7c2e710e9e43623496acad51410e8dc120ce5d5b4a4737c3593a2dd02b847bb66b37f2e955c0e2d3bec6ef3ebf601b83bb34aeac1cbaa340982e0836f0ad8c57781f3301284ad3e41a5b8b7d864d823bb3bfeed671caa0e3f338a424887a77c78c8fb6ccdfc379a6b91558a5ba2966ac6a33c1b549e4de757abbb6ad0ae2b8525b54c7621c2f388e11ac0d72e401f60d9cd20ee5e8ba102f280f3d618e719a2309ef7a9f7af61231610b91527874a18065c55594d77b14018205fd9c02ae2d9451edd605e8fa743986d19408da77057aa1ea3f7dcf8b77caead82db0c3778cd88ee1d320e901b4a95998eb193e3e35d0e237bc97663855a79c7a2ecc1b63cef68337ba46146e89e575d8dbe1b9492faa76e385e4561f5996ad3f397e46547233f0086887bacee09097514183b5357bbcb4cebb598490d92ae7e59658fdd4301d3f0bd1753f84fbfb8428a21f5c9004f9bdea138e5915f24bf543d71d86c49339e907959befb3aac3411ee5eb08b848d9877322526b8d4b4590aa3555857c5f52e47c9e44dbfb8b21c5ca08a6cd7ae1fd486a61a2d59c805ba974d62fe249a81ea83ed8ff2e875a20102daacc26e3bd47601ab0995242913e897a12cb4725767434b44371824f78e6e9ead3dae5481450020fa9c194f0bd55d5f313750217cca2419c7f4a03eb96283fcc09f690d4775b828deb39480d9125aa48832401ea5f72af859d00d2e04b89a6ebc889cc43a69409c5bb55b2605daadb372fe44b4ad630883499906a36d8efdd4c81aa471464f032a91d969570f99af47ec4867c06fde8e91c8241549fbfdec0590fc9e1de1eb31bcbaa1c92f4e1ad92062d765d5817328e39cc2b637382f0d393d7f5c3535d57409746b174d5e4fceec1e64397da0a3db7e660d58e0ece4cdd5a8c7a3216109a224788971866a9fb91b3e007a4ccdd11ced15b2951c188cbbc023c96317ba10c08b13b0f34e2a0cc376b44e6fbcebcd144eafe04da7beb555fc5294c42a37b078edc08ab97dcdc6755209edd82d2f63083ddd5d82a68b695c22b114e998d108bbb6d55a32a6447e10e4c128f78f5e6ccc95bcf73935d3182e8961b0e87589e1a37da02438f1ab9935cbcbd294495c4bcc022a80a99afc402a3f5aa1da029ebf6245f6d0616b661345a83f81ef21c01ecead1eee53c0c730f21381c744c4358680d6d476e86216a231dc7e60265c96de7e1c2a582ba2548e8028c184ab96a5b5f652860746cfd8f5409544305287d0a9a16c6288d74dbaff22b770e541aa3e2c1b66f6f0db6e6962dbc5dc59cc323f8a80f09e210475fc72f3b16524c1b7fa425efe22eed332cfe9b43ee109fec380dee2d687c28f1c385f592e0d66c87eae662cc97607f0c1d7291172dfb20ffda467bfe040f0c5283641acb8f8da138565f635f233d589a626428aaebcb471a510f6afbdac0196bc3ab12a561aea2ff551a6c6385386a31617474ae28ee7051b5ab033fdcaba33704afc1f35e7c382a3625d950019e95c29341af49a4494edb0f1195b4fe1e196c068a85f43e1291ff0c3b074496d927b6646318d8fb9bef4deca91b6a396370c79daccd74e9fab04f65baf5c39dfbd17fdca9da4a39e291ce5dacc977e8f2335e65b9d5cf99dbddf9dca59a7a3162f1865f9cc9f6c9f2b28f6a79d5cb1fdbd97ff8b5facf01a2619b0fcc74ad94e9a37a9e879b5c98320bf0fc0b4e65eddf164b70e8b74a102e2b8b838341a9697a5251ca23213c5107e7c1f56802134ef33c903ce05117542c678dd23c7bc15930a122689e4830b2c4bb6b7a3ea522e73016dcbcf98dfda9779cdecb53f647fd7eb30e414c60a1720e4d704968478f01ffa4581efbefba50b1c18f0a4363648159e6ac646a03531ff3f471dce84a6ac272a5ab83fd108f6269e26bf703f471ea41dd0ea9c062908e77d052a5dadeb0d0c077737051102c4a100e3a4ce0f8d58aa83b8c6aecb404d22a92c4a59e06aa8bb0a16545647ba682978f8dc8998bb21b4fa63fb244baa4e590ad98cd3b8fdac2e5e196ed1438cff232a1c8bcb3940b5061e242b428397ed643d208ef6225b06f75e9ec0c474f3145427671399af4c41489bb010c543b86bb77d4fd7d3818bcaabafedaf52a1900c5f38fa3b48bb47979945f13a5d7a54a4a95cee395c4b3b374c1f4049828da1c64ac60440c4ef7bf7567997f4981d1811dc6ffc15177b4ff5fd4def84428e255646f4934b6ceebdde26bac206345c6abe71715a660332a6dc9780bcfa1318df20b499b51577c50e5e24cbb44a202a17857897903a524ea8947eec405922a885008dbbd15354ce5e3a8300a9bcb334a7c145214f81a6a7fbd02515be0c7731077d60de89a3a6ed0989211447591d1dc478abc4b8de864374d130744370a4f95957ea2194f3ce00ade664c98d2454c3bc6ecd94a14e55d49d58df9a045d461daf89587fcb9eb9f2d7e144c3484d0a9c3e8c6bf8b0ae33af45200db5f7b904a8d188713226ceaa62a0fa6537084e0129339175f7e26e1a092b4e170aa60509e5161c97df6511a8901ebca0ba6ea66293e4c55a09b46741211777e1d489770e04aeeb8e576469c395cc8c0eb887f726319bae29d74840cd0f3f983505f00af5e432d253a9b157f105ff4d540f34f100981bc5bbf6fa9f0895e45adf76d40930945a7a313f082349c0ad3f8dda9c34be3fee78d12454f9ec555873707432c32ea6623e856dd53bf800c92dc3df6e4a415ab204a09ae7bd24b64e4263c0d398029cd7268ea1d5628d73a02f05dc939d9db9e21534e8bfabe52edfa6be4dc5ec3a6512faaa557a3de9ecf47264b7ea85a38e409486ef6aaf6ed52e6e8d17579f410e531f66981b1fdfa354edbec30a8c7a07e941bda58d7efb9c526f5020b35218b069a8038c737ccd6596b9374241e1c48e72899ff26fe3a1ae9ffa49b1d7e3dac2fd73b237a2b28ba8bcd0a9d1500555d1e485a555c5bf61983593e6a9002ca66f42fb19ef86d6daffa4c0db8d401f602e76fba979dc0ba77c04a8b6ac59a967cb55d41abaa9f7d6b42be836add0e82c1a5a1bb224717f913f2d77ad57de7f90f194a5b88da35005c67a6ed16b74068931783add5a00a1d3e081cd715180882950d39d789ac162ca896e7b7179bb716b9d73c426d86c54c407eead4eeef0ae022e5a3fa7739cf1fa57325faca57413f26100d2d178844da54418c2d78501e4b6e15b67f77d3edd3f0f08a3d568525dc3e65436bcc5a5cbcd49857ad4198ac19037e522085b438671b2bb54e2da853b840771c6a129c2b286cbd607c5e94bd7954b51d7bb6129e6a3b7621a096e0f88533dda806d519b0f06df753ba1e6ac35a02a9570deded0a592351dcea5e33cfa80493748b74251b8ed92732de464c74f8ef83d0ad3508c9cb320bcf0fb8a3cc67568433c32f16227671d05d93c6fb7ff7024fd0b4984d238bf6e58f88d4922aa9ff3c20b04d5026696045eb7b3214be7b159cf44247ae743bd3fdbddbd4d69be9d9eb20c609a7514d9072a297eaacbfd62aeef112f9667dfd099e79b7381407e0f702d239457efee053f89731965483b7dd5a4696c2624d0dcdd1d1ed0764becade0092d91570aba7fda3503f9cba8e5cf2ef7ce5ad478db4cda0225b0174e5e8d7abf16b58f7e7242c416421956c8f23f3141f44ed09cb3face2acf422cfdc1c098626047abc6736872b5111cd002325f5f88ce5a6de7fecc55c819cdbc6d6b9f5686f063a895346b1d255ecce17f445273eda65abfe39a4ffd2e45274861272229da87bd0f91e2c33582c6b7e423822b005cc9ce82cfa66a297012ad980cdd9a2a095a28bd718cd6214b5697b9ca4230042ef157dab6da4b33b5c43407a7d79266a0703c0b195d724760e06077f28f9a7b017f4e5303721a6aa736c9edcc2c67f0aaae24cfb022a8c7320dfe2d123d8fb2ff740cb41481966abd55a3181f2f8624d699232bb5c0c21ca670b55d21af8ca41e26c2b5a889f85652a6706785731d530691aadcd9b112b8b1a7e1001404750d8b3a787560c151b363c75509c063ac55bac8a8231e6bcd125c82989036fe2c4d27b3acf2c72397830b44fdb4961aaf611af7d882c6138adb27b0ede3e64e03ee7950ec28983530374ba270e789f6fc10dc149bbe98ae2dcaf4b277c7a8483bca20442df3975521628ff68311d6bd1ba1676297fad85f601f684ca2f848202aeaccae8f61533759846183064b14da21dfc98f232278c876c7d21b4126e6f384e82ce437a80217d815957f08ed553cd39712657aac90f143bddf168ad25c5593502c1960ef1c94108e81942ea63914008ac0943d4b26c9d9533051dc846ec3a823a3a91f0253f2efab36737cba64136c1c939f5e5724d7a635070dade38142abffe0cbe245a76a23205ce38eabb3c261ccc0de020046ff18116f4a05699a472db280f5d7a63022a4708d80e2c10ff71584d350abc60bb80179c61550f3c2a8666befa078cf2a1713e796a667615eadde4f033239c38025f0439cad22e2bd14c242578f2d789cdb963c547a2fcadbad2425e2486e86f53396f56c05fe670f5acc7ffedc8929a3a219aa258ac20804991a733c394f3db6face0dbc3b5b0a4cd277fa60394ff3dcfebf920e7fd6110035a41c800b9c44a8150f1f500960f0838017118ff787e1e8f6c2856a901518ba1bc08d3047abce5546c20c29792fd701f23f69dd30929a19a013ac59d22b66f0390262e1347b6506006ccc5a0ac3a5f8a4ff82d008e94c1f10ecc9a9b0225accd1fa52055eeb6d10615ff701710ce16f089141d85c335a48aea28569f3630e5beca569027bfa5805ab809dbba53f8e47bc1ec18c091c00fd754d0bc1d82dbef8d8b0bfee642682fd66152f0256034687619f1d5a9b2b07f3b89863778113f31752b3fc1052d100530e110c4e272b4bd785dfe94c733db9a0c5c2dde42484e3087f6263f615961dc052bf3e92cd5a5b9f0c78943a37ce318081c2e6bc4ee5f33ff2cac3d3ea6647ca2a9d0ed9832747293d5367741354434eaee14e803078b5e35a765be3268a6b3ba23573bd13c4ee7543a10bc875995b9bd1beaffb036e033b4e9787c0090de9c3a401170e1dd05d39d1932eab976fab19cfa043eefc773bffaf864cbff2f46a9a24ff2bb313938496718da20763864503c1999fcd75793474d9b713b9926c12522e4494989f575f85f19cce9de41bfb971fdeab7443a2034daa567343f686e93b0d46b469670db8611424552e93272a7fea33199e0f7cda952216f2829977c60a1485b610c7942745e2eb72e0ab781c67b6391ccc20b618299ad397b040cf6258bfe5faaa177e31a239cf53d75c784772c9a0ca863fdcc8614ff4dfe847d77b4bd95abaf0d9fdcc280f87d25bef9029de596c507d6e4467ae7080621b0d4bcbc1fae7c2b4494eda19b7aaed14dc1e2504fdd1806f483baa56c3edd69211b8e626e0e00f8908433fcc84b82ddb5d9354d9eb90324ca3267e5e6eebb575783c0bc8289d96e898cad899aa46ab0d6042351d3b42149d0148370c7262f316bd5558c1f26d6a08d0cad510ee8a544e6b689b8dc28291c21a7d1dc36358c472cc244b3719695c323ee71a621e7b5ca6f1d348ecf320b419d115d7f4a8400e1a22ec8c13abe9d4aff0eb22b1cd64003ab37114157d88ba901507cd3cb34844a8644d7055887b56559d204ff751893ed4d4884832a875e9af3561408fd68eb88bdc73da9300a0b5330aec525c61dd03c3eeb037e4c17df009b1734178e8407284f3d7783783c24ce9c08ceaef633eb6630b661bf8fd6fc7d2d4e5ae206356b4a5064070d1c18afba8318500095879e9e8f5a215619be089f66396d152de7be62e4a3ddc08c257406a20869d5dc5b8e39477d524a86a69373d4a221815a228f212c81e5097bcdeb24ac942fd07a1de11efa619a99388c921d72654a7d5034efde0dd4d69667037a8ebf2e51298bcf9a4cb3e218cbaeaee74247ec274de0416d043b156695c87814762cdda88cc14382a89402bf997d17e9069a29a23cfbb7676824d88922a650c5cb68e7f98b3e695048ed5fa72a0b694649eae9487ab33970d0d3f24821ba7a983c5691f595658f8001699ada026d4f8871feb120454360e613ea2c3e612e9a084cac1ea3b94db0373cfb8018e3116c3f493547f5338cd17b29434cf4c7a7a1695fe7229ae459c1aa7dfc541033523ce5ba4845f397e4f375e5dd197c5119d76e4aba2f3431720776088532ef1a10231baef9252c41b485078c5dd9e0f29e30f00d36f13054d530d154aa6af99d4782220b87ded643c4ad0917cdad21cea635c80fe5f9640a9e7184e211a09e2ae57837dd8714516f57df01a0b1b4c9d07451b15d9c8d683ee71d6ea81d66d38ecbf0494f66aca5c8c11854dd59f6e42e3d6633afcb6b1757742dfa846b7496b1aecfafeb1c80f0fef9868120f9da6d3df27fcf3d15c23b32191b322fca9f8c04895c9898697fe44656285f31142c13b075bd5a7be7fbd54462c448b85d394a999d54f87249bc3bde6943fc12dca96046f0dcd79a6e2d8c921863a52883b2245d27dbf3e7b139175be3eb2a11c7b8d731e9875c16645c516a09178b03fff7ff8ea95b97722122091f9d3743ed2178f219119d610b0b48f7f5f2158b0472b3f60ecc58d77be215f256d68e18907ac8553152e71cbce29993eede9160aba511a22de168eede01010a718522204c7ac3d4afd3da7b8fe33191d5636d2a3997b94a1e07433faa6be59d294014a0ae2b0f49758ba90c243a3927d922ea8c5ab766a9834c49f5e22093c7781f89f6cc3a5b71f7069d2f93e71fbb2e81a36059003a9c579f7f9abc599b46d6d4cf4aabba9e19927d716bc6639d5773b2094b6393662019f0d3b8f9487a445bce92e552d123cde78f0cbde0a14d30e80f931a469e80b576edcad175c7aa711fd994929adc91e2cc9230449b53595944e9a8f7beac0f1b415749427eff62711fd34e760999e9e07e88970c6dc388c492c6d724c04f18afb5dc9d1f1ee40440f861678b20cd2c3713f2cff272f7315195116747e1595f67fbf4595c40e765d81d113c526d357d831c40d6c2463d50859d90cf6f33d1770f291404bb4447fbf17c8dd9d6ebcc65f10751517f9a95239a49cc99d08960ce6df9943ae5b19434c9b4799c3320ea3c87fa36babc54b4ce11d839847b13e985835726a89f3bb1a5a41fa57d33a818bad6bd85c80a4d5a1c7970e7bf3464f61b4435407d2b719a5fafe0d6751d49724a24789758b263fd7c8678ecabef563054776e6c83aa0d438244a9b31fe431c22603aa9f3c97855915c7411e2d65fbe2d2f81bbf968434fe1fbb2246bd029031dec2acb7b21403507ca57275193a80bed0fb1caa4dee49d632a9a868e4dc7f86242599f638333c060ddd82b28e852c962edbf6c9280683c5322af1cd1b7057e548cf3c026950daaa01660a6b2e665979afed492e726ef9319e109a34777c3604da0b67985830d819a703f58e4c171204304c37962df421420eceb42088c85ede5536138d944955e5daaf3c573e90c1c7d591ae333800eaf1c5078178f1a0d938eb33342860b9e112c294547c0b54c206fb4deebdb7dc5b4ab9a54c49066509890974095664f8de134a86df3d4fa9542a957213a8a14051821da118e4ee6600e4f79586162b7c10054fc9864617484a3b591459cb17d14a1496d218af9feee84ce4ab208dc49e43f38ce53edf4d3ecaa981b5be73ed06ebe76b3ab4e429dfba4ce4bb12a791df65a75376ca4e2957e238d200fe3418625c3f5716b9bb7ee06bcd862c957396a259aa53a9799aa779ca30f6e3b8161bcbea27e4a0be1b328afc91809f350bfa6a4591ecfb306e4a6e62fd32b51e895e7537f2e752a5f3d2643bb751391f02ec9302a549a6919f14283899e551f961ce9741e4fba74c359de32429a5bc6dea9c56d239adc4d4fd26ee9ece51d24bdc518da2d9632fafd8ce8ee2e291bc05497834d88d149890e54b326cbf8baa90cb08373abc2a411a0bd10f9348e55725eb78557a34eee0950cba92dd71a79ed27943352647a9b56fc4cef546c4df9e52504f8e4af96365262f97448ebfbd8ff81b1671ff4a3eacb758c4611fcac1fca44041e2ba335f6f15457e68655590089c2da24f4574ce4704a49908ec54cbff016560146f64f211fc5088a6a8f4f81377e24f9cd475e758539125fbf2cb159442bd68790ae6c59c4f65e389fc4c4fb0d75170068bf6d8cd6c148fd45bb8c9499d7220f00794b7c523791498e313351b3c4b31d8ebb0899324860d98b2fb9538a97177a1eb8c99d20ae7e6ac31621666f5736e04307744f21098fdbba9b80cd438dca954cfd98e27f62fe8c07d67cb383aa3f888ca9fbe5996f7499182834c45b9bd5d8e71c358a552a9544b7e52502b6b0bb38ae47c36c14a2cdda3c8ba6fe553c8b3e63d2778ec76146c5323e1497e9a0d9d555d340c1e8d5f8eea1c47754e6347d5f8ac223dd52999aa21a915100a6b6dc15110d5dcd79f55a069f5f967442740ad822e3aad3b89be897981a1bcc8d7e5e8bc5ba6f74991e244beb4d0339d60add5e64fcdddaf1fd259fb39e7d4ee25b95ead6ecc30a3b250bf905e2b47414397e24b4781f990f68dbb50adb8933f2d97611856f9f5ab90506ef931bf47da51446729fba794f2278f8f50ed3cf3511e457ec8a4ed60244b5c44943b36470813eb6bbd345bd6ef688d3b23b509b60b220b09e5fe97d7ac1a8387e38919b795f4cb5328f3a263bbce7956a0a2870b6180416b3abc584df361ffe58a3c8a75459e831d0bb3da9963b9a25c2fcc9c26a5b69a2b6ed5999b57969a477f22bfb7be691637d9eb30d8cbaddb38110b5fc909fb07e57e703db4a767caee878364e9cf98f155348ab328168247803185aa44aabe9660b09e5d0cebf23c5ceef40bb1be618a6274ce96820429d9efc65990ae66f4f817358ef22ae03b14ed3b959a91824911e91d845a8acc827f6a9c58b566669798acef959160a51431ec3bb7c28a3f90c00ca7c7ca51cd77fa94c6eb26140ff2d37aa0a2d0f935b06e9c839228274464cf1a196601712dcfc3e11119be8f91214c411988e3505490667b88ad78136791e14ab30fe515fbb2a37a1586dc97d2903d4d07f9f4af1b4462517df95d8b2ac6e1e5daa35eb8933f82ced773970d2c32a534d37ad01477bdb77073091b59bc7ed357630151ea3df1f6cd529aa5b42fec96a999459f177a7b0ae7745b5b86e33d62d1306ce7a89aaea941712895477147d19215348b2e688eb7c810d60d912fd8ae577e8247e32828b372d20f0fe39132f046617834d8afa0cb20555c08656520fba3172e22f24c2ec66f98b1db4e2c27e4ce7152e73ad93bd54b2485d47588782a553191eb87fbf9a1134b1c5b72ff2a869964f46a5250595e1f6d91d29e2adb1ce5d22bb7a2579e4517193a18b673d477bd7a3a5ea5c11e3a9487e3085ec5c3e1511ce5511c09e30ad44d49de208e4513e3f0f27cf98daf1e52e422ff4ecd2528b55a6479352d7b6fd5843b86042a6479b3a73d550e16b590a7c2b0a8b19295ed1c35630e72f77a3a074a4131c99ef20bfd722fd027450a10b2147914e7f111fcee82ed15a4f9b1b241f67394a3508e7294a31c155fc5ae0ca65ceb2878aad54e678d3cfb62f0c6c6af3ebb865fb94a59af1d356f041feb99c247aa1eb35d23eb583e9affc94752d8885beb9c25292b6580409924a38b1ad1e44f8ab78317042536ea98323aa515ed7da57ea55a5fe6b7b1afcf416dc5b6acf62e525c60c24bf0add8f1069441f149e4813447dce7a5b8a024e7970c3fa6a838cd917a93e2020f32cde362159b38e9a5ac5c71e2f0c749b36e9b962de8ee3c2cc6b0447c11d44e7c0483f4121f615a0e8ddbe4a3263eea263e824fc5c301a7f828e5a320340f4907d2807e898f60eb645a0f26a0afeda388e39279bb5ed2c37a82ed6702e232fc36e964d8dd447c04e1773106e1699e6892f04776c76e0bf7cd8f257ca18cdc354f17b9833e720a920ab20a4f471595b4e2a48cce9736b955122223ff388b0c79a105bd42a6e8142f83de3e8b05dd4845131b71a778723a5a72d22ca3535ab161a60f48944054c62b3a9512c211bc79a63857821c2f979fd6034e61af3172bc597e1a0f4cecf3f0da851c2f969fc68328147be6a7f510c2a4568a5c266f46851c25287350262f96ad78a9459bc8bb652b5e2bf7ad91a7935363d805a2d17245f65b73a521a3131886c523701cf75d14421403fc42472d5001c250152741ebb80bd5ec8bfa5d7ff1b5f2505f0798c5eba2f16059188797ad8f3daccee91b9f63d17ac48792b7cb04641f7ee1cdf392d1eb19ebc9ad655fc447d089472a586813db37446414f873b73cfd5a3452e1a39314b653cde323f8a369d80f0deb41efb12b687e6cb9c4474fc83fde08be3bd15108395ac825d81c27d185c29f0967343d1c393dc87d6796328aed3a2785451936c87daddc9af5a0786b6477cb652a5a726618369fe0454c47e9b5869433e0d47a8a74f9de0eecab5ce2efb8769f75422189a3c94751272ee9accf5e6788956b3481ecb7e51cbfaca3dde6f1512ad22046f1702cb1228e268b410fc24536295a5c8153b9a7777beb5e4ab8bb619ab3d76ed719c6825c61b66594a06a6264bfcd92fb3e2cc8a842f62bf3d37a788da8a3f37448f174c4299e0e0b074d9c441f6adb13b1c2884221c3975f64f8d613b2175d340f11fa4536b1ab8a329af7a2a9775027a2175a5c118f1085004db693a994933aeaf8e88a261e1e504e0d051ce089b41b6895dea84bb36b15f0529b60d3f84d74c10a470b19462454f8915e98badddd3dcbe00ffc813ff0a78608091e4dd32332944234d1a006fda4c08338058f759161bbd7939373a86643e7e6699ee631994c2693e9a2353519d2eb46730d5051a71276c2e9a3393f5f8f243f42ede9bbeecd6ef4d1e4e68567f6f4d1c0cf7077e1399fd6fbd81d4d31240166ba162c7d28b03726123e34d858c2868d19949861861a486ad4109d40248a49222686860968d0081d0985609080817929c1cb4bcf9891e1c3e1e2d2528696161632b0b080c60002d932ace5c8e0b84d0cdba68da169d94f96d530d48a8101c32e31ae8b5ea1748631a7fc421010fa070163ccf041f0744008337c21fa83f8c0d3f14108793a5c7c041bb37123d382c9d9024ded5214261985a94d1d45f46e09b5800fbd684805a8851948632de9565acbda69498a61d745e975516bca8626930d9ef541ef5822fc470b695e093e7fab998610facccccc4c1434702c3f52e13de675513a616ad254eaca68c1cce58909727723bf517f75d8d71b3d12fc362d815c58d3d3611ba620178fd44c98e4d84d64f83f78890894190232c176302553bde3552e8680344d8327033f0890e695de0f6cd34cbc1284190b850529f210d407f82f35848534442861ed1bc3b6a94d6d6a539be20d75991e3c08c4102c101f7523215244034eea191f401a086f207670d283b940b80c90209c74855e8d4702fd1030d91ff4482def8f3d92cbfbc3479af1fedbdb31a4dfaf0a3c1cdef306a13708203eeaab7b887ee99f718dbc51123dea6fb99d82d7497cd40feaaf40ff907e0df4fbd0b6b9f64b1f0727f5137112c5c16d7024727f76bb5ea2eb268a6820400471595a8f187d88951d4fbc838ffa25cefaf5efd010d7cc38a973a7bca044f6b66d7a71ba84477777777777777777777777f7e7310a0e127092bf0f4e8a11872c4cb02477a15417a2609d381c3aade857cbf13e2850b420cf5b33bd31393a012dd0bbc744a996e879b8bc45fa085094e1a724678e126d7b798b4829f1cef654b4f02949bc33c3045196e7de3a86ddb427a362fdcc7a5a8addbecb52ee249beb73779e26aa08973cc4ca5bce9dd91643e3d778bb9877f96c9a9cb4bdb51eca745a7066ba7e3e14b2a85b3931bffdcc8937e69f7643ccbb4cd33f254e723c022bfb74b95dfc18cbeac71f785172c4425e145135a27e36ca32db4096eb68847ced31503fb3ac77e7ee96ed76b51ca38a86ffb7117af9075d58b8deb02b898f3b1a4e307806ee280661dc85b09b36ec39fe425e943cebad9135f3bb9a196a886a9c58b2ddee9b91bb346ffd560ca5b1a70b7e8044aa88cd034e39a522369d4515786cb623abd24cf902b41b2492a7caf668cdcdadba5dd8f2fe58f6ed5a596c94a58187bf2d0021c9090c4e4af26d6ca080a7b4d3d25696c576332db22d322a367c66e23896afcfdf7bcf25f7202e2b216f57e679635a70d7b92556195b3ec69616ff968f6fdd20feb19d6b16cc592d6fdd96962b5df0162db7362bb647efa992b71b7f905fdf02f22b7ed002f52994a1cfc321edb70fb51e44140a145dc83126db2ba2744ebad1d9523ea14a157c4ca7927c1b0d0aaad24e57818a56f5b695d6ed6e4480da0f5d92cd71157bb65d2c5bb77e0eb1e2e3e89d3c974e3a699e393e7372bac78af342a2093d251b181d27d96358a6bde30ccbb41206c5278553b28139dd9476bcbea6d137ebd4ea3c6d2597dfddb800a85092d839956c604c3ca59d37827b44fb2c46617d325596f595204dfda8da9e876f5164cd1b542091b3db28edeec42bb2ac1ebb39e63a68d237cb96df6bfbd6b229fbc572855905e9a08914c258420c38aa927c9b9813fc9476361d0c21c32ec334bbe93f0a659ae6c633e5a40d779db77f79770fd2bfbdc71cd8edbbc9b369393c4d07a8d9f0f2560f2f6f0db1b68f77fbc9e3a3694dab7bbcbd6069950bab55a05f7ebea5f5c004c997e6139781fff2f38afa69e0f37b663e52fba11f142876325366edb5d934a30534291533675a61afdc4d9b51172aae4cc58b566b8cc14f9e3d84d3103c3a61fbe52dd2514832464f494e2ab9888d7c9bd6c20a9c92c43bf34dc1c929bf2e6eb8cc2753fda88ffd0ff957125dda11f55ba03e26ff7a23ea63465c2fbb64c48e8febe577f1a7f10ff5b1c7407d0c6340fe8583883b364ba960bc90d465b26222d96bdf65a638c4cab3c84ef6f58b68f28b605f8164bf158be2bf5291faa2887fe8d28332af34797ce4788895caf364bfbbae70e1b242ff5c5098279969a2ed9f297217553307267791e7fa89aa99334d5327c7edcac361031b714f6b6293a9276d62378e9b56a39a58bc61da24ab02a58158e28bc91542ad4797e123ebddb6788358e07cd71c33f9b949453ab32edc7de6a89944fdf58d94448d4518905fdf8796e1223b8d7dc8afb888868d94b6485396131fe9e09b99742c133699541167a9ccd47263b2df27839bcc72593293118e907d2611de8e0cd5399e0efaa11f3b572a3b7b68a83e29e5393959159781afe3240b7b8e7b132b4e61fda67f3253ff6c1974df155b0821fbd5320804ba0f0a145e448fd74f0b4be4019d5cfc2584ddc572196a8b3ca7d049e3e404fdfbedd9eecb65eecadb55caec8a8fe08f8fb2d57ce2a326b6cb52f3e4a313b54c502d0bc3b332ae643fdc5792053d0fcf564f07c7054e480995cc208ecbc0781a0e174a84b4234ed918272656e6aee49e87cfe95a984bbaa7a7a77b42f95940596ae350b1e5af1f4813552ed7cbe5789e6616f86506ee269416dc96662605c8e4fe06e402e4ee2d368aa56b8c7925b981220fddba87729a561f66552cad0916ed889e31e609260343f395adafd57fd9878b45ad9d16b59ed239efbc2fcf13a48994da50e85d70f7a35154cd807057c36d956eb47dbac7420269321394892a1832593834d4a9c8ddc880059ef3858e6d9fee716bbeced3722a4eda420c19eee89fce01df7a6ba50a9ddf56aeb74d5078916bbc30b76754b29e948f32538eaa2d33a9b6a8cac9a95cf64a7d447efdee460c7c761e142565e4da5985d91699bcafd4d1ca669f87471cd895ca27b3e224d01b515f1a91a5ba90d684a64486da111966636498a253b059e83230b266d274a6f6158b1a8b7cd0fe651ff2ad9f271f715c6feedccbf394f3c469ae1015778992edcdaa64292803553dd96e38f38953d8b85249613bcfb172204dd402e651155590669e3e149a511585d0341e8ac9dd3c4d3c4ff3276757324aad6d9cad1e0e6823ce74321313fbaa6d32fa070a6128f92915b1795bc0e254badee697a84ab2c9884a883c50a60b3a852c0b6064f8f106d7cf02b237a2bef646c8cfbebb7eea6bff437ef6d109cbf3e6940c3f8b4c8b6c8b8c4a2a95bd7c23b4af6f44f652fbfa3fb2973f4fd99d27ecfbb58bca4ed8c65d662508fd6e88b5517b2bcc9ebb3be474f8be1042f8e4d619e98658b9b31f7ffbbebfd18ee60d673e3e020213761b83691323c325b9cb52a5898234f30469242e521ffee499534a934a864a42574c906613830920641338c9db184c4b72b4819da69c2c65bbeb87670a4abe90ba29bdd28577fabb10c7839b7e204d537b6936749ea78703ce20cc2c32fcd8332e59de07850547f2d378b059a2204da3fc0887813781722550ab95af7ce52b5f59514627978d3432393084cfee1da8f565d449eecf3ffa9c735a4fb844d7e69c530bc90f5918398c35eca2edbbbfae48fbeee5156dd886faf4e9bf3caf48c336607ffdf52f3f4dc35937c4c2be7b117ca2b72e9695181f6ad6c0a38fbc3efcfab278b3afb4561a8fddce318fcd20aaf1341001240789bf7dfcf8f06a2cbf7dbc2c407280794dc4bdcb6fd6da7f0f4816711806774080e4edb7876f9f07b4b7b34f9fe59f468166c1432cd936b08fc11e6a5f9f96c3f691e52116711faf88fb68350d8b382eb4f82cb7b3ffea73f5b7db6ddb6b2f3f6a39d48f38487d0e07b1f1f1ed1d626d7888956778cdc6bfa7e176318b1e6a3a740e3670370446dcd5c0d14722fc33e63118f3580ca643a73ddc3e6a3c401e3a0d8331b83322633f3fde585bd321622d6fb89b3f04661ab83392314ce3278da74103774360c69eaac062ef5de74dc7d27280b8bfd6dfb0ac3dec80f4007fc39d914bcb017ea50fb59bdd2ddeee737c79c8b1bc0bccb7d09687f91936cf78980fdd907d32148fa0b386836c5fdf351dfaebb796438db13392b7afded5d7344dbb75e3fefaed7636b93e87bbf79d915c9b07acb71f33e5f7f47640a63f1e0e9f08089461049d630724c3b79a603bc3dbf1c8ddfbd678e8dcfd3393bb3626dc0b4aadcd619f06335043c8a13b84104208df218410c29a9a9a9a9a9a9a9a9a9a9a1a26d42ca1068b9a29354aa8b9a2c68a1a9e9a24d448a941424d949a2a6a8e5003a5065503819a07d438a0a60131c22763120bdf1f7d3251c651c42accb4efde65c6f3f0d802db85b60f419a978fff4eb21fffc6c849efe3d730e3a416ebaf08ac1cc4e561fe5d1158d986cbd3b82e2effb41e2c2e6fe306b10f137a1a5f616ef735bea3303030efad874533fcb3e45baf5fdedc7da6f1efd5a0f1221a1f83bb50a60173edd3b8f643b77b19ccb543ac3cf2510cddf0517c975b838fe2b75c96ab00aff151b4f8e30a2c87add3f8840d69d3da88fdbc1df6aef578f86b60310616cac0f65f5fdf7bdf505a99be5f944eeb4573ca0f4189811439c62b442830f822b6d4e4a882c2c418595ad449f1638cee9203b569232c5073e9f0e5c777e993f8b95bf4e9bb45c43cc46a525f0e1bbdb01449297e7c24f8d65bb13950df0dbfc1e4d240b62aed7687310ab99165ad35deee860df1b1af309bd6e3e9c7304a7f401a0a69e31ee8c75921a5d412c3ca8f140e70c26959a31f60e90717f4fb6bc8d1c26ea7816ce12e0ab9912f0db84c8be2e31f4eb04dde05fa27ee97a38c031670188d6295a2be1b9d2567709373376a9f9c4c233f284a52b9be03d8d083eff99832f4f14e48f621b23f2a429e4f7e3a58727c388547e3aa27139f6621c6dfc2f33072743290c8f19d0ab7b0f5155a104208ad98d903db3d3e8ad7cfef9febfbfdf2dcefd78f8f5654ec15af87108fc033fc9fd67a78cc3dc4af270296c1ba336599dcec0801dfdf664708f8a21c84c07c611dfc2116e9d0107737bc3c8410f08b2d24b9c932cef470dc537c141b0913cf6f7cd4abbe3253468e56e04a62613b68c59bf8288ee2c3539de96c3dcd0a5115a3ac0b9f608882de65eed66352212e22662133d91ffa802e7ce2f054b78728d18c9934e6d47951f21ce5199a4fc37d5066860b0c67a790e793afef138fbdfe898fa2eb6422dc853cc669845e66b8c058cea1bfd639bbdd8b723b20f9b5db7d86d693ee7df1a8747fd790aeeff87cb2ebc425397e41e565ca0c1dea823b6a2d54c1cd55106459178e262658f83c20bcfed61d62c127d94c0736f1234e9a935a8ebb8c326e1a7716dece0fd260f45b4223164b03c2b1627882f0b5f7ef66b2e3aebf5e3f8284890aefd31e6ad6c3eb7fdd20aefd402106e8574ca1ccf5d8d7e7e14ff3817d85da5f57d3b03b9225c41ed8ae7d9ce4e82a785d0b58d80e9ee6141be39227f3720e52943c99972d782ff4b98d6115a8721284104315f4813e50d5d1d824c7873aae43ed8f666ab2045c26fbec5d2284c119cc743ecbbe713793fd85bb1a6825e3e12326485cc799c8d17a5c86931c7713625899374958f20a6b851425da7d79bbf7a966dc4a5fa114f615273dec2a2b3eb20ff3be7292164734beab01f604c0c67703107d77738d6fc9fe45e7f0f79cce11bf83c9feb677c053e788ef427838e2772cd9ddb5dfdeba41e05f5fb5ebdb7595c96a6fc547b1c7c5e56df4e4f8335c8885378a5fe3c22ef428bee84231de287ecc8565f8283e8d1b6f84101f7e31e3e37bcecbc787a7def13e04bfc8f125c25ef9380962fbf3afe7019d3e99f9d7ed86b0a0ae338ce3d5c4f15ad982e9e01672fc19b76371813e45c43c33a9f5d85eb3cfc3dd8a9320166246e5a4ede3fb4adbb64ba9b683914c359b197fc742cc640bf7159c69740beee3f795fa118a1c7bc9adb84c7cb8033895609f155294d0effcbabf377182dd09761d1fc5ec3a2fc720a04c067de20da4a93f5373856db92c1774a18fd6c3ea9eeff88d04d28c88401a0c772f155370d4a819141cd53cee6642a31fc249fef16b2844e9106b1487f051fcfe81ddfee5eea9b6d79e87439ff89e0f16e224ede3c71fc2e97c1eae0db1f2866de89ce1078910f9803d0fd95feff9693accbf34bfa1796b68a12a7f637e1123250c56f13058a8c2d0c747715a615fa9833e318544ee3e3f7c850c54a1fc5efb2ac7e7e2147b278fc51efa306139c9f18b787c224eeacc9b895027c911fbb412cd863845e5a3f83195a34f5ef978175a26fe036a4833061809e06d6cb973959458e3db340da49b7d09d978018c0c30436af88018df2aa3833e397eafe047687993771d1515ab2739fef39f2839fe8d888358a96a038d58364e2180835a49f6d1608fec3c9cc497a82fc0ffc8ce3b400f4260862fc42a427d37bac6e921d89aa722128490326a1a00c42381fefd06de8eef1c50e3febd05de8e1b9d0366dbbfefe1ed183d093c12fdf720b0a386ce015dbeabd931c3804792ffba03e4f73948d61720579897ffde0144e780ef43e7d07097e11086b93e3c99aea177f8e81c3f66d4d0f31450d33920d4e18187037e4700209d03a6806001596ef301071d351a4e65b807143081060a2cb1041b3c2881c50c3b2099524387132841348124ae88c9c10456d0c0e1084fe80624926043103d1e0e2448208a4b04ca50454b890c4760c96380c2e3a1200081073cc0010e68400376ecd0a183010ca8a9a1a1219116b08087430139013101d95f88a703011001d9ff034fc701fc00d95fc8d331f370f4f7ccc3ee672286c8fe3e1a092a2078a30fc2492fc790e15b60c8f07f3c31e4ee85e181a7438887a37708e91cf0cbc8f0c5c8f06940010d011dcd3d6f6e70e4cd0d170e4fefb89a7839e0b7e0e1805764f86ec5ca79b502245bff871c1fc91eb217e1b043344593164d746697e2544c931cf1f1b190b0b7b770524771ae241447521c9a24c37fed1507ce0602c4f4691a650848a64f152f3841eea6cfcdbcc1f921f33b5148d8ceddb47838caca692b2727c30700cec3419ba03811457122c589f0afebbaaecb27fac8191a4400c9413053c6209b6aa46da053df29c24663a41ba55ba43446ca691c0b28463116508ce3364ab148290b22c5226d22d24dc3228d1487524a69139b86458a4329a51bdd366eeb4d53018d9b0a304a29a51ce5284769d428a554d3b418638c1ad5a216351550ba511a23a55bdc348c324129a594d22522a594524aa9a66954a31aa5946a28e0b06da31b6d4a29a594524a29a571db28a574098d6a34464a69dca268a31cc6dd6de3b6ad63a494464a69e694d278b585636c25924424b6ffd2340dd3b0ee16757bc78009efb6714a8500437d37bacb67c71b24203d73385ff61b4bbf468bcbfeba491673792d0915cb24b5a6d47cd8b8ae2926521084950605550994d31e614b1b256eecb8484b01e78acaa7b463b325419540db53e931e2963bb91fe0923d4853bbc9a9043e259b0120b97106b6933854f693e92b372837963b34ca3ab32aefcb35248627bc58196155fa900c7d274ff2c98e96c3fc10eeb017f9bfcee5458e89b8c1330ed2b93c566f7859562e8064d93fc4ca98485611962d30a02c34c05264f812a7a3945d85153d5934aa012606262694b51ce68b74a0f12e4fe35f9659965d918f5aa4e222bd85121cb92915b1b9714252aaf105c02f62b329d12981de66aa4af58d94a20c6c2771ba9998d99fa35d2fdf272aa150483ea994c7668923934827a40be40b1e8e18286cf6d6e3ccc7baa671998068c448231482c19d34cd596d60a2fd94252ecfeb9f681c665d5eae46f5e9c5eb7966d64bd6c30e9ef540443e2a4061073f251bed073e256d89d4a1d4da50a821112814d6063bb2093d9dfca2c6183bc6ee9e8d8a54b20df40dda2e7d9d919ec243bfe3db3cd6371527b9c57c7afb8caff636151f4df9414f79798b4d4ef3b75a53f18921b522f695bbcd83dd46b9dc39674cdb94bbdf6450c9d40626d95b8dea294e9ae1f25d47699e4e3595ac2f07864c314ac5e54a25336c930cbfa5938c61da43533e8a4a6c0aaa405483916e1d84134de153949d9393635d2d594bb44a48419e77e6a6518b780a4cd08555a9888d00563ca51dee8bd8d01fe094b2b7190092d24e3fd913c2c2224112e1491f6448b23e630aecea89977f32895c22230f50b98b3c40bd4e2ac944a675df8ded24b462573e52f589526b4f12c74922ebf294c2395fae759973269139383e8a73c6731cee9afbe862b9d09338dd0c3cc4ea933ff111ec27128752ce719ff20f01a69862552a62a35921d530b674d2061aa469c13f5830be7ec0d793bf88315e31c618238dd12160dd7ee232f044539615dd843d28fb7d555cb1843c6fc7469d6060af1cdc92bddbdd92d2822a7ff1cdc7d25035a14a0555d2c26816ca5e23592abba45d918fecb5d7325c24860a3fa752119b598253297b1b1a4ca59d9831d99e874b9c2a9d784678a7206428a1b081939d36c223c917f46f577bf9028f4a64f8da76b57f9aafa0ccc3e15045539936e1e9a0f274340ee502b5c20d14fa24717cc2d544926ffa14236d898383d3281f8d60e9c5db424614f2bc974c22737c2471248ecce1c286b278af388758994986917ca94f4f5c467a94d39a716aebf57cfd24cec98668d63a8e00c3154ca58c6637db9112c75f4f4f4f9fa00c7c4aad15d1187932f0ef0d1230f26670031388ec005511aa9e0c7cebc753bd159c817dfa5006563efd8a450cbb9c00a92bd815a9f8e7e0b907c74c320cadb80c6ca8a2a9a6299892a62c75b20f8923716412f81225a7388d8c54025fd544e6482719ca2819aa3a9aca2927bd2a9ee5ab2271b2c491381247e2489c13465972c3185a433f1c33d74d7e008046dc261aa1520818d477a38bb63bf30c6631b33299bd4ae793cf7af1c1e7af1fe5b6ce26d3f7cbe5dad5335863b532995169b710d07c6dae91f6b5b94b74ca2f8581c6574f06be23e1372547c26fac54f11174c1b076edcc69bcafdcabe0ccc0d1a4f2f1914fdb40710c13286466fad3b026649d934aefeb7aa2b6655df22f4c67148f3798682e91d5da82e975f998eb024f908a1bfa3f1acdccf86a460f171c7960bbf6f18110c61dd84bbbc1b3c65d110424259fa803fb34140a054676e5e110030c617838560f87116ce7a9559ab5d6230444dcf0728fbee1e56ea2d33af2ba9eb828952814aac370301ee97a09997078c4b3bca2176d29236aceeb09f9374a745a107fed5ab766f282fc72b8f3dbf985e1f69bf97d3d81cdf6c132bf5c922c2f28d79af9ddcac8f2da5cb3ccaf963bcb2def95eb96f9adb9e58dc9956b79b77ce5aea096b7255796cceff469c9fccadc57de9aab4be6d7ca2d2f97eb8c4c5e2cd7974c5e975c6132bf9ebb86bad2c81c4a1227595e965c631eb769590c68eb8c881c8c5c69e673844644678add089652acb176a789f8faa723cbb0bb326cc26a6fe16438caaac683bffc965a0fdaf2d69fb788fa9896437514ca474ae0cac90a9bf3bab09b1b1fea83ba9e3674b835ca87b60f95abd58afa8c5f8945e876d7569026e2f6696935948977257dda29b596497c79bfabf85f71195ca5218da3fce64673db92f6c0490f9cc43cc97d6bf60bbbbed75bdb122973c7230f9159faea7a02662dc0c97daf383f6a3d2666129fde962bb92fcd0eb51e5162d1f5fd128b2e8cc37bd77a5c943ed63d28f61518534ed93d139f524a1d2564e6f22b17f6958f9ccc9e5813ed4e2f4b0b7c78a03f64081fc1ff89d947b644f94d69f58860bb7823ab84c2822938f9450993e0f84862f72bfee3ab78936f6ee28d8c37b2642f39eda9abd03e34c3b06ff9cc7ebbfb8f931c5bf1fd2b767de5a32b9693d8af5cb8beff482925867de53fbef22bd753ff196265f92dc5ca95ff5c7e139f581ab8b7e273ef233e8745eec37aeeade7b8dfde07e75f04f41ccbb3e0222cbfbd91d2951d74b123050756a456a54ab2cdb212f9e63f9caf566d8db0bfbd5f8e8a7c5d2bf7cadf08fb2b1f8e98807bed4db0bdd5deb18feded2b027a96dfb6e7ae0693ecf8e0dee222efca0aaed0e021bc198275245108f68666958426378f99f275e311256b952fec31dc6153f255440e57fdeb8d6405ccccf85bd971036a6ab0ec7a22abf54a80076a071c78eaab73091fdef94dbedeca17d6c00fbf89377ee3a4e747327cf52ff7a9188b1127c79cd984cf7561f61ba7bca8948db6353d0b150dc80000000083140000200c088543c231893cd1c4d13d14800b7c9a4a7a5a2389b32446420a21838c3104104200008c00cc8cd036003ccd339e44376cfe93b1696bb9f185f35d84a122067b431d90f316cebbbeb8e00aee87f289f4107256d3c717fe4c12d6bd95e4401e406181b650fcbc7d385ab8abc9a84daa8844c906521914db6cb4a212ab820ac27e8f69b2931df038a4b1957de18007d6d17cc939f524fef4f9f7b85346c7857d4eaa006d2506cb1db6f970140b5f1d15016e2d40c9994f3d56f4135b4dfab95348ac4d4e76d4028717483f1da0171f74e8bdef4e4a36d071d228a9b812d1036f16fb812a56ae230215a89efeca9df189d16e6a328aea29a7536b5bff7fcc2f0900c9d44dd4ac479bd93cd48eb8e1386746559c4efdf803db2acf618f0549c236d64836105fdd66a18f6a66555a905445632fd98473f27183ab736e3b8454fd9743141c095ebe5084b8955551c79c47dbc3989b46e2dd97fe9e22ba6f2cb9e421da6ff186472bf47ac7631eb54295f57e00242295a7d1262eeb36deba32ddc51c8dec194b4b4716290ab851fe54097ace2bc75d7eb14d0b959a03cb8df0efb95087ac45278a965b1270a0bb5e1474091a7df740e0c0845e7495b80741dffbfe99982d26e40ad40815db4cf40bd37beffd9d8cbc7403d33b592f477a43c4a0ef41fff140bb526cec1399d43273f54c98c2c79f4c44de71ef663fe8f78ff311236e3281defb8b11ff2d0698fec0de913537600e48c4a087951e110840838eaae7da0c7f2f3e4a2fc035b4854569c37acfa26f3a4cfbcee368bb0cea984d48913eeb5981621274c98fc536c47e786a06b745fbde0d45fa152e65faf4b59319c56a9442de5be1c6f37f7f295f1357647a04f4d647c64d3f30fa2cd6fbfdde97e969eb9343a5681fac08cc2034c7be68a5e0369a474aec489ea831c17123fb015e729295c344319b8c3e4cc55e97815658ea43e34dc42ac47b40978a81825da2dbef87edddbb1ec3521259bf596713990c569e70b6f4fe8e08879d4a102036c08ad29e508a75fde87ce6d2c46ae259fed0e83305f498dba3e78b0ffa1e4baa6acf237a722c56bd6cb14ffe7bd7940555961b6a4ac544e0f313bd44a7c0efae162ff859aa69f82ad08b12884e07ce672c69f62e9252df0afed05fc48d416146514ed2fbe2f67c23261f681238636078ef82a949499c086b19a0382c27c06aeff2c50a19b590668ceecc1daf4686d825525c29318a058f9c07237012c8dcfcbd17944bc936d2487d71343ce8c383ccbc0da7dd9090c7daaf3be4e30ea0482512b9feece54ca234252d395b14796037c437497e37d9cac3c8654d6d39002e1b0c98b9bc6ce8fe72239662d01065feffa011868eb2b7e62812a8d3dbe1ff33a93f6a50d682f605d93c1ac4abf9251682f43abc81c4b924553435628f99d88fc07ae2ccd23459c5de7d3d025a38eaf513d6dc71e28099e871086f50d66aba88ad14b981c3ff96ac03c14bdfe6093fb6a1e743c90e1b1ed28a8d4705e89a324186516eeb0c3457306b5cb3e16b692d21eb56523997929b7d12acdd4861a84eb6b59872a4456a7d349d2b8c8e8f932fc659516cf5d94ba449674191ae2c791234b06ddaa415930c32da730a4936a9dec303aebdac5817cf391cfcbcf5be946d4e21df79f4547ffa583da146992a2c8c260bfb5edc37db08a348f4732637ed26e68f1cd5fe0e3ec62fcbe8ac1bdad808fabddabfee36d2e85f3ce0e6735a5c3787a8a731cc2b0ea52dba27b2671965689306345d910fe238b7c37ac13304e32dc793259abc9a041173bc20bd7f8bf7232834788dc35142706fb032cceda17fcad6c7ff8e5d79080b8d7910337f7dd6312fbba12e2376d830c20e7f9809a508e6c15fce33e04fd3707f66eb47bcedcf889f4ade24155b2bc73f9f8cfdc378dd9fe218acd2b16db4561fdbb5b653b41e665709410e65ab8403f875996e92b342da9b6242044000542ba9cf9250a692ba1d25ad62e5be310288603048ee2cc10ca61a8def575bc48f6fbbcf16f30bf00a079a935e32d881235d9d00508ca4aa4d9d0601a63495e09c31c634dcb08fc3f0b391192af02d7fb827496786b81038289c779b40e27d21fd8b63bb6e41a57aabacfb7ffd75b45d030d140daba2b04df9ced59c9aa2d69ebd35891110e98e9f7414d7fc2e2767bd3c649be9a80b22339152a002f7fe5893d6b63bc434e8dc438f0211cc93807d84ef561062ab9360b309e08857b8b778b4068e28d4377322fb8ba76107d8dfd2c3985d7fbc3595c6df9a4fa715db281000d663b6292853f1153d8345ceb1827a563d5cef4f9026e706cf1a2b37b0edbbfecd81f6e9d550ca96c9d5afd3504f1e06659466fd7dd943c2c504e61e17414f770770cf0d4ae753db809ffe5329065bd61dbe3620234460c4149d4561d86944549a7a8042244703b2299009ff5bda715b26c97a9b9d1ae8d2c3948b1e9ccd58bc6297739bda1a0e12de2386aca1f4159be399620ac63cd7cd33594183183bcb044c7f340ae25a900ad7d6ff29db9febeb109228d0ab877cb3cab531074b85f01d527a684b9e13fa06782db297bcf3853dffbd1cb1ad0c3eec7d92ac7b1bb2a881e272735db164a02e21177ee70ef0fa69c346a6698018c2413cc4e0cb2f6e551f3c7491897f4c403091b00c7585ecfd9bd319cbc756c50314c3546ff95d886343c35478a113149e9b2c45305d0954120fb43384d92cc66a69468989417e8aaa1cb35df0e53db1c0b67e6a28432ba8ccfa4cc4d2edcf35a3ad601cb04d63a895d360b9e12398752a8dd3a35f82d23de854ae72639aab82a6b981b5fc841a2981149cecfeb7386d29b5412c6ed622dbb71e0b5d3376eb46b31f1c5b25722cf550faf62c4dae797d98b16091f88211a51da83bc41e297e2a543f06de8dcf843b9f8a179c565e9c019b49288c12c116f7e062d66c28d487e104637ce490cdc8e0ae32c6dd94e451eb513a4342a91f066c74e54dc29871889e10ccf3d4586d7ce03759cfe7ad8181a17c928fed7ca2f6574942a41d1cd4726fbb437e428af5e07c56b24f1a4cd0a9df9b4e2dc4c323d4cfa1ce0e2f22b104cb64fae488c8082a3f48fce74433f9f5286cea0eb2e3e93986cb9083ad7588ec2f4698d2a01b1b2c1e826e8401bff79d6361f79564218c860b831bd24e49e5d022347d47d97cb205be3f0a4863f579fd68d38f541c779a53728c759b3b8ff8d5cf3dd0949084125afb52887c12e90e1178785ad5a992818afed3a0c5a4b1cdb8ffae106c01dfb2e41327909af3579c504c5fd768a580a55bff2283fb8b764c445981e3314008b8850b2381211ade9a706080af22d89714eb91ac5fdd6096d593723b20a7f5379b0ed19e1da59e4463318e8685ae29ff3777730e31eac47c144db08defa42527533c6d0f1f398a844b59f43e648d46dc9ae71ccad8cea7bbd97ada29f77be776adde08a27875eb58dd47668ca06aec93ebd7e6579f689b76d74387786b8fbb8cff1d3ecd3f791ef44033515430f120d4a6e8c20dcc49617023fa6bafda88fdde899454ac81ec595568ed7025a0ff42478091606e1baac923e585f9616920fa8068962bf062877bc0422dbe074c458b1ee510a0f72c069e5b922843af2e573d9e55076c1958cc4fce9331b8e3d0e01ab97f11d793bfc96162cd58b5c45b1a1c8227437d8ab137c9ed96243decabed41915bb3ba32dfa15c03bf0eb4017bf9f7fe172892dd7e886092d4a1f8f173bbf34dce5aa4dbb3b1eab087d65a08980ec3c128512570857e59d3ff9e945bc7a060d6fc4232ce742f193518658ca2192acd53cf3b943c593b6cd09306cd599eea16dd03c9a34aed1e91cf0c83b31bdde9d4dd36ebeeb46fa91882ef63e06ff64b5d139d80b2816948cbda8dd4ed46052db4cc5a0d0157d9887685576ed07918c606301fbc0df194624324917ae76fb6b41a7ee758ad50ccf083a37e430459800c5b4856cb61a407ad05a14bf15d350336f235dc3a50dc61cd4134aca17310f2f85cfb5b2cb3963cad3877ac0dfbdb9ac7e472bc346db870756380e261b1ad1b532e650ff63b3ed83b9279131388159c59723730731c91f68cbde9ae3f0cf2e1aa4201a0e645766b002ac0050125d57dffd4266cf2789fe8e49d85d70fa87885c702b7ffe24cf1c9ea019c8bd5b74fc33588ca57b252782195e3e5aa49fac7159e53815c7f193e9285333bef84bfed6eb2027a06a94715f4010188cd0114f62d30c68801fbce16162695a84e5f294e056195e831adf5c1999aa0045c838a38ba534d8db63e37c22a52f6f764c5dc67742d69ead752ba1aa50e843d6084c02a96696285598d05a10290d51a7844fa7a69fdc364c6abda685906ca2b1e4ca5390b5e465fdf0484518f46a36f342854bd7e4b9361004f3340c4d340ac1ec0124011e19ada2cb6091293d348134e2862606c505301186d19f7f4c4c0794fee2dea013a4ac8ab3f7a1b56f70502e7c91898d942054a54de71381daa2dba2fa24a42d5e1b42f60f563216347e1d48d486e5490386f25b759819ccc14c7c98a635d0ea969ebf0ba54c547699b06e576dc79797f6bd47e021755e478301cea1533ca41573180307f1f91008cfd5a9bd555078b6cf29cfd295536aaa06af710a7deb3ca86c0f65c86ad57950dabe21269c58f602e4f1c7463940d45a6e336f55de524025500b15b7d02d42b29f4d835bac3741adc71ec657f89b2f28a513ada57a0748767c499b259591a89d35f3630a1c31243e8c21088dadd5c457eacd75ea4ba7cf96dbd7364e361224ac4bf3fbbaac86544d46783d6783562bf3b5bb4ebfe4b34f079f00a82b5f5ba7bc91876259431b749b449556f114c928fd9e018ae6ae3e2032390a030fe1bc603345976958e99cedc8d627e0e53946ed80c63cd215a09f7e1d1330b5d03c0204ed329fa632b76e60da11e8816fb45f686faba2ba6b5c6339145702ea7b7dfe0181249f6a05891e3567348fd0a26afbf681611da04b1c7da1f7030126f6be3c45b91ee423183ce21f02f353e788128839515a5b4abe1020976e24ae1e1df5c64116a6d527a52e6db34f13058e8f61f4fb80805f8547add7eb02b1b7fc195fd8cd917441b99d523d3b44bf434809b0512fcae7650d68cb2e1c315d322e9638c5bd83fa4d9e551ef7f4902763828c63343fd0adfa10b1fc58b183e6d90374d6109a57fa6c5be87bbc7f38dab83bce2e5a59b67046dff7dac578e1a662546ef292e7b7107e693ce76d62c85dfe20b7f19b5c02ad5b03e87a1aa793d4f62d941c41df8752bc8d1792c46f5e82b59cbb35bccba28764af7d921805f30968d9b7fe1b621ef4429768aa0d690293567ddaa4d6f3c07dbaa927f8236d30da85b9c21ee0c38348bbf6c8c307696c4e285c1135918239de7aa1700554d89b1536aa8dfe811a54cad10e4d6720c9fb465dbf98e7ffb83f90fb5668f01a4649a3be32b19f07322f4fd86f561c6f2e2ccd60c382da2c2104a51a1781d29c496397371815078aad86fadcbfb7ca03251c6fd781e0b04e9b378faadea59c39750a3c17556c87455bf0852dd12f3341443b2621a2419ee6b31870263c8d72e63d45d32e65b8535965bf67210ac3fc80383082a927e0dfe142e83781c76fdf3bdad0e12f5c391fb334aba28899e7334df562835ad01b91d56eccb4cb4ea4808e953904c17ded6800f56787d03fb6f8cea1fa3787f35e2f38109e8098358dce72a12da1750932ec22456cdb3dc9e19fd0ff45d26ba4d8fd9169c6a1494900fb96e3233e6c95550aca4ff55963b8fc2f58a2c651ad0ccebc3b5f1ef072bcb532f03ab6503e15f931f2d639f0688136a5fadf0c0d455233430d4ca7340ca4fa74d2d7c7ff041808db2097ff88f721ba9bed06008ca83fe77cc1dc0572342064306a6441e0b055fe69a723c3d9309a0a61f940f7a6fb1cba8c21450dfe4ad67d22807c586cd963773d8d07523d914e409b92dc5740ea4b35b2a0e351874d148aaace14bdd5c43565e5848886382b034283c54de1206c11764881d585b9d4e0a1025799882489e46d03e2c855793e603023c56d175345a201355228ba5103a53b2a0de3c2e0b941c7374ddb48b60843938ec17353dced8f24ce598eb77693f4d6174047d18c45fb7387606051481f0f982a5c6de17ccd6434f47f314e9c01f586b287bdb796ddd457628b42ac2a2ba0b2ec1ce7463b1c1b950384e6c38e961142f8c3fd870b1840c0281268ac8b8d0e719a9c76dda6a60ee37a44522bc662c603f442908bb39cb242ac4a6a06ef5316408546085a70d97208158e973186d00e008cb1c4745a26275b5d4188260becf1dd0b6168e1d9d15dd1e8c6c0160b196f5960fbe0c874734c4380af4be1236b19edc12c8fb743ed6da680450c0cc0a20cc72438004d2a0c1b10220e6720474b44bf73a67df3d5c75df692c1974bcd96ee7774169a49af090ec3690a226e885e1558dc752d9b60e8c8165e0051db42688ed2ba0987855d4154b83e05b03005a52cbca1bf26f9d93389bf1977ecee4e710c6a53376202c65289962528d64e5ae2f7610be0c05eaa9765a51cd74956edac0ff366aaa79d82c567587044c431da21e91e85675813be1f1b26b8b20de42c73fff97f0b36c04c61309ab9b00310ec18db1366cfb64d30fd374189eed4a52f1b5ba18d470860a08fb17ff82c3dbc0e489c8f191cbbaa43c319911c1bbb8c8f2c0a47eb5cf6f95b2ce85f647a7e02a220ca2e1726222455d832d01f646cd5623e23f4e575a4b75a3d752094909dd1c7e41d26a8a86abe86df644d9a820a226fcf7622ffa4922087c486164abd0ad5802ae82c5d7dc924f9f7dee2c58db75d4f50a54eba7a8f8cc9c56742ba9cc87b9c7eddc660587aad1ae40e828c330fcd9f70484f466d7c6e99681d1dab0f3a98a3c7b6a29cf2125024df55e1a78916833146007828c750cadd945c78b863ede58299fd92e2045cf8a2dd265aa0292a4f35168bbb0ceb6532468cd3f8f62b4bde565338bcff29ea38d6b2fb48dc5720fae89a17287f5e1d7131c07b578d25f91c9ecca39589dae3d86c75de3f78fe8937532144c339db88e5c3103c1dc74838c96739e607ea0132b659eacf7b8115f0edda0cff6fe60fabcd809efc4bcba1b3f798c19e8c6ce30d0c794260f9fbe72a562cef7db99d019a3a98f60b468e8f8b400adcf21ca4d1a1d5d960802bdc69d8afe9f2fe229abf9d0007975bf29f8508685ba669d7ac04f7ffa3c0afc645013f13be828ff7ed0a27513c907b04f71f120f7fb8952668f8c0e14930f851cd488912f739f5e25e4e0273ea2222809ba5b292b954b0e57508f68c200a46e47bd269a302a1c17de04a01ede1e117c304b82365cf6cef65eff5680a4ed602c1349d776811e510c2b119f61ff75076691f3d1f1fbe6d60daeb79744bcce3347e6c1774a3f085b1c23326a215ed00cf0f1bb73212ae440768b2a6c4004db7a521776108d896abad5003128d4dba0a372c064ee5872d0087543dbbea639942bcf079b9c6d9e9407b7dd91c608af3c8aec639de6d921e2a8a1a0354a9d46bf8d9922df0014db38e61621926484368f8bbc32882a2419b579990537c6f61fbf79198930332856cd9c72faad89c14154dec46d9fc32888cb0801f6d1ebe290799711a0684477fadf285f4a24547d09145f796af0bf49a92f282fa28e1b74980630e642f096b22c49dc7ea638eeee0070c3f8b89b632492281dc87fdcf61aca332aa7d0216840d40e8011b2245ed9897be02e44eac9babd4c0a25a7b279ec3032ff28055485e8e38f1d73562a4f15463bc08a3c11c6d585dcca06ebf331b84235fe57c904f77a415d2b51f9a8507ea29d2cafaa133a393a1af1f0b84c68cdab8ecf65dcd6ca1ec6f300bfb17aa2d231d49783318ccaa358fdcc999d2f209aa7e961e357da8ff228ef8573b17985d72ff11e4cf12c45d2a852dbd82d7ec3d067781003aadce88166f556568a0cc7e819c729020ac132a3a871efbf1805bc0783e1e972c87409cd6ccbb7169d99b78b51913750359eae21a683cd0b167bd681c740aaf19e980ac9e30197f8ec031e287b1542fb2095517644200d41486d95f609a45316454fd6d125d354b5d3337f9b0a04b6bd1c95cede2ba89df5a6e5608f1100e7dc1daecc88e0333e6e0835e0614fb9aaa061c8b6e0ef4f31fcc69555b4997fb7786bed247434dd1600ad2a6f5c8892401c817dbd8736d2342b06008a14db4912e4da57369f0ebfffef2e0476bf78c28d279ffe621d52320bce587bbbb0ea90ce87fc2637af27fe2d335ffc709ce7004d5f5feeabcbd92e8c1488656fe931b6f9132c8f08fb90c9463a0762b0b052db9c466f86da18ad3146e93269c4f68475a580a1d39e2a2e620a43b1b3d43e1a4b0e5588427b693f021da306d6bf4c96000cf1a8849c51737b00e12c6eff1c6e0185f20e57c62ea7511aebc8eec177742885cb73d259a2ca38362c163752d73804d43b6c2d516d2d749c21f7c77e6d05018f44b16003e6c91f8748dbf9b42f380cb1935816ae8603ff020e9b42b0db0cafda1752c62e78d4018fff863602e61a1224e46027002321d11155a736ad12dd0306e700101e0d12c070cf1c24aaa9a8ad9755fa6043718acaa97ef94758a12b7c0749987bd0efb474e8d45e975aa158b9da3dd0677f67be08755f3c0b312c00bca523b664a3f7e6b39897d91700e6346f62f75378799e8ba92df9825b6ac6349fed0c16e5b00cf28a3b9f1a51ba86357981513a4312216fcbdd36749c911cc7b88e9fd51104ce49e22a1c07ae0e0f42c10af7abe62cd599c06e54d260e47237556ee6a3f348f11fa45a2a0a7b1f64c04e0bfb18c3b90880ebe1e1efdce6cc8ce190b3170cdc9e98e1a006869dc026512d8099508bc6c6b88ae638a326b4bcdd744fe3480571224dcfc24b2b71c74ab39af936fce911038627d70f2954b31f6249ee65a7161010a949e363184d9e14bad704b52404fdca547a8ed2c6463442c2bd0ac49b758198b28ad4e77510d2e67c02e9395569fa509af76bb4344a636cc1ec85bcfc5cc354c2ead4566783a93a6b30f59d779b0ad6510d0319dec22bf33e270a546964f4d99f960619482f6c264cf1e9013b714ccff56429f0051a81a8b7dd60dae9184a1bd06ddd687eb418204b42a7d480378c5fa67028b6c3e46090cfa49d10316a538b7e1117883f8b0efc385078f74d15db9dba776103787bb3298c1704cdafd395eb10a5b7cb10bfeabae4ff75d2278a92134477dc6e16265ff9f2333cfb6312b056fbc497a0cde112bc16d14661d4c482c286b1c5a8ff9480f13bb30cdff0135dbac28787efdaf8ae52e629defad8d07310dd77b277f5475547643e4010507b2033b2336fa4ffebacc7e1174857abb83fd24acc77edc0fc000dc069bff59d2be3faffd78a5f7b36018db21530dc89299c1f18795654bf0c1e1832b46e2ba9d5ef44e5daf8f2ee1c34672b817f1538cf29132c48485f30a285942a28b99e7aa930e9cce8dc07dc98630598ee4ecea9eabb78cec48b279cf994ed48e009a88ea5bb4849ebb7255d69a7c564f654e0cf1155ca56d5c13356bd15da30a90340125cd445eca24d80cd96eabbc195cdafd33f4e6db7facfb16c978701a702aa920f370e22efb4221bde84575f162990b4aecedcecf2704df8edc1f3ebf40c6440b6bdf0861a712356ef5edfe896e3a4eed6bb9c8a82f74cb5ef943c1127c5bd94612ddfbc45664969aaf49575d0b79018f965269fb4dd41f258339afd85f61a47a8cc34dd58fbdd98f06569071c5f542c607d9475bced1a13447dcb62f34f86dc779475f2c6a40c6e270fcb53eb2599f6ebd357a6605e4bd3f481fd580ddc23a347c5f47fe769f805252f6ada3f94894e6a49bad7c9345ae76963469bafe77e103b12e09a9b95a7a70fd7a448c7c273b38e936bcccaa488a0a8bff8a4d14e079842f1b4e409354120b60dcd5258d4026d5597493a9e3c749dcf07c97ecb5f2b1837e6c55981b01dba1ef94e0de74b0407db4b9c271c5e73687cc69dde3f583159bf3ecbbd3ef719a7d43f3bf2616e9a6b203fff8060fdf41c8279d33ab6af9a450b8864246ab14550e7743931192a797c7f824cefcfd56fcbbc2a943163c8207a9eeda528a0de8ee84e14acb87488092d3a7d9eb324048ac038d6c4c490c5a36dedd253673bcb1fae77aa17d1f250682c0a0081a105299058094466c4c5903b12f434a13e0c74c7d754180592c84299216f878dde9fbeecbeff0e02281c9b39f0143d9e9044df8d9c1cf061404039d562afa6bb76b82ac4122f91a2075286a82a96722b39fefc072991e41c8ce81f2a91c5cc6236acb122bff5a976065cefbbcc9fa44811128093af2588b1b1a0964f3ce93713f07ce3abccb8a81819416c8f72aebc1cd90246e25a54f3796141e438e82fc879b51bebe8c4c929131124912426484e4e4e9d902e0129017112fa64f2c494c9086a117f8718e4ccdbbf1d2c427d46c1ae5f340a51c5eab35bf0f88eeadf87d80efa2bf2b94dc0b4278a12609bfccda130102b11eb9f23778f5856bcb695cd23b9cd0616c4ed90e5ea52309a754a7b7acb8e232632dff354e580626d8047670f527fbb2609de011a1610f03025a5b77d7810115d8c119fc44ed7f2ed22d290836130deeb9dc9ea3ac04305406408df843a60d62f700df9a2e2af59f276f2341217757397567d4f602233a3394f26951b8a269263f2194ab7cc0094e18014fb42b170dc77288b55fe130deaa40f04bd115ff5b17038d8490a4110d1930774264774e2e2469a5993ed3f83b529cfbf6a8d1fa54375ba54c8b1a787e6204d33323bc3c153106b0ea3306def039169999e484d9fc1e496a1b759ec562aae3ac1621b1aa374e98db06cf523c9605db9e5d8108697cbb88a511aab0cd7a7e65b9738f43261c8d11117a75d87812216ee38053779a5fd4b9886e40e2474151b7f542cbc1a80872db3c72c1840a76bbb2c3e4aafcf1d49e77052157f18f4606dd3b59241a21c97ce189f20f3d076810d84a9ad20f2f5002eb05561207b7d64172fb5a8370ced07fb7b318762c6a5504bf7f7a2f4293835f0f782ccf23def52ac6a06a21ead4a6eb174f0050a50d0b804200a252e978be4f901f71a562f12c32527102e0d8d40687571696aa9ed4b552019f23b18b46e246820b1a25bb226dadc4c3b12b8f1d1787bd1bcdfa026826d022baa6b4c29d04b8c57cb52fd3a501aec16446962fe40d670e9407fd48154d5ef034a15c5534362ffcf4982e4df6e127367dfd791a62fb3f6b1de09daf2d3ca6153940f74c878479cb32549da4cf89b11d57de736e56fee340a1f81b7e0e00f677880d4cc501d0ee0ef721971c54507ef47a51765cfdc1912162c38bb7a40ae97a9b8eb6322c71d60506475a1eabf97465e9d3e1334e6adfc010e10343ea2c0b3efcad4316e7a3cdfc8691b1c567c5d2aa27f716dc37ea1760c3389ef794e3dc09bb5c477e2e88daf29a696d8cb202673fb1e1a8167b5c4553108820157c1a5e94dc9ed0c2e3c3f098927c4c823baec71d37d31342dd18e07733bdc6bba65f0270b4cd01616cd134fe72d54359ae7cde68b17061bedd20883b952a9596a4e47bc9eae86cc3eae4841b944c321a0335a740181af93bf0f82d38baeff3ea1a776702f8981b56efc91c7e9fe8db72f4386e2858d0849fa1d8ba07106221a472cb4fb5daffcba325aa831803cc9077ca543ae7f272778dd002631d0ec7bc01f87a8e7ec50062f6c03a455065a365e4d6fa3edeb76fa0137113a3a704249520ff478e61e4922ff7896155e17b9df1ebe1c9d8b89c9d8ccb94d8d48f0b7331809d943958b9ae922e8edd9eaccf06c64130cb07221840f86ec613fcc0375339916c6ba80528755774493987a75cfd6a3a3c008050f396a944064947cd4b2818946c39015bbcbde550ce58c251ec047c6a997b809a1c6cf688dc34e34de1435669da7ab6b64481c4e31209bda25d84bbbd3e895d0e48961307cc92dd36a82b476f25bc4de53b87a2c7ec41a99013137a8b17c6b8667838145b5fcf4d95f81933f06355787ba303101f0307ce80446546a7a71858d617d1c7122a740d81a47c84d40ba74c4d7e277e074d363db62d99910c0fed9f1dcdbc46eec12bf73c8e4d65ecc385c0bdbd1bab22000a54a0bbc191fb6f60930079e08b6715b1fc56444e0e71c4ccb7c5dde2d1adf4c79dcfac45ea7447d8408a7fb9d75410e17cb4323850c286db3abcc54515cdb9934e4eda07a1ff0db321558cd4264993664bdc8306564b9796235ba981ba712d1c2716add38c2ae7a980a68d05e0ff74587f351a61f67e69afb365f1238d8b51c43ffefa3700a02bc27e42444671c77457674b4e6458464a05aa6ff610ca19fd6c0e588c020ee5f3c89a5b393ba5dc4892c23634aa327da7e7b666873430dc54df7b07ca921ea750ee1b3b23dc43eaef258610103688a705976c527f2d98229e4689d41940b51731b37b56e00a4ce8091a3eafb465cace88595a46ae0c2a3c645c0abb97bdc196cece27970a6e462e85d1c1bf5c8028cfe090cc6e807d672a8e862b029e9b611c1a345ed75be9ac6238ff87d42fd5fac810252099b86d90bfac57d59972173f6c9a2c46dfcd09855a92fffa1b2fcc16ddeacf3074aa6094c3d31d653d887d03c46b363319f042b8484c60a4c2410af400551612c220f240afa6be3e198613c01f6268dc0bd60a2a165dbcbde174438bc873e52bb2f4fa8b88f2b2ee31e7771273cc4db7ac7527ae08d04733056623ff9b437e2040615a5b714a30a70012105bc6d946e20218db21a84640eb9e63907ca9711535e0765f793fb0104fe8440c0fdb2e9c0fc0836b981d318160eb0a5ede666774d46bd2bd25dd4eba29dde4b3a0dc6adf5f31837f9e8e10c87b913f0c5daee3596845b9913bd2e1231c4c65321c5592700a4339e9e2f93d37c9a3801892eb6818546ad41f9fd33cf7cefd088a8c3115010de1a886c70c6bb50eedc0f79ec8514c42148e301ffb12a40a0a24d4fa657edc6d7accbbb7d6de092f99cc1498e93eca25e868d6e5a7b34592c08a426523488aeb3bd1594785e406be34cdf05e09645fc5ed8f9dbcd0fc367d839298f4cc4e4cd465243aa2f364a3307296a3fca6fcf8d23027f7511eefe95b654c7f6f82c3097134502c3321b7bb174d1dfd0548077265eba9710e9a8cea3bf3b06e23b3a79442f727457fcfdd1a93ecf3916daa89239e6d037a432cc92a6b3d8b10b6762280a7b196316bb28683b58213ec77242bd71d79efc48f8d4b56a40e0a9c95c293d70d4157025dc98268f0990ce69c31034a95f627f4c0f586f43455c0cc101f0e1ce81adcd2aacb46c0682f72622aa6367e5ac6d14db9aedf6451db5061e9a88ad3876019865940e72516182ec7d165ce9dc7ecf0c735ff6283330beb2b9f278cd52cc9d3c3aebc88892c4a524ef19bfb708d6c1002b0a64103e9a55205522daa781893abd3db3fcca50b96b42819666f4081ec5aaf96d98f771b554f5e1aa070a8640c4a7f800e906c9213da6362e28bd2039249290bfab91937d0d95b9b7c9104154aedec7889d055928836dd1cbea24d4aa5b452f470505e7a3dfa2316d9ba74895d650965ef6cbb8b3112cc73d64c2b6012114c6d19739cc532604d10bd998774a8827c4dc9d8b1e337faa0fbabf880af7cfa2f418efbd49b5512cc553403e4b39139e8984be5d3bd29586172ab836303d77848c5d17670ce18c7e9671f1289b6edc7ff46cc59a993cbf012a668f43ced10d50c2059e76a9e2ea26cf89d0b5b1a8184cc87771f2c17941998494ca7c269cce3fafa499a627cc90149780344ce5fe0a01ca3f218c0160aad4f15289c854a55a2ba89106f804027001d35c33e0f8d939a0b28ab58e979d7e80b9c63b344e170c20cbf7edbb9c4e68583f6652cf416851c0b30a1f93a2b1d3fb61122310124e8a704c23b8b9e740c1a10400368650a82ee2ac27007bbdb7aa8d5ebaa85299aa8695c4598c9cd1529520d7dbb56114f1a2500e7b2c8be8f63dfd5e4a654ca4e04071ce00c88d20461f8e952fa4a5eec59bfdeb609f8b07a24adc69bddeb0fad35a6143409ae3eaa1b640e0c4100beda89fe85ca61d8084c5de9f08bd37fb3ec910d1c62e5579c9a09a4624c2bdd024a34305c537160ab0e852dd82073372dca967c10e90a6c3b215d89837cb874cbc1a5412c9c1c80874032a1abdc32e64ab1eca9e44faf15a24068f231a6dc17087d532a189d76d3bbe997e2d20ee247431eda14fbfb74a49e903e7534c4e12acaecd7f0f7708e6f15c8c73882211f856465e132a417b5d39dd4b3c740bb22c66af32a8e9af5e8c51df246a543e406b1d45a1a2d0710aeeabc48a2bfe47c886cbe525b84ea54d74be738d2d630760906585b83ea965abdca1f7bbcb091c85e534641a54caceea9d23ccb8099f5ff36a057a753fbffcc3c14dc2ce4e1c0aed1df3c85032f6cd36012e9c95d67617f7fcd03d7c453bd65ba95477373fe25f9751ebb4b9f48b47240333e409c8458b83d8cb7b8f3ba75cbd2a648a114ef2716085c4cd6d4fc11bfb5260a1fb1f8d1466da8f9c99808a15b85e404eb5a385547e6e465a825dd3487534d1d036d485c98f1c450d2a43e50918d0b2b0f1de9171bf8a664fbfa7fe985f50841e2eef54b770af423d76ae174b071076cf4c80a69fbbdb6fa0994b102dbd54fa59793bd38386976b67bef6881fb34fba2774cdab9d176e81192ce1a1ddcaf3c6c466e5fc67f9a6dedf94c4527b54cda930bc92d7876da83cfffe25e76b38f80240190c9ff34e5d222fab137d564d481f300496e3165122b71fc5d33769c5b974a6917845bfa8432db69676d5b9efc3a07e3268a90484d477d0a64e912b6f4280d706d0bd4387bfef1b002226f8b96362d2fa61fd53fd8213bbc90c381ef3c1a448e48e68d9beef1f6f5f4317906b5655816547a24760980275c13f4f1b4269dd3389bae0eab6468b34e15f0ed304946a7b6b04625898fd7cc61e88fab48032949d468f1f00e1a8d153e852443422e80c80ed014197bd616b742801286cf0f8ddb1820dc29f77870feb0747280a20fa1505e4f1cbed3d3f121eedcdd20f08ed7b93ddd50c34db5b69124bb16e487acb21296768517285f868ea8609b9d8d69a0d04a628713690a6bb844c02066248f691d110ed6a1b3c0719eaa7bfb27c789811aedd40b62442bd81ba108333512ba2322b4123ce44dfd4482403be8f81b42ff589e9ae9d5c3b271a3e0cc2566ff785f7b6582cdaddf13fb5497242765cf1111ec64888263b4337575fec529c505e718256cf72dcf32713818cada4013a4e00f4ebb2770ff08f1e49e110685a2a384c5a8138daa6c120d23811f7c4c70b17d84bd73c90a1c7f8e3295789b50a98858b12b169f167afc5f65eba7dcd180b9067f8d7996fbf8f91d8069bafcb6f688108b2825ba006254f3cc08ad5ee37a234967188ee32b54d7445ee44f8f7ffeae52020005a41b424e6fb2686ff07d1b95f8be6fb4d04ce27a2b97c17cbffb1b87c7e240a0872fca87df1092ebf4aae339ac0ffb0d8777b0879cfd5c6019f396083fb7e97c3bdffd67a0a86f8264dd82fd5806db4a7cbd7d6bdc032359f72614d09dcda6540618c35815fa6286e6491593c1be70dfc8fd2053b665150657182a99b4530ddf57db54684866fe4d4cd831ba406b501d3755bf21a00c80dbbab7b045ffa3263b2634169e7fb4a31678d02cc3de86880e7b9ed424cd5c84419e2b2d37254014b6adaab5913933670b0f73e4dd60a41f4015c9b7d532a1020db7ab58c8f54f6c870313e240a03bf127993e1826317644447da13146f08152ba821e7655f2948acd6930db1f3db4fff6c4dcd5fc49e5f6af8aa3139a24397a1d88a382ab4b97d4ef161c690de6e880cf2f0d00814cb4147c3ccd9a7df71f4aac935c49354ba3a470058afbf3ce3ff6f1710b8dcf4fb009df985bed642b289deb4af0bfb0fa839d65d38c04488b6c1d80a7907c83b001deb822ca4991c5076c05ed7956c75f661a91fc83e175c7b61befd04486ff5dec1dede70077ccc7b8afc8c753710cd0d95db8bf4a635d0590353a57743891876eb68c86c050a4f9f18ec2774190fe69504947d69b2da2d3eb00a220fa7d22999ff4de4645d9a95810b70aa1b6432969d89220456789c0d5df0c88f1f0c00cb8195688804f1d8dac4b5b432c08da7ca20d02c15970932d427a430e56a3ae0e361ad363c939c83544dc4d81d5c6da75cb1a37de90aaffb04713fe272da13416f781747a1bfc0b4458a91fad61cd5e691277ed43590c2d85e5237a10a6defcab358596cc5a8ff2cf0c34e178dbc87e6b151d377b995389654e46a9f30416602f203656d1041b73588f2b0badad51a294498b988a10230bb1445fe8befec3630aa2b82948cf75a2544cf26bf6d4323dfc57408ffb348e8a75c4f88ab3382b159a401cbf9b75890a5885272bdd371166e6bdb87c8ec902ae9093d426b881164bb05050fc7f4528e4adfc3563bfdabf9ce06f98906ce5325f5d2ccb69bf8016b987fe005c1b9fc3f82bb484d9313efb1156929a76855dda7671a2398d242ee37e8e3cccf7afbdb7cbac16416f3b9e819ee1c8664b7d2138edf95f2b8617ccd907ed91df5fa8dac8e0849f65a30da6fdf6c0d66c8967d8dbb451596b46250420fb3db986f79626f06ca9db5bd6e00a4a360caa15ab82044471f84402811910e39c2b35e4b4d25704b41342134a6512a108e0fb1cc393a580bc588876694f31d81d3b7c0424a8315b9e21470f9b8ed3019c5c977ca6ed4730e6788a2d04e6dcf05a050a62b4240f413364775c8d5cff3e95127f21cd8139d83d91b5609cad26da358ed9fe0cfa27e4a551f31d0429778d2b7cce994e10c3be6757db1229ddfb73bcc944a1b29e7f440d794c947422ae1530019b7ae89455c9020e714ec28bdbe8269805558ce5981c007c343c386368e23edf9934b39cab36f537ed973fcf483f9351ee965326bf41c7b0e61598a6cce5f71a8c6d4a6715a41d8ea9703fd09a085e0637748f3737247435b9da365c803a9a70ee24326567ef99546ba05a8b3eb2f6eb4b7c87191f26af7c818199110d41cd3bd1d59ce473df490be7bf1cf23f50f8b5e4ea3eadcc0522e46d04abd17e61f352ac85c00057c187e83b2244e7360728e8af64fb1aaafc8dc3c5bb8239f4f3d62c87d8dd8718bd159fa4df278ce06412c60a8f8edf3893cbff7dc4248c3f96fc9e99d0b3fe660059b1105e06de2b9686b2c0907b1c9af430cad2dbb0000df0ed6f3a7cfe4eaf7d521cc21f6f9f5f1c75f512c1e39b369ae1ecd9f24d3d5b386a762c84affc0a20a23f4796996345a7aee421530aa8cdad5d76d0c94ec440e72c394ca63573f441e3027a8f975de433d91cd2f999cda41210a2c3c83f3dba0353880668760415584fcccda66495647319e3971de999d32fd3a54429c416ae977b2a84b50b46863f4ea5f015e0f6c736c58f14e410bd627b4a75bcd6507f40023cf8cb6ec356b572bc0ec48dbec19a5f2b92e46940403126f08d287581e9c82169af17386f62aeb6f06a7d41184e4d70bf3fa3da3c957319eadb3683453ed17f9e64b22859d2e3fff3cf29c9ab75cf7c20076bf76b732ac23cb0950e9f9d2d76d450110f82f012dc34721ff9b52e2a389e553907f42a43e5a3a697fc9c20566f0a0312da9212205db8b22329215f5f6d85eafc440a7927e4c3219dcdd3c1f64d712fce05091a6a1e3b1a7c6ceede99fbe9dcb8b99ee4bd52b66e7a6eac25ccc3b7702fc7f76b0f7a380dfcb93ad77e9cf782d20c5a30b2e754e7d83e7a3d29ab2d6a544d389283483fe2051a8e6303f87a23f4e985b9e345e640aad55fa425e6663195de50f35a44bdcb4b2f3d209b9f476c4b2ab814e52387cebcff9dcddbf0643246f567d224c35500a90c60977498629e2626a4314ead7cb06f0f97d8aeba6e4f4808688ffb79dc1690e1522035f66a9d982058c9512434192b0d4cc82c46f338c52860dc1ff71d276b8377f23232a93beed9474ba72d2f148cb0ddd4d98be00fa982e78f5985968d296a7ed23cca7385707b7182185fd19212bcd00813ddaf5c2051278a628172ba9664a1a2d44ced4d08ca984bf8d19462f461dcaa4d7b298728b5113ef04897fa3ef20d8b17bf0b698f434a3448e0f4bbf022c0bd9e4a3e7df7448a7ceb050e3c62494872c788f5026777764acb483ee53482dfed679e0f34fc10afc476ff873815002bddf437f16a60c36dca59abdd818bc3d9894b8b02eb9b63df92bc66791d4eb5de60056736538232a8ece7d6b3968bd3e0dd909af2778c720fc885ea19069306c6589a61d33189d81db1d4028074649e9c2abee0aa7a451eb0dc343df8e8c089333cb42b6116400db897fefab1f7fb1ad4b2680415e49191ba9e7717b17fac3d66149f94551a2fbcb2c07fffaff0183832f4546d23916c9338f506cff4ac869b200f1b50fc73029e0ac86aab6ff9c361293ddb521ca494c72f36d2272ec81924c355421be6d2e24cd6f32de801c58400d99507481c761e2265de0ab08566cf52303bffd481332a7864433d34dba6d895d4edcd7da9cabb9e1e5044badb6169c856020e293483e533ed1830f118a45a256b36bd8b20612cb019feb9d059f9827b5169b02a7a3491c9d62262580646efaff0b473ebd396c4fce35abf6a6a24c89068cba5d5c804646181a92c869bdc3c842a3438fc5c330509808e4daf78e38ac3c5c7985bb96506f2c28035e93f4ab455807d1138237c0a96ea18660291ceded44d933d0d250e3e3afca4290e6bcd81d597f61bde0e1a4a8a7cbc62d24a660461d9c4132d5ffd56ca5fb01b43e4848d22c120929930b1c07028919fd4fe45399a8343b2000cbc4d1a87e2189ba93530eb14d2789be094e765317150eb2aba4720af5b668d2dee029476bbea3656aa04ef5a8b3e6555d1fa00aa318980068ee11b07cb317a5aff69083e1cf7142a7694673ebc07857435959018454a8e78a5d6ef1ff1b1332cbf2f212ee534f39fd10d0f721c13c50b2dd21fa28a64065796a26ba43c995f80b109ad4ad9c8329480752254569f8d367b21fff95b13fbfc1c602dc128a3fb86879eace9b2a1f496552fb55f18bef0a08c032a718ead2e15641788251cd029f1fceb1057c6edd727d30fbf296d460de99241374322b5fcaf2103d931f4c4695da783b70b664ba0844b2f4184b5e2ee8c0a825f30c109130d0744377bd9d9cc12dc9b6a000d48caa829103eaa81f2fb806478c347b8aebe86306403a8612fb92c6015aafc43475dc4620013b82eb5319308c35e4ec69945ab234d66652d15e139c29549a0e3a1bdc06581dc749e0136f029cbee4df2192ed3c9c263bd6420f88b703ab6e7e5973b2c11f6567d448db82f95d4ce66e0a565e4772fd4db9d38a8696a0a072196b7c254792ad7b41e8f6700a07155d320b99ceefeb973a0f4d89e5d251533824c7487ff8bcb4fb849c558e1cb060f0b721047e465f293ee77f70a35a32f1699b7a3e66a7e7814a318cab4f23dbfd569f41f8f4b01198e8b6032f2b12607493a4e129737f16fbbd10410055c156adc0a7ee12d70a20b0e39c22fe72e320a9e04baadfff763f5b437ba61b427de658d5cebc1749620208e1d8a137aed9bebf7eee7374b214118d7c9397d8c18b3ffd2d01fc6b98129618ee7c6c1b0c4b417f43af676a9f8a846876e4b797feb09f8e75d063000da9c85f4b8a67f5358b574db53dbebb8c86b0c0e7a7c1d3ce2c40f6523ab1f24c4d68dd83addc08130236306d63ff065667e6ffa028664432928404bf3816c72411fe445910d4f92755ba795759906e530fdc289e04650c7627e387feb44321db94217442d44c48976f0a71fe7fb0273776bb338722ad8424ae3b2055ffedac52215003849bed2dda3e29affcfea18a68934784e0140c3736ff9eb81f265f5b41ae3e456691b8cc9e564007920390db6d747486bccb76a51f279ce660a958bef316a93af6eb656cc7b0effbe444f32192a9bf3671631ce147435c51093320e15d73f40a3ec49523a7997da7b16982a0cb976e489c27cc473bed0118bffa599ede84bef5b720dd166d0715c2536715d55db9673fe473191b22b93bcd122867f7f30296ee473ea1ea6150cc76f153537424e030cd1cc7604c0ee06a900bca4b6f01638882d248ef57c366ae4fc0d0037d320c46e4ef377943bd5af5a32f2b2202467f78832087b9f7e7626d3e7e7a6ad1632ccf1c297a85b7ebbfc5c51eb49094b0610602ee993bbf01453c9e339aa3a984365d142f8aa6fd0745bf98d548796227d62cdf7b0375131d99d05ff1a0d0ce2b239ca82d62748a6fad066620b5584ee048c8f1231a819de46605d255b846f46a48b10349fdb760ee7a5a5a4365d4dbe75316a7b26108e60c1b71f55bd7f791fe39cbc8928664202b7534c42f62defbebdddebb2c4a9d04a92895d63259ccb59f646cab415eb10683e161181e924367b003d2f9b32565d0c4620669256f9718148716b3a5785c2cc87c83f4e7fe7300e5297a3095c94ca1376844e719617ce1c2bed056e9ec0efa74be4a7287f0563d30fd3a3f83bb88f4577d491843ba27fa33c515191e35dccc517eb81ea2f5734b4e592508cb173619f3c71bf5caa19fe63d83f412b3ad1464b803b2d491a8f535932f04b92f04944bb13c658f303221496995ede7421af48e4d0ea5af3a27ea9f2c833776bdc7fba947b67116cfd36e89a3e43966871e8727988d02029c75c3871673b690cc9edb9b0e9325f39dbecba4d540c6989533952e33072ceba8fda0301c928edc35cf6960fcaf437270513db81824884a5df49bed47241d69b554d50ffe4b22827caa3d59985e09b93926eef220ef77bae53484c3135c3497390e8212a12415f52420b3695bc7e658fa01f982225e8acbe95eb7557e5509e309f845ae1c3b255d44c804e3f4f397593666139426947fbc61be9fe63412a9953c2c833ad6d7a2dd15196979c26f52db9826cfa4ce527f25ef5668650de2a7093ef2ca4e209160ca5024df330b7fb80185b7e875ef454d60f5b62044f0769d0fea0c2bc10c6849059a3d770a1db61829d24fc95f6b284ed413f0e945284fe3871367a6356846591d417f03547809d64d47b3429c9a2bc2d23f33352e4f4fdce1e8ab4c6a7c905c9eae0b462f7a0c6f1a82f7cd84a969086b3fa3784dbb8f7c4fcefd39f906a33c6f0549bebd0d7f803e5c478d8e2f1d14ef0a2047db9895b79d015ab6a46530b188161950e59f3791d462dbbd6aa128686b7cdf1d18490c1c8d67ecf27a8b0b2335c6089ae922d2c6ad56462237a43a271d87b175ba11b26d358dc8b911bccac5a509fec708668fe8893162f98040815329b8c89750ee3a61bd985ac732c7fd234c72969b54edba6646a04e3641ff7dd68595d9f9f7a4614cc78720e7f406d9349de2f2b800898b786864b16487d61dc01d3795cbde6c50dc927dd34215014e45a81099edd893df5612ae40bb966c7ea9c0b9a00d63c7f620d5691c6585d818cb45561afd93bfe1830a232e48c5ae2854fc88f87c81d4095a760d43660ddde71d9a1a4d43f0c930c0d40f83b5cf20c343638337bf40b2c47a6a15ef5babd318b545290e81793dc08d91e9fb7b0fb7e4f05de8a0fdbc73bef516106dd4242286c6f57068b3eb3fce3ad10c189ecae651da20134f7fee8dcd66216911d43ced74f9e4bcdcf265cf2e5fdb95294e7f59e199bf90c34e3c246d0f3209f8d432603e1df0ab997b5b1ad8f9916fcac8d4014841664f68f6b31ab87613a182028d1b00902db38bce743be0396892a13cffa66fb2bb16770d0db896932100fdc8714608039608937af8e8dd323d845d6a38eb31eabdc5c74430b68966eb150bb95e2656a57b0394a8ac5274703371530a495efb6c681ff0012a9a9418f8c86c94820b5b3d7296f82a32d0152a2d2dce870114d0570054e52cadfd0bab9062c1ddd071463b25c482b052eb0fc4654b236009c25b3bbc405358c6c1093c6aa30eea98a9dd91384d7c09c729d6df9fe7c62e9e56e4f031bf8dc3975465cee9084c0c00fec0ff153be1ca452899e77436b91298e4b2f566af5d42400605838c8e5256b38f5e1eb15927e24e2b76d5b3476856a415f225f098bf5eec62034f6a5da5605bcc51e89eac28451d9b4275f3699f2929696a3e3fb867b15239c2787fc4d749d327504ce465189a6fe2e1d9d0f04a402ac37322bb1dbd5c80c7ffdf6348596a608bd7c7894730f0aeed02f712809806aacea0022d90f0c1d168a700129807407522580284c9f84e6022e0d0cb706386fa36f00e7ed4ab0458c1daad6a8e28f8b202b4e122f8e69e38a6a582e74c400022cb17427776c015c3f3289a83214a4152444f7bf9c97b4c4f9d4f00ef2945561e63ef1980dc951429522e47387392b851fc72d7c6992ffb8328fb115065d44ef783dcac29931fafe9fe1af77114fadf6c34fdcfdb475498536574ca29faf8ea03799a7536bd5b1c8b1d9b05648b30656ff865af760be1b0b476fffd0712ae6f97823d8489e06f6c0c8773f0b6e5dbf2db19ced551a66f3e42b5103914fa76e88b2427e2147f4193f050c04165af84b0c75d64810b5500a4e94cfbab4946e8968005c3cf061cc981722f80dd212905c4d4ad0ce61bcb3db883b8a9ca7b53075253d6a51e60c8407a05b8acdc05360603fc2525787c67601d97beba3b1bb3dc47f0dd65a81ec06c85e52eeecf9c40921ed855e158dcac4bd45e2373ab0bb3f958291614fe14921a091e5bb0304f3ab26e71b7c20a94fe4880a56df88a10ac0b80b6af9a7fba309e1b0b0106c45495fa2762d0700d9f0f25a7eadc6637740fb1c38fabc3b9f3e06584e532f0b07a850d7e96845a4b3001c84fdc7eaa0398eaeb80c572da7d57487d6e33c13f9d40df4f290361aace91fa7fab802179e5c01be9daa9a4a6988f01dea733147f0705430406f92f4deec7add7c1740cb45f0efaf60e6c4c7abc7305b9c42bb2a34f3c23b6c064d11414d6c7008503dee21bb588a7d43be687b5eb3785d74062dd8f1dfa95a94d95268849c986577b5e14a5cefb98663b0dbeb5385c1e73c968609aee1910eb5d086386ab8816e527fe3d8fe849767fd6fa4ef7c4fe5efa8ea277f2335c9e458b52e3d54bf9af8096b32c59128edfa34f0251e09707f078a8cae72e898989e78c76631f7604a67c449068c5068b5a5656770f96a89d6f2c84486d5ab9db8f84d55f5adf8e94869852369e31c1173b274b26bc4f503bdde954627ebfc8119823e5107db6065bcc2ffd3a493e600c4acf9b2c518f710f4bff091a2f9b984a7bd23abe6d760189afecc35457bbc91925418513e00d839f4497fc8ee68a5f6f26c292b49797e81806d2d65930a6c7fbe43d903f4e41527888ed9f2ae907b1fc6c73e06fd3b949fa4292d41b4bc2100f5a66be2b9e93f18f2bb81005a92086079c0cca575dd349080d7eef1171a3949423776508b829861c6fc362c038e4ee0e19ec3a51795272832b67ddb7abc7ce3f8e1e9ba2b88822d08c4cbdfb2c85cecf40d73051ee41b269dbed0687e829e473adc84fe23ae9f5040e8fc721df800cee6c9998b000224d4240f147689d163992056f4c279efcc2270216eb3bfda13c6269f34008188d131a259a07ea21f6d60929648ee34283d9f928e9e2e0e746160751ea7ff18ad1719c36cdbd529bbc4fc5643b46f5700fa10ea7504eaad609ee60471f0cbb99f4c8ce8efc7d15239067a63327f3ae65116937b6af6717dcd5240ccc53dc64d21484da624cc09c0c017881a89321b6665d4a982796e7a279c6b304e0f949c7d6689319e5ba9a8442618392a4b79717dafc68e2ad2b6912c916c52e28622c1afb5ad0f8f53ab571bd3be5f1512f174ac41fdb44f3d62ac89600490bb9fd05122ac261e4adfe3159ec2ef404d79867a8cd57802a94f90f4f92652eac4ca7c9c938d477a839c327f570f99968361b8a4d8f828c49fe326b44d043faca0fae9bfeebf478bbd745106df49945e279dbd8bd47e8558369a237df743baaf39d0b980d4ac788e8059fe3b569168f0ecd7b9db4d85f7c2d8ae1e2c3e58b0fef5ad87e81d94d16a85ac2dacf5fcc2a1d082dc1217499102cc1171807e597e194d8e14485ee5d6c1a4d8eeb3726b6f3caa6e0d3854b4ed312dd2ed2d52bc6a43e85b7d3361bc9df48a938a46773265034acf8f952345f00b52b29c662f5a13128eebd6805395060c6ed826621db58e918405858328c7487fe7d0fdb3453907561f2870d47df2437921ec9db09177b2932a07d5ce932665352a372bf0045db11484cb75ef290bed09e3b71dabe889673714377895ed7382eb7a181c8f0c15393f9c5a359f52cef640f4360f32d34577090e963967a577330867379cd73a3b4a0cb96032f4880b7f00933393b2838a8406bc97857a75d73f18091dab1908bc4d79373a9a572a9a4c2423256f90653fa524d61df329553cee0802c459c99935970a989d272c57bd33692610be740c403fe42992da0ecb430ac0e86c8687d16cb86247e3873d26591a4d09ff0df3bee41844ae913741e62d0b023ba1d407f78e645d72185fea4829d179b484238d06c2e6add271ee9edf91dca417253dc1949efb803fe4dacf7e9afb5763757d191c13177107e9a99275d54740867631076e8d034016c051754c1a924abb7c597f87d76f4fce1361b5ac696e6c89a0c221a2c30b0ce93b9c94431fb640f83888d4ef7e8b098c0322466695681d15a0df00648212b5f3dab8e4b44a051062c5dc610da1bfd1d055f8d58e67318f3b8fd6e62c0646a525205c0255136743c50d023ba9ff2e335dc575a35bc4961af2df8c25c4c32447c7732d91b83aaae488e660e199d99818ef1f3da36ef1f9d47f740a86a6cb03ab0c2fc2fd8c2e5a75efc54a1c81d28bfed16ec5522d3a7d3de50ec0a0503051c2d388e8396b40d03dfdeea89367df224f1b6d70a47239b509a9df1d3a5809be132062ce78ce234ee38580aa26d1083e5a33a686df53020064b5b7650bec50245670df7cf8556fd548d6968820ff49970b55fec15198112573940a94bea216a11b1b7fbe879f2db1b863122cdce1c0281e9465520bd3429153a2614715e4c47a388d52badc61183e3c33a82409beb4ab5cb5d76ea96b1073026e7781ad66a60eafa882bdd703f54ba1ccace59a56717ad85995df5ba05caf28f83da06047a7e3f7e69e00dfcfce042d9fa83b80466401401498bd9f043007a67f7352f2d3c5bd4103dba31210665c3bc5c7f30dbc8ec504f18518e32ccb42248d287c6fbff1f0c90bf74c885c010604fa3bd8c25fe73d22637bd8b76ce5d20160eb8e9a50660d4c0fd890f96319a59d06bd421225df2f9150ae0aa21a59dd3e955380b9bc6c27738e68135cbda45189e96bf501d7af34c142286986b11106c7857b5ecf6124f4442f12bf903af12608028c7b9c23a462912348ddb7c459168054a9732ebc764cd6858e01b1171c8d09a39288cdf6b7f93a7855b38f9f6626502c2cb22d76457d5021383c0d1b333e44e9ac7afe0660b35ffb6557fa669b85d79bea38097de9b006ad1fb5a2f4421eff01275b1b7c227bf0d015e5a3369957374430ed15329ce8259cd8909a207cd6e7850181dad38ae6cd445183a23c9683da5c156a30f06da1e6dea9c9806be8635324e9348dd035c59cca86462d8834eb51187238ba481291ce4d58fb928c1b792b7e39744009780fcdc64485330e9032249f053549847fbd488fbfbe3a3e31a08e114c733451c79732daf555d980a6bd29f642cb2feb39bd05a8f06f6ca159c2f3d76c20ccec2d3a0f748f62558519b3c4b03cba54c863f6d46fe232d04473a5f801086459f3e2054a179f54e8739fb62922c605fa1171e45419e12dc0e0af35fc8573d7377d6a40c75c3016fbd998a1cd33646a0d86d63657cca719bb03491f133346c68ef81992c3d6f44da4ec4456c28c13dd8e0e40d4dac0ae1299b2c01f05e07a8641535e4cb209a001932944c15d5f2e71b359f2d48dfb8e1cb9f1e8a2a03db63b283d486d1b50e4a0b28688b7a3905a75845187ed77a1ca86fc45036747cdd3b3c4713802777fd2d61dedb6e555d5ae04d7ddd247f349cf15610b6378c466b7b7d58151978969b9bf7f3f920ed061d937f67b698f153baadf14076a9b43a283b4b6d65950bd9ae10133265bd5728a150b2a01691cf1b2bad265326eaef3a30b5c1d03c1b5bf24a1975eba43896af339bed66f64ada3b0d3e84e0a5a48a2b667de6f416c50533fc62c5ca596ab089797dfd443baf813a809dc1826739cf033ce78565c49606c4f460af7b28281c52002aa27850cfd823e2b0c6343c7c2e8a43d23131495a18aadc7bdb97a7bf83db2646cc9bb723a91285644d8196d90d0c2d4cee2ff34486dc0a1ef9680f1d1c81a0e09609b1e9e299d352fcba8dee446e577b58e9f2c6b4c584028bbf24c0ced266ee22c297a0c4c803e4664764be4c122abefea9c43e44839014ef02aab5f5d6dbfa945b8882c9d48686d911a01921588f55706d212530b486b338888330c7c38f02905895ec28b07396541c220e0b07ed4b24121300a9e15bba552b9e81c7ab52dac8b7c7c2b8543712bd9b0feb349b88374da7b7e0b07b56bbfe38603fd0bf84803346f1e00094fcce3cde0a1c587aa1641707540b96bddf36f99983a1f47821258bc2076fee51bc52f6cab3045ed3728a381da3d1ee381c330166abff9a909857d3ea82defd9fea00a7e4f18884d3d54300c84ec22ce8da95fdfe2ac15fb1dd98910480b10da43ec50263e6839135e4a44d6e05cad1b702be8ab402af1f57bd71a7bd511863f4a5b7dcc3dc55f5062acff56ca0c301c80259781df271052612b3f652edf61ed21509ae5b29040403090b485adfc5f1c8461341a9a0172e30ad51146838d2e82c43b002038081ad96f01c6b6d8780927b13fe66d0506af4db574a06ca6ab4e8f9bdaab46f5b317613de4b4779bb349cf88309afc5b8a10922e3d7f98ddb7c3373d55c0f02dc029f21f64589eb00c3142cf3a3f4a79346823522fc7f1dd60f1ec190a7b29b6df0d2fc060b71453acf5aac895aa51f47c217d4a3e68c3259a629057a2eb6901e80b52d856731cb1399cd03b04c31c0f20df220bbfc9a35a7bc747bf70108b0bc2dc47b00911441b152f855ea04f657bbbc3886917acf3e1bdc92d37dd17f9e1285f49d16a8350e62d18564cc5c36dd4d8c4120bf64cf139d28471d79b60fda8250c467aa981abb1db5891b84869d9f20a2c39e311f7830d30986917571be5922871a27f8254c58725771a26057ff2d80849b953f8504b074fbeaa92e88634e95e223b560f41ccf3209dc914d6ecf1c7ad93003b93f7cf2885d2eb02121c80fe0165fe9b8a888afce6b5f1cbcd8e3e29738d396988f3721fa85b596f8c0084ba8361bf4fba6d882efafc68011e46cda23533310347d7bf14ff86197a27c653ae20c1ebfc69fd49f1493be4655597330be4b9b7567947f0a27002a0f323b1118ff056ea270bf8133b7c8e08590a68861184ef387365ab54102ab08b9f2272fef4e0fec0b1669befb7df861c7e05308b92ac68b719119fd0a623b29173486319559631f80ab3c0c49dec0d43cfa046b1b023c262c7a466e66927c9d17ff20840a4b2ed62e2b796478faa707a349160d87c79ec21c325c4dcafb110b511f1f08d0bdcfa53ad819ba556b05e6b2bebce6b7ae4682fb0f52f41645fb872d51716561a234aa385a0e563cf87d82775ed1fa7e9c547bd17118a29637100f9dd54471faeab5aec45e204405efc9b7a255cfe8d46e2f0246e5739b5552e2391859e1106ebf113041cdb3a866d0806e6c9df8a189ac93131bf5fd70f9d533dbf4277954649898463ee4c8c94448d6ef4031ecc51d851a687fed924c1e65c79490ea211d91a6e8e2ba550e440a60e23ab99f469c00b75976a3a549fab5472bac0ad4e4142f768b06daeca4463bc9c1ac0750002bcbb894023769d605d23a558821172fc9419ddd793890f16e1b14ffe0d7b6bf6997cd1832d17add1be43de3b8c3b3214852fe0144d143d4f50b28b20d8120e433202d786adcd1ec8a9e1529d4fe4ce15f436710ea89864609b88da1c2e96a652c3757ac5485a15a76eed712651221cc455003acaef17ec1dd8550ab92e05b465846f8be517965dd1311010d6e6ddc350d7eddd74c55731f3d2be41c4ac614b23f0394647276312a5c3faecb1a02fee00cc320b92c1ca1068371e047d0e1427f8535acacf7ed7f729848b42a108adf7dd8d36c8953620b5e8e4890d817887fb62246adf7688fc4ea703b20295442ef69991c65ae30b4ea003d1c5fdda3fb24a919fff9cf47d873a3bca55f5c02d6e899e9eb3679871ef449a873a568b9a8e8ceb69f9521ed5e539c260946c1ae03454da2111baddae5435f6d69a7446b50e1676640411186c53c769418ad860be657f4a3c30be02f119419189f6ca55c0d8245f01619b236213898a32a7d03a765c789fc0bb005412459e2f2e5cfec7e71666e0c937d093930406d3c6024f9f4bf17caa5a8b873ba55029841925459c27b7a961e39e6bf19236d8496447e9fa3ac0e6458dd030130db20d3571b210c7d70038398b9ae64b70c01e28938ea462df76345080da0496c1bbf6f18420fdc28ef92dd303cf2a907a6603c70526c26df94bba6151d5e3acc50e47a1ce5e0879fd58217e3fac622b3019f2764f0692d8f1313ff4bf939846a28f20a08ab05cee01b508ef05bf82cb481893dee0dbd3b67c1f8c5484b55b06e8acfe4ef3b5da4bc19c6be23e1ba5b6ed4d3cd30d95dc173fa557153445cfac238e98f86d700ea419391e6b92885967c250885fe0828824184bb035fc4ddba43a85391f5fc5800737bb27c9f4aaecf4219cf0ef0a05fb733e14fe709733ded55b148da4de409ff9246de41401ae65b767500cecba0f8e884574f886acd40d180561f98311d927c0cb04ac006d434163252f786e233c8269a1fdc604db526d7f1c1c11fc409c7611a5bdf001f7179b0a6c4d99a5cae2d74a8c57bc131f3f38c59d4266deca18b166968601283e55c06472ee1539f175bb948f6488e3743b17c80afe36cc1ded9eaf0905047d9c3e0d759a04d4226aa67fa4fe030480c6f8861644f42b2ae537a33bbc8a064bc71a11af53456c52edde271e4b2cd9c5c2a1ad88c09b649b19afc7806af37ee3b8ce7160770f5d4dbb1f2a4e191021738a97740f9d159a42479a2fd9c74f0e32e002b438c6969047780ac42222a0d01ed6133d4452c6a45424dae0a1d7065fe81b1735a2582d8e3bc2aa8b3ba996f6b10e2549bc10b003df2f18c4be24b841801decd1c39cd2274c328b479e6c8d7587a59356a844280600f879c11e2a17812089a5f05fe5d2635a5b37b32eeefc935bd3538e37c8c4ad427d04d1c1e87f2a727bc4657036d47bcd8e3f2bac75c237e5712c665d491012c8c16b4667ac282fd98793527f99849f8ce39da8d318005fdb48bee99e4a8f17c7be68b8905178fead3a933481d82be5c661f5db84a9659cfca20b804b8f03c689616d327db6143b60703f66e39d4ecad9c26980e3f6f853f9102a05e2b3202a55ca902c9063a464eb8fdcaeaefc27f3d63c38017c97364531b36cc4c94746de87cbfd5aecf9cdbea9a463b8aa94d2dfa282a2c517ddf2bc3304b9f4790223039429f1f6028b1a8aa164513feb5169cd052a15949330d5395c6ab1fcaccb12a8cc1dfb29c71709ca121c46469ca58aa07552b25b92775127c28dd5590a1b4344c574b8433eb03c710bb3c472c908bf919417e53cf97f881158e89106fa716b86c6a54b38c36e7f9f138bc919fa58b7a2b4c05136e6b3c73905ca124227146d2b1c6400f34db1fbc0698917350c439869199f381c1d1ed623f606982020d539e07d56d5546910637c221fe56768d839cf7397a6c6799cd370d5d1d5b0e4386de47cd529cdf1bffe8a2d3714080b3097d4b25d991436c7066b7cc8cc9d91efbddeca831214dd7bbee7810411585ca7d8071c02525b4ec751410b5d09063ecf64be2a952df960e1bf7082ed66ce7c8d41140e65d2fd50acf3fc76712767845fc12deaa9bcba099bfaa1b187e8770f7e5bc8453531280e13f9e32c747ea8c3c3a981c8440319e43b82fb043658c29694a67042651af4d83963737e9c234a70d7cf1482ac26656c09ac694aa2ad7e3c521ec4b4b02b5e47e300e58e4917e26bf153791c3249ad661dc9923983425cb4e0f6f3be720aaf1491825459f80c7b92128a3ec1845328c9b448f515f4a24dffd7b03e037ddd2cc40d1dd1b48945a0df8744d345a889750311c87da649ea41dbeaad23febe7d0b534ebc59cf9b5205b03429c54e9a065b06c2e90ed5a97bdc5311c6ecf2ec5dadb4dc65f0f5c89c9b6598333d5574b48c6e5f05f3c7f0221d46f6b761eafd3cb817463451eb69d92c4af4089fef5cfbf6bd94091dff91fecab8af28ef5888844f1757364f257d0bc91aa134c5e91c50d5a05a755e22668dcb14d5e081c9c4536c71d520fc8f58963aee458ed990240ee0daea1e981d53b72aea001cc6059508e342da08e31de5d5ef648d99a9f3262a7ec233b4a30b20c833781a0525cb00598619f8c26851d793408b60d49331b611d357fd904aa22ff4a9b2db422da2e6b2a938313f5604441c0f0d8cbdb61656933a5b5e670232a3d57024de169432168c523aa44fad23f3af57b5a309a16b253c9f8c10daf107e7c2a2bdded148d167daf9c23ba74bb384ba49fb44520344781299a9deb3e1186f72331aa4308472cef7b81ce226d6a2c7cf4f7ce79bf4d27ca84fdb1e2c745ddcfd40cd830369e268b39708fc93d954b81f3768a30a0267c67038cdcfd56a5485714a3656b764f450a6719d225464d5abf8b3c521208da4f0841f4359460de5658fa330ee0cb198d3e493ae53a59bad55a0c932fdf5d53b261c2044969942f2c3c4f91be1d0d733bc786ef2025dc772d06e8e4bd498b8bd744c46fcd991228825c3a46d131fa0c0e2dbba0394b42cb242e1796398f6d8a62a3aa3b0d4d047085ba93bbb4ec4a05a2b01a405c08b8005640f19a8b934030b01806aec01ff072f633a7efc70d787152e1a2f36612d9a9e4fcef6ef081cd6a0cb3d12619f8a8d3254e3d80138bd1fb0995bd2a75d769f563a03607d18268148e6534e19174d6471f58e293e0b2e83c964efc5ec1f8dfd4586f3a02583949bd1068fb76e0f9c93ffa4b7675f8d1dd444e06a838f06e6a4ea8cd7304b5c39e302456d512d3aff5b1c9656e563be692cb0c9a52e5a8e50e46046d7068bd0b74132ea1e87d418335a6b696ccf2a09b580ab32840d93f476e15abaf2c5a31e95fd3ac16871bc421efb159736c7be4f510195b1f93ae8c5876013a799ecd660a4f3f95e29b1ad93b1b04c52846ca772afa985dba33a0690eb0883f63b9ef4812bd813218ae789b31a8d2f5fc913d180c1c4888949ccf0b731a1300449aedd762f2f79902946782dbce2d06d7677cead836d2a8e4eb25ea65126ada74ed693e662044a76419e2a7ec7cda37ad3423e8445589ccbdba84106b3d73311faca3e1237ec65bc36f22f303fac2295939c001612b9dcca736111c571edd2a1f18c9f4aa8b5825606e6d629a2a2249a5ac10adca9e19ecc1c147e36ec8b4b2da13cf42c26781b2d64ec7d8b3291e10c54fdf7131dc0e691144eb97aa9b6051279128b58f0c178fa593d98893fdc95441a31da079e8cd0bf5c96077ef9a1aae3b6c0ee21e37ca5162a8a65adc0468b49cd587f8b5a0c0e3415d3432a89097497ce434d1a0c7d8b570bcee06c4fa444c9feec42952819caf032084a0055a2b0e59e2393d3fba785a54f123ec7649d401d97bf7f62adda79aec21930c72b4b8e41ae7833a54a8710652ce9b9e2ae9de05dc01a691d69ab603d3e30e15d9073134fcae3ae52d20a91e860dc14f5c8b05098a48b6d5c211ef03807989be6e9fee89292e35f8c5a998f44666f844aa8b043fe2d97e9eb0aa8d07a1739d5da995909ba9ac2b35884b29ddf5ae7233bef6656b53d1cf96e653631242f7cb2cbf859e87c7839e183681ec0d2bb31f3b0404cd2768b8263ad6605a3824eeeae20478c9c419a454292745d3211aa636608143a68fc9a68b46cb7fce783720cd7afe8a36a0eb526e915793bdd9b68a81aa7b7e8329626ab3584f0bb074eb7185cf7ec7e3357c1ccc6b00fbc63c58216daae0cfd4677a316160954f3e31acf53e9276f7997df05b5756d04aeadf84491bdcd2046e9d1e70ba315598c659f9cace75df23d3986345061e834e12a95c063608a8ded2d3c0c87272bb91f34bfa501b4e268faa183b25295a3e1f62141e3f90b180b179f3d76902bc51dad8e7baa5b55f9d9ea0d4979699cf9d5ef5abdd1fcb17156e4261cc606ddf68a6d7303a72b9d5cadb660646faae715d21ebe1673e76f1f6b1cd9b180f12a02c6ca124e42133c8cc60527ab9f4ac0a7701e8cecab0f15e33ccf20dc91f51bb231e03db4276c8a24ef5ce8981907e84fe68a7460c6772adeeb6e4df30d98b6d3e8baf0872fde191986ad04e7b2ec45b866ed4903fb9d8e602d10dc7bbfb8fd7a741609e3522522ce24f8f4bec47ab1b8ff49d9b46d1641427f67c8551d3316ce58e5e2b71d3ad6f0af13a20cd17dc7c6ff4240461ce83fd7e80cf907e33730487321b2cb42298cd61ac6337253f21b5ca9228fe61b66e640138d9c6bf3c162d57c459217acfe216a11f128fa7d948e7a64de75c7d8b795bf26f21943a86148b56cad5657ace33cb4ccd2915d1d9664a67db022b6a365add824845cd9ea4624f10fb8ff0e5c6e250d6fc930ab60c7e98829210440e04a14e6c91675bf2bed4a06049cfb6243557b739989be15eee60296704d6a35b0790772274e86ae1876459ef65508dbe458582c449bbcf134e71a06b1d65626698e1858a961728bb6c52fa044ad43e4dc0acc012ae907c362d94a402ff267ec4d0ba483f2ad2892b5649e6fc7150ae81f0294eef585851d31da8931111be2e1a2b6b9126e616f8d385221653430b8c1b932442d10ab2d3b2b14c6b1b2e8331d744170b4a56208d1e6bed1c4c707e6527ea9d649253d6a41590f73ec88c380a8b55c5d080e2f4188b359ea898f6d8c42e62efaacf47af92269bd83486911ebc85922c387cffd19a1a502c3016d47cca1a52b892e39d846793ca7a445f433d70d8ba397fddee219d0639946d1bb4baa7d3b228e1d8375242bb4272cd9058ce73e90dbee8dc5b44b44d50f9d3305b2632f1aea0f7c2c5f16c36c81c2245a211484648408fb5716952c201a9426c8719e42f9248cf20e0e18ca5aae915570cad7134c486cdf7f5fd0fe7b4ae764042dc4e74c65bd6a5b3ae065e42a6a656334d070a0e8cdc48450f059d6c9dc332b490a36b37410b99ed6128e110886ca117de89674619e39470a8df8e3a2efa24333cf7d3c835206bc2a86bc91084f49733a1729afaae53753549e011135f357e2fd8f8aaf12ef2ca703a392ecabe7d9143d084f84b4fecddb9383b0ffcbb1af16aa3f91425e5a75c455ac3f2cc182da5621a905dc4c577abfc3f04fded9f2fcda65dd38de9d213247456a4f15b85d421fcf38e5e7b442b31083c0abee49b102061bcf6435d4c0c78a4b925b2e0b823b7a8cc55e7a1ba2de1b81e23320af5df553beaed6aef681cd8298ecfaaa49aa62b9caeeed161631e0ff1aa1de22b00949905ea3483de92213938f986a157bff4f4acc77f04d76671752b1bf7fab93adaa9cac135c01be12e342a391b32489cf74281b31077d3fde77d9fcfb27cd76a08abb3f44c5201bf6aeed4bf35e1be6e3c4d66431f0c66fd5ab289c3c256eb6fad60462655b1443842762602a6eb0cd4a0f2efe078b0fec19747a6c2cdceab4b565161c0a1624ffb05efde10f1af88ef62cc2cbc3b7237502e80968002b275050110b54bb676b88db50ef7f402c2837ea8ec1ad6b213afe592cc78c640a2829794b50f965ff6f809d1ab27105068362d71905fc29dc0042d4fca4e4ceb95642b3153ac832c9fa041b38427f0b1f14b7fb4a27161b926e0543758ae3e698acc80e504781b53264d63ca98ae2a9ce48e2ed0f1861259bf93d613102eed490a79b861605fe9b1b30e4e89eb3da097210103330a7d0a277fc5a3c52b47bc0a65d32baa53af4a461650800e1cc3420d998b45dceb62af6f8dd73bc14bfd62b2a087a1fef3c8ab72a7e328375506f2d5dac92c2baf87c5a84155351f58a5ad00a26b4a4b7e8f723ede2e5d9de078c34658807ef47ff8cdfd4399567db167bc52aba6f9518c4ab929a0896a9c636ad5e262ebdf91c8059e55ad24e326a7517dc1114dc00135ab02618be264e1f202575d6aa87ffa66f94505c64c0da0202cb4b031ee212d7fab423d81a0f0582062910f6805a07e8a223ea4e3074e0b6a7b514112209e5e3b7e084a933396d29b275d0983dbb31ee3c05bc419ba0a51f8503fd0a055a05dfa73a14861bc678499719d2e80ba7e2005a5cbfb351232f3227ebf2172932678ea2d4e6d2888113824d3ab21c80b3f9d09770af641d78ffa39b20488aa822ac9b492c5060d0fd6e40e023263bae6f08a2805a74f4a415b6cbf7f9895b6bdc5cd904b43c7bf17d6918d58ddf9720dc30cab80f82aac80d0fdc31984b5a92a9bf9c249ec334423e6899a9a1ac31d55d6a812a44bd00ad7c3a162764ceb89b189a01e341f791944b26b9e1abaf0456373a9ab051e8c923b42a49b968da46d61358a9a107e8310ac535418e797274fcbd8f3213ddea69192c8dc7e36afab5cf5025959083335feb10901d4bd04cab567bc58309a15a70db999e931f3ff5b89c924ef4da125a95cacb05dcf1e8977ea2ea64cacb0671ba55528f38139eded8c010f60d90510e09a932a08f6aaa87230241718ac554b9747e506ff8d1606fce2f7364b0891145ad99b5b067d0b8a0bbf0baf51948c5f944bafcded24b33ccea44779fc45a03cd63c86e0c02f7a1e25cd03ebe8da5232cbabe4d26bf5043f8f1df06bd8d6e5939791f1a3e4ee4539e523d7dd4041113d8f1d1ee58b107d8ae6417ad1c3174fca7187fc22e54ebf7f3be44eeb1d38485f8a3d255d1399905224fff4101d9968adb5d630340c0d618ced458630c6cb6b744bc9ddab64191f399aeec6c9097e1e3a45e027691e2c3aeab07cf745b090bef43c7690a17990bef494eb6ea43ccb1791f22c9ac7101c2caff23cba4ff92254bea479b0bcca0e4f7a2fbaba67792fee90b3b62fd9bbdbb7bfee72ccdc6b76a33ef0cbf6e63f5703fb6dd3d04df6dfe67f6d81b8494a0c8b31bacb4f7e04cf389a28258d941bad01de3efe77da55592cfb2ac80acbeec5fc5e0cb316db1ee6b24bc098fa197673d5f7a5271aa2be3782381a0ca49d708c18863de66830fc7293bba00b24aa2b78e26462aa2613f01464360163b64056405c2e17e6e288e87f71fd2faedb0487d22057250f398cae3e3f0502e3b3337197803318e6e19130b22534e3bd7b2343c403ca7b79c317980b3382b900b0511f184574e29f930d7bc52d432412c99021fa1e281e72175150fef33850fef3f13f3cf080b2c5ecf7d66f641a3d36b95cae6bf1c8be6755f7de9b23fbfb9f23f37aec8db381652d09c6306ffbf8da7bf674c82cc3ccaeac2aa25e443d5faedd1dc21831381acffe66d763dc61078ec61dc35c4687f37383cd8226795590496843ed0689da6f32c06254ad54aa0b640658d45499d5982b63f9182f68cbbfab8bbd04ea835e02f43f4f57d817511ff445d0ffd0ffd0ff3c8ffaa0b73286c7e7290fd0d7f77087e91bf5411a4a18a9e5ebb55af9c9bbaafa5432c13f92d64218871ffc90a03b631965acf98d1acbc97ebe1cf3edd56c247c6745b6c67282600f73f97c01e91123064723316c9ae88a06a132c0d8d31594f12d372d0bc1c03580805b15250623ce979be28c01863b3e66231016d34211ecfbf3a07fb1311794211f0e017f1e64e15d6d9b48815c26dbb32a22f68c0efbfaa0ffe40ed3dd8dcfd3c701fabc567387d1dc6138aaae1982691cf5b1ae81b2064a0ce46a8467ef415695133b174f2777947447c4edb647ee6051cbeecdae11b77bf4ab27cf7ca56ca09d7d596a2406bc85165390e21381dea90fec9f21bcce92a2f8b67449d7bd9fd52f39dbc875dd1611ba739b583971716c14b1098cf1bc56d89b2fcc88c7f8c902a92a9c10a18f2f8f8ce46681f8e90271d38d1c8dccc15e93fac01866c323c040c89e2e1863473cc92e88bae3d71db54c222b8541fd32d7f6e6c6719b76b3fb7a8560bc20be20bbaf395f73d22074459ba032b0d6dad7b2ebdc36add02e1ec118fa1e8cfd62067bcc1567308dbdfcb1575ca2e72b27ce4c2da00cf933ea9c2d9fbae084d5ef6630bbd80685683595c5b07855580ab0544c41932e3e147dfa49cc2a086185a27a089602787da4fc743f68928fb158180b63b56c9e3d6077ac47340a83b0568e3d0582b7c71eba1642eb8e9bea65c918ec995c1e79755c1246e6b4e475c99bd3232b177ee2fefee759ba5bfff32c4fbffe8ecec6fdd06b6fbff3f7ac8af49dbb3abf6f654ce9aff63017dc717bcc950b26a0875c24ed1d53e280c9b7a3137abe0db728f2f570856f6b75d332298a6f6b15cb7509af6f87722753f287f6f2f145d31660fa9f073d7e9ca54aaa3eef4955175fe2807217f50e1ca0c7ff008892373592056a818644c98a31c618fd6910a08c56477002ba82516cf9550bc12fa4aec49f2f1973a22bae2adaae268f842969cbeaf2642261f4ec013dfe9aa3b3c303ca188f84c1196322616ac67a6cfc1485d48f5ebfeef8c9ea9e0f75e5bc587b272ef153d470a37cd355272707f4a914f4a914e3b0137e7959f917eceb113755e803773527f49e5d1efb1f6e92f7dab8e9a6beb74f99c0defdf6fd6eeaaaa0ccbdb92d19037a6932bd6f3f63b5d2e268f4dde3187df7f1bbaefb1a951fb160fc2c8f033fcbc76761397996af51797c448cbfc3f7407d7217757c10e877d035f5415f43fff33d50908b0fca9725df9bbbba2a09b3696f32fd8f4632661a5361292efe6fd9935bd3ff5f4a4949293d48d79c7ce96b543ee57ba048b9f3077d0fd44a5ef9cfe358f9909ef435543be16ac4edf29f67b8b6fc5090ed261e76b67c94d7962f2367cb17e96cf9249c2d7f457ee9de9b5d79786ce2ccede161c2b36df6ca8c0c51a20c513232447d7681a1eb2bebbae3dad9f24605c76f4e72e7ef392ab973bd03c7e7412e5de32d5de5107f88a29a96ed186d0f3b41512191680bf08f7c47c2f82b43ed6cf9dd7defe981c2b9bb7a070efca37f0044f948d7388ffeb6fc1ea8f71eac87dc8728d07bce43b716b7eb01bbb7affb460165362d64f4f2c2ebe1ab77c4ab1292f21df6f6412c1ede41f43bf0082b7dd63d14d2bd10fc367b1607255b1d1c4fc91647c2c83fc92aad1419533f86fe2b05ffca933ee53b8dbd248cac5f4ac694349692303b688c89849155b59231228df5a4e45a3f2813f707c40265302cc0185a8c009ec02eb1527be4285b958479719b6cf91fd6c51183135bc026b68cb9fe286c490f86f1c81888c2b961a15cebda7ad1158785fee727501f04fa5cd696cf6af13017e692319385b930174bc68cdeb246235dbf0c543f160b3b02e6a2195bf28231e4af608c149eaf7805f6eaa7051c2547a6580310b05882925f53279609ab8226f951c4791530c48c602e18ae86dd1af581efde9efac0d9f6305784c28d7793411c35015f61857502eb004ab13d7b95d0151556b531ba04f66eaa7e6e8abac37ec4846f7b23267cdbde20ee2c8b65eeda2bc6f99ae2b581d8485c10fe9a0a8b9a1430f6996bafd19f2fe7cb4f999e3659be40ee4a856bea630176974a4ed75569d7c5a12bc05efd2e16e3f5183fa3c3cbb74c409900bc7c0b04ca00e0e55b17c01998976f6100654c2fdfaea04c0e2fdf3601677078f9560636089481f1f2ed0ce0cc8b976f6b0065f4cbb72c28935fbe7502ceb8c8b43c01651e0770e6450894b981329c0ee0ccc60328a30d8133f7e5db28a08c7d578c31c688610630408db863e8100000c09872c0e106182f747609955a5c3e6b0070410080c3300cc3b0d762ec00fde325b1475c10de04d7b64f57d8cd365e29a59452bac90f20a5d47e8331a3fb00b82074c8ad3d12beb71f409665d9a611201240455580dd3719c40f07ca400b6362286b08ee3b57b90988ab6288cb74b5691ac46acf8ef4897a84810ce60bcab83b0d1a43d88b61d75a9555cdcc7034f746cc4e968510423833ad5d69abfa4141fa7e54cbeecc46972ce17919800b0289b8efeb903b7b0370d666088808604119dfd4074671342f1f06ab7a790b04ca401db8735c2d9c9bd50b4d0176d12d28c01ef6c25c9e31168cc1b23d8cb5e577cff245949ef434bc7457dd559142bff23d502cb973fdf4478f83fee8fd47ba66886b1cf557740de8ebd77c9e7e0f9437c17665556ec25eaaf97acfa46255ae2d5f3442790c04e78f6dce96cfc4c4b3a57d79a31daca3bdb67761b0c279b5e5531f38b4774c23900b7b47dc27c0588e2b85b1f730d7ae1ff6b2d8cb7e5af6c12c3f4168daf13dccdf06102dbca08c5da285033607dc6ae3d8dfaa63bc2b391a618cfd55ddd505e226a93960a33eb06f0f7badfcb1bba2f96aea452c0110abb2ac959f5cdbec52bb7293ca4dd2aa80d81510765b7d5912467a4cfd248cdc445e692e71d327632e10bff25e9509f0e479b98996a0011bf5815db687bd84b8cfd1607e95c0f6fd6515f8377431c105b20b6d978026f95810736b9113c232b1049421b5d7e686bd2361b75d02c6d05ea31be601dfd867fa08b931dd054137f674635a879be463c05e557ccc66ab832d9dd8f2b126eebdf7462236ec08d8cbc75c50c6886356c0999a13655c200e235f83c0e652c050e6fa0d62b1972fc09e9531d8cbb331633c6e7a612f6c899ba43fc6b3bddc34c683bda61dcd5702b025d8cb4ffed9fb2700c6602fcceb4729a51688c5ec6fafd1b72b375dd505725598be7234baf7eaabc2f25d61faae80d42f09386eefaa3c6684929f80d1d6b255950067ef59959faebe017663b9e6480678f2152c566e47581399e021c3879a9f84544207455f4e00f9f9f57b94896f1896a5a86291a405dbf3dd9a8c7489c5eea5e98808813ed3257e12e9e97256b5c16952869dc30555f2a23c5d7d1cdbd347c9f44ff27c2e83de9ffb9a940f85728dae99cf7d0dfdd05b19037a1e54f31882e3e4f1f340f9ed53dea7e671f2f8415dd537b6a72f81ede9fc1a944fd112c03f75cdc983b8875c44c910758281ed61af23bb9a8ba21caa3faa4d9332602cbc8d58e6ac6fc7803d471744fd2e081b6d44b7ba735774610fb17bc4737230ede1148c81285959e6c78b651956c44d527a016351db58ceb612dba68b2588f471cca7dbcf8f1a07e59e8ebab8d3c52ebee4ce0e0b2355b1690bc296afa28a8ddefe00bf68e545dae74019edb191cab34038e33d5186b5d4f5f210be3c842f5ffe7c0c63b6b75bc610c69f668b650e555434758d322d92a9919ea8e9152df2e44ea923e91e08535d76a8151ed562d32b3c7f1707459407636fcec5e5a38bc7e851bb7b128791b7c2a8d9cba4e468ee470b55b227718f02fbf35a1665efb7e85946bff2fe9103226e9552cc1e8c6d5fb248a4273d49c5638c31c68ff6b247f42eafb964d7711dafc7d6547e6bd93729ef88bbb559f468a5477bebeeee12068c8169aee3279797ef496ccf0a47e3d22363e8aaa7476a74c55ab156720a1046be16760b29862d6bc42d77e29628d8c1300cc3e8a6e1987f963dd798abc0d8de64adb8965925a31515d147cbacef58ec4214d6de7d9b9f7df34703d1966b0a1bfd640ced1132ad1870cd909a94ff39e79fe898a21a03d28b3943fcb11130e8b93ff910ca7bb067cee78161786cba6688b76d9b4e62fbd8da58c7d5909b9bd50d6d75357c3b1018433ecd53d70c11f24d9d847f12460b61823daabf211ac0b0ef8288ef4c60a810996c8fdff3cf863fa63b1b1bf3cd45ef1c8de8afc0a3d72217816c7b630fdb7b95cfbe872341b78a16409461e5112d4779c714325fd2220e237358a44ecb09d7719374773f61188b0561b08f3baee3495cc793f8c9a3c6c2d1c4283ddff162ce917d048b556a7bde92229af3daf241a8930c5124d48a68054b4318b0a6bd29fdb38fda43c2a3378f4c1d8a5d0cf36c1e71d32993f1b5cff1f9f822b83f2a59939b0d6d66d753f9f8a2c7449f0f744c83b28bad803815d147cb2ec6a101ca44d7c102e4028ca1efb3c74d5580a74906ecfd09f0346f004d2c37ad019e6815d024fd445b3e6f004fbe066892dfe3a693bc01cdfe1a83175628cf1088b8b13b277551aa43776092266c969f2815d0740378a245346dcd1bd6af9c2561fc858901d7f768cbeace46ec1c27c97622190ef4226ef256cbf5fcecc5b4cf7ef7ab3499f66a7676b36b0f4c45b4b2b3bd1c9fbfaf65d1bb49078bf63e1afe88f45763a9bbc8d64e9865e766c71d232acbce1e8d46ef913ed34878cb482af19839e1963b7e62d152490b8b9e2ccb03b760c025161687c51372b606b920a09b72d458aa90c20581846fcbd158968d8585ab95449213d3a4eecead69f9e2050bc606654cacb4c8fd2a608cfade64b55830e29cb50d180b18aca13eadd80d11071c88e0256c81480e396cde11b18bedd910c036022ed9f13b1b51095decf81ad011df88a8842eb68ef81a804bb66b1f7e307911fb193d549808f3f197708520b4058013bef11b72c37683264d9ba926e9a1710cd8fd3dea1d379d017bb3c7fb7d5fa646948984b97af67c7eda71537d977f79e8ee2ba2cc95388c7cda7ad15efdb1e5bb686feab468afda78a64e7b547bcfa257b447b9d07287a6624de0a8dd7b58a6387b58acca9a132739e2466e17787aa04c1a60cc64f5f428710b039bd978b1f939cf57b51dfc6652defc7ddb05ecd196f7d82c3f15d1ca8a8afe664f8f0eda86afc52b03abf7def768cbd2d6c544558455ed842ff6b16a3308408f9b248c2610c6c06a0660eca873b8969f9b4c32d3206e8a3a7034924561adda9bc2ebb1eb47da72efe9b13d2c1ac40a7b291539703497b6608c2fc894fce1a79e26f2b3f19377a18cfda64d0fcdb1ac4c7b73e7e40923d859fe041192d9078b2455d859deb6ec2272d904e110d5b86d8eecfc2ca48245a04fc66d23cdd2b9a222fa64d66e3bc4fad68198ee3b6c5187043370ea6ad196bbebf97d92b668e502f6b75c60d7def409c221ca6d7345e5333d94610baabec26d2a1f3ab5cc569f3d73ce29c36385a63d8d502a6aa642a055f0f0041d37c927e8f8697e103f8ff9a0f728931d2698dcc1ef519ef9a097c0d412e0f46445d4966be214aaa0c2854a62a6a0851a926d7308d8933bce01d1f202cebe2322143a79c8f94acfccf193eb0c8c760efbf137237ed2286d9d2a4bf750b63cfcbca679dd7257757763e3be08fa53f3984f9fd33c86e0984f63846ebad9d331b2ef25ed8d485a7eb43777e48ad6617b9365330c3749ac66b865d0d38cdf4df2e76b47ee481bb9493795134e7351286aefd6289568f8444587d0c5aa95af9dd58ec39e19afc95377e6ccc9c13e73dce4faf03492e326f9a352e79fb79147534480b0e6419f7b90e63184c7fced216aeaae52dd55fa32369a214a46bc273c8fccc01e8b2435d89eedd6b03c75dce49c102fbbde14900873295eb7cf5f2db3411c735504da3e9a45572b8b638e9f0bb63680cdc78e0176d1568bfb6db2e80dc4b415a10e096640806d6657cd235367baa611374922e63f00a2e6837ede0cc1417ffb1aeeb1aed99e7ecd101c280ffa1aacbbf8f8e79fbc83740dbd311f7f11f4431f7afa287ae2c8938cbf08d0638d8bc01fd23cb6c7af6d9cc4f2c64d3d84defbe1e43d68240645c61cf1d37d9096d3c836cdf81ed66c4295d09684c99130922e69b5461e6d3d6db1a4475b2cba43bfd92377a0cc1458520bb9c5961f841d4a054bc650214418f9b40941c062cba746b8d1b4256fe82a65d639670f9d02d8aaa69db0dd62bb4600ca33a24a6280594fff0755c8e2055528010f1950d425e90e652263ec53fa54890739ec7d88e8390de9394717c47db8a37dbac44df563338d49b03fdc1e5db2c44f9847796c00624ce180f03f2247fdfb704b96b4232974f6e9733f7567757763fef638e8733f7f7bdc84297c56588eba36da6a75366e0e4d77f135dcde647ed96e7209564839ae59b48497921d35164cd86cf9c4bc7193b45d606579b305f6e627e5ce4e6ba7b5d32a3259fed415bf50166c20c1fc5c856191840794e6a833f310a83302252becd195f7d4e904d441912aa0cc18361570c69944192d2883bd8e8e8e34b225a5ae160603da922c968c994e48d664499664b55aad56abb52377e48edcc9267726f1a54b273e131d1652e73d345a93f01e31f3d4141a7c9748c0f5e17b8fedc5272aac9a42e12698e3861ecf10232ac6273c53e890093e563b7e8c30505dc04f9009364c76b4892e1f42e265c25783edc51f1ee4d9913aa4994f400943d2a280a191cddd88280948d71abac9d780e1e3b894475eb2ca5aa59431ca18bfea196e32696ffa0f5f9feaf7e669be57fa71d6fafe839b5cd3a0afd54cc30737790d7dc9d1501ffc14f7c39dc39a81a5e237226efa7864cb9ff1307ad85ec4d97eca88780c443909b0176f2214a32cdaa217810c588090e587181d1c067e037cc79b3c177401581338a6745ce1185552069ac723b8e23cc274b19e882c3fe11b44d6138e3901672a4f9461b77c1590959b4c9409bca22bcac26f62f23c3af51ba1782657e74fbf0bfde87ba03cecc5c3d3e2f22d2edfb27af94f9e4b1cc6ab5868aecd0d9fb0b0f44041411189bee603fa607f104e4d8dfb926dec481fbbc798a46b8c889a3ce9e6c6924fbe637951ee50581ee55de3107da76bbacf47e5b52e47154b5c4555177158e24d64c556c489ac2c4bc99f57c9a08f279f6b1cf83b5d133fe7ba1b2c2c9f6779d738ba07e91ad077ef38529e857ecabbc6a1f29daea99009101e7f7bf9d74e72f738cb780d9f749d0c19cf22e379b07cf710a5f926ca5d7efc108592bbacbb1b28cff245881e6b1ef845cfc2f2280f51385bd64da79ff41095923badbb1b2c8fbf88d293348f942fa56828614acf23eb236217796a0165a026371be45fcadc8f77c76c473a9fd8f23dd08e2c6dff478db2f0ff8eb9ff039c4eb237d6980e11f88335e97113b62d90cd00ecae1c9d9d170fc6c44ff04ba956ac1b9cd6b751617b9a76243fc862a768344d001c75b7e9ae86dc70635b6751e0bb21921f18b1a9d26b500643243f20b221921f3c61537e82cfc514f08e39c2c0680ad8a980fd35df1cc2185e24eb1819b945dc14a194927e72d6038cb2e3fe68ffc94168ef5f798e98dfc7c44662fbb8236763656fdafbc067084dd7253c2c0f6f980dc15c405b7ba04cfc620605861ba43bfc613ca89184911bbaa4f063c71628f1c486da73db9562a3747b719f5be4b66e0bc6a836f7e2d0098a886a81be5254e812fa5a19b190405aa925b3c9becc47f6cd22b315dfa6c0a6e86685229b65432441506d0d0a00432441f8f6cc8648a640c2d6441b7da5b44a1f94f1db82327e250f94713a808dbea08c8b40d4a6e20cd5f5f338435755545f95ae688c2e292929f4da95d5b1edfb3c788c6ddf7bb36dcba6cdd86b3c60358675d38c43d81f0ee3fa527aa7ca36ab98ad596452516d46a3d9aa5f1d41f5b16191e8a37d6c0a73182404d475ee2090f6de26ca9ae61be444daebb1458f84731abf8e6d8bb216dde4f9e31a8e75a73d7eed5dc7b6457adbb6ed6341b9d33e6fdcb6711cc76db9d3b46e65b6585c9b45ba8ea39958b57a5231ab7051b5115d36e097cc02592d71d3667f68fae3362505c6393addbbf6acffb4225d532f1cf7e7bdfa55ae87edb906f4d85bf690d8daf61c0d29d2f5d3b1ed8fae291eed21d4344d7bfe9cb6d97bfeda6b9e2b4f7dd5255e5f51571e3ff9286ebaf2d457fdfce4ff04d609c24bd36eced521913edcf61ab671f653da40b9e5462b3dc67873ae4e7df717a2eace467dfa54e7a05f73dcaf55cb23393916b3abdd61df6d0fb7f6f3afeea4ce9649dc2475320d89a42d1ae58e54227732edb3e2fa4ea98402ae3a08659091b129aab2a14e8b87cecc999ab91a16caf88b17d0e3018e4e2d56e9bc56fb216e6faee206420ea50680b1816ec8387b83c9c4d16c6fe26830ba8232d6b33ddfbea9ab1a6d81b5d892bea6b0257dc926b88fae80b3256b86d49cfce843ff6f716a285b554a0595f100439416c5ca8a32b83e94475ff8432f433ae5799c7c47ff332bcdcee326e7c14882b024c68ac21fdfaa408ff23c4e74571fa242dfdd87a893e701d25dd51d11a1871b07e8517477b5fc64eaa3fa0349d6ca4daf1d2c993a33fe6cd5bff3efc7fbf1de39b54b8be05b846a321c0da5a719677dc558afc0bfa3b5b2471680a389488240058cf17332f8c435a0c7c6b2a7e7ce17bd677fd8d4d5f647d4764a78bb5c5fa25c97e840f674a24ea475a6f891a976b6da3d36ed70841ef40f086990eeb163f640e0c5af4f2bb0a3575b21dc2ac12d81a804a0effed657a76f48d7efea57c5d90761e45bab3fafbd977d998d9b647d7daf0d39ed84a94ddde06097cd91319567346a619d9d5d5f7549e5a92f9bc2d9f6870d7271fce4cd15113f65311025eb2ba2be561efc6a49ecdbf206d89b375014d1f4e37b97eaec9302aeef65df8b20ea77128748960318750967b305b2ca9ea077c32edcd4c6f90ad11f34d5659f7b8cda4627b34ffa4512042453c62c25bd94be64cc7daddc9e9e1e99430e1ccd156901ca481a8000703434fb16fa823276fbfbd7973fc16dd9276196804da8b296046f9fbdbbc7641f76822ef1f2d105937cf8c107ee3d0cc3300ec3300ce3300cb345ea5705a0e15eee2df7f92bf73687cdf9566badcd597bf6eb6bb6567b008ea656194edf9b7dd9f77ddf67002441d081caaffc49cde853502c8eca4a28e504251463c4a1053c280c2c40c2b48007b50303779c10d2a914ec4985f49017efc5168e467f89a379618760949457f99ad1afbcbd61f9d04b3fc95695592b392557204a2543548abdc18ddf08a9198223f4288f22e44b42450c3ba8b823615a372a62d8c9c969a17ce8bd9883a2797692983ba821f993a82a60a186780a6608f7ab140e62500635fcf83e14440df9124793bfe368b8875cdd3159381abf30fe859b82b8e945863b6354c0d775a78073d898df390cddb9b63fdcb4b128e0548c59070d4c38cd0e7fece5e509bb3c0da72135b9025a41c5f79dec174b5c0a180fb77e6f7e7e286f403205159cbbdc755b3adf967e61b5ce7a972c10175c7a792961d275657d5b7efacc4f0e5adcdf1657e270f61c3fc2e5e0e0f35948ea51cf157171fab65a586723c87c705cf6918a906ef691f093f46db9e9baf07b17639777791afe92b1c7a2cccb4b76c9b708e95f32e95df42de2263957aeb9492f49f9ba2ee96d5c979f4873a52fd6f75ecc618ee3388ee3b8ab3df7321c0db7552d5e50867bbdb28731b24fc9b2ac46de5be6485906a4db3e192e9532dc9f2ec38d331147fa546e841ed4b98eef48189b7a0267b5d65a6badaf88b76cd33695af0f1c4d96f5c035a0c7d57ec2f9cba6204c04ede81d7112029be1c62a76c2d5a8fbbe47ff501803c63fe16ad020e6f67aecfb27dc0947737faea00c0cbde6abbe22bd08d8ee920b00ed6ae10565965c2daeb6c30e1c0d0d77db727d4ae5a6fa8d529fbead4bc5ad82c6d88232d69dcb6e80bdfacde9f293c52a1357f616c69c7c365db35544d7d76f4b29d5d3355bf30430862525afbc07c3c3f66c0ad6f70ab03d9b62c911c2d41fe5fa2bb9be4adef55372add08a4d9f8627c135632b376d3e700de8b1296ba73cfdeb8558600c08e38f92fd4fb267373c661aca9debfa559bd86def467f5d36609659840d58657bf775a3f3d08362289bf23b21b3414f652263402119533f1b9457e251287a88bf8705c154124b7d5f9c2d04ccf45064c66cb53ef9499b439e1141e0ed7fab80d708f15e01af0e0ba0c9cec0be207ecdc28924d81814015a26b610a08c5d018c1167ec8f2843fe0d900471c16cd1bb635e4c870d94671187911f63b656b63761132a2756f56bb9ea0bf4a1473285143b04dadbbd998fccc6b311c019fac3e92aced8134019298031680cb67ccda67c560c933d75c6976ac0ec8a95823236ee2698f4cce870465ab129d55031ac0ad8a32f50ce6c1c46be00b81a76671f8c41a18ccd9cc09e4dbd5e2f398b582bdcd675b9c92201ced0579421650cc806b137d66504ca7c9e66410940ec13160a22b6658be8e05636e0bcbdec7387717ebc1e3b82b29d2b1b84e5a627dc42e13044b86c24ce58244019520959f86cdf74ea0c55a3b673ce195b27b7d56a2580561f953a0bdff76cca4f91c74fb44e025c36c47034b3c86d9d300e3aab0186ff7d1f09502e0368a7db42b129d7e1be422f961728df02dcfb9291e168b497e168667553a4d9d32ccf56bcb98929d55c59954dd91f36657ff8c93f521a3f4c97fda1b24060450092299e40d9d18b3401b11370a4031a1eddbfbe5ef55564655944accab399c625ccc085bd7113a6044f578b06b3f6549ecaa4f64cd76cd52ffb683c80f60357437402036c91cb6680f167ff79fb4d80a20c9bdbb1052748b2ed0f202b20b89d05e1c24d36355b5750b26bfde215f60edf291960b8b9c7b26f895413aa6c957dd90a019247d3ee2bfbe214d9fac92ea61c0d0d4773ef7ddd96087bcfd80f37e58c5cf8269541d408dbf80abdf62df29231f60410462eb1e5bfeaeb755dadd46503feec1803ecd914cadf88a2ef2b0d62d8728b547642cab005ac6106d55a8ceb121f609e17141e93c55cff91115c84c8e8091be4b65ad6d6979bea1287f964cc6c322ac396cf456b34fae198cd921d73d7974d05c197e7bedc543f50a64be88b0df8647bf4d5c4650346d91e7dd91f56955a616fb6b67c14aec67dd1fb6ab55a2d9b823295886d15d9d66573eecba6523ad8b755135120dde1872890b41246ee9b08233f7eb46771587385648a1a6c6fae5ab7d5daf72563b26fd39a7e31a0beb24fc6542d6af6d557f6d5576653299bb2299bb2299b4ac9581bbee89193a03d621272c3a40f1cf890548b7246772e32190f582140190fe07d653c30daf7e64019688ab5dab8290d530d30869667931eab670f8cc1a2c0ae1f638c58d5392414d6c2f0138e6fb3ef5a63e46a8dd1e26052f7345cbefce412058a5ac5ae7b019a9cc79978019e9c0c5a444dcf3f9f7e0dfded35b8e5245eb620020b359fe624f410ece91578a45117948994a7562dd3566b940c597ab445ee01910809237fd312d09934240cd4093d5e792d7b74c626fd0a299f6c2c432c9e50865d25dd6e0e1b3ef4130f3d3bd83b7435e2c61e66d1c3c4aebf22a58432744f5f624f3f818f6014c5b067dc428b3de314ac15f80a386750a1192163ece3b4dc8443029a8834e8e840c98489dd2ae5b29fcfc13702096c6ea4ed73d4c72211d8e45410663ea7632be2608f3d9d1c0dc5a6f77b8b2b882c3f11f1d3dca0c4b248830be863f7e7d39c8d50c387db402b1d556e8aaafbd146c81822acd4d1889031510a08339f0a6bc59e7f85ce2642c64094c5c1d2607f8684996f6770372c121db42030e2af1ab822ee5b5dd303757527e43e44d98f351195751035c2fed89b24cc6c459c8b061c7190883830c6fc9a2391201804faf6602f5a2b676c9f49cc1e53aac4408330d24085006ccfce2d0d4eb88132747bf52db6bb164e43c24861a9c0566cbfa23b91ffe1b06c258c9b1c8b4abefecb4d6ad8c1ec342273aa96ae34e4c818f934a474499774c59d7aff863a8edf38147ee35044f1d46fa8f6959b8278f6315f39cb4d3babed494fb6a292b863b7275bf79dc5bd7d5a61ddd9812ffbb2d4be751cbfc154388eebd3ac1dc7a17093c72f3584b8721c6bc44dbe55e97293bfa73cf58230d8d3d7b01c5f71272a71932bd9f11356699d55fa8de3f8a9beb755af00cc420d4dc42fb6648cf6ae69f7c737db75c4d95e025117704cc5afa70210c6df5aec3cd8b335c754fc6af5fa3e1a61d896a3cd6ffa889b9cd2c752f1fb68cd9e5329e87d7bcf8234f6c916d76f43f9fbb6fd889f3ce8eaea6323c0707b7e83b53cc230320188cb6b941c8efb99ae89a88b3249184f31810928b6e7a9d853b348c309b6177bb6b7b6bb0b87fca96b224a3e0d87a29b81f2c109d871fca2017b163d29d81e747d7e632dc6a3d17b26181e658f9984f788d80d3c1a84e1653ee512a90595755bfae2d134ba44a35cd025f4e55be9451302d2a4963b5188fb13d65e933c50c67ede933cbb060e1f9dd500931eff8eec8b710225b5d73e9fcfcd9e79cb262a947cd9837f7234dc157086e200ca103de971b0846d7acf26e126cab0458022ca188255c229bf67a9a0ad2843da9695c2eec0b3539c3eef591f6c4a24ca803c781a4e6fe20c2d126598f4cd964fa1883373851367a82bcaa046a20c1967684e94217380c2856384c8d658c01897889f609138438f44197186ea44193814d937bce7411c463e75c5199ac4489ca13b51061650865e01c6c889335449942161bce7fa3ddf7aca2ce0233b5b27ce3461cba7c2968fc391fd842dff069dfbb90a49b6fc9cb3a049628ecfe7974faf40951cd9f26178fe7cf47bdcbf48d99ff891abc17dd61eba5c9bf4120787086b93de7da0daa48f3a4880f06dd247d5d6b08ddb31a7b85844018f20059441c2f641bc49d83771e61689327600652e11608cc90378ba4580a6ac3d1d5bf4221414149493939393502814c21863100804fa7c3e1f8ee3b86ddb364dd3b42ccbb27bafb53298c58800652a566568a55b54846eaec6dc22d2dc224c83aed2ebf7ac875fbc37caefbd362346e3381aad5aad3d8b5f7b78f4427ba3cfda7b9b4acdf0810302ba8680566c4d5b1a2cfaf8d0b5a3d8a4d7b4168e7b4dfb7ca77d34ae45772d9fbfe55db410caf2d36734f2f0fe681fed71df69ba72136571efd115f79c0fb86f798802e1ecd2e7ac711cf71da73ddfda8ce34019a5f734caa22b1a447b8faeb4ef3465f949eb388ee34aaf69afd394ae6890164efb7c38adbe84f01f6c92149b84649358b0494f84c9864888bc0ee0970a7880941d023440ca8402fd90f20145929a1602fa9cedf29da37a6c4ff311bb400dc9df6ef9ee35d9f25acd5d109fd7fef39aae3c41949efb2135e4081fb6f6a0f73e4f7acad5f87ce7c3e63a1b2eff7997ff700f80282586941e340333d59f23897d7339ee52b65b833430cce20aadedd914cce20a387b6e24553c01ef07072d724068efddf030fe452e7d0e393f28db805e8921471c60eb10c10efde797ecc5ad1f46e6408ffd62a3bdf7dfbd1236949f864b8e0170975e8b5bce396818df92bb9296a9e14329f1a8215ef71d03e03ec237f706d85997b2a7fd8be7b2a7fdc3c8395efe86a7213fc38d434b863b87977c43f65afe658372cb775f23f529e5f4ddbd46bdb8ab15589bcbc20aaaddf29d0bc764bfecfebc3608b6ced6a0045a5e8316c0300b25ae0d7705b612ae3d800d5d4aa0602321a293b2bde4ba04a57b4d8b9b0a47c3e5cf7759cb1e080ec0cdcd69d6c636a6da75d72b7c9b6eca64cf3d5f5b6ea9b37dbb6bc71db7060b80611656c0d970973c6c776f4ba5c7be85bb51faca0951b7f625ee46e9292704ddda77dc0d21e6d69ec4dd28bde484905b7b16ee46e99d1322f4a2a4fde56ec42e50a092f6ba7ff996e7381b2effd11b37840836f71a1744f72d4f436a3947f72d9fb594ed93b952f79fdc3d97bdbab92ffd68452505e524f41ef7240ddb9f9156572a55a133654a14e927be23ee4fe8c58b5762841af279f1f917ce864bc60d0182cdfde56cb47cf796ab018220f2e741b0ff85c8ff792d7f9ecbde68735fca5ecd2e7d28d7f8498fa6bd3071e1697995763a1d520e8b6bb4c5d64ac45189372991258a2b94a83a89a950fcb05777d71359b46732faf0ac702f956d2745d341c9725e9cbcb8d0f5e2430f412fb48d8d4dca0714e87dc8367ca894096bf27d281fa09eeffb50298b02bd8d8d8f17263e10f01aa1406fe30376e1fa3e254c28d02be1030aa46d94c02896b7514205357a1b254aa895b75142a3547640a1bc8d123228d02bd103eae43bed714f7a6db481b21216057a0d946d7c882cdacf1855d30a7d95394a9118c5edf77da813cd6648f7a12e50200d210f1e74d9a06077dad3fe85b3e1f21e69735f391b2dda53ee06eca28b2eda0077865b88ffacbd0aecd79d8d961cdab73cdc79d37266b736a9f44861fd68fa086cb7bc4b8fed91de457bdabb3c498b02f67a6ced49af9172e57179b88770798e86bb641d7597b407e46e794d7bd86e2171cf9172dc2f5cd680dc1f8d84ef162d5184f0a1736b5c5c4167fb6773488840b12107c4e7933dee35ad758cf6368938b13dfa7219e10d405003dd314444b535b9e12cb78b9a6cdf92d3a48091fc608badd10de7b82707447c0192add1493d5249218c8f97c4866ed27416054ed910c90f926c8fbee8f624cfe422506201aa2672a148164bd42421022b709cf6f0833e8f3f1ffb430b81737c1e6e12297b2d4ffa52f6bad71e73dc3b49df206e5a7579663b07c40fbbeb74c7e9abba404836667649df1f296d637d6daea66d13376d21214d04fe91fa91fa616be0876b73bf6b733f23b6cd35e969d2e326a981926ae3d7b206bc09ae8db9e0e17193e45e730e08ed6d90959f82c81e37b97e34d9376ce8fa91646bb86e93abd17d9edfe48688b103f7ecc0cbeedecb80d7223552cef1f22412e985f4189370f75d57fac9716001da97748eee35ace16700dcdde4117a88726e08b9c4c61b90aacd7d4bce80546d4e7780dbda4fae08ac0d281e217d5d5d74e100dc0335bf1e37edaef4dadd30aec6ccee1e7240fcb035237ed858cb266e3a81e101c0cbb74c02f0f8d32115e34bba46dcdc0e2fbdfbc4f6e0120f72417a0f96a1c5b3a968137f4420dbb3a9ac6bc43d83c5c38d007006d0eac145809c934ecc8e0f2fdfbefc5423ee02401999cfef894aff1e0c4f07af87edd994f7030eef412339bc078f98de834994c8645b808cf990319c8cdd9c32c6726ce598cab1940032f6f1906bcf8c5c6564acc90e196382c5c8980e190b40c672320693b19e1c8ee060e4861f60f4a07578182f72ce2f40b4f8c325dab4342179b5cb4b7620c1491267238614b667c4d6b4ef6c381876f748ccdd69b82bc775df8197cdbdf695b3416dd0c52669211d04200ae551be86dee043a17c9733f0507b1a5eca39ba2f9534add3bed469dd973aee394e6fc09a418a4dd29e7f61731fb90568cf692f0063a8626b5a48e82357448dd5353d4c8000144ae823c701089c7c484300a2421a8acf08f60efff611b2c908b690d06bce710f351e0913b921deb9079c7ce46e84744d12ab23f8200c1faa6648e97940f1f90ef8c6ef75c0b70e0d085bfb1c58480a062af4dd9fe8ca236170ce005cb2b52765efe55bbe94b5ec69af43aa76e9bbace3032840b24bda8b3b0352b573943e6ec83100015d6c6e977407b8cde1ece928a9b6a763dbdc77afe3875d8adc0d8de36888f01151a1e772dc5ae45ca4122f30d1c56ed165d8f2231337c9974cca333b7240fcb0493f6c92ee5c34c68371b15b8498d9a5255b622f37751adb7153aa80a8f42d7446490c199a1111000000006314000028100c8643c2f188502a68baf814000d7b944e7e6020cab324c8414821838c3104440440404460344c13c55a42bd0296b0b00087b2baf44f41ef5ea97d0ff4fd9b0a1d78efb4594b97c698f4ed937bb224fd94e108889131753d70a3d2e94da8d147471b24ab84c21985861f8955790bc72eee92f08321459ea78106f64212450d2a18188dfe58c249403d13a14abdabd2f75b3fa14cd6bf0b528f23bac3b1bbc7907893d2b67c88a45c0510fde8a3c9c3ceed86a3fffb85f6925d7ab622e605f9b75c98281bfd29a0722ff87fbf31b27802f00e2e5111aafd24d57eb7932f9fc875a6c79322f4e42d7b32c80526ba840371793aa85f3f4aa7f0b46525604098d0a502a0c7c0c2131b1206235320dec01d8ba4a7cc8318665fceb32a46a262268cd31d44aaca93e9ad22b3a3ae6d24437eb1971758ead6910444a0592f11c2dec95402e03b5d3c29bf03bca9c8e174f7f2c2985ef6394a449dabe42f489d542d35d1e450804e7de33a5715ec28910cf44999440285813e9db00f4a7a80c6343407dd22fa6b926aca2b03b929a087bbc8f63443888916b0c7aec4001d7baf2324e000e7547b4c47b8046ada2f7002ac66c3cfeb28c0b6b2d719893e61e70cc1e1ce9e83bc421d858fd140e2a70bd283d174f034bf6183800d00c4f13c0e890d3dbc19ff989c7f87554b224c69aef1a1e794e2499b8d697c3bb9b331ed8f4e8812ef1ed8361e46f95b6cbaae03b037c796cf19399c227e38a0246db34b52acd96f7b94a9685d1a143dc400da6bc42836a21cd44c842998bca36b8d7ee368bd5e7dde1472bce6a84a0b0e072f501c18b6dbdbaa95a7a4315ed95d0e5a01d417d2934c598b4e849f36062d967e3713c2646e7563e67b2003179091ffafc88acbc2c9e774c5d87ca24fc6fc6d6d44a801abd0448569c16c5aa73fddb49c5ab9bb2cf607a4f5b18c5e470ceac462d8550c89166b286e4ed550946cd3cd1a05f12bf6c980beaa3bce36521d7a02d036138c12a6df8dbd53ff255270131ed5fb1a5ba26575cba5bc77c16672f7b0c5be9f94068085afc595e478233c1e14f5d4dd8304587c39ef995592f9f1e10ca9a88f6583fdcc8cf9cea35124cfb94da22726ac621d2340f10da78d9554e2c82fb4194203c2e31b3cb23b2e97365eaa65ea36d3180c8047bb8d94693d662fd0afb07ac2c12bbe831bfeafeb9c68edc2a7e1e769c99cdabce0f430ad7c80b3118398636ec1c65de52008dd24e2610093f3ddeeef75162caeb0a6504ae2e0c52e0c99d4d5a0a1b5602fe643289cc401508115ce74051ed5a727e97dcb6fd3d754c6ed667743b83bf2335ba08cfde43eba7b9bd7f9b4c2ac67783c2559558a253ef8c7428ecb92019db6147a0bb38a4858f65b777550f7d495e06003f37a95855b9b6b6b885cc0237084aa540d5617cea0be31013d4dfe41a2fe72d0ea080d50eb566e3ad8ac65f1b27affac61c0b10e7e2301918db4bb5321863e7e09e09c05cca3d795bcc0ba25556ec94146c711e37271ae4fd79d62bff3246bafd64d73c66154bac1c6e61a7183010f5eba0040f51256c26eb908333420f89be6533c6b5e50694aa1e38521c12f021509be093ff2b21133d386e0d42df3cd6fc648c2159c7c2d91cc427ec6f0fee7374849b0886cefcfb6e007da0dca531d201d548590b55d8eb09dbd8e975f6b8fedad0bd7ce5336d04727292f426f6f4c412832657c853eb65c5b8e83825dac287fbb5f580b26f5a46ab12440963045f43d569b916081fc4a388da6584fad7ab2070d9f04d4783cef1b8955932ac7ae1e1abe483845d339152e2823682a01d1191fc9a377831ac20777d870cc938d79551c42325d14d113fe47a6bfd261e8209548cf65d2f3e15cc1e3a2974cfd35c41eb597e272f89d9a863f9c1368fa0b30f72268abed1258e4d47639921998545c5f78445421df9ba7d23953668881b1030f91a6296f41eb064c5d105a704f0b36ef45d269706d3cf53e2463ddbbcc6d9a84b92835fcbd041bd1dd484222706fbc838b406560bf83e2370496de75ce721b39c43d819017270781a36e46eee4ce1420af02dd68e5c14eca8f415fa0b220edf23f6a2d36957e4a275949d889ff7d0b61dcbadb6b16c64c405eb3ab996e4196f7032f9ec231f6b13c5ef5f37205b038e404bb9c48921ff2c241e8c8a48d0b79f8423b2df86fd27675fee91b85ba0bd6786e0486a3e80f051a3bbfeece5d8944b80dd0184d8caf316721871a3369906810b92b876e0be637e569164241c2d3792a3d18e4512dbd4aca7788285ef380268ee87ce554398e84f8ec6c1f12622a69d8941ac3a1fe5289a2a789164967b3aa2bb9acfc0c960d7dc070878791d6534268302f5c3399aecb98ad46b5878df74f1a723157d05ba114fd366dd216d8498ef2b21be672820b271c1d4180feb1c3766d3a244c99b880c1c9f6bc6f2efa941790867d6f80552cb68268131b205fc16d6f43739b711ef46500566d0c6eef0549c9984f818539b67ee39d1da5e8a5c07dd0cd024279490fb0fc669beae5a95aa94c2882a3aa534b47145e0b35678333ef422ed47f6f400b7e6bda64d3c9a0c4a7740ed516256f5cccf7ac70c17b0459d7af10b10d03b02a703b25e84d631d212e88d347d8006bc40654c2b81dde979867d4f0b15f21432df058b76b75ed78d336bfc236fbfa5b8ad8e9ed7a879d20ba6437789cbebcf2faafe89bfe5b7b1588949ec1a2c11d92e764af520b7e97d1e2737bb0af75ba789bfc3023964b71cca203fe8478307c465354e6b9093cd249324b4c1cab0604a4031eebc5b5a001ca1601f77486f10e414b5e06277d7437d8e6b9ee8c7eff04718ca76b3212a5111d3c1bc678dce947ea075b1e6eb5692993b0bdcf29f01b274a3d9eec288e5ada27e528783e0b98368648d2aae1d479e70665df16e8781deeacd13f890ec57f30c678f54f6cc0895b07145821d1bb7725cecb878bd2f7ea25105fbb187d99759a7b405e04abe534eb870dd51b54336854be47a1a2660fc7cafefbf3c5dded4c008eab5024c2975e0e95d334a643b6b3a672a13019f0ef8b928ca8b8f5672848c2ece5329d9d44a2ec083db0d83db8174066d3a7d77966473f9c5b01d924bc94965e1f92ffeba13cf49070f57728ff53a8a2a18fb5f02e9fbc3baef2164d6a185076d0253fa14dacb244f5255569b1261173928709afeeb027f7b71a382672668057c92438feee38f262b47d39eda9631e864cb03c12edc30ccb9cfc8302654932ea72f65df3299b34c0f9fb1554e879d84262cef7839c0fd08904ab42d7d0725448822704a25dbce923d805d06d97c0911721947e7d7a348e5010b52b987a9e6742aca16b0c95ea8ec32a8ff73e3602f2ced5b927e99541bebcf063411c8bb26e51a2db16e59c39f0b6504108961225e80f44aaacbb6d5ac8b1f3088408191329240dd18d8e9ebcfd3aaff8dbdcba7552257f7726c6a536309eb8a88107918bed50e3fd1e00396c4fd17fb700cc790bbef6b80782375ba79c971b3872de1e45fcd8b93d7384d093c3308a1804ed87a60f43d6b16302fb252113cd681f995ac333158ca960dd219281be31c25bee65b136446b978a6c36f482de5f2ce7d658200d55e6a08aeb9b4135e681e4ef2e8052ac3f4e54c5229f768a24a70f96539c194ddf511457d43038399e73475b86942973678759cb2515a3af91dea801385e198921f07b3761222fd5dffbb87a85273a6c2a5eedc8155da56416d0e606e539617fd6ee62d84e889ee2137726739d6fd69bcd77cdb7579b21ddb11446c487f57d1eec2a85f849692188d1d15e2c52c6309e8f73d6649e3c656cf82c8e8163ec16bf03ea1a82fc59871af15aff80f3051d96146c21d3c6df76e282b73c18de1868ab2a91db069a3aa8d02324b61dea329108dc120eaa84f00b9ff141a8909eeabd6b2d5cbde2d0d4a8cb02552ee30a7c5d74fbb00b62434bdbb1cc928abf82f7f6ea6712219c978dcb4afb59d3405e9ccf9e8d92d42772bdb19fd5a5ff6e4c09543b1ed179ed40b37ac2c4a2d03d87b0b03bdc7ef6126a7c5dd4c90e2f166c755df7180237f67a0d50229d590ea0ee2e4876cf243f29e1e1f21f125e272f32c27bf916fe581382f981fbf14f97eb40585732b3ae4f2dfdc67594ccaed8b789cc1ffcd21bc28438b726038918483fcae99ef4032546f21a83a9a4d15210471e227752b8482af58508bb9084ba34f256edaa0b09deec8fb01f39cf8688eec80c60ff2da94c063cb5dcd9a80eda0e8cf12346492fc84424b16f0fc4d842b2b66f9c92986e2e6324b6246a62956d6a666fb8d1a295ffe6990ecc5464d1b11515be315c99e1262a344d39022f8a8d5c95bb8cdeda099a66d53cce751b9e40142e8f2a6f2297a74a6d73784dcab584c134b169d74a5615cd05362251cca8162d935d68810376e27dc04339fc3921c6212f8bc43e486fc7f2b971dff51201ac4601013a437a62bd00197d0db02e199115ad583d4ba001f33c87bb661bfd2d73a46f84efc41f28e0cb3beb739d38685babf6620e90c614b02f36b79a39756bba126e449f019cc158902766a0f13803ed4733d07830a3c6e3340352045c4b786474acf6114354950ceaddef38403f71802d768cc54ca94bd001b31ef70806878337b49f1dfaa861cf888a67189832c56f67fcfa2cbf99e237e67e65b6df4dd442affc86e107317f249a2552cc11e95344eac922c11c91c6137f2543ea364412534855c2d26d0be4192d4fe266075ff0f6e208c23edc40ec9f7869661a47ce340fd40d91a63ef7810e7408e04544653ef68d7b53c98e44c09ee41927f146c8c2ed7e63732d4dafbbc28580100714d8cf73a1395820dbc7638139b020d89f78195d08dbda5b878ec55cc985713a58c88bd19cdea9f8f5f245e20434fa139ee338130d3d4660b63df72eecc0c0a08c0d9947bba9383bb219da4f05e85146c141f520ac3fb999e23f141f2c4ff930fcd6cfa9a8bd7b1254a599a3c7b9e6ae50cc1a14306813bdbbe24491400446c5749bd89ea86481389e6da8be809a05b4b0123bad1c20d6deb957405e508535cda0b710bbdbf61f08a5769727e1a43fe7ef27a7a22c13c46ce1c3e18f0f28da2c1b1c8671c13e2d880b1e301f994541f0f3aded5c005e58c7abf62b08a3bcbf83244b3a56a2e52ebe2ebe8abfec88cbfd2da806cc5de270336ef4cb92834c83aadbda9b2c058d0442444c213e1a7c1fc8b3eab136b556cd4f083a2150b7fdb3034dcc6bb425728e6bf5e4a499d6122f4991b9c3805615be54b1307478c7c4366dd1eee22b4647cfd602b805eeb07c1aa31fe1c2982a0efada82e57f9cf7b89dac6cff24f567cc05df61329f0b2d3c8a9073e8db227910b9033c73172994eab9885c8e742c5911a59b78b5a868cc36ba28ce0182a8441f6a024b1cb1f718e674ddae8985477659fbbae10ac3000e282a73c355b60a6b29c7201698b68c7ac5589c4d9ffb57544437ed757c3d4d334f13966dd9f0f535bd12fc2c130488bd8a01cc4b45a4d78328550118587a7af0251229a4f38ec0530136ca41309b9e5c571b8e2f55e513eeb2969d53b2e836485846daaadc032eb6fa7414112493fd6c4fbc2ed494ccaea6b52fdc8caaa6047720b8b6305f7242fcbf3df69b8ce63222f508a7619bd4deeec2c56c829978c1208690636f187b872affd23c2578a7fe35328e1e70317b1a98cfb38d7c1e1f097316b50ef60c21a6895ea3ceb8dc099a05320d23b2486c75ca5edaf10a28b40f53885125151ba9fb781fa1f5fb1be9d181347e1d1acbb1cc01aa54c916eecb245ef2957cdbdc6f544f3ed5351ba4c86b95cc53f483b9a70f82d2412e4a1aac73bc518879bfe98ac0708a9d637bd82fe0f946906f2f88da8d1b0c0f222490c38f0e934de4fed5d983cc6ddd94cf7923cd57de72fdffade9a04e92f51be4bac6f58e33fda26ad2bbf26efebbeb84e1455eef8abf83b8db54c7ec7d6e5cd79d674e1a213fc2d2fb3b5877ddd3db9fa03ef018ad93e28a3257ec240e0abd291d74004dea2f3f75fafec95b0f1ecce8589227f57fca64be8313596c540506ce70a7c28183579c62975daaeff05031e6841c933df187f014e6f05ad5b7482d439c8e08e343fad957214e16d5165fc876a0d0831bc51c0d3f03cf339d24f71defa756211a94e733fc4ac86e49e6f7f56de323517b03f8425dd2eed586033f4b59fa74a4ec6251e2dbda71ca3ef7b1e7b931a2babaedaa14a3ad0574abb8ad7d947eba36776e77a7335e6376a7c85c6c05cb728737e2958b741f1afee10784f791a0578baf653237ff8df762f53dc09ef25e88aa324d3ac40bdb96478dda1357909c2c6517cc3a25940551c56a90a389e31d9fbcb1f6ae0bdfb6a2009ccbb6dff65edf2bd8fdfb2170c6043513253ca0cecc12b13d25052f1850b46a07e2095a7d20ccbbd77f024428300b99bdc844cf0c26a34718104789b98940b80a831946bf6b8fbf205c702419c452c1149a0e6d7bb7bd14b33f4040ebb22398467d6889fed0152e5003edf4ec6fc4812abcdeaa56b7a316648069f1227278123927402f4d69e53fa2e02c351473ca5c1aa08d5a36864c612b47393d39ac8491052adaac782c2bb21987ef66b31ac049e9265b57466222678f672b6feb047edd18809dd44ab237dc9ae51fb263c825679f6e6864d1d25ac6ce8aa32739ce130b368984896f0a5ba0e4100ad559e5c98d7b7d4db90660b6f449af6b79cb5625c772169dee2075bc0cb0490ed22e79e1bf7c058621aa171b1a81a3b3da36df5b8b15d9d3ae4c305bc93fcb43e3c9b5343aab577ad469a0941800b9e62db6ba1afc70426fd6cb9a01f4caa4331cf5cc6316053d8d95b6878101f5b53ebde8dd438fb75980d0510f744aeefb0cfc181f2baacd591a9dc3ae9c85550df670c7acd629409152c643ef1ab9bf56c7efd814af7e69314030a7eb34d57739e5fc0a89f706c4cd59bb933019b683ead60dadaec8aea4c17ecbefcc1a452509f1edee434755f0f678153d86daac1df63e67f53e3072ae4e809358527b960d1c4eb42bca90e9f95c1a57f4e68b37843fa2af8ba9969f67e8ca260589c918bafae30e45c84f2af843f2b4429402aaff753b162995a8dcb6a3ab21442f55275298ddd3ce192746ab61afa06fb3455149748201fc815848ad51cde23019e26da9a8a12481943c17a1e9e35365c6ff0395411b78d12b70c9fae733350c77b8620d772be6daf120e1cf4ddcb0e0b45454744cbb945d575289d1839de9c2718f9ff6b7d160b4bd4e149a9795d2c5d86ca3fd7992d375b92d1ee58b462072064422b4e5133c497385260886aac4504e96870f0f1e52526adc99ed9f305f88cdce2202051f5bb8af6a61f84fe3753abd88e19fe94570a5cc42f43a51f332ede748f1d8a7fef6af70f9f66e6bbd347b8a64db88a961883dd09fda9806ac2f98889cccf73023ef03873f255546021de4951642615e2bab5f80cf7581ffe6465ded0a40f066213aab3731ea0b3ca96144794d5c99285106d56aad6b6dc4e3cf081325c9b5d32517704ef19595f622396d00baca3e918c0613b2d594ed90c782d2fc51d455291cbc555ab92915f51353168f375a6aff2170d7be1ccb3283a150b29f5b4be9b1a20856d2766da3518fa01c0b38b3edec0e3b5cac8d267ab21df1bce45234366c09700659dc526177bf62c9de0cc6bd7708546d371000ed0d4e0eb0241a69769416d0401c00654b300af17c27d4726def5992ee801d0c572f7ba6c2ce371f9a246a240974af383d6012e30d368f9e56eadaf84f526b0c54fb687be7fb327eab82923cf1ae86a687282d6785b45c2af2dce0aabcded6287fd57cd83506a7a91c06864a7070d85fe11589d1e90e98be0044fa325cdcb3a1fef061faf22c5ca3f837166bb4d81a709539ffe71070d984c4172404ab593d635c39a6c34377414c0421161cb28c854c6b2c25b9c3041d6a342eb66d98f23de03aa3aca389ea39af94214956666a9f189cce16cc151be8ea8c3e2cc5c130c60d2da465c0760d27d9957f5bed604d798b4a152174415ca87f8d63f375324d967a01cb392447511e50ee7ddf9eabc5e00de5d32530f7ddc950d7f89963dcdb07181be0398e57d4d3e010bb851e7e04817f215e150bf528bb21c448a47cf94f554868ce59d37a602ff3ebaad55fac4db07aa6ab56fdd9190ed678d2bc89e17934588eb9866eb87167d96e11b68f6bfac30a616c0f4c4c23675337df9c34467cae91c90015e95d3c23a30e99134bee7a6743bc80834280ac89013c50e31b19c2abbce5359a7d5dc2db9b4155f521d43226f48001f5e1463480c874f11e305b59effb34bd57a1ade4ed6d514129b70d29bea372da6c21ef3aabc5057dfba4cf3af3d968b4271ef2b4cec880964b9179e989b70cf084174faef8fb51db3f6aa1585124751d4498355f6a5a4feebbb4c783fa2a686734ba4a8838ca2c56ab6dd8e4bff0d1ce125e2e9ed92a778ba4d8463b2e80a54234ef3de90055a172177d04f2022452f01099eba3fb754f84c6e12f61c1f4780a815e9dd0ca813747ee098dd604c7896dacd8f9a1d9f479cf2499f69ca428e8e7fc5dea00ae214a1e514173e294de5c08e5e9b654940c7a9f0a01c7cdcc4bafe4cfa5e892708d88a34fddff5a3f9d46c18bd3d55d2cd359714f1e56eae64c7162e12b44bb777603b6cc99d48fe2579930d4c4190ac8c2e9247371b50d5eb2223fd1bde1b86396c437cb45a464918e342d1d91ae748f4ca9133a49245c240f33a51b59ca426944f6e6da53c2339e6cae870323bffd85f923e78e04783c348258c2261047ed587bd2661c936b4af5c6e24daa6d4bb719cd06fcc4979c869e24121822da3e38a42205a7a6ec089ed51637401e96ded16c7ba69e6630a0e74a6a0ee6b5eac270631a872533a740bc6d7f49a8947024594a69b01fc13666972d749d3fbeed8db42cf84f361d7f10dccd6c7b92cae63c10d9da83904dd25cfa19bff9fcf2383e7d3f57197036ad59104c489bc0a8b9900a423a419bdbf013dd0569933a4603b61efc38ee420ccf3257176f5effdc1c97687e479dc710cb35d3bc5a51e48a5141d38c808cb5ca956a4486658032946eade9fbb5ca1ae582427dcc950139116843c6ed67a68b39b7fa0421ab12f41ae886afc4fe9b1466bd23cf8596653b42d355d6c1865d88aa97c58f9630eeba8e906ad5aee1cb22caf3f3ffe47403ba2367e6e8e358c7a9a6d49666dd7964f36fa9e6a51c2bb483069996552c2419d2cac45a68907d38325dd3b8a6c30a1e9c75a949cc53f726270c287e8aba361927c93105b7fbc1bc2ad617c353dc09233498b2005ea1506b87a527c7dced0900346f8e3e455314bbe9a115b03824569ba96f164effcaae08d51654af98d20300b5ddf7c1d11d98050b5d677b7336128dadd9f504379328f66d23c30ed175c4976e1fc9789c4586579e39b4dfcec0814fd624a2a29e7c27d3848df72de18126b9ee75d28d3b548f6dbd78ce5e8c1144d20b0f358ed5a2a9a7ce13a0051d532fae539c2c9c9f7f4f3f28854018be273e6842c0117d576a05a1a34769b2c57014b1bcf60c90a99b454d4388ace5957a2f5ef8f4522fbbe783cc3e0bec31655fc686e8cc8d80fca97298e54251c4b3e5485ea98889b57f20d22a3c5576617ccebb2e6fa152002a83e650493a6a3212090871a00a5f8c5787e1c18140938ca32e14a29228ad801bfd4f9f359cc1e54fb8a9548a164a460e0a27954e4a053f1f9ca4e4153ad694ef69059e53daed800c8829958f78b2b40fcb7f1b3484e46d9a86494e8df8ed0ec33725f63c0b2afc0fc41a69733840ce0dd6a89f60e852050d71b7101ba759c74940bea6c43705bfc6c2baf6bd7120bd7fc77dbcba5712ee50c931f48dbbf1f73348c1515078b69b649b980b192547f8ff4eb9d61fae331a3d8fd5c7e2d50cd1ed64b1ad6ba1753c1792008b67273b499459bbe045b467f622e012f1e16ecb92cc7915b13ee428fa46262b136ef845142a02fa8c44edd966cfe6dc30f39d680962b15c7a86e3b5122a665070a2530082c54219b038e636d5f787d40c23db41cff3b40343d04561acccd44d99e85d86804e9b7ab77747f75cf8ff0355c9e58e58925ca4c941fdab90c7daae405be3f5f5c385d27f156b1bd6ee37a745dd3f2874e1566e351acc2b2bb7705bf0484c33a7476941bba236910921af260ca0c889572a3c508357bc244b762960a521847048ec3c725c0b7d4de5a814370272912f49831893dc2943fb8d38359611ec236e5aad599f03218ddd217547a193181576292782a3d91d5ee4331f6a2fbc1a20d79545f4433a2d5545cb389e1f68588a88ba1c07da439f78d92ef97a08bf5531c3d069c2c8c34e2c754d999dcc9091bd814fe3dc40dce68d5cbbd42f198e98e680b08c3f0c93e3c33bf070135a383e90c2bec60476fbc06667fda1e208782192100c399c097fa8dd9e2e215e2098953e4250deef717bdbabd49b17272d4064474216f58f4fbbd2288dd053fc0410593b6dc7287c26db9f3b6049c135467711423e0200adac1b01885a14933e069bdb6991166840787c9cf8624ecb6e8bef9bfa3f69f8f82899ddc1607a1b34fe9e041193293454d8137e9c527bcd932b120ecda00094f1fb7784d33c0eb1b71f322173539ab849e389a3ff674fb492ee68a37c8737b959555d112e139e83bd77bdb0fc1caa60c6d664fe624d25a18afd01097103e0a6b2c864f0e36f4adc0be425c744a18d187b3b564d5f16e64d634ca72cb0957559e3cce0c3b476ad13c0196e90a1c3f6164b24870bb2edd2f665bc0e1fc33e397eca5a70397626af7724e840ac25b787825515a30614e7cce2e2a68aadbbeb281e8d9830f75a7343906c92f16782eb2d9a3b4e1a103221c21300f20fb5a8d04f64030afdc4d011030a44a84db8cf8cc2a2bca75901cacae90508b10f996b9ac4d889b66ebdb724fd7fb77e2277fee247d837d104dabc1592d0ceb5b9c3f37c56e65c4f9cacb01551a8c700c8ab33c2f752e04cb9811783f5f3d43a5e4a45ed9aa5c82486c39cca9bc3d070f10137450c049c98d8300cfa883b5244127d4cec7bc5314845534d25a2081c2b3412d32ec56a923e2f4542a4cd0efa4de3ff71dba0c5e45cd2fc48c7c373573a15216f2a456dab4095088f01c2dc90794325277b928315be06f18fd40d245bcd446014344d75e7aa9d48bcf24820a5284471f2c5e641606e59fe10319c0dc19e66bdbc664aac3fee97fd2e8615c55866ad44e7208b80b0bc6dd96c567df9b345c9b37b9e082a80cd080a61963f6ff787d435898c06edbab3d030f685375060d8ab084f124b044823b15efdc922d2b75d09bc53781cb5712a2e4d0c105965151b6dd0e43f90e71c6ca1e7ff7b720602a0fc95c91b0853ff5ce756ad827e4d451bd4346f3be0545014aa9d051e08997ce8045b6f9a6e85027b0bbe8c32946ada42d72eefae5702323cf6ddade989ab8b10c3c1f937c15d1e0ce2e44700c5b6f975ec9e02085ba2ec44f7d23797c5fc54cc325a2a0b6b402106562706552db60d9ecda1c0549b4460a50064bbdef8f6e6567603ed3a8e2997ab84da3104db48b4e651337e0aae7a2e194694736385dac0565f9702b56ea631aee0014fe5251ccd9e5a6b58a8fc7845bbe75b7b1b3b642ec2647f0b15e202158baab97ab251d79ecd45e4bb25b4215954b9e36fe05754f8b0ee32b7c8cba9ba7a7955eeef45fd250b6a3ea928d49fbcfb5d2dedbcbdfcf3a1d963f82b96ca4f7fe9a5b8077b7952f99bb40b8901003e28caf437f8e4c5e4750a6515bf42370ba1757ea3d98eceb0bf982a2bb728db3b7a910dd83b53a6fe561b1a28009f053ed53ab7cf6f7f815746221770c3df05803545e028ba88e6acd67f04fa16d9f3517d074f6b7eee33398b7c1cf9b1cee7e988cfeba3211e45b44b5a346c7ba45dff17ccb1b78bef5d11399d38886472b1930689528514b6d721bd8b986920977a26ba6f0ced159b456456170026608e5ef9a26fd44651299ac43b7e1adb0b61c3091ecce180a5575b01ed5d27dac0123c3ff550351268198f9dc63df54e4a4044b9201f31ffd9e8d6aa56a1ed193ac29cd733e4e129aada4ae668c2f1ee9a7e8cc15f3c329b9d367dfeb39cdff32dec18aafbb541ecfbae6fcd215218d40c3091f2ddc8452017d206dd0c37fe1af15049b0cb76baaedfe8dc398283272cf4339119f228b63a89a344bc920f529ae9b12c0813fb49cd348add4b20cbe3061d2b00b39c33f0fb28ab590a8fff95682ebbbeb3b8d4e23e33350a8726478415f146a467f1cc6f6a33f488b89444ada89b789b2c29671c02b6b980428f4815dfc435ada2e66483e1039a9a9b0ba7d719ebe21ab6cc4436ec1b4924a0d7bb28f82e501d02186daa1e3871de92e7f312e520a34fdd4ef8dbce8e2bcd51e2a25f9a9fdf7fa7eac0d02c3ee17bfbada77ad23d6db212cc8e49499facbd50574390fa95605b480b599943e60570630c0040d91b5f4669eaa8a2b155acf51956795aa72257664802f5192a4b61661667e405d0f5c7ca552e9b1301c9915a30d0a3e73037c235b42817cd083c64464a8fd5bde921295d906d8845c736b73a31c559c5543ed705f7a6aa6c30a130017a88a530f7fbe53851afa3c54c9c3c02b5c315930b3f453f53b866e8fb3b9695b9099618da12bf1da1a69396b22cf3c5c07d204a5e0c3007bfb56a8a38b82228bde4a261c805cc191623c7cee01a96ee1538363b7f44de2af6a16ff2f00a8d464b26493210da4e42d8e0b80337948b9c722bdef702ebbf1d76bf0c157425074d99e00f40d5a896aec270bf9bef0c493f62f19121fab1a74f00574629cb856ed28c61754b77e0baa02790ebb0020d80dcf5fb1daf2c16d64af0e759d600744dc1177f8c67d4499bb5d37414242bb7d3664989096d42190bb5e9e88092bcaf21aafd13f038f5e348030a15cb2b76b60b055f782a7e9bf8a9efd530bb45324a12be7fc01165f812d21d65f33c536f44a3171182adf179e35dcd30e91a3b390235efdb92e6c9850eec7287fa4403f77eec1374365ab7cc9d63fd293ab362702ddf000012e6f9021a44b294c2a28d50462389c82c6227c9aa1eb548ff4fbc9a9612973f6071f5182f4964ec328a19c938f87d0b3928f1728979df0bd18845c6359ad0d18712d0f5e765c217b129e4fc4285433465c7b7a2bcc19694b76a8c99941b028fcf6c1f4932003280393dfd613ce094703fff3c75a130d4c4f124a9733fdc5a8735228c5d7dbb4bd5a69354c486a4e1e87358b1d04cf8e1d19549e40225c4b6e10b86765bbe2ab5a83b458db1e01f58f649f18f54d5a3421cd317b59a078670be3007485461fda7e29a6b179ced188119aeb0ebea391f680e41071e5c15200aecc08690ff1a63eaeec19908117be8bf0097180c7f790fdf8aacf01f7a99e59f2ee262045e643e696b8cb7a30c573bff85b199a10a8647c129946e62301a57c31e45f4040f362c45d889dd555e436422eca5ada4fc8da51011ebf7b3ab6bb456ec1e87a1d4c456baa80471185a36118653e224a992c96b61f84235412aee4586d0384316e7df63f06547e056dffb1e017e9f7f18275998ef5fe59396c802d14bcd719dbe828d3f495b6795f750a744f5f370db416f16fde92174209d2402d8fdf7ee329339d34d54ad579f70bcd507f1bc2714c889a3d2af43617cc5d99624de8b113968ec239e9751709a07fd5810309019cbaf9c65d04ffc6e0c2921350714680bd16d458c520be5ff2a055b4a2654849a48690f4455e012ccae26eebc20ad3fbb066c833dbed513ba912b018d048c073018712e68e8638005f5d47fa8df43319be2fd576fecc38c003ea4510d55d52dc1826c363fb020ca9ef47abafa240c3d9a13e0428290090f2c106e768d1b0a4c4a88e50f6cab69c8f2ada8489f7509ca9e91aeb1305066cd1709a2115e056995c59c71d274eeb02ca4616cc8035b49d2cebd42f5ad28e247970b305430d995cc74d6832cd007f40c88c74bd616620333383cad31e2833344e82af58e7b31bdd14ec652e9de6ca922a326ca647abefff1813124006eda1ae412e6b097bc171bce585144cca1a03a299a3372f7469d5bce26722406eb0276387dbf0274befbaf2825e7cceb2f4d2bdd68a0e228cca25cc2c835522f94b070eff0a87d1c3123bd3a800be1ebcdf408bf8c3b6a632323049a2880a83ae238eb87f3c895684e27774785170ea60c15bd4eaa78cf8511cd9ab38572c5230993fb12c5e20ede8330cf12ec686d509d02a7f8deaa98229b2c62db4d603763d22a3d19a57d34c0e8c0ff5e6856d24c106a914cc49b56a53a591126c16cf3474c8e2122f1e43902a3145dd6a3334d3b3e9d862293cd38d763eafba342e6c234320cf044a909dd46c4809c0a6b54ef3c530f2ed22740ba978c1b8087b4752c400129bced424efa5ede972fba72f7a242d2bca7111d1904c8e6ba9a02504e16de0792db45fe5b3b814b0bef9130e6e4061eb07c6378c0b090e13bef64e415a6ddc3bc47c89d9edde6baaabd3765ab3d94dd71192deded61421f3347996061dc0bbb6a9780b2cc5f524d117ed1c45f0bd2a81d51e8b359703d2011aa1f62a2e765c19a5815b70422010952ff94d69c6461e4ac78974ddd237b17385758855cf14f45f6f232b1e4abadae9cb6f3b8784329c71d7bf4d458b05b8bb8b8165e9749a532df00b588c43a09f6e6ceef668385a6176763ead4faf291b40838b9e260484c2962851e334676118698115d7b5611531aab867781d3222aa88e858a1024025f8bc0cb4da2c49308c47ce13ec5637f146a42021b3da762121a7f74a48e958e3e2e524a2a59e82fe2a7afd18570a27a263a0628caab0d3d9c14a8741c16a58ccdaee9e491bc4944e0e0243eeb8e0b28a0eb4c2fe270b2e6e939714035c94700be9b38d15d6f3626c7743688b659fa9a9ae608df912a7f338adcc4714bb8c1b9d75acca8b5842a3fbaffb6f1505ae54b1c6958fb06b327468813d4e8ca2b5a99a2ec0b4695c7ae38816c850a329da89ff32f2411d7e19c85d8ed47da295ad52f0af949747a4bbafbc82c586440a99e9fdae41c697e1edcbf8bc9870cee4628c5722c46ece4655aac8479d077cdd1110864bf7518454abcedf59138e7e9708eaa655a0783a74e895b69b7e514fa6dd462490b1ad9dea68b065a411ed6ade81a36c26b41c966618823c03f727b63ddd2a44824853e8a4e51d4fc6147b382c93b86ebd8c34e00afe055506ccc639f7ca17c2ad95d53f17acce4c85ae4ca34213333bf24571d0b57637b208dc0306075d721eaeafd1f32485b9482b52d9ef53cf20ac3c3af4a0909f0e22169118c842758caa8138c246c65f2738408949b962e6ea957deed77f94cd2b131d64436a7e80ceb3a99ac7354eaff568e8716e5c0f4ae13431c62290f91bed42a6f4dd848ed9fc931f84b9aef685a491447edb694ecce23c6d52e94f77b82a20677a5f8902226f7547eb7df923961dad5003e2f647caed8382847218a7a9503912d0ad25f9e5d04b1a7c8aa5ddca1a8c8f84fbe7ef8e61a6a2b00d95363c13f286d21a21b5becfd59b5e836c630385331049a1c3774f231731be5c7312da402259dc7f776dc72595e20d672a755b538eb34947f1ce29c5f9d47173bd584b1201df46077085ee03bce73c7d76615b2ae701111b6bb909fb607bcf602dc5c7e544bc656f6183fa1af5539c07bab87644e6298b0ac06befeca7090ae6ea6b582cd7595b23c18bdb94ff9754b98d923c9060f5062ed5d929b0523a87526ccf27c55633e9ffbb3664bf88e83420b4ba87986e71d3fe49d92242a8abf8a2f0c3044fd1bff06009b1f5868d8f7f3e9a7162330784e832b0f78cc7e945b5731c023dac5aadde0b4cd6ce899f8ae279bc6003c44d83e85f6ab61a8768c8246cf316aac57c47990b9233746d666e79dcd5d358240c1d9b804fbb99a4da7afd55e8b57da9f9df8041057e03f2001264abe6b52b3d93402b1342447e10e06a349ec8975b6163e608551af2c94e9ba99511797e39bbd6f792589e330a9d559768d830c2983bee85c9ca4c58ad7ca828d5d82e128f6a517991b38bd7fbc4c824c4fa628ce9c729640c1324d9acec64da4685d707269a0ce9d170f5c14e81663e189ffc657f3c57c3be5af9438d83d341a7727bd5f19c6ebd53c3c0c46730adc8ca99cc7d86947890bb55fd0a4a06910c7838a5d18c851852150ae7354f8362bec5b413b4cec108816c8a0b0eb594b49b99cafa930a4113f5f9d22f01e7b9e130b03cad53061149c4314f65e036de5d790c9128a89d78042ee350399e19d218d374c691f068329257c99187e378257d6e3ceaa65409ab70cd24cc946bb71b742387d1de255d2720272a257f7684debdc19269102556227165dfc153e734904f530548029992d00e99bbd9ad8982e16a41bd416c816eb41404025de82ae51475ebc95e214ee023278f171a0034d44b3aa5cf2a1de9df25a0a0d9b84752083aad63e41d86eb50eb1c4116907be23afcfb849cb6fb938abe1eee9298665a5a997411f7d857ce3f00ea9d8055e38d81edfa9de9e107ae0d86a214504724d1743aba5ab67cdbc2eb13305a82ef6caa4ee4d3efe89d66ff3a2eae509e654a5092d98e2d643fa2b5d0c3f937aaae34b82636c1fd6ad22b94a12f12f7c89169eafbbf5bb0612a09c71877db657764fb90fd0d5b7aaa7f2eb9bc9efe4b3ffd2f89ae56b6804329007bae2dc4de50ed5c1737ac040e61f8f3248c5d10c77148d8d50e61edbedc6da276456de5f25c89ad019a00eb2533dcb1c2ab5ad47e6d1c75c9ec140c89e09a6811159958205b6c5406780f50172763cb575a6d7d79b52f241a008b912dc8a535d81d290992bb26d822580356fa11d39a524d4eb2126701a0062b1e9603023cb52ab6569e22e2d5c1f50a409cc4c60130803b9b18d6e2637a6f1d80b06c75071e5b20030106efcd4320b3e7735c37709bc8b19035358074590cb45e5cef33c92c059b15805730ec868b0f4850ef3559f32f37d3f3224db3354fbb8e9f1a3263e29b8ec780df78752db03bf2192ab93c680eb158d221b28326150e641605ddf94f882fb892acae41b0efcd90a450b6c6fc1985b293759af35380fdcbcc946d980edbbc5c77c25da7d52793efdb4ca7b70ed4247a7f99dfd1ad31ea2682bfe82624ee55f48e04c8db36513b1d0093215408a16573cdd740778b00942ed8e3bf97e89e8b4c0420e22135ee9e611cbe69349eec6d70d5f556d0d4b21c15eb9acc1107b34180f8740a528b8ce8bf1c2a1248643f324dfd214ba3ccab919a0439cf174868659746cd9282f016f3485429a9e64f43f44a0e168113b9d7b4213c420bc504efc64b1b15dea314c065add3096915413f83367cc78288ab946bc1ccb4cce93df21d1a6a56f4e0cccdfd901a72bd62f35390570999dd117c4acd789649d0bb2ef4f95ddf882ddd4395858798f517b0fa20d27885fa81cb64f5c32f8e437b09dbfc30642e1883cac7b9fbaedac59a4e474799cc30025e2a3fbc10c9ef041151a94bd6b32ae79c04d513f551a173cb5e6446494f0d55914a929bf7386deaa7334a2400e1bdc1a4786c85143e1cafadee6bda1857f3be62ab9009969d7dc1c54881589ac64f181d68e3eb4b26b7f8e49e26cacd4d692abe3496fbe4fcb241e045ce61064e40c7d128823f5c61b849eb9c3a8e76815b604ba492a2efa1f3266ed9b5bb894c3ef46ffbc5866d58c9dfa94604004b5b8ee44d64d80b6d249b706000e40364343074e2abda74df6f115075f766cf6f4432d0f24f939385b00b6050de5738e091e1664496e3d1a6e15d8e410c35b5ad3b253bfd2eb64314a7c5ac9d61c9c2dc287a9965f8338317beed7a5d163d9053bf9054d941628677b31e23352955d648f8b69017bddaa3cd5a46d0262fdd16d4e5abd4871de57bf47db5aff3fceae1f19ffef420c9a877a6b038fec498b425d7deb3664bf85431d23fb9f159ace552841b9db3562a7b292c8bd30d349f1c5bb2a623a3c3d075905b1a0e515b42a0d31093c77b660ca0fb3425a16e9d5c6622a2d7003602691b50c7d2158d05a6893cd4f0da358afd6bf3b75d901032c8c22abab95696c39e142b01abfdc6b5c1f3bb4de5608554ffc5a06f2752cd5c3a7899e27d65e40a5fdc3ee565da7486a46c0878375ba8539947f4f42adf2cc20d4ef8c39d1458449c3b67955a7ebea29790f7aa0f6f049be95702883995bc3d445a871e84dad606550ede3dd9a6eb5bb973f05e3a93800693c8249ed19b6fbe295424965383a0d6d7c23cca1e6ddf80052e38faf646916f6f2ca95b8a9568530ccd0277e3c75b362305e99d717184143720e79653bf0f8c6a3a1b319e6c4586102af16e05909108176143803575db3ff6025d68fe0a47ce1d6a343c1790ad3eeaeb4d6f3fb090c9ea3c82f1d679873478c9c65b8c8bdc9f851d023425a535dc6a3577b9ef7d9227ada95da0dd67e4c812ae4a3eac6f6d61c98778bd7ef076af2275da14644c001df4b62ca7b8c5c80a9c524c71a6b6b8f4954dd5f0a5b79b0360761625364aa6c4b1f50597c34729b7bb7b03027b406045998ae72e549d1de3bd9dcd71f02547fd76b66fa77249df1e3598a69784e7abbdea04af5cd600be482ca3ce7324dd2318687087505e88348606404ea2a3048b9bff8fae93a9a08d44e51763ab8f54cdcbffe612b905b6a165ab87b140da451ab00f5b0571f799156d5e4f140b7f2d879fb8b7a44c0e073b2d7cc7b2e3f222473db09242eec5bf256d9064461dcb65096cc306cecb5a7f3aa88fc78e3da752f37b2800581013f95d8536760460a0c73bd2cacc0c041a9564bfaed1870369a8911d1bd68c5665418de562489ec4d7d5f9c9eb899af23f4d122b52c29538e6fb5e4c4717c46b921d47b4e9c2d927529eac2a160641074b8e059b8f8d82725dccd482ba52900f5a195a2ac0eaae52a17b1384018d2e84517714560f73c659449ecd83b3982c9714b2505d220d9b2e9940891a7d4f984d1b0a12440f81b00b2ccf3ac5485746840f9eaabafb61ddc71731f6e8289610936dd03673184405e817182128606986f5fd65b6c056d6fb29763675dfcf3d2728fe0094781660270f0765e147483d8ee0ef2209f80a3be784a2c88540180479c40add3fde6eb40ccfed117ff45a7a8b3bbb348a4cbb88cd9badb603325c7706092f6b561cfdfaa709d29132335bd18c6879771e5c35a9518665b387abedea6b97eb029505eec2f3b4eb803f4a5999ba7c39ae17b1e8b06f59e318ba7a79f55bf67f3e3af2f8fdfb3ac213868d9e9a17ca23060ff74cbdaa7405cef254b390679cc2d0d604547309538584f44da099d26643cdcb87ee9eb0afcedef5556031bfb6d74c0b28861e378cf3526e31ef288c7ee03758089a15f355e821b349c3505e150c42eb9fa2f70e39d7a3319f0bb04af88c897922159fb9e7994751dff0128e7173e1b377ee315dd6c1be66e3926dd65787332e091d3bd504e7c3356aa5cb454718dd563e5563da3db0cd68c59630a5d630c12cc509bce7c1af3f246c19d741eb2a80c1753e75d6b1233b7b1cde9ff6cd4b8b40b5e72f0eece39141881e581727b4b40667b4d345957c8f7622e2e00d9c8aaeb587342321e5180edc8bf26c075e73a306c3a4d5971100431961a6ace5af9974e17ec9748f02afd8c1f929aa859199466fecb8b13c54e278e4bac6ccdee05d799c24aea4fb43c5bf5d3ad02c0bf438909f6dafa620ccbd9685347b3a5c8540b011b41035428939f942f9336a32cc7969c3801aa9f37f0d52644333464be27d3ca30744e39812546ba9104f0c10af42ca6020fdf3b83e693335f5af7b4f8a6ac40433fb2a3f4338bafca7c0aa2cca5652f342fdf0f501a6f5c41874ac3317c8a3ab6d2cb56836c0d313eec741354b4e99ba6466e256431afd4f30bfacf87c19798d7da7ed40bfa9f3f963eb016482fe28322a5143ad000e130d4b5f1e025bd2b195ecb4254be15d5d1653e96087e4c89227976506842d09f15287b96690e480ce86b74224de30226332f9ac6c52e7cf77c351eb283119b066c52b0a9be35461e74bc0e29371bb31c9cee4f4b92832370e6ef4249329a61e025266f7a80580545f44548909ddd6fb8f9c87ac70e5645e7abf909402bcd00e430ba553d043b2acea9da0aaab53445023a50e5576c8253b83bb6565a40bd48decc621000b39c2d598108c6921e01b9b7a24d2763911cf1ee2ab12961d36b4058deecb716d1d05eed2edb7d4dccfa74dee2d6be215dbb5e289640ffac397d973da08ed7f852e5f1a598daaec6c7d3284e870966da0a3a2f07d64df4f28875d00c9fb9fc458ecd8cde9dda8beb643bccaaa5f7652566cb1cef85a1f735d0af2b0c7b665fe6ac9108a6dd50314656d19633855580f26f4e95d690c52604c5a8aed2a107da48d59e430558d0d3909f195009addad3f354e7e4de3bdf047abfeba9ebae816637f7bc4660ad69e6ef07ebd2b151d36521171d23dc32f34a7b4b8f5f3982e84572f9d2fb2dd2dd5a516f92047f8f19cd52c1e7f7e7536c203b42b1e3d097bdbf88efe0ca1ffd4512236ee0000e4ed0a15469f0d0319e192a36a59f85ef447c49b7b25f89a50d2098d4d0c9a55ea56c65d2189462ca653da83971d4d8af6332d1bae6e9c7f740b1c686eeb07e5cfd34cc98dfc1927cd13b048d2aa7c14c6bed4d4e84a88df5af94642bb81072797e2e7af2b1cbb27a77422dd053ebf23a05a302f36bea31678b40efb0008415c60f79aab18d5bc3486565769c146d53abd071940b5d22461a52ca5b86885475c93e295e72c0f991f4b94f29e0489a8c5316f2c2dd83cf9ab9ea83daf28a815bae465445480765e1501efa63b70d7788d661f44d1ab30b037034612e43d5891803951c929948cf39da80d2165e07a1e86bb2950c7dc2587236e97d9e845ca3c75bf65f4d1eafe81e689e93dfdd89f76ff6cac203934986c361a022e375739d40506868616823f3b52db4df8a6a809757326c129e2e220a90220c5da501c08047828e8512a8ebbb9519db59fe60006d68a438672aeaf00f60c4c89b6e3c61be237911f3eba0164e0ea0c7777fb9396ac5758050035cbfb988f8ce6077f3517f4f6637619bb72232970d3721687be3e6655da437c483ec2c3424d8069bfbead0bfd6cf4747ac7670864391b3a2d945e426d945e14e85a83c2ca5b756afa8b0b06e5c9fd651737bcc442472148bce74f4f502f65c8938010f426000b762c3b6f4f53cdebdbfdceb8d5de6c471a58d73a56e42b09c51caaa5f0f08a4170c26667ea42e124b1bf9fbe1856366313af06f16ba74521d0306bf8ebf413b211c69443a2245d38f9d739597766685f35a0992ed6a3f0608cacdd0968ae8080fe6c03f8570f82dfab36b23180ea729305328abff8debf7d711d42dc971e670a416beaf31a81d9e5194da096dcec79ad30a64b22ad2ee1716ff7166ec018da65e28befb573182d60baa98524ce9e721f0fe092aaa032c4e7072e5854f974c854d8b848e034598a56a22c61b0257366f1b68438c59fba2a6186f38f358a14f0740f51beb1b9400155ea42bc069b4dc7d7926921a180e57598c64fde6bc537710e432a44b75c879c5953be9d2bfb6c37b5b2e125cc4391072c4640fd4c352191cbcd46a56c8012720c931c8997332dd1f11da2aa61dd75e4540817225654a7d7be244735bc78b4212103ae7020232cc7e8512add35046ac3d542a58e2f62b858787673913c933e1c385c5a47aaa5b74335dd0b18361ff45d5e4b9a6071d299b5fd8ee70a94fc7ec4fe0486fb22dcee688b40c3986c004eae0f4521a283bd9395ac4781091b640d62f0814e38b121e550a8f1ec2542c37e758639d8a52e74b81f8ea134ed1b04585af06174d9a3c6e7fb5e36cb841ec6ae6096dc5364455484357265addb31c696c2e4fd6924aae44b9d1d617c996c73fc69f7e280cbc81fe2d50ff08a0909b3a11c2816f3771e7e69dcfb349a47a2cbf04c919cd17b4af4f36be91414490949da53f304d3b2baeb9673c7952464ac05cb99b065183c287cfc12860a92eb07e17523b3bd46b350f284c42a687b94e93a85ab71d13f74ee807a010d79fa7677f6c214b4d4ca20a0410a17dfb2324f8f3abb0ba8be6d3abd1060be782f212b9b00539fdd92b56722aee46cd9e03b90288b6cabb707106faf9daae43364b917c217356a72da2744b066e81e72028fef9338b9d00f28241380d8edd0035152d13f22167868a2ba973abe2bf022a830507e2d7179bf5dfea6e871845077c818ba9f85dbe3ba569a0b8510cad71f085fbe3c20a50ea59a90b423f6d405d8064feb983c781ece0d415beac3c2bd5a07b44c8722974905210147bb24a22de91d7c0193d63a66904f5ccb3478ccf91d181ec0470fcf15b06eebcfe704a931e30d123e3f866d3cae2f5ec3962c6f1ade9f624d8fd8c23a4da17137a997f4d393b001d3411544672051bdf7326d0355dfe50e6c2af19fa63f25854de5f54919ac748fb84235a660668654c44612a23b22cabc3ac9cd6e558637367d5d3ecdad6c7b4a610577a6bfc52842e11718879d7de23ca9064ac322c1905b4fac2d6eadea5c84ccfc9c57ef71210742aa01ee1bf1083d03fb8031ead544ff6a255f917c75af931b1b62aa7123452ba04a6c9f127c6d2834d0d1ea6da791d51aa0bb9daffb677918b54c94316aef362a3ff6b6e64924f5a003bee5f5d205207df300ca1e6c8126999034e221d96feaa97681418b533c45445a4501b39bb58240bb6c29c222c9bca500e0f3cdc00483798e83c635026bff57010636876dbc28939519f649098dcdc1cb35be9121d5e52e2a1608a168ab3da4dda786fe12bf6670d8f192d93c80ce1c3484bf3e82101533ab3457a492db1c5612b2bd18beb18902125e058be6a00c869d0789031eafdf9a3e66b69de2887ecfb61dd1f95ae27e657a332bd16d47198e6c5a0a1185664127afd4afd268ce09444ec83f450d374549300f6507639a1812104403c1dd8581c3785e91d9d6edd09715f58dfd4e5ea7b16b0536f1a29c3e42e62223b7f0e5e3a2dfe43f89887d6c90874c5327f2a0855029192f7f28cd1fdd849c914dba354508013b85eb454599119ffa057510ea099a0aaebfec2fd999b17d7e80956ab3d59505e28e58139f08835d5555e70a9e2ff8bbd1f093088523a2a4577fb6b3deb1cd76c0f14bd5bc02fd2b9031d462d71b2af0047113bb84c50791ac0beb3d3a598c3d1b2c2c1387683ea630ec61e8ed90fa0b5770dcf66756ff6a66068824821663ce74ffee859af47e9bc59b6590b6b619bebe2a71bec46f295d05e0f7f958eb739f5d783fcd3b34a27449b3967bfe1e6ba5a5f5e04c8b4630d2406c823805e5b652c9fdc92be256ac9ab6507b67651a53e02fc1da296833d2f2b0183c98112a145337c032f5e13dc48b271218e546cdc5e58301e88a66871c5ce3d46380af87f387f6aec18a5f7bb47d7502a077e30c4de7fb2ffa6ee684f3e47121bfb4eb3c601d1f3c69b76ba32918c108294a57b7f6a448ea65eb4f8e4cde478db550926171a748009aeb802dbd00ad93e44b04d15c981a99c06c1a2708ac66897307992f82212c63b9a0f048f74605511d702c0d624cbfc381ab9457492558f3df48476af5af822bde1c10756e52f392c1cf6fd6c971d017411321d55ae0d4fd68d63a89fb81010e65c05fe82a422f8c1a6a2ca22a7bfaf28550f3746e08aa5de94e7a799b2d975d2c080dd786ef72a1a2e2b2b3f4faa8029cbb271d9a9f59f542eb83068eb2eb240b94ebdf70e498c18025e5d94eb660e0c2d73de50d48775a9a7ac683ff512617dab6ca6ea136f6bf4eeb7c3ee2cb8904728a9f7d140893a7e9ebc7afe0251d3724d32bce545219a82c72eec39c90b6c67bf3bf8b907176af27c9bb242e5d040912986e1f37654507c2ee23eb353d0d4eff556656b06224d6f9b54e2cabaab5307514cbad8e06d5e7198eff662608121b4c2560366a4a5d1a915f6febe94b0fa2b08162a8f987a4b4bcecf6da1b5405fa6edb25fdc5eefffc62ac1264778a03ca5f1256440c92c3a7b37122f95600c381019ac0395308ab0b23cbc98eb701e1a52fe11a43f0abcbe639ba9a0c186e18c2c3d47c099067daa8a2448fbdf8d2d0727c8a52949c4a7022707253efbb397437021a6d5d1540c7df2dc5ca4157a604dfdd4daa88db34034e21cfae1fe7bf5b598d9da49b02911bee2c6ead56cb0b01854707b370dac985c6235c4f7105ebde43df9f18e87ba57151e197f7d711b484e74156a6ce05381c4181491d9ddbe6394622bd69536eb7fa3f703121c8a098e912a934995baa6250fe084ffdbcfe602221102a68ec0d84a028fe1fead321f5bc719cfc0f62f1991346418bbabb775f0d1f0102ac2593cba723837fb0a64455cce5324958ac3a17568394b312b7519a92cc8bc3430eae5c260df2717b60efe36313d978fcdeaf857f055f2db5dd08284886a20965cf5485af4819fcbde598b9fbb10255fbe00d6c3ec92c81147d9965139a57a6519dbe5d597efd275090d787102e3bc2851bb5a2492660c43572c8d3c7196ec1630de6409aa61c3e002133208b37de9951c9bf74ea0338ac96014b44c37ab12aebb2a9c95d6ba66888bb146472d4ac5e9618ff95d3ab48786584c1abc0a20e3f35daed72252adaa5aff2bc49ef07ab0348d429991529f8772868651c33b334933c2d3b0cac73f04ee1f38c7e1a83a30544f758f8bfbc702e079e3e9efe5dfaa8378942b89b3693fe8678b922c979cd6cbd52506b67b80166677901fe882b9e4c0cbda53169174725672bba56433123ec9564f0adc901def8582b5f19d7e8b1085746d254d1dfa762b0ee29b046cc690f01465caf8736c2c20c7ca23830426887ca8ab3fb2e605470ca74e51e9976589a9eb4a888f7a9a78c592c458f291ea637e97a74e8db1e2d07fbd3e6845626167b64d84c69b23d769104e2a9d5d6a5138a128f76dead64bab508fdbec4ba8d04a33b89143276267edbb3eae141867152c8b83d949024713ba86111a0aacdae7ab47fcf780cc924cfc9f669ce277cc1e3b067441b89bc637834126fcea62f86f1379a00e396ea02c8d734881958ba089d5674db5cf17b8949309435abf6ad0d9d2a4fc43d440713dd42866667d462e8e6075ad5e0dbd21a848ce4d991da2ebbb1b9490ae675d47595a89576b6e182db8069f759b96b2b5c229202cccae4a7d2d267f8f822ff0219c1e5eed6b5003d354a3f8af06217758b9c771bd9e239da9a94083c648ffb8e973d4e3be7188131253987af1ed592c6d14596f594f2eb6823d78c91c537a99bfee3eee5aa097e5fda0172fde38e5060827ab5cce46c2882f23db0b81b3f162b0458d89d05cd0a5f83107f20e15aa20131590dc85768df4ef77b546f7b60fb0bba7a34df79dc8adcfafb54b7d2fe952543636a7eb788651da8ac00d48cc14ad5425e22bb2b5fa6a8217352f39ac8988d7fee72b238e74b00d0b2d38a4225f2c5aa7479ef2d5d4231ee8e137c5953127d140ff53007c8cf65be5e78ecfdd55a68f5b624a3a292bd34f08f87f8a7a952d4e15fe1d62d89d18686d7d2a1fb247d6c689042f7dfd4b4c0b8832a12cd94b2c0a4d88e0b332e23d9b19aef3b6c423fd2b7845ca1d56c8d5c9cca32f6b9e8e020658f177705e5984d0e0fb0deaccd319a0821669087a41d82ca480b1ceb3278542563519de85604cca3ba1f27474f66b85c9b1a4cfea516099187477ebba698ceec95c1b7b1dbe44a6ccc8f9117721c808640169acd8cd6201a4a3c6d19b1602d848140c379c64215c3d5285bf244581e78c9033ccce979463e909028c3655bf537bf561eaf0ff9aee78ebb7a04b92f5a2ad653dcdf684c6261b3044e05bca6450117d2ca458dce14dbf28bb039aacf0fa34392d7817a8164c4681ce190039ab05010a68950dc5b27a83a25691241a41965fc730b8e6cce248c67c2193334ab07cb143bf2650d4ab51a7bb6f458aca5970cfdb37f34ea567775c1364e622a6b4978b895cf30e6730cba34b7ec4ab0c79a44bed56b5b169b1b0122ffa51d24f38e12f4d8c2bca74f857829f8166e08ece411766cd459cce1b00cff48634a9833e46d336732d723caa1404a27990953ec34a8efb89a98aa2b2c0d9cec0405fef8a57a98ada27236ca0f4ed4bccfb21a6137f0d245807c0da6f1f690c650fa781693feb353fe34bd9c8bf9f29c75fa4237b1014e125e1d02382ecfae4f7188f7c29055ab6b7661d7817014570fad92c20ff836597af983f7923cbb7fa55a361ba4a0369713a4ede72d2b830dae90f191e8eb52a490e955c51fbeacc8bb5f1e31176b8a37139a9cc8c8e217b2549d03ed3cb6b9b4f0a0daaabcb3a3a16bab973dde772c197be00c14ccc2edc255124e6880c41a66ce7c99c54008eef58bb17bbb1a1b6e52957f8bc2bfbddc10629a15ec56b909bf48d090d5ec497560b7374b7221133aa775f33889113903210a2fb585066f04a9de85f7108f95920d850062d1415f660243b931a23fb7ab08d45ce8bdafa246e986bf43d248e7a4db7c68b133b18017ed623d5e4f51c26862d44da54ba3385081bb92eec334ec0600cd796bc6a4b4670a92e7c7e2b3609f3894a8ab84c93624d2afdb1f4ebf075c3dabc2d2ab29d036fdd97f406038f80549302551a70c7a500f968ec6705e493825e45322d9c361122c1818c599ea417536d21088e7990728536ca0bc782c201c66dfe90f24109b74d94a89a343945bf529d2bcd42ffa05346686ddc2440c933911653322b69cc80872ffce3b0cc0812c2b79afdc134900e7970ab771e81ff1e8c39ef8222ed6c236c3c65d01fc5da4cef5899f194e48e263741094c27b1017bf25e651de78f227ef600da832ba6d318b5caada369254777743f3001b0201ec32396522d7a08bb5087fa2e8b2093e2fb60904dcf0e3c96d19b584838e1fa5697333cbea43953d13e9e08ac1c58f5bda335d0e7ad417c4877e5a58c8661d191a6cfe3b12ab0ea086bd775b8de43ca1ee2443333ce82bc66adb153b54450c1caf60186aef20297a08225863487ae3f42d3550bec2d14606c4a77cf1dc0fc3d36c560d6d8e8de5fa11a63a1abf35916b27773186e0714e9486d9b9c4c9aa60f6dc79e3ed2029e1a53ac143302c12d592b34782cb5f9c5e87a3bebad90b154610928d0fd066d50122db61006ddc3c983859d41b0f6de638a1067137cc1eecf1ff68a92f6a9272072887447793561e8489df1efa54cd2a3d31836d95066254d677b54838131bdaef0ac93ac773d2edaf0da1a2d4f7693f7b4a13016c28c3dd8e58fead1b20a9ec71dcd344b444e57cdad077092878a43d62485ed53b051ff7e4d687c44b0554bdf2e7d3ee9b482fda2d8bed41048ca54caa81c23df8293cc1b2b34d141e7578cf9c75a574a2e59ab76699b66bbf814cc42ca24ea2a4b11956fd83b7a06ce5882a90f05158aef1b3fe1280db2a23c2dee07b66cc5b13f76fa28a6e3741d2353f479712792f8dbf434d1f7303120d652c8a21c97268ec9060a17a35a38946de49b27d05c09a8c232e8c3918a727cc4557c0d289ee0d8dac1b128d6288290cfe7dab09460538a380ce503352ebeb9802f604affccc085b1438845839a15e0765c8267672d2b596013e20241c7b220611de362eb475f9c03cfcae4828edf76e8c5f8898179068692270ec784aeddb17eb41eac5e727249e98b720ef628d6ef02062746e249dd6bd4bcf2e8ecea51992821186f913e25c4f6bb46828384391e40799749ae1c21a9453bf780f8abef462f0d5f292c109bcebf92e7c0c9e095a43767fb7c3eb3ec54d91bb43c169cd03707b8f08ee7f5ea99e0b598fabf42076bcbabccf521644480607a45f440d765aedf4ead48eae247f509bfc70163b5c62a263c9fd618433a9aa3d230069636a6a9aeb68009563f86390d5e0214197a2edd4cba29c74277cb8ac8544f624de270570947cbee92ea9f5ae15102d9fce625dd026ec3453c140fa22f3296d23832eec1824fded3803a7efcf0c5efe9f8d8e3e738b6598fe882f83ffcbb94e71d5ba791877c125709e97791e271c2f31a2a1bfaf3e6e2a6e459e88ec6eb59a00ecb32850ee2058228fb5ceb740ff69ec4b87fc677ada9f9e7aa6b3b7b75640a15865be18fc67ad86989f692ce21cbbdcc600d5824f44f37b68bb9b71cbbd869c781c5446d6d96a90f085fe233292d1a81c343daafee08cc41233a4b18eb2c7a497b886d0b71851542416f705f156309840e6373d3f031506f1a435560d4a69f7ab2fab06166ef0f2ab8655c7f209bfc11c2418111be52bc5cc1970c34648139c1b68c86213d7a661b4a318c7d20baf40c3be1727b45c7be63e4cd58fa968d0e447d37122d778f4d5ddca31015b1b38b9846e834763c5f9877956d49ccda21495b0c2667d496f68f4da7e8657407e09303828afabf1eb4416938c1786c2af1559561103b86a82ed495c1a0eb8aa2da79fd12104a637b071f4c5dae4d01e871c74615c360def942dd84d186fe53dae8ab3ff8e1ddb731cc910008472ac1b0a63ef4fe5e827c9e7c3e5a302cf066bf67b1342821c5f40c7d479b1e2aa33336bc73c3f1c93029b20c8ef76c86cdcdd8daf2ad8dbb405c3a3d537ca0236551ce366688b5758a978bfe511023a4c6a7718c6b987214810c1c096a9bc75023679df7ddb7e58471338e3b065a43e9c4b917c0f12cd1ec661a6005508631ccaf1abeb93cf1b78c5790c29a00dad338b8000d59ab473df73729af20e5910c65d9b67c8e8f23fe3c04ef4a100e5dd07c7b6c594a4f252cf82332f94e11d955824b911517f4d254d7e0545cb03116a5becd0468b7a0b559046132afe1d83a22594a49e654b47c9e9db9916437db8552fe5f8a50b00256ca676d08e6df7f2d0d4dcb864a899cfe90ed78639f9abfacce9f3c5b14b9fa658a608cafe2ae44fbb5fbfd58e34de05642a28ef5c72a59750685e4c45925c4d5d489a5ebe0f7f2c3171824947541ef67709b18b5deb96255725c1bdebf9db0d17644f96a41a9caf651d5d92f6a080d07c4345b4df5249bdabb726d0fedd0764e52b688d9e139f4df2d87ec29f6176bcfd846a76f3e40c95f09a80e3c8cfa83eca76bf5ba7f913483eb8bcd456cba1c87120e038c0540345e2f5325128d765b30d99ed1b6d26560fa7ec5092c80051b1d1e4cf3d046a1a543650981042097b96754b61e9d390cad64412dfb2730136b0e9229fccc5ccd028f966dd1ee8edc9e94049e44857ea597aa8fd4889aac44115530d13c944a554d907a17873268b59efc11d993b24afb746c14a8a53dd129e2cd5e21aa66d9e1340b6494d54d0b11490c074e5a8cf1af45d63e94d9718759ed8dfdbc3bb30f138d758f9479bd5fa6d5b8ffec371b112a24a6a4467511bb797722b0ed6074fac8b25b549d8e7e3037b353eae6a906fca268a59e8e13fca5e2d3b247fff426ff2115ad91381020e1ca311cef08c750a92600ead4de1394386999424fc7706d4066e748a8f3dcf2f4325c3a059a4aaf420fc40e32e78920ab359a43c097ae09ddd0604c9745d6ec488bb4ea9a5f2af125fa43d1112fdb050afa71b207249f8ddd0deed9a2280fee381d1af0a64886828bbd25f7cede885dedd594d93696b1174fee8e503464c400aa7b0037db26a04aa08556156567c79036590711a81b13ad89a63f81e1b7b80e05aa97394346c4d4914ee8ce80798d3845add5d3b9201a99d2e61843519fbb587ba55c059057c05ab4d0867a7e28e36e6b40db20f55921410415c8550e8049a6b6124eb6bae506e2c1b722ce21edbfe9d9a908dba6fd3bf4fea8d63fc0a90cf3c95bc329de194c8d9bc3c2524b3d5c089dbe7614efe305f4235c8521b21db5449382ea4924fc63290d547501a065c68014c2a9a6aed8418d82846e573637a5b75addc61f0ee733c921d02c6f43e796475c023ea42d37b9fd280bf3f9e766aeba22955be5cc0e399ef5d4cc0fb0b4e77688b7ccd92b0974dba9a6dfd48b678b62882866a08747ae74873d1af67878e1cd274e7dc1a20a43d8962120e98c60db0789723c6115d519aea820ef71ebf90edcc430ab677ec3b06132a0ce3e8ca1380fda60ed6bb7d38dbcb6d9e581d5519d438369f07e418f8a82cfc56b31fd13f8be6018ddf9b3aa6634eaa6f27fd62c0e7a25a4560f11beeacce9003427e9872ea0aa708031f8ec3fa1ea47a75d574255664a062650f5e43df11c1412190bced4edb24255139538e2674dc5dcb500f2b51c506a070c548deb2097634649a0aa54b35351606042717c4f0c9456ca553b3c2db12d98e00f68f708dbc7878caad21ffff4dab736674b7fd03996929622646a20d57e6c8500907c5f6c45285ae63aa6315be301cadc3c69db3ba6ddcae8a8cf3740c797f8f9614e6735bd6cfc2a601127510b9b8dd9f1ca20f36d04873aafb761d13e21c2889901bda7c4c9d781ef1ce88d87f10ed2bb29bc8deab15df8205eb2e72ce05643a77779fe885264ed30b17daa7fb3ae491ba2114c48e73b2cc162324acdcb9d4db25e86995ebdd84e626b2e5dfc3432117b44afe6612c30023f93b6b2ed81a09bbee0940977cdd17286b645da5ed0896a94e28dfde071e3c513f4f1464aaeccb2b046b4760e2f450bbe1f69cb9fb887da5df88626ef9f71cc07b57709182d72a37f936e979361776bc0e880bfc2172a99790e06315e3680efb00f8cc3f3e8018d27399ec789ff33538f7fc88013c9c350690937c6d486d1c55375b984dd87e83c32f74e94bc7cd4e2e356d0dd30fa2b756de19a979a08b3e9a5742e9054efe061443c4932339be783f33846d10ac6640a5646cba5d7f5c97a6ae7f4a58083170f29ec3f393f0bc060a9cd4a2419ca8e7a37cb23ebeb7a17ac9c7271dbe35b2cd0c6c7e90f9562f90e236290a54b7f9a175700576c4cc1b2326198a7e06468d902fd3bcc2bcbf32693701456458c8e2b91cc5db19ec83fdce328c29a9b4142170c431906adff311c506cfeeb26a71d6b32f7e4c0bb37a1e610f26ab36916aaf158eabbe8a38ce3d95ff80f97928be21e81b4757094294f3e3c46d5288885c7fc978d783a16179e945a2a6eda76635902b11efe8f902a94b5214444c509cf790e2d9b791b635733f14d1a9c353cc0ad991ae24eaed10010672efea08db6b52d65a388b9947717e006da3e45a88570536e38dc6074ac019937373c6b6ed830389150a1ad38e9565ec3f3ca98bb05137f98fdc3452837a6a6a5fc1b89bdf855dbb32c168ecb91715e3313a241b188560e6daa241bd13702dd898c30ba326104b08fae7eab8ce390c263a91fc6c3b9ecc18db018c41fe4284ab9e9b9859bee138c60b40129c5aa965e6a4861d7ac7000b90aa3274c8d1eb79220d19e75939d773949907af1af3e0dfb62aa6b515239e5e6121b8565bb0497b6a89ca948a86b8882c238bdb5741b945e604fa45512537019578ddcb7df64d01bea59e4962d6f4e47668afcfdf8ed771e083bac1ac05bb14bee3261e88ee12316d64b11ad2c7ed5c75288640a5f70d577da7a15e8b62a3c8d3a4514d180e1d6769778b734a61e06f6c00dafe9ef2e85babe0911a5f2c4e0d297194dd78d281c41af7acdd00a19d912ab224db1a347e6f3566404933a6076241c67829971b500d13d38e1c0e5a85833ac49229b570e6de0e8c49bfef6c1df55e4a00785735896019f9430c3f2b064cff00d3cb19a1f6558942548b1a42d65946eaf0a7aac6b7da4a37ef54f533af6746aa324b4f2de26bda9d9c2091ace0c4c5560a7fd1f0656367d8a757e02248e89047178fe76297564f46728187846503595de61c3591d8a1e8cbd3aa57ce07891f1d07f44781131df6b83c3546aad808104fd9e7e7f0686f1848e2d32710d7f3818d4c70b091ad77d73c270bc4e756254d8b787de48955c211dbadce5d76ba422d0da25da26b25b1cd06724bb2bb693947519d584e15faad4b39b287fd917621aa72f92515bc4c977bc75a28d3fedf0a489d0cc03b79283d727b3322971d11b8737a560702558e0e03e05338fc922bd0b3d483728f2c2714840ab990327b6c9f65604b9f1e4c115f92e57ff134e61e47f424960200befe667efc0e9c2ec88cb4bd970acb8da5aaf21daebc17a2b87f5773cbb013c4a4b1a9b711ecb5e7b1f63b5afec477a1aefd8bc88b4428d66d4d400a640b6fe9433aab3909c1be8903d0a5167642313603d5019cdc014c33bb711f3310620580ad8584eeb651353a29c6535e795d80fcab43bc80e71452af65c0bb1d032668320a896759f95ece1e0b52fbf011e3f7a01116a9a3d455a91511324a7bb02faa86ed5672879838fb155528cd2b51dff22f7af7b4fde9b02ce4f46c0183f20eec85ff519342a24204f2393e5afba98d0064b27de40a009195ee1b38a0660003eb711fc66f09d9a25cfba456284aa8d69c29d0c9a7c39e6979dbf7d14c5f3ff3063b728d49514c9150b9f333367db672b86fd8deac5bb71f4a0bfabca6e455fddc154572bf6e270bbae7b4e1fa25d3081771526ad937a41bda67385f03f99700011b1aad623ebe54ff4d4bc1663a6c26a66c1ded3d9313ae8fbd272678e0261d28bd8645da7440f4a47825c03c8dc55c15cca26f52ef790fff5080b7f75ab4d2506dda97e9e2bb236ece174a4027def5ed5f3b20cc601818ad85d0b496925d0d325b8668294401e2257578d3259e8f33360b0cbd1f44ecd0daa156815f17d3070df6c5154fbde8aad03d5276dabc88b7a5516feb14e57082cdf8f1ed8d29f667db17fccd733d6e4ca37421705cbf658881630d4d68777cea06dcaa29ed65dbb47531fb968589e7798cae3c5a5ef921b7979ae6b6e57ce9479623f30e56880ccb32ed6c350c0c4e9e760f442879d8ecb662a431a5b29cde4dd4dfd7e098f86b6e9420bd32a23c0ad9e781c4dd3ef37cb3d944b640b8b6e2cf09bcfab2023fadaf71ce6578f85aa8f5823e1368bf0e292f3e4290b50db6174d898a575eda03027a7b5726421d84e53e833b9737ba1bab8745576b57c2451ea8a015c7c406d4097edae16dac1b4099f1afffe767b3cc54c22e909440604ec1a731f7209328f07d3bc0add5aba56500b3bb2124f5fc195976a60f4ff74c55f7c1ab6ef1e743000bf196f2f979dfa4d426a453cb2ecd981a9938125ec4efc9d01e9abf208e71801fc352b70cfe059a274bea21b0d910015be13ff8fb62bd85efa8639326269033e366d2f01593be1298f04d6bd406c63d6e1048fc604bc13e5d37916be87d08880e672c3902ee9416a030b9be6926854317cf47ec170a26702ea290093be18767587c8aad208801437f05648d3be4a58dab9b428682d6b4af204011b3457ffc19af78eca6de716e2e457c18e0f42eb99a0835a4c2993b69522070b6371f04af5ff7b07d2db8716a809fcd6a7a0c4153b110e9f7f98518eff327952dad178754e4dd8d5cf1f49938872f258e66b6d07d5e18698fb8427ea4eb0ce11cf5e0c991da64c375bde6eb0d4be2bcc0ead9ee674a519a86e6c62d94fa542e4826b422c1c1b5dee294e71d01407b0aca9f3790169089a42b8f1ef6633c780eeebc7ea5dbe64a1370c6418f1ac0b9eaf484bc318871a86a2468c019f285fe64430b6d21d01ac41dc50b81a079b30182ed651e181ef7524cff7661d981d543b2e55861ceb2c19d163ddae3ed50e55b18d0f04b09c3b37d791cfa7967ca5120a933c8a549d71dc5605a80d8bb100703558d2b6b397d1df110b7969beef2c0ccdbd8afe39ff28ac827b44617807a9a216a11f212419b41705102debde121a23a6c4d0c150bf691895a43f81d857751765cb74f97b3055ccb32df6b6560deaa62c670711ff4182284d214b8c6cf59b94d48c0cf2c5dd9cc1229381f52c9d8f6ad5ff4f445d53e23090cce78f49dc455650c9202001e0cfe4c675395c782000605210913232733e7f37f48f43ecc51dbb2f4adaefa9bd4267b5acdd97811f67f88c7b258a052c27e3087b645de8031972cb25766fae81e89278190f3a7374d4e74c8543a340d86b004632d8d274747a569aa29ede9aea7f0c5857aeae0d97fb4da8a6acc80b3c3e85b3534d4c3d09d508504f29cff0c50f05cc8ac25615da7dc0b765228c3fb0f20e3e2951694db7bf59e98569b2978042a906863496d2006a5c30e62e083c8ecd147fd6f57cf77addd60e757b82c2c48b251641704b4df9d48e78a3a7aee509d0d69e5ff9ea3fd5201e38e6d70cc27859447c8ce58000e05639683fcab3bee9f3176571dd05f6ace2d6f48cf883578411d69e6f146089291630fe48e9767b3e163c1f12013d02fcf395f9841466274b8f6cf02fa858e50f98078099f1989610bb4e3419809075e712a5dd4fe8a4915b8c32140b67c3a899bd76647d397235096314ff031def931592e1a08ee8df4cfe0fac67b323136d33b48130440241fe134609eaf80bdcc1d5393658a55676a6b51caf651da64b3d286572d3f7cbb81e99ee46f3beaf68c2ee70203c8fbf5e8dac165c81d7e541b80b9a9d0bcac2106bff5f02695e77d7094410c61d27a5c13a1d7815c02e594a346a5e7c746b897c5060b822564f8408b960e89f2b67881cb360e4ee2b0a4ecd554d045e3622651c17114d573ea70590018fea522b740b4c8058784820552d11fb6e2c8610588055d9cf6778988fe8193c10ebc36b5a5f0bb11a773018c5f5c89fd3bedbadb33336e7c44faa15805627937ed826dd9bb4ad90317f8c5d722ecc3f00e1ab8a3e4fa469a6cad5cf569fc82118571c52d372ca49a46f28c28a458193391a609e431bdfbabaefc4e16e147b46b4bc0eb5716a41b23d4fea4298542df8b82654378cddce00a4ece3905f709da5ed24f132ea2db5a3ac2773e174ae088ee1f5000eaea6cda2436a7794818e0f508ea10ffff79143f22d8b4add662bac32080c45797744b552cbd3818b9de2b1065abd7b87da16a032d334d7b2c63f8c9c9dbb0223b044de2d57933a04428978c724d9affd348a15067b1854f26bace62fd36f06d94cb9cdaddcbf897c8b0796d7450e840a298579a9738960f98a7a4da79b82660a0d2fb41b4bf156645bd29dd63c061d32e84e448d92e8c80e7f55f58b6882712a3b6011e478b1a1a01069c15a855b8cb20aa610953a15551704cfde633f7819513724320b40d12c25caab27c04d58ad60eb82db40b1b68611460b7d2f2b33857d0a078f50213a2ae6f8d47207d8233120da6520f9950ee0c4a1de5bbe53405c1393f84b151474018ac710eab8c369117fd27ae88b92052ba4afa52b091c36c516680522eefa8f2609be6d9f4d9031927024c38c8dff37d59a171637542f584188773e651e525dadbeb022742a2d1d9f8c99678493bf177509962538d82e13d6b876a41747bc2410415d37a2311e5cf8d69ea7d306d61e42c5e1e5307535c60deef26c96d143c95deefbe3284d16ab2a01e8da2131d0805be683decffa61854f6ec26b56787b2fe82af58e6784807e26cb3da3b8546d6361ac15039a8a918607f6051cbd6cc12c479538c2bec5293cdd78ef0918dfb57b11abd1fcd6442e89c21e86cee1fef2b2608acdb997fd7a55ea3cfd0562d84f81b5de073d7949e12b017eb4364fce814c36bac703a2dac34a9fb16222b974f32b200ce95a05839007f44f299930de0bc7b5b4bb086e64718891b5beb670b351f9b025960cb0b8213ccaee4680b2b26a76ea593f7d8d40a7541ef2e8e5cad5a8b475f09c136b394cdd7275f134eeefb3e7071c8179310bf5f619507c2bc001feada1bb76d2a7939af7320967113ef004574620d6b4f4f218190d8a7f8cf8d77a02575246e3ae188df87756af35caee677ccb1a43473f0d4c6e9fbf9fa9644085e3a51a371809a3923ac6727627030189e575d67294d09df7fdd76b6d813adb62beacf02f5fa562a3f6f28808f887d019c3c22c536ce4c93f3d5583c2315f5ffb1bde524d95eeb3d212bb21e221561238c15e2b8a998c52b37b734bba666a4e4b143d8ebb068e52aaea0c6c8ce10f673ff70bd26e3022b480366653fae30adbdf2e6d993294be12515b6f5c46c39427ff64d5fb51b16f62470721fc148d5a14d20d256eb8e301b06be092bd98c68cb0b3226567152575f06f00b46477c34eeb3108b58352e2988625632d5ddb1aa1849ea45a3235f952a954dc256fc8cf8d261e35eba97cc7e3d424510f90c6a54a435a857a30029b40ff61231442787ea06e1a32da8a702b663952dbe539679cb5e9acb1b4aa0282835e8c5fe213ecb3a200648df2e47b279f9bc20e36923812577afb1c1ce545160c5b8491ef672b112ac3524725b2a42f8031d3374bfe10d1cb5a98a259af9960574b8a1552a5b8ab4bbe2215bbc92b9828e31dda244a1f9612912bfc5d3993a6cd319fe730ead1dc2896b106f729ca2498e49ea3cf4972bdefa6dd6cc22029aa722ba5980413c8d3a758b5cce065162e5e92090fa10cbb83353ef679e1283c4c97d17c7d8cc64bbebef96e690f9028c7e521bd3f986c8c42f28d03fa1bee138eb2cbe407182abb62d3a3ed82841a98219cef8440e0db758a1c846a20a3e25c2dd6259f10a0c4f3cdb5172b35211b886ad77a9160f3a0db63239c1ea46cd2de2538b2d5f500171951f98fdf1a1165720d224c15318bb500e82dd4d154ae93237b73a0f1340453f5dd92ed44b4d01b65511f61f00f7f9f680b01c8e2532218d6eb3230d62ceca410f5e3d33adf8cfc580df82b1452ec45af1e6d57cda38ddbdf8a1d0903e3b610f0a7704964be01d13b0aaf168a3df9926292725ffae354552948a9c5cfeb09acaa1184112280c218bc263a243ca3511c81d659249455e97fc04c79821587fc0c5720f8f7a1c51d856bab14c98a7495a8ea36a248f6474065455419a1bdbc90a5f4369fb29ff4f20622b323076c311356f7a12c8bae0ff07606ab877aec686b6b6df90ea55ce80b8bb4b0e7875f4705d2ccb787a3267a67c4491fa20007cebc99490dc27eceda28482fbf0b074bad44821929505dbebe30abc4f11d74076d1038199c9bba7b58a96aa19ba2acffc730fd4237518f12a18d337f51c691f6d5776c9a286e7a8169eda0097df99ccd0fc05d84fccf3a20302eaaed37f03b53e528de00dca260bd9985a489bedb6aec0c192285d9ed17d04206d552c1d21f1d3fd691a6b162c5ca42822a346d25e08d022481e50a4992c068b46389111af9be2e33003b9638edab32f25e2a06c5a24e0d73d39b8f7116349384cab024a1e1408879f06e6288c11c41194fa87d308751f16d4dcc47001f2a65338307cb7aedbaa1933f8f41e8fb55abfa6af15f32105860059563c5f5e77ee979a03ea1c00dd697ee824a38b269ea8e088988147d5f4689b02cf9372b75dc0fcb7c7a4a89c6427867f9c980b4a6cc68e20455c821ca61b16fadb45e94fad66c09904ef5ea5051a29fe2b2283e92c23b06d30da16a292cd6ade44a80492fd7143c436a2c61894fe06b6fd6888c0b0393a2397b49d8f29b389d19796a64262a81992da1608cea688e3e01a6b8c4ea9765e4b2e8bc7c1882ea6830d637bd27b5a4b114d32d3112eab1d65fe34adda8be4112a84e9e555dbd32ca66998e3fcdc6fc5cd604a7f48b7feb41bd40d97202905cd18ae2de0075c0982c8e020d940001e430b4e303ba4863a7552020914d07a5cc1724f830df3198aa783b2b7a4e603e7ec08fa34b73e20318b4fb904603f18ab607a3280007009a287d19d01f1e4ad507163724c1ffef06237b4f2472333042c79f0ed24b7a93bdb7dc524a99a40cce0a910a340a75d6c25103e6532d1dba1a80e415902bcb27c0f50810ff8897e11fe04942295f2f9f0aa58bffd263af20eaaa8f45f26ef168f520e5ddf2e1e5ddfaa16b97770b08cebbb5e357f98745711f0ba4564721ba63f2f88f2cf27c80d309edd900778cdeadda2aa527c546105f1fb76a34d602c402aaaf02883f9991f9921f9e64eecc1d1aad56db922669b3198dbd5ca6917cd55f8de31095422a2b088878a4efa90ed065546191eaf0531de07e19692e2e2eb99502a2f216a90e70e5f70b9057698ef87d05015cd92ce3919499b5c5e5f5027a65171517162e2997d185c761f8ebbb38d17d7d972129235db4c47e4ba22e643992afead243632d2c2e58a8accc0094ba25089611e8a865c6320220efb93367d248266f5993341779cb1fb1bc25118b1c62195d98ac581bcb08cbdb8f5ae4ad42f3216f95a21ef25621e2216f957187bc9da8c7a8c2c3a288c59050ab66c37b546646351a8b1f9a368376b0988d34c567b76a3e3d3c2c765ab556ad556bd55ab556ad556bd55ab556ad558bc9bb456b056915a1b58416145a52b4b64080dfad2298bc5b412d14b45cd08a41eb86aead1dfc6e01bde4dddad1f5f30f8f495906e2ca3b0711f3ce423c1f7dde2d9dec2313e51ce41c59081909bae6287ee71ef98930cc7905baeefc3bdb10a26b38341215e99016d684421e2f63e88296df610c5c7e87375ebfc31de8fa3f780983421e5d5fee0f83fe333c1b5e0e6113bfc39dcbf33adc6d10b742dc1ef9d5b935ec8f072a5a31c50ebfbf043cfcfe15f4f0fb6150f43428f2b157a38b67c5145e7edb12c0fcb62b88f96d61e0e2b13470f10859d143d75f41b41a8d56d8989da15b8ddc6ac4ab7135ce56f0d044209422f8f01b65092d7ea34001f61b450a1108650b284541ba3e4a0d8f499913369ed0283856238ace6af4c1828f177cc8e0a3069f37f81ca9f0b132aac8c1caa822c7caa842082ba30a24ac8c2aa258198f4e8c684cca808286f45e8d7b35fa3cc17263092c37a0c072430a961b5b60b91186bd1a6b2ab51317a8d44e62a0523bb971b20395dac90f56631021ac237da2b383552465a48abc1a5d4d90ae1c5808201254513c6b0aab710a1973b541baeae31620005451b8dab01a5d6d389232f3a5ec25112c2f5dbc04c0bfbcbcbcbca878710cae171415151515b9785c3c2e1e178f48023108e24c9c89337126ce442011480412815670b07285159f159f159f159f159f9571655c1957c6952754dc20596eb0dc60b9c17283e5864a4da5a65253a9a9d4747d9713a4eb0d3226654d6842139ad084164bc4d50608e42d8a9c428f06a0d55b0ee199967a773da4ccf479808f037c90f06940e7c380ce670179773d31f2ee6cac46e9aab57272d0b56b22af3a14ac461e05e4cdd1747d6e87c7a42c0179733c109037d7e388bcad0fbdebec0079db1f06c8db02b13a825025b02bd8160696067ad7198acb01cae2c04434266545b49ad16cf4a1eb286fa47ed71dd41fa0769d3d5ec28adedd38a4779df9e8fa9b108f49d976a4b10eae819dd0d546905aabb621618ba2e4f736055df7868593566df342015a35207a57ba63ebf1f9d11b100dda76b61aafa0bb055d7fdf30e87acf70d9a0eb5f391020ef15bd115d1c1e93321d77c7e5e1dec37df813bbce58dea0ebb653e87a4bc0fa7d57a0eb5f1818c132da10a2ebdb9168d7d9aebbce769d591e2ea374d5dfd605f9b78d41ebb7bd91f2dbee40d7fdf60703c87b85a7ceeaacce746ac81c32d64293aefa2c7eb750f90d8095df328adf755644de2b7ab55aad562b140a8542a13a4f84a5773776e36ed12d37c89894d1e4ed1191b7c81079b360e4dd1222ef9623c8989409206f4f96b788ce9bf522ef5600f26e098205002c40b0ccb0c8b05c41c6a4ec0797d185cb18731959f26eb9f26ed12d69901526b598774bebf366a1e42da2770bcdd3bb8546eb531e7488d21eda437b680feda13da28b85f6f04819b97d5654df817cee18d57c2689469f49211727287348fef84144a4b7a4adc87bd6d0e91144c87442ca1021b54b8cf3384c5c42ca28215ffee3e87248c8850b0fdfb30128a50ccb2139441f06d402c80720b1a887cc43de21bb7862324c7ec92fe32bbbe4964c7b58b22b8bb985b69255328bec32a6e456ce7989f057489acf50549cb08cac15cb68f20a1a29b56a25247876024da811e391591ae9383c5d6ce032be8c2db48fe4751cee38ece279416dd76ed7a250a8eddaed5a140ab55dbb5d8b42a1b66bb76b51a891c6ba2d6f5c3b0e776337a64450291154c7e16eec460ca2465d4fa0e9544153ee38dcaad5d947f2eaacceea2ca6ebacdaa0556bd55a35966ed55ab556ad55d3f515f40a7a05751c7e05bd825e41af205d5946969165ec38cc32b28c2c23cba8abcf3ace673ef399cf7c563fef3d1b80b5c3ab71091a1367e2ecdaedda4f9c91c49927ce56635d8d4b54497319757d97d16574195dc6169aaedf426ba1b5d05a68f5694ffd97f1657c195d3c2e1e178f8bc7065b2c2a2a2aaa01385f04128144201148570caa5220095717e7892a0592707551c2cc9070fa33f34e1cb6a1f020b87c9303ffcecbb820b8ed49f7712a0f78382106d83e8e2d811794c0a3eebcacfb9b1cf5716a134360821b64dccb9b1cf471bc0e3a984209322e7b3ea09c73ceb751e999a514bd4a114b5104a59892a24a8aeefe362a1c78db7b9b7c19b3be0cfa32eccbb8bf01cf34b5fc66c8bc654c1a2b3dbbaff9efb8af3939e1f0d7a854b82695aaf46b4090daaf219164acc87bd358e9ed6b66d897b1226f3964c814477ad75417e5cfa0b1d2f56daea644acd836b08dda66192bf2de4c6c52689a699068cf7b1b32e448d7a4b8283fc5c5293f879b74089445ab09ad2a4a6bad4ff3ce4a465ffe5b15d5fece4ab6a21777a4129842bdfc93cdd28b3b520905be7c95e5367a7147021f672465378fa3177725d2cb0755d88dfb1e27f51ebd98f43823dfb1f28dc9d7a7afba8f33f2d484e2c719f96b37ce333d4eeabf9c6f7656f6e9c5dddfe07ca62f812892c719b96f37cefb4ca791c749bdc8dfe0e0b71be77d2691c749fde96f70bab71be7fd0d0eeabfbfc121f9d3e3a4def43738a7a7f76f70ea778f33f298244cf1ea2de6a7c2f716fe2221f616f351e189b7f03f85246f311f0c55dec25bcc2f85296fe1ff85a910f416dec25b788bf938dcc2f716b385bf0d53bc458b16fe38acc99dc1ab5f10abdf59c93ef06f4c7065df4b9c4d0ad9976f4c50927dbf4322035f3e68c1bf21f92fefac64dfcb7f0b7ef906e71b790f1479f927289c1c36539bfefb9d958ca6485f12791c4e85da288862fd0d0e47ed7b2f3f65c2dab6f9381f6ae46f70524f4b2f1f345181da3e91c7019f757283b3fdf638dcd3974f8242c54af538a52ff91b1cfba53741272b2959a9b2ea6f704a5fca39f0e3d8df5e7662f23738202be7c0f9bef43726e864ab4c8215aa927cb3b39291e41b9c912f9152f671c0e7fe0667e447728e5389c43d0ef8a9bfc1f11ef53738225ffa1b9cef53f771c027fd0d8e48ce31f309ea945360ce61caefe2fc5206bf9ce22de693fc71bcf7728e2eab5c9c7f83c3e15c738e9b716cce91c333e971487396363478f33dd145ca4c2d7f1ab1ebcf90429ac64aef6dc5902143b40c8fdb5e86fd99e2b099e594afe939b5f5c461ddddb0ca611cd779f23531e92b810edb4c20ea4472d8cd336c505aa4d3a9eb7a043bcce61936292d2300da33094997d4aa5535cfb021d1324cdab34949af68b8f6b7b99a35c346a56550edf9c406d42ae46bfe8c1528f2355f7e4e37eb8c3aa594522428dda2064274a91ed3b93947fd97f66db5b58814175da49fe23e051174dc209e4cd92ef451ea46447ad7d6de3b8162f49ee23b8bf7955779ffac5de13e47763a3dfe1827bcf22b7f83fff4393216e2e38fc1e2b9171fbf8aeb7364dff72a1fe37b95bfaf926f72dc1c43e55df986755f455dfe393295bf61dd3c2386eb593e0152a6d3f23a2d1964c937372ccf925d3947f67d8e8c7b29e37eabb82c65388b61ce0cf76b94b7a1cdd527392b2aa194b1087364f23b4109a98d93d01a01dcdee4690fb541d233e316803b1576f2fe76e63093f7cfdb45a3bc57493010fc5a3f182731b4cbcc157c1b32e1a24dfe855787cdf7bc49a2df1029ffefc9ef869e16ec6cfd0cf37fb8b3def2ff0bdacaa18dd5312e4efbf453c2cd44d6f33f4b18286fb3ac02b8491a65869c7e415142f049e19e0fba68936a0486f58834b900de70eaeab0fbf2855f28f09b4228b81a5a1ceef2fc874a1870be496871b888a33753b85f9bfe1fe54f5e156ed7aaf72ce93302fcfc2fdc04df9477d6ea744a697d39751ff5de0cef9b948c80ef462fbf02a83e673a3309bbfac1d8de02cd1eea32d91f17dde4b7fd21c2e4778eb626ae4de1eb2ddc37da66eaedc3bcf1e78d4194bc4115f94415eeaa494fbf02d83781a769525a954c7296f2559237489237389245320a3c59d0089b7dc290de944be1ae66d0fef41be2c76155ca5a2beda1b14a445dfe98e86b17240c0c32c6059b046d0619fbdebf1205d1d897e320eb1a7449cf904a713e36d91df37dba1bb9e85d0166961386f474e6a2cb6ffba1d1dabe750268df7f4a89e5ec38fcef413cc6656ac3ab118de1fc84f67713809bf68cf608a0f4c71804552adf62adb5de0fa2b16a240655a3203b33a23d4e77e4900d7e687f6a83e2d0beab11ad518d1c568f3c2665b26a4463462a10fca13150ba2ccd5516511f50d7fc63717c306cb645b03fdaeb91c3be125d396ed9457e3044da6337eb7eab8b29c48af1c1457f4a7b680f25022bd1ac19610c822ad5349a427ac758212d5b385b8ec8cca1389e73b118062f0596bcfa3265835a8756b928b30cab7c4d0d80320a24f8e84d92efff824a1ad3c931df6696ecb1031fad92811fca0905162e6472659c5ee87aa3a70f1afc1ada5c943d027857e0a3f79cbde5bcef8fa0b1b9e538835c87ef781a9b33f155e0660670cb7156edbd33073658f7edd4993baceb3be09e334c72d15fbee10b6e690e80986a2ece67812efabb1ce7cc1e615dd2b4fca1278c567a6390045aaab632805368723a3cf165ca86911863511469383134c22b2317f71452ab050942a36d20450edb2368f0c20fbd2ada276898c30df4ea0791c336c882384ca157442ed65dbfe0041d7ab5e71646b004bd1a5dac7f00efbbc721975d3084238dbfcb3fbf213ca0b9bc6f347e1187295a7e9e0cc0bd1a571408e0d4ab1117ad6a2b235d1f1544d22a105c44fa0112a57ca85c94128631ce279447be56237555ac57802b7e05c9133f9c298f7c7979e7ec1bfd3d29dc379a1444fb4cef1cedfd74ac1f17ebe6cf7ac2078a093ccbe45936583d2ed6ed594e3c8bc7c55a7a568d67edb85875469e353309598238cbe8b0915c0345122c3e1c36730d8b0f172bcb0f8795720dcb0f172b0b10876db98605888b3589dcaa51570d1412f896970eb3b9068a087c0d1449b8b0b4d015118885aac4849f70d82eb1fffae183fafaac1fe962ebebb370d838f9970f176bcfe6848a7ff570b1f2a46aa0fc8b878b75678890ac230721bae6e55f3b5c9c396cfb90214fe8d03530ff0a32920e83618212cfc3efe0c3612f74f0e17bf896203f1c8602fb16df220488c354b8f8d8b71c05994364fe8777d171518809889f79971a7702ff6237093ccc2dd94c0d45043e667b3964c810235db36da6862289972ebabef440842b2133218b4cb80a12b2b8085740421658b86a11b2fc08573e42161e42967187b0851603f3b27a05ada05ebac84b4fe516c742556262d11af245e430bab3e2399a4715f12203f894119f5d46bc925d324b6671f1b88c2e2fa38b13f8a485f6ca5bd43ff49ccd765412ab48caccb97a19262fc35fc648e9656cf6ae5e26267903f13456da7f868c157be669acf4c8cff841a654cadbc5cf88cd803d8d95be3fa37b192bf26eb15d6bbbccc3cd3448f4eb3dfa11b1f2325e5e06cbcb70bd0c9497a1e2659cb4b8acacbcbce4dd030b4bde3eb85c79c73c8d954641c9fbe567b0fc0c98a7b1d2d4d5e3629d41dfe5848bf5e46dae76f98868a12779efe0926990e8957f317a397a11e2b057de5bcbbb745e6a0e03e2f5f55f82386c268b473487fdf0c3091087c9c8bc28a4c8612e5cbc7451c5d77ff9e1b058de72c8cc8b415e881c068b7dfd171f0e6b91817811888b556c09451f2fa3c37800c08b45410edbaee9d777ed903252f3f02e1d0e5b09e2c5275cac400eeb61e5a58b3de070980f0178d1868bf5c761313e3ce1b09797179d70b1fa388c85e55d361c0693615eace1ea71d896435c2f5d847d7d97130edb35312fea04205c09225c11e262a52befe271d80e353bbc3873b1084575f27251a9b15095985c358a508a54149d14bd8a5c7291c30020ea701810e20e87cd883c1c2623fa50d5177b883f7e88444994e42df668f941e451e2e225ee78c55e2e2c58fc1675b05065d1870844634a64e9aed05d437c89bb60bcc95d427ce72e22be25aff88822ac850f3ce42dae8c0edb61c587c362f2d75ff9e13098bc02c4612fd9f4f5578438cce5ebaf0469f9fa2b478e63c508e692371449b4e4bd1264e5a5c32660ca7b05086591c0d358e92eef951f2ed6a7b1d22d6f7ae930576ec91b8a083c8d9566a1ca1b0a259e894d0aadfabde2c345555ee97e65a43125b2cf26902575c924a0df943718812ca9ebc57739892ca94b00bf92556a3e3d567c567c567c56fc8a0d951a8bc86113c86153bf831a045bb5f9d247fca59bac1ed5aa955ed2d86cd5babcc5cee715d4f960908527a744502f7dcad236e7ebbbaf2d3e4e9ec5abbee4abcbab40f9ead5bcc21a97b0a60b6b5ac29ab06625ac6111d6a8c29a92b04645e8da7be8399ba938f957e812d2e8b4cb77e10c1a2bfd0aa2bbd7b784af5acbd3b04508353a7916e10c1a27fae448772c5e15b218c2ac241c828ecb107674f7d4c64ab310d236d72735eaae68a66d48bae489922ef1519bcdb40d4a97fc605d42a4bb97a19acd66da46a5811c3683c6892e1952d336550749d110a399b6e9b4eaeb0c1aa05601d1ddcb5871349b691b50ab70d0705df2a387450fdd7da5d1695596420834dde53a9bd96f0024efbd27f5a63d411c56b34b7ea3a980b0285af941895a7cb88caf213dbaee4f5e0e1932c591c36a72976990e8925781e2d2f55d214af72ac218173bf11576efd27d4b285da4ddaf84d24516ddab7c0339ba1b020e8d75571362a4847c755f5f15765f12764f85280fd5b34a2c16eb356b45b35e15bac857f725a1e862f7b4e7ebf843aa14173aa57be9eaf2664202d1295dbe80eb9dd3915e7e0338a9fc6a06208b75d4ca5b7c15b7ca5bfc91bc415cdaae296fd155422352c2bdba82aecf0a378d62b3669b0524f16fd488b38deb6e7723cdd45e660de0f4247fa2357e501ea98dc8fb0790b7aa88ec58af58b1e3af0285c81beb507c957e41127a3400410d021ebacb3bc786ee9e0b374e107d84b638c74787dde1e9f1d1f84763cc8253d3dc7b3a4518bf748cf3ee7ed7190d02b85d46169791c65e41b995025efbdb65a4dd8e59116e59f4e18ed19bf618b5f80a7b977187cf3c7cab874ff1e1c1ef7ae0af0c78c57ce75345fe01df3be025122fbd6f40e784ae0ba811c4092136ecd113baee4ef4d8c01dfeeebddfc21a04d8f79e86f801f63d26448d27f5a93db4e6a1a3c10ef5b03a4b3031021cc51ca44b0ad1243fd455dfab1bd55a6b35fab9f7496ad0cfbcc598fb386f17f7858bf7c1dae330d457afb586c38e9c47d770d896f596ab517d94785475741c2635fd60a0723572f1e8f4245daeaadf5ff23b85a642af304179360889f69f09537f9b289e3376a8768f7a1cd6e09fb36a640476472fdcd2444e6819a031c5fa26a108a4585f15ce9270ee442148fdb1435b104deb8c62cabd7f21fe3aab3317eb9e9ae4fd2b026bfc24db438984db04558f1ce61903a2919d75dc0703850a31f73df7e1882751e35c756a05bf7ed56102ac46f54803790917a39883de92b623ab97d61c8685843f7744d3a642babea409955c7c6ea4a2aefa18834e7afb5573f804e2df5e5ebddd280b7a4b5a350a72b17e9d0555dfe1f56b90ca07d8a3f2d0f5bd529d23036414860c81625689645e6631c08a808541598ea60278711b6eb891bb51086ede0703c70174da78bb8f08bad37d09f0befb12e0fd12d4e5406817d29d0f060e42656eb500ee6a54ab94e29e137ba569cff56514c02dd7a751006faeef356b6b1f86f1c0f328aeb3fa0b3cb903589fe5ef71005dfecc47b888848b2e738dfc182e7adef529a5f4a54a455ffe0b47c24a17a532c6114848295fe41889048d7cc7584e17528a1208d15b55e78dc19c249952e5fb07a34201044f53ccefe26f4700453008d46f308b2ece17f1446590ba26c8bd74518635e093f00d40a909a04afdc6b191bfff3436925f640caa4839fa3b81e1bed1e07bb8278c937cd2cb37e56830bc31f1306148ff82ee148ddf4b398cf4f3799833529348ffc120e5162075427b93f48529176756cd7711d70753b47f05e7cf1e7a620c0750ba58e553d78605704b212984a1476f501f2125919e27dfb04085119461d2403780febbb6618373ced86c1c11e308176790233d3b3dff0887c5f8eac3c02362789e100e937a0b63b80b4f1909fbf70f42c242ff989c49c2370fda3f46ce28e1bb45fbbbe40c0526ccfcd66739b3440f12b6e2fd5d5848988af757214329931f9601294eb93bed54fb934818138f9230d5fb9b24ac64c6031346c250ef3fe5cccd8499ef225ff31122a1db00457ecb31868bf345321249cc99394b293167a60e05e6ccdc01979833b3c66ccd67c26193c7332061f305367366f6b03c3067a60d37d2f36fe6ccf4f9913c9f98303a7366feeccc998963c2cc5fcd522779fb049a302f90b049043975b8d83367e60e1b73660a4d189ff9608d1d3d3c9c09d9c6d4e1b039e44490b0290529ee9833739c30f377cc99e983093ce6cc24e2020f3d7f3e3167e68f9f39338b70cc990964c200cd199a0933ffc713db07600afd7328a79e3fe67cf943cf0f3f749d15282a06500484a6a6fee9b74f17790f45fe14ee1c7da21a1401f37687b1fd4dff829ac2edbac6f4f54fe1c6d1a69fb4132170744dfd21ea833fa5206146c8390e79bfcadbb5c97c5538a790e2fc9270c261ae418af3a78fc905eee74fa23923270cf7f3691ce6d99b90e21cc9db35e953d3c7f799e6d77f21f2f3276d6aff39b548defea7dffee0694af1f42f4ea6bc43a04d3fc1f7b6537e2184c34093102ece2f85db4ba0ab76839e73a0cda83386c33020791c8184ad5a7e4e9d4a1eb21c18903cb410530abd1022c607ace7eb89433b9ef30467e65c3a72c3933f86ae4f7c4af79294d2049e4cd9773cf94d7aadfdd899ddb13c50b0b5c6fdf87c4f227d29d0a23289440a55b70939b0e10ca89cca368328b83cb74783f3673f974ff9270683aae71e8c61ad54f9c6883142312a1014baef71a18c8911c57f1508623c7f7e7e7cfe90dcdd4ba49329347fb00b30857a4947444a547f7a4e157a3e4039aabed66ede1814c91b54a950590473ad59211ac3180455aa7f9fa191a848079d3225a2a3fbf8f8f8f8f8f8f84c8d6770ef6d61f75c280367a6533f7fa8eb4ea039f4cd9f5a6dd26a6d7b29859c6d410e6d381b792aac5ad22d3cbdf75b38896a3d3eced3737fb66334bb5f379fd6ad90d0468584509f0029dba6d09c41a7bce790bedfdd9368c8778ce688f4fda7313a82348649cf71df85395074bccf43747fd322eaa33d9227bd0efed26fdf2740cabecc4afdf639b2cc4a6d1f8394fa1b924cfa548e51faedb77c83b31bc984aa1017659d91be27eac2b5e630a9022d900dc23d7713121212da3caaefb55bb86fa180ad51476974ac334a34d2b1ea28f994901d92fbee88bc1ca9238d79d90a955c914cf24ca1c9f3f0f0f0d8a1517b5588c6aa500daa40f72b0fc5f8f4a72bc4613364cc217ae46598ea30d3227fbfd61c368d527f0a89903af59e4828f5482853e1d41d1ec109b448884730d34242a970ea91b0d231a434eaba9fa244d475fffe5694aab3f0fefd6694f8366929f55bca0a09cd28f90d4c2d62858458239fa2d599c3547fbfea38ace4efd71d2256deb4a6efa646fa620c82a7973476b242345647eaba8f31087adeafc223bcaca353faed754c1e8f8c3ce97364797bd2c7d89e54ca22c811a3349263e01b932c82528eacf45d9823f5259ed768ccfb4bf2f7678d465d6e44632425dd7b1fa37bcff45da6b318dd93e49bd277d98da8ebb246fe638d90482feb58c71a4481a8501defbdf7e5a640a437fdf63a3adf974ed4c79015b24242425286bf12253a653a521c0ebbef348c4150a5fa1745ee77cc765185cc191209f4fd0a072973f5ed1145105dd3b71ee9fb4e73a399a63bba04a2c293e9ef2f4163a5bfef81b94363dbdf9f3df77df4164aaf81f5a58ef7dd6f49c36f7a1d1dd26f256c6ba651c859fedb4b190e598e9f01f5711641a62f02fcf5278e2d64390e592e648bee7379feb878eff4b400d6f1e2dcc9fdf0c3933074520f63e48bbacd58d6d849465f9ef40b7727d8eb1ee3e2c50b62bc3d97f7fd4a6daee1165e02506b696a0d4359f57d9a7196e10b172948ad0d3cf93265bb90d328c0fa96343f94f7dea9821acf9da104937098cca140a59fcb5984b984090529b4d7fb78fb09e4b0d9a367108fcd9d71ee7098a4020976b49bdc8168f7cdfa945eb24950c0459785208d49f008c42eba10bd57f0640a25b9e853091a9bb2df13684f1d2a1aab08f9f367ced153bb164025a48c943e9bd0fe33e4dbb7435a6a044c9912d4e55f33b8f1acd5e959e03e67fb1877db9ecb37dddfdcccc22f65b2a663a48cbfd08b1d248c468af4a5a0a9e82261b8f47b45cb6721675228a184dd2795c899939584d9cf73e6a78884712f5fe2d49c114235675e9ccc19171366cab0c817fd4fa5e989a6727a2946bee60b21c320c7c0e30034128817b2a0e9bf983372c26cc9057905cd22650c205f3f2416d24083069a33d0d068cc4053061a32d000a119038d1868c240534403069a2fd07881e6074d1768b840b3051a221a2dd06481060b343e68ae4063051a2968469a03d01880a60034048891325e656da3a4a331855e4a1f04af143fc64556bd5db4bf0b159a784219788cc1f33ce9424a59a5fccb85524a29a77451becb6c735d48088a1e7ace5e86544a39238247e9cf27c9779e149f41d65700c2b8efc9ebb01313f025b899bcfb07037c0fbfa4bf997efb609868b43d820208bef018930d83a0ca480aa1bc7f3002d3c7aa2cab07d5d64a29a535949a527b376a652da8ad95526a2da536db5a73d44a37f1d6ea30fa574711c93f18fec1b0b5febdf7de7befbd9789147d4932a52de73a5a0e9942ce48394858f772a64e98364898f7f2a5fcb9063983278cff4c0369c24c34c89a4d11a80117dd8fb86c0387ca7df865aee1dea240ab40fbefb00352f4f7ea304ba0fda97f9d730453d2a1246568c897db4c187f3dc50db9dfc29da3b7d780c3b8fcb43e57b73047df50d6197516dd3ad0eab09d4383fcabc39cce49034fa6ec985b49b76eb5da30c55dfed508fc53ca18a73f3ce9304a6d0d81766a2bb5344b17a7145e7ef5f974fecdf43bc09c74da392718ec86b98ec3dee6912ee9b35da9e2cec4e10b026defdd609c56846b0ba4e8c3d8d4811e2334047627ee64024e9210bad9ed6edb76b76debb6d3457ddfe6d44bf841d34682e7c91c21b1251f0c6afa60d83799c0d2b7c5aa95a94d453109fc94c907a34e18f7d3b672b65a29d6506aab6d7dd9ff3e18b7d6cdc423a936938a6b35d956b37eaaf358f3a32972966668dad1d0f44ab1ca7975b5f66d08e6b5db0c05c5745aeddd30d779a4afd4c925fc10334dd774efc9044aea25fbd614134369131405d405dadf2b99400e3ce1d9c9db4ed4a5e50e5aee1f8ee0b6992cd23312ca130989389a090d491fc6de5784a7b6cd6ed78a78f66e15a6faaddf51ff7c4ae9dc07e37e25a1252425245ad18928049ecab3219d92d65abaffc2ef774451892ae4c6f9519f7476a7745ab56f5ff516436314052e108ac1d06cc675f63d132ef8687f4fcee95e2db6b6eb3ed3a9c6f8a05d6ab51a1b6adbad52dcf0bed177cb92e4b98862f715e1a0cd5aca2bb18c711113a369f5ba9f5ff2ba98b301d7e45893445e8be952feddfaf7f2b76bf1e4535ed48deb40299cd2c5a1a67ba9fbafe6bcb8df3e18f8a5c33a9c6bae77afea83c17939057a8dfb86704db3b09da8e8fd8a48a526ec5a2964ed7b249ff55acd6bd687e4252e586b2b9e9c5d55c044beaa8905341d91621da93949b15a9216b08fb1a72e17bd0bff837fc796fbaf94da14f0687f6f3aadf662aee36acc4727a9640231fd481e78da408a5ae9981a5304aadeebba0f867dbb8553bab0beef9d501725624552f6e5a7ba11aea8c8c320474848a289908b18eaf2ef4a3134e661902e7f3f031b5c0e242f72121b02b15ecefeec2c4f690e43434352ca5cee250a9598743237abed466dbd76b3db76b10f13ff09103c5cf830677e20b23e7dd08554fae0bed28d86d856eaf3aa9470963773b35b817dfa11e19a56c7aa6ce5cc571ff887f6f7ff39e3524818ff200ec49f66b7f65227f222a779cdc7d1e917ee46aa175f4b2bddf60783ce2fd99fd6ceb61358775827a5102d65904f4ae9434b07c263d8077ae2311a90ba8a30cd07ff8040aaa01712874639c33b72a847d3a88bc6fcc7850b9a4a05fa8f1c9a73ce39e79c9346633e84691b0dc4a04af5a24887627668acee5097ffcececece0efda13f54cea19fa19fa19f21366070eeecececcc1d95d779dc6ff966997db04363f587d2a11dcfab1c86b82114d05c508b81f6dfd4c8de98f5a83f345655e010ad4375a8caa10ed5a17a86ca06edb6894aab34eda70ce0ad626c81e67d34d8e9b4dabbc1406f235dea437da80fe92b51ea438c8bfe312fa8cb9ff441e1c20501bc8fa62b99c21469c4cd7634405d74ba976ce8e2a27726d062123d51a9b6ee9fe4b08a3d05ca1af70dc142d3a73e35206c1e8afe4ea91376a747f28ea0310d50973fee467fac011aa337a4cb7f07d2e807b408da371f9f8dfed85c69a63e4200492eba8fbdf6a794d9fcab82174e004bec922ffc9401ed3fa989c6a6ef4b1406b4ff94aefa9786557b944443aabd4aa2dccddad2f7a64b77eb7447acbe095e96833efe6dbbdbd7ef0038dbfc167a59006b75d12938e1c043536aad957ea521c618fc7ebfaef5a4ab8ca952400c03d0fd4506f30abd5543584dca4bd0fb5ede2b2e97e91768979682c1edde94942ab18f27533607a4fdbd15d01829f689a798b709d1d8297b0f75f983189b40b0a452e5eff15181dea31a42c094a9c2299b52f0f7232dfd8484531fb8e3b0ee77e85d9dd0eeef430ec3ef16631054a9fe456d471ae366a31d6db5d4de991377e622877f72595692af00dc77a60f50b9993fb8bd6a13faada6fd69dea2de84a61436a1d926640270fede8428a51c10e79c0f4fa6e4d85e76ba23b11040faee9120e5ee9120aa91349d23cb91b90e75f077a14ef792ba3c1a7a528032a491b6a1fabe9449b983cd9132bc55dab76b1c5d750ffafe942efb5de64e19b02eae035877a1946d384fd9c2bed34929955f89cb341c4f5b7fc35eb72c83ea9bebdf6ba390d54b91a0740d574851c2ec11bd556450e46bce9ca84c7a77de484d4ec9571579493121827a895c0075724161e004b69c32009a58400d984a2e938cd22796667ca4956f03244f8564e3752c3c0e745c4a4783c32dae0378cbd803db0db70f5cfb17047685f64a7f56154a952f2a0297affa5e9ddf7dd58994b1ef8ea369bd1bf5816a9331fa977ebd59d28d5a4a33a97a9823d52a39c9712a95898974f97b1d494a99694bf66b8ecdd4fa47ab715fab8b340587f7d69be773e166e285cf4aabb2a602e300d6b943d3d89f13b2b196357d378fdeed5e5993b5a26a6f7892c672dc2dcce151d20d91d8c921c385aeb1a11abfa8736445702f634e6d73c870a16de80e53572d3f22ac6f9c5d35b61fc355698c9aa76c51aba6384f3d6d0e1a4745ccb06f83f594affa1fa5b474ff664bab0dcf24313839e9f297a70cb82a074a193ae7e0c9940dd67adf6d48da4a6a2bdea4586f5c072492c324f5e69c73ce39e794211329da921c269d446952522359035fefb8386b689f3a4d90d2453dd08474f9a300c76056c160aa450ea4e537040b1c0e04040450fe76a05a74e349189023a55cf439bfd65a2b89037f5379ccfef62a17371dfb267899cd396a872b576bae5ee516ca94c3304002559544d255ba88df561278d261568ab53a6c7740fbcf29c5faf4650d81c35ccb1c3aa711bcdc0265f5445056efc4ebccc984f1df767ad5f24587c99f52864ad1bb53bb0a3d7fbf3c08ed17ffc99c0102d4be91fc81c0404cf99a786e37bc165056cf65a73813728ee3388ee338c66c78248c5ff8e3900992a40199342a6d5230a69eada9e48731a5f8de7a246550b8bea4a39d55a38bf1bd76568dee4b9c69b8c63e1de37bef538c9f55047d7f7a3f9c5946684cfaa949ef754e52290f5aa3426a4fb5b1559e99ce15eb1be9ca841452edcc0e8923c66f875cb4237e9cedd8834aedbde3a733aa5e82c66a0f3b847a3b3a6cce9589eaab4125930aac223485a5f0034f2523d70e0dd91e1c67e2aa92919408c909ccddbfa0339c9a0bb7e4116e2534dd6f871cd6a3e48edcd415b924f774c18bbadd9db7065dfab71add5b83260e5d4b7c8c04e58d4195ea5f66239ae7cfe67124f9615caad306c1a01f0c9ced0e5275a2a34be4df72ad516b549e25babc71299b545f02bf9c2dfeeef3cf1e2eac01a2eca8d42bd756510f3a45230200104000e3140030381c1088c562d1601a867124eb0014001079a4506e6a2129629253c81840002160000000000c000000203100eeb29872b23493f8b32ced966237f01a1781e19044480a3396c0f645f6d83f9ae0161cd91681a1d1544eeb20af2229b087a3b72308ecc9e87aaa08ee689dd9730e7fe43f0fb8356067a9628cb61098a84358bb861ab0e7ff00e08c01db5dc265d65e085e2966070035c4cd189887d0aa308d65241efc859e903606936719989610bb07a3a21c752188c1d5437de14ff16c57c62562087e34df16647fcb804d37fa8741641eb82aad5ffe56263d30bba1d138e7e7f76fafcadd66daf0ef50b0487d943e68ee51d26cdd3beff5712a30953fe454df9d6f434cfc3f7c023437e0212815b528a98e86384146a05e7ccc37852d2492de921db10e43e4f7bdd669b3e7227586794e32f8c5f59649bb9048101ee62b8cfdcdacbce9287c003d7a18ac0df76010a7d108ebff330261f906515d1be2e61fdec261a5bf979f5801cd0495e9dd1b9648ddc33a97763bc7ad06e5b7bb2602db77df84b19d760e7ec2cc9c4367a942abed7673167abf7d976695af44b20740a02e4e852a3db7190cbc185ec1333f7c2193986b5b3ce550a2733f885fcef1dbc35b5e46c2d88c14a2443272afecd47a8e8a3422ec4ac8b203fe2a5a03b3f63ba364eb63a3faa0fdc2c74ae0af228fffee6a9aee909c9ab785ffe8b46afdbe42c6f14b4a03f3627dde143bba625b54d6beecfe9dc8db578aa4d697bc1352d768062a6479367d8955b76a1e8335478865f5a2bb22ea4e01ec81d45b935ea63177ff051def7d84d68f56fc0c162101fbab6e2e1af115c02cb1e34b0e29066c025b17fa1bda389ef687bf1902f9db862413ef5e96e3d1d3a50ec1eed7f5659ceb86048530b487b6ecf7a80f528b39f3f86e48d5182b6d9967e81c70f420406930b04536b4c6ec6a794cd4148dc2ffc081790ebfcf90b12ddf1bc3547b78350bedf32d8231c8d61bd788fa043f74bb13299a21f166cfcce8d88f6f433583fe9ec7b14219acffaa1dda44b2358f0b250412c1328ff6a7309017a28ae762801efe98ea4b89483cdfbb2c465cb4dfbde2986ed2006343186e290ab024fc9ee0c662d8c4cae74206fbfd7cbc129882c281b0707a80721f117c5c36098a2bb53c0f71a7a4a751cffc8859428f80be4a43d717241004499ddf11aa0f8b01a5ae14bba0043e1028d3750dcfe6227e1bd61704216a6de3bb2793ff044e0f2ea4dae3274ec655f40a4e4834af27f3e1af6081d8df0e6de63a0f69f5b13e26f14e7ed356ed189ac3ce6609c5a7a6cc047e21806724326d8242f365412daa8706c5d028188184fdb35f03f39b41265b85ca37241ef414d85ff3b1e0562301913555602d0587d20d623f03ca857325f2052d1cec1448464a631c448344dbe1835e191499bd22d31e0048ed12db11803cf13344daabb54fa0e9dd3c9368e4f46283c2286d59887ffd5ff67ac0df325ee01ad462c5023efe764cdc634cd9e466efe90162d8a4a41d04e90183923aa10cdc5900fedeba7094d08c4aac80c5de79505482fb2a0326e752be337ce0ce25bf4edbe891edae56951d7d4b212522d791e72d9276e4e2a727d0cf049af649a7bb1c999a2d770125d4dd7991938195dc2b8719295d3e3aa1c9b61212cf355448e78f2bcb9b2e9fa4c42a562b1649a768429aca43c76dbdb9e3df08166efa29fe6cd0c2472e90bf82e5ed216a4174ea665a7a84804467ceddc9030e84279de962ae14ee653bf4476e07a6b47fa2f33bf0b76ab1a648ff9db6e979a24b561ed4dc0a1c673c838a80d41ba75402fb21b69e44688ae98817a905c5431623794b664383c26685ff4ac11f7cad85a77d6f76e82e0baef1f5508a2736577c5f44fa20ae4a6009c1d250a26d1241fa92ff055faea9da53df048d8eba9f71c5c1338265b93c5c18dcbf9c5864ae6459a0e6956f8fb3e6705be7de0020d63189ebdc2d6d2578e0d1844448cf91ba2835b032ecb469470511ea71834dacf4054d48ae693f064a24253ee866e8fbaea4209aa43709db8a2e4f9ef7434fe4d50f8e7430700cfb53aac17a652ff0698441355e998e5cecec474037a6cde3ceb821b0df8cdf700fc8b9608a836fbb5c33383c9d9c680c8009c1210b914d2f98577abc9ea658d1c1ab25934a256b33f54e0c78ef5cb49b86f654d63aa2aa0cb3fb8f4c00d92974a38ba01eb344a0c4176d6686c2999fec3361834a66dbd965018fd9775738b710facde63171518d1e7e4f2df0294c54b60efc763c4aca53e71002146dd4adc528b7e78e9b5da54a8064861d2b3475504720d3ac479c8b8a7a01c47336a79d39f4c8e52b8c990da8eb784b3c61373d2f22e21f49b3ab6c0d0c302e3f00ff3676d2a7b3f8f016f178e66fe2d111535d4a0fdbda5fa705e9a101dbecefce01726d1045ac14bc720bef32850159956081025a618243f2ffeaaca7a2568dd50eb4632b508da3021fb020a083846d1c4bcfca28e8e722b603a08d87b8c1880e5614ea74064775094c4c5c4efb9cddc36062f60960d88605d295fba936f61fcfe941b3041ee2a4e813500d65f68a26fa74c8afbe8317890604b2dcce51b1fad86856e4dab732d08c0d54f0f62d756c0ee454a4683fbf4fcfdc104f8e20c23a0bbccbb4803aa20b7b99498a1dee6d2d14d525070dde8cc8211d9cc79c39f134b365313b7059334e2c8365eedce8cefd364a488e4c76eefeede95a619a387bbdca3049eef0914ab2a9444bdfc5563e8b93f0df1f85652d0451d3392aefaae5cfe2b9d978eb494be10961694595f9a7a667d66e6adba1f7201567260fda135f71dac0663b550f00cd241ad3d48ef21c79532fb4d4a44a76cba58c950a2a8ead866f3454477e69555789a6fc8d61ebc639f002fb1d4ea7d2088477a5a20b9751189f835001f022e4619ac5dbc0bb34574e11b05b1e65d7a7dda36551c53aff5ddda7c5a34f8c509914e51fc693658c14fffd2af255b069969b5c3b650022206d241700d12ce312e5a0688ffd8d5859d67c8d79ec5167f02a7d642d3db1297f7a5714d7090ad0bcd8fe64ba79c8bf50c9e6710d812e073aeca35dc44e31880fa5c53f7ce07849141883ae28620ee513c752cb78834277e6308934e76029b59e524f1ea689d1ec45ead8be99e9133ad8624bbb6c911ccbc6fac06c941d2732975f12a09719919427ed145c0e04d1f70ee8dc54f77d50a1d45ef2d903ede1e2086ae202dc4ce03e1454e6df87c9385653c536dae154c3cccaa10d0ec01c10ff6c6f50975a17047bfe3e7503aa3adea7bf8083751f4c2787977557d4d0725bb9a1b700fc2dabf53e9bc65d42d4638c2e9619372a46d0b1977cb00fe54984cc2ae8db1a12eeb0f5a40805af76a8ad7282b316a1a72efa949db25757851e1c5103b4820dc6fb57f95ea2abfbb28e1432aa85a817ab89b8ffd8949475bd745ddc4f3fd4e33a7de6eb1cbc8f92f4208419b8daf782767ff0d06add6c33f1ac107fe0df5c555c8b314d9d3efd227c05698eb87d48ae004b725fafd137722e1b5c7bdfa584feb0a6067c8badda671e48db06faccbb62a1f6901a7654bb57a567c12fa6d6d086229065db97b99388d2cdc4a75d465fd6b7f69a5a70c5b79d5f250ed2a49e73583e0b427faa93a71ad7b05941df2ec90ec902f5d88841a4e4885f870651c261a37b06613a005152976924a5b7daec0eada8464826c1da8203f80c40e80c3906379703f9f2ac14fed7b49c86721f9795243d1c4856e031a75d4896390ecc7fde3a24f37916709c16ca532b08625b67fa980d7071bd301e72f3cc903b65f2b6f914067f107b94f2bd6105c88d2f57e2354375d9948eb6bcd18ce703a6a0f4fc5d6b9170dbedd18a73b008dde1158fddd050c5afd5bc13661b4ecbe97592f23b198f95816fcb2cac6c2843d2b29a08db7efcfd5b450e7925dfdbe36842c33f2f8e48d2ac3f9e130fadc6aad552bacae74bee3e2f2471535a1e806f4f443fa1f68fa941a3cf4add3bea2b40fabd49e5880f2dd7cb911cea15125fb90e677ac907c2982fef99f0977857fd4f117e6540b57aa7c37e022ed04bc520674d31233d79b023bc5e6e8698254bfdd1fa5b64fb9596596a90ec1a1bedadadafefeda3a904a5ad4a165b490a48c2fccf7b220ad24ea25d5fa1ff65830bb136f11ceefbcf0d2ae83e388eb9b169f0da285d4457e8ec5bd1dd5d2f8cc0f6b1500295698a54b2a7e25fb1aafa26a0a9e8e3d39db421a3fb9df4337d9e83312ecb1d3de9fda8aea9102f2673974e5fd1d0075e1f07c2927147707601eb8d86fda14dcab53f00e749a44631faf58256add3197e19c0f2c03ebd922f81903752fd970805f39dbc06f38c60727f756538489532b6568566b54a1ebbdc42221120e4219c8e45cae5da6179cff669e57a83acdfbd2871d176a985bef5d0ce355d9f79caa41033413c76076e23954e7c5cb830dd85b82360bcbc2635864b82e94771e7aaec64a88369fa6a9aaab98bd6ad14958c6803179a8a4f38b57293cfaa9526238317947ceb6b425c11139ffab16f3eae35a0266b1f5c300f9b4fdc6a304ca6de1e66a7d6ff9f86f6ab0768533eb0a042fb4368af6b943db363177ccd0e7e1dabff3dd66195599d422658747a883b110bea08cd4e37b98e48131d51c7b86dfc1272b5e515c9cfb8420b4659b5a785647eacc5a96c0d44478de39c75e439e46fda85a461c8af89c60c76c67afd2c7d62c3430b4b1f399d9293cc9e3c9cadf17fc4cd4713a676eb1ab4ab246c436b10ed5e449db0983afdfe79ccddaec66088ba037e730027b57d0866d2f383af39265d541a80a961d420125a3c051a5d2ef1f94473f10c9c86c2d19ab060360bf5521f3511a15f6c489b39a63a02efa13049a15f88dc6b8c9e4d7b6a6ec478e3de7e223d2d08f321ea1f466230e20b1011ae9fc5b182aaf6fb8fb1939442795684bef53cdd6e2fd7834246184c0a53ce9721f29498cea5c30d33957bb21cd45183669c119cb60765ba32f6e73cf7c3d5fe31fb5dc6b1b3c11217c72212bc13bda88b47f917a9846651b5fbee23d6f13599faf8c189b257618e4da277790013921d26f91eecdc8966b3d406f6b3b31ff1cd121c186f4a1f48f0c1bc532f81f4997410dc1ae963eceeca34e0d387a2e85fb89c1b29e8bddc4de6e1cc3c6b80371c28885132f0796058aca99708ebb797ba5aed3492d72d4401e67eea4a5390f59736b79991327eea1d0b7a585adb0a37ef4891cf363ee299a7e542bff7a16fec68c671ed57107722d803e18295d8159e769f94da2a9461067b60e420f044b33c7d2923bb5f5256581bbe362aa33a53847c91f4c46601870a09281d46c94c040eea3aff418bb3f8b8df7a30902e21c7045eca7b86217251453970492942a5a364279c562a1078e120b5e33b2b0c98d6540a6f91585e182a93fe489e28daf7dc5d856e34f1eab8dfa084ad5a1703c0456d2d47c2bc6115941bca498a0fc9d2a6cc0d9b4a695da813bcc00a90a1dc8aa2552f0c5a4a53ded85bb4e7ac4e65555c0b31d142e6a96195db651becdf0bf74a00144e4d5b9f2539c02caf95cb725964e92ee642be0f1db26107d2e343117aaba241eb2889c9d4c738eb5cc951b585dd4dc5250b79836daa53faf3fd1de1dbac46f3a0ec3d16c7df76e746fe1e6e042dd99e5307668248765e52f37a264b162064d4644cf0aa543e4a2a8a041a730edb83d6c590b3103002dc47e943a275aaf329fdb61f1fa16ddf8be5040a281feef1624802b3f090bb4a1d5fa64eeb45d35c120a8eca3ae5fa99b75aa4baec6225bdafc36c26417f82e49c82a962eb135e8b7fee681a6962a0cecdad36648c8cd2dd02e129f8f3b0f9a3dd38b9c7b6619b7b4128c5f273af6bed340237f0457a57848570287208483f103ee5e59911d257d83a7a1e955e1417b1c84a3fb70c6181c35b86bbf77d36fa5ded2a3b4f3def4af3231675ff0037802e67a6860ae789499c0553575866e208c1a02aae19bc18d1d75bc106e5d1c221fae4312d9383a2ca0931dc63afdd2127c0592346e4e814285e2f6225fc87609799498211a1d6c80e6e4c2590f6631a390d26dc95d8da527f67eaa5bf9916534c8c2ef77344b6cfc39e8d8948c658e378d5f84d49ba3232bed215f1a874afa3c5801118e55b1889d27984d4f233c2aca2678b66292bfc950ad660c5aad2336467f8ec117807bca75418f727e409054ba8b71703e6208c0f75cc7743f2663ed0c4498f47be549037e9eb6b41f5a4527f6e98d360afe13d8bebc3ba7846c8b5ea3de4476bc26f3df62bf20573da4d48024fda5b54de5a9868ddcdb76055e5dfca0a59cacba5a31aec6f4a964872b61ab3c21f1baadccec8ab0365450eea66a15d8ad6410d24f49c7fd74a819dd1547928dbf42620a1a8595b65362edcf5478059f543c2e861681be988dd1a40e9b0a50a165a47464d3b5a0b20e407c3448333234607979057948297c5aadaa58c8d3ffe4b9c7a44ffcd636091ea5ac149764c346017bf4cd9ad2d924866d20b856c72eb1fc6455935d751bfa1358a992cc2c3460b56c0c9865ace41aae97cc1ee7c3c433c4db748bacfbd36f70d4e2a243d759fd7a2046cfa3be1ef1841a550fa450be244106f4b38b6b74139b23e775ca05acbe4444b245675831af73208fb16447d12df2a8a753cf034db9df9ac9fe2b570494305610d5e59c35e24ea8d1e770e6560e1ad6aa49db3e8297dce0d09025d2a1206e515e092fdc64afef846a7bd49881096d52e85a6af50b9312562275bff656efae0533b3a131ab98c97bb0aed51d12855a1bc2b3d537ac11ecc8baf39bad1979b84cd8e6e41805354a59d3f206b12f010e0b00df7562a6bb45b747d12bc2663d45895531a67c371947d4bebaa0dbf1f35d497b7e53671009704509c58a7ee929ce19d0920294357d62567451a61e42b50d9be77990f246b3baefa8744d261160e7f15ea8c63ada1fee6b4df2f3f645d6a88ca9ac0b88ebfa2415a53369c8ff34dfd690ee5afe73515e1ae999a52e52d5137a0081b5ce45360b8a5f960a2cac58c2bae3fe5ddea3a9e81d29c93ccbb58b186f1ac4d0d3f5cace41708712b4a7d1667d1a45b886905834a39ed602ba02c7a8685447a7df046b4433721a8c442ee1c03693264222085245abd4a175b0b54608fb323c3831ce71690f141d0aa9eb9720bf5cb4838c7cb3178ebd2e6a4dd96543e62eb54479f7823f5482592560a72375d4ecc3855434829a2b393e71dbaf64e5b2e84746ad5c3aea496d71609cd9da2fb40e783d14e34e11f0dc181973578900165d295fce623d279b53c27ebd28719afc1c5a4a328780c5d807adfbf8899981c6494095eb08eafcaab1b6ae91d7f6ac14ce7cbbbb0389823b532072e33bdb72a9e33aa45beff692d145246606cb286da1ed65c6776404f5ca267380a6919b28fe7dc76f26b43b7b5d870486ab983c049dab55c33db8bbf8276c573117f3538828893eb320ba5daeae65b7d749bcc7908c53c1c7046bf844a6c2316825bf8ea5a9735f81b22f6e354752e4e5a67140669b33fdceda0aed8a8eb59db3353133f59c927efb2fd7dccfc03703cabd5eb6a0af6c685df8f7db2af33d3b437c1653bd7be23949d9fb48b38005eabaf936a668e9c2208a807e9866f6ee268ba6bd89645d545246c297e86bb1efae04789215538a509b424608519bb5d90919bd29e3802ce198ba47e463898709e8d80f608e92e561421951baa53c24f72d39f262e87f65cec40c440c9668e944deb882ec7b9d992855b07989416786ff48ea4947e460b161deb391f98539f9b6ca483c639fc0a6dd551b863e6ba30c28610425c331430721b0423b40305546051513e6df845b7a3a74641d1232d63fab254372bfa82e8fb2e0f96a3e3b57cc7f7c0936aeafb251e8eefdcbeb77c17b11f033df0756a47c4c15706268dfa1e66150ca91ee4f04135aead23e0138adc47383aae3126852d54634bebf0d44901165b3817cbe0d271ae432c9bf7bdf25b573fceb101aa7eeddf04e3f6159afc41aa187cd22ef54ee4aeec8fab41e8408eb4a8256681916faf6658cc5178039bf477176152e5bca407fbd63cda868d98fc25ae647e54e2ef4e4a166cfa3ab70025561b0e4fe8e2d3d0fbfd1125ea191a11940e6c28989df889eef9632f5832be34212523a595fed78ca1871f4b2956e238b4cdb9b32c6607e28c62f113f6275b73339cb817909041cb8cb37d8162fc5a4e2e5862743e851fc541720cea047da37c7c5bab942e7ef046235f8f39a7414d826778669211a4f2f878c5d02c9de7b43fc45ac19997cfdcc98006be27e8d1758e7b99a26f8e94c414b684e7c351a3c777f5c7a6deb0a3d9ab5a0a1149d6ded46d9d67863c9d84e0457bf641bdfd64a075a2abe6fef3d6515ff98fda43cf18eeaa12a271be4d67a7b2de274226219f3b10ed3ad7c7814a97921b358b5f6c000ad9af7e80333b4e89e25084318b2a9136d5b0c9d77f669fcd0959ac7d402f94af5db8bd2489dc9e68f047bad36a52ed9fecd904304cba8c191ec5f3ad9ccd93437fcda608597ec6e7e253bd67797e1b5bbb99237abed91f5597bf86382758dc00f9e4a0d7836f960e0c5a9293b399ef42efa3b1cc3b5ed43844adc488237de6844cfd805722c5c364455e24808364dc725fe7d49bfb83339b8baf12ac1dceb6c49094002a4aa86cc6e8bd6a588d5efd0bcf8aaf5838565d24c085ca64a524005cda624619ebe353ad0148af9af48e9607f5e2a4ac7418a17ea835894985e0c6a8ce8dfcd1da8aef14a211df2c4e4ffde768e2170c1c43479ff6f40e0fdc0c8822e4ffb2c485433a31a4984f6e9ec6a03c1d3a228764bdcd5b080cb5dd3d7f52e5ca804c6e7e80619f2588da99f9a10ef7246298cbeb08d8ba92f47c26f09dfce0c67884694ea4b43d0c945a0a2a8477aa6880068668094c6d61f3185f84ec1d69ddb1878897d07a41c06e88911ead4d576dbe9d458955c8b91670947b3e2f914dd6daa1f48506dca5c9665fcf9f58610402318ad491afb38bb85ab4dc3585002fcfe769928567ba255f1f6631449d7e82954d0328a4fad22d834c334a988a9ff5be599a0727bf43b71dc65b49a2da59db78d390d9f70434410fe374fbbc5da89d6337cbe7c3c816a7d7478e053096dac554c1c57d42aada3bd8e5226e76c0dd4871665e9c847ff87adc90d50ccae10a8325e79b007acf5d2a6635ef656038f046b726026172d36b57e84818024465fd8b7040a75ebc1016689e368a13d5eabaf23ed8f7e4041f7fee8010d7d676c949da550d6167e261d83ef43121a9cb1a4472bc1db8164d35557e4a6f75eee7d2413fe05053cc7cb478f923012b3c8066986d2900477e704e04bd3efca5437b231c0d63c7c296d617025898b699ae5c134db013832c41e99bd753db00bfec46f8c309c78485ab86455edf2106a75cbd462216b148d1182c651fb4faea53fb6c90c91c72edaebe6f010f2a7db33f4057dcff91e15f24085173add3bcbdf596deb706ce3ac9254891c761db8246cbe6a1b187914a12e15a0cdff6e10bec7a0d7daa499a574baf072eb0fcba1635872e6ee8f765dda6aee2a0926ed839706caf47cd0a510bb92ead2357a5317497b48a5c4911bd77a5e3b509e518d306dcbaee8ccb5a521b449d2d062a97fb2069b6ccf8f4a36cba38dda118a8e66e5837dcd8ff6160d7e38347fb3f00d44b273410aa1115cf36c421eb02fbdebb25d4f1487cf69420eebe6eb84ae768846a807c0aaf226eed1b07101ee062d331def68e10b9db07be090d64f344b75c51a55647d71d8faa888ef4c9515c71140bd4b7b2270a2142a85e48b575d94fa47b762718b4d89997b885aa47557afee56389e20da06f1349e37127c86beba539611f8614b6d37ce3de8f27f7ed4eeac1c8f366a269d2595a2cdd1b37f818947976286c38f14ff22f1424e5b74022af924c7375bf5020fa63fd3b3cd4ffc16a2f2ec8849c55c24bc880b655d3fe99708b63a46bc89e2c6da1c0faf8f9455f32460dfcb28c554910194824f339de2e73ee83641469ce5ca5e0eabc1b33e32802857ede80706b50a97da1146815b7cf5a35622ba187d769937a00435368f0df5d77871c51a0a04f1cde0dbf05d0efae7af64d770a14b63dd083aa693e78284ec0cda4e059be948ebd9da0ab0a62b476b13a86eeffef485884a5ba2f14522c38fb5f1a0a6305f347ca029ed656b386c2d0006fc707c207836b281480f50a3ca5306058c43822f11e1d7dbf05c63a03de4d1f4dac9070dd394c50cb35498d7f5824b8c3d904e56ee7e87507db7b3f0b58f463b42c5cedec09bb38d84756fc5e3605fe23347060416343a1ff0cff062132414e7f399b5f2b1b361400bb02fbc36dbc4f7363f9a4701e1b3ccfaa6a236815fdd67328335cb30d0532d0829394edf13eac0776671ac0cefddddffdb1fffddfbfdc84085a857dbaa24df72b47554af886c0cbfb1383c6c59c321e279657bdc08a156a4fd6fe11985599e75eeb888adece1adf5481f7e09bffe53fdf6f761b0ab2ef0a7f256d08e94d625328887c2ff3818e5ebc8852724aeea64156780ff446ee610fddd917a568892bbc442ea8113381016e7d800ac95da6278342f769df5a08490aa6b5fc7664e022e724abc4987d7a23d07546807a4b21e553a2d80e374c68e96c1f3eabb19459f0b768ca7adda2caf47c021c087f8f8cc18dd4bddc80a56dcfadba350ab463ed7b54cab57b59ad3442e7b5d6331a3219e94c15ed4e740a3b13658d2a2a5594c08d76e54bbac5c821703d029128c3914c97c328f414063b03e4d4c725ed968d2d92ce1f05343fd6b79ed6893477dadd0845b9aa29574777cf36a601ce3181b5aeec3664caeb44925201c6c5f3809716c0eadba3352ae3d3d817fa54adf698034518551c9f4d4d821644c2dfccd78beaee1d65da405f4d9cfe975b55eca020adfa16f676080c0356db05d86926b2245901a1002028e75383aaaa56508a841ced932190036f6a9862d42a24100a928037835308df628aa035b275b563f306c93b3420c9c248175daa6829190fb68c900d65f4962a5bae8c873f0cd4b98cde7a33cc950ac906dd0482971dd7588f6191a8c5a5452bda63e8d648e111d4328d09f558fc05a8f7d733874a9d5ea14d28c1b3cb38e193efd5ea8a5ff222a7d9c08633243c47baea5780a864475aa4e5169118d15d954738536fb828cca939112385ba99f3127a4554b19f6ce96b1a60e0ca046253c6e3a8ea2aba58e8ef93e2baa3f6268516fb1f94c798fff65952d2cd3e76e45c14a079cb885d14cc734b6334e455863e4b77302ea013d98c2d539a1ad80eb1880a361e112901470812d3f7d794ad14c07f73f9adc128f9f8f560be788ac543efd04b82480a054729ace0e3f0ebd4e6cd01c849e1642c63b552b75218dc85e7efb3aac58364abd1d2e9ebfb8db42c0373424414f246fa9699a2a5b1cbb0ce57fa5bbaba07ac3797c2ab07f0461855758b185d59a91c52384b2b8529e2d17f7c140023b139f19482dbc37686de4be8e2b98e2fbce4c20d07cc2679dc2c85a8153c139ee57b9d4c9caac2b582175388aea3ff47bc35f55ee2431f9942d92460c548e5c87f7d64be4a550d09139bf3f639804dd65f06f6a46b4d4c822af144da5dd81c5454d8aa85ced3029586b536cc337214a660fa7a19b283e3090c53e03de8dc87ac523c620aa63129e7878e49def714c14bee63275739a5e012fb8ef79da14a49489ff5011b1fd1d2b0c1556f64961f63ce9f9bbee26eae119f82e1714bcfbf9ce38514a33f2372447e36bed311ff2a7a0f32ea2541e7c39422e31194df63ba1ebb4137bf29dc3a4e6400c9eb251f0b92e12f1f36d859cf2e45888dbf49d4a5c8bd48cb732e5138e7fd64cb8e9a75b34fa2f82776a17dbd6aa1385b856e02961a76e0ee302140a8941e4c0386121d86893b656bb2d94df8a537a3d8537e5c673c340da60216c34b74143eaee5b0601c4b226896437c7b39747462088d04fd0a80b5c9bb67513dcffb126385d63e3eb3ad98ccc3d018f9dd2bc9a26f1182a0f1ce7151d112c0b8386a8dcc56d492d0dff7fe2b7b82b7f5f3be279b9c126c9e7d03878d261027a53059d90639c3ad7ac2aabee9d543f45c149d05c6c775a6000d278c57306f8d225d073da7db2af68b86c788d7b07e12236555c940e1a7cdf94b000554e1aeb41dab56702a8f8e4fef6c489e6c57925c513a0387feff46e6229cdec98e49ce9cd09055c54e7e8cb92f628ee3efa7b2fe3cf853b63dc64902816737faf4501302ecd66c6d8ef527a0e7048ef4abb49f079de96a06dae64590e8a10a9278d1a31baa2ad66a387474b615fd39dc0325e4c3973a45c48e9b87424604fe939413c8b905eb2a0fb3c416cb6e8e6da356729578584253ca7a98e2626c546bcd2fb8227181aed8890fbbb21e9a60f2ac83b48aeb2aa5ada0d8ff122b6b0d8c6237bcb67d9cc9aaccdf78d81fe1e0d4b723c0c77859d34756c3a4dd71cc172b5b780171fe5a8d3e2dd62c11ea9faa41b47ba040d637f28eeb40541ac5d2cd4de7ebc13ab1ee568387500ec71a478dcaaa11f58b0ad5da66324c4c6a7edfbdea4e33f57226df01a73ef69acd8dfc2280ad5441e2a9551d62f8bbd44a45d242198c483d357920bf997f204b51842c5b3112d9fd0b605ea4babee9d5deac57a4535a634eae8292ae20e086cbfdb491487f6be8dd9392047313b75fade3520410708c85da3c7eb8c610fe75dd099867f2dcd4c16d2104ee83873e5ba483e23014c31e7702de5a01fa35a4cae614da1c01bf88aff4f84e474a58a548a378f681b3f26ee19880f9503d07b41877f955e2a6229fd7a3b7bff10884f6800050c49aeefd9faae71d965716f07dff12602dfe0fc37daddc544066c588a2a6ffd66a9922b907e246c58b4d803901d7b4b9906b192d536f961865358a4a4a77841333bf8b932e63509643dfa4e3025c398b93ffae4d018c9ae084098b93463ef9aa20ae53940518eaa8fe55e309a04180703852d0a1cbdbdf778f62a4f1b34b0553cee4c7fc0497f2626840860f8d1b80e0166b39c103029542de9a3e67087e7df42d19718b71679e38287acdf7d1e8410b026db4ea79eb5149979995495ea7957eacdc0fce599b78bfa1b75eb27863587b58d13359b372a89efa4df76c6d5e830e44f75d240ff590d6e873047494eaa14a3862ab2d3b9d610c72eafe1a9b4bce45f537bd6479d62e50d8f457533d7c65e6563b95e6a255454786d2dab46e3f84bffa4a5de73253b47efbcf6c959f662fd1a525d0692f009c9118d97fb92d8310f037d32aee6a94a128584610099af91bda2d12b50433125f36c9d6dc20518de7d9fff24cbdd4e3c9ab70c16eb8d38170a7fba8929213e91c71e7b3d3abfc22d6a80ca9f221555e2aaba8609595a0b9168d54ac1203e56b628ae6352b0d2da79d9efa8bfb6ab9b3455f4f01ff56d6ebe05dab476c5732515c84e64bd5fef8862d1a8ee64a2c711df3786508f5522c2b17e987e20cfd42093270003c01e92f7060af077df6eb2d13ae9f4adf5551012ec4c25ec9ec9434b58269c06c576dd6ce55993fce6b107ac9bf0b7535e958082ceb11797db41b1280869cef96a8ace6be2bcc884c5ab8a8a15719c106a7bd7b22acfe9e65fd1b28125010c211bac7e889048d1871abe925de1d6a4cde210cca8d10a21a8741a909ac86f2d45ef98e634bba5c0abb6ad009da8ec6d09f1b9b6870c6ae3f4d60e615b2e2a054c7c2752399366ade36c8dcf896e32683fe4e54ecee588254fa8b03c58e9828b8ab4333c8e05360c2c8aefc003011ea2042d94db7750cc017ebe2a786457f59816332792c8f4d2bdaae3980269849c4b22e17cdacd72530d2ed69dd506b11868b29662b224ac00096e674043714b066882430f779765a309dd2fa804bfc4abf3d271584d7ebd3e54fed7b84aa3149039398dbaa324b5092da997639c8a2d2bc09b5238c9f700343a4036c1ea94366e83ecede3b2bbf6cdd14702a7e687824a528fb7b1fe0ea5cbf588848b3852040ac5caa53f91242f7a575148f4e6130e203ab5440f2f1699ef781dd207be514a0a87238df283b80b264bb317bf0af6709b2e88285f080469f58bd04e25a76acb217894956d939fa8214034e6929fa36647ed8be55f5468084294ddf28bc3fc464017106f6b08dc97ca9224847d7cff64f2262cf9423c4fc16a79d822a3f2dc89fcb3dcf0969ad78aa4688371b2176e42ea9008064984bc865922d47088073b015df021e1fa36c4317587a99d47812e1fdd64f993aa15f7d7ac79c814b6855f68dec99f08b1c79eaa408b9b5e34471d05ecc253724a758521a50d85b720da3e5d04edffd40d33f4ab3982454e64777c0e14e2c249d06bf7f74534a8497ea3000ab3659444d6511de3748d1780725c2437f3b4e13b4f316796ae3fc2bdddbad37b985d2ebe49775cac6ccebfc2cb2d58425669922ddd5cb308fe46f3c26b00a3436cde0301256ee336be90150111936a4659298ac4f8cc60d7c0f72b04fbba6337bd15a0b46443b97c6e5617b0a3582eb0ab730228ddca36fccd68f15a5456fd47f22ae4f169e5bdc46db910a1194d6c821355fa421dcbcc15ad4d5fac2f561bbbdf82ee787fdb858e3aa5d996144cf2ad11c8fe8470514bc215ae90bbd1a0aad694b53c1d6eeb66e9542d391a8a3444c9e1b75b2c8c339faec74074619a9f58411e7c4b00c370651efab781984f0184990ef0cf732a0e178c35739905293553018a7819569b7d73092fe370da4c76c24cf81981d394e60b975d89471c25e8c0886b544f9a19647cfff548cb532acee50fb0cdd36b1db869f631a85722bde27c128ef1d1abad08ad24c223244cf90403bc6512bfc0206df4f1a3b66703778b925c7f65bbd1a89bc0d73b451a1f701ad31f86e5c84be5e5695fbb9ea626e8c91eba15931a39079030a6c0e8ab5977402f5b77c968431f92cf674e47e8ecbf7746afad70237757eb87c528ff2b4057240c046a7cb2683f1fdc37da9dae017d5e0ad334a1e12767cf886130ad052498847200c538e415b085df6f7141b854262b656fe82e77ce44ad6b07e0abea2f524806a9c792413ea9a5b79e8a7649883c9e8bb79bb793e86d502005783397937eea53e3054fad38efacd5096ec14859c804079b146f25861abf256275fb8838a6e264685f4054bb066159987339f0eae4db45cfa9fa94c6732b3cdd4f390d90cea98ec9104f3da847bce9018c014f064e19152f4d445cb2ef077076e24633544f897d20ec415ac5f5671df0115459097dc4439dfcdf0326f8bd9c35abf3386c75b1c23ec43ed8d7e34bf8542e01645a3deec15722240f143229bd4edb02b6599392f4f731e722de09c09262d1015d88523c15e4d28482c5a08d0a803ff384d9293d9b9915f0eb17b8a8ef12905ad675c34f54d4a1e52ccf74ee19c50722e83c0a83c5e718b8eb5e44cac4c245054658d7d7d84455eace982bca6055f18a9f7dcc92d4cdb0e96ad770f1c1244b6afa99ded3e226ff8e691f26740b73b4986316a12505acf48b54838a3bc785340ae46b9caa4709935d3e0022efd15dd7a85a5682ef6932b62e9ceb28d03d95f1c04e219ca4dae772d163dba95379f72c30a5d9c57cbf3a2ec35874f2280f0f630c306fcf1225622a886340bd85a72c50dd9cdaadc3579875bd7f4982e09c647b9fd5c8c37d853e4ad965fc071a30ad7a2936c607fa8c6c79a690281770084bb0492d7919fdfe8481af4f5e1b1c3e627dccfcce7606e14bacc98defb17608762a1512912ce5fdfac16f50a08c5ae68b58700016e94401b4795771540ddd478ee33364f95f7576b9ce0ade99c2f33c64ada1fb6f1290012ba83edc41c1ea0e87e310d1b5d38c1312866e06d10016f5adb1a7c84285b39f775e64afe72ea706d1767e3905b3b1a12af4d9b5a0ba6f04cb6fecce9f89b1bd68ce7239d5eb3c546c991567fad3af6d639eb369ad844ecca2539a2b603f4d43370ce28054997ed2edde732257b411cf815e2504410c94cde531dedce298b62c83b1c576f696cfe396c522a5b21a00caa8f10b4d3680f630d2a8ec8e762d29000303b9e1a3a6c1bcdcd6b87424b85b7a10698c720f13abd539b637b1948de56ec35a9c1252145bab772616ea3cd2d2b93acb47de0c731c3255e34cbdaa71c2e16ff7bec3685b9d35ba93cbdc9e34a02237760c8abcab11983252dbd459770562c752f4024baca2fb07f31d8ecce166245bbc41afa94a7e305b49639c5c10b453fbbf38c040347fd28a82e2f86c85594812f59c53d44f7045766bdb0863eea29e674fb28066f19a223c031489365c147a33ffda1801cb3cc75cfadd90e786d678762951e35062acd0c9d5912703f6a3dddd6b85983a17a89f49f7b2d2f73dd8f832873e0b6f56bba74cb265bc2ae6570fb4a7b17eaa5715c4f1169b0745d2c2f184ebbef7a1771cda2f9b5769f0331714fb7fb735a0ae612b0089eed9427050a698780114059742bd874e11947666131b39c3c347b8ebb31f7acfc6cf5d0b25a8f934bd925597931190771ba6989644424935d8e176236b9a292ed240c6ad36233303eb1cea32ba654f969894c2a8d7dbd72d9524142619b456997ee76d3b4021068fb8343db63b7c33745726f60fc1ced0d41f20d7c4b13ca9d94dbb0025c39d29c46e79c473a87cdd9aa2abe7c91e39626f8b44a88c32573e0d33d070b6d9ca38c49021ab4953a8381839f7f6fcbb871d473e9fcf63be57534188b38a57d028c4cca8a6aac6eed42c563fc6536fc1b49312b9f361eebcd9c371aaa361df70866c1d0c89c1b0d2763272f26f4e95097d78cf04d6d5b3faeea2b6ea73b20537fc85a7cbac2c528903af8df1b634ca91762143875f906011e88c8e5b17e5370d471d56a2ae936a8142970991f1c11721183dda0775dd10674ff5deb7876182838f893ec52c8c377a0436000e2112910497a50e92a46eaf6562ab6335e5283a7944003f3413703a40fa67f48fe1b779f65b6ea28e83897689d72800bdf6bc2820e3181aa62f8bcbbec707076b0bb30d938215641ff45f51e955b21477c4ad4fdddc13300ea4e0b81c4af2f52bc333d6cb2a1ce57b434a0062f6f7ceb79f7c027ac99770ddc798ce511ca9f24deb9750984ee5ab669428b6739c10e6a3cf3a106735c6869f453d35a0514f4f1750e0d4a947b730871825164c7885e8c01fda8b7ba3db4ed3c80f7873281971d02a9d77e7ebffa42f48b4bc57c0004d5698dc631cc8afc1ef7216e4e8968e4b6762b3c52c32a958a6e1f09847c9afe188cb07dd50f8b57f4300ffd67c1edbd5f1dc51a95d846e416f31452b253f50f9299d4ce786be3ba9e871750a89279eb9ddf1b28a4be28d5b331d2be64a9943122119098a0870937730d1a697c1f3b2126aedb2d67e5d24fc8640ab609b3454822a7a679f994df9b3c39319ad9254204ad1992126c94d92fdb37eef008b7d368912008709ca0295959ba736fcaa751f76c26a7d978f7390c018a2a58e72f5e7523b877488f500620de38fc47a5c6400ad0d4116958abf020fa891a5cb60ffcea4ebb7e658545d07c537223f869510989752a1176a791e56e5db9d65575372c91b86fc7f6893a47f4607b8eca60bcc613495c6de5ba0c0395d90a5badfd55def6ffdf86e2a9fcbbd63cb1ec08876b3770ff57f763c79929625aad5c0e891f44eced0a4f86b2537cac5b855be6c61d953a55b555fceb3876fe58a42da67ca3bc7f9def661a9acb1ef9efd1a14a9c6080d0258dffbd9e50086c75f4dfd365698c7a69239ab4abe94f67f891040c81794f8d21a4deaa91c783d1c6a59f0c2bbc63b7c49dbf2e4f7b96fddeb923cd52c6b3a1b325bc981ab20f28d260c27e569a660d2a349d3a51f9e1ffaa333020d898cd8f6e5b62bdc15c77ca0371563dc81de5c31a6cb42d8c91614376acef49609b6aebc2b7a6dde3ff1e28464422833753bc88f662dc453483a63f56fcdcf1636f3320ae9b31283d44cc2f3d90e1f408ce67c334958b2189ace19b2629026da961f4aa7c45e898901382d784de093e117427cc85e033216f029f083913e640f09cd03be16704ae093920784de09de0134177c25c083e93a6c92f1d93392f18dd50cfbbccfd197f1c8e2312a0b3827631f27a433a61fb69f09558de469ccb0ba9731ad3db6cf7edf1cf8d98817352bdbde5c99993f8f86d903ce2bdc1a0696592209a671fff1556329543809fd67ea718e0ae2153250e290d574e05b4209345f553346f500d801f3e91148a75d8a1fcf6ce7e5fd8840b546b1387a3077841535e8c772538045b283727f7cece0a0082526e08d2b84aec320f6afad8cb5e6cbe7993fbd91b7de198cbabc4fdf4bf12395ac75059b066e2986e134c4a1105f7e4e0b3247f3c4e34ccf62e869c58ed82cb4d88e0138a50cae82add8cd92e5a0ff61bf838b0356c84085eeb81d466cac41a1e08ef33b5e42f9509d780e0f3f3e75f0ca1497a7371ca62dfba4495c9a8d85d8acf84298cbda35b6bfffb7d3f54f540636cae05b1a2d725973ba056c75c7d906b19462e9429f03dff880836534e61ea4918ec64f214feeede1ac739bdf65e5a4fc4d6fa56848acf03a410e5b771d842620b0ee694203e8cc0690f1b94913f3e8bb83403641e916809c95610687b28ca095843fee6b41d2bfd12cfa00675eb2162a4ba66362eeabd13f20f339f1b60f15c809490a4ea417daf84a53378c8ff24e0ff52bb23836fac8cbc185fa30af925f6b4aa352542a078831915900f0c956b47da2983760e8d45eeae1fa110982f0c69040c9ff533ff61bdf4299100e8fa234a8ef83396a88e7e589e56ab55f30b72bca8e7b8ce875b85ad658532e8fecfc4691111d8a755eea8e59d53032235886cd113a8a7ffdf6e760d1aec9ba03dfe33e47ecc1687ad4b93b9743be74f703417f6be50ad4f92e4fa6e433cee9b06ccb0ae8696e2218da4f773c0851feeef19dcda0b38c5c0d20b246820cacd7aa30476bc30ffc7843cf61a0a8bc74af7c572ecf50f48884898fe950cc4626c06c93b239d2c1b05f390b6d16c04e80687f65555b662b0cafcb18fb5e9ec66b15b71f0e30a3279967ad79d670cefb6fbb8a8833518d067363f1c954174849516c9dfcc04c668e4eaa16dcb9b5abc602dd2a9eaeb7ab4894924c9169af69139043f3317c679483e68ce475d66a4eae3c18d04e00a53a87decf55cdfacf000eb7781f4b85899c87aff477701efb6fa044f590cf46068a50f068186ea65f5eb7904877b4e2fff7bd903321aade4f6039e98bb7d70747703c11c723c049569f293ea2aa033fafa8fb68bd77ce7a9d6cab1fc6b5411c94846466bb1f8cd98451692078df498f76b046f0f7cad48a5274655a8179aae0cd70b51dd09732a6641b075c5180eb98a157768d388f0b73df7932fdb1f25d044950850b920505f1b123bc518ba4c1cc62d9bcef3e407ecc55113f0434d653ebe36c1cecc7e9dffbe7936c12e928164a44aa1c18fc2918b20a14f747b9782c236e80d831ad6bb0e4af2a5ff5bace809bc701f1ef4f0c1ef1659ebe9eb2187354abc835de29bab6902d0bce8ed852340b14464ea6493727159e809b1cad452a76c2a49efce1cc535932b8d34e177478d469e8632fb1e9a7fe61963787bdca820aab1f00de76407e6656280443e508d0e6e4ecafea59e2082fc16d90c7ad134da3cac468ae4aec867f9e2a321f448fe46daae30fa3984076f9e10ac0c08f21981fd98f7f31882b97e620b50226256fe0f0292c7553cb459de4ede1d6f62cf073304d7c34bdc7f7f5537f115f3e2964815f2e68a8048fda1d31f66cb73937b18cb0399591fd6edda92c5b630b460a66444f9a81ea182e12b07563b75558b971676f511a0e168ea2a8b11e60eb75cde13024b3d735a9d684091d23b054a23dcdf4c647e998203c07e4eed213ee6541d6da7a78a7305f48039b6653801bc65ce1503a423d8f64f25aa0331a665b79082d25f39903b79488713eb2143fe64aeecb7d2ebf2d089379fbf4789f556cf64417ac6cae36075f1f78cd5c51eaf2bf310f66a34d1977b82248757b88298bfc112d16c74538981ba18fcc548154f2ec9ebca2e44593f34a3d075a61ac6b99e554d3f24420a3c87eafee1fc8dedbdbb0b17a93258ac3b31ec10f88e07fe5c772e037bd8919e48b942f89c2d8868d722db71ea82b8486534ba611cecbfc04ff4b49ed6362252103c9ee5d8fba98827b1de59d60d2d1aca466523da8aaf51aab181d8a82369f478f2e858d7f747f5f14c5d2d2b7cbf6476aafe7dd71cd83778ea5c6acfa5a06097e54dd327f6d5e35ffd1fad049a4f2a040f7af21214ac3209d18cc9d20de7a1c1986ffea85c663e03329cd2b3bc16bcbf398b0f3f199d3f8c37bc16a220e31b3413f46f5198b58934d4bab5a970a153cd8eb02f14960313919990b2bfc684102075149eff1c5e00d2cd3ffe1ba2bbbd86a7c4255599c1e369095e95fbeea4cf9e75631bb3e610bd9351ec8eadd0b9554c686bbdca8960a5dad647433083578165675e08593bfc7298b1228a2bade1ad8efd05699f8906284a7397beb97e96ee071f3ab39fc3bfe1909dead8137c8ff5c214f65b118ca5860d506ee50f9161e3c79593b23593714b04553ea9317aa0aec3fb978ba10ce2ad5821243f664385e74616c7d351c7c028a4f66384b2ca05e7f2dd234c09e312f67a9d0938683c611b1ca510c023cbde8cb131029a324019ec01c48ac2dcf12f823cacd6ca317c943b6a4126051e5eb7ff4282ba77e0d7c980010fbc1d8ee22aa1dee40c48e23b63a36c64abb8e11212903536bd8a34d5dd1e20a7213be51db4c1fd914bdf438d625eb7ba3164f189762430388a4b22e27f10cab5aa1c4608297cbf82ca2cbf7f037c507ff528afb7d577cc4c74148bd86364ec4683f131c6da1c3f009fa6cae93860a3981a5ba3dbd83ad4a93bfa26984036f281e8bd0dd9f10d0d75e91e0b91eb119bda50080614f410b5ae484039b9dbd18f18b68ee13af40e5d37e2d5de2cfb5894ef562e493c9c7b1c227a2a6541b5af2c10893ed49df72de0b189f1e0c023237964931654b21144788433e374d6f2da86912bf690a8e9599f6fad83b64b24aa8ce2fa4c53d3fa4b3ee54f5ace0bccd09b022999dc475d8fdcab31599f9d54c00110f971945368c7c9ad26dde664c60d768d83a267f9a6d865b57e75fb8d4896dbebd083ce4b0763414b242a058d529ed630feff44e5bb0ed27c2b8f2d64919cd91871164b66ff8be5183fd978f8c01efd5c1eb70d007a04e0c4003e08e06802a0e1d70752be2a081f2dbb974f4db94f9a732f2f2105bd696fa05898407eeec7facabe6458273063277d1637c83fc052970fbd9fc8c57ee542e1377f4ca484aaecb38cc92d8bf30d3b517b99e8973847a63ae51d16b2c1a4423aa56cdff5dbd5b25c108de4266e3c50ad53e848960d63e5d4711e6fb3227a6778dbcd0ebcb7cdd28417855063b81ebeabbbbbd6d8d0a1a70f03e05447d2f6ffd80d972e5ba9a991bdc494a5175f229f5f3453c9397649aca84090463cab559bd34705b3397623bbdcf03cb2ad991a297a5fe103f04a9af05d7bf1cdbb05487f3229d58275e49af017d3733e9889519143be42e6d71ba79c02e02027c14e13413b19662a727b112d9b82a50754c87f1d7a49a869d073486b8ed4c4b7b8c252c449d65010b2d7040a2f24211792262508550801649304eec221956dfc19d17a7cd0af5fc1379927205c20dece1acf28709f88f22b10c1e81393daf815c23cbd30de9c1df0d7927353e84eb283718ac6becd7d71b6598a7022a4c1fb48bf8d930e2d950b89daaee7944bb6f6e946f8ea1976fbcd0ac7e8b7a91e70ff30ec34ddd26c1dbb7de6b6636d7eb19566475c1830ab3ed7531fb45ec3996792995ab59341841695b8faec89012d006436a6755ec61e0e660bdd42d538e3926149b794482f8d23f539874dfe8f2ee00f101d25fbd7afc1d0e3e40b9bd24b8a20941f4d63e18cb7b19d1cb791ac072523bf3ee04fd67a5641ec68fa3685de2f0867eb65ea14b97e05338497aad2c150563c7d2462f1598069c1d995b8697bea5be8837c24f03fc9862f73b237c926d23372d3b2e43fdbf9d84040732854bf884a623c3a251b5667736e040085a4066c844d7a0f1f91818fb4c3c7c791e27ae3e3727661eab5f74cd474594811d858fdc4e11a5c1d61c7410132f6fd9e0211e5ab0f5273fe69b0ef28e87de62542ba32c7c29999a6f1e110a3630ae14c0bd17282324e9e38398bd5efd3267421c12577afbc0d123496d86ff46dc042e1069b373b93115f10e25f48ab8845054186fcb454d37054f2a3aa0b85b06c0ff7a7b02ebad3c93dfc1273663acf5bbac29013aac3405733967dbdf4ccfe5bdfb53dc734ec8074c6b7b51a8cee3163e0683ab46552791ca6154ee373f815700408d7ed0e9caff9b2972e75c6b1cb7baf418d37468b5736be2ea79dfcbe830fd850adea98f10573a02fb0a03cde074cdabae6b837f80b26e8b5ec1bd73f27718a32bf1507895ee2ce23e467986deea177fe31d58f0e87eb117d30363cadebbb4dc3f1567deb45caebe72e9df536e4499551ca4f22779da40fafa4af5c59225a0e3b54ed90c44d4770e7205147dbb2aea0fce0be142a3955b97367d0eb3c26f608e7645b542f0393e49381dfce0edc83c91fe7466fae3a44830591ab3a995b66d2feb7e5fac9f8d2153481682223db93106638924d54a21e8874459f933f07c0e8add631faa01d66d4cc63087d4e6025702b41a814a2920af80daaa85a574566f66b85021d064d5beb9ddcba5cc484e769bd73ea6452e33a5de0926c29e5b9f09c59ffeb5982b4bae53449c6afb167aa1246492a3ca07addc2134fe8adbfc8af503ac7b9c5c7d15a0a396ee016b999d421367318e04fd44d875d1cb5e2d122618aa7ed3432303c2df4d436eeb4362d449effe0a37e44f1b9dbe08660ee155f71bf8dffecda221d9e2d7c98e8d0b0222666ea9ce409d66055a771f4f2191d698191affe3299eee8fa8729c88fb4c77b125e17aa92ca61b261828473cc7ce54cc0e9c61bad240b40b03d415ceac0dcc4719d42a32650cc44045bb0b056972da1795000e7b84aede284e9f5ab5e743f6ff6535eb9c9db42f26fb431e046b2d76a29292738ecb50845067a4144a1c2feb804b31fc13c3e2fdf59cc908309cee28f1c4c691677e4e06256fba75b9bf8775b9c38564dbc8c789537669f28f1a28fc30ee7a0fae679fc5e68605b0a6ccc963bbf7743d776b0d0b7453725f84ace5cd067f343c7b2792099e1b2c58a0db0c0f140665745658e640041c04f8fd3c27643af7a27a67234bcfe3f68831e57e3ddba9ccb9e13ce3a436604f11618cc4519179992030d6ce21cee2d2f07c5ed61712898ca38446643594dcc1218100b4466c9c6cbaf85f5d57deb3e4bdce5527718b0b574cba379695f9eeacbb72c056208b6c9961ef3ae528d46399d5622ff4a8bb8e925916fd3a7823a217a9dae710e8b046697be10eccd28648763f5bf08b272bf403b91f54981a0b0a721237ed1edb13bb1ba384d66905052736ec7909b4857ba8068d51c5d072f5a13f75df3f504e3cb2f5cd2561c5c4cd2e77ffdad883dcc2690987eb6ad0d1c236fa201f2d2a0cbae23ec30e7f7bafd8654b5c807658983747d0f2cdfd9499246b3e5d88bff909b356db5d26db6b5847e515abd1b2e44f6e3ec7826189c0655864f1dfe2bac7c174dfd7b1a69c53662b3ce71ef38df4695a96744749fc003cefb4fd292fb5a317752060081fa55a59857c9365f12b2ee94d34e04e5e6059477a94ac7a8f36d8c316785d9d8effbcad4fbd6e9b835fc61ffc2cac7a5c485391cc2a5ab414823ff2c55c74ab590ae379b327a6d0b3bd7acbf6b92899944d3e053447550be00a269f38c719a9bf34efe7bc76552627dddf760443ee5d347576235d53ba87ef91d84c3347774157e02d558d8c8e1a4aa0b014a175c638a8c8c8c10690847ca557e5274e49502ce7a35f24d1bbbf81f8a69b217438a9928a4d46932c8d55a7c0165f6d56cc949a315972852a429fc4a9055b8910520ce035531330931306ef3311b3ea31f10d807456516439f8d6d0c96189137ce813aac4a6933aad14fb1f2db6bed2bbcd85e5577a8a5e721c7a4783e137dae208619ce182ec5dcce170047c8f16a2cc04cd3719a8ea9404eee8585e9ddb18030ef809702bfad3c42ccaf8e7dc22ed790d681d7c56b94418f69a4db0fa44248d6288c90a3d4fdb91b5c7c2ba427a6a5a199e5e2c7faa2498a4b0c602a7f4a40b114496345881e03254f1aa3b86ae1d19e63ddd375a08a41d37fae81f483f877188d1c7646543e3445382777ab3a80c6330acf1f67fe0420bbe50ce014f1d1a49a1ff8a5b47d41767614ff1602c3c5e5c036e287a0e4270a567a02d13d51a14763de15cbdfe6d1b15b817610ac6e58e6b7f4c4329e55564597578ca578166f9507ce5f105c66603112eb1238569a0036dbdb805b136df9606a39983f3ada8ec8917211d3a0d655b249d300b6d2b2c588020b2b1f5256dc6cbad0437525b586b483d91502e0e26c9dc504d1276d53941c5dcf89e3d9000e508798140ed8e25edd18914e20cfd9754f1de478d6a0da66d75a45dc268a9e5e68a4c0c4f553ba18b0a84338f3c094816fdca9a12558a97fcedcf167219e0c568035b8b3627de43a3e2a6a64d721e0ce2d648de2a6e5d599d15bf855d75b8e79f964487137f6f0289a0075d7177880342ba1e59e9598408a4caea0fce52cfee346353e038a8399952d60f4a0df28d11a33c175f96f567cfcd6bfd9efcdb3a6e744c4058477e06eae3630daccca1f29da428dacc008ee677aaf9a619ab11bd3c38a69e7260bac9b3b1252275b29c564bf27a88d5d6d96e557529ee6948247a9d3e961cc0d41ac32a288cf10504c4ee501d3380bb69b445294c5495cd163073a1ca8ecf6aabd8c35ca04165ec47b188c12b46c53cde3c611f6b65b822e49f3414899b1ab2450414472257a3d9a63e3d6e44a5213e5967ebc87826a1988c958c4af2902a7f5ac8add8fcddab3332c9ce83df4f0964fe6e302e08b96b9de4839cad584de7a41de60a657f082a6b1a85eb6425d39ced45b935408bba2a509aeecfd56b02181b3fcd1e5dadb724d395a1c0df63d99718b4f6c5d8e68d020ce18b365ba4f1d1ac123d3e6cb8e61b4c09763900a4a6ac2a4cb3554ddd9885a6a137c2bdc44aee55718059d2389786fdb577eb448d923b542272d8b0801b60ad9845424b7e2039d68b2fd3c32352ea0bb44cf4bdcc80ee7f4ac04eb85c9c748222cebd157fc225804266229a06d1905502dfc35bfc01a0c6397c001553b0857c86c2753e816a611bd266efb337155f8362ce8db53354b35cc1bc071f1d648959d6ebca23a791aa0d2383c7b269d081a8e58f4f3c18b708870a922659a1f6380b5325a39597350c36d8de85a71b8c385eed01f22e64ddc29ea6e175c7b2191cb756f5cb31719a40651617b87ad60d462fae9b7a21a572acb4bb22341333620b25b8142dc676f9053fe1821dfe9960016c3dd688492336f96f1aff0a506011fdeb7a24a23ab44ddb90660bd32b2825b0fd539b802e0b7902cf5ec95b31e3e454387394d4302ffd1dd443da4c7e06c0c0ef2e7855b96a7873ae9a4ebcdae5be1a9630c3fe2d62e055999c6a000375cc25f1a93d8c91bd0ff163d5c20c51babbf9088b6cebc3783f5c97a6195d7a2aa2005b17cdf982fb9e3ab78badd2121a33899bb10df2f41be4ffc9bec3053fd1cadf9823ea3bd6620b86c144ad52bb25d2217dbaaaa42346263b7d9152e5ff5e01dd38d240a659f542027b8d26d793c75ab4f25154483a06ef583e124764469d028de91f6cb52153447984c22c74b1c2c965eb272a5a991673c77b1ba4176de619b3d77de70b33348923e5b313ff2e0e1cf3a71fe29787ed80c3466b0cf21152aaf3a250a2ba318a9ddc9fc1e56075c0ffe1107382a139a51e18536829ec14e32b0896049be0fb91bdf900ff08d11b78dc83546c9d466405940ebe1ef68fc26ea9bf9b0ba25e11aa5dc037836bd2c1a1b0db8113e17097c8b418124fd8bfb8132af17617ddd1175d032902a55b4fba02b5c9932fab30c4cad93712dcf09e40f9dda6268e3eccd5a5ff92e66f160095fe40121eb5c5671fc21b6ed9227fe5a546fa35e4b04e0306b3258397f61fdfe4c4a9bd3de45f1871824a6123acf1441056f2c579d216029dcb2995d07673e11a2a7233953370efeae3eea9a125fc477b59414a743c316dcc64af3d8628522355c3c5e5920887a83dccae0ec8b4bc29362019648cb47cbcacb38a6617a89d5c42178aada22fabb6e8909293d7efb732a5ace81b501e8181da2c337bb584c9fd26d3437dcccdf87f2cab6fae96d2dd36a9939933f2b3245d3455fcc75f5b45049efc857eb731b0aa778bf5e1aaa17c18f8a4de21be240d779aa86a5214d1582a84662488f358fda5fd8f64a38112bc1579ce87352e97aebccd2587018c2392d13f0902156e76ac179699f9fb4632eda4d02d33164d3b4059c5b5c22179c2397b2a2ac403857898c117e3cf90aa9176502e8b58258f2521f8a5867f1faa18f177159e88eec7969276f34d78acd1ad643cb8ccc0efcd63583ddaef2c259c1cf1eee94b964e6f7d6b9bc6c299593ec1af6e8344383ce590de97e77bc2ceff9cf92751b37f0c2618e23389c03fe555ac60854018e07628885b85c36f112983d3a1259f83419d80364423270b94f064c608b5bf1834f3b365b87e321452811dded5ed69aff353fb82e948e9b48cc0ff3fa36c1e97e9e9a00dce20fc8bc24a722aa825ab6fa0f3b078df6c8cb9dee071b1a3fd1585a2592839f07b4f03df98b49a2227a420ba891fa7ab1b1d84a30200c58e409680e77383fe78f0ce3610cf1ac81af27a204f8ac7161e026661dd8c924f7dcf717e5b524edb58b8a500866ba28416d29aefbc42cd6a7f71b94cf7489737013f52b0df491cd9e6e6e70a7b9967cf785d3f2a67de824fcae9852e60167ff4e18f0ac2de17f8d16100c51aac4f03686597c0958dac8917617ea5fd2eb48ae576a1dc68f1a33e887cc0017f6026a0283599afa6eea17a8c9d2977db909a25f796f122c144b381601a0204aab1c9b1cb8de251dd400a22cfb1f06824a5faa322e48c0792dc7ff0197aaa4c71b0094d4d29730ee00d4b38cb702389ae5b81ac0a09e4ba9bc75fe15af12a6f59f54657cc6bf81da722815095bf24f9f641cc1dfe88df58cfb07aae2566a09bbcf9fb2328e961fa769b76029a55e63bc95a5e800f1842fb5d1c18b8eb994f2969eaeec1593b20f1a1d77fbd23282eb68830e1b7a7ce4ead73657d27c5d9f2d2c7b295685b98e1cdd55211bda326885ad8e6563953711fde9f038e4bdcfa2803f497436325fc73eaf342f21977ed7692c20a9985a2990091f60e501373dc2f0cc7cfb622f60e3a6ef9f388fc5bd1c9eadbd3cc194483d88cd5e87451d82502f0dc970e3adaf96067df8daebade80b4def281830aa5fb3a2dca807bdeae5154a1108e3f03ba137448db5e10ce218db706e35f4a6e85a582f35a07aa3e676deec1029b0910151a4911b142555f4a613507b4322eea563e3bdd9f56d7af9da5e48c45e5795e75eaccc00e093cdbb5ff70c216910f0860f792f891a6bb0b3d4205c9f6668beb1a924d7e7e39e041e2684fdc6ff60a609d767208d3c80192b3bef3a79b425833165654cba3e27f6cb1066af34e03c4277897985306b8ca58a1d08ef0d1e7da95beadbdb96baee6b0a0061968cb6849db10d92ea85125e5087f4fe9f0d8357c883a0cfd33db6b407e65ae85a9c5ac695a378a74f356a328b49a20a4500b0ba960b127c28416e0367405009a50d1fc38afbbb263f1566be45a76feca5357c2bfbc5222d7e40bd08a2b7eb2a725b66d3d329d423fe40ea11e43a91484f2e08d875f41de8a3a7cc1cc47b07d20df7d1d93c4e0d05f49f7a7586ef06c4629b51cda0b918f204a5dfea55258681d881a3ee8a5d23a5b0392c55009376610e4f5cb0e7e01ab47a8d02f5904fd77fdf2f8e358b639f52cd3555fd0b55234f9b182c9166c69c7440f7627444bd88e2a16ba7fa3aa1d799db29d47050a3385398a6fd896fdf0f492232c8b9836a0b69871ed92f575e28bcc0da90ba40daf517104eb074dbeef5caa9323a4792d75954c2e14a9dee5ca15960eaa6672d8ccf167551038bdbfb5fa86a03898ee21aa6e5778be5e93e4ac0a072ca35508f0b0ded42d75d8f00aee4b4a68ab5bbfcae66754ff5f4054074fa315830e639a0c5881be573c46174e09a23cfda31364c02b80a506e401dad884e112f010395951a87c55b1bc724650840f07fa4dd049fcdece97756bed28fd04daf4eecd9eaac678f31df5662d7056032f18d66d529a6abe489c24acfe16e1ff118f2a2350d9365ead7929894556e8b5d110ab29c987e614661d430474dfce1d0098257bde0856c6587b614c742d0fd540655293fb59e3aaf3ded6eb7f723d92afa9b074bb074ac23428ad4a752e53b51f829b7f610cb4a596b6b970f465da3acfb507ccbc9403b44749a54da441486c9f597d5af0050fbe301366de7e148eaeb469eea388d2b5faf60a854c75802b02db96dd6489a992ed94c13a86429bf2c7e0b51d10bc9877b35746f3fd3128ab35169240075f922ba514a07f05975a7030f0e8426588fc6d771943956845ca63fee73ba0653c8707cb597daf626a01f76f4e10e5f5d6e573c1217f20b2886f23e47d15ae321f42e21efad6f277bc11c53c91c0f06fa85fc995b48af1dccd1da0468b555dfc335d59e9bc8567ef91c6ed66fa7f5c3a1aefcdb2b73e7c6e8a7a19a03649461df810d975157eb8e2195735e0b81a67177be9274a844b64c1cf47280be4be57168d20500b84fc3577092a0a06b097bf88bc18cce8d19f937e05be5d1e9ea794a050f37acc1b50910b263636f68b70cedd9fa6b841329d6fcb61ca9872128622b6620efdb41a1e78bef713accdd30dc2ba9439ed36477236e86961bf89885b4dc6f43abf898d54877336f343fb6a0b123b563b9ea9e627b0bf924ae2cbe51154eb422718d599d48a7f8628b9969f1032d6ed1a0cfb59769a6a6e649a2975bf51822ac3e24ad57cf7d62b7be755363615796b391144cd9825d6aad485e2dc2f680b4376466040ff2001bb8acffdefaa82d7d81ccab99154622ee30c0fa73bb39dd0745e6e8d1f52085f189d2159c4b7653343ed4376b8ff281b993d1c7f9b8dea67314f2b7464032612bcd899280fc40b97b2184e2467aceaf8aaf1f55caf7a37466ab7d8ae500ca3ce16301ccb75b468c4a1f2d96572ead6fd9c4e9a36de87ae7a475d09c34c497f67c4d841197c12c8b8d95c006286df5ae1e7c1b076f405da9468a18745ef616e5c999ab3224a0471703e565771e01076a5459c88e34cf6f19e53b2937bcbf71d178d2bb0d095c5c3663397c0d8ec5ef867b244e24deb655026dacc1914cef74c086dc01b21e6d146e2df4426817c4d829555184bf61bf9414913572bbb31df8027fed1d3ba8beee7a2476e26661a93bfddf51fec33630dfd27ac69972809360d69b855750b034810c6f86da3f28eb6dff69ebe19ccf41dbbd5bc4e484a98c3f374fda89e68d6b42fc65b178d6a7a3af992ff339d1cc6bd0281ea0f756e60196908b1594a12fd98d4aa649b12e015c7e04aa5283a554201e594d07e939187ad2ed8095cbb24a04be01b183e19a3d4f61ed867fe86d2231ac5280f373d6bb9f4a4510c0530394c5d971830e0c4dd916bd9d81f91887d20ea9386c1a9a701b69216def6e5bee2d654a49066e0a4b0a100a177e8e89797b7bb777cb181b065f0c0c9b3967d5d143def83de4f52c7b9b66414dc3309eed35ab15bf8e966d0bd4ff93db5623b3dfdfe9f3c3be7e3de08d339e80a680c2ffe86594a52ea0f0b126bcae8462f4d8770f7f9eda6b940a38edbb1a594d05f4a40c7a41e9a56c2a204b42013df9f23bc86be49095d794aca49ba86e120a51bdf2a54824fa21977446541720e510f97208bc21026f7e9aa5bd947275a56875a5a6699a267f3acfd56a5f14e412d71ed79e36dbd3e69c734e4dd3e6a437a7875c25bfa540e30f5df91d07580345577e3b81377de5bcc3952e822b1d0557beb01fccc371326183315fe692a76ee7d45e6c24df4e98821c482dfafd8d36c0e12f5b52a03189788fc8d68df1dbca561442332436f391adcc07bbf0ed10861b8221fa31cbb517278ab6173fba8072e68a24d88680fc8fc05184ff0dd415c226862692317bb8ad9ab59a308a686f7233ab45b4ca7108817afc2b181e67c0c78d31b359d025c622f0478bd5e836becb7414eaa32fa594b25911c62c58010453b46cd27186103666c00f025d36e20747113384e02364ddd12afed882d8dcf220409b08a7bb3b13604003ee2c3071820d72ccd81022cf3927f79c7376cb5116b3ce3af99d9472520abdadfc4fc594e8459fd554b44170af05b1bde8450f2fec9a244f5cd750f8dccd879d73f5eb2153a998ea872e2526b3166c28182a5df810a515e56bcb360ee33af97abd5e587845e99f61ce9e650ed44ab67e7d63e1e5bd5636af1896d2d3c70254f57b610c41f015b53a1770bbc4b2b9914a98a9e336510945d279ea76e2ce9086728a820baafadb09b086d2a602356529ced3e50455ba1dcc455dae98655a8a0ab34ab672a2b48b9ec10c9358f4234c488262a1a46e0792dc47ce75d07b847de4e688a40195383a5fa6518c0f01184000e04c7512684fdc7e67c1ede714dcfe00c01b1fc18a711c488b15031b2700e02ab8fd1fcd852878e127f0bc85b2d198f50f9a538c713bc928693c8b3146abe22bceec2877d8f993da3f2c2f19bd15dd1b8b97bb426148c4b9cf6e47ebfeb32b18319e8c89c5d451706e287412d7144a5cedca66c649c44bda44b593743b1aa78d481d6905cb9c362bae449f4b748a8ec2b4c2edcfb6b024baa6aba1d04994c42acc764d2d736e7351374b1273798aa2344e8ee358d2ac7bc9bd949ccd5a9b6de820fa0e25e9fe41234ba51bd3a4281c775974b5ab63ec246d07ca1d393781c199b508b3eacea33b1a9408fd1f1d0d2d0d8b776298dca688c3e4c689bee505b582e242b9ed35794571324dd6ed64eeee283468930cb7a710cd6ece4c3437aec3ba917cbd5e58788d44a448f22dc6457721ba8b565262d67cb81dd303ac991b26554c11b5b94b7cdbaf7e456e357441eb30dcfed966e07e3517985c14185cfa6512bd4a22138bb4666942fa0fa5a5fb8f76ff9956b8ff58b6ff5eb69147e994f4d2bff9a08ab12b20cd97bafd22ee4f4209d41d59aebdb69dfdf86e2f3beebdb3df866d5cfd71379feed89c536212933b24e650d01836638c11633ad0a1337696ee9333d82feca54f114417ace2a5a11450096c828201592a2f0200c439009c812c948732770664017184700159a727e2e5c277611c1b30909582c168cf4faa802c1a07887343c91cdc00592436401c1c409c06a602e214b1040d5c060990819f80acf8f0990510878d1871410a200efbf83009200e1f39520246c2344680330d9f9b802ceee1b30920ab63c6e916d334102118a783341344c09b4e019c7171b96c3809900e02a5b8cc82e22246503e2e4786c05284254505d7f90c211e81c57e4e0754337711233e47860067fabb494452c488c8884f86640847da49bfa11b6a39dcfed288d40c757a5e5c2b5c2eae94abc5c5e242b95a8cd32f6e01619c56228104619c066a2618a797304d0ae04d8701cef4cc4957d88fa23e65bff73c961e54cf8b71dcc7e7a58471fc4803318e23b14b18c7c3006f5c0970a683829a09932218a785a0d0926e220123ecc3478cb00f233902d5c2e2e2107a290bad0ed9c2c2f22e28d4a75a5832d44ac745f931ca2ffb2efbc97333f7611c771d611c4fe23f4cd3eff239e24a80376e0538d38fe352381a9e04b59c0e413e305402214ddcfe7e179d81f2bb155c8ce3af248ce34a9886711cc8a5601c5fc234fd59663fee37e9ca92dc95c7c09d5607f7f3fdc53891887c29619c58c4ba92dbef408c138dac2c01c2928e08e3482346e211a09701c12722e10e37b2b23c28e1f6a76474b8fd279494d88a554a940de52b5d1df1b997f543e24ef9de418c138d6c4c1827fa30619c788469ba9b304e44128d0067a2113b4423b73ffa7090c8e7361ca04705f4e270fb477e440dd708f0c6cf006790308e33611a384056153dd4d9cfe9e06b88476eff96558efb8d7b9fefdf55ce7e3b5ff6a2201df14b57becb99bdc681ac4e38235d7a74a5dc9cc13d6619b6995864741f32b5b9f1a65519cfb3e9a058b9aadfe370801c6ee362585608a19afc1cb163bb90697a260167469928d36a4c7b7d4411ee11841c0acc7b70fba50be1f64724dcfe1d0e84eb3c4802de780ee08c13619afe231ec50ff6b2bafb6793e77a8577721d47bb6e27cbdca543755cb7b38d3a8884315294d90c576d8f711bc6d88c9f9f1fcc9f68736618916e275ab743873d4b97af14176c319ded88997362589665590685b249b10823046ac1285b136d13fb4d56da9e9436289ba8d9273409be936b5647ab848c50c4310a4cca1875b8c8c588c9182336b58945202226658c11fb6cb6c4e24cc46426b1e8401b63304c27a76f0d00bdb6a13606d6f2fd846285d30e145315502e602a496142a244a950c200254d81f2208da440cac0a8fb1925d17151e834c06d50e07a6ca2276c1b106949444a68d3091a0766d684b9448631c12366d32c79e57b9406881d90b100ee233a01da037046c680371cdfe18ccc7e8ba22993ad3418919aa48cbf165606802ca007ab00836f0a0067280bfbb15c185c357efff8653f2edb609c0dce7b1b1ecba68d8dcd006cfc89cdc49e666183f006b2acb8f04341950b4b91249a73f3e8439b56200ef43a6b715754e5842373edc7b2e2f6f3c4eac773b1fef81d9bf2792ed3eb72a1a1a1a18c94d5b43c84138038ab15152c95870f817ef80f80ac9487df807e1b2f5ca885184c035926160afc9d02409c18a6e9af81381ed3f47b5f002e7cd8f706b2a800ae4c0f2c26144aeb0bc439314d8b1ed5520fd0aace7e6a2c5f7f46b35c2e26fff38bfd09d6d8c03e4296f6d84fc88a79ec3958d3f2d833c4918fd96f474c4e7b33e68cf6ba875a3fbef5b796dae2b59ac4f79897c5e6a2ca8bfdd6711997c35d1b2e0b2652a4bdbe98e5213ec45df6eca27a4bce456d77d1f22d2a1771d50de04cbf641b0c619a18cb44c0c0435c54785bd48fa9500441e9d86751959857fb1c3c36006b580450d5cf3d2e0258c32c803d2c80355c056ed2aa2a54ce036c123459d1ac56d7d86f179887f17edce4e5e1ffe7f7e56d8301deffe721cdca52d9ccb02e089f58646f0c62728eb25ae1fdfad1247c1de46331dc7e97faf11b6e7f8ae5675763fe019a85444cce8cd92ddf2df6478c4e14a91a2c8f3d669188b9d146d8daaf60d8c458c1b089e1a8159514a97d8c27f3319e4c3da1984a145e520e4671154cd3ffa2a7db8d0738d39b8d221c010ac82141c43db8fd3980c0838b0778c339e02afaa318c2e6c4b0696f36fa607bf8150d21fa17ccb2abf1611f8db8d963dd103ec487bdfc7af81559ac1ba287903666f6f308a15bf7690f7ea7c0e7487b10be57447634d8aaecab54ef451eada3c1affa1c7717cfb2c6ae86763d9ed58d333fd0ac0010655e709d1dadecf797c6fe6067ec4bc6fa603feab9d0e1bdcabeca7b95e7795e4e7f2a296d5c7fb992558579d9f7f058fd7e5cd5c3eee319723f169fd91dababf29ec57b9efd78aeca7a5eb53dd4efc7d065f12eea67e3b280ef47badb696181a0311fa3045ffb9b0cfe2804faf5f5cfc6fd58fc8ed595d73eec6a9caefd9c5eddfafff22f0fbb9dfa396d6dac9ec5cb8ac4ea7e366efc19ed8ed56551e7b5ff395dab8eb7291add85f9eec23c8cbdc0eaea7879679b8a7f84ab60b449dc988f92c355f0932002ead87015fc0c100175e8a3581f3e70b80afe0c57c1e771eaaf5982b4b301645a7e79ae2f6fa25fa27689acbebc5866d21ef419d022438a0c2132a4881683d9096996ccb9188435dee32a0829f41e48b21f2ab35dfd7a60b50776b38f2da43d08df8966b955425e7f8809919be698679e45db03bb99dda673aa72d0117aba1f07bd1c89cd951feb37e346e8fcde85d255f2339b7ba4599845c2e6c6871c39461b1d161bc588b7ca3f0dc4b6527f746b0a1f9d2830d4e7dccc264503fbd18fec377aec79523688e0d199cfa3332d0771157c8e2d6f646390f620e90b947ee9e1ca5ffe8a1e63ca73958f71f55b5d54cd4ab5f4b4a6d8a66ccc2702eacc6700eb942c0bd19916f2e8981ee53f16b222e3f34ff9946f35900e324a75a69aea1eeaa0fca6f5c0ee6987cd65ab529f68afa73de8447bb0a73df8de73b270a2aea9d20a2bfc28dbcfdf5b36a02708a43d284f95af57e8baa47aca3aa8c75bcd020251de1dfd1d8d460fa36b4a3f1a8d46af753ba3528d4eb40a3e853fddc76bfce53eeef3a16093f6e0504a109353ec0102fdfc051f4e083ffe007e57b9487bf0359420fa978bf019a8e0407f65ddb1ca9ef9152b03f11058be12f2be9abf1dab6e07e3caae0ca70a4070e96c2cfa8237dc85402c9aad9434ffc4e79f1dabbbc3d5de4f7c7e0fc28cb8f7d73ea7bd7edd8f5c2b36a154e82afbf1a04e0a82c4f1b31fd594fc9103b5073f8303f587f7f397025c49b3d822b1baaf76a0f8614fb2a9f8a34deb76b2995928e6679dfdb1d289c23780ddcef6c02e67fda5c37603d8c56c0fec8ab41830646c5657d2aa971b60660267c6bc882b69157ce86a16d4f1577b10b6bfa00a3e9cf0bd070eb9d08b5c88fac13c1c79e20f9e9b058620a534800fb991be0d57c5df9a204f281fb7beee11426a1d98fa05ab1f0975a835d938ea9e1e696d603d5d83d6c10ffa05376afd73637684db7055cb79b82abe5671b82afeecfa25939c9ef452278a200a358d5c36fdd26c4fdb1c8462bb87da7f51d57e4e4a51a87f9deef11aa82364089297d7c4a0c924cb3fec8acf3d5e3327a5b2877b4c4f492413ed9edb6353a37f52cb6bfce31f61c36b32ed23177b50d36bb697f23794cab77bbc86835c157f4e4a7ba240a936300b04c8f6fd4044af3dec52233bfaee797438dbbd7ddbd4e84bdfbdc9ded09e7bcefa10bd6653a3d79ef39a1a7d8f4a7fa3fb92f511c5a8fb91bdc171ef5047444ad9f07eaac3d1ca1ce43ef2918fbc5fe5780df66f0348f6d8a87e2b79a385603f2f24ae2ed243ba07c361a37b7cf2b43ca9e0fbc3daa2da7322f4fbdb198ace09fd03524a2965665112d6c8e84ed868acc91ecbaa1042a0f1617377d30103c3fd500fc5f50154147481aceca10bfdb4eb2925388222c882cee23e868fd8c1e3080f3eb93231ae0b2de1e3881dd9e5bf9b11cd82378893fe83b92e3770741fc33845b880371080330ce486c8358b030247308d73094a7692bcebcf1c04cef83b15f4831c64643faec1bd01b7d98f8bf84f195cff6e010c96e0155c7f1dfdd80da7e00891b3e0fa6bf6498e20337be624a2bf11cdc2eca9bd873718c73e9a112edc8ff2471650f87c4ad24a1aa80a6a3f97cb9019daef29d6aff6d83690927ec80f2b7d3550ff10a190eda684b6ebf217d960cc87f54422f066a80804f8af8fd04368244e8210e3bf16028bffda074f9806e7bfeec1855de4c26f1c401caf82691c8a0be50cec1e999b67a1ae8942430370f1f09949b35a3c7c0603c469244cc362b8f07909bcb10f9f93344b716be03f842902c46920d57f7c840b9f91c09b9787cf431a08160b69d68a6f964b3f611a0fe5e1fbe89a280018f07bf4129d0188e342201c6e4e0f1f477f302800369a957af8379ad5f2f08780388e045ee1c21702deb0fc0a467f3e5cf82a88138bc8340bf5f057cd5a79ec61567af8311ebc51e96c0860dd897f0c8b630fc03455cc70d58cfce14532f643ddd8ef79209145bc867bfc877cf801581b8b64d65815fbb014fc72153761b5806879dec310806de248fa03601d00968998158db72bc98f4b0ac9272d29249bc82a5c2820ae24366da47d8e308dff0caf91f407fbd119fba1642c0f66a2a79db00ff6a3d7815ef4f4135739e3b8134ce34d18c755f6a33e4e48e1bd5eed9289eef11a4752c45f0a09f1d01126ae23e92b5b8ce35e805eb8fe489050afa20a254618c787868cf8308e3b71e2738471fcc99323d1d540d1e58471bc4993ebef644e2718c785849c904c98f8c41efc1d89bfdc85c445ae1eaccbe5ea895a5149b5b098524e2b5c501ee6e5371675f1b0db69613feb6460d7450b51ab8a18dbb23ec4388ec49d308e6c2169396942adb20dd0f36721e520f340f3c93ab4e0d0047823d90067bc8aeb71405d217eb710deb810386337d18be2e5d99e4c33578dadfdb6af3ffab83dff68fb6a65c0d8dec8beabc9cbe56cb8fef165854b4ba8d54231a54826b20893eb8f9d9a44a120212116d44a85ed8dec279d5c7f9768801890226cd50067fc55ac237124b4e7edae180ce3326497cb404ce3cf1e2fdf6c8e4488ba801865bf5fb12aa591a76c8bfddabfbfe52a59c4554f1e85721511ba6e9f54fe531dbd2c62aaa1d4f4df74217352a11636dab8decd4ad7cc01fd5cc9c7dd4fbaa097de77c09f5beacb4a52b2291a3657f4365764392924eaad37515657edb94bfe90b8c77ed3aafc912eed3fe9ba32495731a9b335d7d5a8b339d755d7699d0de3baca3ad445a3f939bd6a1d2c85362ed0540d920e7e7ae18597def9f4ba90ae9fb7b632e0e5e777a106c2e7c7ffe466bff91b5b1df3a74dd180b16a4f0ac12baa9f1cbada633fbf874cd1e0d6cdec695ed8511cd0cf95b892661181371d5db0194dd654c10a2090c38c36f8022f813663d79b9980e90226b39f31a3bd4e8971f9ab5159c1585cfe1b3d5c565dc6f12e34c706d494c3f498fdda882ed9af8b609c1d398c202d1972c2c4a58680f3a043599aa094feabc035fd3639996655e07637baa5434bdd52ed973de9371127d3ac0f03b0ab91dd0f03d7043316d48a4aca09258667ba26fbf18b1eeb82e02f7d890475328f643d8cf3d17e30cf28722c68183c3184065b6f2f2f2f435e86746f2ed75bb4da7319a4d53ff209a01f297a49cb09d944ca70e1725ddafe71711908f48b4f6e7c12abf016cdc9216a68ccc66b70b48d4d8ca26eebb8ae8bd16b32cb89a44d66977842234739c479a447276c424d9824f971f11022fc046c2d0167806ec0b059c1194877383803234fb3afe0035decdc735ce53fabfc71278ce6a3e46ad03f834d66b360848017c672afd56f52ac7e281ced49ee6127a37b2e071c28e949ef9fd34520b1c291a3bbbd49bf712723e65dc85c17dfe34486615501fe31ded660d5e10f6faa867fbfdb0df4edd13eda1237d278cc4291baf1d37af6180c12253e47da8791c0d42f76b7dc80df68374d42ce62bceecc445619887f07f1db2fb397cf4cccce1aab307ab8fb0fbfb1288e22802c71e2f4f1e575f4f3dd69c9c1f22e2a8fd2919969402e9d5822f6da671f354b039389345296687b4466f9d2a3b89c5852261517138e1c397c33551cede58040398a6839bdd6a265a7d7b4966ea705fb220693612d99d5d1d2623f9e1c87d1a1b5642d2f2f967d3cc7654a99d5e17f7aed79a3a165d8778d3c14102dccaaf6b005e66772dcaff43016b657ba99665b5aeae94d33f5b3714b2f533f1eb7f4388ae87e78ee07eef4db9671b0d332aeec41f4c3bc06e3d3550ac8e2971eb6577ab13ae29f76523e4678bf1ef19ebef4b162dd4e8aadc1f774fa9cdeb1a1b23e787454acd35649927b7aff2544eec9c97571b98929a4e026a640c28d3228373185916b80cb4d7ca1c9e5d151b9ea8b9f7543f8e3982fb23e787466b459674365f29a6200cdcf4fd5d854d587ea3d20fa173f6b8a01a29f38443fad075ebcc8c628bb21fc4f9fe3a6a7a9d355256bd39e2c9daa4d4704d451f1f030fdc737686e887e5a1f2f5e64a7abd8aeba214c1fabcd0def7b789adaf260c7001dd1cbf8c04d7c21c9cdeacbdd5894f3a0f2ac7dc9c5a5e55b52a7a73cba5340539ac54c258561d8375398bde1afd98fc7e5cf7ae6a58c32bf6572caa4626cf9987a94a7f58b974525d5b2725a5959597171f9951517179795df562a1246927da908c4be553ecbde4b3c4a2fd1bf7e8e8cc1bcc09430aba3d4d128d98cab635ff21879b00603636934ed67be2b6675780d151a375a033cd7f967a5f9ae1f8f07d058b8691c56b3bf3fdc9847dc0fe5358bd95255f995fa3fd40fc745f999faf1b828ff5cb7236381a03efcd609c1737db03da0caf3c3d48fc785792ce53dfb0dfb58fbbd660ad0beedc70f980f5d05f391865fed733af3940a1f905955f447d1ac0eee6aa8fccbb3e5cff1970ac3f68379ed515454545e7ed3eb988dd35574c05825fc7e4bdc78b555b5990235fdb732bdc388d75ffeaa59b1db89b14e2d5ed36bf0456d79dfc3ab2a083c1b85e97ba84af8a684be14893a1926530fd60329ff94db1ba217bd4e4e2f217aafdf9c2ff2fe8f6d0b93c9f4f2b76f7e7c4d40f8f73b9b7a481791492847ab84dff8ac2eb261dd4e77e4ff16e2951b13d29e7cafddd39eec9e2bb3cc2ad1377be92f65b43b622e9679e6e2e36ccfc5731744ccbbb02cbe454c65f11b8bfaf0b2b0b589b417746160b2557b18100614e3aa3decb9ee8040d731eb9fd332fa53aa5d7931bda05e56bcbcbcd86f87ccad1f874c41ab24d29efcfa398dad9850d8afc0b6c831cce9ee76fc73bc56be29d96355060cba439a888c4939e170957c4ce6e2882f57d8cf5facc37ed87507b1e5961368d0f5ce71ed616a4c7bf2b3fab5dd01832e5befdb932cca47da8311d87c9b420a8c5c3885143ca1b2f212f529a96779d8ac2f5e960cf8b8f58515a0bddb544c61df98a561a33decbf33cb18f6dc93befb5d521e95f293835d8d97f7a100b729ed9f6b4a7b8c868df660de467bda630f63257fd8a3cce0bbe25fec977ed3b20e012b3e6bbb29a1fc91c68a6fab63c5675687cb778fbe1ddb4bb93cf7ded520b958d85eca7e3dfc6bb1b13d16fba6e76e08d4106e535029cd31855350f6f340a7fcc65d8db631dacff43dfca6a4d895377d4a5d596124cd5a41a2f2ee296ffa2d45bea9760a68cac34e46cae7f4a642b21a29fe8645057847c35f431942bb19a752a38fe855097eed635783f41a738c16de50f884253871e1138c50e4a22e37c1448abb492eb28df69aa3f61874ed4f1f3b1a365a7bee617cee3f1e1595cf71954afa94afc7e51ea57e3e2e677aa26481a0f4318c44f2d104dadd4bdc8ffb1e7d4924d2e734b3fde2750ec2db37d077647570dfbd8fc8d37559d639b90eefc75de5be7b3413685cb5c747da93dbca6b5c57be6cebe2f922cb4868957c299f7d5c2533b9042ae573abad7c1c12e847bb4c0718c9816570baf7ff709ed88c860dc66c39da67bf6d0da7a027d8a52ce5231389b2e72046b098a5c23d4e3cd135d00b3b98689d7e9196e168d6c7458a68fffe94e6d2acafbd946683e8ab01e9a0f8c455b9fdbf82d11fa36b601786b87eaa656ea35991de7ef6c7ba9dad77726249f4fe3ab2d7fecbbca3a1d9537b7c6a8fb76a441f6173b4d7da7b73cdf2cf692866f6fe5d0dcdc656f5671683720a8a39460496f206de97b16b62abd56a0dd1790a6b9e76af4eb0b57777378e19421c208627f303673411fafdc7348bfe0d32c284bf01a195e567f5417ffe0c991d361da43dd8adfa63450d6368f958791f3f4e646042109ded7fc00401054574583e7543e6727479af3b646e4b8f134388f81c690fbeda834ada833432ab532a1b8d6a847390031db8fba226a0635a0cb8c75b2f9e3d86fd6884611846bda6f418f6d37b603495a43455a85382ab3bdb73db4bfc054db6b399cfbb2acb5e1eabdfcb6fdcfde05ebd5547180c8bc622d0cf7d7a32131469b90abecfbc3efce8b39a65ef199d5e53faeca17fa9fa74cae362ef15ab3a7334fa1c1f55162f22bdb73c4844426d0b08e64130985ed22c20782345decfbad19fffa216fe6c3ad01fbdf8585f3cbfc0303b03fad74366a48f95b4bad2769fe35efd62906fde91a87eee850b3b2b03dad3d3d3d383ba3e3e3eee13dde7155de842d267cee4c25f595f4223534f9506a12da427239148596da0977d25af666540a42cb3d6fe2683e0084b39ad297fd3d39fb5f4f31960b2f44b76d23a5d9561d9edb2d173b7337ad96549547e6351140c14ec8240bdcc6f328f7aae284f233dd78f2fe9797422d3bf319f5a1f51f8fb48f197acdb1bf3e953eb837ec9faa09608a8b372157c1b57c1e9aaec7974329469a3e01eea986af03bb367f6db81caf19cee74909e5e5265ef590979bf1cd71fc56457293f4af9d8a67cffd8785197593cc36ec606e1c3b3e8aef60f11a8fdaf5db693a0aeab593fd007fb2c7e8bdd8e5b20283b37b77d9f017df1f2c5431b2feac7f7c58b971fab8e1dab0b535bd6fea1eed4da3ef5f948b3987d9a2591bce81ef2d6ef4e46fdcaecf92033f383bfe03a0fa59a1ee583675f93a2febdeb2fbf6375ab127c6b8b8f79d8d158dd98e7ca63756354dc065f43ae0b3fb698e81a0e810f64c2134f3471a0cf872ef49e29e0e633e4e47e11c8851e74a1734fb3e0bb13cd325de83ecd8aef5d103225e77aca7bed81dd53ac5087f2bf10bacc9cf3889eed3733c48be787321fede703b456078f461feb678346477a6c4e4a51a8ffcfebec67c3c6c51e7b8e32017cb91fd94d099576c7aa8545f1bf7897bf651c577fb6a9ecf9bfd52a95bdccace4f7ec59fc8671b2c6e78a00ee47f2a3f56ff1b1a3c17db43ab81f591da88f9fd51dab4fda1dabcbd9887a16ef5d0dfb280b676c0fbf2fde3fda4f26b5817a49b7a8bd0638d31f539b0d4cd3cfa2dada4edaebafb59fb8aaff2b4cf59715d67b20048050ab6b2dfb1c77a9f3fd89af9724116f4abfbe76c3d743dea2f573a0cf9f74f57321b785be18e48bed8344c74c4e09db47270a1f721e8f3c9aec1fdd293f98a701700125d0f6588bdc6fdeed705c6421aa5dd415b93f14fdfc51f51f8d2c10941b71dca96e4ae86f59b7c3592068e4629669a89bbd569140ddcca1c0de3b4cdad8516652c68979d6a239b9d8acd82c724e349a1306cc12b2b0685a9489716ec7306600544d63614149c79cc4f0063ebb9c5a9e9abe7b6c2cc440c6c65e1b0400c5866efff62ce2e0f9737355ca60fe435df81a2dd97464e8c5591b26da39eb18e08d0c783538c3a43926cd7242fd9d8b0f8708f306fa4df9f2e306fa4d6cc54f1ca25f14e24e2c9736d02fced41336b45c9884c68031653cd4cb55a8872f31c691a89a6132ca0f7ba16a57999446c598ffaddcac83352e02a86a54cbc7355093087a08ed2119879270a6768dbd346dde2962f969b2a18a4c814635d0ad3b09c534d02f8e50d0d0ac18177a42ade82625867df5956e8779a565688c631da4e1f7a01514602045c95b1dc45bdde3ad1632c455aef9435f28a0efee214141bd6432a14d504e1e56e101593161c34e5cf8044a89cbe5aa7e2a39f29da88f42f4a3584ff710af991ee6d3412d77790df6c27cbae5f259e1e3e273fbb117bb5296b2587e15fba1825ee8f29fecd0ea9aecb55982f5780df4ce7e1e17c4414c50b3d96f2c258941f02663ac6510bc8941887e07e0412a55906c1f03ac61d634ff272c81488649d3a41485faf7485f40199dba2952a850d95a946bb5b07442f05c86dc1a1ae2b12504e4127ae8366e2ba233a026a528d4bfe7ad561e6406166e07e27814624f9018b105e3c9ed98884db9b978747671cc0db0c6bf4f0350f97f15ba78df2ae4a1c79b636ce1a2f0ffe893285ffd1e1499d0be73cea07f0f62a1d5d7b897817ed3857b12e343a2cc8338be913f3719f0b680335e3d88214d7c02e36486332bb8d8351ee4aa8e64a05f7ce11c668ee139661cc6f1efe7621085ed598c69f83766c6f1db1fc54093881e346918e0c68283cd8ab9302882817a106461ebc3bcac7049b5b0a05698555a8cb0e6993f984762379cd03416168c572c2c9a1667ac342ea1b27dee26b9377d2bca1d04fac55c7682089a5cefb20a82f8e06e10935eb891016f4cbb9c2647e3cb0b39d6be9847f7c94d97f912db471d31ec0a5b9c400ca08b325913eca024d39a30d4448ea009570002f98720288101130c050a2f842bed731b7641b470d7f9e2f5163e11e87ec7a4855fed216fbb8412c2aca1e59bd33c18cb283618f359813e5db54069c20e823026c4e0094eb2cf9e8a2477fefc91f48db73490b89b1816fbc725c3f970a18a9e46d1ef14388d24e2cb99bc220e860afeb83c38e3a3efb66c4447922f751f20d0d3c8878580d0798c4b76a2325e8e9e648c4bb6753bcc18e5c9d1938c71c9b872f4245159e4bc34dcfe6f85e2e84988f4e23f1b55953a3a3a3a5be4e0aa3d4ce74575d1936a5f4db48948a4ca17de9b9f5b276a354bc8654b03c7bbc96661d1b499d16c62316e5a868944bcba1c7399f94f4caa1b57a337c7a56ca76e6734e2cb26794715426823c4e2b2fd442fbff47086f4dd227da34e7643f91cdf6af6a42abf543f9ec2edac2201935c941fa1bc8c374341e130ae5b90a6e10dec7f2cc44d2e0fb1930b9b89a9e4e3253dfcc74c520f3bf8023909ffb0141532f1f11331ff4125bcf21f044a09824c5cfe8355702b9b27940b0c9b1810aa4188063d21280a17fea0800517d296814f12aec185496e70a11017f6a1913b5c38d4531c116373ed57733f940b7dd870158e11b64657c319fa2d0b7e296de5cb2579258bcadfad274c180d1da47bbad541580d6760215ba3bf8494043d81c99325435120433f4cada3d1d3d77e43b930952ffd19bd60aabcda0f7f7d0929097a0293274b86a2408647c1e56f16bc6400d44c3cbc5baa4628a4aa5f28f4a75e6a37fad26f28a5ca3755f98e8874b6ca5b22d2de4bf5619f245c0376b9a0c043a20fc9430f5c56540e05c5024139be2e9c75a9f2a2702b38881066c2c81d2e7f0fc9430faa70a9f0a66af4bb7128dbb652f9729b5d692f8889103be18527dc3374790a6e41f4a11a3cf4a358aae85b3614910855f96e36228be267897184fb00e2b292cb2dc5500d1e60c0bb52e1ddb01a1d53a924d28bfef41b4ab773b2405092a8d409c17349f29e6cf41bb1baec5d94cbd94fd44ad28ad1ff793297b4ba24d24352cc25bd10e9bf7849dc25917e988644b2dff65b57a37728f5f42d9b9294df52ba9d140b04bd9d775a75d03b55d2a3ac2ee9bb05e39248492ee9635cd2f7e0130367b61fd578f96ece952afd1612e53baa7c491536ca16b95195d7542fe94b1542ef9b97f4b4f2cf2591588824b151a9dbe19ee76f557b118d5991803f37d332793b28e2775d740b6b18aaf84990d443627e304f470a9c61005b84fd93da6c11de863ccc324c18aa02ab993adfa4a2e77e34deef04a18b0a183a684282a21585f420211732e1892661b8dc0418c07067348b9b00831437be10cd2addd89db450cce7e9767e81668f7d4aa6a44d2d80dfff066c1bd055f70645b92a7e81663625b1ec8980f119c03ad9b34e667d444104d40162e3aaf8a82c7cbb7fdbf02702eaf8338075fa59a7ffb3812f8f82e5bf46a9a49c70503afadfe8c2ff68a9e3a0cad55a5cee8a1778d342626666e654aabb99b939954aa552dcc2825a514939a1984a9434eab8ad328de60299e67ba9312d8cb1c1052fed8fbf91600c8cf69c5ddd6ad7e41cb625035ed2c712d0ed33bb8239bca63f0055fe412f088ab65b2e9eec7276519b666def39777ecc5146517491b419fdac7e5f573db02b3fab3643a0f1218c6661560979b1f75fd96cdb539bcab2d943ca889f01036c00bb9bed815d99d9c6b018a38b661986b1c4a290eb50689acd89df4090d035300c2eff6602c9f50ed24f5cff0c8b339af5d97cab8b610f27c574c4872e91b7fbb38bfb01baded86758b6c5fe9ed19ee7b4e7dcda5aef792eec5bb5ac6883892efac1202d069e898cc8c1915decfaf73c97ad4046f03a51d00f01290fddf248290af5ef61d47e3cd786843dd46920adf214f698ed6ec1d66210b321cabdd68237dcf517f897e0ba0f92ebbfbd7fdd1a7dd741bc6664bd07863d57e9649c0fc1e5a000852a68f7e3b41a5147b4a9ede37fd97bb7b3719ca28f07e81c2da759076816e4562b6b390b719efec13c987cd9811176acb425501df1e79c7366d902721c734de4a2054ca8da6c8e8b5e9b33a317a52981f27b08366d09f4b759b9f658208b057af2452f7a14bcc15e2412d9af878c3da053c6fcf87603f1e54fae59f3a5c86e5825c9d91e0ade6c1b77f539ec49a48afd6c962b7af923d102e073d6ef267a51cd5eabd94cc54f65e0f685575302ed6c00f1cc3d0edb7b5152ece18beaabb067ec639a85411bd39e0bd1decb762ab029b411b894c0dcddbdbb80da61d49d50c8e7dac3ef8e7c2af0f34feaee653cf7cbec8761d6bb2032adeae087175e8869dfd9b62f6d841a1027535001930ba7d0844b6edf712cacbd713da7bbee90b9b557f23f8e9e5090ebd1979463f30fa97fa8446d9784412b15d1000000006314000028100c87c362d17838a2898a6c0f14800f7ea44c746a1f094a10530819630c21404000000000000022811369793ecd94382fccc545f925b450f3c508d09ae4f2e47d3e4717ed9d085884ca43301cdc690dfe1f99a5985000f9e6984e78b1604ec9df7e4cbec4f99ebe3f225f8b463300081a4b1d571252e76b64b0da5e664710a0518e9948669c25ae1af486dba049267cada98b3117b95ff2945f73c0ae65d42c569d22978de56356fcd74b744972a74051ed94e3c48835c44febd4a2e69c8629091aea7b93ee35c73e16e01c2108b303ff88283d288a3d05589b6eed3ef1c82a6f5e92e71f928eed57bfcad22d0ba1a2e755fd73c1dff516140d703ba2cb26f533c6798ff1c67609cecfe77a4f635cd590775365bff4c5ce4bc5fcb5d388e08d3b303be65fd22529d66e4503935113bd23e0a1e576c7c4aa95e5b3dd8ce701eaab95ace7187326f5020fa814e63222d0975025f5a13a1313c8238875cecb139da87d49e06f3a84d80e1e93dbe581bdb7ede9a7164560be7c2747e5eeeaa89c2593266f416ab1da59c2269455971f076040db3507be310c097959e4cc9939c23e177f3669496fe8d27ff217530c35f4059e37a7f53af81bdd09c84e0789f0f4cdf927fb54e9fcc407e6e52572757d54646e366ca49419543a5456d7e77d852cb307c60a1ed1f5042b3ca1df36743f23b7019e3173abb3b583a0b9f89321abbe80081bd793ad9fbe712bb345c60e53fb51cda5f81819bace60dc55cf9e28830496f8bd9557f3a209a2a8b3c79828c3a196add5ecb275d19bdc48d64d8a8e1f2e41563b23462d3e0cf7fba01374c3daa3024e32fec1c89298573ed34f5087283d6014004a1ca9abe4b9ebcdfb843e88aac556df60212da96aa3209ea3795898ee2c95a697a15411f3225613f157efd56fdfb6575ced0c7262bf61b2efc962162c1ee4ad44691b8fa03573041c176e2f2701115f9b1ace7b71122c4fce5e1f10416af446707aa84f5df2380148926f99c3adda178f22837621f621fdd979404b2d9fdeda820fc80b2e504450a1757419dcce2ba08b35832c88de16ee023972d1650df8f8dbcef97f21982d72d96b3b2105bd8a6b2e160e6c98411576f2b107a92e6fd2015c10b0b5e7d568974bd49b19ab65c7cef8c48938924548f454b98561584c151b179d1caf0b3939126837531116e3a6cb9ae170f9440492c6316dca27a38875190917424c94a2389fc462161dfce596d8e3e900632b5826cdef49c0e0451c2714cc6b6905bdc885c0398838f06733513f9845ce32ac9cb3d99e1f90ac059d3f62d5a5c3c27dd4b4e54523589c40b9849713550ac5c95920aa7750fc84305f54b5b5f858fed8885e02df56ccc640a83dda7a654f5150e4d875f4e705ace8ed4a012905d1eb85084c1590661583743d8cc09a4371e60483354c2b9861fe84f3e3f0bb1a61bab4c9fb6813b28c7ec543e1a2dfb39a391d012f19f12a5fe78a427a3c451557ecf71bbc810eabeea54539cad27dc1c3766e29b7cf291f3006164ce401cde8fbb2f8acec50b80b8285454b4e2acf73bf506a81ed81c280750dec419c2bf1d91f64b6bffda2d516dd9fc13c997ffa955d678f6da1476c2b51f0449887c0a32c9a8882fa09d9621ad80c05a59cc454b167a4a616dd8ebcf9ace4ff84ad3a50a653a1c9e8911c28d11eb7a636d9be30b9abde3aaf0fca7b64e7f61c6c5477bb9165af7bc99055dd2c4805b2d75ab1a74a0c5aa761d3c34e605da14dbe7404851bf6d2544af0f42ca45c3a5b56f8b23f6213d4c02f58d42865e8d14c588b211f9a43323a19a099cdc8dadc602fd10d1d219339dd8225410f11fe5f448db9ee4af9c693249cbc169a4075e7b5c32630315cbed4c204f40ec6e3dd7bc30cdfb8eb42d5129f1e4091f5d8e7ba84d1458ee89493ce8a6c8e53a404fc4db9cf9df9e75be4ca11b08c53ccdf2f098f986c84332179d188a1df6d2b0fee9ae3d156c015fdb64432a6720f3822033aa96d0099f8a71b5ae0608e79cea8c3d2dc57ee7a6878729058578220dd292e235a432f15933cd8fb467a2563141ba5ae978add6ededad08b58bd35fb7f9396ed85df2352c827fe6f12050053acf235f22b3070cdd81fe678dbe48c3fedf87f6fba69a6ec02a082dbecd49c72c6d02d244f3fcd11bb5de0ec074457abb03ecf17cf0b8fa7c8b20b34710106b90f46f4911a16a23e5e0edde042f0013ede6fabdfdad2a09c22755da2e8e7a063d005ca72328aecc8d050c8c80e64306182156fbcfd9f003d96a8c939578b1b2057e52f1effc4a7eeb4e60a2ad26f1be3958ed2a96f4d62534fba4c9efa8df40ea6f0b7b64a1723bb2fd1e0181ba7b2c6b7995d9569266dde9915d7c3f0b0ce4482c7090cd4a4a97f85d81fea1d2b5bdd9023ab08d59bfab7effa0efb7800932ce881e401ce156c22128829fbb104a7a3af504f47b3997178287aa3d9577118226fc734fc42689ff0c655108143e5e2ed03a560a613964ad7f25e185ed3e58a4253996e7c0ea7ac47ea85e82e1f1619a319793c866a80c43cd3a5598604cc0be9502a6a1e5693d598356c668cd02433257b0b4943af09106486b0b3f198a3e0b719e2c56b1801488250e011010ecc419c5bea81cd60ca3186de9632ac5c665c62e62c33e23c0e7b0d61517082527df5a688a007f31fd931f412b41eae929cbb5408de1b5f0ecdd364b8bddaf29bb361e58dcdb3311f46e19bb29b065ca52091b6867e827e6508f46e4427e275b1c008ee8e53a0f69d8c1d825812e6c937ef08d344285f153d074dd521c452d424633e313c75dba9dfd3dc223ba747c5ca2fa770e5d0e47b5f37279f2b940dbd4956a8f4899f5820ef3c07b10029287ccc86bca780a1c5819b61ff21c4e583c8061ec9cbe6f7118eef5c65c4265339a3912a96e275308f68aac8bffa2a3f363ec2c9d9325c908091db46ff2ac94e130285167285a2fd76b7d1740da6a661b8e2157282f3e468ac8238d551c16d054905b21dd615b5b6fcb3e93bbabbc4fb6ac171699ebfa3089fa4c3cb4e34897bfb171e5fac638b3a03890d5f39ec93e8d922f199f6c260862fb525149b6413ef14ae11208e80b6d9b62037d7002f4d005b7fd5989ed4e76d48c5951aebf2fd5d88b5d934daadab66bcabc06b16b2179b003cf454008e4f8df908438159f900e5d126bd0d3ca416a87cff12bcd851049a9480ae8d6c871dfe5e0fd39387e89a6b2090fb283c33809ad0cc4d5dccc004874e5a663e2c37ff81318fb40d47700024c16f43068dda553083c37ff01f727880dea988e8c613c389fe432e589c730b68c426ae061425e1873309a8c4091940ba408670cfc6fe909f66b4af62d032a27345c318e2279a046f831e1e4199194df12823cf7253fe84204fcec8b8e345df5f3904800f6e2691098867def874eeaddbc4c6823af4dee819c11e1cda8f199714c7cee8da8c95de9fbd4c540ce7e00af3e9bb8edf8ce0552e7a494b39f40fb193e336fd49ada63ffa71f4772562d76da22efd65fed295d0be5a0a9b6172082154e7a5d349e3f059b453f351d3c93275d0ac2093bb5e628bab598fb5ef4d3726aa02b2f34804ea5b42cfbb5a6bfa6f1405c452eca6835d6672587d7972677389cf7d4864e6e7b31016a4d74e61ba360b7b74aef111acafde6f1f5f63da90d3617be70da193d68a54beb41e06c08f8a733315066f4e8d889eee8f71d148712a390875d142c743099ef6d4a3188ea915a9849c46f4a358740ea5727eb5a6cec2c124fe3f9f1357cbc5194ad835c1c6bad0d4eaf82b673c86f8490202719d496adcdaab2cb59f5b3377a42d33e72ef8540681bcba3c07e6500cfda8d13ca0fbcfa948e3af5cae12edee7b5dafef579bbac7c67960c8f9fc0fb6450c7369e82850acf792ad10e3ce1456c6d0c03db95e96f3eedb4f5f5f43220848bff454441955ed90cc87304fec87c9a067e803f5c66a93bceaf1ab5f6d8e0f1b04113c571254b25918867f14b6a7931b50a17fcc84eff429ad32e4e7086142ebafd51a1450eafa3e35fe515e4fb9e28da699a013bd5ab35651380bded176d9804b7fa7985074f2567422b9fff5f22ee0d685603937c246607eea774b2f530673409d8eeb7572c54cb638f5ee1f116008994f796225f95cbaf2047cd2ef4b46ac3d1fd63474cd8dde9c467fa9fa1a676fe17a7eb8d91790a46de891a4115ce56f7f5361f55d8024198032f926892c4fa8d718eccc81dc3636f8c16ce6ebfb00f3f606fdd2b071f378f83178ab3e4e565b5c8fad647a2baf8c97085790b800d10e70c140696a1289b978d9925112990a23a4e43f06c286a21291510de0054274ed954cb825a6ff25d27828265c4f7afe0fb9c165e396e8152ed0220a5db9d0685505b5c771cc5ff762ebf9128d1c42883ed194395bb8b2e467c542acc9ac7d242e352d08a4259dd41510160defa9e27083eba302d8b4f0148a3be9f000e86eedd216d54a669324b1c4059941d3c496314fbc85cb03a57d215e89860ff7c4d2fcd3ff1479ba07dd6896c0259eac3766981697d2c3e9179dec1aca6847d15c28edcc55d232faa471a301e90ec414f5e55c98ec0a2619f2193616961432dd2be6c57657f8f6609632a751ed729cc6a5e3f44c5034650ce00d1fe6488b8ec8dfaac9cc896fa596048400b30bec59d0f2e4548f9cb69a099344a82d62aedd68839b0f8d820801dd6eb7e90a2a4e278e6f9f1e49df564f044922f04b438fd58a96e236c6d34a792c3213dc88f4fe9b4539404b6a54983363cd4af57022f02c4462ec5a70d6bccf134b24ded902f19d4d7938ec771056920bbc0c15e9baf3d91c332bb23ba056540bb160dfb1eec656078e0322dc4d81d688986acc1ead2d52fee72180ea2ea688d20b201033721560510762413da782024b1bdf13e93e7d073788fcfc91924dc2b32eb2050778a81f1d1ab14ff06ae11ef4d60dc4046a4620a1f7037ccbdfe55ee5fc2c2e4a891c06ba658819fc7a89c526794223b6d7e326f27f229f4d02dbfcff01f2425d261cf215caa66ccfa55c8bf27b94a8c6f76c0e2791bf2da9fc25864c679123250225f2cc394b961f35f22afaa82338d124ec6598693143d2ef0bd49294e69d1fb34a227f37e8193db6fbc231204f4adc4654086324867f3e87413131aadfd97941475240af46480ade131bf5f7a1c38d1e091ede33605d17af446175e8492912ce84ead52eb3298cf3bcbc728fb106452fc9f6ab937361e966e22eec21afffd45a919b8182beb0008eb2511eda22fb01baf522c10a885d91a330ad1b15c4ff0a37c330ec78cd83be02bc20ad220e7c6843b03a50418cc1a8efcd7d5aee2fa66d35cb3bf95d172a71c01b8144806f6cd44d8cc9dda2a6a53b44df5e8ed642c45d90e90cbc217c57ae0f72d0401d576dcccc22687444588a8e8d1dd9c40544a4996569b19156292562bdca53522a2dcc56b7903fa93889631ec7a1a17c4e656a52bdbd18cc9d3dc8b1c7ec59efa73ddbec4aefb52d7e7ef260273b74556152ae9972519748dad12c10201a2c5c3ad2153f7e07c6b9b8a4b07975daaf54a479c55873507c297566ae69b3435a16ac2093c642268599a7cbae9976ca01408449ad3409eeaf9c6bfc855f2fab9b73fae3a81d1d5af5c6a1e3018155e92d58e574e5abd9f9df47679656c504afab25d0fee8bb361e7d1ac2027232c8d01e4356819850185e503fcb3e5739a38dc9a892d36950d9803ff270e3e5ecd14c9731ae370d3691572bf329911c3101f7da5f0ecfde175b89595a3a329b22e40ec336b10e1ef8426c5187ac135ac091974564a2de34ab2f31f9b3772a3b4a70f27cf6cc2c1f38003885df90d7932faa9ddc3948bad8effcbb6ccd88dba14aab3b943e63bfd7ce86b53400e60c0a675c7420d6ce1987917ad1c3748293dc11e14eb8e095519188c98055cebc711380ab9d8e1a5b482b0e6bd0186f7cd32dc4a592ab3f1843f441f3605a60782cfa1e5165128b121f56e3768cf9dab03e7ba0515a916c77e56bef9a54bb0c98e741e3115fbb87586c890fd7b827580329750a93433077f70808014763f8f4a3d85727040f5ed8aa45bfb969c35cf16f4607ce893904e272e2e95098c8cfcf06b0f982d5036f07de2143177cabc40c6e50528497f64ccae916ffa4c877f241a3b6fbb1098c93b806e8a5cafad2004bf63125524c0142bad097045895997c5b55f4bc1407c7f7c9806bdb01d26702113ef2f92d3cdab46395a50e46d072c8a803f7146e707bbfcdc67709bfbef0ccb6f5a8a5847d2128e8458f109c397904fd6b78643acc40cd2cabf41dc5d8089c81ed32930d37fcf07a27a0a1690a60087a19e3744c21395312a979bf5158997c2683c5cd56fb1084c6435c646b8a83695e08120892195337c07de71006a5e1201853e7e7a320db6ff2acad2f57604978a0845a6ecfc279e36ea67c2338b793a961f6561381efd9f3228394cd21123e91995c85fab9811d0be5848a1bec8459b140d43b616a02d0624116f34ad9c3e2c4153bd9f417e2277ab5c351ccdea4826944edc99e718a553dd77faebf5da5a64a30a97ab6a41871f593a1679a335e30fd43d3f3ad1ebb3d7e9c7b632ec69d3ef3aa6898ff813acdf4970f15ed4d5c86f2b5b40883696e71de20add5bb6f108b3e3d45b4f7eb71d3a0cb2f774e1e5dbff97a4c1bbbec353a25ea4b3822a4ab4ff3e27255fe9711de83b07a2b2c26bce283cb207f707f1a4dfc2114d401260a1273bd92b0419534d692a933ce145687a04ae1ca30f4be7f83c206ad8d0af67366ec5f93233de587a8e9a2837439266769328d4565191206ce9b27ddde42cb13a258db51bd2e9c496e49f7b7be231cc16cb0c254a675ab41fd4a53b080ecd28e3eb0bc6cd4520c4e635a058b85c728834544f7765263195c89a5572beeafc21abbb19ea6e120e50509425db36a50958d56a6b5a8d23c8aa06dd12f7417448099624961c6fa3943fe9a41cfbf727148ced470c1dc7eb69c88c30a7760b2fb003da0719b54aebcd07ac4404b25ca6dbe0673cfda7ce1467001bdb2f1c35440d1f427da361813835a3f4ac0874aa312ecacb229c08c3ddb33526d8805038bc4cb9f3298f1cbe110cd4c6ef95acef8a98a124f87bd2287a77501e90dcf641400ba5c5c5f64584b264402e0cab7803a311f8b8f37b6af95c965768290ae853e5bd124088130ce284ae6b06c9ef5d1de08e0d649d34ac1f20bfdb12b676ccaad244e84956388ef76ac85b87d6b70c11b1f13187e5180a0ee9084d3939105e58d5a3822572ce0b5255c5250503590df718c70880b800bb01dead73d97419ea95064cef5981452137ee151c2ec4c3385cf05d14538296e12ed7464fc0efe51960d3abb0f0f21c1c34dcef2528e5af97f1bbc39d48db6aa48e999619d463df6ef7b58e86e41c87d914988546ad219bce7952fce2f9112232b4e3cb9865b509351cc319380a3034af3e597091514290533f8c2012be4f772ed6908815a9ea6f8e2b5469b9e6254cc9fb2dcb537e178c9f01638cf269589a4f93be48115248238564210828d0fc1b10a4e77ab20b0c27a9cf28f78de8449405e40108a625678f2b523dd3ac0a5c83feec77d8d4772eece06f3bfd489bb51e4e548239ea5efb3cdc03d2a6166c5639c0a07425747d5e678a69a7baa2484853d04afea98c4343711b8826ef31cd8177efe95b6dfb1616132f59dda4636d6f279e106d548e84517faba90c15fdb95dbe877073d601e4404fa4ea5fa2aef1ecf8c6f88a803c8918377f32e528e8d7fb197ffd06ec1b7455545535846321f7ad805a2df67ec6e457c4d4fa76507dc6d5b17729de5160b49a2cf91f23d6929755c70b01d5ef0859126bae81f60ed24985eb904009d614ea1f39678135df83d793f0308f0e348227c15608a523b70feef3b3ebd9fdd8f2183d82149b0e2828f13ec9f2aa5801098366d13d5ef16dea71820a82b597b986ff9f61a8901ee8f4c847bf6e481181ad91b12aaa4472f10789b003c449cd78d075a13e2929ab7b5967c32a5a8c198f3c4d6f8bcb918998a25311ada6f5e398a8d1f91f37eefc29aa5cc4ad72176d2a9e0b41121200074fb24a70ec2786315159ae05e729933e872fb3d2ad5eea14e54cd291b98399858ac444227c78d108b4839c93d1348f10a264873c0819f448aa4be607b100cbd81cb68f66031d71b870a67d4a98ba092f70d7ccda4c303e10aba13222145d680278dbf54a1e496dad03c2c6ef7bc48f75fd402e6c412e4e49f8eb14ec582f966f4155c5c2296d0d5bb63e6c99e256249eddf17fe64ffd4a72db84bbce61da00a158cce2873c1d1500b47a3d349d76ba24f7a057f25b9339480efe10693fb723218584470a4bf0c0b4d5508b4e1d6d6c1c2aba68dadcbbce04fb8e58be5fee0d3b190ffc60e8240e8f2230da3057419e279550b018d55cd48e4bab37adb83681dc6289b87a5a421c2e66241dfeb12c985f0cf3143ccd47e9d7f31f6e86d7b7194e16bbf3c992885528b78befb9867100f714cd52d9d53a555b93c7b49aa302d853bbb8cfedec77b2c21c5831717e9c0c466df242c187c58f20cb84380a5544160c0b03bb4e91025862344876d5e24d7c77e1412c50eed5ff271559195a6890ed79720e5c513154640b20f8b902360c2e5d8dcb9bb5d75997784c9a7ac0fc7af1d03130714d1f46a50e4011781b23330c85d4851b072c2ff2bdce1a32bf0ada8d97dac47ecdcf2a59a253636efe7765856a043d05326471db909bbe9256a1d376926ed3c9f8f128055d4b26616d98fb4b9079281c6a875b285faf5eee4d38c1706d3488293b863da0bedeaa57e44514e45be55ed82bf74e7cf6e539992a1b20bfbd8cf1540354604a2bd0158d9c0b46e81b9062c39a122abfc66e7a8be347e004ba0e9091ad983eeafbcb441c90492dcf6d0eb435e6bce3146117f8f12331fba5709f3c047b8ba539ba6ede166642b90c44ef2a153fd084efe563fd2bceabae318557ba9b56fbfcf6c352354fc5b6c1b59f508c82d262d39685d390285509eb9efeccb90c86e35b82b2bb9546b442c207f6cbe2ace9a167982d591500d855e7504135b13668f184f807615a090174ce53a888fc9e2af2bed6b57c30c5cbbfa89e22f98401df8daadb075ee5effd3625d3f19bf36e12a04f3ef8a38e4bd905b60b9fcd24d7103caccba1aee820d2100f9a8ed24c360029a5cb5965cd72d3461f712da778fc3fca99ec78e99107ce02be6402701f9f3a41de75cfd197cb79bd8bc61b45f6fdaae711eb55660fb7585647e6004fd663ca6595de449f41a036b54e30f1adf0ff2c3b71ab4893b0bcf1f74e488c254f02c0bf28e03f9ca42fe599d7d4b464cf1631110d18f90ae87fd5b47df8795e95de4985e52c409474f219c06dd144230b503b0e78525c67eb811fc8837c0a06ddb8f4d6f281347d614428daec45b86d3a94cd4a0614689fc730a8c82c545290c1e24f56a51b2770560a8e1f91bf5d542981ab39ce0b7608a3f4bce4939844901bc55de8da99b29809275b3e64d00f3dc26f0e7dffbd79c3a0c9b2c504a40345fdab72d62201edbab7ffb6c74e167e44e8902f4a18397311358b5e76502105b0b27004848b7be4947d20b7bd0ac0e6a02ac25dc3250cd9f19615992017ec06def56b048d02ee23c6c2f190bf2ea2d2e0ceedcf216de9135d738c2fd9421a1cf237f9a82f3550ff115e0fbb383b0fc49e892c121cd1ab3c2896cb8519de34c5e9017fa791381bb54153d005b512279332b1621fdca0482f8aff5ed34a1f740953ec73bfe46ca467ab097eb7f55097283e5e558a9096d50647bf2a46a48529694321e48d6601f6ccec2409ca07aca96184a7d153e02f940366826f2a22e42671283a0efe2e128bb2daa44a0415019909d9b39ac57419c5c8c9e5b6e649f2aeb9d3d1e18bb6d19108f50379e3865f2cb08116195e369f90f00409f1267ae3ac3504f57ce0c1b9a73e44ebcf810d12c6c4c8d51f30d7cf68ae6ce47632991475f0372f776e5e07dbf0db8e8dd19b1ddb9355a6595edf96015a57346673a453cde7a605fd668fe3298d89f6c28a2b3d623f30bb464cf423d615cb6c8ddc1e3cb86fc9de8067b31d781fde5fa0b862219624e011e03e9ccfef17bc7a9aebb17729ddffea2138a906fc5a4a4ed04452019608069c406ef5aa5673c3be6baa8cfc5ebe5ca71cd544bd8e5e8dc1fd6d85866e57e3d327ceb5093415a22fb53a65d055fd626c0a8bdb99ffbbdef2613aea760670de281bb94110a641710b208891b752194f1827bdeda59901b2d2384d68872fd5af323b91a399a24d9b439f427982bc81a1c4052604fe1718d83153d4086fcbb792efdf66ded1d1633992acdb5bdaeea8aaeb55fa1b6c367c6843ee3dffd1044ce279b26371966f7eb8e2a3f8532dd42f0d9baf96088a71d514ec8a82d460a3d1e2266d37663b3262304ecb0f4654dba35961be38bc6b476c3993b01a91d416fd2ee22c4de34b6d440a9cf2c7d05cd4664463a22bfef7058500b23160d1ac130be9ef02a2d002dfec59bbffe7ed9f2b9f3e7ab07f3c45e3fa0af94fb5a5b22d54d2b99daa8f8ec405f81c4d025993f6cf80994adda083fb929c1031dcc57a75ed239a8eb277ccf52bea987d6c8837bf9ea1d2ea4e2a1833536f2aa1fd9faf6786c17072758934f20697f569f927c47f7670abf028d0efe1c4dab0101f0fd57ff0d3c24f1114fa7a9a836faa78638c5434ecec8bfc7a81c1c7645d4f18fd93f008e1f3736fdd13613f8c80e0022576c6d726a1fe4f6f345cfee6f33bbab5fd03ad6ebd7dfac4d5917c23ec57edb95ec46c2ec0c546e5759b54bc43875cc3f5e20668eef13a3be25f6e0646fd16b4154ea092378587a9c94a36241f0f737f19dc9e3c39722a6405c04f212f8104be4ff1e3a628926f9b9fa444342196238896767098088caa20574c9bf5e6539842647ff9e0c3099469e8e5f1a05850e1a66cde6df4be65929eb74789cd614e39ce6a3ce9a879541e8469aa1db87309600be08ec995c0eaa744da6d1d4e91748c5a51c7cb4dbfbc712992510073f7c4a09ca0e8ed14ac5a170425a1eb156bb62440608449c8a50273a53db121a3b9be1091776e74d84d148514888e0c264cd404c9f82d42a8514e63211c469f34c61c040c0c6d5490f8955b0f758446e802c7cc367332cdd43fa841ef09aff4d0dc675cd6ffe12784fccc0dc607b9dfbb19b371998e0255af4c694e9ac5dcc15a5eeed23cc3fa219c339e52cd2cf9cd674770937f4c67d85b345563d00541ddda000448a2583a365f6ebe6d378115b049744c0fbae1ee6a25bcc9fe936384603da903a8ea5e695dc68836350c6d17fe6dad6682655e53d0e0da33d89bd955bc2a03eeb398e7e6033e1c58052a2e5c37cf6b22a27d61d3072274cfc584366e2af7605a4d0b2d01b13d0cfbead9e3153da229da4a140efe725ff731cb209c8431c93d6db608523617c1f0f2e82a600a34b68e87c98e37b58cd0fe764ef6c2ee131767e5648ae31944bafeaed0e80e63921ff2c19cadd926f50d9c35600953b653fcc5ccae988eac2e91a95a189be2434b6034b3de9216bbb8ed90b5d602565eaa14da7f2922bb9d5b954fed55d2b056dca20fdcccc49888d6393d528f79444dd2ad1875a34459e41ea415e0d2b3607399898b0d25df5a14f2024c4043f0eff3f2f0891bc4bed6820593642550bb6071acc9dcd6c15fa43504bb758ec217eb1f95348dd55f46687e62115ec16079e3020feb80a3b2b0ace7f096f819f8b56f273aed474e5ec4fd26ab77b18dfdf98a403b8bb76414bc90b1ba5badef35bb4f32fe6f25c7747550a3acdb2e07b049d3a96a7aef2e0dceae60dd645dbbabdf62a053278862eb40b14eac6e940805ffd6abf05168e3db283c29957ae24ec04c1d2b68e882c926bf36663305a27788cc0d4e1bafb372c1d03743bd9614d45843ac7df1d14d357f155b3177907477c73d16f67be394a742cb1ef97aa82950d2c2e9895b7da1a1ecd27c4d0eec02e9f899341a8ff3e38171758616fb630581be5e143d50e5fb271fe9e09ab6107c238555390810dab5db3e8968066e9717f28761593bdfd90846584f8b624a3d5d4d97a9843f1351fb34a4c2bd75ac96446cfbab244bc6b45eb515b64eb7308d60af51330eea4ddf030d0bdd124b65a9843615aaa8eb9773585228a62691a383943d59de4b4b869c0a3e9c11852bcd8170dc4633a801d3525e38a725d85ce527353fce23db0dfab582bd3751c65ec88cb0c789a86473c56d43d3e673b9240cd267079845f10bbe58f1b2bd50aaec0d0451d648971d644b6f616057d78a10da6be7121e55e85bb0465498672d440ddef1341914c27401d5668be0bef405e926cc1c4c0b808112ade9a81ff85fa05bfa5cdb1b2d19313d9eafcbe9456e075838d0ce8db5877c1526a23d441d97d136ec34f565e480033d9d92766f7607877f5328f32d4962f7d85efd484ae64f651483df1b34fb9c06f305719d042cace019ca37c7b31d46385b6904ffedfe6757198187736f49c61436603f8e3dfe0447d6cbc38d90aa540bc4442440d983e625a780df75b0ef6e2223c5c0b27995154afc0b4f0c50cc4d6c1cf8ac58ddbc0c7674e539ceba5d93a07d2dfd31434d1ee3b1a420df6734ecc4b23ea3d2c1587ed01173280625480070f5857d23fd8bb1b0f3910885e7a10cf936fe937a815969f6ba61bb5c067cd435f398fecae8cf9165723aa1b24f4a56c6c4801ba1015477c8a0766970c01c6f12106c90dbf4d6a063cfe36b09e5d340c31ae625dcdb84848d32ec4f0326b23d7bc161a20cf45c35dd1564b3951f1c0f1a2918be9fc291572bb9df784851c34d1c18213b09806ac6b12179f68e629f796f3662bc69bfaf6bc89e711af5f30fcc919aa7bfeb7cdff3a31f7689580cf3fa8a26d39b6fbca7f1e6fc33eab169cb7222cf4bcf7bdc7b8ebb18d6e1c6002066e3350ecf596697673f22dae61b36fee97da80fccb1acb21948f36ef35581d222ed49fe4082d752dd2a59965647d84f3fe4404a50180a37eb5032500ba9d51ca687c50b51c20724b00981240bce35f58d48648513428f1dad060c07e1a6703db2d16816d61d404df6683868b1b849215c59562139d10f6bf392e3992d2e3cb66fd3b599a444d66b462e24270dec41705a86586fac5f9b98de4a70560b70a16ce88cfe00ce08481754341b013faa7a4bd1d409f979d7f3e402a9715dcd2b33254ded0bd4206886daaaba2e0c2755a58c66d5bc62b8099694722f8097ebe6e2f997066da12e7e25f60a1f59a8b47149def40a7d6f53fd73fab03374f8df6b28e5214a95dcf60f076ae76ac16874fd8fbc3eb5097679eb7e47b07c0267dafc20d317d7cc7684dea14978b0df106ba70c9f403bcea7c41a4bdc6042980ab3185bd938a0adad2be42d709e6d4242c7f1101afb912f98a52ec8c399e5ec144f3d4a55f4a52d8279b3865660506177f03a82a34eb15b0d9454b7f712fc7aa8e7a169fb15993244849deed05416210ea34779ed0cd2baa1e842ba2333300c837c5d6d1eb7dcc3f2a1454e812a54dcbf1d715bf2d9b6c12fa0d29aebbf21d7288cd10388d7c5464fb44421ab455e5113074094ad73e4738b5039ee4a6792aef941e39410fcd321e081c45891dc4440c6cf034e6de5d7beef20373aa15d286728865744c39619c13d774eab5c65f72432dac7cfd20bb25b18e61a6185f0af21e37b376b5deb012a2fd27e8bef9ca8a3952c73b63358c5bd8963f77e95425cfd9b61ae7f3fbf21195e1c1df15d9afdece404cf8bdf015b28c29c4a97f8b3f6d7397050ba904411962460a3af340f23b7f96cb091bfdeff8139a08e7b6532c50dfef37401ffd86fbd605a0e0abe06d91dcc50c90f1e0d5a760442e94618ba7377cb7095d6431b8a62e758f1c8e2971bc7ee987cc3a635097aa95b68f67e14e2a18720ce6d5dc0f4dce2efc9e41beb2aabe984cea10df28a9f4de0b7fdc49bc03328a0bb2bb8055ff1250260569fe1cba9dc4f52ba53980be0e47f4e8757bf4858fd4a806f3aa2d6823955ececd0aed11522f7801f6e202176d559dee427c2020eae141e144b0edf0ab1d68652f8c6892aab11eb700132d6e4a1b8a96fe0f6fa2de58b4c69dda68a5025366630d4df509972b89f247e93992853e65db2f5c6a4f3fcd98ec6d50ea7f3a70438dd55297861a59a3e391219ffeccb991a1e9a1cbf1997ab457f02da2e2d2133fc5d57c5fee154e7353f02b32bb3d97dfc883d4c88f14eb471e3536b0cf9893503407c48322195cd4e04b4d1456f9f0cdd03252371c621e94b0fce87c542274e5851743c5c64f60fad4ee7a6149af8fbecb8aea9c9de1a37a8d4b8bef75860f56ef3372d5c34b329474866fe4677c714b0bf01125f2825b97cd83ee0fd594a3194baa5529a781bd6bae8b6a66456a1ce9a3e248913b261eb0ed61b1587282ba55aae4a762ff78ac9b09d2e94cc81efadb128b0819b159875f3d3c21c37691632aeb7cc2cd00dfdb0290ef23f8c568fd96c4bae987efa969015a28b215c3904e9a184db30e273336ebb1d8b4c39785923c83a5557179ebd6cba482787b7a51bb0e6f293337ca34a86a76ca5312c3fc1f98ad8384a1fe0aa07daff55f2f7dc75b9ba133b466b7e8eb8362f6a6d25456aef0b9c173b678c2b7b20c762172d0e2f4f4bd32777817fe44325b2b2a751f183930d1760b092bdb52d5897eecfd10dd358115290a0c6d05c23cb8518d21bcda454ceb650d8562e5257b542175657854ff4ea78604be907da7351d087a89d38054e0bbb907f0fc4d14369d5d17afa0c803ba895701d170935a9c4aca8949d70a6103dac6eda28646a96f1996e930cb4b0c2ee188a57981fe90116b868780468c6e849f8502752fe11d51a01708c0d48867590672b874a6ab912fa49dfc71fb3542df889b4297ed7b7cef2da17fe598302d4cfba01cc154df3b7938b404240f049ed7eb641b250d3df524edf564b0e93a4a3a6432e83db4a75d7e43b429e0c377dcdeb3056e39f935ebc86875cf48f7f55757dffb1e08941f6bc7a4cc50fb3001fce6d583d3424180b764a81406b86b7b81b2419e8db3704ec2f0e986ecac96db0f881809ace78a5f43fe4d2d174a499529746d2d071524388bc989b4a389b451716ca2e1243e5ec884d26eb55764b5299d41e56c9f40747d2c18c5eab9308a822071b15e5d24e774547a1a160850eb8fbd585007225867f789037b204f883a7d9b6925c1004fb2551cd10d8d39a6d99be931fd8ea26582b9b9a0c3f6142b472780609d5ffd9d916cfc8c364d5d09a2a535f6a369c4e17a47f87ed4a0a4b95f5ea8aaa09a217d980a2a1a06db7072ec53502db1f51e4d0e2902aff96d030cf072786290884daa2b05852723fa5211c7c01ab7ba1843e8948aea390fe2c45e9e6b1e749abdceacb5571d4bc4650e2958d225e2b81c7d61f6ad8df63d3419545075ccc78ef08d1ac7baa471176aa812c4c5f092b63efab73e629a0036fca7949a699f6d1e3e37fd440b9b81caaf7c0730a19ccaf5d2bb4cc913148d6b291820122326df519ea94e8bc3e1bfd3e2de0a6ccfcbcd73c3350c300e343632e380658103e54e870d239bde1af0da03d8d189c2184a0a3a7dc60737b2c7b55d7ed58b12b87169d50c1f7194a07542e912938d1c3a8dcfb61d2bf8ca24cd1d29b4d81aa10b8794aca247a211a920edbc2331be6285a3da4784f9c40132699acfc4b4dd934a090bce03adb580353db99997f9e6f650a7afc3a00d9f0e604469801125fce2f00bce91522bfcba035fe804881689f07f879343d21ebeacf5646c369601c7840495b36185bdd1db802e6b9493dc9e5cd47e8a91f9cc53ae952298fe4602eac75fc126cdd5234817e3eb4db15f6c43e3ceb7a9d8b3228f3e72a2c7b670ad883d2146c365ded3cdded98e8dde4adf9f92c044643eb1b05fd5dcd3508030ae5d6b9f5255b3bb7f85647a81049267bbb3b46b66d696c3634c24dafd232e921a4c59250c613ac724fed075461e5c50049301699d8e2bc44786993d2f8ee5e06e9db41b8122a55aaf6603cc2235f6ef01728ac3a470d14b5c09ad9015281ea94f2c6c537ec0eac98cfd20badf0d0a45441459d3ac8fa3f888afe4c15cf2ff2cf817212adc8a7e74468426960b119422daa1d7211c45487fa6f7ab0164d3b5808046526f71748ca9b65ccffdc9bef648968f2c1bcef452ce1b8f639560fdbf680235bc68450c75d7f8fcb3e7c2c32418765079ff7a09ee09d12b1a2a9ef8eb66e1ac45d315c24d54d71fccac46e3f7307ab043126cb1177151938ff673991885773393d887d858c64a034116b8584f4b0a8f2c709c99b0e3e633b95ba8620695afb129b039b30aae0f388e22e2f59c5ad201da0793812ed0b8c8351bd03e1db2901ab02808f31fc1a9608915f886ce14bb889fa71315d70db2a997b2196d46ce902ba00e0b297bcc416c729b1f46fbd6ea3c5387097c4ef1208b5b2263cbf3262fa9a66099944c25d1396df41d07cded88447efcdc9718cc75e6b56ff7c2174878c1dc450eb542b19542cec1afe8ba751ec2fc838e17d33f035d2bd466af838776cc3d98a4994d238e6bb853bb2e99085677d565110ae1b8ece118948d0c93d93b35a4881652475eed32ccdc43b3f9e8bbbfa20ce833d222d7237f70571ff4c75be51f204f8f794f225f4168f6d91cdfa28bbd868ceccccca1848ec9480e6f1c53386c04531cab52ccc00ebbb1d5294456a5bc80580a95d166f4345d9b7b7786524d587c2b34c9602c1e4d0803e6c47087c0d3407124ff29baeee6e26d7dc70f0a82de1ceb08e982b10d204ab6a7317f91b988a94c8cdf4dd0801d88aac3d1d29d9dff3453f0b39bbfb6b6e0f8f82d2ba904fe8508bd24cc555994cb2b7379fea3c5c24f426a81be0d684f379aa38f6ad9f2fe03dc87286ac9b18e4c8796c4b099448a597c46632604f2945ee78e362cfa28a0498f836ea139d6adefe8a6cb085eed24be3ad401ef2176acb4dc26c4b94769903611946bdcdea6694d43e7606a3cefebe7e5978c5931394412f6989b657ecfa9d41c49e00080f30bf1b26d16d83697598b88c92d462726f9740a99883606cb899fe1fdf23998f573f023ecfe4602c1b56b71a4d84591f566f3a0ae916d79f4b849a1712fa660d798977af758b22efb4d0cc094fb82b47049114580e71d50d09331c26f9e0baa4e9c202bd6f525c980a368db1358e7ef8fdea962c83bb6ef053c384e06fbb5678f09bc47192807065709994614a4b17598744a8ea96f469da1d2b580bf05b26a3de6cff713a8fb9e766cec9857c5b88529edde8639ceeb262353c8c448830b2917602569c1f52cc661cd99afc295c350486ce62f55e3067f2d85cca82058861b1f85a57cd78baa89ae7dd9ce9fd5a8b9dbf0dae001563d817cf5b3cabb1691d0e570021488f8f55ce9b272d3fb829b4c49fdc25f84707aa757a44d878dad558f53541ecdb2ed97b59d2306092bb1f3ff21aa7ec6e16d0bd02f38e016254913f57333324c1e96d4896691e85c80a850e1e8f0f57d0b9ed2220df824ac59bc203ef941b90e42e05d9aeebdc32d87ea2df8bbb5d09c451e1f7cc4f5d6b3ea67c11c2add7ad5ae1ef8787490959b55e4859e46d87b5a82009591bc5d95f48af546924800ee1b9f9901c20d43cdb0b30b80665cc158bcf405fbd7867e30626e827908753e19c4390c0d572c0e54d69992f5d0c04ab1abea1b582428350e2499881aaf0d4603339f29c0ba27de3d4f18fd22e3e2c7433026b76a152151c71b6b662930ae261d2d879b1c888c966b5a4f58425327467ef36fd0ff3e0cd30a1c3a77db1320280719d404dd9d46768d9bd95336ab006c3936b7663714f1dbbed71a876c4a0504dca297e87ca7ac7b131d1b6565e271965226c57283ffef5f7bc9891791988cafef47d4467b3d24ca6b39668bd937205e610a8d216134f0d107f6293f6d21aba09860cb9229a3637f837a9f4beb8304e289cc3005baed40b5eccb4c2e6b4c01bd4bf8fbfb92b2ce824a21110f43324318bc05ad820f92127ccd45740572ac9cde2fdcbd6cb31b086dbf73ca8e41acb3241c6e9e7712830938a1c717d2bb1bbc5aa2d463141aad8a664264146b2a11fb86930f56da7b90a2c6c12e4c3224a0da91652517d0160e457f8340d297920b4dc2befc7b457f4077fd750495894b63199b18d4766e3b81fa7f127400ad3a9fb30e7310ad963c04d331eeb6d314c5f390a5e811209bbb16b5ab70a5fbc0543596f8dcc8be80b75f35cd15ad26591484bbd8c4a29f96343d1704d22825d70f92a9c986559f580a50787495be7988d61b4ab216f0e802cc1ffddd8a639647cc166269e089fe0c4e64e219ffa940689995508ab740e2121d15add26be997838a9187339446fb0e92a5125e1fda84510e29d2181a698156d1213169ce914a76309839191e765e1d7b1e8d892b9fe87f025627b971e1802171ee42762d015b17d4f045a801352d178b685d1a7a8bfa83471068192faadf7a329b0dbeada67b58de7ba18f40db7d6c8df6029875f37777ca5ea54a0ea0768b4e39bd0e7436f88519f601eb05fcca07baa2785b7b9c4e0c3c090dc50eb48595791834ae808a0c4e59fffe892f34f6629ef4567012d025abc73d2e7b825c9ac3f3cf1cc95ba47c279acc51fe01e7c20a44436345ee84e55f16d7655b0e3621ec7abb98407191acc881fac30e27eda5590cc563333588830da2fdba2163dd6ea8894efaa81b5dde6f655f15959cc8b76fb153854190538ca3bcce56c521d38b4dadcd17ac72e8df928d26dd8390b23487b018e39405323a252384f952cd9769ca8ffb299eaac174f78e033b728a24813a78585372dfa0e21ab6647134a309fab856ba3933b452e8cbcf381c3bdb331cca2ad309bb6fc369b91085d1753ed87e673e243a8d5e4ee22b9fca669142500994499f4b5e25dbcad159ce0ad92cd91a6ac9d27adf750f0e64a93ba6f32470b7951b331228d546ccff0888b54860cbed671c6caedb5b24961c45929203b1c769521d730e5a1918e0ba18ceccc3b1c025968518037a9983ea4a0993340c8dcf8af70842d15b57e1643f6a7d184f4d06a6ea6b62c2a470768250bbd4f48df6a80c024c721cbc3db85464191357f9e431a1046e85222b6374cb7a2e0a994e1a7ff28eac598c9a57ddddd084dd8914736cb5290e7b3e0a548f803967e28990856508438d717bc7f232789c6d0b46d7c03112b0418a5b68444f4cc2897d589216a177654e069bea384d9480ce24c1d0a511443341087472e6eeb99c0aaa9882160b858866c25b13df36addc8c3996d930cf8df66cbf2eede29f1607f1fe91a89bd481aa40363e8137c6f6453207ab3e7bd6307e0dbeca988714940bf83a0da223b1ab6724b5cabc2cf870e567fdc0b01bac8c34a1ebb340e6bdb006de105733d9fe3307c0b324493de1bde42c6d47b7aac0281943b05c50de4a402df1d6f0d818282dee601955538c66d246599e1d0aa0f72d4ab31271ce5f04e36f58bfe25c44440741fd243aafcddcb4e284be8bc9cc7923f058be2472f53008d20a238dd678d06d23962966d17e56ed34bc145068a556da3f323b925e21802bc2c3bdc6f160d5320212090a4a22d83d3a5ffe2d59f6a3a1fea9805b269dc8b64eba18d2dbb53f0d24a38110ffe90c411e295daa23cce73b46baaf98197626dd95a1f4cee63b41369f98f088f5db91892fccbd506fad51ee55fd5c25d3dc491b83d8f3986bd472236106f1d9810055fc77d0ace103e9850ff0873c2a358f3ee0e9aee7d55ed2646621741f580fef6376fd6982fa7cf4aff038fed55630ddda816e7442b89438a3769bd1158b8890d61213d360d56a8e6a46ed52951ce5871ebb88d8827edea1c29e45f5be9e9dcabfb11a86589806233e4fdcb2b0bfc445ce3c7eb5e7d881b3db72d33a92a95bf9cbf1af7c1a8a9eba759c0f8333dc7b6a90e8c58c92fc9896dac267f491697ca7e7d7b2fb00c01164af0bef13397b45a269b88072a3c6a220a524652197c2a64a44741235f42d79e9d3375cfd3a377c2f947da4ec45daf5329dbaca94b1a9af487debe795315e6b24e1157c801e9c83c5f3b40fa58abf5a13f6664550c4d16ee233f9e2df56190e242442521494872e59923afa586bd5de35f4cfa27428b113d7765903bdb0245b3aa144a50f4c0b5fdc4593f1765a9e818748ec545a628b9064f52fdffffb059db4d0442cf618a8c662f02d1b32ad7d44d3276041a6e480088ca3857fd906f3200452e4c19468359623080b799e524e8d378d46330e6b59bb96c59b5a9b8c68998baac6d4b88f99585b7f47254a9fdb885e204b4f21d8d601636399983404d5d24e58e6dfec057f36c657d6e1024dbd04b80d9d6d727b45d0d7df0840cf490760226fae942899d288b605896f5cfa563a8fe320a6a5b5a5b49ba4b212664cdf827d12ded9118d91027b37de40f3bb87961ba0ddeb79d7d0c0b675811d63af39810e90e0de1f5ebea5063698018d102e9df66369a173298308629da69a781b3f704c67ff1a0882822b22d496383a39dafb76ef19de78898ba50e5f5c35ee56dbfe816ed0535a477f43b3aaac2ed6ad3d6be6d172c07a818014e803c24af45a740bc5d55c1976651033a631aefde3905ffbdbd40e8557518001abf5e2969a16331d138f04a9179033bf07ba7b8124e765bf2129a42d0a0c7131c47f23841f0a7510d5145069d6fd1e2c2c6bc0aedc0d374ad59bba1d48d0ad11f635447de852e9e4a5fe2f016eb321e0950eb120e4af1f99998d54d71c8e43cd789a386f4b4c8f5760ff565f1f130b6151c14df135651c3546325b57727d5608e47ccfcad50642a48a39c81084d1e33f180a3acdc6dcf42395d20bf9cf79ab5755fb505004dc66dbbd4f4612d58fd5004ad00dcab537cb6a8579e77495ccf1c39034a4be361bbd593093585e74e590f49c2c343be390c09607626b89e62bea7009a0ae64f2951f560ab25f59b86bfceafd73f5f0bae2978e45003b4034f1da566aca68230d7b4b600253da1d3abe88ce7deab0654c6ef2b35eaab52cb0c89edbf14b44abde80a7ae12752df4f8671792406db67f6ff170194ef51856f03b40d59c0be5e04005753cba848dcfbd61abb7e39f600be717987489823ce45b9a2feb282292adc7f9991ae2f174e50235eb5e2dbe0935fc709646fdb6eaf8ecbaf04007a2281011d7c3f19e66f864994ee8015e31f94c8fa34ebb26a46df0f80a373e1f8d214bd060b62b9c8324fb42e7e4ce10253591b0b119c7489cb108a0e2a6b8e5ed716dbc73e5f5e7c31d8d14e1db554be484b89e401ee755c4fb640d205983996a2dfacdd4db54cfe2f75b6b8151fffb62405c7c8145534691938f3ae01612285985796c55ed726c05e9665026015bc2e4b2ef58ba247543c19559bb9ce7a5881bfb271b70d463ee171dc8b645fd50287e25b9c5ac58bddb3c940dcfebcf2745d7144a04acaaaa8e629edd75399f9a57571563f9f2fbbc16a8dc751a8969db2d4f8ab5d337422aa203faaf8abdc12d4b6977af68d6ec9ed74ad86de2495be5b0e542aa038eb6e0cf08e05dd44da0c2c69269af061d7b03d4d5f61a3050832f9c93fb70efd28f1b28dea3522e1b3d056ae576729bd0c5a4be46bc7c937bf73e592889da5dccc91c01697a008e96a274222dd3c4550eed30f831abeca8a9c02b873a21715f1178ecabdff7fe43ebfbb3cb02a3962faecd0689a704d286570079cdd00df0f8f3a4ec7f0988238acf0d649df7f9eb264d1edf4c6c9b1f35aeb79f06370321833200a1e5bbbba6fad91ef48dff429e06d40425969f292cf6203753df4187fe21ca6a715f221fade6e42fa7bcdf08137831dbac50256ece3cf9be3407401686c9cc7692c67cf10bff1f11be69acf63b0e6644310e13972542e722fc93b2691ecad8db123cd19aabb502b52ed5fc937f40038b4c2b76e4934b553835f5a058ea04a5b7b547b79367cc8e9d06bacf159a93b2cdde044a28bf5bc1978088da3971bc72172238e01c2e51c85b6b2f518f26247a11c9df71417fc71dc818366aa2f77f774cfdce68da643ba1011850a4ef4659b08ddbc0b558a978181861b55e247b062d6deeba6c1ffbe741ae1eecd1d3e984ce1bca6ce146395c63fc08f6463088acd506ae86ac9f135ab09493267f71378605986c2ae9bf5500569ead032acd991089e633c8e9bc95d04dc89557aa449cef6b5d062ee9f0b4388da3661eeda6299e6b4b44f2ba1cefc6267d5b8790283f8bedf906ed4e4ed8cbb154307bd6edfc6d57e6c286b270fccda5f2f631d857486b92c4c6835b508c230fc77e1f0b45e6491b223a60d70de3fff46fe222e3de386ee3eff4d1b2711048d8f27c394736c3d554057fcf20ff37420082219e115f682c435d67b9edff5cf21ce29282b77ff599f4c778cd8f418b442dd795fb960dd00e2d239fe796b9cea8bd70c0114633224bca35d3672600f7ff9487378fe955bd58ba4ff5d8b06b8807a70640b6bb7d3580543c0340052a32e02eefccb63a9edef5986d3fc1594ca61061d2bf5bf49e0da98e71445fa56abd5933d5feb9001255ea0110808425b38c4da308018c15eb6d5fc3dee6195207d7091e13f1d9e317f91721db2abde3b3e70557f247230cc2049e8fb57cf49def526beb0a26eb9967b03074045b1469844896532a94f0d693247a2b1af48606bde725a1fdd6485e289fce530443efb4909cfc18ff35295fd222e5915e0b1a7da503882ecd3e106f7cae5f6ffa644a0c180a007ac07cd5fce01369de2c31b80f9422f1f2c28b421e532e0223bd863b47bb070a6bd7ff563ee347c07e6ec0063daa8533ec92dbc426094301177296ab7156c21014ed82e7646e3982dd7c38edf0c1964bdc67b928f09664f02b363c40197aefd850f0cd72536288d878f5192846c35b1dcdbc10df60c426123880ecaedfc13f62897146758449782f8006dded1e8d50e41beabeb2e9f49861ef42e4a88add6ccf40374f39db52238eabc9a0a6728689ebec204b4fd44212b98265e7dc62aec4edb8a9a1e6a493614383ffb9893dc8cfa22cc363490502c331d9119e3f13b3b42db09b27a570d61e3830bf037a5c354ecc6fd4f3edcd962d36d76226c5508898b2ee56efb56af71037a78417f027c553543d31e8e5ca5e0d586fb15e5a8705cafaa2b4332af8762493d887bc664a64f67e6fb9ff72e61b3f81062f791c92875b5344e1d08a995943b213984fe5f86584ef2fc1d252233b2eff89831171ab181e7b3dfca1a104787462228ce888cc0167d02e3b034fb0106f507fd88e358c6e8caa943f6ed3c0372cc00caa50d17a3e8578cd43978546b3d804aff3d33544471323837e632bd5154cffdc0c30fd3c1e0a70b8b6f8abe34494defab2a466e6047ed64971cf0045650f7013d257932cf866f0f3f6f1593707d71b8f0b864de5c00610744430d3b7eac1a336a8af8e44137454a47ac19be66a7a1c3de1acca4307642cf93876e1c24c44f358504615a0b10bd8b13c0f008ef42031dc0d9ecd716089cd0048130ebbfd049b35ea7974c03179e4f6d3440d2b3651c5fe04efbc0472ac36fe44b1f8dc1ef86436ebac9990f1cd3d9cb2da5ad39c16bcf3e9b65bac6a40d949dd462ccba1e2bf59d8041497c949b878489eb414a5ee46b05a94d588065a74a5d5c07b6ab06236b483a6bd04dcaab2ca20fee3dee4edb83cf878e21c12d31037341e782692a7655a1b551ba8123e473372b2ac5a4cc76ed7b35e4b53195f6ab0f0dca9596ac18294b2d642b162bbb705915c009199abe6882e20d5eb7a8c88a477e96f4d521410db2b5aacb56a3693910b794f89d0ba297ca6f665fc8891a90321c82e1ab443cd7058313c51699408dae2f42ee1b6ee466a14751e9da4708e51289a9dbc9924a374af339c340f327e881b7b51a6d195cacfde2b6263821c63a5403cf7fab16b9413d38c21e96a11aa6075068064b08ff039ab263a4608f264dfb6b39b7cb441c637ab86e44a0390bee5a0bc306ca50b8c992ea0cc402e302e1e89f47e366cced203b08293cd794aae7d90d445bfea1da8d58163e2435afa58c868a0203e8d98df4e98ebca233ef3a21792ae4e29bcc92a7a351ce6cbac1040f8cc5366852498bbad8996cb5589f80c0cdd9bdfaaecb30c57883e9f99812ff309669e9e15ab210e568dd0c756186dbbcda8794a27ad5cafc49b1dc6d87c52c97cdb2cfce5c737700caf8b12060a9bb1ce0222dc5f8d750e436546cf11fb65bb5b4e6ffa9ddca70836ee25158a1fce5bbcfa77446efa43bef377067cc6e98d12ed98d88c7e2220e298ae1d82fd6d8e15343060ca77a82042baf8b261a32db68041c1c6be94b761153f6af7e7821ecf4fbcec2d9672a28edab5acc1d2a6da22e98a80399fe2c0dcc804b823c4854e9a731dd9e4dbddde9c43f5f8b9abcafb9394759216d8fd901959145665d5bcee48272149105c898be2e7f179d2e6bfb9dd1bc31abf970c15ef9a8dd2edc72fbe2240f2ff7a337b867144b66e6626e49a8406bf8ca39e93248df80f9a343acb85f4b040ff5747e1c055f5c6977d441106b8b3260e2018a2b5e675a6cc41d2e3a74473e6f66251530714ab403c9512329f30b6e4a7170407190d52644b9cb280c9c320e448737c75ab0ab1502acf296216430cdb272397b7be92e1de0e189ab5e040e8bced41429345aac96b13cff54e3c3bf22243c7010e2dbbd7fc0fad0e5fb35b2324934a0c6b6bf6c9cdb0430bf48aff06f03a0068c0d0c66ee8d16256e33306b96e3f1b44abc6c7b918762bd4dc628d4c6ac314657b6097eaa047d692fe550fcdeb9710a87df7511d05f29a498f42d6bd7f4b9544d7ae26cfb505fd4ba2c1a17bf4aa99141e7fa9bff97b250811875e0a6739a900c40746372c6f78ab14edbabc8edfc4e8810dfa342078591ad00b3145f71095d06606e419311ff8fb1f31a464f06c771e9a254e2f9894b057d0294b178cd0985c6fe881b0a0c0a1a37738fafd4175931aabadb190bec8383e81b457d6534fa7c0a40be09d83e181aaf67540c4f82e2992d550ba1c56f33e6a3c92a25370f5769209bb50dfda4329aee67d20928ae235160d4e0bf0b2e4f4472f1bee58a640d4e3027073ff5787e4b84e51ce0017ded3e57355b72a03559cbbe0da7c9dbbc861f0c954ce15273c12b4ba7b77eb86d4c6fa92b4700f46ca428c196def04016e60c029938772ea26682f3e4601f5b4f336a618027422a99b092fabf70190bc4f66ce0bed08b280b9d74115d7dd3519cd572606a96c424ff1a8b873764aa05ef296c4b52c6fdf2b776a27aa10ba4d2a54acbc209bf1ccdc8e31c860daad21e82febb260a4456f27e30e3a8ac6e82b1baed7ee4ed77e28a071b55f1fa5f079e13fc1c3316797b26226e5ec865f3dda0f144f1f904547e4e5ada5d73bad00857634e1c02230fcd455414d5c59a08421f4b5f144f858052cdf84db26ca9d144183632faef7f84d422a68272547c25d83e303922f092c411ba9d28f64e5f47178d959fd7b11fa6ef8c6f937c62049252396b8213bedd4d3b28a57a4705eee740c8c901646bffa65203937c2bb2579fe08a06f0d47be48dc6114a1043ad772efaf3326e0bff35b97f37ebc4894bc65cdf61a5420e3dbe18d0653c0b1a0d71d45fb62f3d6426148514f1e70b5204cc4bc543bbe2ac17cc5749be82effa1be92a7b0a8ac4676e3c4c5334c15fdd7e52a8a214975605d3fd3d57f58bb1e51e3448f48f5c2c9cc3fbfd760c892d07775802cc91b3fb82e3f2ee00e5dd64e87cee3ddce77703564edb8f8e3621d86d83cde49721cd4566ff17a71c98d8fd70990a97a38dc70dfb6783d74e835044088538beff752fac8b6f8f341d27de321622d12730d446a4320c7b5df86be2a2011b7d5dbe225eb974168822dbeb92d3e5e1f8cdb66babbe7163f1df4a3833e70a80b4e6080ed27c45225398ef102904311ea0060f12c99e55e8ccbe9be9960b8f8e4bd169f38d31485bda591a6cf1d1c8cf4b4023435175c65b4b362ec191c88abc5afd5167fffd0e2efe2d55408ce78e85db4038af89dc0afd2e1736fa6be864e844794e7dc46fa5f00703758d773cb2f8077117ef7947fcb7d573c93cd950f1cbd268517750823f468c53bcdbc6b43544b0ef309dd5bdb726327728fd9b09f6401ea54ffc6bfe812c56474c17d6b14a62f7018948652241b60498cc7141faad3edf9bffafdbc142f31687de8376089e9980201bd38571668b33f276b1dc8690b5aaea3d7f14bbdb79bf4ca04eb5598de26dcd0c4f7ae2ca0175e4a13bda77c330f7485028aa1ca744dee1093c6eeef0f519af66ed1b351ebfce782137b9ad962e56c63a955db5e9a6651ce1a94837b3300f3599b0f0f114d389cf11417cb09ced9867bb79698abfbb6da3236db29fee6b2231c22d0f16eab5adabdb7b6d91b79c551b88fa4e011213981941a3db3ece1be3afb305fdbf1ec1caad40e4d73ec8aa93032ee54c5b464eeda7842c343a315bfae31444cc76eafd828f53a711382de3d74e191c9a18271e0ee98383a00b6af4b9ba1eaa938b2849075db0702935a62dfdad350c893ba6f810360b725dfefd4a0559a835e066576375ddc9c2fc19af72e79a43556ed2562541a1248d90f3fd1c8ed6d8130e99083b724fcbbc490bd3733970dd1dcff9680c2ae5cb2bd4bd7ea330432ea1bf6bc64016aada1568f51bb9d570808fe1915c62fc9a0a5ce6ba9ad73306185a24b80b0d6414c036ef47ccfb77bb61a0c0105f6b09a7176692f0977264ded9f0774881c60e5bba54a41128a99635c77bf2aac9fd10c2908d9e4626544cd00318d64e422034f3aad1999239e02a7c04b884cbbba7bf331fcbb915bb0867bfb890afe6401687da2f1d081a18b699dc1a27c2d5ae425214caff65c1b36f3a295624faf859f92ed47a5d83d7069aaf4705c168e625e7902b84e0c5f5e4272e885a79925bd069d27f06a8a3b2890c12cff9130b89f6d624b6b60a2bdc9c49a48801232251abfe584144e789659b1777ac06beb02771fb54e4d8b8a2e159c36d5f0553b1bbd8e57473b4e9114bc162dd0f39a9b07f4755eeb4f3f2d39042b9e793234a45a30dbbb9a67a56e63300a9655f6316ca480ca782e9f1be44c1a9035d0ae4c3463ae5f7726a02b66340bd0c54e9b1697e0914364e9fc73c4a14d6f13c5980997305e3557b1f86a89ab8bb80dcaf66045ce375ba005d9d54e80adda61a0f77f12533375f2ee0af7d284b936cb298e1f26de299526d4776898e3c98d9ffa47e70b6a8c08918f1d71af250724e69fac88d8068bb32825ee89ce73c1875b6c7df7bdc2d47ece3896a3740e6dfef60f25faf04f1335a939104ee45cb260b302637188aee095d398d32c3fc90b1c53749593661d212930cd739073d519bbe9d584766f3d0e26f0c074c2c4581b27708e3897cd37c87949357476cd9274ea2bc91ca71a92380d818d11dade30913b3dd653b61e5fa32c576a718863e1e52d227b07f06503974d89c1fab75bb973cfdc4d0d3474822d6828ec0accfd9ee453002dc15f9ab4e6f7bf13c67253472b69330d71bcf136a320f40aacbd11d22104aab35750c5ca7a1e101f02e0b7eab625464f9d810865b0f833885862b9d682843239c7247c082d3092e5a1ad105e9d2ceb6b47724d53c61c1a1cc4a2721154a0e8cf41a8c011a989b5623a93bc5ab1c95e72abd0486a279aea06460979c345098d9d0172c21a1dd109ba5cf125ca86a0a6926a646bd36bc2a6e078a8f3d85b07322aee846a7f7cc63a4dd9408816e7590df5774a23e21de9b21e6986f4be04e57b1aeb4b1a9bf5a214dd9d7546d4825843fcce09c8765189a9b34bf622b7ae7a41660f337832620abc8d05f52c4e3f857989382c7c6e0246e406da6b06a5bfde6b2d6525907da457717dda980124aaf4da10cd21d5cc855467643cf92e92421301ed35c98685cd014ae615d63acc497c7f2f21b74d848591df82a6b391a26bab64f9aecd9ec06b94a998008a5c0043d77f402906a4cd578bb51563b80643a67c069fd418cf275858821f0a5b80589b42322a15e13bbf6722bf30031b0a0b53988d950f552918726c451ac86c265611c206d0d24491487a2c81b3585a2a5a2447c72cebe950039260ce3a932e6912f3604943ec2bd31c6b01378ba356a3d729547980e124a01ad5328553d61bbea522d00d596c24b03c6101653b8263f7fad107f2c2985fa4463c618c28377390536be242ea594b8e53272fa69c4cfd2608e4deaa6fb8fb68c8c5cb7030f2b4504a9f1b4b6560b0e063ef42d847fd0cd5a360ee736a334d293bae93c143b22d0de152625eb71420ffc1429274259028d0ab110b14301c21d861a874688992df84959eb9f2953eb2356853d1a62509eec87cb562d9a2bcdd6f92e2d62b1fcd9dafea89d999307a7de924232ed5e7f09fc2e916b481d98390678cccd2c26e23a8c220e4bcf5f1a682d126b482f92d54cf180f97095bc11c4e37be7dbf6fcf7b8061c70f611438a8d2241476cbdb375d3b5df033cf7bc30bf424e1f33eabf160923011eba2133b934589f9f94bae83a98953c1696ed363ebe46981575b224e0e58be09f6c1af9a3ba7080ff800379653e19c1e2ce584bf023f0637663daed4e81ba56c13cbfd4c0c1d0658b95864e6e21638d95d2df3fc56384086bfc4ffc18e8ccecaa393af4dfbab868d9b59cd7804e6a922d71f0de87354ea3786a749a3b3ed4c9909b5c12a7c6892e0051565656db9fb7885a9b43b01fa89a83a619130314731cdde243a9d2e8c0e7ee760e68b212b1efdf979a6666e490283f2ede5b7b7a0938039cb6dd7c02bb0a863439430b56cbdec201f4eb861b7a980d023224391f315aa8f983cdf12fa38de5ebd23bb099bda0e1352599e4fc547a3c83d017d7ef519a0e9295fde4421035882f691b4684e103b6c2891417d600a230604b5f4fd4d43c82e4ec5054f585cd1d3cbb6b3735e441e8c00df4009373200b4702e33cd9ba8e51dd1f233b69c43bdccdb0d491411a7fd6444b0aab44052598e9b393306ff13d007626a0971f64a663393f1cee648978d91681722fd9a5a666b09729e5a96f0ce9833745ba278481fd5f213a0feb5ea6ad7f244644e8576a8e4612d800f42e6f52cbf2d8e4cf5046e2fc9560202c3de6153c5aeeb0da53e9415a75b196b5c5e23d3a87eed068413d96729cb91fff991a66c1b33d6974de60c647b1df9e2f6c9fb24e83b0b65f56f64897fdb391bb7707a6d7e053de05e2bfa417df6f15fb6b4ef9f845e302e164fd3787b5b59e923528df18ee4f412eacf6a6785e9702c7ed03f491682b92f092be6ce665bbe622fae87bd61452ea39afd5bbda223dffd5074ae1c2e25be41eb6f987028c6c25b02ff20e1e5d885cc48e29d7c4c5b815c0a4cc1c1f665424f584093a327d9dee806c17e3871100f67aa88fe98fab62be38042cd193c48b34234eb5e4e4db13e027a1712c8413dbd2ed85d37f3e3b6126e68b7212f2e4f015497b59b634103f02adba78b3505c2597c2a28e279647d168a6c67acb776f2da81aa136eb4a40c67b03b4e0314c160b3cf90bc3ba92b551e38e83c906d0cf2aeac0c340da49e50382adfffe70ca85a76932e0dcfd0355134a258c5d880bb907a1075321228cecd8bcb0ed65553baaf918c5d1c772069bba4e2e872964084c2baccd94516e70d1fd4f058cb77779090f5a3f14c78c76266d5a129739d23084397814d34381711c381c5814b1594c9016d4dce550f88b1193cc4d0ce85e85b57c9b9ea851f27d03e02d24b53c78606041bb04c894eec826fb2861f7e0c1bffe617c07b19760f91a79268360446518a488496de46e5600017637a7ba0a1b7c22ee6ec564233997cc557c71c0ac354b8c29bce114ae00f42e962bde70b34a2ab0dca4c8b720754d81d32074b4077a0389a6ac890249ceca76249b30d2b0ec209940f0ee4f8cd0114b12d5c72d36bc300ae2b9ef4d384b6969fa0a06f4047caffe01311b56e3a964f58efe7523cbd282bf42efde9899d320ff72b4e90bbb20c27b7e4e807210121c68b38d941880db7326f47c040fcc193fbf9bc0a9b2595ca38b3039512a3c5ec9dec3ee7843ac1495c56da0d624cf8d1d74c8268277e097eabc8a88d52a26a0e512481b639a1be1c7ad75eb6432e66050e30881e456ab83717921968c48028ae26a4a8edb90096f012279b8df92038cbf543c4e2e49f23fe5e5f66d4c8e1f62f7172cd44654e6a68a6c13753380b8746216d20251ab671562da5e673b280d9cca283110e18326647a63870ad39d35fe905ac5f4021031e5d0387b9360a7f043ca2bc95509757d1b4d40db5d1b35ae163bfaa6620f429cb9cfa2f5ff05f88504f534c1a923b58d879f79c2edadd088e18455c7e9eb9a68f30ce728f7aeb869f9336f0fd37c4e6f9a617e758244268e451bb58200f095949bab72119158c636bebb945dbebbe356b76c58fd6a82ca264d92b58d880cab081151913a05cceeb2044d825fb9888e9c3b0f824c29cdd82e160ac44ad713e0b5b51864794fc91673f439a8d16b64b2afbcf9d9c1d79dac2b0a925830560587026bb148bea1b4440e610cab55b3e56d406f7fa5230ef69db2dd4e7d6b0bc900f2e3fc701c232c34c4176472fc658b357cd3dd01e420b0a409a23207931fdd8d95539fd4040beaa4820433936c79571f67cba4a9d27834f2cd9cff980d76d2e0e5e94c51c0465ab7e1e0e1b6749de211d2ae4cdc0fed1c9689d0283da15b91235510ee4b6fc86a051884b56389ebda57d31e80287f766027dff1873b87b2c149421331b19208a8b0bc3292f2353d7ee6b584c84509ef851e51561bae28b129402f5510a44485de57d886c4f3f50906495fee82a802a1330622a62b42371a17dc0759adfd613bddb832d5419c5611f64dd820b04010f315063b39f9dd9c172c8e0ca6671d7679d70824af9704ddf0fe9b417182140c83db6e6a8bfb3ba1dc746081a9e4c1a3a5eea79fc887f6b9ae346493169545a6926843159a96f6f99d51c8508b51c38210bcfaae6dad095b7722952b57b5d6594e1ca1fd2148d602e953a93ab9be09d593e4c65c2f1593b4f2c1f1c2e2b1261217ed5b55d2691efc56ab7d3caa9cb6a401342f9c794122e74447065fe56691f8ed19ad543892818961d73d195860884202e00763758d2ebb7d2679e723798637b5cbe03835cbe198a9a8f94f0c48a9d516e9e7a85bd4af90ac813bfa161954f0c4794d7b795534ccccfb8e9d11adcb6e817eabf0873b4891d65553aa313c62ee5fac30124d4144539755db08a464df99d66ce2b587dad5eb636c8572195153ad51d0db640f960956cbdb262363afd2aad34402854e53f82a2331c6a9c256f85fa402b574c69859f7bd845144b2f486771832ab31f7dc3343fdb5c46621115473a22910d800dd8c9a7e7c4c5e6c9acf9458eec087f9c5b6393515073f6252e60cc0c0cc5dc4970fc99e4e401a00cb7dfa6e726eae9254e7a5fa29e1ae1f4a74ffc264bbb5a0bcd2050c0efa5591708f3dd1940e5fab7892a66ff85676a84ee6faa4b086d53bc19aa70a2c66588747770007e590a5301970b0b2e95b48aae8ecf036dc5296f30488f6accdc2db0def24325aeb3a7221c5050e0c33ea49c30903e4f1d447dbe7aed87c68657cc53e55329237ad18d4abf2b0e2b2bde6cce7a5356b693d056fc6af0f10826b2ab3983f1982176e3e7e56e99e7bc922e29adb260857253174ece4186eea27fe0174a1ac167fb79876817ae351e789463fb4572c68f4eb999c6bae6312598b3d7d4de82e2099d2e45b1997e19537d1948eb0edda7cff7253025818c49067f231992afce00af173fbfe2cf007fbdcd5873d367ec623f192a59faa40a362f033cdcf3497fe3191cf0f8adc60f466c2a1fc1c225459a372b46e6500c69120dc8c5cd4af1296be9417101fe245ceb379ba35dc339c349ea5a1197de9c14c69da5d4e19e1b2014ec4b0c5cc26fecc15cf062f7bdd69737a59754e144eb1126d562b3bd02291ebb7523cff42bf1d142d8663a19c31317285c2f06969f291dc70269f555fd5d38d51fc2b2ccdc4ddb0a7407170bd8736ec3c305fa72cd9e1460e711a521960abd45c9e9c0cfabc193f420e78723638993b726629fe274637d12198e0147207a872d926fe637fc9afcc437ecd4482e0406aa8b2db1ab33aca9823f6f38cf0a7f5f92db2ce6dd6dfea5556f9242c52392767a15e0ca34c7306054b298be8256d8dbbb3b1493c287fc2740b550322cb985c5b0fd61c1b6c52abf4790c01f3da64e21e8dd01fdcc63c65cb9e26d7b440a6ea055b1ca0ea6778084e88708a6d6f4a6ec4890a63cf716dc25688301b0d08dc187cb39ec97beab16502c7515f919def5ccea56d35c80b14c14850baeed5e2acc66634b3df871031c419453997a1ef1d21d8b42412b208d430f420117e075892519bea38fc2ba00bb9f102f5e8a89146c0b2c54a11b67b145cf24f40829d84cdbebf7842e0605a96095197aa2d5833448e3fd4c9a337092590bbb209aa656e014103e40c3be7df957e8c45a75b7a2c4efa26bdc3d8033c77f1637ec14858d167cc7444141aeded504b745fe55591a95641ec4367d52e73b82c35caa606c8d8557bcd4b732aa52e75fe9923093e3c1b758ee95101a40077e25ba9300f86822fba56ed12500c2d016081215e87ac4fcb4d135fa68313be0b0291407a9c0b218dfa9cf070f1d44855a6957be40a2beb2997a8fb831f8bd4af42616b1573977ac43f321f5dfc8ffc2d2f92fa2c7ca5d480c00b6ea1f15317bcff3851ca699214c7c0809c4a96aeb8dacf7acfb95079112f75b68db516c930a00a9600bee7b0a4cbd64fd8307099224a084cecbe9808760df9e824c59b974ff435ee5474a0f26e38319b6901c934f5f2363e4d77b52fb071e063b4d17a0faac9b0756dd554baeed319219e78b9fa72782c4245171d0009326d79cde7f2326aa5ef57e9e246866bb3d51867e38019499a742204d259ba963fc58ff3339ba1b2f8f2201b4ba5d5e55456e2b270eabe158377821e85d1e48697826e254762f058d3c6982af29b041f050a7c06ba5cbe6a3f30ddc978584dd9382599ee33ed9d65cf5a6dfb5139e273d73ec8b208e1954f494d566c2e0ae7654ca3149ebe088a9077e8b6e7d8fa758deff8b0dfb6d3f62865eee05b75b2a3c79e91b5a7a4a54785fd00cef198f073333305382b9d1bc96820174a0db5d4b43ceed8388c4fd1af8a0ca1583566a3131bd2ce7b7966233c916573ba1eb0ec8b1018669a6ab5205845e868a7292083ff06a183328a935813d3d4498b64a5e2e670a66e5170a0c05f89507bbd195e5fc9009e0b62c7200c7a080e518196219879fc94f40af428c1190a4f57c415aca730189e1da0fc3e12241094a09080cee1511a96e90682c39f488171dfe9abb161574dfd65a2be73537794135cf02808c0209b65e1f1c0fe13ed20d61addaf3002325bcc27767cc706025ea11a9aa3418c03dbc299c159d05711a63d49b1a4d576c14b373e7e34a73f3bd7452150054e4895d42bcfc6a926d743c8f97cfa13ca3abee4524751660c1eb3232ab4fb474a77f20e99c8a134c8f1f3f3122136e3f1135b4ad83f9a92d28b9a99ad92e043fc01d5fb44219f42c3e55a413451fc72a5cf72284d22730b76a3fc1d2e861b8372a4c0cfe7ec9c586ae0433c627403a9823c582a8ef2fa1946ca60b87e555ded56b2739959d7509e6052551439cc6d19461fc1988c2e37951fc00791f55e5bd0a65d8997193a0e497c2a758042bcaa5a845c73ba919d1a09d1fcb7953e2fe7dee8a92669d5b9f543460d4e9bd64fea0e0a7ed07d8d4d9382a2d01f0ba9cef3dc678c66579f930205a54827925c908b66d656a79175fa6ee1df9eee4f41a243b1527eb04f1a837fa800e5827a21ad22a892e89656f256f9ae76383406237ff760a8b458f8f078d4d44d86ebcb62662c1203c395df37b1120ec399f31d34caf711907d20b45f7e903a0b32c902653b4a08f994c545e85a1191faa60a85af2c0c944c2d5c76b3b40936245206e33057fbd31398c6f49f3ee29286d827923b79c534217a1130b6eeda7cda0116bb6ae1633a956fd3a195c77932fbfce7614107d6284ade4afb35308e6484d349dfeaa44a33f7f1f92925a723d401b07d2e63905b069ab72962727735918322a28de61fabfda0f8d5d08b01a01603349f23da5103d27337855b466ac5393212e3797e45e9422368acfa5a3275311ab0fdbe39d936461570b0d6609ebcb0c6a83bea277a438f186e3df9c663d1dfb91f47079a6c96a80e1c937dcdc7432929e2e3a699156a0b0a6bf14cb919b381b952cfaf33bb229ad7877c2b928ac3ba7107211f3889aa1338b2840849970c3f4bd2e0e8e7587633eaa4a6f738ff7b45478c9183e0421fd9d91eff848af4ccf8fa373d71abfa30313c6748b488b5848161692aee183ee2ffe77d1fd8d7be4476fd980b4a70677a5cb807e0847d99a48a86c5e4c81f14667bb14c9ee807fe6ad9c79cab10e40b9aee9421bedcc8dfd75bbf51140c1bb015aef9ad716f7108e04896c76ecfdf3f1e41bf44ab7203dc07225bdc3b7e0e979ac8cc77ae73b2bf7d30441978763493bf4090b3d680229e77d05fc6c513ba75f38ef3cc6354f5e0f80399f895823a32ff140dd1c03663e429f8d976f314fad09f94e151b0ea97ec919b0140144bbaf7201885007fa9d33eed75d51234cbf77f623383f3836811da2af1eeb6e9d259458994fe0233022a139ec74612f0a64da61e2be3d81ea85382b4258bd1d13c560882cd77239e712dae3c5c203f5f54c29bb13125808a8f0146c71caaaff7e49bf250ed408d0f74beccc86b288232f05b7cb6faf9ff0635956a78281e50bc1bb749b1eb69f57e616cbba72ffbfad755155ba455aa41f810996c2b168bf6b2a566986e6788f995abc9bfda185d7fe270d689153cc0cfcfb427b1ad95fe17d06acd8312c84bac753705a82fd4ce443d255db0a235938b05cc0b37e2f9c53c4f5a0db4b34e3d6470e72fab5e3626b0d812cba3dd48c5a2c82a26a6999fc38b33cf23b57ecb3b1aadf5f8a08f1ebff0979605bb3d6fd06c357c0f7032b3f00594e38b7e98654069499d98077f0be0c161f778af89582ca0a33c0dcbb40a8802726af4076185e93f5d7414ac8a946bf8e13e069afa08b40122696907d96cf986eb8748ba6ee4040a24b1e27a1034624a39019c9efc2422d42e69e5d36195ff0274d7f30392537bea061ff99f2b723c8a575fe0aede3fe964c5980d742e0800637114a844cf310356515b23c5186144aa9c3d24a4ed2eac6d7ea9cdecb18b141cc1caa10f00cddc4c9d604da858ff016efd1a7b474e48593063ce1d1cf497d99cf72d8e64856f027fd1ac52052abd4363acc7dc340a9b8d76f127f1fe93be8d5f716e9e762caba6cc2bb1be715c28cff770b7b6f77860751692fb8b18227dbc4cdb488f24dc00f002a3f8010fa01683f2ea0c5306256e401416edef87ee58882f27317a4e4a2b2cfe18a0f3ba16ae6703ec7bd679c986ce7c694cfc3edeb15d3f1cce413e6b6f0b8a3f48ca4edeafa80f052b58fb531b25d28bc296ce3f8fca465dfb31776f2bfba4575e36299248459d49371f33a79acb0a8d25b8f4ff7b5a5d1614a5a719460b49c898cbbae04c6b5ca38d0a5996826cfab9b9d9fb9bb396c9b94c39592b26eba00e97f2c69cb78ea73c3c6934306eb3044d14f690263c4c60453cad40faaecb1be8540c25c91e88b7df84c4f27581364fb66578e95da780745d16379e3f21c8b40d5955f815506205ca85b904bc9bdbaae5d8adccdfb7f5c440ced8edc58fb51ccf8919fe474651b2016407d99f1139f692d180b10561ddaa24bd07f131b3c5ccaedfc1c2c65948c9b6ab98b94eb36c0404e2d985851cf2ef9187cb2c726d2421f989e765b920ac03c1b82c7826493a7687d8cc31ec27704244b3b08da3779bd030a7e60449f123c6baf658701ec390b86b5df188f2f6240f1e2874255001a6479caff15f21f3fc062a83214450070d678b51b593d8bf4a4bc560f2c401cfad393666c9d23a7c71fa7c08bf1c6275a82eaae8ce5f8afe067822b8198c2862d02e582390fd46b01c2985776db13455f9b5e94060147228afe4d90f42440b0aca65b451861f2318335b91fb9e2e0ac7eb37187391e3325116fd3474b4315aab1b14b3ab19fdbd40e856a2542bd66afd8520c0050d4ab6879e35bf97ae69f131f9ad7b4d011945c9fe9879e6ce03d6fa4a5548b62f77a55b985673865d896e663043d211b60f9b74475ff25a2de086f60e327bb7d2fbc125d6631ce08bfa84863cb0a698c308f0cd465ed89e847a517068d85dd904849adbdc2c8bfa3b6206e4e79446b32e509f563c1f012a890a82103866850a89ec76a779d97b431afe25f87d4a78d5a46aa8fae40f05885f54e6c7f064ea1f4ac8768f7cb14559b0ea443a83721f17d0d3d9a793ff5d496f92d9acba1b4af0bf5673d5ad02d9cdd88f3c37cf438c47cc4750046c9aaef3d7a945bab7e59dfd1851c0955c86690dbd949cd6d502670d28ccfc8e51f3ec99a7818fbfe9bc844d246f1d0cc6347400f782fec0c046d3193cb2fc6fe17b9b04c3f275223ee5a6da09fa8a47936d3e17ad4f1153bd5b6ebfeae88d77418612c1e7745624049cd2d52865dfa96f6e281231f0cd7c771817404191be5017df85451b5d25bdfda5e0c9592fa3dae9fd13eed34cc4ff03982c7f239480fbc1a8fb71aa49b5cdce09695fb290a6f23167799b1f8cc4f9fba4d01f405762b41060e234615caeee9ea3acc205a0d2549dfc499864dfd32512d3526e6425157af098c1389e1013add6663bd02aecc8eef01d432036a3f9a7154209e15a7036dbcef26fc11789c17f7731401a8f476605c3c3fd349829a30a7e4b4c227c9cb047b26a5d4b05a072044c8f579f176529c6d599c0b100efce912fc7f277f057eae61131112d2f6de7bcb2da59449ca0907d906ec06b469d3a6dda53aebacb3d64a49d1b9cad98e7acbf4c9bfb966997780393bd4795db76d9ea78352c9719d17ca24a5234f47ad225177b5181a558d9524a97025cd49f18ca911b513b778953133655b16aa32d79c33d51652966524539d9444fa481dce7865e883cc9a864249da61f932577a9a57b0a2c94993a718c825442ae414720a6ba74c526712fbf28a02470f1450e08802c9ea080fcf4a229146dae58edca9e1522591844abaa0d0f8f04103c549a8a3632b8845f3e0116353674e4e0b0e1c2d2c25155cb5aae38ac694634c2c2515a4f4ebfab59c5d3733fdce56f0cedc747a8dd27b02508469b6fb1d333563b2f0d62ce5d9fafdcedbb6dd697b8b79a5d91aab188b8366eb2d99dc6ec1ecfabd60566b9db566d7ef056b76fd82d9cfcad29659ed96d01486795e4ba7a56118c61fad55b488f27962d075cf8916cb12e8e37cc7c639f574743966f79973dfc2aa8e4146c4a01814832614fa47fc5cf2fc9047244f4cbaa238098ac5a01804b44af205753803dc8a69efeed94c72ff4c89e48b351874de3beb9db5de7c2ba594d29ad9ccd6ccd6cc56aa6999adb666b6524da334b335b355cb6ca5d35a2036b3956694d24aadad34ab34b333bbd3564a69adda46b9ce0b897066271685bc8ea39b562fa5b56a1be53a2f24c2999d5814f23a8e6e5abd95524a29a594524a29a594524a29a594525a9d524a6bcda8a579a5a5526a6b4629a594526b2ba595d26a69b5b5d25a2ba5b45279a33a9d2e7dc63a1c831c7285c8cb43075ce401074d6f01db7513829b1a6712051604e424f63181c99ffe96549d1d6a35c9f0968c5cbd25936bf59cbed951a2830b8e564ccaabe3b6096f64bc7ad83630377fe3372f5edd7b00d4eb8c4b16386d1b1a972c005b3efa253f0b3f006ee365b834f2303ee301e032cf83d3a7e1335f73ea779464359ce681841ee466957332de86c3bc34b282dfc16764397210c0e3eb56d70e2f57e0327e000ef3371c7c1cffefc1631e87cbbc009cbe8dfbaffce56f6a37f33060e0d6cde14b222ee3a50a1ce6250a7cc6cb1dff97453ce6650a5ce6e5099cbe6cc2fd577ce6c1cb924e38479fb2a40a5210659195974e8802a0451bd265131205a14481b7dc21f23e1494278835eb66fef3132758e82bba61a82b1a96b9a723bbddccfb1a66fe450d33ef32f331b20e3f8f7438f32d33cfe2792b6ccf9bdef4bec0ad9b539f84873f0297f192098779257cc623e1e00ff17f211ef3d2e5322f02a71fc4fd97f0973781cffc4aa6298107c19904ce659fd94a69123f826f1220715b32215d2f83840894182264091398c0ae281144c63f4f8712324fb3d7720948f036d2909ec48f0009117c90abddcc89ba99473dc121e82f5b41ea66de74e4f3fe5ab83f33cc7c2977117e112ee38f70980781cff896836f84ff77c063fe87cb3c10a74f84b3bcfbcc9372ea77288b7334eb240bc8ef28f1f101cf3ce05cf6b3f53e3cf3e19917e19c8ba7a308d006f651848fccc5471147fc004168c4033942882b1b41f3077c14d1f20011bf13230f4484b858447807fcd4edf01a7019bf0187f91e3ee339e0177819b7c0bf57e0639c024fdd3f03fef21870f0639ef9918e8ea77e27752f2c68a6ba5f33d5be5aa95461e8fe7d18df9bfa96325f39f03549875174d8be81f72912b2a8c7bc4f11158b7a7d75565d2e980be69aab954a1586ee41ae2057d0bdaf1e1f7bbccc4962d48004ba30cc44c61833f07162e063d4f9188fac8ca8e44e188643f99ea83451517997abcafc05fcdf021ef31570fa14f0d44f56f6e1c799c7198b58934e831aa04409a377da4807b58d76ae6136775758c4a1b95130130fa6942973536ddb35ec74f22cf3934a37f3a2fc85990fcdbc0786956ee6bbcc45f842b88c9780c33c0f9ff11170f01fe0ff0ef0988780cb7c104e7f02eedf007ff91d3ef35cd6e17d18c0802186a8f762fc7dee61386feec5f8fbdcc3b0073684674ee3139071ea9c0f4133840f11a3dcd8b248c92520f3424420888f0d011e1ffb011fbb011f7bc733e081623bf9624c68b2966ee6b72d627433af655a86f013e0327e010ef307f0198f0007df07ffd7e131af0097f91ca79fdddf00fef22c4ffd8e12207e709a2f80cffccd5c02fe07cf7ef0cc81700ec6d301046803ff00c40f19cc0fd90214f032918674207e480002720ee0838e8fd1005f00d6ef442a88e8b8589e5bbad44b16ccfba4bc5f210ff9eb8aa0eac2be5aa95461e82e9241221914f47db8ba464d3a1483a4118658d39ee3a76b1240062cf20286bef2577d29908224e75a0620001c1f258d964c967e03a787d5cddbb48d963b40b270b342cebb99b798caf02e94f1363cfcce35deb3f7a1600000f031f200a3a21163a3e5e14b982efc9ab38f15ec68be614d3307d3cdfccca99ff9ae79ea847a4d6f3b78bbce6aa55285a1fbf761fc7db8ab42f6bc255d319e6621a39b799969da535fa3e8547bf8b5f6d41cd428c294a723cc644f8a4c37f331533184ddccc7641dde2786a7bec3318e0bae4efa2306c5a01874e7bd187f9f7b18628f3156966ebe5c388e7edb42cbf87d28ec66fc3e99877e47c9c8431e1f087692dbcc396ef4d7a38b44a2971859f8a78f755146fa2037872cc845d2c78c5f66966ef459697af63bd34b3d3b623189730c630c837df7cc9bfe89c562b1d87cc56c8436f082adda13be5a61131cbbf8a38566b342a3b75ab8d47c3b8f0fe47a909b459efd8e92e89d6bbf43e4650e7368226411917360291939779f8e3abe8fe7212ca211bdf3b228232bc6f8f3d5e11434732f337b37f2992e7a9feab42ec9ed40f8878adc8e6b0fae4870e5298271141c8463302630182ccaeba77bafd5eb65236bd4b1273179830cf2c69d319e0e0cda782b6944e7a4ec58d47ec4da7e461f93f1fb5417bdcff4d03bf9019a2f18911f3f5e950ab143a4903a44662d1ca850284d9b746a1a0a8542691a0df548696d9a2b6c5da2599b65999cb7b329e7b556ce3bf3f42cb3f3ca79b3d039d3cd51a571d3efe5ec9c26db695fcb6cb9d35b2e136cddbe127f96d3a64bbbb41b43270ab598ae9b4c2651cba98b4cea33f3e964c62693099baaa99aaaa99a41336806cd1f2a55d85152bad5e7c95b599e36e2987c3afee6cdc8a7cb90913744219f4ed336de0d77b3ddc41b279fee3d00db3d4c91ad7b3097de47fb585a8cdd2cd248b24823fa95553f933ed61dd44ddae6143bf92946dd3392ba86fa529154ebe292d3a0c59051541ab46d5b4b4ba668e89e051602fde4fea25bf1aee4a70fc271a6cfb2fd2a3575acfb76724b4d22ad7c36bf271048109c4f6e72eb9ca33c1da10d9f9eb3a6d772c9bbf7d9eacd2770ebba47e558e97d3e97ef93f2d19414fae518ee2613f30492467be8e74e87ed5e9b7266838a25cc29baee4b45b62e30299b9ce34a3f3b6f1f592520251ffd8e92eb23e7e4cf785d7e9f9c8be1e9389d3e99471f59b134227d34dff721f9c9642a8d4820b779a3bca3e4e424f9f5cfcf4fc7bae4537df4d8bac83aa982758a9f58b7b76aa6da572b952a0cdd79787854fda3ea9fd047954aa552e1e1e1e1e1e1e199f1491f89c2081472e74818461a4aee18c7c3c3c353fa99491f59f7f404ca64629e60a78891239d6a4d289af4748591bbc79933bdad345322ccce22de58efa1071e7848a54edefa983a75ed2c4eae69273f790b95e5d39744dbf60553e8e48121a5cba5f7d178342e4a7fbd7b2e9f1e899b4d5eebebc5f3e279f1bc785e3c2f9e17cf6bdedc8bf1f7b987a14a153bb9897bf174984c2fae1965254314f2b84da3b198e904d20e65f7db16282d97dea7d632dc4cfa1d259d93ae93689630b774a59c58d4bd0ff5d21d853c6e45b2954656959963e9bacfb27c1faaaaab954a1586eeaaa0ca13547982eacba77aff34999567feac96a85e6112eff9a2e0a0cab3aaaf8682792285e576adc66c4c46ac99a290b7694d6ac06595baee6d5ea2c50b677a1a3a6193e964a5e96beebe9abe63b1a69bb41659441a3473ee53c47d2cd87de7d2fba464296e33b78e5b054a6e8a24b7c35640aa9f7089bf3e15cfe70a9a4962df718835eda26f39bc8d50c7e64e2c16937509758a4eb59f2a11624d7b95e2256f98bc9d337de73a0479e3348529f474984e72663a86faaa1f599d8f8dc574a5f7c95cbe0f75d2c7410eae56c762325704890d23775390a7bbc116cd9cd65585ccde4680032ed2d0e46b1a0a95ca660beca63132de78a5f235fb1eaa563d641e521f2b8d4fa050f0e69b5fdcc3a7dd6fdba46849654f5ae534d9ebd40bdc61eb736a977a811f9b9ed64bab8daf6c09aaeeb9efeb2f8bd917bfafb32ccbb22f7e5f675ffcfafbfa935994d917bfaf3329a594d917bfaf65f6c5afbfef4b85622ca8866ac74cb598a2ada62cbb5966b3eca3c9becc5b3b6429d79a4c38259a52b42e59a1ea5ed35028ee350d85dae20df6f0c684342a6ba93642611cc2b49b157718876637b78a3b8c43b6e20e8772df8e8e5061b85a4d0ab4029e6e0303a8e715479c736ebd7be35a3aa66d623a942d9d92b1181326ab55186fc2215dee709c60ab138136f014cdd0f45c7a3e74ae719a736f449735cd63deb4a8c58cda498f642eed95d6affb66a594525abfee9bb47e7debd9dda4f3bab4f806c361bd2df7badc967b5d6ecb75e90d0b4382b4ba6cadb4db6bbe79fd5697ab7354cadb61cd32ed32b5d6facc3924132287c8d9465061f8a1509aa6a26923548ac88442691a49cb46dbc59cd6896e739da7634eb989449a8642a93a6e43a134ed662294885e6df3b08f90d9c3395245410650501faa67480a2a3246d350a8147a9a265a8a38248a44677a699e6ffb0099db5186af48db3aae9311a7f3dc3797965eea5956927444a5b4d4affb262df5eb9b68a5da383cf2f03aad25d3a9eb15297acb0cb72a19311128c23c54699f335312f67306c7e2e9b03643a9c21934aa96d58c2a2881422545c5948393292cc89cd7cd27c92073a16efe28d317e12073a26e3ecef447afcce18ebe28cf173d2173a35015b0cc91bcdc5ca99bdf65fa5c15b1cc99baf95ca63faae20c993b75f3b74cbfab228ccca574f3b54cdf2b923915fa5b0c32f775f3b34c9fbb41e650dd7ceb83ccadd02f2921732cddc80a996be9e6cf31642e46d75f64ce85722fdd7ccf94f3e81f6a0db9797e44411e3265e582cbb2a7d9d7614bd992d4a9a42da6ceda2ccb325b77d01271549d125fe7196e53db7047646ef654d5b85d95b425e2cc25df87634a7aec305ecf47e8fc642aa9a4d2e572b96231966987d48968c520ead38990aed3a36d6ea6ed04cb9c23e248a75378421768d0b48215f0742e5e61a26e83a7c768038218522266aa026d5c8ba680f21ce0d6bf1904d4659299440a21da502762489d4ad74c5127a24d8ce1139295c44c51fbb24cdc0e41de4c26d3bee48d76653ad9000bb2020a997a94374c929065122be0964c526bbd96566badb5b6d64a3d1d96c9bca14c444a2910d95d70451c974cfd6ace2303a2434a8d509ebc632d92b6d1e9108a88739d26a1dea24732ed116be815997a04b26e7b449ceab4651d01d62fc81273d721edfcd29b3d7e6ceb762f4542a9eb74383d1aa8e8e8d16dc05b928e761b883762648f88639d7acebc096f16236fd01a441ad4a9cb035b329972e0066ae0972914b186ba7c51af2eea340ed1c64a4fc488e3f940c564edf5616d8f0e6d8d7a020caa3a4ca26dbc438b73ddba8fde3153d6ad8d35d63b532260cf4e8ebb2d2d5be721e7ba6f09bda9f396a9e3b688e312cda086f806696f17d6eded74c056909a37e79cdbde6ed6ea4c1108c64fa3411c4a3ab21068ead0baf72d53ee40ab69ff7272e0edd06e20ee5014a0f081285a41e47ae61dda988893b97519f1068da461ddfa6dbdb43e4b236f2c1169e8bc78606b87bbb5a96d34d0631c00f9ba6559cb23034d106bac338185684517cebc7dd23860961b73b4f6b443eb37663af326b29c649b59eb31c66ed20b92b27bdadbdbdbdbdbdb3bd6b18ee998a42489b86d00d55b8ea315a3c988389e4b9791373aed613218601efdc839fb94656dcdcd46dd9225c2ef53c1cf5c8ce00d7d1f07e3385874cf6ba82f455c721a6e8c4c7a22d29e25ff844bfcf57dc1ade4f8404c0e24c80d8233c9398e337d16638c4c48a28e35f393a783cbaa461ad518b547e5487a9f149f3f5352e697adf03aee1b4a47e9d064ca4fe83ce282620a2440704551246a5fca5d60521efd8e8d9615252b3e90e8416e26693fabe6f13b87aec0cea134ac452d7eacd1c7de6c1b29d9ba46517bbcea5df5fadae247ce245d999d8dc511233b1d4643e927dde456d7646d788431cea1266950436ee7b61bc64eaa4adb9508948371300ec6c16a3716e28d8c9c73ce89be600a81e1e46557d76517175c13ce1ab994684ef238f21ab5182574a94676360cc684098ba4fd166919586e1efd8e12527c20263fb9e969d63cba6824cd45eb5e46d2884e7aedf4416eb6f4f4318bb2bc33f212f73e232f7dbf64d06b954425a5743971c55c5be7b966aa6dc416fdb9b0cc362cac5846ac891efa2e3ab7ddccd65c6aed2d4c0b979ae303e93cc8cd9b8fb2ec7a35ebae635176abcc59461bd6576874e6d16bdf99f43ed34b5f4b1eafc9757e564b54af3089bbc7908cbc2fbec22c2c82a30a84cc358c933493de07168a3c2ffa0b584cbe1fc5d6274e7a5c0d6b217688dc8e7882137c6fbb04b8230ed031e627108e3f39aebe98a36918384a19866f85e7f476823d47c10847720be728c8800a3f3b5801145c8a4213463623aafb987398430ec3e7babcf4cbc29cc31c76a0dd2cefed95151269eb2cb39890c601b7ebe897524619250da7654db4b65088e5fe9264d923633cae55145550e8c4631f130c933fb079b15b1150a8fbd934397a18261d18e07ccd25db656dd95316f731f2b0451bd17bbee64dd7caa29f43bfa304bbe7d9ef749e39e74dd67dec4d5c9692787fbebaee58140abe7e23a52c8eba67ba86fae252671a6e0c91b6042a5a5a3245034b5e319ddc7e13ce5232f2f84048d783e02c728ee3489fd9eaa4a7a49fd9d41d0adde89e6ae599e97d3aed89bcf80af5223c65177ba4d7f2fd1a6ba28b4ea6f7e9c0ecc6481a3d8a3e4902cbfdafefcbd40a513737539e57740a4a0e23b7f791224672d39dd19798745d6052b3ba791fc8c88368bf53c459993731fa897df49daf47e7509e8e08dac03862948fe6a6ed399a306f346f9746f42cc618a31d65d1fb5891879c7ac77e7a7a7a7a9a257a9fccb7efa0f8b35aa95411e31edc837be62bc68eb823ee887f00dd18a39d4be83e02c5c813b9d3240c2ca05cd1d19b5091bb6fff748c1a2b248a388445a79e5051857cc54b8afbbaaffbba2f29eeebbeeeebbe5ef125c57dddd77dddd77dddd77ddd9714f7755ff7755f52dc8823f39daf3b5f77be5a2551c6efd3755f30854e1e0c0c295dc6efc305ab1a2a9a3046b4e5d6b49911439b9814128d889bd9cc8949cca923040572809855de1022ce883645c470d2a8721c4785132ba287a4a1d3847b994316d58122a224b9f47c0879cb47e63c47db90c096295b1fa3c7602be49bcb1f594e4066a2ced3912013404814c84430f29c4ee41972f9a11c9e4f370017025b604b7ae7edf9209d1b928bb82e7dabd4d3a139f51070410a1a40d6961235cb61c1d91d8f3739276830d7cdec34afc6202c450f70f0046602a700bfe007e8081203643c84d8517708513f27c78e7973ef113f52c04474432693dcbc027023d7fa2328b28274388f64f5098c2bf823d6dc1cc18308eeba1f1e0f22d8cbad1834bb4339624dd732b7e24f38399f5b563d47c499371cf8439b59c4d5d533db5cd0d4a6035767a6a6bbf6841ee02722ac07113ade5e7120c4ef9801d699373e53d3ef954cc8ef893cf14c419ed663cee41439a6a61bc076d3caccba5cd2d58168a3335d03f16c49572582bb1cad7421c12d8f517a941ea583cd7361c0c5b61122466746bbd695640247ff5823b3eeee39b35967fb056f0c2728b1483569fde89973b75eed3698e199927ea91b709c138c1ddad6f4f6a1cad1fb636cb075b52670944e4a5d8aa4872a1094edb31bc4225b5fcee85c4bd931cb0e63ac6102962d8f32c6ac0a6ec5634cab5db97691a5ca1f16b01ec1d67d75a37af51eaaf7c4ea2b0e168a41514c3e229148a3d1c89768277964999e65a5542a994c265f827ac923abf3f897c5557ce559aad72f6019a5c3b0ba8bc79041b97a908cb2127156bc7a8eb963de805e5d67de9cbc86a1fbf72d39430caba3b0a7784b15ab4b271d56ff9c5b797979f97f5fa2fda503dd1dc683003d067418d09768778f2dceb2e2311e5929cfb202b23420c5613c8893c79c1ce6e44b504f59f1d3ebcc5475f077cc54f5ff1c33553d45e5fe22cf10bd4e276d1363f87918ba7f1fc6b5575cc018a04cb2d2b292a359563cc75cf9cd51df4a65f3a1e23ccfe3a473d2395fa2ddf3c80a3d4bf4148f2cd1b34490a501223f7910214f0197981ef213b884121ed34391c549cf0789a3c3eab87af7d53553a9fae8ab93be7ae8bdaf1e5fe66f56afd57bf0bca9fee55abde28facedb50bae624dcd400c5615e01853c122fa0ad9bc2a32ea0d4ecf404a29a54d7d76a519047281502203a1dd128ee20869fcc64a3f3a06cd0b411e71a8ffe4f8a24d763d9e22ce6d3d665d7dc61c92c62a9434da03bbd5ed5b7b77777777b7777bb777f71972cc90d3458e931c2e72b6c829434e931c2d72c89093454e2c670c3962c809430e163960c8f9428e177298e47421870b395bc8b922470b3959c8c1420e2c8701390bc851400e10112782ddb8eb80f0a49a4f30b6942da96927c0d4638db4c1d36fdb68606be0ed7639a3f0c8905bb8fae75c148d543efc695aff08f22362116314689b16eef12308eddc872a735ebb70dedc1b06f18921d3b8456b080db28d38d7a7cb27224e8a8a4fb9c40131a42e7a564c512b3275958f26ef1e08125fd67c302408ad214dc8163b9792929292f29db9daa5bccc9cc7c3096c010083ad0564abead474eec3e761e630e220f1a5e28dc9a7e3c822f41071b2f6128ae9a68f02e7822a25a85e68248186cb0e48d82146cd929a169a23d0b0cc186166458722e8804a4d91fa4222842a3386302345460a99938c970c538c10624a30418021814ac0d103e1b1ffc0452f3e7809b9f4c0c58b912446d7e2d3c2b1f080655bd9c18a868a02753f1d7c994a0e546c0a0e52b27589e4247b4e378838266ab241c429cd520d220ea949d9ba8422e28c620d7549aa9e0fa36cbdd6c81a10b9c7659279132397b40d129aac699a8b1edc4101cf4798c0079c8ff891a5ed7ca87ac8e7d1214744db10116629473fa4df2742a707c77a843c04ce177c33306a9a4b0f9448b4c03624cd53334295399fae53b98ef3d97c6e9a04797437c2b84b7d47dbdc0c9c2d1f3649219ddd14a028cc000dd205862642c4300bef826fc18b584426110b556428c458215a61d3c5e9adf84357384a246f7998a384e500b1c2315ddea05185f2460d1eae8a9c0e112726a00580dc4e82428e59c8ed34f2060f558d21660d9918b64b4f01a2dc1a62041f72751944ae2e87f8cea2ef18b64f21b9862c573bce1992116bdaa9e7838c5c9d471a72f71788e1742ff2f4bb459ebe239a214f9f518b8cb32a438e8143cc0bcc1b605c403780313ecab7781b9ce5850d2f2b2e60b8a0624089f1b5aca14585450d2c292b695839a18250a60f0d5f49e50b15528a1729a3d39313369dc1242a99a114227541f2464e461de60273a22d445ba80c21cd6be2dd4e8b2ee3c8c0d93c63165bae2e44dbd4dcde8a312d57bf40c4b9f4e6ea168838d9cc72f50a441cdbd5291071aa0b913df57ca8b93af5508c35ed3f73addd7648a8b1173368432cd23b3da6c3d8c5664f167025244ee4d64783f6cd67ea900747ec317a61064ee4f618d3607031e2ac1079c9f4432dc82e50e418403fc8dc6c49426681c24aa6bf01692173b69b8fcaf43da030642eebe67f2a4066c829dc76028243e6b86ebe29d3dfaa2092b9ae9b5fcaf4b52a02a008a8344d5b07ad6388040001002000b3150000200c0a8703a2915844ce145dab0714000e659c4476704013c8c22808511432082162080104c00001909199996d500073f409935c99e536a9fa8cefcb07f707a57c4fe448afb7588ab9f2004f7694d049e90b755a0e4e2332a7c7f2da706271cb056cb34e8a37ffaebf7c48a384f185b71afa9a9541e058fe5229a802472aa81c2490c32d68c52066bc6615c70fbd53f0467194b7bf0a59e617ce201765ad132181fd2ce51ceeb0e6e9c5bb92f306c9bbcb6d4996aadbd3873bd97c0a43a6fad24506786ef68387a15b6c8609ce53f9f0df467038f4c372b822e9468634ecd6324fe7966fa5400cf9cb86011575ce9dd1f32f14c5104531d9bca2000439b73dda20c00b8ff0c40ca0a6ae1f687d19de54b2996a8bc1645e51e98bad06d015907e149eab3b4cd7fe32289f8eef4ed70f445b0eba48a61cd2727585b0bea0e940e79a0ed184cb51dec652be7fc874202a66b0599d726b63753fa4959548cec05d32c0f5237ea1f06972f0477e4174b429db4a3f46807ccfe9a3343ba840fdf663d854f8ed94a73cc80655f7ba8230ff6b4e4b2840eac01f68c0c3969ab7df48b4e293cc32b122f2a0d49d6cc61a24be8ec5fe14eea2bb0ec7ca377afbacb56dcc4cf24d7b3979b157186aab0cead2f1a7068edfa196251b1c6364ce98ef6f9c2d2fea8a5e2b9b92c696d0b523fac9a641d1b5100e38f0890b68909711d22adbc8289ade4a06ac00db296498baf6c3e574ff26e1021eaa1ff09f049c109a835c7e9bdaf76b2b6185aaabbd39cbf99166dbe6a0abbb5befb40ccfccd17d37065353f498a22a6d0ea594333c38f2f6d670488e8095a72f3fee9cc314c1c75d8e8ebe69a173d05d90ba66cdfecdf45f4434d633c28a462a20246e4fcb6a9fe9b9a625cd9337e385e676ee07552f8c87b4375c5615ed9d511cc30b6a9f231b3742a02a1b0dbc7843f023c3a6e9266f641939319d97fda83dbf65dcdeeb5aa59e3e4891aecc9c3cc4426adf738c07f4a9f598c7dc95d42b89ca3ab4e81babab9e55689ae4e83303c7aac23d02bab928dd6e003b15356c2d64883b9d8ad317f74625f7f54963e9f107261e856e713e9473f94f92a92477a1e799b94001c519163d122abb3d837d7ea8714ba06c41eb0a6ed745952670c745722c55c2f4c91fc281abb310bbcc8216e92b61f80b5d6b3031b621ee92a4c5a65c3dceb121469de66b9928aa29a9c05225703c8b0a5dc43eedc788a680b8ce5a22bbb446cb82f4c3526c4e13eaca755a327c557c6adb0c1f13eb32dc4e55bb9362877aa181d3e05ec6f9cf06cb07aa408f4d1928811364ba7dfe75e9e948e0074e6360320752f3908eb99ff09fbaadec91569c4be9c45ae8206423c6b8b9bddc980a6cb8466a93c3e0994117dd56e97313c4330c2954d0c4e60e213ade23517d356d7b6e69c277530eccb4037e14d5cbbcd151eb156c1e5df3e72ae532dd09d75054e3f706f130cf522284488adb728c0a0d26353e96377b4df60bd5d47477209f05e1b221d5fcc9f411996173b9e7e7680b50907e542b1bdb126bfd738a4216da2f0c45d50de8c957ed2227c30558fd03b73229b936dd30c5f1d3e39e6da0c492864544208a5844b5946699935f9992bc8aab712ae16e25e858f63186960a72ef57d6a234904611427b59dd73384b610891e64ad835fa936babe80f69d414f8f77847e6d687970b04cfd1fea6c1ca99a097bf62863613199cdd1fb22c60cbcf7bdf8fbf2fbaa6cd40427fa949af871555ef50904242ad4564eec59e142e8086ab00399d20b9df6cccaca9347218e2363757331bfe955e4392bca3cc194515a2553e42bd2beb129310f172e642e81472a12289abc61ebef123664867ac233ac46314fd1e214e4539458f39149211546e02acb83b500797ca2aebf0718768e66d34e7ae971372b6a2b032e2a3b496fa16d280b0d638da989588328fbdb80e38f4dd0fb9ce0b3a167c7154e688d27a7069a89d00ea4bbb5a7068fe0ba8f1f66016af2ff0bec6d6fc2405b39a7e25693956d1ec1e9d08008a5da829c5f64012403cb4c91face1d6849c95d7c4b3dea94113ac58f9f21bc569347771af49d2cb2f20d3993d55fb3a08313051d3accde6b0d48c527d09ea8bee5bb092ada5f5af0392fb460fb193bd48a55b89436925f3bbdcd76d6128a0bbe122f8897126f678097ae8ee33de04e7b74d47695796ef090d83db65c50f7d0e52dce379d34a6cb5674cd486557d6af46fc91725c48dff50ef52d91e762585e202dd66d04b4f2972f0aa6c649aa9ea5c067d2896b4ef13a99c57c6856326fc438b52e2ba6edb88cbaaedec8041605c1027d9a2ac638135d497286273d3e348f1cb678570db62306d0f32cbb6389863a3ec79063c9e2e69fea14215344452dee32d21a6e4330bb3dee2ef6b397c52691deee71f3ed072651083e390a15d1a101629841d67255a1005cf78f11dd4ddf4cd21ab4e8f13fa5be1ac8137054fec6b3e2f66b1739a7585ad0d6f2a09269328ce454373107ff44691a3da4f6b04d660f4f106c59bb223da94e425665cf75c95887d2b1c9cf3f9ddbe00c72c6218c8458b594c61f58b7bcadeb52d088e714fa9d904d03567fdaee49003e77b9230252fbb803f72157b07e4e95442da05ffa75cb565f7897381726cf5f934f36a8d850d0366b16163cdb8c4d3d23bcf4bc01fc2dee291f150c7c6be962fd0a2d01d22e815dbd18981d8f3385893c109a8641c6df61d7ecd85d894b5fec5bd2fe80b1bdc2b5c34de90ebea13ace1b4f2fcd05f41b1bbcacc1f22ea1f15c1b1ca4fdcf6d1d958ace058a9e4c4c63468738a3bb3b11ea5723129b16c993e437a2c428f9d00d725e53d40eff754330075edea86dfbac627ef0889e01a8576b5ab3741787fbabf60263786b8b0ab2e80bb8331a5ed4df6c1fbde9564d57dc178320288ff4d59f08537d72a8160be78248ea46515b3aa2ea96f75836dbeb7e2e540efbd10ad50cfc20bbc0ba28a80de461c754771c73b08b9a9b6730f2656c392b59f77404eb2fb9583032da417941167767519d324f848f0acebf2b2563e60a6f40712255ebade83b1b4a8c9ea2cbd77ac698636c6955f1bd781ca6fa2c30be0b479a7f3f0e4b90b975e91d68ce04c217ba5d6d52293f04add5cc9eb404bb8f6867b239074c440024f26d6617547c0a198fbffa49512894048a397340925f165816b537dc61135743c0a7fa74da6e84434bfac36ec04a0ead1e573c7bf9066649e12efd35aacba5874931af0b0fe2e3a2745fd00fadc5c84d7454cd2c00f35cd2ae5b062f3248e22c0d11f544aefc4041cc244522927b1288d50a5abd70a1d412b5d7b9e9708ad3c15ab10d315ca5dba1092d6658c4cc301b7995aba0bbd686f0d292f0a9f80dacf0b73a4d7cb88c2bf6f0ea68b81ca18d57b1cae938df09462197aff2be1a392ea743269beaf37cd6e47980aab22c3b2729a8e18602c7203a9d7b2bf2c307d4d58ea40875dbfa6e5b9918b3a723a14d200fc87c894be7ad80c75f9a7b39d91ed31f09dac8ab5fa14f4fa2656c55a3e0afa3d9315626d9f42fd9ec92af1b66f516fcf64457ccbb7a0df63a22ad6ea5bd0ef3359156fbba16c28bba1f211c7659c4ccda7c065edfcf44cfd5aed5a848c6b91dd7096c20486c4c6af48a449c17dc07a3c6866563858e451c0a935fccc2625445b2babdd61352c7fd455c101210a9de6da8a6891e880e91f42f80a9bfbc693f6a9da489b703eb2bd6ebccaef9967a364c56e30474d8d84f62fdd2f7b60da41b76a05958e48ab24bd2296761526046860d4561c45f6c8d965820eb4cd7c09f45c4ad9e509006a843979325eaeb6f2a592acbc76f11f6ca0efc5c551ba3aafd692a8bdfb88f3d706d9004151417d3abcfc9fe69822f1b5a12d71ac35fb3cf297a8213590cc1fb7c00168921ada954b7645815ba99def2ec471e7a78f9478f9d2ecc3f0aa56441cae3c06625ddb55b3ad5e78ad0ab50b8d978222facd7f1be77efc589936351c72b730c002c715526da04472b1e9aa772401a2130b021bd566c02ac93ee36c109d7045bfbe70dcce15dd845609f8f37547b645c36bc639c9fadecfe257cb576a58fb9da8ae6863c39155a890bbd0e8a229f1998fa7f2708dbbb9ce66c471e5688efb361a8b1344daa2e4263c4fdf6c6e5276e0343c715a049be36278505a4c63bbf44ed7bee7f31b88fce46cf2e68dd624979d30ea9f35937c5a261898b9f8d4f94a5344610d32b412eba96c6475106bb6bb2dd9f1098fdc642b5c2549b4f0161a7a89ed7432673a8815d39d26edf80cc76e362bbed0095a780309ad88773a33731d85956dee06a3e03ed905ce6ec1046eb1074632e578949a4498681aa846376ce50b73f2907a7bc3936d88b7ad332c29a3c6a16d89fc4fa6ffdd555d38c641f4cd88f6f934ba701923220aad225981d90e45f7d7d6003da89b8f87c67a3ebd89750f2b80433ad108006975d4a39500a5b56239d08f335fad7a8435139274db9a1c813c719487f7f756fe4b104ef2af37fcdca14e3b1be6af021f6193f1065e530e0b925da26f787b197651aeb3400dfe3d2e1e40828a2e1cef169758f33d864958ec17cea44a224b09b822011b95c44c09eda952754694aa8631c2671c44c55dde73ac12c427443baed6bbb2d3656346115776fad7be77667bda610a7d285fd8e741826e3fc078e9bc6c215aa2d9669fec77e18aaf81ea25bd11723ce0b1c294b8a61f107c91e5841e1d3bfcd8032e910c343a5e239d292f54165bd9eefd9b5060838c3e311814fa65492128483a305784d293d56a4a9914e8e2c1ef21f413fcdbd96b9bb8f763816e5249b4a60cdcaa3eea9f032919bbf818ead7da2cab19dd1042bd1df13eabccc99ab7e5578f19d6aa886a3e21d107bc92b95d2a992d61fd529967bf7993c9513eeefc6845acbc29739e9d5bb69bcd267f5ce3797fa5e836d1541f89e2e0bcf0b84148e2da37cdbd30e5c0182b4052032d84ade71b27ab0260f581cf5b9d0d9733b758baa6e152b975dd88fcec93178bdb2976fb31565c33cee572ab8b659aafba81730035878a9e15c22bd192216f54e47e47a530239f507e62a223879edb038156a06fc793b6adf6a20822aa20b0e9ea632e4ddca2f83eab6bb18a89d64fbada1f76a5b28fdd4bb422f467ab0f5042885f40b499a4d156652e97fd4f0819295296ae2d15942caa28c6f63a6e359d75bd52a18eee830f575fd31b540e69e54789ac367f414969450866a8fbfaafec87141d813a7c6d57f1c77718ed8d5cc6e05102d1cd4c3930db263b00c7ac4c772e6250e8271650818b7b2fc89971852cb9184dc46c951ebaf31079b6a8db57f480829215d78d55e17a26d422b819de6387061d363421304421a4587b689db2c4332d8749cc8f8859692b2ed11a53b5e3826f3ef20da859882b2de9d84335c3482fb2c20da859882b2de9d84335c3482fb2c20da859882b2de9d84335c3482fb2c20da859882b2de9d843acce937bc35806322d4bb9eb23ce8b83d4712163326de96b5a395ea223b6f7e841d2d6018312ed191d9fbb7189a2de1bab80c9b02dcf56d8c97345b4e78f67ae6773da22745387b532c03266ba3735ea5cee8a597936e1cc252353d68a458d3beecf41f241cc6eb4d1cf0dd6f291453a4457a19b97b4767a2447c3125b13870c82798845c6724c1fb121eb52ba8c8551b431e3b6ad3976c40cfceea6595af8f942947574059e4969de7e2d6d84e60ad1cb837032c78236f5eb1dc07523198b76f1c7b28f409d2d102be467514dae5bdb13d39a2955bfe622eb7cfbe3ba2d71b125318bba838c818be506f5c5f2107bccc750d37e5703ff05624cc5215a9eea234169c59a04ef7cb7b80854f0e507360ff462dc387f2056ac97b793a7f88a75e8f7c22d0fbce86bb213b7b5f8e410cf017e77bdbe97976dc8feb53ffbc628ce55b3495c973afedf7ff7e25ec8f6f9787141a288f60bed1e3dd09437fb3b6af740e5334eecdc3155e697af933b1c28ee00ae23a0028e96351f43c23d075cc089e4c05c98b52a2a7cb4cf7730e12674800244770b0a55d962cc8785776f3ac613f8de3a19458373133fa1d649bdd40663601d666412a7650a3b26078cac1afe0bb8e89c56155396fc73903d1544b3d4c6be54d120e707616a5711c8440b345f64ac61385ba180bd1331c10c65236c111fa0a4d63d29afe2304521eae05e716ec112490b108be7a964a8ef75af0537afdcdf9c07ba8d0f257795730d8508b7395fa2062a8a1bd02357ce1422bec0fb50dcf294578015888a79ed785be358505c28f4a13ee927095d59a2cc323fac75ce25e7759ffde1728a530824eae66edc1fce6c2456a67b58e4f8f843dcceecfbdd723d3a21f9f72240ac8923391e32a1b1e200e2e79c281a7edef5dcc0331782257494038f5ddcc6534eab3e222eaa5d828786cfe8c4969e240e6cc9ae231310aa2f8c3702bf94a46c2463aa67ca9956f022320c32759b8f9051fc400da0eb575ef96b521d7fa9db2e0638fa4c66f4afa4a485d41153a04066f82bba2960cc9192aea686e4f7c4f4c909917a5bcdc1b166d48a1d8acfa5f4433e412d35843318152098b057822bd60dcfc002cae0103b498f8d2f0310fadbcc061f2f975073482a44ab021062ba8dad287c1fa777cb8c4484803896c6e12ec0ff153dd01e2d74d897bd6ad24d07dc59974fe13d670769b9bc8684c994a334e5b3b0740440945d09800623f484c8582c33a6759554bfd724f10fc6db5861b48f5bf053449a7d121100e132d2bcbd12d08163fabde40a58dfef92a383fbe093395adc9312c78750a561f70b7e2c9a3766c0d9bc46a1a2f47680747b19dfa2fe2828c425312a1f6783c61604442b11512c4a5f01f1170bf67523fa7122a54e1dc37c168501d6cbd554c7a85851247f70a8b8656ad20c492a647dff6a3ddf910c338d37ef625e659bbfbb3bfa9705e4a676db57f0259ca6a7b90ee019561fb0d8edb75126705811607250743681fcd2203f1d6e929500c9acc2f245cc79db0c9b20156c982d5540771a7348892d10a5a9490a3889d0d9ccf969dca643930a5bd0fe22a6a96e9c2ed16f8c0cc3a20dd1930e5ba316cfdfc6129e33421f20ee45981d9538cbf9c1ccdc71ad0976a99b4bfd4957ae451713c72016d8acbd893a61f57982eb43c65c16653b9f0922e50ee811322807252a9fd8cc0cbb34091ddbc8ca1d706a9463e2eda6e15840a65dca4abd045bb7a4f77b443228843482e0390eec11e0c5be3a7d8db17946b6e77ba1116cf0812e2b012aa6c8eec1232a3d169168665043421430a91f4c077dac0913dd06a329ef68090e3bd07f3ec214d1796ab045ba2a77fec945a897d409faa50b61854d85b8cf7f4a69226037e8802f41b513fd8de6a1b6a3359924cde5a2cb91d4b0683118ee0cc986bb44e8b210a949c4490e27f0ff43d4e8aaa2fa18a9f37a098f0f3123b509c032313d133d91b3bf43d85be98c9d01b9a5060e914e0d491475cbc5d69c97025226f595532588bd89d8c33544de1a47b6c517241b8498d59c942db34c9a0924a35ed4f5883ca33c36ef611ef214b0b097f3b284c1a21f87c52bcdb6a64580e37d65afa98bb50df1e230f0ade273539e3eb5a655de7702ae0d736b787842e6c7d5dc3e03e2843a5655d188d55db1447a46fc26ec9888e5427a9b7a1d08ac2cdf8af9dfa1757020c034751c97f0ab46dfc831bdd2ea1b82af7ec4d065baa1a6053bb1097b82f63e1562b970604e1c48529137b2240faa84f7ef3b5e3425927589b6b04ba05d7e78100ab7caeac7cab09a9ccd9aa43a448f8c8cd81136b02cc2404e0d0aff0cc5533662546be07233d3401efca3435932ccd9bbbb970f1dfee558199138e2c81de903fb5432a7d67b36cacb9c471529d79969738e6255b6c6564cce1117b1f959a52971d98c09092d057470dc42a2ac119ae8c98414a12fb11daa22ed2117c8189a71c24570ea438a1342bde824171681eb6a174a108d684da5b49071399fb9727938fcf7b0bafc65bb0675a1ad1236c6eac6ca21c089f232052866e27b90f4078d43cc497a8dc0a935f6395a30fbb39ef8dc62b4122684f6de1e157a1c75416ff7665c216c1ca6ca97268d7c47396940d7659b4275f08b74b3989da2858ad14f2232e63048fb05c51e34b22cc36510c02fa968a405547388964bedf6aa9a2f47e4cc6730048937b333453508839eb59581ce91c0215ab878efc947e7524d68e34c0525cc69bd5102a056f59c21e628579300d3307da633b9fea016a50c1d39d8262b555059d11a205f122b2d01dd898da67fe5fd31349e62d7d350217006ede09c89a1e4997547f8e34c2a0f681fbcfeeb0499a86d627522f963784ca1391575f588bd4d0638ead8fdb591a10b55098d45079d0c51c19c70be04aadad040a0f1f183502ea6823ebe4ae2265c6279589baf10e0686182341710e991bb223145406a6c81f2474fc5f1cb5650d40b9c3007787fb11cff4c8676ffd07b2c02ace94004c363f900d26cb6fd9e06cd0362ba5f7d5bf8abfd783062693a32ccb9c0a5e5b879065f8c38ce3b4830e8d624ac1b3e12fc3d3c76600dfe517a5a7e01a3d8e58b39da4ba8382082bb207bc08e8a03fa60f8ad6adf6e520a147d8a1b386a9a4a8b6c636b54d41e45fc209b20384e45e9b6147f066faea55bed970383ec656fab475c1d08ca1cdba76455e1e326dad92dc281078ad2ef28eb1399a775257fc29fde1b84a67ab9e3c90750abb1268398a9380ff6430335683453119cd3b8b1e3f06d2e14e328c5f8c76dce517a8e348665dcee6a6b885e72a21e112cfc071ff8c495ac0b310801ba86ee15b10d817e2dd2720399080a5c24ab1e1b23b8fbd47efdd5759ecc2a0047282040a69c61044bddd8aa64095eecace0bf937da2c323a8f2ab5b442c10c45a1a0fbc07e972327b4ee978687f25f07402927309bde6cf14ed25b6a1279092e414f16202733013cd8f81e2504bd698fd7f879f495401edec6a2376c3f857e766b4eeb496dfe53d30a445c7b8b77c5c7964e666e0c39e320d61b42c023033bacc0026044a48ce005e6d7f04d84cc83ff9f78a31cfa86c184ea67c118c9c8de126f2b4839fe53c2a164095c5b93f818eda05b689987f52da52d1a3b4e8f30ac3ac8579d9a5cd6ba8591af8259f5860b7c87be519f90aaa1056df6c4cc2b7a3328628fec2c7f00761c1f20608de1377b5276161f196d64e1d8bd60c50f5258555f35529bd001bd926a781d95cfa9a426920fa92e288787b55cb0ff040897ea007038c7b51bb0308d6ddebfa8a76a79b4d0f0280ddf1f819318143ccf016e57b86f59a3482fa1d18f13476c893a6d970006009b223482e54e382500981fd9fba04b8bd40538867d28b8763cf9a975b0597d32f899c8b2aa79e4619f0ecd6e9ff069ad11066f88764b6b55a645d019b447917eb874a0cc8f45fbaa663e7c14ef6a3d2c412e1828c8a62d75bacd8a600e7ebb8b28984efd1d9fc1f887c313953f39a45d822c98dbdff32fb666860c14e42803a8b8e968b68593a833bf5f925e741349f8be0cbe6e738b654901502c1357636433eaa043ba3aa88a57010d69511353a439ae03207d3bb4c8ad2ebcb28b118909f9d8096ce9db1b8829cb21ba590e8f20fce124fc84b4947e2896d75024835ea0496f5ed86d4f2e79f00b865f27e4bc41c1bb4e99d5dd21810391b858da4bb20c723db0cc30da5d29a5f2200713e3fb0bf4a12814cf81eccc409da6644905609778db8033815034f89eece86e3d3cc93bd1ba43a93b2afd49596e5f5a269c61c73180b167799522ef947db2b61e87f81c9c530fda7e209e0abf2c3a32f988ec120f5febd77ac7fb964fbc1affb36812fd6adf00fc4f1b7e2e49a03a3da41aafdbaad10e3a3f824749732d59e4ab4e222dcb18684f8f5e702a9aa9cd0915372a4cb0cb308340cc26523971ce83bf940c0f27ec5331f51977952f8cafe42770908615f0972e8dfc509ec087dedf54e8c28a36ac54ac2ea225d3ca59c31782d42c4b00e27065e9ad8c6c96c62d776bdb827cd9d3cc104842c6226c0490fbe126613109e2cbe027001e8c3ad56052fdebcc2c6746c9d5ccdeb94a5a81f3803f05ba64f0ab5dbdb1a8f75d1a5e5324364d74ca92a3f63b5afaa4a6ca9f18027ca5f4d00f02fc728baad6beb9deca87807ceffaf752f0c7a2685b16baa0984fdc818565284308ed39196fc8da37bb3ab2b66cdb7849aec01c9583184f520afdf32a4e7934d757e034da4799c2c129e5e3138ddf22e20c88a469bec605ea4b7f692fba24affe54bb9a4ff8f13027d2ccdabbf8139099b5d8d8b9d4b00756b148662b33c0fe49f241af7667f3485f70029929362c7eee0b0c2cb3cbb8e1eb60e00a09529b45baffb8fa5e701b0d3b82e642876f98acd6b9925f4d8b7f28969cdde226482a33f8ec71bd18131bdd4213d70b43fb8b1a4e6a0df0a1fad11e7d77747aa1e68bdcde952e57c48cdf9abce79ec74c26c98c509f39eff5941e07676befd4545cc0ed245fbb126516cb11af5dd79227459ef4f8801c8f9d8cae7df70986fadebe34b121d67aa0c70f2823936e20ba692538e2a4a6323483eba2918e16ae19f114a2add6162d6be8d6071a08f996bd56891c10979fa08dd20539a61ec8cc0c120dbed510dcacae3a2875851ef1441167aa02eb3472d7a74cb6e5a923e3a9719d922f035ce387afe1030ba745386f4a2be82f5e5d74f4b7651447f04f81a4534544f8670655996fd084cf83f9fad1edeb40c9eaa4bf1a608c071bc4c53bb8daae687b7fbf46f20b0d9392dc567f22e536f992f99f03e736288858b2e98cd189c23f7d4b9fde10092b38911aa6732bf301f919838311e5de408aae69d4f0845748a99368bd0fea3bd6c10e248a72fe5333a3de9bb28dece5fb617c53e12e55710c99683d4dfa8f4a62f43b5e03caa4e1a9dfa1c513284e6ca0bb29a281c267899eb303a9eaee70148e7803716b6894c741513e556a1dea8852a9e477e66d332cbb17a2c1417aa4f4631916e631b98432c145fa0d81a085b120bd8219e5dbecf81d7d14dd461e67ab5789fecb7132fc075dee61e852171af92b2b8316973901e3e00e03288139834977a316986127ef923938e23e049619e993425350ce4af242397f80074406fdceab37dca55298c461f57d0243fc2894447d7f30650d8865c2ad4946b3a312c73b2d33c2032598c78d8756810b61c490f22140c6ef358df01caa59d033bbfe7cb9c6535b89c38a74597aea7f23b0b28a1bc0fc1da2fa561986d418f5f1357cdf93b9c08f0c29a2bd79fbd7817312f314ce3e924f41bebf7ff035d27b17e2c824a3063f776e682a27a349afd3fa5337d4b89323605494a6f514632054aac831d572e99f3110fc1c67948ce318048f0074e816c805c2679e6652c9f0a808d9ea69ad9f6380ea61289a1b5f3602515aa7fc14a6940e234ac86983c82860c97a96a786c2a8cd91bc8a5ce32ff92254afc952a74a63bbd9619d38783d095635792d5bab36783923ce3350f93f3879f415170b1e1bcaa1aede6f9c981f816315a11e0828e8e273d8c8b1d297d0fcd98f4999f5f3a512fb1cbcd3f54760b66274a6f6033c0f52f8179489ab0b99b1cc709e7350ad3827f77481dd66c7b018d4701464d3cef2638b8511b918c38ce8885c45369c2e98b05253e1a33273a0864d269ad3dd7fc97c16f8f6145f52b2bfd12fae09104ad0cdce4a7064c6df6911f01808791c101958ac0c5ec6dcff2fd9eb23070d89b6ed3f1356595270a5a406a1ab8ad0c796077004f5da5e1888b354c4009b33a78e92311405a0b2ee13b8ac842579de130328a0b9863b7b8ee1b331326ccc6f6f594404827cc9d7a033cdfc8934892b3c2ee79055e9abe5dfadc3b7580c634e255b64f186636562c690ec039084f0b823e342c583d9fdbb08a7dc744ad652d5a9e3210590f15c822be06abc4ef881fe142df39fc620f7fb113b954674e7947b939f8a6155f1181c8e79fa925ba6c60e9d5cfdaf2870fa241466e2422190fe5364fa3eef9bcf46fe0a975226a49461f97ddb47a43d2df906aefe1eb0947ec3938377a441d743af2ee5b8f2d1d5f4fe9506093b60e7e643ed2267a48e2813055d839bb50c645610df6c6db271e20319e47f4e9e3a0ce35c643e3cb2c1fb0e83dc169d2bf62afc7a9d62779b4c25d4e9e273cb8081586e16e2d61b72d869f9353b47d691fb6a4d00d02bbec22cefc8461cccc20001727547b9c709a0693771393eff03d8b7a57210cdebe58414f51b12dd3850db0b1f428664e0a1a9547682719f28126e4b53b0d47da6ea0c9abde17d92cf0f31c76da3b083af1c4489e23fc7629ba3054dc6c3a185867a4d7a90620341948f46cc442c586939ea4af6955b0541527f5822ac9f1dd462b9d7e25ec27cd0240c33bd359c9c1279b3476c9bd70668596625e2678121bfa2526cc4bc31bd63678dc4c639d6dbbd5b61af6ff60e9575c127e27d8c32c1bd8a438da12194430131cea2db0954596af286ec6e809724ac03e14570e33718f25242070fccbcd310f0a5e46d857af0c87cb80b49e479fa0e7c39d31a95772b9567dc5e510d49682eff36865ca8b5db8db6e20c49dfe5c316d6b1d2d90bc7deb73155724a2a1660a98d4595c3954bb855c37da9eaa0d89accf2ce00aab47341cb5786f04bca18d3ab00311cdbc8cab88e2abb8942bec5280c508bc7f460a349887e0993c340dc64e84bc13706b7a41be8e520b3b3185609e5d3f6432d661557430aa1d0da0e2a6b11d512afc39556d132017ca89763979272dd895caef45fba3458a2fe8a139e19f3ab46f7847acfff406bb060186a0c4c7bee217a6c64ad872b439e3ec0a074344d585451caa13732b1ac49367279cff057c61b0ada0c85a71861790c31dd68e35cd4af06953e96a152725105c2b8e826e645fa600abde65bcf76af19c0be4d180f2afc3145a873b6310fffb1dcf4181edd025b0cf95346f3429e2afdec0b9e8ced7851b611a520071780c1e605348814360500e9190003b744de921022c019b912e9205394ce8c2b3388dccc857d0cb6ac9889a9e2af40fe70652a7d793bf96f5adf32a83977b1a1659ee0ab1c6d383d0fbe8dc7fbb83071c65e53eaea867876b8080ad263a077befd94bbce67d436b961310a7131205e59f527e1a9094423fd02d309e0ef8c470ae3cd7078093793a6d91b814800d5ad74bbb0caf3c3c3fb1e98050c53d99e11adf7a771a1924257382689208e0dbe7374707ff12328d9b67b2b4fc5a10d901a5bd22adf79d44d8226b9e9cb4cb5973544a81a55e16db63b8b5e1768e3de95cc75a7d65e5d3c92a526e5334d691d20095901ef235b86543dbfa1061de20b4a5b84a82b99ff841b45812b399753f0fb11d027aaea5521ed64a36aaf1970f2a56a739484302211b1d2ea3d21cf62973ab093c179572a8e6a75e92b269b4f6320db65e42e41dd77915bd101f824e0b392a7aa0dde103c6401a8bdc66a37879a7f99deff3e59cb0e19a639edb5cf8903cfe2e0b90f4004855918fb2838da81b95d563fb7452bfeaf2ae476f1558d808a844f3538f6aa654fdb5f7536e2c28eaf4d2abe24b01f33980c47d11c2196c876e02aae9bd20dbcc1216c6e5c98150ebf1d028efc016637dd5f9c7161bdb06498f622047bdd8303100683d3862d9beca6f84d0da4be41ab084a61f06c61c0d2b0d5b720574629c2bb710d11501d399c3d16ebc312d704037f396f449d11c7a3a409346fe84d087eb84e061af797ae6f3c00dff4cf7f7f49d0103e02730c6b7d8d414897b0bd92cbbb2a7bfac41b657fa09121db0ea3439007c3742319b7c8c2d296035e342c4425448405b08f2a3a6b0073f99cd9580a67504ee3cea81d917dd6f11525f676e92f9018806db761906bc0d643a864253b927f5998a69d0c4efedd9df5ba4c1390493bbc3e3c3078e9ead38a9b149b593354e7dd7863c417f63a4a9bcd41c2638b63c6d86c40ad9ebd5ecf6f7ed1fcde5893b8bf4aeccb23275a00e8ab79682a5fa93a72c68d7deeaf6dff81218355a9a0ce27931e68e68cf9cd34c4a8fc8c5d7fe832875605b819be957a428d8735ea341f6c2da4cc618e79ddd5e92fb7dc97031f9c8d6fe3245f4d75007831d8d763865ab13345f69909c1ca2b5f4188aff8e40512c8a853a2b396c24067a257ae2321ff3c1eece771d1fda090ef927d3b86068dfb9720ab9a423092233fe5b85185a8245046962ec2ec03f4ca82207c389a032fffe7d505d634236929452db796ea1e57810a126a48f07a89fd53b533870cd587a3c554f2c699732e2ebb10eb7731594406c117bf715e340d820be48f07f5f548585cd7e075cd158578e881930f6e49e14adfcdb16ecace0301f96a844d21a2a7cef399381100db3e33b1fc03b5137bd62b400df1b1a16b7248cd9886bb1085680d198ca01901416294f8f5e05fc8e87196ba3539f70cf27a938421dab4b92c2d3006331e0974a59faa6df70f9d90bff7bdc42703be5ad8cc95e50d2c667945daf1021c18b7b90852ba5d36b6345d1f5c90428d0d6ac54d1c2f15c4a8a3288c93da47228bbf61fe866a15ae419c9ca810d0200fb8bddcbfbdc624c139440c193ce4b663abcad816356318c451fd22389508db04f841590fb4023b8e5200dbe98126cc3cacf86955d9426697e7b221655cbcf1c1820e1addcc872ef7b88902cffaa8a26c9f239906fe0ab188624507502e7252c0cb1aa623400c6a52f45938d601a768a183474b89e558619027f8aa501b39144b27210f17a184d6b989340a225db53aa55ade6954651ac63e8adbe660c836a618c336e74270a273aaa36b12221dfe2e058988ea732513d39bbfb462981f4963ab49c0973629be1021824de0b2172e6db3ffe1c44c31e9c7631d108c7d9b01cdcc723256352cdbf2c63b7defbe8fe6e9cd3fcfc13d900b801574c49b8a7fa095a4413ea2a14be1265f2586a72f34e4dfbc37c57ce56a3dbed6717633c78a92afcdb1d26792219006138d0c4d77492a81cb73c336b120512625f0ebff073f8d709c1d0dad9c8f39ccee93536278300c64d17d9dc40009159b30d0d122caebba9660933ae5e303cafbed88dd8df2f2995f250520e02799a5167406786b0b9184ee379000414123629b8381c0ecf7a52265e95b559c11826b93f87a1b03e8fa0dfcd716a2616343ccff13c05434e59b1069d723e24da427ffc3dfcd6ca5258b67b6c5a1a886ce20f5a7b4a46b44f765b5cfce6030bb7ea5c3f03041cc0000c99f77c4a0aa08ff42265ad1fde1c43ba02b37186b4d2d8a438a32ee50f21cc39b2f53092d806343a9ea7e7c2012b3867ba5fce9ce4b950b28a0c09c2f47d691a436ae20ffa66170622d0fc4f285c970a82eb55b9cd07d9b8ee0bae610f8b4943a4297f8404a1cbc6437336433759c7431fe1e05b44094bd9ece3a8c4342ec4d567212fc97991bfec939cf507b7c64d43c42830f6c13b9058474d6662ceda546c020831db5be243406d1656a143f4f53e464b100f7d8449e909e4bb97f13a63243758b70b79907287c31c7e5b19c034bb8525369ea3dd2b93f5cb9427b1058fe7505c600a191ae3c293b72d965950285a5b064121aa36bc51f3a9a9c98e7e88d0109cf5545ceb66c9e9b547e9e73f63261f69fc8165c7f7f6ef9f4c3a94cd4099c4575a9f30c822bfd3769a8cb209291d4714a1c0e7299a043f7c84894f45570acdfcf60c8e2a97414a97869b7b24dcda952fc86bffee2e29d3939c030d39652021288c4bcc70f338284940cc9073fbcbfac6637dd530f7363f2482ae42d5e0003be338d060e38d83adc32578ec48027d61bb7830a273046cce369126bacb0ea7ee1655720c6f1a24b12a26063519de2060d887adede9c8cb2fb49f0bf27f04e48c432fb74b8d81ea9371cbdbc5cc6476d97aef3278f6ba74b9eacf0e2880906fb4bc0c31769806452d3ba10cf5574807fe76149fc2665e2394e6ca366ddc0f9c52ad1f2cfdbc5b4120a76682a7159a51b18ddf9df23d06da3eb3309fcf722592e3ad4ff219e3619a56c1825a491c2d0626a548d54df84836e0662d5829136202753b33c0d06ba68249773930ec207083a17cc1c5bcbfccc71c51f27004b4489431393de6e8878accd113f378fd32dbf3a8d2d4a80698aa4105248c8107a7741f1860262adb5fe67fec2d097f807604291ca17f9109fa6d2bbf42087e4fdd42b45e3245264df14cdbe8b3147c2a490fc83c285f3278a9ec6b3fc74e742ec050a616d052b557804f74cee7b8c6e694e175a3fced4cb0355f3507be37ab728ca28d072fd7a0e11cfe25ca7d94dd37f03b31d8d8387b3cadbb0bc6223d6002f42d2d7acd05f43f26efa222bf1ca3f8c51a7298140e27f89852ab2ae68bed3b7028813a51f464096a09e4904d17218d72d18f37c4305f6f90502e8aa3738084ba4019449e6830fd42a90da352b4d1fbfc525b9246605bc0658ede10edf7c9e9db50462ed24ec9c265003a44831a7f1e9f560c295006a221a50894c71f564a696323bf45c9369e37f390e2e25022bdfb5a36f813de18ce63978708f457efbf5fdf3ba19fef9ff95806b1229638429f0c12bab470ec260fe87b4fba1271ab202368293faf934db40935af9535d622e09c5ce0366fe215ca9cbcfc88c59fe564619d899d9c0f2f912753e08a2735601f6f82e13ba438181e273017878eba58017812ccb2175d4a3d4fe9c9b9e1e430c87662655bbae338efd21259cdac8445049b1610442759bb0cbe04aefb9418dc092e1c056088b46cb0739eb5e43f8a0e81951d8ab14b5017f25864d4239d6821a3eb4c1e714492abf707aeb38de4d859d0db49b2c555824c49c6e24ceb59ecda4dc935df214336406286de186896a7d14828bd350e637ac4e556d90a11b0af187721ee37ffb1ff62e7355f94e0a4f4c3c20cd46b00b7a556ad42f89e10b2ab4afe16541c3fbcca28d9ee7d41a222ec96a04a2c18683b0517b3c96af577cbfc59a0a1bd8bec1fe36806426e039f5c7ce10dd18fd168d635d507cabf6e7a0c2830923125852288cc70c4cca9215810eb9880df835ce4c8157e1ee336ae8e06b6ef6c8976c5b42784f2ad006ce85aaafc11f76571175176415a6e93cb89e9eb7d4a7fcd59ee14e4541053401d475d2eb02126f974a6e242b15988b97efca2a5f80d97baa6c004cb2aa7698a6916ad1707b38f817c110e401ebcfd3ee824ba0b5f210ebde0fc0bf3e24fa5d8633c3d19495e8819fef8504365e8b403a85b333ea7deb4a15b05b538ca76a9b9ab396059aa025cbec0fe772545225e8c18805ae80947ff3503a834adc38401c8164c17457f08794824534f6c27722411448a185a034c83e6864f4ae1dd900d955fe11a65114eae987795a0f6f184c7cf4843584f8cb741a11f2c01021b7ad68a4ad86b896514d575809160566e4637783145a555481626f065d7fd6721bbe01dedf68df699f6f0d5e45b11bf87d268573298666f6bd1cc0e3851fcbf661674ccd4d39fd50869a3055daca70cb1a254e94a3cfb4d5a2446447950ace7209dd0cb28d9f0557574b535df913c71633ad2685cd2b44827787ecf635c751bbc72bdd7af77e27a0f738e289f92959c3996ebf351512a8b769ffc730e26b5f9feef3b289209a6ba97a26c59a944f6d9668df4c18ef5cdc06d95c42e715180f9ecae9ec3e6f352aa9b17bae40bb98cbf241062a08af2e52236f8ee9a7d886090449f787800d9f9ffec62beb528e9c23df5ff7a437dfab143c92f711eef780695c775431cc8541d5ffe5c12b7c2858ef265f75be7ceb00da7afdc02ce196cd6f12a6beb58b45a2e6ab163d1d28ac08f4451f797bc1669d6cecd03422c85ca42854b10d5dc2f672c4ed9a79648e0938e686e26b9e2079e074d20ae6b4402314cecc322004fa95c2b760ac7c4bf2733fe98828255ef08139b8b60bddbf6f50a4b0f33f38b79a51b52f9fcab6713fdd1aacaf5a7946872a30fbfa85545abeb58d460b06b8a3d9c13f1910a6815855b26e534cc7527ea4df45ad215386b97c317e6b009b0c5310a294505fa4b4bfa58a29ccce44b66077e9053e1f1e9cc51def0a8b1d08a8947ded87467926c366c0566efba195bbbd9c3c78cbf8cb7ed3246e600b432f6dab77da28ccd258e428b8c3b955ea63c95c1eebd28cfb67e6322f78da8a68c726e4fa056072ebac17d617d984858096ee9c0b65f60607a0c8bc4da8e490a00ac21030129d832c4186cf5e2bc74670be484a5918ab9c2d4b7ef59be56d7e9c9bb3586f908a31f471b6cf0f25b6821844db4a8ba5d37a08c15be9efde9025958161fb0912a33db7cfdb398fd1c9e43a4b5d4bde3cc8756b34762e9c2f9398be11fe3c732afffdad4b02fef5270090e9b1b9dedb24035f71ac314ba6e7a95ce8c25b69efe5021319fcb018cd9418b86e8ac92ae53746b46c6231903f31e2b41fc4f956a9c50f09394dd25b33502b17790553c70114f4675b3bb5259f80176d53176354753749248e718d71e27277431b34ad7a476436e154276ad7c30d68274c9edc3e3b3e03c4d13bed13d67d03e74c68dba87cb8f5eb454509df39cfe1f7fc649791a9cb8ca80618ca31bd48cb4120375739086e7467acf611b2dc273799e76ac25322ad95c7e377906366745f2f7029ff3ab89ee1bdfe8c6c0a091438b0ee2b1a036f94e2b44ac38002487609c2a40aeedee773d13f23ba75edb2bb7a0714fcb43db5816b86e86c01e182f06227e7b466c90605bc16e30d9cccc56fde5f7e12ef8102a872f59b69f20367ace18002040fcf7aa5a994240576ee576b06a6e64b81e3c9af7014ef0be55c73ad4856574ef12df6237a10a7ee6baede4d8842cc193d32031976f98c6b0b2b6c168774db93bea2387d027689de6f3f5a43fc0b2c375bad15db1e7f40c5f035b39ef30583e2f316b4a36ccd4f778fb07b67d5db4899974fbba30fb165693c794ad06efd3bd60bd659ed243ec019efda2639fce65fb6fd12c6630511e3700ad02fe2dc06a063d879f4558ce24245be7f04c76c9a5b6330935ccfcdc02483fd963bac9a40c6c5ba1590aedc76e26da0c4fc31f3b661b83b719c02891b857463cfc7fdcfcb173a3015acc147bf0f6032c33ebbbd4cc486e0ee852f29b4c760c42d4a8a86221f8c98efe7bb60050adb37156c57ad3beca76b532013c13ecac155cfb36712186d72452948371c58fedd31cbf723c891e9adcc3e423b066c3c0fc22f6f25802da0ee6516002c1951465e02f081ba898a2b57fdc616f2aec31bf735943b1ca2f8bd5906b82f23a056e9e73f65b791191d2fddac16bdecce4a71ff935d3aeee32dc1eb34735c4b6e8b6b47acc848ab67a8b37a0db136b855f5e11864555b142b84abaec21a42732b8064129929ae7f98ab05da522b30a9e2935084905f312387a68d3cb16a695c4443c4f42432887fddcefdffa3f462616fd1a8e055e459ec42170fc7a48a60a72a44ea15bdbbcaa1ab7cc571aa1a3c283154e39cbec70b2b501b6e298bd483f6808af5effe24c350eedd02a92bc590dcffa35e1b6412aa4b1745751a37bbdd9e674401b9ff8612ae38c120dd39b4718b72dcb3725e43bd1c48d969591630940a6e4ed6e3b82dd7ebc64d2ec39f8819fa8f114b58b1b99473275bd10137f96c820e20a221edba552c91f2c5c531345722a29daf73660349c8973f93112a28d6b0ec24d502e337b5e7fa707d2ed4f9364cccc5ee888c55d704dabd95f18595905757625c12ef92e5b8808fcb9d34d24dd0477a382f65c4a2dcad349943375c182ecd148772c91c0a443e5dae6268d8e3091d84e22df4290382ddd4556cee942a644e6d6d44d6fa524e6326b9bfd1180a67b14ffb4c0e780d453ce09cb62ee54d2c38b18b3aa5a4055cae2a52c1dac70ea22e684d9c6e9b786a238ee9908675e7462988f04d367085bc26a7c332c30cdaff0264839366b6caf436f48ae217abfb99df497c5252dcb5fa2f57b537abd859432bc1681a1824451157ebe17b3669649a08bb658cd63a2632358cda4b96fd8a9c06fcaa1ea26976a1e6aaf7611d025de114cd4c081a6fabf32101070c11a553e7fa251253c7bf2c35fa7bd9857d21f17600eeabbf319199f40618ec63d55474e282d5a0635923daf1a3f58e14c2362566758e96d65a228ed9272c9e57b0bd8febf6f3b24d447114c4ea36b09b39915332e62d3e67e8fd2e28c9150ab887766daff31169a24611f8993fc963fd6becd74c90986b5dc2df6bd4c600c9558b529aa901b4b9c00812680dff4a09f66e0d51582655e51be618f291aa071da57dffa3188656a328961305904dee2164ea32665d4ed39495f3870700be3337a9ca18ef7ce5b129f3c712b7b70e9fb5555129a475cadc27a951b19fd129337865dd435eae964b1d146815bddd387a778fa6c016d310c31318352bb1c12ce111241f071cd72b2ee97a75fa40278c360e99441dfd862848a9fe9f2df514dcb86dc6a909f91f2f76e826047e2449c9040f75ca382bd2994501871e0847cab0bef06e1fb67e3c453ee2d2cb96844eead2d443bc5d4dff4158bf5035902573eb5bbe6e007039fde1561354ccacac6a641377511a675c9a1c7f64a4ff69d12758c23785e17b9f534eab8ff3114351db935d99040ca09a4287172bee32a67dc747b952405e68e3dc30be49291efcfe70c18a2512c2ed17cf73ee37b0e4dd34a3219c55a639e74d7178821afe9d032ae0c848b8a4734b03aa8064abac8dfe92bb55b9f79549697a0896f3c9fbab19ff058de4548140148aff400a966ce4d4412371b5cd102302d00571dd484e6d685724477e1e5e39855b15b4dbe00d0ce3cd13566d227888bef377e51fc5def23a1ecad8195ae724c1234cc98376e55563fc2d554f51f0e51795e66a31d843af63c497817c707ceb73f10b9ae21c77013cf8795a6179a5ec269a90895bb1ce73012b27549953c89fa5130e3c61cfd28fa588b825a217b88311431dedc437a8ea058d8d28a68fd0ef0b5ceed32dbb4e251756890cbca3ef3eb134e6d724a6c93d705812382f6a762d3057a5f1d1608e5ca1f2ddd5f133d6054ec34e2d91a10c41f0306ec22e9a7a7d84c0678a2879e5f30cab9e4efb964f7a31a64183d1bd134fc3f2c53c238a624a2b639f1bbcc2318e166933e2d45d9f26eacb07b1eb511e46ea312a38a26b750bd7ab9af4fa8734e5158b82448073656f5c35687abe1e99c4b406f1fae834feae003753d018eb91dc11bf5499d7d5607f47fc6c248b74e2c71f058b85e8ca28fd122f464c877133e95edc51719fa0591504d66657b093c0dcc424a76cc7d82f891def234adeb186c78010d1d26a7749592342489fda373d798be48f839d07be196db46848cc77365047f0d057cdc75c5e14aaea448a42dd35852176879537d62763c943998de0823a2586a0aee4ef89ef147db4730839955624d711d149b4cdc40b1a33b9fb1f40c9b0c2cac036ab96c58d2237880430f962bc3708e79a7c7a237d7b8cafd508c13bcfdcf42db3ff762f62b91bb6874409f18e84cea27bde77b82f91dd0c13e50964149cb96f2c4494910f4f9acdbd3b663c403843d26ba0e31b3825dc80fbe2dc80a01b5ee03c3f7ca2ffaa8c4c055b1f3ff978a597683933bd43221149d67ed0dd435fda4fa9f0bf91e7f64cfc52bfb4f15c9351dafebf4fa5266fffcbcb06b1ab77f4a41754d5eb6bd3336b10a95a038f71c07124f534bb5cf751cd0fde53e9d23c20c207ac01a9a394f9b6d50e1c6d39ed37f3eadd5606002184361daaab6eb47dc051402a09ada14f317c1826fe7a42c3e1a8d67452a3e60a641c0aef700734d6cb15244605fe75f9c461010a597e2f80f3240f2826aac2cbfc4b5979cfc9a65a9ef2feccbd632767cbb8828b6fd15ec25170f49ffb31f2a9a71e2d786c952fb592a59a7ae9f3c0bad32458be56ccedb04b565f40c9b434c199b57f6b2293b7edcf613b6ccbf56b3e6cb982d307e2b0d354aac3a631239ec22cf1ac6de9a78876e5371262dd374f55c932d88310bbc6e3e3e5cbb99a040461c0a1d38ae89d1c3982c18bb626398d61c3953e943949f808ffccb56aa5a0cba441034227410f474cf818c07eb82f7b816208fae590ebac2a274133827130697fad5f0a5c42d60493353882af5b8164b66421e2256060cc7c917ae40ab7e4890e68a7e9ec16b98e0918a045e6f23d5f88ec605034296e0c21db42e4df6746cba89e8c0365faa0461bb8bcfe20df141b32ccb8252685e914cd8931cbc2239423c032642a79b4a092e3b0a724d0531461fe6f42486d897328721d2fc634a1843bb84501c6ddb79236605ec719a71ed7d6a618664aa4c6f92f92a0bb34dc37a408081cd1b89f0e49c0dd1cb7e258dde88ed4b4c628fae940c460106a14b05386e9dcad466175af23b30b7ac8cebf5bee5cf14b182bd407d02fe39c072719f056387db808e0408d65d64fd3a0bb27ae75a1fa40e067b6064ae983a63a3109a95e34ad8e02fcdb6ec3eca6fb98a959f1990a4777323b56d86942ad28956ac5c206930a716d0d75c43038940eeb3765d64b971a09c9b478bf1d21a829619cae32b07a8831cdeb2b90efa5e168d73a6480f5c64068f5563e5bf5527aa88ce1f3929a60b275f5d09396134e37b3cddf7199e13a33e52192ce9bafb67aa5a3ce91538d8e51ca98902818b9b127fb0f7e7f6c20d4f8c83152be24e315cded1324a4bb8dd80023231b739cd9177aeaef7ddb3d5a8cc4838c0e5dba3ae8701cb4b940ddb17079b8105ccb822aaf3700501bed07ba37e1788864032d60385a8600b128562aed8fd2a3da3c78f6dd8b12035a131984629881dfc2c8590fc14bcd8c523ca17e0536078a1cd1861d9cb9dc0da5873ec4a8e6b99013eada3840f8dba2bec43bea14f4c3f8865314c949010f91b7cbe2cdd3deabc7a567a2ef54bd214c9dc0ed2b4b110311d3775e4f8492222bc392d7d3841aed413e33af0282e9124f951811548c0757dcc9f8539a57e5daa9f4d062dfa4af5430ab86d40f337d0f4ccfed0b7c33742dea24b324b9f59e520086c2892829d408195e843d3b3e977b698f9a2c06772dd9299a1643334c9876baddb19aad55e23bf5d6e07df563e23cb13cfac23dbced27a0c290f93992510b3ada5135b37420cfd0102309f9953c08b5a5016922189f8191b5107d1bca10c2cd69113d6d3c5d914597f092a586b151486bfe1dc32beabe9cf08e7b5e72e019f6020c07ab3c1bf607f84215a6649b971fcfdbd3e7a12465510bcc7cc32bcba621dfeede3285374420f9c28a4d4ad87367f8419dcd4ba3011b9ed4a08803875290239800da9e1553be3380ac3c572628d62c6536c9db2815a51060f6f96b5af2e0e3b95a50a72134cfb8732e761110fe1c4c671c855a7616ad2805c3118a47f3d05385228668fdd892f901098ef4a028bdfef9bb6e548d54f6bb1b04ea06bd1fdd42b0a46c65d1f1afe15875e21985d4f3e284d4043b193948329495a41abfe1cb125cd6c52bd80011a64f4776239e8058679d624adcac36d9206ab04d8ff56e8ea41d4df1bac626568129bb227a77713037cdfc75dde0add939828cbe48b51fe609714a8398d3444ac521f396724ac985242c8778af53a515343ee88c086abd2e6babbb6c23daab629c42fb600bd72864c51ba16a56ba2703d0ad7467d0a932b62e156b5b9dead4d610f55db14f28b2590be1c5026945d43b1eb28ba8e52d7d1beb2509f988af1c5df52887efa3d1354843f3e7ce3c717bf6521faedb7e2961228277153a8fcd3c77478aa00fd4cc1f6b64203ba1b9751594d38b419b0f6fa17172c2297d5f7e1f1e5d42d8260392a3b516a4ccda13d9a80d4fb7373e886e957c120e7ff635293d9bf8f6803589f206fe6566879ad1e08ac98bf8d08a56a6788114c224daffa2dc3509f9ba4d94725eb0069bf0733486d41a4a8bbb943fdbfdd18c7127a6d8c5a3bd41b9346e347b269c84a223554a4dc61fc67d418cf64ebb931b8c10e25c7600129271c44795b8602422daf5252716b0f331d77916e74dddcbd109e2d6a87be3a851b866bb72d803fe4c6113d49b2f0c8bf12c10d4b15552a8167a329c2c5289a187a6a4d26fc20b1ccce41ae3328089ab70fdbd2c74863a4d8ae03b777a3df20c757d5c5417c9810bbe047f6d5ace767d293f02329d57d2ccd63d8aeff6bf0eb22703025bbaed067189592bf423ae252277a83d1244be66579937d7ae20fc4252c3af31b060983eb52ea6b2af42bc3794a1fc1c6848e0ddeb62e5a41dfad6819d55b54222a70a7e84805461af4cbe96f971630565b1dd18a0e1672e29d91321bde2ba6912663c69a7bddbbd793f623102b3490557f34013eba90a13df4a2e0e54633b2e6c8fa301ebdbbd8136640638327f83834a447fe7fb0a52214ebff47efe31851dc796c5c8c748de1f76874938156238dd8c687c3d82d0bc30a9d5aea9675477917097a0c56d358ccb18057a1a739a1479b931a13bd7dac4602b3b204529d0de689d054c19cf456d91fa59ded7d39e9c47c8001765e4ec624879ac4d16539499ce92594ff42f0b237a5171e5dff80411063bc4117a7b36482920237e1230856b1baf32f8c0e9d938e65607567fe86b6702ae8cfab55fc9d8f4468eebe6848b53633809ff034b614de1f43ccc66b2d30393691f65df498af64ef99703bdc6fbb981ca4fb6cb9d29eefa70b3fbf0eeb6a31bf8114788540fd6ba56e8de2f35729716860690ef693a13761b5406255c6ac01faa3fbc03372112bdacd536f6a5b3d9a6726c353947817a0ef211049e390f4c038a33484612f578bfd0a208121440d63d0d7055dc08b32d290475024ea02beb86b8fa9d679a4de615a9cece97b2c2b71c5432188ed6661b418a03091bc488af156ea82872fc393504de1b93ede9cc5e1e01b31080c77fbab370ac36c200d7b1cde912ebd917aff011d16204cb63b5988b630fe9ed04de9dd5f7d1aa4d8b470bd8c190f9308c1b806f1fae8e8579329afd8832d3ea16286db5722f808c655f31702ad9dcac5e985f9a3b144d3d4f3f14ac5e77eb8a4efc39224ebbb10451171181ef7aa1a47ea7afaa9997377e9a1beffc88c96aceed3cf4931c5a31dbc952906ceecc82bd86c20e0bc4f9957ec592b2353ae88739b9c139dbcb54165362e5e3da2498477808df84272f1dec009a4b42315c19b889edc9dea4fbd78a4c9220c053300e7932961195c9e3ac786b8953a50e7dcea69e4ebfaeaf022703798db3548c41f102d237d43177884bb83ded7cee261a12affd4684b051e24c362d61ab1d7f007f6d8fdc51a2ffa08f9cbc1b95dfab3fab61d6fac952a66ccde1e7424a403fa2dae875b4a50d8f5b5448865516f5f85ed574ca1fbeac8205bb2c322db8228bc5cc37ca83f086bc54b6046247a54af799926b4486654d07115db8c493d004c0120c032f775680b6c02730c415520f13a42613e1ac86b2fe2b633f34adda2f0293ef41a75854e259de4f73c2df6dfebb04886f6d7b0ccee865ab6029b6831c176d127a18f4be2d582d4a843d0319d6f40cfb7c72e0b20c59cd8234d4d0a9d917f60952bdd4e552681adc425244ce5102058f656dc82d42c9fd5758d3020ada8f9868de99515b6a969ba12fa7ab782029f8e6b9fa3c01dc17f4267e034b3ecda1b3c6390d8aedb83e669da15ebc495dbc50f84766ec9eba9f2e51e66ac87b04da0eeb37c4508d45254b075290ba6cc798c196912c401f14038daf6c3b080b78b29a63caf0c30705ecb86a0f10d387ab7911b9877322ba4036f5a90310aee66e319584e7ae2b879db988a2a340bce656e6bfa8da80e8ab97c4f94631933cc2929b970817c2fe08a345e37f50bb8d9d6e90234abbd974e4c339e1abd96757929fca7e66e634a36b1e0d3303a1ad8e8fa6383b6f28301b23e752a0f12e2dba3e26829b01d8180b772e2f2be62442e91b19d198bcc954c3a01bbbfeba098e643f253135873992fb3dddb9ebb4525a4af04d4a155475c34b8d1316a6d57015b0449f02385453a460b7956827d3b22d5b8021159102330c9354fbbea1f8a4d13ad77740603c0682c7455812a2d37364e38279ba81d94163bfc5ad3e08898f0d16ec4daa9668ab9c8d75be56f4852de0456509a5053d5a8e5e5572d141d1c25567051087dd6559bd752c03ad6a663a0a4b1b5462d015cf761f149a14cd589a1a6e4a0162dd5b012ac265a34e5a7ad1f95c660b39cfe64151e49db00823cf9341441f7037a54b7c948ca753865fd61b5e50d11479122ab65f6b3daceb48ae8975aa1e940027f9468a49a4f54c83f563968be6215d0f03f39506b37cd1ac9960fbbbcf606c71e0a3ae697729a7d2f212f6bb992fac34ade9b324dbc75ba440168116225d3dbd9bf5be5a4e07ba89f3e806a16ec5ff7ab786d51be56fa1d9de4aef2efef2f20d86250e8a080a0e76c03cdf1083d1f4dc260ef718904c25c26b0e4716816c85513e595546e19d15e95066ede120b13f36d37db45474c7cf53d49c7ef900c8fe7e346d00b854e7836107e8278c3295e01d9fc146e03b0be1837aa8c38db71e12fdca6f6311f8b1c23a6afa3e8226c7357408c4de60e1d6eda6237cdeea7c4e431ffdb7355a1c7a9a71ec4d1bc121c99050eebc42f0f593098156d3ae5eefe343d1fdbbb795d3985865133c9960814768fead20c2935cc69a0b572fbd2a17c3c137caee86c603dc020040604a1792c7b2bbd36eca455bfe4e8037b7a1e7e2f564759edffffdb6f3fe9a5262242b6dc3bb20ea60e720ff632bb84685c8da2aca35c495158d810f422e8b717d1d77efffff30a39e59beeddc55fae4feae598f1f0ce781da253a767f1a73b338cdff01b6aa41cf51c7e7ab95eab77e7afeba2f638b93caffbbc77fde48ed94b37fdba8ec3e9304e9f3c5cbc625e8f894feefd4518e230ebeed261495d2445852ff00804489ed7957217b82ab1150739ddd7ecf20e90f2f0baf41230734afd85bddf4b6f47ca2ffc92f210bfe0f02bc8a9e220a79c82ad166fb887c34bcfe18e56ae71eaf130edc001cb166fc023fe854714b65aac818f3f3d21601cc64f6f6918a739ebe9d21362e2d38481c7986b9e5ea757f1883f84e6d314f128934f583c7e4b8be2109d12f138f310333e277e3d5d7c836811d8d347797af81938f2e497e961f87af27a678c40f28b635e8e19f5557ae385bdcf5beb752fab2f7edd9992b9c866547c825f663c9cf1e27af7257c3d3de966dc5aaf3b02c9975503c65fa47444d095f1c5637c5e4c81994ff04b7df8f678981e7e7a3beac357efd9afea82e203055fd78506aeb5de31bc7e72d567f7de5d947397069022507ca0e05b447772c393b7f48c1797f1933b26914394bb74d885c344e4b1f41738c829879714555fbaccc99d7946784d9771c7965c7a8c3b02c9a507d1298c2709ca50e48479392ef6c1fed7af231498d9f4eabd9edc11483ee9607ccefa09c4f5179fe7c417d5454a781dc69545a4600e4b8a7a818b40c15abe70098f414e79bee402bf78379dee614fe6133cca585e8e93c964baf55aba2ca377d3abf4aed9c96c7ae9f50eb132564da5cbe2036bfd609da553a594ccde2d9146f7349be83ebd244eaad02b13ac54856eff61b7ff2e8c7a39bcd9dd63c2797a1cc3e1f020ec837ebb4b5fbbf696721492ebbbbb9dbb5ad77987e9ee6117eedabb6ccbf0102b635b26d3494cabf680c4a294ca36f0a88126cb2469f8c9a33849900523696072c3ca245b24c932491a78f228e6ee52b68e366bf4db65e87617ee1b872976f168280ce11fdfbd1f5e0c088f41b450d4b54ec9dccc232263da2dec988561bf6e87c232f36908566a9d750d8fb5de9310ececb6ac2cb33076ed9da2740c72fd84522b7725dd9a58c7b2d3895d582588e4c95385ca74a64595aff24e20661bf2256d58d286d5202a73b0a4b461f56cd0943958d6256f489965421fdaeb5db6835ea9a433cbbaec1bd8de5d26b7acff91e170e2509eeb7038b32cab19088792e330cc1179987aec923b876132e90d41a4e2ec599665b2627bf1f6e2298ace4ef65ca9b4d8d310ab9d93f5815d7b11d7b75b37f4a19dbbcb76efe18fedde6596c9b5c799c3d087f6fa1fdb41d75ebf81eda0cb64ee3f2a0ebfd7779751fd00e1f0c3d76338d04138a6feba5479b8bb0bf68e3bf6c62e57fd7519554b2b40aa886c00bbf60d5ca10fecda5dae6fef3bdb90390c73c48543550c73645480acb5e224b2cf190e1b415154cbf0913e4561f1eba3f4c1f085654ea669e7857ae55afa6ea96fe5172ffebea58feea874bb67346d36b33b6a51747b6d8bdfada4fb7d74fba25b2a95be2a3e12e9235dabc5ab74e96526acb5ee5cdc0a09b589f20d87508d832ee9ca09e7f6642d8d5f62b6a771478d12890e4304fa5cd1ed927a9734f49e5da9541a55111e472f953e105fe3471f7fc8a3f7d02b5645a553f5a3abdc1dae0ed7c69514a57543b00c9e7be5ae4462471f917e1d7cb6f7c76a16131ec53cb2601aee5c581838c42878ae402b7c53f07112a25126241b8984944a07712d95b24c34fa446fe9ce4a5fe9bba22f7b49f465df95596612a60096bfffa069d69e4eefa157aed2a9d1b9cbebdc5fdcebfb7e793abe0f873be6bf7f5826635e8ed185d095b945a3ae1b118b7c899312f9fa5c699ab5ab9f55fd69d4f54b9b363b9144977654c1995bb4bdc62e92af568248bece4257468dfa7e5d7e07b16df1134578259a2b512d7593baa545e3e8fdef96aece0b908c46ffde77f4d2258dba24fad72761995b68e9ca2cf3d75af4a9340426b9cba6be974e67145791f5ec8e7a74bb678a2ebd1c2299f92abaa316499fd7b658ba23d2cd641e8d46fdbef4beb14bcf6e7f74bfd7abcbc2d12f9d7cfd64d24bd9bf2bbd1ca41dadc5dc21fbe8a32b33f51ebae8862e4734dac65bac7d9b0c769246271bf74a8a2a7dfe5c164ff01fbe8dcba8c2c6a10f1ab771171ab7012366d1693476a1711bb781614e51a2d3c0322a528bea2b6e2d427754c922f08eddd817694172f81c8d4a1f95f06847233c8e32e9b2532412e975960e82a58f978e363a9314ca687449675019528e4678eccbeb51f3081ff3749c1cd4cf7afa202f47cf1fbac2c3abb78937e4c0036639852e6aa002605ffa77ed59e8ca5cddfbd0430048177d1f9146fd69317188fef590540f530a8ffd894cffbe8f46a3d1088f26dca4503f84c739fafae25074fbd2e7ea3a85355097140721466f3cee18ddeb317a97febd97e052f7684b3fb9e3cc27df3c1da6377ee987ce793dba3cbaa9f4f93343468cabda974ab654face523d1da5bf7ca6775e8f2e973e57a7f0bbbd0b3c7e2c1846c964ed4fae7d2fd19d994422912ebd1d57265d648dee68e5d1bbf45e52c2b2c5d1785591f12843bd1ea2f777fb4aeadc1f8d3ea44b63e7d04777bc74721dfde071741bb25e89c451cea3dbebcf4aea8dc711263df4d1c7e7112695b010a487ded26d59aa17b2b87bc9dce17bf1d44539bef827f78485aef0f0fb9ff3018fef018f22001e002c84aef080e78aa2ae03008f2a2a781477c092ea804f36f0e8a396233c92dea4b728650463341a8df048c2a5873e3af9e8d213611ea19fe071e6d25b7a7461a43c745b8bb943e3f0e4df318e0a0e7854115178149f6be0f1a78778b4f9274c037bfdeff4cb8881af6fc7b72ab1a18fa37f074378c8954f1f47b89964f09ca7e3f497918b57af47974f67b92c991e8ff018fe3ba749d4e830525e5c29c5d151ae25c5111e433ce4844709c8e4be0bf02078cfcb01d6933b7309cb27a305f2e855ce1efdca7daf511e5d2b9f5c99c799c17fb7a32efd2bfdfb2ebdd35b5acaebf68dc7121e1dfc38e41a875c9974c23d40d225c238221c1e5c06dfd2a63b7fe6162d5e97085f243c6ad777e98cfedd5a5b7adff1338f4a4c32098ffdefe0a5a7a32f1a5d99dc43ae0ce2d662eef03d74c76692ed05fdbb3d9d92397b6b3171c89c753a597a3f53526ffe6c6fa1dd1d358ee5ba76614960f7ca2183151312957606234d7a7aa5450e928081c9748183194b87931266b2a543890a39d0c01666ac007a092b4b07b9c446122578419b41b0f2325baa54957d2d61fbdddddd33034972744052a4a0035224e1e6c49a38f04029a516f8010d9d550a1c2cc1a440c1118a40b1651fe5aa85ae482c5b5612227821bfafad032d2d3c5a6c84b4d12ddd0afad74ad5b34e4a0649007bbdd6cb05d6050e66b29c87e954f7be115bee101eb5dc5e3886479b531cdedac76ecfce71d786aabddcbdeb806d3ac1868e71d888109e3fd3a77e9c12bb4d64af298ba7cf0c820d855edfdcbb472b5bce881e5682f49046f5615aec5780ae6cd9fb40e80a78d1bbbe3b37aa648e3be96abd929d3b78b54671b7bd029ebbe8da4671975d0f5edb280c85c2f068431687c72032c9f484a8bf5e3f2983be070d5891673dafde903bf6ca3dc41d0c391cfa00330ebcf6137d3b78a9023b07b4108a6a5017c29dbdd6bf3b9eaa0c1439486765d7b837aa7d6407b01ed92c2daa14b1a3ca1146e4979ec15a1254e6b26a176af7c5d2d8ea81aab47869d7e40a66b55054f7252d8acda850953c2755d9b26559d664d2f3d93399b4dc20563ee410f286c4b9b1b1ae84b454d070cbd2ac306e9f5c91aa2f8f1a8c1a3bac644bbbac8cbb12bb84703384960db1b3b3337dae325429436e44b0aff24466b3af61ec5aeb06f6c2320c4fc0ba364dd37e2253da2d3dc91bdc35ed55a3d4bbdc0d81009d7b67eedd7cf7daafff0104cda06747cc36640f4b8aaa97c3306c876025ed4faa51ab8875dbb52d16acb4221367c7a688130e681101da0f7225440079c4f18f3e0ce121f7905b87dc976d23778d24a48d2963a23c9c3921e5be1c81b2f9b1e61ebddcb7e6476cbbd5456ccd123422903714f0a9c4c4318490d208c64f26d23f5112f3432a0093614bfa01df17b4a0c563ff395eb28bfe3b8a6e674d8581c7cef52978ecf91728773e71e71129cebbb8730673ba408af30ac0f373090474ea45f4efdd4bd80b02ec9408cf0ce2b16f3f7e16077147989c6515ac360e3002c8a669f6e22aa31e131c687e4e0bb23aea71bf3460c12cbd2a327d6d28d80fc3c94112c589c8ee9d08ed1d07a6ea4888fd47764f7b77eddd63b27b1fad193a6a7425e6540b31ec23bbf722b27b4568476c76ad09d6c747c3a12b19b6dc33cc8921e86ab53371f8e45682d5a12b5245b1d9063b734bb7f49c9606bbc16ee48d2dd36b1a86fd002b42a6a396312b506c09992221539f4cb11fc94465d2b4a8033b52241710ba6299cc292705599836699172980e56c588f5bc40a2e869a093036c95293d767361fa437db09bbccd6419a3652cabb362265b9f299835796a79a640a6fa0c52b4de3ef4eb3330e99938b2ec0c57cbed4357a61524ca3aa8625bbadbe7dfaf257cbebfa56f264e8b6468d229500c12c7cc228b2b39556193748ee8a68fe2e963df9c7c6c1c7943cba34c1e851fe1d9236d58bda4c56ed23f2d5e26682b5bcda4c5948b3bd7a19665fd74fcdaddedf572af295996a5a4a43c8614ceee6e1b273a273af718d2b7872a4d7bf71ff815c7948e4bc78f3149af768f81d1d5a7dcee5bca332ff4b13dfb8fed19f718182938e6e72e51340dff8a62b6c27919158cfbc3b802a4aa050686613996515daa52ace323f352f56262194f2f47e8637bf71fdb3bee31af38a6c31a579ffd47cdde3da6fe47f7141c937529d7fe23e5bf8f81f194ffb8c738e6bfc7bcd047f694ffc89e8263625e3cfb0fed17c7a45c83f17fd438d58ba71cc685b59417d7c50d79ccbbf8bc8b9f6e783dfbe92757fbc97f643f5d33793d261ebd5f0f895880e4c9d6942a9a6ca15cbbf2b2baeb3a22cb134b42cf4c46b9a3d52141cfa1491b138f4154eaa4f2089ab152bd1ede97f90b254409a292c3f0e05b7af4f08eecc1d0f5b1eee2ca1645a492e97433739ec8d6c431c59085a8e4559c925828b2450669c3b24eae549d46526527ce87e7cd07ec35c5206d58f7ee6ce29319b123ea1c89e5e9f09136ac89c4fa4563294de29299543319a98971750223a87bcf78b7fbe9d1dddba2531ea640670fb481b00fd60379f7ba534f47d7e197d0373c775accbee171266931fbe82dcdd333a1b94577d7ca3da473e8ede908fd08da8694ddde34f347a795d866f6b945a7be67a067afdbbb4b8199bb6f37c8f6ed289707cdddbd1bc47b78c4f6ee86df6ee7103f40b608b68b5b9f604fe6c9091ed23a4ea7d0670e952eb3e9ede530611f6ce9f62653e95789f4cbd34122e170e6117e091df499a453a1d0435e0e10169664d05fb6cb5c4b9dcc28edc0d06f06fad6b7ee8e56ee1ebaa39543377939641360a66f6122b27d089d0357593b3c3c6e0785aeb58e843c5e422f793940ef25ddb3d0b33793d0b72ed4751b0e7964d04378e6d8ecdf9d50b4981d74e72a09b6a6b2b9458b59f6a6a12b93266b9a9c7dfe64cfb2e3e03881615acac34d68363645ba2debdba4e99412d9e576ab0950bf5de3bebd6b0270b748b8cc530c03235254f61345659f5885a2b223a100a93a420152d55c665daaeac7532682a282a0a8ecd8952a2cecb9ecfa044251d9b30a5054f670fb0db75bef5726580c87dd85c30e874360ffa1ba5e71b8bd6f9dc37deb3fe6e9287fa6ca7a865fdae7d2618a96b9a98df5e9613ccc1dfa96bc73cad325324d724dd992878f3216a54b589d9232d8ec95eca1b2a7070bac6b915e456258854ad9648b2549b65092e7adac939e8eeef6d5b216c446d80f197b0f8d6118a61244f2d8abedd8fa962682ae9cc0113d51cba2d613ac5c9265f64ccf4c18e6098159a5cba84c57a12ba185c322ae8bee427a09c31cb14ec22c2ed745176198ed978c6ace697942585862ad450c5f57d86f6294bbbdd80dc242574a254cb1964518c41215b2577b055ded5da722207932bda58d897d4cf2a88e5858b6d8dbb6f55429639c57aca0568dbba583e3ae7378ec8c3f7f71787bfd985527580e0fe9adbb78581573dbe4669d73627cedd6f16504b755af3b776d482f61e591256f3dd06d67c3a3557bd45c310f738779ced3115ece39b7cfcdcbb1d115235c5c37c285ed7eebb7ab4c1cd636f62b0f1387f6ba7dec3ce912b98e8ddfd25bed6ddb5229dfb0f5611eb3fe1ad69f9787b943c5e177131a995eebc4e38eedb3c7f6fa8ab93947ba44e61e729e8efa895fe6f137af07e661ee70225d638665d4181f7bc89c0ccdd351ff92e171663506d6aa775949729df7faeecc96657d3b6ac69887b9c385e73d0c6c5d95b983f717973bca053d0cb13c3975812dee39a1276c2a8d40bcda8674777fa36c1c724d1eda3b3cce5c7bc8b0cbefdae561eeb0e1b0bb75ee14c396878963deba66650e743d1dda5fb61e5db6246a7b4747db47962cc58d8789439be738eed3cbc1757762356f9fb5eb789838ac9e1f8774ae9c4555aeedd93d0ef7c8eae97d8b329a9ed21c32fdc4639d9d755d75dbeabcc6c9e499611eeed843b6acd325644f4d62cab4cd5c444181b668374502a574cad0e6a49df61c5accb22a3fbacaa8d55a5fbaf67ef7ba6e9fc05a3990dea750e822d34b0fe151b3274d16ba62c2f38696f0bcd1eebcf442afb5e6a873e6d11ae9a81f65707210c9932d3107d9b3451d7aa7c013714b462682aecc1b8aeab7088ff6a6864422914804ded0e70dc55614763bd7d273a5bd2fb5833ced9d86c77aea5d1a44f250acd2e20f8d9abf326f06f4f566a7d34380cc98c41493b407a5d86ab1a760e5087dd07727a25ff1b6bd7607ffa33ef4ee60056fca12714161b75ba427e43ce109354f98c9f303595aa1a44956b2e433fd8425457dd8c3270c737a885b28eadae5692d6aa72b271c7a1a0e3d130ebf98f0fb3eec627a886176b809c3f0f093a6bd6201800740a545ed989703040ac00d3500dcd3c3ff30fd38e6378931210823a100a93a8c099f70a85dd3b08be9c730a79b308ce9618b084b150fe34908d14b3f5d1995e986a0837ec2304740d8e5f410c300e0a7c3ec70d36554b68930d49e43fb0f1519950a117f78a922e20fffe30f71cc1197d3c3c7987e1c82fecba87e84e7e13ce098d3431c8230122ee18f61422c294aaa5afa520500dc425120157c44bb54edd0b245fb166a2fe9a62b55de1dd2b974ba5235cae4129016adefda7300604ba0c48a2c6eb2b44289923cca9f26f464952cad68424eae5287955628319279c8d28a26f858a1244996562879228ff2a7f372d498716716d229f116ea3372780e367e830ec7e106d0ed41da41f7c41e74cbeb91720d87a26b1fadd10a450789f0497497168a1279df14819e7247d149a58340b731e3a819d74e6e35af8786c3efda53eedddef0bbe8f6c32fbe1717612fae4f04d2e127b82ab1160f69fcba75a00b7ae61d4007900e6f697b477b10f68e2fbd1d3a1c845f74f8875f6c1cf49606e1219d75c0568b39dcc3e390ce364e2a1d642307ed340ebae138600b751a9f9e10a8cfb8f484d0f03833ea33503340d7ec356f863de81a9ea1a1f01803d26680b45b0f8f34666833b0781aa77181cc1022a4c6356dc669bcceb842685c203366bca56b0d1ccfdba1e1ef7b950ca8717bed625e0fed1e1e652ce8226f87f62fc6357b318fc796ed312f470dd01d61b2d4c451f418d7aec52f35feddf27894fe9d7a3b6afce452e38e32b98605d5a8f1961e4578084dac1a77fc2e01990cbaadb20893f7132ea285a2bcb75094b53c6a2ba8b3f7bb4866edcab8e5e11376992011265d6ae390ce354e7a8d2bb3ad816bbcc62d9dc6bd3ee3ca2ce38e4332e931ee08934907d2a96b45aa30f6c1de8b8774d67e04d5405de9dac5646041789c1904aa80c5234cf63c4fe4e1d087c914fef41813961425c23f4e31213e457927dca2d25c842e782bcac56ebb943db9f5721c21178002c3073d78177a10872efd100eb5d35d4c3f499509879a875d7ed34d1826049dfe23f4138e89393d8425fd11c6981e62d571a8e18338e6884be8e06342f0e1431c13c220962a199548e479deb5938b4e4e2ec243aceca5e051484eb161e8233cf81f2106f10f79141494bfb897637a395e1c8628bf78ca1d6d4ed1aebd38ca2bca8b176f694d035d7b06d2ae5d11d63e219d7a714b66209d42b9f5202feecc1a5d018f82728df372a084b785a2403aa2838e89b04a8b43109114758a0261d922e88eda499f1e10da6db64674cabbf5aa69a0bd76f0b6dc962d92aedd718825ba43da0506e23be92d7d728910822d95166065edd689e8d4c9ad1be179279d68597a9a868758b974472b6b37ddd01eb4a6bb9c6ebabd09c31cb1d8c574d074188b658b5a0bd52e0974bd92e94a55e9f72e4424ba409ab0a5eb08d2a2a5617b10a87467f62c1ebf832ad68580b4687d7483b468f10009625da4696f7b6ab50fabb4b8dd6369717b3706d15a94d625034a62b69544cb64dd0dab9e2c9160061f12ec18612709b2b024c3f8680951b54407dd219d45b2678abeefc32011d65ecabe39bf0b0a0bfa4be9a27b9fa0d797efa2bf94febdfb64f26bca4a193c5aa3b7f4371abb169af261d147a3d1ad4aece84d47e3ffbdfb3e3e7758a545504b3f31e71d254f49243a8c2d7d0f5d845d4824dc4251df774d8ecf53643a4559bfa8b020d11646a47700d1077aa59d0c2afa304b061d84a776d3ad27efeec9b54e7daff36a2d7e4f394e2dddd21552e8a72ba3933cd31f7647b95485c27738f461efe23f4247c131a487ee02c71c71213df498d3eda5cafe748afafe9d64ef37123d88e451697184595a1cbda553ee287bf208a76817d9fccdef4374aafb95c9ed692d7ed3cbf1950ec2a39541afdf059d745ffc7451eee2da8737f43a534e0de05dfc6af27678f3267c18afb4c3a32117494f87e922117e11fdde845f4687717c671b32e7ed181dc6a767ba77671bb209df99db932d8aaeccdefd2fbd1c1707d1a2f5dbd2a2f72a3d111e61b2c8345a9de9ca9cf2d195d913e1219d61986060961412e97472b13614724015a72b09d60807bc7881829204eb625dba20404880f0f3db10445e1ce5d31b8208e9277b17df40e8e1a917fab0777197d00bd2378072ba1d7d3e1bb5d0d33d458d1e5e4b512317575214e88e56feb0d12b4803e1d1ca5f0bfd6efdbcdb4b77f4cefd04bc088fb2278bb620829347ffee2879f277ad53f31574b51667e921e821d32d5d094b780822a7931e8270e8c33ef423a5c39c7008baa4a8938b7de8210c43c2e1ed655476fea242527b92c9a28f6e10c923125d2dcb306e72ca56ed0e2683aaa52b32af58d8d0eda8d1151919950c618b555aeb948cf65deea0bb0de97cc1640ecb21ade17087d56d285320c1526a593ab153d629cb6bca56c08269914ecbfa852d3c67521e16599895593f484bcba6d3c9554eee35ddd205afb4582e1deb796f6991b68db68bb04ceb0aea74743473a65316f6783a3c8934019ec32c3f6cd7755d3fd0d0d5d7aca1a8ee179d351b1ec573160e82b2646b05027dc3e3fb0289e24334883c3fbd0e539a23d871faf8501f4a59b2d5619ba91299febb6397bb5b77bb4aa7701096dc7d3bfd6588b63b754abba3f4363c1a315ae3ccdd65a7e6b90f913724932ecf9fbce4f6baae296cf7b179789ae73c968230eeaecc571e9b671cd2db1d7265cb3a592358eba3bddea9ebba3a5bd62ad324a6cc67919808816874a5bb2df4f2ae0539e559df54d8f917975e8ff92bfb8b8ac7aed293cbf2c3104b870c1932b24fd3a7e9d3f4f9ca7939c41a4374aac6adcff88c1b8e83f77aef97e78da730bba769d6eef03cef3778dec9e76f78f2f0f5c58bf004ef009281b4500ff33ccfbb9e777937dcf366fcba0107ef86191e0e38d4a851a3460d31fcac130f71baf48038b98823c393937be1bd2bbe5631ab350b33d10bf18bf813f12df485f77272ef5488cdbbf4bc5a31af86f8c5fbc9c9a7b7c3fbc96b7677d44fcfbb6278773c09b3cf0b247bcf6e8f8a658bdee7aff09e845e78c724f2c9102d7a27338be25ba8784d8f71471924b974ec7632baae935e7d967161e779b34778d9a287c75376ee6a1475852dd65adf42b35a47b73b78418e43415180547138e6c810ddb7ee28184646354448e3dbc30b8f3213bc230c333a8763b8930e033ee6880b77d263502efa76c3ebdb854f75ccfc03e51d8e697cc48574ee14c7888ef283fb866348e7704b7b77d4b255410c23a38239721d7cf7d11dbdc33032aa11c7755c8715b1bdd33cecb2bdd328ca1362def4165a3fbd1ca56b17b3705e0e136e69b105fce8755e21d8c79927cabbbbd0b8ae7718e6483d8ce81593de618da2aef09d27c47c863d0b2f4b384449a464214296ffa1535a96b40794c494d12c981754cbb29e25c5b4f94bb69801ebd86ad1c26e6158b32c1b051ad61ae5e9af5b1fe9a53cbdfc0badd91ce9e5af8ff216feb3ac5bca1ba37529af7629e50d9a4729650a09dac39a99696f87f472482b63825493e70ff5baaeebbaaeebbab0672d2d4e962d589965be98580f872edd287421912ea31a5d46d55d5ab0219dc9375c7a396e50821db57c21c1d95b68df1187571c7e611d6aa4c0b89f91611e2dd2e23475781c1ce884bca109a00a529cbff18ea7ab824c812990a276b3550a72f8cc70286a6af9d2c26a94091bcacb2a73689d16eeb832fd95a99d160e5803dad00c584d6a46642875a2c579708916419b2c581b46388ed3e84d8b13bb92daf415d6dab1723a653f6f3d61e1c81b333e6fd140de20c0e7ad1a4c1c05f8bce584bc1163dbb6ce3b5cca1ddef1685a96ade40d1c9a21d1309108c330025ca4fdb3a12b600d7d7d155d99eb8cdb7966b046c6abbd14495328620080070000e0221e62d027a48df91822141b03ac91f14a803b73016e13a15b3813a5f2a972918a0a01680e084073ac2fd85132f971ba5c65ca236d18b1a7a17d3b40cc8cddc3e100ee1d87a87b9751793874ef322a19d5d643453c6a34f0682f8cad078a01dcd16a5485859385cd743a35e7674351389d42f97ce644a7627cbef8fc8b6737f2068dcf672f9037c0cf673098387e9037ec2d1cea3371604ce46783614a35ed08f014c3984c1cdd0d8e0cdc57a5713bcf9cdd7c36287714e38e96e0a43effd9ac7c7a5ea7563e761e3f1b4bb39036e62d8d2b738c6be9605a3798e2bcbd560da48df9ec26009fef6e7af80cc0ad007cd47af80fb709172eb09c281fae651f7cf8e64314c0114f76435113ac195551038f2a62ce60e0f1178fa79c1d8fd6763c2cb2775ad4f1b4ec787aec781a4792efca7ce38e5916001ec1235d30d264a56219db8ab1797cb86353d1c34582e6d1c219ad1e20716537635b9147c964ecb1a9d8e12271e5d1c2d1a15736eed83939873b6645808139f263828107543c043a09873b5e18745d57089dc99fa27357741dbc5eaf0ba94739f6f684007f3da3b7c7f0855fb263b5b91da1f5ebd242ebda0d2dbce35776d075f0550a40275fafd965c61deb71e130fbb5491b63056c6cd8353cc6cce4eb967519d92f2f8899e9395c95580c07a13331327a2dbb5986fb319ee1177a0d5f77c4f0b34b2c5124b65abcf0f8e12134d763f5b35e97c763b49e69bf2eebfdac5e59bd8e65978647eccaae2154081011d86b7217e1c8e6b867f5d91589b26ccbb4ab6978ccac2dcbdddd5b8bb24c746e87885af7857b765a4574265727583a23e37d293073c52f1e0fbc233bb723cbce5d021d33a3ddec6e5dd5211ae967640ee6278fa0531c84ce642e3b88cb22eee2cfb8a3057e32e832b020dd5e8e18f393ced4bf649f191f931eb67d4d90e2bc761a0df9bad62d3cd299cb0322eba1fd275fdb2b9df9761a0d5f13e41639fbfcc952dac06310d0a5b4711d54f10b86616c8c99c923e8180f9941d9755dd9753d2557ecc2b0acb3803163451b68400966d4dbd13900191f74c3d56acdeef5da4ab0d91339cbb96eca751a18d7c8c40c95a164313299bd93e42ca33319d39e25167fa43d74498b53061eb51878b428783ca1f078b1060a1e6f65ff7eddacc60c19316acc9011c3c596bd85e23bc7189afce1b17ff235c6d0e4b734eda14b7ac5821cc7358fe4de3a74a5bba1a879ee9da4537d8e3bbe336333b9bba12bd447e251b3273c5e04bb1b8c0945cd6bd69e7e713ebb49391efb2767e7ac577bb1cf46c64191ac3bd767e051bb2e038ff6ba8ef1f8eb289f8dfd6cfecb8466d6806cc01b118ecca12879001220a12899ab0b498508926c3d0d45befebd3d20686e0c45bef0981dd3467b9277bc38624cf2bc77bca3f626bca7dc91c341fa27bfd0ae092ee1049be5d0664837033f917012bd06286a42a71ab019168281b4483360c38f9289901aa9fa76443a74e54ac3cfcd8c0d9215a833823c600fe89327f89347d18c8826cfcb9a95084916e5e4494538a29b3c9f6557f69addf1dbe978c6ade702b2f57c3b740587153a58a9268d0f166c9619c14027e48d068d8038e01189a3e3a1e1479796a08a24f8a81a0bfb9c6118bb4cdf138af5b18148046a824e16392ae9c9e3ec668a4478d44018c40d052b6fa0e42957be1d8a62427b410ec015a8c4caec3d64d30420f5dba12b40987c3b74c5c2a1a8794db35686e043e0bd8bbe0bd6481b930412354f83fc823c0f3291e76911d175052ba42ffaf8ed84a083ff90600222590059eae0cce43abb4dcbb0cba27d11beac60679ede0e8b25209385f465b2e8e0fd41f24ec2e1777f780f6198068c018b2ef4cc809715accce0fd9571062be505dec2196120943443a24f89c9053e5db0660bfbf1b41aec28998035793edcd117bd71b863b464724b63d089d1d52e88031ac1011e911d0f057190e76b779327be7a6cf611acb9b0ad07c89cc9f3e155053b43172f74099d741286b9927043851955085f54b0dc11b69c9b9e9a93060ebbc6ec26a49b5563d3e5e8b4e0073a38559cb21b17efa11c5633455022054bd068e8c2ec00852866541e8e55cf08666c6a9a88c2494d9335d494618928689d4f16ac28831ad4a0b35901e43393841b2bcc80052b6c56ace186cb59e960eb990183156bb8b9342e745d05128e00052e6853ac5cf09ce933c56aa6268703d8755d2ed0ac2cafd80113a79a997305106a76aed0411211dde1a16fe92b76c0846504a4e3822952b0c2ae1d1f2319e5b21b9082a088f6d01d2a96d87ca838810640115d69610cde9402163c9a851b63173573478a13acb40e18d9e1e978e63f259daa1b16b62b6c3d60cdb72381c825d89cc0c22cabb91d277ab4e06676b8b085cd56631dcfd6d3296d666626cb25d89c20a74079fe9a82ed6200036963bebb993bcc03399d2696a32c77b800c5056d286abe31c093458b3374ec5aefaea7c5da17bb77439f9e85c14b0ad63a564d3349fad234adad9e2aaaa0d1dd2861036320f928610350683db3b0a00d5d197d1edce914f8795049a7449f07793a453f0f66d129495748efeee2f3e08aae9c7cda7f200f88eb9b76d0894e81487296c0c9f3600d38a58a5b451184d0ce2a8a9b1bba696d7d4391a8be8b9b8344f54fee0f12d53fc9c85d4a923b4d5a52ecb785031ae9d4e43e1f84c7974703b838206fe390bcd54b0f082b577c044cde36fcf1b438ad6398f7966e22741dc3e0128d9abf9eed1d411c10c908ea70608d149a76595c9fd84a2c57b21b89bae2dbc9dffcb779c4ccd831aa93b3d31970a4aac36e9a923b5cd8c9b38a5e11adc0229d92549c40499e974ee4521e419b9c368211be9047100998244ff026cf37d6dd04e99495e7fc6c3a35ff15e914d6299ae72f2c2c12d6f8ed5cf8db91378008e99494f2ba562d56585194ccb7c50a3a1425f30816e9b02b8179b5cbd51566b2f47470d88e9b3720428080359f4d9e076f3a356637600db8046824cf7f369d1a25939b4e8d5b4f660448908e47d3eecc72becb42eca10976ec78f27cc7d329ecf35d16df677d3b795a38797e7e5bd2a9e7d9935d64d0411eb79e3cb31b2cbb9938191e2d2479aef25c406dc93eea15b086a2e6339ab3679f1287f6ec56a7ba4e61cf6e3b85c9c87d5be8653981ed39c11aba02a451f3b32b58b3bd5ebb480cb19797a34e4bee90ddcb0a2223778ae21f5ac6c42fa4194964359b3ce08211566086d9ddb4d3e8ca255197a49d172ea964e36a0ea35e09027b1019f680d09c3aeb98f41254721472cb5513260d5de953d31a1c69a369d0bf680e26ce2551d728814ca714b5cbcaf42d9db2b04705a6838d6aaff44a4db31693787ca618b765f219eb34d41603689ab5a7d32f8a74d6d0aea5a65372083baa88e387a02bb3e6c2187358c5933bb497c8fd59a389d6a76b6460e7148344f5d1907ba731e0c3d1cc0455ca903766772b9d1ff2dcc9973779ae598633481bf38787278ff30c659038bac8d49953c7468cdc38337a75af67d8bc2c0c7bdfe0d0221347afacfef0aa48ee242df66ae2e82a66929befd3ba0a224956e606645731714c0cc81dfa63ebe42b660834206df4a78c1de56a5ad8fc014b3fc3a30a0dc4f9829585291eed9c5564b3aec1081b68724549d640848787a7fbab97b4809077ec214b1b3ce7fcae9c780a620e44905e0ff644810f995e3a382758e7cc9ca1094e1ca2894320180a85422111888fa06d68430e61cb0c3ba852c6687397c7cf31d8798903fb785d9dafcfbf2011eef8f2f52f5f4d5c807e88959b98097fa82c4cd359da29a83565658b13fb35c20061bd56ec17f62a6f1316bbf4ac83b0bdf28e32234cbe0860318c6c1faec3d82721db87efb27d6821a4102079b55f977bdfeda14b6faf54d5ab93f4432420633dcfec9b26afcb4c5e12873cb0472d9a2bfce4af5a92025d95d8d1ea21ade33a7ea19f3073b42c3ca4f3c4d79c6cf0c9198e132d4a4d3bc9a316059da6a94ed8ee594224cb2ca380244f12440127ef902709787eb2128dca9e8146991c029dba8742dfba83ded7750f5d994c98d0286183ecddbd5d9b516d9f4c9858ef1361619aa9c2ded812418403055061a7992aadf38098b9699ce852b2cf17cf4837bdbba194dd664eb9339f4c5db75dd6949d3c330b170fdd947bba2e8e809185d8f00be70911c22fd57614f83e04e5206c3d214078dc7efae99f2784073a0824933b1747b947c0c82fe165feee113072787b5fb64b0fc66bca6631ded2ab242d664a38af4728e4f500bdc3e3b86109c8e4efde41af9b7727cabb574f08108f1be71d74d077d06d9e9d16b397d0edb77d5bb5816d264b7a2ccb5ad195ee414141c190e090be91be3559f23df4ca75287744e134941e94db4c5050b8253d4cacb5d9872fd23b2f4713f4a65b5e0fd2373c925e69dcf27a6cd4ebb17dc323084b4026a31c14ba32341efa841843b7b73d501e7a4b838e82c7109e4b66c8c042936c1ffa912e04c44680b0c348fc98efffc031fd8963e6adc74c7cc47b4cdfc247ba836e5fbd2b3d213e1e28fff0cb76944b0f7c4b779ef79f47e91e7ed95e7af796ee6adcce91f9e4f2f84b18bc3cee5142a33bca648cdfd2348e793968601f6c0c1a317e73db081ed23aacc59f19e390c7fd7f7123c9b2ad573e33339381950f5c45bffdcacd037ae8ada4533b15dbb6631bf667af7f68863c7b2493044b9ae44982254bb249822550e4933c49b0e42687baee77fcbfd0bdadfbe6f5d824209343cf3c21bc87defd7df3db38a0cbecb5ebfe2bf3f60de43db4e1be699caebb56680b61de8e6fc7f7101e3d3c97e09964fa5054f6e353f50c45cd1f17b506766c1a264afcd4f02c91c446a78b746a9c4b72f62ccbe6b34f2673bb7545f74587cc300ee3d4f321558d65fb304e1e4f88d086674f8b1d7ee9be6d07757884f1109e4996740a06165d49c89e7229d0f9e42f2e05a60e5de9d075ba2a9a26fb435886beb9e81efaf6d05fb67b53a7c5ec3d636fddeed87d9339f4d72b06d16050cd0567ae2cecccb6e8952fe72392dbb22ccbca9058394832242ca1242df64cee7f3974452392adfad90f0b8b8a8a28fea7ee1c2b2727b795b3d2d9c9dddd19128aea904e68d562bfd56037cf8754d54b2b842351fdc64238b91f5a7588634251dc4fee7333b586aeccd66c4dadb476adb54e11684c22d71a263a48b295edc9cd933b43a2a32f30587a508db4d107d15054ab34ccf55054bf4134b9ad24561a2ca73331b7fa820db1cb0c490645a7ae37bdcd9d455aecd13a918c8495c7cccac982206d64f3669717ecc8ad90e4d659e59b89d3053b72abdce7569d0af964194393c130551315fb65d0d7bee8f551ecf765889da258c46fb12fdfd2f9542443924cfbade24295324679063b6a795e5445454543170c23df97518da77c9ad25e66b0a34a9e4358434815952c7bb28c41e915a14bcb8871ed1a86e1ae5d4615e3322a199751f5eb2afb8095e10ceb02517a763ae79c9bcf0f8db53e6e3e4cc81ba03c7da541b03c642905133f5b4e070a90659e9719bccca3f6d399e4e6e29bcfc421b3a63391606be6359b4e59175d50b438572d622fb626db0b8c72d1af17d871f39136f2c65504e5a24f4f4767ec57159ddac14679ec171316058becf671cb5981b52e9218a646ac1d30f8e44abb2dcf2b532ff4814fe33f6a5c3cbd3383405a7741377517afe98489d0618277d05dea4faf18e8de5d40d8e58481e00a50d4d4647793fce96e3a774fd7aef7165abbbbbc1c4368072fc50a902a0d13a9b31e5fd06b683fdd7a1ad7bb784fa713455d8d09a7904e8a7dd46b77a92e268c85059d3b8d8b1f4516161fdd396c7ac5c27a3f1dbfc64716efa7e75adf993a5307aa20503575a0b7d08e8606546f01104d077aad55c334add2ce61221c20804a3b4dabb89b6eccc94df72ecc1197fb138621c28102a8bcd34cd5e91787148666aabc87f45acc1197131cd29fc4dc777739b9e9179f6098d3b9c378dd5ba8376d261bb204647213a102a4aa3b8c5ca92c60ba055452d56113a635a72b55e2ad71f1cdb921c513070747f4cd521d7903fb0cdd0a999e7417d7ad6c59367966121e2912367b478a736b84b421a31083187c5430da6192e09e04b5e159a9387c24e471651955b8f96c4d80d81965727617322eb0aff66e3ed95b3adbd9329a4578bcd030919029c5f0057e6bc20023e48dec14bf6b3a75a1418a97cdf59379c0621b924e917048ba304db2fa6e40d29ddbb4709644083a79d47e406b65335e81d02e18c440ded06260250cacbc13680e212725cc6479dd60c0c281d59171610aa0829f1d5597640bc98039851194c832673a385064dad128b84b2ab234c2143ec815eb3a0d9817d213c11de4fdb2a120efde63b883681476e472ae1bed52fb68438a7d7007bd08ee205c84760ff74ffb5c3eb63387254569ddbdf1bab970ae1bba523f7fd15f4a297639f9c530a79f9cdc846554148fdb4cb6b9198d1d2f9b303bb96176d0b930fbe9dc4dff517fc231daeb4d38e6888bf68ac318d0391c5a9f99b5eedc69916767ee8c2e1b796de230e31e03d20efa0feed505f45a2b6e109ef36732c142c3dce9c7bb30dab52721230c53b83073045c58011355f7846ddb36d12dd75d18ef9d0545cf0e565127b2966573641db0e36573d9746acc768adc5c46307850649bd0709396a06d9fb904eb53dfddfa2460d400074755773a356a3ada4f9e3fd74da7644da826a45ae9e415d2b16be07bfbbc904818e9bab9924c17a58f5a7631daecc245fbfccc4bcbc26d8335181b0b1fb1a58f6d6351f3e155e4baf90e77ed31debbae8822dab3143055b55e1877ed2e1c76f1707758d3a1a8c9e550054c958641dc3e2d5213588b65fb8c9f8874ede4f96fa4353467bc5e90494d54dcd2b25ea91265b37f5a14e7a8d5649babc874a25363fbd4684bb44fa744b40d2010885ec18ed94ea6d3a378cbb1382b059c65b59f6d46e679d9c81b5f9e9aa64357381c66f7b41dbaa2e130c3a1f61f9ca7bdd3ce5daaa676dd64970d6deeb2f1f184489f55969771a52ac6952a4a9fc7cb26cb281d727de4726cf6790e89e6e5b01712561e82c3e580566659fb6021322c442e21032de172accbe6c2c933bb3f9da25874badb4f8b5b93cd07a36f1f1f1f1e4d68a7776bd22b3edabd8a346acabcf974cac25b935e9197cd68a483b3e4b2b9989039f0f1691f202e9bd12551f397cd88c2f4a713ec33f7838f5c11b825701fe151d3b2d3f8cd0845b25b560c36269129bde5e5c8bc4ee3384db3f73a0edb68d7e613ca728a244c84e85cad9da20854d02d677b02cbb1e3657300f0a3d73abb24b2753760b71f0c6f3e67b0f4e3e6035e994757f7b4d84cb8cbe6e4e1ee051a4703abd122f632498f9565f486f434a396c6cd648ea6995c5808668255967766a4ea1f8a9a3e2dcead498bf3e0e8d6867ba245335899392416e672ca60b1d3edd8cd76324a965324792283d6278864924578fb697156e9514c817e096df6d11d438b7760781c9d3e3bbdcc2d34bbd647438e48c91290c90fb03e3388c960c7cd47d4c4e92d8dad2167cb2815ad68177dce17ecd9477fc19e5de4435b9b1e76fae6437bf3e9d4d6a4d2d0d5763af55df0ce6c812531ab64aad55094e57620552958d3d16ab81d6c2f400cf24e4c2008f2765a943d990641574e99deb3d015efd474b71c8a328114e7654aabb9619de2ef974e6b3b5bd8ef3a7e3413c854d60429ce4e653b2dce124ec12ff078c2b70932455f7c5efba12b2eacbcf9d0952024ca22a15c520b87afddd5bc1c1af8da503d2abd214c3b46bf6355624d8701dd8461bc772bdac31e1b43cf8288b0cc7de329e4317af6eca34f2fc7088be885b52a9abbdc13cde5b4388ff9d89c1b94483e241f9f700797e9b99c3dc32f8da4a1c8df142b2c98b438bd30451223594221cb29a4a8224f218513594e21459129a24043aeb4a3d40b9d7a394a6f2c2c8784ae68f530da435a314c7d87438ac321384c3355dc6576b9140314ca60821010e14001541c0e29cd548514ff88d1cefd4777ef1e8ea9ef2e55db132dce905eaa38241445b18fa9e272541b922da7c5519e5a36b928fc402b8245429e276e09797e23835cd17474d490e7e98df6b39d5a4b643487e6d8d3952db09a132d4e5249dba935883cb216a869d69e4effc8e58c2a96a6d32210a45bda4e0f2cbda45a1597a6d3a91156ab976334ca865c0580004bb6b0f693e9bb99110de9e35623841d59e83391a2e85bdaf280b070f611e999d5a4c5202c213d47713d873b550d86d34de830cd454351b30dd65a3244899d79cbc170369f29a480626644ec78d9584c7c5072cb282d5d8d884e8bb38a1667e91a4da742f8850845148a5c882e822112e131084b0e5d9bc93460431fb5198d488bf33ff345e8e230acb5d6de051ec56cedb51aba7282e7b51dc9e4844d18047a6007829fb2b399479ace2863a30437c1e9d095ccdad3afe9643b339d227d5e23d21609238d48241289748e256b3f74654382c7837814291e554493c5e68c72bcbfc335a26949d6291e25131f53b5f964c08e5ccee472e48dec33c352daa0590f12338f5ccef693b39e4e8d961379ee28e914889be03e9ff16459501c4432c94dd85f364b989c7ebcd024cf6ce7a26992e7923c3f663f79fea2a9f9a1d70c6d6231e99417ac259d1a43ec325b99cb91375e321c81ec94033b99cb81bc2197f4aac5499be45e49b9e5f8f870333db06ac661ee099b7139988f1db99c3c3f6b95a7653991d9744aae32e83a194e96336648f25ce5d93359e6f1b2d974e68747adbb9890a879efbe80ae7434c8f373bc7290e7d46e985daab4792becc8e5e4704f742a87ae5c9a66ed6563b39c228a2de4f1b2699d16e7b9db3bf352abd1b41cba22555bced8ef1eedb3a7c55ed2a275d95c451a35371f9b1fed67cbc1b69c3cbff9cccd47489f61a63160bb97544d264b82ca68495cdc54410daadc81e6ccc846d2627712222da2c0ded0155a43e94d1476a435d426494da7fa72e696a6c980951fe9cc0fcda951c1306b4e1517d0193a43677a66d7e7459136b013f6ccbaf01d6912c3665b18beaebc165d420919b002039645a5070bf7d0e2ecb1314b8b5a967954c973c552c915151545ded0e80a7665d33a49298af3190604ca69642ddc4d39409580012894b87a3ac19a010b6500c2a571180f2c771ed8639c0eb2cbc2e3c93af705e4ed6dfdc2fdf13a87552eb145eb2fd77b780eacc6d2e2250691d13db520327286352b1bb375ecd949766a0bd67ae7d5a6534dd770e8a26952c6487b665633d86ea640f23333c50f443083cc3ae2d5ac808a14dce088b5e5c05b4981021cdc48b1441539d8b40002e88160c8ce50269c600426c010f280c04911c56acedab5d2ab860a4868423b49067a201832dd24a9820a292441b3020a30784e97da892a9230056d28c000043d100cadae15073a1d16e860a545135c5029a258f54ded5a29e8a689191ed05e757ba0b3aee8810b400f044337ccd50f8c683d3e40c34a8566460359fe8a1eb8e002c10768ecb781acda371c985942eb34d3e5b4d8421a6654f5bf9da4c52b8f14e3a99293926c106242c580d702aa84ec3ab399615553f1486dba36c8aa820635447a90600422d3522418c1083dc8aaa1cda316bb2c67fa46da58b935236a28b252e59b9beeee3bb19e3672450ab6c89665f5d4ae95ce9a9c2563a8b473689aa6733a25a9300191ac00ab5984042ed0b941c19c7d53bb561a85cf8c1553d80ecabe200a8944a0080c85425fc8ec069a5a34a9b5d2183d9576b7164dc0539d1b07bccff32c69555384105491e3d364deb3dfea7260cb961451ace60ef263afb68a4579ec9b6fd53557e45ca18225562b234620ca60007a2018da667a5c5064a60b30c8ac190df48d0f156aae988942cf4902cdb268f081be6ff37c727e90f30329be0d4403ab63d030e89bd9b33aad240a534a5fe4746966a70b6cb8d9f1020a7af68d119d923b60a042967740a76ee60e74206dc8cf9cfea463df801e0886ac9bd9d6cd0af248715642e883216fe6ccd5910ce629d800481bf23c481bf22a73073a83474bb57ad28112ba68d90eac6c5146d5f4dbab556bb582094a5c3b562c618b22a13c529a9b1b16f858c1041fd4b9a2b89b901e8f76c286c92441b0add3a27c4da7245da2a753634bf95e75aa939cee34d228f94e8db3d654adb73ae5a1e0b4092ce8e3bc31020a81508cbc5a144bb648ebdd0eba6310943cbfe19b16e5a45e0eafab7816c9615fbf4b89509ad1da4b6794d899298ffa69f36d1f9e36b3488b14644f69bc940d22bd1c13f7041192a5925cdf3788ecc969f13ba8f387431ea0d3534c81066114cfcb317324921645139c21953c59f29493f451ae4eeee99aaeac72e2f9ee75e65c3a73def46a04e2d14a0f5b7c101ec58a4795122661babaa174e674a3598bc7d387c76f78456758f2a5e4894e7935a7531d9259b7bac91e2a7b2896712993189913879bdbbce68592a1e45904e7d0a294d3465e8916e59c44e4ec912879cb0c5bc8e3ecc9f246a2e4a5111abd5c4d11524a6728911d99ada8127295a52c1286acb382551ee913b4e7aa53a34a07ae63a8d48cd305b29a854cd18c040000018313003030140a0945e3e1703822e9c9680f14000c99b050725c9da6398c19848c01400080000008000000808601b1f22658e064e1f5fbf64a2946ae0857bb00e1275a7a420e05b46098c9d3d7c5afa94d043c5b7d68e587d14fcf8dd3e5e82905ff65a6a20f9d2f539c6c634d9b3db603056ba9c08ccb3e32658c7df1143d7fcd191138a75d8d0df2ab44428845432d275a9094d9212f4bca8848e220298332ddff92ad8cfd1e69cdea5247a77dec687b861d64fa579e45769e75d1036d425771c90c9b243d6c8721b81419c218205a88e1f0521b71d833c4bcf8b09391a5d9ebd7261012901a6783071e1dc71bc9de7955fa8ab4c509483e9b124169b66d26bcdb33478dfcaaf80db12eceeeb38f253fbdbf2f62a97053c6960d2e8d334c67921db525556baf6808f03762bd458cc38a181651b51166f44c3b718e3568d5d11d9a835fc8ffc1c154907d38e3497a9e115a95d7a9adc3a657ef9c88cf913a10f76d87f7123f088f7c527857521c9e75343532250695696874f1f41bc588f394eab8bbf83b1620fdbb3707869ff6cf52a001ef88d9059ab0e871551e2c6dcea1bcee948e4fd164d745856f3e3062866189135773759eb6918019924bf1284dfe2ec4485b93aee11a77cf0022af5450bffeeee6ea9cbd19efdfb52cbfd336bc029ef71e28a8145e83736a09e854b74c69d45c013060a88399a2fe1cc1b90300349d885e9165bcd2da6bcb8464c42da6ce8e60671145814efb938299f2618029ba5fde20751ce8d1ad45481702edc26bfdcb6ae4acc7f741ea0627cf44a761fb70ed1c70cb97326fb7fe2084f4cb9033938e40c27a9e8e264afbac85669557203dd8e6e5c02018800bc735235b25b9c7265fd03506e8b2e7449dc692dfd4ba52152a71839192d24b74e81715732ad85cd36129c583ee4bb521b17409b7a7debd3439d0a2b7116c80c2d352948534906d158e0210156108411462e0b23ad1e63d9ec3aa9d3a4507b6e01fad498c15513f92483af75e8028306898b908f39a5a621ff3910860f3c5e622f3307b7cba14741332b31154542c244d336c6aa65586d74defb7ebb27e764bd3fd5320f2e9254324a7649c276f6006dd483d7c9664013b997820510b1e6ad2e79194842202d96d4dc6c01a3e85b69685d93a91faad91e5ebbc839f9e284e3cedbbcb736400b7b8966a97ffbff15d5c45c03e7e59bb4fbae2d0182085b463b974754bc7062f193d383fd4ab834d4b0257101e1a44b813657483f3de9a6989178ced04ddb5ccd60b6809ef5685456e044c33adf7910ef099dd354637fc1dccc6907f353c216b505c99149e82fc2623f027d0b70988bdbb77d83bb09c7985c12a46d783a1428fd5ad13b7475b614533a7527951c3d016d3618522067523a6519125c89ed5b4f0140e274f2897fc0f886e92df711eaacc93801fa5f5b1fcc104e7ddd7a70c374f0b08fdaf072800bc01cb4238cc5c157c915f59821312b61baae91b8320361e9b89fe62f2c23d0d8edf54dc5ab98afd603f46184ab89b1d037c73058e80715aaada830aedc04e67289d8250621dcb759870f644ecbaf923b59a6c64a071c60bf5e42a638153af40026907bf173e6349f03cc4fc089b53028547ed9621ccbfecd5bb5ba1f13f089344e7bb21ea7036639b41ebbcc5be737a8487742f1e213655b2781d7cf658a48075e8dd30a31c8369825d574be2316c4bfb83bcb77f0c912f22deb5a123facebe4aed347e914ec84b2f81db791a5fed40c4980a30e748019e308c226abeaae7e2840e19af62b3a6d8ff92bc17c72bb45ce82581ab19ae6ade8473e06dabb1204aac121af9006cec93fdd5a700af492d79b8493c3ea75b8ccaa22baf7955c2f2c85063d05b1269226c7118f02c8ce1c148594b30005e44b14aa9692564e9593093d9dc4ebd039e003c6ecd593993f39d1434af67b88de48674d8a433458f000242b8abbe34ba05afcde560c2d81b1b148cab836ff7486bae2bb38cd94d988c2d2c2709a29464df381963a0bc1038656530373aea159eab93248acd728813f43f7f3dea304153ed1960ce246d18c3c95aa6a9d0a7c98fad985833d4bf8c4c1c54a4eb043e549d6d102bc0dfefc4f7bc28818c74641581c3a27a502312bf88f3d82027eecdb3b4f5a81f7c050620e46ab71f6be1c1fb8e3869450ebdfac49976967cb96d41ce479743ac8773ade5a79cf9358fbbd12619c504f660721464743a6607f1f5c450b34bb3c830cb5f3faf1d3070053378698a518a8b9474e91ea4fa62b31e6bb329c6d9bf2a3931444da8bbb4eb30801721e912056fdd6cb353b17280db1e7ef70b51766bdc51a59c8e5811e839a58692748b6319c75d9cbf19f57c9a4a9686350149a20ca1857fafcfdc3d4daeb44dce1109dc4aa2921a260bf90869e2029c722153f9f688c3869a3e15b4b711f653a211025411494ffae2fb35eb0933d1677b283c7fb890b339cce9571657727d908ff99f146afd7e57c487cdca041c852fdd49d6e84ee67cc056cc8a23fec98361ced24ca795709a0fdf19093971d984311dd5fa0bc3bebaecc0a0d8f7560db9840b98e3ef4056865290ac99704d1d8073f2993a06abd012b148104481f10c28699325485a573ae2fbdfa1a8c8d0cd5b62e9cf6ac0160e71a77368fe5c0e0c7e5abe9b7bf3ac7c338252ef1392ee1172f5aca9fec7dbd407dd87b228b273cad03d2510a78e8da12f7bf636629c321ef714b2518070a253d81650a0abcdc28911a42675b9b5efcbe35afe90245c8b9111e6075c4269cf0f908bd3c5b4d36a22727abc5cc851c39f1d8694e7d2d7d5003124f32df9026da25791713f7ca444600d2bd2be1e39a2d8f360286e39526e88da59f6203359df8463e435b3d6d511954c1fb6dbb57df70ee0e9568fc057a3cf9a2020e7c2863162b7a95966af891a4580a20599577aac796d08adfd6605f7a8418a9d9536950ecf90d1fdec3ecdebd2b5587d3e27f1fc5d2baa9fcfb84cacd7ec5c2198a5941156fc1bae73e620de2db81569e47bfd2b456f9460f8133484ccb52fda067e25600d91b3ff063fda4426133da847c3b2bea0c159922a6e81a541b5a2367444ccada60425cab25d25d9b3db6c9a9c3bc3d59bd35e2aa51f941d2c4e9e9206d02d10d200faaeebda68797b16a269b00a31fd551af55d00123cde4bfe876af0472139b2ce96e9d4cf99b4140017f5c73c72f9acb08e90156d5c5d5076cee918d70081b08f7dd071cc6c93fe3286abbaaf6a34c6033bb0f5443cabeb4b539264d7ac26d7c1fa6c7e7f4a611dd7e974c5b1ef92755100a17056c59fba1426cce344f312da68906ff0e9684d26b0f31a94d6fe7e1a3e0d0a87e2a51db7ae212c8669d39612738c9da22358fcbb7ff4d80e91299bb9803fd081ec0141a7f126b1cd976727d8aecaa12f0f443692a83d4e721ed3a7ae5dea78104b4b82a99c4dbd4a9eedb846cc14140600f3a01b67915f471c1be58dc6a4b5cee8c9f431f452ad4e7c7bfacf78fa1feeb36aa7ac79bf9db301dfd4c2731ed8c51a4924ab6b414c68877fec29f98b8e92b02762072128264c27c40a8316c0a67c10d5f9ff0c84c06ef66746c0b9b48d30803beac99a6408bf6a0e91622d0d1f3b3baa39d60534490a2a58b2020c33cbfe3399122d557bf487ea9f057e3256564f847cf7679dbeaa63a12b9e1a6dd0a0490f2921a49864777c842b0cd555dac5866e593cf366cd4c157b96d4d670437162bde00e5ddc8e04573a9f83b20bf7e39e530f13257ec9b8d16521b9b596ce27a6eeb061a50c7c5f49267c1c142d06f0451bc966af247d28413131e526d42ff365f2d8d2815605938f59d86bef17f9e48993f488369835bfcac30e5cda8c4683aa4d1f41f0f41a430d5d2626015dba789d8f70f099c9697684798b6a16afe141ee180022654651ef055d8f4190de9411f22bbc65798363cb3c9ebfa4fde77d4c2ce2e3d13fa478c1a635d05ae7031368b18085d328ce1e6ec5280f40b9ee134a1cd77affdfa437e8348e71dd9042c03947f065b7b84a144c5ad679e626a8791bd655dcfaa5d0112b427661cc5feda366d40f31add1f31ef4e95bafd807c2af78ce2ade886fa8dce05c33b8e80ae153202fa92f413bb3f5dc3fce683017756be8edd3f711c76568f7f56ae00c19c68b9eebd692a389b31d9a942f183772f3de6e4faaf8de862265df646fe92c47604f148cccb22d3755c6d2d832b5bec90a596d8693fa09e367b28a7506d6e32f5f059663a8fc861bef1393c96ad6959e9d1229ff99ae588f0c0df56e45c93dac4cd3886ff5a812920ee629cad0cb648fb710a583b4e04a8e67a10aab1c8cd307096e12d276a3e0e6fe4c3de0076a4d7cccfab723518315dcb1202e343285ce2501caa4f9a055cb8e417ff065a1b0ecf34c2222f8b34b2ae8537861be9a2958aa484dd92970d5eb5d0c7206344411c8c1b4674c2bbf21eb08343f3ec564f3f9ffc4e71017294b5bce7372a90d3697c8625b2b08a04b182603470378cf06cc20f668f9b10f64387364af38ff35444901d1473970ccaa2c9b2745cbfde34c313b273ffb4987f9f35095a4b7ff4f847da322f49c8630333faec39edde505a5002edce4f5f84a6c808022c28f532c56acc760a7dbe38550e64bf570cf522a563b0a5d9048012bb0fd4ccddf1f6082887b62471f8c6cfb049e97306b2a3f12eec796a2fee03196b413ccc03e599b1b1aaa9ff3b28d65a7e26841193a4521f0922a02f550f139639b8a60b8e22f85fce0fc93ac5356c89a5f0cc8088c2fbfb0602c01d08418ee134a0d348878044d238eab07192e026179e670759ad82417c186f21d604e8435b9838759b4b4a3fd0b1ac3fa4a383e8d1169683fb6ad2a866d1762d25dad4b0eabdb358e6ee4ccadf35c785d16791966106c033dd07a21428d450760efe11e91fe7df858da218dec520aeeda9b69444a131fdcf7cd14e15966544050ead492ccb759426e3b32fc030163fbbe1ff97564b45895670574fd080c968e80c840988724f93a00b468c0296c3447e2e52e82b3fb2a6d4af001a8075d0ddef9ea7ceed2da8eec042c29783c4c545f0485700b056d187afa60675e2e3fbb1e4d673e203b283f0e78b8fb2fa371450150955ce617139180a56b8f86af89a7ae323962c101b8d8cb67c0aff2f1cad4ccff4aade36818291e31058b40622eac6c4b3a1b9dc8d75d10c79615597d5778f1ae155e53e9e3e04425840d43ff931f3069867b3d352152f90d35de5cb7ae86eaed1743fbe2b481efc92cf9c85b30824700619fb4cf0391f1edc0f0ad50b48c44a3c3e5b638abd9aa5501a36e2b30a4c3a9d15ea1f4f92920ca702146394220559e41e004222ff20a7e893ff0e3ac3ba8937dd560c57962db520df2bc958326939cc50f341c823b78a8b36041a4e19ec7655e932b1718c5dbba8c288104a6e8203adcabb46d1669ed6b31a646165390bcc2a2a695280fbee7614fb0195921a3ea9497cb9dedc1407a208734f05714f5fadda821348650998df231689f6f627b07523379f22dcdb8ff0ffe896d173422553542cc1891ba89c61be105b40571ae46e7175c1bc144697d41b52b82757d20c3e92cebb4229a87eb5b06050ad6f0ec0bac4c1d121044571ce927722bbb232dd6282c2d94a075d81a03a6f13e2a5456dc45eb927cdface74da61308152dba12bebc521697d9e3c14f77f060de0526900f8e96cf910c8096e1e617d018b6404d2cec076e5a17e37650f49d4ca24e0a7fea0f1ed8eb5315ea669c961d02aa9345fcd8ba7648213eda434606bc143562c7730ba52edf27a00418d70511f2248d0a4462227120bbbc826297e21524f6d7860f592be4255a78728e43bfcd99523f653ad24d9c8944c48c928ee5fa41afde6c7c711961f9210255fa6fd023d7dcfe87751bb65b3bea1192e822b44cb2e4d97fb338fe93fa02622816e3f960f2f42f0d5e66605f4b0640fe816330606381ccf2db05ea6e0a36a53a4fdcba89c541d4250c78fd122678a944251f83fa1b5ba078a34f552c8a72b9ea54981a454ec3f9dd572d1fbc60f93b4b43a760c2d67849a1cac22fa424b86cf8123e36ebd1f3591ccdb11fb34d6879fee7719793120b150d1e8c87ce3d2a7e2c3fb7f63164c9a0792c1407b97d04f0f99e6d23b49f50d5cbaaed46b563b8dcc84fb906f9d4ef6687c4cde8242243a2f7ee47aa192dc50d475135b1d6b2eebd36505110b83f58003110812bd759e822343944852fa0e0b5815387c9387e8e04f0586a9c68c180ce4982074ab43c6ce180553c3771c4d9591d2ba3a521ad3bab0288c6a8e9251fad1fa40fdd06e0048a6ff57317c632afe064cb910671f5d5ba2fcbfcd23ddbdf61bec193c9a364e08c74985ab4a3fddbff05d4ed5de0e9a1402e1187634559f8328f0e85344fd25ecc2f8129c7f91deb950d2e584ae45d74a8005317434dc0c632688af91b7a02ec2a088a5bc1b37c630ef5985c54e0977755ef00471ba66937e8290c9074739db50e849283a308a44beafd58586dec35ca9f523248b214fa18bbfa3e5d9cb8eeeeede2e28d2244eb447889d7d9b9708701241546c984a5ad4d6b82045d0d5c7ee996358a68dcf326ebfbce7c523e3413e3cf5528a3197054a1ffc9abd1f582dec4e535664e69bb76fd8b8a9ee9094d3d3a9fa39c798294d3665b5cf541407540e8b6377ad776e1ebe0a2cd0e098bcdb389e062b708970e73b83b70eecbe5a9a907de67a6c80561b03b85c45b745c49ab0ef2deb05d88d65e5acb18d30975bf90eceb8e1bbdcb70a9e50e580bf09f877fca5bfa397a2cb3f02c10da5de02cc8a031a9bea82929f3e7d59d36511ba4e06110c7020dec47926ea41597c3eb70a80d57bc460967b44b71373921b0609d1ed47848a8401ec5b1b30daa38df81cdd31b3696e09de64d0d19fca007ebd68067f3df40411c8c9f1d24fe9d041ad8dff78c8a4e90cf057d204e4c47aae86fc2cff0a8ae1c54c0f3a91123fbb469288c590595a0483ea1d6140bb4ddefc93708a24bd7133a7ae01a99ae54321969004bb416a4cf8bf5d244bb000507d6c557b7dca9c620881dd605b9cce9de62c18c71aa80d5ad1f4a16b64ff63ceff74ee4ef5554b009f4bc5721cad2f8bd2c5c8708e884c2552266f21468f391541361243f058a2254cee28dae6cdc7c5da31ab656048ddcd4694f589e9283e3011c3d5ce1b0260815c00e72c05415dbce0c7882ddc835dd8ff9ccfbdb5c6784d074efbd93ca1e326e5686dbab88c1bd8c6533a339e7059ab9c9a0c8a02456ce1a9b0642f208c25561bfe62d10b8d63de2b75bb1e5bc4c8776db13dd356a3c25120032a6e073de8b159b6e8dd17ea53932ddafe98188385065b7002f4845d9d1cc55cef6e572335d4cc02787e80513040eb2399979cb3a0460bf8be49275972a9b7fd872247309b9e545c7b3503420db515090a66c4a49d642690ca1badb82bec36e53cdaa6b829c953f10571090984c6c2263342e5bde3f0441ab45b5183d0f3edc3ebfb1fcdf0f879597bb26fadfb2edbb1ee151f4be085a1394813ca96ce41db0a431ab6f82da16baa520b182fccf628f1197fceab91e8b1cd3b4ea311dcc2c367e32ce1688796654d6cf5a56a7bd3aa5609b298b3636f2ea3fc80088c4acdb12347002849fa4f703956283a1248b78655e78abbee47e67ad260cae9ee07e0b72e75f2e3ba99ca199e11e936366042dcf4e4265daeb4d0b626c1909fff5ecd3df535c3c0e94df72aa64257e2652a7d00f55c8d6f8df453c763c952ed3c8535cc05d57cd23bde9ed7724da45fc1c309df9ba185f0009ac4ad4feb521f1478533672da6f505415bc2073a952abd746ceb779d0be8862d71103ab2b62e3bcea83faed259a206614592dc8586dae2209f2bc15ed1b98c39f2f5615256d1c0ad2d47d9173eec16c06d72b20f2cb9803e221b5b5b0d9a517e89f26478217a1868d93914d6bcd1bbb2f3d4ca547b9c9512f52a31b3b2cbf6fbffa0ed624549af8cdc4db089583a41ae8c6ae67b553fe764c0ad9d0121d636514bc52543d62136ce38a04b8bc43d0a38031a208a5e1329c3a11bc650632707987e8f581cc9735dffa865001da90cb8583c86b77c51e4fc5ee0ad7f43ea13842f7615ac79c1033ecd76aa54d16f94743d0185c5a6ab50e92a9cd306975f190dcd2439242f3d3b389dd73ac94ef4980db374f1fab50e1701fbef1086a9bfa46d9e57e558f43bf3a155506f9c07dd6aacfa425c734076ae358cf3dc2c52eb801ee22ddec6e75d274bb4a38505e956603088f1ce4d883d1c5c50fcf004efb88785866ed36df1a51dedc2901a5459226a77fbd7d23fd721eecb975304e5dbddcbdd80fd2a1ea42d2c51c9777a98b9d7e4c08dab92692d946ba3933964084c0e21e010d3bcc345d9abc6046ae9535e215a1a3e31df26c70ae14ad3202f0e264cf827c5e167fcd721f785746131c38ec1ba664c286fda09a0fd79d098177a9421b83b9ac3f994095d6fc9552d3e03e236209455a4ef89061aa4c3d492ac16752fb23d0209ae6c1875c607b6164531d775d70292f4db7fbbd5dd2a73b5cc79cc36504a82f0204c1e709f7e58be5f052e756b3fff41d9da84e96b1ba29f8e40770b973175cf0157626d450dac843e778d13563066d0e4176a441791d074dc73eb78180ed0c0b1cbd96f6a702ace3f4298ec87d624c569d7c7828ccc70c8589e459c2c2f4d09165e03d243c1ae6d63e447bfd3fa99eefe2aa3f491d624ca1f4cfcb406edab54346381be0f60339af5c1d8d92e92305e61935b61bb91da9f0259f880fe549e7c6284f7a1b87438e38f31466aafa006cf48cca58007c8814395475ff6eeed78b7e03402b6a568ee2f991a7c2a2797b2340779b251c19ef73fc9b90f8663d4e6cdb85e7e6d659e8285b4385c7a90ba487a6975f06a0cdfd7974797dc8efd32fcb195158c45979f0d2927b164c472b68b88566ec30f3d2320adaa11368b2b98e8c3133b662933c1ae5a92368b7425083881f4c3d22194f1d73263ccb0139c63880bc855e238997c9ebd41b8533a098469cb00b458ef255432d43ed79268a6bbdda0337bf7522c6611b1d55c0f84005f929eb74f1ef1a0ff9b59f074dea840cd74884a037100acbfd8ebd0c0941ce063bafa24b7991beacf068f1eebbbf9a746b4acdb635ebf95abb1414c84e0ba7bd97416df570baa4dbea261e5844f58e80f0ac9b85c38490a84d1c19f0263c621fa810c6498176683d8525612a886e57277057a96d92fefb4f456c44593ff6b7eed05012a7d6149a367c581a78dde1e178842ced24a44e7c266eb844f7393d8cfe3ca793ebf6633029a62dac7a5644cc2f790a538d80fba3dd062a4ec9bc5c3837f7a999eaa702a3fad5cfe37f660ba033b7f4372aa7b05ef9d7eac36fa24fc400b7dd0cc4de4c181c7f0c3abeba1163bd15ab12ece12cc7184a94dea8ea107972722f837358fe94cc8714337dc0d9bc1ab7b6f7a60284fba10385faf829b71a3a4378f8f687efbb4e0d274bd713e816e127afc959f12988af74632ef5df237e80eee34bf8e6dc2c5268413dd3e9d2ee05ffeadbee7265f89c8bac026c55bfff15892fc54d04cece27b3ce5d12babae9d2af9ae24b343720b1a9754336e0e5e0495909b0b08f03b8082b7a737125835fdf12df44f3fed81f4166039dd19a887ddb815a281d052bf08f57585f5cfb985eaff190fe57703df2b371bea7a05a3275d4a927109a21e62f27845bc688d3bba7288c4c1430f2a6536b1b023eb64e460b63b3245c0bfc6f6a33810315f0e46f04f9d900e80126386108436d7403c65e0069640cae4f2a7147b5d7f89aef2c769f94a34900f904ad576655738154d6794ad2d1cb6b931f0213e42981c2e0cca78bbd5bc81e78807f47b3709880ca0d8249f5e88ca43bbb4470e78c6a6e829788e4f321cd1ef4cd5f58462b272c6c20ca1041ec6582532679cac7e7ea7ece294237899c9a58f3cb4bd208d9a3cb399cbe23620bfd4d3b72591ff913cb003d3eb509b34fea24274c5afdb36282a564f87e179e890dbe5516d011d17daf54f6770494eecb1cb9b61a498b9adfe76234685f91de55b1d5045f4cb723b94c88c1bb51ebb6f608f62831740641d14a9c7d30e8e8f32b24b1605e314dde74ba5e3326ec6f4706623977d3132c0d8d02719bb2fb0e97ea3f9a60e1a7b7125843a30707e5d14d36d126ecfead17d9262a54c999e2775c908c63dc4ee3f098de8ae1c25c9843325756955ac9a89731421c6d838d84b0935de02e54fa1d793813fea6c412ac81ca85327d5f327af3778bf0352f37872cab9ef237f8672427dfc6c42ea871c2c071a9f022670081f73aa0d0385563925479966ea5211b41c328f3898b5ed868de5719625e5d861fd7176f029dddcdfd761f2398dcb1bb4b969fb987cc9ecc405d28f2aa389aed09f681feda37be666385ebebfc30b80565b2a58ef7ebf59d99f8a6e4e77e964c5bc9e1b3b91e88c77dbc61ba82816e6982b9cc039d06307d70ca1cffb99bd2e643b2b15f5d7163e051f6cc41c4cba799970b4a03fd3e3a197104b45c1da4b12a89b27b9034ad34b5c763b80bcf21b1423e4a2f8416a67b1ca702852725ec25429ab0555be31a56027f5525f6d9c1921f0ba0e9bdd018a18b0a893c58ddbbf9c24a9a75652417f716f53affe62a44684cbeb565d5fe8b93b1b9ac7391f65991b955e3e35d9ed2f41f867802afa2fea2b2171a562f97a432f8c7e350c13e380cd8dec569c0b3262ef616d89e1f886f3d9f5e2a58485282f9240e62909e8040c3a418d08224d847ba224f80bf9a1ef50b148f0467f4d487ad5bb010e7cc3e6ee3bcb45b9bac1e4db9296a997704f5c4a9eaa9c7fbd01d6cf9aaec460cd6b326d014ad993d5b3507ca5ba1778d21a10035639df350557835a6afe44192aebd0de0f8b4d8d7ba998bcaffbd099d30caa770d8fa4c0e72fbbb27c6c15e5512754b33db1fb845b82409c43fda60cd9a5719e85989e7902d45ca908cef306b39cd124b74a5a978474e6735dbcc3bf47c10a52eabe2ee258828bbacd061bfc9d0c97c2639f0d7cc2e52b087faea3f3c7e9e5835b3d24b6fce2251242b5bf75cfc9ca03568498e22e94fd30303e902fb92b2267496225f856e738a1115792bb7f112cec570a4df63ac4444d8b07533290cfd8ae1d7627ef0e64e2071f5a301901cbdcf427da0b40324c4652601b949b3f1195548575f8135249ed2800c3ee33e003637f5b0440f4229369688e18c09c5094d1d00f43e94fdbefbbff69212ab63d16d747305d9d4ec9a883f704c3ba89e99c212d0ebd7b0989593745c44cc9f87eefbeb64c29e567aa7e4d4b6784ba2dbcc15ab42e0e2289f444f94ca20bf7b7b3402406858363a7190d4a8a95945e970e0cf3979852414a958d58dbae7bf6be1cb4bd1438398d1d79727e81889ed8896de150d16df42825d8b9d986ccc6874b24cffc5f9bfa7657f96e4def37f8863e441c2e850350ae7238d47b6a3948584f9ca6a4aea699d8f4034ed97d6d7666bd60cd3f351f51e9252a696cf6819d0268aa61faa63e91f195a6b74ed3d3ee8c0fd16908a011f71be6c4d1acdb42cddbb0fdd2ed791d615328d49c4fa0d6df5c8c8e648d08db8990395c6de42cc177218d2143c2586487f9d0476f866cd75be0a0b470dd2383acfe0ec16174451ae4d8458f30099fed51d05658e031fe2f417ae8d972a8d722fc8decdf6129d4d5512ccecd086dcf717bfcbfb9277414e6967a486cf362d26044a12368103505007116588aa514b223c86ec817ef3acc477173296d07508a6ae56190272e9f0d60ab890c01909ab430200975da3099a5e0c3c0e00fd44224428a8d1c8e05ff7cd18e1cecd19178a1ad3b6eb6b3e74f3e52bc835cfdc22f629edf436d24c1fd7aebc462a111a92e203321e902bd25b4586f4de397757c6e6122e0c86b9bbbc54efb78d60d189d311cc12147fbe00488138a5683d8df9347bd70cda10a2788fea420952c168d0791bdc8734e53005df12c1f023817f1d4ab92e2bdac7e0477c698fb39181826973bcc42deb06a3babc9d841229b2800775d366828b0ce2fc2ef03bc6c3718cf05befcf698bf46ea82cb7923c6c499cce86a781e59dbe450bc5eaa71fcd6f6917ea1e8dca6b935a96614cca25b4fc263b01a3ab45b33a0c56e313a3c8c1b7ef5538acdb0ff22716b7a62ca5fa8286085f76eb0f29e51f19e029ec60600d7dfcb68ac192558d2630f04a05bb43ae40a872b9284e592997e4174988bee2e9067c65e857174b2f30b25fcbe36c5460b5d08788884755de4041e249e0c3e0ae2a0e8201b65f0632475fec6748df09106e7552edd396ee8c27e83bd507de2f11d46c0011add916024fdedb77f4cdc5499fb5080ee7b9a0e6f30907c6e4b70922df67a62ed5c6f7811aaa6a59b365140d7dcd536337b29fe9244568dd9d821af4cd9ff4171f8b07a8efdcf79c7f4472b98a3cee2ba8060f37e5859f4e0c25827500a670498a7ebe53040ef3c42bec4a11e38ba46a201903f3346e97315a82d410900f69198a0ab7e2d789fbcff1ccde061542d0a80ad61126021ad73a73e7e7382f8020eca2355bfe61990d7f36ab617198a362d9ccf72b3c234304a27925cf2c0c7f3acad930992ae97c0fb0758f6f289064d21ea3b05a90bfdd52fad2f71a6955bb1f3dcde9d4d84e3c693127a54ee9e9e95626af5289ac54519035d0ef17a913c451599726cbeb1593ecfa6bd2dd3a5652bd3cd9430a4a94b5bae91caddc9fd4e0732480caf0fa55affc739dad65c73f5037903882626c1950c863164305f6581e0043bfbe6fb4ca8420fc11082207dcb37d22b80a3a76bc725a4df97213613f1e40300c65d4ad1f758f52370609c5ee236d6129423ab02bcf42b98de1e9c13affb88c4bdc9765269835687b1daa1e7c419be03bc1bc8022a0fe40f4f9777144ca24f770e7ad2e3dd5ea59a51d630d8aa84521796b1ffa01eefb48e5ab22b3068ac9154c64ebc697a6e015997e46e5593416b7a56f9a55ea9d2446baae857e52e8915a1dd6d047e552e5ab993a57ac473ec93b231fbe4e7af29b232554f02b919de0926d9c40b6550e07b0bad51884c4f62a317bb4f00f1eb949e4c6644477610bc6c5fbed1ea0283eed2a59e62230de25f592683a5e4ccb8cb3ed3210817f610c1438ae0d1c3062550b0bc1a849c1dabb3903d4e10de1fcfb8dfac91ca03b6e44e1688863215af529737c93d8f8d4b36c69cc8c589a8beeecc4d693faed8c99f3af89e4aaa2e4435855497734535b00f32a873f548259a634bc373676c8278ac367449b88318771da9ed00d84a1f2882989e08d75953b123fe12f2f16d48fbd979320fa682c914b24e35de17a1d9ac16c35b209e3de8925e661e9e2f89053e6313c6366f4cb9942e8c515e050af2df3c3325b75f1eb88c800edd7f8db95486ba4a33f15be65cd54aed85d1aa14daa98d122c3014644e160d48cc073eb8e247e19628e3d0a97842624b62767ea1a1151f14050871d00a1ddd9c2afa1f6859e66276faa9cd19163594e32dd5a3882d2d5b2151e4889d07285a84d529fbc986acd5e9ad512ced28c1b34efd2b4805de0553ae9610c94c0fd362533ffb6f7a97192244483a5d477d883cf5444e775453a190db7ab302286c1e09f0cf22c22b39b986c508ef5142cb253fbd5816dae12f7b10ac0f6851969379131306cc3d48a4858b3a8352e76bcbda99a17816ffe0fcd27349d2a3c47e4d90c5188a9dc94b09269e11c3064609befa063a36f116caee97b6279bef74ebafd7b1f17b10ca6c4e538a23339e9e42e602f7936a4684520d734c1b242a3a0593313e827dc4823c4e99fd350e4134151984134a777466e5f3b5f2b7bbcee07a9245bcef65518934f1d0208332298bba08955598d9a99cd0561fcc1953a996e15b469ec6b3128e35256030e695be4aac2624c41006e14e41b5586a9f71e8746721d0120cf307f17677794c86bd1f7cfe11bbf255a275e5126d8fd49954bd714067000cc7888796f918d7e6e421d4b049189617db8234eadc5e3e188d3e60ec98bf9ac7c032b8bbb0d23d11616e19114375d65e505aa3901f7848c0710fb1aaad27d404dfe9dae2c55816af9f5008d0c9e5870246206010705b228c184f32ac09e149f3fc10e76e863a10a602a5d9374327affa2d908484560ddae7334ed29e2b9a4804f90aa99bbc99a0076e6a488687eda317fc451f3b94203d6d7ae44f756f608552a96168720c2098c8b616c6e2771de5007a822c72ecbed5adcbeec6d5e2bdb8d192597e1b89160a99dc030f67ba175e7f71f83d8f7e2be4ec45279e2d63f2e277eded8f9a0aad8450402b0fb21ffacf52ba5a2cd31f0e0adb140b12348b6730d94c2938bf3bcc95b94739a8dbe2604d8c94e2404f872e7d191f2076ac95fa59477052fb6dfb24e9b10380c15b26029a80cd2e7d86e2d93524c1225d4d1b4fc7f58658dae0b6c176a25552152a67da78fb2403097fd6828044c17cca2e0e3018360b2381d59c8a7dd4235ede099b6d7b1a1f33b8c0d2230d2d2404bfd7cf6be1ae9f9fb78e962f0820074ab1ee0bc4de411b6ee7e7d0408b3a031d605475d31a68bb7767906102eb71e650eae800ecee5afc9bf218e85776e0e66bcf32e3033617d15ec27715001e69881cd2147acec816a26aed079b8f4e9b49ec87fb71bb8d1eb5765d369cb1ab52d235b3b4112ae11177cd3922a0c1aadaa02d74f4fc8f599914a14fa3a0a7a222f5bdbd2744e9868a7fc8cac18ba8661061042b1e40140ce839e4f6371fb7dc99d673b76aa00faa5655e9d9cc36a414967511a2cbb35dad850875e4d3219409f943d855f0dd663be58f13abdae7f428d6a82b227bb9541566de4e7dfe05f0c61394f573b7fd5e6118223cec7a5ad43bbbcb94544c14bacb762bd2248275ed84af09680323c013318ef480daa178cee47e5427aa01181221e9594f969d55b657cb00f96fdbe7aa1a2eb51d9f2dc50d8456e377167d8f45cefd6a79d671cf0df39d11562b87ab1c9dbc053c448bd59bef4a6a95026a8a19d96fb6e38b64c032521f2469018b142ff4e2ca9c6a6d036d59129848296a2716272314c91220dc6296f28fc56adb240002711c5e3055b22a1146aeaa8f003d5367c9e10c88adfad05a9151d25241156051e85016410e495a3235756eaa52eee62a47a88100101fd1015e1067e7370eef441da5ca4e90fcbc47c8163d89ee489f5e56bf55b6c18fa05d35d7ff768ddcb4a612db2d756c69c5676e21cba059c2bce2a0482e584d82708d41e4596ad9a3196b54476932ba6f1f8a427ffd909dcc6e0209da0919d2fb39b85b35e02fb74022b76ffdf504923589b9d8cd8c17f57cd173d3bb527ad4544fd096aacda12e52447d412a8feeb42cea0e8a1beab68101ebd14746f05aaea8e2a5430d28557a1bba1b48369e2605740943ec939c04902a0eb606eb572be212f448dee7378616ab62bacb29958c8e21596ad4a5317ef87288a16cbcb30aa0a13359cb7d576fd0db00b65de7425512a7f2cd34741b15682060b89ff3b658b3b3c3f165a1f8117874d1f3887fc9d8201889b2d04f0326adb162382eac513f1d3af52190acb345acd9a2fe430c633cc8ee6ad0cff807357ec4ef1e6f39f0d3e1784487977f2bfeb9f7403d593ad989145e560b7e6a4a38e7386618e6b384d39d52374c6a27bc472825cbf87f73715f41b1002998b6c93f0b5affabd81bc5751e9a04682f005ee813aa45b2a18c633c5ca17a8388ac0367289350c8f985ae1a8e2cd7eb21d57e2d9ea7896ecac0352a833df808e0a46e3368294338b4f0705af045f893b84671756986219d046a48421450ef3bf279682823288d0e4c9c156c32d9022f9491e4234270d786263d0d20498e279630b5a9676facfaa4e88c6b8c2c37b7ef7bd1dca3e7e28a73f05373dd0b57e15ba31f89ded4f9ae33cccb5caacbf6f4affe4ffe2dc550240a3610ad2b17d0651b56104c0b4a24c35abdd8e61e6b15493c7788c8506ea2dbff41dd7a3e17158ee3d481006cd2a21a86079733aefe7b1ec4b5c023a1716ad5d5adf8251ad8abc96d98f5032b306e7579090530301e03e428fde9524a4100cd586583c08221a84f5cba19d4e46c253e0170b0f9d7758124e893154d34d4b5908c450ef837b58b6678c244a2b25a2fbd586637f9e85ab57bc1d52f9ef645e1e3299e29576e34886817b2602b14543aa0d4c81acdafdddf3d585e6b591fbeac5d10f59668313b21a7ee3a81f530677ca63a5ae6236211e7058a1dad51e53c88e57ef22bdc87eea02d9b184fe4ab10e33ea54c5243afd8b5590df2dda8412836ffc82396832eeaf37f05c9588d681da4ba0f2175c6399829e986e3f97cfa793b5ff6eb756c2fedd58637524d8fa037e3709fd67b140246115519ca6eb540aaed1b8753c62632d210582442909d6fa67640b90cd65e7b2e9b7365b39832d7792ee105f277390e669a3ef787623ced8561db332b1834742ede85cb76bd52842b5fd0a9bc9b2b41a89a15d048f0240433514ac07aa32aa07b8e76dd7803170e1d853ac19a5e54e315ece288a2d4eb682a8cf25647f6e8a2ee7c90d789ea6ba5db35075a380dd86e1db10e8194ca5efb780a70fa2fa5ec6b6bd27e13d5f7a966f8b1a05e56d6a15abbf6709f4e0a08c27e3970b15070992dca7684532b5f6d36fe8e4438fc3564da940167686e4cd075a85685684d3048ad97ac4e793c37e83a1acb074dc66fb9d42f981b972cd1796254e956530e1cff852d974e81b747527a1af436992569a80403631db734ee1b5b0a5769ab9019e13e04eef4449e3552fc86f2773cc83215a02c731333975fc4d521eef8b42717b2e8065becadf66aa3e86efa9e5b5f1c198cd5af14ccce5a9534f995dc937b04cace66332855101015bcc6c306060869baf3b4d27c10b438335877903bc34443b059f11e8525a4d50eda6657f76ca7acea604d4a98a1f61cf5a1d26b184542ba695ca6d426ea80adede8483ca8c88f67da02c851e5f4c492cec8e1e1e5d79d4880aab1a11633cc74c003810cea4a1aec00322c78a38c5e31c73ad3bcd77b9ad2973985e8c038694e5db7ee8c4efac59959e38ef22811170fe8e34bf7201fb4682f470831d21809a05e8f00770ae8ba65f31ebafe3270a1148520c775b5d816a92f7d426da3584294ff78181a775ca546426549ccf943ac28bd913d4f4770fc626e1b483ec005227222525997e620d04835822d61244a55248b5fa94b38032093add297b238ec59cd63b43080e1d9a662d4552dce56575cc9fa64f36be57aff7f3b8346ff94de41103a37a75282da339a30e3b65eb5ed180ff263925d9f62ab16ad34aff06873caf423560af342d41bd7815552564acd23b73b450fd724d300f674d34bb5b7b38a82f6ae58a2d514bfaad803a2227a00060a03ac9c6da5eec5e967c140207494de3fa1fe034130d0bd5102274bdb55121cde17cf5784b107a3dad187d040aa901284adc80fa6bcc42b90e46a40e6cad376fd9069bc65a177f081ffdb4e3d607a1168f230cd77ae17673ee8375af04fb439be5dd06336d8fec76886d6e51cb1249ca3732ba96b53a1223b268e7baa5d3813e8e5b1a258e97369fab27a7c80ceef905e6457a18efbe4b4baaffedf80bf01ac5a0ed0cf4c9e583e7ab21caae40d8ae835e87f7e545b6a6a899c355a3ac08df4bc8a281504b03edacde8ed08f57e370f87fceeee0d6459cc3a966a175d0e5ff2406f0efd1b7ecd6ea956565c7a313de4d1a3172f40eecd869dea9fc6ccac851c5b63b96d7e03f1a0ff1a90e5a51adb1ba7973073e8c55445a1f2933567ee1d74e3fa6401e7cc1a452aa54708fff66fc0a674d54c6d1496d2d3c0cb6c4ca56efeb98fd173f362a6d6e2c83a797de90de070b3ff4286957b784968bbb1dfc7212fce56cb64a65ecd6e64869bf733e51b5907b0588604ca2141446094153ef0602f680bd32116d822e66fcb7aa3f10762ffffea4eb5562b54f7f24b84fc01f33a53a1c80b0a470485685ac5ce2265537ebb589585db394a77ced82dab1bccf064f46e59cceb8fe2435f4cce7bff98ff95252f66c85bb67e653320c1fadc8a34015dc95f5b8ccb769f43832b0f39c3915d7d5c1d792db22c50f9b86f3c4a5795ded92ce19a7368c7d9fc00976b7037404fb3e0b9fa2e8fbd43c3a17d6b03e7d5833d927f5a10b4798b48623643d8bb4d64904480093376f294a0837532239b3847662ff9e01839ad4afcbe68ba09ab994d85473317c139ffb570e1aee62aaf89385c62dc78c09bf585d72ea2c5b6c5278eba2d7e4ff44a8ac3ac011995ab25c8efab5b2b5e3515cce1b94f0541c1fca322c77f11305151c989ec15a90b34bbf99be710a7c3b191a838d4bc7afe381d8fa13c8661889e753985d27312c26cd228c5cf9fb44ec45e17a8445c39fffc579326844acf7156e7b69be6c2e456e69c2bfb5baf6a0b40072f7dd52ca3c0228f301f3344bf4b0794e2f1e4ba748f9c829c8ed2310352a76e370b0a9d2a877fb8a23af2dd4a892a442e7e1f4bb52c4039813faeba644debf285922625c8ff5333849907d702b1e218c92bb16e6798e4870a7b9a0537e448b3b550a54fa0e56fbf51f930ad1cbc48bd35a3dfedc0746a040ae7857cd3d326b06720547800c8eed87622a92cf57d2f337a9d089b0636c3648bdc881b4b32c5e9a657337587f886ae1636ba64d0cbda7a9ebac73524cee4e8d1b5e3eb5a12ae1b3a5ad7e741b9fb33b964e3eebac93afedc8e3587a5fa03c8f52f70a81e70b5a22f31730eda980b5b62c26b0ce1622fb0a43d2fe4ca41ca1a2f0931062fa7bdfd8a1fe19866991329c07a5518743bf2cabeadc00565b84713adb780aff41637058bf57583c983ea2e6084ea628fc3272e16633f6df617e9c336a4159bd5c0987b67583dd36ab14aceeb8a46383e1619473dec2ce84da94f087e70ac034283ba85a612ff150647688018e681ff2630a023a654650ca3dccc441cdcbde98a7582a22c3005831119a09d602ee9ae7ff0371751640c6bb6d284c386aae293c3ffd0ae61063f36f0ddbc8486da036fb59158007ee0f54b4ca0f322035f1291ae2beddeb16d7dff08032fe5a7e6f0530532d9a7d6988632a00c9203d67b01946873696b60e691136e9eca5669477e848f17904d8a96b0716d28f83c3e344ca34c040412af4bdcc5a31854a0214b9bb30a023144bbbdf35c7afc70382f381995bda6b8bd9dd134c7ca18352f4e29ebc38f8348448c2c9bf059a8fa16f8872a15e8da3d475438fe379821b92f21373864e09b676ace298e93684175e30bf076d18e4d20e244dff98ade4b28cf523f97dd5409c5d0f2584c79249b3950bf1e7d36112829d3753b261c66984198202dd4f578758c5d4a6016a9713133f736c76acb39e942622f1e3896a2112fd42ee3e194bd9c8a10a6c38c3a1641bcf2412126d85c148354495fa746162c038ed88720f1e970946dd0428dd6304c4d994309bda34a62f0face96299046dbd737a62acabf3c9ba4d8865c9a7e2e63b63fa7fff5f632bdfc8677036d775826d119f67751fa59e4e6195806ecff37e8a999861836d442bc4feeb171a545acbe5cb43007cd0549daa8dab5cf13d0ccfd9164c2a566849daff7fa3327a8fa363c81549c6f46d76de3e27dec5b64669b9b8933b00f967dcc11d51c885086103b923d09cedeea4ac5cafb0fd66e860cf782b7371ba0de1f808a3ed06c375163394732006216f783c25c771b6c25c78946b2fabad14ad601ba9b221c90ca4f4ce0846b2feb97b597db12f7319f149cd4ff03caee651facdde194a8cccd5073dee372c5d817ad37aadbdfcc41233487e9c5541bd9eb64828a0708d4d0b500d35f669db136abfa16d958cd23c3069ed62688603ab044b53866736b66c07852210323262cc7d97c43287ab5d39f4d200cdc6814221f264c4543fa4884ab1a2623fb9aa2b51fbe019ac230f10d036756e415d2e43f26fdbbb21209655f8442f517e88d3fac2720c2e9896b5d4f696199adc4294ef3c3a39b1e05ffdcdb2240f5007dcef9f25302959efb5ef52417ab256940262b7687acc925da8185657197a29127f037a492279fd7bc29760f6e6ee95f12763da413e5df033e5f7485e5c3ad8b34214db5ccb4e324749bc9e0eb1c0b1df0543d061aea5c072798bdc9614b456439e1eed324d4f95b46b8e2bf9bb0349cb07db98ccf3bf23b53d6cbcab37caab512ca8d41a76fe64d36236a9f70b2198e6c7953809890c2376a9621e1ac3adb9e71d13eaf9751724a1f4a99ed0a833d19967c889d69cf135056ad1cb19a86357a881e9a4698e47c0f3387acc08d60e33aaf676c34fb738d56c58d061403d81f6f58ec0a4dc38a723f0a86ebd7a393cfb4f9206da12c1be37eb6221469e35b5e960e957b690aecdcd0077992e2ee2c1cc3ad170c73e4c5dd2beb0dd65222ae6456ec425105de7ce59182da7b236540c7396923aabd68de81d400977ef74c952c01fdae7c10b6fb83172272c9c709d8599ea1ad185c7dbbeb32306c4eaeb5e0601f05ff8a8eff2baed68a9acd4949cfc3b4809bced389c9ed9f318090412577de71a677956d7648af93242bf7723bf26281a96ae53e67447569f12d11b8eedb4c3dec592b81e2dd66f983e5baae43ed30a19ccf5b4d337c75f6783160003b1cfcf5f5b65821808e8d3a5e863719fdec655ba2f0a2490e8d35ff94fa807e298e3cde41c0ae4ee2faf6a796b7fb4db6afdb8b8df05cf4627154082b2a8ef19b74c07de69439473251db3b0110135e001b01e1b2801c9a6d1cb560163c77d2c716eb80c47cbff8d811e9932f1edde50b7918375c1ed298d3a32ab2fea7a334aaca7870a4912c0d96cc6d3c0a81bbf73f7ed3f0bd5df514ee0995aa983cb7e1be1d55b4ac03ead81fb60506330aaac9ef9af857a3d5ee3df4d42dce8b784d8cef24932436d0511f91e0680a8e119e8e072178a08b98775a97cb5ba1b9b2a9bd1179b94632e34dfd969d621d25ef675227f92d4ae49741b09b74064401b00f1330dfc1c44a7dd4b729c57710251cf5847c464f7f8034f01ebc1a148c15c08d11d5a08c73ab1d0a3d076f65d4876c74aaf02ddc3084b0b2423fb88691f58210c05bf20f8b21b8daef09e2de48dd84aa623c5722b94260dc89e10b175cefdec728b6a4b68f8ce06d0da8e581571b16b2c64b553cfa695df9410daaf6b23d0739f6b8c4ea49891833841fd651ca5aa427cbd0f097ae3626ba7cc4415722943b1adf5ce940638f201057d39b0f8aab69621ccd7533e17b68755699f2e94970ffdb8403c382ccdd6b4e68ada1578c311f397153711e8f7db4f2130a5bab6674df9f40dae760d38e7e109b88f3bf6b99222d8003191ca6ad3305a266d7b3a1645b8533f4e6b17f9d46bd2005c0da8ed2e3d1312804c080ba307f598755b4f484ff55ad3484eb5728f2a97e557b406f910dadfb5f6b4414ec1acbf1040cd4be9afb6bf6d618ab946be61b0d731fae2cfca1c8d4d6989f58c53187f315fdfbe9b936f397b6a4da17d4625acb676377b9fb876f6a5d972c178e41468eb61e4f95d1abd5fc1974fde4b05da3d53a5e1a62686af43dd12ea1f85c984aa48769c38947c0527ceea3b128aea13ca19dc8c931dae2d45720a2b7849114c868905ff9753d7654637a846a53b16978c102b3eb5e1ded87947ba83d2e4caddb9eb7e24a7a6c3359a70927843d80f016bdc16af376a4c46252ce1f952a176cb1566de75fa983760de6d38b32dac3e29f843a8ae9cb263d183b19ea9c54a00fe1ec82e0777379e017e660d34f8068b8eb0ea7e6d2bd780f660d9ce33b428aa46f4a2ceb3000e780f3f9d6330b2189dc1772395174bc7609f34a7f3398e7b141e8322b8825fc4045866777918027c90af687630a28e8d522566d9fd695282968308d15fe3b49ea5a926cc2a547c788cb0546e7f97e09acde48b14de411353c83850ddf490eaf11874da8d93815b817a263961b062b0441917135d6e0db578eb9e3bb2417b645e9c135d41701ba8f4cc2baf3ef5e6a78b61e6da175ec62de259f510d974ff60a8fcf2fbb0a8adbe1c0c30923ca00c47b00e0e05e1eddb730e7d76b8a8b4429c10a56d428961c5b15f15e04b7d1dd8301d46e329f21efeb8a81482d91084950444534635c8fc9c2f62da5ac5a2d0287e962978ff3b78ff919269859f7abde00825b4ba0c10c064d1fd9292cb8cd44fc2c85f0b8cbc5670b9702999e2128ec6bd726d7b9edb51be6541ca4c48cb01d52ef1f541a4725c79619fb09da72c553bcfbc0e7eed98732c7fdf6c746281c2ab624b8b0cde88d15365ecc0f2dc2fd0318c4202b597a59648a4ec9e81f29eae6eb7c3b9266ce8001e3219ccc342941fd0a2f5fa5876dc9119f62278941dd32bfee3d727328f7854560553a6848976bf79281799ba77c0a0c17b502aa778ba4449f6b3f8ac7741b28586242f0d06e50b7643210313f5134d1adea931112ef369117686f0c077c308d49136b3ec2dc49869a7c076ecadd8d947df840f1c7309d9ea348dd2c38a2e163f44caf3723f828a25788cba5bf548f2d08f9e32e5f95009a539b9c7b6e268461c188cd81495882458761fc3fb908c21c3250b1529bb2155444670d1eac553d0a127e5e4c2c32e5f3af79ef3d9954648d16fe14c0aa9543515a567e795a4113ed463381d64a32937ce9d681a470615ae249a783032d634b0aee2aaaedeae3c5391764066cbdc1c54b87e7cdc6c559a39137f72c092d8222b5fad3b044b829428d8e07092126930ed502798d53bc426e2d0318a6e279b047ec4f7ddfc5c99a3da30352c37c942d8478453cee105cc6a39525f530d0ad61741e6e04a16e7453646d160257a50929a6860c9a0931cd34e4095761e6dcabfce1d5bacc0d65e5e030fc2f8a28cdb5088e84900c03a7c8d8870699b7be9a01a12299ebfaf616c9719fa695aaa65ceeed29986b8b23ea21572262b6d98318127a685e8b1b86c4aa27ed24dc071f82f70804e7f9bcb23062a7ac0bb2c6540282a0dcc9b62039e4f3637cef85ab4d70e58e8f638de47dbb52470d53c93befa5ca5790183f039db2be09fd5c97165d969f53557fc43ba10e7759cc112c560aae29594305c5a7bef0b629a2c0cc139dbb111af147dea9fe92be5a1f22e1027b61a4b1f08ce7306da0beeb884ebc549bf1bafbfa5179ef655c42de09fea15d5aea903499926157651d460a31bf3ee05095a1febfd7dc16441ad8df1c485fd615566515a32a2b065a087c154557a2525475657446d977432961e63dcb8ec1421c3186f38739e7a3b7d3803db3d76899c883d65f1ab579c7f6262fa80ded78c4608e781eece6e4cbcd3c56d5b29f86eab1d4d9108c11c436be968a05c711698d723e13e969fe5d726cb385151d627880daafbf1510b8102ec32fb59d19a9b8bd8f7925a0860a0863ec1e51220e7ac37a66a5bc522dbafd273700ad40f7da48768f6a3e6ad26577204a03b10c69fa99fcf4341c5598ed4fccea5ca6495841c011e07f7271b532f73796ce3c048daebf1c93163aa7df0ca0ab8d6e19104302a9da723bc798eb18f4a25cc4f79313a261d334f4669418fcb6759683b3978c2a94cea0184ad754336b7bd22d552bd6f243ec36d615317cbb3256776ebb1aa5b2832235343951989ee5c05c3f6fd8e16ae1103919364c0311801f63bf2649e46d180236752dc6caa299b6b262747c6863cc61de453558d54e08243164d1585aad2d20647e66eed946f46dd62f075da245e8cf5680b05b749aa442bfd60321fd9c7fedccf68b01673725332d7789e2e5658126f851810ea0f293b8eaaf82ea604ba0c1fc3c4b90afe44f3ed0da36f929c2820873ec1263c8ae098c496c0e33ac386d2bb05c22ac8f9d6db530f459300ce57ff6ae344dd9baeb6d9c39acaa355fc5be5d8617132467cceae19e6fadf119fb903e97cd05915b30471fd2b3e335c9b9188f269e97fbfb1c108891c228e6847d7fe0c593334889ed37c9b8a3d902bf3ac62f67963fcb7f96acdd393e742cf76b62c8e928ab503ed983ac6b1119e02e75084e97692f5fc0b8fc01a65a0cea46c73caff4aaec2e80a99683284fa41f8c4595bc9912a6de9c1783a79519dcc7d9bb0ce86f03e0674d511e684bf59492f457cb81090e79288fd9db1c25084b34ca7e37bddabe82d10632a11931bacb67a99e7c34040792c3a3266f5fb114c6f0491052aee9560bfda58161912684eb75719c30c09580a771f06f62021e2a19c73cf801c27565561822dc2a9db1f107a0eda7c72a9b045011537f60c77209863a0253a2883a877c323dae1fabd5ea62c416a81fad3f612005ad822d34aa5f5ea6a3d4a55cfdc0ab481f189f5b18523c669d53a5910886f924f69e53456c6a43feb503382c6de8b31c30f851203e99f41025f5df61e4deb2e42112c29d9f05d9a75901332b5217ad0aa811b079b501da24226e05cb51173b1314c71893b2fbd040d0784de7495ed9fe712df0746f8a632ada1cf2129b791dc0aeddb06d1af805f9872f9f1f64bac0bb3df60cc720f2a0dcc588060908982992f3d624d1860583278482043b05231439cebdad8501ca268f0c998de1986812143ec9596892539e446e4b3deb4e99f33a48e0e28afa3042d63f7afb6dd22dd0773bd78cdc6419df5fe47ed3fa24e1d819921f0a2cf836d444a01bee9362c60cb1d06676d4403e333f8ef10600daaf0dabb43a4d9a832e0fd88350d3181da54d6aca746f10f33dceb8e252cd2dd9f48ae97c303e51726f960f5ba5203de9efa62a5a87f5bd55d1e0b2b6348c510659e0b2b23f9d3442584480fd6e96d703947655129433cadafcc10bbe085f11b16ec1b6594a42b25c27c2af19bf35b50cb4fae51268fa3ee003f75b320e67c62e7d047fe2bc1c4ce6cb7400dbe115921ee0b4738ff1839dd07027fea178d3e2d54ee65fcb1c4718ec6cfeb4b9542208f2558102be8ea1e9205782a01bbaefefe7a2a1e1f1842c2b5cf3dbf398ab3c2adf16fa8dfb1f660d717c22df4e16ba8fcb1323be422bcf78a2fed6c485d19349e72679e61897c757e8208e7d7341c4d617b32b1c2601ace239b03b4cc6c34ba749457ea0db22967d2afbbd720848cb2a7ba95ba66c46b3355354ba3c89b762660b3046f3d06e9e3db7d6f1499a9eab812928a43587a6b23d3e175f3683dc0c91a95c0184512a960487c962aebbc52011b88b2fb4d819e0897f3654de0be0e2042e981c967fe9e594bfe3310c7dcab9f248d20fb8aac1e20e162162f4a071d3f5edc52610669d1685cd5338a68c73e82bc796897ca1c237e373aa18318bb3ff05f0b593c4e500601267865d165e724b4a0670537999a3409d29f93bed0e6cd4f46d650498aaec32e77ca879f4e22f751a1a24576b92612333cd88eea11d70698d583abe57a97316f422f2e727bc1387808db7427c628d611814de7bfbd95221bd2490013ad117b515f13cfb370a7931243c89391086c2d23a0fa0c4f909d291f0e07ce739d821ceb158077de361346d75c3299b41969e8450b546bf568031ba6451986332079052034f5f190c13cf3ba7bebb7678f40f66c56e5ed6c7962cf93f43f2677a4f1b97d2fa8dddbbcbb65f76a0f02d9fb2a6710de1588a3850de530f1b98683f121a7be4080c1fff60f0b0c630d8baa9ee046246bc1c3778c636f438a0e0296a9a7bdeff78261480cd14028c2fcac68adb1bcaa6bee40d45dba5fc283d7197964fb5df2ce4bde699d0747a84e666f0b8c575f76a69002258440ae66e1b2772ca652a4d54948ab5cfa666c4432907d15a3d613e6397661ca57472beb36aa13b1f16c511310be05a957f09597a905b73c25bc7b1e3d0c49249855c2636d90709445647b41b9139dddacf0b3cbea8af18f5ee4d0b6f524b316a9b6078459d9ba89d9a9e82112e25e281c3766be273042770fd0c11e8db1b0d74ae06bafd5c945c3d43480f59f3a61d7048391102032bd6dc9e4abf1e8a9ebda8b1ab23ffdb64e6a2fafa83d6762ed4c27bee514f8689f6c954da962bbb67ed27c82b726d7a1613d55e997448971b5fd96075e7046857908b70faa99f08927dfe3c6628c87049ad3e5117890b74febbf805e127de54a14bc764d053d4539d6faad0bbd6f2dbde4e6580e2442bc80f66a5627f5c785bac65c73f2874d59d4ddc8283b71de9a140c69a430724088a8e685cbf899dd89e700632d6fb77fc1c69b76a7feffcd7f89fa221ac06523b4381a76309c589f50c7dd2607dac88fb4ed00c742ed4fbf1dd5ae966f80fb57cf72882ae08a514869d66a6267d203b6c27dc0f87177b6195fa2fe5fc8755144fa0b58719370ea835eb331d3b35392bfa36dc091ae393f22475b1cc10fdbab18216a2141820b14f32c2ada545ffd3120c8c2d64dadd63400093a06bfbc63c52fb6d78ba92538974094484f4a3c629843ad38f6eb87f54ba407473c62b7d3ca5359a71805a07f229f6dd87124ded687d03332ababb1b6d6f40d9e7c3aa86eddeea7a30c15e49700cf6c013bba5681dd7d83e4a879577e1c686247752f2dd16135aa50c24a7b145876c0c76850c7f30860857a406c013b26dc16a859dd61f9d10123825ce14af821a5ce181ad20c8a1ac3b83759198a14bbff2cf2a7cd11a73937e382422da6f902246a4abfe7e490eca48bfcfbd7ae36c967a9d4628fc3578719792565e291cf3d6fed92e824e00be8fca075b40860631d1c53f17c316c8cd120a676c12bf67c0afbe6fa813fc6431419d4e1202d84768f540dce44783205fee06a0f23e162784ad72fb10f8fa03899b1f68405822cfb03e1588f9dd14e14b5960e5c7ad7c750fe467e35102a801faffe1d91e9c001acbca9a02988d3d20dc5317c3c21260032cce3e8ff67503eb4ff31e96f418c7980bf385fb863caa55fdb19bd141ad2411ddb1cae266f641e00d73a9d1af0cf9d84c014dcd6c02e22122c49dd0745459b8e663dd76d976e65bce84d14c664ca18f145ff52d5e50249e4ed54421c65a7f5106f366e4b341d286e9fe4d5028d9f5bfa1f89cdd5856e80abe1fd90654ac4ddb54378a64363897252321e2a9d06199e9f58d4d68c9636260747ca4c64ee3a87f96562c7518618c7294ae7d46688004102fbb6b200ae6625573398553d0e881f02143b2232814856c142e11361ed78b5db9e369047e56e06aad5412a98d00d37e23a2b1386243831b3b9f1ba706d29bd7052e231593b2c3519b16d007b854b85136f7a09a3d8db14625da5d5fae983c9b8994c31eb633f9650e56e50ef94e6850ab51d5b72221b658bdc8a256ec647109369de5e092cbc2e47178cf792394563d2bbcfd3a1496f20a54626e61aa88c93955be1e7702efba78c3e3360d8a3431ee3238d872493fb597b54e03be5355c661b2fc270d8007e8230fc27e27476260e87ebdefbe2ab96eb290b1092bc7e46945d10ae25b3e2fab166be36e4fe652d03340457074af4a48b7f0c65463581145d956323833d140c067c4a65820e3e892427f14f8e2b10b82113afaa9fe6e398895d1813e4212fd4430996303eaaae5e2947d3b2791b12ab3be276d7543b6c51d64586cb813c08abb089d8ea31f813df86485f1593ccbe5c40952078a326a36f183c7d86956bca16c714ebff9a8567bdb5e318fb45eee30d7522dae2c41d1a14abf32f074ab57b53593832be03ac0b3447791da77af0dd105f4595c662aac2f439cc8c5c49c19f7df423d405a8dd2f07034432fc34e22a790bc0fd37a3a3d03b7d3acebb342fbfe6ebdfbcf195be8e6ae74b037a10deaa04ee09865f0c0b210070cd13d561c3d25ecfc62ad1b07fd3135a522bb4983b4354b3eb6d17ed947a1d54db768cba980fddeaad0eadd4d99ff160ac383ecf01828f866bcb4129c9d38cfd2be05396d4318df2edb01d2735a2d6086a6ef433325fd4c0f97d5933b1044ac8de4e1dd0f958780c514d26ca945a960404fa9f21546da0037cc776375c362552369c787d4ca4e57e7af55f9066e6250511fcf0e4af62ce73c764c2312b6cec77e557fa4b47393e0732ae339d816f9bfdfdce560e73ff2a4fffbd0b03fdb44077bde0b9a06e4331a5eb974ccce85060310568237ba2d0b38c09b9d74302673456563b16aa19c74e0418e55aabad088d0e246b30e6b42d3342a2846fa7429bbd806caf0b657ea36539bc3672ee3753707502c573977db4862b7e79734203d29a2507699bb103707fd212362711755090aae4e4ca3ccbf791b886176d010ab705c475a423e74e1b1b880568443b6360ef3765d4a668e8fa034486a22bbcbb505f8454d313428119cb21241812f24d7f425115999ea03afee46fa6184337a1123d1999808af2322d157db96e4e20e597187ce90991ed10e0d29615a13554ac9b0958c958f778307412faf58468b547e365a34dac0c379843d2a9c4f968ffe692373dbcbc6eeaa5d72efcc56fc8930ff5ad2d8e856d1902583fc36c62b7bb6166b5fbd39a85357babdd5ffd6204bd2389e5884602fad395b5ef2d6c456d5c0fb5c1d546d010371627cb8627e2befa23087ee67590556ad55b5bdb9378d205c49cb187e6da22bc1802729496209da84fd14bb7f95d304b535d880de125ac3a808f6fca330342d553d0d948419afa4c8fe694a7b793a626f6398e9aa9ac32d2163e0932847ec3498676fa7e9e6d18e70a4277558acb063df0c5ab7a2b2dbc3d3f52cc57f467d300c9a1070c9bfb652778231b344f4ebe03a8a3cf9c1b3da53c310ca9eb6198026e9c95771c01874627bfd0d9cc8f3c9c27a762e7469d4e9e3dc09a2344660b4b9a5e7b958ce44978e19bd22900951c3b159b00a59ba3fe5a32db81895321e8e952ca42fa1c1e19c9ba92f79073bcbef552039146ebcc812fd5a0e52e0c93f88691c6eb838154cb453ec65e0b9801658f741f73b13b7ca49ba611f00bd64633014bf10324dec9e7e860a1169011ef7821591d126dffe28a7063d44c1628586eaa790de12643628a0abe6e02e29aac2205385470711e1e722f26c242b80a7084c7ad54507b5d2abef39304dc6627dd37053390a7a11a415e9cd1972d60ac579cc66910b2c7010d5d176f1efd73daa30cbd6f6752b67106b65d7e837d4b87a3b7655309b43f5e7a17fdbcb48fe2c28d91d728cea857a8a6f4729707c299b3b12c567fffe02a7920e475ff18fd4317524bf75104ea63f09193dcdce48c269ebd24a9ebe11a6631e91e010ba95e73dc319c737c36263494e701790a4f8fd7ed28392331b907fdc63000105f1832f47a20b6fa89f0584a7871b7c619f0e2c62a26fd4678ca57c93620f9bf778065fb0a3db23e5d9b70ee12a9fcc2634b38b81c06491976ce850c35f2685a950b08ca3458f4d3269c0b5f3a993cccb69fffb70ca46fbba86d91f78a5f4dfbfe2a11f514830f4511a59a99079ec01c7fa69956dc20c667b477985f88051985734336798721b70f892efd89baea0175c9389ffab74f2b1dcc8f071a3398114acec3b016ec5418d39d87bf5c5dd8159445832904a4465d71e94851abec84d0664eb7c65ad79db4292ab75028380f0dce9ede7946ac7a0efeaeda9b0a3dd12ce239482053b3fe28018923157091d2d5944639a4f8d6942d41b3b4b1ff4f7b7c489264448a9a2384ab8badb038ad62cfec8a5e6afbd88e47c5537ead8b1826129e3ba32981513cdc144c0742f2cad48f7529c593ccbdf1e3f6787dab167e1031fa18c6d5b86665a355e280ee55004218a6e3eae666ee0edc53d76326f00b7d501f8506aded5169beea6423289d4937189540c6184480ffd3c13ab3526ddb70a49c2a56b210d40c212703dab5f641ea85c355ab080c2f545d8d26ce7311aa2555805c0358312f03783599d2e32287591cf8d6fbb19a499e8c02f506cce5d86e099669c13102a227fe1d002715458b34f7d774f3da0c4120ff08fc45ad8480e638977cfa11e8896ca1cb119788360022c54b6579184c97685ad48bd821d3796e0085035b58139923b586484f0402308c2f110296e1e1705b103fbcf3aac2c2d92ea6f04fe1617205a6345afb1a7c307764f54a8a6922032e3aac05319fd0ee6e13affc4ca98f4a63a3a1bfd5cfec530ee1e41fbd9fcae7873b840fb0dd2cded521681681b3327f7febc3bb50e60da7b08467729e7f334657fa134eec02375c9efe81ac4bdecac30bbff609ca56622f2d2b18a0f1ed1565b9c230467889cc90af7030bef42ca4f57d0d25894f13aea4e8063e282a4ddfb71ee715439a14ae4d5c3cbc72cc49e41b1240a7c2e2b2884b5f8d027c43f3053f958d6c124f7ba4ed12e17a2a43140d1c361b95906f9ed6df0a5b4f0af7e7c6415cb66de519588c0fa631d361b4a6a1a8bccfefcd6c3c688a3a641a62c26962d65c9de2bfe5eef4510f156ca7e2a159aa6ad580cfb2303244afb14b56264fb06b7ee680324edf166149e699bb7880a81d2ed6149c6689d38d915b0673cc458993358380c446859060f12ce645bc378d44629538d638792b7f85ae2f8d78ab3439d0044de9321cc0a4068761c8776ea518379961c6bd11d1572d0fccc7fb5217ae1a66184cc0f5cd87b7bb033a852549a74cc9b081622058810c005365fc6a7fc23c98feb9f4f25c45471f7133ac479102717a85d1b3c23d22cfda58225d92f8e073e9af5eb764ac075b42aa85d686eb0b7e652dd7c1ab2076c39f0c340c51e76a6d7a33ee7912181f86b5f4ed58fc504c9596ddd9061904f8da888c31562329ad26a5bc19f1c7a10b9f0668a164703b691d047913581b4b5170e27d61ed8bc94be2b94b73bb5f4262f0505d627d8d668f28869cb2c479f83e9e8c1900159f81b3f13e416855c4a1c90391292b1a5154360003d4ac90767844a065f8f6b3f12cabfc8ad33589185413df213eed2aeb19474a857110afeb8a8a7a0166204e9024a4690be0cf837febd5d8c90f6852cef5ddddcc079be3cce31db63e49c5448ad7cd8cc372f77f79fd22f7b65bbd92b77a35b252d8b52fe63e1bbb99fcf00a94916ee7ff2ee294df0ed5d18d19e30f6ed438ac9d22dea1a3d44ca0df1268abbc1ee2d3de8c61df6b64b476d72545af2f2a95c3d5d70029d46f30505d10a5911a09aa073e765e9673b92fde656148e223e37a66f4f2b77210dc640742e003cef942ba346bd679d77e0bbc826787c8fa1d7dc5c244625489aeb62e9813a962141e76c18473bd55963e6c94ef0b1c8132f0d98688dcc3b9178d6ea90d9f75105c6f0c6ec7e7c465124644e969bc3fc9c6fa257219f673e2be05d12630c2170390bfbc97cf32cac376446cfae7847d35fdc42ef55479b4a37212a64d86ee0449037372aabd59b39d81d976be7ed13b256a869b7620b744ef0f91a3281b5e251d9607ff4cc796b583e6e6e2bde61a8c3cd87c57f959bf5b05a3bc57c8a0d3127c99736e1e680d55de44117fd8b603b57a109f6ad7078bfd61a7621340f9034c068ea2dde176d24ef5aa91f8904ff5dd129d757558ad744433c3cd5a8497f5de6b011bd4e75ada8c6511443380328fac28f5057a6cf2ff243e1850ae2f97f277c0415bf5d944e3f277c222a788c0106443b1649086d5931a459e76820ef906b446402dddc858ddbc581d16339572c2d43f388c906354d2d95f1f1ea16ec818bc5649ef4fa351d4f4f5d2a96e76b2846e21f72e9c844d92b12f0001cbd2adc5c53c6748133b37e3b76ea0d8861779967fee31aaea46e2d60301e61adc5189d62148f58d20e170d415877f5f55afd5b4bee93656fe9922cf295861f7dd5bab0cc9b8eb80af639748e00fd8b96ae533c406d406ea66acb9f7c356770119091d3b2a625d71b7ae6d8bde6e8033030462a64d7bf43899edce141410ba17dfc685a96c80a05a890b70c4ed1c89ef7274de128a5de4f82f4a93e91433737005c544a84371a0e09b7ccbe85c65ecacf98933ba32dc0c6f1d28aa892684667143123c4915653f49fd12f4abbd81dcf178bdc8ad084e4178b31104875ca4e5e272a86dd133be08f9e4f23d4bb29680f664980e597fe14ecf218eff5441b38c213b4105d9ef6d4ab0253c0e44a5da05d188a4ce7997ee260c3064a536478d2cdcac8a24166b8252227cc34cece939a6b4fee63cf42fd0c2857f32d388cdeda61dcc827d7da4d6595bb22632122d575124089c43a1aa39879360f441e42cda710e95a002ac41df2c1c6a660c8c9b361961893aa9e74f9b014bff91175b6f42246aabd616ec696caeb0f001786b6815d55d65003968b56f6ecf16002fa60891f6fca422627b87e66387d58b14e56ae7f08e5ce8826ce91df21b829b11b78175a4c9caba227008068e411ee91185db6a42e0f5da83b5a6912fcf75483ba4b26d8f368825456168aaefd1d13bdafacea8f869e8852ee7c464e85ba6f657c34995e61c896855dde70e9d31451b323d1033d410b727b0fc07ab67c24c666a9071830d36060ddeffe11d5920f44a338f309160993aecd3c7e2693dd64b4b7197774d58c4f6d0a64d35569185ade982bc225befe6444a973a4bff92ce29d69a712a57e72cfd2e018294b9923c1b8b66624fc184a3a1202f925b41f7ed32b03b52a347c1604e6017d9dd8815affbf0bf13319db83a159964b230722d7e9108defe642c16db70546297217dcc5a56f4421f461d4a76e12215a2284ff4ab84f8d8dbf72fd48fcf5ea2443abad334434dd0131d182ea0a250700fe24978faf814502b5bf7f018f282877cae327e967eafdab700d00829494daee3c33768f1fd531735b9eaadd6cd7d83bf39fd0553e7479b3c12c137cde119b4bd3c375b2fd0ad1d37d0a68d1feffad24edff3f16ec795668d740f0167d7f3c2adfdd824f7aa948e4c3d0d35bc722fdc9eb4a80823a9845ea7c2158c4c0795fe5df199cfaedf43126333131f68e3d6434b51cc809e48e51548c452a785bc9049c6464f5c3ce18f1017718fc640ea5ba202af40dd392c6e0f4d87c1ee41221105bba0b7e5f620ab4349ec0943f5a6ba10a8abfee24dbb28f98d28337f9977e6a568b413c99e5acf1df3354f67a45caffb867d67511e19f794dd6bd01858f49a4468e7e01f9e8ee3c44dc6c820252306090027d02d37f51404e8e9c9f8102d2f74f30f2290ac81d6ce4b365f16138838f3a49be6ad6814f40ba43dd2589d90752c0581c3637d0a5755f276d28362891721cddb424b82b97dac906126795b1b822f86b371066d869b5907cd32d858e3acdd3cb8d6b708c8318d98ed147100e43009bd09bf37b441afec8010029fe2db819135d87c490decb7608ae94b5bc0d4d2a997788a3c670e2fe1d9253b4bdcc4d7b908fe9ac8e96b81fa2234555c928c136c230522f07157315825d930361b8094d5bdaa1daec3a4c24971d81e0ab3f2d9902c976bfa26498aedf601d3a0139b45e9f2951df9c007d3eb4a144f9a0d933282a2f02d0c8659dc9a96efa6b0c3a5710f6f7abc196c5fd28d6fd8d06f08d29644a9b83d1f15715f85a18ecef448c24e581366be468f0f4a6a7afebadfb2a12b4ea5fcea594b4d5def326a219fbef6860c7d6d226724ce16f33139a02ffd4ae11cd607afa9e387f44ce583c0504e75a2eacbc5b1e5ed65e5ae5b0594ab1b9c188a17e084557b77f89cf759a8cdf3387990a8a8030f8f5d5163e3754063890546a8b6044117a1cce5dbd06a890b637d1613a779ebb93c22233a2c65c2bb5b639e6360cfe2c7fb578f402578d884ba040b6313960da74e1225e066ba09ea71fd248c56e52bc90640502c47481adc5e926437ecc5481b90d82557a19c7bb408f7aa75b58d946c519cb2ef5785fc6010c404d83248f4cccfe55e101dd6bb1385d051f522b6f7bcc2f01262938930b7577c84b45188e9601958a833da8789b12fe89e89d739d1fc7de51b9c5575fb2510430ad71287aa9486486371863b93371904f776ea0ce934a8eb601cc35670b261166e64bcfa252ead82e7cb9c37ebe5048b56d140ec2f9ccd9777fed6fc1abeac0d935db41d71c3fd0137f60b3db5a14d41b9ef57c73c1421899c409bd8ac8dd0e2cedf6bcc5a3f7398151300ce80613fcab72cf3bf504a8bc5d47ab0f0633566f69dfdef42715cc961add703b6361348e4bf2edb76c09fea012b90672e1765894155d918a0f5b543ab232e84249f337f2c12b9c46289de301a250e769dc94ac45af68a8fb5090616fd5e2ab44942ad1b5ea3c2d027c19dcc3f89c97e98084df6a0bd2c29ea4b0dd08a04061efe29bc89bb99573f86a227987f72f0483e1e323b7935da46eb0b94def35cb88db263283f4416e12e54b8fc7a50849f930c6c00f0c6a6debdc6cc1bf97df9153fa8bb466d05d74f6de7da0c614437866e2db96fdd866c2cc2ea30d0eabb3dab63f56933c529e1d41e15b9164cd7f6588ffed361052919f8ccc1eff340037e96e884485cd0a59ad3a52d491cfa5fc2ed8a8b998ffaf26a2066db44cba16b4df64ea009647d02e0992150360712d71a8c59ec3a8f19c8feb4193c06548a571d421b5a9576b0c112720cd1ee11120f946fe06cdb03a442371a5491458bc11d3edf1245c4a45c70bafb441dc68951c964bf6b0f7a26551afde414e04ecd509f6c246e3162187a479992245f070c58eb16c7a0bf76037f645581560d33065aa7882b285a8b617f99f0a25573abb031eebcce4868a00aab4a4a80a3efd3d4640f315a99cab6442828b8ba3b9ed81a19da77196b57d1ba05e16582ccc358dfb84fb197c9ee84867aefdfc9692f9dae05472e693f7ed3584ecf3bf1cfde04e237fc0fa7a6b2a039830b5a0fbcf759d36a97b1a0374f631eb5af12c468d1511d007d73469401b6aa7cee1fb4be73060568169dae7504002141d165ab28bea4101146ba9d6d68ef0f1735b3bd7ed5cbe51cedc1d0d90b0d47810f1bf928cdbea603530f212b1980e5633118e40bc2e2914604c3eb4957e1580ae3e0b0a7a423fa1e885b169d5225340098aacdfd19d583f04f8d5caab78f716351ab12e95564b89dc9f5d7da503d56112f741e9b2936ccc651f2e33652a2de837ebf39c56431c4b66a15aba4b58d8eec0420f2e3daaa1e1f30b1321653416a06c70d035e751d205cdabadd0e85279ddfd4d6f322d848e8a7c6910a48a8dc8a90259a73a3aacae80025afda1e11e4cb260382f355c69548a9e96491c34a203d355900b0c42e25dc6438030f284216c497f56d7b2caf27d163800838d07ec904d638825f24264ca269a38e8c2edaad596484b2cdac5d3c539a85b7afcb1c75133227642f3f2a4c2adac31b7074da701501b2102486fbd050840dd78f73cf79395120a4451df4775d63a0e11d44be2e490d71881a6b6407fd7e1d893531137780d235d04a1e1c242c004e4f9b8e66bb42729c5a28673f38ef6fc90f6889034585aadb1419fee76ee006b9710a91b51248d5e5f26358e27d9c04574e9aa94847148dda4d3a1785209f1f49f93a69a9c06853b0afbb83632f157227fa5caf42bc26b8ec89df32cd24c8ea97313a9d82f65fda9f836fe87a7a9d4c91b915e2fc3043151e1af58e6e6fd30a8908e06ae493febe98a6f76badb57f847658e304e78eeffe3b3838119d8d5826f4bdb68557ac8f30a3650584ae08bb3be59f4f7b4c2612458d2ff95d80c159e74a7314ec44a8d2a5ebad70d53c9f5f1768c0a68f8794a45d6a6d4702b24340246228adb4e2c62f68fb81710ff562dd7c3eca88f62c2ca0f1c8cc9c8bd53589404ca72bd22808d722400bff77b12ff03073ec4cd947aa09fa0c888f666cc602f4696cf385490bfd8e082d8f88a24752fd7156811a921c8c6651b74d20a5c24d2c6579d33e5f55e02bc1c7d198bd40c8f4bf0b53ef92e6765a03a0a2b0b97d8858f84def685320344f0fae48bbefb4c84320d39a62af74771dc3ffa8103f0715a2d7027ece5b399ca232e971b602d5354d093c472411c8e90dfb1b681910c4fc3bd9a386fbf5f405d487a179f976cde7120dc493b3dc5093030bb8a4387a0dc149dbd8434b830cba41e7c427b26814466146e4d288711ef230a2c3324d1861d80d2e3875f18c7349224c81816b9b265cbfc3cd9754875d75f4119789b9c91932b2bfaf20d4983d5ae3f490308536b29a1ee5fb18528fe897f9216dd716a7bfe1991914967cbc5e807d5cbe72db089038d904e3f93423ff29102b391b5c5e0e1b908df194da35cf4dba4d450d4e32c811314bd52753db14290573a7de5eb0cd34a76f686e07863e02453b437e0347f43fa6236d1ccb9365c360e85c2e2ae5aa8ffe248077458231be5f8f340e4cbd06c933336907ec9812ebf0674c48f35a083fe5603fa1defb69f4be0e95ac882f8fd4efadac12696bbcd3fc85d3ccbe1168ab3e5995aa002539c496093955fdfbcdd5c52c8164bca045cbb05c18169abddae64c5390809a9e13f0bc15da6ac155accddbe2dc40610d00ba164aa0cbb8c7f150b1758116dca7f1a53d17425a2858bbfbcdc8fc0e2b9a151d8a2c19545d9469bb18e7af4deb8143a61d960fc982738be7dfa62e96015e2a5e064b8363db068cd37442d9462026c32cfff31db9a432c49f422636c6ae2bcf66d20c222869515193e3397164785074c45a77ec247908475588127b6164fcce4b5f943bfd6d6e9cf565e0b72e439d35c8ae6fd7ffaf532efec728ac05bc5f6dcfbe786a5aa8bdccfcad1b1e32d2d9ef0e341b7c7a106d9efece63c61c1fdf14c5d3b4173e03024596c777fce6d07ecea9cfef4016c38c76ab574cdaa71075d57787628011d207943394e57ae7c252b0a46f8faa28e6ee6ba8db991aff48cd67bb19cfbf1f1994a045c87cfa5b0173d53be09ce805935e652dce0c5c9965521186d3254bcbf4e2e05457741b4bf5c59c819edc605b2bb9b571bd5ef45283cdd86ff0c71d41723354dcfc232bb63a2b7e34a4d85e205cba91b57144cf0ddc470034dfb2ff622da2d2201585fcac083bf47361dde2e59a6e24cef541cc72d185455e3e2e926eea1d4ec79b14345b7006a10ca01fae6a8d9346dd42aca001f67c0005b607d0d3ce18a10407d34d08b7d49167038c1c66b98a93803b6c76229ce1f5050191014dfb3834cbf143ca5a45820395f2f54a4d440527d153f214a9d293946895cb904e7212df8c27b13335f70053c4c7bc90ca493e9891670c098391b699067bc64a77a6c7da80e5e507d0d81a36604b148be0fdfa27a7d4434028cc9c04017ef313f53f63ac9a66d04bf078d582595f22c90100d62e944d152739cc14be8344600b772305828fea47bc67214dd70c41eff646e280e0eda2239d70490f96e1b7f7469c6b5c8bafb6c30682739357ed5b12dffdd6576743b57eb65bdcbec42435cfbebcd76b8be856fab16d006b1ca15b13b83d171e02058812960a3373434d871b82d23179c781fba90595612d7d86222b1ba93fb106576825cdcabe06e468d190c41a602377d1f14adc1e1124932548ed2da013a379d9330f680d78c11f1bdccf642db3f9a5b72a8dd40e1ec41323146e6e55fcd185e7a3acaa676a1a8a91c253d078af75a4b3edfdf5b114b6a15893162c545dafabc0e85d32cab75271c5fe2e565228ba89c668b62240316340a54ba68d79b82812e9bb557b98b6c48ae72c1eef7636615a3229a9d18a3469a419b551224544cac90b56d400646ce2e0f4ef90094efb07a95f16124ae12a1f63be88153362dd4996d928432d0b293ac16977aeee0179f5c072e7e78bcffb25604231f5e2a5d1cf71a9eb1ca31d5f3bcebb7429b6563c39875414dd1410bb3b838abb9721591152a07384daa3c66f13b7936fd671590526cc81b8deb8952ea773d690f41e347e451556d7a19decd99c014c809736419e26e9ec17ea38c0d17224e3d8a6db0c38bfc03a8a758436611fd37c92383e2beaffe3b42d8d1b520826f16bd876509a2b678e2faafce9c9ce8b6b91a164d8e92bff689690f89ed2ec13482638a44f9a0cc19261632ec2db0697767b8a0c7c4b62dcf30a43bc188dffd4b8d5a3d75b9456a9b1d0abbccb11518a0f431db15d7c755f1dd27a70d4769e7f4a05a6d916e142e8c2e9c840b5af10211f2cfb6575387558718fa4d3331c4e0750b91231deba41cad74f0b1f53ee43d3d9749201a126448f76f844a841836fb9f12a3cd9e64fd37f875e72c5de2de22b9230563a772d446a4a12502c75f992e411b8b96eadbf1e89199c736a2d35e7adbb0af0021c330cf8ae6904edeaf0a8edf0c0286bfcde92b9b13ee63c537d872af2e6425fed9219a7fc6d16050ed0b664e48fde28fed7141f9cc3e129467845310cb8778e047e07294681c27817270bd2cc63520ea833c83aa514928407a7657563a4f868c20b94a91cece6122a89afa3f04c41844b2a0a3638bc99a35458f48c009570c04e09c391d849d33afa888f555d4d1b5eefc6f61e4f0921d532bf5d7b087f78a9b66339848e49217992ee3448363b6dabcc1ef96dfcd010f626b96a1be8190b133d97992ae5c0e984dbcda6cb680d4612c03e8c23fe5f4fef36b40ddf021976dc5d91601136a73adc52af0ec54867148330f09ff40adfe1b449204477eb91bfb3e6a10614aaceaadde2dc6218312566ebff88a4343cac6bf46bbe26675a473b260b21ad30d950e802f7f727a010d6bfd02a0f13f96d30d2a7fa272773ed459ae60e6b93818ddc26d275d3b1e440f78aa69164e6a4e09407a9a5bd4f31148feec7d2b29a8bfd753b96b495983355c86bd1d8018cd850020af0d84211102140ae8b9e2f25ab3be50ede6cc4522841bd6a2d83fe87f1e7244d4ae96a8790ea0440ada3a10bcb701f86b491d65cb41ca0c49f319031aad60e0a108db16b688408ad4e120468612e3b2c919d5846ce4dd6d187cd12870589f4c9522fe1d12a4342308c6cc67b2d458715b5dccce0af6fc198ec69650c5807473a7622c6da4dc807667b5379d578eecc812779986040baf2b2960b3132c3b3bee1a3963c2e8a74850839e8a4b80e07a6c99726a8dbb9aea25ca8827f27c62ae2201a8e47c648215ee0fd2f9839b95c9bf6f14232b1df7ddecbcfdf41c68e2bc15830e85007fd58a315fdb36558d1921a30e019af94d507d06e19789726e782009c76fa9c4c3684cc4ba9d363431bcbcc4dc2df926229cefcf663c196b251989bb179d88504e1d6769de10d7cc5d3e2bedaaca724492a8f530b83c1f03bab552a1ba492d8fc7ad336bdc275b56061f28d8e76534a82b20bfaf4f2634a253094aab006dedad6a2016696e752308e1641576a479622ee7d14b069790a651327ecf392b33aafee26f383c21c24ed922712bbf60cf6fdd7de4be5caace503da6243f5f56654ec44f0001c78ee895d1390b6ef69865dd7b09eae15171642e2a6dd090686212513f66c0ce9afd82a0c26f2976ea8e78b785f0254e8dfb840a7c33aea23073f78c29c3677a82cead5c0b72b8c7a0f529d03631fcc0b0ee9361f24c6cf8ce0f37967ade0d3a974d1cf7a72eba8ad46093cb2aeef50e3a0cf24d59dd900db322731c9a151ff48fd241efcdf61c1c66c8ad0e3f1a7f7447212c87459912d72b34a31da0178c4d67cf3f5d8eaf1b7943cbd5f5516decaebf6e36469ffb06295217dc92b6f2a968f784b683c99c55b4f6dccae1ef6f9bcc3058fb7bb55aab3533b59335b80ba1f30a3de9b1366f31576cea6dbb1e4bcb7c110b0f187fd26fdf8af8aeb5ae26d2518cc7fd943db9fb49cd5afd77e0733632ca1204b653979819f3d6b2cfd39ec5ecc7e92adb69f3a5315defa4238dbf34c959323187275629b2397d01a32bf35a14d14975f2f74a7f49e45ea879626e4f2aac5f3cc1b2e19f43e871fe221ea05fac10e675245e9bfbbaa1e26663c107da92bb6426399e7f543126edd7842607ec598f7a8cbf9c1c102203284bd9bdc410e0c8484f6e2ff76160dddef4672518411ae6591e7d200f067694c3d7e8c76f02f62f996f6f2781e4092d6e5f0d214b0e3578aa5d539d4915b361d94f33d9aff6d6141b06d876cde44e2c244d7cf95ebd10b3661d741766e92e4a4dadea25d58aef80825281707fb86910a817bc35d594aef9d4389f3f0ea30d3d50391748e623fd6498b87a6c57c2eff8eef24d2f2434dea3f4a3c77cc19fad403de7143f8087971f6391fea68da802bc113cabb6d6d4a183bb614f68cd77a6c49ed5f8c7404aabf56216b40597dceef9edd5d072ce2fd3e04b1592bf1e6526052d3e9eeea1a91f49dc7ed3efe032b6c261821767641cebab7111a20df063416dfe751b5fd9f091b4db611e874dd4fc1ddb68968532480c3db78e1c402fccffd77c4da20e324828c6011b66fc566c3c61534736e0d18ec9c8132e48029ff1054e5fa89a1587b16de3f4ee09fb9112b04fef1064735f5f4e20ca6c0270446b76c9a9cf5605e4cbd40fc00135a2cbc60dc9203b569b90cd4a83dd3c06c390d3259d807655ebc166dbb5303d8685717978e47e66c910f62d3e544c997dcb0b5a286b54b9f1c7c62630a200489c980024221da352ad86b3617557562b87c675103a4f4c59e3a3906057eb28b19a0d4bfd35aea14ea6dbc4a621371baf4c1059e547d235932cd91d0004b77a2bf5cf50cc97608e2dcf23111b64f096a6ea646f9b6e8b8051309f4b5b919be147aa5e4966172f651ef6bd3c5fed4ee64c77ee24056f1575436a4f3b566a410b0c40bf95ba0734da28351b7ae42108da18885a8ac6a1bce7d06e8220ba0da1676b1c434c1b2c6c242a031ba880dc80d03fb07679160acb05f3b844a150ebc2c0d006e78e7c08f969794468e0ca23b9d3500152592321c14ddd47f1c3e13e09c9940cdc9c46b9c723dc0bb1dea7133a03a3dc36d9dc0377edd508ba870eeb9f50b8128e8c62e50ff51d42af463c1a0c2306edf307e73f0dadc2abc1cc106fc1ffe71a178ea96d749ae44ef28980815d0abe1c9273f92e980cbfb7e7bf06c068c7ec9cec820c8bcde4387877a1935116d154b61c6355b0684f045de89254cac952e8544c74a11820dfee15b45783f5138fe2c81ac524d4094d99ad8a64a7535ca867375a747c71171a5bb2af024a30286ad7f5c9265384828d84400288f4ba00c393df8391c03e78b0aa34e37d7fa3e3e040279c54736ea381035a4c7a4c6db1201a5efa43630c018d55d88c7b93854ef2b09b6a5df1c803afcdaf7fad8b5820a92b52d29156bd39f0a6e165c65d75fec144653b33ceed4f55d9d689e5d6461d5cbbbfb65d261907d735867e2d5defee3a74a3c5c05d66e059e66d1a0159f0203d123f83dc3b42e360eb6d40512ea0ed0bc4ddbe731f2b7c22994a2d6fef5889909691690a1d8e6083187b399b3df06873640d896dd81506b45c1a5c1ed42bf382ab1b2018425d74ff804b9814d423295eeb030c19e68e441d273aab1b55141708c2aabd35e95033ff8a07d8285fca67c0a7b38f2e17af3df0b2e959b8968ececcbc6300889d6e6d8522930e0aa34d83646928d15883ea3a786c431430170840f54a35ae97b9acfc208b148dceb4be9eebc061867b24fa790251c8af98726b1a769a0ddc142a3b7ae9f9d0cb309f18a902cec7e3088a266fa0060b22fa10a4148d190f24d981c881280a2a84cbb684842ff93f23684e9095a49ed1124536764a5b0d43e3ccacf01a1730c131388b80ca6624cdd954a3f41f65992324b3d4d8e4cfa487e1b12e043c2a140580d1f0581476d7161a8c3e57b2940cd8491dcf4ce260ca3d792f156c0c5daa53bae8826e6491220eecf5ef1668413222d1883876627e1b1be22cf80b8590648d5bf73d20c06a9498c474dccc1f456d43099a605149b44553c520f327a87e6efb02ef638804a347ae332fa5b399155d42ed3efc0fdc86948850370822e3a75f9ef02bc7f5aed070af9034259de6f705a673a32fcda94e1c43c16566e048ac6a60afcc57c0d5e85777d8e7f5d786ae9f27ea3a69fe4dbcaae8d7ce22ab6157e09aae3a3e79f0b5893c846f623eb0f7a4560f55ad90a6f57a4b9b45eeada021aeb4f51bfe5bba74d2bc9853eb0714af9d34fb7643993e94132fd48e823e699aba6f4133ae44a7d812f96cb7b5cb18d7693965961034732bf20e33b1c64e0d349716ffaa2cc3bd35a184448682809c0ad5a59beff2500cd6130aebd9c50d605c02d951887f3ca7f4f7b3337e28d75c284ea97d6cf7e35f8de4323d65e225b565ede46b13040396b3bf5ff3a8f0a37a789da46a8ec9805d1979a13de1dc27f200b40e864d2223b85fb36404ac9d4468851b20780e011d89724a68b9334172951681f6babeed28b2bca347e13c5696f8339f0da07834c549495a14ccefb93386f6c495fdc366859fa1858a809a91b9018e86e2e3bc9c0707a0d7d6824286c7cdf7495af6f886589e74c9eab65a8309b731fce3d666806833439eacdb38434e21e054255e275392cce6b146c382db831a37fabd400de8a90c88df2415e0ae62f067e763238171837ef6318cb14a717e2c867833b63607b736fc725d91c00496966bdf63c0b835669a925a24e13e7d70fe50166ac59ef28aaa9ed5b47a109e479199a30c72c2afc09661f31c7b130798bc7171b94fdcf80292e02b292a56c60d3009452b03ad7d13380c456b8412397e2cbe090c2eecdd56e3109273157ca8433bb2e763ba638febd385304ec83f15bb88a3f23e20a27b13c1cb4c67f84d7d9aca501cc0d821ac753018e9cfe9dd46c49dff51b7dd5377fd109de25da42ccd8270ecfd04cadb8fc059305c554d07998424b5b2e5392c632e9420370ddd1427aa722a1dda14164aea8d24d734aafe821cc866b250f5387518821d8e8d40cdff3ba8efba4008ad7eb12154ce5fa788985c94772d359b865a48db7bef2db79452a62403d40b040cbd0b1fcafb1dd6e839ffbcc8631dd328be19fd08eb0c9111b1487f3b1669f4e843c75ee4b15a895891d5ca8858248c6a9e7625348fe3384b6787e53127aaf0c91513c5786a8fb23bcfed4e70b6e4c6dc31f718e3733dc5c446466fe3fe1969e97214eee449a7cb2524a377d3df77bc239d36aa2f79212f7ca1c18e514e8fe551ee97f57d4a261286e59083fda61c8360e02437116e2887be97b813cb9683fd3057759e4c26aee17aee01e656ee0f7dc8fb26535cc9c4571d9343ae8ab9e5126efdf8d38b9c78917f87fe24942dc9933beb2e8a794cb6da9db490dc6187ed6a1eb4d611ec429ab7c6ed047bec06b78bb450fb80f55ba897f8f7cf3ab3bb901c0ae5501fd131e95db8a263b387648cf6e4e822c8b6e305e99d1944ee78750255e0620c2dc38dcf51a22b310a47fefc897550fe91857960d1db41df2b0cd7bd2dccbdb3e0b274c379efa3bf7e12a39fb15817097167ec487d9a1972a595701887684673ebd8acf8864e17224fef409e6e449e63d8b66f864c4d1a1cbe1eac47338a15c995bf504ab763fe13b329310e25167bfd83d3da7b3b56d49349decfcf1ce13ed2ae1fe6acb3ced2c752ac631f59fe73444393e7a83e77bfce1d8bc53a46e9dfef8676241209e374ef611d24a4d7e1be7b12f66a4e90564e27710ee499bbced29fe0ab93ccef256610976795d145f4c88f8f8b67ceef984ccd6c06a6911f593b95a618317be2fb1c9dd37a6cbffd0596edbfa7936783c6eed64661103927883c3f3a11384b82db71b505973a21404793832e22e81fca50fd00dc06acf0d2c0789adba31bf770d09f02b0ac6538e88dfb69c2d8853c43cb214dcede6ab57a589f9b0a3f48019225bc30042a9860f5471bdf4101577567ff20769858d79ab8d96fb5bf982ffc4230370ef5bbd1e146071707bbcb32ecd165fab29bb837ae727f1c620e63100e373d2d2172c55f24e664c40d2f7671b08322134450424371101ad21222c730dcf7ded17c7bc259bb23667f448e258ac454ccf606e7e36b18c7c18e78c7cdcd0e57c5fa5f20c20a2bc488e8103e6242d9935bb96b2bf7f7a3338e284494e37f6114c2712cdc1df8e689abbaf13325dd23ec23373836c6d8de8d2894258e6f23630ba64c884239f4560efb487e72432f0a798a66513791a7a2b79ab85be1423d33045c8cf1917d4e8b33b4b215523b9b72f33db88a067514b19b40fa18c37e3d28575c78e5a7e03006715893137be37e512fc3374e3b8a4cbb09997615994626322d327ddf7bb6fb4099a2f569cabfba8ff43b16cea8a4b061996ab85f125b4bc2f8e5fab41e605dbf289dd57a0f7d4abf87529e6ef5e07d375d3b195894a250a6433e529ef49cf79cde0d996f121f298f81cea4a7291835ffbee9e9cf902b7ffa3738ae4a79faf441ca02536b5ff4ad4552fa6e1c0b11b23df74234d4c4a88951137fe947bfc34272df8df8a7b80bcd24453c705f5f07f71535ff434d8ce2a1bee975d857f9faa637bdcd6915953799262aa57ea8948fac5a55623cf893eb030aeea17bae508e9e0dac8304c7fe56b14e7ded7590945e677bee75b4efdec6fda73f3ba495eb87242a51c22747cf06121cfffa40e4dbd751ef17db65edbdd947df25579175846edfbd7d2142b48c76904cd15613654a294c28d37ec914fdcccb709b2594652c4c90cd902bd92c2b57281cfbfe71f32cfa4fceaac76ddf0e6bfb7658440e66363771232bb25038fe16856a7cf26248a40882107a5a2dd6cb540685fbc490934c9bc85b397beb42dcb089624c91044bba7a4a2b381fdaffb0397bcfd4a32f69d64c1c84b98aca6fdc430ecaa198db7e0fb96afb59bb337904a765aa9fc887a273b5661d95013b5038240f77904cc92761140ec7611da3d1c7c5f6703c1cefb9f7700c5b28cbee2050a66a874f32559b48a65038d187b2fcf83b2c0f922b5495a82a5115f3d0decb06cae11d7ded751f0d43b4545617c271c75aadecaf562b6f189563f3df302aef64d913e974a282a1a19a659552fe58ef882441881437d63edc778eb26b197aa153d08d2f2230479e0af4924472e824f472222227aa3cb6c5e3204793b85fbf663d475c990f7ddb53c393b5d5f6f054dbf3d9210ed256f6dffcb5b7436a13db63791cf41efad8f638e85e899eb8a18dddd0f2581e3bc45796e59ec1207ba6829f8c043d406423c8fe9548ba80e55f81e46a663cd9b30d64af65c82ef485ec155687625528d757f6aeb15fbd907df264ffec47aeae4b288b997e5cd98f2bfbb9a54ce8e2d68b270937ec8abaa22d494bae48478e1c219160a51415d20b2657db0b872a2a17dffbca24d846aadfd6ca51deeb726d2d9972a9dcdb7a59fb72695654220d5f98f6dbe758b85bd0f67250c346bc0f37efeb481d063284fcee75b2ef304a47977d87917ca4e9f11059726e1756b70bd32ecced5066dd965cdd975451c9e16dbd5af71eb16df725575b128f4c58f2ca9b92ec7f99b0bd64917b8fb81c944edc98c3ebca4e3a225752881e3992fdbba2ec2f89241187b7579cf1b73c72b51921a6fc9b907d8be26e4cf84b0fdc70f2f0b4e5e1e1e1f9e19342addc5228891cc68460b26239ba98d94b122e0ee03601029e4cdf730bc7841b3fa45fbf5e938d53da975fa87dfd78c8d75ea353bef6e1c41a8e3d04bd0e3ac51ff10cf7a7913123cb701693fd2bb6140f71633ad2e88ff9ac0ad77e9cd5331cba64ff2bbf635cf59962cb49393b877eef397118c45bc66efcb07d9eb8f1ab1172f6617c651efd9ef574dafdcaf4336bef3d9dfe2747bf183f7a392020f3a01fbea07162291f0c21ad34f4d80c70960f32159fd6c4dc449e5836916d7ce485522cfb8684edd5f143c2e8b5bde46a048498f277c9d4159c8a3bb16faf48233e4fe65a4556074e640fb7fb1363f8871b1374fba6a7e873a3270efa4b9494db6b4bb2c5b627beea20bc3625ae8a4a20814806b431d95ebebd36a2ec9b93ec72d20cc855e1e84976efb2674972e955ab94938e9eb82ab41f6940f074ba239f510f8a8766c5b778e4235723259e0a47269753d08f7cb2ff2848ae464f401a1a1f3d1905f9e8c928c8474f46413e7a426af9ea8232b673530e474f3c1c3df9981c8e9e647f6e48a65c87b32c2e25617ffb1dda731cc7bda63dc0fe861fa03d87ed6bef2384c57b2f04e539ff8cf329220d52f60fca2e947d7bd293621d697bd2931e48f7a323ae0a494545720584f4db93befbf0b6b27ff7a37f40f7231ce503b6f7ee3752cc49b14dc3f12cd641d218877b0deba06020286f9fc34046cfbd0e0b0c04090ecadb07427aed3d0ce481b078ef7758d90b09cee8b7d72161d2b3c0a87eefbb0deba06014253d8ef6248ca26f7fc3288a7de090fe87114621610a224470030fb080090b87f3c180c8c20124432c0a305401832c24c142c13a34f826c668ec472b581dd6b1c129efc3f88a42acc8e2fc4b4172c59586802001a2fde8c39250765c8269618968f4014182439249dcb0f472151024389d05d23de9bd5f47f7a41f7d8d79b018d541deeb2061546356577451f675786ff1ebe81ae3a0e8642891155e98fd6044a8c6b13ffafed1e84923ebe346a37868d6e8eda374d8273de9edcb0f33209f3f93888ae1c6583df32ca67434a9fca6fd8659e185c94c3f2c019d4831b942954c1855c23c342b03ca5e340c17a8de4fb9595653503a2c10d25bd2db114f06546fb8efefb632c77d73664073d2cf80322432a2163f591257c5a0172c792dc99ebd865ec024ffc060881c664d26edd2cb55e185e524ae52c917e6aa9044128a33429186cd7e4943d96fecc3e66b7bff092457da9f8626d18c5da019d2f7dd1f99f2d2ab44e4aa7eff5212bdbab0d2ab64844863fe19604554c49490fd969ac8fef387de1ffb35eb0239bd42d96f50f6d994d20b93ab0c48ae48f6dab7f1f979e67a4842422421211229f613fb717243eefe6c5f06f4150135f656be970b4cb8f0cab46b3afb7ab358f56e32a2cf47c7f0a73307714675efd7d9dde54a69e9e9d7a3132a5525d9ff2e99437932a15fb8214704877b0187fbc8f20f9b751067fcb9debabb631d8540f2fc914037e48e4ce9e1e8c6b40b37e48a64e77cbafe5039b4726d656ed49162a1bda458f6eb30b9ba3d76625876d2cfc85a2e7bc90c2876513742b4dfbe943befb0b8c7f19ec33a48fa1be374a3f0f6642124ecbd9011ce6232c5759ff78d7e8745c483f75df7232c94e90c05657f06502e5cfa38621e191167fcb5dfba41f13ba8bd753bf42141bf848958438176c2496c6285f71028533ab49327b95b64ff95b8b291326651e5bd3f17497145aa29bd67c7380ec6b038ecce1088297f7f272a1eedc7cd8835a24d04fdef57e3bb2182b18ba0bff7d908fadbc8d529a6fc630c6f503e19612b16e039dd67d503577b1e393ca2831a8e2feca172d84cbf47968190f48a3c3fed55f7c54df6bceed3defb7ce89ef35efb72ba2e7bef5e7a239cec38ec11857cb01f33e79f636dd7e1eefdf37038bf10c82b73cfcdaecbdedffe1c810f9ac39ed47194893588ef8c260d47d4aeaea2b5e58e4823d670b07e657243dbad5850f3b49cfad7ff11440ef5757095fdfa39628d0c1c228dec4454836aad359f64d4ea60aeaa5c3f32e91e1364aeca53896a2c87b528b7609ca6e192109703972494515054d7da2d24bdc66929cfa96e55a2699aa6613ac441cf7cb29e1c6643b2dfe4d1b679ef60deba1b87de673d1e11079d267737ae420ed620073b0c37cc7ab2222a7fc28d339f9eac47ae9ae571083791d89eab9dfd4af64befc2a9ee687bc1e1cc2fb4c7419fdb4f8ed2aeb1d68df2d021b5883b73981579cf55c4552eef0fb3bdf73b6ccfc37b1ff73ef37170f46544660eb39e3c33222dbe1f9eb7cfb29e11f631f3ca73ddc17cdb8dfa85215071850cf3b1786e76301f0eef39dac17ca7971e8eea841158a8227b1f3d05d42f10614515b2f79ac2cf671bf9f2fd905b509527c855a3f7af4aaa905cd1ff7781438b7a5c795afe5379912e9a1161c1d1b9f2c4192337f3c1594f95c10d25514f9024928f436b512db8a33c9ef2ef5cddc360e972fdbfe42b89b5f79e4eff204893ad66ed6bcfd9ceda8fde08dbb771d4bb7c2d6f23511f49ab3ca17cf9e81c569e493479542a0fcdce4f2ebdf46cdcb71fe951be19f68842f962128e4e43e3ced9c894ab62f6ca2353fe2e3b905d1a91fdbd89135785def2ca235794272621924397eb7e48f33f37cd521e1cdecae35e27bd653b1cde3e727f8871ad16f73af489e881bb91297f1d22fc25579527a6fc3d2687ed025d61bbeec9e9cf876598fefc8ae9ac3cd9a5cc4e73c7298c09589e0b594af3fbe9d7578833f3b97601f31ced5a1e857a976f794ef36cb4e01a2eaa0585fabefde5a9b783dc61a55bbe2fe65e791743b27c98e7a2019a30c9f2fb0c4ab264f1edd960793cdf45fcae9144f1259ee2fcfb2d4d2489ba463681c1e1e92588c8624924573256ca7ebe6cd2352b3f6170784919f52f388b29d4f7272388fafaa1fed422a350b2499e31509ec326ea4a31118c3251d5f2f2714b6ecba35a3c4f879ddcf2a596b7f19647bd0d97a7aff2852adfcfadac7cffc795fe55fe491f83b2b2e2ade0b0e5298a2b755ccba31ed5228bb8aac5cf972e57c1fc7c7904ca37519396078af9fefbaf730b4a0503131be65b7c3fc702a6615aa4b487c3b30b2aa733fd1c526ecc61203a5352e95f56da09ea67cb4f975d7fffd1c3f1dfdf73dfb7870395d3193f10d3c5bf3c2aa7738b0762e69c8e6598cf21651898f7e7bc1d56de0506a233c661ffe9376f07f9301808540e98077dd23fe671fa1f9d57b892772495e8a85fc27c92070ece2339e5e5eb583bf9bac8c1f92e5f3ff196cf8548ee76d3552ca5dca6efef389f441467e6d72a2e8b67f96e48e9da6b22b93aadccb77170d252e7e0f65d8834723a969bc8554d7290df2a407456791b1953be2e973e1f59fed12bede7087bdd66319ed64e5490b9e392c50ab888c39b9c1302213329e62ca77bef8b4ffa7ce8bc2f279c391c7d7cdb3d0676728731b0e1cf9efbd1798b5ef7361ebf99bd2fc77e971366a00c66b822c7c7c04e8e18031cee61850c2144068225c7df708c60a8e19c888d74403e1112137165cabf032b2c2274b616b8a007282841119c70b1748808427f3e8b884bc48d44508caf4cc58f2c2288b032157feeb4944b78d9c42ce3f21d2ac76751892afb711455d9472ffb08f6bbcca8b8ba941f56ff1baac8a81cc620f99bb499298731c8cb610c92de7531e0a28c1c79180942c342e24fbfec55b7f20042e6fa3ed0e772e863c0bb812b0e67106f87f9f4738210328410ad8c819ddc58e250266b2f41d339399b1b7c75656ade0fa31255f731c63f4595ac7d43c798747a49878e31b5dffea6634c06c4997943d7f4d03170e81a0a5c1d1810695ce0a66b7a3cfd120e3dcfbf37deee89c10de350eee1039eb7f9da7c9f753e057cb8c0fcf93dbae6c78c66c8f36924aa4fbfbac3abe390befd90be7cea63e61d107095ecec3492455c24c16ed24829fef1430bb92d25c561c5207e0727156ab55a47b0e6ff8c346254c5a884ab95e75b1bd53db174a4c95c7b0a88b96ee08748238db446eefe766d9d08629cc10de36b474b9536f4e44449ecad91cda7f9daef037f1936bbb5dd10b77f62a7eff2a9d00d0dfd76b7c1336864e4409241336376fb10824b93ddd44177e63036e9115fd30c2e9363947e83c7ecd8261bc3dd9115dd7e8f4e135791e533b2cb18b862c6d977cf460fb7b40a71c376ddd9b23c925e71b7cf46891e4fc55c3f1b257cec053ba043c40c99920f24571de0a16179afd33d11a70e7858c7340414b8c00521b06008285844581d226266e2ab76bd942892434f12fa12971f85889a90c37675bf7d684ff1084988a1091367d841132558dd8733b6c822c2c58f105c519c0105423882d561243d020f34c9610cb261c31df85841e2d0113310b1c40a269c01094b0749d823f04013af21e698a3b4dfbc9d24cb77975c8d701fe129f9edb21d0f90c8f2db7586dbcf75377d4e7a3664cfd6b88f4133c01109e534a374692ef6dcd5d8bd1e9d8dec63a41fbf1e9dc6d9dca8efdd572c89784aca9e589b20d29ad64629b1bfccd0f2773fa225573d039eeec916b71f91476ed8ae235c25e74bd40e08b44bb65a9974c9af87fece9a6e8c91d93459419469c8f1082840227331b3e2921a0c3588153ba1c25bd9799eab524ee1d61863fc29dcb08762adb2ce1eea250e762685eb1fdfc6ad96435f91231323a38fbdc49d740bb96ae2251dabe24a981c825d8951713a2886a218718e6cd984fe7e391467fab328b81324723a0a394182960327228855487ec10a39742121a158491d73ef781ac5fcc540eec7dc8f79202a3ffac8e2ae4ad4a1f2320f3e9017aff23a402032a4fba38ff4a3d7e1e22f46c55719fd7d9cd1df8f1827e655b00e8c8f799dfba3df617130ee8d795454f9fb382a7f5fbcca478c03ca3cf83b2c18df0e2b7a3830fec67ca8f82e50f1499f7a4ee6c50e4b86860fc0cbfc8b0f15bffe7c0efc54c01758b670524ffaf8f190c2a8f891f5e2493f3f1c0060547c00bc0b98136ce0240cae568b25f3a9948cccb7c34aa97cccab7c0c0d347c3bac00803f7af047608f503a9a357a204870520f7e64014961d4fcfb301ec4a88975c0f8fb30b08e0e12d40d8c674064c1c03a6a9109b2b0821504b55a3cce82f1415af74f12890ff4200949b002061e62f4315f9429952fcad40e2be6db61dd0fa56384e2a159311f59f7471504ae98cf635ed4b13a51373c7288b4c372f1edb06813cd8a00f86864aaff0514c06a52b9d20a20283cc6d27f9e1cdabcd7dec2249338bd2f07fb1aaafbf9dedbcfc8e8b50fa57dcc960987b9efbe1cbc9f6f3fd473fe7d72480e65ef7d465a738815a44bc18b8584fbd9a382c095bb973039e431f7a2940ffd069b17d02bea80430cf2951c85807c3cc618c39da19430be1739e804e3e81946e5903df7dc6718d58d806e1c1442751ff3f675df0e086c30e77088427dccdd87a7477df84667ee63de1ef5f5f05120c276d0d3ee6d1fcea4d0228e7dd1bd1bf1a977236af98e482eee88e4e29246efa8cdc55db0c77efbec091deba21e7dbf84492b5abe5f36913157399145ae7ae22afcfdb3e5aaeffba790fffe3964f64c229106ccf6f50e8f1209e5b76fe6d21796fe83a5bc8bd7623e3c65cdc5db181c53919b3da31c8540f2c62287640a66854b22d9e49331fcc927b335854c9e39e49b30df241267b297956f59f9d11759b3e60dcb22262cd8638e0527dcd085b2907ff685b3045a0ee5500fd98b6f52c19289a75826138a0b510a05108ae866c28502a80b5e85eb54dce6e61439de0f73a807415ccd9dad20abc8dd3131b8e7fdb4e0b262ac289e82ee0be874e4badcc75a7f241e4c06374805818b85643e12eded7421b96aeb421c4c93439a1735e1da0f7de8862d8784108219722887a684c9a1292e8ff9f143399431ca871eda8dce993734d4d9e7317722c5f5fad1ddb9ef07071bec48dd85a6d0742aeefce945ae1a05b18ae8df598b2b1e62aa5fd34a13dfc499a69998a6caed0948d024379c7470507e8cce4de71b77ed6dbec1216b5d0d870edf8c29ffec93a0e3d7c95207575de084c38dabac3db190a0729874ce39cdb084118e10e481581efd8db5c432bfec39b9d2418283f2a64f7920dd9bb00e06e27d0a8e32557f6efdd29730ca76b6e2e0d69391ed3a588af9d2b3f895b84af98b2f0974957dd04b6effe21e27d217929ebbd696ac2dd9d3e94bcf9d3ed0df410fbff4fe316ea3b4f2b1f84ea73c318ffb238e7a398c4aef43f7299ff7f30b4f56ae8020c14979d3034179959f296ffaf91105c5f4290f4405eb48790f033191524a5fd879c46512ee71ca236c84e7bd07dc8d434d7c59a61b5c10c9ad1fbec9c1fe1867ee74705a9cd357e4383be936d3ccf02a92538ac00397524a49a594524a492595734e30663e67e93b8f49e7941dd2f707df412929069f5ad959d2efb2ccb620a7ccb27c574204630ea5eac60b8a08c6dc38ab727e80cbdef288fb56892208c9f6e9db6d14e2640f7764b2c788439cecd542713bfb99b7008b63b4f19b1e763d64864299cc7ef4ce6f1ce1f076383c7d94c9f1632a7ef41e90cd2eca14b6fe4d0ac50d67805316417b6e7edbfc8e5f23876da426a77c80cd667d9b4a71a4520a8173c0f5dc46342943036eff9cee2e458c307218710f077bb8ca074d36527f277601e7e7dbf915532ca48819167d9e14d6fc1eae3265ff1e992687262134e786b1894efd934cedb022188afca0053ff881b55aac9390229c953d8f0d3c36b07490e0ccd7d921877490e0644fb10e0e13eb04cd0fe3500c03079830a2052a68508512c09d122819020b586084211d7c6146f6d6ac41086030c40b86c01252c40c6b3e4f0aab7ef474b4b8e20ad6f41eae8291fdeb5ce5f832c2c4dba185989867b2e6532ca4881aacf93c93455139b629b27c1f3459e21c523612c6b7f16ee52f762c53018781db3f1d8c7fb91bfdb273b09eae102453a650373a572148da1fc70eae8ca9fd018ea809931a30a1194b92c80802a241c206323fed02fb8898f619f2c4a55bb193132b4c444c94f43402c7e5e0b25cf9383a9fb81813da68a31092c618e8cc5391a8ae2bbf5ab9b23fb69fab2f1a99c92c9338ac9526d757572486a848787de1faaa400ebaf6ed851b56a029861bd6b0eb0ba8027505aaaf1fb9721f1f5adf355c815e2db8a1f51c02c932fb4f576bd65a6b059a3f27fb173cd1bce5dcca1bfa111bb8fbb0e0a67254420845b973e8f351d406193912579d2b2a2104a2ec5508851dc9218df7730329725883becde68fab423f921d15270f5cd5d93c7faadb9ff29bd9d2a016b9bdd38dc3134b96282184a11c9508c291b8bd7c5765767bfcdbf7a65d077dce251ca9ba38e83ad9beec1ed72237ec62cdbaae45aef66f3dd2b7f7def624f9236ef4db08879d3d6c1ddcde66def6d2d6e73efbfdf09c750e5a1d626ef927896f47f976d4560a50b84008142e274100929f6343eed0c499a68933f4e5673d1d3a4f6c25b531cf187f414a0e9eb8122988c9c08a1c7fc6141b7d65eafe87cdde873337a9c35b73ef8732f767cf8d649d3efa3c8fb25269444ba54779d273b694475f0977cc24aec33e7edc18a19368e6965ceebbe3b6ed8bb9404c96d5181612390ad23b2e2b18b8e8ab8da5c40b6239bca1297e94a1840b621c497565b483eee5789149aa3be372f3092642444de6cbf99287fcf9f443afcba19c39a41c561cb6b700f94074f61dda0dd44ddcf832ecfe7e4a298e39a46cb72bdcf8f1955139a40cebffe83c351cce8c43dbdf8c71c677505406a24cb98ffd5c8cedb5ee7c323456fa1edfbb27cee92c1f88ce12f320c978e7d0ef5846223165f2dc9e67c8932339fbfac4276b5f9ff0e4acb31f768eae05c82c47cdfe7e21cd529399cc642665c755fb6839963a6c9fd947f2fcc9d36bcd4c19a5f535ad14b598eadcbd835a89130dc1a636dfe7c76ac48d9e7974afe3ba0fdda788ab6657ddedcfd05d236f01feb6dadae3aace6e5597a4baddc81b993a2f877f66323d57ebf7a3b325793b7c39c38e446ca294eee7caf9587bef749f2011dc95975f4370e507451ad9cf7a51eaaf7c1504977e67f9fef224ede3e064f15cafcc9e594f94d2ad59663bd46ac7737b7afc3399be535036cf460aaee1a2d4cfbf791c9c3c431c9c3dddad259f19cf1057f5b82ada40c135dc9b659911ee7964ffa3ebc7c37e315b6a375acabeb05dd0471c9c47e449b11152115f9170f4948fcf938fcf1f79b3b3f395b2388c49f26c6ce3cc7c42e3b56dadf6335a71866bbb5067f4658811b4926498dc23681d9187829e00e5ed2b199c641ab98d2003100f47ea975fb7afefd9d89edbb62abbba55afebeae6390ffa32ae0a7f74b62fd37dd85de9f671db1793eb17bfbfed3dafcb5b487aed39d26fef927f9cf2e87fcccc7d51b64f88b27dab795f7ff4c538337aeee3bcd26f5ffcfa79f7bbcf760ef66b8ff21deee42f7d21ed48d8071033c738a37dc459e7fce07d587ffb5e40fded3d6f7bfbda6f3cfa6b98a3bfe24aedc7ffd12d23a37d61fd48c3c7f631ce7861f7de53cf86d779ddc748e3c7ccdb8757f464ddbaefc5e4ee8bef7d1c0ebb1c3999ad7ef3a839ea67df5e0e7402d1b9e324f5e887f322640cecb4b2ff9cb5ba67a366b279d01bf4fd777268933dce44540e1bb2bf0dfe94f615797e611021f2f45ce78c5f4edf700f2d0f47dd708cca61438e6f43be22ba47a21f1cc9a4f932ec119f481c17305fe29c30ec119f80d50977c6f824f74f1c7645c460834c438e4c88a195b9faa14bccc33d1b54ce0f27e631dfdfc3f1a3ed91fbc3f38dff715d65bb73f8fbc48e1bf37828d095164a29ad95c6b8d02efa2a53bd7c84f997175cc38579816918fc8edae1f42ecf825f7076397d8c0b69a5e5f494d2a72e255489a5547a71a128ca42e93fcacbd8e929cbbf0b8579147d0b03f319ccb3c0c0d03fc1508a726241bdbc5013eae561545e5e5e9ee5f4527a7998f0fbfa2cbe90c5f773a7d3f7c7a57cdff72f56be8ff4bd309d4ede09872f5f61525e3a0ee6615e300f9693cbd39747345193587ff2c5273ffa995c5c5cfe4f2e2ed7e5555a74ad97a29e9e9eb23cfd76e2aa164f619e7ed3e74cdf87b10b17979847bd8b8bcbe9635cb0b860203a3f0efbebbbbc0be651fffe8779b0fc8fce27ef484aa1a3962ed444e99f3e9616309fb73e17225554e8d72ac226f2d39f4e1f76f9f4d74f2a7f3a9d3e3a389f3b7df604f7f4f3a387c3baa0509ea57fe54fa7530e2adfb57c377c38a0d4138b4a8a6783859e287daea394524a2965c1e26d64f8295fd8a17c3eb2bbbd873b6ec354abd4569ad5d309b8181363fc4ae987b607cdc9c1ada3277178937764fa8dd33d68b2a63dfdb8865ded2fd0454aa96b7fb5ef64525d1bd288fdbcc6371e831b7e96408ec1b1936d9c7e3bb93fc6553ee7a474e650264f1957d5a74dbf1c64a6cfd52f46507e94d1ee52ca7070d23838bf76e086f7ba2ac32e59176968240d4c7265e0624c2885727f146221b151cc20965de418059223329da1c59c751bfe393226cc4094bd7baf111d8c4fa290cc3d2172c398ec446e38738ff864462cfbe060fb38682376e10a55e4b65747c7c6ee208c334b2607b90f6df71e85ae304488e849fedcbd017cccc093bbf7b8840f90a824b85cac23b85504d71fe5fb5d89afeef7b7c3fadd3f1a7143f9f2ce9deb3823f76dbcf6a07c287d8ab82a6614441a453ac3dd87d2d5715cd7b5cb55edbd24c78bacba285fe323a7afc89c0f6e97b74310cff4b9761cc6f8d0befbecfbd139e33a6f872f77582211eb917cd96e44fac81509bbb5f77a5050509ce9af22b8a6af21b861248add778bcc9db898e9ab20b8de770ee54bf6cb245b2ff97ac8845b8907451adef98fa4bf4df980b039479ea195b5ef3494fbb508b5cf47e7574679ae9bb861fb68de2e577dfb384829c5df29a311d73bde7d77df3e455e76da57aa436ed83e2e44ee974546dfdaf7b74bd3702833109d3b8cca21afb8227746eef3f0fe47731f0fffeeb92c877f9743ca0bf0ef723a7b1d45ee1e2275afc455dd7b7f8add4be2dec67d705513f90e8ab5e4e2a03b71d231b4e7ba4bf95ac8dee8e0200c18dafbd041ad24d2f0912b0f6ae9e3030b1cde13cbf62adf134ae403d430f322a6fc3d28c884c3ebbef2b9e370e7a7db010157d50fdcb003f19565526454646464566464522f2323f32f3c1b32372480956d1060c3016ad4d030c08c95aa06190520c00068620840e33c52294565a559b4d72b05e59905e5c5ebbc56abd4a2c5e7f9e57ea55b22b9f846312a26150f068ccf734c37c37262e1021080cff3cc06beb8bc683478066de602bba8a91794d229610000464e7d9eb9982ec78b3c1da47276e0e7d93f23f869f8a68333987bc994b5291f992af2923eeec3b98e80d199cf9f862e028bbe8b5ebc7c19003c07a333e801f81a856b04000fe37dcc4c1ffc669e2e5f7130d811d80f0c28a7acb8d76b0a79cd212f2259aafc8a73b9602e22576c89ab5678e02bae954449962cbedaaccf75e5501ec912f5f2bd89afdcc60d1ffa9304c8772257bdac9cf5a10b853e946d92f811be9208f8d06d906df8d07970800f1d09577d2f658d0f9da786860b26be922f03c8191f76932c9dc4bcfc06f29594f172b6ba48967d44017ee62528800f9b27c687dda2f93016ada62b934ce292f99229fac2dff352cb295d45c38a4af930e62bfb4bae36978dd70daf04c0e44ab32c1cda9b71786d7078a29ab5160138b4d7061cde03605b0387f6d6e0f0d2b006c0a1bd33707857af4c5fc2e42a83b5e42a73c9553da97078ba35601918762a000e4f970038bc0368591a1cda1b03875700d895e9cf975c55d784c91585d1d3e9def93a85a75b9a30eb6ab95a30180703404ad7ea5a42ba56ce5eafd72bd37fa1a259cd730ae7e25c9c8b7365fa312bdcc6711ce782c5eb583ecf2b9f676e83c160b04c1fa34823975c6dafd7e67a6daed7e67abd5e2fa55bf28cfa3c6fdaa66ddab66ddbb74841d15c72a5699aa6699aa6695a8b4fc5f47d9e5b7c9e2d4cae34cd6a56b39aa669302e565858975c596badb5d65a6b5f62584e319f67179fe70c2657d66636b399b5d6bacca05a50d9cbf5ca5cafccf57abdc01797073fcf339fe70a93abac2553f4adbdb705cb5a592b6b65ad4cbfe5450b98165f5f2fd7abba5ed5f57abd5e993e8b7fffbd8d3b85c9556dc160b0daaaaddaaa34b858e177f1d45aeaa22fd7ebdad3a5bfe2dde82cf34d29dcf9a1fb703057bd78fa9c15aef28fe16099befb486b7d5e78a6e1f31c00faa92f3ac8c1f02fd290effe5cd6537a464720003e1af345075d7cd141fc454f7d5f74f03f982f7aea85be0b6df9a2a7584e94c517518464faa54b1a15c9f48823f435243e25993e17804ed2afe2caae2747173b2d82f48e6c0104512b57239d7d695fda97d97bf69ebd67cf6d1de75fe842ac71f9dd92b10abba1c7dc0bb1aef12a8790ebd7285cf95aa6793bd81cf2adf42f442f43ae72032fb93e8ecedd6e27514f7d6be5bd2a2a79684a285c5a7d6a6cd6d850fdb0fa6499f6762bca9b1663645a967d76e3b80cc7571683583aaeac8c59f7fed50fdcd063de85d8b9be24e22a7faed65aab5d92439b65ccfd73270ed6af4fb81efeecbb25b9da2de9c453d5a397611973b0fe7bcc9dd8aff5b9cde6fc9069d631e551d6acd5232f3c39f913214824eeee10ccf1e7ec2ccb32d9dd3dc31afd4b5c49e3aacb754fdb1fc6980ed23b2de9129c1024373ae774006411423049b80450c3124794d02eba311ec02e0183221929f8401359c91013bedd2667d27eeba634d2e7f075f0647afa9dfa7457a76b723f457c6d12ffae29abd32514e874d3e93e8dd146c618e59b6ab8fdb423b64ddcfef8435c8cd1b8e73ec619a7d3bdb43fc3340e4a29e50f3a83c6c10f69f2bbbb7f0b69e767f8923e195fc43266349e4143033a48235731d25c17e9feb2da808b315c1f20d69c4204c4922945156b5c62c49aef18f4c31639fe4bacb10688aafbf109d02ad2c74496ee744b610072b875311d83b288351d4a93628da963d08f27978fe9934ba6d466d5b3ea9d554719952ea9bfc5145ab48091020ccc4b152f2f2e301717541450a81628b4b4b03c8185e5c4e4745a71c2ca0a0b2a58b05069828a8a69c8644a99222505450a149412134aa5bbe45ed21248a4911246232f0acfeb84ba8e8382e3b6246c9bf684a65925d6664e64b9dffb3df7f7bf77ddefed5ebb06ecba46e6760d8da96b64dc4cbf6b66c8744d0d9aae691f19f449601ec964ea435f3232fd195dd33c9e6b744d0fa13d365dd344e8f3542764fa234ca312327d4adfd2e844a64fe313997ed62a8820fdeec31141ba3121d3d79290e98d3843a46b6ee8182a884c7c2a0e631332557d8b29b468d102460a3030302f55bcbcbcb8c05c5c5c505140a1502d506869696179020b0bcb89c9e9745a71c2caca0a0b2a58b060a1d204151515d390c9644a9922252505450a14149412134aa5d25d72ef252d8144228d94301a8dbc283ccfeb84baaee3a0e0386e4bc2b66dda139aa65925d6dacc892ccb6a13b556ca04cd9d9d66fa71ce99e9e38834a49432d3bf1169b8bb67fa36228dbec1c6a2accd0f3abe1afde8407f8ed0bf81d2c824abd16bfff69d917f531002656c6eb0014f278b4323e1da4c2537cf97d65e163932c1c49122d02238d5f5d18d367c0c8d0c9abf77c698458b333aa7a4795526eee7f9b2b9585801275d3af9de367a19e14c8e4f8058730510698835a66b3ab9f80ae561e4203a86d4000022a7ba3b20d083833c4441e8c8ff6128047bec80004ed735356ed7d898bae6862034106928a0cbd2516a74cd8f8e21ff871bbac60705e0203f898d8a837050ca16fa61442681939d08ca1108b2fc2e22cbffc10359beec0df07840a41124cec897bf433e11593e4b1ebdfc205cd5231cfad30ffdddc7cc38aedab0f6cd08deb8aa2d95321ca49846c65535e886b128cb20e42ac61863518c45ae20be63a7b6039f33ec97b35bc678d722383ab56a3fd3f04bef7b70a7895a6965d883a6cf30e79cf3946575bdb23fd0cf9176f9744ff374abe807a21e867098612b28532de949d22b531497aee06aaeb5aac2f973ce206e46589e7115ce38e78713c728bb8570d1555e239355d62fda2cebf2a43486767e3f7cce482bea4667191920f68ffe0e86377e3b66652be0624c11ae0cb24277e8047b223046936daa2892a998c3192380596208a25a052bae2b0944b69fd648bf7be3d4f5ccc51897765eb551bf1e5d8e377adde286728520c9e6db6fdaafd86edb677f7bdf70a56fe5675fb4b2855cafaa3a69cf2e4b3c3d8084274143725402094d647254020944c81c693543a6fac6d529ee884a441ad10859350a0960872060434d0fab1c9f26fe4d5cc5d045769ec81255b7f41e9e544c29353da4636435dd636b9a487d079a71a3868d8341b0c03a1d43a5d53180da849b481171a63fa58196e0b57433abd32a42487cd27291c3069a73ce39e79c73ce39e79c73ce39e79c73ce397da840b85f86a7bda75303b57f3b04baa687f4d035dd4301c731c66813c499c64bc8fda4af8b10c1fed1f7b9c1b097c8fd5d3fd143ba899eae39423641a4d14478243a46bf92dc3f95e869e184dc9f75ede168d102860a18989726bcbcb80cb9b8a0a640a15aa468696161020bcb69c9e9b4b2849515164a60c142250a15159390c99402454a0a4a1250504a4f944a57c9bd242748a45113a391c784e775415dc72181e3b625b64d5342d36c126bb32364594da2d6dc7146529a3bcec8398b10694829891069b8f710228d8e33f2fb33ef0690ab9088341cff0024fbd5404e5c540edb5ba00579fbe8e5409142fdc10d1ba881e44ac5c52fecb4ef22617f54fb220b2807b7624ab570fd25f7dde000bbf6edbbe30b743848cf869c59fba8598c921fb3bfb46028c18c1abe6a246a386e202ac5ad3698eedd0d8498ea378265c27603c599ee6e20da400de4e3237d7c24008e70ff3bdd13e0a28c9e5123ca5027b7a9a79cd4b3d1a33f9d24b94714a271066c5cbdce460f1a1b8d332fc6196bc2d156db68b8ce06c91b79366468489e8d4aef94f7de7bbdef8da691ddb26dab1b9ddb2637dfb6deb6b8b5c882f595fc18339ac98e337a3bcc6ca4624b92ef2f439d9104e2d9206f23aba510b81893b9b867d3a52995d83b535c81a40fa5f7f33bd6906cece2aacacf4ea05ccd00852099dbe723e787cda3fcf5f8c141cf1bf6414ad17186e3e66fd3a9ec3c2375fb78c49930cef8fbd03138dc6307de0f3f78c419ff0ac418fea303c4d502e20cb9c261875c405c45204620faeff06e74f60107df7cefa379f40161b337bfe3319ffb0ec7e97936365cc39ddbcc81a7477d4aadb56847dc86a7a4d9e2d0c5551788393da5b5527c81983cf174d037cd0aaebb70e37b56a9ab3a82ed720ec131953ebb8eaa9050abe20a5dd032ce8e1b1ce0b48d34fa6607176efc300ad533dcd04a39dd83ea4aa7ed639486d2300e4fb5e8d5cecfa2dc877284e5fecc8ae9eea37d340f7115acd8a854cd35954d2d959a190800000203140000301810888442915840a2cac2660f14000b91b44e80581a87418e42c82042880108c00c0000000000008100d4f86809cdb9c19dc18b7f741d5c040042f2f363a5c89e3e2b9582dfc74a13bb4f9526661f9542c1eb532589d5e74a13b3cf4aade0f5a992c4ea73a589d5506fe1a2d18d290e20efbcae6f46af4321fbd250c84c439e728c716fd7bfcde323f29dd7fde3a2c3921e3edd8f8642665943defdfeb25954c41c377e5ed7ee2c48b5397e858a647cec5fb07b212f7a7e5ef70e1750569b75ff73df829c0a73d0f3795d5ab760586ddebd1ffa0be82dc48ede9fd7b5cf82539ba94acb22bffda9d7aca97b1f7bcd2212ec6e7c7a5ddb2c206926be75375ae8fe3ee83e6c331139bd2bc87bb4e43d900af87a462e7dc0d7019f6b81f75a502f3590e28fe0a278a71f8a5adbb2e140681e809e2134cb113678d52ed0e97f935f48e9b853fc6967ebd5f6de541ae418f4021d3036534c4b552b4afebf90e3c74c708fd0cbab9766c0f44e68a6f3af153ed00976f2a5f3fab786ec0f3428635b07f88617e87122878bf35cd37fd29f909c1451e995dda8f18304662aae89aaf95b5e9c527dfe5d3e8dd16b68c083bd4ef7661f8f74dcda19438660801b29c19e97656b050c93071aa7629e7cd14a6c0e3e4a0e977288a1c66f9f65415b50382ececb3641cbda2dfeaca6c38352e16b036edc3bb7db883228b3881c9e1eeb4ad131b2f42476cff0be1d31999331a313407b38b58da66a3a4b3d8b8dee70cdccbc0737b76b812f4fc4597994e58b4b3ee7672a82f9fb5520a44e3cf5bc7983f42bc5ebd1240f0f54b4f3c2f8a259ae86f74f84032d521e9b0551e4fa0de9586cbd7376e783e4c7a4411cbbee1dfbaddd5e699c511ab74ccc4142e1af2cf51a1f822bd395816b4dd63f69c81b5cf48dd10f42e794ef5f93bcfb04333f5fafc6bd7c008331e43590556fce2ed3987181266a34549eb5fcc88a6e9e4b531421828243395ab53f87bff0411978a0ab3f158ff6f13d0596da04b04b8d0850feda3f804377fac1d73208f7aab3d98675f220b004078f47e17623238e03e860960009881f0a774cd39900ef841c9922f311592eed74cd61dea6b8495e0fe15d6bb4bb56a147067b1eda77c88280d2f47eb420fccaf3cfaa47d6c81e77d32747d1dee1df3f6fffcc9cafb566965b28b591b0344b4b7ea71804dfb56c2d72ef89eb76ff780c55ee664aca62c69e0a0a1370c9b907fee25727e75d554907b58b49750be3d2fd009ea77efae2e59f7a1a00f2f5fc43376585860073747371fff94eed76ec6d2b2c302011b8592fb13600235d6bbee6a77eadaf98c61e6f31a5d6b91539540abc084184ac952a00aad6aae97e3f103918f3ee2de0d4825866a7aec4013d19e4f0b8d0a27c604ee07766450fa516afe210814df00f5962dab0f55233f3b55968423f1fba20e424473a79b811b372b89b9407747dde6a2f987ee22acb3c76addc614d49c8f22adc704697d239608e55afd2cb8b2b3c606f1259bd05d7014060994e4039eabcd236deaddca17a69c8722ad890860cea3c22a79e37d5e3ad951daa2b874cae02db18d8435b27e11cf75eeb3bef57fed0fd74643ba780a3807a26f4c3481278eb595360ac3370868be33f2bd8019758d306c3a9c4f31d11b4154fcd0a7e9d2fb39b7313ded106f8d8aea6fbf940ef784cbbbf203671a4931c5fcd2e6803e1fb14ec4c2d7f5ad921afe3bd10223076c1d9b94179edbf1918735b11f0bb16106028fa19076a526d7554d924d76152dcba34b591eabae422c0cab3dd083e367badad59fbabce4e83f2f40dd2710f3e6144ca706d5cfdd5ae99bab212ae9d7aab614e0c0eeabca8921aee94880ee9c2785cd5fc27dd5172553dbf871dfdaf0f7cdf65440c3b7ab22b304d7ae9299024811a932f493e7fecfcb18955eed8e2f5aab5636ccdd6b944a9ef2c32dc69dce64986a0760e8cb0a3f35a3469e535b1c60b9ccc13f6352201987c549a0f24e60b2193ecb5cb30a04783fda6ce539fc04b2ba62aaaf0c31e35a468b34f8b987e2af3f71a7bee50e127e188c61044e5478ba2c20ce8a1e8699c1f2a5cfcd6c2a6571138069e401f7ccb2ef25f2e4c8ffa204605ec1afa0024e95a8b949cc0569072346d1b792f99c2a071b9efc3fe9012d9df1a355b7f2f5f10762355c2e7f31ab3ab9aaa86e03e48898693be5ec619600e0016baafa97ee239685db068efebc6a1273614dbde2605af343acf0e0b3825f7df622f54e561aa459222f39aae5b0c04ee3320a55484d2e79f9fc1c3b67862c0eef998fb1c2f5711f22297c27a1b127af7eab6bf2af5d5624709aa27a9a1cb8d6968e0cda160c6e174626b2329ae17742447b5166154eb5523d48dafa8ff6aee8802c90107a3c9c460aa20d58915e6b1a170f68a9770cb55e20139024f57cf9f61447a5d3e4cd2af4ee7be897206f78817e08b4a64a88ec346be4d0f2b4c32b5f4b8b08423c56428c85fdb1589dc7959bbe82b45558a62eb87fb4589cb673c05a4bcb11b8fb2e2628d189db44087363bdc2458037fafa11b2742d8dfa85fa77741bd5e2c0d028df146c176cec657faef9e889651cccb04d7d0bf0beff3475267a1918c7975585154290e84c6bc9255f2e2448aa844dbe4d829b0e8c6018b776ae1483dc8576e43f7cb469e6eeee85ead558b43a6f5ce3d04df581ae01225c53d9acb0d2c7992d528a12cc2fab17de3054ae662274d961e6dfaacd2c0e5e3ed7f77aeccf87ae297a1c5493a43225319ac0d00adfe25d815c687ea43830825a6c2b5bf0a84d77addd257e5ae543a7e4d480b6b951ac02d49d4712b36dd6d9fdf22d09763a7e1b9c2f8effeca1447a2c5737cb1fdc86eb06399223191b48152d061baaa1cc75c0d9b97af811f686771de1802b83ace1c6b542be9362b171cc5ed205b4130b442fd5d8eec9421bfcaa44195ca61d1b022f1fe1d00ded2af89c88a974d44d15247a0b5f7a669bbc5afc4b118bbe88184a82e58fa300c647daf465d02f01747d95b955f389f717dcb3537d8ece9115057104b34510cec1b9a7970677e8c317aa796dd1c6712aa919fc15f26c8cb4750e7178aa34816abf18d37a5e3778aac37add9667f71f64f5d2f31874cac1f9d6b8fdf625b53da4111ffa2c327130fa94b1fa11385bfc3d70b0fd91931748140fcad576a8ed4fba5edf7bf3268a98b86890b5023bcc3dfd29144ee67b603e9817e8a68fa2317d67421acff86b23892bf4f027f6828565256c8b4fd3aa52df42dd90f416fe860329de4426bf51001fe2ce43d65897aec2b9937d642d4b982aafc611e9599621e25efce89b078f4cf900ab9d56d3b1086b4f34722d7d0142ed31a55cb7ef27ac241319cc2b65abe2fd636fceb67825d2d53dcb3c8abfd4f11d1ca486e9b564740687cb8148d20e4c88c36e22777f8842f8037a8a47f349f369c1e41b70c39f8563aa28a80de08bd6c5d764016b37e9eae835450c6d52e07fb1a8dee2a6478f9f02f0fa2c48b63bcbe3d104641f35b992932f321ae1897f720608b9763bb2de0c4c846beef993f1f29dbb3fd62298b9248ee39111b0dc3a4f514978973cbcbd6246a84a4d2d00ec2968f40fe838991f681c434feafd938fa0421abb7108dae05065db771e1618af3ebcd294242183cce02f496cfe64ec7f765bee03dceeb42989de0d5cd54c10091b865fe00468df56f48a386b7c35d110a410f4ff96a5a7ee4c2caf0105b36b11daceedaa84e8d43a1321a1d1b5af2c68403b463eec6b561609c60e92300ce6140d83cefe13b328ea023e520cd892f73c4013617d798ad5247450eb8d9a58e4428afbc76734607a0aaa59686e56f4f20b005d92a5d48891efcbda41999bcad5f2d897e79b21790dc7e5198176fd915f78c657d2e4a9a8134ef36b9283e2893474749767c9b15d8d2194ad76a4b0271278098f97b3a9832a54c2ea6237e78ef3813eb090abef1663cfeeb81834ab0ff9cfeab1f4be4e63fc0bb37b2b67c07257777a671e4ab1d22aa317b68e7809acc1e5084c72540c62c7a9f7c8dd2430ea3fe3e6e62f26fd48b8f1c8e8410b351fbd4e6e0ed4258efe8ea15ad4a4606932ae232200df9455ea637b94d132a8f0f0b6e1d48efc62f939ed2dfbe795d2444ee37c7612dd6e1de47cf490b1c1930995d6a443cfa2f4db58b6da82acf3f1d4cfc66de7ff2a7bb71ecf7592e729b7deb7ffdb9f94027fbc84a8d3986b68365b8f758eeab3c2e3221d6fbaddf3b4dd7f57dd7f74da7f57abff57ba7e9babeeffabee9b45eefb77eef345dd7f75ddf379dd6ebfdd6ef9da6ebfabeebfba6d37abddffabdd3745ddf777ddf745af5f21f8319c16b056fbfb6f182d7c6b0998a1d88047fcbadd5688a3fc2b3c47ece4194760adc03d746ce14a72f140cde192cf9ee7a3354635fbd6075fbfba035e21143f272ddeb5d2f3314ebef867826204a6c7ad90c63bb23cec9ccdeaa4740e083451f2525cb19cfdf316732fef708c83bb374beed7f9f40cdb9fa9fdb27ca378e74251dc67f9b82cbb207ecf230ec3fe4da1eb5d7d651c00e96fe14997fdc8981efbfc9db3a282e7b5aa77e82ab2d43909f6b3e6cfda2a7d6e180f20fd0f26f892f1d9fc2b496660a0da5998a2cde6c8f87fc455bd0e632eab5c2265fb6e8a3a6dc3501ce09750627655f230c5d15c6b1105fefe060ee40db779989463402cc167c16911f82d83b31289fe5782805c530248e42b8844a22b49485902810069070082102521e01d2200c888024050961001540610414a7282c83a50c424e83401e4a4350388521112ea510311d6122241a8082140c448890848b42141003620091460128400511280ac3480acb6248168fb86ad396e2b4eaf7efa353df31392b586100a10e25982b119fdefa9b38fe610f0cef747484d365a57064c9c2cff5c1022ae024503214b32560cb9c7fbd8c145e77f159663128e67c8a436b2600080416a89e1402b746b3620e46be228c26c740819549fc3796e124139b526144fffd89c81ee885044d321eed526f95c871991df9630cdac5f34f5cc3d47187f153f364653f72e9dbdcbcdda6d3f5f2de5d3f658fa0a1f616298fc95bfe7c535fe90d12e9f80158003a0aaf3a0f55a805affbcf92a1774ecf955536fcaaecea63199c1903a33fea34d0b1c50389940df15218d270b576e40baeb2b7faada71c09a9dfcd6fb91199372a3dddb9e52cc24bfaedeaf5b90f21289f3303d79c316c85aa9b6e6d131026e1f72ab045b891ae47c1defc059b4d9e49164c8b0a844ff091c2933283f576ef95a5f91f13d21074863b3ee0c6d6829f84134be75781026431b56ece598bf0924e5064448b08fd0aed4e65e46440ff7a257071d6bf5780527c5c7d4f493b32d8ba9d27fe1892d5bbcfde5ca41cbc28ab8b6c86d350434eeed150bc2b13b45dea37376dfb7a21402537c1e0ab7b0caef09f86811dbd15cb12501490edcb8bffafd3b3f4ab5b221c7ff61e596d688a0990255e329fda55ff0ecf6f9538f1fe6b2e3f428ab4de4ad97a3a08da6ba2260a5c65ecf09fc61733dcf3dfdc07c1afd187116a38e2d1719eee6a2db0229123d6449c5174d70decbf2e597d3a61d3f9e00e14fbfe6bdb69e0fa8f353024811e3677a7e1b32d6d9ab617eac24d3fedda471082d843bb4f74f64aab30840fa4f2e43f35c50d95cc42dd49e4e11cb2a3fa9b3c98ec7477fdc12a7391f430715ad191a131e9ab16ceadf51558efd36039ebdf246e04022aaed54c9af3dd13670d18d7cd5c3e9a9370db65e817f257dbc0575867bd454c62fd592aaa0e496988b1b8c38021617a5abf488302c76f235cd2d4339bad3a1e6e2c8786e47045987251a21675ff12b7f18ac32f3cf92b6f7e1da36777822946403d7a616d5c0d912e1d38d7009ca3c07d9e47683aca1b857ce6a180c4e110e250b5b2438158830fd97bc855471ff850582c0af94648a110a6e7f554e82454b0dc9b0bd9a23468f68cc3d5a2a6d95b22dd4f9674a8896ca005cc5e0cbb3856a83ecc91febc72d582349b49ec8cba7be5a83451721891260d69f9684d19d5f68206c74da7171ac488cb8d785be2c60ed3afb739292e5284ae8149fba743b240d535bf631be42086430fd190254e30dcfa67b43b077e800d001ecafe55b7c1811f217b5b16bd79c87db3e79d4484df877a6e486706465cea107ec4bd2be885c0da8eb2bccf803f2204f57a6ca28743864f3d58d15548dab0d0180873e01b6027d5cc705be686c275d2b7f4f39c722be1a943374c976ba133ee69687f27c4391d5216349f47e508fcd01f4f219dcd27096377a69e50845d5d999d926f0a3815912328d97fcd08e328dbce34a489428459910656b4d8203017c85cb5333d4990f31deff7746e3f1a8d17b70b15f96443814ae1763451384449bca276b8a11e251327af8c361dde09074a1d36a1b13b5db43ab3efedfddc31eb3d0ac5656197f61c3f5ebb9b91a7130e3556022bc4dc0c29041b358b1d2eaa6be4feedadeeaababbfb8c3b7f872bebd6964748a2f371b2d2da4d085aae6accc012ca34727ac8c37fa08851fd838be14433dd88e7b70dda95bdbac5906283ed647eaf07276f6c99201f511dd26d1fa12e39b8e5fabe21dc021562044fce7bf03c22d2265559c2c9382b43a4a1a0c0d2961ee33186751b78dd1e32230111741bdb78a4f877eb65e6aa99dbfcf12cb69153af1626157052ad1cf8be137ad086949153807e689fc67695cc12b1caa031ab8c2484c15b7cad422f01da93c96bef07e34358878aea5724d42f6947cd0c67a97fbf163fa593e5f8f8397e566c2e4d1782e632a2c367da69b99d973822a1740e988e631661e2f39c6d2ed33c48cb9221c902d8d28d860d7db230539fbc0ba9449b5defc35a2fc2120377e6a665228f90862ccb4fad14aacb34ee5d69a95d6d0bb7093f1e8d5f0fd463d661c606240e6289b3ab5cd132d60111441fe98c5e8533c9d7ef5b4642a7d8db7fdd0fa059efc0cfc449c2a61ae3bbb10507fd0d884bbdf8735b60cc03b56e8217e173a0a235ed0e5135d71a071efa19586b90d19235d4c731b1c7625edb137b4a71ad2b43276b939d6c1135e1a260f622da357c8463d89aa43a6a0c72354a5de5b62559c40f2d6e074627011ade74c514654684eceeaa037c28d941df83a845f311e1304ef3bd4d5d42d44379f709e52ad814845dc9168915f1e6bae3316b69c028d7da126d14635a7999a079b998968f27ba098dabcb7d22f6c5954c04ffbf8191c8d604ad0f072b2231f6a2d61961f85a8ddcf3429d98ebe26f6b3427827eb07a78657e794c8cc71ba9bbd7100d3745aebf39a39a8b2cb8004992a6d73c80ceaf0f88866eb4a773132891ccf7d436584d4e628b640a86ab8886bc1c56508de37daf45a5850da693a522308b20f0cab04e188cbdfc0f2397d7eac38cc36de62cea3c7a663f0942059d28928b4908e6d8534b521d51004c0981072921bc2480991c25048eabf8b581128240b5d38b2d2dc9ba72264b5bed2b4758070d83aadd19391057e6f2a07533aa1293a68d06567a0dede05a4dadb5747bcae745ad76fc27dd904d5f29d10e09bbdfd94bad73e7fb13828b9229494a4a6d5587e97d2d47dcb83db8f365e3b086cd173b449550a117363f8e40a098f727faa2171dd18b9ee88b5ef4442ffaa2131dd1898ee88a4ef445277aa2133dd18bbee8894e74fdb4b4136b3968fa2304d4682814cf353856b4ae8dd7fb7f069ffda4963438a153d9a8e679ef68433a8e2f09e140ae59f5459e679b378f78ec70e725bbd33c92a3db82e54ba2898339bc2eb17e8648ce19e4199ebe3bc185a11373377b2d98ff3e4b0aeb388e4874cecb78ed13f6215a9fc3f10cfbfcfd1b0ec7a29f01c3b7579877659b97fdca90909c548b855eba5a02ae6d39dfb8923d8e45dd7dfcc6ab27f0dc96ccec968a912c30094c48b82292718f49bfef4bc9756f33f202960ebda0a66d367a90d7c733d2af2193a7984ccbcf6a458654a258080e216c240b713008e18269168a43188bc4c35c1c46b8008d87a230ce2231181f07516e406350388cb2c90cc6e1609413d2191482e16c2287733880e286540e8d60888dcca13c1ea038109d83a440597c42501aec7ca74b221aa0c3cf91593fce5a53b50fd50901eef6e2599b6d6517c66a2703b6ef411872ac50daf935110e1e43e16eca1f09687822520571c2cd5045a814a0dad602183082e38c81e4b493a1daff2e6b41af05d064a5463dc3b823554efee4f3b660ba73b7e9e0b39e578e65d0be2d1192d9b7cf9757d81c11f6167fe8b9b88fe957981b64c2fd48ce5a1db42c378b940b9a52ab19472d106bcd93076b1a7ae49bbde104084958d5ecfa08d3c77312dc42aa4ccd932ea0fe4f8f70b6d825d32fdb3b4a450b0cb89b668dd17870b9aa0e7312c24eb0e36f7508403c6fa9a19cb550300cc92d37b0352021bd592d839d8aef4136dc69cfbf5446e47124f64b45658abaa1cfaa01c789670f44e5649715c549b886df35820224c5f2268033cffe352d949e1de93402cad52117712493605df8d5e986a30cd6b3582e7ece007cd00726060cbe9fde4d86318c5c43cbcf0eef5403402a9e3469467236a64a189262066e4657c6f4de477378ea6dfd180b9382954d6493a66d17f9923022cd21a933e2b2d46bda0de4b64c09b1139f6ff30ea18c60e23dd7563416291eee329f5808fad9b31aa90e0407e54609c452428a7c1cdcd288b55429902f1e1b0096b0ec1e88844bf4c3ae85677dd9eeea73a0ee312acfd7df6c9d6683739ec2e072e33a0fabc66bff0d5b0eb21e74c91ca900444867f2a8ddb8fd9d400b797dd91df476a147f77a951d6c545e13d48e049a2bcdc82448023027c126993db173108a0194d33a65579c45a8caa28d17ce6d5e0e2aebaf2ea5f408d884091ecd1c221e88dc2bfa3c6e5c9ad6b787085630d26bb710c015c6da65d98e859cf56f692cac6309fa6a0df4a2e736dd9ad45b4b128767aead779a02cc1428ecf2c88236f46366c1b9f472a8f005519de5abd5ddb7fb3bac19f2cf311ec9a507e4a649b6e00b19aa0cd93c1307c2d4e1ede0be737d53fd78bb8c53aa9c8c983078758435fd5f51ad0b254a7419593ff6069ef8a49373c8a8ad757cbc15d2bea0295290d20fae3bed73cf7d9e1d93f756c15f4b172873e763dfe4acdc3923117294acb6233d3fc92a4f07f252c959f8b148a17b4bf9b8a5777bf2d22d2cb202dac308537dc56c6e834f78e1bdb1af897bd8c6b2468a7c778a33dd821f78e69eb8bc2387d3584f61706dc0262aba9a4e2486efa8d243c3105ae69d3d7381f65c53d9c5887c26fc632d16b4b6f86e05dd551b4da4d82ba4cb87858ae0a8adc049a3ddc28d67b1182162c8b6df0375a02045f5caf24bdbb5a2a3a28caa0ead2a2dfa2e35593178c8cd47103110304f5dc709bd724f09fa7142ff91f8056589a2f06e32948f69b8ff861c8a681c2e669bdbdf82a1068dc75c8b694fd7f998d24ba7911939c4379d1fabcb15ebe098b0c17bc8df2b14b0b354b86446cb7b348e9abb22a8cfd330a7b838d4b255cc361d805dfb3a5de6a51efcee6b28984156742bc02e1fb97328eaa1e1d9416bdab9888c5a0e6055c3d3347a582054e8b5187619a0f318c10efe9cdff10f39059896a10e3d7c867339a34cda6895f01a0932c24a0aa2500e9b112bd0d2d07cac87e7465b7a56d0a0f8cd89ee717e5d885401b018680c909c96b93a133ce8e5817a9d65cac7b9025bea2fed2eaa7cbb91d3de6e51c73c6c809fb9438c0b38fab40c514d172ca8cdd2f6a80f685b877034d5e9ed9ed32e2131c4791eb730fdff87a5bf32161a1b694f3c0a6cdff2077f0651aab570b7a8ea94fb0e7d8a7d80a8f3ab231fa71236b1b2414a91373a21fa28e85eff7db36a1993766544d0b9aec52db34d0338f236cbba5dfa63e52d9f259204d7fb1eb8295af87699ee58454dc250b73c226c3b96a6fb2b6df678000fbe652ead9b3ca929670072afab95a22dbcfd0b138cbd224d0688a821582dd450b026a8bf70d19351ba2ad504d8f2e6efd4c303f75497116b3181cb705993989b25a59a10541c939ed2fd88b64c89895d7337246509460dcbc49ed2b05ea4a315b0553d5ec5ccd8600ae87678d44a56380ebc0a7066de60d4dbeeee4a8049a26c59636737a5b2cb8e2d37b3e2e5a26093cca10cc77ff2f57ad43e90069a50fd3e9fc061ae3fce5aee5d64dd5f49c6291807bb387415f020dbffb663721b0caf788e457c969a288f25cbfcf2b27c002d74a6984756b08141f3c8e2a0a59d5fca7287f4abf8038899560ea3f9bf97b844e797ed37c5df6fcedbc2d1d517ce3a82ff9a03bbc9d2478e42c58e624ca6f5d9626c38269c81a80665b3ece9b8ca04cf7bd7eb698457202e5d8cbcd7587714ae6a82892c8b7e703e6af03761d9e2dd8f9e99566bca1d9f98d8c3f0b391a21851e415cc5e0ee24612093341c7d764744cdfdcbb793a29c3393057d7c65709ebe0e60403bcae021bc8a28984207ec362dc2a23b1a079ec6f5f27c7dd534ae0815bc5b467c06ace192d3e9f40e27a55c894648457ab9d339a9a447aa3eae5f485dcb7a2615e0b51904424a0f6ed60caf56c20643f54d06a60df71ceaf2a0e486642da5151b92e211f4fa34eba7c7aafc0af386e4817134a9ac4f711065770841c7399dcd5753519e54b5bf8dcfaaf2d020357022985a98055d562aa6f9e374168f8bb724eb9a1964690064cbe550556409ad689297610b84931d8dd18eb7e94ce318e56ac4af9ef35efe6e0a2219393e2a1aa661685441f2ac0ba1819789793852958e0d802e591d18ace981e75a80c7094019be7dd44463815a3720e66f2b1184d0ba3e1287ad5e5ce443c907798e82edd55b09291a50ada59b86dbc33c2336fa76b047b94a8589bd8c406259cb62cf80a9b811dac9a69589e308133ff79a468eb99d102660601bd1c57c894668f68c581587329a841f1357cf4d19097112e2025b05327c55a786d0f8e3b01e217a960ea15ae28fc22bc44af4c8053f44c70c27e6d559f7987105cdc9f7b22f69f4281e340c1d61b8e744d7f6dacf13ed09116fabb570bac2306595da35350b4b6693e1d3e7c9e3552e01bba7fd8223c370982e2a1afb0a94d786e4c79a00975e1d24cc4c951b1659e73431f7cac03ae0310326e92ef1b2a3ca805c61b74aadafb6815a2c7026ee8774d375532a77cdb3dc1e48b46b0a9445bd21be37d34c348225aa098adc20adf11f82a05cf73de1c404e08db1626dc895d426e6faeb378e6100d0074804232f9b699e9ea161a7195e4b03a99286a4973935100bc9109117387becdf9f4b12b62040a83c1b3d54c98497105e1466e6fec609c99f997d860d420979775c92d238b2e75d9c7fe645701f63bcdd578ad069202d13bbde7d23be4e0345344b3219f40839f9a554dc221858ef2383e0bef71839f9225ab16de0a33c84bf3df528e1dfd7322b188a676ad96f5aae5b66b8dfefb1ec86a3b61533c3393a81d7e6fb458e239d50b2d7545c63f58631e888fbdd3e8492ac989dc56e363624ab779f3ea78122f13baa80592e5cd8770d232d1d9e9ce6e66ff28f442456053fae13f42c70573fa72bc45a02232d062051bfa9472417a881c83b814db348ef3cf8c4a5babb326eee1c78f72b4f7ec98f84085276bb8c75b4384744bc1948ff44111bb0e7db2f22b6d0b455411bb33a400285a344e61e6a4f5bb21f73eda24425a8baafd7d786e7e3a884d3791ab6b41c1aa1f3af629086a90373cc724a08d9190822145c18bba678c90922471ebb0bf70fc3b2f4f948bbe50c338bd3ba979ef4a0a26e3de61bdee5577d85024d3beb6b2f35207c814c190ad99e0b2e579cfe54013278fe8876c58ae6a49ec6160cad2ab695ed1250e37bf9a4c59d297b09a93e9e54473077a09eb6df8bcbf2744715e1569b8bc26d5c665017cf9eabaf6e1d5f2f60378e6b75f8fee40351b7fb1b8ced3b252b69f1e8602552b96790c28cdd33fbdd7f16af183cc2394b96ab669c37597116e682b34d9b6f2d10200732f88c72c4c038f0054d2a526fafe97d4f6c9e85290e84f5de46ef77231e4c88ec96aa440ba25299dc7d9fb0b8275b41f03124ba9945bbf3acfe8b63be5c11d4f28616d5d9b7e3272eccaaa916cec1507f6406e6a5482950f38d1477878e1a005b56483b4e55f6ffefb063d8e43a0edffbb251872341fa0d1badd20d916173ce6fa0dd7d8067a4a01cce8ae9c84dd7bdc60acc49e090d2b20c3b5ee0d79b3132705b1dcc7d2f6e051b5ccc9a910cb95b9d1887a37b371ef10e199de1d454bd3553e9568135f75aee496535dc6278c50a9ddf66712ca3d378a334d666493bc2214ad72b1a84779d6b6714918c538e4ad22539ea32d41f79761c63a79fd6104c747d2c387c383ac1d1ef0571deb5e23176177d44e2996e9d463b4475d17ca8843b13901477a2c2b610a805332e68cdac888ddfd29862ca188511b4cc531e6bcc41f052ae9c4e4d18f5240a3fb51dc8667af1d271332d9d654ed975dfbaeaff7d1bc76fd2de5bc60a7509949ccffc8ce813e93cb4afda7afc05285663da0c6cace181ab32f3f38206e7d34be07f942d367ab161a2d7bee6899f363cbbebc1352b65cab2e69f170a3560bc6ab078cc9dbd49ec5a65011e97c40729a7576713f9c5c08c422141cb5a153384df90fde45457bc71bfdd273e311854a2e397a44cf2e683b2a3e80e494af2ddd374eaf0fd98a4d7d0515032270eef9c119d04e13d3ee37527cc489f8cf51aca80787c6570a900a36ffc5a09e40d240fb10cf135551d6d9e94cdaeb0bc586a6dcdd42ef91994c8ee6bcaf3386edc55616d7b7dfad93c3bd6518fd7688ad604be83cd802147ffa0b025041592c8959c30e224692a91774204edd1e0731fcd4772f598d02c143c963cdc23b226467532671b88944f7dd60d3b3d4b23b844a3d1d6cad1a8bd7951ccb1e62637cc139f3505d4234262c8353313c99d24487621b8c35505c799d1b68f51a99d46970cc52cebc8d7669dc707045bf8a53fc418bb42b660a6aca1b69fba2fc2302be82dbdbae0025181c40c818103c6810c680985e9cf524a3fb0099a36cb3c61cadc29834e22d1ad143e5228b47cd800801088accc9a348ee1e80df322f7365bec779957b7576b879b0e95926527dce7e86fb19ef0e76b68866d2b8c321cd565a3805925666d44c2616aa1302e1f2c90e9ff630fd19fbd43bb3e6a13cd76b30097ec7091b4f0bedb19055ecfa370ab2d3b910feb4e61aca66d9b51e7e0357ad7153d12cdf09f1622a5d3ffb2aad463612a2f2e529e944fe0dc6c411225a246ace447a21731acbb860d68c82675f39d4c215c1775ba1b54c0793797ec128c4d3363fde1745782c1777b68d7c193b68c00bb085aa57f1ad8ace2cec8ab217c6011f40d1e1ce6c97b5168a993d7174b977ef1527836c390efddfec48a712347e3a2c64ecaf66e42c1ca1671debdb79b16e7b0dd59a56935b6fda3c71ec9da1a075614ddc6c5b54cec01d5aeddaabfb31f59af91d5218602b56614e315f245a04d043cf9d2901a1458a6566679ce2360c0295370ba989b1161ee8625caf874254f238c2e721539f4966a629cf492fb7f20b2d363cba09b7afe39c08507c6f8431a419513677ad466f1f6b11e74c1faea26b53587151deb00b9815ad9c5a0eaa58d4d7a1201da39e87f92d2f0242892a14baffc2f3fc459eb19d16219eb04507b8cd717b4dfe114a4937c68a80e822b1b2b2147d440f9bb799e3edb41c3c88a6c196250bb6b8faeacb1991e951b21935993011a572b3f0716d14a8bc3caa850ecb86d2a23c4a11b19fc292205442a951a9439d5c57acfc30e4383538ccc91142e6dd7318b2d31e5446df8bea3b858b1702e7df82afed08f90e2d3a17bec0f638e54ead686ab2cb905fbf280258b4312fc7cdbebc199b2786637fe684b049e02251642431aa4187eab5d348594d2f4cce7cfe3c15311055b5a31a3a7f5fb5bdb0f62cb4405608f9134a246dc9d9c62a04122a5e994b72d1194b02f5bf9d3ff502922a495ea088e7da1bc4b8f2d600758792c8571c7ff7ac7d520828552f5c6ae9955b0a3930790aec1293a8211e3d1ca36b4fc3f9567220907e630a32d6676422ae966ecb98651cf4228f825c0b4483f9c42b8caef7d1f0e6c395d7d8abfd9deb47d20644dac26f02ae2ec70e1e0a9b29399128db5bc6c2925908c54a74fc9d15187ca6ca3a3d74159aa623b168efea0b558c7b15cfdb98110211f61e781da34562a647138189fce194115c26d82a7a2eb5df91d9021148ed7c62698413d9423cbbd3934a92859031530b12d2ec4cd590426f044663aca908dcdb604397c042810898eff2e18b55076e72641de7b643926cc5bf6f2a4d462e9871e7dfb04d53b4d3f0151c2ebbff907dadc6a47d6648f59e38a65da3986b6f4f27f496565c0751425232a41431ab1de3cbf56cc05c19cc61e81bd802436c03b1ee04d07454485ec148fddcbda7238b59fc6a27f55bb32624cf1bf10c399339f694f8e71cc68c165be5e5f6ec88e9cbe3322b1b2c985d1ce2659a0073280713eb11ddd98701f4f3f23fb874722c35d210f621a20456453add791cb84bca7b34e99d93c9e80dd83ed3f12bcb39f31680e80941d60c76829a70234dc7af7574941edfae26ed2544c652aa3b4f9e68a8cd14bae8341629d459f77792928724f39765543f444b929aa33038b0d271fdf6a515aea24b3ac6035421644340f85af7067cb444b88d86f7c19bdf50da4452f374183bf9f294d773ede0dc3fe993e41eab0599f106a12de84390817d3d16e0b79d91c811de61aa1f006156306181fea6830b88529f3644a98757bd1666164cf7ddb3fad61dce48c271d293c40318a3da20eb993632df273c75759e9cf3848f271ab4b4d5c5affc0b28b75e6a23e8c8e58c479da39f8b9deb48269fd82b9c6cb1e8b3c249982f8b2356dcd0c546c0b14621a4059bf6c609e108601f132fe3bda99c08cb1081a049162b30087fd1de6c6479e609e15801ba8e4db2395745349a0634f5ea806c19c27c8d780e9e18a2ab203fb5b0ecc72edc6158927d5eacb4423a347f03ae5793daab2becb34bc40637a94b97d55f814bcc7103d03ff60dea16abe372c1a84cac78375d83a6b8255f0e88afa42ef68f80431d531ad8b1a921bae00c3740c4aec5b619accfbb2db6d502d7aa7de10496fc33526e8301eade693110b9e4e8ccb399d9e1c88c240cf0c421738f68dabef3ffbf3e5dfc00c16f3f87c46042429b16343c21e2e2f525c83b4c1c5b3f547c2ea5e59cfcff00d58be0f3f23141b7601929e174989b4a71643ba30bcfee1faa2244c2e9592e2a72e9ce0da2192960a7171e7294d9d4b5c994cf004b9f290823e157279e8f99081db4de02e67c30614585a8e2edcf810c055ff430984d0203657de832b89c5a524a5c85e2ce799e8e655bc0315b41a072b94fedc83a1d1789a08071721e41a751abfbf5f9c501bf42220842cd329d6cacca4b2db6b8eed08823630e21b6275b7869a156618106ae3ca35e5c37d9da67d02f7acaff7d065ffc5129e6ff61d4916b37e1de58913642c0b411342d3c6ac5647b20e9c30e7965c4da03ed81e2a52da3b8902722e30b591ed1dab440f208286e550b1a920095c8de2fc4f6523fb210c966db96a57dddd68704d493652777b699fad44397543fb90c399c16e35f5d788df82f871d3eb657336af10b8caaa1d1e67a079f5a24559d6a15ed498a54f2d9e0d7b1e2866d7264b59e3230f7fe725061fc6cbcb9a3add9d6489f9fa7e7e2ddfd6cb43b334f0df0e21021cd1db988f8d93cb6c5980c4dd0dc67238ef7eb33186fcea3981f662daa4ffe566a46c57d8f087e0c0175b9fa9387cd7dee6ad3a70cc0377597aa2ec13303f26089afeebb553516551167488a43b7196b2e46f97f25ea9edfc856f6797bc82aeefbd9d684fcdca1920123311b3f43ee77014fe7f8ee94f513dc9f8d04ebf78448f5fb6c9aa4279c7afd036272ffc3fabc7aacf5d9d8c44013d7fdf62da770634fed3469d96119496fcf99414edcc2d93f1b1d3424df76bb7a689fbb1aea3fe529ed3207de79cbc0c2003112d38fda5f474585446630b4206243bee76f6fb5255e8c3af2a453b3f60a8378c49660cf4dc0787b2402e4e96c2c2343a318c7780952e20c964a458468d53e1427f031ba7feb2261220db76c2fed4e72175694c775b135d2bdc331acca18d852b992e01120dae99020a2718a2d417d8827a7793e127b2c5ad3b9361678bfbe547dee0994227ed6236420066e3d63f9307dad5eca28cdd126598e68529dea245457ccc260cdbf7781b4a988ac2bfd4045ee9c5d85386f0a157e5dd859a1d54865348ce344b7d6aad2a98b6c8d5656641dff73bb91a96506d38f943aa61501c581adb3bac8aefd03af972df6fb636ea53ee88daeea72fff15ae90386830920d65e23ad230863c332d58e1ae3ff211e44fb5be1c637d61b22d92eb19ee75c0080802db33eb0e2475c5090e35a7b5b2d3e2062c3d5a0a51dc3fafcbaab406576c17bdac8579a2bc09669d5ea628048eeb626a7519c2498e44db3111398fd70ef79b30699b4dd87a58a54b845f32acb101b6a4ab5fd226eb318a3b3569652397f2b91b9fc34e20061b4057f0d963fe3b798b23cf553d834ac57b2273c67640ab0363d8cb160857acb3b0f07b90c59a6046379d7f215f5515f55ff11c9964050653c880b82c5aa10e4dff565a5b4cd7d9dd8b1c3e0bafabf4a32d6bb7e001129a85abd7f10665c675f8bab6b84469baa4df4579bd64d120f4bb1ab85d1ab32c77ab564eb93d13cd09784a4c555af87c0136524c3ef83dd9f4c97334fec4e062a904b43e3786815c02ba8701dbe4bff0db56d6a34cda220b5372324e2d8b54a3451c9d0d78f32c785bb2c6084bc2f1dc868ad666470301a26f477879c8c678567cc2500492416220afd4fed50eca3eb061934dc555be4b6eddb4c4c6bb82d7a6a436d4bea9fc228ce167f4eff8780a12a9cc36db4271125fd948f7fad72e6e731e09c19035e5cca8d96fc65b98f2de5feae0861af14bec76889465c9b687e0d8acc2fedeccd1d259db6ad81b511719b22cf2215e74189e77879d3526434f1b33bdafae8cb25c2d34efc17eb22360acae9fb8c4140dbf40eed73164e2572e73080e077ac4473df95931f0eb0a7234db515814d9eae1ba4ec19b9707b117bdc7fc30ce08fa23087d9602a1ab1604540b1754f510b8b6ce0a04ce1906617aea7aa29ca796e597e420a334310ab7870463e889abd16b59ccdb8c281d96ed7ad440850f24bb9103dc5f4c68accf0926e2f203c058179af5125479b4899866923d575eec2afd3e66a9cfd717cbdd8bd6d197ac6b61c1c44e30ab3e4b1b2d30784b02dad0b2eb526638b2bb782c318623110b84ad4476ee3f6b6cc2e96fbfc52ed2e06a1aece7e0c8362bb4876f8154d6bf97891a73c045b1144a87994fd0b91c34716f61546074b57f78c830d21855396522d4de2cc4a7eab3057da98464af672d8efb82ed9ece0eb6adc3e957ce1d729d89ceb11f17d4a314052c5f58e83aaae0799f6a95553685cf5b56e0a98fc3e6b70bdfd8ec34681bc9410003baaee4855d43bcb6a13d1bfb9d32ef75a5cb36d183827f64c3046a0f7eb73558c2f722a5669c5187d49ef8640a379ccd025e17991db2f012487061a66b3df33d773858006d002858175b8e0e283c5d3162dab22d4bf6f73d8b1b88d6b282a2d1c0f26ec3ca6130e2811422b83f3b8b69941bb253ccfe6d48b443e225623985c6e96635fdc26ff66c3717efaf6f4c9257e916367a213ae79dcda424f99c3dd70140121c81aa0fda13628f338b80ea82078c7f2121cd01744c3271f27868fedfc3542ed69033ae6a0d8d2c066ce6321e771564e906a56e01a61f8f19460076ac4fae5b6d4313f15f13e6770d575bfc01dd710d046e13f082213df2dcc1e089268ad4c68608ed93ca66ef2ce8c621af37bde3b85101fb2ca90d9721ff33839e9d885c1c85b127b4480ee7969883b85a4c51c725a0ce5d66a4d7f87aa68a8112e75353b1c8b1ba90d6d9a0481814162e173a6e74ea3ee85b812d55f99d72a717aa17a149f760cbb0e5ef6cf253691effb1cd00acbf098c16000bdde9014fea2296784156baaa89fddf149850a0d01a763d3b787ac3abed4367c0ad3e393e3b32e35e1423a3bf8d75fc6ceadbf743eab266e97363907e608ba3b2192810e78c0d9a1b8fc3bd57c6fe52aa682754928ff0ce7bb97f6f970b93e3fc6ef0b5e7fe5ba745883740aa083d850123a2f490f993841fda537605201ff99f2d28e8452690072b756fd5d092a62d00636a3602fb709f78c3461a66b0423d567940e9bbffa7c37da5fb3bcd815c669de99926f8ce89fada9a6e8ada8de12428c8b3a451881fe34a331058e5cad6bcd256abc8ec04ac3d4f4d1bd176b50fd84a973fd9e265a4b0d0eea6f0853712781cae0f9e25771947a2cabcb8b4324b1f8f66716f4fc6c250dd2946a0c8ab34c04e3c44b5b7a95160d241e7bb8aee15b6c40099be5fee1f0bcc6c1b9259420e1dda8e9755546d053b945f730123da8e7818845bc4ff280c0ac4f27e65ace8216070daaa328255a75d052c0c3e07d4a7d06d4940bc2df56f50c5ba63fcc3553f1c810821e5e4edfb97fe43045e121ccb3fe864359c0cce8da213421f527161d60c1c4c617c71bf93e3c0bc5c359c72a2e28f264b68f5e6f49e9c402aed35e690c8e0f9ba21c0527d7ebf08609c068c0f5ac0dd90c26f3a1a4efd9049900153f71a054a57947aae6dfb259e74dabbf13a85f8e97db8b8e33518225fa178fa0bd3f820e74a0a356c9bcfe043de834a4fa2a206cb2e0434382262612943b3d3c735786c381c80dd013003ab91d8ad4aa41778e33d790e6c30a234dbd82ffc71d770f04c16242717b8eea3799fc9ef7b4b9ad7420ee4307ad0f04a0e3547cae0ead28ebd7fcb8ec1eea6b1ddaa3714a99358987ec8a22e6d5ea942122b02707b20e0f0928f240b59a503a613b22fb9035cbc97c075e863d6ad4b8b8643ad3a34f55dc766c67963faf65cc3869ba07e9c72577d5d3470080a01b95ce6c75d039a5c758c3c5787b53d425b16a7dea0dc027a49fef1db4aafaca0644b089dfbc3643e67917efc7a3f312174a4e97112dfa7369e29f45bf6bd4a48b892290e67e640d56a06f01a255e7cb39d5c7fbead7602bd7369042aba3b1edca5f0022a7140d60f100eff6e5498d48f027d4e42449076fa16577576700be68b12aac5b14f62aa041f1203e1a012aa1111ab168a8434c0355ab8913c5c1fb767d86442b63ef944dab15666b6c10a769791ea15e2fe0be8b4b2523cdccd5acdf809fb90a075fc775335a3ec04051e9092598d526bd5f1083b026ae94d8a20d30385536be577f29bc64e382a1d1d3c60042fda10aff837192113181783b84e8aa7b548166eef71bf2fe15ff31244c966ef2018b58041496d48aef2d89ba37076d64ce14dc88295a8f1150a23347cde322043e66ca32aa452229dfb882f0cd4fe8da58ebef8a209928c4801e3a79db006ff67079f69231f2053058a1bd05227aaa02847b4f602c2d7210b8533eab3e728958e9a04fb33adbd0f3a07e135cb0b79e04443ae70a19f2a255777957056330d974738a600152a0ae9d98e880e8ccb2d1ee48de42c20d6d969fdc5c9de86f4bba8bf096e61de68916c6ed9c0b4504160ca70aa0754d2619471c0712d402139a8b5685e57244a3534729cbc12e1f660f15a9022c0c294b2789d9ecb1944c7f18a503dae4ea42cc8e8c5f9472dee86b833033758ba06d682cea50f56c7caba0937c977950ea74ee849da0184ae9e9ceb15129dfdb81d423d971f9e616b16f6dfea417a89b65b43c51265e16ba672ea98ddb720d7e41da2c48420591ca3663ccc5285b403d71ff8011ad6c76bc279ce6eaef11c48cf782c3f36773a547c3a860e5546d087481f30114248c747422737a2da1116c60d2138bb91131a4bbd2d1d1fb8fcf345de41b5d5a790ae6d54de66c315ce8e2c6060501abb2337c865264d2d3385878e79170eb5604f150df08093c790f01fea56b231663c2faccf0b81a8e38098299a5c85b96e486725a1d041b33e921d8a0413e658791dbd722e96e5c15dc4fa47cc461ff758cfadae5eb516efe8e5351ebad416ffe443699c0817715230c221e128cd5dba0aab82f84f95fc0a209f900c3a4c5c537997dae6084db461f6b27c488c31ffa4429699229648ca28bee4b41029e0449c435983a18a788a7fd2019a644a5ef2711fb2b1ccadd224b0e28fb94bcfc5f6d12389a5e407442ef5f21f5a06656aee46b668f49188d01d20426a49397861636c6e20879f6c69dd5a79f8873956a582c3bcd5101a652c17cb0f960bb314b1683580765e3aba3383dc02185a1dfb99851ba46fd401d0e45811611c1061e81ef815a84918f9f121fa68605c2f9796ace1b9015420bdf1619544d505fe2b4873d451d28f49e8fb9185eea034fed8a94ada3d2c05d0b6e5061e360520d726a3da58a6dc926071399b19fb25a9db998bf715b28e8497d12859bc6eb69d789b2e38426505d739a97e98ddff1eba16c9b40120be616b0c6579616027a785556b205a8bd66f2768950d1182f7591952b422cc67a7c4feeffca24458e19b701ac85e485485d369c96f83d6801a5355ad3d43fba29b50657cacb8f2d843e75f5146243af83e5f9ea07b08b5022f14ffdc707db605a09cc42343b75b3fa291dc51381c10b80b217a09b694e43b5889a24794a4a5e7007e97aafb6179fe2fc8bb8b6a287f2dbb8bae9e4c73e602961ea664424ca41dc5e8b1dbe1019a6c3faa86562dd30feccdf4bc304511decc56551322ee0511dedf577dbd5281c0f89a1f15a063b3295ff2ebf988834b7c14032861544fe5d1ef96389461c8927301ab77f5c8e1a635b6ce67a9cccd1a8dc015f02c6698cd9ab98b9bb5949d60aa02299fb474d9d52b9009785867f7744b8073624d0ce78a1be5c1a0802ee27f8558c9c327dd3e5d20b2a5d7ff298c2b9e790179db3b3d38e14b42cbff74b1f8bb42b151de8a1fa1761c8184cf345e54efbaa4182b5ede6f98e9f715f5d9d8513bf2b9dd7385de7d8854427ec5608c7a83ec0653f78f3f990ba98007c244292141037853cad4df4538a8d53cfeaac32994a26f40c0d8850e73dc479a46be3b3e6d5939804f8fadc658ef2eaed81311d69e490bfa8f7a22a33db287164dac46d84e2470c631324e3ac2f2d72c0d7c4c5100ce993459512d6550b2c22a37ada4331a8f4236804857426ae3f84827e831b3f7bb9b4453ce651cfe7332ec1d59394bc921c7c1c739657c382fc58ecfa51ba1ff58ab8eaa18a4287b27d74bd4f472f9f62aa54f2f9c9836cb757d930a4dd9b563d1963d31f652fbf054d504dc38e1db186bd7dadead3e2fa81f25e8d450540556dbc8eb5953767f4a0581209d7f2a9e76407f069886516329e2ac8b61666b1bf56cc8c4703a5e604050711a7800ad42fd4a713c3267fa7ebf7a76cced83be060b1b6414665899cb3f36fa4d1b4d0b0c30b8d4cffc552679e999bca6ee28e1cc881c6e352a31bde95deb466c263f64e0bdcb8469532110927065aa1c420eaf14116a6ab1aad564d84b69a18041185e2f6965d8b74b5cd9b696762807c17e275fe08cfa8134d58816f4eef8304fb217688e5386813999eaf7bfeb6b74a0662a8f390a384d03198f2e351bb4a49ff78e0aceb1da433f78a587d058522b5b3c0a6375253b8d289f617585743fd8577eecd52213c78424d37f215c7ca2bd9db17e0add8ff009b4a7a3f0928d04b7a282375acd2fa00b813c64670189aa272d1118d914706e0a11459d432c996f4114aa48aa0187adddc622a4d7495b0306492d5dd5c26163e93959cd3e40fb1d9bb5f40916b437091ba455e4226a5fd4011116e28be5108372cc6c322d3307aae9e3f0d901616dd3d256062a0696f85a9a950f11dfd0a1093312895fbf7525fdff41704ce787f2504da380b04bf40a76092fb510bf9b83ccbe5718a18c545ce5e8baaa40855552e696c8fd2a1958bd38a92e19f27740d4a58c310369ff0443949c50f247956a43aecc8015ecef7610ea3e440f6363edaa70db7ac4a67dc8a39ecf4d79c119d183cd246b6e9cb5601be623b0c72145ca072aa929425394c68c33ecbf81161fe956a0645b42aa457d840c815a7e8874dfdbb463210f086834a5acb01b4c99234d43b11436d30592c49b881dfc0e51c522414262646b81096e9dca25a9ec59601a1639392e0721b326dfd41a18be22747e336086e439b75bd77ee0d83f8eeea6f669cb9b3312d4d5754403c37693ac3a5168408dc37a3526a32b0b89928e4630753be7e3a77878ec44c2c1e2e95842081ccae654378a7f9bc0f8c356d69a75b9770fa9cadc5070d7693663bcc83537e79a41a9563faff02b6d4c35cefeb2004f4b5bb713672c884201e8b9e66cebdf86143eeeba01ce0db19319237b9e0cf9b74648cba30e6710f93ba6e927db4b15dd087eab10ca9d1d25bafc7fc275fbf1ffa9e152404f7294c3b073178d57e299669ce1be2b98b9c0fcce7b931359136014e901821759c6f0d3ebb9bc9817b5d899e93bfdf2c4a6fd2e379617dcdb29c17f2a40e3c1d147d1caa56561a4f323d06f4b6e31a97ecde505b875018360446597088f5b832498b3b48c939de105d7874e83696af518a705fcf043d082f1aac79c79e03d9af21ac23adb2217aac5f4854a044013cb838a96c2955f0d3dc1e857eeafe07059960059a9d5a952ce07dad0411219258bf570f2181f415c8a77810e65da0c8dd413c5d32f48983706a3cf4557d22981c681059c208958d73785b12cd2b0b663ef5a7e2a650fe77b11dcbe227409a00db6cae8d101b59f45a210214a08c0d05dac1e1b33e99857ce56649a4cb59ca5fdfdf4e91e085292c43e52ee706cc0cf1f29f22dac4b413f633a5c4553bcab9eddbf4cae9a4583157b510f3882406afd1f3bc79c518c02a9c5c0dd43805db0ab3f5933007036820f0555cc8b603067d3f7020e3c8f9e0a9f0441cbb06388360ab396be926d8c38131a4072172d1719220c90e2cd81dea436d053cfe15a0ed34bd00e2d341d610369dbed34bda580d9bb2c893ee0d176974d51ed6153c41ac5620da0583b988bae6d28ff14d4eea8142861840b7b12032d362850ef8369bdbd219f9bfd9d113568f6d69d17a75e2c3adafc986ec1f25629d8ed4e52d5beedf7153134cd31bc80b72706df814c4fac15af89988d25864d2431c7a8013abb45cd3e638af4921881d89b75462b49feff23e84200d485313aaa3ccfda97ebcdac9280f7056e411a3900e3de2826f96a902d60cc2219aa45efd781decaf30f600e39cb770e87e7bd65cdf3408089eef05ce40184b819cb239b5efb6560758e994c393d5365b6587f6a9205380019bc7637880110808a1f8504ff0b0c4d7a4545df3f3fdaadcbc641d473a32847abd8f08df9bbbcde513f5045eae3b9db6879b8231e6b0ba93ca3d3844c7108c71b2df3032f03faf231de2dcb309b17f30b874d3a9700ad2ebdbfc8551f92fc2a0624054b76e882ae42ab6bdfd4bb4963dd373182713cc54091a2207b05f2a225d9ff2690d44fd5966f2220c701f23477176852575c098aaec9b0d5a3594be87bf4622b0857483812b2077904d288172e89fcfc1e49d560e857c42d2ade41615f6209e9e20374f24ae28443e26ccc80a2ee8be233e5811f123ea9a25cd40d949532bc39d8e09fcaf98a7ec4e792055518734761d8dd64efe650f7b8f755b9cc2c86550e5a1930af0ebf907445b01d744314237741054a3deba50ab26158a386b58ca923e468aaecd42fa21c4c3b5c96fe61cffd072fa942e60f3c16af2d7c77033139f742f6d5be73e5ed0a23160a083ffd6f24fdd68438623ce3c528381a1d930b4262a6b7f4016b3f44b47e9dc10854dc0e6e258662c414943cfb7a1e56e7a1886e8d3a899d1388da3fcefa92894ade7460b2d15014f524716e2fee763238b0a034ab71480e80d5b2027d40bc45cdb0350c5d8472fa8f3c56659e8136589e4195b6867b6ccc9753ab119286aedafb6212b784e8c06a81c4c0d183d406011f2dca2cc26322b2466e6fab36427a0b15503bae2099a598a3f0535affe8b02253645bfe0b9f5b25c7af77b75f4749281eb4bce5c80c74714a388b56efbbc411eea79b3aed349bc10dac0c5f4d3d0e9b0765285c9f6602c291c1cbb052546818fd633d5db338251472d83ec803c7bdc74d3f2a8433b8c1c6857f091d640a27152e7a849f00165d591ce40dfac10069ec06b64548f81aee42ce8d4c0113275a69967c99770e36147295fcb6faf313a7f656b316277ac3162ad64ed4bf6ba7d7bf11186fb8f6560f62bbdb4e93d312624603c22085c8c895e519a47ac2df2329bb6d59b2d5c338382b4fcd80a90aa8e0c7a5eb086991aa3a281e1b46deea09b6863576244ffb2388e7507744e57338e48a608b56b307f4eca96466621638f8adcea44292eb5198a949fdf68d0e92a32c94d2e4e326c5c29f06980e0361a5bdf74f494683b493258f777f875e9c739e1bf3b816a998d26f5b3342e1832b19c955708c955d2372457db33e0874d185188bc944cd483837153b83147c0635ca32008edbb39c0b86e4f0a5e2fd93a38c1c06f8fa6880e95c8a9d76d0eaa52e0ecfa702c378787390f469c5a2ef41b3d3ba41ebe2e4c6d0bff97d3c8df2deef41d91913dc3efcd8f518c9f0e2e17f0330cf9ac01a7119619fae66a191d2f1d273d8946d59a9e6639c7842ee068d85d842d7d6281721136ac47644d87173806a4db5e40c02477d9da2ccb781996ee97592d7e1acdc592a79b0ea30a3918b2419038346ada7032a916df1aeabffd0fdc6cf81cefe4fa5f67e37141c74b5ab430f336e69825cd0639cd631bd67e44e7c047ee3cc3c06b569f6b14a2588c41a6348464368a3657ff9c8be4efc8846c6fe7ae1988dc7f6334d1815e8103522090ed0b5eb8e82573cb208d6b74e9574fe25a143efe7d4c069abdc585fcb4167c6cc6c02a728e8641417bd1e3534441b85080b3088a16c18016622f3a3930f6795dbb4f8a6fcdee4d99e98afbf1be4347e909576b453f42ba7841c03015efd1a82cf26bfff03f65e564e008dfd0b87ff5feca481e2accb6ce2f649b4d08bb81413841eee6fc612beb7e58a9e8bd9fc20c74a03a24a02c69ded3fb2900eee60fc939fcdea8434f3debb06f24bf210ce1935487199644ac82583a8aab5b16b8bfdecd10222b5dfe0ee60e2c04ac89e3e87f91e29cf2266140ce58df27df9fef19beeb3a8aa81d25bb7d146cc4e5b83c151d3aef0a85c98d990db5fb23e825b841a9614135b0f4be74a3943d3ba5c3f32ad6ed626acf4274a053000eb408d4fbc45df8c28b551ee5b42faa23bdaefacf38fee682f707af22a3712e3200224ab498848ca9d3be71af69908a3e4fd646957fdbb01c0abe4c5217a5855df7f9fe58e5847b979aa5067a4dd8dea2d4e766d15631a3f2b6006147b124ffef06899eb917bfea639b3a0083af00c127ee833d587e52dff1040b266ad29503691003d69906e1ecd1ce3c859fdb9637c43d341b84f080209c61c514a7c0153c7bdc2f7a0728c8bad0d60d45b4ad17c3d1ccae2939c6727add0ab305d46f05d32072b73bb7176996891b070e0264f3dc616911fddd6a0eca02c64eba09457b1f1964d743c7e9bb464876c784a45405d8011ffb24ee0527b618bd2b581be1e7f90cf8e0acd89aab3a51f847bd0e2c19184b9da906ac03eaa66dd311dde4792409704b04525ece2fb6ec63fbcf675a317b325db788ad400e900416ccbe2fdfba0ef7bced9734a03925c935ae37254284bd6ccfcf8dbb47c0b731adac76f1834c0e14c9b52597803fc63e486288480e2bf9c736d81020b34086666c8ea73f72bb42beb132d0da8573d439b1df1c865c5118647a9efcaf8eb19e8c9b15dac9694066843f0cfc788de424361ac2baf758cc48be2064afbd89a804ac70b911b37e660e0fb9f59b2a3bcdd4ec37ec2d54c15681903ab1b015a047eaef8f6dd7aca86166638923821d55db07bea49b46b664768dfd2ef7c141490b6376130e07e0ff0b1617ef17f48107d55b85e009abd473b017c0b6c7d1820eb026825c33ea540e9c6a50c25b01a15bedb832c74a0785946ed96986de407d839f90e5d705b56585ecdcd5addd795b4b1888e192399e4c7e21aa5a301a947ce80d3bea8846d484010e6791c5cabccddb2fb02b76c878f632d3e0813614486a8e3cc559b2531a734cbecf064c8117e4d2fb59322daa1a3100ab1e00735f5e54cac1a5c87e0c21e3888c2ec42ca7d70f16ff5456eebc51e6605f2f3b6e8531397a8b9971fb0573f6cca601c745f55f5355fb41ef24078505c697a3601d035405592347c68d4b8a9b6ae3c4819972790426f68d22914e555f4d9eb2fa8950abff57b32e7ff4b4f6049ce1924f988f56648d68cc16a325747372820a8f22d2032ab503a6fd0f264e8fc7aac8e3b3bff8040034f629dbbbc14b7c28b57ee75b334d9340499f027144f20f3bada00c611132231927c970a8712c45ce58686d92415d8320f7fca1c3cbc9fec990853d14dd4d5767d8f3be182d97d1d5ba4e3d756e2362a257febaccdcbd93f8f93d304ca7bfd702f172261d652b8dd02d86d28add3bd4ce2b33e51d0a5e1717292f722bafd2f1d4736571fa530039e5b147744b397484ea52f344e0be4c0841604977cb2930a9794c06a989d759dd19dd7e4b9d33430378d276bafd9b42eb8aabd82ea4f50973756bd1265bf5be20b05e415a877c933320cefb36784c5ffe5a35e0896a2affa53ad32bd333ec72030297277083d897bd5749a0599980765569717680d0355f4967dac3fa851a74e81265bfca0e65b84557aaccbba890a8b9842f564f629a6a21da6ff8b077b7c0153ff1573c76ca14d42340d90f7d2fc431efd6624d9f685946af61f60a742b341f6eeb8012afce712eb3a5330e5bc33516fa457ed402270d743d041114bcc6deec90d25bcdbe859b0b6a67e4c00713a536e7199d3b3da3d5925a4a144c18f9a752ea78277a8074370bf6cee483243de118a2c63dbc94e457078f04686a470f6d1d65eb32e91f197d06962f7ba1b64099dd3a605bdb9812b3fed9cd810ddd55b094a131804f0fea3ddfedd23127212a8da1842896d5971dac6f769b6b4099f670188c751bc48698bcdde1936b1da89bf519dfc97746432c8bf642aafa16961839928a8642f1b8e5731a367a3c13cc2272f1454f874add52dacec6464c15719610b700b3d073c4f13b5dff63b0ada57697eef08c14f90b0341f01401d0582742a143bf1d7a313d17c07dfb23582f7b17524d6f77935ee59e1bb381e9f3e613809c61ed27bc85afd7fa68feeaed0ebd13514f348f5a34a776583647fa7c57d3a742b5c6d80cdddcf1e0b599e710be69616cdaca45b29e622f8e87f4000efdd60e89d8845d2822664cc587b31e8a3477394a3f08515d7deede20b92bdb9a3148c2134ef37d2b238e2494d85a5ddd1c638b723867757da9099e1b975c91cc65f549d92893e9d7196296012f2f54a540dd42638ec3a1e98978b6ceb980a3e69a5e4c8a726394058d5fdd5f1a47da73139d5770a363e87169c6cf172fc0b5198c34aaf8c8728e7c6aec180c13029f0b44f9c902fa582da0c9f0215d26be8ff32ada735c1216e4da68d0760e5c32525df38ac1904b4e9393e25894f527f876dff00197b6bc27158e2eb32518591def2dbdd0c52b86b577ca87813561cfeddcc6d02298b0ce00827e12e1c2c8518a442bb6166cd227c7d08c1b4c80339b469908278cc4621015e04be450410f136b94809f6f8249481c7297827c98d62abaedf3db7c641de281f5d27b85b0591918d640f2b15742928974fea3f2d480a9896a6f21c14b185d447fb6a3e2ffbfa8a3888b4f1225ff2d5a11f2f337b6a3024dfaeb1f40e881ef771cf5b660836707a4a63a4a00d9e871513c30dce7c685df28e573e957c756dd618893f34b55e4674ae23d50cb8cbe44147dc9cd9cc7a22b068c079b4ff8148a9b9a651a0c1c5b937583eb6a88f1c8684caba7879a96cf08b465ab83061a3d15ff728ad2998b4b65bf6563407a460ea74a039ba749526c5a7a68f1da166c8fd14082dd69ede9b8c3291f29abe9d2a2a65b59cb8a6373859364fbf7fadef7a1081ec71121332dd77af822b6973944f65cda84d5adb09a58a7c12e1f8ab3a228ebb641962542f1af07de28bdcba436f38106d650f335e66f3ab4a7c330d51982dd8ddde9cac1e912134366480b0aa34d0936ae77cf10d5cce6b1c9b89f5e072bd12d6578000603a0694f0cd34be64ec382065613d971832c70c4df1894a078a710d53b7b9f6c3f650723f7f0bd6e6b7bf3433512e385f47138ef41ae65f8034f317cee337f896e49bbca1dc5388ff999f094a535900677bc1edb5e9d6b383a686bc1c6d6684fd7c047c1eeca1afe7f38604a02e9499b34ba957a1fab7bc2926deaaad037c0bc39dc375f2d4a87be9e56f2525fdf7e2b3de7d352cc3c9177b4526a87ffd91df93d2ff47ca381870baf4c0063e652782ed52f22fd3a4b99cdea40124577f389b1f2aff5f3ac8d04acfeb25a0c28c48a8ad26999e438dc1e70ec91856bf6ecdcd9db37a6bba723323557c75b33894c2e0c0d06120a38667e786939962759e1908ec66c5ba71a21e92a2a3259582ad7a1e808dc3bc41ccb8316096402100063c6bbfb71550bb93359fe66311ea3be7b30691020426af7f89be86fe2c1eedba32e52c073b0662a1bcf08013901406c253f1e180533db61066364926d2669653cabeb1ed370b8d6eae2f562f705a4907ab72d9c810962c225f5d27d32af0c105fe7483a0a849607559f47a62f139b0a219f1b8633861e45da692d8c3e2c26770971279b12bf1ed29f7b528b54716cad930e26c8928abe89ba40bb65cebf3f3672a45e1d48c28267688ba4c6e43908f85109ad3191de5c57cee189a6a8859535229fc7720bb8746cc50611f2754c0b2d4412ed3b4d993d6c7d9f99fa2202e336451bf4c0ff8d79d09ad608e89147b5e3f525855f19d3e618210653e419ae54f6c51ea888715988c0b975837e5e173ded4d9ec519eb3eb756a090715fe51644972313367c0475b5edd597d5d813d0b59bfb87be1c70de62323240dc09d2357d6006d7e0d915712f86def5c948e94b0686795e4e65b470500726f0904cd63f955d8f35b53e7e12515712db2381bb2844ef77e3415a256825534d7541e0b7d6521ec8f6661d30e50dfbc3d57d6d3b1a490577cdeb09f3f33dd9fcf489df00dc6de30e870d1eeb139a1065a9122594a74a5e5d625e20a3a2bf75cdb5a78b5dd72fd7933cb85c8fa7854373616195dc96beeea259d8c9761b5271142e1c6461439c966e0cfe78be267c98b1ef4ccd8528ade97bfb1e036b42d8f6efa697313007ea286912ce76a6599401ed573f9a5dabbb908374aecc880984569931e5f2653b6628c74bc33ca574cedbc48259bac312839ab5f278d85f18b408d4a985be12c02385c4b2f57b02f265682903aa5236421d9b0731269c53e821775e0109b77c4cdc17f27c2645686c4c3520d3bcb4de3119cf540236de90bdd8ff519c5e042d9794ce0ce530704d5796ba31b742b5e9f20493f5f012938a47fbd694e58889843a83f327d029218b5a75e126e8e7bfffcd1ba210dc0422e46c4d0f1fd24f9c58505253a0720cecc9e258ed74aaf25960067bf42ff079721211ba163af0ad8850d881ad006e39fc288368e93b091457a0d88be3fec8c7854226c202fa03ae74f7bfe135df76682b17efb1a0780fe1bf4f263fdb543b7c0bfe7a14be6f48bd9a8f53b7ad4d6b56a90b22f07b32fb089592fd8402576705bfefb28c4c46628b4f46ed242987c8eda6ecefb1905dce3b404c321c0f8be6835c3bb57840f32dee48957456dd744eb2e0cd9f9ace2d6089d4af90f5108ba5ff7fed01e25a48b4c20b41c2983c99b43914618620c7f56b57832aea21d81be9280240471458539bc3151d454d7bf6f7b74c780be25962317ce9ad6648fc35b8b052cad74e33a216931f3483d14e14c797b8d77fff28dcffe6189e65af3458fa60308c6d85038fda5fc1ba4901dd552922f8b73020aeba6f21108de66140b17a504362be997f850e468a62bb1fb9fbbf1f68956701437c377fa9c38613af2846044ab2a81988eeff68542b2e479274df3b1afd25a8b7a2daef2ede0d304191bd4763b34e00cc384c48f3d41ee4569092f784895b24209b77ce6836ff5b38951e6db6ba61938a0415befe9e19a600f33fb3650877543402e56046e7bd7851adc8eaa79c3e530224744873d530cbbd16037a5ed95a37877fba42fb8a211919c1abbf8aa77e068234d45d5c137cae90e5bdc523e7808f2f6acf3b68407c161da5e0e202336920f4eef9687daf17e85abf2ad9f6a29f18742bc3a0d476efe345f0152608cb1613e54fa2cd9f9549f7703593e1646a3361bb0745fea622e4c4394d9d46ccaef0ec92d5723d5886d7321a0e4e651e6638c7a72dbaf490a3ac1586b5c50dc394e891d3a34c47e95f4157bf5d9b6c0c798fe3929b70cf6e60844000fb4abb8be8aa20611beeb1950c92d9a9a525317b38b578178be607ef7816cfebcfc1c1332ad415db6e8f8ac642f6963219dd78327f5922f6f15faf8de6451ef51282956c9e12e716e00e86f08bd50c994c7ae89726eb22d9ba018b2bcf50b343e8af8fb2d92d24bd13d614b1958a2898f43400d153bd569ed1c6257066a788798f0ba2575c09c2d64f39c9e7203fc1ffdb6037408b9b469502f113cd0c1f2af122a3d92c661fa6267c69e1827215453e07b7f6c2fa9d6a3e620b2b18eae64f61e663febf753faadcc184be440066d6124dccd93761b00f8dda760b83dfa53271dd2846e1974119d1097ce4b53b803f011b5efb3d4cd8c0a286f47c04c7a8a6c677ea87841ab669c032ec2f1b0abe09d3398c7ed8b2d2b7c02a0c7ecbbdd8e8c11a06cebe638c5038db382262957e4981acccb74483bde8a8f084fb1056db7a37fb16fa72ff3872baedb334224de0f837ccb1b2323c3a8c9bca3957453d1c97d7bc0f5f5db74ee3f73248aacb5b3a6373ae30c3bf03f983b5bce6fa782ea3b84bcce620dc3957c32a90841a7740313e1861a64e1cab1038a03bb281aa45bc0aae2d001e7547542c8683b19e552f1925613923ffd1dd0458c9733aa25c6bdd611e4e5f4903529fd6b1c7976a1990773a739ed4d17d37ab37d7651bf00797f7b5f2cebb292e602128adc77e49b3d9fd1ad0bcf0fc6c613d9555dcd51fa13bcda678c5cce8d558b5aa076651bde2aee231512ca0e073f3cef52d3999aeff416ba7935bb8446ffe366cd6e1e5f24b853a7269b92866f979627ac50365070fad59e185f2deb9f38247fd4f34dc70086c0183ac72467e6c38cde0725b37573eeac400b423679beb335e95f18d90b445561777c3bda784e2a181d1daed8b3b1bde9e4293224e91926d7cc65b871571faca5564b8989ed17c8f053f61839a22948fc2dbad1f1031bfb8444dc50bb5004a8f453f526eb2dc9b39b31d4b9bf465009dd20a021ad98be222bc7e237d332b0715a5423dd7810cc5cf56b8de857de58f3e9641fa0712e97908c976a885655904fa094dff1d255c98fc702450095032d5e5a45dfee6f7bfcf354715f4423b80e5b2f094a1673fd7cb2ecf4b5217ac750d3ef3f515ffef232bd5851e16e66624fe06b020a97aaebe5fca5573850013acb63fba985abbc328c0d5384570c1c16ba8366977c43adb913a433411056d76b47cb42ee1c57fe8d7a5090f20eb62fa8524ac5b53195b8e7f185d256ccd41210b2b093f7b30b850748c0db3f8bba0868ed53dbbd36aea02a83ece3135ec08db3b15de27e5c775a40cafd1526cb85f721c805932065af6e82d599c50aa1160bd3bd960ae8e05089ffbda61174fcba3bc25557ea07084e38c51ae8b936044d5aebcc7a7c8a1845840220a07c70e9511adc03b0361c5f9985b7310e298ab7670240df35b9da2b2b5192ada5faed96551b03a41970b406984a4cae92541c08a6881ae93474931aa9d6f56f8eb74cad1747da6dca448673e74fa921789a01ef4621fc844996bc61509a9b41ebb641e6bdba38b81a0218f5bf8e89a3c77c89a096e6c4df2a6678d74ee3501d03ccc95d81a27745249188f59d376b465ab899d1eaf0f97ad3a9698e8b1a0dc1f57ef5c6a7b50e9d2bbfe0816e5ea62af3d256b7936ef94f5b0da22f76e98fc9e31226cb94edf6209ae7c947a3972704b5e2eb5d42b1097f0e514e16205e05a3692cf100a1c5d8ea13df951e895a16a25394ea6d7e11a70abff73fb3c56aedc15d0738f6987c938c4dddb104fd410f80571c5b8cd1345217e25e62e5768f43a224a275618db496afde21e694a08639e68054967a8d481f231961eeb7a202506d012a14891ffb2da2972b2e9b3887521554ec5da0cb1fc656d2a256ab9ed7ce1e0ef3b3d97a37469aca5fc96c62f37d4c7c6fc448ac4b908301f3a8a7f0a787e589d76315303490a5c28934ee0b27fded6164a003323afd61f5bb9258312ec24232b64be18decf5e9aa872b56a99c9cd8e520f4b26054ce8dbc803273124a5b3fc142d6d333e121e3d81a1735645288cc4ae4d21adefd55482329855e2b490e824b657fd11b3f5544d9e7bca6cab08641ef89c68a988202589c9607dc115c8e90ac1515a30de7d8188cd93fb30667cbcc1aed1eebb43e694562c410fe22f1d1779f5f0995785f8a6f416ff1413df470873396919fb3a4b9c0e23183967051e89e84615cefb885dfa14cd305c7e4451bf0524a20ea3560a90a82b4c4855e2c4041b14595b594d4a5909217dc7371ad8864d15d6e9836051084a84f8c2c451f2b95b83ff86e43fa30e6bca216ee03225549f2a9f2927bdada00492f6febd9ccf0ce0c21ac07e7fb9d7c65f0e03d5123d324431350360a6e9c4234d2b5ab8e001689f26d2de68798a9c2631813b954000624fe437301e8e4c807443020a8f8e2c40c6377cff26b070f871fbc2fd0951c3d53240361ac00943742efcac00ae27f0352b5ab51e2803301c794a293bcd12bbed21ca752cea0c465ab495bb085e32cc6debb15183b45b946d9eac60df3f70650e2d9d7bb796619a43300d5e72a9ee3bc9a57ed35efa813bcaee79c55c805e14c91a6282f27006f46fec3b483e661f0fd91a4a28eca2e55ec8d13c9827fcc11bc84b18e6c2528d1003d91a89fe0624253f66f3c6380a971faa46edbe95e5ada00c24aab0460be0ab13b68a1917fa851b5fbb978133ec6a94774087d17d25da1f300b5d93db654cec17d5b77302dfeda975a8e3444a49e58759c6979a82e6b543f9048493562f3416005e3ea1e6be01554da47a088e29c63a57a13e54a4881b76ae663447ef4a99dcdbd669f77730ff23bdb9c0c2d7680fe3419d5244eabb37cc2b33b5f3b617433394d79a45f76f8029045e0c55ae7d43ad5917f8c61b939cf49702ac3d9e6b570eb5dc3c83b65cb60edb5a81591b0f9fa1f852770c07a128282f195126b39e55630291322cc103fb4a79abeb43e76e529ffc45630331c224bf9bbcf761a056acf72a8c51d1e60c337d0a606844c504ecdda83f5bfe7ac73dfc8996d41d527fa802a6e6a34aa379fb912a2c26395809990d7e3a0e86e37e27689744471e2864349c4eead2fbf5cd1344940dd4ab657b180d377a69e533b8a66ec71148e4c7ebb441c754b841c78dbdd782301050d54038f2786a4815b0cbcb123414bfdcdac763218441716aa248f10861e3922014822d256188a1ca0e6eaf000858b9605b48ca0d1dc5a51a0d308ac73119aae96b05bf91e50f3611b986bcf0ae205e165958aeeb9a3bceda74138b1ee1309b08d0fd073e0c8a8a6bf157eb753eba896c49b719f0fbd5bf88033d569e704b732176542b2654e3f43412f4bfc3438477783a9a4c090147e30303411649dc1ee19bee748e3cfc0eb8aabd32d379fd6a62104f9e0211e60bc118f94ae45b9f67855ab2cf999c93dff55ea5688f48cdd82832d452ec853eeecbbeec12d4c425c7b954600856634265f0d9ebfd90552e898f451b402c2258d7a908c90cd84123785b22e377a21a209806fa34279d55c89c60f20b49cfba09598e44a5e54fbb8e03bd306b5d541c8aac86d4c898602c6eddb3e01241b19e94350a97276771b2c18bc9449a4fdf3ffff7e0ce5721e96e1e29549766aa16b925bd6c933eee22d685ac17c70de5f4bcea9d24290ffbc4e5b21e9cd6800775bfdf8b116eaa8cb58622f3d8bce192856a7726439161cece91099cb47fd758f09a1a264917486a7c78b79844ae08c0982cb079f7f69858506a6cad1daee475a0ca521bed96a6690a9826662fbbc6577a1d6a70ae58d493c2224d65a8c91887dade41f025e550169d5f1ef3a1e489de7ff17be3e5b7de8659d2616d8caf9ed2522eb4b7d035aba497f415b2728a0c3fee728104b49de7a9cedf1d1a4179e2095d2b46554f7d77ca7816c3240bfad43d7e3d07c385152a5c245d10e32220629d45c51024e439b3a8b8b8d53fa2549d244ef2544fbcbefd5f407d845dc598454e80946db9053f44e40574eff5ebef94f32ffbf78d586afe2c0068a1f7ccc1782aafef044a3b7cbe619b1727229687e972d5741774b641c1b74e77c62d172dbb373894759b66c9b7a382d88bb6f934219d1f0093efc50f7a99f6c029de8475637907698b88388d66bc9fe4650adea520b7f0365cb8da139c285a19a80bebca9951e599591598325f4950e7a653d8165569094bf71aa04035fae93b36602573cbedc28dbb77deb4bbab86644344d83d8621cc376b0c34811f87c879038aefc75d31b2f9f0e7cd68434cf396a6e5ccfa212af4748a83e436f67986169b1bf202be2818260d29133a3ab7711662bf9f10e8aa9ba1b52f4f1b46d55190b33a5e43b5eabf18fe991b4f9030f8590f599c8025a86c370bcd7c07260a23eb213b0b1f0bf963f185591e19b801caca4e68ceca4357c5320427ca25475b47328ec446434dc3330f92b7abe03b16f9258151d0c119e942110c500fb32fc75187e37c6b8e37c8ed1260617cd56f28232ab598667a18933ee4a435c1e786344eb670ecaba47a3503940c440441e025635852c4e56bee99416586db3501fc9ed8a90b8ec433a21c034ede7ddb399803bdcc9ff1a04a4d54fc637818e348cc812224f81dbd04824f6a2e27f85c467fc6baad0bf98b0dfd84affcd2ee3ad50cf0f120c9c4e4449ee217782bc30887ec2b5691c812d94400ea54b6abfe434a8f4353e3c6ba894d20ff02717801bb9d7ec6b8e1a765fc4a852343e49b037a343b7e22ac7240adf8f1ce190639048ba23563743ceee7fbaf8c462dece247482f28557019139056d97ecb735c99a77dd82eb2373439d017659082773c0715ab2f6a5c90228d1dd65fc0561ccd167b286b871c8d98e12c5bed8c98819ba83c493de1163cb235039011d7144152a8e2c6919555a653404cb45bc285599218c561c0a846cee3e4b4cf949eca608c68de0b0593ca8058bb2d2149f4e0cae8674bacbf12e207307b8cd96dc38aa21df7eb5d0136be36eccf544ff78b5d604673f2fc2c1b1b96f5cb40b1edd5352af07adb5d1c4eeed624f5bccf8fdf9da7670fa1cae42f29b9233c3b37690b8c09309a25ca8e14068722cefa559a963615e097e3c2b1414d352587d3a5c228f5113b2852649a1c1f32be491f58c836c2b5675a0884cd521f5b620d73bd69ec5d75f57cf44534d2e8f208e8b43ad314856403c6bf790207f0c2fb0806f0e7d6c4ae66efc83d4f9b5026ab92add4164a6400c9426be963978bb23076423b4c2d2e8332acd2651ea580710c1dee3eea8cd3ff411fd16d3a4e6b232820cb96f0d5e1ac61e9e7bb046e381c77668653aa5f81cabd2b7394ddb0635c8b4701e2f3104cc62ee10073a25ff2210afd06e4443a3e9ef16e0fd7ec6d08a7b91b2cf4304075a584739d9b3951ad6fb25fc92e489e47431c7e8988476d6bae806c68ee88f6dce86b1dc49e3abfcd21527ce936586c401e9a24533e41e8f03c1d5e2b79ac45b413ff14487f16c53afed0a4b6a2b6dc66ba5b01df628e207f7c83f26c7cfd34cb50cd58b32fb8a1f25c67eeebdc553933a435579e44a0a1eb8a19fbaa06f586b0fe1373011dfbaa4dd61da65536a989a718a3968726361262a9f7263f7b3a249846fc0a057c815c91af5f40d3d7b977f8b62a56b18422d1aafa78251fa192abb19f76560dc542c7908b923f00ebe90930485b232300123023b18d07b87e47ea66f8f5ffc8fb80cd9b01eea4b59ef5fc86cb1b51d342818b8a3730021fb216abda702081a7c333d5bfb35752be82d5758db8b86e122523c0e19c008eebdace33f223bdd45f010a5105351a0021d6556c93456cde0b6b1b37bbaca115d20f60d9bd47c3dfe3ecd3522449efadae143af0ea7fb1715362f441336fb7c3e0b6089ae3c75d90244159361d3a29b7b77540b3a1b8fc74e82a3e4381fe172bb7e6f499f58889534703b55e3e81f268ed8d96d401c124d76e3f67b8adaa8de0cb465ba18107ae7c4e38f5e5b51a6f09f665ca3104e008bc8bc181ed48b47e08d1e1a4fb22f938bb7bdf138a137eef5b4d9a9b491e6b0ac1ec0200b2590851ba4906b0db52e942d4b3c29e04ed7812dd1a0f908ade97de82a5db97199b1bd146e159ffe0f357f77121ecb8d7b0698e69bda8be20cf482e4a50adf31a777f613a047926291c6ee2460666fe11afabb704c90adda726122cc316fbf1163355c2162a1e4b9e1a52084d3e5dc563912f84deb80822966ba0c010afa95f0347812b858050e8bac06aa544641cc8358d7a4817c8405c9014b1e38c858a58c045b176c0c4fc361e41f0b0104a818f8bd5999874a52adf9b80406913a67ba54eef6fb0f25528622913f12ddb3241a6c1bb2b27173143b8fedf0a71132472110057ccd98b62d677f662a14735d4e5ee4b5c7acb99bfc82aa1e65accd2df3f2adf3429efbc85a44f0575e36df768ff6a14138bd5ccce4fb1a0126d3297b06e60e172ce4cb205251c4dd996d7485d067a396fdac5d6bb8ccb74f27c6444c92741b0e6b54ebf4d82bb030313babd705c2738ee64681d28ddb1c33ad2d8804484fc7d9046adceaae0f4c7e59b52ce13ce632f24ecd57278f2236e51c55b1d1cb6ec0573d00b01d495c34aac415ea4d15b6157362b58ea0e8e421ea5a62c461f197d21fa6cbc4226cbedb912daa30e55ae6b67f7da804c3bf92c20291c1a3331853c9b4449c6cf69a33bf7187a65003b79eaaa6f023fcce10727373256a39a2d8b021bc8c97e478d03dc2be6eb9af4376528d277713a3b834e82319da9efff73602ee048887cc840137f3b3eb77722d2dce38372bb53c0d69ebaffd72055b86f8e66c7cfc9281cd18dd728a99053f42bd8957e0a73b87df35aa60a9da14fc46d6ea0b8ebf058194b9eff2e0b8fcf4ed168d26ee365ae0597c44f7d1815903d34fe1f5ec1bcb6a2f542a647d5323692d6bb872fc1561beea57efbbce007f063b89cde4cc5bfc3406b08b40cd2300073840d7b6348374c956379cbd3c45fc8740987d0b690345b9e3e7d19e17e94008ea431897c1055f3b42eeab8bf716896762345f882baec81f85fae5534cee8e8d8c32b3a1bda06e0c6e09530de6b084906c2243db977218224a49e841b542a10e74a61b7183030d99af91369c5435802b3413a228e332b461e7388b3bb87aadaceca1346d40677821760d0633a600febd776d06058f8443321b329727a6bee83900ab956600d4c92232e9fd3b65380509a75f682468c5fa0112e30f43636e403d529ea62d47161ce15657a0a5ddbe2a5b0ed0c6295d5e67524d325b9c1fa25d435edb6204357dddf9d87b69229dc6b9987ba92ce60363f250d8c639964e8fbf988aaee336d800f6b4f89708fca48b5b912fa0670bbe5ac6635212f3fced124bb218cb4f2a16332db2e5e5b1b5954985fb1a778b63cba65aee648a9a299fcaa06e52abac1f83cada06038bdcc01bd50508a4b23472b4b83b8a8bda49c270d0254f904d335a864b9f4290a40da3a79094998d11ec289488ec36523e905f794a290c1aadc6e5abb0d5bc58cd465d58d6b8a9eae00ad86d795f793c7f44f37562a12331d925447dd70f5db52fb43989776d1a2ba2126dd8b57f888a614ebdf77bc73aabefa7e2a34fdaee4f02056b27114da37d6f80b0439fb6300d7667f38d6316e338c4e74b2390d9d4f7fccabcc32efd1cd61eb7866cd21c52aa34f02c22c067a64d73876b3bb8f835a266859492ce18de15b930f6bee23001081104a3bad1665063282cf0bf6798e8e952a4bb0326cfa1ccb2f673af61b9dc60bab7b95853633d4ad40d2b0d32def0e184c3138cf3632e160416c9ab8270ce6d90b9bc411c525b2d1c7bba9641c7e8dc77ace0c3df7126b5dd4be031611ec621b9fbd61a371f9a7fee1a3c848abec35d47e421d9955d452cf1939c84abe2597945c9c5ddfa3ec53dadeaf9c719feae37e4f1088fe0465dbde9c268211fedc8a371e27c55d4ec1a4a52ac4a27ae8bc5456eb35228b701798c75dea1539b57dbb1d35eddf155c9fe0890b7cff8f479238caa0fa63238738a8d37f3ccd3ceba935e83079f1cbd916be95dcdc74ccab0f8101f1b91aab607af032d0f4676cf382a19dd5b9fee08f19c0918a9b9164fcb9611aeb4b7180d1602f5affbef6682036b15a70bf020c3863e635694fc8fce6536078e4bd2f71079c30b9b7d9071a27ff1d245143c1c499757e326d5be2018165371371769447ea431ae0a265555e6f0f41cbe2e68274661811b969705907bcdfa88f48c2418e89fdad8fc0d4a12f3ec5c1e7361ae82218bf83cac6e961b61c7e135d9b6448e855f6cfc8e298fbbc9f2ca41ec32ea7be2acc9f15a7bf6f89bb7ed31244d57db13ced61e00404bea4021f4019c4f2e94cd80b4fa0832063d971334e1d53f7a6d8c7c30d843d875e51f60d4664a2f4e2182150a3669d40f88f139132becd8e5908fcb32dcdc02a556be84bc07b6cf0adbc05c61bc4a50171a823137e927e413f9b74f0ab49fd5c0e0addc1cb54043f78a0d7e86fb9cc193c5bad4bdcc6d5481cada1fece1b6cbcdaa01b2b2e53a1a2b30ed032767e3e1879d97328360408f937d6fc59e3df27b6c3290f8fe9841236a7a0443c8e5f62e3b4a87076f8e5a95c08b03b33fad9ce3c0bd6ebdf974e81308be994cd77bdde5e6ed55a178fbf436a945cd5a9be604d294aba0b4835e6112cb8ed4bc6e5bd276bbfaf044b68be8f7f802a24f7e5189e9a5d788e128016ed4210ac14e025ee85eeea5e326519ec78c187106d515b5a07aa32b8e60cf4cbace8b50fae787f832d6e292dbfbf194e24b694025abae14aace351a0fcff4cdc5939fc4790a1cb94dc99e02a36ab5e81294b59f815eee411f7464c96fe971d63cc18a97d863fe88767a2e29d817b5a422ce268e6e026ef37dc4f7ffe2ea299cf3fb750740d7ebb8bd511b82b06a8eeaae4da2dba7a3419904275f476a73469bfda95d630716f5514aeb482f0b4d6b7342d2612c0b058c61700b57e48db269eb635a48b81ecbc0146c292827e22e9ef38a36fb22c85f2e16b83ce22d41a170bfeefb29b460b6da58a581c19a8016de8a55bff98e338d5228279314a31372c78d1fc46b89f157aed20759a6497492d40b88363d7bc67dcd5b981ae2611f1068c3bfaf3bb139a5ec1b421bbd258c8f1b48c59a44e4e2eee965da657b49ac04771348690e23745ccc128e8d1d8435f8b4912914f816075b75ef8ef42d76dfc14b5183d22cd7b397f98097aff8551652f2ed344e949ece593a0cdfcac39208bc88db785fe2e90d22045463d33281008e605e9e07fa21ad1d5691003714ce9fb4f283fd664f7b39215ebb80cce368cc52dcd379ef2725c8d80027d9a513e39f0bd26f5c0dffb4d5cd03a871df30b979a6882a79e40442ecdcb39f47351ec613b00067696df2b6836c7bb7ff2e5a9848c53710742f190aeb675e0f4b667a0ca72250c4ed5a971629116c05921f5373afd2cade9041af68997bd3cb9ecd350d7c86191e2862c94b1ab6342c3b8fdd569af981b2098b0d0a5413e82032dfb10a8e0219c6b05be6e441c0e57205a594d3ac9eb74da2d1d245a3b252522bf0c46f29dbc54a5ea3979c5a12ff145d49647648d553400a9de026a04807682a54a6daf5b8aea125ceb631c029e93c76cffbc1726e457335bd51ad9268d10b2c92664cbbd03100e6e0eed0df7e62840d20859f3f63b2ea6cc7c0bded1af108718fe001264c65610437921448e3082812a535a01f7431ce24ba625a6f5e2f29f18fcb850010c542093022a521083022014c03471d2a47582179ce0c5042e30818b145348c162d20226ab12b0a0042a12ac8004a911fc8ca065890a96b0449182285050a0008ad3134d9e007d4ee06312810944500a811421f840c0040424252550e27d80041fe83c30020f701d58d281da1345cfc601c901b981243289e4913cd209e984d480d4806ca209dc449a4431020c3021a594524a29a594524a29a594524a29a594524ad9440ce515508403366004cc6cbde4235be06642ba1ce6e6c639ad2b775e5a319c0fe58deef37203d1860c419cc103335d3a96a75abdbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb15c0f256aa942dc201d9882654766220775c2081c1163247a868438c0e101b60729c68d1cac00bd6f0820117a8c1e50253a481c5440baeac9660011a544aace00c290bfc98a1c5880aacb024918232a0904001194e459a8c013ce20447a60a98400c250a4811866f024cc0402252822ade10127ca1cb23f0022781255da8464461b445000a2e50083cb105ed013e5ac0ed802c0bdc0d98590041b4c1800e226221da58c0fc72b4c4ae2b22ce90c769dc6233121560579c82135df2a0ad89ae8f148982a8c19ee7dd2247e0aebb355ac0d563d9b351edc60438a280e1b888810b173230909189a1222606060806a6e5a4d57a79c1cb8b8b0b5c5c5853b058ab16ac562a16a854a915a4522d3f2d2d2c2a606141a500853aa1e074029b80a0e9042653c904a5d227c5f7919890485e093caf2341d77123e0b8baa4d62d8a6da350d0299fc0dacc3211441b73ce10441bdd20984a70e4ad19ea4845c2cd1b5228421aa878946653f268dacd669665d915a6a6b536b5ee764087546b9ad1be994993f1e66ead3bdad992525ac2a19aacb9d1287d98651ac8a2b1469bedb1de8cb262d4342debc15a937624cb7aab6babd5aae5d2e2d2ed1227888af582abb3dc242812e9ab9b7f6023588fb87490741608f3e262b2dd3d5b84c5325db3259b8f10e1d2258bc43ac1dc04e3bdb8b8b8b058b70790c5bad9a5e5dd728fd4b890ae91b67f7bbbb412cb74ea8eeace02b26ef716d0c67665b0949f43acdd4ca4c6237d2c1797ee2c52cb3fd28ae5e2c262adae9396db0110bca9b7bce511d6f25c83c1ab5067798e44aa9b2475e30593b0dc24a552e9269b415cbaa447ec7d3793fa07e634cdb4841d50d158744025e62d301dcce9a4c15c7b8733bba93d49cd74cdd79a29a96837e7e41f589b3f5e5a5a5467e96ec6c19aa6ba3c7af9eab3f5d96a9d355dadcbdc8bb145b6bf5f43fe18db5d0d85bafc7c98eea1ec2f63b3bc82e75b36fe269bb7ff9ecd19fef5400ba31d06e6f9cbc1f5c703e676d7c9eafddd2331060bd2ee5160c346667f3ab4b778e00c6b30444368d2ead15d7ba73d0752300c8e44c8c110f6bc2891d8d6c086366c81bb174902095662c3ddadf1fb54aaaebbf908dc9d1edb86e5a8c7b671b9cc63dbb8f81fdb26f5967e0ba6e5da53f537832e40991b7397989b59a86b67e95898c57a01616eae2aed2b1bdba5ddfc0377178539b9850e180da67b7735ee45e8730efe9470c14e562f15a14f6248f7ef43ba5ba4757a8dd36e11fadc30e760fa5c11faeeadeb64753bb07a9222568fb01c573689dc893a804f227d5633c911d3b57a8e47542415f9335df35268bae6e78fb87cf5d5e7cb591e6149544fddf497475812d655cf52e8e526593d4aa369b3bae07479aa9ba44e9777120af523e71c9171b0f63d626e07c738a374f377b573df36ee51b3ddbb9b27d67c6c5a0f2524ae976a3b472812c9c203afe6a6871e72ce4370ba2413c7293a4f8c3cc46fe0b01875985f8f8967921f31ea10a704f17c8ecd6092ad032b58927a6b123003a74b46ed120172783ebbd9931421b31b341fe73c92471a4967191be4d5a8b771cfb66b1b57a58f219f2718aa150459acd76499349215c52fcb31c509232b38cb02d7ef48c1f59514a30d7900c419f314079edf2251673d24969744744684acf323427bbd576b23a9716bf44db421f1c481bb877ce7d8b4eccbb1f500ca2fc1c7f2892dace0222c8770760e08676782eba170a2070bc9be41c916f004d7d3ec24cf54a35fda7f63fa88f857ed0ccededae5d158bb12114082e5351df4353333d84391327bedd6782b12b5998b71c6470495dd4704f7ec9a96d5e86738cb7b379269ef3e22a49611d1cfee795512218f231fc1f2aa2f077733129cbd90d76e1159d32f798b489cdd081c0048118c2feb49010f7e396896c9996d52fb7c64afcf6ab4919d346e06cb3b84bed67aad5f45321edd1f72e729045e9c919d3d6f59bda4919170d43426a62b93b1ec4ccc98bc3103ca2c86749bc95cf4ac307dee1dfa2cafccc430d2c497f6e5689a69f6485a99c15996ad50019cd74e1fcbb2ec880d7d53136c7ae9d507cf788f8bcf66b5b934a474d3e7d7a36f7a7f3c4a3705e14521fd6c09cece65e7fa250d28c1a5f749128a26b4c0a46f5298e07a52b4511febcd24cc71dccd750877eef21ee9eb11a16882077f44f0e09ea1b867a89b61307773639c596dc424d2f693bcfc5d0ef95e923dfaa5d38fc7d7a34f7af6f1f84819e7c5a400e1d6bab3a995b2ffab81e7f1f63ab35aba19e6db3e16d734e675b7da4cead1718c7ad59a519774b59eaf2a51c484bb83a02d32abcd3416c3821a512b3b4a984c2104a5480a95ad4a7f5662ada7fb7a683c1dce9b6e6ee99198e36600666de7fbe144efc0e871fa8b34bacfc7114caa3d1a935ebf4aaab7479f74b312ddd7c38423ce3e1ffdcdbb4524ee3a193b2bf1d06b97b8b392a777601b382ca8d28de4d15abb8eb4d9d600ae766eb10576026f37d77b2452b543eab7c01c129cb7f7f46bf3d19fd562edd3f103aeb7c80fb8defb744422cced602e084984b95b4412e17a4dc2b49e7e49d913a6ed683cfdea999574a491f43c99c06b1a1c89c418ee72f722a487fd1a82bae9de2b5993e9dd3f9b4d5fe9740ba0f745894da5abc4c44614f976446cba31d2e4d245b1bccbc11263985119758b906efa2494d5cb598f5f8e8ab9d798b70ef3987b2d9b35dc3a771905604ee6e2f4ea30f6055ea50e63556fd9fce3852b427a2e5d89898de072342ac23d734f0209e66e1227979b338ccaa8973e3f138b8b8bcd30cbfabcc0391a15211d8542dd244e45e21618bc4e7a5c60d94da55be4bb4eb2db81ec492ad8c9a2e94a123a21b780057137c9cd74f5934898249aae1b24d10298259190e9ea385d47e8b36737a232f169b3dd24f4c6395d44ab231a12393b127891467dcee69c74b3dd39ed5bbcb92f5faf65af959eab4d6f67b066e3b691b21be5d73353085e9cc9da0ea6c70264d5a094dab09e235117c26c3d57959372ce2cab4a28b75abd72f513004a6aa79d6b43135cdfddb713e90576e775ab174862c9fa552f29f66b923a2fde93c976da45816afcd03099a1cf30f4598cf431075f90e85f7c3c5e60231dd2935cf50683446accb241db2b8b756fdc9cc89a3095fe535b3c18a4f964d695050aea39816693a6fc00c5645d0909094d2d7a5ae959656631a9208bda453fad80bb719e5884521e856505949e55607a59546bceec0b12386da4902cba22045ed1ae78b2a8283b65447565b7ac09a6af02d37b4f30bd060a99ac7aeb8501aeaf6d93ed3ceb97e9f532de984092067dada0c5d434252bc2f43923ca7890331d54709b4f30fd3f1e5cb603d482aaeda37b5f254252c865b228e35e5c5c70a81347c201ae64510d9a6b93f5a482a39427d00ccc04ca766eb7ddeeeeeeeeeeeeeefe7274b6d32f99692304045d4e855c6ebb3cb35e50197db9f40b426651322942f4a84b9f815d116995edb40a26673bd94ec7b409f44333037344cb0d6ac7049a4ffa95ed1cb163da643ceda2a7a76fb7687bb66d7587744b44aa9b6beaa26e77f2763a6f75ef3232e6f3d17d75f3cc0e223e554c915afc58d1464a84a4cc2b5993d497a3c6cf0789e324ce02ccdffbfd1ab7cbf5609ad192a9d692a94422c1b4ee10d4e9667708e775f6fbf6d5c0b1792f90076bd161674d2ccb135462015f6addbadab5bbdb6e1ecb469806566eaebeea562f62c2ab6f13a86b0541d66b9833a17ed5e76c65b5dbfa78707975eef52f9f8ffa7995e873f76693b6d5738df978d4bbaa8fd106775b4a64b83bbef62bd70ee74bb6d321bd174e1a825900fb1f929dbe659842c13467449915983ed60ab26e0e677610f1a9628ad4e2c78a36522224655ec99a441b8db7bf7c39b6faf9e8c0ea1d898cf5f1780ca7cd049a2eba955832968dedcac04fa0139007b45d16f0dd3d53a9d4d2f2469d8cc828dec12baf90ba09796525b5e890c62bb97bdaa799b848d3765f59efd582dcaa631dd2af6c4bc976e827107dd6443de54eefe2723ad567ae3e663b99c84cb6136d444ccf653cfd9238e66c88fbe9e3c15dd35173e5b8d861e9f3c1d57b3262bfc0eec6780e7c7790ab1d72597b32485cc6d361d6aeecab4c49085216a543faf539fb7874bd59879408434658068e4418ea01ce3e1de059eed1afefb54dddd4aad6ed1e575fc484ebbdeaa7cf47f70dfc7c9c5eaf127d54ab47cb10d48d487c7acb1d029ee51a91780a94ad36eb907aa79740fd02ef11261b3f9b7bc0813ba601d3ce4887f90677d6b469531a33a995a2b6836a034041f2e9178b4cf56aba642d2d86bad86cbd819be9667821e9c5d7251c4c3460eb148372c1625b6e48cda862ac66b064b8842f38b45ec0748ccbc5fc8c2939c6ea7325812daee768c595193ede9b615daecb70b5cb75ef0652d62f97499261298c2f070e38d07b194986a5c7619b343434342ea7a1a1a1a1f9a4a1a1a1a189390d0d0d0d8d8bd3d0d0d0d0d8d3d0004123001a18cd0da7a1c13438343fd0cc9c86c6079a00d0e0a089711a9a1b343668004033e33434373436342f1a19a7a1e181a6064d0f343435343ad0ec40139e0687d3703439d0d0a0a1f1683e1a130d0d0d4d3f710618c0edd6502f80f139ec8964cba80c645b01048e90c666c774cd1c3b3212802daf94bd032fbb7c423665ec394b5afc66bf60084f30007024421084b0673a621ec6e34c6e22dcb261d8d8e18e24caac288aa2c32395d2afbc030f58f42bb7325763d4af4c23e770e43dbabcc6635efda5450ac7916d212974c4ea2f97d7c8c1c60e73380d1aafb1b1c39ab778f8e13bc0ae430bcb69acdc393d5ef2d03c5ef6cc78bc54c23daae41226a18c178f3c48a07ee51de4937e651d8ec323cc5f1ef3ebb9c6e9e32594160d8c9554fae7a7881a367658e3f46563872f1d74f80e3b9c071e0400448e7376068e001c0708d6e377c43c7e08178f7706cd6f7040bff20b8ccc11338f37d2afacba2997ce3d3ea75f3976f8fd3d5819f3913e3f40ceaa4c56c6c2d8d8214cf812c4696cec90e6336cec70860f3821663de6d13ede7c439e79ece133db1cc6e3cdc30c80cb78b4f1178f371ee351c75d8f3b8ec3a3937a1e8fd249f7781e5612752895c89e1b56f274d8b761e54e0f616d2c101df67bb038375c6bedfb2eba6e3eedc3767324e9e6999ff64108efe61a2dd43e08e183108fef27ed434e06db1e5f7ba77770b03d45c7b0fdc236930ee365d85e02c3f6b4dd4374a35f36dea49baebab9050037ff6e8679dd3c63f31a3787ad9b695c6eae51e3a99b71ec489e7ead2e95f4aba57ac7bc2f85fa65cffacbcd2d2f3097b91986879b675c7c879b431d6ea6b9afb9b9c60da771f34d0e37e3c059eebc78781f887eed701dde1fa25f35efffe8178de3f0fe11fd92f19e7173cbcdac206e86713dc7cd33310ec4cde18b0be0661ad8cd3560fc874804de8c234710d70184007e000f3bbeb9051fe76616ce7db819c68707e0e699001cc7cd218e9f6ea641dd5c0337cbcd37b85b6ec681fbd5b650034d57bc0e96071f9f616910f11816871e876165d82536bc8385116387dba071aa430e1841c4c061879b5dae436b083a638801bcc6c70e35349ef958ddf091d271b30edfc1071035291f3e62e870736a5bdd252abd4bd46c95ba0e03d0e1661e5e33001d6ace13e472b3cbb301b46e6e7d35801b36ce1394ba59c775e0e166205ef31d687cc61043cce061881d86e06187f304d1b839f51943ac86a0598ef310c477780e420891034f900084800981030d2172b819e63384b821e120c410a72122071ad84d44b00040840adf3ce339108143040dec66d355448044c49871b36a63dd25eacd5da2deb0549f31c48c9b699c66881934e7097ab9f9e53743c0dc0c73d61037094f10006ece13a4ba197f068d9b714ef31c4c1587c720c5a091038d1cce1364ba597512eb3184209904701ab0e770978511a3875a2b0ee709fac187ea8ae1551cee12600f3eb86208f1173d5ca51e32363d0270738cbb7ae0e8f1a247a987cd798262dc2cb3d52af31842c4b81987bfb84b9062f004b9b8d9c56d84f8cd7f0f42d8f4709e20999b03f01838dc8ce32feef2e12e514b55c693711c2a8cbb70709d2728e6e698cb946e96b9e795ce1324e3e61f8e038c9b7db8eba10d6fb899c76bccdc7cc38e1adcc3f030609c2788c7cd33df71c36bd4d8719e20ee2eb1dd2ce330eaa75d62c34ec259b193eedecc75df0bc6c38e6576f3ebb89bbfbfbad7798260dc8cda666ebe7fdd25ea0d37bf2acb5d8204e3e6d3e75d8204e3de7cc359eaebe699d7b84b8038094fd08b27087533ea30583e1fde2536ece4b4e32e51bf7ab9d35d82849d6c32ee12a4f03c41f666fbbbdd7ccfdd25409c842788e309026f062fe3379f1e1e67ea082207100280619c1f7c08008e1bf6751bb6c601605fbfb1356e635fd7c9f61e6c8d1bcf8395f11d6c781d2c8cd7d8791a56c673b0e1675818a7b1f33858192e1b2ac1f1312c8c1b3b7c61e78d9fb1addf605d7eedead6a67edbba0beb7219bb7a6b0a1cff625d6eec9065574d70bccaa66eecb0c57698c552293471042b18653724f45c51037cb2538a268ac280414b3f0084232d6053a973b2dd1c09dbee5927ddcd69d876ce3aa93767c2b6cb13446f03e1789fe0d83b443f1c911a9dc1859b9b1bafa3d0822bbe029e710c780e21ab80e04ff762b4f9485cf76cc2dcb768e39d738139014c9cafb6f7511569b4bdde8d9bd2a88a3ce2b622571e4923d0a677669fec0efba30a9936a10070fa553f836ac9e81ac0d821ab43f9ece015105f37e201e2eba6c368a3f4b95383bdd7533d811c0e3821d3a6de7a4fb3e5a9e7644fdd1ced2df7b6a0c01c42e28c79d0e66390e34ef7240e4ea66fa6b64848bcc52f879038e30998a5d10f787e36f7d9d9c8c4ddd3e1fcc9fe106d6cd6c894b8abc46d2b8f5adb4aa39b6e92461dce7708c05ac5e3364e4887531ef5ab7e4a0cda6c44c3f5a6a36c108d4f9ffd3a9d9e616f3b67731198bb0236f00aa16600fbb96e614d572f65dd8861d758bd691f4ac192109e3f6cd1eae1cd007b8fd1abe0b73a8cfd351b612cf79818a39276731e422452c114e030cc8d68987bcc0e8e3967293031cc63cc20060c19c07811f462e6c9cc0d31b8e1c2e05a7b174e5cc8bc4026c605313053c0b45ad07a61c18b8b4be92b15ac542950a550906a69d2c272021614ea7432dd5402538904a56f041f6909c98bc2eba0e8b827b81a67cc7f3153e973d1bd7e3bfd27861988210c3208031882c050e549952fc4e00b5e808117ba404517a88ccbf8c705275cd8c20bb6a0051768218b29b2c8420bb280051660e10a2bb8c2f65921da40a2a482cf0a369028a5e0abc24785680389120a3e2ad840a2d4e4c3e29b42b48144e904df146c205132c177c5278568038992149f14e28c1a851244010a2480c21346f004294ba438210a2734018a2630e10926441b48947c62b169f31dc1b8b9c29011c3f3a519cc400632080a7af224063180010ca8a0e225274e5ef00217b8608a295ad00216b060052bd85e52414905a51494525042410905a526a526a513944e503241c90425294a52d4d7974a502a41890425129446501a4169496949298a521425284a50949e283d51f2c9e1bae838fbfaedf4251114a12482520888500a410904432881a0a4c48a9292d2078450fa40c903412879a0d40120943a20f312077e50e24069033e286da094a407a524251e28259e92133c283951d2c00e4a1a2835a1835213dd639c01e330fe6d91832dda808336b0e1066cd0a20a2dd6608335a8a1066a48030dd21067cc87ffd0300334c8e00c41667862250665800119e28c791b453e2ae28cf96f0c71c651c4e1c4bdfdfc0734e3d25c1737571c6eaec19a8c9b6fb0f61d4d1beb8af1e2e6189cf9f54c9b99cffb0cda99ab1d3131ccbdf9ebb9f9ebf9ca662478e5a2a48a5145556f23f02f3066fb8ebe2b2eec6785dec59589d15adb496f69df957ed1f967af96a61aea9d7d56e87db9fc5c1e3fd63f2b57be2bf63bea707e47785ee2efe8b3d22ff0f3df15edcb41c17bf20b82f4948e54cbb682203df5d349f764ab65f3718b9ef49637492d9bd2917a4b9ba4bf581e72678747248a4cc02a8b84c4299b33241aa3ce62919018754f7dd3cdb554bf8a27890a8e0800bf27ed9ac7e95c3fd2fd803a9c3f2232016724d8bbad6edbc047b55216739b5c18c6ade453f229fde0e9032b09c1b8d830a59cf1351937d39dbb176f668136f79d0d4153269fbb6ea6c32c6ad788b0f0d6751d97b368397b39d361c67ddbb6307ec68df4afd6f77362df9c7ebd156ca92cdc457007a4dbc723c678efde8ddad6d236f559e6ca70cba90c401a04c667351a15dd534a29a5ec98ddfa8268148de816603fb6e6b74758db3e7d10f9edea6c97a75727685e87d22dc01677da0742816c97dfb4fac9554ddb2cb573ce1989a048528c9466f4bae20ce38cbe6ced5401ed3d65c7a60c7e98c8804b020eb0b22c7f81994a9543e54992646246958bc44c4c9bd8ef6843b391cdb765f9669dbcdbfe59d54bb63b68e54ff67b8b05cf99faa817dc5791ee624d5f59d45356256964a065986524a07f80e84501bcc4195c5d7e2fd721da7039eb08600c42b681854cd70eb86f74e13e186dacde3fc51ba9f759a28d96f75ba20d96f753f106eafd55b4717a9ff5186f98dec230b89f63707333f885ea9e8b9558c8b4b94074f53bd03a2466c2a5255841d58d2b522ce277d8457e6843e4a6f7690372e0bcf7e2ccf9636e821a8f792ae790795bdee7b9eedcf3bc121277a79ff4b25f4ed4d489d3711d63539c6ca75bbb1a6c699bd8dadc6cf01d41a3b1c3d9526a124b69856cc699d9002b884423101001085800e10a66c1910840c8c2a4550574a8c134ed42e44eb4d1f2c4a5d066078ec0f9ef0a78025884103280b2043bfdfad14ec497012407a2cd77ed460542b4b9dd00f19581186a4c74783333105fdcb533d12fefa59b43215b46650ceb37c120e28c7a6b1770adb5d65a6b3fdf78aff566efe361faf66aaa75d61a5c774c1b21f537dbb4891772baf99ce679ef3a1218e466bac09b20ba73f7ec4bb6b343a84422391bb7ae7b8cdd77449bd885375dfd7623ba6d3eeab7bf3b6787d477d9f78327c9fcf7247d1202e63fef08e893aea7c446b56d9ea0e8ee0ebb6d24acfb3bfad5b9e225fdea705f5aa169578761876d443353f31999a3156ea870a1609f631370248d962ff2321ee106109246cb5cf3e2d905e3d9c6085d32eee2f946e63912b96c68e374b13c8685615fb8c85b7abd57b2351d522dc0d271fa06078eecabeecbcd8d8148750b0b2a74b99986bc21a3f0c81b3226a5b07aa56a39c5a75690a5817ca84f6e201af88abe77ea579cb1a9df605b7e2dcbad45fd96be81bab25c9e3f57cf34b00b6bdff9081cf3be8c1293226f48a32ba20d198638a3bba514dc317706e6e6daeacee5e6873470f7d5cd34b0bc0da406305f52e92e6a2bba7b101b07b26710c3be0c039785349255b821a753f046ef74694fff09bc544a6cca6d83de01764142d2f48b02d108cb1a6594d14833c2f4cedcace7fbd96c2a5475ca41cf4cb4d13ddeeb2cc59249bf72889be0cca261fdc829668c528a19251328888800cb27e20784f0004c944eb0a1a7cf80e30762386324831131dc18bfc08451f4028e318b9c2bd8e79805295021c626e018675cc528841b2cd64732fdd3e6f458336d58507780bc51a36f6e88ccdc1df2060eec08792347a4f1811d1dfe001224ce18029ebfe1064c882e79297846b17e0298391fad0c516814487fbb3912d6d5073167c5c80e718cb782536e7e40b6f76dc9212239b4a2dc7c39b9dc932fa7efe49252a15eeebd9c5c4e2915cae59fcbe9e5e5e5e5e5e5c5c525c646cc62d598aaa95027d63d96f697bf68355555a853ea3195c562b1585996620398bacb5d2ebf1c2ea9d4e59723f5025f4ea718019c51ae00eb6d9d2e613912d697745a79a282e5abc74dadd53dedd33dacb3ee4d52db9694dd04198ba1810329a9b12e5dfa0a9076451cd7835ecad2238e39324351490b79a57aac8f4888372da464d1af48b1d8e9e6e9f027ea7ded05f08d3a8d618bca05416fea05aa66bd1662af6ea4cdb6f59eba97b29e9110d8e2913aebacd4b60650859aa067439ca34a88b54b8953f5a9d72f47aa91e06d0da08a5bf2e453704dd400aabc50996053cb5f6e6ef9cb8beaaad32f87aae2d2391160f98b20da485db22e84974dfee089ba1909469ddaacbd5cfac89de8a2f78ee8696c524a63cda956fac7fe72a054ac53db728d1ee1cd67db623c589602f207abbe45fc62651455c7e0f4692cf5e56079963b32cf914acb7324f2a2d0ba167127243da3fa22399f3843569fdad3e17c01d843e9a4b6c6bc5a98bb703e44387b469ed16d26528b4e3a22e6deb2b91ee6deb435a651eacd3c1ff3dadd9b762da0e189f2622cf7b63c5b8bd218779c86d2e1508751ba07f9f662dd90d70d75d8099d4eb6aba21b4a5da66e37d409a14e3773477356eb191d4d993c007900dae038841f2860cd5229533a4cd26d3d2f864428c662b473f6315e91e73d522d86e5bd8c66d9a7c3bb7789484d55f44acbd173da65b1ded3ca2d387fb87ac025dee07a5211156f704a4af1c5dd2055d9e24bbb517b5e936630f94c8562391d616a857621522c482a854e01d32bb0cc740a0643a421e916240d49ad1069c88ba1875e01cb4b0d80da14b0d583e5f434c618d08577ef94fe46d60a82a97bbaac9bcf55c10d590e8a908fcc51d326c2b8ebc558d72bba02b69ebda2d455dd0a5ee6de635e5bb6351f31e711d1479cbd212c352831f3cb1153b18b264cae93fe6c26de504c2daa45cd691c373325475448a943129c5a1d027ad2a1fc8b04a469d98606903ed7a28f07c5b3b528b356109976ed6e6700338d71114f1e802f1ca3000501c7ef678a9faea2c3580a47247841891685880a281aed214debd12ccb3da3cd0c201271457d341f1f9e0d1c1694270e62b927493dc86f56c0af88aad0821961dc0fe680ca00d27b9307600d8e519e44c1f2f3413f3f1db289da8a16011ac6f94cd7cff60430a3b149e7d47c9e543135da451d8554ba67e4fd44a5d01813c098117e40859b26f0ae9076f0bc3c4205733f945218ce12913fb8a5a51ed52b2df5a8e59a15ed57608ae8683c3fafa74923daa7a3e5333d7900724c381f1af38aa8c4a8149ac511eeb825f56dbd2855fe7851a070d6831244ea2ff762fd5a5d9ef3913f78f57a6f55440650e2d571fa07d79e9e1e96cbbc5b0360f686ea07e20b0af99222be7ea64d3784d8f940763988a17cf5c0e934443b7709f3dc98d5f2dcd8a50573d663bc11238d98b7bca17e65d9095d6f88d28871668ccd1d0f721784ce0858be6591d870ae3db992a0a200cbb33c4abf285069a5f5bb47e44f4afe60ee7a5052b7a5746c08f58aa96c8dd2a144dd5a7454adf4eb51fb8a62e0046907cb7b728a511066cef93c487fa63ff399eb6c2775424cb09c363a33ef4bd8ccfb3adc0f9617011b02fa33b7a74c97ec29b2635b0f18a35f8b00db671ea44f82f1e2f24b40dad366fb18c0f90db7e8613cc2323d9af98b07211dc6d5e993fee2ea0401e9999b130464e6a4d9332361db0cbfdd49b1b8d24697461482b0d331e97971187308e88aa13c232c4690eda4abb35dc715450957f00bcc21816ddbf61c97fc8220829ebbf6b6394140647c8b21e36640d3250f545db6556f0b01a4f781b8b69b13542f10d2fbe6ecf48f6ccf7aa6ab7e5e71dd56bd480021ddf50244d874dd9c697463dc20a03ea92763325d7248ab9e3b7dabde1ef4dc6915b89ebb344fa32b5a3d24e62e31775b3d86703fdd8849aeebb4b46b31ae4ec778df4500528c0fe58c0996415c7d7118923b4e1f99b9939d704e99545e1c06929ef97633794f0d303082bd380cf9026b37cbda22404fc1f2e604650db482dc48420d7eb0c59dec1ce9cf1c0926dd6cca3d2780f42f0ee3399b3263b32bd3250fc36646f6850dedce84820a9e30811de9d1602d20d10c45f8c2067660338f615bf42f5af4b608d0df1e84f417bf226b42df16bd2d7ab51e9fec8ad683aa487879615ba9479836d44a5d4da84329a4b3bdd5fad1ef2381759f74b59fe9924de5e5089ccf34d6b7a515c5b49f2614a92a35aad7b4291d62d1219dc25d1ad3c4706374ca74c9be34365d4fe8ba8eb62817a350e183e5b79d4d49db74126258f42b4601aa8225a557b094d7cecd9646a5c317ce1d14ac51a11a35c2925aef9e512a823c41da3770589fa78f82e80a26cf125f9d90d10ca69084332021095bd0028c9e8b36f10a34b842062f580313b6d00518fd29de8855a8826919307db6c29d50bf2cc7a47bf801399c964400534b4cd9b5210fe61e51bf5257abc1372e621c27868d2fec8c25d9cdb676535fadac37e40d41394ed7239696d38d9c57e666d6df42633d2d6ebab8c84f3573f9386f06efccbd771e67a63249099687b1b908fc7273fd9478a85f2b28add5cb2ab542ad4e2b6fc5ad6056b568b5cab1aa45d3a6f6b46e0c989b6f60fce5a650272fc6e57c60dcfa62e6b248b76f8bc6484ada25ef15919660f9150bac29022b77d250a41e367846cfac22ef9e6891110dab58d6495f19cb4e315981eae40168c2f2892b3e78f2002461f9c49529bc18a968da29a594529abac6a1f04ba3469952c9740a962f9b0dc05a747aee29eef591d6538e63e22305e41e29e5be7d3ab817995bd8235688073bb0791a4481f9168f4b64e2af07d511f111a7c0c4e20b4b763065b9c42cd76ee6ae932490600a7498454ac1f29452cd12893596f2863c282f90b4c3d3e25da9528562d1a1fc8152c1f2140b7af30ca67f81da519af5625ed15d90ea0986f362fdba5e9117457bf9b45eacc317fa197ba95f8e39e9690c64fd5e9476c9a754f7622e6abdc155a8e6bff80b3b634976b31d673d9d2bd28abc222f4a27345da02e73636e0b4c8bf3795873436f0a6573b442657311783e65f331f58afa1545c2702dce8563715c2a4e20da86f3c1e917c7f96c4bb03c16525a37d318b8ba1964b1fe107582a56cfebc9bcf1240fa4c632d38e62e4e4fdd7b81419c9e1aeaf0fde5a0b74291587e8a239ca00a1cd580e3114c00843d4f23c54f47eaa7c76aa474a8458c95989b5aed51bde57a563af4b4503d9374783dd3a62fb999937afa251f61b268d3d72b9ac143b4a3aebdeea8aca705ea9985493ca86b979f0feda821f4d33bf769351fdeb93b833a6751a41ed28e12321b80d91bc2f232ed05af688b0256e9175d62c383084ada15f1ca837979395741d6c39b7a444f61ea51ebe6ea7233c87a7873834fc7999c4f8eb18c74b27f4ccd22456ffdad543a944efa384ddae917ea9d100fa9074fafc56a5759275ef6ae58e957cbbd2b58bb9ccf3c02983b231041c9c9463ce355e997e655415dce47f597734c60303db7e382690bd39cc22e9e4b986e98f260da82e99187e987e93379c32b9234e4e91130a5371399d1ec90934559cee7a4e3749ce676e40d1e798353528fe40d521549e308d146f5409c51246fd41eae47dea037461aabcbc71d8e07cb5b8fb0bdabf760f95b1a8518cabbb0b40a329497b1540b91c2587ae401794e09ebf2a42a2e97af3df5ac4f4e09968f2ea7b70a96da692cd3d77b46a7e7ce89a0c57946f37a462f364bfcf23ece3c650f671a43e14c63d905671a43223b714bfa452f0566381f8e49bfe2970385fab67f9b4abb9eea6a5534a30ea56784533ed0b7b4e8e57cb84903504915f29d107df7e5a043fd6af1a0b44d8451c143d325bddb423de2d3e56b947eb10cd529589ec556a1288099c6a28d1396a752a28d7e42f496800596f790106d68ac7a4ec0f25b18c05c872a5187252b47568e342a655e1aeb905b32ffc27dc83ce53c6fce4fe9d78cf3da14291d4a2aa55ff4da9743d3bccb310901e7d32f3aa55f544abf4838d398bc671431bd2cd2ae685a685728132c3ba12a862a943a346d3ca3e9921fc2925b32ad57a543b979472f59f38c5ee0196139630c53db9c0fe7336d3aa1da09f954a1963b29b6f98001cc9d5007a55fd98886ab681ffab6e8df097543fdd26e8bbea396b6a552da15f3649cf309305720bad39467275eafa8a3746aa09d4546f0c191d4684f53259e510f8d7d94c6a6468d34cfc833f28c80645360ad201be9db6dd54718903ee9e6b4a80f93e9923e31ae4046fa335d3f28d07465536011d6a2427468baa47c37a1f650a1ee5c19c080b3578ba24bbe7a11d6d51e4ebe5a4ad46191124059345d5e91e615c96f5540d2118e371cd9b28ed201213c1f5f44b4517afc02e26b62c19262c5cd4dec9b191a1c59113a3cefdefc744cef9bb8f64b8828d210c3888588428b18462c441452da158588a249bba2955761650162014e519f8055b0a0b4105158d1ae888588224a871183fface9b55f4774389300a7cd94b358576a8de9380db64fbbe6677816e96656fb74896e74a31bddb62e9a36b582208bf577110ddc4b403b81e28cf924e23ca29e899fc5aa150459ac7f8661a681bb28ce986f26edd3e1fc7cc4995d17e1c9832715782ec9bd04ed66379e24290d3ba68d771c1c890456bb24487448cc3da7bb2dfa0803b2bdde9c785bf4d618a3d9fcf1e2e3cc5c72053899d43bbf00e6e93327930ddf608f4ab4f132e9a5cf89d355e7add395058137d3d554f4f44101eecf25fdea7ef51c81464822266af7dd5b8174f766bafa95896823022102e166f66b05c19bdfdcdce09b20288eb70330b681a64b7b8c8d71fbfed1b67fdac434930e25a66f7261ec6f5b9b6bb0fdefdcd1e2ca15d2ff308b39cc10fd8bdf0063865210733117e63931979936303707e62e5c5c3b2777fc286a6d977984c5d898bb781098cb5c1d99c3dcc5d50902227398ebe404017171999b13242323738fdccb1c097671636e4e109018997b1373eb74c19a0a9704b445b8dec7dc7086f6f6f906675e1b441fc366fb4518679b8985d96e97e1bed8442ba5bd4d046528e2b4943d36ce76acc3db21dbe680223a6c02c23ce6918abcd203e3beb8b9cedc1bee767bf9c7fcafd106e6e6040181798c8b983b9139120cf3fbdfccdd8e156538775124d2de451cd7337da0d87b74facc9e222653ae1445e9d9337b66cee9f12ba9584be939ee5a1371b68736007e373df71013d3a5351654380e80dd3b8af761219f004a2a53366e76940ebf3b77b42b54805d54ab00258e32ca59ca483077b7338011cf39670fa704f03b4e5751d2e113c0e9c305f0db2e123a620feeaa9894cea25ff62fde1340fb9c617b1b8b0e63daa51350be753b8b0eb5dbf811c1dd96d2a1b6e9e8d8ec993e1d6a37bdca505147e9d777edadbdadd4aad94c9936b38703609653a660d1afd2b52cfab5ba766934bfb9a496011c8a3a413a60497482b80b0373273b474e974ca60ba60119bb73e47423a66b684802c51ce6590ec5dcef30f7d209b2e7ca153f3dcb9e26c0dc9ae9fade3ded13615bf36879762f7e947ee7c0cf668dc58b8b65d92b9d2d32a261954dd9aed5a3b59de51e655b32f65610e75ec4591905095dc0e282f274cf640f7ee76c660273ff6ccec1dc379b99c05bdeae9189a7927669079f3043933b7b60c08526a4c7af47f6ef386d8519f0ecc04ab6d52363800a269d8b623f2ba5a001ec1877bb488a0124ddd9335ddaf60490d324153965f64c265766cf54329b606dca15202de4148945db44d8c4e20b4b9ac0ddadb1c386d2a1b6693d0454f4a45f4b005970448216b0c0f4164d893116096dda11898476af35c42229a4f80ca1a41011933a94f25227c019e7ecf1e24cec10099ec7995a36e79c73d2a9cd6cce8e8137bbbb3b3ee25aa3122eb83eecd790eedcc368358d7641bbc4f261943772dd6b176dce8ad0e778eee26ab7eb243bbd6f577ccbd8f1399c59153c1d5cd605c71656cc3f70774ff7ce956c91d23392ee276b048b069c899dc916c919ce60c9969e04125cba497491d459d3712636d922dc4b5d7793f8ba936e8c61f66e91ee3ad16e07b227895566138c199499949dc6b3e14c5776731522e27873b076b7188039fdc29936759b5a789cde6000e648941d476e976699764dee4c2d5c6ba9d51d12933aec4b9d00b399556f76671cb86950f4819fd9d963964d2139914f0441075af829c21a8e224dceb257d6b8dfddfdb6465acaeecea491ce56b0ad00ec471a453043165911a2c05191e185f44b7ec7bcf9dee0dce07887b2a5bc59cbee4dbfe63358674768c2159c591a152ffa02b7eea20de9decdd2da06aab69fc8d7db4f84b4fa1a6db2d79be56da1db401d6ab189bac8e6dc9cefa5e7984e32dd9cef5cc81d7ccebccef7ecdda37fb7990e250b7c666ddc8380e7b8eb908080e7cefdf413c771dc3d22040906efcd7469d7c2ee614791f6fde0f9beefca9e6bc4745d71699aa9d5a6db6ad24ddf837ca57fdff7dd2372e848b0e94a26d3a53dc2be1b760f12c87545f6799e24d9bf27993765ff0e64964a2791a41593e99f6d6db700b08f2b5930bab67f364692d5883ad4b4d6b4298898f44bebb0f6b6a2b94f07888b1c813deff674dca6f54ebfeab537cf95ae561ea100ccb24816d1c7a20e632700fb1deb8f8917dba6f68bd2fa11d1d9d52c77b3cd48728e91c6f1d64dca2ac0d6ae24033835222c9c65fd0ebb6b166fa2abff8e714478c4177d10f1c6113fc41b4660f1555fca34373008129137e48f9cc288f49134b20d1c2f77660b4a027d8747f674184ea027b249bf66943c27164bfb24d0c4420e20292464027f12b212e849b4a6fe9cd4ccc253ca27fd022f0558183cdd1e40f024af13d3e5778fb04a2c9c33239df0d99a704e2738560073bcf203042c849f19e040f640eea0890df0fcbc8422da90328833269429382626b701659fcf89460e78114214d0dbe64dc1440b9cc12647904203403ad4e694213ad436524b310198a7c43acca0802e7078b381ff1e04fc77e50d220f1ebc3adfe58db059faf7d676f04860f4511e3c10b93d27750904bc04efc5fcd04ca683d78e6a29cc9eedb2fb29e66669d4dd584cde1dafaf80b5ee02d63429cc9d3c7b5c8ed39e8b954445294944847afd7698c6f29f9fb973337d382a142b5d79bfebc99f1ff9c3d253a8602358ff68ef1fad81b0566f33699ff6d9ee5d96b411c6454dced2f621419390983ea6c8767a0faea884a9ce3acf0dbf2d56f5177bc34f9675167b4f5b3fba8b0416f18a00ac7707c27a77738238fbee3abfcac557e72e90fb99cfdc9c1bae8e7df77b755a67b5ec6da1dee2deb59ef3db42712a55ebf2dd55addbe2cebabcbc8e0b17ab15eb2b795bdc538f30d2fbdf6d71b7f53d887ce941bea7e4b7ea18172b89a68bc54a937669e5d10e98ea21a962a4545d7e751ed63b966ac5eaaa0ccc715ac6569b6b5a6e3d4bdbd6f15a7dcc514f4262ae48cc45dd6f97dae514966bd7de3bf2c7742dd53df207c64adcb1ee30f6477779785a7e3acfcb597e80e06dd183a78307723ad8025e6775d34f3f5d47f596d30b84e5e5eab0defde46283b67f5647eaa4e4cd61dd567d8b1ebccc59dd56bd3f78becbb7a82988bc3add49076ffa7775828074b74549d751a9fa2d0f42ea7b9bfc0ea6b62122aca55ee2e1315dbee53c3ce0bfada7afb4d12965b5cb58aca9e0748b8db0132cb5fde0e1311d3ccfe92d9f25655f0124ac7469238c645bdbbfd656b21deb29d6646d6bd16b00e3bdeb80ef1ec4fb77754cf74ebf1601c07717f2c304126161fa4ab57bd4a26e04e64eed665b9e027f7a10d353f774c14798064ba59e53b7b7d8086339c99ede6253a552aa747582809c4eba0ecbbf6f3aa7934a2496d36dd57e90ef06215d6e28222cfcc3ea90e475be9b6e8bde54336dc0cebbe9ea907474be778f30eddee9f2e6c89f9ed3077f633ac9961ebf1cad1fe00b1061e0839c7ebade4db755dfff5ebaad0a449276f46b7b0b1d69115aa9c2ca224ae14221a118e553104d9bb6d22eed5ac7e614474d8c965051c2d2ae8524aa425a6c930294403f4cc03a6dc230945674184e9b664274699742cd15b4ee827659742551879af6ad0460fca4c22191472a128de610029f5813e92684de64ba345d673b683ad501bf6d07e3742180de74412a123ccb794c271da78b9836f4b6e6e991c02ecbb70361f9f6f98d747a734c275d1deeda73c0b35ced3addb3238199acce76d341ab830ac285d0b35cc876f045d407a167791023c06f07af43cff292d4018bd8aec372daaa9700f42c470045c0763008c876d34f56871e7c1604d2dbaa070f3e08e9e0bf7737c5a39a19ad112de8dbb373b7556f8b00dbb303a1d74e693a8c2f225e0942cc4e2f44fb7679946dda37eddb75b2b7122cdf4afa95abce76ed52c276b2d323203bbd08d0bedd985d934758462a3833e25de307cf767f4c97c4b17df38f7718c38d04608e44f1c7b49117122f8fa3654866f59e78598481361a0d3b340aa2da431178b0c48a2bb2f05a9a6eecb0a594f2e64c4a2b785b08c0c96d4568c195f858830846a4d3e7ab98d2a4084723e07884136881bda803680281138c601ba90a389300665aad5175dfaf164c67f064624504dd0ea0a8eea926a54f96704cfaa52212adc0aaab54da0ccad94c245a81a7cda77bf7b86bf67473b422cf7a897857d921f3a7d3bd69558782391ff594de5371a7579b338023c7c40860e67c3c8f093e55dce0b8e9ed925269272001043db038042600610a6c0954a868a2f286421a5658b516909ced48609a94af3955efc5095abcdc2c07f386a20de943960047521f1551a1a42b695529fda14d6d48b1fe78c812e0f9f911114fa71327903234e99cda8c517e8a80acbcf49c1ae57cfad5025b3a945c132c515a1474b260240b859a199e7944bd3861562740f989e51784c4d408ec214780f3912ee0c9a37111b9857671aa30450f62b06d0b608e44ad1e97483605b77a689f9f18471ce9e329f6a86df1884e5a404ca4c723c1f10ba2d3daf1a3b5dd9c6c4a51a4dca49a6df5d05a274dfb806c428aa0f32a15a5828df872fc3862bae499882850f674a88472d267890fd6cefd3091dacde00f8c9399a30ea5951616d55fe08b2c8315522f2f2faaa79e52bdbca452a9542af5926900ec4105cdcb4beea94f956a3601aaea099565533551a73ab32ccb2855bd095075d3cbcba57c81ac7b2f70758f63c2f974c831d1561e279b0a977a7d39f65e77c0973959de57462d1ef3abaf2e8dd5ca629d8ea945422aa1adf06ab5d274d05f1a7b79a6311b2aa55d558c904507048a850eb4eab303be3cc1dcc5f0e315713f68f8a12c16ebe5e5d2e39a4c9cbda22ec457eda11f88e1b6c5d62f1dd32b9aae9813e2abc6208615a8437925d5a7f690aa90aaf42bd71e2ab88b30ee3506f1950550bfe81562284f63dc9c02d58a26d5a8d42cfaf568050c1aa5db16fd4985f9034425ce688389474a01e446106dbca2186d3cc1f938e1e5473583a777425eac5fac2b6b641dc542b158bfa59b59a498eb7267db185d31b2badc4942b58290d8e511b324d013a08372d29f598ab92a8a420393ef2f9f46bf1819a0588969b5a7a787d60a8234165d5abd6d04b28efa74d2e72cb784fb4c9d5ece87a3026af5fde9e072f4505dbbeadacd5025862146b162443dda6c47a1504884d8c8875b3c549758755b28245848562114afd0a8a42c9695516c95221a080000005314002030140c874482d170389ee8d25e0f14000e8fae5a72589c67490e43c818440880210004000002000004002a29ce684c2c2bdcbdcbd0b54a4c046b846fd89d38a01887ecc336108c9f8c2b3a3050b1d980a6282b8ed16664f6f61b482cc44746a92c6995ab47314e12b2459eee7e91418b43267cffe8295197e21a3e2cd66d930e2a936e9bb2aff0d463c85f854da32feb2443ca5a2a4a82143e116212c0897efe1214738f08927107e82d83050ae6b085b46222e66e4aa573d0da390c5fd177058bebba493cef43c21d54fb49fc08dd0dce42e8e1b674c4daee102054874bdf0cfea3c3c3e18fd5779ac1fb4e2e203e3140e227adad0bbf0bda21dc0c6c7b023c4bcbb060dbb7bb20dd3497d20283a783541fe3331e53e462443c8391d40617a914b303840762cdd230172f79dfcb11fce283be51259d9b4fc4afee2aa52cad2e8396ad330d07d407eae6b65a2df1f9e446489e7812f50b45346350a96eccc3c91281cf672438ba89c67c58a660e8d9a5a192d195f239f44030a74677dc138d63624bfc37e29fd397e7d24043e8aff89ab9de9dbd3e39e7fb7b5454decb64b9ac661ad18de9a0f2afcb5534809865ee6e68764de409d060acaa20fc904d778be472f43832bbc27488aa04bd1087e054e39ef4d5fb7b6e7c3f82e8c6d7312a729c280a157d3aa76d0e27438e70d9cfa24448ee1edc7b3e4ed365747ce135b68374dad19b89f2f8fafb8a43b752fdc067033df94b990fbb5c3c24a1fed4b0c9f1798699d6caae5d4da1225db0eeb4608596fd717a8669f331cbd430174465ea24e81d7556c754cbe55c1504028bac1d6e232d3f2264651e46e55dfa3bc1a36053c16dfddfdf25d2c6bfc31c4cb085a1e4590c82f739fb3efb91c3f94bf10c0f14b8f8313b875878c5138b9800fa7b1519944fd2e1d85747f2520c1b5a1f34926200cd89b7506e473f8982f20620c6dbef8e84b6b2ecbd78451e9ff24c5f8bca3750f385b26b19f4824ef96ba9de07f6546d785383d84b0574f154760fc58da88e50f4e090ce1b19ed9113bd3fbc138be68f2605c31c95bdd49ce5e5cf748d8628c9a576b650df566e6247470358b1e37b3a0804c67bc86ac0ca0ec8ba48e3bc68608e142edb8d5e30592261c583e535bae7ef12f4b12a60bf0b706616cba0f3e755b65233ebb914e54b9646252b3ce204f73ebee22ddcb819c3ff989030b32f094cdd41c82649499223ab35a08e1b05d6ddf73a63b5f260dafbe565de804f325e8aaf3f96ee42873905fd6e77c63303ed5026782d48b019d555abd956497fbcf773a272a89e4a69b2106ec9bb2434fb182b32929e311d565fcb59bcc7dd7035100346cc91f9d0d0099490c06df6403a430c1b1a4e569d9bf99f29a9e8aa99c2385ec703eed99e5d050a7d4e5aba2221840779900e15a028e992657866be12a4359da85fa109a5db2f09792c2838324bcac25c69e312406293de836010a4432d18d1031e0353dc6a5de1c20c0c9091935100e28222ceab3328fa16915a8f159ae502781c1ae5bce98416bb21bb0fe2fc3115e1a0d6897691b97927853a3aadaf81274091c7c1bbb11bb6b2410c51c26b29dbc15e17cc02b7d80ec146083f171f1d5189e37b1e05eb0c51e8839ce620b62810fadba413826027d32b85958f6c04a5590e39bb0ca9d0053486cbdaf24772b6140f978fbc8ed0a22dcd70fb478bb356033ee9981db69e4eaceb96ab099ffd2ecf3ce71961b083e0a6ba792056f1a9a738dfed51485a02bcda4be7682584a81d868a0c42b2e1b5c144a177bf4a323baa0493577014e5ec2333bb0e63161c8552230ef702aa641147b980e590571c85a88a7bf5ac14d8ae2a0858104b1ded677f41b028dccbb5c05afc764cadac30ba66fd5abe306a2370d5b03ab90f27fb19ab03ff6a3f8c7d047bf7844806226767a667e7f0ff51b10a0d514f2c8c755ff0a292e8a6432c926f08c2100129e6fa7246fe51e513d4d7cf267aca99303dbfb0ca29091a0fdf642d5c4f4a63c28348d5d426cb6988cef097d6e257239892a3f2d513170e68d68d68cc4a4c15f5e0521ba4a3640a2d9871793179da4f4fc4bbb84107cdd0120ab63dd7e3a647b9615f710a464a59e4673f04b34ad3c77a88ca48575342f654043cec99291ec6ca37c189495d494ae76848937d4cd396cc42c1beb9fbee56ecf67ca4a9fd2158caa1815707b98960f3504d2e2cda0dfea8e3f74b6fd302cb1f78274ec201b1c5249683d9825beb62e1fc2fbd9dbeb3001663c2c2aa16706f6381d5b4af356e5c149ede6566fa2d57d669a512f2495c7cb75562eeae6cc81941060996751c7938c20e1637b29b8761cd15dd6704cdc2061b405a2c01b103d27a98eace63a6a04df74b51ccede13e0c50eedd6f7ebe04b4c63b2a578abaa28b562fc71eefdf365442cbbe578c187e43acdd37520ac74406a594d7e2b7c9a9cebe5166b2eb8d4fe21b90026acdb5f091ba68733b719208660c6149f24d2851e9ab6f33e53a266fa3f0a512c68b1b3c0f8802c3bed1fc464fa619cae346d261d90f28c6d33e8976fdbfb1929deaa682cd1071a105db49eed5877c3080412e38de2090764dc4d762680cc56df4d46f899b717b3bb960b8e84e5a55944b8f9d818081ff5bb087b9bdeead9facf31466469e849f0bf1408c1a3a7bae597844cbce2806eda1e780e3952bd7b827068c9e49402bb48cce8118b50ace07ee47abd6cb3c2b5b2b3ce2713483820da47efd9c217fd1ed153b255c391d78db8d363c6df17d8e5ca556ae614690d08111b026996857793512687e4f0308c2939441ef9f3a395662e5db487d7f7f9e4d78375b45deccb45437a9cd1878f52abbc1a3ec8cc92189466a660faa65ca09a4055cb345393a1b3027537160d01e1c9972b125823138c6701fcb96b068d3d90ad139827f6c917d08a748a52432763f99d4ad5cce57b1f213c88e22a6720bfe2a271ef65c6ec51889efbc8373295beecc013784a13763bd0e9f0da1682fb2c4619baf1321240fa80553590995fd8b8f1015ff006cf69c8b324a08120eed63130eeb2b0b2d58a8ac093e0a2180f70cf05d15f896aa56fdd7a37b6bb82ef317554c812494d6e559d478efdaa509e1731a03d008b6a40919dabc4833a8d5d9db019417eed37482784529abc9431be68cd01e20514c108922c6ebc77b1a2a370e483dfdc78134bc66b73c53d694316dc4c5bca11284ef5f1f23faa1cb6ebc33bb21292a762c6a8f3a23f1309a8e1fa6ab6acfe967d072a929f269e88333cd02a4a8a16ca80a835a9304dd8756279a752acfe1072ee7a512a4283eae00b9c88ba25694416b73e31eb0ec6f6b891a65a45c2ea46042737c679bad32d3b718843e0ad2c4ced83922cf5f31d10dee8a082762294bce7fc8984a9c67279bdab8c4e703aefff0ac2c39e1f0d719aed92440b038f9431ab5432a91226b959f1468596791f8dc64800478484aa2394cf0d3034500f04c1f2c7a0dd2cd66d9e35dd05151111f183fdd1af77a180eb9d6427d2f14be39a158d829c6be6dbaf14d53d46ed45be6275204843971e795568d036f9362210775ad7f600b0b00f3371209d443bb86bc293b1e93de82c693f99a337b457b70a916373afc3725fec9263b7c95ee505fc5c0cc9a35e60ad97e52323a91e31012e5442c25e5ff6ad50a7c0857cc0d61b1719d5c8cdab72336c9d88c1bf7a8189ef8d8d8653c6ead8efd2fcf6c1a9631df6c54b48961bf328bb716a20f8c2cdac0e61216598898054dabf697677f5576b2b2a466b351889b83ea4a7c07d6e7304fdefb5073aa2416eb90eff97f904c2ad802731678227e8812eef9fb8b8a90cfabceb2601e6f05b5c84d70385e60378fb45cc8666594488b1373399873c10b4856b4983f0dd78ae187b83b43abe6bc9c07b665f945ed11e89a7075b00120b04b26711100db158fa8764feda7990baeb81a7819b19ae6db913006e49e06e45d889afde72ab942d1ea76d94d832b08dc94051e3c46b0b5b38d364041f2ad1dbb2200e4ed87ec316fb45b40406429cdc23dc5cc346a86fd1eda116e86090217581f2f390752286e1bc9a5ded8d3851e9b83333e2fc7c6b53f90cc1c24a87ce919dadb9be4fdf51e171252ca236abee82bd96840f5282cce78f0a7c85fdb5710105f3dc38043287ae5b468d507a2a7bcfb69c161579e17e219ecb021c07d3be1ecd1347236330036169796eedf72b6426014890ba71d3a2f564ee5f5aec92b1bc77fea39c21ac1a3986f15d57cb2a4b34e7c45cab781dd119eb5cb0cb74dcb47de0a9c7cd83345531e7e59b27ac990a4e287110427be21259aefd21be5d205e1d401180843b25eb2719822e08edb43ed912343cf73f2fd8afdd6553b773173fe34bd7bcb4dfd22ce82961b3b8bca8ebabbc018929e32d5f3de43ea584c6f3b97af853a0203da987ef92f6d2ad63cf9031d74a06d4a8efbaf1b255a382aa4856780e6051890270c2b9cb509da8b79bace1763272d2c74141338517b59d0210802cf34c2b6b361b0ae8ca573aa9b8fe0935e7019dd410c0995b1f4e268caca915b3433f9c3a1bffdfe53784846b1d0d60dbd599d19877deb4714d41eaf1c51853f11a71c45e510f43c2a7c4fc18c1dc78e8662365475513ae7cabe156f457f0a6f6ce60d6e860298e6dcc0301f2b16f3dc08b9d4cbcaac1a9be790548875196ab60cd59a2b4d8fea1365bf476e694fd11d83c0e84540c7d4ed10be3f0d9d300efabd73eb8cac14d73a22ba0f7e1c3f26dd260e98f04f5b639800b52e200dcfcd79b96b3acd6b348d915389d03ad91090943c79257e8c9e89bbe7b73717ab0c07fd9ae40053b6d8287a42be72ba89c08f82c1aa187b3ccc78edff9ccaf0725dc85ef28d6a586e6b04b939822bc58d0a05e98fcd6c70f94acb0365acca9b3b403fc1eff64290e08babf587c89fa6d3dcf25fda088ea27294b2e0b926e9259e9514b840cb05bf5a7e4337b18ce6f2d08fc80dbd93f23af5d260e4cbda3a2dbf52568e468ff19dcd93bbf17e81f68e12eac9b97343a31cf94401d4cb8b6425fc5066eeac3207c68d320c417480b4df0985420c2c6e20fac172d6c46b0def34bde3684a9f6b809bcaa590af8a53139ae73b0ef40702320842cc53d0b17838a123c555cfeef0445156e144a5cd4d164cab1e89d772e2114bfa5556089fa7b498406a1d9602152adae1cda188b4fe6e3a4f81b04dc8af53a4b1b686d8b5b95e5f2d3e3579948757b1dbeee3684dcd1b4222476d824d919a1b90874fbd035c8d29a6f823f48c8b029182cee42fde706c1133ba611078fdf6d2c8444a7eea6031d3415dacf7e61d26b9ba2adf50130f708b21d03f685e02b6291f023dace918e2e2e28e258b55aa2187f5ebbb26156fda136e092ea75d094f02399d7c51ad96470ee4c71c1f0cd4b5c7bfbb49a38aa0ebe8c616a0b2f6c2fad5c4af65b00a34c060d576665750b3b7d6460723eb343dc2a5af48b1a40dcfd604c0a58b6ff24860b2d9ff8787728c69ec3d45587fda7cac8cc6d65cbe4d315e1cd82a3cf02432bfb829d69a1f8490ee86f2c5392d94de7a7d27b04ef87fd8077ce5388812427e4cfc3cdca996d4e4951621adbb9c91ee2771b71f043e4081a94167c66a34a74d329a219f64e08157dd239f71ca2137408ef95b7a139882354be556f1bd6ff595349d6b885446af38130fe155b6c3f2bdff85bb57a26809dcec3ec1710825aaa40f01212f3a038eedacc6a00dee04331477e4526cf2ecc6a45128fd670a436e0284e899affd098bab51ed23e1872d8e90698301978d2257647ce60c51de5f81e0a5867b16eb4c9f9ea41333fdf05fc46f95ddd6d79f7d4744194fce65cde29ebe54b60deb748a11bd210fd2e914c09542af3c15e7309c531c698bbebec054fde03748b0a60107503824f7a0d5445afa513311cbf97bf77d62622e855e33272b811573c6d44b2724f88ecd46027c5d4ef3b391385c527544fb1d2b836cf9313421b7f1a1f792b0676e16146b84302bda8ef6b71e92eae0dc7e2f894174c38216b86f464b8d2cf24d176144891e23f1c3c931706385d1b90f01384e4ea2edb549b238cecb375daf26820931474aa8e8d3c22b2e0bf4503a831d995bead98ac5dad8595ffa090a6a089e5f8e1ebe5000e2b74cd086f916bccfc5b7aaf494be4d22c78583d1f3c4af7d1359f7076564a151ae390569d0e49b79b7ed6534c51c2b794678e745aea14f1d6afead290b68f8556f447a1ab562121e7c21a6088dd3a1db043588894e0a6de972d23630345227c7cd8f954e7e1d0bfddcdb443de1f509329f0a46e102d51586f9fb6a67e8af3ab648bc848548e0340404c2ae4bbbbeea36466cd0e7b7cf3d25ad162304cec5a40ad0de5c72b3f4284043fc7898f230eae6f33e742245558ffa5fdf426951c88702faeb58d470a4ee8fd248e7d14dc3c9314dce3d59c5ff7174a40504c95ddad1a5763e5c00cf364298c16d0ed8e07aa78b51c847084a8f6cc407f036c81c0fe1ac437157afca0b1fd14d9237cd86f82752d7ecb4ff22f2ec94bfe4b04561ee5f668018c2da21ff16908d86a4a5d78ed14a346ecaa1eab8683607be34dbdc240cb1701d69099ac22b44ee6d9d2b3b177764b388bdd25f10099021b518346f25b51f0677b28e8b9b88e97420c4a7c47fa3640dd92debd3b3596e1473b863d82a004515e4045a414cb727086dcfe9adb2378772d57e93abbe50e860b220401f98b9208cb10b2d87c645feda72397aa506150dd0a9260b26b8493a838837b8f0eaf4a6348d9af8138266ec167061e04aed9820d92ad03a3e00e0bb39da2e098e96892da1633baa62a9317fe2402430ea3415df84d24f4922e95cdc7a7419d84120003f9b882a097a9e1d169f5d5f95eeff92fbc66bdd821159ae50f2bacb5be0959587e04a7cbd13adcf55053d523e73eae259d736d46119a895eef37b160ccad179f481a0df71d3c6bf6829f7ed4431eb80f9ae75f6c9ebe48b3cf70c0a5e33914841c401d0942c472c63ce33075bc2176e418887c573a9ef63ecdc1615fada96b19b19120ab01d3060e5a1a773ede37b7ceaffe9aa2562adb11a83eb567c3ff8d825206e2f002c3f61d59719c4bf3ec11fdf0e38fcec09d0f273c09514895ce7f2cffd2f38d01da1a8d6c2ee5f43fec3a293ac8d73a4508821b0085345f8e086d7cd8d381a6b95e3a871844cfbc5e7c11dbf500eb195953943a5bd1a117c0ee9a0bfd79d5595c7cab28bb999534859505e31c419925d3708cbce2ce7592ded60df1e215f6ba50e69d79a29dc50f339c55936df78ab2a383f9c4a76f8ab9b8385e3ecc9bd97cbd0ee9e432d3d8007f541f83ce71e1dda7780f20cd5776b30c31668c6c5925a697b532710f19980dbc871f4e6e3c57ab943d89ef2279bbc7291d892b7dc489528e251b179ffa9acdf4a68548d0614399c453dda118ad51534bd2117941928c3097a73b434f5c8ec947220152efe2f6d3ced8760ee276dc2f900158a87a0e39bc97dbf9a13e4de1f9c78e22b8bd48eb6b39bcb9c91d1ac30c229fe181ed84b9b12bafcc2b5afe46c32b63282b349d2e29b34a0d3a80c246994bac8bb1d6e2caa469aa378b582a88c9188f70a9c437e277abc2410b93e47bf94e68269eef1a5b7bbd23f58473d8b84196c5e33987f19e9c3ba6a8da969e9ab6596e8f58e62b86fcd2615279ee16cd8b8343c37469562c55306f7b09af42c1be71e26ec43784f6c9a322e312aaa5003b6ec4d2153b63be0347c29f1e400bd7c180c24ee87138a4abac01008befd7044c082b778187073b5815a7fd8af143973b3a81478fbf934b4e20df79601780faa2c262f54f2aa7dd804730385b21f1ccea5d815f45c21fc40aff380c24e5c0dd999deb9d63ca0282ab567747fa02e8c2f87eef4e64393f9aa7b7ea715428be1f6c36a0561263cd636fa79e9c1929a3fb368c755b95d561faa572e9c04e630c282fba29f1f2ae799ddc4272477899047b003daf522935154cb9ad9afee7f4a5fca201cea43b34f240e605027632c62dec6cbec85e1fec98ff00637427a801fc75cdf2e4b6e40768287e314db5c31397412045371c3104d29dc3484fbbc7696902d79dee9e0bd6e74201ebafe6967ccddd108e5351fac07311d5afebc664d55406487e87b876490f7d2f7f2636c042471c47f09c09f5bbc4157db03cd62d6ff4a708cb3f715d11ba17436b8c2e0f824e1cb13c09aed6f10b8815423038b234d07736341598e3b09efe1eb4fc450ac2fcd6919388478538e0d39bac3c3cd710d6385c402e6309077fb2368e8f6fa0f489bff3c00bf41312e4e800c92f2e8a127eb0265405c6031b10445aeb983e8b0f110b09fdf4d099aa686ba30f77f9c836764bcb58b124fbd3fa1fb8a49cec1b4ab068c805a496a1de0e17d9de8743a3ceabd5359a24efa9cd45e9bece224ada522d97f50924995e4c22bcf74f1ff1c6913f281215ba945e183226cbb723c88e15342020316d9dde570cdded88e6761c4669161d2e9eb84cf4da2c13e6190a52b4c9b350a1a2d7396b1c51a99a5e0fb880b2d650f095aa86776e8b66802dbb9721de57ea0896e95bbd5f71b146ecbe84bb87b674dd01e3c6de1e3419345ec03ad6048f1be217c76c92ffa63941ed47f880899198b70e85c9d8673002c1ca25a8fbbbc7bb8393077fd99f734ea54de112e2d2ab71459d30cbd293b5ed7c86ce5b60a359828af863d7e470c88e64aac3050c6bfd26c30d3ceee67c0dce9d158926cb587367f8d84a64f7edd2cc916e6adf21dcdf723d70a64e83b91bf2bd4b5b538be8f9ef804d3b3164c02a50b141b75d174acb40e803eebeb7083e7e933a7f8c59472da5930e0f168ef97fe85168347a61f661972233060c4168b5cac92212222884ed959cb0b09078d29e9d4d42b4e3f760c252d342983db05201d363153373dec42e198f4aa5fb55822db28e2a3e8fbfa526c99a6dd3702fc7b7cdb5698d383a907f892f33f8be55948af427283a3de5c9b93fc447d7766a670d4db3f67dee7e8da74001fb3965a40d5b90cbf9a331c0f0a243aa2c37da15f68202aa421bdeeb4ff53328347993d2fcb18486daa24929122a8fe2860333738b21c5085c160aad9c800e8cce5090a382e045d6def53a126ec738cbc938c3acdd4661d03ee695e1ff3daf73ef714d0cb8015dad72c89ae0359ed273c0a221b27381ee39a2415b69465655280af5102a47206421bfc52a8c61f826e39822d42a30460caf91e322d0e180a9da448e64d2e4911167f92f95c4b247da13e53123eeeeb936b1fa03cf0e11f8c0caaeab64e05956cd7fedcfa7671f6a63e7fecf2d31d4d2ab9c7d84211492b744aa881f4f152af4237014c9e92d2ed44786d90309d7d84e83ce58b9f12ae983143d4abbf66a551aaf90f72262537d6b28346101c2af40538b9bfc4ace267f8889a918542eae2ae072a1e235aec52449f39afe1acfeb6d2b263304b0fc5d490a18c0f8314699fb7d34d77806d8f1966ff0755061e7c022fdfa08b3c755c9d73e38080c2c7b3db1c3bf2e0b5d0efebc193d9958f52332ecfff07cbb8678ecbc1979eb0ca0aa30cfcd566f67cfbf8e37eba58d7d6ce7cfc83d0bfc937b6cd02e134290cffd28116939053b8ee48d2655057262ed9c323121a661ee17bde5ab870c7e48499551d7b0df108aa270e41984552e005ee81c410bd7abb28c0ec6392154b55f841a14c1cc4d7fbe7697d76369a54034b85275c7973a27c7843646a56bd469f9093a064b1a1ca86787aa7834f8ea1c18cc67046319a4be4c4e35f2b0e157506f67dcfcf22812c52c927f4aefa6187e7b313cecb47466d800fa4ff7442380b042eed38a9581d49b45736385173c311810a1d05a11743987737eb2cc19f6a6d632559bff578d1cc0510f29bd252738618f938247379ed329705294999a33dcc85e88d670cefa7f95b52c064c15348cd93c45d326de87c0498eaefaf2fd3561822ab75d4a2f5652f5955b51e5e77d255eeb5e58dcc6589505632efa778a5041bca1c1254c8c0c753fb58a93a6889d536ce6fa13f14d353521264ac68f9c0fb298dc8d636c807c3c25da695317fd4e8e69f05f122f5997ed56e0aef872bf835bc2578ca7461749862f36aa71b345f485dcc9f3c4dbe3ea37d96431ee5b9b0206c05c2c093e90918eb89ff91340f24ea748ce4f1f4d5fcbee2f66d8b67db15b07538a885cebed5f1e729f0c8fafccc44b4f12b35b9b241e0676581190aa4c111782870eec822453eb457fc58c0b40a4ff3c66ee27b8936d2e1aa836b40f1a7758e84c46d39bf9cd5b7d41f53364e6774d2d0acfbe3fd342a88daa6a7739ee1d00ec434ef93480f4fa349ab0768d7f9e76b1373fd3baf4833e652ea1f3e3f8ba7eaee41085f0b2bb013abf44bf918c4cf70f0772ecb6284de9d0cdb65592411bbe949cd6a4eeb1c94e4b2b2897f7560cabe5fa715f25942c21897076c6ad69bc20ed7253cbe82dc8bf85b74725c084a0d8b1f97d3acf0ef3a41d18e53b3eac0cab7f1d978330f908aef54168133c76a09c30ed0dd0e52135cb5b0d2717fdc66c35853d001a5f7fefd8675489d2dccb3958d585b34ace768e55a6e985d9dd1879cd2b57ff301a43c88d3e265d623fb384f652426977fb5300934d93c7c7394f16cb11fba8279dc7e25961382f19b6da5900c28d25ed83c73320e5c83ac449d048c231005c2cfc4e48873fd74b950bede79570cdf08caf71100ef9c560d95ebd7d937f563dcc09541d104bd51707a85eb301424f9af0d7c7a847ed3c77c3ccb5c402fc9f07c0dd65360e1306e0de4701614f1740e2b76d23d557b88309b76d909d50c5ef5bfcc686895686d115bc6a2b611fcb5fd4ae02bd1b1076f48236ae3eea06517a9644fc17430a1b6e1413231d2a979872f1a9a1c3ee23e5e1696a8839367ebb3d23cfa22d40a9b51662ccf622f8345acb2c08f51c9b558ec2818ca373e0792669b8c8ede0ccd07c97df29029a5689e5def80e6c840bf41efe7ce653a2b08c178386f6d041b41d3d90237b23137e0805852d1304d879f69bff4b03a0e50fdba4cbc4d5ddd670667083ac34248d61965e35d1e00addadf9456672723aac2c0ce5f475f7b16038e81dffd8adce49b6ad95087cb843b76c89f3c18de6d40f6494ce32157fbd24858e90fc3e0663ef02a87b425f0ed1e7aad7713a3f6464f441334163b565080888e4f11380eb5fd20409b0b03ce9e3d9ed8bc91f99da4862e5613ab94727834154e507e0c93e92e2ed8d8128be0ca4191c9fce213db3e6cbd24896e02263f52efa18181bc855698874c34acf06cca5b76797574335500a4b26083a17b917fd842dd93591210beae41048c7ecce2dab1552f63fc2c3672342cf1ad1fd8bb55b99f99978f766533d1694da6c1c242b35735c243653c5c6bfa1c014b6651f6114963dd1a32c89c182cd8901d36584d14f8bdb18bcd16a6849c6a1fb04963cc05069797b6aa5594ec209ad62c0494960a0e4ed7d9c25cdfad519a5d43a8add575d3a310e1049434735dba40b3c1e702839fc61bb8fb666b4a0316bd52e22ac7222bc4da3873172565f8073470f0c2b98466bdd8af4220b6f35c0ba0918e2d948341e901742fb69510003c00af6b29cdb2d3e5074c5c952ca5a776ab14060c081d9e2ba72ee3fa986bce48d7a36453741ba3da19348bfcc8983ee232bbc0f52b956bc1839580d8de142b104e32149e99007d25b1ac38ccd54932a0d9ee9c5f672b21a48083dfa69f4b0d882d743e389dfe2e3c332123b8ccbab1637d89628f0edb4e9f6213e09fe1b015356e5a87c10fc461c4c873fb790dd6d215b25c07a51f8348f12db9b2a6662c1016161831e4130e855d9400c7b73a64a5e7c273ef22316a1d8d254aafbc009cc01f4ec458b2283db1339924df393ce487bc792243802c4bd6b72b6ce147672cd5fbc929d2b2a62a53f8a9ec920bba84950566c111698018d41e771d26941df4f07f98db9f252be9ba3757ac050066f8c4facb96e6a1439429d35d087329e1c9203be5886e48f1ea9187af54ee86d6e4498afd7bbc7b0a494dcc8913a26e0ad75fac45dda933994cb3a0d7c46bb020ed7db8602d398543a7fdf246df932957d7f5de9b29b6963828cb890ef86c384537f7a95fd329884045e652f2f4d63418cf938a68ec311f44f166d061f703e256d102e8a4f22d4f9d4e0178e1962b7dd54cf0cafcd82769e399c3b47bdf3135412d20018caeb34fc1f11f4df7eff0de13a3504dabfd0660cdc0479eb72b7a96b8a58306b8dc649222b2b425175e64c851598e09ed0f9c8598da06004fc67bd9669d7c7b6ea2e83f096c873927b6281a2d506f01a646c039f81c8b9165880e7b3ce0f844b08b0f90f7048fa7c0444aa2eecc6aa083253713b523571e982d1d837e4d3c5aebc558c3937910eb148296f38f54a94f21dd3c4f7bfa77252bd9671f4a9dd44f60c6f1a272c76d4a5ef997a31245a8145a1d3bfdd6b221d569124d3a4bf72e490f03e455f6e10d6b40181f3371af32e6e86c652c62c1e85b7e62d59fdb8cae14fd7ad6f792803192409d0b2d606d3a7fe617d027b131da3e25e7c2b61b777fed03dd846e9a0d8f3289c08ea011c0a290ad5551792db6415aab8291bf52d17cb76284085141e57c04674a64154d642db27c40664ef2c548471e4be61166297ad0fee20769aea67ba180079e9e06f7facbdeb5a1f7dadd00059134e87ef407270ad3ca5b005dbdc1c6339bfff810fdd994494f281867b0b7c0e2df5b1857acc237bf7dda74c69a01cc7123ccfcef9842357e7fcc3ee2a2bc6468422403a008125ca375f19aceb2a485c2273af518bbe52cc371d4a30f45b6aee175b687a072e4b28f1887e85df55ba2805a3c502d2744eed162959a2a917d6c0c1e31dc9e1c2d38bd893688c233c8f49440825c6cd950749291426c7d02d64a0b7e424a3c853894fd6c2263dc4c52f521ff7022df4df3d3f8f0ae65ddf022c8b5e9290868aa7eecd7ba3a4783ac0f852669950a259a9ebd64861289252448d29b66e2654f905221e3bc04dfc598341799a43097fc06b7938946fe6e7ed2539cdf40efd270f8022564043e2a84db7d42030b0b6dfc8eae0fa4cecd62332da775e2cba8dcb40cba5eba63cf17e43acad0bd146ef074f7500e9ed54faa81b1ab7a5c73a2874237a940f7776571cf3f1d1d8379026fb6fd523f2c3f0bdb8a244b1eb6133a15033c9ef6903195ae43b9b21011c149618be51e42e6096e23dc2d7b3c0d9d1b48d0361fb308fe2b34d8e579eec0f92394095014cda4a1c7e915edea5631d5d43bc114afe566a1dd20069449c2f01b5a0f282593863ae38d2e6a768a795270e8eb6b36d4ba02953e490f2ec62324c90dea9dcf4e58e744fd2ebfa1b3d5d139af486db84d0cb63bb2a10f44be276072e5b3a1cf7e7a9d45267dd44ca825499b50fca8ec1493bfed9ac545495baa7362304baa7149ed5e3fa73bd4ae5c1f985076b7a2804e217fba94dcf5e92e5b82e201d0937af85040913d2f0292f9e313bec8c1efdc427af7a4df77ce8913645af0bc59578b8080778829326ffb59f699937a793a92ac3638c1a3582942324c6039a2eb801cf0612cbe648aa1e98c776fe3fc48e6bdc77f7af28dd3225717677deaa3e4e72d874d5105f3297fe91120dc12c4b853f6ab9988325e0215048c9ff35f94d094ac7359cdbe365d8e85176a3d03fd51149573f75116c90d76bbf429e53e49616e21d9885fb9d7215a10e372c7e9eede565d697240b479e3fad1cc3f8bcbe9f5f0849a2e6c5fe755cc9a3b800f5aa932525d6b21f5417316d6b9823eaaddab1b872df66f2c8e026aecfdf5ae55e4b4b3f027ba2aa6f4f93a99e5c24c6e33d371fd2bb6666f132e34c824d9cb3cfe3f603609331b44703c9a0e6538bed0cf375ab8b46353fd99fd70a29849ebb6b5b1abef299ad338cba43e6e4bd3550a14d0fba7c5415d78277d736bbeb4f466273e41901559e8b616704a7fb82ba01a9031fc21883b50573aa2e94392387f03a334ec6fc6c6dee61c1516bd87d098fc5da391c8ab052d1fee5b77b22e1905eb6c90ad4cbd896401375ce21fd5b6bd244c1d73620ea0ff798be29802c0544fa09f2d79910b44ae0affa231f408275c498020a0dc376f86f5f74afd70ebc119487ecb131b5b75cacb3c91dec0cfbcf15ee4bff09f01f49419b0ec1f080ba90b141720a3c80ccb2ec0ba54476d0ceb7c218b676882d457a916c36d9f941ba66aeaed7e6525b07dc1e3b046972242ef49cd1043ef15d1cceec7a0a53b6ccfcfe3f0af264a712b599525347fc822745ed0d434da549bc09a2e1ae96ca0de957d5df2ba0b53264c6c2e12c7363c61a3145360b590fd165bed2d873e0f5ee3244011f3e2040010df0f233846cb41879e1b0065c2dcf737461e1a361adccaa95b3ccfe063629f74307f01522aaccc3d74cf791cb0f2c5b01aa66c0f785aa109396687cf2d1b0cbc3486a69cd1792d8fe78de1b89821014e3fd3dfc335a1f2708ba2ae8a64ce447e8a67ec239067968acbefa10110436bf87270e736251395a0a307a7661b8bd72f66bd913433492caaa740d4895934ccbb83ccd3411d344df974da429b17d88757114db9303ae6fdbd6f53b04c00bf20b0a57f56588f4549a0867e70c489bea9a00d9f5f555dd2a3aaf04035599738a9934c852f1b5ee7326048dfefa8b4e212d04d107d8e6ab5c6f1e7c8b22a9eb676b22195f1fc415ab512ded002f454e161d8135dc378e249b756ad8ad8c3df5735ef4a674800ecf14077fe3e027a486df88400f9a8cfcdc2c1e1174e9a0ff45e7fbf9317eeed2dc2b40a3f537d8515b93b3d00a373cd8a8e3cf2df822b0f2abe9f11078566c2881f95146c9f6546178e67dca1d1c4745230a4cc8c3f68936f60d89f3aaca1d840bf718a0fb2bebcc0103a53ca65046af65626f5081064206520bf12527e2de38b162433877abc94657d08a588021dd619ba7dcc61a49112dd644d4e70b742c972951fecc70388919fdda86d83a0d667f9a841b816044c7046f71c385da17a74a123df487716a65f3ba80dd7463c718d1fab53d279499c43a9f37edbd15f00783f1d6c56d1bdb71e4a6b5bfc5c420abe174f38df5083908a1f4f74b0b146171b0681b19b1757517f49afe936794cdd32c647f882b53fa0c221159e07995720e1dc997af123bd929840c26bb8ee0274dad663c27a9c3793ccbcc8970acf735932e9551475b3b7d86f9114eafd76bb2bd242d538134ad27c8e3e4838c716b0ec76852be101892985b61c1d041ad58abbaed38a33a01a3d2641da4854a41658052c88f0f604d30aefaa8491b23c1f2859e93ea2585e730893db8fec8548cd1e27beedeb825405915ca2d60057db34995437ab7431d44e03d9abc013271bf07c3f6f3577397516cc706f23bf94c4a775415eb3486da4ec74d2412019bbddc772bc3c0ad1419f74e99ae7cf4a80e2b04a6d516ba89b06fc9b915c57c2f91d37ed7bf875107cfa5e51a2c76b13b28c24931098780110e2224b19f8df5901fe313e079a7b06d79a136883f4f9d4a73534fb71d726a9f3bef71603f071d6d439e9a64f24025aa9587f661b76ab42864296085f521880cd810aed9f0d650b10c953b78132798266a19a7268e86d7f24c8a65ae114c727e62afda3c72f503029182dfb9718550c308627400349d8002b2b99d8836072b1946ea85df86572e712bd80a9d605c1f51438df2a8391cd02defca6e2304ce6087c36c1af94c67c75fe53002c91eea4a508988f01258b7c75b6c8241a5bbc61ee89b4b963d3c1758ade8326583daf0b1de3ad4d33f4c6a8b0b1fcf5ac28cadc519d9d058255f372eb0d77824ee02d6ec5395a3e9c342b410f9ea6b44fdc8ea467580bad7a8658533c82e3335a8a04abf0ae591c21302b8e7a335ecf9dc39d7c3dc3848cc661e3a2435af89162630acdb576284f684296bec0b526cd505713315d73e8a82f270bcb0dd9920e2dfa59fb64c1dacd6540ce6af528bf692efc380c53354a9d753eab1ecef6b2c696930cbdd7d4e100d4725e94288b46b459bde245a9a102ef1487c1308a54c2f48b92522d5d856e8c02921d189ce26e990b9fda5e9662315a0e007f2195a38872ef1c94a2a9c374be0f27c4c5a75e94a8a586cc49587c0d815c32ae8550942eefeeff14d1cf7d121953cb9a43f1067f6541acf0b5998f765eb4d12399515403952d1c70835158882f3d9acb81c2703d8a8fca468153595f3b76db6b40512f40c03e803afd0a1bf1138dacd178895ead3bb0fa7c93eeb79478f361a1a8154e865c13e1495e23f971103957b223145a24d6c0b28796604406f2c1d8947606a14e8d10b1c9fd68707e8a84abb51a8b65592fc8d2a94178343d5a464400c14edc60e6c4c19e3fd466b1c24c7f34d3354db59f5b0b21b034087ac08a1fc474c9a93829e9d003e0313ac4b0052c8c8aade7834906f94f8610f00de822f1c4d71df7f86c447c7d8a6fdb46c5de738705754ac1af3e5c309574052d04d1c1a69ebc971b0ed05cd8cec97a47a87f8f70914a06df2a002af91a26dd83a36cd562d28b7084cf2f009995bc6c386619c6a9e5d915b53a0dfff7bcc43fd8aa5fb9e7c7488362fc081e697b9cb9e3bf7c4d6c84e663ea1c3b5eeb9853d99a1ef83877d017c064dda720c8d33680755393ec115d316e2b18da96c4bc9ab1df5f70cedc969a17e2155a450a470437079b57159f6a1cc8a13b4af811e07bcedbf40bc410ce6139cd704571a25d5dc3d628e96e1df21b5be0a30815a27fd17d43d3f09d5f6610e6008a331bba7a4a70c64aa9f3b4d455ec119015fe874b958596f1012f4ae4fdc80f5b58e03c979184b2823d46cb9fc0ec74a914967f52b6565964aeec99369c79d376214e650f7c57738012ed1321f027a4dcdaf28f0032ef29fd358c864836c3143d0eaed27fdfb7031da8225feb95a658bd42a32a0bf655e2d309ab091ae92b50420b53e80a9ffc275d4032432070dab398cc57ec8d0f947dec97214618733712bf9c63d10f02513507ca4655b78711630820d76cbb3dc95e5d8f0b4164b5950fa06590d895aa6808d4107009dd88abef092cd9395154267c42fe9f5e69c31511bd5cb7d32e098ae1436bca578bb1d8f1050450d4a524f3439a1cd3056b4da4d4dacea61b95953962aafae2c6a16a4b25c1aaa2f2ca692684eb4c8457dd43763e515bc241bf3384f887ebee92e3432cca1f8ae55d91e01127df8728b83580ecb02f969b982919413f7d94f37cc1f2270a995f103848ae9b5b3a9c18aa2793eedcfabeaac8f8168775ec111542b5aabfa5ffb01aa8b35a74d4a56c186b9fdb95bc933afdb225ebbc7f785e36f610ba9b6e4331c69a5f35c5e8000a6f88e67ebb4769d7379847bbda2296ac285d8060b3e6798b4574e7393daa345f47538a5d487b71196f0176ef468c0b8b38416ddc5e1380b00b058577cc45fa022f51c7f8ec7561cad7ddedb91b2be08c3e4b501e2d871b57d30284d06bb2a1eef1063b55a0804de02634cf9dd9b4f737e609812e8257421f736f2c162995dcbcd590c7b99f8103808cc7a807f7b99c4a551fedc4f09df87036f0946b10d72854f7afe55ac49d0cf037992873f41a831fb86f630c9828f7d49b1963dc487110b773ab936dd56fbe9499a97bd9fc1c04a22ccd6174490e88166f2177db86fc6c6375db71f77f2d88f0012f0d9b6380e6323abdcdb502629f997bb980ab0ce901fbcfe238889a0580d711715adb065c09e934f818c342ebcaa8f4a1de00c54f72086beb8c742e40b714c58e611dcf145018087ea556ff41d506046304225dc12773e5a901a4c486215aeb9bd84cfcdc833016ea66198a7eaf2def8355007f5d59ebd0f04fa02363d17d5fa0ace698a5665f8b77e63e7ccbe5611525032ca80bea9e1d6f141c5c64207031c13212ce333908cc15077ad31e06a0a9b660102cba0d4008f844c49a018ce88d09b4953ee286129826b6c1b57000e0586d9b0025db9672527653d90a4553a6d45b8b4543ab08d3e4f17e019118f2a1bd3f52a0e4e54fff3082539910efe20245d5e5e8104e69a8b171b50dca0275a786f81a70ff0507636039d094e77161c4077e29f0361285296fa3f32e5d992c2f453e0af374781c2808a05f6162bb24902ba7b3af4005da29073c11bb0c5d0e058c08727655345674bc0e3b0340fcf5f9e6b2dbbfba723028d1bc9e82fd1a86a56f3e894f3ca50331d669f2442235750c69caedf8446fe87980c28852476c166c8cb730c906970a563469a762f35420e20f25a8fa3a2e1fdb57ef51771e274a683c7d8c68f71bd05a2c4b0ae20e23d0b708baf237eaac4b4510ef1da278adc971ddafbd108b47a8bad29a4aed56d349dbbac01be60da2d7dc14d111b21a2973b16740ff9bb2ccd2b14a0c9b6ee37bb522cc153bf9980e541ed42b5022a9e7a9d0079702005075f48ad0ecd58805520ebf3129943eae1596490278f827e23dba5bd769f98311aa34408e6b7dec9d51141251b8bd3e294f0ff6bb8a4c62a23dc09bb7a977f7f192c9ad85510c2601f331563da175b31e8523da266baa31c3f2103866cd390ecc7745d98deec3709ae4aee52759af0fb53df5b8c861578b09091737aa0ad4dfbbadd34771147386e68b7ae19067602ef257d42c640815796315c51ee02db2dd8136f0882ffbb492babc0f1c887a675a95f2c8a570e6157085c40d98d9c706a5aa303456999862e71b29e9d744cbfd21c4e449a4116e16979e18e8d16140c13d013337f4547781d85e1e68efd9abe1c8cbe9645a91b6b3c757a5637afbe4a2867731feca9657f213300cd555f9b9232c54aa927bb2c7ccc9402c38fa7fcda5f6ddb6a1306edb511be01fef63d6b7b5ca7483e64670e818485eaf1d3ade97e6116715aeb538c833322c6c65f9f59da6b8d7f3db5a25d983f7180830ccf3083075854966ab6be5e4d6f2f9610712ddf09ea5c480182dae40b573bb00ed22113983249866bfe0acb9d62b66b4e51300481cc83a7168724f63f70660ff0e60462b679a8fdde22c00a5624774bcff528b9b8b6a1ad1cff3f4ce95e68fc4a056136a69a8eb4970c32401e6989607f0926f4c3897eadf51449466710f4674d9a902b1bf7c8accaed7458e882e48232ff5cea8c5121758772c7528ac527e01755819a9a2608e0b89a6301623463fdef01a0ed1c49e2145ad7dd761d905b9dbba080b433c6e2ba4d896add57db282ff82b40e65de2c2adb4075a85bd1eaaf4c072941b01a3f17fec94de55fde554c1c36004bb66d241566d1cca106a166456ec84e2a01016335a7dd33226ac8b35be1d06a27db32f6cb09f11fb93f1a579edf5c08d15eca1f32bc548ea2c1cea4a479ce806b240bf33372b6af634b25eb668f5f44108dbdbb2abd2e76536bf17454a4ba464953a43ef607251224d9acc1f7382ea584feb14be52098d14f2ba4c8ecb2f1fc28b6c77f055fcf36d44cd460ab10cbb39a6320607089376ad5de7fee458dec240c7bca80c1456bbf736dbc4c2dbed18251e1a8976b605e960f34e25bb54af509be9b25cbc52f0923c4a9f72ba1bad24141acc6a71569edf50904b8ce417a83e26c69bdd06b4112060e07f6f1019149fa66b4724649ac094174479d93b0012dcbccb10725411a38cd6eeee6a14a862853965ed0998ee04d95c9ad3ba729cedece2449abbd225403b511dc1ec0f3d0e888eb286c3cddae7da0c3d64072ee72fb77017bd24afaa57b1b9cb4bb2197e1538cfe938f6bc994fb3937bb5efec2feb0d284995e89a884791b9419f107fe36b832aafbd7210bb6051c0290e2c580093c5fe422ac7e03af30ca23be1b140807aea111d96f1104d4fd528749c00572020303422f8101c318489cb5d9ceaf8024a7032c0b3054f37f720a3e9e06d928e69c15891279472a00680391f2c9955c3cf09216a4a3003497b41c75c23f3beb123d3c299f7655d6e4395274719df3988e5acd2a4e4167f22c20ba08244b4e1c0cd9e131e567d4c4c8320be2dcd0c70284d6a312b393eebde68209502fd57a8609210b3a2cf7d53c1314ea1f55e3e1641b2720523236ffcce40f446c5ca8cf3a62533169b030a98c4828e31077994d58676e2a4fef33f70cdc2ad84bcea217f45de145f63b3169ea6a53575ebd5b497d8882c06956927abacc44f9407c16fe6d87085d6e257538c47de483305f2e65677717523eb8e282384cd805938f3159d8925701bc05f2d035100e1cdbb1754af18155224c285b183a4846b1f5df11342954b81b508f4001ff02109c78ab59b1fc77357cced815d4a3ce405e2c6e677b837dc42081acbcd6c386ccb59cb0836b25100cb92034088e2e47945ea513abcaab83d97f18137ba7e91e22ed39e2cba22944c08d11b4470e4b94a5b83004bea9be6fd0a062eaef239b050118107ed9f1de4b50742bc346809d10686c47604bd0bdebd17116af98700f241c2509901a55ec9eb325ded0c78e02c1af677a9961f82d31c30921ec52acc24d84d095c6db5c6c804fdf559206af510ba082a18b2300a1b64a8a9e8d13d0773c918713d89f334bf4b2a89f8a2e2fcd836955cce02939a1f74ef03aa40dd427249ac6adc7d8c018a1879a6564f05095c1cf8aa8281c152da2daae5fe9959e4f483e8487162c82eb3a5e7071482be461b7558350a361ecb044921d6f3a7003176d1d10d21daa8cb7e1e5ef4646a10cfae2689dbb2c090894ae2b9b0bb2c460d1a831e67f22e4a6ea7b06b8af78fe4679318e9f16b9f928586f77c108f371682192361f158e4fdf51aafb91e69ac960182b34b2b9025d6619daaa4d395d3f043ba5e31e42296b716ba081f9eaef110e31715c311d7e3db03615cb03c7bdb129b0f4da5dc6c24a058d8569731c84f7b62893e5d67b07c811c2eee542e6575517363661e1e818a23ce878963b219bd698983ab69b903ea940c31f5001892a0233e879769fb116d5152d85acc1347db307de2e4f8d2b04ad86cc9b7445b4843dbdeeebe48269428ac6490e5cf2070366e2b28d9c95cbfcd07b434c615ae7302e92482f05e1b0bc922ad78ce5e566fe8463634bcdfef7458d60e533dd8177c5aea9929bd18d9e77d1e93e635397a28c56898d8717b5da6738944236772c52403422edb03407552bc82a048fe759e48e516e4c9823b30a7d95825049330c7909c01cec7ac9b5c2c7997818078cbd7f309109c809011894e811708deabe5be46d0d77f28b5fa74dfcb65860405b32ca8fc5697f4271b058e1d9942243869868ed1a88d23f31b680bc4487e532c591e0255d2aa37d6829036448b4d42ccd80913a19122b4bf10dd81a7c8a695bc80a4b684c56b688cc48759edc5a78c8c93358c9aed39449fbd49d91d942f4e9e8422c0ad40eb8de662eb7ed78b132ba2a69e0aa7934aa11c4e702b27a653c11c2b23ad3bf140e6c9007534823fc980ab40cae8b8e616aa56ec588796483ddf0e48fb9049f9a6e2b08ff9b36bde18e7a9caedaf491497558d10e2d1c6a973b42472cc9df96b4aa9686ab8cfab1a432458e1d50aad683097d60862986b3ea0c2e9aea2e5b29ccf8be778a7e348e2928de33392607b325cd1ac0202e2abbaa3c1df2a60c0c47444167a8a8df3b08367c835b1a3342f8ad7ff0c8073e9c0e2d6bbcf024412fb847f152417e7c7ce9e7c7282ccfd7243a6513392ddd553ba87458e78e025888f951dfdd0f9a8ec215212fa56d453ea54063f4b34f928f7ffa079237d968a7fa5449604e9e924cd689982fa4a650ad87f1a4bcd320c8f3f2ee0f2d94fb1770f1310ca825b61bc707c70c871a01fd5c5ad5f66b074890afba294b37936614f4688fe5ee092984b88eb89feb9785e872b1021a29fe40134c332d0579465d331b7904c2d6ee68dffb3d4a10a7563746d8ab63396ef124f2268297c4ccd6cc23b12bc347357e5aa6f2e99d32da63ac362019606b8bac27b024f7357fd0105c0636ffd7452a8f78a004afae07bfe398c06d80d4933aba751bc0d39be26e0432b425badbc0b166a90910075a8e9d6cc08e236473c9cb4be21514599a2b503f6b0fdf55e76b8ea2aa149a1a4f8c0e6cf07659077530309781385a70ef340133ed91b2446df6c0a2b2c073b804a6d4ddc55bc742482a3a26fca2f9f883f95f4371a2520477d4643bc2ec409914ce86dd080550865fc481e7aa5ebb6b008937950b5289ee576f98719b666c585db8f0ec9feaf746b63ab3d76d9b2845103b78402a89c49858fbc80d0bd1639774cf2907f4208f1c87566ad17199d74e5554d2d37743129cb5474fb5e76a3e3725685d79c19d7d7786370b5f16536a67a70b624278e9e239d4f49a9d00c82f195915f6c0287d3677c1c8745c8c4ecfe4edc1e3a650faad0126ff2e2a635570d0b2c0b3949a285842274d670fc46b4ba2f1eede9dfa68236edbd91d5c96a95f951b368c01fae83f461dee0b1b30a7c89f2ba08242f28abf3badc84df45d11f654d9671db2a74d01d38b30ee00eb757776911b09e964b5d21d91c4a1ee99109e0d409021220dac7e12a97619346331913a015ebc5aa9b7d6a9783160043d0a54c96a64b13e21c30a328239e6f2a4cc8f597e6ea6a61f1b7e5c401c751ca731522ea20d2cd3b52b190a237237091dc3e1382a1570e3a6b4ac71589b41da86074153e0f4d89f75af92defc0823652af8845efac02a2861ed4413f5612646072a09db749a83a9e8d6852cc8c7a073cd738bd775f8c3abcca9ce04558cc487ba083bfc20bdf9c993aa4e7c2305d75f628e1c42e4be99c0c3f9b09ddee53b86e9e584532f36c5419bfba393c33b03234bf8a9b13f81d4f73bcacebab82fb9d97984170299d0e09498f7951277837ad37b8908bccf76038bee0d342eed9389216c5c9edb03cb3bad7209ae78cec6e375ec81f0e52857e33aa2d09b244cc26f1cdb2b172d18dbb51feeec4ec563a28e34113dbb9c184979ed9d48fd1db559754ca43fa2c845870da0dccbb643205d88754ec4ca4a46929cb28cf161a3e95cee47deef0cc4f03c36558862bf8762f1a09885a66d6d0660a668a12c8f0f021035c343178f3a70537142064b135c1347e8e5082463f4bbb63969425a40a7cc8ff97b4e0a7266464771c1fde074a628579cbaac2aa94b45dd0bc4ef7a89ae048545b40ad0937b214bc0262181dfa96a995d0ade8f72b2c55e67485caf33cc6cb954f5f3759e50b6f8e327c3aa18bd20fe06d903e068df38983146fad00d47dda7391d218c84498b31d0ef34862c82366bc7ef070ce55a0ec4c1e93d7cc8858048745f4f8bd1eb2f65513d2ff5a3d030f8e5474e75c8d2e90b6ae026a61dfa82177d3ed5191d54dd721c2c63a7bc6f328372f000087978fb0cf2666bce720c4373bdd5a09d808fd3b88ded9ca778052aac0aea465e7f54e3f746ab6dfdb4a570eea432a861866cc8245db4d86340b6e505723eeacdfb0cdec705c0d30bcc19c096b1f4069a69f720cfc32f581cd5a64f27d58a6e60683c2b0bdd725b8a2c1200a1a972aa2ecc4ab78e3be98ca0c01f10988a03bb9f15b4665e0c2dc2bf286cc3f3cf9e274d2bfbfda119d7af793b1b65f325be60430480dcfaeca6dbcd1e52da70af18620669216cc3172d8a213aba1f250f3bebbd4da4b4c079b73819e4bbfb565d830b8a2ddc155e2c6b5b7fde3a35e7946410ad91371d0a8e9b871953e0113f97fdf15487f01ecc563794a14379d2d8e75db4f5aafd1a2717811062cb9baefcf1ad9baef056ea0f7bb49b8d80f2ea3f7be17f937ee2719a33621088b73520b7d1dbfd460e7106089db5aadc0fb3a7dd5241bb2304f31cc0bdeefeac803498710f9791fadc1eefab3df01e78a6f0f90b1b9849bb9f60e6faceed5c73cb4c0a03966a93aefd59dad1e7db6475d5a480326be8eb5de51389741438b1dca67110b1d5a2e14f62751c2c79ffdd6a23ae8aff2c9398441c086f2bab16673d644753e1809ebfdd94a1a9c94a9cb53075c284395b25ebce0daa7f754b32d9c7904aa09f8c1d5b1e8a14207a955fabe1fb7c35014fa5201001f882669ed41acc21ff459e9de2a690a4d5304e25b1e508b1398db86422aa8a7796dd4697649457863284e328263ac60a4ae8f273af81e20e55c5d5852241d7269ed3f24af2703fc7b295c51e6dfc0586332110a06ec0716225d90a9148d4f36857fb533444a5574c4243437dbe501993e7732b92fd00288a71c841884605ddec36f21c63f78fec4cb547143b229b73858f2a445fb05f694bd65995b1327d06dedff2d5fdf120f396bcf80b1f1755d743a61c4870aa1e4934ebadc116a9cf2861eceb8b6557bdccc77f30d564b4ec9c2c3b9cf777e5587148937dad175354301335dc08cda94e3a1461e76024de663b696f3785cd09799d4f7d635133851b64f603a40dfb8d434bde1e832b190b83a55ce37f3d05a85df5a931a7ca91ac96e5071d509dc6df181cee1360b11a468c6607c4c6a7ed3278fb744d666a47aaf4ccaa6168bf20d74b89ff458735ec56e61953726ac4c1ee19b17ddefa1b9e3980e3e7cc9dd99bbd2f8e4da750f7dffcd8f7d221455b7a22a3814e5bf29e7187c9d3ddcf4b992a484088e8edb49e756a48358d015ec80a2980e5832ce80c6cf7c2b95221117da9b0fb53222bb5993e3b34a68358bbd7ddf8c690af615644c4c1f9ca89e4d9ad4f717100ff6b3f1c81dcc31d0d9144857a206fc7430ef932659fc8451e1b063c4f44af8bbc241a7703904c6cfc45c879f3a228eb1d4b528754b65fd64b5a2e990848ab7cfb32d806016f8dcb06d9c4d1662f4b7836dab563b4d86c8d64c7a53d6d85d2dc6dd840eb54cd41421c9e61b6d8edf3a27e0eeac9663cd61c6cabdff01f3c10dde0e7f54942c04dad6a18b13c0426a0d4e307f3ab1f8a22532a90544124e01ca677222f28071aa69d85f832bbf8dc9d5002e6e396420445f55cd24190d6144e2f4a759aa66136e40d94cd7257cd289fd963f30b2a23883f2756edec0581d4ffdbbce349c03599dc29500e1accee82c609160a6ab74e706ab0295541f73aa4ca05603f0aaeb05ab06e2036fbf2b48c22ec2e57cb4e3e0c0cf12690f08ec385a80d3e410ae410ece187c73fc3d99b14de06164dcc6363305e518812850cb65c7c697fbf7b4316458f03b7016ccc09c3ac25e6bc7e95fb55167cf13f8ca2bbcccfc500f8dd7d5e613413a8d2e5e8a3c8631d823e8bb645d31c7b832fd2b693d5f5c6d4f9a9298d376f2ac31e75bd39c91a4162223ff080528dfc0fb064e319c142031cb97bb2a4b71e8b4f19d8b71c7de17cba729bf0ba3973f9c86583fe55f3c4bb872f2014b377f52c2df98cb8639a15767ea26ee4e33e517a838f4f07ec0fb2b0d1de5ff02f9f13540f74e883f2f88688b818dfef2d675a70410fc327cd441c439a4908086f30c5419eb4c73a44ef6639fbb75c133fa0dc4c96eb4106eb901e353cbf3304802dd67c0b6637e46e48d4f666a22f9f6765bd66f34a997f1cdf58ad41d19f0cc9721b813aa398f978e156d12310461c5cf395a6bd0bc1d90e611b34e0510a3dc331d13b907047a2cc9c6c3697ccb3dd88587d27520f57f7fb0443747c17a7f83e18ddd3162c300a34e4c2aba2f84509c9ad792344240a5f5c3d89a7824ec25658890e31a55d5416dbcea1399374835a7cfbeb91da0bdad1038d8a03dfeddc725c810d33df62d722b510f9f7c2f3cd083b1b6fb0c5465e453ad84a0a6318dd52989366f89b8c502e0e5c98325ab45479dbc1e0c8910894ae7889512ecf62abbbd6bd5c1b2453bb78f5e4bf67af1073310776bb362e847987f2cbb1c7904f7149a65cb181118ab0b3915462eca3127e7c48c5d7e6b01c7bf0e89c9f98f9936bec6a9c9fd872b5134a0385080012d9da8f88fb78324752d843c9fd9469ab8a146f9c7f91e7c5487ad998b1d3710a23b662e98c9cb2052737f14996ac21a9369d442137e190d214ee7a278ada847e2515e915a2ec54aa3a69f475e64a99130608f14137c504cd21ecd54cb3346ec2e0a4f75554f981a43dbec22830f5bf14342dd66919b5e0d66d73ac7998787ddb62d79be7f1cc6a72ed8df27ae6b5b8fec6783cc392dc7cace5c93146743e26b4799e74719a67206d4461a933be5ad1cf85b02ce024215d7759dbdf50dfb5b5ded15fb8c6213861f1436633d8aef883889b4def602c413d3f884b3aba021714d8bd940e5e5260e179bf1925f1afff307caff92c619a95e4fc7f01cffc16c92840a1c727fc0228c0323962c736262c1c22f9afafd077e4ffddc2ee75049cb2de27f50b4a4348c9cb537a99bb9d8b2e7aaf11f35e29ccb5caa2fb3235ffaa145b56a5632190f9c0e02dad0cc3378fdb6954ccd9d11146c3519d8685fdd989b1444cba03f7eac5bab40f1435951983d8f48e0a7c76515c91dec4b6fb38c438eace495bd7c903f8a5e58c84fe41045c129344a3f93fa524f9f788247b14db0ace15c12cbbf8b864b6d2f788904077580d041113ca8a6bdc143ade85b6afd1b171bc23803f35b96dd9c0a36eb017e7b280eb7bc68ac9a824e2b9640035dcec40f94f2d63f2c953e98fb6427cb3a7c1bef5e54a2655f200b2ff69a44d387af5842300c26979877279b2563695917dfa757799694bfac8fc8158146c52799ed71ad4f2fd8685e969633952d1160f66b4a5044ca6dfe108414a006a7876b9a1e3fe574685376095513db3ff006c0d3cdfc12e04e0c89dc84de64d76362bf81b93d85957b08215f9cc807b9bf9848d96851659428e154880407ab652a0407d8d2f68747b509c17fea73bdefb55eb67ee7f88b1950ff713985bcebcb9b6d0cb10a85ba9e5ec5c486d1da9144f000c30ed624efe0a6a20dcf09f7ab3a69576f19bf688394099b62b9824e65eea8c12230a92207fc9db40335db96b68186b7902dcf26f052f3b8261615074cc32254c2482c1d9222145da4b84e7788bae9c895ce53dad24e2f22f7a9db7c14c54615848f7b8aa1d7152d41293a9fe700dedebebad3e3b58e2e67624db3dc5a42bd5599e6d3637cc5814f97077eeb2a682ad2a3be033831bb3cc0e595545cc54b01e438977d7910739729eb214480597883996b3cc6d2b47324239787b567442e8d96d5d1fc8640d3bc3f2668a58d623cd0f87849e7300ba24bc8658fc37149e3d726466b136115f0fa790c451d34e78b1111fac20395242832bc33825b0675cf356b19c823e0762a5fb94d4db2ce1e8a9cc93382b2060a4fc34cd2b7868c80da5889729e6a7bb0897e11dd0c16bf03186910c0ee15c24a58f9c5a578b5150155e0650cf7a5cc9de7b4091ea9ebade4c797648e587ea09267b9079151772a9c364aca866683cdd1c182dd05613681b3ee28126f70134ed2fd1b604ca35f7cb08f2d77e7ffb68a89b6748efbf9d13ec7a6164a580e681b8fe3c33a9356199f33a94a4b2bd4bf5c3e2acbda3dc769eb286e33d91de4d74d95d2b7402b42d2b1def0c08a657487c7105c6b582f51cde10bf88054aa03953e1072f53f359ae5ef91e170d7e2636aeca8a64c1cb0fdc0d7ada183dc6637609fb161a355206e9f405f0515e7b0e8632f08f22893600b96acc13d7e1c5e784bf37188e0963bf0c25321e409d8d51d96aed4dbd1e3424951089d2af46c85e1c840f01da251807b404078db58649abd4e1ad2d2a67597b5135905a0d9b4de2067126bc804e4962f869e50b252b859132a165f287836a36ced8b08b060f282822ddac7d98819abb47bf80f4e48453a975e29e3a634a57074187afbb1d601ad5440b59d99f652290033be1e4a758532844a494e14eb461c51d4470edd563fcc103b1ab5d267cbaac8f3c37b1c67e341c248ed7c12f35f63c5560922705c71608bdb53a1d23ad9470fbfaeebf252cae4cf35097004c28c14432ed77e544e59a4876ee5dfe28f7d048018742214beb25e5dc970fbf82b1e8848032449b8effed408b6031011d334d0f568fb0bfbc9d64e5ca404d3e0dd7603ab29e2aa7942fe6c6afe0b6ecec00d2e56f6f593e06b5c2d44cd345bb5d4caa0a664825c3c3b62a395935576d653b96b8fd34efbbd331ff3e9122da01073acde1fa809c4dd467c191283ebeb565c2ad94d135ba7320e1828ea59534cf0de4c8c0839c93241e73bf5a5d92f4f4d7961e259be73af759fe830393828b6c52cf9dd7d315939d85e80b7d8269bc85147f9fbb1e5236aa82aec66d9016a040972b264850d6960a57e6bb06e6cecb5f7320a5029e5804f088c897180e08c46661e72b85f89e53a42ae890a94551f4298016252ccec590c269e0595803989efc13ea56f79c1abb77fac1f2bfc8384c77952fac08ed2adc424edfd014f4d679c65fa2a59fb612f00e61c4800e5e1c59a8e245c444ed7f40a5e65abdb691b106243916d126495b9e04a05b9a00e8c410524b513d59e39feb8ca4b40bb02237dce7da788ddb7a824d4dce4d85c151f8429a3af97560c02a3ae38471e1cf780dc29d230fae4482f9c2310a3645db94f8a4845dbc02b1589758ee904d0cc7fab724df8f3082c3609ae5bee639758ac875cd3a3d09f0e8ddaebf9360180c5d4fcd9c1c005ba645c946b9d25e8eb64d3328a6939a2e259d7145023b36e3acea992c4e62e92a903908a718eee56c4a05ddd0a2d2c5e87f23acd735b3347ee6582564e38deba28cfbd644b938018a04412b9f12933b92888ab78390a2b9e001d67e68af37d8ebdfac60bfd7a89ca502e65cd563d9a08cd52462c6639d7a5292ecc586d1cac614272b96b95f03fb54a0a45e85e3443fa4aada514051443eeae9ac6ce931d083327c9abe7f1fbfdcad2361bf81cdcb03bfca08d66825935440940de1c90b0b542f04813e795053ae9cce4fb762aacbacae722255b8640fd4b0212ff0cbba099149df5587f3912fc2951e09b4af8aa2861dd15f05eae62e573d30ade3be1a490ac64298ffe559da59af055239afd1dc500d44b8ae7c88b9b8971e745d79ba0fbdd544b935dcc326b5e03a5504021b90599a6da8dd3306d12e474410ed3361daab0196393d1eae0814ea3c16d27f0c09028f39e9231d4596c112ffd8276f56d6243d08a34e77911b6c284545b6affc55b91bdfcb6648ee38b406b4214502f9ac43a2eb209b72aae913df1dbaa67c4cdfefef70d641e7fba3781bdb5aaf950bc9be9b3cbd46410b59e1b806006e2ac493534b5e6f47ed944992836f99872b28254c99c830c0448ffb986bcfbc4fb961ca8131a262d76a5dc9581ee8aa21c7d4ae28b2c432fa3381f858fb1b17707fd487dd157286b6e3a5cfb38db22fddb8f0bfe1584fdff753824c79812c08809d4b05ad85c3f806366531fc1a9b196c2b3126b3c3f9a09cf3a2ca83936c7a23fc40fab855647eeb7dad35c7882a81d50db8f654556e35a241bb7f6a46da4f783dd94e7a381ded9ee0062ca0dfb0fe27ec6a0d1c1d0d7d2d4dd7c11c4c4fb77298ae1197425b2d5572181c1a8b36c3e6b6d7adfb72193219aa9d514f93c950d9f0a88df477d6116e07dd67d5d8d8da05ddeb9654a7af194cf0d20a800706e983e554c5329f9239d22455b00067a175e52f4ad3a78d660570f5ad24b084dd18040f513e0e153849d7dddf0560e4aa0be870b18a77ea2f13e8f1b8c577864220b5897e5644be05f758df1d911fdb29983bdc442482c09e26bec3b02f63972dc072f925a201b8581424a54378718ced1f3efd667210cea45a2014ce3207ab97ad330a0841c83cecd523c259ccf5fe0cd1fb6d04dc4d726ffaa7ecb2dec670d669c9f4d3e00c92be6d63ef155cf973ae2e1da13c7a38c52c948345e9971adfd4194452ad0d73cdce609f1b65c06d7d35a3689579ecfb07198953255e54de0f865a40d28bc36e09dc824f2ce6870f4870bd72aa70d6206f87a43b8671d3e0be13b0416830f960e3e7ce64b51bec1564adb2647ddd078cc6606ec8a409862826b7f3cf4aacbb751a33dfeea5625a023bfd70bc18c5efb4216c4c467bd8bdb8bedcbd0b99cb3cc6d0998103909c6a3bdd4080116d8a91b1ddd9256c84b5d3e55ff5cb03456aff09945a0d67fcafc7f21190600fcdb2b3cea46a1a7572216c6639b22b91096f0f8ac93f0002450634aae6c1f6e3e9cd761642b66d3e6b2b42e603fae2c7b8f45c64d70fe3073e7344c1473eaa281f1cc6aec7687a2071a6758ef49de7c86d38e1affa6b6038924ed024f99f20547c1869c20f79be324873cc16318af505e50b18be8478606b4431a23a356e0ff3e11c002e953d23c17fccd501c668a048c9433252999409cbe64267713db1be8f3abe214608fedb6a9107dee1d6ee76be7682aecec7dd701f01989403d54a038c15e47443ff560f336656808ce39e2d134b86415aa4acd3aaa8759fa34d39eb893c9e96dbb842a65a596f862cda6e37b22c72a126bc15f8008b11c59a63d935ba42a770d50552d74d1cf3c2517f1489332b11ce622ad51d98c4de30ef734508fac554bd8a38b8182aa297405aa48eacb38422c3447a306387cb7027aeccd2fe125070c3d5163ab6efe53e348ca3e8939bc89cee4f9b7815815acc19d3496547de935d05415ca76649373fa7c60fec015441063a4cab9a8a0415f12865d39a13857642e21543c71817be8aa617cce820c5b8ef27aafbdb6ed75813eb3135fa3e23ff841c8d93b44db30c27d6b15b436900233d10656b57be4a4a9da94683f4ee68dd050d0d8e036498759129b302ec22ce23a82782b5e8ba061b112fccebaaddc9b595ba376fb04c5ff72fa07b71c05b4f739b3d179e4b08c16f285a8e13078dd828456c39d4268bfe7a3367453f653637253c39971657d42d7f989448efe8e916b778fa4fcb335755024640253957f2e6a11465bea044bb709432e88e584e3bbeaa76c162ab3aae620fc0246f3a1eb2080ab1d6110e8b08b08b7da660e76d4e695e611ae7450fd0343852745d8ed98f49cda2facef0c93a731e303383ca6bf3c23c0a1859a3e4a21e5589aba8324b3c9fc68f8d136f5b99d00cd5b942362b5a5a0fc2a2bb012f53b1a60b20c2ab3c7a32172b5c13d08004105df9c91301f2423880bcf0cf674a4f402468f954df0bed366945d2ab1068bcb87e6f01f80d4a3c31285a00ad0187f54fa38027ad36f67261c9b31eea6bd3d057767e9de680c0060f829a8454a55736c3d19e345c584358e33137f8f940a1537b93dae31cd0fcf1db9f659a335811976f9497e6e55ece71c3c8199ba26e569a0f1fd61b9816513b999ee70e868dcca5716ded3e16d4f91110f66ea03dc9245c96bb4d06bdd21b06cbe05b6b124cebf51a30bce561a86e2c17f42d61f8d2e7d6762fc658c74ad98bebad1f5ad2c8ad7b2f2c910b651e139bd86e5de29285fff890e628b3dc8940629fdc3ad5a6d1ab3c080758cc457ea331101b806a415d453f3725742b5385bb7fa2a7079a119378af58630e126426208497156d4bb8e1bb5e904190e42075958276cb7e4cebb5114a710ffdaf776bf064394dea09a748c975025c6869524079d729768be9b9ca2fe17f2dc8cb2c838e4a5a721fc62f103c9baa80ebb5f51f776ae90426fdaed58a8b6e7675a98983e7f1da7e8bf9013101d2a9ab6840827d5521e4c1ad8af7501e0bdaba2cc83ed8caef0b856d963ffd65784ee26ba07b7da289812ae678227a50862fff04a467b5ea3074fac4eb24f47d43ef9c4de994b9a373c231e88922ca32ce2db4692834c2a26198d0010cbcdf3c2786d79fc336da82c4345f39bf3a91e4e914c48870ad9277aa255e514f6f89f506200a6f2ce77fd6c0c1dfa93c7c9e2116977bbb7e31b99697a04203c544809b760dca1925ec6905e155b55de34d69a41ee9932322fc10041253a0ab0cb4c11d44b1c012e52bd755493d6f9a9fddc03b8301fe7b20e859a27ab6008f9f46a3e0440a5ef18759e0b343389bc52517ff2ce5345f26506ffa552479b473eba0cdfab71d32e496ee3917ce3ae92b083cda9b3ee9bce05847725452c46eaef88e7241adc3a644c3a1adf1950f08e755264606658cf68f8e3827683e23e51c1c5b1c9fc948f7db52b26c5ac1d4bfe88e74e236835c45c1c1cd795f0089f772049c1b410350415e66bd398c68dcbb5d00d1cd7c315d40bfcdbcac5c809ecdbc105c806ccdbc780be8bed518b4048c4d4d0311b9e83885b4246f7cf29b915a8cf3f674a84f8e06a15d6ea147ec6e4967ecdf405fac6f455fecdd48c7d8be81be58df8aaed8ba95aeb1be0d9dd8edc6dccc0dd5fd495acde1ce71dc25c4d2de72fcfd9e9a255a8517efb1e065d9006c9aa7c8cc3296c5e1a17b7fc82d50fe5d8f1bcb1921ba98166985c32afeb004bdf48ce8caf0b39ecc72b89179b032d55bdf7c45d3c567a5c4e3996570dfd676b3864af15621dfd86c134e8a21d83c88a8e14aa219fb249e0500a7c1b1bd319db17d0b5db1be1d5db175537a63f916ba627d3bba62eb46bac6fe067462f956f4e6c6dcd00de6d2635b1aa2a01b72945726afaa08b68dac1053d06fd45b42c84522466ade88c706ca8d350aba43bcdb6cc8f60d77cbf747475e3296774ecedb7d4652985838dc6361afeb02a973cb6f7c7a9a6176457190097fd01cb29b4c541e70e5d40f650af32600432bcc1596014ede954a6fc99e7c364dc6b940f0c0e0b75d83ece687f97079dfc1c984fe86a003022efb03b9790ca3f4697fe780db519e7360b8a31fe3bd49dd8b359616c7b433c1e34ae18c16a08fe856ae3319fd711e90b8c7e0a7a027406cef7d5ed6205edd64b71cead95b0f97cc9de1d1a51057f3a6e50f05021f724e2f145c81d3f7aa718cd695d672c2233ec1d5d39fbec896d38285e611cda1e08858a5cac24520a82546405170a2b9547913eb5183a1d9eef0fe94b3825eec336c9627814f38136eeb95a946de20ee8fc45245fe40e2cc339d41db826cc875b16c5a406f28d699d63f63c6c8c45c2f9f64f4ec8525a3dff862cbc699a0f7e07015082178ede2f748650f282f7e4f28c91cfd4280fe98dade85a74662c0a89e3fdb759868f683e44ad15a5555e942c94462acfc0d46c0a432e557d6df282dd2ecf1b8b8403ee4cf16f0fee04c5afe327f6b2c50166fdcab0384c2628cc0abfaa8df3f532db239cc82f350d15c3286e808ae31c74a4cc65f2aa81b27b9452f017d0d9217b1ff560bb63b586ccf17d43c70e2fd2669da58e1611eb8a97e21f983b5231ea4a1ce7e08edaecf0a68ea47e66e3378794deb47bac503c011febc3b925ea62c6431dd0d13a8810ccf690aa5e042efdbd057e86f2f972733a35029ed0ca0274b067cb40414f406e117e07d8b22ccad25c598b74dd95480f21c495b849f9f65af78632bb7dfbc9b76f2cfcff6bdeb7a32603f23401f346a1964df1181347e697bd6a5924d400b7613d621f0b2374f203450b9c48114c6a905767a8ac06b66b7c6c7b4172be398ad36edd5bb808e20862a4a6334a8d4d8a8a1e9119e51c787467aa251f592f90a920ba9dbc5844e86c5cc66b5fc8a0bde3a522608598a88a052a444a09664c2cd0537d5540f45c03b26e8a99b627b55d3210019fff95c75454c342f5cf273c8fdd5e15f9a57b95b465272d581908512a9ed6db6e2de732a8593c038c4f001cedc163e3e2a9b945000af9260c7009278dd79864d9a76898786b2c9496939243103bb18a053431b1a4534f6f8612078a80e0a04e8664b2a7417432f09f2a5c1c889b249e859d971bb8c15c3d6ef368ca739f1d9b0e00673c34f01ee2fca9f1190e22dde84ba14158d76fdf19db854fd4c20cb60c0046e1a51f0c4b58aedd36a8468d7543e469e88cc342c57a6d5d42196c688274e5c85c5c8b29fcb127aeea7aad2f73265950fee1d44597608e2ec45451eebfc61bc7603b99f28528bd7ca9a25ec4359bca2e6ddd249d871c4892d6bcf39e06b950a967082764c4a0d98036115a731bc839f9213186147303cf8aca73ce26844917d5ba4826083e5e8c997f593cdf9cdf51eca4c3d6688bb2c94618347fe874d96df80c976943fcaf5d235f0a8e670c79c329147ad7f9f3f52bb27f303183b2fcd0a3b278c21166033745b0c0fb0c5021890c0800025c7b846c874ba3bd4cde8370575be1eaa8c86d2374e2ea291b8316c42331a9802050ae21489a318ad81048d61e20b2a869607f0831eeb67a2f7b5fe50152edce96fbd581273ff820627124322268516b8d6970893410e102846136fef8f44741fd5d2cc8ea40b92e11c921c704e7b8431d3a1dd2c6fb05b25fd96bd7dc068ad1d99fcdb1b6260a53242f9bc5ea38e875be93c9dbb2b5ad83d82924b3a3536d45a6da66ad535e62811c6f49f7cc560141dfe30c70c5aaaaeaa31c91e0a923104db6b9823f8435f0d6e8b5aa87629b6629c74ba34ece6203182e1e727870ec756909ee92d100f4c2ba3a47d641a601d6ddc860e7d31a0284898b2a580bd8b05321376bd39e289468467c1c9d8e594be28891f0085608c26fcbddf62e69793f56713fce70c7aabc9fcf36113b974a925b44a2c4d5fc147a310f0c34ee3032583a8afe00abb4a8752b5ab6ff393461bc6e51b570d2b40fd58f5cf69efd13b71874af4d805b2faf79c129aa161aadc4794c3f5f4f257e175f32010b7d6368370eab6adea4ffc5db14ce1300bfc856cf36a905c10b6f2c5dd22883802b5656496c4bac38d91792f1d1565e7c61e1a5f2b846e3389ecaf31571119f7cfb09b2fedcf29503dd5488e04ca067dd25992d502da1541c6bdff59ce3cbc76b7065c7495d233820f784c742e1b76e70cd13b19dab1b39564e2cd5e2c84a9c6051784d4fd935e5ed404b22c96e3e196b7b3cc94d1dae28ebdc1682664e19eb0c6580dfba8e66c131173a165d0671888fb5cec3aed3d38efcd925fad1eb8a3bc06173aa62f5b4f036c814445724cf38b75421528c64708fd03cc52f13991eb4dd2a68103f58198d63306d2a0b6ec00af40c74ff99c3760bc06beae178a91a55b9c96efc1afedd3ed77a24cd88f02b92aa29279683f4ce564d119bc186d82e06870537c0e506b200d0c10c6415aee58e8cbde429efc5d7239dbfe1daf3b6f642e7afc4cb38fc0cfa6f40604a50b64e8355fc8f72bd9dc1a8d1963c1a8b975ff915e0664f3e7e8b9f90b414aa13e63baf10c188ca0b7652c28f74b2f9f6c30c7a7a05222be1ef9582ceb1780e79454da2986e850e82a9a10df530a06dddf25381694da5a128b0ddc0a1ce3b487d4bff0a0a87b3c4dcb1a754c3e78bb1b80204d0e8e9b499374249a2de82065d17508374ffa096ad1761c79d719d0e304c9d9b375712846a59ae218115173e7796d969333a61495e1efd9669011d9a8938c6d82a13990a370bf9d34c8da9926868eb8e3894821a076ecd8b3d6bf9c28d0f388c2cd8160b0acf525ce1bc1186a48c85a96ba1830af9564b5c5a51a2a24fc58dfa87cdb28aa78a9aab01ee0b2666842dec5d5653099db951749073738703e952d8695d52337b8f1bcc35520506f761a9c2483640ef916a2a969553389ed7feb8d2abc0ccd88dae7243be52953b68f320a4107a342061b695b80f7964b3f9e03184b90b11155ab1c4580aa65d44621a4edcc9a33cf630a01c43400c0bdd2e31a98cf03972de13355c20eddce33f5c84c2c4beb27b05f638fb85d085a23f906d4d53969ffca52d170485aa38ee115782c52912592b4999788d45ed6d3b2235df482008eecafe30bd28a4e9473c10be1f3710727bcbb4ac34f3ce737c0c14169d40db7e848aa0844dd01de115733a793e164ba4d40a23cdff3c997b6782b13cb2ee696f8c0a6f0be470a000ded20f98b905a07bb0d7eaf885f4e13d3009b21168f544a9430b22f18fdcc9823d4f90d0c1d98ed6eebf7d813801de2bbf66fe69d8ab8c31a536b9321386f42d084f306808b30de21075ea154d3a1e3cd6339cd4a4103bd40be7500d2e5dce77b237b039f1fd37582535ee85f75c9fe118668197187f9d3e9f7c35c764ce6ccbd59f7d7c51be92064aef028fe63a1a8442e57fb6cec19ff32a680389d113a0ce40ebfbc3ce910c6aeb0de101a5ebb315ed55cdea3f9016ed3c357302afc5419cf6b9b731828c2a2d53c4365bd56961a94f4798fe7bd0ecb3c5484a21e7034116c371fe317b7b75d57bcca67c7fe5ad442288c48655c41e58bd318fbadddce160bed1175e61bbee686d5de3f26fc126ed3960f393308ae525c132532122be862976e5c0790ca7af39475ba0f5281a1f4eb242d6313572c922ba6a2a469d78282f58cc65aa262c33592d8b571d6d487409b33e9eae2fc774d197dc4d7ad0a74b1b16ad17981730114b70a4ab5b0243fcccaff2f12b63bb666273f6ee10f6d7cca8ff247cc1575f1fda014af2ce5b4fe81b1523d85cbe39a9455d12defa2e0a0e8429c995b6f986e037906b1f35bbdc6358838911d2a8013b86ee18c26b86cba7284867710118fa7c3942f06115369e86046ce6fcf2603f0994364ccdc1a01f3a3da23a1e0b830395c14cd05beacf4f91d7ef3dcfef3e238200fbefc09fc24e7c66b4bab739eba2549494b71f0e2e5fe9b3701d292a8c53e9c603dafa6ff194ae734146a5254f3b5995571dca67e428a41afce4ee32271321683538ca4289d5a4268731b3ae6aee7e54e1b0d85f6ebb17ae25c85f2d7c872852f12364ce929631eb8698bf7ca884888abd4637dbed327898e589d187c0ec94654a984159595c7ff4a9e1e1b244f18d7b5c8f504599ac2cb5b7677a415a53a95dd117d31f798dc415fa6bb46a84f9d0a1daf6bf2c7194bcfb00ca180a95c018bf69d0db2c2eb69d394cc811a014e63a38ae23f338a97f160df0a5033d51c06c7282259771541c2a15a4c490db11ea475c804833c8d720c4901e260546eb12c1c86eb17df02ac50e71656b77079419b6263f601766f2b69eb08d21cbd2f34276eef3274b2b7a4a5fdbc2034b2263cc539b0165521b7d5cd68edbd15a2abb7133659f445987021b891e2d0ac1866a8d9c1377c91707f23b7b70afeb0ab438475883bdde820c717a25515f97045996732d8cf824b99ed6351ce3e83d261aa0ab200d6ebd277c50b2751e2c778a2db8a22ac62fb84a430ebf0821df0da8a3945e9ab6eea835eca92bca6d9c9448047263dd535be190ac2a8b2ce8c2099c9e03db70ea1eec2391b8ed3b82205d3bb2581cab675527bf231596210290ff258185e25a0cff3db700571ce35417120d6c25ea6491b6776e959adb71c83ba39cf778713ce5ec802635977fe7b41724e75b8ef8bdccb689624843c9368a1e38c0be9a087b1c76a195a0baedd68c84a8586a6e9c023a12dc4a04bb333a5f7fd13835ec23409a09e78128b1a713e485d273f8f69e31f3e6bb879a8d72df5b00b719e30dd9c117ce7279c0ddb8abd12c717deccf20f8a8468c4c7c6a120fb843b9eace9276015809212e2c3e48d892951664c1f7abcc853f16c013bd252034b1c25d5f1330be253f14dc66eeb6dea15a157c0b8aa4ef51a7f19edda3d29dd09694b0c93b0f3276389694b407b1ea64da547d9791ea2d0e322f4be680cf1904ed86ee66c5f1db11201a301807573e5abafed22e1cb5d131a3492f783e4cfeffba66b69135bcfbd2181ada34c5437eb6d5ee1107d9582804ae87c13d056de61933302b357f5f67c579b11cce638fa4e9f121aa63e7c3f5679a08569adf019923003f4ac9e84fdcd8dfc1facd3470bd01b5ea29914a97bfb477e97f05597cef3214a52cf514fa0f6ec7a7f311bc063a078569076996d4bf3c44682105250714fa3b7ee2fdf7729db288e853158f07d9ca1c224e0c2fcf77ed7db05814fe2ffde4f078c5b4dbd95f7878d3e6472cda544c57703bd09da89c6af0ea0c2ab0ab74b4be8bf6fa8434058699baeedb65631b1474b834e8764902a4d7f936d890a5684e208248c05ad99ebc07ec78186ae9f8a9f898e7103bbf22b75996ea697a41b0afd41a4096d671bb4fe5e1e8f4ac9893b3165d9e12c13ff9296c5dc7b73e8c33207d76a251d8f188547f36a27c05fd85ef314e4f6fd8032af430ec67667bc31bb732579da616780b8f0ce5733559a76f6de10b26d05d1e40a2eb6edbd0ab9c6f5e51f841b581aa067aa7a31ca5639e4d73604097903d0156f997779375fa1f131940279116f9f2afa4966d816d7e39b616c631ca9b83061bfc9b9dc47144f1dd45186d7d57b8fa600fa30a71a5ef6f1c20ca4eb41dbafcad56b0d6218f14a232823a4f875d9b2dddd0871be9f235941a6aea9fc9adca2e391c6e86c7d3204db6cf91b34c4b42ffc1f046242bef685a2e59c82b7f02138ab2b1eb4a07089a1af6d576048235138714e25feffa511fe613a4a8ba2c6b038a82a12884e8d7e0ca34d0ce6d822e57c76e8816469534dded8fa683aafd411ea2ee009c63e04af895f55af97781597653b45db3bb8945e1c2a02c8b76de9913eb25cd030e0a847647ec1948ff59f6104b5e1588babe1d9b52903e4a496b85233677cf5b91db9104845a4727c6abfd585d0ddce6022262781f2ae85cf44e65f9c2491ea52cae68912eb2c56541572b42884fc9add83d056b3017361ba24f611a2fa921837a72fa470536754119c4db45c89c52e14597f4ca026cf1f78dbe128dab5acd562f827e20362bdcc64d73641a9a6255e8481e463ea7c8faf9808b368146c1f305e14ed3598e1dc8cc5ab4e51e903667d7ee98b0ea345c7900b9f0d173271602c9dd6fe66bd2c2873f9ca363ceae416cb339d78d8489d4d090de393b0a4f6b45133310a0c76f394eb17c5439c5eec916945da11fbc6a21f0f219a294cafd12344e4b0207c489eaf1734cfbd14468997790cc60e59ea04d7a9c0d350e2c2f1fe5573201bf95d39bb0be9b899aedc607d6815e64339577c98c329910237520b46d0f25f1c1258bde78e8f47fddc827af84737b4407e366a504c9ff9b59c96ba0f2221a821a937019b2f04c04551f9306a601e41a679c87aa012cf48edac7784d17d94c7568d859dcde332ec729101520d07ee3740341c7085200079029ee486a7d6a1764ef317681277175bfd5b63f3ebd5da5050dc5a7162c9c11a4083cf409114ce0140112845dfc5db094a1fe59b3c9afcbd436a8f10595432213c2c4f15c0be9f2779b7ed27c50bc83f1375c443ca719a29dd4de49d6b38e81fe8bb81d43d414717c35155225cd3d75ebdb3834871d6c33a43bf9a095a4fd1c7cae75dd43cfdc1c898d09f4bf6702a201a0744fe7356b1a31b0efee76c18505e01f15fbef80b927f0e5c0137fc000c1f0b2ffaba081f318fdfd4fb73861871b408ffdbff92c43c08aab75129f47ccdda42e4e0740d06420c2122117f1375155818dd813460591eab90532a0ed39338857e433b1dde2b5a12589cff15c17f5bbd892c7108c3632d8168715b8b1a8d832038c41dad12ac02ebb355c22bc13cb84a1f66dbc3e45ed7bba95ab9be54c59a94997c03349473a177a5169a48befca6a3f1bebdb64e01e04f7ec808c2f1688a5be18e134b1840ef8651112d9d82dd06f849c8f3a1e0f97b45940f601450e17edc6f9a7724d24f0cc1175760217d7973b50708d4910504c01ce0075991eab9144207e7780d2eeded3fd2d858c558656d3b1d58f8da2f7c1eddc3308889d5341b8d663e30837f5bc9aae412fe0b5e4096dacc5fffed5938b3d42f0b46a16b30ea1531c1e2bfb64c77f4a4916ed42627f448f47b8733fb4f0ac29692568b331ca1e45ce83e4a8c8de501483287c6bd9daef48d60211024dc86fb9dc0570d27543d78ed1068d400b8d6ffb5cf2e12848b1a922971a759ee430efe80719d2abc131fd858449a448e4986059216623a4f446958032dae09f5606f96ca0bb05aed19c7626ef4b6a149fdc4e2806f65116d0324aa2c2db50421431bfed64b336ed62868fef6bde0190c81d0d69e96bf290d37215be296c030e7201b6729529e105ee599c2b993fa908f5e961002045b8ef51912ab325154b0bda723c3617c01cc71ce52f9098c6d20e8d8dab0f859dff6a06315504b9d2bdbd4228c5054d4fedd2c82d2ac84ef7d767490f606828c04f3c370da75a99f8227d38cc7515bb63e293117dda13193c7e658126101e2f7372d535e10d289c1d161383eea5190118357522540200cbf42eadea0c68d8ed5b7bacf645f16708fe23dafe834741d3ddba77b1583f7674604cd9e3bee646675db86c1e2a0959f683b0bb599179f82712daeef00633e86c4bcf477a4709f3fea8a38677da4e5b8ff14292f9cc3cdc120b0d48ef3571807926b856ae5aec708e7684df8917ac491a42aa185df99ad81a78d0c28a552f9c2c12b9c6714cfef945ca373d4a2a5b53bd6b5ee45c1773c9600c4a4e3f7a4149a287da2ad119be1d6fb06661ac5edc77fe2e4827ca8d5722463993b279c2d3af26327635f8ae3f5df28f3a5390823905153f06e9aea9b9d0d801493f7087a732cc7e242246c820ea69787f5ced7322722e2e1cb936eaef2a15dc6f87dc4ba6316d21337b1cd8a6c9e729b8009d778aad7a90a99347891595965a587340c7b136d19087ecc29343635518856540c1b5ee49a41ccbb7acb37b34f97660292d5132dfda09ad4bc16212b9f25db82110a03dc0dc0ea8eec11228961b0623e6c7abf5e0fcc66ef0ffb8615543dff68a25066f5d7ac8323117a66333952a5fdf28f2dcd15b9a747b0a0cc6a53895e07bcea1317698dc3e09bb07c30cdb4b93b54bd440598000e2e1208a34653362084a9d8cf07f1a70990fbac83da9dc27403120c7822141489ff4b0edba5272e65cd9c0cd14268ca9b03dc19a0293c3e7bc0639d42351a7499dcd36051fafa0def165b487dbb38c6550f9e118589e54cba9488fc23e620ded72aa1fdcb1f553cb6f125a3e91775dc015d258b6b52832106ff8d799765382e07d28aa123b602ccc9f8d74a68db11fd190896d970d36aa886b007055ed74ddec80b79ae80a22ffec73618d426c359b9a0e87ac9c2ff32f38026f3bafb3395028cb9c8685ed4c99117d9fc58149cd4f642187aa6a8bf15a37dac43048bd0b786f661ec29112d4014d8d29f38814fccdd21e67dc3073c54422acdb2d10b810f44604148052b578a2ca1c8c68ca31356b18366d10e791e31cb480c32068c021ceec90d63505ed513b246664c06991198d9441c8c8ab1be3db17a0d12e699a982e92dc83a958b8397d533f528d01c48e5da31ec2e01eb24a451fee7592e8cdd4a1041e4d3d4a31db5a69c6a858e37e2a5a63b1b082b2185f3ef4f97caa4955be030c32129cc935b9bf8874b3dafa4ded0cb217cf88c5f1124366e183e3682590e01b2dfea4516f99e306ec41a3663937973a38e530733f4f17bd56eb41c4706b5967271c8932e83bd1cbe970fb085ea9b5bde20ef58397237188a1a3c51abee98b76c4394f72d10dfbc46ba78c559a68f5c06a5e0f31a63ebb705502e5b7ba38b933c80ce08d528bd73ee033bbd96141cfab275ba6e5d183622c66dfe06cb2a4c6f05f82117b5056912132cb3932dfce8d6d8814f2024acb89316d95b309aa6c5b9ad06c4e596e2c593ac042930e0065174d4a88e38a844a72df5370c821eaab76fd3d9f88a4ccc2ce38ee08b8e5921866c55f00e2b21643461b360003fcb8401273bc873a9acf59fe2f4fee6415ea83d1f055050159d7c41e925e6b636f10beeb9e0a6a81d11ebe406f272e57d54deb7cce19c100673131d65fda2c257f1fa32e6b4336319e6012f5b04687ced9662d17845e3cdcb4101f4e162d6cc239f61878c7e75f6f71d1c3b7e509287b4bd360737fae388210391022a9164bb6df57f9ee25694b0bd34c77d3844924e0944fe2888588c0c7cad75794c28ba39d1a0d7986c2fb2e167717cbe82c30f62ec7e72632fe3f27d48a39fe2b1fc0a47bfc4b13d490dbd8de4f6908c3f8be2f3948c21f5ea4074220d41f751ae680da0947f9e3c49a208534e3f24d1316242b2fdf1297a82a25ce1dbe518e164f538897414474b50dba20a6aa689dadbaf30d2e49b1e72398fb11319c10b9bbfacea12bf1d05c452923581407a9f3b3ba902530e488d01aa91631fcb5d772883b0b865c2f1d4465ae2abfa1b84f28e7ad8c9339f1ee0fedf0078e3e37de07652b43b7d706e8e2e26094e913bfc34f7b9b1effa616e6462dfed43dcc58c3c264c37ab57ad9ffb12c66babd577fc0363ff357aad6f6f89f166bfe94ccde7d4fa6fddaaedef50624cf3b157ed98b1472105758d1925e6485533bac6f5ddaf233d02c47b054ea384fd0e53201c15750e423c51012b9cf1a21d2e78ca0c1bb0305904a819d83cf1c1062c209d1d197e0a9c90723fd040488e5ec89afef87ebcd0b4ba9ed4e6f515db93d6d6551c52b2a2ad76cafd9e7dbfffddbda59452063c0f620fa60e19b63a55a92f4f52daf5e7ba4659d55256e866a1c4f07255aed092a55259eaea5cb14e55cacaad562c15ca629da4dcb85a45ac14e51ca198a4daa85a452c74544bad2a7465aed4d12a4db14e152b2752ad4e169fc9908d9e5ca57ad84ab02757a8aa472dbb34c93245bc072dbb58ea4836c4e394642203bc117f803fe211204a7d39800ff204f8027c11b0d797315fa67cb9bf04f200f8003c112f0058cd8b5f420144c7d77ca9e3cbd897b02f7f781c9fe381f81d3f9321137ffc1041fc8f1e1fc4973dbee4f136efe36f5e889fc9900dc1cb1fbc0c82973d78d9e3c50fe27ffc105fc34b1dbc8cf112c64bd8833ef63abee65fbc8ce1650a2f372ff78b3ee563fef528bc64f152c54bd5b31ee54f7859c2cb122f475ffa923fe971aad4ae7f03e345c0d9f51fb16b5dff01d0aedf0894b5eb3740aeeb3fd9fbdcb5fde84659374a1166d75f80b4eb2780d9f50f60eb0f52ebdbfcf4cd8da26e2e00b5eb27e2ecfa03c0cfae1f48daf50360bf1ab33f65f3736f9454b4f710fb85f8b5ebffb1b77ab3d5ae3f88bd531fe9e77a6c949acde7ba7e1efb77ec5ad7af63ef1c10b9ae3fb6798e6d6e74a3e0d868d7ff030adaf5ffa86558094e49265abbcea1a2daf59b37d09f7c6976ad9246b9ae7fed7a6de55aa029ea8a89669888c5998a2d4e50ca9aebfa4f78c9c26ca92d6a2939166b76d9324cb7d016e6a862b2504bd0ae5bb59512959345ca026dd5565615166976e95a0b6d61aa982c5416672b6d91b2b2e0292a4a653569e5485aa02b266845e54c4c12d554039d62ce246525394d2dcc100b9544c56451e32c50916cd57e65257992450a82916b51595217b5951c0cb5256d9d2ece17288c3465415d982f5c6a0b4bcdb5be3861a02d3596d3957b61c2405b6a2ca72bf7c274a92d2c35d7fae28491ba5216d485f90286da92b64e17e70b1446ae4565495dd45654ce8e92dbe7ae3d8ab2f21a8abacd4fdfe47b45495ffd73e7b8b95194af3dc9fbf0e4afa35114f122a897dd284d9ee6c9ad86454cbed394a8bfc1775a1621791b3ecc64c89e3f8d273f67fa99d2f43566f89ea19e6a0a8cc9579c92ac087f191ab91acfc5bcc83867ac6a4e94ab9554a9b4eb3f998196c8807de94595a1da3126ca0cd68cd8ab382a23ddbc8c3167a4e50cb3e4312e234df192a73350192f2a8ccb4067ac5c95f19293519b919b51e3b99755c639439d71ca50614cbea2d4bafe1b35c348f89b38cc09a3c6385fcc975427c33887a9e55e509735860a73aa31ce17f325cd6518eaa516a396ebfa73303598dc0beab2c650711966c25f4e983506eaa2c65861d218668c54e492ca3061d218668cd42595f172c2ac31501735c60a83bed462d4b24be7629cac252e6809466dd4728a584cd05a922bb9d446304e518b095a4fb9923a723945304cd07aca85d4918b54e462729c92ec64c529c94a7221f545ba72c18231533354d37992a182f84a72aeb91acfa96ab9192b5765ac2828f9a2f2f1c91893f4e48c748649ca48398a7a314d4e923a9ea19774ab262b69cc855ed05de339526e8441432fb5aef75b59e94998b56b1e03ed3ae6adece4c9186bd7a33a7af2e544712b1b711226e526253286194372f1648c743c9161fac0857810a64bcaaaa57226f5948256722468ea349d5ad2d64982aa6a2617e60946ea4a495a50154b0de5c57972ad2e95e394642c1f3718a88ae39464291f694b8de39464261f392c670ac729c94e6f65cf7da82fcc15f781669776e5bafe206c1906e2e435c93b23efc9e2a115f2d26ed01bdb0fda4d8dc54d7afbc0f22608330833c37ed03c9cb438909336f771d2eab45869e1bf38c577317bd78dd92a83d8f9179cb439e2bbe0a44d43efe264ac4505b4ebf781665839de547f7a1fb80c3bf153ba623d889f6ee4d07de3bc61fac811a17c88ebf7a19ee30d2d3d6dacfcc67aa3662387769df222d3c68d34e64bb91b6a6d7dbd49daf52f21bda1d2d468561be98bf7d4c68d94e6ec680ca7c9f59a8ddc0d942685d39834693f6dac37d61bb51b391ab4df386fa0ec9bd9be3177103bd9a5ff072dc3cad5af5e7cf15b70f24f7ffa154e9ec20f9f052747d0835e85d3bafe9b9c0c5bf1d5aa7476ad767daed4930445904ebb7e9962cc4b2df13276c2d4533d1fb6c6c0cc520cfa4a47bc8c99d9a5612f3326554f313918fa5a4d31b5170acbc16a2f9298172c07abbd7231e72b2607435f6b4ced055b6356981983be522be4f418f584a9b0f3f55263521396be4c98f94a6350d81ab3c2d0d70b8d89c9adc05ac06aad57cef5aaf1d84963ceaeffa6766333c129c962b135edfa4132eba9ff06cdb0d2ebbfb965581a4369982aeb3f66d75f2b7d2ca571e6ba7ed189964adea484a466a2b1ee2fcdd45213d4a762b99347d1404dfe4486bf894c4e464df1329643f192067ac24b19d38497329ccba825bc8c95346a258db59cd95c262d63298d9346ee44e132680ca561d250674c169789c5561aa9ccaae2326749668dd5622b8d54e694a9cd983194864943a591934167ce584ae3a4416325c9a433b5989589662c6765e18c066a659fd3b4b21529a3dad4b24bebc8e4bafe1b33c3ca207632ccecda87d44cbb7ef486a6766de34ccfaedff4c1f421b561a633e85953735dbfea836ae39c497d386b9837b35c2d6703edfa6b688d15f561ad81d6587d4067561fd6995c8d5a8d9c0dd4879a8dda8c5ac3875c0d528d7434433ea46fc304cda022733c433ea86fe304cda4a27354430df9907b1b35d08c5aa3562357f2a1f628889cc991b88cf4640dd4ca4251fcb0c65a927d42ff419f5bd98a97ffab277d3889ac0cc477d066d6aeff378f74f3b86d1ee8c798513a73a1141597109aa21bb5f1c67a4a57a78df5063a32bb7e90ba845a6823d7b5e846dab5eccf34273e1ada50451ca7242b9d9ebca1763d72bbaa91384e49164a579c924ce44be03a561b69c9c32b79a4eff296c7ed6178c9033dbd8c92872dbb74106a8681380f7506275f647012e436bb62703206c3c9f185933675e1e4098614aaa09361fa2d4e4966a2a733d7c2c96b827e4cbb6ec25aebfa4326982ae83fbcc4a19aa8ecccb170f2d240ff9f7ff4f4ab1ce84f67e9416bfaf9919738d21fd69acc94bde0e43d3fa1177d488a5af862f9c9954b3021cacad1289ac99091788963c4cb1fd29197b255c4cb4ec265215ee21079f9839a5dfa435efe606697fe0f2f7bcec465282f71a0bcfc21c7cb1f4e5ef61297b9e0e49ddd73045d78430abe70c5a9beb942736a7e411ca6280207e46007335d57b5339d83ce1426094c2cac68ee9fb44d5057e609bd5480c0033ed04111f020b332d0937609b94f8de4074be8008a1764c10d322bfb98529c3e38f1861d54c1090f684166653f6b42aa426b82131d0081085420b3b2d5b9a220410922c0011172249059d989d33a69a7389950cb37900313823085327441666520ee636697a076fd3bd20ceb817371d2e2722d4eda9c4e0b4e5a1dbbae70d2ae3b681956e29464331932f1f7a0ca8aacfe5970f205047232760aff14fa990c5948095ede5865457aa870d2e6f4a8e5dfab7d524175ac1956f638b34b7f8f9b2dbb40df83965dfa5f72dea698932750ac8f53d099e2ecfa6d7656ff1949a31eb3d29b484a4cfe9f89b759330895522971af9085ac175f7f0ff33e57e25e217b949dc27ff5fa6d74446e53051b2ad82821d29fb26dc2c0b70d186cbe6023069b31d890c1c60a3657b0c1824d166ca8b029838d196caab039830d1a6cd260b3051b2dd870c1a60b363639ffe153c8e9fa7146d24ac19482adebe7717aff62e8231a8d7f7afd3c6a20d2974c242526ab07cdf2e904950a559f4293cdee0ac4fa259838c9507e09264619ff25980065fbfff5f330334c897cc5154b30f1224be1354f68c96a9c6061f42fc1c4cb6aa4b030fa6b521ca35f3fdf355ab030faf7aea1c2c2e8ff5d93050ba31f65d76cc1c2e867ed1a2e5818fdab5dd3050ba35fb56ba06061f4a7764d142c8c7ed4ae918285d17fb26ba66061f49f76cd141646bfc9aef18285d15fb26bbe6061f493ec1a305818fda65d13060ba3bfb46bc46061f49376cd182c8cfed1aea98285d13fee1a2a5818fda25d63050ba33fb46bae6061f48bbb060b1606e6fb705b0be3f9cfb61606fceb82d1a666e835e9e95b2f380a2969a1f0845ad77f5930fed95528ac5dbf55698c8c7050463c8d5bd085d0aa902f8f5bdfb76df670d05afbf17b3339a36ffb7adbae699db44f04f71cdaffbc5fae4b8cefbf4f75fd7a8f5534a37502126e2d272001c50fc22a0bea766ec26e6f9748d8b7a28d715db4edc8105ac105a59f2209b81ed3ed1449a8750dfadec33bcf7fe2cdf79d87087e22587b3ecff3405ef775a0f73a1f60b74311e4bdd769de819cfc3ea28ecf77bafb72741f28fc6f7fc4fb207975faf720b833f73f0c7a2bde90388949dcc110748780481068d384b77b9248266ff7bdbe1f4fddf7bcfce8a346ffd7bdd775a4f711759440efd12feade436202bf1bd0f7754fc2bb37794a1edc440fbbddf5ebf50b8260bf20cf7b2389dfd975e9deb3b5eda310c6fcc523e2e1f78160286a10e8014391db78f487a0e6a9f03b1afe7d3704d4b5e7454feaee91e29357043af40bf174fd341e91c8c92b82de694e56c048ff1ef49ee785fb7a3ddcb7835dd71f08eecc87660868086808e813e62e8448b6f11e1481d7718d5bda653f9c6be453a23df1bddd9bbcfbeddf6dbbb5b6bb3a187f68c59b0b022fec6e151d37d1679ddd20b82ed7de2a726e81d63cc44fd985df138afef37a6bd8e83f1f72327cb108a21f3dfe19f8d562798989b78a711c41af370992a01e66310788875c1841b2457a2beaf86c233dcc9dc42f08ae8bf834f9f39e930abfc4c77f4170676c17c5ef56d14fb88555ad0c0bfd8baf5f872115e3e7456e3fcc1f11c6d6095ff126dc1ab7f4c723e600f198f103fad47cf0122cd8057e19f03460bb0db894308ab4e088cf626540da08685bdb126adcd29794e16d12066b6dc22d8c9718419d4706a18d8d24d871c70f8218bf1410da9e49ad8558999dbb6801af5b99246eae5b00d4efe36b760adce8f7b169f66b9afd3e7ee1218416a3422aec5b6b04df21c2f0bb91f4e105dd14325c21958521de258ec1084460cac2708fbe2b471ecf7fdff77d445efac561151dbf172f7f42856fff798b5f1f5f21ad1af3c897942767f4d53f7e79bec57ffc3f94ffbeef47bb0c7ff4a1b871daa9e37d317f5abb64fdea471be7fe406705a9ccc587773f317a713f818f8061a3ef1edf461b4f815ddd87f7dba8db11708e0e46f1591b8aef57bb5c3deb5d6c28b0b9ff7ef7aeff3690d1abf6bf6be399b9c26f37d52e553ffa4cdbca5b0bc336ebea7e85df1d3d7c6287bf9def92df37c72709c6d3777f7740df85e1e254786ef1169bc5c653601508e29338475c115f45fc8d5f80b2ef4e7665d7c987012a8a0d05cdb0d2e63dedc337949c0cf33cd397d8e2425f7e78896d997669f8b62305ad874dbcb405c13410e5966122bb7372737009267d892faee318c63ad98567178781d6ddc92e9c83efed0178e796e01bb6e54b33819826cab36bb3b8bf3a227c6f1f8cc56b774c1e3c33c1b899c84fc4101743acee66fa52c4854a78c8d6f19b9474392c5e76decda677328ec4750ee9cb6c0bd13a7e12cfa66f59a7cbc139227e8249ba9d939cd3dd4ebcd989a6e99cd3ddbc99d67a966f368deb76744e76e19decd1ba0ee7ddb42de3446c6223e95b48e724ab68261ead0493e0ced671b783f5ec0455c2553bd9a54aadcc9bc96a362b4f9d8e556b76619c920ce5a1793b2b4f37439d803adfac6be1016927342f07b4b540dca7333e7e70a7e3677db62f6784ebf8474f07cc013f5ce9b9e0dfcdc381df67fb723e9a9703da405c8b7f3aa0ce37eb3c33d0430377bc1d8fad9bd13efc488814f2f0239e221e0f5fadd985417e04043d0ff2954e76e123df2bf1f9234542ff1df15e89cff322de7bbfd259ed645888e3679919f671fcac5986797cb566d84a27c3c21d30b4e13af672723a26e190f6c9f9806e1d7b701d93425cc7e1ccf4b9916c1e9d9ccfcec9c76682c3db87a602312fc3db47e74303cd3eb3f0f3b181689e9d1017ce3e209b27d4c92e1cd23e39a09b071786b60fce83ca31096d384f4e08677223d109699f9cd04dd421b191703d9cedd83af6ec80681d7f1815de4c3e3aa60fed33f3661d9725f8a0f27b18cfba6598c755e6c741189c04413e824e9dcacc9b75b32d273670c7dbe966202de599e9cc3a1dd0f6e998401c2d844b6e1d7f3baceffb6c9e872b3911b12a15327db8efbb79df49896833856e330f8413e59c88b790ed24b47302d211ddc49c102da4238666219c3813d1441d712794237a6ea28eb813ca113d3731340be1c4998826e68468211dd08e48bc856ca11d908ee826da4237d10c8413e5e89ce04a6ca6db279a7939a95bc7209d8ec5db67f376523a2a9b09b4f3e57834922743b38e55215cc72c11ad6371d6b127e23a2e5b90a24ec7249c14773a669990a11c14273db78e5d3c4e496632b2e5742c22e13a7ed1ceade347dd3afe919483eb58e551763a6e41c29d463aa5198b1f8da3ad85eb5d8c5aef1ab5f8d6785bf916249a08e78297a31d172f47b4162fc75b0b5e9256b808579270e548a71ccdca91051f6dd985372f4939a351858f3be58813ed906ea3143eca19d9c61c118973922dbbb048639166a8918d64cc21897444249bc9280735ba91e048a49b092eb543a2d3f138eb5894d3b189ce8f663fda3a1e691d93701d9bb0c69d8e53a111ad6315c987751b6fab9a8795ebf8491167a5d9855734d248b24e1b8a2da3fc09c5d6f1b36819569a9ce2833a1de33c371b0a3e8ad6b1c8a4d3b128e706bec84b928e0957bad96ce0ac635bc7efd9e918c475fc391d3f8a97a41d13cda453ca21b9b16a1966f224a69b4882ebd824a7e33729ed744ca2d371c966ca2129ed90e89468a61bc9aca443822bcd4c36d30ec8cb128e44740be97c661e130eb489b750ce87b4e3a1813aa2698794f3c17966a04d34dd3a2691cc3a3621c179bea4d331ad63d15bd947f264c9d6b1897bbe9cc9907da61c1391af504f42ebd8c35739271fbe22d121017f87fe43ebf83d3a1dffade3f74a723a2eb9752c8af8caf4a49d8e3fa7e3ffd2d671e84b5bc78febd8847a5cc725b48e4b743a3ecd3a36b9758c6295ec749cd3f1c9973a1d3fade36d32ebf84d701ddb3a6691ec746cf2bc34c165177e145e9e6cd9857756fcb4935df855bc2c99a5785982e2a5c9092f4f3afc64c2cb138e9725345e96e894a71237b999ec88787912795962cb2efc215e9ad878c9a734d1294fb7b264e4253790af4a3b2539349d1bcec466b29363d3b9814f9e66385ac98e49ce89f63d79d229c929c0831e9ec8010d9820b3320f0b37bb4c84a00b57ec5cb1059995853e9ca59ae060a0c082325cc18414322b13593927db10ee8082191d4e60b2763ac63b788218ced0021248817523d9c14fb26e1dff06c68b6d56817e555bd13c8fbb156d455bd1ba6acdb0d27bfcaa9d0f2fe2e1aa9c3d5cc1637a781190ab547006f2221f57e1bec7bf3a3f5e4495f37811954e76619c635166b6053fca4c03a3d69b02fa35305ae0eb14b866af80919e44c72bf0f762602455a6ade32f32de2755268aca3272713c23ba63c01dc2b4eb938dd593a79c9315adb5d65a99dbedd5c0984406c60ce858ff714a329237fd4c86cc64e2e5f824a62f89de14fa3c10b50cb33270f4b22d474cc3d293565fe24b3021caa00072fa117f420de7e4e8d09176fda25bd71f42bbfe8fadebff5ad72fd2bafe9030f638c9534ec734196fdb71e432ecf4fa71e8e05833ecf3fa71ec64d8bffe1c6686ad5e7f8e5986995e7f0e34c3665e7f0e5c8689af5f62a8276d6a737c78d2e2689eb4b91b4f5a1d1a4fdad5bc33f29e97465a2972fdc8a8faf1c868fcd11f498d52474aa9d2115291928a1721913ec54b243ee2353f4aa05463336573a52ff59f285feaaf515f5fea47734064d362f4e66e366970ed5ebcbee0f3a648e0dc63f31e81d5f1aeb7f623bb74ba5394bba6d452238a9a62a2a35d633e25973a6f3a5e35e69ab1145e716ddca3cc91fdfafd244651789123483cec612f3b8282f2e4cd719c922c85c78eb062be088bd58fb09ef5e43d53353ec68b1c49f122a914bfb17144a57ad21e49bd12a07f05a0f4b1524a10293878f0f852004f04014a25524a101fd38397b17ff5f85459e38f9413f811bfa921c38b1c19bd126339932143821781f19b5c76e909f022a31fc948c0ecfa87d4ba7e2169d7df6387d012a926e646a11209edfa1ba09f01a3505a3a49e816d791aa76fd0aa875fd0948f51f31ca85d412290d99a35c7685d6b5949652528e940b91cc500148662847805cd7ef6397d0aedf6693d4202435748e560184ceae9f88d18a53928d295dce8dd4ae7f1c5fc7d9354ce73526976b29bcec4c9d739d7a6aad6a73ecd68ca6bc0e5e76a74ef3dae5728acee933c5cc69ac47b7765debfa636a97ea55d7bc33ab1daa73faf4cc1f3c7735adea6ecd41a8269a3b6b31b933cdab8996bab5a6ea7852e7f4993db3e6c90eade147c20f9fec521dfcc8678df123ff4feada5b198c1f59ad9ecc2a3f72e265001ea7244bbb46ada8d78979a2e2480d6176fd0238394f72a91c1067d79f76fd38beac75fd6bd73c52a99a3a80e78176fd66d72a13480aedfa51b902bc102729ea0c002f556699424b548e972705e0a8b34ca56a28f5041d004799a9d4893a09c24fd6949a3251e8c97992cb2e9d4a512baa76629ea89e4e4c27f7e237b923af7f1da97925407fa4ace1376a76e923445e09102fa2c4bd4206057e2b3ba26300b147e227f014f824be0231188e2f853cf9433e022f019810cfe3cb063c03de01ff8087c02b005f0211e201f0a5105f16f105f8203f802f837c29802f89f812017fc427e015f00bf8990cd9007819849702e02511bc24e25f2f800ff203f800f012082f01c04b217829c4831e000fe403f037bcf4c14b1b5ef2e0258f87ede02510bcccc14b1cbcc4f1b11f7859c3cb9ad7f1c313e13739d9b5353052e0769b1cdba21f0363056a5d7f1268d74f0124ccae7f022baa4acd85fed82db366a7983af68a2a81080c11b263aba0ae5a8b35e5dc2b2904d2aeff0167d7ef8006d4ba7e06dc6c15d7d922b7536a2b03d82a0bd8ad550102d82dd204b44853d2d75e3911909276fd47aca81c40457519e1325b1860ab5dbf103b0505ed955a0156767e0022d7758abebed4af4fd0a35da76bd75f037a351dbc04739e14054d2f37fb5e28a8bfa6034d57afb6c3cc301ddff9e3cb1a10d591f3981e68f3d5bed5033de757fbd6eff45210fd721ef3533fd3433db520403306cc953ce9878e39921703aa250f3a4abd95e4a580b592a736523fd34b41d4638ebeef0cc24b8929794e02709c926c04fa46d00ba49afa5fa0f473aefa3fb510453fab2767a21f350ccf8f67fda461787e3ceb27f5e4c234343fe847fdd43c6a88a29f15947e4e7035c31a08a47ecc1c78e61a19baf0810ecc810e39d4aca56a133310c207ec60822b64764d4f34cdb5e14401167670a65a43d5d15a043574400e63b80111ce9c8542fa021d0ca1054b70832cb4d630f3a0c411b8a00537c852267e408727e8309391726198c210963881178c202399378260eb001d38b00659a896a2d65a4e35d1f464ade54ed893a9daeb49941af324ca4c79f2048d3d995a63fc463561fc0697425ffc26978be1373aa8147e93737279c08413290a76cc9ada75daf5d935da75adebb5eb5cd768d7e9e932d55ad768d76ad7b9aed7aed3af0e6b7081157978e209d9d9751556a84558022a4b6361ee543f267886351d2628fd9ce08aae2f105aebda030bd39ad0ecf1513f688a2707e33825598c973c7e264316c493a15ac3714a321d5646c2f16478f6e03825d98bf7203f31bcfce167326442bc958d9f206e4a27d4e45c01f020925ad2714a4d6a312540be445a4db91a1c27f5071ac41980af514d2b0e1e3bbed46f9296d488781ca51c89c9e3e6b4fa30516d4a50013c8fd24a72def0f2549aa865095a96564e7296a75c699296d44a392238c94935414bce921a006e5a53931293b402e1a6dc09353949561200b8494de142f01288c729c962e2c81c6ba0704dbb8e89b598714d194f1e5faa75fd68d73d445447aeebb77958aed66388ffe1d3ae7f5445ab8fef015a45e70f40886a8e31c521baf91f44536402c14b512dc7b414e54ad1e42273085e8a6939aaa215b472d129a2636e3441392eaa89b5711d4f508d8b50713486ab28cdae93702d3945233334d6c4148496d444b5d02a9ea0d11cd544b9102ae6509e1cd555f5a4e82441eb7e524cf95bd9ae11d5128ef27a724cad8cc595c8575c418a726f652a4e8a4cd98fc729c94626b9921049ed87077d693249acb5eb129504c5f1a411359dacd72ec9a5395e75d65e67d75fa202f1af5ad75f73aa0561d28324b7e36b46a829fdc1cb53ad34314b92728472535a9eceb284441dd5b8093d992524e9e8e4a69ac99a5d5a2541476e3a4d72252989e8076e328790c51ea724734161d4ceae412b8be902e334bbfe31b796a0bccb09c35cbbfe1217ea0bb3eb6f59735d3fcb45fa02c60acbbd625ca02fd2182f61ac654bae64514b17287f91ba982d2b4bce45ca5fa82e270c93c585ca5fe45c6a678b8b1afe62456ba70ece628a264ba49e98e44ad29a59729e8ca8c95aa292a025696d749a25b99292954435a1a35ac98f5b76e91aff81669736553f6cd9a5733f6ad9a5f90fda083d394bd0d22992ac2035952b21ada554ac9598a953655a4baaa882d09449aa2aa9b1484cb1943be552246e552313955582929c3a764ae39559d9f340330cc516f338255948955badacf43c7342a1df6bd7b9540dc50ce5562b4b75a29c6986995daf54562d8476fd6bd7bf79a95a732c5485c2e316b96eafd0ede372560924c2707f1b944138030d85077b617cf09661de6b286cb679082b6b65d7e396bdb6ecb29fabf09e97dae72dceca64d947c57b1a9c73ce39e79c87a8849f9d65a10af9421322cb3e1cbc716124433554432af0cbbe67dffcf127662fb332f008d865772a7fe6e06d0b16db9b6db16fdf86a975d9b7d93eb61615b3a7516410e6ef1e6feb79def356f481d28578dee296c62fb8d5b29f6e9331cfe3f15812ec981c12ebf6af1110e726845685d46acf367fe8f597b198c3e2afeb4823da8ad7f7e6bb7d3fcc209dea5eafbdab75fc9efebb49db3ddefd77d3d160bdf58a5b5accb153fac1372203527af0cb1b5fc29e17862016f205357afdfdb7be2d647c4fd34428cf87848cdffd284ced3083beefd39f0eb3684385513ff9d2c9d4773f7a3d1ab7eda991047af94ff69de2e6689a87871ca5e2a0ed230281fb0c5037b6f8a55d82bec4096d603365228722fc12073445126e321087c2f338621b96b0c9404f1136f703c8d799c427532813efbe7b52afa2cfc44df4ef1b4d2488e4fb38796fc2eee9f7441daff7fe45af213187f6669819866f223ec63cf933643cf972f7f8f8e6e2ad9819325e5ffebd678addcc701277fd314e62936732994c8fb5365971e669b0c9b3c9d0c01863ac7f86dbe8ff3689cfd7bfb5acb776b56a8fa74c3f7ea76922d5b7bccbc3f8f85e73b2e67b7df3bdc73badc9b1fbd7266f7ffd47d4e1bde642f4cf7c28de80faf75ef79af6c2c55b0ccba8d46883f4c17b21b886f73927b2c1553ef0165e8db1abf550efceb46fbff7feedf74d5a0477465b317e166fbad7de8f44f013c11df799ff36a9d73e7edfcca7f1f8a947bdb5271bcebcc749ede3feccf89a865fb1cfcf5a95cc8c5c3f0dceb6d3cbf08fd3b0a1ec1616c175b94f93635be561bbfbd7cbe25b86e1d5c5dfe616274fe4cbe0e44bcee3e40b275b9a93cfb2f9a3f0cf7bec99c60fdf5cbcc50a0bd3c86df09bf0d96285c5e38d49705d3e9e4ac13717ff9ccb3138f902c3c997960b275bdfc2c967c9a94428cdff0527c76ee282bf4ede6218be65577e9353c7df7a52f7eebb8e41a20efc423e4e5e51bc0175fcf8965dfcc43939e6f4fbef5b7012ccdfaf7072c4aafe3d0b95adc29c0421314797b2afd753f6eddef7755defeeebbaa76012dc99ab6979c869c8891c72ea23bf399742bdb6b09c66577ed009d63cfc5ef4a46ae4fc4634a619661a7d1ebdc747227d7325ff2c4e8ebde44d602ff9abd79bb9707652d3be2d3222e29804d7059fe10b7ed97e4970676cbfa0f525c551fc845f2432386ab55e4ca71ba92ad1345295f3af34434cdb76d30f203330ccca342db721e7702b57d16ab558ba06b5e8432df23c31deae75a8e056b6bdbd5e6914411c89ec02b7e7066388448391f8b5e5bce65cd6436e0386e57215d98a9e1faf787dfc12f1d013e25b19e843af121237386657d6b44f5f5ba769a8c706b8d006a9100b6cc0af929e82548de73f768a1a4c5183938f6db52151224104675bf2e7dc293cb8198ca45d4b2488805cd372fa059a665b6d48684d734327af6ded5a7d81838d681c0ce650030e145a359abef035f620c119b8956fec73f25c70dcdfbf9dd26418088e29088ea32789db11606177965df967277b87bb83b1c56265c057e9f9ed77bf7beff77ddf11e014361d747b87e056fe9bf5b63be835184f7afed2ca0cc130f0f31fb1801fbbeffb7060584d969f06bff4898f167667b9cb210ec29b0333f4ef2428db0cbb2dd083105259c75340ba2e0f89e51077f4efbd4dc658fae7bf3d24d64135be07317e7dd7f33cef411ec32d9a1a34b8f5d1803bf67dffb1612463b14c835fb68335d8815f1ffc027d1e31183e2406518f1f7cc79884ee570ee38e1fb1910e47623ad6effd19a1fdafc5076d8b5bf60566c2aeab630da311d5b7fa1dd530e62baec0b9dde70835ac8c106e80e0389e4e3e806fdf7e2cbfcc88bda847fc00d28306c7cb0cada3c08f7f80e0389e4edfc3fc7d6097bd1c1a6d8be8f14dbfffd2ef8f71b447881ebfe52d4e9e348805bfeeb3e097e866ec227e53d1786f22ce22e6f801c413be460f086e89384913e2de8b3611cff38345fc2041fe5e947fd1090eb156a8d18871901f18374113c19db92fa89d003f0efd6874c2767740032b737f605bf07b4dd0b0fd4df228dbf4ac5dfad526bd6a9b7c6a9f1eb58f805db8c70eee0ccd75f9017ec1239b88df9b1323d9ead88690e8f7f1b74235e38de2f389e2e22e15970ab6859fb4ef136e0bbf879f05bf2e17227aef710f9a172cfabb45a1178578ebcb3458bc4d20af143afecffe6e9e0efc1e7f107c2f78bf1c35ac4c3e8d264cd291a67081d0b86b7defbdf7de7b633bf0eb7e8f36e4b7b7cb3ae36ec51c9705b7ee7d15fcfa7ee980858eefdb7b47bbc2207462a6d1604547e9d70468a0a2db91fdfe6ed082e0e964df447e78df6edcad359db0f737bfcd26dcd9fce56ec643d775fdf8446403719f0237ecdf2bbcd836e4b761e8645fa4bf4f62677e943c69d2ef8fecc7be4c7f3fdb909d01f2594fbf6fefb785e0ff76d09421c5f1235bf500b60137024430805b40b2e8f30711dd6bcd10071cf8753b0ce6ae5f6e814e654f26d3743f1354610927e46f653a9d46e4a7db3795904461f817f7d88e1e180cbd15abd162c1de9bee8ccae9cee050bd0a895dd896ef58057ff8f1d82d84018714cf86474159030a8ba506d6aae3fcabdea5419542430a7506d449152727339c4cca6052428612921c89690ca692184aa430904660188d5f18455e1085ba10127122880ba0700be1470b1f0f151e300be08785cfbb42c77fbbdf815f5d7e20badefd8d95d13b74ef3e88dc714beede07b62dbdfb1e56e67e986dd679bda207bc6ecbee13a1c5af1bb32df743ddbad78a2c3decb08755b8ee38ce19ebdb696bb585617b4db875bf2f58107e8d240be8c91808bfbaeef3f2426f1fd4710f0852049093c813eaef89d187df9e510476e5bf620e110ff222823effb8af6d899efef271db227e18e2ddf5108342db635b6205fa077a9cf507da160ff65ca07f2ff8957f0606faf61eec1f17e27db687bf7cff799fd7791e0775ff7dfe19d833f119b8f5f8f527d505f5a77355bccf39e79cefcd37df7bef054f378779e8e4a86b90f1070359936ddd2ee79cf38e588d19395b296a6627a24d5d839a53a004e1390821a7ebbaaeebbaeec9516badb5d6cf444c9673ce39e7672226cb9ee7799ee73d133199e7710b5a8b311762d38bf318aed6f75e7defbd1ef8d28acd50821afe149bd1f1ef88d560397515d6a13b05ca14bc9585aff1845b587565dfee36602f0e69db72651acb2cf8fa8e3114c27b33c6d9d2606f5b7db5bed97beffb5a41bafe6ccffeecea1efcbc56d7adaeb5ce1ca7258302e3155c90d9ad37aab4c813a94a01b9a511255c712f06727f882b03b36b9fbade59679caac946baeed24c048d9fa08417051494a19320085c47fcf7d6c21490bf1ce7fee550d8c7b91786d9f10fc1adb727308c54d8c7816160c619db56ab769bc04e74fc570ff845b6c09d16cba502bb5a6d385571c10082e3783afd9f64ab15eb6a47c548def5ae566413b770fefb1828f12b7324feee075061f456105a951fb8956f50d1f38b956201446e6737064e2710e448608048d72f063612b865f78fda880406f0cb1ef1002a8cf67948c568c2e1dafce4e904829cc42adcc20f628db1c6af0d6a6bea526416efde0e8f1fc8c9aef3b8d7e59b6fd6fce535e66f8d1804c72a2c01840efc265fc81fbdfb7b3feb70c4ddcbcb053dfd85c1f33aadc9180efc2241b1fbb80a4b984127f4deaa9063f729c1885f8360f7be0b417cafd7751cc4adad91307660d759dcb21ac3ac4c47a13badbbeef3be268cf941ddeae3bd5ad021dea0c6ad9cf508f660cc2dec61531f62a5e81adf35ac2a9c83cb99020c3870166d4498e63e6661c14196bde4f91df8a5aad1597786469f11a35fb2e545578981313ed942953a8244452ab921c9935f97c0f798d37c7bc70bc6efc79d41e23909e4ce1029c28823eecc35ef120f4091c0991fd346f7053856e6c6a0964d5b4a042448a5a0bdc4e03b554da03ac6ff852e7aa3b0dd997bbb2e3cd801ead6443cc549dc4b7fd3d4a3b05626d2f826296abca8786993467a2994d3433c07795ff5aa2d24944faac0ad306cc10ab695ff268193b847716f47f87c890bc11f7a121f45d1b3e8f6e57c40dc1bda2cb815923e3b099d77648cefbd525829d6d3480862146190aefbabd5edb5197431881cedbdafc121adc76fa4bb790c5767e67efeab4dd7e53e982fc637eb0faf8e51eb0cca99e3d309043f0e72db6d3dead78842f518a09f71c7acc64b0dfccae30c1a1c34b8955b5ab411d1e056febb71e0961575782ffaccf468d1afaadf9739f94ba67e5c17927e49fd86fafdfa0d12f6abef4c11d7c5ca18c1c921adbe03d3e0e8f10348903b33a40823ac4c123f9aa23fe6252ab00884ee272f76c82c092b734130e6465584275bf7f043d9a5676dd39b3c6a63db1afdb7c90d7421f847af8f3e9b7789eb72676a5c1710589918b66576675ec2930b3ac1a0137c6dd6a16b5b4627e4f81530d273bf2608f42793927d55705bf949f685816de537e52fc5b84b88a1cfff127e26f1257ae82fbf7d9447bc855b391c4711199224f204077e5d2e81d68efc04f857c46979adfe71160e0271ab6532118f5061d77c5a9926ac8c95c92ce8f98fc8b07c3ac0bef20a76f7f97efe7cdabbc11e7ed75b882b7bc9aedca59d4ec7840b03b30b9b3daff4dca59d176e87854e7652e8f9f389ab306aadb5d69dd5f7de7baf8ed95f456502f5eeed779dbda28fabb5d657ebb36b0d6610cc16ecd68f0cb5ae3dad3b6343896ebd6e5f084de89d0475ebf9aecb857dae4bff0704a22e27555a31ae4b3f088efac422597dc6855d53df9992874fa23a1903f424e9d3c9185d7f1ad4f6b55aea8f063f6eeac7da76faf082ee14b745bfaaaa6a3147ce61a84156fc3819a4b7fa057f0704c7f144be1681d01dbc435afdfbec24740753f752f182bbd3f5b004fd1dbf2a6e7de9f8e1f04868554814b5e3500ad309127a67612741b0b6e774d69d6e536b6d273373a6eda5bdb0b993274138996518aae324d8e91727b32c902741e8f851b30c4b81e0a849d4ace34fa19d44052144a5d08e3f35cb3014145b6a969aa56628b6d4ace367e5328cb57a14f3b433ae3a20388ea7934ec7af430b02fd158140e992b8acd3cad29cce0a9c34d2c3b7e1877fc51c21a7c94f04871ba4bfef96305a9995e10fa119263ab3ebdeef72f414a233c3acfe2efd6458e78db50cfbc433c33aaea9c01ebf7f1f7466d83dfbfd4e092339aeb57e7f5cf12bfffdd18a4f0dbf9cc0b03d04b71e805b7754ad8ec8038a4e2e3afbfd111cd5d37dd77d0f646224750e1261d739474652e77412da7282738d5c9c6b447fee0e1e4295aea5b25b5aeb6c33c638636cbb1db8e68dc16dc13dc105010e1270048e06922075a7bfdb0ff1bd9e0ecfd330700cc36865f4dbd1b6dca7c1a0755dd7088e19e32b789f0d4dfeca85c9ac2b3f8d75c96f8475c92f02d818e2d5f1db0bd39c070c9cbb1a689dff71cee0b557877db0f58431b7ec6e81fb5570eb5a8f87b738086a30dfabcfd00ab1d6a54a75fb279f13897d796f49714615badaceece8d67467c0eb823ffcd39d01bdeace8cffe09d31851f02dd99d3e7454ee23ede991dd7053f8893f8cea8ae0b7e6eba1fc3f4e13b5e74fc58ccb1b12dfcaa3ba3725daccc8a6dd92d6cebb648181dbf17d3f1db58f2491afd5fef1af66d2bcf88b15857b6ae5acf3ab43522deae056bf83f8004f971eab975ba32964e5af5889c73fe18b6c1d803bf3e77403fbe31fce0df4edb7b2d6e5df07a1ff8795dd7719a1f3beee9745bb1203ae7df2105148420b721b42a6497769cf514993bb11e01cdf9966a554bf17af83aee6ef79e4fbdb532fbc9fc1ddec12d2bf8de14d8c12f9c71cf8fd71cdebd53eebd1cefdc9d14beade3f7b7779cc5b6e06f814f8c78074cc3f8fd56d75786bda0b775bc7a5809b95ee5bfcff52aaff2ae7fed54fed51b91bdec540e5f2356a94865202faffabc857879d577b592f5aadcd1ba5a47eb6a18875b194647eb8ed0f17747403b5a57d33ba9dd99201c4e231850783890d7bf5eb54bd8bf7c08ee540d363bf82d2d48bcf4960f5f638e28c4934fd927f9c3fcfc7b12894e247721fcf39360d73ec20ff5a2ff3859fa8e678e6f42907811d2fd0d73cabd49fdc7532ffd7bcf7739e79c3d44789fdaa4e74f39160161e881ac6893f2d7136f3e9edaf9ef4eed4ffd6db5ba4f6d9e1262f5aa276245448a933f7ef4cff3adefc41de28edb517f53bcaf1379a03ef52108ea82c0d743bdc785a03ec58588ef0d79e928f14f5e8dc835ef346e654e9678c7fffb9093976f12a77f1fe60f3bd186bc9f17d03ddf893e7c90bcfb32e76491fe7df7ded6e1156d3c6ef30dbf4ef8671e7ef88b22e54f6c96839f92f297ffdd278fdae48f8ef2c41c271f8eb9d5c10c537dce1f7a2cded3e171f2e69d8e39a7effe8ac7fea567d47b46ba877f0f376d3fde41544158fcc4b990934f39e1294f9359a03c3b77fe3438f44027fb7a5ede8f125fef64d88727a2522af5aceda51e05c5f3fe531f637b3cf530271c859327d4e62d6e819bf258b4013fe5af58733fe5438f086f1371c994af8091ee3d0fad98f27ceaefab36eb571be54710d6abdeb38560dd1d0465f5a107c477ca09a9dfc5ef4de2f414d613a1e22c2256a7d77cc88b2bf3d3dbcef7ed467a4a0ae9bf8db3f6d3b736f9a39f48dff2b925831ce820c635dc726207d8347112174e9e7014fbefff87e216be45416234b33cfe5b07bd7365b6a3dd18186ff129b3c5b3b4780f6ff199b7b0d954d7e6aea7c92e2b7b6d2b63d930768b6d65aebdf25614abc831c4aa997fdf5b29865855c7d353d4cc2656dd79dd87ea81867352a309b730a893f808583576a793bd49bdcce8c420859575fbbf6c339ae2390adc92c2f8f194c7abe7728faf7cca266dba750e6eed5fd1ea15c228beed3f057e656e81aeeb1cadee2f8b2fca407df7e1f7cd20e275d7835a2f3e6e3dea397fce39d83939f2d5733ee3c9971ef364acf3c7287ee1d8cc9c04491025fcd1bd5f1991a954bf7a20aa5ffdf7abd5b37889f2ab2f597977267eb5be318319c6fa8f9329a6dea98ddd937a470fb8859f863d9bcf787923b298988ff140623ec67f1f8397507c1cc88c7fe125cacff892f5316f4466c5900b23ca4e7d1f24bbf01b91b176eae34900617d8c1f490c616534d9859f024358d9ff105686f23178193322c36b86c11ebf9e045f3e060c2be7ad0c05c66d7e719b53dcc36ff8aa6d659dccdb435efab7da5616b3ad6cc6b632ad879cf2f809d59fec9414bd7a2d3e814d111f4f5cb55f3647819ec3c856ff3b9579ea87ea87b032d5137165ab076417d6312253fdea51ad8d755636cedd60ecde762e01bcf2f8b18e487a0ffaf066b05b1103b8857fb5af995df83ea1faabea5c321ee7eccef765700af9eaa1d3197507c22f40a7c8c11226e0f7d5608ce217ea412f232486f108a8c4881f77ec8551f7d47edc73cabe4ddc13b7f09f5f97c2a88c8d6fd995ee27569fd7e115d474b0d77db41798d0be0f3b51ab7d5f466521df198f031d3f8e02bf3cfc09d563dcf18a33f1b2d58adb2e632f01c5177ab9db9c276c1d7faee197ed5805e8cb4641553b7e53045943f185ec44c75e874dfc4231a8e34e621174fcb69c3bafd6e528d08bda4f463bc6ab95d156860e5666c7ca68dc2abdb8499e50954038cfbae84bf84523afebf4c7c99554a8da7887032389d7cdb1153b5d1146cfaf3cbe9180247c10376eef4976ee2f2b1748ffba6edf23e0560e0f48ff1efcc06865aa5bd771b00a2309eaf95bf96f0f61e99ebffb8997d3777a974f04bdc6f145d28b620ed27bf6ed396792a58fff6d90674780a5a7b89095f74e7fdf53e99e2a058451ef79aff1eb7b4fdb524e320b95effbb69e02b7b84aa7233fcb6b15bf509cbc1df530acefbf8fb161b6cdae16181fea53a9ad73700ba3a6781accda306976e14fb10b6f8181f229dfc249b0a7a4a4bcc66518cac7e0acadda167328beb7b2c79fcad364d4be9d659345f48e93a8e7af8252c9793d45ea1f0ad5afde4867f1ab6617fe944d41d1bd953d374fc41c298c66158c9ebccd29cfffdb283e4405ef88b6fd787f0b6e73d95aaa6db34b95395885d105c62ffe58f5e4af9e3cb1def35c63577e149eb1cbc42e52c5ccc1b9c52d969ef95d796fafbc67ef94cdc2c5264121c8db2b7ff7ca29bf708c5adc3ae1243b8a91c46bcae46d2f5997c02fd2e3c733fc323d26e96ab80adc3a7deac3eeaf8ecefeeefefe7d3911dcbdccbfffbeeffbeeb777ce397fcff97f3bbca020f8953fe58bb833dda7a4e8b89eb4b957ebfb541d17893761fe90a863e53b9cbf2fe2ced8fee5fce5c89dde61a1b27feb1d162a1f869e204564295a8cb8331e169e398ce76fc59b160e836f32a7ddf3ec90dff74ec6eef1702e847b9ef4fcd7d1f00bc6e3ef5e805f2d2a24d84f3e6f233cbfbf7bbca26af20729e2cee4f778ce2411bcb2f2215187cb672e243f7fd1c588ebd2edef7648c548ee4f215d76d77d2fc46b7ddd639b5df6a3bed6e631635e7b9877d73d9eec31e2ba6c9effee22606cd7b7ecd6b36cfeabadfa0c4af91b8619b49279909d95ca0e0ac726eb05a79dbc1177e6ee9c3dcff3bccd8574ffbd67f3bdc788eb92796ae5eff3d5056fc18db833f9eff31d529192f22a221f6ff1a17803fa50ef6a6d9d9fbf1177c6cbdf222525e559628e94957dfbcabebdeb7aee5650a116c6db89a0856116aff2d9e342be4ff9cc39ff2bdea4fcf778cd308d43ed94c7ab15b8cdc911f51e9ed3bd77ce60ca7b720a37826fd2e6529b8cf5d4873887ab0862c49db1dd24ede1056d8cf2f851223fa55038685da9c7d6a69e1c55dc5a174d4eedf1efc93e997ec455609895e5701576f87c3ee183fe7b92c756a88184f4e136953899cd54e6a9cc81b81d5bb16fffd630e2b7629136c0618a5907ed5ccb4ee08e9677f0a561fc642b7480d7afa375a81cc6fc990b495d1d2db401b770c618cdf757dca2e116c6df0be97e77288ad71d8f75e1ff76f08a476c057ee5dfe96ab8851fafb44e6a8deb4c8d5fe077105f2bf06b9e4dbc76229cce084adf108821b47f71684ff7de7befbd3fe3b29c54186665d9eedbf5bd5b772be26baffddb82d0bae834bfb62fcd808c73ce3a05a18519532f8cfa368147a39db2197ff4e38fc60f81701a638b7b2187585c1781c04f8afe4bc148c62e152f1f2b05c61e0bf640908c59fbafb708876258433ff67cb7adcc8a20cd4fe01bc6d09363688ffeb3c956f738a9e2d956bc1979cae67b1cdc081c8540a68ff5f8b5a3365932f427fcc2f8deab4110349d7427923b18026d96d162ac5eb4db4b40a1bf26f49f0fc3ab8591a6c33dd1bde6299bd07ffef3211a3c7e568c1737e1c562dde668dc6ae1d60d5fc04de2074922d90385781e043fe424067af89f5028140a859c5003bf77a3b0afff456f5f34f2db84a809ebba2fe2a4d69b2656c346d4b107de17fe0f5b7e6fb1fb31fcaa81e3daee5f27b080ebe4789bf8dceb0491dc3da1677b38d83dbc3f14b8575c71c5151ac8f56f06fdebdebf6c4c8251f327baf7380b86757f4dd8755b9d65c4ad9b83ac3b19eb9eb747d36b6e3a7d3c250496754fdeaef9898f761cc758e6e4d87758b5df580a5a9100bf24706b39e77862f64f741ce7d64a479002cd0a64c879fe6ed2aa18a4ff93c2083e687f76ddcffd1edc3556b5aae77957679eb1c656601afc2a8dffffff3f5a1b7a1d66b1f46386dd19099a84a0bfb40cc3a309274f259cfc56ebe505a3b13bf3c03779482f02c1f11bef97b6eda03f7d89e3da1e4612a39d83ef111d915df841701cdf7bc2f8293d5ec3886f248ed173ec7ec4d16ec74bc33c5f1af69cbacf5bfbf984f825639d7cf2259784fe36dab1131d7f07ca1cc425375422b42aa458ebf6435c76d907c11b0ee4c178ea20112c2c543378b332f94f57b04be8d6b6d80fd50cf3ba605df6bd38d87c5be17b382b933919da7e5d307e4fe276af0b1666659e4e7a38357871b0ffdde1ed7bdde6d4e6d0c9502df56b82342cd13ddde6d4d6d0c950c5b4db1146127b3e542f0bc6b73f022195c51bb460f43eecd704697041274375d4fd9a200d2bc8a00d6261ec509006d6401b888234d006a25d87cb5cdbf76c12048414fd16aa1ecec3650f9739793ddc4d98ca57db4811e115497de17b6f65f6945d76e4b905fadb8511c3c0c23c1c0beccb7a63e8f6bd2f5818a665977d7966e8f62f6e048f904315a72ea1849a5df66f6a868144b02efb4bc045a1db27c3b0d4a8f48ad592ab1a323522020000000400c314000030141289c38201793cce1255950f14000b6eaa6e8a681fa9418ce490428600000000000000000000000032ec720470b7137d5d8c75e917e5ad8b014f11a0888006d6b0fd902ca6fc669e269a43d9d8c52f45efd85978e0afedbb60cd90bb8991526b463b1793b06190637e9642b90d3f3ee1121d5949eec9e9259b732924cf8479c63f444a641d043c9bdaa2b81760f6bde517044ccac9823d8f0327bc1c3c5388e9f14ebe98082b9f8e49f291515ac471dd7f62a1325f198d9cb35db7cfb8a704547f2c0f9b3e9e631fe2902e3d0e23431d5c7e021db345ecf337fbccf614c54f61580fd14f266a1d82534d025a57f150b6d97ebd891fa86f64eb1c0b268652611b6658acbe2703b724ee7c46fda45d7d02cf6a59028e55aa012b8ef58458eff93090f1b0d2e464a9886f177fddbff5ce6910d5075923ac5e44c51c0b84422ac19d6f9dc02b1fad02f6d958060682a01770877952c9aaccff77974c1790747f3938c24cdcffe8f062e7dd430aebe32c8937443225aa42d9fc491460eb04903f00f825808f1a802303000ffa50bd5e12179f9f22481268d58a09bad034ad80db1f190c865dcd6377be16374558623ccbb08780e06ea612ae8aaf7996083e068b8de580f26510900c1466fdb7d40ba05bd641d7563df4f35c6adbc6983b19b4e52d1cef2bb0cc877c4cdeebe8ffd13bcd0100f076ce2d68ef23940bdc308c13456eae214622dccab854e8322fb4cde37e20d5cad9b39784bde49797ac3b5a720a15bfbf90e1fccad6b3397fec6d793f5c9b29404d64169381961d6ae81bb3df886f5e11d23dd5b8f8b79064c02216cb28d5b0a85c8d1c1c38dc533c4f95fc205390506cd6b2a995d7d7e181a8ce185f1908ace607491261cffd8118fe477aedea4757938ebf36a93f61653eafab39d7be67d2d09a5f5d261c3d741475bebe55543aa266335b16658c8c4f521e56bdf6cbec1052f44456210a04c17aca651895c8258a1291dc668ae2dfc6d6865fea183e6e7afae968f0d819e48f71420521d2f241460d6fdd3c3045a020c094caa4674b5d36050fee92f6faf79a4ce36373d643378180dbad93d3b098bee7a63794daa5606110d804c7c5127187ac102f7d8b47fb1ceb3545a8c7a8d395dc2fe0bfcb90d3af05fdfd2b1388b82cf22581089a4069d5ff48722094d42afcab1999f26ae8eb7516722f27ba7f47833c4882ac079dbdd3540928d583ebdd4ce8ddad7ab9a3088c66dff30083d601e33b6f8acdb974e25c32f5740c9cb0af796344b79b8a8ebec18e77d091d4bb1b8fe0161d65952436812385e0a211f4d8c56dfc5f2536ddbd4a761963e5ff8ab585252b8acb7595d26934b7e6427ab0756a8de1a85051eca5c6e98b2dbbc6e63c8fc2a880dc4a4b509053caf1e59ff5fb6d878617006cc8970b7f970ae0e3c8648937a212106c73c3779812451db8f7a113546b4e9e51bb5a071511d0b6a5870ba804fcde38dd74b00059f498dddaf20d52bdef4b00001a670927f308a75719632926e9b644c6f2a408694994031126f5fde553d908419869ba430376bdf06eeca6d46b6190048c0466d448b9303d86600eb1ab97e15409239c509ff899cd7abcd80ef856db80cb88bf1f00d9773d35957e6792f16d886b92fa05929564148e3496548e49aa25f6c6bb0194e51e4f9328c5ed257b1920553511098b2c708d3648a1f039193dfb2e2372fa73bb1075010843cc3c530f47e893427fe921257237ea6f4546608581685faf834bbc3d4c7c32622127ef4f8dfbc6dd4b1a82ae3b9a27d473502c71b9135491b0eb5528fbf43bf62ce46afa136f16a5381d95461e7e583d9d2e48ec2b149fffe40b9996408fd46910fc2a0f4e9039d0d6fca9b8d7171f42f4494e80151ea2e8cba52827ffc73f301e1c30035e6b2e43e78225d8c396a943ef052d19b376376e01efe1b0854a7467f393467812ee522a2911c54a483df8f7a9f9406b398b50755fb48210276247ff78c3db95bcbfccf1d4444de261a9f9d305a47863da9f55020579380a8186d1fd7c6bcdbd68eba2d764337aa6161d47b9e73a6fc1d97026abd0270b5c727e54dd06df747f22e221235af668a246d5bd05a93d0d4521647327e5731cd08b9bf94a40696e1142310cd9c22b3e9768b5b2efa795970f3d0eb3e547c869f8f38cf9fee68b2cffcd8bcd35a5c567e2a84345aafcdf495cacd434efa8dae771136a0f7ed1cff0bce55f2fc5c8b75532d6ae6f7fac16aa4cb0eeb048ea6b37c0cd8804565f72a3759867d5a781642b81a9be5c0a6cf4d52c20909871bd638e1dc82e09dbe30bba2cb15a062567a2288530813df8e31f155c8cbc9b454482bb48abdadfb5c2d4bd2a347de0fdc0cafe2a97c29e4cd969f8f5bba6be9eec6d5d1e480feff0f71eee74ba9d155783169be61330ab9a3614124ef5da08708fab3bc9dbc98b2b17461a2288fc365e6833e8c7b90cbca995bc4ea6221c71086a032d60afc1910cb56bc2b4a9e0f1f143b9289603e4df57580c2a4a9226657aa912ec43cfc01597a93c1de8a8ec3b58390fdc378cc40edad18bf3bd07e992d40e8d2a6bc0ff6c4d5d38cedfdbd925b1c55ad1c5519fbe85c1dd09be479b485c84342ddb476ec6ce6c22283b3cd6335e87de74fadc5a37fed7dd7317bc432d86f34aa42b421edf68d25499da076a55c372af445763e0bcc767c9e4d377ea22afb03f86490382030a96a1490b6db86c44b7fc05d204008840f3b8b62a20ba7451f91b2b534c73c7e24a359ff8deb0378048dfb98766e325849c89ef7fee039ddb87093e8912794ff9b17e37e3c5a005be591c97937f73952a38f96cc62b464417af6e1da3bf781a0bb256e555377ac4e2e146c0562eaf6f08cd7aa947296ef7ae7e889aa2ccb1fc6e394798f6dc0331a975dae684859af67a52cf4aba54f014e011575a314f195c7434f6895e12995f68d5738c46ba9ddf370a277e334d82c9c2286ce464a49b8b7735b384824e5ce360efb6a2d70940e698a76c0695930cd3dfe9df9aae19d69f548f2ef9eb6834fe961c1fd73d06f4d601bad924e39f50168e59e0a07a2babd590388cbeff8c5886eb700490680356e82fba97eb0fb0a49aa66ddeb09ce80e7eea12b73559400cfa98083871de2c28f4242b9187c0b65ddffbcb946882b7f1f742b7e7c43eac094c93983796a6eebccb63a1c9e7ae64207780bbe8aa166001db9e9bad20a2581786e02b84e7e7a013f3971890cf73d10fbf1b01e16ff7854dc69adcff2e305e9c397d57be80f66c17682077573f5cdd0a3f88b9d0e20f82bbe67f324efa82fd6e6f96aea1cc5bbaf809ae68db8efffc993c54c9e75b1a0c86f231aa6cd7e88b21093a8e340a190316329f46c8d353e7a5f0f710f43285fbacc73c1b7c054e221270399f2fb387eb7cfcef775b9e5414c97063a44f896a639d83ed528db043c3afe710c04559ed4ad41eff1d535fb974fc9d6cd65ac8de87676b28a5d2b7b9d029b54011b6f46bcedb7654f13abbb2e83e236c40ae6e2f27e6ebfef8890fc33a4588a6501b1cc56835bd39e0333de26b0be7a0d1f156a6ee7234e30abee3c495bab63cf439c55db88c1e249ac2a84c57d57c94900c37ddee5b05d9588490cf1d6ab009db16870b7841b46a2876710d4636a5267e267d81f18b5811bb2d5200d28b4c6c9db60aa0caa8570da2ca0d7b144225d5e35116e57ed454a9c63e04c729cca8ba2acc0f91ce0a02a4606dc421b0fbc01fb1efd76eca5adbd52f8c7c56a34043713e5e28a77decc40b24b16c960158240fe79385bd63ea8e8b269f5d4df28b8690910df7dbb81ce4e98e98d992e08f951b811a654e4aa27ae277e0b5685f6d7a5f1cbd760403a944848f9f518793300acb6a98271aad4e1a53238c0b1f49be2baad54f2eb76080c691941f7475d3375af9dcc10c42dbd031afb06a6959f9eb592f316c8c115503170d3799579ff1e1f89c83ec560d5bc685b126e9a30e6248ce1ae1cbdd523bf8eec8d1dc7517ea01aa70371f00fb3fffa8906fe3ba755a0c7597547529882782c9bcc397dde774081d2762ce54babd8239aa82aed859fc336993d5a722b98c6a6be36481638b23d221992a412fdce41a594eb6bfc01211b9211ad2ac6c9c71bce0e7fcd061ca9e1dff38ccaa6214eea4d4b958f66d327f74b2ceb89bf80da265443207362e63122210d047ae4c67db87f2f71d412f957e87051f655a7bd43318fe6ce39f0de3481efdf92768ad5bb684e4698d22928d5dc4c27674be637a233ea2bd0fd78ae4ca398731c1210cc3e9c1b7ca8f47893a1bdd2049ff69797bcc56f5aa0dd5a940b4aa48d0cbae477c4dd3c82ba565d62b3a1a91c20f620bca0e1cfffb08551c40ab80b2afaff849134164e9d822674309165e222e05da656af53cd28bcd2a4289fdad1e5f21539cc09dbdc5da11127b7d164567bd06b6c8d4792e18e83c439b58c2e88d91bf8c7960ab5b721f13ba9176e6139f63bfeb8d6bbc760b1d6ee680a3fff693c10b50f1e6ab1b7af9c50da1f7c43063afa71a8587901b713370f902c0c6bebf3a57929cbd0ac6da8020f1a262efb13e44321af06f6349d18829294757b366deb8aadd572a068d6395ec591f691f6c79df9d1d8cd4f92fa4fa23fa09c5ddb81cf6c6f32ca79a4a1cf3aa61d1939aa2b443f35d294e10b1e37abdff042f7db55fd7cacdf7fd77e825a65efd13b773b71b85a01a5e60b9750e4c2d034d662dfcf24de6dc67178b9944011255fa50b83da163fcc06581b9b7f1ef532d128cc3f5546e4a4387c86382696830a7871691ce03ba9eec39d7dad61d562764a5dae8385a61914a421688c9339d99c31de6de44b640985642004e5996fa9328f18c7eaef36ca607ed4fee881282eeeb89c7a445cb9a374d1abe264a822bb499f262751e1e625daa904dad9f3a83b0f6564471c799176a5286671cca61c5f2d4ba61cd2fbfb6b9891bdde5c0a40f679db576e63d2b9b121979515e7256722da18808bf0f9e7c9bacd9e55abdeeb7864f301a46b97879b910a948ca152367db7b996b2afd80e4b4a3a0523bce5ed5f0bfe17ff45e2c0079152d51b9b502856e9ea75286c977b6ba7864c83fc2e8accfd09cca9b03e259aa21029c7c7dc9bd8e0610fed04bbc74a2284e567104d7d15bcfd4671705a7bf52bb910dbb39454b3c6dd29d5ee3ac5297c76f75f1fd7fb38a8cad47f21071b877c34a7df7598c689cdcda9b6ffb38c702d3d37ec388d62b6c6e40eebcf2c80d4104e75ccadf3fe57534cb04a534c73c49caf9215b5c6e2e84252f5eaa3408250f9c60fba69d347cc7a694790fb2ef7fb605e50cd7f8ea036cfc214c069028faaa1073301a1c41039962bf243835b9bea12561eb985f12c234d54637c20bcf6f1342e650ae177237a337003634484b07be41ae1f48058e35c6d3e9f6d3f6274dcb7be9d2d941a775098174062dbc694218555ce2bef2d0ca9e3f14c92253a2ee32cca37106b3d230404b6c5c5b48169e838dd8687dc5c30c891ac8c7f3740269e29247b16f71504bbacf25bce3dad7f00807e83b0a733c829998e3975bc0412d0a65d8bce21ea7128ad54fd83467992da552549df27a623e928bd4820a86e396a2d4407e1a7969b09eb69ee7150c8177d0365d2a8e1faf4ce04de45df6630241ec3b105f06d060ecbcc102cbe7512bc6e8850ec7bfae0b606f00ff35022606d10a700859be6012ea205e0b569cf31b47c607bc3a73fd980c005e8e59c5920c4cf26b9f3940f2016d5f2be7a05182eaa807bf87d5a97249c30e374a3cab45355f3cdc03a4c12fba4983ae3f07df8af63e0588e875be4290af5522036c8864ee56fadfd4ca9249e5d249522c54cf35eb1eaabda9ffbdd26e3466a08a9b1b80cc726ae49ffe31fc0ad731567ef69c2647ef3555e9784c5b857db3d453141a974966678ca4254da0322e208b2052738ee841faa485ae13424d8c15e2d58c2c20db1cccecb8f655108bd045f4ba5b32970340a962898586bf95565cfe339653871917d5546fbdbe2858816352de2f5ff2788a075108823db4e3ca30a7da43b1f70c788be97a3ae631982b62a0527fd67cd2ac12e5ec4a15a9d854c4fdce22ef38cc881dbe555dc6cd47813f9c3fbe484d379ff0ae4ef65ab8e36335da905199aa34c371c843d397e1918177a98d7b308c90667334176041dd0a2e0973d4eb3640d36dc011c1656696f40e244354ebecc28bd55c684a57ec6ecd9d12b930095a83629fd7c2ade1d6471637c00a4e89da22104fa9db88f348b75822e4442073bad523c66be86222258f334aab5b674c64929ce0e4b8095244009edbd2c0d1013a154bc01e39c521d6cfec2935eae4d8c805991454bd8367964bfc489828cc87c9398e14c4d0086bb1e7a8aaa9e7efb03ec1c34feeba48ce9daf01d09060acfda6d7a527a01c1b510c8ecef3e2eec3458c8142e5e2520515214f69aab70ad2c664ea47513c67f56aad77c2279e4646b458bdbd8e378fe79575d3348d758c131a8b9f40fcca209433a17ddbb6849b820df83ccaad776218db10924678cc93ce4593a3876941f0e525bed5ee20b874cd15456876ddf2affa3136abd588a5bd17c20175be778c4d979a900522fe7fa92a3d751d59a18d25b592ab89fdd03311eca8ae2df1f8cd96e04d2ca9649b08f91b5e183d218674809e7b1049f983f69021c7f83019d16a6bbbf16fce7cd945e2aaed1be0de85c14113a79d0641e1640c9ed9fb28eacee4f3d0f29c25ae12b39bdd57b03458593d042d5c8a347933a89166d65b4e1029f58775cddb33edc12f44d053786c20581d023e48e1d74161f795d29a9a156505c7a4223b9cba25af32bb2b61afe766268d39ea441b15f345fa47ce9ca8a9aee1e190605c50108133334059019a0ff41077eb404205ee3db10538fbcc7f2dda8aef7bd22d0d4206637c604ca22284805e34f9db4ffb4388380ac070f9f8e9d443886fe1f903638d4255722d9d9c2fcc95e821635ed582e0206ba2f5c8dded914b2729542450f3535d97b5382c7ab9db712f8a68424425f4c51238e9dfb00e5603bb498b34167c49131abeeb5a02b327d214752fe650425a429719b3288908e32d590e115527941388e9421f724896d30848cc1c72071bb8fdd1103de5af215e2fcf21d6128cfa0b694fa8ccd761b01334b322796c8fe471a5f2282d6bbc144a3d8e407350c3cfae8f850f23b1d46389a2b9004d3c49aa056911b9cc26482db79c33c2b7652e1ba17bf737982b330ae446b797487e75b781d9d2c4f9a8a5ee3806df37bed7670d981e5f708bc04e4754b7fa55e0346549983c26ec812058433136ffbc199039e18217fd9b6bbc516a9c38f218d6671ea1f3c3a2d8dcf0278f779c7194bdd2784d6b683ef44d0a14a4d5f36c31e74f8237ad4b2040e216c581d55c4d328e23214e608e18ba06ace7155019555cde677807fea39645642b3c57ad7278f77d6f88acbcdd891fd1093ac92b66446b0c586c8c25e697e35490850ee6bafd2e2637a8d057868aac72636c974fc80688b0821be77063524a23dc58323aef6db73a0d0accb1440faeb32444fc8b6301e9f0ebcf53708ab05906125a58faa1ac166d72be273717d9d760bf553de33ac9a1371133ff68531b75e49294c707b5cdb0627273f63eb21d91c4a9c9fed9dc06fe9a247d3835e7dbb45cab5363bc490736d3e27e6a6ef3a98db33765b50153288188a3c9250a2b69d77ea8ebc6b81661cc63e6f9fd60aabe6de554d3e3acd8d687df7e5c43efc9314f95cc78d90551eb7bb6c8ab96aa8ddb8c39e37f6d607dd4f8e671ec02a64f558d9a5f14e267a1502a1de5d41195bc70356b8ec84556b4a6c0ec1a16230ad48a805b10650ed82b2f644951b578575cba360e3a4c01205145640ace798b1407ae62f4ec2acfd2209b21f0daeef15e819e1c71a337a4598629e93852eabc50fbf94de4f0926624af5c5f8859f94a31934288c8d446f324af4c82f27c2697040eefc103b82f6792106a82977519e52cfa25a0c24a51ad090f6fd099ccdd77f398baee6ff1f97db293a20bbbe801e3285f4b27e968aab0e639d1bb376cbdb53a80116e744c7eec37fa73972304b12c5f0a4491051c9697d7732de38890dd9de096d2ec248ad2554d4c821e0581ba400277d574eb1e8641f9c38679d8fa78164c417facc4aad18ee29131a31d55f635e0677d8bcd7de7640690e8dbf7eccd8423e4ba53cdac17dcba8494916cc3b9e0f29c96173a1cd7dfc64ea0d1d00ec42980888078f46d43a8b4637f122a6ce166a40427689bf438652811dae12a5e1e15d32c0d34c796babc3ea7740f0fc7bbafb8527f84e3bf0ce743fb56c4e7b02de5ff1b22b46d949744ab87c7b92a1778f3a5a9317819ffe463a1b32e7c5a0b78ed3d348d768314497a1097af268b588465ec7a3f93109d5d55e1f69d74417f28fac561be75cbe46929af8067dd353c9e89a3e265d0dbd9677738de701d819dc12fe2155377547dc425d4485cd55bb6af1121035b80a54b0942f2c9a7324bcd714a3814209e5ba8953c88e22be33e1f37ddd8ed5a2b126b17e0554458cfa3e0dd869a4a7b38ddcf9b6ec93a100a8fb8e67a1fcfc020bba7914f0410737420f0498a39948ff1437250d1e8a81cd4fec782a5137ac9ea416346f04e1997deec0cadb3d93c83fd43dfe122098a5400224b0fe3eb2810d1ce67410e592d2a9abf22a818d5128366e1bb1f6ee8d388b70777308108648be3d0d8d58164b1d6be83c5d9cf6506a43679a2259aa6c1e2529db8de18c58b3707550e17d650d720435d86ae43ee46aea7c16179aa531dbd20e8e2af6365b0f3acc3bfcd21ed43a8c5589745cb979b384c59910c51c15d2b5436755e73dfc2291f3b2cea5b9e3346e42ed58b0a2509238bb5586b929104bcc0b21f26a849f8e07b6562f68108d1337fb3d9c34c2bf10fd545132e581b2c3eb36ad6d3274c2e167621bdf55afbe842f20823317cab2ad13992c8be7f46eb446c5083d8de4f2eb4baea60d6ec347e2e0dd2444af982d457726f2de080d23acc1331e310c17c468158a65299444cb2203d466338097212711fbdea7f54fce7340ba391a57a07c676d8493c2892ed6a18ea45b525219b8b646c791c761f52f4a6310d5aa311f8f846032aaae5836ef58c3daab73a3d1553d4f91e2cb87cf370b1a971407b7cda473c2b07f59234f29aa22131525e0e086fc21d520a4cf61b00a030d3e951aa98f72bd473f9874aa25e7a252b488618774856420004e1970174a723e41ea64b5a0f5de510df4d8fd9e5eb352d8c8116a3cd0c54183eb6b67021fcd4bad9135b00df91a1d8d8d00b79c95447af94c921ad4bd3b74091f26537ca4fb1540c51fe24c819b98ee248d107ad416167cf53c0f30c1d4b013e98172bf3eb18d361bbe9ba911ec9be1c3f093040343aa804584b215843c985d1e4d0757c710996f5e874c0d47a0deef56ebbe2c9c93cd51dbeacd6b9f7e7cc2aee8f22ebc70db492252506fbe903a3299f4f840455d238ef71d59dcee4951e283a44a1b2174c21d189ffae11fd9cea96328d95ba91b8e9fab36d8351261866f888b65d69c8662d84c4fdcce0faed3cd12857ddabdbd9be07058c49c655fc951810ff78d24e7f962bcfb88a044911de43e95194d55ce182d94068b765da1293369a9c271dd72887762e31ef34ce265579d8e8a8329805523f95bfcb85d52ea102b6e6fa354c6b3c0263ec698c5bf9247d2e0d602bf00be18179a704b9595080cd05f7cb4ccb85314efcb0a4efdca6a6a208ba68b41aa96939b72ac77e5e2386d84f58f66c63f871cfaf3ee6a7bc439179234c64746c179f74b895ec21a85b4b3a748237132e6036980741c5a3e47cb17dfce8d4a83b098591c128b3cc15daccb59bfc00c9898332d7a78e96a8a74d102f414952b28fa2753bc4ffeb02f8f86c1d8f481021be59a91c211c2ff2c23c8ce5e9268eada2698be933369d390038810861a28b9d98c20893afaf05623f44874d2f4d4f973566a42ec67c3728ade60ea7cc600ca698c686e4fe5074f1f43fb29d9d2d447515214414c164af9809cd6e9b7ba4ebf7d5b85dde6156617c2576477e5d31b982bc47d5033e824a97f48e0ab0d360f681340f302a94b0c91545882dee22e55272fd55aa5477e600012472f4c816830236239c8ab99c2825905d9104e5f8ff2f1797156c42747f0081eeedc324d78687b2517c2874c121d71625af17451b554d41b94d0d34b8a22910573b7824cb36c6fea749395cf394dc2164d3d9d178acc97c5c32c157b8faaa2b58891fc8d5d0e1275cff0db97d317590a767870c483f8ec44df153a62d872e81e66a2fe8e7c6b6e407218042864139c1c302e40fd05c299c12af58c9c043379e01c11bade01a5cbc2ab26266bd5c704a6bc78e43d94b2b8f364fd8b07d0687bc3a180ec180f33421b1deda42ad201fe7ccdb8fa495aa379b9c3c52ba648741de563732457fb0e1435f163aa2b3d854141c2628675c03328a3ac169fe7ca720d6125ee7b161c8b232c776db7140dc1a7053620375ee2b5d985bcb5be5728e587bb754b9a31f0606bf74077b1eaa7ee7e39c84bbbd312d79e364c280d6871ba2d8c8329856f7d1ee5bc48a1d29b00b7f473fa8382618cd9272985a8b6ba5166410a32e56759642bd472d5ee53abe25b674191bf574e191279f9ad8a6c7cc475fde80a4b1dcedd965203fb67605fe66ddb970f75b014be35b99614b8f2dbdfc92c3401b087030cdda1e743cbf2b258944a66a71c874f18182484436fc30d9749cd1585ee7a610bf722a4318c8a6455f16d051d983cc1545b2b2810a4fd4e82e8e884d61198f0422960d3a50f334ab2eff62b4098fb33455c86072bba43f6c9fc0843b11aeacbe9b5d452c410e8e3b052199483bc3cc9064951c2365107c16c0a323ad643c687f62f30f8f01391ffede67b9ca93d59e87cd9fee748765800dce0011a33f5a17c062e2f531367f697ed05d5d152fffe143d65b0de11f5222818d4b91ada36d41b89207c20707fbe924a889f5b984d38fcf86a29ce19c7a0863060fb32dca4cb31d3666a266307c217436f1ffcfc48099e3ee91068442123bc7f684ec50253433b868a50d562346a5ebf6937a681bf09a246b095169d4d217e430ea176a4d8743e60fc2b8d81f709cf8461b40f66fc3e546d5d81d277c7c21abdc5b396c5dec3b92c42270664c23cf14757815e22831e39bdfec1375daf981a9aacafafc417c52c5599c2c59156e59960c230c5f8938a7999008c745f7ab06b681589f038b3ef1dcfecd293c9c0c862ffe81fe7607889f654ee003f1a5fd001d8912f3859a35fa27ee7b008a9dacb2da08758f19809a1d594167bb003b14f31af9e7ff242c4047a1b74e64f170987c574f849678cd429a42c632590b330231acf7e49357c453168458245fd0401690da5d02138fcd33bcec201d1949b0af4b34e58c711686b24eda9d1d7789ad4c5be2d4d759ead97ec24008ba38658e9ceb171afe5317c718b70225144bd908331b319ca7a8fac3406ae4404b7d210e8db9a4054e29f212eeeb1dee648e15a93a11130ff4a5ff4987c470f9c8c2be8922c784c6f2c77a00af579caf732e6aa8cfbe738e313decd5987ab06b48ffe0edab3f890c363c15adf279ad0d80a8a0c1df4618586bb715f33d6858cc9083140033bece0ba4a692ef090794b51f9e30e06049a4da5faccd4ce7b23bcc5cca66e3122c779e0a0e3220e98e1b759dfcf4003acfe43b5a838ccca554a08110a61a273889cb886eb4f624d22a00067929272495a0da830b30224d1a65e2801322292f5b2112dc0d2f519547e00c4bedd7689d19227e912e35546506bbb8f40ff9d3d0a4d17795c2c732ccbae63b4a32b0e39f1bfa2a33b6c9a00b5fb6d6ccc86102cfee1837560957a9b39645656c7782660a51aecb0310f00e5450828691ab9a85d012fb584d8c87a27394dbc2ecd711f167786a475b1f8b92ec6fcc4fc6adf4f2675a6f9186a648b3c53a4f33dc476da29bad63c522e06bcb9b085a24b531ab511dbb204e61c0b1cb65668916a78e00a5c6e9e95b30c315304e60135b5cf1b3a20f7db10fef59180cb065dfb497e4b01a90ab795a795affef515abcfae959b3a0d9db760d6a8dd7e85d3f778920f564d98bf7165518672965ee5a04a720e724ac3d273dd5945db7c8b695852bc263302695947784905872931980560264b08ea92f59bd61566dd44e3df27d5c671383b73941d96ae67e1ba73d20a4ea3552ed8058b9ca01a08cd5d8465e042a893eaaa4128d7d9f190afa95d8f3ee11e788682e90ee86ea158bad8d1f4fc167833ad4d64c4936d451ae833a64c7c8499b667964fdf817a1035a61d456c96f1a19bcc2fc575546282575ed21375bce89300e016f8834f83db636f6a4ce009a6367ee50bb3253a2c3d017dd445e1756091d2e1e5955d7c00b2b35ae63f7f8a515802173c6c4aa9f93b577a2d4ce4ae6462a6f979a31fa4216f5ba52f95a91373eae4e8c3a61e4e7f98559ee46af952add69a556ebb3528e639f28430a898d8b341ec8889a889042d3ebc68ebce299e8e8f4bfe6ea717d2883aefce2b90d7745a79e01dd7cf9e5f04ca1abbc7d6a19236ddf53a76ea774274b902952ab6cd65761e0da5ebb81ad22023d5652b4d3e09cfe0bd7799f685be123412781dde41d3aa018d2a0005c75d4aafb3188e26fb24d37fc3ee83467da7ae817a59fd9769790b512220d6473c69c554d0e590a3f0936a5f245c21043cedb698b5b59fa1e452f32a64888b858b908c24b9ab3e16dde5a7f79dee27a7e24dae69149db60fa6b4a9e7801ab4183016ccb4c594a26e5e1bb35b1f1fb122b71b30ec5ee0bcf2089659d0bf283a258ab3f4db818d8790ae59d48b1c2b0d13bac55e60b42f71cbd7cbf90a472ff7fa938550592dfe1aea023fc1f13f5ec156d4e5bd0a0bb90eaac1aa0ff06192a2110a6c2b29b56235df4d76d675da73cbb0b7a8c574e143a2ac51a67d326b59fadb46952ad3a8dd784fbd68bf367c23ec1a468976c5eb7b041c9f3b5c60ed6b1dd202d2a342e43fea3ae0ebbac0a02b51fac9f724444e79383e0940bf5cf4efd316188d505135b6652e156bcdf261f983e8f85cc8b7005432d1519afe2909ee3b044375e54085a45ec69a7c0c64cf56d404b92a963d9bad9f0d43ecbb1b0e1f18e6d4898f18860729072c8e21ef6200efe90ef0e9c4feac053eaec4a54b86feba05dd6d2e12e532e6294f4eebdf6b7cb2ea051b22eaa53831040a4cdb2f027d1089c678a7bf279f9567b424c03fc8b5717f8fd564231f800c228ef2f74430ecfd53792196a0b01c6be289ce2101cc14612d8180bdc5d9ce74084f9b56b30b7f0a95abdcba13e634f142521e973399b687e6dc6cc8540f43b71436bbc6ce92f75f6f8c06ff2434cc6dc9e37f26669712a16a0a3534f2c19bbc79301f3e3109444bb397a4631cf1d2a11f71dfa95561fe551f804899076f01b3357b67f4d8b8463579f668918ab5256351d3b954f13e8ec52d43a5df2e7165e3abab1cd0ad569e86f2afdd61ff8e50bd5d8a7966a6345b8a3db31fba35e00703e40ec4503a8e075a518bbd5e7c0de992a00040a8e9bad1cbc32dc4e45f7a59aa833fc248ae1ed42773d76bb807ec04d6192fca7ed0c0ca6145ddef852f8b27ecd29ac12b844b54e1c457432511c4ea864455a3d217fba57ae10865cd9485eab14f3642f8c99422245313c8ac84d40b35564e4354e7e3b2a889fdbba57193b3de15da6ceebe1161c922d5e39d88206739df50cb13d041eea5127ed6ddd723ea1e19eed17eb31222b857f3e560f6fc8fd1f065acbe82bc815f8417f179ea02a9672e6d28ae1382b380ab117f9ad74410802dec0dbb2636b4f048414a4437a65c3dc581c028c7eadbc6827c23734e0c4590bae83ac78a70e2acf1852982be5b48108d2c6b248f74634266564761f54eb96af6766931120779ba417215b4dc5a697156d7b0b67a2373ed67786e6aa5efe094c4b479eae660f890b54b5426e1d429d53ff4d4f08f33182d7544bf4aa51ebf95f1656239d935d64528d818f2ce8c7931d2c6d5a1419eb40908280e26b1c1682a12f4a12a47c016f481216208e48d377a2a6977651165b4afb2bf8109e799a6fe215c25949555b0f93dcb9a7353e02b0b84a48003b4f5092421ea873687913174559c2b33770b2dcbb4539314e708eb15ab2bd6e3a3a004cb5e1df1f9923b62a05516443352aa0e9dc19d127ac770acd79ff4c107df308713f185e1031166e1922132f1311c9640d22a4f8cf44024d7d71dd6b696ee67a87b1f83b0ca571083aba58c99c3cec4f8098603eecba0f7f60516ee7de063066483bb25cffe9ca9f4b29662e92beab57dba31ad57fc551349257402c666af2b1fb609973f3741fea8475636897dc91ead32cbddad2854683042bece476c826ee47a164a07009bf8e984a4d97b1b90113f332c7c9e8f9756922af08d732ed1904fc6cc20880aeaa45c04f1d2085add7af8b0f4aab56273d10a89374ba5cf66d1c4ac208b007c69b1669d0df7559a9d0041012718eada070912798fb0eba5fed04ad81a56dbc3bd82f63719d0ee31fe2b84e447d178931deb1ddb651d7ce0eb3278ced9b1e81486c1a261e0c41f5c3b770ae3156b271d3793d4782b218979df0acea79151077b8cc7109c08ae71647aa76894120e17f7ddc9e303276b94a85e65b9eeef8db22fd70879756f7eade516422408b06c15dddb325856028f109559cba4a03e62fe0bac8531681027ed64a54bc8f2b4bd1c5795e4e97e5e8f87880a6905bc0c200bb7d20ed92fdb5414e6d130f59fce69a5859206a952af46053dd0321d030cb141dc420216dbf286d1b09d541b4aa4d234df2d5921da189090237ce41848b7f44a30d733681c9ff9e924e7d719946778494c035726959e33b887743fa4036bd06cef525fe1381df1452b07488ee675993420e264e97dd247fe04a84535a10ed4bfe19d7c9f5b26adecad55446ba015babe57f547286efbf1e7d20c47de3377f37e633027939b34350c2ceeee2ff4a30a36de135c427c21b64219a10e055c8c99ca07f498b7f9e1cb8de9d4cbaa7b4214d6a804e5c0fbbf01711b2a95063b0743f0c65cd98485a36a51ea2e3dfe2e7525207f66ca859924699bf4b098d8e1441a142f48a87a0aa8f89821ff5eb06adc1f9ef67f46de1734b94d9b085da28c0c89742c5b4b2aff8581dac8d6ea4dc805ee32817208db55c5b0bb114e9a98436bd4df06193e964b94a8c6d25edfa957a30f231345f65ab3bb6be9f2af45e7631b445575728e476071b4780f6aa637892df6c9251e5dc56d43b7393b12f2b5b10856563bbbeb2f811549ec1a9ee8a4922a4a49daeadea5877693a7a8cf86b180fb7be1f28f5b4ec52e44ccd35dba5ed0cee8f694534896dcafd4ddcf96f241e4e82dffaa68c1a45e7f240b702f4f0f6277559c1ea70ff00b41e705b5c2399dbf0bb263630d55909f6a77197a2f00fe90b439e9b598b6b81aadecc1f665172103017244bc6d526da742f37dbd2984f106009a7f09eb194b15f7b393dd0b202adae50642c1804f2a5f662204e066beea25a0b1409efe6214a09a2090d2f0c453611f74d5aada564df3542e3ef38466b0a57f9a912b9c70c95889c54aeae1c0b270647707ec2c16a02257a16127005afb8052c9a800579a5a1c3e8b557f092f8c82eb2a1bb6caacfdb38056a35c84825c73ccb8117b2583cf08f02d48b148388f43cbb612c4c308c9efbd0d4a73fe91c5114eec159d4e5224b329c589d5e0d3858fdf29cb5605d60835ee5fa14110a08b08b683496fd665b18d24a121f49fd6dd08a5efbd776b4a204f41309d5ab4725db8d9b9a376daeba551da46e204f690ea49fd9e2a5e4430c2f7b933452e73a414cbca477533e953e71e19b2e7e11b443949272933a624ec7ae96fae4cd19d4de2e5e61b50dba79f915847863e3f3efb0b8ed3dcaf38c3985de80aaaf0c11df9bf1ce11ab71356d1c31806977b58300441f59521179be208cb4136a203e44742c7afd91055b9cde22fba91d19dbb3493bc8a76a82edf46429df79601752cc07e610ce5301dd27ca10bb5ce4c82f8d04d307629832d20fece249d968779ce0e0835851741223221348c225f49068e57d84d1820a4ea0691c64a4be1a856f404979d506e5915872562659b236410f4f48cfcf1e22858239087f0ff67b2e504f0d8f5744b0cfccb9bd18b9009fe0095edc893b49366315bc69f6c004a4bd9a163d9f86501b81c676fd5ebc54fc75405153c0736f3b2a33d341060a17e6d03eea54599711f8129d4e4f6469de9b3890446c44cf495b716fbbc0cbc0336457063b47b44d9fee87da931685e248ed53b0d347cb410f69a891e37cd055929653f6c988ecf764562455aa9988e9bf28ee0ec2e28b5285d43fc769251d421f2b730295c05f564263fb90a31214b4b067a74076693b5b1208866a73e61812c181a7b6315f287904f5622e9eea30ccd084f6c8827a9549b9992aa243b9ab564f1529a44c5d40d012691dc6a71485a392cdf50bf93070aed3e0e032c095bde09b818859784ea221ddff51f8bda07a573beb6e220195c13cac5835ce5b138593b1a7feb4be2e6ee85abddb0539f4d9bde2a8230b8a5ff6ef503160206047aa9a337a7da0cca8e5760a71e3d2da07b6f21f8e861ba624e9420d28ffb33cb97803b64d5a928c8724578e18f36fc1300bfccca896ab6a16bdafa122f77eb55ec773e68a2a033ef3a081c29db4c0db7b3947cec9fdc133093761cbbc9aa035f4e29139235175c8eb750b2a7c8453adc16503b9e236c4c32e38c9d207765c2f6dbe66c796c1351304e371b0bf6b4357e1f95470eb6a347403c851ebdb57aef0c7b725e453d036e3fc7992a8421495233e0b7b2d7a769492718ea1a5f0006b74cc6b0de499d7f0dac00dea4db835aad4d7f4e05171879bedc8de0d00a83c578e5bbc5aeff0ad2e279c8f3d4ccf884f5bf0e9906c09ffafc5f965bfa7b4e109344719ed4b4429ccc7d21d990a0010ce96ac04b59a92c0ba34a8523d38aa970f95002ba4d20aa734b2f8a6504aabb7b7001ca9d3348c79d73a927ab0fe5fc14a3594b352d1f420ed152afcc210c1323fbe5a5cb0518151a7b12b55d687c3a4842afd18b24f2f85529cfe184270297eee7e59165ef3394255d1ea6437c7bb873fe626dcccccf28e5dcc046ad8969354eaa26ce6a7b75db325051c905e95231128a82e3df63e05271ae33fc4a20b0130e9222657faa9f8f315a6aa2cc08609a08a5f98f770c9af103b6cfc929ae1b609edf2d0c5480a10a9db26589e9c68d153b5fa0307bf5d0a9de09a6f86aae266aa52560b41270219b69268f72077e6819c0553c0088f4221ffe0fb2ad4e553e56be20f7016eae07ca96d75e84ea84d3bca3ca1f3e3a2e94a1b9ba8678c2c857b856153bc9708bf759b32a17378a74e1494aa588a4895f5f9d50615a99582daa5237d563185b17f8aeb47fba222473ebfb6fe233aba885caa50f79e56e21f3fc93091ff6819101eca6630f9eede2f76fb33a3e6d8375a12c469fd18fe13d29664a930eec468dbc23bdf0221b91b1a7160a14b8b8b091ff75001df474d18c1f39a56220e79b32b8562a2429db37f0f01a8ae8dee514da1f938feec302dcb93467b63737206f24808788ec4fe49853698d88d82d1b5f78dd78395aa7a9ec00be7c8d4660db45c1d069207208cbfcf8798d5638b289cc1bd5426cfd6dae55e2396d2aa215507a14927b7a17e288e2bebe9d0016ddc56d93ffb1d7d10e583b8021a3a98db06642969d60996ec61e72e7d5f50bec3583f7aef7e9cb9cef8b65d556cf68c71ef0518d8ece17cb5ab55312bbab55a81a100856ae8244aa08e2d1bbb975366cf1bdf6676bd5bee3e36657c58ed9323094b7583edd7148561a5af9f9a4465c14fad3f8ea7ac87d8a194992eeeab6ec78358dbfb12787c6842ae6191f113e8a317751b10316c62465870f0cea6b0f11706e49653a45ccb8613a0ce3f20c74417ea2421bd8bbd56ad5f8291d6c817c246bacb280814956aaaf4a5eca4a7e2f0827e63ac7ebb3bc2c57aaa9d0d09dbd245fb5039d030c6723e0a18105a16ed339324eff02c6460f43a7a8976797dd310c51f39c72c66dcf4a93480f18de1027a69fc3dab77fe679c4f3a560af9696a79a0affb4965fdc6ead69ff0ae2abc8dfac67cc30aaba20516374ca41d74c09e5802d45765b76b7e176d0cbb3106537b0afe4f4925c9ef4a7223fb2abfa883329158b13848363c8b0c8b6d0dac185689faca3cb12d0dc63b79d44c2d05d43489371e255bbb7cbfffa2505922f774b7098a4daf4d6dfdf265811998dd14566f498991935a98efb408142ac5f2227574428f3254bc94e2a949f8dc2ac2ad0fc148c0bc665294fbc0298de0d70391b010d778bd3cec08ca4c159f97d90a6c2802179bb2a90f0e80f0f80ecbe8b08489da4ebbc1b8c294be026a6d6c7b0d215603946e5e9c9c1afb2e4288273ebc2db6453935efe3d9c4ce8df84360c3db52aaafea5a50adf59453ab0066c7753046b5b2d41b02f95d9fe37c5d513ef1c7a1d4bea61081deca6b2a9fb64174bed2fc667c1c8a867f10c90d7d308a0d7f28080dff20140dff20921bfe60941bfa40201afa41201bf6812034f4c12836f4834834f4c34034e443516ee843416ad807b16cd887b1d0d08703bb114a1cf7911bb7689ebbdaab0cfc26b244acb86b7b5248210ce37e3ec5bf1bbc803dfa02590c8c4f6556d4b33b3f30fb275e9d5176aaebb0b6e17fd1925933c11b754e877c54dd1a39091c1d84aa7b31dccfefa7d1a2d43d3c7fed92542362c74658aedab8642f15dfbaaee7afd572fec619cf2c0fbe2650fd79425e960c02c622eec69dfb2f0ecba2661ff28afca61a4bccfe6647a7390fe5021123e22fd91ec776b4cea6e2550129679094c9876b4ea9914b17dd638f4b3bb23e50ca0c584ace5e26443dc3ff6ec326badc38a32abd724f37cddde4a6c2ebcc8fd0de217d4be17050f65d5e1a0400a5147be5cd97de6afb72d33c72133ed8483c21616170e9cfe868e6049adce4a20b8f9a3a785b74f305a93b06a326a076424a7b810452fcd45b6cbcd077d086b2f2ce2493306b39f102c8ad1546151b75d1ea05934a1e2c28b60a33e58ae4893ac6827b21247556ee2e0f06a46c545502b5da32bcdfaf625002c411815cb575ff72339f23d32876d01201da0635a24c6b03397f19738f50486dbba45b7326076d48c64204ba95d22a822e55d4db4b7218661c72b33f64c54a35dc0d0478da964ca867dba4070ffd5eb65268f46248e7468391927b6bb5b204bc0404d014ddf7b3def7be2205e1504b55aace50ae255cc35da33e95f03ee2275b54b7354b48073647f36c738d2c9b56371b2fe8441c0a8d1bc7e375eea8154111ba7d5426879ce74838827ce92cff80d1be8e42c8ee724a79e3f99988b43eb035171072cf2df5318bff906c88c44a8d4dae4b9558252ad1ec08b08694da28a3c303304edb6e572171b3c5aed8da6861deb09f62ee9a443b484e51411f520611a9f626d60c633926052f2afa7157ace09e3c23270bc3dbcf30b47b02349699060730041e039627d9d613eecbda311ffc66a22922c16287fe7ba46f2558dc5494269841fd2a4ce792e4cdc21e534996392c5d12a1d140b04eb9a48a1af3d2708d9623f4e3561310b084afae0180d834c75a524716aeb9e6bd5701d79565b1ae636abae10851862fef3941b84dda26130b9add4bbaeb12aa6e4b0154f8145b72125330d62844fbb2b62dd25cdc8c1a1f932bfc22acc6c2acea08e051a310973d60b84c4b96d122e2abdc94f919ff15ac0fa212b19dab1b862ced80d3720c0bc077d30ea62c2d5a0534656ac8edd53187162e406582dd72572a9febc6d114ee00c884606bc49c5d1f9e92600c39a06a57257a1ab89228c4ecaa65515a95ba6a1580f3ac2b6496b5cea2b481511656cdc265bf6920f2443a867deabb172e7a14775ee27142cb0c5367277ecb9d2b256c480f4100f7e3f47be49ce1134a2bd20b7d8f456948aa20969961572d6b80e51bff33d8facb140ec0a4bdaee1a2211f3fcb4e0e2d37d3400c312c7aae8e2087d94b1f48cf0f8ccd4cbee7f935f5242f18b0f5f23572a175faf6b8aa92ed40c279ba07d017ca4e9b86592230369a60ad7673cd3f442c1923e25d8be6a3c0c4ea7259d85611741a30079171d17f236203ae7eb9e80adb26caacf490b3c2b1e84bd9da7d73455670c3e488f87d62ecce11109f98f003f9e0a86185d84480e4fcf59a89bad7f983d54b114f449cca34f77160b670204f1213141914bf151fd8b468654aac5ec24284d9104011f41b3c1a2091e59ce3c6e343bbb8d6fbad0575089e955ddeb414fcbb43129c7c7d7fd30a07ccd483185e16861836b30924fbd3c02c524745c586481abdd6d6c2698456fe90772898e447c2895e9be506da4825d353d60258407a975ffb20fbe54103b4670e31bda152824714ca4b3f3c00aeee97fe4e58af7de9dde671645e432f22f4fea505b305cf5aa19a0a282bf1f3ae63892b0ad32771022dc823bdf04a3e4678ce4eeace4b031bf381839f4454411bf632d3417bf8aeaec7ce444a94da5f23bc9a627aff8accdb27324b73b618573e837a36bf3ff89632e4e6384a07a2b74f32f443998073ee8b32fa1bb5f77184580c78bae5ecba21fef3407911381d44e40c0e59c93a41863074e7f7c0d6d5f5b94d67d0490ff1c5921d3564e49d95a382494935c13afeec87b2df8395b8adb959a8253d9929f7352dcfc7165a1f309d3a9179a086d6a963004cabfe009067041fb46c76142a22a8e1d8d95ef74200e4bf2d1bb170cdb1737ff3cc2b353d0e7f41ab33022c3c83d05b3deef311284ab45501f42e7460936e0db82ad8828168deb714720649b42f08f8de072d7defd00db722467d04b7aeea051cc77628ccf8876c5af8a1cfc364f8cf1e930709352fbbba0be25c481f8330ac595479e3f8dfd9099935772faa7cd6f4ee8af2de750cb9caac29598cce68e39d8643546ad548f38725436412eb8fff6e6e0d778e0bfd7418a78036fe14034db08bd2535e546576d5dfa3d6eef5c86239a0d25b52b3456a55a89024d08a90ae18f2ee30bc02ffb28c7a471c7cdc7d27229563ee75464b08a7a1909cc35f6daf78fc994772f6e0ee29757341ad0512c6315f5b2186dbeaf9747aecbf1cd8d404e2e672ec8635810c98f1088384b0a472b67e224acdaea9b49aabcf931705387c9ee4ee11a4d218600c270f5647a311086fe1acb29cc7224fe85d3a681c889d0292d770bd4b412d95428136480e13b7d72aecd51460569273aeeeb8b1323ce59493fe9daa295276344288064f13227973e14fbf0e8d445ee7d800077c75d9a101a1c990831dd9fd25a9c0533f79c5451b8a27065bf2de01ab678aa5a4a2a07ef2d7690233c0a2366fd74ca8cddbb31917df8717fbbc9ddbd1ef179b35080ad23f6bfb0e8a8336e3e6d31926864e176912eef9628d18a28beb15699296be0be759f6dd202e7ac30d598e301d43242385e2a1a1bd589484bcff9c8adca257d30650084a3930d8f8373536eb6d2fa4a9dfa9912d385fff943f272af4c53a2eb0092cef14224ec7b013911ba8518702043db55a694a624298693b3fd8af29e454bb3fbcd412308bdb1ab18bf45f652f68a3751014291e2ace6bfeac59b41ce6402fdc84df476de325099e759178a5ef24aa003fdbe1428a6d70287b27d86f0b5a675f3b5965741337f2e38586da0842cc3be80f2db213d74ec42464a20fd9c88d7dc4502c220ea66db0fe437090330c22c63e1da1a90f5335587e3592af5664d39f284e11951b4a448a8a05b2284efa3ced41196b56354e8fef75baaa1dc4feb85ef08dcdc2028f1daee1f20d6ab997541f51c8bb4aeea7af580064b55f90e61139d57e28d393096ef7e11a5098948a03098c6453438a3a3d856750b3fe26e9a1ff72e9d72c7d44866bd10001284d55c81d3ced0a88e7f2e732af02d2bb684930ca86a11b86158cbdf2a8a93a59b3579820f9a150c58422500ce9f23e29256bf798f6392689a7476e07b5d5c444d03fd526808cbbd6de81a2366ac156e0ea2cd99d7aef1096d862d6164d343c6f7e95a305e006762f3ccee4b125b1ad654197812c4a82e212aa751629a6aed799450f439b422ba6e79394b5ac906b8af5474bc340dcbd6cd053f6caaf2dec5998651e94fc5d17a2274fbff46febcce2a01331b0570b3b9f285b8ff44ad2b995355d9f4831c7246bdce3cb38cc28b472de81dff7681d33592fa2e488aafa29ca76ea5095738a51f44766a10fe88d28c73acebdf99857f670e774bb6d25bc4d9bf7102801ef841f6be2e8d55e193538551ec608d91b35a27ebbc0b91d3e4ddcc87bbae116c1f1d5b83dd89f71e921c1196ac27616cdcd7af66857153d6e2f72de5554d1133839e8362dad44618c28436a3ffbd3add4fdc03f9d20129370f82c4319594e6c97233a2baee337b07b9587637273123c018a31979cf540f4a00baf5b9c0ec8053dd8da9944ebd4c364d206718247cdb8f75d2a25273947a70a84e7080f7f6682a33e394fc7f44dc890e20b65e289e1052b9ad729ca6fc45c1d273f00197012351f7cc98684655a687e6bb4a4f0dd93e0fde1682a3402378bcb4fcfa0ff4f683e6f2f8c6420e47110d1bb7384f498d6c5422ed2bb8090be903d924b325704b0dc076b62a9f502be7b09efe9fcbe51b1b00ce4a4358a24cf22b5064aa16280e7b4bd6584c5d50acc44745e5926f59d2214f42cb6d4d29ed43d1d3e499b0dcbfe1432b84328488dcd6babeb07177fc4d84a8d6b550a7d7d9b80f0bbe22f15187226936e80f22ed4630dc2450831786bce25211e2fa53e9f890e578fc99b93bdcd19699569759a8a251398db1066dab0b77f32942f4571983d40cc53da89fcedc9cc96c4629fca07a0a99252d38fb99a8ed560328916fbfe05ac4681b465ba6bf58929b55612f1cddd2a0e9240caa66a5d8ceb93f5034c67028f16f3fa3d23b5bf94f7c160d15933fffc6777d7bb8f4499caf6249510b614361227668ad7f061655fa5345267de19672da03f8104af2d5018f79f6730a20605cc95c00b818519442d898b9319c512031f45a425689da58f9fb4630792bc8d177a101550e20f116206836df37950c505d309388411d2981d5526d50b233216d623a20f3f75031aaeccd0f8341db3b14350b74d893456dd5f9dd0786034f58f388dbc07ca020a1b268617e3bf6ca1a59bfd91dfd8fd3870c3c7eec990e685a3743683918daf8182addfca6dccdb36731e66f984ac2b52583bb4d869149d84c58c78b250bc545fb27e8d8240353af8e4e199219ce994ea29a4a08d120e94e8bece397837dfe2a3529fe18e6a9f9584dd430279ad74a10a6b3b21509c71cd7a9b1fd38e4b32ed4b325e6f0188682ea71d843dc5a800f4aa84594e05fdeed70e326ac818a3f8d527a83d3c1bd0200d9dceafe1270664d6a0454f4c54dda80e788faf26034cf21e06b7f79f63c650c48ce827c889f96bbee514dfa38a7c0ff6aeefd1c09d3389d5d20c24e0e5e54fd9d8a7e6172a03cb0fdfa3764b0b4931c18928889c0664a1b600d6140a88546dd5bfe3ef7207ee9017a30dff15697742d5c9f0bcd5a2f7c418a02bdab56d10e348756618d7138ea6315ec8b77123999ae323308a61f2afd992f14236811b23fe68a1f5ce7cd9e444a97fb408cff8d94186c6824ca6d32969505aaceca44551f19d643af90dfb8fdece03d7e6b0d5c168991bc9e0be24a3d2e4a729c07623991551830f51f715842f267da79bf1eb06354462048ecf92b99c0d3903309146cf5f96799f698ac43a4fc42b351728f1e392696f7bf258b46aacdaa0f20f2566988506f2771b0e46542eceb7513e71893aceb63844891bd20b7d548e661be2b18c405851166ba2da33e5325b38b7bf20b573c7ecdc5f4c756f43bde2af095d67d5791fdd796d75d53dcd5e19824f1ede99014b7587057ae7872afd7c83aa758cf23cdd43c4f30a7f184d85f2d06bcefd3760238a453124f61b6b7efc2d58373badc2ce154480ba23a0159c102b58801b33fcad594f24db101cea731090c4eba98d9c1403743f2ad002b7657dece030042c522c25bc0f6a3f3ef5c197a5ae3e1eae9d370f110771e8c3bd06f50999d1dc8ee0d0833c233cb499ff980ed0ccd0c0786576b96bff7327d1f31b708cab9678db5a1777a9e4c4218261a29f0e4742a638c08b707732a1457fefc1b2234fc30e198897115b49c8e3a2cd297e5c51fc62e096712a501314bfae8fb86c0529eaec7423dff122e0431d55eb426761080630550977a51c6632029958aa0ac19fe0bb9294c145d2f0ccaf321891650e81bdb86533d6c179cbea1697ad187762574956e1aa25c22ada59c7eb9e1c17579c3c1e6bf97938bec30cc1b0a9142874a67677ccb99d95cf77d084099c344f2304029883e4cfdf957e78908a39a24b791649e0d67a99650aa70ea7634b637d910e099ed8ec1224b845bbac6559285a4813cb52544f68bc500eec64632e29b3d69b309779b1f06cc3bab454957de959bf9a1cfcb9a99b6ef9abffaac91e1465c8242d900b9045681bc619e359b7b6a1a464802aa3d45db4dd6295aa572cc15a805156b603941f21a9ef7f48d74870066882435755b6f8ff6da834c0659817f747b6b604cb6227256c160f8eb2bd9739fa9c647286ba110c9cf6a44b32fcd372d8a27f6d5380b5c9469dc7e675cbc1085fa26cfe1c6be2a85f8f459599c1cc795f4f021938fb81294826935f981a4bad708791cc0ff209c9165eb341403224c1bc94a48ca44c50f610c4d8367988a3e1351d237ef484d4d3a2d662b47a8a3b8b12d6e995abf8b7cc8378f06787e01cd16c4f19d9aa36aa166e9019b3a22efeb80735c0800b1c9842fa9b89bd0ca3fe230a3c9795d267e89d182118399d61995e50e718017db27b881aedb48de8dac34c9ceaad8a034078a2b12fd3a49aae9ed8689daf82efaacb4766c488a44a7e39d0a127a23f633d7ab27eb8c21ddc208b8a9ca1c8e8c5339330146b4093645a14bd2a75ac5106d050e0a3d82092be84ce054e94967e68fd1267d0b126cdd8f63e394d26daf4b9542ae00204539be26bee170214c8cb9cee0771be02e92774dccc592bb5f79292e492803ef192f687243271473648b1a91d0ae9ebb1a4d0612195d37c71fbe0ac073c28f9c2f8cdc0bbd27e942fbe8b4b50ebf04972eefa3e566e9606180dba43efdecd82e688b87f42c29de0165b300c14231c29b1addb5b6bc8d53814e9a2972c2a4d68f2412752908a64c2a5dac34f9be09721b7608a412fdba2f3a424066f4cc639dcd9687926cc35fc80e977de25b146b8c06240d9cf22d7ad4e155c1182abfab40b30f020cc3c4abd3021127e78f159358d740fee7640ae2b2297615a25bdf02a92370c9b6096a9601c0ea247a73f02231b08a43b3068ce5b81ee6877e0ff0925d2a5740ca76040ea98fef6b8a5c537298e1361ea38f0a5cb597b41dd023b62cc87a986dd9a9fec1eb72ba411d7f8e9ad2f3028b15305620883f346faeb2bb3fdd311279048a8cc19fb914021301ed0b6ac7b92dcfe7652b3e53cde1779de57c10d885416d5a340fd2a55783baccbdda8a42c6a00f663d9f76f23fc4139c0e78f390104504088710a59f977256f51f7b2673e8aa9c067473b0b591d4de12145f427a7e50ff3db8a32b2c79b044fdb5f9af62fb36094085a238562815f940d59c58500d449328b3d07abb522a2a94f6898c66aad5c4cde89a88258dfc7ee69d63c2564f5d7f824e6080183d4d63dd62439dc3eb57a1fdf138f983488dde612ddecb7d4fd03baaedace8c1ce1767de4fafe4e474aab5aafaf45e9d4cdf8d345bfe446b8f089e89f72c65f469cc1ecd3bece6e44e2de38cbdec058a052323c5031b41fb93ec058a2ebc0977def61eea7bed1c72f5443326ef5cde55dd5118ea71d5fc29bf8475c50845b5dc811a8bce89b02dcc00efb5406903db06e35b1724aadbd7063ed0cfbee5bda257892fd5d319260d1d8560e4c4165f4074b87f97a84d0fa013552b5c1b3fd42187062f37421742ad555784c00dd7e80d6e4a256afa22e9f94db9baa2bd0f3c877d1a2dfc663190c1423877515b2813421ec317377f40ce8e79918153987d5c17fcf0bb9a6896a77e27b1f1e820b1a8640d3a6dd5155c5f82c1d1a0d433f5b6c1e9c2c6c8cc32223fe3d63ed8aa45775d4599007a93327f0d54f6a1ecc7d5369b0bbc1fed69957953f3eda44626291089b8054faa47cb0b9186f9a21f5714c414c0ffbe8830f6036cf402abd96d795d945cd9534aae93e416b591a7cd7a860d5998d96a30b80f417c222c27ac5f21d0bfad5167787eb0ead0e02251617f3c32f34f41ccb9494f93587d7b85a8e57384d033d42680c485f2f1d658bc51c33c630010ff9e04b8b0d654aeb0b0e2a4d4b90e3cd3833375d521d6355b330ee0ebcda0d17e52855228531816853397d95380dc0ce15b844a202fcaabca781b71c6550b1459e9878515e5582acb6266ac7c8ed3ea1ab09754a9c9b15927b62d6ded18b00949efe784046a6c4c9bba91527bad434b65a625c333d3973050f993530490c1defa602ccee64879eda322891c84ca3e29de996ec432444bc5abae8bafea9af2b1967c91487f6684630ec5be576361a3fefeda417660fe979ce45fcef3f561649c3abaad2f366f76d63dbe888eb1c92713b1abbd3501a74e7885eae69c48f76f31da3c33e8b2642bbf0931d88fa212c2002c8b923aa91451263cf94d679e1c5cd5c2cf92ed2e47e331cc6a39936dceb8f28984d4329a200e632e82f2a78287ab44165f2f167f6851f66432165016c02bb7adb0d62a8c688b7c4642babc416aaf88ade509e8112a781457572d5f8a5ae4ed4d6fdeee11c446d07a8572926d45b7e9dff2b39da5dfdf23219b151a002cb87cb52a2dd809ef086ef633e4e38dd342a7df290166f353336021fa74d3fb74a696f858f2c6bfba4a562a9940f42b25494757e2e0c7ec6fff5d96a61e0a0ecd99b49317754762ff8e77eda551178b843e64d39da0f6b4941938ca9e490c778836522d2101aa9fe3b4e2f21b4da7d173c17f087448986f007e389c83fcd354edbde082b44d1614d53bc8751f319bf0fb973e8199159236947b96f87d7b953cf7aa920fe57749ac687c595c2bd3dc2bab965df29ef9723f00b87380d5e892b2a1970d1d613b746ac95cc696a8130e06cc10aaa32b47afa61ad3fa87ccfc42b0209377197d0f378df73bc7667f1758216649034893455b4b09418ab4d4a3f21c9318a1b3c5cde89251f937f84b115ab1812a4ea23ca4e3058563004bd507948dfda3c7fb35972130f57ff739747092a474aaec7f2c76d1ff76a04f24c5c575d954b6f6885d670578ca5bc8de0d3ec1f2919605e0f0ae0b30354fd677913a8cf0b4c34aa0346ffa91289844665b2d4866751a3bea744bcb77f02f29da6be6e77569e90e83a1d0ff70136f927353da20e388ac0330156cecc76370effa37aacb09de2547faaac05cfd4d04aa5b69fa5e61bcb1b5a74596c4b4451d170273f5ccc57ebff43961237ae15538c3e255228aa726f7c472a3f0db77bb8cf56bdd2e8b8bda7088c0d2e41070e8a884feba0dc33f63901ee8be31a6eaff429349ea4f054275de07abf7e87c3edcc459a128588ca9bc8ca65ca8e978408f751a2dc53344b02302bd906ee9bc27652fe0463637879bb0fb59528c19f81eadc2e1f6a78598a5b3d29c779b79bd1dea213381144638eed4514c6c2fd3e296de817c6c6b3b16cad987cd2b1d9e20219fbc455b3a8b32bd896ace8541c2c4dd5890a99582a89c494dd418aca4ea1009fabf90b8e29f208a03a1412f63944599cffe18f0523140189f2f6b711aeed2bac6556e938d41b33e2a700a728e6458384af47557ac5d252e931059ef82ae31644966c54b2b064a00cacfc34cca7d32722562000fd690297302ccce4ab28de075ab0033674b7dbc1243aeecd3ef965da5e18a1aaf42076c005e3935ef719f3603c4340fe166468120188f5731d250e405fa947018bb87a2cc25c2f0a36a4bb328277d3c19572aeca20a402270f251780ac9c3da2577c3b8214838e36321f7268cc4b1eb5411675c7505e189e598326526d97714f606bd2f7a913b15346f43e72c929eeda91876ead417f9bd15b6982208ade84aeecec05807212e6abb0effdf38abfefc4966d475a0f2566579636bf30752d2bc1a7802e23ad0218d4b637fa34d0123e41cd8787f1f9fd50960d8a53e129c6f4f181e76c75c7eccdc7a9ed01158f395d8b45bb52b8760ab48570536782daada55812a250124b81b83243d76b882ccc32e815fbaff9cf2881d0160097f5057bee9e0caecb1df60ac44087f90f5dc29278b87e6f85680c6226fbc870a452f92a8eee0745ae12281ac9fc6d10c0d8c1841cf86cac87df5d42d616adfa47a4b2971d28d465af00775bc193f806291b4952d60c0e581f3276db3c298fd89552e3b187b19c086b02c11d4d797ce6003f0bfe66dde2dca3102c4d1879217670b97cc9f2015a7ece1ea22b2ecccf846f736b3c290058b1f898b9030a1c736b34d452dbe3aa93ff3d25c15b310eb48ef7a52422c03759daf0a8069ed843e1df0cd34e83cd5ae05763d879cd3bed9a14c096cfff2888a884a30ec5eec8edfd859c0cdad155b642e1d856fdf67871da6cea7c02c136b0ac0864e86d9b56b7802c196ff06d591636cb11690b70a0a1502650c6cd607ab7efea5f2c4975476157257d92407937fe5dc308f7cd116124bd1c89a96afdf0307b75dee9c573a24b34ac0b83255b2f8d3a96249a4ce4282bf565dfcf3ac14fc2c6f3349a25a84bbb4ebdb1b64d43b17f8dafb3b4b54b94a344b0ee10dd9ef5d6a1bb7acaf16cbddce1c1c30952b0298e459fbd88c9113a872278e8ebc1ef9d454662890c52e554e4f0fe089ce0290600234a08ed94a82732c004d418cc23aeb691518c8e4bfe244f7bad1eb49596d9176511837214f25fdd3707a035a57c513c7940b240bb993401a6b209894903d02179515ce933fe387a32d531aced1a7b664a62efb7034062a0cfae08dc9a1b614d9c12c38a8112f005bcf3fa43609c9f34830ab6ad2a887de282cb74e33b90ee71a850cd8f38c8631029cf0a35d3f23bd79bd9ec988d2fbd780906a8f5a527eae3f27ac187ec92e8cc98b0f17cca9068df4b1a2893ab88ca67fcc9f20b2858180b93770ce16f39a071034fd2d8d91d29aa035dbd3e8bb96a5a2a8c6a9ae512fd31364084f150837b22f94db871567276ba110f46bc0beedc233ee6b72c096a598323cfba860a24962c90b79122acc8fc50342d0df400fc251640beb162e62d6f0aa181aa003d95f3bf4fd5402302f0b85bc179c4e8d4bc3de0e0e73eda37f392017565e1207881d237c419e56031f7e0c2637abd070d16221fbe28d7e51022fe4ec82086317c87e3bb2c30b037550fc9f730ab715d432ec013a10c1e17f98b50643b140e4728bb1b0fa073824899156309fdf079c1814d19b3a36af7bc5855a05f2573f7bc6881288fd297dc3b14c87d528d6a46d0f8df556a48ba589795b4368fa8a509f4857d53410e04f7d22627266c848773fe8d7698ba03675bcef04223e2f6dac8da1a01655db0da817e8927c00f431379449daf78882304f3ccedc55538988d043e90de0074ab893e32bc781de9f1700b8474c5aedc3b981997cf5a7f8693b4fd6a8999b85c92c552f9f3c8a0f894ce26259e1f40ddcadde301d77c793ee02ef9486584630b66064277ad6ee9fc9a5d40cd579e0c45ef476cd2614652da2956330612bec4e77aef8ade5c25b176be7a21cbaced3874aafd8951e10724bdad62d5e8c9f420d4f6452318287cd132d90c5067a6490378c9c669be9fad64762d9e5d307acb87eb56e42be3a8a3f2370053926171ca24191b988da56d497ffae0250c6f848ff257f57188afb5220642d4feee8d826b6ef5c7cf9a05e24bce7122ab3e34302568a228ed1d142ea60b8f2c9fad5f8dcae13b4e29384149bfe832ad28b9926f53d62e5d6b9918eaefc6d86344dd5a7618aebd55abc5776e6ae8bb9539d97d5fd69318ef7a539a518f15f47b5b62e1d1073ba4a59da88379824c7ad86b1833811c7dfb82208ddb214073df8dccc4e73e19989c00abefbaf334e6b1e0787f9a0c369d06fb35122fea622b59225cbaea2bd857a6e10d22abc265d1340e52ed99dbf795dc1f43bca51edd82f2b60bc3135120177dfdef1f9ffd81f2266ba854e202d35836ad282860865d1fdeb73ef0d4c15558bef99d3dae66c2e8b76bab41b7973604b6d6440c5ce058eb746ceb6fa5d00ffd59f4b6f0bd0f412cc7ba7dad5edf4c84a09bd1bdef369a2e2927371ea7b1baed15bd4ed1cd8460ff5fb2a0ce54777e199bf648dabf62ab840cd6e357c1f213954006f5a79efd6e4a0092cac05a732836406bb92c3098c4805e7ede6d6d68d9c209a73265c6e1f44b2caf0648f875b0c1821d2394ab081633e333f163e903b9e14324ba8c0b5883a9c0e891e4389aae61c5293aa043dc318a0e650436968f717153841658aa2272b67f0d6fbfe531315c86bdf28d48d17c5aef1555d262225ed9c76c20da7992bd90d37689fa102bbbda5b13112d8ab457484e5181b4b2d5840480d7da87259940132a44f05f848291042e34d7f4ba5e8de4bb5214ad814787984eb23a43f38eeae71e50836740809e6ecb527241192f6b4e20610ef90be1dc918abd40f1806cd34067a37f5b54d5097469531d2eb051d24ea0edae8b021700081f95e613f5830bb37c115f0965e014d6357d074b7b5ea475a260b9a1c02c757d4ee7e0d3e0d3fa93761ae3717e4f7d47e92f9474e4872131e333a9b210d0fde64d2d2ff1ec2a28422b05dd268888000fb82217687a8a8f64a28b54bebcbe80e59147134c2b493ad4021dab18f32ca9907a2f5769329c06b6bf67280a17351fb696ac71a86c732a942f42e1648c00752abac29820dc0fce96ebffdd1834832440385f40d6bc107342183cb510b3330ed9def39239c2cb0ea4c05db39bdf88372a2d8aa4b47405058349813ee807448d542b411849d3dba7d8a2cf342f1405f7e353bc7803c6100bb8a6b975a6e407f0012b9aca60e457f0704bffb38d468a9e807288ef433442ea67e0324c91bb42285f463949334fa917f9c06fc4b400a945207243f307bb3a1856f2fedc027f8371ee131ca8a888dcb303bc9f55d9a5e077a457c8a9d563e8b05f931949a9643afc6414452f6d9dbdad44dd26f9b1494b965087bf3bb0bc4f169a473540cc5b7382ee97ad9061c098beead292996228accb257ad06f699d5eced853465b881e0d2a458025ef862a3a26572d1fd7edbf219d6888e722097aeb6b0e4278e166af5a5ff36fa9d157cc5a9f705c6a43ed152c7374890ea84b6773ab2b3f15f518b0f3bdfc0615c1afee7d33d7f8531dabe1065a76b3b946f65e1c8bd1942f01a2d252de1e6a99939979d4f8a7cc04363362b3f51162fdca1e7b3a09a7acbb2659f2936df42215267a300f9e5e6c8a0b833feb170d68e3b766d09236eba6e8be18357026cdcb8425fc1527bb7c6a866478924bf4b26cc6f429224d80e13f17e0f31af80e61ac2e65cd14b188910db2c2712fef9829642b8c81a689ff70990c62b6592069397235c50428499f6e8ac906b70153f2fca4d6704039c80492834fbf6623ee03f420efec7b2e42d09e9e48810c9756e7226b06f514eda5da22e0f97645baf857f6d480b2662410c4e53ad8c29f12faaa505227892232a44f5cfa48de7106b43dc6017d0f765c3f47d24ad2014da82127d4948cbc9483957af900872a576d6d2a543cfd67c5f69da79fe6e49d7018335f48db2fc0b7c09b33390d960a4afac2bad31cd631a6a898105dc4a18f51b35aaa529f381e292adf3c5ebdcb1efa2bb9d26bdcfbd44e1ceba6720d4aa954acbc1221dcb448aabd730eba5c3dca72f6263d0a89cdf8566e667d8e164421d903ae09444e2092312e6f45c90f377d942834c4c35d9858d576daa834041a978700dab41ce6dea0f64f7bddd13beff918104985fd23545ce72d31fcc18801b5330943933390a70b575c96e0f30b09b6ab45ce8bb55aa74f4273e8540d18018bc4aa6295f78e72b6734b7af41da10d9da7124300c8d011d0ab0fe96b99f8dc968615a4104fb725ec8a6aa3909dae87f193a01a893c72b27717df48d2933a39100921d1f6b52d1f2713c98f4edc504622bee3491fea6d227829a6113dc15340fe22fb13c4ab520e0960d590f08bfe15d09b8ae826f731421f012c061d19373a67010512b809178c29a29915a0f313e31b2a8c9f45a6b2c8042471f84d0434d07f25693c2917ba29ad4221552b05529a206cf92407c5cca44f5fdc8466036540e750281f6306f7f6a44007148697dd8db0fa15c89abc4249794e40f1f14e2a0655e865edd5e750690309ae8e8e039e206c70ef7f0345bdbd116ee87377799d06577030f5390890327b14d692224dca5683be9b7c6553731ecfa7f3e910e53cf498a5ded5d544ca47acc02b72df74a0dbbba9226df4f3155b4b530073d1c5385250ef544b682a828db236b6ee685efb9f34c2de48900c389a1094717e9c1005825112cdc869c0ec43ef56561dcd03d1b1c8973f760ab027124033c62b4f195afc1e6b9874362d0cce3f0abfcfc2467c86273e3e64f00a09002004803be1922fab88f638c30030f3b1d8821db5ea9a8402ab5b5802f825ad451fd43548c0446ff4c12a9831beb31883bb72c335e7e2bbbae69e2f35580af8156735d435a74572e32d6674b0baa6bea522151808a15e89b44a2ce4261909d035959113276e9d2e0e03f57f699214e9fdf09455e2fbe0f57713a73741372819d664883f0e8b99876bcf252ed584509b000b7b464d26c5a1dbc3b4390215bd346490f0a4ecbd03cdf19c9d97d09e9b7c4d2240cd959653d6bd528e56fd7cfb06452f0248a6c61a0f1fc6a202a4b9f7c5f8ab9fcf5baf99f072b1446f3f4392d82f41473505602194037cb468593acfd32e268054c0a6bcb3c4781d4fcaf68aeaa115ef2cb1c59456874245c31037e97bbf11cc2df5faf5a8f8621a2a5564f42f9fb3630d199a5ef4115607be9727c71f0fcf004342c3f97c39c295022e162d48786372466de43b282eb4ce5fbb022d122d91a7c3de9b6135ff71d990cc2406dd73326ca2914f301824ef8bcc15e944834e3ac484885400efe03889930cb91700a239c9e4f0ee08bf24dcd34cbd60096defab444e798d40b996051eb1af7d99be465a93fab985127e0b2aed395d55076c0da3b34f06d5e23b9ab3469386b3f92cc0ab8014fef392db37ad4ef071cf3247f34a04e73f149f1fa1304619abdbb03984b8741767ef43e42564f108b27ba3c88daf09cbe5d37923195805dec39afb688fc9c442beeec5eadd931c59b1f81e071fe50ffc192389c110c8c17d2378b1373ef5a9f75a62699cfb6846a764803d4159cccd4d8ffb3304c16363781fe9d2af93026e3e3f214358c8047c0d890167b0442a5b8332c1d4cbefcfe06890465397eea41703c6cbd43bfcfa02b13e4b8e230b7c61c01e1b46ac74bd85d87c47ee650d40d59da02b5c594a1a4e2b30f799438a2e4ff06e086048b8e56ebb69ce3b4d9d9b39cb70cf2bf204663d406f30bf0e01e7c1a47949de059822b8a129f0357e2294e9bd9d25ae87182292fbbb18a71850f8397578b8046782d49c8f84a12d3f6419d5e74881686aff47869ebf0cd216f55633858d2e471869a358b49a756081ae89d35c1ed146f67d9f59880eecff71e22617e079ceb191665e961c958945dd24b451541027dfe909c582186edb4840ff40c93d42578e8a37642776759c9542646d4fc09a1727abeaab849362ac6a762d2ebaf2be5d925552b96013604a09324ab557085f17cc2f43334831f3898cb2a3b92f0bdcce045001ec02d50e10f7b9edff35356fdc2f4f1ab8827d37c06c890886db787d262019f1cb6d5ef5e91b1086c78149113e9175db1792b1de375fc23e08642f383cd9772bec840b745beefd8740f6bf5e318b84b123ebf0744fa64e76b1833b04bc3d3ced9f4e9a8552e9846e303c03174153bee7298f3a6c21105e27d2fe33e06201c787578a5bd84a0bf8a35d19f287bc120ec6eaaee09540dd9aa55a10d5a176a7a105e400330baf0f4d683071b3665e78da59f179f194df9579f84128af0ff2b6671467d2d16d7ae16ed17f166a04953817c9417524ee069d08199f100a8884894e10ee9f44d001ae7a05f10b44c97e739f8b4a6ae0f84fba0b982b0f067eee1d40b1f91ed72f89c743637cd7f382deb0b159fa2ad4a5f763f72d3325fff23468c187b6c41e2ea28a5073c271828768524f835327f35637b4f38c9edbdab74f99ee7178af90d4c9c9ed6ba569621b6bf06cb5c7e5e172a6ac8a16b3fa31533925bb50b3f82a6dcdf993150cde7c60402250238c20f85622447dfab607fc4fec492ae0606f4a02a6d31dd8dc39d566994e9e67b1ac4dbfec6337e1113e48e0cec3b11f8120fb0162a28f07289e56340cc1a1a0ac5f70cd0ca4d02db242a0b787e304ee97ac0bec795b2ac5c0cb3a45f87781759fd53185f85d24ae5ab834c365b26689dc61026c9a69603073057fe572e1f3b7ee7062c61ee31a067d0e61b626fe45efeada61a20da446627e6a4aee58503a9774a97aca696ca8369c12163ec95cd55a2842ccbf2b8196c0b84b8188fd122171fc685e6a09b075b01994e46aa952532f8b27c0725a0d8d311d5b7976c145d546697de3e821ff4fac1c10ecb34a2793d600e42a557258106e41e370b0b434f368eb5f52150b2fdc4e2ac689ce2a94296bc6ac5d8f7b3a5472d8262db3e381a95c673499bdb974399abb28d4e51c710997eb30336b8037eb08ab9508d040522bc1b04858c5ee277e4e6bc87ea459055ebf37f1ad76d5d14ac2891359255c0ff6e52366eef936e2e6572cabbae992b619e4545cbff42a563c4b82ba256f5acd7b1a22ab8da4e3eeb176cffa75b6867a6b55b73aea585fbd6ad43929b9c92147f9e42543963d4c2fef8a52378a2a048a2950669a2e0d72500fb41c81cf4bea617960ddc41ebf3e1121dcc262498c2cbadc02409e0d878300bc766a7e6eaffadc142a979de5d1e796fe48558ddcb9b55ac8033b1d9c725752479fbd105380e2be80466d13025a2ebf500aa81b10c400d49788adeb0913eb70897c23710cac62223d92ac71389f7c1f2e609078926b272ca43cf168b2b9a7d41ea90043ac1a8cf262ed2733ac6585666753e60ee46e54852f393360876f37192148922eb41b976ddea4e6e179252a444dd5343c9f20939655112c0eefd9f521e8ce200e4858727a74428f38e4ca8761eeaa964f1f632d065b8bfb2a37f8ac5b9e908637ef32724a51f3d05a66f11b8700810cca088bee9e8d1f743f48dcdeb61105c0e8401aacb678ce79de6f02e42108810f24e05eac56b4c4a3629937df7fa558726bf5ecfcd4d7642eb9e2b860758d26b963c12edfabc4486e485f3d357184cd41f1a715cd53e241db90f3224130ea09ca584f513111a0a4b9146c9652cc596f857aa78c846d00ebb76995f07101ef80cb3abe3f6f84d448cf9780e2163e83ee6936233cffaf41ef4ce547faea1bed9da4fc55d22359da4fa2be86841ad43159daa79c26494f0fc1d7bb81c357f29e1abde3a3bd92898efa32301b3566a1f735ef4c2d3fda2ae86cdb6d1ee9b4495302561d4dd1a48beb78535507fa184e54f88f7fc412bea7a0d7a75c56ba1a0e9a1832606e078972853bc89d2dc7ed1b250b194a50d19569e56e639dd51ab7cbdaba48c6dd72804b138690de92bb5e11cd42e78fe0d50f94565e1ce960ba64b443df3722d4c034c5eb0401621229a5f7a883781d50761b0b34f0a4c90cb083b31d801e19ea23007647e7d7b89312b2a60d8fe70a4623f90cd37dedaa3a356b48c74a2d5614ab43b5150066d321f56fd6e6a0767580de69d2c1503dfcb91f924f74d0ba32ccf777376562f0805f7188652170899f9135f3ddd4d0d198794b743a3ca1c72214a2557841aacfc22d235d72d6fe686743eb20df34ecf7170f070de46b89f7bb0eb6e11af0c09027b2491c9b8a841cf95785f21c0a1cec9776e2af504034dd1b84239f03ef0103e6c8a4c65ce713c81986bae570b022d6911f716b0ae51c38eae445fbadeb5435864752bfb426ebb5a7f2dc123c81300f1af64d4d30cd7a1f095217830c99f30d3201d911497b03e00cffcc73e7f8b5d31a60078d2803021410b7577fe5c67847e59d424140ec97e81f100f0ca356ea4bd2f0da7c873571226545e160f980632f2315732533c38311899c6ec51149f032720cf65d3c3d523c09a87aca025ac2fe2ed7eb4f5de208781b244b60d6857ee7e84550caad44db178e474690d3d3fdce785c0d615dbd49dd575b017f013d41cfb87018e3b64af125bd0aa75f84bccd3840fca0faab06f5293d0b68fcb5992e16053dbe050eb3fce49d17de8f7603b1bb46651380c8a7dc63f522d9230837fc374e73b7b07053d4bc1776eaa9d0da333770c26c7820abfeb98cf72de61d0740381a8c9bdffdf903c711377caec4cbf8902b3c8b736d9081344f483d0b955461496e053bf2176f8c445a9410c9d4f8b81b88257aca126001087a0c5af80d18a8a6b2a6504aa94d535a69a43575e9d273ac5f446abcb2c2b13a59b48ad5812cc1539193e4e88c4a9a468f44e5a523b3ec4411619948ec25c421ef1b6ed4ff586284013c68bcc9424b1fb1119a4785d1d956f55690ab56dcee88aef11129ca7b8264e08cc8c779a496674e84342e7993691a7e3f3c7971566e5b8403e8dacb3381f6c126fcb4bafccc64a163fbcf7ce019ac2c0fde3ac4a78414f9f4edd6fe6fbecfa27f7a4ad1eb0210c6493be9f69f47849454455edf81c82572e89bdffcf3a34fbef2cb8f7ef2cf1f1ffac9974fdc4c5ae2e5c5013ca8c13f7e1f9532e8ef0ba9cef66d329afe1402fab08ae1d752303d1afa1623456ae667d48757c3b65c112ddf451912da1198c2bc67c571483e163cce60adbbfe721c946308514a35ef4fa8ad890753e5bb4850516d34ede881e3bafa7498db1e958e1618585a210317cc09905d55c374de1d0d090462cc80f781b0b42e6ddd6ed36f6e0591f57efc9975e4437cbd340b11ef389288842e605f225831e02029368a04d43554248d43ded022231df62f22be2615928e27bdcd2c72bc69d6aed2c9d2ea549bf133421a03d9a4b4be484c9aa64895f2d7e80788b049295c35a501a4bc0ec274a419b2502079455a2d630d916348adba6b3ece8d44cd942363971a0c34b7bc9eee66477c5a94424e3cf944221727506a7f7239f236b16e493a13be119c3aea0bdbeb5af00dc6dace228d382dd90395a820b9ab13e819117357d1dd28c1432b6e97c5cf1421441f028f6ce193e7ae2b69ebd2628ecfcadd9a918550e6d83a0e6255648e0a26ed13296a5b86516da0b4089fdbb7c08c0d9ff94655a436ce4419b6aa4e34a049de1527545acdc7e49ec8c98fb8da502697046004de7a97ae7977733c3dfa05a32011ee80d9ccbb7fae664e455c9aac9b650a6f7d9ab02b33f83abc71c4e05acceead028e45578bf491e850a666585cdf57f1d753e3589c1193eb0c93e18d6612e72aa66e2b0f7caf51e8d2b7837a8c95d1c3b674528d75bd1e7c55b9c2b91475ee28132eb095a89a864cc1c392920dea91a522df318748fabb8a6f959cbd917f15382cee8eb505b71593b3ab0549ecc33dd816ed8ba670709d33ddaedec0daaae34ac7061d6237464ad4f351a796b48185f7f2d8e1ae629e852aea383e26ea1e035d6c2599f25229d09b70a29992d593f064575c62a71709bbea7f85ec3912d45fec086a051e4134c879f28f6445c649925b792c109c1aa82755fd933a8bcdb4db4f1cadaaa347604a78190a7914291e21bf839ebb20e6c1e06652b00dc6e8af1ed6808167ac78cc1671f65ed8c88d3c8a344dc63dd3b36f86eec76c557a53a134bf79a6dd2a1991d533c99d018cbb43fa83e5a02ae8a9d21670d3400e0cd3fda624cdafa680c5a1b27f652abcc9c1d24d106cd07fc9dbe8cb49e208a869a2dd0642c8b939be557876b3556fbf0fea71b2abdc9cf24c0bc0225dc870bc5489cd44683b5ab06cb0a6f6c1b690c15a03fcfb3fad5830815a80aa8651beea4f096a2bd7fd2cdb79c1c108ac267e21d073116ddbbf993413ba2713e541c3512d1f8f27fe6449d4b64930c441510aa2dd4028732c09610eef252cc33548c72e079c13e90ef0e0f40e984ca2016bfd23febb3a99cc9c9c2ed745434277508ced598c5209c74f30fe4134a752c5b2845e2f46c7b74c1a5977a959473cd3f700ca46803088fc36783c961a2d548267a0cab78d5512b10862a838454b0c11a856322aa622c96f119983c4a192d65468db2a0e2a2e69ba33e05dddf17ef8c50b9a933d386df438dd37ceb05cbd5adf49cf07e14014c952c6d18e0a69b5620b05a11776e3c821edfbc449d1505e5f4739cb0f5b0e43c45e664c881e59cf7c10e3b06d5dff9c5f2e6af5728833bd218543ae7bb7c3ec119ae300ee316b3ee038fd206ed274509d501fe6ed8a73d7986c7f7c4627398ec9c15c1fec56977b0899865dbe68fb1c30249b434b28bd1e97fa47179fc2bc9bbe5f6d9862c52f3ee2664c11ccb245b049709dd370be7c49200e906a319e8f2ccc0a5adedc2b66039883429fb3757c713cdc98ed3a58602260c56ae7e3ebc4c6fc72db33081e122a41bb20255cc700b97cd66f8e86c84a3d221e7971a91ea8bdbae719cee548c78180e25fcb55c0a10ceeb82fa4b01d95cd782a38ec0d187ddda295c4ceca1bd16e84ab98c0f472717621e3a56130cff320caf50f864f04238f120952804ac52c1224892941e71faec2e87c08765361c935fda95921189c4629891decac8ba7f978d08b79ee5698c9c8bf2b2d5bb558bad62dc717d455768999f976e0298ed5ad3b2b196e1f5c8f760a4d7af484200b545e625745b9886b30010e37203cea131a8888f5c5834b6517807015d631ac0b586fa84e2568b9ba507f98dbcd93eba80d85e00a4349ef0bd4307398f685903de90cdbea86aa55f11cba2036a70793afe42433bd324fcd425d7295632387b7aff220e5a9da3caf35f34ce69bb9e4f4c2e7f3a16a9e486b30af20a39a5600e9b89c534bd8b3e89a40451f69a473937cd40b9961999491cff9ec3677c1a0123974bc02d1f19808892b48fe6a62ac332c357becd7274dfac9b02d563ad7a67c8967344dc52357ed0734879cfcfdb7aba400a6e1f2f048b7787bffc29f90aacd1bdebb1880abe507908cb179effa304e77fa451afecc447478e0f433360eb6cbae769455cc4722c95f4a2188e9a30cab9001b1443e9946ccd17aeb3622485bad00c0315f16ad4069c4f4a3e53aa1fd2f94931552f0040681e2d0c27329df00d189aaafcdceb280baae2eb817b35be7d746a4d39991a242698ad07ed60404fef31dc2dfb9f15061bff6bc66a1bee84110d68d197a215546b79181b37a711379f85332cf1a646cccf70d5d11ed7efbae36655a7ce2e452daf10dc9057189811c635b69ce7f6a9c00e2d8a542ccec523c7352960afb2fa3c09449b1e675aa0af8b082e8c5075b00bd3f169e6c7c20458cb196c4084c7682240cd5e5d9c154571c8d678f93ca353530a21e585634cf88131e942f0e755a2c9929c0561916046947112821a5e4aa210381b6f3ab3a7545658f93e2befa6de03534e861f7f9b8c7ce30aae87bb0f89051b9825c280381bf5b36ceebfc37a1010c96a07d6007e0c2e694a0de9e0a561607124d2eb61223fda5aaba095f0ca97f9bdd8eebc603f0d8e61ce9195e347e29b2faf9ba31f950b1f27b8e94882d3c17874b9d7d6e009b4dff60b8244bdce336dd8bced8533dcefc45e2042b1caa80f6af80f7d5aa629935d54d7d4f6fbc822b1ce1795a88aedbbf2f6fceb0df490868a71ac7644901007688d7123c100bc70a4e4ce54c4a2906a7187781209f551b2bb0d94f3361c17b0b81584cca12c2bb2d47aa6ad04eda4c592580496341754a4b19718acc4e7b1697b2cb0328210d533ffadbb591a79a8e184dd12e0ef8987edbc8df424b3ea585764a71a7b86d9da5ceea0dc9ca95ba9f2424ed093dec0c33704fb41de15d66a9fe28cb22ee16f40518b394911f37b634878c2962263dc9fb6657ee4dfed52c75e0e62cd66c7b0459317eb8f7e6c9b15f637aa1fbce1f8fc8dc532c8f382ba0d508cf632b6cd5e5d8c2c146d0a6313ae720720ff00a2de6da17220da1e2a4307afb7ba1890faa699de33b910261e55f96ba2521376e5f751d70240a7fab9cc8c75315398e22000acf48283e22d611547093e4325f110c421f89db9578fcdf784e56f392af435e46986053f2fdae71995323fd26278750d95110e925e39b21f5d97292a4c7d38e78483cdd71801b6b394692c586752fe2fad8cd87dd3750336c4dfd97a57b608ed7ba3645b4f7492b74c4dc4d26455d3d48c1780a803c36c2468646541c46d83c22e32699a7bf56fad76666fa5ffffbbffff7ffe49f8ba33574ddd1e3e1279bd6733105a1a45690d1474ca82ba76b264d82bcfa77581a675e9a58dded2da5c8a1467eea6d982dc1a094d82c5c63631b07d80db09185fc7dcbc2778039aea464561d02c38ca24d7b08cbd1a451b502899b0bf53408ea6e520238f83a2ba66683ccc7a9cace48b7e05d8fdd43afac7934b00308d89fa8615c0254744daf9c1560d538e0c2c8dc843111dc063fe0a768bb6c2a92af8277a3de611b8a6ae74b95d29db45216bcc661e5787dc317dd9813b67df97b95b6b5d095992a9c0058a7f399212b69934073112034433093d045b77971eb3d5860d503d663e525995bc2069e1f2cc572b97a24d44dc3d75c88642ae7cc957af56accd53a42794b07763f7947d68da6295a0a8634eaf6b8bc9e3cbf009047358d6254fd56d37aaa780d4b3b43fd69036e39b10cb3362b991d487dd71763adc4f5b41b9e0be7876a75045bed83f02f698b21880f3d5174eaed0c542d3460f4db6e0a6b247b34e800b07625955669f600a1193236d78394bfc48fcb7b65b714ac3d3d2086d6cf6b916df5da8f0f1c7386ad0131504b8d2d7eb9be48372897abe38470246e3622432a8634f34e873bf146c4ea97e9b0b942a1332e752f5fb03d6ff8d1c217a591b6f5ed51b0c1cddb6540bd16c6d625291d706e17cacc2f60bf0e7ed9556393cb2bb23949e4a5bd007a6e9d2e5d4f5086f849c10992d44a2664ecb593a9d3f80322f03aa723aeb31c488b1a9acb8524376fb0ea48c0593c86b1462f18b20a739bb49cf2cddc137779d3432ae2d99e435e67e8d72bf4fb2c6999b0ed10bea0f85a7815c4c950fa3fe5534936776dba1eddd9e859238e01f728fa4664b0d713e34da41e0e5950a0094831b5114b1a6356ad5c6dd2584ac4adc592fd0a0986e8651a4cf1e4f52cbc95522847092a83fddbda316ced80d2a71523ac3305ce6944ae0d57209a554d3a45ea707acb04073e4a7134e0f82703126eefc3050f46f0e6862b0ec45af403c39034aca20fc838ca4d71e9c787a414498635d32622529865c97888003922b117f3d7217b33336b89344296d84d08d95bee1d2d0d740ddb0d3b7e6953bf2347478e1d38e4c1b9f5544a56e193b9d5b77672b2f2f8cd6c5d996b2e8f1bbab24d8535ca7095534f3dca9cd416c4ddf41c1caebaebc0e1e73d070e6b109f710f875506f72867629c0b027f453c601a1c7e3e70ab47d6dd1173ca94dcc2340d9ff6397bb25e6f3824db6737b4679d364887e41ae33e38dac5b0c7c048b023f1c1b9992c1c1e57a67386eb175ac2a14ba65fa93cce1915cb63c782c9f4f49557644596ef7103e001271a8cf9747b4f367773c262bce3b1f3718dc0e41db7afefe3a2b5c397c3bd75b913cb2785e5ab20a7db7aaaf28a43d5378c61727dc53bf5f3a2e85baf9805332f8b7e5a6badb593d52c6ebee59d585220ea5bab75fa8a59f4f5addb6f9745cffa36b3b9ca308b6222da8910c958e3daad2ceb22799b3ae6ca51d866f16df839e69d2bf3ce9570fbc4f6391e3b1f2b9f7867e514efa43e796036cc039357304ddd0353f5f46d6339b1b064afd4669faf18b375e28ce270ab409f944f8a9d52be229b816fb5c0b75acf58a7cfb24e487df551df6a8ebbd9ab247d25d33b4ee5b4d261d467c8b8b15fe64be9e5937885c3aa825538fc4e38b58259703d0b751daf77277bebb4fb01bed522e2c362655988c2a8539addb0d518913c6f310c63587cb30b42514d61c0be2dd66c3de7b423823566e17089dcbaf76e4c359cfabe210f4ccec08a3da09bee2b33d7bae0736ee8a3247bd7714322d9dbf0c745eff80e189c2649c80cde5a8c03b3283e1f2639f44e41f037ed01f58bc8bb1b5065e20b37f06e4bea49d6d6b036f421c96e3b6963d55726b93ec94dfa56bbfac8a40ce9356830e9d2fca66ddc50661b7ffda6a36499db3081147bc3285439ace331f3d42de9da13b9d3b67d797979e98ec84503ba0eaefe75442d33cdbb1362f3863329a33a0de99494916eff75395612b9d30322bae20743f9e678c50f5e909f64d3b3a16c7a7620986499dbb8e5b8d7f775393cae3b1e57f6ee75391ec94991cbab71439f5ce39674ed696ee89369fefa48b832699074afcba1218a31914aa94ca4c8e176d9e56c2b28df935c611e6244302faaf5fb56ab1f045d2e9a79a994a9df366babc5a4c09c342831260d72e00b3f229664f9e46a51b79994b1f444b126d2f822164f38915f72c4e2045172cbae59544164a6aabb4141a7c57d432499056f4136386ade83651fc4238e36e342600f022b21e3d86760259a109171ec4ac4b86625b731e9d70e1ccabc316970c77ddceeb81b131f770bdab141e193753c673e7465cb430819c7f0905ce271651d3a706c30078735f3f01e3d7af4b8363cc45c63732bb91d167b4b705ccf099bcba3c78eebe89e03873039c76db444b463184993792431aee189896848645cbb6c967741b29be6cd511bcc712ee7c8715567b939d771439a75dcd221166bf53867e810b752d1a1e3f2b8e97a39d7db7179f4b81d8fdb1135e843fac0373e9abb27fdb24f968080cca643606693cdeecd1e76445d16de926b1f7a404e98eecefcccdd937999bb272cb8235ad22feb2df180a2f8a207e439d111f54b87cb7759d8fecc2cfbcef34100a11dc32c1bc4b16b9865310b8818d72e448c6bda6318408802e8048187cc97ef33c0d5b90588df6a06fe7cf96e7118a10811c4f7f527e3b2b2cfb88cc7b8ac0cb3b20ba11dbb10323ee3b2320c8476ec3a323ee3ae395380d384514888877108e7b0391e16e0bae64b8e0b91e341dc1c8f9103b3316c9c33413cc73f6764e0cf971c3cae20ee8c9be331721ccb716baf5774bdec91f5bd33cdf337ed716184cb2bf2a4c4fc8959df23942c85b275b14c1df3e5fb4793bf9b58b2ef8dc3f8247fe7f04aa5852dcef18f47e73e898a7e75cf39e7ece7b8ed9be3929c909c90a6b0d65a6b65d73cae4c72d2af1c97274dd1ef7272e01b1d8f991867451a31ae8532b56b65e7d91cffa4c898d1dd2a2beebbf765d98c9f53f98c2be3c669adf464ce81c3ec7def7ae190effbbec7effbbb9c4fa343dc4ae5eb722ce6e1ced3cb3acd78b036b7353638eccd5a6bb35a9b66dbe72400ff58eae9ed8f7ada9bc7ad545a5e677abd9994617dd2ad32c993eb7800f10def6ca7b7406452665602d4016c16888f2a01306a0038070e81c8707d92edb66ddbbc44aeba7d4ba54d9582d52f1eceeaf7347dbd616592598ff18b2c11b5d5cafa7796ee471ba44fe910b75269799d89e24ccab0b025000e000eeb00300e06223bc9f25ed10d0eeb0f38fc7cc0e12a7c0f383ce8b2c1a18ba6c62ba293879bedc7a96ecc5fd1c782dab68c55ff110df9274400476defed3663e11ffd0cdf742539913ff8d0030eaf33bd6f26652a69080eab1001c420385ce51c80e0f0cb39fcc061cd39e4e0a3078f1d39f73ad3b300cc67b91faa34cb7ad60921fa8858700030ca070e6b0f1c7e3c70b8da81c3e7601d3874e5f02bca81431a69d3f52c9c65b7cb9936cb5858eac5320bcba989ab7143996b3c9336d4ae3e228ce5f6a1a5ff8874e478e30d872b6ea5625d26bbc37214cb550f7bb25caf128262e98024b75269799de99f8e2fc7f761d44d938ae68c85b2c34d5107d4030e573870781b1c82353874f14072225938ac190e3f950d8707415707842f00ee591cba669763dbb29e7d4e22d9fed4e55815e681c93244b2eaa621f399cd6e0e674d37ac99e5ac1bced39bba9c6e90058737aec21b10de96ac387a2b1396539f1cd42dcbadb7ab4e0031f7bb75bbc275b33e94b75b9964db9365169c49197ad50d2bead29c5ed253a95bd233691333e93437665b9964aed56a3dce190eab60aee87459bfaf88686e98a87eabd50904531c508a034add95cfdc7edd8f8bd455544b32ea5cc4e2044a32ea16f549e9d7b41f0b045d2e3a94e5b972bfa2fee6797c5cd0a1f9b55aad56773bb6b3fc666e2ae72eeb072af55e9de5b27ea88ebaeaa8db144ea56ecc2af7e3a25f49642b2bf8c6675557e6ac27cbf6190c1ed4439f8c9a317fdd983925436a8c15f5953da7e4723f95fba95c927e6d38092c6f97e77efaa5a46f58b7ed76c33d188ffa237ea80d5a0b65ce70f1c5d2b0dfc1e2f006e681c936beb91ebb20362e731b31d7b831d3b8e1ea735d7999bb2d69f0d721e6c2dc300a0120073a1446a10d68ce2469d2720c1c6749bfc0cbdb11476f14d8b31b8536e7b64d7a85ad93c890aa81ef33e4b295173c769bc0e88aeb6fe6fb78a7e5f6d6b6707585a3d5e3c0eb0098bc3d8481d982e68b7caddfb75ad92dc8be2a29aa5f11fd8ae85744bfa2f911d1c4a3270d62587cd9b187ab180f3f190f6b9ef13a03c77e91613bdb11b53aa27e99db5b7e332bf7e27dc396b37cbba81bca8cba9476a39f93e2fa5a2b0e33dcd33894db0d7b45438b7b5af5dac96d4a940c3137d5b75227c4e6fa753c56be7dfbe997add5da17e9578eddbc2ea7e22d4983d2e2edd2dbedf543489b8e5be4b0f56d759b7d0b590f598f9d901587c366ddec3e249d853912e64257de6217a4862ddcd334d3cf7a8b431ff5f6d60e81a70d1fcabcf2afe3c1dde21d8fc3444819ba9db471ffb67f38a4996e24ca6d1b6549a06cedc572965d99bbbb1fbb8c62fbbe434899ed3753e5ceafeee9acabfa0aebdb43fbb9cd8a599f0f57562c26a285aab7cf1eaed8d3c6add3872b9815a48589903292e6cd7e3b4bc87aeb210bf774667de5aaaffca4c23d4dea78d4efb070ab9e0869535b9888962e67da9b652cdbbeb53e53d9f96059bcc2faf656ab55ebdc9e9df5f6616122a4ccf6951bd26bb79f24ad1bb3aacbd9b69f06252a659fe111940665942dc9a88b7e85a31e9811befa1ad63c221a3d71b943b07438609d2771546d942c3f8232da624434caa2673e7ca3b8f8e3a25fe47fb95b29fddadec22192dcfa765db9d62fd77a2d762b2b2b5fc121cdd6d2a139f311b160140bfb88eca53db5cfecfbb55facdbd30e48cc2c3cbf222bb9ee9f94337ca4c71c7e45a48f0b235c5fd12765c3acbdd548b71d1785765a2fbd820e59eeceacdd24d8350ebb4dfadac5c071342494fbbc3d9d494db6dbd7d702c312c9d562daf2ed32a0084cb6af19f842fb166b532f6ecc306ecc1e8ceb71415bf6f6556bfb30c9f349b69b8d4fb0fd4d5b4f4abf5ee050e6173fb152ac15160b8bf5d82f1e98fce2dbf58aa8f071f19bee536a85a5edb3d76b1fabfdcd7c11fa04e5ec6ded8b5ae471e192b756de5079db4e7bc6039adbb72e67f380b69f0587dfba31bc3d886bf109caf5d67e454bf8eccda46f5dd2140d56cc43a202939c34283d496f6f4d9c96b5d77a6b6dbd3c3437fdc3942953b02ee7649fb247d94bd4edebbb0b92ba55f9c4a10a53a2faf9faed76bbf6f5b2e6abc5acbe7d48eb65f56b631f43ecb77786a5ed53fb943d6a7e85f4c9fa88ebce87c52c7a3b2f8bb63ea441facb56ac37cc5e6a16b6597c15ffabb769bd5ddf78fbc7c2728a77563e27eee9ccf20daface0b8c23d33a75e3f71a882a90af7cc8c7a455994ddb669fb33b3281c2a916d900eb2615c6d7d67fb9ba644fdb2383c6db738ac1353227b7a22dd624a3add6eefec84d84f1cfa6c38945ce7c39efe66966eb7fb6394b7675dcec9274492e77c76b33efd209d7e763e4ea73e863438e7e994e1d30de9b7ed93ce0d6f979e4cb3ce984f149f7ebaa4db1bb3a974e9d0153d13713e7ce3f35e3ddcd3d9bece2949681ce9f66243f82ab6f6864772c83deb82c81fa8addee863ed376c23d0b9c33bdca7ed2e679b33c3b2cb02b42675d4b12e48ea74efa76dfbcca561c6282c85ba20a77bbf99a71abfb9d869dc984b3f601f300ff708997ba821730f37bc711bf2ed446f9145155364efa8a3000a143891bdab1c0549b6c83576f8aac831c722f46028c722f480c916a05841122c9ee022871d6506f7fabc18313ea3f38ee3ca1cfbe5e1d027c75881a9944aa55a15cd40a150a5ab6e4fe7179253515151a9549e7753571bf4707ce1453123d5ed287d7595bb7a8d1ba5129b1a1e88d8d79d711917fc8dab721b5736909399cbd4b8eb71eea0434cc70262c65fd79981e37c5d07c471bea82ee33676a9a3ae0a87ae21d9bbaaa36e0893b98c7aea86372492bd4bd43d3d75bb7b77bb546283c35a83c38f071cae32ead40561a9dcbb8a1316cb8ac9f452170485593f541efa64cfc35f7cf17e1a1cd61a186806872b14bed70551b987e5d04dabbceb80a0546e3ad70551798d984b375d29b45d1e981c4322f9846383afeb8373e3c66c43c6f5c1a1716396457326e2ec80c3ea92c1e14a071cd61818a2a1d4efa17e55291c22c9a93f759bba2192bcd3d359f5d465270475952988e9a89bb6a5dbddc66e75d555f9ea0a51a9bc92a7b242fde4b2b37a885fbaea86ab43c027e39f6ef87297c72ec72bc997ae1ccae25379cc2af7ae729b2ba9a85c45e52a55f4cbc349b494aa2e47856f7c9eca7b07c4277b5bc7c3bb774dbfe9906532fda99bce423d66d60fd4bd7b3889ce3b2eef8e0200de591ddf7477567f71db1d0fd4e9dd9950d7156350afa7eb8a31de4db7f6cb74d4b90e48cc261cca5cc2b55fa57bb71d90984bd87bec76e0104956ddc348b2ca5577495d75bbc72e2787dff42a07dcd3f9c5ffee862fb8a733becb1359c8eec56b97e3a9fc74d48d1975d44b5766ae5fa5a3aeba21cdaaae33759de926130a75951bd2ac82c22594ca55b72ad5bb0b9244e71dd54f2595bbbaeaae5eba31a3c2d45729dcd3ab1b0578eb5d7cf0cab885a9d8c6b45ade6ab55ebbda60ab33ea2dc7a113b24446dd4eeec5c59f7165dcbb2f0ede19efee07fe8bcfb8499a1cc665dc244d5c6eb16e8797baf7623c758fba31ae75406246e1da608cd77e79bfcf3a20317bf89e763b62e07b171c70cbbd07bad289137cad8752c9ea5686ab2de7fad57a4bf6c4d7a11e7db2c735d8e2935b3eea6a832d312ebb969608059552159145582c2fefad6f386c51e904508372f3c0e79dc603e3c9fb17bdd76e1bb99d4c569c2b3fe85242f485edc4c99cd124cb0a0e577915a1d4247c3f45a40aa7bcef9e4eac89ab53097b3be67f7cafa477df8d79e5791f79af1e0e49980726db77389ebba19cf3a31baec255a684eb998823bb25a64f8cd1008460a34bd84ef27c114ce25823837497236f4752446aabb4dfa70cbe1ded586daec9177e5f51bdf69b36d27304c94fbf6abfb2ef1f9532723b624e99f26938933212cb291a7422a9904ee41456526147526072464c665246e2ec928a910c3e99c36f14836f74f9a1562d97eda1cce11173ca14990dc79b2f5e11849f1c7e5700414a9eeff9e6cca44c762983fd07cd92a881e68c74626486bde47be80a69e6b36ababc74325138acd2848db2fce150e6911152275d3499ec76629224a02ccb60d01ae9eb1b7159a68d9e3deb1147e77b3b1d5db35ad643f38669abfb61a7188a7e2b3ac2b24ccb300ca3d2479b930c1485e27a86eb174a1f310fce792422d76bd666386b5c0fa9abfa7a957bbaa65b71e859eff66890dabeac1f133082a7d6f97224b53d85e7c6619d39633a8d4fbe138ed274e76d52c35ab9df4c4b04ceda69b703e7fa1efdf24e0f84f643307b482c30a74cc16912fe9053a664233f266004e6d94eba4f6ebc9a2fd4fb3cafc9f612b89a029829bef1b9f24d932ecd12ed1d67299532e1b3867d84b3764c8294a3950a1ae911da942953a664d815929d3617ef4ef6982b8e80cc3df25eda68efe93ca2af179c2e07a99d5d0ed6526611e85cb1e56896f940fbc6cc194cbb204173f8dc2efd82a1d7464f9a5273cfb448924dcfb470028a29b2e999e9991659984eb33ffb47ea725ab2af15e4cf580f695eadde3e6064d9bf91e9937b768cbbc6611fb141ec1af6a2541ab54e7108c334c2b1c1d6697516a60daef04fdfb3874bd04f2ca3d997fdf4dafda898e2f0f49e996fb2ac65669d716f611273359de35afeddf048fe644ecbe8b3de1845eab3e530aee19d96732da36f6a2d13ab959ebe56d45fbcde2464e6dedd0fd3b973b73e26a769aff788108cf3e8bdc755233984c1c178e8d3d2728bc830fe02c629fbba9c92b7799989625876ccd3b073378a09c2a037517aa230ba2e07857fc86cea6e3bda60a87dd25c31aae1eeac1f5cf6991dc334b6bb61f79d79d2eb65fd98af8f397641e62bde217d628a3da3efbafa49616057906c74eed206616017d7e598304d8330aeabc1aebbb5d935327ad7f92069ae2e48766e94fdb0468cde90b7aba48eecca26a65045d6ee8b8ce26ecc5ae9f5fbcebc647d57e61efd6abd4fff0ee32da8bff8fd913cbd7727447b865935ac2cecf3d84da5cf7f3f7dcfbc1fc9f319f6ec1a0bc33e341c1ec9d85726ead59b2aa86ba8d74f4caff2897750d7f0ce3f7b669e983608e314ffa6df1bd2dc721c1b84d1f2179836d882c3d5f7fd74c3252ced7e84f519fd4e5f76fabecabeec75f59e99bf160e7df2875b5f7daeeecd6db57adc64ed81ef7b8fefb1dba1a3c1d6ce6212b159baa63d63ddbbe191ecc91c567629cd2ae79dc35818de61b170e893b393b7f3a3c4b1b08c63cd5b5f5118dec97e947cf808356cde23b91ebb4228c6aec6b1506739877b72683a0af7ccac615766d62d9de5863cd9f4951b1ec9a6dff46b855b4777392af8c6a7cab21f21b3527824fba44e3476b663decbbcaba5be54ec8460130e4d1fdea92fa15e6fe893335c83947eba61cfe470f89dbbe9f4eed427d1d97b56325d5783a7a5d2279ecf4e69e9729f4974f6708824679c8b4604dfe8a16b6463661a5bb36cf2205d2346b7efae91d1ed2dc6713789ced95dfa35ead7ec99c53bacecac0cfb9853a6e4eddb4d23d9baf3917dc361a4d80d2beedb25729532d9473d32d7faadeae3ec6f35a29debe39c522d11993e9bcf64aecfb0766c1bc137df9326c183f33cd619fb3c4dd71336ba6c587346e68c7c7d461aece9c147f3c9a17e491f480618e9e99988b36db4e32415d1d2edf56d343d0dcaef7b77777f978766bb468668d0fb917efdf5020c6190b4e45ec96dca6d55d9241f7ab94b5289dc40d31c31d2a01cf118fda691481bc9c406628d34c1264d529a20d6c8aded10fd7a7155a8b3eee92c77f595abbd3a9942ca481b1e29138358b38018232f8ba8943e1c7ca806b70fd1af51de2ea466a922534a88d2085206a15f8d77be6b975f008f7c11294bf27bdfef3a9f6cd9d3af0d1b4163e4c8ac34384d583f322368b2868768ad1a943a4348203d1a94e16f74d416dc4543bd25a48fa67930b0af4f368dadcf87ca226c74094d4eb26c25b1c8488f94a26758829014054926a21420b94442217fb2fcac360888cbe126c514595eca230d1699211e91461a94b26e59d0265b97f89b692db427564e64198bb8d68212c518861cb6161df8e6b5fb71f1156db936f161390edd204a0ee9504645bf9a4aa14454c6e569146c2849938c4a0e469eb37be6e030e73cce62bc635c25c7c1301d9a2f510871caa29739b356c97184d8b66db445837204f46db1bbbb2c6836ca1a4aec72b2ecdd4d29cbb35501bee2a234c3fd9bb98243eeabdba622b7ce17876ec044e332540fcd1df8c2add22baa2dc04dd24445b5e281c92aabc74ee5198beab1cb51d99b1b20bb8cfbe00871597d217e1fc465f583b8f6193af7c1893123852b0b08ec324e04bb0c8d888c1b0023b997f1be2c2082b8762242fc7e5e1610313ee344627c0646d2a48f84356f80fbe0c478632233ae8391b026468288ce0d80912031c00d8057f3455e6700112789ce93e8e08333ae86eb8d2288cf20de377c0ad71837e2ccb8112788eb8323c4f5c1a1977bb51b67353caf4fc65617e2fae0d4eb9367d473b727cbb500ef55012ec6834f7596d79fae52f9c0178e88580a70993d39852f1c4121f2803aa22dc8035f4887fe7b19b431c1e41439a44fdad65a6badd5765b1c454316880607cd9cb5dacb9a48d0bc05b1efc7eca36fbf63312b9b9895e11ff2c9cf4fce7a0b6a509e8915c2afa899f8eab770debe6f91a059d226f56fbd8ddd9cb79f77c7e21e9aeb7b68aed7ab944a49d233369cd02cfa15876ea0247f45211d92b48b2cbf6abfa27e79457d8e75a3a341f9af8b2c853aa27eb17ef44e7d3fb27eb49e3d7beb5c00ca377214dac2936ca3cc1764debede692997095165f7a3758bed6fe67c4512e34b643b28c10f4e137bacdb51db47ebf676d67ab9335faf75406844b4cbc048a21a4cb0851f1c24d865bc751977890a03150ce1c8781232b75a8f719790451818c291819bb48edd25240db6f8c169e272edb28470000da23cf183a3cd2ea7f50a44c489f3c55222fa64ce6c41d90f46448ba8941f25401813cc094605269425d17c290115957ea2489979e21863aab51e504724f38c427bdfafa823f2806c946003211c2025a51f2939cae84983151b62813865ca942946beda43bb2cfa4566b823fa8abe2e3c27fa45d22198e900985cf10ecdc2cada812fa443ff0624b3e001d92fdb0dd3a1feaee8c0177e45a59f7e85a32eb2bc7c4949bf4eb7f9bae8170d4b49b27c67310e3bd9d8e0d3d613488fd35fb7a330ca0130b9f1ce89c5963ed2b99e91717a7a5afbd53a95815724279755731215fd6ae11d3b1e65d82aca07e5c96a4888068c4471beb4762513fdd26f2536e82141b982952c816c22b606e24b7f052f8174827586061b7f736c14bedf1b5f689cf149a63c64fa3bf418431f6fcc1bd047a3d09115db07bef0f99fb57e1f8d51ca564335821433083b7c11c3b4e6a4904ff412e44f8de8126b621e1f23d6bc3c5e46acc9e1f133620d001e0fc617cce3616262cda866ab116bb8c7db8835dde36fc41ad2cb7b7c4dacf91e6f136b4a8fc7116b4c8fef21e65883aa493d3e47ac513d5e477ca93cbe47ac593dde47ac59797c00620dcbe37f4421b1a6f5f821b1a6e5f140c49a178f1f407cc178bc10b1e68f2f40acb98fd78935f8f106882f1c1e8f8058e3f27822624d8cc72720d6c878cd783c03620df8f806c41a1d1e5f84913963e3ae5965b4011231eb02127e8d937dc894363c52a6ffd1c0e1e7c2610d9a33b1795cef7ef875e1c248c8ae71630c3ec85109509200204b106420039927d6d86a6315faac9613456583cc757992ef0036be035e822584c4d9e1126707ac84c3b171251427c90ec740c5a9f1ec4a1cd911a1383630062ce0e1ecf0c6e970891a57c61d5c975d0e8d5bcacd8e6ab7cd75394376b88b060e7db2ccb1ef7063dcc12563636eebb0459e5730753ea290103a0ae519c4c55c899a3137661800dcf98218d3cfe14e17c498fecb9d506821f767fc90655821f7635421f75db4c87d1c9ee43e8e42ee5f28e4fe9f90fb309890fb2f5ab0c8fdd612729f8584dc5f19cafdd511725f8508b9af1a42eea78490fba81b63ccc907251ee4dec1c4c114f306b9cfd920f7ed9c41ee6f4d724b1163c22983dc57753e7ec8f336f49941fdea779d902894279e410df68d0dce1ff20cda8ee16d14696bd8488c59c397ddc6891d109f1c8155ee5965fa22e6ccc489f476399326c1c0719a6016f03ebb03f8640c07ab1866e6b0b2032b89808630ece0471b0a1a8193299ac67a639bc14f433184841174413524688089ac0b2cb081841f26f279ca6e39713f21a334fb620ca51a86611886a1c16aabd5f76559760dcfcf0cbf0952d27e6c7052f9c6304c7edd45f8668665ddd8934c7bfa204f8d3e46edb16515cf37e73967647c919f8ff966c944d67d70f41a676876ab5dedded7786235ceb6010e1066f6f4400f20437a5441a3848927e2108e1e40461a9327d2e5e2894f262962119530e361444234429643362f1729e3f543fc90651482b42942b300e992650803c346963f267d744b1a61441f69ce937ed344748628b200cd84c32ee1b0a7b64518ac8d2e87c725595eaeeae04d7dc6455dc65d3dc65db9cb3d1d872b8feff77bb5ffb21cc68b1be38babd4d251d3f32d2d160b964a70f0cd7f8da5928622be7c5f8df2e7fa3ea70a0e9b494381829356934407cdac626edadc808c1e6b8c4f9e640ddb403508bac87ed325dac71b9194507180303d1a6c200d76031932d28e0c011241ad8eb4a6408664999661d60f2c8999a5cb0af5558e3a01256de8abcca8f308bfba00e9177a89ea579c733aa1a5b49496f206678efc91294639316459b692a3a6496c66339ae4eb32116c30ec21774b14822aacc95d638b353ac01021f78d0a0a8931fd7e61b58f5d48ac9999778a2ffa1c66afd90e66f9a097d8a55a9753aba536c3e0a51cc5288681445d072c6d8eeec8d31cd2dc9385e6ec54de24da07fdf9c9130233cb63594accf23173f699b39a252793e82cdf5d109294c1e80ef60c3b3d123287a4dca79d0f0cf388397b468a35f27d92b4c964cc26093b3e626689678ce998e11d7a897960dae09c6f9851209238333ebecc394ba4d0483ec2c8277dbafb0cb67ba6691b866d383cfb9661c75a0b867b1a6f13070d6333c3322dcb321c70f8e838c89f693b6e6277499bd1280b35cd86364443da8c702869743ceceb6374d14cfb9c98fb69fb965b8aad6fc53531778d5e8eae859366f7a61672b8a74799f4383a8291490fffc82ef147f4dc33efdbb1952c73499bec5896d9dbf1d09ee19dec38d0903267419d86b4c9be69f23134799718b8e3a17d47e2506ada3c37b10b0e6de4ed231c96b6ec62d9cb6aae347b38601a5266b33f0eebc5a41fbba44cf6edcedf4c18d7f417177bc9ce8cf56e7d78b2f0cd7ce96bab1515ac6a14aea34afa348f9ba4cfd14955e3bc8f2e0dd267e46aa53dbbb73decc16c646cf492b67d87c35edee8e8a15c927b74ed1fa6216d368fc674c292481886654d661d0e7bbabb69d8ca139527c5b3e3f00fed1687725ed95d1bd3903259fd4254f712d2e7a4ad7460a3cc673d2219249dcc29e40f03e40f86846f0e91e09c21e12176e5a9ca82cff45006bdfa15537dd2c355aea5d7cb9fa08eb34f4d27542a15cb0a8b7cea2af2ab954bb3ecc1b20aa62165524388f42bf5791aa9d4552915111934674a285c7fc22629314d83b384e5cfe7e120334b8ce367f439eaa018332f697033919039944144b4cb55e9047a9a7e21c9f21313d959b360ffc59a97669b06070883f56c128d31f57582156bd3a5c10904f7b84bac91508480a21c2982a70b1db35bf175ba0644cab429a552297d078831fdbe1c1dc9b2c78d7422a4c33be8156100116983e3003aa6128cc43b45560f88605f7593904ac4244a1860daa224ef5744bfbe33b04152208a11600f6c46a17d6a46801faab484f4c1661dfa29a2bb5ddddddddd587777f78ef6eca6bbbbbbbbbbbbbbb5cbabb5d69d757763ddad69984f4a6a21b01787ec924991e6c53db2a8e26b4be5f893a703e9744dd7359a3ac49a9a18236d68ecd480d0e0a836be2c4f440a9722e5303ec13bfded2e4d7e64b7d65e3599c92c69832e970deab5f606fba48839e7148a55fc871ccf437c451b171a996803ee903f18293357ae95f8eabc6863c314e95da4cd901eb12687d34d2e25f00c9d3d522706970d3bb740c466338494996d80c18635dcb47e50c30f2c1fd2e0034b0f68e86105071738563667b051a931438d8a8732f090a229a241cd9061e6f41ac3cb74430c374a36c260e3ab01861a1e8d2fd020ede0851d3a57141727d30519ab031774d862b6103382d902a602400b00d072c8420ed90b165e725f078c3172079867ccc87d22628d0c19b98f805813e343c41a1797dcd77904e5a86a19d6061d36e8ac41478a8e1a74d2a083061d2e74cea063069d32e814e99041670c3a62d009830e1874bea0e3059d283a5dd0e182ce1674b6d0d1824e1674b0a0034527013a44e8204067086e34534430c5400d5350f1d1f040a4012438a1f9cfcf4f056cdeefd78f87a13240810d85a18a56821b867af023a35403901a9458377429cb26d21086d94d8e9053241663628c89580bed0994e8934da44128875cee34f42067593691061c583acab289344891570dcacb65d9441a82f22ad3b20c88e626a4a840ab3146d9441a7e7acbb209347011b50ca3b365ad47b03c623e424eb132462a7a0ad9041480f2aa4189637736c82b9a638ce972624c3ffe5ede1a63fa2c3abe38640328668e43365041de7a3281fe64bae508a37bce9e2c8752494667e46ace4c282e107c5c35d65af6e2a78ad9d7326c428974e84567733636a1cc19c944bfd02ba93ef8649124aaf5fb56a1dce20b5d2ebaea17fa285932c32e89fa4533bdcce2a799e8991627520b2752641aca3064da493295cfb03987fa45c3ef49bf42a92417f58b153337afe81797690e671699e6706a916994d89c45f1859e4e2aa32889444a864c2a3e797a54bfe67f243783b8c565971141b35b1aa16409946fdaf6101946849491a7458050ff90ab9732cb244de42737325d5edb3a29af86bde381c9a48faec90e8f7e33f10e760993a503607216c264798dbed6ef5b4959957cb1a8d6ef5badac69748b61f16defdf943e4f9ed465c74a37bc77c32f771d468272db0d39eca38bbd5e0d571c446a6d04f6f56173f6e8e1b7dd78637c892fd8fb863d58770ebe7eccb1a99635c57ec8ba2550ee787b8ab567541e4fefc5ee74baa563a7b57d5039f661d357d714c5ea2aab77a756b91630a2727a9b2ebb9c049cae76d335dd9e7e69dbd3607fdeef48bfe6510f97c82a2324f864563df4c933cbf376ca023f988eba5128f9704cf2e7e7f47e4f125f8ec2f4d35bf6a0e438a69f8ec56e8805e606862f8c45f4abaf10f2e07e9104c49ae88a0dcefaa8d3afeca4f9ae67b6f90a93e7bbcb6124680ec1af412e6bd95d499f8f6658b0f4d125eca29cba775347a152a5542a6553b76dab781eeade453d75556e5f9f97fa0cca9328dfb445b9a48c77951bcabc4ad19032de55cf29e10f873e332807259f80226fb74f4c91b7eddf0dbd7fb7de95397a385aad564b4b8b7d7df75e2a82927091f155df228b8c8f6f63b423eef5fda31c7278749938bcbca4522eb28ad4f5ae1c2a9954a9542ae55d55734af5d42d0a85427957e94cf0a1f04d7ba94ba39d28d954aa766b442b75b996519763dd0e8c2f33ae628afce2aaab000a1538915ffc452a954aa5b2aee574d56aa5b25aa9685d4d9d8b0d9652f76eea86de5197dd8e2894baf72c954afd58b7c3f4d4eade557485b97f763b5e3c8555bf99aa1797f9c5431fad0b0280f7f018439ad015823b7ca83f4ad46f7c5128dbad8b1d8f1bbf6914709182242970227b4fa5008a146491822dace4b46e478dcffc7467eedd6dab79cd6bbf6c6ebd5b1bb4b90a927081430337508332e6991d3be48e1d3b7620f1d9b16347efd8a144d48163731d36973652e834c3a374151cc264952a523045f67e026f935ad22f1abdc4433d45e337b7346e2fb90d44e36103358ddf34ea2b5d10995338945208f5d3512bde6ddca0f7b276ac6e8fe345837a38e3a01231e771c6735c08f039e0738057e2f5198f38b639f0b2743cc77d70665c960ecc0262c6c1eb38889134d1818980cf8191c8387824afcfc8e101e7c6f96283c367cf1b9251381c2273caa5ea3a1c1ba4313de4b28a0f5fdd984d5775c32fd71ce71e21f30fbfe99a07f2b1cb9150f0e8cc17ac88127c91280bedd8b3678f44424241d9633b892fd925930683e295504021a38c18964f886217a184023af1115ffa52c88d851e31a62f451635d82f8afd23a9b6861c1b0d12194214a403189855bfb611953d67acb4d746bfb8b2f085b5e76bd30846f008245cd6a426805c624de71ba16da46d9bd64086d02871d9c021e42a42c74d0f233d48800c71d988311e26c6e8b81102e2808bcb2abeb6d13fd4ea933218499b31d676d9e8178d1f0a05ce4e82cb10306893b7ecceb83256848c5df3e105236d6cc42bb0c370020c182f9af0e2450b135a5a5a44ad160b0b168b65092c2c2b4a5859595db15aa9a8a8a854aa542a8542a14ea793c9642a954a9f47eaba8e73fde0f2c1d5830b87cbc655e3e2c145e39a71bd5c375c365c2e57111e1cd86dd0106d1185aea89cfc2171c0156b3aff24616288223d96dce80032d2e66834e510456e747477374d8cd9818d2ed6a592e38cafa697770161da958a362b52b46969937369d57ea8d131ec9b0bd52006d3208661ff32b692d8b1954c043190629fd85b32628d0e2ed206e6c6612401068c1756bc78d182849696d650abc53a028bc5620416969522acacacaa58ad5488a0a2a21a824a95120208fe00fa00f600e2006dc01a1e409a991778c3065803a401ee00ba409909ea30c19809c24c3003b34c1ed461800dec30ae212d68b0cf4cd239bf7ecd6352cc39a59c524a29a79452ca255c6006425d30030cba2b5ac044d60533a8400afa186d308aa58cac34d2ec4d3f1c9150750183054926fdf35da1848a2c72c75c210c32361a6c9a1508f62b4a0ed8e852bff0d518200c780c03c106673c0e907e30b9a5d86827c597534a40ebc1174f697f464459846a05191bfb15bb6b9c893818fe2490c5a4c491842328796145089258914591ca254a4a295ff87d0d76ed781bd560e355afe2df37081ab28db46dd37e92303144911e4b6e7400e1113a426488ce4f1226862872a3e3fb56ab1f74715fad448604694d6c74b1d5a55fa3eea5c2e0565fc956298369cf68af5a478e758b43ada44d112d69c3d3f988b431b2613ff624620c56441fb3c9d839ec3c166337b24d2082d8e59d1141ec230c4b22d6c8e891d82710711c691cf27022f43f84fe85d07fabc5fa81c562f1818565a5879595158ed54ac546454555a352a57848a5503428d469e67432bd4ca6d28d52e9b3f17d5e0dcf23d12091ba1dfac78ec964ec980e193b1693b16330193b06808c1dcb2163c75e32764a33f619b166ce99b1cb8835dd31628dbc0bf6fa0f1902c66503ea01e6c2e123ba602419f45d7ded4a2821a35074a19933da95a0ae39a344fde64b63338ea67c5148bac076d7af8e54f08538e275e6cc3c2b3b3664ce548ca4871c8736944fe21ef8068b2fc491693c3d8e7ec943a98150656d1f5d320165498f9123404150488144fe8c34494529975ca0b8b8fa81343874a05645185081e83962a488ab42338b027da2438c15570c35b58289161f179a58a182252008ce479750c618a348d93186c705cbecc2d106adf8e4a7155f64408345c8ee221aeccf2231a66fa3697688363735723f260769a303e6156d7ac4c87d182d690384b411d1a28d8e94e95843c42667bcf9c11784dc37491a0ce997aaf8866290fbde152dc87d52bfe3fab6bff5475206b99fd920cb1d5491fb3a7de98121fa13879d85e8a5927ed170ee98c7728ce0ccb1e3318bc41afabe02e28c8c2ff3a351a9b442718c3113873c2e799ec66c723750126be8c336e549815c52821b2a90bf3caf2af7b593a3d7cbf3a65c9049995e120f6e97e735396128db8ca397cbf3b238610ad96a1cbd36cf6b720217d9568ede0d03d98e380a826cb7793915646b397a351964cb71b4e4836c3b8e5e2ccf4b5242b6a479392a64eb71f44e2db2fd387a3bf78d4414f042b6258e5611646be2e83de57947b9ed299e50a4d02777b97da69c56488ed3b299d1637777777737109a39449733bb2348efa2ef9e3c69046996e12390e4d9b327fe1aeccac57c418c1a1924098bd9e3260d5f7c1885e4c907319054c73cc57d2cbb5cad7ac81e373a1a943a6e7adce8086d5c112fe54908a6c7eff5615934c1de4599f290bd05954cb00c6af0ff8e0376655083f426182fc9a0ef489a1029bd845b68bed02399df91cc9790f44d387be9f6ab85b582027b0bba5dcbb077d09c2942f26c11ae0371f81932680e38c6290987f5b3385cbde0f0f7609401250696412e18071cd25c10c60b1c2d38677a8b169a4e64fa160e5d93894ccf82437026c9f42b1cbebbc8f42a9cc2617391698701735842c15d6d280dd22758122df982e8bf2d826a90169405c92850aec4b1a6bb9a2fef27ad450fa19f109b09f1c59dbe97d056c85777fa3e4224427c7941513095889a4831dd7a69130945880112ca9c6921c4177a2464ca844c9fd1168a31b4088a7594142365df8d383042b28a212982a0a058ceaa90b4994fcca0216933a1903257489bc944cad00b41816519a541faa04ca9c4a1120a14fdda32bd84b205cdb2bc7d3e412514d2a683a40c9536128a94a17fa2a1c8340b31c66e97e699a71452c854c8548a3e4204e94942993ed377bd844ccff51332bdd5a29bd0419d849c8558d3469050a44d5741af844c1f742d1c068c2cc078f1020b2f5a5aa0b4b45a5768b1585660b1b054816565458b95d58a0a2b159529a8a8545250a5524f5228541450a713144e26d3134ca55216a5ef73c2e7794df048242690ba8ea8e3382c386b9760b74d09db6874c5a8d624544db342cb3224647984658a0d6179f43e82468d30e72c4277e7d1bb0a1963b4cfce76721a46caf2f69b664083b44883f43bc04e33ecc22ee885e96489f6914b4c4e7b1183695a32b130849f45442d72d2e5b3df9ce1e60c87c1f9828be0e6f7751863fa32e7fa70ca58b3cdbc5d9b47f794b51badc8a20b39bba3dc5d8ed47184cc348aafc74d835db0b648e88304e20c3877624dacd9de7740ac19bd6f44ac794084407c65ef17216932907bca3775c498fe7673624c7f74775c1e31a60f66a11c31a6bb9c9bb9812f8c516a8d12638c4be61a94d54945c3d730f864183e59bbe0854f2ed148f0fa32f984cf05a2e0cb1e1b873e337f7b63472c91317ab50ff184af088675b8185d9d0667acf9ac70c207542a0be4a8619739ec0cf7742e0233a0c1337c35d90c385fe6e7a90162cc3c38670e205fe667197ef8429e310b793e74615867488f0635127c32ab82b54d7bb5c2220c89612d3b36468a314676b7c18a256ab0c209269cf8a1d90d77b0efe09d1bcca10d4aee39247188848a1cca25990e518ab3cbcb338732ad54fb9e143167b0531cf2cca12d7cf489932220260e16ce27f567beb49605218c4539d496cca1fa6559ece6103dc546cca10dca9cb4c8de27720c2513970d2be5e4283727a593e36a0deb68b471f19bcb5a8eeb3897c7853c914a2d09a38fea0d5d72bd9433b738eece4c3a27efdd66249949def5688c60c7c92c513262d6bec87d2b855e99e387845ae7fc9c1886496c5e4e19f19438d347148a744e81d24b29a5947162d89cef0c63944aac0d1487b5b39eb4660f7ba6edc6ba251234f7cc4cce2ed42423dc843e3ea39714a31cc53e3b2114939476929a9d3495e8624df6ce4b70b1267b3fe239b5a08124562419eabe94524a292fcf0ac8da2a854fbb6dee33c6cf397b3e5e9e958e06258e06eb0d7d72fdebc3917323e39c1393d1cb348234b1665e725fc9c686cc9922bc2ca3d822e60c122e7691c9f812e3e5f6798be897aeb3a3d9ddcb4d10489979ee7de7e3b5378b5cdf8ee2fb46d6fc5c92e750bee9785b49835e8e5dd01bf2e0339734d85d570be8cc2aa6509e453a5348680a508e273644c1e6ec1bf173a6a390e99170658a8ff0f27cf8fecd8c3766205826e41a927417330c1d3fc9e5fb82913b8b8c8b97110952ae88f1caa8915c340bd74a1e5c6991fbad9e699c5ed52b68ee26c490456e946b091b5d26d844b9c119651649a0f09a9359346f9fe4d06392e743cd498e5194648abdc1ccf612be9053b271b149d98a628c7d325f7ecc3c8772b81501317128f682e6cb0cc217d63cb99f1f1c53cf25d8cb913852e6ecb14f200cdf4c2e9442486fed167b4fe78e7431eb61240cc35aadd62375b75d628374af5c2b9940a47348507c22a14829d204c1d609b199fba8e3d1f2a620984b6a97c33d9b453e5fa8b6b5fd9c29d262b1dc7a279deb7088e3ec1bce27480781b4f14e7aec970ac65fe0b0735752adde6a55554e559ea97cde83e1bdf048dcbd7ba41f24ccf26e8fbd71283b726f1cfae0deefc64efa0492367d12c6e692702ec9d85b5a6e7dbd58ec222b1b5ace6a1d0fee3ba4cbbd88b6da300cb3dcb57328dbbe58eebaaeab7d77279094a9bf99bf27d55b42dad24a1aac6fe13e0bbe9933265c64f6aa8435cc4dee27e459adb8b7cab769adc5cddde36e556e71d84cacf00faf31cb7b3d57498fdd8bcc19f9d32ff4743571f87d9b4cd233ef572c9dc8547549232e93421eae99e041fa4e6749ff9ca1a9db1d0594bb9f98c81d0e79b8dc27d9d168c435d7751c77bb77f79bb6dc04c13657ab55c8b3923f3f613391bb9dc88d6bf78d87cbde1b0bd9defda6bd22dbeb5cd2bd5a12d71c867158440eb95713c51fe9dc0d5799eb1b723d62f64e225d1ea4639f9d0f92876d143ed60f1209d7ee6e3cabbce109022953df376c2672fdcdac9f20903675c9a8d225a60f375b2eb05146d656cf6dd29beb47f6b27c8c8ed16ec708c718838d2c0eeb27b7ddec3c376798869499efd390367206652b399f919c34b095fb28a5b46e613dadd7a8dc0046e9d757d8b0670afd4444282358fded8106e2e1e416b5ca0ddc5032814969022bb30ddbbb3966a797d927cf6e478603e093b3378d1bdaf88deda34979851c414c078232d5012b924259b4f0842685282b254891434caea835d67ec51e7168b58a12adc9a8e46b97a9433daa189a01000000006314002030140c078442b17040268aa26a0f14800d92cc52682a0ec31ca51842c6104344040400004000100001003365b650e71b0492875a601cf92ed9876425e72a97a04357a48951bd7df588c24e2b06c40ad9034da6319d715c3924537b1e5d9945af470f8a801067b9ea6498adf836de548ec8254d20d512102df82c4d182d58a3da3353b9dca90bf876259c0bd9acd6b1d9885c9ea13a9e3d12592e2247b5da0c8df5a1a1b0e24074f9bb0a77f3f367fa590b6a54c00a5bc3dd4ac94320b59de4ed8ae091ebfc0040fefb8dc1c3ff66c05d8d51577f02ae824e61bffbac1eee1e77ef16fd6adb68d850be8f1460cf3550f105c11bb3102a020efc0a95a7cd04f55d85167a670cd7674f19b81dd462452e760f51437961798f655b0d6a58e28a8fef5a971fdffb8de54a8b95b3271925b0943ba3bc50edbf9d56bba9137eea853878aea392ec7908ebe0d2cf0fd69a5ef4e22d99785b6b0755fc8e72381c15bf6779f065d7232cd44523f2be7160469806b2910a385ace244d2d131c5cd7d61b3550e1ef558a0b48dba7b02013c91df6a147d40b82ee4df830769afa169588a3aa8ffb3e2d217e6648635bf887ca9d420719884a117fc2936a9b7936a2ffbeed82361ca53628420fbf5d614a054537dcbf19e248cc3b1844de8165a5345df083de0640ae061914711fe6a4408ee5ad061f4d306857946dcc70a94421c0e148b9e8a3faf02bb141c3178399712a8e342c24de1d2fafc0a41a55ad2878a68af03bf50df225def21b1874e69f7caed79860cc5a7798fe0375c69954b678250b895de5f2b08419998de07e5c6173118debc96bd632b2ac0ed564285dc6229cbd6ccc72e9170d9ea0c680182b25041090c484212d2a89666e341868ea691687a2d01cf8717c362268a638edd79696788ccb1b891b68b40068648e78941323f857877074037702e838506ba471b0a3a1c220ad28fe052162bf7c93bb5ffdf91d5fedfb5edfffc5ce572f9e8e171fbeefb920b332e173264a18204b6d65368693b38755a86c65b6c719c2eb543a499cfe21dbca44c603079589bb13f7cfdd3371cff48ef99d069f3562017931a5304ae1ca6d2a030a120616365d341bc551f16690a2e42b47039bfac51945bd14ae7012c25a6403b2130132d836a7ca63a0e42b71c205eb67a9ea5310f225612094751125330118bb82f606d02e1d13943b719695d45e7799707c91b7fa076ef8bf2e090f03d9a413f2c0a8e02a9ebc012880e36a6744c98fd52ed9f6b6c873e1e44a7e7e8a4976958ba91d6d521a3b9196442b1ad92704361f2452881a3e82da6da36250a226fbc2f8beb8a575a6acfb0ddcbf2f764b637c4f369109c13dff8d5a2c6f8465172e308d85a43ae2d5bcc0f46139f8b759f3a4e5bf9813f0c8477b126443b994fe046a03fe1fc703d44700645871ae7b8faefb884c225cdc59147f263f1fc318f614142b1082bbabea5caf4d61ab2750a5c2aa2ba610b8d151411055c195023a0ad41669082e68ae11406d8a7fcf3503bef7c62fbfa0696a99700035b5f40f8036b5e438949b5aaa030aa796108622a796fd1925e0cedffa3bb55869e0699e758729fb2e82c1a7d66cd785e66d3d3050ad7d1570502d19a66291e61a18143abd77c4c1d139dcda34c45d00c0a12167da7e93d866bf02698ebfa2db28a60251c02009ce0c3daa0d759e7d828059989e92b0e47ca50b47b3e4cf03ac57b1379a8e44c0404257fef9ca67bacab75c78138ceaeab5945992bf2c59e65f0fad6c863ee07257afbe4d1e8faf1fa2426ed739f0494b6c2235b9354a9e99610e093da7f71eb2ee438ba3c393132ed352248190751304c6ae98c1de4766eaa5344fc07751cabd916313b2851a76f1cdd6e06907e0ee1d15694fc03ad94bf5682c452985062af3e09926760b74c76d1e93d14edb6c67cdcff27769e8eca07864cdbf6d6e03648da0a38cd0c171f407a8199f1ebc113130fff33e4ad46b84bec347b2f4e943db027f31d9e314ebdafd1e176d60e626560b0dd326812eb8f2c2b56e94c02c0da27d046955fbd38b074920ebe09b28eae4e3b04405458285fce5888f4f20f0f82087a016a071e5f405c021cbce1b02286ef8f06301830877e0295b6e8e2ba52819fc5d80fd7424e72807fefd0b1548655cbcacdcea1c559fc62b77cf3a07c371936b3b5d13c7b31e1ebc2150f8354ee4dcb400f3c0c77ef8bdc00a7da1bb5b6af90a4fe7718982cbf9bd182acff38ba1a0a7883814560881becd701ab6acb54872db099c07c5a2b7062cb2eda687239c6127e738619a53a7baed6537abf891429558c4ba0438439d83ead77765125b6d3f147025c17338e324456cc90e13774a0a2e0d70851be08c76c4595883c0faac461023e63fb4492bc63554c6aaa3a2ddab8bd8e398cfe590f1b33490ac0b995598816cc90404b2b7a1641b20c84e99a72eb1a8372942ef5aaacc9d4e112187bc629f57c703216c1081dd5da744edbc3abcc29d8da02d49a320b21973910cb786c1e913e663390a5c1f110d92cc218c95a9303e6b93b98c0572238c43e604cab61fb7695662da38ada6a805395585903979d92787f3045dac7bef5bef104e7cb3738f53f53a77a0c74c59cbe08dbee84ac171538eea9ef5f5fe683184cd60470b216dbcd256e1285fc3326a2b679116d06f326a66bba467682d2a9a94a4dc510872a42b6b529354c396685be600910d613bdad48c9fd751945826069ce34b25508deddbd4044522055dd9b01c9b79a417845e3a9636db8e9d708e431a0610bdff44523ca9e2c027f9d2d47ab41f6e1e773987245bb3eb61e1911708235e5525c35a7286140cae24cc7755b6ecd3aab5d2d555c8da9484c7f612bda0475c94774b4a865180c185f06c7f39289d18950c5a230f9fab5dff533b809867909ae1e3d2182aac233e8290dbf6d6825eca087eb6dd3ef64d106a3d6e65475b23cc65468b23c84d977d0e98b4d564f3a1d54717d18333235e69acec8a70e2da034b3fb54b89d77b75ac2eb9ab360e207d2f88eb72862adb8350765cf7dd3d1750a83a240483d9773eeac16cbefbd38359d3a2c82d2195eb358a56c308f5e49358907eb04708c316f52ac2f148ac12c27cf15fc130bcd1d9201e1c6ccc30ce3a59e4739372ae4b783388614ff766323b27382465561979a0ca6c5366d22db3b1ea295d662b42ab8e99edf5ff29339b89541584cd4b989f09328e261e73ec7387daf08cbbd01a15e8064e0183adaec38a445824d5eea4fa82c2a960324026d5e78bdbd1b00dbff8c6d39971cb996085046f545636ecdd2ca7b0736f1ddb70040ab20d5919dfb39274d63c504efe0b05b12bdb3bda13ac10683282b2a9f82030bf9186659f7d7bd08a1cbbef37e53f4d39eeb928f2fd6b162bbac5ed3a3b8bb309da95eee2a63406e220d007203b1e20b32cd9ded708fcd891d414cb1d691ca9804be9b971c3b467eb83f92422205404428de9ce4cbdfd4c7430a3d60c2b64b997a2aa9febadff660ec5f07a17a282c76eaa33388ef9d6b855befe0a95a01d70398404737fc77897f745af485f29da989c57192da1cf0059441238860c90ae3510ff81de98303af6dd0c7fe9b0c182336380bc9018207726055e268b18045ae631367e5a5540cbf8bc17fba6cbc03eabc193eed03742785a6e707ee6ce84fd0264d11fd8d90fe95322b482e6156c805582b02640965bdf73553466f101dc0b544f0990b1dbe85a1b85dc3fe6293595d7915a8718e82a17133eea290473cfe0a092b75e96cf16563f70bb9711fdfcc5dde48bed5923d9326825a60ba5394041ce5144ef6c5dd4f27050cb22a2816ec7d609088a2292c49f5f532ce0bb59abb072e421211a5526fd4bca437bafbc909f9b0e4a15b2d18c82c257291cafcd3eb997abbdef29a614616ada88408085edfd3272e0f6c02018cbec97f37c5f87e1e4f0e8d90ff2ad74dc0974cc1a100ee03d28d0016588e2c40c0a2839d89276e2ba18b8e2043fa64677679d0c355fe93d0a3ac7c3648613fdec8c6e212e79017c164e065053a1fd9f3509b83a901b8f73240169fef7b2e4d8ef3ab25f3ed2ec1c0ef8b68a8bd5d8508e7bb7218cd114c22591733062f4ff62701c748646abaa6e60cb039acaa26eeb9b3c58d2b790bea73ed91b5ebd8ede96b036deff146e7a53edc6867ca2df9cbb719260cef8adb401f6ee5189e3e34c0578cfb122074800dbb05c484c94bd85179bbebff2a0f092f3f1e4301bd9a20b30a6be29088e75267a7e186ccea0e81cc7261626188a9daf49372a857220cf7d756cd1b2acd87c486ff5897a4ba4919b0350111da4214dd31a58c607a3c2223decde3b274d516c02fefc530e597767878332332c4d412ff517a740c9024a475de10bf397cb365587d477e33af4bffe27ba6bfbeb6c98a3216505b8b2c9b89d75ef57897e2c72c6218b9bd8a3630abad55a3de14c3efb7e0a7f0e326eef0edcebe7da843eb4e3a712149dfe5fbe2df9af7c14abccf68aa110494dcc221c0b42e5c6ce9d2651a602ec1bde01713ccb166ba18aa1e522adde1673fa77019792cf97411ec67dd624b935c0863a668911f98e89e67eaa30e9939124e6da918289ccba2e481cf4cf32ea031095c2a9ed095b098c2361adb9c32bd3f6f810721ed0958b53d44c113a998aa075c3f7a9d331441446a19b89605169d495779c0387182798e643a2e2e5c70b42e7fae333b0cd7be9beefa148986882f1935b8ef9d5a62898235b8c07b3f2a259e392e6e418aa850671f5cc94ae7ac3d382a3d470c11e5c70893a283b1c08a2deffa27dff6d132bec7c91a470f3c3abd9c56c08b02a7dc89171901bfe2f4a9cd8905ad533744450eeb1714ec923f0bfcd4c1092a741ad2d47ad9b688c8685a922ef851204bd89448fc0a874f289a0ff3fd55dbcf0b1226f7a3887750dca044bcfe662444125bd2834401ecfef04e4b83640527282ca86524aef164a008e25cbb09c9005a1aa025332ec698fbc30fd3d8babb4cc753703df9e7c3b8ae9185424c482016548ab14dffe8f45bf5d13676f753055aba914fdcbb12399d23d2f773de8ce4ac6eb8ffbf8120ea21e6121d89a87b5a9026193554d5be5870819fea94779b724556d1acb7a702fd75b3b7a5fc3ec12eaed5f59044d0939d41c64b032a9963b2eaba6f0afc1d2303a1db4b99af46fd69c29708dae71817940fb9c3a2634a974675ed8def0b841679b5e9c62398c00caa393c5403094a2e8502dd997b70a16cacb040098c369e85a0cbc1f6f5ba1916b8d6d394c1bbe1a73ea4f82afc21bd7a9bf13b1a5137f2429c5cf00a2139f92f20cc05687f77c438e496a930bf2cf5ac4122e183fc2d6188513f1f657c2d2af2e811f2bc11f455b4bf04bcccff012ead24910ab8ee094b6c7849817eb21971ac07c55950c67a1aaa6c747ed931c77e3bc343a523293eed502124834b4ef1e7338073857d5a86c11ef7740e110c72686321eced34055eb7d6c8c92ad10077f1ba8460513cfc644d116984da1b422306d4402c6d957d980cdb3f2e00db235e94a7e3d402731b9c92588a09266d5b89b51ec9b2a69afa19e4f50d391834599bf7502b62f55737b96db3dd2238ed4c60b50dc1d3a340ede1102eeec47d58abbaddd20d11bc3fbdb4a9b600789768822d5018a6242d879a6f6e4ea4021bd7cfa67680a3d39a5b3904d3f24e2165c5ad1e92b52f94adc5ac3aa2dee87bde1ea8128851d7fd4be83524969b3fe2cde6a572f2a0961fece5436960cd6e461caf24357d421901d3ca4ab2ed413a42138c62b79200e079b782707a265f51ced076962b207e90b7efed3e2be1eeecd5065b910fe61e531ce03234e72a3281c88d240183d6128b851ba0174b8446e3e974e632ba8645e8446b62a165e5ea04bad3a559daf2833d8b33c784fa8b84466b7e2207a0c4946f8f133df4d2038563d9720b46a92a88729c909f553051bf42acc72da90e658d91874c2ea966767fffc995decf8f3517c0b16edc0e9ebbec9b46e6431f2b27ae343df506c64ba0c4bbd6e933736efe3520809f2f2e62046853b197ddfbd5f512e1452c2c3ac53d2bc5704a43beb73099cffef58b4fd47dc4a5e3aaf7487612ad9936fd166aba2296cb1ae0c00ac70a930306bc22d02d17049fd184302053d2b00913efc29030492e8294119e826870409e98cb81b84212536891480bcccd424219ec05780a078c69c0182860b58ac1ccecc608940344681e3f98528fcee94bb5dc48bc7c6022ad8b65a8454ce1d5c724b818cdb3d0420c2c174ba45bbf55629cfe2048eaeda6643aeaae0ced30adb02b0a69981fb18a4b3cbc8bf0ee796fbad9f1310ec8ba149e1484860dbcc98d3d5b86a11782ac812e8ea36ed92c7887bc6ab1b707595eeeade5987751516526908ddbf0912f7142702d82bd5bc8dd52262eb9775a0d1b86daeaf344c95e0371d097a103591c3be908816d5ce7d290639bd7971734eddf00c760fbf64330eac77f20cb385daaf621e73ea3d9f4484a8cd68d21f782876e6c4cf7f30d4d796e147ce8169ee785e215f325203078c4b3a2672d68f8cb1c09c10a1046c9fa2bb39a86b105c77b10a6f1ea79a0730180852163c277a00b7a41845d6ef95fbb55cc251735b8a3ef1adbd0bc161f1bf97211ee277c54071bf4e76e82da649c94b755d842ebe06fecd01cbc77672dbfd4fb22741918c5a8d70d093a9dda47839ac05e5c5997037f0ae05b0831f52d9deecb72c9a1ba72cb394a185cf2aea7b70204e162b263a61e79e78336ab0116de3b8ef9ed520db89e5de34c540379e206091b0d1683f718417522bbd4db26ae23bd0a67b6b5fc0c8fd8d29861f510a6589fe3f400306dc47fc21f4e990b89ed90d34811b283090ee84822661c1a86e5fa492652cf401f0796e6ba220153450b4341684b2172b3a327310f7305e26fa9abecf8506f38f9d3c166e2763f3e490adef224261ed9f0809a0371676efef3b1e1a52d81572b10ce0fdc7414558d14f662f8ea5f1efb3ed422a6ce63985b4b629a5a126a3a7b2bb49b451c3990d9127c3a2cd131666fb1216a43985a8d2bf0f47122598b312f58e1c9d229868aa1b8102e415f990e3a51e2a362743eca333cd58f9a5d6547ae84833d7a15b80056311b07e2fd0456598010d980a6808d3ae3981cdb78507c7de076e2c0466cb99c3cf265256ae92399a8c70bcd56e583171e9c66f396bc1e5a20a82881d37d1107210b67475984f2dd82902656bdb1bcb4e1094179354ed32d02876a60ae7396df4311be2fcea28f8db035c4c96cfdbd7c134a0ce6f5f906805f7197eaee80e20291a31cffb442aa7f214661397a08b1a8e8ccd1e290de22681c1d1358b90d4520a4ff21c3d3936d5493f07f0f173873b4c6fbd3d5617fdffbe215cfde4938cf29f9c14a724990780ae9d9e05e440f7c14d0a047b5f7e7543fe1d9c77cf8aeeea57e80cc26570e4c3efe7d47758354dee958a1686c46b8da7bf78d00d12a928bd9029c80547e82fea4c5090b557a28459834de884c90e8444f312f682d545bf1d4b2a6d28a36a83d83d0788de4990436aaceb6f1503e85b5665a1bf88ac8c44972c13308251fcd319d5d2d3c055d6ba95f24097e8ee4010e3f1734851ca981ce674c7cee01d6df5c5c162168803a8e9b42c5306ab2e231c56f820d269db99f68832b93e0090a816ae41a743697205b09c0f168079615652b23eb6192e481c924153b9adf3b3436531db26566908131eff7561d7beaf115666b03375b0ccf2d584c26423320b886359abe27f6a20561d1fd38183c01d4625512869ca9da4a08d9a326bfea20304fe0e0063c9925313ac4acf5ba2077d5974a0463a883848accb9870f2d3045e07415966e840896b0de49535811aa103a57a5e0c0e3a10f32f8909d08170afb4a8613b142fb7c848dcca7f0ed4791c297af61704f739b01f3e18ef3d0766748950f1a4cd0358cb9b1a66af00a83bf3078d6d2768dd472e9d1b5bc68473208b7973a0758ead8265736019c19e75204f601a8880a12f46cd81b8948d62ab6fcb8b093902efc075b2987b83f17c37e2dc88927c87c9496735edcca6abd30fad607f295f7b7246f210a28df3ff49567e6a4c7a882acf76d91af214c250f4ed9828702cc23b2ca3919f7cbf9b256cd51a67c507375741830ce2315e471de30c8f0cad0bea8cd81dc3a135ba2be6eef873c2f1d7beb40e5f9cec53e945f411e76b5ff676e96be0c311e14aa6f0eb8a2f9aa80759f710b070c8dfc3e38b0f0973b2e44332afda1ede52ec1ed2c2057d18e0844c0afd47feb24c051ae10e41c1679476dba202195978fc6ec1404c2ec9efab2472884aca6c17ca17eafe3fdd5694963879e610337ae4f7225f747b3d8e506f1d2796cf0c8288fc0d611dfc27b12224afea61166c2b00847850dad24b02e82924c406a614001a0fbe6e4053e94df23a7eb16a59c482e1755a570b92d1479b2441dea16524241a0138e763391ca2b9d334f8b4eada742629ab01d0252e4c7c4bd21eada800d0864abb31cad0eaa75c459f7d91c2ea27ad7ef296c81393cc6ad1bdaf666328c97ec47481d388242e61f212b83edd7724a78ca4fc4d37d7c58a39fd7a463b4fd9d4b4dd086bdc2b92b5c139ba9f193641b528e220156b7712637f2f38700f8ed16780e07a48c53256cc0ae0c512ddefaca9207b7a6ad9619898bfdca8702fe9a4d8ee35a9e246a8435c239f65695e68150ed70ca83b2e7828f19c93ff609a0d6344d3e75b385f15633b4c97c969fe5e953ba3d75681459855992a8e3c46145920762dbc298dfc17428cd9bc67a3385040116af3a874a249cbc4c1bf8ca12f88778b49c4d947015ff83f6044fce5b6ae1c93b4ae5f729bce41fe61cfbfb359a77fb0af2c25a6ac2c8e56c37e720c8b68b1321ce16479a200794dc68e8c9594e10ae0dcf3004f8be294090f232c17ae6066ec17d1e4aa983517941763c546d7073fc2efed67bb194196bdb4b35b4ba3d879954c54ca65ff9d8603604392ee491b1146cbc20e58541d7bea9ec24d46f34cba10bf3aaf5922fcf2a2d23d05578411e62a3c192c111298f218286fbc824ba04d0425b5cdf557b816c1938e481470b13ca04706561f742c8bfb91dbdf83b0c7d625f0d08d386eb07897c596ac918e1ba50a91676e4f950c4b92713be5fec93cd7b41d0fd339e24e1c035ac3aedf862ca9780fa44b0b43a0b205b25cb7c6dce685e85c82a936d07c135c38ed631713a4ea2b168d49789c08577018ff4ad6e7a733b5a31dbcc5e7dc704dbee3dbfd456320ddfd094cbd4350f146007211262e5235f18c0412edfff101e1d2516e751e0d0536a661d670a7391d0c3d561cf252d3a21427539c38f9369aceb2e51c0d09f155b8ae265a2f6988947252ccca2b707fe4a4d71e9110abb0bbdfb074ae4ab549aba8b4f0e8b6dd515bb1926cd7854d2c59ed397ac5b15d5ae906067fdd2bf98904895d5c6cc9ed6a5e09f728e3c15f115869eb560d88e4da1b4c7ce24c8ae03e379998564aaa57f8af338ab85e10459c948063b50eef27cdb9718d90dab2b2ecb00f3ffdc59bfbe7c667f6e775011dc4fa7b7319c5ad84f86074d723ffa4949eb5f8a891b5c3ef4f9d125fb2b4332bba5ede444ba8ff33d742f5fffd4fb6f6d76639c3f961f19cbc0ac4ab84566995e02171e0630c37ab688710726ed114a15901372ac92afd0d0f21245816bb77ca9644cc07f3202edae73e00b16ead9ee97ab911615b7b6a15aa3c8fb56c2842058fccdbb0ddaa03c3b5692ba3bc1f61ab72e59317ceb16adb1f8b38be9aa257626d3c30fe1f6db6cad193ae437e35389c1c552793c8084bebf517640dadfc6e8f0eddcfbe9c4c20364422a118a2b33ff5e454dbac022f8609de102f5e453624ff83935494b7e3abcc20b4c3ee669e28cc51eb784e11e32fcadf9a46fa29333fe4d66d2f6e291dbde645371ec96aec26d066943ec07481dca10a8fe6352d9d1555c44f6616cc93a0f6e93bbe398756231acfcc49fd5e3834540a8e187e0e8c91907254017b01821e4345097eef5aa1befb26a0d7968cbe1e74779c53239788be00fc335e7f9f528f4a2ce50142e191259266b0b64ca26422b4d9294cb7d162528b9af89fdcee1ff101224fca2ff25e3687f5800292c9e77de2e2fbc3097b45b0e3e4f0edfd11b14d9668245e1cdec3069d2fb1ff6843477191838c6348a00042170c45da6b5ad403eea6f8cd50bca83dfc81ec872928a7ad1ec1250b0c60d82ea4d7a59e1eda0e9b160109aa8daa34bbf43fb5a1f025118b4c4af83e9b22425b942672131e7ad5ef90e5b2fb6683335bce2013854534ce10108b88f3429054a40d2616e2a23c0a55440658d4d043f9cd38e744c9779368e608c711adbcd49aae11de5329ea318562e8bb27edb0b066d4f2d5a268670677bc22991810c675e50e25e01db11e00980abde1df20d8512c8763400a00c87fe347973caa1d775107fd65bed451a69bfb6c331364ae7679ea537791acafce0b211ba884e07036812bcc460d9595bef9862756e007116df9edfdf42024aa1346a966135c8f7fedbfd170a9906f8d476e0f7027d69d366ebe362eeb022a1e3bb234805cffe92409a4304d4e31f5e3d4def2c5b807e31d6173a680bf936ceb2fa035f50ac03f3b6b104af32a767d28d2df75e24a1e779427ad52bd242cfa3786ac40c1eb9007b5bb566bbd1c355e25aeca7a8831c11f06f5e5471f0919a5446f561e2c940df688f178261aa07509d9863bbd40da4d9b48e66e941e37170d51b18c3c40db97ba50d92fe681aee8f4f70e21c2dbeeb97beb4197bd4e0188a753d98d50c37d6d1f18799354b40e22219b71b7a958ebadd0cd46ed4163c3e8f9cecc66a09f0b3b0718b6a4ec8b3bb662c5719790ee993537262dffda40a2eefd08761bfee20429a3f5b259c557de2359d870d8c1a29b494b99dad1ec7cf7f04db15803c1cf08525533a7d27c6d00066001dc37d58bd3f1bf9b3ebd312fc3b8a78cbf3b26d0cf8ddc3b69ac5784541cef07c066a10cc73e62a1512c1a58a8920847cf2a873a5830fc3409b5f4dc69fcf48f503778804cc7185bafed9024a288bd21f0572c5ecc426868709698e89d5ff4f03a3a875ebff411abe73ca5707c8eb35e654dc75ff2d405aab2df44a58f400a4ddb53a8846cc1025a56c5a09fb9e473ec60b37ecc354654512f4844ac8b109d13ddfbedf087e8f5c6ad9322434d4c387ef31687533d0cde638e42749947703a2156fc08924d4b4fee00c91e9850c2e2f12613f8d38bc14fc462e19e137b49a5995cfe16a2e4a5b9326032945cdb97159ba653a38580de8717ac5621659cf5cf0283409c4b2966212769384951b85d96ad540a9320561c3df240e88ad133cbf903bdae6e2d0e9d0d6fd39b1239f029c7de1e14786a033519171fe0230854fecda4530495a9f870587f3f45cffe30e1c0157d731c8880afddd93c0e50873b2410dbe01e28adced53e95d8eea1f6acfcd3a2dd07990451f12a6ea44e051820775a8328571b0a502625ca6ee5de01858457a000a49c9075a2d4262be45c3ca232ad4579abe0c1ab092d7edb138dac02e54051a2cb6e911a967161e141800139a1fa483d74f5eafded417c176b55198c89f4b81f7ab373c0bf370eb6da4d7d2cb88627a6fc01410b9f01b4acc77edcb1b2308fea769a0afca1edfc0e5c551b45eb8e742b99b03be859926181761ec9365e204c52dac4cd2ea42e1ea9cdf4b2e3c79cd1566ce637863481d0943705c45e361ebe7b8c8cddd997b89a1b57e08a96944e5253c61d68490f8509a979ac4dafd088ceeb1192129c1d2de70bd57b23b67e11faf920b7c6713d73ef91819e26a0fb37f50b4f480e6f4c193df08be8337595327987beddce43fa0614fa250a926732d0dd8f4d01492e50f84d5bae76e63536f00a410d531a039add91bbb2d4c981c18461d76535b94b4f1552dbb5ce1302e66bbd5e2ebbc536fcea5044c72cc2a4108e65beff47fffcc16b74ef83d744b3035dbd5ec852d19d13e3dbed0abcdf285331e681798250d2500f16f80e09d10b413374b8743ce4cddf102abd8483f8380efe32fadec09e522dbdb37a8b43c34ec94c040a939f33b14eb725f70b61dbc386a888dfc796774ac42e2a97cad21f1b24a804f6c638683b3f85f113af8eeafcbcd3fac15f551c872715b152409dcb3f5fab543a556dcddcb38d22e458a4e48ebc1b281ea7d0c6b7f713930305bcdb2b03dedc15c4dae26753c00897c2c89b9e2cfb9e8f35c6d54fb2591ab80e9949902e97ff6b1c66b1e84a48881c7d7084334baf6c12bbc3b3da76bfbcc3caaa5f25dc0c9ebcb92208874ae8b872c223e989b84d230e755b6c9c095acd157693fc9925f6c9490b4cbb0301385c525329be29a8dd9b3b9d52049813c546c7b20c60a762c4053014bda1b40a81892d2a40b7f85dc0b79ca0a6d546c7e81bce7356ba2c2adfdaa8d9f78561615515c3a017da42e29715d654565936b3397b42006a656d902e7bded1b94f8b9ecb31f284af407d700fcb75fd75f54736444f5994bd97237dd5e450302d72667f542d7a2c2ecdf86d295cbb1bb7dc26faee081c6250610f49a10b2564a4a7a9fd667a9467f168065d4770d7d7e9844b8874a6aabcc01e1a8636b97548760c8b91fae9730cabc13aaca28eeba0afa46531ca57ff43460e4ddc17228dab32e9bda4cce9e4c5b4d43a093640bfd252284f6888c07254040e44789e390306961e6a2cbc42c9606055340bf552bf474a054d7064f49f3d00cbaa05a0c037a01174a1ef9b4c593b8c9e83da04fff61b49a527f97596b0e428009bd07fb124566de02dc69cd572c42ffb7d395cf94b2c5fcdb3f4b7092277aeacbf964f215d37e1409b193ed042693ddb4733e2db3e772646e8ddb0a3920372a807c85efa367c3f93af109e76afb99b0ee007dd62b31b3ea80530d355759e6ffa09a550055bacc70a04e041adf1311c614130304d085652550ade8bf3d30da0e01f63abc00f23ef3719af20ca3f4c814aabd0a1418956e56ed4b34a691e3adecf50ff542f1b1a66908a738b5176f6587ab9222507cfdcd61d2eebdd4abe3ca4a32ddfb276881b1a2dfba3a482cb4599bc6c1dfd60f9190daacf95227863dcff0f6ffdd4b2ec0f3d5ee63b675259f9780b4716f46660a541ae2327533e0819f97efa33646e7662bde61ee04fa2d3aace1d717cd1240e9dab0594771d29109c51ea8ac740db769e3f834f78a9ea94505d8b8e1aead27b6567faeca295a103243907d2f283ce0bce0c991e7d822cab5fa39451d1c49069f3e5f36db652a132203879eaecaa63db246175bd1de39f5d77571dfe560ad9417a646ec2a9a05da4e3c396e9e91d0cd4bd89e82f250d4545240d9c26693835f20843a1e43515696c8cbe1579bf135a0d06d07d768d44a7e4a5f148df3ec90c64732cf281bb142588c8dc3db7ce9d829dbc6bc1bf4525c7669bf62ae2e10ff0bab6f125ecc5c23206c9310a8911918d8804c79e71240e1684281764dc31e7ff4e6cc13b79cb8b50b6899426f7d7213b412ada5ef410646f1aef393f154427ecb3ce4239e97f6454f2db69a506069e0ddd63c93ba97b98126c27701affb1587f2b38096957322776e9a12cb5380db3bbed199529f07bfbdbb9548e3005ae9b9b3a95932e308751f2ee5f412faab8dcc806d1c0c64c5a858fc8ef94ffdae8303d22312083e9970342031700cb44dd2358b87b782b6017df65c0dc1739f4d816f913c55d772103140b5eb5923879fecd293e23fa38fe6c3a502619516d2a6925971a39c98d12706b7094bb778216911131fde41efb82155097cc193e366b76b5455144729c6b334e9db5cec01a60a71d4fadaf0d53c20f8be25e0d35a4756672525f9044792ca69863622bebcb3b38451f22a11c415fc90f218868d2a511e96ac2edbd4a5c0e693e636255a163cc0864c7bfa0addda6b97cf0622d39f1f84010c68c8dc3c7da24249fc78779624c94f1da11b111341f8d0f6a8d9b2559c8a99cf191336dc39a2452e3cbf50aef92511551febfa530b21c402d4d8f8aac7e51e61ad0b30dd45eba16ae32c4cc81c2cd7bae23ea7594f36ce4d3c8edfa12eee4907f227df17456bd490874af05242f704f0905cb79ccb48729f27b0d7a8fd57217fab398222e90a785611a93f9022f5200d420d0a94a4f76763751e49e56b540d16f3cb33884ebc489087c9112567928e19bf939c5732d12eb40941519c6084a5890c6ceea4dcf46a7b70484189504f62814667caa355e422b83e948fd1355d9c48f8a46242721720234277a21023bc24f021a90aba9147407ca7b806ac0dd25f1c54b02adb65a3e02744d247681a0f866cbd3f4d01755424511ada248d5b1c6e9e291aa8396a63bf717bd5dea44312e057fbc92e3f5c7107fce7880d8fe694e67f1231217d31b7d67a63d8e8f9c157fa024f2e3550423f1e833e15a9f984d125602f92f7274448f851db74a0315ab618b04aa8a7c446bb6eeef84d0b155cfdc7ceb1bef1d008ad18f01d9af128fe07f1916758d4acf452e4c79b5601189ec9023537a0c07c0554927186f66e5c3e0d86933e57fc6cee0a88d7a54e6b3ba78efd09e158ef6ebc4d10a6f87300808dfd8a96cbafecb905d11d19deda7b2c971a26acd7c7ddab25e43c7cc6ba0be8850a7fc06087fac2e6064a6db45f4403401f9bd9e78e4818ebadd57f684de445627d8aea382ee276edffa84f1ebb19c80458426f4d34494267851a926c551bf4d8531e5cbb9736ecddb1256b9617de71e2dbc4b319eb852e598f81ef7a73b99593344ed1b772561beb088d105042b2b8f094e1ea442b02731a4cd079b5c5a12baa0a531d49505ddec5081344810c17ee5b1ed5242e86c1022254a3850f5596cc021219585804dea54446d794ccb045512f880d2a82e65e8f9685563a19847b7625f1bf1934ae50b8b04f380c4e838db17b01c402f947e14e572124015037f8ed9000278e9cfcc52db0740042775aac3d0bc9c582886ee080ddd5d0b49bf44b6030c9e629c4cea410d0ea695db03472e32502708cbe5ae4120951142d42ad4044e5ac3534c4075e44a90f9c50d4977284619f02461d7a9a11d5fda8c890bc7c178f545bab9e8916390621a9f06d9d238d61c84dba060e3d211ed6570bf0848abb1fd3284cd928fc496d3475221e6a06ac4e45aa16c04d3d844fb716b11377c58afc08884e4c07b40239f3fe9f933adf9cdc80ae0c98fc3c4a7a092afcae990b9e2224064890928f6db793d80c70df19b0094c09e03d53661bedf58d612a017fa3b50104c408c8bf220942ebbe35f26182958a1ab20821031db7be18e3e279fa1c353f703005eaa3f5edc2032076c3df0cf1537705d635a932083690b87110c5b7176782d7333832f34cf68bd5dbb24f389089f0d8450a93265211ada0b9adc814d1fbbce01004746255dea55d0ce3cfcd8c16bc3883464a9aab2442a9f672062aab201a8472376f6b21ee5c18e77343af09a768066bfc00f4b8cb704f07828651a98098c001f4cf049187d64df732d190deef5541dca75812d99c043c28fabf6b337757bef040afb9268b1762ee73906c82754a36a39a75b76876d487af5cb67e117f000fa1a5b3c558516c19f3cd455b697a706c62e548bf4273a6bcd0969ab0a431b185bc5fa7dc084bc5fe3bedeae449a29429401fd4de73573d804e1237d0dfa4863ac7831d542cb500ef8b7115b49889875ae890568008daa4ad543339ef418151c1355b5527e831ee931b1ed90dae43eb542b73692463e74f11c10c27998886733578182d5a753d3353d534860346e9200c21e717d85222f533f94f49460533afe4274772f90c5c6bc801aca6efc6f7b89fba35b55a47593376f9e8ea3a079cb3ca887b47d11952a03fb9dc48cd53a93886dafce0933b6683bb53818a0f7c30487949bda753160ae8c2b0ce0c5f4ea2dca00ce97442f33754e91d1ce64fc34e7d3bb03c9cf57809db3aec7be2fb37caa4b79ec788a13d4d29cf0618aab8d0fdaa43ac07b511af75e238894e29427b8b7079ad4a2035b6073c27f2a436099cd7fc2a0ea107e918a64d96096ce783631f856c08aa4f80b7637be636ca2dd9b4873be8fef78b236877346ad70b3ee5445ebe9d8762a6c37540f8b4874266116d55c03caa953e103bde00570c1e0355dbf97e995e895f309d1efaf797c3b65ddfc535d46b98655a3c52bb56f9ca392d9d2e29018c0619b26d3fc3fa5b0e853710ef3bf197e19ab202d426903daac416e0d1a68c4c128ae7180e0509c48277797c5c42038cad60402851d1228bea78782c637af7abb18532d9bc6eeb974d9cb673a2a28968f7d6463063f5d8ff3d4b3723857cf61889554cd140053bcbe6758ad7ba5b2726a5f5b828148bf542792ee51466116f9cbb825795075eb3918bf3cea95f5fa26270cb453ccc6247d726dc53b05d131bcaf0cd96b550715eda5db8ee1a83553b84ff94edfb07c602283698c116dccf6851408f5a0e60b108bc84722002875ff1e7040242834adebbfbe33dd67c495af516c690a5420b22391fa0062ea1148bee1fc14ebe74a99e15588743bfbbad349d46ac2ef0a3d9b091ed324f97ec2a5b07cbd793d1dd1b1cbfd99c5ec5ea190815b4af3a99900162cdff33d407d5529d4b163e7026d541f8748a0776856789a3270dd3e142d73beac0edff106acb9bb1d4d946d6fcf68f203472647a45751841fed0a50bf6e8dff43c1df5e2becbb0b23337819b4a12c689f3b5ece9e6b51733324c7cd3f824a66a5a3b49165e6e627ccab358166341b88119b67079de53ff22cde7605019151f3cec06c342372552ed2aa97f8d8843603c201b6ec0e6ffcfb2cbf8d4841f4917d81c39dd6a45932f2d3a3ccbec33f357fab927a708ef90a93477c568631ea59d542d90ba9161c6fb8616b41bd59c358d0d6296b742c061a3e332c337069447801c4cc08249074521e299fc781b62b807aba5f2ab46188091c94fd0c87d457818b388b36fadbab9ef89b5675a0eb6063b2d5bff44b722978b45f7d93492619e38ae0ea8be07b2b1ff3039ae5d43fbb3931135e179524ad5ab638b50bdd783dfd9d9bcdd797c5c6b88a76e2411c15aefc651501096c13827d338f069eba39919b47bfc87ea3cd4a325e18fda8f8a720ef7dbfa3d6fb90741480f7a029337e55f167d4eb8ecab97356522899d52987720484f7e89a373755b5ddcaaf0423821101c42f8a94e1bd2f414c7ed9fc4ed4ad4264d40529089fca6d8a1bce83aa7eefdfb5f04d5d39adc7cd0b8919da29c980ff179cb082952990bf35fc83e31a99de12b0eb83107c4f4ad11e8f9ec3c42a702c4d4d78d2353d808fdadd3d2336dd0443ad0239cebd418d12540b2fd6842eaf555e580b66524ec93f363103463c15227037934bee66d538e83fd05ff597d65d15a57870fac81d4addcec433b21f9b6d109dd0ab9f7237a307608fe062a00a591adbc092b8315fe414606574fbbe4b88ff372e9b42fafc4c0fa3784abba1d49caef5f1e425f2a2764e7bf008256d769ed0f12b02cacbb494f7bf9ce322e10d6d85dc0b681a0b4a71230a5968472ccdc8b5b97d5e5c63a6e6109b723cbc9de56314d2c9e7ae24a98414b1fbd0aeb6dedb6bd123d7c087f5de1e19b3ca45b6fdead5eecb650b0a1156804febf5de16bff0d32a4c2e5e724df03e67d61a8d23999365031a530dc830e1446e448723ac3cd0d66d0500ca3778971560cbbf2f06eebbca5fedd349f40e2d6e628448190d0bbdc2436a5641c3be08167dc80d67389c38e6c600cd630fbf8a6f69d4e465c388755419ad8c32b4eb643559f26dea9c16097d54c8b174d061752bd48f78991454c0f4c1406088f754301df559031eafd6577d36c4063bcadd5dc49161f16990f4e61913a93bb6adc220385150611b63701ddf61e425d6771e973d0e452bc6d3d9ddf93f5cac126f8742ad1fa8a2af5e53b14971dc9231d160f6914bfba1b5c3bc604b4cc4b344ac67e114919e60fdbcb7150387ef6deccae807be8177b7fa9c7ffa7782fa057bb942859445bfe423078da7b748824954df04d1afdf69e7ee98e445a9b55124ac357d7b2224805e0d9ca746c60afa4ec52ac8e5a14839da422331733b5cdb8143957a95947f8ba20cffcb5e1f7f4634015533c2f8dcdfb27a2f06820d6f4a822712508023220c21fba7143ffe18559d04a1fe06e0469905a062896ab8b5853b0ae24f4b20742d3d94f54e3a1b0b055b0bb17be953459d034800b0aa54bea1aed58c7e4521e2e81b9f5112d359308dfbca13067ea14e1d67609c15feef8a905a421a02819b0a9ac749acdd1086eca775f7fe805467572adfd2d7d99b5f3dc67b7e548c5bafde1656c679458ca923aa1f02bd8b9d1806d499763f306ea0826a298870f46f5ae6f9718e724b21bfa9c007b8a716e05f3f6c428858939e444e4b1c480a8c698b66dc0b106232d0143959f0dabd41048622bb75ef7697845598ba27dca648c6896649b0495d452eaa60be14f9033a9af7d05c0e69d4d28b45635e850fbdea24847cd8f69e7b4ca4909814a0068fa1b528fc200214ac8200e450e512aaa94aa16c0dc85f8e82ccedaed56dd2d4041bca731c45a40bc29c905e05f4f542985e401123823009dc2ab5f4518a58a9532805990417f7ba6135c8c92f60f0ac5edd60cbedfe89d684c7c03deabbfe1240d42c7b0d4a206d79784a028916b3e96b743e93e5139c37d0ffe105a7d4f3f010a4ed091004c71f28226e66fc1f6b0939a0287563ae54d29581639af78365edb428064e7889274d97ee9a4091f36b3592f1e233f0766948a7346959f402349c19b6d95179233056e8c88770cf179f2f6b910374f0fa62475f0006fd125cfc7981a8a1d9548cf5b948055ceed7cdbf2064db122d3eb06ebe82f22f58e3a0807c3910942046255004337b90a562243aa62e464a52cb6c1003a2123c0157e575e16d9d9b0cd9d1792281e24a9eac213c1624e0196de143554526729df55e80cbe20fd02e924ad9d1ba600daa3b651ef7c983d55d79445ade3ce5337d962cc017367b49be453196d79efbb87b6bb737e58b5ed60f6198c0c40a3ebcfd0dcdb26f23e73f85a5136042dd268881a5cc4e0326fe53e1f6de6bf9a961835e123b4cdf2abd689885b070d5e6d8f741f4e831ff4b4cc5976aeda840f11f34443fa4436531041cfcab9c8612bd471a86161e2a1c520abc334ce14159118d818d8c3a06a80aef1cd051a0b648437041738d006ac37b822924683ba230b0f05941201dec2f90876ccc9d0e929051ac381e649c4f0257060d27183526d2fcf560ff505cbb50d5b7e0025eeba2486d3f85c9f605fbfebb92e52be8d8251287685c11f8457311c141a487c86e223844e28ac62d2287283ca23a447712c14714a708eea27944e310dd216297283ca270457116c9471407454aafaca9a0b1225946b1c23ad12d1b7d694b0e6daea24fd3a00f4155107a3b5b9b20850e978a8aa556f8c053a1d01bf093828463348db1467ad3ebe64a89482684a4da11eb08c0448d905fb0e5fad19752d0cab662320de2226d2e9a2a7c2a64465f0168e4358fbc1b80b63bb617f01b16c0ff798a32765c15c02062da90ef938ae7ef89913963af7d4d14755d9f0d952844bca22f4c286789599b8795d48c29ac1bc0de8c25034d936983bbe3afb1c1520c2fdf58f95bd987f9525fe936d062674213172cb23c22a10b9acf276d8f712f7a53777195edd7ccaca17942f29edfbe253fa867d62c45d1c5aea531a5285942e8eb7486f98f1ece3716892f7cdc4b8f9ae174e2a251342317d4f454c295744f09eb0e663bee95554f9ee374f0367b8ca7b391d654cff4da42ccb23edee4ab39804bb983885a0acec980e898506f219c26678e1292166857ee310d33d9196052fd63cc31d1cedb747e8c3e066a25a022a2ad37ea55d372a28293c6066ea4e80e62d6adb4e1e5b2742edede755ad54db5f701c6fe183c1c05ebda5987ebfb880ca5879bf20920d1fed70b3d9f098b9617e34f395f15d7f30df9ec2e83ad0044c4174aba587fcd5b51e873dad017724c1dcd174217accfb0a74334a6ff8da3d2dcf7f18c26dfc15c33696b062ed19755637d1e785e6c58ade8f415df7e54a5f13fb9a0897892b08981e10e31f37fe826a655b519b71c5dfaf5cfe95dce2be0344037c10a1ed4eb1f1fd5f047eb12a8d17961720c36298db6238f76a8ffef853f009045b8349a2131425127924f0ff8a00ac9741738ff926d933cc1f759ebcb89c97a82439ca440b2e90c7fac987c4d0c3dd2092634217bba490f5ba471a0470979260939f44858a35f568eb649a31702f8d5c4e97b565a9664e5930a94718985b20a4b5f049d2d0be402952af7c6a69ef73326dc75120cc24d92327b0f06e81fd3eb18577d30b0f8df8ed1dc2bdf57773d60e4fdd0cc02b64c71dd180444332a6f690dccec72425ac45b8cf2c1962baca93d83aa2f7e30201a5e4305a34594bf2150f6a42cf1bfbb457437217982e7b195e83b84327e1b0ef4e98ac47927780020588bfe807a60138e6912c5ce8f87e9113fcba52de6c084cb36ab1f4603115e8f80acac1425fdb95f2f6bddf9e0340887769d9f5f0f1ce6ebf12054e615d0337821447734c0364070325a01f0da625af2c68c1524a8b2e0d4fa79adc76ee1359f8a94c1f13e4cf76d8acdf2ec4f9cb36ef61c5d003c7eadd7d171a3f5bed8714635ace763cedeb5fc7a6c868135e4a92161c3ffb945412f33039e807b3871a19789844e07e743395154647ad20fc0fe9ef5a0fa377802187fce28b684216e485f21b487c5597e6b4924b954bd7ee8e54774d95ce757239b7e79d5c1e12249b9611f568acbadd2d3cb27df2e645b291f2a1f7d036e69fddd94866d67f6df8f4be40617ff3aa815ee1ba4706e1416c0f8021386217b15b6d11483b97834c7f690bda6726dc69187519b054f78e0d69e29d633c90d83e4bef283b069778373ec525c1e706f04a9c084e646c1707a302d4608251e264aebfa0f3d92921bee7f0bd9811c1afc2d1331c27dde1cfbc8e8d2f71c3d4096c474c6eddb0eae729ba8f171400bd35ae90dc8e50b19c0bacb2ca8543dd1b68c08356b318b4e2f7f0b3eaf6e6d2bdfe26862c31aedb144b12ccf208c45a2b1c9946162bec6aaa4c272c601b4d16f4f5bbc65f458c403e7fecf939bce153fdaa2615b8626758885d19dd5d48d66139903eb35bb1a28590fe44e7dbacc27b78484a76a082014fae8e793abdc27bed6af845099e8040c99620c8522b8df45ebbdffb57499d136d10f6c5e1250f5facba95a2391dd854b55619d4da50d77add24deafd8c4a7bc212be77a70df34e6736898b07402fb11ca75fa1c9a6a2d6a36bb2ca0d541f1e7caba33aebb02419cfc5529e781349fc7649d4417bd2e4e1748063cb7d8b1d0c7c136de3b7f77ab5696674404b41e20ef1e60446ad7582f33f8519f2c43a4250dcd59d4521108c2616c857224852dbf00964dae237645567bbaa38cfe981c84f3fb9c5fbbe4b042eda4a502469e0ffbb0199c20a9c66020426c29dd3ea0cf3799bcf84104b54b6fe8241f7f76724e260e45728f6583168691578701362544108f249a5a5ed120c8a6175ed17d4ae309120c34fda13a02c62bf9e215071c88adba0f1288703f08b2fffddf582f1f73f90b08c5a9eb00bc3662d64f92df3bf82a28b9b0dc6289e300c10baf6000e336f65fc135aed417fac555b2366fa79b96b94bfcd23da3f0dd92ce0630ae8f498c623dd4df1a03546f2f48cc8734b3a54d054512c8e360ec513ddc5d01af46d45c256eaadf9fe10ec869d6032b98916dbe9347a40665edb38005663e65b34235a3fcd75b70726162b4cde42c8c6f71a289e7592825f1c8c66be33aca9ffb6338d0a9b686c3273bbe0578940114af8c0b5f6844f51029deb442d5d79a5e053fe7d466d030f89293e8d0a87af1fb0ff55affb30feef736af9c67747ed5cfeaf627d4da4b7a62e96d12e34b97a7cdc2472d8f332b18a643ddd2b7a636b921bd4e0c19e703c9c2b4e5699c676f15c2205db5580f3a944663029c119871319df2fea00ad996c6866b9133a76c1d13b765cec2d0c6b284df32f5cc2b4f169e0c1aee6a5c11a7193b5105a7302f45f575b0f144a2250f28f4377f25163f9c393211806c604bfe3d88a7982b108a127a09819769d177ae084b77112d5c3bbe6ab252390275e17829078d720ae1820fa510ca4e1cf585e4354547ad3860be59c15f2a87c8f51ac50e72da0cf063108677d37dcc13dc4def9e09d23f739dec78b2b78d5aa52b1d865c908711ad889edc4c320a9783330aa449399b0f80622168060cc1ad91e798c0dba62284381b7d9c42baef9f255772d0a33510834f151cc5cdb8a372df29543fd73d35f20c087e1393713df29d7ac653c434121c7898a1a9ce39eca4b13ec39ba1c7519fe7c43ae014f202f8807edb85a5deb23a7ba5b0e2ade83065003e94c5b800646a3ff386c82d6d67e0629d5ab95408f4775b3858d58461af1c9a315cc033ac7228bc1ba8758a059412a522b9837eb258fa7b59adcff4bdf0eaecf33248d48ef15aa2f403a48b7da94197620e66012b8df99020e7cacaf894086c5f2db66c4535dcada5f0db686370729d10d79301517f94ba5f67c5b221b7d5b52789bf18171c952abfad27dbee01bc73e1fb18020fbbec72eaa28a58344f99e3658c0fd0204af61ecf328a8e484a522071c176e85946444bd79d234b293de8cbd975b46f44d1516841181c17dcb89ee1cab026794d53f918e51b3a05536c2129173e0c1546028c10514e7c99ede8712f9a6051dfa9de83cee3208b22636104ce1fc36e25b01131bc117ea221b17589527ecf2e1c98789867057c2716bd870244665c2ce81bdb090395a0c110a46bfadf071060be612c04de2cbb6fabc16ade4ffdccaa4e3999d3a60a4e2d0cbf00f59dbd1704603d08af3cb7f10b721fc887d1033f10ccd72139796edbfb220ddee71606337d2f20c96062d6f4185ba1f87ab048221baec06b20e5d6272ee89806eeb5bce83b71647c5f0df00a9fc9faa2cb7dabb0e52c34a8c7042559bc6c905476571138a9b4fdc076fad9aa0e3006b3767420d9ca0d1a104743bbf8a8e1d01528afee9b376c58674dfd73305ad893b020928064fdcbcb504a716bf10afb7cc66e89c9a97b0d5234063e7cbbc89878bb004c658a5e3ce05a15ab6a08e5d93228570ade8a1e7f26c557b1d9d44b2bbe2443ff152b080aa6aac73c7031f15fc9038d4ed48407a83588e7cf05b7197e86461d65101f14cf029e2158135bd0e73098fa042764afa71650f697e3c48966d93030bc812f3c4555682978c997926b1c25f703dfbf013ec4b234963285457db6eb38f54759568c556b0d2fe2391130f8131e6602eea28975aad3f693efcbd363916b6cc762e3514d6b03b66b7281e3d83c3766e225b9b634ebebc0d6d694e4befdf67e5ad2c136d13620c2bfab18a2120b82e3e399b760a5d1dd61b39ba18566ec75e916fca8c3817a84440978e637fa1c6335ad8e83eb2e1a3816f399e2691fbc00d6db1f3b5e7481046afb26c5c4283257546dd55fa31e55e20cc54bfe27c92a62af84aa0d0197e7f705edd4b25866576d2b8968224f70ff7de651bb5ff65e6a688f43f089ca3c6c08f1fb8b8b09b4a05cf29a4182997f9ba7b07464c987ad1a0c0997211a9d4d93698eb3a7ec275e25d1a193cb27893a745294067e65542f88d8737bcc5521201fd2203a148e7a06801bef6c88520f7fc2c82ba693bd59ff8c5248e1c6e1ca6c07133177dcefa1816c25c7dbc1d21c87e41005be4348b74bad5d073e8ba375192d146c03693bcc19b6084ee03ab0d3d635b0e12e1e6fb4a51cc1cf9af0390212fe5a31f5ff3beae39180c4d93696391b09f19f45f52dd62e6f65046c416996d69dcc81b6025ea2ccc8591c0550027d006aaadb8dd8a7933985594fbd6a20c54bb4eb21e6b4421eca1d27e002a843b5d0b78ba5c969184efff3c1b1c9f8a45c93dc7ace640805fa8807a45917f1754e2734268ea744b313f53f4c3d63eae27f5380f6c404d10eff369079c6035f48eb2085d368f50a2304f8eec2f7b9367373421b8c0e79cf0fec2c0d04063417158a18c63632a7a867364d241652dadf2909af7df4d7b4df267c28a73c3700921c0b53d6a31974ddadb828a3c86eee3f3c358e349ca1e2ade1e69191a14a46e8467b8bdeeca4d86dae880a492001054514c9bd2a6230a71f740f8032a26a591199d6a86017c244d45e1f6447c90becaf4a9b764e9b70db561b89e87530ddb936da886e22090056f79624cfec92a74ba1ac3111839afef0abf6328e8c71368692f7a6246df23634b780c3087e48e3c2e296e397db54f6fa19297f813c48ad952360ec4b69ead86a3dcf473b4b6135143c137bff059ce8f572519ddc5da6416e7b892f1743ea11ecd51536a5042ab85ab09c18ef18d7809000691cdb3f79e7c96201fe7915dc00dcce5e3cedecf3f21a999603b731723461e8fcf9b5b15c3b58a1b980502bb60242315dac018f1533d4d5404ea9ac47d83f3a23e2d518318dfdb97af046fc24e0d0d26c8d3f08d3e5e3f49e4b4face4866c8f30ef1198e1ba9cf7581ff911d720a548d3120ddcd2d02c520334c33d289843747218d52177a2fb9bb8bae9ceb79468adf3a41a2ff498d452a8342ed99c40624994544989a3c51eb9781c72164398f13b011848127f48563a126962c19f15dba7c861af0e78cb5c10d7fac6770c10faf37beca3557fc39f0dbcfca42cb845cfa203d4fabc6b47518343086f81977df3fcd338ba6f60e3d0dc12b43de21afc371677357771e84f62390dec63739024742229c1683d4a4940299a5f1a869018d1ea5554b9b53ba2ec4baa8e596e36dc7496c522a9cb18698b9baf0a9951f8da1b21aca33a91a93fe7187a11c93342f7d187f6b4cc764595eba2ce19a989ebebf51da15493f3e2b8b39667e395b56bcadbc07b3ab09645912160e55fc56094c88b1f7d253b3e16a8d7a10d11ce4b5de3a6c06f05b3bcd01da52e8453c7f16460cd7236c1f85ea6ff9076198d7c34120258f6137700fe1c3234ac19e998fc4f9876738035cb1587a98265f79c98ac108685a439ee183891cc0510a392c360f0d09af299ea3b730f514b7965c72ba75d143db946c73728a042cd4c6619ad0a820f46e04992ba0b4d3a1b0ec65b4667e5e30d061c13bf8d5db3a6d06a3dbdc911bd0d8d6faa13d3260292a9c8f37444214dde245ca72e395ad56ffd4d57213871b0d756db5b8b6f830651c53afb4a88b50bfa19df39bbc31a2ccba125781d44302ceb3cfdf371d7c2e58dc5f63cea8c32a7bc57304a5120ba23325b8c12d921ab8fa24f3fd7c3debc5ec3ab5d22fd2526dd3bec2edf505d7938594384d5f806bf216a9001e1c54614d8cd21c67bfbeb787f3a94a1af044fc4ee8f7453a417a2ada04e3f55c245f8682b9a274250ba998ae652e9305cd9251f214f84c034027239073ab28e9089661bbe988bfe04e31fbafcd81d44728001bf586f3a8abc71beec1f65243de9c6588e984e4bfc91be005ee830105107493be3e0f5a7ee4e52e7d5ca233d9667d288aefab33f874838ad46565d53ae58507eb2158d85118fe3b6a9ba66d29dbbdcc45083bc30180146b1f3f4769fb35154110d88f87be2f578bc6bfc5145207bb33f44b464e8a0f1dbb80cdbc3cdac5d48d9f00c01c26a61800cb7a3a69487111e415929ae2269d41e2f958387221b25ec6dfa3568ecb8ea5cc944a1cce134c4e7db5a3b843cb50dbb328846ed6881fd33be5a223eb61730ae4ccc33d1f5b9fdb3733c1ee6e3edae1abf8c2dcd244368b159c6df55edd262fa00eaf72c4a36c5834bd9a038c8dd156be81cb68d7e52ed057f507c8ecb9423c3f8ddf12cd1dcad01adb7a068fedf195e2dae431e539c584c7f5a1d5dcb5bf15a7e558c797e444d2f61116cb08bb2b972c8fad231b584c13c2c1cef4d1a2c72475249056a08ba4130b011c52b303de95cc5d8af813b7b99c4a0ea94956b42d1568b7cd15172597c43e9266b18e9a25b4f4233dab01fe65c49d5f54bf90a44369792c388291b1423287a511173555b70a87d555227ccd2b33853b0485be7667992f5bcc6f08de0041caf1f5390474e7fa9b8dd18cc2ee2319ef297848493546c4e3bfb1c1bda9a88687438a50a152b8b1f0d050146900bb546361597d7c384ecb79f031e8dbe8ec881fe79e77e24c9cfdab1a69b8e8e298e848a658e271a76dfe55bf41a7eb148981e53c623ae8e04d6462eeacbe6747f89d747020032b112433b772ee69454581a583f04e1e8d030abcb0b5fefb6beab4871dd8d6b32d9d5451b294c479d8064ef7024200a1403f925e88bb372c3d49b122db903ee0aaee65d2d79c1e740f1f4c3a2ea7dea173a5476590a9978e7c7a7c77e5aebbe0b97e0633735b72abd1323212c43b98e402b6f4bccd7221c22655b6a943d91ea3f64c2515ea74a86ccf2da314336bdd4f15ba8aabe7f3538c30f0a1c0bf3e0b075b72b1b5c9569b567a7dda89f3f5a91ae7bb08cd6baab1d427770dfbca1f1be4285e40df3ffd2bf969bc6f2c8a0756e6b741cb0edd4058a66598ad95b115b6f2a7830deef7b69be9ba1ce2dd5c33037dff3adc27b38437e07ebefa084d322d90bc2af4b2357905529135f825e0259adef138a15b80cc609fb27157605cb2cfaa37b9c93f68b9a89612be7df60d9fc688c021116b3f1661971985c80f2d2f7ffed42492bef4a342027244069bca511868aa9be3c12fc821f2198f21663706b0c5aa891260f0a8956f552c2152e5cc52d2d40328e15777ea1ff352007925ca6ab866812e606cbb410ccd4a3b156947348ba0a689af534c8fbc56f40bc468a4f28faf4e28c39ee54f3772646896da4203f00125df641f11274e83923e449e67fea8f63fdb7502c70369703d3c439f4883dfcd696631ed57a2293af04b543dccbe4c150dea88b5e3471d5c6d04ff4126459fa01c5ad16ed5188984fd480fe8dffb453e1306e025754ad12f4e07de9f7b041bb4f296e154f499705ad39dd1183e3c859fdeaea3cf9f7ea20d3212d0034b8bb533abf24ca8725c9a11304f1495bd1cf84038df39810b0777ae1edc933f79a83ef405b1d4390eff2a2ede0301238d558df4c14908bb711a6031365a8f53490b3a1de189b508c8e170eda74cfde5726e05382c49201aff691ffcd7e0ae4834c2b6d71f993e186375f9c66e053631e1ae904aecf5480c4bc911c40b5f7e884485dc1a08834fe0221f14066e72aeadceadc5129da460428d7f85b1a41f5a537e91f4e21aea7be7c13b31712ebd6bce49b0b6954e3fcee6181566fde94482df157616504f2b08ba50ff5416ee960254122c6e67318709ba14b9c2dc176c4028b507398e2f2fcbe8cdcc40a7cabf977bcc136690f033d2c92a94a6626a0528ee056f590b8aae64d254dcec434c70af4c7d835a8352b6e54c6f9e5565ea5b5bd44f7c03eef0d694827f3cfecc84a35862cb00d9481e950f939fc55a0ff9ffb555ae5ee3089d1c3f3db4f48327283912adcbb0c4f4b31febc6f4983d7feb4886c17b95f13868ae5b56b482972dc317191fc42e32e4af2de0edc1bbb45c415dc4f091e99ac4fedb4c804e566b9d11e0ea56a1148b56219834cc79c0ac08598a9b56ddb5cfc0c79a4970e32cd8b4f5b95591c1e39d3263989e40ed23a4b76b9833de8e369d936c9349653d29997992e9901c0293844088df7fecf5eb725318c59a3da102b09299aebb18f524630ca1575d8f54f1381c806af475c6be11b02ef6dc3d7f98fe367254a2fecd3a53a8744d4536ce0a745f90cd096cd4a9250525750a196cd6ca707b2e92cf0791d29ae918a1a3e5b4ba9bcdefb716823515998270b6836f894c872d8d58e223b786a4d1691f62686996ff86f841e367f4437593a56775e7903c71956b4e8bb883096c2bd0eb192bc6e81a96e241ffc6d6ea95de35c886a9b980d4587172355e17366fbc9124f66bf27015f6744699d4b7024081ba1e4d3460cfed903fbe8d7f0ae7c92738b39daa695ad069c23b45c3e507245c8e060c282cd6822ed245656df475ee02d5dca0135bd21f84fb328cb727f4cf4821de403fa678ef91b14ae25e0bea04fb6721f85cdd4bc7d9dc85c36b2c6f20c372896d4879947a51ccc85781569ebb2a74e5c4e6cbb420f68f9c0635daec4c1228c43ab033cfe3c0703ee2e6d19c0b14c2e4a1b28ce5b39207111d0a6f06723190c1f9a7a4283dd200a05f6465317cda28e093b6f25942d84be4f4265ac14859b77e9541d36b5348233c02d0d868aa428bbac4c9d25e5e098575fcdf423775d159a08543a0dd04f44333411524669fe1a66b7e27eadeab32911379e4f0da018a95b16d1d7e737a2e08db6377e38709942d2b9b964027537f221be268fe630442d155ad843e2491911377a482f2f95652f3c4855b796e738b44e250465565a047c57ffeb9b25085402f170fb163bef8f3001ade4199a9cd7e77ef020dc83012e65e62bfc5ed8bd17b0739df4893b63f7cf17663b9753b71967074ffbe762aa67cde44d192a9835df4e33b788386b0b3a295a0c0b9f59b25176a9e029df38e304f995f2f39a15447d0169044ea497d03018180fc7325c8fbf6c2d06df649efde89497c9e51e524a228a940c65f9d2056f510a4391cccfffbd52421396d4bc0cb1784c6294848561428885a5863488493352bc3b1beb104a933da86078d17e3903c0b25e47d71f01bac042576a0d942f51a4ea0c0e294effa417badf029f0ee25d4b827416d616b505de7642d89aa9ebedfa13cd88b8292466c430f709c3f1ea7d0165b5cfdeef885d2232c00ae5705d5b464a7c59e819b7b3cb66f433e2150de8593c4df528234db0f7d4a508f98f47be728e0855a1a9c20d9a4d2b42feb021228fb459d44726b5ea04cb1debd41826c612a1fd0823010ea80259f21080ee3c8071ebba7a12fd04099f13d6dba5a7d98a7377c8695b6e9dbc24c69e80a461f616631e634f9e9a083912f25010a450517118949ff81fdf06919dcc15bab6d9b6ec40a0f76bea70586d41a961b3ab2905ff3cff74359e834712dfe83ff7ed4d1b35a7c0d5db19f84350df8271ea97da7ba76ccbe64209e71fd8c30ccc51f083e41a34768cc8e951263fe79dfbe92cbc1f503aa863dfcfb560f8c2eac946b00b40409df1861b2509de9d215546c0ec1d723c0b84ab7a6eb12c603cf22051a4d22ffb57c7abb40e1139eafb7e5e4609162e1f5a1f2a66566b2023aba0df8ffbc81b8a2c922c3f29240d32d1cf75d3615e46cbb9f399abf3ea61c058968ddfcb1b0bd615e7772344e66d407430b7593e9d961ddd6ece3dc76c70b17dd4782ab641d166ea6cdfc6ce4470fa0465e80000d82ff6894c0ee63edb0af497599ea356cdc319e75d2a65f4fb6cd96d4071a3774b7f8ba86d4cd76e9134c1a9a08355beb53d246373299c41d1e308f7b77f7a582b9b611da5243d0b6e6d0b2c2902ce8b971a00ab93777e889027ab3d38d0573bdfe01e29fb2410a59ebc281adced19ecac4c460777c3907c29892b86952c4c0f5c011353fe2618ae4706c27565f99ba173f4a117244af9cf50b0fb1d73837c78dd8a9d22adea13f28809ff6c520ae625127bc451a8203eafea48e7b62c8754ee0c9878de78ed4ad89d4fda854df2b377b21724540868ddf617d2dcf9dcf23f224a1be8b744c8f9de640162ed8b22dccfa74ad17104012ed5e32d615977c62e7ceea6409c8f51c3ecf2f3b17eea2bd3b49f80e7877b75d8c8be42d67d8045ade0afbe83808b11ae5f2995203071169e927223f045251f57cb727d91da719a31ec89e6b6e798316ecab1d9a2763690971af6dbcf2ee01f14c8cc50bf5a0500245d448bf9e4af819bc3bcd0aa460fc7dd06e42fe272b79d224ce6d3e9c1d2524991e194b1f54d782fa24bbf14d67874c5703e55249dab2533bc62f673541fa572e67b31ef671ae9a6bce62a510335e54d8396a383db3442da0b971d9148e10e20e0529147c2fa06654df9511e44c22ee1fe0458f092a531ccc16de9973b2160a0aacbb1b1df491c95164f079455bc0c278aee42e25c5300f041c7c1aaa954a32afb83c5bf41675beb61ba65ab1a4bd79c80a5c6f3a3e17bd60a77b7e32648b6508ecb7ce9464dee3703d34087bfc6164235626717c4e1463669d56f8ef5ed93885dd2152fe4589cc4ab9d934eb63dfe8b2c36a8a81bc38ba58515bd16caf99fb3150363445c79d05d7527c751ed3c1d6b542a2f89ec15432bab0bd7d3c3aea9c1124fb14b4aa466bd3ad02e97ab8770865ee5736c713975bf8c94403a3f898830decdaf423377a194bfa33686f1a2b040a808daf5ec7f006ec9b300aba0601d08438b10a189918f3e895b9df4fc9fabbf9963a667fca7e6b2a947246cc073842d6651e669c65349a0dbdf5397551af454cc3e90cd2c541d2f7e3d966c2a805b8bf4692184d2442da8c2a3ca4e6e8d84ee9ce684aebd420db3aac0a3e394e16c450a4c7754d8a433d17b849f8478a99409523015a5ed41e3cc4050f9fee364d33d1c6c1860739f7ca828c8737b49b599790299c59fedacd060bc15d6797001f7b07059751b95123b3a3be8f9f3a93fdd88498f44bd348a80831d18c6789b2f411c268b606ea401692e9fd9b00267e3f578d935c557000eaf8e24b9109c5fdf054ee17abe5718d1c518488cb51d39038a6a0ba094936477b2ce62dd104bc6e0353f9daead396de54a6cbfed8a70dee9c66366d433fc5ea57aa36c585eff84488893da03cb29e27c804cacb4e1f252ca65521c7432627fbc3b728aed93026ae29f3ba43845f168d913957ae4c4df67b79838fe309ab8982ec5b2112526fc5ca93347785ec61e917a26b94459836517aed8fa4f9046740f6ca5e49596c115b3cb74d04d5df01bbb592e6ea2f1bb630cdb4ba63e3c6defa78603f3529148f07850705c13bc7142ed1a153a444abaa9b98686234003b1292e63f074f79e8b338034933af876eb38445e1f415f5da51385c2c4664664e00cba08d4bf525957f0bf58953d519053b12e3c977963870e9ab0d9ac1bf739af68720b3453ea8ae814caa1c6d520359a1be8346cad0df0dcbb332e6f16ce74a1aa67423585ab481a87105599807131916b9f896cbd73d18a00400d11c7d52674d7fa54fcc692b0ae2149d0970226c989737be0d96c2171e4052ca0c2da47fd3c2ac00ac1485b3465d89f5c283d63e154f0e2a2718da27f8298aa9c2edb705f08b92e6830ae5170f81834e5cc804551fccfe96957cd8cedfdb556e860e95958acac3343490f421c175c660f54fc26f6d379b3b7445f779bf2a9e52a62c077387f79183bc80f1efa9a23c562084efc0bfee64730832908d1a86d01cdc186510e4e13c93f2438483b240e56a034b2ae88746974f9cbbcee918c5430a2d241cf7a3af5c6460f6fb5ff5bc7d07328491b03021fbe69cfe8ef57171bd379ce454838d187b2f3c4d67e70940493af23f291bc4e8dba39173f41ae7af0b2025d1e597a810f7c44e445ff0b86e71cca621900df90139a630d26fa66a7539ceacff37ca164f3b7d400b3a361ef638249d3e53fb1fe6a3eb28dffa692f2742e997dfc1bfa96286a40750e2150a3348b387369104f8b55062de0663da687e6ea00ebdf3d01dd4bbdf2350edadacd32fc501d3e61bf57ba4d6553d1ec4baa6ed5f747e0f1f822b81c21ef612b99cf28ec338080298fa22550b08c304eb812f08af636fcd61c9b47b1f211d62218b01d0bbeacaddf029f1650817eebea6aa71ded36732743fdc9b9455b32ddd95b9c24f934e2db8e70b02054fa8329b9714165dab44716d818694e7c8fb9832539fb39ea318f349abd871d9c016c3c624e1bfaeb76368e36b4013291884522c6b6a44a673e95bdf6c20443af2ef5b809e8af7c5a16ae83d43ec5942c0dd10778ab1dab619dd1920a6749febd4f2e9d47d23e7cb713b46cf43e3749ef1ae8604d314c62de418038f828df534e85a2ee99b0759e954ca3ba83f29e38773c7dcb0fdc9f8c1c5bf6b14419e40426af5df1ca030b30becd0fdbc1d886ddf315fa39cb6a020b921bf7613d653cc0c96a54858481c1f700896b2c82216c132ee48789243bb0db5d079402d5eefddcd03b5b092719d86845504138e3c94e4380f5d6e76cc9e5a3732a99e6d4e9d5e82c129ae37a53d7edfc9dba1e31a67a0787c31be1f85dc4b457f0a03ca94419c44e73e47409a7c92d4c4992205730c48e2b8591670c755203853b8e16289e3d5c14fd9c079b639a2d97b75b042113a684e4a9c441a10cd648c7d82d5251278ffb86f3e3f82ffd0b17a3f045f9d85193300fc385789270dbf24043b08ffa1c3c0864d0a9d03069bd44492a9e6ad5c9d01240c8bfddd5979e88b68e6fdf0391d206319cd9009c52ed38b1b0bd207559bf218c81a51c1746aa94d6215cc3b51bf56c700f10ace0f4c3ad356a74f015e98c647b2c37a42d1051cde86b69fe2ac69e6075c802aac3cfc59038c9134942e820e624fdfabc46c8d66ccf0383a933361a3df246d1a4ad635a8f8d73723ad8ce8c50cfca2ae6d4a8fdc3aaa58a31a2b2064f54e56e32e5924725f241c6f345d7da6a118445025d919c8755f94a4c9b15cec6ca451626a022f014777ce22b232d9ea39741d029d5cde0a325900de9f75c2426a95eeaa12fe9bb67c68f35967cb51c0e9e52443b59feaa26e0d6cc4efb37ef7ac3c1f7a2c9653cc7f6fa6a307af4b05d5c60df12f31cf871b06c90cc2e754c826843dcc56be8a18595e54815f362fe698d2197da4dc67276a1453f3a751ed31735ad445b6395170b41e6c938465fe0bcf6f910824dd0cba058fb2328c4d58240a517eecd229d024bdc28139c2ea9d708f75d61260517d0b55682e6466eba8ee63b29d31dbcc40e43d7d41aa9953c2d7f5c41d8f8932669672ac83e7cc578ea351a43993280b5c9bc76f749e59de44618b73e3417516b14622cf2d4091cf9bb1474c96dd132a71943b1474468435cf3820d7735f10f27a5248b7238914197eb3bb05e84f34b97fc4645596eae2810fa6d117e59932fa4c0195ffb001b8eef418147cb1563e975ddf5518eea6bc5c5cfc88f199b8a8bc3fa584ec6b539cb3c18a80b3e48801073e6817ba4f08359f47f4870c80da456c8449472038aac1d1c8fa9e75f7e88dce014405212dbd708b839cae6cf692b9deac21660659e1e0f724e207907a67b09d0c40cd293ec431048240273ace4c67dc4d7136eca26c1aa8e8b0f233f660c41bbd0cc6635983515d48467dc8f8a69946f739242370997f1debb22f0b96cf3d04312b1deab493bdff3f96cbfda742ea60b43589682ad1673bfb4ca8a34920f7fd32f8dbe89fbb6ff2637e53d6765598476a4b0e5fea29e577e37dc4ee147ce443ca5bb91be9955c8036edb6a746b5333f023c12032c6d5d4087f1901f5e7d06cf495021b7097c9ad2d069620a220e5629a7eb7995a300bd868818f88ff4dcabce9720bbb637bb3508761d1761dcedc62fd5fcc4e993457bc8cf45c846663a8d2518e36447c7612271bbf2fa9cfadaed29226d21e27e24b3036291c1858222d3ac82dda865818e0cb4e209fcccf69f3ff05b21176ab98963f7f5a41a1e93f90a00b0b5611db934906d6d25327667eaa035d7ac53189c6f946f4fb46118ff43e9016d9621dd4470e7f03e154f82719d526a3011c3d9635d48ee35c182cf2c824d3e0248d97f745012193e9cfb5c64f76732dc154461dd008417bd708f1edf00f4ded48b3f9d6214b5a360a36cd5dd406cea17521d175627c0357be954f77169d8bddf6e5b22e2163977950e39f5801181a8c826de921136a50dd13cdba2e8fb4d09c58f6cd8e5530ac54c8b2ae38505942babad0b7669e82fc5f7c16b35568c780fb92c50e305a6b53ebff2454a757bf04ae6c8d24ee8dfd3a00208d48944d78366c957c5dae370f48338f4ca98255e11cd1c76492a24d8d524ecfc1d5aac190269611e42c71c05326f3998f40f6656941ca636fcc30093823f840ace4808475f8eee51a25840233c991f7cc12f6e2441c310a384cb9f941eaf1bea106e4792c28bd8001d952201a735e27774bcb41daa1453592904879b834e7809c0104d5fcacf3f290a10f9053f53f46a145381f073c38fb1c0a54a72e0d01f40d9e3a3618326f5365567df1a472a165348a7c67d65baf16e5035853ee467421d51c417fa2c0e2a83e17ae90c599ca5b3a1f2142b016fe3cc4df60a1147b2309c115bcf100262cb2b7b72842a27a71f0c380ec2b47c000ea95b6f85d08709bc173f012188b4679a393214b446b8637b350836108f598133958a16a83cb28e6eed8922b6cb2bf9e1c8a020e3dc6eb21d58e0f4a02bfaf67f41b17e290df3fb30b6a7956dbd347a2d8a182e7b6c28f99fb342248d6dc8602ce5870884f70440b0420868a83a3da46f57c0be970b496e168a60b40dd76e1fd59b50a1b6324d0e98f69dfd25307b21683503515ef7233bdb31188742ed137e9c43203ab9ac84b79a27f1f7873818f56aa05b8b9f72123cc26e647057695fa1f27a99af637ece91bcd06baa0badf35245477b9e85603d92e33a0e9676f97c7498d421afa5a02962d288de7558a92b834dc11c2829038f087c5e9944b897813d5b646b215c7c5c460e9a280340b948a25983b11ef338f974f082f1883a84b24a06e14217ad681635def4dde61a8d8b9ca813dc79e9c9caed339517fc804c71b6d9738364bb830fa0238dd784fc7e21f2708769fd2aea8711304791483190235cc83e401329da1f3f5b385d62b70ca715fe9e37268c4dc9315ace0aa6d412760e6c5ab78d22439a6e2dee1929b52ca907840b96ff075496e3c8681641e26bdc75af83bd3b6240a0b6983fb135fc3cfde4858848b710d151800ac01f57d8f63b5e39c1a926ba4ee045e8d88e25c632a750ab995689edc3cf07dd9cf863f0878a6b1f309664888382eee724c9923cf108c3bd6544b5956f09f117153027a00ea16ccd18f47800706e025ef2e95e0e6d2c77a0711b2ee56be56665d9fbb1d9def9df685c5649bb0af489611b4f3cfbd46c431477a8dbadbbec047a6edd8a1f6a3794c40ed869ad7526483428086c28cf6eb09cc74af516e74f768795bfd5459c68d0d81aafb78cdcaed0fc38468754d643f4dad5e93ba18fb78842a797bc21cfe0b0b6baae54a760327197cd27ca577dd49f4b6a022c6176dc4cecdd30bc69840954144d60313903a014b7628f7578a4a0cb5b484f099d0c0f261f6da0ad77816c4f730f086e18a6d393555de4e16f3d6d4ef28cb5db8ba2142093b4e6230979590d5871283bc08a269f03e2483b28181bbb38391ae79c7c1b373c076be83a8305aadc04ae4041c1295f103d1d82ebf471b87338418a24154e3c5e691b91577ed6941019897de203448c386fd73f238498c38961ee99b3e6d3bca6b05e261ab96cc86c6111443a6ac613da9097e2af10843036025ed3d69c0264515439904cf6cd6c72513b10abd423a0fcf6baf3656256b026264ef8fd2fcbe89ddb4ca222e606c4f58a95fed53f0919b08abea190efbd45e824ef984120b57075ae86b458268d3117470ccc4b0b7793661c09438ac95b5e0894ba9367b1d0be21a0b1901d6de13cc642b207e24dc7b0f13bd2c5e9cdda88f19067c7f5e0053d1c0e3ddc59ca89b5c36cbd3b857a2b668cd9374fc041634f32e809b398b2ffea855955bdecefa4e49ca0e7991b6c80e0ced0a3f0e0fb1edc31e1db84f486d5f9e68dec964b502963605e907268feeba53ac3086bc4dc772e6df67325af9af640a4c9a645ca7adf73674fc1e244b86993e1d7a7ec6aea755958820d1792637d2d4d4964c94c9f96abb391d249f64439887c8a8cfe00f2d1092370f66ed2c3b32a61f6f44fcfb1288678851447b5c299085fe724b3bea29c3e793ffbeab94bca9a2ddcdcfa98c79ed510431fbd973956177befa952af2c393f646dcb5539e14e434a3eb37eff5f106e8970a8469f8de041ff7d8c2056a68522a4d3ab55b7ca2c0ca0a89d63044eb43a9011ac0cfbd4b48660b0fd77ff74d4c58a393323e44ad46f26e06d4624db628863dd3a62f743f4a041ac22f1cc264da4033cc1a312c00a0a3db7b71bb42759b80e2ddfa3ed5b30964973e86e964d3e6a7944e35cde5af51f1e137bfce85ff48eff06b412253dd6f6602aded5d2ba73a07ceebb486330c97b07dd9eb39fec92daa137153fc917a64480d96837b734bd99f9db201e348749aedd70d25e3b39e9098463c6885b98c9bd6c46b01909a29a2283c3591665e66e749e864ef708535f209895d8b0689c197df802873bcd3521e216be6aafbb6c185872d1ecdeb12718957ea738c85f24df2382888babd5c1cbd4f4b2a97d6305d4164f05d03bba51ff4fd7edfc81ba1a04efcfd2fb50e32501a71615d104860abfb52dd8e5c938937d5821cd8cb6703f659f5792a46f14876b2549bd4122a3526a310b331c08327d86a65de00cbfa23eec4db79040f7ac5837816b0066c41c8c37a520382953e3ddcfcbe581c475c9116b0b863a919e80e8f736210c8ee6109ab0c374b2aef63475ef8a2dc10c94b2c700315e32126f1d83302028096457f00233d884f23534a8e06355eca6b278f420057c3770913d8cafdef2c7a3a4b8b175ef9bc8e96bab46636ef78933cc73a9f2638748d60f8e34bd77808966ecf540a9712ed3a20793d4ae1b64e38947446b5b159e7e6ee7d05a4de9fd7478f9a2533379e5d304e073b349e1e666932a83efaa6793f227f058baf992b274004dda099949e9dd5e2f98dfb88363c7716d756bfc26c30749f997cd854c7ea1d12d060c61d4e08dce5c8415214e6811a01794a1b47f722564da63109f7b8fd1cd8e8c673d577cfa62b256fa28c6872fc1998ffadb544e8a3b36bd756453ed34d204c55478cb2f353e38999477a98e76f3b64dff8544dd886e619754bbb6417c51103d1b88fa48e3f65efd4725c9cd036e3b8414b7cf33d911313a489094154d3a022062eac5fd29494cd5a14e8edbf18adb678fbf055e4e9f553265ea1064375aa630809f818f34801d4751a57bf577d0be74e23f356243a8b268557dc07ad50c94b52c52e3f0ae1588f9542149f5ef31c42b5858055926c2126b867276b8e764522c9014e9a20edd730b970a6358871e29c9acd3fea002cf0f506dfd528c23700bd31679b59042f58c27d8835c56c193260bfdbe0ee8f6b5e8989726bd027a77c6be5f1d76519d362bf1014bc50cc7c7a9927ad9ac677c0aad075b2c5a13a5cb0b5a36f8791238ff4e10e692b21c00cb92b8054d43d81da3790dddc8253af9318848d8b0f2a26f2af2474dc652f25939d853939afc6f47c41003001bdc15e682a601c8f6d94dc04564730bd3779fa19ae6013852931938946324cad3a8d7a3014aafeee8a4621f2c8907a7adcf8baf4f1ded93461561a3b9f38169e6a71e62223219b77e9f2361294b5275083748057ffc11eadd2c0e8adb2f26e97b882653213e830dfe2b44c1caf0adf29558a3c77b088b92aea3fb0d3bf4c228f9b64f6fe80038629362666eb7a90e6aa34a42a47bbf371a672da2ba23bce02285ac585dd6fa0a6990c3ff1ae13ca3da086ca9e923f52eabefed75bddabe2154ac649b523889c4cf7dd2b179d67f018a2045e9add1004fe0993bfc47254a1765c7fb4172b3813d0accfdeec0e91755105a961df011c82aa55ec85cc7a7eca7ae20531c31cd3c96c8da586458cb74aa4c0b4eba53f3dc93b6b1caada4d52c73e7d392720705fed0c1fce2bfc35a4fd9b49df319fefb897388231c7cb81bcc3549d8d9f59b2d8219b81af0639b2b2341779bc5fad1511da6d3bd59c51f80d155dd3c92ccac6edac4e866359426fbe5d1b1ad2954db892802e9f29e3a61064544ed012ef6c4cc5977896254c29de315e684be58e32813a36874a33f1e6d5bd0021fd570955d2c19acb8d2ee0ed91dc3ba518f99a4148d3269908f02c62f9eab8eef5331ae5845c208c0cd95c7928214149300e386178a7eb3d9ab63a8e1de13925de4d1c360d109a04161879af9ba5f1fed8914606c4ff42e442f252ea6e6cc9f16aa935202914ab28b21f87dfabeb71fd7638bf43dee0c1d72118758fb39bba53e06dfeacbe87a62c9862f53bf33193daa1c50656c2edf438759ea0ab9719805073843a13b50d8b563416d621ac9e6614033e596d23d7ff383c1be04ff52b73b563fb6f89decff1c41ec63c170ce0e4ad3287d2506bf28a5157c289721e387703f7c8ce54d1663d2b91f32369db0af53361631a8f228f04ee1429266f8f1acaad6b194c600751a0e2cb864c1ea698aa8a80656166159cada4cd1dfdb7139a8c7ec9ac72b66d1da9990724e151ef0359c014c7f84ac2325334002653f423dc8d8ce7fe4fe554f648a14a6bdb661424edc57945f1a4ac12b5e12bb04bd99b2ca50e1253f750d4b669e59a9dabd8eb5b8b17192f6f3344fe4828cd6c4ab62cf4664c48a99602af26586659e9278c6311995592d3df58e55bf1da52259931ec9d86986a020566fdc2717a878f3bbe99f2510e9ebdeeaf4162030666c199d48833daffb74622292c651555d0d571637fcee18ff0018b515b3140813723e343aa40c8bc2d573eba1b307514795309c02a6ee91f581a22f7a4461e6fb10925dad001e499fcbd60377110d33021c2056b339607c56bf426ea6e19545aff0dd3a8428e089b6005cbe320bfe0f31d4554d1fff5f8a06409dfd82f26dc60c3df0721d8c924e65a8b02585e78bfcce4b1c0dd1383d65609a910282a3b1b3e46ced96856650e8417c0f25240f38bf2476670a4cc661aeaa5a4cefacaa17ed67e37a08912b347df03ca07f6c0836d62b189f0113fdf0a688c92e1f9ed0027e29134c6a6b9a4e395539a8baf14dd6ada2e158dafe63a44c67e0d8ff993c98ac47a02ad9c658d9d24086fcdf37dfabd0261bacc07cb1b702abd03447fab6260556832e3c4a6bc21ee4615d352b4ce53193186b71823c43b448d22d3dd2c490cd964c31103b03ac1862267401487f5b7f85565661aebafcb06896b3add0e5409a2c234d38e0d4828b9a1bfb8a21f041274ee2c28502565205562d413a766571777899a4f7ed320ae490680fd7953448baf6e08102572134ece7d6ff289d34555cd5787ae2ac90a258429317fb5fbca40616473da246be1f421a31ff8c5064c571b50f7d016e7e91b7f016dc11370831ab4195a73c46a633924217569b15dbcdba8947f04250d4eb878ab0b0cabcf5ca886a45b4de206a66eb0f2ceb9508b7e68607e61162fd0ee0cbf3aeee7f9e616efb8b5e23a6a989f0ee4004f1dc107589894ecf2a2a76ec235c95a34650f08d47310a582bcab3989e4dcc71f45c054063f94da5971321547136751789e65ad95f4e3cfa4d12d16eaec1404099f6fe34c971dd2d80e5c137236549b72d3df852e00b1c4b04dcd0e11aea513d1a97687e00b04b4c91d1958e15f6af408c2717ccdd77ca7da389114c3100dd99872e479fcc3889f9d58131e70e753fbaf2e39660a761fb388793c2551a880aa1f484a4d8887da8483649aa617aaa30b0e2fe4f1ea17160bc0158a226ac25d633ea10208478a8ccb7f350b2f72b9af646e8b6c9f71ea04101d366f74e9442797a22ee39bcb46059415dab2ecd09fc6770ebb9d01a48fa9d435959ec04f26a516dfc534f394f2e9a803d6566ecd16d793da6a82ca73a6f04c7e644786ef266ddac21d5e55012b4d5b701eae85e99ad1da43cd468304413241b7a6a6a3c86d79d3adcc04faa89c0a2febe477a1f77da73e7a46dbe5886a96da74f8a6836295f4af3b878ae427fe9d51d1d706f5955c6a1f89f4d41638b8ee7e37c020bb957efc98268f6ac56bcd9205200ca146bc62c0d619a574dbc9d6eb2c07feb5ea076aea89185e6b2d708b07628eb1f5581dafdcacc254a65ea1f3a115814e0e8f105d034961a60391cbacd1628c3456d5e9167e217a9aac080355fddcc19814498478075c77342ee53e7b6b6ef4fee1f74904a7f551ab176de546bd1286f08b008c88e1e9f7e834dac837638135f30afee2faf109f51e53d6927eda29529ed623d2c55b46c78f8cc30e2fa891d491ede8081f9698f33d1e60b69f04628ac888928740d2cc07fd12bfdf88d5dffd63d0671827bd1a465b2d1cb9add66df0f2f65ed2171551057bc6b6682660d62f6ddabc3dcbf4a99adbc05057e2b44ef0c55305c554d079984a47ad9721dbbf5463851f55da93132e76a599a0e7663557fd9b909d151feb3c00ec6a8cff1f9ee1800d8a0a97ee7daf0c77998956950afdec3dcc8cb45d4d45287751312d2f6de7b4bb9a59429c9f50ce70cd30c23377929cc690abb26cfbccce36e6baee4a54e4ebde49a973add140432d77c02f4c24cfb689edd0449de07e28be6d169c497f842e1cf8b3cc88a29a2a67ef0c5b9e622afa9d93c8b5d745aa3679a2846db71b03085bd5888908fce429ca45fa0187256908819807c8c51c80c547011a9220bff31928f5316e0db7d98a834729a5cb139f48db92458246e40201804dcc8c0b6b2375ad519f801ce2ebac8cb40b3b46f183b12bd42c28e9ca2c095c8a9a3a00c922371a355edf207b6ba4c06f8b7cab0a388045b28fc92f5d8a321893c0734cb47b2ff91b80e6c1cd09280190e22be076c6008249edb1da081cefb664ce18352e8d1c0d31b1940628b3076abb217172b10172cd0c14d0e91233b4c840c421c062144a6303423d76ec4943e9d263581cea10a945165e0ab604bc316ae9185bde37c6553e15656549e519a675e3f9b3190d53c230247463ffb4de31436b8e2dbb63914796b2eeab8aed60b1dc2200fe8609bf842721814e652ee574f5665de0fd517ab3208feb9065bf2af3a73a528c813599a4fa71e58d4215cd5d8c20d50556b6c2154638ba0eee1230ffbcf57814691c7035eeb7bb60832b520480a10f76a41cfe66a8191d1887f74a71a56d0a7d52241cb40d62a2f0fcfab5725bdaa2f2816ad21054e0d297222ea5346441d708b2de24da58a8091e522d183e343d41a795441471bd9d24ed68164c8b1c1a4dbe6e915a595e39e0af92a7b6238f4f6c8831f6d7e600b4ffff02ada50f1740550459d6150a4c58a2f9147ee3c85f2155d0069b4b9d5264a20ad9241802c03797a65bd3208656f0aaffa8e56b9280a15833c8dae1b6d5a45494f3ddaa8b01a4003229005fe977d75862f0da08110c8025faa7c0cf2f3ec51c8a9238f07220bbbd4a9429e8686553d351af55398c58e234f5df6b82cd22f2897ecd12b58050d823c953992a726ba76bce13516bce0475ce713d56754a7f5ce34d80f6af1f0b5a7fc9206704693e0a96f504218d924fa98780768afa72eca789e76de8ee635aa8fa7343273f4817524eab86d24eab80dc3b06e3d8437e24b2a55442af3e8342c92d3b04837955d258c20798c006445f7c8429da6e4d9c8429de4a1228bb79ea248373581522be5242fdd1f1d4809b55a0f5926ff2cc99339b257d57be20bb3504e759e7a4e64893e4f9d71846caa889a123f39e9f94d8e2aa2a6c6c4495e73e225f752d5514ec3327926935737a1ae8e932b7d220bf592eb30b94ec3da4a1ec953a5aa8e9ea7242fb911242fe9f851af11253795aecc892c9446933cc82a499f5ec27eba3422e69fc48936b5b31c4a8bd1e6a9d718c463930108445556ae0ff5b2d32e86da3cf51d4f6b3889574fb69efa50ab687c88b51eca27604b8c2df34aadeff194c2204fbd0a81403188d3fc3b89eab671b055a2add63ada388e73d1fde4739c6fb48be188d8bc76dcd671ae710e5b35e2ba5a21c7ddaf6f5569f03517bd48d6e872ce61dcc3ce46f5edc2b48a23049825e1033df54e62e3eb469e5651ef3858f61844bd566b51413a413a3435019297bc74216b2379232801c94daec374531328b9c94d7704261d24375d084016e9aa220b7b64e11f94729507b250a71d4fb5daa66dda46f2685892ba164f8bb48a72449ece7ccdb2cc93e03e731b7b5a455d3e01652c61250de08c2df38a533d490318837ae6c927600bd5aec4812dd46fc417c983c853aab2b9e89338540a168b3cf1a57f220bf55a6de4f941b9abe84febb44eeb0c0d0df5d49115a13aafd4b91ecd6f50af15d551afdcfd549f1dc15297383247ea0091afed7e27ea371c89f842c3a2ee815e654e5d47afb24b9d6da00c3e7d049a45b5f8003960beadac0c5461fe55e88cad2cb347a31b85fa2cc46a540f885661355a8579bd40b4aa0a5b57ec980351a357527ea786980b64c19c0664e96837c7cfe523b518e7d5dfae852d98d36819cc69c41712ec2356decc756819661ffbb1c4fc0fc6d7dbfdd76ef84f3efcaf428a35192caa5598d36b5b85795604dbfe59e8132395030ac65bad56ebc582f0c5c6082533d7caf08a1274a1dbbda5b0d14a65f84ba41c32f049cf0165ce3824d82911d3f907f8a34f24367a77d4b993d9e17d5c27e0a943809eb029811005c261fdd07ce36ee4d4fb007fb3d6929172908dce41ad8a19072712db2e1e3f238f9f625b8cb0a1d1953db0650b6c28be482a3eaad3bda05adcc548a17130be54664d0d055a4b07f7000c38c061e960e2848765e24c4821bc58d53713d742c02fbc86f25f812b91c395c442e55ee63a20194c10831d960e266810cbc49988485a2c9357ef87e66d05db375006fcaccdf05983e1b3d642e61d0328a00e7eb4153da495d044f8cc3122ade3e3336f20dd39bd4a710e7ff3aca43a11219f4118e4b31e9f5d4aa9cf92073b4f66590659ac1b2893079fa98ec482f220330250bbb49a7e4179e6ed8a3146d4639d4cfdbeed822d593b01598ed8122950ce9d974451c3032ff0b45825d7662f4250f0d15b29be94b04a4abce4eaa825ce04e90917eb8756a9d68232503e73ad06cae8cf32edc8674254270d9f01411b02d202101580acb831e433d74e005f34167ca6c5007e1a1428255822c0aafdf84cd381d6a240802b0d051a0aa8d6a234f8cc33da8a2c9953afd6dfda8b1e0498850d45968cdbe17e7a453d734e08fc92fd703b3ca35b591b3ee37684aa086ac267198784cf621c8a2fccca9cb6b2987953c8248ed6ee8e31d656c5a634c6ec27bed0882c99d76aadec6921cb3d7c24f316b2d551dc85fa6896cc81d80471fd47857c86256915cace671a8fa6e38e42d9ac3d56286c5fda8a171bc2863ea35a4bcbbc566bb556c944623fd933c5887bd88a2c4d85fd644f89275f6d804cf67ce6996fdb76a5e83c6b57ab325f59d34b09f94ac8d1652158eaa3579c67be755cbb7ab5c367d447ab3c1367f39957282cddb954a7555911ec47bb4fc5fbe630b98dd1cde19bf4466e6a0e764248df7ce4e19037c5b9f49be26e0db8b9c9e3e72e861bdd4ffa12fc233fa9b854f193c740adea292949c3963df4cd845b59066a55e6265f10690f7dcb9c7fb8d553f2848f6993e1973e2fe36050b05fbb5a9fa53c4329f151bb224be6594a968d32df4e3c19f823ef202b85c9b57116eac266e95ae09b7890d52eea190ecd1cc6ac7419005726cfbc01bc3a79e610802b92677e447c29f1cc2500b39307709ec9c08f06cfe81b6641192d03d89279e626af6700559989e4a776b90d8600230a21bc80a283e08287ab3c01235583172934708182035b3237dd4f053503d89279e97ea91319a498c400b6a094dcc096ccb7130c4e4c2f302939514272c19693758169d402d85212b180f45fbb76c096cc396f19f04a2b0154659e79dff00cad0563649e398433b414c018998feed775361cb77de69067684dc018997fda7fedd23e5b016cc9fc1b7dc6c37eedea1524e2d382cfbc6f7a653df3e6c133ba65331f7119109b79b3b55be65427a33a9f798f927c68e4352f02296a5106fccfbf15d5853284607eb8925d1c1c50d37073b503d9aa289db2742e42e77d137b228929bb3dade0e1822ff98f7b99e02196cdcc9762b28dd18a0dae6c1fe067f7b01c2bfff3f8525550bd629644b070c3b3577aee6c5427e29382676f3ead5158be7245da5cd1f35f2d6273050fc4808544880cfd573f9f290c7d7b6d29f449302779e81612e939f2dc43223d5a383d24d24305d01b827c741a38e8fcbc10aa7408313f3ef5da31f812310299236e91c446b7fe2a417da63e842db20b82e6e516632fd14fabd3e87a73c4a7777a1ce2d2508e4d1071020f08e7cc5c72d589d3ab536df38dcbb2cd334e34f22c1b6dd4362c4112b4221a2f6b37ef9a4e3781a3d16924455c06bbe4642a91daf6e8c27c7b74ee4a58ef47b18740d81c5e3d2f9e97ebd57a023c24c20422f03a5fd82a2a3defab3a345fa1f7499e415d5e08a3cff410528318754dd35cabeeceb9e6fecd60ddc96c236a424934a3265a424f948a2885797abf12c96464b2aa0c7512b9a594a2a89b9ca8932cbd9ff5128cd2c90495a2f282f2b0c38aa783773def3a8c0b03f3d4c5e5a94af57989a94449764445ddfdb83b337fbb1f0dca6e3545a610f23d3c2432058f29767c011e1279fdfc36da20e6fec99fe997fe419d187982a4d20d2f9126d224ad94f27e9c672f3f912e50b5f67e7e3f950bf56f13137d4da0973fa6fbcdfbb1cf4f1f9397bcb67772085f56dcc4513db88abbca932c3c7810b2ece0ad783a78d79bc1b8e5c1b81fcc0b17f7735149dd4f9582723f9726b7e47ef664ba2552d7b2f3d115dd99f9b2c35cbb33d84b7a3f1a1c9b744d8b996711073b758c5e8c63609708eee7c5380604f2d688c084200f80874498e0fa260c3d3bf190c814465e464f35dc4a1e5317955cc4990f6e7a2683751fcd8b4ade27bfe450f20c2e8946a492733a2f822f346c2599bce434aabda6fbcd1ecc514a109650489c8ff892bc5472e92579527293fba14aeee7a7fba95e96dc54badf0cf69c8bdcde0fe625f59187710c51c779554bb5d78b710c7ab18b710c13a646d878801e9a7e9c3a00131be6fba6846897dece5648a58a900e3f0234ace834acd8dab0605330052f8c1360567466c51a599907590d91c4890acc238785390d8b9dc3696719fcc73278da0d315d47ab42608350a893131b8683ad9e842c12deabb97a7cc082673858ea714dab5a41d1064116f63ae390b479763dbf6093a6a7503c52a81b443f4a9672aa0e7bdd01c25e83f4cbea5577ec44149d73080b9a49b09a5e79cff648afa8b3dba05e4da73f3b723a9c0f9c56ddb4ca75c41d8582ad75359cd01fd96173c247b857afa6b3bbe46e38ae48abf8a755cc09e15ead623a2fbbb43758e65ecf7ee27ddc9138143921eb1f37f4cc5f67f3752ec81949f1c715f93822afb9220b2784e379967324c443f185abd6beb89f6baef832879a856ab52af7b3a814cdf5ec8eba1f4ad39a6556795d5e6c5fd51d95bd5a67af3cd86b4eedd1abce316f0ecd24ad62926f2b5bd32abe4089cfd4bc41f44fe99c8bbb797144fae5c587e3d12be8838617e7e399c3e17662cba70c73f88fe3c9f1392283ff38219c8cf6c53d8098788967e222c6148feed28547159f2987e1f37e2f5cdedabad5e686f4483d7ad351de2e3d9453efbb6103c567eac4356f7ae3532717e56af7bbe1d44fdce4d46934ca61f70046dd9959721ba3bb983d5127739ecc395327d451ded73920e5a894b7f749a7d746cae9c59172d4c99d999fba52c5471e3b21acab5ce87726be0b1857beb833f1533cc55ddc8f3fc5a36f93fa3c19e2a371ca194fee277d26fe6cc5586d4c6ca4575b7133d1c13a1bf396582f29f193136fefbb41c4f4938bedc0d23bbdc4e4937a26de09ca1559d8e70b188e790ac521cc3c146481f18273451757854bdd14ce65429d7889772784f512e7cec68997f8d67d72727252e2f4c6ac1cf54afcc47ffa89f731f125da9d995f72e2a3989237b11e3d387293f7ddf891ac5d4ce91ac092bc92ea121bb5d80e463e33dfda9147cffaec62ece5703c4ee4713743363a619947ab70a660bfdafae650ad61cef139d42b3887e819b640398f757ce850b1042274a39ce60de05b182b6584fc6155973fac7a75302b35813a82cceb4d51c8a2d1b033a27a7675a4788727b2f00e8c32be7c982590c74191853957ac2dd96271ce33a7f3ec064b6a3dd4818607267a4eb661c24b48118e7b5a052191564120cdd35eef645f1012a1b03db75f51b0fc6ad58d08238c30c62aece48285effc9a817dedf08b85400cc3207cb50a5eeaf1ab55427a88f4eb0544488c31f22b46b1c1185664d3ab4fd412b57cbe5d54d3439d24ee10ed800e57be93abc7cc73d1a3905df2b80ee56955bf6810cac397be6c7ac4c8aecfa3af56f17f94e7a379ea31531efad2828d43c3a1dff0e221d84283f40bb3b68ec31b207bc663a5939c70d94496add55458bedfe6236ab5be492b801e2905249b1e8a3d3dd4aa4e125b552727becc1e1e9e942d58b1d535ad6a4de91fe5b169a01e8232a2cf1e9a249bd6779d1e8686ffb6aa63f31b0ab05b2b13ecd740938bb085640bb550afe4e58f524ad943f2e47aa8438c22317c31d67080169187e62447bdab0dd0ae7911a70d70a30a0bbffa31e2b8e2f53e1ffd68e41b7b30db62f48c9b8bec23cfeee8833ded34620d071401b5602323e791876a954aab3abbdeaa88c3ee8ddc477707d8c237bb91bd15d8428f6037df580bd99a58b09f6c499b2b6d5ab2256d60a7440cf451c4e171a40a5f6081166c800f87dce008dfcd6363cb3cf8d926399f2348ae396b01656801ca30793b4582fd7aa779323f6d99679e8d9a6707663dc409420f8708f1711f0e1162f3356cc017c6c27eec037bb848d323581863580bb0a5655781926b13205d1d4c861d16c9b5546d555b29700e61748d6a70a4ec26c84d4d4f0d1b5906a3e3a3df6fe6233f03f1d12190125607cff778cc3f185ae4db6160b4db3bf40836eb189d999999999977b2ac77648b853cbfa030ff98c84fee3fd8132425de344b3b8751ca9467a77af126ba184288dde88aae881379c49b76d9824180ace991aeaef34516a4e8990a84ec236666865e12b167839db50ea105707a156ffbc8bfe8a42b5d12c7756fb44adeb4aa8f2843f4a44be2689a338ebd49c49ed79c1ec16e99a7e9f4b85e367147320f4f6baedbb624cde202270a7d4a4cc9d9933c64503e72089defc869348d18bb20468ef2cd85a77d7732dabbf098d3ab538491e30b87e1db0b2fe6449c17fe451c1ead6a7f31734eb0b9572eeec7efc25df8e69b0b2fb6ba875cf8d7439fc469b47431c9bf697d831d74f6ecfdbc1b1fdd61dc883333ffc51522ba083e7e33670a993928de2827b367be5a05fd9baf8f37151d3ecd933c5661dd004f26c832ddaf96a8904a55a7f441a18f972bf152de671f45891c718b2dbc2f0928b4459cf8325bb1056d894f9b5e991a753a399d72224bfb09ce96c9bfd9faae6955cf1c94fba14e7e72e228af5f2af18d3af1453af53e722713ef0785303b8d68f2f84bf0e7a309f22467ef8342847cab5735fd62e111f088f8438aa591b3f588c383d983b8498c62dc116da8b09da476dbf49ab0ac9a269c05b9001ff48201da8fd042f56d88909696f31ffcd17117cac6e250974e6f8afd8487a5e38487455d7ab3a274c1ebd945c1ff5036b21ce1f0087819fee470cecc61490f4216e88418ecbceaa1136e6e9c10839c874e80019296874e80c1903f02cae06fa7007c71e1c1f901149e20821490b0dab913827e6d95854e8081126ac417e95830225df1833f9f7449178f6f9737475840f2f8f68d1ec17ed2f551c7155f2c008d7c7b94ae2378ec1775be9993337bf8803f9369444c70532fc77edc4243cdb7738d3dadf08e1fd29b7056f51566eaf1d4aa56abda00edbc06ab0408c42d9e70b08db1cf31d8e8fc8d052b53d323738bdab6aa567df52db5c2b635439e9765561d5e7ab1296333d444d3a1a469ae70d8600c8bf5f4eaa33ad8eb75e4db3121bef2838f3421aa4377da00ed5b477106331c39025bda6934ccb4603f5a0632c096f63806d8d24e77a80ef5417718de5410fc7c63d0f34f32d8ea8a2fd2a94e0c8aacc8ea7e9d202fa85bc7a5f3a23a544713a22ce098fbe8a8fe1876e9ec3d9dc9958cfcf5534a3b9319bbf7c9cffccb3ccbb2cc968019638f4319a99c4a9cf9ccede6188639c68e03e30b332f094eb20d7c05e13cd7d81ededa68b11564518519fe8bd7daba85e61c233ddec2338f1e8dadcab25039ee31ffea7175ba9cf1ae6c248205175035d8a2a0b544376801f78426e07c8cd5b35cb0fcec56081c867cac5f7bc55597491a830a88c84b3682c4876f6f234680d808d07be596730b2828b6c156940a03b50f0dc210286e62500cfad81e3b768cbe818d9d10a2e2a307a5f01ba7e1898fde8cdf7a0d26f8e81de0b798862a7cf400f09b6c7df478f86deee0376cc847efe437cab1c74ea8418b8f5e0fbf552ec847cf7f8395665013ad418b8dd71087e6827cf4e014bfc1c830b21348e4f0d183d14ed3dc2ed882e09f16d26db3507e70a857d08a3300f140b3b826080b351cc203080bf1fccac32151dcfc366227d8b0f26148788891709295668f48a04f1435af7a38048a269ab049b0a26727d8a0c5f30d8282c8f7f07008143d7e83d98f058243a0d8f1ed58902692e45f3c1cc2438b1fc2830850037dcb20dfde47b09df852636605abc48c7d2c09478031da3748000b87f0e8f12a0f87f0b0f9ec426fc32837e9a475d659b399cd4c9bdadcb629634f4c341deb64e685b025b27f18cf9c4d58ec75319e20d8787af804261c8190b92bed4e0642d5c76eb382a51eb94e46c66527436fb759c1fa941162229909bd22e9235d4ce6b193899e6557a808f6eba0cfaa60271c6cf53906dbce18cf84180f6469bf5907c517c8caee57638b0add33eb2becc738b107de8f99311e32588f3ef145f3e8b08384d888bc1c44053bd9938939320f42e3b88bc9c19f79048af89879cc8cf30c14c79086a126814d77db74106c69ec85f1b42a46c17e34cf1e68d5bc826d23df9a69ef200a638cf1425a57301e20a13ee24d6786ce5e122b1dbd1d548df490500735923f12db603f8c27e8fbc376b09d5ea51803d2ab20fde2adaf83309f1732d86a9a7096f4e9346ab401ac3003906faf61a11566e8f1edf2877e8b9e3c62f3ec441986befd876727ca30055b1a4da3b716e217a800498f872d5aa5f8052a48f2ddf1095fe02102ba9931acd0048b6db124d3bc136cc13c4adb2a4c9b3266977aacc29a775b59d9aa8e1709284306626e7b0565b8802ded982321efa7f2cd44d3cc28a3b0e20a3b3360c90a40acb0020e82e0d76cf4920340233e44e148b4a2074993c10a1c08492b6a10c454ad8081101986281079038f095a316cfb940128c894b107b6b17072ccf90876d4ab391df32a4fcf5e3cb0d05b48abbc2683e59ed7cb16b12971f2224aceafcf5ceb89f114b13823bf6227bd52cd54a2f7f58a3116519d46bf62e42b7ce42e7c642a3e0af11075cd5375994a34e2d8c51a25e7bcea2846ed146386a2de16638c31c61863cc34ea62d747ecb20db76ec4381a8d363eb9f5ad2377144de728c43fc06f9d469fbc94f4084056e6f36a0e95b03ebdde1f39220059a55b53c3b9c86b6e4ade2232876f84e6d16b7ca1f707c9e34d49cf9c86f5b97c1489a4ebe05ce4f21ad1e9d8bc731a16763f15aaf391dbf862f291d7f8a2f928a8783fedb611c8ac1c46fd581f148c75c941b1c146c1093274e1f97e1008528f9d5f950d9673e69c334362b9b541f82c6764d903720ef7e855bc2f162284716aa86ab01f2154b9b8c5d8256fe0953791a519c7e59238f246e248d7d04483a54163a04071ea5020d8235d43d2255d4ce160a98e1a6cbe9dfa80f24481b07d2af49df9749a549665d708e9f3eaa82e5d0775cc6958f0faf4aa99d9a727f644223ebd8af7469f1b7b5ad5b1a7c76722b11c89449fd8035bdaa3405e502a629e4f2a3ac5b0abe347bc4648a757c78bea809105a33c342c9dc8022fcd812ded32f0e90d604b3b6441d6bc942581284edfad888d3dffc51eb91359a460d9630f9d341d2b10d57f2a20bdf20101f0c59e8200b33687bfad2c644f65d9e1cd1c7ae6d5a1bb5c3cbde216fca0f30e03d9e9558c9175725c7e60fe4e9ebfecf939125c410a679c38065c5567662c54cc2e8ea1e2af5dc8d7392786aa572b76f9d08adddccddddccddddccddddccddddccddddccddddccddddccddddccddddccddddccddddccddddccddddccddddccddddc37c5aaac4b372676b852ba816a29af4559692d8a4b1edc3eae2ebc94e7ddf899f9725b591deb2e69d0e2db7fd8dea69c4487e99317cede92e4f27e2aee3c9dbd93c9b7b66132bd54c94b7cb2894d6ce2924989c9694493c969f409e5a71bbddb7c4e473949f16d722c4fa554c96b35994c3755bad1a5c94fde578a9ef48dbb06a0fce4b0abc18f72d395dea1dc7471a0fc7471a0f8f4d264944471cc632704e9ca56c5fba9dc99f827439c78bc1f9f4c97d1e4b234c467f2e9f29ef0946e92ec306ddb25c2e8ccce46bca4cd4924b7d1eb88a0c93a1bd1494e23b2c8ba09254505e510bea4dcc44f0ea10b0f05a18d27d6a24426eb249293a4b4d6da8f4432d9afe4233791302fdd99f924ccd9da6bbdcd8573cad1cd6524b683ee84d87cfacc64c7be2496989f6a80c617c7a76af04d3580e635a7e98dab7374eaf182607e7653110775e9129955b225765da2b09f7589ec32a5b55e628269308a9202e9ca91392fcd923d7ce8329f6fef3667a11e8cd3ab1d9e7d6b999212b3c176bc9c76b01b2dbe319d6f2c0886f31c99690eb6037361369850f4b230d8767d8d83d9604234a757ddd4c737dda1449efad02235487d7d0bf9f6daf3f3b4e71b87be807c3448771b47d36263d80ed76c9f3798cbe5c2e156a4734edb344ec491aee9c29943432d6f7aeb3feac2725c980d5d61664fbbd285c3e3db69cd6743777c6337dfbe06cc467a9c93f96c6d32871d203da0f87988868755f0088281a92124d483040601449250174c128c14c138916ede5e0389e953686747cddfd474c2ab270970c559802afe69553b0301090591859f5ed98001caeaadc14e10dd0f12b101d3f5c0706ba86129359cf87200c8d23e45ce0e8c50867908681818a1ce08ccb77885ad50bb92b95b6d838a2c45a08cc09c5e1dccc22e4c849190d5ddfab68171b19c222d44f17ad8f3b00a28823e280d3b4730ce1c0bf6833d5ec411f145feb03a256fa078d89b6fde01930421f9ee6955abba20e2f33d02b6b473149a0250d5de35e2a573884040403a3a3aadc33adf35b8e6cc7340b33010b7dd60326fa96a3306e29eae7241f5a86a0fec81a1c1403035a2ac31812a5094b33bc2066358203d5e2e2e69b8f9f61f680051845bd1bb33623a7675a4608df10afbc12e021559da5d1559220dd8e3f3f302925e807171114af2ed3f7cfc716258868a5d35bf7609f6abd3f909566a9e149453984fc75c7a29cca167b9ec7e5254dfb87e5c5de24b06595a7edeb73b6ce99691c506f673a9b1ba489f6c888dcbcfb7ff60d32c1e2c815c2e280342f6ccfbc17369954cc24a619deec07e6df32387bda3717a053d08c4c67ebd86131811c37f2e2bcc9b420167784f19f08c9517f04aba00ce50ad00aeaa0fed457e54ff55db3cbcd3406c45a1a20d7602bb0344f26c112725e59fea5d60625d751efd7a9ee7a5bc140fc5839145c505f479939b9878d1d53b88ae780303ba50e136f8c2c5850ab79d68198c252525dca5a038bc9fb5a90b210b44b9b6e49345be1b7f82dee7cf377e66bec9c4dbe34d66f2f99ba8dec405e64d1c887e8942347ad55128bec49c9df812bb8477502e1ce7c417a9dd92b813774e6da365f7b327f743b9898b4de7225d9c6cd5aa6526263b91a5dda414efc9bb8357fac81de77c73e9427dc9f59f2cf2ed33f34d979de449616f8aafcb0fcdd2ce3ed665e4558f6b9bc86d2eb573691b1bfd4f2aee1740bb0f1c85ac6c718c7614cf902eedb64dab00b608f10cd9e219718763f00cdee118cd335c38860a32875108f6cba89e5ddee073f0edd9fdda6b17b83714df2e5b06df1e776ab00303024019dd02d8d2bd8363b4f3f8e69d1e7cd0030c1e7ac0c38b1d78b0838b159d15151da4d021757770533c1d7828dec351307200e3e4050e5e98b8b8818b12951c9553ca0629534a14292514285048281e287bf2c4c9c8a40626a2121a9474279c13679a81692bc9a0a4916240caec8dad23188ce877bfe09bbdbb9df8666f9b76712e803236b9b500cad0e2b3370b3ab3616f1b1bb56d24906422d25426984684b1986093ce709a21c8b31366f0f1027876e2881c7e83dc2d9222ba34c25e17b6e647df269c55db00b6239fc0852676052bc326393b8c7cfb600a79067deff014c66fef9b2044faa5048847af60162d00f238dfdd42beb97d7c3b85cc9d8d187dec17756e5ad5edeaa1c8d259186cfb375da4df01f2c59eeff813e4bb1529f4dad5aaee9ce7bec1c2f4769714d3a5d7ac8d39db35ad6a16b2aec8c2d268b88d1359e660bff9d33fad56cdd46206cd8e1a152cb442a8e6db39c76a14b1043b6573f5385b81e8d5578f4841698d1f409e824b5c39fd6946cc081b5cd9669c5316b999327a6066e5bfba4328622d2d0e76632ece485bd29e50f6ec6250334a29a594524a29a594524a196594524a29a58c51c618298db1639452c628a58c514a29a594524a29a594524a29a5447932f153be6d8c527177e11dbbbb18158f9af74225c62ec685c72e06c56327d3df2f5426b7b2ad394d71dac5a4a0a0788c51452546cd51506472f016ed61bfb29a778a771793e2ddb56f5986e2591783e259c7ad2c8a6b2e5ceb64b07fa1f24225052505e5858fba1815df2cb7b223b75d0c8c8dc4d9ce7d2b61b32463a9542a959a4ba54dcbb08a61149b12c322d618c61806310ec3308c71523c147bf2e1a3ab78b055ee8d6074eab2eb639d8ff1e4c45152549fde3d39e96a6a8b73cd21cec55c8f6ff4f31afc5ac3a321d6192569d517ec371a7a8e39f1ea8d92340bfb76e28d86507cba6df5cab65a656d5c2971e505f34fc5872f297d3026b83af90785c01e8b53e30ceb8363f0273f7e95fb78fa186ff413db3af14643dacd686894c4dac4178bb279c6892ff6e58367d8227d59bb3e9ebb0b22be74bb135feccf4fe55c36a808cfb0431c8383ec902dc20200e7c1bb8be9c13786b14539788bee2e86c505e0b18b891100a7d1524e1e3c763152b23cca6717b3b2ed18d6c588a407511f149204f441f9463991d32e46e4b443f9566bed62a8d72e076f91f1e05927b369dab6715cd7753154e5a22e86c503e0a32ec607875d0c8b8f3a00f846c226494612894422359348f094d58d6e1bb64db96d71eb6de36d83db06439463012f5df3cd8be1274f000ebd1637793eb88917002f7900f0128fc5ada7f291d783bbc783c3f0a8bff044eec26b57f1509ef2a4a778dc575b718867d8241ce36707ef9f1f4121eff9575b02f05a3ccec7e388b48a3d001e07008f63f13895c70569157b0f1ea7d32a761e3cae07f5b81c1e1c0eca7575f0eb3bdc159be4fde5ed1bd8fe9110e53c862a2af24d72c32842c51f09f18f90d0a0bcab83a7045fcfc5b95046497ad501d67979e2ecb675720d60e58994acc3fa911202c5a3c7db01d6f911cae55ac53c12ea4640246f64a455277704d42a76f6d14fafbe38d2a2573edbf08529e5e6061f3ea6b4b1270b5b6a72e8f5a326a5f24187ffea0ed59cbd49a139d4ed3cfbd7010942296d1eb45d7e70e9d65c5a1ceccabf1687f6f865cb133ada1912c427689ed00ee21e4652cc0a74623953ca122124348078cde9757d7137295b115b6b9aa5b6a0b0d3c5e14c201f46826a38a0674ecf0ab1f0d3f1d2ed69a748a78a30a255ffd51def635f42987e9ccf4c32f429d4bf39348738577dd8e383c87f5c0ef57870377368e3e9c56f99f8b3b6361e2deea659d86104b29f0db241f648afd893b48ae58d435f1c2a010539c2023f73a857136b75470474c902db42ad62973891d3dec77e9dce33e7822dcc0d4516f630d84f73c521d7c7b97e28be348be9b3f78eff6acbc7b3cfa156ca070fcda5b97a9542a9a064dbcca1d75e5e0c0acb0925f98feb513dce653fce2551393e76589c295b295fb13c5c6aae5e69383fbf3dd8e383234fdbe36e70348e3f1b829d0fddf55f5b3d3d58f2662008796fc096306c2dbb611b7a7cc0c301f54021849e32684e2925e78a2c3813cbb1d3656d7973a855f37a3e93b4985eac35875ac573086bf50abee612ba292330af5eaf8e997fec1e462fe3f48a31aeccc260a52f55ab302cc7426717f3f0ca6654e3201ce65d63a1bbec72cea916d8d5af7ea55245e8f861c4c8456e9d8625ba3a443e72cc998785748e2541f20f019f84f69c63ce417c04ca901ee4d5f318c5b84816b78efc31c612a5414784bae85da7c1cd4b5ebba6756c8c7a4769e7c9aa693b5006f6d8b316bf614630fff80853603a59c88d5f8328bfad2cdfd002080c066357c42084ec8ae91c76e6b38bc94871e4d5c8827d0968104b24ba2914cb230bd652c89c721ac62f1aadc25a856941b09fea3167b883ed50771899edc256d1cd03f1858380f9148fb98d0730cce6b11dd882d11dcb7c5344af34af731704fcf003ef580ca38e3910bda21709170c620878acbbecd32a8c715a853977d9d52accb5282c7415e63ef42ac5dd20f85d5a853974d13cf8b40af6abd4a7083bd8055930c732dec176daa746131f3a3847f4052ccc6208360f5d08432f80875908a147083ca9204f6b0021f2dcca0248904779980510d703f1f1dc7a1e1a42d07fa421fc3cb75efee8811b0c2ccc82083e9ee4fa01d0d79c24dfad2c6c00f4300b1b6cf0080bb3b081d0cbd6cf1fd43c001e66f1e3e78168f1ed22af0e573e95d6539721dde0b4aa8afc23b95cbdca482476eaa9577c49098a2cd46bb516857257a95c5c522f235ad5f0743a9d4e27af3101dce2d56a028675ba4d44d6c9e1107ab21802771038b909609c1ca533a2c44f258eea628aa89185fa3605c84a4178d20d41bf7d3be986a80eef17827ff87383451e07fbd7cff78345fe63ff48ae207038c05bfff94772918c3c7568ea6c546f2f7532edeca9572a48aff8d66815bca99d5691801afaa4043d75d24fabe8cf6f2840bd62a79ef24dcb0e517c6c67c4c94bae8e1fd64f170562a4223cbaa893993ef294a0eb81eab246af463789eaf676a0ba74eaa42e0605a857d2a98b3a229804b7068a0fca0f0a50afe05605cb28469e3a8aab566b5128f746715d4849b655da9517866a591021c8f717bf6601841e3f808759fc40e837d8c5307bf0a369c732efc381b9a8b3817943194ba0be2302ce58c23efb0cead9e1c71d1175e49ba77532edd5515cbdaa77a65382b28e884a82ef9b837ef1b10ab3d9d8f68fe41a39df19fef68e8826c1b7935c34c9c3ff483723cf9e5a45eb461deb64f8b71efb9170361bebd5a724c14fdb7af8d4358f46aba8935cbddaaecb4dafb2fb030927be945c98c8427d656900e1f2435761dbab6f446cbbb6dd6c55b0d5b138fa018646af484ea9939cedca6a266056c91649583a46c03ab99645143cdf5e39f3206ca1f9ea27afa6e447e64d54d6c969c49307591cbb98ecc64e08f86ad9e87c26fec86327331ae5a02ff225e28b3c7642c8aff7a341b58abaf554ba21e816dff986821f4b306f5bf5321f7936aa67f70adbfc8de071d82046f038446e6f8e1bffc178d14c0e18df4c2f315f34f291c32e73f652d91da27d891fdd5aabd6f1a5e4d43792677a928b445eddb0b01fcd571c4270e6d96867a7114d1e0e21f8494ef2da11d1deee1b1516368b15b63d6e51b0edda1afef3c05be72ea66f6cbbe699b3c8b794ad884d094122b9c835278d5c132dd13f724d9b5d8ce81ac0b6b744bff5cea1e3edfd22842d1c5f7ee7556fa5557cd32a1575aa6a81fdd8d5ab6f7376ea7cd32b1c1be3645bf558d3b6ad6a355ba117874a6b932e5eb08d462cab7f5cc5413d620ea973a4de276dcc5422fa27f5761a63fc9a88e873ca29e59472ca780628633a14f9d69c0cf8d23fd516fe632fd468f15ef8e8239f9efd9ed3eb7ceb3cd2731793a3f3e95bd72b7b539a5bff36d9abd24d693708cd3b2f398e8d76329a774e3b19972739ed7c73cd6907bfcb3cf9b5b3215ff3f8dde6d99679a6f9a675dbd67997a10f9953da0541ba10b66c4ebb18ede2c89cdb2a27f2e89bf8a9c4b7d993279c71ca13d197e31bb668ee991c763232a8f010c6601c5ae7f1a39cf32af24c24e224e7b1881db065b2661eb77159456d52246fd4893dba1cd2a797bdec17733e23b99c9d57ab945fbd9edd3580a6fba34eaffa9bf973d869afe6c5f15bcc22b64928a50368d8293b36a7f73796dd8e357187c9fbe28d87837d34badff4b0eee7dbd0878e18e760e803bd10b6e068c772f011a38edd0fc31843b56594ad1877db78b951f65f5ff5cda5b79191cb1227b9f446d22be99da46647af6e7a25a402955ce45f0795b8f5170e93a3a4fcf8399aefdc048532b90985f293cfd43f912714ca9ea04efc64b227a81394c94f27d664724f266b4dd696b8bd9fbd4accd43fb9cb17b9f49367ade8644f4e2a119d6c8977b2d6492791355d921589ac485472d1fd445ef26da63e49923c91482389483e2a692451c92389443e6a91537b47a22b45d4b5fb6933f54772e4b136f2ee1aa06df1ebc8a956036e4e65b68b79dfaf5dc3b139e6389afb205cbc3ae4193c89e8d6d7e99acfd4aff27b8bd3e98c0ea019b9e61ee1d3fa23af9a8f86a84e4557bba856f5104daf8acc696382fd509dccc937c97117440be9c9c16f618b74126c91be2dc18a9cbaf416d22b1c22d75cca70ce57f7d63c6ad4459e7ccd8b31beec1a40d3b0854a979d8da889b4cbf2dbbb5eef15b74f6ff4a82bdd27842ddcfd38add3ee27728ec3441aa7619cc8e3308de3449ae6ec1ca661dd9dd89d1b779580b0e5c39ce367436cf1b3cd87d87c72de3d003ee6c387797f36b5ebecb3facc3e7e56ebcc6acdea74f94961077f637a9588b0857da67edb90dfb7a10fccc4164f31873e700e185fc23cb8000b2360e1083688cda8e648852578cae627829d95106762104c05ebb00e108e481d08b158e480471cc1959565d20ceb5ff69bc8bf51b7e2fc2b7d260ffd3b4171f1f0c54fff1c93414d5e0763442f792348327d74eb418e3132f9e8a22ee5e2638b763f7a56bdff3c1fbc6faf017018300000e3c50b96172e5ca85ca8a8f4a0924af1904ad9e1a373fda803eae4e33d31f9c81fbde4f411c6c9f4f185a9f4d14589f49163ca8e3ea67c74fe8822ea3ea23aeee309b77d34d9b48f251f9d3f72fd68fafab1f4d1f9237f1cc98fcea218bb6ed8c2d4eb17d168cadf5dcc742863faf418b6b0c72e666e92618ba4904ea3bf8b599791e604496a6118c74d979773e95b470476bf7ef7e99c9c129377a6b9e88e5d19a79cd89cd3ddab7fde5777a7d11c06045d784695734431ec87c7201b1ebb5f121e010880b98ba4d88d6c7a9ca778a39213caabcf89d11b7bfca7e2584a752ce5828894fbf5d731e7b14ab97e28a2ec46bc1b0eead3237b9ccef44606bde4d34bb1732e9dc6d6f99c44449f98bb6031477ed539d734cce7c531dd3179bde404e019d3b9ab0356dd8bd375b89f7cce6b9d3e728ac57bbf929feeddef87e77cbbd8888b3e94524aa95f02700cceb14e06730dc60b17f72b79ce8b76e49b882300cf98929375524a29e52e0ee95877d14b4428a8932bfa4a4a9e235dea7d767150e7b05a6badf74bc283dd109ce87ef5a6322f29f9d7f42f09ef39ff92f05ee49d7f3f8c36c85251a850fd833e15f3ee7e3ff4709b949a07338f9fcaf98e651e7c6c524aa9f77208fe01bae598689a5344fd20c3e2064817b0a8e1c1444f904215ae2c0057b4c1475e216413afc0232433fd2088e90f1e8e43cf134820a4b042cc639c12bbac04e89fc39f95e62e6c2b1b21f486f7a32c0c76ac03ee0a15bc362bde90822b6c825c51f3837a7be7d025be8c1cc23cf415d8836215e9d181e8916721cbe6228f46bbdfe83cce83e168f40ab6777732f67378c07e764f0868d5846997156c595165f153f8e90b80aa09d32bff399dadf8e943152ed0092b284301b065fae79205182cc05c01e607c60a305580a1024c119829c04801260b181f182c60ae80b10286084c1460aa80a182e3b8ada70693c154180a83c1cc295f300b8051004c02601000333d85613048cc00311d01f0f573a4a7883dd11ea1e0a4c347ef648abf1f3dd4cf7b586c21e4ad168cd68e1750b8f8e89984a0f2d113b586fc5639e9a55a5348f9e88d80507c5a684091a0e6e4a32772fdd671d23389a284043e387df4444a3091200abf91b8aed499ba36fc762a95c004bf9570d2139970d1eb5e6e27a21efc862a01cf6f28b60457fc96c2492ffbe87525d8c26f294e7ab50465f84d85931e758349cd6f2f6af01b0c1fbf3927bdf8d123f1fce671b244c56f9743c9c26f3a70d25bf1a949c16f2b5087eb398c172e5676803e2640f23491b1216c31f80f65851c72ae40da015aa1d4adad91565a2bcb97f17e15c685fe000353595d6d20e3d4d162f0223db4e20d53fc67df8a37a4c00670ee40d4bc3a7c59c61c1dd68113f3f933f2a7650ed5abb671354eb782848680a094cef5ca37e879adea9eeac3fcf31d51bd82392c78bf19f9f2a2accbc25a2d3b64b1bdca2981fd5a272767470d3f393d80b85f1cd1792be2ec2badeae8f0238c915ba91fe7704eaf3eefb1c3c981c66edbaa08a14f8fd1c2c8920a827f1b829ddc4fb4ab81471a31407b05b21242586bad1e0c0eea55f5ceb2cce7cb03aaf576ac19a854ec15c64d8e32452310000000025314000030140e8884a2b1502c1e8ac35e0f14000c91ba5074581da7498e29640c21840000000000000000a0098c0481c8e3466392ea1855164a12e800ea61d91f3b2e4f2363e88be3b18b3982309a6bd44871f50340839a38f40c174577e4591ba05eea0dab2c4b9d5fe34e83756d14ecff47937f7498ca4e01396d8b2feab67155e83c979b5c58c9c36ac2c6c7e8514d65d596432d5b6c52a20f047f7d089ce99b3ea7b1cba16b7fc6a5fda0840ce8d43bcf97daf36c55d040ae59c904026cf9de042861ed731a5611162bc0b6204c69e87cca70df5b71de856a899ef0eac1cf9fa2f5727ad2bddef080a1f3ac11c59509be7a980924ee728d5d7c732256ae230c7039f5c623eef716c9b5ab5fcda20499bc74a38785bab2df40bed93c6fe2b64050784c84d97f9c13775d64403c2a6af04c3e505bb3f23fbf55e2759e1901201dc5181f167c1e1f4644c77a5aebded1508c39750a3468d486e579e88c43c03f83ecf3c2c734683e34609e43004954113ee27ab808501bca5ac7cf1f23302a8b0f3b245c1ded5c8596e61faf457b96180f0b0c863dc572cae258a7a8abc404e9d1bbb9e2fa816cbf5b6979d3c90709035aa9b3533baef5fe52504196638ec9924957a47c4a859245503e510a14c981d7ce534e1fd9acae1da06ac2cdc4f6a71a91662d8d08678d21eb52fbe47aeedb0374264940f1a683cd13f480f3c70c3c80fcecd0e280fd35b1f361dc6cc60cd8eaa91587a824ab057cdbb13990979597c35827125de1b05e630cfd7d9a163915c7ca5c3c10f781d1ceb927448b670d829b211e10f94111b842bc58ee68f3d8eaca646344470750fa40ea4a960fac38361cfac06e54f3a631d56d02f524e06f419adcf8cbb83247a8ae6dddea93bc55e35abb23a375762c7d2516db7a231f11e04a449dfecb8536e17244e126d32267d189d833fb3db1af5f79a3a77c3490a81c52346f13b7deb544fa89ed42134c321d48932a623839568408f0fb98868c27194b3bed9ad6ae3db95f8b5c7a5ed3af7a1d14cb73affdd65c5b72a7092fb87653f06eaeb3d7ceb4fce23520cf1157bc73ffd5286ba9cfa6c479995e56403a4017e4fbe1c8b56260b17631a2a724a67a182f56a36a5ffae2604dbcd75ca86743789b7b6f168fed5e9cf2b1489091e4fe0182bbd827c73c9a8e990b9571b44768dd53c085e205169da5dc4a091eb76ef2ce479cf25b7ff780adb0320bd063a85acab982a263ce23b4e6c29b2533eeb271588a665dfb79ae54ee6436b9e7fce781ac574d03d1551d292cdbc7466807b952980331856f521c1899d4d6808d73d31b7f91a86d896e72b1ac51c5f5103341d3d5a3ff5e070c18a50a01926d60b3fa7da3386e3b548ce99b245f97c859b4fa14f761f0c97c374a63e444c2bc154064427fe609872aadb8fd8130fd30c283a8e5db647b08f0a92808f3714726503f28880b530bc44e89278f43f977b8b708ab6810cc93649ae960dd2aed99aedb40edf0a8def695bc77910508df90cc186af1c7a20314ef0bd6654936e505931138ba176b4452bda99dbeb105a03f58879fb63f518bab7b2ff091dc33ffee1379c32c1694ee0e38b70afbbc35afde6fc5905d207ef083a8664665085fd2306968475e45d7ba07e763044caea868bb90c424459a5302ceef4411330fcb3805596cd4ecc89f5ba98d5f3d06f35970cb45cf7b6a2fd06b9e60f13867ee90080df541f4c0e1c43a041cd9d9e6d47ad3674eddaa0c71eac0d186f23a189cd1d39cd1cf33ee2f587bedc34c08336a2ca7ca3e7f6fcd258980423e3aa1475b67747bba21af7649868e988114415d844906b62814599a5415d3986125fd748c30f6cdc6d9b7b7cfda7418b586dbd16c8b812884850ca3b1df383dee1d6824125ac5e19f0d78684a45275fee063d53fe4a314b0da02acd5913f979c6aafcefde030eea78335d70f53c15da5085943b6faf2bbea1c0e739e6a251800fbf103eedf751005e2350ee4b01706e54ecca74c87ca1a0ec3d0741be312ac8aa5ac7566c6dcc67a4f10ea401d061c6fd4526d4eb060756959bfada6ea3fb9a877420eddd1ac87589919dfbcff3167d8d32adbf8a1eb1960f03d26784dfdf1afef9eaa3404da23d758176cedd5d726163452b9918da98c395cf126cc7566014a5c3f4c80fdf15cead1d8ce048c192ff0d1bc36c9bae1113df1f2300ac7780dff248b50c874de4964db76f772f96580021804d980bf8f9d021a6c72053719950ce13e4e1590e423b911325deaa16abf99adae2f9543f3e21d239caf2c43ebd9b4988d5470d50ae2248ac3d0b90e7d8d50b45b3eed868211ad3445be3bfc7ba981ba187e6344b321376291a9f9166356eb6cc28055afdf6028a94f7b7aaf09fc266f823090386f90c6677ce8e02b92ce576b96c2fdc1ab65ba4d3c97453d4bbc8ce464f99023df5b4291d9c2124f1f5f096ebeb67925a26b7d51cb2ed59a5efe867d4a909a377a762af20e66041da91a2c63650fbb30f723cc874ec178c7cb4de12e974390177bf0327b247a703c44434f74478d9b27c6093cb8671277d140379f97e7b0cec9a4bed6a351efccd979cc9543919552563969bbf2e886c352b752edf9f468d058f21925eeb524163975ba0b4ad30730bdfb937f5580524f101d91460f037155488641ba52f6ef817e6a8a3b30e8bb14a5e960c9d76b321648882184f8e3ce32a27641eb72018041e79460221800d597101746afa813661824023a203eb187b6b91f55016c4c1455cc0e75142d65acedbbaba322dd2dc1a74328bbc816f723c27a94bf8c382e0dd5d993aea5b62beacdf60ec6fe968e84d5daa953f44415cfd781b2bf9a0c87952cc551d62cc55100adc3784fba44a8acc38e403da096c18b219d657d21a80d42f71b6245bd6891b820fab2c6dcfbc750ebff81324e953a73bf68213712b873390802133e17bed61a17856341d5b1a1baca7c3ba2fbe78822a51391147d925733b2f6fefd640e4c4ba892846846278023d113f43d151d1272db3bcbb35bb66a723e89e358cb4479dc66d9dacd3a22b24ab667ac6baab5d4ab58ace752fe346af6b672216f9f63f60b8c382b8de23e094f6440292bdbd83ebb53b271c87929380dd9f5841e068c996fb4a589a06e245bd71d0c8f0de96388e72f3378ac8232cb596f21445ed1e24481845b100baa0a3daca040c6c7fd95b0cf2a781823c2b14bac905201dc0f26bb7db3972f7cf71784128c55cd588f0ad638429833a5ee22f8af3d06e1aa8f5371198ec087d011902520e278800c73a1cc343eaf82a5b1fc11a86f54b56b309d44c429245684717196409886e3fa8a4e52f187ecda9cf035e6c34466111a22e47fdf15f578d4dce4b581ec4280c07b8436535b963f61e4ddde4db7acc047348dcf296528edb5ac22b736f980bccc35a79b7de3feeb49e89cec3424c890634da06054a66e8abc52a6f8bfde7b40ddd100f9b3c919b4a72ee69cd5773143b2438097130b2e035dd03574845f7e78e011fe15afd31f76f634e7e02898d2569ef817522d03bbf7b4ed8fae71d0096b065bf84ba7f5d4d8277d7d8eed4d48b7a276a3ec60669a50d45bd036a8c1aaaf33815461d4b3f6b54bae2ef37442a4ef032ad408ff548fee3b17e01b7396b5148445282a9e641dba879af0747bc1e962eb7a8c1c861becbfa9fee4c88231342c0c9cb76dc2c3ff5070b770f409d3db3c5d88408c20144f4c712c3b9e5a352f2b61ab2757936afb9b75f24c8518b34f5075066263007c33b6299f62b6b724046e31afff624fa1f052c70ce434495cd2b55897b14143728204e3535f08036404451490b2546429d697864d4c25be9580d54f7c72de6df742faf190d3f33c78df281d8a55d09cf2b0962a1a95bfcb3b704fb2e133261d7e5ef847414b09a3149233073354c5b2768037c097e6fe42167d47fe9ff1dc40b08a85f599a16b2f13c79252490c2c838447853aa14698cac26b499ba098f18564d4aa1dcc96e0e3095af3db33f939d9dacbfb55edf74c7e4c43db0aa626eae99d9a0f06c031a450b3cb96c2602087313db718f8895e33ed0db75b0d9db01f742dda4b889cc7a6031864cbd11832380fc9c6c0f7e525fc3227ea2d025bc76b6865d88130becdcc7122568f81a398fe4403c83751f7dd6df24dd2b88e90f5bddb69b179ff85481778648ab113e084793cac6073f7c3b665680c4a749450b8e919d635e86b212f48c3f79c5d4586309f204712406e8088a9b821de1d31cd988c00d5b8af675463a7d4ea737807b023e0474cfbe02771116364f1d9a07a6e8d580c8765dfd5fe19f4919b1d54576bd9c65dc0ea4600549bd53fa5a72111d81be46aa205d04c23bbf818665e9e3ef77df980a73b51bb223b8d9f91ddab7cb1da93e377b909b640457b46f562b47b2c70ebfd78bbdfb2574aeaba6a3c5e266fa0aac82028a721bcf3ce188868ab997d43fc078e4e19617b63fdc88cf511b1543a270dd3d6b79f538ef50b27725f3c508f905c9872c63a5d937cd55dfff1ee29d2ddee295bdb965b7b3db604b1a2ce940a5443b966d12952005fb1278c5bebbcf8d8276076f84058f4894396cf2a14155cf91aab3c435ae75583905f118c6811b45e388651388217688c5cf4d6abb4f9539daaaaa7cd075dbd5ff21f6781dfb9e7772ba1702f6c7c75615ecc22910acccba6d094b31ed666cecb92115920e6753e025712bde5d96d50c786df3561ca41d974bc72888a0ac5838c9af6f27eb7a4b32d78067ec461cb7fa3d754ef1b5dc165d35460cbccb9dd250d85c564a90d712fbcf49aeb4cb856ed872c336b7de42156f0233143ddac57811c70f2303a64994720d0a3c9ee8afa57f6e8903ba7bc3ab76cdf4acaaaf7f51c88f999d6c51d7436aa4f89285c82d9be2be1d8e3f1779549445bcd3d2834cfb293247381de543939df52978eec91af2a4511964d30f7315b4f1ccd466ccfad78c621918f0404a9c884f47df40136fc88f0215b09f769115d4693269c8b44648da58e93a6f65f4ebc6c6994d69028dd858c2427e618f1a5cc34799bffd0ff6b1793aec6981cde289a5be13e2c3bf32ee77e08fe14ce54c0a04cdd10eed418690f2790dae58a65b92348e3c7ecb8c1088691273e174e86cb0b740afd935e5188f0c211c627ffb429e0388e0ebfe5410c37fcd33263758aee4d0448eb7426a0da90041253f5adc97781e86ff9a89ff76ccf1498c4345eaffe328e969c31909504d0c80e213b120594386ec3a415209c825fd56991440afc3f8e4d4d3d4f586488038f2484b4631d368deb1e4f5210230aa2d3a99d23d5196b449bf8a699feadef8fe3b6cee154c4a53c04c85842261a7ae8914e4970ffdaec74a6fee999b7b45f9e8fdd94a32f70ac333f76ab0c50133b131b57bfa8e3bf61ace5002a506549e0118d9ac88e2a2b90371585c88375a2ee1e7ef7cad57c7c15d9556335c11c495c25b331b4a31e420c084a4f6addd461ceb5e71f75d763b8ab2408e84a04aeb2ccfd754dd2bd36cc90d8f363a1cbe6a514b6fed3c2280eb5fcc0d58a64c63efd8dc0501f83ed46f8946cdb2346aecb52e23b0980fcfe8f2d5309a18d5b168968b5441a1f869963b7332bb573320bf844de54d35e72677d0aa020c2a925a26a037e5ab39acd9f88bfbfc56a6616bb518529459923dc657f1cd24103ca4a286864c40eda5914632bee2bece42454a700a311400962f566d90ee89b6f8cb3277ade49bf169cd0ef7c45386d8625b40ffd279668ed55f269601a9b1ec8644ca34d98ad8b2777c250a6516be5d7609c8510c4c4cb610e7de804558a20acaa1d956595dc054a754f8eae18fa69576b10ae204ef9c166a150bbae08b80ddb88c6885af1289bba24a47000818ab12f259008b3bcdf84e0d77417e516375f3438f5804d4a20817fe3050251b34a500a12d7309db5e8d6fbb9287af20f72b5fe925eb7108d42a57590806451675f33be5a9046a6a24dc64d8d83398c30216bb2696c61c3cd830859b8cd87009901168de5b5784b4ac04fbeb5301a2b5a869724f9243c1b16fdf24b133528f2b2efc5320b9693993b07eb25b1ba1262e385a0f3448caf39a1d7765397a39c170aa1b2ea76be256832fde94cf5685aae4bc8b26c849e66b06af50622c5a4754373c976c257b5779c7721f6ec21ab746f7780bae9c2aed49195005f7e2d877fdf35aa6789421b3c1bfffcaaccf48dcb7100fe29a3d8b103420caebfb3d0a2bcd5a855377fb8d48e9a482b44a14cad885a2e9a12ff6a7abe18a24f30dbf915df3505a254d0f521d01bd64808281c99d17b028300941251e6a958557ad12bd3453d437818ad6aab93055cc78f114777d8aaeac4b83e825574b8977b54a028515cc06b2d7dec3e3d11219196deefcedd393f49c4ee8eefef7c5442dc2c70e145026201b00ea095f63eeb34bc3c0b8f109366ddd129c29e6de3fa2a6790574af62e5411a23990aae74f62ac55f81ae34931ee10bb92946970de8a4c77c9961cee1452f22fbf07845a879d4bad15b3bd5bd25a198f54dbffd7f310d774941571bc72cb9b27a4a56c8f57b74b062c7d54c884dea2179695e99e2ee615d8e9943121a7e230b8c0005388b6b50bced569b66b7e37280babb0cece3731ff471e45b321d9f321a3b8c045756c6a0a4ef00513123c5363a32aea7bf6db857d91e9c359ef1a523ca91e27edfd6a1092e9cf648968d5e81682cc027adc9fa53ed48467db3d62affcde213752876735fb830126482786070c846b399303206ca1975eadecc6bd2b277295221f1622b0c546e0b236c652d7202c788e48f78e569c0b6f1f3b66a4600790159036ef95a3ee29238389a2def9ca64be89d90a30ce190647458767368997c5b6992fc39f72add703db44ceca4e500434cd9fb6fbc87bfc5fb6ddd7ae9c772c1d951df2750f353c5ea2b81cb0d4857fd5ac77c917bed9041f99b487d91ed3d590ce40514f70dcd1be902f6d8662401eb049affa6e259c66246e1e51172ffb5ce69c1d16379831929959325c96f20006c7f57c8b3dfb4fbe99da6759ce2792ac7b4cfa6ba9bf274fa8329f7535d4de93ac5fb74aea99fa6779beeedd4bf07d8cd43d5eeb88dfd4965d7efd10d61380ce5438f4c7da9f29a743c3535e70582df51e5a84e6b1455be8dcdea4295ad7b457d2251f31ab2c9c44c23afaa371da4b19386966b669fcaabf5b22e06ac1730d8ee2b484b01967d869a57c98628f73ae077c4d3005f6ac82d18dee597ee3d443131b1815b21ec82b63c939c066c190bce14b01f4e8b4bf77415499eee0f2b5a9eeeff5db08bdb79badf132a4bf743b53cdd47d408889fee514687eff0743f72b342f974ef9a96eeffa5918f10fbdfc97dad21f69123f75121f6761cb8ef1c626f05b4eebffd115cdd9742ec9b9c12b0f43a90107b1d8f9ecab18bd5bafdb31cf9adaa960abd4a9a2cd9a4c3fe5fccfef5f589a631556d09b46904411fdaea816690c7876f9b04f686a946ffa33ff213227dad5ec55e7a233149788bb04b5ceaeec1fe3c34003e62d10af732600b67b4bbafcef4ef08d1bf493b10fce892949abdc3a8fd322e84abd30af03aac7024470e5002832507f25a8b3102aac2952b02900d7fee79351fa93cd0f8e0bcbb2c5f408b8ad71ab1c50350fd0df7475189873b7bc4e4d05e56aabbc837781dcc58d572f7faa42325ac35098f2bfc2b9681b48687c37de1146820dbf8cb4ec3962eb22fc0794c0ec44944520e493c759f68f7b1c71624d0becbdee798f1724d382913e64028c0a4558f53b9257c2fc4eb441c0f10d5290a7dc26ffbbf9f2e902dd6b6910d7c0d7158f5a536e6500f233f19d3ec9a619161b343fc93db3633f940117549a053562c8d5e12ee07835d690df186d3094879fa26e0e1b055ac9ac1819f5db6d155b75de8af12a79e1b43ffec9e1303e88b56b2c1fbe3ad5cccaf3b570697cfe80518ce375ca55dbcd3cc3eb48921ba6c160182756eff34c0675c3338a5c9a784269c05912f710297e97acc26f20a134cd19be1894de4e1f67a5b77d7a1c3eab69b9042820482f2175bbfdb2b02cef95d645dd313ce45ac0300e0486b7e045b54c02bd54719dc53e13e3124ffed09edc98a87a6bd4f2fa930580696da5cb0ed5d34e40862ebed61b5d53c3bb7baad92b2324f94cdfdd6856fb5337e406c85abc0e6b44e59ee4a2dd2a834d77eb2664803cef152c63a760b17af5f41b04d823d6039006e840387e887082286e38f4c510808410fcc5828eb2743da37efa139de86ff8871682854563f0c611eca8cb085d6bdea565eebf9db8f18707327a698c132e8451a1b0b54cec4cce4c158e8c24f86720424b841803787f7ae22bd07c8bc1dae106d2b2d41e18420ad59a4e5dde55c24f92de8a848039cfa32ff8ed84d502b16c0998135870ff15e83af28e45c05c47aeab41f3e7593cb40724c983421947842a382578aa62789cd0618087734364140704cf0b50d10791f72c49ca0826a10292c0bc06988a172c72278274d791a4f4cada1dd8c3775406609afb01b813e56c2670b1618d9963b2883b7d4e0bba817c9f1d60f49511a0177d68ec413e670fb8f800a1c53997d6f99597be180d85d871d344299212c13414c02a0228c02427b290da62333f5400a402c66585ebe4f7e97ec0f4621ff3a5522dfaef21dd688d24784d655ffd7a205f540df07f8dc5940e891ccbff7493a7410b31584bf429f67926d22fa0ec3a50f48588911888ee4b46fc7aba02cd6d08296340b6a63235faa10429b3a6d528982fc2e3d896138663578d88efff75f7ebff4d10b77b3780ad190b4115444de69ae74a6b5dabfb50006b5b1c34d19c616f398da4dc0193500e895f815f9511977f3715ab7f69da4e0bc7e9f68fba8d6f4a2b96a8fc6093b7c3da6a97571a85dc523017240677ec5f92291a3b932f278d461817858d597124b891f7c753b1ce97695ea4304e5459ac76a06b71717666c6efb605a5c8ab694a827ad2d6835ab01d7a385e6412538689522dd4494956f65eba09c94d96e517fefdc0a1a8251ec387f199574c5c77050df4100e83f53d9cb4cff22aad2135509c9b4d656fefb061b03951efb30283cc7a7f38b11d94cfce12c242f15243026f8c89db50c28fbda6adac19d514d804e0efd0c87729601539ebce55dc5981509573d64be8c93f723a2e8430e621511e10be4ee0a433e65efc90149a6630c56d4d567f8150138d86e53ae5576fa4a81e1e74e1020328c42589ab20a8e0e61ec891cd671d05d7a4adbd52a9a9f3aaebfcb0f526ae93fb8c30737d1846ab4144e5a329f366343b9d7b968530584ecd9b7926d3ab322b07fe306422c87f1fcfb634261e0fcd0ce6a06704369455a0862334d5c3254a7094b89d99e9a0b3432c78d044136ab184ebe0c48291af08c0813278dff918c05550a643287c555f9ba72eda0cc8fcad5c388d9c875708df3d4d90fad233b19952005fe16fe25f9a141f92bb9dbef2ce8f68de1080abc6944cb9b8d8b2ca9cf265bbe54ebeb36da294dba6d07e120c22a62b50a0f3755b400e98c1c278fcf3fd07398765f25606caf5908dd69a247e37901742f9a29013dedeea0d59156724b6b7ba6c5f73fbacfb290f9fb1e3af660fcd9bf366826e164a5a3577ec8662e9f51fabf8cfa8f31b38613db74114980deab7e2465d865ed92902d7133498bf4ee89d4d5d9a98fe22f323fecdf7416d317ecdf7b81be1fc7832e8dfaedc34223bd64488ba832210a972fb37f83fa9f40fc171144bde9af5fc691111d9f10685a2f0f62256aa0e7b63f21be8b0ccb6697b811750ff5f51f44ce07bf29d59a1021ec08e917f6d058a9bfa082bbb60d5ef4d5c90b15c76ce1c676bc846b95f5ed5896a4a2013f28b3ddabbad20be18e9edcfd09d2131b61da182b714273608a8af49a5a0aa98b753eb5add05f7df30139ab970cd145b0f2ca0d3974fe49c7e446af86d6ac42bc5eb9d4f7a17d52114cab81d95488fd52b900ab075f589bb9189676d8aa0f092a5f417ee8bc49680c6dec12e8faa1becafcc781a5d570e542b086daf760adaefd0ecb1217538805abb4b82290773108a9cc357f7ea82d227df4d51691281dd2d426d63bde8b4943b6bf9e7332198533fba08d586c45e03fd2b8b7ab0c0ef9d34b2c9222cee4d09b419c45941f10782bd7e415fcf124dccaf7bc656f1c01b6b22d2fd11b4fc0ed4ccb5bf8c690603bdff314fe91ee3f5515d0dc4394323d22659a49bbdf0988597a03ca778553dddaafcee89ac4e14d6e28f534d624cff74da44950e5088600102843169d27937784cf9766c1f4b99682bb8b8d60aa827c8915cccebf1b4570149a7f5fca78694494f44c428e8e89c92734f3eb94d8ebf95bc5ec836d003ea66318007124105693c02d19d8b2305ccda6f8a8db357f49409ed112c6a4602fb3fcc14d8fdacffcd1fd9d273c38a1681b374fd358243a95f57aeac4b1d60434b37042413fc426da633a1a0438607ad5bbff25681c9d938a99b9e688a5a2fc2e3dde5201800ad2454d4d45c3169b64b7386c24e04969caf3803f5ce5737283974d8c6989cb048e574e46baf698e495bc626784117629618cdbc3558baf069deebac428716f93db6e5ed1ec5b3ca5ccf5acb28e6387dec06af92200c8b954f10829b1754fdecea7c457267607798acb883a8372df2011b8ab86572c06c004d4e5cd1343080790519ee22b6c9d454f39a2dc8e68090fe22b466d2cecfd9e720bc7a1b3923c461e8b83207401b3b29d4f70ac2e7a27d6d89397607d3b2d383697bb26d8ac70ed9c1ae115c6ba86567c2d20e9577c8ab042ada3074f4330f072825bd2007577c72be035553985ed6cdc4f9a01e837f1b599176eedd97157c68baf157555502546ed5f851299bcf29079259f7b858e4e7b6b168d53ee433bee888048071f7f2638ca5d2fda0246ddfa607a8ec4be3b1b9971aaa179555272ca2b2146d144410a25a6bb5d4cdf8b8160f9025053b7d95c00939c72ff741c8ed4b5758c2a8899819af6d510e2a43b396ce50c6104bdbbc2d3d021f9190b2a5a3c36f519733c3c638e266639ab2d60b2540c11462ea9211f684d13ee67c5ea2720684b0b1a5320060b3e87184b9e37ff803173903b679fb7e1bb8df48e6051ae2417875cb7abb8558260f1c4cdc86c1eed2edcd36d6baab4c90202a87c2d622a93060a82258cd3cbf48a708eeb7c5aa60492e52bf78000ea57bc51d6600aba91935eef5b0bfed8d59249ccc05881d35c6760598196ad36614477a089a5eef288fd1ac63c3344c691b58ea4500432598db1c921f278e0ac6d514eaae0f0a0697bc295d90d43bd1b229b23447fc29811e11ae3ad8b954d217507082dede83856dd2342d3445529f446e3918f2351ec11ffbe4b1071364210ae46acb6cc78fe1eed16f5f7c3255b1cc9a09eba283e483b45cacaed2977d01a0d306e0fd66ea4acec73ad77336a3dfb5b24d567abdc5a03adc0d80ec23f304ce58c9c47e8e4c88835a44c7758dca4da1c56a9f5763c9177dc35ee4cfdf526a47994f40820a13a26658518d3dd4859df049f62ca10a86c1ca9a91a74f493d97c1b18ad8ffd5208ec6024b3a5c2647ff1a7dc1cef3fc2cb57195f111664a1898c629ffc4b4238d82a710157425ff53fd4fea4950430c553f988009882f2d1cba29da4ccd91f90333dc6a358b1a96df8dd1407a668bff0c39733de1c600d263ac98088d3a51163f15b5f0d50d4ed98633e22d685f2991c07498fc4a3221095a23f478c3dcb1fc975c055323f087b8434daf0e25a45d04eb9889f5596042454bd1559d65f77735e8378b1d77bd5e8491565af3d40d45df0b09a825be58465b8991e324ad4624c7b5944101655c3a2777180b4893c43da40d432ccd1f266410b3b706af451e77df4511ddf2d10719c1cff7b829f72393b845d5177bf0c09957aeb48684ad7b1d91363d05b4b5c96e0fc89dcb887e87e5d71359f742282abaa8ddf535b5c493a02894a582058f1fc6caee38f69361893d15ae30847a9f1b85cb493b80e5d66a668cee8abccb4a4d18a342a4bdf44f630fdc9c2e31ad87406e11f40cd42017e10c02a2908aaa2ea26d8234526dc2ae912a8d630e50e43a4646a45a62bb20d36bdb692445764770852fb370568f1ef2cce60b5042925c905bc10d0825a61d3f06370c715ecd948e65ba6205ba22dc6a43d309c00fb7adb636785abea00b53e6200f08ca4859dbd68a3cc67f7ed4eedc6b71e83c1fdee2db1bd91064867c8931dfe20023d10d1dcf9f18bb2c5d7771d4a0f828718c10a5a2c42dfca95e6c4aa20362a6888f9bd3f84137578c8c7912b15df7b0d00d52f2436414f104d7d44ccbf39f5c3223dad92ac3cc2a32bd223435b3929ee99e7147fb243c0c6d4244f1c160f38974de1d847bf5e8506d9b6bd2ae6e2c2c1908eda761bdf5ce2201221d252ea8fa59726da2be612220ba6917871157a7fb0913e99038c7826825da15b4d0381c86db5f042968b3fa4ec65b7dc1bd129cfd1ca238e230f2c504121cba631c0518741a54e1f156c1067ae8d1f50048980453d8e42b99d16e8dfe7506d3034aaf115ed92f9c2d6f0d058fb092688c062e189a2d9578a7d770240da9e1a998968ee3bd71f834945397c687262478364db8e764faadf13c427631277c6a301cc914574812a062a9dfd938de8a796131cea623d859d937b72d4b919d27c3a25c7dc8251e56917acb4f09533b1f5815bad3975b5c6fc252009101be2f37f0d979352a17be068497b6d55f42d63f0bf8b3213ce7914d7e781fb16586c88c2a7dda38688bec101946da6be714fe79d6e89a3cdaff0f9bd123d88d31a9bc4d08922067148610f8863e58172c57741531a40f7c9b190eb0a4a7c07c7662c0ab005d13e8e573ab1fe5517bc516f5e3fe0585a157ee1c29483d2461a0aade94a0fdca69c7d1d520606d4e6c85f8db427a34e2ea58fb8632404abd673f38612fc667397f437de810174979427137530a40874db87856deb57db04d50fe4640ec08239cb988bcf39dbf7a660c0d659a99c6014e339026e060bb44ffc79ecc1ba1ce0270868a9164a0ed906416a2151fc90410b498acdd9c33aa57b912809395f964b843b36432207061cf80ad1d022db55c57285e0c4fd5b963c8b0417fe16b6d8203ac9002fb9bdae5c9681834afa25fbc70ee5dfa55703fc7e7a0844e63cd30a9bd1dad17fc400a097e74ce7e2a365122175be320a8dcc48a65f9803019ae2b51e7e7fc6c244d9c67f35f6dfd9f55e42f7158445b498777cf66899fcb880ef9354032ce5999e351229800db2c42fe88822c4ea110b90be5f2a220355c6370f5b610c5384db3c15ce4dd2bbd1079cd6a55592b4624c2eb64572bab2134683ed5055f842b9a1b56d56ff4b6068cdc736415c977c2316dcb1d28088623c4d8a80debfce6e0336f426746649e55e64673e9a218d568b764c2d8d491389dc82ebc11cacc82d121d76613587c2197d78e08b66c8c88d780af3f399495655da81cac4e8132043aa91ea284fd861cc9224f41067a1e1bb2c5fedc2bc60c43720970630acc8c04a48f018b1b93a93cd2e4623838e38d9761d763901277b514378d68b718f58514d7807808000ffe53223a169555ed97e8805007791d826ec30f84684fba902143dedffd343d51456d234a3ecdc73fdacf77505390f5d0c6a1a542a7ed3b367df7bcbbffc1e224250f6efb8586edd38b7aaeddfb1afb22e94afafb9512720059fc39079dc53e90eb95f42139c165cbd6c0b6a81885ead99f0001811dd228d0f058a76b31ad16f39bdec866fd00e80aa34616288d8217c6ff8c47f1a30baebab0f304344a0bbbef615f45db7101d51fd56aea2f8244ad67a51fc8f3368b0dfa8320d992da39a0cb10d14e9b9efe804195c07a46217a82c0fcaab60e21c0c496c65d29129e10f711a08a37c155d9ce065a0c8242ba3a29638afba14e37a61d936e4ff2d0a10da2f54eafa439772280055c18d4cd3337086a57a9473447bccc2c85a2785a6b410c41770a13498d0efda9d3b9ddfe1203dcc147fc1bfe9ee4ea840a1b69f94baaab2569bda21dd9ce1bb325fe5ee10f0738ba0c9b20c0b3fa59a69f3f25df4d4737d95141fa5e141ce6c31ddcaa5322bdcff7c741076899169e6669b0156ee2160bb6afb8042b74b962dd696ca596651195c02912d2a7cd1d418f72c455dbb9b60bc0bd7403a4bfae08c5c8388388d929664401d7406cef2b5603696bd92a05403e6548b54ca8cb16d07a783955bb35559bb2b8829c7e9079de91a1dd4320313da99245343845392a665de46516a7d4b851d8419991aa5f93cc60c8c58eeff19295c4a2f5be1387bdeb9373b12a3009f5b142eb42e06e6e3ce6c0d64cffe1cf416c1286b417e64582b276d21dc5f7d10b89cf513119c8dec97d23c9e397286eb7fc50493943e2181c062ef400659e9d21b3ed110dc70df9e0a6e1c2aa86372f1a2c759ca031a1985155ebc37f742ab5ca0c0c57605bfd2b3d9482a52fb0cb579d29022663f88fa15d179809c8313af3ebe5b5fb4e31edbe11f8b206f6b86652756fcffffff4b608ae1e92f212cdf4d9394a1ae0dab8ffb489e1cd83f31a5fef95a14cdaff5257ad923643f679ef53c403b1fa024fb785a77059b0e46e95e6a4dd0a9b605b2a42debee312266d42f8369ac8d2f2996171295e3f8d504b0d207f5d4f43a06d3479b2789d75c4093de311b5de30e863406e0e1538d09a23cccb1b0da22bd448ba08a4e468b7d8c90ab5524f9268da6e4d9182747ba5e2cca4a239d43589c58681019cec4ea9a7d1a3df20714e8892d66835413addac669ce69c91fe92a4113d8007bde96bbc8c07396a14858002097a44af30769907d953c29e72fda7c8985c4123141ca3ca57ae78492eedf6e0e0f7943a3283e7350daa044f91a9a8e44f6a943a02c24d0f8b3d8c1b592a52659405416278d74a477b9b0f0f061953c1e3d79cc6056afd89d74cf51d2c26e354b4da3a9d4435c214803d1296c702a8a64a5c9fbae39f38ad0a731680c69bc3ab44654c8797ff7d09c9faaf7a44a26c93f3e241b59ae4077c46da95d8ef529b970178bf17d1a920cc56bc249cb23d018e1f061029daf43e6620bdf5cd2121ebe98c2615900f69ac29d4ad50e444c230bcec9cffa214a7dd13d7e4660ffd778735194f93fa993c34b7c65b84362310d54285a7ed3bb66965816cb9d41bddca622f1842c8e315b2fd8f92f77ad46cb82f09f06fa2ba3e5827eec70a6e9fcac038b799fadf0653dc3f5e7008a4625f4fc77e2a7924d8dd2639646c5c803ca0206d30e7923284d39b375126df3d5399a7b9745f0a477860461770247f083861d4ea0650d6eecf3d29205d229b303ba6fbe2d9dd109b64566f7d97e6b1f726e2038c5c170b481d0994e51415c2b7ab1c5bda0f67d3dd3f8e78686288b3398b66c1572858ad41a5b1bc165ee0b5fa7de0da33778a2f97d418e8f6d96d361bbd5fad293e8d7682f5aa31ee733f0d80c704218e9987b4a7da02fea67aa6237a45de57f14518b3bb6f8752127b72e9af8fc0e254f2ab0f8dd27445670c839de87e5d334cab5fa1ba98ea0c52ad216825f300e28fbc0037727af6dc143d3e1baeb3cc2840253b6753be786a079ca4a5ce54ac637968e7a83078847fa86ac405ec160af12f676f48d7b4384ec0a7da3edd8dbf25363daad6709c44248a801dcb1a1d48a878444098056c810b08fabcf1173fde9d913e1875b417dd42c2693f5f801b827ccccde1d8f5dd98baa6078c1ace00fdbd2c098a4f880c4a81b1b9ba76fab373ecc72339aab8b06f0991151c2d4f6f991af6d094032be5c3342592d18f7ccca3da3cdf006d2cc46dd002043e0858cdfacd7b6703f99e7936142c5c7cf9d7c8cd0029ec70a84ceea54fcb5c46ce6d9670ca98cffba522a366505ec3e82ca1e078a08966efd5a240e72ea150f62a67ccb751382bd85fd19a220ae197b2a64c47a7f5c909d3fd95254b63dd0c7d7275f72346acfbcff5926f12240b0e9a606999a8bef4989975573c658b2e55b9c5d5bb9568ccb66e38d7561e1431ba812cd5695865fe373cf868371bbe4671b931c3f5af3a57dc08c0af61d4b16dff543105a3c54920ababc16440869514a70e252c00cb67493de00c86daff1ced8a1154511fa2e9702c09219afe7b25dbab23031edc25a80e7159c21c0d1829f0614d727a3234d8fd77714012224e9e53454ac55e8e277fa373d83992f80cec0e42eeb598b323ceebb1b029e06140a6c6fbfab88f53fcd0e80427b12388fb0835f1ca0fef4360fe609a08e58381c8f90615b375049bd000a6aadd27fea2667c94a35bccb22c8c9f9d1c1cf07c5c10a4677aa991538370f6119c36d9ccbd224c89c096f169d2fa266090f6c3bb71b81c53554faea23ece6f39d1bc482c7250e7c3249b9e4a1f6d7ad4c18d956818cac00aaaa0bad9f3fafa526affdaf6e3f9ba61d5f8d898e6dc81f394b93dc1000495b387c0980a322cd28aa303c89011096b4213576a21269b3522e68299578381d20a227484bdccc0d404765a4f9ff2cfa53f596b8a75df7f1f0747e353a60772a6e7a5c22b101cd913930e3f980a8b2dae641223a9a7b11a036d79a4eb966b91826039af303fa88201eba37132a377251a7c84c620babb5f34739ab9776fa303c277c6dfe9084406212083f1c515acf06446c0c7188be9bb893bfeca02b297978672ebfe44b9328fd7a57ee22efa728a8c3fca20508c8f9291de1ddbe537c3d54ef33cab82a580169a45bd38fea2aa2a39432115b7fe78cc759e10844f2482d1553a08ac9249df3327df1551e4d10faccdb0b069403e3df964ebb210439d63fdfd30cfa76445b172b281b4499b3fde0e317a9188f4ad3540932858ccc1439ea715d9f3b3c61a2362ecdf8261ceff58e4ab620123488eb8983350890858691e8943da82e892900f9a80613a64ffb8c286c2faede06d143b1338db451decef954c488ce56f7a0f02a7a0b3e701ced1584125f9b1b3421714a418461133ff8fa079b1d597c19456de2cf5174fbd863d476b0393b5fa1be49d07f88dda03f98b9d2ea8150bae2101f6e9a8a8f05cad0857421dc06a55476f3fcc3bbc3cadbacd089c2332b34bf823ac37f7673230aca7f5821d1a0160e84103417c44c781eafd3387b9c1731048552907c98079f210857ae78b3890e0b5f401a99c9b6febd4db62b5a74189d316a5d9160ea822848afad02600548c3adbc6f072f7bba7f73425b4b3b0202bf7301fbe68710268d95861eb1b635a3271872e6fdad19279a2d787c74731f02b63f52a53516689542ebd1b653c89672e6cc801937308ea38fbf290873e151cfeeadc71e23d96cd5342bae1ad066db0bec60d43159c898156c6617507e0d65587ea86b0bdd6d558e8575d16f02a9ee517d6736cc7f953946bc2c5ea0d55fcee509abd3c74b0b758f5c4f961b13f185f653c3bcdd5734f736389690524fbe95de0294250b8adcb2be20e6829dcddece546ed615c1c96df790e76013a33aec1a8b45ad6f38c7ab4b7e93d15e5e9a7850c1349d8e85d9a2903ffbc43a8eb3d99e2900f91ad678b6ab3dc1fd37ae9ebaa26b77a9cc88ba9849345b0946b48c7010cae240b3fd1b403363204cfc5f60ad8a6e6a9b7ce463e87e95267f863b9b5382924b9e83c83a18698d23afd6d84fd43887cc776ffcfc77e8ab9ffc31d8538cea124ca32a814e178f0d925ff89da6814994eeb5706637ab9c60dea3024596f04adacf7e529e847ce5cd068cd9dffb687499e90b64afdd04013809a9b16fb7555f4806a6298b3a441b36f8ebc854f33d1de9535fa28ada83b4bca47ff96cc731b1303419ed11e78ef815c128723a42916dcf61a2a85c3ff72287828b4920f7bc04710c19efd74b041485d1613873e4818b226e574e751561614cdda88d1044a393cc97e5918ae9bf7ffc54638e2617a7a614ac2ed69c68a345a8cd444441e456d6686b5b6299719f7b4fd54be74e74bebf95e0fcd5b631c0a7173956947426caf8165c07c29b61bf2aae48cfd88a00cef5f6f5c304e62bc4b19f8bad6599dc820263cfe96685448c5f1305050cd10cbe472476164151225f62412b24d28307118512ff31d5bb088cca765d4627c997bdc98678a29ae78e4cfe29fcfdc5adc40a318feef7d7b8b642aff3a2b4b2748e2442808588791155675e143c3dac7d3629a7a502d9f81ab578fffa883e47adf729ed4f9b61b6124f99aa17e74040afa0da07624ffeea6f4b08478cf672d46484177bcfdbfbe0ea8ee317889ccc5e6d0954616778a1b60d98e3f495d60a204648dfabef3338f28371d1aa01c7ad7b9747bfb5a954ed506ada512d9b666eb17af99cedf6868bfded8a415ce7baf38931a398ad7d7b353e7816f01d832d8fad16be8f52f12bab85388fa40b342830c6e0a5f0e2ea9933ffd9e30e5935777cdf48d00e07ee5fc6b543120fb6643a740fe185c466133a9ea092913ced7046fe5b6c1848ccd7773ba705856813865f7deed2525a97d9f8a0121f2eb687d9d20da681c80abc21910516c5f670d8b2b60c2bd7d30f03dc5d74d912d86d8b6a80a58f9c84290da603730a3e45b0cbc4b08b2f084ae47109f3602759c8d9d6e3133e7fae97d16f387d4f90cd73ce05da0e12e3afe442b52c2a2b4f22d36192c20b5a49428f41ba0f516c5c16c27bace6e9d32dbe37b2a37605af051f35be2a384828629f28da88cb33e369a25d9f5f7a852d998321e36985e4ac02690d5c88eab459a0e3871ed36384c3cf1c02a52e82f4fbb783aa391b9a255dc93b4a838d0cf0438fb75c8efa99760bfffaf5cb383ea3d8bb63c0c8d8463efca6b9be3ff4beecee62304f43fd91e4fd935a87c1371f7da045a24c28251952e8c6c49607dded5588172a7b80d302d5d85dc737a0a8b6959974dbcfe0e57db052d4ea5eb01ffcfc158ed0cab1289164a6f1efc1340bedcdd259c16e2aa2fa9ca815a744674fa6e5233de7dc5a35cfe89fb4ef56a7848982cf05327747d8357602956ab288282724c269a7a36c7529a9169d8caeeb174dab47e1cb60b1cc59a53fe31a241e2a0d5d0b2ae5d0620d5f98de215857bc5746e2e7156f7811386f03e70dfdf976ad5bac2e9cc0eca38619dc695d764c6df2323ad4807bf63551e5180f9355be93916b25477198485665d1a39e1af56a526f06e3a1883c8680ab19763c85a65df8bfc87e9e2152f5630d6fb86104b2a51451287ecc5055431454cd40196975217bdfa80a67d91a6e3aa80a46e4e58868b58e2ffda5720c5f593e60b005ec9adaf2c04df404aa4abb1ec007f4237495de7d98c1bb1e2ad5f288cf241433011acefb4c68202d50edf66b4fcfd9d7eb3242384603792aff12ac9cc34e0028610710ccdab770608511058d8bc30080a13fcf49dca12b6b366190fb85c0190c4fc1f5e5c4b1a417cc7e362c43a9e7ba026e882d323baef90a7e7ddea0079cf737aa1e1cad21fa9ed4897a90805517f2d684432ae4bb4231db814802d49e5952e7c3acdd04135836ac4c5712056cd5e681c4bef466fa2168c3fb0de2d13e5f5f10ff44e5cf6915308b378ab5490d9000218a04342b9e23fb0df7a23d4dc7cc98e18b98da527bb76a826af91f20d1e3f3085fe0844cf07dddaf1b878d0bc014c50e490e1806ed7d5606ec82f6802d74d965caee9fc79527864d6037dd55e433be81acc3f08782d2d7b17f1732fa53dbdd93560b1c8802450fa4a0b9fba826498666626fbd19c8d042021b6095724b1c6037ad03e781b2c8c8e181533669eef1766b99d66c96226800f95d57eedba16933d10fc2c08a5d3fd2d533a4cdb9442c3759aede696f571a0cc909fa0589ac278de9a3a3ea0976496f98cd990eab8c18ee15dbd3a4e6216c3359a650433b9328a5efafa1c8c954e7b765033aa0828efb7a9849069ec9cffcebb44467b3acfd54daf81e68f379069e4e39328cfd61adc3595dc2ce19fd05b53e87fdf3c99a8e57629c4a23d7e09d79f0c18e671311967092a1b63e6979a8f3a0e4f82348b4ee13494b473bc476fca39cc02ebac92a82aeb7e94c8b87d478952399ad3822fd6916f54c080d4b5c9504d3489e70f4943cad793813878c8bc77473663da93ea610fa00ff55558859687302cbe048a48dd67d456c78a23f2a26ded3c4b2197980e2f7c59b837c4b2a47e657ea5804d2144eaf904e3b61b682287ba9e8dde5657f126bab7dbd96dad317ecfcfc37c65a1e793c374cabc61a419b2f808b2bd688a0d889576bda4d40c6db080be05c5050c6d5e9a4abfb584631b5198add921f787830eaf30c8363ed3e48cc4f3cc669445162a10bd6e3465507a28b5d3aa7d5581366df608ebc7e86a32b506530a26357d664533545ad4bf1242b2fccbe015cc7857598cf4e9620aa3cbe6d770956ba3d1dd271cd8e54090df69fc4ebedebcf2869662fafbf8363d58d358c336bdd8fec0e209983b5d0c5ce0a1f7a99cc520e7a40a4f750ce54291b633d1b5e7bac9532451c54f49992eb3a53e8ff32487e73b232e24189cd0c219c0089fd2839c67f625e020cc9ed9d5cb42dae5a3663598f1aefd0904917cac8c288ab056255eab11cfbc276cda787732c650840cf0852878cab151a4e25ddc43630ad52a84630ce7749275e064fe516e5b141cdf9b01a790d68ac7b68036f14852581e8f9ca86814b5a5d13db08e68b6060d589e36d91c8cea0361cddca416acd1b717f5a83a80b34e4d054451c24a1b62c8d8265d7fc61e4a15a96d14efb7d6a321be9a674f9656e4126ef6ccd982601e1bdc91c533491672dd0ea90b0939ccd96ddea502e71d5e07f4347e73c2811d9ea502a3a745eb5674e335b3c6bd035d1b161c0b8083047d69b5fea312ded572aa79992ddabfef4917261d3abc6625adfff71db0d3c39b12407fe6da1624b000390b13a8dd007e491b43d05d1836778cc8a91f2397a8ed15f689ecd35988c81d8d2718816235804c95204440af269e091a069c741806a018cf3077f8275b585b80a9fddb4e6012c5716dd97ed072c1ec3247b34d57b131ab84d08705949707028ce814c609f0462b9caff0832a93c534485edc1157a0fbc853c64d767a9ec8026cc4280e60404f78e2470b932e9c07a13a21eff03cd75fad73b022c0da49a0360c2042edf70d989201db6aa21f1f95f131bfe63fba2a9a9d2446c2f5b96a91dc4e9299c41b3b1fda011dbedf25a40ba9a4a970faffac31a4afd403d2b9c992e9e3b798996e9f03046ef30297c84b02e9b8fd57552ab8653a823c56a8244c9549dbbceb53bb9fab21b60a88dbd7c1d6d3032e18a73bbfeb5ea6e361581a8030c651926f10fecc91de8a144e82049007fec441824e636aa36448c07e619f146dfcfb262ac590566419e8062ddb1251b31180c2085df7115bc051c626685809b42eda01de37b72f3d901bb7330e394f1d31d84f4350b63dd7d61ec1c83e734e5faf2596f62ae00d96edfd699fdb6a121794eb0898ff3a02afaf5de56c21e87aa2e3d3244e9565bbbd79da574185a6aebc4a2dfc068a9287e5b4a47988987e1dca434494922e0c4a77a86d3fd786b717d4ae16cad535320ce794388acb27fc9e4fbe66f07bee2f5a00dd2194ce40ad33d8f2ea5361d994e36cecef97859390defd3e91c0da8493fd4c71447d544ee491998322a35a814a8583b7b1bf8aca560d157465e99d6d7c90ec15185491c43f3349cb564fa95bc160f1f34756b8bc9525a57a2c563c265fb6ff011b0103c0945f93156dc2817ef57d0bdf98c71ab44318b521ae71327d34680f0972c7e230441ad119c7f62cfe26efd68cb2a138202b6ec10f41c673f06154174c485e8ec4a1a331b448eaa45e5b65c50e999351a4bd5e63033db6b152488deb6a8ce7db637c68e94f14256952c227e6c3f415781c71064cc02008140a13774eea34bad8768417ce86407f66202a60e9c445961f4777573101cae86b636b7809b34dadadf800ceaecb62a58354bb0600b4a2d3b2fe22b9bf7b9d5b936fe7b14792d53bbf1275d795fbb587356c89661ca29021ae4d8b4b9ee2ae9f77177f37fa31f40693f9080525199f8a49fa9ab719f2d90660dbbe9d26c93d48acae54f9593d5368c22b6a117e88366b496bf264a7a6c6af613146a00cdd6c1bfacff2db6da18d3cdac881adc22763365a22dba3cf45a372deae9aa6cd86b5ff6410d9e8b4f171c45b0360ba3d06094b72b6d85344134c4fec52b59a0229e7903070a0a8d3cc0164584a958396e6397565f83f9024767c58b4cb2d2242437d93c124b151f203788e8f015e362cafcfce44436c3c56d064c00d72c15072ee45ba8b3cd79462c27d4416aaf651d5d5516f14a9a9eb1dda1b88016c8a40214047410adfc72ec6db000295d3f09514c316aadc475c9cd032959e76579c045ed9523cb6cdae459af81ef408b65432e35295dd963d6cc6c094aa8ce0fed1f53b78727d914341b4c7537cdc483194debf2c6073d1454ea750ee3ce39b39757af8ed54df8e1ae65348cd6942e1b68ca5b9c592af95c903ccbdcfeab4c612867e8cabe6603d2a52e032fce987ab491572dca356ecb71c1feafa608981a0009162d997a515e6136e2bb23cdc59c1cf9614ceb515d7d278c50b6e21365faa7b8cc03c39361e72000b6cc7afa9390fa8c7dfc7f4800e4a945ba6c07415a3900dfc7e06d5c56a63f214b59f39b24f301994ca6972c6f23c32e65ee5dffe3992f4e2663e0f31e0ad876dbda97b1f97a441adc58ec39c859c73f9b447c0773361211c381e369a1961592582187c74ac3305e2552a616f816e6b69a9966f5c74210f42d5ba88251dafc665116ba804cb22b89bb4e443c89b0cb5b306c071b23d70f908f19a640c9bb72c3b0ca07f78c039ddd649c2cd584156519160a45f7a0e5c5c9537224ba93782d53115eff1d51f88eddb255905abf78c1a47b9be37fc5b706621c8b0e6bc2450891e981e25e4f2cefa4d869a0cc84a488a2ddc2f9f31aec7550bdb68f04f1c32d59f1c707cb5c8ec7e13666ca554b4511b270ec630f51885ed574f96adb30b59950eac4bc464ad6d26f53d736ca02e1829e2efa1638df9b01fe5131b7320e90cb25c331ff881ca1204e0f0afa63f89ec746535dcdc8be77b0910e67e410e067c11cf70ec591e789315dfe9604e9cdc2a1e79d124f11c7854ef700f7743209c3a2c4987684b9af5419819abeb04a1eb28e8a148b3763aa800f5949168a8220113520850a574f9f0557a97437929a1c7a21679aed31a161405b7f444c8a5dc4c91626d8173a79d85d1979dcd5cb464e0ea4957ba6d6a54b215782dc1531b18a6a81bc0bf1436cc4ba41e56304ba86cc29c9cca55e19a80cf71aa5539225f2bb0e5f834a93c4e93ecadfea3a504cf472f48f49cf47fd8195c3b63521d3f3cbda25bbca368d15d129a64fdb44a96071cedaa6bdb0e6fbed9da397c5f0625d2e2d4bd29256a4961f51425f2b4f08a14626ae22e633855654effd34343c61ee3682eacbf54be07a74cb75f72cbda84420aaa52b3cce890e0eee1b71edba9ac9fb9a0e2649a62b6f4b7bda4fb771a3b447069069506303b0181540cc0b75da9cf15bc0a11d7f7431917cccdbe5387fc557e4417aa03c87cacda002ee220200bae3433292858ab10a7ada4d9765c2ccc633e6446404bc8e9cb2f7e0e0e3b9bc99c003fbd18b830f4b513c5165b769b565bde9e43451726e7a2d17137a9ee53e50fe56cff246740f425a6137bfc237b539334d3f0b5fb680571a54c03e4d9432f045277153cd8509aeefb9eb2307cd6157197534df5e623c9d264e30041c04ee21764a7dd8c6f2d16c7176c80cd640127e15a912a5eee5f0424ba935e7971a7c5070f0a5185012289813c0801b1f428106e20194449f9eea24834ac4fa77925d9ae84a81e4850bc939a7ab69abba80170e3a2cbddfd8930848bb1e271cbd8094af65f2c2b4d0cf96a52c04dab465138eeb65ccde5cb247ba03b340e4d34a7d76e60cdac595b57add5dbb3b621e0cb1eb86cbcb8660bd6fcec3e84075dc569a9407af5c32d4048dd05e66e50fbb9b9dba076f6133988fd2c6b8809b7f236f0c7ea977e28f2e2420c9841c94cfd03f16c759b84460c358e41821ac2c3a96e4edc9451f7db5a8fe95aec423a2a86068ba0a7db179b4de5f8cb9508c8acc4db6e8f3b6a881735cd9151ea448e501a31b711cfde02121e1a57d393c5da5b9ae2884699fa482d21b274fe6968c02813b92527d40c6dd7ce90170fd620a49121776b35c25a45664061c979cb829c5c70c76793f276c4781f00989f3bcb43864bb13e10ce8818e9805220ecaef35210d8eb4183df6df2d6190bb7b292a32ea24f3e79184a74f6fbd29da8c8ae222163af4e358e7d1d0f299fbe33cfe8b88a954671e834be3697150f6d0cb3498262a9ef4b7d0c2212dda64845264ac9046e3110a91efd0dec92f87591489fb1b0c5a048c1438a5fabf21609578c5dfd61fd17f624154c536ee9448a00ac79da15cc9d25c5ce68943e74bff203f87e0819ec40be58fece5415ad4639ddbaa2a5bfc172f569b7555da4c4338b47d2347ce5ae19d44d243e1800f1f884941e8975178bd9d0d1d1adf8b4f89885da9578a46e0596d041312d921e1b1a44c5730cd638edd5ceb5154573460548a9d92690ab8578cf4d729931a0b056b4d16cacb673a02fcd2c8763b8929c5c080116896a0d44177d3f00d0d69c9d0a30f8dde4730539c292aa8630a8d312a9a5ad8c818343673bcab3191d6c033204882a0a50718eee5540f990b29b351b5e1766763bcd412da84eec756578bab80652bdf982e6a1a4dc6a8aa0e41157ed68ea8aa31ce880988d5070894aea362bc5a0d7320023ec2c32e39de4434b19d42d68085baf65de65a3824172ce8f32d131a80a133e55d9005e41cd21ba7559f35061f5f1512ba1ff8ed1cec1e8a0cc02700605567bc8b3adf5a44dba821d3ee52c888402f767cd779546f28fc88411972678e3b3a464048488d71bbaab05a7bc74701f2d2c35e119ea0ac212243bab2c5d24ad12ac42552c08de47ff9f97021132dfad65b970b588f2238e78484757810c04f56832354143b84e2cb32bce78d5bf02a3a7e3351c4193ae933d885a569e8f72993b8b57d4607ac2036ccfd6b2469c797532ca60d51559988e10fdc284e42272ea9f23c2da98221234c57ec9009d7f104ee81029db9726c0165fe2703993c9132f990b6bc2abfe8f5575df19dce15ddf25210737295728e214265c534206a43de5cf731340a3c14bac3b6ff52c508b21fe67129741f4679e2c89d9cf7ec1519c480249395f5ac683cf79e7855ab4c781d6bea91a9553782a915113f5c534e2a622d3e1a60571c9a5a8a59560d5dc26277f8465003121935d74cf03dfa9509333bbab7b314bc0a9dfbaee4ca00c6113fc0443f6fdc38987ffbe0d22349f749b8b03402fc7af0ce42ad419c156f1b304ee895f22ee879388ac0cb289656fceaf36a017cb58fdb6d4d50796fb8411558c4e672334bf9cb28a6cda6cc604f8213b8b2c1c65c90407e400d7cfa47cbe2e3980cc8a9aeca7a23f356651ef0344c5a79a882191af114b5dbe384c26e042cb7905bee51fcc7cc6d7bc8fa494ab19664fed46151f83c6eb732817b04710a746b40e61a77c9067092e9e065ab292aacb03d48d650935fab43fa80261b29a2039a2cfc42e6292704c8c5a5dcaff806985a3706446f40772bb030d149d08ae41066ec96785222cd4bee86b16428d8287d9f1e4d8eb4568380ab665b379a58545a5dffa52fd2c39e016e1919fd268d25e2cb0206236253300beee38965ebfc6f340ba75df89bb1ad5856ec15cb7cec82b2109860b6c6d08eea85dd9ee37c10aa0be037c009a1ccfa68a3a90eb5983b27bbae261f408ec80dd722b19e5ed3a967c59d37ab54106a29b7c84b45530a04e0d0ac6ecb390fa146d1419a65a0d754e62eea2628036c0209d0c537976632b7c8cbbb0057246c95aa6c48fa5b8f6af5f6d9f8f839492263f3a15031770a6ee74063426efa6f39f04d4a9b61713be8617d29a0ed290a2922a1fb1d28fe0ff794c9b77c4b5d9903cd6ebaf5d9cb7aacd37e0a88ca9936db6534a1a11f320b46676d2d1f63e1549faaae4a2a4812c35e5c247188951729e882d4ea73ea22a9fb25213bc7eeeb0caff25020c9106a8e6d5dda05374c70dce0f643e84cff0377a3fcb354f920d6d0844321f1a4dc2dd0d2d2ea6aedc3c6be55ba311de31d813a182b40d6311940abb59f9686f90260bae6409374b56ecb7ff60a42a4a24c2b8de19f4a385a30c185fa0a26a90bb91cbdaa90f110d76cb3080ca6b981c9921f18e6855419c73fba4aa3710ce40a004d9e06ab99126c1492b115b79a8677c8781d9525fc5394b20e9e3d698dc691d8cadb0cf1a3da57116148ad3679e9458e391bbf8b3fd48e9299dbc929910a25b3d932f424ced4c6103d63e3f406fb0827515c92d120a5a4accb5376256ff7357767e60cf9403c72478fe01df02e5467f7bb906804162d42f9653783e9d69205a4fd3d455150ca29ad2ff89b313780521f790988aa047974af682a8b849dbb1b38a99b0b8b3ee86c0864557c2af5ee2b0fb88b8aaca5f273a7bc5f80029354c61918f76ad890e301e0aaab0e67af2bbdd958dd5b25338ebaaaec6b250f94917e31f44961b541e69d8571b05a5d1d1382cbf5f07a1284f85e64f9e2a3a5c547a766ef389126544bd0dd011696ab206d4a76fa0ddbc53020e4c7176d0d62adc1a4fd3957083c83ebafed1fb415fe16d7867ee0a20cae874f3b8d889019a7d767328f35e3668c4164c11ecbb8fe90edbd65dc8ee5e3795bda8ca9c4c451699087cb50b3dbe9413bff6b255d1a821d91c9cd05876cea6d21c04accd333bd43d2bf1594564991ffcd8c88a167f14a0610dd4f1d2124e19a09516f45ecf621f77dcd4d8dc83e1d86e981bf14d7e71b52417dad4acde68025a84900192830389b167d9b3fd3b6ea56b6a5769b605a1e1e152574480b5f7713b2bc8c570e88965743f92e6e082a661b35776d027de887b0d523c17c3dbac3eacbf42e7ab373465edf4dde61d68ec7f9c8a085b7ad9387acc085396144070298821ca79f70b3691baf09bdd92114b053ed8c6df623861d7334406efcbd6653b9a2fe17061a01b60a61f1dad5ffb8b152cb1d357c7d9f1e92f9e956afc386c9da5777bd4a3d8ed484e11ca0c14a681498ca42d04cbcb1c61bf2af0b2422c2ea1e80c466548c3ef4cae9d8722d50c3c3491f65daf55bd135e964ed1a63eb979b46b64d84a46a5fe3be21668a064de88847e0de9ddc52ed589a0a6b57ca4adcc86816495c32963a3acac3d5b4da1a5574f225a35f8e87d481b873f63310fd8c4b9b5a2d73699ad95f6d2063c7767769cef52fb2c09c6609ab6a1646810231d7b06b7d67ca652a823ab12801978b44bc4a6c5a890cc5f51dc806c5eda3d2096c9915c9a2e64a14c5a6a741de6c0a76fb1b78b78699d020b689b38e98b0f208aca84e828a27084bc73966e219df5a601554a6aa4ea00a2ea8aa0da5c24aaadb04ee9d4c0410b072604cb9a662deea2ca97f115732ca79e535083eca84c3f62a5fc33aaa0c71dcdc809cd3b914c4ca7069441c3dc437cfde6215360e72c8c63aa8c1fb7fce813138b7a2f673ba55447622af2c5e3594d641a4011781853ea12b919658eb34b22b3b01bd4ce0c560c8420037876664d61586708cf67e7ac284ccfaa03ca63faa74796f78c5ad1fe540fa3ca7a1af455f2d7e3f6d1f6d7b9647592f48a1934f214d51585652236f520a4f11c1c286e754c2a6d9c2ba2771b2f9a1270df11951190e44ef642b5b06b040a473a73590a710fc7a82610a167cb4835d69c11541fc4717eb4e52ab705a51cc352a4852a8125e2d7a52160970d20c70562d999b7e76d4da56cb45ee17b1fa6f4c86966ec0c74597163b97f004aa85207cfd43bb32e475d712f99352892952806b5a08d234f1c9fa92212cfd4066ee9689bea60bece8d7fc882e1a4cc818134cb7271537316b1543798b64606e3a6c7515501dc5cb89e865dc6f646b706ca3460f319597eff4a523a8cadd6012ff37a2c2371f44985dd1855163d94659523d48313ccbce6618255b1fb149f5e6dd9b3296e125d5a7c640200e96eedb072b84b9e2c5e8b32aeb307e8ba48067627874e0de73e246abdba1297d4d61f623076dfa92e73e285e60046ba5aa588b8d7705ca9ec8a126264f931c281a594337400d06adc6792636661ac088d65bfc0e12e77616700701379af5ec883e3a37f200828ee5025c5c87c803ddcc39f38b2e1b5afbf9756a3ca8ae69dc30a83fb2b711ac38af17f2e479eec7ba9fcd6b4c4264c516ea09dc588908b3d447f052d3f25171474a00e1c5db0cc0fa7dc7b6f50735349b1b904f674038491d1ffd4b59ab6b13809df649e61a6a44e2f305f4634080f7016d938b93adc52f7ed5f643463280a20352a87ebe6e08962f7f0d2e706cbb940b822392e7ff94bc2ad2b477c0a4460aa0a5bda7afbd316ce54db12cb10a9655bc280b6c74876af21b28c701f670eaad482250408a949786a538fdd177c383d8dc86d0432b03d92db76640144df479d4acdd8d798774d78a773dd67786cdf5fa9a41c104c94eaa50d05d44efe13509ac7422c8e87a43741e7d0b62dc6430b8d9bd48929d6ddfa529ad3733c287d2da0faf2127afaa53529d0d0cd0032e4de4b51c14d0abbc16c139a5d122518df4b8ad1af50b47e71917f6a13af1102a5730d528ecb4875401862f44c5a2ed3ccfb9a61df4f459429628e724321704f2e67ccec07231e7f493e42a670268283e793b8110fac4e40b7f53446ae0897aae058f1a0ac7f48aa6a5d0c305126c81b8459427045837f3a3d61526bdb0024a5bcbd9e0a381c72501ee178876dee81f90e1581040329c4503d2447b0c4014790102b84d326681b9d6786fc878eccea565c13a40bae72e2f461ada6a40c57320e07eb31da129dd69848cc746bf7f1ab363d4c463c32ff128d1ecc6dd5461cf1b0ff086f13a527a7cd11151eef286666db94d6a9f833ee5f31d721dfb25ffd5cab2d9202b47942307c8ec3db1c27fb4dbf4599d5027aa8ee488150bf6989fa070baac64c4fc89d0fc39604e8806dd27d07dc577bdcc7f2774f8ebe39ac2a6a8dda950718406f77bb1b3ee208ad0c1ee3d52b8afb9eee24226bde55189f5f54e27e2841903515221f3a27b86842ab97540ce636fa89fd0b98f058535165623645eafd2e04ee758bc57f89aa9bcd4d16683a38027f8de5c8d85e1ffd5bed42786575058a742cfe94b52d279c6840168ce1bab9b714f25d1f2efee636f194271d9b1bc486b36f1afc7f6bbca29640714812acc9b06b72f995ff0e6318f4c16dfe6071c96d056adc1f04bf84ecd1fba2885688787d7f1aec6a97e91533362696cca348a099df132298443104bf8d2fc9d8904ea80352857665c909b886a7e405fc92bed9e9798c1c0b18f5bc0d185060ce06ffce11608f5a8850dba3238b962d9a003491e2b561b814f5ea60d8beb34ce587c7336dcde7b2e7ab5290ff17882b50f15af5410db5ae19088c1ace856f4a68cdf9d8f84e16b5fa5dd69c1568348a0f623e6a3380ddc3a7864b4aa0230aaef5716a73cea4ce1bd0224c25ef18e701cc808d71c5c5646edbc47a5d97989d18e6db1c4b9925575dd4a1b7eab5a381a013250c195cc749399fd4277ae9ec4977efb67210e6119d67009f7e370e408c350a2586a89b0c04b4e7af35cc1f10cdae3e9bf0afb8582bf013f35f4caef7bbd68a55dc701406801c95718d583107a936fb2208e29ec968a7d74d12cf65bab294b78aa53cef04fd0f8b5a740df988ebb9109efab9f2231658c83091cdac474120b8368f8f0c2df2c4493f1748fc2907af91013d97d8435ec23f0c6bade0698e6fa65ba02a75e090012190b2674544937324002bdd57536925dc03f901a2d30d258eca3688ffe15208e8322f9877624e31aded9dfd8149d34624ed34a1625b88a2799534268135a05e0bfdaf06520d519a8a46497ff45b800ed82a77f631ad4786a2896c9e6d2c99efe00741ae682469b71cd383e69457cdc0adadfdf2810dc56acd4894068cafd45fe7abb37a2974aae4156b45bdd400ab6e521090f65355ef6375e5ace7467817b89bcb0cff8adc5020cafc0e2b4750bcfb24bb63421171d8657763ac0fc030274abf00c1024fb664e161305c8cf8a662439d016dec82356447a50998e81583752b3ea7e34fe2ad3b95540d008a15035aac1f711c4c40568e76e0ef90620b1894c563847ff37c75370725c8a251b3d911a68a9a08447530d1b36b8a16ead2da35da4405a580b42e781fb14de9c833e8b1b46217daa97ffa6604767d441f8a4a07bf10b2c81511d5bdd671715d493c59e4483e68b42234001e3740e9fc4a8b5c96e49a6f787929cd35c33b834f462f48a0682a700fc94bf13a7156490cf51063667d4676e6ac7f005d30a5a861c4cdaccbc59d0aa32c325109f4dada85eb1a0c6c19edd726cac9af66607d21c6b97778ef12c0dc9a29559f0a10ac5d4c580acc969f10a8ca1334d56df5b7dcc5e3d332926432847c319d042767d6c294d2c676fe431044e455f04a554dbc5a8d6a4bff7c164f9ea15dcc8f7dff4aa5c34462c208e2e84dc9b482b253c128702a73ebeb64b550aec45ead161430b7cdc055e04060414afb5ac0cf88e94836583f77f191022294f47626e030e5cc847aeb85428b7626c04b57a372873f14f1b723cfe34d9543fca1372a17111db3981cd0552defc50f5850cc0af5a18016768e002b6538bd1850099c729b379c47d363c801c2c6e8af46a326718e26603c928dc6dc0162f25022cdd72b82681ea8dd2b8147ed55a7d3f20cc5bacadc4249a805bd422eaaa8589a0cfa5e0321155218cbd64e29ac9bda47884a0eab4459524fd533a68554c645ca8ab60787ac935ec325366d92b6b57128f79a3212bbe370e07e5d87d2080e78ec9edc76d4ce6f97d67f43f1a9214894e7135a3304ae17fc5d8ec48e305e94f6cf9052150501c0380dede13ed1f644ab21d2d51144068a68afbc1279db9ab454e41b01838556b054a58e3e40794a9e57ecd21de940a7e2d1eda3fe86cd6e666bd654a2b955cac18c8d2dcb1628fd132e89eee4319ca03c3e86de021b63ab83a074f52e56b63d601c6516a918803496ec2eda53e57d02cf306bc63cfe749c38d49ff3cdc84a86d5992d03936ec2232b2d0ceaa483efb6c5a4b2be9bdc1767d3f76974409caa309b1b4e7dfa23d21b28af598a90cd280ed8a5b03479caadfb10613abcc531c56294a2428a51f25e36d5f9d4c13d920f571f63a2a7aaf427d7ad93e2d2f570a958ab43d024676dfeb584d8016cc636aea9b5d5c2bdc280054c19913fbd04d69512706e29525751852bc813d34f2fa8a6d3debc81e3d6893a07bdecb964ef029a99df7274ba3e8cbc8de7d57d92ef3b0b5b31442160a3a69718f306b856d2a674f5d615e9c8900120941d016679784b2f233263932ec1c91f9466ed6590826e8c0a8c8df5ff4f05fb2d549e3ed973afa92ec9a780f8d2664b5e431f10c68350a64c4a2d2bea03a1eeb4285e2ab18aba1e60b45bc43ea230be2a0eb50b9f2a7572c9c85b0d5480eec0f23e5b4cb370153f461aae85a0a830a0b82f4b1d264025cd9032d43a6064b72297b2f67b1191a8e04fb159613ba8381828268a275863fa19f3ae8c35ef00a4faab600ab7cea034ead7bc6bf032ff02e9db355f1fe1a6633ba9cbf522df590907e31dd58818de402500fdb0313f5a1ca540132c364948d89be8dbd27f3ed56a70bc73270096c6fc16c233cdd1b9dd12cedd24223f9747b5152e71bceadb4d87a9087be5460740e6656c56fa67002564ab6ff2460526c9e28ed7af36fa750f08b65c622ef600a90dbbe290bb650e568fcec65b9cb6295f880dfb621b65d4534e7779f061ad09e0ec7a50798e5b846bb0c26a4305453637c7d6226e2564e825bd95823883100a8a42376b7a6f0c1be7e999c0dbf0a6a994170e254c4a8da751b0b4dd79015dc5aab3ea4a023fe82f5768bde4028568054047284d588128ad41d6411ef7866c348f31ea03859231a007f58e774a37a8e2184fd13f113b31e7cf8cbc23fdd1226cd1f0b67f216150bc7fb683e411db28227d9d388ebbc31d3cc4c8cebaa0e57197c106ef10278617f28e3f79ccdcd7e668740b07f44a1275c1e186cc74fe53768fc5440b43c407f9548689968895f00aee887c84ba201675246d0ee1a45f8977282e2de010d3c8081f5ff1f6f87d99d01feebdf7c41d591f806217a6d4435ddecc9216b5394a31cf2273d7c36a1170c03f97773afa71e1747a2c53499e82e4ae5c05ec548b250c4ab2d476ad7a6d4fa74978316983ba262ea0b68631b8091c2f91f5d3cd35202285cd13926318a7228aac483a2e5270249ac28c20c324cf790c3eae8eb4f183c26a4289631300ce4b1962282fdfb2013246b242b820fa761bdf9e66d1de53800cd75fd8d8233dd4e511e26b94ad253a5ed9ea4eb20e8c10e03f63ba9e42c3840a7a0122a431a366dc803d48f4673ee76c1993d460df21316cc4987faedc5c9289e4ad7525f0cb6dbdd8fb7a84c3a0b6723478ee68c67d4c8bc7d7489d364ed89b902997bebc124d4b2915a66c60d7f4d75d27199a4f2aa38355f581b1e3b6958e2dfc2fc20b014ac2b9d927f1c294efc71382abe03693fe6f3b1df25490ae60d40a77fa2645868818fe5befe8c2e7065d95f6dff4ed96ca2c33a0aba4d76048ad1e1642c628f7d4c5cd65962d5d48f0002719a52232adf24209e1566ee74cc3b435f3abd95046267c65bbc694107900b8c1da4e829ce1eed0f090ee5c37ff683453df99304f2bd4c6fe617b99cee29eadefab543a09597006ee59d9680c4553175c2d6c265ddb293c29445bf42cd14b0c84b7bf2d6b641ebd2ef6889e66914394412b637c9c6c581bb8267a18523acb99acc5f0760a7338a4faa3fb5d99367481dc0df6ad4e6b2a5358f0ac18db2aba45397d1ef8508352bc8d8a0af58832b1731a67708f4fd42694e674405077a7119c7a565cb3d54042ed9d1fc6143252bd355af74665ad96639da11754dbb8c2ef468280b454a2fe15fe659efa1d9cb6d5cb306d0110fea2eb849b8b6bf9a0e20924e0461dba0c7f3fc90ebb4891a5c2cdc6ad27288d7e7b961515c83526486187ba6e4ec1fe6073315a8659e3a88f88964178e98a0532fd03a31c47a968fc6d8fc1fb1fcf16499a498f0f89ff15255c5581818b71e206d60a7b7a23d8782f8e685ddc8d75d2e6c73e72606b8c96123388909eb37ab895c749e5a2b7f638c157eedf248ffe9c00e57c0aba43faa3fa29905a5ca02d131879543378845ced23207d15cafe4767c4bba4fe0c7677f106cc4c72afe509dbc25b6314e366273054c5d079a8b2c75638915669f215890de28af7fd0a8b4924c13d850b214a4ff552454072b2de9023740938cf45f89b44a8b9e5e5d2d263a4a5eda0d25e69bb2a8721376d24ad2323c1ab9ddad4982d08ae28415cda3ed4b83bfd309a031e1741e3ca0266b34f6fbd8bb52eb9837240d41238b4a5b892a3eff01b6becfd4a1e73a7c1df139a64b9c15445f2b29785b2540383fc611e11a1b3a6603019f707f06332df718719a0c5241e40002c1eb22d7c463387b678e4a982a3093167e712a2ce3b79ea04c31d8b4cd0f73f0399707cc6ba1e1783dac02bb156b83e55368486e78ad1239d186751d30ad6109196d761477dc0f6174868aecc1a96db2b34f710e9b7802e9c430c0b4497ecd85387496edf889cce1040edb4426d055d749c4cb61d5610524a155de15638f1628bc0be15a9b50eaff445d8eea1cc899cbc311e4da8349643e147acfa46e35e05b9d791834e14b4b22840f6b84ba1285ff2ee1271d770a2187e640a66195e7784252e9160233a65a467d7235bd473804c02491a2774a38584aa58d01ea2be13af2593f6bdc3349bcdb2f0b5acc1d334155458a870b73d7565d3170ca3198e8b9260607bd7c833e2c6b63bd422b4608572a7e462465eaab6a730a8146474cc3f88452c5f5322159a28662b571bd934716baab418f4e6f261423615de4c1147955acd621ba71a4acd16499942ac0a56c214760f97e567fcb894e51c480468906fba2250fe907400fadb4bc4709d603fba78d74e5ae00977bad39ae002ad07c3be9d7a42a2f4c28175fbcafb445c26e5c36ef08b6612b1bec441fd5f94325e0b39d58fa2b2e6c15b12a8580762fd8c90408d72383cb251727619e4267a33cb952fdc1c85515a70ba1efb393ad6ba1f727cf55d438ec717199811a5ad65c855b4ef7fc564ae54bb239e71cbafeae34925c44869b51e606aadcbb32b4c8a5889068a0cf43f7705ce6bb14ec2a440e58a953be1dd49b48b2d5a7df22e661748a2072f49bc5d68dfa2bf56d8e081f536e98752ccb2c103f5859d319fa1201b562b9a89bb1df872ce295f14ff33f8e4a6604b7ff6424e2eab18680eb629a296212b8b33421c32ecfcca0c0cbd5ab027a8331a7ecd77ed098e49cd0c58464f7704e4cce7f4863a6ebf1227b1ff2aee64e8948b4c6a0b91ac50fdc0b368c6377add74ed330dd23eac326562b2513aa0768312023a3e780e2cded864e1b946ec8888257349a292db960b0b64fc29849c8d9731eb188865ca3caf1d8c1259245288e523591cc5a5b940306dc552fbc22d547ab5a60412f608492a966285383f7d8bb80f7c8f9d91658617043eef92c177ec12c5ed5cab7d05013396bea9bea311d2c93e4f70c6214ea4c2e43c0c283577f51047c05dda9e871af1c0ab27f30ce11172fa910b979e8813601c098e1d62f793b9e29b12544aa8dd673a24f005b86e3f2a13fec7ffcc9d798630f1da5f85096ebae6faecceef65b5d2fe72c5f4b131360546edb74257d3adbc8d78d39a9edc8c279fa9f5aff97425d8cccea8ee2b7d08d8f657785e7bcac7d55ae15a9fa964f840452046f4ad271aa8d2c74ba4cc71b52ef54a2025fc270f53d6aaa358e866879d2ff713f0550268e85800bd17415c25bbc86eb1e365690ec57ebbb87b52798dbd7eb0232606ed34b780ece0751abd5e7c689c070e1e56a7065d81fd7cfc677d4ef71bec37eeec11e97e9dc9f492bc1765e54b7505264a64e25aae7fcdaa425c85adc3479ff99f58ebc085955c9c7898b7629b0f5c7b675c72b798fb9e3ed382cdaf18dd53074829393d212844f9b79b79d4d0f626e3458aced18f845a89e4cff511a3a1790bed93222faa74188a9c2ae9c05ceee219f359b2bfa0d7f3f582048aa10ecdef927da7de50e0f75dc4fa88e01e43c3b1ce6e1d26aed92b5171fe10e2010af3c3d13a2a4e540edf600410b44b7b3b9d84d461aae73e0e45c5ae7836537cc299447ec99df08518d8d268a4e12be484596f82db80bc0b0dc4fc6c3d6105b8650142e3bd1ec48896c8ba0417c43d1a758b5ca1eb692fadf2c3e3c4810e5ee3794dc75902f4a2ebae9c1b6168a6e6f15bf1f584e4474ff2e8fc8c9d711df37d68e0c8ca2890bd04f05076de6d18b7c19e23bf6ee0fd51b180d25a1cad629faa4e332aeb4970de81f480464dea99f74648062f68cf66bd654f7f73697056f19460dabc0e85c574fc4854f3925bd06351f188b3a235159de1db9e751e8552aed79c325a393a944b2dc282e073c1106a70e5473ab4153490eb6b3901e511a98a4790abe7663a831eeff41bc12bc587aef450b9b466d069e229c16e123a8490760b1d75b19c2787a089f35c4766321223de1d18829398784b615b564ce4710a2dbe70cf415015def490ad281eb83da0e975ec27bdacfd3dafc903d98bac152b66033074db122ace127540e7bb25e8d2583c6f144bf443ec143ffd717f9acd91cd58f9ada879690b44262c482bff355a7f3846f3b02ad26df9b0e8cac427f668a0d26e62c00c8d64ab428c25e8698a994f315d333b8cbaf638c43c2721fce830931f50cdd1bd4b17a18a294d64de4e6ba3c612d3ab3173d2b308a05c827da75489e14397d3a82fcc4503c5f8abb6ce7c49720857d866d18d81716d9ee83a1163fe762649155faa15bde2e577332898c14f8921174652d73196ad8649671066f1fdd16c8ee3141434858e636b7a2df9763457adcd42d7e11621713679363116b6e643e22e5371da7c5b091143038c7b9d7626c3c84ff96f56f58b0440108ee1bf9042b2f30aa3ad3b00ea137c42ca584d7fd92f670432dd9629ce572ff18a8cf75b77960de49a91f7456c65dcc8ed7f8029556bcef560d52ce2a77a73dd635dc7570a7b76ea72850458f43faedc04473f016e9dacb38de709f54bf31284c56a8024a4316c95efc19f6b1d8bfa5af41baec30e998ee9b8996e2238886cac6c06dae504dded397d752f7c9f642d2c8ae6133777ace8fbf6b8dc0d6510fc1f86c11c63cdfb0e34976930340c212b82b14ae2b620d83d73612ba07facf771d94869635c08ce6e8bd352b6ccb1c51d00c344b05c2b8b2c45291bcd5109dc64f2990c5cea4a163bd95983240a4c1de35648ca95cb7ec1f93afa580171c7a522f5285162f271c0faed431199c5400945e3fb5e22cdb4a373ca3f7bb994b83726028f80167ce6646d0a3abf6d95ad34cbdb784b83b99922af34c93a37d21691fe9c7c76d062b65c9391868be3af9417ab71fbad996fcb8ea630eecdf47cd8a26be06f4a7b4ca5952c699ba2bdec065a844e77f7212ec6356fb68851b0676f70d558ea6351a381f7365dc8bd38da8f7708bb8444446d1788e450b4fd743173e4a62081c30e1a86162a2af1ce490be4e1978e0f13794fa6cb04c38711f2f760981d850c89f40920390eae630b87d85947f1ce61fc42f55af46db53cd166d61f4a073b38c308f5f80e64e8e8a470701d7900863bb4e9f532aad3064731a93e1e52971ab1e8f8154e75678c224afcaa4696e3ab23377031be1822a0ca607a21d2c92a355bce836b00d50bfb2baea59f5d519a7fae9d4afce9ba8c0ddef7be5296d55bc89076ea4cee4b1dd6acefa9307137f1d552ee11931e41dcc3fe75dc2071a680d1b14c90448618a322dcca4bd35a8d501dd622482a949fa85e9d52548e92539b34c2a854ac7f7c087c240b400a8ec20829875ce2f6631ff4f22fc899d9d9e40b765bf280305179b6a388e8e5439b8cb828c0038bbcb2770c06d560190935c324dc13a0860a1d70d9c8b120352d30cf78f251cec9176b19ba8f2b48f64b28da7c81cb62f936f47fdaf64b1bb4df1d5f40e90d181df3c2f238a7aad3a7893654235731d542c03cc0ef3e4062837b70dcc51d6eac8ad0b9554b3b6318dbc0c7699abb11370e180cca89d12b2eeac826c1b478961095af47db14b01c9c4b35fbfa54049667a2420a8ff4ae51d6b8ff8b61ba68b770b61db611a8bf7932bd6f8c64769027b75ae1436867de110324f93ac74446b3ca92ff8c4300c14d3d74c0552b3c0fdef7153bb2ce0be98e0772ee9a99f6faf9399aed2d2a1ce94f9ec3615fa2c76a9324c31099377a18a89a49154e28aa903d60a2f7b342664464caa5693bc9a3129ab5954899325a490a6893ffd1c6ec6be36a43f8b8648c0d04ca1abe32b3b19eb1ac3b92e50a9e79a23b107623f0e57ada07b11662eb038ca0d2fe0d5a67415490fc1290baf1a00605e8b334d5d9c466649bbfe5d23d63f91cbed698425a936357fabdda1e07c5644cdb8a26ec77e8793a27c369c53641d46dc8246106977e5b030575187f061e0c444752c88568c187b54af983d8ff34d7ebd2350b8c4f2eaa23c0e027e9435964a9be1271aa001ff770f54569733800255cbf5f40be0b4a451dddb7ece5e2ba72cba1caa252648c55d45298d4db90c249d40c9040627db05b8130e97b353408516b52d94a615f4001ef0b9daa5a28ac6b19534caa783e1da3b7673200586c3e233d961968581a061992da38efd44ce595a7fbe40527ecab7568d337959fc6c1793c3d586c5865c06ae5c0f7589e26cebb0eb4780d352cc1b68994b1edec7154852b3d5ee8698d2d51f428e04958f4b2ab891fe7f3a11cd08a0056e132204175867a54667274917f68137a00f2e894284b90cd3733a21fff422e1549c2a1085068f3d171932f2cfdbcaa020b1f7eb7d7948e52c8da356122db898dce524f27ccd9aeae6aa398725b52427ccd60c42f78ea567cdb26ef14d2955cdb77a1bddbd3951bfcac4a3364f08e06e090cd811800565e66e16009a899905601c409f0561e191ce511d2f9c4bbb6c06140b3b1fd283c19627400a0248f6a8031e9098d8d56f0995bd06f56c085000b7dd6b9a218f8b7fa78e27ed9baded37fbabe536d55c4e9f92c6f638b520c5d8d1585acdcd8488221e62881ae534af20c9d541932994935cb8755f7c9a3264e694fef1c4e140885d1744ab2127229c3c8d90ff0c3d5294e872b272c43dcbc188ddd7d9c2e9c7822ff78c693997159cb4e4cb06a8525681e8e8c57a7316146ed7169507b61e6e3260eee38afefd58db85096d3e379798a6b74561bb7dcf044c53d00ba1fb319dc7f47a41af1cd7edb45b599ed6ac8261a5d5d88ee820f345347bbe0f3637401e282a6742233d00e39e0ba2d0223b47e16441f4dc1d9df6752f80db1bac228b7307abb739e8d67f2c2a4dfc935510817b974c841fe946d7ee483131bf06ff6f091cfd738c6bcff5e6f02883389289bca3a19c1fdcbe196acb830665f8bb623dc1dbbc70a1dda5955b76de2b4ae80b2d496f718bdb6d64660904376639babba3f2c87255b21e08712889bb9c89f03b65c5068d290cd0f775961d2fc9dd7ece9f1f145be66f62ae13acc964b9d8ed9dfc8a88250c3bca57e19ba7022f61329702d38d776f169cb47760e776fcfc9b13d1bea4fbfbfcc167206a0df8b25d5817a809ab7162ad95ed666f2e0b9d4e43bcdd05f1ae153a1dca49b577276120a05559a90e3d46589cb974721d05d37cc2dec0f33c4a43370c1c962d36a40a604ab27a33c81f244a9464e27642c474d4b5d13ac1470bd68edbf3228f5558fa14bcc13f17cf52bf14379a9c21d6374d14c39604539c6bcd68e9f82e0f604489bcb923adf602db9fd21b55a13b70067135ef96fba271b4f6a4efafbb506f83c9310bfe34479a035b1101662f39dd4f074eca719d3f0a259f3b19e564fd73208401581ae065f8aef4e878a105faa2dd6d28fadad9dbf038dac079591e5a53c78e2dc8dd3ec744fad3023cfa4b1c68435ff1d1c523219b7f8278dfa753b451b75a19956588ef3b306117995bf653b87f14f494056eddc51414581048076d73021347620446c8046bd52b8d91092230fb598c80049ff0037e9a783cb750fa9a6cacd50a9f3fcb3e6cb0593348ed11170b0ed65519d0d63b59bc28896014a13d658544d211f0d0210791babb899a88089152a6df12e012741434f3fd81cc1e5ca4cef0fcd548c08f89f9fb3aff333d24fc73f6b2f375748ff1b5764c9b799d77ed681c98963f0c10c8eff99dff860004169a863e5de79f3a670f3622cc0452b0a15abcb35cbf420ff9efe8ccae56df45ea1227d4e2873f6b31ef6f89624bce169c2d375b6cb66cb95ab40821440f3de490430d355c2b5660566a32ec5a7959a1d177ca9d6265d5b63a1da6e1607fab2ce5099839e72ccb335926c7985aa5f5e8e8c8642ed7f7655dfe3c01f37eceb9ccad2ce69dbfc7af29ee536cd7aa47b1bd6c1d8a568b09d3ead07e69f556d9ee5f5c0a07737bdbff52297b70510b7eafa3e3faaa1c990cd37016f955392e4cc359e357e56c9856ab72608fa774840953c56eb34298aeaad92fdde3dba51dffb4b4e321fc731fd45cf01ba93d3a1b5f2b8ef4e96bc5832e4fcbe607a57fa680a90e0de9f138680ce1a2291e20be813cc81fbf92d79096596ab50719fbaa9cedd26a55ce06a778c264c1be2a677f5aadcad959ab5931af13bbecfc6a1beeacab6af675fd50368ad18e7ffc3dbfe39f16f9e0973f6b19baaea1a1314fc054dd0b9023d1f6158855e2ef06a50484081df06def228105ec9b2e12b041890739a6f905a2741f47d3bcb9f9a7d18686f2cfc518638cf1c37054c3fa285fdd1b1651fabdf76affbe7174b94c5326bbb9d1c1507411a2ca6776114289717b17218e1885d022c40fafed5d84c801c87df0f441cbce2f9267f9e2f9edd6690b8bb0ca62ddd5bf1def1d4f5b7e156b870fcec0ff36086221f943ad02f1afc2fb7ee7dd58e3c503289dc9ccaf8e6a9720a8d8dff74d1e45ccf62e4138b1af770922894d6eef128406b67b972088b83ff02e41f8b0d591cafe80e86ddfb2f30f522c99dee5871fb8eca0ed5d7e60401036ecb1b7c12f63f9bf5225a1c8cfd9f6b291e2935b36f843008165df7d371056b66fdfa5b7e6bd0266889d3f0cbfb5a364c214ff6bfdcb26fef8e2cb363e987549e6777df93b7226f707aa51764b438d2d47baa05aea1d98e698e6523698bfaa8aed5b255bf713a2144bbf31324cd3389f5f07ba9f3fed0e74713900f33e366b28a17e045f45d676dce28f37287fa198c54ffc3be2ff4250632af77a171f7a6839927b171f7000536eefe283951e15eceddc7a5a360aff281b5959917ff3add3aaf5383f9e56e3e7bc785a59851f9bfd775a7daff3bd8d694e9c979d392f73c63ee69cbd79eafccc696535a3ad1ef6565d186065c76023a316fb18846ab1b772e105ac5aec7574cc5b99efc24ccb7c4ccfbcd51417721ee75db8f929399ae67174cdbf10034eede65f88a1a776f331aca8dde0de7e6975dc2f2bcf3f56fe029530a816fb18722da65fa022d662ff420c3a6ab18fe1a8e6c48994d4d3d3d29212254a4a4182ecd87174343444a3fddfdc98e638facf75ff017b22d93acdfce33f7efef10f4fda3974947f6058f96ac4ba5f0c0cdfe83265373aaef26d5a7ff3e3a98e8ff3e2a98a3ff3e1a9860f7ececf706fc768ce9b979d382f73e28f3973de3c673f73aab29f799b539dd1b187bdda85872a3bf62adb44dcf8d926391b7f139a8d5f9d62b1625e357f2a47cb3cd633afae53387ff353af5f7134cddfe89a679b90fbf56c9315fbf54d66f64bdbfc8e6c73965f73924f337ef83127f8e679b7ec977695ad22632f966d82b363df04b6635aabaf87e1c071744483c6d01010108dd6d3f3afa37373239399a6cb358edfe7b4ebba4c8189b76c57dbb0758e2ef394dde8609a3fce6d95a0054aecfbf9b144b1ef438156e1fbb7ce928bf92d3db3896799c496fdf576f826950d2a60886db4bdcb0e60f60e5f36cff62e3b24b1ad6cf0fd9249728dfc72bcefda81cb1fbf2586230ce4df5a79be847cbd1deaf692fa051db527b9357ed81ac5565832618ebac51b8b1808fe14fedd0af87d10e8828316980d3de42e567a631729bd8f8b0e5e4045954b43af86fdfb5e0933c5f6fb9f23dd7dffbf58063ffcfbb9a767dffc3df8e1af7252b136f698eddcd9e6b3b3f60d94393ba57301e3807da343db6091f9b231ca1869b860b882cc9e0dca845cfc4d8c4aded4c8e8c4c057c72f833fba60830f820f7a0a36f8a02fb1c107c107411c31a0d8e0bbc02fdd69ad115cbfef14c5332b7cdd32bfc77f41118722332c323f57266f8c5cfbbc316730b30c9f3df8a7c86cb94050e7dab9f5325cb4336f72ebbfdbba2ed0b55ddfcbef09c49780a98efb6218f8a10b17057d3a0b633d3377e0f133a2b4017267ca15a67fa5f7a821978dff137779c93066cc75662bb98aeb499dab609a2ba633954cc58ab8c3fde59c3311170c182270919af3870517c9f6d7c3c65fc65e9fa9e42af8f311d8c8b9642e41d84244b6827b5c82e065ab59cd5f4dcdb1971fe14a602e45e022978b88165bd5c94a488840e3e4deb8ae8fcdfe32605f1c36be05d8f8ca807be043183fd9569dcbcdbe4464a34c458a7b03137163f4c09130063c285309daea252287081c226e88b02122dfd749f3f994bdb4daee97eb853f0c381210ee8d3bc58d81bfe64e716f602d37480da2fd05736fe02986fec6c40183bf94d1d4b0f1e7183c06ce1c9841115eb4382104971e92d85906206c7ce6ed3a53218b60d6c4420c4688ec49927c1a8dc1e41e15e4ab188c0ccb9ed45704268d3cbf979d5f09e6d50383c164a35bf35c45cc39bc74a6428549e222f2e3d7ebc9930cb198e4672ad90813f17af2cbd7792a9d485eaf3a97d7974abefd7afcd24a48adf46ade2ffd39cd9d46fe94d57ebdf0968d89c0340c236257315fa4ce56329559ae828df210bd5e0f87da4b290817709a6fd546022610fef30ac202fcc76b98b3fd3a432098e187ae9f791cf3dbf532e318639a4a3737a1120cf6302ed9c445e1c31e045d54c0f17718bede15fbfc2f3d8b69d7bfca264c97ebc9f233958ca9642a39dcfe0212c2b20e1437e0b2ef951b6cd9ead1c69ffbe7a7010d15d1f89b1898ad576f74683a7e24215152043444039b4043262ec2316d621afed00322f02e473a373a9fafec333f9d95f568aaae991dca1f77d7982e96e17b4f192261aa2db8fdc7cf3a5b31fd3f3d1bcdd1b3792faeb5de5f42fc67e2fd99f8e2e562aae6be43f87ef75e5ade02e69c7b33217afc5edffb2b8397085114c552244952d4acf8aa488aa290d6287ef8e2870fe23ce503491e98e0d8229f244f0684a50882df47ea05944f824f9220093e487ee27f425bfcabc750155f84123ff0f30016c52c8ae2288aa366c75747f14512a0cad7917bfc8119be52f6114810a7c1046e50628f333688cf82f816b518e6e523fcf292ad1fb51647918c628fb8683461dfd6dda0044aef29c91ed898e14f80eb5daf8e0c88e2c5a401975ec0eb5d7f5f417c7ff70a113eec36ef5008d682b530000b064af8e0051c2481a587ebf18b88a33d5c364c811d6a367c35d4543cfbfb0f03f9cbbbfe6e7d99c18ffc2bb216bac829ccefb3e70c8264ebf68056184bc49f03cad1f4ef2bc10ffcef6ef035a4e5badb75603a988b90c11494de2392594c47f27d3ff03525829f075d77c11e4ff20126fe3c82ffb55ae33732a0f4978f1287a1de578a5d2593f1deb2abc25b96b7fc5c96e5971fc2c80fbf5c820a09064ce94ac4777d09bed4f812366c1b1896816519d90b881f31b3f9965e6f97331d61a4e8edf043ad7ebdde2ef59a446f97df925b752ebded7a3fa2d7db32e587614ffe60bb07edc0232ec2f93effcf7cd9c227bfcc9181a1ab6c91e5bb5ebdef6a95adf2c65eb6508f53194f65297adb45446f977988de2ef55406d3db2e9d45c5acc57e072e63ef2fa5982e1b605e9a56cdcb86bc71e18c393166de02bdd571fc46b57ca877392e2acbf274392efa2ef9e5bbeea986b39024ef2e7fd4dc4bb6ee78ef15c37b2f782f46025359d82fd75ff2c7af24714a2af3960f5361efb0f2615f3e14ec4718795de5cb067bf13395593ef9196673d94298ced96529035f49ae1735ec5bb0715c8e8baebb7051e90abffc962bf4d25f6aa9d53be2a2fbf95e51e2cb4baba55a962d2d7e2886e0e7c23a4568b95ce70b58bd5e4f0318185b28dc9a4b4719df6bb5f1d6cad27f3cadbebf226be38f638641fac01c4323384ad060023728418309dc501b7f077681de83707cf22f59eaa91b667faad20372f9790fc0ef2fc903d3b7d7f0dfcf5e1bcf197e5cbbb512bf7ef80c7ef80776f8f7f54368870f865ac4ad22fb1bba641466fe6bfb42112831ef15257a1be7fc7d1f1e2f04ca29598c780dbf0b56bd5e0debd90fbcb3f0e373caad4dc9d29afbef0c77a4eb5a6ddfbd9ce3e8a3a531edc5df91bdc53bdc9141d7fbbe7f3e71cd5f403e9dc5c506395c77b92389a5fb630f63e2a96209b961f607e6ac7eb31ffef975ecfcdf09e5f9736cffac67b61c26cc7ec2092fdb67b83091c4576e97d9feafbe8bed4235ca576d8c32b6d370c1d81ea4b6d8feceb3fd26667b6c3be9f8c7fbc4c62f23b4559a3be1c2fc184d66abb4fdfaebfa26fe839f3c59a7e16f9d319c863f9b400c5bf43471a91a9b86b5ef8769a1074a77c74f428f0b4cfc9e1dc9a34aefb9d99ebdd56a8d1f86de0ab58f373fde5c83cf281d178d2614fe5d958e8bc2107f9ec3100cf5977128b728c0f4c7650a86788902e482802d670568709962038d145b84a4c8ae0f160824d1338d6eafb7c4145696d0811378045abe2542f0c3121b50e26e400626fe9c5de90539881e50c234ec036f3180d98307e11ef6bdc0874d3c4240d62b6f113fc8e11ae11f86aa1ec571bc46942e4a23dcebf57a35d4d40fe3d18ce9d33358447931203261fafbbb97282e07be2935ffd4cfc8b97c3e629a07395208553a2e72c7f80341509bb5d11d041f630c6630e730e78cbfbbc5f4f77d91307d3baef95754645eac7b877e874a70f9d939dfc7ee3d99fce10e4183300c43ecf7b73897bbdd8bbef055511c0abf3b44e3fbbebfe7cd433470d1f7e2b7c4050a105251cef2df2b23f8f28967f62ff18b88eff1c5f36e2058081e6df8c5c72feaeb1f661a3e1feebeb1c27bbf94fe2ed956c1c7ae7f90db3d289ffedddb433ec9285a2d9c5be7a8bbd9600b7465b9c611a9756dbc90c81badf3dbe18bccf93575f70ac45db0c367b1b61882f9554474c116473c8e62f82181b5cefca30acc2f67f2e523839b3c713c087f3e736e0cfcaef34fcf3054dac6fe228770fcc6aba5cebe9e7d3323b3c1f72264111441f59ebe4d5205a6ea5b4e1da6edd89757d7629a4e0ad39e1c697cacc636997ff093a67806e9b123dca356c2b1ddfa4fabb19dcd074b10f6b7d703616108ea23a9fc835f876938469eeb7d92c2e4f27d48743748302d6b250fea623ec1fede978f2cd76731efabe675851bc9bf3c89e38ba76dfcbe501c7bc0fe158b91b946970c88c6e148af1f5e8456ce3868c6d1f5fa71b7b90353bd3d255877b3f3a944a96766ff12739148f00ffe1b0fc2ad1d20c1463ec5916e0dcd8d237d1e74c5fc1a62ba5a67deae738a4b67c99ff3b02fc7970f182cf421cba78d0eccd294b9b9654ce93a71ad75b677dfb0a4e861840b1ea6fc72c6f53a8d28df7552d1512b6f300d9f5e6b9d7897279903d3f7a55981ec236d9aa0719138ae7c9251b47eb807813f3a171d30b1c70f7f7c15f95ebd1bd46a8d6bc445e5ccd52249a5d0055359d8e297decaf81b4f988ad5802d7e3ec907ec327ffef1ebf50ab0dbd1668f5a6d723758e4d31fa65d9cadee15c66a7d3d40284b51b64fd90e4f753c49214c35e65d9866b6f4b8b404d3c457098469e5c3c67fbdbf8038a68d27ec67340e4c135fb74ed89679d52c63afba14970b8983f9fd8769e1c3b6bf80981fe28f9d2bdeeae5a2e21d7302f13d3eecef9767f8b09306a695dfcaaef2946d7f85e5f9bd7fc05cc0f62d4e4860df23ccefd5cb65471342944d985ec5f62d4d68d93a40bc8a2d04dce197276c975e76c025fe6bfbcb484b0a07bc70f1614a95206aee3f0e04f63020af7d6908c011fbd210002d5bbd5c60a6fb4f09d5fa11ee98dab2b5bee566f92f10069a65eb5f65eb61a15996af6f95b0982e85840ff3f1d23df0abf5e5895fe559eefb7ab5ce29d8597e2efcfa21db65794edddd3aef06cc97fe7199b84e887fb6b698eac885090f71b49826be134c93ed2e1ee4fa3209086efc4ae2d25f9ee326af131e247a40145fea7bd1f110197451a034955c927caf893904cf57720b40a1e44339e39f85ef35f0f30f65a3515b85fa06d3f2cda795681208d33106b3170b4c71bd6c470abbecfbe3eecb65280f0d958ee3e27f892ed8428bf21b407748e6b16a32daaa05f14b4de667f4e3ef818bca373f049fbc2f57427526602f8387f07d6928f3bf3cbe3ef2c4b1a3c7102430f09c0a77d40e367e5568970e66273e7db97039a299785c62098cdf1f0f0117ed886dd0c174e0bef84af0c3706b5966e22751123e187e94fb62141b7462830f869f8d6e0d8c22fefdfbe2a7705fd429e00fef9f400994e23e96724206911f37614a395278a5dc2b1bd451b244697db8c17b430bd451c4ff202392fba29e8d3f947fc0c79a72c503420003831434e8412d7c8c5f7c235efb01b38218e4500110d4c02f57206a2b33ff808ff50ff8ea90f9f1e0d53fa5f24ffe11a998aa4be1048746c86c5f828827481e54a0077c2ffe0f7fdff7dd7b73ce39875f88f7ed82c3141b9426a65d5915a66afe78b178f3f9e756c0bc176bd51cef6b146fde8177e0120cffc346e187a70cffdcef7231d5252e00c3c64f1b3ada02e68f0116d072ff6cf1d74fb207d37f1cff03da3da8243514f9977c9c948b901f92b76cc78dc129f25ef23159de1ddef0439aed2ffc9937c6807c41f0f187e1c5e10ecf0ce62f04c110fc464ccbd802e5eb655eef3a65f6ccc91817a6c13e24dff5b137310df6b2dddaef3a65e70da67d98067bd726a67dff3a6576cb833e328711d3605fbec3b4e777bd3fe83a6776798efe85e0e9bab801e5f7b20dfe7dfdf0b11c3fff7d1a1098227ebf8e047bfcdf08be3f869d53fec47ebd8bc48e491293f862922433f611c12f610f7eb072748d5f6e95aecfd522e2dff7e583e7a7817ce9fafc5d2e5d029579e48187f1fbf02d91302f96ed1e1482b02b12a0f47b034bb1ba0219d0ab59b5de4a7c2b240340a266657e94d85b5de11cd4604f055bcdc0bfc2512bdf6b56505cd0ab5de958a98512b8b806fc83dcc44704786f08895093f95274b54e2b6f414de6cbd1d53aad72d464ac786a325f92aed6c943c509970b96457eebf4da4d52d6486d85556b7d29132373eed4627ad94a0df6b1b3e750d460da0a0b494c02357205376a2fd7e872b9465027b9512b93d8d4c214c2b7c2aa89dfa9532bef4b496cc1a1a8911f9e3b35f16c215ba991ef79452d0621f0ab045c6bfd9571a9899f61005113350cadbfb5f0e4a991a755f8570e454d7c7f2571d55a9fa4ac5961d55ae33882df3782ff9ddfc64afb669c24628c6749886ae1cb6a33b5fc4ae232b861aec89a0b370ce84158486b7b9e7dfa874dbed936bbbcae1b3ddeabfc85a50ca5339997061886d8ea786980a1864b030c426cfc3a227ca0e1051bf6a5e1052a5b1d63f7beb35337ccf6f17dce2d5df5535722102c8efe82a9561b7f0f58822f03b91bbc1bfcf086d9d70778f7cd49e0b7a59ce1ed2fdbbe4f17014cff1b25f81a82953fbf7ee42fef50fec80f157b1aa6802963a1689e37e6542f90d7bfb47b50cc4fdd307b66cb51df7cf3848afdcc16fbfb2794eb6742f2bb3e43c53ea696f9cbd3c4af1f6591acde58ec7760d709955f4084b63f7e15b96f0ab96f6af53e8bb5b35ffcbaafffded4b93c635eaf2f63ff9531fa7bd97262fec63cb163bef4ef62987a64c7e07f8941f276e595fc2fe6cd0f5f3c5d7c927c1dfbbe9270b08cd853f7892dbee357928e7d77897719f3ad3ecaffde3cd5bbcd98fc02e24ffc08daa2683eec77e09853353ff6aaf9aff71d3bd5f0c7879daf779d22d44cc80dffee523cef0b88d00e6d405eecfb650c6f7f25dd2260c16e6b03250d2e800153250854dc2b4100e34301a514ad1a044105b992041c080205c67daf04218bb8ef952038200858f60da6b9075d24b6b880cc2959c2fc34473233cee3b7bf9b7364f6ec226ecf7db1f18f5987f26eff4aa08d41156b63dd9ba4f4f793895cc3a6ecc674dd1747a64afbb614718411c6b1f7cfc6f765c4ab1002100cd0010d7610c214356fc5b830ed1b31ed6adf528405b667193ecf25fe1c1004eff8819fb1cb4715dc190a51043f84fabefcb0eb2221c33fd8c434ec17c3c0cf185f1c4a53cbbef1203104bf8cefbdf2850be6c0fbcbcf9c2959dba0868b2fb6c1941ec8ec7be58b171dca2d30a012dbf7ca0e80f85ce069950509f89f06bfec624e79cd710df5eec8d96ab778df9abf2e2edab95762e0c47629bb05f7d5e008cca28c1d704731eb35c516dfff07a6f2b59797b0b7ca12fe2bc95ffc12e6fa5a612cc734147ed88742f2ebf41a3e7d5b09f9fe7bf7d1c59fca61f44cc8f7f9472c9c57c0047ef08fd8f7ca0cb46c756cbd0ca0a8610653f6bd0205145b1d633e6623ab31ff64c735fc15be92c0311b5961d54677bd2699e20fc3d7ae1cd74842ea31ffbc8ab4b409a58af855047c2851835a8faf21bebf21bed58cc4bdd244158f2959f3fe68963a50cc748179a04701f70a1332e42041ce0466b0d070822940807d41c14c075c15c0d12167df2b267061cff6bdd2e5cbe6e2e50f6619bbd9f74a1722bc0696858224f6bd820222b6d1be5750d0db65ecfe631a3eba1f04054eec1ba76d75dc47a67a14e408877ab4d557813676b17bb0f7e00d74f1c1853c057caf9525c6189f5e234f176261a8e8f56a309835ab927c18be9a55f8307c35f0cbd67f3fb6728b1cf3f86ee486a98539df1dd85f25dc303550bb13a9f7ca123eecf195741f4fb93550bbcbc7f7b99fbeb3df31096bf5dbf763e25e1901979cbf9cb59f78bb5eb8e88e9896bffd8abd6c666fdf775d1de864dd7c396b2b176239bb7e0c4b2ca67b56d656597c9ecad7be1c9fb6cad2e2a97c4d27878eb6ca52f354be6693c3465b596561f1f95d46ffd5d87aab2c303e474b5b596571f139426d9525c66bab2cb6fbf3f7adb2d87cfe6e9fb7ca723f8bcd457bed1aadcebec5cbb4b0f916bf7d5eb5d5bc8ff6d169f1aa8d8538bbda16f33fef7bb77875f662c642db58b478add5acfc2d9e852e499886a1d5ac580b3364e1a2458bd68dd142e6e267587ca8b3f8bc7e58498a5fa8a3b3ccbee6559d85f63c2f9de547abe3d05fadda684ffb88fe6a30dfd6dfeba367b3bf4ffb18ef7a1f9af6f9998fb6f9fcd5aafaf331dee7e755dbfdd9a5bd3a0b7a18400fe36730b40dc6fbbc54229d25e6dc125b3fa4b3be57633e8656b3c2f07fb49aa5937fa6d52c9b2c199d2546d3b4aaa36741da467b1eadc63ced7d1e48ab77bf5eafe77918e247ded0dee767afd668b5e669cf33e3f9198fb6cd64de962523f33c3fd33e5f3ecfc7647ac6f33efff3ea8c47db78fe85a6fdcce6f33f5abddbc6e67d9ea6679ee74dd9f3bc3af379dacf68da467b1f9ed71f10472071434de7799ea66f78689e8747ab59383cefa377b272566816ef42ab59e7b378d5e6f32cb49af5efe3a3559bcfb7d06a56cffb68efd17916fad37a3c75fe6d5ee5d12b647674749699fe1c9bc779ddd8e82c35ba87464616cec8e82c319a66be6219f6d2595c1aa80c497d85ab7040118ca8b57496511f812fb8c088236aa1ce02eaacb3604de3f5e519191b9451a4a8a0852d3b6b005411020d54c1fac37a14721f8a699b82624eddcd62edfc50cc1f581bdbae36d6a6ec66856202c1da3a98e60fc5f47d4f28a66fac7c7107729ed9621e937ff31f7d689b79fc331be98a89f91ceebcb4eaa2792cf3331bce9333333f13eafccecdaf78fcca71cd7e46e6f531382d1a9acf0f848b68c29d1b1c63e3793d0e8dec67b6163fa367aed1f539395acd2ac371c7e66f6a62bfe2b1cc17a3559b8ef9590e0e8dac05788a5fbe58f0bc7a467d357ef82fd8efbcf937dfaa899533fcb7c5e3576d33322e683f321ee7c99f91b6fbe4c7d02c847a827c625ee898d79fff7191d66ad6177ecccebf6eded58abdcd935acd12f555f93a2ffe8ac75a3d59e0530709fdec555b8ca1c7f9fbb32b037feb7f7c682f5cc090019a216a619bf97b43ad43a4afbedf7999f16f3e06f635ff8abdf9aef26dbe25bece63ad66b198ad98b5f87fd5e682f6393fb3fd3c8eec698658c4e811f2097aa161fc09f4b6993f8b4ead6601e9ab1d7d03435f7d7ff3425f8db01e9385cd6b954747a6551bcf9ffa69665ef6b3435be182458b9e9ff9bc4de6679fb37cf4d58d96f5e8abef6b58e8abf163ff72896f7ecb46cb72b48a633343be6acb99bd4ce667f4cda9f33b6f7b7dccc73ccfe71a6de21af7c11d7df57d4c475f8d5fbe4b7c98cd8c5655f2673699a799d5e4d83c8e566f8a70b49a75a3af62daf5d26a968dbefabeacd15730eda2d1aa4cabb6d7933fa3d52c1bf93197eb633e977a7469352ba6af3e350ba6af465dfe6b7cad6695fa4ad41fae71c56fe9ac515f85ff89fa2ad48e6bd4c01fae817dcb7795b172be02b16ecccc014a1e70e022d53696aebbb3b2be5af12b5cda3696644bab369cf2c959ebc59f89da26be8b460ca6f32b7ed42aa9d5594bdb5a2f97586a17cddbc497cdfccc766731385afdb23e7da5f33a3635bfe25ba56c66241ff67a3dcebbb46a6b3dd9ba799bf836343fb3dd9799b97b9653f33a5f6a15e765fe8a27b5aabedee7467c1b1a198bef99d1b697898965989ee2791bf93bafda623fbe3a857333f3b09fc91ef63398b6c5bc4ccecfde46f336efa3d52c505fd5f4b0305fe75d5ad567f82b785e3cf93bb31cb0a5d5198ef83736349f4cdb5c333231cfe2635ab595ad2f5ba318fb594cdb665e80facafc9af07562c05ff12eadaa311f23f631412ff42d5184f1403fd2e8553693df46fb17e5bf5eb54db9789beb7d5eb54de9b7917fbe6a9b99e5d8bccccf64b44de6657f37deaa8dc5f7bc6de7796268d57cf363b42a14147ecdc7b40a04037c9d8769f5856eefa6e9acacaff2aff89756672eb42df640ef7a1fbdf6e8f66e16fac5c3f852ab334dfec9b373b53a9b69dbcdc1b9b1d1b6d7df1f9f4626f3cd681548ab30747bf70b6dd67cfa6a85d67969f5e76db17f01fb588bb7b978daeb613defa39f05f9ae576de293af4e9daa4de6c557a772ded67a9c5767b6f1651ff3339a8ff9598cb6c5fc8c6ab3f99b175acdfad157e1872e74560bf3615af5e9d1595ff32fadb2d03a6b85bed2d1372eadce4e6d733d8b2f9fa7d4ebceecdf76be7e52abb31c6d2bdff5adc7b9d1eddd367af63b2f6a754633be6c9d89c1f99c97d1aa8de7c5576de3df8c34afda665e16f3af9fc9fceb672f6d7b7d8c8556b56eef3e75d687ef9ae9ac15e6975acdc1d1593afaaa46cbb44a63a3f99d1fb53a938989bd665e3683bdccab53366f233fe755dbcde3fcccd69ac5bceb672e6d73fd8b67c5dbcae7791ead66add0575adda1d1593aa16c4667d5e82b539b325a9dc568dbf8e2b73ef6d2eddd2efd7a9a8769d516f3e3ab36d9bb7e06fbf267b6d6cf7cf9b352db622f33d3331b6d13dfe6c927f58aa3dbbb6f6a1ebfab86e6a5b34c7d156ad7a855975667af1f7f6613dff5e3cf466d23bf94e9194cdb60337a9589b5de367eccc76835cbd457f9730bd423ae71ff7b989ebdb46dfcd68bef5a4bddde4d3efe2f8bcad7c01f7556a8afbec739407df5fda71dd7b88f6bdc10bce0d5bd3134461061c31ef7b82d20c41e77f8652cfff83d545bfea8a7eeae723df8a0f8e5da4ef16ca8bb414d0ab94fec3bc562ed768a67878fb5efabf76736f0f1833fc31ff6eedf0fcf2a705ff202197feaeef0c5b305d57adcdbe15935c5b35b53b72aefd66d616dd739c5b355ac291eacad8373809fff26cc0183bdd54b67113fbf8973c0aec6cfef02000a3270011a8c5086b0802d19a0f2b5d75b659902401521d040957d3f0b7bbfccf1d25659d8fbdfbb3ecb5414292a688103fb6a280dc5bcfbfcbef11c4f53768369f9b5ced8db57abdfbeefbf235f128b04d8b23f9b5fe2ee59b19f797755fcd69995c84c68c145a286fa420d958bc8477c3f3404ba3454162ce6d57acf72fd288313d31aad90244992e4672da4b8e2bf2998f631f1efdb463b15aa2b71be63da4c12b3cf32adfa11be65e7338d66a12384293694ce6728867e3e7b0183695f4fcce67b1e4f81695f4ecefbfc6cf62d1e438169dfce8a77f1b80598f6e91081e7698f99f077fd3f96a2e67cfdf9f88b4e097bfdd8cb0e8b30603694dade9d157b168f3b006643a97988bbb3ccc75c9e766617672ea2c5998ff039b3123d676682853e4fe739bf15a76b76ca726cce1e4c33758ee952c3f48e7ee9af8a171a2f322f335eb0971badd2302ec510ccb71c47d304cac183becf3660daf7598b995b908718c76f081cadd2be2bc5fe5e88dccbbddccb13c05438d268622ee568de642f71305be24f8524d8d22b663539e28ab3b3e2bf094192546dc09f6257f47abd1dfe14cd4fc97e6ae6a7647e2ae6a7c69fc23f053eeb5bf61a6a75eaaed8ca8aabac988a8c8c56f1144cfb7ed52aee61daf72b15f8573098f6adf8a744adde2930ed1b4556e4b2b19ee209a35e2930ed137555cd0e35ae4109594b43b1427fb3d6df16d4e89aff1e6bc14539fa3231042ed2d13a42e0221c99bf4af8808b76f477a36f0d47c89c3787f3f67086273863a3af952d36e0a21c700de3df2956f04d95156f4505fceff1149e6f712f878a7fdd0513fef7770adc9f3c678f2198f6f928c5d0f7ede8ac781ad9672d66f915f19d5a1d9f47ff17c5ddd1eaa8a355f38646abef5aa57dead4adcad93c42ace86127875bc3b5728bf878b49ae5d2ea1502d3be15df5ab1a3d5dbc3cecfece868f5e6a0f3323a353434afde1a687455cd96e9ab05d3be8ff96b65082613c3e5bfcf5acceff1f77db32fe7c3f96e3e9baf55f31fcd7fdfcc7f32ffc5fcf77d355acd72d1687508a67d340fd2c8b4da03d33ed98fb219ad56e5ec99176764627462971df36a1bee185d55b3bf0f7f28a62feca55d1a2cf5f77ddfe7d7ca17e1e607660e76f63283ecc57f3eff5bc52f157cba076519b8d152901b7d56fce7fbb18639c27627c176175f4a29661cccac97bdecef69f7fd2bc07d2e2c92986d99513f2bfbc339e7cfc79207b90739719d8a29a2b8dbb97c123724906311ffe0279f868bb0232d79107e75e8f6c048f165b7b4ea4e7049c2b71c8d5a1df1030d7d5720d698851c90f755bd0535afcb77158ae65d0915e78f50638f43b579c7b49ccfd13470918d86b2f96b44182a86b0f3e3c045371aea064743e1e49c1fc234cfd150392648c0ce2f0df59241c566601aea1a1126cc10b6cce79cd70aa6f590dfe6a4396bce58cdeb87b0d1dd927f728ee857abcec59770d18ad785bbc5e7c715818a0dc5c2c5e7d7edd03e7fabf3f3f9ad66af0bf70b55bcaf0b378cef31bfd43cdf3aff45878a795db87dfe7bd78530ce17e7cfd9ea302dbf8b138769f95b9c4b3ca779066914159b1a317fa870c7a52c15aa64be60f102057736cdb5b995f7d452ed26291125cc9f238af8d122c44f0f3f35b8bb23d1e9501e3b5eaea5d2f18ee0d295d71e81baf186b8fb084fda9c2ec79463d1f4070b754b9f783cdd5a548acdf54857a51d2fc7b2b92826aa233a1e4f69bbbb0d964d575e128f88bb1fad292e57c55b95d016ede1ee3a7639f489c7ae88bbe758d35d2ec9dd47c0a52b9553ae69c7e301754399743af4078fc89ab6bc24bc2436529d0f96274524d531a1ba1c5a85ee4c68794fac14ba3b7282d38eb79ed0843784c74392aebcdb115cdab2546bbb3301a9455fc60caa6f6fa8148e774b71cf6bffc70a6bbadbe59a3c50bba3e2f1d0a16d9394c823e17628cba62b0eb76f2dd303e16cbb148ad73e10ce86db51f156155ec8098f69974a1579241cba8b8ae2dd3eadcaa5b7d4c8af804379ba27a8d403e1724cd2f58198b46c8a53e18570bb947d166d7243d91dbab6cf0349edd9dfefee3fdc6ca164888c8c8407c88418203de204092edd39e58ef04052335bece0eea2cb6a237027bcda2e952ad2a209190fd3713b2a9e91262991276bdab6bc212d94cc16b416372d4c303e5fdc7dbcb8fb24e1eea60f113ee46ef5bcf6595ceab4439f6e52bc4fa976b976c7bb3daf7d5c9a5bdba7e2a1f0ad8b1d9bf2706ceea9fda75beea9c90339a1baa647824b59aaa7e2a1c084852b664f0f54f2e7ee3d44e889813b136f6d5922a121211941bb9c6e4da39edcdd0437596871972134244454e5a356c40892234bd7af0f178723c1e88db7d793d2237beebd9ee39ee79ec7d07319647027bde5ee54dc05d0f356af27a52743cfbd27805e0b61c28409e3ee9ee27837a40b84791ee1deded275e5ddbee5ed3e5dd167db27a75cdae4d3a85cbba35abf29f7b8b4bda5524ed26773ffe91392bfb1c464e53159faa736d7e471e9139bdbe59abec6ae426c9b8bcae9a2d2967da273db95f7c43e8fd73e52caae6955ba3ebb0a3db1e8538c18698bae2dcb44c542dd783aa62054873e49c5d8e5d0a75b0c36c5f16e4f2cfa8484d4ae3c29292a96491a85ae4d6715c7368e9886beeffbbe9c31dee55a36c5fdd3ad45a3521eee7f68697a5ba978acc9430277a77193878815eea3cc88c333e5d2c06d107d8e5f57aadb8b15482092468bf251dcdda80609e4ee34dc7dc6e70e8304c03fd003e0d955687dba45a551313c052eec2ac4ae294e97a3628ad14635b9cff0d3dd65acc0e2feff9fb23ab429a55adb0772e10249d703e588dd8a28ff167d5c0a75cbed50a9962a69e5adab8f26bc75e5d51e6969e99148a0a5a5476a9b52dd3fb9f4d33e39e5d6ffb629d5d196dc3dbbb962e67273456ca708ee8ee3e60e14ee238c90fba577dae56e391dfbf323e078dae376a953cac4ae42688be298b89fe02ec4dd5d8ade928b51a27f2e3a1873458f5db0e6c2ee28e333f25cc3b742c4e3087ef95ec77e4bf8745c176f808efdde9b71907bc58befcd21147cf115718d917bc32b3abe2fa18cc39046fefd30feacdcef5e4cde1fe0db72f07e38a7f7aaf85e3c9a8067f8e2f0c31707f8de10df12aecdbd198f1e00b308bb35f7d28cf962b921be176726177f648b0676dd1ce3057bb20f8c3fa27c142bba43943760ff1c37e07e99f681f866070d7063701dbb699a7efd7e175f1ddc11bfb8178318e77b67dc1877bc2e8c310e795c17187ff80e65a112676c715f3239180117c438f7bbf93a56c24fdecf712ef45fba03c87e7ae03a789190c0f986f713efeb661b301e91f23dca17e3efb1ab45bbe0bde2d0a72366e862321cf145ba18b32087b785bf5c75356e92836eabc477142fde8157e09dbc933dfb8ddd10e3fbfaccfc611c8cf10defd7745b3db704f1052fcc68864908cb16be4ca34bc4b7843bde9bf1fd6e90bb836d601d5c621183375f7c7189c5ef6630dbb8f9d26eebbaeebd37ee0a4c66f18edfc5f722dd1bd660d9fdf005bf6b039737e31537678c3ffc5d1b18df1c4cded61d3f7cef45ba3b9814f3fdc6efde6bf437d624c3006fbeadfbdddc560ba95461b6e2b2f82ec62116d36bd20c9541eec517df7b835c742977f71cee6ec4dd696eeeec30c1882b850942fe4860f0850b121e6210c51114064325c0c08b2b9d2bf02230e89216398bd081080fbc224450550a127858e1831fa8ce908df326c6110c604118a1af9e221ec85b84de22d4f01266871a58aaf0202f445801e4c5070cb4e4001e0c2c432f603cd00e567879d70a2c36328e6566055f02aff87f2eb86777dc2e6dd1674d1c13e014a16342db5d6e958a91e278b7dc8e2a9c42fa8ca0f723be724b14715a2298338d0b8914227aa485e478f4b9642e1105579b5ff9353ae142027a210c8bad0fe8b573f4801e99c485fb806052308d1968c277431c1de88d30a4478c0bf823bf213f4df4fc850b224949c15f4e0e42410f86d20b34b1da0b19889400f4705a27b86409e8fdb0d98d2c0984de52014cb1955f20d417431529e317938978a4046101ad172998328241000c97e08e18d1c627245561881666401af9836cb184bf17a28d162ec0039016bacc10634a110238a2575235e1e0c24b46ec5aa087532485146d84e408cb4636207987fc214ab1b173640c32f3f1836c05711dc1e1d8d2333fa02252b431f30ac9d28766c1013d720cb28249861e984df08625842478237cb17594542d176390901471603c622b3e222d1b994e9217238d88911652c851489cf19a616453125d9f980322e5a296eb73f13bc496487e314021dfd18e0bcef209d60cb5c65bb661436f246b5a4652acf46e4963a47d3d5f4f0844ef05eceb01c20057b47a3e9d1851de69a12714e3e6a61cf46510009a8502f0764a3c81c003b86c19020240f42000ac284e58a8a6f4b6c4c29214942431e188d2101282201dcda0b5f061f11f121fd091c347e7e0885848a04496034af0a1036987c65586471481812c3e64f5c0001eb0e86002cd050e09604a61073a60c2a361865c538e1ba4e8c3152b462d1538f1830f48368a6c6425398a3a330b5460498a2b428404db0f1f3b10208600c878a9a101083c0008ac13921815ddc8be2e5c7c9024c708452d3154c00e3bcc5084488e1b2e5c97087808580818cc27c5eb007fc13000bddc15e026700a5a28703181bbe0223054566fcfb803eabc70b00da6b9b298195006c75cf383e11224716b1cf177f3bda1bbe7bc62799637d0fb06d0fb86842f684ecc2829310de881a04b6cb102291f0f449f8dab87204201f4be21ad1a52e7c6855e0b852f85bca26c43d7f8633c0ac97cf46204bd91889e6c899496511ec094fcd281eb891e18a607ba7252d073b54113e8b56e6058bc01c6006ba04253e220a085af4a2f769a9f8362628c3731615a00618c47228e1ccb38c636077d43749c21190ad1cb6598f3019544f97eae0f88fc01c2105108734232545d3297ac6553d28828e422b410e6e4215a0093e8f9a85fd433f1d9f9905cb130e6bb3928f3f8945e3422164f104d30146332124803bb6199c1cf9573c659cc636e913a5f164d1065624a648c188a378b1f8d2fc677479ceca557d26a04d18309212526fc66638f16be275ad04cdec35451031538d1854b0892a0723a12a68a2b567cd4748c60c4dbed4007315c98b1515421852244c29480035b786618b201013b12f044134b80c0080b40202b86500b26310e40d5cec0ae3fe081142d4001131fa000d6150b4b5250528408901f3c2b6c6a8650440620f080ab284c7674783b9e18ec89174c45bd7a61aa08021096a8605313d3040890e0801116a840046620400c4c5840e18422446c4b9400091268c086202c58c1122500c1078cd880037a90e1051778204513283062034548604a2fc5d97cc4bca49801144f84e00319c080961fae0c20c59d60f3f113f35aa20421d001872b53521c0b24d87ef8b881047b7d3e03289628810890c80006b444e0071a08306505126c23dc4032a241f42313f379981940f102118400890f64000311f881862b0418c094185080c90a4b74c410a282084384c4602ed8d1b152450625270c2d6000323c7192c5491307066f85c9557c45008980873006f101817fc059570626ca4357a80cc2401946fe1a9ebb8375c49c8c836f409b5bd39a9191c9e6177bc1cc97cc8553ea9031ad710cc51c8620986f14d5ae5dd1969d91c2ddc9907b6acab0bb90903993c4d2d237f1fee7d9b47dc244fb4f713976977b36f76dee6f3c59d1157dba3dfa2d6ff76ceedb274ca19b331770f7d1cd9908983332ec403177aadc1de6e6ce933963c48e00dcbd7473a6e72b080909a9d0c4fbf496d3b1bff29a70bbf453a71dbababb7653068cbb9b6eca7c71b761e3c886918d221b356cd0b031c3860c1b4436868c8e8a8e6a1cd1389a7124e388e868e8c886d19191915191510d231a46338c641811190d19d9283a2a322a2a2aaa5144a36846918c22a2a2a1221b358e6a18d528aa51a3068d1a336ac8a8415463a8860d1a47348c6814d1a84183068d193464d020a23144c3c68ca31946338a66d4984163c68c19326610cd189a6143c6910c231945326ac8a02163860c193288640cc9b04174446444544454838806d10c2219444444434436868e868c868a866a0cd1189a31246388686868e8d95c4bc5f4cfe6d2a7f691dc9d28860a777f37635ab06357215687eed6b4dde57cdcbde986a228bab4b4b4c4840913262cb0c0020b2bacb0c20a4b962c59a2820a2aa890420a29a480020a28a0a044891225279c70c2094992244962820926988004091224478e1c3962c488112325945042094a4a4a4a458a142942840811224949494943860c1922448810212490400209b62041820401020408901f3f7efcf0e1c3878f1e3d7af4e0c183078f5aad56db7bef1d3b76ecd0a143878e1c3972e41861841146c08103078e1b376edc40424242b261c3868da3a3a323232323a3a2a2a2a21a356ad4a04183068d193366cc902143860ca2a1a1a1a1183162c4101212120a0a0a0a02020202820103068c172f5ebcf8f9f9f9a1d16834172e5cb868d1a2450b1f1f1f9f9e9e9e1e162c58b0d05aebf33ccfff7f1e1e1e9e152b56acd8d9d9d9d1d1d1d199cd66b39c9c9c1c9c9b9b9b1b1b1b1b9b9a9a9a1a1a1a1a1a994c269b9999999191919189898989314dd38cc56231180c067bbd5e2f97cbe52acbb22449926cb55aad711c475114c5300c431004c1effbbe9c73c61863261c130b4b5858924212244990281151223224486dc78e1dee38a65eafd75b62a1d7636149afd7eba5a0a4d75392a4d74b82a4d7ebf58c28f57a4a447abd5e6f0809bd1e09416ab55e6fc70e58ab2cc956f8729537067b65b215035d2529c25e2edc8ac13e9c8ee73c773fc14df100cee276543ca66fe27d4bc57b16b7e3dd52160909fbb87b0a6e8a38dcbde5ee50a2726ddaa2b81869550edd8141417e497077266ec60c71779bbbf30062f96ce0ee2cb8195671775cbab452f578189f46e590a42dda23adcaa14496d85508973ac935c56853b6a989f7c2fdaeb838b705841df4b8bb05ae938ef3fcc55d9817062c1eabedb0e1003d7777f00730d87177a3ed2d9ca0513f028edfe5a21e0997ea7268138bb2abd00ebdb1ee3e73f722eeae829b5f0f77b7e1ee2470e1ee1d70f7256e660ab83bbb0aa5ec8a4ac5b041244443682888b7e3ad4fb71833641cdd521b4c381b366414dd6e29515014ef26c444f5d4e69c9eac2d9b734ad7183ca715bd09c5d8e5aaa062a451bca718bcd73ddaa2b87f62d1a7a7d66997a6ed93da108f8ec714f5e448cba24370391d5ab5b3b93be9ee1970f7243ec353e2ee2d95d42ef7bbdcb3503baaa7db37f17e4d99a2a876a88eeaa6436fbf4b9f9a7c139eae694dab8acc9041341443280808c68b1f9a8b163e3d617c041c37906c1c1915d5a0a1234c98303974684ec6cd0bc64758537697b361e3e625c2dd656ede1e76a9ee717ccaf4381d15ef89fd9f6773b47792e276b94fab7851e9ca440a6dc2ded2aa973b187369f440994dee5ee3e655727615c2f1a262b4514de9cabbc5905134d45483c8065153d3ad69469a36a137a6229448860d1a46339a8e64d830326a621aaa91da308a716b59aa3506bb0ab5514d8e81b8fb8d9bee83bbc770f7ebeebef2d635fd1dfab874b752b5e9fa3b5eae45db5d1a95eaa4a272dfe6d0b57da75dae6dd1a895d7f4a8bb0bb97b90bb037dee0ec3dd67dcef127717e2a66f6157a15b5ac5a409bac6b8ad6c8c1b4fa743633c59d19529a77377d01d0fb9bb8e9b6e1a114014a56fe9f5b6672332e0508eeea6ebc45fc31fea1efefbb9a6945ec3d87596e57fe794ef71e96a9d30e8a8e52761d051bb5e1bcf29e353f929addbd2bdfcad6fe9292e44b9ca4fea5e7ef2493d0586976bd4bdfcf8f1e75709f93179ba5cdf22bfc4e7f85f794e89d2fa3bea285990b4fe7e14f271e9ae99f83a3654feac27f87dcbfefe95428e72953fd43dfc3bb0ab7552b9b5d68f27955b1b9f3ca7c0a0a3d6fa129faebf67f9f9e56356c2f7ae4f214f198f78cd45e22864787a8d6c9da3f8b716668b1a2aeb09feac271ff852c20fbe66257c8f1f49fefba1d2f757e01702814f2adf142a9f8601632a180afc0fbf7cdc7d7526a104c2c2c2ba9757fae7cf82447cf2ada650f91a686575853fffd5fdefaf5a3fbec3f035505b5db53495afddabf047ed420cd457e1dd95dea33ef8f907fc5205e08fd908c3f0fd7d7c4ea192654ac78682e1d359a6746c18b24ce9d8f9a7ae9232cbada87c0db402b3e0abef3a29abee97395a51b24c89a0e31c2d1d25cbd4f7a25ec7324a1650c5fab48f275bc5b3c70fd7513c334835a5de1f41b94ee5f79ffabe53fdd6a9fcf7a75c7c156b8bdad933636dac62dd2c176b6381f7c65042e5f72859f28e1cc5718d5da962eda9bbb1b6bf6c4afce5b94ee1ff7e2a3f15cf9e52b136a89dc5dabf23e3136b636d7fdd24657e7c5ab980ff7b2ab7f602fe4fbbe053a8dc5a7e17b07ab54f4771e1d6f07b6d47ceb7764fdfb2af32d6c5484af1cb75ca7f8a7c166be70fc92ce547715c83fcc253fdf006b7e31c2e1dc5718def1dd7b85a25758bf7dfa9a4f0cb5f81f80e4b2e26f8ba5628e26f8d677b3788a328ef8c66cfa6eece4fb3c95d8aa7ef4ce257985f406e7689afa9bbfd66bf9824491287d87118e2105f1c8621c61f088661ce39e70fcc37ccecdde3af3eee7af5d4ddf747bcaf06c87d8164177ef9b81c20bf7c75dc9f8fb20973e66580cc3cf9e6dfd3f707fb66ced9fd99876afdeb65ced9fd32e663e6c33ebf80901f7361ec5814b1882f1645d1f5b097ef9bf7eb5596df3abf5d86df26c5bcc9d7e9e5bb023a14e003c761a16141da587c80250b16285e121ea4f030c5c38a303a0a7053440f3be45065072bdd12a2213becd86168a68a9b1d68e60e5f74f062ea90840e3ed8e0c5a3c0c10d6cf0a50639e0724092438f1c72e8c941867e2ae4e269bf90d32ec773daf18058b4e979ec0bfd3ca13d2e65732c13fa4dbc5dee575eae0a7d4a999e95d2a54f36d4e0ee51d8900377c7c10d37dcfd063724b9bb0d721081baf174b51ba0b8fb971bb2b87b0d72b04ed0a427160d52ab621593e4428b23ef9221de03e58898dbed61030dd30633f419292ad83022000c025a70937810c004028ef01e284720008bbbfb0d96ee78df24ddb5298bd3f1565e13fbd42a2d29e176289aae3f699b5b6945961e6849a949bafb252241381d0f89c8c378251d13dae67ec7fb27ba747d76c7cb3db54ed0a4a5dbca6bdaa53dd61d2fc79ac004a7e3e9a8d026f6dbdca7b7dceed3da0bb56c4ef73ba9dc930b18494b4a4b9f030929470e1b0e1ecfa28f04070e27bc5a8e5a53112223459e3019f1110489cd07525aeb41c4e646c821e3b64ba9744d4ebbdcd36d87ae4c2bef977e84a4a8bea592fa95f73f4b321ec7d3fea9c9b3e92e17b5a66d8afb259c8ef7c4a6eb53bbf444d7ded235877b5cbaf252265efb441ff4494f94442bb2847ebb4ba9a6529689eac80be556544775cb3d61739f7b242fc41a4977bff23e7d82fe2e073b83ea83fe6789486989e6b4d3e59e9a7cbae3e19e0d92a1545ba2fd8c0f4aa372abd2d2032dfd243dd2129bb4447b56c607c9505a4a9dd0a85cba4afdd2129152d252da1444fb5d6ea92643e9613c91d2c3f8a487f1b567c1e285562a29d4694575bf44e34718e17f683964cca0c28184d4c4639242c9b14b3cf6977068ba22212d3d9aab7a5cfa42bb5c2a25458573da3d61fa1deff64c60bcd0eab4a24fb71d2ff7299b6bb2a64f6d9117c2a55539b449daa443591ddab2e8ad4dd9342ab74a7dbba37a564dd7677769cb32a12bef9b726dae29c5edd014b7f27e977bb2439376298e975b5329de03e17229cbd3f1f8a62240491e894ddbdc7ac2bf78f691581c9a1af917cf3a41a3943e5d9568451e89c70be19e58f489c9d2bf78a196c73382ded2166dd95b130fb7a20fd4e35fa0bd4023c38116535c30c5003d18316535a7c8047001014811c019830b6298400c3d2a3c30a904808a9019801104800d400e0c5c60880243d20b4378a187179404f0840044208425559a5411526594e10132a820839100869093020ff488b1a2850724985688acdc1948304301cc1996cc1044801b10c00802b440002404900d200503e821862031c406e064004c0388a9b2832a4358196186020ba8e2802b364c2b4e58c9625a9192f9800d01e8c04a09365e030c6a98a18623660180e0c2cd022c718002ac508020546a4043181a80a0a1061a7234ccaec4e08a952b3c2306b0c9ca2703f49091db0036dcdd5d10020753f8a0b9bbb7d0c2121f37a44421a587981f6ae829d19b6283287a347a9f89d5e38a0a1f40dc5b5e125c0a25a743736d6e67db27fc9a4abd8c19cf52e9a43eb7b63b345d53283996e953164dd7db2ec7ba884adb1cafbda14d4cbcc7e9d2275c9a6b5a53a9177a72ca3dfd93b64d5729f4796d9118b61dfabbdcb3ecbf108b93a27a202127a1f4819a78543c226c941334e9013004a505ee4e03276812007c004011779f01bb9da04900f0e2ee33609da049564e585959b1707728a2687797419428778fc12dc7a235258a802204941caa407122b5e43d508e80a204e5080a0d8a0c8a8b0a299e7c319f38e13d508eb0319f28e1ee9e7b4a999e34edd25dae5d53a96773b6175a4a773c224b3bdea7513cd649daa2406c9b5bd3a73675e2b5ff64e5b5b7b4ea713bde2d65593697e6341315ab3fadcab5e84e28a5d2a155ffe8128bde3e65caed72bfe3e55a5ed4eb7237f49fe852a89c8ea6431f5d9fdadff17e87de9e45df29c7f44fd6b4eadbd4e9792ddb5415822a05540d7177183c10af69675ba58ae0b8a5499aec2633eeeee527078e5b9ae4816866132f4da8b8fb13312c7e7042c3dd5fb0e3e5da2aa02a1def8172041514b2a31f50152184494565a6e7022a274f5448f0eda5800a874905e43d508ea032ef8c942a77a19fa51f23484848965674e535ed6c4dbb9cd04fd00d28e8d925232e943c8c57d2a647784dbbdcd207b52b2af52cfabb140a057a8243d355d7647b2129de2a25f583b6688f07c2d9909090d070dcd2242c13152bf4b3f4248562c2ee7268bbe3dd90909a8ad09e0d3a92b6b9b5c9d28fd2cfd20f11adc8d23f69734e6eb45f42aaf5e00505e174bc5f523af2305e8956e4a749baa33deb82dde53e2a6d73ff7443d31e4becb7a853ba3a39a1ff64c7a6ba148743d3754785e3dd8274e88e976b73381cfa4b4a82702bfab47444e8079706a5b71dba5bd32a9e13ed83968c2c35f9a0ff5f773c56a7435f68e9c7c8c378254b4b4b9fa64d423f3429746db2a312faa1b5a993d00f8d45426ad2a5473ed5e5a4a27837de6e6969e99158544725c5930ae2b5542a1a953635e5a47ee5352da56913132768d4d2b72c2feadb3575daf174cfdb21d9f1d8dce661a306d10c21a3346d4ad3a6a50f5a73693a43c691d0510f5b9374d724ddade8fa3f6c8e7da24377e8b3e98a524db1bfcb45d19ea54007be868c194243ffe28d3c8ca7514443c8e891a05634eae9b64b6b6c5aa54bd9a8dd9ade76bc1bcb94fb346d124a8f7c8e1c48703415c19103070fa1a51f2529d1032dfd18a115597a1c9aae4ff44847a4a8a0783c5d10af7d2913d6b4a9a5e231a1dfc44b7168d43bed7229d3b33924a7745d4a99d07f21962aea532774e5b5ec2fc978187f2495e2fd1a94ee8afc2879187fe461bc115a111d5513cba6b71b15fb4db95f5a7ab6cd45f978a1ff1d4f8aead9dca74f6dcaf29e9a2c2d7dd00b2d15496f2bef07121292a5a82596ea9fe87428d50e8d7a5caa7b923eb57fe3966bcaad6992175a7a6251dd91251d6e873ee156f497703b9435c23eb1a86ec7cbed728fdba1ac0bb4457be0f68dc7b2e89ab6bafd4c54acd0121315bbf44d3c262af6858458262af659174f742c152f77cbe9d0a867733b54a7e3ad413bde8e456fbb1c9b034a99fe896ef72d6f87e4034911222fb4a65254ece3d23565c2246ae535fdac3c1dfaa2e5ed5ed052a61d4fa7436fbfb4f42c152f5795ae52b8b46a7da47697463d4195d067d15f53dc2e651f1d6109074b2c5842c2c409b405136d01da01740226132a984c261c321286a02ac0e5704538f3b6c20d07d30d98ae30ed68526a7ad134a64c98a914f3d6835b0ee9515ae2605080053a3013833032928613059c823455c0e9074e3b7852329f663c6521e08c0c8478a281d3019caa3c7171227fdc6c82018e024f31c48019420f006e54e005aa0aa61a23e702337723f7ba162e483a0413ea092816985042402900ca06757349e4a0a843507b50af66789082eea8894a1356540ca28c88aa8a72e988a06342470053a7c39432794f983c0898bc26bc295e91a81d268f86379a3b16e844b0d482b99b61676347236593f261ae33533d98ba80393535c5640ac7d4cd4c0c5698ca5259a498d6a575896cc739e3c310dbc4eac8720cb102611dc12ac3aa6342c508132526472930b9c1b1e0858521762cdccce0a25aa1b7c2510b5cb0f828c092a325a30e2a605141ca4710297c49818b04dcdd53b841e18b8f2deeee2828f1a164082536f878c2dd5d899ff0c5470d4ee861791f3e58f2c3ea74e8eb74b926b46f53365d7fe57d9bb2b8340add41b1e8b36813de5393f686ae6dba02b52a2c79a147ff09d3ef5f61890a4b5e28874ae170282e4dd72674852540404c54ac0a4b5e88d7feef726854146f45736b8b4aa5eb03e1d220262af6f79b4662b83b10374bf802c5ab3252849127ee3823464ec04475e4080d97e270db3c829a4718b0ee4c308f3c71e4c8cc1332eeb8d48889e4dd71a94e97136222b9392e5dd154c7c344e283b7e911278ed082a5041b666c0c29814acf49094f4b4434a0a4841e384a002ae1a604b30407236be14a5f94bcccbc80082526dc7dd7a448cb23c26e26aa23b8340a25d2f2883c69a5a27cf048d31f3c224fa06eb9f6c82eadca0121a14d9d5614c90fd60813d591d605236f4da1fc13a64f71b9aa5c2b1595b62dfabfa35a6392a6308900b9a72d93945dd39657c5a4bdeda89a521c931d9aea6e3268516cfa3fb4262911daeb50aaf6863e5bf53f34a1a85ccba6cf43426a2aa2c48328bdedd096ddd9929ab8fb0d379370c8d0c4984908489a22d4b23927e9b3bc6779bb74c7fb964553ddb7e8afbca6b4094fa7433fea772b2f8ae9a3a8a272bb5cd4efd0a7f65936d57d0a85b66cdaf2aa703b1e13afea9fa0522d2fc90bade8a74cdfb254492fd4a44bd96f579e148f17623f6d5fe8c98d0d4ad76f79bb1d7afb1762713baaa67f72a2e2edd24fabd0a71b9bb6bcaa6fe235f1fe714b46961e7d5cdaee52365da57e9773caadbc5f859c76bcb5c9b3ff6bda36a1bfbed32e875b51a774fd1c2e5d957e88fb0dd5499924547177a7dd2e354950a26d794984b83bdaa23d5836ddb5426cf88f7697e66eb9a6262a766763e2dee6a298a88e4899b0a6bb1d951153480bad29a4019eb6282e87dba13c703d8420e1dea44b8f085981d75a962ac9148203c7ed78b527a8923984746fc21b3204072ec5a5e9cd898f28aaa89c1334c91c7263d39697e4c90e4de2f1900c79c15922e69020d29697848724d531a13b1348e841c210cd24414682cb46c514362f314ca68861409213b622b4d87ab0e560b3626b754b4a6c437ad86800d9de7663fba890e24b102f419c308328e1be4ba39cd0f5498a09bbe3a569958e7763c2ae424c391d12924e874aad28131c0e4dd9154d75b7964da9a6d295892ebdedd05b9ae2724cda1d15ef764399b429cbe27469ae89499bb24e382a9589548e894e978362a26299e07028d32e65a26299b439aaa928266dcaa62dd52d7592a62c4f77d3a12c4f8ab74a3149ab78ab9414cae670eedec2933ca9052c58816c088d8f0adc9d706f22058e821100e96122e90426e832a3072cb82c51021228213bead1231041089200c18c0a6e3891f8c0111ee8400c169ee7c0162336a0811bf01491010c5c80882b2c2b2c9054010a6881c1ce042410812120301325099d0764112208205430fbc1872c073420068b8b9c1e18b0001eb074c149c249ae0019d9909b2410d82425ed90a483113549380b4d0eeeee3824c06f9019b120b3210901eeee0730c00f33351480862b5666547045668624020ca0ca02626488818a396306330030bce0ee3ec505186252927a582d98335a9894a41ed655d42b8a1500a03c1941005c4e929a5451993565cbae535232314c7177d2799ee43b8fd2cdb080a79504a57a6ec62a067f726a4addcd1947dc3de9e6d8b133cd402d00755f7267c282afe0ee3e438883bec455f0141c0525337a247912136620253912777cc4dddd8d9833884a50c245dc7d4650927bd210779fd1c2497077f720eeee407ecc78771feedee3e3e14ebb1c14da1e71dae576b924a71caba3c2a54fb723a991276daedda5389b0ebde5565ecbe682b04fd6b48a7763733d7838aa23a8146e87ae4052a6a834894dd3b6cd4545f178e8d05b6ef7744b91e872b71d158f47caa24f4ab956479594de76a80eadb1e92d87dbd9a4724fac5414dab24c68ad35e188bbdfb8e399bb0bf199aa23a6fec6ed1ffdb40a7d7af6966377b9b57592be0e8d5a7944ee95019e6e2440047eaf7438bad17bc0d3bd6201114841a4e02fd68f1336bafcf870b10260c3911028f074b1a848e248c704546e6f004a4639341157ca0837454b1d70e2b660e3440d2c2788b82e9c4e6860298214774ace86195b921cdd178820858c2736f037005f9e280c03c62b803d04d17f903b00175e8674c8d871ad54608cc1c2095bae01624a4257af246e029a7a413a4479b9587a1004a8881c1c5d1fa8f002a305302e57024e28bd20c2112b77033c00f322274ac9258108b6fcd868d2bb4f54f185a604cb970b04137c70d144025e708c0682b438c0114ee019296cf1a1c00a88c04b0c20d5c30498273cc30b1f584c010b8249606389c5ccefc83828f8a065c838ca554670394bc0b1946d70c48997fa41e5a382e2886706a521408d64cb8a07a4e004f80318f80e0952bf519ce47054e88e17954b9950a61dba3ab9fb9501073c3f2b88230877bf3e2ce007a5990c2461e4ee57070d2a14b112830e45b8fbed40c63a01094c407972771c00163205c8c04704237077fc831cb02001213e70430edc1d0ff1a1630632b8902108ee8e6966e0a20304d8508409dc1d4c8001c05c2690aad8e1ee178a1f5cb1a20201323072f78cc39278c3d308d427dc9dc68d271594e278bba054873e49b93b26d2218948777722afed1db714c7e3b1c212201596bc904e973679167d20a75dae65d75cd337f16c2f84cbe18478bb273a1d55d3df9e4d71dfc4fb37637071c7a56daa938ae2f13087503087724c130970692b45b5ae69bbb33ddd5ab41623891844f8e0ee1ec30677f7185452a71d6a44a8655327272af6db27a75cd4a7524f5a16fdf4a9055a61890a4b3e7d6aa3a89c56f4a9fdb4e51179a118d7dd517053c807f7234d52224236cc9035984255dcddc11a66582084356dd3287445a5988e888464080d05dd9ad620192914aa63f20982e2facd78b6424d87bc3029a0604b07b23c61f24902c1082e20824c8f49025cf851a54bcdb7a407480890d34208bee8800a0b90c0012f058c3980094908c2141f7039410f3880350510478ee8a1811e7860ab5460821b65046ef00413eb53841cb094c8266003113a5000d1860661057684494194295a54608143ae073b2ab21bc278f1c9b941ee08580b22e0c40044c801a9624b0c088aecc00a220414a899519e033a9d83192fc8bde000b32337a83f889257e87dc0ca0932381460c98b025ca0022b59349e95f108021de05971ab020510f8c19727168004013b5aa51680b8c1888966024544761051edc88193471f62d08014d070f464a475a56887b3f7c20f4f648803930858292001a2459c0acac107b09ea9116c40edf9316286268484300117e00d24a071c3e9e2091db64c11e304266c4066e30421543b206086c409125dce060bf8c08d560e3fd0c129002368c9e203092190882209282bf0d0001f0a08a20312c4e60fe001480e31107372683284510042e0eaa283119f5b0c5507191338708109948001080baafaa349cba809110acc0becb440831baee0845eb0c310b09890011676135b64b8082a2103389a50e00a8743012ee5b68005705b18f2196e0bd9c17bef2b08300481e1452b7c0d6d1eefb4cbed9c7247de089bb6ed7e25408eb870e5cf841c0a0d0d11f1a4561e8fd7a5edce16e3223f13727833944384aea88ec7a3ed0e3d52ba44992119d1e6815de31113f04cf89990c3d65049b400378164b8fb959b30b478cf0b48bce70520ef79e1f39e2945b8d00a4b5a9e8e05c2ed72502a2c7921367d62511dfb698bde723a292a1c2e6d732c4f2ac5b5bbb42a7d36f784e4855a9e8efd9f5bae29774ba5d820dc2e07457bdc0efd252629bb944a49a14fbf84dbe5a0967e9756e59c9a788f4bdb952795aecffb1dfa6ceed3357d42f2309ab83b113761fcbc604206d70119dc063cbdedd2a6a6222f8a305f08f1a20777772bee5e829b3f6cdc5b3637e4c90a4bda9465a2c2929c4e4a0a6d9212792129a1f57769caf42cfaf46dcafe13f4db5dbaae543cfe8709c705a782a8048c9226a220269d4268648404000000d31340303820140c46a3e178400e2451760314000b8cba5074489d894912a59031861842000c0018001800009a0634006fc019b1dc45e9feceeeb80f7da4d53866f22edf73cc32103a1d43870b1677e3f2cb5cf7655a796bf01b1ed00b00fa4327fe579bf2e5797f4c536d2d7eeaf66360b8d8fdd6f6eb71ce9863c9809923dfd413eb7f9f399597f17859593c9419f462d7fc2d7b6c45ae2c0466f474a7e4b4fef2c6ca0908153dadfd0fbdb0591ad4bf8b9e2e7a2df5c6e96149afde81f1c8102bdfca50d3a745513e426522aaefadf164f7b7030bd82f5650ba00a3f827e30a8d7787ab1095352a4a406e8d98b76aab2ad36645519797b9e41f28c5d229925c715e16cec31c1161ef347fbefbaa8ab79c5a4d43f8aa8e75aca8f314d844bec9bf69d0bb4b615f7522586d6f5d33bff9427ec28ef0f4cc2781ffa7af40140fe33104e359bba1d5685803b51362436ef1cd21c8b5633d3b64626b7a6760a1286cd4fa214d686fc23167d41c6d7688f4e67919b1df5fe50f6701943f8ed1f37071b51973b7da9d118fbb362c42e4fa7b93f95da8d3e67be79747abd1ecdeece7fea5fc38a842a4664b1b86ef885a55485a2c708ad96716071c0aacb2c903459e2397cab94098a4dd94f8df284cde0cb154f4665d14c3bf6a111ec964a20c4786e697bb969f6228d418c6eb4e4e5ccba4ea1d6f2eac2cb0e0d7088515083734f9ca6590e0eec60cc9fef4213a86da800ea839849e768095ddbcf22e8a1117a277855118049b5b00844bbe366e4cb9f36f968c836f1873692ed5803bd48463e863982851bb92a7c8005134144f5e1f8f5ee3f34cf08ea8ea081f9481f6f8bc55ef90b5b2e8abb46435081ffd215fbd9fcc7635abac9d37ef1738da852847eb0b2354d7961080be11e7430c142c818e0624ba56ba462a24afc425f1065c6174ae8acb61bc2aba3453f8bb20ad3386d4320fe09fdfc3359bf9888ce5c873b82a0d19d9f989cd12736ff737b8c9dd14cbbfa15ab130f1fa12e02e12247eb6c8038c12acfb5a84ae52312c67f12474843739ce8a88cf952a2691d950723fa3c4c9cd8a2e82d1be2a02921e75cabd8edddc26e30b892256f86c5c3f65b230c74f60a3380f3df3059d6ae66cb1b5231915c34826c02670beee894ecbe887df252811e4d37051c1195abf115dc28620c45ddc73d4e074aaf5a606d568c6d922b12de2bb4a5c530fa13c1dc3029031019aec64432a829b75f723f8a50f7694d702c8e35e2d5b06eb12b915a7dc310db5fb9dd0949a828b7553c9a68adeeebad0e562a23ea04ba7608e0170c273becc63bb6376e128410e60ddce880d43214b866f126e310ee3cdd2c3f75b3301b6ac759157ca1004a6a369a0f8c8ae3c554b90f4a0b4a165f0da47410007e3f9db09808a032cc1b3538d6427f9641872c100dca758b3ce1489d152247e482496cbafbfff745ac48efebe4bc2f77db75892f81bc3b0688cc26a48258d69d5ea5979a136f49b5f7a6fc221adc206724ad792aa4e1df652860f34a16da8efa2cc9e1b05e3de609b63eb364461c72e507bd4cd676b899e7b131271049ea0daa560bc3448b74cfc297975b571e985195041ed3cbe64c800e4dab69960bbcdeb1a7bd6f76789578147ddfd04f2a69e1f0da931e5708940bbfc2bba5191426c595b022cf285675a5af0742a9326dc842ac7e4bfb0c707576823917786f63769bd98e4bfc66caa533f7a4ecb6430ba76dcf9963a10421d072d1eb0cfc7242869a89a9d1f7cb37375b4b378757d6eeea550973a6611f85d1c9a3f3bc511d48a968126c884083cfe9601f7043fd680c4b69ffb9bfaa84e1a31542e3ce9e08d1984217dd7bd16b3ed7fdb66be4fb9a1ea54fec0cd3548a6ac5780328f29b95a36be643e159cbdadce50c5c93b03ecfb1a9e39baa312c31a2f5c5950b1af201a301ea58926871e9b5046e6405a7af549ad2f02e097555690a2adbb2c13befadf23e2e43ef4bd9dbf7d0345546f00ef69774213a29ac0fa47890d1a9150f3e1afa7b289712a25ce65d2d584f4f2708f3d52209036f10e352d6f4c529883fd87b0b0259a1c55002817447a1b04bddfe3e76e5f7903efeb59edef68255e69a75d50bef58eb49c4d37e80dd987bbe57b3f7399f9b4d2c4abea38271bdb1187c6e212c343e5fe747ab843ac9c64df56a4cfce30221adecd2e96371d4786b84686a75b1c637bfbab69ec54bebca11438f3239f45ac9a9ab8c64bfb1177bd347776de36da16af15df7394961dfb46fa8dfddff169327782b4d985ba31bce73d28cbdd4e349eccb3d6814f8e8eb1dd9890aecad76fc2e42be2e39458ef6decf9de95367c35926272bbe6e6794dc1bf95370f602b835e7e0cee1be19533316eefaf6bc1f80ad7bbb0660f85cfca46d01cb29d8eb0790e165a9ebf3aad53897237f3145b9d2337f72e6a143dfa0dc8a15cf8af27eb6c04f727ca6e76fc99f46d2497c2abf1a5d363ecf7ad30e52df13858de5206ef81fe7d5b9e5f87e4f91440ff227f3f0b238f4fd91fc2783f06ef032efebe5f36676712e166178c6cab3eee8edaf12e33978700ea8542df6d32b9a07f1e32d788fa9665f6039f0f0758b969c613894846cfe62b294e9dd639a6b417fe8ef7ceb6d976d69a8f58faf2f91e40d5db262cf52391b3fb746982782dc2571a3444e6fd7fa7b927c34f1708e28aa75c27909cd9d23f7af457791ebefd82ddc67c367452659ac5ca993c5a13473d9650a83eace716ebf844bcea07cc6ffbf145ab6b0ec5c498d4dd2628ae7e9e13852f65093cb96daa35974accfab00a77692b30fed60856952788ab39f98c6460bceb673195aa60cfa1b1942aa1070400f1c1fb0d1e4c8827193651a9ce8ce0fd61dc8bd6d4569b9403d2af44a88b27bc510718200828be9be2e8889d3b22f794c68d5eec4c123bc493dd856402fcd98cd136f9ec8c5f64ff475c6681a003ba7ea06f6662a9f78789026f1d7a10a6abb3b18f083c0a803447245f19c4775ebe5ff2653cc54bf1e1633b869f2238cd4aef7d21e067f2e6db512977924330c6b430fed39c4fd9f5ed5ca86188d6697f4601763eb61b3caf379f4baf9b90af159b5f688719e1f2a6ec17bbb35c54649b2f44066465f2dc7e0e312726b8764b1a05af01efe9f10a914fac6c10b49615e1facd12a2a182744a26a74223c1d3c44134218eef5c9c54daf91392d8abb543d4293fb7901564657b819a401140b09a4ead2cd90e9fcea6643494258d74c3d09a5b6e8cb41c5aa36e576125e48f64901e0001450a1a465bdafa9ff384d3dd9e37847df3cb72be6d8cfb16e3bfdad70479bf28cffec396bf8342390495c68c5b89e74fe2e38524bed35008ca0523f0b05c79ae7c751bd56c77f6b4820c205df4923c36813bda1ef68facb71d76aeaff4e0a12b4a537872e05886ef0fdc21787ed3942680f20e11bc8051f5cacca4f929457794f6e56a8b6b15e8ee5e878fd87cc965b288b0a498172b70f690966ac6ff8da1d2031eb80ba11fcaef451fcb2a7be6af6e922b325f092dd443a3c8238510f44687d5b3cf7c817f3e1c764cbcef2e1a4b50a3e2bbde160e33525bdd1a251c9bad0d1c20cb28f0a8d80f103aa9ad6b2f3c28fe27cd9704f7e408f08c81768d5b85741340b8ea8e9d510b0eea4d55bc9c4dddbd4ce2b12371f79d1016c107d08a81d5093accf92860ef1650e6dd505d5eba04f936bc86f1c04ac1982b98e13488c1141ff8714e26668b12b6939bb29c6c569a97bd0af8d5747c29ecc438724ecb092cbd91bc47626c9d821a06b9d36619c0841374514950c447c9f3f592355a42826ebaf5cd6b5cc9cd2f1a0f3c30dce214ae40094f4e26ab0ba9c7c9f9bc5d81a47395448ff498beb683958a9d23bc48e6c511228e172528bebca95e585841c7d3bc5b8282fa93d6f9ca0e8f69c8fd4dd6dc9862d50d00ad300fefde0b47eee347781032d4efead853678e711c7da2b541029e8a4902b51ac955fa165d7bca5fb67f742cefa0d9aca03d62d49a758f54d79fda15ab1bb7e60dad189b415ab95acafd09e9677ba4ae072e7dfc7839b2f5b353543d6a58174d49ebe8ffc25b683327835d7206f06878b20197ceb2e6e957004b72695b6ff31094094a816c59f8daebf7a31596f572bc0f40a6ffc8c0903d42145ecc56e7309b9e8ecaa0d0ddc2fba83e1a32f157ca18e6d10358a34157f3f7b50636b44aab40c123f2283792873576f1fe66a2cea012859980a4dd653a735fd0f3a08e533a956dcd54767eeddc7a7460176ab916a8caa530147246e5746805927f66e91c78d8c065e227bc9e4a9ba5e6a8406525a3cab2d971dd319ebd894381be04384891728a7bf23c23945d4483d03a5e9dd3d9de24a3f448c391c372b558ae04b3c5ba9d34d591c64b049a6dd9276cabc0f8f8fa853e4ddc7b620a13f319fd9508893f693f1b389cc41cbb895c8c4dbac4b1b97ec171011fe817ee5b7ec0eade6628a6814f55db400741d64b49db95268e10d3bcbd302362c80476ad5a46fc83513ad36215d830fab5c56a2de10dbd3860dc67deea255691cff0488bfc1ac6ec5f93704d845edd521db48d61de21652551e65cc225fcb21f05e0f327c9c43a3beffa28cd5864a2dde8b53260e51fe4269c189ebc65ddb37789c6854284edf812874f1eadc61550799bbb545f1e398a259a9a7251ab68b78c0532416c0b098042ee9c550be97f4c739bee93fc8fd6212aefea0821b2c2ffe1aeb1c27859753d1dff065e89b9402a841bf458da383fe9dd0fa15f7b2136d017f76e754bbc1f850c3f5c91ad465162fa304ce7287e4e21defda5b8fb5c931580b1b9c98a1a4fe393073a2d0e48c90f3dc1564f96bd155cf30958b60ff7129e13a666a93d9b69f9dc9defcd7b5f606121e80bab740a4e55175c59863d47126e7031def04d9f420221eadc45296965a2ccb2dad3c5dcecee2c1176d7744e5fc598dbb657dd1ce0767b761982fc1578fbe9b26d14f86ced76eb84c8a105ca302aad791d363964b2db364fbe5ed8271a29662b780bfc9cb167631f7f4166416986ee785057347c1f09ffd42a9a989acbd8bd78ee13f39ec5f1c6d9ecd45fb5542dabfa340e0d0d1df0da774f3c68f08252b2c1ce1af5d7db9e57d99df519606819e8c1c462a57c3e99bc7241a3c5600d7ffcccfbbc648418d7cdeb99099cd6e1318a3c3f9723f4829576d63fbfe96aed31b099e615a1fca6d175339e23888524476e4ed17eafccf50a1b61a98a2c67c4ca97857f11def685c5bc0d9daf466a4cbe1f232d995633a7d3b57a15eb6b2c7f1ae6e39291ad85bbcdbf9627b29ec9d983493b2c73d3daa8e703d67dead058e5d26cd633acd758cf77d88ece573b33f4fe3df978deae6b29e91a38c638a37e29f50fa83c02489e29780bcaddc1410cbd8f34f3f42d86f313e0e12c7dd4d30174029d6bae3704a339235f34656b80ff8106f21f7ef450ac9e0055dedefc9375af4f7aab2e07fcabd8b11dc25b2243ca0ff680943e8b40ec1a3e69ec54f8acfc0f42d1bcfdfe734317c4f669df377c5c5fed8168111139d67e78cf4e7e8b9d35847352e4f505cbb7839ee2cd2d303733feaedbb91ef6734efdb25d7cea2302610cac758fb3ca8fcf659936e7309ef0156fcdcbd8e5d2608f08d3feedf10c85c97bd432fd7b1b7fff71b05d803a86c01ff30b24be4daff305d0ef6e4c6eff6ab75d8305fff3d68075c7c2d685383f603e5ba14606c803ac73ba808536e47be87c61c8bcd7fa3128e63dae6cfaa72ee5a37bf7ac53c6cf2f6d40bc3772a743c045009bf82d424a7c0d9a2089530c300487a89e7ab141953e881c76b83166b61dd4595ae88d0c8940aa647022fac82f274d90df00f148fbf4fa83f086c7c66432b65b903eb58b09ce9c81d52ff9903ec767dd6d620339dc53609001d0b1551b68cb9bf6f6c5727fd9ec8fb6b8545da61ebf24edb14e1d1305e90e497102b4147ddf07bbe5dc015e50b699241b8ceb4c366d7e4db117670871b3706185c4f5bc3ab79bdefa663c3801b1039de9b4260b82dbf2ff360c4aa83b3cda8e4cefd1495ce7af20aff516daa2b75ff94f50dd8ed45907c1dad229e1665cb4d3e5a3eb2cac33cc6b66dc9f5e89f2fcfba6a00f27be427aa1e6d5086cbfba8745df2a2f3aca670f715683a68bd80e6fb5cd012d34ef2dc8e5c9b781c3434d17000e3e1fdd6f15768bf8702581e08566cb830873c1d803473d81c0610ba5df1853d33b0e9bd0650e008378919a5542a65666f6338d37dda77fdc20fa7340b7ebd588dab7358e9476303e71b532a065f166c00807009262c9ebf243bc17e65637b779dacc45d962a4e35ce2cebd0d4a56a28415e80a1047287314257a8dd8be78de4f3faa5689dfd73e4ed5e7aa25708ca4b7d76e7b27aad142c6d3450cc4226ab280f28421f3270f8bab085cc9aa4abddc21a50297d839b8e23cc48ece5ec21cff383372e4d7bd0b7cedaedbeb3e304d7f8614fc9d1a1956b369ed13685916e4b7d4df5df1169675468c8764fa8ebf823022c9fd7401847ccbeb749354db4386fdd83da27ab06c7779274a21160d1145c19256e36e97bff3dd77551620787b7b4c76b3b6f24b50f760addc699f7cffd5f9e88148943a8fe42aa03b690e4a97d5cf55354210fb555f6e7a53c2bfdd0961a12664184d4d8457b919adb5252f8ab9b60b40f8fadb74bdc6cf2071f96c13c6af83eb45945f07fc99689501d2f1ab4b3953b734deb686e57bb93000f1e6f4085cf3e3fc8a68f8f5ffa9d7bdc448107891c303e5a9a2e027f46a30ff5b7831e01dc4fd1f277bf4fb157fb75f4c18e07b0d555c371feddf388b2a73f7735616c2a1958d0b1911d5c8601056cbc0f74db43019149e876604eed0c4a6c943c700671f90fb4b5a7a2ca83729ae614d74c91af94044c67b17cb8643266c031a2a17091b04c22f45be000be14e020bb7dea12d38a123c3c3a070ba1e57d40184d07ecdca9fa0598e5a97950bec286face5108a46232e38b80ec1ed572215a5098d780791cd97238d6a49cd3693debd0eb128886018c0da4d972112958bcd04ba84c029efd6c116466ceae4671a16a2b4a252a67c69b71c25551e37bbf8429325528ee2d98818f543cb1294b2c2947bb77d314ca1d43edab80a2288f35f929a4bd046e93778a6ff30c25298da39b851ae3877902bee584f5083c57a4c3c13b9682f85a727b39094d2bd2c74cec5437b2a8856f7a2860651b43cbe1b87df695a82324a8934f345bbc528ad6ce6ee6bc946624f94e5725b5bf30c25ba482f4b48381b90953bae4020e25ff11d8c06a3685db8004505f38558bbfd223a7f3b48cd18ff4c7207353a0d4d68863829002aba719015195584f0486d808184c52bf00ce24e024b8e8b2a10439c71f6035537ffa32211242f92bfa321eb069bf3b1d34ed982d71cd9f1328392bf61c0a13dcba896aff2a6d1ba9227a2d425f23f28a0cdf1dea157a85d6f2de8182444bf1ab663184365f5f2d182a0748700c69d5eab23efe981844f081250ffd5ffa0dc5160e9469a3b938b584846644e69a4c81b8ae862e7f3d5460f3238782d3a3081513f245dff0632a7c8c85d89f0b2ac1745d7e9bf8e25f853219dd08464b1585f7197c8d82fca9279271a7ebf95e8908c4ee175e7f89d8fbda2cb6a09f2f748a7d255f63f3cd639c097c1f03af3458af99a4e8e555c5a813fe15c43e2bb77867533a3740772939d4a48ec732ee9dbbd87eebe94d9cd3e61df12c8f1688c8de1c5b3e6163898c236aacc1218138c1f2e4c559dbfb0ed2cb356fd029e8f994bf41bbedd3dfa32568679594f7eaf29465769add06b69dd3c868e016ebef6bfcb5b630ede4f85349a57bdf3883379f272c8987ac3eede37b679c7c79974ef190f5f76843637231fd93d0fa78d3f67bea7da4e6ac6e1cc91889c00bbfa2b7b656dffab77116db0937efbcdaa390005daf2655ae17134aa4733d59847afa389ec0eb8da75f9893fcacc77c2efa3540a06e88b08b6dfc4ea7be14ac9f1c16e18072358f081c994229f192615b677c9f852c0744fa5723b1ae3efbcda47517e55b5b33c33d09990c877a29e74b1b3e1c0fdb9d3b1b99ea4afaa90b9919e34d09f0cada365e547d561993fa350987ab605bfaf81fd9518d974c580630b3e8791b3893bbcb20adeddfff8d73c5dbffaa0f77dd9b9b5d1bb8b36f825b0f67aeeb7c7b74269756586e1be4ec0f37996af03c67300d0736dbc51486863510b7995fe8018f9ca17a40a29fd8de4f70247df044b028040f7ad6bbdea147cc3d6d2be8814dc1c9351e940eadec816fe38bedb3b3d7f34d1ffb1fa7939df7267a6984d6d97ce8f6bc7d1f6f2d278dd577f11099ce77da2746d20af01bb02d0b2c2e5ff5ad7a32e89b5bac0b2a03e6cb5d50146acfe55e85ab43dc0586c5797cd82e2f0dffd074635832c56696e6894267f5f9db1a68a5e328061c287d80398d8bec7946693f21af619e9e22ba6844edbfc0971834105820ba0ef272c16aa6506b78262e8d27bc2b600fa5db9b7de3d3848e8a89d2259eb58e40f335e7c32d0068ee5bf3f01942f7b6d37b2fa5c74788581ee3de0fe12ea9f5d0ce05695c0c12c00bf35ecec08ce3941caf47254f546cde83e5c6e4860cecd2687d76547d886fd2efd3f33c52da1f58c24d05f054ed05ee7b788c43eb5dc56109309355e4e97ce3c92b390a7f18d8b36f7cba6daf42d8ef03353313304f6c0b69d83ff89e091374ad48c77c537ecb43883fd191bed323be287a3e4980171d7d93e1829eb6c60bf973202b8c2bebe01b63d1f29a78f43b2385205dc73e8c993633367002e9b5ea179b1b4a7da7b521c146a4f98d224e159e4ffd8576f5474f80bddf107ccbd2e50fdc3a23cf75320f827497789ff70dd5dbff3bc0172650c1a347b10d5ed8044afb5678be8d5a1d815b1c0093d11870dd6a7277d48d5300b88c01a757d27d4b83d0ba0ea2519dd132aa69a35b0ee02267db0684b3ef926d5853f247bfb7824ee2083ffd603bf49ccde3302609e3303f3e1fff6301fc2d783bb920bd67b7d7f8677fa6741e6cefce1302c06e4722c9f8f01bf380a66737fa5df38a9fa0e8b3f8e7eddfe29a9b5cfd70ee0ba18fc5d82bfe318fc1d14895eb5826ec43e6cec1867ac41eccb62c3ba620f3e36e2156b402cca67ecad710b00464f077afcbaf14c4f5c3791e867a2178f5b16e8f9a9dd2e11a5392731b7859d9e8f6c5752d8381a4920361ca23786f0c87b91a01e9cb57919edc8bdf03298b582e828aa55152937785df9a2b9b566e8921604333a9b658e00162c748436f6cdaf36f3991b2df6ecfda5173d1505c717f434dc75d0be3e9e3905ff4f26c16486f3a28c8144c12195f74dea47b43742ffa257cf42bce74fa61b1192b5f76fec5ec35025caf46b4db74d3d8001d2c2ec2e963edde5e895277f63dcbe0f51f928f4b326bfbb0b4f55882d55c9370695f93e9768a59a97e61461cabe6ce588c7cacaaba66d878678c0e713fa278b451c455d3dd9e0c4e9794cfbc5c8afb664d3362ea923ddff3f93921f1a0c0637e5a9ca6691e6dc26e9dd4b2efae75263a7b13ddfa60de23df6570a0a8af1a8b01f71da49a2c6e03bc12be83e91cb1e0cb8cb3b0b176c9e3b74580976a300011b506fad18d5af746d20da7e435991f47e9f177676c459a930fb57a57f8923d12556ad2c9570079c2602084b1f74c6770295f03763135d99cab2201e1dfc444264e77cb9f4a6f89f1424732ef8c683f12497f0d711833dc82a4a44a7891fcafa7f8fdcadd055ed246b2d8391a556a076447dc0083b1406d2e40690ce281a24186706140f48d79e124ec382f81eb50b95dc05e78fb753c889af55375d9468cc01fae63d8b6e2f23e5387149f047e6536fb0e3311f8fc99dea5a6ef22b10388aeab985929eb28deb1e2b7973daa250390df0663dca8c4706425352df7fee47b92c01001539a73bd57e82bac7e6a7fe683cbe827fa751704f025aaf1aa83268dc8a10e960bdb1977ad1677a443b7a99aa6ccd054f3eea5f72528ca45fb8c18b9754717383c0745551fa14536548ffba5e43ee02ad478ba1b4ad68ac5677b289dfc604c079f26854258ae62926609ce24f743da93b19933fc81e4601b9671e8ec012f354d911add7ade5da6200323718d26883348c1cdb98d85b4e0ebc2e48e3e8bdc645f906b918a5dd2c9b7984b8f71a16c24774b313cbcbcded63c013517ed4f3dbd620b8a2e11843a1fd8b7f1520c288f5422226e22142d1c5539a5ea3a1760ee99a58391c4547a34c9bc7e4496f4cd4cc72e983991848f9c176c6f12f73c59a57964358ed0e738a44d73380e0a5ef011968fe660b28e4fd1e48f8656a96724988d83ff0262ebad51c4995976a77d0c800c7e696c0452c646b56e2cd9c2b458755788c4ff7672a3f01e1a0107c0dcff131cb3666e0ea5dd8fa71df8b0945824a78dbc45bd90243048cb4ead5a3136d6088d8b8ab5eb35c4e3a81537574c7b39f3f9268110cdd6cc5f8fc1ffd2614bb0ada559279e0e1b223673112cbe6921c6fb56c8763e7c012ac026cbb03a06ab4f8fa7d56b651b46e84568380fca4126312658a90a6eed0cbe3c79a5781c1d85816b59ac55be06ec1dfb2a67a2c719cff02237c9ded0bbb151c245f1dfa6e255320a846300d496e561e8633e290ed815268cb98f0eb6a188da66183649f653186a779059bfb80c47a7e738defa1804a58c8f25e6ec22ce0349017b6f302206f0f1c57f17c022b341e826f02747bf7bb8d4a27c4ec41a9e04e07668d4ccbb955cc7cf59ffa2c3b52f98ae2ba44502ec631f000ae0bebd91e382d68a60c240f824b31436dd710fc2193f3f945192618b15c7518a89b6d3b5833254216f4fa2d8326fdbcc5073b4f1a84afe4f24e9e5a6e8ea02a23cca54cccfaf4d55405dfb17c3985cc4463d5319a95ec708ef129d87361e02a929e888f7d083a3cf79bf032ce597f84e6e02b86f8b4af7ffcbd75cc436b844e7a86f7fd9943c7370b740f50bf7878e7fbad5808772f524e616513b38d95ec7d2044d14d22f049abffb52fa4a0bf944731b300e2820a3011210b614477c647098d38bcc9b37fb9207a8b3fa67c9013a49326d3249cf66e3445635797776a9bf22fb0c98023abd4cbf190a0a12c7db33e04c6759c59c8615479263e1c7c8077c855169bccc6c1c1ce72526d0a6ff066d445746b46c27361613127a6feb822cfeb30912bb0fcb972c17390edfd36dfd7a4b13c009460267a3e1ce9eb7b0db656d70d71693aa1d6843c54bb6f0afbb3e751936f909dfb185b50f84123272116d4adfd984b3e0b9b77d7b296a732c446e1f77101d0fd8f7c4bd72ee4e292ea13cc8c8dde3cbf768600de0a38821e9efc55b444edada4b9b8fc9661eac6a70afd4576ac297f902ecb2667bbd03441e8940cfd98e89b14ab4b514c68877a087960fd882d12947c6ea92882832cb8c00020c42017d4370789edab1ad21777161b58fc3f9e69002405c7ec036edceeb32e3534f67e9d87603e1f82c70fa3d274dae219a7ab99a71704c8397bbeadc4c87fc65201d55dd60aeec84dc0ddc98faefdfcf3630e830474a1914a36d65cc8bea3c247bf1c352cbe43803e6d53c69f29bd2fef9b60d8d8b42cb09e6906cc832d5976ffc843558f675f92550bc192822d37e9abb377648ef042358e7df91dfbeb266d6a99a9a7ba3889ad5a92c8748264be42942d744db8b07ed1520b4948d6a6874fb9a4033d4d089ea3835e06a696c8e0548b4ae25f58ded7bcfc653f621e802d5637f5cac0e8420bcf59e22c2ec322622f3d84365f76df111225aba86170bd557d68901cdd4c1430c7b262ac0c8f1d97d5353ab5374e2ee6e8ca905a0b08373330ac0d3a458881b5e58d19dddff1aac6b4b9a722c50c0f15648ad8df1139c763aa514cfb95521c974b9bf6aaa8b7b19d4fb52ebef71760f4abcf26893c5d50fbc48af23f7de4a6b1b5641e378e60a038f5771a02379342bf93855ff1eab12af3119b3f37d0eaf5e3dd39f1976f1a3f376dc5442ff6fb581072915fc5a8c331d15fcd8ac9be8b4080abd99ece38d7bad33b162b2220690c097e8fdde931862d31d1ec2668e6b67b38ba023a60888edf7a577fd281ba17846852238330fd56168a7c04869bd2ddc39e9c23ca2d74454225e51f464d7e79b5460cd02f386e1dd4080ce358830f16e1163137257bfe7067e40fd028b6a197582ea21fab4ac0c6d0b894fbdb39743db6ca75b97ce42c55d3131e117eccb3d50046c8af4d69cdaf61ed36237178c694dea8ad2f695ecfbba0832a8b894bad6e877630fd13421c38d2350bafdde02a0ae300804b7c5044711b50406322366fc98ea897e2e282d13720ea4719ba95d4fda90331794453ccc43cf48a389911c8cb4b309802d0ff1a3ddf70464c1614306a5a4be0b4d98ca24911c225d87cd6c840cd163b1826ead0f0344448e3489cfc36594ac1104c3f430c621b9d666976f1b4a42a67b5a2e34fdfa3f9b0be5cec6f997c62f9a9769473dd8e1cc58f341b2ea56e1e6492fe1db432df8778f9726e7bd30c169763e45f615e240816f4773fac28085b9f5620c32880c434273c583bdacada2ce4d02082a9639b57648dec37cd8b2a613e6ccddbdc0ae2d25e1ad3113f12a7ac42842fec54e1645062fb6e76e10a4ec0158f204ceafd691c5fdd8a71995b7afcd7f1b2996f97717c3df46f0a22a55c0c2be9957f1f46e2062a133626bddb29ab4f1fe2a0dcd07ebd87416eac7364ca3af2579ab79db689154ced592abb9e865c90f1feae9ec989aef8e9b200cb5cc85fa37841f8384fc679ef2b0fd5ab36f2583038e764421665bbacf88fb37ae5d0b6b14ba353370296c023b4331441ba97fb27cdaab47c38619265ababa2e00d24f761dd25b7b9f1f6d3b1a21308357687ec45659c94bf9c0cf45d9d5ecb9be5b7d79d53107bef90638c8c1a6306b8186ddfc9bf014bee9684a21d5ac6acb3a4c7c4b4801c3fa8bd8a5cf0122b383776e1211673bc89f620e58f18c4f64905a4a457f20421243541bdf4e351953cc1000a23b722518ce22fa414fffd33e9463bba18508c329107b9c8f21fd4f81363351619387d3c5d553772c817d89647243d3d86238028532c5c96003d63ee78385dc4110b13460ae418f05472f5f680bc084c748cf08bb43b6468195d169fcf590438accc4b08a1c0807f059788bac37bd95a228a079bb3e280f8e70fd515fa4ba08502e3cf278418158a2f3f315fdeaf1c26422bd904ef8555c2724051405b9369bffaf4425bede88a4c1ceb16fd1baee17f84a831cf2ecc3f605c65b20228e243cb4a5481565d0f6eef3529b4830fee8eb39842f8b340d3c1ab2657076c7f233eae47be55a8367bcfdfd8b99d9e2d04fb69f926e40fff3805d8df9758d4a3caad84155df1946bec1f9bf30268829b12bfdacd7943861f3072661b84026e168c971bdd5129190e2213c298dbec05bf821085ca1c70fea33cb047ac29a0f1522172f2f7ba90a5a52f8dc0554c69ade9c27f6e1d50c1dce507226653cd6fb6e2fadb7c22b49ef721dc773aa57d166ba395039798d9b9bd3d92adcdb71a7dc1a2a1485bef5f1c37211f29b6b96d42fa4b490d3c002167a0679ea4162bd000b358be6498122e2a3446144dc6125ab0b0ab55dd8b3536a89edb8f7bcf0f30da645780ef004ad1d6de21ba02e89b2e80ff26678cc62d7a69428f6da570b50a3cf526c2d5335e0284eeb8068a07437afc1b6f5dad142108831bf5be7fe8c87c2c6a2ad54ab2222049185bc4f566f9e07399d6bb4eb26e51c12c470e878512778563cb2318fb7f72a00c091df46927bdc3ffa110afd21f2f549248674523a6a169bde734c3e50e0be027c2ed5701fbb39d52b6f1fbdd30cb8e40cf26006536109d68c080a67bb1074fa067377b7d334b4d4dd955bf2ca0a22f0b458eb8c5806ec7d190bf55922049f2fffda7fff25ffedf7a27ba7088882ed2a4d81c53110a6b582e97275718c0e6c8692a41a8692ea586f339089132f62f548029d5b6ccd59beb2e139d72f713560e9deca8fa1f6342e846e6e4a534898fcc8e8310368d5585d267bc83ba3678fc3f8c8da784afa1203b2b9448de2173a0c9d54afe817eaa25f0c537db006a02400c948e901be9198ec3dfca2a0d2c2d36c3467d1211e8d19ea90217deb07b574803e065a00584b88103570a31b3689ebc850e35741550fa895ace49fa03827311e8851c0fe847783a7cef19196f41e23b7185908b25624675e15919ccdadcdce18d11539fba5acde1ac0e4171bde55f8b1136e4ea95e42d16fca5e4c5e61462b346b2f89f3e38cc444f4724595decce37b827ba222477512ac4b9e8a2fb8c3feb26596dc0528a2af60483f6d40b21e723d1eb958f9d7f883901443354e441d3ccd886756f6ee359d163942479a7d289d76f38789e7db66a19a9eff8d77db735f0ebfde737daa224cc0cbb2757733d018bf0beb020a63b8f39acea45d1ddd02e140a3002b823d13cd4486d7b5488d0dd26d160899e2be0323ec1107ec893b3e9cf085b82b8dc0d89a2fd578ae7298357fb7524cb0439c15e405d3b6560c960176a45046d3120dd475c07948ccabed21444294f61dc42b53a609ab86007af69d5c191bc6fa74d3612860bd3e52068b70f515571eb67c8330622148d02921dcdae402faf7c34171761d9198d3c07ab1a269e62c64b450d4f8495a77baa99279af7441f947f71d7dc537dd8a4a79b7ba249792a9e5db4d10998d5e5a49163d5084606d23bd711f717943ad6363b57c478e38882decfb3fc7347cf0e2fed1184035a5f14c749d0b4150c1f55b5c8c5b4e98a9e0cf6f744c33fd39d9e79f321c0f278d182001d7c95b89922785ceed50e8c5906181bf823090018942bccc11b357a8c9dd0df99b2288ffd58e26903134f2c8982982b64001c302ad97c15dc5054c5b6d4236de00ded62a07618ee006263441caa6dd728cfb41ca342fe96f73352607b6865ebd33c930c3190b68b838a436a935e16668261e9bff47352150b3c821597494770df9bc7c058e7cfef682ea0241fd5d07a7e780bfb0f75055a32565046098b56f5a55888f39a1ca842c13042dc5686e88baa63272db4c09d8966244963b0476fd44162fc673c91ea1f70fa0cd0eb5899ae435b0a16a9a99dce9b5b0c0c0b30a00ab1f17cb6254ceb54001099dacd805279d17dc720b6e337ae737e61d11762bd80b407d91f7ee3411df589de0bfd9d759db4bafac825dab407eef6f37d365434784355bcd01c3ad9ed6f5450410493e0169e09229848cd6f7105de8da10bb105be9a09245064c60c06de5826348c4ff8a60787eec6127c5195f6b2e813c90bdcd76c5cead596bb8fe29bceed7188aab3273f5c54692b14b81b658af0e95eadf471313a4daa19021ec550a673a82156cf3b5f3bfb8c300a57ad04f2ea8240d31f9fe307ecb3641a6087815028120eae1483d328717f17546164b6752906b84e04b14982171005c0213538970e8678d25c6adf38926abb36dbb49c5fe52aed9fbfd32ce0e62668b5fd95fc9cb9b2327c5b578fc59f3f2371c022867bd7322da92a1d9f57a3ec08eea3da441cff12146f574df91431a607d853f411dce34eddf4ad016c0a3765dc1952515d5d1464ec79c2867e250402515e7c9deb451b166ab99d869f973bb4c8143cba1f4ec0423e5aa070a18990351cf28e6d57016ac3a716de6bceaf82ef6d0fc54f0716ae46050acabc3f8a23a14b66b2e9ad718e95c0651bfe3fd44ef491fe3ab063b56fb27caddca3ee0ee5688638c2f4e70104b1013e92bfd9fd6627df75e1d8e532ba21abcf0c822040c35708de713e375cb2c54ffded69bb8b8fddff6a5e5fddff48de1a0658f6f3be54e1cdd7a70de836cd032c1e4f3a3ba99e971e81bcc05abc3429a26c6ca7422e501fd6561bed67ab055bade55bf4f2f794186e28ff0fc52225af92440f9e8eea589de86501459e56cfb0dbc009c01058b549594701b12dc181efc46dc5fac0990faf0c53fb90e26da2caedef0f1dfc9ecf91085c2e9921184d5e08e8566a9caea61f823fd2997bfb74db18137ad07fd999a4678b7cfa675c629176cf9f79025783181110b68c023ade3837a41326888d48301d82183eb132c0cb08e820807e95b199034e340b8d204698632a3c143e1e2bfebd499d19144c5f7dc71c1bdf839f3b4f42b849858ffc7c1649fae785a592674816cc008a5ad505149b72b6f97bcf7382a4a66e801a437d58e558584281a4d5eb847e3d9d43d6410a780113553072625f0939c38c40f6c2a16f3489c048c9e0ca13a9deae52c88ce7617053401fc45d1b4de18ceb329628e5f4fbb08c12496b6aeb768139bc3229c44bbdecc974df5d6398b1a0fe617bfd87d777c18d22f89d6cf7e94ec49fc5d1a7d0961710ae8133c405ca2e034bb790b0152ae64d911936ea586c9a62a22c48b65be059c49abfeeeff627270dd14e981b5e252589d0eb5bfcea60fb06401a786a0b49569ad78806ef2da744038fefb4705f604d49502044a44cf927bad16adc41a27d5d85cbaa7cdf02f4e0bfbbda282ff0afbb28d1747d9ac5640bce82c22c43111b7865ede3126bd769c5ecc8efad590df504ae378dd9a07ae2ce473e26b1c937be5605be476b52b33698986b83428e57de7024fc3b7a6da5d83ba8506ce2bcd54ee1e49a4a195df532f2d68223928037c166abba5e9ce641d0cb7f258849dcf1789804bda0b3c3ea845e76ba54f9e96373b336a5182532a089d4571ac7fdeb81570e434afc1fb5383f94dd9f713f1df8df6787226d8c31a83b661c3b15b97c3dcb296b7c50d40b77dc3a6655a3ebcf1f551e35b3e68d5cdc93901706a36aedcdd41a7425a404488ce381ed389e139eb30b6b3d9617e8e58c85e33c723aca95b1f652749b4c80900428564b034c97c2f81a1354a65ddd14ff464b108d68dda371353afe74eeacd08d0bf9836910dc20b5bbe881ce8419c833b409cf4a8b0b2888e77e25434999f7b197df73069bbe21abb89f688f578af31728828139a17deb4c9610205c5f2df2bbeee3bec81e384ad735bb23072508768730b9dbd21f45a892b677ebeb43a0b1754a8ce8d75e2d820c39cc547918cd83af1a3abef74c91d2f2852e5526fb136b4ec058d8c4ee7c6502b9f9abc342fe91ed12d1f41739b69f3c2ff6e37860e86ac62dcfc02d1ebb050527c9922647322903d4e3cdd91c9b418ab262a58587ff5ddbc01636e7a3642ca8b58ae4853ae72e2a317f2b147a0c6c0d073df6f85e65b515f209dc3b1360a5422adb4b294552e85fd278df8d30944a551e2c1b4d82d632428f4f12925d4ff21e909e643447310966e03b50414921413243d464a57339a4d8dbd23cf7e43824e889005841ea4295f8237326aa1f346da99067dabfd629d1d1c596bdfcfdf765ef1d8ca644f7bc035405d8148612befb2a377c77a355b25554a6cb5c157cd44c664a692e428e87094b38377e27fb0855a7eebd1b0db25405ffb03ba26e0a5f9a6cb4fcfe234993273cfead42cb945005eb105ba3a39d7dbb113749c6b41f39c410ee03fcdbf71da1181f32f8807d56cfe502f76d90e61917a522e13514e2551fe5f3cc9cb2a6357ab9cf892d597ef27a2cf4342445e9a3c61ddf53f09c29a4b2fcf204de7311edabffacee36c991bf42148c1a54fa5336dab518f7164dce818ef80d308185db65646b5e082f02ba2db1b6c7b0c1be6a43e0482768c1e3ccc82cbc272ac24ae13b99bae50e8e393d0d91f738ceabe85026ce840558eb674f6db4bbcca123fc9bcc69c297b2a9348587d111d1a6ef1cfe894ce519a76d84958b784c0e0fe632368aea8f689282e00191874e9f3ca3d8eddf55c4cefb9a374e3699773957c5114cfc0aa4bc9097043f8053553ae30298a0a97e751fd8273bca2e2aa87fd97e47973932ce06577191be898be80815e5a401f35fbf6aa53e2dd1d9074ac57c9c2876a570bad728e842462d9f80992b050f2963aef36d4fffd538a346399c8aed4b94a8e561d448f18cd3589c4868191feedc7394ff3b60ec49653f2544543413f56de26b632ce70a0a1315c8e17a34862dffc8e026fd160a1832f96acf206bd3a6385c2fb811ce3ff8833de7a2a9f285d24fc049f60f6cdbe9a513020350918a8b538c1e8e1d7da4dd13bf348229e6a8108dda2211c458cbea16635831a2bbaa604821ed86e808e4806c6dd381a8cc9cab4c6784b5ed34f72d36f0da9974c547811750500e5eacf4f2996eec896e08a44a8459c0c000e7ef7ae7e4dac5adb41c92dbb6b21a0f2577e5329dc1d1446c177787797c6496cc4e7e8d7a901e82eff0fe810773caddc63c688e650b43bb656c7ddc207e91cf1d30904eb1e73e57198b035b43b401006b5ff1837a0c8c44483cce671bd245484eeb9084cbf5460add0811b8ec5f9aae06752cad7480a6fb49b069c1e835d7b12c1f3ff400d1b99fa0457b7f4fc1ceffb16e43ee08b5f2ae94dfcf36a4d3d48569752f11e4424e5060ff6fa6cbeef595fd792bfa06f2236c094863bf1ca7a196703531b5dc6ef3081dbd070fa683ee38bd1e3e679642734d075ab59b9186153dcc4b7bd48852981b44914d5664acd37ccfd8b884d40bb5ae09df699956a60aa8216983415814f992c47f54b2db783d20332a0d5a7ef3a124497786c73e24b5276e713be978f84f117aa91bdef31ab173bf3bb835f23ec510cd0f555b9ef24168bc966a7ad81f1177cba7df75f1c4b3bbe082daea2c8ece67899c911b36538265213f565bc8935b54e80c6abfb27c68d5077faef39ba947d069f018596d08d43a3d4c4931025161735b49087485327b44aabd441c7858afda368ee258a3dfe0cce68388f8c29e53c7765f2e95af5a18388f186f7d17321e47f56b92558e67e9493ec897a505e406d59864772d576abb43238e0667941c3de80752aa66c537015e185eeae7be6da7f9768fa09a2f50d0d1efed0b786bc2f8d57087156b5ec62a1f133490582f9bff6b1a15333fc91902e4402b38dbdcb44150e20b2648f5c5a521bbccefa56df5d675c5efe749e4d987409d69438b67c68fd82b6d4b0700852d9164c3a2de50143f870cb277b8e936c41626cd10c99a479ba692b6ddc041870778240909edfffee006e476514533b1a77b6830dc3899def710870768549fa576c2446b2d405131bf79b1ef489d8241416947b31c09b9056af87ba946a3b5702381c97e9bf3f5991d03b816bc55c000a2c8680c2c2b552a72fb1343b3281c86c1eac143119059ea44e850a499162ba052c64dd5a00194fe68b5ad1f230345a55c89bc94a5328ef23aacd0089fab09fbf67164fa095d760ee1a4d4cca785cb1ffd8c07faf0ae0e4a6c75f72015a28bd4041d02495f762b61c3cc21c857ddef37d80b596fcc44a13755de623ecc0006b9048e72112c85435e0a8268fcd30763477af84c8aa559ea1da6799f4e802a069c9d4cefe71105ddae674d7a9d252b2be81dddf4233c448f9dbf6d9a4fb634b9e99f80fabbc925836d4f5c1dbb35f848eec4bf5917b1a3d688279244dade55cd600c25d26ab12b52932a245e22afd8498d3a06ff0f2b01f58f555005d503a0a4d94983c1734874c053cd92e4d328887c49e2ca084cb425cb8e1d3e28b26b540eb8422b12fb5fe31042a9e4c882d0f38aa43f05e0c03653488e41184f5e8ebd50e891397588eebde6a57613b47fd4bda2ce7d71b5eeadb2bf28ccd12d27405ad59d719f32d3798213763b04c520852c81d10d74495465cc8ce0cc47ee22e56937c6162fe74e88137f78d0ee5d2d8c94b42bda382c041b022e9798cddbebac6bfe6779086bdbb5a61894f59322e3c7f1b654995bf18f2790dd4ad7532a7ed054f8c7951e8f207ad83ad8f4a759f98c91f5593b265685c83e1c4ba7cacb7cba5b7074a9f2091bd8befae93f01798bca058f486ec1590ff2be484217e5f5aea02cb52b4afa0076dedb88d42c8b7a9f6b54a6061f10f21a3425d1d2aba9938a3e89c4f8faf36d6c87d3ac15b22f3c45a81f46990980aa1c95850213a2cbff258dc9178c3e8158b015c068c0085737dfcb9474367cb3c60c263d391a7c70a7f1922467693e4d97815ac0234572ef9aa45bb0862da1e52f590179d533954e9b18be3205faa26ad7719357bba08beeee98918aca0fbf6b2473867d40d7f5905c7994304b294107de0b430dad009b5b6f3ef96b5d9351ff3d734a27627db5dc70d335e80ce359ef010f4983f70858d07b98d8bc2098a2429a6b1889a6aca382fa992565e2d4e1261d7be4cdbbf2b02e48ce9ba8252d2abe59a569b5260b229bcfeb365c783c347c7ec03d78c5196a62650c4d0f04ff45a98374d12cb88c6fcf676f4c89f7a221bba68662542bcbe887d2aabd31544b58f8263b29275ad592dce4b81b3296ca8f664ecd33fbd6e229062f3a4841915ac5025cd06578be4a98f143c96ed68297e80049c824a6c804c7ccebf1c82fbee9374e1aae4e3f0419cf639f0b33dd6b3001fab801e224a911a16782427db47d2fe40588167e84d56ec5b42a61c53bd94aa8bec1ab8d95c9d6cee3a161061136a8a09bedc237e6c60fc9e0fd6cf0e326e30b67766975058235147947e8d52ad36d7b49ee3082607b454aa3352163a98c04278a49ce099fc2e1252758bccff6bb211953c868b85342a62200a1188740ba5cd55a83978a4cfb22300f1f935102da5c50d86ad840e96361fbc818c86b023751306ee3e18a1014a0665f7b1361aa29b6102fc0cc69008e000de76e4455e19c176d30b2d951646c5c6a3bdaa963e227d9c748b2421bf292eea5dffc05192aeeb188fe6214b0aa3b5f638ac9e377a030635d3c85d6c479b9dd487292f1a95ba0e4ac5409bb62c999ab5ae10d0808a3f005d50dee426c87d681111910b9707edbebf362ad92618a2e5ace9398b9842010bd1b71d9b34b4525666800c5e39a8d38e998bd5596acac3034d92462971158e1661e069ba0af0ab18eab22441a8f470a64d5baf09f4d026de577321bea241a880af4f09f8174cb06d0d04cf726ae29323226dd2ba4dadad9dce6200afb55aa686e701af8457ff05976510e41ab5c72936bd77b602373ba830a84f1351425345f4de9933622f14f5a63e109a1c38bdefdb53a0a35ed7e1523dcbe6b6e5ed132cf6b953a9a23bc1efb4fc0e362843c28912c78b0694d8b7c0e76f002a88b400490badfc9b604381e34e45b70d89a9be6b2ea0bb6b1f00fa88bc16804aa1dba14fc6a673ca99da4d9a07a884887f48f6ec2175fcf9b5924a556d14a22e20c4a3ec8687f862dba05ea0c8b66bc03cee48bf8fab7ece4711481463548c42983cebb30ba481dcc8f59ea1a36887a4d4f2c30112a5bd1c137108c33e5b661677184a47bc922be1d56d30a3e3c8320e90e6288ca098f7c32d9659896831129f4d850fda691adc43977fcab5243fbc75d7577da0127eec7d95f55ddbe576237ecf056c5885b398277a0a2f26d84e838afc2b81ced9a8beb63953c0ded439aca39ac86f5d765ea4c063bad06f33eeca3555114d6a4f9aa636372d51d220ff514883fd4aed2619605699e2591e0a3c9720e9310c7474de53d57ea4002f23dd29a4c8743914d899693b4b52cfc44223832b198d60ba713834bbd703231b9ac5e66356bf3521340a6b61676b124a5327e74842495c6d8c4682cb158b27b61d30b9bbdb8d98b65bc7a1108ad21c9c27e65a601ab72431324cb9bd6bd9e035757812e80325483c76539bcbd030453c5accbcfe09f1dea83d3f2304bedffe71d32c9538deaeff07918e3463156310008e4b95621eb833821a2646ee081c4bf356334895cef40a883791a0beb2da62cd6b267966c81e1bd458adcb5186bed1bd337a75c0688a8e7cfc580909af95dde0ce6c1e443aae5b0f79d1b0091403a81a36aac181b5fc1491d4d8c082f6b266df0b04c6f6bbaf24d9d94aa119722bee648306c50775e9db8f0e8f496b6d215981920a5d14a3166baa3b824be6d9d9bd82a8dc138d1e8c6ad29d611b7ca9f3c209bfa90477c885a687ed2f4e077b700f80f6d58088110682d40599a98dd40eb67d49f304814103a1ede1395bc0e826635403cede6fb2643801b8decf50d1d1966eaa8230b2a5591fecb6efae2af552e9ea028d2458894bf3c9c065b0982a240a03cd11078e298419ab5f895d3e60c6eeff51a42a2e43a1d8c76582f8e7f68eb8482f4bb5cf233a294cc65b97c98f8bbcdd650df5489c8adfb7a2223bb855f44ce3c8bbc3ba734352e61817aeb7003e0a9ce061526c5fe5ddcbd2a019a0c1cca3b283c260682417f61500382a988234df128b226b1d182f0076d7636a705dbe4c8754b70d841930ee209259fccb1590de606bd1b5abd1c9a54a2cf4f99cb1ef57736c0ad75fc8138fcf0c1df60f4c1804274e9214ba185cf9e75f4af5749981133a7eabf17813bac132bbf8a6a2e8de3ea8178483d05ed2a5c0c2a44257432175d143107bb058a32cd6cee38b91e3ada26f425825afcf0ac89273e7d3cdf58ebb486453bbef13cbafa400f70e95b13cc3e5fedb4a8e2f23aa497c553c4760cd6346daa2034a2f0efbead63c0a29a1a616379f98cddcf2f22dd171d765a9ab2150646c4873f6870f48b207e1b8d9a4972bce906878cf68045f4b967b1ef313ba41df17824083bf180b08287115d91360fc7ca13d118adfa00ab109bef7bb36231d8aa374e108b497a67cac432556f9c4a0c2ef5cac9c4e6522f9c4c4c2eab97594d5d2968aac832078caab5b5723621df8f42c7134022fb4b48f1b537f55b8804e3d78e00c996e722dc24a675b82dd5e86ffb5bb909f3a55dda2bf7b4f07d1164604c876cf992f07abff37a6c64efe5a1b672e98225635b2b621409cebd9a071d049fdd5355408050f07fea71a6615409809c3dd1631aab7d7d601f51e09de7368d4034ed171ed025b155b6b93f6bfc6c1134c22652126dfcc1a4e023b27a99c94bb97b21db8bdbbdb8d9cbcd5edeea856d2f6df5f2662f377a79ab1736e5257d3548cb525e444e954ea27f287116bcae72fa31037c899655411df727ed7ef0d0065457566fb2ec85633d036d0182fe5079cdfee26430ecbbcf96854a373fac7c077b82c7046a03cc4206f9873da270e34875c6b921a3ade04396a6df4f37fa298bfd75bfcd7a35e7eb38919200938f8466cba3c6d9e505939f63908ab67db23f547207fb69213ed911e246c849a16a6b32175e07e8a9143a8f39418394ac46b80f2183452d34c2caa0329c38ed9b124aeeb90dc9dfd9085bf49b1ceb5728d280eaccd6a46b6fcf17447caf8636f39ec3d519fb48c94417fa1e264050f484a56c88872ad8e7d484032d659c1bf9eb15bf652665c9d987483a0d94064dab14f54619f2a92502f3d7a036b5b9777f44198c82058aa6fdb193ba58d1e59ed7c0ac6f515661ac4168503c10b8182de180a5e9ebdc98f3daac48268d5a54e5ddf6870070b8b985f858b1b4f79b6975091136f230ebb1c590868886b1da2f1e23f751444cdde08be7b27fd251e35512abaa4a3b2da555204cb78690c69fbe138e53d10d748800c195a6b3d128a1f51fa0380f278fc3c62b43589e8b466ae568b3745bbf33fc78aba5081d7284af8a7b4fa175f785d9a93d608a4be40d3e7621e70993f3d3706ee24f38d5870108441e26a337e1ffc95caa26363846128fec8ecf94ae949aac21a19ac411ea64befd6440b6e1bf904c9b1eec50e51f7152801a048e616a98cdd065df6588a447146444edfb6fb8c0983bec19e10c41a6893b68db7146f8f8c387f963e37b6fce96117201855d5f67802a8f0b77d549757747aacb52451ad327b7e7fe7d479f365337970472bbf74c7267b8ea0e89f07e58cdf3707069d97699a6bd6b4fd6df4e01dff6989ee3d503f722f1b15526f790bd834302dffd0e26a03437c836af55c3828d834628f194927813c49f98d463f98549d315f5be79c2ec26ad79a0b497060e2c116f6824d4401f1e9fd69760dc9870a3d58c96d88de20207928145e08203af9174f6c910800bb4a272f8ce553046165a3cc600b895c66b815d4ab402c3e975062e8c23d07ede3b7185ef4776a41d7eacc6a8abeb967dda1e7bbb7f2e38e950ecaeae73f30824a5ced6e1c1f6b974a7cca2af161d3f9adc7f4e21c8519581a4f92565df7b1914d465137c9855a327214ae447a8bd97483de21455a93f439123a1894313b3c193e7e2e8bd16e5bbc161c67af37c540df882c2c9e149845c5bcfe1a997146c1eb70afa5f89bb58fa6a5b3ecf7551bfd4f96123b76e4127eb0e74473151f0cf85e1df21fe91b03b518b382b7e16a157e1017430c1ce0e2382d44a4d09a47d7e64cf73d2c75c7198e4bd5390a4c321cee499c4f2e2d6b077b317512a988b3a352aaa3294ffc378e0b2c883e981231da9732bc0396072622aba9a644d656f36b67e626e223bd4a63ad889e0db89eb40a1d4965c27844467fdd364c099c2c1ccadaeb9d9a45d6a2dde87c07a580b4d412140eec32e8384b226b92107b0e677e29f4f82e4c5a863e15ce65bbc89f7efe4286e7fcf69c6e1cc91d8326cddf31d6c40e7cdc5360124e95893f31196c9a4618e0666d36de68d42a2abed21babbc0dd4b420c52f4e78e9ac5d07de64bc669180780c5d8f458fefc1c601e4739b31f0c334eb2140fd513c773d3b4c51ddc0158452eb67b51ff08f4adc004008668fd5f67a9ff0b58eec9bf341daf25f224096e89be0c43a7c3e2a3f5c720d4f198d3090ce510b64c8fa47a7714a5624091c5da309f071d586d1b723e5c30dba6a92ccb020ddaa44e14b52869782a40018f629f5f82596156f8753a190b107434a90422751442d40ff16b200d3955e1f08472cb17e5ecfaf2b6fb744a24818c6527ee7c0868d4e6a5f30948ed68cc70630674227108e8e95d9bc242261171485a5e3e3093fd1a06687292ca312a31c4078ade6fa05588a0deee1c00e14de1de520d472213c8002fc6023e2818776947f9e1a29399f6704e21a1403e4fe4be93f6baf1f2d7acfa17b0e6e2a5a1f9397090c44c42791adb5ca02fe42e0b3753e104a3aef2e31d4a6e3eea1972690087752041423fa35bf7dd5a4e9acb359b650b9f7a196acb6e68b9b9075ba344fa37bf63c9218dd809e90f17050203610a3e3cf1122122961f8c65d25d65754c56e1ddef1e060da4211ea25dd887df2b54b624e732a52f563f69c539019c5acd59a672a20c4f0463b2536db173a68a1675145f9acba3e104daa6de7c40812e6fb384d9dd6e4e09f0214f3cd33f6a69168bdaf6b3ecff109070dcda5467a070f5e4f719d89b7692cdf6e4a3576eac1a50be4ebca088a42693d04da4a423d46d73e96c0825e6df75ae1253283a2faf02566f09809bd7cf5ccb81331fd457d9435ac210a441191711bb4e403d73e334378c1c65b70ca3a756f7134eb8a0a70dc8d6652e177a68d92a2d13531cb718ace10c9554c344feeaaafeb628f4d1f0acf9a093ad9f9229f791131f3500881fceb5a5c6d30f3bb47f883a09d4cc3e21acc1867df547e7fcf37e629869540981b864e2360f9ca98c819c17b1702e7da2faedf52d439ff01fb39f54660894042940c07522b76cff5cf87e213a947ae9aa2dddc18c40a8397e26efeb5e4b60227e2f790b698b4c1e0fbcf0a711fb10fb2435af61ad71d04a3aa9301bbb9fa8f462ff754cc7b5d11e67f51041ef0fa3826eb4f3896d58151a61d5595cf89846acf4cd42bdb388c3d0b1dafd47196469b1e4f6330d0fe3e9647ff952d38506647362f50e75c77eb274f0933880b485bf79dd7a7e5faabcc9c370af64b9d72814c1a80a7f2dd23d54fe99c137882eb40a8809a4eef3c52cc52013d4a48f47e1d8167ed19dc7cedde2a4091f675b54359835b43fe51bb782e1720526246025999fb147f0a7d97d68f998e6a10965af9fe06b390a6c06221eda6af44631fec61a0dd64b63173b4e52daa5883b418fb8e4195adee34d7f817ea0132ad21e438d71b5c1ec57fa100f85348df30701c2f9b9917734889030c2be67a81133f1950e3f124cf84f97e63134d48597120480dc7b99ec3df18d3051ef5d636901d3405f76636559d6f4255dc09bb525e6e79fa1260ed28a5ea831f64fbc36f751b6c34ee56f18291188dcfca9c6392eeb06c9447044135a931e678b4ded4996893715c9b2b41ca3b9353ffe62585fe596dfab32a7160e52685d905b4482a48468225c74269534c34e05632ec52baee849b3bb69530e7158fa77e794ee4422425e84c3952b50b612ecbf4cde5da4f25a0d58495cef9846d543b1945355e6c75fdb08cae51a7593e5e18459afc34c76e303b4322800dc031e5aa795cbdbd2b39db3c49cedb432919b190d3eaf41b94c083a185e5f4c81c869b01f2bb0b5e23ba2b054a3355dde9179bc8174e8a21662911d2af53161e3d989479486070447bc77094c0ff24fdafd01d8b7945929a997d271a2b3ba9efd53b73bc0351f071c66224d2ba0d694c91d3910b2866a321690a08e7af574d76e56d5fcef780b9fd3296de2f1b1241b28d02502cacd70f89ada27925e81ca45889d475261b0e62c7ac727eeb0f51c830ee0630a82dcdb15a7c6584ebedb2e692bc507bb4be98d98de81c9ae6c6fecf99752842e4fd911d993a7762b60f592ec905900046649bdab52cb745b8d69d45b191ccd3ee70d808944b8d1457348f535a50f66353f868adf1ae99db9d3fff31a8c501f73f2731430ed6a0996f4ea52d534e6195105b8f39ba21de2f9ceffe9e3864bd36014c31a3ed759bada7f5fac5971bab9062318ec979f1d7f3016ea96a53bf5a074a730204a357caf999e2dc812c69cd409fc64778acdd58043be5d47e30f217c49d291c140dc1f155e82fb0fa8f77eee64207645a67456b96aa0294567ddac0794e88d92c40366d268594c5133d94060368f11dc6366f746bb61186b2582f500ffa7ff13ba2475d6d1688a99ac87a742e9dfaa6ac48e2b56b2fdfc678ee91b2552b01360727b112d4071f44edbfb5b24d3c9adba8844cf1d64fb2a7e9d10508cf3c14b3684dfb1aebbe64b47d80811242faabf63a3f4e887950938d5843f5aa2d51056eedd3d9117741a19def14c953fff4d8f01fa7dd5db0a2881302109dfe9e44f899581c31b364468d111852de04fb9d1e5d2e7d4bca77627e6dc97537c5569d579f57da19bdeb417765322a43be06163fc9d12aac0ef5c23b544d8881f27bc45b0c0c35b876bc2ee1a19b265fe8622e4d6a1ef2b96fbab4c63dace3409ce969885ac48fd8c785214a4efb9b64664e8f20ecd9498fa0a4f0a82450ab2dc4bb942fc9afd3ffa179341a2a2cc994e18a16465fabb88364bd8ef28e10e13e2c3d157075436427819de31f24c373b0e705ed6a2d38ab3a8aad10d53e5265161f194111ccece25212b883148bb7fb2c8cc46544ccd3de1d9a569cf84349e8c7fbb7cf24138e181c25e7bc85b8f054d4bb7b7aab58840a0d284d14b8d0d20a092900417e46f02c0b8de6dc3103a2c3cc3b048198ca6077d91b3666883833008dcd1827bc98989ca214ca91467c55ac4dd9e606c576e6b8a8836df49c6b0b9290de50807b3bc00eb8920c6766259847b551cc80f7a05b6a232c2f50fccdcc7008968834e88747717a2b4e1e1a35c2f0094d9887e00330533726e68b82cf4c12fdc8b246d3cd2b9426999b84469ed73f255898a9926a5c5a97d22a84d23af449cc8645bf4ea0f8e42dd40d33a85b97af2d13197530f8c7b19533f9cc1629bc0904312db71c43556727fdd7b1a2d2df2315508c165f0827310c530e231db9976d0063900d4ab038381708c263869b653c825fa731cb794856ff1bed312ed6751a5b01a85b9af82a63bf1b3d027002addf19e67113e62e9711476422662276a6f869abb635d41780a27034febbc7aa943eaa18eacbf3aa4deeab8ea03d571abbf40d509e056ea2842305134be244d64dbdad8360258a092d0f60853613bde8ac35f40c2cf14e9e324b1eccf07b76130bbb35996b25c5f60050cdde6a51209eb4b9e9a4916e52841c6f895119cb91004541281c831ffdd88dba27223a3771b733c3f36dec4e2321313205da388391fdf1c613e4c105a94b2b5ca56c12e4ed0161a525487c0d16cae2aa7251c1232512dc1d4f9dd129e617093a2c897cf8c70647e9abe6bc927a8672e464c33b3340d34d7c04ddf41c4efe6ffe0e6fad0ccf3d4b3096bf3b22ac25dcef0a9de3bc120b23d971a144521e13f98dc65f07dcd8407e9d988dcc03769fb2691e5273eb2c20f4b457b096214f785b97151c04e94a5d2502ac089032f889e5b5c7c5701037934e579a13ddf0802418934ceaf5f3e5406c73781a7465accab42255ec399b886a567c270c5ba9ba664979023be0fe8cd846cf78f83226b738387fda714e4408398d30a9358458683be9e1877a7227ef3a2820011622554c9920840df590517cfcb361ae2dcb9684ec8c9adef07b458aa88d8c1472257c190886b2ceb43fe86b567da4f97ca3aeb4239ff4b37f209e7c55b2792ea0d88f975b2ce550d4eb49d377e55b3ed39bc6d0a880b5188aca222d41d608ae5d65ec2c53ded4d6401a5385cabfe0e035e1fcf3665e21cb4effc6ebc4e21eb05fc3d72b3e570d5fffb40ceac029f03d8bccffbab0bfdd2c5294bd6280721bacdab59729427f4a7c67ea681d286a07ff24ddf2833e9836dcd1c6f39d7305f136e532d4507232f1bbd296128577198c22c082ae08b2884028af9504bad3522a2601a865ae06482d3970dd844636e5af151a4d88330f53c3282712d6caba3d3d0614ab599a8098b96d8447048058605005d2026f2dfc56134b26dcb64d7696b86746102edc4a8b1ab13ca7f33f92b7ad46379092f5d877401b343a4eb505738d429575da25ce4f1fdfefdd05297654229bb540742f50b9a27727c08654a2215a3629a135dc6738b8a01c6168ece30451bf07947e562e9411c21a3579fcdbceb7dfaee8d959a65a58c1fe2d13651649a7ce1c108fc0482a652dadc165010849d91aadfe5419ef77c23e74114cd544f327f5e6a9a396885b0e316ec97401bb711b6680b21abb1365e079bf1386c4a348115fea05591684bc4c9e3a20742e7a387d76619e0f5d7a9f093e71121bb42d0962896ab0cd6f69bef72d5f332ffcc2e2e6653baab753897f2781411d5bbbe97624e401433f5107b508fc00a5e2a2bc92fa0da83f66d99554f5fea367262a1b4460cb4274cc50f81a9a4cc3eca9ae64ad889cdda4facf4d2a50491b44219d922104808c9db9a55ab8a0da8bf872169ed2372d01243ccc247a5a89d02c7d5087b9b58a6eb1443c7a6cf7e688e90c9d7c1c71886291ef0c90b6a7235f5833f301524ab23a009b37daf49f02789fe4fd3884d33841f63f352620c5a6a43041de0271bf4f9de64268ba1b83df857c0e58965fd94769f536d7cea634c5f24d5efa2f0ca9069b747c918123804d84ecc6d033e855c1af4fd049b13990443ae98c473aef1d8bec7d4a1facb4b0753ed64722be41e1d4c9c32054d534e8e4ea6e8a5c173b4061aef60781ff3280a107ef1bad6ae48f37e276a9fd2a9c6ed314b9701c8ef51076f472fa5238591eb3816a9c7e53b22cd61b573320446d19849dadc06859b2cf05994ebfb04507ce60afdcbe5e62327895cf10cf775e269f15f60905dc1d96f0e9a27b264be3e374f7fcbfb0416f38b7d439f8f68ac5cfef880e137477bf8e92756fc09230feeff11585cb6b99b738177d16036055b3e0c43f3fa05bcf16b7964d4d6d1d5cd578f2b66e5d0f4db371768476eaffcccc0dd162ff7ad2ee949c4d14e6e2f7e690d968a59bc874732d5dcd66291fc596d9eeaf46aa7081c2b83cf468254696f2f86b9911e5876b5f2ca378b8312a8ffc900d88be1953bc4d22969e79438e24e1ed049710c875c4aef2bf8e867beb655987c42147eaecd180e6a62caeaa18484f7d5d16861b150176ac7054f74baf6d6ee1eb3fbd90eaa4cfd5b02b5de85c3dc1331db21dbfaa9b6bc6f4cbae871b5493da7d0af8a88d458d8177bf8ce3204e4acb2a174b5d16425f4b85b19292bfd822d98bb4ed7136a3fcf3fb7e07c36fb1128f50d960443aa00e2107ba4b98686ad9c2e7cc3594e1689f485e6d7419bfca3f7c635d72cc8843f52c43ef642086af0833e3519bdb5a0ae453a710ad07521a9090344eb2e48bf5128eb8d9b62bc961cdcffd53f1610dcbe63ef33c95da22904070236c14002d68a08995090ae9cd04a0cebace405aa8e8823e5c3f70beb332fcc501a5804a991ebe40ae1bdd942b57fb38a5df5f56701441e9789b9d956de68735680fe93db0c633bca670a7c9276f818ef0dd17f80af1ef4bd3b88464b941003c3633821f41c1f8299799718bee0e307b80f6b83e708d30930a4487f1b2ec1981bb501b11405f22e629d650fb9b8860ba8a24dfa528e4f797665371b4a95a91e6a9fc0707def20d6c2de81b33fb04197eb529e6a908a2eb5281bf96110dec6b4d111da5236d708370a872c808972b50781d06f8bf3992a642cd500eb68f121ac59b753c8c160db352bc1891f40e68b929278476c814bd01b9621218338a72de9cce59a70d54e50bc1cb6c9cd551abb28f36ee21d6ac2180271c49e734388afa6ea2b9087882e7a4d8a17982978c7f873a52af3f43359388df38f7dfdf76187dab72625ed5569750e914e86f597bf6ce88197fe6bce4c17365e36404d83990011104273b1e47c2a40ca87bdfaf99c181a633caacd575f702caf0a80222136345004b0f2af54b19e40dbb962b4aff1b22997801b7165e3aadd3ceabc313a74022231c231f710a8892d907d9fc2dc8be72cc382d2af8c27a613946cbd8419794f67b83bf36e99cad255930894223304c73979167048962b3c02c4ec49f2dab05d883b1870557feeb3b555d6e40466670acbd27cd58bf7479ab3e9ac52721ea8b8d57fb402f12412ef1d836602a089f3e538ed0334354249171be09404e9e4ab0879bd10612c89960d3ad0ad07327cffb85d888ca4cd21aa6c21349bc25ab0405ec1bfb5524d05c8b0317c9366a40145ceb21790b15ed02f338fe06f2c547bfeec1c618fb5b97afed1bef1d31ff76afb092bb0c6d443477234bcb59477e8180d6b3c92ad1f4bbc52bbb35b39297f355ae69ad3d2b6198fc0906ff80f3dfeeb8951b1c6222d8eaeb8b69669e78dbe18a416a69d7ed81dd3d02b5db17ab64c150b3384e5c088fb8671631787d5a8b11c66f102186c6236eddcacb4b430d12769b435d1f36a7f42d2bc27b258d56a22241316d48b3524ffb8e2d5d8ad4c6e365afa544bd866568feed73e3d9f6cb5cf60907f6ea5792d889d64d07a3770659b1a6ce84f95f49b4e68d64634efe8a5db1cad9251adcf8df3db29b49e3e4a82ffccc15dda793177cfb856561e0664491cd87974a1375183ece631c79888b4909c31ee642c2209ce0803f7f0d49bdc25ceb4f08408505040a68058406cfba8345fc8877f4152c492ddeddb82506fb48c466438adc9857da3247bd3f434e6efb87801552f01b6b1c4229e8416feb8fb439ed7207a3a8e94a6e543611336064f438305ba73553e3885824ab2723ab1fed9949057a74ebcc06851ef1b984e7b9a6547c985f3cbaffa24ab9245bc8cb2c9a472a032163c6a8b8b54bd7862a1f49e6e9735cb39007ff490d548d0206fe9c767b607c3371237837473401253a5566a1f809c12c4bd6b6e6fd22bc4a60e71eee8f18361678ffc45dcd48fd28cc5457349416ad1dfd14fdfef21b10a2333c5ea45f68751d8f875c391178a0a94905c47d22046c9e292a58f88fd242f99d8f9a0161a640f99280faa820eed1bb93242d56fb6a6941b1aa21a5f792a1d3cda62464150c31653ad31fc185dd30550175a9d35c18538d6943f881413d24cf99d48ac057123cdf9356194885fa6098fac414fc1e652ed3e81bfaa98f0ba2e43aed916e10f35a2215d4b8fa484a0c7c7e63739e01fa18a752c31a6545b8c9b2fc708d4cd994d52bd8715c73cadcceb7d5c811aef5522222611747f762cd16960f4d58d66e43752669cab0076ef164aee60e639e1667041ae69f6a1b8c5fadd777a7e4c2e2b59aa0b2d744944c2b40a26da61de5b82525169479ede6409eb4930c7586d43143a5869787d3f877306d8005b44c9cfa0513128b0d0fa52fb5d944d176866d630d30433a245e79653b8bfcc934d472231f0cc548ae88d9894280d891dc65bec2bd4d13a230a12a31ff040a22721e97792366874fc0376eb08c210e320111de44c9d40aa677f5ed085ad9bfa8c61047136d00d18b8679d105d6f7f6e8a39434c4d74b73e9a5c08bbc8dcf62bbb3c4d7fd1a70257501afd83078c8f9a7986da133c80390ecfd767908ee2f2ca4b9e5e436114060a8b6dbacb5ea5a2ecb1e090b9910912a566f8ed165e4c77437889803d53831a137581d88de2463e7ee461ab77a69459bcd619d9d0183a46a81dc3c02e405dacdfc4fd52b35853530998e21071c256142d037f0e6bf35576719b8881909578f8ad55b7bd5cf0180e39a5e11674e77690b703cf7d766b182186b040a7209c2fff22e41ea1b7d8f9efeebc0d8d80d3695b881c609fcf1b6bb76aeec4df9ae0de91ad21e71c784a56f806793ac789db987c48b4a5a025b6c003f203c267a09cb39f67c939e6c9650c7afa83b810ad45878fd6728c21dafcf58e56c9ec6db91cd35f901ddae0e407e7b160ba0ae3399f9bd40c97c5cf753246439ce689b806d798d78eec3b8032e48c246978966dbb82467375320cfb4aebb3cfbf1119ee8177aeee198591aa20a5a5548da2c780f1b1946a3e239b27514f06d46e4150b535cf1a02f01c0803207e37cf37746b26a028fac7e6bb413150bb22e7ec0b39c3494b805029a0725225d4936e7cc6040f6b5a18d8ca499649369803dd1dbbf1dd23b6bfc92d6361f06b4b250ecd6978ec7b6e688cec96624b340de3124dc1f085dee6425cd22672d0ba5286037175925ecc741ecaa0fd39055a3fe6febdfebb9f9868917dd8a1fe46ed5dd8588568f504697635d025e98a04b848cb5709f15a9409e51bc01b45fd614818590b0c7aa559f5a39c3b1ac103e773bf95f765e461e4eda5d0e66a487a19e4c9fa31a0c6e24450dc63080682c91f28acffd3df0225a638da77bdeb5af0f44c8061ea47818a2e41aacf683d694b7900f767391f48eb650d63742dc82ebad5a252a4ba3db5c4182de91229df834618184fed7598978e50f9c6ac8b66f50b49f33c0c7367a793f9103aa505c3c66c2854084bde79b88c47b3b0a1001418e7dd7da6e2782bb022cec6cf76c239452df63db93b08fd2de620664072812723b540cc2c0c0f6e79fda2ea81cc77e9437dfa1343e1e8365815061c56d544d9e9f3d6c94fced3157ba7b239cff27f3d4a15b436b49c716f80c0e975dd2e0d22265b8d05756c0fcb2d99ea2e3d08b3dce9a54c89580b6e7c1414f1be5967558a6fc7ffc3153be50fd7827ab92812ab08d7a0fc76ac00bd4063c95b147a2b07999bd7ca42bcc552fe3eba08d912ed37cbea05b958163c3043756f360abbd6811744efe0fe9e4b8c38d9ccb0861f8acd764c047c68e334bca26a376dbab42d47998e652422835d0ce5e4a77c04b152d167902fd2908b0a987715526cee1fb629f8f2dca328b95387018c7ce72f0573b386c9fb484d0cc9b07c650fe5589af442270a7f05e654c743cb69f5063b91d416c3a09bdb17eff67230180f3c254e5eacba63d1659121f8b20a24e799c8f79eb126803fecf7b04c972e7f61e8b967ed1660904c165a4ad29ef1172a3faa05d2a7bf5f0445e739eb768c4a8036c7da814b0f0cb0fa5992a4b6afb0c75bfa82a415bf782478913694ad714ca7561c725d05c57735e78d4881601a880523f49ce3bd650a9ea44c6f9006451b9de5202b3655175c164b75b526f78b6dc25e7ddc29c6541228101699b84caa64d3a8eaac18d06e22c31d2a1556137e3b276148b39d16ea54436f724014a9a00e528a76c0138826a3932044e1e8255db5f0594b3a20d32d5ec5189aa73ed7cdf03419efa02ec1e5487bcc5c74df2287d4567095b201b62b9290b925f7ffd41380d72fd7b82d448e81f334e0bb76d4d7cbaf10180274b3591cf9db0c695fa5585aec8ef8f2da738a8d2a15b11882196d04358bd90d2a4c4fcce27445b0b7d212a62094527471450fd63db3fe166b25cda334678d3792b7cae91b4bbc437bd1b2d325dc0fdf95e722f0d67deb3b975f78353b6346d32648b8fdd79ccd911008657f3a61afd8c27096da8fd8654ace57ccea7d7b0df5f9f578df04e86d607b466956524ca6bf0c42716e5db57d0f74f17ac65db090305090048718a56bfc8ac2f14497087823335ddb5e273114d8a9b37d9ea4685011dbc8bc2ef7a827205a35f3f0e2fb58a98debbde8f07aee5b9ef32213254e75ed75dc3b336296facccefa451727a6cee4c907f47f6e5c63552599a708b7f0d9829828d4c671828e4111f3a7ffb88ee10ac09385c5401d0b1ad63481465bfc542a5ced26fdc35f280d26106e6c4c7dd61a03bee87318aaa1a88285ed79cd45d01a4e25f2ea6463cdf100c4cb890e3a97c462316b0f6302e2d69a0b5b90b4111c33c7861810f654116262d6ee0bad22fa2545d23536feceda512410349e8067ada707e44f1222e3730eb0638a59199ec559faa226667900ba7c976435ed3631cd707343ec1d0aa6bc61aa5eb1ccc2e6c9bc4fc50895d50de7087e49719714c3b0564243ccf3b908fce12ab35542ccdca679d7467a1283e389f2db9c000f81df7bc143bcb136f7b4a3d893059481f67f9328ad328d5bbc1a96e71b90b123c8933e9f4f17389e88300c475a113da8cf6c58377a9a6c33374a58b864bbe60a5bc52ee512f411dcc43bace26c359d293eadb184f6149c0b451fe4f4e085a3467a39b9db1234077d513b12129053b923c51364594bce9d5b7a09d5ea8ce2bdc2b708d0a30756ed242ce7472ff000685404a6d937499a24db605415ea64734acd082f3ece4a6b8109e093a5a20a683843a86863fb24acf7d09d236bca637c8cb4c2ff31095005e465fbc12860d1850f019b7c4c8a82f82a5213cc201fd39b6d091a3739ccd54e71bc92a35b520c8487a1532c25ef3b070174e566b6314d1903833584ce3a6ebe4c25ea5b6aa5cbed820370e5ac91b6a4ed8600646690a2147b6350d65ae3183c1b667972cb78c145a3f2e44a1ce5e4c9e4857a1e16bc947e1ae68f843d9d7d83a9daaa122fa5642679e11bb176ea463a0572e2d6142fa98c7b34b6bdb4dd7199ed926d349482e485c4c5096818ca88069a3940c1ae42b3cf28e71ab89290b24c0de1d31102ba0b7dca351265470e7950b271717627723910063ece264f6ff0466784c1573b093e4b7900345ab7a450ee406e67a5d2cd8ce9643778c0b68207444e056ab76bcd5010180e6d3a55c57dd5cef5ae9a84716e2fee7a6bfb9107299126766b4f5c1eafabe84b8345435bda7d8becd00835927637396bf9974d516caa6da7c82e2ec079e959ca088310a5d0626ba5b2c1394852aa0c940c030db76a5b6b3da5a478382d51ad2fefafc679dce5d7ffcb5535146b42b99db3940ec9af3fe21cd6763e4d5a55aabd7d95767e12eb4ddf8cf59398b4b934d15eb545a921f9fa3e14aaaba258f554c55fe6c224917cd3be942d377e9f8887ec6b33597d568b5967feedfeacb72ad55ac38c6dc589b99c9458c339ef2accbbbb6bf1d5f9f29835e692568178f8668db93c5f2b03d5d72ab316be35b5beac3197e76b65f2b424b6fb46e26cea5bc591d86afd2ff7aa6dc7544351ac79f3f0b5d87e398661784b5357fb3b6be13f2b935da2daccf6577b23aaeb996f15b763aae1efac556b68a52a2f97954895aa4ca8f4d5c279cc3a975abd6dfbddce5aa5d5ba2808f60cb3acef7fd5490df768b1922eb5be5cd6d65ede9757eb9ee6adc7bbbd8a7b9b868d2aceac79578ceadd9fe2bdb5da8ab33ecdb4dcf8b1f59d1f558bcc7c46d568f8cb1c0e57444584c3550daa2956930625565c58feb82b55cecca729b271430f1b251b447ad878800d2ee83ce999c3c61c32e6c430c7839e3913ccd101441b1db4c1c4461b74b6e85c1d9d15f668f1bf61e60ddd1b3ddc08c28d9d1b60cf9838e6e30d3533f7e9894389384e8823080e2de0e0010e10e048d203878f9e3a6ad499a14eda5307a98e8eb1058c213136c3180c74d2f0155c9c790618cdd1438e1666397639189019210bc1dda1f84c16e463334f22471bd3fe9943ce0e91998e2e74a8a083e822f96ca78dbb9736b773c5019fedf87698cc76e81d11cc7678e57e673cdba1c65d9bb903ac660734e161060f333c3e98f100727f12a30718313b202b812507f808c287f5910002089821b0658600d10c81097a3831ebb1a58706b303cc4840b49a25d0e40345c72c01256609ac90008fc7077d14041e92279ced1063c6038099021dcc14609af1d499f138c10383bbe7f27ead19036c30f0c48c8173c640d36c01b1d9026616206101273305ca502006f088ee6960b4e7ce6d6d773d2ff4a0b31e0b7a0e98cd3c98cd0e98cdce9865319b91e0eebedc8f1d10899e2a66a0159048ee673c2098fd7062f6e38419f89bfd38428701b974c4cf3bdff7339f2a663e339fdf1b45663e4bb31f332012cc7804c0a3356be0ccac013c6b4082199031664072980121674094cc1ce8c1069c0786660f60003673a08799030498398044f3990311ac01b6469a336b3459a3670db1313135625e6249623e62ae064d8d1e3576d25093469934c6a481248d1d34c4c284780f1a69d0e8a11185c6121a363772bee494919345ce767797e323a7c719bd332a8d823866ac41630616334c33b0ccf03163a78c2c6524953104169626cc140ba30ae3117b4346982c6454210309193b639419e3ca1855c6f81143ec979b1e2dad15698fc84ff73d3315eb34b5f3534fdba5fc447ede4ffece4f69795aa59ca97c3e261ebe5a5f271ebefbda288ff353d3ce4f3b3ff1befca49d9f8c767edaaff16b9c9fce37cd2aa92deb54b3bd1a7973f8dade48abfa9771adfbf57e5d95243152a577250fa34e36fe6bdef1cf292a274f95876fadd96d49bbdf67232fadf2aabdf577b6d24af58b31ee5f34e1ee233af5c517e44b7d310686046ef460106527bfb3151876bce7e37fd20306118e79dec300091870e5fcdd97bacbc3a81306607167c00de4932403cc3080014e86f9824b962fb64c51ca175f0c057df1f345902f76c0c6c4dcddc1d8807d79816501db025b021b0a02ab600f80f180ed8c79e1c51b9f216cbc5033e6ee6fec6e93bbbbd1e53f5c5f5d985d885d44f574d1c47fb8beba083aaf263f6bb42755dd8f8270315af5907d6d494c35fdacfabf8cb36a591a556d5adf697f7b973557e562c8ddc3b8d8c2c508ee4ea746e36201ee3e061773dc7d8e9b1feede86bbcbdc3871f7302e82b8a8fec3f5c5850f173b62fec3f5b5c5135b8cc9f1258b305cb6c022eb32a39092f5a4f80fd7d7164b5b3471df22c87fb8beb6f8f9e5de9dc216c5b9b735f9494cbd9d695a5f12933e7f97c454f1d54a554b93a451ad09d1a0ea8dbcb9337c9d2d8909cd5a7657f1259f44cb11dfd292bf759dd41b79b5b6c6d7f26cfd9dcd7c9ab9f1d43fe2fcf423ce987cdf99776569c75dbed5302d79f892671e478b96e58fb5b76f68d1d26a29d52bb4b8e2842b92d86079aeb45acf460c9b2a57b08105c6c201366fd8880c1082050feeee6ca0d820b1297277e7915ffe32ce1a2d165960f10316682840480146d854f94f01630a3843016214f0fb9e2c36c822812c7ce4f66b053c90c5571657b29892dbafafd8b1c2cb8a31565c991560cb8aa42ade54b1464c155d4c29553455f15305cfd81aaf3561d6705953ae215a13e4ee4e851c2ada5091c6cf6b6e29fdd4ce4f4c3b3f95bf6f2f8adefa6e29edfca43f27edfcf49bfc9c2e72e63ecbea2a4e0a4a4a4aa922313d816aba01096d6fc5ffbffdba5a14e544748ef87afd88b3cc9b0fdf76a7d60e6a07957798c987922fb583d2e5d6b7cc1a6d79a4aba8d16df75494b8a5b4b7fe499bf98c1a6fa943a392f6eb1c0e7451c50f2b61dc79ba22fafcd4962f75948ef61cb3efc9e791f7d4e5d85cb1c3809380269913c923fe9a963d7c6b9069b7f6dd9d6ed3c9aed6b08629b6be9a33550d494bbecfe224a629fccbb74ed53448a2a4d9695848a3264d9c347100818206c51228a040f10114380428b44091431a1b14f8f3542508c84311697c9e4ae0d99266e7e9cbd88c8c239e107bfa21ec89374f51b8d982cd9b27d43c99f1c4d7d39c27bc7e8c90c31365a08cb6f5e9eb54c93f33e6dd5ac1b5a5e569ff49eb1377f9cff097cb9af3aefb8b87af0534314113b926ba9a80a109314d7835e1a65cc01729020e587054a07ad3e6ab4984219244788248043648e068d9e03cf57cfdecd0e02733914de02475f721375dc374d443b489f646d417eaf16e6c799757ed9f634d75766f5b5f571fd5f87d19e7b1d45d8db53daa618df6b86ebbcdffacdc530d9fccbefa5a576b6b567c4b94cc3e1eef9edb96cfe77abdedee49f3b3aabebfbc549540421386a68bbbafe13b9fcadd27f01e25a2b8bb9859a59540dd5d0df2cfab3f490916dc3d8d33efd13a59024a09377a94c0c2ddd1786d8f489c8f96d8ee0e06d21243b8bb9c93296bcc4d68ba4cffe1fa3a72342456131a2224687efc87eb0b8d0f1a9eb124c29250e335264c125c92b8924415f7244affe1fa4a020b8c62d6725bbf2ea76d596b5bbf4e9ff947ab59d89ea451c56d6cef69b530d34fd570dff196a6ef5a7df1d7f3b51e1b3dce245a8e5b5f6d799be9a9e4c468ea26052aca2e93d81a61c6082cee7ec619e53d4634c0ddc7f052c24b05af0cdcdd8c234c38a2c8110b78811d51c6ddcb28221adfca08d308d108a21d462031e28749eaee5e8458116f8a40332be28bcf500445602962aba788a650eb2f496c6da54541f81c4e1fe1e1ecb37547a9a1eeed13ddd533efccffacf35620202aa82720a09ab71d7136f59ff9b7f51defb6bebc514b625b96b6d45dadb3a94bb7e9fb2a8ae76be54a5a5dd5d7eaab8788b9f7132f46ab28e26c56d59087efeb9bf72efbf268a2d65afbe5cea6ce4d35cc1aad6e8a88c395a54512af4c74772b7e2da5d346a9165860410dcffbbd33575b115f1e5f77fe366d591a9d79dc95af1fe75acb7cd6d7ca3a8b737937466bc615d7544f11c5abf2faeed4997d29b6352d6db58624b636b2d6d798a9863b6311e7cbe346732d6d36eb117cab1ef238d79ad3b617fe763e546b9b79b52cafc55757dbeb52a92cad4f575b7fd5f6bfbdf518f3aedda7dd36bdf5ebb0ad3ba61ade8de6fabfed25dfe7bb75b77bab7d28ce855a3fb6b9b43beffaf9c467dee17cb12d4b5bb7ad29b6990c3fbcb49a7bbf3a668b3154c614f910f683063f18717707620c881d80b01ae303100dfc80e6872f3f301940088cb120a204b1e300411c60ca010e207300322a90416280360c10c6005c0cd0448620b4b8bb97b1657c081184104641881144983265e02843451921cef4100187881584d0410894082666d830f3c54c01cc7099c160882986706188a2a32867de072f3e944e6d7a18eb414dd390bbf790d483cd29ccdd9d87323c7871828387fdb480bbbb182f31598a6a34a2f1ad427c79dbdaf7d5ad4bf2cfc7e7e519d5f075364fd4c4d767b79ec453b0aeb07ce76fa31ade73d44fd69faaa1589b82758545fbddee92bf6b67a6d5fc5443df9977e79b35a7e716535dded5d7559dda5f39052b1dcffb38bf2f4fd55097d6446f9a2cb389de6cddba5cf346c9707faaab53b0aeb06aaa9b82d5abdbbebec2aa46150c1b773f9f2cf3d2b63f15264b1812c200911fc609a91c8ec294012507a81c14d0930301dc7798b2c3013a0c91d301811daefbcea7fafd931a3067c0740183a56b9360a4808902d3044c10981f77771cc67010c321cc6bb44abe4dd4b6a6e59bfacf8c2bf9296d575b79f86ad92fab2dd5d5681bcd370b4adc259392876fc6d5a63fadb62bac1a9a68d51625abdef7cc95fcde685fa3767c9d51b541480d6a481b347057b2418b0d3dfcf0a22865a6691ebe76d43abb2d5987e06b7b4f6a7877fba2ba2ca91a9eb61c9face93e5f8893a1245a0b4932343575e5cc95f2ca0456c4dc6575088d1a4a323575858dbb8c822b6bb8cb26d025999081bb4c829eb64b2664719711999960c65d1681b6a2c6cb7fb8beac1461858c982efec3f5758295aead9eff707d59916225caca9295212b342bd54a8fff707d95f04609b312662594f055c2992426db46cdd252d5b0b6b79e34ad8f56c52797ecf7aa2dcca5aff6f6eb70cda3f8ab3b9126f6f6ffcea72fb6bdf1b5beac79df72bced1eef96557f2ec7bbf51daf291615511169d1d2ea78cdbcab7512df67f1f8a6367204156fadd1447187b3ae241ac297bbd3e94555d1208430aa40b9fb1c2347aa321559050777a7937798e9497bf2cc2a6d9b4610e385d90848b3117c888000115e842655da709741506d02a8b90b208abb0c00381c1511d1f856021080bbec01779709c0080164e1ee637401c05de64057cf5dd6405701ba16e02e038244829310bacb7cecb6494c5e634208b3e42b042e3e4bda08214b085542206721cc42080189cf9220646fb8d87091e9f212c3e585878b0bd7152e91c92865898b680c17922546b86c5c41a2c8b87cb8764ab04a7f90b0f337617c7011c8dca849bd7c70457899303817522fb3344b4a52910bcbf2ee8c6a38a5f4c4282a1765a4b454f316aab72024a190fd5ed543367e1fcee7d5d2f95e6b23dd4779adabf19b5b5fb5a895c3e1467d7d385cbe39538b5597a51d6955ac4de5b01dc529a43f377e12bff964d5b7522121213d9947b1a6d8e27cb7fd7b52d56afb7b52553d246424cc20eb6a638a32aa222956fdbaaae2445e2e7342f5f75849125ad54cbb9c3e14a2f1ad6e05aa43191c0999c47ac3198aa8d3cf124526284c39a14ae41655812a92234361d04d14ab18259ee8af6edd9d0ed568cdbb7e940a0484530a6d595e2842a7f5e97434a8baafefb3ac532d8b66a58f2f8dcf075f0bbe2b5f02a557f9f399b1c4170797780afbf8d8c0388058d8dd7d86b16404f018b809dc43269231c86fd22490a3c82ee49b87cc0a4c730a13cbcc343aa14090539633105a30c780a0040291539f609c509c66cedfe986bb7b16cf38d200a32148e30c9df5264bcd4c4794b5b3929cb276a884e9a45019c345475249a262cb6133dd00ae972b3a1a6ed2b5e9727077bf3b613a217a6f663d353a04b8bb5f619df93c95a660d9ce7c9e7f85554351ac2149be696df90aab86f58673c55075f743bed4ae03df6df7df3fedb638f96446da89d985b1db42eb203f5220daf9ec787eecc53ece833d1b35eff563c2bc97dfbd543edf039c9fde679fc637339526ff9fa4b694de9791707edac1f31db91f5d14b8fbcc7bdaf65ea335effa647ea26deb4364c118c6dd713535b5effead62269c69bf87d3a5d5a5d539979ea8b67f6addf3c99cb6656973bd715b5dae2cef4e3fcff672fbb5cee5f6ebdcdf73e7f4d6ddfd69e67afbfe7259a7f5fdb9edae7e5090effc84199bcfc37787f8c73fed03d6c9ccbe35c1ce60c758297aa2e2d81eb32815acdf3027ea07514e1402e244392182cda26a981b137d84816952e587143e3aa12c071db072f722ee3aff91d5c4756f9b4f9ad6e9ffa43ad267f8dbf2ae96c545fecfad2ba271de1a3d75b7d4ddb2088a79b72d14dff286de9028c92919daba0909dd9204dd848c0419b9a5e5eef12e2ea2cb9c771113dd1a3dc371f6419a9c95bb07c97e8c76e4e1fb8118ee76ba562160b0414e9d5296762c4262f476bbbb447d45d27d4f6b7e50c18f2508809a079019f74cf1d9942577190f9d7f5435d4595726fbf5109d8b6a1bbf9692dd3609873b3febb43e1c8edc3a676a5fded8f6a2aed25cbd71f7d4e74393b07e6025d9af5f0a2b04f7df94c60ac2b1ca70f249d208cd992b32627e2c60cc972b2e59aeaaec2bf20aeb2a6a7cab4abeb599b7a771ee20ccddc33c00e2ee64b8bbec0d9b59076a661d7891a49156f691366fd3fea64492b4a2f838efd7b73f4d9f58496cf7ebdbd3cfc31bdbbdf55ad7f4b3cebc33ed6fcafaae98ee2a302b1e5641565758bd6025cea264994501214a0451ccb8bb4b69204a19b328474811a578309372c24cca28a58a999420d2e4a822d3a400962ab381aaa8aaa1a65ad54305d6744b4345c6dd9daa4b9352ade1eb2875cac7dde74c21b97bd81496bb0c2c22f2fd664acf8d9588c6b79ae2911ac33120f6a6015252524b8ace27edff1e871c107190e3a00a0907419c4aa829adaf7efc4f7abcbb9433d59723ae0a77399ffa969e5bff886dadbfff9e3befea2e9bb9cb7adc650cb8cb16709729e02ee371972520f3e12e43c0dd7bc87ab8bbd5e41aaa2976ce5369c26d7d5b3fef26a18192c16555a156fd139d2265018052231b825a0a6d940ea7d4a27a55c9f3496c43859cc49cd0709ac1ddf597234673fbb5ede170e6ed6992b467fa5939df3d2baedafae969e7a75a77bfaaf7a759234ae2336ff2ccbb9d25edcfd69c31aac9d737cbfa9e7c79d2c41331967c2c51b0a4b464c5521526059894306931c5c0a486098e0d701b8c1b6c6d40800d7cd800890d9ed8a08a0d16b0c11a50744001821200284d33283f282d40113305143750c4ba3cd1f266012c41ba886ce1cca327e2d413296fa6448128242d5169024660c150084f82de58a1bd51e1497de181273d647acc9ef89a3972de80c5794306d89b31276de0f4580307481a3814a0017272060e133262725f7017275ae098e09e3149069d6feaabc9c7d7f67a3b354deb23a5ac8db24555f27512537eb29d99fcdae44b9327664dce3082c088c868cb2808a337473d28382a8f64981d9d39caa20b9016202c465d545b52f44c117a526811a5a0418a0f515224b124c5154da41863488a3a415328d084364504eeee396c5092230699187728dc8f701e5c18008845ce4d671317d1be7b9a32210e709791d1a08bbb8cc7f956e39b5359e3f790425df1973a3493f6448d78e15b8d6afcf875ee8df544730735d4e8b6a7354d8b92f9348180fea8867aa6418d688d16511077d90e266361fec3f5c5c48d0740dffdbc9b549944b9fb9c191311dc653b4b43b82733263326e00e3277775c131bbf2f3be17054bf8c4371bfcee57016ebf9399cc5cfb21b87fb6d49b38abc4962dd659a1089ad2e2d86d2b4ca24d6d7a5ba94676defb5ed9995eb96165b26f2b3b216beb81fb3253e2cf960096d8903434e0c6919c20dfde09a704cee9ec1980cb8447125d5698cf2745939a76fb55d6155a31a4ec11a52a35512f3b06eb49db6f34dfb67898dc8ef69dbbbc232b2e5e41b0182fc2334235d541de972648819120d8ecc215f5721d1b9fb0c49113f962082040e4f42e4ee49ae2431e3ee4849e0f8ce4f4a28d0364a49074a505032537284184f32081207926984348265842ac9c88f111f233b4a88bd7973031ba13468e0581222232446480b96ae99d02e693da29499d0d290ed47e8811ea11e423e274e1058501a34416278f82ce84b5097202c657d8ceed3ea13a3f57bbbdcfb96d5e2e73191d8dadfe3dfe3acf17bb5bdcb35bcd510088bbbc39901957197e9d8e911101cee32dfed72993312112b77590e222cb8cb64441660e37197796fc4a86dba3d71770f7c662bc3760396cf6c4aee1e4717500f48048a02224202f403e403c433567be3468dff707dcd6a5e65c274a969a9ed5ad3ac4654b3798da687e0aa1aea9dd5e967d5f379bff1b5bfb3b9f7a3aae1cdbd1f0fe7d2569bfe5daea675b236cb56db9f3b2a5bf7102c2ad510ad7fd652c7d005c6f938b5bf94c4992a4a0dcbd2e84f747ced421718150ad4896e74b7f1cde6b615e7fba77552c3b47cf4a4d262bd89e2fb2ef9fbd57dbff7abfd4933ad530db7edfd2ab9cbd5a886998a0ed5a554ad6ddc7d4e055a15089909b922e44a088f0ac8d47e672b9a10312135b8fb1c6da3905fea2cd5d6b669664195103888fc9c30fb09b2400b778763f663c6ec4789a20bd20b82ac0e576dfdbfdc740119771f638601d50563ee1e86011018a8e0ee61351a066fdcbd4e6d88cdddc750f393c67fb8bed4f8f811c5584543260a30be6899d5520baf4d44fec3f5557fa29841567dea8eff707dcd280853e3454217055eb2502065c7191434a12068823951b411a7cd0469264033019909becc26d0d2359b2069cd04b6d904416612cc5173801c30ffe1fa7209ceb8bb6b994940c65d822ffec3f525010c1260a9993591f63a7b357e6d7b5353b5eaab459c47db9f3c5b75698b7e672b29a98c829099d8c41aed539bd337c456b7dfaeb562a41a5a8daf95c74faab58656562179fb9db14d14eb67dd1257d53049e47d69afeeb6d18c4f74df5e0b575b139ab2b5b4bad4964f8af5b6bb95a986b9adad938deac87b9e76bcddd2322daba8cfcffbb544ab9a15cd4aabe65df37e2b71bfd54e28148384aa063549d4bedf3729092914c98aaf586f64d5b7d6d77bef1a46c57ae62a9659e33c16a1d5745fadbb47dc9fdaea5e8d9654c35da0cf17e8830608e407101d90a2d2def3b775326fe90449caabac96055750e08f2ff730d4357c7d7fb73ff3a8ab2dcbfeafea284850151c737b2a95a545fa8d503f2cf02cfb3f96fc47963b2806826fdc8068ce80a017900b086eb9e32a2e3df3b6a43dd267580487d3385f0dcee0b8697dbe630dd893c6dd73b95cae486a9664f6a5fb96769fd969a3f9b63bb5f0bded4e2d292752563d6d979c485985b95c13c8c012b0a7c90f2a7d2875dbfa19c95d96c45d86c45d768481315eee76336fb9cbbd564eebc7be4c627bde6eb75c2e33e0ce81830aa0f1fd59e3ddb914d5e9b2b4656edb37ffcc9979ebadb7ee563e4d8d665f8a33b61bbf8fc436976ee5d30cf35388efa9abceffde3e411f687cb8f1f1460241928009482590134021010324f0048fccdd01e0200fcd08e4a10279b2409e1178ba803c409c0163c97889f98283133ebae060850f2d388081a56b0b87301387367a6078f810c1009102c6021f5160882c65d064c84710182b7dcf9ada521d55486e8c663da4880ee4f1e600a903941cc00278400eeefe8083071871c015ee7e81830788f500801b386278a821a3ca171904f0da52860c1bc690f103901c385e646e643abaf0d8810589b3ce6e34df210eeef028813b47dcc90777a8347070070670878dbbd1fbecf847e00e05d20deee06067472ccc0d1b5087d798305c401d57aae8e889a08ea82643a08e201dd5fe6c6acb33ef703e7726ea2e33023a16779910e861dc651794e5f59d0f7a1ceeb220500681bbec27b5e5278132d35d660128ebc15da6e3c71b625b3fde5863ba8ba037252101fd01ef718f232c8e3771b089c3ab4c9838b4c481258ead376ab8cbb54e92bbac4891511d01b87b58521d1bdc3dacce11ee3e46ba65b33a7522a8c35367476c0cccdb8ca519e3221bcb3256c57fb8beb2bbfb98586fb6df61eb2b6d3651f1ec8df6777a747e94dd3649fcff1d0e4725ee8cb2c66bfe46fcbc5b5eb23e4a66ecc34284547dd312e714dbb2b4f83aa9359dd5f7a3d06ab8efd6ffb9f38d265a535da6426214f3aec6775bb156d510dda1bb2ff369fe381a85bedcfb555bc34a3e92ad5feaa0d21243d550679d45214e4c62aae9c628797362bda569e8d22842434d9ac3bfb75e0d518d5b1a74d2e8e17516f3a1061a35aef8ae2d473133625bd0983313bb91a7fdad91ae11aed1c37dce541b6eb481431b546c8cb10166c686c8068f359058a306ccbb5a5b8ccec1618e1aeeeef907182ccca993c60a690cc00d316e7ce046921b3be89041e70577aff21f6c60d1e972438b148d2a6834a13114c78d1c2e72b0c81992d3e38cb133bcce187346903378cc30238b19661099f163864f1965cab852c6d6e7e3aa336f7ba248528f96f6a760d9cedbdbfbb4e66e97eb799398aa1ea2abe4d5915757f399663e8b48a2f1ada660691b8ae693475e61edac7585658dea7e3d056bcbfaaeb0eaeff115560d6d0da052d5802ceefefba70694f99dad1a90469c1f77328e529c77ff3d8b83450c308e179318555e25060cee2ec613ee3ec62b4046046330e1e43d22e3c8c906fc34c0a7013d3c0c3971c270c3c6ddc3f02a1386982f6168c112c62eb1c2484212c64f1841c2f00983278c9d31313871dab83b1a3867e0888113068e17385c5ef7e4b6bdda78b7f959ba5a5b6a7fdf332fd599846f6fdf1ffe115f5d446bfd17df0ac6c55d4624cb6eccb4659dc0ceb8cb42302bdc7d0da42f78b8cb6e525f6ce02eb37d91c6172eb8cb886c5927301e8c1e777ff3494fde29305cc8025605ac2746f90fd717d812d810180dac82f580f99c385eb8f1c20b325e7cd1e245152ff6cc0bd27fb8bebca0aa1bc9286b26354d23afaeea217babd417cd4635d4657a5adfcd3e4d5edd99379a6da98e898eaabd2eb54eb45a74ab67d1ad9ad697544372dbbac5e82e03da2204770fdb628cbb0ce877b6da028c0b07dc65b51a1754dc3d8c0b30eeb2215c74e1ee73b878c3ddc97053dd3dcc8d07ee329a9b1edc9d0ebe50c87b546d454cd5e6260a77d910f21e118d6fd585af0b00b87bd8ac8b12dc3d4cf6b385cf170fb6e0199b7d4980d81bffe1fac241d4420b2dd2ecd881868c1661bc645eb2684132a10596164d5a10b9d10289163fa14c8b205af0cc6ee8a1c58e58989b2f5632365ffec3f5f5c54a9b366dcc2fa6ac27a54d509bdaa6e74b96bbfbac4d8f591673482351ac5ab41bcd46556733c4d9feeeb9d3acd3a3f4dcd78e4695bc3a5c95376a74d34eb5de6a787547e12e57a78a546f0898be8c949fa89eaaa09072494c473929464eb7c8cf77b799715049505434f2ea2c8a6423b7d5dabc54234aa238d1bc3b45739a73eff72779ad79cdbbab45738ab1d5d9d2b244c9abb317d5e58dc35d697b9fea6aa682736f448f8e68505a7fcf4d3e79454dde23b1e2449d4d9d75e69faeda1a12121252ed5643f2354e7cad7cde6a6854a3423d44a82c6d2d8a06552f892dad4639d5f39ed7faae2d4d4d9e79fc27ff44b73d6b4234a8fdfa4bf414b7acaffc3db6dfbbeda6cecffd883346cffde7a82fe9a486279a9ddc6a78f5b5bf248aa7f8ba291463a35a0b6b4747265a71debab4479c6ab4aa1f3db748ab9a876fceba6a546f557c2ddbb3599bb5e9ffcebc3baa44aa9393c668dd915757f33e5fa347f526850645de6a68c7d3beaee969f1d5d59a53e5e59206a5f36fa72302b5e64483aa6159da9dcdaad19a5a339bd52250c7cbcb4db71aad4aa9b69a53b5d53479f197b47a5471e943a9e1996f95c4f9ea5cfddecebcea2b73362b79753df2ea5e4ad4d5fff1aa8dbcba4ca59e7967135fdfacba657de1ad8a392a2828a99c90797b15dfbcab513d40109936c8a021b3854cd3ec007acb12e185889d992fcc5c61068b190ecc1c0d71c6104c0c31c31078082465ea943953464c19ad3238218450238417218604b126882c41641004040760e2005a5118914584084640112154041c688a208bc0000175105006013c04e084683ae3c6193167d0331410c1c60815723ae73500afd28bf45ac008228ce082d103607521b184440247387144d7114bbcd4f022c22b0c12542081c411ee4ae830534217002578a09102cd15341aa0014a024e124f242180242e40828d3b13182cf1c2123e25d4905f5a4bb441e40bc8126498088309324b0431e16302ca571727a63831d4449d268c6842875913574dccbec2be6e908206351e442126e002287080620a1409a449a38634594a9c91c6812794780284272070a28999135b8c351cac712a8ea082052aa050e1638a28a6e8610a2a53205953ba63540a312986a8c28d145ba48022c58f143cd460a1060535486a74cca20013c513146a44314bc01609c021013c28c0a8e2842a84d6acb1668735f9ea0ce0c6005f062803c406226906046df643d40ff5871e63be8ce932c67d38e303191f7a7ce8d103961ecc1e441ed2f0d085071e1e767608b303d60e543a78e91046072f3970c9a14a0e5bf697767e8a22ed517edaf9293f91398abc47647edaf9c9777650e23c92f038f265697ba3ef30e26e3d0dbedff7eeeaeb33ff2a939c061ad4d262a1f07de74b38d39fcfe732f1cd672e9fcfa5afd625ab257d8bca77b8080a0a12aa4535d4a1bb4f8ad29f75cf3dc583ea47969e9da3343aa5bf44a5b213d2fe92de684ead497e6f44b356dd196bf21e4d1d6d5dbaff8e59ffdd18cdbedf4c3e51fc332389a51d956af8351c6f98bce34579278affc77c3e570d486a28a106386a58c206231b5ab061071b5ac30f19a4061eb2c818d9444318595a1a886840a20256181e5ec880c28ba03aba6ab49cbe61fa59b90a7ef65c1206ddf02f9fba9eb63da819dea4fb8ed6b4236fa33e5d92d0889130e8a6236f7fcf2ddb33343dd98f52a760d96ccf049f68aebb3c05cbfa7824aabbc2aa6159e693c915560c5d31cc8961ccf95ab92cb3940c0ab8fbc6277a24c312194a702319a098e101f2b794f47aa29418a29662188a2128869e187ac4e00d08d2658e9c2e7142a3d7ffbcbacd2771d60d7152c3d2faf46bdd287ca2bafaa7add1aca97976e31f939878f7cfd7cabaea6d23af1ef2828fbb0c83173c70975d804ff4e8851adc653f247e73ea0534ee320b60e0c100bacb8490381fbdc03326f6c605b0362eb8e0e5429930fec3f535c5052e6871a1cb0513749b0be4fe14bd5bbedc65156c59272e39dc9d0e970adc7d0caf31fec3f5b5a5cb01dfea6d6932db3234db4263aa366d13ed6f64bad6d4cfe391a7fd9d7957374ade1cf93851ac36518bba24a1f4b477bcbbc76fb3751bd515b2584188156c98f3c48c4ed50a4b332d5b4b931f649c2b98a1850716c2b0f0d3726341c702102d0910ab3363c18b3775ee0b30a70071be14004b010aa0821c77f7337ea0e9c0dd43a412dd9d5a14ebdf6bf3a1e379472c7e4e5bd1664408a84691f6b7c65714cae5b415712dc569699afadcfacf8ded0fcda9ddba96a53dcdd712d3ad3da239cddba239ad3ba630c599445f9b957c4c622424276569915edb231c4eac3c9ceaaaa6957757ee98525c5ebbcb67997bbf6db110f92c0514a8a40004052f14a8a08023c01b028cf9c1000c86f041852459bec8924296a214e210208b004358c06658c260316196429a2e3a26dcfd84a0135c3700136cbaa2d3c21da731a835b4e7454fb36efd6466ad5adf70aa86da8ef6457147abbd319b4f430669f8a1810777a753031435985043931a7cd0b1018c0d1cd8d054c31aee32285fdcf8a2c317a81bba6e68e2ee61373ce12eab15118d6f056603303d709002c4410c0e3d1c88e0c00382e100cc05d3e5ee7472b8ca01022cc268092315660686e101a68dbb6c031caefcacf3ccb837ea1c6ac8018d1c84709731b9bb8cc8cee5940e40dc654bafb347d54632d1401d82dc653b34f85c711a78bc8c797933c5cb072f5cbc5c61d245e6a589c807e7817bb1815e8278e1219279d999416c86363f4a509a41cb0c5d5b336cf92c2132976cf1197ae00c5270be197ac8304706b0a8363d19d29c91a14c0563bc8032ec1b40194a5006ac32a2cec73fa85cfa5945b9f0fc5d6facb69a882fadee92cc5bff14ee4fc9d2c4a5196add3de6f6d6d732aab66063010b16ba58a0b5b0d4c291635b9a5b2e68e18b166c68018bcb0439167a805ae46871a3c58b16514b90797b3a4792e788b26f15cbf26689f5cce2ff2a93de984d25cf0105e79aea52fb5b80c7ebf3b52e467bdb2251f28191b33766f37514893b975362dde5205300c23dfc9dd5f61c912841ebee5626efbb7bac65697ff687912841abbeb9d421be454a3be6d7d9a32c6cdc7ff6247bfbfe3ecb6e4de2cfe5723f9e7977743e8ffca6ffd446e9336f8baf2f3fe9298babb43d95f4eecf286d4f25f24df396487ae39ba3b43d95f4973a7b3e2e512dcca4b3babc6d3520a05a755de1cc195f6400a3480a4c291cb917d1553ea5eda9e4e5efa003160f39ee1e828303e8e21e926fd60fb189e60eb4095d26c0608297097406f03300a3018c5b4c60985c7a4c5f44a63252989288628ac28425262cc89ad62d69d6ec6d5be29c75cdba5a21b2525a09b3b2c3952857807cadd055a617c46b85282b4802f086155b931c419a306085a74904ee5b7ac8ddf81ae96d4b3bea4fb7724892b68b4c5702bae22041c992d003090b20614c8cd49707ba746989a008960886bac00890b6bacc08a0b8cef1f03dbd8223cc097325df775feb960fa58e10648471041546d861042a7ca4d478a2c431c28e941d63524011c4728461941ad66d978cb67ddd3eedf7f663b00a972a07a8f2441531aa782102902a6fdc4460727f14842773e36bf5b8812178b9910a544d3be6c8329b7694f1086b29ad0a397fefd709a9da5e3de45f9bb6fc24b624b7347d76ebb972e0e2aaeeb22752210080cb09779913aa8ddfe7630ac1480851ee32252e979382a56bd0f80fd7579aa66957bae5ee60daf31faeaf548acffeb9f5ff98967fbe4f8f77eb8c79f692f5f6a4edcc36b1d6b0865344f1aae229a27825daab55efebf6b64386805a3b40f40d348cbb87815a47dc3d4cab032d2b5a56689971f7b05fcddde914a5a47da9df96bb2c694b08b875c02f88df09eede067a05dd28e9830b6b025122137e9e2c00e51903c3816993668f21b2c370d955acd84d9b88c916ae3b75421511fdac5478da5f96be67ddb66ed4ac69694bedef16217f6bfbab1aeded9a56aa1508a8b4632e8180ca9cf5cd7f66a71aa6e52e977b9c712eef76d19f799cda5b8f73af4bad2fef545777bb328b22be0262275c7115580910840b40b38e694a81a651ce5b3252eec161803000100400c20e840f7c737c6010f84c5f93081070771f82ad512d7a5bf9639e12cffbd8f6a878a9a24245561613f9525962646d2973b87b0943f9a40440a945de5ca8746d5121b1a850355149a282848a8dca0377ce95736b6fabd78338be95280a0dd50bc4dd0ed59d76bfae4243e7eff24fd51ed11b5e167719524f5b1ec803793ea4fb4d3fab9265eea17b44cfaddfa886ba665d7d3babda72dbf37d2856aa3bd91be0bb9ec85de600b8bb729721118d6fb573398582604d28125f281a67a45d0eeeb2a32f4d940a87a3d2e5b5fb93a048a6e7199395704426f6c67fb8c8352412a418f20ba9c57fb8be40b203b209df72b7cbb8c7b7c4f9e6bbeeb8d7595d502e28a7c40a87d352356fa77aa685c739a99e69c10639758a122d1c4ef3ae0f87d32da19bc2e78bbb879a87afcedbfee5bd2e87b3783549a48ae2e35f16cda22194647a2834310877a7038a7440510b7759117d9340eb8275e22e33d2e943d14560a570f739ba24771f0349a773773244514c027b240045501483f82cf142dc1153f3460e6c0d1a30f70588959c96ae9cd993e23f5c5fb9a65c520e89ff707d790e05779d7ed6f9363187e2f9a45871244ea70f656ffd93586de20e8a643a33558da6c99b4b3f0b87d3e943c1e1a8c45a438d6fd5b4f4b3d2ab0a3c98e38197074bc00ebe80584d5844b0725c39e1c16e8df76007ece08aab11ae92b052ac53a79f95dbaf3b68d20112295f52b848c9e2eef98964b232ca4fe9432175fa50f21379878051c8b8cb88e8b28cd200775913a628315db444c10246d9f21fae2f5b8baabad26a489659574dde12e7d75a5f8b9257ffa987f446ab5443717775d51260d57697d5ac36a84a03aceac2ddc3402b6c95c55d16002347509a9515ee4e678c2a920aac4a5ad240d54f958f13cf92aa1d2a312a37241851b101a9ba5061f11faeaf2122a2587f8fe5d535b53efcfb8a656947adaddea34dd1a35a54961609872b1adf2abcfa352a5a89775b5f6f3c51b3e6fd533fded30c71a2bde603a1274ed479bc4ed9cc5bdbd1c98d9317280d9ec878f2f2b4c1271ef0e98804a810a0b4c0a80fa27ca0d4409d10d5256a0b280504e4400c0ec27020721085039fa82bc028324e5514b8e2ee4eb626350aace0ee4d5ebc34d9dcddc15c811cc8af46b582fddaa8566054b79eac40578daa438160f778683ea2826201be5140281a9050723e6783386ed86ca0e6cbdd3738b301990dbe6025adffe4e5330a33914f62a5b2b4e68d2a4b8b247be2470a68dcc33d55c35ab5d12aee79f8f7dbe52a64bf16522b6f4962dff97b671d4d14bfd4fb020119d5a51f70c9c793324b3c2c49b9cb7698f62f6de1ee614b70b87b18c87473773a4c1fb8cb8a88fe0917a22333258c4faeec27259313482affe1faf242e2846822c2a57982e4c98fff707d3df1198ac3c91c772771fc87ebcb891a9f259a6897f319159e76c7447efa59afafafc8d71cb9f5ebc254574b3bdea0a020a17cfb9dd5b6dcb6b775f8c91fcff379bc7bf248cbabe9ae4651494f46524f903e40f2394ac09109471a18a961340609e592c36b8bd6162349514933a42b90b47061e2820393745c788cb651d2569331504b5713374dc66809e2ee8e739eca994aeba220288101f0d2b133814c87e7a893830eb84010ee2e41489ef677deab754ff349dd87faa69fb5cbbb2cd6686125528d1c11f1479d6fbeeef6bebb950889b5cc3dabed69d6f4901233ddb42af6b45d12ab0d5b9289174c08c084ca5da601d1134894c35db684488cbb8c0824a2e32e6312051635a001121a90a00649dc653826078b50f891c41960911377d912264898fc30e9819303864b830647260cce4b16ffe1fac275b93b4eca120e09ce07b7b344cc967725ffd459a79f45ab3a033077d9103884359480bb2c031fb6229c779f94419b34196c918024831e9881940c767e90a0432d9effbfdbdd9aea6af6e1aacac3d729b5e6b589af7b8d9a7f0e41735ab5fe9a28d27cd6568db6bedc89af555abbd5db1bdbd3a2bc9efe73576dc53f6b4ed5a2b01645ab6929d6debed6c9ad27d69b1824d6b4d4595d5ad6bc4fb1669badbad45d7ccb4fb1510502d2fa8d80802aeec913d3939451941a56f2f1cf9abaa6e52ed7d7f6483cf31ead93f7897597c52deb24e6f3b9f42dffaca248ea7b7b1f15d10eaaa7ed52595aa4b0268ab4aa6be4dfada2d2fe196adb8bd238a37aabb85d2e496cf768b77eaae2c4dc2ed75d89cbdbc6efd322170652c0da941a05342c6855401a14d0023522c09a0c43d81842c51033205004361f908814445000892881406f008101816c4d852b346091a737c0500c184a01430798b8e55b92ad0c9b17a02d8bed83a01d45cc2812a74814e01128f00810d088194662301282420a1022414827b40018840030880630680a18b4007864ec880ee0912d10491a10c90848a640235b8c0420091930491698040045dc14b1022c920238840477efc0c121340cde80182000c4604c123934263422b42117acb9c0e41993f38326819f26a00213801674b1a0a78090903442a296801574a920ea0958812b100556310a7c509bcc51800a055d140c810ae82bacb44cb7de4ca9a660e5de4c772ebdc2aa61ba954f8bf2aece67f525b7525d596e95f6cf2b2c0b068972772330881741c280122c413202253872f720294801831005b105e1012318032310f312c11bf75df953f929ddca67d4ceb82a2a3f91b82a97437321f9e7454118edaef2f0cdbb8e183df1fbea73dd0a426083a0474e6685cba28000850009022556a6240bcadd8bce53e9c7f3f1f5ddfe342bae9e79b77b00eb01121ec8e2fb7287effde933c4e1701b35379a7b1bdf92b4afed977f668d5967fe810d8469200e0794001d78033e90e3cf0784001f680304c0120429e84810029d3e140e78571786351a0f5ffc660eaeb0a844f187eb6b14b399110000003311002030281a8f462332b178505e1f14800456aa44924e66998973418a9041c48001000180011000000400c0328afc13e3c29490f178697758cb33ae7949e34b3cae6344cb2e7b16f97f5f0f56d2d9c43462c374e1d436b8202c3687a9bc2b4cfdecb2e90c04109aa196dcee6d5b47c4fb3c372f6d71fa18765298a19da968d23b22c899fb871bc0516f11a79fcb4f7573220f3184c3e1808d47406f4aebdf609aa572834f8a7c362f9ec672689c3b9f97295e3803b422380b1ef2c7bbc3e6d537e380e163c467eab090150845b3136c9fcfbe49d1f4dffa0f60c706eb1257ff1824c98b63bf63d3bfb87ae2fe62df8293f70b87633a6b2cfb564cc7dd79367ca0ec15eddd81ac7bf76d63228efc41a78e1ada7f3f9745287e9e6deb9e3c2da25fbe4561adca9ae475362278243cf533221f07c6655ca7aee8aadd32f4813a6b9ce5e091acf12120f42420d64113340edc5fa4724233d3e42627d7e00d17527b211a51e6e4e53c92540db49c6c5cd4a3d5d8fd91688d68b04d691ceab792fa7dbb2cfce2ea15dd18e2fd50bd3f7419b23ddb8f12c0e63a5a1e19769fec782f3fcac149828d47a782db66479c61f962407b7487f22f8e9e84ba6b23676538508ecdf860cf4665a4c76b178965a4c1f440e88c4b001db174ecc5ab9b9576dde93000bdaf73497b3a75a49595c98cbfcf21cb527ef4429ad0ee1fff629d2c9363ba9af6e51ce447a9fb78c005f2e93eb0500f274ea55b59070c0a1079719351f280168e36239c90e62df47c0bc4819ccf47238185c0acd8c80189091f3737edbc9b5e9f4afb3c3b85b78adfee90edf6c0e04fd6418e7e270a73e2e9445bd893b80bae02d6ce38615169bbc85d7c6620a485cc02daf70623c8ee0850c719df6d66dd492bd6f3104e2b9a086e20c8f3626817bab475b7432ce40aa6fbd7edf35701319b089e82f2e2accb7d70cbcbfbd6c202b972335b42199e0b09920cd2accd27d3fbfd61fda8ce9ae7473c5b2e7e95554198b93ace874fdf971e38773b36890e7bcd5013cc0680e80399416fea73cff0abbeccac7ebf5b0556558357277c65ecf9dd0f02630c3cea7c64cd56aa0d23d98d3e48158d3538b931b8415cc3e9010e4792948ce1b5299afc8892711a7f999bf5fb960d3486c6734ad1ebf5f7936f27dd4b14f7cab61c5fc21be49596195b5dc8eded7b0847fc73218b96579cda054db826a8c4c78e94820f55e93527a7f9fc6b4c4d362150ad5f5ec3d1edcd3fd2951609bae9bfb9dc9c088cdb14ab34884eef6a6c9b791aedb69d4bc1f19a467223c83e9794bc6a2a310a9a18dff791f99f3b6908e1fe3d4be92d73f7a5bf6eba135615952b73a2ba80f071d02c2929f47f765edd80448e2567224673872442bf1c7c6c329e901cd12c22584500ece8a52cdb61586f78f3a34a03655d31b420d546d95524706ef3e846830355e601a8108bce09f32de0780851cf9668ba01f4defd9407c7c598a1de15988f249469347cc4d556a1ef0581d4f1f320c1f839ad4bce738f88ff0643375466dd74b6d893f6f225546f27170ab771ec234ce78fd02e5a75187b39d18ea7dc1da7cbce9848585da9fec6dd316d2134fcad64394647273cad9b545e51dbeca0feec274514f69134fa3af04fcad0b850ffe8462f5bc652a00e0696e2e7f4128ff565c190dcdf9f244eb96e2a46ece69818b2862266ffe8508158a2ab01e75e83ecf44f6e9b94441ca8a0e9994ee138840b7802bbc91511cfb9aef036c70b7d15836c76d009365f9c5ffea4253d751317f1f019265e1866777de0edda0ace07ccaf84fdf50c2d70f9c94c22cb5f822d0dd8ab18385487ee40f3dc43e8dac266383de3dda7e15000a736760fac161c19d3bf4cd6de38439a26a11b5864ba30ad79aaae169da5f7e883cad413b70f6771e002443e60a38b062ece5430a0f79051794d887b023382cefae8375b71074e9a8fc376d0965a08e21f1fdebe7cf6efc6625f8bafdc85d9212dfbf2e1aada1ac76178892c69e02811d799ad05f8553c605630232c690f4c71f30c14cec8704fb1a6479d1d19e8e6fce6d34d10442d0c01b23a4a8c9caabbe409ae82a555ee35d61a174cc7e8db255fd3df1f0105b99fff282dfaaf81ce490ddaa5ff33cca9e4458c03b13d39895bbfdf4e732a201a5b094acfea77bf86c05a12cf25f1f4ddf5487c407624b1da24d3c0b80f093e423fe87d4be586a2d17a2aeeefb17ab9de1e81205beca6377f7b7d61366f483e218a72c99667705847df4762b4823c6fe46ef61e44a993ffe267aea7f361f629f1b2e2e6b129187d3f8deecdb8724bcfa5778d01330e54335b4f5a6e67c2449b38a81ebe4eeb291e4b2498d35aef92f856800fd49424e5d5725021681e0d998e9ea1177b601ff09d579f8394bf462a8c3afb3b7e94073a0be055486f40e40765f975ac75b2ff0c5caf4237802b99d16f31404cfd1a757bc07e7f5a541626fe66fb17ac1fb3e74f921af64593a196cad2dd286316a932d71505c9ad8ced484e4f87db68f943ca5a0c607094b77e08cf0ef106fdb50cfd64fff0837ea42e68d552ef7d0fa56df1ba2c39eef79b505c8c8192d9752cfc51417bf46977cfa170c7201d5d61167f28f9b6bc42c02f74297e76d1fc60a5314e8ad0d012c22b6be1943a5d5ae7ad0e8b413ed8d4a43bc9523c2c3863324373ad6830e3cff3571c5a54990b3c64240285cdc8ed51f7b37c78132377e0ff67713295546f1c7441ea91528e183023ba129b4f372da76a878feb3fe8324726c502996fd9bda81c4be6c14502e457b51e62f15ceeb86500d21e916e547a9ca01f17f55ddef1fec56d6f3352e2c65b7536091ff489dbb8003e20f07f891d37bdf9e74f38368fcfb23f6b3f3c3df37235f911c45ea8780d62b488ccf5c26cd9555d30a8e3be5571d828e5d5012390ebd50b9a756d7501a4f4605284e344aae815da124997e8674cfa6c2bdd4f40dd57c716cf5f028bdbb4c4d953b7239dd5666d25cdb5acafe32a762bf55e5b35f5eda7f7c69dbb53726374aade99c7025be8f4150ab690ccaef6ffc55cca9dd211ee30054d6c50077d8d65f1ac8431b38c5a6d82536d81e7cfd9860be906d0bc68b4884b2ac63b7deb2f6bb32da0e08bc649a2011a5d57b6bc69995bf540f58a410a1563dce2217d67b21aca312ee4b26db023dad7dda026b12f6bf503efed6fa4e346d6d536f748b168f8ca41ff5eb90d02e2a32047642f7aeed3c260dff48f47f6e908cfa68fafa9ba768fb1c24bd244bf172ab29e1f6b1574c42e2b66f7c30760e9f70bdc07e62902b4878ffb2b69285f45274fd08437e377f07500fa370bf763a782a38e365e9cb4ae6817fbfe00f5c83311cfc19637548338de7cf7393152264dee6a2830fdfea391b6d45b3162d36fc56aa5368e5ca47d58f7d5f5fc7147c2b3edb864b7bea6843dd13ebc850fc3d507a77e4d29a0b4fe613054c675aeaaf50e43da25901a6ec03997d3948e2059c23636238f5a28957a14bde15d8d608efaa9b36fdc40a80882bce2e8a401296d836332dc974c65f992fe94714fd8b79a0682757634c889c595bcf5307d760762c4d1f36e5f34916ad63f34c6788e807a918acefb436c67944e2f80627f111bfc9096308b3d46c2a917c897264564b884a7b49f7541de7e7c0b7cd97e2a6071701cb9a1d046346801995aa30fd28132c6f4508363c082d9206863b7a9d18db7bd4a3bc2cb13e5c2bcd025728c2da693ffc9d5decbec551ad538c6ba022d41dc3d201ad66ede80e1755e38d297780bed6c71fa24e074c9b6f2af5df8362d24c19f11e5a7826c54e32c4f07f3ec2a67dd9884f3fb37d88bcc9c8571b19de1f89dfbd6f16fd9d97678fdbf65721265828a011e921d9b997af61e22730af92fe8ecf5ca3861a44c21c83c36f49ce8901b68928ccd7a4f46c754c46adeccf98c29762359ecb6055eb16493f3b4068e6b1432b59b9cc25613894b2c35fedca68f290f12a3e7658013b6ca3ea6cd968fbd0e7eecd3e7f4efddadbcd87422d2013ca4517fcd642d70f031c197ec5f829afb81be4918908cd07531fe362cd9390a65ad9a947875c2571dd7e45f7a9fda11b469ade01a8a44f3f16ab22aa3772ed6766fb3d5400ff05c45ffe0926754f34c6c2dff95ecaeb7f56333f0bfd238c4b6ca29b1bafe60c59938d822f23c0edeb3b657c378dd203173c45949bb7037893a10a4615ee2c99d6b366f5aec11b4bcae2860ee898c6bf2fe224e09bc8e8cf2965d0e7e2fe877a2d9055bc9a1ed879a31fe7d89621687d7b76fc9da3b05b4b589ee9edb0f3f83a7c3a322049c74bfe8aaa3fde07b42bd8225638ee78ee8bb59cc6cd4839411677202e6e5f6b5fb90c83ff0e5331404f5c79fed54442917a08e4c272781c20a43885bb91f0aa8c263abc55250a71fe082438905c1591a9f0573677619124963f4d9c35f71f37d74d05c4c8062fbc72be40cfb71fc54b73cbe3b9e62580d272b9404724f13dbbea323ecc13c0e9e8a21dd9ed991ed10524eb0ae5042ac9a0e9ad0780a5cfe906e39c87f4ce3411e6d36c3002905f7c7534df07a25926436f48582e8178274f6342e5103a5ebf09f006db60467b2288e3211d93b39cc70d74164a93eed7a619adb9ae4deae4434173e3c239cc3251435a8d627687e29d0cb6a573eb158172ae63c3f37c3b30bd5b1fa98e950a82e0754de28d90fff1c2b87b0af8ab9bf21927ca04cac2f0a5dd18cd1495af5b4a683cb3d6f6e4773b0de5a3140f7f0324cd77036e1048823b4b02f78eb98ab5bd648a4017ecef6d4aa360e2486fe4be99280083af2f7b6ca6d0918ed3e0e950beb5c34face26f5fd9478c62943ef9e818bf9efdfd9d71db4134218e19b12fa5dbeec511812db99b22e4384c432da8972e71e716c5d2896d433bb9935f211833cf76d6a4053cd8259de9161126e344b7e1f7002e43eb33ad7b7bb6a331604832c1edcfd331dd4725679dcd1d91a989550dd3f566019ea899c30fed7950511141403111bbc7361e51a3d7114f6bbb8025d2e83993031a2ad18f88bf718eafc5f04789d456e026b4daef896a558a5c60898c9a0bb14016501867038158d9ed9a2598b8a5a63c284b30d0be2280e149cf346635306a127ecdbe7697a72b18cc89ce6c5d00f20c77193fdaaf8fa8217f122d18121e374159ffb2ef88131c441a378c5776e26dc6fa231bb31cc11682bc2fd31fc75e8f4377c1164e79f029fe4ae5b964f91cbea1db333b9ebf00ba2635e98226ea004901e488d77fcf7f957cadd27aaa317bf47b02f315cfbfb177c27ce11177321d132324ac04bc32ded3b8e1bbb6a7aa8516c312834e6bd8375a4abe153ea9ae156cd80b818bd0564f86c1a4d8d3ed59afdddd0197eaf39c152a77dd0fed116d87d7b8de97c87439123081930de4421c80d682afeaf2ab119869efb52cc473202486d18327cdca4564a9bbd814ebf54d4c24abc322b182a44fea15524ba3c40232a70cdcaeda85db1330b8f34b2a42cb4b8faa05a204b25e79fc9dda57532579225001172243917a01848c982fef49ae3d4680a3e959daa46ddaab7b9b0f7fd5f3c70af32cdc963a3a5b8faaaeb3d283df80f4700d170c76015d2911954ede18c444cb9b136df4b3602a5e482b4f26680cacc28d7ef4695fde06eacca3b6b41975fe08394d27da3f16a33d872e3d591e6b50bbd73123da797737e6a2e84d656d4eb3463b61f981f35e2115e3eb5f47dcedbece41ee0d7d57683095dc70cc297b683778e29d800aa599e97ac2b42ca22eff6eb66cfa1ddd19724576ccd6d9f798cdb76d91c16e01cb8805ec4cc4c77f2b01f8b8f982bf7e2dc8be00bc2b64b805bfde88e7cbc6f9b7096d9e00de045a2d2f19627f06f30ab5dbaa9298c8249605429e628eb32f1f28b2b8f5386584cc11ad147db10e1c882a91aee110a7a2b45218ef721a60351d4aa7573d25b10d7eb3f518cb5a92fb2a5c27216f4161ef0d125c48671931aaae97e98ee5265cf6bb7db43f0445045edccf09849a8b55efcc4bf44b5b81187b6481e97b9d68a2b8ca7daf7bb2d49cf5027bd8fadf1fcbd64d8eede63c528fc34e314cdef21df1ef45cfa1ef29cf7a1d1b4a20d9386b45e8176ff954d5496e4fd7034c9df7c1fd01a3d89cbf90118577a6dff6817213bcf9f5c7dd873dd1127cec8f7883711f8d643437f474cb80669eb195fe793b705ebd0778c6fe6af5afc8fadf8f66ae865861e745e5c5bf8a38ef97b0a8efa7b201f998b971ced441c8c33e090a2b8d072514159af9ab180203cca618de1670bc246821d9ebb0aacc5dd77f52e97fcaa1e633b61e3955a30e10fb608a742f82cce1330360a4584d27d551912eb642389a30e39efff6d397e1cd01326dc193ae2305ef013fbf281dc9c94f6493d5317c6d9783d8829e22367b7dd08d208d9bf12709b5e134b3053992daa9cbbf1a0750d0789f4eac8267617890625a2dc4ed9086659899533e3d1b5b4284a8d29736edc1623f58ae8b166114eb68cd02e67a250b0b8ec00a860851a738066e80eea7f7e592eb4c25308b67bb389848696116907c79e15c5241543bc0120956202300ee301ba018662cbdbb54d729bd160484e24b98f9833a6b9bdea6ac6b53b3bd4831dc4c45a4d389a0ac9fc2bbef2f45a689ee89c8687a68a2757f71c87844f12056420fb62e57e86d7dbce56401d18306f764339eb59203123481bc7879ed2bd408aee6630f9f001f40930c36cf4d921cae6841029e3c3176dc6e46808f39e92baadff09517cafdeb12bf8d2f28e9ad2ca5535a0d788bb2f84918c73f36e99f19f3b7c775d9f9c16470e99181496a2f89009f77ad2fd2929be51c28710e0820e6c44ca623debc0b65aefccede0babd564bb33e49c0706f73eba3fb3c355a8972e77225077b702cfbbbf05971a6bde6179cb6d61106e79184c59ffaf36e0d00e030371228ba577407ced563a02f3e3ad899fd1bfa3a668b889ed2224e5451577fd3a1b7a06b17cca6dfb3d318584d67635fce59c90cc2cd962294332c6997441b9e04c20af8dfd2c90bede2e989d963b87a428d89940e2877bd205bfcbeda9bc3b85835718388f6f4473e2b17342554f71cb9de7a2ca4c2aef1682697d40f2d3a33943e59e15b9b9520ec2cc752f81b29244bda0ce5c0c292e176b1cbd12076aefd0bfd56f1505e6244d9b9e030f1a33044726e4cc98f78d085ce99c88d9cbc26dc55836b1956306a4b07eb77862d6ccb6c43a25043e8c852a034eb3b3a29a76d2d7a25233e19e0fbf21612d961648f7921000321036f106fde15417c12535dbb08bb0aec30b8d2afc269ad2b5d4744815e25d43f274268c0eb3745fb6e23b81974e713c51278a300ac7b6a9b0cb595d87feb308780b92f0e67090b8e971c9a1b8fadc6a234f99d7a30e1c5f9591ded6545fd7ef8199ce639b3416142b70d04f38ec8dd59f646768366e9f723ae794ffcee3133e682b1efd37d29e78296cde3e8aee26d5ac157a604cf9829f8dccf85e01f6376286160fa702891b9fcc5b890c4f1e8b6837f73199ac966516b191a50b0e295b05c102347e8cecb58f5ef7d439a1e06d939c4d3e8faee8946132b854de52863d73cd51958989c597d21db4a63ebedc5b1b272d5c3ca366c0869f4c90445e3d50d99235d82511f1396658043110d84e66834f2c41b2801fdccfca6b274d012c2d8b521b8678dcbc1980f2e35d718388473e417d2ab900a7b50f462f4c4db97e41d7d0e514ed686d7ee7f2d60d8420b8301025600f6dd7ebcacbb37b463175c1118179527d4d12cacacffb6506ecf34b4cbd63c976835a9a29c3e18f4303c873a11e15a67c97a34e312040c4aa9f68122b443b7e9177a5b968f76094d3e807366d7ab7e6ec02e0478c7cb3ffbfa2f78eebca09ec147d873821ce38c9cb4c089217ffd168dfb07a30ded7cbb171e5a9717e8ed86de5fada799de3bb44feec4efcb55a16d9f0ff7e68f72ee4623651b53c5b7b114920fbd16aa6641aa0af1c3c982765a0a58f753218e09412589815afc1630cf9970229da6ec79a689725ed639aaa0335e9c9035851d894b23d9e5eb94def40655ba78deb73c02d1684defc6c4223db41ed3ded034525be4904b333a264e805778d56f29e43c3e81b91d934e8fd58f820e12c6d4b5d6c7d8d1bb1233b45d2b1e20ab6d8eac3dfcb4f72e760b937198a33ba3059a0fcb6234274583b9360182e84829ebf74b69025a68b162203372ae838983149db03da4a1c3d8d43c03a903aeacdd6be91ddb0c233806d8f4c1d88c69d4c189c13df994160fab356ad1fe42b96a9d1dec08a97fefb12453a07ea8a2c11afdb829ede372ef1739677c24859ad93d9e607075a501265eaf2071aa29ebe879d78ec6b5d9a084d5b6ba8c96ada975199aa744ef76d7637c44b5795923dbaf73223c83ea6cf9e0ef844fbdffd92fb685206b605f05b4aafdede77e66250cd85cf2de2480e81e1bb4a4d364e94499dcb3bd7ed5b734760b7d76dde82fd391416d857731a76a6bab4f6739f5d2fa992945fca5653bad955ab6851b7f9f7d3b22380f886802bd61c81f75781c3acaf1c3d04c537317f0069521db34fe4e3346f894ceac601f379dbf75e8fb41bb71d373f44f5c687324f0cb33ce07299e6f5ccd54b7d14d2b177e8e662a269f99f32a3f5576c7c69580a2ce6f816f1b4dc7fbdce12cbc3b29a6477d0185be2e25bc39bef02d071c90df2d24649b154bfc6f81141944b419a871123b75351275e91dcc789a05f6963a98116e07055f3dd1def6a1e89a3a8c74dad240cd7028a6c0d93d649018f863dd65645592bd14b610c682fac7a7af323ba887c762b33e82f5a1c42fbbc565f300ba0477e8cdce14927a6bc794c00b5c84e9404976f888d675cfdac89134af4ac684fc99721f7cc7500b2bf098b25ae9850ef04844ca0de665aebbc91f5a719a2cd288efa9507ac2a6c64e8f9e070c21be403ee6ad3199e2c5db724ab94e9e53dd3125cb1d40fc36c16d6c976cd7383e7ee08f9ae31426f1905971a020b56344867d984c1938e2a4127936e434a32e30a235296a5cdcf0a149ba338394e1f6e9354beca03f5c7a1d37bbffa66eec9dd573d63acc0c10d35b8bce82faf32b1723a730d9d1c0a1f7a777a2868eeceae1e17a3f7e1177f999f30f688b4c276661723cb4c8625aa1c993737316af06c45b05112e19ccce15f1835488243973959a4d9ec6e9b24da6806023ee71f2019fbea1a4ddfcf746540c6eeb2e8da02b10800948b758579e1592f8185af6b03ea322ffa391178c69782abd31274199c336c80d4f2ec61b7e6f200210a2b39fe019aebd845f348eb094a1cf9e67f05cf29ae055efb1b158b8ae3e0aeafccb77b9bc5ded6a2abdb7f8f83782744837c2ecf413e4f7f16973c939630eb1fe45907ce7d746a1ef6ce990d59d93de05c6deff073571b2f05ba27f017329c18c80ca29abcc566a918d0bc6537543b04032b2c1d8ae239e843ef51a022fd71ae6732cf4cb375e60debf358e6fee7c70121775e8545d10d8011c7136431fa352203a39a1f1e7b4c2bfa9e47f9ce555093f0bd1dba5910fd207217680b3f0e78b75bbcdfaa37023d5c7f32ccc5b3f26ce1199d0091aecc9d78dffec0633543b8c949280ed6a1f053bf0a41c8051cab299be08eb3910048b41608ca4e60bc1c23df676aac926eb7d3505fbf2ce355f0e7063853d88262dcd16a78b6537d821ac04e5cf569cd9d8adf19ecc379f819a73b3f81ad288552e137dcb8eba5f645392b234a89434266890be0c5cb212b7bceda3ecd02bd6b7dbc723f834dd5dfa3916695ff42081ee30fc790a89ab49f39df7a756f44f4b35a652a85b217584802c1df7d0b6478d6c63ba81c14f2e1ad94fb3f7d9024c167e8952f312466d526adc3d8a90c1f70f2647ffb1a483d9cbab8653cfcc32304b046d31ae125dc8bb0f9899abb09260d54e2d4f51b48aecb567a6afc6dd06391387fc6765c5d147235fafed385840227ae8c4037ce6908da0e5fb3153be71e5d64bf138213b1db69ef388be726625aef76396064df3c5094b753910f8c2b3bfb738e6fa7052680e1cc10765738f36ec0ee423cac5fc6c157749ff53ba520dfb3c210872813676fbb0a4443ada814b3a0980114ab7ffc87c67ad6d15dc5460e009132491d76e408059408ac4df614084ab6f3fcc4ddd8ecf848dbff631c8bd203d343ab7aa1e36bbaf6d3d7af2966e2577788295973c242f190c3e9356b3ca313af0328096a8c81ce143b6efee9f121a3c3450ea90688fc2de3b5b2c1c7b60dbf7fb4b2e8f12dfed5a7dd12f38e91b438379e90252d8d6f13741e40e46c6ec71bd72ddd77fa383dd8b291bbe198a3dd3dc57a62b50030f2fb333eb8cd0b3d3f59c2d38145bfa711976d9933548782bc84e13698ce5ba9d692e01c469536f68fd8ee29483be4543d0d146b3f75ceaff3f26ef71ace418e7c065b65df6e725f702d803fdfcccb0628f74f1430c5a98d773add8df9d20bb6100e27936365e6a8a89cbf263ce6f03f6ed69e3cb919730230f62fe160c32f82002839bb2d22d56ee0685ae191df57e97afb974796335f6e7fab4c7fb97bc05ee19fb62e4164e0d6fb029e707ef797e5eee3a5c207debfc550bc2ad21963fd9dac300f69fa02caffc64e31036acb8c9a1795ed3e67e22eccf6c97d9503ddad7ba98e1b3e616ad74c9487197bb95b17b848cf9bb86857738b0b7a436d3654c76d865d2379db2ed2fe0dbf792f3582f9b901570ebe4ffceed4d618c9fddfcf2ff1f9a1cfde6b9cce29ec1dee6f4d7e6f0d71c7947bdf3b6f6eed3febf00e9dfe9d8fc0e9973f5b7137d3de2db277effb2c1d1840fc95bd80ad1b6d70dd80d8ecb819116af3f2ce64eb846fdbc6bf75fa366682e3c572dfce7f6729badee8b56ca2211b8d8f507add957570c0368582f096af0c0bca808701a5add1a7ee2dfa09962311bdf441bda7c51b6e3ec8c2f207da38e5c44d46952f408bbac936d64d89c69eb59f39287f948deb4a15dabafa3b4a926d232e7ba384ff8a177e8b96df6d999edbfa8e099f1661942f17db55183dd6d529e6155533c14da8c07cf29ecd05f1a67a700f6c92b0c91851324549347cc659f47aa8a107df53ee41b48daf30c22859dbce69afaa25cd89b52e8d0f6e6e10ac8f3703605837a56172c0cdae57bcdffda831edbf6950d25b248b57fc8301a1e385306818248465f63c516ed9a6949dd932c6975502b50761be21e0ce7134a503994f1008aff8ad05fcbcedc3789cce01ec6759b4f8f6b77a25b7dedd171b3fe71e847c73791d9200aa8e03ef9a408053e86dd5be9c38969281bd727e4655ab259b600ed16cd77ed2a907f6472bc52f548790379b3522835dd02d13b5bca8c498aa66a566938e31efbcdc1ef5bcfff4d67aeef619d25cae286f23bc5bfa76a8eb73264a09729c19131200da2a63d0337350ba6b9d9cbfbf1b486fdc595d5024ee181ccc301bb2e363b96c60aba4f678aa238495e1d9c47686361c5306673da8abc3aa2bed7bc418221a4ec618f73f114a87fdc3cecb509f473e93b16d9e6dcd424e7d21ec7040b99eb81b7cee86e0adcdfdb5be4cd85c4d853ada3bdc52d205607edc108422d306ff418140e00278bf918df4fc7fab3670be22d5a5f43a25f72298d5628f5cae720e38769d62b84f43a24824962b97566a3d8cae163de370d702673b77cdc526e583c69bae7cdb96eddd72c1ca6e9e1628d07e4d1d3f2e7b93984ddbda9dd1e5fb1b196423a65376ae21ad0598df389893862ac8ec15d5ea5c67b06e454766a545b2423bd20198c5c33c5deda91878f841e2a9d9489cd0c2db7154bebd17317f500451886ee1ef1ef0ff37fc119296c9dce9ce452d83aaaa70d175e0cead2ab2d84d8d3eb21fb28b3b339a64fef2b5fee8b762c0ceeef758f34b834f406493175a94a887e755d87e3289954f07b0be09ece718fc86a8889fa068bc42b6f20d6f473aeae3545a803b2eb4a96bb27c1c67fcbe8374f2aa89118f74dff81b846a3b7f686fe6f26b4323a1e8d0c3fad57a105d3124573c6b9a0bdbb18e1bbafad3be8139321c4c7a05877e0b38a0286ba1ec500f88cff94dad1484f74d214b11b7841c02d33ef1500c9a6807423bada29566ef42f4d5700a1d9758866403bcba9f7564b504a83af4a5a87f1c12a166b3f7edf5f086742a206276094f11a6dd09e4dec5921edc172ffafb73f9cb9110b0e58e0e7c4d13c082c3af00e54580c98d51cf58e85d720b39fab0aac7a073d3ac855c0e42d9820ab8e347a240642fe90c51e3ecc03e5378415e79107594ba9be87d7c849b3d115c84c86d1b10fb0f4057d41fcc02411bc348bf53f79404cfec4e98309dd5ce8dc9837e65288c3d9c05451473028c8675d945fe9c840801990206bd2f1e16fa09c572db8709935dfcabf3268dcc04172448060634ab32c4431e6ed5f252f9708d08aa6eb58eaf6ea71dff8346b80199ba6d009e01ab87876eafcbf8066ff6f0f49cfb9bcc402ba27efef103a6ef3579aec992835357c897e7330bbbed32dfed6f4886668ceeaf159731ec34dd9916cd0141ba41a72760be31c4a92bfd0bb4b1717f2bd0ac12cfd5f01fbc3f9b5ed73c7639fe6d9bee24b5e70847f9ae057ed0918fafb6bbf2824e1b31ca2443c963fe70c480982c31b8ea90f83d3970f5c4872087f313ecadee08729ecc04916af225f7dadb72375c85777b2e39c54a9dbdc42f18721e1255cb65d1aceb1d5dad3ff99f17f14f78864f6be5c2ee94dad2c6e1b8441ea4aa09bb4aeb95bbeaca0d97ba24022e6c914e05d55facfa079dac12f9dcfeff16d90d2de61f467b1e2f6e4bf903b4fb4bf0ac3df67afa53bfc01fbf94103fe89bdbc6b1fad703c852e838ba69b174087d10a7f0963884adee04c3ee25f8bf69aae44aef63c2a53b59a107baba1f85a5d8e49f480829da61b92a985cdc1c07c48b074504a883727cd1a9df2debb6746440b28eca45fd9ec94c83fe629b0cae6d234f0f45242b66c09d3329bc792dd7617129968b8b901329b81d789d4c0a7a37a66fcfbd201062808abb7cd410ebf507dfda27b4e16a05b28b6ecdb8daa7e98c251cc50df3cfcba6ebf24a9fb47588f8679c4dbb84a9ca1f8a1399cfb04f970154bb7e01a6bdacdc2b6ee27697e5830e1f5fbf50a930e353ceac86e10d1c7059f0fad06a8cead7f6387bd3a2a76dd615085f1c71e517fb9ed145ba6c4c926a4b4ef9f17d1e6cbf4c4ab2a2e31c373b8c1da1f3f2cb9798e442f7ee912dedbbbf02a9213b63cf6559973802a9a544bf3062213b5ada97e3a59875fc479dfde5765d9253509cf26c3c34d0a66c21ed5bf3eb695e3e8f97f76688c78ed6e82bbf879f4b09622bd490c1ab1cefad57fe0facb3fabb63c4f5cff84702069ab7a0238f6f6db3eb34feaacc70a33c44e646d4adfa9d3563c27e175e8cd12e67d02763121248e3caadbdfded2d69daf1ada704734b569207a537d6bd978ebed8f6f99510ef37ca6bb3f982159a757c2cecd7ae6e6efbbea923a6af840c605a6b3faaae538d57680678a3b99fbfc0578e15dafd69dbe5cbed5e0619d071dee67840b04b6a6aeb76946be11a55834746f4cbc1dd6c322ce39aaea7143758728caace7574f724b8f0f3f5f052a486e986fd4fdf8ebb03fc68237fc02eb3dda8f05d22fae6caebce19e99bee1bfde9934c91d6bd8343bd47395f6a755c44bd45f2af8469979367968bf88e857f7ed5f52c11485078a3fb2dc86521f2fcbec12202118df974a112d43ceb4876650a41a3dc196b2f603abafa4834a00b3e2af856e051dbd6adbeeef018cfc23508784bd900a6fdf50ca3fb0646e2b905895960673c53609629e2a7bcd61ff5fa574207ed38bf51d2855d6ac884c0aa8ff63f80985bb8a8a3de702a455c907b2c480829378a829df27e362e48abed5856822896e30c12e526f5f3bcc83d05d3fc9a83ed81e110222949cb9e07561c1d20f73be55c06f3dfa2c1f6c77d2e13508c9aa59913b37f0d46af84f9618ff9cc09bacad78894a8ee01beb98e49229c2b7f7cbc53f6186a83793612f5631596998fafa3e070a253c5287b7606442db75d28c912c0f6e32403790dba3a789f4292a1bf4d410b0aa3a539837e18e72e5e73d8d79ef2a854ea098100052da828bc42bbdbad952a79e8a2180ca5c00b5bb92d4417fb51496baa94fcca94d692d0c82633ead0889b257da536467ad43b4709b4198dd940bf465e9c242db5ccf6121a456f0179df48a4d657b564edd9a61d17ccd0c44c2ede95a2612f086a47dc2447aaff602a2aaeacfa8c87a3b4551f6e32bcd15490d2c1e5af545c9443f7b39178d72ab45aafd8b1bc83df1a5fe0c1d84882365e327fab2f479b34d9698b61cf588dc6089226d48c12096d20604a1d72f65fb8a3185ba9ce6fc299092d8d99b0b8039a46e071076d181081da1a93c5a187563aa6fc15b6dd3252a5440db89f80b6aa14d6c7551f6d3ee943c1b9d914ab1576e2d99e62c6810c7bb27de60006e8ec3a03586516438f88a019aa12e2adb2e6141508f3b55e847056380b935d3484095a9e3ef03144dce5adcc731e12c7a11fb38faa32e6fe2a33d44fac0618f2f4e0a1b28b2f9e62c71bc6f0e38f906c8f7ac13d5a9cb9e0b428ac1c3bd75e5e2fbfe8ff93b84cee9a89921daaf86fd7bc8f98288dcfe80e774f2787afe032aee040a9f676808fa7ace3b2aee7df27e00185aabdeaf877f2b71047a705aa3431cf19d19c3beffe1ee2bea2fa1087672d6d71fbc0d00efdc4cfa1e0ad6fc92fa599fbce9e0b602e80bfeb3409ddb5a7ff4497d89d6eb766eb03d8a5e3eac0de21c273ab249831ed525428bfcb1c00b48b9059bfd36287cec90798e13f9f70983c16bca875ffc983c28fd2212750b0efe9087d9e98f56f6759b8d2b00fb0bccd07a53e143f7297905476f6cb6ddedf25ff16c8b7b687cc79dc3bf428647c6f0483ed2c8fb3b78c1bb7a8dda5734faa1a21823160d76cbcdda8959c5f4ea686e739f03c4b798c29a3004ed0c563abfebb26828d39e7a639fade2db6da3220cc68a65ad843f87528183ee5222c47a709e8a56dd6d819344781f88e598519ffc03d1f293c1bfe32caa7bef32556cd46ceb6e850b27c8f5cf72689274c52146fa66963b706a9a3f59745ccd7e16c65f412c161cb822280425a1629daf42ee50fdb98f2e4886ba908b9d6f9b512bebfe630a138333651c2752ab8c8236505ea09aca461d8ea895bb2fc2cc8c216d17e482a87c21df93add3fb3b9863e163b384eecc64e374737ce825b05bce204ec5a2c687a8284be78524ded0275567e87e5ded9abdae68122cbc4d84ad301eaaaa2c532d0c7987f9194fe103af1e216137e0a37b1d5a056c0d673e019215bacb9d5867deb0e672c39444c2841e526d9a38b3a79529a90f7875fb8f1b47f895393d20bf37124e23fa26f2e88f700f5fbdb5da673a32e67e5b0c3a3103b6cdfa4027fc0cec2e716a3a6f12788dedadb8e898e5f2420c4d76edef352edcd5f62f843fb3dcbbbca9d769d62f6d2e48eab7b9cb032f1f7cc34fd4e52cb2c87cdc3e7aff51ee147e7ce1839e592629a8f110b865269ae9e2dc1e4b0db98307ca5e803af3dd77d6fa210dce74719ce459fdc9445fac454f3f7f196fcb8cb9ce5ad848a36fbbf04bfe5758d148f439ec41c5992df06d57aa9e2b6db3959143c73f255a7efabbf7bd868cae64f1ee24e9171f0be2d17ed5677d1e2a677ab0061cdb4a747defbd77e9712f26a76c4b9cf8df3b1d7c46fbcaeaf023a5adee459e0b916844d45873c7137815382f291779563579938941e4b54861775a0e97268df651ac8cd62c20100f4f282e6da7dee88abd285ca1043446e249abe00afbc569f400575c061a84a64007d928d337d386e9aae097bfc807e31493576cfe8e0b1eb675e9b615c32fc14d6345970d55c9cd0fce1bea999825b2670082b7df6384f715652bc3204744837d8b93b3ed9b6e34a7c4dbed5bfc8bc10d1ef81aaf25fd331f61993c8163e48092fd5d1968b6b66af3c34712228e61411d442507fa29151b53ed9f9bf8917b2c8ba7c9929da9c8fb06f92929f662db31fbf65f93c7a4d46d3e31e65cb1d47d9f1c4e0341962bf987f0fc6601b0ddb1890eb7b1d714f5e6d44ecd5afeb1abc79752966d27316f6d43c837392874f0df732233f5c03ebdcd16218a9641f0696d5c026599a60fcfb95dc5dd21b14248f440849f77603ce3a6aac58a91277757d42b0cc1d700dd3376a3d3b8e6bbed20f874d4078ae222740086b2dfddd52b1c66f0478d5d499e1bb589f56ae147bd3c828f24689313b6498b07cc58c0782abe01b8a40cd4f922951e315ecec262803bb2e6cd351f654d53511e8883c53b6970914bd72fc0b98c61ba3997723c00033e669759f03dba73defe5344e6a728da1a582a5d1e71e341188750f84310190745e4aa0f97ec54a2c1d614de4a0bf5eaa11d81e93ea2745ce8660411c723c1fe897f2ec9fb737dc793188b99c871222c2ce2cbfa0fcbf336b8794e393cb07358c79f5852918d17c45fad94de7a2d7fa2990bbeaf8b4059fd72f3fb3f6cccc5f325851865ea5bc3ce7b07bdf6321fc177b321130a55dc7531123e962be709b7e0e40904d7cef147b09dd023e3137e5913c224cea8e1ff3e6e1ff871b6fc61a657872271ddfad5ed7d68533b234633169bb02b7a893fe3554f19a025bebde87a9a6535ec8d9a87bee84b4d615183dc9ca90c90e6de2ab26a33e38d494de36686d35aa067862c0fb001c39a960c570ab4371aa2648fd4510d99a2c83177f646d0099d7ef9cdc3addaad9e2ee4c47f1658fa10f1ad869f0a9df4a58e78ffee657edd39cced688c6da0fd31e007ffa91d727b19dacece1f06ee7e9c68f071f80b472664e22bc0748f192c3beb5e1bb6afb9e232e0397370833db4645787a226248b39e9debf124b88a322a64fe2b2853ed2cb9f857f7afabdfde111d8aa81b9792a987fca28bb2620d312362c6a397f5de3e4c26f309a6ecee1ef9e3fff102c07dc997279d4947ca2b81078a01cbf7bd784e9bee4a6ac31c1a51ea320df7ba3c45e0433aa276367dd1d6cfe5b94713d50e3936de896a77f10c9d8e5207be7201af70b8be65fd011a3eb1c30b89647be491e99e38d7aedcee7624aa92f51ae702456afc1dc09d12833a8bb848f782e42691c44b9ab044b92e0985a461440af6b03fc482d1c3418b5a650b853287e9aa34bb8830719c89856516db5b084f267500a52a3140ee29e668655cd18008ecdc0e44ad55c990200c9c7e31194c4aee3f7063933a158edaf3424c0ee55844d6a6ce1820b69c65309f2f1e3c27e5230de2e9988f3baf7cc44117eb6132537fa3ed3a8b65b08dde6a479acae020be684b2c00f1d9c0801620fbcf67e476c1192e508f3198ceb50b44ed04041518141bfea07332fb44d1403a94246ad2f7300084a3a3dfce4aa26d462368e58729150ac2a84a87a641bbe97cc711baabd01005b5caa75283144143794aea5a85a4cb931a5136edaabe05579260245cf5ae527aa54593f878a1e1317724c837e0583050b6a244ef83b612a339f6e381a7460e2ac84aee6ffc7689d4c5c864b19c7416746a5a9a8405d4404e3a53446003f9a8ca24e066930bf47107542f4128a31c77003695691bf865c01f1bee6f516c465a8546a1bd5753ed06991e21f0c03d4b0bd3b0f6ee92e4bb6beea6f1ec55b0a3a639fb578d62a7276a111599072cfaad7ac06d19823c23126cc55865ac6ca59c320be76cd1423a1d0d363bb37947b7bc29bf8de4a12e06d823febc94ad7d94f132f27f5aa05910bfe545070e51389c3f7bd7cb42e7164b92026026701271b9034beef4d2756aeda8a96a141a34436bb431c0b8b3c1643e9ac531876c2410e301e63953a58affc0cd35553cd063c1767a1e4854f71da5964e20eca13b858da25cc948fcb240e5cb89643288d75a49e0b6276edf7642ae94e87429006daf007d1e472d0932d2fa5002a02fa53c5ff3a06a08ae826199d8a4e420d52a7c9b7e43efe89905c5456625aebe2a8a979d15912f580dc6e26ca9ffc19aae322d3b3517d43d8a6773292bb82b078449b5ff2cf82bf7dc85a394ff57947d0ef4f4d32ac0664a1292b93c38d5722e4fb54c8a035290d34b3b6e5d520672b58f1e507f3e5bb4464bfe8362ed243646b51cc3cbde745df6b447c8c97355ef10d5c916674f5291a876ad156850cba057a0b2cf32da33e40c9a4748368e229b5ef036482211e9435e811f2d11362c6155a3b9381c0854f13ff0886cf48b73c0a6083dd26cb49e7d5eb1b3aa8e0d3e484bba8dab92128d29b8130325853792d0d7160e0587ad7342aa39452e310113491ebf4e4c897c99f7a095ec850a6b143a648633ab58c5c085b789085aa15e5abd1579a5588c66a511b4c11dcb1483c9582aa137f3fa603808c588dd8c77359a850da2bfb03c747c3943f777f410e8cce4f8b7f369ae57bce167faeb9fbb81e49233cbe983a88a1e41b5eaccde31bbcf9b6a7f55d15055e79085565e4916b3809ad3049d0ecf9c05f181568c32662f483b26da4df7bcccd5c67997ce6d0035b9b82ac1212356fc6816d19f442534d7296990328659090181c2473183d8ff03e1484cf135d229451597309e731d25c82c1cce8e75206ab304e1e2c6a0461b592f210e6cada333dde1c7ff76e27fc60d817086158388a421bb4ea3fa84c6ca059c620742c8c09d68cbfd189662daafdd7da497a5dae45e2de23b5c4838b52bf9ad367e87c6141f907033e747372fb7823c8b3aff332f3b04d104cbac1a91e35272ea40445782dd310ab2f1112a4d70c74cccbf43e840346e84734212252c465217e1bb1931e7468b956227e778ec75f7f1c51fe120a2648e4f04b9d4cf00a32e503e59fd3e4fa3a87775c4bca69f32a1fbcee6cf17b26df018d1e4137b27619cf5068ea580a1b13643aa1e620f8ded0b76b1c75c64222c73711c806223539c8b34dad9fe7d0b4b5c746a582e3f83c6a2ca8850bb4694eed682a5af05f2fa412bf2b6ea287a1aef710efdc5df0f81cf564d88d1d1a1821de123af7151a760abe0081c8c53971fb238ec8d4ed7fdda8490f67abf6fd508350810be3e12fc7f4af618979c951c5cef8c2541822f3e929494d6c9e54e886ec455c40f509b739e29dd074681ebd5065b26002132d0bc5f4f70e89386fc347952d82a1f0d7c9d6663b4a7a9a013d338133eeec1ac02b026be7df1f1dadc4cb016f021bb2d8887033acc4724d70529165389630a15e179ca8dacb2250b43f4a2f87ce1e9eb8d25dd57528efe798b1cbbdfe5a5674bd29d09c5ff7c4f07ccaa21df7c6727143f3fa8f49a5a9043706a3e8ce9110a4d1e68a7775f884bb6d4b5fd8e9bf7ce22b8d25961526a35be8aa3b61b70b925a1d9dac884fdbbd7121b86646a2709cfa0534e43ee1b457ca3e14d2249e48f5d96704b4ede44441218ab09c029629466924aecda092a69adc2d53f37c13e0747874fae395261bd6b666f6f72497942bb9cc6c3632b75b69bf0867f8bb8e34eccd564d3c95eaed52c6bb08ead328131b9bc99d32aa23011af2aaa41e86f181ddff23be0a8b572f7fcaed5254db0b24c3c6dbcbd36e4dd02be988505e0a62ac802a33d8519bd70464205dd84f5b3c1315fc10560e13efa5868e78e39022176ad80d0e4ca4901587459224b4d1e5d08316763681f80543500601746c5581dcf22ba799a21b9a0c0217a06fb7b922f80c7523b648aa40f65210d44b0198a1acbef3b80b559a12d806f5bf56743431985a8b2f4af821947493db11d652a6e147ebb68223873050bb3375990e467e0a01f1b6c37d92050f8aa68dcecaf1d6070006dbc1f663f259a70b6af5c1e5bd30bcbecbb372066c0fc4d065c366e53c121dbef5ee2a846561fe2d7c0bf61bba53bec086e4ce3fefada6bfe9da8be7af0bd5806ffb75845b13c7710c445ddc439ddfeb6a268c8f744487cba1b1659e3fe2c6c86b1c3715a6f9f8c6fdd01436a2e3da3029f65ee8d2afae8de639d73f7699be6a7dd8005879ff02f5246dd0e020789c3d5bce894389b68f65ceccb855a6050a66a2cc4742798ecd7bacb801a376350fb66b875a8e9b8720a8acbbd6ab01b917e020447e84ab2feaf04c2e67804bebf7d3a99cbcb4af17b74e07a3610b352c454ef0f441d2caabd368f6934e113540d3e7f90615ae889a25c98df5d776434f127703e47e06e0fda2bdfffcb7eabc72b57b8a9b5ee52cfac2436fb30ab2631af5efdae86ea8f7658b66667e1059a8e3997d20f624ab9996f661c298033a4ab447c93b4ff1ed9e7fe7facca74cbf4f6c835becb8a98a35d93ca9c087ecdad811b8d03eb5c945fc274a61c7193b3e6957dcb8d1676d7bd4ffaca96f6b50fd0aad3fa6d558d22d9e620cc937193ce33aa5cd5e9a91ee6739f19af43aaf9ea6f457606a0ea85a40347340373b9ce2312e5e9e418f490413543cbf47cd27de97fbb164eced61d86edf0cc50bf912096626cc2ec4ef27c8b067799c19e68df42fc0f3e34e47112227d9531cf015bfdeb6e2297257a7ebf0c6f74d7c8ff0221efb854ccf67f9d42e6d60d42f30c5c1914f803ffb22091b20788aa9fe83f2d7f4e2b98acbc35c3fe00d9086ba74830191fdf7cb8b87347a017bdb72e6bc7d38ecefb458583c398e7081f6f78f235f15f93ec59efa840eabc9a578df44071a048c8efe6123f79dc28354107e258264b38da1c76cbf3fc570e573e9ee6d5c7f473e8773dd75da3fae34be6b3b75b6d5f50d6fbea6823a3afdf18e35ea3f8f40ddd988cfd76f6f43f73860a6e31efb37212bc02137871b260c68f029a0a08c1dfc78ac84ffa62c978590eff15b709ccea7e51199ca68d8f51227c872572f3b0f3a206e44a5dabda91ece390ffcdabed39c9a804de6accb5bf2e50b3ca6c7869282b0dbaead0d3fef5ec08360cfc3e4eaca0bad717f25dcb920a5cbc61e949fb9e7ce3882e6ab3281cc76ae1c9035ba3378742396eb20a1066a4061a69eefb9d5e1b4a7c4059942a13479020578e49e31f588414f54c002d70db1b574f1100188cea350cd5433d1826157b33fc22cd65fb7bf9f4d016f6108c990946ed619c8fe56ae6533f0b1d9aaa7b1e10ddecaa5fe54d94a25d86d7855b31087aad40d2cb167cb8cedeca4e33fe3c37c4f0af1ee900e616f8f4a3fc7c802a41585a2b69893d8d413966811cb51a4c85b85e945beded958bc8a1974020827f310dfce74ef39181e67a4e11f136629bb6569f19c05b764e3d8a534f4e2e65fa67e0ae75069730ea4aea6171220b5dcda15072dbd8778934de4877efd5d1a1cd066a41c3e293ad7c1d88d38bf42cfa2b139ae53ba755fd42b2ce5fe5d8a11d917141f82d8935de7b96aa6a7815066c28fcbd29db61e939affe5cb931cf64c159846e6b1ecc79b21b5164991058874eb1f6158405757cedfe9c1fa9a4f13d8f7fb5813660df42111d0281c6c65d28fa9e508991db8d22275e6d25777d119a6f572ce5aa0709c853e42ad3d9941367837583298923e1944dcfa79dd51a51c6ee5a43a2ff2e4d8bf35395ec1605e9e6eedce63f6b853d40b9729439f473d46c743f6cb1caa2a87d4d3274a1f7b9b85e2d7ffc50445271fba085b815616268517f8fe188364ec1727f870167e0aece7d2398d37f3ad1f801cc5f7e4ee8a04df6b4c9b5e54356b6740fe5898c9cee8246643ca2356b9234261d7c38a6afb19c473af0b7fde1dee351f77f8a08896a87ed23a98ad592fddc2386c661feab02a374ba2be1a122bcef4270ac4cf0be3dc0c728515d1a977b73e010b964af39fd7bf2370b0ccf3381264f64ad747a5b749aac2816e4e5cf3bb85e5b06cf27bdaa90ca81b03dbdfd289601ea1cb858219691f16ee3bfbdc55f3792273295db3360e6289c74e6c21ed223ac13fba77553002f687c39149ac481c0f03ae29859d62e015c654422b87a8c8c532434322c08ab1bcc91bb5ade5588042931a1b15fcbe609c14421df00c5ea5e3833dec87b1756ee4f85a47aa3d869a7315dbb4671ff27ea7fe46e53b8449ffa6dbdb02ffa5d3ee107d685d4ebb48b9d7fbe5b4f62586330baf3d3e2aa00d13f60baac9e474d4ec7046f35e5b5740619fcfe0abf8730b96ec53ad7377e2c5a37023519cac82d86e8ff6ed7a5b24fe2f64c844e06b773997d3d88a67ae989d32c24980308b6597bca36516f244db51b8c8c6dc08d6d72069f74332e300e9fefe1f5170cec8f85eff9697fa7ade7334934fef5e2db8cad04dbecd17179636dadf867961fb7fd6ef1fc3980a621898e89200f69ba33eba2f3a718817905b18c8abfd45a7dbbd3d59b31c4659f6e16232f0d414e844c56b460faa51e0c3765e6e41c7e5915e3da38f5389d2dbbce27e421ca583b1c2c53a804085a82101d483d8b602dc720d6354e3fc9811a8dd439e8ab99a1e345ee416d121e7d619c81f4b6b5667273cf158fb17f580124afcbb1de198d6a141ae5fa41b4e4c5652d846d72276362959f94d00145d8c50f9e83f961383b79924cc4e31aa30d05fc062b61bf53c4c9bbf505f418b6b11cc661fdaa45dca66786832fe4be79e26cd1d8497f2f40c98479a1e39ba6b42e06cc40c9c64b3933527d6d78c99694edc00e3ab349e19a298971a123b8a28107b59fdea5e722cc090ab84d9bce27b27d1ad7bef1bc0324c1ff618cc5a3dbe1f1525bf9131237830b643c30d25dafa62fd662a2bbeed82e868fcbd1abbec0cfba4aabc11f93c2421727aa9be1a7d495dcdba9cfdda891eafc9f03b52187c38c5588b810c58f1048c02c37f66ace8df883487e847b116a1ebbe2461383b973da95e77e3974aa8aaec73031fb9ccbbfc278d4136e83e7082d24c9b500ccee394b824747a755a4b7d64cfe0b7c89e1f6fbc2b5e5edf0fa35319cd743b126845a394cfa4440beb3df377a762d5238aa5a46df14a5f23c6779d94c2d5748f21867293311187229dfedb91e78031f6812634bd5733f8b0a2368a9b875c9be95a79c9c72603610309d80f71ba0d812f4dea22c5f02d00ac43e4326f6893c5459279fba62da48aa391f8e13b1072040e9db2f3596c29a86ac6c172f6072cbdd2143a221424edef22c3c7bdcef1ef1f6d4825b11a0690411dc32e2956b9009a4cd82a5c43ae019d8d5ae74ba540b3270962ed9fe169d08ba41b69194b447fecbc3e96f2962ba62c20e8a38e8ad3627a907089cca1c70b3df9e130ce185337573b1198547582dff1e1ef72c373eb1797feab098b5d894b3c3c22a462492ec0590e8bb0deadbbb696aaef12522ab08f2bb2acfcfa0af2fdbe5ed84c15158c2444c88646ad0e5628d9f7587f8b44cf04f66b69ba05bab597a71a9d30fc40242310ae16875738eacd18e346d0c145f9418779a70db893cb3e24f20fc67dbf8719e94b43598cd19cbfbaf9df8ccf98102b97fa6f0c536e4462331db5e16d7b11dfc91b67be33eefef5a8b61984e7e0fc6c08d27b6970fb5be3a86e218beb0426519527aeb891dee24cc344e3249593e852efa5d6cdf39ae04741d27ba5bd811e11b396015f6e827413d4a2fa2bc82856b12e19a7cf9fa445165321f3778c3205f280679938dd6ad0471391b1f59cdab5e13257346110ba5eed32c5c1c00cb259970dbd117c4dffc0fbc8b1f8572d2ea14a1854426e20ce4f020cfb0e2beccec09753fcc9769c89a65fb0baddf6017a9a109e49cad1fa21e56094cb42610ec8effbd9991e81cf93f029ecff9e817ce8f85dc27c7bff0a4b016bdd7d9f9e9f13fd0af3bc7c9002c1e8534341c153946f42d7d771bbdf6f54ad0b46e747c000022ec3a9b35dfa0cf8a7a178fc74d3d83ff32b3d5575b781bf758db7f6178b08afb2289eb67fb5cec61dbc1abe8c2e1d5fde11ea3e83c94672fb2914239db04509548e6a8f7abd5db700e694efca84742c9c2918cca95958f86a85fe6bc59e1e564b435a4c90d0e6e92667fc9aabbba74d83f93b3b0d0d3504c4b6d31e3fde7ad370042c6f40608428a158221e61505362615fea4c34c5e5aa3f89e0bec16c87f7e14b5804008ed9b77b51a38f88d8fe69b3bb78fc1d0b88febb3ac026308c0900b13162ef3ca60916f9a1176c8b0c27faa907d19edc7b95633c2ddd00aaa051c78844c4f8eeade50ba60885a9a51f07074b4bb54542ece013335ee3fe161182181edb6571a9f8cfa596499c56769600a9298365dfd5afea5d3498f4649caef173c14b04fcde692cf1d89e03b56972cac55b134df190ba90279a5ddce9a4f2c463b18c636e073aa992c46ec01c697c6e4e96a19e1a5175a75962f0921fb4758969f4f6bd22386c1ea9af321786e50668e2c5925520c271fb920a2d1017eee32b5c0e86b0650228d75672a1d46f8ce660e49948ba45b25a6a4e33b95e0a769c6609184b0b3ecbe93564194a158e85a3cdc05707b077f85abeb24b7e90b8bb949351a02c0b5f5079ce9a0a2066c101e90e437c592d6587439fd0e610dd028ad3d47522613c1e2bdef23b8dbf6d5ddec8cf3ceca498f00d3584ae854d76e28cbefb4dd0f7ec79ccbabd15c54bd2f1cc90f8a5ad8fdd7a6dca1850d46cfee7092b4d29669dff55fbae1393c8ae680a343d003794cf9a20f26436ea2d8f285766f25b892a27946f04fdc2d15b8ac627fca47db72abd21841fd22dcfa9e99335cc28388bdd78dd6ed5b0af672ded97760b3669ec84884d0ba90b740e21dcb05821fda883f6982113f8c1cd812b3623fd1e393af0e868f0830bc3f8fe03cc44c8ee2c0ccab9672ff6ca536ef97202ae8fb0b8d29fa7af41b6cb81c27a9147b3ed6009e879e50d64a4886945f3b2624abbfe5551f5803506857a5e6e1e7617441929a8ea5ef00df00c471e5c6ba2bb34635e8f55801159ae985c8c5f43e47fd6f8ac143d2893de591644fcac99335faea3c6947c6fb77b209eb2dda997b8dbb3c303e0d911859a44d296e931c3ce2ef2a0919271c86670a3d0cd128133bec32f83971a0da3cd74f72f82436b94e5232c520334a2eb6d4c899f99ae5a2730fd6168d25d769a9985a76be60d0bf7329c48a8281b29e1c5bf8be2c2421dda0d01a3e127a0200a094bd28ed3f2de53c92185852de6eb2e747c0969dab21e91beb1cff2874a5df557b4d9a6e7e2bb65920cbc7c7307204228889e0109d01da458bbdd5fd305c2b35b7165330d9868fea1f14f3b246578dff79fdcdaddf21ee6ad1cc25b341bebafe5427b2e45a16296dddac66d73433f5392977ed3423e83c9d09060c35656bb84677132a7eeb350b692f318b4113cac7618607fee8b9f62a6f59ab1f406a6c512bf688e497c1c4ffe39e4698b00fa822b65818d25a93d30203e5ae3db420429d010cf706b885f87e9975211aa1753086f3595583cbba575770792d8de73c9fff229e19cc3f19fa86ec5d9f05d09eee3bcdec88aa53a5daf23977a14cf813facbd4b34d6101cfd12399813a7f3b83046d1b3853041d76fa5b8bd6acffc1396209b356689226c9b76abab9b3a407856fe20c4fc940359f3e61d9eeb3dfd49f1e2c0d308c211112939cd519e1817a3a307d873bc2a0014fa2983cdda6e50e3cd241811172faaa6f28d8dc6da066362a85c1524b15fc9c6446317b77960b3bce06865fa4623e708a96c6f1b4679783e99ceafa27e360467f12fb9f3195bee42ba8a205d02d92311ef33d863acb9c86c0364bb587ce8661ffc14ab00674df0be7d7fcd43ba7b56f3c6efed2d664d6c33b696ed59f9bb14d6b69e25fc91a9734229db04d82772b8cac05b3ed692b4f2bc12b85308860bc09d93e6fc071832ddc2fdda757fa2622e28fd095d0efb2bce5de4a727176075b73d395057062f2a7f91b3b5e3da8659f3c2196763d1c01644d8ec1e2c236ebbdf8274cf5a7f89960ff1167be1bdd01139cd5988fc9792db88aabd0eb982ab783bc27d5c26f9075f72c8f4013a587f1c07ccae6046d43b058eabd546cd47d3397e5f489d11ea7c270f85ea4da4a2fc28da36a1725f1f1be61d55efa3f479c5672b16bbf1896776b443dfe335c604f66e28e278404529620c2d0198da02d047b7b743942fab0ed3ac435f08b9a5f92d12074b6487b20441047e6db13bd5cf3c6fca0d583f913479c5f1e928287f639dc57003370a1cc48918cbdd4284ed2f6e01589af90ec09b7714aa3ddc35e65b3b5f0a6f9c7d917ed8c489d5de43fb92877be88c41905c4fb8ef229faae69fd0c46f5e98e35c31d53665761a7fa9905eeaf57971df83f34bb3a5e6ef5f7802e4c4c6bc344fb397a76085544905c75bdff4a81ef4ee0771f066471a4f34f36013ee32e8fcf9ff598ff492ae3ee375d85a9220d8320c5bef37187e50a26ef42ccded279e99b751b861cd3085b976117d107c6fb35aac7fbcd3befa7ca2dc5f231272ae94c3553b86979e5ced40965ed1f188480b1b3bae85c0c75a642f93d9d2592ae1bb1e1ad457870bcf5ad38b5a0688e148bd2b5d0237b824e3df3efc396806abb26cb5cd51286cac31ee607880bcf8a8328f29bc92b0cd8d631eb6f3053feea2dce1a14b4f677a9e2e448dde718ee64fda5daba10b1f690c8586e8a783d2c26b7f9fff838f4171affe85e4289c8255b66b16bcba7bd18b77c04673e81bf9bfc5ad1af4085ad2eddbd93396183793d57cd94b98f802cd036171f5407a914e8372aaa322f2fdee5ebcfcf3607bf7d07c1d60574284be693a5da1109bcabe84469dbc6078cc4189bb0be64355e779637caf308f061b8c855e8ba1ac1bbda150a4135bc75338e2a6abc6d776a8e3c5957acc6bb0bc22fda319d47ee805ff47f9ec5064a4b74c169bf45b0e0a815a360bd5e249ec214dc405041b1f562b816c5253704b494fcb40d65361efdf37e0d98477d2b82b01cf76c83f84abdce9d8fe299d34621ac26faa0704feccc15f673ff57bb8437350e7cb1cf4af5aefb8a410f37be3157f222033704e17b723a151c3e42c692d7918058fb3b5fa9535abaf99af351b8a2aa58f35c202b7284bfaaaaa153fa1331ea0c6582c696010732f1609c4a053652d8f7bafffc9bee2d22695f7ebedd486dc07f9cd947b972b0f1437da0f1c85f21c21da6d7126a5475a9f765b0894fd5c351f7eeda7a50dbe78fb5493fa457ec1e31f3dde4fc8fc9d358dba90a31ec8c4ada508fa97b95d9fa23fb060ba34868fb2c3e9e531c3b7ff85a1218d73da4024641ce37405a4d4fc107e7d806ccefc49689844edaa0f7e1c2e6096ac4296815f9213e423adea4848dd5e032757f02aa11d429697e9ae4998faca77e16294448c948f27237e828bb09f5be71f10d51d5883410bce0f0d79b2c3305fe38b90f58de5de2b16846c113ca8644ec8a5caad3b839bccd1685089871d139fa74bf6f31f5c7caed9bf9927b2d1ae7ac68daf9590630a3e55543b4db3855ee95f619c0bec39d204c42e7783107a3d2fa35a2c4b4e861bf24a969837b80182159488e30727fb521e44dbe9f7e8a022a8a0e197a8ab4d9f10a03135deaa77564eae5df51173a61b15a3013f84edd97887cfbeee54bed46d3db932a7e7d91ff9ca9af9d159b03852ba12df6a1b2feb0af1346ea8e5e2e8c8ea09a639c9d73f43b4ef3453788cd1732a693cf04ecdd8ee85d54c89b9c2275b75033b6b019d1ddcceedeb11ee73c4da355fa963a35400fc68f7b55ad7fb2275b7c2929cdcee98c9dcf7fc009e4acd0fb1e45b36fd69436e746025a5dde3fb749c05dfdfef340ccdebc9754e62f644734bcd7791b24c6d8eacae6ea85d1cfde2623bc9645a726b839054b7689d7fcc5e666b47d460e2f9fb11febfd7abd3f7af872a07eabf9b5be02f0033801e94765b447068e20593e293e0f162e5b0ee56657743db804e8e10ead60e82ce2270a2be5abd3e2f6b7e8fb7fd5c02de5720e05253f9974392ee2ee53fcd39aa274b98bf43b47ae8381a3033d1fe84fe8f0192ff4ece9b83a011a85b093582a1f6914fa3a506077289733bd1086c83a950eb629d78b898481485a45391ca4b396ff76a5cbc49a3909f265cda232b8994dfe8649d386016e03d87b592ae06b609ee4c17cd8249756bb5f10f0ceb1dbdf114a8f7e94f0fee1086d73b1cdf9cd2654459c1eeb249f7b1532ea3c17799001edf25ef762b3e0ccd7a53597f7606300c4afdbd729affc0db140330e80d3325cfb0bafe1378bc74b958c67e5465aeac264058a8e34c0fcddd6bd580e64a33ecf0909c16dacba48ac5a3aad04a2768b9139d1523e4b023a48c52d4220294488b386bae5a851b5c29cbe86da01441ab427b261b14476e2125979e33c92395c3e6921b437e145ce4040e01673371a7e118af50251270fbd059dd99fea849936705bdd163f363da876c31f57db79c557fda549eed794f3a49f6aa812714ef7ae50f4ab78a624be684edcc4419556b7260234859209504b8ef325518926aa14d04c5be2152641ec7b0da021f690d29ec7a9cefda25254ca916fb534f6f02755cd97b55e067f1a4e26324981d32f3671629b77834114a6ae3c90027402b6738e8084c0a0e4cf9f651733d406d670ddb8e0fb9c3dce0edcc59bc7112b2c9563a31a213f5892def04bda00854b5fabd0e487a03504a4a144bb25f69d5efb17e918d03f54ce8890b08708b177efd29e42a1c7d9b6847f332b80c9fe144ae1889687a0ebedc240810a463a5a25569891fb4374c160c1cc3fad499786105835f29d000ffc10613df5f3177247c2d1acc14b0be54ac2635643e46c45f6e6bed45b3247ea5bf2565e6a2af34789c643a3988a87cf5d0e9399d4eef54e5619518ba029ed6795767cf86e554fde78c265dbee40b7bd6fab7e95e044c9a71da60c88b41f71c99633b32b16650cac1a3a7ebad4cd29fa2deae8ef3374e05989d756247c6b42f6d33c1960cc28e76cc3603982db0727bb51211b0c302e2b55f9fa4ef58709bbb6fbef91ceb9856c6a7d2de4fbadb424dd255cbf57f9dd4dc27e5517cbff261da90f95c06a8ea85fe156064dc1e6fc7c2f157f03107889d713e8220bfcc838315bdf1aa36837d1a77003140b2cafb5d597e00297b14b428e0dd877fd4f31f7b82adf3f79613aa42a9b6bc804531fd717f4c384264816abce8ec00184e58df9558574e185397dbfb82fa47904e738da4a470fec5211682c07a43408b7feb1dd3b0c955311790f519f40ae02fcf2dc357d0e846a9b65c79bba07379b64649ea284328db3f5fbb93c17c865fcc0757f63d0345bbd3d537dccb01370d6e75f4074a7b29e9afb5c2e66dfea0205f2a86a945f2ec378a349ffb138b561b02c662cb8df85441be728991b50acd22fb96327751fa68844b0fd3f878b92fab51e737617d548ff929cfba5936f1ec99568e9e9d3d1f5c618f86380ac5f480fef1ef5d0416c70364ff451acad77f9ff62aaf6df4895ed899c02a172e162312dbb8b40225ee7db0cf3577bddb2fe02c9c213ef2068665ffc02686c09f65a7fa3af48747c4b60fbdf7d00494968d16b127e34901f9cb8479a400e575ba1c95970aec830f94e77de339764ff622b2663ed6d851b4d54c587d658d8b1e4b3d6043be9e2a1f749b3763a1b00370066aad17b4da06f96f4c94d7f32facc10fc4e1fe0f5d2f7454de2533e4e126ec3c1e20233746f95b02aad361b5fec1ad61a5f9d68c3deaa108ce9a5a57f7432b539147cbde711ae24132e809f8056afff21eea57fb9b3d67b930fb6f8a3c6feb1a53f13b9feb10c9a1b64d714e15b139d1064f7d27af9711208ce06aa8218ff985781e453a86eca6f37f246c1b6adefe6416a4e3bf460ca3d561e2be0f0ced8cb5177c82e173f5f1e134d0351670d96f891fab0dd5d01f2ad7f85f315ed0350a702df08d584a43b3d4f3db2f5b277f22b9e44cb33fab04645b42aa927809bf6f655f49c87461da4b8b34d443cedd9702863749abec5b01f13d969dabc3248e7e108a7edec44d08a7b92c89266daeb14c3160647063128d747416044972cf1eeb1a46bd74d05e508a9979d3aae238eccdf0d8458efee3580c8d7f84085c00812d13465327f8a4c099f1f2788603835669856b52f7cadf2e0dce2890575c9c269bc8423d9f98bd192b3f92c2e7ee6eed98ff8eacf0186e7f03282e8298ede7a4addc786348dca651df84ec527d5962ca2d459c564f8cdb73c2245d65899176d81619d5430ab4ffcc1915ffc187c19dff322cd6940b7fa4669a95fd0f975613a4eeba1dd41405d5fb20e7cf74f9fa440f8de493322addeae7a03fd2212c4adcc794f8b27f582947dc4810468f027f653fda3376a9224c3f380c71ee978f148e6a9d52161c8b3a4d9afebfa531d255b06b327f08315ae0f52d00a2d5f287a0c66503275f047c0a4cb2306ee0505de019183df0f836d3604d30b91f408c80cc5464ae722f34ae6f0e356946472c947d13ee92e23ed773cd26fde42de731693bcf3aaa17f9a9f7f71f983c6e5fc72b3262756d3d7bed01d0e42c5fe71b5d024efd2e6660aa27382221865eb5faec4d65e3a1f7b0fe0dbd7b68a879527d486a0fd3b8fe1b4dc1d3ce8ff2e0ee7b29e7a69fbeb900ec2b803cad3dbe4cc8a02d1c08a7c7a13ead7bf78fcb60857cf792fc3f08d1214b1f0f7719aace7fd35dc4744dd9c51a290ecf6009304f1e002debeeaea43c660d9c8c1b9f0eda7c013136f59e4ca11c949c0980ce75694873dc7a9f09a7019985323fc7f9d5b4de0e0f1eec679344c7cc2b4937641e65e38395dfe1f6a3ffe81a6fe5399fe3ab5c14d8be5fc8c4e99def01f11eb54d1bc44d7fec9b0515ddc85f87d87e650a979f48bfbfcf7972a80e690723734ec4213ed57d48dd547d3e5ff38249d4741f9a9f7a2f1ec56161fffcf9ecfc36747a34bf167407e621cf81dfe08b81c33fe4a80d0108e9649b115f4dfe6a37ac75972c70d75630e3f19cd2b34e458b3d9bccf4ae6a63c3df229a460d6256173c4bd3887a7c8fefc48b932ab0e546caa4366f859fc695669023862320d6caf2977fc474c0a8f0a5340dd0967fb36b95be650d8c245a9d384d04ec36f0275141c8b0cf070d5121dbd20794dc1e9fddf4c506a4efc494814d0c5413edb47db3fc75d034e03ff867150f76717f86e8d473f8a1e4e8d4d32e4d76e0871abe8b125fc644e287bc43e39e23ba2376cddffe32d22ef8d316102c98a145a425c4d9aa31491bacad4b626d9fc5b75434f4ffd7f869d830d4fa068c8dcf0f8215b2bf2e9ecefb0bcf23a5658e83b59feae2522561d5eb38485cd5683d71fb3e940a29e2ec2bcf5d083edf743eb3f0fd2907140ffa7427c9684d0bc7dac4e9d4fafd893fbd80980198ad941bf17c0435ea4d7a5fe6a502b68577ca81b3d7ce24891ee3fefe0c4726c238c3afd4ae1edef9aba2f289e46f413ade1ce365877a5574fdb444a26e7c387ad6e9d78189df1a6e660d6fec2c4dab1af832643a5a5229957fa7b0ea4614355552596f695bb3d9fd31cc62088c2498c96a2a4b37d297fddf9a37cf92e625647e6edbd94f94da65c7511fa18e26c2a5e530e3117a0c4c8baff9c9a52acb30267a7b0dfc9d8fafe9f2e536a0489e2481d661a2eb517018d2de16c550e3519f2da625e92741b5afda38c24f4e6481d36a302a681f7e6d7176bd29b61f3c5fc480a17a61c33f89a0625c3a5ebd1e03c9629f847b5d1531a146630a67430340983402c46e447b9f33557f16a9408b1a71562e2b660d6b6c3b0dc8ff71617fb966c5b33213c4775a3224c93a8d23170fd1d889537fa6da9f93fa75f1a6cf3b07e81ccd0523594ec5a3e84c5a3ce53cc635e8186731af27310882e8b40e73c2fdd8a218c44aec1f89cbd230a3a952db19c0861a81b86f1336642e6075865d7f4229b9b272710a607727403d90554b49864010ed6928a51d485df9e3e7e6bd3db900c047431b502cd09b672d4a8561c09db20c6a981be9bfebaa0b74d671a87a01314f0b8ace515da5dfc06772d9d4b2d5b6a9b6001cba9f85cbf8e7013299fabcf8628882363e75cb3d9b4db505689d1e13083536d9be32409a9a19247767cbb9fe5029fb0f774d572002dac1cf5813fcad7def88ae2b69ed0efdb48f6b32a5ab44a8671e2ee027dbe843987983b0c107372fb01b011d8786e50afef0325ce1d4c8826a0c363ac82ec09f7b4d79718646ebc21b69998b07676529557214178057e79b553d6574456efba2a994c206de902ab7697f86ac072e402e105da019ee3593e0bcde78e39008ae3dbfb86d6806822a38190eddfe6872941c1bdbf3f2d5b4a358b1e8bfe268294319d7bdd4b3362a8701ad20860762702d81f745e1ff96e31040a1d5288341e4d91c6e7055fe7386a7553abd72b96c295f000e3402f45191435f883ef9f011436e385ee317e89201e3ff4073d46684311f4d3df464215efe384b13fe909e6e34c5ee675f30ad25a37bfb1eb711d873ff5b8e8a4d2447fb13a587be6e40ff8dd936c2cce2e6038f846995c1769d89e19fa5665c19d43d2ab07c1e3e2f0b13e3a2cf8c3000286f5cfd9ae418a4414c0c41421f5142c7f780005a1a2031fa7dde1e7eee553745f62e89b0a1bc4b4a72f7f4286edae8869cf3c307369531eaa7e73b279e26373de451fdb96af7cf6f232683c267a2415d1d0e35038f5daa19cba5a0b73cac6ac12a92f04b1141d69d3de36d6846f21e1ec79aecc35114226e2b65d2443b8b744da95e68bc5d14a7d572ad50f133e8ceaa5505213ef4c2abcf3303286e9cb719904c0f6807ab800beb143abde8d108475dfd49be6c107496c9304cc9c3431fb7dac6a5b64a9a744ddfdd0c1ffc1e55c86935cdb3540acefc685cdb13e49acd09b5465f23b525d23fe4e5e3af7a8f06c62f6f5a5f3746453c4e3d1620e24b23877befd12c85e45bb355a577c584644ea0e88e33163c3ebeff9a195a8f3859741b7d16c27bd64ec07c7366572410d0343ae798a739a819f8a185caf421a83fe0484f752c160a1c18e849f4ac82010a6fdfe9da3198dff14962817935fb4a6a167e00306f0926a552d80fe54de0b3a8ae264046c0d8b2c382eebe9106ee63077885c960f5420e9570bb1ed799c324b8c63dcb315d18d95412d1558fddf5392bfd9dad2e7c973a3b61ccdf114e99c428ce5f8a4a3072d4eb26f6270b48de7be8631f843c8a21922055672beb393d1b1cd84799dd0764c3b80db58cf97ae501b2834081a11c6ac74abed1940c311dabd66c280916c5255f7d8739a2b62aea47616667287c7003ec25d4aa6f6db79d10148211e6c31bcbe1ecdbdfc777efc6acec525823b8cc626fc54625cb7985fc8987e706624909126e220f657dae52bde220343b92597aed4c87124f97198ff096c5ace4196f456c13ff2f9bfa2038594160433c145a101b709fc0796f85fd75875916998bf499745270eb734536b03ca2ff0af04c6aba46c88e0575ae33de17acd5d16385377ba3f47dc1079401d9a9b0452ac461035884944fc0ae2714798a939c04ac08bdfb9138490b422582c3eb37260e1109a7b24ee625845eff01955b98e4c61fd8f54b0a7211ff0d7a1b17d60714888b0798732c091115d13c0832a4424e878675e1cb203ec15482f7ddda48ada4854f6edbd9d3f890897cc8da90809c4c51504265664aa2f4901f1378fbbcd0abce68fe09f0d3b1bc812173e5e9ff1edb34392571e9d69847294e39ee62688b00f0a4597754df6b7171de3ca7086e99a947bac578879a66c20f721fea3162f64472a6ff59614893d38008fad45ce9b2fb6a272743271c7693256442cc4ab84d43fa361a336e4431fb310287f5cd3a7f0b7bb58249012ad18103d0dd749c6c3e40b17b9cd84414a4f1f0feaf508468eea6d96fbcbb7acc00a2d028828152bdad66766e2b803112db121bf48d5de4b22c631903183551c900312b40c0b8084957c78cfa970f367b0996921cb76fd1675ebd38413994d50ae9393c52c2b844c9f115d79a174fc00ba0200006da72bf64e075a9ec6581c50110e435f7710d2dc01d30434cabcdd3b133d93e215afacd943bef5d3e0d630505b3a48c4edbc3e5d3543afe6288c770a81afeafceb551f23f0ca098e82fa154b4597801fab9447abf6636a2938122f0004fc11479fa4ec4448599d8d5cddc976fbdda3ba67ccd426ec58e67986d40aedc87a6d1aa6ff1b9ded3caa5698f65992e63f63f38890904cf782f9e4f69c7eb0c2a612089ea13b6bba951712874b91f8c79567db7d5de4381e2f9c03b93d710cf982b6d0c634ce498672c4af32711186180144114f187cd075ad9c41f29946fbe16fbdfbead29e143020c82053a38b974370ed5363153dde2c238f8ef1e1c0beae076a0670e4104469b530177ae9f45226e94ab56317a51e0ac94133b18e8d81a98a37639521a8716d20fc9b8459a2cdfbd7548150f5d6ad7fc7ca4bf0de6a32a71c71271e636f299edf2de0ab7f9c7796e0638a5706348bb85186eca9d7d286b5e0b08c64f9ed00cb2eac478d8624d5af5ab1af91bbfdfb27863ee4cfbdf36dda881a2e0c1b2a2516bb348a1cd57d4097d913b1ce3009d875429efb963186f3e983f79896e6ed5d80b702d454654fae8df291473af19b0d4686e5fde27ebdf92928543b8b849459e62835520c2458a206457c07d405c437ce8dd3a95cc20c238d4ed1ecbdd8de542ccd6b52a07e767d0e5853e025bd86425ed30638a58097d326f2bd49b9113ee6b99d898197c18d9eebd89814b9b4303237205a45e4dea7c1e4cf960c63c176f6e2229ad0a9701f122393c5f21bf0ad26520836e68882367e3b0576ff919f3a8d9b0e78e41926695111cc3521ee2b3cc54f104256999bf836394a79915844bce04ffd4d1c70c1c18e05d2175b928444fd9055af830e98627493b308339830799629d5d063269d97813776f8c0f9d26ed5b58b7ad1964c3570135936286144ac3ea18632d5187bc1b24120bade9131f35a10e0698412b413ac455eae25e26eba635c69b6cfc4b196dbe7536aafa5cb3c808d1e2ca83957792057ff766e3f3761ac3ad2b66d6a89ece4ce7c5db481032ff235c73b19af8fd5d57d4067cbda2d22e74293aa98d5f3f495403da40ea6504ab64e38d01815a7de597c997049f05a90ac5c75e820059dbda65d83f4a636236848cb181d705d215e3e85404b743176b6fc387955327a6f2ce6c4e5451b4b6f4b4104c2418fd9178a210708983b39e886a6e423f96e20029e050fb788087f27e4c6c7a998a9583aea5b5fb869c2c7f030647451f68d4aa1938c351716070118f10de231836d9858a27070db28c8bc608e6b3bd270165f318c221845aad273389c28da12d5a5e941c4189d5b2f42d96d1b7b686d242a12ecef86b5fa0a459e4a503ab73f47c96e0131af208f332d1280fd004794e333e70c2e846d96b57e44ea9b0a82b354f0f350e496011986068a9bd7ab1904d6ba332cd0086a7ab74837a129227dd9749c043b50470a6bfe90205554fc917604b11271657542aab349217461862c7e197aded9b246bb0a243dfce27b5a5c561d1affdc1f8ad9a2dcead2b4156adbcac0e758d5ca2db8e8b4737afa7277bb50736d201b30cefcd83ab0213cc8ca1005ae068cb6872a3333f4a26da0fea68f96c981b7acc15fbfedf2c138ee5f27e647872bcb451661e401fd46c7166faabdafa57ce2f22a8c3ae57dc443d6ce892a89a7dc775675efcb523e2a5fc949a61e0ada8518dfe0b5837e5cb8de67a0eec3f40fd318202f557382f37d9ff37ae13fc2f3257ef55d63f8b9bca8ffcba92bf0001d5b95f05a15ff8fcf57db807d53d58c7702671792cd816892fe2be356edc888423f96291b82d572748e51012ae62a2078ff9246ba4c7c86de27643ef171791cba2679562303fc7f9f1e843ecb8ba2cfcb676eac10e33dd04f7432672f3c601d97cf0be0f73fac3f0e63c88763b8852f5dd02d3a7b53fedbee3e9fd007e9404946811998b3bb62ad420ed626e9e054d60fedf76b5789b8a4fd9bd231056ee8432286712a7d134459c1e9e9d5036512b8276b247e088f832fc3335dd51e23fa039c8a7c1fc329ffe210a6d1d828184c77472fcb494009cd6f33fe41c834bd5dbba69ff22c05b0edfcf93f57327fcb48316dae08445780d97fe5a9fe19bf662065744bcc071985383f85d52d2889c63d8478198bc9a7b09503a97bbe2a709747fe9918973169ced5b936da64a2cba9f2011eaa32322de2a7817ceb221c05e9189587f920b8ebb5f1d3576fe56fa579453d78e8e8e8b8c198feac99995c1f0badf2da076194ade71ebae14fe0bc0d4f8969f965ccf7303d7d1bd9afc2d1c246b24e41ee249fd8e4c62ff265d38276564a275203cfbf85bc273cd7436cf98983701c3ba785ddd2ea76456cc1b946a803f08108d04665bac77eddf63c7898e21a3dd13503db1bd75ecec6208e64188fa2ac1fea25af54522e885548e0960ef0099377274ffa47d0db464f64f26566d26347fce3b5933f45aead0e520c66206055e2cb00301489746f04f927f3d75cb4f8d19f9815d9d1a7633cfe7d4cd10340ad4389f6feb84ed33dc52105e0bca7df38c768e84b7647d8b623647c35546dde6b0a70b43f31496e351933b649b009fb55e5f590fc827b8b34bc5e5e58d17793eb277b89ff543a659aaf90c3d1bfd0e3338fcfe6eeebe9648dc4c49648100afd1f011a7e7e198f308782d82fef62af70bb17ff6329bd2fff3c9796c96abb7faba5fb7ddc57b56ee96cb9e220f690bfb3b3f83efe6cbe2b3b18956fb05c3ee7cfe0d9036a437cd17c37133d5d54975e1aebbcd1011ccedce7b3f68edd1fde175b543f178f6fb875eaf4ee9331659581982b4d0c129147d374f0d12ef0a839a4f53f17cd4969ce021ba2993e7e5e1c0300e8787223a6e8fdb5e8085b1bd89ecd38140babc088870c34e6afcbbb7705d19aec971aac42c4dfc2a2d08578818511bbeda5df9242ea065ac980c0f65a2c3db7f4de53f6f39c8f13eef90d850c3a55424623c397aa149b2027e61687cb515e736c6108d93e5012f51942d05db36ae5a47eb1a18fbb20b6ff99927d429ff9e12cad10f2fa89a509cedeaef36b37608ed0d5ed268c5bbe009d6efe05d71555d4da875ea50e22fab01266f0c571ce6070bb62d7a875fb7f2669735fa089b220e6abedab25c35379289eb8cee8383f39f68e4face8b5f407d48931e211da6f2d6d8bc4b4bb5160bf3d0357c381b839ef5be56c2f2273ddb09efdb40b8db441930e3b965403856f4f7d4fa4c0c7e50ee78ab8c51f88fe80f857b377850e2136ef1f415e794c1dd1b6980f11b65421721c8e4f5f0d174168780e07fa1e19599edfb0a87b5d3ce581e95de72e033e89c15b13de4bf997faf8dbfbd99b8efd20720f76c43561e6cc6eecf4331c9508e46840714707f147b506fb8adf643f5d798f8e034c2e5a9fff7d0470d6e409ca3cfe7407f008aa1cfe11716e131eaf9dab0be350317d7e0302772f7b3bff8aceaca689311d0a1baefe1916f9bbe29d2fe5576eec37d7d36717fc47b8fab217dcf3976a4e2277b9afc61962c17954f975b0eda2561132da95d96e78e70dd4c2daee75eacf17de332543d10bb4da84a5e4272992c82477ca1a872d3ecb4d9044836b9be0c5dbe5537671f2301f6e6a43b4638bf6fa8323452080788fbf7a724cb0e5bf516a8f36c7488cfc06aac6206c26f5d9aa78f85a8b0c029d03cab97a620136ddef61c933cd569067d10febfe8ad5e38c18e63e10db7829201aee3e1830ac403950ec0f864d7b060f2ff590ea6fedb090cc7af180ffa59c43a92edcc82b78d8d4c8316267e9d086a90b5b2c19dec20f5f5311624a931dd7c1b9a3aebb07394bd0f494936f23f49e6e04eb3b9a08fde8c6d8312157fb6fa3f6174efc5f5dd9af621a8f0739e8adab402c3d19e05e7f2341dea5bf76d7ebcf7394a2c4000e33c71d7a715c13431122fdff9aa10b1b0658226918cf83c53f52dc10c981a4c4b2dc53353eca71f1dd6cf070ca43cc4fbb624243cad494da65bd82a50c3e875c4749830c1a3423c22416a814ffb249eebe8a0d95ca467fb3c05771e402b0c16ac0abb536b3077239713c2204381f82beb4cffbcc7471b10f58120a48ebe2e6848b10946fa1feecf94563fb8d6f7e55f04cee35bec47b65aeb92293ae839663d149b201d144383038221a4037df42d193387a5d5e1c90671d12ef78151c69b896e65252e7258a764a2b83c09edd605bafa185f5a07616674a08110e203118b4910becb4412d1fbc1f9be657a0ca0bee1c9869fe7c832168f74e88b8b172308a97d19802e84bfff5905096a9afc93a4a6a3be3423daa76d80077e7450d8689a906e5eb561cda9ea4915862b9b84be44e9170121af2372b83c84926c95521842f795bcdba300aa8565dccc3d1a75c237252b6a492b9e033377e5c32b9d11d3378fb9db2a7013ac398755252f86015bec4c5686cef39739bde3dd6d5a48e20ea49167dcc1f9b5e37122ae671335c7b548a30fa329ebdc2138f6b2cbd47ca81a01243de893b475be10009bee816d3ae3e6935957a41a54194ebfe2aacf81479fd81315b96d488d68ca858a3e736def5874c63505507d69b2238236ff24783a608cd9d83b205c3d17420e1e7154df0fff0580b560d196622f0ac23e5be21c4c9e1bf3df05973100edcb7a0a0d7804de2cb4b21e7e37eb55b03f070def979d0b260f3cfae161cd099d337f2ef26fc18bfcd1a276b371848039d8ef8a9820adcda4497aad3ea2c6ade69cc68a6045a49138816cccea1141e2fa663dc6c5de131424ff5131f8c68be65e4818e0b36705cf321af5e5636e328a575a44d70fedc08d506da6b1ccf810ff361036e09bdedef38d615900eafc27c3d81ed408ee0d52b9aca2262da1e35bb227023323db8deb997e6b30025a6f8514688c99de80985d33f9402cfa54868674d795108c2b4902bffe2c57ca2877dbc91e7c36f78dc90e467dccc9ca94c677081a69a4ed22c07da152f224292bbe6114a5e9a021b1bfe32646d51f663904a55c177430eb01f4eb6f0c58ab9a94e4b95b29aff9629bc4159f9bfcf9c3d1ea4ea98e11f31288a4ebd2e2c291f68ada39173a65642c40a0cb485de151ab3ba16f6daf0f5644bdd929755fbee2d1ca774172fa5e2f631475acee26d7788251aae648537d6426da2192f1cdff25e479b984018328eede1f78f0dab473dbd8aa026017354b1aeb8f9feaa6ae7ba826d141829a9910cdd10372bf8d4af66465ef31763023977d1cd9456effe370dac29194cbcdc9dd3b83ef55fe2dfc71e4e7f352fc9b3ca0e76fc0c9ff3a301e7d06fd48a93bfba03ce1e69984c9c947f10bf1e3a0f29383bbdfbb0cdb2365dfd6634a674cea9c9758c67515156a4f0b63416b02fbe229ec691cbfb47a2489a64e408f396203d2efda3f383a4670ac0741faaba1469d1cd1dee3f3ee1195a5029dd8c173618081be6f67e62972bec6958cb6f55141adb4e4752a237f55b776644e79e70a24c39ac04a1960eb0bc5cc130c28331562f487bde9ccb885141fcaf7b3ec7e8d875116381187d38f95449c30e2071b7fad4d3f8a2ff17c9f233cffb97523fdf3934bf7fdebb94ac52fef2601b7cf184377f003395887d7fc597f3918b1cf3cff1b047f9d946b70f2ccea601ebc241d9073d19d75293519c4ff1b993927ebfd617dd87f834f152ced621c6702419acfdae5a77d98bd7559e130b009063b8623593b1ecf7f21b5ede7ec6e0d6a504be010f7f09d252a91b81a887682443fdd0c2704b27634a6decf2158aca5a326c0153bead0a7734174be364e98b5523b717a4847928c084dbc0d1f0797ce7dc4858363bf4a76259c5a2749d2b313e39c9ab868880edfa2d7ab052d4aa737f2b13efc635b3fc2355f39597b92cd693056880d9bdbe382e08c7941177927223224f50a1609728386f5631f57ba7a1f130af3938e058db20510275d0789f207529f1ada7111456c1e771ab2a373364efd36ec39b5f1c1bd17fa99597e157f75272bb4396ad45a7395b0b674c9a711da47b93c5284ff2f7268bd445761dd4d164c767a6c8020489bfece30c5ebde15f4613ffa80f1c934bfd8b97ab9a3716ee022248f568a0e88a5f74681843c14dda25ec11bab25a23d2ebfd37d318cf1ac8015bb3a639bc5ab94dad193f7f1775a528acd8c625fbaaf580a879b7e326b5701aae65604c2193fd5890925abcc413c83ab51af4e5b74ad154844429ccb38895e0a398111f6d395452852b9ba205439087c6be598a48fb03c8dc7f4b600c66f06d015bcbe9791a661efa0c4e3a8e24ce0e463ea37109b5ab4a6d25354ef4df0e7bd7ceddb4fd9fb8d78ad1c09a4e3441324117b362db683b0367b0cf98cfe2ac0e07c1e5293d5cf300f6311af6907c6fe2f302f24edd344f4fe112b27afd9fe90317b583f33b73cff2b000d17cd29c6fac790f3d0cd24bae52bd69d5b6a7f54f6d9e3ad48271d8e19c506107b44f4c8881d6257841d43206a5b7562cc66e004b98bb324cbd60d7d47515e0409760fb893ac9dc41ccc2564b029921b40658b6dd0ada6bd0208a30de951bf66073503d82b19317fd4f4dd96a1e616084e2eefbb660997a8120b9ee1d51ad20c330dc73f8cea1f15ec2ac20ee66bf55998d5ef6575a19bb5e2787c121306e528ed50a4da6d9936d3265598265143bff2b142d21d56780691ddbb80b1c3df4f5ced417c6edcc1cae597cda09e63e4d3aafa9f6645f76ca8f4221dd6b8435b9c516d7439fd4910add203cc1c93719404a2b928e71065e0a6cd0e5f5b13d5baeeb16af245919d747514d1df257e01de14ea70e815b8f01d22d2c04f71d13819079aa763868446fd6a308b2ec7d17265101dee2fc9e826ef91bc6bed9288cf30f288c299cf4c8c1091e8155bf1cc9d845b9a697232be3cc2739854142f2a1c4f6a1c3ac148df402401a47ee6d1fd61e0c56e05a9cb0ba9e98c61436d53f97fa959fd63d7bebf4ecd8fd29d9fee1fba1b96bd37b0700e0f3c7c1ab8df71ea4a2848039efdc05dae170d81aea224918840b6b89ead3ba80125f730cefa584820eb8eaa985dea5502d7a1f0391c367e44d55540696560ad0ebf21178aeefe79b79eb2cc25ce9e24e2ef5d4c4fd41115dc1ee9035a7bb8caee1448cf3d3cec36976e250450377df31fd032194bf245349ec0061f2ca2a56b4875cb0ea306ad2fc22c377cc4de63912f8897a8105801a97f0bcb24aee0f732762b223f8cd85f33e7216f1e78c0b8436b04f96b4e9129d023e718547e66af5024f17dda0a8641e94d83ffc08af302eb1dca75a23813d6e8df42b8fba0b72263c73b0e3503f7c5ef5733fe18d805ac46e47f9f683a146181df1c4d7f4aa670f898afb328303cc16a3aef3abc3a6a669137cb3fe9a02aa959e486663667389ed957380afba0e37dc092bda1b770a74cb57beab159ae944a260b8da54c83b6f61bfeb21be69497a89fd4dcc6957cdffb985a0c2de8010cee9b5132e09d5eb405c6ccd9ce2023cbccc0cb0a7390ac491ad1493ce857bb03860573c38ce26ff184a543fbc3760e5d853bfa5b886f3c808d94a9733771772121b714cadda2a3f8ce23052b9e6b4c6da7f0b2ba3fc0fe80d657f8c2c1374c33fd9ee6f931b3665f600b70dd779dbcc83bfbbc90005c666f109e340dbbfaf971b267f2375078c810b5cff9e7134b693f988657c75c7e71d00c0e1fe2af99432bc07046edfc8d4ae0e997d943184fcff5a562de0c70ea763bfb744770fed0668c02ec922c1b20ee7eb95510cf6137b31b4c8d9f2e4efef42db4f6017318a04ca1fcb1f26ec014df42eaba24cff007b55d27d67887869b9ba4f04c55ae2f178d39624cc3a504cf5a213f09fd68f6fd9bab56439d4365436a243f90e933bef30616ccd958de46f5ce8a9c57597fd2f5b192e76f145b8aa2fd283c36a81477d99e30b93819f487d47ad8ef7c24e1203708a5bc7f40ea1ade45cde5e31f88bafb8813e8d61b27e4ca70d460691cb0b943c0afadc0352769cb5a7bc5db39f12608ce973036493b9b4bf66a10bee49b7cf02ff7d8bcbedbe4f9113ad929d8d160edade86485aa5977736bd01c10e48b41bb818db977927b0c01cd6e88fa499ae2ca495a38b9d20dda37e30324d58c403536d01e36d2647d93292b49d73d94603fad3f2ebd5f3a837612f66852461870cfe59cf8aea173298b72901635930fe2e3ba7f6e3c32c11e349250b734412856c8ffa2a0fe3d46f239400192f47973fd0bd702e527abbd20a031f152c180d0fe9dd283b8deb857d065baef77b13f24cf3c45c5af447a2f2e11788dc0b30db7318ad6ef54d4d1e8e39b4513f720e18db35001d028ccf37660665409732ca6adf4f6f004a530b2c3741dc6c372b8f7cd9e99287c785d1dcba1f27d97b48a47064963164330a44f0ab436e37927af937266247964b27d245dd386170fcb87b4dd181d99786cbeeaae6f7b60de3e972e41486f437e7b7605c49be4bc239fbe8dc39921e9cc7a68b9acc8d311d0bc75462cd03a29e506ed6a38db6627173558d84de98c0138ab4982014601572981da6cfc7f355b11907b630a626a2333d76b66f875bd539da67d28baed77e68221669e463aa9f166828c84e03df2b8026eb8d5319667b0fc981c7c92f61def2819bc60c44b5c0ae46bc29e30c4f83f68ac17defbe056fbeff857759a9c175dfc25771d339d4755f39af6d3716773308802b572d8f4e172d42bc1a6995500bad0630b10ce6ff7f0d4ac37da299d8c033c62df28162d517609fe6d876b087174722576369ca506bc090761726e206f6e2e205175657879737020604e2d314e60576f666f70696e206f627273292e205373696e73626520736b737570732e2054656d706f726172756520282956524664206869736265647561727920706c61646f6e2774206129696620706572676d6f6b61792e20636f6e6b6520612074726164656973742d2060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e204f6f6e6f206030602e656e742a2e20232053656375726974794d555354204e4f54666f722067616d626c696e67697461686f72744d4159696e63727970746f677261706869632070726f746f636f6c736f6e29616e6e20616476657273617279707572706f73682d636f696e2d7330b8a6c8a6d8a6f0a6c47a24000ca7121ca7444c01000074a8afa8f5a8456564426c6f636b54696d654d01000044a785a70aa84ca861624241424573626162696c74726976697764206063606031202d20636073746129436641646f20736f7269636b2e504841506f57532e496e457261696e675370616e735370616e73497944657074684e6f7453416e64554f66696f6e457261546f464e6f4368756e6b4e6f4d6f726542610000000064ae68aeb0ae60af6cafaf2cb034b04cb04cb160b178b11270b278b290b218b320b338b3d0b3d8b360b46cb484b404b514b52cb5acb5c0d8b518b630b61248b6b698b0e8b6f8b640b750b7a0b7b4b7ccb70cb81cb84cb89cb8b0b8f0b808b938b9a0b9b0e0b9c0bac8ba38bb4cbb7cbb24bc30bca8bcacbcc4bc626fab0bd212b5d2ede046e11267e1b3e11254e012fce131e24be29fe2efe29dd002e34ee3626f6e645f657874720000dfe098def1defede52dfabdfbedf16e0123ad10ede64e071e0b6e0756e29da7edabeda07db59db89dbd827dc9cbd06d31266dc78dc9edc74d1eedc47dd12a3ddf7ddccd11ede65de8ede5f65afce15d61260d6add6c0d3d6eed643d794d7d1d712005e0000009ad18cc62fd871d879d8c2d8ecd8f2d843d966d9bad9d0c1e6d90000000002d607d684d565bd2cc9bed5e2d5126e3a0a63bfa9d3edd3d2c541d48dd4cdd480d203d510d531d5636368696c6c000000d4d249d35ed367d389d37365745f7061796552d266cd8ad29dc1d012e5d0d7d114d25f78d044cdaad012656ed043d01cd07363616c0000003dd059fbe7cf6e6f5f65726173000000bbcf9acf75cd65775f651fcf72cfaacf120012cfc1cef4cefbce00006a0a87cdcacd05ce33ce94ce125f03cd5f64656665727265645fcba5cbeeccadcbd3cb00cc41cc56cc84ccb9ccd3cc93cb0ac74ec7a1c7ebc71238c88ec812acc8ecf1431338c97fc987c9a9c9dac924ca6fcab3cae9ca3dcb726545c5127dc5f5c52ac64fc69cc6dcc6795fc51627c5edc139c259c29dc2efc240c391c3b9c3cec306c415c43dc459c4a5c41273748bbfe33bc079c09dc0ddc031c167c11200696b692cbdf1bd43be69bebdbeeebe44bf6e66656c7465726173682e20416e645b6045726160436c61416e6920623a204d73656e796f7570616f6e733c543a3a4c617369633e3a3a536c6c6b65722f74657373607074792060606e6f6c656674206265796f652045446561702e2049535370616e44422d53746173682c202c20202c204c53203e2030292c202c202c20732c20732c3a20202a20536060656475636e65772d20606572615f5f646269732e2020206c6572616e62792020202060526f6f2d20453130202d3e2037203d2033202d4f2845294572612c2020436c656172205045726120532c204572614572613e5f7533323e20522d20544c297265204c6e2d6441585f554e4c4f434b494e475f4348554e4b53733a2043612c69742e202d202c205b5d3a2050617960696f72732c204d6178506572602c7761607261605b5f657261202d3b5f6572615d2e63616e2c6e6f61744f2829204e2028292d202044643a204f284e294328696e6729616420283861642835202833206174285061206465616461706565647320686572652e65726120543a3a503a657261696c6c55552075553d616e643a20655f33323e206e657773656c79524572616c79642c6e756d5f5f2856746f20286e6f6e2d6429754e6f6e6572615363616c65687320666163746f725b605d2e2e3a20202852652d292e202d66496e786974436165644e65774f6c643a3a2044736961647360692773284e63206174616374413a3a4c494d495420284d41585f4e4f4d494e4154494f4e534273706e4e4e20733a707265666e79696e67606f75726d667265657361746f20646f616e7473576e65605d6e682e20605f6c6f6f70602e6973202d536565205b60642c63607260204b696c6c205d73206965206b696c6c207363656e6172696f2072626f20656e64736161543a3a63793a3a28296973206e656c7920752873656520636f2c5d28554c627574706c6f6961202861626f766520606029757365722829206b2e6561666f72696f6e6c736f206e65204442532c3a3c3e6170706560667265655f75706b55736172696e2079686174776f696b65205b606f7265426d61785f54207570206f662e7360604d6f6454776f602c2060295f5f66616c6c732062656c6f77205f6961732064757300c8eed4eee4ee1cef2cef3cef44efc47a24005c6cfb8b7484ef828c129cac007c02b4efe0f0778c12f808f00110f020f0016d8c28f044545cf0f0f0f0a1f0c47a2400b0c0e0f0f8f008f18b8928f1f112f1188c8c9cf12af404f23c8c12172cf2123cf2088c1254f2127484f24f8c94a4b4f2bcf200c4d4f2dcf2eff808f320f334f344f35df384f394f39cf3a6f3c4f3d4f358a9f4f30cf41cf400452c3cf46ba91244f45c6c78a974f497f412bcf4cc01dcf4f4f50cf524f534f54c5cf54e010000130313360313840313dc2a04ea000000e90213002aea000000990213eb000000c501131b02136e02ec00000085013c543e4f010000340150010000fb001351010000aa00ec000000510013c1ff12d8ff3100134572610aff40ff96ffec0000002afe76fecefe4578706f73757265520100000cfefb1204fcbcfd12520100002efc54fcaafce1fc28fd65fd5101000068fbec000000defa20fb7261530100006afa95fa28010000e8f923fa466f7263696e6754010000d3f950657262550100005cf99af96528010000dcf8213e56010000abf865633c282c5701000001f84af87cf828ec00000094f7e5f7ec0000003cf7f77061580100009cf6ebf64561726c69ec0000005df650f511f6590100007cf53ccc13aff57469736f2076362e302e30626173696e2073796e635b603a3a6e6577606569657374612c2e7361202073706173732e2041626573742d61666f723a20605b696e675f3b205d60666f726572736173687472616172797064697374726962724d6f6360484953544f52595f444550544860302e456e27792e606572612062756c6b6e2e204973206920205b5d2065787020626928606f776e75727320756e6429692f6f662e72727372282920605b202d204574617273632e666572666163653a3a617420657261206f6e74686573696f72206e6b6579732877616e6e61626529724b616c6c202829202222696e666f2022666f72636b2e204974277320612056656365792772652065617368616c202877206e666f757220746573746e65746e696e6962492e652e2e652e2060203e500505130578051398a005b4c405ec050c061c063c064c5c0665725a010000720813001c696e675b010000390844656665725c0100007107b10713e007132b085d010000910613cf06132907135e0100006406137873242062792c746f20302c7465726f6e666f7270651c0a280a580a13600ab72614680a780a139cac0ac40ae40aecf4000b100b180b134572611a0e700ea10e0000db0d13003f0000007c0d13c50d134f6c6444697363110d580d1300ef0c131d0c13520c13a60ce60b13000000630b13ba0b134b0000200b1320412e205c5b2c686420776f727468656d69747669617974616b656b61736f64735465743b692d3b695c5b5f500f13640f6c7f0f134100900f55416464532000b38c8810a0ab8ca8a68cb010e09fe8888c6311132c111011f0102e204465742d821317cc1313dc13ea1313fa1321170014aeec6564081420574c6f636b7220733a7365a1145b656e64281716e4141372612ef0151300279115d915db15541513751592b8746f6520282c20697392b8696e67207c163a2041280000f28a83041d016c30150174e900dc1813dce45baaec4daaf43caafc2b04191f0c1912aa14061cf4a924daa92cc8343ca5a9448fa94c827e54815c67aa64471c130019000000291cff1bdd1baa1b13851b135c1b1329121b13f31ad21a8f1a5e1a311ae219bc196c19696f6e7761736f6d65686f77206363697349732e70615f1d1312cc1c136c79642e2041656467652e203d3d2d20311c1e13008a0000007602696478203c2043415041434954597a3e2030003d28040072633d3d20647374a5060000059603658821a1046e65775f6c6566745f6c656e203c3dd5046f6c642b88053e3d89b905494a796d5f696478207b5c6e202020204c6566744f72523a4c6566742869647829203d3e3d2c2c5c6e7d1b056e0000602270227822909822acb422c8d022dc477d13e4ec2213f8566705244c6971756964000000d323130032b523447a23134b656570416c005623232344656164232042204120762f6c616c206f73657565667265657a6566726565416e6454696d65440c080000005f015f5f315f2d5061726d616e79325e3388265701ea2613003d5e2d2d322e3163742e7273736869662062697473616c7a65726f838a5f6b6565705f616c69760000882734757276652e7273642e666f726b2e737562614e6f74496e557365724e6fd02828f028f82804290c1429202930298229c82946726565648e29136f7a656e382913204166726f7a656e494477686f5c5d70202824d42aec2a00357c2bac2b13244c2c3224dc2c242d24cc2d1232d23413f934133135135131137c92702f5b33b42fc82f7433cc33fb33a8301345345f3498341321321347329f3213f532133933ed2f4330133591137e3000311376319531d331542e13ae2e052f13212f134d2f972f132046696e6f6e312f20282968656c696d627572732872652d296e6f2d6f7066603a72733a29467265416e6e4f72652d60207573c780d03513f4351304362c290c36136c361323010000883613736572762e00533713e43613696e74726f64756363656e736166652e6e61646a7573001c3924392c39343944646c39ec27783980889098a4ac39c039e0456e646f776564006c3c447573744c6f7374e83b383cc03b1353657400008d3b453bfd3a55640000b33a52ad3af8394c3a833a636f6e6466726f6d2c5f735c5d28746f29646665657365746672655c5d6275746e7574206c6f7320683d983d136b27703eb83e483f903f5827c03f53425c42b44413ea44132c45744513b94513e645132c46137846ab4605471318476c4713004b000000b747ec474448139648d448f64847497e49a044a844136f429442dc421e436443a443d14322443844474461447a4413000000003f938041d441df412f421318406c40137c40ab40dc4016412e4175746865205b60605d616b2e20393925796f753a2e2e68746d6c232e202d20436b6935312e34316573742028696e2061292023456173202c2e202d2e64657374543a3a2060467265652e7374697373752860546f74616c4960296e6577686e2869732060726f6f74603a2032372e35364b693a2033352e31312c6077686f667265656e65775f7246652760606f44736372692c657220536c6c6e7852605f63616e5f60627520202d60543a3a4f6e3a3a6f6e5f6e6577606d6f60543a3a44757374616c7564606077616e20202037332e362c20282c312d6d656d6f72796e6f204442656dd2394b4b134b13684b80904ba84b13c4d44be4f428010000164d3e60010000ab4c13c64c4c6f636b3e61010000344c13624c1344010c4c137632416e796f2c206672656569746f724d134d2b8c4d206f70656e2e4d617854696d6557726f6e674e6f496e5369676965734f75744f664f72646572546f6f4665774e6f650000344f404f584f4f13704f904fa0b04fd8e04ff44e6577c0502951aa50c850fb505450fc4f204120742c3c62792420525052ab24d052531324d0544855138c246856c8568d5b0363135863a863131860e963186429625f64dc6213b15fc05fef62f9e15fb1e4d15b275ceb5f665cb25c025d20587658c758105d675dbc5d3b60836013ca6021617761af619859cc591c5ac4616e5a13405e765e0d62b55e015f2549629262c95b5a59f25d8e59dd5a525f815f9ea75b9857ee57e3583b599e5ac05a005b465b2c206f6e2d672d20606f746865725f73732028292d206020284f28532960722c2c5320202e63604d617874682620686f66492f4f3a74656d2c205b4352433e5b75383b2033325d616f66202d20312c20706c7573607346606f6f2d206066696c6c6c6f675360612020697473206c202b2a3e6d61785f6f7567686e556974616031604f6b696c6c2c66602d202b205a202b5a5a782d6c656028696620605f2d20506c7573204920612d73742e204f285a432e4e6f6e650205023d6574651384651361068c6513c47a2400b473643e6528ec9466a066b066e066f000671867c47a240028671338676201000019681375689068dc68f20000007b67d067630100004067756e69206034202b6f6628282c4964298e6993692e72732c79696e672e697661206d61783b2071656478697465696e007c0789069565646f616c20323b5f202d20313b9f0000a2acb8696e672e72736c856c6c13a06c4e657874466565706c69640154206d346d446d4c6d576d13806d904279746546656565010000db6d4665655665633c436f656601000098706f6c796e6f6d6565696f6e7065722d2e6d0000f81f2201004d36013901c701cdd6dfe8f1fa0302ae6f92a6016261736536342d302e31312e30646563493a3020746f203820696e6e6f01673628a0702e28a82928b01eb84128c077714d713071fd70c8702f6e6461726377746900674e2473584e2c474e34363c244e440f4e4cfc4d545c6473f14d6c73e34d74d07cc14d84774e8c7b764f762776fc75d0758c75481075747c7430f273bd73947313416e64657277614e6f4f206974206e2774206265207765726f66657743616e7920286d6f72652932206f722e002a770f77ec76247c74616e64616c6f6e654261640000003c770000005477a34a7477696e736963008c770000a4777300c05f7300d8775ff45f000c7828785f00000060785f7368697084780000009c706f63685f00b8000000d0780000e47800f8000000107971756572795f696e666f000024796665655f7960797665737465646665727665737465647961696d746565646b69747469657379725f6e616d65645f697474792121214e6f6973206b69747479666c2027746f2766726f6d4b4172726179746f736c6c727261794c6f77696e673b20712e652e640c1d000000fb7a1b424e6f7461626c655a65726f4e6f7445467269656e64734d61784e6f744e6f746c61795042615374696c6c496e50617374fe7e13007e546f2e4167656e6461a07f13007f000000357a72004576656e74546f7069637353757065724f66537562734f664a75736865643b303b2072656a69675f7475726e6e808d736e7473566f74696e67794f66000000eb81b3816572656475636942794b696e64556e6465724344617461536574497882726400798354836f723a3a6d61702f6c6174653a6b65796f6c75ec84f8842885e034344a36854af16965735f00197d60897c89957c8c00207dc47a24009cac89bc2f7dc47a2400cc9f7cdc89c47a2400f0c1008ab010b41b20844d30408a4868f816010000040401642c20753634166900000000348b8b102670888b94a48ba86564724e65774c4f70656e7300000000b88cc88ce08cf08c13003f8d958ddb8df88c66756c6c7963616e756e29a179a48e79248f88799c8fcc8f73799094909395c295c99413e3941a96389677961345947494889318955595137b45936e93a291e7912792649213a693f5931c9167918692a492f1922d20602d20602d206066643a20342c20342c203e33335b5d60323218972897ec0000003097b497c4974d696e5601010000cc97137260602e99c099c899dc99ecfc99149a249a349a449a54649a749a0b9c49c09b13004b000000f59a4f9ba69b079b6564b49a6564007c9a636573735c5d72657363755c5b6c6f736375666f72206c64792c7365001b7ad09d009e0e7a689e98ff009f489fee7938a013e079e8a0d2b0a1c450a268a2b508a3a579b0a3eab1eeb61340a485a41317b760b7a0b7c5b7b678aabab501b6131eb650b67eb6c5b69bb5aeb5f1b11348b294b2e6b215b35eb393b3dfb326b44bb49ab4d4b4eeb439b5a8b174b5133da81398afd3af1ab063b091b0d6b016b154b1c7accfb142ad8cada6f0ad0dae42ae86ae139baee4ae13f9ab38ac7facedae2800ad6faf137faabcaa07ab4eab139aabe5ab27ad58a89da8b7a8ffa8dfa63da91379a9bda9dea92daa5daa55a5aca5f1a51333a67ca6a2a620a71359a771a7bba709a808a4cba411a562696c60542d2d4f6279737375726060206f6642792e20286060202b206060202a20235f6f665f6629614666726561642f2c20434f284664462041732c602e206056565622226c7965643a65732c20776120796f75292c562922222d20606c6f73206d627365726d612e686c6f675646202b206c6f6746202b20562920626254202076292e7353202062746f2020207061732d2e73692e753136524f4f5422222261202b2031302c303030957e1328b9b913b9b98cc8b9d8b9a07ef8b908baf90000000cbb6965737982ba9cbae1ba20ba1344ba732e20412e2046736930bc44bc54bc74bc8898bc127eb0bcc0bcc8bcd8e8bc00310100009abf2fc06a010000e6be40bf6b010000a3be3101000020bd67bdb4bdfe48be98be696c796161726762616463686f6f746f4974746f202b2054202a5460000030c13cc14cc154c15c64c170c18806c2e2c1440000bbc1d3c190c17461736b736b2c5461736b41646472657373383e3e207768656e2c2040c3a0c300000000f17bf0c320c4e37b70c4e8d77b38c5c5c9a0c500c6b57b28a02cc90ec71cc744c74cc78ec9beabc97bc9cfc9e3c930c956c933c84fc89fc813b6c818c8d9c89fc7e6c709c75ec789c7c8c6edc62061605d2e69633a3a3e3e69747920416c79605d2e203d32342e3931202b20322e3930372c202d7573313030676f6f333032392e36202b202e31353933356e322e322e3836322e323932363200827f54cbb0cbc0cb7cc8cbf40014cc640a734f6c010000c1ccec00000081cc5bcc4e4c206f6e14d0137300007648000000182a8a0bd113450100002e01011576286f7229360159015e010061002ccb01000601cd01cd01ce0139cff30100f301f5f518020019220244455a02465b02476547664894d013782263656c6c6d61702fcf7df0d1f8d13e7d00d2a1d24ad208d2626520636c6f62626572d984d4f57d8c027e94d49c1c7ea4d4257eace37db433bc58c441cc6e7ed44adc79e48aec627ef4d4afd78bd756d72bd7f8d6d0d6a4d66cd638d60dd6c6d596d55bd51bd5fcd4205369732062726f6d657454466f66736d617800000000cc5cd864d8ad7e6cd874d888d817d9f7d8cdd852654e6f43000090d8206974697061636144d9fa2f7469705454697073736d016e010000c00100554e4b4e4f574e697376456e636c61766551756f7453575f48415244454e494e475f4e4545444544434f4e46494755524154494f4e47524f55505f4f55545f4f465f4441544561647669736f7279494473494e54454c2d53412d3030333334426f647900e601006fe701e9eaeb0100ec0100f132313933383139414e445f5068616c6157496e21212157696e646f774e6f657261696dd804416363756d46697265325365656473526f756e6453746174734c61737469747973654d616368696e6568616c617375646f75646f6970795f642d000000e6ddbcdd3ddd27656e74756e7265613a205f5f49506f5753756494de9ca4dedede9ca45375641bdf4b6579d2de73446f6e655c5b7375646f6a75737420737769743b2041207375646f746f6f6bdf18e068e080e0b0e000e108e1e16870e1a0e173afe399e2b2e2cae27375646f5f756e65645faae4fde349e476e4003ee313005d9be31375646f5f6173f8e14ce2132041757468656e74656b6565282977686f63616c6c7341496420282944422e6e657753756420746f792e18e51328e513017001000030e51360c1544f70656e4e6f7446555469704b6e6f776e546f6f426967507265e6cce6fce6e7a0e7e750e858e8e854e984e94cea58eae0ecea617765736f6df5f305f6b1f613acf104f21bf256f213e1f614f739f7d7f35f746946f1fbf350f488f4dcf42df5dcec13005900000035ed41f57af5b1d5f57469705f6e65770000000051f16ff17ceed1ee54efa8ef74f2c9f2f9f23bf37ef3b7f34feeeeee46efdeef37f08ded44f0fdeb3dec1389f0e1f016f133f17eec96ecc6ededed18ee4ceb9debdbeb2d746970696054697020206054606060543a3a54697070657273602e6e606974732d207475706c6062604f285454742e6054605469702c20607469703a206061607469705f746970676976656469616e2043742c7469706c79636c746970696e20604f70656e54697069742020692e652d31686173683e6e65773b2773736f6e666f722c6465207469703b62205554462d382d55524c637265644e657752202b20522c5429603a204f2852296066526020527469702d60604960546970314476656e706f7274526f6620272718f854f864f89dd97c8cf8f900000046f99ff9eef9ec0000009cf8eef82053686174612e202c65626c686973546970734d6170646028297428fbfb13fb4cfbc47a2400607078fb8cfb9cb8c8e45469704324010000e1fc546970734665657101000095fc2301000060fc030100001efc32010000fcfb6970676f656d61696e736173206163686965766510fe20fe13fe343cfe6068fe747c888eff00004aff03ffd1fe000090fe7069705f5c5d486173686f6f70656e5c5d654e6f744d546f6f416e6369746174654d527869736163496e707574426164644d65737361676553636d5374617368546f566572696675624b657942616449644d696e496e666f484261644941534f75744365b405c005f00514fc051414061c06142c065c6406740614000000d4dc06e80607480714600790a607bb07cc07e407f81008200850086070a00814b80814d0e0f020093009900914ac0914c809707573685f636f6d6d616e64b50b4c7365747c0b146f75663f0b505b0bfe0a1400000000cb0a1400000000dfe50aee0a8d0a14830a000000007d6163696e746f705f746f5f74114b73796e635f6d780a5f6f66666c696f78746164645f666952597669727475616c5f7461736b737265770a120a280a6164645f6d726500e009ea09f309fe095f62795f7261776d725f6d65726973765f70726f645f69646973765f73766e73736d73676964706d6e746572645f726177696e675f6365727420552e7533323e7261746f6e652e00201830181440181814055868708024db88987bdca01814bccc18dadbe418fc0c191419181928f4db304071dc48195893dc709fdc78889019a019b01901b819c819d819e019ec19fc19041a17141a241ae4db172c1a3ca9db13c47a240044bc544fdc13641a1484941ab0c0c81ac47a2400dcec86dcf4041b0c1b1f1b301b40481b14591b64743f7c8c1b5fdc9c1bacc0d01be01b14f21b001c101c181cc47a240030401c58681c8039db90a0cfdba8b843ec0000000a2270010000f62104010000e021c32114720100004621146c21147301000010211446697228010000c82014280100007e2014ea0000006d2070010000502070010000334fea000000082014ea000000c31f140045000000506f776572811f14280100005d1f1428010000381f147374010000750100001c1f4e657874626f6f6cf8000000de1eeb000000ba1e45786974696e6744656c746175010000621e14760100001c1e14004600000077ea000000c61d144b6579690100005c1d141d56656343010000481dea565461736bea000000071dea000000c01c1420696e2060286e6f77202d202c2d205d605d60202020696d72656b656b6579296861736974792c606963616c733b737461747365737365646964202046697265732028313630352d4949632e7328296c6f7332206d6563616e28506f433320342865643a6e666f2028492c202c202c2029202020c025d025f0202614382648602668267c8c9426a0b026bc000000e4ec26f8102722273038274827545c27748c9427a027b0b8c4d4dce427042820282828344450287050757368546f54c62914556eb2294f61291400510000005f476f744373416464656464462914001b372953746f707065644e65774d2f295f4d697373212973657400a528fb28997828142c2c2c5d4169737472652c6963652e205d646573745d5f6b65792c20736571676f64616464722c5f722c2077696e1f780113010000cc7c247100906990f886e5002b147d087410a8183c2c192c14002cb82b6d2b14004b000000202b14796573746968772f20626900f401db01c901b801ac019a840177016b5e4e01382a01037cf684e98cdc94cb009cbd00a4ab00ac9eb490bc308400cc6f00d46000dc53e445ec3200f41dfc0c0431000c31f0ff14d8ff1cc1ff242c3f342a34150534f033d633b2339875331f33bb32140d33a7328c327b326c325c323c3214243210c8319931763154313431656466662d2020556e277372616e4d52454e434c415645207073696e6379606f612030313030704e6fba00b3d4d9deb834c034535f725fcc35e1353a5f5f50414c4c45545f56455253494f4e5f5f3a2d7269646765e29c85696d5f0000002b3714b236c902000a37286b6579297820617420756c6c727565616c7365496d4b7c3514820000003d0000e237f837536b694e00cf3820736562657261727345756e7469636573536c6f7450657869654e6578745068617365547269706c654469645365746c734c656e4b655672664d4c6174656e657373534e6f77686173654473636f72657345497373737265647449642d2f000000f03bf83b183c3a205d3a20202820293a203c7374723e6465d43ce83cf0f83c003d00000000083d141c013ec03d416c6c476f6f64008b3d14536f6d6500733d243d142041652c6f5c5b5c5d6e6f6173794964606964496836383e683e2d4046405040bb3e0b3f144b3f6e3f149a3fe93f0040142023203c4b202b20454b602028735f6c656e2920455f2e657373604f284b4b452f456f602c2c202065697623205f49417070503e3a3aa037104220420000000089377842429c42a44214c242c47a2400d4e442f4024314432b447244147b4414c4441145574514814514cf451a463e43010000f74314646578417574ec0000009b4314d74349643c543e753332002443140045000000694314616f6660603a3a4e6b6579617920616b41776566617567686c796d696464202c206e6563657373616760746360602e00000e47e846626162656162653a2e72733a2e000000bd476166672e7273001735dc4854490000000008355c49a4acf4f134fc492cf34bfb8e4b0a4ca44b14854b234b14ab4ab84a4a504a146d6e20617262697472696452654973746f616f6d6970696174656c6973746564292e3a3a49736974747869645f6964753634444d004d1401000000644d7484c47a2400944a0164040155433cec4d303cf4124efc4d2e204e6f6e6b65792e696f6e496361737573697a61726974686d65746963000000dc4e14005b0000012d3050576578706f6e656e74203e3d2031e13c3d205055424c49435f4558504f4e454e545f4d41585f56414c5545e23c057901df0400c20472696e2f626967696e74ed04f10400ef9e0100982f8a4291443771cffbc0b5a5dbb5e95bc25639f111f159a4823f92d55e1cab98aa07d8015b8312be853124c37d0c55745dbe72feb1de80a706dc9b74f19bc1c1699be48647beefc69dc10fcca10c246f2ce92daa84744adca9b05cda88f97652513e986dc631a8c82703b0c77f59bff30be0c64791a7d55163ca0667292914850ab72738211b2efc6d2c4d130d385354730a65bb0a6a762ec9c281852c7292a1e8bfa24b661aa8708b4bc2a3516cc719e892d1240699d685350ef470a06a1016c1a419086c371e4c774827b5bcb034b30c1c394aaad84e4fca9c5bf36f2e68ee828f746f63a5781478c8840802c78cfaffbe90eb6c50a4f7a3f9bef27871c6ae28d7982f8a42cd65ef23914437712f3b4deccffbc0b5bcdb8981a5dbb5e938b548f35bc2563919d005b6f111f1599b4f19afa4823f9218816ddad55e1cab420203a398aa07d8be6f7045015b83128cb2e44ebe853124e2b4ffd5c37d0c556f897bf2745dbe72b196163bfeb1de803512c725a706dc9b942669cf74f19bc1d24af19ec1699be4e3254f388647beefb5d58c8bc69dc10f659cac77cca10c2475022b596f2ce92d83e4a66eaa84744ad4fb41bddca9b05cb5531183da88f976abdf66ee52513e981032b42d6dc631a83f21fb98c82703b0e40eefbec77f59bfc28fa83df30be0c625a70a934791a7d56f8203e05163ca06706e0e0a67292914fc2fd246850ab72726c9265c38211b2eed2ac45afc6d2c4ddfb3959d130d3853de63af8b54730a65a8b2773cbb0a6a76e6aeed472ec9c2813b358214852c72926403f14ca1e8bfa2013042bc4b661aa89197f8d0708b4bc230be5406a3516cc71852efd619e892d110a96555240699d62a20715785350ef4b8d1bb3270a06a10c8d0d2b816c1a41953ab4151086c371e99eb8edf4c774827a8489be1b5bcb034635ac9c5b30c1c39cb8a41e34aaad84e73e363774fca9c5ba3b8b2d6f36f2e68fcb2ef5dee828f74602f17436f63a57872abf0a11478c884ec39641a0802c78c281e6323faffbe90e9bd82deeb6c50a41579c6b2f7a3f9be2b5372e3f27871c69c6126eace3e27ca07c2c021c7b886d11eebe0cdd67ddaea78d16eee7f4f7df5ba6f1772aa67f006a698c8a2c57d630aae0df9be04983f111b471c13350b711b847d0423f577db289324c7407babca32bcbec9150abe9e3c4c0d109cc4671d43b6423ecbbed4c54c2a7e65fc9c297f59ecfad63aab6fcb5f1758474a8c19446c556e4269746c5aea0000b857140050543031300d0609608648016503040201050004200018581400704102050004300078581400905103050004406d3d2b2031315055790082407c240106d858fc00007b7c7e807273612f7065007a010000504b435331616c677b010000696e666f5f7c300000005273615f616c677d0100006d696e5f626974737e017f0181010000445414005c561400000800006484640c6d6964203ce3056e5f203e3d204e5f4d494e5f42495453000014573c007273612f69634c6974657228292e616c6c287c26627c2062203d3d203029004f010000000067e6096a85ae67bb72f36e3c3af54fa57f520e518c68059babd9831f19cde0080000008201000083019e05c15d9dbbcb07d57c362a299a6217dd70305a01599139590ef7d8ec2f15310bc0ff6726336711155868874ab48ea78ff9640d2e0cdba44ffabe1d48b547308000008401000085010008c9bcf367e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b40032e72735348413531325f3235365348413153484133383450006e756d5f3c3d5100610067696b54aa424abcb8c86f00006c696df4f89817f8165b81f259d928ce2ddbfc9b02070b87ce9562a055acbbdcf97e66be79b8d410fb8fd0479c195485a648b417fda808110efcfba45d65c4a32677da3a48f936e0bc13f10186b0996f8345c831b529529df8854f344910c35892018a30f972e6b88475fdb96c1b23c23499a9006556f3372ae637e30f14e82d630f7b8f38e4ef40b269d5a8cbb79a61dcbd848be828515c0a25a7b4559320071a4dde8b2fd662aca63a7da8dc40680dab1b2788f726c4c9a6dda9dbd4d6e3e5362622acd8bcf9c4caeddd2be99ce330037e9b413d0e7aeaf265f398a3eab45d6e64f0bd5cda647208282608a5b5e7fd13b8d013a8db541a866d8d17a3605925ba40caeb6abecc27fc0d115fc314e7574c979697e0bd9a559f8a17ad0953f6c7f0e284d4ac379c4fc62a26cc050f8e5f37a488d8ade9613b7671093864fdd9a7b0218933cccb08a05d8917ecbb9178c1e50b984956ac5ac6706b24f45e1e41a958f8e74a771bc653c9c9741d30a8d6f9dfe2b12d3765b3b7d756dd4302195e6beb32a084d9a85a40198fdfeddecd580e61c6fb75b0518674c305d2d1c78b2875d9c27387f281ed03db52cbb5291fa91f52da061a3a47afcd65eb128275890a888d2e90b00a0e087ee2f8bcad449ef7853c6f94e53111f45f09e35a465a96ea437d4f4d92d7586ba2f69fdc04c5a5d396d82baf40eaef6dcc28c22e8483a6726ca872281e58344a2d4aa0fae4668776b979ae9898eb21cfea07e8fe20a4507767db4ceafdde77eb569ef699b1cff6c0954aa0f4d1ceae3da9d2eab097e96851639406ab11426c5b383861657574276de8d7ebcf6af079494f44ff5cef93d243a497a7a04e2b7a9bc0e554c870b5639726500cf6011a13861c5a3b0843b3935d9437c09be885d559be25ef0a34817110f87102d49a1d3033e32c33fa934f5612dd4c4abf2b358c9981cf8b3dbd679c03b1712e3b1b4a1f3eda9d25189cd534f5485307b41e323fccca4eddda9cdc29fff5efdfb82ae424918759050130021bd1386b4d10a22f677d2b536ba73b42482688fcec701d1880ddd55b336945b665d85d296810de02143745f5d70cca69e27295e0843d3c2683daed66b0a921ab8dd6b4099b2748920234cb97ce324ae5ff1279882adec03fffb1a2de1ba71a5ddeaa34f27b6f01732987ee3d446d997ec015f64b140e572f52b7beb02f13708e27bfa8e32b4fedda551cbe9022e540ab26a7aff330c2833f00d7f87ea8aca1d4e8986c7d4ace9da6dbe7227de8b5a3e6b081f2fde9d9ec11909fb1cbd728cf8a2e815d06c7124dc482640e0e3f0639a0c561df1e866e100eacfd82c92659c476dc6c32ce60a41921b4e669d2cb651cb66380c23653692b155308d6decf209ac8048569dcf65b246a828a0d1048635efd6e3b42d048ba338bad246af126513f8b704abdc242cf22e0a5d60b0d7fe55af94611ec0b0b3013ce841054fed2e377c027e69dfda6ff971696231bd0639deeade78a499e0015cfa2337455e4061556275d6f8086f198c3b979747af25e3482f91df6b7ff6083eb9d0dcb34e8070f6d988b71819901db5b60498c6b05e9e1013bb44db14fe8fa6bc223fe96ec938da78106d2f8e42d2d97023df37fd8e9c731fe0cb15949351cb0dc105e215ac4fd027449bf5041ab4dd162af5eb2832464f5352247ab672913aa01dbd0ee50198a089810b0c58cbd06fc806f8b30862f5c555e428b9b6bf5e9502c6be508c4064b5bdeda270f04d00ac6807ad50b43561fa01aeb2470be4ced5ea6702fe77fad6be6260fc3c51c3f30381cfbc803fab0ab5e9d0447d88794dcc54c344dc58c34c674aa54ad6761ad75937af7c74d22ec99d4022bce700ca19ec5bd469026790d9e55096972a8eca93f0e0dc9ffc39b451fb54b50df689bc38e40bb797a4445d09e7a904cb596b6d9ec28d533994021b5653406bc0d525c404543bc6e65fd8118f26699f9e536312541cfee6359b4f80818238713cb7e4a5e116652d0daece814f525ea1234f4b5a47093049a9c94122a0553b664675bbbaff3c3542ad62f51b081308b42edd6af413f8f75745d34fcb13ec1f1e298140e1e811d88ef0247d630f93dd7bb8ce86e9330f277d6601c67c7b38ebecb7770d93053c99678b3a19b6e26080a40b686782af48e9530f539771b5328ebba4d9dab7400c858ce0b7c5c7e8844eab9e44ccc91c9daf2373c3a70ba7d111afde49805ebfbb59edf3125ec2df3a14dad8d2f3b9bdcdee05bd490c65048babcdee3dac9df6c215a122025befbe84b1bfb2126669f3d3b467e30f71ab077b31ce31d0a977ce222c6d72286dd06431143356c298cd730d45e47f29899b49624a3d1a22843c1fa986b97593bff4a2d23092a6ee44442806ff1f61de3c4629957d626ce5c6ec2536c2ad9334edffc06d2137e3f20829bbddaced1411d15f7159e36657ce2ac1553245df51a31147a2b35b06345c82d2754f7ca7644a01883902fc3a5322296b7a94f5f5760e4a53f641ba4f2f535ef604647cb2021086fc87b4924c1d786cb079ca0448b9d9709170f5df886b92c284bca0026404b7e5a47e90b4bf40e5fab74bec65a5db4dbcd3fb093a6d65bc15387b8194135e4986974a702c6c87d4fe28586c401bc2022d13cc58e332c43e8d772ca3576619c5b2c306fe7d9ba4870d561c0cf4ed7e6780f595e1d3d619d480996641b0918cc56bf4307a5c1fb68d47934b3f2b7668aeede874abfdb0c5725f339324e758366533c09985d0c5d697a19d033ee23a049ea04d30ecdb30fa3bde586fb7306e8b9d9914669e29f2f951c1d66000833f070d5829c8557ff6ae9a17110bde6e3f5370e92f42a0067410ce9933928a2a5b63c9a3758aac0406fe794a3bbe0c959eba64af0dc7fc44c4b5fa32bf3b1ccc48529738fd873ae2638036a053d486b188b88806ef897a7a4b43851899080fb21ab8041206e44172e7ef77cc6322d953b3f96e04c7221831ac9d937b7d2e64254724fbef46185c944e56c87b9a6709ddf1724baf25cc4b817a29def20272257b14a9dc35d782b865fcd6c4dd8af2deb554371ce345f4ce65d99d89e844f5552abf8e0dcd515a87c497ae8513cc25cdd5e68a89973ab06c7cd05297ad1c0663cc1d09ac830c0cee861061314bc8d9caeefba4f61842f362d727ab155c3a1fba37a779e7e2802fe12da306847b6c29807297a3e9441fd3a006d14232adb94c0295b5df29af7bc008d98210644cd6da78de3453b05f4cededf62732560e32f5529cd39ac50a1ef544705b3f5d9953a423cafc6d98f49eded2fbc8155a167a65acdc840fb5cf3e6b0939a742beb31d83f8af99a2484d850ed2f8ddf98cf6db266bb064927bf998ca2cacc45e734d124bb6d769659accb974f922cddce06fa654a5897b838da807988cc8de3e5cbea52114b743ebe1a1966e692ce586a596c4fb4f74516f48437c37712a29b75948c6ff4db596e7f304a6c215ed88c7919799a73ce42a0098364cea64e0f30bc5f1744ad34c5b887fd8c01c62db63ce7951a717e64dda8a4e9741e695e3037453c1095da3af13d73f5da9b41780757c2756a1ae24969321f3408c84bbf63e64de14eb41738e12c52885a01508548b6dfba6ec06918da4cca9cc5a267416dd0ce8a0efab45477a2631184578ba437c5bc6c0b354e1e8dfab820307c964b22829d664e863ee930192526e2998c82a6d24180de958f8501d7f9be6ad47438aa48e09059dfca8d947ed54753ae2cbacbd2f12ebdef5491df25bcb124328ad2d597e5f63725a491e4ab777c3d8a8a327015fa0bacf54c22fb37ec02828fb4c789166cc750444162793734b89db2a5af6057ac041f057a50126b6fef33c11f5c0d76b4ffc40e610b10ca47ec375108ddb07b84b8257297165a4815d94406165bb1544b963478081435113329dea0157d7e8b37c2157ce73960fc27818ec452168e44056205b2fb0aefaf7e527b3f3d9442b487f78deb47e99349c58bddc9e29cc74b3e486bad30ccd3a4e0ed4eb04db3af3086359062d42a3cae08958fbee9c5898d2727d8228a378b107684f40fba753949f613b93d82292b8be0efbffc781cce6028738047d8241675850704a4e206ccc8e42b28f5786889cad4d96c8c4414093e90dab6f91c6568d41cc65ffdb4f76dda07f25a4b479251982ae63356c90269a2a855a90de83c731deac51dbc7346c578451e20e0f81e3ecefcb98d8b4d5a487ddfbad22b5a43f55c041cb8fa8d25ef99e6712109c566899fb4d3bb331c1acf645094541244d9150d07e4efe9bb37fc85c6bfceba0048437741b8737b13f534723e46690bb36ed5407971d0998513acaa8a2b9d7c41211c270de75c6e1312b675e69decf2fcd0a129a697c1392d2119d5f37040a5621464f26796303707e9b2caa3b5bc507fd7ed8069b31c3337cac7065c24e8deba90a7e9db845f73c08057cc8cafc015be2fe206da317dd7063de49b796449158982a3a7a1539fa630b4880cd65cadab5b850ab3a9cf4622450940a7ea0447395e63695f5f15c17334e10ee2e86098dd91103174836d28b1f080bd85e6ee4fa6c51e873068c08847f0d1ff4ff0d1876f65db66dfdbc22e23d467187840935ab428398824ace6d342041cb389be01d304fdc134eeab73ba571832c53d4487b4ee1c7fd536411730f746bd54591b7be985464109638d9b046b5e2accff8ad0bcabf3138d2ab47e555bde141c1c70546b5dea19f2d16607402a96c2d8b87fb2073c8db0f4b1f6cc4c54f43af7b0403de85759b94c48b4a069249136720827a6bc90543a5426de458fdb83f6b1aafba8740f74b8d73b59a4ea15031e41b349c0d35edb15ff7e71d47a330f01e12ec9d928819677fabf24a81a09d3e49f2894ddab32cd5bad5e33a3d3987c6ff80e6f8f2f221cd33261162e46b8148d1161e9266f9eac6d2edae1b915793dcd9ce3562189f532305fb54783c1cb860f34c49295d57cd79387ea31985d155a047126b34a9171f36174f62f09ccb34798b3a66e980cf51fee2e5442a40aaedcddcbc0be968b23bac08ed6b2b2d7ba9876283d45673e2c6b716d6a2038aa256a35740086f11ddb9a07ee1e8c1cec79c4aaeb254e4cf09a9846a4f6f9c5ece0375f4c5cbee3af2a41c28db5a69dba1686fd2bc79d4c8731e35de6f720e62e30187b46f083ec47e493ec164d67b0258e7726961397e4506a18589da30458caa7c2e8d040fb620e1531465e99bd37d56560b985a46a8bf9975885d86b0ba7af90829738f0f645c280f9a5eadc07dc4e024180b17fa66e7e9d8684d72446991c3928a519082e2c293e5d5ff6519fa4356b4b6ca92e3451718704ae589943020a91e12e6932c14a5407948c07b4dda394f175b662244d063c58bd1ffa685e9a53954740d5859beb699131e0f3a5572870d978657288c66f7aaec8cd0100ea1a4338d8dc1670a7a119e24b4f492c560d8831b0f4556eed67d730ce25f92aba365e077fba39f3a58392962a2442b5e91f5c661e4cbf0ea7fa58ea1182d249a54e14f5f2c76b6cd8a60d03a898a56b4e862dbd6d02106af8355bb663fc23ec7a7340714a4b7e302c82846f5d4b20975959583edcba4d180a57120f028f20ecafbe2d5f2f19095d2bbb5a361619c41399fa586be916edc0bf340f45f9cad589499828b345d249fa7e08d05143f10481287414553ac7e4cf6aa3e0d2e0a2925bbc03da0446725a47fa86a563601d8454618d1ae06da3e79c164c74d66225e6983654c7a1f90419e859069cf5673807d5200ed7c42a11ed4dbe280981332b282fde9bf847690276d371699a39bb955e65280146c78413168ba38b7ded9a9ca97537318111c7bfee5b080968363ff239662fefa0bc7194f98b5d31b56475c05e4e97fd998a9fc376d48f94531a64e436fc784c69f51cd56fe063d53f4913ea5694aac985b0274216b84ebe1a1b4b42d226f779c5c227abae4f910e17423864f51ca407f5a291c190b2bbbfa71e58360324a2fdd2abdcdcf30e1ecd1014abf791336be5b629212599bee15f596821d1eade3ed46b70429784c49068ed2510780384ec00cf4f63f2a1b6d6dfda1698b88a4ed2cd29917aa4585884893e9c453d506f1324f6ae54e644a0d0f6f209efdc6f94fbc5b88402b44b54f2cf8a8e93b020aafc99924d34338177c5c946a7f1331eb6b3f357207d3ae31030d0f120d30623ffed248d61edc8a93a1bd17d25600606318ff0d81f3610a4cfcfcb18ccf4d10e0ad29dd7de307feeb7c1ceb3dcc1b7851195995ec3d3fec633a6d79518adaffcf447885af24890f343dd26d0cda9983d515fac610680a272f87a8a873b9abe7f5dd4d625b1f4759250469e8dbd9fdf294bd8272aeb7628cd559e011c86dc61daff39911762882d6e605a779ce94f4c0b52e2fc49e4b282805c1068f7a28ce5dfdf8aaf1a676eea3f7a840a6be0cab1a0f26c293a5049f050e6f0af3418da726b8ea2a617d9194bec5809deed024143aee521e1c0e4f213a14b3e13b2b3df99b49502847ef67fdc36a1e9b3b9afcee8043c6826a362ce27b8020546636a082c42795cce34d5f6484b7a6d8b8c117421cf3ba389b7c22527f41909019a6876500a08692fcac781fb5a6f9be147e0444ad2a38feaaf17c4de2c4d24b88768993f01691c0f1c0fb53dc68f6f461b59d5b86fd4353b8e8ee904517bb7baab28dd1e008495b9accfdf9f24dd9c6c7a6a6001ea8da93e8a1852d6cf003782c24b49d4b7cdb3a7f769e3bfcfb012738c90f42a321f13e28cde96d14abe31eac5d80720255166b95e6528636c8a1c662bbfdd8aaf00977471dbbcdff3c86ae280868120256b8396d0af4e032af5859b027ce649678958f450340e2f725ea1fcbcdaa374a665b10f7ed416c56ca06c567419aee300a4d60beb2ea72034531ff874487ee90d30074dbf077f2116015131457ebeea2a46e297d3cea85e07028825edf33f9901e3e3d1fe3f99f61c72993d3155e31e5996d1e54b1a8fe9eebda25cd253b0f01f90c7605477c40fa6be303c118a55eab08429b55532f07c074549087be48485fa61dad81873a99af1494ca5fd556d3911a457ea93ea7b76c5e47b251bb036f54f74b4bea733589d2801ac45cda8748c997aaa17e057015405644b756854fdcd8d0bc4e0c938070090175a9ca31b2a5d3c57d21bc8a49cf761660f27dd9f8b9b0fb818fc9673ded4f9e2345a99794228b230c03c79a1f85e4278c04ab0af95c3fbc3e9f299729aa9a3ef0d0aa6b80487cc131b1face3740b944edcbcc44fb795f38c7f34db62081e1d8817edfe3960d4bd97b189289b1104a27eee53ccfcded47db929ad5cac7797cdaa5585eaf7e433c5966059eb450f8ebb263a4b4abb25b9d9a2431a2f24b62f9a42dfefc56b250a6f9365da338ed466f5bc7bc0ee348cba696ac93cd0086d9f106f7db2ccf2f8140c383adc139164e8c0e6758009dd40b77584c2e16fe17344fdf798b33b92d659c3efe6900b2ef741e41cf2f875ed39974c5a1117fa8947c2ba50a4c66b04c3cba69f9bfa17d6af6298130306c773b5ce60a3950f2c9e6130b19b880e68f4e71a0238cc439df9394b34e61cd167023c0a13af1c9b35c186fbeb2789c4029a6d7d344844c7311eff8926b10c8787b65a566d082fc9ce6e7f981c4d5253a3617fea606a65727b43f75e85cfc831bfb1677cd46658ef75b3dcf783d9b81d18d24565da8a20dc774b82ea7f89bd35491b0573665d0c68e57cf0789ea77868ab1567b9491111eb8f4b99d5b94671655d94d625ece76d9c3048813ba1b12c019dcc4707c4d4a20f7e03835ebbe114956b1536b95d5689b42caf6cdec62fa1e23b7560a55c02357f03f43e20c834bd4833717f8c33780e87be10a6f3cc9897c982ecc8424e376460933647940ac4bc54cc442149a5413378073ab3a8a792fbe0e54ed77175eaed0d3b1b2a52873274860cdbca51d236b270afe1a2ab23f86abc8970ab7537f78c01091496ad422c6aa7f77bb18dac7ffa8c826a73b9bcd809fabc07d152be264ef7823e9e954688ba14135d5954d95a773d4d81fb949d37ec347ebf1ce3ce6d1c3bc4018a440fd8d44ee10bef4901fa6bcf2bae47b9269c586bc0144ad68f8679b4081da0c1cdefebb145fd58dbfd4e46b54e6aeaf6197691b609eaeaf9b42a680072c08a4ab22e54ca12c031b18b6f72618cf1a43374b0545a5b92c9e5390ec6bc2e790779b7c1cc3dfc5a51e284ce306d96489a17a023f92d3dfc3d26d4548d202a124e16ae7fcfd60a7627e189e13c8595620de330eb8ff7a007afdf62c4127689daee332242dea2a4c0ac32007c853069eb358d4f5aa60f8224754548770fbd49aa6aa7e79a0ad6b27dc06cdce7c2a11f8ac33387d9797936ab48a725dace1cc167177a363f92529191195e04c2dfafa2f34416b12c1f108118efeedf17759a9ae03aa816ffbd4b4be7bd90c3c0936739ab0b42f942e01dcf5670fbec59e8fab883df826cd3ce6260bcbc895d8389f3e1443f573c37f84375b1f67e6d102d71ca0d194bf7bb802d9b95a021c5bca9fe570ca1efdf86894335c30e45cd1f54046ef65af25a03475522938bc8f3e3f291b9d3004568a2a50291d50556e725d1fa2b0e99608393068b30c59a724f313e472887b4b940e51ef7a85447c5f50c62edb1ef3fd47d4588e3ab602e0c9ac90b02d553e42b6aa0fa4d4c0f6698eb3e22990010445fe81c1311948acda7a020cd26dd3aaf090652b89c6d87a8b96c42a9dbb8e36335dc368388416959542192192b89e6f23959d314857d027be813f1adb84656d57025ebabd668a59d2bac1ae9f14b1124d6c5dea65980c6a3f5fe4a76e5911649f47b8e70e21c374b4225c16fbea5068fc317e06ffde9263016eeb2626cada00d43e52366b915fae39af4580f0d67cc4cd9431cd65d250f25cb1a803daf33dbe5329999675850436d621e9bc82d0c753ade784d1ed59aeff568b223e416125a943e00141619d44fd3f08c01ee1d1cd4779fb1ebb9993c4b0d315f0d75c493bafd7fbfa3ee9ca91cf0022be4bfc7b65ed8fae935f09d8a11f307ffd8f0d1ce98d04047ddede2142194d2c1ddbacc8ec340c4a5a358e803d6368143a126b5e23c8c6ec1be5e820d9ef6b9a4be58b6ff20fd4641a352c0c755988b8d58670363f4e7e230eb7c1de5fe50cf4bd4a44eb84ff4ba26f9792ddcee59b5cd632ba30d186342a5ebb191cace51b8e4df26aed772d4a9bf05bfdf84530bdb5275b3a7849db624e99d677528900c18b3579fdba666afeb23d4e50e057d993b0c5233d4cbbe43f5ffc648faf3c3290f7dcc1909e824fd5e39a61dd5d390942fe67dfaca9cfd7be07051af1d1f59c842f36228680c28cac2220b6b87a47bad896d9311abaa657d8e6dfd147bcbf52ffa1a19d0778fc8097595b499b37624ea307fecca7a63ff4bef80983e107bb67bffdae911635f9a38153b4cc931b2d4f75eca007a0b8061030ac69a1ddda1b4b70fef3f906cdafa10a246fb149f1d1eff9850c0dd17fd32b1a56253fe0dd6401beeb3062054e7c6374d08f8c81fd84111730958ad78271ec8f2b9965c44ceccc4f3e2a6efcbb9e65b89722a51eee97d8cb7323c75c894772397a45b27e27a5480bb730c2628ee9638fc2ee371df13f54918eef7a447055581b574c0df6982f0507de30c2bc7a7f2ee76d0bc9f8edcfd74cbe2a4c45c00cbab4186bed22261e3a9dead0beb362706df627a24d29d1cd72eaad3a8e30ad19cd9e01b14cb35f2359a00267435ab969429dcdabed7d466754438841f79dd2e6b4290234f1c6306790def340733ade6c51ad0a54d0a98160902e1c47ed611c7825cb68a870b666fc4d987058708c3c66f4c589b030294b888d46241492685a0e57aa4bd5de9b4842b2f73c1afa3b85fc2226f779f283632903e16673d685fbfa4a43b4f68503eec7a765d17fc54cf2dfd9bf8f0340faf4ca83fad3f2618e6dffc0ea23fa5d2d0e77218f70c738a717c64caf0b27b40ccb67cbcd10c6ba8b1ae2f53691c8f797013bf84fbc116085de07c1a8c56007a00a300264f67a5380d9ec6ec9ee05922180bda57db700b580470253bf4edb3333f41f9219d298ff0e95ebd297df8cf4b7192c6d6823d263bfbd15a811bb8ab74de4aa54d2fd387ea3e0b9116c42f589d3535454fe182777059c01690e968b9538e8b739e42f9f63fcee3f154d91ecb082bf73169bb6fd34558135736596e5585534370e6e4307bdb88eb59a595c60d7470da358d870ab1c9bb130135998463989861ce9b2f4697d2cad4041b97f10b581eb010cd3d7fee4d0e330429680430cc513c006220bebcb9cc2dd78e55d5a08256909010c6b155c6e1748ad4738542e5619dc48b18624af05dff9f8519c49359df01a6846ecb11f22aacb90f9ed21e45e3ac234414937cb43730d1a602d9d1b92bf7245206f1382099d7f9a3715c5f42c364b1df107c2c117b158c4166cba7d2b7c70592829781fb346c6da21cf2dccb5f4f04f815b05f1d3a4e45a1aed3c18830aa6fdc3c3bf8d5f82d5b654a7413e8046d081e8cab521ba241f32a3f6bd340a157de188a4f3a5a467a1168489ed8979d64dae1e9d57a44272f59e855890d4840225c469316dbd04d1dcc131a1173ed91f33744b04cbb6669d316536a996f6de172cd0530983924997bd78ebf5d06cad77d0441aed346ac25d114dc104b61ca0adfd7cdf864d9c6173430f0102ab2eb22ad21eb1abd65b097c887af809fb477e3820a7d1987a4f00028d2cd66fc58f985d863273e467fcaf71e679299b70875c9fb610cb8262b06de941a313adfd70f5d0edbacefbf17196410c9dfcd837c74fe0bc497e55831ec63bbc13ef5c667057c12fdfd857903ed327f56bda5038770c60e1e29ed24ed9a28dee15fb2f22e86d9f3da123c60e90377da4315ffd50e2d3db89cc5749ef9c7ea109424ddb29de3765f6bada17408dbe090d77f73d5338c2e9468093e09a0be1b63833d19d63cc6c918ef5761cca36d2fb296081da7637474722cb4bac97f9ba14b6616d402f6753370502a6830f82fa277994d71173fa79cf1e0d0906217d311f3e7398f6cfab418b0f6043e5557ef697734c1e61e2bf564242b7a4e659795a7efef91376cf2d5c0d7f058219e7383002926bf2f9e50385af38e7cfd9f2e76a71f48a30390f053901bddfc1207667d32bef3572832e7fcc4e366e57281c23825209c02a4ebcfc9439a98266e17c3b1a41f4c83477bee09ee4e1fd3ef9ac143dc78480b277d87eb294bd0c98ceda84d37508c7804701b4ffc3d399218cf7e74ad139ab8ab686e1e77a3fe6ed475d8bea6866572a43c1a6e345121c2efd768a8392bfd860bfd797650990a39529821576045f619735b3469c85104fb10235f6d5f824c8c69fb0f90647dc6209a80c186e2f8f3a5bf5e6a3e9654cc6c093d1404fa2719066bb7227e91d98049999e80c172f94634568d52639cf21ccefede3f08c7eab40045ed14f1f7433a90381bf908f4da194139d32aa75d6f6bb208274ade53fd773f3589e80aa631c9ed364023effe6888c5e6f46d56072dce583426e7efa3df8d4e0bab9e4b29ebb60da890e691cf2fe9762c448196bd7bb250e05e6b93e2d94511f2878df154979f8b3c759bea6b37475dc26d6e54144a05366f3e0e34600f4625d6129859704b840fc8c2649ca73a48d4ab2361cfb402a771b873b5b1d391b895b418e7d4f4680d16ca8653758ea211ce23a392d6fcd5e1cf002d65b29ff1d389f9fdf3b5f44c7406f69c9d7547c213c500c35db8453c0ef3d0ed6368adcfa3b6575bc1fc73b9f7cb47810822d85a85f598ceab0520740c0b28a66e930d06d63f495ab2c64287a28f48577495a2f1447828dc21392150e69a94af0b477bc256bead58a5be735045cab3317d449948ebc5db4ec8cd58c716d60ed4c26359d7b8f28ddcc8bbe86bbe3c13f10ff552f693b8bb0c87167add603abd1061d5678d6d6214573fb225224724fc57c089be5b17044e0f0525e4f3bf693d3f81bb6590c789897f78bd0133753e08958234b394a43f59cc703c6b15e0924eeee44070a73cc71746e90dd1e75cdb4a84c6755cbc4304106273d9c863b3c7688663af999cd26e575e7556b7cb5583901aa254242f2ed27a0527ff444b073835a7807d62252287772f356e556e6c4665d748b649f3bef34df0b41df3c5631f2d8a9f7fd9fa087386aad543d30b742f92c548d67b6e943cf577434c6a23441881da2c758b0de5052681e8dbfc7c68f0b177c95dc9e620444396d997381631cf5d0572b6b03104a491769702919f96b1e1640c552292324ee9dc1d37ef1cd277fb9b665b03a926fa27ebc9c31fc1c7606fc1de08ce07eab78f80e79c9e54a7f802c637dd3333ad1b526ced447768762e3b03fd8e98862a11254c1178dea6cae842d7bf94dd7f43c2f65ce98aedc87ffebce194f2e445be7314955ca794f20ff3fb8931acb4173310a3c21c8a6d864c8ff1200eead0d281aefc4389f573719f52e80fe7be373d368388fdb4f78ed0c957688d8b9ab6d7764144d1ef3b64545346f32d9d8b2a5e684ceba016c7c944c923164d80be17898883f554782f95edd51b602b9634ec966bbf96f903ad4487feb9f1dde079b03df50fadd4e2a70ddda4d0aa4f85478985366b0d282d29abe8dbb001a99d8a29470ee6d001b363b0a6e0c56b7164aee761dc046faf611a4f83e1e7273f709afceba6c931309b88807c4fa2422fb1454648f466bd50fd8f213071f00a7e3fdbae5a78db1624abc3bdf51795570d891eeb35b2fb539fc4d06c92f323bc500df2eb5ab0aa82efa49d6e5428057fb438900a4435d385c1a2257b1a7e18a87b8751189a3049b29aa3b3d8e7bcef270578dda57c5cc266f80a3725966cee6a6e07683ad9394ab8557267920e96b7679738ca8fe1160800b679b2834dc30f058c7048173541bc1970ce23cf81cd9f695d3981190465297c82b28fb675ef146398c92e9cc91b8b7b2a2006f5cba201729d489924a58305862586dfe4789a84b753c069e4e3f9ddd244c5d22847254da4e0522cbee12db2e45d077d60ac12ea314e333b31537e52bcfe8ee7de31045033b6be62e70f015a076a95c9d0a5679edf9bb02b9d8efd4ae9175a8d2e7636267f90d2ca166f92274ce20e0e96a521462694341f384a90d99f42fbd2c26e2cf4d917896f60471a03ac0bbdb38a7ab372aa7cc903735dd6dd87eff1f782061ebd8fff4f0901b2bed6e3348ddee57eab53585b1ad893397eb916de3d493255c7625d92b78df4c35f29c079757982099f9bf22e530711337a33429be8957d3824ffafa014c7f46bf97e530aa65b87d94d946c49f87f3197be345c9e6a4e35ec52e92940c6025dae60183c577578b095ad7c15df62c1841238eef670a43b69852ee629b630ccb3029a979c89502b9275c7caecf21d4b451670985ab1e72019b736d251e644b59e3b642e18b626a59ca250c155dd68932e4c3fe2954d5c8f7ad7ab5a68ac10258c26d40596b32eeaf442a557c744277f2298b8e4b9252317f08793d3d5c456323d0663771419792cd46ef46c8816fbff170a178353ec6783f4e28ded24c8de03ca93fc9261d49932e77e20a221742f73602b7baaae565ef44f48228c9627ffacf0d606b3e8081806a3dafc80f16fa96199f61eeaf322ccb885ea22408d6ca2613706ad4d25fcf0afc2f054d6167d365e39dceac8bcf8c485f639552b91aa7c67ee401ff5b43ea0c20da01145ea039d25c973c635b02498c49052362e2f0a53db0d343998a39315028b52f1d19e6c1d0853f220ca7c3cb6545e830a15e4538dfb2df3d84287b3eae93ddc70cd820b4de2d0ad0abcd46068f222a956fcef025f76299349202ed3756e7f1ffecb8b0e7fc796a1578bb3b7497d3217f056d006a6695a10bf23ee8445877400e0c32ffe1639bfe9b6bd9b4f1de7fde41d56a87d1c7b8095f6329acc97d2c6c31c94183e8b85b74b57bf5d84ec35ea461401b0e86e9ddb128b77e8479336aacd7601b90454c173b9ecaa5c2955b17a2ffcd0da1fc68058b849e3a6ecd35f9c6eab4705f6d2c644590ac13ecda02895f57242fcdeedc9dbf0a9868c4b0b60341d5182f335d5ccb5d04b2383aeae0d2ab1b12b764398ca96cf807af3f6e5a17feff635a8294ab92c727123ccf3cd11013face9d0e15b3f7d58267e02a1ffb7110397b2741d1e07c228f7c16c60e2f0c79dae99dc350dc6f510b8cf3bb7e014f1578bcf7b5c280445988aa634f9e69315c4b7d1754f2e72ecb93707020b56f9c609f394a050ee8e77831e0fa954b5a19a86b66dc88944f0816abaea8996fd0ce1df22e286a2b73dc627d6a6b0990581b414d9bc2d288cc35e272ef1ecdf7c15292181bb659b88312218bc93855265fd08ad404c0b66788ae951e9b2131942220f3f1adb82c56bbca4362d80201ca5ec20e6c5f1e7851c83dca115116c456ea0df1ffc44458b0d35207a9fb1a86eb0035b95b96f11e44de6704b7faf22e702268f28417ce7e3aab40ade951df8d529decedd13aeb26cdc8f57c59cb279517ceb59b98098706cdc4b7c9e13c5dcc243fb5309c5592beebaea3d6fc7c0366742ba8ebdae3fe3c90678533d77565b08e7812b80679dfc76a087a094f791d895716aba37510b7677253a8e15be1ae8d7f0778ee6deff871bbe1744df7e8cf5f48ba5eeaaf52c20f50231167e6e424cdfd025d6eff8d43ce2671ac9a8a804a9e9820c0b6a83d78b1a44582812cc5f9c4e2e9f00b71663a9c27da8742f284f573cae2c95b0ca64fe6130bc4a869053db53d77194e69930fba3d6914dd23e451efb13990759b67d21fe580b734d036bdf8c539296531cc6a093d547f0b10ff2b080d65e62a9bb9acf5d913bb3f549ed2a215f6ccb48d7abe3076d69ad5eb6588fc3ebd5af5437d60425d4755d7bad13e0b537f4755610ec7cbaf4bb2fc7c621534f9c46f17543bfa6795c7b19dbafdcbd7f6b97c85cbfab6061c30571683fbda989d7227bf402f7060b3df632d718f9d51c78c779d17ffed25be4dfa36a5ba392f591d4a419d4bb6976234e040da62821bcacd023bd9ef9f3a68044b531b9ee3440f99c1fb33b203b80c7d128171c38e554a946b949bfccc9bfaf2ba67f5c0cb25959f771f28dbc8a309a740203fe8972d5dca8958edee12de512733aa0bde550bbadcef5c5b49c6a267eaee046fc6f388baa3b7c1ebaefc03d4fed84cc7728e8a3fab256a80b97ea9e94ba4ef8bc60735d35eaabe941c1c464f33d1698aba79925d57a0cd8959d8afd0c03b1df737d2d3e71dabf47da7703a333fde78a68e2b259b35309100217fba97d0adbf9266fcbf2f8b8b0b7c5ac846ebe802c8b9a33fc59238ff209f32d32a7e66bdb6ea12e2ac185487131e1405f0957fa122f5b7fdb7f019574219dfef622362d05cbe4c7c382fc9f56ea1a464cbd180f7fbfdd04a16349666a330fc1a8820cddf1958712fe18c17804cdd4315c5e71b671cb1c50908b2772efc0a2ec7c73dfd6154fa98447c516c5a55bb7f24e6c260ca6052fd17c0095f73b8eb6d1509bfdd8ddcbb7fe767378e7472d27ff3f4026d5184f2afd03d0d87691b7098dfc2a328de0ba5f59186780cb82eed7b9dcb86a05d38122a8e37dfe23b4c8dd83903f58a78ff2fc5f19e27613cc206d7ff781a021a0af90ede0a9911d51fd52c113cbaf7f16f24e07d1dbfa0bd559061723c9cb662659bdf6ef56a2c117eec1855cc7523a024069f1da9685ccf7d4168a69bd8df4472692a8cc759d40095ebeeab41a4560659876d5685cb97f4b3d2b8eea607cad7a2f0dcfd0b4d3f5a0f8ea1f34c51589e874b93a6d6e9823714dd5a448dc82b96aa222a48fa49f5b7e00e9f4f9959bd8c26032a06789fd672d75b752082222dd0587c6d42bd5e097892a3edaac83f01dc31b79970e338e8e4bdd3bcd770a5717719980555b7f51ba55d6e1bae1dc7b232500b379d25b62395d6c71d5c0f14c599de264419c5b7490298b4691815b8e5d62f74a9f98f6fc34ba71cad2481c59f381b0aa8dd8befadddd3fa03636cc6c0e3b2c5e04899b21778dd364f6f532e7046116961704f8ef384e21228177642da3114684f94c9781ef4a8d0332b6d81c7d8a0b4afceab8c7ee157e49f09c322323f11a9fcbd0437c01a16d9d5a472b6486ee9a09995079f46257fe6a824ded788ee4f77b1b53d0742244599a8cd8c49d91c78a926f29c8eea5af3fbe816f8c4a9c10cd40eb067ae9aff7552bac824d1ad66f3451f5d6acc3ec9a412429b4388355e0732bb9acb5076bcea268d749de6a9a351f5a96b0b2732feb2f96c0427f11891382e9c26a44e316f224628f2abb15863e1870cf34b4a794bbd8a8d4cac35e76827238eda859275bb2f12e370e42a1e3dc82e32c74206497ad8c27be49f63865bd544a8e58559e1a5936572e21d9eca93ece0de4fa54fd36d2d3f48f402db715e80cb5059a4b32a15a5871a1e285f6be9902bf8462bc062a69e8f0ad96d554c8337aaa7efbbaaefdc6a3a32374d6eb88f813f80ce976fb257f246ddf7aeeb48f7a521dfcaede01189e7871683f149d6841f59edd106c05f7e84a4b1877e0344b14013e1f817c4b869a7ca3375ddd9de8c5c41d15913da1acffa9c857942f1d225ee7e03406b4fbdcd3b3ce2071788ac46f1d7e4095a273d5939048984ceb94c2feb76ec4307b271c53ef83041260e38de1ef8c47e31c8215f1a0b832f3d355210bbbe11532329f4f13ef908b96c84129379c011cafd16178715db2b975ea912b158e1fdf4c9a7e2fb56686db3d5fd76df36ed8fc2135ad5ab038d30834188c2141163755e35d099849e44c200e212488c9201fe29bf3c64adf6e208599664e37405f0956393d864653c2d6fffa21a789cff90f1f8fba535e14b15dec3f28fefe32bc82be118577af39cf036e8408986eca655f8ee6680e55af743712b07062fa52ddfb0d4af5dad60f777935c7ebfcdbe7d849d23b41fa3c944f0a57e70c1dd4758bcef9367c9053e083895b5ebd5c98a38bf9bd85fbcf9546ef4bb115e170d48f834c4a793715ebcb74150379df259591cd48f669123fecf4c8194f9c7e7052fab0cef56dc8e9d36bad8dfafa6080f411bdccd655a8ccf5f58cfedbd9e91b00cb64b451f43bc23e2a724c4fa00bf90923df19f9c7a7fe5b5d0de6bba9e2b03f3986471a4198167f6ad0915b92d177cb727ed65b9278c76acdc3e17c17e412102775029009e765c258151b645ef59049a9427df33be450ef173ea41245508bd11ee6d2492a741b789968b9c4211fcdf2e1e8411f4b2dcf3aba57d85f4a950d855f2887be5ccd11347ba1d845998521c772ba511d2d4b5f32bba613f0d181937193dcc5bce4dc1a07d7d4493d9d2559208b2949e21f3b5508c3f0b12f5d2d2250891d3d3833a77cb8a31414d50dd93dc3667e7672a8186682d2c1dfc2665bffe054d57254eb4954cfd812daaefc2787e907747b261722699518388e17d09b861138208886afaf97c558afd983b599abf8bfbd44d5d2db385eec980ef7b5ae7b42843517dc7a2e055a2f0f73091b6921e4369392768bf00da75cd2b0d68b612e05052521987a703a75ad76ca7976552ac0a9673c1e76843b9441e8ff9e280b2c9979e80f9dfb0c331e5d5e38d70e532c4862dc95f8b453a86218c2f081a9071c2919f656d31bf800124ee41759583f8882d2cf60830c6b9e19128b4539aeab283f75b5ef753b2334e967b6b7812a0b68b069240be33be8c569d0b3cd3bb2adaaacfb5509c8199413b0918d8c650f1e9db28e514a22ac815a5a5b48a683954acadbe8b43156a1cede377b9b11cf3e80b48d76a7a875e3edf542c8e39e3c00d869c1eb100201213aae170f46c16a23ea9e0dab4465f4fc65cbf7a6db0e632fd5d0260d37e1135c14d983bc410c1ae268535c00da50ea5b3e883ba99f485715214d6add9a20e1108dbfa9bc35632a4ac7e9c1e452c00fc5f55858c7823752dc0b89f13468360454583e72d5c13b02ff12d329f5fbbaef14e268766374f8d9b1ab87d09ae51209ee2686ce138f166d15887a16b66e474eb63bb8aaf08b330a77445ca560ef3dc365c9991b29b723bd3a6a57642d5c893a39b3bc409c2ef130595b79165e5124d9323ec8e1e88e8d1003657266e32303c29a31ee4a402e327b5eb17a7e993dafce73a8577d3487255ced5c506f795056ed825f91b2bf0b19a84652220fb0ddaed9bb279041e0d508e15a66f91d1c8a750fc5f2d05c22055775eda1e21e796a7627213da181320904bd1dd702ed504846e7977b48879fad5d14833cf58a911db3aff83ca2373ac2c99e9e470f58602c3cc4bfd90fc61b6a61f3aae87c82799e276f9bc83e3daca503c3b99a580d9aab4110147e72c6374ab693e66ca3204c0537aaa3c576dba33843c05907d6a68761efa4a452635e852ccdf8c65d38486f4e460187bb0f7f6a2ef5f5e90f34881d7cbcd171d6a8a9938542c302f6a6f3426bcb071a5f6af21a46203656f69c48aa22ef63a068afd8be6711733263a62444b781cba03e1a9f919a00a794bf563e1d7636a00cf220137020b2c3f7b863020848f9305253d3a098d70ae566addb54867e01c20523383b399a25d9408affca9f9d1f5d7b6a6f5d9a9acccbf943d116665c3a707fdd4e4549984da7b6af5a647820f8eafdcd7db120cc8b2ca0a6deb7059a3ffd17f50a42c727077114e7cada1742eb44a1ea55b08125a01b56a3f9046bc9cd5dddfed4e9edc1cb677dda2dc861969cf6e1cac026c091e8bc2299c2523955682ae40178b85fd91c29316101bf302d04c14f38893b73137994b842b832e68a89f9d459d42f34131c1c0e165149cad1f1bc82b7bf0350daa92a5efc9e808817a8bfa9d0924676b645f8c44bf051b710fc40dcef3c78b17fc5a7c46405ec763aff55b0e354d2c3b9cb2d0987df67bea2ca6e8e691f202a585d5b865264f385c9f5bff929dfe9be7ba280a845bbfa5578a32b1313b64ee98e6bd431a80e59bdda149767eff16be4b5a8a649fea4f2f44a0d1a1ff2d30015b295547e87d14501227a84d664860c7c31386a826a13455fe0875f44152c7220bc0b3fb8f67ab4e6e6e0142fdf6382c9fc4e952145a9236a36348a3e615fc76c7cde60d88b72e5dc091baac86ce9f755f206653515f30b11001c3be5e3ceb462e3b4372f12dfa5891f1f405e0d85d444d7bcab15cd919bb8f2a01c5e2b3a44a6cca5f3cfcaecc2da027851866b5f9f3df5ae12bcf35709e01809a58c3631f147f25f913e30ad37077a360ffd41f2112eeb6bd3d4cfd40f5c339782726f73334558ef0b32224976388bf16ea2f736a504fa6d8c3c7e89c1f7d184125715e97fce884d29a1b636023c300b4032336d33a732b516ea72d86903ad084684d82372e1d69bab4369fe5551d896c661c1c25f57a0cfbf8c19aef73c15262b97f2c2467a8294592103e7a27bfe0efe59be222495308b26e6d5e8e5b0af5013eb3ad61f0b78aa7c145a0db98990083c18225af38cb6896e051eb9323f942b47809f37886f0c398a253ef416d486f36faddd574cc4ab531424b821aafa729e72ac3ffb987fce448110d8476d641a2f3b17a67e7e828d74f97fdc14490ce7fee7f2aa1aaa6d14075f3d3e717c41c4c5e1b8fc0f6f4cef5aacfdc1798ed22f1bda999ac28e8fbff0efb23648bcdf1cc14b3505071e98c4fc5eb971cc84d6efc62cf40aa37f739ab095361f51bcebc32c7504c3ee6aad6f97315afd3a2b54de3a887668ae4470892161b9f683ba5ba2ffe8f3c9d62bdc29af4c8543816c9c3c80448bfd36bf1c5ca5c9c53458f5247a6731de8d2f6397087651365622b227d4f2ecc245617987fb90f9efb684d05f0d739b8c709c9f0e0917fead02edd7ab53b4d9864ccd5069c0209843c41289d2cc25e4ca22c6d96d5d6031ceb5f9d6a927823e1e4720c633ae540cf7091af33f3b34a5b31531af7e2b2c4523a1ebb4e3edcd4ca18f6ef979f7a6373ef5e745c5af4a198837441fa77883343d93aba6c0ce2ce3063d60caec7dae66b1aa378734611752c186815a99cac2a3899b321273e78a8cba8014543b54d083eacb83c04a2230487cbd124b72a801377d2ab2e9e911469607c9edb2d89e33044b382b2745dca0b9e20839d7d9e75774dd640e473c82c39092b285f80e78c71d314e99986936728a60ed16ee14e2aaf890ea6c17a26f7d76356b0a557f1c42baab20871cb74e71fd27d36b7c60be3174225998d561485c1205870b3d952cb1a26d79383fcfa39e28bd6527551c07c47175cbc2e25f79ef06518cdc7b23a7087d3b8463433799f1dd801c9e6eb2adcd65d7537b287cad05a489c9be408a123b4f6da65051d494817fd8763b9739eb98b1bb7baf66bb579a517b6dc1ff669b90ee5204c1f65f0f9c983a52f33b6bc19ede07e52a89f78fe201a5595219c804d0d3b651d29a950895b3c83d6ede72822af0f2a2f2a6b43983c969558379a5e2761d60657a0bf6b98c3b9081b24fb80ec6486f0189b232dd03f5d841a456490f29b627d84ff46e5b5de7f1661d68988384bb1386566044e13963ab0cf93a3b2a388eb90b852dd13332510b27e3654277ae7104650603a5a54a72624eda7cd91532407b1839c359d3620ae9cae66faa3493778e83a8dd21bc2aac9a5521c87afda11b8d34ae5f82699de190cc4f5834fa16a4de15473043a8430207d4159c5fd4f5a50f010413bd84d2a312ee68ce191ef2abfc01e2465bb007ba5cdc51c7f7b4076a9dee46ba57838700b93ded701f4f95242bb471ed6909a096919fc6be51c5b4f55148633c44a06d8df2d6e6db0b0eeb2357e1830f23c07fc57fa16009258e7e0bb16a60b4c9de2511ab1d31acaec6f5e4e908b29a95ab316d5764ee7d28d6342ce3f17f265aa0534ebd7879bb9fc711e2b0ff2eace13fe99f542928b504f881bbf2d6bf504dbd63fb2786734bbd732373be87a4e1947ef82184ce884262757d53e51a5a250eecb244c8ffb5b947f16f18a9f6f7609d65e127270095ac34af66d4cfd24d92c8b54a51e985743836c8611d60432a2cbc83b5755e9a09eb796636353311bcbbc5884b0328b34dc9097c00c091870d9db42aa3afdaa0ac60252a94e3026996af66bacb0b5f36c57130f880151b34207b8764144e031c941d10bae1db8f7e6f9c64d4d264f57f269049c5135b984b95ad4df171716257eb9264e5a81aac3354b19fc7e281717c433a4aceb37c5e170d5b1381c28f2de99c5dca6355011358426f69933f70f8fc2ef53478a861ce31ad657130c1459e2498ba804c95e4c189aceca32c48c8b3e3611ce664cc30d45a91c75192eaec7cacbe3fc21a6e5fad9e5cb8a8c583a07c31bc135c5060a0a2be37b8b80da6efef8af2097ddde30c0f08c184fa07df02869818e3ac6dd9e0dc41287982d2d0f8df3c33ee4df891008508b6235385ea3566899c6e9aed3f2c9674cc1b963942c13ca25bfe32045e2ded9a43760652c21d3c10da4d10879844efa53adb22f1610d6b69f0095b7626c565a17aba538632cc6e3ed9e063a33ef8bc1c459d3afb3572b56d625e6d2d2e5f2218be2c2a858bf6bd380360d49ace6ea24d59e6fae909e93d3dc729bae706a8b061f4613d1c2d0e61ccbf46b57a635a0bd163478ff969dcde291191e6118555d9e9f7a4196ab18e8d488e40d2536f1e626e191aea3c50fdb54b8e442cb52c5a947bbcc7429377d41a3431b1e173f28e147b3be88b27d55445dab62a088f0ae2ba66905a398a75ea579b6974ed5b6457afeba7bbcfbfe0b90a65286012604a3116d9e6e39e3894ea295e3330656ce0f447582f18103335f66f6a7ac13814a18ca3fad2152b05bf5db5242d631b71718af8c0ff7606cd4ee4591c48521a1498982efbfb828040ec1e61862170c0164dadbf2c50635c5bb087521be00af73cb7dd1cdcc6222926bf4f24c69894b784186c9b5d1ddf7f7d0c11855e7ee96a5b8c17db1885cc54bb4416be4a2c162b2f1d838e321ce2024ef0494c651640905595757de5b7533a32c614f2d4696eed370f36d1d14e5ed16d94f321156a2b926cd468ba6e00b1a840149455943fb5c9c693ea7e62311741eecb9c96e403476765839ae2acb2b2b19718faac58f53a02f1cb87c9ef690c74f542bc59e1bb5d569ffc4282e332f4ce3b86296471ec0b79d3656a5a19f04f2818aa0f0931016bef837b1d8d9680448673788bb861bdf33d16976b02f39b5011b6c16ac5a6e970d6844c64875fff069fd5151628bfab632368613a7c1773582c680d0922560b83ff68f9ecee0d46ff9c8cc692ac92695b3b125fff345dc85a95c526669bd4f3aff880fa3e44251816eb48f14d204365a0ab8e9c0b1a2df44784468072c6dabbb0a9311d59eee0c88c308465a09dc34752a99417baf9cb361746d06a79821b3805f0741d105840d3124193defa2502a1aefe10c3189b541fd3dcc7d4acac79537a8d36b847778e44737ab5a68259bf1b26e209ba750992bd6db4ac38764e43cbbd45d54bd26763311054e95a1f22090d55af8108055ee964caee0732f1fc33ff80c13b12231339d0254f2be8dc6c925db5dc6fe42a5b8171c9b849feb468c91255f255875b2899b9185186262e1e8f7463887dc637f6626eb1e0f754c4e30d261923da2580ca277e384d7a3986ea30bad4288ec2a6b91b93abd7dc49fc6ef5945a0341d549632047017eac5e2684811c17325e16c0cba022bc68dac637d3343d4ceb78baa4059cf178e2dd9dd299b0ea83fddffe53016f26c6f0e7f951504d822f0e0e6799c49f2b1f23aad341409f853f01350dd032a58a25201ba9b79c2e55e8dac6e6e523ed5a55bf7184d3000da477ee3b3bf75434de8dd1d852f9a8238fd2403f3a832699c3edbd06aabce53f8f1edfcf4608c292869a0e237c3159fc02dfed4086f6fc1d308052ad16268c1b4e6b60a3c9077836e6ca6ec112a40483141a28002ff9c4fdcb9540124ca1db03e7ecbba22f3f021f2bf61a204159baac0949fc754125b80115b8440c6fe07413aff69198c3fdc48e1b5f4eeff76c75135197c25fcf7b06fef898c703e5a0dc8387d8c2cae5cac62d63a278916ab0298742b8b8515185a0ff7f93fae5912f5414f9245b4c6d4ac25c72a47dfbcfd519da98cbdb3da8558dcafea19f414e8ab3bf1f1a53813586dab19f9e59e34dfc3491212ac550502a6092d20d81da6c4a64a9c30539c0265990839a08467ac5e020cf16ded9218b299490387683aa5e110ba29267afe80f269342c7b6896585291b482248ae34146cfae8fa78380dc34a20f8dde921477e094b94f6ddd69b964bafe88e4e76044cbd2515995b741e4396b7f895b0e9306575c45f3db72334bfebb5070103a95f1e7a321731733aa604afcae134c1b7cf3f4a0babdac996ce1abf633781075c78d34449b83acdecfa2cc978cd8ababba56392e7e15fb8e80feedf03f8bc90f07bd8c3a21ae7e4a205bf7fbff70e2b0f22b544a3574ed0a7b19b636e5710cf78163c1ae1a9952aa753139f8ce42096ef080e7d2bf8c51ad8c83f26a9a18d1846ec96e30836fff4f05cc9c4f8514c7c0b801a3e056e73745e39498c3ddcbafd02727965e362c328e4fc4f38b5e1c923c8e3989e3886b75c48ce25aede591c3f087fec89a24845b567757c4a0db37f7104180664d76284be68b641c9af4cfca026a62d9b50d153fb70947bd531858d1f1d664b31d6f10f2529dd317f349e5846d38200084d5c9a44d20b08f10c83aab29f21f228dbe553d48b8868fe588e248b5ff3d2cf4f326f4bd4ea12703bbad57df93246e696c22927b309f115e83fb24a99c29bc83e731f83ff9f7c17538ae40dd0a3e9b3254778e7f8b989e6a9d412ee7929cd27413252bb821474db5f140fc038de47773bac3e2bd74146e3e9bb69056ea75eb636b047e3137018d94e39e7722c49b6afd3d0f3fe028eb72ff496133ff6020b2b95bd6085a200aa1c065307feaa945ba4d32d2c6304c38f0669784c4b4bcfed434110f3cf4aa25456b89757c817d735e75378ddfa1ede555353cb698e93141aa3e3ba2229a0b58f7a77c24ad10fe7d973a800a404e98e33de8977ca729d7fc9e244ee5623c9141aa0a11359dc4f7db326db06fb411963e98aa254689b866392f7add84a9c84e909c4c128cca02bbf2522fe14df4828ebf82eaa99e6cca9630f408e533ea49f665c7f2f0b3caf98bb69082fb55abe0789176e61bb58b86fa78c1c828b6a7be5a0cc78b3e74a45bc55246b562448b497013af9e1c1e4f78413c0524123c3a70f97e9a934eb03afe61ee1dd1486ccf3727bccd3545ea16bbad8557e5c4e0ec430d25a2ba22b706899aca225112afa1c8c933709c2dbb2cad059eb08338bd0a667a8443288ca2d844a44000000000082003311002030241a8d46e301995c3219eb0114000449a28040a5c83495a7729a524a194310111900190001306d0067c2d4e72db853deed66337879cb36e5b462f91fb148f717ef7a3d3826d6d840d8438332c06874f2fc34e139496a3036354ddfbd33c7f61b050c2fc2bcc7f6f9b0a792d46fe45fcebec3e4db19aaa0369d0f0a17330109f20bc620f97fa66934cb91b8c0177c24acd802c0b1139c7e861aaa7f667a9709f8f31acf208711fdcedc08f55ceadf90796c16256b1327e4b938a830dd17cdef7951d2711766f5956f4756dbe6f14da39ac7f95a5e26ce292fa7f6ed2890197c64da824e53368bffc60d593362b1c3013b784a4880fb0591ad5c10c76bc9f0dafbfd07d2b63933bb2636cfa6e2172bd6b872aa791ebe974e41a7779e79f09a2d3272994d8ade8758baac6ec953bdd923cc4826f5379e4f1a838214d4313c8512e2d281e687243f96bed1b0df19fa73a2b29479f851818d4efef540401217f80007b0250ebeea70370be3d991b78bef07b81b10fd0b695a1f8d582698b7aef727c69e940fb2de229b184efb5700b890195c33cbe37d645e7bc27becdcf17ec5387254cebff2e7346016668cf4f3cebe47e1f0db784b7ef0c4814d0587aa40e8fd99eecb42f9819b87be7b3e6d12001af6d283a48ba214eea4cdd5ff8f889a55d2d84539a6ac4045366643882bdd98a0a7c795e7729c1af91462ce0ec80177be173689b19ccdb0f0ae4aebd80855134693a79247144df023b347b4c353eb5fdbbedbd303f7e36bc7ae85fbc8686eb8eaee6aac3f90f19e01516dbfb89b3a608243cfeda8be3d8f03d56d45248abf5f5a23363920c648c650a34c65640a2f31d4614c8cf306780d8b6d6cd208ed5d4aada591f297a635b4a45a886bdacea6430029aa97814761d837c88eef931bf573b26d07a8e366e2bfc0c8d91f1f9adc545a9abffdab35e9961d2b9cecc51415892f8ae6648f7603d2dda01b3572a55d1a5a24c7d0b27da3aafaf788c12083ab19f092e3e5322ee3d67cb1cbb099426f8db7f5487db135afedde3d3c028c43e58970bd8ffb5da66df79ef02b0ffce338cbd837126bb06603eef66fcbc9800f272534cba1cfa3bc02fc60043fecb7ce7833a8bc7986deef479ef8c0318d135bb91e0edf833f6c11110ebdc01b0f0efd16de9c577c8f749df720bd6f4952cf51580a367d9f57a5450c261258cd0a85fc978803293b54b6e41b96f9ab12dd0bcdeb0d7422a69379f2e127f95407f6d21924c40ab60365b345dbd4919497627aaefbeb1962774c715cf41621755e8c7ddf17b4da3b20aed6a9cf528711a27b972e1a092d5fc18d43df4a17db23c1b728210d48eb11b62fd3366728393d98f916b52cbbcdfbdd4089a461b094ceeb934f42c0638373410dc4766b7aa1a699a129f2a17ac50e04f622d5165b7bb6cd85d4c98f2f153f25335b53a53ff5e28c015323a628150a900bb0e69564afd1d1a00d420216d32094a88d17b02e5f0984e3e559d8cac8ac2100401c0e06870f61aefeede14e82c30e8971298ce9f0ad2c7522e708822f7317277574d81ccb734a1f5d6efc5c6f9f871604eae932c04398922507a804d2b179595e0ce84bbef56461f0a2777be639109a64782a4a3af1ffcec2e368fc582cd5e8a71e067ab6d152a703e8b99206de483461f160943d82a8fcd90c079c46f0944fe6086f0b5ec71d3da037bbc6f862285c337d636fd8785f66c585ac0e26bd7fe9d6017135558b71eab6af8d242b9773fa46e18c83dcc077add83d4e3a969904a3dfdbe23ffdeea7c3ff34a0a5fb9dfc6ffc294ac008f67f623f9f3f9cfc7fccf25cba24ec01c225c625471860935e72168ef1d0a20fb213cac6cc0c23e3136163c91d1c3d16d16b4e4aa90d72918f376ca541782eab453d1e25f62b587f3e92bd6661e8beef009080a4b40f500417640032d3c162b04af2bce68b5c305f5278d470437c2d8c46a1ee32991532f675370fe4ade31ee8cd7fd3d267f9ddd4335a56909380649bf3918b5903793978f05482e187ffbb0f86fbf4a7d2b862de2d33fb2e1c7fef4f6765b14348dab8c7f234ff5359f950249743c317ad907e19abf0b0b09e707dbc3a81bf055827f067c4eff81c323805d09b7941a186f914c448832e0664f9d5570d37207b72c2cfe0553573c2714ff8c5e9f90510b370b071936176fabc938c4fd9e02cf665565677edff1408cf777c57a19d3f3579d0d7f6a143c2fc043e7bd4b7b3004e468afd6e82772780f70868d74e66b3e46e00fe9fd3b57d278cba49ee634f88ff1eba2f42616d2495170b2e9e7eb0cd71661013cf57e773f3e598d3eb7597b81cd0ec93c557021dc8ede8740a026eb1be8af7b846d1121aa5c5820198c25e683c00f58cf3877c2117f42f10649be3f3d88cec8196cbacbdc3239f953341725148783bc695d3b7f85b95bf9c16ed42e81342fd3b16b1237a5898deaebc87b97121aca83d1b61ba64015c0cf22ee90dc441024bd0573bfbe51b85954aa7fc267b35b2f4e50dc74187121470f712776c67d1c03a5f81bef8c3997c91d0119712c92e22baf8d34b86b7accbb88ad1de5c59a62337e30fc08d20e34d5450adcfafa98905afd9d948147f9b214f788dba91c31fafeb8a828e10870bb66e3c83b5383889574d4dd8776dc55692f1e1b30921325897aa1209301bfd7fb263b3a4f2e264e5d8beabc91281f05b22d9280f63ae6ba0e16614d264889a06bd79f0d7143e699ca76a28340aba8768df4ed772c767448c6f86eae736d3ad5bdefbd61111b68689f1c087fd6a8475a35d00810f7e5e3306c26ee1a85ba7e1194c96367770ceb99d9e5debbf191f96fa5a07a29f0de85f723b53da92c6de4bd3b7ce7063022d72ab5233d504597e45a669b49bc984cc7c86a0c50c333872bfc353fa292d2343816f0a52ecce228e7722a3fc7d755d49762a75bfb785cceae3645321daa3b6fa4569515ac792be11c2c4af7390f400b21f2b7d0f00bed97d0ceddc08e27c4b5e6946d43c4a71d38db820afc513bdc5549b7ce23cc6e0047af97274dd3770aae7ef449889c873ea7d85d96dbb80b017bb184b4a8cb4f03e6072a964a2db2137ae19f8f797c30f8e38ea22be273d0e7acf5e7d2680c1fc905cf632f1817dca59a2292912664a95af8d8dd0df89613d0432f9b3802a8ab3547252e61d746d9c666188ffefbd99f0813970b7744ec60cd08df790ed0e199ee16fb57414588d1908df7b9054fe5a7d1b91173f678175d34f25f6a2248b301b4f9032e18cb0ffb3ce0e7fb3a8717f1bbd9a4032292e884c110e5de48ed7cae3ce2c638d735fd15c04b3c6ef3723f04e2f521b7ef10987d5d36ce16a97d1fa8b56dbf58da2cf7203cbb00722c2d6dd526abe58c5ad7ead763f437829ce0da9fe0b8f1ecacf0ca2e76dabfb846e164d6be5f7d5c260dd4c5cf9fe3052d3fbaecb86a21f31810de13fd4e333f07dbe4f27f3b619372deda62821040f65c28b3c6ee1dff43469257cb453ffb95ff65c2fffaf66bc5199a1a1bf90ec25a73cf9cb17b0cdcbe942f3fd228e55d065f87039f489d24a684c7af164f97371ae368cd9918bba585e8701f7a3b6c87391e9b99715cf69511c58a4c017ace8e42556c8975b2af4204bdffd3a58f6393d26f5877ef50092d43323c434fe9d1973fd316f6f60a76492559af8585ddfeb3bc508abfd966b2b3385c8e35fec33a67951cf5fc0e3ee4d6874e4089c286ec07f96edb198a56ed609c38747a6d60748f24387c4f544edd7e841cd2f87fbc7e39b0784f3bfa56e12ac667e124a604c78313e4880857946da2286c5574f7324c84f3070ec0fc6caef92d11be3c6e388103f83e87aeeb160c12c040d4ba7062582527ecd2033b2ed448531aa20bd9df98a6f1286bc87acac31bebb7ac4c85cffe8f0bc2388b373434f003f7bbfbf28ec4e87bc1bd7ee7bec4f287fb794e9ae5190959596eee22a3292d6f1e029899cbe101e1879a659bb926c08ccdf3c8cfb12c5aefab4900108e0a0f3ac9cd38267968f45baa075089cbb7bb8c8ba79ab43d8fc0c74d9a5588fd957dcba2f6461f6f760819e6277f42c85a2565fc3fea4dcf8062a28150d5eff9f5fad1ec347b55cd26da8a97932ef44e98385cc3d003b4ba45701e9408c8219a9323022a51b83a52c4dc9a3de21409ec5cd4badf371ba660ae5887a8ab6fce9f5c0feb2152d7cbbe98febcaa166ccdc37ad60b32bbcc3753150edf3388e03fad9e3bd8d9f283982eb387935cfc9a968eb87978c96456c0b9e4bc4ad8e56ed09e025efcfb5b2f27ebe00fd70c0f269760e9d2ffa66bb05bce01984b8be9efce1d3a7c3c08fd111766feb80886ac3bffbeaebb97accd41b143d192df5400b7db0822fe32dd4bff639d16bee03d27f1a95398d477e27e6890bfd8f43b332f384d94d7af2a6b796e1c87bced9cfae18c7ebeffbbe11f2ff7c211bb7f90a543ead2a70bb741d378823712e45ed8ef1d7051eff1ec81a197795676111dbccd3eea4c69fd756debe6c38e060d13525c7058ad1e784e3a5156413b87cba7d8258f54e953f08337e213ff0349c0e492447cc8ea6e48d9bff51723aa422c7f99525e86602f606793d6c2a0807403804c4b48bcdd9e3374c9729d116539baa29dd9126461e61414e133562c39ab9b66c1b7363057492a24375111c997cec4ba0882540a212b8e89050066f1898f6ff473b2289f8771ef8dbb3f77eb03c5cc5a02e03afb9d6b7bea184d821e0260cb6e2baeadf83450ca4605d81f51fd0cef18e350f7c4d2e596dcdb51348c31a9c6dee1b34d01f1dafe116553c9a12c76e5a8e99ef059544b90516db95eb245fe0c8b7eee8bf0dc3f0faaaea82da24213ca06969739d569c982130fed2a490d620476073ac604873246ec8c9c695f227e6a2213b8e19e01724fe4e2696da9f78185f5db1ae51b8afc35d80f7dd974827e237d2c6c0c658d23630c546a09eec3b9d664ca0916ea25a06e37345d4ec654781a0b0dd7ee5ba5d0327f660b394e3efecdb5b11d39115f30378d5c152a69e8f27bbc2f471d0e30e01312d07ce2381001bff339166a48486b29aa3e9513eb47ab52b91b99cbff060baa524d2897bab4b565810f61661d2a782abf08c01fa7a2c2ca0a34616952c4a7f1b1ee3b07e44789b3df7e66ace24fa507b4c6386911ba412ddde76e02e5042e3b142f8d68b08f7678d03c9039c7e66d082c677bc83c69cf2fb676d26c037ee7b6fcb592e47fc323f18f26a8fb3d19cea680284ddcaefada1af60d027c2fc96256fc4bfef7ffc360ff3d0dcb38bf58976dd2dfa2db1f1a71fb3f46e9bbd21ad600da3f8f9eee132ff710cb2fb6c7de13dcd97f8d7f97bbbcccf12fc99626b723ef01b650d703c4e7e5fe9dfb78d99bc7d60a4263a3df351b271b10a8ec73469f0e6b32eb21b5f266a3511fee063e21e18ba1d3e6844dc19e06607714e8da65c7fc642763a042b2cd62418c9fbafe17cc3b4b295e6dfcc7ae31a74a851f419745270467b778d225f6efde3fc3cd07e07a0cffbd41e59670f39d3d23eca2dd8bf97c39ff2119a8491d72a4f7c2edd0780fc819e9e0a7a33b1adb8957fa599349adeeacb0ba0a9ff6c1cf91c44f391ae5e21d79a7b146a39c7df9fec77dafdd8b271e2b5eb1fe717e430a15823267974e525aad844a108c698203700605f5b8e33677eec4115eaa8a45e78637cbeca7c1437a9b171bd159bfb1bab9e827a6a0586fbbe336e2e83a7425cacc0082c92cd475b6dbb56e90de908f9279df0fefbb8f63806336b215720139cd1bcf2051ad1092d19312afa6dcccb938ccb298e9ac9c105e89bf833b854346a2742ab6107106022be163bbc677100f1fea24df7d819d0912a311efa7fac75b24f1a11a3e303ad95b3e738c62568835fbcef88bc9fe0c578cfd569810c0bf2671a5ba5f9640676ea60a632f9f3aa114898665c9a22f0d68fa99bb5ba92c6fcc941da77aa812c7fcc539870c7d5709ff3c07ba360da7a6139dd2c518dc07e7c6a82f444bc106221133f0bc6558b9d7aefa07d009e2ab249d35dd3cb7e5d33e33413986f4c3792d3a3c26cb0bcc7dc3958d0faa8daf5e96fa5cca558a6ebdb6519e002d10576956af89211024ae7025cec2d0121275cbff13ed6795df0af9c127b2f1b491c62baa532dd325acd70ca03610385d072927a13574a439a9fada8afb02b648b6babd421411adeb71e6175857fe98cde2af43131b2d6aa1ccfa56f5355670958f0181af21ef0f62962c5a6bfbc9f23140e3bea37daf098a98720bca5e80559a173f434b932956c8a885a3119631c3d6090a5cfff2052f68275d467f302a596296d92fa1ca7bb9d143e033e02eedce94d3428788d32f1596e78d85d809eba6bf86033c645cb655ab12d9ff0f321c59d7378ef614e97d866e6f0840bb7b767f2451b60b21933c5e337aa674300c2c6a35b872a484f4bc733e1591d786f1cf0ee06798fe01e2c0c4ffc85c9735764fb54f8ab2bdd81e62f95bced94af7df9e7e9a73888032153e0507cf2faff0d3fad3f4f6abfd0ee83a2d2375c836be207c313ffd07dc79bb262611c437900b5575e72a978943563c18f3922cf1bf3b99f1b8f97d93c22d84cfdf920bceb5d7abfbdf10bc9ed09876a7c0d0be0dbdb0d5e8640350da33f3e2ef3dbd6f1214d76f576ccf9abd46ab5f4d69f9e089849e3307a2f745f747e60d5951ea9e0f3e63846658613bd4972cab177e3a117d5814a3097d5e5847b5105e209e24b1458d06d85fc2e6e659a0f47af14bc744cc9bc7d82a28c91a6b94949ed960a5017964fa5dc88d878d9decc9b4722280e26c5befc0373213dda71b0df9cd914e8aa26b87312488fa564849a6d56483317f81a3aa63aae3a379636231a5d7e9d5a50eb8d56e75bbc21da373d5c02476225f9025080a1f6b3c1be8c3b202c917e1a982e3194e0890e00dc01c211f1c0129d3da2dc4a351a3dc67b6756f708e1edd1109129607f482388ce4696c16a891fc16dbaa10a2abea34f4e01e1c33316c9fbbacc45a2dae6bbceae87cefb78c38f665c6454b7b61893396be7595b23e520a66008b6baf537f3ec3823e2a040e7792f88fd5e99da28e0b799a1b8660da03a6f0f700f2dbfcd7d4560cf5b03d8cbbb89f70338016ef9fd663459f535796a7d3442a151d77c07852ec797fed7bc7e8c71356c15f14ce9dcf71f4d9f38c27db6a279670eb710773b72b34491682142f1eff837ebd8b90dd37e7d35ec1d946cdeb4438c5605e69f41f02060cbe722160f3d2962c9bb0aa7876db7fa44a46bfe3b1bc777699b40ff75c36e339edda7ec98bfb55ee677fcb35cf22d7a106f778082416d9592d921f7d70ec92d8fd2e4adf3cced37f8d9e826475d5ada2cfd4da19e99a36de51ff19d018d6a78080e68edb9dabce91c763bed7cf26bcaa5e1b9da92f04477c59c5626b1f9e2a061b86a3df9f282fdf23ebb764a3cdda1e0a4f6db87a4f802f94e1a9d54cb1709519e0576e6bd781ec7c11b66b88b0d8e0c9437f0294c9bdbccb610631f1829bc64516b8cd99f5f7fa4befa5d21cd433e623003375e826292be693868cb986834ff400b53de749f36de7f86c1f33235b34dc982edf7dcae5b758cb6917b4322bba2855f3b5056cf2a77a2640bff4cbba00ad9e0cf9f1dc8a3df63caf88c4e2a3cd2f174d7251ae40bce60e4671972fe05e1104cf1a89c3ff060e4e288533e1234f3c2dbc442abf06a911e89f33f0dade76ecd500f7c3d63e60a578de3f129175f13e4e341490abe7cb76fd874029ae139a6f71cd692e65343bc31b6aa13d312dd02e3b6bdea413a7e85918b81684bd802d7f7255840d0eb41e8d971aa634b08a51ec46560b81bd6f4278b18f10af36ff683fe571bb24ad4e2cdce6cf3be21d02baaacc2594d6e9cf259bbf19292e7d4ffc0626b06f35c3cf737fda7f8e84fcfca4777606204e821b601bf5b9251234304fc88f4dc1b443d5009e71348e4700736756e74302c7047a37b7a87635c91cbe16b9cdcf591dfbc762679d922d5313de796a6efc255a9954fd74c0556852b6d823bc7ff174b081d89103cce94cbcaa59d12809551db193c3034317229d3de5ec5c920d9284581efc236e005985f1c9e9ff8ed93c77037ebda49b12caf0f954d810560fab757962f797fbde3fb685fe7fafb385b640cff582e784c109ca9234f055524b2542696fc0088fbfff83d917c028404331168fbce9140bf6a9fb0de8944274df15e82019c7ae2dd9e823f034ca4829fdb48d7b633135fc203a05c548556f0b39a2d635a1eb08113cccfd9e38ea2af5df8dbfae983945dd1c965ec237756ad3679cd542c5e89892c8eab73a02625cf75da284cff286283303cab0d57cb70d7a6d96f637975f031aa672b0fab11f5e748bcbba2f29048e3985cb48aa41ed2da9d188ac361bbac4eaa213bf863f27af02d9ad75b1780cb0031a0c29d1c4fc94bc3283326349a5c00f1a552880898c86084363bbf56c985df72369a2bd9dc356008d3feab4457055bffbe18b15754123cb5fc92639c45c682f4e937bdbfc1df161e6c4928cfb6c156127e73b6b88cc49c4daa81c0eb2f7187776436cec8dde960958b25bd9246851b14f615f3310152c97438e494b914075d0d18ee5b05b56c0c1f430f935e005aa237b5546899ed3f538f4bb59eecc9557e0667c1893aeab89f03eef1e44b4bff5df58f40277d123e44287ce2e2f36703f352fad9dd3f0d6f54a5ff1a39e0cae1c30b9e938e5ff16c1a28fadadf93b673ae933ed5f5af92f02f80cd3af9f57b6731e79fc6f007dcf8847aedd4bfb1c03c8673d30e3857be5db2783a46a09cf3e0ade37ff7b80685ed82f21a9b3b72ba6e158fa6f8b4c7a955c1178c7139aa1b8595bdbab102f89123274ebca5191f17b31e51e945e49ce35e1e857f72b4e038804e7775dd2f228c5060efc8ef0681a1674bf8fd42bfe11da9ae11b727675c1a8fb9fd7be4b9061c9685e365a4f86931e5e1307b340006b1f07d0f7e2ee533719595f703fec189da51e971c313d688aec77114d2f5c198ac1378b2aa9d59493cd8fa54d48f12de1ecc7ff521684749197688369170ee428b4ffacc46b0a6fe3ecbe520f796145ecfcbff99dce7e98d03b99760ea02ecc098136fa221c58f852bdc6eca7dfd9d7d9ea28f4b6c4698963b9c018909f1769a58e3e26b842d47794e1996e07b2dcf29bc9a94dc10cfacfab309d730d4ea7d953e67339699e3090b4574dd0cb07e75c002898ba5e79ed5e37f7d85f750db71594de299d944bf3ded02a130c0baa9c68b247bc951044561c6b99385ff798c5c011c1922415c6954d8cdd232291729890b2dd9a169d9e6c8629da5c8a88720b8120b800a7267e7ac6251f8825e5fa4a704d68d08145390c10b94d3a55c3fab840c5d4a79854e09a3b9506d05792e5db8de5ba64b6bdddc2d9b91c0e3f982ded97f93f1800b741aa02bbd0f98ef62bc39abdfcc2f33147f39856421318cabe4a04fbe45474b2ba79ebf4324b33973f42aab962d35ceebbeea6639d5e8d39d8cec5a16015d6bdc5003e51ccd0a8f66aad520fbb8db1d0bc62798d3623e31fcabb6a4e89d3dd6d23cdadf11ed4dee5e1843fe483e3348b2973187c3372378d160e741f809f1126c7af2e7c76afd06e5be765177a715075728fde53511956a2af74c714e3df8ff7ad2b232f1c3ccea097af740413fa41359cde3753aaf04b63c7ff07d26eaa3a5e0950594dfcf7d18039dcb629693b10ccbce01c4c368e7f4e93c56cd7ed55a1b9f1572e7fb52a474df5b18731adba83da328a4a71cef0f1c69cf32f4ffb3b05b0363a781bb2b430ce62a7139caf406cf4b4d08224f3ff4d0d7e8d177ace70c1e8d852578bfa9678e479ebd036071a523f489846ca529efcb3d3d48762652bd2e7de4e042b1b110b0214a626105775c7b566112577019839232bf3e0f0ca5ff5d7bd341a39780a7d03728a27b871aa71f0ef35f7d0e2f5cb44715d09198bae99de78810c62c5772e5bc04f96be5851c2b1065f14853e1b7ca78e3a8c9da02f2574d51089e94712021b9542d9db7a1a667ec17599bcc86d7b1e9fc0278ab7fcff78bf5e41a0d047d841c505afd7cdc0bfd9abb5c757eb2e4bad3edce5657329c3cff3d556ed68f7dddc557ce5a54d399f0c203921fab3d7f78ff5562af1b87a5b78450b874b3c41ac60b6e14c335ab0f4cfee296f7b33f7bdaec72759a37e9c4408a56d5864cdea2b44c2d85000408e500663576045006e1032c3454327fe8baa3bbc6e423be69f2c956cb15c156f33469513d7517d69a5b3380c63289545041e86691399490a7e2132747f7e0ac1ce17aa5409066c619b0a5a8e8983b6a7668832e30cfc46b90ce0b83720aaf3b6f8f31753baa108d503fe63631aea5b9bb117e65417713fe8b699fdccb3d8d2541b3d76f0e87c99074034ca10a8489885a99fad3fef2d635649f3e050502c646e407448f675256aa98d3fcd68dea98b432b2a97e4b62ed35946d886774960bc4b906b60a9016ab9e1d1f97d3c789b77bf54576d4bb19327668c69f3ee63ed0dee641ff51c8fbe53d13bfa8a90f51792e4c7714c6be8f8f9f0676375f7906b4a348fbb8f1ddf3c74027e336c02868327989d298cda0709ff7c3b673a61f5cf9d6e0fca8607bec1ee133cc3fc07ddebea084c9ca187327fefdad4b7fe6ad0a8c7dac2b9b662f5801c43beb02612703d044e17ce5ed9b2fa3a1540bc3685edc148305745384ec92bd7f2946a7ae013f39b71c3dc4bdd9d8fa598f2879debd9fd48bb9c35f8951664ebe9e73d9cac7b6849092181d3a793292a3b8497d17de620026b2cb66eec9d8c580c353a95d176418b7cc8896e37439caf63579ff829b5c7bfae535980d000ed9781f400e33fff80cf08f5df2f88d3c9f65a204a1321b4dc2e1b17e8f08ba897d48c9ecd8c6b56f90c028c6b1e6249ee60b926beb3948ed3707955bf1a0f771d4b89789589c53e5f557036ea8039dfb1ba3a94f963f6cfa1627006d7d2cb156e0b9b9f518da0d33e50730513fd9c359642a1d673783c0f5b8f4511c257f536b5d8ea91598368fe27b18465458bde5d065ea93aa3040a183cddc423ed9f80879e563ba3d16ac476d259bb2b33f4cc2383796f8d359c0aaada40d275a3be9330ed84aaba5c98a7645251e950f9e7277010fcf00343b7b6c24cd6e8844197eec7d897b7d063065361042d06153bb33adc24f628e342045ad3076020c2f0e0d5a4f44d88bb9aad963f9b955bfe7eeb8a71a57fc3cc216ce847e1fb0df74ad48b78d03334bbb6f5f711c4f4711f32cac015cc519d8bf5d9673c0604503f2b3c4d64cd40df37f0b5f1a6674a659ba5b6a5f0716c239f29be87df7e5673e51525ae82121c786c5932a232734da2d8cee70f4d09769db9e3c4d7f8aa51f9abb9e64fa1c7a3e994c5bc3683f5d3949bf56b89ca545224c116fc92809c10d68bbc300c7f3be7994a53afa4dfb31e94d67f8035a2131a10986354d734c753eaf05228113609ab93e3ac3b9d0e9c1d98d7b11839c1e2a5310fdd702ec3462a628c3589850dbe778a2ed4dd03c91dcd46f64314b499b8e84583f1c8139ca3b0330bf3a93d6835337ce071e43984f08384c41cf38b106e6fda9a2ba7c56414be1f602b3cb2ef3983747ed17e592ef110ed6f3bc6238a1460d3045fdbeb7cca0d5af2fb06b4adf64eedc2c746ed1aebf370b61f110fa238c06db7667a4769a2f01a06e8a7d47cbcbe6a23a36adde79383ee78d28d1fb844c47b07d89db6503ebcb9d912e5f37e1d3862356d57b1c6dc153f533e7715408f0c5ef11559ee26a9f0af0b3f9f51b47e581f888ba96878230e5996659228ad3f55a88dd5e2de2b410e9db1eae283b11b7eddc72767411c6e6e0d9b888bf2679c0bf0382e0b8fa7ae3acf90ccbcffaeef31169392f6716c880bf231170d45506c053f982597b87d97787bcb80cf54f5b9b416605a8bbf7b8b85fa9babc6175e4f7eed2b22cf90dc20beda567f5e07760f9d8657abb405cb80e680f76bbdc2415c59ebd74b3ef8e5edf4c08130ec34a4760f1d315617d704815ee1a8d7c0da2c1b0d773fdc35f828ae3b90e93578a26ffaa6e0a7ab68a999435130c888eb2ba6a73867715cd1d32039a781922d2bfa799aa1f3a8ad96202a43b490444e83f021e9138c50938699093f6649c4bd86e02901824ad9c642b9566256d0e16d3a68f864245ff90c0d74c2a3063171371bfea721bee596b86a3d163fe7b30b28e81469d8cfaeb1fc5ce5b878e97e767c58dafaae0f887b3c1636380552fd219c43bc1f4c1e35775565d1d6d5afb0957e3dd7d6e51761e13cffefa3061d15d1c36488858b86f272f470cdad2075caae8e3225015a71da6d9a8b89a522e35be998041e2c6d44fc8a984a542e35a3c8045da4d0a561a92de91894ec6b32f781a36fd4876248c336f45c890c5a7d9de11e2de9d3cf77c1310b8be94202b26ae6ba76056c4e9c6a2dcbaa93abcdee32b5b78fd45fd9d3c8a92ecb002dee48d613e4b1c71ea23d717ed494bd1cf3df39a89fc303d2bcc45feaf1d3627a282c8bfb54ff6d730ec34e3e8f23bee9679ad56be8d0362c736b0169615e246b5e1b35dcbed107f24574a9cb63509c5daf4071d77bb89c2c58be99cedb9a845a3911debb239255efc38934d70935d3be0c5a5d3209c91435fbe72e0f903c43d3254d7351cf9b73002055781e5e71ed880de53ecaa5866b0097cc566e831d918e4e8e56d779205c5360ac83db4e91ed50a38af8d8053d605d4cf7684a77f9ac2b4e1ebde0170231afc62809f4ade0f0e81952258a2d511d3f6f05100bb638bb2cfaba3441ebbf6e535b959a27ce51c7418c879079e4dd6f89737de97459215b9858da27fd9470a8289ae4561ca1b0bbcc2d6ec3d7da2184f851b0af06e4cad5a4db5784425874357cc43db6d14f0ef66a7212a05c32a3b2618c52df69a216980f7b1be66881c04aeeaf6783dfb24f7eee43e4bbf876eeed0d9c4f81357f1ab65eddc45414c80e8646c6f1afea416f435aa272a5493968722ff8e9d339e17f32742cc0b992beca2edb77c0a90d878c3d029af8d224d815fa9684453bbde6846463ae6ab6c34113ece4f3c9e2d3c46bcfada3e28eb14712dc93a81bddf86ed3035a59881c5f120810278f07ef32a25f5a1f1a3b91854285ae7d46763b0223663939fa150bbc80f35b26a24edf9b64807408a319200c4f7fa54821e17170bc887061a7c22f13e149f0296cde463b448de728c201590f147eba77c81b90436b58832bfbfa2f3cf751147f75f7888f5dd954316223b1874a79951179748fbe891d71b9fc1d20855b63caa00670fc2eed2a0ef3abe3ab1ba8053d66af06500e692287b7fb13c9819f604bb730e7b3e61813185a1e4a50088cbacec7513bcc7533b13e06b34ff416027e3796b31266d277940f5cd6b25027eec56a5c088d4bb35c3278fefeae51d50a78b4764b2289b1bf2c87aa14b855cb537bdfdda282ec714dbca23531aed0dd6ad0689761690e908f15d4eda956c742b1c4aec0a7b2086ebc7c9d1e4754cafce446694739ad64a117b1c3c2d858af9edd9f3a34bf290ecc604942496e4058572f03ae580e5577543224e97ddaab004ada360be15f8c5273cf894d9313df13c1b511586fcd1e7d1b46f4f6cce562336c1e3c291db77eeeff799ed377ba1a979b44521a86d07a42d4ff60b025eaccbe720b9725e3ecc1a6da1af9ae004c04df572c1d3416babf5d401923381d0249c205a0870d92645345665c41da27e1343022d30b1db95655daa0ea0ea96a22283930ecba8ceb096f76be08a5590a3cdc7c26ae631759f3ae3a6b8f313e1abaa168666d8749e87585b9c07f549dfb815296c37ce693daa5dec5f8469577e0fb02c3426548571c16edcab0f32d6bf85266a10e504e74828e122e0a00f282f45bfd5332290fcc7a61e5ad00038c64531471462e0393c2900569f1c9b231499bc19b4dd019642018740275bca9c21a846c1486749a991f03476bd92c2c256b6a04ca570f5123dc3194eb08c4b4d02b092025bcb74ec55621cba368470fa9ab6a9ee3afaa18cac5d4bc312fa020faa63b2a0fc490d06dedf93e90d2f485acba612a5923761f63ea7fc4f62ee626d239e3dbb1a90a980301661a7ca63873159be22ecf358e8cdaeeb08734c6424d0514587d1e63c215e0cfa2d950f690c0131b06e21797d8e493c1aa24313c484097c667bf9e433f86537cbd8c83b517f92b0b3398eacb44bf37f078f26adb7aff5f3a7e31cf6d40cae867f2add234a8bccfe461e1f7e96a5d1fcd80e53d034c161a02394f3c609774237061dad2fe07485fbb46a6b716d44b5360c56b657286629c1ba5856cab899cfc681f181b80d299deb13fc4daa6bc7fdd0023fb31871fb26cd1743f84ff5ac39191e98fefb6eb28bc0476cb4865caece93a87a86e9ec12368fe7924d67d687b4fb10cebd487c118ad9299dcf5199577d84229bc0490487958e24fe3023c294aac7ece1f97050245c41bac029ede2e6600ff4fc37cebc1157373dbce1d8edb69c2c51cfa0fd189265f57c04654f2c55eed7998cf805e60b22bf5316b348ef38439c01412687c2764db781efb4f2ffd0306eccf260ed36a6f771358ee299f5c11fd437aaa7fa5cfc203d6effc564b8f5358cdcf3a5b806f6f7ccbf6a42deac0ab6d9c5df8bcbda1b7de65f59c0ddfb04bfcdffb811e09d1ffdde4de5de9d5a16fff332f86dfc3d416abc19443cfcb2dc759dfbd898dcf75195bbffeffc5bd4cfb898b2986eb3d7c7c9d82947fcb71d2d2090dc0023095aecf09813167e76df935b0994ca870915d1258f78b81c5a65e7398157cdabadf5b47431abb52d8c1ef0611897fdb166b5d2469ec36ebfd98346f6fc35361969bd092795eeb77d1bccab878fe0dd92e6340f9e48495174e1561608aafa237b485e00f69e63df905435608c777e1f17aadd67d0669b3855cae43eedbbef29e91c183e31cb4bd71cf6fc431bff9c16af4ff3034dcc45f88f65b2b6191c1aa55df655eab3efcc07e35332afd0867583e0991ef90e655175b98d715398ce1d4679735ad0313f48802fed26d42f83fb03241c355d7f9057243166f94b379c331ed33dad9005ec20195238dbaa7e10369c81113c07ea1d60b57755c66b38f703b2584dfda4087f74a57cff646476a98169926d1bbb0ecb8a8b37ec9cb2f9edf9aa523f427b48b8145231358cf829474425dfa8d4a3a19adc0f24b38d3ad06f1d45dc7746f6bac4f1e40a730a7cf482d50af4121dff437815f4ab7eecb6ed45d204f7f2eaaf55a8c367e32cd526d9af4ed3c51a125b71abe1b06b58e6bf51ea618b9e7d0b07d6a81765128739c05fd6ae31a0c18ef6022679082fb8c0615ae14af2e090253378d57122c2f47ad31f593737b7870bb12996a22029f403a329ec7d5539bdc4ab1baf17e43e02bc3f592f287df01e9bf72f4605dc87688fafce6376ab7ef4f957787a6c92fc342fa263c5c33913a5d0b8b3b237e12dbe7df63201ad9506ed534550cfed4bfa7432d0b6ebdca3001845910e542059eb113b019ab1f50f56e7e938566c6000b5c8f6935ac4af17d23d4c266c4c81ad7ff429ba7b5cec54fd5ff2b936bae4be67e0b3e4bb046cb1ce41b47c8ba91c8af0b8cd3b3371c2ee7562dd3879e37eff31da9f1591036d7758a053214e5cb84e245de7d473e6b3b4d7484b20d7268a47c8e72b3c1f83cff163715f93bcbf786be0508b186293d1b17d7b0f6981d08691238b5e6f6265ee0acf7eca19b540e4293e0ea4bf9139d7d7a69cbe07f277532f47bdcb75d0beb02db8e9eb1dd74f04546dde50c41c628c571d42d3b9b09ac0141b8df7fc21e9889d8c481c71401530667ca4fa607620b49e01b05a96115f1396431d693cf71f17ea87980524a87eece6e2a5f0c1fdbce7785250faafb4af55dcdfff17eba8b1de7daa0639d901ea265cd38d9572332321cf2b82bf5ff439f917cfd7c34501e46d9bb2417b0b9ce2618fa0b3d97737b7f3590e7daa5c81d76f0e9d4ae5399cdd2dfed5f7261cc9b2ec7f2fd30df2eddbbcf90b06eec0b7f1c57b84bdef76d52d1cd24ff8d9cdabeecf0e6f9d59f749ccee8f6fbfb7f33c7229b383d788dae62e50ce2bc83050c25c1a056398f90136aa014954af420cbe73864d124192d6d713119c99ca1a6b08bc26d6fc16db4eeb83c3863ee63a752b9019f2e115c9232f83d8be86f58f4814081f8e808075bc4ffa7fc8e85aedcd3b6434fdff6cb3efa277a21a335fb05dd087f6e32bc50d7ac822c33adfbaa7fd724c15dfdd507ec170e6fb679b7997bfdfda6b376d3cb0d410891a921d1adfd77ed206690645377efd34a19ce1fac58ffdcaf89b9c8d943e5e87367a2962be4407194013bca4f576bf7089b894353adf7c01c7a3fc9f14b3cd1ea5b14e6d2d18b77e079f05caa838876e5201c2fc3abe36994a94a868e552398a4bcf455a9160d411f2535c0b2aac558dd597088535904bcb7136094e049cd181be903b74fd34d086f4b93a0d7b72a87b7bf094bdb7ae70eb9a2028de39c4ce6b729ea846f547409335facbfc14427554d2ad6db8378cbc8c67ff159af7ed345f6d52462b7a57688b9f5bf2de11abd7ba6acb5f27b8a7a35b7ed5b8f1258d346feb78aec50f01980326c81f68bc3902b551df902a053b6f74b101c4f1766ffbd58271621f4733f04ce42439bf5976c029d899a3bb0734b32ec873b742377a7fb934695a2c0ca81b75cfbde6f2db8b6ebc69f0a9004b1f958e85dd92d0df706971c24204c078f9cdd4fc9501444c53b27e6983c3df88fd1b528ba54aa39e55d8bde3a8f9322259444ed39027d70389f388c7e9126f6dba800e44f0ed08448861c8a79863df96aa0fc06c23be81b2bd9936903c0da69f219059f697209354b956dbf226ef39d594dfa781828a2bea4f2eaaa97f707813804f51289d737c9d64f36d590df17c263f295b78e28ca51fd6a60b1f98a1a5fd4697590e8afd7987ba5495781931035356b424c89883fe02acfff2156b06ce812bb9b6e0d9efa58c041b83fa3b30bceca520fcd379bb9bf7d506e2d0a8b2ce92c4cfd36c6cd9744273f246631422f029437bc946d8a311f7c400852d611f8352299338cf3d4915638b4ece99ad8cc87d0f0cb2ecbcf7f4167ceadca1a506992196f9687fdfe37ebb2105eacc5a78fc392c7d1a1a9a47059e7c0124e959e91f9e6a21ada03f5ed45740aa7d7712d874ef1ba2f8de2c7665cce2199e4a49924209bdd36fa7e07e821bdd6212ed86e5b41f45105470d645a55aa64534cc42dc6c88d8890e892ac061bd25697dd3c995053188fb7bfd1d2bfa30e9fcadbd6721cb27d2bdb2cd1f1e8475466ba6c58774c5aaa01af213f519141c78a05bf61f5ccc1522e264c84e6202fb3cf06d69a36cc8c2c990e1c657f2b43d98454061d973025bef7295e0ac6176fb75bf866e1f842fdad0e3021249b42f9376b97312a2df636a8b5f0780e2aa25721b802c1ac2330e0329426297f18f95ab7af49e919da965f435396aee636f8585c9f5853f0083ebc6e8ee28da34929a47f1e17013ef38a6d0eb79b6d0fb53b863c13bb6b4cf228adff2a34e4a0fd9fd25ab77d4bad576d3586ad60c06eba06ea773539ebc96691b758b7813368276809ea2daa347b43e484b7b3d7799cd2c29a6c483facf52b2be0ad28954c8d3a2c00af786d078447f67bd2152928f96df58873f4b298a375ce8be53eb4c580d35f3d75e728d3ee38c0154dcfe98e2544f4602d6a2678de1cf85a34599f236de653fb2f201b201e55c0e86ff672f22728c8ac4066cb765a57108891edce7caf9fa63eadeed95e79329413a2560e5985e85bdb5bcbdf471f9c57e696bc248dcea0611c523cbf5d277f352ae6638e318e34ff5faf374a7fde592528e2155c6d99a36eebe07bfdc1243ceee149c3dd15517639e332653de5088603d14bb97e3a8f686ef50bfd03f21515ef7adfc427fdd162af0f39193c710bc9df94af8fbf5487e1147b4219fd9ae3fef8d6faebfc95ddce320184187b261130e48967be0f170a0ab2fc383e689b5753ef12dcc8f406292a90b531b6ef4066399823fbca3adc06b4d4daa373efa7568d9cf70b612867b7dc0ae253cc14abeb5fa50f2daf26b4ffda27b8e72bebc9e06e6a56bbd7c579a6cc3f38d90622e31fe2aacc486887aa94e0ace4c478a95743992b40baa6a44e9b578bd852858a0897f98696462fd89fcd24a67b79c7bfb474b004e6d6d1b705c3b35b599e77e52fd1b64eb1d4cc4f22bb7fdd7c64a6d17ac2f756e8487f9be89b523bde4ca6760add734317b53c8db58cc796b6a074c5d861849fd34bd0f6947677db74dcb17b2e18294ff5267c8350f6db9c7eb80ec3bfd791d9d8643fbde8be45b46af9f94bfc16d80ff480e27e119dd2c85b3f8e7b44061c8bdcc0a44bfdd2c1b6e3e77a0fadf302fb932a05b3d1af9ddbb27a8104ffa1f8d8f6a0e9e3859b3a0e7635c17e69d0953874dea6660805c44709cf9f3f34bd36624cf78b74a4d44031e24f411c5ab2d0c76070da50c7e958dc2b7e814706da53403c9a5b2da970a94a743d2f82571414ff422161ae5a959ebaae1a04ea7be431d9f58718293845f3faa7d2e7a989014a960463e7c30c1c08ef8c926fc83cc0de3a16f8f00661514408b15c1a7886db0af66a97d04f7529b185e16a71b9f088d020f43aed59062a14d777497d4c22e4fd7c042214604865136e8222b44f419c817295d54ebf8921cf119522747c0585480c92af44e54569623efb94f4918b26c076d8df6a3188193b87df9a91096ad6fc27a85cfe6fedd21a2051ad629f4fa49a5f94d45222596f41476beb7bade6ec015136fcdc6f4da862a2ca34bd49500ed92de6450a5af9d56b2928a3179d06c6ed17793e43131bf67e90e7f57774874471c5d05c4290b0757567c6f6badbe8361b8fdf758f71618eef70f686fb54f72fb62de8ddd7dbb33eb1b8d9efefbe6b876e91ba8ce0830e4c320deef446bcc31ee55dc4c1218ca40dcd750de9f4d7a393d8253f0ebaa395aefd50233091a4d969ee80f03371dabdd3f9c01b7bf805fdc087f4c420eb4200c0a2c36c3d9eb0ae81efe1a1edc9531380cbdb11976d4cf8ba2bbe993bdcb0bf505fb5d608ac79d2f13504564a3ccd991c33c6400a608fdb7d827c9817504cf7f1c26cd564c2d171431419171289e667ce0bce01462635a2053e0b96cdd2c3e4eaa00da06fa198cbfc663ceb52ca6a4e1be4ec0801efa88115f5fb0147b2e1b4d531e326037e79a4faf1bb640e8e8d6b944401d01fd0d07af6b4f8fc4e8132b7fc285f0bbf3e1573fac593097d2ab8156d1959f53b973722f42f420c33927b4d14d9eb6434b65289b915298b886f149551049f7bcacd05e3362ffc207980b620cead9da472449fe67c6640d310c8a4ead853958e13e9ad70e34be1e3b7ed11431afb4ef346841ad3a42b883e2e4488ad21e38131658995a6db469c4e8604f7a98aecb7e4dedbfc2b90f4b1fe5e8bd798f31024079b8c5418541fa00848a699b574117a053e2cd66a3f6d4e3ab086616da7c1e386286f6542c472a1b6d5ef1219ecc96905b2f06814a60e147efd2c61d1a6305dfd2becbc8edbc5913ba0844d2a7bd9ba7e3280d6ddfa08eb40a332a50eb98c5bd7e85d3b1d5b58dbe839650770337c0bf842e47ad182a207caac0d971a6382d0715b1adb6a4f1047a4b39693d52bc618cf5a9d1be1b56fec26de58eeccea8d100d1bb8efe08e021b81adef28bcc7719d42d3e5c3bf2f5bfcdd175528f29e4b37c366e53b520134607b88341b81f60d3b7b50f480564ce5d1177de512e0363bd011b8d57e20599f4d22387347f19930859f012ef324cded58ebace7bc9f0e7a703609974f5b445b51cca3ab7b2933990f89c7e664376597af200c78326e8630a16cc00e621668a619083c5984cf54b55d25198e6c0a753513becb464a4127cde651a1d12b3eb9867edd44f093e80a16ad3462cdd82cf24380981dab316fd7a82278ace5d12aba434973e6a7d10576814f9cf4d6ab83a723a4254b174290bba9ef3ba59f528e204aa958de14be865ddfdecb0b3bccb20e46cfbef05431c15388cd2c0606e35c62e231bdb22dccb5f5498405ca06c7400a864159ef0b31ce5e967b75bf434469ce9feb4bd7f84a1d8ef0521bacaf0a5e5655e18d0919363707e15fbb5394721b7b4620b489dc3451b873344acf4a4c21096994c52383358fd6df17e9822454a2cf86ec0c793a96640b1b8d62aae3d33e24f626c24ff71654f4b28be55fa4b795f9c11beb39acb64c059b59ba8d8fc1f556eef72be315349de4ce8a4a1b2fb27f0847ff883a85bbc74541bad7a89c8b7a2d9c5df26f8dcc08af676badf7aaf8b898760d6a91cb0cfc5c2debcff10771ed5467aaf2272e0fe1d736472b6606121ebca0b913f44b961ea770a36277fa6fd245a4ed28ae3ebc322576082cc142ed62e2fd9358b5eef0bf893309e2bccb74a2e51cdc0cb2530e2305a25bc48c66f43f35a9eb8d8ffab86ce9dbd13d33d7b43dfad61dc9c58df79fc03305da2fe663cbc2f68613e7780ec75e0ea6c3fb5352be2db152dfe48549f56b04d7bf9690c86834eec69197bee5a326c8c67ff7fc4f98ff674c742326bf425f0de39b191ec8862654f27db0bd73226805f4c169948c0acfe668e7d1c34f303c9f5855afcad01dea101bc17f4f8111c00bad142e90015f75fc930d90d83605daf465976be2cff68480c3268d8c25abfd9993018b674a107b04404cf4469b0fdd4002e838b66291d877abf1eee87c8b7827e8b1515a7c2338a83d7e34e4783ca5e3fefc620eb0a88a061eda7aefc18ee07eb7ecc00431ebeaaaf01e78ec8bc6cb83599271dee117090ff0daff0d763bfd936db77bcfec4dbedb141fb250c6692a36b3f3a5d2aa233ae591e84923808160574a2cc4ae8b32f8d624abaca6d23cf0ca6a9985641db3b8524d4be6a22165534c9f5aac70cda3e7d90af401bc6a3a47d1c97417f1df0e0349ac6d552f29fec8d77e37f5a12bef119ed2b39bc551c9c4bea1dc93a86909d81d1a0c4c5ab14509affe2fe697bcca3075a74d09f7bc6fb04dd005a017d942c0970b54d7ee1ca33f7b8a2398d96511c0c03dd3b00cc7431ffc99fde589949e1df9745d3300243a21b981584b0ed7d59d46e91262db9c65426a4d72a4548f07aec75f9904e0bef0f2bf2729d4476a77bf74e6b3d8bbbc24a5f753b0e27b1c7e125e91f570d7ab1d0c5243d9f142ee5f2cf8b5ed08385e68893fc6da09a1ab646e42cb23f3e5873c6d85797e1b2fc7b312e3f2d08e29d21ccaee229f6a41b47c31973ca05702a9a31a77a1cb013c304d12be4466f9adfc3f25949bb23fd53bc7b1239654ce4fb09862fec63aae5f71f5ba803c48a48cde2c32e474946585d9b4ceb8160d8784f232dd0cda355eafbcd90258641b1361e97215c56f99d988afe585d99ad07383b4a0e47e0ecf60e271acfccd4029dc8092022defebee04214ff21885d48889e881026b30b05aa448afc4a122325263e17e8cc8e22aca48ae86ecca8b55a13dfdf432cdb83befaa9cfe30bf75398c71d70f1635d3259cfc81cb22c190e63d4c71686d027ed1a046785cd6d8dcaca7f8165066bc5ec331768a5959f47bd6fc92a2bafda88aaf37ba90008b8cf07c81ba4549a46dd77d4a22e9890944ebb339ece7d395649b46a9376068e2ddee5f0024b8adaf5cdfd8c6d65f9b42555542fc461781e42321266ffe8d8935fb1249b13c2d5136aaa03046245a31bde05d07cd748a0224c8b74fc541ec6a1ba06a4c618ea465b51b8645d7944ff71647be7fdf0232cd1dfc60e83bff4919e2d1d3ed977750f331be9e2191e300a2db17f5e0cb6c41cfb720826abac2e72a635b79ebb7337f4babd50bf1536463889faa6d40a303e20c7be1bfd201cfd75e6a2e6eb4c9abb0532bb1800002ca3b10910c12754ab54605da78c91c6057fb098f475294fffe973be274fb2d042221a10af302c8645de1fc4a88e9c038cf0fb3b17ac62cc7c207080c32183f907fd87bef84bcddeb3bafa830203d09696a7992304ad8b2ffcd43c958d90c579d608abaa32c9453b99683b2d18ab291a0594330d5a2ad97c1dd2c2e2670d2e110308265f607db7b4efc65d585469ca84049092bc24b5d0d08c953978f931888c0927efe3bc69662fecf39dab67a4d09bde81f1ac4724950750c88ef75aff2fe6ee71deaac3362ec2df099ebcda36734225781c92eed98eeb6a0edcf91ec9f881d73de2da3ef2dbdaee43bb6d4e12fb9ed18b71ff331456a9ba4c5872c449be43c23358fa91172ea0b7d2ce86829e02fa6ae8db40f404ad514f2ee07f1cb83f050556da73707b0fa08ed0ef1160f8bae9f00d33516753ed0e04f01423c30bcc7b8f05fb023f83cb19da3e8d11d39e88ac11b298d0f8bddbccab09e0071ee2bf719322ee840f47ae2dea403e94ddc6b994fbf934c100a7c96f88ee947f5262492ea5fdb080d3eec23a7272f948f5d1b8a1af4e3e118e06d13ee860f13844afce55d4d1834036eb4793d319e972fad0b27a75679d0672aebe0a03097445a178ee4c2ac71994ef5c3f85364c3d93761b4696b33ae636788d2879d1a04d883b02eddc34675ccee51d41850c21206b0a2a7dd9f8c10232f86bb655d064d9d8aa8da0b19cd2bc486ab6f657903b2a43c706d5d057e9c74d032b8396fb6206251443002cd811df2d70c3edad49d5c2491d5bf501037d838179070a321cce1f00813ef8f1748dfb9d7381e43cbf0b3e4b9d7c4aed4369f7e155e0e5b91b8c33ff32b0792e93d33da7abb37999584f066f0dcf19493c2f4d13647166465027cfde333e01b849e4dbeb3bd8f44bbd96dc4f67d191c1e457dbfd6d1f3203f20fd20ec6e01e54cb43e370f80fcf2a84a4b1b9fff27f6833e33cdadc178debbef9a132f692fab0d0fd56ed4aead86b1f22eebc2fb95ea9e1333d43051de7a959f05507c224f89966e07b4caf78e9415a95c3528f12a5eca7174c06f75620655a261fd5bb0dcf3800a7847463a4196c138080321e378171234ab9de4fdef6b241c67cbbe637ffb3d193a727e9314c5df55bf2fbb3cee3a77dc279a8e88b61b80cf5bcb6d77c8a6b046aa7da9b2fe96ea3155111760e419bc0e257c0b285399bfffa0a227dcca8f8efbd2bad7358c21b19473037032de19a8f3144333aa7ed502fa1870911106a6d0f8a24ced5f21c209e1a6e4ed72239c38cef5a92c82810a3943c35531c7addcd2e3a96817c88bcfc5ea5847dd503838a09b3261fe1c25a74e619a47bbd152d43fe7b4ef3653566ea5ea5abd611198b271ff49649c1ae478f75f0770835bcc029207aee86872513a93f1df2a4d1570716bcd03c738c342921a9d29e8f485a6566340caa15a0e43d8d3907017844e096c816b32c9d0823e07c632da4693835ca711a93635b8606377c8293bb5df50b713096a052463c1235eb627ec60c9ff892d230add56a3ebaaf52c70fda360b0c85ab1a596f85193c32b822bb79a12cfab625c9ae4c995d246815e2216b37c5ce56c0fc3d9ce38907848e24e125d1ba0451da8f71369044d248c5788cf21c7e8e23f0033209c074fc5ee48e796623c46d76a689f3d119f43e793e1974eaf6b51e1aa61e8b6571a5b1236dba70bdad2f6c2a13cf9e659c1239c9ef7cca25aeb25dd991fde1687cb48f69777172b0cfbbfdc9909d2ef237e21304d604809877928e8eb303a725d54b2975019f13ad8c5970b054d851f35081157a9272ca22b44dd568ecb2f7a03df2456a313c796e18049d39e7af829b53027e0dc1cd53bcabafd19372d0ba1e3278ef794c7840f7ac4777be10c46797587e6aec0cc3d5c6926d5b27a798adc9c37fd3d09806133e70eb7b8fa04dfb34958b9871902f6fdb1c4aff73daeba9f2ed00037874bc505de5617f48e38375e9dab56b403f62cdec79b22707c6ea9775c7decdfff728c2ef03e0fb02fcf106fea86f840f7306728550154a8d2edaad42bb60fcf5933d8e3db6f6bce3187f73b7b1cb00e6340c39b742ea83ebfe1af9e13a01f00fc638934727a80a6d63abff4213be1a6a9bec2d12ce4ca6fb9008490ebe23c8d26a4a711bf61f15f251d86d75a6050f48d58aec84ada6e63de33184a621affd7bce6f2b250ce23397c2d3c7b8ce072343ebcfff456523f21ba463527226d96f370e36f7651d3ff0798d683045ae1395db1758a110d1945358f1912d2736139462774fd82e2a8d1c3fc169ba74954f8d4d0e0753e8eaf3f80c824dcf42f3526e0e2377e11ebb9a5d0a2513bf1e59e8504363f4b24db3228b2c2c2bb924f98f5ed83ca983d6d9f916358ffbdfe9ad4472b08ac91f69396a82e5fe1071b253458d8b09371ac8019c913e24c83ae86048563854a89868dc022c22189ce6d6b4e3e71e324ccdea5555214655b7a8922b3662d2939a08143d2adcff0a610b34aac9038ef96d276760840d867beb7b69389cc35b43a6c13ca97243ccae11146df2a04c65f9b93ef8843589bbfba861f1a226131b00547d6d4106970cccd47a89ff80fda920a60ade9053a98d41a4039dd96643329c05989d3535d9dc43ed4b9abc911b531c9b0ce48041c7621901e0f52a13afd307ccae253138522856025b48f6288355b7467d08f975ce4979760692c536e74f0a79752a88627ab4bca0680c5919df7842bc83368b7d98f8efb178b04c4c31d62f1f26971303008d30ba726bd8e4b24b8875d51df7b396cc68a3288dc95b1fec2aa278f1517f0f3868fff91266eee7e752ff462fbd3045c83fb542a31cfbc0e5431e15f12fccc7f28c5645f07584fc7d62633dafcfbb6a8ea5c91df3e92f76a2c6e589b94f0034bff94401480f38ff2d0e750f69d11ef5036020565a64bd39b493595bf9479dd421302b023105d92bd2393e907da174fcaf50c6d77db4b3b1a973d5366ab9b5f0af82b4e132d1627090afa992efbb6375c6ee3e06b26cf8b9f8429073b46a4a50b6bf46ddd3d6831204435cfdcad23bf9b0dd32093c39eb5c1343aa3bff505afe4ad16138deed94be8878d7d0d8bcba56426d0d4b2dfdd0724788a0c0835889bfe66446235b936f4c30ed3ef9eb0381202f4a800d9d1941e43d387e67ef62359b4679b9b19a71a3e3cc727fcc24558f26fba0331b7b27c915a054d7984f4709a8f106958aadf4b7fa13485dd0fc5642a123acdf1864c6fd2de4c4c45940b61b04a9074fa1bb756d401868a9cf369708caec1bb6060f0f246a3e5b167c08e0b61a3bf41983bcf01c2d5da14a2032d64526d08e8008d7431687c2bb301ee3c7622e3b211164ddfd9ddec14919820d9288ef04ac32a97a94041fbcbad5262880a453b62f5d6c7e6949d322220d9b8f0d9cb00de55a24d81426a957e07b983c69b2e3af4c02eb4c1dad402149da8ceb3ffc431d9d5ea2fc85542530488d01b1c35e83d51d1a04d14b6ef6dc8c781b21e46f6f08b612db304560fde4acfd14fd17d4976af7e625dd7f3f70622bf3512f8f21af1d2a668bfb9df8604da2d0c73f9021dbf91c5f8f78a755adba41dc8bfe33d4f3a6ff55e64dd0ff51c7ca3efbab256505efe5d7509234e36ec7ee3bde17b8bf4de28f73e181b5b5ddd77160ee13be3304c023c47e690b5c11f24c971ce7de795e4e3368a49fc9d4b4d7a2fffd40e2f73e2b8ee1289f8344421be5b9469c728f95d819489a2d8312db0f8a977a27a25472938ab9a519dbb497f06f3fbe1a134b09d05bf6bdb603160815178b8b0dd6526bb86b21270cc9c79e251d5752bb944dbfeb7a1bcab6d5599320f9104141c913fb80a78458ee2aa4dc9cc0ce612cac3c0c9db93ecc965e9f63d3ba5fdca44c554f4231af4ffd7f1663d8e0a2cc373dc09e47c78eec53e7eb578a4b3cb6de33eceb00e8c3637e7f643d8f691a63fa85c4bc073855cbcfff3d8ab45270adec5b799c5377dcf59be0e2173d1545e43ad6a900dcd1815cd1c907e7601b6e9d8f9b4fd4b5e279d84b3cd4a8c2ac85523147990074e11dd191cbb773d3fb8e228ae4171eeced64705c443db02f4b8e25b5cc9bd1ab43d6e86875a510c656d2573f40d7cb954d1509af8032945cc83cb8fa983458f328b0bffc9a1442b0c88eb73eb4eb21446088e02547c713fd07e49f1bc91f44e66488cbbf5dfc6ad3381f9c5720519d2cae546e8da69ee3a3990796db627346e2f386cc00f669ffb55031fcc8f035f1df13d11a67ff3a8a8e0f2b808da9345d9f0fc95138e8ef39f46488ff42a78448905efb91178ee769f3df953f5ffdfb2114ddc74e793cfcddd308bbb1a0a370b9ba227f3bfd4bb23c63252b1aabffd6311180b2654214190b2ee9723671cfe25eaf57e50ae3dfe07c1962915a2b008186c4bbd719e8d4075c99f153fcc5a7a23cea95d412290ea02f84b461d18943aeb490d10107c207dd594ba337c7dd20e7f5d9942d0cbee37a7d50593d1b284342e3da86c9187c93d1bf025d0ee156d4c5a702abff8f13f633c59c93a2665f45dfdc2ad330ebb9cd360e3fac282dd49f5b40c4f7f212b9dc144f7e227cc0f8a06a38e1beb339f56d0ef26986609afefcb1db5f7b0fe2201fb1a45a9c34343c0cbad726367219d22ec8017f35d6316ff31c2bff28cae7d12253280db6ae8dff0e03836b282d498c522256acdd684256ecfb04bbaa3752b03fddd53dc3c8d1aba5f2b19d8ebd50609ba2c33c07db7b8283720578afc6ddfecf8d9171ef2b017700b8767e743c39ab49a06c0a2e49b2c9f476a0801e4f3887c5f5570f0d40efbfca9d33df0ca2cfc51ef506c65b23db7bdfecdef7c482b871d15beab303df13f71cc4fdb3abea8cb4f7eb0e9e485b87dd9ee6ca78c12eaf79b813b4398af3d777bcba79b380df9269acee98662e03dcbff38b95ddf1bc2d22d36c466a0775b9076a8d9c86b143953ee37765f0f3327cec349561415063fbb658085e6356aca11e18d7976a6b8b47b1c50fd36983712dc4db13eea1251c81a1380c92f6865a4cd70e4f87cef4748b66242ce88a615c0b3de88fd87c503ff2e8e72021a998f4e7e0bc7eb509493f3cc91bf706e3cf1f0d24fd014d343c77e94c0895ed2e92510fea8acf90a3eec8e1d3797dba841f8fc65db695c03aa1b998d3f57eda08e562b23ac0ff724e6d19db328af3bfa5d55fdb307993c0d538faeb49f9c9f2ec07a02ef602c97c472bb44fc053b73c56196810ca6349071c2db7efaaa74b005e56af28b69fa72c05f8356cd7603fb7eea603193ec7a6fc5d4b93c1c0c0282b4a68bd18fcd39544df45ec9fc2b60266f837d53c7b02bab6e51fc9acb49a0901701114a12992051538dde8a130f1dcfe83c1835ae7563d6d1bd395a72924ae609114167b67ec2e38b032ab80145479bf492797317912b68de062b4050e5fdb5ffd833527d4791efab3508a44907bcd5eabc8eceed6e313ed814dc3695c9dd850cb5e14998759ea2b315fe0c238c963987967c0c9ab57660acca05ee4e9fa0f72b1bff4a862ee300af58dc80c11e7f69ae59459e914dce5d5f030824b15298ad9f3825f8d5b2b43e1282c90dc00aa363d71c20477b609c0e636691a3c8bf1944c0cd68d3e7a3a64a02ff9e1209c246764a76a664d474d0a0c1dfe25f1f342f6b469a34406b1d8eb37ed2d6e9268233d3eec6d3a5c9496d4b0de14a502fc8804d6f5517fa9f51858f53f82aa0a17b92d11aabd8c039719c32d9a717a6b9918b39d4a09546343e0b364ed16b849108d66d9bfff846e5683030386adc987b15b43507675b5fa1d28967c78960f6410f0c2cde74057ba24fcbc128b26022cd554db29d39bf5c5a92ca25d16bc16516f5d92eeb230c0d11e7784c3bc075fac9aabbe3f71b9afa957f9506ad02e514ce4dd59d0ddd317f52c62db0ad70d13f64629543675a0940edde26105bef14c686241ad8af852dbf66b97c08b90a282225e2c4ac0ad776d9152264bedb5e5a68fab6940b6a30fa0ca4fd45144436dd70c05a9184b13dff7260e0d7e7f6d5451a83ddfc0a193becbc87a8e9a6cf5ca09dabff678babb06aa9c34b09e52e1124342bdef8e039d86fef597f00c661c0460b1b8d34a031b67c03eb2ebed3d4a8e9ef2b19b72e91f6c73c9c47e7118d1e457a6d83c2b102d4534625032c9b46958dc788c32360391fbfc22c03efd0dfa9f0e59583995b583514317d0b7bf9da731148ea69a092e9bfdfb0787ccd94fa8c311605118cebd4b2919e6b551d26dd7600b3c6229458bc170ec94a8cd17dec18d09437279f82a637f32abd3937d084557a42b653b6ec90909457d5b4a4cd12e97d561103d225c94a3c524456223a3437c4ab593258c0dad434f278c24f9b20d9dd35697a4127921719474fcdcd948908e906d2b1425ac52c3b2b0517507a9c9de525e003f12db6515c38786f1876e629f71ea19ad74d078badbe51172358bc770b6b9d8e80f5fee81a826dec1dd2b81f42a1e7225d3cc4c6814d3ca265945ef80a1461211705237b8226e96ddfc263c5da44d9c041dba1bb1fa3fe8b42cd2136ecf17a51685e3f7f1e1d1062c3d8301b80a958a0ef207a4cfa4b21be0b40563e92245f68b03a6b158242917f8f3215f705ffca38a6715b996e951fc8eabb33346593d974b247a4da3ba6b4b255a34399b36500a11a842b2b8844894a02b7957d8573c8fd28d997c4f82126230034848f5d4d85b8f4a83bcbb4be3c11c459793097ad2e6b92e5a59f556a4689e6b363624c7b533f396ee38f2f63ab3b7c9feb26ded87bf9e0a9385bdcc969f1d8d6943185dcd62a573c41eb6a347ebc8b0aefe9a29688988e6129f62d23f7a0b1c37b0950a008dfc297562f213878ccdd95c6943861e9465afae10526fe7e1b286911cf1e230449d70d619043c0085d9de90ca4a5678babb45c7494840d09589fb08c67ad106ef69e41c4d569a96daf037dd31e87daeba6666d875ae3f9bffa023e19843f8ca5e8197ad90d31d907cfa7a4bd010334b2db54c11f1f33dc118357f8f339a81f5d1859dbdd7089d7185cda420362a670bc13e750e7b3c672b50f90926452b78af50a51e3aed9fddd2e354fbd75cb44a27c81b62b8fad2db72e3583eba109c0b961b1c13e0f805e6e33a3d8a86842ead61f0fce29cd47f6fe79087a3c53fab7bf3d170d2ceed69dcf8f2b7c540ff973b5e6966743d428d750e5c83091900e7b9dadead47f39b9faae7d48de4a7fd5c15dcf8f355b947cc98adb9589b73d93a072b952b265c999674762fd6c5b944be948cd96bb347b85f1b3f496183f3cd6d8a8a69f20f20dd1591f18018c5664f1ae5b6639276287a7b1abbcca458e4ca2b19ce7336928df238ab97f429df4aa58fa182501a991d78a7699b00745fa87794012d8cf1a50e194b3537288dd98a472b8f382ec7c1b8d932630c7d0023c8d76ef0ec4acdc32d69901a048a953132ddb8bf809b754c8c00dd529ebe19a838c69bcba0b226c5a26b2d322031a8487b7610abe0ab4f873c5ceacee813903cd4bc70664ac468a915b336fb83c362bf1b020e9afe07265746ddcc53306f3148c46e0a1fef60e58485abfbab741c284bc9ab7a5f11817d8ffe88c31d610f1ae3f8c0bf91e1f904eef8f67b91def76e63e08f20e7716504404108027f428f86d0064d1ddb94a1f563788d60d2a6f655ef93945967e01f8f1d7ce9ee3dcaf366acbeda810797009c1aa06f2b2f538f38351adea1b461e89fadc10fcf292f02df9c6f35d12550c338546be0a19b283da89cd03c18a008f14467c9cf23ca2d02014329c15d5be69476e12cbef2b23a30872eedb3c247b0b8e6bab77ec4bbf59796ef9283277b5cb37fbe361b5386f17e99fba333c867174807911108fd9e3d970f7a89aaf2b7463a94fc9b348e77a44acab5fcf33825b689cc58444e26d8928dbbfdf72c41d5d758f0ea3d8c4b6f510b08e1b39022d6efe9f501c9b0741523b6237f9b838b642310813b765ab93fd105dce6ae8619805cd26bbafb12e75d8ab08a6e4061ec68586d752d0b3f340a2c898a58ec90b121e1ebbd5f18e2ad6fdc948370fa891f29f8629ade898f1ec09a85ebfd35270a4b988af04220229e14b05bce873ad15ac158238bc03431142eebbc9b9d45a238e47ab395530dad247464ef4b5de65f404cd5bc0cc9729b4b2c349fd6596ac159d2252af49f0707d82bba42c0dff737c235ad28ec831f55e3b7f93afb2350faadaad5882879c7694fe3a00c4217975111597152699f8c7fb9862130322f57626181e4544346f35ec222d43c441c5b9d162f1becd90001d0236c199c5ea845822b5f599b7e9e17694f8120ec9e209133edc3b423c81d988fe1f3028f1da796efdbcefcfc598c74f76f8f802789a96d2fa55a9f0faa0bb27e4f2cdaeac504470abd9e3b29f85902bbaa0685920612c6f82d7f1e9fa7fd6458798ee069c32b4e8d8b315a3651c0677867358dd99bbea9b0eb0fd0906833260472cffcd6500b09018d743bdbe6f30504b502c822e61f224ef24e3aa747d7229b64b6e5cb64ac3c568365dec0b63615b8a96d6919e6e7ee8ad96cd5160aaf71fdd8b89a3e633515b151bab0207afb7d042b8320b68c2c2789da11bf9f9eef7f2e935915b0703ed73833058666dc1f9d3ca607e7289659f138ef5126a79a48ed4597bae2036ac92d3ff10a41024e2b0db9ed52a6ed13ee59da7a51fa47eed0fad0e1c1c8049bfdf803024871fef94d8bd6d54e48500720b7c0533995c6829adc33ccaa6041dd271554273e82a083522d35119c6d0a92c1eae2c348228897109904f500019f323b6a2c93b0f1a1e09f5e7904af3c30e97191bb3e267d172d3abc7444711b6681940b3ba78fc6cf4e2a0395261b5a9e9eb80a8198ff80822de0f9ad5e0dcc822e4272db7c8a689a4160c356c67d4506fef5b86b95f8c1bd50c77b462422f2cb2670a6782f2fec8fb7cdcd15191bbf3003ea4ea1cb838d733d5e2934822c8edb1668ba0db26fba8ddaeeb87c3f590ae445a8bf70d10e4b9827b6a074fa76c9695be8b993e46ec59307657b009752cbafbe51227d76cd114cad136e1b2e617a6fbb0c9bb667aa990087b7cf4b8da69f1dbcdd14c22be26550aa02c8fa83acbe89a34e6ee5af87b7a6d43738d183a5c9adcb8095bba4b4ebd24328962ca11fa5b19d47e1ca7284b5720ba52bd3e17da02e582385958c8111097722fb4c975de331b0c8b314c8e4a383833f035f1bb231c5664b342461bc25dd2ccab8b78853bb84652cdae9921835d104fd5964b323aba0392b3b1668b044c907dd9f248cc4f6109b2043e6245595484db7131b0d128c421cfd95f7472e4280c390cc3a0e1d110c781d0fafdc1db396f86da27ef2ab42e060cc7591d1e119922da324d79a459e08f7fbf5534a049ec1de86da825146ee061a4a8c9e6e1612cb280a3be28f2070fd739018a6c553c4a4f5f30747c53149ba8b2e1535abbafc95b35307996dcefa5106d8cf5e394c0526f450ff62941ecd2a01ed641add4f5a92b75c8f5055064c4c4340a3ce41c49d029cc5c9ae08a921219c9b7abc998c312834936dd38360c95d8a9f5249b6d45d9b843b5adeb957294e4a943162de1e367c4d15da9fa987031a5edb75eb462f0e7de1619306a5214dfc3db6c142df2d377d6e7e35061b4b326c8b2fc7cf6af9c6a5e403ae717775c3f083c41db3c2cfc331468f44eac7ad10d8a0f369e22ac072ae65b098c4e3ab0ef9b86926a32feb6c60005fdf39671263424ede6cf69a3fe6f9b4c84d727275fa77ff1c5403e4eb6fc243d05b7ab62317d2d267b0b49cf4cbdcaf7c6da6696ae5d72e9693fbe6dbb55abc7bc17355f0aca6924180ef9ef912bc344f9053e4c5e44d65d3c57a1ba06fc8a001d14d6cd30c4fc3cf9021f31d2e77e031a12e69f4a02b0b8ffc1300f0109612618b233c1bae9e157c9713bde02f9a918acf8a19ccc79911581f6338b8f71dd0e929d774d17a76f1e88a0d706819c8e7f40c30c320cb1945f389c0a75ee05627773501411a4b4d6070f3874bed068e7edc51bedd3404bb8204cc165d6e36f49b0e473303ce707e9487810ab14b9872a0a95d425d4b54ddfd0898c9bdafe54128d5a91cd5a78ce1a17d255b9d5a999a43cf63c7f23a873c741c2bd93aa97f587cbe9baec62e376078b3ce20a6d53e0183a5ee9beaeead2b02f0c418a70427b73e48dca3c51554472cb54dc5683670f4c29431507910243b9d04bc102ae3bab18d424739fecad497d9da531f9bc0ae9c730c6b6c80c96eeabcfbe3a4714238d6039e93b3e08f76132518dd342003fcd50e39d47b3205a5b586ce68c5e93eacd9ca9519e5b8dcfaab6222675954c8c90886285e2c67e70b7a8683db593c2ccc75e0d7bf5734d928cf4f06e601e281b4cfa0944131075be8b9b73643a165e8ac1fbb36903383080568080656903276936f08ce06d36f0a08fb6a2d6e4dc7bfc882762c86ed076b2503cec4a3229d56378e5c2b4e40e4159e6db2dc524674b2fbb07504fb71963b189e914623304560f9c28a8733178be91588431e21d2bb69bf6f24c423d1cc34744ca01ec500b2e423a718734b7e43adbdc506afa125a95afacf38518f065950a480a469a58208ab76ad0a644e5b47d43a873325e6173bc998bf0f25eb32499d04bd56970d4f6cd26a1810e11bcdb46a5a7aaeea9f7ae9abb9a83c3154fb3f90777d97ad0b601940b77de2c84180f9efc7f645439dc0aae9de82ea66953be5502047b0d9acc564987abc6180ae020519bca7d4371f2bb60fede123dc4a5fc2e6c2300f726bd19d25fdde5f3f54b06972a6fb1709ca58c53e801e999fc4a44e7e006fb0e993929005c3ece5983e519a160a342e5042087a58a00fad9fd230fa0fca238574004ee93f8164097de6f6d9de2e5db5ddbc5305ab04f491abba57e2ce48a87ce8899135d4ffafd166774e106937d4fe09f7a7d460068efa2e56089835138c725aa725c0fa0dea3de797e940f014c97ef0785d129b4a4b70a7d3e4d57881179036871ce0a1e993a05f0fd6c8a6ea14b81fcb2ea790f46246e7bf01d9af8085f1a3f7b8fdc7ae96c6786a264857f2d804b982aeea21af607498be053b17ab78f9ba25d16263904150223ecceca452893ffccf0942edf2006ae34aceb4be0bc8b5632fb4110b7d65523d7f52ea84ceb027ec254b7bfa2f7819f2ab0ed02f4ab81dfb088f07891f38231390b89244ea66ca60db4911acdb60fd783c49a18cb867767fa5d233d425957a00544a4302411db36c4a80cc483f604d48ca5040c503ecb0e83a098700b51071c40320552e7d309cfe4b57b38778c806ad6d1105bf8fc0deb37ba4a35730750bef82833420094d88e688c77f3c3afa37dc53822665b4bd79974d28b6113d4695b24935d6d8233825e2cfd1bd59d0f188e70b43ff5671a97f98606dee007977461e43fdf8b0b13f597748640ea9f679ab05ddb6643feec0a12763e08f20b4d9b9630558ee92b9eaef26eb15f54f2afe32cc01a913afffa355fdaa4927674cca59bd4b899d8dee815f72d732b8bdf8bff5a6626762836fcf9d6b3e092dd7de0aecb98d2516ce7dbf5955fbe61bdf1712f95d7e2b31bae743647228ee7d8dcd990f2eb53bb8cc08d8b173f2ddd7cf489d08d4227dd9fdf69f82d588ce987e12706daf5fcc88757fd3ff5cc4c0f1e2c9c45917bcc78599d7e7bb51a5b76aed0c6db9a469712f1bd06df35663b20539a0bda73fa6a9f02f3095c12d155ad976e98fe70dd58f0d836df1ba3cca3e7a9a70c2ba746fdc9db19e98bd4aa76c99b897719a72eafd05a94b110bf636f57e313ee3d203ab3a3a2a5e6be6885c8141e3290564b7d84faddf273838b27fabb92a0c7f62e93696bea81758574238953a783fa3c139426332413cd87597f9146ef3e5b4cfd17c72bb91f95afe8c3eaa86311518b94ef3b91bd89bc20ae7489d8302d62ccc1ad57f5032237b82da0a3d9ea156346d125f76dad106a359bea26062327f0a2c31c8ced32af8b662ddeeeed3c23b462af158adda6c717811af4e5eb19ba700ae9dde37a8e9d9fafa5f53f2376bd61f4af08e7abd87bea4f5974a785d156d944fd19712dc77bb4798dc3ad288f6a34b480bbc9af5b188bc19b70273909f27a319a357885c9bfe9b92ee9005cf583e39071fb0e6c559f57eee371edcd550991c514f47b4199cbee79115e76fcc7ed79f7b3d1f9313786d12459c8398bff12c1bdf05eee2c4bd6f7d1f684977a5f811ee7db66d7a7c0fa1174ffe3108cba0fa2de8f778c76482ec9439acdc050f28ffc6ce7a72b18ee9df1ace474bc2b87e10b0eecd8426bf0aa866f19212a0372f1c9935504abfa3e1bbb1a1fcb3405c83e439893205c6a0dd2ff91c3d837b6f655f0496732d98d5865a375a7da9fcb3f47537342ff25f1e853ac4bc42f87f5e3fdda2d45cd8f745c1d204d8f3e7abe5665a82ea7d454728405d11ccdf8ff171f167b19b05a0ebc1bb927e6ee38218b0e18a7def4966c07d5a81fe78f04c4937830bcfc2d6dd697cfbcd3de6d88115464f814ff57d2f95ed592efb23cecd26587cb952f99f105aec2021e9f847d363bd760311fe7ba863cd2f27cf6729bf80c677f7321fb1f5202538835f00beef703af2b54657eff4ae8710ec5ee316dcc2f5d9849fc13cb7dbdd4abc2c97ddc6e3abdcecdc8f0a56f705e3e7871394f6722d9cfa7f26cd1b7e01ff4406d8ca57d3db2f642e3567c23d377f8aba88f3ddd7f2b0a726e7968f777b1ec6b75179b66aef7ffe394e639a6d6747f7be07dc0288dfc9a1c5aae3a3d2de8aef787ca51cb1cff7ed0cd92bae77bdda8c4a3a77b4d52070f50740f1a8b831946e012f03660b3d68ad962c7a17a4e5023d7554f6e7b090ed0fdf851e0e3e774e9c6e4b83bb272a4e9409abaa3a0d04c0b94a7b08a1b112c2d60de0dd2df8a618d01f2cc145ae652e0a0741041290dacc74a2a52bd7d99ee1369fc526c50f2664d57b99f009d21bca53b32dee24cb60efbefa8398f2b479a1da64e0aaf92b84056d54ae79ad4641b26f49ad12e0733b873ef42ecda6bd8a41fa9c0ffd609ddff870237af788822f98aef7a85a8f5ad182dc0dbb733d8aa3e0e48dc7c256fabba10644858e06767dfdcfbb04db5a08896506564465d71b8b48fecc2e642ae9206da7e3f379d51bfcd9be60ca6e48c1f9ed8a43a9f36dc00f0ba6a4caaf27f509b528b06cc65538fe7c38a13f54ca6c0cf01762c539af353137581f88f70fb6497f1d191faeb6612b30ac0781bbd38de1bb63ec59ae8c502f4c123dcd8e619198fd3ced2330e5eca36d6c99e293a2a47fdd5c6ffacb9ea40d808496a978cee718dae13b2d6336fd7edd1aef12cdb4e3a1112b4a3275e6451c9acf7dc62553830bb49a088642f6e9f6012aca0b786e61cd55dc8f5b51333ca1711e19b20a8a59af49a4e26221a235e7e53a83e188549c38ba1cc58de1c109c59091a8ad4a871570ed4f39af5aa4fadfda605761fdd73a914308c23fe7bdf986387c7c9d5596502a166318ff2d25a373577c8399863ed172aabac5993f8b0d161e797e6e8962a511fd266feb8f9a323f2871f08a80d5572d2160f972103a59293fe2917713c09a3bf26e55cb0b93a12f425d903bc36aa2801ad1c25d264180fb365b51c0130e7a54cb4618a00e544c2ef91f0282f313048419caa137c75213b6b1d55916e8eccd55dd74a7f8ca6d32ee2cfcfe172714133cac83b28751b8d352cf88cc34d3f25b1a49eacfe6dcb59656fddef54995468ae1fa7301ecb44c87912558334aaa7d31d12861fd290318c5b1d076b477a3ea17c0055a9891a55ec7766d88157a068b1b41e27e045fbedc81a0303a2f01224375097ee17518679bff5b9ebb83958671050ae98e09bbd7136189999ffc0575a2fed1ab71f711e2cb89fd45be1658618b1e16cd2b107fb158479312aa543fc50ce5ed0854c0f71345640273e9ecf5070736a75f1fd9292f605b5e87316b73d3231104ff7977d8c6f002868193a34c688f81c92b9146d128919fabf01024b9ec4d37bba557ab07a4786b767e1b3484bcdcb6f8a021218058719c2a7296c103932971eda0c9a77130bb9ef68e013c15caeb801dae8654a4702465e9febcdd05000010bd200f181ce7785b6e5f62ae372a980c0da4b69a30e518dc576cdd2b9e682abf70500be24912592851a6006fe11f673a703e4cfda281409b9dca22af097a62001c23c92f7499ec9c82b4260593ea6bc16c9a4959b0022b83d45bc4101f54d7693e94b1144d341f4c7b51542a40c5aedb3e589629bda70b20197320996a0154b016d136b388c17c7e489486814772b5dc5c847786628f20c6fed7b4b38f271dfd8fc5eb2d26583dbda4801f86d1bb5c12547c992d9e0e2eb6db4e7034a5f54d9253ac18534f6f78910ea07b62de1adee02120ae9deeff4b8e9ad0e1e603d0a93f67c0415ac16dfcfb3bf20bc586f47ea0c098336fd376d46d1601bc98037233d7e180fb5d469e9f411c72b17ca53837f5220cb7784a8511fd4b92526c56df435a3884ad29a6286d6db16216b25bf2e15d88817a6e004069372e50b7b8fe5519aa6ddf2df17555a839122a6bc121ae4cc399dcb45c56af37e259d5299b2cfa25b23228c8891e6727d860863855e8ff2a7bbdc2dcf8fa32573960aa1beea7bf97a7c3bc8555cf376ee30b8aba1f1a514caf5156b2ca456a8a2d377c886972b2ab33685da9d40f4023ffab6b5c94f769ea297e5a749e17c520831fa52b4ba4e4c20a6c93de5ac2072670433b32c4d811d84553c0e74ad94d3c3ce9f9693fdfc6463b0e49cbabaea00df847bf17a270f96fee3ec416e625ae1c0b9bb01fae68db33fa5f3bf1fdba9be3ffaae5b5d3b51e10b3ddc5ba3aa631164acfe034390997a40c1203eb961c7a605a72679814556a9d190548728bcf21de68f9f8ef707fdcecd1ea2f061ff241e15fe4ddb85211eb8947b497b67cb0fd415bd9fb63a80367cb7047bcf2d799ec69d5e38131c437a3f816dcd09a4d961ebdcd70de68eb5ed949a91950451e8f3d274da48ef4f333d653fe4516cd3bd3ff48af63fe48eef48f8ee6b76d2ef3e67f3f1bcf4d9676ed261b6abed9d85ff9f8921aad98834bdbe36c64dbceb9264da95906118949106910de323db45e33919d5b7b3ef8dce6a4688788403dd2063d8a57169dd9db410b6487a2bef56a3c7761f7ca63a1417baa6dcc10da09789a9a18ac45e29e0b6f1eed402e7b21fce1c1bc50db7a19a72ee8ba8204ac3014df7beb789afb98720115edffc115ba67d61bb1a3fa6df229a3b37a1bcc29a59e71d184379a0ba259eeaafa55654a2f18df3d35375c47e5a705287f0d5c06478e1d77d45ee353ac529b93f8a9fbf38afa2bd03ba5cbfc34f007c65aa9106d952417ca8021af88cf214ee61db51ef8b7036c388b87c41a8ba41900849ba6c4666e1f9fb946bf2e651c709b5d1743b1077b7b996f55714187cde827897b40cf6793be35b24b821ed9bcdcb05651dc91cc20f84bafc2ded8b0cb90da0ad46d01271119ed5de63f4c9da20f7c451d3dd66d098e1de100cd6b1b79063c99f1a741e48855ac1f1673490b06721df53b492d72f4a4e8ea6326f174afe2e4e173998469df5d9063fcdbafa79070b4c67be51fd69ab0b76dd75ae0aa4fc674fa22a12d6fbad3f4541102810820911097d2c83f8e626b8f64925681526573cb33bcc2231c1514cc40f9c8f3ccf2aaeb50733d0168c7a9609b556c5241237e3b7a6d0bd3ff2120a555a22f11178eca47eec248e4ec2b165030451a83292008ffd9803ab2b3ed3be8c81d5b7f3bd86b8b6e2ecfb6703ebdad75e4aaba1d564b44efc5004ccc969ea30d9e0dcedc9dd698995528b3ff34c234c525c5faf21a73310fcfe4214ddb8c5eeb8d5beeae95002a9cc463f3ba6b0149d5e9f9b2dc90dd55197c8da92197c30553e4ddbac8e4c3024b4b6834d418e385b625b9cf5b61646a2ad24d30dc036e545dc2b3598fbe7e7bb6a0c549c5aa2cddd7e01fd01eeee8ad50767c89425d7c89cf5127b43678fde7affb368466120e11705eeb3a459a287e9a222552da8ef541787b517ed0524319512f6cc07670b6e14d959f214b2ad01bb281e6c43ab720e68478a0b8650cf906d3cc0b515756b1f5b58a66854c5aa7683f007445e073dc5670900cb5b0a77fa43f823b5a1918568d0b8280999ad85d1524912d4547780a875a3b1d695a9938d8fbbaa392ad087d3e894e87869c83d5f4054fb0b52010527f0efbee2948c9fac9f48d8f454f2280c37c15fb1969b8378f3d71640a94fff86a160a6e1573803acc25d1deab35bcbcec34a0a35260f22ea2b71b8ea723ea4a0501dfa7374eacb6e830a0c28781cb8e27bf8c66887e8afdbbd1f22de422be33642cefbada5d1b281f497dede8dff4a67ba2bef92ac8ebc740b028feb260f7a31e38ca660936701d1618ca9ec3f8cd7bf0156061b9795095a5706d79499f6a5c99c2863a12299f33dacc31659fb4e84f2e1c56197a80bcb0266637f2d160f09f8a5299ac1ff6ed0b7db2aeba0778294a9f43d7a71be10d2f91ece5b16fb7713e07926c89915ff4c7649e0721c92358d7de85fe7e2e63c9bc8576d1b4895d82e3ab91583c9654b33634d9574e27428c6a1fa3786ce0bcded222f4693fa4bd607b05ef716838cbfcdf2e23d626f80eecd7c72cd6d6c43dac638fa158d1f7b529f272f4369de0e2b2a0efda138e366e4467b6eba7a63ea348d2782d72589428c800fc3837a5e3d6b298f2c021832306dfdf6006b2a234f3e55af2b3cb9e56da15deee95b895fdd217ec537586c896314ceecaf2f4d0b1d93f1c31a2ea2047f7541c6251d599f7cb0d013d1a1deb349743aeae8f6f3de3e5071cbf53548c5d9413301a9b870cf9009915a1a7d53567e728dcb14b4f61a553775c6de26251a18285d197ca00de9ea98f808648576f7cc12fb91daaeb1e2bdb9534eebbb394a4c14ec5ecc0dce0ed177159a8bdde5a719197c8ad6f9f7ce01c1cd39471609fde8b4c0c821e4efadfe14cd334ddb69dcc398a216578710032043a54e58714cfc79b04c90edc2a33d505e46888f48bded0914abd04350f60b1209e6cdf21589bdf221587c82bca72870869d5def990ac02f9ea76babea2f99763121b3c6bf7394349b426afd0fd6e4a53dd4ae6170d59fa2c6b65cc0a269d29109b39b207db732800c3a0e406915393d158e8345fc55b0fe530de62f111da8d6bc1fbe18f9a34fbcee27f9f94722ea2b574d4389f7dadecb85622175f0c7525f5b6d2169cf327b6a2c452843f9bc58189d39241e46a9d090b7f15973d6061ada6ed1cde61fa73498ee3914bdc9e4a20497cdda8bb9bbcffdc6fef4e34e09ab7d86c1f250cbd4c44b6ea99ad936a361b3e4239d6a7331ec611943b6eb82bc0c2bad59178062fd322edc94f6852fa2aca6d00cc1261c20aaf59f1470d64eab2a4520fd9c18033c5a66ca74266fa287086c4ea31134748042714a0476d585b4d715a70947b04c5f561bb18313a90fb1ce0fd934685eab4177958c2a51260d486ceb8be79fdde72714bd243b7aaff4cc031e79a39ac650548abbb988129c079d7404ffd8949661446969ae0ec1f41fcea3150d4a56ab5de0b4c31985c08a7ea73f7cb6d94905499fc325a0c7d018d6a7d2b6c3bb5384896970b13fd5e9caf6c2f2a04fa9edc6fac77bd76eee01ea7c84f0344ec3c9faf2dd588ebc41e2fae4a7c88ef020dff9b6f148b54ae2d52839d8b078d7b90da00bc52b1dd20a415feeaefab19b47f4def0ff629cb34d11df26573dbe2f911fdd06ba4bea7dbab5554071d11fb27b32b08a20c555e9faed83df10c9ff80055f8591a23c800760a870c15c235e4e2766e7ee708c5650a535ce2c9ffad60d440fba27e64c7cc4ea59885d8da6f9a27a306274524506945628150d46afcbfd31b613b7a45312332d21aaa68d330d7a1d60bd383aad349e5efd673c8526e06688995e016916d5d01b7e1d54cef2b115128cca1a07ae2565c5ba96f785a0abe9c7755ed2ffadd4b2d6ed4599937e6e56fe6d36ff60a65dc36fa91d663b57f29b227ccea7e58954a770d4a15f0026db3f1dd2683014bb4eb6beafa3e6765df2e9517d27a26ef3fa111bb1575906d5e48a0b7c93c70014af50b337b8a685e5e9d7ec03c5977e887667fe15ea06f10ab7eca1b340d0e4521f3a5eccc7869c8999b232cd66eeb41a2c052fcfb29663bd36190b86a6e2a5587ad8325b229cee8a8f650229e89ad5b9e0a434d099108b1a78cf89ba587504f6c68413cf34e0b4f213de07cf15ccae99c98d0d33a96f93e805772805193e19902eac883e6facfba753f47eb4ee4177c2fe8515e21c7e42f3a6246cf212fc86c6b3ea9ec35f0632e64f0ac9cc27b4c75687782e22b9de522531f0fe47b53eb2b400ae4e7643f146c7956876ee7557ce3581067c31bb68020fd892384317879d74dcf0a13503e50f08922b4e9b8ca57bce2d99faa8a397ccad23094458c042bee9b2ee784b8b0a73d277166185322783e82c49b1063ff53276c2eed72d2f3abf54368a5823a81de340c12f13df22b3c90193f2d59b78ed0d0e92fe12809747688cb9dec475b0cce33d2ae8863db5917d238ab0e1a1b58d85668d328a20a1734d2ddcf3ddc48330d2a74e083aca910c0fdaa763c8476d29cea786b4410c82d2b20f90c191fdaf1e18fa64406ed974c63941907923a59045560963aba3f771b4fa9c8d9b332b64c0e68a48b54eed9aba48271f8c8efe8b51161cbffeb480b39c95d5603840ab06afc973226ba6a26143a72a1dde83d337a5a1187b799e5828bd6e5ffcede4085c0c5f115c1ef52c802dcc6296c5ff5fa6723ba4985cbdcf8358aa2caccd8ae4e7fca42e81a8e3a59e6e4c857ec91a2b56d1bac5c177281fc540a7cfd295f4b5a8ac2ff223822e86947ee5f3820c0e63f41381946092814058933c458012b9a8b97a0ebc87640bcc6a2fc66f03ed927271db1abf22431cf90f92c388c08cfdea635d40f0c91341d6c00f3e2ea49c90469d3829bcddf886c6a01f867f25c23f1ba9ea2517f36aaf5297600b713731e57934b79f3f0324904c8b9b1d63f5c323e0a9f126956bf073d20fb7c0fc62be8b45ba482392d1867fe08aee46d017b3817428cc8389c3324fdb9764f0a2c3132ebd024a306b2ae8371beeaefad5504e7e80bd3099309e036e03cca0ce5b915168d7efd0eb258da98dd37b4918cc858202537c6346d7c94fe58ae7496c8d9b00a66ce6ac612d28923d25f81d9718df9011c07da82275ccd814841b69f513281d13ec123ce9bb0769c47501dd1731c4fc015e5755f4237511a5454c204258b5551b670c0c24215aa06d82a5deb4d0b5632e29dd31059d4e303bfbedb01b19d0b2de79c7b877618836951ae0e94a14c48d73f75944190e4942e1ce768ecf7b56ba43f0a215a215e1824e90e895a414dc8046b8542772174f49219d25177ef7f231b48c6a373225aac4ca1f67163178c693f4927d3ed6cc870b7c5a915292d6af3ecca7f797037d7114e969cb8e7b164f6ec832978203e9c185ba049a839c5903601d15e3bf41411f4545392e64895586856d17422be06db9161f1f8e6d3bb259be7cb178176eaddbfb828d6e3807cd612d42255f9f920ed9cb22561e56721da038d12b767917fa56e06cfed833c93d2023d88fda04af4233c7e15fc8d6025158fb7b729b25cbb279352ef01ddecf63958e920ec1ed39dd5f702daae510a037984d7c092001fdd2cd980d0c72166ab18684c8fb1383d2b86fb93df6749705d74c16a234ce6aa7a9e48fb6fb3bcf88903b073b771ebf546cba1733e6980c974e4fab658c04c27d46b7000ef1fb2b3e8a6bb6fe5531877fb7e6bfe8e803bbfa991130a74a3176b13478d94d27b1694f3e97529ab7ae2281c4cf5bc30f98dc7e79a4d30def018035e5ec61b22fe3b16e0e13b289a5ebb55be793a6d364f429a8940286dc42f24fbe51673e6e4b198a9501e7f8fbc8e16e6a9f3d2c6bcf7759a019e16bf59310fd4bf777978c36ebf395ae3c78f6e6cd03aaab9f8dfe678b40c24626e8ba3710bd2c001f8b67c1eba7ee473ce957d2748dbe7b30bdb1a13b2763a26799992249df7b2470c12f85a6c19377728cde6369e0a5be560efda3c2e03e184135cb3422af368deb8de464ccccd8394a83dc9965ff51d97c54e618389213eac6d125f6b48d697acc9d94aa5edc541977647222d2ab23a95a444506c392cdc8adbe375f814aaa9825dcfa64984a0cbfe28a51cbe1d100d189d4e490a0bac542541703efeaeb2d92d46319fd11d37e8a8a6569c3bd52d83b5a12512d4d1262546e030276cca6d1b4af0bbcd781a9da296f57529336dbd5fa651088cb569f8f0bfa5c6b0abcbc3091bb9b81bb3cfa09c9449e103168bc1725c6ffc44e3de403a4c54b96e8df7ecaa727d8e3aa440a6ed633c27f2a584890f250624db024ff75b1886cf93f50a1ceaaaee1e7a4f365ef1bcf285611a3c8a921eccca6d3a2e885da67e06aa43d9f39f867e4b5090c388d269aaa08492bc2eeb55671db63e61c0ba8c8427c51342fe096cd3f01b1c93299d28d9556689fa4a2ec8b527e51af672db8512f3089f73eba707435263bf0daeb0ae1771c4d80f3ca608ba6098ff66ebd5c5dd875a51c75516e67407f362367dbaf4404eb9df058baef2bc54ca42310c1d864aecf016a571b8156c15156b1ce4024653ca8bd525fc616025a1e608713aa693433c4e0683a12612df66d7fc7b95887e7ec1beb59101b2ab1c04022daeda5f9df8b803949e945849744ef32f1aea2c5f207b7173ee33d16931c8583a7ed1201a8b6132ffc75a2250ca81b9fc752d49d3156dfafa0f928bd9e5697d5fc3981c54f60bab6bf3ff859367f7d4f6ca98fee21826bf0c3514edb8fbce9228e3d6986263b2bd1e08081e02beedbc96619798246f35552b8707c05e0fbe2e46757175efff0af8ddd5869162aa93aec8dd8206c08ef382218e6eae00e960ff498d31b2336306668188a9318828beebc3dc0870aaf6fdd84fedc14d617ddd27ec976e4663cf9844812f5a7cf6d6682be775c0bdab85b5aea58ea68bdb7217309e6ffdc0d2281d38ab4e4d2541ffaa308260d756358435515f5ccad55b7764e716ddda36dd2d183ae46a56310d56e92a2874f08c76ce4b8dd00ea96147c7a2385be28fa2234c1e821a8e3fc7151d274368d6512efebd2fb3a1cda278abc6774ae8e16ef8be939799eb6f2e5d7e6da4b2ba123e15b8bff6cf7be14aef8fed88d20ecf37d3e0e3bb6d149a11393379217b417ae178c2b5ddf45492c95107eb18577a2e093c40bf0742841509e0d11e534fe0a0ece80000b612b8de76c8d0b90661208c68fe01cc5c14ebb7a8bdb5cef283851d01dc0b2032762e51df534dba41bab2b4ba04d8b3705a3968d8e9849ad88435b5d1165296631d3722d8359539f5aaaa4c4bd273ee5140bdc7e40a475c1191bd2f65eae4617743d0013b9a0418cdaf27dd3d2e1dfae252dd4414560ee22498a3cc475f9bb318a5d98e7560da3541c4cb5a6fc458cd4a7cd3240569a55f33d7f129f7a297f102fc2eaf484dd9f6e5469ddc0542fc67c23d3194cec6888273236f1d6622b6b6f87b52da6f91cbff3d49d4d279db080c0a375f80d2e1ddd6d59127908d5391bcdf232830befcf7a83ff13b68b22455f9f9330b80c018011802bc5d91f3417dc67cb0a6779c9c7b6b247ee8a8338fff169d3343b3709422dbdcef307d2059c4e5e26be355265fd04f584c24a8ba958e8679baaa4d3f197aba0fb2dd35326154bde47a1a5620f87d88f33291169acd0b634429029971c0bbf8e500b133a25a59961a16529442c446549917c36f6842ac838704610429fce6a52c9e9859c8f5f23904e9c7bd9a3fce0584f4740b7901a7248a4b30bb6ea628a9b12b76c61d5d1a1177a3930599ca85235613c961899ce4f972a37a48b538e424f585174795d6fc329fb6aeca87d9c21faecfd0a3e24630c91437d38249db48fb9803dcf71152e48c3054db7e358c70f2ec0542c29ceacb0b96ec213c2b7abae3633e65d2cf68aef296b172d37695c19259430cb30cb4d0cc89d3cd87493d486a26583068fb8a1b494ba1cbc9acc9388370b93557f66ab4e810814392fe2d5d997c6ba66c29a3e6b36fb1ff9862ee0b31d695dcae1f895072b84fd2bbe7ced22544cef0d92666b7d82b038d37e504e901823f9e0335f9e8b3520b756c8f31bf281e53ea938ef5b351ed0c41053fd1c1e82b5acf46a6bb02c1a450461fa0bd295446e4d727e4111de5e1787e7ab420a92777cb8ec5580522bede20c0ebdc39eded15c6c0771c2d32cca597c3b8e9387d531827477332652da4099024c072bb32e5c34b78eac1d5a775d472b0c7d40bf6c35889bcdec27e8272d593f3e24c4d3fdbe722dd069970a230d995c068c012a2550818a7a1165c6015d124b796216046b7a81630efb1ddf7e8cb3503e86ceba90bb34bd689d396756823cff41aa6e902744af8ebb1ee906e1676864b69337155e25d144dbfb44212d1bb11fcc2fadbe38aa56189d337965e606b0a641863e59723d8a420db493026890b9b7b36bf4b960ae9131431fccb80938de00d8a415e66f4cca967edd431f11db5185d1037fa55b061772b47076437499272a9e81f83089ae77ce5f78f0de74ff5471f2fb366d316f9dcdfd544a42c1c0c6f90ae0ef23e419ff156d28aa74dd3a6ed43e294f4ef250d5e8f77341972c991657f5482c54d2c8d41ebeebd8e7ff131152af6072ff6f121ee227dc6b987551ae02337f1f1b555fefae2d38db08cc85f3ff94b4b0b9666ba1cb42d8fc6469c5db6c6d7557e716b7da4d223aaf6d0b3045d7a578e679a4d551739c10339e9b0a701db34acaf308e2a289efd44d0611a9116cc40480e29b1cc067d9218e2db5b29599d66a1b3193335619007cb42aab788711a6b747764a4e5f4c9b72d465f64c9a92a1d8365ed6444029a245dd0817207148b4fb512da94f2fb8dbb23204d8be0805f592c5c6b7d528673ff2b23fb100ec847ac85ca08940b548bd1dd81c491d83c125e461dd5dc1e58b48ed9f2dcb4781bc22c6a8150261b1737152b9b4c250fe6f9f1f2c66a75d3bed3bf158260db44d6046887b52e679d6e48db6e0f15852e4d133221b6aea21969c3122f3bf78c7fc5337182d02da8bdc74d8320e3d02bdcb864d2edc4284d3bdd1e11c024464b14c31730f0e6e3078f34603271aa57ceebdf351d42f8c999708496944dda73b6ddff1f6b12dbea82b14d951fb9a07db0b88f30db28c76913d7575afb9a6624afe2008776a9b2c8ddd9248fca0f7eb12a759ab360e3c8f1955e10b91dcf5fca47f673dcd80a04e0d2b3a75c645e1940964b4bb9c1a674869cc4669fc9e7852ba66a8442eea9227fb2057f74b1d48575c642a2639db78afa2f7d25b41ee765882c6a26640fd1c3330e8779a7c03b42e353da451f727d76a301f9ecae06a987985530ab82988f21bb7ea26c8bc521bf99a2b4e1c3c53bf475250bd387d9bc653f481d3a9b1e7600db89924c1b0c69b44e3ae694d8af2b27ae3943c9043840b0caf8b1347e9cea42405669baeb2b7a40f7698a5e2d5d396271af48f75c4db736b349e8eb7dc5a33ecacf7daadf28574345fa4a239a5e8359fb2b33dbfdc5b57d836035721b2557dc3e3b63ee12bce9a9be20a9133b7b1aaec93598f5def3467be60c15683ed591caee35101cb78f81ec1402877769aa37cbb98e2e1f2e7b5872d56776b7cf7457b6d81519a4eb0ca59902b6cbd7f451de68093febfd18348db81d66ac5a11059d03224b0f38ddb3e8c7b4670fc0a79daa6284a2161099e7ce107c6fad12f29c52cffb64787b32f4303a2567eb72a6a0785d691045090fcb9833b30a2aaf56fd092f53bda675de0f301f2d8552b5e9479b35501b4eac2d9525cfa3392be1988bb5ffce30b04c7c4ca305e13df0f383534afc75a00c4c5e0496feba017231522d8f6e8c04a5e303bd6eeddfd57b4ff211ba51412392fdb827f53060cc996af53b703ea99059e5b3f4c3619777ad9c6aa2cbf8dead4291e862f24b590b6f8d21f3d1a19c9333b7c78253ffec9270d67d590f906ac88664c75c27fe176d15db17c77c34566c3c81ef75ad2bbb51be00799f5f365317ee029cd70c5d987a94310050c44a7991b48e19f94fe1baab16446032a5bde50db3ffe8ebb5f458f848f925a280d2c951cc2946bad90a8330e6032e12e0dd401d5b22bfb428c0caf32c256ea34e95670eb1fc4fdfaa7b2900e36b4c534a4d41bb9889617524f72fedc65c46c816a0beb0c7365c76cc5f8a12c64b34539cf35dd57d06f218f0667eaae4f8000a961a66c586764aa3cdcc041525d21c6cc64a9d61cdb25afcd9137a4a426c88ed1842398b48f11e667fdacb474fc7d55d9a026d0808cf686949e774181e87b7d4c8dfe2742724510b3600669c5763a3170fe060204498dfd8d7abedef226b0121894979d0a15c3584b9a70d60937485e468773b11e9594c2d24b1420f7a96b7a82777e50a6b2009f5423b5705a57480a263edc2c8b0d7cf0d47c7e88513ddf4201d8615abd5bc8062460f05e5c5acafc484d3591a1acc04b8b639d42165bb9887890c6db20b6779b539419f8232d2a1a29ba936a6024693782f4e8a911db7491b0dca514c2a2d4b90464b0281f28a04b838dd5fcc7ed0a330dc17c98cc1a611b5eb0fd1a778b6f701b74aa536799836f558970e5570b0096432b8fad3432b5f010cc21378973429b25fac444f0f28b6ab8330f35b344d43fee1834d4c77075ba9597a7fcd2d2c1bb3d307163dce48df084cac97f82aa51c251b088dfb76d1d51fbd6020d7cf13f5c282455677ee404abeafe2c58ae0da88eda829571784f3f9b1771b48291d8fd9c25c6f2a7b71535baffb30964174b060fbf481647c2c9057fa763f54e2a01307778e28d250ec3e085cc9d79c1ede28f82cb50f79751bf7ea953c83ed4837c5bdee432bb5e3d329c73d90bffb460053395a63835e1d169282c74d8e9734d6547c29b1fc93ad4aa957b9ccfd9b6df7ae792070523b785a4206c1c8825fb9c4453aa432b9ddc6e002a2b3d3521cd8f28bc08349f5bb57be2eee73dda0c93c51b9dcd33ee27843dbcbe84fefcee19d8ed1d4384610e127cb20ef77cf871e95a54007b50cbe36fa51f75388966630cc4532e01e56fc6b383bd922fbeccb39049180488ed939a0d0e35edc61d5deadac5fb74eb3ee4c7ce5a649231cc2f44acfd13af6d8e9941a311c8cdb58058cdceb05ff3cb2f2ca452cc59e85565c5e57f73d648c0af7398ebecff07dd0c11332cfbee5c6f2079dc8b622de40be779ad811b2ee669dcf521e858d2404da0fae9d7119c09904954736e52303336285810f956a0f09ea3c16b0f8d46410e1f77cd2c51e2267c76ed6a369ae03174b985452d75aa07baad0fdc463f0d0c7eec839e8049757c7039b7eea4d52a4f8e99954afb2c57a704ab4cd678f37b084f101ca5e0d329df6f698029ab6f22654ef794d24c978dda354ca3ac36b05fe3393976376037b3d6bef2690e3475b05cf6129afd79e2d6886302dc970018c99ac775d762cb85845f41ecfc311854946f4fdbe237d3936d85b34f4e8efaff5f3d86287c70e88fb051dcc8be8076f8ca180c237aa75085a822bb69a78f39405c1c58cf82e6fa2ef5116e010f29d77b93e50ad8f0a8ce207a35d108398aa8a78db2cfb303563771fe1156a2e4aee3ee966794205589a0b124509f90a30319844d777fd6e9b20ce41e02f4eb943a4bcc92d14071df0a076278dfb6ba80df16d74de1dcb5df5923e10f1abf7085411d416b3d22512cc2c7fe134cc716df68a4d243e235d14eaa971c6027d9ecfa72c2d0d85ff3ee14e0cb6e1bbe253a869f978388a85c3bb6f960b0fa1b8ee82b28bd44bff9a536d36f452e02b4f8edf34b9f4dceb189d31913bad94293c3ada9301dcd1919a6625544fdbf6ed320d5e6366c8bee7cf1c83782404c453d6f92801c1eef1b027bad45024e5d0c995a0a0301f83d2fcc914d98b37802b182881abb36666025ed424148f070cdc2adc86220ad8b1fb6a36ce3dd676482782c5ab057a97c4e5f7081483ab94dff867d9edf0535c96c09143d6d5a5ca02bfa2825bea39933dffe8bc285dacac7d893ed51825e688b80704d5ddac3708320f9982fe81a20fe7fbbc8f5ba92c8df57dc1ea8a31292ddae38b61dd037d1d20ab0b5c60508303a6727d393fc0af682a6cfc78c9d46ecd28d960c1ecc493567b001e0be500dd9111ea258bb53168718b1061663551b6794f85d80954f4ceca7d6db6506cf772ccf36d1018bdd386df2077480104a3b3077fa9932e0ebc405119b0745b057d7d0e269359d9d3f6329bd72b90263141114e2e27db6723cc7c0416d7ba5350dee2c77cc9e18df3d3f33b110581c5e4b13360f4b5b561eb0ddbb0349cd3a2541c9d4906fa8d7cff1a12d74909241a7f43548ee1bd32a3981b6b940e189f713ead54b5f1023eadbc82c8f2a27cdf0a31ef63c0edab633847d2d7a40f39f1d758b44bae6bc30c846cb4ec66266ee73a9a83798b2f3367c810636baf605534020a27afdebe4e196ad189c65bdb1b72f07eefa177980960f1a00c167d15924bb8aa8d21466268ee3483f9302df72b5b2bba25f74fa894b2fd7fc8c4c927307ed15eeb42a96008ecb4543baec399d5bf914adfd31ac614a2d1e89b71d4748fb3fcff39dda5e02c5c13ac7b6a2d57a721661ffb69d4ac75804e3f62cc980b8af21dc1b97862a74045c51e391eca2f4ea206b55ea93b2b69c3b07e32ef952bd4788afa5b5c4be7eb0c31a6a81ca2493c99130ff60804da6e061166fe59e2ab804370d1ee50d7a022b75d7d564a322c6561c6c28c9acdaf573f242a16917be3cb7662cb6da797aa530c006552c274e35e10e3688cb662df4a4a52e568f49c5b5f6f0f4b8e4af7b7c1ec3751e2560d7c152d9fe5c7f618046dc17845b791018dc1ae80f8d1beeba5cac859cf906ed73812da93f3a71d2b11939cce85aeb99665fcbd21ae77d1214aff47c506919bef0632174769514f1529e7905362f4cd66321e814548f46f34d2db076b6de1993950f033259292656206f535bda859f42ec071a89c371dd0ca404172b7500dc1918d175e3d33a604c795d1fe7c19427b9a89729a0b55c0cc1cef3f0c67adcb96c2477d21a77e5c2a77025f99713699ae16fc28f3175062030645644da78961f32b7c61066d05d7f60d1150acb4beed4f213baf53e2441b2d413806b872aa8eb75e0a74169d01d1e87738d408f5e33a0935dc6b49fea4c7efeb0f9644970aa3fb9659678b93306735f7b874062479e83071fb95a8125b1b3f1d44b2488362a52f054fb766615cb609c448bc2c10803eefc4f9e83cf8f9cf6fee52e3cd328e332e25bda807eb4c81f27369ed416a84fc7e208021f818c44c410570662147602cf86ede7ae53ad22fdc11eaa998ae38c995c2b84510770284994f1e8423076ef5a55db140cd0df8f34f1da8eb2c971b880414c1d3926594722c0d2e0d1406c7b5af844fa94e4a305e2d52f5d86b341a06ecb90ce03013abf744615edf1b10b16b86efd49da3f6f02e693d3f6ff4de58af540a358951c84a5d18e6d46f4c8851782c693fc1dc4ddad029986c785b4d1a8c78b70323194ec8a7fe7417bb56a49b9344d729a83385926515f1e335ad4bd6212fdbc28f5b2ee3563ac498ac0dd899f1cccdf50739415fc6727a67fa5ac53b36c0da80a684c8b0b827816b511ee7f8d032b95d627af8696545b0eda45bec6bcdc10626c98a18e443f60d5ea6820425acddf83a948ef9bec579a1b41d3cc33b5a356157d043c46e8160b3f055487cb8c9a9a21812309a4f05b666e396a16f0f998d58f3e9c9b2a789a0281ea99ad439afd27f713b0f9601b17cc4cc7f4fa2fb33d5073d820321ed8d281701c06c5219fbd42a682a91a3e1e3adea53d7f7f93ef41e661abe1fed033f0b26d6d0aaae4948870ce2bec4f7f40f65318ccee3f9bdbf78d474e89cb3c4b1de4f4bc036d24ba5bd4dbcdf845bc232c9ad965324e7bffb81187030618baf3871c9b2fad9da750e0db9107ef2bc11f00982bcfa7c657fa1b33e95e53bce5b7d8747f8b02adecebb7c166640a72b4b86499ec3623b8b70b082d75f5f86d6807385f2004c872b4da59794228b78f16a09c47171bc7f71e714cdf22a421a11f52a411f77bbaebe34759fa5acc8c545342f43b2b3b7680b807e00f143ee1bbf684466f77a63497b1ac85d95d0a2ae0d01fe613b04f465fbbdf8efddc86dc0296eb4f5597b9dddc91e9c4516c5099b5c8c749f7aa224f8ced0d74f3116ae95747762eab1a6fb9c219b08a5b42359fad8f6ae14d59c33d53beb710fa44ef4d3865710bcd043b7cd05a01b15cfc29f24d0fa39b9d0868e50c4927dcb2275c8daa74e2a3fb2ad16484f625c57788bf0efd8d2d222eb2c8973459318306e85be810c3c1f2b07f68b67a5aefac93127d3528d1511b4d7c48940482ff59c4924de90163207b3d28b46aa46bf5a9f9c6ff16b8737e40eba33f84f481209fa955aa9e3badc164da4ff5941f249343440e1cd2a58e5300017693c73e4adc1d6127b24077c72562607e7da3844791cffbfed49a61423e4c6abedf5c0f34f928f3c72d66ce54b1121c58a266590fdd5e1354794751bb6457afa2cb34600587caede5c8572dd8409affd03d9ac7e7b747de1748d3a6b7651ffab5b7facdb69e17284f901e6b20c8d929bbc806a731f0f0a169e89ab366bf011bbea2c68a3ce25f793e7b9f53b59d1b34d7131f52747abca454b483eb4e334919604c8a2f372dbe4828c185407425b9f3d72a413ccf68b838859775ced7e1c48e19b714316cd7a60f3d7277d30894a4bf7cb888fb5c118ed46c41c2ec6019fb5e00f80726a858d961d76951d76e39172c7962b30258125c7eb3dd3c0583ab755ef99999e38f3287683f896e361abb555461a5c9cd2055bd3aad8021f0f6e012a05be0a48552f9cf2e577dc830b38313d40936526fe731020dba11abc7321b40acd39b84243433c72ea84ccaeafcc2327dd1eb280da4c769a63c9a027373f8f539501c9c7444b906442d5bc8c1940ae8fbaee3423e6fa5c00d2396c9aeaceffa2987d827c0e9acdfcccecff087fa503c881a9a8884ce2735f417b7254a8645725b09bc13a1d9b24f1c0eaab879772f472d165ae9e4eab009d71fe0b15ae1ab5076d14de3f78f9c72813d868a56111e34a88d57e75814cce697b7d0a8c3b2df5a6d0847e619b05f734891434b8022ff9804086a841cff306b766bb0f8f20cdca4bea6d5c30b58e8820307382f87eedfa6333c97c17ced39ec4deb0b22240fe9ec24ff8d14dcce80b82d63be9aad8bea21dda8a19dfc930d61382f0b3b335f27b9eb8de9e290f34e0b76f1262c9b97a282447afb7f91894898e5929e0e21962cf34813009c89db099d111183dcdcf425a23843f59f0e80e2e1787fb603d4101e3c225bf80b183eab0769d92391c72ce950f530e5b942bba40896743a16b8a762e85501744ca1e3f3219bfe86705ab271da8afe1116a3ec3c6071b1ad5dd3d3ea23249b076be32a558a1296d49399943182643ab6e1449c79b313d26b78880bfbbfdf3cde4f6fc424bf45bc02259f82b59657f4c0074bc957d1e607f8f76b9aa3a25ac2ebaf34639deeff0cc8dc3d8cb84d55993006fe1d91dcf4f3cd056f14d0d41dceade4a1fc0bfb8dae35a700a7366ee738277a0572f5818f763482c428f6eb3efb91970913b27b2d8a14ec47c4cc083feb7db4e91c507ae9194977b89e61c6085e4846d24fb09ac2024530026003d8ed9c794d71d24532a551c321dfa21c2234549725548cc7be7d4162f6432d75b8744a2437542ed61c0a10a71ad9503752a2c2ed2379d08d22fd25d2b36ae420da7ad39cbfe18a6c2c92fa1b249a6d0de7c6f1ba14bc2bc53eae17115009e4384433725aa5312efed7016dd5b1e109e4074908ec16d300b00fdab6f48ca61c73712ad0cb967f67762d0f3075ca99d662989cbb2e71a24ec89b10d1101e34038e588e7b0f30aed89285b3497a18197fa2a6c0dac15379f81eb8ebcafbbf82e674e614081384ccfaf0452789351b9b00c13ab0e2ee63f13804607d816bbdbf0109cec1fd58fd69187ed68ba5af312dfe1084929f666ae35c6e92979c0233b94f2c175ae64eafe4b4dfcfd450068c662222f05116b6af97e1f99c55ead93c8b67633e60b37c0ae0276e1fccffd7a6d821e3551e663f6cd10cf7284d99c731e46f23d06cb92c6020df0c91ff0ea7ea5c55ebdaada1a08b0ee9435ecc0d93eb3fc485eb7822ad6f3c11855fdb3635b2723f15085fd60abfbecc4f4d5928bf928d5d3d4765b7ddaced290042e5ab0543b05542509bc84d98e831a99e65d4385506d49646b230912027deeb30851220e474864ada703ff6313417a1a8f36a34a9b39d8ec135235752371f330af51ca048fd829c6b52cc073611e350e291c92a7fb09122e2287f7cd092e338ce3da5c78701a6d41594d34fb4a353303a90d6a7ee50b99d51478a17b1159fceece9e9793c8738f27081044348d1979103d6ff7738bcda2b21b4b37902a04ef854fd77b2889907eb51e801d6678593daf00ed8c1d65ab98754ff0286c0db60db640c24c8f87aeda7eeee922b0d4cbc0b9ffb1669426c49f58e794f641cf22097e7dceeb98fd8c08be1b30c561b7482085312d2db1171407fd63c332be23da6496458bef58748f7dd4d848b5969d67df2a933be60ef1539c2d0eca722b01ce565ed1b8c2cbbf13e5b1f247938eac71d5d18a8690e290495b5a68f9ebef981916e5d54531e8e78542427d9c4c3cf669155424951507f55268c7bdf2e7fd56c02897f5203d5f8100c925366feaf615a4f54246f1d43c24ecde93cbc72dbf255fe8d56d73071959a8bf6af44941f54581f761163a99b9be19f988b682df467e91c9f502a613767eec9b9c39d46830c904919667d95aa67bd12492652fa318cffbce5510475acffb91561b4c06b1ee549e68c7e8a4c22be3986c348ec3793b4351050f8991556e3716c9cf717a34874b05cf149cffdd2491cc1a85356f111ecc69cc553ae1f030f10bd22d56dc49cce8270543c31cd258f0bd59d9964dea2c5f07712b12921f9312a6f0ef10958244ef017e08c511c1b703136cfff641487ba1ee70537495955affd0997e5e5025b9be39a20caa50cf7bbf9bf024c0da5f4336c64b6ad0a94c4f4f01d50fb6ecb6c81eb53f431dbde755f0d93bf2607b6da5ee94219da6bd20f17d91ba254774e4ae1270ee68d99a269d58b45296f76ff4497a52052a64b51b39f970e01ff04abd1b603e827b195d6dea562c629d9e605cfd1ca9c3e69454022ec4c748c6ca3ddb6657d5fbd9fe85640d94bb6180130c022fdf0a0d37803b9356deaf152961997b407cb69463e7d5f5cfe4ef9494eae4a75838aff584810a3ffdb8ec86fd2f3742deb2647902cce15ec8387e0cab861a2e950a60e1db6832409759c228e01ca038296ccba800fc52bcffbad7e4a8ed0b1a35297cf6c96f4964c9b9ee7ecc2267f1c62397f7042c02c30d3db8d508c57a92e4b53b7cf1f1cd1915af013c20a5d7724dad91f1ef0f468e93641f8483006853eb791de08041fe04b20df3b1ec4a5c4140973337214972e8c2f268580ff612060283c823d6cbea0a95f62d2aafb27f597ba6cb0d868a3ff05ed97489eeac41f1a4f807ee3416f27cebfaab96653d769f3f455169ccd75d0803740df15c069657b6601ad0b257d891266bde2da98d622734fae536b1a36c61238c8de8685054fda079d17425417ca186737bece575566a9b605d8cc5ebd6663790905a005b3422959a58ac507c2e3bce5aabe6cf40cacc4479eadb20b6c82ec68add34fec0c8d66bbfb9abf0bf258d89d5edc930a7003ebdd711565322e1f1ad5500cf881fbc518235f2a5f6f7bf18fd66939809687331c17924a6aa8914f8c09c7a3a42ee78c629bd6142de1fe72c4796e89c25412e1116ea76e7021d241905ddb326c9f4980bad57f1d40e730e7c72b40efb0f918de0b240b81be6ff54bf7cf90ba67f33d7940e093b7b6e1fe87879ed6f297ea636f7a7267bdcfdb887d384dfaab1d5663a15603374e7f18c89ef0e5d81948215f91769a6f8ed77bcdeedf10ecb539ecf1cb4467f818feda27755fe9c49834909bebeb8f1c6a4b9a1a2fe60f2da585319f1d63a5295e631961ec98e8e710414c0324335d54ab49977c616c64136f9ad9eff427e3ba1e2df1986d35a4172c18d2ac46a5c61675ff5dfb3cfe4af663cdaa84c4e47b6ec26970c6f6f39c442625b4b5fe12bdb7d68b067b35d48ece30107839e3b2d91812d6f94cf133dcfa31a6977037430ea7f9f02c5e1dc1376fa9810fcfeccf810d9c0aa849e14065e6413d50a50522c047e9a9e05aaecd3a55bfcd88a3d4b7b897059c220d978e583ee96df06dfa283d9b49474da94ec0e4d4b72728e3971ff3ea8eec9dcb8334a9dcb00c90c5faafa86a15806b7ff79829a8fc87b7c4aa10f666095aab081551f9fd33949f7768be0778c2d1a5181ede5df21cdcde5f05e6f11ea460f1999bfefa592fbe5a372217fc79b216e1f9ec70b31d5788550d5b713cd59877690c217ed4dd0c2ca9c8f3352e0f5ee94c662c239acb2d1fc620a02a858e7dd5c9390bb44204012d40acce137f4b55e541b66a23ed722bc9826222382c2142ef3d932aaa1f2bf0726942f46cc838dacc25bba330dde7d3c1410eee8d50a4ba4ac1a403cea65f280995508bfa56c1088d06d17d2951e82cf7f840240fed2c96e26fb9c381b54b027c1ab7ce2e89845aff8eeafe787ae41c327f1a51602ea926231a86cc71f7ad6ac67934f336a5b197ef805ef40d4b9398a89ef52ce183ba42cfcc3f7d42be680dbc0faab4f74e9cad12fe57432febb2f64eba492213ff48b13bf3c3e328327a6d6879abf181f8024960a16c21889a274e93e9c0d66cd5bb550dc635cdd10fc39de0f0ed20f962a5b9d4935eb71acdf86b3f54ac14740363fdc7da510b62ff4bb669751126cd0ee53b79a34df76de2f0dd1bdec3d92163043c76bbd3b409cf6478b2b320044ab6476b2b8b97ef934ed3245503dd6ed3bcea100c0236b17c448517a4792f29feba0a4f94f244178393794172cb6cf2f0f0f607ee37301633ef7a51c2c8c2aa1b9cacc2fa82b7b9b4f84b567a38015e7b39897283641d83c2da33630a8bd7ee96edfe6716f131dd6f20ef32e283af4d0e3dc2578c46fe8581fc39d4f5b1fc93f7a6452c2542eea50c333cdb09023ff9e89738ca31ef78e13dbeaf65b08bdbee00ed5b34ab57cfaac42554d2ba4b76b561fca3cffb1bdf0d20f3ae0d0639f0b6b3297494c7627990bf18088e3170ef07eff1e25021a8bd3f375a5ce6fa059955849470d584b8f0cb0c564cc3ab24f46b61caa40c53b298790ffac643907e7f557d4176afe4bd864aa7e0a18bb66a75e88758f621a412370c7ec9c02df89e91675407ace814663b0ae96e6dc420914af7c700bf813ba84a717d5baf039c445fbaaa3ce066b6b3f7bbe888abe08e2162d3988ab650461e1a00ee1944ae62348b91ee7dbe43882c04e1952b9a2a6b8c1fea5cb513db64cc755b5c1f4bec73458e23b34ae58a7773feee5b8319f02f820fc6808c23fc80cd916a417c4ea5ff1b64c61ea83b0fdb1f705eea169336da352aff076e32743e9101f0a5fe02acdaa14d79f6a51767b5b7df240fef9d7abe41dda8d08435eefebc08c50f468bd036fd5d46f9d9bc8ccffe61a713d0801a34e13e5a35cd593d7ee83ec55ce5feaf940d3664115cf4b550649591c8b7a99e98155dcff2a4e422fce5e176a408f11ee0f12b727e4622e7464c7891c1c16872220b135fa67667781bc282ccd5e0cffea919ad0e14164288d42f3a726cf5e9637780cd27060e8b7adf54c7866f19290be952361206129d4905760f14b8efc72c0d31af3dad882abbcf50c1cfd0aebe012f4c89179affac055bbbb754c596282687282ec30050ef66d3ead3d76cabd3d0094d254a328348f0ecf7cfa07e37cac4d293d6784cf5fb4b90fcc9ed4af83c7bccfe60963bac407e8ae62aabca722c29f47ae2f734eacd975705c5724ea09e65d22fe76b2678d2a04e4d9e89fc05cca56393ea2ea2e6aa287e20283d77b1d439671f362fde10cee259d529021a8e75f961cef3dfb91bf82ee97e6a9876dd609414f7501948406eb36e7484b14da96e3d2246e2372a3d9d0d7761ec8e71f755c87ea12d2baed9c3c1eddcf2fb02472e779bb5eaaa2999b2b9eb43acd123e89288518912f9cdd1996bffc075c6ef142408d63923d2bb3b24a2e22dba4b87443da18f647815d8e8bebf90da410004f4278d9d06c860d8f2878d6d75c0c6863882d20941d2e03d31f3a32bbba7299a95bad910fc0bd5294d5144ae27135d1b0e158b51cac2db3ef4fbb383a5a1793a6456db6607c9ba6ea727241c639fce7888df46a9e0b37d0a688fbf14ff1259c777d1354317a5f2992fb390d56133b99b1190c98c14e4864922a118e398a17099c1ed93beb9795546193cb21075593a1942dbe10f7657a1d1d3ccb3a1ec89fdfdf1f1e82f8ec93897d5bc4b4f4a3c2afc7050c77c55a8ef2dcb935b6518252e0c1687850bb55a654833ef6d46db0330387af6f5decd83a0e0590aad8a2a50414523a460984d43bdbe1be57b891cf1e9a2625658a1b37abb783661bcc39a52c09852b4599cc71c43b00661024f7099e2268e58043319e5d7435b52ea26db570d31211248096388f5d2846f995f42f49bb1303c7d62703d196659d41a0ff01c2037f372dacddc8693aa23ffcf9d39353ca687fe8850f1e9570412428765ca115579fecba1a9ddfca283f8bd29a14dd7b8698e710b07138354229e6898c231cb6db5000e71ef2e67a1f14d64227f732ba5958a0d686987143b0a4b63472c346afb38d9166b91f79731fd482559db0ca4e402078557ba15a429a6e42c4f4f791fd7e20cc3ec18bb8c71e9eb61d22ee8112785af0546d418a8e42e023cb8b09ab4d27b964e3d9227d40d8025e86e4c1c124f928910a304c19954eb7959179e5b57d3df95832c25d5de473f87b298739f8bf7c24c068b1ad314187d566671630fb83d0ae50a45f627bbb768744f6215a17518e5b86a2b5fbf044021ad25e586504c93d4704810a727f14a2a6372ff801ffe81af20fccea2de81a68e2c201fbde25fc6d9bc1b1ac244b5dcad3dd913978527dafdfda0af593e1ab1ab7cdbd8a8a61800e2135d329f755b55af72c30c1339f335bba96186d6c3bdbf7bbe328a3f3d4309da9036885d2ffd69206dac98956df0f783e894a812b25b7411bbf8bc962875b70644d9949960afeb54c98bca0501b83c73b8f29b58fd85f1e87ef955eb18468199d659e528078b7b3106f47aee9e66de874a8b4740b68b2a5c5bf50deefa8bee49a4f3e8b8683e128877e4d67d0de1d3f9516b30b0e7732c449498e285ded01823baa99917fb988521a9f1fbefc2fde97dd417e9dee8c26723a4a176c54292037d073a6ab01bcec292c66890c6db72f4d646d56b42991b1ccdc4c67c448f659e90885c8327d9896d3064203e066e853f5319ea95e8786735ce6b8af51c9e8fe0bb5ec940ed9bfbf1a2de31988bf4cb79eadff27171f01bfd1bb7ee66c57c8ec9192c061b9f295f726310271700124050cd40aec0aed38f656862082c346366a1e5a4958feeb6e87be81bfbf5bf776a6984e17e34a6bb2817189726a2d979132289589c6a0d942a0bfc67a8c7f2b920d35bb939b03e909033f4d974d56d19abcaca086e86ad30a3e7c7c81d42dbe9fa6b3301299f2ff5cdfab10a72a1b998c7ceb6a2463a3c71fe2c905c0b0f515f8e5d1d64821b302492d4b6b026398792d8d440ed7fd9812865a98e44f210483c40afec764240d643a56bf4da0356506bcd36450a0d75c631faee3e9273e45e04c1a28f347f0d5e8302f9eaffc5c7346f6773e916502e400f5e59e98101eb9c5dcca6921b74ba5ec1a485b6932b6f53725eaed384f62da05791772ca71d720a20565b1372288c2486e25a543b2eefaff000308a1ba6dead35e4d7de84f2819fe0ec876298c2705ced5b6e41f87f6c192ec7597b1a2644faa40f2d43edc9337298e51968328a04e226ca6839549e97669fbe0fc957e119ff341067e42365c7b47c178e3ebec6909d65155e062263fa922421bff99ea18659b5a16938f7d48b7275616421dc5f7bdbef92f5330dda9ae433bfb508655169f2e62b597ae003d194b591110fb7ff44765b8bedc1d3811e0a10f2e97b5a29a9b6c7de2756238a024163b6d4767b28ee7a6da5b209d0f3d52bed2714c8d1cd909afbe7c46db126636f5715f7ea3c6ae80cfa012710c4165635ec595dc3c80c8a1a209fc234e2d9beb73c22f420c1a2e2e8075b1d4500d41e5ff40f038360f57cfc4270465abe53784caa9c8f220ae2b10136673894810afa534d6cc61c950373d064892338e4500676da03f3971f02511f2a1428769dc90de72769ab374325341874ad0bd52b260511f0e93b619bf7dc9bc4cd14558fbe8530a558242e4660e078dcd7e4899dda87d49b24befce90efcd4822cd73f1994088c9044f2b4f828cc94bbdc8914a2bfd5b175614367bdfd4f3e38f65c10c954301b58b005f2ea756fef1f275f2f56e862cbeb2578afe5faa9ca1678568d32a301ed0a57d7ae5befe5fbe214b5573fea1767435d6ec5a9d3912b4c7bc7506951aa79b9e96ebd2db9a2c805ebc7267132e42b7ef4710bec94433cc0e9c0f377d52e66669ce47f52620134256db93144b2018c745a778f1a4cd249d94a5c7abcda5f00022ed6c9dc0b6b1951db0adb6d40990f6dd23cb361d33b2270d24cfa6e9e58cac163d0353813614bc5de3eda6a683642d9d166bd76ea0797bf12270e1a42a3b18ae4ef90129d5ae0eb359d55db97fb29c8f7fac997c376ebcf0bad63afa1eacdd9c89c59176b2d55370d7279c59737bacbeea7b360e696d90f3f7f36e5b48eb728c446f9fe54fc477fd0211fbeb2e3283d349ccfa9f9c62e6386b3d4e6003cf2c800f446c2250d7bc06030ae4fbe5dafa4e94115479621b01886a93cd022075b6460a0ff0e2b263e85f3a246744e06fb3588300667d93edc2ad8e1e63ffcab905179fa26da39bc7b591f1f8ee2ee72127eceddcf3b4ad83389830da4adaedfeb2d071df93ef5b6f22c3071774ce3332c1bccf5cd78b0766f9188645e8fb080a8a14bcce2bb50492a08471468336904e3a6ec4f7afa4ed3bc3de086f9cb3823a9f537c1e8cb02f22aa65371c7c3164ddc54a5d6b90293d65c131f9dfa63a7c1a8239fdca21cf0511046ac9fee1f154972382da3612cc8244f901157b39bb2052dcd34eef26cdc279187dd6f071b725474651d373cb5189c64f4230d6210916fb9114deea75355f2d91e00299acb1ec577676bbc2bd1e21f66d7e4b0d97c5cfa4f48bd8eee7a4e439be4ecb277e76c44cf999c81556a454ae32495acfb4a2d90663b7a7fc13f1e4b1d886572d752fdcfbd33146f47ce412291ca8f8c386362830d03d8c3733ce2fa71e6e90483788b8d0aec9c77f80b0e2b60c786b50fe1a26ffcc14dd1cfe58450fe2066803dafa62c63a42b24db711a00c2d96c32bf3e638c6e87df5bf67dd336e0561f493c33fb9b3fb2eee143ecf8ed750bf57de414e7d310930715e16ccc03940ad370fe8c20c470c47740af154ce36d03e9e8b735ab9af1cdfd8f1a591169851612297c562a61ad364f61e47dcab3fd045f0976ec2e36607992acf674790fb09bd9d86987959ec16307fd5bcb9b90db99679925ff9e70b6b8397a57785563aef075e7c1b8c3dac72d324b54b3611befa83471faec68297949e7422ff57e4cf51156419af0d063c52224a30058268a67933643c6eb1e0e97eba853a8ca152c6efa5b2f754b3477473499dc0981ce7ce8f837098f59824db01f31af9ce146c658a82bf4b88a17073f0de954ac06279dc8af1809838982180d92cced5f4ef1fdacd6c1de349b0c9550e5a233685abf917446281474a4b1799d705dcc9b0fc6fc28bd4f06cb9476888933f3a3adcacb66bd440ddde77d7764b1313aa543485393f6f81baad2cc9c5eee4379664e59124e3b6448340ea92517eaeb5a17c4f9c49baa8e4134be5dfd51c06e89e14857d62a3a24f808ded652084ea83fbab91af112de597ffcfa9128e834669d03e0e3d2a132e5d28734eedf621cb72569e616d10f359ff56729ea3cfc066c02a0ec36918b98fab3c2bb3134d6545b61cdef036c7fe897442e407ae55b446ed5d8fb5db08e7732de6fd9d8d93abb66d1a3e4de87a41f9290bb72209acbd31753f90a8201526529f74283073ce86ce5305b191560f140524c02daa727dd60dfd0a25fa0bcf0aad90cec021cef461003dc2029e2b96a1915c7b267dc80ff9c0090d5285ebd079054bf932ed99e17510179910933061c103c364ac786bd3f7a5510e805eca56f1e901ac93761000aa03b90d04e4df040dd5c9bae89bb8ee13bea81f1d9152b9d0a2520524f0588a8b253702a5630e6987fd25921b8aa4fee458742451ace3040fb46bc67f2435eea36ff568b9ccacc16d40812aa1d54b43c7eb47938d6ae05c00998e323b9759ade82cf3787e01ded1e408aea8a2b101949142dab6318ca8af2b998a0dbf4b3b844c745da64c743e8f34c6c243776c0c9a73eaf6bf7716048198f4aaca58baeb6e3b1778c662eacf7b2c387debc5699a53f57c2335cdafdcade9676a0f1ce0277fdf534342e677daa590010fed14f9d5907de8295dbf53c9dab0259507a5be71a49f530748b8744e8b6af58bdb96c0fb5101c5485a91131c209f8f24eaa656c681b83a12e657da08d95654805b961706dbcf4e042af1552c65f33ac4806bb1a28eef1f7a555e6afb9f8e90cec28b875ae72d5643606bed9410c0b93731bc7ea02c18f8f04cb1d1c928aebef46ec8bee9e6f27e781ed4994b25ad3feb3429053325b216fd8133431807c3a618b83f625700f94bf426ee05826f269e729c30e0e429d10402510da686a2a94703e9b398b76e76046193294ae352a630ae20be526361d402262c3e6c86ad8b946451c3d984c4b495338da1764ada21430cde15090f3bc4992b8a47ad2206d330f2a3f61cd2849e0c9f2c6df9dc6e539d362d781825817877ae178acb9d2bc9d6b909de2aaf04019e7b20c28e2486d60e4b5dec1a88aeb09777835193a06793ddbd6a5665fdf0ce5428e35aa70922087b2f80df64ca41c646d6138b7d7b3dfff998ecde3260594ec8c81187a1289d26b9d111d843223022f79520191f9e6158ace0d5c8926e8f52c3e1144d837f764e7fd57e834220a90902f7e0703aba1dae3d7f790f2855d0b4082e3399ead916785cc987fe3faddffce1cff2a16e8d46e27a3799b4191db0b4d0cac7bb0d7e22fd8fb0ae2a0f13febf9c7c93cc6f055104279743fa1f8f698ad0d46a28c4f501d8bb756c1d6624370d22fefd246c546a761122fdde205ed690bb65489c6456c5242081ba2f26754043cdee60326cf95fd9f92d3ca117bc26b024da1d5b1a4ad5890a0b730483ba32a6801114748ffdf7cb371f02a7c5c557ab48140299dbbb860affe6fb6cb6d5c6d8fee9670ff918dfe804f521a6f2da3f29a29e72833afdad9b0e3c84343b1b2b3a451364f5ccc5f8697e9fefffd279b7a5c82158e33bbd323dab5864c6638383a71bb27f0a712a4d2a8cd6115536c6aaa5ca05d239ff918f2df87765bd71151517468325e4277d4432d5754b6587ef3c1463194eb0d41e810ec12ee7faa8af77c66fce9c7419a0f3b72882c75e84635aed2c39fe78a631ba41e21d4a1fe781c8971539ab4532eb7104036b41be59dbd7f60808b0f40c94649fd88eec9909cb5a7b252ce7b8fc0f4d47cbfd2266a11a05a3e3c700fcefb3590e9a56f8598750a9b98abb3c29fcced07cff6cb355405fb357bdf563992e3400181aa5a4e2edfb67552640bcbe5d82693ec318be46c52cec98b70d1ea591b50c2c0866b09a5961503b25ce65e27cf53fff223722bd19381834ee0ecad0b345077e25aba94444a841a4712371d34406c1bf84f1f69e287b18c2e15a23ce1e21f4d7af7b19e4b3ff133dc306f77a7bd556be7c3a717bf953965973dc88045b8a0263605f83e0f703f040fd4e243bd5ec12c309146db74eb1495416e61fe4fea58b6959e8b48801160b4d85ef77fc580fbdbc11fcce15afdc820a2d33041de01af674d421cfbbe3f43bd80c2d6f2da259af065ce8aa22435a164890e22b5e42b1effb41af9a666c0dd7c6a8fd65c2f1e94b6b47cfbdb6f1b3456d2dbf0246c8710d4ff4bb9ef37a54ebc0b443eda381c659727754f73bfb87e1fd22baeb63f59c2b74d66746834c5148c4ee8a85815453379d8a42682641500c82e33c286607c4b87401de44024d8b32e414d3c11fae1e6070b3c05a12bc3468133e32a94240aab5a7ede30e988dbc9a2a75b0c374217950f08e8465feda8eac4882bf2815b0566808780672096740ad72a492648d7fc04af95a1aaf2de666399c2a5556fe8cd7ff0db46cf5f5ceef325f1d51deea57cec7548ac686055be7b8ac814559943f1fb4844f372f83c5234f5d385570e8e29cc1e38f288c7291acf5740660f8560117205e2fc993f11a494d31a4c3446fd19f0923f9719aac13fc88f2b5c3af7ba37fd131e5b55eb609b311925f1ebd42261d9680d5cb85411be997f8e450f6385bdc8c67d986fa120b6e0ae536438b7e3354050c502be89542f1fb6c2505549c5a67794e23320c79863360e44923a69f52eddc55021598797d4a4b8f0c10cbf694cda7fb5d1763a4fad35332fc7b1c3e7fc4a9ed7e571589ec22e4db0b5884dda838c3271a5fe548aea47684ab1f454092a7bf7e4b8590b5853ed8638c845228e4d72226c112d87eadcf23ca0ff63591f8e960b2df28bf2f1f55f5478f7d4cd13b9d5619319d71670c9e81b5a3a992609e80079d9194803d8483f2cacbfd240ea3d4d304c218618d09a52fbbec2c0fd776f86a0bca78ee708c36d53d3942bfee596b898c9ba442e35abd73ed5b44a989dea9676846e142e0aa78565d382960e94e939fbb9c09edb7e8cad69b072358e1b307975d2a7b3fdbc1a2cb85d93c5f65be5b0d74fc8d2571cf6f522189174578c8084d2771e0254bfbef8d840d567fbe6aa62cdd3c7b170644bc52d6f83414bea53001afe0cd2bbe7e370eaea01f11b31f6d25e8b68f06e6f4c193c6131d24252d48906ea4da4e4794be21f9401151aed5bf08d7fdad261796ace7268169ab2af20c706775bd4ae8a5fa2bc0ae5b3b6da28b91ea105168be770f3b8785261143f2910b59f799897062a435d9de2e8ea25e8d12252dc8cb8d85ccd6b5c9d0944c59f8481848df2e8c42deed229abce3f5afdf6e964f90078f39649dd3dadae18212e5a87a2d799d5d331ab63576b5df8c70a14d0ba39d5f75f124ea33eb992003423c13b212e3d03672a90f55990786655f270928825c131f58a513f1d97fc40233403f3191778a839027f623c327ff0c2ec2969eaa5b28211fe9ae1d46bf04785e07ecb6f8cb43676cd5a1442fded0193a1c03bee0bd6f141b6ee86884a785d309198124dabf8c344067ef396d66da2c1db618d405477cb3191125c6f2eef6765f7b897cc02022e8dd6802822ed6db016ff9c30e7632d49ede82605efbe3c21b0b246ae39563cbe11cd1e96576013d1e1e874aa7522b20b4dc09b2038f3a4abc3ad79069be8b6ebc3e3f338848df5c0415874ae5afe111f851e48974c5b075bd3a60b0058b39fb407ffef430bb9d17d6ac15b6f5277cda1be8dc2d9e88fb40db4581f8101d540f02f30cd3a95528f7d8dcb7c03ed42983cba12bbb0b757a324a763bcaabff5af0d06d435458cf02130ab65c9691c7b494e9a493b32f5b60a20bc9650a9793726c860b53b08fa1c0e733b1684851d38a995297fa050f8fa9e435efef5aa8b3e205605b1f6df43852278ae8c778ee09e800e7546cb3d6039e5b1ec2e15e1130b57a5bc90c2555d1d552cbeb32fc785b516d660f59569c0bf23c234c5ffdf1a4daa0fa811cd663c3522dd98925437533c719520cfe19444458126a72859fd1910abb5b0124e6c3be983c9bd23746b19eedb5582b2339bf9413cfae7b4b4bb8973524162d95f4868bf4bb6dd8307fac5eb6b492ca733d49133a7b8ebeafb47d49b3126394194d271c9a56c83c825fdea97bb5b551968ee77566363e20d9a0eb2c37b4d28ec3758a480a44abc6b65d80b788c1776d8aa8f041decf42f086fec2d409702b3fa2861be9101ea4c6cb912391986983b4787be58ba2acdd6c30198babcf72413750861235032a893651d6be7a0682647aa172849daea1fb79dcabbbfd94b3151a05d3b06bcddaa20a5d7049c16bf23899b5c2ea57b140f11f29307602e64e3749ac0415a975d8ec8679943555a05c2fc5380864f4e2b9dc382ab3b6c2c578fccab59ec76c8eed658cd03f709e24d19d3e93d7917f4c51c11cbdedd122fe5ea8c07856e6057aff7823c14239a916388a20ca4f021341e73aa5eee7537422e2ffacbdc9e7c87cdbce5e276514b6b83fdb0b59a50f27949e72c5c069d870c530ecf6b8cb5d115716139c7414d4f8a8c3c248c8ae7b61b48fe78c32adfc4b47161b79b84ea2d47dc9b76bc03990ed28bd97dacc0df66482578ddade455ba28fdb43aad8681cfe7d0c032f1ef106f364a6434c5565373256d92afd8349d88fb824103b748aca39cfa575b914fa773e6f0637673683a35a0d7c239b6ccd3f82e0dd2444b5168f19725dc6d14b3e43d145436dbba32b9ce9ddf2a4294da491e60c8d155acec4963a3a43d26ed24b59ee05d394d347122b43f6ae4482635a9a0323806a62278bdf32cd56c550439f4bee08b14ca27ef37fd594848bdd39ed7c14876420b356aa94def8f57948bbf6182a9677b2817baf4a07dcb25bb8b5eb9f8fa2c210f6cb6aa8323c096aabf27474dc3d7bb5c2dedb370e005a17d4d6ebda480cf643913da0f704f8d3e93653db086a354e6b5f8a1509455608502f14fb16fc367a1fdc04f8bc58afae326b4e582740e75fb89da5adf4103ab7027ef226938e81a2c5858624298e781d20f401aeecea83ba7e98f0d815916e6f4417a79eb07d2b7415c227e3332764f8a6c56721fd797ed12fc1adb236f75d456d42ee9c46b47ea5d9a494bc4f56b8b0ecc7f5caf73dc6d3f8b1da6fa53e1cefba28f51b5dd4c1ccae16e172a1c191a1053cd1840cad0070ad813d1dd21c890e83648469e2910139f075911a3ad48a6797ae999c4d6ab16ba2a7fa9f0a55d8856f1b750baf3f8f32441836c455b568938d3b145d77be1c3186639fa3aa5cf63ce4a42a065d8a21d1ef766cb026490771123ba3dbef1ec01e5ec6395ecc7972a4088ebe8c605438f040c5209e78cbfd5ad0717627dc9b2bfc98cc915fec481ef8de40bc95760aec2398900d58dd64466d194eda01a2e87269b52355694e36d4fc0d05890d9a55c371dce852806ec4b4a7a6062be3415653597f085c8ddbce908b52d6ade1f87ba867f4ac946b991ac379060ba95e30bb28fce541348c64b1f2b9e2b558886e16b2bde592a30542f62a9d0cdd377c1bdc94998f10b9a6d8ac42fb82ff6d309b9c4119fe3838a71dd4a8e5efc5944f28e5ee38e43afcc54ea9ba836ee68c9ee240dcb2ac394d885195c309e7b04f68ae840b3da273e254f11c68781ec01cf7717c7eeed4728043841a084467bf3d8beb6a00b4614676fc877fe69c65ebf9c829683b9122ca456950ea08d94f30b3fc47660bf39f5e2225e85405dc32830a53351d96816513415db3db7a0ed14240255ae237f22a6e133b3993d39f2e325ae03f4a4c5701798c0147f1a1aede7e45dcdb7875b10aefd9403ca9417652d4f8419a85944fa49a01e1a52582f37701c2de9d9ec27c46a6d57a56c12eeb75a6c91758dea423f7cc7a5636ecf5ca8f4c175eb47102f14b6d25e617df1c311354d0eb504008a16256eba55d157afe511bb3b9a7da388f3d6fa2f1bd0a11f4074f4592e2fd8a8027b7c8fd8dd91e3707e456179df09f716caca347f3cc29e9397bd3e6a4f23624f4efed903aa4e8228cd0157491b06128776a6d53fc76a18bb96efb3c8df2bfd179123527d0e961cbe6428cfe7119a44a89d882dc43e00d2528b32bbe0845eee3167f51b91701c7780f429654b67bf76d9a11fb2a99d0b7b51c4d305c65c7fdfd1de72d7e422e0d07b951beb048a3c179deb01c6b984bdc30b7cdc262818947b1b407a0ece37a0d8d15f274baff53d8f462eb3679d67166eea32fc7977de564cdfee10f727cc05849c3476026d41e13ca68a6b980ab917529d9a32c01e3b1010c2be2c1f8cdbc446a68767bd3d36ccb4c01fe924f64c0bf2550154286daeaedeedf09d2d7ae0691fe79afac2a1507a5820f54c5377c11b01bd7717d5d0389250e0de684ec6755273e5077f9f8db62ffa31f018e7e9d9f9821173f7e26763eb660116e36a2d8827108fee2c78b6f413a97e3c71e0053a4dbc63196905783a170dfa39150d272690c75e6183572de057ebe662d699e2702352f269cd8971da1dd692ad5dbc631fd718b48e9778d7644659188abfe482edf16b06fdda3f88dd15106f2f521422f9287d758fd0852aba529cce7daf84bd5ed6ec0fece753f6eb12debd0a61a7658a71db839c590ae3302919890168919fc74ed326e5ab4fefb57b22846c78457b2be9f3da344b3397383a447f1fac264b59e6eea733f0a80de37504025e613ec412fa0e02afa6cc93fe3d7aa9635e5b796010358a59d599233595580d6cb38c4ee9bf1a12593b07fe54aaa6b6e8b1d78cb6fafabb3652d41686fcc3b8d2f431503ec08af49ef3314dc275dbb1a024210b300bc7161409dd54f8866436ecbd602295779ca0bf69a1f0f980f072fb5e20ccf2461e2c56b9e9a479188522f9c1a5d93ef4af612012425934727be134b5d02f6993544de220af704238abd194d94c1588301776c4ac7abce4cc9dc77411e7c1e8c0887ac36dfb0a68bd49eab6259f817adba859a781bff9d9855c77a178abe2a92e215d5e90e726be9cc67d5297bcbaaf49eece454698a1bf1f01455a38c9af558cc3f1f87952115abb47f260f37a08e3c9c411b65cac15e96f18ff875d19a8942a1bd3e6248adddc1c50016557dce52e556c7d5d4465ca46c22dc9ae148640e1cd02bb95e483fb27ec57ac5a7b127dcb3287358a897ef00a3550ce36307deb30739b97842129b3e9517ee214e0549622f0a1feb0eb72f21e091048925920a52c70d70b2a42b4c3fb23085598bdde07a4511f849637e282c8ac28603c1a5d5c72cafb3959e72678ba3a4c2692777ab100aa92454b72ec1a66764adcf962ba0c1a2b6557e3823e7d28503d3e4c8505184dbd031a121cf80d3de3414487dfb77b001af983822acbd7a723d27099b6cdad89fbe94a7880169ae546af669e6593d3841cca4db085e71c12766a2b1b5d45c8d999dbf2bcfc5226ee1f3307f1e84d81735a26c6e3054ca672789ed5e098bcf65440f3580404240cf42aba6856fb54f0c9e8e5e9a7fd38c0be71ab30c6bfeb0c45efe54983106dfacfaad8c50073ce934971b8d7894588c3d2eb956e9dd3c01c2e25ef6e7d0612c9393ae76f0f3391ac8989683052455d43de2c977cf788bb6cd1d5b3153cb797eb552640baaa885ef5cbfb88acd00d0cb536c9f9c914d9973a0d7b783c6103208af9abb7c67472c9fa0111398c4cc813f925e73683038f4978b73f75951fb7c665970fe5470afa8640efe06ad4ce612714d6007251470b77a0360a586326343e580136bde3f11d7712be078a29f1a53f2d923aca944fe2b37d3426465694f01d29f0ae3854ebbf649efa61961ebb64782dc55248f3bd7895d0f058a31c712ef796c8852d2f65e81b2db15ef5125ad9530b2eedb1dba119b85d967ac4e389d820fa85690fb7c3e96380cebe80c81b9941ba7d11bc2b7542b68a2e7c0e321e436849a899beafe6e53eebe54e2f7bd577bdea6645b75b4276fc940cf37d5f0e390d11a186ffc02292d2e400cca4f342e6e932764730027ccc2029f776d84ec3c45fd0782b800e7515ead1a1c3faf6dd7ce76469e429edccb4b4fd7d9388c45ebcc4afc6f4b848a5d19506504ad10761d81c785567354648d59b334d1e543c86e35c6831d7b8c421423eee076a16b61802812ee955440bfa39ee2127da3e36e0c130da649714c259b78120858074c9141644ce37bad1665fc034cfe94a98d590c9a08b1d0dfcb536406f51df9a28120d9effe3fe52f9cc5e491d8c1ec291907ac671bcd5d8f616451280be7a2020d604ac1020f56687b2a06eac3fcfa83baaf6310ebd49074993dfaadf1145a8c48757c4427339c631c7919eeb689d68aeb90558fb7cfca54ccd024d2f70f4d3bfca709fb59c79c453c3d973094a34e8ec5e3817e03d1f14241b7c8b022eb77ff15432f00d526e8de658bbc99198d5d4550e72ae016abe8a4537dfc6d31b93af471f982586e463ac7135e1188b387d31275d63f7ba838ddbc169b6e6c19cf8dc4b593af0edfd4cecc748bd6c66204917e59ddce7142758ce111cd9930c9f2b4ca9d14dd3ba608fe3db37edb16548cee278b21e06de365804ff538df8201222bdf50ea8827ed56b00964cfdadb831a0a6b0a30fc9f4d518de9a1e928a83ae4ebf957f4ce75833397df30785b88e29e1c56d16140c030a0eba3f64173660be67f4af9fe0274ec5d033e939b7858f0a1ab5c048f4d6ebeb83e21926eebe62ff0e7fd10c839219159020b024e32fbdd1a081fafc537971e98d74ff42a94b95ce1d23f213377c83cf203838f6e7551c0afc85a865f3b610cfc7f00c1dedc5524394ee3cd3cd4c0cce824dbbbba2bef3765e0c19bce8bcc1d47c86fd8a0db43faecd7ea5c80c0766ca99bf3de43f937bc930eaee37e6020982d62b1074f8f3a8e2fbe4de02a1c33c4a3c115386ad1d787e8c2c52a0e61414f411dcec9ec5d9603518d955347319a47c1837a5b9b284057087f2c297cd070d423c1bafbfff9bf9bf3e546cd541318d0d4842da3e0efc7ebb5fcb19a347b0d01d7a8b87d85024a71e676881db12d7a62cfba2931c8e803e37ad55eefb7ba86e5b3140ae2ac36b777b7688e444ca40ddc87a2d7eb7627ff5c9c61d4244dd6d188a84c677114a0d3d2bf10799f1230553c06738994152cb24b8c36ea8485d26c90719dc58649b16203ab2fc8f8cc44d94179d537665d3b0ba0084d11a045d4121af5a33e40db4de34cba1215ad55df3286ee042048b192456cae8881fd169601796891193d7219a301ff395a2730dc99719fc228efe7d7e7af42cd6c7867b5ef45538fcafa3ea2168ab1981fd4bb686de646fc8ac143a61527700dd5698fec318223a0b9284c4a8af3da539d84f8abdfa2428b13dca7b318e69d8a6379fcae986b9b3fb107392a5eceee0778798d15b0d11aa790bf08efa1e67543ea660ae8445cfcccd2b7b94164a838e564c456a96de8d76f3a0a86f16877d30e8d821dd553c5a76159afc6605799bbd77fa67560f3852160e7b2104dbd325c1602e852ddd45c2602399da8e77c027a645e836b70db12d390ca777a60dfb7e798b50637947f43b436c362dc376d97d9b99191727683ca0fdb9dc2ef821d84f4c4d97d5099689a6978fa02182ab3f0c9e0bf7eba8e6eddde233949a5a457f2187684d83903ec0a7d2382def8ff0999152a094f8d5961b819690cb9346fdbcbe1f3f23f2c3914a2a12791e1a45984075cb8a33aa51ffe829fab59bd74802efb9e29399ee3f718c17e870ea0535d5d0acfc3a71bf5f1e9d2a7f457d25b2c90e117efe01b74999dea9b0c8379cecb80634edae2aca66a0009059fa33d45cd352e6b36567619547e31273996bdff2f23ae911013def1d410725d8a540a58b04416cdab98aa32e50410ae4cdb6a30a9058a55a60eda715b1b8aff9a166fe8b88e0138f9f379fd2ac295912c7ab804ea6b40a0b059710de4dc23eb9966ffec64417db48237db809ede7ff1b1bfca9fa7dacdf67fecfd6ea63819f22e7274d3b45aa69ba904e9cb7ae4d01a6181e7bb9a0b0d7fac1844871a846ef13bad14e7a32151b31f5543ef8ab238117d7c437792f1c088fcb28c94e1f4b93c1d3e1ff0e74ffe59f45a894954ce111856868a383633c1870b4e39eb19ff83efa3abcb7881a4135d04a1a435d3cd7c689de1081d71b4ddc7cdcbacdc8b39dd551990afb1707ef13e0652e5adf5114d345ab4d63d224c02dc3e814e9bda516f8126d6ab4a29607a002230fdccbb7f1b616597e8046667092857a3676b1d1d8e274623a8deaf44849e905a52e748c9dc471d0f0b9497f614bbec48f140d6c053165ec792b04ccfcc45cd86dcee6fc99c498e28c5bd9222effaec5083cbe7ed818b9b9ede28e8bd9dfe47f208dcad6f5d72b7b6125b12238c345694360d0b458ed81bb05da9b82fba8d09e28f806968af6f9f6401d4a17cae7d57dadd8b2de3392918023cb7d95f2cb131bd1f20d416b70ab80278bbbe4f755e31404edc3a06fe034b06fb801c54cfe8730e434aea313c62a5e3983fe037d5ce0019e5c5e2a8d064a8615fd345e8f184588ce685d00f864621b5f3463cf127d91e338f810715a5200e28f3bc96e6754848b00dd2a3a0e924a9668fd43fc466e489c5d6791a0220c1a1be371ef8c725b92d73ba02c8a1ceae4aebe18548874de28bcde1a1744e1ad1e3f5451686b6a3d2737fbc447b9c0a2b024b1d83b8876780631ff01e0a1ec01e8fe5f6373e81a0e2d11706400f32fa71da63b12947582be9e8be0dfe571532238a50e9ccae569088935e5fc36129bd7d26cb9877bd74eda1ae05758cbb1a475eaf0dd251686da7f999be5c6899fa8d7e99d65c0107e070101583463fb42c0abc3b7df9b47c1b350ebb7882fa96430814fd113108b6888e96b9404cf1a58efb1d9aeb1d1d913c131e8184114339380f3865b9b40794ac9dc5e8ab832d0881d7048cb43d0a4c0b26654aabce987198e0a3c0349503884013f2fc1623b2fd93e4744d1f29a0d6d6a47057c8e8e7c915f9d91e4436e062c4a70adfde2c31720e4d7d4632cea1701dda4d0dfc813a1840e217f15a561df1dd24c6304a95c2d7a940db838cdca3458c495fd595c19ae12dae73ce52bd1c94860106ab01a1558ecd602fb641ef14b301c38c42effcf6fbb808514a0bd28c1509edb0ee62256d7cb048da591f689ecbb5d19d3783214906cc886e16e9ef4695f1d736df61ee8af910625d6b760d8a696f6e247fe72872c47ae86d7cc2450083caafc8726b8ac8594817fbdb970c30220acd9e0486c2d348db688754cc7789f59eccd2682b84c7e8044d74888cc3b98fa2583f39c05b089193299d14b6907c5c420e0b5a1ec5a31ea53a5784c8372ec3320ea8ad4b3d4dbea58b21d038d96a217165b01958acf24024c8f2fd748f535daad57658b56806741a037291fd2d6058206f8ce4fb1f969eb5c4abc2597577ef57896436a9e84c9be08c171505547524bd7322323b885a1f64df2f4d111ba44a85b3d0befaa944c3017f83b2ae17329b9bb821641cf30b21011dba2233c6dd349215469c69a2fc2accdc545a8f4ac6a5ae3faf81dfbf43e7a1bc7cec1709ab4e6e81575f29eefc98e46352dc0701a1e5058c527b50a076eaa93d199fdf4fb444c0bbfac74319379ddfd69cda4c80cb0379e701b8b898197713a12fff3c09f62dcb6b742354ac2c022468ec2a0a6fcdb86d969dc77076c51af22721968075a5087ae77564ee75f129c918d44fafd636c4be21ec34d202fb2d6b401b6deb95e8bc3da2deb207efb938e5ef57f102b6e7d3d693068f2f8eba9d685694b863794d6439f5be87f51dc274f7bf1703966bdc0027674746ce009e44fb9dbb4a07646ef8bd582c9ce4d84575a8bb6d4d981caf898607d82a9bc616c0b7f28660e6ce0f653ab68d1f36e20efda4beb32fcaa38455890b4b3796404a63cc510cdba0e6b6c53ce37f36866483857f25285d4de6b097d36fd14b18aea1ae2bbdc07e87b2fd372cd25449748eaa2182a3966904e76d64ed025ea6194966d0bc6d6fae01f2f2c3a1b66fb71bfdfef5f5b2bbc52e10f919791393110474aef8ae0ee7ab27625fd3c83add63da1fc5fa629a07f47097fc17a97107bd301f32cb97eba3aeb639bf6a46aef10625b51644a1458187dfdf87a2043713e9c51585391634a5b6be3322851cca1b05ed1d893e065c3539f83ac1f64e23f781de501d71cff8c990f5bf2134c821fed71e5501aa2ec3d2178387358152d4d3f24996f1187857d908e076d9868ced9514e2600292ab4a95fdfe8eb434dedc285544031dabe5ecd75ab06985f7034b0170d84378b14494ac62e0b6463ce974f2beab633c2c3b16f22d9a8dd23b8e4e84b71c838a587dae801dac0cab13eed3e616f02e948e2c2ebab6b47fef1bb7dd55081d500bd053f4eba26011247d066b1b50dfdf23f9350a18417df3f57f74c6a413c49c80c6a95595799c5884bc50d4bdfa7d6ca2bbc99b407eb1e6c979e7de23e40c03fe1934b06660df8f1d4860421ce4e2afc59c6189510c2c604fde6e510830e0640ba56a63722c224c7c6c6010d028eef2b27014cd8694af67b4de4bb7cfaace52f449a3e962c07e3632f7851793df6f005bfc8ccb6c882a8d33218bedf91a3bd882549ceeb1945ea05b74d8f61a1e0572b0c87b1dc1e7508e5cd7de5248c779cf7f793d68d46aa9352f19aa6290fc1eab8c8293d2c4fdcd0bd593f00080c91722808e5da8b11935ed6d77b2671b1bb05c31ff7b62fe0d73e7f955eea8325f28fc5eb9d1690fea6b8ed6c98024dd6f7b0865bbeb553c9916f546a465ac9e18de1d84546dc231ebf3020f8681c9c75fcba200fd17ccf0a069893b4b5e295cff74fa30bdeae4bb147ed3edd3a77710f13b8ad5314c88aebf3873e3a3ba727bddd91dfe91537f7ed32bb546c926f9eed66e2814bcbcb6dbc1f07bdf12a6e693e7d01b9e1335275eaad7883a1ac8fdb6f4826833bd872db067b2eb4bbbbc0525e8eb3e341011550207eff5ed6ef0b12cc9c495d4c75b06b920356875104612d555bd4fb204a771ec4fd9420206f9a421bd921d235c167398a69091a6ed1048c5032ebf8d4f669aab558687fc384d54a9dd388c4d0cd0fded7ba177aff8a615076991459d3ce556553605ee2f174900ad6ede524f0db0f09499e018596b5e384ddf68d31904d2addc5acb970e725b8163acf6837999af2e7626bee6275a8d18922749e5aa76d6c0f025fd2056bee9e24b02bc4d1be18c44f58179bb87f3cdf444a9d9d3d09275f114ea136ea8ddf54f35c352e118eee7ca48718db11023deb4dc936533e8ee0b2ad4ff0ebcc6dafe5e4641906ef8f6fa35db0b90bcbd8717ce385023273c59068f4dbbb54568150be09aa6332cae33d95de427c91a8051d6bfcaf7b12d0f59a036fe7db1a271925cc7d9f8a37935a93fe3bca2d7b7d6d7b2f22bfa98aad2fe119c53d03c601ed8c7792d2a8cae285b15720caff941aca79ac6d24056c8f2e4e1265b3b3eaccf71fc0bb800c00951a2cfdf6baef4abcb632ae0cf7eecabcc1a195a0fde72e3e8219b604e314fd3f8d408c4637b2763f194be29dbe07cbacc0bd0256923b65988e8656feb8cbd96fa789a0008aa0c89c6859b8fd59493ffae4101484b4f32324f8fb6ff3cd68be8f314538876ab2c197fcf6f033a5de0597c154198ffc98114ffd70e61330cc16bd9d633c8711a2ed33b9e1c353e95a9e5254bda08d3cc59d80ecc875437f81251d77af037146431b1a98188a3c3ccb026c38450c92e7d6286003fa81b0ff56a3455b2e6f7583ccb82a06749764a9b0b583977c8ecf76087ae01fdafcedcc178d40e602dfd32f596fa8512a1cf0b445e947c69ad471822f3c903c8d6b4db7c7f7d11714c51937331761c0b75d0fbe13edcf075d4db73db3829888f606f9ed844ab4b2c59996733bc4f69496301d71faa75f65c625d1217de7cf55f5182076df39ce86f04801f4ccbc956be071a22e25b0a9732e0b7186f85c2ca2896536bb057ca342a6dc184e173bfc5e23de0857fc709b54634cd46d657df668c68b06af14d9cef517bc1ff7d19d4156484c8260e8fc6b8efd6e66c4fe3c1209a90e98dbb559db42f167da9f846110642e4c2d4dea77468863aa8205f6ce8f26161e1929401cabf4d53ccd33c81574712eae02db34e9671ad06c4cf2853dcd33812d66dd421d86a6c2faab69e99c2456c47e333cbaf04c2fbe8e3df53289b411a34ce6436092ed379831a50148a6602363c7a885f4276bace5f31407c01d43f324027e4e15589e6686a56c2eb39eac7d4e43169a03a06ef42c1bdb3faa5c99eae859f5f65e256ff9609815e0792c32bf5b27e4b67fda974404b5e9cabcb4048ba9db2a52f5cce66a938646455668d1c980f02370a8fe2a8e90cd88729e652cd458af6c3cf894a0376861a63345e57167b3703ebece7f229675dff2e084c91ddc7b8573231f381fbbe09837fb898a26ea9fdb7edde30c655ccc2e1a5ed1bec0bb83ff0bd6f2d00e4593268a6be3ea9a070df713495d7c8922815cfb6245e436e01b298f5ac3ed640b4857595452714b7c4eaaa3e0ba0933423fc3997b2fb6750566a36ac234f4f6a776062cbf487ca4896e4bb871411ee60b948d6e83f57c09c8f21c82418bb429c8d4cf6902c8a5ac2d341be21dab48a1d6b7dbfbe6957cf2ff2a900f009b63c64ac57cd9b82fe5e4b144805db36bef7a92b1239752e291773c7fca34695bd9a9c77c77a32eb35948c519091438ca065852365f3bb2c0348e7d694c5328c38cd2f8d852cac217d006d2c1dcba0db6a0ee31a1854a3da080f7dd3fd072baaa7cc2c27e2c75e095f2ba12bc58ff775330f744f7e9e582d90880bc113c92a555060df59ef863773d1bb0cfc697c36fcf595612c294a10917173f17f5d847cf280a04f8b98667a4b8f5ba8631b5884927c2041824d49528ee4299bd9d48fb387125660a3d03b048bb2e642a331bdda47e72565fc923723a9c02790618ab22a35df81f56d8bc5b2892b3af5d7105a0410f4818e88eb3f059bbc743b20eaed65e25be659d4341b0b30f13cc49b1481da7a00c8f0892763921c87c45eb70dffa7e4d0286a9f5d9b0941e5ca627ab7155c99264b59039a91073ed18865e03b2549e9b6922b2e96ba0a2ae49b220716d67faf17c889139cea25885535669ab2967350c308c59e64fcb0bc06d6073a3369742c5cfe7b2db94d661347e62209ae123a6cabf53bcf92798c162e768bedcd19c70ea54903f7d6b3d39c96805a05a74c319eaf56625a58c93f7a4613dfd3cb45d417228f123978cddeda909d17b7268528351607cd290c288bfe6a17a861063f9ec8e16fd000e6c183759ada56e6e129f2e05ea368b9e1937037d901c6c2a0f8e0e682eb0a02888eba6a00d8c0b8d04d6a7e61f4c9f60d86c0e7d8ecaf4a143fa65b37ea985ad21d9b91a1011336937af2f1cccca5f4daf3efc51c7ab9dc4c9624f4671d3f4e9f12940afdc222222ca0c818dc83f9263416e13427fb3fe6cb9cea84e954ec52f1a60f3ccbaf6883720f2344330d56eb1979fc00b3a659982a843241a93fadadcec44ba0d07d4a8e38b81cbcf96f76af82377d1cbda51c86248b7d28c681d343228311b36ff4c6edd64c4354726d3849fbd78327705cfac7386e31a9110171817485c6e4799cf8282650c4e3c06a800b71f2aaa3f3028a2d0fb3d48a29d235fd6f4af58895bf5b5e49897ff7d0e0d46878a407749cecfd87b511cc24cec19a05943dbfde7e2933a93e395baab08ce19662d5501221a361a821dd54ccf61d46f8a49f89c5794054718e10ac77daec4029e3ccd2c209195af05be86d9e72db30e8aa9e910a5b54c8ece3058b927180bb40fab1bef06fa5e8ad3eac9f34eb13cb0435a959d430955eabf5e1946a561905c589b1f68c969ccfcf4b0506168c33211688a77a32a8472db2d3066dce8628e532709d6abf6849a9296d76e6ec519dd07f2baaee2d1e7d27535fac960f71849fed8675b0d626539cf0f583be759c3ce2d21e04792f92a23f5e0d0def4acf5556ceb4d4b4da47d6f40e7b2257b80f80da44331d669e3458799021093af3df3ea06033b720a763ea8448b5c0b51bb1f544bdff9dd7137f86f4a0a5e33760822d1c726a3c211ff75f3a1fec9ca695acb001caa29b9fb375d09de562b87d71c6c6033b98568a55a4b1ffd4c7c6ec9257d57f8869e83afe60fc45a0588473218bb621db52c7077ea44ce1105055ab9c63c2d6f8d7d9c2a70a0e1df1419932c5a8688627c3df27b98c3823b7c295874b52f59a9954d8f472255270775fe320b47b2254992537e83ca86d0e4fcc8ef91365011c651cf7353c74a355abd53ee288f5af851099d4702b068b6a502af0941acd25ae1c1314700a2f76827d698439a29c5c1eaa4d3b41df56feae2deff2211444112ea6548e36e1e977ba941d18a999006e2ff7dc6c83b8ce2704e50922a5af59c39453aaecbe01b6aece684b01d7ca6df2310e2f45ad09a793afc4806acb4d00db90cd45b466ec9a80330f488b78093ae2f0657b292b2538689160e20dcb06e85033c5d0c7779fbf584ac2cf3b6a731162343cc4e0c48c3063bede1c17d9aa929872cd04274fd3db7b6b3da05ffd8e66cc151cca303d9fb01132b2272366387b05224e989b3d35716147f1746905bc7aee950f34648b44495ed32f85292d6ee6b9544e5e543b65e1bcc75b1b778affd9adc95b6ee12582fa70057d75aa74712c6100d19d6b83df949df087dee1a46cc1a2efaae3c55462be2ed0aaa69c660499573c4d67474f07b155e24db7802ab7b1996e4d48eedca7a770c101ba83b52da4427c8c7861587848a9f7be41f561481f90a276fa0c6f1db47699805e310e211efd96a32baa6b9ab864c6d22f37d3980ee94c5da84514a900d1b1787638d8f149547c4ef9acde727c0094cd12151db5b172b0998bc6c4adf1e17c2ae25e68ed79dc6c88ada66e6f0fe010359610c47555967c90cec96274dfc771bb20fa7fe62a8f2f33e854a8474041cc79acf52dc499222cf0c541fa4f404fcd2886ca385d06855a964455d8df34f2796abb368eafbd95a4def39528d4f59c0db5e02ac959bd9b0da80f7121986c48b87b209b86e7421ca11318ebed2fdc8a384da1999dc26956a6766d1e29e8123df57eb23434f18a5885ce626b9bef2f91bf9be0ae18db8a93b64555122680ca0714e9557990ed62c9f09acf5f9f15329fbcfdc806fb2a393f692a7e7c8792ffaf96bcbdb75fdfaf9d65bca0f10340f9fe6179b55e68eac97c70c2a6afae7f5d86be74cb1dff28b0f05874a1caffeb8b9ac06a6a03d7bede674800d9e19aaacdf58674f086876451d8036b8b4890437af08286636ad75d6ebda029c101204593f3dd218ab8351c6bb50da1e59d3278a1defaab67405760b986fff916ee7460418bff5d566c00b666fba39ed2a06daec7da1cc13432a35cc0498bb81ef0e3294e6170f316096fe7632a01dd63aaca742ac7cfbb868aad2ffb140595e0425903f606e8045256c6b721476198df79f878c61a28386d2955a7681cd688d3aa1823c75cb8ffb761b6fa0be88a478ce59441017ec95f6ef9d2ed1d1d1c7b28e05203dc558383cc51cdd6c6b0414f654368806124b692eb332026455c1e3b7ebc4675a7295f030d1a141e4e1bc6133f220c8b6c46874b0839cb051070799c34593bf8aad0971d6911fd6ef475d94f9f9d502981dad0066aba0e8ada38ad2e85e53da3863c5e13becccfc996afa06975eb77144afa1ddfaefe8f2d9c79bf6e41573d4e9c3ac633fe32150c2f729c3d43141d19d82c3a70ddb4e4ea0697ec65b6c7e3a5ed4e889183cf5e74ad71b5b60904d05ba855011b59b1f8ebe101b23d1e0e0fa5f22ba8eeaf65ed5e688173d22ed44328e83ec6bb91d087ff986f9a09b8afed7725b22c232c6e7eb4539ffac066ea7c8044f6c82bd13b654d18c016452dd06ee9f812828e4b5147536fd35696b0b76855870de65038862d8b118912a49b4560490664a37e0da3bd3fc46d8354a6eb445b03e845b15eec385f6efd73c021d47d4af8325b59ab818d9ea6449e80e0e0845b98d313adefd343cb434293fec009617e551143ae2215fa72ed1c79fad0a2651a72a6dfbeea640a90de8ecc9242a85b671029d3189a51e147711024dd6bc542efac75ff8bd3bce7c93c4e4731a218a6266bbfdd4a250c1e61779935334717157063eb565629c1b7924ce9ea87ec53c6adb415143b00ede64b564a0db5dcf2df482839648d8160f6f0b5f601f73de629fa42d5fa8be959bcf0f6ecaf53fb97bea9d438e94afbe481f837c3fd19d43b92d18c092bc2dfa2c91074d16a24f5902e67191f78a1b928aa979eec175624b631f39ef0e5318b673e88b66dda1f8033fd73de5c314b61b77cee23b77c4a2155fedbde15dc954a099e909c81fb71b1b9cd59a25183e81bb06d7a18ca90e4d9382d7f9d008230e7f8f3ec634a0b6712c25a0518db2dadde083104f0e81c8e827f826bc49499b979b84d13ab587a350a8de35c16f7973bd9145a74c1c98910678c74941bc5bcdd334bf8c26ed8c1d90262815edaaf98531ba12428c82871d05a4da7c126f96a0b947ae2b0bbfb66746a1982c9551f90507d6301f0b646454e25b98f2ddb33c1a14864ceb9af3844e6eaf9917a18c89e8329535f72313dc883c2bcbf600fd09677291da8dcec1be67984b03c381ec9de790f191adbff4486ad2634bc0bd9345f019804de8b33890049a26fe2262b612f10fda48c245045c86a9b8cb828df118044527b91714af1d42a315794e63df5764d86331c1b9c8806976fc81cc8440bebc9daddbe5e1e70fc518220ed30f77699bbc6c483f2a758fa24f209082529a76212d26821215293798fba71002d8bfd1d5f17b072c8039b70a5f118c1cc9d07000844559416f173484e0169cacd7e921e00228f748d89d73784b0c235dab9779867f035cf91bf4fb76557942bc8a2d65f04f2d913933d53b1392a0f7ab5078fac9aae7d057efc6bb00bd14d502ea6f0bb752863cb6327423afba2ed542619dd37e7ed35d1fea921ac7e2e4c1a9c7f19e910fe8e0020602edae94666eb80065a7b9b28916c22581cf7126c4b13f3289b6c8d7ec22a6a3b75572d360a179bf97c0be845d68bed223269bc9b3d1d972e2ed2917f6fa380808985f3339403e26de8c57faf734a6c2cdc96e29ad4630d2b7d918bfa0278a63fc25abf7a310a66059e61e02a9ff2235111bc86733a49f5d7f1e0656e304296233e1380025e4538b5b827b45751302b3005788bcbbcade614e0b6993755e0ddda86b340fd443276ade2bd5e21a397e40a0a0e503e121f836c1d22cbc81947f450b9b69d0aaf04acf95eefce08a52f55ac88f52f6268613535fb7c89878c72f17529e998228c337ad685f32e34c394334c4718006de08c9b720da44205ea2c711d73a3a45787ce074737f5c1c450da7c043edcb82002947655b8c53fa737811ecba7ff0dad6cf014143ebf4210241760c92b8da96b910af7a2750228fbff98ff3f02c443846d42b5f3887a99be3f9af36f89d770f4c1b8f1563d76c0fa2ad59299e594fd09694da6051d622f613628abe47f4ec4bbb72a2de82853c5cc327de58a720536afc8fec5d3c2618b4e04fe68c891692a000e45530500d1f4469d9bdcf358805dc5f71f325731913a3f4225ea8c9716c5b8de7881bcf46f8db6bf8359fb6b6ba24601c0f9bd495223286aaef403d3c9462b1ba716646ab53692a6e62611300016ca00f7014099d5ad329cef677eba12d076bb70b45cd94f617222cc2769fafba282f075178769d258f1361f876198177de093d0f7ce29dee23f1317fe783fdb1c2199a8d34121f030b38eb41912ac7c83ba2a4f16dc281d877463072c97519266507c83c2061c820b9ec79e4a34d0f7950856c03bf425e712c5fe59ec83223e88ea10a2e69db8cb358b2612f52e6da802043a7ac7a2fb1c13dceec98d14e9495be2b41d6db302d68e92e587e57fa0f1ed6bd5bc2e4913b10335d30a069f8ea30d0455df11e8abc6711d3f7a5571cf14f7a1ef2d0e29f245e05a548bd84bb59a3bda07510c44d957a62e91412fc7bb537a0343d65e3c3e31b6432411d2b2571dcce90c2835af30435a1eca3f164c9ecdb4cb122dee623215ee3a22f94908af4bdd6ffb574096b6ffbffaca8e83657c37a4c11d8be2bd289e7dd656f2787c467122459b10a23d7cbef5349cc3f3cadee673962c3904500c110086a80259fd06f4d0d7637d74b46b3a34d5ed49b0332535ae83c1e47f60690d0a1cf32f71a69711f8b286550f9af40860f155a693ad747316eee27259d6717c6f1aec3dbc4708097cfc43937772bd03d95a482e8a747ca5d055fc706daa782c30f09a5885193c0e401af380a16a76e529aa1f9f8815032cfc0a805da85ec87eb90db0f808a532dd527aca5aff7a5b8692417b43a4a0763c90f4d7297445c2f1a59f564895dc9c7572383feecc8663507d5de8899acc4f590d0f6b83c9c0fa94d082703b94ed31b49bc5c2d1be276771fd067d1a2fd6feb79326190b9f3bbd02d27fae8c582b6264ae41c4f2759331966d5f8e34d05446b8b2fd8421cae94d6a72fdf0c4832616671fc83c56e2b92997feb2db9304ac7a653d202822d1d81f943605e6a2446bc6a4c7cca0deb5565d60800427760864969b3cc615059e1a83be54c9214b6d50de7e1162b7f0951e06ba2d9e78efaf862deba22432de29ccc15daf00f0a853606fd651da47348a793d5ffa7acf220c7f3a2033252c04425ac0e6f5a78d68ff9d3df7611d3c4fc5133dc10bd520543172386c6d7aa675f0965b2912c76739cdbc31e49aca685a3ffe558928fd4f8845be02ab4ebda14566adcf84bb12cdcc30670b0524652890bf4c2ce9f0304bed28d44e261df9791f239f2fb3d4e81ebd305f470f87a8f3986837de8715ab821423886e312c6d1e284e2c6065c08175ef1110497ef3d508f7c31634dccd6280f7e5dd9e111cc8ad8cf43651af4af04ed5fc02ce32e4d3f7ba4f0362a6c7fb7f3cf19f1ee4961464237718d22d24743008808c327f65a0c7be9897f60090f24b4bfb1ec06c0d74012e226058d40d77d931afddebb5f79f00ab18401822b10c07a6ad5978468d4c702b3f8ad84d3ba8ae9fb59fea05fd8babb6e2dfa2615d21dd388c5eeb6a14a56771a44641adec929e0b64515b4caed0acb384db83f935f070bb2e11d843d230c14e794de87bd0aa7707c871dec0d8d52d8f655cef7a937f53caee7c5cc295beeced49a36aa99514968c80bae39f6ecd54c549b1c0b1a7f44cb0792be163e3ecf90f75a9591d7a2f50e12dfb6d4c1ebf74442d420b069a140fe7f4eda3c5d19d26285acf7262b62afb356369417f9b2c083b26629412fdc19e6cb9ec6866dfd7055cd6398818def0a41b89377c2f6b06be487eadfd77fcb7c52c242dd4101cc528770dc3905159f5be2512f6d2a37239fecfae72a1b90d70d2b9b5e9e9b28cb64c80d35e0de3b571242c4813d6f06f3e027928283405463141af308b6468950c35fb11f61b3570849e4eb33ddb06114182936a378dcf9e615cc96c9f34c63526de62f714d89fbcbac0ad1c0b41883e2de2cf0ce41291a92d3553e79e0fa5c8e0f967dc717ab85367575eac7dce87baeeecdcd727397ed13e16ee174bff27a8bfb418ab19a90d2bb9a97eb5d5deb1d21c6d7029727fd0c409bc82c82609e473d53bb86d5ec998019566c6f58bad638fad7824b12a625904873a34dae81ac2fe48c254f7bdb152609279b29352aebb327aca56e07447547fe6d848b876879c5fa276fb2c1cc5469a4f2d46c2e2c84113c316351016ca6b71dbec93f898073f3c3e47d9f8024e92d792be059e86461be13bbd535c357854c7da14b3263afe22a45f06f05541b74e750d052d359543bcbfb45a7c2fa9fd295b22fa759ac8cb94d2429963084d1ed1e7a9d87967291cb84c83a81d74cfd73edbbd9ad7365ae35d442aea1339c2d595bb781a4d7961ec3a08827285064a1ba7b5309271f18b386a706c8c582a9275c46c4b2c8496001bbbbfae58f461971fe1a77ef00764d9f6561a77ed25afb60c0a02548dee37e31f2e02179745a5b0eda5d94aba6db2a8b93189eed17b1362eace17308a84f57f4b15215e10eaeaa1767de80e9f3e277dc797817bfbe9cdbf2bded232be1bd248bbe0a1ea5f9b0f2a2caf13712315973c3186c64503584664ef92ece98e3a0a51b06ba18ededa7e2a4c6fb69dc7fb2bfb9f32b67b5dbc7533d21b3964efd556852a281bd693ef0245f56ac291c42f98cd5aafaf5292144a85e2cf608fd7533b9ae5255afc839ebb4b5d3f86a36e6596605bb510bc00c1fb181fa015f2920fadfa53977d89f0bd954bd675343151020e8fcf0bfca6bd4e8956c05e5fcf26ae9f774399e202de4e1ee07ad39751029dc6cf72571550315fb22e03eb45ae6e2a3c5aa8e5f9a6dcee2dac20d7bfb2f1de3091b8910a938a0de7ccf9d94c11df3f690a1b8a87812610fe02cb1149ea96fb456bffb0a353ee3abd5268b34ebb5f24eb7e445d133f8889116a6b54f95b76164addb1cce5c3fdb17c2d58ca8fcae26819e0d4fea8089088d158f2db75e1db0eb8f75fcfbed6e00e09c1bfb987c2fb9bbf85062131d0579fb358902b43210ac98f17da3103d88a27516f6ba6d3e9dc6d5340c05bf7e1f9c17be5b35db259d73a8c78e69cf347f5aa05dd9cf5540499fee9ce76e2540850ee0ff3f0fc220863b54868302bc51faaeef0024f12f2c9b23bab632e1881faf71cd530ebfb6a015e5eebbd704d949bf80f0971eaae036bdb8d64f65d2b25af4c5bdf001cb527c2703661d20ff98bf29bfc36836683e7a3e3d0135e07d99fc6ec75d9e7bbdb4d61816c60286cacf176387c888bb6919ba8f24dbacdba655e9d545c132ef6291c042d4de16c43f90c6be2316eaee7d0ac88618985859a9ad087afc194318b777af7d9f7b5aabd639e8496380264e8981d72267935ac2e744fd8faa93da03ad3ea1c8a6aacbfc2b1a4494604c57b02a1a71d207b53af00d4b84dc8fd453b14c10c27137d71bb96e683d202266d28ca996aec04a8ece61152c44ce8b2b9bb07a0b563e9a8bdd5443cf1713e930aaa0f20f659f6c0c1f51421547902cec3dc2fd431071257e6f6e245ecbcf31b938ba5e4f85df6ad83aaa132b1d059850b8b0317e18488a91b622d0c841df603909508d3e8dc567fb632156373aca188135468a2cbce7eeb9f52392bf72451c75086a8a0ca377cfb33c5e2f3e9a9214e91a68172c1dfab3886cc70b33c187c80fcba00afe81b4ad2e9de2c8d6bd06fcf1c5642569d6372afa95b1dac753e9dc73abd9ceedfce3c2986c173407eae0d78cd4bcd0b158f603bb423aca4ace42a073db6d9657ed255fd925738da671404c6f927768d0063c58fa9f8c921f743e4d906c00df8a7d9ab6a103d1dcb7abc266eba8baf2f52ed5ebcd2a7b461709485cbd00a2e017b479e739b2c89f041f162758d6b87a9d1827b10a0c1dcd0e9260ffdfbfdc95b635bd2a64132ee2c24acad7a26c01c22c76cf4591e44c61664abc0ede41ec7cd4fc31f4cb86469b00b4efd96c4d107089882448304c4b4a7cee93a1cf4b2b47eddab327d5571520b1b4106b8ff5e0fbe84c8835a8f01913d2d0bb53362c5bc5d8519ef11799903a4dd2b3a4a03b18885321ef27057c22addff24adfa8db59aa152dcb73494df95e2bd5ee627c46b1f987e44e5b427e26572e26201a06ce1cc5411657ef5e05c3a150e16893e22073abbba97e23fa4e027f2a8635f3fd3fcfcfe366e6668cdb305618b92d9c9d616cbe77cae28d3c05d8d2a5daa0512c03e1d830e5918d03a45bba9ffab8829cf7ebaf86a6f6fbde19580f4c4995f5eb655e1e0dad2780b4ebb4a6c4a97a5b807390f055819fbd661cb68620e935396e337177380bf89f2a228c8a0cda51f973f2c3b388592480018d9e1d62e46ad781fce99b06c22822401f884bd50f83ac03dfd90d99fa6c15000439d2a70f3d0bf27e83d64bc1c1bec0f394f09d9f0d39fc4c0e70be4bcc0b019bdaecae8606be122f0a2966fa080f0cbc6e3756f2c17372a897a99127717ec9e65953123c0fb10828deeaf461ea9de1697501a6d25bbacbfb3eee18552d511bbcb6611109277dd1d5e7b344ea721cd89b0fabef865504dae80ffe2258a2915df80bdcb5fb666cc15977c930732cdda6d4bb38f48345b227b286d61f5c924b3de96827435e9474b947679c994e01a80ff4b2c6c72fc08bbc75ec3e6a982a4a11e69019645a27a7bebf6b1d12e823fc227f2c304014e6f59f56a65f003e920bdfc917718cc70952e4d2ca19b5edfe7b05fa15e0ab406c1e71869846a99e03624c244e829edfcfa984593605ef38f22ce7d2996b0e555858a970966717ffe9d77392cea92d2b6963de7f700861ab3ee378e05c71019fc4d7de5180ef97691252a5794e51236865a834931a5cfdf37ed5082b9d788e4a2084c46360de8e047b123ccc12cbd0f3a61b703515333cef7165996b90593d1b7e0bf3c33dcdb047b17a3326780cc1fed6f6d3aea24665a256998f20dddd11b562beb114106f1d706678a147f614d318a3d3fccf5a9d73a7b6c0dfb78aa7bee24a072f6745b03b2efd292ce30fe606886852021b7bbbe78094a07e17c5df241e30cff96739d6e1fe18bee3fecb15100be45f1aa064e6e264da0cd67c8fcef6c82c03a83b911cb519c603d66092fbbc92a1319f8e51d894c3972227eb3ab4676ef482fc5ecae0464a0d1ffaa5c306aec38e6fdb19d00ecc237943a4228443c21a1858316d962ed0a724d73430c648687d8056c53d5f06ddb2593484b13efa91feedd84fdc5083ac8432bbc6818de27d800e14b7f2b72dfa1ba730b65bd249aa3b12fde0959a8c842d33eee3776dbc6c43e1228435708a463e9d7c994155b5d0f101fe14ef5864f1ba72fa2e653772701ea02c081175f2a1168da5015089a0ed532fc856ac185f90036e5a986519952f8fe56e1f3d29288b49ad05d5d91d01874ce41f4a253b862c3837ed6656f0eff566bd6ff91c96c458bd8a84282e630f0eaafa14566ac404ca516a7e8d2423fe1845973ba32f5c6b4bc83b168f800627e9e5c7655f0934cf28e17b32aa850b1321c1ecfff6711938259acc0abccddbdab18938b869caab4d864cf7486515e103d043a2b9ccb1f692b84ee072624dbd52bbd5fea4b83d159c89947acd3de6b073f23f27ec61ff034922ebd31fa6e859ec1ab57a9ff5e3bcd9be0959634327070bfb758284fe1db8be0dce415cdf36157894a0dbf8ccf06ffd58025bc3c8839fdf3d39de4043e820d558788737b0d019e4058ec0d817426f07fc91381c70ce3b8271c7beb6b157153bc90917ae2167bc1160cc6928e3a919993d52fdf2a35c86e21800a7311c700d6552c5b8b797b559303f899334aa2a1da2d9a95e4804b6468b4b9e6a75edee88ed48c15c6033ad5f7b72267deb1b952cd82e1249d0adcd223a8e627a00189c7c317ec3f9e9bb7de1a28a11474a0aeecf02b7b2e31b72546edfa8b68d3dd8e7bda55796cdb8e6d31724f5cb185b8597be52392a848cad5341d1726f93ab42de3d4b1f0d7d32afb85eb95ef0f2e8787d97e2322ae89a48fded15a666a1b975c661f8b5f3a69fcc4a6392d307b4d8daad901ba42f72ff30a6fafc23798f5714d28e2b9460ab7cf8568472534ef8635bdcdf1a8a28965b6d56a2b21283c25fbed006c61b2242a7b7f1d4c1325e0424e599262304fb826cbb8691fe8b708665b3e135c52ddb7567c738473c6b2c63c37d2bb7425e2d43d16db2c7727e14af29543263510104ce69b817a44b401dc816567749573df136989642c0c804c25e7c6baf5666894f10f2f18eba3625f5323788c7fa8f5b5643b91f8b766a773d50a1081730ca0e970418bd2c9a97098bab8afc6d5d91d057d8f069d99085b326ec1ca520f1295eb7b34727f40eedde55ea0e3de6d2114aac358e36a4681164151053afdb7e58edad3bcc7e45072ce5807c6a311204be0b7887b9bb82ab1ce450df3f22af95f43e6efc33f4efa98d1ab32a0d176c2d617fa6d5bf03ffaeeeca7585ba5174f4d57b971bf99bc4062e057a4358f4136051fe772eedc0fc167ada3583927d76d9b783b89409bc43b00d75e05d03f79228b5ee1ae735c8ca05ecae2b8b70c87a37ae61b04eeb0a7c69c50adecdbba04a94426e2bca9d726af1c707b408b3cc3a7f8714e1bcc525497480ed8367cbfffa7a00ca5893cc5ad00ef46dcfcc551f95fc992c73807127548e69257925b70c1599edf247d4d863024cc497821f8e26af1caa0962c90e43161ed37162a83bd6c3fda8aa106bb11ae76c6923b7f07b8ae351eccaf1e2e23e0fdcc370b7d6d8a6cff17f38bb95fe79430a4d4f51d1df429f9783b315f03d2b90ce65d598bb78284c387855d7e8ad106582e2f5d974d6fd4f09263e81a4953103ce3164399e104f742ee1f03ef5461397611dc3baa81d79501b2297a1c5f3a4faf6ec773970b81afc39e9bc44ab5212e9fd84b4b44fb6a002f93bf6e221806af4e33ed0b0d46db6437ab88130dd94e13ceb4d3d71f9002357669d8ebedf732099483afcf544963e65daf87958660bfa703178ba382e5025fc2fe7a2d05a046ef7d8ab6a20c5dfacce28f0b74bf064bb296a7f392de7c48a0fe99050a3a2d65c6336e559c75eb70ad7f6654f385b8075aed2c43608274422685ce28b88e859f94624c046ecf6738a63b45409337a76ed72f386025fe389211dc919f466066d62cffb7e5e1a7a5034fed37e8d57d9ab152daad27d35a3e2a6bd9c6548ace4bf0227ae5d7e865d24e3545e9a91d6065330ffa82b40626459f2f79aa5d435c34c0fcc47d49d777affbe58a3ef1de4d9310abba4f217e8bb88825bf5b43c514c1eb51e135baac4f64ca61da511aef2c147f8d4c6dbad30bf95c3e931a55def9cff5cfcb3f0cc246d8e3e44a40010ab47881faef2e8592464148d9a4d5a6968b25b8dbcc649896bd0aea136298d96a19124a4327c428e67ffdb0d5ffe20d3beac4e99febe5ce67781ecc5c54476f9b1c4bb60c87202f3adc1ff85c7d0dbc158cfb781b13f1da002531ffe77134c75e00c7ddf75d8ebbf61cabb0e0a779e8db6066863b20a377167124edf894c63241173f4b70b5fd19b77eefb4415fc82136b89320e11a888a1caac2449fa419acee59b4a8cd3522aecbb165fea6f77a11bba909275cdc3b6f403f0a4c7ac84e40869116dda8e291f6412c57ed43a31d48fa73204dfdc3baaf0d93b0a29077d4e47babbbac6b3403b490b8e1b9b7e37d391b468e331c42ae5fe8412b72815e95f10226b54b31a6863022190a014ea25fa6eb279a15a6c46ec470e3443b288cbbd03b7b6e8744d85e47031cf1d3f06bf311ee2f44dd41225e357d2a5de14584cded815e38bc4dcc6bc87fbb9c60b3685f9cdcc890610ee29816aa1a9108c388ba7b97dc174080ff34dfa3ace507864e5b96df3ee496dfd14972b2b6d6bdd15e12b16ddf8cd67bd3fb4305b2605e44d15f71c70bcf5d0bb0657a28528b5fc613e722f97cdcbfbe7ab44a8c8a45faa5c90ff51043b6dbf94cb60ce0495b87be89c114ef7b9ab5869fc9649227829f70100d96583150f18328f6aafaff03493de54d8e464b06698abed228cdf0278016a34bfb29f97f56e1db8cf1fb5e9d2e8a1cf233a325e752a20b24d1cb0d20aa6247130a9e283f8eb1b7e1de122b28c31eac413e84466b904bbcbd17706cfdaa199ec082b8ac108ff311ae81c87f9823e1b92a2e8089239ffa4646d58e5839a72ba6255a37123e1f722384517793a1f8d8531380345dc46cf8ae980a9c1caa7df3e85d00796f4e310797a39235e0e966e2e1df599b540f5cae9ab6fbe8ccb9728665af059b867aa999a35a6ba675e811c4ae9ebf0f68accaad791cb6ef6a47d820b56aabbde87165a2ed003313e6be321f175cee05c1bafd799929208402b04c33d474a55a88a1e5968d43d649b672e9e4b85c9c57fd5bb4468f87a73d9fd927884d6dac359a222f60fe1abf474e5ff2e91cf8642f6aad4c3507ec60d2070eb33227043c3c74086685413906f388365e5c4ec426111804296f7890ee640dcfff7151849aa300e6610705fa385c02e45c3bfb9b9e29ff01e443634e4b7a589609e5ce2ebbb365c432f14172fc7016393a6880336b5ccfccea94869a4265a882037b7d47d6e530e916d3ab66db29214168ca6d783d3b35a0aee0bc39f52b4c2c87b385e2010990d02424f9f4d022711c39596141dda91fed373b6fc8c8e4af04ce077bd03599de06b4f30889dfa2745e090618c4f449964d412eabe35691df6fb5d23fb2e3ef00b5c3adaa521537af336ab05f8e6a9425494ba8568c66671b2c3c44cbba7ff3a915db1581a0b062fd88824eb3419fece1323f9265c774107e86690f16ca3f41c60505cd580edd6fe79b70682bc219d76e4ce09c16a5112a256e6cfd8849e6b98a0d676279655b559838e2caeccc8f68c87887adc111aba9b43018bc813c2ec2c45ad9b6a59edb12cbcd958ef2c8d0f3faa079193361c4f3894024b6fcba8df3474b5e44b7431fa21efa6c1292fbd53ce8bbc498da9f72dc21aebafadc8c2d580036c3c4bc9fc0b2bae17c179fed6aedb31335c7325846647597561bd48b1f796dd973547bd56d2103fcd3bce3d848a27e4912f93d4c5d4d016138932567936ca30f631d956d808e2bf2579e71ada644d5adf34f3c1641c16ac98f3df807fda6fe834a09f24701d324430ada6e186bec8e6b54592028c4855f2d31c52f99d2456c80afed1b655bb3e89828333447548d2ce13b525607ba792a6eaef857b003f2b58084558873aa1128113bb7412f02da4d5cb76d402fc55296248fa0e5b23e2f45c75d84ccccc437257a1d19cae3cf1e25a99a5ed9e1b59adec796a3df34f640bde425c55ba0b889b5e036a0a651a2004fb3740aa66fdfe80f33d593568783710b56acf5083a157d67f54d0c28da877cf774675de524f410eafa15caa21fb5aa925f0517f6a4050f13b8355c1021651f94a950e82bb7cadfcc2b62044f2dcad7e9419bd28c5a9660a4d283e8c8535b6945d25cd256b2ee312d7060d9e59fefe086e0ae07888d7cd13ec8b60f0dc338817258ba94d985d87d6c0326a3f79bcb3267cd9348535a5ec7e16c6a45179a68e7cdafca3155a1193769ce65b4a577ef7e5a0bd2b146c9a684a9e7d5f353c5a5bf87c8b071797e63197e4154234bbdf4298bf469214dedf43c530074ea09f4349ff9fb54b2cbd3eab621975a81ca6fceb78bcc072b9fdfd5dd1978403ad71038026b74da5c4f1753fc6d6d349d06c8769757b31285b9e908df039b194a5105e9f1f98f5aa55c3e29646bc06c9b01dd48fd30335abb64855005b438a6bb0f21bede0a005ff9b7a743c68e2bc87314b605086913ff5f076f0ddf5ccf2a7dda2bcb841bf635fe615c88a09956f1ffc88a79fcbf9cb3c9af91a26cbf292d0f956b5088721693cfd1d5b2a0d5692490e4adc31f89de63fad4b0e8abdbad78cdffe4affcbf7823349d761cd711d056033706111f3ee2efb1710350fde91340dc44899b81fb3a5253f0860c3afba070e6b8310b26df59f69b0a25cb9de0572527ef597ed0a3b57d15b2dc13cd6b13690895c3058a5b3dadb9fc459584e5117fb5c99cfb0c278ef6b0e68165526df0fef353f5b819445537fff492b004d1520757bdfba5ef7651c4c4ec20441497e9b232bd056a39395dca70ac2c1d479cc042f9889dc18c8ac20f5644d858396376a372ade15e7348453f50a87b2f0d46e89c728d8d2e40b8b384f67010126e0e1b9bdeb0005380d87b632be2da4ca84f89724168de0c19a8c31941ef7d3bc4d98ab7386f1ed0b3a874de23841c85dc69cce70de932ff5b174f2087515f4f6c6715180a2e75342bff58e168afd3cb08892e0e5423fb94e1c9fa666c537c2e1dc88a96db0a8ab4aa735a4ea269c714fd8e9e1704717234a6f04a6bac2b97d979ab575c4d18d3aaa867d345a13524c797f9d45d50b235edc1284f1171834d3a2d7916ce2a25f626363fe788cc3935aea1efb00504d1f685f6873bc6cee47468242a31145308e1ba3daf932f857e27632518da1fbbc427278600468adbed0d390c690ed832077cdc60a957d5cb081d9f3d123e1cbcdb7c1f18f8b33c6d6ad089ea6fd9c7030839ee7608a4e8d821d525e50d05bff1cbb35d94a2618e62406bfee78a9ef43ef223a10108ded1d32bc9c358272df73faf1531d6541b434db25ff4625cc78143da22973c4275a25a40c6e559e60e280eb0d7881cd417b539d02cb8cdd50838855e8f7e5f9f22dcb40f20d492038dd13e422272812f658a6926962a9b447c67c14f58c81f78dbc15849efad29f3e46e30cbfc6188bd207585fe050c4983d42f57a5f41334360030bea0bc1eb355918ed394613b6bc00701cf0223391006c9ac8286136e378335c938812459d4441377fae456d9d42d9aaa7531caa89ab2abcbb1c92e2966ddd258bcfc15c000f6b25c26c109140403dea16bf0fd9a7ff1c08c8820ab6b2f98bbdb6da10107670d965c2c816e9a145aa680753431394292cb56f874665348115059c56938d6d5c2d6d977df11c1650f581f99e9002c19ba1135c30e9273eea7c3ff0f238e126cfb92ed9e3bbb6bb58728042c9e123e77d41c60e1ca5410306f014a6fc98e50a08c64780acc1fba49717c24ee96778ca3c8480718727e7c36e32889a934954897ab7cb3e8d8f1cbb0a506a25c7761fb5fd420ee9810c6736265e4786930bc2145e0704b855d40fc886e5eab6851db42eae1acf42d9f17feddeed40aec46c2acf541bc1754131eddbe95fedc315a90deac57ca9647a867a3f0a162f98f5f813f46a365c55b39c26495e53776b302385a3922f513740012341add8bc60640ddbb9a3655d5cf9fdfc756fd27b6d5b8b0ad3864c867b351ba8f2e9e4922fd9d74c5c9f56c98b40287267265f3827916e8990b444736c0294d9188a7f447a786d3274f0a7640e744e80d02c044227ecfde3d724b8836db23e0797d33335f0eb4e3a0fd240ef9fe2b0fef7d50071e2a3c3a742acc87e48ac416a399a0c6f5cc23316c6c2e73b476f9f4ee312158e4a82b211cf718189765db0436e15477d04cdb7503c731286a5219117613397f083bd350333591675f415ad6eb60c7cabcfc38131a963f905390d96ceb97632a1842b2f4a8133aebf4f2a89cef08feca50796ecb3b3a3f1b8118bc8eab4eb7c8ad20d7947e667bd675a5493a111dd3b4c6e8478a06cc773f4b887f923cfd51fa2833c6f058a00d7a4ea28bf70e452f21a7a9814c5e6415e6ce0bd51997823ffeb29e69a5ac7930b88dbe5aadef4172db8109b8a4f048a72d21428159bd5e32ccb67d9717e177cb3c9ae5d900a8044e2d4c9d9952a0a4163490d6d8a28923a2100acc6826dafd4575e0a8328f4bfe6060af0d9f4ea9aa751a6cfcc9e9ab3df921c7bee50bc7a363b29131968af35d991f7b719144e753277bafc7b0ba3ceac4879a2ac79b7a1ccc9291333a0287914f87978b6394133ce508f412209b835e277ed48fb0ddf904c65fdd639abd0485bc5cf3849b23624110097e06eff72ed1cfcc56d4e6b7e802b448f01a13cf1b674bbf3d2dc1e5b8c240861d2e4b1c757f9b2287cbec1283cd57e4920a68a7fb5f2e291f553f4b5b3d4fab46be72d6073a419244185deb475456dbaed79504b139f8d60d6cba355f585ef58947b40bf014020fb202229de0b970b9e61e62949edce0108d3fbeb2a0d4bb73cf9d85282546a0c8a3d1f5eef9efec0f917c6aa7068f5916fde4eb5c2830979ebe1a7048d0437c8d32055719acc2b9239cb19883a33783b24527498a8cd07c6005c6459e36fe8c0f386f708b7cc0be11a879a5494f01f3aee9b116a0b2b898bf3f4f55a466e2f588087cc25fd39e9fdb203cd5c4fb5be350897dea89f4ccb5c12793125a1e4a5a8110f63ae6293f94c23abb8943ea2ec522b9f61480ce08fc9fa2ef4482330d0459eb449e6e74b4bacd1cfd6ef08d9a3220a89740c0f610521a9673ebe43cc49f4352fa906f1452465506e10c02649b99a02d1eb57ab38d291a6483750d2b3cc72d25efa6b8deab8ed10fe38be8dc28c124bccf0497fe6a295d198e41eb1667b8ca2b9681f424187236664937da5b51e717e2e6480554050023d75c09dca98384a7aee130f9dd2689f7c14b69ca00d2cdcfa46371c4522a6ca2d836abd94b732efacb8d001bdc95b6326b96d436f054a1feffaf9a536bd48ef90490c49bce6ed2f7f0408b4b869c7be2d3235db0c08a94c7361bc7a69228bbefdfb3510d15acd64341cc7ca280f6eb1746bec009603e9448de56ab1a6ccb9130514ac05c7b47890a6ef4703bcd14d0cbad280116e3fcce2ca9f4da4fed3dc70d04254cfe8c60b450f238ca4c207538a8497c089da21c9f216fc80cea45a57bec52ea604fd870b84a04a523086fa8b8846077db601c58324583d02c0b57587272f1dedb67e54938bc10b450d24810cbbebb6050238f227d1efed4fbf56aedb994dbe3514904c67b66d99548ef32fd0f2edf4595f0ea631879fd739439bb68cb55e14d984b16d46e07e46906fe8c1a4b4632a7ead77dbee1f0697fbefe3c78e8bbe98afca293c480ff4ba71ffda5466b970469643e2ccaae21d65afdfc665e45dff13040b3001a221a240636149ddfb871d01959f6ae29858e52ef0b0fe81e35ef1de00f98808e5c80dea875d077f928879d8428f45bae9415f3edff4672ec9add42800d9d06bcadadd7b98362886cc45549d8eb582d4746677ce2815268eac78d5854ac34758decac7f0ee60645234c4bd6e3eb365aae63f361bcef70994c39c8a91198a5ae68af7b4474842a82cf3cad324aaabb6354537d780cce3e21e9aa7798889a63673b32f1b619315ad15728791cf428934d790305c67cd056a47e8e450c63dc9d2d159475004d554cc8000ecdcf7379601879d72ff5671db2e7411cba0c0e9f93edca024a7ae44cb87a044717d2e168b6b27dfeaa81af632fc99a66da26fb01814ae2a32897eda3c04baa28b6b017d8f16ed8dce7a895800c298d4bdb7d5db04d2bd52dda89319567f8f88a01a0a88b5126687dba8afc174cab9cd727b9253e8260937e0c98df1e8ab8846c60b98bedff6f737f628dcdf438f33de1c0e0e460daeb50c057bada445ee06e71c68373e0f0898e6c89ad04a0cb219548fdea38afda77fc73b98c63744a165f46b9dc3bfd2d37ad0bf958081ecc2005f46aa31c638085203164be9697acc88b1c7efa613da3ebc38644638d07c2b094b046f6a5e01d84c80979283294e6c33668670d3f40a7c4b2a310b33c6d11bf434943f1b4a88248cfef2d099901c60aca2b9e02867c2f1c247d3b4615808470dd53155fefc81622d1ff1c26f3f05690cd6e90beb8cc95ad4fc074642f0ef9c55fb0a6c448abb9d6d04c6c9d5887a42a91e5f772e101c4ac08dc7306ea90c2095079fd7b0d7d4db6e80c9299b8d30e0a2bc123bded94348732be7df3d116866acd781c932d93de38f8ab227b8b24fc2e328dba86793436a11268c9ebe61ee0b7d3d3a520240cfe290d44759b319205754c22ab3e698303e0e15cc6e803469d8a6ad3b50b4033b1368dd8a600767376724a384159ba57e52c3cbf9d7986bd19622f4585c6d9bf58105353c97f222b811bbc284e6f748f6c472069f82a80b9c6f02cd76cf96b9f7817bb77eb6ec817b1d692c941ff459fb5022072693deccb95fc87862e524fd8677102e1c91020aee32264bff524938fd66ec1c3ec939a7d6a57d9a4ad0bd0d46e66e882c27171a04d7a48359ed7bad2577b78dc506d7a20a938901735155bd40cdb91122ea031a484b1ef2e7a3919418a3c9ebc03a4cf795b66d30d89cf22fc5b755983d5c460ec75882d0721fedde7623f4708b622ce900dc1873f0dbe8d7288c2284c6715928a0a1d4917d92bc699b27e66db0e18b164fad9a3694259d75cd9f9bedfca8c963f927fc0536a5f929c80e7b1609993b2b750cab83800f05848ee9c7f6bb2086fe618f901ffe8801080dd2027a88b87870d0d0e6bd08b7612f03af0d1c7d2e53883025fa7dd498ec22bb10d5dab451833988af6d7b4e65aec67e187495b2c51cc9ba441c989890f67bb7c832cca869f7bf30694d548ae1db25ae0e8d596c18881e85b03953e05a9071c7e3a440fbdf2e752e3fbf7f626e06d767d099de7744799b794768e8e08ee40a26a030efd796a6c951bb6a1852cb3e0161b66e981ef884dc500bbbfea78af33c0d3cfd3698c04d82946ef05881933150b5d850c4496d7c496a73705af7a3e71d03b584920c7a0f93dd69707a4df2613c374d69673556929333d3f5a14d088c5facd53ac661c5337d760af8c2470747f76cdd2cf8faaababadcd676cd1cfc0b59ed2388023b52a2f5add0e1f223f22971b3449c612ef487cc64237b9edd5b3964e4ce4b00cec6199aad6284b57fe25bfedb4e74ce6a219375da0a338aa5c47dbc7f044567fa72da68267285a423aea1e9c2a66140bb00cfbe64e893d6e4b2f41fe76a6f686af39f1d6f1038c893e50a82944879313e8fdbf05c89bab36f64ea8523256e4fae194374990c389c4fdfd328d412ca31d42f1522830b4c785a7f025bce40460836822a034e3c61df56a71da06f4beaea353c989b59071450d09ebef6f1c74eda458bde0fdac274358ed2ff07f3eea493a40b4acf4fa67f3b74afd505fdd463dc60763a57e6079a0cfab082d3a1cdb0a52cb206548cd9d3ca7c1ab787a476a04d1becfbb13f3944b1f6257c37e100f4366fab833797fafcfd4837515b58d7e29eacd09fcaf2a9d658ded35fe59486dc45543cd60fed18cce35b2a69abe00335b4abcb3f494b4e68bdfceedf27659b365c1ff4ae40326265d62bb443c3525bc3cbfc29e07b907f71fc7e8f01e528159909445cd5eb83a976761c5b188588929ba8f5be25e93dd87e0c6d9c58fc43cf233191df7f2976b60e14d26d431cb5182719011e04ac4b2622eb61de4c8985b55980c186528261daaa3c00906462fad035dae4772a878fba8801d1d2d354b83c13d6d20ab602447f18f0a1f551fe3a616c13ea3ceec327b9550b67ab9fc34ee2b80814f94db48b1c8a4063c25243e33cfc1b56bab7aa8c3ae2a731f6a20c4a8f59f114333310784f0271d4e2cde0d179581e2cfa5c5715a2dcb2aca26928d49fa418e4aff313acdfe40a13b81dc1256a918c1c44ba52056ed8ad14bf5c1f0c282c3224a2c13c84af5adb25ddc6f1e220e9715894e94264ddca6cab060cf4316d2615310c1c04de918f3e5a43fdb03066853737bd77ffcf05d080d6576bb10ba7eddf4a6aea3511c0eeac676ebc755f65bdf1277f4e6e0532ba8394a4f0af22ec37b3d1cc4032a0988b7d7c1e15aed89aac8983a81b457d81982b7c7521ababf12638e04ce645b8be7b7a20515c8066809dfc0dfd587fa47b2967fbe22c23d039f45be491e5e11e26c6d4228db46f83b50789eeb170ac971dc0b12c3def70835ac830dff0587d5c3f9155552d7ca19d76b6e2cc1192dc5b4b625e51b2306614d8e63c7ddd2ec97dbcf76026ab33225dd4cbe0d900ec7ab3f5382653c7ff1d8156b7da4a8ec56307e2be24421d294f93bd9474da821615faeb4792df78b82cb2401bdbdfb9dd8852fef5f0d76c012a33167918b2b113b25e2f2c09fa1cb13e2bd21774020f5dd1f6000ef235c5c32e09824d6eee528960ef7d845b28cb35c297d4c06d33d3f9943169cc098cbd3591823ee9161d896da7c4a7f3e3874187da6fdbd811615254a16834b548970909c0dd272836f8e71d91149be9fde1771545950225ceb394536300601e7e7de39f6827a2b3035982ff3c0bfc1eadc4455ec81fba497d8a1b24c6cc0e9ed0748f134579c6d09a4f2018d82e46b5d67c3543c68de8ba61388f1f528a26aec8c7a43788b78391600b68738754d340cff470b49dd1fb8fc9a453de02808083f0bd39894f72225e4526813ce2efd7c56b36578679c7a18c57d6241b23ebe7ab905835c7a26f25477f552d476c878b9ebff364f5d8ef8ced332ec53aa376ed3ef6f8fa0ebc11520bd387e8c607094024d7871e1390bbe8cb3e9adfe7aca54aa43b5660efe1b0940728444794c50de2c99bd49efc8ce9b8cae779b11f62917d20bc24b5d55547b437fcc1901d315834fa5ff52906ca7b43e594169a82c331e5269b8bdcecc7288fe0f7b089f6723d892c6ec60303f453d72d13338f3427434da199c9b723330fc345c4cd6abb400c8ebd707f0c2fa4480fb6b055488eb04f63a284f6a4ba911dcf10de015aed8327c4cd4e04e1278cf92ab730a067b647846e6af9f881a2ad8758bfcf35f60981812f97ed0a0ab750ebfdbe66ba46b688e1ff13b3d966f626f7d197c0bcbdbf2ff27394eb3489163f5b28b25702fc6fffce603a34c85024756111ed74744c495512c3b0fb36ea72d2e3759e02d5c47d17c251385b261a27d5b9c31cd96c55748034ea07dfd0cd9517b9ee406ae5c0165a023cca0c5ed0270bb73dbc330e263db7569fc84567bc4781561fd19aed2d27a58aab706bd45286f85d4486f0bdf1a7ce68a5d72c85bccf40f45d571059f16b20d613d48d4943227b142d9674b876872d3b6fb1cc13c1ea7a29a231803a039a0e0c9fe0fa241b299699a8ce98f5e33b0838ed2c42ac710075d2a855a536ad2fa40b4553082cfec1bfcec8a7b3fe0fde289b4245e16b75d2cac1e470da4e08c7c20ee0eac66b53a0f6081125392e1e8fa97218977232390a12c67fec8ae9c945d533d034fcfeee4db6f56aad57cd4d35f1f8a0a1c06c86f89c50f9624721c24565b0e7f92c70bf5b3201ebd394acf3e133126aeb084f4f7caff73c55d7a889145690cd8be75fc4366e5588d875f5c8b1f7a3b3c299ce6c18ee3264adc5f87c1ba937cacf785127004212a4205fe426351143fa6bc36d919efe720f853808215075ecd1dcfde0bf999fdd49cb9792d0d182a1ef9331977fd5cd6eaeb8b860a39055b61fc6d30fd4da03334e38632ddd1aa3e039c047e1ff7bc78562b19354efb45feb7843148cee754efe8c01488ecec4d3c2c6a3c46854f4de2e4f4b75cb8a883b79cba653b83c2ca082ef04bb886761fd327562916aa054773994a8f7b4e4f443e9960fb4f4a86cfde1b6fdb7c6c27af51aa447751198a6bf1bd98ce74b85d464deb36b70fd2987aaed1596d1272e0c9267f0a06459356a2e2af987a45cde25a91ff6f51d660f16f4adceeb497c1f5afde341f00edd5b57d759c0f3515b4f8e4ac1014bf55131f5dc9fc5d9f4cfe31f246da02375be36fa5a97d28c6a2f2771d9026fdae62baad096141b0ab53f125487e6ed941438d702edd4b2cfdaf2671009b354acb45ec58ba2d40a214aae2c052d6f5dce96000d9b5fe0dc17245a94ecd48dcdcbb1ea44e2038ae36ac0b789f780998c03e329e0bfbfaa624998adbc5b23c2f95a1ac89287b22bac85f97ceaa826a6942e890f1b4a4ba260dc226685a2214314d3669c6d6f770349d875c7af63616bd0c4bf47cf41f1b763ccb60d16700c53825b477b1ab158725357d276f46cb0d7fb545647e0ae521d22bc0006e068bc728dd870ad3c47bd494c2d096ab8cc62e556b20c1c9fb6e1e4ab0fcc9e066da64017e2e5448edf4f16e311e3b946485d70925b421eb00c22906f259b9df45c2e6be46b084254455820d5848a931509080a29dd162419ca24e2e3f103a356666d91e11c871a92a2eebe1dcb1649ed6bccc2d1f8472f823095aa68c3a974c22713e9088dec0f87d8ecca0d225c143ae526246c934e20512c3dba8fbf1737814e7516de89a833015e48fde51c6516f545d91a4bd35c99b4ab879e0fa65069d562518aad869dc2123675f00efe7f6d633d388c1346bf1b177f9ee6e3a80b19a80be7d8908870b43d68abc3aac8972f4202dfcdb93f69aeb8b1b98765d2818270352009be943c1bbe2f42a1a655db1f0ab7e89ba5e203ee9806d6f42cd707f2b722eab0e33dcf59049e5ffff390df1349100d8da5f6b464f69720a165c8075727c908c25d2c65faaa35a3195ea4800064c7f4a6407cb98aa4631c20c675f2be843b8a5af7e617021d722efe7e27b08b03ebe8343c345ea319a9e3c63781bbdacb3c69a49bfd2f92f7534f804112c47dba691ddbe0683a93cd739bbc8673f76d0f75186d8f32c74a33eb527730427665373516bad2bdb62709788c5e169509b4c9b0df744ea02242650d62d6fb14afc51718c282cdb86214301d87e7573b53fdb34c0bea8f2f29ac9f552c94c1f01303c59b4acb25deda9d41509bd9af3b1e0a064d15f023d55c6aeb352c9f8e2f417772a43a2bbe7e0bc18af77d7251b938316409dbbb2171c02745451caf97e827e54994d179b4fba6eeca0ea129cb76818847212249297f77e67bb8cf2830104980f59ae19ceedbf984f9792be601b41c60ea4b612137eb0b80928a37bd431d5e324177f48a217c3d6f2893fb93447d764154be97df1eee2e05df5d870d7b79a2ce923053069085e4cc67dfa4ce671f2716f41e0706357daf546fde9db6f6b3562cff4d079ab4bededb8dda49f1677470173d5f91fb3a2fabbc96ffa94d4570fe020441b331b789fcfada243d811b1d4e4d1ef7a0c79dddfcd57ffb69a8eb5619df093bbe66a3e65179035f99804adabd952f769d9ed48e78c029f2316b5f814ece844067cafbd91a28a5cd52d147bbbb763a47bbaf63188b7fedf173b4f5e96748faf99bd97258f143cadeca4bb8953b01dc7996f978d72fbcbf62e00fdb0790fb611b4734217cf42f5eede7ba3931d8cbe1e3f8c0782a3a77ba2190e4a0633d975b998367453d84792421a1e877733f142f0885e31f89a2b732d978bd24faadbf40af4d4e1fd253faec2a5a2bbbce4fe80a340873b4cbaba5381304c2a066e47274f3cd32e42afedbc88e7be14541895a23a83f19849ba348b373da3c8c4f2a8a1ed93708175d338523d3c015cf729507b888019f917929c55a44687305c392d88bf76e351647df2703db162b3e3ab89b232fdaab3c11f3b00b2fbbddadf045c313a65818a414e1d5b8ef203db179cbb96eb4c2a3662c4a566c89771047a878fde146e7ea4b5afb7fd5e29c4268e25a927bd00fab1ea8e4ea98f027632d20909a94551a562174d191922620f9dce08e2b5c7c0f3e8eef20a9d61f7e98a30f90eca2cc1258f79083372e24b29fea86fde7e627115c1b97e85a2084749a44fca916be350358c7a086634408556cf921a60abe0b29039772e64995ff32fa64898f8f264636a2cb636cb2724a86eedceb3dc0389d874b8f46f978040936f3c5fe963fb3cffae60bc98484df6daf7ab0b0afed4b29a6467e2d462695ae29adf0d72bc9d9503acbc6c25dd240d9e2366563aa95d19e3ca018281a02ba4f4860f000ae027fd606af930728e4cbd10851239e7af94d175f0efe30bcc6fd28f0c24a6e366b1519c91091bb4efac1c79970a7e19f69ef30c40cd5be616a6adc5c3b86ef9a708704aa051d3607a7826cce96a1039320b5bc82dc641fe685dc6e4e740c68000e12acaba02115648fab1e8a5a561502ec6d7cb1bd9f1d3c33e197ccd3c8797ad9cb5263a334b1d68e0b8038536a50831ff00e4f308145195f87cccc3d31badb00260d9f116c71e5563b722191c6a3e2956163228f17c8e432554777f13d28b00f8bbdec487c10032d9f7edf90a8608c2ee0619be372c219d1647379209d927f690993b5aac4de543ff48bba8d1ab907f0f5cfa86e775fa9953dd92bab7113f2149e506a4e93299313249ee48536cac24c8e5c2e08337f98ebeb15c7d1593d6efddb66e37cba1b7a7e7664fe02f532a5350b51090eb8e46280877c1112e9a814ad2e7d2c26ba7779a5e0e07a2e41af662e229fd477d14a03d64a50dc87863afccddcf33d58a8abee5abbaa8fd92131134a5494622e50ae916e17213f96a34c8e5b6b2e9d684c52bf31c0a1d456fdaf8aac238dcbb755769a2d4fb5e36a9dd656ad8328f008c03e1fab7e2059d92307f0920d5bcb2a2a19f1ef2bd2bec459d33c902bab04cb64358cceb06186133882acd0d6c61dcbd08609889b751e1053075bd38746a7f3fee267ccc639b1712f2e6490d2378d75e49d0a44c6936f80abc70d1a05a5f07f9b595b6487fa867528db17de1f13f33b1dcbbf3e3492eb81320035889645ee8a7b86b7313bc6faf4a3cd1f83b91a643e19cdcb1843d24bf287f6e5bbd8a1091ebff2d83dda321105eec6ddcc2e3ff1dc7beb6ad17930392ec912d2b5439e05d5890f1dedfa60bfea8121a82ab8e83f6f355528783881d89b424337f03c246bc12d9dbadbdca9cf3aef0d23835635d15f819e9e28bd3a96537beb1acf956645509487a28d612551d7543a72a0e56f776330d4c751fa23905e035409deab2e0bd31453ab15049ef49b45bd5c488c13b9ed77f2aa524f33cc8212eb48e27d948e96965a51f0aab186d7fc652a994d3a1f25de2d80cf60fa191e9f90d02f5d4bf37b22cf0352bfd897314894fbdc0c01df82ee83c632d5fb4b1bcbcb79e45bc5bb2a224dccd1a80bbf971b946a6f75110f742500d929726bc65562371d75bb378f4f1831ddeb6fac77e5d20c93015b0616120031cfc4504b795cb379040c2619aa9cdbcf648f40e5f4244dbd1957f2aa882365afdfe79723d409715702f60e62d6221d90c93a12e9a4d49a22bca2cb4227e5b36e6ca2652df88e5dbe8d5c252d52f6e21e4d09a43bc513d1b95bdc236b900af92ef306dc5e0ee5f55683b4b48060f3e87a4c78951f30f9a662786d1db40445ca7027d17bdc25b317378e29a99d915bc724232e3d6f01caf4b63309883fd52bf7b2be560f99b05048d1d87236606c981ccd9f76218553937456ab16c01b0cc1de0209d71280b98113534a080540ddcd947d445fbff870e7e7544b1a617e61aa70be66b19df20d807eb261fce6099aee0fe4258a32bf1aaabd09a53497da01b070d0c432d729c17ac9bca1d66260a33f6b523715f5a45804915083d6959940bb4080236c143087820f1f246dfb4c9de0e7786234fc7d042a5db310d82d1d240fc95908dbdb5d5a0118d4022c75be003dcf972cb3f8a70efd646ab0ceea4dea01e2c70dfb409917a50dc968bcc4ecf42b23b91c7e9487324302c4c955131b51c80e58bc1a2ba753c1191593cef9e32b2ed27372e55518e9dc503c203ffad12bba960c9f5d10cf15a468c5ef10b3f8f1b159647c6032e9d2c66ee8f89465716a6da656fe1c84aa8a847e710ade6af1e07ba58dfd0d6e00a39f5a5a8697b07ad2f60d3ff3c71079f7b86ee8f5c5ecd58fe0a97573aeab4cbc18e2f7835d7c3cd8390b54273c8fcad1a8095cd42330664f3d920b16cece95c8c97f8ff70b8b213345790320e9d1d6d8f0131688c4f15baef502e9297f5a325e3dcbb237c5f744d02b6d395a8e40b6582bddc6cc60c8212a77f76dc999f645c49b11f7e1c79277a94cc3a6ba58571498c56e60f51a9b6f53d1c1874bfe53cf3a06575feb278407eb1e1da117c1b517d3f740a10f34f15c3a270a414bef7359ac187cd52c78bdb4d9ceb8e84f938f7ffec382c2f73f3df7bf55d08179a971b21a0585cf4dc7c8376973c91cd558a6b1030481b981b02b9cc388efc5df49e89411500d6376a876644cb46358da491033202b151660512c7090f8033e67d2dfa234b7b702503f342e7119455b43030f6469efe855d006ef1adf913281206918755181f63b77f7f93268de825a940ce44bec41d6e2b6602db249388419aca4869cae2b644bfd406687ec66d2ed2e7ad5517aedd33cf3504b2eedd923a430ba86adaa3c26f4631053bf809d6dd58b1063f8d63af374b5d70744c2cdfc39841a6d0f142e9d2dbf4e5b6b83b51deef994a552d2967599146a80e2127662b74741dc7d0c0fc54a0b31c5c2553f558f29ca714f87d862da3753f8131dc82ebed8ace7102453d1ffd420cc823b2b448be95fc190160fb42e925649e10c87e91effb577ed705d32aeefb2ba65ddbf1371c46fde89593dbe2082a3030a0094d6b30feb1d5d3b958b46031ce5aaaa1cddbdf1e8bc2dd771e98a7e8b0dae249e136f4c05c4e6f2608c2cf040672bc1688e147fc4365c041140297314863e64e63ec17315418289dcc94c19a813411c2a7a4f3650407228ec6d5b48670b9a2ca0160bd50b0d50fe184edbd16d1144afaae16375bd9834979a2f0072caecd80021bac6fa609e6f5fcbed3ebbc473d3314cdefa26d427313abe6af3e58c9dc1ff63eb7e6ed5480ad0f85e02509cda23b974be892c65cbda22bcea5e667270b4f4eaa959797d7d8334d02f8991b0159611e1b14f98ae7a6cc1a746d6b4f8d69bf60ab17312652f8b884d067b381620795734e8fa13192c961e5bf6c6e1408349d2999d467b06d88af19c0080a09168664301d7f9e974b31820443b36afd0bd63eb7cd6b6c2f2a07d41a321379fc14713a9952c532efcf5a4ac9030c9a56b0619fdaa4ff4a893e3201bf6db264299fbf69b25968c0295a290723407fbb685b4f7d48ad164213504e60c6ca5ec6b6dc362b4c496f86557746e0b336b3302ca4e5d929e0ec28755994aead89618255f932f51bfa4d97c503addea75e21bb2b0ddc409645842060bee8c431e2b1b574ca545bdf5f26c905df6f68daa77ed5531e56b6101790c5f22337c97b67f3bf0e95ef0a74b9f9ed1c3ed4f45312d28bbbece5fcb95cf1d124d9bce22f6dd9b0d7b762ea0cb2f900856947120420522b6de12de34278dd43f250193f0b9c38b456b3a743c64f909eb37c43d31b7bd12a268038454e72fad21e1eebb57b659f009122b3e5b2c9879aecdc6b654da62ff9e2dca36a111d7cd130c8df0cff08dc3f4b703ff6f7e4b6470c8d74c7b5e483b496ebeb3a4cc0eb603e403d7a12ed3c48249ba70c1216720f0e717f5b8080b0bf84728f696bb896bd724bdb11ec9e5adee8964163ee8a68f0a757511bdab4e6a1043d8dbceacdd2813d214525850df94018bf9557f5a62b55d066cabf754e75f11addb6849086ddbda0433022103acb3038464cc057420d29ccb01049166f49883260567f2409c7ce1bc1471414bd5720eff89847becb9db78fa63f668617c483a67ab2f251f930aba29725a420f4d1918a5985d823bd3b1ffa2ece3a21435c49def1856004f00c08ae75167c258ae6ed862fef1ff2b83d8a33e3cc27ae73d3242ba8164b299c2ada9fa6ef7adf4f3d26004a14eb72e4ab8b8cbd56716095bd644dbca55ae38c0e1c4bbe27b7ef75c5130e9427be095cec52c4069cd4b0188de7385217f5c2f36d5489d77a5d3536a0f96964a6720a1098b21835652c8ad04a54f717a0cf29d1af10fdf47b3dd63b0d1425cdced3268002bd7e8060697c7c0e92c0eabaf74cbf9aaa83639a6fdf6bda5b46b57c2be7fabe284f0485a7a1faf83d2553ebeda1fa545ac56392fcaedb57babe5ab7a3713ab65436bf828311b04908f1fcd0b6dc6657943def9bdc1e66279626da614453cb19c3dcb95ee0fbbfb04ad1a345cc9a3705f69a05e7b7222f93faa9ccc8786e87ec3079933b800f79e55546f02ab55211cd17ddd190cb719486b7d0c7fec6c2d102521c34b27d2c29c5d211ba98f9087e64890efb78cb02ab3ff7f45f16119faeb60a29b14dcbc2c9d1d7884115f69eee54d708245c74fe66b35bd60aa8b54b3876179aefca0ca215d1eccd2a15a89a57c9847bafd68fc70f07fc8abe383872f6e9505787b2fa65f0b3c09014316c95e4c6d931e94e760353e83ab8d397532d56cd8928e09fd5c1bb4966852480196cb7a5d64c84dffb123e8360033f6e0f3dee70f8ba9e87dd5ac543996c719430f738a5c62aa141b0c896561d4c327add115c9aa9c304bbe76e01f88004cc0cd08e8d5f1b748ff61d132b5772d51993da1e6ab029beafa47a3071fe53174bd9c92d0d7c930dd03f4272b90232c1e3027f87857bb79f9af71590f8398cc54c9ea18bd67115e95443c360e6d6f264ee7f5d65326a87f5f34591ffd885b228daec98c9b666571d0c65376f8d10da7fbac95bd09f36cf5da9e0459eac11450f74df131713a291c8f6a7a5dcf37720fa7af31e0d01fb3652b7505475a16bfe80016f8bf09e10673a56ff137b2ded3d4d08e14d6df8be6257edc7a70f6a66c088cf324cb80135d16f76f2bb75d01774d65682cb2cde485e720d6cba42e425e5f386d15e40c6bc914bd6ecbd3290593a69a6ed509f29377132912acd21c90596b3b7ad53058bd5aa9d645ad2f5bd8f796b00d16fb4ebee1fff2148b9057c07f9ab58dc725a36c4eeaecf5cf4cdaf74c550d9c3c7a292bb79a09b58211d68a00d9f87f898811fd693de142f43c83c965a7a0d0eb7767c7f49466443465f3ac8498d603e8a3992ecb3e567c3485f5ea25eab8ada1010d8c4904e4a34291daec1e4380bbb02080daa5b17e93bbdf10ccb7b5b185949be10e2a2c65a8ebd19fab12daa08df4ea9c03e7c1af7c669a688c8eea57377da5597cc6de41b386b9324f299ff18cd74192394b39345b67f6de7ac5805344c0fa5a728c41a1e7cc27cf59cc519f94495a4045ec0f38a102594599ffa4c88b11c3a7b2fc161d695fcd530eb7722af539e02fc4040017cc1446c4690ed8e166852a54c7e83615576a1b58ec2b66cb6c8cfae15fad075c73230f7e2e6300b5d65cdbf88d4b8e2ed2d8aa9bedd81c1983eb093ef008337a7eee968a38b679f27e98791ccca350d93f62b9d2025e669a02f6eb40d5dc330f9f3d0168eca3838e5fe3fb08baa3a434d2d8ad7c87768706a066a6a85a5035a086da3245975d6f405f090fdaec59c25776a7690910448331e1c17c4bd40bf046db490f08e935ed1fa5bf0e7e2d94f97ac3fdb68124618f92f79884232919ae3964113da2973093c33cc5fd4213f95cd605ad263780c79ce247f390f27359098d57aa080293512e774b8db5f8304bde82bbf89685dd9ca29e4df60b380a18c8669f59bfdea65b667f42167b225718b9e8eb2c798c3959ea73a7cb367a1467634bfc79e6847ca8bed47f9711ab6a7b3588dc20a24bc597cdd348bce977a1f0f6091c22085e9fc4ca7d7a2ad298c1fc68a20a5e23008c73d5b9f0d884ace7f7727ce52a183e3904e3b48b4cc048a704914bae80db105e212df4a843ea57c288801e076697d9640a552b1b2d395dfe802cde4e8e1e2c9bf43ef8c7da791a446f597aa340d3e72338291003fcb7b54c7cdf9c6dba512652b9df04b45ea5bf795b8b343313c2a1c3b3f8084222b554e684a510a0fb2c9020de896daede031ec44cd8555c9f77ca04119c3b0c009140d6d6780b33dbcecd3290c6a69fa9c498974b9c9cb82956fc97a408d9dcd9477bfadb123691ab751f1b4641acebf891cfb7976ee756d7bd2728cd3c81331b98f55599d892318753fbbd3a7c6d5042065da9d0d5f412fa8885756076cf7ce8cd138ba68acad47cadf01874a50d0fa4278d369394c45d8cc5afd65e1855303448233781bab98d50b41e4402dd0995fa4ee659fd9c489b94fc9e4d5edeceeb49feee9eeac48e1ad5ff03138d74cdd615ecbf14339cbd1af15002cddc8ca0451ac81552ee83aca6fbae9845ffe63dada8a9e8433e651c834e8fa30cfa101ba000900cffc14d2c97d76394640645e21e39ed697e19ad1bca501fdcbd72fa5976b2d560ea3ac1109658cd9064f7e8b17d7916b687e47d7443552d9063cfc4876aa5d202a5e4461f9f827603aa782fdcd27047281be2142329337dee5796bce6b5975e97bcd82270b113968e63d3f6531406abc35978389281b8a48de9df70b07a4ad4b5e3b345b48e08d9d72d50ee2fa2c1c43e1028372bafb124a12594ca4c1d1d7f7e0436f67573090fff02d95c55c8eb6e15fc9eea1f86a5b280c708e18d3b88aaee870876cdb435ea67a6c5039a402ae905f07373dbbee9a789ce51591102a3afebc5fd88d62826854eda459421f3189a0b7feed3c8602612314df52e3f4cae70d30f44babbab27d848a8e17fe2630d3cbc0d4a34ca853e5cd095968cdbb3f30be44bbfba2617538f1c696b90dd104fcbe0bb9abccfdbecde4b32d23e8f9fdd1876810392585da96ccedf99b00d3234009c5fcb7928c94458732c33d51d6b59f41731249311a27651306d5ad4878ba81007bb9ac0f4ccd645e488b83fa51baf58412eb14cbf1ef849ebdfea6528c577ffc84f23211459f60c718e86c2b601e7b8d0a54a6c8c92609befbade24199e17f0597d525926a6e41004af97b0060eef50f2a2a8e7163b91e55b80530a1f6c909b0dbf0cf2305cfd3aa39065011403ddcfadd3596d8aa704898c0bd77b8dc54d4d83f68f7a1d45fc7df93f1ba9686da1b07f3a36e6aa39429666785bfc4c482fcb3ae761b03bf6999e8d36fe90bbd86d74c3d27a7eee865e414c4269dd558772300fcf2b7cb8fb6d2d9972d5e5b119bc2a257d3f370fbe725f2c456f37367d2fe31a6acef30736b20b86aa813a00f53bf5e89bba370a3594923067c349358fd0dea608858525c94c35bbc662d1a48f019be6bbf80987f38fcc4679db4eb63e616ff81100c7432a37baa044673af079d9c32f0ca830eb8d789d4e101fe9432f0e299fa8500b4005cef2077172fa80f2210fec95fc268f30ac5fb7975b9b64c29a41b938c970ff1d9277baf949e0db8120994309841267b77c3941f04107e61977cea5b4f55485c01d7205f1a946203e0a2bad924d509d1f9a0d09a0e712ac6f3daf199a6033a92ae2ee16045c6f27fe70308e1a5da021cc528e16d3148a362a85d28facdcb23bc3821b30480903871725808b758002726d14173961b7cf0f49dd29929eb90a4901d34905d513d51f4955cc9ce3b152970270687ca996e56f880fb1c621dd68c4474573adb3ae377fb3ad943f56cfece584c94b5664d28703147e756b0d7b78a95943222b2bc6657c591ca17c77f9b1cec71c0457143bebfbebaf23506291759be279a58bbee88f19b029cce716de012ab073313d261c849a9b6c6c354d897d066694a09989ef89bdd48479190cf28b93c9c88e69acb45f3b7e1deaca8b62d7245b772b6074302bd3aa04c4e22b21e11f0ba4206ee122eaa5f692511cb7973d21595875e2cd238ec4b564ba2de08d628e132bf21c602c454c834e7bf86bca2c0696c1675110d1198e8fb49d04b7bbebbaa6b850cac124918743d941b72d49e9751821f899e22be614142cdd31fd3b6c923a324d49c4ad230d816321cac5c80dceaae954d8383de4e224c873d1498d98ec1db384aae7e16e5910857034a937fee6e1c27c5b50aa9eae238ea7857e8f726c13e2759dc884981eb81c9928df4a565c0245ef14a37c820bb66312923cdff5bc89d35c639bfbffa6281e54a587bf70357a0c4febd37e4067d23908b58efdef7ed5ddeea6636c6b735cab13b287f9d742a871da73d5f6a3af7e23d881ce9e2658006e1d92c7573011fedc52345ddc8fa55e1a7355068a7fa8a92875108dfb5523a0c81839db1db6d50d80fc7f3d5cb6d9564b5fcfddd0c8371316ea6c9e737717f7650f8ffd4a06486335efab93d5667613b39e20a2e3fdd247d80ed5f9d5e5fddc2e16458e6e680590b5a728a3df55f27015e37a1ceef0d6d21f15583f8cdf0cbce440ed41cf5d63a5c022e8d5cf122f0e3e836c67be6500529eeb9e994508e566904b318aa964734ce86e8052e60928aed87bba2fc6a97e52ffa7eb0cb43eac830189da41d2f84ddf18b655d44b5fae28c3c111ca37f0362f567e7ae64e0281355dfc62693bda40af99b79ebf8c4ea458270e44e1fa41734c351b27a3a477a4bd558852a9bc42e5ae41c89e7f5fa932069a1cab21cfb1b334cca7ce0e21538f391a12c79c612552b19baf71ae8446e8ba1706198fc4204f13a602e81079504e6dcf0e466b9bb097bda3ace954dc5b40ec64c60f5f05cf58de423d66ee8b521a221c2b52add5905a57b0dd49352aecf58b9e4ae264b6404aa6a282b30c072e509fb429f29f219d51b784399404927a81b6ef4177d3e9876ecc7fb88680ea07305c179cb2e50f312042deade05b088bc6554930cd1dae025db28869a0caedd5115df7a20fdac296f88c5b39b5a949d671e032ea110d169c3f59e0c92ea3c14a20b7c655a7a2c281cd9ff4d45531228c9fd7b3abdf5c2af101327d6a6f6fd56b9485add5726a57cc17cdf85e361a191cdb0c62a640459290721b5fa367f062e37d09073fe66148ad8c236291d30361d3b76ac13e02c4d103b781cbe94453715b55018632e8890c52832bf7885fa7eb702d21620ce9a72c5161424a9447eb6a91ece9024a5bca0f3060e1b74e0a8c6bd69684624c4cca383d55cd8ae292273d6e4392e33e778755d484d2460aa65d4f40dc36ab65cd64a07b4b1580aae52db60030f8490970c2f36a41375de8009e791b20e2cd7f13265824e226765c1e1c7f0569501dea31e4168d8aef09a477e9764bda55fd7292538667a2262414088c91c9dd7a3399f85ed24cba29480a602f9a36cb7814f462eb861f2fb6f0c80da75e6c8c0444c34ac450e93b5b26346223a1a977849c5acb83a240028ffd8de45cc1e88eee159a28692304f659327287d3e11bedce0a4c6cedd851a4d1f5c9ee18104b83903e6599d9da406a7081b2df73747f9e358bc985a2aed98791cb51f9407a6ccea1e9a665ea2d8c3024dd4e05b28c555d96a0cc5fe8f7072c44b9ff392720ee32ef410256a91ec5c974a0306511af00d133e1814cf67c92b5f9ddb8fe2eb53f065f30645c42967863dd5b648953a59aef33a704bd7581cf3b02f7d876628d1ca31097e0b0b6b1f7421a1f5fb3f7722f94ac3a9c8f456807eaf3c661db4ea75fcb9e405223f96573514016a1c8f27dbc0acf1b77d2f36781acd14ff6c3c61f97e3f3136c2edd743b4ba4186693a66ba910a96335c2094547f62c64a3142a902ab46691e01fe692874c5ce55bbf3c82f59baf9839e2eaace638ae1b265c2ed8ed8ee3e221cd7bbc19510f2efffe587d6b8f79355102dd792c82c63f3fc9be24a7321127220ecb328a6a5b731fcb5a9f9bcb2db60115a7918329bfb035e2c3033c95ebdb695d49dc9d9d2f1d02ca4429bf373f334ac8bb4631d055fb1fee5a898f2879ffb6846e24c018b0a8fc9928f3bbf2d805aae57fd08ce697f15fb241c3b60a765a3f9890a5c3fec2b6f60370d1bb4058057e6808129c78ca302daab46772b42e6736ebeced71eca35a23ae179d31eac4be2076a449d30baadf4f636e443ac8f6fe8af66a1f4dbd613a9d41ccc7702740b933411a0422c593a71bda975aaefb47b1eacd59beb68e83399cc9558e8e2b3ca05a21ddecf0493d0da7155b2d2fa7da5f5f61f7c87e9c568c7b0a9cbbe0609b98e247a9968d2da18d5410ec98f5ede65d27b6cf7754759c445f110bfa27c6056669d4a46b2cad86f7e749325077ad1dce10ea2f94a40e60d138a67956bce19f8df44bd3212b6fe8964d2863f0210c3a2efff01a8cfcd86d3af3b0ca4ccfd7437cbaba95da0804be71bad964908ddabf8833df6c34b3ac6373d8742a26a37ff851cd86868962d79ee560eb19f3264bd7e26ae9f254f4ba59bea54e44ff31a4b32ca5b481165717c4827905aa86c799dcc542adab2fa0bda01e2f2e07c51c1e86c3c3ae8b6de9e6e017d1d860bef7190c318a42b403119c25163516a0e94ac653f1c44871fb1c15a87e2541609e02aa5129d2e1de838012feebb526e3fd52de4d7c663ad5f9ff3178d41af19622734b3fb5f986949e665b6234f2438efb7f0078048a4ae21ff170903cd911a8266b7fd9b65e0844725cae74484dbf921bc8e1a32d77f24bc786bf91e345ae80645bc08d72a0b67b45e6e2901d6132431574f1bba766a9a548153a266487483a0d4334ecce2762467a489407179188eb2a30b7f498018374ca60e78797b347f7e34252b8b5268ecede603e148e231c1cacfc4badbe8015650fac064219b6cc3219e9c0b9c52f425715629017796e4b7cb095f4fb76c86032ebd6a9e663301caa0722148a47fa1633b6853354d65da1d2feb7be5893d5bb60fa832654d151c7d6abeaf6b9d280054007d6831893853bbcdc3f09f14db777826552cc6e260618dced363481f80a1140f79f0ecf2519e89d158589bab2e32b45a42b35b007c6066b3e3c9846ad107dd56519851bb791323cb19cf79ec46f1e0d64aeac5fff928537110ab5d6f2cf148636bb10307d3ff1abeecf32d06a7b2da10e493680a44bfbfda4f39ac3cd0f9199d4434bad1e50a04e4386da8c45d1b5be97d085cd87017b330f5ce1323159b3763a8b50792c8017149bc04b6c4d45898961f857dca77a9c473a66c3c6bb6a44d6231060b479a60057f18fffa004b1c965671cb632c48ac6a1c776325ba54458c8ca916456e23865e9c0768fb432a08737d4e7f12d3dfd77cc411444668beda33678285ae5fa1199feefdc2dd787de950ccb9ae5a392e8c361dc6830f29799bdecbafb7bf625c0c0ed2911f42ca047818e09e70de614d63f4349fa0c38a47bf88097b5576e3f634dc7ef74b7dbce4f6b574556f52e71a9610bcccb2f352f7c8cf3d8f794106e796c777c0a0a27172134abdc9e97d4d9da971edf25a355f74b988e286632024676e5f0c632688fed492191ec31658d09ef0870c6bf461ea18e00c76860e52db18b294ab388e7a15a37c428692e5ed9a90b0a878986fbde754498efb0df3241ddc2d3f0d34a5db4be0b4c05d6738c6f3d148b4eac10dd8b7d70e517da01fa0e4270852c93dae18b099bffec6fcc7f5c6f31e43eb55b6af56ff71e39125449b5e650975a20e103272ecd6289a04b488439fc7b1d742b8bdfa9b72da9cfe219dd382e3ebf35f411b51ea90a78e6d50029d67c88f29ed99c0bcc21f970f5358cb1eaa70b0ef58f0e45d82c438fd82a5316c5b73f7ec35c4f27b6c4eece2088701a899f5800b89369e54c8fe81c619a1b9546c1e33119844f18323f9a133350e0a8644b15cd39d3ef0ffd8f07044709a998a93b5b646d81f41ab134860096e0cbfd617b816de89723f950966524fba8445a4f88b1dfad4c071222fc42fb42f600bd67cb54af1a63d1757a93f55ef63222cf3b6e8500eb45df06e64c751e9256af2f19b085dda0ada7a9e80eb1e01bb5ce5dbee277a060f1b9bb4b7ed337c7f2cee2d5b31739045207f9b4a2903cb075cc96ead250516a8ac60c7fe239240e5a51a189457f50a9fcbd465771ef8da12eb6618975c3e93d9cae1c836df8f8bdc2a9391e2538849525fe3f22295ea169130c71cd7822225a0d0b65e8923d51ebce3bde76e6acd8456118a5bfae0b0c28c013e1713923528632791be3c81dc44cecf30dfe4553099d0b39a14c5151e5fc79daa70999b6cf922c93d2d7b3c2147627be9674e16ed140399ec0afee639b208388d4423199463c4414de9767812fa216b18bca3b53c28bfe4e4eff98fa35fd7bf6034104907012fc3a6e48eec51184b33346f50080cec8e275d265bba9dfe07e04957a1e7e7c012cb25394993b1624cbc165b1f9ada19d80e40a2e4660a739f8f31ab6c65a460396b0c9070bfdc3cc4ed3a1751b7e6f5a96a307338383d82a4b40e82793d39a1d1bada7fb30a03270f08c6fe282f65359ef225d3dfa7750ae37bf60de239d1fa57def00685c1e8a5b0a5f4293c03c7c60923702b8f2407f9090ec9b032495ce9480c9651440c49d7d487b6b153de24f5be4f40bc284e6a76471a9e1c96669fced9183a55834934eadf803bf6ca04c769c81b7257781887f9b30eb2ca80b9697c69a8c10a9be9607efa1d66b5655d842e072317b66153988022582ae3713fbf1bbf534c0e2151081e78b48426e9eb1cbd7dfaa4ec32c5dc001cde622d127e4faecc557369e6cbc3bde936a26b73a1dd7b4291ed3d9d826a8018f75343943cefe5dbff2c121f1e2067f160f239fe2a7fc41c4e0a48adc7ba8812866ff201caa41a1af190a8ffb49c4385ca49d4695dab010bda9c56ac8ceed07749413c473dfc1617c4df881647bfb6544f1b3bcd146c6c9457cc1fc44ca0045cb109eb63cf38e26cf2d48890b9c2d2e4d565e2bf09e9702b81ece42adb59d3b343995c3d4e0061bc1704389e916a57d9fc8fc0670747032ca29c9499c26b29e35f7e7ffee060e7c1da5d39a3d3932345e740e96e703800de0c854131bacfdf231670f016176d03549a878a4f51d68a2b8b6708d2cb0e33750d30771aa986f65134f2ce58e0c1aa54644de511f220c0c996b3086e79268d90453fa5aa4da252f5fe1d52c5f919845a60299b74307f3264fc08e87546974c8edaf0f598291d707c705a6dab22e8417bdf3cf1c8049419c3478916444dd909d6ad7a5d44604ff3a1d629c3de1c9cc017df699a484244d8926ecf63d40ce5258a94f38794c29d1a3e8c624ca9384867cfdce67591221cde8f8681b08c29c7831b3b193ec1a7a78c07517ee351257137ed3f7105879b092036f43b86229da017dbecb9f85da0c03a95b8f678eee9f0d5b62f49ed8ebff10f1e9d88ce9ed9b90d04fdace182c89e4362948bcfd9982e67174257a423d92d5c0d67a3bfbe56771b65bc90de5cd7f50531543f7979ef06acdb23ce95cb489a4a165ebe18c64feaecf7742dd257b4de1d2799edb573c0b023c0baa6129680c9a36706c9da15c947e49c93d4fdd891775a8bbf8e2ad437ffd3bbc8187266c026ec8c3c0898ce2a0f7506e7212a4554b55510ab4ab446ddaf199e791140dd5f6ef732f89ab5195238eda0b527760c989642dc55e853ce5148ed0dc69947886b4a1cc262a6fd3aac05cffc7743e32278de2c15372dcd798c40e684ed758d2343d11169adee6e256af96b3a90bbc82cd2a64ee2ba057a592c08c05f6bf3988dd33cabe0387badf21615dcb131f97dde77811680cf2f5b506d2a90fc1aade826d20ad73fb8f40374ae4167c88823dbd11ffb2e8dc2cbf227d3c6ddc0ca6290bac2388b660abb248ff7d9737bfd39456755448153cd1cd7d954e736305b333b4729cacd0a03dcf11ff088e21153ca53745110625567be697a09e6f03bd7362d4a838fcab286435a59d801db48814a699dfaf598c2c63ae844cd3103a9e791f60fc4d037cf1d2e36cd4f5c05e03651366bc825c332d9b04fb6164b9cd98ff268e8eba9d44cecad4227ca4bd93711fae5409a1089e840048e8e34104083c14633ad3bbfab2b1935da99eafe40da96e677ea33982362567ed712a56c0a8389865e6c409577ad6594ee2bc197a5460d83b9567f6453d73d33dc7b600bd05ff1059ec24463041cec5ba2e110e20a25c6ad17c3915a9d6bc81cb9aeff2dbf6ea572a1b3d5c34a3bf8fac59f115d7adec00164f0fac2a409f9ff31bd6d0de49a79ddf628478f0d10e2941a0980aba371ec224aac8c8a463967ed0aa579d7f9e2d2058f191404cdb7e099f8cbb3020c366889703923b2fcf3aa3beeca733181c93f186acc8ef477b0aa500f9fd839fc79db77ae417bb050e83a70c74b91a743a98f17b278e774526215cbb911ebab9ec2ecce8fd7e11b80e10490b88b92b0cbf2343efd853e3f94d9b83fc4cecc2df7d5f98e8223a4280e1795a797f975514c1d00df706fce1583cedceef1f0e5bedfa8c2666a95a6e230e74bc37959e48371b713523126ccdca9b59d35fc9cd0fbd01c2d4b96e326595bb4e30955d0296d943c443181abacc5f504a96c33066250503f0b71b71632616c6c87e5c5a0af73120c15f3bdaed33a47053e883e0aa22133ba9e56946bede6e577623e7223271175dd91372be7d8a3289b824cdfd49fb13088ac91209c47283a5eab0931fda0aabc2d74301b1363ed3dce32849261740cb5567c5d52bbda07c5fc7af7fd38505eddec96325aca9eabc4ffc65f863f4be5dc2b9d20145abc65b3428e252790ba77e1b79467db8b22921ae300a781c8199826a715e8d2e702b203cc9de5dbceff8cae269fbea3ea1cec2495c1455e73ccead77c1628ac363b2ddf512680ef604cd367a3d72c5a1b2877e9e8de032b5806228774e611a035541579566d0762e16affb43a2d88baebac16be6574e45b35edd0df7b584c008a658ced69c72aafcdcdd28d3d052a229486ba3a35c823896d44dfe868d1e088ba0106a2ed84b77c14d15d7a53ea970dca1fba8ff699ca6701685b4b879278c996650e49a479b9eb88f186eb8958c84a87e197b7ebb3cf187724da1d0e0b0aa984c519fcc5988f797e547480346529de514dc5f70358ffce87bf87e4994beee0aca7f9cd0f2b95c155b9e604ad3a4e3781097538c1c86e1c15f58d5b363521b587b68fd4a1bd39ce0ce26b13031f619d06e0bd9531222cdae9a71f276baac084fb2097c2a5e127d1c4ca643b5620d8e27535a18a3ae17df5b29c0a45dec0a4a46f18e2cd1d560422230f66580583301631e2ea46fff6db9d5317b8fbe50742e129768b1dae36c60830881634b196d4d62534c37a2c61d53ccc74c284863d62f411a9d90a4db4e5824d4dcda9efaa42e3840ea7922a60f6b80f54d6ae50fbaf52f5f6d2e54f320a4fc897990f26ffdb90fb6265bf679266d664bca56788ac2a81faa03a4e3d1468442215b19d9602c4ef958318379f59132ce8b3b47ad79f7d56e4fa5552440df0f3562c25496131cc5b31fe078dd7e8c9d5e3071550bb4901b455beb95ba5939928bda09d7ef83c622352563b61acfc0858faefbd3cdb21e93208886f07b0161c9b0037f42ddd210afd6b4f0acbc097cbf4f55da5b066190f18ea78119e10b37ad8617e706b0a99d112f24bc8f7a069b0f6122438ec192214517f13a10e7c42317ce44eb6db7e6c448032c9e8cf318cf55c83501b0e21e29ce1e1968f05201b435421f8765df23f06556bbff86990da882049c6317edda3828a55edff606f0797e9466207453662dd27544530b209579d2147961e2ea8418d38c9278b6f9e120cae12c09096a0cfe53925c31a02d9ad57c4774ae259a2b404d831473311e50030b9d1dca4261ef683cb941dd5470a54ae7f29b63fe5f01e420691f7c3288f1ed3ae71301caf4ad36a9baa474c548377dec9d13e3d44ca7ed8cb58994dab10dbe7b49800aee49fe45809dcad873401f63205782f26cae9e56489e00f6b3f5a636eedf5fb24d2aa13a350a8e7cb4ced6333b8434c5af12670e5a5d97934ef0eca08973bc255bc4cd56a477e1a9ca05faed418748cb277643241a45dd2298eb1fa8948d0960cfdf433ec4f31425fd2eb4fb9b776a9a4a61ad3b8b4d9dc4f5349f5d45d9bb7ff980a13952c0a63093d4f35fa9a3285dc52cfb8983918efdcfb1aae8115ae797ec59ec8c37d6ed8879f9df81535a864c9cafc3078058f1bab9825a8e351969f8e5a6d0568636bc537335700d45795ad74c258c0cfb638c441187d507a4920d5a24bfc93f66d59f54f7fb304fd03bdc6b3ccd5335cb774fe5cece92317173a9bb0971ce9ed0966b7afe814120acf13eeb4bc9759a23beed442bd778e0e55580078de10d48d5f231267fa6c8b159e18bd714b82332cb75355440a51598d0f8036e1e8b8cd0c6ebf478bdb1323ccc904792269ef6a90033ff0810ec828bb5f121fe959b297bad8a9568604ecac5447f17b73ba45f6e66c5e95581f22fe2a4767f280b51954b968e65c8e284ae8077b82f4a7d9b735cce2c4889b345129c62b1470c1744fc64db453d475700957e196587e6cc9d8876121325a7beedfea06f0d8c4624540e113ff4aa0f10a58025a7b942ff68604797218a96a489414ca56cb1af7f9baa638e0e676faf0f0e14d6b5e46d4ff6622d7e0573b105904be4883c1447640886610d1a551b5e6c19bbf53cf2b7078ec1bc7b4451cbc64e8dd84a2ed102901c72f19ff6177b2116e29c4da47d9c147abb1cb75bbe0377d3efcfde1f76196712fa8700f9880f9ad9aa80428ed8f7f2d0d218ebdc09560d8693833dcdce61ff52412d6c999819bc81e4b5730aeda2d299d2a7dee58a174dc30f073bd9bae8423bd5c4f7289be0e5cc5910574d299b7b308e5cb4dbd08d879d73b8026d6bb56250a76fc79c215390c3953d3e47333ee5d2167b0b9a00efd40a0bc52d3154963c980edbf3850fd469ba3f81516113ca8314801e4ac2497ede7c2eca3467b6f474080b2068d3ffb4e15d26bcfb3bf4f851199ac50ed773172bdc1630cd73f3b611b85ffb60c25f9db2e01ba6e9aac5e9b380bdb15f4faf9de3f7c09e32327da2541963c47b5b2394775fb1bf28228006495df0dae7bce6b31f2651fdfae68bd13f486a5a5c2c18a2b55f1474af4cf2048e887ac3ed772bfcde824bb0b6d3f1d1a1576e4fadfd542e47e84b8b4ad2f92e26ed817466e3f66f6bc03f43abe7e6201c041d945961d638fbde0e67afb11e358619c6dd20b0a639a2d921e71d0eda5f0abec24c696dc84c60387efe3eac82ca8a50a0c71cc95c725fcd28b0af1cf2a4d32b7168a31af405e50bf4b83398701bf936dc302ba6346bb7cbf37af12b811eece7b790a766e63d224f7653a704fd7ff927d05404f926958944b1098ab6d4376cfc86c4b5e5cede46ad0988075ffd4905017f60fbc327d648027aef4a69c6678eeb54b25d07f13d40f8d32097ffb08c84bcee93dc27ee0e7926e03a386b1e9a0aaea25a26a2d28929e4512d234671b61cbab17601f78dfc00f25cba5c75bb55692e43948b88a2199150e4dceb394c944a41c70fc12721af0392fd3c8490c43dcb03fb5564fb17e65da8e5f95549161fbf4b4eb990a2f1b0576138fa7e369dff8226f10a07b3f6b99d23023b7b7afaab7d3365d0010836c73881e48aba4d986ef6b944cc488570ccacee8d9fd31dec508fdfef7cad11a13865beb6219df6f199511dea2cb4e419b37a625a75e2239069747e795854ee951e6f4a99d2606db8040df50951ff3e638530694261b66afcb8edff2f38e4a6a15d644d4d1f03a9386e1257485a1076b43442d3f44315b15ce3ac5e4bcd12d82c663cc4f72132764cadeeb24f1352fa5946bbc8f12d52cf3ffd1b49920286fd7b890e2b587d19b4133825fb20938930acc8e453f6e87fe0b22ece90e437aad13e7e000558727b68c44a9c77aec6de8c70c5898a1c383fe218f88f8fb72ea84a67eabdcf8ea07197bccaf77f8aa6e311b5ae1e781cdce2474cf50c4db22941041742e4169da66346b6b6a8408da9a33f04aee536c6d09d4e70074f29f2f25574aac258b394011e4e11fb24b44746591f8fa0031a4996c4f7199b33c0881ac8479d8c5c9163b2664cb5d7f5475af5f79a7cf48f274d1ea4d9eaa339e61492dd24cc928b06c6c8cc64018231614ca8afde539f11f3c8c6f0ad16105a18a5286368d0a7662f688783e017465da8370651f12f8c1cb250398307425e9c09b21d48e4ba65613be6fdfcdd3ccf20c7d14ec35a12013c082eee62a6215a7061f810a171dfaa9305d67d21f104c25371aeaab1475b10a32722cb4c261b4fa51888a11ca03993bb175ace2693da13ff748afb8a181a120dfa697b2849c215aaa430c3abd6fa6a08758ad32c4723d627e483f67846cc94feeb37dc7622475c27fb85e952646eb8dde16956ad7f5faa25d0a7231c05f396aad59c741bf88122305349b69c82a969c44ecc3e7144eab953878536bc8eb4a6ffa641b3db3464217fdb971e5fcff037d33b61ba632d687962bdff6ece96da3f499196562c8bdcda95ef0d09fe20f620db4de77142e211b40d133a14f4c4e788cba4098e24647d059c3bd3db83a5ae5575f5304201838f73044eeec99a8b58c9af57f01dea52db92ccb02efb1ed1d734d8bd2c3ecf01d2cc1a3c3e92a28a7128509b660660b459c291f6bb2d872ee4cbc1ffd220172e390a19b9c4de141e40d3eb6710214218e5010210375c6b32729b6be7f42d440f7d433dd2dd10ea3d1adb7ba9f9b7a20784067502997c346065218d128711b3c2f0f4a54e5b5568be388e3e50010e6d80181b7f4d8a220a08edc84f1dacb29c5bae556964ed48e203388a740460f74335f6c6c26f560c917e23e29d7d258d1a3ffb9206461f592f9f0a4db6d2ef801e2803d719e28818e1a130bfd42afa18891ec40bc867a43a84167da5b945c1c0724e5efd76af937bf9f8986d2d851e4be404a60aeaad1f2cfa8005f12eb9db5d2634b422a666caed3ea480b5b2d69b49f54d1396e6da79eb6c85f131892f98831ce16b4a0cde6a96789169d8fdb8d8399c704eea2fcd6bf0e1a355934db0fd5e9d4e34fb665a4739d15c40fc8e791426d7be228a8f4843167a2016ecfaeb12c916f792cf7397fe773ef05670c3d265f7a3887deb333c5f535ee75013f51d9b980020da806b5d73c633bca5f60bd5f4cfc400d1e26e44045152779a3feb847f3bbdf4720b033d0fa1d955556d45a90a72f36b69aac187b59419b18757e52b221777b17b0d5fe5a84426824aaed596a25de23c057ea10fa0f21fd36f5aed49ba114a44900721c5a6b735588433ad2ef57312abd705cd62225c39eaf91de321a7408bb36646e6dcaa219ccc9319b41b4d08e89446b58b86284c3072031275c56a4841d2a7104db141aa47322735c3c282f4394105dd0d5fa418dfcb2dd0a1d9cd6faa23bd638daf2d7b6c96a8f92d09398a0731620f4c6ce02c5307e4fa64136f6dfc1ddf7964fb0f207a940ad392541ea36491450c30d24d7225de69c8c7cd979097692cf40235480437e03c3542f067625b4602464bc257f87e593af2b9a6e776fd73649f5957f1eb0f189542d49bfb02e93c39158eced1fd4d0c07d7ac407b1959926a54f9335a5f5bc9b1e141a8393a4c7a1bf133c0c769e275ad5ad5e0e4c953ad063c1c881320fd490f17eaae4f351d3d89d28d7b4b65c21010d62c6fdb081c8b24825ea9e09c6e68bc64d854106fee73c72ee7ebdcc4b3498ef2fb97c8d6767d0e1f3ea3329c69864bbd4f3df9bd2b091598feffaa9311c4d0d31486aae62f8f54d0a59f6a4dbae5f71465e18f242cdbc85fa916bac48a8f398390808c6242fad9fa4b5a1410c8f713d321e4b083cd8a23d4cf2ab42cf9e65cc3c961fc81a76f2f0bbcc843f94f0aec7585779ae49f2edb69933844d55fdbd7b044bea7141164d594ed008677547ebf034ef8b47944e079d85f3cfd56715ba199a0f824a8534f5d4d50eb9c8915c553010c1594e118385da2eb036d51b28ea340fc3bbd7f5987743a5869552e7d825e8dad252fde560196307596e1ae3020f3f3b3ce6e3619050039a51407b29bfa362a5d62cbedc9d0759dad4ec3ac3273eb912ab49012479f00d3eb2fae596b00f8db482f3b095d89d5ad93ff6358fc4849844eb8041fb41f213a0ea9f985e5411e01bf4b6581f325e3d7c43707066c288564d7b6cc47cbb894447cb232be06f4abb5a3ef8c25ae88230559cbc79932a0f949dfd217f2c0e0c708422ae2c9d42a72a84a7c6cb35c7e7518f9dba778023b8b4f082b758eb42070e1c00f94203eb4b5fa43e34b5cbecaf419f3d35e59c69a7a994c987959795cac7b498b45fbc6f53b0c91a608a771f34a4f18ce1b3aa9e753c1389210b632252b1af74f2231ddaf4932a11d082c26ce35600db9c008a341ea2ed89be7e4c1f8c58da78e7b173180bc763e601a7288ecb6e06952f65fa43151483d35f5ab38f041fa45c6a30062914e838e78c01d698b25218e12111954dd5d6837a8a824534254112295a53f3c8768fd2eed838d0e94f30e21f89deb8cc7d89da6c1ec31d0fcc21be7ea4a364b43262fa12fb5e7b7f8c48fbea37c95d630a7ee221e98d63ac632d821ed6ce869c487436bfdc3a4eb3e52c1d5e52754a1d2d0d59a651d4b800eaafd300c2fa14faba55e9fab336e8708842681ca2660f08e24cc4a47d6c5f051f891d1be373921bcaf0ae93dff03e0f8d31fd025b5626fae1292ead2b7142f591c07f8ff5d8b4b7d4e615e8891baf5ccd5965bf33b6876bb8da5e5bc853b35ed18fdfbb577e34a6064530d95bf5d759818df3559ad709b1498ea9ac65b30190e26aa59728154a2216ba392d67a76e38b5e8e432fa90c24aa1c667bc5d73c7eac0b2648125fa2d5fcd455e61ff427a962124fe88c5dcd6dcaa42270a45ea14e294e61d04a1c8ac0b5163f658344f0044f2288f100b8840fa9925017aa57bc8941d95e6138c546ec424a4d2bf021a3a977a6af4cde14aad924705fff9d98e76743dbf3b55a46f335526313dc49ee7e98fedaaf7a8afa6b40cabf6ef2650844697fd73f913af57bc13e982d6fc071976a4c1489000bac48925a14efc1d7f70b248dddfebdb71bcf28f7372a74dffd3dbec972d0e028fab8bd41bf5407c694a3f3fc90843de8b2452c761b3f990efe7bce77f8afa477f94a08b166b43342a4a0a8f895c6213525386b2500ad2f70b1d2b8f79af0ca99c6c14f101b6dd871fc69123cff0ed67c1fcd0fe776810f1f059117a315f75b6b6364130caa64b975ff85106e937cb1c87f258a1e65b91715b0c1f51f076047c95e57ad62d794bd41d4b09581794cb3bac845c1c4c1ae163f4d24d77443a699fc5beb95c7f9bf993b08b021310937743c33320c4294cac1425f0b40e70b3adf4b6336946887d3bcbe2b51f46f9a2854813a5f8b5be2e06c3465ed3ea8752db0045675ec3c82f51532a6980db0e0149c282df41bcd4ea359408773820b8210b860f6d91eb769c628bc8f5908299d9b006ded6e0d1510e9f76c7a86d5a231e56018038f3dbba72f907d81ff3b05bcf4ec2af2dd818ef8f337ce4a12a2ae555e1938a3d38569ba4e03a1d908d8ee5be6d97ce1fe692c39d464693bc60074bee4c4cf39bb371c21b604463dc7c24d6a4e0a9ae77fec904a72ec7f168c95c9dcab0b05b675a13d3044efc0c28ee765a3938edcc68efbc74cb3ab102cfeafff1f2bcf4f572be7c5dae88f5539e8930f311374e20a98355f9ef2c192fb4b92104fc386edd17be2f5759247c1cde2154c4392a78729b2f8f1ca047a0601d05b81a6a9e3fcba84046135711952d71e6a15ecba505560f08ff5f0a9a2e8d22611caaca0e78b4496dcccc73f42c75e34fcdb2db8eb0856a6dc0526ad358b1598bea121cf1c886f9748d3a46461e4c8ca3c203e51e3d6887f18538ae6ecffde880726f47a90a62dbfdebc8b60298d3e7601009b4de5d21f3555da2765e4a19c82a5c57be480021f0d9ae6f9a2e395e4c9cfc07b57edf214c8d4accb9e37d0693536c99da9354de920f2e16b45b383b6a612505a420d18e7b1722cfee82d9603073783946361d21c9d010cecca2332b8dd769a4a2b7d944658d0081a5408d0b2a5519e9abd73542ca6625bf46405078c67fc8770bf11e1702f05c5b28d5c90bcd392ed892418827b86bfd666f2fab593d4e919a41b7f69e2a682a42b55d139cb8d1fcad8bcfa969e8a46d4478e39c8c5a86b5d2278389422dbf315f3fdeeb3bf351c0039ec1467edb31b11542b7f3055601f0eb4b1f1dbd5cca012bfadb8eeb9562c7bd42cd801051056a8886664491f7777e5067d7777a59ed53b7f904d4ad834a857870dcc07955f3691bc788337183bc946de171738ab2fcfad536e00644745a6738fd43fcf8375e672ea09e2341fcde7331de369c89a1d56be64eac9e7e275162e1ead4805c8341a5f9d626bf928489c84cea147f28ee7797299b4cc07b69960011cded6c2c43a86a6ba198b20d4e4172fdd2ce1aef89a14d731e4ee1a76e44d60e0dac429eef701ac1055a5bf4e0984b11975c5c68f82bfcd712ca1fb8f70512bad0e5e55f77fef2a366af3e5e5e503082c1c801ed95e226e60021ebb430d0aa0d559dd49aa414bd5950a1b3145384372196855785ea6094f0a1ba50110621635c75c6049abfcea3479a0aa840ec0efccec6cbea952bf2a3d3ef276929b945707cf36a7e388fce5eda22c528665b7362af976facf949535ab21287fa188f283ccee3a1b927901440011c4f8a440e966c453a35bd53573499b48778f960f14fc38bb7d6d348d0fc902167cc848d2ee5ff7e051da34e9e0074138d65077e49cd65c95a76e8e51d0a67d9c2f1cd3cf171727acc7923850f8c2e7ab9086d9552586bb53ab1fbdda6478681ff1dec96c9e5b1010e91a69653e53913d28fd641414c09ce70696afd1647ec9f1a7e55f8938b6d00240cd4f51138879bd291e25d599b63f794fe73836cebb28ee364c4d801fb6a8577ae3bd6986614a5536cb21a6b00e5e9406d1ae915ed52dfb75412e2b630c52e16c1da5f0a0d365c70510d18ff6f70d0998ffd15d9bff160ea5f6bdbd759995f29d1b98884f8a78b9150333540536ac8bd2f2e09bdca5cf902d23a69a18d6434527beab18d93f8b0d58df39bf03d9cea5986ed6cfe146845311c7c8abd12663a88ea3fef7da3e16a3b22407ea32c431a6adbe4df64c82639761fbd61c3a5f0d30b41fae4b9e541e7a3981f0fd8633e4bbb0ed17843725b4df30d1ba3c8c907a872bf4edc18dde28c708bc9b6fc13a512f3f66c91127abe432efaac24dcd0991e97c559cb0809dca9a3d04c51ed6c7be516577e1bce249291db61554acdc16069a5f9ada513fbcd1a2d3c87c6af84197376287d861a8fe4657dfceb83d9becc977bda697ebe362499bcd895f7ca4b2d0effd27a95f055b9739c25d71978714ab9107c6bc7c5872c136b9053714df066e1ca72b73131c0ec6b1cad8032b2244d8c316e90b4cf224ab84108f6fdda6cd27d0933859994ff643c2c75763413642a8b19f8209d7eb039f3af79f0edd7c783ac320281115d5d2a04f5c8e4a379fddf97b520dd8b5a573f72b25250040a0288232f6dfc44e6bc0fc11900e34bbd883583b43925e12df0e90e0e4f080e2487c8006e3e35c0c26678387c798f2bef437bc300b44aaf6c5588f0560f8074d0c649fc428dc57f58946fc6cc40c1b3eae406b2b7e0f49116d1354b10de2eba589481e36c2bdc3ad323ade8ec880a0c7c8f406a5c7c5e66532f677e1c8f729b2ca145c2f3f5d3a17fc076c9ee9d2bd1198ff5baa156bc2c3e19cf51b97417027dccfeeec938dc74a226092b8213831144dec2e01b3fe60f5108f038361205cf9fc4d2148375c3caf90ab1bc48c3b8850f7be7d25ca868c48047fe1d40e32fe67c258d05fa28f4f56e033a6ad2a76f6a127511fb10a04bae9bcfbbf162dbc208a359675c7d2943643a6297c3989090019346c3b3b5be6416bbdffcc8241d7d24cab62a0003bdcba08a1db8eb7f26ecc3a60446fa6c443bb2d823c96d96bfb9842ac0a64c54a76dca12cb5b62ee3c47d3510e2bdf3387c0e26d2a00aab7ba4436cc753af6e6bbb6432de7449e83a9b90f34311e593ea43d2b54986d872d68bf75d70638560a2214f42635f66883fe7a0ddbac8e95ea3511d286979b047ed9eef223f3842c9e7ce0961cda47e95231a873d4e670a69f7d8944dc0ee5bbbdba72fa09a919de393d0dc7e0c9decf6b03367fc6b4c618dbce00cbcf7420b2c84c9e8e1cd76d7f1d43a7e4052654ec72e55e6b78fad456612390bc15f85c4549bad4ee51716deaf594ef9d7f0b36b9dd49c80614d3ad39af360fa9d6e951c02a113d86f2baf96b018956a559153f0a374058001fc60e3abada1d5d2393d980ee7b06b120d3b55a09e6ce1785a6bd4c85c25def9b399a4f716aac19f70ccfd141a1f67e5727f53acbdbfbd2608878e512a29ebd86c1c546ab21c8ad649c9694a075b4a4d5ea79bb7d6f12d85dca7aaff522b7a230c3d82afebda5a0acc805798bd2f97b75adabb117dea52f0bcdab94b487cb9492721d99bfdf9a40c610f7accbf8a401e4aed8f89f9d61d8dad6ff97c39cd8b98a5e60641083ea9d49e4a68e11cbbd710f5c2408b2940b0d902d6957297b4a44405a657d8591aabb7e2b3429f1504dc20f947e0300eaaf84924754c5a3eb20bda123f7cb39dacc492ed3ae6919e7a514dc4236a1bc72e025f379181061b343e4004798d5c1a95767d63e48c2e50bebd8e96972b6d5bbe41648829c194e18ab55ba1ac4a929e4b40a99d46a5fc6be1f72c248c6a88a4f47f399b248ea9e4344231f9cd8d7c15406eefb922880b61f5a2b7f4970857ebcd1ce35974695137ad98b513b40dfc95cbcf131b642ff3f8d80366a825947ca07b7a78bd754b0db3a921b617579d8894a5db91af8a1550a1f787e42854840dd553a3496c0f66e39f1bc1bb6aa3c0fd75ce7085b4125f6b2c94dc135eac0bc9df42edd7fd55ba9db3d0ad200320ea964cc8493aeac768f0bba595141a8dbb618467ea1b75e96f02abee5d08afbea7b29f56e2f7232a1f10bdb55c7c3eb8f2de70fbb7979c912c306eac602821807e08b4386f7716159436c54ab8f3dead578df9d7374db88633636cd2588dcb631feb9e56131aa307098ad17d78ce138869b548fbc94a45770eb651203a82f4c69567692bc9520427b0b16e26870f8acb49691e085f267a1028245f6a7ff4eb9e267b5d6c042d8267411c11ebdaed2cbb75dedda68e8b0176969a078baec415c6755baf5b0fe373eec97c78bda8bbe28b81cf0c84dbba10dd274c8d2ce2c78657cb20379783b1d794487104db686103078d32d132a371982bb91412c3fdc67ca2f89344a7b490279523349bc30e182bf52eed118d2e48cc90749c7c318b2795c7f3e3c8fc30909f2e345098f955cb9b2b92359ee931272337df375e78b92a5ceeafd9a332a401fa1fdd2a7a21af11c188ef2a2a722b2c68e1f04ac4e15fb96fb1a5778656cdd01f7d104604aa8186fef3b0b02292f8bb53a17c3cb375cfdf9e04dde2692888e61c96ef3b8e17e57e96d163c2d1444266fb7a013c4cc26e2da70435e2ad9cdf45bf412f264bdd19c413288686959fa39a1096be564bebb0f059ec11b67a72fa062a81509d11594420b3deb414b169042f2ee4e19a9a685523549fbbc734fc1cf095033e13413f9028efbc2229af26c88e2c59537e304b3af0123642d5ce1f5cdc6d075c5f765b04b7bcb80e524c7483df321fd9078dcb6b0a675ce258f9976eb3594096a6e3392c7762c3d54d1a0d0737a6b5e97076fb03ef62fce210115717fa210eb168f24bc62755f8de4d5ed9389c6ae60b1106f0f58d1dd1cd72ae03cce928444cac11b441f80d093e0926739c1f9cb130d6d4657b4eb2cbfe4baf156da71d425db4b0943a437e3cfddbb22f0ca843842ae175401df1b204a970a5608bd3f6798d36037806042903ffdc9592baf234af195218d6a13f814ee53da1161ff8658aaf15f72a300b5103adbf401ef449a8cb305fc2836718bdf7f2aac4dfc44388882551fa2d11d7d164eb5d1b9f8ac60739c6747a73e8017caf6930a51473aff0a18a07c97cdf794debbd4e41de8b8f32522a0821a8330dec9a79aac55867c2f2effb48cbf6621cc14e5ff239ba63616f502bdb018f5d58fd0d0ad4814886cba3f3b84f4d8a3ebfb51fc7f2ac5cbba4862ad3f07580166a3019b680c5274cb23155fab0ab8c5beadaf813fed1ff8e9bfd6ffaedf830524c9daf3b5f34db2d71080bfc4304fb5b5ccf94bcae61448efc305d1543fed420df46be06a04a74b7eebe3fadf80e46bfd96e7d2538f491e66dabb6a01ebbe95f87aa283bf18f5d1296ded05f010855e2edc0ad5d46ca95976aabb6d0d31edb29fc9b0af17e57351f3d24c786372618e7f13ebb5356db380083cc41b9e98d8a1fa9d76743bb5fe92cdc2b43b9b99d877df113d96353ac5cc0c115feb4c4c113803c29811eefbbb5092906f1d80ddfc5e6d7740bd651fbf7b4abe7001eb0b1f46868413cc4dff4496c5fc9d34520f6cced3262098a957389a321d8ab9561345b1c0ff2ab47c332ed1605b5dc59bea6a29c49696e5756f4d9a6f98c10bd9024c0c1af7069fdc485b3befd2becc77b3b6af7ee621b784bf97194d7364cf577dbf519f7877ca29e88124e7fef353fd59bd7336dc486819de628060c9546a7a6b23af096c4e2295571af2cb432bc44ddde3fb8ac5309f87f0698a7b1508e29e6a93838e3668cbabf48bfa7088e8f0fa16eb7e7e7ba88fdf68e7dfcb32c74492c9ae205687c20f0cbc5199a4c68c9bcc58e8e2dab253345640d22aba53551bad206b1bf070941f87d2f6931f9c26ef0f35fd019a60fcf41c5fc58d2a407bc03f5524a8e5343791199c9002477e1702319bab537d7ddcd07cfaef6d6139758c513b692ffec0c0bee4a469e3929427a91f72bb854ca380fccdb37c8aed06780393c549c11737537a1c1e0063449f670e58d702d73f21a6de963729913e8a69e49936b57e1e91c8ecdb796a1cd1f17f0eda8c749d348c3d61f4b86499d5f418116fcbee20defdc83548cff476e67d3dfea00c477c25488fc83c72cfd5b09888aeb062b96da2312a52fc46a98968968cd4b5789cb9ec1de62a72d98d66268c8fab2cda987e0c6da7e121fcd85a48126b49081831b1930cb74c614a49f934027e37036a867d3bb4e6d528b282ca6e9a835b59faef3ef000117433fec7e39b3f424d6afcffbe98a2656847bbf59691266ebddf27a83f25acdd8fc73d1abe8feb4495086c82e8dee36d7573db09fe269449fb093d0c46a93ce8583277d0e0c6b91aa9c973b3d271e55f63cd782462d045100a04526b87edc95902a9d58a50c0ef2743318bd316453bca443793626797ae4828c02b9609b81427613e341ccdb84561f0690a3dbe0ed709a26da8ae49f6471bd9b696275e6118f0ca16ec413750b4908d51879196ed285f2395fc72256a440f436a3741a45bc12afbdd1cb740df70254abe1c85de135602d2f56e0b38c599f369acc8ee5339ab102d2acfaae162f2cc4e55127de288b77d833cd12f8527881af1e24e91b108ba85ac0543fbcc6d40c749ea8db0d9e9cf7b9502d956407b69e571602b6c50a0b75ab1b8ba3e7c513ba8613dc7e5add086a4434c6e4fc95b057d714b5e6a8dd381afb5ca1e3bcc75b1776392de1fe1d017d587c373b91c0de6ac87e36bb1b8d4d8159128d474d96991e7f3d5299714b4d3b0259a8aa38fb15ecca9e8f64051523d2f5a45abb47ab3aea7ea766efa66e095e493f1898a9090d63c0ac444d9ab7aa436b9ffbb159d90785acce307747560bcf8d0ee098ffff5379d537846991f89c93fb062a60d7fd522cf1e1337b3f34912c9a177c1ace6ba6aaa231328b9d473e196d511f66829d469212d3bc052815d4a373f7166e7a479498f5c1565bb0edfbc3366e7285799c88214880872dcee74c9e562a7d292ee8ab474798a580ca09019f8268eda8bdc0a8c9fc58367641824d3652371db8a9e4d14cd7f56d4ced3f9db7a7afaa7b244cabadf63821b6d6088d7be413a78856719808066f3ed36c0dab28db944194311f0243e7efc0143fdf5ce60c2a8f1df13135ae0ba41eadf3e58bd4d7199812b7fca27de72a307421128b6b9f11609e2b20eba64abd3a5d54e5e0f220fc6b585572cb36b21e3a00023d08ceac0be722a23d479fd220fc3f0c15a753294bbc891442555aa5d8171b47164c700166f870438464c1809de3ac0e3eb8468ccaf5f165ce18d9213348b2b4d65ff535c1c5d789cc8124c5d53056e05f2096a862db664cccfd37a4ba501192fa1470b39d841e89228ddf9aef5e907c31ea99573c722bd874b9fe37ac7b7a6449c99edb76272879903742028cd22eca2753d95b6b0dce573c91f5744cb85a56a0f9d18330d2853ed06bd7a7a03589320148e02efd4c066fe13bdf31dddef4e4efdfc75df5bc362f98d138edf72cd6aa307245a304b42c910a0649c64e8980bc6a6d586a43acdef08cefcf68c4a62d1ae3f4c70779f547c5d393469c504a82ba7a574940b507e81a8c66964a119508bac4f879538438fa8e597a2e647ac1e0511a10daee419f52503c395a2103a04edb964fe1fbb80f3aede4d786baa7d8bf5424f0468aec496bc662aa0c75099e2253e726aabe0e9176373f29165ac79f0c5df32c4691498246245923dd0860149f71e4a21a03ccc4a74439fc9bfd187ea43965332aa1c47ba6e188386e8940dfad8b177a0adc311f0e0301fbf799dd0d6df8aaa7cc95c6f8749c06b46370051ef482dadcd4d4930f741f5c8fa64bc7087651f35b8a03bff3a1ee9e4b1a66c41d6893f316865950507683396f8d94b6e37f1135fe68d37a5785be9fa47eade970428cb4764b9e8995e1d8f2467e56d43bad7209f0b41c778650c61a1bb53cb170b4c836fc9ae3d19a299c7424b183a0f27bce5e7572873b62100b0a3f4a954703a7e377316d0b00f0abb8bb99a2bb1cecc99a5c10e5d5a500fe2ad98fab7d255b0d096b4938a7ae42948531e1a641b27aed3bdc27f44b2df451e58c1538a9047589dfa7af8239a2a52f281b4392f55e9148c8cf2a7b569c85ea2d63f943aa936db0e39e54ed68a28a9748a7d17fbac9e567c2f735f1bc7b90c4428f545f59adabf36f1f4a68a50a7992b642791322cf61c58b5155f81cf77f2465e366dedb5bf418c0f798946a226a3bae7c4fd7ff2c77707301c823b93af25431a5004eb70f9e0c02e2c8528686a56d9e58b13dc40344d25bbad94d8d72e13ed01837b1e76467df9fe44b0e9677fa8060373f1db9262d6c5838b2cf6580ecb0902c56f14db363d2bb3fc8b235f1492eda4ec8c5577efced6d07ea75e56e825497a50f5bbe36987f3b1eb07ef2779b7446fea122e83421ceed5299c8a530e281ee17b32a3626a78da411e9e7d9117a75d4f1bb3a483938b68791fb277bf6a5dcc94d33c3524836030cf98fb112936cca8622294ff7ee563be09b05935ea0245b0b65fa2e262601430a52e327d4e344cf28390fb2d1e3c9e903cb8978914a5029b3feab4a9d33ecfa84e0919598ec8725c8af386a13f23be64a5dbed0d9dd1ef6f959662ea48bd40bd37c5edf99e386eb2ad2f36b3b22e40784b8461f1c3a0aa79b5244a5669ccf2ce0f735a064d5f9cfa747c4e80db6d636c49a2e6eb47efdee7626291fb1fa36a8aac7e8959eb2f02c612325869354a6ae7c5e1de2c6cdd5b609ee6b6c2e75a2166252fee1eafb5f77fd85072d1c151d278aeb47f18b554f5cb8445c8060de65d8c65962b86c9b5caa82ff57df5cc5a2407d48e1944c7bdc38c24a83b17f95590426fb054e0cb51703b132fc6b84c5d4054eb5d30a7bb9a1a20677460fc533552edc32bbd31808e29b43c96a810df6384b883e99be3d86e5403f0e81c949332abe45bda4f14034ae1073ab39aee5af097619284eb5bade43b7c1a3d1e20f121d3cb823753150bc7c48b13d97f262ae659c81ab90e490716ea3d5509438ddf9fc991d69a6bf260906ac025e118618138034b3804947d768172880cdcdb8f7871a502995a240daf53c0681a8e5b8b913e58f9a9173dd37f8fdc31fc69336653f68c07b6c3dd1a6b709f256abe6b460cd2dd995adec1898ef77caa3db4ac59e13378f1cc2166f4dcaabb6898eab4297bdfb2f7c9df3b7201e0dfcf91dfe81207cdeebc9c3831bc266c59e50eae712f6d3c9248e94b0370434a4182f0073287edf25f403da09996ae416a4312c427ad28db6f659ea0dc18dfe9fda77190146c8748a411d1a7b86124a166877ed528bda6426dbf28fd956bed0b6475277f742628dddc346222f04d5585357ce9db01b87af04dae61d721ec30964bf0a3c93104e1ef70e1ec39850d61c3d359f2f9596129d47f80e2d725f11d7f78dc265d6d01605be840e6504d0cd03710f52bceb8415469fdb57067ea25bb595ba7d808f4dd45409490995570010a90e7df978d120b05c1485965f66cc117b0f91e0663889fe450d4098a5353311bc61c9c316e4ba0ed7c8f86a6e2def7589668094a5ade404c21b37cc683481baaab96dc622da19d2d465457d9cc592eeccf0b37ae510d16003f6a9e81ee0eb53bd30fd71160916fad7376e835641e8239374461a2d75447fec595f071b7446ea4a582891de1e4c434856918bacbe1d4418f6a37111cf799a0ab9f73687d5e8a9a618d710c72b2ac02d636cc7ee70b2a83c4d81a34fd26212abcd0d9ec887c0d6b37bbc381c65159f793441e3520c1929810392ac129e8f44371dfbe54fd4b5758f197ad9ad9d41de253e53b31f8cc48e28bcfc86e7e685e32066c24c017f9f54c7889e1800033a9da54b066d867b71d8b68b0839aee1d5a2ad54e0d420206a4f255c75ae59c5c1547f0513e5829c01337e01f57bc6f60c9cff8c1b29d51e69667fe9f1f6b99faa472424b83db0effa680fcf50cd1844333e8cdce7b51bcfc8c6fb35c3dc5e7dcd0f226950496e263a34aa046ff4bf0f1833ff66c48391a7d648eedca2ee89dc681b61ed6b8081f72596238aadf41f45b5ddf2ff6eb28ae30a4d9c6378f7b6d15fb925a9b7f50bfc2e0e463577dd5d8ef40e34983b85ec13d8f3c979fc079f95702f0f80bfe140682a01464f6d977f1f439673443a363d336a865c2fd70e641102f861d5698b44c7789e203ebd572ec5145fd71b46fa893723fa09c4dd6faa6a7e254b2638b8c9451e7bb370880d8ef6b537dbef5cd49dea219387bdc22e94c3a115114f4258796d3298a41e09ac0936b08d9fd50e7efc9c4331f4963d86edae1cdfae6ba3305a36e9060d6b49b342625c546cae4a2e654664cf7bdf67631480e55c97d7caf34ebac234658599b42805317630ad3b060c6593981edf308aa15eaf88562f5b99e5a05e91ceb31eeb8997bdaf6a0d99acb2dea9d3c70404a1902a2c13300117ad851813326d740a5c68e19d2baaf0e6ae3e8601c19b9ed51d4e33d957c6c87b87922975ee254df27bd05101d0155cf59a8527e170d01046c0cce7274ffef95306d0a94ac83fdfbe3303fba6dd824a058c7b14a02690968d57b7c07edc756e9dad9aa077117c7456b82e60c5957aa054a569a25daa9577ab79ad1f0a6fc5d1b163fdd99aaffe28fbd68a4815a3b74abd78c0465c0e956144345dbab61de3ff52f2290d74eb6261abca6e2e08ec75aa6bd6135ab6be87801b522ea4739b5281dd93a04c84964d3f5b5c3bcf7b4b0495e627c6a9303915b475d43eb5281861ab975aa3aa1620043b38be88b1e0dc92d72d51bdd113d6f6961c09b9356178d750cc78c8f8dcf086fb197284cb2cbadf5613675c9abd0554cdb2729e32370bc875a541e736fe0a62a3d2c9ba8882dc31a9db474fffb20216d045c0d6aaa4baeea9c34b0ce71799f97de806eb666a8225621b1cdc5efb980ca3b54b34ee5431b0bac8d8d63f4f313bd09f607bfd2fb779443b5a97d19872bbc1752e131575e5791a815a95ce867340745c1bd3adf49194fe87023baf6f3d6f47682cd1720bc1ec4d3b7f7dc8c4d5eda09e6eca33b76951ebc35cf0f61911e6b1f4559e58b521dab52023b924795be1e4d6390ee494f2e84ab360f1bfe000d90f7c62cc8f457fccf68e2d8b19a85a4e66fb226edba04a97b366b308ac181a2fdc34107c1aabf5599729c7d178c53250fd34c873f3465c79d57664a3235b36685e0ee996224e1580f7e7c442188960134cd8d92056a15906b084067365d7baf0908f09372588325653942b5c9e4b85ea197bb7b25738650c45dd65f321bbfd453eb986481d1dbbb2ac7b9a7252bfb7ae78882b781b68c061a8418d36ce4d31e4488d2f3f55da5af8f3c0d3d36d2b5ab20b7a115fe73ca543694780369ef6cd7641f4491b03e5d7f74744936441c7cad6f74b959f941a6c154bf4705af5c3a991f32f7e8c70b24672c016770b6918ffc2f21e106fbd12c86db29a989d6da715dcb34c4e71dabd102a7f254d8af3716bdc762296414bd1ac15e1dfbdcb47fbc5274cb9aac30c72c1eb90540930dd034560b531b1ee94b3d5b53c2e8461c20b687da5f466be714084f2da97702cd0565a04b6fbef05023bc6dd938d8da54e7bfd99f5640fb023c8f9a824da105f2267a91af2a4657a18442a15edfba0fa86020a30ef9b3c306acb10ce3792fc8d5c876f22135d568619f4a36177f74a9cbd09ea7c85a959445810a0a22add101948cb6310202f36fbdbaa3d6c88832fa40e22b2563047f5712d453dc556db36e007bd32f730d54e1a5a0c8178ec956f0792645531559c0323baa961ca4830af2b3496ab5837c482f3e0de214ef11c2a0b84ceba57eb309b94e601f9f9ccff8df47a28b1c3ddd93ff56dff9ea24dade41b4ec5b0b26778899644ef6b9902bdd356b185e92fda246839aba5b430fe3acfcf69e807736b34a99ed299f29d4601e3360479536b2373794189da4510d044b428e2ddd6df88fc5b4aab8889bf60d403549d976537c882221cd8259bee37dbfa3144185bb6b6b604a671bdd6e3ad9fff7e5f9bf513c4230d27e448cb0fdace71a924f069015c07b1979dcd737da87622965bd1a19d92560fc061ada6958fdf5b5b71cb3b62bb7988d107e373d8ccfbb8f1234b1c8c9af93dc9e871a2754fcae3c1b3234b042db02ad96bb02cdf506eb29df8c687e8490a6424cf248905b710ccab9c75ab67a82f9ec37464792a96c3954b5fee48339d9f6c115d00d16b68b3e7cb5da6e446ad94e45fafea58d3751fd7ad1286d68ed58c5089f7b4d06c33c3f2ecfca5877a6ded513b83c042c7d6f6fbc3352c66c5ac6c893c20af2a590b561e1c5176c10f93348ecec1378e29447e1f324e9248acad275f4997d1ad018e899914e18b0826aab3f88c90bd0e0aef8b54294834af326b58a1bd25c5e05f144deb3b1c6fa6b4209f05d13692bcbf9ac1c78ce00462b24229d7f18e9eac8850ac1914c7ffc23f14bf403a2c1bffc008bc95bd389cc858947acbcdfda99e68d0a2a44e50e286402ec90e6813e8ae5e9614dddd639a17febb01abc84e9238527a72c21c31cbceb01c2b2a2848e07bbacfb520f3a4c7e4aa83a83606cd15f7d554e25aabbcc75f67d799908ebf5d69d6c2c11065cacac3da3bf75a1f83dbb01a65b0428ba5393f9288d53f0322f5c875615b740e2a484feaaebf85ce4103a78ebd287e3885840b59f8e6494dac350306253773dd902b02b972e9ef78559d0cea84903f883c60e693ece985e5b7f95b002b6275243854e9bd360d9895baf388835ff317bbbb1ac4600e321b8d6dd908386787ad12dda0115f5247743fe751662847a53056fa0f8669d084e24a5236501112a595182b8a1538c93ff2b2c7d78d081b83a7f733098e42db0e962cae125b5d324e0fc7e45a65da335389dfc5692db3ea1d9d2434f8e6a32cea9f9481159473107b3d8b277f70ffbc790b76030f0add51a72647645fa7cacd304aad08094cc95b1fc0662b3dd5ef4b23d6ed93764d82505e0d8a9c579293616d7237e0ce44f6ea3514784665e6345c707677a699f694603a4398370e80da7a8b48d420a85e7ac569aac3cf478d74434024486e8d777b885f494245a1db6615d1841c5a2e74b869769fff2b9a2ed3801ab80b97128546c3a1ce7930e90cd1d5591835ba8782a33433e89198596b94eb75824f05f41caa7da7fd4dc45c8922cdaa6ee4924bf2da534e4ec03e37f547042b9419d69355a54b323bbf321558dbaf7c9260f902918d4ad29d6f32fa6e8fd5acf6f9f79bbdb8b0dbbf53186b4b2b75f17a6ee94a9ab50e2eab0438136d89b405717ff0becc4922efa309568ae6fcb0b86fab09df5343f8000ae71b829ae690872a3b2e32e04537916e158457a344911e246590b6d6a3518cb855399bb9a9ef1081f8cba23dea60bc427a1dcc88ef9e1816f176b7109ef5633552010a9f23ced8e683df7d63259ca569ec2303fef6503846030e5f5eba8355899257f2085a153c458d0c2d50fd3209e75da5a3210d423de542904955dae9eb9e1a4e61f0405a7bd87a49c90be3d7b5f963a05922b86eae98fea25f5067e037cb9ce1fb67ff503d760cffd68652f3f4099a141603bf123ea9b485ed39f9183271c135e19ec4d1a13878d7146663148fd6f4a6e472906112f006cac97e6bbabcb9d2fb1721597920083a49a444970fd4eaf0ea2248a8d7fff22519dcb26c9b27858b069a485a56843a0acae36361a5a155391788b9cc2f7c3dc8414cb6af34d1dc4416ade20fcd409edfcb74b9f05aa34455619fb17c43f26f08ac06ffe16fed7d099e79bd2a72331477cdc609cf4c8aff6daebe57095880a6a2510e34ef15f7b5de6f7bcd29198d8d0cf566c2d38951a85d9ea3e922a8fac2feb553815ff969a115d85a2de624f1068af36c8ba4da28671abb7a1811279f422d4c1522ca1167874c1242317a8b32a3b0e06f44b6ad3a9abba8bb36c9946de5673f672f26e7af59e48a1fa0f6060da4ea4beacdbfc05e467d54f153d8ba420896883339c4c8f175788dbca64d5374e9bbb8cd4abb0a4e5e229d68200bcb2c74464e04dbcb52b1033b8aa2a6dbd6a77575fd02f6d2319ca9903e599a34c85107054079bf38b491c69fd6aa651de4d0c5d352c46cdedb5bad4458ab5bec7bc368eb50cffeb2d8e9659fbee36e1e671119ce811901da52b36839574d14722b296d378290a7e14788959f80f270d831dd45fb0b8f5bf754c0c41b42efbf01be71b663ba70c7b6ba627498d82dd774d3f66df6ae1a212e1474800dfd2a1ae77547e6c23fbd9981235f900fedc81acf26720ff7858d494102451ae18e684385cd1a9236f8baf919c6c109d3916bebc42a3678a5f9e684681c1ad49858414fccf249c60fb880cfc5ffbb39a22b85f6ef44609ca85c89157cf8878e9928e32fffe90cb94ed9c3fe195a97b093248a04f7a6cb376cd77945e5689a0aadc4097d17b715d9cc04cc4b75283bce60f7dc7f68a6f235e4c69ab8f1cf968ae746778ca5807d925fa0098c907954a9f9185154120d80b94ad62dbd15e5d95c5b16bd714d0d646273a270f5ce61bf2a3095c59a33dda5235b2803ce944f0e83af83ea870d4a339f8382a308fc9da8e41580b8cf965eda743f7eb894de18d640f80ae3750b6ee27e24b2fa5f30771a4a7fc694aa7f66960ce15aaf22d7b9245aeee189d424ed127f31abd091ccfbf3e2e31977349d09dffcca400cc893398989d1f3b134ae51c5baeede84b2817013db01282c3458b633915e68677afe384b8d0844c9919f58b49ed4f721e8ce4914ee50db0a7441bd3de55e6c7b643c24114679bd8d01c1f65b49affb1de868da02f0d0f839c62c20e2cc1dbc2d4d82ea749c94cf7ee4f7657d1394d34f6e70f4d5fc2e8a4b5ec783f501571de33c6cf98088ad468f3cbf2ee8a4167dfcec1449cfa43e731be4df6815fb3c1e46d3c3ddec370989f9b95da3196f0d3862020da3c49f13923b238032519e32aa5497959f814d7246fda18b1ba65c0155275e433d945ecba88fcd64705cb9df1d2397e270e87129804a6bf3ade4df03a318ef2b05fcb428a18d3f1c063ffd5aa65539e2f4cc63b249f280501a22c53d0dd97f1e17ff72a47fe8f67f5d37caca26bac6beca95de76165281836ee189286a13f133b819cf707c552b9aa961a55d7b3ae12a47b576ddc729c78d07a02216189218556e3303a3e425a466649a8695ecd1401827d454ddfed25e25faeaca82c8e05c54576e4ecebb682cf6e140d7822b883a167c6a09d6a3bfcceebaba244568a46fd6ac5d4a8f154f935c60c751e691c14ba15299a5486b67c58fc8944280ea855c6419e459358a1261fad0056edabd18f9f0f44e1f095102e04b673f0a8e66039eb42b2e0fd6d87e54150bba49c46e8ad798537342a6f69cbde0236a0f063f06da74d9427b83b3207b157af42bdc3b5a635f8780387e6fcf2438a882e2e2e6d66fd523ac791afa799da7448cc34e4d0d6c796009ef2f418a0ce5527467ab3a77711e512538fd224ea7a8770cfa66709fec0714a6b8c8a59d2727014d11a83c815567db73231bf9e34c6180d76d1a836c3f2cff50536795f3df8adde65a668a0cfb7d525dc3085c0698389794da1f74f4f223df227aa268428477853a835e4613b0c42e47285caec842ccdf7a719b189a9673c9b96ad88154ed7eb9bb9847985b4042b42eaaa0a630581e0cace07ad98443c6e2301fb14a6ddfaa03b9e29abc6bffd8b883ceb703773476ff0533471d8c997da7a0bf4a8a14ab98f6280e5cf583d25e7869c41ef1036c4f48ece6c61482d0f850d648139a198e3bddd308bd7f78b254df704920253f27faafc9dec8cd4b60ed605322db1cb13223394fcad6d1eaf493dd1f06dda5c10419167e00aacb7d4a0ce655722b911869700a78304d698903eb3a853c52135513b0f65dc9d2c65c0b682116247ff968e5972117b958dc08c23cc58fff13e1a0a479996b83ce15ab66c4a7a5ea1a1d4e3bb5d8ed9fa777454b1f85abf256f7da3b184cc7276efb6158c0a3c73816e36c1fac8363218c6d001d25e521cc2be039ef21981bcf07fab65e671fa2a66f83d8343d1214a5c4c6d54c45501ae1a4150bf668937d0f6efed822284637f24d78ffeaececd8511642f679fe9206ea525740c66101073d438670c7ffdc87037665aea2ac2e7662d18ee868591532e1556189d8dc5ab2f0512727a72bfcd24890be7a164257e1dec523092a0fec71464ad3bba8b99674fcd5a8df2d752cc4d0f74a7bb4a807416b7faa0d94d96f7592cf68934c8ca31cbfcbbf122a169d4e61dc1aec2c5bde70cf6a0ab649f986a833166cddb9e05728e65b1b5e22ed7ffeec627b309a98078def214f58a8c1c74aeb287a44445220149db6ffb316b0be436e7af482d5353dc6014dee56d275df35a94478b3588efb2e9772131f1556e60224fef26f1a96efc8aa2c26cbf698cde028aa4404bca858b2c851c3b4247d8706670ffb4ec2f0e7814d600695328e68d37c5576fa38e05cdaf46849afdd5a8d63501ddd3b223a5d81cb49b61396fe1811eb3f4bb65c295232fc3ba7d4d435c37c4ee1d959bde46d1caecd27c73fc86678d986f7aae3a12f0201ab28a047f0fe70ab325a7b825568c2eb279d089959e45088ef333c4e867e72e5157451ae25d91cc0635ccac26adc492a2715b93de6ea5ddbd8e8685f3842258b7abd151bbe5f2ad4e0ba706888120ffa7ab4f55d779b0fedf74fe01b7f5fcdc014657c4c0b620a94f433e77650f214b172f552ddc5d498b284f672cbd9a5600c1053f17af30bbb4105bdde10d584121fb8359bb1b3975678d95def74a8ab50dc8f1d134f519b32aa535212f0366ebb94a15c9baa6c757b44d524136e1895a7dbefc32f794da5b1f69fce4691046fc758f84f25769437107003fdfdb1125e94f22ef5c5a8a6595813cb9513c81a265d5ad4fef52f887129c3f5441f1987c3b85f779726b07ad94ec7059e2c974cc0d97d075fa338b03b98e83cfdbb00a47736066f6d6f3ce59afd6c8398ef41bbc3fd05e296969318ca29661f8a517afb883b0347cd6b9bd59f2cbe0db36e664c6fb00d9fba9283cc6b2ddeb49cdee0371eeb0125c6f230792b7a50c518921843067c4639c06fc50f0a89cf317247acc925c8a928ef346f36bd085c7b7dffaeda7f495212ba3bea5d2cd1b62fab7d6dddad2049f82834c863321ae80b322e73e2003361c42ac786eb60a0fb83d9f61fa0c78399c4f720c747da2c58e8328a803efac37a779b064085d82d37110469b2177a8432b2ebcad4f15c2a5eb05fe27e4277fa6449e74b7e83ebfc7245ebf0f898b6018e2b0f07764c3d03dcef479a83069c902f46bbf3c9eb7371d6ff61003ad452029eeb0f7b25b2ac3f0c213924cff90a00b63c5cec74271d935612b55332cd2aed879b0fb0e0b5689bf2e455bbf0591405da78e67d04aa6fb8c931f0db2c063df3bbe6d7d198f625cd76a801a44d85da8a837e6e42d3665e672cfd9ec973fea59a82743180d49bdd36f474ce87d89849d6fd37e078e7b7876b3a9803942d90c215841d6338b22bae3fc8dd7d1116012ccc3383f1a149ff70c317b15000da591368afef9429e126af151a561561cbae68534a3b3ffd0bdba260d532c8c2d07c4e4eec8ed27716c6ae6b27003a2336e66fb461acfb1e24a3a1b7a30769fd631b0c108600436f2d3a47c289f720764a86a7ae9a12f7ab7dbae15493607ff96fddca688c75453788840f96bf3059c4346576a60238bbf42a1423367e46f46570f10deb35fdedfa072b0c2c14cefc667574ddf4fcdb79ba3e0ec98287e22ab3e464f6fba6b0a6a299d671ec65695830f9d82ebe7938c21a824e9c4a973f33fa8b68919043332fba2cd488a71bb67b0fafadf4ced3e21fc0575867d7cd4977c75ef99911b0cea8cf867e1964c01a4f47e417c197820213cf01ff55d1f00b395a2730b417fd1769d489a26bfe2d5007b8bce3ebe1f8e5743d7194ff21f6323062736e5530d02485147b5d216794c4fb3bb8b047b668b4455ff434a6459fd0e80bcd33d927ba239201d06d11f22ea4bed8112911e6e29225c043385934070eb8b99e62f8c62d1fae921da07265e90cce4bf9b790f152dcd00f68c982243973146c93115af0ddf9798ecf41fb985264d8eee143b25164f833905c790f022d50b28418315bf2aadf39a8c9cc528b6023af59183a0a81d27301d851817c16e8ca7fe3ecdb67fe67800a908bbf90dfceaa8b2ae34024ab7f35babecc88f0ee5abdd26287b009bc2750e490b7c39a8750a2e3671cdef46b79bce346581b0008567129f710d0a9ba03a03c8ba6d42c7e337af94f6ce0330e743cb87d18c2546c44fad5537d21a60d4c68270bf6e57752198362c2ed84d762208065fa741618430e4a3cc6aee5be6a1b7f945f39b10940b4133f4c3279d52ef8738db3b8bf3e79f58cd2a49c3fa09818fbcadb7af1fabace8070b0cecad9002c7ae5ef14024f5ec7a532fa5035bda2ec63ff767019afada69f501755bfd758d79721433e8292de62b2d79e97689d10100235a5ff5e2d9033659c0cf587ca1fab917b11addd352b6ff91381c7dc98a7c3c946fa40976f4d82d55c7c944fb77b7a7f7ab9cecb2a3de19fc3cbfcb59d517b4015b6180524d66ada522853309531f3891f0708ce36c73f40031d3651fa21530545862e7ef6c8e1a3dabdd04650e6ca582751e3ccbaff81a178bc6765a8ea3c4b25787bded670331198e61fc6a8a9984ebfb9d1faf6bc82a0ed92556d3cdec860b494af75066c2a86694eabb62bf679589dc12f2b288a5308cd1648a457e8ea094d9426ccd6ee22317daf5d4f6d73f15f6de7b75fd733cefad1dbe91d993d440495c45595c39a7a2a67d1d971c651629a34c9feafd0bd820bc21d8648b57174a6d1f65bc6641cc77805beaad004284f6f37e44707482e53a97e47e6413525be6643da6f6fde8f0ec919486e352ca695d76aa81cb455ddb19d02fb1827fb1bda2af3cfe36abfddca703c1e7173577776da7512ba3a4a49d10e77a5367d087aef3d24592e06f6ddbe5431c53fa34aa94994ee1ce03a5f3e849ecf3555e55ac85573207baa58a56631b95d1aa2d7220b4504da2c014172bb5eecb88e3ad66b6d9d2d137531926048a6b8eab5e224c45d22e816f6da7c394e353a9efa1638dbc4c106ed6fa51133d8a81f15bb99348dd466740aae6ce89bb50c0f4f0c808c9c03cea1d18d1d3a2b9bda5fd5162a6d5390324230581fedb23b2e6ea4d4bb8454e79b60ad49968c1b5e4d09ec785838f48ef109f22713aefcad2f1bbacc69e62e488bb4b1bcabedcd2f53579c59dc61dc11986ef20d1e3073953e81514468429ba5500a258bcd1aae64468930ca6b017cc9d2b4ed7b7968f439c7d2b67e1056f0e718b78334b941c6591f50734376aaa80fd04eb3e190b140c7240e429b977701f642e0d43ef509489633b76706bef5f9d4345e25915fd9b946ca52e0f7e540a74d1286eb0b6c36325e4750f9326fed21dc8396ac95bf07c97520da19a6b0e0ce7c0eda9367858e1078b46ca46235ee9364c1608853a2e8003e334a0d8207b821e76c3e39eb37b5a79f6574e9e5a1ed5cad4e09539d6c069103be37f5a4c192c1d04e88f78ac3a9647485ebb7ac4891d58654c0e9c8714aae182363ec9b32538ba5ba42735f59a414255a7e2740cb13aff814141c380c678ff5e61d32476a3c41f6e252fdf74c5c886eddbb2202e38b276f39053f0db0ab7eec7ddbc86d9af5690057dc3d56bb20c2ba0a63858ffc3049c6a3dcd3a03ebc95e03ff2a734967e29a8b9c3a8cb4929de3c34594edd1bec017f00ded0ef687a292d1371b47c88e9d33e97edca74da5f0bee8c7dbd8147ee67e4bd32d79ba06a2ea2ee91e8dc6075169e2e5781d210de05517160cc43025ef7fa09c71be5ee67755d73eeb0cfd2a95af547fd8d38ef09e68a2ef5c459d78763d2a013460f562d026243432d136587b4e0991ce5aa2fae6dbddf6d1f0c540c39977586fefac1dff5e482d601e71222f49d1bb41c3f913241a8eda1ed149e4494f2ab60de55a410d8050eb027cf55759dcfb3660750ecbc8d5f3d912fd5cec99225d9bd1056dad9c56901c9a9c27c65398bb86850fbe1f53e17616a2f1a5ac3a9719dc16bc52a3016ce704ccf8183b074c65674dd6d2179aa3398154b26a2267270f6a59c942d73d83262c743731e4540ae8f88ed0b814b9f0add138474d7c4e500cffb3f122c9cc3ad70acb03cb9aa086170be18218d1a25279292bc526ee4d30340bd62783d49caa72ecf8d0f10fc72edfbe6eeec178d9f852638e3f750f380af2738b82725cdfa07066aca49fa8d78006e30eebb67d32b132729e378926621e13bde0f1bead30b2732cb533977bd549a485ffd370c9bbd4c66548d5bb8d7a6098ec7697940d5f9da8c1af00f2a0ce02f2ac117d15af7fad45d360ff56a0b854dd3a89f4baef08ff4ed8d36d08217ffb178973a6b5548f22c81ea55893b2a5de2e82a19e2dd9f5de29318b00ee9995477a30c0d70ac25b9d37ff2b20d03a8d13c3eb4ab90d746c0bde33df84652e647332b86ebaf1b03f645f074d0f6c13873f4ed7c8cd05b190fa6da3bb50ea9d073c274c6252920d183a44e2f0f052e8e949ba8ef573c3286b3e52ebd0a3d18c5b5749a30697b27c07cef99d4d3d61841cc0907b2fff21e81282f0853170ff438e8f5beb8a2cedb54bd2390654338f6ea5fd56e7a32fdb059cd50d2261ec208bcdf9494efb2ab755f124e5151d101e641a4bd7711f1dc80c34ee376f28ae823308f0381481f51e14f886048b8e4a96a7eff1d75f35253f835d91e1fe2a44656fa20ab566837f09502b30e22372bb7f250b74833d2edd2555532c65f71cb61327276747f9737f793ad49202543b2f66f9384f68b645f94e51d41c4dd967fa45ade9aa2b4f816e1d9e4b4077f9a5a283904acf88a2578bcf6377dfe20c58b1ac33fcb49c70921a5c2905bf9dee88d3bd7622618cb4fd3136c37d4f60eedceca026d18fa14d5e4d8f9bf98f63d0d68c924b371118f2d0d640c21435a2fc9741c6a530e5ce750972b2ab17ac1aed77771c42983c80af1b1a4a1f0d2a270ae46a3cbd540b0af635d9581b7a23541d54ab51e5dd9481cb8be5d975de03757cd9258d2b5b45dcbdd5fdda22c43e3750f286c4d8bac658b02dbedb14da9a0f42e06d8aa028aeddc502f5523dad90c2b15e1df844c1c55b3504180bce28a73daddd4701d093acf74433ecb9e3cc42fd9154a83f89b4cfa0512bf7a8cc87439bc3515574d8c1162e0394aaab34821d15a80325e0227b94c044b8058a9a3ceca67fbd8e10e4253843b036e8ce51acc8e8faed44ca45086693faf045efbc087bdb6147a255eca826932e87e9cce719e6cf3275616c7eab3bcb5a9424563d17b081b3f105e31a59440df12013f31da87211cb8d1912fffed061079a3e5f7bd278f673cd4000960d97a76359f911bd044e8f4b3aed90387c978bdc43cdf33bebd94430b263fdb2f5e7419cb6c9e4b910054800c59818b71d3f8a802ec45c6b1998744ea865084ca57c107f021cb0f1bb29382bf921062660c70a23408aaf51dafbf5ccd6fc3b5112e8717cbe3bba27d48fcb0f01e9e429874cd53b45aa943983649d3f58ba2f87af08f82c53f0c5142b47af2f26616146560f6619be51a7b9e40a5eee9596e472b6f481a24fda7840bde25fabd39aed6e0c6f5a7e9daa8b242c8bf56fcf4c0c6e0ba4ddf6ed31e06497f25c8462e4a2c668162680080652010458859432db01a7b15fcd70d0fe8ff8e5a2d87699e3a4f972a04dc0834ae66af9d29e027e4c2673ca573ba0461c267e47cf7ff4fcfad9bb9a63810f385786d6284c708aed0c4e02fb5922a00d1541a9223116accf0ae8676a05145ea74f9c8a4b69a4c925ff2ca96504b9a6797177fc8469816f803da7513bf28755009eb35a20de833d27c527c3f55a3591ec9a428ef6482cc1ac0e1fcf42dbc2c1ef125e3284edf4734259696becb3f1a5226d89f568b971651e72d58d654ba7b02c0c6828a85e99944a38d237226ead38e501398582e1586c6f63ceecad13f864b28db00ed188ba98493236d0f2379cbcb9d746ddb0c3e7b43d3e8ad90b4216744964c8f79c1883a0da1e0258d204a27d3f728d1122746d60ddf71c1b603628ff6dd4ce0934bb9f7882bcf936f53c4de1e58ed7413c3c4502105826808608430df5388771a170d6c127bcd762942b9662f3a945c41d101e9df0187038f3417e5312e12051c91568a3b30f9b6bf4cf65388346aa71428e851001f3ed0ec2086edb2a62ffc08a5751f8d7bb5bca011f5fe1671df5ea0c6b8a81509d7d2f9b2b2d17f3f5dda111f77100848de2053b3eeada6cfa77f187585b8aceddba3847d647a76a4703bc9fdcb4e1ee894e0a5f51b97a4ecf7467d28b50e594d2194ad9f825dd87802c75f6c04d29b047155229e08fd79645dc17b84b5131d7b3c0de842e5fcd48a3ffac4997c6a18157e084de2367115094c95698d803d2e7e00bc2eeda1048e535ea7d66df857d65323e342de9e832b1d6987a8eae785481fa219f35c30d73d22fcfbd9fe31ce0b5e50b6ba02083c2318c78154462a28548363eaea6769685a7708198feba092c4091bfb8fae0892ba30e2a694be0163591dca4bd000c1237f1274e0109606b9f35429d098670e532ec6ca80640eb61a6db8d586f79cbd21cbdf69408913473f7f2878e4819d4622162432dc944b6ef3e6bf7c4beb92fd8462ed047f204bff672217cbcceb1324d68edc15b122e3054e3744600ab190f4c2e3cbbe8f446d6c3e3e531aadfb4f5cf9a0ec3ab68543e996d5c91fd1e878553b322b1ecf70996279a8f98dd506b5d9255b9eef9d9b4eb89ade274c78a5771b8f033b92ec56b10be9aab0b62ada28d6673ec4d1d58aef56ff5bd5cfb4074a025be1e0e3acc90b6d1db49e0976a66b95f539a24f6f9e53557166c2b0396da2cdb3d3afd2300cd83d426d3917709d06c8df35b394879942cd898904a11bca21a447750ed8c50da725784663f67b4af5e097e11b8db43d7e52e92ec4f3680970e2bea333493aa5b16371c85a9b7c9b12917105d981b2033112da725512f32542909300a546e11fde0928ab8e55e040985ac9779776ba016a555310d639d899e547e70aa487672bcc6f10ac19482b6e2ab135c69d01cf09702dbf983e889630dee12e4d485ea8b4b9d816155978a25958ad3388ae6bb6eb65b7349886afd62aed932087c3fd780225eff088e38d4a25750256d211c55129f061db35ecd2361c5dd046e4baa9543f8ee76232dd6616b1d0b283996596d7e7987489c17736cb2d8406443e134a48a094554760dc96511aa39e7cd606eaf2d65b427f46e071e373461488ee3567d5cfe66ba2f1ac14da808a182a56c9684c3d4964d6cbb3c43ad407e3bc9edb66b92722deda28ec0f26d2cdcaf279f93c2e1f982983c98aa04a355ccecca1818ccf93551d6223fe02136ca2754699847e1b51926b4e15a114eaf8b4f5017fe7dd26d525aca87643e629bdf3f9ce21ace8a31e382293e2ac2bca2ff029c4a7faf89c0371aa564243df05f953c18ecd23512039b50cf723637d2336ba90b23228533c089d3a048a2474818a1e47615fb2222db1eed956f01c9df683c9140afda15ffa5f749fdd8abb9a7c7181a617f5d1a82ecebd5f4be6bfa464279e9c97b633d015bb5f9d71e641e88af3a2530f13aac35f8873b7004eb261e0f7f2039f89e5d5e8447821e5f3ce5a940243ede91f3238f9c40b4d72ab44c47191b7f4e98231a0c797d5749070ed99385118ffba4ee253e82b7578e3e8510f62ee9ac410216cd4e9895825383acc0c8db384cc1830c7896ac5d2c8ac3b167e750a439f7d59867a62153636154d73d809c2e7b371534b112b45dfbb5680c774ea30bbefff5fcd8f62bc3d43df98544663f15745333d166511ea7a1b970da4e2b27442cb34538e20236c7b3ff97c86c69f7d39f84cd8268cae7ab3b326a526baf0347a4e668a9042de3081a4141adaf8e2a6b9a394b34700982dc3f8d4ab1e29be1c2254aed7bb7bd98ed46f74a4f3534dccfe782de49ceeee1406b77978cda6559b004043f72960ebe5985f63e3391d43df05ac02da4abdeb64dba6a90d02d9b043f2cd1204e85884be263e811e205c6bd285ec5c8cce88df0d0eda6f22e0fe30e9c848a477afc23b2e0e0fc60ca9f37601d511a8d28d15e9a60067a84b825e1386d20c1faaf3a2c8338ca190ae468ce394503e2b4795624345c262c581759aa1e807550d28e2d98be37a21813235aa58289f47cc8039032fc1bdc68d62670e45d4d4580376a9727d24c0ff2cc0512609b4f47f27e36b4d6d0db5ebcf2165a70e73ff0078db01e8248a8287ca156f8c35fcbee01a30ff0bd512516a93dd271b12605ba2876d7e7e9d36790e8d5c198dc9ac6f4169dd513eee283cc5bde2038dc8f5b325d6bbd42d5e82f1450b175dca110839c53c4f91b06d1661b60fad73821149d55b933250378f27329d287ad9812b0979cb9b60f70fb5f3d8f28b9b4110ab09b019d64205d1c613b5b829151f28ab5bc8e8fc5225a87ad2e19b40bd79e2176facd120ede0cc8599084afb8be50cec792016bcf549463dcdb2ef5f6355fc3741ff6a305495d49228a24834cfdbbc76a13b1c3b5899b3ef7ea611d7a8638247bd91c08c107b7fff3a6b55c07ffdbd3845387d2a5d3029320ea313e0229a299fad1d4e9502b292a4a478ad94d80ef656b1d72c85d0dd345f0b545d28fcf168992c3e5b141537d5c284577ecff155013d1a88c22bbd548d2106d8213736386eae4cb67ea42c07f5512a03fb337a926275ff7e3258b22a36c432d16188ec4585acabdec8e4b9bf525d3b9104856d69f9521ac46c028a8c85f8d776bb349f01a07f088dda4f1947b0e5c7bb7c5ccaefa57b14cd51ac2f69d2e5db6e209d6ed2622579d8ceabb2267c06b24314ab43585ff412c8fe0d8d1d56e847156b44bbd89d7ca2c6c972be86782f43526ef8d2ba7a7d5b6af4d23530b9ce32c0d3d35b7474d9e7f66fb9160954e80dc7e4d471b3666084e4a3872d718da1200ed6ba31e6d9bf3b6c6c95209ae2db50623c0865432cf562b582112d2bc727476bdf4fcceb28b68639a6b8f7b8db85082434c4bf7a97b898d246e01c0a8ee0456aa1f1d5aed9e6f588f8482de0db866a8ca41c309dc5fa55499f2b88fd5a74637e324a405b8ce342857c4789f3440f118284116bb88fe704cb7cb7752b27b575efbd31ec029c49c5e5f503d79a05aef8d816d274feee23edbbd5f44a193b4a28ef4d16763794dd5e280311062f780ee9eda36f77b4492df128bf05b295ac3116ec3bbc5ca1bd04e76cd2f418d56facd622c7919c33e1a052cf8a8255319bfea73ee1864ba9a85f95e706270115825e0b8e8db4af0e107e8bc591634ebb61a7f474e49d01705cdf7a2d48c6eb09dd954ab281c549474e629aa7208fbcb1e0403b04f847d3ebf766265be0296cba519533b9961602b514c81a43eb6bb5ef1f5abc2d641823a22a4ecb4540ca45422167c3e4928d6ee3cba80ef7d89ec97f07b81cf5f1ef2e87a596be3fe4c9d8d587b7f38564f1dc5b962202d90ce9b2c228ea6228989d3c5a2dd18e14f659143e7be112e67e136dc23c32d10c55f7ccebffabbb60d2bd6e945cafbbcb49d2a38024a1355350a55da8ec3b2380001e759292c4b52275c8e9fb5066ce88d8968b8e36e0f8d8f342f21490371415dd41fbf266c2964f33bcb7b68d6fe4099c5ab279e81f2dee7e393b278b53f21e895d4051202288f110bf37991c7f47c79a5f0114a83578cda915fc389f31dc0a2288d33b6e10c7a7c18c55dabc3b16b087539666f5ce3cf6e55196849a1fa5726f40ee283b309cefb0cba99fad6c2fe3eff65193bf5e05349c641559741b509fc39cad01897fa283c660798072483463eb235169d8dc710c293f275374220746cdb38da16c8e0d35cd60b91befdf721bee1e1a048affd9154e7fa7ffcd2ec343d3e64180396de829cf3f4519b299bbea338531c5d88362765d168c1abb5c93eaff007c94329850a0bb6d1178f853858fbb9632304a8afc4b99a0d554b56e14f518e17d4061b514de2d5d8a7eca13a015dedeb751b6b10d3eb62bdd2928376232486a3bc3a732e80d6d509b8ea6d82f9b5a14748446ca38d9118e2538adc1dbf0acaee66616e5e9d889e9838ab1341e115e687ccd7af37626e2a39d301372ee4a293ac72452fb48e74cc43b7590e2400084a511fda94297d77c680968aa3d36d5e64f8219d5a50929d4fd2e114f496ab2c9531ebe9d79361003dbf235732f2174d4c95ef3450c6883955ef24af3e8b7be2c5c5089aa06e8e10ebb213fcbfe1fd88e2db24e876dda0b87a9311f8bf4e317cb46bdb864b978b1a85f16b454ac5dab53928684af4ce2d3cfde1ea8d86a49811494da565dbdad936f7bb47214b0285078dcd7d34f89bdd1e19ef5b5606c3ee25865d3bd95643e825a71f5366d3712eabe32f29235496b8aace2627309e8a9d7276e7ec43b1ba0e3ecd418d95d98313695cbd9a3de1ea388e344bb02f2bf3488936626d5508267b6e2837fa185cdbab2b83f4570142ab08ababe93ea12195dea11af315f36ac73d9247aed30e7ce0bef63e00316385f6ac7f49e6896dcabf41317b853974b6178f7a18666a3da04e5ce86dacba37a902ee6b172ece5181cbe94ce3eadf0232ff7ff8e0035a58216117c7134e1e2ecca4147cfedb3c6025ce7a350a6e72aa3790e474ed818801c1f9330e20885607ff5a0be0e9f739b506c1de11a0697fdd5d0688138e40134d1723b3922c73fe2332a9d1652c24b45aa5722f42dd6106148f1dabac41694bac23b6e9591e20c5ac345b683db851377a42157383086a9ba91e6b47e5214e3b5fe9b218b47b57c83c67dd86bc54a78faa4c793c325a79ddc4f1b2d557151fcd15b07cd43d9c90d74e8149c1908e41984c899d224ceaebe8f160ff38f9e113bbee1803a54d2168edb6c5e27f03d6fb2b37296e57a046c60c1a122217d7a30aa398bda3d58aad7888a04f490b18bdf954584d54951708514a7c10d41bb3829e5150c0f5b68fc1312be1f02838d3b3ea07a0ff1a945e6289d56b971026942fcbc1f4037d44b4f73ada5592d6ab33d3c6a6b941f12d1a010d2183ba87edb3b332d64daa1409be7a747e341be70bb9661e34b63c2770a9e157c72979d39d94171e22316de18e66467fb8380e7ca58908ca1b73785eb94bd890a71e40c2e660c26594ca46d13bc08cd9504004877336f0ea71050a805c2a8f0922c735bf47f2800a75c3f1fa4a99873b4cf76ae1f3ea71cd1307378ddde747d0c84cb006e82a54e9e2b2ebe48de35a13aa41a2f6ac6feea05c60fefa871ab57197b2ac78d9a8475cbb29c224a45839f47937864338d2a9f3f65115bba0e7292dbabba478f19ad3ab79ae211a107859f2cdadbaa45240d1b3fb7285ac87a4578823a0ba1f03c123f50860996d113a2ccb0e3331a578fd50a2e8c997a07d2eaf27cbe921a7d69d8060f3e73f9ddc577321e8f45d974efc8757c64bb1ad1247c90973647d7b83e6521ce9a5daa1310e0fbf289ab617b7fcb7fb4ee41d3f3e3be5a1a1d7be165fcf977448c44a835248b1d4698a0d0ac8b0f40c9299c91239c67b20874dd5eb49952247a6df5e905ed4af01203afb7c57de49012ac5a3662478d0540981904879c668a45cf70d46c2fc8791e61b25b621862978825cbd5fcabf3140b6de51df4f4a1397593041522d44e4631afe20493bb0aa061404eac15916ffe0e9becbff5fa26a4841bf44f23612e287e94d91b7fa40baa172fb8ac23fac8911825a069e6b1771bfc5e07497a4dcece5e9ca6aab8c1229e34872fcfaac163b925dfd22a77960cc4b8cd1eb7a0fdf45cc5ebd92523f02fe7e3310d9f1f6c4455aca99de7299c003b4662bb9dc39812c58b7ca0f954bf63e72168b42fcff18e778409d3db48c180454af231a7f0f144cb18a35f3c2c8fc6d91569579289a0040a29eec37fa38a030bb19f87eb281d72cd0cf6834ca45c4c87e5665062579f5685c57cb40fc10e35e62be2a9eb866df4d78f1a03683c1e046b9e766ef1d905eee12a35b658a3231aca4de77bf74b5528e3c6c24df9356f1c82c461febbd40d9dd45821c5d4886dde26c9609c609fc33483b747eb4a86389098a29ba7501694c70a2c956c2b76bcdef9a01072ad085de7b09369b9973a7db97e169ab7cc67d6fb86715f80cd27e1bbbd1e3f05ec36fbe31d514d3548d42df78c34b9ab5890d558643cbd12ae914f884d2deb5a719f7a0975864a00ccd419b1d3f0b67036a14ed3883522d7b58150a5d922e1227a76efe2b456bad2215fc12e73e02c45c220de34e1aba5a4be3ef2a84546a933e95840454104d9e6394d108ce40099a20cfcf9891a69dc9f9b97b05e4601633c8476a9a9e07d3d87bc50d700fbf771de4e57b2ce82602d9a8fbd0632c26bd93d525b9ba46b7a48ffb841f29213b1102a1f7d7d7a0b4a17fb395422296571938b96229eadc7d51c48e38ed460a6622c274eb6375dab0e4b140ac600de3b053546b9ab3535e0528f2a01c10d64e35749eb231c0073ec54ea3e6ea34243de23c7482a3e76cedd0766475f7048b600ea23356398f13bb047ad561edf52fe95c888971580a703ba0d036b66a2eef052bb29f644cb0bd13117c9092e58d44bcea79a8cc21043d802859d4108baf633029b025ea6dbede6850b36afdcfaad776dd936318372a7c8f69dac11c0afcdea03baa01e792eb7f7476ef5a73cf0584f207c4e6585295c73f8586ba2fefc98911874a3f781c664aa010cd4906d09557c9ef086ecd111258d5662c07cdac189386eb7103aa4993fe7d48c1e5c17489699c5084ef0f1cbc9015ce84bb2a87ecbc61afb92a6c53761ff54b8fdc8c23c23705ee3f6432572ece8d6d841b618c54e68bf715f31d789771c6ab3cbe7a85378aed74f64c8b69878bb7e0dd219be9285ed466389e4d5e457ed04c1509682f8829efea972303ce3b794608a60fdf8cec2517a7a887964c1013fe39dd5c4fb371a828cb87c3a2d7fff35dcce68dde1223643c21c986c62d7e9fc003e19d1764f9844af48682e64c96fdb48fabaec76ec69eac749ee9057985a8f5a7789fb8afbc496fff9eed7c40ae4e4fd91627614a1271ea93d17bcad291a774ab4156cb8cdbe7f66d8bf60013f7c386b6fe794bb8d9409984fedf8962588fe5c9052f2fd9c7d58ec0511daf02184f4360e3fc2b2bcb6fbb42cfe12c274ba08ea39e215c2a8ba69666283bb58d4afe6cc52628be5c826ad08e0ccb49a2749c7bcda4fe3cfec22a3ff4600b04787ea634380af06cb45b507860cac631602fca1ea508b059a6907d3492a310aac5612fd9513bb0ef69005b7ada0e5a5fa8634fcf7e8262bcac097c3648626988c6965a01b06209f2564b8518c3fd4541865f68c52891c239257de0f0f9fb6fbf6b492c7f7aa23402ffb43bd3fab213e71a9469e7421b7e56dd86e877a867c62d17d18110b030c6f366465adee5f40d7f091c370ff8eeab7b27b2d4dcc259009d193a0764443485e5a6a88c1bbb60fff078a1c58339e800c85cf6ed5e2dab894462c7923ad27010dba41801fbcde12d0a71a4849f30c5f0136742a2f8176dd26eaf46a736d0d2a3bbd75a432323155bbedb5693bb6e8ab7042fc1294aae6e21cece7f8b359905fa276d33b31a45ec391f21ea78aa1162bf75923908e2c36366798a4f998987614a46209f16cf9f0f3eac34a0f014990e288c8bdbd52b4163c277d560ebbbec65aa7870f298f74199815a63e5f539005a083a3c16418d5f13d97ca1007065d147c55a05e110fef7b48bac578e950db00e63a54f0a993b65c94bd723cb2e91f2fcf8142425eb1712c76864036a4489a21f4925e05ef235099c9e577b6341b7718dc6ec49304e53cf15333b1c90ecdc49781cf0ec84d7ce05426bfb642d6bde7d56080820673046fdc61e842ac8d8ed2a38cc228de95d9381e36c35cd04323893c919e5384d9b9dc1f3bd673bf5aabb0c8558d06c5706caea1057c6748f652034bf300e9684d9e38f6427ebfbc1316ee5d1923e9929a3ceef35bc4e8494bbd8e4263d77b1cc20ff49451c08a84946c6c075f6e58877955b9b1d520eaa15058c0ac19b0629d301cf175e6148395cd937ee4bdc1c43a47e2e4a9ee3052c45016b0945b0f34955daf03fc178bd1a50ec37b5535080caf78a02847e2d6a83b5e1b87fd6e90662436a4305a40de635b2cfe442c0aa2562e8256c2315e2d0373962a22b7b635674ebe679c179ad42f62f204e636ee19303bf495da831a497e603d622c79a170cf8e5414134a1e91ecec01cd4e01d403f619085632019d419bd5edcafb564a2ed5336dfddb6c91858687b5263285702252a2ec88cdea6393e5e67b2c7916f37f77f71c239e9f94704af703dbdc187cd00f8863bf3dbeed8fd2d71a341208b155513ec427d224dfec3c9ef3a7c8f9a2b2039e49cf6525bffc9205a6de2e62edcb34ba553f99f939ad515effad3ed9a85055bbbdb2762fe166bdb8b164af26e09ad07a7bab8b4ca3e2102d252ca05de499e00070ec933bc6ccef978412e3b52a13c838325ebd4e8adb065b88126ba52e7bfb0356a88a81d82bd155006ab3fc2f45f6188d515276179144869e461af097eb4cd4deb8f1b66e953d1554a830004415c3086005c11c8d46a53061efa0246586881e363b69de41039f364f87b8f07260759c6a2cfda29dd1570251d1301f22b81865fbea79d6d951d01048f309f0ec4b8f1c44311a53fa72da99559ff4a1756e420f4d0a8995b3581f8614ad75e1db35c4a21dbefe8d7ed1813fa989d5fe71039dc323bc58ba1a3a2f1ba1842bc2f57ac0a4e6e4be552e756f7dd9fe5e9c21986de121ab14de086a4e7c3a3d02997163507e1ddb786f3a32e92d26585e8065cce5dac953898f33e275b7be7fd69192577db0e68497b6b61859ec4e321181bab87cd221aeb08e77c6d8301d3ccc58d0a1e59ad7d5e29eda5741b5d333ef1b0a4fbd04e6e31b9340a52f137ac541a9ce999efa216b09acd596e8e98ed094e1cc66a165690102ea4232cba8e8959d8d291799a8dea49d82778e1254937e10e8e2094337c8b93d14370b2be3a000dad212ff6eb8b2cfff35e0740640e91cc0b72963792abb6c671f8b04b58208ecced968f4dab48ddca5d6f8bb9654988730d69f6477bda0f5d6c92ca6b8e8be16075e455229292303c474bb5e887b4286dcc72a23524409b17b2bc3da30661ad5da591cc8b01636ea39a0e4c53eb8bef1a5a5a39f5a05df11c8f8a5776bf6edb6d8ff9bc2f25be8023976048ac71759151013bbbea69cf285392afbc1b88fdabf432a87fb808a2d9979a7038e67823c9e017782cdd66e2c6269676cbe71e298482202393dc7afa5f58ef0b5de3958e0ca3b39bfac100f12a5387e2b6083d130d3fb1da4f7a725a7f87569233a8218c481e20dd0f02aaf84bb8c85fcdd3e99bf388ddcb95055ffed822c6e609d76b5ca1594d9cad58268158d3a6d07c29c12f978be461db73a6cd0595fb77da39fc89555a48dd06285f98aab2754b1e0df6e5e1044ae2101077277ce002ffa12da9a529b363112f97f8b0ab9d1cc461ec32178e7c19ed0c4ba02f6c2141c1888df8b94ecfa113ec01d17481a79ad78f58a7f646bb1b791a4bd9e5c6009b635a62a6f7ea7f2eb031c25d76c676d8f36d4ff00287bb6cbefdac3a5792a2a3a98509fe28b7979203d6a94ef6f91aa04c9ac9d2671a9bef7ed8fb69801879e87211f2500916d0676040c1c74641b4b3f1a8cc5e86d85129a91cbc7c06f825e95d2a4a45343deb85685a703a643e5503fbe2b708feb011ef627182585e8b96a977d7d1549dde4e53255504a7ec2dc5636c37f366094c2e887ab8d245aeca036df7d600d2957e07acc3fc11f44d4423cc1654a50a3564bc326eac930c52ec3dcfdef24d1acda74a963d64986556b4a04669647aa8b7bb65d424846aaacd19a410681aeb7b4a31fe35be581ff6a2127da40b295d53fd8d6990d795310b4148cafb691a463995f18fccc29444df7b9a9fcb64e2b7b2523d9387f4937a2b1b5122bd87b694af483dc77325469226d7bd743812a2f70d5c95edf440dcf76d8e85aa69743f92c95abdb0fa94b74e6c6e05dd6b06a456fec70ed643d0d729bd74c9efa94dea56f1b4125df5c3775855bde1703123c37550a9f53f43441c1bbf9c78f7325a6ca5be82236a43e7fb999bcd8dd92a1360d25143805d9871b0b84e06fc50f5a1f40966a4be94821c78e48dc6a7322cb4ad2b8628846607faeb9bbf6b6fba8959d440b26210b5fe9e3db67882a055a89a2a0dc7b3569aa78c3d660dfa057ad037510fb9decb69e3c6b469873a4f69a16eea6e48b6353ef92bb62cdbd6b9847570c4f2d98e34151e705f1c056c0f32f244f4de3d46748d5a43cb7f04fd3658bba6d866ac1c84fdeb89801cbcaadea1e828c293c2500ff9d4a662494ad1cc646d8a7c54e626a87a6ec249bac47cfb95069c31938f5b8b78e3fc7cab337ffd2eb3f24e1f1e5512381b7b5461af11c46bb68c5588bf7b79b42a22f64ece4a2976bbcf2f216d26e92af8503dd7e7bed2e7c59e90eabd10823796a8d001f1354ac4dd9d5b9484c2d0a8dd5b48946affd00f624f36221f12e2652aa983ff1019cbc453f9d8837e2bd0f2a82329fd603fabf1c0081fa75a239824e43f0b44276f00b16cad35eaba512892ed5595cc050d0a489933d6c9c71447dc778031ade2af5005270ba27ce6d70ba758712305113b84325d3f1e20598e56d0b93f894296597d7899907df63ec805ba5f29eb4584a0bee310ce6c2a328f90c75c4fbdd69465e2d12ed141bbb28bd753f4f7b3ffa7812af0d5f0e6dec722e8e3ecacc598301c550097abf6a6aeb59e89e61b434cccebe82e90fa313b0a7d091ed6a0ea64db656d79aea2591f51bd8ff5e40a7661a499efd28f6e96ce0b63d9d17c8785b5ba0608b6d896c777dbf1ec44dc73dd6c604849805fb9be25b964bc2391dbf3ed138ccba8469463aa301684678c6c783f33673cc278a79e2e79185c168a5c5ba6195afb94d46ca6cc403e4ebaefd940329b254f6d44174daeea681bfbce48477f0f59b12ceaf4490506a0c49969c2788780d8fd29ccdf7aa40f357e337faae78d917e1eeb8e113eb4e276f2527f4de193a403f3571b14694bbda1cf6341fec577793f4565d26aaa9dc45b5f3fe5ef0b6da49fc45d59dfc1532f4bea415adf29fcfdb9580d560ac45918b1c10e80c0f4174b0ce09db9639775fb818cfb3248d303102aa718cd4c7b950d8dd1294decc3661a446270ce72db0123fb4c71115821f2be16cae74b752bbd0376a452aff61a86844b48c7fb324d2ce777d45963c708c5e572cf59670a2a656869fea379aca0f54ff836143fd94cb8670421abada711cefe07ca9b14bc7c8a6abea1441fb5d8ea58be88dc7f6892caeb464d7dc6009ff4ebbb8e197b69a0d66ccd71c1fb3770af0cc1941b78da4744e94d38773b167cd4a37273b71901b1115ea744efd7dd9fafcef6ab90d29567ccec60799aa5c48192837141f54ebbb9f3e2dfe97ac620630cb3ad5c3a179db84e38f874eb3d66950d1e224ecdc3c6170af1fc67b265f69e2265c2e8b3ee2aca1fe15a033409cd9f26bac7be4616d9305b9631d2ef50b0f9adfb699a3ec2c6d9ffa40ff68df5ff91eaf331e0553168e8240a675eb9ec72bfd82b65664e99be30a9a3654b3bfbdc520169fa05a630666fb6fbc222732b183f08ec444864092c4cdd52f2ad0baf2a5341c8ca75586dbf45c40282dc401042d8c2807820fd0c86c1f0d116e954dc0f08932d560ab1a7927c16f34eaee14db23ed719182b81f5132059d93f76cc70927d2c268f7e68ff0ded853493ec2e69d053e4bdb946f79b4fa12cbdca6e25e22f9f86c74c39d5b78530d6b099f4c099e53ae69baf58113eea7579d6b1828ba729d65525faa2aaf39a022f6e7509d0e5ebdb74259b5d6392e50e45b6872bf0f058169041a6f38f75297650dde3ce8fc66aaaac409fed4f0e596e72c186d052eccf77d78f59dc8b33741749a6769a2564988b82adb5ec867888c9f28dd901e3b4c4cca73ed3652f21f852bfb554a97ed8c6733689b70267ea243932a53c8f6ee990fc992ed6dd5ce50d002547171d8a1b715ec1642bb38320aca6240c3b40a516fee04db8814d1abee4e74da9a734f2adce6dd3615daf64d30c82c58f301cabb400a842687f8b3cabf65ca17ad5a6342358711bf73751b4eaf14da452a6ef81836595383b4a0e117775498d246a0cab7db1c9ec5feaf766a89ece9762c5e739151663654ef9255c3f1c80893a113e89580b391a0ebbb9114a32081f95666b0e883925a8607f24314e1ee8ec144eaefb353d3c903cdbd8afe94f9268b4be17d32718ec9211cc887bf4421c211c6904c20ea46d6719093fe98dbb165cdf758795d3fcd3bd044cba24078d23816aae181f2c883e2648b4f1feb493d888ac550dd8ce25d647da67372c1b0ac7afe7558d0e60d4daf125fab54723d28ab239691d0ea717ba0395e48399d0498a90a1d37e6c29baf261f67575b0170d687d6f4c3d18c01c6bea06cae4693037907e79db785b026adce21c37a09d9159e832c43769bcf64a5c74fff02474b7994521c551e8ce05509aa8a8b59210f2e21e2a94197b8cac25da28980acd2020d4d7673986780791a400906eae5ad78feeb7f7e46057573978cdc4fd827e99c39eb7f71872fd3f4fa58220ccd90ea041081a282aed3f057bcee6b2ddef6465eb0d8564f900b1f4b6a9f4ecdae7543dc6c997cade83ccae3d94708567d470964db308ad57a8d5813a77542aa3add9e844bf8fc854b4bd7acd1e3952d73e38849b64c7e08b8db446efbcd81099b2e9696b1d263c704cb8def38d9a9267a2d70bc4e450653917a51fe969f6948026eb976a54da79174e38f64ee19f1c7a533f9d1d7d5789c5771913a554f22252f943cc18cb71b5ce0e4be1f5b397b380ef0edfa262b605b345f2475c344353c6d3d703b1c3a64b2991cc1d4b22075c38236785e46a2190c00b8392fb9939d55fb49f51f4bdfec97a7f273a2127b806b53167bb94a4397fbfd790d382fddb1b08475be9cc1db74b82bc3cf287ad200e84ca09f566b42e9b919532cd2955832b2892dd7163725f1c9e8ad57afb583b686279f3cd3be2d1294aefb168d659bce7f645ec8d3416dcda056c68385cadc16f0329fec523def3f4de99bfd7bd9f0012f08274d1ab40b8a66316dbf8654ec2ba0dfc7311ad5bb6202a2bbff0f697540d4a3ca4a5d9eb7069689aa677a3a9f730ca7f539531b0a587f5d21d7862fd9795fd4cfa3a82aec71dbe8e1b5c50300a3150a3e2fda818be69d231bd78f7db9dc9b668459e0ba63f10d1b7d9534c9427d378102fbefe1f4f1b5e90818e3e76e7dad3e0514067da362affa2bff7f39523a573a61dd08e1002b9209fcfac2f57abc4a08d113095bc0d68a682c486bf0ef474c62f50f4969e2857b8c338352355c07c568e7d7175b38ea62e0c60d78a5c581c58847414268bba52e59f4b6a44c60046fcc3761ffb1dcd4ab9128dedc0f49e676d311c798ca1df6f211fdd6f1900b4d3c624d9a8ceeb4f80aa829de592c62619d1b990929bdd88f2b31eb1b8041c88ee3cc30edbc0935e574407338f3b95bf1acb65392bd8997ab9288dd1c829f6060b33cb8da35768a4374fd7b67ac9f7f640738bb5a8813f31579b121b2d902383192d8a3db5d2a5bef649f7d3802ea3351d0f915771b6aedd9767f88c7863b0943b4a1cdd770723b3debe69084cc6d773bcfe2a3d78cb78abe95b3e643d58695ac7c0beef72e7f53785a85876ab2d76bcf27502ecc192d284c46e5f39f7d7fa1d34de032be3d0c0c3766a1697dfbb49aed1d703085e8ef749bb48bd552c581838fbe83532e2dd2814838c9747397f3e4cbd067f673271b7a6ef807a7ec95b14ba0f5b793a9146914479f56d522b35f1a34e64af81ec0ad4eee1c9cb37268a03df9d5b12f4bfcb4f6888058cef591e8d78215c1f12db51a8b081c0469ccbd633a13b81cf0e6035e5133877cd0e9320e1eb15397e59c2299578d0ec2b7f73b4b7a7f2dae0695a7d21d68691665733cc6853453238743f9de0d41d193710e46341c182497c6310b4ecde73a54da7774bc65a4737fbf61883370a5caaba25e3d283fdb82a5ada870eb971e3b398b1c6f7511258562554a00d5320ac5fffdc575b87d8a273fe19a01c15d8a0f7395ad31afc28814626a3b9e8e51f7aa767c31825cc2c18ac033bb2ebb73b7f5bd57134c244f1bd4c8bc6b080660bb351d10900dc4c0d2aa66e0129a63fe59dceff8f6a9f3b2e6020f035c1805999a8128633592e67531c4aac8c7009a4229453f349e812f5fb85d4eee1289a9f2713548e67216d4c45b5689d6b825436ae271b4bfa72d4054b65857f90b78e88da69699eaf7de3eb9844503fb6e6d35e0b27d18d86055d16237dc2c33292ecb7af48c97d2e2c81f0088c0ca21f76808329b6de84edcf600a285768d16cea9f222c0686f67d423613824d7f25c586cc6abfa1a6e8e8636250be38bb15af36f5d8316bdff11cdeb4ae7d923ca873dc8aeb826aadb72fab40dfe4ab1da22691b8c9e84de2b4820bc3d60ce4cb8aa0bebd8875ee61178ea4552afdce90ba85e265e23cf98c27caee2d4e926456993a0ebbcb445cd448dd39cfb703bda111d08ef1ca91935d4652d333eb99dc1a22f3269c423d69f2075e9685f8b4fa16a55c860e169c9bcd451dccf532b019ee657cc5043702a47295ff87e243375e4ac58c4d22e24bae7610d377f23d0ef9fac747dc97d3e4220bc03db08fdb65d9e6052f038dcbdc183195bdbddb50674c6910c00c738e6c803b5839e21bd45201615e5a32f196a110dedf5941546cddc614493b579d5162f67c315ee7fa23a72ccb3da3316113922ba1956f6d8b8dd28e8455e2b6b7cf3f64926dd3e46f101ec09a7c37243b1818cd7d2098d7da5717aad5f762d96e232cd0561abd45fcef76a79d66a9d130def1fb8d873a92292373e51814f34cb856aeb83472af5295881ff6efa116ef5a0b638a4ce35546d9e0dc84b82ae6813170bd2b2c51617077c6e89a3c3f1faae6c1470d299cac3b3176b845b9ad09fd08099f1e4df750860f0fdf0e1d5351b2f2dded2bb82048162663b442c11fb222a38d80c5c3261736bf830b46b804ca0b395bb3e9325185a1634a9d2b2b68c472695fd3035deb6ea2e55c835a07e914046fe3236297651b32ba00716a905af23ad680ea66109aa93d0004aef35991555e767c5905c46781479cf4606dfdb0ebf7b0a06a8e86dcaf50436f70672f20c4c831b428cfffa21d62c87a6660d137eb7a59a509bcbc51354e73f59598b0ff65f137f6bfbb7c2600b4bcd870202df178f878bb2b9070e17d40379739e3a31974cb997dc8d274b51b56176236b36a9742699f9185beaf9857ee9e67e7bb41ae351a6249b9c2fb3998634b21f64afcdf0356c4f257d8ea6f03e9602890fe8034a10275d929a415dd22ae21401b6b4b1758cc155ab545d7d555bf2845320dbf16bdb86eb74d8f191521ca42eda493930c410683d55e0aaa9f05d7c31f731a98c2837651a2bcf92c4cc19bb871dfb1f44f4049364ebe95c4166c9671796669653eb97c97e66f3266f33d79b0d68756514d6be3f469e9a5116c5d811c51950a56251a0c76b12d15032a5d7f20acbb94487a644742f3a55b1c774ad9dfe46b24870d6fc1d90550d8cfbcf086597de87aadff58179806f000cf05e5e5ac36ee6bba3fb3c32986ec936f0df5fa15abf9d87a8badfd57a7a6cfea10b3722c89726956b9adb483e8233877f20adefa35181de4d3e6159c3521f00e5a0461ae27b4ab5c39d6efb8bd5d423ef0cee7ec80b58cc836a1353b950d47e93a57a5322d0a421b563b2610bc21794410ac30a0aa432bc647fcf024622400062350293b390b2636726211f5a14010582b730678fc651d8d315d1b25db6f7ccbba36cab13c93a2b8a1d066385503a98de708bb37cbcb6728aecefd3dbb0addd1c2d4168c183a29c66c95b7273734377b417995aa63c17e2cbf48b0eaef1b3e24a8da782d97c874fb959187d81625d80834c2b53547c87823b1ab8e69663fb391b5ab021a0467361c90ced9568a3c91bed0d965a4a50d4bf60b5aafee593100a74e274f82a443e96c571a1663110e2b308521c9c73083391e78d71a65060daf64b4fb10f3f69699ed1a267d3dbed18d39e73ec7c5074e32a441630c764c7e84765bbe6d1ad4df33d13a6ff11da2d24616d7724520ec46cd8d91a69cfa32097d6e051fe534662ffb7c6c1d7c392135b5e4709a8d498d37ba1ae5c004a2d183ca44f06e70278d24e0e285770697fd650a342b3960deb5fbe44e3a4197d13d8a2f17af43c327db5174a69565d18fb0d168c6eb3b348f8ac1062536a01c00045e1c588196a81173236687fd872611bd2f08aac4f620098bde24bca7e116ed6b1a00b1ba299be4a8efb1903d3a655ca561a2ee9a143d87a2d0fda93b3e753a33ddc30f9a8a2d9495179bde1dab057e338a7f07aeb5c4cc47a1a09292ff66a1237a785b6f3ba4c705832bea55b5fe5dad2512b4547663347a5f7c020fe50c9ccb4cd43900900d148019c649e8afd3c245006ba3c79dd39d7c432366e5ea43e032dd7489f639be772d37402ee655787efe229b5aabdc36748492e9c9b8f18252bd54b52c003d2792c8bc04609c7fe5398c04f3a0ede1dfa36734be0cd27dd085147c89a6b64ec6d4df8d822592ee462a7731f8c3f44cd5d235f0232f4deceb77a8123fda023ac7bf0ddbeb45e2e4c3a3bd3370887b549112cf5acc11983592a708e998cd6abb593a682bbed10277273a1c516f91ff06dea3978b87502fed241ca7492e1031c0a205c60bca766c5a1b4da201ea57ad4e4ecabcf29ce833fb459f1c2f1d8692010e986ec240a9fcd72f27a94258b9b57a052760caf5025ec7aa87f6e556bb1e9d06b693f20e97b2b729515ab036f83415a074ed5e3ed31c0ab0a6c41e088d97c9bc1a6a897ac3efbde980431ecc602b3b45c3cf0cb91a0df9143621c4043555b89909b31d9e169f5d92acd8cecf83b3bf7a3b6403b996164672bc33309ad5e00dd6985969cec491eed3ffeb9a850af4c8a00f305f775c4f6725b04ae1bdd590f327174727f2cdd51faae8f793ae85c8cc6b9f581b22aa6a6c387507aabb2c8d9f5c41ca881744b8ae76fa50fb8344d61a0db9e140035e7ca78bc3614ed7fc743868c2ac721aff2e796d9e726eeec732d010337f9291d318c95bfb0d78803c247465f9276e724ae2fc58cbb6e5d0bea1edf84860346c74fd581859ea6d89c52e14c2e2fb33f0c340924d493c215426ace4f5a3a01c169e6748411a1d3e1e1f0da3a904f29ce79fa1b2e340787666293ae9e3af0c30fe936f5558b8e7c6308a966984a546ac5956945e5a08aceaed6e2da740646be4a9058cc60d45de156064121bb6f22b4d6a7468c717a136d0a1643dbe80ffd435dcb5b4b86a4e449d578753f0c96d326fe3dfe3219946c5b6c46d978f9f48586310ef33d1cb68f9ba02c5f3cbbe452be3ebc37e326e6ad6af570f2b272c0d69dbc4ab662cae76f93d5bd0da9293d101a2600aca61dae2a748dc6607b1ea9d758d594f545347cd6928fe2ba479e8177e5311d79309d79a193af0e30402ef7acb615e209a4431b3b883cb4ae32f624a37ee5dc65492c0b7b6148563e2393351da0f74a0083143628b263201935d5b119ef5d105fcd644222fac3d471a8bea3f26540dc9ed423cb2b47ccad84c1562f9226bc08ae52e6158b5ae9950e9d9041c2c050dc46616b92fa893b144c4b64fe801d247c2afab542975e02359b5aa386604ae41bb65502e7247ee5724573ad5ead5bb90fa80ed822d6bf70d2901f0a8e6eed3eb076dc9f3ba207eccc20dd0c832a478e406ba139d748b79f16a41a3e9b77f44049cd6d39db4811d914de8fc79342c7bbda77f642c54e78c9e9a7678055b1bb139fc9f0ae7bebc6822215d374737e5384944a68012078425dc9488e9f728e9824812c2be3206aff7bb5ffc37270f601a7f7825e8d30f3229f5d3558e80934ccd8c12ca52c4f73531de2cf470c36e678393a4ff37b9bf9d4d01abebb4b78ca995808a6e84207c40a94ea30f8eaeb9292325856900947c9fe441bc8a7b2799fd77c1aa92ffb5cffd8f459f37a33173a442939afdda730323b7a9f2bbeb7352af5add8c0daf0c1e99271bd041a509ff29d7b153b65ffa024d31973c16383c0ac1d33ea792a605b968e469bef9cf0978539a49c905aa5a41826b003d860de8d35b3e5af52207fdae2041ed7ffce2e2e45c31a63b816b80d4982ccdc42fe3939a627a3f9ce5d9bb1402af4fe108eb308daa1339be3432fd479a9058f65b4f193107239425ce24fff6a00434e5b81487b55a605a8dde4d5bf0bc9af71e996409b171770f27e5740f67b1b36104bb148748156966d0ce71e3b156135f287a68093fa8a4a361d82a0c42d431591f207a58ff8785a4684674a2c357791556a861e7f7431c309216b96f5319584ef7e1eb5b3eb2f523a49e655b5a51c6e018d84c808226c15b0636bdee514d36909d2379d8bc5359c9fd01cdb27f5b5011722d97da68458653f2fa37855fc13bad9e746523e87b6f2325c1d861c93b0a36a7aee6e7b39d74cee29ab6d2f80ca2bb87b0434b6198c1989f371c65d0dcf0772488348b131c4a4c1194e13ba998e88a75e389674d1dd7d32a9f8898a91465f02c183b2ee20ab94bfb3a7aaadd17fa794305ca3c331709ef138b1cd18815c8b3e4887351b43f0d01dbe22cc0bb7b36770dc3e222c91080b35c287468551aed9a52e185a9760eaf9dda32921f056f3d9f8f6198495f63596e6cd60b8876ea1f822ece3d4570db4b48ec92c26d7db597c89e112b87486f123677b712473215fd9bf40a4d9ce6816bf0740a21eefeaca53620133ead427bd783db33093ead83cd3c427b69ef8a6197c0c9bc15337a8ab806a8831a1c61e900a998bba1a12c911490c4b3bffd96b91bf17efce985771e6e24cb24fd13b1d599c639868498d2f255fe45be97d73bf150af9c11463bea4208937a32b11512eb5a011530bab432f99e8fcf6277b96ec5f4913f206af4ecf9b685f89d9d643a6b5e941014cffdf9a12d3d9a54a982f14d3e9477a1f38f7ecf6e10ec0cc815e12ec8ff1d4a4428839f8519662bfc39ad825eccb74eb3e43f91b7c6756053677d2950fabd98fac5a0b9f545bd9cdb68f4a784740af9ce1518306aa240fa303757c5e555a579fb7578505246297086c2fb432aadee90d0ce0257a3d26e3c83060b06b9b628c5266156fa4bb2884bec38a97a9814a2d821e47945d8266fb6948efc01a5e9df36f730288a007c1628c63ba2655b0d3454c33ea51c3a1895135d1d76e046fa9691e124bd2df86c4fa0624abe499027ff186bb7a3ffc5b2fdac6cd8f82225d7f0436332fa9866b2e9818f6713c0520c6f80ef6f6e46cb1de30a85eea081c0367cb0ba3c673eeafb2a33d504cc5204f2f48e7d0d0cfa2c44627a13bc1791f147da24d2c9f610dfd0673327efcea25567164632ab2cd12088b49469fd1ad3b160354103a274ac652763bbf54956d1552118dec73aa2ea96e72c254844e8d7113601be7fd840325c59863bc90f2cfbc5565896d994b28143bd93f800c645997209ffdeedb34efa45eeb69e183b2c5e913ab3ec4cb1aea31e8ebdbbd1ffb61033e1d63435d70c707b35506244b81ce6b512f117cf4957256658a64a20108c5c282bc79b1ce40ff04c5dabc3b46b60cebf64f46c82c449687b35e278b8cb1180b164a57c6d2faa50b1bffa56515b287d5231b4a36b628f8f64e787210b8e822ed808d651de0dc16f2d92ba925145d297f4c6da12c87e318bb0abb4a61bf6e87377d84de92bfc53afef1aee268180066373c7e8020d5188ffe03f5d6d3c1ecd386e6b9245aabb4ef1c98baa5ee4477f96bd0e5569525b45a7991f66b8385aa98630d06359b4d13f1bcdff223444edece326207d59a176764de8e7fe1aaf9b1ea5546daec2c7a80bc4cd1f7242bccf52e68029cbcf7fddfc2c88f8eb5df9e9cca966f544d0a4d6198facaacb6bec348e404a902df7ab51f4a964b6c49d077c85aa8beb255f3d076a2a13a2188e8404e19745a01af085af81f0e547ecb40432014ecbc1ce985356f4bc35ab71bb7b8781058aeb3c46f728568892ff8d1fa0fd354022bc5f1adcecbefe101dee3fac0f86cd7d1a4a5b0972f7f7beec0604f7978d7323edbc801f3eeec694a6dfa9ef6744d95b9cdf0c2ac5516c7fcd0eb949f00947ecac5cd98cd85377e38cb354b20bdddd24a624f604a54f7ac74b58ce70d06b971bebe48d6654d4cf8ccd0da202d9ecef02839a4a878db406756dd67d4343408d69854d91a26e9c5e54580f44ce7b538be11269e039e052f30667a1b78df1be95466d6cf00012aa28c15301c8ab9630e9160a0ef2efe9acf178467b717a1093fb5eb6411d4c79b9ad0c594fff743178d66632c1ed52d102d4c4c1bbf63a7c92468f55cf07cbd3d78496f40b2ce33f1e78c602e269e55f462843f343fa1d3a8d2a6f8d45e9e48dfc15c9077f283e07814b96484b76e323b0fd4cf3c8d53a6c9ba753aa61725b74750d6d0f461b35bae013fb4ba6e2bde613f5bcff7e6275bece429cad1ac8e12b7381ef6887c33e8e69777c07e5ef8009b788034a103f48c34bed5a172edfa99e3d3d9559605e69e99143c51b670c6941b608c90ff7735128e7f8937ebfb019ef23cd87acbcf2a297c4bc0ed5c74a481e37ef905eea441bb6aec21495c9c85b71323f6551852b9f3672b1f3e670951d24d1e3775ffbb83665ff0138266cf2adfacd15443ea5fc4dd8bd1fbf3f9e989c382a21880cab9ac7d46df1d742c49329ace3fe28803b4b963b1655571fe64aa36b06a5757dc50893e0d8b097d26d8432807fe3190f5756647ffe1a600ffbb808e7c948e8e0290b243c3bf026726c16d6a167fd00102fe3b2c9e6c4fffe8a85077781e77e609d1d45ef001c213a95e0bc07d8a5e079aa1b989ad7e10e740e7de39c8f9fb0bf3ed24b6feeb4aa93057da07598e5bf25561bdff425ad0285128ad247c12513709e2a4b190ecd54d55210281f7b6547758e65ad8336009a7e57c8805c944d566f34a632e4bffbbc99af2bfe477329d7a0a87beceaa2a37ccdd03f0ba1c6a83e3338ebdd9a34052d8dbaf650a901ae6702796f53e52141036d5d04e7ba1f188ab88ad8e7e45975e92f7cb36024dda5c2d97155e1df946932dba80673710d2e65c878294f806934cbf75475d89a88033cb1f03a6bfb470a854bdad2557c6ee1df791e36728067c45c6da589015dee2ef2b4b720cdf6d061c882f9c06a2f8da3b1b0cdd15bf51940401c6de8a1030c5011f25f3ac87f2fa255092e56ce65b81b526bd9d64b31ed1c6f327040472ef8c5ed65a1b0c67bc4aab44d00de913b775478e39275ccfeb6936bb80ecd001d7f105364bd917f05af96051f0ee07417d2e1d849b73fe17413791115f0a96f6d140ab1671831eb532ae538a388ca1148eb04219e9fe9a230858695394d216897ed92ac00e4831dc9f694c16b0b8faef24cced7ecce55c862636414738faad4f8cb57ebe97d123630a9c00d42fc73e9e71a89efcdfd821574b6766f22e75478d3335f56c0e008e17536f88d6cc0a840edf77b885d5500a14e62af83099cffb8edabfa40b0e0293dfd6a11b55078ba16333bf86dbcf16d7f480e244db0956792ff1f1f860f41aba2faf6575c549eea6115ed79da811507493cc0a838673e06b9f229457d1f79e172c317b2e02ac19ec63276d3c15ecba030cc314826ec253ed717fc4521f755dffca4aa0c44d49c881cdf2fd72294bc55ee66015611865b4f57b0e4b57d23a214737ca61f1346521b045d52498ea166b14abb2a3925060d8ec5a5bf50abd3992a98e7871d79905829ff704545191aa019e6584abeef9f8770c3be6f8088af9b641964139519de6496a0995fe9846787ca7b85f7bdd9ae99e374cd90f8b8e539c907d01fcacfbfeab25e71982cf7fbb81f03630f11fe256ff401d865620112ff1a203c789a1c70e9424c91afcbf6b4b6c7cf1ff653814dbf173b1b1c077ae18c3f5b3bc9ccdb8c50e543fcdcdf9b4373a015380624db73bb53c807539ad088c39e501ea78b43788fedb5536fb5fd750f0c5b992c6e7f873f51eb3c53feca617260c8df20cb233069d1f568ce6e12c20dce92f4c8b26e40dd57255c96e273f84bfcf73283520168b139e5a1a2ab780f0cfec7b61e51ba6f3c3172eba262d6620a184618a9c55dd1669ddb277251a1f2209af8b1f0c381b546fb3c7c855722d962279e5adcf061a3e86dc9f2cd8e86b8643a83b69ab92708ceff563b13f57bfe5b564fbc63fd46d8d360e7ce02f112d4e5600e81835c28121e1c2c012e065482cc2118b42ebe088566ee6026e0335c90d75113994dda31b056a9e30470e312e73325d2aba7ac0c9922db2b3147e4b63f7184a782bfcb2486321980e7007de277e8c3da058173c2df5c6764e4be66819a7bc8c3bfbb01e0208de47b44c8d69f733781b734219905fd0bce1c5770d3cabd8b7842ccf466c13eb7eeb53ee8d94c3c25a1c330fed71ee58e4a2d75106477a589bf6ebd7565bbc50584ec658c6becd85b5bff7bae5d7fc3e36b6d7f2c9caccf6c2439809b15358d93d1244baf4e7c7f501160bcd36f5c1fccd34f5123b2bd8b7d00c66c833e142f7fc6b31dfa5887cab13f781d786ed980c1820dd9c7d07ae2b8a751e1b16479f65a41371832a474a9e9b393a8ad2a9569f6023871cdb33d18ce28b243e3738ceefcf9fbb8f146b5d1fe1df934fd037edd1ec64ea9a93bb0564898b1ff1c94aa8f947ddbc6c39ede4003f98aece2b2b5099719e14b037ae1e981d7ad4356738e8f7adfa8ee13adbed74447a51ba1ae7369d4aa31db7ab3844f673bf113290ee6f88046a98674ed7cf5bd683f06f6493e416f6764023e174d4dceb15e1a93e297bd46f90162ea89b5035951f68edbcc2f892184a98b90a389a488e4ab4960560a6d26ea0737fbd63c130e37a3a3d72d3bac76be5099f0beb7ce0efef8e39506a5089be7fece40752709fa6c7a3304c03ef3542b82f6f76b235148048d12c7a8fd36d30574f05b80d8cedd437304f6d320c62336390b5e06155cf2ad333dea9de9103d79157e5dfceb14def8c500703dfe556b0f10c2b4ec4e4ad72c9b518eecdcd0ff52a314116c6d6782927ce2ddc458f744bbd17f2f14d636884e2dbb71db5a7c25546a94d095d1eca61a4827c2096a18835dca2db47726d9f414e03d9373fc318d8d877f05ae84380cbaf30a7a74b97f8490d814bfbf242ea15dfaca561b103fe5ffe810f68ff952a331290ed23422f4251ce986bb4d96224a2b8741eb3c14f5bc267aa7990ed6f64017c72bc51e44e515ecb14544e31a2cd4e9096570cf2c4745b5ace79ae92290b26985d8020931dcc8a857b71fab301e16c6b9cc0ac2b83fcce750ee6a8664b52de9f49de04204414522850f500471b0451058d987fea61d53a8556f2bc028410dddba6dd10225678c2b23b93ff985f5407a9a39cf18e6d955524f2f4949656f477c2287857d9e0e0a1138ec4f0077fe27761876c83d0ec7d550077a7e9f3176485d4fb3691fd78ae60b7d33461245cdef09ca675ea42c181d2ba11e975b8a02546f1de6f30a7d50a0723e9232f97ad2a2a76b83cd469ac4020bb78534c49036a45fc971a2c2770b5fd84d97d5111cf53b9e8c8e9781204de639f1a0a7ad5df86fab48984d55c9e5423684f8522e712f4e269e147276ebc1e5b23e7a9aba74a131b5700420f088f5937a531f160e34619b833fbb7e2578f9a1ef94f35a8971065fe208669200dca0b3d9b08486e49e31b372b9e88a5882906534abd1bf826fa460ce98571e5b3271f4fa1343f73476de1aa249fa8b5b8418bae7dc1a20b27985252fe229b54ee8840372a6b8ace8cf0544bee16be0d92282c417cae7ed9d80eadb15e044b36158ed241e69ab29c5916bb7496f963f0f3d9402d05a47639c9d900d52cc0f7b190cdc4a56e3a27e3d7ddc153c423ff74790f8b354b7234933fb4f39aa1550a8aeaa913b54369957bebbf1a2682dd5af1f5afe44ff9d4b09189238c8488e0e809bb793463b075bf03384070bf224a2c83bfeb07b000e80ea20534550041ecb804139e0ab25ff517e0b531e6303f9c2e6ae08e0698f9312b49dad78d6dbe650e6df2609b112a543e4877da189d3722232c570c17b60ccac4702cd571f0551affdaa5f7bc0de0125a3a99f4b0935bbd338e1d067ce70d8d4da9825a907225ac02b2b3837e9777e323c419f94299c02366263fc8db75a4819094ed17e1420ea32862ff676f7102f4a18d268ec6952d25aefe7336836c235f6b1a65a8b8c9d0b2e4660e7c65f2c3bca73bdda22001631880118cc4319e3ad4afbca4b8196f0acdb2c1ce694f374790983e9890036c87356400e31e8cde42b51a43b814e85df8766aac13ba04db3e132c30117cf486743141ba503de1eaf329536aa846974575616c45c3c395f4c054e3e04056a1b0c80cda078eface8bdddbab6ea0e6a62b022c59c7649497bc63d83375f423b1a1c085d9155e505e99280ae8585312a978a1debc747f096a29a1962c246ebc78f7eb8e202ee0ce154515866a2d3df4679cab4967ad164793682f599f2b79b8a087f9a87be7679bef0cdcbe758fca13b2a296cfa6d61fbd6395dd100a9d72b60ba05f761d0570b18d49d6779fc3bf41249bdbd37f8374e7ce98a4c8bf54e363f68f6a6f5ed5a9aca6ef2bfbd824ba0c632a381fc7d0e883451d676e70715406b4064646a24f15bbca54a7ba2b975694890eca1832dd2bb08e71ab7b751aedc438130a0026ac094e1f02e459bfa2f79ad9eae3036fedfd4a5d2b41e0b7bf46fbdcd559a4c149b58674bc97cda3ecb58f46a289a798eabe6c178d9881d57dfdd0c2f51952f561345d2bd74e43d62106751341c36908770355132e0de65f590167a48fc07c36706b223966d49ecff18c18da2682c09d8f6cbfdbc2dd20a76d4566e3502efae8563f39dbd1dbf09f5135fd5f068ffbdc68ac92d27b02e7742a0262ba01c1146f7117244ad695c873657903218aa27ba4eaf4a55430df8f3ab0eab21039bc3b5367602ea5358b7228878c77ffff68f2d670975692ef6ea7c3b0a2edbdeff6e9500073560e114861c3f7390968bb8712de28f1caa562e4458285904ae72ef153b9d79b88501c7cb63f46e232c44dc6bd96fd9130a075920c81e9614bd34da80a2941b90fefb26f4d856ae467f1d22f6e89a253fe84290bcfe522fad275d920f2a468c20444a8b4b81c24ea4ee4c7b6f7e3e7f9efdf72eff245e0adff3e43c233bfe696b47a4560937517fa652cb5681b4726ffafb74ce6a834dd109d8f9f720f67bf14de60dfdd81dff5743b0a737d3fb5345fcf6cee5e360048f234df4841b6573048afeb667e65f479a763f86d1d00fb6a7baa1fdddacc3a657bfcd1911c14ec5e3bd7745c6a0219c6ba6412394e98028c0416a72a897e8b4678b8dc31c6864d15934ff0a16fee145d826c7c58c07073d0227ae7cf3b5e681cc9d5004021bc481771d0290fd12b4ad9e114a48398643f96248e9e601ab4bb1837405ee116b4300a315f43c8548e579ed0205ab1f053a5c1b10320ce56a8f6673765fa12e5a0d2b8c0a4c9aed589e47d8c85abae6026bcf2dda1044460c4599490b86c3bbad61d3095244e9deea5be43ccd33f397e57d2c396290c5983634758617f498f04886bded2624d549ee9507c176e6b013203e1f725f68ccea1700f39e18ce3eb6d61ba094e956f8c0fefb76abb34b21f7bb499fb10ce91631cc730dc0d4ea4d112b8f60d3d7bce8d23e3dd5ef5bbd779b5317ef082940dd40c0009c2715b4357842d7d3e06ccb3e05b2ce3d1145d803144d8025ec55ae84637a42dbbd2e393eb04193db92baa22bbf4190a25966ed5fc22e0cf75836983496a572489fd7e4ad50a900963582d2c2e71c5d789516f48b8e0aa7c40e26af4c11dc0daa291ba1ce979879e29d3372233866c7363853093de3c73ff6dc51d422fe44b379424ccc77b5539e5a80ae0ff83b4f796f49e2fa9f9e9234d44b3de7c418177b64712c116a46ff1cc95eedf3b5c64fd8bf44e26d243bfa5ec15813aa18d78bfa37d74be8df06f4a52f3b44c8a3a065932700e48deb7d1bf0116cba881a2f17d1808673e18cffd9fc3ccf5dd54cadd7a5a7f33f3ca59a8023aae6bb25ccbd8e1a64e545758879cd7258ac786647e65b3cd886f88c72c300faad86af263b565cd21317e9e067bc9d4e2fb7fed2e569b4fa6c89beb82f7499bcaa8f681f4ef55cc509fde46b789456184b3286a8e82049b35501193e39862fd83063d090652dd81a5f84857a184cdb8c2f8a4cc1857138ed7145e0f46fc12ea7a1013fe4960d6c088c79b0a6965ae5d6dd17313a01cfab706fbbb91b5c41f3ecc23e764ba199f34640b792c32dd390d66a71ea0bef159a33a1265715155fd0dc2f6afbfe28e9eabc764c0177c5ec8409dbd6602646fdf60ed46e8d97a7fdcb9d3386f0d97af8bd213a7b448e0072d5f088a61ab35c1db6da8de000bddbf0d9de2fe7bb0ce3e5e5ae48b2855a0610565c4305a18256e65de81c17d503ecc647676e0bf8b8adb49fee238213cabc7d00790b9aa70c6bdf78bc00b32676e1acc5b76be2c9ac121271577702ef2aa73adcbb1ce1183932876be33fc7c43b346b9edd4df44e5888c60d2ce2c521f040636b507dc6a4b211cfc484575efba39ebbddf6a41a53b3eb523b8a9390b16b99a955deb95f3ca6c898b6408681462ef0ac3fa14600dcbdeea33d8bb756cfdc6bb71ef9ad6ce9174a2945567a1cfe9272ee7de24503118184f23049b0ab772b706d8e08eb1d0a6491143cac6f11254d8647f04be3ec26fc10c67058ff30e94d56f1edb55a9d6927f5fe5cf1a1a41cb6374d4eb6552c01a844a8043cfa3d68599d18f3d34c2763c0f92658f69f0a8dd36bbedbe4e68d50484587496fb06878c6e619452610c5ed5d2bce054ce199a9d90f2e644a48c8a71e56caa5eda7af85a3437c7aa4e51d246a38be7a6b7ffaaf0eb009aceaeee2a5427991cc2ce7d6dfe48e1f3cef576e45c647a51f4a610fe1681a85c356c4161ed37e1bf62b2f625f80324a73549a094d11a8c5a0a6bf174ddbfbf591651840fcb7d026cbb278f6158561e5aefc0722a266689755e6fb66e7f95928b5c400978862d4e4f85475c7ba4eaa016fae51dd09951e7906b176bbbf71c209aab06fb1c19f03bb3053b62a339d9092a31ca917a7067ad9d52f4a8171716f2f0b1559d2051afcca896eb77a2544f1e26fe17ce860da02ac5ee1344f7155009cd258484e0baba0241a204f7c477dd9484abb60ea6a55b5c53310d52a7aca1da0cacf5d4fd00b3785d2d4b9934602d2446c411b98c6b28613c6455170ecf8ada213d085e832b727b4d4c017f24d6af626907449fde1665033fd69a2ab170dc99d21b3bfbdd9f232c503595dac6606e3b3757605c8f8f9a6912777394128b4c7332cd07fc9a67c5efd86eec18acc4c3130b72469e2373e45842926720353167ab1216a7035fc0b95d124ac18f9c9a91e9c4bd8de578be0b95bb0759aae59687c24bb901aa3065da4224da915764e362b5859447db60a415350d8c26f03eace8a9f14abb12762f3b06accb81c7683a3807610d7f7a054af18c9ba216ffa20b106c86758120b04cc93adf9cf1853021bf78ff0de1c149b0df220639db930f7cf6b81cab6946ef354a924de339989db414a9067d99483a45ec375842fd6af4435d282b9494ac21ad9b1343ec7fe1f5a52f23ff818b6fa48db43825fbdcf53792ca1830da9ab0049c304ab77002facbcfe3e87aebd320a031a871c2331dba875af656249ff77cd3b27ac65620982e71651ad84ce1e74ab1dee8dff51a28095d1859807e0e599465f06f77aa44074257ab9348fbbbffaaf3d8860785b97ab6534cbf763a58bf7b1f1fdbb3c396d01d79c9e5e548aea372ad5e109d793262032d0fb70d14db7c7550cfdf9f5a9e1e0d5f105b134872b16b6f627d3f054b20ae8e9b247d88f2ef2ad4b2579719838ec184e63cdc76c717b940a646886bae1e786e5c400a28fa238b996bc9e7ed536bdb6d1ac6a2a06a39685f2ea16de2587df12b47c8b4c5b10912368efd2a09ae958aa0f2968509f110682ab1ccc7ce23ad785aa6ce618564dc14dfbd8a863749f82d468d0aa69059f384c0bc49079ae86db3884a24506aa04f55a27b26afd8212f43bd5cfe7c6a3fcb24d5364ae2739b131b34e3ed0029a3148c4298a707a2ed1111e4b3d3b2efd608101ec2468dfeb2b3b9bf37300aeaedc0c507399f1f384035eddd9c4304d41da8dfab74b090d184e30bae8c2f3f2fa58c00b54bfb0078715b900f1209cb4fb5dc26796e95edb18d79405aa25bdc650331079fb7511b6702d84ca53d6a23a61b9086c1bce7df6224967e628a770608802cde63c0c37db3ffcdae0c8b086a41763000194f95e3a5defefb110ecc5c4a544034a47f2183516622f4748893d282aaf314b09607907334b8df506e71114a049d52c4102a37dc32af9213ae16f1c80261dadb8009084cabd820aaadad10287f442c61687f208aa1c8ae0a5c76f7225cf470b2bece9ad6039a3c7053b921f25f9b01a385005ba3ed9a70fcf5f1a745596a3c5a0d91a2a49004efc5a529663883add81b6ebb02714e8ce50bbe6f8ea94016e3585a7203fe40efa54778f6264bfd4d5e58ca13e7296dd9bf481a56630718a8e8cb25b1bf56ced8a442d51ef6ee810bfbbb9bb9fd05a483766a304d6f829130f9167922882ab585c5d0546d3093acdb6cf7e115264d7f74085c23180bbee46da25c2109b2cbfcfa9aa2bbe9d882c08de0fd204c17cabe6a5add00689ca4d437eacb46560868c44c94badaf07d92036b10a7edc236b1f7c243e7656c28e3902668fe440140456b19eaa5d402009adda39c66b5db2378c45994575500dd89b9d1ffd8a125abb6ad78e0ebc649e477968a106aabb04ff464acd1bf5a49def916417d74129d2e9e7ab617ae4b93b13390ebaf26ac24e10b1e27c592a83a8f4f386af24d8b3ffcd3b5104bb58546e073b69808838253c1bca5a28e0a1e2bf510022768479f5d6c9dfed819ebd119d1076c46d1bddfb1629f0b4e6ec99107a74ee6317802b7712ad5fb0dfdbdcfec7fe8ec49eb6ad9a1e960ce4b68f9d69f2e284a9a2f0353c9bbb56704b6cd10ab70b27e553b2e0336c9a46dc999d93bf284fea9373b6b9f532317b77e7449d0817f8d394cc181479a22e3abe64f16b656ca931885f52068ebf81b92e3ed118c77d21be21d935c0435180154a7a5ab6a6dedee789d134cf8cd4244e031cfb52add63f1abef0a1b3dfdc1604c304c26013d1adeb5ba36c3c0a0ae94731db3221817717ac5933c9bbc29e9076b33ec6935b541873b1a2d285c4d1d92ed33e4b2d7751ba0875c1ef9a45c297b34817e7f5b6cc71447e7a11e374358122ee432069fc8f41ab7636763060a306a1df3706d40939ef3265309ad2c0b8bdc12a9b805e75bb9d324616d6ef9b58c57531f6e6a3df7aa2cb7d34fea19502e695bbe6fc81dd19ea905c109214e5e1f326a5359196086f0e62b6589e1180dcb0e446909a438c15d517327451a312cdee2e4cbaaa2d1d496f80077714146764601391574c9c53d7531bd38ec548d0ebdee1d165be9c930510aa24c15ac70a86ab8c67dadd5a2ed5b16650d6395d91f081a969d03e7d4000c6667b4e334f49f1d48809516e093cb2982d9302b67acb9fb04c62efd49ba0c0a49a1ab3662669d85c549ee759a7c960120a021de8a7e3fa191a027993b02ab7c5890707ae68f04d71797bdc77d8bff79be2695cf28a57d607281ac620243d8152196705d39914430f9b76e7622639f1760d96d1e71e6c69f8cff86dd1e6c552fc47c1702bb622f1813516b86b131a4bc0259096398a13e097848cce271ee205c96cd65c5a9e5a11699604eb484d8295aaca79348b4a20a41768ad52307b3729e795fd263276c2a082815e38c835655472985c7a37c38b4685958ed5d98d6c3dd3bc33322559194b117df378945799eb13af26cc0e6e84fcef9c82255dfaa80a6d852644a63e34020651ecc7f1fe4a4d7c061bfaf85c1aca1ae0496c45d3dc0e5f834305418c31375a99fbe50123896579d9fdf703f2c61d6e6a6b498437a1ac3bf98234fd6ebf79b5836d54976ad89a5fb09e3eb998982b072a9b12a9d27c1dd34dd236ac8921a5a38be88691fbf0b458511b768d581aae7b7ed6bd3dabfa5648cc9dd2400dbcbbe61738870f7de5609e28c75c99373bf6985153d26b00355bdc05f8f912ee6358a1ff53e585fa6f9654ed2babde63a8c33f015914827377b5b5b3585d2e70827cb7a857a9766ee759caff5650279145321ce367c1e916d1c6cbbecb8c140d260365e54bea89aeeddbb6f617d9393feb8de2ff8a98bb9dd6ae2a262c5b8c12e14b3c38fdb3024e605738e54d4478b8b3528a8dbe57cc050f3b4844cdc3cb1d54431c48cc0efa30889a37d0e76df29b23d48e026e12ce105b40c07bc30abd197208562d59d8b8b460d82045678e01eae222211908a7f80b8b2cc776726d802f38caa45ada69e7ee00cc2a0584c4e87b7c82f37bbeee59a5e843b26b7291d21a075da72406d7711dfa01c6459b5205e5ee3e5f920070ce6f8013bea7a4170a33ab5acb2abdb6f77162e8edf8c3011a02997e1acf73d6d3595d153a7c8a878af3a3701e5f63343a0340e7a31611a63b7b835a3621c729bb11e9cacbaf4469625267dd3baf86a9d01b12c8360ec47c51d137ea79e72f8a8ad71580ace881bfc1456dbb7264426f9c026c2c4ea05a77194bac35c632922a6cf2687f8b63a182018e287769f9521d386c5d7899151042b5762b9d3010a965826520d038041a6a9bc1acceabf31613937f379bfb0e7098854c83df1e02f9273a531a723e81010714a711b3b6f2362013e90d24b22ed4461e70097b92790f92583bed843d3b05b9d2b8ee470f8a046113364056c7a4c18618a813657cfb9e842815738cdd0f7ed33d4ae01d5b083f4ee23c683e599f2934da77334e3b7416322f74b6d66481f1149e84e67dbafb8132e7aa8c173f7bec63eeb569009037da044f0c05868649bfac730afb6460e46afe5199b4d9ac1a7fbbe10ce1d23cd7e8dd53b2adf4b71496a0222f4ef8e7ca1cff336acd7f88f51fe7c64ce462a7e668faf69597d632ede873c047812463baf1ebb377a118f33f6b2463f5d3001c3ed376072d0d2fa7b4f6ce3fc2002ece181d380e08cbae361029c1d587cf602bdf3c0568d96cdc2fa321b229c6e4c290edb46d5287e610cfe55316da92907fe09666bdc24d8707b24a16365e2efe17851f9a3badbfa50ee29e6beaa2b83b1c5cd6bbdee1afaa77e1d85428863352767ad26a79e0b224c11c5302eeb1264004236dd3bb79ed09bc8359c2d2cfa82862dce308c04e1e47defb508946a1fa95f9a8f3817770e5f1ce6fc79d6db0a411457dad3861719ec4434e31c09d941f5c9fda8d0d31016882a5785c77bae50aef9b9dad357473dbf574b612a5b08575aa3f56d0cd97debb7b35aae5c476c2b4fa17bfb417a4fdff69a3edf5637366983f617050c2eb34dc9bf00c8a17486a487ee440eb86db169b1f758541a37ee74fff0eb200e7bc16afb02e79fc8e3a9b6a746d980488a11aac8e83b8b95614abbff0704a3ae5f3c4ad3c5adf8b241e3882893e3b8423844ec0802983a1da8e1619934a52e43235b3aa301229b538dacd3b99ba5fdb3e773046f5829adaa959311892f8dc2cb97776757058a3e0442029329256d90f8dceab42e799e285323f11c9eaa68ec8995c9528de2d1a783d208c0902ed7f2bea9931f3d60c2e01615ff1f88d92851a9942db7439ce825645e9eb5124a13405295c7230b0a613fea3761c82b286391b88d3a11d4fb8666b1a2c623e6619e0dd10f0b941630652a16530b0d6a14dd186deb29983c28013fd55506e1f3e68e5cfcd4280f3f9a684e8c95c4f76ec149567c21c201657035d564154247c99590430e378505a4143334379c8df0b4f751fe48e8e0e79dd0fbbdc47ee3cbbe0f54307b4e92e499f11efdf1e191dc2419605dde4ca7544d3966975fce238837ae146294346444e8f8d6679c4beb5456892ecb73ba5dd4f712ec67ccbc28e9750e345d9b4769477f510e210909e53b78ba1b40a128951b7d469b756d4493208bccf3ebf0b85250a4a55621619deeaf1dcd90f245b5104d1086ba0760722353197a8185304a8a6ea623a3a850839bae05efa03af69b75b873772c5a529c11c8fdfaa882baa3fcc88d2399e9714317deeecc453037e142dd1fca40d2af03ce35ab807e6288eab70ad8b1140e9124eaf9040eca79fde33d92b7603e8392d48e0cb880934891bfd2816e16a6011886655a88ad5eef4443d3bdff8f00616b9fed752fa0bb4180db4cea89c9671d070e074fe64cf7842cef16e260e29a101fac06b730a4f280bd452550bd5174c436026d0e2e2fa8f6970c9ffe1988160ab3f14bdb0ff0cd58b2fc16f493ae5a71d745b84078dcc6619984031651a1257596b59fb04a084d82245897c417d58e0d640c1885c6d593bb55a742c8fe87a1977569ac14c70ebde25ec2ec37685e47dc876febe09b960ffdd6a06131ab72f7152656d629f6518157968279f7ea6cbe4d6f93b39d4214b6097f8178d4a23260636167602fa541c877d66f25773d1b0c5657c7fcfe184f3aee72386bb51e98434b6ed471dda0e76383bbdf762104c232b3160eeda6ebac9357ab1a5844d426abd7e4582ef86573a9f76a004f76e582be96a616754a47b7a893304281e0d950da2b6017e7086178b63c90e016392cce026ca5d1189f9750cd486a35c31ec4287f3c0100417c44228dfddc9b546a8c8dc710e1e8cfd4f62d79b75b7ad9b6031eb8d3ece01a4b2e9f677fc5d0eb993a4de3d669fb74b9a47ff3b60b4f4a49d9839e2e10e7203dcdd868c352fa033cdffefee6aaa1a2865fc792806ed032203b168ee5d7b7d9814dceb13fa6ca3758abf0b1e727d7adcc7f3b8c805d3e708ce409374e70cd91b14ca43aa3fe5d6fc884d309d7dbdc6c42b381f606b05fb4475e83c96a7050509907ef2a62578733bf85fa5e741c29416a9c51e3c3184633c1037605682592e75248e85ed01c56244bc994664fbfa65439aff53319cbd23d9a94315b098bf4697a7d54b0b15a00f8e96b28c2630fbae164651ca1a05b428e04ea7573420cc41df31c46ea6a061b3e2f4a43cd6bf47773a07b4f9517c7d671926c3b6b72a12ca4377d6713035a997be2bf9d336494806ea2799d3e84aa3478a3cd477e619c9e752435e0f350f380511092b33ea38e8bc51c29b51dcf9cadc56a2de8407aa7b25afc489c200b1bf4b4d884a051a8ca0b59c3f5dc9d16b5b3b806bf84e6539717e88a85723198078de071b40fc716f2fb139de3b2836790e4849aa83d2bd19cee8f99e00f73757cbbb7fe0620a37aeadca4246298a27e201dd37483b146fb3774fd683b5c87b081df682edb770b535e73c94f3cd2f124344c696fec44aeffe1f47220b2cfb248d3058339301bb04d1fd69949fd57c53680e050084813c0632a7e49d9745ab03409cb1e326f39ff9db517a1041ef60537630f35a76070a29b154bb813fef08be70248808fc35078a8f9f9fc969c6ffc95e22b263119713421a38bb1cdddc1c4f1fc0476b0529328c0716876fe70840b5abe9fa4d70749839b21de3ca15f630a301a1545146ba1a47a9fb30495d8e18004e6878314d1db8fb57ba6b08d229fed35e0902b435dd56f673aa362428306fe70784d95ef1d5dfad8a3c6e3bbde49c65a2fbf3c2b4de9ed3ff2e1580d4a447e34a23e5d462c3c5a20c07735cf3c16abb6535c672baa78bab4fdfcf440d462f3e38ef65669cb8e13c609c71f7d8c409fd355e9a5086fc906df90eacd3a824deca3236ea8bfb0a0dc155af36c9e0f23969269a9fa86caac5635b37b1635c73382787eecbcf514424425f4f20f7d4c303c7202fc2870f9168ce6a7675146095f14e8eaf47ed066e70590466c649c90c9d5bcdfebc0fc0afa0ed791b7cd989e372fa020ac3a2a4ffe7e7aa0925fc9e16739d55017a60189149d5c4f603dc4a5c57fd3500e048cad1ad7434a18a949ccdeef3dbc70ad1dc260970cbe78148279d77a5f9f69c0ac9ed5f633c87b25d5f5f2fc1efc726412ca52989149525d07f504c2e9383a78bbaf91ef675281fbfcdfbef849ec082194db2b1f6299ca1acbb21ca6bce11eafb49735da411b2bfde35ade2d3550797452f7fa336bec151a02244ded8ca7a341cf0663a3253e0d39f8ad7eb8e30116ff834901ca480f269664f1ddfb048d694956c90be2f467b75ebfcc8ff19198363b36c64aa16d0e7fa47c804d3c79fff60980d453a6e519ebcd4e46c676319a4dcafa738dda9cd87a1c63be1c017dd49588b98615793c8b4c0174cf7e40083b8eb4d89535486c65da0d410df6cba41c5d47ae41f840993c53a15cf847ee5ec213383b278e271e565093f8c152bb67e7b37c71144ba27b284e857f00df3bbd59386fbce4842d7a2e66af3ae5afef91f7842e7f1750552169246e65b50086950095fb5fc41cfc94938005c586c4ba26b60d6f5cbc6383f89bd7e8f1f1448136d72c2564870d0d9e6296d700d447c9d2932ff032dea5ec80f4040499bffd1f762cc9ade7687489bcae074034df3744a0e7da6e372fd2b7b9fd612a5ce2d7c600b3ae9d683eb8c316e87c9c10ed93e33a09e53a0fb1959680d1e94b8b63b3ef819507bfe219373b3359d76515f65d37ddae0514240fa845be7d2a04e5601cf21285f8696bad093405330a3522ea212445a13430e8f8d07d47c0c70eb5427ab75363b296db00abc90830e576c7ee088476ab5b0b732f63c823edc7cfec21d358307659b9fa6a64e530ec61d143b4cec72d7dfc09a68e69b92dafdbc89db2fd9ccc92138abdd9d9790707e4836100d4093bd3693f86d67234ad01c32a1eca42f45d407f8406ecde1b3ff3b4c69c7d2829794dc36d4ba9c458db630c97bc9142c4e9f553cd6bcdbe57243b522bab87fe6c5e7dee657a416f634230e477761c8a09c6d1fc7494c4d9e0a3e9ff5e675f5d5e77eeef3d9d7ee32e797017da0d602bebb9c0a31fa76dd4a07c9663e12769cda62443e843fb1b7ebfa500b32b80b4748558a517941157cba85b7b5478de00a634b7a007c939d76705d6bdce5f90719b2a369de8049db24a56371e90168b84fe424ca962ba81acbc6319c93f79429f3ee183ac123b62b0355aa400ac48a42420ad9d22a9734f2a3d5647466fb2d586e3b4a39e1e0b140069e03309fd56723332e8575e0135de9160b0e34919b34485c9b80a42f4fed6206561bdab3df0662ab9924d938be71b22a9bf211412900be64fc4dfa60ba3a997400948f1afea426ed443542239ad0c5f530588ddcf46b6cbef2a6bb7af87f5b312d4ed2665e8758c21e0cec2114592816a48bee7a4d8075988c798b79bf08e637a2491c18bd8a64f1a726e56388ba6b09100ef32e8c791708e56a3a50a00e2905485b8889595b8368093869f4e5112f5e0f17a645f3928175df2275c7074da13771294563baf0809da3be7123aba9fc8ddcbaeb2bc696f55d0aa415ed2fffe1d2e8cf447e63d19fa11d6bd646996b587694a678683b58261dd9c55c15337b604e7ca11cb74b2bbdeb64cf685fc9983288dc10a59596b5a65c473650411693c9700d7592cb62fac6a28cd99d21e8fbac7de0a08781fc8fd905097540db313be6b778d2f8d69cb953b88ba855a2bf41d1de9a9a5b929b7adb8c84fd4e712d1e0ccdcc4eeabbf12c842cbc661bea3b6783709adb0d89ca318801352b40b63c42688bd843afb882fe5501470bfe8a68ebc8ca75c0c112830e0fc9d5d2c703e022291ca696d3de31928ac40d280b748a73d206e39cdaf7ff1c5361828c49f0baba62adb32cb366bef8a2a645b7815d6b8af1c5cdf18c0f6815f06c903e41922e0e51ad2581821cbab39e1c95c57b072a3598a6f53ad41c9a22eef0a2bd0fd4c6ad497ffca6b8bda80b48d805b941c1bfeaf63bc5d24ea32e4fdc087964119586ca259530a5768d541823d174ff691924deaf75e74b0dde5bc9dc9773611dfdf5adb31ecaea12789fb98e28e6a3f309f24ac81a2e552cb9030faa9860a4ff9a687fdecdf8a89fa5d3f6013fdde65f55fbdb604fc7dbd6ac1a4a2716cc56f3af0e5115a997d14e22d0b8ac01e9ea9ef0f505c5592ed221b123ce8cc72bb5d311f9539cfefa6974db7504cb22919e4612d85810fce284cb7e63db0980a5d880262cd2a45f82a5f56bbab238a88774feabe660914d3bd6061cccc17018e7a572e4f8308b6e81dfb22329b606bf3e4a1f2f9ec84d616a7cb7396d7088deebbe1e7da69802d48b938919ae02769512da980f6bb853bd8ef7c27347fad02d221741a010f526ac26c2ce0cff121cfe95ead8d988628c72f4fe255b7f1da09bb554f149c292ceb3eb8bb893f2e6dd9eef5b15c6ca27124fbd971727257fdc5d6fb32b00530487cfb214227180b397c7a3d81a4c8157485fc0a3cf1c6ad5045d8c3958ed51cf6f578941157f235537aa770a68667dfa2418c3de3f2aa92ac3b2405535880f0b9f4626940d6ed2d1050471eaffc8ea3424c2045dcbd44ea62caf671f08d4ed0257b78dec446ca08d2de244a2ecabd859b9c84a76c13f0fd955bae9abd375f6d6cfc841a1549888fcf7a35bc54ad22bbef83bc9bb15ce79d81bb42148714b108b11142d25fd7bfb35f1912b7b9cc48a71bb50af27fe365552caa96170bc028a5b86ebe09df2cea4a97a6744815f42c0d99001f1ac69369be37394b88c2b02fb0163714043e66fb26240dc65a9bdbb88dd7554b1be8803b9acd1a4965fda321f980513f2294b9874913704cb72f3897d361a46aba0b2fc4e2ce3eca2ed7c4c199476a00e0a1a00d5621e5c8fd68228b159bb20533c7a92263e24f2c68e87b2a4bf3f7533313678047645c52bb10ff5ae53495cbe26a917fe7bfd7730199681a64ca2cbc05abbb5e1da671801823f07eac06019f86f314724a9b0a1feda4a7f74a917607530f4344a8a91ac59973daa8a01569a55ca6fccbebe77a617a3ca7c4996aaddd571b60a336a6dcfdbd90cce003efe825c45840929e458df6f479fddc79b66e49bb43f1c529c69b3aae0ea9e25174fe1fa7797dd0be3111eefc762a308e825567bb799c2e70e45dde8dcba51b81e45edabe0558433ca247d8a7143d3e55e920e5d6257aacec0c2ee52d2fe8f642ce88a5a7a454cbbf05c1c2107dd646f7570276bd621ccefce56aeb6bb66bd9d7f2d3a7908bcc913309d2faf6223220bab3b4db07f41c1c32a02bd9e63dad56624824e7baa101c037a3eeaaa273654be6b530ded74faf2e9f1552076f283dd90ab7ec2cf97e02c68aeaca6d2ce3291df717cc63a4d4daf4573d7de244d52c2f5b7fa74a0f7b2013b7b88000a012dff7cfe905cf5b6315c7c92c6f75ccfe4944fae5468524cb2c421bc5fa42d6728b41786c2e0cdc7350cb652fbd52eac7d384079e70fee78a59eb082d2b611ccf6c26624bda2c4b570668816e97acc6accae8360e5be1cc5f7a63e89a39c5d7e881a29e9000dd1996b9ff561da4db6465faea883e2d9f3e15e2e581b7ebaa6bf09292957c5b9cf6d50552625da55d04360a34ae17da161591735f6a738c20fef480fdfc5b8c21e646e215fa2b633ec63884125b40e2bb1dc17a1f70fda83a5b2455b6590747792822f1c58521ef318669df4f9a233686abda103ea923ef7f377b31ff926efc784816dce59c43a46344085cb99b3c578728f4330940c3bf219778f35fe1383b1a552b29964c58a96121f2d7f3c225ed6ad9c3701f2b75e275d326ab4662236bc1d65fe2b417e21f6b3f60b8b74ba97ef1a9b0aafbef16a0dd9faebed3deece7d1e04fb55a44ac1540916a19de5d9be5a4e1277fcbfa18b19a20c86cfa49a40ea79a04a3561183c2d20204b73885b0fa9e855b5ba02065145eb037704d9112f8f855dbab0c007c10345689fd21d4206aaa5862628be7c62f250c09931597b1233f5243a4b9a676d80f88740b9e888bdd207575a1b929f5841008869595a8f6983c8c83388d4d9b384ad38489cb797fe1a13d966c7ea90c70475875334fca405e091dba206742ecb8792a7158a234ab9a6412adffa836ab9cf97d51b0f16c6c297e4fcd3e372650722f34e9fbeecbce343b339271228227e0ab14f400ad4b3bc613d23ffc44b52c063a04f1cd68bd4623dc7a83a53034dbfb2909cd32b0b73bd9e9e2097eb2ed8a2ec61852a36a6f2adb563d156266c88d4a6b850bb2a2f3185c1367926c5b2c143a78b70a0ea201a374de9455824439a35626ac67d2c1d2e0155819b6ccc886991f1458f957dadace83c7913c258a829b15497b709fd3fe3021fd709e1e6421af04d0b96d720b9dedb191e1cd807871163936156330a7365dce1d0c3612b1d845aaa19af8c11a68bbf4032acda89378a6e6e50c4a7321bca8fa35be296d570baf86bdc037a28907d7f4f4ab8fc81b896d081368a0470e173b778e3635a56682d29229ef170973b44c7258ff3c2badd6f72a06c51daa53ac8c6509898c31134faa862a6a953255e94039ef50f146e0303b8c5fddc2a5e1e4d849e2713f31bc3796150c2ea5df7cdb2fe9c0d450af2366887b299eeb7a9ba1b3cf69ae6ff860dbb3db646b986fab1740f98b574ed627a9919c039bc7c33f1e4a11bea18cba6e2d0d3837740448e2d75efe652f1bebad971baffc8286b3f42d220266795f6464b88cbf51ce80c8c24a95e04540b2d26c99028ff779197aa1a4cc024f99b344c64208173d9af75d92e17e12de96cbc8f2b3a13431d797b477dd5479ecb869f2d4d463a416e1041c64167f7a16fecd274b379732ae4e42c880f3a77a2015600b820e930c244cae27797b4204a1b144e52c15220caf1a3bc6b6facc71e5446e5120a834ea0f2c1e92481a5329b1fb9860803d5f52137a75cc8126751cd3f9729c212dd084338df512cbf3be715cfe5fc11d55042271fe29b3b2e55f17557a24b3effe8c52de1b98b52110dd0a811ef912f9623bc8a96d0b4dec4190cf5fc241c30373c277a2b828a0fbdb6aca797d59a39d197023e3f7f6931e066ef3e4c69e4917722daf18e05b02a5a20bef0b205c878a92b7d44b6dee52580fe8fe6bec0d8143879054aab5b7fa52225ac8c3695dbc825874b5735fc6db0cadf04782be052d6fdf58d2dd4ed1d40a5bcb69e55465b4f6557f3de18b924b8613b988f4aff18250d732349a4553044a50e38f42e6fa47d5f5c9d3d8171e4db39bc12b5b0453fa94b79c648521a7692122c83b0100dc6c51fad5f0834709fd68eba95a3d0185eaccef5c430ed5d18af5caae398b8fafe2f4f1a50879674a15b1b3ca18209c28dccd015e5605b1d0f1dd9a078cfd92ee408479954b79a6fee073fb68ee4a97301c2d85f396c76fd555f4237bbfd93a9fbd74202c34bff09fb5a45c461bfa06b57aa00799b4cb49c56b150c30c720234d3d066250ee81d13c13dda7dac46f6781ed4e31affd2b8dedfeb5118ba7c782cd27607cd7d11da2d9c0b858f7d787a9451e83998d99ab6593eb3202e593488cd34d4f6c9b25e745070274fec375893dd6b30b0fe8ba4d22c7367692995c4a46e0e7b08c33257ecac816d88c03f400225988256b40721666da4333d76b9efac5100647412e6847814468d20a8f9737a092462b0a529f4cc0c141cab7950466cd1742779ebdafe0ed74a9c5c57d127c4007cba535cf29ce520b97fb645f0c19731d4c985f5375fec019237b95616a635541d8d88bad4f1606160c5a8bff8b7066e8913c7058dd9b6883bb60d27dbefa1fdeab937d8e7e11acf120f9cc93969ca8c1ed97550486dd6c1c4b3d8cfe97b3df2094b931b181366d6e01fecc08dd339ff8702a313be00a993eb4e1528a3e52006e6a2ac4e0aae27ad6a6af4a194bb26e62f11082c34741468d47afd57dcd28c7ee23915a2cac5552193a070f8acec4393ce365cf721f98b168db8c1066c1689b482be66b17c4ed94c13363245093b8cb8fac0143de7e78f7c2f99a309ffcf512ae845fd56e9c573a642ee89395ab5f5d9562c8ea6dc181d9b42ee5cc8a11f97428c86c77c7b8cd5dcd5008120214e6216e3c575bbf00addbe45c78b337a2905daece4ca1bef3041cae08e8c0d0ed0c96af661a83815bd67353e3bf391b6cda45f908b9044c334651d95f14670ed06f375d5f9797d9a91f6a595f655523490a98166287984eb2259f3eefcd0cdc1cf6536b327de6e96baf00a695611529b9c4cd8764d96f7254ba4dbce7e9ec7879ab7214cd9f7a89124717e18b6163349b6b687d1f19a8ecb49906a80540ba1d8aaf4c649202a4914d1d2c7d115cabe329dd3ab29ee6b30d16036f04f74e5d10673279ed99318ffd25df2904989f671bec88b6ee35199d88f695ec7c2a70c2ecece42903824983b68a26180c70072fb0d02777be86564bd8d08d58bc007738df855327941783ec608b629b31d71f1a923840864b17a494313d61920567d85f94bdbd5af073a1e4a27a8dd5b9518c3ba28d2cd853bb2ced26faadcdf48ce8702eaa2ff550d71d13114b5f460af549542ce6fe75451ba6761892e62462a36f2a116f3cffabbee3c3aa379142c8082530217476bf7cb83f81ad800094240f7e3857b1b8d16e44b1b9ef16ee931785c25542bfa508f303bb5bcdbe044608642dc2b327ef3128b6f15b10342311eec8e20994e1820ec70c767b6237b74a396b22af23c86cdc798f77aa0a4f44575dc6f5d32ad4bb0103347468cdfc8b3b067820146c82b1339508467d1a8913edbf14b4851b10c1f3624697903e47d0107cf9d93973739bbb19967d05ae6c960ebe2380694f662e7f6d0309ef26207b1a1b715eb8b215acf0508dc7672dda37a50935bdd5fd7de901badf7b60b5bb2b8b512da3389b7ed569be8ae09360b65c15b5a99a10cd46863ed809ba1ef8c67473d5d6567a4137ac399cd7d729bbd99d2ec77196f8be1acb99839d9e666e89c449b87631c7863833ac1c6ae6b3ef01552c4f0e5d9a8914e0cf5ac12fb8c75eb80c4b0addec70c0ab9b7d21dd236cb0c2802e549f2fed31d40fad11da0d3e98387c42ece7fa6857e0c2fca03877906818ffd83a269b45e50615e1acae2f978249102fbe73c7c439320e2ae833a87bdfb78785b6a954521cd8ffe3907dbbe2758a2cc797e46ac9cea1c38d3a815192cb290e9be304bb73e487ccb1450872ed8938a48ff07d2db5ad5cd933ed99c9ad4806a148ea66a6140ed9e6b827a8b2b3dcaa444c4180f2d0973c21f9d3132fcb80fad00ac8406ed1d38e31a54c204d563a968134da8e7f3cf9b52e57e263c49608a32eddbd6e8350805e26458b2440ecc507ce43e95f0a5909ecae1841fb9d103309a22b63c245e14409624c37ba86e05395355fa0c9809c87d2d011ca820192dd9e2698e470f9b9fa25122427fbb363087c963e9d62fc5553c7a0218e6e5f8c7d6920f143e170b88a4bf42122fbf9b77b05bf90f7dc08f54c61c713fbdc886e6508e732394a36fa447b7e4afb9b8a1b65b07f6aacbb0f2aa1952bd1b8b89dfbb6e32ab53ea11b42e16bd851e1cca116dec0adb4c0fac574185754c6e981292ead5442b84aa08d7d5184a178e6d75e9d817481e6922c2c0a07640ffd1c208f529dfa8b94b7328f97215ebd080d77afa3b0bbaae9e6a9944e77f089e1dd83faf1cb3bf7dc78cad3d584c9d1c94484aaf45bbfde6c3f2668360c92b640e738a49b57494860b79e9c41afd7be0feb829ab651e8d99ca1f704009b300ec8c86d33303f8ad3e9296c9c5e70b63f221cf255da52063bded9e88e44d4342a1f7e3c3b2f6503d3d5e4af928fe2bd18cc8e4f5ceafe79251d636d395ea344ccbd7da854d9ded8496b21274c34349d22facb8e00aa883ed59c98b162ba7e1a2598b5f7e2f018ef5e54dc1705902970e8bad52f2cc8dbbdac1803792ed3e83dfe37412a364daedc65b2cfa5c2d4d22908cd8e904104774c58c77176c919293dcb2460936cc51fe2057679d1d92db02e5927b021c2a6b313da2ee5520b46396fc2a5c9aedfbd3467e3e17c0d2981df899f243af56368c3874f8a1fc4a6fd5a787b9ab4ea872dcfe4a875d856793b9790e15b3c5d620084384bc105d4a22681f0902d0a3f6407583a57f8fee43d0c339189acd8a8b5f2d0b7fadc88bbfaec791f1658ec3de5711b5d41c2a4afea718cf07152d9a5bbeee80b518305f052048db10a8be20ada7a24038cf1ef767e71a26e4e4b77bfd930b64525dc284d65a46e2e849c32475143aec1a33bf32ed48ebbcff9fa20f2b3f6ec7c815fa2bf978e9f52bc6ccf2f2b588776831283b872dcbdc24f2baadbf4c7eeb72b9d03b8eabf70d424ee956bf2084310b61757a783ef24ccbfbaa52586a60a13c5def072d0a1b2b04c856ab94c2bb51e893d3b63281b91a79486479445658834cb4f87ca270e8feede1b8d00ebbd5010cbe2d4e768efc621385e9be402004bf4282c2b76656da837ccb8a366d1a051924945d3412fd12dc0a4139deaa726f0189cbe79716b2d6351c3495638f0fcb807ec8f06f65a1536ceed4efd7d9b646227536de7fd879c224742cfb67e1cc95e4930ff4f5eac5647894e892aaf4e3148f12b20846d2f50c490eebcb114c30b8d52699693e3030a868208101b1b469f44a38ede7fb4a3b09f508846517835e781d633f1ff4315babf3a5b63886d5bc3cdbb54df3d9d33d0cd50fe3562def984c6312f15bc41afc4fc7a131fa66842cbb7273cedfb8bdaaecc2d565a9861c25dde4feb410b933a5bcea48cada85d645a4099e68c3f4e379162ff2c155a117593a7e182ed61f5d07f4e4fb3ec3bb3f266a5ad00478bc5c003fcba008d778ca472b4a7de4f12f899560626da6070da176f7ec95f97f0da96ecaac5e5ccdf59929e9d011390e8882d056114dcacd30e4175f74c7cded274d7d42ec53021ce4a8fc1cd68bb70db5eb23245183b169f94b236262a26236091b2e1cacab1cc49f99b4799bef50d56ba3accc71f6400f9ce6070f4220a688d1e8543f14b4631751b91416e9ebb4b68873a024ee660e972ec4d9062e7c122c2966dd0f9d9ce5aa3ad9226023e06b8530aeadf48f6ca2affaadcbdab83e77a40278c14a15656d7fb3acf98c0bcbdfb77e0be39f3a8694fd1f166f11a6ff20c48c020ae53b149b07c0fbe82e976dd77fc1a8ed95cfe999846c8fc6259c46cce60ddee3ea4778c7509b96fce7a786d334687421d36ff0c258dd430322436789776993fd214d4a0557f8217962596790cda8929e627dcd0b71d9dc08449ed5504327589f34397112dc833c13198f684771f7f06f639b4f3303b4dc141a2ca47ecf9d6d9ed9dd51e9f8290a466689a6d10aa64a5e8946289c13ddf96b16802cc0b91fa973a6a55f819d3036757f841c7b416ef9c9331baba8adddab1fab393479d1e0b3d3cecfd1c09b5fd0405ad2ad29b40f7da6f9f7f6193bb241593b59d613ac20b4929e024f86e96b02744a772572549edc330163582fc570de7d72d66815bb9239af22950c170be7af5ae12b7d139ec029eece80df6accc6748d26564765b5cc7d87db7aeacd3505c28d772dc407ce3fa91b23778146a7a3a5e883d7122973a280df778e8cf706abdbd3fed3f5641645a9c7297cfd8fe6238d121b88834bd34c0797728c688490fa4a5022ddb62749b7d3841665183e2ce83285fb710f4fc7c16a00bda7f1a9536a800211d44b98356e0c04dd925afe8b8e17bdc061eaa59db083329e68bcfc91ac0a973c13a685179b0d0643499e4e5a0c5ada8b39a94fbd3a430e03da5c2a5d5ce94df1bbfd9ce7d6c0bacccae19b45494b61b6ed4f1d638fcc41a3645c46f272ba897b792dbce9d36bcb15c8e08324d3133f736254a69f04db126ae202fa1030f1142ffc0535445171a2c432da8a748db1c5af5bfc5170aa315ec34407d46c4abd1e2cfe685171bf53bedda93464811ebf3dab7d6feaea1dd68497aba7a1766a9e701fb0b994a505a94bff190608c2962b204fc26269b9fca2173bc5bf976b51877f498a7c119a53258e7b5b6d3ef30475943bb67adfb39b8b759dc4bb51ecb5a55291ea001ff1dd59a7016562fad6cee65aa30075df72bf1b28c3c61a8d3afa17647209df41434f290e95e99b6145ae48da46cc5e87eff5721c7fb32b648ac2dbe8b9c2d2ce5187c906836eebd0d6b6054caf04e2b97adc4f02706cf326fce714bf4c5787743d8b50caaf34f282503a8a6a5746c4c374066513dce1e84f8ce8eaa4949cacccb607a3d8f9fb2add72a86fdb4d1679d5737492f30c6d8433cf1a4e665a82716bc0182fba339304026c3e2e9f402c4b9c9547ad9a2c682ff445d995391a9f9119d3ddbec50d98d33cb79f6201745cb3ca17fb75916c9b9a47a9694dfb92bc247cf6b7fafd673cb5531913531994d60d4f40b3874df2bd17791470d5ef86793e7d7e37b0421d856015abd3480af4e7757c857520e86c23497c8066b57001efecb42d374185b05a4ddf535a0f3b231105043ed3f30d60273860b9020e791be008da1f223b7556bf5ea377433844dd717233f96e7ed72cf2cd44e0d37b84942b69c8ec04acbd47e793791f3edcdf1053a82e94e555a19e4b622ee051ce2854fa9a3ef31d1bc458be0b51b4e9b688e6c8f7f2bb32b503cda1cee63f0a2c0be19117e2dca180017d09385985fba58398747a571e03c041acc37e411990d7dcd51256577b78e878720030a5db155e6f852f6647a15aaafe6f4f2c47aec894557cfefb057aa3e47f60fa9d2e21647b238a5ad9c9eb2a16f1e7577974b105fc4a6bd82fec8fd3488b8f45fb15cf7ca411e3c06d403963c0ca63f0fa732775c4b21f371608b98961490828d2232120fcfd1a60af8ec7e72db43e3f3bf86dc7e91f6ccf42cbbaf996d316c5846edfc52dc2e0b1255309a0346ddfcf852675b81d57036a532e4f98277c110e3d4ab4d204d5a1198791b5be4a1818a6e9546d35ea625eb2acbe16509089ac8a8229fac8b75c58cbe8019bcd42008e8e97acbd84955e4a45104f45b6756fccfd7d9092d1c99fb53ea70687493adc5b6d280971cec1341edde26542e8876a2b5a4028f5d6781f6f565f1b8bcad612079d5245e60a23223a42563e7904ade20689924a6ffb4bdb4d6e25e993eadcaf6eeda85697d65ca79047f274d89b98e3f062ea4036ecdfb3d9db42b28395c22aeaf96face97f52ab58bfff4fa21b60d5a1563935cb9bf30287af49ad2d5b67e42725a67327fe02dc40113640edc0e8ac2c4e70c055620704e6b868afb5a050694f540c7159f7143bf464c3a2862c33be5e19279654a42fa44d9918fc5f88bbc9c2d51a33043ff6a99b2fad4245cd53b09d41610e22aa5f8179a8c0ea22ba511cd4bf60fa696e2be6e69c634c32d05abba2b81be2c499a73218bb09be7172a4dd548d23ffe456165ec1dc88059549b24eb56707c4288f5b9a71c57f22c51272586ad60eac0b77825644d661d656c4baf27db33c4aa6f09927f90543f904ab54c01313fc110544f3006d6d79af6b7e1d8dad7cdc4db9d68386bd1f69484c81abf0603a6bb854bcb3c6e28cb3aeb35218f66509fc24e63e92c26f8b86ef55abef2216796ece720e1adc22dff6cf76fb5160c6add05453ccb416abea8a19ec68abfd7455c3bc0c79226423bcf657a358390ad43e95600ebf9de1469055ad26085579faf0b34f18e225bc4de777bbe59468bc60746a3c55c0216790efc56faf2a3137ecf0c1fc8403d5e88e691a05bcf21b9043aeb0c0395571b0b13ab49f73287e6b6c63e793a1e7590b4cb8d690ff4dabe61d33be4a2d2622883c043722c11d771666d4ba99c26c2cd3a96509a1d55f12e922f822b4a7daf58c509d6444216ea71cd029d2ac741abaddd9caeadd76eb7c06356bf93ef045c4330e8c1753117270b9bbe3908dec80356d55e377554d8d2708551785ea168f8eee163c46cc621e896a8afe6318b8fcb39a2ffa8eb4565b3913c9916c6a8400c599e2434829cd219cef5333ac7e70c9f1dfb9dde11743cc740f6400db4fd190f1ed33016319014c492054216d1303c8a0066119f5a4ca3470a06d875138746deea3e3e5b46af1cdad892219634a2b163c6702344e7d77875255d9ae5bf1283ff9da3f86bf50b2c1d2b339c15aad28f8d6fa39ef061edaf9d5406b3f54d387283d34debe055c296c7c3e48f6464f6f697ee81408f07e02b199c1725a94109f394758aebc0ba493098a85aabc8cfe897361f60ae0e288f04b862659a489f2f574968029c070ed81cc7809f6c0c0f8ef909faa4fdd7dff19e025984eb3767eb1759d904e1b76e6b917a15a7b909027761b218dc93b5ec76575852cbf0fb781887012b95f03150c6424eccf100d36f4ebbeb922b0514745ae08dcb2f50c267e68a49b3dfe1228c24dd1909a7f5fdfb205431c03432e82f0275680d6a46d982e55358185564aef359cdfea9d4c6c2848934035662325e298e13b2d3d68ba946b40c2f92711b37612433efb1ee04a8c931343b7d5ddc8396dc2eecbc8dd0d28464b86dff1c784ed65222a638336cb0a81aa608378b836178f3217a9fa6cd7814b2bf45890c9c3b6c5759d718f0ac5b5fdaf64040fa81baa5a4af190a849ef09a3707f7bf1de9f009f54d727a8ce9df95e817c75ea12e9d4d426df01487a371a6b9742f75a202700903cc09c6408b178c5834c18e70f46247a00b2da39037cfa8723dea7ec37f3cf280effd91033abae873a7fa98e3abd3796c8303fc2d5b08afa095fb976361af360568b561cb16c78bdef39f8a32b6cb75b95f3afd9e4f32f897d0acac46bd69c06d6e9ab3b5fff86d78c616faf79d43c73e678d7715bce79797f86dc451ba4688b2b7a09e48dc552ac40ab21146cc4890f8493a0d93af62309c2331b44d54412837c1086c189ea9c224490923e304b9d361da0fcb3968678354bdcbc17b84d003586e209b96e29c33e4c0cb0c41f12359f7e1cda5851c04cf8e26b6ed42b40da7224d028cb8834a2563a69fb64dc039dd3b0cdece146defb7a9b974feb6e6b1a996c2056c965ef19c12b7213d44c3e750b0e7344ebd3887127505063cdc24ff75d1e0c57419f7e192aa50cfa2f96a4694555b88822e9d78e69b991cc83429dc1daac6eb6d7c620a503eafe9a7df9a6411d45ba4217e7bfc630f541853c52876d53fac0c65f4696a5e2a3bb0ab5aef0a7bb85cba7283d7c108b54b9cb96f6a36b49b1ad1863c83def72857ac55cffbb407748277880ae8e8ffce06e4a7a72d56cfb772691b0d93440854dc97eb0ad78f8c9c2e628d1d631abcc0fcae99860b57dd93f78452b22f301042ca2147e024b7de324f746b2382751c40f74e39414367cd71be9fcaec22eae8289383379adff4c17ebfa7c9c40c4d57654ed68a4f255f88d5e5f84a636b18ceb177a356fc4eca80dd541187038847197a088cab83b823ae752bd7246c68640813f61c640b91d1a02622c93fba0b06f5ee969cb1714eb06f1991d50a6f7ff25987e33d584d143d884e4e57fc2a1e626a9061100e7e138b07f9e8cef517e3a0643acf7715c4afd14bb6808e2f04f86d611fd7fd8265598c46f685b8e58441909f62244623d5b5fdc3741fe230f2e6bdd96bc85af93d732f5281d3db8f6bfbc96df9320fb0b560036c8e464f870b3853a4f91ca0b45cc56dfa5cf4b60378d3b5fb0783f204e26f056cf610617f848c7961d1bc9ffb7ba469afbce4e403e71e48990b3e8832a966a603789be7c4e53ed1e64f79396bb3f4c6b1b993e8d3fbeee60bb13717c84d579ab8d098a2bb9f4a2a0b8d3886655be6bbafe3fd7c0c81392bb9168cd8b9356e3c4552913c526f214faa1581c12b0b9d3c504d1e9a6cab056d0903d6a1991a000db1d093877c78521ea2c03fd7c4d819a39c808cedf55e34b1993adbc314bc7f7065a41eb249471409a9c7448365ca453281976fcd24a324537ef84cf5e4791377b51b5623c615234c9ebd71250bb3c87921331250707e51afb5980c8d6a781b9f9c710b29310c5e51d5bc0f4c10905a80433173e351d34891fe2f9d5138c398bdc0c807a2992c6e9b23d549483e0c898bdbf434a10da0b15e57a6bc4d4140ba8caac9e95fc469e6a5b7f1014558cd2e157a0ace86cbfe633a4cb4d02d7f623cde600cb8c2bb7a4e95b0918ff76bd7017177fe1aadb76349d48e8b704ebe6605f94b285c37d0a9085730ac3b18f09e0502520fb280f9aef65f5e44596c9c3df22a9ddcecf73f4778cc93bbd8dc6723f2084af1aace71ae1bc79f8081c502c4298a21aafe38b95c2666cb6e5b87a22a00c715be919cf979f505d52c5a230cad968a945c7f801ddce229090dab7f45cabe1f445e60a7744e83d6f761415ea77ce6c6c13abff45edcc03f25c60f9bf89355c52b46d818c657248685deb03c9593cbbd79c798b69c08295d231234b58f7f503f4b7e6b35e08353331e7fbc8a264698a439016459cdbe45929fc15e7eada499eaa9388dd7c98e594701cd0108cecbac5ce15bdc9625f26b0a477633b3f80ae3ed8fb70a007028e4d41396ed5df3a8fc4e2d92cc98ba78ace3e1e87da8c6eaccff657bef2d593ee2b0f1258a13abb36ddee9388baa79a891d14cdfd9cf8ab99720817782549b32054cb186762759e5af49bf6a2d4b5028ddd5de0c52911a085d2a67f07cc55643245db04ce977b010e99daa237ebdf0eec886288ce18d2a3133cb25b3103dcf4d1b809eab200dd8d97ad9410060efb7f76ca34c86233dc1484fe7bed2f017e1198c5e26d0af2cfc4b6602a33631bc611004f435e56313d0baaf7e8e514c6664d0b89acae01a1e68ece42f28a7f3fee03bff23db4fca11b875ad02c4c9f202992be4059bc83cf1a34fcf57dfdd0234e38dcaba2f88f877842f2521f42eb47a6be5dcaa78f7cced3c1bb8ba4f015f08373e3f63e20b7cc044a82b6e0c053f98c614da1d36f83918e5a105e9dc513979380bef92997531aca46928d599b6a14d717ad8aada3c0d5ef4e7bbffd20bbeb683d43a5bbb7b6846b90d782ccc0db1172cd2d7676fca4376e3085e242ee8a38635e4e90b0816f3a2cff23861fbc5e0b5f8f246daa20af6521c54078a493ca5ed53181bb8c1a7b048ec0a332af6278d815fc8b33dceff18426a98d2e278c7ef93b7b58647a368a3c35106b07665fbbee491093cac0444e523775b8c98f23f8b1935c01d8bad26eb7580180fc71350dc34ba48274bc264d5ff16b52f9e6a97049f45a91fa72089daa30663ee8c92d169b9d5888b7b008e926eafa88da31f5b94f58f35de5982b6458c7bbce94c851a822b475b3e3581215e1e0fab5f9f11a1ead33e43a9838df71efc1faad5c2d70742d0158dace1620971e93f001f9f19a2d85e8b2cd088a97e0aaff2e01f4432ea968b62fd0953b90bbc613bc237b685c5396202528d17b5db30e1760559da0f5d8bbf6cff3b57f00094cc283d229e129bbdaec6047c658e642c869438b44feca7539dc550bb177943cf515a2fba2a51edb8a73d451abff2a1e5335c743e2120eca06d0418c538414a2566b6e7b77418cc45a3b027833a2172fec59b94d6600ab00318b5d9f7571d3b5b7e972eb7d38d3e3ad580794fb6267f469515435fce2f98cb7ecb79d50ea1b4a81273f57fd9a9bf8f0d16904bf55081834214b2ef80e5127e187fbac345c0590eb8ac6de0cb2a1b0d39fe95b5573e01f064cb586e800fe203a6db14dcac852741dac593beec2a6f407c2c9995c4021797b2788d3a8f53f778e2fa5f8be35748d8442733eaf5cf7003a8e3187bd06c8af5bc61cf531e645cf4657f41e55c44ce16f38242e37fc9342efa8a19d357e27b7c3bf9ee6982c8f2f06ec689940adcc42362ceafec8a65081e8aa4a6006e4c323a0abdcc4ec235df87ff67762e93da861c041da6478565774e56c3526524988a0e2d08dabdaac7818207047d55a568496bb096d0e28c1bcecf38aa4bf056fe9ad2c094e068d862c41c118564fbcc4d8cac469cf490f7ba1c5623f37d1cdf3c47ee2e4c4ea1a28cf087359ed296fd89fcd25a6ff64db09bf7d9a0233de1e91a3cd27eac92995f9172ff93989d09806a29ec31e7f71367995a0feaec23d91d1905d9e3665f19f7c593ad4140ab04e2b46da261989f5868cb4a7078e9800b064b405dea2c990b203228c5ea10c95cbfa5450ac68acbb90ecceb99303295561c8e95dff106f090532be0cf427ee4f47b97254d06be1ad2cc7f79bcb01607155482bc312ba6ab76ab06c4494d5fe5641b08d3ad50be65e0071de1c314754e6093b4118704e2208cfc91343969a321b35d7b97a31a3c4abd4bb800e0852029a1f0281b18c5a04d39d35afdf0ec673bfaa0fdf2b8876fb19abbf5c1fa5ffa52d1b65892decadd8f8512badce9758a256a41c45f81b222deda7bdd36dae44f12b32793ec7e8f0926980242aaba0797b4aae278f2de5e08b9fad4de398ee6eee45b86451642f7648088d5ce79c050aa39abc9da2d0713516b95975629f262a748b4cc0976b06a91be14f6d55e0d74167328908a06ba953d601834b21107b84238cbf0621f955e21d629c48246058a84e102e8efdb1a9fa2666083ef6ab5e2eb806212693ec0002a98024eb50091de5085fed226d54115e84c6a3e1551ffd5572c038266c40cd6b8f10f046c7d3b6fa8d43cebcd0255e16fc6f1a4eed35dbf37ec576a741e639c749d3e5db24d1b81465131727cf52634cfabcf9699ca6dd9485e0119e7bf922c25dd85c5feba1ff5fa1f87c0a7500683b2530763f5effa03bda7ddd7d247617e093a3353ded4636875a4861751f7239762cb8566540e47c14141cc6f1a5facbc23afa57a3242bde3ad71bcd3083013c640b5d5f2a19ad451d72d5aed78f1a55ad7a70bd1972d6ecb287fd6c4f6a1206f3e9623e626aab1ab4ec42fb9ccc635901c69daba10199179333f08fcd3c63305726eec15059ebe714b46cdfa3f7fff2d77c019465768fdae877846599eb4a63371cb2e1a4a228838cd53700e6d8e1f1e2905845841e310c03ceec569045a029c8611e27e917e0c13b70f600ddb0a16257c76c673f59cf77bb839ec7eca867b388ee6fe4272d126ff6fac8b8d88a296e0f1497e3725f905752b6f1a6148769b4192ea18a52982d3a255b1bfc940bd965c2e9bd5d153fc00c3539a35bf5a3045ec87d0233fdea394cbb9c19022fcc2f010094d5a577df61619104d9a22646685fc06d8d204066f3f5406e2d3f60b0733f9bde007d8bc827288cf15dac2bc45b296102efd46de30dc706ec6e90afd65d1d4b6d8899e1f8e1a845ca51b78acf9ee2a5654cb58da95648637eae4bbc6528f1ea56b9e9122c505a56b8fb7660689bc1aaa47954e1809196cf4470a7e6df071ca20438b8f5e2adca6a06ef26bc5137ee5e7145f6e6a998e567d2f5d68589308c16c8071d5ed6d08781266fde2158ea885b75a1856b7f9fb88028c6d55d34ac72f95401bb2058c5863061cc6be54112a2e717d85a5fc34d8d48178a8c693b2659a66c1eea0f1b91b578776cc639709f08dd2d158c888512d2c2ccb852439653f42010326e9620ea8cc14f9f269fe259398de1dd6c47f566c1293464bdc9bd6a521ec8cd91f542c9f52b7e60f44d9f9f07c7808e8a900c224af81e3ebd1b30675afe2d9c2d55573ce3391fe70b20f0b9228550ed5447d36f65ff6572a1a0713e97634abcffa09fd4c3e1d49b51095aeb1f077fcf0b5cfda365a1ad9433e1e859c03e04e1c6cc88f1e4dbbf0753604894cfe12f0a415c04db9b64078290b16f2dd0793ee51f371f5f6a8c1cc1425e83d4ca53cad1a212714449fb7baa46a155802e23727ed25f14a0cc79e63d9ce44302c5ecc722bf74b8ceb09c70f075b64b0ccc0ce7e5a018c07b8ef46ff180df939cbd1674b1d87b7bc18581550b0657b81f5311220ce80d40536fcca641da33cd894ca4668a2073f82d70a96ea3b64008e5f165a53b478e22e1acb164ce74666c8c0499b952b46089cc85af591d8234ce50e3379d002d5d118248b01eb6efb95fe7056f22e93d1bfcbf81189d3bb0daaa04240c9a6509aade983c7cfe599478c11f683908037ccb698626ce0d459d6e9ec41c6fd853188c3d2700eac20001d1162eaf887f7f1f4e9714dbbaef51a2254c17c826d08aaa31556c19e35eba1b753640fe9b055bcb8ce641cc8f42bf4f3fe3709181e3a7166e61008a7406f5e4b084baeaf28a3ec7c37d7c7493a9ccf57391b9fd3e2a1821adbc7d1228b860017cc35274675f27106656dc10f233d00234771f1298a3766a8961679b2c30672e7860e7eb0736a2f18d8411e58c2c8e4c1891809f93401bcf01dd7fb908e5894f6d4adde65f349220b06ebdb0b677e1d95b5312da0576e9aaabf7779e0b7fcc654b9e883112d610fa20bf0d32937cbb19fdf5fc0d837bcc6c9904fb11e3bc98a3cad8a0a4c5b0678a4a4bbcf19c1f507873a93dba2b2e3a17672fc1a8479a779f3130a35338586e33d17c0941b56c3baa1200510114d344860993deaa668ec195ef77ee04b36ba7fa8ffe4a34a0f3dd68d2b98d2c55c719dea253653cb9ed7060703737f5b7bbc9ce5bf9694d372d75b7dbf42ab70b187c1020a791e334b8b74650fcc1eed3a3e62380a9bba9ca003436e9e22285413f35beb4540f7ef1968e7c434612a5d37705b4786fabab459721deaf35a8f0f1d5bd6c78be962abbad0eb4b4d5c0647c674b7ce36bf88bdcb4456e80bc0b2265faa0c217d3c26aab13d35eb38e8ef5ea3a4a8d070f10a79499fc6db18c71bbca68bd690971c584f3891b13f31ffecefc364143e143cc72d4f557c9b974dc4fa6b8a5c667a552538f9e9ca2f7165c485d837de927ded7562919b8d6f745dd8a2914a3bf312633204eba1d07a2248de9c5b499f1f03035bd4712832735548812441a896c08dcf7aa4444b745e32db8e76710ff035005da60584810755fefb0ae592e4512d74e73c606ec228b0d52903ecd12e551aef2b3758f6fde8c8dedcbc0dbb67ba99f4f95bbd95d18db395cf68b37048f14f6265414824fbb1730db4b0f66d98bbb435bb67ee8042614db88815e546b41be2def6d96cd75f74769b62088654141989be62039256328897fa6ca511fdf874de0cc0d23603fd4a345ae359b2bd10b594651e61ced720c577c9e70c39db32a84d4be7177950233b57f1844042fc42d825bde5c9feaa0a9999292b441fe2576bedca3ce3761fd53e7164409b505e464d8baf7a01f4226fb31b1736e341ce75d6004b245e8d6d4493fd0af2adcb0a66b4ccb86b544879458abc94a2b6d11bb9869b4676786fb6a5023e61da3b2a36ec2e713d6cede6eba90e65d2a2a8b4a7e37542a194ec501d6a8bf3de1c8823a803570613f7d15cbc62ed5f469190f908ee74bf8ea77bdbcc0807764b50fc213f4620e818e1325b97e8fc27e57d8419bfa80dd32fac981ab04531367fee763f84afcbe14a3e71febf380f4441a09fb0808c5ce94ec13c170a97dd0b699facf4ae0f0008697cd77a5c6d3630209ec3142459eadc05fbac8dff010e8d81ce22e90419fe43b9c1784f19c4ccbf09f5bdc89e8a4891602644e7e0ba5f503eb29a09a9bfb0ef6f9751f40e691b01006e56f8ccf056962d708a54f75258e8057b982c14b467158a510f46fb541a3169502b3b88caaf287a7999eba06f979c605e32cda2b6db99364d35e558ee89a3eaf969fc9a9f3a2275858f6c71eb3458d5015848c855e2237904a45d1473232d1c7704c462cd077a4c93114defc203f4652ccd0449efba7454dda3ecb6aa97397d21c622b2fe0bb7383c680ec70b1d652407b8f8005258c9d106d579adcea288b03c5ad52b99c0b870c20ff3b02cb8e084151406e1f51dea0dec888afe166390c7f8ff2db74283e5b10060575557334c755c06724206d9898219c4a91d08d2dfbc90e5584d452cdf5ddef0f5e56364641ddf912ffdd8e6c4937863ab092c2c6ede84de7f2b8dcb504d1dc3b97bb0275dd3610600f660e3950ca22e8116b645f915eda8ee503c4ba3167cbc9a08f709a4416441eb8f61e7144fd8638f9b6e642e8bd807ce275df25be392e02a26c1fdd6f11f2404600cc028fc1cf7ddf906284d651649813d0d9a43692c0e5cb08f72329ba97e5d0794fdf582bd687a0809af9143c9d25afcbbe560549570ac53562ca461f998e452534c2bc883316c045a63ee102313b41acd4a5dcc306f3fb58691623c2018357f606f8a24a7d196ab4f01e94ba02a8babc4c3d96ac44959f6d13fcfed83dde128c1b13d06bd2993a8db625ac10cb530678a67d5a040d2a49ab4c7248696b5c79b631a39ef866b9fdd1579ed2991dcaf547d4d4035a466bf6f5feed603916f2e867db0c37d3dcef847034a7162692d9de649bbdb49e8a32f73b3948d4f82c87bf0a327a74938b7a8e8d4f3f9f58806f80e03fbb49d4211938c659af05713356ad02e6054d07744d573db014849be1cf8247c4f6d80dbf3652dda115d54f04ad80eeadd44b4d1a74c1052fa8732373ddb46b0d94031297a99280a738f48d6abb3ea2f381cc890aa4fdc4a344963a8777fd0757e79c6a32ec9d97db9fdc5d4e63f06d67dd836f4b4c4216660f38da7d03ce0ab640c543644a967fb036ae02190e3f91faba101a8f5f52e55d558599866e32a0d562a4e3141df340e7d46a4124c377c14544d62810517be2894840c7f4d6a68f47f8a25491ad99a4ad687295a736a2f91479da8fadae820e32bee4746134380626f0743b7033c9c305fcef6df7c6a67d1fabd2a19ce7fb67fd2ce3154d873cfbe40f7092212f8e236f24cc084470297b790a996e6cc1da913f1a0683bee1d9d493871b813931da40c02cb3a59f5956350f9817fc1f69891125a3f9c1ed7ca440a35cf7869f7b239fe01d353596bd2aad31ea132b20a0cb1b1835c53cfec004007021458a867318c8eb841111d5f4374ea105b52fc5a548b7d7914228d25f6f3212c6534003535985f97c7cdcb0fa425102a1f055534919287e17cf1c4b8f511c786ad3dd9cefe30ee69dffc8c1f60135556ae3bb75d72998c2acae13f935627034b19aa379c2ae834a6416cfd1c9decbea782d85b8563118df131643ebfae029f7d0ee518d3bec892e5d7342ae1fc6b35250ab3b76e27a05075bedccee8b180f0be8186d690dcd9ea0d6d4171c8ef74d294be4b2ca432fff1968a05940d50eb205adbf28de6e505bc50796d4ce9a491a509ab051f3316b05573c85469d5866b8b9369f6fb16b754bb55e35d22b5a556d9cc9b90014a877a0df2ac369e53644f2961fb90957df11423d3b99a6a06711f4621608298b1e14d9bfe6c6be0fa5d88855191bd3b36b4411a1a9e77a681c9c3e972e37ae52cb1c35820dfeeb716be5ecd8cccf871fb40d59a4218763b92de4d0e60db482f9249c8961db655ffee0f237b908b7391130c00d85141e24be25468240bdff143db7dfa18861c71f98726876d3ef829879a213228d6bf19c4d47e07e47fa640ab13089a4bacd5e41826ee45fa9d13fabe77b984c0d70c2bba897c1e054df2af5c61d815638d9afe5778fbade2a9391efb94ba49f091c285090b47338b56fc02475aac144c93e0ae69f558fd106d81d2d5fc0c1794c8a833c7ab67cc4bd64920890de04eed239fba0ee6470de91cb0b14cab6e430c42c589d6a26320bd7463896186206daef9170bfc1ebc6f3966641b72da51282ced4b27562c1378b47ea247ce2e33d781209cf37857d7b3bfcdaf499bb1b793150bb32d5facb67a2c37952ec27b23e0ac484ff7e912b096460eeb84925bfd35579855d0270ebd6f19c12aa5dca11987ade5942a8f69e9eb877f2a54a7c4b0b427dc2c7e7337d6f0f5005492d68557f87fc9e69714870c150425bac986c24149dc8b53f624688c62a2b0fec69905eb01fe7563a5d976602b8c8a8c3c3a6fe7d40e27e61c0161237f8efc40e50cc6ca1bdc39113cbb80f6592053c393605a0abe8c5d342a76b1beed50bebfee15f4ba36598b742f93bf5da75436aae02ea6ff7728006ba2534ed64ac0127b311db342c1bac4a6c8631b8cce0852a60f26b0a4e0ef96c5b034983f868f1a5914a0a9675837f302008ce57488fc0a96572ffaa98b8e2f82faf181ded36fea8eebf05494888fa46f7065fe3d9c7d36e36f5434dbeaa4e0505874a525bc3f0365f13f46b520c65b2c45fd52dc5a9c3305d1aba755d0743ead0d9b478c0b6b8f107671c03023894f3a9c3dc0f1eb4924d504a01b8843e889249b4d2aefb63938a99a8d5fbe960eadab3f90b4bbd2aa6afc5202f7fcd466d7caeb88b05c8dd6f036b019676d1f34bbeb938cca8df1099e79702d538190c2162fb070abd0db30434ca04880d7bd357e7edca2491ac1cb150db65eb311687f35fc58877637c9279e5be645b2110812bf6dbc50a748e097d747c940ca5a5bd788ee748bcb6210c44fcc191867e78b1d7ca8bd403091c6cf639452f6810712af00a336c558111f535c5c18efd293209ef3706a458eb01edb0ab5feec393924e893ffeebfde1e23b34f6c15f4405b6857ddb7b9032af90da48f387c0c33bd1de3eb7a14ad053f83767fe177f85b49364a701501c7d66f9dca155551aafd6c4885bf9aae3b2b0d157a6de7f395c0aff0adf6fa079de32fd87f42cb55cce4fc59f6aee6a732d753c6f7b2048e79c7e1bfcc7a46fe3d7c1302d378435f5d91219febdc52b1d3628e0d728cb65559bea9e8763119b79822d068bd975f03aa26d6c3f4e057fa55832a8e22d8dfa5c7d1d4f19c9a34d65894bbb12109f9a22a55a19bb7165b171390d87bf1b63ecbdaf96e2278f53243c776a31541f1457fe8367a2b0bbd14a87f9252549b949a7cbcf6b91adac88d6010e4d3f4b2cc611cca7c79e9e5e6061bc5c47533acacbab1277fb824b6aa2f0680cadfefe1ffdbb7cb532d33b8caf432bad5525b10ebcc9917be2b7a21c8bd3a2079f5ce766113ab4116b06f5fd06e55f2e415e93f24623453c00d89cf57f8c602c96662b358a03020ed91f81d4f832f53a2968f927e16d3ffdbeb748aab02d187d54b0f0dd44da4ee0b894c970d653dac73fdadbb42f58d80b685c2845638cded63a036797b7c40def28087dee82b2168cbb6882c169279e791241c8b2cfe6dc7419b79ed9ea03febe8f3391161cb7bf6240ddd98da71010c483ffa242da62b1298de0433107f870f23ca624f8bc5d1c3b22bc1ee79dc3085011d32125cc53621b4a5fdbde5dbc86f78fbc09a5a686650027baf46c7e809ee8cca2fef249996dad7a1199c0c1f928222900044cfcfc7993de48497c79cbdeaa7785b0dc0fb9a1dcdb3f6f86731f0984348c21511979136490bf2dbeb3f13d36ae8b84750fdf3b7e05a60963645beaf9206fe7f7931462496ce334564ed0ef0a6ea18ec78b3c4acdbec3d5343ae38fcabb44cc85221312484e82d28338168d5c6f45c01aaeeb2a8785a6318fdf4753355a52f74991055089c066cec7d9916ff626e1cbea875e0808f4df75be58dd8141da5492ed9e7837d8ed8335087666ac102dd217bbbe7ef5011aea1518a0dbe072af256b0ccb5a4607bbe7f323deaa3e6d4830158c7a69ba8ddaf7619b0f4c4c973eea0822967756444055b67beaa1791ec47f78f0a5f24e39dd55a033be357de0eb08804a067498688848a320793d3eb65b9afa5309cdeb7b6a47d611189169113ef10fb0abf28d503fa2b097731c0ddbe8df004928e3b9d0c9cd296641fd852fef8e5c2b312497d11e4fa73c77089d1c275f38cbed033a0022f620e623429096bf75e79222dc6b268dce1e48b3d7fde1774c0a976a06e4096d3e10e2931fb3d9a7c6fd8365ee6d0df73f95289fb3fa3cd3ff23a21af12d3b809818bfe55fd89e8f0c1322c901673d8fbb692b34717996311d630e477e99054e7995c0c60d2c63e6a329cd936d4b7c9f6f0b633f34432dfc3ec3d91714a8cba8fb999a6d770aec80d49d390f2a9dc694d4276e1802b4df6e79375d2bb1f761480f82171c50d89b50306079cb5be4157332f9e9dc912d33ec8176c268849b18e535be7f04e01d1731a3c1b5a78d6051a4dc13edebc5656b624fa3898e9c67e2439fbbf54dfc713e854ffdf6516b242f0bbcaee0e80efd0a19b6c428f590a38004d0fcfd225c1e02f36d425daa9663e26539b060a13d1cbc4016a3ac64d46e07c8bbac35cd94ad861bc122042c86d70aa9fee465747165fd3a91058cfa3d61dee2f8c6c206640209e187c5cba8a6f85335cad696171d9b58e0b33f50aecb429787ec45da69647b3ca4a2bbe35d3679e2464f25acecd555e6d54eae7898bf25617756a7cecf63da6abd942dc9f52edc942a6c1e6d8563729edd04e36041539f069618c94340bc830a2baac70d8ea428b6f8385b1ef58d238c634276c6bd5dab7ed5185225afd39b4f000e08b251c540ba4ff7e014789d2612d6b385e364f8954a70da2dc2c758eeda2069d1bbcdeb6f105c978465bd700f0fa68830573b17e915a3fa7616bffd735cfcef7362dd8cc4e0149050cc2f2f21d382df32488440b69dc0af3f85eab659ff4c93c649c81826361ff57306f139af3952002584205ae4daccad429ffd88f24e2396644f724e0144ad0bcc9b2bf735c52210274aeec75546a7003029027344889a82cef7174a81621b63b76f5b98793f05963993d3fa801c127c0dec12391e27f70ded6018bb0286a59f169b26715b4fa7d0cfcd6313e4dbb54f2006f2636f572a937cb9cdc60291ea582a7f04c10fb665d0d5b71b8f9cde51787a737d0ec70e149c02e063282cafb1384c243b9b45cbd0fb57194f4aa753ea902c6915bd88a83a0b891e4162642fc876033c5db1677b4e05194efaa172ea9765a4d163f589d39641437fbb21f118c5e0bd0ec7617d7858a672aebebc934bba542bd7bb9e2ef40b153d6b39cf71c2b88ccf5ff256af5b5c11f6c5ebb693ccba5223608a537333829063bd7cd9774bc9b0d0312afc8ac39f52ee438826840d6984e5d28b095e87d5f845c6a4269a4bc2fc38b1cadf25b90a6d40ff9a87ecd62aa8b78a0bdda5395fb2b9e5d56adcb9956e608e3b1e663777b9e9a738161bdfa482231339bcd8604194cfd67be01713ce8f0d435d5e73abba56e251168ad6ab62604ef6d95aea8877c6c08d34e9d8c3472bc2b8517812e5c605042787f347f9b34470b84d7d1e5bfa7f5305dcb7b490b79e34007ef74758e98273adb947569541bb200598367a1206fe8073cbe71337a1a8b8a65df4c7f3877c3ef6bd5ffedd514a9d710193464b77360990d0ec1df7319d1beb119acf2aba45d784f0b2f40fdee4b03b955f12790a998a84a133375252b2d5e84740de869a96bc7146a7794207e09e1a05119256d392ded5f74c282b5d00ac0d72a4e6710475f5f3c275285e63ecc5c0cad929306aa13a3f96cd60d9669d2572305c11c62f717a9f5028d15070c743340124d0cea121c8236cf597d778dd3fb3d090d6185b3cf54274361dc66abcbfe2f1e0fa8b059b9276bd8c83913b47438b995054cbbf2b579178db38dedf4dfb7bbaa80bc055dfb9f9b48476cd084fe3794dd719412a2d9252282f755a7293d0c6733b330aa2980a66e27117fbb42b36b904e7dcd0477ee39615395adeff18c5a4543f4d12eec29c251a89f3f10dce4779703b2cf9a4206b21bf199a24963ad7e7590227d453cc550657b8ea388659aae538e293dbc5c7bcfbb57e5d814cc92fc69578b13a57f66ed20cf6b450b68e0e678bdc198d86f4c368efd485ba3518f1bbfc6c6c4d296179b0547ee029f8beced87fc387c3a9eddd118ee74f99978825b60daee3c8e77f2df1d7f7a06c00b37eaed980258532c206769c7443f99290ad23dd223b4db6b42b195b1bc03751e54df0348db5eb16aed1ddfc8894c52b919c502ce72ad99bbc5a90823e1ddbd4f9999c059d971b6b8ee39642ce2525d838f2fb8a17132f13ad0c73b11058769ba2fdac66cc9178f1aa7c3665cffa72b9ad00dbe7f61fa2c3aeec07ad8729466c8c18202937192281d01458e30dc572f411a3c000c8ce0a8cfd9337a578252c8d1ebce44225b0c071837fb5c18b691373d6ffeb84a8b1769791c071b56bae01c017590f71dc4b02ddd226c4b5367af0b2d4b34ef40c00c203a60ee4a3d92ff1074570b874d515ea4e94308a515aa26c4b529a586cc1cdc594387eab58af0f4e9fa38c4d4f6d59b6de0496cf79b7516e72c65813987687704ed349a226578db8f76a5ac3df87d377874a8bf0a4d9fc93497201de066591451d2bfa1435c2d3d262a9702dcdeedae5ecd7cc9ddca99632b82d15c3d4f96410bbef6f9d2fdca4c1fb241a7dcb4227a9769f6731428ed1d95a22e7b363f1d466c6f32308f66d34eca4f0da8cf99c5a66466a31a65f10cb366febe029dae92df60453b5373d05345d3d390c9ff7543e25e05571ceeb33aeb2d7bfe08f7f57c867f07eb2c57a41a9320cec78edcd68e154f2fb0300c05ce44e43843db3c701fc559a02389e6f5879612087c3e9e04830d1373f748480500764e361bcb9407825af391c257b8906498577245094db66447ca284a2705346608ec832562a37b232a6aac9db7b79d0872822217c38104123e9c423656ffb0c0be83af640f751269a83d98ef966fe3afb4f1b52a34c8cb0982be59ba283ad9dba3213a7f8941c3428746457b27b5a1a8973ef7869aba7032e300b121057832f8aa9ee824064db30840e3fbb562e0d85eeb2be350c21db0abe4a6853661156d17c8d5988d631dc8bea4f7a8c0feb1e57a0dc300f404489137053be7ca9ea4fa7b171196d6af1dbe212a7e1369a5abe1b73a521f2c139645634cacd8383f29a527995f4cf2354ddaa6a6599d3a2a5f7b6d2fab87c5d6486810e8c7fd2484c5777cdcdff184ec94ed2c66382b4fb189d3107938149c414ea75f22ef58aad5f7a3dc4af1d9097c612c5ddad99caf85fc41516a1c9a3ba263108a764d529feaa703e25432c748f284afe8e146879b14b355ca4c36a5fa6598bc443ba068e435daa47db518066f5b4cf9a55635f2466e1e285f7b2248eff826e06bdfd633d9712842a4e14ef7d41b2d53157879e49b928385d6a37c2d89ea1cfad0d064f17adee416fb2f10a3ecb2dcf15cf82121546d901badd193107f91fb8cc87b290e074fb09dcfbacd19b03c0abbed136d26eb65d63a4384bee0b9a7a3953f16f168106fdd75c2d963cecbd0157843f3bfb32308b88215ffaa43452b6487a04184b5724065ae1341f7b111a10094213808156ea6c44546c30328819186976621314f93502a8e7e70caeaad45be9ff746b36e1418a32dda288e52c4ebe4fb5d3f11a98a3a877626de83be3ef976511c2c0326248e87114aeb47e810e30415dc2374aec3b856da3e39c832ae2c536da70976dd50a01a609f57fabdf4650e9a90d9baa5f13380375a76dd924291a197c75dfcf2938f43fbc0be8365ac2304503d627ccc599d8658d3df1f965ebf2244d3e2d8e561737405de50b8bd15551d93b83d0e8414796c93b473ce19d4eec82fbeeff4671db564c1efb11b54a04b5c3ae09e51771c32fe229c326a6f8c91762ad62ed6b0e9827401ba028e4175f187c62418cf762363ab9b7957da7dc32c741a46da3ee733f48e7a1e83752a516336c22ca75278d72273b28c67c1eb1505b6ec2752d7cb9139a9e09c75c30aa3ae405011f3799ceb36a0cb893029b14dfce264419b1ad8e53041243c68c686d97d0e7db69c91017cb2cdcfb1f54033e8f7a83eb4ad9c264d885a1d3b4f858a338429af502514514ef8593205291ce96e989c3fdbf0bbdca41cd0606d34c3f3cb6adf9c4149eeb8bf01fa7baf26dc28c4abdaf7ef5a7f0626183c75383073c4040fd6c1ba20cf9127f1f583eaee6febf24148284b6d60fdb1e75eff2d93f5ba5eb47463c8a10d975d7318ae6947c6907c4ac2c64c37ec93d0e20c88b36e89cd140ffb344cdd901095f48eb955c08cbf3ab5b1b4a7cfdafe49d070171cfd401f73e686cfbb6b66003a11544dffb04e161cc3f08a50d510449bd71264456bb8868cbcbb254139a3a954f87828b0e719b9bdd81f32749bc3740e293a8a2a34db4487c7091525f3f79df0fad9dab50bd41296938c560fc20befdb0ce0beb7daec4811a270f5ee5c5633ac8fd6f7710cbae008a707d9eed853ae92ac67c3ea5070193b4ea350f8a1319f96090ed4a009ac6d2990572ea677c62f6c56cdce490223dbd667f642fbc5e9c655408d696e9561e8f0cb160e8c13e379636652079cf27e28520dfcedbf768036e96cf5c0721a42d8ba5d381701d1660c9799aa7a55150d00d067d9ceb284ffcfa67d2053eff2e6c2af12c3d9f844478fe2a4a8eeb2abb41474305618837ec8ffe831a4a5be1efc085ec57ee39a09fc947b3109a7a0c85093e11ced1200ef5be75e9fac3bfb94da94ad5277864e4ce207f40615f591882a241df9031c2b74deff5efaba34128ab769e24d45c94de79bc8258b5f2cd78dd95abde1ad0b2e6cc526e6234e5274460d56ba29fafdbb1bad51b0b56bb64f7fd0a1412137406691d75842d9f6eed80bcbfbb342de50b83e4c1ceaf151273cc2e7d5510fb7451a655c012802717891c61ec3e35e7d423063f0638496512d40d977a531edef19597c690f227618ad27e26b04a597619d8c1d0468dac979e77227edcb34d7bfa1c2278546ac4cb903ed53a668b352e0c66e0ac5256ab2e58a18348628c8efdedd5dc8d78d16e98fad6b20296ff928fe2cc06902c7810609da34ded34e41e443950989ba4cfc6129c5ffe85bb03f073e1da508ac288932dd267bf782b7b537bc885cfe120df7e0f04f2e98af3c41d29b0e7276c7a75b6d9789ddb57de489e4ab1ffa29a40107d37f6b7f85f11ca7227d5d7808f2d959285ef6600fe94f7e078e37b1c771f7e93c6899a351e02ec806d51e29d940c2a9240cb10c51763b4a066839005d10e63c8fa4515c499ac80c7ae2f6f5e0edae0450c5c1597a81444eac9253a058466d0c5f9f12f7a3ec2a70bc7d98ac51a7f1fa802812ddcfe4a985674cfca3e1f543ea271805d43cd948df9e062f3f115f88116f29e53f473f124fd2bfad8adc671432cdaa0dc9c56fe2435eb064d505e47f9c886ce1e5525ad0c6da109c712a3037baeb33980770c69f97bac29fcc10884bbb5662cea8920dac504ea2acc5e86af974174f6323f959dd61710db93348c38ed2e9c1064cffb78ba29e875461cf2572f8b09ad747fb3f23e2d4873933d043db0371a06eeb05daf7c37433e672cfd92568618c0d7ee8f26d43ba7336983f431ab5118b62ecbfb029a022aea746111fdae0ad74d2d77ee5243b6445538cf25d5d1f5d6a2a2fcb59dadcee127d0232163d6f973fa3523960ae6e7f5d0fc3423d6727e3517214af66c4c9e91d0778e3508bc3778b66e5b8bcba086a0afcdf5dccfc78a988519781003f4996f20d6f87ea93fa3baaa6d6cb80d4613a8b3de5680acfa6531207e153946f1819e0d7e9f50a96edba0d2b895a090f0bfc35f1612fd3badf1935f64a8e6c4b60e341a8e145509eda4d26a7e9cadb9208043bd955ca11cf24693c4309e1e260e5f185c328e35b8c4182d5fb6f9973d9b7834bd11aa5485613d3b90f62e81b21577c974c0fc054cfca2dde36bd308260d894710c314e3029e58a24e7ef3372daf00bc2d711c1edc5506496a1ffb5b144c2d04757e4e978bb330adf58c7936be6b13e39a8f89041dcdff23577b79bd18b961732017e36490950ac84d793bffb0793faa9a6f51a6d4f5543a000355ed9bcfdbebdc73238112c3c747077bf75330b8f3596b4c93c5558109b1b8115029799b59da3356cb506944040324b8fab9841b1e8bd8486be4514fc9b06593d7a5800a95cd808a7c3e5043972551e542e37699334a24bae9430baa653f0d3783e500742201402dcce114e7f91d5b102506e0c2a99799507aca71f0e166feeaa1b739e02ccd4418c619efb07ceffc94d9201acdeed2e4a48cdd083f319686d590a30ded01ec9e598684406c78b7d45213116f579bd2c05e6b3284d31110a828e89564d2a43da0d3d5c20d2a5b3d6360aae74b65aca471f1a3f46d300de7283229392bfe12e5eef85b7cd9bae9bf8d0357a55ac7f5548229760bc5063614dbb32df9fb968439755cc80cbee87d0d2dbb752c863e6eb39f8f808bca8622871ba279eff5540679a5f166ae1b811a6f090ae5ddff361d2be124d68bdf021fad57809bfed0440517a2a2f68baf344274741c73b6618953f42eea8766a948de055dd2782da43d57d5331c9d50656c84cfcc14d40b90929f2ac7ea25edaa9ed800b51e3a8fb9a8731fd0a90587bdd72c683c58d1b603fd1027eda96f55bf02bc08e7b9f40d600028dec1ac8f0e30fb55c794bc679c846ad79e6c3b94f1a7402a8856ca1848b0841fdf326215a36f87cb4246b6cb6a0f4edc8508bac798d3e5e9a53218351d39efc86a212842837baeeddc7642c2b08fabe32d140bb6c569cdb59edfac12e960127ce0789525335e4a4d01d9105ef509e67411dae486ceab55374909c4e292f5d468c1008277c7e1993f257b64593363fe6c708e63060bd5bb44cb83a3883e9df6e7877bd36de15753f93993246e1329524d1bab1f40e6cf144b267d9b539fd8bc1468e45fecf063a52f43a50e6529fdac6d48b5c1f8cecf2f5a1ac1aa16936cd652b22afdd45e81721d76ea390900e30b0b8dc1c20c08ced7854ba26d548ef354972640fbde62c1b19841accccd5fa1f268f84d9016f6b355827b3a63627fe4e3eaaa374d8bdecf313bb7e093bbf0c9244034121097fbe33286f9c3629fa599a580ede5d813164def2f909716a5337b4a7ebc44613897b416fc0c366d805a6abb79ba6560e50827af3154a934d82d3999425884d512bdc80002bb37e41c551b316105dc8db01e79b256666fa503f400fa707a0c136f948d5b94e14969a6070571bfa794976d188457f03a3f925a7f607e03a5f698d6ac309292c3dc0b74917d682334c3aff1d589250dfc64c0380cb053c47284f10ceec88dff9f6482c7791f996eb3283c778c9049a2fc12db54e997d3ec7f5a7717d87b5d537d773a462321bc934d897200ef7f28b14a4f8bd40987a54295fef735f3830235e302855145f79bb1a6e9da39764dfbead8069c3835295d4602a3496e3339777ec90f0eebf0067f9d556c6d32b140906ab7d700c2dc8d7fb34f7981bf55fc9be6afa230e93266089df4a4f65330ed03d7f7e6ad02e9c15c157900cf33cab029de29f6d6b74923c6e02f01b9331043d9b6ab5f19e25e46da436181cffcdff7aff0749c5be7bf0bd9de5f9dc34bc088155ef806fc29dce74adce1f6f3fd9bc3de3935827d5e3c7f578f2e11bc35c412bb56b595135cfea26ffc25948c74b9a20740c9a8a8acdfe396aa63bc316df7ec41516d33b2965e3bd295b9b28b23f5caf797ae785861fba3396afae549532c9aad525f339ef23857b151e9543cc492174a2b619501bb71bf628ad679aec4bd2ab66463fc248930ca1bddde736b7a7c72b21ed2b0660b04966d72f4e9af77562389a5d739f11eee555e9925ea37190bd63d04cf8031995a1999eaa803c585554c49445ecae0c3e6cfc74a54575af9d057f433c107d8464ac9df108d7a04a5e288b70920b7a6c52b4be27ebd4dd61c2ce3ab0a66b78486fd0ce39c9efa49947a2688e6051f1ac3e74b7a7dcedf638afe34480045fc537f44ed54c86c6843546dd603a4b0490683b6a2a86ebe780af14fd86587e587d262b3bdd8f528d78433e40ddbe2f45bcf812e9605d556c330cbb3de283df45835a09d4d341705c8e877f89145710c2a7c0ab65a66906c665bf533f663512d644f2a8ce0dc5e38546714afa23139c980eae08ad55ea96aab489839043e0d34ab87080236a685586da68d40bed6f20f15ccb718eb37725a592371b93a3672beb3887781adce87fa885f12dd463169fcb80a3f1ba4c53a64bda383a25b03a160c15fbaf0cc4d984da504425a8f33f7ffe9c102f63594fa6e67900fd23941408f7be7aa3f6f4845666ff21aca755131ea6c404472f80320457a3c3aac2d1ff4fe534b294ef52eee03e0b3d88192e172d00b2d4b440d9f7c15a36e2d32b33629f94d9b35ec97ba62eaf66d096e428c636a679e6a67de2dc19df1478183d5260cfa9eed298fcfe4aa94cbfa2b1d0d0be0baa74e56b7b6418306085c92953021b976f8f7462bd046d2bdfc4cf1edecc207227b5555c232221513b9ed630caf701f3dbde16ec06496a43d2d717a51d73c99e371ba3fa1dd1836d4b5aa927510a4ea1686d3797d451b7a97ae22927ab28afaccf1aec05a4d2874af77e84e55ebe00912599a1d6703f553604a5762808016391b31ad31861fb73ee18b299dedcbc3859db8a14be56feb00d5fc9e477b7dd8400fa3ca079a6d88b8dac0aba997ad5f35fa42498e9fcb9fc3ffa269ae789b468d30f3da28bdc30b90a536f6fecdd7b60d52460ef879512d8f37c5c7f6f4aa071659251c6aa44eefc054cc8f33f849db49796a2ea58c8475586a3d94c0dbdbf5d926c48f7aca6abda30c22cf38f6955267410a1e69f332f7d19f26793a654151599d0390b490b7ea0983dd67a2561cbd148fb1a287631e2e94bc3a16667ab3203916ab6cc703f5431e9bf2fe4043a01022832bbc62adb69ebb8b152fff59dda9f7b6f008c9c653d389682d785a2d9109b8a9f12228bf301aedc69632a81a6c82ebbe1fc0d20c13dbe3058086af7825378c24f61ad4492a6a2086dd8c45ec35f8946b5bd9802691cea63736cac719f41ec4c911aea258496db9387942067261d5b313c031a854f7bea4e60f597ed8c61d1dbeb9400be3b39608b5a17ab953bf4eedf87ff9fff18934b4c93aa92839324cc5dd46840a637f8a5b196985ea856e07b9a0d0cf5541e947c569f3199db5651866da85f01ff857434ac47e82502d5f2c1628553db8e2e0abe7ff8a58f5b878eef3600cd3836d3a54af5ebd262766ab43c181cd64aa03009bd57cda43f634e81e50f4464420d5227ba43f1e6c9091365aee039bd20b5a73f5a791f24c5741f3bb3d23d695c3ca4edb056bf57b00fd68c931dc5787f733e49d3e58d037ef5686925cdf9a4bc1929a62e9b9dfb58cbaea14ba530728ae10f998c8b51ae040a1d757c9ed0ad03d7ec84f457876dd54fc42dda5b35cca39118b565b81343fe401c84c337ef724d7852c3043d0fa7a948edc2bdc649e2da87820ee96ac7482c35c52a939c32f0693adab8ef798826cb0f8ddb7813d6d04a9d97cdbd235499ee70c86964fb8a108faffc75dc0fdf5c865875bcfc33b94c4d85a6a62901bee6e2ffcd94ffe86310cc4762cce3d4bc36c76f6f80ca0e16533cc70262c86ca044814b49c21b251adb97571b8042a5eabdacb29d40fa003f052f7a3006e9bca1f8a36e49fd34f1f22d4710ba746bcc11e341654399dd4ce65cf798e24f806742497a2eaa6147ca98bd28d24461d8a03cfb6d4d04218e28532994ddec35cb7e31bf8e768a5b6f53050eca2e799692cf4c97173eb72fccb3daa6c8c3bbc88721fff102d4e74875a0a0f2088be828f67ebf593a76b007d413eca1535a9b04f2adf5c3cda68f1590623a2dd09e0dc1a7c45943b077d94287cc6454b8a2a96ec4d11e1214f839cc8ad25fbc78af76eca2063db3a2639c3674ad027cb7a2fa0a0b5edb661fae9c7d0c7309e13e7ec81c3bdf9d9ae3cc4fd683dcdd76872a95544a6a0ac444ba8746bbf0b59f25aa06dcd8238797826d17baf19f943defbd2bb02e7743b3f902f89671d241f4813d4bd2c43bb7cbe0c606efae0f966dfb14777b9bc98069e2121554095709218fdae36b74b32be70692e66325d8b68d997a8741896c8d388437ad4afae9b2fb267686275a2824965947b7998f4e4dbbbb488f6ccbf931f4e51fa741bf9a47d258f470a736ac256612f2c090e938c517b089e4a2b57521582d4ccfb1f45792ca0af4cfadf2f3ff5d404222d8cbd994a3a53c0f0993064f1fb0ab64b29214b8bef6e88433fef3e06e021d3e9a6bd76d23b4bcd2699021a908fed0fcd76eda7e85048c7efcdc63965b7c217e8944655a6ccef864ae36c19a3f99cf2f7c5c9889f127124f6e8519977294b99ccbab52df61b7fb3cf33c3f73a8630514d4e08c575923b56ed5422324a31fed81d3fe2034bf33a1ac5bf00cb3ae2d99cd5e198124efc364d7da7d2f84cbd314f0517b3171a6c1d1510a76ec65c23f0ec5cd6e5f6f5b6d3f3bf252bab9166ed1882a256bea6996df98a04fa2cb089f856bce41f247ba07e1b928d0cea29cc8ebba1fcc88d24f874f6af72234aea202b35082aff5dab36c916eafd6b24e566238e56f5ded37d9ad616fcd8faf8b7be32de5f149e24d404c0a7cb1adeb0cc16a2eaab5f26fe06bdc246221ca7931cf131d756a26b2a5e89680993a684f93adc127ddbacfafe58fa3dc0d82917dcc17dec857c744a9a450b4b191b841abaf2b9e489dd31baafb5738cf9cbab9a8eaf38305241e1e241af5c3ae2abd4262b0e2823e2f68bdb42fe5e7fedc18e5260958994f798ffc6807bcb6fddfcd2cd16561e87589e6d8dda9f7e8386981fed96e294759f104f45f3e09c196237c128e23ad56b86be931af0eee8763d258820b4d36f8d5873f52ab44b2a926d2ced0dad810b3206327e1be3ad293fba8b20413e5396fca54374cc1cde23f40b9c6534e894b21db07b7776894e7df856a7c8e5bb8de06f18c0bddf9b9ef956a2dc9b44a6262ef129cad05f433aa9373420786fa439ed9dd9253dbd59ded5065abb76f502982ef22a3633e1ce38ac7e3bf3ab553008cb49e58123337d5c32e04ffd45a934e4bdba5ae55ac3aff7c741668314b5e7207ff3cd2b4224028933c98ae1863af579df30b9584be8cf8f10865c58517ffdfb2ae4a4301ece006079a41e2f3eeabb1c551e54acd715f977618db5023196031b8e9f0edbda03d8cafd9ed04efd9971a9fb5547a40f75b7cfe9096b422f024244d87e5fadff762bdd1bbeccdddafc9bc3d952e81c6f09c9fc92959cb08e6ad0ed5d1d09668d93c20e188e86f138fa0af9f7dc9115bd673f22fa330be164f0324347ac3f5cbeaae261da936f2059a69e0f27bfeebb3017b10ad186339937206b674e7445a97a7afbdf4be690b1c6186a0f0eb1d484e7d897df134d2e14d258f0ff83b95f6fbdda8da6f16034e8586d8a811158ec743d73a9733fb70ecd40c58d014639338af841dfe6f5e043e0e0d3191e946e9c643608abc1ee15dba239a90fc335af0b01928ef6d208412166d9fe544514e49d69b0b8e33fdceb4ebca13fe5d33c584202869a80054a700c9a9fdbacd9c46642603dfba38361d8f1f07f1ea55a1f6497dd1795ad87320d5b9ba39d45fd69b11a8fa7cf01c92fd8d8bebd9faa32fa4f132e292727556b3ce25e6a871acaeb9ff5375ce04bfba8da5adcf6daac1e71a3969243daa53fcd2eb8960e10562391be34815dad670ece1f5e7bbb1e68b9cfb08f0a4b154fefadfa142a5e9d3eb0169f9f0a3236619288d3286d0c548e8b4264aeeb8a11fc9394b7d5e4c2e66fedad68cce759ffb09351edb9cd73bfb95e2e20dbfb84c96c759022428d4387baff2464e13384b415cf32b514c1c2c065df32592c3091d2c7242c9af5471eeb2c2836641c4dffb938ecde95d356a008b9c4f81e163ecaec7a558fc4f9712069bc9d381524fecbbf3e562d251869ba3769781ce276e6c83345fd4efaa377aa718d284d63cae99f30490d1db6e3617db49dfe8677de0f9067b20508a7ea364a96fc63f39d09466afc6a46b3201d8d138acaefdc70718dbbc0d85d6db30303b23f62e4620544f8f870f87b9ff89855146f4739fd6b19cd6c1b695b7c90e6f23658e36256a961f7891eed66b41faa45d2bd75b0deed98be910c571f841a73146829ab99dcbcbd2c3a8a10c2ddc2c9b82491b5f6b53faf49888ebaa86dbf68678ea90f4ec3d18dc17983c5c56fe3a56f60ae5906f842bfafb85575f868be268fe9ce21d1a074cac4e8ba267895f44694db4a6e70fb43d3cde1624655f92dd8a038c3085cd62fc4c29f2456365c0729c68d1e89a5c4c140c39e68cce910aae53a70053a275302f2b312cc2b19d89571c3f68ee6d0237266c13d888f3e1321b992fc92543cefd3bf6f2d0a1a1bcf8483e43f8e0c10d32d16f0cfb50de0c853a6210eea864ebf0e3d1c0e49cf857619f7b9022fc8d511231fcb3163cc407efcbd3dbb5751fdc4635d58ec8910e502f3f33caeea8946810fff2ebf510547562bac2d0c3b5adf4c81f8aa1d8d777349e5bae329b54eb9fdc14d8eb707461739eac333a0f45441e6b314abd9c644222b472f57b511b074e63a145cc3013621b49cdb9fc999e18a2920cad7df030a0c821860a2fbae0f82d52815a309908d17b0175ef3866bcd0ea81541984d9732fd0efa965fd4ff8f28ceadf30ea216495b66202da74bbdeaa48055806b584a495e91a069b09b3296002f2020cfccd8c45875d05af8b24ff422ad044947224cfac66b8e2c0e0d73e2290827d2bca379885e2f30c6937a06ae7a6cc62712e462f21d74895969f65b9dacb4a6d5a6642935f4adec5667f5c9658a5347833d2fbb82947ac545a8f29b7db67ed126b28f06e2c119777f6b1cd2fc1a3d70b870aa490a524afcbc45c3677dd4f34a954bc7fae7218ff60b76643431992da536107deee58c61d15c99c804e18b7f43e481cb95d9b80db7276e751cb8bd15b0f98cfc563bbe0d821a6c6e25b8d556c1d6d4c1d3a2ef74148570ecd1001cb55bac9da3b529ed632b667960db964ee032894185e577447558c06e33bda30d2a91fcc951358c66513f055d2230e07fe73754267b61161725c8c7d0dfc605e4d03e931c14c836c703205bc0865b46766977fe39ac2ac59c6d2e47aa0251253e4d369450dd9d35afb002d306d576d55fdc79b2f1455b531cc96fb82cf7b9a63cb79ef67d813316beec845c2492a2b2ffa4606c2c0a2a2a29cd551b23623dd22baf896453789c0f511a30701ccc4b816fee8d274df09a9c73e421e1812a9c6eb4be55a917869eecc556d5982a905f628fe5323161e4a94569d8389406505c947c950acfc50469442092db145e3c44a2640988a56f3f90342e01e557dc22e89d0a180e648785d3c8fd0390ebf69b1a3636ee5cb05a9a5c54828e5d30c598d730a221fe265dd825d616ce45b7289a5129863847fb835e0012165fa0033967d8ab6c2fcd23ccd7aae38de6147a80e559560f1202e236a1ad0f5ed549084415087cac8f0ea7f2ba5fc04dcb37d992f96ab6058b92496b797a0c3386192f59345b8ccdf09b9acb140645f0687eb0e009542e891da957fce798849f1e5cbd6bd1d8c50677bf1d92114b12c312a6baa88f0159ce5c9047dae8a7a5643b15dde18e42678d46c091dedd6582c5e7590dc265a43b0ac492e09bd3ff5b716fb2fe42b04e131114a5baf797b013d3b14a2d4842fcbdb4e2f48338abe01d09608af75465a4f54fe81e7cdfd335c3c2a981a0c44faa7b6e30a37338f9a1ed3d89ce0b35a2f03a84f6933d1a19529543707ae326c32220f9c8681f34443a5fbeab6e6a3a499ea3c58398e9db01144aaf2c55736149906ef8797a7cbb69e8268e7fe1155435292c810967a2cc96b5c08acec896313988e452b2ce858877a384471c3a621839a9ed8630f0197f6513e5fa5470b372f74fce61f59d6a8052b6fd23b6252bb4ad6e10679871feed1f61a698a31b3358bfb3d94a27f0bc50c991ff3bc5f8f3ee9922bfb54c9381ff6a2cad2d5d541cffadb3474db27bfe7f4e578a405cdeef5b0caf048b7381a8cf92a2f0d6270c933c62d209865fe67f3d7d40300729a41d535481ae642bce824753d0170ea60b297cb74479f2d2d12695f4f0b4b455104d6f20aad5d168b7518413585372230b0d0b00063124503cecb8e2738e6d096c0e0648038f4dcf85fbe34da48eff63c54a7315f938f9510ef07b722ca27167593c700c38211d0854580a8ed86f136aabd391a4393aedff7b7bd8c4cf37271e019e303b3e4ed179d18ba8bcd4a411e8ab9350872ff47254e17331925bf809065d0b34dabc846b823cc5a9b4009b6c42061168173258aef42e39928056a960f5faa73383afed48239dd2e4f89d476ed851c86404f3afa96746ed0cbb493de6c7ad3de4829867da4f9f6de077f50fb59a9a462dd492687578367726de1d54f20e5baf744d03792c6f06510ffedb64a246c3dcbd1c8110ab16ecd67e52d04a9e7e85f45e711b4a1eb06347bf890b6c33b7919a22bec77aab1c1f983f594cab534bca8de6481fbdf22e763f17b7e52e2dd94182ac3119697ef44e28825ecf1b1554acc7e1d3fa3b2e4d3ab56b1bfe7f88123e0847bea7e6e19e73abc305d508873fccc6f6745783bc90b444ef1890c43aa53bfc0a7d265ae7f93005f1e3854ec33b2b6ed3a8884b70fae9bed4de7f8fba7f6dcfcbe9e5441e480c63f805a9ea9cd5a41bbca2493c204d9cefdad22580b3a437675b16d081fdb4a9668c5e524ecdb1b721f1557925ca6bc81251305d191c31d77dd9ea4d6a4ec47027be89a223352119604fb9dd969878bb3925de747439d7189b647ba4dc7e2e8125dae2176f13625c795c0e8db5b83a8d784486cb187f6fa76b6ea72a07833dba4b0896b2df77baac24d7cf76358a0e1adf7e58bf8fb5880f17482416af70be813cd413ee2af45fbd270087dee0fac99dedbae9027150520b7a80f459da8ee416ab9de3d6e0764fb22f2575c585906e6239a8ad5a128d2ce8ec332914a5cd6d62abf6bf4a7601dceee7cf73ab0d3de77bbbc2bf8e4da3f271d51b4bfa344b77dd8a5dd86bf30bfecce13d93e39857edaaaa73283e1a3265ad8cff2007120651f247605b5820f9168bc360bcd0ec13e044cbac8365f9a34eb7ece41295722e476d0f1b6bc2239f8b143642082d75260964e1b08b1b07598d533c1b8f39f79902d36fda9967babb052e37333d7f27f0be1078f59fc8c54d9c2e1a35e29ca766618d3b40e0024a66bd49f4e37178dd8712db499da0c445b71ac558d61c4e787cb0d50d59868dd6781073a457f8a0d87c59046a9bedfec0a7d2cedcb891a4628aad6db2adcd7f16f2adf2dfb7560b708a1ab615ca4bb8165f5e27aa27424b103658cf03fbc900ce4a9ee4e95c3bb42d26f75a44c98d0188402381f6fd79b52c5af6c61c58bb19498dd2013e417f85234d80cdd43d044cd763a1aec31c42b90855543b680a1fa179beddcf17da22500569231e69edcf11814369dd8a56c0d52c7645be1b4c723be479325019d2e73cd7e0f03fe853ae0242ecf7425fdc407a89b76186d7210bd2ca9db25266024aecd0fed2eaae90f2d5612ab83dfcec78f4e3b0995246215ae1190655fa1a4a11ec507d9ee8321bbfeeb487bb4de694e715fc64c65812b1e01b141a52b0947115c2bb97598c02c7e5a0c2dea7d1708038a781924a7c3200bee88627d6cca6b1fbf74bd24d7f38c51473aedf3ce4c6bde2ff1cb54fd0f29e1c06278c0a259337eb7cc2daa7d378e12a6aa847ee328d52215f438d3faf8908fb0d3f1e4835b36bdfa992a15115d23b08f0de02c42ce5d83ab24ac1be7bb6234aa610f8308b69e61fe0fe13cc5737547558562845280593898393d16bcad65e23792b1283d4909d48a8838465468ab861d6f290ce53a0d61f40fab9f1ae1bd79916a394243503e85eb6c0c6691abcad58a5cb72382b927d81f7a2149aa1288eaa51b8f10fc1c3797c28e56ce58df585aa1b8046a7b6b2483a62236b060f6c6808ff1593bbcd4c57f3592079a447232763c8e194bd28e5f8b04c08567283ecd71936f6d93d91940d9cb718d615c8a028cfeb7acbd6a6be229dbb6509bbd5fb24b9003fcadf12667e9ca23763c0cc606c3f0fe2778f29fe5b5e605e4d57033339175bb3a08f567efe88ad8df2d58b0f1abd0681ac816caf3423b2c42a0446227c6eff5a70bcda7c794f5a348282539e362ef961d99be20c6f11109cebd8a01d4abc8241f3d93256514c29fd6dcf06960bf52c54af3c5b83372dff2f4f910a476e421d006086a5b3db12ce8106c69843eba8c6e9c93cbea55648c7d2a805386be04b1b32b02780cc1e0c3050117abb44d009f9a33b15824233d9b6ff0bf5034e4c508cb05a6e5f09e0831e0325b14991bc8cdeb49c8ffef1ec713e96ae586c595e4557fc7892990db703180ab4268a1828de9d13e967151976bb06b8ea4f6c5a49cee682d7a7590d5914552fc4733d35f7e518a776a48ec26b3605657cd0816e5fbd299b37dc46a2c356be019de0f4744ddd63ef1bbb8012e252df9ab2c973ed8b8213f9b387dc596121f62d9fad72e2527c4b7c5bfad1c7ace0eb19b617990ebd041cc0693bf9bd99fa86234cd30d713fa13c500806f14aedf9cb385b14c6683ac7ed3fcad728e99d1e0c2ed274cbe79e5a53df84f81650ac9e7d605e5863c9264145b0779a43a8b6799805129a2692cc915c3f4c09c61dbc1773926318651b9f00f5e801dc7113f97c14e715192bc413bf310c92fec1d89bd0c38a5f12c6312cc5096a4e6d16380ddfa09020ff2972de05b7a3f7746b453ddedbdacc3c594537d70bbca94e3aa46658d820dd3446e1cd64e91e319a2b3c0502fd897d65d613a57d9237b43e6d566079e74c1a7cdde409218cd2832953cd2ffaf2d66ec00914e4840946d1caed9023c67b5304a3edfb1eb794e63698b6e3bafd06428df905dc80455fe8dc002f4e0737b74ec85c6e5dbefe2654213932d456b007c36b8ce0d92d632c29b6a4d515f9341820e44d2f175d6032daad52aba3437ab4c647163ca232fb62bdba5da11aeee8d5bb8bf1c05a26fad56416a93335b7b6c2d3f319f37dc0f8c92b8db53d9cb7f01aa99b16bda91408de31968d6d1d98bb23e0aff62091a5d786694534370a1137ad9b4442d711985716e2326214931ffdb93887e5941a2e35e4ab280482745a7686ad4925c30fb22d7f194b60b40faee7ee17b3272a33479a611bf98107fa91f65f8941ffef4a71f80cfc8def822adb66b26d4dcba2df198bad494cfeac456e05a76ef7a0a1d2f962ba4cef0ff28cc1a6283aabdbe5c53067873a794c5ef37b410ac1ebe2f4ac3b056e2a35c1825e6bf76bbe071020c281a5effbdd148d0ce7abd190e85d739a4373389c157cf93a744daeb9ec8a4092c3edd71b5a28e8335e81a3ef94c7252f42077326854d0d9d0f7f08abd23256d44ff45f8defd6435569a57bda58724e811d4b9e9c9fe97924a84f99c49736ceb73ff95dcf713b00c9edcdb7f6b8256cdf1a173a92ca345f88b492c2cd2b36ef8c5eaf9ad06d180826df6bab5d3be102d79ad9419dc1f1a4bfa27f8bed340f91b33898bf3c3b58177ffc5b5959e55a413a8d8784813104d61731284c87e17b7f24b80ef3f1c87c8a2f648433dfe813d5ef9150f665da21950ffcb479a7e635e29068f51c98d88a14b056ac6ae3489360f2822baaacb0d01d41df3a70c8f1cec0b8145f2701ae7234a316f9c054a4aae7457ba9491da8748e4ba19a0147119441a009cf088286bd51abc092d7aa0dab350a17bdd14d3ab4a62a91c7e1066e77558e562d8270d87a8a2c019caa6d7f30c7ce6a2e466dbc122d0cbfab25a0c3cce4dfadd13a0c6a84055f7c668bc4703b81db410239de9027124e24989dfcd3f61c0f994798c3af69b9c8f6a673b1936900754da8e77ac71eef35b2d15239abc6254931eab9ed0a67569e0ac0cbca47411681c362b79dab95442b49eee5dc88bf9db42aefa9fffaacb7b8fe2389dec2f77189468a28fd3e708d75c79757ab172ff9c062a38c0d759f8c9aabac649e43269e39cc7d5fa2503c5715ed577b25ade2afd69d74358df3c67ab4425b1c56a355d338112b2816490214176bb51969b836f25d9fe8e81a0420e1534ba444689e8ab4454b4beefc39a47259fa6533f2c58402bb005326ba9960e76a93f4146fca1d22532953d5aeb28f017932599ee00dcc4b68ec6744e647d8826ee4775aab279677c47741a09821e68b1b9796408a1457e957133f44cdf219b56b124c855ed27c8efd75532af1a8d3c6078025ce14b1d14b719430711ed92675d1577763eb7844e1a1214580dea3f23e52473b3cb3602fc8b03ca6cea294f91aaceeb2825ad663d123d97f3fc90af722652ef563d7b9d1c8cfe31e3e55bda4245ca3857fff24837d66d08ed9c685c13259bd8547407061a72bb935eaee03565d2007f3e2f319ef6ae5d16451b5d6677160f52a2674900781018ce8d36e5c23c9b5958822a7851ceb0359cae027c8151dfb20b908d5134ed55bc9f00c66af33192bfcd63befac17808722d8c74a1eab70ea93e10756fd355dd69ad0a83e77f9cd7c94e664565fd690a52c21cfe66416bfb29ad83b75d2c2bbb0233c998fdc9bf0477ed4341f415722075270c64c659041a1ab8b07a1c1b65790a83331cdc69d4e2259c4e82030468bb32921459541fec0ddac38ca3c031270c19a7e55f56a636bfb14fbf4ebb5784f621686c0868871c046676ffb1c7bd895c4da1ba25f240a9374ea3235d9dda49f7cc428bc7f61792832ff491e5f0ed20b1e7761dd4360e13870d51cbe669c86a5b211fa72241b68dae55df1980e0074402d5fc17e3158b1a1038bf805bca3ef9df3703a530874a912ff18664cec3f22fc5c1114f2af4435a33df98c71b6f76844eb098b736c22ec86639e71e389d48b927d7da6ef812ccccc01880eac50ce45a35d847ad4ba4e517e058e66bdbe0a5606f5e9c70fca3a7d9a9d63cdbd15d81f1163264af617ad8035bc9aa9c2c9f70bffe2454fc526d87b6e30f86ef95baedc001d68019d444c6ea445857488ec98fe488407046feaabedae666a659df64500b285761348337182da2d220350172972f0d055fccf97ba55c46bf54486a928cf8024342f943271cad5362e7c03db7f85a6c99f14aa8f67e398b7c6d18cb674d942f77df9d6ce26830b6c618e678fb9089ea61d01c4ba4d66dc03d599468e6d28fcb89fb19ad8b27d2fc83beb11c6f5135d0bdc7a4b32b1089825b62b709cd89226ef0a7d48f23f49925bdf0fdc7c5016eb2744ce35da4eb3ab75adaff1d7718421906e9cc21887b801c0acd40e2ef3c59ebfd1f27e46807a83dd6b548673684f73a1a4478c36ed2492b765402b8988648413196e523ac12ad9d62e8f6aad875a3c89b8f5a61cbdf6d1ae131c3b4dbe12382cceae3334ef4ca924f3ba6614aded111bcb0b34db77f8bcb7e051d545f1826b3672f533ca865c1cf2a6d38b8d5372d19fe5268ac0130acd7fc8f68edc28efbd771b3a3cea697f1608ef57f9838aba7769510a58aaec1fec009bd43bbfc7b066dae5af718b16d1ff4e15eb4e65c0ba938606c6343f3e5086cd7b8785319d794abc9e56557257777f4f66be31d36bbf9af55b5261e2999c15a70e19a899f8d7fc5340d0fc2e88c175e2dcf9132e6fdbcc6f785037d0c7e4906105ce3d7384d81f30b65ce2518ac8e25d73cb250e0c912c317c60be64ef5c83fd519f5b18d5f9e47970db4a818a01b687f3b20de577833f13429c7113da0b4d21547e5ebe9b4a1b24b0bd10b44748163c59398b240021cea8cb00cc7fa2bc761f2ed24ffa08dc6ec68595c7d80216ea56814929f3168cd2dc1dd533d651135c3c8912196839166fbe21ffaffbe5717a5f5a3343a5a05dde1ae6e55f8f66a9f8a79e53651a7e4a676f83a2d33d31cb37e285b2fcb7babff7b3b9142d0af69e207e2a9ec6798f00b5c8b94bb56b0aec832df50830a6ca15ea3c36cbef46d76dc30be0f73c6c4893c71d98096cc0f47fdaeed427cf77aced38b01ead96a7c37e994e62edd5aa9eaf14507ddd89310286481a51719734533914916d4b7b987aa7442dc5a1fab86f781de09a98bba78cddda452b2d888dc05e84b0ddfc284f284f2dda3e64402ce6fdfe6f0ecc11845cfeb67f71446f6a80540affbdec2b9abde429229e3a2d783c182b8e3f467d48f1f1af4a9022e9c10f14d00a360c4c0b5d7e2ad374130e19bf2b76acfede3a5f3e515a437eaa81ed50d834bc2fb1b65decbf81a3406b0131189fd7cc24cb11e8e0ea687942f328e8cda591d7dbb137b7e7443209755cc03ed696349733756425673e57bf7abb572f650b42d7f3343f5c52ff37f651334e04c09b2c4b325da184349b791a2934a06f00e39cc3369ea39e5377357430bc775f6691d8a913e2804bb813088d6ba9facc4f88dd56505a632098cef9f4fcb8edfd173a9cd00b71c5a0209aca9e76efd6606f63abcbae1b42f219748a8b4d542baafd8f8a109d24e0d45c6625b1d728f39d73b2bbce89e3f0756a7765a258ad04abfce9d30ab55f7c72ed5b8cde360a12958d8743955f00001049e4f56dacc0bf573c84c87b9d96effb161f365cf81cfc2ab0807b53d6d4d1a5adea1d1ad845b136807326b21bb85a629bc3439630bab062510f41f20042d745b2708fb2af2df15354504dc25b82ab1d1a28b165b09c6f4c5955d4b8988070c9817a27da317eda15447723f27d9e782226bf48b06b8559c0ba3399394eedee726949f88c1979ec023c172ce5a484493fdfc5ac97f87c8e34f4913924e999f1f6ccc32c9c7a88a0612ebe797bb6964572725f6232a1a4cfbceff3236af7f04b24cba78a0d0df6f413bec193f46f5c28d349edd3d9b3d712127ca2e8e5accac4239bdb4998d9cfd528ef9ccfa5e9df3940b33d848f708b347bac78c206e5c69ba90a1013176726e97119727ed1b1141eee1ce44c045fd06411ea795ffc7d4d393c14d4c464e47f3427f605d79d233a06aac817beb50b1410fc18f34cc094133b8785d49c30cf1df61ecd71edb9738f0b5c666f77e6077182c52ec45a6a674507ed65bea13a82f42f85ec66bde0daf58a0a5414876ebf24e6159dd41cd395c949d0af150d766763cbf6fc78e897720c7e58d6ddaefdf0aa8ae580020a3095d5ff001a27bb68758bf44320514cf79557df4585796b27d05fdebaac54b71190991048feddfc3311b5a29fed5b461dedf0099f45a81490997921e95632e6386c5bd8d999aa12e0ddba64000ebb739cec0570bf128e9caa510a5a125be3b100408eccef3ce2808d606001f05a5c0b5e6f552d0020f115ca22444ea9b80af888444dd2416fd81ffcf6c71daf3bbc2544016007f2d35e83cc1bd8e88e924941e54cc12cc1dcc7d92495470b2ce037767d6617264b88804719e46abcba99b201164e2c7a39a68c47be96548feb09d82cba73155210ac9a0d1f061bba92a405edcf40ae4cf3a310880fe1767b649a515b6c91476298f0e7ee2630d3f2caf4e9c369092b60d4a10d503c196a9078a95b537025d0ffaf523c9acfd455fab47d13954ac614eab9cfce0e787e0160880ad58ee0270bc493647be0cd1a6fa81b80ea30b89f14c454aa0571971e9dfd845b027d8ccb152412dee0038d57668b746966f0ab0371ad4f9cbace7bf11bcd6fa5a3548aec5ababdff576db0589dc40db7f93960de05a760baa58ed274743cbfc4ecab11ab8d34686207944822005c677f5ce504e5e9c11af3b3ff2c2631134e29ddf858e614badda11ac84ade969b65e326a3e3b021c2109add666cb30cc75ee543fc0549d7cef4aff4a716fabdcfd4221c0a0ed0c1f930ab3941cb18e729fac7808869af7533275a29ceee67dedd26d755ce79db278d8ec6265eb8a06fb6b1e53ba891b4a8cffe019fbda44ac9efd502d5f7e28e9a5b6f274b2c9a10fae9fafd6c304b61d2680e55485fc8861366f3c80884481d9eef59fb404de854df7ded6543f0bc368c14dd3e531c7f7bc47f7b67c3066bce0e907b38631dd79029adb0037759a5cefa93f4d52a947c7954747971eed844be0bc2c1f6a1398599c1b5e814a18ffa1b803c7742057575c2f6eed605a26cf1610a5a2a0bc976e15a77951831f772a6d41df1f66e55b968b5593fe8a0e051457d306cd0d018ac3c08a27e0facf22e6da106bcf70442869ca30cf110c0259785fe710b04803cf84ea929fd54a40b715dcceb423b225fd6d2649027408e69dc7cc133e67c061d27db5c7d4ced013164eb84aaf8520ec885e1e3e9672efbf113da969e54a0199de8bc6f7b08945a6dd9dc7708d44494785e4c237e837c08d9f50683bec04214c0ff9ab5578ecb0ff285b3b99bbe1f9362255843a78f397e8dabbbc140aaa740922334c98e88ab1021cd982c8bc1f873571597cec224cb017c939c183fb80bc46610cd18df754cd74791341062d9d10b5ce0e3884fd1e4f948c65846e96fbfdeb44b0cfaf41c41f8441a226b4d159a557558592a55de7659c5ebf374107c3fe694dd6abb8b322f3305c707c30bdf156fa2e1356a32a9e086abc3595d4824bc2d845928d297a3b1939f62e55982a3fb83f791eab97b3692d835f44f2713178c9ba7e8324987b3632ae52fccacb56919cd3f763c2adbd41320826f2970821418eded2ed5a7259993341ee9ee9e729d1f9ae8e3f0a27a653903334e9ec0ad9cb04f872d1f736f162186cc035421836d3a1e7567b30157b2398b0f8a938c39469b9f4a94e7ed6c577e7c308608f07426cf833f19b866a612a22fd2a9c7de1be34e1f0f7bd0387683efd1c96a42ebe903417f234e51343f74c2c2706f2c64c1b70f6c62bbfde928dd56b8b1ad5e6da0b2d364f63bd6eabcf35f5f004d989a57de0bd61a48d4ae7b2268b273868baf4c5d3d712d22e123bff060ba15140f8c272b5df04020c94e3eecdceb1dd6647db220a316e5a4b747e441fbff3abb09c8c5c80e7556608864d25cf32d5cffe7851d48e5f2e33cc5d57cfc1bc5a7450f937052f751c520157c0df625aa0e450c614a4f28f3473a90fd322b9ce37dfd4e2324e8ed689d0f8e8d2d67286241db118e1edfa9eaaca836ba6f779e9e651489c906bc07bc59e34b0b572558435000d85e379b2709e93522aee6d126dfdc864034682283349cf5b1e55d9169005c389365053dbed1c92e92010c06a4fbfc3787ff3ac1ffb79023e765f831872c435d04086443ebcb706020b24623eb168b5b922aff5abe4fbb54ac2adfe3e13fc76faf8e33e2660b1ef42761474c39eab9f22e7f28594e8de8fb5cf36141721146244f9ce5a64d339f7dfec55e5f77b27a2e2baea8578a71cfc470a4cf41f975ddf54707c775512d32257b009a7ced96b27459a993523ad3a646e8f17b97fd5173ae179663ff57c4da531631d7799f6340ef71ca1de2538379eeff813f65f75523faab3d12e6f3faf44ee9db8d5f43b0c801eedf54c284e2d55abc7ca308e6d8101740489177141461e0d88e4ba5ca8ec93246e43b626a2a4d89c35d0704c7d4f39ee9447fd9ad4a4879fb7925d4e58edd06fcf17c94c435c1ad001c5510aa549202aa1089f6fcc152c0e4599b1b947c5c3fc4f5f969de8497fcea87d50a636da533dbfbbd40d30f6e1b6424f62996d6f1ded2d8d4f2840d561d01759c71ef4c3d47818fbe152a9afd70eeee281dbb479084a85eb8646732d906d0ea51c4411b99fc26f9667ecae9848addab9190dbd90b9a6fc2c5d08b1cc407977232f42e30222e5a3d110ec04d57f5ca57a226303580cbd14149b55b2c1b2f0bb7a61745dcc634d862482e88a6be47e7df78aa95d5d657b0da942ce21b0dec9d0d627f67ba5b487007b1960bf3dbbbf1e95922a596494ac24a85ff9a9d77fc58bda1c16a722202aeaa60e05d540524348987de83e1385ac7f7f6578cfd2c0d99e8e5174e955555002f74810efcd22e3de01edf6e23928fc642d7a8b08f5773b0fbf2e6f205f7e5c23f76a180a478bbff81c4fc171c6ce10b7abc86bb370df9ea72cb77628f9896139fc1173388c753b63becc5d99f8f71600e433fb9513eae42261c62eb640121d59012cb3c7a49a2eb9b31403f1cc06307e5eebf481586bb2b8b64c6c96e74e8060f7b002000a7d68e77db2f6a8c6e9d58b734167b0caa1c8f318b308e7d2984789394c6b3e8c512916ef50534811bcb1705a85554b7898ac2d8679a3f181424062b5c710b3720253f770592337b7897037f1623d5b4847fca4c2d1ec75d799ac8899bf8b6d3748fdc401f8fc7a489dd09ed7a05f5dbe5ef6276777678fc74f900ced0e056ebe3e3e20457e8d3c0b37cfebe53c21f51c5c4057fbc94474870ed65bec5aca23264d21fab70e72262ad5b879ababda1d2d9ec75af5a9ab7b8fb76893255372dd9cec2086101eb771d5c2c7c7e080188a0b212d0c70bd84b067e1b33e2bb6dffd3e36fa0b36a4499c6bd2a51a66cf404fb2a8bb0f683863690ea51efc3952e4a559b29c340cb3998b4b200666c550162bc1dc6943b4648e0dfd8b187ea0509b58effc45ad7e70ff46c91b50d586764f65335b77fc6357f45321f721e0e3125ce4a6b7830546b0141b07ec162d6ec461dabdc879b355a42b5ee42bef9525e9c7b0b83b7517f70cfb053af7f7d3ba22706b57c7d117987d72dfc242b1b2b9325656753df912de3043ecf090106e21522aea2f3dda669791db026dbacb4238e7e3eedc573446ab1224e689bb05e132e898a5b7f3944ba69ba67761f25f62a237d6e35d8a67165d21c2cb9099545901b131c4f82d961eafd8cb589a5c838f6e8a3f920c7c855979ecb337684044586fc6a065649a4b0053eba87ea651ba0ca564d307353777117f4508fe07a97e1ae1e7c48036f93da1a3fca9751e6367846c3148ba800c5d9fb2e122cdc273703b51526d72e722cf4815c77bbf86fca65d1ab71f120264984b89ac3b94e2264529396a5b9c41ae16ac4b12f864f28076724ba796589a45606e90220f47911c4745e2130569e5d5c349644cc190581c3ccfc62844b7d78a74890d064cb053c5ca775ebf04046fc297e8a54bc98b97fcd66a935052698c03651936e28e35ae46f04b1c2b9a88456665c8b570bd051d7fe93ac8ef6f5bf48fd45fc347331182a73d5d8f7664be550faf29f118fa2a8b0982bc3e0984120f7d9b242f415160b94e4c77d46439a56fff614400e9c35d9a8095072446107f8c87a4131f3b22e2deb2a09f258fa88a8bedf0871eadee77ef5c77f17b70f4f61154bc5ec28fc97149a37c96a84c9f18cd8e2269a25e2d21bfa4f11ee69eadee2e45c8c767bb1c9629b801b3d18633dcfd63d0841019150d7d61db5819b5863525d4e60c6641478ab1fc515aae6380b15ffd7e01c1a6496de0434247b7234f2d427d8d489524304f8bbd5f2bf2019d36900dcadbab93577ca56cf6b3298916174219ed9d0f852d9ea6c52d9f4ebeef0b4986e75d2e229dc783761ae522495a886d42a5b179707ffb514dc82657fc11b41b101b10ea5f95afb95c1283a8bc0ff498ee76a154a2dfddbe2bd42831b4006036166bafe9a7ec78b4adc183fcafbc92941f943e4b7c7b62993bb7355f74c4f926bc77bdba0eddeb227606d9d822b41c1d85b154cbc572b8840b9ffbf0253704a8aa064ff7d953a64dc7d1df1ddc7208e706e6956d58988aa3d8ae11e71b39be79b834681fe0318b093acf111cae9b831ce70a6e40ecda2efb69c53233f1b8121684ee4f731b83e06e386303a04719d2c3289b47ccbeb11b4205364c134934d98e25592cca94a73d29fef38f3b34d8525604876a7b6dbc334917944f0705d5c37fa80369d34d9bb7c341540eae46d1804967ff27dd7f1703dc73843328a45f25c024739d8a8eedb52ab658865b703beec4fba965642bc1562fae1c00c9adb3da07b6f3be217eab7ec7c469fa7fa293848f3481bfa0fe55411ffd25e24a26406f1bd46d027f0c129bc2fc41f69aae599fcaa16932fc4c8790f9174b8f850d75b8fbf025af1e578225bae25fc0b88ffdf47573a82eeee5e100b8abc66a1e760db02b51bd85b8237798f72000af7359578a3a2a42fbda6f6ee4e5242b2f0ef60098c2e3566c52085f5f63738a0b681b762bbdb4cbfff4fc44f5e75629e38f8cb9db6123ce72e7243d93d686cd4b7d7acdb0674463b0a54ee905904596290f1b32bace482642c73dad0c5bae89365976d6b8b2a2fc1e9d73b58968b9a2518bc6cedaaa4f2c0b90b6c61816dafe453c3303230dc6cbd66085d01946d2a82c73e68131ead9f12212146dbe0d34d6a67ed18d51ba500166bf28ebb19e37ee7a6f9067036e06562977b5f2aa8bf5de1066bc8a1e25cdbca4035eb8cd151b9d359e8d18d4bfdae4dcecbc2fc0f44e9388e130341c29568c9280e43a3a9ef9440bcf4fe6f6e0c49130a66dd67861aa1b2b18adf950cb0e8cf7115093a3c90f408e63c1662979a14761eabb8aac92520acf47d753034a0dfcc4e7da3c4d80f4dcbd76bc565070065b75ad147d8c536abfef50affe1274c880904a79acc950b45e89de00cf2b2e381a01933d19b585671527a698a9df351ad869ff03da13cf0bbe6dd5e5ad9d532d35a81f2379e9e02b63cb9ee091b728ce5e3600d65b1c0f4d49bb85ed3d5847ae39821fc6cb1e0f9368769bbb0dc006eed3b36b6b3ebc1482f1556850b2de8380b8f80096f01b525ce00b2d533edef37c845b5f1d9d8e26a905e6f6deff78f2f0d2a8837263446de5ddeeda01cbc6328a8daebb9ac41ee58ac4f3a4d4c3e9febf5c0d4d5a73d68ff4caeb5ef19a74a474d22c40fd91e924ede1ad19ad565b7e1013149a8667de5a4b90e5b0e7811b83a130c3239d3a3168541ff348f1da4a39ac7f479a52d215fcc58cc9cbd5e9d4ceb34da86f6ed6814bf549a07ec30a710f2cd20f62a2d05858039e92ce9f76636f978b97a1f7b85b5887a9634c257da4af132c054fd5861a913e1cf9d552c38f9894a5cdac74bf5369326a488563a610dd82009f89f8fa720bb7520fa3a3c8d8c887b9c3f8f972b131d3fd936d83b225f4346f5a963e5d635d21d0883f37eee9720f255b14faf15910103dc9efb892361e5079ec5de75b5f960ee1df0d671eebf801c0e47f02e8016af0ed24fda38214341fb914085525ca3314a45c2cce12dfac438b9755f1feab68ac531fc07b1de57628eb2778a9080ec05570f662697c1d48cb44969c890c640ea08e76f63d3650cdbb613c21861e9d10231ae07cc94192780b2c22ad07fb8c41fec12ad7f2932b6e897a2a19106afa1b254c7d0e5aceb859f8b85944c1f58084dd2ca43c87f6a8d185ff091a4eb5c723e8d249f4f92643f9485b366a58fb8982e62fdea00822a4a8a83f278d7ccf00f80346b3051fa93e2964271c8055fc8d534ad5777b6040db592fc30e0cea17348146b16e60eb60aa6be2d84d5197cf1301761596a710bccaf8e45ee97c079a6259d321890df85fab07a8911892ee60a98f6f2c664bcb77477789ec0d79ae91c216d04b6d555c53a5eaf24ce89b9eff3370678f4f57f33994a63ae521b46ab674402c20dc0772f393e5e90fae7f00353b2f2aee7285d0ca6fb7ebeb0520c87bdfacbeb78a6f4c74eb38b22c248fc580160efb0f58d231ff52b807b99a4f60fd65000723aa2d85236913d80db02d3ccf28017c91218bbce86c7301cb5292d161a8e1b86a781ae9811b21272b1edb037fd62744022af1d705c5b55472083fb224900caea79e4f3a7daaabd9f0b5026e9e8fa76c47c76333e39c0bad19884a67bc1a74c8c0c19f680036135a27c6004ea80488f009957db73af822394d7f4bb6126d37be65031ef31eea8a9a8b134186354c9d2e36ac403bcd56eb114b50bb593d1285d65d6f5b87d8d058b3b45e2beeafc318186d30c9b5930eaed52e31ead3999029c4655f182ee0cb1925030ffd2ee004439f09893de328c89dbcad69edd2ac4c2772d4e0d0cfd86456b557e1f6d203e8756b4904935277515078a457d9f0a6fddcebf7a7cec0dc40072741080c17376b25cb8c726762c20e39fb712096f18f497d5cab41a84af9d36d2f4d1346b522e7648ee124ff32b80bd195540ba9175e96fcd4870338ec28b6e63f017eb507d645a3239520f64b813ba7669ba6d487f316745daddab000e952122df23511407935af01c317702373135f2b09d9ec200655f272ca97c15476eefcb89cee030f4c48d4fb372ebef9f74c81c44ede987af25fd11c9fa178b644132a76c641a47f56838aba753920a9a4719ff7903551bd8ce535c740217d184c558f825c20b0e2cb656d6d8c13e59fccd644e645313fb4e7a083c0ca2b6164fc93fd697d7e2fbb7ccad918e28814ec7c71188ea282f2b6bb86060192230ba3b86e234a7a2d2739d3aefe7b6983f9d874cf5a42ea15a7ca7735394f04a05347f6b1c6598068a5e42f43885aa0646f7b9700ed4b35a48372443612c7af437560854603993d90a50c396000da331856ef736503a087675b0671e2bb46fd5956abc23d1bb4d31eda68e7d960aa4421a02e83e543cdd0516ed219a01755e982e3025837a79668e4d7a26f3d0fd11390622c0f91337a14b9b6fd491750923e0cb9c8440ea3bf4e4f517418e5fb8b60fde5f48e30a72bada738dc0e393e388bf309ae5d5df976198442842b42f878764bbeb8383bfe433bda60f1a37cb22e24f82d76f4e7e24f683813fa8bd65132c1d3305de2ede35b9c39b9e58601a9897f62d90c53cfe752d7dac65f891ac3db96e73d021e17ceb8fb5ecb51aef51f55a4fb17ec6ad665e0de6b47a271b4c6c2e9c40b6b809c8e374b4a979c67e1227fec7da8bdfe1437d7127105b64c76d26c06f2538270847eb72ed02d85496380b9fe46ff23f2ca8652c76cfe8f1f36c16092591ff9ef0d510b8027c9cc3cab87c9c4e40551d2f63a7b2bdb94bc20747a009ea60a7e5234dfca2649f495ca3c8a1f6237078c1443bf40d88e04e80efb4a167960e042d50e485d573605068fbfd35b0c990f335a212f5bf38da553c38d043da2aad3c4c5497eb50ec6fc37db7d8aa8688cd856ab059e0c5c444f788d5063dd46e78221dfd9c44b205706df2a68f88ee0d84b0fbbfd3b8cd252b8d50a6453dbdf4053b20ae1b659f21fa4f3af2709ad84f516064d7784da3711248cec9ca5333e10afa61911e9366c48a6044dc75221cf06c05241f75c7cb631bda7dbf516ad8a03f5a9675524a438f0803bfd181737ec6d3eb4378cdf970721979e79712e7d745f7f954b3f672cd38c9078e787c44e8df43103bfcd6405e9a12af340cc5160e61a37bb6c785b1b2d4296c1211d5f0abc428e028e640a06920ddbea5817a575c8fb088805c803566235bd78038367941d109f9ae51dc00867cbba1d88273491cc00c3593faa340df432b0c5d6c6be20d6f4cbb0c283f83cad3f9c902ac07f410b8673391c79b225fef9af56fcb316338f794d4c8d2e40db14ba70ae767da628d2750b8c714f13ebdacfd9ad3d485624bf9762ccb285bf7343991f3f4f5f3e56f172eb5c15f7bde714344c73d32ca14aff7cfaf2589b742692217277581b7f44afbcd1050665a508d7ff5b16c977e9d7fa4a467d8c7e2323d3296ad19f8e208772d6807d4e572bdc80d222c870d9373f7866c4302a567ab88eacd89bc6216f0378758a9207f40e12490e64dc43c66af92ea6d396e9d347f14254d0f0d6bc53c7fb88b6357ee5991e186cb0b91c733579ed5ebce619edbfaf25cb1743eef2a28868f21857dea301a742e0863fb08edb0e94505852a87c1b6b47e817ed76dd102e1e6fecb0d6fa4e279731ab94271005dd4b533115ae192d42805036f0f1ff898f3e8c2c1347d4b3a1317059c3cc4d9d6afae96fd2facc863450f8dc30993d24d3191f1f0ffb913cb8dbe5aeb29411b708b49384ab74f01b99c7966a9ff861143f828e59b685578675a7c6f4d86fd200ae5574e849d6cd2895f04b2fc52b7a44aa66c809a8ed42a955a37c3d13fb420fb4ad09c5cc35ac6a9799277e8b7a4d569f0c365c748b295e119849de7decbef834aaac641b0962bb8d037ada8fee8e5b6e5de3d7011d7419147f42a4bf0b368387558aa859a275dd77b52991d55f285f43b4120064e26c63e2375804bd23bf016aaab705c4614fe865c57b02ed11bc6a4cfa325e8b3493fd2cb143cd812e5f351e0cc1bc73edc5b91e95ef035db0700959a3abaca45aaf133b05a4c29556aa5dae21dc298f163ae59b3008fa4ae45db373779e5096b3ff35b53230e0109de1e9e9322be1ceea5901b92178017478d2253ded9b6ecac916aab1d97d2f727f64d44d4264060bf3e074667990ccf8de79e88bc2bd98c5a27d0f41f7d6747ef623ade71e1f3cbebe8ebf69e74f5c305983f82a390d8c695b9deda02f3a3140924729cbcc7638d8797b79dabfdb2816ee5da90c0306406b6d9209525d5577cb815ef72cee42ee9e44c945f656569efeb17821f9c8c83216d527487f5db479f5553a7034a65c4aa3fc11cacded02dc45b633d1e7cc65f27cf671feb1243f74e7b032b298e58e71cfcd78651e63d96e72fb49938c292c35b497acbaf8c1e797c7fafd9f744bf796b1756fc94ba56709c9e1f497ab93a2b484985ef951cb2862a696c6a9e17ffbff5f143e1398a4f58a2139320c6101215046770ae2a5c20064ffbc33bcda2a8579238b93e79abd64f74ac23338c742eaa7a2c41a175d1f8fe6bba01e0c36114740e986c82311b2576fac759426c633ab3cb34056028d428decdb3835ee029aedd376e79c1b1a1ed57a2667fa0f7a6a6fab7ad55196c7edc86190757526a68f7cf19f507a8550af2b8ee097fe9311cedd44e1703853ba908d04179985c768cb03e803e61808fba55274e14eeceed1039d91190c05ccc0bfdbaa91ba9fe5138ead9d82de32aa51d4de05f36c10d97cea9dedf7a1826f54e8b05cd37894622d4aff14761aea4541480d7efed359bd0d78cf85428630fa05a410cac473735480962420c86f49233d72e6ece95ef5c5380a27853d1850def1e56fc7d8e256d827d2aa2a7a2a632d7ae0bad97ae284b962c907f69e009525320ead487093d2cd817ec206be7f04bf567922418adf4f897d93711bc3201f747ccc9ceb7fd3b61f685b64478c988ab1009fd5e4550a647d0e3cdc98e71b717a462b162686382a5fb120d1d73269221549bfc711a3b1457ba470986298d6e6d73b03b02e206614a460bb3ef103cdedc24a29ddf6598a88e2d8b0e57c43fb04d01edf546fe871a81db527848cb501d62398b83bd545df9063d308db49dc650e400c1a072f58889ae3779a88884bb602ab0ff21ebbe7e0eba28cb4d0c4b065fae3f2bb99f0f67dbff671d3b4569fb392cfda4ee03e341ca647347af17bad1f82041988713bb3eb681d89236effdb0b449b28b6d70c73899bbdb561a06f4034d783fea4fecfa192602724b0b28f1a8ccb8396ef4034748d4d91fbcb9127ea933bee74b01e57245135950ac71b5b3eb98aaac6e2790b478b8ab19bcc1830f4216609930beb37cf1905730df09ce9242365d741c48a22aaaf9e246675b8d2cf36cb761347318cf821d1d2bbf4cd9141b4f46c9a487555a8c5bb096972c061a8e8f3fc8495067790b7f746ff1771124ac58cf76915d3bba1c1db45cef5c696b268756067303eb84ec44d06182037505ddd32318754525fdd77d8eb1869b5ce77846f8f7ac40d6d97fa52dbf2673ca2e697fe9c871d3fd178f4733f04f50384c01da619d28207355188aa78e5462d4d61716e2106f5bcc23e88998f5d2d429e1d0f5e602ec46f9ece41150ef55441a1bd00f1af957e66a553488f98d38e3797880fdf54916f2384fd5dd3ee3559ed8a4849b1efc9bc70b892ff1303339c29807fbcfa0f218673a2709d888a796f261ba1e6196dc2d5dcd47bc6632e19ec0a25d50afb6c4b6a6a6f02d461047e8cb98f289ea805941d7689b9c48d5a6b1ca00230ac1dc1e721ffe494621316094daf8df26604e00905ca13d9d13b7f5975f0a4a3c8f54b9ef6258b6c3dfbbe155214a26d876e63f320fbce3ce4750e2a6dc6a11a3b19e3e284ff6751222185e42512b644eb2fbea89238aa64742d727eda0c5b965ddd435bc0adb51498c462591657d8bf2a248f4781a2e4de9216bc2e90c70f3b46b47ea4c7bc9e737db279aee5cff4a35dbfc3029869c7097d58da76cd1c4b4994e796a2f08d09263e5794b62d107698d3ddcfb8f56b970d5dcb9495fee9569e7755fb6c020f0698ffe69939474d08652ab039787e61d7802e2056bb13e3da2e000eee627452a461e0cc4d23de5f25e25d7ad6832605f6d261c12de6fb8eedd6b9235891af98fcc9a99226ec846834ab89f7820ef3b405bf6a3a0bed8d3c8f5299765e481870cb8e13802f4798c9a173194bb12dd7278de0f7ec6229027fc9d1bc351fc14f1b95822509afc63e6d57b1e841b2c0cf21176926bcb916dfeceac07b5e87ee7110f257d46b15505b4a9876281bcd237adb2969cdab8d654c4ac289da62c67bee6fd5c7abe9e2837218ae67e3ec870c584db538accddacb7bedcd70323e0249beeaea8f2cac3a6006440c33e0e57cef84c914d8d3fc3c36775efadf3aea76bdadd7fd0a9fa3bbef40cb1d4294cbf5810ce922342f271efdb089ec72eda70702c253cd0400af4a4968543a7b69e358c32d7165589c97962da108f215053f0c3423ba412e347d65c5cd9c5077925a6d66487c9f1c8d485f9587883882618aceefd52caabf21b2a06ece1a9656cb1319d958d4b99fcad3034c5552cbce5fafc68bce74f0136c3bb11ceae6e43cca20697fa4b920ca5b3edd76639d52b6b8529059608e644d664bfffd6e70d1616f0c10e1520b65173eadb4a010bb35f1ba2df3962559d65ae01428d275d3d02cf410799d4e454519e74457d05b773c434b4cd75756ec2716e7ac0ceff957300d6216a74e72541b0718da307e857a2b612617b542c735bd3d49bc518f793a0a201954cfd984735b9f819f9835db0f8c0166e792439ccad2c1a9aa32f6542b57426d799b7eeb725c9fa1542a806c7e412f7aeff2402fffd187551acb80420d44e535521d8db188170c039d44cd22f7830fae8fa6d577f49feb99f19a63e52585e038ed0004ac1841df18c13263a6b64bae957044b8f18ff786cae306f9eade4318db2fed54dcd9b834796e9304bcdb1b0e4872a4b84a4361e3ac1969390c1efdbf012342b2dd25fc1545931b7869f4318c4737fff16794366bf5a40670252847481bc9bf1a05d3f3fcba7eb0b28fd956f9faef56199899340010bb535049b20d113a3aa58064738c26c2ae1ef5770228445ca80f3ed2b55640085e804e6727fa8bc0e3d9edfba82ee544bd852578d5326af3fa26b27c623c1722571b728f58a50eeb23fcd7f8391c5e852fc401246e527d5b98ce7d65c36c0c0f65296a1a9bae20d0589d31eca7a3773bdf99c0a41395786dd721657bef2b54cfd326c46ef18b4ae9ecaac22904300c05a5e66c7ab6c6f555e1377c091054ab51979df14e9e18c7b2806b4c098e58afbc2c7fdf3a9966ad0548a3304720b100c49add89cf33f0aa6750ea5ec9b2702041b3daca6fd446d4d17765d20f880bc194374fe1379c171cd649041718cf37b9611d28a52125838ae2939633fa9d1011fd03834cfbf731e9fe48fca7354e4f1f444a47d110eb71906f16a81d06161a34bc38ddc322ed0ca426855e7368c8a1265c69325dd7e9de5791a0311fe3d827088ff9c255a3421cb97c7f88fb93cc073d4f6e1b9c856173348abdfa1624a648629c652064f3091a898e824a8e90040869833872a7bade077b284d44a533e9ba49c036950cccef230c128438adf2e9dc02255b4d76b28a1a4d7b0034428ff39fd7baa624708765cc423de3c30bb4895d7f00a350cff74b27cd5de430dcbc76dd4c3476fc4951773abf456d8216a0c4d6c3a34ad8d10837b6a9e357cd3dbf21654f6f2c484d53700708b35ca65c36ac7dfec2b4c320cf62c175a9a9f1669867d8e4e6d06d09e03ec71837b8a0fa39a7db9cd9685ae50e84a4f0080813e08f2781dca1141fbd0a86461da2d349a2a82a4abc77f3088c7a1b5c01c0111c1104eaf7ca7174f7e7163849a0fb7d65feb7dd40222fa10609ee22459c47e7ddb06c2b929194da5d1a9657df3491ea56a68e77d67ca94fabeb19548e60142c14093badbd07b2926f62885b7b9f910fa6ee3539c8eb3cc7786303708d812ab9818ba786ba501a05968e288f0558778e4f76e5ff75ddea9a9f6f2a9064943f6835ff568475b21887aec1e3d01675d5c0409c677f79f0634c527a134d1e6a481e0355afc503587dda6abb79617323532e8a1f06701e16fbae89db41c30c8c533111e4f80a697f14e3fa9ef430fff47b3592561ce9afe5621342bdfec9f4783423b8202eab57ae7bbd24b642bddbe3a062be3e5215b98178f400e33faccbb879a36e311ba24181318b8136c8eb06942e86d957cfc8fe95b777f7892cc624bc1d777320e53dc03a82a46232ca21201e340da984869d32a8d8a3669d86d0fd99981753ef90f4e9f7a8b0eb1dbd0e3c7d06bd03c975b3f07f162379df07b49dfbc039125b96c7fd4304f4b9c43580825068e32755021b726cd2e90cc2f30c9e48783430efb7a4084555842ce84e4f53734ea26f888d69ab3dc9be016fb508d83663f3ee990c34b904efa4cc9b88544ad77d4016080bf9b0b6b73ab5b48b5ecc234c3c30e7544847c139e8798975a50bc4ddbb7c03a999157ad6c0641accfb85238e4678e7a37e3dcb91d6013e4923ecd5dc997e9a4cb547741857f36d6d06e99367f8f27eced6067303ab4ef3581d0ccac8d78ffcaf5278cfc3797f51585a35ce65118939b6b2e1dc41f05cead3b66263abbc2ab909bf8b5ba13818a08b8b09d9bb42c27070e11700046d801afab7e642dc0aeb1e49600bbb8c47a0605020f3b4e1f0324c0c2e92f71fc98dc51b9ce7cf525eaa1b701f34d9cca7b8a436dc6b2ddfb992f785514750aedeb8a7aeb9360690c4a9bbe06945893b0a9bb2d3ac847df36cd8c946cd4db0b146ea0bc78479aa8cf66f36ea19e3fd2d1309fd5ed699d936e1e784e2e8eb9222d26089dd64d22f4a962b910b865f0ad725d29ba2fe93b6a6f4af07f4c3f462b4782fe8481837364de32ce029a7073c9bb104032fa64a19bd00480d58dd5e94f936e9fd0c000d1bc7477dc3aaaff7c6c86e6d5af4caabcf77a72f8d9ba96012e281e2621383a684ab0f34f957833c92c204fb9b171f33a91ed0ff4150b7fb339a49a3decd0a4abb5c7b35cbb5a2ecc536f2920e446e0fe531416eeb89efd6c43d4ccaefd6ee125103b8fc4f000443125c211d63bd8e40407738ff35807b859e1a392ce676bb906f8d25066dbc62a2e55e440085ab39c0360c777677f7b21e26f53535a6709d84961a96ca9b105451568117a399ef2072fc786f712bd3fb0494faa08989a6c63aee47fc4fec3d441c1d84770604ddb3eff2fd33db04b2783ee54428388431241a20b5ec3d5badd40a60a6d360c9d97e91737a1c828ed8da1e638ddfcc32923f16b8a61a956788e6890219349ad945005c03550f58a5359a2ba9d7eac7c3c96f00dc20ad445b25f8384ad3bc3a7ae422c4ffbb890586a8dddb885e97acf165d991e49500caf4f9d44760ca5b24c1b8bf3c9aac12edd93cb3defd9724dbb4dcad8536f4ae27a4e878688f712eeca27c3ecbb77c0536748e26d1524b7be49f42da08467a3dd7b7312773151b386ca8e0fae6463eb57471846a0c851608fa071bd787ee5425338f4d07669118f0eec2863d2a1314e5577da826c1157665f538a7e3c62a09a09abf7c4975e28ffffe5a6e1e85378a753cba70ebd0a9eab96d4aa296f2ff5a3559d55046219b7e0688a191c5161c35d99f266b7e45d8b815e5c6dfcc1f73dc30dfb3ea736f859e25fd68b8df05cec869c3db36862b26f096d0a5cfbf574da472ca648a907eaff3e3f423531a00e8ddd1ea54216c8317e47285ede89e9507efff451e0647a33a2d8eed3cf1444d135e82d9d9a351d340f1752d47ba89a2c2acea14896efc666a4f88bd15921826849f9c9aed8e5d71fa0685f3399ebfd9ebf6622029232d62a493bd2bf1eefbc137df32c7eb07ddad0c61453dc91b140342a402baee2d3621eddc6ef342cf2e9c1e4477970e824da2f2f20a093c9f524ecbda24209e1090174281c083dd5eacc0a0e004554d58b6ed3faad361d3d74bda9a3a04c79ec4f33db666bc175ff0411b72c164c1beafcb1daded8e7caf8cfde33cc50498088d15389300dd7082bac7edb807fd8f47724c73d0912f2a2708fd4835b45b54842144b0d03c339d57eb4cd2e984dcc0f69d76813e1c2660ca188048cf76a73e90b7bd7404129ec6f3c96ab01d98edb71a810e23900224a3e6ea5465bdd6bd421d4137c64aece489887ef36719ef85dd3cc6822c535ac45ddebba6eb7d9d3a6613fcb6dcc62648f79031f78ffd1974021225bbc3662276148255adb742f1c9c1453093c98ca8e2489ac47716464b34d01a38e861ba92f6d6f25ed35d6b6092eab23df8d05c5beb0e4df26ff9b11bac8e1fd8b0b64589a937c1fc4c0ad323fae4639ddb0bb6693a2353a83edbe4017d9012a2d77d7d797b20b7f487231cfcecdc68701f3f936e92acb85b56c334eed074cd72e152a27a82d1700a73ce54fcea8e381986ee4274348b8587028f4bac67865918629cc21161c71bdc4d1f6819f56b29f8d54f863ae583e5d06dc083b9aeddfb46e312f70a6a27f57f5341960cc14f730d074203654f9acf69096e155def1b193686ff9b57ffd604382d8f76d21d379aaf7c073812931fa79c6c3bee12fda9d2ee52e49646c80f48f08a79d07479a7f018bbe0af97f84e0b04b73be44af5520bd8a7e16354a88f27629ca1e2b74292679ce9d587e869139d8c84f8d5b91f68bca518b20bc9c299fc309822b6055557f56dad97c26f2f590af051feda5d8a59147f943ac6a83cad705da6c8b0fd1530efe511125753202fac0054cf10f8164e684e49129576d8a8a8668f3a4576d0c3a1278a51ffa9e5a3eaaa32ed5532f4f969e86178e36839bc25b7cc86c0d2adb066a788b5443542bd35b3e069945d62c012baec5c47010f19daef0489b4f16a05eddd7dede7b15aa18bf21d60c98ae42fef6eb63f5668fc7af3cfea0a7d575735e6c5f3b055a0807de35ad0a91e13d66bb38891566449f34114b08536ae4e93c18e1327d1a9e47fc6bfa2b3d8ccbe2ac079fbe23f9fb2d63839588da46daea71c00162b9c81574a6602bd62a2fd64050923cde643e321e164bb966d7433698fa169f5b1bff7a965ad3834f5d8380d4f620a0ffdc29db059e2b1ff19af6faca7d49bf1b1bfff67814a37f7ba5bee6dc054e54481bbe1b5261020c94967696030be3b3022778403c2959c712fd10828fc097bd33b0739614ae0d7dfda6b54e074da259667e865cf64e13f4a6fd807f280e11b4f40fbe893199472cef1de40213c374c81d535801521f4417c1e3bd693afb6fe5501fbaa3128b38b87b4da1269bc203acc584f2b77d834a85f0cb94dbe463eb71f7fb449a0efeeaf61a949df3737bbd8c732eb6d883013bc03459cd72b0047e50b5f84122124dac0d70d7fe1f19641350496457591c7d012845c0da1c2506d9c2dcf81109eabe7645340d9090d61a16486a95c0b066d634ebe6ce57145c2c2b0a984404da0281332abb8bd360062eacd813a5e1e39e50b697e323a54482b7d2f12642742ea6f4071027465e3a492420e8ba2652f7909db757fefccd0b355f41fae2de56023ffc4c07c11ff0505543e2133f6c6ba087ebf0a858c23ab16ae4f6f62e49a51ee411d7f656a26ef6413824260703a07fb5d03f6fa0a2328f2a6d0f4c0124ec876cea8009471c8afba08f03d30b58625ca86233ab85a446c9d036746cedd4b6fbcc6ca1192005dacae62ad307212d5f2b03f2f00a71e91d429373ae91636970ac244380340a9449e2f19c75cbfa754e2c12b72d5c138420ceb230d89d9251bd9695720b825e5b6fd1d88e446a84371ee69c7428e285d5cd6e4751e0758063d3ddd7bcbecf84b0ed703515f7d534117584a449d9d4c91ac33d316f668c49516ecb0dae6bdc8dceccbbed1ef923ade53ca26efa8909681f94c8f5bbe76879b47152be92ff63fc72a74dfe4342ed5261605f91b236e8f8d2d5e7ba1e82060d945e32c4758bcdf5285f51478b6663c4f1a24ba2b27d6f825a85e158922268469fa014feb8d2f5cc4331a13738232145d86edf797ffdb8b556d3687812389d6fed91862d468ca7ae462fbd11afc479c8d72bb92483ab62aed9dd84e26f7ded702fb37e3f80ccf3d35e648ffa7de3f95dd6d74733f1e092d3d7f80450a41120510be1692221d3c33cf176854f1a8bf603d9198d9561b6452890ff868bdeee198ceb092331e1a03f4820bffb4adb0983f3c9b8231af41cd3f2833a76fd6123bf2a263fd7474edf8f911ebe7073c58b4208f7f32988f13edcc97a89a13b94928848fa130cf46e24e47505f8820f18414b914e06c8612331129a527301f93a351a464af59b536b581d3d098abb698247af854d33725ed621d2407570287edef5cc6bd668cd51a25684d70e0e46692e5cbc24a1c46d60184c75846a977b1efa71702806b3f44c19d9344fae1778bc5cd52cdde51b487bad840f0c1cfe6a40b3f8e446d36ebcb5b1e3c456ecf425ccab66bf11edcfbca5c93427f1f52ae75fbbe5a0e2d8ee6ffa591f41dc60c785c48ccbcb266b6610ade800650e91a8895b7ea62348120fbf719c7cb5b03d5892c386505dbc1ac8d49a97ea472371eed97b37e7b1e339c7f22f769d4d350dd820e5eff062f71d9448f75c221b6bedf60eb551131f7f3b12e875a617807b1d196e5756bafde0c36d08de0f0997fcce26ec049828d1c8d9f665b0c4f2432d920633c4efc713305c861b88cd879f41e9f08665401cfa6ef77970acd73dc99fcca89801b02f3bc7e6cd8ac15f080bac9a1b8a8136223903770f44127fd35497755cb39d64cd13756bafa760d6936fb489a72e8e96f50dfb8fc5958584b069904b4800331f4e477509ef8687d50fe9f847c6051a2b924510d0c96c03c38b7f531bd49bac7402bfbc035dc2ae13208d7667868ba589f31ffe6b48da25e1ec55f6fb0a5942ed1d5460f178520e4259733ad95069cb0d8ea30397e8bcf0aeb3a92c673a2a8e3d69c2893bafc65fea8af80c855fc9b2ba626befeb08b93d38f313b6943a4c3d4df75882437993f65bdc165f94dbc8dc0638350038dfd4f8942d0af26aba315adf2923cc3862234a7f42c5826a1efcc54403f65e915dba1ceb90b202dd19ad209786bc5229b15bb09bc4e951027c58984af4ebb8f9f05df014b074bd9921fa5ef463b113d2d2661a63f5b1eeb61a049b1e0e8683c4f5b0f4f5fd6e7d912843522de28ba969a4309fd9bfe302acaa083db62a694728cf5c0f3cf5c746907b41c0823b86a4d695d4e008db3ba8e9ed7a006e7091e6eaf6df8897305f655ec1782abc186fd5433ef36449710198f45861fa9fa667ca6e0e8ad81fd547f291ac56c78006dd661a4bc540a7e726aeee9b42641cb8378b517c714b1a1b9e5c7d1b358a5f2137657d50685002c91070ae64e1c9bebaa05a832d15f37e3083f832baae214e2c58e82adedc0fc41ca4c6e3e77c43f8ce7c5765f16f2e5fcf35397d748d1358db211d687dd463be4d0eeb10ee7947d06e25cc6b3d69970cf09a19b2c7428f3719b25b86c4c3757ccf1f5d87fda5328495f84d4ae42ccbc7b11f08b75fa1985d4ea26d11ca362c9ec309a2dbe025fed5bc019de1bf88a865f3ec97b23743adb74222bb1554912297cdc98befd12873db065e4833c8cbdb1e54c6ab23c749bf57f8b71d9a51a284efe42725bfefae50b284eb0caf68e92c938114768c9918a27fc92628817c9ba39bbfd054301391d089327fe79aac5c4384516485bc5e452b9ba4065b89cb698e58651e647b76874f8bfd1b6f5190052a5724fa2063c7643f60b974cfe89fd395d399878a6c3678c15e82866fe73aa0955079c4a5a2390ad70a2b81f43bbdebe1443b3ba317a9dea6126f3c2d5fbaa57cb85ee3057465415d81ff956fdd686b91b496205cd70e4d53cbdc7a78fe77452b45f136ae69218e6e1f39c00de3768bb60cc102114afd7b15634a0fc810e116894b8a76a30f20aa5b6984a54e53b37fdeaf0569d4799bc4a898d1d78b89ecdf5515b22859d97b5699151377ba9b5f556649589ed69b52eb23c6c9c848ba43b8542f1d842883a77aed98f669f34ab41bba83a52946127132f1f6e2647a7eda248b47b8e415274a6ba16969397544e3dadfdfbb644f6b4448bebb8fc74f235904ff67276abda7b1943dc31c99cf881edf4f85b8e878217ee71ea49a8b0a3229dd71a87322ef65308f3a5726d5ce98fd351047a33771df0754c0e08176b28c4c29f5ebfe1ba77b956ba024277a88db3f58f4f7a5c00edfc6359250fb6effd45c5e3c85c13f8d80e4677f7f71431669aab8b29cbd80b6dfa6f92bcb1fab9238e93b0041a30e3043278b90db9879f1fa9ac9a3cdc909aa41d14e8913c74928f827e683588577bb2afa5405db587b265e145de7129a497263683b5f66ac77de741249392336679b4ff6d34924a5c950a0825c0e3118405058ea9ba8fa9938f4845214f415bd52c81661c079ba37f255b5aec44b4d1b801e070d875e790f398092bb0129430ecef82689194ed3b3d206f233a876dd4845d0106c5d0ff1dca08f65275ee7078d5bd95b12763fa101cf8ba5dc9a0983876ffc5843ee8425dc6dfb6c7439f85251594dbd1b0033778ddffce987b5e056084ffc70dcebdfebe53dfecd8370eac5eaccde34f5182a13a3f575e212138c39db217f455200932602521f55cb37729263b2457f7388ed96c4e09d172a0b29a05ac9fe1ce6e35e0cba21227b1a4be8e195282c67a579831ecbccbf144e0052a2e7467e49682da9cfe18f5ea3cc347377271f8be1f3cb993fbc86945cff01a4a96b9270f7917b8c74245f2a249d3c6c45bd6595c300db702f02c741a6b1403c892027205bb68a983aa97246889c5faeef86f10cef7080e5d97b1281d849a2cad845a753c885cc38d87fa8f54c8246056a9446b00598daab1ef7c380692890213e2421b6dc575c23feb60864504ce8bb5da48f4b98afac8e27eb2cd13bdbd1b5d07df11d8c1b800729aebbb0df44f12efa598216ecf44665c9fdfb71a9ed4e9940a452526291e8253d7ea5328a5e73eaecf991053a89026abbcf7ba0153b8ca112af0ac2a62a3755d2b7ef86512b0123b1e4914199a26e1d95bec244b605dc391bf1580aabcccff02dd15e286e929c60cbf068314697647cfbea319a48600106b478c1a9b532d4c709259f21bb4443e285a82f1b1874eaefae1fba880ebfd1e2863a5d1c62180939108109c2f7d4b2c89433513e4438b985fc53c3af7d3896e09b669bc87324c51494ff45384f78504286d9c7a8f247af20532a9dc5daf6428dbb69cf8c75f424b9466387a7d48f9f0ef510ad45e21ebd059603e0487378af1895b36443e44c132ce9ff74ac7764c2d5889d063e2e6e770f6560c643df497da986a46720138e6dfbd8794205dce7175f855e8068ecb70c3c909e22d84fce915a9b256d39732db1fd251507eb02f3110341c084b29007f583cf30ab1b21c1e1152adefb15c66819a7cd847c1c2ae2295abbff0a7ecf07ef4f57ef705c425c81799985255e56a52c2c0fc8e4fec23f10d4302642c9a6f498c68f7b3ead26ec4e816762086450dc13f10014d1a04ccecc59cc7f4d4819fc4fa95ab77f87e5b46169e67e93e3654bd9127fc85d07c15acb833dff9807be9ebe9683d161bc68edb463dba42d6badd1fab07163aceff0cdb893d49e337353ddcb3fb1bdd61afa7bc7fae503c8d7a7843730c109f76f8b531f472d21c387e47d52d2b57cc65bbfe765ed5f03e3a00a654e993f005e066b7fdbe9d7a1d82b5b03eac461378c0846c6dbdd0e3b2a967ed52c6b1ce8af912e778688f419227043cbae89dbf899f58eba99cdd01e90f6481691da3fd4b2a6dde9d60a24d6c1d64f1ade3ea04d88ea23423acdd24205b1905ff8622e1e378560cad141ffc061d194fcefed76a0e6b7f58ce5f0b70ff08a115ed7bcfecf8b875721e1d67ed8e84141642ed2b834cbff800e32b7855ff60d245cb4c2226d0211708a6bd862baf2dd58a84a333ab771b38368953e5c272d7988ff478ed2f208ad78fb9078b8d6906a38443818cd65b374d44f717cd57cf1574528ff89eea82ce1bdf675c049811a12dff5f7428e3574f0967effe8fab2bae085e1bd3d20e89ad88c612b62d3911b329bfee1c4e1f3dd4a7b53f8d5a1abac64f0f4ce762abff210ff5ea22e13971790fe90c50b3c7ab2c427c79c498ae0a1edbdfbaef08a89454d14a0b621d8572fda000a5608e295e72a11b0a8aaeebb4d636db85d2e153b98ff79cb3b7713db394e4e87644d0979f3f2b2cbe5dcd10cbd1d9bfe1a14286e852464b1c12adec87ea7fb339fb094fe269c0afb924838febfd9ab72d961cddeb5194f0326a7e23818d88ccb97b9a1d7727e0475da26126ae053e26ee415fb0c2a04daf94812750524a82f82988592b1fe14df53a5c24c7cce4c5d97dbf390951f617554daac54bc0735ea9e3e88bd1dac066a08c47c70217e5e8772bc4bf8f0322783d86a6872754bacd114b8988af100995214cf369cd618ff6234c0a8b8a7c4b38a1b4022a14937884436b6973e04bda2c13362d88cc28542f89cb3cfdfd9eeb7f739cd3c11421ec4846424d35295ebd0f577380205a544eb31f480e6750b9df7361d04d8bd312eb02550f391db51ff98fb7a848e351d0924c5e8bbc3e484420eff7fd8ecb2417b6503339f0de7d57237437f31ad3d6175c119f5ade5ccf7d4436a17de70881c22cb7b9a4b259d529dca9b5b221c16164b5119e7b0c24d5a8f3a62f5053c43753c9b8ee7c2bb7990ab3c8a5850b94124d62a3694e7e3a2249b207b38c6ca768393f1c8751e915369a7bae6e57c867f90020dc42521aeae48b536965c857c1be8b6c40e3489c6722c79a33e5c57718624559d9c2a2b10bce203c1c21cdf6d793e264ea939f7229d62d6e2bbe2a7dae2d88f3da9665dc3a6388dd4ac8f07c23c44f115ff049219c059753a2610be53727282550512133cff93c20e020562e9506b4575e89d2bd604ffeb5e49bc7a4d68bda7e4d9fa61def525c38d516bced72f124110da56f1d431b6010e6ae47603579f734d402c7fd9a531208da7badcfeadf2f4ab9432c775fa803202daa79f65625026559a372c62c35060619809133a41d637782d1a77ca9a4c5d260b606bf670bcd5040327e41bddc8f6b0f0be825b1ffe5c9fc36b8b698fa1856623518e0104ccb10e9fc2aecd510ef4b1523bf6592cbb36e058cd1406205e9cd9c870f22e376b749eb115ea8f4eea3962724c74414635edfd54c279f133861a7bf2bf223cb4b652c99c53cdde670a39f1bf0058720006017740f5e56763668d28203b4c5f4bf5b0a94d2780068aaff991e63858c786aa9bc3c6e1d6979142e78aaf8e5bd7c3373d4b349167933d6979ba14fdfb3720079c42afeab06df27a9b1617055141032f6a827323bc101720d09b4d124f651b174a1e66720dc2674d60e6112e3c88ce62cf2ef98053a04e4e2883739535edda4e040bd722e04341ab911cb1d25271dc3d2c9bd8ae07c2e953318a2255140deda03bd4553c425fabc54b5a669a3451865d9eda3e1aaf1b5149b9070fa765f2aaeab23ed7a29273a90fe02181d6924940c35a3c70f1053126a353ff9f089a54d2944719d4924430cbb98da93562c93e00e63e2e102fb1ebcea94744ac35cf9c0ae50d86964043a9bb104edccdd237b06c317f98e8e1c88b6c9cbdad384e8e17102e954010782f12cd9423de0aaaaae1a48838432654944edc35d75aaa831bd4f843061bdd49d3a5493243cede2a07c65be3ec572208cfe9ef00eac9715c29acb6a21d57f0f267e610dd66813781c6d923838f9dd3babae78c2d274d83f635bb7eb87f959a909aa1bcdda272653886ec3c09f7d9162fc101602f2a3548627f281a77321aad3ece0bfa07acf0cc7ba652d4141271f9771dfbb586365de23b9a642a2adf181e8bf3a65ee671ef711659d4f988c4d8209a4123460a9cd5ce11ba01b2717f9a9e5c00675a5331c8066ea8a6792bc18497907bd22e76c28b7352df95d0b826ca0f3642e44583461219ec5d666f7f65c1ae93db53c4dd2b43bc88be03c03ee4e54c6f6b1e4a3f30364c4053942a005ac02573b8b17723a3ea937999b9e3c5a78d19d7e34def53208137815c5fe60532cf195fa0e4bffa35e82b74df8c14e6ec187243729bb57c68d9c66b0d48db68bdb53df9029e52918125f6546b101130a8452941398df050f2066582d29f5d01a1800a8be0b458a9408457b01819c3f5602c82dbb8c21f24cd97c0d221f4d44ad514c93dd9ce6893edc757b8768ee90e7ef775d20473749da3ab487e27052fcc90e848549313ab52f961d319f61129509bd403b8ecce56958607f813c0039e8a3c45b1600159ed99655bcdefa3bd9cdbc176483629de6e3ff21019c32d6c18df776ab5ff437e1f94953762f5840c9544ccf44adb2b348087e46dee80d3551eb2f441cfeb6f3313bad310ef83abf7cddc63a9f43175e86aa31b4a03449c5ec58700bbb1dce1b169622dca28961ec26bd5919fda5347086e285c0c45d9a37767c15b28ca5060c18adf4b7ace0d44cafe123d26d666828b32e2af2cdf55547748da5ce208d9963c639f39367e5e6ab64e8afbbff20025e989c54bd186aa9ed663cb59aa625e6d879f38846eb2398c159f334f010048662a2ed94a6c01c796f5428adac1ff45f119c35a372685079f375aebe33f9b69a0490dc74cb67ab7863451f4e1b8e241f64393c8e6b5215960ba0f9c8b85cceff807d6a95075d8b1f834882779e2e24d5f3c9a5d03e30a5aafd9f086702f2097ba4025999c092e546c732e8e1db085246f3dfbab937c62ecb1a32443257d22c1a5ccc7ec86bc6dd1a1a57d97cf45efcf647a7f8af3d7be996db53b168ab49d18c9f3ba8b0b0606058e93d8609200bb856cc5de02775d65bb0fdf53b2a519261b27e52ccd3e499a6cd8d83bafd5e5a7bc729155be6a74d1dbdc278fcb22fcf3cc5816ae7005fd1d0cd96ac3ca9230ba0212f2d421e70c80810d4197c7202b38e1c9b2e53112b813d290f6439a0ffb0d7a6f4997790d07f7923aa0ce472aabfcb17ef20903001e94e0b1ec7dd48b6a7e89454589b41275cb581d042a2365254b5700a91546fef83a8b0372fbb5c2fab84d47d39d9c6accf2fb93bf747d56a986fbbb386c046308d588a9b4d25369ece73511566cff4d000e524bda5e30a6ac86fe9e70afe9aa31d81a5542aea991794ffa7a8a4d3bec67be7caf1808cb3291a2924f54f213d8cb2daa138472d833faca26df6a8e91d0c3f44b3717fa76ffa048ea82f2c92abf1d6b08a7e4f8dd26d6c2b44950897a41a11cde39aa55b59b3995026aaabad2bd55e7bd5f4f9f32deeb2fafe3fbad60ba242a35316cb07b813e4889c2530a781ccea1134bc08596c15e94499c5f59eb1f4a85b662efec4a8b0de97e3bc42ce196b440c70100838ad760866901b687051bb3de68ea580d58b5cb46de6b923229e932eb96e091ed42d15ccc410a76d0790c75ce94486a16cdc1a7a68831f47c82651fac1945dfcb66a08f7376017175fd661da1f0575e614428aea3d2d1db03f6672231960fe7ae7d5c36f97182eb6215c5d797768b96c1010cf7ff0c7c0a3727bad75e51f6e80baacf88b076e25c9abf2a851c553b5755194d870c4cb7ab62a645f7f1e051b5714d115e320c6fc2d84eec7b305efe1e570c380ecbf000745801f90926d4478f29eeba7700958418e1172341307ca13f6c129f9a1ba7a986052ea4a6c2348ff02012557f13b1f1cfce34f61dbea47fcbf01bb3fd3f5fc08cc6db804a27029b251ca23ffa991b2b3b823f2b1614b5dd271f160a5311ded64a7659bcbd808c341562764e61ab4f71fcdecb9a255dc1eea58597656308626cf1736b77742a2911df96a70236dca773fa8794352fc2f8515ccacd3abc1daadc5951c80c8f4a8c7c14758c959ad4b4b4795171019b7133487b602cc2fc3141dc6cab050044a20622219d499500133a5fd59470673ca93a1c13bec400a0375513690ffb6445f0c248303348e3cfebf3080b3752dd1d0d5f3367dfd3d21f9ff67eac93de39d8e93ffb4a809e5ee5d61d75ae99fde3bb72d54ce66232c217d8f1287ecbe239489b0297b05c1ed48bfe5d8fac35c867890eae2da43d7e9861584f028942294435e18c5fe241d69a879b77e0df0281c05511b38efbb78f6e83efc4f72cce6b1f4f962936d1a05769230d47168296eb16090f15d6219633db81a7f907e6b3281a668fdaa8edfa125118d0c8ddd435a7257e6fb618359bdc1d5eaef5f18842adb9df9d6d1cb47cdb3e86345c5c8f7afe24dfa8a450804d92972cf1bf9d4f658b0073bdafc27d8265eba1107c2539b67845c7dba01c9cce70d17331f89587244103bc1c5db7b835ee7b3bb85a7d318a91c6913c3c41884a2908bc3ea86350f73f6a093cc8f87d3abe91354947965305d677e3c888eb115e099f5ca6adf4d31e86ad5c1ac53a8dd70d1b7616de2ea5c4bc3d7cc8cbe6b24585a3283f68e7d25f9e29e47afe3ad04f39d95627b84024bcc71d59cd7b1b3bdb14f796acaf41dcfe9904479a4e4720afa75d002dc561444a65acae986e4212ff92326a9c2e9c057448e86ea1ca0cfd3f2fc4fddfb8e10d5fa3cce91f94619b1cb82c1b0bf3370f8ab88c4dd5b161bba2c9a43cbb868049b686108ed0fdd9511d40e3857abf92ceb34f581607769d5b204c4599215a60ebc8e02c02125321aa7e6e646671572f46f4d503ff7d5698e04e62eddae832af69b9044d68dce05aadce3de46f32d7f00a15b564bae557fd7dfef90bff242e3cf8dbff4af90aba5e2b51c59280c7bb8a756b89f6d767a19127231549ec7db80b6dcfecff74b995a49ac12e0c8f99f5581c5747c165d09d21ed0a81c2f57cdaf6fc7ce507e43fc727b37613a08fce1ae4a2446877bf948a7da327611945455d71e5982f2759042d324c712a3cdaaa90b5881d0f89d94c71be5abb9e9dfc840c7c9d7824417f0fd8ddee55638b77980c3002909ce33be9f52085d34d836c07c568807b1a4e7a5c8f0c318771c562bac2da614ce212071768875c1bca262366dbdc3f6c87f7c172a025840fd419d239e36950bcba386db8d0baa10574938072d44c2159539b49e857210047a4595091438d09b9bdcb84d4fda26d74fc519f77ddcdb4b7fa41f6ccb38a9fa9478edf9364e559eef5e3a39ce4b645118c759d314597b5181cd4366080d0fe149e550aa2db688705f5e78dd3341a619c4d57de3265f7b00ee086e5119cd31c519889571ca937185f14b343dcd1e51e389dab1027acfe95a89d00dc755973248a2d0daf88a1e31f8ce8de4227c5864ad2e4656f0124623a784d19c729c612e162c25cfb59f0c50a898cb38f5715ab2306fa1e0507098cd5460b592d7977515aa9961a52bf851ca116879b24896762275884f2633c32c6cf1a40789dc598a2b1ce05d6ccde6e5690cc445ad462d05aa11020c0afb3408cff32d332b9859f78206fdf5a73130dee7b7c2cdbdecc69dbc8b4ebc3e2f46c3e4246cbbc3de35200874fefc633707e3236dbe853e916ae4a6392bdf7396226121ceb9a7066e2a34a9bf2e02b2b0949fc248077970970ae1e1a5e5f8ce25aef84f6af6cea0497f25586acc03a697f9a98d0dfda8042b6b7d12b290b3bd71febe864eacf4ad45bbb748e4596337b123d5794fc300b61cc229c7659664afa13e37c579af4744bec1ced547ff2142f67a79ca1e404390fcad6d2dc11ecee0441b16a308ddf82813f80304a2ad531d7c420f9f5f547785e55d5e1cdf02eed507809061a72e21787168395e1e84f65450610db67650531281928964c0145e7ce879261b6c8765f89dffc34cf0ec9a9ce3e2c2ba99532d50cd094bb079c2665fa348a414ef1bff3a810615e423b74829e0c2a4e7acacc3c4e2c8bd9b314fa8dece5348a9cc63a0a59904b6b4bb00be0e3c22a51f677ac662f3534738db64329771ac760ccb15f18986f1305cb8aea24703f2bc103485402dfbd079c2373328395a1670d2625bebfa7f5091ff0764b6f9bf999b7587efd8f645475aafe83a7bf829bc0d6ff136461cfc0d7eb1d4ef3da2e5a4e06504a2f3c341f6572ff4418b5a4a209756e92f0ad11d605e9e232f066090e020e8a830a3f950804ef9f3bfb2c57ec663ddd023fe05718adf6804373fa558b0b2b1aa6739e3d01d95b76e408341ce07c14a480c8e1ba450b8e976514a9517289ac5e52882a308977d65b4cfd1eb4e8236579965a962945a5d3336102a2303d0eae5205f838b5dfc57ee9fe1eda7d080cc860b29a337be60b25242d6385ff1869fbd90de08f62e83da85434f2ed3015fa3bc3441f00cb46aeff66a1fe4d11c7f92f8387316fc4825e9b59e720bd07d7b0ac5d5c19785183e3a3171844047a663f0595f67b4e6a11db3e26579fc1e414269e49142bc40cf643c0c659b988147002cc7a00b65b4ae672e5e2df36205c32b507075f9a1455e66c6677f6229b90f5b3ead545a928e88bd68455d419f05af4dbf9275d4968473bfe5ea635803cd1ef0118fec459fa1bdacb1a6885b6e0bc5a4af48b2fa809d549eff48e96b5fc9ed1f2dfbf7cdd3cfc78abe68b7f746ee38f695bbdba7a4cde097c356209b607d5a9a26d0c0675e2ccbd05d578c3ac99820b3171f10a7cb3f9c95a29e28aeb4a704e271ee482fcbaad112a834cf4991a3ae2dfc7f04f94eaa6e8f93bdd15926a6fc98f7eff2b34b1e372c8dd51ed08a80395d05786383fc600ed39f7a76cc2e0e1fba4e964af0c7e48b49b5527cf8c7133e1539f41767078b36a26fef7d6d6773a2f36a67e78ccd2614d780870cd73f439859de21b756f0686cda5605c38c23fda2216c0b3d2379b750097445755c23755bd8285a9c17670b419daa39374b42822528651e17b2844d0fb0a7dd11a4552b8586582ceb80cf45ba6fc939d8d636879b9f0f0ce72d481d1c38b7ee6e88e9e1202d804ab9519f7f44f718cc3b9f1a99b90a0a28d0640ec5e5c8f1e6a5a92cd1e4d368b923345ec98dfbf71bfc75ed40b9023412def3ab8871f032b21c9f0f9ea7b35f19e97bfa1c25a3fa6367f4e45228151da22a76d68378fbdb632cba0b9f8f3b76cb9d89d1b5e8c820c805e410dfd7e87bf7da847390675bd6c2ef883d40683698aa45a0c9172a59ae52531981a540cc4417fc5bfa301f1864e814c0fc3330084efe7f5bdff29f1a9bb0a91896b65bbda76fddbad9acc9990701813a4884c5e7428880dc5ac80c9476864e4f28783de9fc4e12772ae7e8cb4bb94fa1166eeb4ddc7f8e78b629eafcb79d37bd0df12c55ba6aece0f0e83011f7a7110c5e8886b6c3a26747b6d4019f24d3d74eeb6617db185ef8f86552e09d392e86b4f703ec5ddebbbff4b2f02ce4650eb1fc774a2e8b9224f9617f1545c3f883ee4d4c8c2af1439ee3956508921753ef177d6e67fd3e1c81ec2bf39abd58af8e448ab36b47a4aee9794f99155ba46af915a8fd018cdcab06b8383e4a7786086d9ad970ba0ba301a95291133836f7d5a8c88257d3000ecdf0da0faba903ae1560978b96f0bca07f4448eaf82166446ef47942ebf068a5a4ed6e90b7f7f4d5992204b4d5f6eff42c86e07d3c98d61d7eec6d8187c38c4c6ead1b865226b3a824e63a134d7676aa877bdebfec02a8071ba821b0cfcbf9bd619de4c42b31120644db799bc9c152c436980acf697b74d82a4ecdddc044e8cf39fbc9e61511b22261df9544fb941d06b26814bc83cc9b045dffebbc1b760a62ff7363f31a544c66f141c2c4bd49df653915585e24f8c4f9e5f93325a3a3f59785e479cfd8a9a9bda894b112d1ba6c5cb58973cd605705bd9b2d1bd63dc44589d9de49a007144852cd2329baf77481ad30ac221e2038ba31bb06f4b2889a4c707a1b5f6d9279a36fca0c4d415c50b583b652b9f0fbcd56c38ee9165e46bd4726006f12ab041fae50c19f4a823cc8ee898ff76999267ba4524fe45988d30d0f14102a994e1a7a87e6b36749cacc5ee81c809321df9da3a7215fa8da813d4ec976688fa728ae46b0c79c883929a8b16601834423bac6ed2c6d5836e907f62d2e89e3157aa9e3e27c40c9d81b25f0653440376c558b41c49f80934e01678a6ed96e4592248cabf254661a2e1782819660810e0595798967e4f7f93bdf9fd001a81661819aeb7d56912e5720125641a19035f587cfa656b31a18327889c5fe865045e21262f995369f7f29fe64c39f75a6789399940f68cfb29b45d0090940bd7beff7e49c7c740c89ad0a1a72acdc66a8b6d610bdcf2cbfaaf56524b6df228bab5fb6e6788162b254d7a95f04bf170668d5c66b2527993c145ee1ff21593e5d02bc7d8cdfb56be616c945a6eae992c1ba32d8a0ac63fa7c32c1ed16f0ad4fd622dc0644bdbd0180883f1bc7ad4b4fa51fdbb8791d6b0b0bc6bb94381f364ce22c60e7194d934454e316349c5b0abbe365c273d1d530f8961b9e9c2f03a6c528610fdeda61cd53095c5e46848334c9e274f5770db6d0838768e169cd4edea9a4b962794d82d4e5c11a60073af574c68ea6b02e0d98385922e313beb67006b2acf410b115f56558f399ba5465c4aaa5e16e8a2c56521b66dc015b59e9cedb3a83594f7ae1db98455a4178b11a052353c11356503b3aa42893db90cc525c47412f2e81666a3b57430f367aca494f95a4acef0490f262fd7599301f4683a06463532d8bd3e38024678065089edbed9e2c8f26279db12d795f318a3ebd0ee4995b2d4672301f2ef6a425e409b72dd604d53e286af1948c873b6c36bbcd071082bc55e9e8da302ad2cf3e9751cb01c6ac38a2834d1f6d5e48d3c385589135d6caed97167e4eb24d6a74842c34e9f0f1b9016a16943338ecb52b4f707c49019bb9c61829fd2e714e6c49fb5c5be4207ee8eaa14ceb6156f61d74530e28c6b60518b61d4ce9575aece4340cfef1cf8edc4e8e35cde23750cf01860e233e34ab9279227b09e86ec2bc91a71dca76bec5615106477e53fca2bd8674e26dd8ba441c8892c55aa21a4715eecc635ff70c0e7fa26e03c52076f2a354a1457c0c56f8b8c4ae408d949457addb57a8b13c1440f646d1a0086b46479dcc8e2198c2010047e700720e3d871b270b0a5b04481f95f385b163da5c72cb306143e81f3a4b0c9b8f7fe9e6ebb514e0467a4b55659deef3bdfaadcee6852cdf76dd411de318ad04f79dde92b28651f006d69a0eb835ae41316d9d42720aa5e628ed4fc3a204482aa7c4c9732dc7c659551839034251936ca2c6c11a46060a2e589a2a72780b7b3551a3b43992bb914939c6075950903c96f1410ba8f47aabea617d8f62277a6b689e9b8bec6a93c0f2ccace96f0b76b4d8e14bddae0c67430ca2441a3bb8683c31bb8f47fed02550c4d35ade8114186360492cc29a2e190635eed38c8c11bf0dacaed456cbe2aaacdf624f8f2c94dc4474d1587a83dbb95262bbaf15112c6244a30916fc629821beec73b8e6d93b62a5af7e6fbad6a46750fb673ef6d229f31599d8cf23dae2cb520e2cf8b88db62443afa172e59071e428a957c8a483887cc1d092c025e73eeeb54ef213853908d836156b647c3695463696149238362da13b6dca662035708c117f5ea4cb3f98cc3de9cb782dd1c51447c4cad40c1cac22deba8e6c1c84264fe1dc108af5d96a3d568c7a62fcd7f4783072942567654d4597f12affc1c9d9ef0105dc18b4e968f7ea2c9eccf63e6b2a5d9efd7c5c98f42bf15fb441f22a7010f27455c497f276c031a343de05f803efd97b5719d173b8bd8be3e471eef622460c379a0636d1f4e84e22c9debb1a9d2fe9e15f253239fadaace1d417161b41df92d58bb09fe97017270bc6b09138d826b0da2268155e34a10fa990d8e1e883a275d0d4b681a4a5329dac3a2797507b4d1c0b6767f722f3bcd14b9a714586cb25b4dd50ce8f28d6c569f7da41d0405cde8f998fc3672412fb472cb160646f31d7cd71dc44f30d60a39b97367c12e3c15735825c16b458dba45beb902d60d7e3ead942f943d51652cc6d3869753b044d69ab700e83c1f55947314f17f6534266e79601c4fa1c2c71cbb11db00846ac68e1ea48100c3b90e480c117158ed38be5bb6d12b301ad6de3b1906c22f605b56b062c842662a3a9569a48af68599fa61275e74e25372c5ba3d71b430d4b7dac91537d0671305077cf4025d4fb29d709ba05b94e7ab4fc5264116e690db98224c005c406b245a38b01aeb0f1a34fd928c4546256744d7d83d2af0ea33cfeeae8f019da61c3f2624c3af58b84153348bd6590865321581a579735c2c95fbcb34e110a424e6f4d6c3ddc9ff1c7c81bf301848fc5125325987273aa469e1e8ac5f38fe8dabb49dfd898ea444a17d3dbd28b288a1e603ed5e0d61927701d94a806604783abfed2ace4227703c50a571977d76d9421704d55ac2a19ee8ec83ddd068f5e0d233242de02b782c3a37f364972e4369df487147b9e1f472dcdc048ed2fdee2d4612d95e612202e67297b23a99492c12379de396590c82d3f18e4052a5de3e0b418e2b4036cc2204aac3fb4c92f0f47f62c396685c1aea4031b78bcba557a51936ad1e6ea7cc523e74befcba948281549ccc7f8fb305bf530bc5949420b37804ecc20405f7fbda71ec28858eb82e47cc5fb92d5af6809be67a072a3fd67f27590a0836121725e0c475691f5baad77a9d7bf81b7d0dfd61fdab2f8156a75cf1a7c4aeec14f5d6141cd029a24a71e81ede6c02a1a958eacd71013ed5776c50e990692e081ee448d956d60a5685c9f2da5daf05b5a5ecf98145fdf543f9ef4853681f596be16cf79f83c4f36f89721b4548e33d29112169cbbe95a3a9e214b49463d265150d2e66b3fa0519bd57e9187f6642a5c7bb66d52070e5a2a2caaeb176003c9757e21f6cb17f4e63bbe969b2d28d28d776b240b741755818b6595e6171e99bce6526f3a6a5c2742683ab501d7a9c5e171fa15f6d4598a2b1b508ee186446ec4a74702c612c293442af391f613428922a8beddf284f2a9a48bc468b06b5528b970b327bc99a4d2b82b586f4fa0fc698f98052749bb207582b13dcae846d4170e5db6e30fa422f81554953c21361c2a1bcba85c39d59a7f06c5166d81f4809f3a7e550f3716e283cd92cd51e82a9bf92b4ddc1b2ede9fa02b8bc16959276526ff724fe8d734ea5b7b1b41ac79697fca35f865bfa827319ecc418bb03b998777b370c2b40e813e4ac9fb58ebd0874e29b612f7aa6fd8b4ef527c0245029ecf3dede2db91bc8d2ee68396a641980550811bc506397469c1b5b27589edb59bc5177bf18098ce31c796b59b0bab76c6acd27a8edfa83ee806fa11140eb4f4dd0412fe7518606df6137f1c52ace8f67510d89ebf268f4ce81885d1f0ef3963cbe225f6364c6a097658f4c3961f9aa4de196e80b0396b1b3f2b90b2627ddda847eeaefcaba88fd1a974ddcb11a2c51b004b0bec08e3fe5670dec54dab30b858923dda90f2cabef79374b63015448ac69d2e22425e5190258aa298960a41fe45bdabef5a3053a66caa2bc03c2d42b64c22e70de76161d68099c9d5ab97d0ade014d5c9b501a124b9b15505de4c9c148c927a697d903326f92eef7fe9f0bc9a7f93c5f8d215c5d7f0343adfc299c39555b09bd198fb095717053bd404b81a01f6067ed3350c8d3f9c73472775fec04e651820da74fccbcac506d120e4e9f856a895a3285430d71ac16c052f1e33de27407d928df2bf442fa5ac1c8a72e41f336973a7427178bd71307a001ce7264274b436c672d1273fac9ff084c02ea9894333c70fa5284b68210948f3b40325def06e4cd28bef59cb200b442fd2829d7a0b4299dc84636c027cfcf57b85d75721675e1256cf6013219c7e96d92056e9bd6ba31022a8dca189ccd5091044c84a8c422d43ae23e607042027d3d39296cdc4f8ead776ece05e0e8241df844ef7ed8399d4b7ca4db22768d3dbbdb8e3397b5cf9f8bf24052c5b5c34dddee77090f003de592645c2d0f0fe1271588dfbf1bb083f0658f7894b6a31de9daae9558c57d624fd90176a183110a3603843dfa9008e3455bedad0b3a5b9099bd25b0af151beacfc89f087441e1804d133a8f18d583eb54c3c6241c8dacb75f121a267e90fe4ab89f3070dd63d5be443565832a685855f666d5df4bdedd882c86b7359d7fa793acc04a0132fd7a03876877b583f7830c9293fbdecaf3a2c604f0531270f9ba46e73d50fd79931ba6ec0d690d1e7fb1e80800e6a4863e527a64260ca23f3109186358b65c3ca0f60fba22c1926b560956938a65721e4a9aa21696b84e1f3bd6c7777df3aad1ec3ba93c4539d1cf2ee39a9d9dc3cac7dc5b43bf0b0edf2b07bafb5caeb735e54f3cd9aa5727755c449659d6585d52fe4543da2cfc746b9b4bd951b3821bff683ca165b43a8f81792b19188574e38691dd3bd9c5aa9461d008ac22c4f10ebbab2d55109659c0415c4ae2ec62a23e39148764caf4bc73db055d3e0618975c782274871daeaa817115c498cb254ae633196ecd758a5ce7c5240ca8a7d76a02089cbffe5f4f44f2918880857da7638067e26217c23f5862065f57b73f56e7b56c62b4988466bc0c17ce1ce16256a26d3a95c151985a84615143f2c3c372f69f36082a2dd1805a8f665ec5dafab6e4c4c861284f8ab830a4ff800561f4d6f40e9fa9063d05b13ef3ff283e4d30f84a062f4ef6aee26a402c80778300db3929df2a974526f0c7e91d930161feb3ca3cfe4a78ab94bedffba380cbdbb2f02f27ce43b259750b368e44a0419fbe224658b8853e3618a5fef83d23c720c8b8fb19ad2edbb3de634370f5bdf8f322325464b2ef43f5dfa1001ab2716a2cb65c689d3c4ec7ecb2c4ed86447338d43e831eb650d55c1ab6efc4ef5883a3053df2fb61827d98471cf7dd0def86884730dc43c21047d39d6e094cf385c8d14b4d98fca7642fff6d906ea05aa8e16597245f780dc6ea09d7c090762591ec1edf2f5efd5862c014852071bb412116ecad9ba1f614b519683a740f148b8a6ed324ab4c3fe1c4927dc898b68116f426b7d133bee620c90d3eb886a69d3093b1a9d2d7c72e62576b606c3be10f4625bda018d5bcff20cce04c021695777c48c9898952f49e4d3da4036eb3ded9c03fbadf12994953a1d2daeea826b1e6618da26b5e90685725d3245f8f5fa2ee6c2a34670863c6b305fd596e5e0c1d37e767cc154d5e1080022fe7088e366b09ded9a19e09d5bd9bada5ad1e039bb747da7098f06db8fd5851dc4d09dd54efcc3c019dfd6b2d87e5b08987ab2ef14383d1f977ca6227c06d23fc9cb8cd41114104b9a72b7d43f7f15c13adc3110d86dff9e66c4a6b99a54585729a9c9bb5cc4110494ec6bb3e472c3ea44467b5b32456530b19bbb468989708e05ee8a2d6cb12525a07a823d742f88b9a1c0e1ddded073d3b7e220cc5de9e0fe7afd3b597cbb6935d0dfb3b5b91395106f9f7664013d5168ecc93156d4d77f26bddd8f4265e534a6f256d2c2b5191d1e6f7258b9f5eb8621843113f4f735f9430205ae894aa76a285633eec6ad398ef683903843d135d54d5fb45ebbd8f32c581e0779a95c214e16bcbc06916a291b77f59ba0405083e1a29a645f8f225caf753e82cab04c9679f479cfbc418adb13d20b9b5a2079f542fb820688296a4e8ea8607516bd99caf6768d9fba8d8b1eac18293b37486dc71ae213ef69fc64d4e850313dc9d6342a2892764bbda0dbc3a33e46911c2d080e05610124cb6d5dafbb3feba2fd35c40147c8a3f2fc9f1a55ec999f15f39ebd3110aef99e54da1e6d92fd8850a0aae127be4b5b273e6ea281e0908c8aec6005f6bc2bb3f1f3c466e6eebbf0d20cf5ea9bb1cc09dc54ab4d1fc762721832718491571f0e183973daabd19a25248d9a3b824bef2cf1ab48a21547225c23e85db2ce5b6463d09dcf75902f640b127873358c0ffa75ac87b4fa771635dbb2812e330f1c45400d4baadcb709fd0ee3c717e5be9ab641dcd0fca28d7ca5c170e2cb0c21435ec228211535c53ee4149fef6561fe54e0057d30eb75c58de0a8e74a3ad642a42b49cd81b656d28aec9cde9df1cff755e92035a885d9359ed7ce40c172fbe65d743f436bd94ae4c9b207d31722d268aeba534546428a678dfa542c91e806a4baf45f90f1c57fe689514190ceaf993cc43a1f9d9eaec3c590be832dfabe95001abf80577e4304e7677a751f925d9af23150f57655230ae113b61c26adedd2cb1b8c6cce63e22f225d651b9efefc8893344f391304d285a6ef61a254faa96e4ffa929f2f08b8efdf5ebf0ad71f469696b5f65ce39256467e77256ed98dd3ac72df7fd4d6736553a296374f41375be3602451c9100a5eef6811eabfbc3123446ad39ff9c490de8c0580604ea023f924f95c83b16293422eefeed082cd8e3a4a009d24397f021370706742ce50bea2a18b6517e9b0d358927962d4473a3f3b1f03322420c75c2803e4b90233542911d22d967ed5f3966a94f818f9ee00f243260a98be4c83066517bb24923587f91da7dfa9eab1f7753ce08dc9ea20277b5e0abe9f84b06965b282ba9823c4d523a9cf2f0407274ec94d83e0d77846a365cfd1b33058eb6d4dcb2c6fd17027aa4e8f756c016ae6b7748cc6bd1af3cc80f9c3232f2f5b5ae6ae64de05c081eeef6d9a4cebc6dacf6c2757cb2185d95bcccb4d74749773919aa9ad42b7e6ab22833783927176bd13431ae3dd99b6f4ea82e207d0795115d2b7217148fb82b7d2f9c3a2aab2d3cbe71a5da0753eecaa438d3bd565e7c92c573ce35b4c86603f089103ccc99cac613989b8fe2ef487b7b8905e7e13a25154fd21fe5b60f73b61e3a5979f0447701304340cecab1a31a5ce30919e5740f30a603bc912dd2fb2078fbfce357f951b152f30ef4395adeffeac08e5e7af83760bcc4bcccbaa783c310ba6245dd7bccfce9a7c2be60a6d70e1ed09f01250aaa19fa65a561a184dcb0a167c2641f735f19c6736d6a7ca7149023e139daa9a403fe41f663a162aede10ace21db2d2c8db891a14d70600f5a65fb712a5fc142278adb527049d96d7b6953cf460d3e1d40fc21634a46daacb6a71928ec4182f77311286d083c883907052551af1f442d7a2143559df4c3f2fda5415e52bb0b3d5387b39ceb6418cf47c64add0a6fc33dc7c6de9ea2a3d246c113fd4ba3df5c7a5fc01ccd521e59756d7404645f402915466794f78b3cf66cfc46b99256b87ec741a53706d5d0477fe46ef2c97420a78b8a18decd2cad4daec088d5b9010ad9f313bfa207c1b7c06be9773f0fa2b8502594e26c55c77d53c825fb1de7790fbf47099eebd283d67c997ea996452ed3bf7f54cf754eccf2292d68e58e0f66d3af7223416cae3bd90ed5f2b81bc1afc5f972b9736110daf8fdde94f6f8fc67ac4d11c4bdc818446befc1c47db6e1cdb8d6a504c6f6e471276cc31be5fd617b7ad023c292df976a39b2fe082acc238d8779318351ab3d751e26a0f3ecbd12d5323b1eaa76c6f173ce0f8880367307ad88ce33eb1067e692fb9c4a133f13fc53239e5a5a94cd559a249572907ff823a4b65628dba7530db3290a270e54b7360bf1052816cc4a0663f6d4588a7412b3744aa11e4fcd36a8d0bf2c279e390d2798e702fd59b6aaf5e324ead3167f3bb7cd7f07283ff84bf5952505b384a66421f059ada8b743712a891c71378f0256d46ee8314eaeed2c6ef84ecc6f1c02c87d1be07c33a95dc75ca6e820b9258b2f66738e3ae88af357126b8f41cac68f4704d25c9c5a9dc18ff13a0978007e6dc6a6acc9a0a1bccef520b9379527bc098fe2321177f0ff2dfa78e614fc85fe87588007b905f07bf0066c5a804b90bb534781f332e7750411c5ac5a56991bc8dbb303b3f3aef348e771d7abaa549da047a9b7e9096b7d40460955787494a3016d9445bba613633cf5bc774f8139ed33e76ea474dded4dc004f12ae9b3b9e2148aa9bb416dfd9b8e29c622d3494355a3521e50f9146a6bfb5233a2b850d12e47fe2af1e69851dc7b6f8f9871878a8bcc41dea71bdbd7d22a5d64f297cca4d18429760a0432341a554486e0044d84275c3d777135565ca5da4383e17356fa8f5c9bb6c3a01208648084889d184b8c423308fd3438a9eaf8f2ee6c2dcff9e4d969a9c80f3ec450ef1e6d5e812b7ce36cc2d205466da5a0e4f1be931d793d25c59fbf32afd33cfd28e09601e33f6314ca9b33153ca803afa8c80f91b984ba4dd8b0a7a306ae2f674b7348be5cb154ce4f422983203b09384755a57bab376787fe45933409575a958045ede03e7f85312ada71c65e6b600c042345598a9b08d56b87040a0e97e80945b6f59da0565f332d0106536ddb3f4be14847e5e814e687eb1c3b09f1979aba0d953eec34a05b5a1914183b3aaabb855a054baac3aefcfc958f373a9bc9552a31aa50000d7d6b59789acc10bdd6e40fd330a4ed67e2e0bce2e96e7f4059747f39f4928d7bdb29db91af75508f458d8d621893d1926a1a84745ad57e74c4d77d72f31cea37ddf126eb1b875ebdeca4d677633980b56305fab41b867f01a884fb88334c9decc9a01373a1a3dbe88751d4b148b2df6107c5df02e51d43fc1cc2196e9105c5f6d1ffb12d42fb7c3bf419407ad97cd142ef4d8c9c233447a8ffea9b2b3b6d4fd932a57a646ccf3ab8b4c9bc746a8e34edc967443f30cee76b5e58f794d5cbc3a8991cb06059e6400f484834ec30332f8923f388be018dac843ff7f2edf7d01db2724d52fbba43354a7f586bd1d98e1ddc9c002daa92359a075a56b27db28d56f3ced428a677341d8f9d8331bbb7442524813214e7fb956507104b202438501a2bfca2fe1fa66ee8ba17328aa98fb1ed78cfed9f1213546d1c0b451ff1f271c8744971488a831eb5ed8aceee783cb9413a5c25a1df5c508d8c9857d6a665bbe2b99b4b8de82190d0585015e7fecd654149966889b8223bfc3a702c9da707df9979952242f6d6dc7606bf4cf453490254bcb038e361e8bef942bc0a0f325e7c143a380d661f9aca2dbfa108bd2e1ad2578418de481ffbc297db9bbf61d2438a87294e2b3ade7fe638bcb0f1e3a353d39c41a437e6fe228bd93154b56ccfdf24ee3e4d6f08ecc3c8b4f183f58d8c93a115b2226556896f428a7678ad44da6264fcdd131d2cd9d4b6e7f8e7a9b86529d550565ade3de51ba5b7540f6c8e1876e39058da48248d155c8e3e09107ac24ec6e9fc2d40b293ea500f887735b518977796927026e604a9122a5d016f8ce08d72cf4f63dc6366843a946939456b3e2a8b983130373c0e5edd341dd31744175b847c865ef01022a952d9303a9601af9678a0046de5ce4cbc58397cccdf2228c69f6b19023fced69c79e092418e2d11b316727f4ade02a893780874a80e288a0bff351e06cd54de081fa05840f41d301d6d1acc82ef9629c1392a73a68dcf395ce4cf30588923d63e4d86fb4e64a821dcc00d39163d19183c2a4bec0d6d858bf7c4aaf8f523aa6fef313b83d53932b99ffcf36a4605d0176f152624ca0d339413d0d158dd48db119dc309b79631bc4dc160ddb3c3c0755a32bcb85f407784106fff5720ed0ee4dbf5e125120263873ad2ef1290a6776d61f9f2453ac7f0f0b37aed3885be82da0d5b15a2fd08ce4d8c0bc61092f8e270639c4ee561d51a7bbc90b0fb72c61d689b6ceac428b35ab2ff8dd9e1aead391890a4a662761f765b033bf41ba5ae9ddd18bd4e667e1d5f7d171ae86269c84707d2538625ff4aae26ad83ccbc94efcf4cd53d68239c26cbafd9b7ccf9df14fcfb0645842192bd7190cf0979df03413dff28769003507c462f27fffd3c9f02ba88c56ca0aff60b7828f3730bf66b3a92613466b466856f6e2fdc4f0aac7401891eb2dfbc0c2a7298e3138a8b21da208fb1b509c711edf09c00fd0fa5c32a580a5fede435bc777e903e70149e55a31b0020c0e6dae8c62cd6c694c2a4db8087d5b16d70a49c2911c97c52269ee08310209c373df29641795e4fbc0e9cb8680ddcb400724b7fb941929c9750370842082ccdb623b49fccf3e6e8c62c500f618a36d55f53487e17ff5b68fbe940e7e3ae1350d2b69e8488c7064a605a120e3cde1bfa97d3f01e6f75a002f6a9f2e43e0271f1deede02e33495094c5b4ea1cc91292b62329dc05e274615be264b7920d6b539c72db87ae17527dccd1c1b08799b8a2ed5448728b28a338f32a18dc252ebde9f35e8807ceea63ada9201039c2219be7032383c346bda44a048fbb8594933cf314f9c03c2aac147c07c0d608b15de1f558322215a3f81e5c451a05902d45c841dc2a65b1c65ad5d5ed1bab81baa7dd770ac28fad459f4eef125fa9cf52bbb01964c864b5a440ff816ff74b370fff763882cf1a5f457cd83e5889fcea69d0b6d96698c6b04de83a3662f4dbd3e90cbf9f65b2d9f258120b272718b576d43dfa81936d31ab9e7242975188448b8bd68a7ffce62ad5512a4af061f5de13f4f8e34549f31e2692164b8834ddc76f30534f12a2ee3775e781043c49a2b3a4e854183d24ea6917b08d6370350f23d7199db9b1f1b252c099faca3ddfce6322f0923a8cbbc68e01739a235b2faf41092cb1d39d8cf9482ced200e04f4bf8bc1c69436be01b9fc76da948d71cf55bf0a64d3c22c876fbaa27095c972872814bc0e557ce2e90da65e0adb4750cc32ce4063d23a08ffa55c24e41929497fbb633ea612326ff8450eb252a5dd0d2f2a66960abef754e8fa95b98a157bad903aa082914b585f3c8cdceeebebb1493f73f48979dc87802c3a8e8f54b68b49cca4e760639ff5abeed37d15b99ba69323eb65b3619de46b28015706cd99aa795dbc59164e83398966522b651f41c2b6194415471ff829a7d99ecf1f2af503a4b1006f52f34e0fd28cf0e5da1e9017f68dc12ad43cc3de0e57034a8654070d263abdcfed1251e3675d3b8a694953c1cc68ce4569e403a819d61f8f0033d41f2cce48471c41b20fd41903b19fd32927153a929ae3c9db1681e2df865a055fb12ab05ae9e60ff375353b0cc7d18c71f16278ce77686dc532f08bdc846fabc639abf28bd579a00863310735f152041b8151678733103c5021405b69feaa07181184fca0a840c4e80e92f7e01c97e63dd4767c5febb74c074002cda1474e25ca9041499a6ebd42eb57d470038bd979d42ff48307bd501aaa569258fcbcb0ac00867037cf74d623f9734ab5b636ebd6f3a7be36e0ad5551e8b85d81e61b204749137817ec7126d471fcf4ce76b015b70cd0c017ce840c3ff7a731f9fad314ccb4609d6787f89175ed54d52b2c75ce7ad4187275bb60bd5374cd53495498d06b4e494aaec0083818e67917fc5b3245e1ab665400ced75766ac179fd64c6a5c7c45af61e85e02ada6fb8f1827bb9aa285ed790f06ea07b9f41c173f18ca3c18704fe4fe5b88f75dd2bf843d973408fdf29156759defe14fd4c854d506907c741d14f45e4eb510de12111dd9a34231f2d9f6dc440041b90ff3c828eb635674cdd3fda73c0d2bb30708eaf0797167a0e768aaf02cbc1c32626d0ff723f545fd6adf5347ccd33ee91765916c75371da9ae75b56550757576f2a47b92fc49ff50ed53fef4d0a73ccb71f3bcb4f87bbffc56f1dd8aca381d101469692e0cc51e863c90e7cb896b67150eb47ef119eeab8c88e9a318e12b9ff80dbe80cd61b44919ba92c06aef2a70a36bbd05220bce8b93ad5e777ab5a6bf92d52c7a4df8fedd6b59809a9ac1204d7e1e592b99e5bb90acbd9b6925f46401278b38a18e06532667bf3fa7e1d03236ab009dabef87e8c6a1a95818b79f61b2be0449dbfa1e71d18f1b58213d96f47674ee5a7443630a4ae0b1bda929596b077978b526ded296fff243af9bf9d4ceb8a4822eadd8d7de73b0cae6a48f26b122948a85a3241cca8838d629b40d80bfb6ae37f32507c47c875fe502d2b8e542d6d14887439f933434f2688a06cd172eeee3ae34ef6e08bea8a3b093d2e22a9cacdca9d531b35a498b0cc781fba3779bd0e8a6ed12d1cc4bbe6bf0f50ff0ec9c121c1047d5b16d01b329c1d24994f02e053abee185a247634a97cfed36867772827908bee3a82430a030d25c84d0c78c7e1091dff19232297b9c9739d2c4079da2df298f03751f28e8ccf8428b6b05d81d7bf9756f2ef0c88f0b20f74b66e6fc885143ff0095268db58e495b6c479ace6421f1c0602c313572fc131857ecf1be55f96aa060095c29a72715989de5e7e6a7b365f380faa7e5ab04e48f30171f3c3d51093f864e24b94441e5a5905262cfc1ac79fff8f7775fb40a013b91f8d7965880ed3e6c8117aa8fbceea03dea0620303125fb2e43f5ea2c6ac5ce4a9756e9cf6cf2bc0e7db7a3f6855f9494c8582fd0110f32ca026d98619e99559a852bcdc373730674d95b2c10a83f714accede9af92754fcbf987265d7ba924d19313228dd5f3fffd1a219efc2dabc6e558cc65bcc33fa49249dee8e31f5451ce899af05d50bac5829523cd25784c343d7c1e3ccb4703861ac86436ffd76fea34f903b76c1a741ae8a5c04a35739fb9bae8d9505c754e429e9793346df1a62322794fde0a8a4ff93fab526dfa77842e10d045b26faf3deae9936328b821af361181ddcf799d84df49519615fa663c230fc3f65b94bb8e306138eb2fe3ff1817765b964ad19685e54ce739bc043842259c9aace5d56e88902efe5d5a5e16def3dd33b10c8f9d4d55e5397c24124f51d85c98bbfe9709a27664397d40b56eb09013f99348695586c7fec7b1ce65071eb57c2e4c7075a8e247bf2a7d2ae392a457d1bcafffc4a3cdaac8f29c7f22a44f7c079018154fb390498dab7377c35c01bfe11ab58aa7186d1576dda618f925f7d5f14dfacd9e76ca329ff536b38e8deca953a272bbe5b1a954fb1adc23ac5731c035a3184520624836d6c1a7d5306bb9d35a688e66155acf910f9d079624429f52369c0011c92d39cd73a55acbb39a1fcc0a47e96ec6d29bba0df543ad9ae71371cb72e98f1392682791ef3e2305804479d04bd36d307960796c40be82cd1fc683f82d384c6cc15403279d4e5ab2b0a1c80f171b1b4f11fdb6daef56cca9d430e0c4314a6e78f7ee37d9b20544e3808d007ed412888cd212d58901c2acf7962d9ff00703d1a545551ec8aaeeea12b65738883b25ece7dd211480b2a9dc7efa1f2194dee31ccaf8665af5f24a5e3f57355f17f04213e5ab58e898db6b5acf06b4a16f8d94b2289c0dcfb7368c14b6322a78dca3486d9c5e50c10f9734bdf9251901a041ff73f5ad8559076071cc9a93660b7afd88fcc194b3723e7a05a91c38987eb764b6b796defb2f50ccaaf4173d997b32c21a170f142d6355c8764de782f73e217ff0dc52611505f68976ff0295fec2c6ef08a22a66c1c09a8ffe9424bce2f9df2d5693f89e7fd2d5832dc13bd43f66703bc786e557429f47f523ff7967b794176c132ac59ab443eff4a061f25d1896cec9b7256bda9f100c1ded869ebcd339e485e4a8e194dbb69b15a94888e5d2314cb8f7c05fce790b72de55f1f1d5b20e35ac4278440b4462a3060b290b3ba96b31cfaae641ee5fac2150e4450a2cc847e91d4f460df11803ec4cb20ec75660585ad700d805a1d61fa04c0e844efcbe0683db63a715bdf7524e6a5c9a79faf5613a5f4425869b96c1fde3e80a86f84d9e6f6bc068c71f981dfe6866841074847afa7ad2f588a98db765b57dd410c00919c369852d97107be8b74dcd427f4501fd5660feeee02118b5d047f2cc527a57b971ebfe9f8349d8f10b81bb1eb23738d7db8f1566534b468f7dd9bb780e307e7a02a7eb355b7474258de9ea0e7eb510357d90b53052a49561359cc33c86c76517cbf1f837bedcf01c300c9ea6452d55a9d6593eb4b15c005de46cf9cc856885df69f51a3021d1cdf37a1af65016d64e98993b6e2ffd48e7d8f73b1481f78d1e5629a40ecee5b414af582c4fd4f9b2a49bcd2e9f55d304408048360310615360892638d8353f2f413e3dd0d80bfcc2d52463e8910b26c90f72a9e22440776a8c10b5e82a5a62d37ea3e101891adf17b0a16241423af9639a1f89e203f74631fe919154f963eb2100e1d6f1e715da79626a24dc987fd9e9ce8ce58c40063f2e658d08686e9a75feb4a43beaad44b2e401227907fb55ff962ac889166021626158c018b1ba74684c8dddc6cb118b4ef2a0b4600bc5c74726ff5615c25017c14386a3f132a3629dcc8165f6ee8530fcb667cce27d336a4be86a3583735f8956f1cd4c68c61ca2dc5b8858b9006c139cbc38a49c14db3b32de3ad96530d1afd7b54ceff7d1331fcbbe83b8013000611d8c919eb44f02a6f527edfb902c1f7faccffdea82881fe2c28abce51857f663e4c9c8d42d45af4da180ebc5c7cf6553dc0f3b7bb35d10344d5bd1ea846afbe195db937526c7a5b3804a22229ce0cd7c1708a662c49bded8ff64fe7c64f485cebfc47b8e8a262f0829fb5c15b4980b59b58479b94aeff4608c2f5fa2a77bbb7c069b0dcfcc759ad386c12baee5833ec464df252369bc07a2c8eac794dba716b5657668c58ec82d743656bd41ba00ee07af2cddb9fd981545eb8dbc63d0dc48c55d41e213ccff88b77a987dce94d0520bba8e0c3a506554330cedcdbf5518930f63d1cd04980bdbc04455271ce82276437d1cf3fd22d4d2aa8ac338971f41f4f9d38b264d755382df79e75bcc0469495df13dfee714ab1a33aae6a34ec2427d0abf24a25eac4823154de521addcd48fa6f7eaf6d0e3e6dab3d5535731d0bd3d8f0e41d314b6477b41659f41452bfcdb429586930c981753174bb92f930777335070a0cce175e648d13cad963065356349d6576cfc0bf56bd7a53a6da11a5b2bcafd6af43afd4a4dd09bb73eb2b5aa247f75f3d5fdbb58834df637d73f007b91bf32dddd09f6cbee55ba77460c08faaaad166fbca52a32d61bc645e643d2cf781a073e63ffa7f415101c568e093e00de18b737f4acad9cf0e49a7d5af729480749484902fbeb89acd73efca38e85ef72286e89504eb194fc41242c72c77bd6c4150119354511778e6d3d034fdf77bddc24ad9a5b02caffdde18cbd7911b38265036ecffc8d5d43721511b0bfa5362730fef628fa4e72e3c5a62767e6cc660f5ea28cc3a0c565c368f86745b7cd31745d658ecdc15aa9069d18d8f33883fb0385ef1c096fac6cb257cac5b8f82a14fa908f88cd8fd57676c25a9193acbb626913e02101025ad45c9bbe254d62af94d175bde7926bb4adf99dbf666fc3dae08efbc43acb40ce9a8c913022e2c1e0e9c62ecbed3b7b73f8cacde632863872382737dd5e645ac85ad4a08276afd3cb6302195656f378936c02971a053de92c1419664bf819ee1e8ee38df91a2269af6b9247f36357dea377e906144623f669fcfad96650f0b4802c12b791c31046f42354f2f2b8150300cad2443770bb9f680a7917ab31630d33eace0e2fddd93d3c891ebfffcfc810094a8ecfae1049ac0a2810e938fd2ab9159c0cda5930158b7a1c9af32ab79bc4e0af98b2f82a8d15298eb3fb0e25844c44adadf47a046db9dbf93077deb8b9cae85d23110ab8a0f57a84eff29c42daff0ef245a9a8f4c9c05603bb52773ef6a616f8ba9b8f07a0bdd407f896091735914b99d173a183878ace26f63675454b0b0d2c1e7db5fd1576bae4a37a93c60513fe5c116e383a163768936a54b5970051a6c1f8d90dc0f7e0cf58a5dbf9be056f08e85bff4cc01eb59653a0ceb46681c5b40f2a2017817ac16a193d89a2fb971ea1e2f799da732287a0bcd3c29011ebe0bdfc0529c6b86a787cf1e3139ef10c60c2f06bce17873a55da65b33d74d80f0acab7d91e37f135151dc44f59c7157f0409c391b5f420b605c770a386d6f84aa1207ddbfa233d31d2c87de4185a0e8b6d394674d4f8e23bafabf10c2de6ee1ab78d28c9f1fc588b81982cde0ed5cc4b93e318b13d656ace63c72e8d97fbf6dcd6df7f01326cd0a2f51496d4b2f04c8cb57a399a1382354eb4dc2ff842231c9171118408fa4e14acf248b06d06456769c11c3063e4f62730657758e4996b60728b38ab093060da93996459c6a1b7f60e59655a6632ebdf8bbb4e83d8a5fd21eeddef6f080dee979c155544e573289c8499b2ff303179f586a6bfa51857264b8e2ce491f09dca942bf570249ef896fc95f1abbd2a2c54e41469972e71f042b38e3fb5e4f2c2ab8b1f52b6029a10fc5ccff17c4ad891532258c54efc7e2c88bda2528aa3d6cef19a65a91c255011d751b295ce7e74cb5e9e45caeea3fa119d6c107fa08f2e9654ff50286d497659f8cec6b62bd3ff37437595124b402df5e8226778b3cf4a632b05030da2efe8752f1b9eb2b60f0c8b8d6a7a4643e8e561d0712454fa07f110674e9a003775fe4f7e2907babc8cc0ef4b6a1589a69e14860c51f0f45a6c8fc67b38b3c33c2f3f2d8a0c4a905f7568415e97d155ae9e3a4fcfdf14dd5316e0ed03e7442751c18582e86ada7332b96f605669eea0232ee09f29c35835a155c05aa59012aade8f7f9eb5c5148fb473daf4de2acda34d2b942e859ff38f2d2455c6a929520f05ded6510fb9679c6f3f1038ea20e6d4abd04111f81905606077573ab8d22220bc3e3280a9fa2f0e4c985d59c586e6e51d4ed4ae3b081402d5933dc5ecdd26ac193bfd8430e293619e0ca0fcc651147a17b203a242c70b958b9acc89699d08cd810c72d44a442cc9e57988e2c521f15ab7095d8c612a3ba7d24c4abadefc85f2b92b7239d225503ba278f54a96fab86b8f177cb0a60b939633cb6b71ec837ff74a7cbc8d77cb4bbd897550ea06f145cbd9b436eab031861b87d7949beb786f01ecf65d47e34bfe81449f6e26ee76afc6374edd2d165d572947ab2889bef7a07578224154f1e647c6fe7698e1ddb132cbaeadb2c22d18cf3c862d3c70db4982262978f1d0f0c972da032c5080ebd6270a8ffb6016827ec2db65182566f60b7bc9ffc8f9e6dd62804e9a2f890231a29621832323c6d6f56af97edc06fc4ae52800c7eaff67219c5e3fe6e6464fe697a28f7f4c8d650fc6f988ab80ea1db2d1f17e76ea7360b37caf650e1299e59e63b47f3e1b11eb5d1679abf999132c965ef069af6bf0cf7dff81ddaa48b6e2a855d817946670f064a147ea2345aebd77b533e8821ff35a7419495c86275aeefca6b2b331f6ce7cae9b8d51c874cc9f6f1dbcae1d7e06d0f2c81f7c8ab218c3ed57e74a90c3a66b246ff68fed6365ae9ef0c7e03ed1054e203be13c39c7c5a53639f2f69b22634ea9fb81e0251ce10f0287a65f76f6326147e487c3a380ece3ae032620d0c2c5380e2acfdf6b9fc97ecc8734cdae9042804783fd465a4953fb88e691dee370a0800b71cc0c7b67880c23f6734489845f44f7c47517f09337ea7752dcaa51c1c14ad650097e6b782e2a26590e474d281d879c61773c05b27c1a6376811e4b0179367f8b3cf66eb86d63127ff9e42cf31fb617e48b1d69c4def1fbe633d6ab718d1ec12f67f58ffd23ba2eba16e1a46f6245add0d28b4bef6c4906271f3b273c592b9940cdfa2f453cea38b5f9acb0b89f72493e42e45c1edf32d2ffbd320982a55bf0d1c496505395c93aec287f001b38d7ab2c9fbab46549975a9ca2ba80c17bd922cc62b2774d187c6208d31604113d614e998735122f6c1999e76872067b0fcab5cc70152dad6f618f79232598d32d5765b733627ae851c8eea3d461e32417189b8559a01c606b21507313e536185d481085f60f91de8a74f8aae7cf9fe16aaad40545ceb3db20e6a79dfa7bb0db7f0e01b361ffd20e23a6b536ae42b28e72f26f38c5aacf56af45eaed48728c03a7a96f25d8f29bf691b1fa946a82e4fc22860dc8088fdd7e9d7a2389b41685c37ea719ad902aa24c6c9bb44bbdbed2261b51d2517fd87991cb327313b6bb95cf18db963170374efdfcdf56948f2e7594485650b788f67085f228ca3326ae29c674ca35a932ef4fe7209ff57e960ff0fb7fc9c12c0e735f207ee201ef09e307db46663518a2cef1cfe328e58b44ff2ed54e76f435bc4c7b2133dea54c300beba338b246137bd3117869e0d4bc279b8255250086955265796754afe61fb6acf0c1dd3194191f4e9fb82a3571811d2a8cd3651558a83c91863decdfe22c2c787023e27dcbfa139600330aa88ef801aec14696dbc28a296a705e3594d34c00767243ee1ea30e39a39543bb57adcfad530ee308f361a55471c8d9d96e2a8a88bcc438f745d6cfc8d539080999a1664fbdad021f58ddbae06afe20f719cadb098edbf4bfbc3fe1cf153521b62aa780326e9dbe0abb34b61135c00933b5f5ce0635b02dd22f66a718bc44d232a045b43f9e015b3d5be00a5b9fa79591e8c75f58042f463317f3c9ccc6c2b3383a00ed3dcaf16aa16d4d26287f67dc76084dd02c42510a4bd1c1f8c25120636858a53f6db8f86aa68b646477a1ae254fd0eb101da26d9722f22262091e3d8c82791ebd622422b0de990c03a21810a0c4df7ffe0fd83fec9564d48f2b83f8e7688e5670006feebd155917a8bf0d468e76eef5625c45ae0d22f0520d8bc0bc749f304660c754e1a629ffbc9d671b0c5fd930aa9aee7e9c4c3c750d01140195c596d904fb213a727b8ed56713a17203b18a0e1893fac8b36b162669902b27a566649ab217e03339cf5014789651659b897a0353e086ce70e9194b03bbbc23694f86e86083e91bf14749ab66eff05761b6175ea3fc69b845b64783fa11d491b500949f84d0181aa654bc5173f095ef7acb1385cac2268954cddc10d07eef2b6c6202c76dbcd1056e384bf72da3dee8e895fbdf763410fe43ecd1840d1a2f567e6d21e7d8edb26e319990f9427a268ef1048936ee369d8bdba04e2ea4cfa64c57049bb7bf112460dd6a102577d25850d1a5dc1686de87d8c9cdfad7fc30b0a41ab7bc4e309dba281ea9eb0cb9583cf67e74ce8e0c33c1a1a092811e17df436b1ac520e94737ac6a0c65e8fc13821ddf32508f75776ce5e520b4935c4cf9349c16810e2da32c70083700243124ab09dfc605306fbb6fa355597f92b9b8d8fd4370161cd17f9fa3ff4e407da87fbee116f6abd00468a500644e169b05e2fa7477d545f632841e62b2369732142a6ea5457cbfe21f00bcb81edc824f3b473a23df2a9a08e7bb4bd45025f5648a8ea2993aeb637384de6f8b39af7f2ffb1b448860a2c632426046ef642e44681793182a375f87f1736b22a866003263cd355e1c988076d9c03f57b6b7abf9fd55e3b2c5de14165141bb0bcec56cc4985d429b2cfc38d74435c9cfb45c1345f26a9d9de1a7e60200bfc88cd2c7fea873b0699a023eda17599c03aaec3cafdbf04587a5211d05087bbda1dbe69403b6031681dc4b82383848f7fb3d1c28a28882c6e5c572a3af881be455a7eb15a80f586c260821287aca8772c424829ba52296ecc1244c5db07892d809cc181e48b5ebb6d844db568c3eb2945e8c73726fe72ec0a316068a1796f421abd9cf7d6b2ae53909dd581a293b7e645d33e026799a75b10488e9f02c64bd8534971eb21be0c8c2c01f4ccc4cb1494eede7fd580ebb9392be76abb64bb45dabd5ce3ec9027132d09a1e48992eb1ead6e758f28c73dec11d4751edba590ea0bc814f29014b83a6124009d765b56d81bd875d3c15d17f21d136bc5dcd72c9cb650aebd2ab0fc9cb7911e78fc6ca450c001cb29060bc9ce76f2938528e30aed1467ed8deb5491403dbe66ad354c58f704b02b71173ceb01fb48a01d8fe1fe20157ea1c5e9b3f1cc110e122a234892bef43bf1d91d3e789c2b352b77c48416fdcfed3c2ffd017412ab17b3857ede09005b64ba73b9282341bb8d04feecbe3988cb8dc772e67ccb77334ec331f5045758f41528b363acbc13adc3d93e3f5353f83738df2242bcfda52e016f3979c3316fc66826b26edad31ceaa35cacbb84ee13414252501b86ca23c1cbe9e54a08b8d707d6ab635ee6857ca5f17a1ae955a47b3d96e699eeb351ba263499b0c85d7f0933c4d770c22259836380ede466ed0174986697866120e1b9c89d180c203b6bd2fbf4ff5fc8a9d27dc3f895e3840bcf71aa3de4bbffd522a9b960ecb7a34552ce1a4f0825bba14d441c8729d6104d3fad069cb6cbb6cb519cf29b8f709467edc07271440c6bf35a2a6912f552cd324ed56e2c20f9932425b2bf2c4cce4c9e7b19bc703f67ddfb84b0addf175d4d959bad3c8908c5ce56bed6a45d068251637613d570dfc7dcc80bad76ab7f9ab700f5c61396d8ca3e73fa4c17eddb4b33317999665a4399652cbd490d31039426dfaf00ab60c54a503a7d3eee8e198e940133bdfdbfb46e1ac33c0889b3080b372f4237569af7030162b9207cf9828db3df6ca83bc8df5832d26add33eeafecbd2ae377531b6e479b81f9d79b13bbde761198ecaccd0316efdb30d9fe4312e8769f199563d615d9c2bdcd3a4cd871b99d2f43620f285f7b4a97c7e0c244a411eb4e9f26827e75e85dcd6a85e5c64c7b173dcf89eeafbb67c0a9ee8a681d0b4e795012d8b6a180b20550e6d60a46ea6d6adc1bb4847c0ec09f39248cabb2f2d05c6efe52e4cbf0f0b5f7cd882bbbb435b53c70789f674c9dc81a2ca428889f39a5ac528c0455d4b89883488fe2144aa63ea9fe2d8e711278f299a43559f7ef9df674749de0eb04edd80df15d330536a5cd4915c0fe0b5e109b5977b218f112e940a2f6d2dba12fbc4c365ed73f1dac0154ae6dbcc3b4d6633b3f0c650a34ccf0b648ba5d9cb1003730064523fd2693735bf5dc0f179146c1a389cc0ea15d7935e9edfcdec210f87f029e285aace7521e1b933e093338ecde707f7ae87e7ac48bd60b4f1102b90fe11a42c87da6bd5ed55b84a5bb7ff91e14d834e76fa308c2bcec3211123f89dd78dc5e766c00cea3d1b63854b321d000e3ea06bf66257f6a163bbe16d5e28d50fb66b3821af6c87d23eda515610ff32d89d3c62f7803de482e1c2108e7adfbe4e928df8e243017ed1baa8365d6ce96ecfd1838e738cbb6f107243518a8c3421c443c4e63fef03ba09df236ad434ff8716fee3b57a823c0bef2cc7cebf637afccfb29223167b0aea841f52044a7c559b2ad606548866c09d7344935a5121692a55fd2256e0ac0363d2644024c63ae9edeb948c1baa4f02e21cdc41fc51183a45eb1152155722a4b6b0ff38b044a30cdb33b065e064b15ec3f12b285ebce11ab3f958adcb59c120dbf6e3d0059938f48209c5bcdfbeb721965b03bf166cb6e911e81975e87c90af50aba7eaeb596ff87a852632f9e91313c4efd70c89ce83d1bed6ab51d0b8ae5ea1ca7bc8621af24a301b7b127cebd50d0350b4ab9386d8bceb3fd7643721404ed2e73df1cce0959dfdf24b2e005fc37b09277bfbb31377d3f3a389023f25c8261e765064449e40227d5d1ab0eb3b6cfd75af0ca7499ef0848458492b732a06f1066d6861f776bffb3a48b9027045fb250bf4435ae0bcd9f866a9f7e55e077ff1ce993939c2abd6ad9a81a3a237dfdbef4c57f7e859691bee7acd9128aa4fd1ead1fdd9404cf3c94d67b0a1a4c13013d521c79581ce01460104f7eca3fa251378b3fd92dccb4084f2c175f40f7496ceeb3b59c1d8b63a44741c326bf68098e90dc1c9ea8a7a7790aeb8cbbf30fe9ceb3d18c83b976cbadebb32503ec347f49e53abeb51467d953cbdd897b1c15050ca52fdb33aa368b544f8af773d17c6661a8fa6e1771fc2eff284149fed649226edc8899d737b3cd678edfdbd76865e185145fa14bdb07375b47682901b1b37e68f85775aef07a893e2200cab455a24f70c08568a81632c3b28511ea57d635d74570c555d098e7cb2b1f9e47eff07abebcef564066ba458df5a17887bb5c9a0ca7c247dd54d3e0b3027a9236bdd7ade26840de32fbee092dfce912c3655b5aecd080df9c8cbdecd749f2f4cc53bf9b21ee0368d01612a59a00ee9e5d00a0f942307665ed0f62d088cca10a85225af98ae326d310d5af50cb2ddaabae3e13be1e506d43946cb19aab0eaee98d30f123af165e630970c3b147ef1ee052b31e3cdab7b9086f7bffd391783266358770027471ceeb66b1c69ca2da20fba3e87af7d39d29a427dc0426b50ca326a3c39292661dec4dfad6ec2c98f62f9b4d6753f7ebb271dd4bc36c4084ab3a4e9f6f49537a546713bee52add086be14668a01bd9a117931d6c13b7c8afa148bab557630dd6438e1c2b52d94b720fb7d3936be5673575807584c603ec7096c5446db0005e48f90f34db692daf2d8a88f5e3d431b69fa79b9e9a94b78443808eba1a275bf05347ac820b2e79a74fbedd12bd6a61c7600dd504d743bf0c8e6deeb2971f1308e3222cd5fd9090e26877745810b69c60acdb994038cec84566b22736ffe75e9e8752bbb4e01c8d405fa7eada6e8dfd9cd7175a431113f9587a89801f0cc087c87c338d1a137d1cacf2698571cfea836deda7dd8edae5a4aa3be48593336a740a708e2fe8062d25440b4f50c96018e141687de5910548bef88d41c474b82904681dca4fdc2172a6f9f3154fedb796a4545c790b822ac64cbc54113f6190d28710da6ba1c1a98317560d2c98ce924a14c0f71b9e435942aadbf9e404d658726fce56bd3e1e6e221f201ae52169c8aa757970d4185963134567318f42aad09bec6f48c125ada4a5b601a8474ca011029c18a1e2d52edf5b393683f2e08bbff6dff9c4b4d00cec65882ee4c7fa5e69ddc4a2bbe641c665ad3bb76f65ce7a309719e1ec1ffb9e1937839c2d813625d2261a4945069169b49c7b2df4f057ee292d44718656cc7ec71bc99e8347a1a4c55bc80a7730b7daee142f4e060dfc1afc29fa57021286f16772bf0e3504f48c6b63181ce419df2bde6a710f90a744e3f358411f3c8844046808e5f92c21d16409fc27b0ac5355c06e8c0ec8219c2f6a5c23f3a08381126516b90751b820077589948b90fed92de77c9208ca52482e7a7da00125c177097825aba734f3d513ca738779ebb6877d2ae89f47538799ff16388caeb11de31cb5abd0d1e26938977d5063e4b0dfabb9e687c734a554c75e3621bc26c3bea9768e9eae6d6169061f2d265bc7d11cbdb5ce53330b7499f9c6bfa99329c19f1f881f11eab40e0748da690215695fad4a8d29e01401d0157b90f575f959499aadc4c31d683887e129074254458d9f656045f2838d9e821c90c17e5a038b2c02e06d1ba00ec68eedf2db2aa1fd1d8716e22ea02f04c2ee92368e260c19de5f43424d77343561e9cb2fe9fff2642dc82c85fb84da011f51145b58cfc56e5e5769e341d680523f0e5c5ba7df36dac8d41298781c5c2b7fcd5bd31a04b9f693bfdfc4e9398d9fc61ae6c285453fb5c0b3ab8ff3527729bfdb6452571ab12a33b350caa5e129446987916dca5cc01bbde147f1104fc279085899df3a004faeb591275c0fb4c63cc33276d1107d689a9329c9b2a8185720314f46e80bc0c5e48800aedb456fecddf134e75ee19a605de26bc8fe28f0767482d61d5192bc0bea27bd2098f372899325452394a6e9d6114f8330a70ebd96520b6cee49af48cb5662b6d1f693f4730f8716366be0acd894df886df60406d9b06b75a601c4c7c4b64552a0eb433fae3d2bedd8a7b4563496906da4b0d2cf5e0ae104cb4d0735af079d11ef7dfd5adb2c1a631cc8ff17fda6ddabe2313066124f58ffb24ff8d355aad960b65c28573cbdae1de2eb5ae8abf1da99d9dcd9f6cf357bef94598f53845ccd408c170d32b5516a13a52e02877f8c2ce7168327511c86830d8d3869a63a56b44cd696b7d5884319644668acc11af49eb33a91f85f6e58268809714d933e693f14f17b09010bc92dd82694cb505295247c15826b35e827166427ad76a9e87cf2c2584c8721e6890f49bd946f14567cbcf9f38d0decd2c08e853a63e3f522868ff69c7d5c7cdc544ace3043d237f108a0050994d0a92f5a788a065e7744ffc59a5cecd9067a9449e18c6cf903403f5f80ccea20b1e20ce030409e7d9bfcc960e3d413f63c06a51171afcf1da97d709c77590947f3c8732a9b615b5a4074999074c1a462b8d375d6df5cb005d865683b3cc8ced8b6663acc03f16e3684b1fcb7fbdbaba2e32d9f27c74c548ba6e4f09d074ee38b80d4712f6f332214599bbe4a87a7efe06bb69c18d40b3c29d2b18226218f06cc1813d3e03f9af7247f7138ea5c0ae7bfb96049c5874832bc5f5f9d205b9cadac0f57966f55fb07f1e35d3c6be7269dd47afe2326e20b091f9387c01c4b171aadd544c15018c0578f8495a3ae8174af5d869998a8d2795e25ccc9dde539329735a0870934db0a694e6ea4035428f672eac86bff076783628a118b81fff780192272ad27c1858da1f5b684af960d47d4f93658905ae6e50ff0915a986a1fa4c69118be14662e2dca11b8e1491d0d42ba14d09ab46c5beb6c09815d7e60b770e9dfb4f5b8046b6048493f74b654133c0a0578e5f3f9f8c551a00d06ae0c308909419f8b46dc6d437e1b357cb43e789e55d32dd65ef45f38a4809ad0b604b8f87be530ad1ce4e35956e6be9853c5b0e8ae28465b9cb621991f5d84067974468f40c2819060bbfb4d954321ea5fe961591dac7fb95599b8f368316a05c0cc8c72c583c403541d811e742c01b601c9823f4ae43a08f17867881f5f5bf84a21e10fa9b03da7d8f8f4fe107779d78ebc589842bd23ba65d17811ab039a6556e889bcb552a65ca6501d0a55a559516f55fa2b2f5191f44b1ee6e78c88705d2feaf4f68e87e725ce1d99418c6c297149c1487515a659e1d9b8788dc1908c74a01ccb82488102689a90b6f9c0972b2772bb5d5e4a64a1518e62decf28542a57898a50d36d8db643dd9f3323793293d09e2ca0daa5f7844d0262307fab9b2e4533a4d23075144aca6a379a8c4f7eeadfb22395f1211ef2c903383fb780afc92263469a7176c1b54df83a34989812e2376abe1f7c5ea964efcf8e712ebf34276e2184e63136a6f0a83c8adf4b1e0a7d2c319746e30c6ae30c5f119f8a0930f558ab6ad5512a1ce2d5408f8c7b25f34a14529b5797b9816e4e4a0e50f9ca9eab47f0e03d1cd530ffc3db4357e7edaad059888a93d1e9d59b4418088e4687d3f768f31acb5a439616c040844e4d4d2b2980a8ba853ecda9e5f29ec0a446f525ae84daf3f75e0551e0593d0111f259bd80c4c65329f2a939b70f847373b3b3a24642612ec1c13da854ce4ac0beb2ab354e0fc04f88aaef97f5da1cf24ea65d28543dbccd20c3b620526eff460d49a862b95cdd2592c22d7ca45b7b4d14b2be83045ea6dc3761b6dec8744891a2ee27a6357c85a7d62e54ad601f23bc043484cebe956a2f3eebf4c2e9f8b4d3a4ad931cfe541208deb87f478e2fe7f90280fb29a2d1815efbb49cfd266b326cae2d4a9989bf0b821eafe52f4757b848b14757d503df65e4bdcf0100b92d85d5effb7deac92f162b1b4fbc35f6a42867e85acadeded4e5cd75cf7dc9fb1557473320b54618726abf881a36f659733c63d11982c613f43af837f9135493556e2babe20cdfbd9f9ed7527cfeab96207ffc39c23c8aceaca6b0d526016543337483be290a6936182fb5da1a484c27471a04a8e10ae4e97fbbc638f2467657a9a95da522fa229acd47917414f37113b839989cb75899c1683049a1c8b42163ea8e269a7143af13c961db78533a35f7a5a1607453453b2ecf4da5cb5d2c45e0b65bfbb6f25ccf5c01550e29e2d35949c8664910565ebaf7b8624c0b480f1fdb1e49ca4cdcf3596ace0d67bf0ea4ea67004b21b982bc559835f4fccc801c4c8d09804738214e18870316075b6b7de3e93cc7e63b6e3fd9a77939251576842f9866883b23c56b4867df27cf69e2be446d132934b9a920f83715ca7078288a562a8ba87b9d3b89dd50a566c5375a5a347f379d62aa9deacafd981ad4de1f9dba3cb0d384a3a2d00c3e9ec57080a26b0f690c3b2aa9982c2de8601450c8e06bc89560b01406cd7e9dd02d507d4c343d8314365bd832323ae7311934929a9937b9243abf00b41e9046ad3bceae7e8211076a06c9d46dc32f49bd9877dd01c9a0c6fdf55ad2bc93da938b4940fda7d0db7666a4d51f1ec5a3adca7a5729862bd3de1c6439df7b990d8fcd809ca615dcc4a23c4fecd142da468b6c56c918c70440127fa9302be68e98ebcb39c2cb5b96f52ef7e0429e72624fadd362ddf5f8c0bc9eea058f0cad1ae7feef4f6b354dd3254a85ddd39b79e6e9b1785d14313992f825ddc1652e702bce26d76506307a05707dc0dc8867a2d63e5031cfdceb5aea4e97c875035f015cfa53cb6baba4bfa6cd683c3e52c563a602edf28263f33c5a723e77677b47d1a820779332ad20324122b9e32003dcafc3e5bd03d3ffca427d96e0cd60aa1a5d01b17af620baf65f834de507bf0058a443f6437e8ad698575914e2769a8756b5120d605869527b8037bb7fb59933470fda6e451fe89b316156b63064075d5566cae2cd7ce92c4d4b620a4caa9736b75e77e115dfad1173b2cf7950b3534e6eb1ca7c39082dee608afb3d17c2183854f1dc6c4900aee282c769f637efce4fa191fba307674be840794816dc1220bb950206d7f1ed2e9a01fe64899a237d4d8ef098f5d89eaf8e888ed62d0bb2976cd7fcf6f2a0e3c0f6f8165cfb189b2d7ca86bcdce92fd4d46d07313c3e33b1f82156bb22250c12e6c13cebd817532a9ed0fa8257fd56504fae992e66179e042284ed97023cd78d90160c77eda77e205d12db5cb2bccc6908c8f8aa2869810e015aeb66bdfd40b6f44f18e7d72f87275b801dadcfaf6a6e3d2ce9629508e5b96cbb4b0b2599649760bbc8f009710b2d4be46c8b46e2d1e0e182f164f9b5f52ce94388732c2cedf2ef9b46906f08e3f953b2433c57e475a3cab109a058f319c718ec8f41b76bcaf544ec9f5ef1feba9e1484e76353947b8fc418b5b009b6523ae4fc9e34d6c07b04f7d9c0f0823eaf351854eb8a1fd17fe090a83445eee426f87a6553c5532ebe1110c2ddaf0c3b494be88be99b0ebe90f7a78663de39f1ec15c25c4179cfea10979838ee88d56af96b002df626efdf625ab1cadc7aae1236e39e7a89909f7aee699282115e4e97625f23096796eb1d8e10651c6b6889bb9d915bc6b1234a9891debf4f8a6590d7856d7cf36ed4446d63709c5957def799a0e2207db925622e3b7a47f0c7033e42baca680bc2156695434faed30754f2d463c96377bb6685c0fc6087e8abf605af753c602ec5c537b50b5d392dc60675a9ba1e3f0ff9771b0f88849d9d952c2d6b7e6c9ee68f71c76056243be01d39a49761b99269b0d6f2bcd5235c80e0338218013aae447f582633526262b78ac3e1ad1a00835a31f66cc27d1a9dd056d2440a320e93b4ecfa5be1fc219bb16fd07f184f35f8339a69e49441e531f2d0fc21274028d4861e923df8a8f210ffd74db120d95f942900ae9a8c641de6168fc437572c6b15ca05656cc4e98eb360136ae3be5d1ba9463a5f04491132a74d02eb4d35e02c1eda16e013d4f96b82b046cab74f11bb2e937ff3747397080224a65f8742a5ab76edbb6c875fe3485e6346654b9fc6118df54242aa04c93615719db5ca15f37e48be76b3ace6568f124fd74eeca830ba0fc6c2684979e77e63b6a886d32cd7a9a674b2daa3b91afd4ec359d328cda7759241c9e7d044fa62b2b1179184801e68175c58e09f31032de5947b2e34521106dedb4f30f831ee1e15787818e42152a4e43bdb8c445cfcf8ffe15dfcc20888d889062cdbd88c6e17d7fc718f2f630d1007626151a7d4ea345b77be7008e3b01e0c8e771e1c610bc58731368aceadec65453950dedbda20bc9fc7a82e66d45d9f2703112950ca3b1f57140b010d4175a98b2a1df7e7978a63e374090464384d3af1c6cc1aba0769c856e16e6ea2b89d6d0f49a699ff97c4c53e2f55823ba68341c29b0fbb527cc24d5719fcfd81eaad7ddb81223ceab1ad5fe6807ffe3523c6742ba1625af69f3ea576a8f942dab7a21928ada8477b5cabaee1cd3cb2189fef7e2d166617a01b48b31c38d086bd5305c8a8cd79372ad9ca06d998271fc346e358669476c0e7499c86f7f4960339ac90e8b3627a5f5fedae6fd03b320dc17ece096dd2fd8ddb7d855cabeb8b76247f8bb57f6ffd13092f2f49f2ee7449e7061436fd68b07114562fdf34dc9345228be5d45a847ec26469d10e3bd5d10e6bf9c51af31555aef2daa82111581cd38eec0ebc447a106fa601e8d25bb5f9291dfc208e5a2839fea0b1661f4f7f62ccf3834ad36168ec2b0034b809891fa3cbfcfc247f87fdfc67c27c1363348fe16a5a2e5ae20f0320e603bbba747e058ea21d85554741cf874a2fb04231991cde06a85b80e8cb149fa25897bd566b3000c869e6ce1d7ca445bccfd76f3cb28a050a07afe74acc6f5bdace7d0c38dfcac11efe389041fe8dee432cd6a2d0b03c55dcaacaac71cfdec396c0b1597893a7d90cb8e6ed9f5e97253dc104eeaf56fd9366c660652f9c34f1460bed63697b8de9fd286f4c2bf26b693a36e89b008ebfda6a31c180d1ad9a9f119ea76a3b844b1712c0a3f9d174a66b2b492f374c01f9ee083e0eec636266d40363052c93567b49967efec648f588d4221dbd49beb5548cdef6269ca7427b8586b3ac11121c8e4f0da171aa47477ba5942c8363a3c5efae02b5d092f48ffd845ba465ef3e539ef15c72057d68c92de9eadd1da6d19c0985c2a0de5ea4d76328f18ef3576a97eb1468139e7164fa43656adb2779def3eee221a370cf334722f9dcd3659eb97b02dcb8a2b39b91a8675a727d02d53abc4a3bee7e7aa391bac46ee1761eb0dbcf1c5f0a06851e0802f0e45e902742e3bfc82cdfa2ab83460eb42f21c7285cf131082f8feb3d68e2bfe06566bf3e8416fbe3e536e370cde20b31453f106686a5c0af0e8353db381bdb5d04e25cbb2ae9cd5b9296a4d2c140b3d83760f1c765d17f383fc498202b32cfa7b2df516816b9578ca5cf4c3bcfb55363aba3a66ca4c2979793abeda0aa0972cd655bd2462c814c21ccdbb234384210c95fa5373851db49d00a6df3a693635794f10b7a319a361e5ef3ebafbccaa663a4b53e0dd3dd5f4e6dccf8ba2b5d70d6a572ccc64111da79549b40a6704001ca93e24890960ec450e477c94a6cbfc97d825aade9058b8c8e340a41861f2923b79cd8b410f7f5ecf3c495c0a6276ceb515b913b4fa542bd1f59b4f1600ad30dbfcef024bce617a37dfddbdefdf9b7e8dadfe56258dff8a40b3295760aaa3098798dff2258c71a9d7463e85ac2894601f2ae7a4242a1f1fbd1c422c16f21d997071214b2011630b32108726394ff9bcba0b92f4a4dc5004e5d4ebc852ee85f100322ff259c5fb8357e007502c68e5244d7e77e68e652f41f4c871659b787b88320e6927e399830cb14ca6afd7b330b9fe94939d4ab6e0c22b91f44c54f861f5fb112cf9f92e10950d257e369aec6f97de917756b5dc95844324152a2ac3a9e2c5114e461f512e544fda3b15193fe6f54e823d7dc509f865decf565908ffb41bee46567aa9184a0bc7a45cc88b5b943a5ec941d8c0bde7f8426dedf05ddd4e1b1150df15d660666d08fcb9248cd2c93779363af983acd00c944c856230f7f26431a1e47648568c8cd48af27d5167872471104c4e5a622483ebfa9b1f30c25c1f56830b24cbe265de25606270c37e9c602528924960191b76d404ca1359d83e21cff2233060e1a8161edf53d3ef6b4baf227ef899ff491c8b236cad23e3bda12cc074277e75f9bb6a50e22d8272ff1c2d6588170ed11345cd38f1f49682cbaabc90b7ae87f2acde5966b430d6890e838c804dd220a161ade2916218b26fbc5dbf1a32036069978491cac7cd5a4029adda67481cfcdc19cd51a497c134d03aae9eba93477fce5603e10156105391aaa616f3a6a9a97ecd8d0e5e6bea3885ca612e5c69686a9298f695dd4a1ce7992a2ed3f5aaf391d7ba35c83312f8bce90869e45675209b953f64d8c405fb0c69ba1b36efb87558e348b7f008e9d62d1b40e9913e42ffa9abaec0c161ca290cf66587677b3a165d514e266a873aaf39537de92c96d7eb93aef8eee62324febf05d36d76165a97096fe90d907844164d00a70a65391412129b8e3ff3499ae6db65bf31a3a358c0d9ecb24a8953aa88eda014e2a64546d3e6a1bd7fce95cf9e7e06e330074223ead23079be8c836b187085dd9d91c91a07ec702c098534c932e2c8f227ae7da675f86b157b868de6259aec2f299ae68335c1df3792e7d40657fcc0655a9443d2355bc9b1cba04f7e0482b14eba55400a855e24706d3ce106dc40558a1cf8451ad63cd1e9d7b6cf63242688442a834c7fb4633d0c05d8fc87e905be3b6daab58cfaa372ac8a14614a7e672233a392b2c05882919f7472bbe2f2366d5fa45a8544e2a649de297f7f97f36633cf07fbce18a225fa1686c2e6e220fa7eafece66dfd1a3a07ed9f3bc95fc6123c00c70afed08e34a1e7a94fe3d36ae936c9f0a164c984503c5ba8f0aa3735cec75a56ccfee0bfdfeabc9c7c1a43fa303c447b55d9bf2852ed5ce47df08626fadecd9919c18fc9608a11e0782d0655acf394b7bc3370106937dd5d51d23d9155b2611e25aad5a1eb9cf97cc157a8f3747402019862f534055aa3c19ce53a433e4c6891c6ccc72baf43e253c62fe1f87ba35d1196f9a40ff3a8cd92c0c62eb57a90b6200962852522fb71fc1083728a8229d76ac79c3b9b7568192fd807c6188850af70c40633acdc8220371b819d1cae8c8f80730c3b9826050acd5486757bb8ad5e192498a4e58548c5f9010db691c2fcbf310c955ad90347a9e616fdaad8db58c582f87632d74e8e4cff80047c955a65d3502e8c6b1b583899e21937d25c3b528e09ff9771a1574ea757ad63347c4770466be4244fee00f37a7ed0200e5d134cf296c61b0bf2b6de75d1d4888861ef9b01b1695616c9430f4ef3ff805366e5d9f4a1501430980cb942fe8fe9a4fa43a318a163fc27c06de544f62bc52e265a25f924c97744ea665fca84ebf7556ba0b76ff6f8c51fbe7775c1f5be45b05cfc24d57eb93afa255e7e10887ac69725440101c84893dbb10d370d8f5194724d699703ba8d41b78adff4f3b96e50429744a113f16601ede9a40e75a8dcc754056f5d729c9a8e929987ba54bf5724f6218c3f89e92ba17407c5b68ed40be1f670f587a7cfe2d242276350f358dd38f76907d9ba746700038fcda86d0a20e21715db349ea92a30b1c0e3455b0c80c0a14fb622663369e36911873ad9c8cc45d8016dc3d6ef1156f0094809738388688654c41b1fa1ef78645ed4e4e70e041abdf6dbf127458fab7dc20f1cd0e827a79ebe279a2e1d31927987752c39f68622790f014df3cae7d3ad46fd1805155790e69ec404132b3d2aaa47b61196e27efdfdd7b7831dc4bf1bdca16d81a3b59bf9518733054179c3a60f7b92e5f434e09df8a541758e24f26ffb79b27b5602e9b9caedcb052b2813e4428283cb029fdc4510b56acc497b8362106eb8efdfea751055820b6aa6e35e00bf9d0a166ac38fa600d223994959704af7c99e2785a866bea404a057997d211d980596402ceec7e07832e7c8ad109c2dd117b5de307199e3cf5de6719b48d6967d0754bc40bbd74b0a8ba64a07e98c469b8a3abec09758b65c6bd96b70a05ae4ba642f666309e2c52abd63880abeb8e0077b158126883c40ce65c2d6d2471114c75480857635d72b93a985e5eb424fc2590c38a503ced24d80d59c9e0954c23942c92f4b75f89492838f85dae09a66b6c27d65fd0f723e65e13fbd997eda71fa3f35d9ae8a6f5b89908f4173f4746e103c2530406896e4f345e234ec856ffaed6e9c3605fdea4e002022424e2cb7f739fba019a07640ab86484f9cf4b48403e429cc67124d443971d783caa101ea50bad0771b57309f32b98e3835df8ae48d2dee90af2a50c265c752071b8b48180a03d0c2ce95adeb168e88c9dba7c459c1a3b0eff1db00de53dafbe2052263553ad3a6144d6661dc871ac57b5e28622d75fa5d4799d9cb8e3239ad5ebd4c4a81d4e3d948ebce1b4d193360fbd5f0ee80e213724f9baf3b8a0486413328bba89970cea9a944ed9e747e0fb294ccfbf7c6bb52384ae0c9c94a3b41c53a5b7e7024b56eeb16fa06f4ccacd7227e023782413ced1c3c5030760df0b595ca31b77175f404047ddbffbce2c993d58edf054625b1267617ec3fdd1d9aacea41895826489ae85e8140c8eef8c4a0218c2e5808570e59ebe73c9419ffe17e3b35d772493b00ddc336bc3e7ef2dbe957aa783db561cee6726e7472558e5249bd5974f0be622555ac155904aab323be275c2765a6150e0e758ec4203cf1e430ca876ec71cd2a2bc9e2a3653109063b3bbb1a7d6b9e6a2991fe5c6ce7ebcbe205f6f88835cddd2a43e69ac046c8c591927cf6071d38370e8664b82f38c6ee30bc686a0bd0c8dc8f649f264e89fbef5dc541a481049b73ddf57fe8a93e1a04e5f3646260d1edd632a57e9fddcf57f7947c5d784064acb29fbd2863219f3e1513a0e375287cce2acb25c46b9ed0c64b8433d4c6c7e0da931c6ec306f3c0e47ace0faa5d59cf7bc2948a2d256417f2722dc26bc45d6ad5d60724e0dc4a9da828eee537c16b899ad33d724a1321e961bb01b293e23d71d192bb25790befd55817fe3412c3e59b3819895a5e26474a6be3888a75f52e9d5ff34a47a3c274467e579abec85f3cbe706e833bc78f2206a78ebd72271b464c70ef0b9ef0dc5a3895062793f7462f6d3de7968e0f1f256e17faf224ae28491b8de5157199cd1e2007ea9a08482cd97504a9482b273ea5d83f5f31ef94fc4bb264735492ccb8bbd7e1d884285330b2707a7f4a88ab38fbe2fc59b78235440fbc3e114c3f5bb074605f13b67634f02642c0439b66284e551ba879a050e84ef5f8ec66dffb7d5fa6c5889e75dccd9550b88f4012efb3784cfe0cc496a40f3ec87eeb439ff1d7958776c2980cb2d1590db4d6c848492b0bd34482e9014c58b703b7528ce1f787f3c11be063bfe52ba20066589592370e5874efeb0b7f14f9c3512cca9f6fddbeea37acbe2481bede89eb064d57aac4aff3c3156a4a0e02ef787ba114459bc9b90fa7a4178dc463d4073a905487b6b0b73992edba3319cd787a12a486b28885477cb1f3591dca3b1adf796ff93fa2f9b504e5ce352fc5ffa095ecd0e188c2e19132d0d0e72ed70a690e9197379019f2b055b53262b3ae944b31f155bd09cfab4ce4839c1375d01cb74193ad556188a749e7cd2162eb63406946bad32a80748ba90253c9390f7a20a077717ca8e7057819ead25e3c815f48f840aceeed76f229bd6f8b0babc98120215ea8de52d0e0602b19b49a98aa0efa7185261fdafe6875471dbb3e37176c5b1353f12c1a58f187a24028d30ce12403390d5844359fa6e48e93dcbc1e260bbd169932f2f9463fa088eb686d0584d22f73b85a3113c5c6fc667971b03e76dc785483072ea73d867b49e32bb13f5aacd9b2f2e702fbf50b75682aac5164781ee97d2c72da4006358cb0f0ac9fa7eebe93d53231ea3fb138961a98fee44a6ec77def872fb34d9e63b8e0e208615b79fd58666637b0ff60aef12b41d3f9f7825ace07d2c02833c63e9cc588c3bc03b8686a68178f7a634571be2d199982722e5cdbdf1a0f2cd18ef27150a781ea9f227a6b6fcf3fd876a64e5f8bf980cf4825302b5324ac6851e9a9d87c738d827c039167ad939e18c06daa1a31ce4de011d232b1f1da18b2373e5c69d8ef1b3ecd96701dd578f4db1aafcdffab29d20fd8c44a6fe669115c3115a8705520967bba12b4b82d214188d5e43c2564f5ae5e2d8ba3d65e502e8fb7a66b52a61eb3d89c4f6f9bb44549db612505f33e60f4bca17d917ad2bf3ae5bb84b3ac3023155c0abaef0e57cf11f0f95275697a4e64b9ade3f728fba914ef235db70854e0ae674d91d83f53ebe53e03d73ad83a817f5e97e0c44ba9b0762d0ff2b3a9ff32d4d7e6ae0e28ca0c6312a7d65bf67d3268d73b78d0ba3d994e085700bedca2aa3b8779a81bc43c87773b1a207ded63e989da1f083a7e6af2c75487fc3004e576d47cd0a8860be1361638b74d87344be67963eabd29d9813237792292b2e2fc50779406759dd834de7bd56fb98407c68616aaaf8f3fb09a1414f9963ad217a85364cb5a1ca5c3696a8f91f202da30385099d0c693a9e243250ffe13e286a71844340dd4f91e7b4bc3e8b6e5dd9c7d60ba3ca111a4ca04d42b915527e9b8028f8377cf19865d03953e604c614d240ef5346c918e7e77d47e53e192c921d6c8f1c5ac8bb9e5282310f42b0bdf35318a0193452b941291384623edd92438663279808512b4880de1e6c7faa5ba0aaa066ca296c227f37a1a691851d164238c37285e1ef255f4bac78708cb13ebb65f89ad4aa074dd00934cd832ca22b51f824f7481dcab09e77b64496112de05ab49fa82cec8d9672f5206ed243066b64a2f4fe7b17500c660d2428629a3c989ab901a1c3c367f7014442e3d486de69d6b70b0c98eede8b9f99e669061d099342164e111b8ef7fa52791fa3bb1b0c7f7b8da63f287bc4a1b80aa863c8ac5b6628b3d31740fc27f4b6945ad840df17029ae0681898a92577be9ca907dd999e19c86ed4d2f0357d0636138f28e74da2b48973455402929fa5fbf24b5775decd873b46bd9bc792a21b62418831cda2e1a27c711bd194b2070ac73b43b967fe51993881780bf3b6d53753354e59a3fd9e393cc33fd714abba279b8a8b812661de0d9055d3c15662158483b0a554a9c57584d6c57dec6950d1f83e845f28a4b67153cc91e262b1559091af2abdc90d6c4627a98bfb48840e130f917d2614cc7c37f4e95dea8f41ef4fa199cc286f5318b7eb7ac7f5d7ff2cd9b3f722f29b0cac4b162fd42dc1017c640be302374e7605dd20f4a250dd67b9b5d6217b8e5d801d9cd565d55818ecdb4ab22b8d2f719f99f84b01e7ef45566a0d1d37fc2293a008c7372571baae8de730d7c6cd9b7c0fe5a333b203922142276f4cb9db28e350777118cae64acf180fdee6ce63b8fefd1e7341a37c365436e1315000ce2858887a8f1b631b3a232dadad0d23810c5a7592e6596a921461f4b87fd0e4b2da9da1fbcbd5689a03ddc61d9c4e0862261a0605b798bdc42cf0cdfb1a7f9ccc0a7e82aa3a27dc00f01afb62f4b4be6d27d88d5d253677c23892f77d37a9343fcc2a0717ec68e31480625bf6ba0e0c116d5ce72a5bf89f64a9abaf2d743e3c0c3bb820b065581d965862236f16a74b1a007ec8f1e6c92789b612cd235d0aa5ba0574b9fa6c3007a84b23fb501ea548d8d84f6aa96f2ba716dcaab73c9fb4fd51ed4994c91c4bae4cc800fb8862beb99d5a2b4ce17c9abc9623001b586026cfa8eeb901393b7f5452b46a70a293183142bc6541ae2c3dadda704defe91c9a12d6479a60779f2a9c192c22a69bdb860f757fd334380eecda9f41f7175f1e2f256b321eca779654f43241dc1a47eec43944877e8975e50ea081959185b365957c613bf9866fb66af162dec3c5222cc375bd53b013c1fecaba36bffb0698799e2ee0b6fd528cbd0b8b64da3192b1dae3fc4d3a2c04132a5ad4692fb4fe42597c649da2c17c143e1c0a44ba7f724b1f5f8cde9ddc17819bffdecdef896decf3a60b9d146c1f2858914ff53627e7e82e2bba3b24ab16da300a69af2b0da6a686219a6f0fcaf67a943fe9e5567e8977747208ffaede17837dd6f7279505bb4f0fa039e20cab550fff922d48b2c67b0343defea2d49e86458d63c398da52182f1601780f2c02ced095e108efd7ffbe430815792aa3c04b303eccb12c85a13084094dd6b385003777e6a81a4a4ceb03f52f4e1c2241aeb795d11de199e12d264a29790aa765873fad70fd24c1794e950f1b7bc3c3d00e7414c5f38ea5fc4b9e55bdc809f90613b9495b94af0c05bae4f7802fc3a02a56f9369118ba41902ca438c6a16a96c945eddcfb4cde410047ab46018febd3c685da18e49bf7dfa12a96cc9533f30b11087457a71c1e007f62feb4187a2e76c51ef5c43432e9dc936bf54a95f7755842b855343c748a4f0f1c4650460fdfa0f0293ab9c432d6b861f54611349f38781f7b3304e4fb6cd5f3ca95cd35d9022f6945f41827e9740e7be82fc14154c409321a3fb2728800f8b490f123d870341712b2eae792634e311216ef246e7d87c5398ac99fd5db5a1cdf16b82ed777f8c94c7c066ae458080bd13a4b755200bb88f5a9ca8fb5525a5aec7ecf881799ce1472a1baa079219d23dfc576ae231cddd60e5dbf6cdf96f2a6b75ca01869ff4dccc64d4a65489486b7d50c39b5baa0dde4564a3b6650061b26501747b8b138d41ca1facbef28c8cecc5b6a64658a5a01ca51cd8aa71902c1293a71d23e4bc7aafa34d9307d1a66bff8cbcefb13c94ce7b24995e77f6bc465bd0decc2dc3bd4caad46bffd44c4ef0add80241a3df225008a0e6cbe35b74414dad09bfa30c95613173fce9b9cbb49e1b24ea1e22e4d46e262548e39d21e3644ab9dfb1e99dc9e0e77140268e57b0041b6431ba8077a0155c019fbf955af91d4d2633747e06af53309ad76eaa0ab9c5af8a9ebb193ff701dad41e594f447a61e4863db1c48479c0566346bbb5be01fac64f6acc11e767f398ac9c9c90b9146e4d737ad82b1220f300a3d593354b4ba427b00b5286244be4a6815f2224769e20d46b97409a9fc2f6fbdeae18fafece3d685d63f8e52b5798b8730d6e4de621d7cf95513906eed575efc01ab5b2f2b9b4a8c499d5c3449857cbcee7b5068b5b198e5b9cb216c7a1222113def3152fb52f4f3ff0b34ea56e9990823950199c12147bd1f81647ae2402f5a47d59320d322a1206c8879623aa5c4d8311cd739266da074798c57125df92b6b4f08f264b579916f10f3d18d7d7515fb62efd7670d6176bec5990bdf333378595a7f5b7e946667a74f4c4fc3979d307deb8375ba23463f810c173ddd80eaa9f2952d67371fdb461508caa74cd7bec8a12d9ca287b32bf773c83f516b2411f60cee708c2fbc7aff3e87c7072ef42c181efeb01f66a5d1d19e43047f69763c3cd2527dfe2f73b114acba576960c971b81cebf86380ebb76ee280143a13054fd1ed0ab7b134d6f8b5612a79a40c083360ee4e275c44a83a1b4c28d595d280f282d613171afcc795fd75d180dea5308dcb336c92952c90e7268bf38adc0ce9fcb0f9ace6a3f2402275d4b5e2fcd68b8b95df894acfc8cd831018d763d1f3f68d7eecb7a3461724fd6be4e49470f01543ead966c5177481693089577f1854996590ae9b121a237f457567105bbe05735533179d70042aff06d0e913339dc0adbd4122e956d9470e354bc540751044f3e98ff63bae81e5cd34e1f57b2f497600f8f055ff5639c3cb488a2c98cb0cc7b5dc58e23598fe358a4bbbdfa18884e61d89a022bb3b66194c9971b8c1d051c4c4e3b76c7c6486dfb13b9231e240fb8606abc890b40ac8fc3fbeb7e363e4c89418d730cb7979410cc5b2fbc62deb0e57d98c74dc94c6a4847ce2b24b60eb09ac6b6d473e9d84ea56738e26fbb9eb216b2d7cf4cb7328bb7aba6fe816cf81b0dadfd96e41212496e5bbf8ab394a894280e68f28f080fe117de9fce937163b5446b2bff1d838d7482158f7ff08b2688bc15f88307c2f3f013c761ca57e1c623ea61867c052106e888c376d6cb2151ca131b91c2d3e53776df63b43114fe633f33772c737e1db0792dea99d2adda0cb1b0d194961ad3d7539d21ee0d9aa0b3dc50ed7720b19b459a72b1946609d88a112358ba1aefca2295e4e7cca95a2159793a37141bca7b435d31ea850ab70159c8caf1b04f78de702cebda44bb699139aa184c3ab2ee1dcc6ddc7246b56f3dd7b6782432e890ed6adfd2c0478122abf8fd87d774e7f21f6b51bac9118759a0e52c861571e4c9f500f7d4e0f969b9d60483d9f63694bed7a2ce1b31e83350c89e8cec6ad10a2fdbfac15a5abcce82e7c94257518e64d179330de91cfba93c0a270ac23ddf436a4b9af197eff7ee59fec60d407b3e8795828c17b9250a439949a5b612ad9d9e9c030196fb820fabd67d54795c5677c49375c6939507c62d816d943976916ed8ea3fdd7d94954540ebb184c4148b19be83b1dc9263ffeb5b5c95a3bfcefd63e3e6ed6f3fbe2ba1e36838625e988e51d6f0b4cf2b036e359f6faa143400dd290455fdb975105e00b891566042400b733c8ccf67f4e7611afc13ec0ee2c04730a0c25c056cf34441fe51b55bcce73c7ea2bd5a382728fff16ed6800b9ebc60d866575264ce2baf06124c346131ee07f68849bebf3d7e97dad285458d46e52beec564b0c32a9950fb537c5deb580be422729775a3a00020fd5baca01ef563ace7f7c3ef1fadb9322272da314b995c42c34dcd5d9a99f59048977f311716e92b794cd9808a2cdb77472b02e5275f56a0f1ac92aab624cecf5aaf1ab84cfce1457b41e139e8320e397d8bf273130d160137a019baa55ecfa9313c646042651f04fed3aa9c81ea1a24ed27d63f1e6b32de0688ea9425f4b9cf6bf8803d76369e401c61b372246f8494ad9397bd3bda63af1c7bb216992b8c1385278a941a22f93f1eefbe26d7de4ca4550cf1b370243e43459d4b48551c402c26b13a0e873ca9204db704722ec412d36efaef10a791d4b7b2fa999bff41dd280e077ab06d9b1258c74afe1ffbf94952c8182dae06f782034aee2e8f53ace67e1ba9d7557dbf55a43861ab3a2a49ac0e33b743ccfe01f55d0abaaf5a4065b58a2856aa99ac90d865e429337f43136bd65e6b209bf991c7dbd2141a974c31916dde6dffd01254a0852ec5ee022e6b8ff2656ccf6d49e266d773d884d252474bda44ea29906f82221175f11c0c8d5732925a3d8e45cb3f3bfef1078e5573f7dd90543b845d307e40e84dc5de577e67e4236896e02a1d10cfa6a7ab8ab3cb1eb7825e4437e4161fab0b57bf7718f78cdde3ed26dd40e9f6af276beab1a3ed30155eaf34b28aaa9c8a5b16a7bed3eb60d1d013e2377d37017c5d8274082fb82fdcd4b4a451820a6d11954bb80229ae79080146760f901204f221eb75cce69eed4ac29333ae1aed8a43dfc31e3d4d6105e6558e1e81a528cd006511e82771281a8d6426b4a9f30cd632faa41518917446d8987b448d6543d0d128e715426c75281bd5a548266fe1feca80eda0a4f91a55a93f5c75edcd48cc85654ffaa20f7ba9f5af5acf54746ab2660acb903a684cafd003eae3e54b7b1064105cc84a82875df209d6a084fe2ee8eb04135d1a2453a805c7f3b5074d102e085357cb64bca05d67f49527a52916b4d2966b1c05aa4c8b6b52381fe648f00ce022247fccbff45a9affd87882b59044a0120d5c1048d73ed5034e3b33b08a65039f4bfceebd4ef48f39765d0578e91b71780423c249043c52ba970591a55ac32ff7d5b2ffcb05c30b2e6b835ccb4e9137da6e5f9056fff95733b54d9306b27f326b70ceb8500dfbee83c8345bc7d5f96963786807475459508ca4b539886d2a43497c24744b49ae280a828ad80171b3895806f6cd77bb261a50073c85998c47b27f17382aade29e490785120611ae0306bf8c3b6444433dfd95ba0a8e758c6da001d9fd16a184a86b5ae9e3a70af7587f79f727775c9fe0a2f993fec324553702eb1c5a73ff3ece79822f8d29253aaeacc1699516bdb17dc8ec516a9fc67ba6b038b0c707892a9ad862594b1d0ba047f452b8f3750c13f27762f3cea5fd0ca2ff864739526cf3853ac0bf4db1a49cdbd261c45d1cb6ca89bcce88b13b9502bd6e344eb0676f28f07eca04b38266051366468dc483709d71166993c589671d250d381fb7b6e8d82014ea005d0dd9cae24f614e4046c3ba5ee571c5d9c7f04d45fd042f3023429c7ea49a4aedefb61d5a88ebe593ab29bfb6d40840eef2fc4d92e70ff0ed4951afaf5839c353cce825bd3f2687ca4be7047a616c171fdeb49cb5c9206fc3895bbd2015743f4c505bea5427be851b4e4a46d152f777b46e1e981908aa661b24c85b9792b6ba8ef484907799a6946f82a65f1df964875ff4212daf36415a274def9dd51861e676e3486b0b865ecc64a8630871a2700b68ed68831a9df02f9cbb2bdbed2c80351ca915585b47aa73857f3b0ca2ef05772b2ecc46a059ad7c536fd64386456229080b7d963a8a63d4ad0b7c1b0836f70efc75ea1f13075beab1915c0076afe3b4e9ee523dca56b4c6340cc0e1a4c71a2fca87c4c84bc0e31256ebdcf77834a0cde2020d8dd1eb5f91afcdd5139fe3f0e66b957d91a3edaf4230fc3b9aa5da2549f2db2e8c442178c7cf70ce3cb1fd57cb475ea30fc68888f820ce079844d616ae23da1e391bbd569fefc787dd4f247726eda6660f04043481b02983a1428ac1a23cbb0ba53706b6379c69e3f861511da4d20d4fca8337884988c13cb6ee719f8b42282711d9616de18d9dc04bb23cbba2ae5f5d25e3a810dfbf73f32293cd18d3112cacf08d8c8bad8c3ab7e17c3c66c80a094b2d2cc96a24ff6e612c27b53ef4e29930681e05df02ece3956057378db29fd3992349478da5dbb0b6a263a6f92caa097a397760bcbf4ea25047a15033da5e6ba5a6ba4d34f516414bac47ae937e950df9ee8d443b64d5e490117ece6571c6b6ed4e60ca21bb84bf8b416c4f81c25e4eb690d96b2187e327dc1337c63965baffcbe7db6f5976ecba6f7e6f929e5dd361c0c7c35b68c7ec191ba394ca51bec65c985ce85f6e0767bf0af86f5209226deefc28adbfe9720e52fbcfdecd5211237c0d418aed69b74281c90955ccc1ef1916244edff3d80f4c4e3d862dccb92beb2650ce4535427b87f4e288befac1dd74a97ce271e5702712e5a7350c275edd815cc3af38056ea7bae59b8cb9daf774381487b1ee8a0f517eeb36de8bf6c7d2e096dcb9e7305d53263b423de9e13fe5a03a625286d9a0c3c5a13756be7ea6660862932575b5ed9e8a67c352349f6e1282634ed1bc92b44a8cce4b9766f510ed9c8ecec9c1d03e2749f4072ac19f3b0420bf70f67b53955a555dd2c3b22daf7fbebb559632b96eae417e5aee7ea64a4028c998960c981c1cf39abc42f7d07a94e2ea29660990f503bba7289a18182c1fedce6e2bbdcb457dcf6de2a40abdf845ce4f801aeb394d17275671a084f9640ad4cfe69046e9e6326a32237b4d240985f851b26af425d50cf44dbcc8fc9444861cf5af00e4ebd959d9c1ce9caf92124cc2f7c03a99077a19d26dbea4dbc4fad5e7c30f04bf9efcc88c72b414bbc244e3e70aa84d3609d48b2eccc3c8cc7a8431c084420558c6461342f172927050200a322c6e4cffb0936c67238e869be8bb85ba735010672a6d2db30b966f306aef50f9483bdde343336683fff398b43a7f9e73028b8e872a8033f9809d3e31475392e3bf366342a873ed0bc296f186fda48b42d7040eaa92a8a7335b46b6398907344c5924ec7610f8ecb78160549c3bc557e61851f673c2d46d2285825bd7230b9ff2d533b22b69d7fe61feed60d18d427df522caf9bcc3a812e1fc90c3cb785075fc16955f424bd0f3527b0e2e177b3c2a0af13132fc196d6579c1cc8368d5c005f992b1dd3c7f8060dad0b03906d418f06288f93ba9980c24609bb4ada76ed6b90738664c182771f426015288f971e621afe78e95f573bd978388e8d5c088fa4061ac398f344cbf7db985267f307a7216550cd7433822ea13a5e48619aca861700b6a478f8b4dfe05301af62c22f304c9d335ab1b27970f58a2ca14d843e719afba9e8b37d86782ad0210faa6ea9e83fa00d94562228d348940f857bcbfc3b4224ab59828d5a0a3678a6030d828af53adf740a2cba0132fee451458498e30b3b852c6843dcb654c0d49c44d951af8eb1518e9fe41f6cf6b31648a7fcf772b37eefec154f80ec80e42666395910ccc4fd0caf45a17eed47b25f7d4e6d13207bb7d6ea8577af986b2d70ebe116204173c1bc9a0717a21dc76fc5f52abd06b7864115651b3229530bd91139788e6b1aa3959ec4b22326a8c6a210317f34589b33e4fe8496030926971437311adb0ee6fa3531d6901edf1aa691ec91928438d0bd17ddc1ba09dee2adbc42effe93de32189f6409fcb3dbb0e86b5030d5545b60cc92424414e1e83c82d11f58a86bff184e47cbe90416789a65c3d30a16fe41d1a426f4e1b658bb8d81c1f2590ad991ebb19e931fa619d7285f4d461816589dba60341907b472a55863f88042ea8dad3d67d7a5852d0c924086bb9925350c8d538bc2d1f7504a568d63d8c32aaaac5cc9d37a70d7222b4f06e81b598aa727a56b7bfbc4124d33bf3622e17cb3add5159e1e28a7f7924d638c9abdef20ec0db7510d3b7ba5a9e22154fd9247c5e88a9daf275e31193915315a2abc29dbacc3ebdbe260d4fa5c4cc663188587d3bbe98197c57d84ee55ecc6da8bdae4d140b09a6e315a65a2d3ac53fb27ff55374e18eca3db5b7d7ca6682ec9b71c5830c6c7087d0e44a4bb7d12b5fff02d4c6781f46db698c3c11a2b2edfaa2f4027e1fbd612f4b7b8f7f2527c58e8e634eedff3981649148271c83ad01479f9d7dc0ed003eb91c10d93cdb08b004326d6d9704023e1b10fd8fb5088fb91d147a7b581d711fa6a348fb106d992b78d2430ef629711299b5124295ff955ab745ca295aaa4cd02cf9cf046a444290552ee390c7922e9b59503d04550117cbc26d942fc72649da905469478db6368d02a0eb51a5d042b843c63374e26e2de9325a914205100210c5e39d65e71c5d2ff804c26cfa65f2c7a6054937a516ae80196e0c280e1eeeae78374699664e0115765aef10a4949a35c780ff7affdb4c56f1d2298a7cbc8d6a2ad4550b7d4fab40a50dbd4be0391773076c571c0be1541ad72a12d260b90afcbe251e0231437aa556751d8c1c482d434fab37f8e413f91feadbbf25764319e4ca313a201084220ce6be6b1035e5dd129efb971332d7770501e4e87db937ea86584e339232cbc6ab5bfb547ecf36310dc0ce0fea0faf5a632007524a6eacdca79a3892fc898daf5b1ed037a8772d13afeab44b86167e65da5f36524b41f46d915e8185b28157f2b738e6ba64a581fc1415ec0ad1d50f5182703bafd6182769fe0199478e77d999e05355fa68ae26d934fba91ccf0d0e50f1af6f01a589f1dcdf61b89b469f3adf85122621ddb023f546f6789e102031656dc597d8cc9e97fc6427576213834e22bf6cd3cff6d386679e3efe4707a0f24a72a4b90520bd78cf2c2ddb5c9be86fff14165883d299e0ebac62bf7b28bf0001f0b7e4c3fd0c3b361524aeb28a69a812e2a444e237b0999fdae0d80b3b8a5995b86089cea47b5a05229caf289ddcd80223ad2f2181e9dfd60eb271a4ecb03c00d1085e515f17e6089d244436063dd7875d7db5ff5062419b41ae8279c643a68e3387054f6608aeab02f827946f710ac91c66050cf5f1b88162fc23b3e9fcb8fead55ab0c0caaf9811a7b0144acda8015507359106e5bc482978bb55fe88d477eff982089d1a05e6ce0f922ef614aaff9834934d820cecc15cf70aa6b85792cb55b59e9dbeda9c1c74567688e925a5394baa8e4fc53853165b0e7ec0fb5ece0637d30fc5c97608608941eadbe49637216a746a602e2044b05b210baaa05ddf83f3212bf51e671a4040ffb2f6971e4f2785017e5b56ca0e3c14049e1612fe3e9bd0fdf65e9c5b043b280a786213680ed2fa6d13cb7ba435a1c314695dd085802ac40711b2ac7357aab6f1f0b1f4e73e64dca252e51d4b50f9f5ced9de7f80674de0550bee328de9dc86b03f1fdea135d4b8f11d80e258a0ab2754cf7ad646b7cb9724999e7cc23ad076fd78e34c98be584914fa227fea5add876768937ac0918afe608a6e48115b36c0c901ef61b752f8c305f45467276eb3c18ebbbdbccb5e4c505d9e3117527f2c06586bab2e3bc7b9cb86c957e820373c56e3edd4cac38deeed65c44d5a93372e6b34ce4b5d94e3c022d5c61090b69c834a1af8d7f9c72d806df47852f17308bd687564f194aefb00bbb0476e8585cd815819d77092df0db6d75a7493e1689b04c19d8172c093567595774a0f312dc81dbe854b5fd0b2bc53ef433e01f04b1dca644574facc0f13b80c62603ebac68c6c75e0ede9666f2b2c885a9cc76c3df56d44134326d1049872e176b5af7cf797459514a64191f27224597c2b3bedd6c348a16548bf0d178ed28b2be3c8c167942fa245717672361626b9e30491068f9fd97f3d545250fe1bfd791411e43333b4c218cb062c4e7ce664935daa55b046fcccd13099e593ad8e532a348cc6fdf73ae259a05885727580ba3883bfeb177c7277ea29c6403803de6683703e139451e7eda40cf57565bce30f0218de2c7edc37a00426e26b2fcae0776326ec998937ae36ac3913adcf844cc1f74f3a56d8ea401dcefad12012ec11a713d768a92d0c6b3a87fb4d1caca565ee7f9193b043b49784e0fa6b4010075940efd0a317996922e3370d8451207ca27133abf5ad419fa302c5275c90c62a5f15ed8804c79ea4d18d184c848e046ba323b89fe958a8f7da0ce084c619887013285e21ceb692eaf566214a97fd92cc7189c48cb0d8b1e4aa0a0c8fcde3e9784da3de5b423ad13937c6331e1505d55cfd848a340ac195792309407d47e6fcda5f9640f41e83545a3111e2c9c29ad2394933b6531a5942c0b0a5a62ca604cca517e1d716a4d2c80499bc60ddc7b306b262b348021f5dfd7c3eac0b3fc6271fe48227a1f5eb03b5e3163ce44b097fb443f6a8966a16e664711b0c983a66751ef0c0fc0712ed73bf1048e379ace31d81ba505bfff1fa4f1a166984bc63caad148eb957b428df8f5d602e34d06db28e2c0f8e4df063794b25d88f09d692a1b1151106228f0912be2543c12d9db9bc5ca6dbf97764663f210da897e281324c59ad3aeb63c1cd6a81cd64c448196f2e8c7d12342d49edb6714986f0f15c1ff300ab3863341ac3de2fe50d6a506f2e60854d95b813a94fe0f9a0e26a0297d10d93230e2417913aa2613af83ab6b56f50c0ea4134a6acd224c3cd70f40f8f782756d260525aba1ed38f4b4b73303ba7efa172a70746e8778eb16bf601e6a6636cbcdf4244d0dcd62e33b9820fada8baabba278180b596a18a966dbcea90f13850bbeea41f4cf930dcdce3d3ae2f2b6b4744bec4ff2dd73cb2ff670fdfd6af117eccbbb8d4ec6638affeb6430abc3e3600b326081eb4a107c5ac26b117e2308fe9496efcd1a8cd1e32b05f3a1e9286a3272b33b78e8bd533db83ef8db27e84d1e1fca968de208d6295c7ee08d0b5d2aad88421bc72175e5db882d56f192a03132062f699330c3022d889676c52681fffd2ca8cdcf8fdd4e39eee57464b994243de7a26d02113e6c2667ebd0c77cabef71811c897988a7eca6e3ac83b9ebc4b3f4f712d5446f3a3b0842f6176b0e2245df375919289ab61a544d5e2f77e9db398f1b2aa12656fdfcc91e6edb8767e09f2126f67e3a9fe849f2a84f31328ff4919fec3a284a41876bf02f42a68b6b885f4090838e46dac61c1d066d63b6e20f705afd1b879746cafdb0a4ebe0ba534cad76907212314be3ed6382ddf99756e8d4c65e3a5fa5655cd82d1ec454361256b94b4b66ed59e4a884d0e4b1dcf3d2346616633190725baf9f976b52e66978367c1e5a9d144d81428eb826cd59cdd1e4c3ff43dbe5142e25f96dd95dc8dd4390e82164db05c9b943ee82e0b854a0fa0af247340b69fd71807abd792732f8a81ea818a7390a0a476d74c791f06de23271ff4bbc6fec1b13d780ecd7772adda3888b84a349e42533c500c81f9bea9c7353d219aab26ca69f43ab5c6a72bec7438c2133cb4ee59966def4db54c44b24f4c3dfa8e5be55127087264355ad8aea1d48f339b3415adb9fe9f7a4456feead2bbe3937566205709252f614e8ed27e8412cdfbb31f7769308ea8957934f75963734137bd12f95bc972f955d680a4fd03e368988f6bca15a2351205ce4bed37bb23be95f585d994578293b2ccc0f7b0336fee9b87609413984bd16b93ee9495cb1552b11bfb2954f2c79a94585ee633e1e2ef74b2ede9753701b61ac82e2a77adaaa48fe76b67c5e6419b0a1fa6774757df2a77b820b80ea9841ecfe597ab89543bbe192256f64c13e7f90cb1bbeba1590d4ad613f163adeccc174a67e9c8135d14f5d29da297754168569c253a4c3e32236be29cb57bec9bb085d3f9a69ab9d17822a1167e7b83d83cefa0b415ce90b8a680a2f6e99c3654cf10b283e8f8118d1c851e6639fb15cd701012e82b182dfdd22e9138093f3e813abdfbef5c8c4e5e389c0668abcbdae23670eccd58e268b1c9ca08ccc121eb3c21c5fb5c9f14c4a1f46aec1a9511978dc21f6b2d293072c8a792923ec5f30d93486e6ce4d8708c0f316f1417345c6f38b0fddece6d5f2dd9596f04d7d554517156b2072cc9d319e36fbb0bc7d78565069412092142961af9c12389d5480db870e10ad5d123303c4f7624a7dce340cb47b5e4b8f2c8b89eeec3cf998c87461194eda0b4cdbe1afb92bd2681e6a372eff736abb1473c75807ab38a0b01846fc8d31b7fa357b3ba235d3d5b25346b5d591182e068300961b4cb7cddc0f9f5c59388836502cfbd4118bd2b1e8a7f2ab856e287c00df5507ddd4d6d949e75d6ff2abdfe8b7bfccdad3104a793f54791f5474238205fff8621391623b8ccfebee8773dc3eab262932b36a43c7d8a0e30e6637dbf97c65d24dae9632203d45d7c3204803ccf2e1b2c1282382a78fff61222c872fd755124a7d9c039a3a9739bfafaf2c53df07bb85388d196ac51544b420a7cd1b49a9a0633ff9bb45613307ef545c50bb52e02e30aa4599ce9a0ad9b2ed645f4ba49738320981afeb416595061b537376cb7fa55fe794bb229d40633084e039cf14b38dab0d626bec0d3e23f3c3c1a3ff6edc55abdd12ea4a0c3bba05c11f6bce5e47926677908ad8ae80e328c283e297a742344d4d2f39fc353009ec0bb6eb8c0010b6f0b877ec15c0f7319140e67d1f163f0a99bd6e552b9e06ac42dc7f0e80fcad03cf59a4f3a27ae50f2bbb5c9716edab830a29f09e8c104e9a495fe830f622e5a5d658cc183bec9212651b49238464e5f0f133a27ee3ae7f70abf0feb7eeb31918c9e35b0379270943fb9a0c6c3f2dcb61f92c675f4edacce66ba5d25ce6549048dd2659e2faafc2778b8910db1ac06af65dcdcdc6d0939ab00d12e855f21843520607ef32b9e23bc0b31fed430c82440fd1768036d2ea33403d3e4fa45afd584359ee77ad0e0a11f94321c110eb19dec57c706f450fd6fde3fd5cf4b4f32487313c60ecb9ced88b28d4f361ddbc78f069cd49474b771d197a06b914fc6d377baa3bc121106bd9bab68955c9114062345951168822d6f877a783478ef80e8aff525d0681d2697a247562a72fe17d3c4a79c849911e4ab0014cc214742063f9d3c62e2db99509c12a332e82c3d68272ab6ff6db70d8cd81fc5ce8d52632e54eab41b4389a25abab63287f06d72815d927e6ddf5af13451fe0571747e555fd962551da74afdc0b64cfe02226313d0ea283fdedde49adea80388bea3dae383037e90fa6e432068532a75dc17a539bc9014b6715a6b949e17ac45cd8faa50b26eae7780e4ef949c790d5be6801148aa9d403ddcf727686c62322fbf31635decfc009c8107a17e0bb35e8eb88ddba2e432287bcf87db59d603027da72cf484545b950422b5efeb661602cf569ff62e4bdb47fa0ef02c3a8a022bc89383169b79f701db94973768c10fc7867092fb90ce99ed7098fced00dd08865754c17093b2dbd52bb97f7572b6c38ea478f1c20d5d240564c4279f020bdf9a09a102a418cd6c9c67a1fe4b477b75159f01e1d45a0a81a859e1c705ed33f1ef491adc5fbc1b428b2c7c4c8397540c3ab6a6e8a462212de50b1e9caf576fdcc4a0f11004e1979e9e37191c4aa4fc66ab9b389b0de22e965cfe10e6af6a586f15cd55b298b313bfc4eae3a02e476281931d1ca80fccad1990c6d2e0a26e79db88ac057d3c317494e2b3bd43205437798ee2912166071e6444fbe132a7c6602e2d3a633569e39f05ca63b03069e21f88ce884fe7fc3ebaa5fd98ea729e669b568c0ccaf855776bf7a28c4fff6f6a0b2276e3b56e40f7b35d72f85125af8eddbae48a467833c31a425124fd85115179ecc675d1e2f0b6b6d4bb339a1f2024133614433cfb8f612128ee5d950d178ea5628664751435a1eb6e6673bcf7ce567bf49c464a4933ed04b6b1d52fc983075a85ffb02d1843a28f9114204d1e3720ebcdd8a7dfd8796f3ca893b31855d57e0a9706e54ec88b09d02f1d38296818773c7def981517fc7c71c85577dbf8744d6cffff8fe8ad21b7d300ecc550d7a9cf35605a67dd07b6fdf949b79c8cd5d729b19b02d28254e6cd2d4136240b16da9817fef7c0793b1ae4c98dc12ad9975d0b25bbf47871040c5be7e0e49899e4972ef5b15f79dfd30aa587803df32410f84c48de5f1c65a20c37245f8cfd4c4e653d3fd841b6f16d212b86d77764534256e0a5f19b705fdd9513019fa03dc704539b79aa46862433d3d203a03873becb072059dd86aa389f87683f59645be9b54770323a03aa45a4bbe9358dc1638cdd9b622d26459a336db6569e47fcf4bd4564194ada0db79cb62cf9f363d5c6c226e7763335ca5e4d6329ff6c06a463cc25da5e3a7b56d6b8a13f731e234c387ba0460d627e71f0eef080ba3e430d6d34c2adb400c342bacde371874a6f56e34d45da4834f75ab900a139a46af3c77ad248b93b0832049f35942b8b356ae7eb0ce207a964edb2f20d097bbf39d64472936728a559c57759bf49cd70240d74449615da786d804a43f463b571d62083c9085caac1ca9f4035e8df3b33969bfa95e7d3eb1c91b0b1103ca8a9bc74f0f4db460a4701b1397882302d964129645e8562d117a48d16e03463cd13a3aa4d4327b2c3c8dc35ad426d7d2f044a77346b9d77a22eab2941c99499019705847f01c6ded2b7cac939451878439ecefd3a629304c8b472ca723efbdd3745dd4c35138a5a836bbd3ec7ed79c6eeee5e7bfc661413444d1cf8f8c38e212e9760ecad62b4308a9859621aab144133dd8c5fbf372004ba9da35136d73b212ee67667bf9b7ca901bbea9b7308434ceafa2d423fbf43f63ecc3ef385983a28bf1e7612d408c335cd10d96e3957fe4d14e1196d557f1b678358e14539b1462a44f88cc44d4a618aa0a6dd1c72479a299bf37a7bafecabe3254053e1831c83bdb06ae9ae94fdcce8a2e8060ea552babe2bfe64cd3f4fe1b53a1afc2145e185e0e875455afe6380a159b2053259dee1c311b7263fdca3f4e846d65ce1db34fa9373cf8b2ce6c0d1b01723809f4a71bbc6f7a9be9428ac552696c367982328894e43240cb3cdff5f91006dff0e04738b608dfca22d5d059fed556232327f88bbffe26285b110e6b7ec9d0de2e58cde20c71a8e691f4fb51170aab224f0637a7292b57123e90064e163f36c9bb60e4bf283b49b6f72360abe0037d63e1484ed40558ae225251fe5e9539bd79526f3c87184c00719eef13e52611c16bd811d9334e26f1fca92655f05a2ee8864d3e8074dc3d61dde56485959d225814827d98920e00614ad515b2e59f63b86fd263883cce4ff1c3b5826971e90a801a00d02829fffa75820e843c73590a2e6f186ea51d5cc400a41c60ddd7de898a81186ae6227c74e6898a01bf5b0322ed3fc1a7b8478e3d2d32808c7ef2056bcb00ecea3a8d0b69be36e03083109e179f76ebaded41ba935c1608434637b7f7fccdded8dd1366ab6b1390d548775c2d2fefdb13ecb366bd2968f89ebb9f7fc8c45532c647aa612a8cc06956194e76a53caaaaeb88fda569bb5be14c2457c1b909e4d1bb72eea3e68cb9022535ffce9aac8da619d3660443a2b76387971a2a2781e8f0a2899ce67e23efc24702eb2a12ea4ac7c2ed8c7113eae0e8de39ba3dbfdef431ae94655ed857ae3e1e8a8fa6731dc72b32dfe7f70590be1069b806319b73405f084e8f059fb9796e7166abd1abc616fab1680dc0588d223f02f3040fcf767dd035b2a13d39acc838e5338b5a2f7f9cef7984389b9ae5f1058d6d88d51f9d3ed8b4675a1961e89df56bdc6e6132823f8403b4825b6ed95d13c367a8c484d61088fc442db898a5258dfd5240dabc86c2eabeeda4926c827997001cc222840747f3a5214df5e0f0325be728d32d365ed417c602a94dbb30557936d37b5a6add15ecbb7b731fbc5d6a96934701c16b2ffee5f954b86c015e48ef4fda3b52c680acd3f285900716a84c9790742c361a5485a19a9a785cddcace54cd4c9a581a9dd3bb24d6fc3da1c41f5c8d39eeed2702d4d9a21b453efc4f564a570e4c8c605a9ddbf3dddf7642cef4a2871c18e00436819446723db1df9722954eda5282e727145590d36102c28bd5c2f2e61b194770d297649c4eb17ce16460079ec7af556241c572310c56d444b35c82f5556fc60f195fd4cc1b172b022d7445c4b4a4dc1b3e0661876569f59ed99bbbb1dad8e26e0532d47321283c2ec9316e3b82d64ec2be8dfe4897b961de342eda8d4d4156109c0b9e9ef18ab70b42733da505dddc0fb62343fb0e1a675615d87af5cb94d7a7e5b6f2a06d55986037ede9a4773f3a24e72f3c9ce13b0f0785b9f7d19dcaa92a347b291196c1423459cdf17ba65109d2ba631743c8c0cfe54e6e5b51bd848bfa31518dc8fbe94d52fdffbd0368f8cb0f7c537d8faef4747f72a7ee4f05015319a7220fe76773998e6b6f01d4fbc683ecf7eb4a898fb3ff0b45da997b8ee8fadec53798e5dac41c137163b895751bbdafcc6f7126214f351390ac426c41cb281eff2ad5da5419b11cc44ee72746a666e056af9fa896c68c6e19f899e4b72d5496b1ed9a493480a96e19dae1474e472ba2a0bf1fe26fcdccb20b8abf59864290e1586d6abe9ee006b434829d01d14aeac22494c7542e4e008d66da6d3b926e4f3a48170b9da53f1b86ced61eaf1a4288e772f8c2c120b551164cba9bab44b2199836c8f55485882fb1042c3a85ea234b6a6a573b8542c41f66e3ca770ce9b2782edb682683b1bf29f4be1b9d6aeb5f221093b3a1ea3e88966619ca72e393e23c8e9eefdc6e87f71441aeec762a4d150ad80ba0d1a3debfda41ff1bbca0957711c3127549c45b0f2d17529a47e8d05f2c471644bef60f777ca40bd46c458341678101b04aa2cd30c780c337735d995b10317d95e4ade58bee39d7738e8125c6b77a64da1739cc4d27a704aceb0783acbcc7485b5ce892cbfe8b77b46a7d5c48ee9fd8f06c4b591afb676c5c6fdebf8ded935d848877edb6d1e269ddeba4d6cd22786a28864f38f6d3dbd01c6b597a6ad0595067f3c7fb05b946a91f08a911150b0f0b1f8276c045151d0d4c9d81bf778198ed3a1cccefbdc47efe29edb984c545b7a6e54969d30f405a70c16849e1861b272f7103b82c99520d2070f22ffece98f2fe34fd0f8cdfe8ced6314766680d2826c9869e7ed22209790db2ca043b19845566f04ba0f25273e3232605368dd78070dbc573eaa9d3d0d7cd30754c15724d4ab236efcece4d05aaf800b31dfa73cb17f55765e04826a08ed826ddf7dca33e6514755391c3b6da0026b48894fbbb92f3cbab2cd673faa5fe9f57d970ef240f084ba56a4aa229c98a4686ad47cb1e100d7b856ba3d6c041124c9960dd79fef5fe750f5c5a93fac2736363c17c22c8fdc42ea658dfbd0e7ce7a986a5517b6ea3ae082855450a05f6ecdaa99b97e72b27975bad426433a06eea0b2809ab38d8da41016cc2c848c34f87ff973a070eb2849695d20fa43589e177bb1dc082c001421dbd76dde3f4b08f7109ed8adc5926efef89ce53a64648e2dff89401e841c943ee77cb09363fa1840e4805acb34368de1fefc3e53aea129362d36ec547e26a7c576046c0ae9e7915a66058c433ebacb610727ecb0169b8526c8ee3a5e7946c155f0013c45b26667a549bc4587d9732ee599ac140e5b4288604338f72ea2c8d3b9c9ae8ef2f1120fe865648d6f9467a9044c9ad0c1b89555d1fa48a1a0288c07acfdf16d3c8db5a58267f2fc6d4fb550015cdb43d492d27e2e21686aa04b13aa4e4da819463086b91183c5dc00d6ef0527f95420f1bf0d0259892954308597953968697f1b255c640c209c2d37374ac1d0159eee67f0c68eb8c931d7fb8cfae8e33ec69d2719ccfcbf2f84ad970630d09cf6f256626c27d27442a6909bb9d0499d53b9b7e10f50f9d5d0d80dfd1633f927dbfeacf23415e8198b6204856965dc516fb9232b11f954afc817c84bbf1262a55f52e59c4f4697ba9bf7d54b3342bf6fc5f04c4062f61e1f64ca222e0f7c8979b5043c027a65e375e0a6615c88053088090692b5c1e0aa0cc92efe431f97ea17ec9a81e740349aa07f81eeefd86b62da86d9f143adf9742a0b201ae583b53a2b38f4933e9f177581511f81d2aa91e80cce5afac51f9c5b0cf6ca3ed2fce87eb6e8aabc7b1221761bb883a116519920b3c64588a1441fefbb5129ccdf02bbeb5cf1e7548f1b6718e85053fc2c6b7ee0d7d9d50e98ed01ace72049302aaad526c0ad384c259c923ce07bc15c602498f90aebc7d904d381e753191cd470c9b1a99fb95b0697740f36f300cf732253ce0dbb355b4cc65dc2e797c8adaeed1448c604f73e955505a68a3e8317d3bc09dbc3fbf2228de17ee0c7ef222aef53590b7085b2b8150f0087aafc9d98f72472201571818a25cc9d87472ae5db8b3c5a7dc39ba73a0835e817140ca6c92e8d4f9020f2f9750516e5a57952935f650dce349d304b70382ced9f43ad601c19418d977e12a6b4561e14d592517203aaf9537e43a16a9f3c4c5b35c5d3bd7e6b4d26d6b157c71b653b3f1c23808661e519e4e2a1085a28eb5f9ea4c85decd8f10f1203999574877a972a53ba168f9a57d90cbbd61f960e66a986b28a491550027602ccfa56efbd859089fee97af11055c5b8936b8f164c36687b0ee8901d797f5e9c5557a508d105fdec6905e44854f4fe21cce176251bcf67e8acf0c1b8aa33fd62384af66d302442bc6106f6583dd18b497296ff9523e763e4429ec52d7c88ce1dbc795267b640875c9322dc35ca832f18095affc0b2e2e0e65ec55bb306f8a6312e514a976637b70301428582a0c2516284689d033e0b89bd5cfd48a25241eedefa762620c850d37ab90e4dda2474557415a8cb68e082bb86741a1cab05c5a7d0d4b5d38e4fba7371821826fe4bcaad151254729bba583af9d363082d4a9b5460c32d551439af93ead8d36f03be2405ef1bce6b4035e90a52b09456c476058fd92447174e015a28dcf79a6ac8e793b3cae88c966567409db74d1df91352ffe65777ced2d8d1da6f8f768ec2de69389680d1a0ec78fdc284abc0f8c6a7cea5a24bb5bf27d74d93b0c682b9f0d809c72bbf714dd1f7944c481399b0ed26bbeb4b319f0256110dafdc6115685b0f8c5cc45eb67b35cf49cbff0a5df1cebcc851b7dca9698bdd7a623b9dd146dcfc966253e11572a7bbd23c69f7cf279d6433a12db780e3098019da0bc25acb5269a3620ac9a78a5c763859e4aa6d76a4f9e352a0df89221fecfd487ef2b58cbdb984e361ac3929618e9b44689db4ed5b0ce1e166856811ac7af87ae89dfd3f263ee41c188b00a1ca90d894d0402eecfe67c2a2b6ba3be35d8af0314007beb051f0b7798ab546b911e33bf2a845efdf91eb9b789af0a53797d94fdccf64d71e93bf7e40d51d0b907b2ca200ecc01c444d6f656ebfb5dbdd617c2b65ba56950200074db4a38800599a9570201d007ec6d3d8b530a3568122d192b3fc872de79065d01edcff1b3b0dbab967c962f3308c2d5dd97dac537601d1726593fbedd83648829887b087454a6b468203942ebe58996599770a316a6bdbaf37faad7bae3bb0708819994851681928f37fb99d126188b7fdc6f752087c5ecb7344296ac8907d38ec6e241776766c5a3e4678a0b4d51b959fa0787a8691f9365590bd4e57bcc573c8a644094c3a6d8cdc87764cb78316ed7c7391fd33a6734ff4c02f1fad221d5473e0158411459a502f57aceb73e32a9199944ef963a0ffee7c91299e566d115102acb9408cbb83dc10a28d318aedc8f2349df57e5a2c8851b21f815dc5a0d8181929ad00ccc30507e480d46ade40f9d34ae04efa5ab52c4765df74075dfcb714e6e7a97bc5fd82c59679c4537e4ead9418451f09cfd6c17ce1a945e19b067badcad116bbdb7fc36d19194eb732980820192dfbf56126004fdc6951678e58b5ae095d6402018cb73865d0abd47b5cab6ad94347ada7cd45fcf777d57ae03b30287110525ed2bf302c2c5e76ea8cc78861dbd1cedf57a27e712b17554fe4069bb1110e65c0597a778b2db24ffeceb0d4081eb7396eaa9880959a42a6edd27d94b164aaf6dca7c3f22518ab36ab406278f540c4ca5d058755624e49af3d749aa3676939077906e2637aa3bc50e88e47cf801c8b25b41493b804c3770feec7c18d7f63787e722c8e5514f4321c190ff46013528460be14d92976a187c488c9d196656176ef5d9f2ffb2fea76cdeaedede1820aff7147129815f6f2c64168cbac05a9527b40d3f1db450e774236c687b6f94fedf95f071a6c1444f5a058d068b92ed36ef6cd1659db1fd7d2c27a3f5e7635cbaaea09af373dc1c84e72c82112d8445e25cd5e892986a7ed66de6a6e9abd42f2bbd4e76d3e104221f7ec70f2bb1ffff3a93b6550c670e04a9e133b66ab5fb7a20422be368ed50d468c88e29e50422353b312338c102295988415bc01d60b727988d8b78a3b39e1da105971dd34d8666fc34ac1c19eea1136f76cf5996fa6aac999596bb8802dd784c3f4f13f7ecc2475735e83443c6b698a38982186a79a3c7a52b8ebc8420148c23b54b55b0a9431b41218f673de1934a6c3ae175a7fdd6e12d46807dbb72f83f5777448a708261b5e8df7c5547cdb3656f584026ad5a632dce344bc98fa0342de2d3290af75ca1437f08aff9b22e19f02df550cf5e93e0b7e958f4be26731583a9626a749748fc06d51f6992da3a5532569634aff41656b154d1581c02989d684a9d78f7ce9998b5bac6287333001e2c263a7ba8ca699e631a2939d1ceb80cfb40dc2d41fa0ec6c9f6f6c427a2889050ec5abf5350a19397120aa840ca55525ba771cba6881743ae2ef59fafafa56ac1dba5951360f8dad555adbbe2b70ae89539ccf07b83623b70285c36e6f29a46e0aee9b48ef4813c347c3cea2bc7b8c3324b3e3ec553eb7441b54926949afdbb43328c9ee6f802603c3f97939afd4ebc1e3080192fc66f49500e292ba95534f5278f4f86c658ea4eb48f3034f83c4add833b1223e909e4726c469eb4f8a6a5649380576fc532ad32a3713369b6287c4988aaf6615967799da1685bada26793febbad3a50d7b1cfe6298db97c7e42bd74b66c548283c7261afbc6af7c044f01e27bed9f6d2b1a8b01204a7d7c7eb8ceb02715edba4a48c2ec4cac85869a5f6b9f22a5f2f277b40a9270abc04f6dd3da775e0163e66fbe5538da7bc9384138c7760770ed9331bcf796c10d12506f9b8bd8b53cfc9d0609a1d8a63903768d91bdc0788ad75990cd38b0b25210acc07d49f8b0eceecb61f39d8ff78ce57e64ca0e35414d5584a89a3f3bc676d5970bd570f4892ba5f762f30181e02c96eafdbe33a5fbd9b87504cab413f2e553b5a0e353510badbb15c5e4afb8b6fee512c03a5f45a8ef8d39bf852b6689b7baa4a2b7046e8e8a99d9ff6a096567f2dfaed4d68c0d28da08d1dca8a68a00c3217ebb017cf7e9d49bd5df4d3fd13222019b1bfa565b49c9c94adf0f5ae61161afb724b8995db3bc886af17e199d7123c3f12558eb8b1b97b4a006fc241cc252b3d60190141557d8206ec777e58fd50a34fd99cb0cb2cb2e3c8643be30bc8fcb372078dbccc2f9389b4fb58b8c0d86c1b118104be7b25d48a5958a6754063bd1a45b3da33932724dd9c0f8406d67e1edc6eae9b26a990f8361f62c0c9ade2ca5eb162afc297ada3b1ec402eb3583505a0da88f24598edb3f4419ab91f30322b3e0e927d613afa94c19eff528f87189c00369791b6d3c7303c87398f23e0bf1490bdfc422b760cf192f831958c7195346753bef7ffd4f7b810d65cc1926bef6610135345731ff30550bdd95c6c8824c86f691cf368ab8c93811f929f73d7c550d1942d1e05f6e9292512bad11e6b859a24c7d920bc96c39c85027c209cac37d377051b39d59b7e1f073cc303cf24295f210c03c55881d593d945ef63029a5bbcec93c911d3269a1264313542973a7a356d9c6a3f4e83916ff02ef95b38b6c5d9e2e39cbb231652d920a68662e4c852218a71f9ebb35178aca74a4a9c7feca42ce9ec35a64a13e40b772430eec8c8ff50b0cebb25d218f8aa8f3fabe48473ce7915dc16fe7a1472bdafcf1f6465da6bc8012d671a87d04da61b3c53e2d8419916bf6d5b6ce80ea43d31baf57d6400b8adbb4429c7587f438252968f49765515ec956ec9077969b90d910a01f1e26472c5593bb3eb182c133ea285e418958cb126f4f73405cd2c97e2175e68c691f2b94e1430b90cfaa0de2dd40f47af6d1551473f7aa7c1aa84be385b5496eb19f19bd1654f50e068d261dc81d4fd7dc0917eca1b9ea52298ccfafd8512e00999c39de5d6770f6350c6415e5bbf40992b20a75b6183efbada79243a1582ae01968355b01c42b520f23576938a7993e401320920674d78ec10773286451ec6ea046c74b28cebcd6dc23374f1fc425dca55a53b16e0e3a1e7645baaf5fb61e4d492d11f5fd687bef39a029034fc0631d9613b51a28c4de2b690584ecb7a421cd029cf36c4c0cec9e9e38aeed55a9384a13034eca64fb09b8b52181525e0961de7d82ff1f1f61d43542f98b51926935ab870d4a73bdb6d4b7b89516dfd7b575eb46e1c21794d3d20f91fadc744b03c12d07f5a8a906e833a9dc134979272a1c1307b23280ab47381a6a83e6d76aec6adf2adbcdfc8effaba408a961f33b378cc427d8545400aeb14aaf836947ccec2dfb48c23414bf01eff68c05b0ab291765bb69f91eca430180b6ac1ad952a3745c4eaecf3fa88c25d9ef2447b4837c45538d2599328c887c2111995a3e1f54919edd5db8b305bcdfb5428facb489a1e2edf196bd1b96684158f927cdeb721cb62dc6c3ddb976bcfffc56f35830ab43352c000f5549ef73bee2575322316f516669554dee851c6eaa03f4788e70c39da1b0bfbff9d09ec7d5e450b8161651e6c730b55f301592400a0d9a72642f33c4d066ca7b99e60cd245892e942d228774454aa2ec4c5a1d28f0ff8a1c15ed242940d16f24c718b9dba37bf09d089477207e2b37d6ade003aa9611ba51abb7089eb5896c21cc592ea0183a5f75f7d994989be96e0890df403a921788b8fdaf7afa44bcdc8f0b44ba67e3e7ab8311ca769f9f15cf796f9c3c4b0f291706f54a51039026ec559c434dbadb99989351c65369baa7fb821897dfc8cedd94d73ec90d765edf66effc75499f8681e147a0cd61b9062927f5330038e5203f9990470e998ac353aed692097a18dd3c4b64e64a7f87f241f2438da9e0cac9453301c63da16953d9112f26a07570e3507db6397246fc61723be48190bf3deb6a845aadf1551fa89d09cdaa61883dc2fb16a0f194aac5d8ea113a1fff30c12a577c4fa26f373e96a4eeff28c0dc2b25b04abb690f7d5d99c5b1c53d933f2a08e74b42aa62a2fc533e791a282d5f1dd80fb892dc5708548ac3653f77f8db23ab2ac9372673cc95511707a4cf1e763f7cae89b5b19b80b77b41e86bfba42f2a64ae64f6806c07d7b6f4b0de09421eb45062b5a1df2d805eafa7bc9043aa5d805180c337b75ac80b7586c9df767e25f6e1281b478473bc251ff44732e558ceb7a4d0c0aac1fcd0204521b391adb3775c38e9ec1933d09f152b230d8d4ad3994eec4a004936456000dee08b13971b9bef29abff564d8433fcc0034e685a838c6a42dfc85edf1d7d5e636892b409b8241b0d278477cbda517f279882526d36f8adc0c77a332b9b4202a81298f516bc94510f1c4eea1a15b6f39bdae71915da543c036aa4d5513487fae08681058429ca593b931229c747c83b981f55c57415ffd858e57dc8d72886eaefc6a1ccda2354a9267230fb1a9559332e29309801d60a7bb1112663fc74494666c58c71654feac122086c87106efdd373587c7b77cd307558f40cba3ebf61f90b074119ef81fe87b89076bc6cc99a53a180b1e5418e95384784ce0f1adde5d829c78abb56ce43889f7b83c90e9ff57c30ce49b8af9890b48e76b3cb11b646faa0681979741a9becfd7ac76e0d8e16e4220e5ca4bf697df0d0d62a6fa26fdbb80abd723a8c590374518c7fbee329f8ba5506e4ed139515fa8f4ae03b1d1a6729faf267f7ff6362f6d254c15b302ca330fdfbd18c4ebb111b31246b81aaf4dd412f718bc257d07a6bdd9f2e93e5d21d3d8066bf87bff34f4c3b3edced42ff950190bc46ea0e5c7a66e9eebb385de21329d39fcc6bc98f9cba7e2788f186d9f6d277388a6e1c9e781704a054e6b4bc04377c9da7861567e3a0a82eee8b9e98e37817e29ade088c666ca52145791f74d66ddfa30cc31f4fdcd578fc0eb17d25b01811b106a9e175d1837b739b3da946cb442754cc98d8f0ad4165818313820ad2f1b6cfa57dd427f534c1dd86cbb8429cab3e3abfb7120cba820e5116014c37657c1b3775a644afc0599589244c2f0145dce0c04acf53e449b4c081cb701b6dab1ce0b8d7aecdafda0a6f6ecd305c83389c1e2fb126fa68b33ca7affb660ac56522d1f15d6624f76f0e9ec74a67ed59c883c83c43542e949d6387091f94bcd1077cdaad2c7321d1709389a02a2d11b111c810895f86db424be8d33467b411ef427cf75dde57bb6192422c346dd53fbd80c1722ee6cd891cc333cb04a809b38a355b828e3837a1d79ee7e4d498a425b33766b3f6a1e1b663fab66e39dc4d9d1bdeb1faa0f72d525b83d71b513c469a5819db28b945565e461e58e248cab02ce8f4f1d36dfe58b8f4dedaf1d6745756a8cdfdacaa4949578665be6defd31bbc25bbe0dc13cdfc2397057e608bc0d5142ea0a12017174c9429d3a2a690e6fad668cef452d80a23bb9a7ec6b57af1e3a5e0385c46c85e10228757fee4d911cec5d3225e7449549ebeede1531d8aa867608e5dd37f1aacc387371039bf3eb043c5181a6dbc7ce64a9839f7ce38b03acde79276ec6ee54c1f6cd4d8bff177b3662d0d5dcfba0942ae8efcff49ef276e5302a5a1342a7fee3e2429a163e22b7816cf05efd345ff2c779b5c6b3840e103376f7093b7cf61443ba17f24bbd5f692f7efcc3b2299e9888c821b6fd0e25177127c201433a00edf9aa7d91e9f3b4029702d00c286d8a60a5943407bf6410c8f19740e95cbdb449c24a93059b970e3b9da59542c45f8cc3fbe2d1612d460076cbeebe7c71bc1d1d67c1ebe01a478e646ab354d3f60b24163ba6a70f8f136c54e177d87a6b65dc07fa8e655c8c1db4586c04c43567f69cdeac396650e36d5857b74cb9d9e79dc1ec0b014854272937e2e36291ba4f82c22f2265c0f6c040c4c8c4a37546089eddf19f3cc388b3849d07b50867e537fd4c0297f82ac479ac837300dfb7cd6a67ee1a7286ac5589d2b4b457018209eac8bc1c21c17ce839164226d71e64628f5d272b9d1e095ea914442fb6b9d86a08316e9de0abd3eab6797975ca1b75deb46ac443f03c745aad59ab4d7da692670a7024b94d35098680e03b67385d76d22da2ae74df38ed38e5219c739583b228ae892a05514e33d81e5b9c0808577b98d5069b46612f6b07d2cc7cd30b83659b57ed83c11d5727da2034bd465025172c8cbfa3cdf5ca27d7315d3f2407181d497232fd2fd56a5b53a6c91c13529d41d3b534995958efea6dbe481ea334b3386fbd8f2e81ca3f979cc559a9ebf26206279c68df65163b19db661be5353aa4694209c6605ddcfa0e85481fff3a8a449c9685923b6d40cd403f7ebb312b19d6afd14f3291f575ff123d4b6bdae60a4d7885f9da864c60b5c1e1406342f45333e5bf0ac4e0239d1d1928111592f927f8ac9b795a9df144a10c2868af1b092a0986fcb54408e9f694607cce855815b12bbd30797de65080da377fd7206fca121c4a5dab185894035e694a56cd119a6fbbfcfa6381ca3260dbde9e969c66aa6daef9e2d0c1f2b58c4c72d88fcd1ec44bd206625dbe4350cd7bcda09c467a186abf86257ddbf4d139682012ce5acaa165f3c601ab5e52b1669c92b2e90c48bd4b77c477824f05648da114ececf4f760185ef75c2a4f8b15113d2ab4d5f2851a9c6e58244f4d5c4fe5dbefb0314a6b9850b30f979ebb481ec2beffe72bbe53696079546d716e57570a159849b90c84c318a1e901c5df8e3f3d904f5e5ccfa3d84314b3dc5b603bc13584cb16b23c602fb52219f4498e366cc0018b94eaa8622ef5fbf199af2ece8db6cb2924d04c1739539766e26624dfa35bebcea1b5a564494e256fb62ab3371985e3f20e381770b52b023e8179e081011bfbff53b0abcebb5c071b6fa0b01297e4a29b41071be647d7c4d27adbbb57d7581fbec386f34e08f372172f3f33a5e4566f6bcb7a4af15a7c4cc19bcc7125134256c18b17b78903b9e4c22ea77d4fe8a6cc06564bdb7ffccf4d15ae41837ad55d08c15ccfa080508c2af4a3b0388a2fc181468ec6384f13f164121b2ea7a22f9462ed4e9c8d4056b61d302ca5c66487f75fa5812a7135870b8741b89945d1acfeb5ea3cb685c5b6772d1cc5c2bdd203e0e9d3b6cd8d6b49e9b5e8a336602492446e47f08f809aa9df63e2bbad49f7333a7dabefc13c5f6e3edbdb2215c2ce1ee2a3bf62cf9a6b37e34c76d608f887fc6a17352871b97c7181c51bce243034c0c14a0a75d85d817037f9f4c103eb75ced5681e5bbf704237b46c7e1c524935328584c90cdc8588be1ee1de625cb8817f58459c6aa7d270adf3975ced4aaa501739f76cd962a05bc161db846a7defadb75755fde103b968828c68213c898fcc331ef92ef6478fdde8e53afd7a3fd418d6b834cde0a6ca5bfcb43f8cfc8d9ece42e4c700996712b282b0b98a0c7b81806140496e89cb94cf0c31c976dfbc3044699b3b38c80f54ffda069b37f24f4c5abaf2b107fda87510b98d524a53e59d292533932e4fb209d34e6f8e130b1a1d223a56dfcf18a39fc2ceab9830c895631380c3ba355b419135884637ee0bb68991c68c2639d749bd28589ca7b7291ee69597b107347efa32c2cd3ada62b8c2db85a112aeef1c2c73d3bc71ade58786fddf703a409db9233486ab01b42f03447df651590ee161942deba85cdf648a3fe203046621bf3c8ae6ca2ba304c4a28574b188d54b7ceb6dee8bfa36ca3ced17e10160658b4ba969fb46438d5f58e509feaccd4285026e9244b8fdce5e455903c45fafd799662076218115d03131995abcf1dd69e7f08b933cf319e31b66d1a1aa1e488808e9cc701d709c76e4fce171e72981e2c645f016a8400d706d44b589b14d8aaf6649976f8bed3956bc64a83d71b53eabe3bc5abf3281a6ad8928f8aa149cf3d430a78a0ffc02f3c05b416def6270b9a6b33dd513f3900429681151e5c944667c242285d3fd8dfd3cc976cd8806d78a13d90b4f4fa1a622a4bc5451ec67de50e66be8c4f86a5dea5f1b814e8bc9c31909a190a1fa46d7d5bd6747925e9d8bc1cb975038c7b5e13093c9bd48963f52bc9c2bb4b5c2b3a9675935e6ef7b69d70ae21891883fe4ebb174ee1636c734efb9ea1b665b68ea703b54e27035aa05dce85239625e71e29bb8c11a5bd5ddcdf1124ac303f597db8e6ea8acebbd3e2add59c74dd8969ac3f980b5cde2584fe31877f76de903107b561393300e8e28375ecf7dd14b6cf9d8dc12b84108dcfb05d1a6ba8d7ec771c8fc21d66efb8ab1c159e269a3358d9ba8bb6337e76d8e4b88b3da7715a11478a203e53e95ef2a096e31c909a0b4edb5d4ab2b422d9ac5296f4bf466437fe6b1daae7618ca47e8516773a6dfe65b8b97a8e6e52d783911100e3dcbead357bd09979f18cf50c16967ff2a57d9f148be339b96673e9427d28d88fe27a0c6c3e83bfba7cc9fe7a26e64a56e65b7b462bfdb93d108419d6155f81f1beba42e2862c903ddcea527b3493ae96ad365453840413711d7c1d5735bc7a07fc2ddc5391c86977058eb7ae5d2f3f9e8bedc6bab0317115af7110fc40be679505dd0466e4421125880ab2b8701de35844df9bde74b9b8265ddd5b90da42b11ae148eb3a7a10acc4f38020530e08d0908b7b14b216bd2ac286df06aeb6bf70e0601a3f9bdc348ecd075e2e20752052c2534d78321aa4d46859542c6c6f69ff340ce950617aa733872fd1a3ed67094c8bce7294527ac71c2478931f701c063c45196f7ea54e6b07f83214d159b5a7aba163b993cb6e87fd1d673da06ffe87f2e364ecc3d361f278f92e00e4024d24cda5c89198b42cbcd22682fb4212859762b425c00942b49f6fce54484142815d8b4b64cf5076c0f8f254834ca774c9e4f4fdb2f2cbafaa9934d22b7d2434fcda66838ab4acc529451cea3730d25985d2b7d14dbded00e057a1a398a25494c06febfde9f849629a7273234facd6a3cad804325734c4b45e5cb161da484d384ed26cabee199e8818867372265d1bf7af9a063679a6a309038d3017a73b2bcc892752f95e708290851d5a3f1321758aab67d4051bba8ae5d0e006adb070000528c9e5ab40784f594ef89c8e5f4f48a10e93379fe36e57e2225b45bc87fe259b466bbc74319c3151ea7f4a0c3c8215addecbaa524d0e784c73b8a5645c4af86735bea49c74481965287fb82e70c687e4ff063e6da400b05555776118147b96bb14447aba2ce52f23c42858c4502d0cd6bacfd63a449d1b8c5adcbc9c542758afa79bafa55da9dfd5ab1106d8c8eb0f3ffc86d61a10bff86a7b025ab417619100e5f5e451077b295a0ecaca36519663c23a6426c09ef664a9c6127d002a77d9efb05054a9bd67312c7db48c9684d5249a523676f4830764c44c2baec4357b69a049a6dcc6afdb9a470546963ea85c0c99e274d4dca382a93e6d9c85bf29070d9899a93cdacd626a0c2de7471f680d5d1ea9594ee831b9601e2d6c14b58340e3e2b9c3430263debd0e7a26d3db7e151485efb48d49601967351b70cf1302e4fe64e0132618b32d979155c7166a72f115afaed2edca94ec2506eb0f5f0e8219cac6cd0d992a1d41cb41940b1f08358293ef86ec9ef1474da33b02ecd7f091a319bcbd5927767873674653baa17b28308ade9be9dc166411c54ed7eeb36c2abf8818dd33f110eb8c65a37ab294d2b93a66aae5f5c06c5629948a7850abe2b0a313f8eaf8666bcbb962f3d7da811c5694af512b1eb6775b1c2529f4c2dd7bfbdb1cb71c6216793a6df36894b93c63fae54be8837416367f6a59580bea9b8c212022102058506dfa6313151f3fd819d08347fb92a15652bcd536a8fe7312e495fb40b70b884ffaf2223d0442dc740ee153519a49c2f95e7cf9f221836972073444af7ea3a79c98620c7c07a90721a24030a14339fc403563737e885eb7b6381669906488413ba08dedb75093046db1de173a72263f640b77b3274bbef2e208f973216002e5d95107ee9dd41f376c1836dd93d0a39d46720103ea89b832f1aa8af2d72707eef7e8b1df69dbab6119f01a7c3cc284dd5cff67c1d0863de5c62b74f54ddc2e82ff44e37ad8fb4f82c0403a73bc5fbe3737e6147e839d4c1392f78e4a0e2c38767aecb50ffaa3cf4070fc4b25ba9920c23f4a41f840f880f4e17e182ca748d31bd14b84660a0288ec0aa579f6250f757af1b432c50de09f2c658eeb8dbba58ac525a75621ef45398084100c1324b5768bce7b9dd99d54383dd708533414b770d4bf44d3fab08b7791f6bb819e4b64381433696910d2f31768b2a62694940f49034e31b02bc7bb826681db99fd2a0717117ee34904e75b7c4f7f7a4a4dd6d012b59188702063b6895db428d837b6c65af01c228bf09d145a3f36d0bc5200e32ac5afb6fce8106ab462f6ca6a8d210a5dd044fbd0b37b11895354fbbbaa1b5aea52c26a41a0be498f51b531d4ef42518028673acfc647be65285f6ff6f93c5e787fea7cc7def7ea31be4d1f2f3a1be7b957a6b193b31936e72ddc1293082d97eb4c99cd88a09f867e478021f1492e1aecadfa1fe9c1d21db186b14100b47df755bc171a096306e089546b6d08f05ee307f4e1ed872da34136a346f961e208eb99951515c45302c80f2217f5c96c7533512423f8d54ae1864950e4a69428a271103b1afc0088646b915eb8e5389d203bbce25ea1206c05b2974d6bdc8a622de28c65667d4eb0e99c4e845c5b509264cf8cc9a61bee5f38bb071a0e242a73718369bcf46e289918b85fa74aa83adf71a847da56408648f66aca1aee994e109e234f70d4660a28f8c36d233f7a8ee4aed00343e9360b5a39d5f2c020c1c1b86a829def47509acbc7bf16c82b1ea9f537833313df93854b160cf1ca22a652cc053318c962ddfdefd3344d77dcf7e07793ecaba979add217e798426d07cc017d9b8f434cdc451b8c9c0a0cdd7bb99b6b7b048e0e0606edebd4b93fd0029afbc37ffc9487478142f01a3bdf9520a9b4c9b43396d0c56fa5c061bb1a5b9faaf3532da0d3fd3a5d529296f93ce986955f39b95c10c637a92c7c64f6d86b6c46104492f90b4e7af776395cc4f394b20365041cdad05bb953b4a2f4fe8a8af000d2a238070df7be46b8d7d38b94d9a1789c04c1ebdf1e23e9ed51f67f43565b7c4814a3ddbdc0adb4e40176fd0ad7b6bc013c9694c0b13a349cc78c27b68897ad54db2917a2c153748ba9255373d94c136af5e525ec3ec22d74b986d14d4cc64b240373ddf18c0da7fe0e04e8b0d904fcf9c9da626745a08759da9b0c42cc2e3f6a4e61a943fe94a17ce7d4649de442f77042db304de53129905b80f2183060d5bb9180dd2fa0e7ca8ca92e1f1d9f52cb12eddda7b73df64d0df5a800391921bd8132612ae3e9972319fd52f01892b1d0b05338dbfa53d889f519aaf7e80028161bfe3125c688205f21cbc1863a63e0109d6356c35d25ca3502b3563c71dabab74cef68053431e24f4fd9e82b5d9775a1fb8feee3a301db5d007c7bb5a68a81f4870c3f02730f302320f5ed49c45592a6ec7e775f12c4b8f6ee23a01c23afc724f190fac0e46e25f6e71dd347c990267075361510daabae7824cfb870f5d83346db459c925f8510ed91f07dc78ce5740586a57d8f4547ddb0359c8999e1e11806081f3e08da14094bffef7d6189d3203c0479e11cee9d32f5ec5c1e9254dd453e9fd0482b928eee64010b6415263e981b8c82da84203cd0ebb4b04efb02cc8a8118235234db4e9972e0884874e608deeab52b745340f90b02e01d2e8c44bf95075645b57b9417d962970e27932fd38ebe6c697bf87ae5a45a204746093735055594a471cc6f92234af098f1776e2a1be522de6bee3ffc40a345a2376475387afec1dad44e2dcbd0a47940f537bc0c429c354aa19cac88dd686f008bdbdb47109d32080fd8a80a28b9e4dab6948cc6141be65f16aa184d3491c916c85bab721f989c9b48c7829f7cdb7d4b5f19520913fa5244e6cb7837e171b4ff2ea807d054704e111b8c00d69bbde994b53b95bffc23dfc9a9060b04e8c56a52358db97034353764c9567fae75afbc48d778408bcfcd2235ae4a7299978a8eb8ff6cb2d7a2130e7feaa2417a6261b809eaf037fb446fc09170957b329c7f8e6c28222a8633b72877d6ecc8939e50e139f5544448480d592a7a5c934137b11df20716f514156bec9a835234e5dc52f1a1c1155ea9254ec2a513cea8e57ca87ddc582eee6c6211362681aa0bae468571f066a5fdf1baa6e0388ab683e3b5475d76e438118eea99304186e501046bfa2279c7f19c4267aee3c9873c947051b22705d517845bffe8214c764f0fd7f6f005eca58cd6811c6c5abe51a235ad50df1a7b0133c709e7a79b41ec3690df24ac2b29993d9d138eb25e294966bb6a7332a49ec2001629c6ed3055ba02d81b3c601084648b7c6866c3311d9ab1931ef4595c71887c2d3dd0472bd824321f1c4338a736ca0def78e3f4751e4eab695dbfcc82411cbc2520c3e788eec06226ad64da1afa304219ea23b845f8f884f745eab8b09f64db9bcd2302c0bbefc6a63d4aeaba7d6bc46819b921dc5d87ee8e59f69b5836e58acdcef527754104126ac844ad860f5ff9dd3533021c84aa46f7b2828ce6d66ed37e229c6cfad5c8a575399e39bc7a4d165d08dfab25ac40cd6b92ab61e1e83fa3d62ce0afbb7c1f0f608dda906db8fad245b1b096b30c9737a28596a380ee6345bd0a9602985d64e284221b2d3c0d5fc169e89ce24e6a5643b66da737e4ad5e44fea27aabe0480d1262618a3a0ceac43959bfc83c29831be2fe682f7df8f756608ac2a2d22c508c717431f30f5a487e8078150d63e675bd9e09f71f4f8fe37aa2e2942040ea18990c835c41ced36e964a54eb8b8bb0148b14278ae93904cdd9852a6a05029ea26745af82b364286f75693fe0309ace5fa45d2933433682d1b3a1033bad566e82fcf76fdc6186305352a07bef9802bd9a9525c5cc53406cc320b7fd0080b8f7e889e691b77aa04400086fc87b06e236d9eb63cb1417d0b755582913b1ef7569a5666f7cfecc7531dd94aca9c5f3fd38bc57afa4173a6499768609168d8cec60e878da5cf69fd685edad937feaaa29276d6c79d00c1f185b6758e7d69b477039ebc91bd7253d25ba21b0bdab7dc7fa505f26278b5efbc4ab0f668e1194a01b578427d8edaafb8dc62be9b8b0d69589b48e34bad66649a47500289c745854e6222689704c8b7595029d6005f7895b3a3f1edfb8154e87d1fd116345c6f58363317c3398044cb2889b482692611d869731a90120cbe6833161d4bfd56570b880b97902b9bb2605161fdb23cb673af253209a4c7c465f4651ca2feec459330aa66766c587a5fe2e3f15795a248707634de7d0ee64d39896ba2691f7a496ae1feeefda4766c188bdacc36d0ce589a99d343920e3680b0fb26c653b7c92a74b7e1a7edbb7604c47a4d2608a8163693fb0691511effa762086092ad0effe6744e6c11607028b7113369d9110af14187cc4f36d0d83a2a1b87b567cf2284b6229dd2366daebc9a257f53e67b0ae3e1cc68c08af64ed7cc107c3b962cc74b0bc9a6d6ec31d7589fde298842360dde4cb3a489da290087cc08d8160205218be349a79f3d120c5e52657e5df6365a2d512a32ceef8d9148bc96f01d0c92f3aed1933d6c7667a2c16ee2bd00603dff0a79af2dc60c7bbb6f68f49455841d60d234319f9fc02534976acd360b45926cdc4718354013ef02da9dbda61be1eae185479eb72bc5d5c3707e6fa550772eb52a9e8590d567077db9c5b6504fad11943b02a8b53d264eace7f7fb46e8261871fa4cf196241502c5d9258736ba2b2c8c3849bdb042b2123d6e9d9625e46ef71f2a088619a5a429e17323d77cd26835b3fd5487d5764cf0daf39c838d10ff8e578e0a016856e3164740096da9df360ed70178f1172caaafabb8c0bd720f31464277009791bb2a5d0c9de04535ab72374e88780a420034056072db8eaf935677e012b0a8cd507a2d46c7e0ea8c9a2225f27492c2e55430a11f13eed199b2f344d23ab9c8794762e41a70c4724fb251812964bbb81255ed86994c2e4d24074273778dc250a0fc73de19d6ff25078393589a9c535d46492369c8f427921da8571b8070530e0597c5608c1f10d45a85a446596be389683eedbe6488ea5f24ad1795bb202f0eae17c1e295711121cf6da68f163d8015c693d80f4f2dce4e5fc4a7efa4d28bc30150c1ee3d4f653e54bd810b753e9d4e01bad2754a4c895afe47392ba3b6938f22164334769a2931aaf7c31506772e01ad5ccda5ab9ffc4cf2103f420188d59454c078244d32a0f21c9a163e3591381962359286f920a9fc4b454d00bfb400a7759046537cac14d8dd5b40205659a64d2ddd4b53dfef4354b8397f55bf19e6cdb8a1670f3fb361b14a3e28743adfb3d08936eebf59b1771c17170c384d7481c82bad7367045c7889e26b29226e756bea39dae3bd928082deb47f611ae654793ba2a05db69fbc76cb8657716232dbc25290fda5347df1e121584dc5ee105199bf3733563b50a12988e3bb273cae8a7c6f00a0559c73df35cae2ae932c406759d5c96b338493b823db0501209626baa68417fabda2193bfde3d8cd41ea495f86d9c50703c804260a408d969231fb131db79696ad3a315c1b5435757831c5b2f8cbb52fc58cb09126bd987747bd3bfcddab40e1e76b0bd5664a398b97512b7b4e0c50ae1dc23300aba4c9512bbee789524705c3399005ab2df51a10da708867ac3ae89054bb49f86fe4889314faa7b267880b03227fe3d584c1d1f35ac71e6ad2dc0a08323b7456d8a87f57558490ba9133e06a43ff860e20473c0db58a0aa78137e7fabbd4b1fff10a83db2842a770a2b78c1d07d437d64a4bc9dd1324e3d29b41b6601580a1f0e6b00a1ddb455cc81708f31f16f449bda2fc9aa3c31d86c669eb024c493da0f50dfe79b27aa97dec9bc58d5c530e90a21c6b41744b5decded67c9ff9723d17de28f1bfc806508f664c906646d4f863eb355145dc279f37ba9fc11c3a1a4e61c6dc6b576cd4c0585f21cb6d9390f171faff472f17193d09763cf9ccd7972c50b2280ba3606b39bddba8b13f36e36d638eb8e1c6e47a0ba2bcc5252c8c9be07dfa9945e0d7c57317c67b74a27df1faa3dea86fdf9a2209671d430cb086e90942d68b558dd09e1da72748e29ec8f3bbb73aad62658c78b45017a0f16e7c898d4348efa21d487003b1a70f765c430e19aaaa8553b494f7ccf1f00030c3ac841d011905c276388ba8ec0778639d81a8ed549d9b64bf8cb6f2be9047d3d8b7db99a4f0063003e3cb2de1c1901af7586f5dda9b4f583df42c09d628faf32dde15b99e32abc7e3462bb8b7b47b01f642a408c923f4f8642b0544597a4fc257d935dec545db16a93c5ff4965a9b22608ed6dac1bf0b81f70f4a5b61de645c796a1dda6c4d15b32ff0dd795e6087e75de9e74f93aea9e36b3417ee532580c4bc995c467a56d0ca8baa0c500a3738f2620c57f0582a827fa4ee1b4e56d2dd73cfdc19aed6c8df75d07e8440ff3a4cd6c4ee25c55755a86f878bcd7b3b893be29161745bc56239a286295630537a578007753337e95f5d8a988d9de16454b57b34c0601b8353c441be5a2d002e428eb40e8ea1638f47306a2b3872ec05621ebe90f6d39e726b52321ad587f60457517dab121e2180d6c2a0cee297f1bc156bd32eda54fc7a4fc919351bceef5d50caa1cf8428471850a6dea79e1922ebe70a507e20cec91c3585d3f0634a10c59c2330a8c45ae07ce6d233e90bdea6dc2e2a0a0a60f15a3c0bb2508718c2696efc80eaa3c96a5e039c0243bd593deb5a294dffe263f9aba18c7b4b99609650b1877232df3a967219e58abca756be563eea4a8574162181b119d040cd8985d4953c51548ff82cd20d6ac8d19f2ec27a7c2c0feb858e781d35e1e594e7d60631a0bca22fbd84f9dbfa8dce828c88d24a18ae0640d8492899c28c56043c595ec0cefd59206e4f91e7351268de431b08d1cfe5b913c76af784cebd77991c7d964ccd6889e815e56b20ee908ea2020dc1fcdcc7a58309cbc215749be9a3b2706486521a783a10f9afe4b2325eff027b02b42df658bf7fbb8b1d41778dae9990319689739467f5c5ed22d4ce87b74deb76d70b2fbadbf848b1a34928af0d7400116ce77e2458a30ff3bdb32897752b2472b9f256af956d40d79dea6ca38723bb937c4299989e994d7c8f014ed6e3f634cb17240e5a89161ea06d867c483398dee42174e0f1079591bac3dddc6d7cbbda64c729327a3843b19d6d1816de88034a5ec68b65cacfbb99a4da7b4178fdc27b1302fac1457c455aa2ce285b000843d186d5d574d664d8179a4d358f10a8b11f1b38b8d1d8710c38dabc9286c29024a995d8f517de7f58f704983df70ab0a22bcfc759d2bcdb2857ef793f01630a25da0bd388f9de5fe1f1bf2732117f3c3ae292c8701f3d0664a1fffabbb9365b3a7c4690a7159bea81806c9468d5331e7725522076ad22ba41cbfc3c9b7d24409101c74e7e4c293e74adbc0a8159da585d8ed3b4c7ef538ff768f27a5a020e0d633dd05c3efb2db40fb7101a8187dd3443e068f1480e4eeecf1015ab1cd417556e9f72c34b967e0c250a70fc886980f9029cf68b942236bf2976dda3cec52b659cc4305163f52c6f15c281736b33be1a23ef27a01343a4b7c7989f09d3dbc94b19e2467eda34dd8e967744c5bcdda7e555311a261248926b06739413e9d4b8332a9c8995b37c6bda9159dcd4418aa093b49fc7ba45d0e05b7b27a79e9202248499be67895f7489f40ee4d69d04e6752e38d2556ecfdf8481c850467c3fe9b38c13809203526a00f8719470589937b46f04df6b055a55f272d4d69bc8a1f397b8985eb27051b4802fc38f38fa9779fc3c0d0772ba8d08f1bf7c4990e4dcbefdb531137ea4196b57a96e6622ecec242152464724069ccb3cda5bc786406504f0ffbeb854ca6ab9cfe0d1be502dc8f68db4cb25b3f1d3cf834034b1bb3c2875c5168e601acc3467cc38830a1255b5ba24b0878f1b591392e078980c3b4124b2d96744ca8a5bea3cfcc3c2f6705d1a99b5691d8d43b7e3bdb32ddfd1e47aebba1e59c74b35d8d35aab9e086f26fe317a8029c7af957ded1b5997032742293ff065679396c8efaaf8de8da23daef26fdd3f4e1ce21e484776a06d2ef42e210b74b2ce63c9c16a814216e5e8f3bbb19f0d110ad74021c51c03f2f5943c4545e25a6d1b1788fc042db4186f472eddddc4f5000a3ddad4746eb38f776974c4f948412eb5590f13be6970c4fbc18d390916954446b9f8b9c561df1c1c767d2a028aa539f7e2d9dc162fbd63c0e6793cfc3f4f9f1ff971ee24b15b2696596eb568554a8639ccb85d68290fb5865cae7b0393f4759abf96b3222130be058e3b332d7c2f5b8e41710a73ae43d755e66ed6aaeae40ecfaff9310f9b18bcb964e5250e1a4cf789f31ff43922866cd60d521e8ed8d8f9edb2aefd2639f73893d0aaf053ee4f5de26d0feafb1fed204c8c202bb1289ff5cb621b9bc20fbc83d4b33747993996bc417495a6d7cba85b061b632defce24f8419fa2ee91063d9a1b25ca079c8e15f8cddae244ce9aeceac15e391449ba30df5f1c98f5228478b3429367e82bb7cb399160d1ba85ecdf14cf85a49641db383884c7552036eae33f8ee8575cb2b276e52961d4fc99e549ea2380eba1512db71042fe86d97409da178fbeffc22359a128d4c4ba80234bf5d65e74b06a5a5e0609d25b01a13cbb4bd4c4bf385ee4f5c7e4fd1373aff4f29c4f36fd29fc469e4e4f89fbacc1972b2021f28d1059e3d01dd6b7591356c0dd837dd2271390022e49cfce0361b17532eb0c35ffa5fe2cf6a9721c807d373c062a0c92c438d44ec68f580a041c4876b2a5bb09d38191eb2a4f8f0bc199c47253ceb1b24312d0727a5e04b3fff85ff01abc821f7b86342a145382608e4c996c7d47cfff5404e284f826dfb59c2ce06645eb6ff0f3e2f8f80962b602be4ce88da6342a7493b9106479f319a042859eacc27a3b6a988e3469887dd0c480f6f2c7f21017402ed1027d42f4c563ee022d9a2e9d6b884880ace562d78165d8c9fedbeaafdac08d864800903ca198a89664b4d9486690b5ac85a8acb17b82f91f616e3d45d0d1236f45f2f97715292adc8895b3e6aa82e7add0b3d1ed9960f851d69dbd5e71ee050b5a5f451861985f903fcd73d7b6df1ae88b010e86d7f017b66d4f156ad69bbf606292d1332ffaf2456435968f60ee85a877e735de69c81a16d82f257f30fd804c6b7caa7d7809a2e7c6984763de12eb6341b6922d4c67e9212c1d91c39da2848a5e49a87887f865876d8bf4ed4049ce38153fb205f52489bf253ff264812c9772d4af307cc59d54824334b813c6525202ab1882077e0e833525700b3f776ce21e2eff47ab5eb570c77d46308f4528fed2f3f84423f7d559030f3cc733db1ea89c72127b2c5fe43050c2b924656274780dc55ac4199f45393a5849153ab73608c3e53bd70d17fb708de3873cd90dfa55580436f25d1bec66063856a72199750a1fce7b11fb918293bfcbb5608fafc85212a99a6aac10b2f0900670bd98929cfad2c68b73c6e3fb0102f9257ec43faf8a226bec7f5f9a0b0b71ca7189bc9a2fe3efc9fcf843e251a3bc59c7ae590117871289b1990875c08d52d27d7545265db3d0125102917c82ae7fd86e3cbee1980fc22e7c0e8538c93cecdd782103683ddbde86d4df9d79f163c1b922609ef1d6485058c850406a76512907190bd74e7b3cab26327fe603ed493281059ac2da935009678c7e855288fdbaae9afbff0547d3ec9c7b1ca76b40ccbd5724f3d2c4a3bc135e0651bd41b5cc2a6a8ce2792fdb5bbe126dcc9bab206a6a09a339f19b8bb2c716dafd80119474ca6e58718d48a3936fdebfd56a0156debfc40aea216a02f8a7c5afe5091636121d3b0bf8dd508d838163e37ef9ac36b1b6e0c063eec30cd4d7fe862cdee4db3ebc57186353278c644f9a1135185accb7bd7f8a5a678435679c75eccd88a5e77b805eea1ab0e57866853d86baf7f527966720643b81b8bccda62200622c570744c74caa36f8a28f9f099ff3bf087eaf8d7ba9a4611a82b39b7f3b9a4a2459d2c99a96baaa364f2035da94e7796127cb6b736f0dcf853da4d0fa85686743175909ec88452ec6c70c4b6ff802379c4ca5921651a93baecb0dd1891ceec681c6cd7e5e83fb3c6580e811313bca4e0a02052266ce25fcb1f772223fe399865f3e7a03cd7a8646467625adf3d7d846f96c5d4ed99c630e6464ff3cba493205f9d357c72a11e90b37df26dbd58f3113fc16464f8127b5d43bae096346ae28c21df8e469410a5e01d04031dd8a8fe5a94cb38c24d68cc34cadac3b2ce3e2be4e9323fca835d35bf6c001b1ff4f3b666382feada3552a54152fa882572e5b1b1824df396934059091d9e33751eaf1e376141b3a78074674e1a5c38937388f85f685399789d5f04f3fc6ce630d3b4c8f6135a72277b02d4e00150bd9332fa306ba33df53a53994a9d46c6539db23647e7ece03f7c51f9c6f7e98e6e4a2d89cea77c71ff129098e198252085ff1fde2a055c3780bb189771ce7a22af81db7fac814ba811336a1f251a2162debcf9771a9a54e9384267b2b6e3e7a1943be3bf2d6a4fe15ca9f125ffd3a1da92e583105828ef641f5b808d2be4f5b4c86779750992c4b068b1cf8913ac913a523013a5708040401b694b542a5e8a885e529730795e139aed43a00599dc8c5369719af561062b440e1841e495e14c128e7ee6d023f17fa22aa509de97195496a17c47ef65326bbb09be3069869777e941d2927667c46885868774f3eff39aa8a7c0120396d0e9859e80e45f746ccf3e2ac8632b53ff744033a939e14adbd819e90ae6f4f2a3f7e15f13faba5658937a8396040f1b454f3a4859847bf7d01cb1c75917f241a32ccbb7ed79ee7865e10697920ca404a6c8fd75a7fa3f0444a0453c3559564af051989129a6d837028516b0659e5b1effbb31e9167d804f45dad300b618ad3c01dec71b2e3c0f550687871298b4a0a4c8ce08ddec3dc774f697cf54d396a8355faf26e800073dc58b365aab05aaa1821e90ee88a4f42c773555500e67113d7380ddce2e5245c6d6dc158f68ed3ef666323092a108b104a792cba46ce37676f1a75bfdc5f4b309e7c9847f8c1fdf0ac695090d7efef65198794e5e814d748da22a88330ea7c292ea752120b5a9fd45bdf3a864b23618598f118c43fa861b36eca3fa01ad373f5d2ab8f3fdadf1266038ca151abd007a5db7a804a3fccbd181a49751c2df8db27fdf3eeaa90778f9b2471e0997cc056d5be48946e316655e56185433594d42201cf46a8bc5dbe8cd04d1b8d41be218052ae9dc1b93a943fb3fc3b1f8adcc2bf4984ec74ac4b97ef6f378fd37937e5fbf3febb1b5512e3cdc60680b0308084632546ed8ceae05b49e810c6ff8a79ee72b7a5be067f5b09d64bb7002e21bceeaf396815c475c1ec4bb0063852cdb3271534af424fefdc59df467b0e37a1bf2518551af980e98d1896d07623f66ff1ebe55f6e68e610ce7127e1ad38694dc240269774305e7d8bd576a3fe6ec487ae748bd7563c414ad5485227735083f81b510bd0fe396cbca26c6bb363d315e2d1f9ccde97ce1ab689b709dbaf331d294fda1c2ab567ce698fe4a90464ae0aef44199925124b719508b666beebf31b61e47880bcb162c02bd9b62c93775392f9a32750e38b5cb59dd4180d3537cd9abe002b554967719dc5d814188f65a314932cc06728e40961c7a817c77719830d5d8d6d1e5bf639f00ce2af5d1583d7730df91f35d0265dae59532773b92d40948bbd5d1eb36a30a86fbf470d7d022a4553a9050c39439633397ab21a7299a6cec095f52d49bfabbbd4fb50d06035d2c1e91910f7d754b3696b127e2056cfba779faefe84786f1b8257f101f9745350eb7df786fb16498bd41fbe2826b36c8113c2f964f32a6dceae7fc8cb593d5c0513db866dc0839a009f4b05d00ccfa37bf3ef5295fe8ede117c8f48b8abe95e1fc48297104bdf290da807ca408109a6981cfd891944a4a5d108689ba7f608be0b4f2c24ea3762f01b1dd4db21a78e3b20dede6d206502a2d4cb3a1155d0679153445040a57b39af2a8130f79e1e82d863663c7b4fc2813a0108f332aaa8b4e491acbb3211c7324e3748ef57cff933117b817b8b5d948aa51c8c396a8b7c28bd8e6bceea23d2b3392246cdb4e243bdcc94dabb4e3efb701df0283fe078264baf08b2a8544bb780a8fd65e3c7a724c66ee8624f259f33e28eb845b1ed517891dc7edf727ef4bc87328bbbcafe09200f1f32be05b61e69996ddb7cd3c3c06808905f4ed5609fc06ba05493794f98ca81d9d86dd3d624c742e7ac9d53873effe1d710e9fe3c3ea3ceacd98bc87d42a838565690e62554817f94622dd00ba2055acfd8d2e501a94a97dc6a6d20b3a8e52adf08b3f6b840da45f24a38e04e47502b69e6bd48c334f857fcd7192d4e24302b8de306f49a1fb1ed31022403dba64be0289bea9ffd414b3e250b8a58d914c3b5d59a05d5237a60f615b8e2215059164eb33609144aece08f8025967b8ec5f798476fc6cebbe86cc15ba7fff19dbbef1e8a8cf86ed4b1d54a66d01479929913ea2632cc9ea329767ae659a735da70a52f1572d6553911804747e4ee3b7943f9f3adc1eaf57e83d2b34ead8ec76635d33468da86042faa70c13c49ad116312912b6047116fd48285b9e24446100fd000d9dd7606d7f92abe0d04c515db4d3280d2a8916b5877101bbccaa7e59c8a7766649bcc716131a211ab0a84149f7d43eb28a212a8a3bd934fcd1681e4d4476c23a17c3aeb336d31aa1b39234dfd7ecbf554bb1e7f8bcbc7797cc90b19d1d8f6af69ca01fc766d9e1d34811d38ac39bc4fb3ea45b95eb9c0d88feb8a9494b3be2c68c62f72bae33d5617211306f0748dd89aeb89df53b741057952aab9bf6ce23114967c23084b8a2127779b089778ba957af72f6d89eeaf3b948b70e1d75cbb6b89cfa1c72f7ab298b88b3bcbc1369dc8008124c96840c379bfdc7fde35166ae9131e5ae50380661c541ed84d7b21e09f89cec7212e5a812c164fd9ff40005cf5e405c5bac4f59a2c0ad7e12e53a497eccfd32f2c219ce7993b06eb3de5b1e26dd686364b0e0ed2d63056b21cde12d97baa1affb541fb30c881e6a7ff6db3e2560c8fd3fa7817a523381e1bc1d4842532ff93d56c1128832616bebe27fdf76b555872ce1d2051a9909ae9f2a1a7bd2182728fe40231900d1ca94587e167e4551748132c9161f59438d8311ece10d67c4cc94850ee3a2041277b7a476e89807fd9c6023c8fe1da3588efdc110e10b78a01032b428c02b5517a681f3197b4c32bffa767bf99bc5c7934acb90c1ddbd03c3648e47420f3448add32ffe5f713dca8e9951ee05cb304c821065f5e1b1ce1b43538c756ce200af084b8dc24486c651afa26e3a038ad7d06c44ac3af96cbbd28368150d7e1ddc6bfae33a077cb102ca031f02e387a646d3f04c4b1c881aa70e2fb853f603e27787a36f63033124ea10bbc309461a1ab85ca60c16f3a0abc2202ba4d7761bb41c219c9cf72cb32bc0737487a5a9490b3db86722b4a59d4e73c430196b14643eeeae3a8e4c1bdbdde18af6ef5643f3a9c7c6595f640a8bc6f12ea9ff4417a9d26737224b8771a1b1300bc96ae1e46dfe241cac07a8a8ad6390ae80ad8695fe5f3e0d66277cd656832294ac3089dc31469ec70014e040c57460b3a22f9db922a8505927bfdd56d377bf9c25e0bee251615e57a8230d67b3a0ba0ea94de9da82a4bda411a27f92b88d2fd7cc6b55e049b962b355b1390cb93be792d16b6842a494b63522cc8dab4f7a87772266d4bfe119b2d76a0eccb140e2a180bd0848cc56369ea75766621c8ffa8a43a63c0c7210fab4da237c47bfa35aaa5d154ee3e384b241f401421f7fde05993c42693d06d6b0c30d7c66742e29a29b3575ec0c1d0cdafc83b5756e935d83a5391f9beb237253d503fdd4c35e67fad9e85860b4d3c0adacaf5f3b6c2cdc7f99eaeb9559998a1c89162707bc1d6e8cc45bb1faf83043b45f02b3dc22e1312d8d7509dce0ddfe315e8073065a39ddca867d0518e29bd9ed0f422234bbc3b91ae0929101b6aa8ce8aa298664537bbdbd4c9388a9b3176ba91d6228857b21386a816a43b1ced06c7cd191a1e7a45dc583bdcbb3f81cedf765728f8d85be285a7384629fa1999d40d655ade663ff9394d37f0cc2ad8b962a989b3b76e6c21ec6f45ca64c67bf55f980e1a1b1f7b37b21a8c5777ac99c1dab5ad3262c00f047a4697ebb3744e11bf9c5023d780553a38507efcac2411057865dfe505ce865a2ad8245cb9befa5138853a5d7546641a8b75cf55964633af1c23b68c4361d41cedfd5b2a19ef8aa851672a63cbd485b842b1f50351f26f5a7d3e5ba130a2efa7c3a707a92316145f9e0c1acfba9c810894986f500ccb686c0d6b45b2cb308cf01da279abf0517410fd734ff8d6c98e75a95ce26cb07098319ceed343c273d4e69c4eda84a833c9d799cbf8b30747f0fe8b98c4e5f72cc173ca377ea0e8841d7f62587c0183ee170d5517af060d87bdbc8b61db4b414b291ddcc03c80c37f64ff8ef982f5adb884cb1de10222c1f057a8024865db46ecef30e4afa97faf1daec862aa23ea48c6f84a241893fda76d45ac9becb55c5db6ace32535c893a4e61e4bb96b3ef52f24b2060dd35e48905a8c7b9308d8cca766273bda88e7b7e967d8c3c9a66c36ae11a3f5504a37fbf96f137bd37ac7433aa0e0a065a00192483349b222c5e5a106f30f15d9bed6bfe2534d545f510f99120b7e13c3625516207e844c8f32ed0c0713c4521798cd478ce2209cbab907c8a77a7e299cbd5ca581fa9c24e3c9a49feba74fb6a5af8bbf908833b667e62576aebe1d066267a58b6cc11e870da508f8ed7745b54211b8942d755618dc42944398284632bd2f2e6a38d80466b7328032d6a3ff929f8f44cb99d59d7a587098aedbcd6d6d6beebdff5187a68a4833f5bb2dca739ea4a7fa93a8e9986949389bc2634a29808f562a64581ae5df181286d135127307819fff76c51e7bfb36aac466157215f0a2e8f8ba6189151a5c638ade671afc962cbfb12cb8c95aa43495baf4714c6275f7aefc4e4e3d278aab34f49f10c5498fddd2ecafa08c1cb787f9765652cc82c31bb8d06abda126365bc8d9e6e1567c5276882512511f15198540e063a4e7a033f46c691ab8986c05000c3bbac362d9bea30b375c80f25cf6ac5b2d691502b4b363d6e368cd230e7bdcf27ef5522b7662f96ae15bf49b9293f0f1ac47215f479089447f2981ba45e0e31dfbcd0174161fb9850c018bedbf92e0372c9077980a77651ba9dd8baf184d8ca90d0786726001e43d68c8ec4298bbe0ae520a61ca71c89791e6ec287f6b38badb0105c735278117bfbc6082b9d7df9beb1e375eebfdbcff9a0d6240789a7d88f409f5a5ba011e73ce4c8c3f9853c69b5f544386822f4a9a0e24a4860da8c8af1c4295907a58855c891531d92123b23dae8eb78f4973bfddbf68fc4e45bbd6fd7e9419fb9a3cf2e08d86572cb830af425f3e2b6261796225a67dd322647a75c3a33fe4c5bdec6df8fc7fa7a6143f9d0ee77de63018f8902ff067d63684ee18fd17cc92da6407edc64c712a1eed0bac83a4f242981ed591080f58828685901bb39995d50aaf48140e87489bf2e48624413deee70d7f390d088f1a16537b57c50b1c762e9c03bbfbc290670d8c31591cc3aaddb436929d527c26dab2a422849f60f975abc9e0fbdae26f50ed4171ecdee91da2946d8f470922eb79db9a7f76fb8d400a2a5d9e0246d8c23b46d8448572088a2164b2ffd60f5f7371cb5b2c1cf0bbe125892b61173a82a0463c5592220a5ae2ba5de575150de99c00058f96e62d019cff476497f861a2100fdaadf0cd97301f8d92041ae1ad5b00fd0fcef9403a5686f1128d3dc21dbad11a688b372acb49d632673d5969a032d6bb76e2b6c5ecfb3c4a80ad38a915ffa05ff6c0afe235f2b3fe1516b9bd9af9cc77d184d4afd13d44cd21a610d55ab077118836b61cd7d45b646275f0127fac026c07fb63c3165333d550a95f386f60b1b93ede7853d63a2fabbf3542e6e3b748d1473fb8999c52c56ce814c398f764006edd4be1b29105b059faa868a586a9ec3a785d8917a512598d362af1ba6b4d664c2afd6662684f7668354736e20b97868098f4003425bedec9ea92c2637b3d49bc84c9853c50ee7ea4da4b3c576c97cbdceba7b39b443911674d61e9041774cc899e6fbb8a82bd9ef8b314b3958c759756fd77c9786e75afc38789f9a336cafca1e502a74f9b2f5da1a41c50a10e3ff3fc651af2576695c3d909e9cee1a24e743c5b3d5b616896c346fd7a921ceb34623ae106bcaef4a1aa10a0e204b2925ff82441a36ad0b6184eef4b1f1d4860b44f263754a50b8b25f379e0a3bf24e607b000f6bdb931cc66a04bb4dd4003c31c885639654d2a6667ebb60d030f7df3ffd88d75bf6379c03b5d7e05adc170d757a34845b7ecc16d8ef8b66d27c2a3f92d1c9a2068f21ee160a8463a0588b289d03d9eeef05a8b49918aa69f0cf39ad4af2354325bd685f50ba6668ee3adf6bc9405cc5134c100c00496539efa2c6e25519a4b48eae944892f9492b6cf33c1e9647f5af0d73814cff0f80ef411a9595b5d57027abe2e0a7c88c9c5ae60711e2740586a0fd20dc3379c9154179494e5fd506fc69b4fc834f3454f7d2f62369abf0116214a809fe71837bcc63dfc0077a1595c32730af97aad9d259515e65a98426436318901ad4b6440ddb89eb8ec26e3c7946a9c095e227c2b1b55dda79445b87c9486af9c1cb6bc63cfdf3cd72e9a3e4ff729bd72954f7e8416ee93b3159aa81eb8c401a182116f0f44b30c376d2886fa622ca9e082d26eba93a547f047af842680d5d3cd2cc6d8b5706c2549b4c4734600361cdf05322125376809ef673d76543c9fa742ecbfaa954756208a7aa4e2fa0947af05de81dc367ae85810cecb70b19a22735d70fdeb95fc29fbf25ea213477adf6648d88c22756dfe12c00bb3dba712b89b925573a468154485c056f025fdf4d302cc9b87a4fb6885b659bbadadb6e43fc64237131a98904842c007fb026d087c862239559474e2f31a1d54bb1e3480514646048d3b3e51e747520bbff08a9cb1f88d1749777d4fb0c9ffcb0f9e607a7ff457e38cd271f24699c2dfba0cfa9ce39928537fdb69bcea9f19634b69a6f0114a76dd7cda269f0fd5e1fe3f42adda553210bb4302cbc7f82929293c171d25e2da53f5ed4aec22f9028937fcd20fbe0d4afbc1cd7e723b451f655e494d225c03bc64c1f7c4bfb24d75e5e56e4466608d7713edb25bae725bf27e34e329b182c3eb5e73382191bdf2c7e2c9f507e24b54c20e8fed3c90a6903194d51ce4b28b0ce46b95c775ffdbb7a8af33bf895e313de10e29ca17213bf3031a99bb6b3aa36c3380f006891c7363d36fada5383617e14951ef67d4c4c7b52906638139bf635b97ff0cd81a43ecfcf2ab7e433dcecf6b534c245b5bea6f3237ea7ce325d3f9fc6bc3a6a8f7cff1a280dd7a2b3bb2f7096d5fa677b516c1159fd0343907e9cb2d1adbe18bd98491a7520a76658a225e4e6714e2a86b062f41639b1d5368675a1fbfd2dbeefc67f7ddd76b8453e4e1fcad80e4f2ca4badac41e7e980a3610a4a7f7356b791c8c42ce75e52a4b3b111590f81476003fa511a573bc36233d787d59d9eddde65ca5199b3bcd176d7524a87e7d25238eb49b25862a653323210b1d9319ca70677dd626c0977b14ed83c08e8ece4142408263e654ae1bdc41efdccdbe93b7e6005dd743bc5d2593a0d3181ae016a69c79241630fe0b0572252bedc4a95924be4ccd44f187b789c70cd6dd877e066e350485b4599502f4acc5d29fde6acb1fbedc5c3ac8a194bc1cc59e149803f430df5cbbeffc0e30b4452dea1aa5c68488a68d368dd33ba039ccf9a4836f46cc61eba7a2e42af68185cd13d138cad759a503bc8a8b6da32060da9f1f49c23e86710dcc4b4650e264df9e5c1da40d826529d1778c620032af407aef88351184665d79d5dcff77ec6f99b60a5c12459b5d535bb8de48d0c8d5b40eddb18d50235609dceec80d328c164db8f5fc350ae130ba84d1b248b9f605c2615acb09e10ab18fd8044e81a1c5144cef44f4863df42d019f743ce3f501add15961d8ad7be1bceb5289d18170d3582a773a49675b5fbb28d9832c585891256ba48b92141393e7b7cf428cafb4de8c2808283553fe7defcfae485e60b3dbf2519e6e45aa87db0a8e2c232e3fbca294eea97571a0eb34e596be0431cb1be2cb479d7c6f8e3a07d185e427391aa4f83bca03b96d70210f2aacdf5d1002121cde92218d54b8b5f725e8b878a9e8b59d63ecc087ad7be63c55245dc73e8b20257b680add6f15fbd568fc21cb31f33ca11e18d8ecc30d73baa68b68aa6e134c21aa6ecac98a717adbcc0a31124e9978ff44769f14bdc7cebc7af0b76497904411ac29375fb752e175ec1baa470f1b0a8ee44d0253bd29c9116d5d41f3caa497795272cf8768ccc6e3ca13313883520297f0c7891c873eec0a5d904f1c49f2544f3f07d51f9e2ec0aaf868ca4fa0a48ffbc7da6b7be65a643c3b722e6797561febe4998035115900a747515cbeca1ca0ba2e0a4e052bde077a51e9c1351ee1ad942f01b5134fdb6ff72c9f1f95b69aa190762c2db3a8a13bd2b8f6e9e0431f383b8d67f2a21aafd8e7a6f03a22b7c8e5c10ec2ef818a62002edec1f31e0b6d9c0f879e7e2c446583ffb34142f7003bd75e9acbac737d64db2b34e8e11adfb888377c04009bffefcc104cd6d33c07de02c2c2ab36a61d6109541045068926fef5631d51b31cf2c76b0ec5e0ea0d03bb1cbe08cbbdfa2af977230c3d191a7ab958cb2b04d04a9d80901af792625c80666ccd3e108c8ca77645420ba36576cfe10fb68787477de1057937980a99ce5057561f0e61d3599ab22b5e0992b35f9312bae5ddeb00f45450b6c2248ecdc4cbf9fdd50f81e01a6dfa791ec347046b6c5e9dcb762238ad5a060e820a03da2d0e4f2bc16692886616f971bdb00e86781ccb72cd377e903048b98c2ff955197d6060ebbb80bc30b4c2463835c1a0cbb028306ea0390a4040ef87a21d2d3270a371580e2a693920a3f4acf6b5a78e9772579ffd76ce1e6d42f1165ac2a1d02ab67cdadb87ffd572b5caa0f3de95b9bd4404f8ead3bccf508860505aa2a062920b6276538bdf2e1a2f70b3e130e91681773445ab30968d963e98711cb643ab4ea69901d0891e2911af35df1bb33eca48fc278fc5c41f58ea6f9d24ae98f4b85dede03ab68a7200a672e423a0e14382af70632604b3fe88cae6881142f89ecb876b7f6f15af2bfb9b2fcab145df4a7827d6a13e7d95cb27b1ab1d91721da133436a02b8979b3fa1edfc50104b07f3a43231c1dc23bdca2f81b8d3a0fcdf479ce4af984a8965ca0de800f63dd82300d5dfaaf11c6f7dd03efbe2f28ec8c24456e6c35535fffa91de6100fa881e9efe93508beb21ff7d4480b646501e100887a19308498b1b949d84d8e8da644df0bc75e415a510ea041e186e5ace75bd2127dea4d86c7d5dbfe270d4e4394104d6d2f94ae5a9846aa936c2bb81d5cbd845b9d52a73ab715891f72eec8ab5d0762a2fcf2dec62a63403dcab1591201423cd18abca2327e290fd4977d2c78f7573f0fcd167acc358e3f526e1130269965b11f3c44e0769a335996fecd73d75b9e22aa13c46b0f4f916f2eb5132056e7334c78cdfe2e659089efdf7ab683514bf61be5f484e135c5b14b04099b2e315894abdd80fbff6cf2be0b49379d45de1bbab5bb7516f243692cf510b3c51805f258836a07ef9a9218387e42b20843921dc794581223860dd43d081bf98410ae4d4f73c2af8d816cc5cdca3c501ff00771f0716c583f356937b4919f574569255444b528c8e99d304b0f6dbc757d0e2065cd1159772aa61293a0fbc561190ae89bec7984f3b181fede3d5d05df565883e5a1d3959e0a512d7e7cd20780ba4eaeff4e79b4b91edd3ed87526685710419033769ef9aa63d27988a1f22c215912ae2b4cbc2c039976677cda083f5538f3e97ac0d0b11c3f3ccc14438e69809e79f771985bc40a36886d7a2e27d980aa11a9fa9d85031caec4a4abb85a55f41780aacf88c520bce035b41126d408457dd3cae07c415b9e42d24975e4ac9f52c0c1f85f4604c51de51af858eb612996677becef3dbca74569094c8f0bd6716b8008aa15a74a7cf03648e5fbb0e0abe583531a882ade50ee45b049171ca20ce3ed8f66580c4d74e76624a260cc810502c99eb40bb59edade5eeb71d377863c60b48876cbfa75ee51dc6f33031ad7a7da98e415f7e98ce1e79b457150bdc7dbcf6ac35f8599f8edc009031bcf3fed59c1782fe70e81c3d3e4499228f70c368af6f2209b84aa559134c815123a7684264858e6e5ddd70b39fd9fc6d5687b27f2f2d1ba5f79a1ede130cf1c6a8237dd4edaca7dc2f263ff5ea05fd864e6f78c18f0a686a5e0dc373e1830c2b4c77f8f6aed2b915c41ac507f45fefad23863cf7bbe0a439364f0069aa86e0e787afdd8dd65dc35617274d7c816f0fc3b54dc8f581204d7b79e0d556f68b0c9072822abc26ca5b057d9438b891c30b4b2349ada93933155d136cbef226c45020967b977da5ffcf08901ed03d6bf0a466363dbc6d304ca693fa36c6ed0d89836ebd879f155d923176532f128abd7269ed41f9322b59de160d4d18da934021be197fcbf4bd3adeb27d164d4c5dd88ac6a1a801fe3f6ec0d1377abd5b6e1728e186636a2d10ed677be6a73b1ebfa9351c89ae970b0ff50d11ccd74271319e7f336da23ef1296dd49bbc10f48be131ffab3bdfcb1a546fa43e7e823916d81e6dd4dd0bab611e5a4b600011b7f46b559d907650c85b1805b64347f8ba673b290a209ae5f58bddfc3f4d2e191b4cefad6f358bdfc338d01b58bdb13312815e75333251cf22b6e898dcfc9449c56efb3d5a0d8c4feb9077ba4432191c4c85b4d8a4ea733a0e34427845dd2dd8d35daed056a26ade941f49110e7903a3f065de378e9417ac264d132ae3d39131c52277d523b0268d7be167ce6cf9eac8a9895a6fd085e62bbfc8da581642b2d54b799b32fa0adac62afc8d73c0635f44e9a5e5bfefdf61e0a624f05b8dd5a30ec7be55a82ecc5a75fa403e247c505f107faa69303553c9eb7b0cd957b307546d7eca1f86ba05112e715c6e04e428bf67e345471ef7c31f123151d3b74f0ff1655bf1226dc53c50658a5b4e5113f7ae61fdc64d68a1dcc5425c7fd0cea4e94726df60037750b3c763fb4cd3fd72c8c4d0dc094879c0a3c3065d77b26bc57d203167823a601ae22cdb435dc6430da737ba1a37ad74d20a5acfcbab668c464ad047fa18e9a83617bf8bbff41bc5cc25987196565e9fcfa1ab65ea773988665d9971404b887d56421a3eba8e7506d1a189bc453aa480f24932880992a9fe5bc6be08440fabcb0be7d3f05e791e64112c71358c2b691bbd04c1ba47fc7ae84e11c3b587e9fa04a002ce23194572c6a0fe2e717835f695a75791794a0f5dbe416f6cf5ccc6fbd20d8fb1bfa3b6f27e28a40b4ded82af14022b70d6c81d0527e3f0466c1679fac81a9d0cb7ae55e2570bf4bdd499458e61ed93dc9522af81434c250c97dbb0f78c1b0873dbbdde0056934c70a395125147f31f135f633cbfb4be543a526b6bd93bf0280351215c1b2c2bb70d574b98819eb8455a135749c9951a246ec4be9b30e5e7b1ee1df0ba738c4fb8571303503bbb004d73a94d27e576d674149aa196fc0fe3b6b7d09b6fce9f6ffde41deeb14a3aa19cf8fca2da61dfb9d252511b016150dc1654b52fb0c4ae4b59043c5fea67543c5bf1faa26021ba999034eb2d42ffaab006f3c978398817eeeb6d03703ce75c504a6eaec49208dd2a7cf58eb65cd0023e87d7118abf6f24819dad7a65c30a066f81aec0a781ab908bc7829cf9229f9aa18023a4b417a6f7b106d5b07a91e0e5ae4410065da678bb82c506ded5e3d7bff293f1198efe541ccb35358513e4add598e59f2cf1d7172b71a7201688cf292aba9be6cd8ae076e83e37a305456e471687c308697d70df73f37e48e48e2014bdb9c3a6f338f631cce5eeb67e39337193277a2f49ab1ec1d829cf7d514c21d644fd5cd3fe7b973eea8267af277422d5a10a53988eaa35e75f6b4f682f7ac66e088a42d4ef235724932b926618bf2f69d8a54291f8c1c2d43ff1196ef9517c93066a8238b10787ea096312a7ecc5cec1a1e6a52ab791ace1657bd3e15b1f0d421c4127500d7e4683931b4b7108a3cc2c3d61ada8dffb6b861cea5f906937c2da387aac2be8daf1ce0b3ede4210dca6741b7b7c669384d5c7bf4d0ce885437cb6c0e839dcf08ec60ada09f321982814aa81bf6acf4efdcf9d637c1b56e6a73b1135638b08d1bfba84a4aaa08553d88b461bc92e1ec9a94efeba5dc37eb1e138b1c85be98cf3c8441e83c9a18aac4979c6809b7a7e76155da149aa95bf1a109a7d55de6a624b933a214b4267f6b0e4336be98f2178c104b57a295a397c9a07c02883c5b54a2569c9d4e062ebbd5e5089515b0897795984dd0e0b64021f251797566705bce646950c409b0f5c900b2c5560795ac33afebaa8efc3be32fa1461268f64abf2f51dae904c86cd6a955ad304b3c37066e8eb58238fb5f1a7804cc87d353f32f7d57d7d629c4f41fc2b5332c371edc982d127883f3cdc602e89b19d13a466936753d4c714fc4fa9e80d857fe4b7873a78aa89ff4f4b3189a9fa36ab972078249b05598aabe8334498172bec811a46421c0f6af418cd7efc0ce589c9673b0780df010e90ca552188ca7971b8ca14584acdb85d467971e988420f3e644bef419cfb9496f59d907bf28a8a5ca5f312bff242aa9dd71cdd4044710962adb0a355d8b7e6fa4306017a7b58398f9cfc33890c1f2f64591bcb0226abe0d7056dd8ae7b62b428e6c3b8b774dd564461dfec52a85e779919d1b63b2463fe20355b3e48d8089406753bd9a71e08c84f31cf1f5c2ef47522d4950d78f80408c0bd5630827290b1d029fd4a495c97788d67e98c8127862074b37ec1ddd17a61c380a497518460b61c625c5b9bd7231d29892781681bbb8df8d5b68751f7b31352aa9ce31883e0c17aec73b4f3d13e0ded0178d21e3fc64377db4656c400e0fd3356a5cec11daeb6f3c06d4c654cd3c605eaf4116a625ba73db8853a700481bbf27406b45140ce15b8b9bc0f895e27ac68408b7d71d1c7b6fb0395124389c1a0938fb21f730e3bd37702a635509bb7050d82cb41e3ca29acc9534ef9997b60fe1b3d94dc62f464fff820bbf57753c57994274df82396f21bbea7fa2d745c452a669cdf1b49dc1527b4f0ab109239d6656f793c7100e97a6cea5e8962b4032eaf061b982994d292476b4fa168c8e66f3dbd296bb5952bdbfdaacda9a1f9367430b70b532eeb2b2f233af5150fe9e7d83c48939de7a1ae88ac7e806351d292c7529be47ca69dd3093511d7d82a710be2c41b545a1411b75044566e59e530a3109174dab08d24d74b71d55b9ec923a1e2b7291822f5b0c01a320f5b8753d0f97001d299e904707d91e3d6da93f1115191e45668fed2d71b63a1c90655a00d8b20bec9de4df4a80cba7ea0daefc162c3a17d98b8815984564588453a0677a0dde6dca58cac869603d8b6012e7d32589f973ab0d89fbc9dc23002f882744212215058aaf1f00f6129c03cf1721be5929fc31b6d81e24097faa16042841e4587fafb1178880e1f8ae324e353f61067e3fc463c355ee33848efd0df8fec2eea1c718aaf8d87d1aa450b00e6f538bb213d6e3b730d151103df8cb36ffb8c4474d7b5eec676d27fc7749ad146ccff6992351476ba76b467b3367884cc4d387c11aa5a05a7f7a3ba902da86b930e61d57d27c6b1050b8a6e338b97c3a69eb40188d6dafc3361ea59ff8a9efa4e7edc70588cbc470b7c3cb7d41d314e075b827d4da817fbda9946eb81f37df849d0cac24df2d5f675d36758001e354021949f7466e5a5ccd24ac177c8cc62ec70caf68625d27adb5f19bdc0f0849c5361b276a7e289f845432056ae3f264c3ac8863f18e3fa2976c99e614da19cee41d2613cf10acad7368a9a0047cab71c783c41882782a87bb51abe4f747741abe8d856855b38c3ead61c76372812ac77217d5cf9447682262066651d5df87d09d62da6b9cb30e0c017ab6b105beb05be2c5bc5f9e79fc2fd68e6235bb7eca7f9c7bdc772cf36bd2b9e5b77abb22195bd17b6d52c15949315ba5c9ec20ec9d43645f03d1d830bedbcc48b9b13e1443cbb936a422b9f7bb41b997f607f6a3fefdccd6347eab24d4c1d128c2cb39a9220ab0a5ae537d87f0807004e132de607a22b8230af4c64503d8c10bbde67f4dc6a8e56b13a3634a37b2b8f4f106915c8c4bcf8fc56be13635a4638f0b40490925d261cd07e0d1e12de2ccdec24771a5d3779422da693a84e2a049be2fcc2539bc9c38d78cb946fa9cb7c9e195ccc76260bac4d54f9cc79dfc250394b7c77b9b33aa90823d4c8118f258a6fcf6b7468ac42f49e5b85f1b39ff7fdce7fb461682a9fe8e3542cad2015b93c4f4496f2b19089e4c120b29a645389a34ece8bb47c754f0312259758a7efaa7d1371c9edceab404b0020fbafdfe4616392220b8e22a662dd79dc0c306c9430ce3d7efed6fc27164e9c961da42df4051a3b30c8ff36017af2f4363167c88893306f77972be62967bcbbf9193c3e156f59a3c565b4c662da5d7819f9f441bd879ff3f8b4b48cc82dc5334e014eacbcb590844175e67219321020addae19c420cbc66ce3c01a2acb16c73df14f252159e3922bad00c40137eb83cf026e89e85b7f24e3bf369eaf266d91f34c640274049328579f1c075b8c7caa5dd36917268056984e97c8a2ad64b4e960aae4248e9f47e83835978df7aacbd9387cd36e6f40c9cc4b24a280e04fa982d1c2f79da64375d1f6c40207f81eff8bc1a419fb02fc9985b381fd3e5c6806f9adbbd97a956f24c564ad3a13f06d924443e245dadc33a5d88fac13f7a418409c70b9789853aed8626525d101b5a25fbe3983e0c6a8badff72debc9e017873a38d9fcd89777a7c6078f022c4a4c478f7fca14f1b1a7af855de163837f864f78f54cca79187275fe8add1d77b82cd75e50efacf12aacff562ca9d1141e2ec3085a85c70f3e9093146e095b4e88b5a015dff36817bb55b530dac94f84f094881efdfcb7796d62256065fbecb755ec7775fce783a4fd5e6f9d38b5a9a31d64d832b1db17dad90bb723c6638c7fb6a741088a5ef3a433b0238f3fe6f9e72e700deb5fe471e480f318ca6f9b80d9a3ecb96f9d53288ef32b21717baa5d9382341ecdaf66f7481884586f0b4df470ee7d4b3da9f496915f94ed4837f65dd349f2545d6482789aca2f9f7a4904ca49a8e06b2cf747009d1a5fd1c24f2d5bd65a76ac7d9aae4437ed5bfbb56a4f4463b736ef66704852dc2fef77c423033db2e4f7c6e5d42e6df73cd776365ffefeccb1b72662a8cc2a2191072731e0653a0ab15a54f3ed737b60c4ecb37e3d9320c428776ddc459cac2826dde3306203cdc0d583f795855b46ad31f0960ebc0a4b1e649906eb641badb9bf50faa39304af208bd769af2aed62091c44deaead4a6ad50223c197a3605a1b596a7f7aa8b0c529a4a2e388e0f61af1495494c1dd98a0091f5b4462ae1a0e258281437bfbcac68d099e95419a6c47a006e1c711f5c62e55be3fe3c7ccb98842ab14358e7cd36c262cc9c4e38a972c84561c1f19a0307836b9f668cae9809ab5cdc6039f329949b1a6a00aa353f6a04d023582132c57c7a2d1530b209e693bbdcd14c661f03a6810b8f5bc78aa8090e78364771a9a3f74336f5fc727028f7278a002442603011987f5079d472283346c00c6c4dca00b2c19ebff5bd8f0109277be58a4bd45d828f16b0854124a74af77a3af3bc4d5998f4715054949a1f426dc1ce1362b8849f26cb226cb144dbbab2a2181e2473850601dca485126fca32ec21184e5a87b7dd5ee982b58d1810a0a14e90eb143b35a4271f3ed51a924c4e06ef272a20b5b4e82468d0aa2fc2af17874a2a33640bc4b0ac88e59d77c7ca30bad707a8d8167cbde3b5aaa97fca7864be75193e272051a716f71e5bfcde807a5b8b9e2e0558f7efae2a2ebf971719a26c1e146baaf325c3339e64848036da7c462558476822e248e8df94232950870a1cf41fb9ee0f5c027584d808720248bf7f062d8fbc0ece128b30b198e41194c544d20b72fd5935970056df0494e53d44ecf18c080f9b49c79a31087155d1fe39860c6ad72517ac5861436ee96b13ab2380198f04c8bf7e20d23dff2f2a6110adfed16842699b5e20c9ab38b7181fbb4bd271320c4026192a70492c1b38aed8f35dbe3f195892bd32968af0e08cb791a00f73d79533102c1b7e6656bd9982231789f7c5c1ef5ed469501a6e400b7bbd11d48b22eb33cc58f0142b2f1a0e3903ccc37201cfb9861168b1621ee6d0c53e9e7ae630296d6b2a513b9c1f6b8be1d462d9c12647913555fc27a74c10dea7cbf80bd7b66d587a2724ba1a2f927c061b9eeff29aa75611f9c040a57123b63e0274920de525b22a3daf9d1f62e93d43065e5e28bc81055500018cc230474686abde4bffa1f95c0e356700040d10c131a874e4b366cfa52629709c9275e0c885f2ee1a642414c3b4562eb0cab679cae42083fb4408f06a2ce4ba03244caec23d1fe118f242c2d5a2c6fe425b25b2e1bdec5c61a6ddf69c65aa0737408174f72e39bba2c4cb59dc49355aa1ccff34df3028a23e2473a1ff39c82be999308d98d602761fcac7c2fa560a304a1ec5f25ee03a2cf044d5ac3cfe19e5c7a7c60edf85d4b47deb3d765c584233384b4dac6453a556c28177f002063c923876dcf403379244d195b07315479b204b1605151a47547d3726131bbd78d4220fbb758d29e4dc9963e0ac52a634534bd90d0ca92143c9daf5134d67449b1418b5fcc9ac77c9213c58776b0a3c184d74f28e7066e2321833349dde25c4e0152023dd219962a5b3afa9aed44ace0a62dee5bcb7f5eccec81a40ab0a16688e8fba82c4a4262e7e7a932d710fa811f44b7ce420fce32001f86b487061133b2a07e5ca5a82f1e76c0d406f70eb235d73439a248f21fc95bc79c8eec531959d445f604518b6827d89f4bf552c3a8c5d515e004511bedb1c463c0df111b66abefa56c18c9cda470bb7a780dc82f83331ed7d8dd3e3b9a2c079cb3e1cd1e26d66daebce0aa0df3258a94300c9f23d09c0482b1ec0cb76297795ac7aef5044e39b19b5487fc5ae65270679d23901ea5ef08fa79b4b97a8c552b70c32ffe012c5c84c620d7fb306db27d8a0c4ca611e68fd4662bdf16c23a5d393aae86b5f6ec5d6de0b1182787bab9a528c54ce6767b1c030fc2a02b58d52aacb82f0b3db589a2e3924e031f357b887694771510045232d2174c03bb64aa87ab5189e5848995cf378f12de0abca76e11a210a36ca0815d331fd8e53f676623bc0316e554004abd127381a7b3c5b430994b7a6036925573816e6d20b7f12b2ceb9d26c871f47b9ab26783b24d8c591fd565ac87803b91ab8b4c24229ed3a223d4a172b7efe7e7b6a993c7457e58bde352a1a0394a708fa1f617f4472bbfb0081d0386b5dff2fe19b5d0986b4403673e08dc2a3f160b2103ef790943fb2aa863a2e8aa9dc55eb982ef79a85e21844eb0055c6f31a5a84f58e594ab6adc30e5ea3d6ac34cab2ef562bbd403b9cc5816120dc4699f110198f0c1efc875e9dafb9d5820d95c7b423d21d156666884d9181b8706a3b5006578a8fc353c806241424879b8e3e655d0adbc059def4448553607d1c0d80dc32cb82cd49dc722f4083d4f59fc154b95543a3735f74c73b4647539ccebf5886b9c4a0ea021048eff2a209c567365cca7865925f3b1e6a1551bf0a1a26780b43e5753865639b3a71a2abf0f67238d8f6fff18e2c71adcc14a2dcd578f3ff433cd364794fd092f5531d757bccac7a6f1537a81238a9565c220842b55018afb8eba3b8acbe0412f852de810c22190e925d774b02bbbf55458eb0a7ca26c02e68df192d96d01e1a46c3d88bb709faa4696e64e5b849ce451323c6dd74874d77005cafed9858dc5bb8fd6c2c94203fc7e9f43e91639233e02be3120927528a9e767665665700d9d450be9ee7a257e1b980dda2711b9c0a5b05c052c1e4f2c9f32cbfa0533d1ffb32266d26d5608a6818da48496b2684ef22b53e31b1618afe725bd4b29e7b4e7f5317c585daafbad50d28a039209760e1a977c2716b4199d5f37f84c9e2887c54d21f1f0c76ee26904f93a001d23511ef79efe4ac839e1377c1a5f79ed04266d14d8da310b722c8230a5c3c79949a197e1ca49c6012d6401c6bf0a680d092cf789a52fc376b7aacf73f86864f91d3b08fad4e49397e93689c1868170b6e3573835f37f4ab2315d4908c44bfb1f329df8b312449032f565ec51f6143cd9bf501113a286acbcd29402e30641adb6ce28d238e6a4b25deec3c1909207a44f432bc4c41c2055d041962774a666a3199a9b5be4cfe777a908c1b16c2878d402b29fb6ebc3fe209105f30b19f7725487217ca95598780a05624554308e2d170a9f04f8953a165de1ad59dcf5c5ffde1a70a6279a05eb9e4d07744aafd56fbb541f1bcba1e27a4fe6145424f4faa94554188041e9c44177e84ce9fd61ea07df3b1d7afba38c97483e82e0a27d07526c4938d114783dccc4f42b661f7cf9a8d3740f8356782650f35188ac4b702586e1da876fbe0391da3b37ff2b8ec6fb620fc25f83ec35e68e98831906a97bfd59c0abc945989d93a8ecde024de91f819b003d29197e109c65cec7e53d52e8128f088a4a11297e760f7befba445efc47dff84108b218bc3c702d5d76bb8efb2a215142016dafd7e4525bc26eafce2bcf5567711079f5785cd24e33d1083b8fa8468fd74df4065bef26955cee462424d34690922d1bbf9c013f0bf21020cb29f25518eb4b039bf9c5d5c03ea8efaa6f9c8089f5d6cdefcfcac4555e270eae7812430b1ea71849908128ba8b5736d709ae3f52fb038534b8ed74bd2eb43a4d54c5538cf3d1bb7ced654453cd3856410cf7d702ab348f584a141f410f9c11db9eb25531f01358e8b8063f9d5995649c7f4967733165059631cd071db414ff4fffe353d1728e4cdee5396ea95341ab0b6d7865f68d4b651634fe844cd1b47fdc3e68fd610f925f2ed4e37284d32fa18df539c11fe14efe60d284685d88b11309cf67b52d9577dd17e0f7c7e97e4d341f4bd8e6ed016ed8a4133b0eb05cb237e4297a0e3178d2f282e1b601d1a7514a13433fbd3070d402c29700f7204ce029564d8a35ff263a1a781fe127407ab996a0c84bc96a4ebf1eb6d0c20915a6cb29736b4d8cae63884fd1dc953e482ece968bef29c916afa1938a33cb2996d1577840bfcf54e9a839a7cc0725975716a9af79ff262f66ae4c5738636139d0e24e354b592a598d946c87f1027b86dc0e5755e24e8a7502ced5d63b772f99d3896e39a05ee298ff37450f1046342d8e39557ac64d61410a6680e8fe8be14db050680314a36ff13c6502925a1235dbc149365c613e19344dea5b1043ee1a74666752e5f15fdeaeaaac82c78c8eff11c5f32a8d506488181e1489776a0eeed14ff28bdc5e8a8268fb468788fd37013e38efcf90ec479866d2f4362e2ce84affc96abde92cd53fe54a9dedc0387105204ce2eae02a7a0842a44c8af2b0b4e2ac1f7c712aea23c7a0115f52840cb8163327bbd591f906cfea0639e6e426f1dd2579ba2f6197ad84ecca5e9f03a9c284dc0b32c062ba3e3bbaf2db9008b1de3b6b6b6d7aef9b921c9ef4b958e501b50c82f62b5cd1426f4c681b6e30a04a531ccc0ebd7b8b4f7e769e7298c3e2ad15728ec363dcd23136b0c25d9608469a6ca7ee73f25f90d2e702a1c80ec07143f7dc3e5abe6dcb8c365cfe6f701216678f86363849cb962d24e799c8d8c636e22b04e6accdaf6dcf39b0c5820559522a74c7a3926c5a8051c3b3027f109ffb9ba99c385f683e4a2c085ed5c2c5a724c78d8546d7570176b41abf36725171892956530686b9cff6f6da7a630db1727831a8fec1b8d716c0c1a5a114fbf0d140459647c5fb92374316b3ff890bc41c0080727ce858425de6330d14edd9e159944844359b3f337ab483ff0ac8a17868e0bd0e3ce8ccf6de4e78eadb1a37a5249212c8f2e3ec48dd3ed1ccbc093d7ebc2ca2b2e7cb3a77745d7f12720578f50d3017bedffae499b9d3039617b8bb2b2ed9a75f7109c11376a50b1b5e1e033cf3839cae2e279cbf6b3e361cd740cb79c46c7bcda2654e47dd362039fba375d28f31a5059cc671218be13c52aeb9a1f80d089293689a96a030b55d689e89b587d475a7fd8ff45a1f08ec9cf9fa66111bd1842ea4010bd4a2a5aff0e30432ae0674bfb8090105e42add38e83f4ed000eab1e7b756dbeed8f96dc102c0dd77f0d9affe3faf6512f278f21255ee0273c211eeb90cf786c4cf53e21831501ed51865f71a92f81c72bcc98eb9ef0a92a45875637f273205e39c60c9ac158d63ab099cfcf6e000794baa1cd9f3bd9f4af8f20bf1255216b36aed8b10bc5a538dc5cab2c07f8a9a73dc7616ae480eed0d25ab52249a365c8a94f85c32922d4c8befd16e082074f67ec84af58545901cbc23645c5aa73d863641a7fc5451fe2c8ca0b7c1d1286950e23bbd3ff1d87930a958c4cf8760bae2c1719f276c7f4b15708d2e883141e66f3aa7239b1d3dbbed6515b308f2c17ae662ac94907218c4972eb2498952ba7ab39f13daa66a2423fce9406851149850b2afd01971a06ec824a0728470ace58f12bb3fa5b70d53cd807b058b3a65364a59d678b3a53215551da5b709983eac9fafc38c7ad8eb25a2713d579d765383d0d85012da4a08b7a809d5fa443acd207f4bfb690ccb855c3c2d456e18f913481246f84b97a1d0d0501251459ff2309ffbcdb370c3fc0af99958844cba366233c241c0640516d41b9ee0d89d51a37e1d881bc63edd7274e6fc348e0850718ed0746caa9f19d01107917c59f1cf64dcf1fc5c67074f1c29f8680dfaafa1bef29fd9193f51b34e965c5f76e36cf15aaa5d81a3eb02241fdca37aa8b8f71f51784a16b0b62d844aed11d73bb54e8600a8543d56d0c221409b94a537d18b84184010640208ece15dc2e5ca1922a5f91f31e01817b0831c79d4149b14dcd7858f094337a519b9cfb5e17622124c636d5438e9d3436fddb6c62a4866aadcfc027f8c36abcfeb2649f8d81ea572addca6d7961ce414223be6bd7872c90658a09885e96a46e478f3685a86aca63ed63c279a97d7321f198d4a3f8212221f934b873cc6d46c2bb5df96a67dccdc5be5634f15ae6ff7773591f52d7ac640b37d9df2f0c66baad2b06972eac8a1bc1722978fe9f19b394c58c77ec29199ce87dab7dbdbeabd1bc29590d2cc5c6113858be0adf6d14a238f33ad37f06ae91813cac5c13f11638ab274f01a13bacafc19e01bc8987e6347c72ccb513e3a883a94f6b386b7bcc2fe654890d2c6f615273bc0ce6196bf58534f2056e77f54b2f09535379ccb9f73ec096a05a8744b10349bd9f7a1eaa1195d65b498d4537f77acf5cc200548c30537f06534c034c708d6273a32a5e006c60c2629d66b83eeba7c8eb58ed8635f9762847906c6eb62c5b8a8787d721f09642f281de34cc21841cede956e2008afc650520d9881f2f2464600fd2eb8ba2ab81f8d84d57c137d97b746bbdbfbca5fc556565a37f88d2601a226dcb1602a3126ebe1ad14e821c2a2e67920dd7e2defba51eeb3e906188b95beeb99139e38bee29acef659942cd56f5e43bdda8ae44c622a114dfb719e45fe3c1f3386156c15459d722777308c4540a41b61897d081d51a47f7481f0193d55dcc0ca7981b7e20d3ee8512389a6974c97bbc9800ace717d57945aaa4c6e506a490c98be2070064310ff554de1f1c9adec12f4a6a6ba8e0590fdfc133d12a7f970d13dcd7e86bb5967944a5e53e2c98de4fde2c598d643b5f2798976b28f23ee91bbe1b30d3c38cdeed4f6e27b69e50457c12bbb25dbcb2c4b38084dfd415d02a1264c6571befa6a4049aff6facddfc1b244e4aecd2dfd0edae4188dafa0c72d7ac30fd26e319c07e976a9eb6d6bdadf63794405694165011eada2b955e78526d624b01c8e5aa7bb1ef122a288d0270ade912adb89385ee9dd6851438f7ade3033747331794c31612eb812642157f8313dae0f4d88bb530463d01a763af10cbd47230bd0fa3b615f54aa42dbeb9618055b6fabcbe3718381d436e6e87f3fec7f159460c533ef61192c5def918142c72d4f3b3526e060b78cc6b5d2c296c809ce4d68de7e4402cbbff71e307f426277f3e7d654cbd65a42824344559eb3620b860fe82fa838ad5d98cf8bd457d80939527c41075f68e764e78dba497e80e8f8b9b4ee21e3eaa51def4dab23103bed6e69a7481d8817009555e63923f5d52ad3b7c1f5a98acf2a3cb190e85a577e005152435c115e03dc8f5eb03a975bca3c38d937535c99de97dde669e01012f9e8791f89cd5b50029250efdcc44dfbc334298a302e69d9b24f79f438446c72b1c63c1f6b54440fb72595dfabd0d8da03f88a9164a85ff2cab8c9059c0cda63360279ed69b0362f0ec34a076c075a8cfa6fb36ef5c0fab5517ce6b207ad6417524443341f5b8adecab2070114af01304fb2a1e2961b8c86bcb539d6384967a3bb38f2a614b2078c2a673bc345f556a4aad5339f924e29fe6c8d02f63f37a1a88407e9f6131f6226ea32284c41f26b66db10223b2a247c58515f58c8468b446988f527b4ad668a41391b9fbbcc990f9553b84e0af2eb0f263b2cdecf2b7a74462b82ebdfd06095e6084ff7f344e0172ea512b5a20950f9e00b1d9b153a8f4dce35933865864fb2c342a7db1db8f71c1883377718d8dbc32ba8c38afb228dbcf4cace2c5992b4d5620e9ed20ee36ccd1b62a6313300b828ecf03e6db144a1a79b927d3301db9863d32f51f7c73ce4da032ac9860ed477ad842cfec55f55b74996ef02d3eaf0e7b0122ff648362a7342ef6bc7da04eca4249ac2840e974f790a7f8ab1ec57e43853c49e92fb492ef24c45eb10a7543a28bb0e62e7a843cfea73153328e9f1070173cd09a37b171c5f4e0ff421e95f5de73466ba6b821542fb36be869d971a6754eafd475b569c2012446b081f438216428ce0ff335001ef6d7416cf47fadb599598628f48eab6e5d946609ac41bc0b051f07ab613087623a0931d9fe29e50212359dd4aa5cbca4ad835cc37530bbfc1014b91e8d00093af933ef15c2c20076463cb79f7fd264acc6c94bceaeb2ab6dcb5bf2112162c3bf82ce9b7492ab7c7ae61db12a2d13c21b502d36ba670f86d9dddc5e2fdd38b50ebe2f80b599ad3c36d86bf1fda7e0122b5027702f63a46582fc60c36c530fe4ec4ca814aab1af079761bc0e8306c15c6eaede8db37882b9a9b00f51ae9c87635ec000b808ba307103787f06403647e7249728bf367eaf55191dd7f9a65c0e347cfa501168f64ed3da31caefa578c61034477a7b55854c331a16fcb48f6a6869367027f78e243be44680a95fe507dcbb11a8e2a47460492a895b74d221532f09b8a35f901e5c58ce3c3ef1b83bafa5ffccf92b57e0c69868df29762067525451187a1a1689ab1b3758999646277fe4f555cda4554d13b48707aa8e2547625c56e63328dc8289c431069963024fe9e185ba0fceec47f9d4ff1670c9d31b9fc491b2f08178be90c803eb36d6da6c817a808696e6e92d7f354f104e5016a78a4fca223d31286020bfdfb2a66e2e8867f7afa7c8b67291ae89f4f2efc424d6e57711edb62a6595a3c381e2ee8f784b4909c36afa862ae934456980c26a9f7405186ae0b354d71642ffe615298c0cddd945391bfce92aaa663fb9d87b0c272514efc6da64c32cfe63142d3105213fe81b7d779a518906d7d9cb7500f0f0cd659f515ed4e8db0ba52208ee029cadc051f5f428edaab56fb95caa552588eaeced9127c7e54b0a169c80c5778339adf73fba45453a053bee070c91bd0a20ff57f9088f5d2a37fb95791ab3db70dc01b40265baa6aca6ff2457142b61112cc563b85f5ca458ce5a63e4bfeec27ef4df282acc8fb8f1d1ea3fb918e6d504145f64b1ecc9275d2383fa6025977fb5327dbf1fc1e6d950603a68545683c1875a87d491776d599cacbaa0da1ecd44d45937c55396c01deedf19e6f6a5b104274ef37c4e27ed672376f8f967482b1e5dedb707b6d3e57da1595f60305f3d9f5ef5e344775215c46e2335ee039650fa92db44bba05360c42bff63eaff3a3a9b4f939a2ee2f07cc53f5e9d9aed2360ad20c6bd12c48858c4229d09aadc2c8ddde7adfff36a0004a9199005e8f8c937c704126aecba0c86f3a7a4d7c629b6600dda0943ea33d36d98bf57ac0980e3d9cb578d4dc36f9a2476f50c19960230ea40713ef779ada9bfe33c1f26018e9a7e1b6c91e8d0faf93df5fe0bb8ba4f49a904239c864085476c2eca3543e5cce834548eda5f598ccb3f1d6f3da36a2132202eb8c73d72369f0c439b2f201b44cc9069670348981e351a2a4e962c145d98b9f8a317a21083f57f5be46b73ad5a17cbe3fc7d728c16c4914bd3eec5f108b944b9ee67df2e4787e5f1fb0224e933a2167549a8184210df9d65e7ef5569600b5934b238981795308f875e4621ff026ed20a89fc90efc8192a2efcc89be9bc6e1980999cce8794ac94160ebed2c13f657124500780ca3006f85edf01c4ccd1c3b36038929128538534e3383694bb478fd22f79b46552fd20d44a8c9dbacfef8a4b9d156f8522a6ed56d79e4b0aeaa332f854c9c038c47cbc56189b9af13f9495cb6f70e758ae4ed41e49d55329c40e28d5bc6a4d19cfebd04c9534bf0a72e891880466c4bf97b4cd74881f0e5533bddb6effecf3a392176fedfa9d6eee4ec2e9936f79665f331e9971b5fdd142a0e669bc0422db61446a239a4fb0474e76ce7092ac5b9533399a83d9d5722b23709b04da57949cc64b6555c7bb352523376843904b1a83cea4eaf4cbb071629d61c176264140d4c0091a145a3581d778085f87cc0bd930a3267260ca41c7b9e847ceab76b70a821f86029b539381ee5e44eb23ac383345b901e7c8580dd69feba1559be010cb4e9fd096b1cc56b2e4a0c3858b37187577a0c9d6e8d82a1b5bcc1d27e1e2cb28696a439ec10cba3cb8d24c18fa6adf7dbe00bf70e41949e7f242394cbb7b3fd8f80795d92e6c0a5b4e0ae74f0cef5561a33a39e6ed29f025157190471307a3fe6a7f9f6df891a43aa07c35e7e8110eb31c8a887af8c0a89c8677208e9bf58a05d3c07d2aa1349463a7ca05be6c8c3a6ddc8e1d60b3f8e0ef1fefad5168c79b7b9ff8ba15cb3b14f319da3a8a65483242de9cfe2deeec3c414e5aa35ebc124d69367c912cd9fdce19c3f1f18314bfebef021b05a51cbe1ceeb2aafec2ef012434d74752abb4852db16914e6aad7bf7b7771ec77abf8c20739b77052c9a1699b7b60d7f69f6b63696d0307cf9173db5267bf6314b5c76b25d995472c69fc1fc2d6498cbc65d712211e0f02706ff34af9a44cdb445cd708e5c532f38c5f020410cb610d94a18eec616da3aac0e3284b19714765694e582d5457c6cfbfd0207ea42f4e046510e053fec7be358d5791ed9cf3f78f917e2cfd519c49579706f7bfc4dbb17865122daacc3c778d8707dc5bf3f45860ebd7c53529d57480f7951067e31bf12cbd2abcc71fafa4cf7d4f32b8ebb8664dfc026984273c5b9dd72f134a7ed4e8d57b43bae166dc32f059c74d353626df88635bf3dc4028ae296f5f4d0748e6c57df133ea1c4e944373efab3c6c24b1b38effc18ea97f309ee9fe6ffd774181dc4a49a1c040aa395e57f3c1087d745c42b9dbfe6c34a8f6dfe0cf98ce8a03330675d2eb821fa6fc1c9be18c661545a9dc065c4e26dbae24ebcf25cb6285dbf8032b0ccc4e15b1fb2d399818a422b885089d2cb7a364e3f181a3fa7ff064728fd9e689cccce17541a3d800fe55ad4c710ee136e28d6566fa56a933ef137ad88db5793ab65e9419e821c41cae3c7894e2055b72bb97a58bfc323f73de8fc4d363cef61c8f07309f2b6fd625952250a4667eafae6267574a6e3188cf408f0e85ae312ac1fa225513732cb114427d31b61a8d5e0a8762c8d3079880f0785b72a8b3e8903c837e7f6519f71895d1d6d3d4ad656daaacafcd1629347a8c685867d7d6efed395eea2b9fa69a9ef50d7ef92f7ac3f66c56282e37fb55915b1f4fe8a88a6b3a8916dbd4778397a798344cc435f8aebb8130db654aaeb6038f8ec94aeb8553753b005841f5f88eccb4a107685852b5dbe3ef7abbef877c3e86c7e12902daadf66fd504225f97943c1d2d6ff72d80d4a0f4b2d332b23c61bf37c88b754e37cd8cdfa0d11eb170b9e7d3d33f40b35c24743317f038f78c54c7bf8de524eb955b52016025d8e13bd3780e8e00133d6e62ce62e9be9bc46554e1684042c6d7c1ab9c28d85e250e5b38b26dff16d9fcabcdafe06eac95343c549dc56b0dfb17305e89141f25adc9b19d7a192e67fee7a972a38d4ea89ce4e99d9aff9e02d9cf1e5eb3bc4fe07ad10706b707f962a6c772ddbcedd72b58f2698d54e7b585988d490b0ffba77475840c798faf6460b3f419b528ed9da0c4e03edbf30e8fe3eac0c8b7881c2abce86871f82db100f4739e643055ea905d4c32cee86e49012e45b4f0f5e9d8469c20a14c33cad697fe62b33c11c41ef96508a26f8734353c418b46bd4f2a634ef49f1b3a73012f361ed6bb0d4cc9f86337f61bea5a4e2609f8bbbcd8e63ed594d8c87e98b2c3a250786346796a070ea0bbc783b8716cd203e8720f3dd29f01f4d0575c2c4e62961a8040b4e2b3cac1191e1c13e2287031445dca707845c8abb24b047d7a78ad374060e085a8fac6965162d7a599ae177bdd13df73822e287155c44594eec4e2dd9a7125f6a2162381baf4830ba45817f8b7ef2401dcfe3dfcd4729b577ec26b337cedd50118bbbaecfcbb8a43c8234dbfdb662055a5fcdfbc3c2ffe8a1682802ec3086dcd22a8bab4c23d5e70e96dcc6ae9a7a22ea8e60be3e2efbd919acf1c0b9ddddf4123f56926039fb453c82c92ee6c95853399406bb886e64e901ebc261f6273d94a3a1fddf65e56597b214a454faaf8025020021ee06daf8b27422db50516290facd8d0b769d6e1c556266a5efc27b605740d778b99f6785108bedbbcbed6654b0b09a000d456b70c3a1fcb9510366dc77025e550d5af577cbce85d9136b566e0effec46c13d042e98836d72451ea728144eac2a00a55d66bf7a0a093b1051a0f0ea5cf7caf1c4012f485f589abcb0b42c59892deef9499555787dd912ee63e6908ebfa10c7be15a1181fcb4bc36f216c731d788ad0618a7775a8e1e6c96c673bc00179334f70dbbc4afcaa768f4081b1ca706c9df10a9fc94da5ee7461cc1d3e5c3246a42f38bfae254592f4cdaca5d43007ce5f984284e05cfb365846c5ee3d9fb07db7c8169caa4881a99fb5a900fcb8370deb531101e4d39f4a3ae67dfb9f7d76d84c1f1df2c9ef376efe2f37f503b4d568e8fd8a06e114730defe30057d2be427384f72bd4b05693b9d22335b5ff92d94ca9182bbc5894f5096b282dfafec49ca5500bcad6f62dfb754ef576fc068e893f553301a911719418c72946fa526833a03841167f74108ddb8e4005a2fca1f5912061e4a6fd2a85e5df515ebdc40aa262f5a6914c56c2613b13a2805806efad816b1052965f14efc73677593906ab0782e08ba565033f97fcb161ec16664f0d1fdee58d7aa118c183edd68c354854f4793d4b8dc83c7530a6384bdf8e988e2610efbd66e0d9fe719e129a0677c9271e5043d5b4e103fa9c8fcb1abbca827112b2e82e89a5fa9f965058990b643260b9acf8acf65bc4321fb142a299caec3795a15c128ff23789b69f690ac80a006dd1da36b71f9fd0b149f4cd2cb091e3cd57040d6375e69a237ad65474bd712a4120b52a98f77483e379c761da2ecfb395be3b2c5d36d4469b451bc024c7b384059c1be0548c6cd25dc01a3df7df641e886d132b57b07283f87d62e3188dc8e8658736a2cc4b29ddca0b3bf62029956c80a6d78d4c50aaab025a346063e19e15eb49dec35b21ce06bdaf89c340728fbaed296248f6c7c03ff276b2544efa1435a02bf628ff5cfcb6d89b13be5e68d81a21d10c11b33f528bd36e1e11f25a9035327a32dd59ed94f39364f6f5372369370827891f3bc0c0796dfb193a2127a81458ce687970b529d140fbcb6efecd922bbb68f9d07ec1f042556320aca8518d99598532b5d115e61bddb259241a3f63e7b2e3bf83dfd0b4b6e6dcc0882d123bcbcc25700c4dd48c6d8b38a51bc7f9a20afec17dc61fe16ec9d3d7ae6997eb49b6619dd3863a8c90adc3721e86164597e9ae2457b29ad0eb8ee1d22791e3fdeaf67f796ea35f811ae9625454c8e17a2c2159a5f4ee5fe5d4ccb3a95f1b5e19689f2625ab6ec3b45206fd464a3d0809202ec0f5c36fef699062851efd893923bd24da6f856ad4955a375befb0be1d61cf16848c60392a2558fe0ecff17ceff153081998ca3cb4140c877805fe39770349c643a470d0883ad2a9ac8da37effadb08e17555af29708775b6b8c25fcf855a2e5bd66c2174d63c6069cc7701623724edbb5198d197043b8499ead432fb077691cab12e0fe9b900aec132e583f6b167c450fd7fca6831ee4470322cc97feb731e41c1969be3642502ef0e11099a9fdabe135a0b12a80ea210d437537a666f7b47d607cb4295451e46c998bbf3928f67900bafaf8d893c019a732a3cda1fba74875e2053fff196c3fecb9fcdf573b7c9e6a42366c95a48f8115c7db4b6693de783ea5b8b2b172da13f49b3505f619a81208241d544a1285eb44b9fc29206c3765be4ca5b0992201cfb53729943ec1dffdf21cddacc83db87d9c9a041a6353dc0cd03a6d2010592659af8920131075d86a888588449536a7d9ed962f4549814003c23b31fb2bc1f5fceb2c0d1b490567ef5a79fe2aced7417ca471f995443eaafb9014bf18e40a933e463c105586d307b563c611bbe29143a119786927b67450150c7a3529101e821035c381ea5c11e1949b8cb266dfae55e2281918d41715d65776479ddd0a6b06e6de905b0f697251e93df85cf02d18dec32b9d8f9afbb7bdd00ab22aae105bc23346407439c4d7fef9ba5e4b378d08d71fd6e24e972918e21b1657847ef70db45b1891f1546f1a5e105e4dacef26732a4ad2cf87c244b0d3e1f54cab2c28696e3166974048b575cf1f9294d1f4de0be48d1be0cbf9547987bbfbbc6172007caf565521abaed2b66fe91a674bddebe0a8a81530a9c08e39c71dac83b90903bf0c00a7b3b27ce9bda8869732c87016ad0b2e7943c0b7d10e80bd8142fd1f26d0276ae9ef096f51b1a4c8010da77ef55eb492f838b033e83e39456faaf2c806b03791ad1ced4e6a19a68eb18112f001058226a4af7fa7a5353cca58b676c98c7d566bf5ed1dbbe2980ef6b5f02cb54704de57fb089adb4106c2902957675dbfd827aa454851869b6af166d3266ac72ec17c6fd8926ed8e753faa561913ecdebac91e41d7559cdb7586dbc9a084822b6693f584880dcd0a838ee94dfedd1ef492250448891c51c4c4195182d76eef6bd9656e831bee8541b56f0ada525f2b5e12166ba4fc9bcc1cb7b66ee00d82841a30a80ac9dfc80df937521316fb6e22d9493421cca1589cd95ce03193825d280bc0d786ea00f12e196ed957c0ddcafd9cadb26986a9426163ef47f069be49aeab76d5b4ff7a6cecb71b10a980208123a56d96953d8d6a0fc8e400a73318e0d5b214cd4037e03d40cdca8fb7083cca332c5d4bc212ffefaf8961bb7eebcc6bad67898d8a40f3eccae147cecbcda21363fd5735cd4a1d17d8f16fb68fa22ec48c37a61f763b87b7537ce882343e126732184fc0806c04abb0f1e327defddb093115f6330a581a4328e4c053d301d8ad3956a3330af7f62f7069aec59ae9e081dcfdc37380bb0f1344839f785e50c298c638db60784cd19a348800116bc4cacc5470940a312d97b63d3e81dc285d9aaa262e5a87f12d0ed913090abe119c0ec96e3c9c06a21e50a47a6af8315298327b692424b4825ded5a83abe3f2223fad1cb1e72b287428425c41f07131a2cf746bf22103ce39cfba901de460382e2222b9e1b22d338602cf3162eb01e4368ba4ee30955bf840698179b782415eaf10a0f37bf79f779eaf674ce89841753fc189f31fab8370eb4d8fb8d6868b959d26c915afdb50433d9df31e8c6835d07144351b660a8cad93bc8c77b2735727fd2635a75c518ddb5e4449dc9070254fd655f58253459a754be93ea1361f6143773bf862e7fd3c7a9194b41118701250c70daa12662bbafe763ed134ecf73c99890f06530d370ac210e0afd86f10ff64afe3cee315f226648a7947ccb34c217ad552e09b0d282d1745cbf9f85aae5223d4eef973bb673b8b54efd24cb4cf804013b1e5c72546ca7742d3dfa4e4d7c858ce1e44ab27ce9a9091c3ee443f9e60bd37bb7e8f627a79575fa38d621dcbcaee65d65d1cfbc9c38261d9e33347ea7f9784b64142d53b99930bbeb8fdb70f84bef5dbda09fb050f8b21139818c48e7262f70d6ad24e745343903780398ffd19c3b2c39df012e834bdd9ed2928b4d68ff4d91ee9214aedf19582303002acae7e5dbaa881417c8934d49707a3cce44e314ca1491a0e365c4dc335681a5b49dc32db882b417ba3665e7ae0c2a55f0fe1041679fd9d87aa6151ebcf66e1a152329b9cfff9e3bf6efbc5a9fb5f26bc83b40296223e01fca2f89b7ae0a0a49be36f2d5a88ec48f6559bef3a7bbf114a4a339d3dfb4c70ea9c84fbb8420f2fb2e8610a166d03a7199fbc4afbb0f5e11a38dd65db759fff4a6da3e22106b64f03abbf5412a385e3c88c60da7f7bc5f4f8662646dccf2e2363902285179c4235af62296b81698ef141c9ab9e96b3504ea01a48b0fcbb40578f861a59ba90e111f6eb0db8f7fdfa7d7dc66f85b99598e48e37fb37425eb90c9a78947c9d93c88236ad1c1ff87043b0e2159b7eb7fe47d4d26230e2056dc31746e90662ff3a1494ef9843ccf3361dfbccc38db7ae822b1ed82a14e45ae12443323056bf55415e5aa55debf54f6fed753b3f20643308b925746d217f80f3a9b9a3252327f5016873b5d1083fbd9d5e5b96786030c501eb234e11a751a8bf7bbe93f05398b19611958762bcd27f555c7ea9f0feeddc79fe44db83d144ea0dd820eebf54f04c790094603ac7d26e83ea1dba766b5f3e8039e3308016d0fcb87d7b73bb7420d918d804e5760179f1969dfeca4cfb1bd515ff6e085ffbac2acd808a11631fb5dbc76a04626cb04f46db5188ed73b22d04397089c9e5ea3e439aede9abccf54b6b27c06b75f424caef52fdc5ac3f9bd4932597201558a882a581d481ac4963ae7092480733d8cdd743330d7a8a4d1c0689890b4ab2d0430b309beb30cd23ca1c2a4b09f11d489e2f3075604006a5998346e7e69e8b33580108965bcabd09b756edc54708517dae768886665a9945d32b7d159f64fb280c85c3a1e44ef52bdf79e3aef208efc83556ddf21311a356bd8fbfa719fbee7616359d07c9f9a1909cae6b76aead3398ba85bb068322e26c45a04d1ee8a9c6013604cda9afb2c4bd3d4fe48ffc15fe566d387530ce94508cce5e65072bb98250ea520a3364d7528fa9781b326a145c254c4e468b5b7ceb30584bd044740dc1dde2eba3dafbcbf3a41979dd8cd3fa158c2c5155561a6faeda1d954090e1e7ebda0cfe11a394db2f3a82f11e0f6a1fb4a409387524144c3f77d719a16e919f5e6ba24319c7d090863d01f6e602acb1a25ec0a61b5399f308774319986572672ffd68e7c5d9beab4e6b439e49dceac81964d001b7d9d77751f61f751a6ddccef97670d05c7bac62d46bc31a8b9403ba6517195db92b73d24b96778ed1d5721fb6ce1ca71e14abc7031ca0ebfc91ca9a6e707e7119e33554b5bc5dd0739eea4288fdcfc2c0d46dda00d6218dbc7d4cfe308227f517dc352d44db8cbd6eb46d59e8f79712f4c229bd7a7bb8447fa78623f64482e411ee98065edfd931c7deb70d3b74a0f7c2f8092d5e82b3aa8d227576160a78881a0251a45a0a266536e375a42e28eddf7ba3db07f122e187293c9679a5800e2b2c2d6347012c103fa784b57aa4b7712ca96e8f1f16d22eb3863aaab76c4eaead0146bcabc22277ff17e5f7d7440221d345d30d4fc64e2b9d24feb8f7223f196431fdbc8a363c3d7d22034cf93a6f7d2f998ba59d0328982d912b7087c3bac6425cde716fd36a39bacc76b57ecc14c7144e0a1378cd323a492c892575ba909c5c3b9d8267356f8f3b709f261170c510fc1d222aa6bf446d880ca14ce7e3fd4ffbecc3dab974037f224ab095b37dd772276fded458e38292b2ea233325c3b9923867a52d346d942e351c60f3fc4e172c36a4ca027269da3036ea19161e880e0ff9728ab9e4edc7919726c1a17bed8d14d68dd8a69e67b8130e14ad2232304dd398d35b36c67450b6ba89d564acf802a3a809d49cb4bfde1838dcdf21a9994078ce17eb79455c72213e196d10e62660bbcddd86a70452830ec27ebebbe19f068540bdddc0d11bbb0b2e476a03efe0cc12aa99aecbb21a2f80dde5fb60c39d34a724e59b7f16138bb7b2b1fe990b8f4085a607fd82d604d32d593ba80e967f141ecc7696e26a86c44d79247cddd305945597ee48a8bbc5cdfd65b404c8a2c5ad5bf2ee7e3a22b59bcfa2cc10fb4f8e829b3af4ebeb702bd81fb72e4aaad93603d53d9d6dd97bfb9231bbcf745cc0f6323c38b351dc553b3751e5e3a6777f046f0c6b8b357db6f256386e5de35d73d5fc0fc175e04871acef866e32d2215a7a5f0d2dd63147c9d8e364cf829da865eca426ff066766d2ee724a87c1dd869cc20c4fabe53c445ce9cd045e7b5040cb6d3eba167821a923a145ce40ccf751cabed3c73f6f594ace28ea84efd5808c27e355a17586106cc4ea8edbf8d049cffc860042df965b23416d14c3a564dd7c681d19a6d6dc82edc375aeeb41c7fd6ff47558b754cb18058183e15f51c8f5c9ec6c121e72e8602d2267eb5789ef751db4bd8db766dc997be3b36577256607c229d4a15f2faee4db1d568892dddfc5828906ade789ca92a2dcb6ddc6e3b7b55b4833506966948d9d22612ef635b7a4be0189a007d30ae2d81c012af53658da7cf2017c7b51a4d9e7109eea088a27e390bbf26961a996f31a28b7acb3f05c7f579e98d575a2aad01870510ea9de0a5be8a8aa50e699f56706583308d46912ef305a7f7b75c5fe1639c675a13ccd7029d4348992a3d842fe3f5e8f22c08455ca822cccf7fc50d51ee426050524dd9275d92e102dfe4edc74216ad2f22645dbe04d4e6f23a052389a753b1cf06b69c1c6eae7006e66e15ed3edeb53eb5a752577fd7857c6a8a9608e37e220b650a43e020e7e7994685363966a301e7ee34c54dd6b06f51589e7f060b089cfbd6d50d84e4e5a5e930dc24e30c89cdc02c32decc0a7be57a8e6f7b981a56efdd45c955c5b61464d5ffd141b426ed3786af37480fc46d954d7f5bf45d8bc5b32022666c721c2a713ec965873ccc25b9804a0850d2afadb1b3901d634ceb92120e10234a4dfb18e43489759ef03d1ad3e9958cca5c213b418f8069b7ebb1d28f862815a113dfa7cdaeabb9c3cba3674895932abe1c768c8cd4e5e835b67acfd47beaf1f604bb68de6dbe97423a55ed88734570de92a659abc2d466206b6fe465731d239c078afcf79b56b64320f4a36537152231f98b065754de9d427506cc8d9a1fd46d3295480185b99326a69ac374f465159662d166e63742ddd5407392ed9ecdf97e18c5b5b006f2a164b95ff947f78f36916e2209c74411078bb40b018676d05f29406894133752d41c1f15df34db931b705f57bf8d0af26b2d790bbfcbb0d894a9366d917c13c74b6c292cb7c86a2441e5d9b26c860e05fa08769fab72605cd9252e73a946a41f2d52d2ad27128b887e9ee04f0bc5632a316547d8f2da8745ac19c951007079b297fdcb53be9bc4a8adeba7b341dfab9f1d53f355a557d71ff9b5a749d3481de7ee628ac0b9bf6e0adff1c4610e64d73ae15f604730cc613d5ae38f3ce66f144d11995abaaf009856496b8f1ab60c022f9f4e75c1039c930812c9c9e69cd193a7ced39da38a444d29729dab7bf699d80838345d19544f9b91f0e492b88871f5985a7a184385035434fa5b479ae98e2bfbc04a71ea9090552dcc11ca0e34ec6dc1ed47f6106960b493791a8802495f4da6d547ea8fc579dd168f341c6f3d133c46a8de35eeef1f58ffde6ce7ccc148549346223dd465d37dfd9c30d155d1603ab52eb1623a361c0adbffe839a39921040183f26807d0eeae2d25012092c666a99e0c2c500c116eba658807847ec801f015e5bea4a643fba12bb6197fb493ce255d606fd9c08708397921b6b08d95c4c6521af9c4958148920b70f2234718e73442a45c930d5137b4f1f5a05eabdc0dddc1a219079defb2d51a4b35ec53416fd984fc5a439baf221333295b6db0fe579c9d0260e919a1f40ffbe88c68c258ca9a330428d50b22a60dc30f2391c9bcbc9f02a2cb8f74f00fe3e7cf0fc6870fcf17ee37a19abaa771d2e7e7906e52ff55d2b20bf57762ec5784584d83087e41e5a356b4f873bf70919b0a254529ef46e348eae951fba12a1aa87a910891d0eb8cde30f07b9bad73502b9a0206aa5d49dc5d59f142c9c99d84749cc1b31d08af2cad272cbc30ac157bd4dedd806df6b5cf40dc62d6b6c011b63a80b889b5092cf3c6a7458af7839c3b8dd35330f6fee11145fb95156f9a999623b63317aa43e19a5661aac56a3061275dc341e474664a5297ddb94c9ae96e905d5e82a40fd906b3bdabaa58b95e162aaaa4658c66d9a670e4fec1618a3ade036dcbcf70f8c06040740a99f0d39ebf5c5660c7fc7cb0428b112d4ddb0351e8eca9b7dcb0e380ba4016a840c458fd7a7f8f5e1db71fa18cd559d22a769df0983b7d97792202afd0c3fb832b0f73e0d52a7f2ccef29d0f3579214b64061866fcfb6cbae41e0e240f09122bcc64447702653528e41a6ede129237f417966e2548f88833ca51027128335a0aaa8209cc9c8497bf7b94e257debccea9a8ea39338c9304e3fc49f608ee8a3c17ac33d6a066d690d0e7bb57f837803d7b1869a257f0415829a6e4c7c94cef535f43508cc2ebbe0fc5224939c8d8f9af81a008d8906d19ffe2bb2c571b878301d8f266f65cd640b0600eee87f500380036f6b22879fe90ebdeca3e502e382168450d57cc02a837fe8cc570ff8c6d5f4ff96704152bb1a899e037eaa6d52df10d2b354a5f5c5435f5ccc9cbc77c4680fd45a97d38f750e13b74f9944f0695ad21a86942fc1eda29bdd8a511f035ca16fb63f07cc67ce57304e514a245cc1506c84729895a31b905bb05cdf9d4416fca8c9bb8047e38d97c8c3ecac2110db88d3c1ea7341233e44f3b7cd764849d3c53ddd507338b6b38d036a46190be237f0893bfc63ef682d25cf9ef679bba55eba7ab57da2cfabece2416554240ab80028a54e56fbe498c5ab5eff07c9a50d6aa55879f581cd11b34201aefe281f096d0679d0fd6390c2274ca78b5a7c9f9d6e22dd856c19971838c1a67e4df097bc4871fd54bbe035a65cd348dd3ecd45e5d3fedb19b84f6601ed56fb6ea716d4db3b3906eb2cf536bfa6268db98293a8639a8fadfb91211630ef3f25d73e724d95a6ce619d7ee4b21840371287d9409510c4f03ec34b1ad4058c5fb511f1a9364ecd573e4e4515620cdfda6d4e26bcd9deab07f82d45ec95ef06692e635216fa8d47fd4ef22d119f2a27c6f1772e715784247ec60a171314f23b0e9cc5094acc230fb2a47f57dce7d59edad3a374cecd71dc66a4f772c08ff55cfdefb69972bc33e9e0333cedad95a63189495d4349a3d70023b66dcb406884b635eb978c85658cd9904911e32d865ba8b22e4f161a7813ba957362703c956ceb5d82e8ff24ea3f442542746c6be646a95f0849a2dc5d3265bda9746cd1b9d2b6e1da55c0a6da6922ddb3bff59bdc5223eefd47bbf34fe130cdfd2ea4e60f8fb056041fa6f9019d15d5487c16030c7487a47bae23b4754debad016b540a88e38d9287ea8efd445033c11cdace09a3878126823de69c1dfe0ce83b7b75bbf2b063bc6b2626f503e56912c5f63f9a5fbc4650ba7a639bda01a675aebc077be8ce543ea8f9863d267aee563d37410929d842608f1f168314272235760e841cac8823e96832209231dd9f4542f4535a5d5e6c972d6a7644f395bf88a844ef11617b6c1b63f136b3339b52991006ea57a8f04c0070cd9ceef9296f9f248032a0c1ab2f4a6fda93066185124918dfab65cde3d33d24bd8e5313256a885a652d1837931af5e9cea66d34b3f2a37db777f7b083f4e1f24d32cbefaa55d378622f2665869efe0377be28f61dd4fabe8245709b553f7b83f3222aa1b71d7d8c635d043dd070c6983df0bc9d5e539283359e651fbc40e7e4644f6147ea624a38f8678da94fbdc597d8ba2832232cf1a799b2a0b453827039038578bf19b02446f3df2d17e35ec66ada708b6831c1ccf3e5dc1985d77d204db808ff1a6e0df896f9e9821da169d948e7e0b687f1fea93b4d75211bc75d646a72980cd084a932f86bdaf3ddce108579abf7d384dc75501c84e32a235baf83a1c21deb2df68453aaee82d2e4c52c9104115ef3edd9f5c5362af3d47e847848c6986fd7dac68252fdc525107372ae8ec33691bcc71d59a021a4d7687239953342d421b775488de8c5b64cbbaa03e082d31cf8c4a4cffc96257112ce5347b10f8f584cb68dc7d27acf7ab8ad8f54e7ba92832a899ca5833b87c5e70c03e5e39b91cf15e390f0463cff228898c5670d6520b1331aac007d836f6fba2c3ea96cc7bf45ec68f90866ff1e3976c3b8c1a9f4b2528ca5dfb0e98d7c0a2eef5dcbe5e29b80a739081f5cfbf3b3fe249148270dde46588db249643bc02bb750a6b9b1816f5ad550df6ac75cd2a3d302c051d1c390b067f9d26c017b3ad68ac6e4ff506fe08e844fb73da28b4578bd91c0cc399070e72f1e6092c5be1cff3a8aa384f5b666187bba8d0bd8f5e5d644e2d9e36963e3cd1bfdd347f37a97877e244ddc6697fa8415819f34c7e82541066dfcdc98138ae30ab95a431c1b8b42dacf7443536d92e9b4d2ed49f345159234119fc4904c8544d6870d195bf30154fabe97bc56a83e71b276311d9c57c1d26525ab935cbbd6ef63c3ac4e8a4f83301cd6675f10abc37277f3789ec4adaccc0b65961ef2e84c31d7b26c78a7531944a9d46be94671635fa01ba74e6cc0bf70cb11f9b12f3f2e9818d4acc74fcb33bf2ffb015a54cfdd73f0264df7ab1636efc0ddae5f8c181a07e9534f65d383432f433b100f88e1cdc326d9a3c777f316a7c42f50785994033c21c7206fa59c392278939a03029489e80e7631d027cdb46dbbc38a9d06dacb0a40878a13e1c162a113d567e99c2c015e0f95cd0318403e85b6e60d645c466d3fddbf8f9af20877318695c94a37e787bb760e73145752a99c9cc6493c0be5f4c0913cb69ed2a1f1a5fe61ff3ad7d9fdb31c9f8cd3d96ade56c84aab229da580914e0237d94af849ee2682b448ca47f18dd1304b12d2b3ecb8d8a17d5706d77f71a6ba03d4a93b32d526b77651f43f1374db9ee4f156441159d9ca7b9350eee15e8c7afeed1e2875f59ed06b07ca391ee49863378f8dc9892d11fd6bacee5a05b6dbe8587bff211138fc0a255dcfe6ae41bdf5f1398e85066c837cb56c0de7517aadd1394e4e792936bdd1af7b1e13566f561dea72166e142f4e23dbb6e1619f83f79d0ac543ae49f483ea74da1ad6fb0cf68558211e1852e0698f903ea88b1a548198da0ff20cc34a1727f2439853bed329d5a9035843d0e66be12a66759812c901b7a908f6bfd57a326a483c08f208b5d766d288d765b53b414332ad1b42dd19e9fa64f35e7e115a442733018d56adcd052217c13c5776260cd048bcf943f01edd29e013c94930a819505ae8ac8b6de243188fa332046a52137cf0dc7bb3cb319c0b3f579728d7a7825cc57dce3cf68234b18b31617f84ca0c8ac5c066c17b7eb19dc4e0aab8e06b5c77637e6a51925d9dff9603810edc8c65ae1a0522ac3d8cf6f30b1741c846c8eb88a35ad396acc5ebb5c806e35da0e43d5eb1b95922b6a0451f5f80f267128d6b87d08997c99d40261c206eb338fa1209dd5c72574472a36b3927d7f5394ffa00907a0a7bd87012783a32d2f7a065d837590e234a2ed150e1e6e469693ade145e8771ab8d886fe1aadba030e09fdc9585e0eb773e0ced23d3d6331cc73e8f988d39f0cee4e34319413a64a02abedf72e8b8bd4fbe7a250e7af02bec0ad031c9c845d521eff69d4d72a2b6c3bc30a8f0ff28c54bc880c386e657f5e9d810f72649bd43b26b22f30b791c568f19d51dd9690b8902a55cc3df139af96f9c9d84eff70334689b1eb12234634e7f2f3968f41f41f5889dadf5a4840c92ef2ac2f1d796e0e6b8afef8addb5ec5ae7ad52e6ed7ed64602df38e2a5375b7443fab18986a92de844dcad9efe59f8a7ab48ee39f9fef3c8933740653c2aa45a9ddfb9468da7da3d6427418765584eb7e30c967f779ed0843bebc7264e6c88324a697ae6df8be1a94614b01813cb32d900a75acc2209be09896ee54576006d6c4da5a0388fc07ad14a3de42bc77c20e90f930d2126b1a239c3b4286be05b979549650c90f7723f4484c6e1ab358bb0e89fd25b3f1ee82cd92c2de3dc7f46bb23eebdbdf09907b09900403781109bb28ea30e44ec3a4884f0d4b7e414bb75f6c8913776bcf7ee18e9a4156db11cc3453f2a8be55eeecbdb6db9f3b65e5eda4af7c82d6413f36e8c1a9442edd839197a5c7959436acf0a366904e9e990f8ea6510e4d5adbc5bf6cb56f1216dff060dcb302fbd2cc3e4f2b8b6bb7a4efd59a5c8c41e19ec0d972c50d67ab7e83aaaeaf2e604e5998b0562cb9aa2284d400bfa8022ce169bb0ef561db87481b8e9967f5eeceab60c594e0752c24be5b9dd6a48f483463d077d10c601b5f30b1670d4d77e998fe0b741688147b4e590f3b1df6c30abb0a67abf0aa8b6a4b99c8d650fa1e4964e099bbc2ad77f33ed9294277eb62f84622a833503562806e02190adf68f8ad0b95276f309d79c77cb210b320b76386dcad7b57b9e84ff2f676d04db8299fa1c2d5e191640b1cbb6916bb9596d86725fc0d6339d60f545cbf675f3bea0615d4062e13fc7217134b18c737e703f2d6305ab78b0a675ee5fec9410f274fb5549ba0e35505caa4b424b7a294fcbc7100c391afe046f0d18c57210bd7958932828218e21d98fe460a9c55f0603e89f5b3a5553c09291713e9a862875a408cc51dc280d7d0228be57cf451ce104ab4d2174a72de0032df023bd5e5db64e5b3881958eaf5fb31ffc3003d498efc395a9e213d785bf189be5b34807946bbd4b2888968eb6dc07d2dd216f2a54a8e1b0d7584759d4a50a28bd01f1d0a4691d03559e05698113c0ee0aeb0deee20fb878e52bc9b673fb16cd1496c5221de3f3dce33798bc5be118e8bd55d20b43d45fa5f59b9378ce7279aa28160c372f1efc0d3683358192d92c6c4b8ff7041b20c98d33ed5a6e4956b12d8cbe76a4c886250730d154fa2f0950516da53f5d311270ca4f828af4db810c13a2b731c90579dff6c958790accae1a422a2fc6dc5e4898f0819e95e398d6273d56799c8ce75ca4fb0f1dbe8b4079390a973e8e1ac0da39aa1ee6bcde035980ff66c5e464077831d987937b8dad7f344b40d300de2ab350947086402eb384c8fd1cbb81a5a34a245c3200e4b0b59b50535c19e341792b9642cc5678d0804cd62edb08618ac35af00cf32843e228652733edf1453a87c1b489362a99c72971e41008665a9938ce68ca3fcf1966f844a89a00795654d1d4a5252148e84f2b3624d880d1289d1378985b8cf67ead8c5f341c998c08ac6c6beab648fa874c16936be2d9b547e88527876ad3c8213218bdab9663d17177b90cf9f01cc95c0daca3685a309fb0d98e8094ad898b5e4d749429f329f9b1c784a37c93c437e2e8904fb8302499088f7414704e3c34005e72ce7ad0eefc7c413f084b486b2be076e7cda116f775b6910fa1d68e053ca1f64244d3cc3e25ae3f91e66a71409fbc03964dd6ad2439e44e65c693a44a2812a4529c50b46faa2758169755e38c27fc79b6920372b14a4c3cd1aea506f96718d70cf9132e63c13b4fc9124341c5911f656f8b66700c215536f80b13acc6ba95d9de090dc426c1782b4ebb56250fb8a459c18856c25eb2bd20dc8ce96e5560ebe109191699d478f04864e84783b9ca52b8586f859823983c02a72fd35c80adb2da8116eaeb0cda0dd3abe605933d235fc0a403bd440c107180b96c0810a95991cab68b32fafa3fda10b7ac1c412140a8f6e76be9be3648450181b58b960e32ff39f3869111fcb5598d1c58b4df61d4f9a664bf392d10ae2c3d98b34a84c12a0f1f6699aaf9cf3ee1dbcff2669eeab80bcd2f0b86bb8271cee8441474ec33eab08cc32710e8a7d3bacbb20ea38f3bbb8969040a96fda6794a74bf9112ef996d6b8216391359cc500b77f7ed299b55ab0eedd6a19bb64ac0b43722df91b3c60a30df172f948084513bf93b17ae55920c7e6591bb75952a911e818ad01b70c9e1e7a50d449d63abe901623635d73071ed0d57f6284a88d2f2dc6acede2eb65d955e6e21e22c4cbf0fc7a7913eb2599c11601f1939a31f27904f809c0b5378634922cecf316c7b1d109d088b21e43db8dbed8c4c01fc419aeae4ec8f7a4df8a2443d29e10d4b89c7243dba5c13712ed0a5d25280049b482de1faf8a2eda9bc21923b565fa7a75084bca18fa2d2d337c7fe059fffea39c1b823a970fbd33d1c111a48f3d92a3a460f52fa49337d3d87c9059b41d4d6955eb31415ed2bd9432a9396e05707ce3cfce7525724b58512372ab46e4ceee88a743b6a2b0a235f2ddec5cbfcab55ee7ccb46624eff07f13118ef274cbd860de4e741ee6a6e77a0868377062209e9d51aa5881c5907b706063b21080919c6988c4c5df6ef1a24fcfbfe371aa82dd70f534cce382d0ee94204b98bf92c2e3deb29dd46f9f3f76c947de1284e069831895dcb8bc3bb0d7ac58629d6f5816bf6d4c25f7a7bfb21788632bb30058e29122ab8b514d879557ccb001adfee8d0f93c17f081114609087b94e7c44adc2d43da10d6f86696943d5559b91f805e73cd714f8eded93c606ee167d469d62f2481cb78b20f4caf26d105d3c0dcbb92246b969ec3ada23204cc35b1117718a40ab4656d5a8508a0511c56a0c7a9c0535c9ef57d1dfc5b5022c27264bcc3253f059f9272955ae920dbabf74c155b8609a32a9fc7f67b395fd7263cb3d878336f5131217e4f3a95558940ba90da83d06863af191ea909a41fb4eab3cd0564113ce2e33e039560592aea729c310f13467d8e00574927560a1ff6a9d5f677733d1162732c3c2c50db464fd3da8255e14460b4dc8dc666c2d1da88bba8bdc0a03a76151b9516a24530f2615df08acfe4d8ef44c6ae46c67483374012554b0ad16df1ffa0bdfa0c6f36b1e01160132f4a6d5ac06ab289acbb097636be527d452dae02bf431ccefcfffa4b7d6d1e9da497f961c2a275140b2d821450fffbe002d0c32922a9c0d36c61559b4adf2d3dfdfd1f8211bc007488b2c545ca26ff7ed1a6dd362fd7f6e3d6ba9aafd786ffc816d9099cc8fa4b4f1984dd1ac998a425b5fcbe09b27d3a0fbe8c0092324362a5fe9f83078eb4ef927956443cae3cf0523cd13951d2257713fa9b48bbe91dca59c6b6769645b6dc9ca35ec11f8f506d45b04e93077646d9ad3325e5fd80dde0ba4cd8877e47446ea5a235aa73062a4e10f9a4e42612a62fb69d78ba12b03703022919b0a79bf69071201b41f50c28372d14567378db3b71928fe2b686072310185868f7f19745ada397ac3953b3e66eb0c290721419fa1b5bc73635d5fef2513181e8705ec5e0ba61dd4e926f272ff226cfbb823ecbc5ea76db7d7de20688c01da0f5652a57f01c139ed9f341481071b9b928267dac15d9b9758f0dfb8a37d16f94726af9db147e97f6a21294b913e4b160bbf195846961b759a80b53852a1787644814ee1c0e70b2e39eb0fa027164f4e20368a0b848008818e645db172b0f0a61942f697be0ea3ea7c009739b153cb4f4180cff2ffe0592cf8ff62058411ccfdc0d6a4c1ee5867b316b37caf3efeb4dcceb9d0ba9b14a0e831268698882c4252d8fc2066bc534616615b40dc50d870aeddac69de141001b335879e05cf809d994d8ff8d351bb9c60239025bb10250ed6a3909181637c04d2c4ef17d50e0e80525bd7ca48e7a2dfc30bbfd810156e3deacd2134d58b326518ada5ea290235172f7970b1e7aaa5631010da5283b8af95a18ee58cd761a212c23436ed0a25e6f7495f5df2d0af25115706f1b2892cfeb03024a61d246d034e21da4302fb11aeeb28035f3e4962f9ad1eeab109574bf384f7f7038ade299a215f4b7dd1168b012db3ddd8fcba3498502f474de3d96507f0325fb2c249a5dfbf25724de064335893154ab47f5b8f0d0ab28a99ef22b139d58dc4f7f9226c0b633dfe973d9fa99d9487264cf866ab1e06c11fe60a0b6986f63ec3275bd2e03e7a5e02d85681bfcdaddba29695ea0883b937bddd2705cd5012f58667586eae5b4459d2cf032a58ccb4cea4667517e3b4cd3481b970af32027f63bf4adbc86939cf03a33b79e3ef9e11ccd6e3371d4fa6e1da31321cd4ce55f9c2cf4e8f6735bdddb581f5b384204decf5d25d88d87a8d58edaafd656a27c249ca4ef17aee298931111971bda15322e7a63a54e8eddfd5fbbc783b19f0fb6cf7f2d6d0db1a8934f210c3b865515d403c16352c430aef7c31c26bda84e67c07e32a8a17c04d7cb830206f7b2f82a8f1841095a3b0f3b7c4fa757d86bc95290b39ae9ff155d1e06c38d4fd28a6545c0a16fc22959e20b929702b7cef4385814ae63ec5755c51fc293c7dfcb54196022c8050cf4f83de4386caf917cfaf64a96fb2c314e7ce31eaecf8fad9d90a4dfd36246e291e11276c7a901f5f31f36cc902126b0654bc223ba7a48bb4e4ef196ba27ea10e700d49368771fdd2de871dc182bd5a2142204827515129f45cde14c63f75b774b34b4784cdf6d7e3c548533cac156fbe6c778f765b17f0637c678274e52632c7c321ff38e767b2bdf2ea0e3579acbf26135d5428bd0e9360cf4764507a5772dd43230f14e5149388199af1550f2834e92c66425c5a6c7fe14e43f63953203f2575f8313f4b5190a0e94a7e8069e49f66a9dcc20f1ca64dde7cce38c5d14c70ecfba29339b34eb3dac28b018585f986354bf816c253ca92038a41410ab36a753eb0eaa6cf6a42263908f1ad9ab5ac74da4907d14449d3b63b57d08266a0c0c510cc21ab3ed6c39ca0d7a2f7e820d4ca0582c5724aadb8857c5994eecbfd0f3757c06846bb46b9b901341ead3b72dc2cebfe493aa19e9603c65be6a5637e5626386312d40e70ccac338ed9955b3380cdad28fbf8381e1df45dd7cc3c7d1d515fb4c8f6b344a8e6e2cc58ecc276b1c0e25792cc09a14a6cab17f7e18e26a3740c8939398947f207018045960f147d11cd3d31023f903e498cb92455416b63c1e852e0d9bf2be6432d353ba69977148eecbcec49bb23eeeb1df3cf0d0093993028d5900a3d8581f417f84780b8444fe9d9aa259144a855e5bdb9dd411c3ee2426d4727340ef44ec4ac6f238ea39e8b49d2c984dbb264f638e24a6f77148e81f293e53ee41343ddbe85232153e0bd08d4e8b7d9affaf2587f97498e5f3ff996c09518c1dc1353b3a1f579300aa7e8c8bd552c2620c09e5a1317d89350cff90973c3500dbf5ab27ebd4e965e1b928a74b6919c58d19a2282138ed95b730c2f7fa3c90162fdf9f3a648b481445b0cc5129791dca55339e0732c66599dfa812c8664a0a8413d5551541b9f1e06a4d98562b04d35b2c5cd50f0751bcfeec81d18198a6eb01d6574f5018e8b105e27b2bf6f25ae0c1fba64a97b7ddacaee020ae9c6b6d5e70098a06e159d5d3405faca4dda438fa59416f375e328e6f8795a198bb63e76b56d9edbf8c04b55b5a5435c210f8dd9d9326a3b053863694a6a12e880a3bb64b1e6a18907a7c668a797ba234ad5325fe50cb08deec7f4b8dab750660a23d6adde5e5fcbd06f964b991a8179cf4665e144e5a99c92e801b8160aee1d9a81f5659b4fbb434e649d8a0d7b8510c56229f8672486b80ed52037e33844c7c72d59a62e5249ad19b56a4de43a0a5191808adae08e37a05326e8ee214c55c37eb662a250722b343abac52fc676aaefd626d556783225a4185fe563e176d00c0abd39f560503ee4b8b0f8a48bd4d46fcf1efed13a6743ba955c7da19a8362c829cf58fa5358a652e03d74ad8bd13e25a18765e1b0159d63977e96fad523520e5c58abf08f9d57f89e50c46283b01d4f8ee57ff91cf186c09d1981e78a4b57d3d8365a589a97eee8f7917b9f3742abfd00cbaac343abcf32f7ce044c0e4c89537c20e2f850f46f5a13009a5d97a91ff88ffb4d597d848b6e5981b490bbca282a906047b1c5843648c73e390186486f5b404aaa3e5e524e31d384a4e2ded3257cc190de7c8d3f17df5b773dd4510eb3c798deb3462097895b02a438254ed759f587f25b6a0f560abc086b7e29b5037b83e9d0f5b8d703d702505ea99aa2100da8803351b41801a63efdbace4e4bb7874a5361fdc09052f51b8b6d5f46a03be3943560ff619ff546b67a4719b231a7cf8719cb58e1dd8af563c9cb7e37b2492e16ac01efe1e3f31fac3c8aaefe1e53519e1ecabac27a4a112bfd26ee3a77dce8f96a3f7349b7522075064b5a8eb3e3ad5337843028ebfbd035b639fd4dac77e4de8e115c2371d48bbb384dd75144b57c37bb665d32dc3639fda0c01ee26dba318450987a39287af1b605e5f3a8b2bef6145b5949b29dceb0330b4f4d1d5d07febec14dd15c788077757628f4384b5160d8e1b14e3655f23fd5340f956fad61a36dbf58c6dd62fcee3122dfa3948e37460194dc5054d4a13c887627e69920cb69a8aabc7662ad19da6b571de99c77403871a9cc7ab85de73718790e028c5d2683db13c39ab92cdac838207eb5a26ec638fe0c837eecdac7f3dde135e043aa2aaf3db5913776e1777de8449926f60737196ce7ac39a7ee7e7b45417656c923b30943ca2805fbc7bd34641701cbd1a34406fb014ee95eeaf62f179309fb6517bb57681ca61a81360b8f8ae641ed1c2308c5b8ded01ddc85c08ce018c9710058d983441eba2604be0c887b90ccf2dec0fe0d4296b7b03a112233f1928153693da3534f6ee3e2a5cbcf964a664769cdb68fa32fdc957fc75dcfde9501612533e3add6c4761ba9fbb6655bbcd1816403fb271e575ca88e66efe8702c017943b06592ba2ba4806adf632be27c183eaabe11d008ff91fa389cb2cde5482f73e843050103b7caff96d19f10986bdd38a64b944af818bef9efc5e1249137ead5bf6efd4365abfba9b44df9bea4e1e45d00d6e257799eba79964274eca7d1aef858614774f71395690b94e23b6982a2c421e57c7a28b4c24696a0303aa3ee8fd1fd22aff03a796cc98177b4872cc7dc336551cc7c835870c3f8d3ccaea3cf48274874214423fc8995cebbf9823df2e5037f54f3fd640ab0eba571980ba7239f10c531353485ab08a0bd4a589e123c5f9e13980a3f77f7a29061dec96a82e411f06b622b3598ee8231a5af8efb41577e7b49c3f76181ee9a777c0c5f9181817be53c61258f8d91a9ce8350e9e1f7cce93f49d50c0267c1e4cb88402fcc8b15b69a6348b43b6a6aff4a45d0e1fc62fd6397e6a964a052366b6e44a7c86e76153c0e9077ca0349fbc21a64b870ddd8db5f67ede96d416813f3261ffd77e75cb2ffcc23ae88010bb469066eb4f5ce8579b31ba64d0a269aa90c6b1383cb61384484d4b6523d3915e3147c793a9e769aa87036170449bdc727da83d6c62bd87df7b340d1108490e4281bea952e4dbac12139d44d10165d63091f9edf8c52ca2c3d93daa1806e100c5ae0116f54e1878fa0e3a5d55253175d4e9152256751a32074df20aa0dfb1f2c6f9c0a8d92c0f3dae0556c7c2afaf6da38a37541be4eee743299a9a07d69d6942b2e2f691c32ab04a0e9f55421def289d866bd5c2bf45f85cad9a758da8d824f61b7ae34476efa75d113cf58dae6eb7fbc25879e4c5d44942d639afdb22226444a54e56295e94d15982868d606f29031c61d37d1ebc160f745502d0ba31a97a7502ce05057b8a39b3b1e099808dac2cdf69bf4feca08c918ffec0b6136cdde821a6e9f8dc4c4f22ab91930250a687c39ba865b495aaa53da3bddfb3fe2720881cebdeee5749d50d95a337d61cba64d10d57cb6ba164fe4507425d7ce92f208accf2b0d56deeb1b46ca646f0544ee3a593dbf83bdeea303b953b57c754281eef2a8bc92a9288327dccf85205b2034558f45d2de4df612f3bee9a1315a38eee38792c1e5f09a3a151e71959cf3ccb1b0e33029884b97fabd4862ef42e732c1988490df79789f6b201cc14ac94cb52831c162dd8d8c36c5e05d4a03f3b2e5aac595ad3d2d033c87dfcba8ea3704c6593c9980301e72cc1f0cdf2d1b8d2f59da603d99454259bb1003b00eead827b2e980a84beb790a1ff74e01a6e7133f3475c51162ae904498675d3f89a5e1ad15c7913762e222900413247f2b8801e829b4c1c3d80474ac3b6a7e537cc149bd4e22c13a932d6ed18f19adc778f97ea86c1b4e7a977df5b95a1a09c3d5756293329f6bdf0712a05a7e857bb1518859edd024e2c6965db7eac584bdd80a6952686e789b6ba7b53fc38c5e6b071d9794e2d3b9805c20db46e0cdd58f3efd559e020d0a018c49de6caf576f1ad62a3ebf2b44ce20072f317845b934b97e7ae56907ef5190809b158b1684c547760478e33a786fe14575528b19ff850135a76283dfab6baf620bae6c3a26da48ee80ce5e733b6cb18404b626e8bda3d4fb4634cbaf7e428a05ce5e41253c43cf96831ea0b99d61cc96376056f9e05fa3092331445fc01a90b0c2d4d76f90fcfa48721cd837179caa56602b2729c5ab0afc12285c38e52ddd1548347e4b3fd63d5dff23538c4cfc9316a3775b527c03c65315429cc1a40039a9c18e9c152298c99255229da1206b9e6d89611127e17791878aea769fac452daf23142ad6f11321a8929dd11446423936db2fd6ea3223e0d11d3abf8ade6de3a798b5e17dec07d56d4129fcdef2d9c2ec84a9e7753fecf5dc7f965a327aae59f7dd3cfa33947b60c076ddc1574aa81ea78fa5d4c4e66131b990dfbfc8f9200b27f34419b5e55c5301cf9079fd3caae5c3d3ef47ed63fb72d1a338dc238dc7d2026ee8c743b4b8775b40cc6ca27a0df985abe759a79759c5356c667609ffd01e3814165560890f37b4fe2cc592efce0ce2e4b22dbf25cffa443e2c346d2b2563f9cda8121c3a27b2fe6c5bd61f3a9cd85b8a8ebbc7e1e43777a70b79e742babdffdc5902811a2ee9a9f28f13f78d9928dbea54e7708fb53415205e63020dfb7645817d5737fe3e5f97c9ce71b4c36a985bcd3e0ef683ecfc6b7f81cb429af45cc4dea40827cefc755096854a14097973a5502016f290bdf9b228e135edbb3c2f410f0e4502f058fda42824903145f111ae9703c6ff3393231a706888a052af8318991fa8d8d60ac09cc90260fcbb7e88b49519e50834e0d61a376f48c8b34b2c73256f4803ab1a66222c64a9e62ea564b3e8d80f048b1b109f41ca0ca410a945940a15bbba859200959b5b65b0c31c70f01d611e2df096c03e691b420f21b7be35a404e6ef0f351a140f9432c55e75f5c90bb7755a2c47b0bb78f9ae900dbf4be1117ef8a587d179941085f593a58e472ee9cd88cae4f67c73705cf0f9c30734ac9769bc071a7f82bb33e43ad7b6acb98df6920260391ff6a0813ac2ff664b4d5784f26568036874a0373b314fe0cc470d63747c2739e1e5bc12066ab7a512a12050ffb02aed9df90d2e852c74a625842916bc624290f9bd40947bcad37a634ddeff80971fcba21f34b791f15e2cce13981f28444f5c827ecaaccbae9d069fbb51ca3c3bb241eb5ed5ac219b46c71a0ece89756b2a1cb30a72bba2532a4ef851d4e3571ac256b244ba0d81f727ec060d22520f4d7a4696deff33f9af1196aca1ad7484a0057d48b77f71fcb222bf5c8fbb772ffda68702c48056537e48c849a85a0d0d991e733a0c5225969c02450413d52653b677630d0746d57fbd53163e7b66995bde6329fa0982b4c023cf29b6f462fd2c33fcc1a01d29cf5f5a3e2568b8fad0de60b097dc557fefd7338b30b13b77df28b0041f9a38432c7f98866f253e0e79d7f7d58e6b0857fb4018600457dd223d49422cc247a815c5af904fbe31b8aa0fed6d22335e582b9439f94ec2d3c09a086b5f3392682eac5819e346fc0136e2c185c582175a58a4384bffc282e91b120738a7a6a73ebe402b3907bedb58f2f116827aa58dc36ee6712717430921be1db875d77b8e9e7c655784153aed0811fa123456e003a6b55141f7c2ec064ec2476d9e2f225f374021e574c286f86ea940929600aaa2032cf976f203277d98984cb690eb3290d56540b9fa024a97cf73354fe0782626761221aa777228fe13ac1d56307b12983892e76b3afd04e47311f12d34c038d280433ba2be7ef0967ebc434b4bcfc6b6eccf63a1a19864947c11dd95768cb68c9181ba865f2acd07fdcc1f8de7af8ad7bd2354ca35a4cfe81fce105783d6d7ef4c9f4a3bb599c3895384665478b7359ef7df021c894cbf6c441d3e2c3ef9cdc1903c1fe6194141fd9a467727e9299bc53c53791bcb5aaaab98a422f408b46bc2db759c10bf118b7e7683e154386dfb01c01387b729dfb0153d5c54a1e0536375d1064df5095c432fa5bc41c4a1bfdd58f51bc2ecc2931bd25e19334afb53eb4acc0da2b1672ef763d2c6d55f8ace5ae6908171ff55c4566017b92f981455d8ac106424920048c80d2bf7558b4339f60bd26625f0cb4417f5664cdf29523f686c1fda4bf8c08d0670257d7aa55d1d9dc5b5b032a2a7777e2b5802ff07844ad2ed1b29a2a7b99c1b16b30706fc8f2f8c028c44eda598bea0eaa61d0171194c27a269d3dd8169b8768facf60c6244d4b4253539026a2ccce78258847b0610891471fec8cd192b2f8ba35ed7d891252b56a9f7b5daf593e5e03473d6cac2f585e7c769f449c64d46b52cce421a1426bcb3b55de31562c78890f59092c279c89f8b402b495e6c79e5ff650d7bde28b9f1d6ab2e98a495d8247888eec7bc1af04a8a44adcd5717f1bcd6602c23fcbbd8a2382885428e685c17ae666ed9f910cf11425ccb76e99313a52a2dae19d02c4a4e21dc11b6e07ee5d2490a775bbdb23cfa5cd25481a74f1ec811fbb99b8219799b77721f0188cac4a0ff00ad5ec7cf3921bee8bec7e932deb3eeea8a89838f2e0186851a708f6b5f60da46d21194cee599d633f651677c30245afa503fa95ecaf0891a1c8ae92cc1a05bf26fc1ba9cfd2f6585e7321c3cbe07930a389c1dbde21d5a6d4ee9cdebabeaae40f80bd5afab4166606459c21a492eb63f0907f12ba50005deec108555470930b7400ca1b1fee1b08c77cbe50b0aca66e8f905431f1eadb164fef3352b89f1620d78f503a713188e83a8142d5290f8f1bfed5b0c097f282e4abf00e65e20441a8293979689d5c44a945ee2da337b563a8380a650f5e9eb28692d7746c51e09c21eb3d4ca2d502838b2825a2d690c61eb4619fea122a75f73319de8d25b769a596723241bdf0fd097a5db835f55240ae5227cfe79231b0e70359251195bc1d7bf7bb166bc46bd720394e66f8dc4dacdf487d2af0f137212ea35c75e54dee76dac7fdc2d1335f6b516d1cff3749f62819581da313807853d90f7fdab3c84e7d4d4a6581706d44297212d088f2b4e6dcdd1b15c7544285ae6fccbba2c581d61491edc8f908fc811dccd027d61dff8b44549318cdd95a434b4f34db378c30950571eb7cdf60c7f58d85b6585fa3f2321bf10cc09f2b88c459726a1950c81a27fe35cd08f40b9c3958f10e14e10376d8c26c9e565dfff90e6f5a1b87e23ac2e6aa6b59827f7cb28ef433cde3076308032ccf86f8c6668a82b8460eaf6a4aac05a00990dfe267fe63efc0ce6f6e321303abc668dafae3b060bc9663c599925359da31d1f3141c9855b289f48fec78fa78ae5f700301cc076d070541b15b0b65ea07292b271a9b53444372b004584f35a0c904efe28f421d7622865a70000b1b6103b7f85d3eca25c205d1f9e3a3cdf744f4a8c08fa5602c9d43b1133ee0779e02f4ab9e0b24e7abd4cf8bacb185d3f8a36dce5dac200e21ab6bef69b0f8561c6076142af11e5670cc7f840f5548e8ecece5708a4fe3abd8834718d0fede6a9787cfae19796be45434a37fae2530f689940c9d6a9cf8914c2932031c4c48f7056265e55e7b64d28bee2f202b04cf4c6222482a711ba74c6066e56226ab73b1eb7eff50090d27d9112db8fafb3a84246250636039d705b727e922a267ce036577bb17071b173090335e77a620856dfb6a6c6b2980bce779ae686adb5138899f8a37e43ef80215c5a11c3aeaa720193c846e64debf1442a07d029e34913fdfe663eaba81c493c0a3ba6ef20fd74b23155a10301c7d24e98f4a0a2dd8176d7872ac941c66fb86653c08d4f5e7d97477b48d357f0852ba7c1411e0c15bf822ed4f66a545283b1fdc58635a883134b480ceae6b092acc9b1c221e7d788a8125ba27cb25abe76d74c909c5984983e4ce4924da1233135ef485c76ea88f963d5b930177b2f112f4fa4342e25683a74bb31a041bda8d7274017add2160bf7325a7d48f6978e34eb8a64a53e8f5092511d0fa71609fdb62ee4a510d44a49721dc7c64d163c02840e2d46f41e80fca6488a5b14ab31a05a22bd16286210f5b2892803be2985354f636bfc288e2701e4d6af69c6314203a44df4574d112939800b27f5da45174d1c95a7f0275aade42abb21c92fc7f12e59b92726e88a606f692cbb0fb3a8113b08f9f419cb8c2f899b68fd87ae5141588478b945f9518c54a5e03e9f0bf65794aaada6ca61178885462e3058ce4051b999f89749675547b0f98dfbfe4521f9574683f76e9e61eefd95749733301d353e7f59a4fbd752d8f36e513b0a8009b396926405f11dd63e53785c53f88cd81d448b5cbcfeede278f0c5fd67512110909cce446f2606603f4dc94bce921fb1b69d1e9fd6f17578bae2af38bf758590977e1d2c7fcfa20d2637a20bf56f1afdc18e6c8c03cb09bc4b4ebbbb08bd0a03bc50b29eec474674f9566d0f4fd7bbd1a7da4ab497a12f05103b297832bc4eed8bff30b133eba5eeff9025210618cc0d0bf6360128426e06950afd76f6c785b7e9450a4a31620ecb50cda03217018fd64a68bf29cc71cd0c749cae31d9b2ec6297592a4fde17cf7cf50b7c3737c27bcf1642c40fc0ed0973de0d70fa8370fc5cb48dbfde0b3ca207ded2b0cad1309ea90b8c170ada245a8aa11914e4256ebe7fa1e9f9972891555732a2dd4d0a3c1de7bb22b66c8653fb70c8fdb40f80b4ce0c6b22b11acbd8d9097db493bb4cefd30af186d4bf4009713b672018407ed1f5e9e53f7fe1582f27b53b90c2596bd93ee0627dad44af245130260b366b8a3a5d61526a12f1dea22f7bb68b5a7a8866c3aa5368e63ae30f8a53943e0c908281637d46f8391aa53a90825befdd28bf6745bb3f2f491801757c9d01dcb4424e5a625a99137cae20532fb42e6918cd68be42518105a6bab8fffaf4523ea99044faf62761dc5d8a8e0d6b891a0dc874897378fca5698e32c0fc5dbdeb5925a4f1dd3d852523b65e99c238fe9c1ffe7a0f198df06f9064b8dab5f5567dc17dd4fcd6b774b5bf7d116b19905dddb85dbd263b906b2f7104c5a840263023c97b434e14b7305121cd4a37a5708a395a98f2f3998141c74ec8ee602a0a956d701073b57e1c432812c3b078ff64b0008b04a119e48f437ce4850037820d2637328ce9ff762879349bdea76f9443f2031f1d8de097585a86bc6c73be0676515b6d7ee15a2793f4b90c217c3ac6591729358ec3b1edfa30ac7f0a92dcf1f17ad8924aea5c18bda82375b01750e6d66e10167738a10a57f4b2147b1717ca0e2b19b5976344ed8b5767512e17a70b833385cd3717ee8cf8c117a83b9dd33ac78303e83dd605b876472e75159c860603202acee947ca199caaf36e5ac94680ad3d17736303a1fd25df40fc1a16ce896012f0d690ab597725b660f12699e8e0453a19c8b9b4765f26c183d06f5e5fa8168ac33e9d45d91815ee904e192d4491e3b6f89c764d33ed8ae1a8f291b9b0b7ca1bd60c0d1a8b8eb2210e596e7ec1d223093e9d16eac8719fb8a6a92b1dfc8aca440da31c6f02b55a7d4833627d7c64b31f88f496f777ee6c5a9f68e0da9c329cc37388ccc6a8df4c31b0c1cc43955bbe3364695ea1e2ba30f770b667ee414e7e8aecd8afae612ea116a40528d75bfb2946a17ba146159cf875cd8ca54789d8fd293c4f959b6747d973b943bca40a1ffc61bb60beb40e81bb1bed7f5ec13c0e046b449bf0ce9896505c692f58d7b665ef947c69c030e36e3b2ed02faef703ca19d4add89d6aa34e93796595b45ec91ad4dd6d8e4dc59b1327c5aaf8e9ad9d98127cd948c4b6c88d5f5d24cf61ae584a244c219c7e8d20aee29ba89e5f15ff09b065d3e91c8c8076d14c0fa65ecf9044bf6cbe4aa0fd9ad10c84f3f50412f6749d1e6316a689515a3c01b95750e339eed3e0a04853fa145f3b93c3c93ca84aa772f0af4b0de3dbe183a2111db95278e4fbe1789c2a1e7684d6fad766aa40dff5b567a53efc11ce6c2abfbdefacd754b544fae0208a29235c7bc0cf5149cac2aff4094f2c01b85060587845c5aa359a798cb2a69197c7faca0067d78b6a187c78b69e12e70caea99147b8a50b76d68d43c2dba0f2715e1f10ad1be6dd92cfd8cb3b5c233ef52895d537119d8a9d6ce2589432051fcccb6b1ee3f3b751d3a779119c128519f5087d682a6ea95461b0378b3ee89bdf793b3a28d8cf3e0babb1bf6b50e9d6d0d51258f037389573e9990c9012b897cdf4414a53ab4bf3f2b7cdce89170e4a52e9245403b398a2967219d9bafef39592b94fe8c9d49c293374a1fe1a7ef7d7f58242c43f2f4fa411ee5bd7a6cfad8880076f7735f54cf44e99403b57c0d92b1a0a0d0b1e7f604618b3381753a5616a947b3c7cacfc4e86b4410274d5a01f985c2f837c99d3ba5901982f3c40cafba83b5f32d31cc6ee4888ce5c87b391dee4e353d77e1358d254d3efe30bab99f7ad599569847999640982f8815cd126aae6712ca36799a2af99a5bd43dac83c5faa5c9e1b6170fd5bb8ed9f8f5b5a4e46495dbf8ffe0657656ba92dc254c22e4ad693072045212cbd3142d64925e851c733438d542b701a3f406498bfd96d1c672181df81ad2cd7b0da8eecfae40a6e066ddb777e38e976944da2ae6d8009749b151f7e1c413aad4f324cc174411a64e08038a75afd89dbab5d16e03e656b6e94cba231f0cbe5be1f035279afc3e7a112d7b684a9b2919dd0199c0f936c3c388115423fbe4cd942739c20bc88083e5b4c4c99ac4623aa8115e6eb17b80d6187e26688a8892387dd7645d7b7acf8b36e2ace85bdc177ae6a6742e2be09f425155ac8937bdf8ca81cc8688c6c48542de54f6fd2adc14ee333fb049024d649685e6f7048e6d57ca95f034bc9fee0a381a60490eb8ce214af5f6e3d0439ba37df0d5dfb305e7b238e586c11fa1e4af4647b991abfcf8f538dbd41c1acf2656f47ce1bd37d93a86571903c376719bbd228eb789442a48d2f797f7f5be83226b47bfe8e307fb10ded0996c6065c74d7736ab93982f013ad7ca902f707f071531adbadb1116ec45fd52b1b4d755a5707ef8de62ba4afa79cf49599fd503d33dc7ca874dfed8ca0a6c627dba32e2f75bd1a49e9a58bc3de91d7249cda6d575cef620cd526ed2547ba208d4767af8a8f37214d221fb057e44bf901337f4c30eb555c0de0acff2b60c6ebc7a315338358efbd7a510b120c6af43f525acb54e052eb1d7543e8f7959a3dbedf5362ab3aeb567a7253524360dcc11f1fdf7ece95b40641f22df4a4ee9ba05d82557374e31d2cc250a187d3b1a37388c5d228d02cf95fa87276f7bd86998fd8f582906036599899af0d280ff54f3235258fa8222a8eb7e8b2396f01900cf54001e6231bd7f849ec048bb5863ab9224625e41fc811813020de6f3f39c30e33dce7074865b66bf6be379f18ab17f66deb3c59db78df8fd1523a4f95f9302a2bca614b75859f5c365e823251415a40f13a9a362201b681769427a360edaca6ffcb6ba5ace6ef3fc4afb5f121bfe8248e10a384193eb52c7ef21c31dac446a4c1ed6896e8e9cff21cb766c9205aef316703f8cae2127bbcae235f681a04f1787b9430c543ac6de571eca38cb436e6dc2552bd1ce0f89496219677e8a76fc291f326026662793430f327287662faf8486f0230a956c885a5af423af874b89ab5db45e910c1f40bea7d5471b2e453327c58f0ade71a69a95687a07e2902f9648639886cc14b4c2489b656c850e4a8197dc26403705cae8374bda0754a0ba9897fc98c3657134887489b41be8c634011ebf317450d2402438ba721e04b5e74f8f2fe1c37b4d6d2fc34bf02ac975f95e164544675f62738a2f61ec03bb4e11429778eae6e327ed28868cefe748d112148ed10d19c5bc463fe1fd55002c04494a585ce96c71b236d7a09c287ace4bfa0b650132bf7995b3e2bf9d1854867ca5aa8e3e173c14afc1364b05881fa7a4130a3464d1826db409817e8e3ea7a643cdeb1110af304883d22624a8729b480afeda0136b8f0ff70ee06816b356f3985c1d186b9722e68679f6a532415c60bcf50a4e78b9853baacc3c46281f46edc3b07a22428192d5051a8a6e7cac86218a11b3148ba0a44d7968dba907c1715c3f960a0aa6eb97331e5895a1591a2c3433333a165b57654a252fb812bc445f5a71a1015c8708f6a325d8d8e2133fb7e325581cfa93332467bad7cf6e2e6a93225e8ba676efff11262cfb8268ffba2dfea8bfec955f4dec7c9f4c0f407eaa0d63d05131263edc397f5e5154b3be1ecf855caef711caa6ac2dc784b92407c7a4f385c173244a38cfcdc200ef5ce3a2abb202de1d9ad1d2a0992be29c8f7db4d8452bd11892c5e665e711b265dbdcc250bef3240ef546b137526bc932e0228786f859926e3289727a1160a99c5baae0450dbc6491871e84859b0c27b860f307c6f638c0a9d82e8e44d1a9e2f7695d49d2887095e059df0be7834213be8485c4f7c6fa745d46b4837bceab1d2afeb35fb2ba533487ac37209d96d5ba77940a2715f5a38d3de41b70f9e439216945acce7080904460c132ca3b0b52d540ea85f3b2b60496bdf202b672e8f415d8d91fbd0d7e40099758f58206d46c0d1aba6d4eaf06a2c0cb84d21cc0b89631b9d0d17ec501281d8aa1bcf10ace40d8c08e0111c5a9752d73eef422e60ba66bc93a5ae9040b04a178714ba2fb501213b2e45fac97cca75b36d40f94c8ce424f66b32f0741ce7dc45326badbbce91ea2dc51d56390ce524b9b5cdef5f511a2931a2b180ceabe0860040f1602094315592d19904657d8e6d3430072d6451ea99c8ccd06ddcd7e1ec4c65db872e23c0b905b70894181bd3ee87e8afaf93beaeb6e2773c1cd13cd7839999a8ada43c7e202438c703c10dbfe8b3904651e0f7f0ae929610f082ab8de394f6d22e70fc0283882305ad9a644b6854f59efa3f4ef5f141278d974b6955910e727bcf5241b054c3cf8480bd29dfbbaaf70e9ee8a506bf5da34af56bf68aed1deb03a8a4df3c5dc5aa6ccded3dc19c24c5a1089198e789e52fe1dd4ee913f4e4ec433caf6c1a1a193f68c141cd989469ce2450cb4655579ba250282b47d4bbabe2840b23473384bf1f4a01128698217a3f56b062e9c9bc85bae2236d257eaa2be32f23b03b75256b18d38ad9ff0c7a87c1b5a892a20cccfbffd25795c52904e0973c39d0a4d41a81cc2bc1ef2f5d3c65ecf5915c97dcbc901eff7460818d8050df62710f679ff9b4a7938661e2bbd8deb16b30531e78af36a4b224bac3d5c59b19cff23d469c61f8868dcb6b4e5ff112eadb2bb023063b108ea4331ee8073680cf2da28cd1341aa64dd1b2c8e48cee6361a2a60ebf43541fa67072ca716bc0f3bbe715f9ab850102b5da606e03d370171dac27c61308de7fcefc3dd7caea750ba9b2d98f11e515dc2a2b53735f8a941d9d26eef849a17e73e7d8383be6db6e3b6246055d8c84679f29422feb527605a491a6fa84c7b9560161e20627a389558097142da9bdd701d9e0de525daf15b8311e0a85357f060e5345b07cf187012a28471b004146a0d18ddd8112bd738df336f9fe138d2f40f33d00932c7a431897c83b801cb9d3208102cba069db7ebe300308046efd175189bfff883d59232ae6f3ce55bd58ca53b339c7cacaa08b59695c6fcfc6bba92f0031ccfcff8aaefea4392b7313420e21fdab28b56271bdb2e34725318fc9b38d221b6e91f55e0243c5602ddbac3d8231297fee548ff9f11317f05f5afc6cc6385e44a90766cb2806ad16e3fd6a9a96d8ebc9463f05190c9e7bce72b96b0242f0674fc78b71b1883d8614017be14dbbbd71d2f35e960fa36f08fb600273d67d14e2f3df55427aa64e3e710fea3e4e6fb7ce9c44407aa39d5f83fa9f149892f586112f70a150a7347eaea21f70d9eb9fa965fed37071047bfe1567124e1f9c27186a6fe1a2ae29e2a2ee75ae142720b787825bcd25e83683de908033a96d791df7f72dfc34ec99c005271214d930ad570f5b310281b019ed0faf0352b3146c553da7be9a076a45a8746f1f7658b5f257f4c78a1bd86f12aa735423927547c3132e1ebdbb96633cfd345132627a3ee621817201906626b5e193954831332428928f5957824ea0525bae8e0e5384c9773234c44bec6be58bbb2925036ef85cbec6522e56c8e6c617009aacdf19b04bacaf31e2f90984a729a24415ff486b2d88c256e3d43553d4d2718656a1f2932041d4b0932a6b31726a7c45df46ed8818b4ee8382e7721df743413e0228c6d74480c361b6a1ccf9c2a579a9b9c6fbc4afc2795f030af2bc304d1cbac2100c58fd6e5cce0bed98d2f53aa2ff45ed16699973245b776bfa11418dc6bd4acadfb4b15f3eeb2096e74f17a9b3ba95fd25a20b239d4a90dfff55d5fcc2586b9026c47c775a922c4664d445fdbfb858e8722dfba2675ff98941e91283785631e3c904c5eda9a80e3bb50c1eaa61b22fb4295869d0660f25cf31c345a65082729fe0e6dbd9ae744e61bce41f486869e6892e21c3a5c452ae871ffacd5e8d5261d807ddc000e878d9596de8cca33f013ad1a9744a070e9461b8fd4c6aa961571e2e298f0916a4b005157fc038f14951032175e769d850d21021b1cf55cb3c3d526cfbd95f3385899a3eee97f0148212aaa8ee5312c59f40d61e019eb1ecb21d48f54d8e325427872c5f5f1fa9eaebcd3080058c75287368eb573684521b06cb73df4a450dacfd563a285553c7dce91f95dd06a134a0f8a5ec8102d2f0a8dd393787ffe681d2f12c62104b27aedb440a8ccca06ac28732dae51c0e50dc1e099acfa14291cb3312d64f015a3f1cf579cabf94140ad028414890a86e030ee0b5ca6eebe09ac7ea277dd0b5070ac3090ca90d29e3dba9b771b2cf1328077be632e932cba734f4d78539c217a81ca4c0f27d5e24ba5d21d637ae2a18b3457866bffd033694f5cb864eed5676331039d57fdf7fbcfffc8bfc190f0f851755ea009b341a7edcb22484c4cc9c9bcbaf3a89896b443fdfae199c4432df41a56ba8e23ed66efb0b8e7c4883902f00a5c390a115fcf83d320b2f3b80175b1f6474d6e7db5764bf59110e843613eb55cf0e98b3f9b5e90401d5f53a9e6e31630431ce06ee6b767405d12d4ad0325c79222c3c619503443fd4af27cc1caeab70e7526f64d3f991c5717b93411716cb69cbb30f001fa91ee8c570753d407f46703f969d6f111158112aecbce8f53c802cfb3c81fa27646dbaf958577c4f755c560cc7a4367dd658a8d4a4b58ac206d1c59d38dde3e2ccd461f5af24ca8fb8573c0d25f985c5fe3d45e96071c3ef3b24f7c5c58dc1e4445ce76fb19a63ce445625c55508dd2a59e4346fc76c75747ee4735aadec7f1a928c3ce68d144aad01a33378c82eaecba4c7f1b3f85eb1489716223428dcfce70e7cfc8192c1be7bf0e58aef6f587869335cf6486371f119c3a6a3c0cd0aa72dd4072da856ded586fe01209df61ebd30663ff0da38107b6be585d7cc225331b07b03c127d2a4e77655eb9cccacfc11de8a352e8b8f3e62eb6e5dd55b3eb8cef69378e198ad91221e795cd55baa90f11e3888b38838664ff6be1f1f8cd7ad689db4b8590af65a76959f2890cf58bd6a981ce9c997cd2788c172ea07675150296e8a1ac3de16480cf5d835566182db667f80d2ca084ef1527a5b6c9177757c65dc0bfa3cd9721708e43208c5bc2d7b85cb471b791975e6eab532eb0fdbfeb72fb12a4175af115202ae6e04b7d526b316f354ec309c8af7eb4157a010faba9cee59ebd8a2ad56f9c6c1099a203348bd90c70f94d6996b04aa700fadb38688c073c81fa128cafb39b39c700934ad2bcbedcbb3812f2cf5c33d3f5eaa446cc55de267136c6b2c208db3ed5cc7c1a5ad1dc813ae66032c0bc48ec1507cc471f06582c27ec725be1c7bc4d7674bf267de57d627ca1fc8ae25c8f83a6876a516c5ed3a95357ba019e298fcce358e74e846a2f732e338b031237b992df86cdb26ee227ffc825266887e795efc007f92f17295c672f2a9e647af323f9ae3f2509a9a3c72192f8179824f693d6ee11e57add3ae60a7ea7994920561d636ca26f7d36944f56393c816f0cd1c33814fa5f22df92c37b9b8c90db1ae400167fda308cdcd74e3f03bd343f16cdcfb668fc20c95e95f914cfe29fb923e99efef97da1602fc991af97ce56e8fabd90753958abe449fc4d7c1d34229fc4b0ebb0846bfeae62235a02ce3ab64311eac576dbe1bc13d774d9771548402b0d34bc893158786693ffe8dce4a99e4740a93888f1e53afa8111997e03a33305783d7645cad9bfa32fc5e2ea6be5c33efa8d691c444d4291f60a4f7e81f9a92fc9192ea5a96ab05ee1a4269d92db896071c6b0300659818624accae749ea3cd16067c9851ef4fe4d7d1cfb15d3f46fc118983ff20d0670a00063effd34339935d9f510466266392ea8af8800bc0564e80378d83897ef2d602362a08668e9c9231f3b0310d7f75475fe69efcca79e69e33a471d0ea9d21c5409f3feec4fb6ca7586a64c41632679f79a48c9d51e675cb1f6765d873c4259489c47c2c64fcb6d6b825fba2e1da23bdf949985ef1b0f39885ad3c3090423b117df7c45e3ede4a0887778e082c45ba4c1c0955633dd6d4436c27430df638870af71ff5a39ea81619518cedba0690d45f3998402f441b611fab06a68fc9c0efe6fe8660a64ece3b39d753e6554d3af617a8874516bdf6808ce56677c560572cae5b10cde14107f62faac89f63b40b0b8f5f69bb77fb42cfa9bb5ea67e60d7fc3095aaddd85d3e8f8f3d89f23bd00df697922151a3e43ec792c080698b167e5c9911bed8a422c04499bc9a69a536df9767fe174a63f390a5c393ba416af9e43f16b15c54516f5f55797501b1d909dbb418e8983159e5bd4903c637db1c4c8b5c5edc2bcc9d7a87281abe923790b65933b6c3648b8fad06e9f3e9c0460dd0649569b3c3bc832a3604cb41678466fabff0b5eed0b1ff11523a04c30538897ab261374dd09574e177079a8d04c34e587489a952c6999c6e4947524037bce83dc08dd5473850a9166393c24a37b95246981bea9c84521d7568dca7955841f2fd7afdd0170cbbe334ff98445edb2ab620d79ea70eb090df8517f6f4bdb8a57199a2588476bba8b43b1922400cb498e6ecff4818a60191de74905d3129f916085a42685a32da4afd0539ac971fbae4725004430c90e42e4ca43a1466c7d69d2ca732e41eb274dbb19dad90b90e105c90b70b6b683e68594d198ad556bf7f99c5c1e2a84197ac09e773275e57637b318f2c70ff9bd2afc119c84d1def5d30df08876190d27686faf4636328943b175bd4ea00c001b28f4ee35edc7aa25b7e9102b5a40c9937622f91b2ead8ba2557ff26bdf93f077348b2b93b9e0551ab7a4e77bc65c4414384540b4aa9ba6471705461f9421e27f92dc7ea3a1e96d58751dd08736824ed5d771eccf7b2c119d29a80dd5e5cd8eabf60003685f7bc03dbcca930d6f59bd296c5af32101471c68c1321ecfe4a284d1ce473df0f1397af92685711231b1e1462cfe7393fa95b057eaece5ba1a43bc19707fb7519bd1041cf46b591adae5bb7ecec7ecaac889e009664237fa8f82dc8ecc77b0d14eb84ebcc95177dc6d7c9e039db81ad93b377e9b070c97b7ed6b1f80b3d00c06da5912fe488ff67ee4b30bd6209855e0642a1793a5c908271c904b7cfb3158bcbd8cabcd4015157485d8a47a137323a0e49b14643c5f4100c89e803d650d310e595293aedd6a8516bd764e187e9b9c46a137da1695bb20233e36c9d74780d06bb243759911d721c3dfee5567d12c183327da9ce6ddce5210542e203367b163ff4a7a0cfa2fe619f6e6c32cd2e3e48867e075d2243e45d9ec84b9d1304617bf56d371563671c4e1307a8a49aa326eec8f191ccb6d51df82d57beefc61c4d13aad061ba937e39305cf7f7d8e43802f7f801ddc13240231a161e5c49860cefd8d54e6f579f0690323b372445af784b42c7c7d825992c2642cacf1f00e5bfea333cf94e1da208149ed747de6c545590cfe59f6b0caf6031c742111fac0e47c898a9a81ef790cad9f468c9cd507a1f1bf4e4296537e79ee58ec09c06786e0d3a934729ef14ac97b45be287ce31be06206ac67377f83876195c55054f655d2212b9b1ec6ce2ee7c98583761ac8bd75c3adb37e52ddd7059b50f8a890102561de22161a5bdc6c133c93af7ae7740dbcf7e015ea6767646eb074b5c81c9666944fc6a0c106a35f34f51efaf281fb0163a0514d2c28ce93712db5f1a4c9fa5072994f819037d64abd7a68e18cbd790b0f9d11e4e63fbf363bcc01f10b7bd2c77813f089d3fbbd639e22ab326e569a8f97e0bdca243c8eabc086e229b9892a262c74945e23e34e4eb3c0895d215a000230b0a527027a988f3261f24db0d10e0e9c3755f726db3f99fc8c2318fbf792378cd54845083e990d326120b9d8547a4c945c2d1436f5d3125aadbc59a0c821769fc58ea13aa4c50ee64407b2e99baa1f8e887bd49ba2daf7cc70de8cac3570864e20d8ab1922492faabeefc35de83d31b67a49b964227b8d912ca79dcb87b771a619cc9bbc4b897054d58e5628467fb7c8ae3d589ebde36101a3d99a0b10b8670f79ea4b0562b31a5e0c28116a0eba12b1a03ae2640a4af4f76ad336a3b33ecc3127cb7cafc6313075e8b0281b30cf99690cc47eef5a5cc746befcdce4ed13185205d608396959ba91e0fd23b4770fda1f824329e3c4e0cfc7f7217d7a4213fa4572109484cf5c29a9ee7d54f46a8936ae5fe1cfd02148dd9264544cc7b16878626c84895d11f124bfd6b5aefae1d4a8932a0acd86ed12cd3c8f4b5f60349d98d3f79b957f2b16c01ec898dc2928c57cfd15a9668ce68b55269622b7b2d71754f303c77cace7453b75ee072a1d7eb52f238fff5f4c26f6fbcbe268f4bde42dff7321e9087d01cc99f73eaa7b14730bcc421f78be1858c7e58cc9f44e0e0433883c13552655020f198934cd4869a5b8c2b129dc03b6e73d055c8c9942cc49f398e6d2cb4a78b911a4496f5c32604bc72290074aba2a92711a8e87444551355b01d4f83788ce3f43df489656fa385e5f429a9588114b52a3fed1120fbfe36b3fb62efd9cf72b2bd974803dd8b20d7ecadd491fc31725a99456de1421a9e2058869f12c419e768c815d6935f22823cfa9a0e9d5e6a096257e5d65c057791da6f778810c9141673360c3a85b261e95ed2de6d0314008ad1c6f0d6b9ac594ec80a8e8c718b326e3cf85480b2af42e800af7755b834594b427bc51d38287adac76d29f6644865a8ba4a5f36b27771fb071d26d378c002e8dffc80335c9b8ed664ebe60980d51b2010efeec2b268e1b745b4490164b0085d156dc02835caee38e34871bb874395e6855274654a6f21e49343d1c83d04fcd72038ff1a87bd5a409187a39bc44f6634eccf9ca1142e852e0b3c0028b4953e2dbe1d60d5eebe26f42f39f58889c4e153e38bc2bbcc31ce0ce1f73c2a7d4cf854e59b068c2844f75c3317ddf9370893aaa3fc981a1fbe6f248de733c6b3c3c3c0e559dd8487a3abdf16789e434a15ab9e8038b16af0d57e3aaf81947fc9848e8fc98c8ddd734116bb021088db8d3f2b6928be5950898666673ba201fc9246d4d1645986279db59f12c5000ffc4646531f50559ec6d34bfd4927ad43d807e57a47d6b57cc725b18d4dc9d0300d5a6106125d29b6a935f31e4c5d803785f7c233346628cd3d2a0f2d6ee89ff299c172b22f4b67ca55bc84670313e7e58f2504af4f2f4cae701acc3a0ee3ceb6e33c3dd8b048904329a4379666a4698540c9b1ff5dd68b76cac75bf6ce54efb33ab7f34108e14c5c078bb45bc8489380522aaf4c3bee4e909f6990de1af2cf3305ef451a3291683bf5389ed5a7a9cc2a21b41ebbad78367e2f6e944454200601ef3c04870f74058c93617c48ffa689632aab2781b618cd255bc3171f6a3149f1d69ad8346a3a1cf4ba0d94a483bccfd138577777b029eea407111b7785ae05db371735fa6c661b972ba4a4b36e3d148d27017293ffabc6b95730f275a4417b3778a26d14115a36732649ce7bc151fc8cdee4edb1153d073264af031eedad118855255a3df8a9aea9ef5cef552ab67b710cf0ed6dad7e0add8d13c86183024a54f7b04ed198da401c6602478857ce115303021b617a4d3602fb7253a941f4f5680a0c23e66327238a0b6198b3d9d45e35aa5fecfeb163139a4fbf8574052bb4d5a5258e2fc1a43122933630be1372585ea9b9c307a2809fad29b13cbb20a96f926af4e71cc70d0699237b0527743865bb46955a9676e1464fa3cb17eb5a98ec9480c5c1c0c778e4fc13939cea485914ee73745e4ec359ba13827957913c61a8fbb6aedcea6aeedbe880a882639617a5e2c30298c489554fdadb6b4562ee0f210d4be0e09c0edbde5a555cfff276e54206777a75ccb83c60e8b34ea09ddf1774f8d4cc3b0e09fd007f411d8f31b03adf76504091790bd3ed69a685d1d2d5ca65dab20db4aeda686e4d982d14ffcef1144bc320d736593da268b839a770d7f0f2d9a0bff62233efca6d8eeec36f704f85a5c5fa02c8903c1c9dc9a4e7e555761bd42e44eebd3a057fbd56e70f0ccdd6f7f3f835ef20a07c530aa4b460aa0346651a1ab36162f54c0bcfc5264b246486ce31e3fc5816a2f3c85fcaf1a6fd5ee544ac255c964a6ac03c3707f17ac910a4052174f8b47bff5624dfbed8e36739c823062ff8f3a2435922265066df5a237b572ed4fc4e9b2cc17532fb1c44840fe1d379f218b31294e80ae749822b6e26d6c29e04be535087ef6c85cca309283652a445fa88271b1aae561a116cca34d44a66ee3ca4f7b7f25019e93811a139d75876f9fcbfba4116f2a14a8f5f52fe49537e806714422a158f71cd124d3bdbe471aae9cd1bf9a5c0d2e120ad34dc9287d84ec7958d8bdaddd8b762809a9084a079d4df6b68da3380c397e76e2dc0cb79e09412ac3036e72b9123ad7afe06a222cd03decf2a4a844b73332d61128bcb6396524502e7b1d1fd03ec8e1adbe1d1d88cdade6d18de1b7136e9e217c1b1333118988fa54ebc8dbf0b63c7f1872c15cc201dec46677478e830d480a2851c0a686191304560eb6b499a94726820c33d1866c28107f448fbaaed3fc824563af6ffd4d6a5909771d32fa60e892a2ee0081793825ddce62f8c51e83ff50d4d9d96181a7d1feb47dae9319c3f0d5d4c5471bd8d34f686012ab81db99f8ebd6ecca514903bf5e16015fd52ebc3e7577d9668528e36f8301db74a60f580f06950b3078436f20716d139422e006b31ab46fe256b37d7f732783ae12db5ae1a045ee1e48f500c596928e1ebaaa30dfae54626b3e14ea1df19e99cfb03a56a5919195960099ee77d9e11da617ab7d017e33245ebe6adc2ae0000d97e40b3817b56af118f966923ff0fd9f9554e54a840cef684c6aa0b2f929095f61b3d4f1953542427a7da417fbfe17a36ed060bafb2725c587cac67c67835b67a731a162f27c1d5189d2c772851973e3ccc6d23c2cb85303939607f871b2de7be97bb628f1c62e4f6c6251801d21c3f82651d0976ce221bce5bc99a3a4cf8b9af81a4d3d472955b5feaabc2cff3fb1409d5155c31b10341ddb02f0779cdf7d442e69da8f9608fd5c6fda6e1128525dbb858a103ab998c1484e4e23b77bfbec5019d2434241b13db016e4b5618a4fbd8b05984adb235111adccdfd2bbb0213afeb6618c8a3a7ad6b920ffdee77f008cf09175da326bafef08d4656d26e2f3bedad375c20e26fef90862884bba3f3cac84a5e89e8662847fe9af025595a40a9f0ffe007730ae032db27b9629e1077631a382f3971186e247fa9a29a039a2cf7bfdc0a9a2263eb9d976affadb2f5dc8480df9fff8bf28c67ee745c60d1840a2a0c9f70722127d60051cf8f388d8e98514efb08405c640c97bb3eedde3fb01f874ec121b604ce59212051400cee28862eec68da6d559da772405aa75c2497bb7f34e443eb767830800d52f3cfed9ecc6a288ed2552df9dea4ce01e9e98a860683cba11e224d84607d4a317c994486ec8514e3b22d95f8b139fe7ae394d7e3fd37d7444487c35e2283c006ad32b749fedf920f2d293e1f1b738f59b6bd1b5602547d18c061d538f4e82f495900d025b6b0d3882736598796a551259bd96fb878f1c1c21f093746da2b48eda9c6175de1bf14124d902116d6b0a929d7fcfa8f79cc51291644dd5d2d54b7a9c3f57f00e312ec9774d4aca023ecbad15c7310a5215dc188191af7368407b3a0d569d17b24c4f58614ad9b7c600ab06559279e37d3380c5d237f407c3a23046aec8ab0fc9a4c418f861e55c3e9dbfe54655245d3a835d4d737881596bc2f24923aaba51b82361689cb30853eb8010635073adfd54e0270c154b133f942543d74ad1e04c5a9c855ddd3d1dc421c8b141da9fe22da034758098ee73796b8d23e4c7b85c895b24feef856f9b73724bbbfba9404b49894365da7fba09e554e8efabdd5ba2979ec42a7aa3d7f72902b9ec6fbe26a82613bd261b824ad8fd1bb1c8aefab9001295cb36de1256bb63ad6f46ee9a92bd07ea379258648abfb23e7cbea70f9ce56b782ad2f94ad014996fa4503bdd93db5d8bfe00856523d3407cd1ff01179fd80e1ffaef2c12d734e24da8d0c151febfe8f3f9ca5c0e8408f2ecd7cf13af42ff499954131ed011302a4b0e8d8e3ca0f5778e7f97cbdc714ff367f7d58b622b6dbf1547cb74ce6aca7e79e7dc918ddc94ad035f0ad10ab76b0ed269cd9489103e50d074e4f283e17af0959d7b21257a84255be130a27461fb6e87bf348a146fc0035042489b37e221fb49680c06785d2a8cd6cc52a9cd1897bb3491cc8107073d5d2a2a18769690b6d45f109dee7d89d205d938eec1cf5733acdc2b55c95ba83d24271682c1edfc6527cd657fe6267d0e11e94da65f6bbf9ca5db0cf8e32aeca5ee4f6d3d45059811e7d6d4ad9c197fea0537e0e25b60267457fe721bf5597417b10758a15d82e77c848697cd5a9305dfbd620b75f7d5ce5724de7f5499d7983a7a806e7ed0a24c1c42177e5e0a11a3496cf99fa6e2896df35d919cd0e71e855df38f23cda0e4e4ea4d76d988178f071eda968f7c763548749ae76ad54a722bc6e038518d0c01f67e69f2cefa517cd729428f33087660e37333e22ad920d7ffeef134d237602d048dc5567c275f1544cb6c2da417066ada9aea8b2eee25cde06a423c213efcfe7c3365f74644ddd41abae12dc1c020cfc8d27e2233b219b977a0f67bf1ba12333d05f674ef31ea78cda09373eaa58572ef7734a61f0915f19bf19365df0deee030a93b7c9c4f1a6a027e2b78fe70283d0ffcf3d64e50d44f9f67fbfd5de39dbdfcca609d9b850978b2dcfa26ae66c270e4c9c61990538202a7590e92a77e12f71da3cd7a1ed854e94ebcf3f2bd78672a70965bca1ddd087d3752b6dfc17c403eca68e9f98303a532ccd073d710f99ee12c8838c81b3ef7d85313e77d1d2e24b087b0e3c1f1ff06dba5d2d7794fdfcd85ea83fb662e99058691253ee8b1d43d43d74fd6d2775660162dc267d8cc0dd40638c5ae32a8493263fec2f16f7824b349191291b9610ef66ade6764ef308b1e63d05cc0f417dad4214bed4b0540dd11496802ccf1efe42ef9b066f13d70e331afde3b8a258be942d3005a1e41508a43ce5dc02033b889e005c204717a618bb86cb5007812b56490241ee12fc0247200db11ae2576415e51a524bc6fd75272dc7e75a80247f496055795425a020d11d43a7cea92db89b600a6b0bfa33fbcc8fe1fe9c13348cc6da1ded524e56a0f7063ec61b890e173f7af362e6b477b1fef56fd38b153df3b6531abe149b445571ab73b5ed44a90fc145b859feab1f78bc4e6d94ce9b482f398571101dbaf12c74668df880464bc6fc3003a7db76090cad575a0b5e0cdb54289f24fcfd74091e5a4f53f0e0d04f045ba121ad0ab11b7c4e97cb0ab3b501fd25b75af2ff5dc0447607f93ed289d96fc2f167a39b2880a35680e8a0a8bf178c5748b7a55ec6031bbfa4a60b082d21ca72344790bd2b5dec91ac5fa95d8eacab747bb684f22417fb9b49c19ad9e6e2ade9be8f4c6ca1cf2abf2fc99dab98aba1f410d8f9e2e85e218a4a9d2ba562b04023ff30906694f9bb7623ecd2e46401041051329c4c2d00e8357b5e5992d6a2b94ec118e4768100695754296ef40641a104ffd14a45195af6b9887537bcf8adf6f067f43b58ad839d16a447d4313aa2c1e29601fb4ed37b36c84c479aa709c9d0e3f27d328074aa338b32b536c4ca4b28ac4d9adf33de6867e02d9b54bd0e7e724519d7e1b5c95b494019b14631a6cfafd61bbd246b112937ac560c404120a06be44f5cd0dd027edb44b2367c8fa8b631e2c91df9f01be832cf81cda8f02e48e86d64dc4419c46e699ae09e578be925e242011034e45d091cdbe30e63b120fe0acb3e28049afb1fc5f4c583bff4d54e16198bc3d7b55cb41e80c0acd34ea78de72bcba33bbc42b7bf9f35b1dcb60df273facc93d122092c9b66e3ad331e1cbbb96d0ad46eb619ac7da8a9e610e74f31c556fed275cfad0298e8baddd5350f36196278103d304b6d59ea3ea473278531ede583c8bf0cb9ca37f81ce68f28b51abaf495b17871d35ddd713a7291d41398bf6cff81729660c7a3020e99f8aa99b808d3cbd3daa7e626c8d52ab93d4adc797896bf9f40a4cd8fbe93bf8c4edc1377a15ff4772fe2f1a62e16d33e430c65852eab24d6af7aa2bfb4250944622d9301857b5965fa68aec5eb6d8c8fa8d16af76b3bfb2236392547ac200d0f0fdf0e366dcfad8531fa443f672c0e904c2f9df2a5d5e48fefb1b0a0f645cde67de3c7931d2126f1e1b30b5981067a81c33f3d8e3c27c3d10a80a1ea21d92850795e5fd03cb34d561ae806c463a89fb520b6df2fc3fda0f523b7d3907f4925751fd499d6c529eb4be556ddb05bb8b334af30a9170dd9e0b6ae85e17099d7da2adfa74429c86fecae7916ddf31481c92a6065fe75860ffe736cded9b222f954477ff05032d3a73fb082e17744c28fb7dd956d1d74e4aceb2ddeda8cb5bd090ca102d3895c1df345400a814feaaae48df75377abfdf433b67d9726d193148c441932d0917abffc89c46d38dcd54e8b068e67011e305c9872555529bca335e50df3fc49ac87d92e356c3f293cd4655a37b56609023d32900ee93fa75ecc5af588d5317d184974c3fedeb560001b59f15f65a67c1bd1afa6c187766fb374ea93a2e8734b4173e98447810789dfa9d4f90aa01c5902d67376f3d439da97414550397b188429405037072a6818755ac86cce5f899dd09cbeaf8f43484bc0fbdbd636614c105b7fc9a570d41f44f3ba39ff08f14309298ceb95c34dc9a80cd3b36af8118e73b264b392cf547bdbbb9743d07c2ce8d5d2a7886665bd6f438b7d6e8d874675bcbe335dba485a668e254ac79f11ebcd8735723c46427db76fccb42d9059821a20110b83ad802850f5a7df2ad8d7e3fd8c246aa082f1c755167fdd600d90e3b7622b4191b6b32128b1af809261b2e47482aea2fe0439ac0ed76ac62dc3a9f56d0e055356460ab46cb0982ead9f5bcf8e6822ddecb4cae799ad9192c618e494136ac8e627b430056341fde9d5ac9cb74791a8c9e6ad8e4d00caea8ccf12b079cc1c5d0873906067da365a6c1e41607f3d229eb5088d3ab5c3691e77eee37fd9e538b2253eaaad083ab8a19bd9fd9e6260ef81cf6f75c65292706a80473cebbc7ed565a7565b866f3baace51a55eb91a8d7ab737166f4b502cfabe97166b0d7339bfd158979eb05626100159a3a5c917d8a4612c32f07dae00ddb28fa3938dcff676406ece352f807fa7af82ef08434b05b0435ea2f5faf7601efe8783666cb6c223d37c9f955f795ff6e2677c3515751e0ce11e183ea2458cfedd8f8c0d86a06ab4d73d36060470202c1caa048316b715808f63c559c57786718fc9d17f0a46783b5c8c71e68abd2c1a9161d7087e41a0750a52cdc0cef664a7d0c43bdcc9f648d96c1a394c84469091d568ddb6948344a0a810fda1878784666feacdc4e22306f62c7331b1c08ae5bba7d0efff13354287c6f245e51312da2bcb5bda877d2c5eb8e44c028ee4814cf929b78e79b36cc3e780eb6c1ea9b2cb0f273375f6a433065c427063f65e011cf51898447e132550abe70f1274ebf227243edf6f070a1ee97c9a320d1f98c7c8ddc38db2194d7a528f97cedda7655ae31b716313b83f9022f4d384512eee9cc3966b540eae509cb885f90bc0c93090ee789a795487e09c5b7bbfcda16ae1a8ec307fc3a0b45f9544f97a57f99b2b981723811bb52adad15512987a58ec7f8c12fb1b3ad240393a66b475fc27e2fef9af22a73b00914a958d277bbf256d0bb2dacbeecf1204abc90f43643890a3cf098c2e91f624ea60d3d536b1a93605a477605a624c17489fac6ae3d348d34d713f774b457c81a19790c4a3d975b0848e3ebd216251ee9d0f8b27326bc1bf1f207a625cef4ced097ab47d094b2410e1bc79e0160a0daef51a9d79d47567c5601ee611762ff5a4a5f7bbcff6adc3c8c66eb7a84d2897497e9f511d9da024e1857ac3aad8877b14d3d0bc702a44494b5346db1a2afd3f62ed0afe43ec3b063d0fd10e00fd18637f23e6f5a9cc1a8bc968685218852785d5cf195b68795489829c99e5a6405058e9a02356231927813e3e0ffb50bfa82ee464ab5210058c625cae2ab6b4ba8d793b53f8fe015b267ffa7da6dd1059e98a64b905ade3919c02471269671e6a670f5588dc0dc34cbc81b21f681150cc82f1e1ec4e6f5eaf10abb838832b09ef5f04c6b4b9775c6eaeae7112f1626c405f819ca73f6c118ccaeb76866f1fe823a9b6de7147450d7592b6593fb02f62791307865ae9016ada1422d33c7f3e715980662b2e7de8d307d8b526768bd5fd1038d3e89daeb708d0717df663c24d1a9b37f7760bea99691a92070b98aebace49f00e9d96ee24b2530a34e01a007530d50ed832e9db5e593e382238ecf5268c9c0b139abafa02fc3dae30ebfcafca35dd5480eabef2423ffaa82bdd637a05ddc3d7cd485fb8a1e38274b9f01b53c883a0d7c0a3603ec340d02b356d180eeaa1a4a08ade55f2350c3791f2a6706aebb67581b7f49c05f5372aeb98b6ca9c32fb6e98431005d7ceae5d5205ee2002fbc465d758cb2a59b83db6221b2d4b2a4bbdbdf05d908f4e1f58e3b105341b231f880a101b9457062980928a2f3849281e8a3d81d9711e3d900639c2785f29a6b591eb55fcbc8a6e7a4355fd9403aa3a26a16fca638c6f983379bf0ca0de7d48cb175e87d917cc65ab594c8369f15a998f7fc77ceabc3d92d1b0444a2f0cd1e4a0a66c261e5933017942cb1ce5d88b60b9f66ac8001725d2162c22d9f3ed7a991d28bf398648cb37c42ce40aa15f1b9127bc61c7454f6d77eea7ff91618f41448a2c6dc00f49429c290c211a105b92b271677096fa1f023f772bb6ac3d6cc05cfe07cae05dce3c26f60e54e3267a33bb1d23ea5143205e63ea852032a28f97aa92b6b7b2b3bbf363242eb363db0703276b151663d830aa9a596d837cbfca0e8d367b4b15eab7769e2481fc25d6249500d0e285e37ecec3f828a0e642bb58d1f7a8d00bd1d92e376ad4cf6c73b735855a36f2d0a792b9a3db38c19744a6b8e55767f7e00f0668fe20ea1ebbc57818a44a3fb94a4f07dad0237e9c71ad87ce6545842cd531c7e475055a56715238bd908bd19df843dd68175e45443e36c6aaeee6bb38aa2e4064a7bf8d02950ef875b84487389469cd77462c212a606263b285fe37d28fe787897ad95a083b2f20957fe6ff9190e118b1c1cc756d9d0c829047040fdf413f75a5de28b17757ce30ca2129c58bb7573809a979c027c9d78b119fe60d82c97dc99abf8bfb20f5ee6b0d91b5b7ded36ae751799b2042ce6787fbc92a6a46f8b678767d6c1c4c98d658ebd5a226f081ac8636d003b3f8bf729b207b312869ce8e8c85ffbaf5ddb0b58eac0968d1fa85664bdde177c89c73ca67e14a44f126e7b1da60cb7d9b32f59b13fd23ef722c4211a0ad2504533f7057548a9ab8aa19ed631ff063fa9337b73cb4e86b1367f7e0c4f55ff3eb9373b719af0afcc7a0f6244ff425839e5bd66b80c2a4639535e3f69f471e012accc50476521664e6713970abb643b332e1bf21292832bd5862cb1e085278a49ea84459cd77a99a70bae69d724d526974c5cb7cef4aa914cdd1066cd5473b65ade51283c9639f1519058d9a2b5d93207ae02a8094f7bd8a1e81a85ac4e64f5d971c9c05f07bdb0affa435c50dd9f44b6eef76d768a5b814f4b060c4c61b7025a7ae0835f5bd16c90ea671827b2d4903823cd805eef5ff3edde79f4bc6f8c85d08f0e37abcaed6c945077b53fd6c8c8f4ecd617211a349bba39e4fc6aec2dfd772438ef256636693d1988c2fa7dd45e3b8d2e86a5d592b53196adc7ddd5c599302a40adc5b7450b1b96506af761edaa29da9870f5611c01e64c7e9ffbad0e5d68d4c0b8f9f5ebf389e90ebffe3bfae3e23ca35ccbbecad1da93dcc1588fea323fde16ecfd2488b103c057e463135f6c8acb362c47587b5ba4be231ee61c39c53235ecae0be6b0f4e26fbdb3cb099e2528a299c2672ff649b926d8db2085c4f5d5f9515af5b904444fecdd18a477edeea2561c51f930e5a262eb06f5a1835a22868d493c84b68079033f9620dcf81c21a0e6c6120b6eca405ca66e45aa3e52645f869696c7c2d69a11a15dbf01907d7d0d421ec7e7c85db3f725001fa4111f498b9d878fa585e1b149aec34f27612f41745fd86eec7b3d6ec8d4658030cc25638f3cc48092c2bd19252ee8d9c7cf477d4fe1f3cb288fd6f355a3cca0391f8fa469bedf31d7b21a8fcbf8a24a66dadf111d3f68d44d9b7665c0461956a76c4aec50059454789307e4ecb694c36cf1175ae74f2b133f3d38cded76c0ecfa66440626ef1af434c1d40a9dfd1a90bd186141b6dead99552518048eea3b9a9a54b342f887970ab086c64b573d036889ce3276671036a1c514ebe96a33c2ccf57c5c06674ffc4eda248a196743db0b05bc7955b13bc035a82c427ae900e8929154b8631de883faeb541987a694fc90499847e059a4f6ce04a13efe04055c201e1a30adb240997732c1252f5ab5204a3ea6e19d7504bf849c7b4a546636378ae460a5a81c8d9aaedc1750e202dcaa2a86f81d9f41140cc043f04fa9b30b2acafbed464c66bdb0b9e70a4c5fe3cb5867876f7808b687344d5709ab4785516f3a2bd26d294571f4a2e816d23f520dc8ef9e9a363c1f5639627b6f17604ae2acf62aa8e7151c17c42e19f228982f7f182500f35df95853274de80bf535112a33911d44dda72ff8dc1b10358d544eadf79fe81819c2fc9ccd6aae2ad7670a29ebdbf3eca3928029f199e75b7a943f6e9be1b692276c922d6436e6da1f3629d31b017b7633aee1913cb7d7a9ef0beca247b7a9aad2291159df94dcaf7e46d19857be55e9ff11572350b6d115ef0eef0ea3a3377f4882b625cd40a44648b85ba341e956e583e9d24a3bb28524badcfef05ea6323d5955fb6277b879a3e1eadc525ef91c9d7488100f0107f7d85f98ca7431a216e636846b0cbbb30ca7706e4357779def34fe96b8d2aae36f67c661043708d60c5989774db7f03e143ca8ea641519dd99b0be8938dc6e5d44029168498f578c472ec50e81c209dceab3aa50a9e309b957629ef64aa1222fd7812e53d046ca56ff5e0b8074ba2afd2e1a9a478aadaed2af1bc743e223b74af07268dd327e00ddefb2f3bdf781e5819cb764f834f5919b5eae4b552660809344c4d9f9fb25afa8ea58a689820ff6b233ba92681f8752d0016883a662810f80d9467a8103bdc71ca6aef1a1db3d40e96a65331eaa8f573ce22b1fad21d1958881c8fe8ce28d16ba16df0d57596f46f9b84536ba68edc97c0d0d0d42d277754fcf6c0429bd1d3e42bfa4faf562c839de738afb693d9e6a548911cf3b5cc1381887546fbd4e2a29e9b054fc3f4298edb3666d594aba7e7f2e0eea671b89474849b00472943d208fec26929570560d3f3a9ef5ec14d43cb65eecb39c0dab8e1e118ae396d9ded187e543b096af20e460452e83c25fe1b90d2c713585dcbfb3b94a93e412a6732e26e7c1d67500863d08ec68a32faaf9b12d49c6b75aecd169030853058c0a4bc56d7f557e4002eef1096a184e0c7e93da8d6b037d7fdb308cb2cbfe1ffeaabda8e3c315ceca489288b842a806930c7919354182f9d3db34903c90380f961403a063baffea2cf86fe2ece6d851b8e9929c4971402714d043db5ad5ccaaec06e8d5dcdca7cd21192b77c2c22a0a51a0879ec982801ebd74e40c49d6f4984e4541f974f245554ab4e4226bf9dcabd731a64d31b2b8934bdec6fca18506537d158484a09ea4bfe083b4d1dd147a48d32e0b080ebba8198baa2f34f212fdb7f410165480828fadd3eb4d0b6621a10b36503e89da493a1aa530e4b9e0ee4f23ffde6a957e2d67a7711d864adfc42954c736239a9d0abacbbd5766eff13bb5f61e6008a226a646402f3539a9d5531fbe120f8fcd852aa21cdd837e4698fa17f71fb0d49d1d8e1a364cf886d85b3b6f920836fa10e0b68eac049ab7f8d0d06d3896fcc8e0ad74e6e8da42fb40640b283135b902d25bc756ded706902bb39bfc31f6fc1ae5ff3575463ea8b5351616124a59d1b5f842f0c1a9ca8038775019ba26110250b158f74cbe131fbf5981f7d2df6d6a01f522ffc3efa8f733d08092cd51a2f94a881fa55974eef433f8ce22c76eb953473b9795040a75eb3c0cf5f4ce856dc09d8cd3d1b1a77bbaebc6f5d9c7eaca666807fb65e921d5d3fa54f541841b95119df499e174fb5411f28c7be945f026279206e257282545229e9c668b5bc63879df4688fa0be969a39f718ecc3f71089ffa3a894ddf6060c4fa470c5532fee5ae93446466221334556fccd6015a13ca92e7d54d0646f3ed31b0b41c9468ff74d53156e279f176dc3c0894cfcaeb64cf77e68a3bd7473b9b02791aa9cf239058bf7bd9798e64b46715229ddaf5f6e4926e6f2c2372567c3027b1367e5523b5998e988b805ac6f1276c728dd179102cec2c7aeeade713039a10351e74ab6932a3b2744b3f83ffc6f11c2fc0eac79c3fefb8c007ffe1cbf17c9eed81800d2edd0f2bcac3879b033da4ee007f025308c34ae0f358e343c871fb10d797a2ef444d3278149f4cfba74b5b0978da867491d9c8f639653f264631447af0fde4b57b65fef2e3d97c00a8fb9c224386014fc800c4ddd25029600d1aec939f97efa3ccff8b5067aed4ee319714f46bd9810a34a8d541c4fc5ed7210c10a55932571a3d2211573488daf4caa1701df4454a61fceb379d6617c70b6b4ff949cf3d998a58457b23bf208502cd402fea0d70b72c069c9ec26621c5f93b65bac9f6f9d933790a5aafa9c1616384cf54bd89e85333c0f4e8f78f4afcbdab730efc7cf580dc9d41440f20b2df5b8d6b23956bb278e4b9b517b0bbb2394d37927c30fe84cae4075577831c0637bafc2fd49797c20a7d7c0c312ff735f27e951c2792d8c7cfc0aa23bc516f89f592dde651b9360d9922fef3748c776b71a8a207cbcc2d2d1f8f70f8ae22179b17c54f201c59734c9aeddad005b8ca62a83100346d422b79aa9ee02e7b2501b6af76c890b5bfe7e358c4e47ffd4318781b6ae65aeb86daf6f720bc6f24dbbab91cbce28d9818fe1f1eff690df94226e8c732dde9e793c3d6fc6d10a0f99ca38c179ee541b26bd8b65e5ce18fc48b9757c02d18d7658d65f33d3a93b25106d5cff701541c616f51af7815d47bfb5279bc6548c5e835749197b8ff485ef1c7c1660fb5c9a1e11a42a9da36a140026b945f1ba0b9c5bb7d35a47a000f2cc9bffd7d1a185a9d330314595cf74cd0469a1fba086b698fce0ad1c84046942e935e8bd75658590937b29b5922aab99ecaacc714fc404d66768148488e196edef18d8a88cadf66f01be809cbc76fe5805d274652ea082e067db2dfcf9dfbc91c913cf9664b1decb79577b729132ce15650c215496975515021d37688da2583450c932b012bb5b58de7a61da76436f105c2c757a1806d7a7878db834acfb80b2ce30dab1ff5eecb6c828977e582bb42181214e6946913e2a86f3b9c2e3d8967ed6fee70e26812f2a752855df48dcf252ac310f243f7f34bb3491d4a9bcbd78876217b27af27a7e17c2ca31b8d24c84f38145c7a45594977d78f98a2e8e2ddb172790ef055c0cc24fa937be15d3bbea740a24118f66d1c9b4c7e137202fe01c1273e451368a7e734a4919a27eed9abdbe133308a98bd818c192653513ba7525b747cd74e9b31a14bcb5a4a1a3b966225ffbe1c438430ee0f99b8c40f13230c905438c59bf1d4a1efe719ac9d14b0179667d0f00419f34eeebf9845c6fd5a1b6ee9914cd428740dcfa225ce6ce619372afa9dc1e9e00a434e6dd947620ccc0ff0abe0c0da77531823b3f201e13c04afd2981a5abcb7974d61e733d58b55da76ee3c1d2770bb52e397b5be62c0dfc32790bd18841df022ec69d0b394d7ecdff8c0db7c221b103f206d1f5258a3312cc1be67af18104fc1e3977d41d2771bf01704ba7b32962d493b9b9dc666a819c33e2e0adff1b34bc1e300c894a16fd616fe33544d0cc870bfff6572be54e6da14cc879a21d5738f3a6e45b7ac2ca1e0106054da117b9a3d7dd6b8cd2d2bfe50b9e7d45b524ddea2412550fe9a57aa0f5f7d6faddfbf60051813bd999dbff981fbd07b3a7723fa76a8ba2093313fc838e991ee0955f76bdfa1127ea6d65ff272131830b9a6774d860366ffa24f7a01f462b65e66bd2a7f46bcc04ae615b5139f665ba096caef5793253dc3553363eef22ede737c14a6789a8cb8585a601323ebba511a8c2a7c90318464f4da305c4c25d6d3a693ee2d5087da768a1b2a7a1f25cf49ab7b0e90afbd78318be437dcf05161188b7f099fa1d573db4f7e3196795b08d1e57ebdfd80366c8719fcbbacdc40a2021e5c8a7db2561777e9f3461cb18d56a98fe7a1096a56da4d3cc6e0ac9f61196f2519eb2b3aeb38cc622865f7f0d2dd0445d189af4a742a72066e1607edef1647a223db377cd3be8cd16d5c4e2b837a27c7c2087a2fe6f6e8a76d8afbd650e4a0d079097393885ad551088338561ce1d3b85ad69e3108df1bbeb2813fc6235277e54d820352ec559b78c36c2a7afbe246d7d846061bad0fd958d3f564ccff376327546e5af8169431c73f2ca3e2587870efa2f955011a164c97fd8b57876228982fe3996fe4ef856499436d72affa42bc7c46c987f2eee11980cf1bcc65854a91e8fdbf65c722eec6baffcc2f8023a9b9e9960356f544a703208cddb1d3426c84af0d05b01f8bee6d7d6d4a1d03339be931e2e73ea89b4ecb86ef60242ea079dd71a21e136a32bcaed2964ae5f9543edbbe203bd6e7e02a176bf713ba675ba7d6b2c17401498563c756eb38f2cb2a84c677e10fd59423c5388e9f753e236e77b281dce4ff07250bb5525d8897510e41f00c09bf081805617b3f45b6dbb2898ce1e183521d537f6ac3bcf4ce58a226bb566ba394f242dc2a287c4fe8c54c6c71e0bfc54fa26b94627a8ff3a66ab688248a6b97925ceac79216b51d4957f1dd421470df91b23ce537a139ef57f778b6082a134baafa3b071e9d9d65ddbff1c9102bab0d242bd4f8a330ca3accf256f4e0944667a4572a88f78c71aae0f448ac227de4070ff8ff3a2fa5f63a46ac12699fda6dd9eec618277fe93e81a426812176fa0157dd805479762e05b278d38d3f7ee517e0ac270589fd4c99258ef34ba0c8088ee538f192810dbb11dedbb25acaf0d926bc9ae76a15ce7e301ea8beef3e896b9d552cd80b6b01f9029167b12a51a688b9eb2ef9c4bb720f6771c49f8b300a513200c4cba60fc1d8c69a544a37ec5f5c4c6af275e433ba1a1d422f3370b9d96c8640c2dc4a4f2b4309bc368e258c1ccfd2b4e352548a186793f6be68e6be7db5a69fa04846ce38d28eabc45e85521b820b1c7aef9ea77ef7c50f5340ad4748bac93060c3decec15bdcbb2520e6cba92d0f113d5f3114e62044200f8e37a47b6213c5503700996898d888ad74276af09d7d2ecf7a97f884ba42a1594f29738392376cf890b727dd3b2f01321aa1120904c81145c3ae71786f6b5de5b61280934eb900468626a6b542458d6568257ee53d2949ea1010a02b147a9aeb9af7190c47253270da05deaed9a2f28fe941bc242e85304aef42b84475369a3db9c4dc992e345c55db0e4a60973e99062b2fcec75f421ba2f9bdf95108bc4b8ec36d9996242373569e0a0f17c1e10e30a86eae688ae5ba0776289dfb1c4ee5e2f0632ae0b68ca7124144eb0fa9c0429c99d116a9a8fb515c68429e02f4dfd4de23d36e36929131b6121c49ad7e2110315ba176ad3f52e7f08a16d2095c4cd1d1f6f58adc88a87459c000fd2541948e7fcd646ee6379cd8624962492c02641516cee16097ffa8637a77b685d38670e00d8f51243112f3269a0a9c63700d232ee5a57c45a48c8149cadffaa11e7a4eb6922b6f18eb5d71d92804b1163cd2b319f979add5d150e43c65b42ee9df20409475aa5e8c41c7e11b523326e7efcfb381add4de07db0d6e2c9c4e16eedb6804e8a59f277d2d347d1c4d25f03d1880234b842953f734499a6005542dfcecafdbaecb5a8754c25ced7e4f0143e9e840338a487aa6abf8a481ff44c5b4afc6ea113555a01057d2c0914a2c7b30f0ad5c55f7bd9c4291b9d7201424e08339696606d0abbf6fd8c4ead457beaa4c946b36f2a0b183a603bf1766b900af16fcc18c970b0b537b413148c2bfa7e7c19b195805695d146c034b837dc458ae588b66b108eba7140d5db7bf4ce4be2c5107521ca0249f29eba9454a3afb4b19d9a95e023997d66e5738365a2426ef86bb23dd78aa8a7bfd0bc3a8d7a61f509e77ad8328caf4413527ce9e2224afba138813046e91bb0a38e69c5f7b6377fbd204ceaa3f977560e525480cf89fd228382dcb2c4a138bed7cd27e4cea144d68424186cdbede0eba1148a156b2bb8f7b09ea34328a44ec19be9c4c45a85c551d07196a80ce2cb9d499a91592e5bd5280fef8ea6c696d9f0df80bb72c0ab5755f822cbaaac2a244f63af044f1e23c1cd20bac1c6c88ff12cbe54cd97b99f2b8f819d078cb364596260f06af27a9f404418c17b05a1700877c0cf5919a08e9e7f83d0c92873e8285e106ea8ab51c3f1ac5315c9abf314e8b25e1bf8e2f6ad6a6f578cadc6729df2fe65cc068d30b9c074058fd3db471ebb0ec711a19d727e6d58908641cd0bf9442458b9cfad8922dcc1f4e0615b58d9cfad0d0020012114a38f362c9b48501fbad57108ca9ba703b01a511bbddc7c3fdef6dd36a99fbce830fd8e32ed7b93aff9cc669c8d486c58e04ffc92544efbad2b0237546ab3cc98fcee54fcd81b3c13d00794fc41213e92568987757b5064e426f748465f78f5a082fa499766e48cd3aadc35cb2a822b4730cad850695db7b5814743c7c174639b62f58affbaa51dbd0a5a18031739a0fe613e891329f03bbbc00f4d2c7da79b1dcb1785980d430d6bf093fe4fe04844517cb151899a4b3ff61bb0cd70403a789dee62fab63b74cb1a2b7db51d78c170e6ea8b6a34242b14e84be32ab3fa5146eb9946420fb3caa695d61066bf90de260ccefe0cc11e185cad8598cd9a6d42ea220ffe727fd4d6979b53283f573a589b7ef69ae1a38819ac7d819f9d8bf42ac12873a3abbee2f50cef2b15af832f6f41759ffa7ba5fdfa819f536014b7e3bbc4e3086d6aad9a84f77a74d74da9e595646c367a8eac401bbea61c09d5eaf22bf8729e70cfc6b9e06ffe50628fa01be0cd84aa43f32d1642d9d520deafb0d534fd36fc97660fe13b5ed9b51681f5eadd3b6cf66f88b1514257697b1e2ebd76bfe33e1e9202308d3701f83ed2e5a5f4f16d98e7a8b58eb565af94ea84af4ce0c97c5af51ba269e1d936dbab54ed7cba93fd799eeb6d77ab6039fb97a0ffc4cf4c25ff0f04258fda63551d9d63dff2b9fbb133ef5bc4b02da076c001420dee9bf1f8b8ba8a85cb8d8a7b6098f3053ca0a33e8aa0d60eab2f9a71fcc48f3e4fb5cfb38e95b73fc7ca0fb4a8ef5ac958f80c2ce1f293495f6c045d824e8537f1bf91bac750875485444ccc5b3a08df8b6eee61b70b2585c2b91746f048584fc7f45c23e22de6df7c6ac2e2373501b5d3e159f403e51d76110af0571bb651c64d20932b6fb5050fb4b2665ed0de11aa0e48afe4899f35ee78f247d682cf67ee612e82f036f4f041873748e5877de203afd2aeccf622964532f68f7baebdd22db6953c8d9571bf76fc95f8cd7b628a4d03f446fbea26610bbc7e9202b7d27a02a9bc6d79761f8c0e7f78968ac8800d922a39f0cc444c450fccb3659f7a17a837081a74bf8cd80ad022b91ff6aa07a91ff4f8332cae9100c6e97f4e7604b8e694dafa42136a74d0c127263bda15581cd0ecc9a28469b1e6253110e5dae6a88170a48d2cf22c7f8737d6145f0e9a2d46300b3428485c137b7878e9564cbc61d8b84e5a679ae7a55aae7e0f4774cb30006ed3894a1c5b11e42de63ec5ddc2d5f88598c2347c1358c5952aca1a2542e9aa36e17f9b1d6dd0d37552a633a72e7510e7023c6ee367cbbf5076942c73f65d87248997fb8e09a508b3d9cdd8953b5e2b4560e8c69296f870e317bdad94d8ad24c0ac996541fe2bd7e08a9b42acfabbe4d806100f75006173761871c0e3da3cfd908420839eba7035f544ce6a96bdb31f8ed1077e27744388425334aa48d69e4941406195ebbff26fea98f7be77f60bf840e2d6badc2c34fb2a18e0c3c5efbedee36ce5de68eada769a143f5177aef8f93d3d92ab9179ee90ac62d1d6512509db8fed9dfefbd2748b6fcfcd27f42696228e24f50530a45ab0ec135c0b3f3c8da426667820d777f83ea8a14b178ce1dd146e0e7739d6bec8d651bc117f334c9a676ad60ab81484a36a83469c9199f317ba74061db1054eb3a8b6de7f9d715ade9a115a989dd00ddff04cd707329573de25f2e6ebb45ac6754f23ba9948cf9f75dfa458ec397759efc82ab5e38935062e2d3fb69bd2c887aa837572a690eda24e751d9e3973d8ac04d29a40d042bf9b7285bb2003f08024239e8aef514eb646d11db194380ecc508f3489c733c79f736c1b422d1e04131b1338bb644a3c596b6cbbe1378017d2206887f24709be0cec3c665d7cc062d9cfcec7c027e527323f58ca2c2c1cce61d668d5d304eeaca6541df635a86362f1ba909222d51e9e09964bcd64c97fd476d37503063d4f5f3fcb9dc0fd6c8d839125fd21ee6a559af1eac2d6786f0b41563c96fa96e778b9114419ed59fcd685172c3735d8fa136882f0a7b6ee6a55823fa0519d2df38cb2ae75d73a684a9036f94d4e1f2613c1aa3a4cdef69aad2c64e654da899a01bdf44962296dcc9a5fa0742d7df3d1bc2286a1f796f7bd9102650d07d0e0c908ac1755297156d83922aa70ec79c5bff6477b720d4488d704728f3306d0fc99d119a12a6300874a4380d9053fad378814253c21f75bf765ceddf19a6a7da254394feae20b21e94edd62e8266d24d4e0e47f0d4b8e1fcfc5957991abedf6a9fd61c857997338dfba3324920d08f31ae0fd5f0abefc9f591321b38e99ee0826f28e98a659c3a66fcbbff18ed8de5bd1af214fa16d9918ca0147326fb41665760556db1b89421e6342d15ced83e6066a14bf1c7a10514f405250c063002f77db527706399380ec66997e30f4948ed2acbf5c7672bedfc041d35702c126f9ee7ccb8303cefede52c5e9b1476d5b7a1ed99b1b5c0672ae1e6504a51702fbd0a6fb05cc2375ed45db242bdc6c18f7c5cd3c053281fc1f0e036b045e540abe995a77cc022a75e9dedbff0c86ce08924bd486ce79a59e1f5192b003791df8e3be85cf05afdf13797786076205c5ff6df290af355cd994e4e3d493d8803189cb7cfadbda389665e46c4179850e540219b8866185090b682b5bdb609ee066010f713282da269c8e862c6ab5f70014537863e8bf8d269bbc6e23a9e17dda6606077922f34b33be6c911307cc3d5f7ffd648aa41337d5d51177a3b1dd265d914ce8dffe36a07dc376d53ecdab6ad3e3583077d9ea4e67b680847fdf230c65954e68c4d24b44253e255a0551395b6176ad435d735c7b9ebe850593a25c5621a0207543bef31bcf87c92625429cc07d521bc135d5794f5d23c41c4c3817ef74bc30d3ca2fd80d05a2f4b27068f162438a47b017ac78f318bce5c3fbefee002878fef30a1162266519e5d7b929ff01ef9348b0e078ae6ae96c7c03f7704ba5e0ab05e757ceaee9399029df5406b6d4fbbe4092a0e3f40dfa3789e896706e174a6ae06cdb72800f2926fed1561b7d8e57227e7cb4c0e5b2316689b145bd2b74c607b422d5cb3c62b83951387a63da0e9508283f38e5915b85fe43c8344dabedf145fe46647a1d187c3bc15d4902156601a214b164fe9a2f4f9732e32811426a0963c1a8c05d27b64196d074ee8c2c40085de07b3d8b206e59a0465f20a5435482b038db6e673846021f0620bcb657faef5f6f75a000e82b5d3344980fc00f3f822564e79bbb97a9088362705d4d3895fbac792ff1aa72ef9efa13f763d329f09bdcc76bcb2227e95a49d3ce5aaaf0f421c2d2e3bb0636e190ed378b56c19399e3b7c8b683c62cb1d3e8a67ea1df9dda8e00e6349dbfc2bfcbe1396c3560eb8955fdb08aa0494e5e27617d811755437d173a01a4c335ac9d5f3c6e3fcf3b269a0dff8b26abc5c8285accc62e784c8faf231ad1ed45206d4b6f8626e9b40c7fa50966f87868071f9accb907367a5ae9be1233e5ef16928f06f86a59b86b05ccb4876279fdf1da1a77585d61a78d007ba275de9625e028308e551ed1c0bf3d75a6f4a84c806d1e21f8811032fe932f51f1a7d719102d53bb527396285fd6a455e63d996d3563d000010ce923bce25108acc016d1f574fdddb7303d7b8d8467b9f0bde44aa9a3fffdeb92f5fc14bd3ab78d7cd6b81ddd529b99fa1f7ff7aca5a1ae2c0cbc26fda8c4ca168bbba604aa7093710891a9e34a8630bc73e14df37c1e2ef55b922faa4c4b7f5ab07ce3306c95f491efb9c428c8538afb1c6d561a6b6cda6396cdd453e4ab8cfaf249e1e84a45d4a1ebb2c70ec051827dcda0c58c8218f8785afb0c4e83f1b1dd299de64f152e37984f2d31de03b192354076d4985c66ef09d3b373d5d5c7f9397a7b6ec193babcaddfefc4df26f2db68fb43f1652a5f8908bbd6956541f6b3b0f02ff373aecf63e2b1b5501cabbb8243a35cc8dad7d9682671d66c4c4d3194a2dcb69e85dfe4b6404cf529910a23aaf8559d4525c767363b025fd124b1af7f0493148a226ddfb4079dd69742525681c558f7fa127c25f09b9e0e47f1b35c22df6a14b906fc0cb370e3b44712a42d6eb9f1bf704861037d9557b44708113d7c003aef118256c0458a79a2c9da692ca7761757e5c6d803735eb272067ede9b113d785f260846fa346925246bc97e251d90aeb1332478cbe9cb8bbed1b0857700dbe94001d5356b466e1bd6347e4565d8a256cbf7bfdbadd2b85df3ff1093f66a01e856301d1ddc996e761c02f558a37728ff3dbb14a0fea4ebd79e6107cbc8c58498298fd733bf3c6626ba2f2c99663aa6d587ac06f0fa2868abe3732187680c3655e821e1fc695fef2b41d00fb85bd1ff668d995b71fa2d1a92b0e7b738c6ed795000d4c0f7e7dab74f89bd81cc252b376a02c34ab61bee8afb0f36f203eaff062870e920a23e71c688e3cece668fefc20dcb14b4783b9f848802b9d7e2cea25cd0012b3a6a093f6880caf063d68f8d184f29f4a7a91cba6b3d2705f4419d915e14b671e7b14f8a9dae2bb385de583b70af95b064a35b6a86f3fc9ddc09f9f7cbe4c0344a2118be5debcdbf6c7d692d05a73d05435338b30703430e714e167265fb56b20819d0ef51d0eedcaba9cfc9eeb5dc738bd450a2c24533dc92fd1544095877a00ece9f4743f4b2d2fc01fd4052b1340e79fb307a1e581f039d7fcfa616d29ee5b8d56c20f8d26123d7adf7a21aaad411782ed673cc92979942aec708ba1daa7c89293897b374fa855b8ae510caa16970ff44a2cc57498d9584ddb2fb01bb96ec5f961eb8fe6a97da31e63e9d3b8a1d2a720af89a33da9fa4d8cb4bdec728215f098c539aeff5f1aeaa6d55116d1bd063e1775e0eb81bde2ff1d3e96049fab839e7370abdd9b63150df792e84b6b00dc12be78b1333cf4f5d38ef35523d860b2f135f668558cb630a8cf782eef8d59899916f0d98d3cebaabea7d9ccc6780741d7f4332502fdd4e8e1f23e6f861b48034e5b562d3d87bf88bb81befee4f84849ed47997af2f878c2308138c42e41de158363b31929e9a86d92b14d3d6e777eda0e0f6437127eb08464cd24cf7fca2735c96a3f7f0f436fa356f5536df86dd364724cf3496cc496a76fcd53a34937d3fed38000a6c7ce8dcdc1e1ea4e93bec28b53638d52d617d536e5982e0a96b2bf474990cca7d4acbc9c378f9e6dc48eb262a0cb04880c9ba0492c755e209c1327dc675891a4e92ce373494a9a94f1d0ec6a777c8f71cb45844994f15e0e3b51bb82386369e5b1f05eb1185aef5a13008a15a437e6713ef0511e2e4f77fc068d9a7400f097bab61051d7d439701b0e9c986a1388c729b8131d1aa7361b317f1f663a54d1f655840d5a969bdd3f2f66a5ecbcd9e0dc514d0fb806151c442f6c5f3a403fb1bd3232c1b92e1d0e12d1208db8ffe552e89b146207a5fb2044325b969604aa5eadbd22217be1c1b43f90f83d07b68d33fd011d01c11dd4f57803d442e1ed6e242f260aeb2041c514c8ea91ca3599bf72dba002c195508f99f47cb31f8ce9eafe1de68848066735dd4074f796e07b980687fc8694dbd613dbe6737a8f5923be6bed6814becf91e00b697dda1407e34fe7c5f81b2401d5df26fed6e72f75c58dc5b19ff6b97afdf0a0d0fe42271fd043049c23b7d9fe6007492c106f9cf00a42529eda4ee951aec3f460090ee37f4cfd2ac3c92080ab668ee55e80177645c50af690f9157d9aef0baf3739c8cfeddaf6add0033718fb59864d15195084cd8b05e6131775d373ba46a7d78a6071c5fae4cca3d0ba932ff2b1171749ffcadaac20d15f57c1bc45cc08ade4d468bd6bf46f5407238ad3894ce5b3389c2225fca9be6f0102f20615b1597ef993e1c4f30cba8925ae4f4dc527383ee2a83e2f601c65262589c20bfa02504c38eb315a1bd31f78ddda2208b522748baaffc469dfaf4a5cd695c8fd0c35fb7fda34e86745a88697a378f7f7b088c631ee9f945ee4d988632a294aaf78c6e5d91dd78474891c47aba348f6250d2a1ce31621e9548831c262d8721f4c2d3306bba2ba42153f3818d67aca12188ff0d3ce566206ed6cc61ebe326718cfd8bf550b53becac0b61262aa4793d251fdd2d9bbe09a69d636a14932fb2c54564c96378c5b93fd85e752e7b00acd7ef4e1a564f31ccaf3673b2ca1a7f7b9fe8305d26e37fa4562c39473a127db309507352f752d41170044691e5d0ddbdf7fb39950c17d5ccba19c12cfef4dc7072c35e5284b4a0019205033f7ba8e1b2e050aab246fcfb32392a6122834405a96b250c69adb1eed68c0b3d1ff0ebfdbdb6604aeae9409d28d9c4ce45476a1fc18869d19277fe905c6229d1ef6064fe54edada290b17eaf6bd340bf84ebce46dcc6a7bff33ce556960fefdaf312606edbb728d2172535d3d3deca66da10202a9fb519be7150f97893e2e18835f457b689ba372ccb247fca861b0cc62a082a62cb0cba8efbdd0279e5dccd525e672f46a4728747b6b2c17c19f54be9d8a658e4f94d2b05a5761c877c0dcdefe907a59558131e539fab48fa79bfd8a06765724aad2e2aba306bf7a1ec0a5da2d38ab52250986b2ed110e676c63c60476801c1d355f79142fc17dc86785ff59f3846cecf401ae15dbec99bfdce216814dfc48e8638a63eeeb122abef071fd8d4dd98a2b3315adc234df280b9d1ed0800700e18e97876f62217485771b9f8e9b121fc976e042d852e79dc6844a63dfa436142a0e53ed9d4d1466cf04f56dcecc7aea19322f0fd18ede5a1eddb047729eb1383d0e77c531fc54276a2c5cf44f3f599be4b6ae72eea778b1d9248d12a1752091d2ff36e754ce908118ec07ee0d6ebaddc46886ecb4f518497c56a52f870a65c9e6ec63ccb46f44f31a44a5514aa567d1b9755693d2ca39a8f2d77ea971150a28e946bc6a4349adadbb863141deeadeaf4d99fb8ec694bd5df35512f5e4b3d3af5ffd34da1baba2e91a3eeead243ea81e65f84f0ba3df8a426581144c89c5dc82bb9ea3ed32d73f97cbf030f3b57dc927ee623a417216e0169656ff03e77f43c3c93a15d0144208eb046594a8dd11e3b2b1d404e56a53ceb40f3013d9a8f2d65b5bd4d52cc7564af7463dd63d0572a9f4e09b28005fcb023782c7814cf00c7770d42fbcfec5480e9986e54ce354581f617874a1bb62dc14c38279165cd723c7f77e8268dc54ccd7cd354a77d13574e40d8acaaede78d9caf7d4ed24d5ea9b28085829df1f764cbced9c5d8a7ab6251e03cff8ce5c8af0fb9436db6667c5ffcd4ad0a1e04ee37e9a3a3f479d55c8aaacf8adc2230b0e6b7a4946bafc9327bc7a5ca11047d84972c6627cd58c8435f72667ed1555a1a2f846cff0d931b3729b3630ed63a73131219259a92484a4032f9fc45bcd44135c2a4ad790a5127660eaa65b057e2ec54a2c2d1f14cefb6a614b8ea50c6feba1a278fb297af94597284d4d2dbe9315bbca0ae1ccd1690d91115a31a510d3fb44cb4065c282aedfc546444c8104ab082ea94486717d72f36136b8dabac27807a39f8736acd16543fe03c2fd113b5654a1ddda6eeee3656605d1f310a89e13ac1a1da51eac7377ffb8b7dd868eda1d7491e76806e0de6229586c2f0271671c6b7a58bca77509e732b5a5a0687cc00ce9f1664d000eb253d36b36b671c41630fc05202db628251259e2a274234a6a4e30a9de1f07f6f926445ca1603573d9a7e077f7b55b8f5e2471c5e706c6102a9eff5c0bdbcdfc718c6efff36abfefa098880e5f3970701f4be0a9fdb79d71334cc2c3011fb4c63f6302ee9847f14868a6624dec663af7a6fbeceb034f8e6a96a6481d6534cb830cb0daec16b89ffe0e0ec9029f4f392ef00abbc9afe027b78b07c96365a4bbe5806bb3faa0cfcb3e7aab7d8e6297a3fe2f17101fe45bc2c71945b80aa09d59f57f3a17757ac34c0fa9077136805966f5921fadb4a7d3c6481522885f575a0162a2898a066fc45bc059c508b16370065bd17347c931773ed5364435c8ea7d39797a7bea43f4953fe0b4f8eda3d8746413276710560bfb764a784345357ce9a08772296efa257719e196cc3080209f0afb66c5a1eee2afe58cae28ce00ff7f129c1f75801ea6029e0e3c91eeeb474c4040a0d186f0218362341611647af8225d80b74c47250996067b7c929b99a4b8f087001ef84fdd726a0d617c75617296ce855cac3a2b89663bf36f454cfe70ec8ff7b515afc07d398386e00ac8a98514fc10ef51706f49b8a7f61841fe7f931939b8c75aa82a3dc636c3c470c3d973917aabce8650625149df50e40f5ba8ed037c19644663abb4748c55901e1f70e09d572f620472f454db7f47f43960c11be865d9b68751a6fce5667f0fb8172dc988b5f90f496ac6c898d80ee5581ad56b008b5b282798de1e18bae3a9fc42dea32f727e6487713b0222b9e1e7ec0a93fce8cad640f9757176774f9d9b437a0dead33c0f472087bf0fc416a42d87986b44e383a2584f7ccda149987021bf994c99e1f10d09ba555204f6d1635cb10e4e0003ac29fbe0431beeca9f83587ace6bd910ade3ee9e09a105489593d8d987bf2cc08a964e1a947d8adf7381153a5d5924e2df16084ab6f4ee2842940ea679237840ec68b6e322f4941837082a34b2b800f60c2d095258e5ab292bb2603937b998b3f2b767580cf25c5dd486cd69de5fdfd789b7ad836d23cc78a477d68dea5f63b9aab37554b45d7657fcbeaaeb3be39562e0d344807509f2f3716358987c66705e1eb7f91bd6e723c7d06d1973e8c9da2faf6559160742371b7beaa1196e8afcfaca5c36269c8f04e517611c3044b74a1d8c5802cedffd52a446d34b790f2409f4f1654bb201ff83e5e50541109fe7f21ca7aa17290c7d6e5789f4f1007b18b6bde622235229579d83f5c8e7d848e732106cc8bc7d851e55722518dfa3467ce1d4586ad0cea29e5bd5b66be0f0e4e54191e3d6059660f04c3745d08b9885a0652e476559b903cba49f68e4ac5355e9e66d82100b4cd5e6043212b1e0f3be30b538f2756bd5fa71f3478422890cf30a07089b819962e686ffe8b1194dbe6d39b555a50369207a7af4def808f2bc67c34e7f99b1155763de9f7eb8a8b38b0255a4a0c2708a51d3fabfef84128a32f9f534b92bf740dc1077028ea2a6f4e8f9766291095e28d2f678c112b4a9d1d8fc7fc31ed97d39ddebd25f938d3434cc24eb18f3f7df0167318df2a2377c8e2e51fd9a7e6025807c373d6426cb197ff0562acb256c963557d56c1322b65b36db19de113a50e85ad9d22096a684f2688d9cbc979ff229f06d7d7bd9596633a90e19fb3e0004d0d04a2a81e7941f5543080ad6ca164e58df45ed6049073ddf4ca94ff0185dd9b224a00363ad1db61bed2346294dd09bed67b10e6cdfad1b41e22184885ac50d9cb180cb51f55945c3cbfa9a47743c63939208c91f015568266bbc66645bda05f96b754fd18dfc3cb40aee6bc42d39cba33d4f65365cd48d99a7118710de09af8272fe7a83152edc6a9fff2afbe73f13ec5312ea87eacf7e8e690f2c07b5a2305c50aeb088a7ccf3dfcd7e82fe040959cdbd1f23006966063e8b0a36ad38a43d46b87c96ab44e5eb25f34121ed2258b03165506feee198ae9fd9f6068d53db14c6ef4320d849eb18c7394e56a5aa7e35bd3093d15bfff86f57cafbf4fbab28d85077610b5a26441b5ab834a39d28918d35bf453a8226728d3678c4ac2c9c4228e543d7e8f6eac9439adc9ed068ca44145cb3e064692af63af6044f96ce45e0fa8334431b358ac10b0216c6eddf11052273779fa4a2557498874edbbf83c48a307b42f471f58d280d2d496aa9997b9a3ab1e9a0d502e896e45dcdc30dc046e47c7254fb64fe8d7ddb264d0cd0efa05b8633146f75f50e5944e4bb8cce337556e3aec9c45204491dabcc16d8a8ae97c3c3661b1fb189ac571409b83cae4ef44435773cea0394eb9da4f8c89c0c3b3b44e18fb298ba085697acb243e71cf2a5403bd1051eec46de6d39c491d680b0d13a867a4d73ac0d0ff84d5358ab61b33b09f72a12551ae8f8494d59518f3e35e3faaa09ce59e290befa9c041c4f85f9050cbc0f54ea33fbeec9be96e36717e21ad0c48928a5ea155b9879bdccc32d19c850cffcf81d51b74aad0f3d1e449cb5e70401b5272ba5d4102c52cde942c7ae9709cfdd57db37c9d4ea4d707aae69ae20cc5a415b9f0380d4b5881e988d810affdb064422f12556e7cfcadcb16f29a8341b0b0ecd222172ddd8cee94c090d7676c965523df7d9ae8a2c7ebc0e19e6bcaafe6f6fa56e9fe71eff32dea5f0bc276943a5dc9696b80158b369933d79ba10f3da67bb6b042909a7acccaddfb5b91c5b3ecc52c7f0bd520d733d47bd1641e195fbf8a8619fb8e749b12d7c9184aa9b0d1c6d796d51f24e6909b27aa8333cea615c8ca2a0544e83759a08d3599147705a25256ebd63009accae3fa99a887c9315ce70544d3ba501d0feae9fe559fac3b0bcfa51b58d6cb310ccc8427dda37b1d6e2375f9487b5e367657722d82c782ee7bf857f1e3fe61b7b4510c1ebb8349b8a091829a228004941df30187e8bd1fe4bc0c788bbebb87dc2a90f520c91ab93e9692a02b969659a5bab8b0fbb4c0f493ca4f8f0913ffe731f02c3cac07d9b20f358283b40c7d4e51d66067689a328db1aef07c25c0bbb47168ba41c7dc3731df298a09de1c3f95d4ffabe7931cf8378ff41f544e42c0e15e6d4da746acec40a7bfced4bd8fa97abc612e07427b9a870b82a62d7643d8007e0cb70772a5e249549a0e87f9fa6093a291dd4c134bb8554ffa1601ac6e46226a43a3dfe4e736dfcebe3759b9f7b317d678b9885f870a64f4915809a4a4da6611dd98262741bbb3ff19cc5d83f0cb0b11026e1c056ddb0b6b239e61665af25ff0743e9025dddec0210b542e79babe03ac466111cca348baf809b60cedc8cdef2e85bec18e7f56e66f6e61f86217f9c9452f24b087188b9813e6b34799e7024d62a5dc6f3d00d0867e91175084f742f146134a41852ea28020a5a6f389f0f748c06cdf779594efb8686d1bba5262be922f01b582783105ba151401daec8bd41a640e26a6433519e98a9af57e6f0b4cd605feb9527167492df758b4417194b5ab17033c7dd4453c4c2506bf2927584142c62fed91ecf769c42fb8961221a739fe08be0dde23c5a7bc6e8a986525256a1d7605864aafbdbb089c9dbbb26905da6442bb5123f6207c92f509b2781095177306cb60eb9b7c28ef570d56cbb443ef2f29a47dfc9b2cd956bd8179f20330188c5e98f0dcaf8d5af4ea2e7f1922381bc60986a07824287b13d3c877cda1a50eecf00e12bb7ca319227ef6843cf61ae394d18364f75d55e5a65fd2ae2bad452e8f72baed76ebbf9ed619716393679905bade3351aa84e520686fd73e0d59948fece4e82468ac02182ad9b0823074904b4bd1159e1c62757e8430d7eba0d135def685f512a08f34d826f86c9ed97f66c16c8d6f49023a274aafb6c4ee23f7e8cc42b34ac9dabf17eb93a92c01881474e808606fffbaa036962cded96417a1dd70f7fd946019735f50d9fb2dcdc946aa9e003cea8626070baf7ea30b2875ca808adb84adbef399b8cd2866b01514699da6e5f5a8a1743ad76ffb1095fac298e6080ca055f5e0f6727dff19a66abdcdb5123e7f10a52b2996dd12ce94b9115cb4cc15c1307e2fef068a2c962348b7af749225535a3fe80152c62f4e1370b7b388e9791f0c5835d9b09804f4c78ec7178128ea05a58b3090a1fc5feef0a9954f053057ec843e55dc2c9ff40d7259f34f5aee6487d6167ba8856a05a97e2a861211eb5e9b92ba4d15751d1f741615992d7f3b6ffdf5344bc70f4ff098b491189b6a560dd7a1ecc29750c94b930cda78a56baa9ae9efca900dc6b39fd829a65d77133dfd366c084d6b159144dab3389317240649cc352cf30dee7badd059b14123a2a3b9dceca4150db62a9a2ed9b7d5a28ce15a104ecdd046061ea26696e0a4f628756a739e91d910e80e3a61fee6f8a5d47d35c7fc107fa394b8b8c793960749db3a89c9095b4c46c8750f25a521d1d02370620881f351c77de362bf3acfc1257bb0b5f45051e19f51e854e81ec35c016965128c139c95c8427627b3e72a0f981363664e26359819873366a3a95515cf556ed424b89dc040833b89987f7091f50edd25301905486094263d0054f55b3701fe1a45d753969c8686f690f0e932af6b9a3a76da67318a7761138fee06042599d1b33dc4d8a24f40df596c9a6e8f76affddeb7edead46855ad87e53c58c7a2dc2d7c53be09ebe2f915632713a88455114f4acb79be5ce2a810611039502bcec4947dd7e0c77719084e0f0d9de8a8cc70bbacd5260269ef2574293b0fac600a5d66ab5344c5ffdb59ff949e0581ede44e6640290c0f76de1dea83cf6f8a499a884aa6a11ec0d4fb8204238a0fbe5e9b6290f3107478f671088f8af54dfe837dedbc4163b3a4ac85eb64f269d7c248a45c602eb89b5e68bfddcb456763f6a052dd9bd4f4897bad5c8399cd20ac12a6a938db684711805d35bf99918d86b2ff0713de615d88e47dfc18c3d66ffee1bef058120ae5c053809714af06d78100eae57462020c9dc2758d28c3a8567993c51ed08000a80a7b7fb6f3abcfce61f1e8a6b00073c04e96c5642810be0c5d61fe89ae7b518992ef3dda56c067274d9c8d428e42f0bab73be7d5afa04a3f9ac20ecd62cce81c7b141230f6f849104fadcb3f3ddf2c7015dec60d6f9fbda25711d419f6cfddc9eab8311fe4be8f66c2baefa020b5d5943b65b4439b773178f749c8cd64247f928ab143dd3da253d119c5dc0019c234cf4eb36e4a29656f2180d93ed9b6c6f95e7897ce73b560968798c6ade47d4b0dac5fa8701920739c1a7e5166a5517bd2831ef8ff907e43a54ca334cc40a101a9e2138303b40a1db0c830c7e4951a599b411fe08bb6ad9ed3e2ea364982e4e0a54185d2563f325f7783d7375de4976e39fb38a608124e428d0e48534bfe1d7b4c3b65a9bc54ec8739bffbbcbb863d85af0501a0be1a1074fc063cd1022c0008b8f72339fb8aa4ede6a9f4f79e1f3bcf5f8cace90b265bbee5f6ec9ad8d336222dc9dabb5b8a30323b3cd037d6b881c2e87cb29b9db2f8655d7e8b7e8cae7eb5b02c953fe6b9e025f0d35afb3bd262dbcdf53b34c020101535fa46528a5c0114b1810b1383801cd5fac6da7c71d3ef0594f322807d80468a9f0daca3bb59da737020c462b24eedca3e1e17831a92aff7705f6520268caa8fa3c57813e94a37eb94a42d2d6e9928cd0393af6f5d18aa3d22747ce7b080a85b85ff1c916f33d29a6b85b02cd08ade85f5e8badeb98668c3266ea67294a58bcc8cff39197793619530ac346900c2bcbf658e1ffef0845c8a72cee946b4279e0e0a32880ac8fe06a4dc27f1f7b784ce79125776de1f933c83709aacc91f2a975738d4c5ee7a68636cc379c398e5a104c70f6f1c10db21b188877474ab075d34ce49352edc7a7b01b7c55ed36734d75c441b2f1c4f0f5ff7b530d86932f110697229a1ae318940ab0fa940d541683b7bf9cc0119056ad38bc5afa0f3e306a29cf847634b16e1c66edbc141a0ec2e36f2ee174f3e86db365febeadf5faa3741c7964ca2f38b4c6dc51b8141fce023c6aa4e704c9969f2435038e5950df93a80f7d5553b899ffce0b3d35069a58c79241b5e641aa46b945fc2d36e46cec1783401399220cda055e27308ed063d4b5deb40a8068237ed015dc46b38c739396d07519e62a8787222248375509d88ea85bcd1b24b3bc8c5f2a6388839a10e166a69e47bbd4f8bf516dabb05a36d393d06b6e4bf5b21b85ad0181f978d693679d2add9acf9045410def902fca0b9c080467b4550f0aed98d649994ae3f0812007b80ae713b1223836e1a98d9e87da3810dca2e062c88344a027745ab2658b37521f5055ecdae36138d3c91d09d5e710dc24001634a87698ea52f927b5ebabb33a03e64139b256a6ed8c15650017f2b010645102ee56c4e01bd8c9c844cd6551ef5f1745e733b6dbafb082cea7397e012f35a7f2cb3b2c0feff7a70671aaf8f74be93d795520f894e2674f4f4a57f3baf7efc94c3c78cef10588086eee162346b2998a328ced2dcfb4f4a8aac4eab2e6d5697ef804de0618377fe8b50b33aec4f0f275ba889fa23e60320512b84a5614625e3d4085820b01b8ac445513c05c94eaf8432f891ffdf942cdff67191f78433cf0432b4ff384ed5013fdb325ba8a20dd806718435e0b1fb18268e9a4091b612f3789a1db449004f7bbf769d6c5d913cf1a068048d7c3045c37b83a6515b8d8cb80825e2b78a63f3e6c83deb12f95114f0b073fa94712efd63ec88c7b269c59b84ae21e81e2e04b4b33a316207e6dc6af0cb529dca9a2c7411a5257bc1917106a254342fb5f3f2949a8eecfd244028ceda4d0a2ac2faab16b8770b1a869feb414d3982cfcc76c1a31a5db95c380b29365295c83ce971d381553377a7df7cab133f3134e4ceebb3f8c61663e1f6edb7f3a5a10659496c265433a70d5aa887086fbf7ef13117e3d9be9e1af106d19090b14a1dfc4bffa56f65dc15ed3de104014695585341c477b914864efa4becf2b066013696c8b7bf7f720869b9e70503721de6c9db95d2e059750dc4d1d3a83d371c7778c828b8181bdb13c64b34639e15939bd8e12ae55686165bda15581df39a9e7bbea40118fb965f47c30d5c11a8a418b442de2af1a3698a87e4dd6e20f8bddb9757ce89f1f30fa2b0859a702eb56c91d3a95975ddafe4273a8a71e3f873e775188c8f22632c79af5e7888f6a12f54993bf602845f23d7398aad7bf68ec2bf1a6a6e6bdfcb92b9bb2abab23e61c2714470510ac789990677d1ead25511f2ba4e739dc32fb204392c09208e62f5910d33599ee7fa60819bd449b570c8a969856dfb94fd375d92cf5334d82edd6c4bff062646040077c13f9cb17c6a50e93a8d28aae42a903d92ea926e512b9babac8a4e7ae925e7b1cdce720d070417a70b6d4bb529b5d29c7b6c11843d2cec77603a9e15bc724c34285e764cfbba34246ffdaaf1cad6481407b75b1bdc9e9546500d5dde5408d48dce55665d6a184d6a3cca8464c94f41c315232c6f63e029d43f2045380f7b350101a4556c8d9df6bf26354c0d9179b1a282197424c8f3fad7987bb0d948e29d75a38bdb2d41f72b6ada01187aaef4d9a4f338386da37cbe53b153059c91b1891c53c555e63a04a09d7944d0ee508d3277401e882e98b9c55fe5f4880ae62157c62a7672af0f972fb49724bb322977574f4afecfbc9d96f1809f00ace70f1d92dad333a7f8d6cf4038e77f2437f4a8b240573b0d138cabcb4d2e652b99e60f540ba51f70b7ad82f4eb5d0b0c3d099a9fc10803f6a84edfa0bfeaa0f295c97b265481424fd3d6b11ecba3d90d03ff6a7338b4c781c63b9ecb9f65533065bc40f73814c5b17da7ce2d98a2839004b5058684c8b827be6d74efa95eee20dd3f363900bfa60f29d0e9f9732e40ec95946ce12aa28f53e65fcea703e650a9a83a4dc6c9984a1367cb064ff9cd885122c6d796137dba524b233ec40e2590ceea8356357f3626ebc6b48bd3e66835c39dc61b1bd670d5cd046616fc7dc8d20213c8e705900297a760611982707ef2e55671df117464d62aea985ed51e4fe80113836353b50a7d708c83c70d65e2b69fe00cf8ab6e3f7430c436036b03bbaa16fb96f4ab8eadd4f5ef3807ec557c2c9017cf74f7d62e3ce22289b664cc80fc6c5b1461c47419a0b12c956bd51e040b536df2ffc596a056010dd7764265ed9e657102922f6661f037053996891d77313d01a17e6ce00beabe40e4affa7d637e5e5373d86508822751738f50b0a27f7c0df120e3aca93c783ce565731c1c17eaf79313d866a324192cbe30b2c3c0fa06e125a7877480575f2909034ae0d753a911a4fc6ea14cf2a7602c5cd1185578bc06ad0760bd14c87226996f7e63ac0e14006257fa5d744b52346cc658ff390ba9c691050e497dc5207d46cd02ebab3f75b66cc05132d56ae021f0f38d9d06ceb4213d83203d56f1ee8dd4e49d23859137be28b9c102a7fc1b3651d3324788972b1068d1f362499fae6171e84c185b5acbcc2e5afb379644e5d31e4b13688a0b7540850cb1c62e067563fbf467145e3c37f28bb83e6a8958a2cbe5c03460ef2e9c52da919364d014952495c2a14e93da317a94c801dcd7d81a543c0687e3895704bf514cb69a9745bd01849fe7a18046955583561ae3ebc23d8d8f24565773c090da3bd1dd3af36150a8fb3eb191c4e0c6404ffbec456f076112ae6682708cf4bdfbf1a159cc1dc3537bcff6ebeca60dfc4d6763f82ea51f2cfc6e5f41e8ac612844419c7b9962887d7e90e84bd0f7ba940f5e056313fb5629ec1ed85714483f7ee064f29f65a11da551323a18368fcc3a621c56168d998e65d4c721b5c310c0f78099fc736fbd0f9e4b2d8955d80736bb625c30b951395c32446473628d09c49530854429dbc3a2bee38e77776f39060b98be021af556a0105fc3825a9bd313b91bcf192c17fda131617a4244e8890b30da40c9724cacf3121212a48f1663940632e17e8382d05a82569f7728ce655e7b78cd7d56967038e01f909f78450758bb9698b4a8bb4e45a4888133a2cd2eb8e0eb9d546592b11c1abe7623c6a5819a2b966f8a112f5fcf481bde17e254fc74af46296ed881af502da6cd3a1191af33420359fab27a1bf4a16555514ddbcae368dbbfdac6e6a944d08bf05ed1d47fba171a3f7be64a07fa33d96d16efc63bc2c5aa7266c5406a3cc370a149ee6dedac4dfd1e3e835a54c1ca378e1e76e6aa29df2a17417ad460d6c5ab4e3c3ebfb4469e7f5789af299faa61c335e44ff119dcbbcbffc3b7506ff9b25b6e94147b170e81ad6b634f1e566ece910018870002fe2992553d8cdbb469f0d301ef866916573b725261a2bb579ecab010f0572a45a57d32fc89ec2916ee359bac68077752649fa62b1e90f635b311043c7f54767f560ce78f68940a7979e1be4f7e018bff495c02c1e3d565920448781c8e6fdda14b94717cfbfc7a1d98eed59e5f5c3c7cd96ea88b61cb0449a602ef7a48a346a6f50995ee84748a0c5812381554a3d70f5d97ba70ee1a4c8af9c73a3011fb78cadd1468d508a90f3b8c46d985c88ebd100489ba141f9c6e8de94605dcd45198d232dde6859b0707df711dc436435e7950d4a8c10ad2e7981aa50b07c8be2f48de8d9dc1c51e7af39e9dfa5b5ad0416f24919f8fbfd295fc283ef799df207f9419579c8317671cdbf9b59d4b963d5d954a349a5a8c70f8656abccfef41e9e54b6d631e20a7b0c401a4e839c31b1e3857992e2282013e6bb87ba7467a818040e7adfd034f8f09b729a6e5083df3e7be0946d68dcbbfe2c9ac799ba7caafa99b919d9d44eb949312110df5fb1e263073a8f637dbf5f281da2339df341609bbafa194b02d973053d98d535a843fd6ea500df8304f63487d1d2ff0f99d4cf571c019db82528fead390fa41d88fb902c89d49402c9a752b160310c98d4b08ced067c7f976f14f2d9612c42ce6950a32f808a56a5405f40a2f5bf6b0d356f9fcfd1734826313c0b5031f0ece8cea33e7e10830d551bdb82c63e75b9b9dd4430e7c6e9b836e1dd16886652fbe48ffcfa999d729ebdbf35370aefdfc16cad240d95e088c3d43f74134bb50c8395afdf5a7f61df125d1f933fafe1fb4afd589a7827e63d583d356ec00c59c63eb801e81713b632562cf065490d845fa5a700d9ae40fae2a280472f3402d37459484b51994f38ad5f4089bdb7c2b4a4d67267a3c86963e8619eea31539f3e3234a71b4f320ebdf1a71d04fa640bd9eedb3c98d4d572d7b16ee36d12940dbfdb8f2373f0628d48fed546ef2fd1f45b89666a3ed3964af59d876c764e0a1e09a0fdd391593b20fae1f043c186713fa9c1a44466f98fa02c40527802546dd3d2f167a01afa35f06ce23154ee3ab0e17ea23da519b2e93c955db1a9acc40c090b025b674a8ed8eeb5370f85f47fb6a5e38ea0149639bff72f03335d1221e1cbc5d84125bc6f2fc366480b9eb70fbd0e079927f38732a75bf0965cff0d03754662605bc81ed555d3d9957c3fc2a1a3c246fcb3176965eb9801378d138ee2248ade4d2c48af79cf3e9fd5cc51310f1561d78c5103c4de8165224f3194c298f80fd9c5765d1c72cdd08208b6c21b28480b4639e80d69ed5647b3de6d3fd2488c5175a5c699964dd634d26944dbdbdc4b8f967af69a09fefb1241888bbe4e38eeee33147a01420b1d17d69e6b73c420b38974a7c4c08fce3bcfc76f67744bc513299fc6667e394b4d86fbf46db6b5c1630072fbf31ca85204633fcfe3fcca3e883e0fab0e591b8417060f45d7b1a0f0ee959abd1ed787ee49cd49a0d1e01cf5aecbd0968e9766904e2fecf8a5a1ea1ba6f73fecc3d48aa7e6421801e099dd1f2b7ddc07f2aa0a600139d485042d5daa23950e19f3f0c51f05c65c451b533d310f7c61917d30d01d3e7ffa539fe42e2b114b48f92d54cc3ae6b00a8c5fb9b77d6e31176cff69375472edc04987777a80349b07b13dc21ce9052b9aa06bb8ab101ca0591faab13fca01755f40cf3213a5e3205743d4e5b7b2a3f85f811ca9333fca024f54d0c4fbbcb19497ea46a14f4090c74b006e3facf263afc5433bb69350144b21430b956ffe38ef8163401195de200ce848bd0cac7d1b4808416531084dc69043dc994f91edc8291871d726a77b97af792a6f68c9e037e28790a063933b0d79ad2bc292c2f9b0fd2cf5853b6d5019c88b5e2be13fd4e7a5e41c77078b86f7f5a552f1b8a0d01fa9a662849ecb00a47b50407371f784bd4e420a64774016e4bc8613d1f1b529c8d622d6f23c319388b546fa5a0160e622f4cc886651178a7f15b34d5405bbae6756fcc63d0c6d78b7d1f36559e7bf9b73622de03a96fb9dba871d31c327a5d1cef2c4538f2e05eb9ffd56505e2acf7065b5d109a1b3d5ba8ec282a25f125f9dc4ac0637a709f8a58ec7d165f33604b34c4544413281c33cddfd2a5a40cc54512a2fb7a482ab32adfdc77c30ed3145dac054a51aa777b466d5dc9df0ffd3534daca7858c0034ad886b6f68b4a9cbd7f20be805b1ad0eee2b78fa7e134b7184fe843437647b2b43d32f622148c106d79d2f87e5bc9e19ed2420dd9e62d9c828c7c12f3ed74a8825e63f68ece8cf35b387b3520b4530a0fd14a157f53628b9feff3594b44a70acd7faf2334104b2dc2c9f00a9be4555898b8836fa3105b3d93e998fede9df7f7dbc657d86dd77d5f4a55562812d02e8573b2300d3786c8b86385355488d2e9f9be76f0e14ca6f1bc2be66ef3c29790b9b29ddb09700a6c2e55d7a70b3948f00f726f5df0f1fb60672b16127d51a4ec1742fe7513b5e9d83441cca26b509b7129b06a8b141b01fe4c5791671892288771829e2f8637ee5d8690cd49c2da9fa17c0056765386998c0737a076863b6e79c5ad06373e9d550a599d51bc65ac949e29dfcf21a8218468f920729bece44b116f7dd9fb4cd7b0988446b1b6c7e0c3a037fd2c0b7b904c9b43a8766c699d94ffef0e9382797646b2d8ec29d48de8e1286c266481b91b551aa905706706ff043461f7c859647e7eb156b6ed210d7a71a707bc83055353374e9a9387234199d726ce80d73755b95bb762acbba159747122718df768d1cb2aad2583fbe6d46350d26d651f37dc91f2980d66e668b1a35015c76a664b5bb0b61235adcb0fc089ca3e3b41d65ec8213755554a06b3222be1c5ffea5d2c9f82f6a23b53051237a0aef1e3fb501e64a1ccfcf9b24d5f1ea37121c059b65ac8facd7b24d98dc4aa52d48c8a9a944a5022a59f7102c77017af08606a1637a16ee4803f18e008914fc25c96e44068c7be7a59ae4fcddf769b4d83b97bb716d245398b340eaf91f6bc3b2c7ad1773f54b22bb15dec72f842fbb25988f61d82b680177ea417f1952fc8da31131fcb5237d185c418f3d0cc3cfef27e726dda1b60c13eeef7a61457c39e76c9a8e3227b9f864e5173ef6d588dab51409b3d5f156f9c02406ed1f7475a5e40fe82063411a5aa4bb36b560d0da0142b53e2d0b81301f85d2520c365c0665f78086182235ebb6c4f10c7a396f0bc1007b87cb00b5834890fd913e3b46f20d438d7c10b1c70bd2b13fe5931ee1ae1fc346383f5a6afc69569cf8b8534ddb195972570f62b7fe276d009d8f674b766cc14c7d04dbfe85412981be842729bdec4bc79b737d6c669652bf39dd4957303056a0fcd8d34ee898b034e3232c1bc724b68b22b149d7768d1c5af0dfa95066c18a19e8c58a6f753e61a2235dfda11a9cca5e6e313fc5b8d6e38e111bc547b8e7da57de0f14d2d76b4bcc863bb1ddeddafecb98ca974281e2ebd56a08782aac708c6e54df6f20b2a2a2c23e7c398f806c1d9f5cb901d01e9a603cfa73b76903240f19e85a0ffe7dd5d5b47002e8aa04f93de7e779a624516e4eb514166e6d4c122473ad9c87be653547efdf5fbe286928174b1a20937f77e3c53ae579918dac50fffc0aacaf6ad7454d76b1b901587988702faf17fe1fd6c4f515650f9a9488507a31d5f2e9d2b529a05273386d63abc367d82897f56b94b398f119e8a7eab33fad4d4f9ee18adc54e5e815cc5722cf64fdd61e60f7a30fef0d6b6541b8c084115081d64c39bf7dc84e852ba6e9228c08ffd32e29a317d9d9825793cf6dba23a7777e556893b2777fad88b5c654112cd7ca2f30ec3dcebf2c634eab18b32c9adbd87f4f092507bf4b6cf857f149ff1176535f368464bdad5843d91d6dc20125ed7c4aefb3c5d87daad31e5fb1d734f3cc463e7847a899fae55f6f1fa58c095a4390dfddc66b914ae8ac296749a30a503a32f3f1567cfdbce4426f4da29c7efd3c54521bacc31815e00f12501cb06357653c37eec6da1f94bcbd61f09971ce1ce387466ff154824d262df258c4d4f0822a0ff21a866bddb4010fadd0c5f96bcf4aca7d30a48c3af3b2e38a91d96c8f6ade905372dc27318b9feb090a1b27af6035cb210f79ee922674e626aba8cc2634587ef698072a5bea2dde679437d6c6b40e877a27ae7bfcad04ff2edd275e733698103d5d6a1c5a69e8b49380754d0e4dc54b1923e08dc333adf321ad205cd8856b8bb08d65926eb5abd5cd09da8897eb9dbe513962d6fa654504ee772f409acb31b72c5eb3caa6965d6c5e973ec36a0ca5bd135bb5dfe7c44591bb189005e2948563c3bebd37b654bf78e966fa707a41049b6081afbc997ba8ad90cb49cc5ec81e9efd4c7e09cf9eaa5f4ded44d34a9e9855998975dce73f86f17d57db11b8dd56bcd2de2374fe869d1eb187e3426c7d9ec5a649377babb25f743bcc3383f1e9636f93b1a9f284548bf1f0e82bccb372e1b6378cbfabc7a295dbc93895854a2c1c00f96b6b3cc060117712934a23e553408bb5af27f0705b7b70b0ae846cd9edbd11254a02493d52a414b4a52ffb30f36fc739b9df2fec9e1e847b3e578dad694e918282ab22bbaeec9958b992cfb5e241f9c5c6254de066529a981f4ec46097f24b86981c780915366e2f0b9f503944eec572df094cb0d22762aebeec58912fc9ea1d774a998b7ffbaeebedd5dbbd32502a0e48984cfc2c0db7a8cd0c59138b00ae3a707e8f1cf87fbb596b5df3070fb52646f4f9741cda3892031310ec7fa83f8671672254bc7be5e5d46c5591da99fb205b9360e8e625415621eeb13e956679ed55e9b2ecf78b4d9fe6932d7ebb0e894c831463f5ae6e4d65004e8f63188e959b69341075f92cf8d3e44a2f79c7e853b509afa6aff701f09df1ee464cff0be99cf2d71c970ca5bd5911d27d6f490338360a74e59817cd290fdf7478f2319e577a190c18d4f5ecec50e2e7b8fe3c325885d963fc90bd4535419483cc429d48523986b2d37a9d138f167130228a9dac1455116c65bf6f1fb8c0c3aa222b8336fc5edb6b565ce8aa58e64d808329a4876702b991d5eb36c83939d3ea0ea981020ead2cb505c9c16f995b99c65aba3fcf16386ae4b9f1724f029824341f182aa75af9ca402adff33f4baedc173ce9ea1cb0fd6e4b077cf5bd805c8545c98a976485846c7e51e2a8d3adbbb60fd180da97a561907624699457f6e200d1af560798362f93de3e3778ad946d5b80f1a0d8c835b7958d6a72b2825e17c8252e0095cdf302e7a8524d17ff76af62a6100a71ffc9a718ef63de41b892dc360100081176286174718b24ac0733005719a03500f79d46af90939dbcdeb324eacb31e1a8cc14e62bb4e55820c26bdb0f28013041d853c3d0d8424d03c412786e241321ebc909787e394abecc6ef8ef8f0dfb49cc91b2e5c9743c3e40df89cc09165eca65ebe6a64271173f14c5c42ba8c4f0d2c8f4a5ce4588d9d1dae474dcfe2b963b7d4848b6b05b442a384bf0c9d12b90c6daaaddd0214c2a1764a1604610965aa26d0c2b9b00c78933907ae6ad67c6214c9d7a04a04a39b8d1a46e08d6a07d64800638b877db44334118b27073f594eed38518c5c4ea66a5c390c42875140bea246e652b4b33f9f3ecf08a38072f7169b3a40692646ba0f9ad933a5d345c60e477244f40b6b9fa073cbfb21180b52fbe128c357f134a95fcef28f2297e260a465e670831589b7390a0f37122e2072ab1d3822d39d94a1c251398380c2805e5f57f1f2a247f1b3d56a31f20f8312a7bca5d9dd9b4466b1f25c8f4569dbbe500865a00537e3529cd51a2b921975f3333e551656e1b8e94718ed51be2c656de06ebb1a3596059e44f7651a6c5053b3f8b2856d357c8e53e0c21be41ad27b05eb873714d8139ebb3af9a1fbbfe41dfbc5c5694071c3cb0da2b7638c61b1bc1c8dfec76fbd3e716cd2645d3427e7e31e5fc371ed5c4b0d32c37f46df2fd7911721416db9b76a41f24b7d4db9a213496c4222b8016381270858b1bfc33c3cf8fcb692e5f11e2a0bd3bca9b7e6bb0893b2d0cc54e3062b732dda5547e91966f7d4515f5fd0572257a750be49c882e40f7a3b9be38f040ecaf45a5206be49d5e1ef8605f2581be1d854887129b0634df18fb3c5305f6de3970337a522ad97f595f75f7502173bbef460fc7f612b5920e85848b62fa87ba62dde0fc9bbcc255152a64131aa4ea884900a2189f7d5dfc20568c760bcb1d3ded7d191b4743ce7f1f351a6501743b9a169b30e5323187422953ce10938434b3df77a79f589b8ea3cb075ae4f484ab9dc992547f373e77995b4926b8586ccae1e98ecb61f551d94ea525a98629d5ed698a8a250116876df3515d8651daf6eb79c5b348259c2e889b37788176315fc9c8bf8e964548c5f653862950ea9b23be4c6e3b5b26fd19f82d72262c5ffd2d910350ef334b6782452295032ce9226b16ff36ac2afdb4eba79ff5f21970b086db23df2a57046dbb7fb0d439eac88836dbedb0c502fe18a5de2826eaba99af56332943281110fc2e9a7748eada47638551be98cfb590d5e7cfec60f21bb244623b92f0be7e084ad546ad2f888519699244ab30ff14bbf698cd55e94b1c0fe90d2c54e05d944116f2da5d79ef94063dc809654f109a8c575f45fdfa3913db246f3dfd9ae825677fa888ee472bd4f322ad1e42a76beb1d854db198c2883229e85de5f09b6f0cc6d272d8b1fe1f0be3eec5793394a2b79b2c131e46177a7a9f5bd8766d2e71aa6e62297397508abb80e925f7fbac964dbacf0e80242171c44f53a543d8dbebdedec69bef04a95cdb333346bf327ee86131bd3cc42fffba5efe7f79730158e1cf23ef24819caa8cedf63d73e09dcc9ce0feaaf3fc20cd1cb88e5bbdc25f56513f6cea20d48d66d9c7c27e12596c138f133566d67956b3771b9ea6ce0f0b26ffb18f327839730573d164959900b3b7b33a12d99da64e263ba14470f3914d72a428eea2aaddfd491ba3b6114b3b5fb9a27e5fa6b940e7884482ae568a8b56de2a64610b25b14a01388b7857033aff3a2ce5834382751736f06643c033a976894a3545e5a1a7b7f20ef6957a485a49bd791dcda2a08f03fb9e940053d6c3d3a7b0b906a3a6d7f758ac97affd530ab290cbb3988515e0b6392f655decf9a93cfc18760c2b0f15cdc67efc69f7f628c45bf0f09b3d8d6b33a3e54a7ece47ab468e7eccca631d2ed6a9757635f2d3bd12ab2b1439b5fda202f1ffde00754d7135a4908a3b84917e2390acc7b04b378131a3102b8fe3c4c29164d8a3b21cd53a81c37d5c36c63c925a126bafee31360ecd9897c2d2ca19728dfd1491f840a4e1a4228126223bf7e5aa58e70131293fc897b9cfb7a2f5266821196b961f26aca89a14ed4fe814bcf34f6445def155083cc5b41b97132052a6146bc5e5b006859e1c2b1fb7fc7ce8085b8d80fffdd2a3cff2f2e41765e7b2584d2ec0297a90630ef7a9b4af99337e214f4084262f28628c4b5cbd185a74b2fac31fde93121547becee56d0a7f65b9d4dae8e8303830ecd93312770701d61a53c32b68b7b8a0791ff487a79f0e5989d549f444270e4a6ba5134bcd263b8d7c9045974dbbe869eb435839deb9022db651e75fceff4e206ae58ea6d72a28f9acb9f8adbd0756797e9c99d360eeb53c17fef8b53467dcf20827f0a074926ca80f8453eb1a899d1a25a5cce9313c8e99b65aacc361ea7cd1b6b9b2746f38863e5af1fa16151b0ab8cc5b2a03fe1aa7587670014a20174fadafbc4c44460454b552b3e0ccea2b857164568bb84d664c4d866a3426a89713e9f7c7865e13f61afbc821ebfab6003e55fcada335fb9a9601705e026c2180295197475df63f9dfffe6e8f1c8f5af10f556fd4a2f7ec9deca022cd8009af7360f467b9c3235a6c95bac7da2c52482b967c944e2f6697a8fc609db49fe6d7179b8035d34a45cdaf96909fa37141195ab27e94f2749f76631fbef143f21a167c24aa251c21620b4014abfc73f85b89951d91c128c534b7163a8bb7766c72f5971cb5482c7abda023368b48eaffb739a7fab89da550761a236c197b41127e9a2882e07e776bdd3de968b96b4d1212912188abbf5701432c4246e8569a84209440c636441f89f28a2f03708548e0e331eb54e5f4651a1f5a051bd36a55e7bd894d538633f666b54c7b37f67909198741e8ffe85d73f10bd1aefdeaed7faaa64f34ab95ad7545ccb9d0d5856cad5a7f1e800bd98521094ca4a33d0ffb189b58b30d638f760ddbc64d07d7abb9de269e9184030296b756936f2df25778969d920c5043311c4907c6451bf887f4e215787c75e89423fb92b8eddb4d9bc33f674aacadb7f877b37bdeda65f110ba7cc066bd950d0fe1de6de668070c0f5337e512c312c9c36cdde6bea2df2c6573cbb9bfa5ebff4da7b9114bd1e63a0bc5775370996eba71205426f3a1030d348ca5f866bab79cf29a8fd8aae3f882ac8502ec272485437d9462fe92c0f0992d91b1fbf6bf47309d00d859494e36e663a72f6222c05c981c92a4eca80d8b003b013622d3c76d9494dbe1a8cea3829a79bdcd1537cfc9c7fd81fe6a6b51391e1aecc4d3352bc6c2a01d38a82b0b92c9bd2a664a089eea426c3a5773ce2c4af3e74bcf9de837cafca836364c210d26c81581ec076aa1334ce1c9ec1eadcaa2b6cde8b02d4b94006521533eab83effa3bb82cc71e12073975edbc9ae89c6f1840373d7509dc99a770c0137cc1846e99111b5b41caa3f047e8963ecb4427a081dc6fd624de5fe4bf8e80077ab068b395de87266b845ad0dabd389d0f5939a2286fa2b26a94a8d182a26c236339c7aefab828579dff4d0d52e9f14e67f83c0f0e55530b1397a78d82fe81a31bbd327f9e0243b1d2df8e2a0aff1a085840d93e73c6868d165ceac60398b68366b45fff2f624aa40d07a90a6f546860e77f7c569586d6ccc4af0272873bcf6f83c5face3fd5544c186f7ca29ff5b6cabc58df45e75a04b1f924b16a87376f94d53f19788d72427f6e9dbab2044b314746f559e40b2218073d0b617ff3d89cdbf53f6e551151626b780ab3537813d54ee84a11fd0ab904c2b206f88b6777055ab78bc50fca66aeb33f471b279a98765baf176205ddeb8d199c2fd423eec1cd5f79426ee1d612fbb38693a8a45e5f230d706f4e591f62c510273a977c5cb6410eb5d0e14c77db8ad3e43a07829998c53c8a05a405b3bd6bcef5c512fea5809cba90b5766908c9c70967da229321326934293458946e60410e354c6431d6de68611f223e4daf879639b2ddfb8b91fe1f4041f82249a0de88fcefbec301a969d14d354a37f0d0f6cd281845ead23ebb2bad431a0d85a4973bcfef8c24d6d9b0aa95601d006f3a1d8f2bafe739f1b7148d9b009c29157d0dcd7db96296d98da3ed2c46645ba296b174194db7cd9f57a10725d0fed250f31e28834fd5ac6e2b3ffc6b7963fd962d6285c66743feacc274776ec0760ba689989025cc8aa4aff146333d7035fa4c9ffbea3b9f36fa6d58bd4937cad686fb921b025157d31d9cfc82ccca1fce3372ea098c6c73bef3ce4b66230aac782fe307fbaeb1af0d509ac311a116dafd86457c15cfb53ed56fad70420fcfc2fd0ab134994859c3da97e271ed466fedc2e758453f271d6c1d667ba64654c4361b2b0c571644848040fdb1a4ab39949578e3cdaf2bd59bbc8e06da936a8847ff82f0c623a106c58df26df8ba1dd796e507ba6d6137f687bcfe7832fd9979d4d54cc9ebc1d424868dacc5a48aad9cb887d691b3f5a2cf209f2374a6270f11d2ba80e70e36171449c0e21b8b236392f6ccd8414696a8d41bccb6e8c7df5a84ba1593735123dc9ac737d4612c7834475640ff8ce10eb34de532068bad4e7ef0b9438fd20f5c126ba2fbe6ae062f833fcb07a42995421e63efb090a278d1a42a2a48e81314b35cbdfa80e2ff829aca087527b9d33dbc138f58b61785d088dbf5504e1835185740a5d6d68438babc6f8f5df96a4e044a1ac8957c757ede84648278f3acb11071a524fe77094abd822aa3624eedc7dddce827199b719946d0915fbc8f51855596e8980f86dad1eba70460dc182a12764f67a9e036ccdf858bb3dee20627e59da7f93986643230b82f7cdd71cd0122aa63c6827b62d9ded51619c2e4980615ddd10a1b07ce03c58fdf2f16a71f618ce9596edd90bf2b5a5519ce0378db84d36ac66eb3c758a4165f46399c9e36600897f5a45fa10109e88f3dbdf26c22f0abdf0044e33552f7bb065725a025180de443836240bdaf55dfa076295180efecd5d4d90d958386ba95a851da3022b4b7427cea99612b92b6706ae6d3073511cfb5e46b4ace93bd5e41166598fb0397a4fa1605eaec26f4434b36042889d9eddb72706df2db4ccd4e40f598814e36de61bab54b2fad35942ecaae8b89c56a4c34b1ea9ceebc062a51e80a02cb609e5eafd1072f378154a3c60850f76b60bc98aa3a35227501688cf94cb9f59d458a3988b32a4ecaeef4c2c2b6090b2e90211c458f49f697ab12b7a5e7016276646a10e9a6abf9b716e053c05ea729186384a559f0bb9c6de2b23174a421de24ef7844c4b6ae8081486caeba6091bc4c43a47d9aad0dcde0bb7115a380fe9f34f08cfb1c4938c984f0cc4e0fc80bcbf71e6f66899a57a6794fa984e3eb102808365705d41422cd5b2ea59db76f5011bac249d3602be69bdd16d94bfe6626f24ebf09df475ce194b58bc25497ea49cb69c4083154fb3ab2047c7b01ad0311b1d9795c3e567433db1454c58a992a75e368f4525ecfdca627d5f444a2693d6f70bd184d88f0ba7b35434af54ef2c16f4b6e9695b95ba0986cb0b45cadcfd33f3925e801eec05a33091677b745078e43b1ab600dcdeb53d2afd5dd4ca2ff772b4a3b6aff995ef93378d805f32d83644bcdcb71845bd055d3e1d2f69173253e48756e731050f36ac61c0e22daea3cadaa1a3164042dd948ca022ee5f3b0e6abbb23f1f6864bc5b15dd528d00b7aac5169e4ea50ca50980f2817ce6b180b2b106cdc92a8ad40db1e99360b681af6d95e22624f39ca7f056add3972f11e9f0fb711c51fd643c19c78b058793df0579cda44c60c24bcb75a8be91a464d425e4b475da91e07b8685697b10da18caf8697cb090b13535b9c01305eaf46d750e00e7961ac2bbb89fd26f959caa44ee7227934bbac6518d95e04837b7f8562018d15d5c376c5985dd03dd62a704501e618aa5bc6db2efa3341b1454b64ec18f7fe55c9150e3cf14023e39f4a36189352ded56d6215d20478bfcf811767cd0cdc764a1c9a51e0f1c2ae96ec0ff1daee56238978a48c6585dec159c7a6d1616728b611e6832f6e40c6c9eb3ab791a7b8adade06f63908657cb7576369f48bda4fe405fbda5bcf5b0ed2f8cdca32d27c543431c87f7053646d830cfb112129e4cb913ad9c831b50de57bcdbc21ce52fc652da16f88425611c106af9a3c36773a81a3042abaa760d9e9db1ebd07c2865e766df8ef2a204565389f9ba9c9cc6cd40e260b4c1d93e8c3a3a1732268defd3a439d492b2d342e1c06543c27124753e12d5bca711f34b56f79dc4b5f1310245271a31114c32c495e6e00bc21f7ec37a961e32dafada2cf295c61e5ecbffb450b55e20363c77c2ea709edd89e090764e5c7dc7433bf5101e3b5d2b696aabb2c3f1368902df6f7a541a2d6ff1751f4632492dcf19c4848b458403dca7568ea3ce53556903a43d41b288c0cbbd4b786e441a6b675c0161d3a1232bb0fc1883e7f8f01f1544fae974005c22baddd560c5d54e55d51ab90cee589b37a2a123692c7bdb398a7ed1df0b3ab4e8a27bc52443fb6b211c777f43e821202ac5daddd6f5b7d7c5c02b9d1cb4fd19046d254c855ceee84383dabef9d65c14f1d2cd8695a337fc785072104be0a3667d6bb3c8c670fffcb2c7f7ff472c52f3fd167e10cfc8a3f54a044effe9365113ad86ac24ac81f4a5760c86e2c53286ae45379986decfe5b6b1505be30393b7773f0e96ffa2f1e8ae3d1c721ff3a33eff678ff4ff86459db537980d076f4d830f2dafd72a9b705945ed9714e63c59632f4cebb9932c48d0a7733d669ea9ad32f5cc0c2eb1b802d80bb8ae3465e43994525f1cc4b7d580d19d6e4e0028569eeb3911590aa04564aade5b468611cde709efec7fda36e943b081e936c2ac6886450b72615628a210b810faa8a54abe43751139dd137e9f2a06e9fd9b0635ee428fad01bfb921579a40b1969a28c53299df2737cfe1eea520cd39fa35788484bd499115e589144c9209a376acfd1f4dd092c3163845c7ec1240efd720978ce159966139e7ce08c591e28f252feec1cccc98daed1ba2839899e6f5b22d6119a99bc91687efa0f6b54ac1e247750f705fdb7ab7565679e3f02cef5583ee8e98a1655429da20f56e1e1bdd3bf0f222d0426bb182660c26f0fdc2c65dd7ba59f12fe2f361364305bc53268a5652500c2ab718babb87fc5b656395e749cd5cd2374ec7ca03d10243e36a015e2f2cc38dcdc86a31651314746b6946dd28ab780b6e2d841b359de9002cba2edfa8df4a9650758df0fd1a469af8280fb2938f0e62b562cdad412bb87877eeb6a24968debd33c83c49467770692b8109fb2f09b24a110db53dce3e1411ad4d6331cd6ad9f2d35f0d9d71f650cc214674fab3a7c6560fed515f2bf8614d8dbb30858cd78b79862f4db6e5681d84949316378a947afbc82c9dc4c3d4c5587eb357ae72ffcd2c1fa114a51b3637322ed640b5160effa718661c71d0ab372d4751c4b37bfa35515eee0fabc0a0ac362cf05fadef6740d240897f4973b73660e93d4cf1ffc41ca5785242f52f9d06dcc305ff4596581641e4fb2abdac6d3f638e3c101bd183953b5ba91ce20cc35952f6951abaa71ed6d0f0f56e63449dbe9094f73d0cdbd3f76d3941dcb8839ac8cc48349e2351d59958b2b177778e5a51d52a5c62a4695e979d3e925d1b23f2058adba8ae189177f734c4abe509b6dd2886c1a7481bf4826dd41c9c7c7d57d89318619ff2225ac41e5aee7f7fb5e927e8c2b82e8e64473ee3f8878dfd745c5a8b267657f8245651852b1326017d4718e760f185fd6320a712ba722f0a84f29071959d6346458efb75b53d366edce0c331ac37b95448fc1e18374f6fd99cd131c975bff830d6ea3c5dcae5877e78eb741cb39edff852b69820e121fd6038051fcf70bc6ce1e751ec675868c2c227aafea66fbf1e5d50c2d66c327afa75b457037b6b990695fa5abda5be70251b57504f05cf5c81ad704f2dd4442a9ccd42fc309d18b9f8f697c452fae970c0c5363d889fba65c0fefe1ca327bbad3820a7f9b012275ea4974df53585fc5c29b6e9fc9107e188fe56a7e4978c8e645a4df6495fb6b780160f36fd02f589060b859ad20377cba0de9e02a651b74bc3e1c6802707862ed8c4cfec887a783df67465112316ac42ec571a9346e7dc312cce310cadf9857c30254685327bec296eaf0b4c24561b8f3c9967f1304a40482f7703dc939604e4604363d36268c996bee335ff27ba04b1c2417ed660df978b55fb9247122541f6f54c73b476afb2fdde10cf816f5dc4ebf4265ed80482f22ecfc427025269a0d3e0c1c6d4e621219544ac69ed2055eac826114dc2baca642bb4a528cb2cdf3882c954e037125b36fc1fb92503de5828900c1a9630debd3dc399540dac0088e1cc9449bdc17ade5b0d38b3bb9204875038da6b5aee18f80fc2c8135ec9fe36493a7425a2ca1bb8ce91b3dc8458ed3ad0e8efd8986c19a8737698015c4a3a5bf3a63e48d559a96e3cabee77fd7327ea73e0fffe5c306b51f330be73832a8a3d1d055410cda76c5f26c1363b4154aa2d4c12355efe880438383dc4bbab31c961535f7722d88792081ea95cc0c01ccaf58bd6e1d02c28f0d5f9c94df0219f3630caf945836aa3b3ff176c5abeb1e098d259e64f36a9fee8b1619b62c05f294680fd945a0f3eccdd21f6367bd51c698c3a29df86e1f6f0ee42750d608fe8e7bfe6f4df01883d2e9051f1ea54265bada3d9e0caf052cc3fbc35ebfb35f66b96aba138ddf90cbb7fa24845b3ccc3dfd93c4982216812b9d97906a0cdc415d7484ae137890f8f758aa6f185a9f4d40bdae530c00bda3822b25b2250c7b14e1f8c1ed2561e43b8bbd385db154d1acabf38a50d323d4b0ada5970f358358a24f4aa0afd3ed56949a88ed881332d6af1eddbccaf166f08e1bf66ac31cf7c0632a1cec805966d751161e90f84953e16846c442cb010ce79e7520bb039290094aff3445034be6c232eb60a83b521a8d4e150582aecc0506712f5ae4f2589094a138ef3990491a310b2330372d8114dbc2050863e79f332234e6eb7e6d42dd94818ee163df01fe4e9a4d0ae0cb554abd341a6b8ba8e8823d611bd36b6d92b6ef3401c80d8ee02557413fa5f193933c3e58d9305260f0413eeb2cc2a62030b2c94dffa4599144a8250372a4090619d17cbd48e9e77ab82d0785212a16d969d94e2412842ffc52dc7a1734a4d0f29605043b07a3b08f845a5fd47426448b92d6b24c6be5245e31e1a994e8f4866894f6c8c733362ebae8a14266384d6daf749b826b7830c90a746342887b73aaa7db522d90dd976a94b0b752aff1870bd9c5f339d6d9ebdb76b1c6c24fd8c38faed14e71cb87b628957662e250dd5dff7bbe4afa511f4e4486854690ef113114ec751499089f8288eaf08622fa55d8bbb60c8abc18d552ade97aed9991be5404730d0373af9187eaffa63aa624f98f0ec755e4ea9c87713114a9e080636b209b48a30bc003e307faa9971f67f3acf586fc2aa11b0969572d737a92810e3a58acad4b16fd456c9a8461eee79efb450934a0eb7bf7c61d2809230cdafd9bcb309cc5e4bfb7c2d35b8c4aa0d92b64e55e0d577d74b2e4fac0a915961a003ae3bec104192ba4ed86c2e482ca2a72ef7b2e45755ae12379e48f2b06f1bcff1d61b7e23c100984f0e441fb89964e6f5fe10f8531d886692b1048edac92cf79d3e975fc5f789fa5246bc0c554d44bf3d1bbf1cd0ebd53355b6808c239593392ce03fe9454b29bd7c853102eea569f235a43b2e729d6b43655da0f5de153eeefb560f29e32d283820bc557b32f39b3ce948e324f90b0137bf5c476b10f372ac5603c22a0df8a8fd226e955a97eb6743df598c56fd7dbc2a9c31d3d5621846219221b8d2e3c8204f4030304cae54197e88d263d716c432e28aeea318e747c6a858e79c1becd66520c8ede26047e602f43baae33337e93e9be19b721f83fc07d917c147a1c150896239479d722f5742c9ff62ecb7a15a6ddede0cc84c6e11536b7080dacfebac2855787b2a018713756303c870691dc2915416ad7d63f7e40b4c11553089ab7b970d1c9078611d1342a6746545562efdca3b9e03eea5bcb73eb1ec029e58316e7f252d62e532e9e960633908d943bed1d32e80584e908051a92ca144f44fc90de2869c98b5857669fa36e825e1eddb6fce37549ad75a6d8af9dba34d6e422aee40dca9b6b6119a75f3953e908ac6ede91b3872c5d00f6b188e8e6fe611b4b2efd1db306c8664a3be3cb6577be51aa22454f510f40b08bd55203f38a19cf77a4a9f595449c47335c151a66680ca267a49593f427aa66da377b8c4a02622ff372f8e7ae0d19450d6863a6eac61b77c3a68461ae49d3786795663f6742b911c9d0fbd6ab405c471a00e9634eb98cded687ecd442844958d689578a14fe2b261aa63e5c43ae6a5c90843d47965cf1d46da97b00308a4ab765b78f841c2b6f8da23940009e2e8f4235611d9d769447c3fb727ae55e3348781db047523c593228e61584f7918ae0025ba654cc68013517ccdbcb0198813aa95c0c25368612234be31850bfc58f6608a82ad0bb58da3570c9a4ac77c0934c58c2cf3c8e71926dd8b4161487c5374a7db573d0ab1672dd8fccb20be205d11118a9adb3b284d77214eecacfdb279c7a86579be099ba69592c5a93973922cb34ad0da6725bdd40dcc2ded798352f6399a6a57f58b5fa11f86c1ee0350737d8aeaf8ee4f9b407ed1c50d8664528a6d6bee935638e1fb28a6e84dbd67f41ef48499667a0ca4a21dc5a43404a2d19d279400d8b0cf20771ff57a1ffed224c8f906ae4397b43ba30ad0a0002a0e618c9fdacec4b2ec6d1327cd988b90edd1f6fd843e5040c103f60f5347bfc0d8aa1006530fd2a9aed37c0e43ca2cb30935df6242b37f98b94c8b89bd9923e019c0f3c48dea7359b702b28e8e2cfc16ceda7b9aef90e4b6ae87530ba2466cf0297c6db0b7797dd5e0325e8b1330261cb26070dda191c01485d60caeda78f62022b9ae81feb3c8f142167c73ff0c3d60e961c951ac554f7de628a8cdd904a58ab1a88b5789f2bf6979a510c7fa00b5b4ad8c6e2eb66b019c7890920a48837e6d1f4c04d20615f59b8db4a0f3e9c5ee1ef0e15985bccbc97704f4f949e6421f59e7856346aed819e7c4ab92f1af98f8be4545380ecde1e06f2c7b3f7c5e7d77c8248120a78ba3db9423e9cb9e33527ace7758e29a418b47ca0b3e98a150ef2f99658167f77b1252e2b4959f6dd45376baea5ba8ff574e1af29c8a7faa0bbf1c4932bef9abcc58e3e1869849edadbce074b79eaa89bb1210bbdd5c037de4ad521b7702b2dcf217dc4e1c5289691f090b76e9bcb06d20303f725a6c070a42c87d891a44d621570881cd16503e5d79c0811211370857d16f044668d68eaabc32c5d5a7ff6a8ff1ccce690c549ee9bf0ca30a900ed538e5e90a742f340dab4beec5cc13506de1aefcf68bc3edcee9276b0267901dc70600d75eb400c8015da5524650fb0c7d6b1ab6f7a85b5ea235a1d73f9344377b2722efbb4ece6e0c7bf3fab650a11d9fa00cf38bbd8e8740e06894b7333cea4d9739fda0be73a363581121a24262e203f9f66931e3194e50223d6a91ffc40da23f979ec05615dedd9efe29de06b8cdf3e8d1af1681c5ab0be573bb352662bda4a4d87a1aaf771071fcfe2a2a3830c7746b3b668861d6f51a798493de9a496c3ccf98ee9932d520a64598803cffd76cf349550c49f30d1fed256b345b99af2c58b1ba7a740d997e52d11376b59ab6413f8e7694c2fd0da6dbac76a34fe2ad29d33df850a7a3ff0bbc78480e6a89cf7c2539932599b40be87966a575a6379b0fbe19fe458fbeb20ded714031c3f6369e76e6b19142799c1854c9d6f9441b5ba13dad219529bf9ce40321a37eff93d59599ed90bbbb3b51d17c93e577be0d32ae07f717f8e7fc3eb8b19a7a282431fc0ebbb24538265a4b245f1a38a73dc27c1d3a6f00ee6aa442f89edd91f0e5bc11b413497bf912721f6bfea235b9ba145f8808ec05ec0712ae5f16e1582087deb095b342a174dbacb210ba3f02ed891239ac07a92602e1c500a8b88925ac24ab5b3dafc01287e325d60607452c3ee0f4a8dee57cc23d23ad317e5884dbec2898696b721f266784bdc6678a0dceb8278cc9180c8d6b9bef5a85f5ca749a5b9e1ddbac9c89cf19e249160216a35e4a83167a88668a3f8b0f839748dc1ed50935138d8ef06055027ea1ece4b4f857d6f25d9c782453fae46aac393af24029678e189d8275fc9ef31dda10386551bb184b4aa7c42a410436ab4dd9aaebd3a98c7fd49c1e2eb4342b559b55fa60eba06505bd71e91c3b88d1362632207a5efdb05c1ededd6dd33548c3e2ffdb7fc5d90d4d2757210f191f59fec4d526a18c640741ef1fab92f95514bb65443094759b21117345075d6cc65e0e15d8eb3fca8720fef8ab2fd35153f857ce42ec24056d3e4db5ecc917651abbba019e92ed3f8d2eb172e3a2d8e7834c64c6c2d1727eb03c3360abc0b93c05efd5d9e2277644320a913e04d52d7eb9a0b41018c1b12f64af58603efa335cd00ff3a27be5769daecd46c337d032497db9c7dab7cc4f9e944e7e7c1535e1231c146771bfc29ee4e119c63999bfc3e58846b582c1a0c715b888060dadeb96e5a6163733981d0c9f03ac37e314223d7de61e65256431eed516e282a78b2c5622a412632ba7ff4cb9bf4ee345fe6d1451d7ef4aebe6e272b5fe4ba4e0fc36eeb1691bcd50ddae61da793f7b512513a2288bd836cd7f136e789536ea69f1f074a8db0328079a139d08b97d012a7d46cb753478362ee7cf3bae83c7e65485f295e8ca831399b932d52f09a657597d657f2d925499d3d91de90332c1f605f2d8c10e59b9015be3f825c72b079b4bfa812f0e3e58b443b17544856ff5df3d320b8e081ca5333ef60d9e4f0c92f8ea77f505414193714e225082d6a9aa5c987fe6ff6e09930526ea50bf1a057df6d093c40e974cc4c94771d86c766ae7731c7f397552fb75a1a0e574f45128a8112c81f84a02cd79c5fc596d2bd64ad911636626d216a6379c3730de7951a3192ae2f9ab1f371ce59ba5e58533b44ed8bcb314dc24de1726f6f57fa3a0c55771f033b67376b65359cf9ca0d9475bbfb5ed090ac3e2508a87ab9de23b5aab68480ee7934363b1cb831fdc1b95ef235d7286a9101bf9431fa21b2ed9a231209af1ca785ec1cb53db41ba7d3afc4c140d33ec97643f5f3d88816d20928eb846947e3138b4c34e1ea90d6dadc350eecd0fb4bbd4a1a4d3648edf760b05ed9fd488bf2e08dd4462db5e844771e446c9bc28d93450bfed22c1ccc57bd626bd465df1d299fe9e2e6a4e871508084eb1bf5f01569a3973e56ed47e495cdb63b5062c0635e1a11bbed8c2be3e5a220ae8db09d402faa1c9b3062a00fe0c052ffb113104dfd598f2f314a26c3d13f0f276d1a178c1a93d8459043805410337e736a590a547784749d7bad5f5d9bfd72b034d5e01a984aa4e0c74b486f3eeba026941d9a1648f1b3d9d33c132d4d229bf667a4be398fb77e2e0c81f69c9fc692c8a28bc4f6a6d33c483d3fb228a26bbc753050e48e7a81de9513a24ea010f150f2afff072dc0aca640722e0099d66c9dd45ca6179a22c71d8c697dbacd9e9e44917c1709967cb10a5b788acfa7d1c90c0f92fca15fd7c93f43c867bac4fda7affe25eb746b165a0af7dcc9828041abbb565513009604ae2e56f6cddabb23762660bc8ee594733d67c58c79ce8782a7e15daf23c096096741d2465e1af130b04a89328e1f9ab7dbf0a5979cb6187eec2196277506dd2d064c808bc70401674f49fdc9b336f8d6f78e0c958ec877e43389ddd9a10f543c9ce8dee1d5a4508a596b252c3f4622efd2c895db5f632db208eb48c1bcaa31ca25c994881664773eb5c9cd5cf23010b741fd8fff4746f4442207a58189df014be5646341ee7681c825f7ddf413cc89442f33ac0efb95de674042d4c0f7aa6a2ec3800913d4281e33fbfef1218fc6f0305baf48bf7cd0def3b99b7073211a7cab6324c593db8ad8a1e3be52d6ff44ab4c3b3b227a5b1e39682c178d7166c5e8f75e782ab6439ece74dfa720d0e6450ed036faa7f76d959874579805913df9329975f711d870fe541fdbc36a873f4ecf72322323202fd01d743881ad1e0436ba034a14c95a08d027277e8e8d94b9823688fd4f2e460f7c675d179e169c0b78d2ef502624b50ee78c64bf75e6f0f2d98e5d9b7f0793930be63373b38b56408507b3b31a7874160bad5a441970146b17d90ece9704a6adcd67eeffbb65def9a83dcf1b4606556f1c8190d4ea8bfd1a1ee9deff9631fdf6c144b94589c27399829868574292a098f157d654ff3d3ef9871f9e5cf23b6fa6a1cf4e8fd2a6a7b2cf8e5209ec3ae0cde355225154457a782cd8ddd8f3bde14d4b655bbfdf87875bfb9920ab312fb9c4905a7a6e94d67d6144cd6b9e2b18304cd3784db94c6a224d1762d8df9f935f7f3185fd6c6e2581a342421c3911efbd1527e5b40bb25147cc0f5098efcc8a7437e357fc685f3dd4ede5b9edb92505828f5dd6c0561a3992fbb3fd5f9271f2eaedb2ae39b3c55f96767f9f330adcba59654e2198e8caf24f5914a656ff56ce983cda5541e1a3ae3ac4321909bd359a556f03a7a79fabaa2968d811b9adb22a826ff72be14214f09feafba9cc821be16dc7e81b5f19d1c16fd4d3dcd83fa341aa71f9ef7863f9bb6ba45cfd895cc8984ef4e71d63a41c7a4eccf4bdeaa786c0e74458ae8658b0f3a85fc63ef0aff5e3fedaed2b764d144c69abf17f0f5adf232b03f446c757c08608e397909882b6cca3e0f27264b0e585179408565813144bd2c33e1cc224ab3469fedc971cb46bc6e4ae1309cd0465c97ab30698a0b2e796798aab6dba6aae3bbf750c983a57c76492d4121b61c76688a82880eaf6d94e57a88094aa0ea7e1c043113874f6390bb8db0f48a7bcb3e338ffc152cd015200e96ab60a48606fd40a6d9c435a02e74cfe504b720da4899d28b9a059062fc650cadfb61fd653099de1eb569bd284fb92b591027e64eaca0b0ea933af3e86b3b9c0d2965b3ea24f05284eca6a56ad7d5845219a5dd6515fbfb642f4e86a8ce5a0f6eea02b002b80b8d887aa4f1425756f5327d7656b92497556dcd180ffeeaa2cdb35dbd070b6e1b20a6c1bd8f2a75f508088029820b04a9efe77bdbb1d4359e9f2ba8e08806860c6d53b772dead0f3cd671185d66497d88bfc5425ee29f05fcf8db76ca61bc95ee5097354ef9ef8d57203c3df3e61d5c16cd79208bc59b3e129fb351e160385cbd46df6e5cc9362ac55f4e7af9387c835f522e053b41b06eadd32303f54708caf05a4cdf9f7325b8f230ff20c84bbf561cf1d415ab263670d9d36f20737d06439ba47c35174476b098d66be264d5415e2b1830280450cb207bb34484456dbe24200160c4d0b4a0ec5023d7234690dd6ce63527f12ff7c544a330012001583208be4c609d99e3e2ee09592d9bf88909441f03bf841bdc68fe87186bcce80a2a382d85571e9745fc0c66ea3758cd54a2567ef05a203c6f20c3699e3f6251940f281a083007ecdf867e2952eb9bd4d3d94f6bcb3a2f52df1ed28776548939efe36ae077bba37d2a50d4de9ca838780de12271e25a81697be84262330a6fcc0334bc7a274990a43555f4137b72a1da81ef2d0d6b58b25e3a38d28d19bf6a8af962a909d477cd8dcff20587ac5c995ebdc76649eedc559951c058f22af82cb24458f15bddf96cafa035a82f892c28d2bceab47ffc625f52096cca1255e7f7226bbc44b1d63cfee5d51b6b02fad0aa1466954d678b9bad10f4452fc3fc8013a1d3ae0cb2ed6817fc7fe50dc44edb97908baa8ee567d70e0b5abea4f9920f28b5cc0bdc1757795c282873eb28a92e77bbc2a47ba8377b174e0c6787c8e4dda2eeae259e4e4d8fd0a96166cb57af6182bccb7578b64fee57831cabcabc0c771d8c1c0f1a600cd3de0f087f19c9bf28aac71b7e45bb2425003ceceb270590e8a27fd06b38cd6936f41e24e021a706dbd5876049dd3aecd5c177ffd9f3e0651fa4f304705839914fbb32b343e00daefd2a5c14bcf684ef654616732db3a6a55527cd0b7d1281f5db1befdbf597d6342c69bb6b3d86f5cc3e5e7a7aad8311e4337a8b5329e2f07d3f5bd72973db3344a1dfdfd00714decca6b371d240c22ad81787a3a03cae239f85ab030a3066a603902bca69147f5b2868548f71cf3a59bae212ad311c97db5c8a6f8a12bb8073bce4d8f1186724cc4e01e661c6afecf88c4fc881a297e737cb45047b9a18f57aa1ab92bc7926c26cbb9fc0788b62feb00ad387b370376475a485d7d2187b2953bb11c8b02284b0a447b7217de90cf3e81f9285fffce85e51bb3737fb0cb7b9345cb61f855397cf0d3fc3f123df6f610a2fe41a2915fab1467bd54569f4c3c1cc1a69538d15686294a4f5a6b0d230be819666d7f9b5159be915fcb90fe3f54e43bbc6d93e9abb85049159aea70da6e90e1ccd95cee8de4fe7fb8d589cb99a1ad62fc307da2f7ec981a6a89057b2d22d323d49d5dd4381dbf9744f76bde24048212c61710f6647eecf8e0472bf12ef97bdc4aba045d2caf39e7ba592b44cf109fd4b9cecc71cd829b0e8b7fd752789257fe66c5236aabd3270654227c4ec3a2f1057fea3ce740d1cbb245fc6f04f0dbaf72d76131cde743e65feea85648e3ab10ef652951d5ca0a78b1235854f74dc4ee99ba4fc75f29688128082cc745b780083c541b0574cf623916e713335aa9f34317ce9a4abaa3de61bceb18e569f64784c2b39caa051b24f4c555872c3b3a17c815f7904c366356fad3ef92593b31a9cdcb5c45a7157ad20cebecc33bed1c504b9ae7aa7256a3815d4b5119f555fe857b07fd34a6bac1173e1bde85a2d7db362845c69c37f5aefcddea2103fad6f61db52230a1af75629d0d4651042b3a91ac67a247d15999423bdd11df12cd6bf70c89ba43b2e64465791fad716908a0f88c0f0f59e62ba83b1621bedaed1ff880997630b3f91ae49d61f9ded5fbd6501dd1d1cd5be9f0bfaa9787869403fddf8211f0b033285920a7d27e037fa8f2d13146d3277f5e07104a15f892536de28466451a5d579d8df6e9a8adb5fa86e8a714e1ad1aa23883a37983bcb137dcdef8a6857018a63138e51feb9a534d8482664dba1ac84f367f269be004c041089194d0929d9e7782707fed90dacbf5f7dddf4be16315a2a1d77cb0afde3c0eea5d8457ee80e81f1b7d2ddab89f83a8a6acbc65c1f08cfb6374cda2517fa9c0aba009524fcab92d9d10864a5c48a59b4049ec1dcc32265495fb13ffb568639946a7f68d7aeeaa0d561aa37dccba3cca18fa6bc13b5839536cc7863e140e0ea78e87a67cd672a7997ba8e5fb915053a27b2f1dd80f405f801db293dfb95a69a0df3a6ff378743ca1bd58c8abaef3657e04944dddbf0ea0f3de80ab335386aaff41453ff318723569c2744e76482922957e335f3e7b533a623f2a2661d483dba4c55674be5f552b2a0332547458fcfdfc537b987c2181241a79f3aa35db2bd3fc9e20750306729c6f78300ec0ddd3ac7d877cbf0eea5153003cb1a13cb45152fe8ef7b23a2571bf681f3380869b5d3d0ccc50750515b769fd5dfeef86f09bfea65a226b3930c1e9b7c0fc5557b2cdf5ca982ce38306840af64f957397156a34c43cc51104c43df302454447cee4bf4ea01042855e19b827e6bfbff0034d4e03b0b494cf59bc83b88e725acf736520dd24e8ee1fb0783bf99e40f3d4ee31feead12b77e7248b10afd7c3777384e0fa0aa5b0ed86ad58e6be5c0cf1384029b21b3034909df328ff3f57f74de1255ace713903b2f7f75e19d07125f37ae30c01161cbbe06b4f2fca8b4899825a04d1ef0c58253ee274cfda5f1a49f453cccb105fa0a60a659394063d1727c681044bb83586c258a8e98996ec984aa39b155708b8f8c51d1330b0fc1a69b4f8e758c15f7b554336fbb7f584f4d550bb9caf3419978c6c6aecc52fa0d8fc9f566d892362188ae789f8ddfdc5bff4a3c2ebf13cf386ea2a544e246fb8871880d8e4bea53ab15d1ca40d9275da8c41f2ffb4c199be03b403574ec127db08cea92f65b74b4924ff76e5ad74171cfa694fa63400852e448fc708630009f4ffeddcbe8d7de8ed22be51702973a56eaef82c55be98b6955439405f877b45ac45dcdb727335e666b0ac9cfd378ad142684a346b03e14bcc74783610043dfb5f393533bb647b421d67fc28c5070e1b5c0455dfa287a56d135d64769c37a78f3e5ff0436c13600ad83e768e0e1396057563af72f80bf5c95a3548b12c3e0890a35dde9c3c2deaed42c8b5da1080ce73fcfc463ccddef9ab2dbfc353cc30308b5cd454fe42642247da8ffffb7eee3ec4ef4669d2b449628b7387738d3c1170148164fee895b759ddcfe4edd279ed8307c1f1b3c658e5a0373e03bcd0e0d4948630e75a377b5a43c9a3420077318fd352a1f27f0b2b4ac141328de5497f7aa4927c6b7f40dcbed1d45ad3dcf7748b0ba36060e76f1c8d2c1426505db07c3dd6e9500f185a8c8c117c1577ded51ef366192300cd61c53705c75e42aa029d91d78125cfaf45678e30a1771a880c7762a6e8c2fa381aea0eb6fab3a39c9f0085f0a28c557b6296a2e2599ce426c4efa57897d0b057bfb1c9be4c56c0e0d0b8307ee6d6de135a8fe87ee35dc2c64f10c1ec0d2a3f48c8dea7dd1983c0a40a81b4cda5559cd1302dba584336550f932fbf6bea98bac3c4481ca26ff84ba4761efa0f059c6a229c1d8e9f5eaa004845f7c076224fdd209427e4375e88036efbbb588b1a47651681a308f8c45fe760113e776fe886f45c5eae6624ef8fc7737c0a7067971507da8505af41a4ec10da9c2db21741616043ac80515a3fb8867623f9d0564820114121febb92ed071811aeff2114f6874bcf460ad34828ddb72e6b3d920c9212764483db642dc630077ee76b12cfb3420b7c753e806b56623be9373ac8a988bdefd7dc993020227084776837d2498147b62c3ca661d8eb6a148ae4e602fbd35fc65d701acf888915d9f7ad4c77974ac32de40d2889b1a63ac1702a4db85e41810d05a37042b335a398f561c19af0f36d5f5067f2122f5e51db89a12512e30b2c86543299be90fdb3af755c8d152b4d6e42b81f47e8737f125b2b2ce7f11ecb70132f03786ea95620d0a027aa08f9a00d6d02b781990c8aaeed29ab16f08a2a62ab89893f92d8fcaacb06fd97033fde434f370f4771f66156772d2081bec728d6f42181a67e6dc712e86005105bedc60e01c73d878ac3db3248bf2276c0c7a2e22a322ce07bb532fbbb7d27f09ca7ed44851b60f76717737a58e4f53804b1c2a2c6fe22070addb05449f638b8cd6183834f13d7381568bd063c62b02a448d7fe1f28ea5e539a39f256e36a2cadb706d14c7d2d7dfab4ec080899e7c6e5d80986f1b55e7d27c005f33a74efd155fe8c4d01d7d5fccc7218f2b0ba20c281a48bea20c58bf76b8f5c47c4fe679915c46a5065a0dcb096e3d671d3309f36e43334af3ee258797234f97a0a335fa9551bc227f87875811782a0d705802dc04e11d19ed3543eb2afd96776bf7eace89546a9cd1855edae3191572a8631c9499c2290f1ec4a237af62ed18baefe9645d2c250649b0abae33c0b2ccb2716f6d7a81df09b6b75b770efa08968fdcbe904dbdaff47b369e97ec5d8c27d7b5dc396acb2157bc45154ac38a97ed75897ca048cd67e433a338e5822f460d9cedd0f20ff064521f2eee2097eab3674c002cfb7c9abb040df254f4a983cd2ae296d72fb8f8bf57c5821d1a31a06e6dbd130feda830fa3cc0f2532cb053c2093bc354af40a0c60b541b8d7e2ee2c44f91c46b389112746c1e29689fb119ecee235239ba8073d256595e7e165e01c2ccc8a613ef090a2d16cad3e3cc3ccef4725f34898b74958628fb914005e88ac41e0a2b6b65ecee160ee815be63482cef121624786445a8015247a4e44aed7aac9c1c14de7238bfe74bc3707fc2dc2f1b617e417649fc168b7af0afb3baba6f22f30cb315eb889a8c47dece921373454f59c72c38dc53106233eb8888f4656977a13de86c640453200f1acee04a9de0b8bffe2a345174de3ab97548848b9c02a577250bf2498c417794b61d00364b0c53fb1497c3a6c26bd60f1f363b3b832988b663130a8e7ebcfe0a021718f6bf0f63944638b8e4d7e01d77bdc525c0add3bc457e8d917223a27abe96191159f2d941ef4485ce3e1bc9b73936790c0a7ba3a027ff8f028bdb3e2ee872ed8aca7fb4d4e1f5935f37abda8692cede628cafe0822cdad3522e22e6f78e0541e2f91fca8e7a22be3d56b39071861ecdfeb46fcca9878fe2a89725c97b4c2686b5d9e97ba6fe25717295102c1a271219e569a7cb881d3f56b90f4bad3e38e1bcfb510d8511cf00cd34dfc0b21bd62d03dcb44bc632221f66e94cb8adb8212b24439da2ca366e1c2b1f309f23b48864bef0b92983969b22519d80ba87cba614e92559bef335232acb547bac0cc88103d90b5c4cd4cc36b02f1ba9aab2054b84ffa2b6b00b97b903163446ecb7e146dec6463acafba25e06e0c5cce88b811046c02dc2c31dd077281d0ecbf1bb4d3ca8305a9e57a3f9498168edfbc2df2ba387b0ea3349fef3cb3b9e5dd295412deb98c124b58b48f96283ce59a225975f69f87620dd9dbc448130966eba4f533dd010aa1bedb95dbb6fb89486bc9b7c584c21fe720019a39bb4b7ce0ee9008cadbe7d2a7de83dafe119b555f120b395092740be7745b9db1ae0c6715dc194a4070efcab8502472dc7038ff78942ce1d86814968e56d7d70ab8af6e5effadbeb8c0178b29431aac91268dc946fbd9bc97a6547aec29a09d3e750fc1b17457b9c7352f54a01d2d595cd75735a164db129b64a67b55aa410bc31e6eb4069f0ed1a3cd9ba3312ab17a207ccab1c5bb9baa86d7d97dce82d71f35418d7be5d4825301a6f11408fd1cd8310d5631fa6d9b117ced9ba2e98d813fbd13dfa6fff654fa1aa8f1173395e06788578c390477e93d6d887791e91c283aa20925a419eaca9a4e46b78eaa30efc6a5cdd88e7d257edd3c3c7d020347a56c9622ad4c276ab5ea8057185185dd939ff5b9c6b8bc2b8a4d461afcfe849e8e4315eb2703dbd71bd745f4e03db1836e10ef3e6adf9a040be12876ddd6a21ee04ae8b1c42bc36282377ee5ffdb0fad983a085f7dbd22a92ee969c6220bd46f303f1523efd33550ba11144f0c9df1c8b355883b5f9ae29c9cd88208a01b836cd7be43eec7ac52510cae6a9e7762757e214e2aed648d8d4ac13639eb49cda0a8824b35b3076e12d9e1b97c62163cc8084a2ae830c072ed253503c2c2ce5a0d026e6dfb3ad4354636b3d5102c290b13d5fe5548b525d6d536bfe050753e0c3ec7fe6eed50ce6f6f761220e110b734d5b31b50d08b1b4cede0e53b182d03edb312126fe922fe95e5b30dfcbc77cbfe19812ed075e5de6bb3d1a1b8e85ffb5d4e7ec2e5a046a94e2be736062fdeaf0f6b770f13b48f4548c3f26a58ca0d394acd6f28c1aa0461c5f5d29f6f9cc768c6fff44524482febf3240fe45511a1199943dc4dfb344649af4eb6105fd148b7d70f52452d0bcddd265c216e6281c7f3196dd92fe1fa27c8bb8aa42a11d47b7c79b92753705cbc78da46cbfbbbdc380abaa19b2a3fd25b50d21f8f28133181aab0dd69783dcc1caa8d4d68f7817234fe4ada80ff4553ec04ec62819cda5bf6c98893fb4426c8b3feda65990e49899c1498aa508885486ebeebd20a6d923f4051ef237082f805ab4be3a896d47fa2b8d5c1808657148efd632fe6302f2d6c64f84c0425cdc526ff4469bf92a9288dcaf6c0ed17a93eb266aff9fe42b434a429e38497a9a0f51a20d50f2e4898ba6029b261fdfba9c445a43cb8ecbd0100938985e0eb7d81ec710f86d6a512d80a489bb3992bd22c0e911a89ed244810273cfe312dced7f12076dc6a1a2a6f2f8741d9bb60f5ef9af5a887fcd4c1f1c29154f2146d17a423e1f085a98480849baa0c8377db35b446b811018adec5b079338af3e0c142c00f92dea658eb57554d1c68cbde2aa151f494946c87d68a6faa2b973a6de974837fa035f19b9566554acbb45e1ae6960172b5e8610570f4d54a9900a992cdc2602de48dbe4b51d40fd89c88860597db854a4c6268f45d7f45fa7950f8df5167b0a32b767618dbc0f59a02dc535acd49681c30cb65a2783d913febde0505c27c8d6289844d0a14b48fd00454a544d3eb093add65ac64ceabfdcfd8245630c6f94e934ec4ffa2957921dec9d4da2ce83d775f312ffd3a2874ef6d1bbf4954ad4972661b92192df378c9452ddd204dfff7de5c59f29af3e4d03572753ff7c4e869553f766f480761df7196920dba75f21400fb3e64f535713f1b546d8afd35fc8f225e644e8aeb0cf335fe26a5a284ae2664fdddca14f009338aa82aed71e5033d6abc37ddad03505348cef977a6bfbcad2547276b4a07f94ad915f16b44c795dbbca7aef8ce664bf1b7462be10d7b2bdbad9222fbfa2a1a059e6173dcc364b7e52cdf8e5e9f139473e1ffa52922011760c8e3e2b3bcfc579a6e8b8341bfe1fb4185c3f4e06c552fc04af89a279d4e1b9d0f7bb13662645976492825b4a6ccabadd5afedccd208b61cab8432e13a7746ae849f225776b623dd6516419b5929d107e741e34854db968015b05aa5b9f818736a6fdc4501e21531d0a7a27ef7943096aa22cb6207cedd7a5de8bbf7b92a34d54d4f83eceea8b1dc30ba5238ce26bb3608c560f2f5bf2557c12f632f35cbeba8136bdcd64fbe3d4c1a4ef3b42463ca30eaaa2e633275fc7a0fe815d00fc157fccf45921bdb08b63b0572ae8d15aa045c44a7fb8d68a9e6d99ada28e51b472760893fb7fd47a3bcadf39d4755c4d1568377a164859d575e7491df412ccd1413377a14b621030b618f533960cd6cc825c3d7bf151eb331d2c74943b8cf83ce639a97bf77c0d887eeb5e7dde24ab0a76c99171f6cfa6358806c71cfad6585d7a1193c91de8a0111b96836975fd7481b1dcd387704a228917695537de45603050f81e5e5934fb4872ab2776fc15cd3db158a7f1f0a4178fa58e28dd334cdce580ff0274fbd4f1e649538a46dcb9ef16df90c7cad82f3567105791ab3000f3eb038caa101c56cbb8a5f6c936a9fbe1ce1c12350e0b156e6eb30f4b732f47dbbbc8918db168c06ac28972c5199709f8267991d4ce8b824e6851698fc65b1435aed4b9ef107e2867ffb2bd51f7b737087ad37d981d15fa0c85c97ef09deac0120acaa7353f81459feff88b4fc67b41ed61329206d59e572ffec40476736de478b363578e9ab8564597c5389a74c742c9bf557645f7a2fad8d8490e2b132c0865c3b5bc80b8741f0641e6843884ee365acffb6302ef8ed50ffb4a5f2c917ccfa9dd7329563237bbc9aa90ac51fbe3a816dd50171d814efcbd7eac5a496419a381c7466faf6a448e6f0f67590185babbcd2b9a06218d87a8fd62aa3c8e41c33d5f11619c2bf4f15d13faf61b9be9cb55c3ecbd42d9a28349a19fed403e55111804979917432b35f2fae57e4385d6b1f7b68de7d39dc66ed531dd890220f5668c276dc179d4c584e4391d1f3b89db022aecc6f9c50054d4e7afa0c0e26a6335d733d4115f0baf08105fc2de341a3adf9c3209ef6cbae9a02c21a529c2a345aa43221d7dd667b00873fa5232b115ebf58945abeba71a331e034858122deac08e6cbc6e213ea32ca4dd80199564fe65b27a072c85a05fda72f15fa40a63c0fc55f4ea369576dcbeb980aa31db9825f97fe464a14f2f5fe4463db0d7595f4f89329f08d9823e0b05875623ef2035595b8202b225cc02f16e455299433abb8a0724a8e13d2c415b8530e64562a972564cfdf0ffa74f2d633a70c46b00e22d3497a6bea2428fe7b9b554f7cdcaf7457d9e02f007b268e73e7116e1d9b3f8d2b9339925564f68278cde2618ffc309f087bcf6acccf2fa1816a11f9ea56b6bad96888b25e6cf055cf4292f6e2c485b264b067cacdc1c6dba8be2381cb0190effc1a313efbee95a439835af3920543d39ef5f64109c49c015735e6d2e61abf104dd28f8d9d088957595f205695b657286f5d3f0854f232d6a3807c38d1703dfce7a728aad6fb27423d5252b6c8844d6c57cd6243501fa705422b45ab186ecc10e14e952472dda1a75e2c7947e11f1c4dc5ffdfec7f55fe1b78f361394cb1ba7bfda822ffcc32206a89a06e4752da41c0e5e97204f93dad421c9c49c517477171056bf4797dd62a2f1e00aadf4b4831f9f9ae2d70be702a07a59729dcf1f8041156eb92feb437aa5f14c0169599ad62781f25cf8e66cb25926c313a9923b3ca7ef4c754a30f5bd0d1d7480553d343149b4ea1ba72e3a1c1128c929918ed7104e44472a85086f30491b081e861fb81dc8568052aedec2dfda0726e7e48682a6d40324204489a2385c4e18ada503a1b4aea9a3d49bb439074c6d9abc2c652035dcd168ecbfef73ad16fa45b914814c85e9469b524aa8faf31d5b12b2983dc1b093a543b795c5b627effb9e085bb3509bade66ee6bd30bf46cbab3867a309a3fcfebf2172f57eb9ea9e5a9606554b4b847874ee165ead6eada79da90a267653069e0108ba8ee6f6f924fd8483c682d8880272faad4f2e030c4b3f56938d3d033984ca5b4f84dee4fbb1b95a47df692a86c27a2759aa6995cfbe71f7a171f36a82a4571985e42f006607855bbe9310379a17fd93ff6e00fc6b4b2e20ac02a9d3b29e56c49ff851937de33af35b5d2ed7123669d6af3ac4ee97ddbfc06aac277de86a183be8dc972837ea1ba601729c46ae57251e808977a3c7232e3c614b5e5ed18ac97c642e797d216be0303adcea995740778b7b4bd19cba6eada4c3f75e751f46acf10ab577015421393da37f00e0426f36bffc1e3bd53ca4545883028feecf799d06f5af45fb0f6a17f9e085db4b9ff6f192133921ac9b4e483d525932705ea3927379966cfa2cd894c2662212068f1c517b15f40bfcc286c92bc890064c078a5ed6ab472cdfa82a632d9ce9b0ce1f1832e4b916383532b7fcd2eed32468dd302696cf0ffebb6b7cb165b0fc88ff66ad6b4d381520a27dcf6dd2809a497b209454505a44cfd8064efad95cfada9c8cc8b23c0bf9db1275a3f6f5ea851c5e2b2ab0b310c7465a8d21f36ec6aa4d8865d25b2aa2ff6abb26da536773bba304e0cb2a8419c839e3aef18faecdcf75114f77cc26bb823a5925caaf7c5ad8c3cb1acc1fc7dda928af8a2e45c8db2f1ac27e9eaf53df20980e93c7dfa891b645ffdfdd5364b3e2972f6983749cabdebb0f5f718b5946afa5b95afda4a7c5762a8226b0874c2d399aab371255c3d7fe7362f3ce661c079f5cffa5f67ce92b64d81959e44bd223984cb83b778094c88298ae838b6f61c370036ac7a732d4fcf540e013c7579682563ba9fac2a14e568da746d27d8764114b2134f945d20d4519d16b92bc8e53187836dade6f2e83887adebfc78c30a1d24ef1065d3b57c10655f224f785c8cba65a4817057349ff1681bd06a8810108e2e575adf88b0330c4c717c3108914d479f5730f7f223d1d4d6dbb9b623b60854e230e576a37298582e221bb6f82c9dfdf59562eebdb26e746f0870ec02c06a1ed84531db1de03d332f8c3b855fb3be768ba0414f1bb28e90c0ca6ac2260fba1886842e8bfc4282e9f2850743da9fe2589ca2455e67d878cd3226ce09c89f824fea7933444db958ebee607bd602f8d0a0df00531c7553331ce26da9e3cd5b4edf8216cf950a80883f456e4bff813e05c44a57a19487bc2548fb1ad904fe3dc59e3e214e6ab8352a7cd81a11c95ae6e1b70367fcdf96c6e55afa878acfb2e2b77c93119655278e3c6e915c05e4e0fabcf3cfa92ebbd1eddadbafabbf075741dd4d770cbe9a124dc5b86cf01926f96b8501086576f8654105948c5a3bf9575553c592f0a13ef71a281cea01dc7734dbfcbc809bacce0d0fd3fdb5aa3c147715ea121f95309584aade4d17f589c421ad92dbde4908fa391900115f533096ce9b063cf60232e553b306c4ac1727b4dfc46f0ec8584800ad5fbe636d7ad369facc2e5f286fc1ed1e96bd1dd95ef302bb524812c3c98fd9d5467446542b086cf320fdde8566a0f184c1683265f58430daf2e99f42e3f37993d47658f6521634e1f9316ac6947d163d6a48f01b567dbbc9f7805c968e8b14db65f7232eb274ade1363d761501fa3145885eca0c3aeeda58ae613c8520e7cc8c3cbcf99ec08ae4b6bd3f27b637b1034f4c031811136fd8f9c8ffec9e33c31630dd5def9a50ed5fba61ead85a3e310f3fc1107cd64d14fb184fa8cfdb3ac3718e1a09a21067b8c165ee64ae444e325badf6285f5c4f41f84b385a42488ecd10c741918a965472688a078ce9d43110b3d899aabb44ded1fec491facec0b90a47f8fc646ebcedffc10c08c95adddb01fccc6eee0061ac22bed7adcf978312f534be6eb957f034508cb5734c6ce664a45d9487f0b292cdd3dc361ff58ac3951dcd2a2b1a54c3aa450991223f95b38fd7115448c5ad91bfd9a075dee53049b4b2808016d9d85a2f3d5e464d0e2fc221ac52874d2ebc48d0a845e26c1a35a0a9273e0455aaacdecc2e985a0d5017083c96c594f392acffda8382972b20e6f86aaa73e07f5cb147269c70aea61508b6fe445597b5680c7e720f9a86cfd66f6b64cf8998322ac157afcd263d9dabefbf86fd925e74b39ba4db637470a7af9ac0283c08a1f7841612bebc31f187a2976857e968f6f5158f36bcbf60b33a46a419fb8258e7a377a49d097a3849813bb06bf09bfe333e139104d530292aafb539aa9979f5dfc91d85b0f9d394f52fdb112c75eac83cbff23576d79f7ab092c952fe2761dc8304cb12bc11b0fff16aa1a0e4b7c501a8016e4ec55d34d6b532bc1b8814dbd24e7d269ed03c0b88800f126ce0da467f81041bcb5ef5612943226a07aaa9e972b10b20ed4ca394e314a456801bf656284e6331c545dad289ebe5af3d27096ca3461f3da29c765ef660b8ff4620ca0b6a063f69f9ff25062baf8cc596dbda9ab77819ffe609f3ee4df82aa938191b5c49d79d710870416320075f2299c924e1f5b92ecbae9361b188f698c7182d23bb025ab23f7c7074ad44ba4a26eaabe2689158c9c771375e35fd4a9bff268abffdbe4fdb909ca782db4cfede5d59537b6a5cded979708b29176d0a2ae18eedbf6e4e8f874c1527f7a3df1fc2f211455b405019ffcbf6d9bf2c2b2582dccf387992e6927583a04badb98bc40754cfa0a19828880e77a834db5fb93c264952e1752bf4f6ca5c24eea80b430951b24800cee04e90d88ad32ff9a93a61a9dc2f5e9e3719148570119dd0f7096f57cf99c5d2abcec22ba0bf57987d88d49237c91e3d71ae075945b9a63cf1badef086671d226099c60c3f2280e50ee20032ebf839a0905beec91f0b4fc1beb7567cbabfca7b41348a57379aa862eb5bd5c2c22f4883362bcd7a6f21d6466f158c99d4a491deb82c4ee864917d2417d60164b0550e21b659db496058d546c593aca2b0e32a69ad14a23f223bc8be92bf5825eaf5cce4eed4000f105eb69281bca1ff46088790ca8c916f55922ca6965bdb57155225e01adc5f05fe6f0c9d6ecce3e3aee22824c2d402cbd9c8bc6fbc76d75d93159f4c6659c350863287ecd5ce712b657254069e8af76126cfc95f785f89168ccc66989100a8db89ace52c9aa47f479b94ffa1cc4e36105d646c292de82e3e71562793b312dfb6225b994e625cab17485360bd4b2393324d39f1b5b30833e2e2f19c76422fa258ac92594b7507561575db171fe5ce0c6a92cb28318696ae79951bae54153aa287ce03d5dbd5505b43970ff8ec6f626262170d8c76663ef226e31602599db853b94b9cc1cba23878b9d341ad87c41b5cf08bd4172bd7da891ccd6bfee3296563aee34a3f3b3143bad009819fdd260dcdb27f07eedacdfd6c61c7e66e6b3122e2344620d64b32756d42fd492cc518986ee96b7b0372df427dd3e0fb78063a59cc25286e1f281dcbc8798323d01c56df4afdf26347457b437358dc7c1af92ec97900ea462c5a079bdd0f5d386287085c73060145b1fc60ef0834942fae23fb70a1b2a65502e2dcb1edccdd3069bfd19008265f34318e05297583601200000e9100b41a9f33ff3934f192399352c6bcd21aefda0fa441b7d5e319d7700a9f75386fa39966bb65a53b43bf8b6d4c9497b68ece619ae76b0032034361538025a7074b6da36ed3907833fd47d69f73dfe22b9ee06d586270a53e51b801e19b5ade0a1e510e70edd79c044806e4da14c2b157c0a5df93b66d9dc57955bd3008e5e9ed03ccc62521a8201611fce3242a2263c2089637fd6da15c964ea9a88c2806a46de69dbc269621aa096c9fbaab49011b2b20a4dc4ecdcc09ffb5fdfdaafe9c577e1a47ac4c3a4ca702543154a6e41c364ffae3eb38606f4303126b49c13b59bd05d58ce977d93591fcff66d57924f9aa1208e5a1554ab239d2c46474ca79791c97c15013ac370f9edc7d1fd1ed3475f7cc61c6dade9b545a8c66cc3753ca902488c7c0478576f2a808effce87376527ee2270b06c352d9a232908126632212be4909e1ece3e5be93ed5fa146dccf0c7dee896f77cc67d17b3388fde3a598ea35654d22e89ec551ef84ba74f184f758ae14b2ed22e785d91dcb413038e9e1b1e0e060b2440947a73ef25a2675fba4a1b84b321e57b407afec5916e06777dd805835ee95c12642cd2e5a03f8ae41e7551c2d8b474e139328d05be0bd313ff581f7ef9cc395bbc4737d4aebec213f862e6ca8a99cfb952a90e2edbf9b1366ccccc9b989d960d851bb92265e50c7fbf76e1e3f2fe847abcea19d9da25e77fbc18ea48a92958262fe27f82e107db4065b69ab63d8c0c3e8d3efca34fd8c000996b29df6333ba305c96b1c21d2087ae31be4e7e9c307401f0fabbafe1cc32c09e82e84969d9d668415974b6301a95d2c42e18f528132d827b6f3a92a2a33fe33c8b8d9eaaf25bd78cd490beb0489f20269e6c9da97da2612848fc18af3f463676f3235e766bb3579526225c334a3d6f22129a688861e5812307780d73c56d865b564428a207e4d8899dab5e84329b4dd6f0271a58c92dc20f5b2dc33b05c2c25cd5eb44fdd29677d980e7f737a7ba3a3643c03f3e340c4bbfb73ed8d3456ecb30d74fc976fd45d1ade2e83c64cff356ef763288832d4e280d7f3aeac4c760ba4071c9ee69e2d7e3f1ac96aa09c3c8d47a813ad8b197027f91759d32a227320d2022cd72d993146ebe1d986392b9990927a5162bb87f1cc9d5f9de55a683bc4d5695a037be88ce2e3d136890f992ef073e8b128224de07f094265d539673be02274173232ad53918dccd0ebfed5db6e3d9807ce202e6de7cafbb25ae067e8b4b02647b5c6f3b98eff2e8c846756417830452d98a880c0b987033660e9e236508b79fd2849739a93f17697707406e4dfdca783870a7719e432c5b32ede7c117d23d09058d9a2d2303f3f24dc5641519a1986ce5e5e5f335b3af7e1befce70bb5011ef10929bb678edad7a9d9f5ec8b1f484c91a002faa7b892440a0937d3e9be8fcdf9d692cbd07fb25a48733c0155080628813c9d864fde23f5a21da891f8b2ec8f7d53c2b3caa2710d8e1aac734e4c42134415184b89b491238d088ebccc3653af81c658d06507e0fcc23ba57354b643b52f0d238171b085f938930b32adfac2136c9740be399bebabbaf79c9e2fa48e98927bdb60b50915550341ee769dd0dfa75f454d23f8109236519ed6ef604f9e6385461c9b0e704dc9566485763e07be75296f301501357042e4a9fe16c2f8864b8e24c7662d7e8245e454e3006eac580acc9dacef92591f5d007b7ab50799fbcd4cb099e7b93c97f9e107581f349a93db6dd9755b5adff06600e887d6d51c00d50171ad944059bf0dacb702c3538a4390758db970d03f61a70fd48735386b272387bb20a42cd56247c5ea1e53fa104184dba0da4ef191691ed7d037efcb0f5d4472bd8c0fa8470aaf3d917eacf6c3701f8d3513d2cb86fb1ff2c5a41a6cbee038d65980cf7fbce0efa9151957e99f1133854606badd536725564a8e0d1cc2749097a1688ba170018329fc776cc85aab83e505f6e29de549cc7b3df0150ae69546f89db6505bb11862e876cdaf0706167cd04a629459566a962c54d857be68328774a90eb3a705d46bcbeeb08d689b6f5558ef3666d3c6a3073374bc351e242950e1e144b7aa09e927fa5efafe927fb99ceefd1354fd76056d2ad02f5a34d06b07cea89e714a3bf91b69b4c382ae08e364eb9a25f423bb0e4a2089be3816dce362bb5818252401d63b3b7a88b999742d50272159f11f51f602d5db0a5009aafa55af97e59a730e77fbf529461eb5539e81b734a45bda21156bde86d98ff23da2f23b52e4052eaec517ff390474055ab95a6351ec8c948e754356ba730d1186e8eb744a60a2bf34672ba82995b735954bd3c306aca26ae19570f53bed2db5e3d6f0cfdd7e8c0c21746cda40d907859bcffe77927086daeb54d655762656dc1f90586270607265fb741604bf88508cfe37812c118e5ea93c8276665b0592a24172be7d356338bf1e2509731c489f4602adf759054ffc5feb96bbbca9da8494a5f8361a8a1092a461464f9776ce0458d5f16ea1a5742df7b157fb020b4855766cf8f73b62322456cfa4657a4a6121fd19ed825cd18aae932ae08465337b81c454741d476274988e84349be69ba6bad40930140a06a69c945a4e7064faaeb42e08dc4ad91f924ad6c53291fbb699d28b1315d1c8f1e9a3c49a35d3e17ac341546f6b08b9a6e1009fda8f7ee648f339f30f27a8eea9cfeef0475fd655f54900e82710028d1ee0c18e3dad85894fd71055356d9dd939af54d2ad26c54d343a8f3aa2f27e5953db9907ad619e5eb324122f6caede4bfca147b10528a14ac35b23635f92c9ad48d4c5b1bf447db43ad0b8273b6e00cd5226d374d3a3d92a647403fde9ab818114b74f96d00e641860e6b1e8aab04c4dc009eec63c3f281a075a00c2e41735aa70a1f9bed4b1f6fb8e0d38bf0c9d38e578b43276fa89ce17c83d5c10242c0e537b2b7d0331aa0bdd26f4a0bdd4e50bb204b0cb2befe5ed73ea2f630661963f51ba5d40c78017a825c89eff33165069af767e19ea68f43f3b051df9e26523a70c6c2a054ac130fbce2c20981272a14e7d58905f3a633ab745b07b806e732e72ee8a10b14b22440f5ab04fa84669c7f013187e3974889e0df89eb67b1736aec9b4848e2a1d6413b626365df55229e000ae85ece2d2ce9475ea5db84622031ff7858a43509185d40842b90107462e69602589bd42fe2fd877278b04d9dab06e648887bd44e759b59c2e86c040ccf870155fa350407e6efedec6cba24dab71d266f1216a229cc1ae4bde79309a9a77fe7c990cf8a6d3c618f410ca9e11b0e58165bb7d07dc9a9ac92577330ce686142b8b6c3f18a6f8a87f76a99e901a0e50e8deb892969fe2ab739b82e9a6abb8c4ca03224475cd519b519c155db6ab9c782656f388d7b2fe6b1906b08cbb8d81dcdcb642602de30eed1daa6ebed0d5baeafa2fee8a3380201b0788cf8d9c62d7dbc48b5c778f512c959b625b2e17aac12df09124cd3bfa7e71bd5c3f19c1f8bee7393d34d9a3103b8a4deee8557e50818ffc8945f6aa69b27e3a3943273de3a277af11eb637283a149f8cf966f1b77c77aab5a949590d1256091b27e4ef9600d64b981b764594aeb7f9d8c70121c8e1988bd4a17cb847e57ac435a3b70554ec0a85eebac468f4d97cf35fc9ad72d6ccf9d53076d53ebc1460f0cafbd26915e27ced379fd0ad2f60cc563477d4afab7c90ef2138d1303f9f8cb51d59726dfdc92dfa06deb8b1e831a46010ef4fa1689a16f966d4914199bf90fb233af6470e8d4275c7051c2fa85fde565113ffcb85bc06021196fc26a65f2493573ce6cca3a7eb22e3fba9e8aebf4ee364cb55822f4d1ab2556bf2d42d062702be04bfaf6173271c3dd12a82645f7588f796fd1a2266a3b446e9e4d5543ef414c9f5b237f4bbdd4aee8a700e8ac74d609c621bb0b6cc5c24893d5b7046153a3f13d4b5c999f63b1d90d6c89f7a7258a75132c00e6ffb593a494242b7c7208155513adb381af1964cd69288a5a46eba81f8a2cebf41e60a4e68451b9ab7540458a615761c0bd93bb9cf2590f1972a2f1dbe626734ee0e3551bf1a111951e5858214e85177b52d2f7e3fa53629dbdcc005b48b0c49624d63d7252aad637c94e34702fe3cd919e99e9ce83905dc2efdd515966dc49468e5e618db4b97c835d8b0c99650fdac6d21867f0e8755ce1c14b5219ed360da175d169193cbfc757f95ab524f2763db202b21b310ca572141dc9f65df31ddef9026b29af17229b0133757e1e97291aea63e6dd234a60a07b660e52bc382bf18cae4e5f3f83b4295fb619cbef31aa4ca86e56ac27690b29522c2a9c235dc8ffa1c154dcd8540ea5593d11b7e8835d0de2aa2333c17d3165cc8262156c6021cbcf9fda8c8ed55dfbb7b85b677ecdf07227645b015a3cda6723ca0c846aca4a0802f0991de8c1b0788b4b3d87e9fe51f47d2a32f1d8c8dc5ab0ddaf159bec5c1799465c140ca416b2b715e1b42ec576acc35be2b52c2729a1635546156558f7023f5f8d91558f26c895ae4090d2d6d0f8e375d24b458450e9ea4fec9e7ded078333774a4225576881ac262710ed2ddf8123a7623d70efb45fa773a8b70cf6331aaddee452bd808184ba2577c364a8e1ccf5821cdec452066696bea73a02c486c88235edf6de4f72420aded7328f6c1f2776abfb18dd145d3e66d223f3a7ceeeae71cc6afcbebe91b40ca2a6c787422bc36873340876a9e5a870e0e9baefe818b5afb2cc82364e3b13e0a3370d277c8f87ab669c1a48e88af9031779b5865f5f332c3153e740fff954face5cefb02b60174b87ab7d1f1d06be88ed127bd69874376c8440844244b99e8034c8c4e635a259d5de020b2b2965c4f8300907f7e1f4de8caef47310339e1754a0b48c1e8d5d4a902900ba20d6aa8f3c2bb29e34bc68dfe76620ff148d6f8d0ef085d0a761694fa229e404d9df88ee72b9586d57b886aae886a47f855c2ebd9e656c36665c750a6f9a7a0eb82c40d8cca62abb30411fd54a8958ca8ebc05c87c728e29d3bc08399b6d31b00c044c6728713e44d9309dd56150f57259f7cae25be4dcc00e887af1e1c460c48bb13bfca90487c5a7d6c4c6729230e8798a0df85c496b1342fe087207ef0a289c1cee0a72642175eb704c178bafa683112ba8880cf359ce2bda17e8a6419c486a0baf7021c7d7b7f81eae5de653102c00203cafb070f17bce66b3df48ef023a26372f05781a485961342f0444cc37f2c21a888b3e6a631ea12fd793c98df6f40b45f525336838b1d66caa4d3078717ff10d9a96944a1c98093c00cb3179621063947f081b8fd1648cbdd1c66db7f596f5c932843132545e69a39c022da812d8d4b80c5099af277e9759888e4d90bd427c88ff6d67a38553a71d964022389710adda75a2c577a425c1fdbb5e77c2fb2b031644d51a9ce0f4913cd1ba4c98caae44c753d96f4fe06289fcf33cec1e29f39df9d99e789f6f8444fe1ed2fa1a78fed5ef0bdb09f6f104c4e2e2dfec946b838eef03ba01aba31b9b8d8d6d7e2452f9fac3cba3841f8ab02b69543c37aaebec5166caf022380c4da3d1334f2fa0ade60bfd24e59d882750d65b8d53472aa1f9564225b685880f8517518b49643d029e8af6a8c73b9317d4d72e435b75443f631ad7c9b644606f9aee8272165057e310149d34217946d17aded537fa70c73b1a43aa9936bfb71f94312fa6107a2670c2c16da346cb09595789619db41ec404f6c91e57e1da4c4309b4ebd9672e7ea4bda7d637c954f92ec157de65433077e1eea08c00e4f063d7effd612ad33a698bd8f46b5acc25ad9852f1d5263a4245daf0ed1ffd10788b7b5941cca0095376cf418501b666d121f875ffc5e80e6e20cb4eb1363d3e02c4fd1d6f515dc9fca8d2d577eb0b0ba40fab5aca3fc67f9cac488baea3780b5a6df3a192ea0cfd8de21ec55623067cc759467a230a259b80399746a6af03f200fa9b8a15b8b062599eb6414190737c91c72f488c9c1ae16d6a0bbfb78232e3855261a3dd6ee9a9e0eae84defc65a48bd17b189536604a60b8addb9023d93c784eff20f755c09f3f75637b67b8a7240efce76a56a79a9f9b3d248e3f5a7f38e213e43e2a8b6dc8713eaa1d7d60f889ddd07c7b47f52d15422046ed06c12fea2b06fb4c2bd0d290f597397fe352bc6f8337c9d3cf12d6abdd56873aa58d8189498550667d66975d99f4cc08424f6e93c342ef90c893bc8b28e3601243640a47d84d1967b7c6ded62e8cb9821b8523c36e7d1bd5669188a29585d1d3d1794d87c71794e365c03daa99a80696645957c745b385d500e448b9ff57dbbc2357fdc3435dea3ea8dc84eff9f9ef6bf42d230ed6d69e099cc5a18067231379c3d318faeeef762f688e68b45255f69c9b471d03b77fcd12c1619e6dbe435b1d67a274b7acae77dd17e27721713d9e5f1eca4f4816cb45c7d49189774d956069e2384933d7d0d130b21b3baf5e7d76a7a34803ed7034585cc0a254a4ff4309515a88ee450bdeb930cbf7703a27c344252ed9ada9dc86ecb45c238ae70be3f314dc7f6214700c76b848f7de7cdf7b00b24e743afaade2a1a41e142eaedfc949ee38c06404da4e3bb9bcec4c3a62e8cda2dceec08bf3133e2a7e68837844ec3f6ec1b61d3fd76f0fa851d8c34056070dadc58b24b14242df1d1127f79186b89e53558aad6cb4855cd8014d4dd6fcd7dc6d4fefaa8b0fca01ad88a5d497463a19bae35f22e8dd11af13d26bdb54cab53be0b14083289d37aaf9269263e0c0b388a9135228882ec26735a40b3730b3ed0960c5bcf0afcd19f378d4e56566772019a7f3f993d6625dfccccb5e5c40a8d4df90e2c0efcee3a06c6f88d6e461e1f1a79c259a09cc9796b8702a1a2aa17656e3b8ff13a536f00f6205ed3c9fadae9d5edbac241d269b813b9506f21497606f28bd39d0a645729b13fb2df265021a90cd8b3773d9abe5447b6f2cea7dd180c1b2dc65772d380544f0a1aa11c66071da591113821bc426632359e0aa6d4445256eb9c271900f46f69762fe717a273a08ecc535165b4a22002198cf77785f7b63318b1fa912edc848186be1ea3982b22d2ed5399d6ba1293d5192984c2b8be31c3ab6818c1641c783ffa6f2a5927fde0e0809ca6cd0e8fb3ae7ff0afcdf9d909a8ff1fd9107b91b10d65a42214de2a347b71780b84c1d43fc2cbb06ac78078789c7b1dc4267e64f5fda6d517a5ba9e9af1147a8316879a4e251ee2d91665d5039e4c75aa7e7c4a01174b94ae6d5a48ac46a7bafd662ec8831ea0eeda7d682488dfe73a96c72238378319eede7ed398b730d627e79e1ff645365a3e52e5d57eefa70ba6d38790cb2060e7f96f520b7a7b4521b00381c549de78e4f50191edd71177d7f649cf3b43b31d3728418b176fec48a36d5f04e28f83eb0a602e328cd14b00dce4a30975e1bcc7c07a5649266b457eab7b18ddc06077a9e936e52676ee0df6864834934633fcba5c8bde3b7e8558f6477aa1392a4b1b656b96f151731012ad1023f520850c8cf97e1d6476d4551257120819277569581fd9712c256ea235b21c06ecf1e67b4bbf782bf0d5c62f9e0041406b8302f1b1b6241b4045d2c7a62d0cf0d8ad400beaf557fcf13a82ef5537332f1dd256f9dd26ea5aa5bc11bcff1d86b71339c3bb17e0d31189f2e229647befd6853960b6b49ec26ef7774e0615685280013c473bcd470c3489bf218ecb768aee03b44def60e0446140dab7ee86337fd2ad0ddec1c9984d99f947bc268a149222f59b9ab105cde9089b836e3eba279106239a8ef02939b181261226e404e9f907741e665957ea81a2c13fd04d30786c7a0ce28fae6138c3b62a257e4d82986cf77580a40843366072f25a6582e6e2614aba63a415ba5f326f455d43cfaef8b7999e1e616fe43522cd6062bb973eb721548df4f9707159201f09c14b83d562c1b310454d488b1b529166868c395b013bb2f926dbfa918e384b256d09f241e9d8cf5b043319e7abdd13cd95e3203b1c190363c3599d6583de0ab60d1aac94fd2b2569e08b6ccd7ad9c11049027683e0d3eafb0dc883b20a1c2d981c395af8d93eaa33f7ffab3b047b8e6f0f313b5ec3eb176a2eefe5746c85c4875b7ea914edfded5dee5bd4f797419d85001c2589fd981fcefc8fb8b5a1774cbbe5854d8f02dbbcfb2f8be9d6b698f606fb92232464316c92c267b05c13b848eea4e3200c3b432be0194129c7bcbdc0c1e3cc10ac6f1fe3e0bcca11fbd59cd35dbb29f6bdf741458e8e32772fe8448d35d6a73a25fefdaafac58e8acc9576485f9fe804ebb19fcc9a50f0a28506624eee9e259d6ff8b029e6f49f51a5058a23b1bef3919fd37e1198172480c10e743d052dbea67d7195ecaf186081b7f6726714edf799650391fe3bfdfc542edba6a8590d21912d53f8b50764817213bf46c1b3f0fd2d976f1033a6ecd119a217b772d9faf63d9471a6eec77987f89aca52e9ea0bd4194ef31030ef832357a734b183d0d6a701aa7893c2a7df1e865491cd04bbaaf26f4b94c554e16cd158eccbb040fc42253659b97d5f571c84b51c9fd99a5d768458fdbf4b5011da0905e80ee3edc52c2dfd2b346be806be782495295fd3b40f81c7a9685964b245bcba1cdb4e2c96d8202d6e221ee5ee6214a2b46df6a0fac617017bcb72a61cad3594a1d9de92ca4fd62fc0fe5b90e6571fef53c9f9cacd0c2d472f127086ecb48d556049573aa1d36e75439e2f9c4f9862767617b023afbf5b16d5d9ebd098a1741212c09e179c713bdfac1773ececbed221a00bd44b1fd829c602297b2d2afbb6b765bda2aa3d3edb01fdccd820785a88d7dc51579a14982570b256f08340dea2772333e41a69e0c0d44444eb62635ab107ae280956944764bf5d08274084516f0bd94529f172a1ce2bbcdda45db68659fa6e0097ae015325f8ae835ec28d3ab095af9fb02513e3419e3508258eac3de5380902870790bd5b1495b8a4518f8ff65e6e99e492d3d115d2fff86aa6f10a5e914a16fd49fb3249e617ff2aabc9e7f4665d92470043461ea4041b6c7e0ac9826c2a74a37ac6b02dceffcbb8a2b9106eb24583dcd1bed133c46afdc05c3d9bcbf25cdd1773082e9c14b9b0e2318d06101c040fccdc9830c175bfe072454d133bbe3505407a6e46105d86105240e1ed5ae4d27e0ade3e4a37e0f47ef9a2e526963002d10fc0b7bbdbe172c597dd2f12ed0efa0ee3ff573514c450e10390c7608443db1ad7f49a71bb31a49ec262e340c9e86f97a192e27c8b3474040c144c05aefbe08835e7948bd6b2259a3e7c305c8c0004aa06822e7599ef2ec8d051aed10b81328db6347e3c209725fbbee803cd60bf1f95aba340f8bf618289eb6a751878064a044d00c2f1715c296dd194afa171880d0b184f799cbb3d071708f2b1228ff1af783bf83e08d6093e336e868dff6efe5e39bddb7cd3215083b7d52ca07e84c7b8a53e09fbafdeb297b2372748f8ea804724bd991c5f57f46380812ebce121f5aad5a0a497bd1a9f1984ff6895952daae9a9a97e4a1afef994022b107ba411213f370639ff118099d721994db429187e77029dacdd3f70b925ca0b1f82116728a71d21cc21f3ce8db1b1509af4a53900de16b3bfb3e5840d43fa4c3a1f211955fd46ccc031f5b21791e3d31e936529c8455c384b70f28d10ef338c005a7b39e05bed078aa9c1e886fc73c5c868ef16ebf723cdf52d931199f5925afb37a6c18fe32320439bd470ac38f47af964b5073803a8fc3687392aa9f20b8ab09983b6864178dd8a34dd8a65e3ac649661623d7befa25ac660d86628a32830fb3a7c47effcdf8c755304c63cec710ea1d405c5a1261193e930e421b05a8a6b30afedcda12a9f6bec22b7ddc4b36c78f932ed30635f7e8ab7a9d7372a0898c88ecac1e24062b239816a19dacabbf651f5447354c9d22cae881b36ac95c0fe7d22ae478add4125ce22811543c4de2e5d2570a4e26c6cf4fbeb243ae8f8a4f4aa60f9a077a6f4e48c063bd38bf80b8c20bf5195a4121c203641fe02b927afca78ae8c6d5b3ed0d07dee04c04ada5ccf0938592134e582ddae677ef8489fef2ace0768bf9b60f0eef0afcd4041b5857eb7415a7efdd9b89d671731ebe09a008ca13af4b218ca52a3f9f72603b5f3f27e40dc1e2de1738ed319443003c85b53b976aef7a6d2cc8303d3af1c0e3fe762bf0c9308334d1346f6a46eb90a71bd18bb9fea72e8578e5fef9377c57cae32f656e843b2050e723ebc89e887d98fc3e5e7a7a40f097335793b5b8da8656065211342e1b8810ea98a5458b554a53bd0df1d37e6bf14a80b113274dbc470514ad527a63e8833cbc3e62cee2de9d772d7e882b38403905a964df23682f93c5d7198ba58910a0fde61422df8136a1eac7df1a606639f19516e6528c248ef357074316572be70fee552c311ac8e8a592655a2dac55b03bdd235dca4a219593a646e8e685dee2d70410c491ecc9d9b06a509d5482b5891b475cef48ba270e29de4742ef6ebf8347ff227345904693bf3a521e7d5581b55f695290e75837132312e5ca5a70184c63cba617a8a004ab22c65fed0dae8a5013d6b5905850da9d9b0f73f00489eb72dcf8985b664e51b1bb892f9dbb73be1875c926e47f08af9bb75e7d7842bc4dcca7d73df1c497465acec8d443298ec6a090c968e76756488bd90907acd9ea489fd0a05a4d6ea390acff582252477071983f40973bbbc94ad1221e0faf36d5a725afdffbcab64683ac2b2b32a72f43081f5ae72efccd205c52c653887f575e8453f46825c6d5d133d7c99620404714e057adc51cc2923b8dcf94de1d482b6fb680d90e01079d5b04311fbbc08a827898b8ccf09c7bed4a1243f042a5724874e629db792068455ceadde27f428414faaeda2f6408457b0ca9cbbc4bd8f7eb3ae726e634fe940eb6e579ee575690a3778fa5416df518145c448b44eeed94aa8d53c0d62b941b0928e347161d7ce95b4a743345808bbfa8d8ef4da57b41b1fea43a5cc506b94adcc930e334a0218349540b4150b3dd338782a041f79dde40c256866131d4ebc02dac2515d45f6d89d28f6cd73e9304fe6f0c20de431eab2f7c4e761d275885f1b4e665cfd6c3ad99651f6f186cbdfc24f8f9880935b7d2adaafeca3bcc997a1d4e197863a67c44994e6106282d526b5335c691e80d4797b4e8c619a89257c58bed07608b301471228f85cb6c7f1d7653c00aea002df2dff17c933ca3de13e25a63cb5a642be792c0fe815957ad5cc0b52ecf4d7bbb3bacd7846bd0d9021cbb997dd5c0cc7f61d3cff4649cb068be0eba0572f391cbed0d1bcee5399f9588a1ba82f66c56b0ef5da1fbbdbb38179cadfdbf9e91b3d2d59fc6a56e7d51f779d3878e2044a44c536e55a4ebc6ebf4e8c3d6a4f90cd9f918597f4c076cf2df0d4bafa72653dd43c32af2696f2f3c59953a1610fe1e3d905ebe722b9722b0d5870a5c61edc388b905aea40b1dd52bf8257df0c48a4273f2fa4fa809fd31557d9d0b46ee7614dc8486d5a327684881fca6a1ad8dd96bda5f529430293cfa8ff025677d2563c61367b0fbccdd84dfa2f29113566ae7366413105e442cf242d82007351dc8c04e856d029056257d8180b53a28cd8ffb4d82a4fe380bf244cac236bc3987690665a5d35de4d6181b8d54350395c13aedb03db3941a3c02af1a944b074424429df16676c1c293a7ca3ead7fa54315960d4b77113bc6c61d78841bf132fb2e3ba182b6cb2bf7daff684976c603c1c094cdbf2322f25ac04ee9b18480aa23b122afec61977d5c516580d2622977af595e2848ca766b9f60b64c8d24d04b68fd59c1066d67dfaaaa875a8f5e968e7925d418e91713e07428e814aed8e0645e531c989dcc3ee043e5a5bc39cc6f6e99ece0034b53734bc475e5d72df8bbafe31ae2456a6e9b36820196cd48268c3b8bb223eda5e26fea2f9aa278fbc88bf9c65e1997008032c490abdfa3cacfbd83ace41c5c21c1ce655b418e273f26fe286d203e6a852bfc7f03cd4e00554929af09c063ef87dbdf4501618403f31f1a8638a44601dac91a592a015e9c92954b0617f7529ba9e62b1afc75d4b39a969955f0bc5363c1c0938e95d80dcdc68c40b8bd7258c770bfc800b099f3e03274e4a381dfbf87ecbb93ae4756be5d9c7451182b4cf4e1a90c3ada7e85ea7be6f40aa198cb67a830f6a2a7e3077784f1059b76f0f5e96d40dd8d40f4b91d2532c83481297c9570ba740174c6bca954b3c8575c7b51223e945dedec91d6f9480bfb68fb805f2ccc8f13f06ca4827f9332ed8d8ff7d791397ac26bc7773d68be2d6ef0f10be6d8d572adb6352fb66dee8407db84dee3b0ee16cc685fe00ed2699c36482054b9451085cb549605a127379293b41fb37b5fa46600d1877a2d38639175efb4f66320d6faf429e155a33639702ca69e4cbd19edfdcaef123bdb849d9017a57cd223a5a28d028baa50b093f3b7f304d3b8e054bd9a010dbd22a2176bb0db5044397671c979313ea4704287fa70e077e02e3b2dffc37cd3df706544203cfe8f6d5df3aab3c6933521771a53c4314f94e971b71b915da0294e7c715060b81d3e95a3b684848f4193da9a5c54e2f4ec57ff890627f8ce044d5b0b3b9fb37d7974ebe605804983243f1f3a345d72c56f544a772d2a56bb220ffc080bdea8d73cb3d3595e2587550466487f35a6cde1481f230980783303df585217a87e091b8fa4f567a08aa4240a2609bba1006eeccff4fc0ba5bc526faabf4dd4ad1189a3bf424fcdb471b88e9ec57ebce6e5d4ceeb979f51feb625a5bbe6df4a54e1c6ab0a3c7da5d89b4704b9f47b700d985a64d3d160248594ada5a3f7e5c16824e2e1af8e22fa5db83befe911b82cfe5b0f68158491b87705ec22e8f87cf5d18ad9625627afee7b1999853a31748db4b38f2beac825289d85177a58407820c62f0b0692f4e05f2379549a70a68350609f1cc9e92afec129cee1e653c5f378dce6eac6a1f10b8b729b000e39e3e32ad888d8fd19800546af2f0173febdee0e2aad2ac5d6ea5bfb6543a578e5f6e61556de7f1071953e37913079c00ba68094d2ac6c9e391e4a7b359bd1e4e309975da8c3875076dd7e9d276f4bdea4a7c22fa3d5f36bcefa6089fae562fb83f243b76d74c4ca041abe8e0b5d5bff4d3e0935c7cec7edc10ba1ca26e36b7c23f9e393699d41ffc4d66bbdae86ab7c54212bb0998f247b9641e907cc5ed60c18a72679444854cc23ac09b014902f30ed6233f0f9aaf9c73d8e992c681e2b717778adfdc7ea46abdbd80106bf8db61718c8e68a1e9759698eaf79ccc94c68b5a352ad3039a7422458a2895b086b7303ccec249028f4f41fac4fd714ba802e93c417d8606153b18532ee6749b497b6aed4f8c3487cf5b9b1ae87520f5e15f2886b934100ae57c12bec665ca1b56033d79ad2b4954085bb302c85cab96ec0f2f280f8193bf4c6f45224ebee33ebc1a6efe7c07bb47beaab83f7aeda79069e715eb555bb2fd2bc06315ea2cdc3a8262c7963729ec8adf4c59eddd6a95adbb4836712628233179bf670b1868e696b17a9e97912491d73ea81750d68f2af9a482674094e4c213968ff62da773c4e305956a690a1689964abfd5a1d6eb96b31a3c81b8de180c800034a611aff259f8b37c949fd1ea8b0b0820c17fbea12aebb3206a382ca0025065c91a19dc6f1e7fd6cefe8eb42e516a97182d7dad6b7fb76e1ede579eb52eb481e2d2dcb5ecca58300079718394337e541dde8e7a07344ea77681867d5f7f12c4790ac1bb4703e2d054ffabb0b836d801addbffb9ba5039856863c0a3c95fdeb77e1b8446af40c115ec86d762d081d3c86812d4e2a0bc251eaf9248a34dd8a7acb2ef72446a61631b1990fc3445722e6adc78dd7c5bddff7b3629d9344705678e50f2edca83eb31033f552d70afa1ba6b038c24e4e9aaf8de7cd367c126c4b80aee1dfa288e58ee4eefbc9a6280f66e18e5c73bc71dfe72164bb8d6ff43e0fdf08201c432d9b4ea6bb326031d8f1ed50e874564ab4c15a3f91bb947d101c9be248648c3e51c872e8e86869d11fa4d03ab197d71927a1fad7dafa47e3587245d6a555295bb83354e6fa2a6f72b8b7781c7e8c0fb1fc15f9a4d869d52dea30e05ce014c70a9deb2dae127ce7a15cdf64df941ce3e0d7aed84ba53e183457b0cebe9e4ea423423070cea08a78c2b5997dc9f9ac81d050ec93a381570fc4017ddd1c71bce687bc446e4251df433da756858bb92eadeb174727ce5e5a94a96cc90a8f9878a20978694e1d92eca4f80052f01ff7356435140f2a3d57a1e04a6f9deb77b559fdf5a18f74d03938a09374d23d90444106c4bab7edab36e58bb740dc70fa0fdb821058cc697aaa06d46e6e5305526ff99de1a34a690b752996504607f3d0edced0b545b4ff9964283055e6ae277078e4e868b0779c223ff80312e334c3f3b42b5c04cb516d010ae22ae8d0c2d7a39d376d461dfd7b49814a5b9402c3ef9dc4633de563d04d64bd621ee6751bbfad903712711555c57a5fe170506ad455d53a3652f96087eeacc60cd584b77a95ad589a49b47bcce7af3b5ed0008c859e884567bbc26400b85a9685a1785b4b20986a3bfa5a1b2bf68a54a05439c04f468a890cd490161e27ccfa0e84b04b4e3b76faae48c8f6f499dcaf6e37914ca25d04b4079f769c4bee3f3b0baa3c3d379d69f8d2bd6c29b8fad748e5c3c5f6026124ff7c558592c8a39d9998542a7d51b3a50f05c27e64af16125c485677f7f34d65ee1c5bd705ddd0a4fb0a112d3775a083a1ff7da1f653af4a30992fba90097875a529d7e01665ac3d9a44b137d2862cab91856f13ee1e0481caf8af4bf00f58cc2a7e3e2219b9b6af712c121d21606cdf09c2d9bca4408b5362c8fbb7b7b4ea444919fbc39575eccf3f83cd53fe068c50e40034547a3306fab939368a4cf88435014d79044ac7ac5b6239c79a7e584a300c33be27c83bfd136c098650b520beaa4eca1ee172fd1e8fd2ce2a195c2ec7408801ba9d2343cf72f59dfa3b265c98b7703cd77656afbe1a652bbcfd8ea022aa5daa8390994f471fd7605ed6871317bea978b079113daa07f04bf7262f47352bbe99145b0bf232e0ebfb29ee49284bd9cba28787e45b30c8830d9f859ce9b2e97174d0c319571426ab3b50cbd83d9984f1fcd3bbb1a954b383037c5826ab22db9c8b4f2f98bd75449bf06f462b5e1f92860c16d09739f0a53f321d95e2a68a80588e57b2462fce9152b3489100830193d5d7005a1c4a6e294d120ab86315b5dcb50caef8a237badd8dddd2d3a89c43340fefaca2d504283d139dc44f9c871e93c15f3b89380a339e55a2ab9b7475f58979caa2e64e68e10fbdd321469e29113513915f5ae1eceb0ca5a23656e9a3bdd95aa621675e382544b0862533c438cbe8955e666754dc72879e23064e5de6b37c907e16178d7694ade9e190fc69a5ea632532e71e7b8342cc7bc35985ef6422eeea907f435a5681bb76f7f5e1a5d591d8a562e0671adb337a42ece61ab2031494bbf94ad5b2b454751bf4db2187542460c4eb177b99cb98dc3d6af619317f3c9d069386b0236068d905aafb3aad9d0d45868e6c8e810bed1646cf3408bb55d29f79e2d9925e081b6eb29fcd7952597ed5d10b2e8b9420c09021239ce4f4962ebba5ef902c7b384ca6477580c9ccca3fa7d9ca959e3a843011da348d15b49acc1c9f033e0e60ef0d5901ec705b3bb3b4e82128f805f45c49d31a62e56495c1324270a83a4b77130ea64c1ac04adea119d938587762066e476f2d7f711ad212bc1ac853d9a337e3fa3a904994cf91dac3f1a3217241def02ac650365951f10dd623446ce86037496b045a48723f720975cf2b1e4bc3c83fb59909da35ff8d8f7268eb7912a8224d212ec57f4582d6f65bedecd2d7d5c5ae0eaee83022f4a849003ae702b0b0c97d479708a8090dd5b4090a375959c9bd39b9f59b3d8a8912d52de3ca7e63b054841519c256798b4f3954889fffea0c0347735367bd7cbbdc0edf0ddd0a377c13b973447fa04995b2be1b5ca0cb61735c385eee4aca72038194727fc161d63b648319191493b66702007ae76a8bc0947eab5156007eff611c07d17bc8bb8155f2cb916185a291b05cf6ae5dccd865252aaa3a9cd941304fd9cf072c0dc28fe3582d1be3ff13f5e7ffc986902888fedbc7ca85abcc0d96e726e4e04f49716416aff3b902c8c48c14be1bb785f194bb86828913455686f84e4aac6d7ef6ce5ada6c51f2f07aac8544cf3df1ff373689602022a9b69b90d2c4252aa621c5f20e78016b05ca9de11ef9cfd8cc5dddacce28c3654f14b86e92a8358436e4776efbaafd818410de069bc529cdd4738d72cbad7680fa5c82ae45b938878d3f492653a00feab2b9bea8a14e2ebc3c700eaed9d71b6afbec50c0d1f780f10fe244911af023621c084f1cc506be376d80c9213649dfa23ffb886da024d4c050333dd88458230c3d7789855b6ee9a295cc053bce999a7dd3c75546d3832a02b043bf35e23b6cbf28fa4a04cc2e48fe22b8057b6764e95c372de19c8bf54445908c8bd0c5cb77b4dbf16bb558517bf3aa83fa194bc85359b201d3d47a7e0b452ef12abdf58013a6c3f5388bcce93054c2c660e3c07cb5fe87b0e3ce2453ce5dc7d0b9a14070af86b13d428fe422214f618bd038c042d11db957ae0170fb2b6965d4c5a757aeb1fb165841a927df42539085ece5403d7370c7920f269ef5aea1d41367fae1350e3047fdfffccf08c171d321e9a8ac7ac8ac735b4e52300ca003d0d10ddcbf468e82468e59f90b6c1e6060d1f0d3b0cf7d336b5769f2d7817d81e0e53c2de73b0616d13553c513d74cb537f0844e2d4b3bc85248e66efe1eaa6d3ceea1d9756fcc0780ce8f33d5acfaa1a66671077441ddf1b66b0a6ee8ffe85339f1dddbc56bb786231cf2107969e2fc2209082987ad80692289165b15c65abd0d493fa59d7e430cc50065cc60da6b632259e89960262d86621995a92fa194e005ed5df7521d0811aa40eae39beed673abfcc65825d83b0383fda39d56a889a01242565819f82bcd4f22fd059f6739533d44d7d4f4ab4f44355ccb8222a47461326ef578c3302c73690817a9cbcc0e5b878b954cc473d395ae8114fa89cda541cda1e4403aa658a0a4205bc9bb88fc003cfb4c777c8b49e6786deb6d8a5aff9d37de2ef6bca5744ef4cba2f3a5fcbc3cbd4e37054a59750320b588b78f6bbfb3c85bb6622e4e6530b6989b7bbb92e5ce329f1c4b271755c6317a72c7959870d1f8c938afccb12724278384f981f6c00507d969e909ff3c8a255cc46cd33742913035ec1a02c6def998acf91aed833d7965420a0773380f30941e5c2c281c15c3708e8fcec9f69f2d2796a69e44fbf57935467738635971c6793afc58bcc878c701f5da1f6cc7bea1a18702cdc35876f34682a9c26a6de9c8cdcef33545bdce6a2781b14595e5ebeaba9ad7df206af91379ea767f534f23808f067e6db7e4ade812ee7427487b5674bd5b742c0a44232c7366749dca1f0eb65914b3eef69474573c952287364cba9236bb1f7c6a834da69e6c9e4e8a556bb0e0956f82c89d0f2398c6ab63638656c3b35a368abd6e4387eb0d432a923c7052a7b9deb3f8f8fe8639e8f2c39cee0a19ef3d5a94748433d48c5d18209e2566eb540d65ab8c2b92931dd337d21faf4b34e644ec361e14907a5d9a8ab52516e3227d01c15eab6410ec322072309be257acfa8afd0afce2fa2cc06e762b21f5c58abee3271470cc799ac839b21b0b40c65c2fda2594909b9da0cac0c033bb9a3b481b2ad0a61642d0b078ed5b7f724264f7dbab6f34362dee3e26723a02e054f77808eccc370e4e9edbfa1d0c462f2c2303100ee291149b50d5fd9eee091a9ed1a004627958b730faebb0ef00c2a76660831a5e2611e0c65f2b65a21a48468a8fdf9a15049d81ec0478eebbeee68a6ee9fb2b0397596e2dd468388501d218579245c746309957e413d8db8b1b6eacfe8abfab73bcf04c3f55aa1565f1d0e0d2b87e8b8075544497685b2f2ca60677d2e1383520f380ad9eda430afc366ed986b3c5dc6f7417e10328360ce3e0a4de2c557137a3907fa97b5a29ea943e87d011bde9f022a57cefc718efb63acb131e5e3993515087a91cb6d1bb455083e2ec670be4d4bc1d30a901caf32684ae64b3bc911daa9a4081c700a9a19498b7f411639514c0dbf089153c4f3318de700e9bc26b0ef98e253eee6296473daeb2551dacd36ec95623e224b81f9822ac365fc8c7e651f75e441ddbe2adf84dea06f96b6595bb0b8fef3d05915782e85286fc6751e44e3f4417c775f31277a44a33db79052bcc9ed4655ae0b44cf0ab8cb69ffe0d8267d12b866cc7f072eba667c4ef0899de1fc0051dcf15e5b44e661bd9f8fc09dab9512a812d316b7d4a44186f53d506790a3ec1219fc1b4e6f96c3bbd2ce244a2f1d2aca5f556c3ede5938afac925762251d35a33b1c340cb7e2960bd8058b1e7e88fa93390d662cf1dc07339d062d3ca27dc71cc231f9464345553aeb14874a856f4c5d6fb087e21a5a96f9eef443f93b739cf60c09c7f0e77fbaa807800be8b6790860e6459d6256d9c74513a42cae6771a4640e05ac590301f363c763d1ba836b9bd33f1ac8ba435cc4b0b94e3a3aa15be72e94c657d8ebebc15a648fa6fa151dc8f8925dc92d390fa24b10f8992c369ed40fb88004d9483e7f912a327b7778dec1b6ce552f7dc9b434e39d30d419bfd31fccebe9504f16419d56984efc4082cfe8ff45d495320d6cdfb899b6c42af0416888367af958817e41db1d97f8e2ff5ca70417397c0d170015441b88172843f9bd05e7600af96852ba2f051fdf21657d90ca28f040c6c84c247ede8e079469a6bb77d0348c1511feb177e76c127943d037bf26ae4e2d861ea6757aaa3e3dc2304e96bd7b669e1fd82be22b0dd8680046e7340cb9da1b5f6ce614d592afeef61dd28863f0868aca038514cd21483abf28519228facabe56b40ce6e7e23aa5e7e859c0915f10afc14676d6052592cff81e380e28f26dcae38a69b43d9195293dea1646fe9bf26cbe720d5fff1ab313b776770e024ad9d2ff32ae4ef54d3ecf7383932e5873289b335d0f9286fcce65cf603cd1833da1d071ac38d69305ab4fd14d1a3af80802d97fd827d67edfd763895da61212518f6721bf404f6a88ea6f69ab3ffb0bd4e5a237a65a1e55faa7e40a9539c81e4cadfbac5d8a5e27d5a05c48ad6c4e2ad9cd10a21def08bfafc3d041282099b5a9fe10068466d836cf6d2448597ebeb6a035f670898461e61413547265afe98b1864538ed40313c00aa3675185370c44fcf35f6b0fb9e69eb4456a9bdfc35f0b8858f6432ecfb2a3017ab3d85ad6ca93a18415dcec46fbe495645c166ba66d36719b0113323479f6818b58a4595ced4794fbddf0b2f360a8714b6c29ecec655131d795d38355b89b57abff6a6f63af69e384ff58565926779c9e954f817406503c4ae9219a5f90489e6733addd8ba11abf666d4aa32b3ce5cbd12a2c301a5757491b3400c997f83c50ef017d86c8c904a7dcd1d463d5b349a7795835c4725f5e30e44d24161ce9e0e409222799af374b9581287d29e918a336c55f94314dca3d56ee8a0a848201020a2eb01175d9d85d8f071cae33da7af35922d5c974eeb84eea3a873ee910656758c47c6629f44620ad2052919decabc2f2a80a8c7b753581c58f8d2230950e508e8515b0de3342494577f412d2ac1dc6c47c6650f8e94de9e85890d65f5e4dfeb49b6cdb469b154361cd44b6c2ea5e154ee64a2a78fb24aa955a1caf70c0604bb79cc630765eae3a9c3e6715fa41f7db54ff12f91d7e82c7426647e945db77c17ac3258b17ace148a8e1a936df599faf26cbc004a434868a33ff0ab381913e732ae1428a83eaa344c5057454e5caee9689a9509ac765a49fc6c53b252757a2ea75acd61a9d18ef8673691142597eb829c21f9a4a425a6154806e7d2195ee3f210ab7eca6b6fbedae1da3917d31052844f6e5e0a116fb99f0faf43497075b853257cac197d0bdd18b61308ef21e01f321f70172e8fe424584fdeb6db7669c569d04d95dfcb4eb6a2a9d9d5617105737ef61faedaba8fd693e3b77ca279fa5cbbcce6a9beaa4880a18d21d69fc4d11b55607dc3c382a30c651c01b2a1478acc7b3b0d952f387f9b0c1ac8526388bdb7bae1f97f74cb5b2e780cf0bceed1e15abe62eaf60b0c94b5d5d93f981a3d90893f0987ad90a018c000b6220d259a9fddbfd8674542dd98334e067593c2220ea167333996415f34730ff5d864f07ac4b62ff08f838142f60eb26577fc6b2310a36b73555107f69379e5c652b3c2dc9fb4d66d285f8d604d26ce7fc044fb3d2637e0651f340ef1e10180e8ee465bb33e49631ca7ea64ad446f326d85a35400af7db5cf8bf48473f8d1c069405db5be15e3c50ba611966908c47b664a5d1a5ccca0191ca9b34e1037a50e3079827d9b81ca1df0427cc899522da1b62260a4dcb85c5e7ee3efeb184d5f2681e302750fe0cbe863a13b4ac71b20514df1f40abd7c92ad5de60d4dc0286754ef995513caa38088be0f5dcb228132e642c41b01a2e45ecfbe1781e1bcfe9eb348df0312aa868e13575a546a6625c6fa515760c7bdb9bc668ecde06d4baebeb20fa7fe4338377b8a64c7c88c6ed79562047f054e98151b59e037a4f37de3db24102239854eb53513a06be24f07fd0319fdff7f5fedb7b84dfecd133bb7f48b1e0c71d80f93c7abacecb222e55090f367b3a260794e0efa84aec5a5aa5a118da72cfebd85ced4c1f02a85027227f124398b29c6b52ef2ce6c4c62a81999de3022e05a8207269f23d839d8445f583c6fd9a7d29fbc9d8c5642b22115c7ead9db4f011900db2bff93734603095819ad90716f3ff693ed95ce7c28a8ec299f6f1d7c4df3e119375ba73261ece9aa36bfa31d9e1a109a01bea9f87f8aee8dfc6680d2601f97d52ce4596d6e79ddde8f04aaa7c30537b30e33b75ee9bc3f1010dc17daef8fdd68d3a15006690d757c3daff55fde561cdd8f3efebd3443a737014c6f8a32524e0a4d515b3d81837b8371da7606ceef9f48fade70e236ed0c377fcfc80bad51cbd5c43b4ea138a574fa6c5d25ea5eb47e3b75d412b4964fcab63b93018c10af97b2510152f491e54f37a58c01ae25de7a09f31186902b82436c9afb7ea43db3cfeab46c1f5b85abf94d6760ed65b5a8d51cefafe84c72eacb32e4ac71a41b649da090ce348417c7e7432dc5859c6a7bb979296c7c74ce414086d1e9b5b6f5b165145c0358e92a31e29035f3ac11961bdf3917699ade1b80c7db66c2e11e415e7ff0bed8c610658244b4f038bcca045e6eed14d7b06fa756ccf013cda0d19c1d4fa2bc452d042b69b1b53ff415be5ee201adb37f8d5d6026afce5a0b681ed37c8299cdea78a16637989b69a90e7805728ba3f16a040a0f148b0b67dbfd09b35f72b56252b3e57286ae46b8495fa35967512916f5c9261db54520fac953ebc718c5dc514be7871a7a03b7f6886e771a06c652ccf087e625089e3beebdbf6a2544d716657f57824aa43d310d9cc4544d8baee86872181d75f694cd13d07ceda7965ee2de32ee156c09f274ba09675bd6ecc3f29e155f80b44d6083220e72c530bf7e17b73b8bf8cc2ca9f2c06916b73781708bc41240471654a6bd56e12f7189d0e5713a1ccfc714ef1d4abe01ab5162be607b977d9db327e1534af7a573efff3bbf7abd3556e9d9f2d5379c00f2eff60b617ec3a9b2374f1cd2c7caf44ff781acc009772596095645a119634b2445424be92425df524eb6c22ad1d6db32123bb53b634f82431f1026ce90e7a71d1f723cf7b2b0304cc34a6b1dba2c446b94fdba586213715e112d02c6762f99b554244da0950646e81bc2cd3cdf24f5ec53e863bbd9fa6ec040e147525af5a3f55aae976ed28bbe9414dcb25bc52a0d6bd8246914679837b17148380e0f5a1fdb23982251ae53e958ba4685c74c541d650a7c44c4cc5848a8d4abdb69e74424f2cb9c7f43c78a24d61fac81c6a24326f5f666fcd969e6f7e7ec4a8f35358dc008b9eadfd6b1d00d64c3b18268df0ddef795d9b6f916907a9babfcda4c4d454206e18fd372a8614ad7c72d78c2a15501ef24811b87769aaeb31ec1e367d38b6bc65aa8c913c314699f296751cc13fcd44e0d0139e0d9cbc54e5fe8723c58872259064272482722f51b8e4c9b22abc91765056f5c5bb7115d79af6a188f4c4f5d9c85006d4bf5fbc8bc4334f2ab30d0e0d921244a4d27a6b7940023fe43bef67355b9a70a3ed4b520d88d68d604cc2ab388df43ea2b4cbf36789f2c8172d69d4e442ab744e82aa82966b07b716c528480ca598f5de492ad6a1ee090130e926773d6604661088a055be1e7aa9e40308ba6d28bfb4e6675be791e6192a6d583c3b588b88145aa824940c6d43097bd7f82d37b71f998e3dc4d68ef453d78118f23f8e5db4589f7868a9698a32b1eb0f9b37b8e9f68017141198bb40621c8aa41b1db15ad6eea7d1c30a4071090bfafe5103e18892e0ba4f0fc372ac75c7f43b0ea6ab50d979405173cf27d2abd9ab8cdec2dc9e97c2dfc11f61e73ea242cfc2c787b3424cc50223e51de442411d4127fe84b43cae094d7513484194120ed656e065ece549528f28eb451325fcb78fabf5ea2716a14fb9bd04276a147af18a789e6ced1d540f3fe8a85dc98b0da0f8fb29cb03c47af53209bf5bdab203b9844a4f5e0838b46ec0bf17571ab61ab5265c9a3f9a589b962a7975c51ea13e2d49620dd98794c7b4551d8ec17ab881c5bf9ef579e1ae035559a0ad15d3231ba19b16fb869417c3f7b018b442a83678a150690a8ce3bad8251f4268a5319267de7956684e3921218b0fef264e30c9848123af63156fe0fa5555803962b03068ed9d66dac04e79b927df87bb480041056560c602f2fa14bd4068a49c9bab98c94fc22131ab95dbb81ff8e59d6184d1335ca0f832042fed214371a7c286608dee69da058227bff3edb135193e616dd08c67e62ade6770aacd704492b53b318822cc36f61db09274a5b9b0da519149c18fe8865b08a009d5841bd4237ceff5390a993cf50b761a971ae720aaed72bd23601f69bae57f05d2544cc0348f03e95e8682003a8cd1f606c95b6d0e4bf59f1bb9a5e658512fb465a034ae0f49e8ba0cc8cdaf050a14b6db90c98b0d09adb702eda22c11986330fa902cbf9f1379c2b1a78b65955f46b689c85077a44c50f4ab64a100520a050382263c9b99425b9aa95edb41aa74d28cfce49acb065626559a28ca512458678a8d9336eefe0d6ec0d53163769c7e610bf77a9873b24ad45878f9dfc309d19e99579adc27e10fee610900a2e551ec8d03de26a7336190d5003070d0adc863e3676e53974eb4d4d7b7f2a6d7075f7e39708d437e648c8ec4f20f09d3ba2135829c9f5e41c3d412f46ab435c240c04c7989163106c436d2277eeffb5e0d7c1446c707b63b8ca0337eb33a854fa21b36fcf2a10f9914952392e4d39d0d152fbdc890dc447ef4b4dd9542e5d5358fd16f3eb4eedeedd7a015cc8b5649ac2d8f355fbf262a28f412a85199e1ecd2a2101a8bdf7ee5ee0d7545c29df995a80d2aec44605e94fa3c64367eae9938dc09fa8591b89738b7e7a90aa0ca0d7a3069dc6eac46a759abd0eda433657bd2d876a9a0b02c5a5ea796e0abf008b81ee68f0fbd839d4981df29d4624e499d5c21191f490244ffe8bde934edd562565a900ec227f9630bc8ef7ef4ffa9ad93fe7af596805a6a84918b0c077607b253f565dabd136d56805aa8eebb711d44fcecd771160af21112d876cf7902c46e35b5f31ca02d77fd459638b5824fb7e21ecf82925b61073960c528c18236c4ad440d55547adb3444649ea6e1ee204d636726c44bb5f89ac258b6eaada3a3f1d1e6341144646e4a98854a43bdba5f3c2925ef804a7f7d5004e1e817ed804c1a38a4ee536af6f3e9a79ff6992d0a3e608ee48f3b832c389678b0ceb696cc7a62216aad349e6e403aa2f9afa625b87c805126c478db2b9b65c8fa5ca3427901a71cc83d28074aa15415272148d2accee570aba08a0f582d04c9d9ec4dd3b82194462e6567c79f31ac3f7f0252a25d5417098b5b6c41c568b5a05af731d23c44f738ac4e19ef61def005bc0c03bd781e66c07e88e469951b3a4bd762fe60559412716e62c0763ae2f104b13308ad61a1379a9cd3509546174e000cbbd971dba4d21964a8c759e9b100ef494bb4afa59a58f0f0626fdd65c3787feec238808561750f9a015053aa5b0a53a990e3ee5c16e29910f1ac537967f0ccb9c6ae884bcf06026fd98d5fd6a46ee01b4f589e24fd82b072afa3abbdb7acc29b583e0d3913b633f98e60d8b3eab04627ce9469dfc620d59cb2059551234b44fe3d4376f912700e66091d00cef4f7b4515b26d265bf35a66e2894245513d0b5326a2b6876688c6f0b338b32789443df984441444b2642330f316b70fe076566eb4a628ea834baa9d8f1a13ac897c7586768d5fc7b96c5fd5dc488c6af93dfa3db9f3a86d4766fe3a92f6294640e5f45980b0e6891fd0399ed36257c1b1ab60f03fc4a49a33a739d35820e372505db740c0c9abb031642d97cc011a57f63feb2c61916f8942942af038fbcb986d50e1ca2299923b00de85ae103a1a0cf4721ea612ed513b140c62f58916d66b5d6891978b05823f5c82c749fd584c7586379641f4052e06500c13d7e1dd0e4c6e28fa7474ff87394ae7d23823893429ca15b59e31beaebef32dfcbc2b4d7d9a68431ce0934db0d244ff250cc4d3d7831fa16efb10f8c9c4bf8be2fbd423451f0cd603723542159c7c3b14a5708f0461995facd6f0a8181488adcd4fe8fee8659ce428d8daa9af98771174edb36dc1a2957b29ce3f96486423e0a83b620987f5dd62b03d19ff2d0aa83c149157fc429cd22571ea47ef1517dae8ac91a493fa3d5d0ce46932004838f5dc118edd233c7c864b1e7feff9eb05c30e04d67c74d66185001ca050d681f81c81cc6eb4d894cbe4b42bba123aadc85a3dba8a9b310ec4332295ed5959f3365585d454c5a4938f83bb6b0d83f885285f782db9d1dade9681783674dc84e3a0960fb1ac7749d3c9b2bd7b7608015ff95a9b67b6f53d497b6f623117de84df96610a81fc45f506cf35b039c260a05e6066cc7170a2752a8b75948bda4ce23f1ca8f33d3c314b69ff95f6c5f01b9702a7ebfdc301d70a7174abbebbbd11a3471556def053c45865bfc5693b42cdf70cf7e99d730afac87a6d456494ba014ab06fd5b831e9f9c2ccaa6b71cfe6ea06eccf4c65c96d432364d0ae32ef51c57b879fa8366423cadb02ed81da424afcff8782e048321babdfe574583fab87c0c9c2502e40650551d14af4dbf55680743f87ac927bbdb267473210ee779d8d99dcef33d55e761395228f43daac9dda13bcd0e8bcc638fd1a970dd4f3abef86c432a3018630de97b4784514fb2230d47adbba0b961832f8ce9d078facaa852b1f7664a2fc035c22c7a3292d4549f0c724abcb3af1d51334afd7a8f546167875efd5575a7bb593480f288c9ee89343731bc0fc9752159fc982843ff61dad65c37403bcd8d7255319df207fb0876645bdf901351bea3ff03aba7685f978d2d2fb26ae8b0a044cb965d32e2d0c582577907c97b221286a4f78588ea41c58bd9846b166fe91043b992631957e26fc12d883b7ce23eabc0667af2c2bce3a189ef8d0b22ac183838799db657965967d289ce6415f9a3eb8383abd7b75b797fb0e67ffcb3ad8786c8f597b4ac27e13002b5f2bff2d5d20f2d390d18f1d0ef093d7bbcee7c676845c520703a6ad76c87819a22f8e0ed8e635e36b47a1a243dc6a31dad5c2faafdfaddb2df693db1a19523c480e2b97ce5bf8962dada5d31c48547a8a16a61045b2db5cd3b32b0158748b74a0c85a3c18b1e1e481e4acd63d28ffc941a86a9af7e4999af422283be9444280ea3c9bda417d8983780642309c90bbb070695b355d6532ae6709abf73d16cda868bcb2faffe49fb90bcea374384328c53985646fea7ad5a635d0e83f19c959fd0cdd630bfac2c1e26d4b07a055575909a681d6db2cf4e26113c8d866bca4b34b5b7741fd510f06098dc2fe38f4765f343d5823bcc8bafb452749d798b33090abbd8d72923f54848b644da7517fa483efff732cc6b001729ab5cdb47be4fee1c98bb391b5127d88eb5a1dd2aeb2f59d6ccf13eaaf9fa5b192dba18ee82fd20d67c8754c611819cb6fdf3459e7efca1e9a650e3884b8529cb75af35da1679a02416c809173be3986f97e897438b4d679026ea01290177c43b33092ff61ee672206e5e5b0ca7227ef6c07d98eb19e1586389ccd79536b6a49135c08e342f907d5b52b9b7703b800ff5272c6b2b3e814ba0f1f5ed027612ce557420f3a3b55e9bfa90546c7e5ba9bef64df9087a8f96327542027d1f791f7991d1e18fee4c59fce4e1da73259fca8deee3fdaa1e50363ba731373a2ce8173e5a36ed1627fba76d82c559edfff1edfef342e60c3f3e27e22f79799240f08a84ddb0145c8bfc41ea67031e30bd02f813418efea768e978b737575d7de2343ce04c6a90da619cd5cd4d63b6a30531eb62a9929083e82462ce62d0bb1fc6bf67f459534f4dbd1634765c4fcf6c0fee646d303ec7daa573718f5ab5c70759a3b74e53ed958f6b1819fb52a5440b356100c3b1564fbdad643a4e67a8e51cc211d1b2e78ebf71d7e4e63a6d8fe8aeaf9f8d25f99f96c84c907b1288c26236487d6c7a8e6a6efb142af38d787addb3e4eaaf81396e286901b0954f69293c47dc93b54bbf5060b3c0eebf0823cbeef85e724c6250d1c59399704fb9195762d706c4df7e7151a473d8e82d80b96b7a65d8ce5469c0c21f5e0b74d4b7ea29fb2a0d1c65fa6b5c66739007546b708c3440bbb55235f894da942984a251df9f4e0ffa3116e7ada5ed4b9560452c7c8ea04333d7a8d237f26d28ff33b1a51b8d9a032820def6e511daa7749ba49c957d3224e9a3ea406d1462f967762c5320718fa8b352fcaf1d10e291031718dc5c53252f6ea45a58543f8ade00e849d9f9f8daf390f87bd86f5628b2937dbc419de493b486a831b3b5b0ab7647748ac693590ce536706bc72e9e31c1478e994c5e2dea373d1aed56f3708fe8b672f28961a54271e7eb06487aa5e7f657e3f17f29463ad7e9ae4fe96af97e8f62134b3a3e3307eec53db1bcb21bd4c27fd31b11e27e8c8fb7cdd890a8649121b5f5335664c69974b4304fae08de34221e95b5232653c8a2935e603b04f15c7c67fdd42604e26f44e98818810f0bea032e175087f283c37496af30001fe398a9d18a371b00ded5ed4f1f9ef8896122ad75273cb6caf7de3d384290f981ff07db8f6f16f3d5849834b395249c6ea0511c20379b9a370e19c1403f679944f4d5bf7ba7ee51c01c2ae0506884172db30a7413fefcdd4beef2cdaf0b418c5b605a8ba7d27deb0211f283e4c0e49f5bc1dac312f0fc1bec7bc3f6f0eebb4a3a2c2daaaba3a6dd5e8f5634fd530b5f8a3419efd9d6a1eefb7ea90fa3a081af5eadb0c27f92eb1288792e7afd9b8fb3c2b78b13fa89dcaed20882825a9d7ccf24386f0b41a8130a52ee1b5d53ec1ecd67f1d365be6a4f8dffa3eb7566b5ef3885704b0ccf51dfff2efcf360c7951da0b02ad4d2bdac6da1d9a35d55e6e4490377774b47da5968e5ff16502211bbc25f95f605f6e3c5682c4ebfbfe845f90773f09117691db7ad2ec4cdfbbf2bf79df91d7d6fb2226db63ead761dc7d42474ffdad70f2778e70cacb02616a07ad4240f867f8bbe9cbd952ea4b704bb9a8222f4f8cdf2db8bb42b411a0e7c96eff62d0194a99c0e38d30a1e89b97eaadbfebcad3c139d97d0ecbd9a061579702eceba286079151c1a739a8457d4fc387494ebe09d595919da880108e42406992abf82aa11e63774e226b69d4a0584fdf9f08ee5fdfba83c71ee0394f3b8e58a666c3b419dc8fb113c792176270b4069ca43a10c2d1d5febed61921639211fff0f26604599cf5d647a7169f4d7410ef487aad47f6a5cf63c1eb1cdd5f8099debbfc4be80915e0c1aa0241a4877664d3f8e67cbf35111d2af1f4833fc46cc8061ed91636c02348ea8de72b8197b6791fe88850aa6891b494fbcbf442b96a50ffb9584c41c146ca9f6b7cec07b7a5026908851dac651398e252df6d5aa61837516788020a90339a74d75dc15624a1acc609a78f7e98f337a911d14eb7b42c8613bd526857db694e903dfebe015ed297db37c8c49112cc6fbc029ffdb9a64cc8a4febcc1ed4d48fa1102ba36ddfbf50f0d3b8565dd6be822398b7ef8170d8f3a9f71a701c8d68aeaeded9ccdc113ceaccf8e08670b42c208001cf46f6cae3afdc4227e80b66483bf2178715f6508cb6b2066ca6ca3b8ad1338ed85186abd6055ed21f6d23a9c34e1b9ef209ab97fc585d2bff566ebf2a641e607bb4df3668663fe22c2515139914d632df24a574d4e43b42447bba479e90fe82b4e63245fc2df558266b9ae7e90e4b724777fe422f922742f159926abc531b4c2b03f79945f921869142b08bd0be5967c3f26f336f06bff3fd56a39ebd4cdd81d6770eab8ee6edd9323ce788c8669ec8793a5fe627022e5e5fdcb3a588ad0d1fdf4bf3f666ca1b7c91e05f75d51e40210508e3c53e37078c4f41c0b49ac05265afdb71017b94c0eefc5d882c27ce27c2707afcba106f8eccf94b09943f3aa15207988579b6d944e68559452bc2263bf6014656dfa1df0c188fc62f10bc2e79e75c3f9d998ae815d3daea47d468c8010a84412b54616202f599326b2ff8fb854a2a07edccc19122a3ac62350c10b75deb7060a4e260772e6cf422f85ec7727f8482c4107558db1156264bab2c0463cf59a853b4471c5860b00e99d34de9087473634174ae0624f8015822542e6a6fd9a5484e1a40a3131c76a8c072de0fe8249163089cb4aca7a6354983438ee4c1c2992453a3cf67c8dd3e26d4dae4f10a70215e1308b27882fc3930253c817065acd1c195125d23489ae6cb599ca590cbb093354b1b746cc5f87cce01ee7209584b84a247bc707abaf6f6753f76325a73aa713f049ea7ec98d8d1eaad08cd3b210d81b9dd91bbd1fde38ccf6712715c3680dab390553df62d41da0b377a378054694fea557160a5694b35ee154f90f0f38a951a05092bd6c83422e5618354c9827f67571447877c84c8bf97df2925c53121f28864eb8a5eb68c9f322cca0728260216122407d79d3a707c08972e062cc9522102f0e836eb6fd96251d697441ff3a3fce77391def8fe0839f00647454568c2b4cbbd917b1c59bdbd60a2150375c0c931ddd8eea1aadbae24bc629eaf3beedc2861c84eede5c85e72f00926c3f2ca65a980b7d1b0c0dd2bd27563e2924de9ec9713477e07853955c2cf1fd55723279e6eba654b363683a46ae8fc68900d746a3edd84b857ecb405018f0e82dbe55c34542f159314b68e297176194f0863986eab71f091bb52f3ea527dc8bfb01d990bf48a09aad9569e1e11b7e51b71702afff558ac712e31567a76bb16210dc4b4fb035652e7e766502a6c087682af8e9b7e398779d1d718d6abc24fbd2e6fd5ee772f89260e724936611211b8072e42293f706882650d37f4979f023fe44c16f7b1fcb6b901d230ff92b1d370ec8e61c65434edb723ef4d5240e85f264e145cc18ab01c7d6aeb088489e34dce0a2f08a39ae8f7772a69a2ad5c45a44c9b29cc0f4c0ca7ac58adbed3b15152f06428e77946a8433f2820fdc3d197e34614fecb22cab6cbde8414909d5fb5107363a5c46f2d9bf94779516f56c009bb2a0ef565464ffe7116ab61e034880de213ae26840be9f7f8182ba8cfd9a1a6bd34f3281e5172e76a938f6fd608565046423ad33e212e87857e2de00bdf9cd99f5703bf8ad8cc380a75de17a5e0cc042e5f2c992cc3a3d5093f4b694f75ce8e2793dd1f07cb3c0c0c9c4f0f97a44b93cad74766b9171e5e1e8412b3c0f6d0fdf207f38f240dd2e3e279e00360e4d0cc9a6732492274b966ae80bf185e5540bda52948a1984bfec1add39725a5560d36fcd2bd9a90e5fc9b2bc7db1783719e50e762a4369879f2621a10a741b5a7a52a6f7c1fab55ba7a97dee6d21504b71390e39e2f0478c4e78cb99b224b9fc670111f50c60d064c1cea70121ed12456247a44ec72f28ffb3525823dfcaea948dcc91ca5100418cc59a50b660e627dbb3376a832cca3322be9172c6221a5013e3628e631c4d6e2a31185e11a07feed7e2aad4573b92f0e6719728479ba7833eee4fa32ea3b22025c4e19a89e61a9aae0ab4acba12b56cd2c1e00a1004e1caaf5a71d69ee735910331430a3748a067f28de69f217f4847591429b3a8b2c38681fe85c41bfb8a6829a7126f163322ab73f5bc997b21b419b9b104ddfebfcc697e81e76fe1ce89164f5611bcc1bbe482263f7d5b5f7cd117bab75052020b909efac0e6ed57a58f6228d1cba2a7ad39288f132f6f3180181bbee956aaa142768e5bae1051b92240a95288fbe8fba9ae4c42d99ddc9403568925a8dabca822186ae61314dc9fa6f6c5ffcea863cee53ff2dd97b99941d84fcec1dd6fbe6af8f5085559aa1a9c974889577aec7fd6c469f51a537f34e0f075eac7b4bc8cbe5c58e071aae3fa3c2bc0061865c2b71aa3177d3f578f7763441a68d64a1cacdd9b021f3db732a3ce100a7f8bc630027bee55a205cadb79089d048cfb64df2554625a92a39a296b425d42e16941426025b116c37470fcc7aaab055e488eb5ed903d9775857d4cbaef5e2bb3b42b81d6170d9fa499cf5ecc5d653569f54ac557e9234621a9f362f807c6163d7e90865bff242c4802c53774f956a94e16c4199f43666a36c7086aadb159f75737f71931eeca5b4bf1fe5c11672aff0704498f6e2418cd4cecdac3b554188535aeab5315ad6bac2a858f87197d44e079de7a5fdad62a719a2990be3ee918daddeac364e22f503d7a62f2fbed260c54363434d89cd7005b8fbcbf9ce55ab249ed56215bca28721a2cd6fa94db5d4308efb30ebb702f94e892e26c6f8a970ff9237a6a8f7b90d51f7bd28c70002b4308ca8196a1d75cee8b98858a2eab457ab07291a064d7d6dcec1c5f829bffd988c1a4e432a644299beacf3b44578ab5d95bcfc91dc9ec1935136f24e81309e23d7c90d17e50d9be33b6f0c4f0be1100f8c254c2d1e1e753ff9a0f4004541c94d45361bc2b12d67e6a63e30aa734546dcdf58396d37f662f2a396748d7cc711e56040e3a12e381af6b4c540dfea0d5390ac8a88e1d6601aeec54e7aa3c88bea86bf39d78338b2cfaeebfbe115c851edfe7ffbc1b1273c63643b1922245a358fcd55b3d42b0bc4a1373c570092d47ab8abb5f3581e87ac4ddf1f24ad537e438650b61bd49bac0dd7f58ae0f22f2e3eb15fabc5044a3deae0a972212d8a46fdc2cd7304fd066d82289d5dd819f3274dc7f600a94d756f47bb70f0afab63125d522e68fd079f61ee9cf64c120ab15bc76fe3971f20016d9fda5a1c20f6c9037606f3e56b5450dd03ac82332bed2b452fa5e170ca65dda5181a315e35acaa39160f1f61847da2d2a089d042c27f37eec8e4328e5b23bc101dc4535e78ca56b12313c2c2f59cce71f73bfe96ac40f63b5dcfef5cc834f3d83c605dd2da1d3364af3f9f6bd9637e0006dd35a3a48992896db1d9efbc83239e920a44b1c8a86a80d4f19f591653e293d8d7532bbd98907bd2a0487f14827bc434aa861b7074387c46b39c4506b035b6520fdb425401c9629ea0b008981eb01cca0ba9b4e756240a62dd2df0837586b863b7bd577e317c9536e91c0bd37a0a098696b9aa014dad6c406566a54ba3550d5ad588b646235778742f85598da5bc19a581f6aadcaf77199db832f3d478ca508328df737d85aeb58a0bc95d210b780d3d91ed511a04a1afb1fd8a98733a1b2ff5ebc05556260dea28363c8c0f972a02aebdb7d65bd0d44f7946fad647d98a3080cd6dfdcb5121fa8a5c6f61e2620b06a191469cf92f51861870f4d9f7256be22824fa985d4f33e742b16fe4e97c7c2c2fd674d96b01005c9fe0132a35a20c82a13f2bb036069c9fdc7c69b9dde5e6beb2fcf8075f6d6326a4cb00f3a03bd1132790a54451bb9de748402836584185ea57bf7ce5ff41bdc1b10c48c63bd44c244616637420872f4a7ddf35f102b305853697d40a3de652161beee7fef7d7a4c9845430766d44674c61ea19402a4bafae96fa2500e8c911813e615905afc2c9c8e5966caaa3580fb46c59ed4fc69093f307d4879123a78026ebf4e9ceec85dcb14ddab6b99dd910d4590ba54cc2331c5059cd4d08199bd1e6b1b2953a729cb0a1be94d83e9080bf03255d8106408f0a64c09b66814215c6a59821807ac265b2002d4f835db1d9c975dc37a625f5923e713973345d2a5216b81d54ae05f72730b0d27451b63a81d68cff439ba79bd2bfcb5ff6537902216bf75e118ae987c40e21180aa6bfda654c6d96f4e777c37f6a3d18b14ed3bc81d6726a50b5880105e46e0cdfe9e7eccf06b53eabebecced1bc1e40ab25352b2791ada63896c2a508d4f7c25e72a1ed96229d7cfb18212a8bf8da5756e4e7888bce9316de4229f5706901a5fa84d6c979868d41065b05e7e69f81b19cb90f8e084f8b438f77000afd2adf87c3f2a4f814a8de0c4153fb8f080a4847ccdf4a156ea4e53720c225c1b3e7d3a6bc90a3a72fc97cbe905ac885678ec33cbe803342375d5cf5aecf459a8345ccfb3bb1bc7f5f875fbd405adf3a7e23b8b38acd80c935b9d0738af7b1b2935291de0d6edbf2c89c5498baa3c3843c92c4570ef8375ec365d4e541614604834d8b2a8503b8cfd6de715d297055cb51f858b22bb4d846487aa522534039b302b3ff8755dc5ab4103aeebbd209e866d98768fe9f13c6a8b5fa92d54710c8d0add60d9b75c5bb6f19475331b142615459175eda1a330bd5c6e2315283aa7f4d158dc4585ee81b386a8948e92ac85f39f7f5ccb5bf5553726b172cc9b07987c0c3f02f1a3fa90edb096ee8e8dcdd0aaf3dd3566647e1547746fe6145c186b7a82af9ff6af022fca1d2f72c563ae8a4ada80db31cd6b4753796bb99f5355c4cfbe43c998a208e640a7205c9d1636b8b24d60466bf0ee7d1da09b5b49a9a4bea2ca9f0065e41ce21643895d82a732d37dd154e348b36f1b6cb8ce20c5683abf591248e42d5ab00e7b3e9a114423a03a29a7b970ca6e9e32a7dbf39630d0186c95da852b6b6b451f665b7ce1d0bdc1aa49a46a0d5e2ef12ad80bc8ea63bf1564128f44dc0b9416934eae834705b4be8221049695d9f2062364a1623e0d6815b382d1af87f752ce8655cd7c23622ef2616c39b3ccbeb622636278f86c15eb1129d8a97aa58b2740499ca6a2255eccfeb368d734b864b0b7106b7244610556a19821419ab140e3d4e1a7151d85a5577d438a894b9f60f8bd821fab1f95a1cd0db486c61d60867c3193a77ff2363ef54f957d4dbd6ab43c1f69d6f4fd734d8dafbdca2c328a189876dc1a90aaaa8cc7ab92c2ec2320cde0b5fb4fd7f8d8f51308d698954c2897de9a50559caee6989f9568cd95033e460cf7954d6cabebad9043b34ee25ccfa8a77e0e67452279d9ea5ad165fff78ceaf6597a738ea29277809d01477bbc78a7fe582a022575dd6716a16ed12a4879e0ca8767ceb6b8a087022af25d9ea19cf7ae530a5944f48fbbc4bb10567287c69034ea65e848a5039c7891dd0325e3fdda47a478ab5c52491ef9fcec8f23dc9674e72d0485efa59173c8292120e65697cdf859a63d15528a13618c33cdcedd73ce0d3ec26d9bee1ec5f0281c46ebbf02fd601c9afcf383627420b562013a04e79b0de1816a2b25c5a6a2492ed7c09d502d6351a68e6ee1cc31ee359b6972bd89c46c702881b615e8233cd7536df53d5afbf46d3b7873f8660e98433ff72c5736cda3bed69aa66369b9ce87481d0828109bd926bcb912625f02b529a49ff9da99e7e7b5b4bba95ffcace754d154d48c49532d65ae5c94a796283012c70b632abe795de141f730f44f0169816546524f4d87e883ffa515db5d83c65443573e2c5bc1e78b8b5d3ef64eec341e512e9de7f0fa2aea213ad5fa4fda474b90e374d78b2fd9c9f7352e41ce3a5d254c6b1a46c681c5bc8ed93d5579b6203ef6ae5a004cb92ed45f61a39e724e5d2c947d02e9c3f1259c37a09e7025148dffb2855d0c3575c6afd07d31c1aeb3f4a725910306008a52988d873743619cca9b22dc394f72dbea6c56b5340dec0a48ef14d73105b328a47b32ab9ddad1c51a14c1c490606a07b4bec6a0beebe3fa16891d9e60ceb0b2fe5a54b9ebde9c947a46046e05f22b8b995f6f23ae58d526f87b0c26b878f5a9756a14325f541e9b4650fd218b3b05bf0604b9a2a406bc2071b9c76693dbfde15423284f01b709453a7646e07e0cd9a266fa79486fe3f4199028807acb1b1579d5a1971b99e5c89d8ab7707ff184beaf7c4fcb97e46f9dd3cf574609430da1fa67f2d76ccd93caf9f816fa22294c8036ca0e8ea698e48e52da31ade55c6850e2192a52d372f7a86469039f54680bf94ff3fde1c9b789e3e7fa29e1fdcf77b1e748637fa4618ab208440a752a2f7b37d609244893290393de15c7bc4c33098eceb519fe7194089bd0408a17beca086ac76e3ce49ce78395d261e55c2b1716873421f7ae5f7048319e4e9d9fede59ccc45ef8f82afc5b63101544dc23204d2675948e074572791447bd5a7aed9d16068cb715bc408aea5833d8e4a92c94cdb2eb2c89ecb7a976a1853255925df62bd86f114ad1ecb728e39f294032f3941fecf26a8d47745ae8dbe2a95a7c27fd3a678b264b511fcaaf3e8e5240dbe0a7767368c142c2ecd4907ac6d3ea7fabf1802fd6d209683cba75dd4082c768f8f322d42761aa3a0d735f30cb9ccda3fd559965090c266a01f3994d76a5d34cd372da60b73b79991218ba1150a9d314058ee2d48f692e442e02c1be74ef803b3f75e0b24a2d31eaf355643ecfc761ec480fa7053e16ebdb370f28d279d0ad8d583dfa0494b28303947a41b84a45b7745893f41ad561e42db2fdc203f89d5c1a73b177746d2dd03e6480be00e8c510bb9f9c5d3f13c63badccd105199355c931171daf3bd498748a6d8ffa8f72acbed9029d44d26480737b6c07ac181fb3897e0d465be488a5714859cc187b50ef95f429e9e944566d063de7c6c01868d790f9e22509f508209a292badc033177079774557972ce9c3b6607cd065b50f0723a12c3d27a221ffe5b0313d3137ba61cc42529628a235e76b57ecdac046a1d87228b9f1da17283fff910f8de7c0797eb5d6354db401b1e949f9ff972e550e34dd788111af6c7d8772a9d77aa0f2bbe7bd3c924e63b96e93f35cbec3c340942e0d980b9a71d3f39b64a997d66a2f76777bc6ca69cd1d446d376d0c75bf85861ad5b751523a0ab28f6bc77dc1495a207c969eeef208bf5ea4aab5e906373e3c649a2fdb403d0fb89748cc1b88d70a75dd57460003f23de975c1e8b9277e96ab6f485dd0b5923d20d999fca80b95199a911f9ebc3fec1496d8708d532ce80b91f885595d355e5688ea60f3307afa442293b2acc181b6187be5d110a74938e427d177fd3e66082023b1f869636eb3d369cabd0738edd2709c3319b4468bdd63a058a7c2fae30958b1cf47fc787656fb06f8dc2b32abf50103b130b7d7a2af54610d349482decbb6d1639ec0fc5dce0c7d86dc3ea1670c2ad0b0469855b8b05ad42a0992cb87b21546f5ac2c941d6bb8e9d4dd3fe1341381c92ad50b396e137163e23d59d244c87094431801149c473e073b47e9997e6cab49eaabc8be70a7a466a3f415d7d6d06cde9079758cb14d28317db6c23bff8244df19c18e03bca96dec9ef6af401784412cf1e73247209ff0eb173a29224388f3f27dd0baf74e5a394a172631777f8ad47b694b3822099b66e0b519895dcc82229de25c0c42652335d639ca2c6071408a51244fb04c82da98dd4518136666808ac844eff1e917ba29f575b6c4a78a43ef4184b4fb782961c17e7c7aa22dd858860fe383720548cdb01e2adc8ed87b6f90649367c10d2dbe57437c576ff20526149a7f4a81db70b959d475f56263c2f89271a9f75b515d019b5d2311e0eda59f191ef7c149cdefb608bd07f0c9fb23b649922a34a57302878a8b98026bc65d154cc3d4cbcddad5135851f845fc6ceeb59604b3569f0b7b1ce5b7cf441f7be15d18eda5c5bd39b6a04e390e985cf8f6c8ce876c42d6394bed3ee1feb4f39f5b53f1f6da85894ebca8a8b8830b6cd7aedc807dde7a3a7f81d5d25a6b15f4e36671e478a4237e6f434f6cbc03c1dd154904ce0be22cd1a2d8fc949175cf3da9a9244f463567e2e4120d33572483f9c4b9c22aeaa4d92cd832042880cd1044860f4ae2f4aa298ff5a69aa0f9246f4ae239c44c6395a0238d1da2055ed8cccaa29f61c2891f72c2d87ecc8f2365a86de89421ee257d1343745b83445de7c6dd94e76dde13ecca2333b41e87316852b3853a61c7bd0ef56c8766b5dfb33e839b1054cebbea74e739099a466969188939a6b76e2bb79c0c3664a70c511f852e8f88385a1b4553cbdc000b738cfac33084c42e97a2b7cd0efa63ee6783ffd27aa83231d1c5a44e18c8ece7dac8889eef8669f04beb9240f9977193a85630474bf513c4d23f9825261dbcb51e6e899abaace97d5209e857dcfdc296ab5a1739bda5c0d82feae0ab21b2cedebd28e49a84bf47027caa6753f63370a6586a80527e18e7e817adfbe06cfa4dadae9919a57b1a40e4fb07cfb43388d542b1d5f28a31318b33790689142a58735b6aaf92b02bc0c090890f830865d81284b061673cb2f64b7f28b876a6f7f9d8333aad5e69ff9da1e075d1f7e228f01feeef91f1ab25bab3da6340646ef1ba22ab565140135918f23d4f89be26dd89b7b698ec16cf45529e6b27c8478ecf6522be50429af9644c81f841d9a55539ab89354fe7a12f89d5b4b96274c3f70d85def66040accd40d840337821d35983727b53e16e1c2c1ab9c277d03f3a5e70746972a843ffdcb09298351b279312b11faf1b4db496f363fb0cd13da352e8c3465548fe0690e7796b6febe7fde86123eafa786a76a0fff0ecd17e524483178834b5b728a650eb0baaf5d76361f697d08aeae2023e6a1e0fdfc849ce037bc8bae729288148c0c860df4eea6df1565dbd15b0e4819afd34105ea42a2d4e3d49cd0cc00c43ecfc3e39619808e0b10b5d22bfb6623ef538aa9c2426370c65a6c5b1fee0c444a4f64fc4b07af0e500a5e1677e20e7a46aaaedba7a7aeb2965d89beec680e09c83a286aff9e7b1f84125d478bbf98249ee80b503115cb31270051487de1d82f3d23d0de5906af103ec9da0e191833fae9e4bf13b61cba37c50619d6cfe4c76aa5584c134cd5cf81d255dad18f0dbe1394105673288c9a2f82e246cf51ea6af40cfcc814d9d28cc8120594129029b55e5e62625addfdc8e40607e20928632b4e69dc419adfef33cde7ad362584f23ebfb931c42f409b114753bac16a3822e1919560c6b46eea11cf2af73c7f6a60500af53a89cff8e40e7425c9bb4e2dd55e58e6e24b7d412db29435551aae2658e2bdffdab7460948dcfa8ba2e3798be1422163a4056a830ab6fc596d6b76cc57f60f9ea8626c047a22030612902800c8cbe52eaa6227f6b7ab1e556edd5220d7be83663df37748a68059c672ac9a5b8da084e3e8eb8f1c517c9cc3da87342e1245a1b13174e40863170af5c303b919359399bfa726c8e0696ec9031828a0b4068d79bcbda531a968e57054c062a4634c4ba319eb9b4bd6fa7149fc88915a04fd0c696fec34408897e65b0ba17d3a469e2faa3c15a8318e3524d79bb252098953c57cc65ae6df3885c05189f294f5ed7eb6162471076bbb81792034eb59b1cbb82b0d4b52944538d4b59bcb1b9c659db67d2405a582ea5d91b370b50183f85bad11b9b099ec0974dd6a4dfcf683db95439bb1ca58fba92aa65146ec95f7aae019fe7dc0c7b3c7824e6c26f0ce8fce448afd1ffa1b7212db1a26778ad93ab4186c53a4bd4eecff76ede09ea616bd2f04337b0303b5dcabc5034ad66be39d817180149b9a39f85d8093b97f2064847d410d398a228530733ca4fe46b03a27838b534d75ae3bff283a174bfa8255f3ea75b69c749481372f04b486a1d6a15c9d70c6c49bdd37302d489320b95fe434350c4033e0b83a0525429a563c77e1bc51a3e16045e7215ec87cbdfc2e52fc7fcc8fb6341c60e92c81bdf2c548ee4d0888e7944bc62c44bed62820cf1ecce673d073aaca954f0286a4780c6f99b3552242c538640d8372b6c52f3b65c2644c615bee6d314a23180603c9c05f51bdc5c285e13b49d7a3ca1f9bcc72fec37ca416a8598fd68042e928eb24822ef51c4c7314aa320d448849b84635bd49c881cb8e3544ea458e5a1a73a49204ff1aa5a0d19dc5531565d286e7031b2b8081f6fa73a43c293e78403d0c0dc1abcf38fd42968244fa4c6526a8a21525257ca7f1183b476cf5b1398ec0d9f94d9beba23adbd4c0c5b324e1a246edf7727b6920184a089ec0d25f607ad8c9954b36a67f7754e77ed2e3c25711a820d9db63c3a65054fae92c8fbf6aede462c2bf31cf6c8aceb2d8ad8364caa40c478642c5a79a4f47426360b84474b57b88b26a6ca96dc663e0001275febd07190a5d622ac9e3e1adca2f5bed9cb47095e5e7c3f9ddfaec7a53349acc41ee0dc5d64a7002a53f63f4c30c3449587a7f322623fd66a6cab5e260de173a64cf52848cd484f47a36b6a15ec69d0b3bcdc030fa327a9a5c436579a3ad15076f3d32781f19e2d27d303b4a89cb23eb64758f639fb60e3b573b66d92ea8ee693a9eafa378896da0587882bc079a31e87212af77b8b77de481aa9ac1a5c6a6d582703ca136c52446cdbc22a52d5b1e8fb3bc1a70708b85cd2efd1f1b8be2c00db697293d42cabe8ce47f4fa481555f6ff1acbe7663198020aea19560a077c3794503ce9d8990c43037e0949b09788ae01974e5542c54ef30e6fdf94137fd9a4949a31fbf8c3d2155b43c083df720bcf75cf76e9c4965bd76eebf69b30537bc2ffd00fc0ce9496c3d5d099bb1ae2a6a5e1cbbe311e6cc3639b5faa8784d6bd1cc8c016f4d031ce06f2b06c248ff0558a6892f79769d1c17293b433509c139fac5d9df7ab7ab3dc4cb2bfbba8e882c1196ff6ea60be3b4397fff63b246f54421ea2bda1664ca5a1a60f4f72a05eb74d9bf3b2902fb4847d9c26f5f8d8535d3c70b4e18b7069dd3aec75b9f1257318990cbbfcc678e2368b6f8f3c7903d1a79d5fe57170f4141c05ed3b4ead19962aa170d46cc41e9279cdf9624a9ea62331074dd67574aa139c178fa00af01f3beeb96728436f846cdb1122098e9a584e9745e2c44587b4461bd809a0585d95e05ad627a10db4e3e7cd2d43fa686f7158a7ae608dbfb33966b7104dc6b75562c5ce5565d9507eae0c57e5dea8a4809dfd0265087981f6ade34ff9c8f495fc2b0f5e2ef440741086c68dd124a40f4d1c3afb2bc1fcf8ad9b038a0cb5d6b3b13360548f480d1230971d7e7930cb8decf7f27c67c5dde518e46b90afc63a086c554931abe4fc2e7d85e29e36a6c2a1f0e7a08e3fb1461fd86a9869bb2a9a6c35b3b6813fce117437ea9fe27a09a798ec912f422fe2530e65c02380084c36a5c7e53b312902d86218c93da2c1eaf5248cf4a31573bb2305a475838f68bd1cb87a39cbd69b8d3dc306d63a802bd67dec4f59dd9cc588b9e7b510e1d7391c131c1af30dd9cea0cf6fecf73bc9fe94ddf463f054a49acf226de5c77b8f140136e6e2df4b3247b82e3ee0326a658585cb01d5fb38da71315b2c22485488908e67d0e56bd927dbd3edd8b29d8fabdadfd35c0242b9d00e47ec744b1a48e961be7218dae242130e17351f0232df5405216bf9e3fb2a8599146c430bcd8a46a7f8625bd939a228b83ef63828453e1899ff4748dcbbea8f722d1ba6be545a56dae0888a6becbaf9c1ad0f151bb5a5a3b8b7336076000c491b4e22204a6d2d175a5627a971c0da940cc11c0164e5aa2be9991e21aa9343caeddc15d9fd43f752d84623cb57bf7be47d3da4e58424a9dd984b91c84fd865d38d67131644797e2f67bb7017f4f9646733fb7078a75cd94e3650e185ab39e3bfa93076cbc1cba46bf82b50fc61df58375854cf65b5d730e4de3d02b8fbe871f61441c6919197c4f897e633986ad9a13949eff3e32a82dd53e7db44d5c826c7e9effb2a18c0fa15213d79a5495b34c2a31735b07155e5e6b1bd09b958289d6d59728681a881dad6e589a16b984d7b42d07aa1b17d555d72583484fb10ebd432cca610d09047c246751438c701b13205bcdce272cc718ebdeac9f11844911554e8548c8414c8e9ef23edba57a939c7ed718d7f0505bb3bb6413cf44893b17666987bf5725a68f9bd09c2af6e4333193f07489db2fd7c55d518c475cbb7e17d6d389bf566a417fd32c031159ec4bcbda0a9f25acbbd37e09b75f12055524eeda78e3fb8a07b2ecce64da3917690ff4e8aa213650ca36a25cfb433b945a981f0637c54d60e9a41827f718cc5bea49183ce46e2155c5d067d1d18679383c336d65db0b40317fc56e23cbe6ce606d7245f985f84fa65549acef56835904c306bae3ebdbf224e07533ee59a4cb823c21a9186ce6e58062f0656e7472ca866ecb82d51b6f9aba3d5b12c2217eaeeb7b932ee05c36adac6401a234c1c05b20a463bbf56759bff08a2efdae32ac535132354363cdc52d284f54e5a9d5ae34c97c0b2ff5ed949e4c11ef4c5b1145c0afaac06ae90c295394f67d1490ca9a9828cb631c28fbcffc98f33dfb35fe802681ce2bc193d8cbb20e04c8acb60f3c23911d62377d5819f3d18c02edf65171e9f2e48021e9f731b8073e4b3807914aaad59943b8871e66b359befa30f748ce39442567516c5bf107cb15ad9033b9337bdc1ca6d6c1099ede20aa574ee9173b06659f4c2a8011f3fa895596a925e2fd88bc6f2bb0784cc4e5520585875b4e469f7af08f6dccd6392db86038066cee78c77c7c307d878510cf31eae07394a771bb9888c692c53714e9b8f24f2579c009250922b02ec702c43228ad800d9d213ecd45234cc55188f41328f676b62517711aa14816ddd2edaf96841bbb040d57c0a8ac1780634da8c4703e82f2a37f4f4fd5161d68c39f1fd99852ed17a3a29342b15073c1b171f848cb1abb65c06b6b14334a54d70fe3812b4709eaec8b25c0d287d3afc3f8e32eaef30ebaf4a253576e0073afa94d2f84924e266a7ec0795181e63d6881583a967ffaf1e6b944cbaabe3c3353e319e3338b65aaec6fd15518a3248432c447d4d3e415f4e0a83f65820399794faa71205659084ca17371e94c9e65a293b62e326b67d091d10dfc65adbc2ab1a97b06c4a4fd867dd444272fd58dfcf0e24ea00917e730bb42fe42cb4c781272dca2068f11e24297410e7cd8afec5ac9b1142e1f02e08dd89fcee4b5ab503313898339184c3a8fca946dc561844607518b5d623782459060f280a822b09fe00200751444924311254f8b42f4bca896bbc715deda063beb88812220235b6f0b02ca4b2871cc617104619d54abf6a5f5d4312418896bea263ac7fc2a4cec7ac9e9a88f02afe3eade9d7a8e377e410e153143c7b4cb3e1af39f480696e305fa063ae09b343723c0a2bfc7bf0c5d87902e9b6794cc61da478edcdb1af79d576ceac6f4bc2db35c08a70c8b377a453ef945aa633082a4fe8ae26aeeec6d57833752083e587b3c2bbe2072b8d4dfc60973ee8b05c2d7a269bd0dc7fd6f8ca04006330d828af17a863a08e52cbbef689705813adc2bf9f8b01d573983c633733f98888f3cd5e9899a05ed9de08bceeb6fd40b9f891601e891562e06ff042538e6d55eb8ba4a17bd41e68f7af6c4aa9557ae4ab4f6ee8216fa11e41c23ea9137d88c85cc1558ff5f7e71221533a5f3c752ab63fe352500ef7d3fe54371ae0f391685bcf5b300068f2737a0605d65b31f904ceb80304ad7c1e5a032db005b3ef1b210b3b9b89f968e3ab3ed0b7193e877e84cc93cd3d21755c01b8dae0f211eceef78d8275180a4d3bea1cd460256891db5aa0e273c7050ca3282fcac17389cc50d7ee2820710dbd5355fd5c11616616d5d810341efe4e3ca18f87a0981e5741b934eaef40e02185e4ece0a3a090a8f7d11ca7c9c86b487810b9683059cfa754899f7e69ca2c32686424765a9706d75826a0c6f8b93108412fb466af566b99ef28c98d2604d3d486b7347e28d9b5fcc2857fa9f9f870aa3317d8008ba7a851e2eb5c61c2267ff74ddf7beb54cd58e7c4ceef40c3f88e15f53959f8e8bd2e23b3e13b7cd1ec7f73d80268c31a738cca568edf501c69849ac72f55cc80c1836aacc4f2b59672aa8a931bc13f64c90862445206e83ef98fbf51d26fe275cd5e23981f730041d45e1a60fc6ffe9d3d2dbe99f2b99eab53be171e9ee3f56f36e7c8f6c310965d467caec308ebcb3b8ed9df44624eef0b7e2c9ef293d67a844ba91cd40cf2fe1c74e475379f3dc2fe7fa3989d80a9360e57344aa6a03106d4b4965743fe874c26d3ad22ad9b195bc6cb3d9cb190b31e7af3d6aabd40c787875381d26bb69051fae64046747d90f034a8174c45e921fa5dfad829de2c5bd51d159dd4515562ed25d95114b2b34aada780da4970c1fd042a165d0135b3682991d9eac19f1c93cb98e33f4197f6a474c0a22bdcd5a0e0621502d8138ad36fce9ac5f59fcc72f739832f4afab4db3712bae4d0d768d557167db8b0fba26805e810e16c837836e46b9dd0a3d05cfa32729cd04d3915923ad24084509c22d3d47a437227e77df69d9054f9fefa53ec8e4745c9c26ee12fd9744f834a23d6eeb19449640563728eb9c156663ef358cd6f19c5994247960653a21eee805f0ae89782e37aec4ab6d948932b964541809bfe93c54dbbc5fd0216ed04ed1d1411b7c135675b028f8387c5010601d7ef3663a844a7843240a07252b550705033f134c3c2c334a5256e4cc83604b7d20910da362542868f133949aea5233211c93fad04d7bae8139ba172f411991b6a4c9e0ac72c30db0c76c44065c45c61056591cb405f7078c95a60493e068989cae88c94c930e9dd9dda24e2e64951ffe92243be2a471399f1b5325bd8056ce7ae00fb15c3ec0abc0bfea82aa2a0ea84c5f402085a4d5e02441ed02911172c9e81fe33c786275cb601967a2a09ec0f1ff5a7c3da7cce26d18a6134ff875038b1f7313727e793a4db5faab0c6dd0ef952d3b6ffd9888d66cce9954716cca3883afda1680dcef5bb43d1bc5aae68ef170e08ca92af7e335ba2c8c9c22ff8b3f095251728e77e28be811fbe6f8e7fcd1b149a8eeed0e7d25ec13bea18adfc5fccf588a2d9278231fb91c62e81bd66fe12b5a4de79ae7cbb609a58bce36ad79a04ecd7ccb765d60b0109db02ccff9fb559dac611c289880688bf9aa201028a95afc8f047b29952d4f1d56e21b5ec935360f02d516af2fa24243fa9e0d6764c195537d719605dd53d15d92e1ff1783526c09383660640df801c36a19314a1a20cf116dc8046dc8ac679536ff45528b71bebe71fb8a4b1bcbfcf6f8f3b32393cc2fbb9dc44474326fbc11a758d60e1cb5e6729082334ed3040805e2c011d08558d211b57f351c546caf7743dbc1f0f6d7cdde8db6ce6af21038ddd5d5488b8033dc78a5c686275190c6434c6f9eddcb97b8efc2854052f780fd3e2d52808829a306fd1f6231b2d513ac7d6bc7a385e3ea048ddba412f13f4f0a9cdf1632c9a8f76271fbf8628c78ccb2ce013fec24415e577a2576956e20533620b3ee9381bae61c175a6febea9235ab732c7248611293cc035d5e8ccb0e5f7dd5c89e3e43913d64b382e0d1d8ab9f4b2bcc7a1d5dbd1b0cb64fc040de6194a702aeb1c89c42aa227331d5581cfec8ef6b74791d93e3de36f5ceb3238a6ea60798a661dd8006720f61e36400c37ed3192f5c5960c2a1931552bf0703d9c6c1fcc90d208eb6552cb9f8cbbe6ce4a9b2ef5d3b4e2a0aa4ffe66254fe7844ae9ca1856002c97f34da686c953f3a3e9a9a33ec8d67d4724c347bf192441979dfdeebf72e0b7ba1960bc65247ff7bcd56aa3489b21b5aa912b2b0e28597812232750bfaff3c02cc6ba3450675f8006ad74876dc8b8c31ea7ccee4dc4725609e7e9bc67a26d4e1faf77adaa3ef73f0330225161328bca55a016ea5eb95c37e7a72fb2aae667ad4762fa77328a8c52c348fe7269a2a19ec2925826ef7f026ac7ad3063d355f34eabc3434e7321cda65e473e3de9e6d92223d6c880d3d2a517fc3c170fa7cb0fa52b61682dd8e13572a9ad9f9faf3a2b392723fa4466dcbf6c7920ba747d2c546af819a1301fd26b4f605bd52482e24a409a0bf8b512aaacd977c0bbd222670f964029aee9d522aa001dce5fbf9f818853ef7526b5a573b0b9edfc989ce3695b35c6c346187441f74581f5e37fb59a10faef8f4d98ade9d15341a0a65a1fae534f1fd1fddf78396371561fa3a119462b7cca4c9ae246d371f99e87a618c3a94b5212669ea8a0ccd94db792d4ef3a29d55c21a837517917a55ca9e9db187e03cfb57c58b3e1d28e2837ffdf03a28d772b747c294afa8e132f6d16a9afd1dbc312cafe83cfe33bdd6c97568b39e29701d01eb715ba4cf094f5bd7cf158c9ab949b28dc93d256a1b0d23c4a34e000d43ddd6b428d559460a03bae0ab8875e1331c39e8e86985f536c4ac0e394980df737fc0470d18790fd3e11c5abcecdd343c39f43cc4cb38bbb300090fdd5b1953ba1c002f5e5fcfcf7aaa82eecd13da5828bd8acba1b98ec8b33d313fe1e5b79dcb49781f112b31e97bebe949e5f94b2c6f003c143ca411bdadca9ad518d1e129bb880ed6a88e9c7270f331fc1c387b0db4004189624d5cc0ab76b9b3f5f5ba08e8e4d5a0a647bd84fae27418272cf3ee40b1954c33e4bd0726233a0f1a03ab5262a0a9b9193192daaa7993642c92ee66d144a5989b41e5ff0db654d9236cc7a13eb2583c99de28cb20be42e1d8fd32ec4472ffcaba12e3508968397102fa7d2fa6d49d547fce12215b1cc95e7cffc5f7bc5187f23a42642e95642b5af8cd8a4728d60bf949be09de75e0cbe6ad8cedbaa2ed3b865796ca937f1fe7b15c1ea34cc2aa33f55f16617ddd77ea31e78bee7e6637e71af2819cc06c2294e441aac424da8e3b941b5c75ebb00c5af1dd793db2f600d673bf0a63b967857e1dee3ef51c6939c14cb9a2a109ec2bc2f0121c3f12b372c005564c39c578b96b0ea7c94dbaac102699108cd5afa66fd4d13485f013834c511f9e221c5a89fa8ac2d3532e3d27f7934aac9a2e7bf9f72465f39ce6cd3de8ff082e5bca5dc3d6f5e4e649b6c0b55b326d99c309fb7bc60cb0a6365a2e9f170ae81e265917ad762e6d50b0a4af8ff1263df84e89c97e43ede09b671c784631c3d1cd8d3927cee8d974378b1e4111ad98da3c57b3b03038eef3409702b9f72225d4128ccda31f1221219f453ded8c1fed81fb5e8adedad150e50cfd9f21b5296d586abbf0af8b9abfd0aafed85d54c41edc7f75b357803a6d04c80938af2011f9997bb86815482e9eaae18c693380ad18109b9a02844fb6929dee59f41b3f043d9fc50c17bb61a9cc3a29765ba723ccd677966599619b0b62b3f6e1e165e806a007146b48efb567c800afa94c4b5dd180144a5bfa5cb2a1b82d968539bc072d31da93974594217ba7cd26ca757171820a840b6710ee19717dd7d2a51747fb3c9d3aa5ed8d3731ba9331697873daf2771eef7d26f8e70cd593f21591b3685b4fe12e8d8f480b072329f2267b94878d68ab4a7ba354950e3fd152c5484456af22ef3a6d70f6a9c5beb1bf1d373a37e9f466b3eaeb9429e22ee2f3f8e18d3f4a2657b92b899f9e594923cfbb1cddec1c6f288a91d31a4e32ad0fa6e4cd006a3b2d33847203673a20a038a2e14f8ef6721acea3b9b46d95ed6373a8fefcf453c838059042f52f6592f70b1f9d91a8d4bdc0611862f41c09660c443424bae4e609f70a7f160d0d901914db511d2db7fef7bc93839e38697b86752a949a330411932708ba822a743a495e760e43a1117f7cb3249f542784245ac27645f9ab8a77ea675099c391906d8030c2d384f141ecada461fdd6dc3290a100285f6692cf4ee96355de92ca00f43c821bc325a72ec59d785f3d4930be6dfcae3c64250922bdee611976d4aaa4b6cf203fa9ac4f5f42945d1b6235cd389f44c1ba41aaf4f70a2c5d0dcaeffc34c5067c036d92f33a44ba4647ee5ae827bbe373bc06fd96c67014d929774b3598885b36fb5fd8614189dbe399944f890ea657467b63dee518d1e072f05566a198afdd4dc53299218f7398a2e1866b5107008f3112e72fb655815baa544f72bee4dc67fada74f4869055265d06eb399de131149cdabba69d23d4d9487307f00ca0e81124a9e2cf8853f046f66591576d7ed273fdfa3806602e0671e0f03ed81ff025df2f435bd0881b069317e8934c1b43c826a885f0e7c6bbf3ecf54292d10a4e047b393cc052e3674348bb2a250ccfdb5a866a4c98df832972d0bbe28af3e10494978275b43010fc42a9d5ee18da15cc9995deb47cc1b7fd0dc4875ba72793856cf5407e5789e90f3b1760a2ff0039ffabf33e56acc32c208b09fd97e0d4194825548db7c10034a353c651386a2466643f8e191f650367cf64448f66995ab31085ce71a0aad3e4e2a9a2adcc3bffc347f475d9ce4bde7844fe4829a01cf83f6a02d5e9346525c382f301e3ea8fc59fab37045927d259977b19958648bd8076254ebf916d53229f05af7bc5bcce64375c0ea3a6cf51fcaf80906972090e69f737818dd97598659883b878e4c055eb705b1d2599be10856cc1ac9692dd2bd5b3c099088ee8b14b5b34dcd0b1a4e537b1cb641a0c1902249ad55299a6a549b0ebdb0181f6801b84b3231bc7657f5ad33a824aee29a3f7f0f8985b22c7dbbc988045db976534e748853cec90b48877a1a9472b913ee900efacfb02cbbf79a648122300b59f7f46f2a499d8f02788841d8933b078bda9556bb4949a0f887a9d2afc526358bf4b47a778ea2e722117967c45eb0b9f9e7a987c9f93b211755cef260e75479385826ff7450d166ef90b24f0121ca4b2cf4767aa75e787105c28446246ea0aa2ab4ca4f92a767d0a58a1dbb05e2cf5e8147ce4c7ed561cf4d89d28e3e5a13e349af951724e48b903dd4e445b629621d35b730c3fbf1b02dc0681206be4bb981095affc85139cd18dea99b8d1f9d3e3fd5c4283d0bdae68cc1e1706c7bd0f894c23ffa6ed8c071a60049b81a05889e42239d9963165a18eb49b1097d73951e7253540ae2132bd45bddaca4feec26f1c1ef57ef5516a470d7c98c2f819ff1276fd3cf0b1ce28a6ad0d3ee26b0673e0008961c6d28976d68bf3e1821d9a4e929b19a16b02a602794bb2b0799304c69950a4852f4128eb7321733d392be8575a383460c1c0da2b18a0e39d3d0d4ecc8ab330d5b86a1f3380fb8077e64c303c3d80e3370c78d769e9812206c5542878f58ed0c5d13edf90242cb43d9d0d633e9b63d5e7ad526c2154c5c7206eba9a6f8d05703f063423cc0f397938b303369780cc4666bbb909f866a124b6619bbaf94377481874f12fb774396ca5a3bcf13c7777769239b8047dad3f5e5025be912eb1514951b196a29b4c981c067127f9c7a2cce363e22400158c538ea060dce9cf0b54666b914f75cdf548f87f39600e08a6dadff523fb4796d9dec518cce50441ee2380e08744a460d5d9d2e5da971ca2efcfe73205a765b2fb1aa5b027aa81c707f8f75055ed6a3f1cc69c38ad92e6c4dba47cd8f0a7cbc96cb5f638cb5a52819cc4f7db8f711e9048ee9d46bd07c56002cac0c905038ddcda129ce4dcedfe17a93efc36a508978974c309bc8a33532d04de0fde119620f7dafa8853e9c323d74e79841a349142d28c0691cd1aa542690b36e0f0c2d493e422eb2153e999904762e8020e64e7aefc1ebef7d8f371189dade036473878d57f44e3041bc27cc3000d276afd54bd7ed22d25d7d79a9c1ec19daa7911f2fee5ff14cb3df82b83f4d26408ff3f26ef1dd17fe3d6af93176e7261a2ba32ad1fea45549dc9f17d73f78be6fef0caf9045ed9720857b3fbc007b2a94c39051673685691b01909f6569abcc5c30da6e33dd19d0d9e4b892129f8d4a177daaa4f31ac5a3301f916bfedb8367937f6083ebabac9c93116d199e95ee73097c71e21c8c33d8c903495056842f2f440bdc6e97dc24dc923922017849880e843df940d185aadbe658d9a4cf80c0f367aba01d3731373021202db2c58cc894971f83955865ccaae611cc3d5374875471f443d86742e87430e81465558b1cd265ed46abcdea20be7ab1c94ef1d5d2f9e04153f97cc47209f23f84197c4469f6e9c7f60f6546e0402d2de63716dbb767fbf05ed446e7cddf5e89054b82f2a947e8c71b0a125f9d4266c37e8115a49977fc069e6538fe62b20d7c943f22eccce797cec03f79b4c5a1046f7e9dc0240c7e1997e7332d12cec6dfafdf8659f90a201028dc432df7d2dbb234db03352fd50ec22a56efbd9ae74052905d14ad8ff694e0eae18664ccfea7dedcf6edeb68cd834a55337aba3e7e886cb8b3eff59dca4f75e471ad1b8459f2350b0b339f4195d4f0b65cb70da22336ee38c9c282d5bf86a2ca0a67f6a7aee929ad2b24b0d414f7062028c9b603ac4eb5ecca3861a11849a9eec382fc6a202d6c93383938640dac5fe0f22fcbc22d43d5a522ad607f133c89f687d48e113a2aa8bac78fa71c501e529a0a4392ffaa18d39448d452e81d9230bcf69df5a18da55d69c626b41d7bbbd0ee0a0245cc16a13e0600b58a50e9494df99dc1ad48aacc3224b3e9fb0204765abc5ab2dc2658e76a543966eacaa7b46c7851e37747e373a34694322cf05d0594498077366971c9463f5043e3cf5e142a908a0a3f9ba649648df95fec92e247efcda38efc03d5f954ce240cd377f756f8fafdc9053c734c85a206c25a98d34c451ce30d58fa23b28e5523d403998dcb2861ade26766ca5111f405022f1e69c939a56c950404fccbd4625571924c56e1c9699b7be575531e58011d2056729642974cb1cca826f744ae1c554d4f066d9fffa2c2653e5659a006a39cbbe87eef24cb55750e7251bbbdf26c3d505140fc93fd53ae6b992965c1e271189dfe29f338dd802b34a6523ab92f134e268faec27dfcc0564f4154d8cfbbb9ccef8ad1e4517226d948d2f8c7809d3982641251cd6724015d320f4edac2750f9f5c57da9e6144dbd89cd22a56bd9006ef51e714504cbb3121ef3ff071c4cdc71592528d8f2af0f183d2f5b88a059f5947a6af837a4f23bb7b62a4146c68820b54b47d2413574273cb1a7f635998759f9ba94205bba7baade8f69031c0b3e4ae72593374a42309f5beca4eecdbf3eb57ec3dd45efb1713de721784424b32f7a56fcecde8a1922790a7c1316fec4f89c8196241082a058e7e82b1f5af4a08b4f63e99827c6e22c2748a63a5c3b60bd41b08095eb84f869c6dd499d64fd13e52f01ad125016d0ac5ff3f2dc8144c1812e8086ac08d335997ca3d10a28b4bfd1a57da284f487b385a080324fe93be4454ac66a73cfdb3398fc9e6b18ebb5238587cbcaa4532c37d6931f580d66bc32323436392369de5d228eb3c192ded6da139ab55e7e46839afd93ef4431766d18f770173a16ca396806945d2ce797d1e31cc7e410208ab8dc640a06b3c4b8e821cee44de7183dcc14d6cce47e6195448137985cac9700c7b68adf039b3685207a90cf06d78e4430cc77b6b2d56f1170cc1c9182acc456217e6fe9bbea71c8afcf64a78d02611e7fd7f38d60a1ada3d80366723a99dceb2af8ca88fbfb29ecfbea93ab68c0506d5d77a3a2303b594e74abab0d56d007f9faab1ab0be72726b9449c4db60468c4afe21f599c8c17766058491bdec95c07db445271b67716fd208debe931abf1d1c730cfc9d45e7eef53670cc4f2ce2463f59d19d82515b38268519f6adb10bdc8071b551d602d2e5a07fffe070f24421f4b6cf1bc3167864f82873a49a938a442b6eed84b2ed3bc818fcfbdf51a58b355e869f3af326ed39fa97ffb16dbb96c2de03d99af672c35d935aeea988b0bbceefd5c11dc62a06bca7a02c0bd1ae2b6761a50491cfc693caabed1605ded999f5bd71afc211c5c72bfb0745849e04b60bbaba0b9b904a9690059a27904b147e524fa4a795113c0a1af9c4430e7776626cb8d057053cca22d3019b9988b8d23131c809748fae87a791d57b90fd41501d35201e55654faba43ac633e34ed055f7877129f8eb4ee200321f755d8267ede59bbf9f43b650881a1d95ce3ae2a789a7fcddfeefa93674a759270bb6fd42176a29d0e567b05ce0f84d7efdb6a724a2160ed6624bd4b63c819d8d0082016847a5e9cc1d7ce9198c57ffe61abfcbca95833600145fa3e353b5736f52350ac3dd1fd29626bd980ddb825cd5b9cf83035dd5841f83dac2e058b8d534b71eacef1ea01fecec2a2ed2ba7c531620a36252153b0757294885ec3e2df47ec2b876e059a7db9667353cd76c6af76c080290c76a01a3a7a7e184c4c8432c796bc60c719692e203e760fe85f9d87fac936502f036f1e52496ccc47679d1be8b6bab0c4d6198174890cb9286a623a20f2163aa7d63c8bb19766f512b1276685899080f5aab81d2348073c3b37f8b05919cea8f25f1ad54f58e716760f656d0773ab9e5b5bcff763835441ae2ed70f0e6c7ad021aaf0e107b574331a18541adceb5b828549533b97c9465b5167c8ea208967d7561db8c3ca0af9bda79509a2b2c3da988a3b0f6b7ca54c9a48346e691140b3f143bf87c7caf9261b739effe723d30aa0076a3e2cdf0ce6168ee8efe76aa5902ecd91843d6648920989e06af4a44ef6e6b96eb650d1b21a4f4f21a8fb28d6e4a7b56551401298032f98f02c5fad0e4e8d4f94a0684069ec542b255d5d776fb3bc744a0d1c018543ebacf3afc3186ee7855f4c01130db9fd341c597647a452aec1333b908f9aed80be199da9fbd8a8f2129bd294e6cd2fc3f9543cf1f90c2cef9fc9ac035019cea8379498d2229dd07f62bfd7af32c78ec4dc2fd217848378f17d25b61f25e6ceb18e106f976770719ae1ce5cf2f2c2c448ed0ff83b6a5b64d3131735fcf6a4c795cd0282e09110392bd8d7119b28c06bf4a719fd2f1bd063575a72291497b7196c21400d5b908b094c73dc9efa830131afd7e17e80ab43f122929aecdf29939610eff34a12cbe7babc16d54eca6da1eac4206349636e40925bbb9f4e2d1ed61493b997ceae1569ea17e06cddd54582d0ffae22e53c311e4c673f52dd843ac0091b00a237e342f4bddbc697876f6b44ad0e2c375a68964d65f0976d6d6a109f9f9d1195f1370bca061d9d3fa7d079bd617c88ad369466b835d271ab5c0108626fc30b286783382f8f9f3aa1b16179caf2eb5d11aad187a4c2c769a22428ac35a03ba12a843ec5c45af89c23f3a20d39906573c1ff9d3cbc01d5a5f2cd691b1b2a8fc06aa3c2ced59ed27072a234dec6205e8fc5120de67d0adb1c46ee60069024c9172a0466ad5754331a86f1be75b8ed5b06d07bcf9898e67978921bd76ccaec42d07047bba0147f2d8938a84c22add3d248afd995d1484ae55acf5e3ae636cac55eb261e9a2faa82260c555577095cf6a1f7de43916ecff5c788f5b066c13661cddc969d2e89dd4f5ad5241e804846d1b4dac4d6efd3ae3c82b3ec6e5f299ad2a603c5a17d118c331caefccf2576fc02258ddd16260e06f4fb3b4c8404a1723546da6a9340039c1491db2ffd94bec8e3e47e826d08dc578f5409a6ae07f7cd3162e475d5a15465e30e990a291c09cb2cbfa652d686a767e8762576fb202c3764a669cca73c46eeeba58967908283e648754da3b687a23fa75358979e538eb49268ab7fb437407ba2aaa7441c0186b7d11370bd8d38f6fc7df078e3e535a4a554edadee222c7f608d2d7ac30ba860d0a83a1542ffee4b81a2fac15f2532b3ef50cac0a5e30042b0b03bbe6283b333bb05b2b036f6a77d691015218f0d5b53463750bbd8f5696f598809fd4f57e99241b512cb58624cc5c6f233234fb119731bb6ecdecbdbbda86af409252b755426fd39d7fdd82efeff89f066d8baef21afa0bc511e96abde3631991d5ac595aca16f379cc27fec6012129403c05a5bcb9a7c341438b5be075fe6eabec333b5bee574cbaed6faa70e22baf99061046ec6595f6d2bc8be5fa6d516e80f3c9352d43d0348308f24fbedc6a3926504571d694c1c9b58ed10842b0cd8e22f400ed25f46a63c8176bde49a4aeb4e60af2ab294e18a537bb8e61421243faa888f8872f6caa6f31539278c558f95d1891826711a516e1ac31fde41266f6606c2627e9af9f1583e03a7e6477d7ff64f1203fc8ca46f1ffcb3a959469ea4b1a95d027a8b23c2a21b291c0d22792eb8981147af78543ae3a94e3c658e991f68cc3ef73e2f05d0557d79958fbe9458dd915893c097d72ee5b7f7bdb2d8e5ab33d744d1194320ad192cebc5ed494cd0a1caba59ef9ed191d4db92490be150df2fc88e493c75dbc1b73bddb86238062fba2b48549267b67f40f0f0c4d18439c498785bb682a699b6345629f9c7346a47d3f917ca5398c888151bec6ee6a55eddfe73f7a51d417ff51b92ed7418f9f308c6ed20ef42ff62f1f5dd8d9a29332a95ac83fb5bdf1672fcbaa0bb1579f5c27157c8855212aae41e414df3f411fc9f372a00b5d7b392fb712bf7e898acc6bfef335b7562b20601b05aea1a390c7c34db0dd951755b8e9153c814c343dcb9c1659f873e817427fbcbbd5e5f60258ebb950d36a15fa7625e64e78faa92545e225a47c3e2623fad813fa295def7678509b2133df35e1d74c3e342f16ec6e82f02fe02318fce49ea109fb916798d1718e23b870cbb3f266d29be24765781d9c64a7df024384beaa46ea9c13ece304721b9ea0b6101975b8806c09761b2e2a678b8717b79d8afdac7e1510aa4f31f43e42f551cd5be8f836e0e58db80a5650f033e7505a8e75f3025cfcbf8a9f19d179fe15936726c6cb6f980827b59d718fcb93ed3bb957ba519ef5ec5fddf0d184b4365b1f558166d89341323e84915d057ded5d7deffe500e9ece8f5d1455862e13a70516e17a23a7044084990186436850da536d812948bcf8babe4ed016461a7761a28fa9a4946898938a1b6e8893630f26762fecb97bf1740eb3ae51e4220abde167e2cf43c91cfe6be41066025f9c462da274341618c242d9796962ca6fac206790484a4dc8cda5f5cd0121fe5f2b701d21d68c656f4fa7c8b1f747d3c5011bda4990cd66533bddcab93a51057737a81ef5c7b105deff22a1ab2fb82e2ac9be05ca5bc6709675e6d67e3dee2dc712e3b916686b1d5a5844e7999b5bfcd53e0881d0d5c1ca6f1629f10e538995c725bb7088353ba9af7b988d6c43452d873e8ba4f7a506a995ff993e1429ad0d194c2363a0f000a758b19bf80f9825d82f0d8dba561272ae198b24a3ea3785f6c88999fd970c16e0c2409ee77ce6861648b04b6659a8dbfc2fa1275d452de593d4c576ebb789300b0d488a8324a536499763c7e2a7653cedabe958b037e8368b172cc3f1113a7acc4eefdbc39425b43b9f61ac5aec3df76cafb60c48788a4892fb0141dd333fd8f9ceed8ff75d7dd79aa7cb1e0bdbdb45c27997b1b5796c39ed01812d8416bc1efb6a489724cd5e652eaec6afc545114457f28eb2f404a417910073e76f4ff28c3ead86eaf3983a9016a387c8caa85e7a769fa792cc33b17f842e1a9e6e3dce49903d7899da4895e27f10d86c4afefd428480d896b9350abe12dce51dd7375e2b817af854e1d115f17a6f36287071d8022bfb16c2279d42f501d09f73f6953c66219b53cf0d3ef9bc453453465a3a581b1e54b53235a0c876f7876c1815f2e2802b6f051de5d0b9ed4284c5db81c2813a55d853f1688cbdbb4398bdacc3259df320b3338bc59e3770ce32ccfb1d1234065d90e07deaec81304820a297833247b91f272a6ca251e1ab32903273ad7c68bfa9afdac3a491e645c8ec8b9caa22f38de1df886965d6078038e7f7f1778b0ea17df984b67416a63fc5fbd02db8a7c8935403c9f3e47f6011daac1d78e1d7ef7353b74795db705b4d652956f33d542b2d0c06b0994161350b36d9c39e23da900201d42c6f0915c6cb252be9fb56b98b1657b7bfc184dab897a88b0f8783ff5c168955191a77003e979837b3c8bc16bb830cc4654ed59072685da282831627d40e31425810620f25c8704a7f3a4870b892e9a388f499cbd5788ffd618065f83df0d3f4395ebf9ea84da87eb0d20b9d0ce61f404bf3d9760e2d89af3acbb057651ac79bdab3f567b4c577de1dae335ad035ec324201c6d433d9c7cd035a1bb72d7a286d9aba08cbfab4878b71552cdd61f4f31416f8d15253cc1d6fa55abcbc70fff3df2b82ae2af7e3d80adeb1aa3ee27e0a80720f86f08011843ff944d1204bc8084184a5abc246e3b2c37d83eb7b133052d1ae475f78562d6521ddc37926edb294c6d179e21338a638b82f346ab16f04337de7bd89f492901818ba9e9a93a1efec1985a10d8173099bc61977823cdd29647f6fc3b3ee1eddc7a74fd9f616e5af2bf5fbe64e7707e4761d0e3be7d288690c6ba5e7167c2d0f80b5ecbf5c89b27a8444941b1f70530923f1a40d2bfc40c3db129223831cfcb5cbd8d46379cab1697d3a0ae1686219a45d9e4d8bfa343156d5f850652046afbb159eb51a1ee2f1d520a5b07f872e6e4313b54e7495afd15e6b35bd47d2e0fd7f7b384c3457742cfc831eadad28f20e046234c0b15fc827b3678c3577bb5476b61a3b267daba02298d10de93348633e7978945d804c6bb52a47f4ce10bd80899f442d79df53197682e5281901041e3ccadbf0b83c86c30e2e27706eddb150cb48e85f76eecdbb0cfb464b433c09c82cfa3f3326c2fa0e505bacca6657da7e07d33a0e6bd6d7a53f32d2b170e986c0b9f946ed076b6aefc49ef556de34103420c279eb438df745a6aa2531cc4ecaed0f9fc571afd6b9b841406f8f1d10a2bd695116c1fdf069d68b9d7e0ae128c457a47e3d7ee109553775b4e6e8960bb160bee22a27efc56974b2a903468ccd2d175772903781a65798cb2b1cb06944ef28234b07f5b15d2649954bcfca5a2e2e6fc0041c0047299f3cf5e225000d03dec1fc3361537cf4d908f41e2b344d7c631a40ba9a222aee58c0abce32dfea307db1f852f4506eda739e3e27cd659ecb94744cf25ee5b061d34de3b03169815a30b7ab5f734d3db11be53286a68ccdc97a2428e2f2e3e4bab802807b887b01d1a270f27670a415f2a7cfff6bfe2334ca60601bc46ae8d48eaeabfea3ae8b5067a650d20c7f4e9f10dd08891ca6024c3b37c14915f1e0d5810ac11b5123e7529c4248dde9de1b8496f0db2c36ac28d9567e0fbcb44c90d76c8c6b74f46494e2af42c3237a09c4b5aaef81697d070b11b3dbfb92f0f8bf7ea6fe10435d96c87ef3413eb98ddee4cd0a5fc9ddf5015e6d2a957ffdb094e247c91dfcbf8544022b1adf2af9efd880921c92107d7cfba2e1792d4f678e6b8eaeb24d5d052c9fc8a989918dd23d9b1333c435cb45b722f3ece0b66fa9c238ea6cd58e14e35afc069305ac036d3572e8f5dc487a11ff24473030788a349539ba1fe30b1d06945a9014406f2944c3d723f9b5c72b4afbaf5960f8ec849218706b2ff78b03e78e05198eb7e765f8ba85c19af4e881b69c4f205c5378e78b0718d716d7e8859ff461511e6005e78f6ad09fe66c968a7e6474193d92b03dbbd3c668f7792c7000841abbed0bc6b91a13157dd5fdf48a17681afa96046b677d49f3f734ae20ceed7235507bf184df39038290a71fd2f737dab304d44c9995ab292b1a95fc21c91eaeb79fe51cd5d9db4e457f6107a21d6fd583249f6248b47b8e3cf109db739fc25d7873b991f567899e1393a9be35ad95157960f1e3cc5639e0ef75514e1e18cb078f5fb261d665a203cce602f33192c15bdb91fe5399afb620af1faef514e28b3a01a3f3cf173c878a20b34d8f136e75540309b3dd97efd56aefd5b190b7ec79c39cb922d43d26dc04b766be6808682eb1efcd02103adf1c53d29269ec94e37fdf8abce8417e016141d07e37ed673926a4e2dd75914d27029ece79e4c4d227658184b428c204d6eda41722dee04c1f3899aeaf798232770ed6c8df5e3bf71934b1dce9327ce775745a66729c7fda507d6f78715e556804124ef4c68b758673b518e10c1d0eb8e1ca35c3768e5c38b40239860f5702c6e718a5453919b594a24e153fc1abeb5d1472c7ffad60ebd8f46898876dccc524fa8c394d0850287c5b267b0f529ee016c3726e3e6ff6b0999b6ad49ba3f2d61d450da92f55c0ac26001be6cb7352e99bdee98fd547f8e1b0fb1855a4c01c7e95a1155b5d88d97d9998ce2f4e6daa0f42ac7ce50867c9ebec5b3651af2f92502090dc9e9501aca5e82762d99d812453ae5ea4616e166357f2645097e928d20cfd157dd9fdc698292c1950f960694b3ae19e244d304e1ce1fefc262651723df66055e8e95cf2bd03d95f64db1ac9fe760136c5c9a79555169af87977efbf9738c946c2b3ba5d432710fc502e920652b90e05a510111ed0f8990ad5f025407ec2cd51a704fcc605a1ee686c3aef463447e84b75a9c3e9a9ccd89a1ef44d07b9572b8fdd14b9cdb83db9f035d2dab8b4f116ce20b416964e9fb1ebb7b1e92f418bfcd8c2c21f6a111b809daafb151c50234140e637e1367d191c276da9d65be90d25dced6d8a2df0de53396940af05b634ddbf3c3cbbb6234c7acb37d4c8fa20654354dcb00167863bdb81c4c53e4f3e8daa0e5e18eeb3c33c034a2f03b19864a0f720b698a2352d56360677c1db13475943ec5cf7eec7d7827d6a2f0e8fa33ffba90284808bab6eb27b9c4b0c8ddda5a803465556b98e90cc9bbde12af8499e20a9b23837718362f8f4d9977ba4639c2fa8bbe126a0202d93cfd66c3f7aece2fe20aebd878d01e39fe898a4b8322d919111260009a68d74fcacba280c8f71f4720cd77a65e70ee8a792da12c88b8fed1fb01249d2fa4dbed0a4e32ccd65a8b66ebe5d84d1148b0aa1c9711d0025a2347463b33297bcf09c97e9fc0d349186b49a6f2ad2af8591b752583fadaf7474bf758fba5d07d11544cd248de03e7edd524b95b75c53cfe8f27d25b79625f8aab28f3edc3d0794c414e1f42a9f632882fa415b0e3cdad4761e2df7864831a521ff4115a47cae30a1a032bc9dd63e7154bd15a80f438a549eaa643c12c90e6e5d896e08c9cb137395cc5adf3fcc10b1574cf8db0be3267411793708e94e4233a24610755b112c2c56e983f12313e7c539921b67f9a7653b839f50cd8f337789d9f6de122ef89e441ec4e0cf87d03043fcd0cb8133d4fbc73a247905f026d4c28207b89a636f239d69df683725e5f7b5a0a0a73c0135bcfee4df7a022105d2048632b6dd429d61806f60e50b16c18f0875169a49a265b0737b4ecb970752a413f4cb9f21afe8efa4511813c6cc4aa31663c3256f0268dd9848b15befaf6719b5ec38ff87b97c7703ebaa4237142a3d40ec935c97f0601e29080df34934700595dc51ed6e8577df7f61e2a67cc31e08f827c37fec23e95509458ddf5810a35576d33f39d373c1ea4d69cfcdd71b213df96f3fc62e19e7df929ca7fccd7042d4d32b6a1a30b6584516c0663e4469a78715f052e4bc47acf5ffd3a84c2a6623c82edb96206a9e3c1ef8917646b607d6ecc59d58be3aa274125205b473edce58aca5cf6d8d11d99687bb65178e9bad04a08ec444e2fccd72607c1cfdba84006c632b508fb6ef19e3f9167472bd142d5a15f03f3c4a6021c9267cb18dab8657b600cea2260789897e9210125a70286459bcc55159e9f5dfe3c47c285578c3798fee69db963d3c545059967f179a0ca485e365c314bdf043eb435613bd2e30257dc85d02043d3364bff12d4ea6f75074745053aa726c052729a2efae3caac34eac18481991191a714d216419b06d280293189ebb778f24ac5c9cff4dd9eec24fffac66e79d347d48640f6c6d5ea85d796e6600fd6871de7e4f8c7d8c9c3b441eb092e1fd63dd63f086f86f6ed772db34340ef8f2f0ff098c68d1b0591d4f2dd9e5c6bf9c706114bc7b88ca3bece5edd2c6ae87e94a8aeee5818068a87efe2a0bd9ad78d8dd032a84c3551e22892059eedc46eb7d4b1956c2ff5625f39d315c6caf46c352a26aa82466b95544bf3b41fd98cae02cb8ede20cee824dce0420c6c9648525a3f1a3d6cc02534ce39fc4caf1435e6af71822bc3183f788b64f8eb61ecd172b2590438fe6cc9eab5d0b7ed500c962fc17bbab9aa372bde0c6c459f7988dd1d5dad39c2214f7de90b2100faaaae3743cf1552cad90399f5ff8affa6dd9a9c30a0907e6e5d7612f133856809a5b8e3035c1c1df5a1d0a7dd2a9a627b54210b955897ed8ef0524a44cad6588620ff09a732ac820d91a15ad62697f380e02ebf4cafb72017f1cf4753697800ccf1e336a9e6a0da0f9575c0a6b6a6523ba1b04d47bcce88df2186b5f3cac4a61b7c211a895d4768d01e98d101a8fc68ab4a88ad1db0613c68c6d20de4991bb7b9f80a4632cb3a3de60d11f16fac64ed90a4e6a86bafcf99f0785bf665d44b3ace5184d2b86a7121c7c22a088ec8c854052c2ad81cb344c81bd3d215d126ffa494c5c1c0ed0b47e98c828ff1bde8ac44cdbdc21f8d6b52c9a7b4691477497e7fc542cc32bc6843bcba297c0623cf74cd6ffed5ac7d0bff2516752d092c30f76578079e4a04286b5b0be89d839fadf76d227d8127ec8c5ad7a403a4e30e874aa142956dbe5e50b4490a7a201545766b970c6da69b536352de7d248689a6ef0958f488f67a3eb8765330b25b5340ed8e963766d78e2344735147996e835aa3970b8dc0cd9a8e6dbad067af089e18e5a1c2b474f0c0c6ead5495b4eb10e2fb964a3b7e80a2ea971018ea51f68e1f1c151ec8b24c8ebf55469fa94f1f45c0e5ca34446cfdd170dce78d03c7f859fff51943912d0f57ca59ac903fb2fe462fc590aa181f9228f27b6c3296abe4fa0694211e1325204c6e39aad9e8e93725ab42e4d3391f0baa37495102196c515ded0e0c388a2e3e0c9a5d58451ef4b0ec58961b81c57fc4d1ccc7a82999fb5c02338e684b69c201a71c6b050ba385c4a59946d87106c3abb27a75b192aacb49bc8ae693d543c4d74f53be3bf611fb9efbff5b89d4828afd30f0e7f4d80596bd71a317c58c528d5d79280d91b967f3a8663464b827414b65bc4e311bbd61d22aabce64fe162fef32b017e9bf807200bd3d9408215cb7339684ecbaaa806e4ba256f862c7699e40ddab0b988f1f5377cbefd7134cb92eb87e1b06c89aa2bddf224d88621690047fc871aeeb1df73819d4279e1158e2c01e40f59aed7c87ae08e7fd5124b0b4c982e8da8efd4bf5c5f066a537fb7e3b44c5d93fce04a9b12d37d61fb999e4d61202887f7cd1dd6fb42a2f9af1e8ec66de0c7d9dc0e552580b1fe79aa33728d79f6c87862e2758591ec483db9ceb708edf739a702e92edf58e00f329c7aa85330d432903092cfcb03efca8be93e670661fca2a70641a0e351fad1f9027e58225019ffb3d6edab6b5f760f020c7d331f4c8a46e9ac756505ec7b257945ec1ae07faa20013b00b0d606b40bb16db578205916355a43a95e9344847d6612b7bb0491a6af441bb9dfa2f6e60c0c2bdff5c14abeba42ffadd2623bccb05e5ac667f3bb9d4c8c92f47100d5643194fa9c55cd6101e266ce79577e5124b0d9785a538061d98bb13c0e6caf7efd2b68dc62cad18fcfa94afcd750fedc01f30e0023d66bdbaf94d566e4722779a6048e1e279ddb6163696429b16d7a3dd6c635029b6d247db7e99a9bbd434d6d70449216291b4319d78b6c378be6f46fd7686b2dea6ac209a17e34af1bbd09bfbf5f34efce5e1296ee1f67fa1efdd0c188f438abd040078865156c98ccd9a3bc372b5a09250f3a11b32b7acc900942f63087158ae60c8c26c30aa0015208eca408a81c45ba2f9f0f02bc8b246eaea56e06936d1b0d82619deba0245584d816a5a286417e2f6664b0a6fb582e5dd732780ee177280c97966c77a4300e4b311a6474b968d7a45fd143fd69ae55d95232b88eb8ee8e5d17c5e818792d4e0ad490d506376f81a420c66e66fc903cd15bbba4a319eff2e8e3d3482ca5a858d30a5ffb7bf1f7cba42c2ac7b76ef933e2594ceb4c143bf6c88d815d877fbe1d3a200ca857e3c7ca6469be53181b15ae08a2f287ead779aef37953fbba8a9d6b7db0fae80fbe3e566e77a2a92d0aa8b7c7411ea173add9a9d7d0a9a074993001e42ce3073fe5e5dc2f654cfcdf27c65d08c6492e0b4013ef058234e2b16da7580ff6807bf966eb1ffd31407bc57d187445a6881b002cc3c180c1112d628a8e0517e8bd77d50c16d53b4fea9d4aa218ab63f65a1dd2d071b2d0a138ca93d8080444120870172882e092645e50641e0b851df491c59d41a5696614b4ac3404f7e108cfa85e2f2576fda67a1935543d4e64ab7e0153fb82fd8e73c78746e7a2d7c0399aab13f985eb1c880df82c8f507e2aebfc24ce621ec772ee16a4e75887cf31225768c07d57bafb11fa9b3d56e36a883515fe82c47694c46e77c0ee15a8d734cb2efa6d9683bfa55a6452b0d7e9d67a0849aef28d6babe62ed4f09b78b02d1124373ca99219c18260f6617c84cce45782da64dad4811383a99da70539fea80dd40f6f986c7f0e12dabb365e8f7c4fc060b369ad3cac1cff27b634e817926f26db57ce2689eab87fb3b1471065f38eb33f5620980e43546e4f149d1e4aa1365720cf6ba04632e8e218e8b096e81fb3a8c844fb599854b8d01933f5793d4ceb909a4b65e8d6284f9b6bc8969f27facfe702f720fb8ec7264abb3f97f3c381a737c1b3d053045cae8eaf3b240ec4cbc96452005f2e85c32756a7dc89f59591d68f0888938b3ee11a096b397560584171eb7bba44999886199985de5918d7a96f02de355f24b3e469319ef605e835ac9a28a895eec2fc6fb9a3cdac44e834a73cf206b4f52f5b763aa4805c9ae7266c6a57691791dd5e836c8beec5561730875a9300d6af5b3c12c5936929bc622d21f163980dc77e845377c70f247b44221d0416e25574255da7ee5b088334176708ccfdea9d5a715061eefbf1ea7f0489a97179727bd2f013db6fad1f51d8bfa633580e8f2c56217e277dd58eb8a1b83c3462f2970c5f12422cdbedfa7f6a5240961df9b4d968ee16a9d77b26f65f5d145404065f5686c3ed5396ef65d0f74f4d0453d8bc008cf3a66da3283b71dd19da01762323e225d52945b5e8fda3c08f694f5cf21eab189fc45cde8dfbfb5599964aaad9d0ad2f4cd2799cd3e22407b66fc9dbc8f2b8790116b08b4178a4e2eb253e9bb0344a9838ecaae28371ab7c0c6883844f9fdd7a8c6e73fe2c6b9df7feb87a735eef003a934bc3ef33b4817fbc6aa5efb2de67a089bf3c764c2d3b6aee07d4708076f9237ba9b32be3aeac2cef3433c8667217b73f0f2a705226a0723f94332b541f369f072ae24f2bfe2dd46a6a4da6e0864daf110a68ecdd13d3fed20eff3d01f224b0303747c74d355829a731b9ae590c81b3ac8e9a1f4aca08a7d47c353da0dcb41cd08a1f3844c64109aaedc00585e5a4746e74eb0aa7b3ca5ff21abbbde0c111951a95a8028f0cc4763ec354af347279ae1bf3a05cf21dc02b1023ad50aa5aa399386faf0511139cb8219bdbac605d971503a2caece320584a18aee1e426ac9f18c0658dc86d40235ad828a0ff9e694542caf9e825013bed2d95701cef20a5cfe9a9577047ca02e8e7153581d25c476c07acdf15a57d7fedf4c236b3128dce8a6a4e98554d2f404154b64a72610d5bb2b4004d17513d6d3f3143c2236e816766d617a34458e716ec8c30a429e6d497546d875a85715820779b84ee031bfc6bb70dee1845d1c0003301b4adf113652afc8ce89210f9954838333f359a85d96722d8afaafec8b8c17ed8e5a1436e99ba9b727867823841e79d7798c6ba863382e8bbd774f20b5807466e7abc4b451fa666cefd6a2d87bf62224cefe280edaa44255a4e92fd66e3f491d8a8687f2f5222bed098c70a920d2ee36911ad24b39b509efd8bcda5de48df7be38df918e538aecf6f5b77a022c7acc5959b1ef6acee1cc5b083eb78806b3cb1b6a06de3f0428f2fbbe6ea7c7c8bfa57eb350f916968416a4622bee1640c4c8509cdcfc028dab537478ce28d4159a60cd69c56b3ebdb988975effe1a208be7bf3487597c863a0fbec388336295f0a52762aa77578f966327b73273b529d29980b86824c8bbe4ce69bafe8de8ae52b5ee440c141f9c3fbcd8f97a13853db3a530d22174eca35e81c48862102d7689c3d75da7444b23ead36cb802b3d946bcb273816a8526666e7586870335a76822caec4d3e2b58c383734fe3930b9795412ca0904f9aaf23e5f581de9f33367b038fd82e6f3e342920d06d8e26e24ab45d3ffacd5e627c24a569469f9c3f787dcfd4bd55aefaac7af69d940616bb6ee95189508f48f35f552a9f764b09603574137ada8a60e1478cc901964fadba4e25d0106378f302463b781053575eae6db678ab0f00a342f896bc1d0d2955355cb1ff5bfb245b437e9bc011fb12bac9aa7edcc2f041e7c255ccb5639603a50085d64360e7859235ad2ba415121fe0eaaf123bf75d9213b0750a5b7e09a322448060832b94ae4dccdb90152abb6edacd110264d662d4543c2ab01b06437dcb91adfc3301b2e2d320028dc0a8cb4d29e0cc3532bdb48786050fe65f20344ed917f26abdc1078d1cec70f669ae5503ecac0630eee3aa737aea08c662743bbc937f2f16096fbd277b2ba999520cd61abeb215c55e0945bd23283a9dc471b75f6440cb9abb6649c733a41254196a9a44c0b46a4108f67d686482edee8c10ffabab50bd3f1d348c0a6dde527826c96617ae51b31de029670bbf6968c3f425b3284d1d5460a586fe43a81decc58029802a65224e6dea7ef7bb455081f186cd8bd8b962d746edc7f95c85a775d91253fd205a4b57fea4f1113557fc2ace215a191e848fe2f0205de86c36d047379ace228a86b9d0f46fe38b560d30d8fd67c742983e0b75386c6b47f2ea071e2b725cfb99bbea05494e7d97c12bc8fc724f4036dc191e0f7a6f83debd0361055af651aa8bec5e63e71f747eba63a9934ee59e883185c270711a1fd87eb80a63f2f463557d37ed40743770a7f49788461d99656b7858ecbf6acb84c19f24e8014120ee290b9f72d4abb3a5eeb8f82043f3ecf6e020b229cb00a38ff7826c4f77912f33f5dab71f3154b666b6a63d2d82a47fcf839f11a3e85e5dbafbdeb9dee9de5212310264a90b1b5bb6484bd8dfb4247846218308647e8354d3c21511e39b4edb48536d1816c8472a691c088e0549fcc5e275c9ec2ae8aeaab93c666952e2c0d36e02d26db5e628f37cf8ffc5108e3d9a930a80f949b6d3a22858e3970daffad67a1b7383b08557185e92560be0d7c77c6464b41b50094575d329eb33be06afb768c00c001d0839d0723c4075d4d7846d1188cd55894265c74871e49f12197618d1b41f95084f0fe805b70e9c1d10d34355df94879f3747a223a34cd96849ffa9c0d8b4ea5b689b472ccc9d56481f79b22ce87b2c0e0a61de8ead34b292ba34d5b7548e9f520c9688c9e7617b590005e140691c1939651cc47e0c6f57dffee817280881c82aa00a4f79fbb2da41918109a4301611de0981e39b0d64622cdc3a34da7d2f438bba8353c9096959e36097f7b7e62d76c135c764578c0c9bf0be70eba37aeacc87652bbb7a9b0de9972bf496bcec9f6dc4fa131a166976dc5eb91d2aed8ae9cfd0c90300ef0161d0a8a6ccf7e50fa04a8e650063504103a7687e9d697157467eca318772e11bfadc712641a3befe8175561be63321bf2b7eaee8e2b826d47d6865ff27330bc7fedecb3f6ccb0a479bfed526a7edc90bef2bad5c82511db340b84b46a6cafc1ba6ad7b23ff7c0580ecacaeaa1a62e31140d2180189b7fe2eff5223f86081e64878b93926a10524b99511d0c9a35ae6425b5e0586b59560af35f54bf26c3518252aa8b818196a6fa432ef1c0f38b890527ced0640af3e59a9e9be7e0266bb5a753478b9f803a66b12bb9ea4597b960c4c1afe5e83edddd62ad8b12dabab6c921aa8080e0cc2d382c24ff2fc59a5328b5380a53d1adc1bbcda109368b9298a195fb8e872be8f390049817b39976538f5021a6181b6479b8f747123232b14b771da486847aa096ee15036479aceb0f7ac3c824b8dca84a94898cb6906fc1a53f5c85308ceeea1cb7e29d2b88f695f40223ae6d0a655eb83ce5732395f5f3c1676ef1744ef7d62b1d2d45056242753b4401305e0797e407b6da9cc5f50ceed266853c10151b04a08b8e250474482d1c79e1825d4a11261196dcf018875f9367fdcd0c15b43a6d44bcc64ca28c9d7a88146aef8ea430581c7b43b127d3f94569549b1b6f6c2ac9b77aed1642257a3ed7802ce486b7435a77cf38cb80df7b0a5880bbedc0feef2b587c121617bb48827ef76d2557ae9172590b2d33dace42e096c957d97bc2c7e159a065c1d60b341526f3a804f8f0fbf0e2d455d0515ffd35f7804d21ea495fca96045182d6cbdbaea55c2736ea5669619dc3bcdf40e798f04d688332f0e0729125ee4c1704e2c3b1ba64bbb95b555c1886d24300d9bf4c06f907009ac227231be4b9130c71fe7beb1561118d6fdc412941b8d2f7d2e339db9590acbd1117db9179440b975a9776d10fd15c32610ccd8cbd43775d7ca9f8847cf76427f4f21246b28282f6080cbb8ca19129340322bc672c5c8586490e3b98cddeca60463e71082a29b3e453fc5fdafd4e07c8e66472782c6ba66ede9bb91c1496b46cebd3cdc91c2f9ff6b74781fb64e1aea610f480c01da34d9f7385b39433d67cd970120d5941b7e196d0f0933be2fc49147eaa317ecb40da6cd729cee716f31ff24dad02a541d6a72dcd11738a37d5b0b5095e87aded0c4ad1d94dc6d6980c16aa772c97a8334c51bd11218e5f5718e37b12122f680308b4afb970f906f9c8d661edf00d59f2c40279eaa1601def8bbce68081022fd7620040460afab60f1b7b4d7ce6e90f87d223aa6402ca260baea67f14fe7d4716d6451ea0ac83b1770516fffa7295c5c5790a26794b9fce730fab565e6e2ac0b76e703b9b4a8a03152e570f27deb7641295ba949562bd5bfd7e423214028eb9668f153eb625bdb9ac511d1f3f58527f42537e9788dbf3338bd741d3bf95a526b7b41ef69a4c34879471943a37673258fa7caffc69b4744f26ff90286a9bc2c08980f67d3d956d4ad0597e25d15cc90bc96a9e140218666c4d0c9b72d083dad2ff7c6572ce314051fdd382fdc7c7f587240b3b2c2c5d05ec3c1f5c4e9b3a803bf1d1242d9723cc4ebfa2e1df90a167c9b8de5e0e582d219a226ae7502f90457d5aab7276d7de74072f9ac295f7355ce368f469da2a75770d3bec62a0f2c32811820c4d3bbdc53bc49291ee88b5fc7f8a0a14d457c3a12af9979ae6d2f726e5702cc4477898f4260dcd0efd1a300492d6912e32ea74c5d663db0eedadc479528add1c3c1059f38362e0356e1e3f697d881861c509d6320d21dcd8dd32cbe3920c97441d0ab4b2464d3c32ffa92d04a9ab4fa03d4a6e8949ba2e7cf2d048bda7947635fb95eea94983c8e38cae5d0e7e4daadb61c790fe18b53d25faead1464ccd2b5828feb5d758f97740ddacf897a3060ffc714d721da95e714fe88f9a497ad6720856885660486ea7ece5a8a45e710185ef770d53510a503089dc3606defa592fc2181535ba60b4dc828bda3e7b9adadbc84411ab8b36d6a589b5b689e7b704a68f11b0eff550cae499ca5cc8a952a86f06a5e8ed6cfb900aeac11434978c2d73270f3a50c7595aa7dd87e7e496372ee4560b90e95706162103fe27c87107424a4ea99647645700a25eee5dc6f15807e51da1ea9405de7c2437108a7c533da3f0489f1417194fe3228a385d72127fa1eda8f4b01a7d34c8c46ce88605337e0bf391ef0e1194e5b59b565ff665e13cbd8799f60d02881f7d5952c8185d0c9a963f3110002cd972356337072703489014a319428feba9871de8d7cb8376740c550398ca4d9e378008b0161afbb43b135ca28b64d227838f8e3380e9518667b126b97f441ed3e60d178b7ff5ea6ce7300a67f7a2336b1becb5d72e033f54ce2444383c658f8375c66144f94c35bb26cb2e4f3c76c3679b1981d3b82571f72f6d2f4fe8c9645276fcea81377f8cbef9d61a9f63d408ba5b1d2bd07f7656fd086be53bdd065eb83907ac78cb58404d947dc03f7ce3d46e32e683bc2c1fe90d92458989a6ff0036edadcbabba44186d717989656ed07a43f2746557a9191c7d93497fe39fd6a4c0fbe11440ad00427e57c4708538c595a0b1528d99a312afcc7f7216cdc2b6813510af8b4a8a0104bf764a0f7aa1606159532174c75d30f3355e48302b6f3f1b65fdce5af3969162f4710c9075c56e241f3bd0cf3601db4231c8b9840fa7a6a1473db823f8cc525234f59fbe22bd85f32ce4d985382c295e4b1cc26d894def60eb4375b658d0cae1f6ac35920e6bfe4bcac3120d1cb18afdc6dd7c9926276f5f2ae3218f7fa3c931eae4cc48e4a3e34f5a76a63cb37c5812ec126782bfa2513c8b258afeb3abf2ec2b87c267f46b9f0a6cd8ba189ece9b1221d9f7fae059f77a82c9159cf6cd6363cf39a7e3bfd227434152e50c3645f2ae82686e6bccb0a8161ab6db3bfb3d0ceb12fa50934337c3c459ec1178a4644e497d6703c9e901d915051b2fe5a3d95ec9fc3a870b64b317aad70e152a3e1657eb2ef22cbb8aa7eba27ff2c64e13cc658d68f13f7058e0e9ecc0c23da70d639085bfd8583e39b36390e696a2edf7d811668f8fec0127fcf2318b272c761dd7acc1da21e7b07abfe666ebb260dd573bc5c613a191170b22961372d7a9846a46d4165c1f136a6297fd5bec984f88a1db2f9ac7b6be45ad2b24b1e8b0420857bcc4b4a9a48d475fb3c5a9c5feeb5370cbe621552b737cf5720e4375f217f1687d7fdb19b6e1b202a19325e8f0bf570764fa70e9af305f6ee1e0be6d51dd76b12cb2a499296e2c991f01e57e2afdaa6a14f070158394df85f7aae4042c4a91c9fa14930cef8b7b69675361abba3506fd5e38325127ebb02667681733d0bb94a264e2e31b9f83f2ec0a1c0a54bbce475df93aa960dbda7de200c2030f9dcdbc10c848c6e13ab7dd285bad8ab8dccd99b9ef4655b74b8b1ebe974bdedab8b91887ebfa1faf1c6cca7e2357ee69ca5220a2237e0fbf8e144e9f68f35ad738303ded63e84270ff897ba81039dcc73ab2a2e64a46fb8bf632d42b886ee848e468e0f90567216a44af0a5ec64975823a0340a44c61932153ec364bd4bcc81de52e8ecb79d597a273f03832dc50ab01f7d97316dd5866732730996eb2b2e971849ad2dd71af997035d91fb7ea2875a8ddbd48e26fb1d55eb6bcc58272cb963f943fa0221e1ba7b56d57e620c6d2c9b9e8adff3de1e6357c82ed6e518d630a2983f2e02a92955633cd287304c335a109d7159c0edf181f3030de99dfb9a1f4895b25654c6fbd1283a445d5f64668472e015397f1db376182398944368792fa66f1ae0600828b6e95a45dd90925a9a3127c8aa5e951b07d6ab52ec2dd5be289bf5eb76f9502d787d446c9aa383846fbab97d455d9f87ef97f86305f0db3eb24fd60f6897a00e2a1f9d466422406121d78ed82856ff0d7f639f88800bafa325007daead434999fd8ff0b8f03891a527be3fa967e586a378a1dce29169aca99c409e31655a8e864148380b199a3f9c375ef1a64093bb38d3ab92c11ccbc769daab7a443d7a6a93a9f9d2efe73fe5da7edd09b112c5c25f2cca1b166d767b5832cea769da54acd70eaf1412ff38e86d6c8a69a63953eb453b5bf7d40ed577bbd649c84976f2a32b11f37fbd11c699188a3575ab0e01c97a478defd690da4a6b2e6555d9e4d6acd0eb1a376795f464995d830c1ff6dd741fbd15ffb16c442e9102ab3f8aea37ff1552bd74eb8b987a08f89aa5995c44a909510a8393dc131cb6f49bfebc0d0e2876c37fd715e60e8a62a7013bee6a62c106cf00203e4a3752db8df3c94089b3052f61a10ea2b9fdb562138559294cd801e004e292dd39d3b1b7f6fa3a79252d616d70013d39c26432a89c70543f7008bdfeac0fd2c8fd1a2d1b7b6e453b5d0f1adbec0c7765da94872143895d13261d18f8326e7d006cb7476e0bc9f78ae9db4e07b89153a8cbc3a3f5ca0da854393f79c1af136a6c7becf4040e881df6b827f0bdb8918896a76acba843a8b4b958c632ce50e5f714f20c83d83a1d34e02138e75a287c8dc79c5e8809397550d98bd09c35f6eed5a24dab1d0f0163010dd388c2349f2ea36416e35a122ff88a8130b77cec6850b98a74d828a1ac403520f16ac11e4010fdbf9b7861263a5ff2d72a35605d9c117ea91c5a357c1f061520c134bd669205fd2540c9107c45e26af94c1cefd88e9231028b14ea739f09b8fa9571d4b96de9aff7b767f0e0a654c350a2cb7fd357db99d72c4bf721477e3e70f75e059efa1956dd81bbef0633c14006e018b887c576a59599baeaa9dbbbceef4efbe87b530916789636aded81e87911361494af71d71cbf822e0a591930ec4fbb0673543994c1bbcd5c44268ed86f353c160f9c610c3524cfd08fab943fedf16b5f363a44969e691ecb62822a6808d25754d62320a0d7001b550e74ee4eb808ad31331be188f919276f117b68e9050f409b587b6b6bb07a0324189621f14d9fceceff057544135b5ab7025a5b82eb9b922c4a270e73e2f9f8885901721a743c52e6b73731a91743251f2a777c3a39ab6358119ef9fd777c96e6ec32ac3d7fbc47836518e6ee49eaaf920eb4b01aeac919a822b8a6450f786282b193096b97743e7ebee49e616c6a302595a4922ccaa7c75d31fbd5e036817689f26b874e03ebfab451ffae3db5ab375fbf23574bc32d469d9cbadd707421d990fd7139b2a712ad810d391907e3630c786215635088a9288f8cfac9101d811b6193d7c09f6ef57e6d23053462fc1cfe8d97015b249b20a7cfd552e74bf82f74f39080977d8ee5905341b109d63969d80994412bf7ed084e9ac600a489e6e897f6a161a53eddaa0d5cb679035424c632b0fe58278c456f568d2c0e3e7e2bd22723efae13e0c67ed5c5105f1b38e57aa49967e6bf7ea4b7f920faf5b4aa9035e74a0a9a857b2c7aea249581ebbf3b47e459952856947edaef3c44cb58e9fef85b5aaace250e63b9effb5dfde0caf46c1f1659cd21411a084f2eac8f0d245028a81ca344f082d9cce232d0624d645711764ec7823891a2e4d8406626326c0d63b79c1e0b3e412971d42143625ee93264a4fb0873640f4968582defa8753500e7f1133cd7ced8afb9bc2ecec3c2267b075786d2f9785d10c4ade7311642d9a4f361912f76c5bb38c8e5e2dfaafc9b35fa9b3dc4930d5e94d505b79648d16769e039878c2ee6c43c744d820f4bafae8da47bc64f7e53b499800c749400f33f9338879828613a6c7b712e41be6585ab155ae834f872c3928fb1a29100f1b475e61bfa6b4ab062d85639a06f288ec434f6597611f40b9adc39c04dcf935482951fad42195b51d5165f3702bf3afa2ba0e53446ae524892569d6807ed4fe9ef93545f2895b71d0d0ef06280f28e196c34745bdd77cc48858deb9588398f7991386eb50beb1af06a74cc6f11020e3d3f44fe1f9458896eaff250cdda44244f73741f6dfca5c16224eb1f2b4bf88ecbc6111f8b032e26a6065c0615fe0a1c592de8e60f889206aaaff416e3bec52b37bec843cb591486f5db61e3c8cb433e17ec4ac83e5fda4820563bd172a4428b9c112faea6c3a22836f9f3bf2986911e2605a14002c3d42ff0ee764beee7acb5c42430e99c249cee97bbc70d25d1c885ac6cfc776ed499cc2857a46b3b481af44ae5098ebbd9fd75b1d2f216f09ecaef779384c2db4f133f841dec5e3559905ef638b1518d7e08952ddbaf9a89e414eb01eb6bcdb7b2871fb6e21e5cb44cc56e2363ceb809e4afab934cfb9e98568fd198cce1a83a55a9565c7693829af27be3a584c8f77c318b58a5b76e4def2caa10f3e89c40de1176be55094edccd539066cdfbdaf664554117e96b407a418e946ed5921b8cc9fee151625649ebe8d571ef65f75ed043039697daa2ccb43a4ed88814329e830c4c5fc8917e765b428497834e2d8bab822c90a0feb62ef0dcc676418441fe4efc17248a7dcf190c2336d89b9daaaa7d17f7af07ea06f8067e1d4549d709ff8735d94b6ad4e8b87f58af440a44fabb402fa2ffc96092a5f05c9faffff4316085c80c5b602eb4200cc18d9052bee4a27aeeaf2a867b3e259ac51d0b9b3d9cfdaa0b098e4ef0f20e45d7105e74062b8ba95b582bc9a1c2978c1be6877479b821bdad585e7fd75fda607afc447b531c4d4128f35d6bb0d9db343fbb81519dffd33a8dbae5c6c7c8fcaee8c2630886f5665dc5a1ba9b08c0faf4c84db9d1b1f1b44a273377492118796ac5d8a090ebb2ae343abf96b562427cecf64af9e7eb4ba462e51f437608050a0637ab87dd78505ea60aee64045b5d8a6ceea0287d1be0d75ffdbdb847f20023e192fd8578856e1564bf7fc42e8163819a9bbb856ce299598341fb9db9896bed616b63cfd0b2641773dab525522fa704f575d2c88c7577d3fc7572fe47608d32edb32775e24819efc65f820edbc75ebf98f9d7accf6f7baed33f6c57c9b041ad8c590caf596e2ef82cbd4a84d04642378f6a187f160777ae263667c93835c9cf21db16bf82c247e435b0f6df0cb18d5f88548dbc8a94c120ddf04d381c55fbf752b3e2718b64c680cbeebd7db69512320e7a9f413ee88c588f683c5c62b2b883078518c59c4146b77004bdcbccff3e6115fdf5fa01b159a516ef78903656b345151a0e4a8af5da5b385433779676c7343bdd139c3651f29e11421d4a9c2c93e52a97fffbe96b94ed42e802f9304e1d32fa09b7e2f681b993310883a2369d5d14a7747138f164836dc4d39a131807d39dade8dae8a6cdb3c168ba6e1d34067eefe19f37bba3ef895802b68963d5fcf3e1bba57945ce14ad370a4ebf6ba2bc1afedd92baa6dbb20796b4140694d87366ff0d2cd2b2aa9ba552a4ba447bbedccbba66316d531dac0cfcbd6545931d2593dce67362d09f128d84169d033fd14574d29ccf6f66b28b0b85c5318e9467791ed4d090c7055ee8fa0ee3056626b57ceea0ca3d810de0402874d8bb31e939f09ff022a0b9add5734640bf691004b1ba4e07f0613c3185ce0895d5cac26fc20861a740ccd322411d33b178bcc26097c2f5a5159887ee2339a74795152f824f4588730dc340c50cab4feccdc8c4379804b6c082d897035a33b5a5fd9b589af00af0de796d3f49bc9e08b6ce1ab9b8e210127869d14871a5bb25b59e15188878f9b38ad6f82c539ec8cfebcb2149bc029cfdd9d447e64d8ac4d7ab078d275cbc2ccaff057b516a62dca461141625fe1714c21bdfffa68bfc54e1e4c808781c57127c7a3005f070cff673db681d052ed502b4e4c53141d0b1684eee4f338c25c4fbead08de6660f50aa572a6525961a78d796bafd9284a04d3f325f892072c114f45934e34a0052061e9e3e2d7f7922416dfbab3d612e3f81cafd771a7bc3eda87c9ef2d7403be680f42b5d58f1283f1d309f24dca57d351c9a16abf9fc03843f1ae8cdd8055b9c8c180c4ede5af8dbfd4608f16f50c1817843831dfde6a719649248732286ee471cd138a6715633bad929447da5c090a2d497f36bdc36e180559dc9b31aef27a7ff9c58d1d69ffb1bda1db74157fa55a86b0c38bf712e2247302d85d0939ab0af76941597127501f773bdec0bb10d636d9b369306c5d32329febbd4835a9aedaa0ec580ab31fe3219738df6f1edaca3b002440a55293a8fad9b7c660593746c27add8cf8c8ea51d972e84869d1b5b715ccf2cfe7ff14d4712c67c430588a9dfdccd69550874c6dcc0eccb828e9acb16500ba75ab99b89218248b39d60a59a042f5c0763093d30bd8b5650df7909e58ad51d192c9bfb58ce86e10adc2214a9d3c7ce957c4bff412d66d9d53582729f5934af70aa165e7d1c57d9f88a11412087e96ae0500b60ebdc3cfa204f6e7eebd5bd369523cb3626dc2e40548575e0263a2226a9e9727532eb63ee2bbf9a2c3ae49d81d377fad965cf0b36ca071c9a067808dd18eb668b0b75003a059201eedb2c7f575ddc761faa37a0846425d34979905b6e6d3761d8789481fe5f0a7fb71ef53b208c71bcd5d3bc0a2ef794b2c84dd8ba04306382ccf104f1fe734002056d5952934e884410944e12772996f2f56dcd22445934cd1370e42b37bdf26c0a05490731e9f9537b85ad4faaadea22b24ee97dcb62071b5365950c74f063b20ae12180b3e7b7e3c92d53792403ac63128e876f7d4b94fb7ba869658316ca26ac5dded642d15b7df6ce395a95e999364a63cfafa48bcb09abb67b5711b28e94eeea57c120a822a3d2297e7f565e316427ff8b7822cdc56a4a9cfb581fdec928b0fd2b658cc70fd69680cbd7d8add233c31fbad448b6726035805d932a9c2e4af94ee722d3f5613260309d5e595c894c7da553b73dcf38736346d2681ddd2a728c752c8f30e0d962b2ce5f71c14b7bbd256d06d46d253675728fe986c6a72739ffac5ab91866b511372d81a0af4c9a9c5c624927e07c8adb344f315f6ce0851f232aa06b277e6714d797aeab233c2997fa197f3e48f635953f212209c51915af1639c6e5cd6199257c140de7716446657d4eb25434e32e5680ddd9d3e3c233d6652e66b1a7cde9ea51ebfb86bc229ed3efe45b47fbf21a75fe4f1eb207e7928938bca6d6219de35a4f8a0425377665e86b983a941a0c32a5f146d8d32fdfea417346a8e529c507695217fde0ad085e4e3c7dc353262d242b46a6b954e5856c545b31e1fd105c6a3263a25ba7039e1c805356d8a2725ed6773625d5295210f0ed9f55173957d250564e7bece58e5c433eb1cedf2be1bd2e50be18380434a43e34bdc143d2443e175894a6373c54f4dfcc2392a83b2e9c674e1f541c515d6f88fe69d7a63cdc8e4763bd9dd4daf3cf49d1292f720ce71954859a22b616e7fa8e685a669c30c370a8351b8ee2b8fd5b72503462fd414a8d19aa469946bf32827df732f0f7da793ffb0030cb75becde3dca40a87740f569b60815ac3f5569fbd531728b205a76bfa3668070af6bd96f0d3f7cd2a64517b2ced5c9badfee20340b0aba0b7a70cde22c7c1c1c2e1cc09f54c8b8570df9d0799b02dc9689b1b8f710aa16d9c56704dda78baba9f234c79e2f54ad172dbbc4945105cc8fd041327cdf2806e24205cde8e1032e4bb077a430f51e931f925df1bac93394af16ac6fb5c54ef6d00273591969cc3552163b42fd5ee053dda1b534aeac2a3e86653c1d3d0402e49837a9814e85d3a2ad59319100b86b2f8ef23c0ea7ed9ef32ad8501cdcd13046cd29b27c37a2eaabc84b3d2f9c92b9b502b2bde826038ade03feef8243c013c86b66da7e74f243c9bf1498bc2e7e3310f9c20329447ae492ada7c13492355af4c709277af67264a76d8d9e9b43446301b2568b447993436bbaff92ffa12121f51b680288004816517ade6217e65338dd1964b0f7277b74929bfea905e6bdc2d4c5824dbd31d2682ee7b8306142485bc6471a7248d2b926ec2bf3f5c58a58d8621efa4239c9b84f8a2b87af09a65c28e40d974009d8e55bed228e6771d92e2820a4cf61c188d6da659ab930ec37488422a7af930f4bb76219466ab28f51718506f7ef955422b39e4d6fc7e9459b986a04f0626af0dcbfecb03bbd0a8296c27ae99f5220e5920fb56e9ee1e56d2addf1657872358eed3e9f0292555514fda1008e685b79c2b873ed5340d492fd2e6efe65dc76b8488ab0b0dba95047f17d71e613aae13deb422ac62e7cdd70ef7556678ffe329e1f585182ae1f4a9336890cf2b1c6eb7d7e526d3a8318c713a79d7ae14c56a4f52cb5674ec41d6c678f9fe3f12ae33529134fc8f6c907b3595cb2ae1c0c9077ad581d680845cb89c033335f6bd6fab5a3ce5643c0c72dc1107d09b5c9d1e4ffe6d04f4de235fc3feaeaa1da5c5f6ce82677af275fb0286e74eb37011f189de96d8c7478698e7189eb14423f676d6251e1e9b57785ec4a632af20b1dde54be9992c40fb4bd6122fe75c1575e965c9238fb5023921648c9dbd71bdaf368a121b637759b5c3af36b89e831414fbf168ecb20113a9382c62f0b9959ecf1a474927486fea2dbe5b62901bcb518b051e759cab9a67e4e7e4eda4b4dedd5f017c2786c7047feb051e6dc2472ddfee1a59eb337075907945430329048b56a09bbc4441abe1ad97980b2d1c2372647929f5d71a51d6d469024bad6de7119ba71bd1b96e7dfabed80f3b974694c46bd1593dec826e84801accb061e917f286d39e9c9a5a99d04f676385fdcd88e24ec38c2eb33044a53d8c199332ac20e1df5b1a16ef8b821f341ab430a1d7014c4e43e8eac2da1a90d73b3d4da47a7d19a9057fa962ab66a75b9ebd7411a2b68a96c5c8433be1e810c4d4568a9705465d70ec9a74bcbc24a22433f1215bb8e79c17b5639a34e34bc19581bf7c33af6314e983c2194a17d525bf7e7d6e94f72fc52154e261fde4a700fc67b9c173d1695512b808fa00d02fb851dba8d68dba1bfc9957654247257ce3fee17b3b5d47ca5b7717d6955e95c34b8548ef2305b8311cd43e202e3166b214fa1151ec9888c4a5e6822831f04ff7794bab7d9de31f4e67e0419c87fdf2156125642c64dcab5cf6c9bc479e550e681e5cf16225d01f58a91d4e2ea651b52270de8722aefaa472568c0402c87565393b4bbfeab99b04526f81333cb0b0598ea829709bf444269833a95bf2fa936b1e8dda0f3571b0bdfd52421012248284995f3387fdbe50869eaad7302311f8a53156e5fbf26837c6f0d89d25365de06ded8a90a3acc7b89519e7fe28fa580516edd4bc096ab4ca2a5255521f14f3231eb79d9974a6223b4e04c3ace7d39bf5f105045b4a65afa6d4f417edbecd39b8440f7dff67137d2acd84dba0ec8a48a564bce1d2d42792e9c849ee7bf6e8a912280f10e90fa7c93d8352c10f97eb1fcc4dc7a16aba39c9265a4a099b470712cf11f4a5d18b45db7091bb7521c67ae90cddd0ecef8d85d8da9a95c5c28bd28e1efaff765c9e3c98471c0b08b52c95877ec6af1d7aa032e52eba4af574e2c0a02a0eeac688cbc207f3d815d7ca5d6c256e061e9fbc11e6e78608d2057e5904497c360b142d78900851f3cb657b591455f69fcc746c36cf1b0393ad18f215cc5381ab3a0571cb90cb8cb25ed0323190cb8e58d2d9a5b066e161047069248efa919882b7cf70082c97f882602a3ad37af82836516a048fabc95cdb4dec0d65e61f05701fc841da96065115a45d5f0e604a3780c01598140103518e273d9d68fc98756a7631a8ed1ba043bdbe785cb1bb55c9c414d455803b57b556c9c286bd28c3ee9b5698c664e2c6c24ce92868d5fa64a8be656d6308729f57c80e244f6fff97415d359321d10397bfbaab01bcb3847748ef157dfffd7c36f2ab285ddfb8d15860ddd84c66fcf1e9074b290462abdd6f3915de1149ff19d658f56e7bdafecc2313ae402ecb8df91c56b60c7770903cefbfb4f7184b61dbcf8ea28866b5ea61ced88cea823a97f4091c63766d32d0fb6e3e5f4dfde4f56bcac1d6579aa192e8dfb4f3396c8e28be70856cdb62ded8923a49bb91e7a116f8edbdf880dcdd78c6dce3eb3c60928871c957dddc42945570e2b328071ae148256c9175a063e2a85e22f9416fa2f565e42910cf0ae14f76ac2e4975af96f7e7ddc0c4bba20098165fd9d60f2626e17e7a3869bdea88fb9b537c28d568729dd5e5142566df01fe8584ddcaed5697677e8bb16fc224a095b822772a90f644f53121a0d9aa9e96d1fbab754aa94eafbd70cf9dfb217dde846b3c50ff622819368c0757c68e33e477f2b8e0f5e396d66cadf103533cb85b9a087bafa9c3968a9621f3745fd4d724424f73ff9af618d5e639ddecc29599a2df2c9c95128bb8ee6e7494b973d1a867cc983b1972ecf3dcc975dd8cc74ea5e27109fd77b3ad5f85e8198e2e7c9f6b37c893f0770dbd75841a68193564a6544499f4d08c51b8efe4a2c0173ba0d8e75188004e00d934514a721238ad61b760ff5df63aaae9d2e5f9051244ab30e561758cd21950df3f85b9569b3321c473545acdb2f5f651a375ced4d6cefead9355ad750583f0e9f898ce87c600fe140ee9a3cb5da81d0c3e3c2a42e7bba84a0c5732c7d3bd64eae81cf8c3a4bcee7be7f8399ec02d87483f711782bc416ddd1440466f6e3818de4f1f932495ca8d1e83b1085658fa1ebe360894e0cb15cd37b6ad538276bede9ca5f92fd956641f616ccd6119300ef00440e543a15e7a5547a4b5088c12d5619eea56d8a1a79c083f90c1f2965b66d03f0da3e662fac76bfa743a61ef1873ec95bdb9ea107401a22ee768d63a604b562dfe5e950a3d15da1d4ad49e85e8828be018f8ce4d7a94bf90c746d21a431264c47f1fcc18b3acb6f6dc2c2238a222f4558da458e5e77879d9aac50ac75ff0d3433ce49da9a11faaa529baf50e8691bd9ce3f3db8614f6d947c07fe9b37b907adf7893f5e3b5053026467d6454a2d007fef42b811b18bb39c10f8559a0788b7efc12644498589f516599631e588840bc332e38813230a40b3e1cb4bd061a59c76a7ae482190614eefa29afc6f9be01d31e33a225cc787f9e0ba41eaf9cf5f268f7a2fa4aa45c00d89f73a527160ec304a6c37250aa4b10f8bf141a280a8f7b70242e35dbdad271714b3db6a02b2053dd32e21e2a42ae6e02f7c05d778009a4d6f40469b837fc0fe5c46dcc83b4b027b13bd53800344918d24a25b68f89326f70119b5bf6888a9ff2af11e4b0faaba07823d69dec0832aab7b23bd96afdaf4704c4d2fa72c9ecb8a2fe95a4930d635f2bb6910a39d23de2a512032920a3f5e91ab248f227f1baaf766e254ac5996f425f1e7b9c766491f361d4220e73c57aef61a4263b3a4c5c6bb34810316aac44a35be8267f4c63b4c053f4e7a8f3186fa219339724898f8d68c67425d572a897683aa32912b9993784f9a81eb6e6f645c2dc01a11b403d63fa107b8f24b2decf9783c8a7348476f4406ffb8ccd07151bc857d953c00c015a3a1ee1b6f098c5e7aacc6ecba3aefb1ce5dde8a24baf1c373bd55eba1daa608b3cb05bede05ff09a8a55bd0a493264eb7bebbccef76e4749358ff9a78cab4be44b116fbf499c066c9b2b7f52492020fc40e3dcf913333f3b652771afaf5f82027f1bb5c0194721c2fda2aca6e0f111294bc59bd24d6f9c2c3f0f464a40082e30f73153bbe694798f5db0ff2bd502bdfdc93fc82bec9f567b5cdc3144b7ef70c2f29dcfae4525423a1080851a988d6486a55c284b38e9d332efea72e942f4a83c9bae258284a5509690c78843d5376d1ed1ec34a3d9dcb3005a9e1bea8e83474f5ddc6a8b0dda36ec7eb54c7ea8babfcaecbf367e1ace4c3e4306c6d0f385e1862d367744fafa2fe9d58d0d94752c73eeb040cf40491f4c6dc1de637536ed0e426698839a472622bc6ad90cc848585ce0cf6ce7d47cea17eb05ae5f77bc092d7705bdc1facbe69f394d15fa50b5cd43111819061945361510b2c7e0bf379f19715fb62b384dcd4ee94fdc2589294bad66e9d7fd2e63f5c2b123beec27852519644fa0fa8d22dd3852b1c930e3b1cfa928b197dc2f7012511e99211c12437d0e29684261875700da01413b766d898be13261c6f399fb832fbc925d2f8b63af984d86d2added5fe18f8346892d20fc04fffdf7e3f3b3e6e6128b1b21227ecd844810b8e096aae0e389f2645690564125a52b979052ea1d98d24f83243bdde3fa3997c3b5a9d88e985424f496a71a2275ea12f780c935efb575676e3d6f365fa1a082807ea1ade5f20c2374e628dd0bb13ef57b83e9b6aaab5d2faefd400eb6141219e3c1f47daa5c38d28cee854162c68e42f16012a6e59066dec25ff385bcfdf02024052a326d095ec9e314716950d215a4a7d7ef1b200a651be03d6dd3e7959978bdca81fc5311094f8c219f0b4d51c586bc37d1ec323030869b1b57b48cfff23b62ad8250b3804cbedcbb35e46003e6d396b58a69b36f002dc9bf0f9b58d94eeb23389db270c4be9fc36a9ad202df2d04088697a75a2c6a28ae06c83be8dee0e9fc459ede64f94e339b94e056bc35ec90ac51bcd538f2b3366e987d007b7f20e76694dabcbc22a8a1cf540431473010c786d2e2efa1168b6fa5788627fa4cff61a5c3cb9566738b9c9dcd33f3d8fb5feb6b5a329325a65fddeb809baf5f3bd258a5fd208732066a69553e0ff7ecbdd326764b38cb5965132460bef7aafae99d96a0590efa88b5b8489536fb06eab0c47e54b856a842f3478a2dc3bfdd37e8540ac2f38a2e7550d7cda045548f8d0e33f00c8b1677a87176335daa37335bff5620b8ad6a05f0a56094863efa056ec19f39d980ccc2dc9f34f781f695b0dfd881db4fcdc4d619bc3b0545735bedeb6871e05c8a81d33fff64c04f25328163b0d5113ca1a67d4c0cd01692cf477cf1454f7d77ef6e2668a0d68886cd14f98a25035bdc12e9261769b5e225622a6da375a83e9c6acd1da8302b0371201aeaa01784d535b2044026e2755709a96a7a93cd027405b1e8efbdb517a7ff6ef096fa223c44d10b961c93febd52b7253dab8dbc6f35c1cc42f7f4cbdac7eebf53355fc8c66e854d2cb1e2d29c7fa943064e5dd094f9c6697e0d9f698fff566c8e8c87ba9d049216a1a8700949914048d24170097b7d8702568b4426daaa9ceac697dfcc748b2e9a8da7a641e8efe004addc9db9e75a74a180eada705e6637e99fb8dc161e1d34d4cd39e82a4d11e094d5288eaae3000f44282585a949ae7263b859bf42f2b1553823c87e2ba9bd0029f9815b0024bfe6bf51c5441139270c434baeee3847a10252516f6d8f5e5ecd53cb6410af579195f52349799b2a675596da8d69c56e9dec4da26dbafc734ccf48c2a84607b1cffe76f80cf853e6c1465a072cd0390d8b767e5159f08e5554ac2ffa8ed631622f6f33360bc567ff57ad08ef840c9eb70aca5dc5d073a59a09322be2b5d6b52c44dbddf5165e4cdc1a904da7c98f889640bb5e36d40c4922e2b6962fe942ae813b4a2cefba8e199d3136198aacddde37024f086fd7145fdd01404a678514a71e64250ee2532fdac8ef45bfe432c8b73996637573c7296d4e9f4b0c7def3d5eb26ba15c9c885b83fcc8d2ab19692ec0969120691f6a3bdfd50b5b8bcc0cb1594f87c9c9a4ccc6492a0fef349538d706d27bc21b3784d612eb4d763c1ab1c1100017c50093364398a43fe88c5cbc36eae18520353b691e25c145d908f016283845d72653df6cdb083f249b349981a91b8b80b7c941441d7495bcc7788871236b5f40ab3b1487d77c0f59596ac137273f9570654ce95e94775ccf0d4f4c5e290948ee2b7b837024029294a81315e504929fa48ed178852efe512ed674e83212894e9816ef596fee485f335d6adae6c7ceb0e7b074c13067389806aeb11d89c7c4f0ee60a340e015d94a5c65c9b256447480085a957fafcaf4b76742841179ea1e19cf005933929508e392b07e42dd4fa560eb8a062131aeae355189a42e8d04b16f9cdb2a67bf952aa5514b315ec3e7c0d9b8748f9e0df17f979e45ea174bbdaeda3890e69360f52d1fcf01c36e1059a61365e3f5060afacf11381f839d9c122f444b0e5fb31a7403359ece8bbdd2650963158af119ebc717d2f31cca973b80755684435f44ad2a6c2205b5334a1cba7d9650b6f06aa239689e390afbb0501c17dbcb41c211dbce3cb3594969e1ab49df0406a1abc8229b9128419ba90387d16edcadd1ed6fa8c58e8b0138e9b0d37e0950b6cb71448e958430d2dd920eef610177285170d8c10725ef6e4402057b35bf6840bb5754fa1bba6326ba53b531489fc962154975f5d15d7debed60e9fd63046524a36e11e99b52a446961e143350b36f8a9558bcaedb4c43632244249488e329fc23730de337eca64c3c67d659b809209a93db8e4bf313e4ffb00f3b8369f75290e667228b5efc73d55d1807876531d47a9b5d7584e9a045d4b3328417527104ac180af897b8e29e33121b2712a7a75ae3324534c4f301e6d3cde008ca2d73bcd7697694799728b9b7b49449139ee52e47386dc7848c2e81838eea3c012cd382e7bf6c90557d7c4c4b2a23bef4514e4a3becaf58ec23890fd0274744b6023c862faa406dcae990bdd911d619e96d6a0cb61ba9e4359f052bb292d82e9d1d9f52b05638c70ed4e73f51546fe1e6c57b275b5a9ffcdd99b6613837ec8d58c4889a5fca3ba27bf5dc42c069cc401674d63ae5a389223fd2e2a0deaf7041e2f07fb7ee4f0af125f7fc4f5d0e3e6cf82b6fb34e46201d318bc601b6e0436de2baa9e8d022a66d18378d24f52b58e4bb645eb50ad5a19dfecc5b8270d982bd509daf11dd4af5a6538bdffcca52eb184811cb23c6ddec17fa121ff16388f4db6c7efe8c56741460e9da6722a5667792c460da8b7fa3c65f06c70fe42c9a00bb1bd84f5e7bb2516d09e9d4d17185a10d9c65703e94580812c5afaefb333aac483e329fcfac57591f813779d6d118c4791ff45bb3ffa21abd63af594d94b5dfdbe301c68acc6275e7ed77f2dd5ff9702b3051aa7c66c644cfaf4903eaa64901db0e4a42551dcd4a42773f6cb5629c7fe799aadb347a468760df0e0e1c22ff5b2a4212259a980953e1702ebdda9966fe1bd621914300bb80bd04f0f64aed66395d37502c3c07fd39e1e9fb41b5e4b5317ade870f2e72883d4821d4be19c1b9985cd48e91050855fa0e26797d4e546d42be4c10106d5bdec071a91ded386bb3b9100b3a8134e63b31a5a997bb7be9ac2562911f91965199a0e680cbe2f672093f80174f14952a03327befdb99a0f88bf3e0f7f5275176fc1df7be44020e7a3db7e2c57c7bc9b5dca129ff45034d7bb60fec790378a7a45b5d237dc29439dc76a308ec229a2b68114f33b85f1cc30cec3efda40d42a3e96acbeba2cac834bb6c092c85182145dad2f48dc9f7bb5d0b80264b00dacb7273223366729c153446a180efed36a2ce4418c6f9f4a8897219b7f2fe1293f78cb807d8ad86747132d6921a3e28b2afcf7739611266d0d1015e5f9f59c8cc5add7090019d26e0ae5fedc348b22d06f9ca70f6874350945e3dd79ba616e2071041e8f2660eabcd6527186e3e082fdad41a28cf8bfa0e0ae26400d47e74984608d853b676abe8e6ef7a83f69407cdc66170e9d7afe106e7f6a269bf15595726c199467a5bf8203c34801b7ace68c0025f386e7efaf9d443e11d855c12f02e37c79f3f11cede348741d9e03c8b02c170f980f2046049a694c4f6092fbbdfc6230a7b49ee594087a837fe1323d5adf03e386f455c0a9805fd5116db0849a9325c91ffcd90cd7be40873c7097279ce0e82d4e3c8599adae1120e315cb9b2706b723eda296535b12e07129a93c02521b4b0cf6bac76a98c98cc16ded5f92aa342fde1f1259ff15dfe41299a173a067d7c516aa779818d36977f03883d75639a624c2faedb0bbc45e94f2ab7f4618887cc3061b3250dad49ca0e9f03e19cc840b9d591514ae223e4c67417ba228f26b995b34b082eb7c0d25a062e4cb200f9551f1703b182fbdac43817e59650e3e6e6c8231777b92f6218ec61ddc6ea5e91c90f9adf996fc590a776cfa182b38c8b286caddd39c886ea0358a25ddeb60f4386c4a09c9dafbc2e061871a1506bf25f90bdbf27e66061a23ac5901756eacd95015a2c2ad6960b7183d1efc7852bbdc59f5215a5170fe098627dd213898c2710775bebb822dce9846384b2a77e4b18ad9e22591516f9108113adef5e5990a881e79eb404ea60763d17f85a62cee67c5c10000e6adfd9d13e5a13e1436b9c1797c0b645f1daafc15e3a23b4f31457c45f7015d9f84d309063944614e0d3f9c9e3eebbed1bec88e3fd2311f197fc6e78b9ece3a7628f085f8df2ae1908b8ee1edd21aa88f5b47a80d2f444cfb6594d23ae2002eee29ddf00a364d41cbea84410f20ccbd142754d16dd6de6cb365b7e5497828b80b21a0b49839889419fafb74b05bdd36d3cfb4f7a8b639b05ebcb0bc507b8254e42de9a21ed995eae1a6821fb4e5757468e5e60d31f817d04768096bb518487040bba4a0cab73a3a3f26ffc502ce6421755e6043ef7304b78d7349368b03dd392dffd0692dc5e80dfecbe38c0166f1a46e9f18b2355d37b9eff06548faa02215c27614317430e178ad15ff2f248674567afbc5eef79a8499869048c010770ddaff096bb3f5a6eecbf9f97b281c11fdf633d932015e00a08fe9f30bba79f39a9f54d58cf7d930194cab3dbcf66687c3252ce9a17fac3c5ff4a12b9028386c62c0e715ca2aa26f2944af90804f879a36277f048ecc3f9a20a9e2e99b3b76df11e956dc5a4c36227b92da919a6ec5bac16f9036bfa8b356409ac1dc34f3f1884fc4abd465dfd68268d955fe4457b67f62a360208d80db19477dbc850cea8ee61a48c04493e15684fc2677fd4ce6bac45b62d896682b74dc0c4dec48ba617de62c54a51000d12f13e2a1ffef9d993540d2bbcc6306a3bc71d8a0d41058c560fdbc3333933643d17936edd52f7085195b16ebd31cc4ca7ac0f796758ac6f2684d845ffcdd6198511aa6e9b8f673cd66cd2b303accf2262968c057d8aee10919db70ddc2b7a27eb02fbaf3771d08d0a7ef5dd539e62e5b97261e5ce85c9fa42b5b2aaf7d94419d00278d113e08d0b53e761492dbeab9706f4cfd0c78cfbb3f204de9a9c3dd134ace75a4804587f6040487a404d572b7818cff0710a148a984f10c896f821c16782cde409f63b7f9d7478db87ae4050f08e824765e0461f107b233e9dd3c4b53f085fc000411a5243a85825dd90e162733c600400536cd1b1b4976e8895294512c2587792566da8a27a62687909d54df27b8b654c4d2383347a754f5f5a4bffc5dfd5e43025bdf2576bc33319badfeadf90bc009f7adc4e08fba47eae43e1a190c5069958611c9bbc1e9243a56bf06864e68ba112b2792b36ab2cb6ca363622921dd5d1e9352f4e73d1cf8dde3abc3e9eb1d280c09bf8af0387490db176c071111662515be8ffb8310468e621cad779d3a0d683b690fd1b3802348ca7e85c9624fd402c5794966a2f17b6de84243582562ba529265c0a082148b7a2b105d1ce3d4bbb0316373ca6f5c3d5ad6fcaec6f1feb5f8df8e53be4238f79f2d116fd20fd3d24c42dd25ed910eede0b586e815c331faaf05c79c23eae389fef631abf144c5575bf7b53aceebe0c33d9325637a6ddb878c107e17ee3849e38cfe85e6dba814826e1d2736057febd4e1317b9626ae04c7257c5a34086324fe1b40e8737080dee3a2d0bd6e09cfdb413145ad75f1f2a5e20a50eb75783f1b09326da6bfaf02dbe90cd68be81df271b46714a859f9653387221bc2d0fa95771f19662fd2161089e7510ddc9130f270bae6a683a5a16fcbe719465c0ebb63b30ef711b396c5465b042347116ded26d45109f23f170e4163d14ed35b9e4dc629461da6eca74a203579d2254b308de5cc67b64da9fb33f5b58175455fd9340137aabd64fb7126191c09d73a6ffb86b06694ff755dca3e97426449cd8ce8fbadbfa80fc15ea604412dc3c1f14ac77b4d783047951e15b5e73da4596312b9ebbc94f51681766bac4dad4d7c8f06313fd1610162bf0ac0326ccc1ac088d617b83334dc7914cd0b0acef435779e97c6de6bb5b00ba32f11afc35235cc6aad603571b0a711f8161315f73b68a1c9f9707862c6f3d213e41ed60bff12b20f8b35cdbc9a9f6cfd45d47c9c60ec4e8e5cbdea10edc964a35eb2d4d86ef54e7b1f416771aa0f9adb177812a48760e57a9e97a2f16b69a6db57ca9ce0b824924d58ea253be27f002c045d195a02e369252374e9381508264d3bdba1b64dd4918fe0e42139f0d1755456436e608610af0e7226824ad6202b28adecdb7464ef3421e0edee745a7e3e9675a766a3d982977a67f4020103cd57689d0c951d5bbb4370543f4b60ce404e8a1f6bb45bb0b1b28539a9548bb68ef46456646291af9e52902ed12f0486f31ddc964ea688a8abcd37e692e3127efaa693d52ef249dac23bf5b048cf2fe271955ac35c1caa796668e23c842747ea5a3630079260057ba7997b53356b4d387fea45f9b7ae1a9af2a7096a414400810c4e28b7888b1f955a9a4d94294269e3f0998dbd454ed73ecadde5366eafd1fea8a10144e79a555cc8ea14e0b7e9eb020aa63b0dbb0a942049c3ebddd575a82151ef1f211759fcf1e57ccc20b4bf11e349fd4df37fa8cfdb5435e0b33088c10352a8ae446a24275f114c56de13b6ae7ba145e2175be7af0de6d5cd9dd8f2ecd8a646ecaab5383ce6b75d676577776318973fa447e6fafba1b6c9de48afe85d5ea42847d84225c8abe6484b77a90c912cd14542f7b22867a06746f08688e4a3804bbb51fe22031c43d9a43e9e2291dd9e3a756284033bd3eb93dc753cae65ebcecf18749fd961d5ee630709e21de6f12776beb4d4e3451ba352dd9bdbbce11be4a296da2f6f38b3ade05a2941d586f6c3a649dafb59ef2b4dc1599a45eb670fc0992efa65df56e2e30e22b15e4318a723295f1740083a83cdd5f4bddbf5608863982d5218a2e03a002f8c54a37ea067ed52c0102d8c8c43c8a97d2feedae2ae803df099e250ebbeb7085997023fb671c0d4ec914b54ca6f81fa7b1fa3500c5c1349754465d83e4edf2f7eacdb46d6a1a08190a649c0dfd03fec308620995527b8c018606910b47c4bc4e63780e2336f7d38d1e319e867a16ffca6f4d51575579a6b966a179b08b13c64c6c575634dea1de32d11c56799228b9a360e8c378ecf73a42420b329876d92fb3603f1b3e5816a53cb17543fb045019af2c50c8ce5c1ba0acc219cd9b86c25adf07e86e03fc5af0f2f7eb179a0136c3ad0a0cac21d0c4a3e48de182dee863bcedda9d2e4ab22f01d2841a8bf3e8ebc67d72352243414b077b71fdfab4776a50174589ff834dc8529d9dd1f2ad883b6ba2ac8e77b3c47a7e0d276f242390918957b3545d9ccd0e9a6ddbf4d5b0b5477a89ed7c57b16c6f1a2d33d558c6cb29cea439ca0dd7da68febd5def894cb80f93e96c1c2d974671a22e95e9abe10c6b4c9e9c88d83da45a84eec1ba6d5f0a664fd7d1608b06bf0deb9efc8a41f3a82a0f5b7b07aa77d1b86182618ee0cd1ddbc79142dc1cf891103a0cd608a9d6e7be953fdb3131c0ceb9a0cc4179ac0d04e70686b2a8ea10b81f9f795dbfa5b928e24462837c4427c0d5c65586ac3216c86101c4ba3fc575f99514d4c69f89aa51419ed34d4e211aa6588881e65f7da205278da41864a4c70916200580be5b230034c2508cea2db380845042155bf78fd91432fdab21bc0027dea17cad6ef60cc1548c721726d5e6a59b2b37583054b31cc7806f6fb44e0f8ae60fa6a5e322e9b2d7ed7b781001f22bf5abe7bd26c46eb8c41e110820fedca6ea48df5d4930a0614eac0cbc22e922cc69908d1a045089f7c9c381efa0a8eae5ae4485969d76818dff48f97fc0998c6e136cf86666a17529b3f07d610893d073dfe1f63cc8e9a66d5086be1ad3f012eda4e4103e5a9570cc21d4fc3cc00f40d463cb316ba59fba220003bbad91893fd1941a04d2b5f4edd6c0b3f0d60888b688ab459df7b5193ad981a10625d48dc473264ee9b0118f4e5e09aaa28540280f6cb2af284143da8649f5cb1870bbc94d5cc79fdfcdd3cece450f7d9f76cccb4f400c7acaf02bce3c9320b22d2ef2db44a62b5b37f7e950461cb26a1885a403c92e33a4234df6e38883ebb03c13eb02ba90931e46e9be609a6468fb7e222d4ff199758ab8dd03528436c97f2b63c3171d45fb9848459abac212b20331aa9fe936e23b6821136005e56670d96b7cd62aff501ba2b0eb7cdbc4f751ce34cb9d64751881965d5737a9f2885d1ed998a77da0f6cc860bd078fddf4e80d4ddb91be0df8957638e9a99877d767886ccc82dcf26a425b83963d44b1822acf3e8776558dfcf2a31a3f48a9c3dfe4550061fb98956371b7281862458b68bc799d0327ba588f0b41a2754428dd946a966afcbafab368a90f5ce84aac553bcf4672ec9a4f4c7eea9fe22dcc853043de5da16cc28d94257f90951a5e2d54571c6723cf2da2a472a2a2d62de50521fd5d81d4bbaa9e54a0d97a5045ca5e2eb146683ac5d20799259a39ff6a2829e33c46ac8f6498c65a459a04469a176c953dcad1865156fd86272faa50fbbb48960a8c7c28ffe78e2bf09fb2e4c5e4a6afd5066ea77a2508005e5efdb7f6edfcc8bd2a7f94cc4a67d9c811f7a3900f74c8a5a5b7b1b661768784c263842ad77d6574bf9c3985336a8b2036aa49f9f3ae98e1d84847f1ddcb2e6fcfb957c5fdb540d33eaeaa31c3a67fe8ff44661f1121bfe8314892304c33bce30a339402c2b1edbb920fdac22a4d0fd17f7f323d377a7fda4148c101d134cfae7cdb361aef8e40c235c094a36d4511ace125a2daac95fc8e4703fa44d65f2d2aff0380d19799581de9f507f81493591d7c9fce90941fa7fc5be9dfe2cf881b41972de130873c0853528b19c52fa4c44c4bb2b72ebc45a53d2d74fe27bc1860c4c659175c8ca34e03dae080504c051660f68925b15b82c2d5827b2a0352dfb14eb8d796a44292debb561c5cfc4cd1b411aa9b8105ffe538117f846fab1fcf0f02138e965ac5b6f003df71aba406fae6e60b4261a9c2b5430b14c5252c729d8d9ead1ffa805436f6fa0e007a1e4a6fab599091d137c17f7e13ae45264b807f59126e8c60783c1c2468847c674f6fc2ef936821b339e82897df2b23bd57c3e2b346a36078c579e2b9e774e3100aa3ff57504845a30d8c14075a2678bb57182d2be0d45dff752a0f776eebac08fe5d3273a1fca08be126732f8df6ff845f15c23fad0b5589c54cb19ee9c4b1d7d994b1002f677373ddf503b93bf4e767c023f805dee7e8618ad823d1189254baf6c83aae4ac6dd2fb55e2b3ab33c589dc44cbf62b47bf5399b8f0d98b0e6191bebfcb3473ce4b5c5d24d0e518e2ff62dbeafb092c60db34e04cfc5cfa9e53fb54f9035e8176679cbaaf1a33cd2797094c827e604cee32fe4d7f1240a700f5e2fa225d1846e9dbb021b01252366444ab0728eee160e308e4971d1a1009abbe029286b3b35655d22e6021ae3a9dcb00e6ad58d902681d08079888efd274bf3d896247ffa43d2712658dd3f365f848249f15ab946d5768885585c639fe973b1d3d75535875bd34d7d08bc587701b33dae59d7388cf6676554f63c1d089c566c4f0629a7b2153b6b410a580a8f40b1aa4e5e8d298f6d11726752882ac73e03246b2ef56f11fbd6bd50f953cbcdaac5c0ad8be24aa16adc60e2be59604bea5b90e1351a205483ac7121babe5c8b7a1cd76f2cfef643a0e13b8f16b3d2924cb4d8389ae980090905ad8923900163af6bb18d7e229acedf54c1c61eea96aee60b231e5e7cdd805faf334546d11b14def361676338e6aaf47dcb80084f136cc3616c85ccf26254a44adbd211e6af7afa1af4befb5615113806411ec6b38e49a04b6225cf8c72b5f7105c5a86c38a1bfdc126332ac864787f66d6d0e29a2043b3b7f8e6e213769cf53ea8fc312b37f58ccb6bf390dc86796f56bc6af2819c3ac8f1559c95477c7adbff68a3e714606186c20ee082d7db85be6c6eeae4ca7b7c61950706970de155096ad177c27407bc1fffaba8fc910614e7d86a0d257c1c193181d193c57a87c9c12b3d15f566d239e4288d00b319fea44b1053ce4c08274cc7cc6efd6ddc9982d9f9027db0dc6fd683c89c1395dc961bb4eb32938abf95924319dd48e230454b442395ff5376a5d515db89dbb62f8ab393786db8653de10dee702c28119be35659e67a3468afc1f1f7c1502263cd13092e476a235004b2188b422aec6ec5ff7beb4d00f4b4c7b75dd693edf757b7680cefb788a5296ebf98955faca611bf692d28f5a8901b6882dbe30cebcbd1feace50d99d49d2e8c9fdd434c7c9b28a7084fc452e48221677779350c3dfe7477a8bd413202bf46a52e23497d1ca65c7ac8a3b96a919a60bbd1409832ed69a39bddb2c1f87bd19b97ed246651eec188c6e0bb0cf6fd7797d9a7eab2ce8f1f10e7013e0f4f7a08de69bc77dac7df94ac8edf9d55bae302b501359a1a26af900804897168a2cf48891d9d57b9a9ebb0c0eea2ff15b90d03bc9b7c51ee61f999aa7f9510060d96502c159e70214a2d753eda22fef056d1ac4a8c951e2bde3920eaeffa356b4d584ba2816fa9c1a4abb8ce1dd266b9348be7b025b71ffbc440692687cecbd180b651268bf1ae70c9f6e9d0e1ad5c5ba7085284c6451df4666b7692bbc51c2f52702225572ec6c1ee372d30a5686f23ba2b6fab315779f29d3be9f24b8efa0bb8789fc1b95b0e72fc8b74e3c5954c573ac8e5811623cedfca75924466ff3bd13990ebc27640506b7319983e2f672eb8ff5eaea629704dd8340c3a494fe4e0dd6e06a5e8d2bfb727e1ec762a598da7cf314d4c25d6076167c685c48948b5c73ddf997f76b89bfccf60b2e6e4475979070dcd94ca8201e7e1f6afd6458cc0e6f9d4d018b719599fdc1e9584135068e0e77715480ca21ff874b1d98b1ef9e0421b17eaa07e1ae5e17e1f3a5f81caecfde552db8903cd0485556cf9b10373f137fdd9bb2faff173f04d5ae9a2c31688bcc45df5883b08a582c3d11e96369f91ab489b44f7d0888481bf558472a654fe6e5b1e8ef2c07652abe671697f3b9b1a862b6c0c6c7d4da90aa3d4ee66936f41dd8816e8c1f8a25dadc1f86c23e9a6d558ca84f2c1e6ef44afc6335fcf227320b4bdb8354ae2159654b5381dddf894810e13e324790854000022a7efde6b2fe7343978a21a5aa27b836af97cea08409a7d752882aefec8138984912b109bfd2b0e6414b8a5f169e7e7545bc4f8fc503460ccdad03219e56d696313e1182cc7656c70a6a2e3aa4722bd3be507c0d99e5378e7440120f09ecde6f1995f89c11d79fd56a782178f5079f19644d7775db1d5d9dcd0b165ee4056822c25533c659eb0f66a0f5fe6428aaa7a440b301b04091517fa90184af903f63a3f1afa5c36c81deb956c6ba3eaa4dec3a4b64620461f8c95429e97bbdd3024eac3f0b8458e077120a59170f85d4160529364080e8875040ae979e56f2e0f53eb3d04678e617d58b4fe04e6d71e3b0da96b2429fe9b174b7f9b5ce09f7540aec3639420f0f579b51738f63db4b2b3a516ea7cfd6fcbf78ec286a0ec3a5f18624103d5b5956d66866e36a47878e2e0029f5dd3ead38e2a1d7e2f67e690786247be56b61c4e628cb5505e109225c937b4debb932e11bdd9f5c24f9afc01f98dbb206b4f191e99165d9cfa0b2470c809e19b82c00cd6a142b838ca1814a2ac3d78bbda56f080c301be28c1e557626b0609dce5492b9de3246f60202f56ccd5ec8187e6309e2f22882dd131dc29e89ee7f437f488517ae975f63f9e5303b6a9c179a3da01d69820ea4e104f13a8af8ea512fabf11a1a65ec3fb5de98a5f4e4eb2652cb5afe7c9aaa32a205ca15c21d938bd5cb1d899983f982f86245cb971a990935428a263ccef0fe1160c5d72de0a622546866a30acd13033d943518485f17a7e204b84bd0d57c105102310e25a59980a970868b3f8ede165bcb1f56e741f464fa18319e2a2bcf264a0532c80329a407e7179909e3f9d3c3334766f00cdb06cc6793fc23aa9bea6ee8987e41ea29233ebe7c97a7c75e087eb4e539f5d35bde8b1f5dd5dc5caf3573826b857b4b045651f99a8764f5c31c6fcfb7a9acd8982ad35d3b79ccd3f460343044ba782fc176a8166c4d62e056a8d1afb8732df43d87d3c9b65b35d550661b3efed7cb12f62d0edf241f3083534e333b57ae813c42bb0bb8d1cc96f633b2ea832b4b759c7c05196eff58f5696e315404e9aca4431b34a507067d6211f5c00a3064fb3bd04d395a31a7f21c4e3dcebbeb058d97ec8a820f33a2720dc5b9606576ec16a3b2055234654cb360dc611d1fa5af5f1744468800bfd81ba18a77c0c4cca78427539f3724ef59ccbf580ab1e9d42861cc8030fdfb7d9ae4d4900a26b826378fe6ebc9b94f7614f8e13aba2913771d1bf7ca399bb634c75b0a7aa01489bbe16a4f61496ff4dd065bcdbbe4798412ee9f6c1678d021c07576f198f1744fe0cc6b0c6db8bd1627e6c98bd11690a5aa914f780220f6ce71124a821763f3ab95f43fab80cec1de84175cbe53fd35cd3654d26c92efd90394d615b8c4651212f4cbbf31bfec98bfbcc0afb300d087e10b259b2dacf0ecaa5f03652a9172d9e8666e0222fe14658a9d20675f8b550daaa388da97e123a84c261ea64f84995dabd24ce4a02017d41b64d34f56a9b7af280257770dedd285b40bb91478b8641ffe8042d22ce4fe44cc8809321e3982794524e97e366cb4aa25660093f21686f5a2bc7e477b2913e08a7b793333e340db55dde9a9971a3f27f9447811a24803282db99de85cd275f7d3924fd33f60d6696a833a09107e5d740f392f760bf9f2c0aad2b9f2433bde538c72d5d81351f2fa2df8cb7ba0ff4966034a4d62a30bcb03a8a80ccf5a2bc1738808dcf5f20e80ff9710e1c7efac89df394b997cb36c0d1ef1cde77ffa2bc1505ff01bbb7e0506106f66a7675f414c3ab9cb3e0c88191fabcfbed3d96dabbfe4003ce592b20e4beb3c3e733e985d4a13b9ce89b0a77c6a552fd32cba0384531a87188c8d093b42b56997841085608d84f6122187fd8a2c4ae603a894fdc6edcb9a9d491cc705807c6e53bf43530ec41dc5b1fd57c1b6eb03694cc2152e2cdd59ba396ece7137341d0826fb5ecfaf39eb0deea2e1cb9c6cf87095479587e4ea5bda4c2548d03975d6f682de2b73be4724d945410b60198be060b8ae8f5a44142b76a087e2b0db4a7beffee551380328f528513b7a61ce82e2a1c4f627a3f4e751d9f878d4ae55ff9fe744ef6c4081f9f302953e5df04c2b6b6d0b4e2e6f4bbeb1b5706b306df28d48b8ffcb5dfd1c92db8a948aa2973297674e2af7ba960b6ec460bcf0fbaff5961489f2a21ef259a6038f0340d8e8cb5118309eca9fd9fd8109085cdc2e6f73c1c31efdf03bbfcf7988654f8f8807d731f3663521eb5d0b7e1a70edffdb017b0c5e75864dfa7527c4e205a441469d7396be75ff0491fc5ff1b4d0b96c4836d508dadbad8990332f12b3d4472fe08f1bccaf8394f79dbfc3b3a0a061d4e237129e17704d6ba4d7d2eaa15725562c7a1c68ea637ced0cb8197ce562b10d52f08f099c5efb2c7ef6b9b4fa30933509ebb86f77674638a7ce2cdd87c178c0fa1cd3a0cfd9c4455b671c8146db632c7f97a0e7491477f0e5a153d0d2e4c96a6262176433c3285f52cb5f7b621e9f88baab4db1db81bf16d559c4f2c6112bf6806ba717e739029b1c06cdf7de692495992e605bb07fc451770d17bb6bc4594ca4fe84ee83e768161fe6cdbe7b9cb48d9179d06c8a2f77564e9b8598828dae7fb3dc31e8ca5470469cd644daa2f373923cdf1aa5fadf4d6a4abec1da30791aea7ea1fd3f612615af96977b62579b8fc1c5b781e41a540f89acb005cfbb06b9404d6c994cd0c3c93954bc948b76a8f164d0e3d4416ebeba601729de6cc1d11c249fdc2a99603e2663663a0b39148074ac2e3b469501f6415c7ec497d7c0597525825b1cdeeaa33b1628e773b66bbe4b0f3d6e22d6b2bbe68ebbebc9e3183e67b271c873e0e758cef3e11ceb393c9cff1dedcdcd12f5d4ac7cf970df8d068dfe58801513f441ba859465de944b232dd8b91cb5e5c1291f72f9d154fce65ea925d5d2021429ebc3470e3803455cf9c147f6e8b1810a22f814f08aeb08a0ec134dd1e0833330dab5bead37bb0bdb7a5cefcaf24b09f33301ad4d172f05fa78f50a7ee91cc792805e8fa5fff68971c96340e220f2bed162ffdcb2107b1170e06b3c5d4a71ac8013a41ca4d5e707e565023f4e86cb34cd4fc6457c295fb0585521310ce9835806d6efed28d6f38cae11ae435a80de07f41dadf2bbb0f1ed07ae542af28d0e1db30245921e157eb7cb08501e4aeaf4d7426e1d60ef1e89e6c41e696e73347750476a51312e56b8ac74aa7a4f946e5572d80350349d157cd9d87c04d21cd7c96e733d247f52c5a5eedde69a18fd811c9b7a8ff65c7f622710723996779b379d14eee0499026ad58c7b8a547188208d865be9cec7aa0882326b492ef779991dd713100d6ec8c3ba9a531effb00d2afa68582df466219c2a9aa9c6992ebc64e219811ac77094c96fbab0a43710b95fc454fb5785b6a99faf924218e30f6749ce2d68717e027269a353c9910a052c57696649d3dad8da37c4252599f42056ec9ebe855ad7ebd2478efc3dd5b1225bdb357b5784c20d76a6d7df41b8ef38c6f18908c266b599e0de73b16a2a40529f9a6933b3db5012972b822d8df3c56e27e857891892dc89043e9279f61f7c39a5d6edb1ad66533375209b7fac9582f8b14c89fc90d9d77032fc47a117fc7683387969111af2c3665a186273e7c8bea2cf7fa11310c2a310a6a8b79fcd0c45f256625c8b99478f5df29554f38d23ebecc19620eaf2ec4781bcabcc99fc054772f9e56575fb43286680f79971148a20f5bf4d346c0db23d77c95e4218cb1c96b4dc48fde3b79cc7bb528f490074ad69b97220bcca504b75feb2a35c7d17bdf729ef800ff7da513070651d075165c8151388344325916dc242bc68f4cc6d039950acaaf64954526c5189de5a9382a5d2fa777b54f221c0605ab1f1bf197876d8f59377cd680bac9553bf1d3f8fca1afb4c2333065c405fe5f95a5e646237f5a8c4e18e175d390d41433ac4b4d9494e5b39350b937bb312a50d3fafe8567fa32db0a08fc87f292ea3690c1830218ea8afa1b31babac2f39293697834ee8b8e4824070d703027032423116288353d7f09ba9df5e5bcfc3fcb2a24244d6794aa3dfbcb9b0e13a07ce13d2c22ebe7f82a703c6314ecee61f3043d1988e043a92a88596435009ceab5a22bed64820f9f80a7fd8b3325e679328ab63917487969009fef071caf6ebc0a664e6aa271012a76f8f9ba708e77ede1874356cf42ef34378653fff04f7d7f82fdf01c3fa81c3d3910c8e316078d12f953f57ccf94c2c393d28470513fb1bac7c56944e54127198eef0ad21f1782b22fa1ebf00ef961afcff334fd040b7578e67a1aa4342d99f693ba385247922218fd1102bb3fc10b20c4599fe535fda7d320cbe9a86f433c284d35cbf4ab299db0bd914ba5d22cec3be6d5faf4fcfd865c893d03c094fd35cd5cd416bc52a8593442afe1ba475df746806c81a2cfcb58ed13810078af5033405335191897d9c9b2884729a98fed5b22adb74bf47954426da2c8c2795b7296283b26a044841c4cc25980ea0dd165ee1bd6d594ec135327de83e6dc680e59d4cdd24fc10099283dea597b96b60c2afd52d033c32f6576327730ca1b0117abdc1586c5bbe59ff61388274aeb677fcdd0ad649cf90b4bd5f81a6389779e2afcb8a93ac4b0dddebe1e24fdf3c0ff60a21de2a18c026104360eaed8753e2f90cfc6e52c004c41fd401e32ec3a3e20b26a938a98c7bb6f5d802640da417bd3e36e6f8bc34e710ffcbc90c32062f8d8f72b818db157b96ea1675d2fa62bfd2c8650d60f39252bc26f77ab3163d80a7c88cba345a60c46245ea742ddba90219b7e6e0b4047342c446b149a0181532911abc1da92e1c3e12399608d3929cdab7bbcfe553cc5163479982a667501059544d4928df32d54a643b0e02318058c31a3a9c00dd32525590d8f4a6c237937cfd7ac22cd0dc615a3397c26a22aa71e2c26258c30186552281acf3d9a42f26d861fb049741325a549ff8fb026e4081806ca4ce28f4dce85fc25047489a0890fbbd233ff976ba9aae77d65b9dc2079c1a81783a34c2c9a96104d2e20bf02fa4b4cfcc2ab9d44fcaed447786e3f353d45d42a6672034fa0d9435b9414b9cfa0952d83f0243125d923b6b679de61812a303f4500b8bf634757f58f1b98c303bdaac06e5cf2673930284b660784960a88038555a99cd2c92aaad3331dc4830f8349223a791f657d886a82274639267ad11f9e0675ac793cec0236958afbc4964118c37c7b9117391fa23d0e09b761f14c8a1b3dcabe0e0c9387b12f2c335214877d1981f9bebdb82dd87e102b0a41fc76eaa590d3aae41ce30d963c771fed010d98a056b6b4a2fa0052548112f2dc6f405d3eb0f023cb4afc480f79cfbd7ec7124020b8b39171dcc787128842189cdc8eb04deec4b65f8a61554816025aed12e018870b5077438dc46d812f43844452d18ff5200014e6586a5920d018c402b6f3826d76d44158de7eab14eb6ec7a33e792d8b14f856fd0e26b554389aa71ec7a36979d123e3d15287aec1a9c6a92e8cc7764292d925f11bacd9cada8cc8d4055576fe352453e7e0f792f11d63d2ba0a980c9c9bdf292297698da38237db8fef432dce09adf5813accf4667573ed7c16249704abf2ae1d6239181d4d06c2ef55d28195a2b1a8babaa2b620ae344b1ac34ddd5ef613774f962829db3852615b57c0d1ce7e7e806adcf9df6026ca70e3ae119ef8b9a575254d1fe7702301384775d37f78d71ce92a5563c63a09a73ca45cbd1ddb2d914a9e939ab36ccc7e2a1bbb09ab752888523977a2f0eca7386842297fcc621e6ada5388cd7865b3394dbee861cfb61f3fe48619db714fb72e5e2881d303cf161bc9796b5729fc6baaeffb2d1481011c8aab6ae7f1e061fa8dd70c6aad6e31421950f792412ee3c41b656e86979c1e511f938554920fc59e4bd3787d7c50a968915510f7cf866b889eb15bd531d58c2e34d4c973897297dae936521fa31c1444300765099a6a99d558bd8763a5e7af74672545decfed775e4cc2393060b913616fe2c18a4635d112196856b4c21173be4df0d0ecc1c9cc29a9a9ec1080f37fd0824772bbede2bacf8e5f5d029151545bfb2d3292d82f509f9b66de637154030fa3e8374d07d740102418cfa0876f1221d9e83ee7c3d5a8ea6713af199366d8527295b4eabad144a9825e521a50fb8652eca0da51d2fffaa9cb9b4009a44249f964e5815bde81da300b80f36843ecabf2693099f23c88fd927ff73ecf2d65eabe7deda59023f0e14b3824100c86eb017b19f81e9e4483696eed392e4b33da9bfb2f2eb7ed9d5d431593135d912ae5cabe74a628303b1c453b14517319c40a6a48a4433bead14ee074d6d64f8711e955396ce0364674b447590d1d692f3d9a600859499975821c9564eaad45a819c65235290deb98f113f0dc734f0e18639dc2c42957e996a9e7d82289ca6ad9c60178b650b1fb1f1ccff54a6d4663d0af732a2e62ed0915152329f1f3582fd861336e87103b761bc0b598453928297da4cbbf8ae907c0ce60e1ad1abadb7d1c0440fe1eacad8d673129d9eb730db7b3e0ebf8cee79b83c5e7680123908386d05e0ff0d9fb22d1368423d0d5fb3a1872727668e3230bd02a5f68f723d04b9e38bed583207e9324b4159a72a177bf38d40dc2ac4ba7e8124ed0045393174655c76c17b611466e00f356deeef891ddb2858142b14a5e71afea4fbbbc25a00bff93d320948ac8f4b12a7bd3548ae33d0365773d37ca2f7a9cec3df65d2b3130f9df10dd8ef4c5915814f8188847c1fb14e9dc433b75182c3b9ed58fdcb2b4e02db4bfe8a26498c02a010589b007a4a004408a04f7479120959fcb6e52d52fc6eb40603658824f402009d9f7e7a2b5fce790b7e7c2c5a71598b9bc68253f0a4ec4289371b90e05f3bc04a4042cc78c90d77855f9fec698d98eaac4fd1912739870e6166cd2cf039cbc9abe36ed6cccd779fa3f0bf3c1f6bea673938dadf933243ae09c21a3ce7f4e4ccc8c22d5d83b70ebf23ab0426499344fa36375bd29a38fdda0d68eea1374474cbcb21c1036edca24c03935831a3e72cbf07b58b08943080af0b475162ec77331ad65b90f2a6dff3e2b8612aff994eb3562c9b3af5d62a65227d2761dec3824601011ecb67f3ed7b67a493cbe74abe8371c9f9b2ce2091b8d7c7732ebb066ac7f094fcaa90968a321647d3d26f7dcb22a6df6bb1138224acba44e05446d706d7b981fea96219526a3b0da791f1c5508e3cef95e9c752a4ef28dd44b2548367a4f08a8329b1df42656492000adb47f87b8726cb904ff80489ff358a4129ce9e89ff4f975efef19464e76128a3245f4f4773a4bd3b3574ab9d0cfc66d3c0e313ad4c4494a48317d7b8bc9888f7d208a1817a54f838d88a22f0f502094225ce4e96b652f78db57acd96641746c06dba51ae53d0fad60b22c36f3decdd9d9a8b25d2043e30c0ccdb3080910a69a0e1abf250396c89accbcddccea80df96c60b97ca2e5a74ecbe89311c4a53cb47515558c5fd26c3fdb63453d14ca334102838e0b59459c6dafcf65138529e4556dcd5924bce505bcc1ef338e55da6131a37f4a16cbcbeffed18bf3b9fdd8a6d1e1354ff898c72e6d721457a0d9f444b1145b767eb21e63c919b091a650ab3180f79b7acb13fee1ce033ba20911a78668d6718a97f3a09afcd0f62def37082c894d0c4abf444315c9539ffcfa8269c9f628759074a896703ee095781bd42c94a98a52a81d9b8729e6c25f11998e424beb754a590729bf2a1e42b98012b15b02a609fdc387cfd8c5ee7ec7597f24cd8d09dfc08b576312ac91a662b4f3632c40c2a239aa88c5709d5f6cd7a0305f62c968f12ed35cc3e9809fded0321f787bcf08e97025b71ff51c92ac0f27943d690afb1b5c8556b81a16c0b4744f033760d176209f6bb98fddbae9094055af84e96d4c095c2c5757743c5903f5104d37f865d093da2daf7dc6c902c8b29fc784dc460bfeab4bd26b5e71b3528c1d88f7df00421f3e65b64ab48b543c8e4d8d6102da106d982a5cf0b4dc78b3064b74f15b083eaa8595f865921e7b2a0bb763016a5e85093b10799daecd25b710f3d42794ed57ee5d3b20ffda4372ba121c36942557acae42986b843556c8940c30d55a5f4c6be668c8424d9ceacdef44021793c66f71fcffe8d20a1c9264fd26d30bf21a3d90f538fa0ef08900808a592e23825d5651f62b2b7dc9807f461fdcc2b7df0b86521378605b6bda6f5a3c5056b6d5d35e20fb70aeae857ddd674298238d2fb44499fdf6fbcf0fe0e2737ce87ffad44ddd3b6df7a9b76940beb5c318b1e1c6c21626c2b453f5c02ca7e9ddf43e2dad1ef0ad6e55a34b40bd0a1b29c8b95be03dd257de5e78b096f65456cd906e3cb336eb9730dd96bb91e291a50f873e624854d8d9180a3a9e8be7af84afab5debd8dbf65f951fc6f4958b6e4fa4458a9a54b19d19bbc9d8caf545d8a8cad4712a6ed357ebbebce19d9a6e59a22e30f77e14f24dd3e79acc80828fcb7e9092ddc8d8f77e3518b36db16170e0770042df6c39fe16ea64dfccf17cec03c555b57e06a4cafe5f93f5b8601ec26427e71914fc135d45549761a59b412960efafa3507ca635ffa4e9cac7a77d7733e40aa2931076105888119223e9ebc79481d9fe07046069abf3e4d5d08bc2fd5613af9c0722a95ed7c7d9a9d13aa14b41dd3b19ecbbe0d361f955f2b35dd3d2bbccc0821ec7d47de467e18116f32e4ea154750cbe48388cbb9f1468dfa7cf6269e39c4981c847205d6228da7a97882bd08205ca34a9270963f59a32565d9ec669152d84c1559bfa8c6b7e4a6c6b78baf1d5688aff100d4080bab073bca3e193652df9e0eb46b014091222bd2d921c04a4c97cbd95d265eb351be033ff93249c360261f41d5d1d39fb2471dcc173025e33eacecc7bfe5b0e45df07da15dd29509878569a336c702962cf2a4fa91928b4803700da0a58267f1d69bbeeded7951731180c4f976fe57880c7a9dc4fbe73b97a8a6e7c26e2f2d21519756647753f8ebc87f71e4301a115a859ef683178cdf77489ec245c76ab11f337d471f08a7bdf478904abcbcd324e049638256ff1cbc1bae7b418aad664a06cf47c9649a3eaae9c385aefd6b9c288b7dbbf922db6bbdc49f55d19fcc021690118befb882f503e64f3fcc02e2d2c9b4861d4d7cb2415f29fb16d83320c949734a59b36071003ef01144a960cf3785df3b22e3584b3ec2859fb6e449f7418719eb316beb71f4c9be60e8b73544343a777ce20185d87ca5678d229c96969857bac84667578b9a5ebd4bc2f62a8c32db6ca216a340b86d50f4285267ad07e2ea0aec3a1947ada13951d5cfb7574ac341b608e4c34e6a982270f5711598b5fe7ccabdbb67dc61f9441dbb8a69388036ca1eae8fa901f3fd569c76009bf9028a76c291953cae24dbef464a82d24ef04a87f337f7347e0dfac3e14b7584ad0afbc290420c9bba9d9bbefdb23dfc9f7ebc906d23447b4ed1eaf07183c388f08fc34c8c42f58e177b341bbae64f98abef692207237bda2419aecc2741600fb12493aa74fd1af0a5924c3fc1b3e9a737975d968c06b14986d0e1ebf09bf6f83ea3dd0f3dc1e5f72d943d69d00de15923c2005c2946ac282c400b8da66488477dc3534832c6f5dbedb846e90eadce8fe015f2ad59751bee378ec83ff31961cba5a64d27fe13bd1a67fc89868a2772a18bc2bb5413b7ccea69fd29bc91c68757a8f462813b3fcdd7499ed32e532ed4eea02737c592cdb58cfb40d9576bf059ab6f18142be7bebd9fb602a32e673d11100252e06ec809c6c09414a774d71e6316c81fd204e1d288f4711487cdd7121b6ba695f4a528d178d94776e233629b42a5a40ec5fc256a8e5b1da6783900fac45e6460ff3eec4145e8ebe70e63cb3bdae82dc323bdd2abef288422face7f236e379a302e70bd81065bb9184f0ca1e638531a5b26ceff0ea144482b19b5989645b333b9748d16c368c843d9765a56426e82b425f24b03d0e118901c957da5a1886cc55b7afad13f6ef9df0c34b75983bda53e9c9c1a236eea67959b75546c492bb64cdb3ec8a09219290f3bf8b942b38cc3f2b1ba59cce0217e50cc7bf07262d6ba1c08b3c03d660da3466e19da0e7447e76d568f257114f7f260226c7bed1bc658f0687c93d3532f64ded254c776fc5e481ec8d22df6e38b581283626bf7dde1009cdfa9b7c73db27b6cf62ac49fafb02aef53ba330b32ad76429bcd0d5d176f8a26e11b22bb7f438fb989aca9c3c3c02d0afccc1fc62977479c36935c094e51cdfc1e6ec1e054d0d2fd5b74734418d81934366c18f857c13efa2afa9c288066fbd5bbaca3118073904ac4be3ceba00481fe2cc1ae91684a86a700b64852b76eba285e4706b13808d58822df393f756aad38dc5fdbb128277d7d1c3e1740114cf7a7b1f1788fee1e64e2ef6a7f87cc7bec163957508b54d4d925b9ff92653465cb004da24c61065c78a41a6be0aa704699b61370c84e7eccb98cc113917667e0bed81b157de84884df7161324c14d9dabea0b236bf368b4a8c7269017cf544deb8793688fe06de648e984e9a7ad435264446d481aa84fcad9a8a60ab5ec18aab9e461f7a011015963d07496d072da0efaf10bd8ae10bce9bf3605f0b2aafc1e32b85b795d437e409b35f71e76c7b16521239fafc9b3a461ea03e520225c52c6c4c7b64dd579c208491d5382710a20a65d2b83326da75066a752b4c2c6793e856ab49f7433325da8f060596a1c2e875b2b224dc5b24c5953368a0ea3194777192beecb8c49e8fcb55486b47c250feabdf5d974755d292caa7257f5efbabb26126e19b96e37ecf1a02cc2fedaedd3ace02297d54b6331e683e29b8fb5a6a41fe35dce154229e3cfd161fc01b3ad6258d1e4b82fa900cfdb6e64379a1baaaf04bee07117e0bc33cc7429eb18d64c7495a5df22dcf0918bae822274139fa418e4e980bd71a1c341b7ee68c81522a05ea109ad761756aef389c297a5544289b610f5da3283e7e64a5a119fba26da154a848aa454afef6a1f4fac6627ad4df3796fd13a5674a0beaa4cab6b426962ab5ac74e77e3e42ad41624116b3da95a6146788c53e8eb2731020303664626db3073a05efc00a99df19000c5b91c3bfe31d54796d8638f6ec77b42d78cd5bc31d0fb1b4742fa542ffb43c36f1218f594b8f649bd14481f4d754682ad55d356f313355e2ef303e4725d1ddd33f372aa36012220d3e563cf0c2812eb3dc7a679482b2491f23bac18738deb3a00aa92b7644da2d8074f3ddc5fdfa6eaaf80f3d3b4ddfdceeb7c9a5528acc46129e72d840bca802b05e8adfc098f04830dfa7f4e8e3e4909f821ebc7a7a527ea8d76619fa0da210f980c9ed87aa8e442edd73513bc8fe3fe06216ddaf83cb2c7dfb45ce442212e28d4d3731a34ed844313e284179354f3d56c68813845a1c53383297053e07feedf58fec472d99d73aa527bf651f48164b023716a185f5fff0690a2300ddbe6a1b7718bc42259a2de14b14d8307c7771a525de3263ba57f190bd3fae610b702715628c5ea892a30d27d9664dcc94ee2bdf2984537be44fdd1b9614f9d7139ffa5a74275e6ce63004ddf5a9a1b614486357ecaa71962bcbb20b8491ee67c3e4f7af0c39ff90c1d8d9b2ed0d7bee42398b2dd981cb414973ac3e9b452e4f178e19b439f59f978c9f5c39273c588ef34b04f553f9292bfa6a52c3bef6884197699b6fa261ac1d332b156fbef8f0edfd959a2013091b85428e593b6c7b4a8a971929d4ae867dd300c23b5e651cb369eec99ab30c5be863156492f8a957c4539079156dbe0dd68aa3fdfce6d1a432f4bea22f4ab4f8a57822c9bb9dc2698fa422ffc07a145e1044e40c0f1d5b89efacae28df0c8bc85ffec84e2f157318250f4ceb787c35d9cbc918dc2075ba55aab704508ad189ccd5feb1e8f7204ec50efca81bf2479b110efb90797cc1d47bd44b5083a462af23b749f66e11368d4d37175597b3f73daacac86381295cfec012853f9d43ad93c5e306d7e5c79f4d920382f744132e577eb902857721b2338efa2bfcdaa1dc1a87ec2dac828a2543b724a280931fc25dfa46e1de9dfaf5c070b8797c7a99dab5b5d5587d2195a5176af6c477c7e3e8b95e56744c343d340e3d60ac3b9cfbf522357afd5e916fcef78ebc1347cb305b96fd2e21e6e7d3d380671c7db7439e5598195f43687dddefa1f04143a190ae48242438cc477d249aebd57cb116e753a29b75bfc27039691a50a47717d4297cc9801db8034bb055e1e6ab07a68937858e920efff8218c3bad508a5d8672b272dcc9461aa3ee082da889997d83e427d0b22f2cc3fd1e6a16c4836b502ae232c8833c036fd752ba013f3285793b383bb0503d0989319fb750acfa5cd9d854841ac0a3a177867d47239bac8b7bfd7dc2a758180f3c5a282294d96065dfcdd06cfd5be00f35e811ed8ad396511c2b86ef9a51057b24608358e68a59fa090db84aed92a2eef9a974519c7149cafa6d34686986e9bdb13780564467971af545d3d1d3d650ae7a634d042b816772cd7173809b9d726b55595e8ab4c9c99697e1898d219f53660136b96b3d2f307961321db32e87187e63b51aa304d9c0ac861bb8af48b0d869ef0f7c2173a23cf13df83a28896ff827fd96823c0cbe9f89886ab074c75c8db55ea483d45bf6fd3d0897498d1ed5a9ad26a0a744e0becc38ba686246e40ed7eedd7ac063556dbc4ce28767e2e38b62335f9f8f8412a1b62a08e5da6829d43166fedc4f81b30b81bfbc68d3680a216d3223833091c0d07c72c1c387542392eaca97447fef80cf054e2921a0d881c86c28ea725cc10c5d6f455f79cd0c53207701d9912d06e92f1bfb2746513a2dc5cc2213e9d1544f425491a9beba09798d9874a1dc9cc8affb9e0e23f22b23d9258fcb2b8d4d3f238c965f9e6ee21104d5d52aab293f1d16fbc63f3fac9a97f93579def5893aaf0ae60f0b8b3f282f7763a1a87f1f8a12835b8c894ca08e67d592aca7b419227fcb89881eef72d310ab1508aa034b9c0a646aa217068a417dcd3c474d1e41298c343fe588fbdff104ff1a1c4211c34110b43148c3e1e3b22495747d7820ade7d2f632d4fc914a9f0b30adf0eab181d56c75b0d3caaee4be609d5cc55651a1a66d8c6e8e10d9bcb2bacee25652647ba9d529045d4d438a295698ac0745fb63d665748cd955525fec04ec1f6cac95c9ab7c0ebf29cfd4baed0a513844c92f361a33e7316c53387c05ebc9658d2c217f75e6527b7313a54004163fa311784fe893ab35a78d5f6b86e59b54d3c6163e048ba5459d6f01c6b856373961ac661c5f12f4329e6ffb2caff1713abb1d0598a2b3448c2c78fb404b4c0bb5d73afb02477f767e38ca6a6300e9caeac0974ea4a2359692aa3fffc4f5c1738755f7c2485aacc993690b580e07f7f7fc0587a4d4071c7d7983386e6b5bfa4bf90d61d8dd75c5f505228c8da2319836732dee95ae6aae0b7ef4f5658c8b1150c29a0a86df89dc078478e6ea90a7c8271889882c7ca480345ebe88ce28a01124b3fd920bcb7a8f17eabc086ef3c79d9e2a119c2894a9d36456bdb1be2a4775d9e2e6806ef87d4e7642471050285cd392fd6a10adb28561a1a2191fe352de0c8492e0d3f0a3428f245e2a692ca8855c1532613265c84d3e4b8b55675ed7a3c4edc47ae04c2c33179fc7551e28ecee8792b0dfe07254efbdb00b95003d88074b0a12bf68a91f3c753a2e4cd28274e69441ae34ad6a446f7215bf91e9b54d02555353cbbf5e409ecb0f45e0511b80f91a9f776268dd11188e7b29b061278ec514944036543ec9c956d6fa81e717bac6924cd7b9b4cecfafb370da046669e8c49d41044184b391866e095a519c3a5892246b70a8d40de609631650af166d6ef3952e8115dd21d4dd9ab516a6c502cf67291bc96ab566ae07c4cb6f20c1b1bd7b858f4675d3c34bbf180d5f8a72ad5678614bce8f10dfb5a70e12faa7cb9074f3b988748499edb67b0e698caaa064bb72bb814da1bafd08511054c5edde7c82dc971e4453f081943b28648f197ec35760cb750531df00d132c52917082db380c4a1ae81eb7b97775b9a179e206720131b7b81cdb07ac0b579bf788401532517c8d60d6868eb13d6cf4faeddb5942a4867a0b5dbf94734700068331f7d626b7103c05129f30e3333f67efd684b26f1f596190e534d4afeb82be7e7261bc8779071cfc93716dd1ccbdccf2b26c62fa01f94516ae5e4d8ee5cda55efceec0a74cea1f727311165ce74a6a4cf159c07593395aa5bb10d4d9b04b5e3e6c2603a10ca9b116b5d6ead201c5c146b505f7a06ee57233f46e0560968c72527b7767dce81325a0737e790c22511b287c676417dca7244af56adc3bb84ccae8c656d0eef2f2440988019fd6543321b0f6b24aa856a1eead59e0326aad6bc9f74bbb9c3760dc9a39f4db0ecfe39a4b319f82c106a37d5daa4d0c44c060e32754ffd7747850d1c04aba5f56e4f85c2f90f6a26dfd25936ffb4a2e0d9833a1199b661bb6f356fc66b4eaae0d65dc0109db565a9cf264a66f9204e2cf73adb4e6b5d6c0142bc74903b8bc3a3eb25e7477e578dc8921a19fd7eba8c8e7372671e8067f3567a87bd29842def7f367986e840caf9ecbf9a7207369d707a5ee59d53f87e9cb555629ba59b139e5cb7bfdc8411dec9421775cbd54181bd0734363ecd8a60a19c821400a21058dfb489c50b63db84e7e80ff5d5c694b28ad83c9d6789b872e461806584a47df37ebcf027163def63d095e706ddeed970ec5639c663b3a5306d894f30326b2e369df7f42edc82113af83cda0da6ba3b042736e59074c6fbb3747677523185a2943e75d25134b944bafe7574629eccff35a28c68063ae484fa891a6936dd49211395e05f75df74c457b992c0430237a23b388491bade303bd1353e8511d5084df08f1c3bbf9f3445f2006604ffe8bb06ff19ddcb4844ce5955b227b2ed82c81ae4909fb156be2a68e7b19291221801bec1118ad587462400c285b9addf098576d4728aa22bf8e3a96e15e674122724b6b2df9eb70427b329b05b8be69b8706d71abaeda46a713872e64f0ee034d10d7f338a5e1e6f6e415c0b0d2f19a5f662a527161524c2947ed47dcd409853ed7aa3e373e6dc1785f0f8f3ef2b2a9be0c28fcd902f298ad20acb3a8d452f727eab92c7c42e1c9be4d602a5bf7f734143f5c2ffc6c4938de01abff924c727222a528ddf43ecdce2a92307e3df221c5b987edcdc5fbd2773c6e6fad6ebeb4268a12f7307033220b766911378a3c279b2bb05d4d9bd66587cbfccf1aa24967c9327f0c58b26c59b857a1199ebe0fb07718265fedca676cf6318fd388cf1e114e0f5ad1d9606628a5f9e2bb9c61c1ca8159e27a59a25f5285b981671178b728435cbc9266dfcc960824ac231ca0aad66de2d826dd9fc5f4b1c2b6af2cfb2a92b3239d9f5c858220a582832e340a913eba5789284b73a3edb8bb87f8da6186154b62f166d3a7e3d870790586313c9e2499af266d9558eac7c08c0465f9ef7712126fb18057a7883cb288bd0cf0f15cbd9970c5b6cd3afcc6e90feadee750f4ad22dc8cad370b65702c95866c25e83df9240d50ff64c86899842e45e4b9e005d07acc0b8db0bdfa04e7c40048146f824addea77c52be6c2b4df3e114c18cf26f4b6dbc2dbc32223fe56a422c6e82f749a361c09e2f733d75bac8888901baa3436e53776479265d5cf18a6d035b7288efa58272d1c4f32c51685f2e83de98776bd765e4eddb67705f19804fce00480ceab9a8ec33b1e27def555e1341838a0052a652b055563ec425066fa5813cd2e08ba37763ef7a497157922c7cd419bcef6305cc23a88992cc103f65b982d59df02d9964a86bda50f1f35d8fc5164736ccbefd026ac83afed643af992026b7629fe6bfd3a91d9411df8aee469c1a272af5ef5e1b3d260ae943d1aaee3ac59732905f9605af664f24f060eabe473d1b38593ae059c62364afcbdadd736d21f7d646b239cdd22bac7c30be77607eb6d56ba13a0e65141c9dfab208ad90f6f6c252e24d56978f1c33e85f2c394c09214eff4a7382846d2fae39b61e57097768216f9e5cce174fc379dc1aa8748aa93f404be107b33d148b53f1caf9d25714ed35ab23d54fc6b551eda9755118ee50b00b8cb0d665e2586deeed652220f6873a7f77933295779a25dfa7b4a2c686bb4f0ced71eb175567d00f579d7ecbfa2a322f506f98f0b60b0f9b00f2d772f47666b9d769002f9ff04a7f8e4ff12410b3058508873e2d01965333f348a34fb6e8529658fedd2b34931f9b0e9a3a986734d6cc712a23f81702d039cab17149868badab23d9876f443e8118f4cfdc2c3b277bceccf26057f27f36f4f1ed2b286747f129801a54b3f4e98cf7fadedc4e52a83c7a47e3ae199c4ec4ebe8ca3ef2a05c7fb81e0bca57fdc453a495abc33f518e8552ace418b822c1743205bd35737d22a3306491aa1336dbb31f1290ae395c66b0fe52949cdc31833271af332c5563920d1194c80ec2aff8e04eeb29f2e839b1ec732e0880ff487222ec05cc1567285df14b78001a163c52130bb86bcc6913ba174bec88057e1a8fef011fc1cc1da5c9a8b5a5826beefc3efe5ee1dedf966c1cd2530aa69d899a0f6529bcbadd077fd598ca60864d6a2417bee58ddc9d4b09115c5ef74ceccee2b73162e04fce199fba11a5891059ea82518a00365037ae10da8a0dc99efc94ca691c0604018b2d6ca819eb973df1cc88360784c89fa92bd674996c59e0f4f852c53809ccdb2217c10be2f81e5072cfae952d88def797e9db2cfac9bc36d322cb5ae60044da9ac3e4f5e8c95a74e18e419c7d808bd12113a10551484409723de3f8e10fe4f69b14f1fa3d11d3e4edf6e4087975d2f70222adc21ab0d047bd8d8d95bfbe3c1001e6d7065e831e019b742dd911959faacb6e3b1840f41728f371650e0c24755ec725f7ba4437847d684ac26d2cbc03bf7ab25d3304f17754edb7f17450e7213471cf4c58482b835b77aabd929690c07bec7835660d24e745f831087cabcb3475b8fb65dd43c980974aa0d919a04d9dc99b100175ef9d289fadd5cd4d26a96c8a89339364e0aea1a2fae635de38d9a0f85e858da4f4ac89d65872829bbd2e5d29a81daf50d05d33155cdd34d9ce6bcb493adc1857e0e4369730dcb6681d9f8c25e500c1c7697bfee71e37920cbc83bb8da0f0d1d192c3698088d32b26b5a345c79c989cfe47a1a72e50e6ffe56538afff51e83239fba690a3693b29beb8ab2c13c171f28dde655edc8480e00ec85576214df288451fa62ed5913b4f0e4c93e3676eb047196d65b66523476d46f44ee84ac7db45ef0e3c4e64b8033f7157ba5343d6c359eb9bcd4c382df7e3af17ea8cc90d28acba102aef337984ce49b98c1929435bca9a3def080decd80ba8663795029777ba41b09d86561668e6145b9d9b309f27d5d55f7d700a605c68577497d5444c8619c8aefff912708d9c359b90bf8685d084dbaf634c3f7c32360e2430bb1c6a9cd3b6a6bb75702d668b20fac90e5df71672627b13e069d36cb701a7923fe22e2f0ed69d06a81cadda16454408ce27c4571b6e036db2fdcaf80d7f13494ac7aea530cd43aa5c016c98a9b66b7382e613389115f9f27b4e9e192292c2413a7d99e1fad464a4ec6b1f0b85d517f9bad0e1352e4bfddaed3ba687ef5f96d34e12304871528b2dff7ca5671854cf2bf0bb2256ce99c5a50891360396f1055e12a434f1ac2ec2dcf4686ce088912009e1cd51c9f37fcfe6609c518ea92c1ebb1184efcd8942fb003a774179e735fd833702d00dfbf9893270b98b8d4cafed6d00682b9443fd475a3761e2789703dfbf5227886a6ef968db958537f0e2e0e86f18f74e1db588a4ca25ff92d71a3b8d0e1ebfe4352d77429cbf2f1e2228b47534662f5c1ec9e6cf2652dc60de0ad2ff6cc8ba2e9cfae779819de828b0f505a45035861dd1686fa0d8d52552cfd693780751228407f56506589edab0e3a47ec2cd64456f36f063b70c8a03d655f96a9ecf4023ddcf3f9f168e166773773cbcbc2d507a7e4f039ce1dc47f9c973ddc01a5c3fc20e3953ec4001821399cf20c1c75807cb15d1823edb550223bc4fc05949670c5e47c0b26ae82d3a8414d59b56fdc94c359cb756bd67eef6169d3ac4a96672daa190fc315efc663308bc3bc7a9ae6b619c46ba9d8bd885e8afe892f59e789a3bc49c757410f1b8e3a2ec61f5fdc26013bd9c0d61406514271d6ca74f3e686e862ce2d18214bdfb422efbfa578f6788408f9d627c52acbf0ba32a719c0a16a60ee0d6e2e1362817330b516509f2504181b66916b77788f4a0c4e3246924d165b579a245bf887e03c67409c65298fd4c7647587e8a1c16e6a764fd065946ba754198e558a8e0cb201e371e1734293f4b37bd96d4df9093505ca4014f77687285452f7e323f801edcc31a57be8d3e763d2bb9d2ce2df5ff551a6b22a3b94b94e798412f6aeff26531e932fe99d376827b892d2af7032c588342dd4e7b5245f5a3458c08be663462a196c40591a555e974e4a919c6bc1d5364cba2d26f561ffa37067dee6e7a8b5cc305b4f401777ee7cb99371deba24100a13306c73b02a2ccf2973b06e2dd5d3688e56176c0e4fa23a210522c3d7bbc3fa9eee7692896934200832910ef2eaa2528642d732a11e87ace7159be1f27716039e0c14842444f4ddcfff4abf954777ff68a870f49e390351e77778051bcd70ecbacb9b1978abd0e9a38d2c18334565b22a4208ef696fef978245448c1e1349263ed2e978da02c60e3f233b065dbd1b142aeb520de0238cf71d10cbf95424a92237679f7859be7df3c90cf49346ba7492e2928ab6debc5b9d1ce5b4d5c16bbff61e90a909275b81911edb272fc83dc7b8d6d9218d8a5c0ad65576a4aa54fc43004310028abfcf31d57ab90bd51da571cd68b3b3f765ae2b71d145802a80746c41c74e923a3801f96420e94838c1380dcb73fbcba74aa71c4712d58a054d8e67dd5a968788d4dca8f4fa3a38eff87c8e9f03719e0f3e40858bd11f087dc2d0bf9e4c26279f7a808433aa2e1686095dc559688d702efcfe8fe3b7924b46cd06311ba025c872fb3c45e4c97873843499660e6a4a08dd97dac92fae5eeb8bfacfc1646f7f7b750f9c871609e0362960503a086a9048146207b85b2525db809c49971fb84451993a6401f637503d18d06d0488d79a5fb2f09385c91b34a2944542b22e31f9d381b1e696758469cd56df182f55525ee1528d6b1325ec1d52164e60cf1937600a09728e25377c440eb9396610b9aaac8ce62eb7baddb98bde211c887f876b07338787283cc384ae326932a40429702360a7681f94985f16e3856f28951b73cfd1c92aca0f2512e1c2a5e35877de9f2610c875f33aaa0a8c9c949d622fafa32803827abde13dfee681a8efa5b436a8d15fcb24197b36d3550a5124fe636d98bce60837862879d8cad44497b7b9bb42ffa2409f54e854b536f1d60a110308f5ca94337359e7d6b32b83e7e5f380a2ce3c7964622afc55c9d5c8d7d1168f0c60a8ed34ac5395a1f4801ff7067ad31c5e2a8426e36b67134b31df0ef456270148e6fb3df7e351ab0cebb591383ee0acd85f092f54d68d6b4d60834d03ba84c449ec2c2849e86cd1fbd4288750d765ed098b65569184d3a04990d176912b57198eba7fb181479e93627ff836a19fc803a79ff15141bdd5d39573c9d58328879937d2ddd710255751bd7bd0c73d60304cee5517e42d296f5b0ceb482cb93773d26fa06ecb1638718815f67792804e4835f6a32f6eaf09ecbefd4ef7716fe83307b077590113b7f22528e85a82a6b2815908059b52850b24b98f04f5caa188de878b46227308f971e3e53d4955fe33ed33a50e69dc6c763cb991cdca54eca6962552ae2c63fd6ac7340ee57ea0d8e64df74f9894c18c0c777411b5ae65f1ebdd4e0b274e77e193fce50a96c9755def39c0a2b2a23bafa7809305c9761321368db601474d3e5ba0500f41b027d0190dc13f61f6b9238d0340875b407386c8d02b346b0e6e3fbee4ecdde6f969f340b1910825e4f61834b62f59e37cfd93a3d8b25dbc8de2c5b727f9ae87fa0854ec6b9a24ca6f8a7a04500371c81b1376155d451df3daa02b208e38122f64b9bd3d6896b628bc5cf2c19eccbd236ca92c2dc53cad8947da6cf165864a4abd2f4d503311c82ee0361642130611d0ae215b8fe6895502868878af31773e23004aced0d8fed9d78e15eb43d5e930fd969e525c07b8f372971aad70bddc19b2004ef45e0278debb1f54dcd68684d0a785771786d442f79bdfcedad128e95c6400174ac8198efabb00a85be7900dc495510934085f96d54ebf906175f1753ede7d9389d3695bc447c5ca3e93e41437b2f1763259865ecb0b2b5724ceb1f8658f661ed1f7380eed121b4454ff6ae9e766b0a088a380dc07fc7b1ff9b4d84752119e06a0de043a4283b18954083721e8c4298d75efe9c7e4857caec64d21ac5efecc7e8ec72efa2d326cffcc71a93d1c06069b0aef4b26c174317c9030d5f410494490493e388c546820bfbf095597bebc0b9ce58f9355bfec8d777f829a3424caccf498f99a7f1a963690b49786c7160d9da4f96451cfaa22091234b369ca5d1affb87413d22f55760be02f9ff5e9cddd7e625aaedb100e67d0278bd5cb60ae79ce581a0af6c4dc94825e46ea64a4f5de5613ae1ba1a58f33004a73b973a5fee9fe1de61d07b3c90362c19720497462b928777cf92f344cf523d355da58badf95f6641d39428c6364ae062772a234d2eb300ac527c4ea53f2b9692dbb0865ebf264cb65772e9552cce3d583e2ad6adae3d8d17eeabcfecef427161040ea8dd2a0c6bcba91ccbf3115636c5820f703c4f6c5639d7087db441d6c1afbf68bb24c1b33a858fa93698fd12b234b51561524bdf0f1295db04ee99d535f5e9c8866a1d97d49c2a5bfa4e19dea402e683c929451f917c34094f7df0bfbf33fe75ac813be997acc008aa315f4e8feec38a9087a86b5849f6a295a699b979a5a589320f6b5d518d5e23693f511cc752f7de56b711ddbbd9353b61a280cebaac4b9076f80e1bac0896b397671289ead2d56e6e2d0b480e7c9a38cc13f300da323d14a66ba102a5259bec49d12b7aee501366b6b1f93365c4c34cf730745e43776302c67dfb210c16d66cd3df0d189085e9c976f098fb56ae646f72633b385c36bbe8d9199dafaa478f0a4d1b9bb4a76dd8ec9d2cd65244a749c3b9a39d5cd039d84dab840782a7600a72512fe11d106d9b4852fb4baf3b4c7da182f36ed5d57889ccb89e76bcf0f38173acfa9e32b5deae67a9f11c24109780b84aab6d8945930c87e2a5642fb5a708cb238f5a43b35311e9c10d3056e85004d5487e0b9b019c68ebf864a1c95d2bce813313fe513aeb32d6683400401d043d09640ae20b7f77dc9b7746eefbaf2a632c06b76d85c70659678c2dcae8b82e66907865cf628c06fab3c4e56a22a514aabad79cf20449b6ca6e00c7062f55e9f8d78c4772320278e76417c4f641152e5f6673bbfd4100fa61d3e931110c941a892b8cab9c656205ac9ce3cb4180a7c0dca008545cb4ff4e41f4fd62309845298c245a272f3dc4416266fae144bf12eefbd78b06000faa66cf502f793f1ed9403ec30227c349911256ccd1aa94e04ed0e1ffaa40310ff1a36af83c63b347852f030e06940857459ff318d3c36be77bb6284d4e66f0d16a8fab524fbec1b478185a94ad57a1b6817d9125d64862429b20d936ef19402e4844cabfff2285f37c3eec2cd0e80b42f6d0a703d080439bb2d8afd6dc8bd3d210714f3c69bbb214439e87ac4b74bcae2d5c3f41d31378fadce3134f9031e9348094c3b9df3bb5def2f84afc00181dbbb634e4b8928bf9b587b98042dd64d488b12e5da6e856bc6c0033a45f913b76192df10fa21fd21b4692c69ad1c7f889717763145dcd11b4cbb8a5f698b95b6182899c3e00adcb940a60f83d956695e5564e51ee5c9df0d0af1b3da59cee218ccd28d53b373472ca09f3d518d9a36d5d8fe8a0a9e07ed06cfa967b4287580d880025d6d9ec297f656754ef87c6b7f6a6b07a689f1c67580cc6f6f34622f0f384d2b480df590d01c251829a4893d8729aa3efab0354357078ea2e770393ec25cfdf2e0cf841f8af6c12ba4296cb059cd269718a1fec470e9d5c77ac9b2b6977d37d736177a30fbf69f1fbfd7399264c7404a60c4c6497cecc12dbef05912e492c5f51b0045cca930dc8ab319e01fb1dd44e4aa27acc95ed89d712e0c403097e0409219fca66a4b429d88fbd0f47ab30168c7ef1fabb02162e8a90a25d7511d80d474541517b6a216980de09427271dbf49c7aa0ed3cfab6fe4d357a69da11c1134313c896ff1587dfb2dc36a96caf17d1c7197fae95f66427369b2333da02220c608a89ef9e96ae5f4a88e4ced5b8390700214dcb47302e9d8c8069d7cbb75331265384167dd7f2d8117c3c3a8e32403e94117cc0377f193ecd4ec15368d539a57a34cafcacbb0fbc8e4a0ac11ea0b8ae1c697a46c4f90daaf6fa7df7436df11a105799eeb2e4e1a17a9fd408c15984ba866e904e55f9ac54ff0a51d90e3368cd86db5e289ff39904f546f87b26681fc4543e2ebbf352d4554721fd2b5bd953d33bb661ad5a6c6f10b6d128306af8072910eb416bd1c552bea585ddb931d522747022788bb2504a9ccd4ffa5710bac49600d69a066d19cc242b90ec04055e74861a4c2d0e6c9d5f2e798c7567cb280b83823814560493bd9c85b6a34b607adf377b3cd0cc219caf27bf6c54b6b18711456a249c2f2574490543a19d3997a1bb77e6f6ded87bf33ae8fe28d676ecf93341325eb8e5696e2745d82f3e90d0947af60e66a9f0b05c184cff74850876e717a780f8d9d2481531b7d7a3187461f8d51e9650fb2a12432001dc9375dbc103d4e1a20c2ddcdfb282f467e874553c0b4ecc2805349ec7bbd5afa93611eed3982cd3d59744688506300f4323df2d8b52ec133c1ee4b85b72a761b1ebe93b56ea79500065fdaf41c157a130d1439c382cd2f04083985f632b8a3d746b87b44d0268fcb4031f583f221c33c1274e11b20466003c626c43b6863a57d83d4ae7da91981a3bbdd3eaaa999dc1e4bfeaf93f05164f0b6a39e6e080087ac7ca45cf0991422138455d9ac875a6f7900bd8790ad52dd1b4631b611a329b4c7f3b11678788c4396742c3bf99da8cc3322b77ef9ea2cc8b98361251831974abf3db9361c6403ea74c85d736a290e912aa00a13b7b1291ac988c92aa3b89fcb60b51417bbb1bef38811b85052cd4a327605883c0c4d0a890b5ee6dd731b2d01c2d67f6ed313d2c49804baff8efa60223a61380110f1c5450f2d23cc2030d8f15348acaf3d45c4dfc071e95d627742a0af57d82cab0f4428adb35984f499e2a4afba8da1368df1ed57b4a9c6110ad7deef117dde0b22f9c3c444e1c60756641b39f528a2c797b27d00045a47b2b3b3ea02ac33ce0f24ea17bfbbdddfa8021097b88b8b70323b41b2587d40f62b1d539096f4bb690213a4171b992faea650e2146d3fa6975014ebfe9e44556a4af8b3a95d7cfcff32e74893638d8ac3dc53b7a15cae981ed2ba65a0bd609ba9c32acf9ffe41b1627e97beabd77ce17a4420a0e7ada6a79ae93652e180cd8aa50ff2f9c4f96cd145054038e0b0b9b99f3ef5435cb8b3b62295324fe9cea9a6ebbeaad19f84c6520d9a3452acc7372e1f35df0993bd448a53f1f32a32dc6e999990d570cc3b34efd9020123b6795e71a21651fe7aedd1e526854282209609beb5b708f97eff88fc98d3fcda1cd5349ef9b921d4e57546fc6329e6f50db2ae91ac67baa8ef1fcc23d0e5bcc4f24c7b0a7ff199c1ccaaf70ac122a98ec6b8d80f6d8579be29b153ba3b247293afbb131b06ea0e5846d574e861ad91f47c3213713140bd6f7a8bc4334ae0d1045f0a962941660cc5633e53178d9a2cc81e21095f3ee3a07723c6ad584352ce76cef8d1551260ea0d6a2c955d12876f8dfee587417391576bdb3ef7f24f9928410f21f46e3956a0b682a983f431048d02c4d84db48c9cb49c9207b1defc7f90f9cae2828a19214c2f561230a3b7ba43d0dd2199f0c0ca72c160d8178e06356429cb5804c2d677a719fd78a24e7c3769618e5f758e98c7dcb9a4a28737721456a8b8969bd9532ce3b4700d0aa2f1274d830261c241b6fc82d11bfe45012c23509433fa32ba3b4000905f98739e1a5aaf94d244cade53ca168e400e466a83232f95d6c6594d456a31a0cb232b20b70acc23fa5b21ba955e7e3611083ea0bc1996150d4cb5a32df611cb4023be371178c6346f1cad875679f772669a76500eb73f57a271240a80a7272578e7fbcd9dd3634cfb96e070cb526dee9a95788f490b1dbf25f5a59ad5c5e6e92113292bded4628aebac716a8a98d408c6b25a1a7c44bdbf04e9643b9d38b8099ea7d420deec70b1f6cf9f3e9a73c3789196aeead4b3f5a8219158e325edb69318deaccaa9c697e0bbcaf0bd895accb9cee8aaddcb06534aa5e75cd762e61714d44c9805e5ab3cc6a579d85a236698d5ad7e2bcdb31bafeffa8bf2e0e601f51c9287cea71ae673580c98be86fedb7c734c802de84bf583a08eefa5eb3e69764421a675c9517a47ac7a6ff2cc4bdbfa3315561efedde33cbff52002647d8be2a4bae3ca7886b4579560b81bcc37fca4079c5350b4eaf3d266edf9f390caa85325d388b8d480c692dd368b3859273cf2389083aac564a2d0ccc4d2ee671ed73875e2c5c424342178f0dd8f74f10a70db12c208545981f5b144e943c0381b4131c80557504a801f37f7a28fddd536fb10c6153fcc1cd0eeb17caec5a4cf4eadc06ce62c33fd49dbd10393c89e2585e8ed7ce0796b08f1f042e12b520a0855d08f0f0c8952824dfe08ac0cb975c83cb5060c6243f90510710ae39858a57f8758d1e33fbc827e5f381a3a772c64c7cf7a4835efbb86829fa08339eb8f3a6d23ccdf289e8864c822fc243b3ca9fc22531da5c54a0cfefe795c5ca68f1c1a012b8043d5ba4138cfb929409cb11782133f85829c6a2ab61bff111b7f2e17f1243c5e1f362f41ea7d692f8c925bef1921b989e170e16f0f0a29f853427a929ca427f4e760ba7d9f65d9bfac7832b2851f1b200ba7ecba7721d6555c21f2ffc053d2a0c764b145882da8d72878e3e1219a6bf62319e90cd30a08db544cb09f9f9e6258f5da02c7d2a4a4464d9987b55ce83f4c1688f004e865f9ae85e764038c48006877d8f3001937001e9faa670cee717c25df1305b2b26c46f12cebaaadc93cf18dfc44b657fba519521714f92c3bba9725b3d399c6ef13746832419c8e492f7fb5c940295831219424251c6eba359fe32f26c97ca1213a188d8c62970f8d60279b893bc42a0a2cd2225ac8f1ecad4d0508664e169f236c620a8e139805897ce3ada216d03c7600eb9ff7094fd61a29e0591914d746a6dbc7bd60fcf9c72fe11a27c3996deb1498e3e822da19a9876469f51c7efd589b8e34785a91394028d7753a211edff38ae047999c7b7f1c66dbe504e303f3f1339a46df65893f6bbf884e09d2579efa7b784c229361c16708faa3e6e72857fe495255072812cebe73837581b979480a0eec2e40426a7ec72a411a8006875b170a04b774f8cf5f3fc32e4e3fec4b03edecc9e41951119e1393cde2f8f232e814c5e4e9ec052d041b9fa2ca9e1d0bc33800aa18ab8dc2f829ac7c071b6e67c247fd89ba0f1aa1ea313492b1c8c4f1d997e02bcb9a777ae7b9be741ac6adc9ca18b949d176d2aa2c50c7aad22010c463f8a3f7474b009d6abb903353c6c669d3fecf85efc13c77f6f61ec7ba029063919e8e597b636792815928c60e4d10d36da621cace9b5eedea539573d8aafaf053c6925de2b5c88d52541745c70d72876352d3012878e91374f5c155f0a9e11787bc90673f7cdae255e5f4c52eefb57869f999edf928c596e832a40320a66a1784dafb9dbcdd2f7b16da20ef9c272212453a4e10586ea6455dd3c3dddcae1a97c525d00dc0a3eeaac2895067bdbe8e73ac9c51f5926e6cd55c4ac1421628d2af3578805cc5651adbc6be4b798bf3e20accd96161cbd886d792e1a4f88df24e7c7623314547597cdafc7ad5298a1b0bd810def469b9303feae2ad96213cd373d4af762554d49053d3545940fa9f19a182fe8c3e5051cad5f85e69af0d1d9a8983452aace95e6413126457d11dd71015be91694689c9b2af07612087a10a4fd79c1a6e3d3bab030f99c24486aea07f98bdcc80bb711620218ce60f514c8ab244b0946fda33af14ffaec2eb65fe979390e021fda91dbd73768cfd11f33f6984a92d6dd222582721247dabed7f1504515d0c90bf3fee4f91bdfc9869b3f69ea431cf7569dc304618a056cec39a6cd985540e03bef20ed4fe63a608a36c25c0f0d55126eda2da93170b667bd2ebba761b5f99de9c5b50a6d03c2f2f0f6f7b224802b0adc9da574d8dfbb2d00166d646786eafaa92002ebfe64451c2106fefef5d13c36d22b20de0723e0d1f186d30e7f1612810fa823a085f35c108f003457f82b5265200769b84c4010d41d42ab18906b1df095a2f6f39c99a46dd21df07f9fcdfcbe2a9825c54d9881d68e40c5f0d029ba0e3375098b1410f2de40012b266408aeb94a9af0f7fdd4f3c96544999b43b106590b97e79fffab775d5a86cba3739c030da4edcf18d9986a6eff8f36d02bb9172992ccb666d91e057b7ca68f30599028a33287505de35a5f922e25ba53cf3b44d6dce7f01a512b1b7f13ece1f10201fcf4f79cada4172c8daf1c2d6a36a05f15e0964145e9f4f5ef78a5cbd38b03976ab9f0717db5ad0022edeba0cfdba1725ab90dac3f6f4a1f60d584cc054d635481d8ebc41e24d805dd1b344c3a78d97c9cf8b679a8093dfd003ab52906a2b82c63bec7ab562be24a8088031fb4d8b487b250767039e53e10fe1f4e02a3530e07bc78b4c0f5570621d30bc007834dfabbc36793547ecb3ac905d96442396f9ab8ef06b4976f4ea0e21882d8f6815a3ab8fe6435501d74445fda1a92ca9e511eab9f5d3b4cdf638ea86b4d8075a7edd424a23fd65c8bbc32b038cc3ed77630697c27b69f28f7b7fde20ec92c3cd602f9b53494e9ae983922dc246d51cd2c6d763244298308fcd627f7e71db7e6044ca6b340c92407398261bc16aa49fcc58a3b8d4f700d907b80e4155099a8bdd106988edba6d0dbbe2aeb01e66cb1a80338291fc492235f295e07f58aefb5d027bf9ec277329c2f5cbcbbf50e9dc00baa73b1e639689c67d0146fea54b2bddd80ddc13c7350aa1e77920111c4ae8ab6bc474e3333523a620d9c0a1e4eed2a17a9a542176e2499ad6311918d78d4079ea8f742e180b9c3a8bf5e990a7b2c21f6895a2d12524284e27f3deee01964556b272ed08c36a13dabe8e21cc19a0fbd41a0fd7bb863bcf578560bfe9718a4ba7004d099cc73916c14f02122a9d0ba259d3f0d1164c86bda4c1c92d70becc4b54aa7cc26598c1d6b94f11a08450dc277e9153975cdc1e2a0400d5841154cdfdcb16955463e68647253da14cb4601a36d652e6b9cdf86c72fb3fe019d15862001bd4e1f4a27aaac6e81f8dc4ae1ddded573870dd129d2b84c16a39e0ffbfe7d51e6576a949b6e48f845ee7453941a5b76c66ddcf73220f41a13892188fa9510ecd49ecdd60f927833252cfec1bc0fadcef577e4227a2dadf3a59bb28517e52c7b828d7fada654effea590507009ced4d27abca5d9b52f3c3d656be9b5e0385f3971264cf347284769c8caf84886f671c136d8a478d8c23e0373e4fffd5b2810e365a1a593fc1eaee9030ff39e55bebd7ce4b1db37d882b15e7c3d21ddcbec81dc8ba643a84cede47f0a4267356a480c56fdf1d7dbbc0cc49123b1430b27779a2261495778c3aea47543e8ff7f2d7981c2cea9ce3051a3755cfbf3fd0d84c49005d449639205338efb4a3c850ea90182c931eeb6ee2188980385fc87096f26e589929382a9fe4c3e0f5e7edb643bb4aa4b2b3697859c7ba9a7d82499f081484dfd20a1cfa535f0c973d8e8727baaa47db67e64fd3759b7cce76fa513246325cd0b89ff824ece3daab4e81e1c7ef0a660ca74764cd3ba29d1c5c42cd2a65f8575f1d4cda0a075f06a68c54db534f66aa5a110867c04d4c8b3e2737f139e984574f257c3c3cf93d63bd70345756e6cf0a02e5437cfd3aea0d8a9e633815f819d92bf45fccf8ef48105f4f4e1597b2a17428c0dde3be6d84aba18be847b5bc51aab40f81146d58bd4d61b4ad72438ed6261ee79f4a5c05b909f53dae35282508bfddaddea6e81dc06625fe2071826dd0646efa44842adbdba055db857e979da4dee92f635674ca844cac67086c80476aac26d161945e1861cd5f0b8d551b60aca2852ecc18aece6510d73fb7ecca960b2f4c53091025367eefc029164bc897bb307ead1dd6b2c2b40868a6f9f174139565a590fdfffde1f25cef5ccb9d1110265ccc566ffbbe81294b0026ee05db60e6179892f2b88796ab205f311e50cda810bbfeb8b48bdc7f6a644be9f459cb639935b73be1f107bac6861ffc9b553a24a47ed5f25175168706f43db928e5814db552f3a9850f331e5b66591d04beb965a5f97963db946c9f0306548b422271d36d45914f4777effdeb2aa31a4eae4a93afac6095869607b0d3284d4aef0da2dec637eef57b0c52d5616b45630410d2f31f4c86c226908817f0c6d3f45f6f34feab7441f3530ca34d9be9eaaa2914184f70f87b92ca5c460b9e652a36c46f3b60a50a8eb5015318c6f6a760edae25fd4262835a6bec4abf91f133ac28632bf093ad042c37019d5358de7a2460364dc80d88cec6852975784c38588c55a274499c423f4968ddf4be044b8fc6d72d6e3214695eb2216f2c0e5a5ebdffe511cd234ce7c9c73a7035252f3491a132203af5ba66e6db767036a0730b5151cd22fbfd2cf4b8d83926a7c36de17e63248d1e22810f413b7574ca7dc971c21614dcb6506d3c4c0b6546cde6c5ce60b3fc0e689deba4fb4b50696983aa4094c047a579b8ae4749a403ace5cb75f87d739a6aa50cbe93d82448abd748d4457994a7d047ab6e0b30b960cb160582e57a11b6d9493561c67f954493040daa0b017fd45ef58ac2630176d9f8c080d7ee35ae5ae9b8ca8999036e749ee1782fad9240b78d1fee5af8b373323efb639769121b74eecdffc027f29cc157ad6ec442cf205f61a7f1740cc4d8b31cb4bdf39ee0ffed376bb103064f2ad3118d3d082a1ff28b76d03a0034d44989c21b29b8d2aacab10938686cf79cdd3c57f32746fb8c879e4725e1a1d74d0c84d47c9187fecad861b5d161c262dd495185f41678e0b085490f72b97d772a936ef62bf3f4640c5b3500ef7e440d8e7ed80e6cf257ea29505e1b41df55eac8b2e9c038316354af029ef27956e0d9fe7b402694beb49b856d60750d11b4344b8c95ee7778c2363df3073a1b8be732e05f2fee2db0bcd53a96750af172f7fbc462e6fbadf3f6f8463d498098921ddbb1530c3cb94c2464959ea7cc6704f4d77ad84eef01b7a34dd4348fb7d0f0c30b015729639b45a03733fd2d8432328bd5db61d3ce1e69e8df5b6f0efb508200f617d013e0417c1f1ee52620a8d0ce3c1c573809dbaf5e7e3f85ada391d3232b6efad4553faaea6981e7165636e7556e260ebaa756e6f4c7a6c241885aef6375d403b033d4e1c60f564b286d8e0952242d4e38edf27b33a51e760d31c544d5da8927ee2f6e0d4e3f3a9a42ca1f4123966fa33816c8db66e46584ca04679f091b6e19014154a2eaef5ca3c4d172672644d6c78759712f3ec20651240c4880073e67f4b5d43166418b93f135c089424e8050fe71f28ecef4c54a2d585c50266c991450b26146ef7e9b5147d4a0e0dcd5b581285a7bf9623a0e888b5aa4cc04e2d3ed146cc5700d3297f0acde9eaf5a6f94249e3f9527882d0a7c6d70b75b5891c7a5d35d0edac5721cca1607b8c35d7370e73307def0944fe907f250112375eed48a1e1a090b86ffcaaa7a9003ce68d0d26d1b267fba89a6da54db1564a3a3f27845258edda38d3845c9585873c91cf85ced29e3113c747cbb87280390dd2f80790f871d7d3c62f47850ee4a5c53ad9473b9508be8333bfd60e7a6d4026ca2436c76784ecb3c219170880b730389b5089ef38b3272ab7b2ba35b9fa3a105ac89d3171eb9906fa86347ff8886d13c556d6dc24b24c51fb77060c612a52ae79f990f93023834cd9af6b148e7e3239166c870dcae1c2b70649c664637c17531cd517708ee5d5aa15ff9c0f5e4a7d7b7fd5397eab886c1fb926447b7ec90c570822033b4043c8e4b49e0dcfe7b86711b543cb107a444d82c848acb1be98f30af0fc8d83150b1ec27bf49f2ad50e74fb7e7128db1f19d58fffdd3ec1121718f95b8c2deabb95e108199150844ed0dc3f6f1562f0dc4a441c243167a683f61c3f45876c58553385832685832f4a1e5e0650a168f1de9f781eea4853ac0e46a53936b4cbc403de6d02ca6ec624d04d438fc38dde3812d3d4e56501a765f03844d001e466d7441e4e5457939c7b8328b873900238db0b138b685ad3f5ac0b79f225d5a1e984ae97c433e9d94102f17cb040030311457176fe04302b18a2e8ce3d6b597a713d5789e1ea3c1a483894ec11bbbb253b82e23e5db00e3e093737ed4a126f63a6e0a3d07695b5b766e2149a856d2708b00e523582450f62e56e4c16f36505f6524a1d48c99b905c724048634d9a768c576eff76c8029f1366dd92fe0810ef7872b71f0d615c887f4ef12f940b7dc7819a8463eb63d30b1a186a60d4a4937e5da87a5a839a782be884b0012c4f339a309ad6e129d9c5e700cdb2e78107be92201352ceb385f9d790eb5521a36bd9c2deb3a83a081e65f11d25575f90329657d72af6f63a6fc589036bfe61d5bbcb662b0a8aaca45a99b89eaafdace4da6deb9104e4307c776bf09dd3f3160b02031399d48a5aa3de69aad34cb13a2ec0c2c7e0a8f20d11e7900fbcbeffc7a5dbdd81eff40bc588a81702eae734e5ad9b9a61724ef4e6d1a676de9441f7f4d4245b8c06a5e85c5f6e0af523c07c209874e3bc40f1c5b4953b955167155ba198ddab8fb006885052844642bd36c2acfde23e20aaea407a770ed4cdf99686feca665e3aa33d3c793aa26348890fbcd8b62c09dc15f46eeede4034a4a3377dedc760d1e5d1e15fc447c2b455856c249b7ec3f6d08c68133561e19280456c8b0d7fd8561a657662807fb4f130ebad30d05631f186e3a27cd6949c8d4c361ba6e1332b9028170a1884e085585c1513153abb88c08ea47252fe9285c804af3c975bc8947da20b770a61b74eaa19f9ac1a25779d148ed52bacbe851253f6bda165a8e8a3040a4dc85b53937bc63c59c0aa27ef21816513d09972673e0b38c6a0aac92ef30dd8068515716423dcbbcb6a7bcb00a40ca416208928ea41a8cb6386b0592fcee920c7f1e70ca6355e5772ab8b811fd075c40568cafbc75401d121420172299c954262fcfd44ed3f4cdbbd1ceb184afd0fe797f2bc2e6d9604f18daa87ce9c75540649baf829640adcdceb47f324bb5c621e0cc7bd8d6a760cc75dbedbe3e3fb1cd8973210157d7dc90310ca86423877a2078fabda24f0dc2d6de0ee5c01a31bee55e9b44dbb6cecd23806eb1d2007557d9ad7dbe23ae0559a4311e32516f6d65cf080394dc273310ee0d5aed6b684b183e34d004d9da969e16602fc18fb3f6d297066c326d3a1f9e4324c1a9edaa3e9371c78d86eaf7dbe0e83c2be2c975d4c615e80c4a427ddd49c23f751ab1caabfe58b36ebfdd45f61b0931c1288a23857e2f9e8d5f4a212cdc85f532eb78bcfbc40213d512e07bfc5a763b82d2f3083146cea77d5a67f0d43beabf43a184f7c08c856590fb86b70c638dc2407db08a62a90661a8581fe580b7c410a678cb01e314db594cf04fe8a041c971aa24061500807b3286b2fbf040af38f058ef630dc8826bec71eba9664f87899514fdac1bced474a6450201caa537f4f8d086e996f2674018b04787bd8895ffe3fadd0f1c8b7b304c925cdd3d06f036baca985511490bcc724e335751a54279ecf2b5d95fc1363db79e20807dbc0cb8c82b2acf6d7a90f19fdea13f332efcb90d6cff13cade35a9ae39af21199e2c40b5c380170e87fda7a6e0ddd7e7196aa6c46610325da0387bf8e014008f8d039512e0837d89264f82305ddd562c81fc7ecd509c7b22efed012358e661c5ee4a16399a70aac5f6ad1882740cffe8afb9d6ea7c632c62e801f3f81e6969b139e7d5e4473fd7b9ce264c5450fe93e063cc31657f2c3b7fbf34cf157155c085ade4dcaf3f6401f44aeae3bec8737bcd1b4610dc95db5ca340af42c32954461f2a6c2791105121fc843b032b88bbabfe8b84a97dbd94b453c6a797db3afb63c20218f3dc61f8c06a4ca96db4d3575881ecbbeb01d1dbb950dde9c8dcfcbf837a8504235e9998b31b5d3fa4c13fbebecee1cb7d2f6269a803cce8f9974578a23d097b047c6173456440451a9086a8cfd09c309ad737990d51329247412c36d63ef2c17151c8076413f6acb2a94ab62c0a20818c4fda986531c640d2f0d06578f7227338747de5f7ad5d1edaaf9608f0b8c607da4badaab36980d17bef381786b4aae5ac8c02ad6fccffd11b18cf713e97dce7e7e014999f0d6be38cb5787434b6f2bfa95d410ddce9d2362054ccd6d2bd9e932cc2961777d1667153277dc250795e94a9d05226e1973c1324eb21069b925084ce2a10053f06074cf115f8b1c1fd505d4ffa4f390a2aeb98eca17de4b0365f85c46e3354638dc210484958afe4ff6f818c903a600c1f634228146819333314070a97c59762e80051bfb35f69616186f84915017d3fcbb153aaa8a77a90130939388dde2d77658bb0f00897844ab0a1eb3091fbb4e0a2a4d59f4a7c794f321dfd2f6df4803bccca3acbe96e1e1dfad1c66d7d9654e3b2a10a1b4e0d1199ba433c5cb0a6072dbbdda7ce1b6276abb78010c2c1a71f1c674aec25dc85c217781d7f9d2989e598c8df128a4adecefa9aa45e1cb15327ee4d811059e80f13d190e98fd2b704213c8e7dbc0e122b86ec77a7cd8dcaa6b4f4d5c4fa3041e7dc8a6dd56881f1597abe02a65ef56624c51c1f37877d725d154595b1ef81bcd2f920235c66fb32682754940e487e69582947614b9ed85b13fdf5d1c55ef267f6beed9d6dd99b1d7a7e791f116bdcc31ec9ef2a837682c011a7e09e89a4b176543a915575cfa6e0bbeb9da228aaae18d9b29e4537b40c4e2243dab8445dddbde8876c5dea2b8375f1162751efe4b4afe05e7b3f2163457b0c5bc5e49e75b384d74a7cce7e9441825e97c628ccac74ab0a7d596760c9783672557c63b51ad78fc16ba595e4f9893a9e055780b090102aac6ea4bc9ff40cfb9af69fc4fa15c180b6edf3925574c49ed1b07de2eaee9cbcd83974c49283528e3f9d1436d75fc6d160d6456d23e48c88429e8e5fd93a0d0a90d5caf7e5122c9afd1e047b0df704a506c373666657a1bec45815bdaaf31fb74cb67bfd47229280a00efa2dc30d5b137688f65028066fb846e497a2721b1a46ced00e80be2b3e048930b7bea18f9dd08323bebcfd09336cab172a50f1cff41a5bb35b4190b82cfe12c0df4ce6b96f1bef351c1ecaa1d2ee3bf39ecd47a0db1e23e5ae7bd8a7374adcc535ae313ce1b1fa8b96a2752e7eef604a2bc6ec58472b2f3ef24fb176c29a0aba806ada3617290f6f8e11350628dea844c104a05badb1734f094e050cd9aae114533704ae867bcf634ba2e64c92bf018ed02c3107806b469ac8e4bdfe1f25ae003f6d1d7081f0d2cdb26c1436abbd48dd91bc8853265adb9d098457788eac374c0ad133bc888954bd491c9898ec40eb76619f67e1a25c4e2f3ccfc647a3cc8d3a9bd4b0c5fce18fd6e27d2f2925d62b8076f30003f007cae664b93a02f7071a05f2a4ae9f6ef5f7c319ab1ede3752460becca74e22a57f36a81701a494c5d8acf4c2f938c63efe3b9acbda9dd0258f3ba2428c4e9f1a00a2b5950a0eac9b0714dcf7e2ad86b0b94bfd5ee81b950d0d0e200edd0c6beb02a540f141c53d4f0c826cae003a9653a2b10d8d62bc3e6f8554b9fe5cd0e810853b918ac4f5746b8f076d1debd2c7d82cb4e95c878437a936c31838f1be62b391357ca6d54fd116e20033d7f37722b584bd68725f444bd7d33f5d3a25df1ac16d96eb3f4071ae791d716d2ca206af31083ca5048987219dd60b5f293f141720367634874e8bdb37bf12526d08d0d35e6f0b1c701bb5453a55fedec54e14009a0cb35dc9216ac77c7902ebf742199567baed23989f1492042f7431a64dade219ce7de328095264b83c775852605ce9c1ec39530649a59f2b6da27726798fc8c1a90da8a32026da370b980625f56602147de3c18d4add63117a54bcd0a525dff8d614bb62552cbded666c82b0003208c17b8cd77d31540d75855a5ccece93c0c5ca0665524305b88dbca0d445b89b2707088000d907a53c209dc99185f24ea274b1e81eb0d9b4e07c20fab28de3cd670a877a1f97f936c04f7b4971ba9fc328aa26537dac4bc9b8460781d25549ee6c0ee5e212efee22ff8a84ae85189118c96ee6f35cfa0387e9f6aef4eb72cee9b97601754de6bf7b2c6d0eede9e2c47dd4e7d5b8eaf25005613da02acafd202f26ee6a2573f88335cad84af6d5d3f403a3c0ae7b9cd119d2d6442c8376071e7748de15320f4d8486fcdf2bc7eb859a3a85b3ca7aba9e7678ecdb9adee98d41a2c5499e985866ee87ce932c054efceed214faa037ee17f8e08e4c97c921d5205f48136ed346c4d8da133b5d5b30df304678bbc1e5be88d20faa4ef64a5a5b133704ac1aebf43492189c2b01cb418f82ce55a614c9089b6642fe32fe3c1c573e0de9b7f83989aa5d868e2425480330c694e0fbfec9b2d3211d67265e504fb67e86e9d4d46ebb43abaecdee1336e8846261fdcc5b3bafeb558aae03f3347884bed60f8732082edb7248073eeb9c069dacc57a2f9670a0b7f914e90b67d1cce19eedcf56d2becca8783c77e32fd5f62b1db63a20a87ab1714268fd719ed49d3d7d717e213c330b06e34e7960b77c5b75b965d5de931ed9905cbcff6c796ac056a2fd64a0d4748a21e5092468540f0ebefbfbb3a6b706fb936c62c231776d8befe94baa21f78ffe8851aba103e76d4134bdfbb435a4d77094befbc132ecafa9e8ddaef3876a138fe56641dfba98e70faee483f3eaed6beaf5fcb22fedac50b8dbe7490c132c410b7b0b6af61dba6bfb542ffa06812e59d380f7e9d011089985e80f2d7fc96e3a3d1be0b45152f291abed3185d889193804f386436df3c7b3b8b0b37d46b0646dd5abad83fce0ef22d48d25f84c213271ae65ca376b608a1e00dad75daa322af8065254f1f6a1033b352510f751f091df2b427e7318ee8ece03f5977b747e3933be4a57895984a3d7e2dbf5c1099da4a9162c0c40a6e1e383752365a3f735d460a20a375a518f9f45f35fa4ac0fe3afd3fea6148f0d35e2b1a19622e41dae406a022f4d5b18fd127d3013035075759b3865daaf7cd28f2d038e9a4103db941a486b0fe2f75c608b259dfeff43035bf73010820d38d721347dea32292340a4c003b137a5e1eeaebe8787e07c23a2211666fdd14a4aabe27a1f265d27582e5e1e116fca5d7aaa5cd9c714aec96d66eec41546189e6c25f14ed05b95da5136ff5894e253096623084ccb62996ac6000ecb83ad900268290a0d1b68c63ad46660349a38cceda08262d8a8a29545665038ae14cf787528e2ed38568b34285bf0c1a6af41189b473e4dd24b74ef99dbb11ce0b772f6a955df07942d24bad4a3116f1c5320d5cb16db7bfb65adc424c573164a86d0729d50fea10a4451399e832eba3fea7c3a5b3fee476dfbf5e0ca41c98f7eb5571d90d999d32b775052c6fa0e28472a53182bb7648e8dea9bbfe3ef1b7e86f1f99c570c6beca6dc7e9f620d43d4d685c8c97e7660b9c644d5940a5c22522c795a42c200cb8fd3c6aa2df110f2e87ed2ca0ccffde2026c89ec6afa8f067a73af2abf0ae3de8425eefe641773660382cdded14a09c0e5f7f41d11d7b309a4dc94596b238fd8844a7f8a85db534ac9f274185c2e15959ad83288d995bcb3931cf5630a9e4230b1e4896c60c0d35e725a7f2f47647659261abac81e106765bc5c79b011d6eb504c4d805f7f239359dd9f90748d5bcd40f30000494576885d7ea696d66713c9c447761bd358b520eb53d9a279b66fb896caebc69faf68d239e9d6880abf3236cf977cc7e962e98af48e9f17020b6020ebc209395717c33c250cc51493a25a4f850aa5ff9513933a8c5a11aca22e09487c1c77f95a283d2c188d8166cdc0859677b514d2140589e8ae610b2cd7ec7d358275d430e1e7fb86df99b43b99622afb6cd7a45a7c040015f8b7ba7bc60df22b40a45e889f728d2d7278da7417da656e315a297689058b353370b89eda7b374bb3572d39004de3c0e9fb053b4ab9238024d5577f49edae1f99e77e745a9afcbf9f873a49e55f752396086b16645ad593a7967de085466aad3a06069c5bb40dbba5347c2ae4b2d9b2b4f181663f7bf3924c04986dfb3f3126fc333fbb98213da95ea087648f9b2b7451d8f8f14b0641daeeffe430751565f1c9b84c156f2ba7387cb0b90495606af5c6a0953222499dcffa968f6ae7b0058550e59688acd26acc3986929d22c0df0ca4c08f472db0460347e0018c286c9f8c6c2651985c26ce835e2dc1762745c949975eb43b08e24a52b51072c1c1f72a75daa6b82813d8a21acc1554bdcc7d3aaf1c7340044a917d6270efe54fe066c58292438cd2b06de9ad492255fdbeb18ddfb2d3777032f4675861f6a76352faa34fba43c447d470dfd82dbd9501d6aadcc354db99e7a95f567eca62cbccff636934f1b83617cf114c6b62c42514a23a8814026a6d3d8ec22731d5be84c615c7962a6bf4c4ccf50b513333c2f72c27e937c6be7653f79d1381e228038ea927db50922d30c1dc61c02af553c1bf82be35c113789eaffe43911e82ec9e00421222b5d52ae21ac6711e24c0b7ce2b10735584a6866eb936e6042454f8238fa3dbba07e45934e182dace5610a2c4818a6d06f6ebfb915182c66aa74cbad0b5950300bd0ebdbc813dabbd937d2f4b9d47dacea5e7f8600c7f49fa2683aa9155bd6776144908873eee7af2ff98bf18a983610a429f08d26cf3c33f41eac6da2ac4bbdbbcd8ef3ecd10fc617aa316dd49de0a8bcf3523a56ed8b5e1111e4e40e8336c57ee2afe26ca3dbcb77dc68e18445f1bc089d91300a7e94ec1b36838086e17ad2b7280eccd2ad3021b12763b1d048f313dd36eb779b5e0d859fecbd3b7f371fa3c8efcc45ded9dae17d81a04f6337e7c00d07d5b010ce0672cffcb2964b76d15be866887d850ac3a480ef8c23cdbfc514171b34b4c63adb7db5185a4f82d2f3620e200d24f6f47248f6d23e0b8eee21f8908d3fe622d40ca9d09acb61ea801e0b8ac08886289f4448c44ac1c543112b03df90cd4dc2585c714c0bfaed79b26fc77179f644c597e2b557705023ccfa2b27111934e360cd4a3a33ead047eb8b2dc1b645116c124a5b68806f54d5b14d1f16a83772c06c9c4d255a8bfc0bafc6952fbddbec8ba67bd3e578b78af7f0a374c28d009075ba8cebbc3ea9eea20954b6753c38a2523bf1b0ab2c213eb10dc847c223fa71124b4d811cb24b44b70d411ea010bf9ca9c5f7045648b2b2f63d057f157edba8c5351f42d8d94fdeda39e4e844002beca0945134724649c2a8c95dbc02022f5bdbe46d129e8fb16b4fb460ae2340976ddb0251390d2c339747e03bec090bf3ed39543647ef758fab5eb79cfa1b776676923ea593fc2286146dd9553ff15668053ac13dd811979ec8be55e59e9bf1500ee43bd7f374f04eebddcfa41a2dbfdc2e65f74a73b7debdc6bd3d30b46ddd624cd4e22b69004595e96b1df15cf7c6ef691816f7e7919806ff53c403f721a5ebdfda0a667296fdc7a11736d0d99ba4ccdea2e55607e5a649686c436322534978c778c8674ee217db3db30382f052a76ee2ee88bb3c19488da19c885dcfd85145d3d349380c586027b631c9279a516b9c088598089e6f9521b7303d53d3779d7dbe7ec1ee99642ac3c4f273696128a66262630c8ecb62a20edc981f885734b6fa4266bcf98e9400427987970e3a20e0b5b4a6c7cbc2b5c3fff0fc8c692f1f6fc76afad62547c5c68ab0faa49aaf420922faf697dd78062b5d344ca3329cb27bc98dad41e262426b53d33e6aa4209c18839846e02c1ccafcf215e2ca0b7d5077633a7a1a65fcc45380d2817a7f04b32e85ae0d14cc2644eb07ad83025256bf8762c387cfdce47732a5f7482e361471219548a6dae895be955b324bd3338ceb72d8b91faba8f81350311effd53abc987df6bc0d61b1dccda81f868c92e5d17155625ec6fd6b48269f6ffc1a20ce0e3417d1c97e3ceb9211de7e9ce54613856755ff8bde20e6dc10d8e2936cbf56b82b250d1a0e9df29cee220ae4af21eaff190631d9bd4b0ede19ac2b3edbb5223333f268c9216891b2ef816100d124f982b3ecf78937eb5389123f9108884cf1e9482843e5c8dac7935a57a3fb8bc4f6bf45dbc2726772f9f8fa8cdbd0d2675c3d424b214598b3ca8dc0290d5724e621655d1d4338d2b6a542dbc43418bd89b343ce401efb2c8c7952180cd7f1752dd1d9f063de9fd5571fa9dfe8d26301eaf944e1666fd97ae2ae4a41f1b678d21146188a42b7c75478a63cb307bb881e472a8d7afab7e9d0740179ca4f123abb9fa927465fa3086e9a20478041a3cf0df8683ad84e50fa026c4688980d21bd11a2fb9c7d2896db43e6b17b486acb75b507efd455a5f7cedcbaa087db07dc05af861848d31e2e912b08abd145644cb0828cb79c4cb89344bbfe584b90a38e066f4b6a370013ba5a6bfa26d1af410345185558256c1f031735afab4862ffc16dbd1911008fade4ace3a424458585fe897c9f1bb81a4f1d731a7e70fca773e5453b2fb90db2984b00d88cc4ad35af96e357cdc3a694def048eb7bc4c51858cd4fd06736775aafb0919398ab311df3e971061b08fb62104717b61d526f771cd234a1f162a97c4455e202221467be73e43df99b2437effdf191c8f85155dd5de5b0ccce3246ed75dd3f2e8defb51440ea09b07ebc8390b5fb5b2dc89906b5da76067bd878be62d998f41f93aa6ffe8ed0384e13e2a429680813da6a0983eb57595dbf1d0787a0c89858000ac97ef3116a9681b53058bd2fec895815510d3e81179b43074f82d367a6c7ea3431a53f38b9be6f61b73e3f087f9bd4b9d6a4e17b68c858ef892f61449f59c16b66698b1c89b24691041794ffec5b77c30aae4f32f84039efa2be051871654d0d156e2b4c673be159093bc239d3f2015bdf13d69811751c2dd4577f9a570030f5d796c4689aa45c63e8e18aa52dd53d269c5a09b7bf9bf64cf7496a95784dfbbbec9a9239683bda7e053b970b5099f869509c8fa169c51328df90bda621d12e964d562d937a222184aa24fe59c4a62ff934dbda82e8cfa60c94ac79e9b5f8a444c429751c9444b06bf220d20e503a429ff9d8f7123f27d5dc26220aa5c7ba2a77933aa642612fd9cb1c4bda0a804525fde0064a79c5bf6721f93bf636060be6e579176eb2c1076895dfd51c69d0c2554285b412558c3ce8dc13c08814a41f22184348f8f40981b81553f317c5f72820b2c8b1fadea6df2fb7ff8480f85aacc7fda7df6397b67d62ec412c08d4b9ffd86070c0714484a190c9df4aa8bbaf20faed999853addd5c4a81995b95bd82613ae156aaf879e54e8bb107488aace3e106692dcd24deacb0e96076a8aa35e9d5f49219e230fa3bcdc6f880b0a784c2a184e222441a61f51fd6d65a37b82266be0645d51e66ef8fc11c8b6d5e1507e4c5221db0c4bf3b19d59c65e96183207f62b6d7e23711d966ad628f5f733a4505bc1eee29fab8a2ff3539be7dfe7e281ccdd23cbd02968e550d4f89e8310ca6bfac57ec63632f0ca4fb36a2fb7a623bdf99b47fd1bded680c2373e57de058eb9b356874d4f580cdeda494b422f7d7858982dafa2f3df87f0613d4c8ae0076fd8335499811aa954db2432922441853933b341c8b0d7cde9b2e98b6be77952cbd06deef74ce77cf6015e849eb830604fd60b7b100daef2872d7d30a328b7affc1120673725e6ba0b5dcc6be34602687caa3ff01e75b67efdd593159b616399c890714af673c57e1962b6338b2b7390b961bc8c31989a7fc8c3f203b875862a8f6ebe891a6c30f2bf29c24da426146acb2d4e0d6b11d90750e4083a9c989bd33abd1ab1c1b1dde2c3288020dc06974991cb0b1638f333a8a4a7d6e603ded733e6073f0994ac5b4ebc174d22ded6b76761f216d2e89159559d491a72e4a62d08a51d773cf629c149808878700b9ae3970bbbc287b86e5e86ef6063eb894b1145865f59d628403b0799899259d1999097c13525898199f1a095d19741e252160432195970050e18ec7b49230b70b7586e08f7cc2db149b0d3ab01fe66162d914cf32c9afa6e9783f6f0ff871b924ee86abdb31d436e2e4f57bf85d0232548e0b5a779555793effabb5bc8851717d73cfec7ef82cf47b129e2cba8e80dde7011e013f76b43640aea0e5e8962ee222dc4cdfc556d01e49b0a6de19f60a15985c66ce1c218a1b6fde9edd281870a1fbbe9431f4e916adf5f36f0b979bb110cd445933922d7552d0ed43309c6a9619f8c786365ed3fa9345c2501320c8d643cbd670f6cf712f635cdd5d2db01cab39f2be8509042eb0fefe71d19998e22f9bb835b9c5c205ad77bde04136eb134d9c31c91d59797f2966fed0d23302ce33a39ee8fafa324b95942a4a0770c402621467fd3656857907fdf90ea67a6d4b50ce02ce94120307caf8bb1dd468f3cb355f1c623f173136acd2d1edc6d6e63baa6295f97f88b2eae67c81ef878030b058600b913979fc8e2f02c876187e1d64bc68e25910c3fa968cf8db88a98f2526d3e9a871cb4387c36faa8b39798828d1cd7907f8354d3a5fa2b3862c1b73a02d42be3c7c405947374b801156aaed11250cd61966d583a85c75926993ed316debea34cbbc6eb9abbe13b342a71aa8044d9756fba79c8a651057e3e40c9fc4257b3824334b096f4615362d48085d5eca3faa4b0f8286d633ed54924ff53c40c78d6dbda97ec662b347ed1acbcf4d27217bf45ba0a3c4ed3a17c67af1ac9149d962ea00c01bb8e0045b30823d7efe2212f5d3617978e3b3a6cadc2ad58c246c55d685e40eef2c541440d4b36b26d7ede3370430369a1f1e0fc6578108c4b8086c0aea55c9195615a49a777a1e129371036f1d15afc7cbc18c0818af9a4731e01386c898809d97cb0397961799bc3c8a01bc5117bc4afe680e3ccf68026379c53a01a3fd97ae42719152e02441f55d42b13d9be2fc299d2ec605c11817c7ce26e8f77034af20321b594cdc40e0a3b861d19e379412f8bfb82633ab64de59af371d6df3045bd73d90edd46014c2beac5043c4ebf219681418d6eed0a4965d9988f7d9ff36dadf7a3aa1c71075d9f0bcb7d92fb2966d60f6588c42c513e001fd419f95d6dbc7b8a13e683d7cfc9901ed0ee6b165b4746fad995b34a497e21b0bf5409298d9cdebee5f1040a54b16c9b1e8d0f2dd02d46bef5f15c201d35b2b970d0c3cdbf0254225810467c2098b57b962351a7c92924bc27875e9c7b405447ad0e672eb5c339d9efbdc3a30b13daafa4f3f31a2bba9de5ac4496791b0b30bfa2e3202d271c4ff865244b00542972981f508c0bfc38e34add835e814793c708e92c0ce45472c1d27a5185106fab3aff466891d59bbbf059668e72b974e64442bd9a823fc71c69f65b8e6b84036b69b79c9e31204035002723f37d8e9e003178bb34d2c525f642c9d230ff604a2d141a096850a715d7318a8ce680d97f15e45e8e88b126a62a88f27b4a1b0c96b06726b1c03d697fc4b9dbad04fe02aff5890a5055db6b176af9e4a468df30b6ee4e1abf8c55251421909e1255e6692a20a07d3052edd32ef13d69500ce17ea81a0ae17a749f978869ba71a4e3d56aab67de7c215c8cc24313518b69dc976a3a37e78cf4567bdd5eabf689e2a9304e3f9d4eda9fefbe65b94f8ad204e34c3da803c4bf277192525df7c4186c01f4698e28c0a79ae02dc5e2a378a8c5be1e3ba49ed5cf9e49c929ba1d2c57456a8a5b20ec3337724ab280332263adeb170c1da28000191527b92f5c31e8ebace456d11b6c326ec8598866612f48bf8a5f9630f14780d6b0e5ce504f4e9f43347d648820c2dbad57e8db5a080d3b820383fb885862cc35524cf74c8980b1a0b551f93456de34d37bc30bba048b97b346de2c32ef620f6c1c0385a6420a9f173d146da7b5b4ca4053fe3a6380bb83fe56b47207135976c142edb03d86c711d90f5d92bbb0f4a41c29789d62faf930d1dd5ed6b481e8ce8a4230fa3edde87ce2eb1cf2a92e928f78399a0c366edc1efe200685557ca827c9580e33263dedf2437f6d4a357c1179f6361d194efd94e5061c895a9465a0a406772c45dea527e273308837c58eae3320b4db53e123f711c9f1f40becd64a59d61f4142253d9f38cbb44b22547ce5969b2d416ac83ec13a107dc184ec889c9178daa7535803cbe6ae2015c2bd5b3a1155010b3b35bc383d905220c091a59ee2a68a7ee209ca48f7fc0d72562479a589d82f9ef8d288e7f5a61c6d2e01fc6717a2b24673754619d6f0b3cd9692a5c5ca0b5f84fec9e712c2936cdd0e75b1187131c5cc1c285b45e094da5f9fe4feefb744dcec38bde1790808f582641e0b417d1a8f1ba7bb0646565e5f5e7b6e1ccc0d0adddd37baea55fdbbb9914f414298898252004b0bc6dd84b4f1a392f5121926e72b29fb6dc91a77109a9aa6ae0c1572cbc9871efa53d5c944d31f5492b3c9f6b18751361ff3f677070e86a959d01f6069cd5e970eace56c007aef805c030314dd587fb5d5367f2a6acbfcbd6ae301412eb7205ca07db05029392b2ba002403b71ebd49eb0c7f9d27d5a060d6f096f45864041149c88eecaa21b6cff0ca67a4988feaaade72ae184eb0dba4cd635140d6f17b38cfadf5447a3bcac23d235db5fab13289af63314a78796a456213927cbafefe90fa403f726deb3955d34fe63cdb61bf55e0708e33a6e0b6495d55460f32a7a412499c6f96b93a3df5f049d594d6604bb5fdbfe4312fcc5798a41eabaf1fe35542a59c974bf94d9fd97fd61c4719cf7332bc5cc2281b36fb5c625707c41532d8302edefae58eff87c17f8acd398dbcfbcf6928cf3f89dc100b9607ab5550bc12c83319bda698c2da1d8d38bb74aef3e01bdbb05d8c05dcf5192a146d1fc9a919ea51d12a3e58202f9144442fb6abeba4ea64c6bd2aaf81d8aa1b3dcc3052e03290f3cd18e92be04a574b36718f9693f3315e888ed2bf7952a1cefe38edd332bb28116afcee6219209316a17808fcffe3c907c34bdf62b47b58aa0670464a07c5b7f2bbd0e93f0452e77deb5d1c5ad99e17069328138cb67d16c6e9cc7df4b6f0349be22ebd816a4a0a610af353352ab83a240bb63776e1ad6fe7543944feeebfa8408f3846bde36d054cb77de3dd8df053c4a2944d8805a714f8284bb559bdae782774448ce1dcbc5c7dfc3db726a7c4a13867f0fba24ee30362da489d257e293e4a4c2b01b3167b60b8b327007deb8d1d775218cf9fee4277079ccaf517b9b1cfe4879264349cbbdf128e7e86d15d18340c5ac4cb441b397eac668215a730151dcd79c24a9bb571f2712d954b9820505862692a9aad854ad3a9df6b860c4501fd2fa2d0e8f9af0152835bf3ccb60a2bd29a631293acd9b656ac0e12c482bdfff322b862d757188c6dec2d00749ec5571360867bb493cd4e6c972d2ddaa99a88f5fd0a0748bba1926625419707cad3565c8c0dde3eb4d1574643b45205bbb05ea7b501d2010adb1b9aa97b993c0447741755c51e01a95e662d1753ecc301dc8366ecc1106a4040639a04196b99f377088f758ae6c06830a1908223500b1d9b6177429d2328d288c42600edfbe23dce1f180f3dff01187f116540ec8abab3501badbc48c49b01e7d2c42f1d957ba4b357a841a86c0a452243803c631d9608aecb9cbdd1357ebb7d3479c5d3f046f851e3a6d5960174b51481ed8694306984d73d6af9822577fd44428982fedb7a28efca1faa39dc7ff5ae685fa8d45d3a81a4f30a4f9b58c67a7f6869bd27eb667a8503d06708559f99ae0c03a5da8e8b911442e4273936ba75f38930960849b4ee28c6a37aad89189c2cfe8bcbbff3ee37fce5ff5d2662a223b9a7a3ea1a4d51b4d09ec02e30bd4cf984fe0f73af90319d0b0bf61fa1d9d17e35eb01539d9ddad32302e2f2166d33e97d6cf5ab59d1c80ddfae830adec1c45a10113ed2ee5e59fcc757c17db07ade74f299e822e77109cf4f73b43fc12637dd5ae626024cdffc4444f703b624531deffd7a523e5dc7187190e5a9ada07ebc69544aa96e364a51b8ac95183f2c755fbd31253bb3ecb91942684f15d0aac13126cdd45ef680e54453af66e7a2498428eea9e3a70f238b2ca05360f45f932e043321d54919aa6f494a9b2ef6b8769c46e0a1287341c04097e73bb6e16463aa1c3cb2de3a1ede58631e608f86ff810aa31c6575ad8a5b86104348b99b58820db8cb1b788ba3da32ee2f4450b9a61a66a082bea9864edeea4cf7add3df406e74a6dc2e61708f67be42582c8020b6bb0334f428434d92996bc5359b92349e3a5cebc38edae088df8ebaee1b5899f966569037bd6747514f925d07f13c92afe146073a7f534e797c9875206b42a5f600d5f56535fe29b09931ff132f054ecbad3837c2082fe74d1e71ababe7beb3847500b3902c019ead809986e07ef4e184f314c4107d3b2874168c5f168342164b2c92b8cda335f0437bf8db836907287b654ddf569c3f53772b78679b7569c266943199398fa1b987fa6089f6e8e2b604e60516cd93aa2dda2748022c0bb24578c28c52312be8faa20e7cdbb7a57e213da73f95e2326e06db98f0427f57241f1544956273189e7ae46f85fda31241846a1e6df6a23a7568d18b4f0ea14e5c57dcf7816520938fa67d78c972c4a4e2d25831ac5fdfb6bcdc7ef8d61eb95e8beea98ee6a508f22efa2cb4f3a86148d52de11de47f1cf0ca39de7bbd47f61e9b4a8199e5cc192934ade433cbdb6f418a83433476ba1eb41aba42edfaff419f2052a3dc93e569ec0e67bc431a6ea4485c040e54541b13a9c33e3d7fe12c49ae80e79a9fe5df517845943484fa89e3a0888f80b8a663a7f6d58fd1eb40a1ccbdff74552fc032ef79ede4d613ffcd6a839b1f337432766078de0a64b6dc0f3cb89d210fa34ee21c097bd8a520b8fc710a6080745f96a11610b62d940a003e55db2cd4ee176fe69c45b510885aaeccaadeae6445dfc63b4d3a0fff81c3fb84be2d76c792162f4dadf23d70d9cd0a01db1744dfd05a44f93f8d60de8d4d0b064cc82f9c65d56aa0ac70f7c9199a9a6452a4eb9b48c40003ca412a222de3099ff518531ed7c820d4b97b9c81e0182fd8f3d8521f4a4ad2831d08e3d66829d2a471d276d00de58fcb1b67fa1e93ca833ef186f63f63a9662f1623bd3085e6fa521eb1116f3f3e498467d115b625b559318f76f85e026173160e69200cf3f1dc61dd028ba11b21c02a0c79cb29d69ff531894cea0df1da34a5bcc59bf3b18834d62e34a72e49a13aaef0baa2b9f22ffa311e75abdd64cb9edd179eb4bd568ec1a69a3a2fca43384b0d977d8d402ea4aadd317b5fffaca66723aedc2c94c5697488b5e08d47b7121500113cb258c56564a85604f715f70da9410d652ac70cb300b5dc6296f184bd356f1dc1fc3ce31866bebbf89511236ecd75082cf97a95e9d92929fd465cd876235b6fc145f41f819e4b41815c5b28339b4935bd973ca2217dca6a394064d99daea9a8186f8a662c42aae904fbbb460ac437caa92ae5f80b2512eae0c1ef31115c96b33c9d574c197f2c787451e9cd05de1dbc4bd7e6b086383aad4c744513a99f18c7dfffaff357b182b7014561391953a32161254cf805f587fe9ce2218dcf8ebb67c357550a236fe254dfe034b1cb8aafe3357959d3e779946f4f6f328be541ef8459bcbc19a352a4473bab4ef6007d8ba07862c9c17989a86040285a5c667974457c1719d423a504fd14d7b13ed1e10f32f8148787ef796c881243586ac76105489370b25cdda652e7601f7937e4b50fe36ca3b2f3a51fe0d3fc6e7a7d28dd8ad281d473368eae7fdebd0bd38fa4de8b25d5ff55a0f2640f6eed26894d62121656fb0017401f84818d8265f38dae5e40ffc3afaf2a2690fbd20467c266bc8a3c3800dcad36ae91043df51a32ceed3ceb42aa1ce5450fa3a98fd7d5b42823151d8f56f2b9aed502acb81b710a95f46d1eac99c55829d234dfc2cf2d95c40c4a41fbce2327270ff4a6e49d14cc9bb8722249ed95ddbf5014903d8265ee5a658e04e4e191e752afcf1e97c7e70fb24e39414af794095999ea14f70ce65ed14f6d1520e65d3850bc048bda1f3b0c396ffbf430feb902f42d3ce7e70fa051c5cf0bf1f7616e3dc20eddf6e284465199aa0acb180a913c9c1d31773e1e9b3c24e0ce1a6f97aca10572c75911cb5b5990f4639df4e86d217b02d27823bb6d72f175b30112a1e542b1fa9e4ff27e46ccf9fad973bfd7d5b818484d519eaa208711a9da62fecbc286f66ca9052bd07c4db5929f3fbeb58b9f0d59547c63f9ff2d5ffb64f62bd07a9d2b5872e57745bab20777c3be989167c7ff9a1f8e6beadfb4523656470d64dbcb53040ed46fb2958373cc53004462f1a69e7c5d90b249b74e68e19765a2acfe83be2429b0bbec53d1c485a6e105c2711899de9b592438ccab356bf51ca7d7e53f450a679f2d88e5adac099d816c2b07c744a248cadb78b6738f2312b10974be453be8e86fc7fbf859e57e707c95225cc24674511ede7fbd5ffd69ed90fb77277a6ca2f0c72ae789eba6050617d8f8052a1855f3925796c1e7fc9f4fe0a20192d814a2436929de1e355c85d79687358fcb0e4d7b8afb062c94aa410c0fc3f7bde9b58ef7cfb8a532920ba400e5a7968b4f85f56c6ad792685550737fdaf7891abd37f39940f6d56ce6d66fc34d658456fcd8a1b16949d1a611f44f3d48a1db3b4ede955ca4ad707904f6e5840eae07b4dd3a4b78fb87e48fd19d7947bded6053099f3afd47d45f453640b2fa6ad3b8a5efc307171d607557d6a96d22ed69622f1126f836dd8a4d466224dd8fef721130446d98854f498da7b7e7b0a18fce2cbaaaaeaf6fabd1649e690ed62c95540a572dc88e5c8413ff64dc0f822298139fe71a15a7e0a1a06cbc4593e06a2419463b4e390fda432b4e3ab7d5cfb960e30c5a4a70978fc673dccf4479658bd88335c137d2e92a08a6043f8198da196354af1cf9576219c4e37a8b79e42b6618a3438dd790f988059011c8ee36a93359a7ef69f7dd2c9cf159aad3d35a6c32ab72d71567a9636a897088b6af582266b122c87698933f91a9ff4b2efd019405d9b6b85da6ea92561946aeb7f7a6a2fbefc92c948293198cb6cd9409bd566f9c725805449d33cdbdf09afdb3b05ace412d6a8879afe105af8b018869096dea42d53bbf846b3b3605e829a7ad229f54886df6c19af1498169560548081d16317a5d08b5a17223db63dc110d8c7b19b4cc87dd1dd5e64d02f06a190013ce271ceb58113576d757f8763bfe18bd155c28fa5977d13c5179bd51d4a07429ea1e0c6a13781e357f58103f19aa99e73b0b913fcd65ece1c3c62a833dbd545997cbba37e5741bbf06ccd01d575ff3d080770e48ba3455ff35ed03eda9ae1d340257889a7c6b9addb8d444685f5bfb02affebe51e3c0957fcdbb1a02ed5c5fe890ab80ff751f9c5b475ee2a5a9654d4e29278c27a97d4cd8e0a056307fc9fdd9421489fc7ca92083f057ef99e26daec975e7e6133c7b885aa68afd1863b0816fbd0d64eddec9c7a9fb340db7e5a327b7aa5db29633c8e1ba1f3c2d4cfe75d5246c7558fe28f1021710269fae5da786a363b8d65a805b27b5dee53b954aed0ba4834b71a6874b33267cf6056cb41b499e846135242b87a1276939fecf82f38a545cbbb4804ff267b62e70dc48bc7de7e3939a430fdb6c21a94c0dd230c3a3f84b6e6b12028e0722f847957cb9f55cf9fe51d1170b297ac9aa109fd1ba39b81e15bcfc6e07cf07488c437229be19c94f352d51a9f0dc367e3d0ba2e72b108d10d3e283ffa6d6a05c4dc34fcdd1e317199338dcfb3b83f5890aa8d1f000010fa749fc09b9b1e4455cf33fa686831734edb451e8c166ee0b6f9a7ed2d87cfa8d620ae8f6bcbf787469f9d825cfa8944ddeabc7a5c041a3b4d6672b8152fce7f83ce81f195866cb973767bf3834ad3818069a8b3118b803f326248d3445a490b12b9195029691508881959fdcef2e49987161977f003782cc2d7eb64ab27818fce1dc4fd1e1a170a064241cd487a686f7235e6e704cd6bb1bfd8cfc2c8a7f440c3cce4151e6cae05dbf74152e182c0e544f4877e51322105064d16afe28bd5b4ec9a51487ef69c18142d1d79cdd270a790e1c970c442109647cff57584552a9a0505f1b89dae89701adaed2bc1b473c1d20d17cc714804f68622c0adb8d7c3610fbbf17f30a1db0e1391a186276f2a2a4bd65a325106f722622aa0758444e554a60d7817069a1bcd3fc98e5bc8a02872c7e8dd25d16753de5dfcf392df7eecb74d24b4cd59f3d24efc5b8d122e483fd41c583ce7fd6d3fed8966ed525be9d3d4e59cb04eedfacd17424bcc40e11bd4d7a514666353543599cafb5a936d787745608712de53cc8f468a0ffb273e67964f8828daa0c02aff8c7afecea9b8ad446a2fc159900085efc649421ce7eea4f6589c5ae26ab38e4097585604582e77264fbbbc77645f5ec02b9c9a496e887abe403a3645bbb283d879d2f0bcdc0a1bd6068b71246f5164def4102880b77e4524e4ceee94c97e24a0a58bcf8842243b821a59258f3f931fe5373825a3af853912b796f16db8a5e0dedcfaeb2a96f93c1d61d67d98a1c66738a4a9f7219620950a14029be3ed89707863390c0850ce5f5a7b1bf7aed98660a9f6d28bc2e87e887548eb95890bc9d932c7ccd317bcedc30d0782eea1d900b53b936121a9d96f3847e29f70e61678a5f7e897c07c39df2223e5ff2f2a5746102964683712fb42764f71f9e5ef39baa0e318607616e79e3e7ed333efc32b5bcc604a35992e0ff72f4f3b65340778134a7c03de084b35dcc79b66bb875dc4da9f4ce79a1c55fdd41781105c3c6997b8fe84fa27b2efa7f6b075e9399e3a3a2e4808d78feed1433763132b78e5adccce0ba2e9e31aa7a1ba1a57cedd1610eb0d3cd72397d4acf9bdfa8a1ec780259800199e37797b244a1242ddd28eea10b6c7dc23e2dd86eefae3662b5c96c928d9a6fcabbf4faada34144aded16bdc31c9815b89a27aafb5b59c81c42dc27555fe2972015c9a0a4196ff799f07aed2fb9f8cdf67039aa0e1d5b54daef7497d73306e843ee2dc861f83da12d3eeda6643f5e1a1c8776f105d8f2ee0dab86b20110d7a9a7feab549c96136df5768285a4eac3e7caabf69d273f46c666df079d7f92e8d46a565dbaa5ce4f75b0e555de2684cc6a5cb7f31f8c6342d76a83355b7d4f37bdd2ea006dc89cc0b468696990f21ca8f1f59d41c18bb43d4cc6a993d1504a54d0d9b7a3e701fb9e4290d18d2b2969e14f4fd550c8afc353c50bf47187dcba38ee6945620a4e3d6ac75e45347447a4d3dbea2027e43a1ab091c7ec05c0cea58aecedf38e01e79962b1fd5c7a182ac49343aabd50acc486780890722d94ae9c08e9b5cf65515ba3faed2ff9f440529daa07ab8694aeb963496b566199a4cffc07c098d95180dc1e20b2a73828449cfd723a3c27281ddad283d8325a67d7b4c9aca48ddd0921f4af1d645f21711ce58699ac9bad95812d006837074e31bce8774c67e712ecd096c65cbc2886164067d5dc9ea9c70e1ff9d8abb0068d4634edc2ae6d12c22a7016c69ecb1ff8ee770e6445bd8c222ce0b1e3a8e22d57b100d4293871ac642535a44da73c6f6ea6cb0db97082faf6d81e44274587d3da44bfa46cb3c80c30f183fb8351844b72153a535d03a32d6e583ab932c212b423e062d034097a47e859accc9b559839eb39d3363ea27db340328eeae4f08443c9144741dcc7eba2c0f92d8316f84824a2568a761bd0347db872a731a7f3b4936198dfef70d0575cba23d0752810ab4a01ab960042dfb1ba521f76cd25efbffce4e3fd3f6bce41be541c5e83a2c040d0ab25c7ea92facefef7275ac1ee1404e0b3879e9dda20d5be764d44b145387d5bf15c20c78384c272fa399505fdbd0ad6348680c12415c3513fbeab542b80f305c82c3c6c33ca17996b4d5e60f3152edbb2019797cbcfeced13f7e20cb4def7a4d2983e0dfdbc65c42fc0c1363341f5dba8687f1f28f4516edea237bdfb3a1faeb2fbdecb6f44d5156baa83080d729df70e1d675afe726fc6756943ef4bf5d738b273375ee50f8a794da28ddc6d13d367dda6732421ea2af5adcdcb86c2dd050fe62e73450aa02bea5ad0bd02b6864024670401804538ddafdee86a13c8a45502dce12f937ff064290460606c96401dce22d5a7fdf1e7b6e146e20fa5e2a7f9465f9be3d4430599a8dad124d35d16752dee55e814545d9b09aeb0f3c7dd0db2e979ab3291eeec2c47b1cadf035a6ca532e233b443f86123cdebeee7cb49bc47183496e36fed2930e1372b585ad233db31ba1eb560bfe3f2113bb07665a1e5536cb4099d5136414bce650dfab9fc4fdbe5d74034d04db32d5e10b20a213d34e64eda440f5c45440ebfce2ab9717a6d03f892b4a3763d9e8218a5d9648d12ce56a31f526bd06debeb86a04b0522be407f25fb41b18b922cc8b535a9839a77b3cb4c06ed5a622e7d06aa3b74ea9da0487771b3cfb75e7ec37b2c9dc3855a57302a9ffd39364c9ed6142a58cfb4bff0b26da00dc67c086012407ab3e4ce69e0d14781331763fc1e3db0e0219cde1dbc144c7c721447101281ce4f4b2d767c450f45022788d9dc563108df1683210e7a25c98b19868eeae69d7817cad099bdcd7d915f15cb914e10f4ca3999a157039307635167c7d1fcd2d6d420244d81c461b82f31c76428e36c83ad0ce5af193fe73e798bf5a183163b889d86b0fd783d7288c10e5d6ba39f226f67eb6bb9c5af4f502fef4a08f00ff03d0a3710518d9715749f3b0c47bba863e14c5565bf199ffa957d65d2e215c4f4a149969f6bda9a83830b186b92542489b1b662b4db144f680b7a08da9db4ffd141e37b24c6d1b8e8dede7363e0f83259dee52720322cfbc752db45373cd909616b2f21be5568b6f085849ca180ce69e84d675a719caa2dd3a459177b2630d68827ea8f4c74f5ac294181a48ec6b66a0edae4acf098117eb6d3ff4a37a061c3d5b6b4893548ef7d574a4693a4032078521566235b75dc27d731e33d0ebb1712ccde7a75787aabe921fcd94c934b3429bde9cacdd7d217bb086ea3bb8ca57b9daeef9ce7dba5f34586935611e2978eb73588456dda05ab466fdf8680b12ff060d897c9d9d1ba93d37362f83251b8178e81202c0a054363b57dee16c0163573de9e56ab15aa79be1a0a010a87f37182d23c9ebe84c5dfe4174fc314026159e4052ff99b71a585bc651eeb255f24e636e2b19e8628780e3a7938ef9fd18ad8d86975228f962e877b180a34b84ffc8bc3d94a1a02e05688829c6d6af712d963ef5e226cf64e34f3f42a9b2dcaea7320a30916b596f8618de89fff48a5f3d486583097f0e241d5f7291759624712e706a7ae7f6a225ba4d6dc5dd8cbce946b27d99e2ac8d8a728edf9576a4b7e55ba30efe1abba4df9e156a51117c1edc698fcef452e4ae08da6f7b9f7929e941952961ee3a0437c1051d1cc5d4dd8dbe7137f7639ca0d59d8d2a08dc3ad01a4e163985206b3c1cdb1d40b3e90ced78824e795d0c945ab8e79b18c423ddce76b456bfb879252f81bdbabe8e2e7beaa5e61348d1e7e612dce205e75a8a9b81279bc8ea3db7784e1f1c77df20ed7a69751591281aca2442708802e60f7cf3092dfa5010fd965b57490773bdb18e21604d11e7937d08a6bbf1eaebcc7b9d852b7282fd7730c0b6bc7a663ff1e22fbd43e7373aad5d6f6486013e8d4c1b61cdb821e32128998d6bb20f04643410f5eeb7a69241098ff9fa4bb4c3965e4328b65cda8dfca1809987d59609adad32479e87575bd44a55a0eb2dc86db82d38e2d2973024dc35efe260d74311739e034b1eacf5d4e4002a5214963bc52ef99397710dcb4160bcad964dd84945bf9b7a60aa50f45faefab8b266d02757d10ad606a4dde1d197821d4fa0148d8e35afa3bce9201b062f170e05d26ff9d4afe78f7cd9559b537a7c40b6e342ec0977195d78328436fdbe1f152ec022cc7052994d80f5afc748b6aad30fa5e1dad2ebafb4efb2531169658283b4ea8b88b77afce0129614bca218c817db8bc776c736cd00bc006c62130d45dd1b24bd7c178f3359a06a0e7c16dca1090efe83ab2310f73822fec93f4cea5e4334241e345ae6abfc3bf41bc01996100179acdd904f41dcffa90f42fd309796b4b08ba0c8e8304e77a76eb3deba44f909129662fd97c904fb52612410e60d156d619f23c6aaaf1d98fa993eb3602a0b8c1baabef4926a4ce3d49dee097ea2147f74a205f4d48c0738e75f84e8885f92487b37448e00b624aaca0bf7d8e6333c767059eb8546f57288d673d0c94682c7ea6cbd6d87053997a4e5318478dcd2c85fcf9ef9e459493aeb5a7399a9d2158d065648a4fe07dc47cc1ee3406df985f7024a666ad9a3473d1d6a81d831ce3028f5c2f0a0751898bada01c46c7afe38748cb23c0201397e6c6fd38131a99658659b3d3144e6959d964503871a3a89e9781d2932604e26dc77ca9feeb70e593a1cc62215f6df17d172011014ff382d0fab2db00492f30eefa9ef5b65f3f83d2eeedf2f7905e79375a3ed31ab4640eb942120d47884bd8829f8741b140e0d694b75c7c569112b114ee7b8b69490c2239e7f743e209fa23418a76ddab592f331f58ad211a0a3df3b289a8dfc28178752e285911c4ec5d2d9e1ba8fc8c1a9e86bd7f7a0e997e05641505ac133007c1154302eaeccd4786184b67f8fc3f3f56d9cf2c28da44cd7090b1b68943eb7e24488990a8106a2fd4ce9b976684c50885af1162ce16d2c00865f7d4b44213430e8d165db78181b3fd5bea2151e331e41ec3385f4c8baed292c1eb14565066ea1ccc971ddc01e1380317240737543567cfef9eb55b0cb50de325b7c74438c94b8784b12d6dd18be9fc1b9b1069fd4e1b87f3c3a6e51a864b314134cd929089774fafec06785c136fcbd5a6128aa1b41b13751a5f6c6ed84f7f1e52898b65a395c1ad8f6cd64f591bcbbf9c34f6655f668171240884b77264b2fe279be8d754bcd9a753a8aeabb7a2ac37b9e1af7ce6a149581f2c9126bda1946d1dd17dc13fe9bd16be7c76b45e602c13fe2d6ef8fc42aa00bb2cb013890477dfa0ae37721157fe2ce6830a85164be45c7d57f8fe5cbadd77f234e3c92cfc515f27deb268fff0d6c3507e6ee1e0e9c79dba7e4497d52bcded71dd33838801a9a9ee8d242cfeb6fd8a016c9acbfc8f73eba64e2133a8b4d5bcf8e0df35d0c939194dd7bc5fd43560ad0b88acfd8d503de0f47aa29c094493c4e9a8bb0e92836c3ea3f1c64439353cf5af0808861896cca3619a8a3a101c41a7d673ce46b5966383fd0ebe0d34d9de255f55af9ec32fe38502552f3c2972a2e7a11530e038feadd1e98a605bf9ad1881d17c10ea57cda8adb034cd26420739dc0cd70a8a897409ca5c6f355776e67612e17962a4e4dd5a6f8f6a98d45988a685d1311f3b8e9dbb347e1d322f338e0581e7cc5ab3ff33a5ef961cd4fc7f97b4b7244fb6ce29ed37acb9251ebe8d4e7fef5f8bf6bbe2ee171baead86cb1115ce80c8baf220dd0115e9b5166fd1b365ed07f609164d6d2196af5c0e549ee0c73ef4843318008167d248bbb509316f6f370c76fde5393edc6bd4d41a8fd94fe857da0dc2b3139349b0d1b2bf155e780108f7047e3f7b70e06c87af0c47c428215df4078c88029bd8f6d7779783f4d09490b8c2b98d7e49292f02fdb6cce76b79d91a719e494799c7613a7921283b3cc5255333a601aab72d7d719dd425d4bdea08ab7af9e1741d7b0fcb6722bd2fadf9bc973e4269d3d2a75b2f38efa87079dfb68c3429ab1529d5e1d69b5c81aed615c790f2d4edcafb498a69d7263fa0b97f7c4401a4b2749ab80a3d7f9af476ab72ddc89f3abaff3f5c0de0749d11cc27497dd575a796d862574641a915f7f3fb600215cb11c6ecb56fa30734be46965e8c509bc9fb4f81624ff19fadf31fede8f25366edf7bfc2df6f973f66566c464a7c143540a414fe7c827f620ae8f0b5f83beed5f4b0ea7f0e6c4e0b03f1f78c317f62c97da57e7aca4336e58cebccad7a5a10de4274d9055bed8e8bdb8b55f627292dca90faba6c3a7ea71d83601b7c09c39b3c4ff1856b936ae7e9d0d0110dd7770cc29ae590a9053ae62938212ac58e50ef2b67197052d62cdc709c217d2b2b89924f6a6eb34044c88eb6b319b212511dc5a760ee2323363a265e2bf2cf7038b60d3eb8d97179ee0f8aece50921aef1ec65f5d53388ac961d809d5b5c50c4465558ec926572775a429439d817befd14ac23d45f8bd68de971bc2aa7167193c9d51a69fce06ce3774fbf237a5d37c81262a22e2d14928452bcd6c32da4ee9426c0cf48ea75f03f3a748ab65cb627ed2cb69cb31a1077b59c2961de2b0984e9a75a9cdeae7b81289f09e63b959c162502b9095ba5a34b358e532d5b51bce2d7a225454bc04cb468617caf4931e466e59e2fe746a894343f85c2e3e357cad158d1816902cf2afd0cbff6e545a819abf4944d8be079f9b43bad9d2bb63adcb84eb61956db51cf73877d5683e5f0107dd16ba014da16f155592b413e00b2fad64895fa5ebe620e0969f18b79020cc393472140b92a18020a09779e29acb2c7486b950236313435417fff283f9328e7643076d9137b6fdc2b4c2ae832b9a7d25ebe79fe04d0da7890793e822294f919efd2d20167cb3db32797ba10378169ef8b64f9e28721a092de836bdff3f1d4920fa7b2c8acb6b0f4c1b55978300b30c0dcb5cdee73e24a2e29e6ef46c4ae659ac31adf0f23530f022877460316302782dd4b9d74e47634259e24641e76cdc2bc1518679b9ac1a1ad534b24f421c1e0441befa535e96054efcea5b60623387b0897e44e745fa861843773deeb974928a44aa52fca2a7f6f0ed31436b117302d9cd98a1a44d37b50eb47174350a4e3c3141edd0cb724285e4fe868fedf4a30baef8ba765ba262a2460e07d83324c3c3ee37dcd671f2dbfef6e67425738088e0a812dcd76694e48ec0374d40abe4894e491054d7e388747bea04353db71cb6365a6826dba0c4c621d5fa4bf9753f7b02aa26d721b9890148172dee3efed4efe6259ecb286ae734f3411f953bbebedd4430c840defd39cf8f816ea89c6e544e05624f718dc1e3a4448faf2ab2d53a57d93471017dbf95972468489ac4c5f9d186847b0dc9f852c10e21d71da33648c67e41db526546f1330743b0083e068dfb64b6f7aa20eb9840a7d57e6487332a01069df81fc321dcf08e1c644502eb596149985ac8f197caeaed7e08bb1151ced1ab4cd2d3342a32535094bcc338379dd3a6a2579eabd6993aa6d223136c9c8d191774932e0f8887fc2207b43867abc9fa76e230c86a793e6c0fe59aad82bc5c46c0dc2706fed3b64cfedf4d1110753ab922c638be7a1ff226b8a16796aae49a8a1e61d5c3f033c7a5d5c14aee240d077b50a824ab53a251c0cec90802c1c30a26f5e25bfc1123409d990dbca16101a499ca005b6b9289a69b7140d0bc03c6a48e4419f2d841e0c8d2d6c7d97d460b776bca96adfde9733a35db9e77093a1e16caf81138718fbb844e6f2137d2db09d87c1e7210ed0f08da8deec0e7e1fbb8ba4caf4acaa5d636c973191a56de641d3803bfeacf490f2a536e786a091868b233b1fb3ac108cb20beaf99805821a24830a598c51bafdeec6058c7091b3203927296e2c33bd9f5b3cc5d73b828a07526afafa156ee1ab65fb39e01d7573646c5c235b2d854c75490f03ea9bc5d8be7aabfa5cefe8425bf6d40f69de3551ac6d5f2788beb345dffa17ec8714d7acb9be60b23abe27d3e2e3ace2fab332a28f81f0402a51c8b26f1d9e51c73c4804f07788a417ad1d0ad7c4a0e48220000623185ae225ab8dd06d089776ae969ae5fd52cbcf8cc084544ea11da913599caa1a648194c43581eb4883c08c6a8e237232a13943b9c35b3381d2366fa13c643abddd378ab8bc2b6b8a801c021ce3f0f4382ffc62d938c30cad6c37b378780e563c600faa5df94f74f3ce281c9b03bc13808bbfb91a70cad86fbc23748a9c09e9ff6e1b5bf444643c1889ae1f191a3cffce6abfe5716475acd1fd20e05811fcf8c401e068a8518abfa09ae081fc2c9b1fa528ebcbe21d9af9622cc7a25ab877c0282d60592863c4d86560a7594d63d110498ca4f857337d4f2d289e788ddd5b645df2e157569b33ebea1ee683920ee6f7f300bf6caf5fbd8c544cf284cd110fa35b6734cedf33e6d219de0fa76ec23753344046e50fd74ad794fdd1e6a92466631e2f752e222d7e9679c538078abc9b03228619b1464db3d5a0363ea8fb72ef32ae7201bd40f241b677d0f07d284fdcea3a56c46bee1a4c059ddd376ef724f6df5b620b049b431091b76e611cfde1458b816116ebb5cdc41f32a4011abd8145d731d3a8c977d8a04127d894e53beeb1fa058353b0e0e99577671cc4d8cbf9152556dffc3bc883a463e5e5d7f53739e8adcd20de6a54d9361d37b2e2f04bccec588d9dcb1faf245322c95442ce99730223ff08e896cf1b187720a5ec841a8ba7b02abd0f772f6a88e5bf6791da0488f45727b891b19338f7e9c53ef46e5284fd5237140f249da2bffcd8ccdf8416cd8a78890085952412b6d79be550ddbc1b10515116e15c8634dc5c9498f9e7b9aeddb93cfa254d5e1b0abf93cb77811d3c43fc1f00ee04fc14ebb711ab867ab771e1c66c6bf79e2183196cd897028455e0ff0f03161b52ee451b94ef9527407dba4259718d42e97fdf3435c04bf0505268ed8b4c4770f843ccfbea0339a978d5411b05784209119e25c939806c681e6fe4a815dc9f9ba94c9bac4a29d8c3166fa79a6f68a86acda3106f7c6b469ce182898c9a90cf3522f607e709217256c3b508c86b198635759c8695b3e59e7913cb1f555c8c66aedd56f22b3b2f2782b38deda6ecaa5168d48378779077253b3f2c275605947af4b3ba77c4fa2aa02dbdec3c3e415daaf30e52684cb3477b99fc1ae95ed45dd096a7f5384fb21a01e84cb04a9c2336489e35a6f3be5c14d8ef1d56e609dde3dd6d2889dd4887c7bb9638d151013152936e722bfb9f577f22675cf6531512dc7b82efe65d35be3402bf433d6d2aef53e6b43e12af05e4f93c27be0330a11656ddfee7340840e3f39d8e5d85cbc0405537348c3b99e1788e9f27dfd3ce94e64b4d6037494b04617d40ceb20b298144f48ebd1363b53184a5a7377d0e15eeff832e67d811235c78752f23de27200bec54b4d1425868a1dbaa64633124e7d0b5b765556dcaad633f9de8a61262096a52bb933a0f696d48f8ab22b37b88574ed84fed0fbd8053194da95ccc88669e0f6c2045c9f6c01805d44b4deb8ef8da5210d68adf9bde0e32c3b09d9739e1622b111605dced8c5ca4c586822941f323ac02c4e7d37f81619257cbbf91922490169722a84fba4471344c5b6ecc013fb998525113fc3104875c18c0aab5b3d8977e1be30ee0871bf1005605c26e8a215c1d3b3f0ea7d43aed1847c7337fd8ab8e08d2e024597695c7a4ca2365836a6f0e21e3c0f5b3fbd11aa8e4a079798fd02164155120c93608ecfa20c39cd975b89d8ad568002de8cf4fcf6227a6d757f24235ea2051db332a612e00823bd4b598cafb54e94fa697d47a5a9465e100e763d16bb7793867e5ea1b497e47fe748fdd14a0397f3ec8dbddc1f590d29951e2740b6a3bddc015923af1790f5f5e24fce6ca98bcdf2673ebec45101c053d921f83ee32a6f0abd93687676cbc5e67c4bcfff62f885c9c4f780739b42d0cd47553f1016db892addbba18e9654b92d1525d0b1d60ac4ca00bea145603db39a6f869e49ba4d6a256d70a9fe609fe4c5cec34313e726b4923a19110926d1cad2f50bc16fa926d1af91ba8b2278276022dfdfe31fee5b0392276130190d5f0678ab8201040be0819e27a3ba7b2cad1e53f3f26e7631d7f6d68cdba42b3584f5abef528d729ff75b2edfbd695677e91e1591a83cb9879fd3520cc8b207b032f5d40d1e22f1395dfba253600a5ab6d8972a98f164871e183a1fb57a9823cc53a4233d49ebfa53260bba80078ccf5e89b768de0a4ed88e43fe399998b63bcb44fdcd0ce5eff6d7bc61996f4d7fa0927cf9354e91cd49e2fd2f36cc6c56e5a9e405abbf0da98163ef3bffd88f17b05b66acbd4a47fbe29eb91210eafefa5f5de4025a48cc1a6aee64dbc9871e0ccbf771b91dd26487a2b982e825f682868754cc13a9aea30feeb159c4d512a16adb25fbf43f0489a9551b03ffb6c0da0b8231019969bedf8814971372bf43baa992dcb4378c9f0328045d1dacb8ca479194387cf2cd0b14596dea9af87347a1c331a66c6c79884853fd1f2623b2c81ec6f0ba2c2ba86159ff0cdf651201998e90cb8e2e6e9852427b816d6c824b7cfa1629024e59e7bc6236655d6974b6c51faf5955960ba7d69ac9ca55e86a91395945e590984e2ff6c293ba1e2c388adf39104591350d7f293194069b71ef4fe6b663a71908f327ba1cc8221b0f60c3bde6a24128149f4ba03891bf70f6500046c99b0957bd4b3b27f80e70f90b5fe0bebb4bce5da01031d81ee4f5db046440c8469000c352427b326f1ecf064ab3c328892b6323b1057b69e1f5e8e333ef7481ee1dffa366de3c6689d4c5d744d78fbabf24a09cbeefaa22ee12efc8e5e892478fa99d1b2d37c81ef0b21d13ed01effb682955fc1514b20d2c4cb60dced7d8feba17dd9baf453f0293683d79b1632651f11292bb6db684af8f6c083d7c84e72c2dc60a28bc6ef85e139cabb97a54990add30cfa2206c1b9efa476a2d4abff4cb35675aba7bc960dbf9037e540bbef18cb83affcfbcb84d71583d170efcb2310e6d3fcc85b68f75706206e97f04e33390566bb36893f3646791f9b84479f3a44a4c012df78e9782b827608c0628e99d29cf39e76625618290aa8fef31e5a253d1b399348ae80fabea33839bbd7f2d26f1af1cd20837c2fafa21e0b99f3b8b08fa7308cbec3d86c5b27cd42a7e28c51b788d996b147eb69729522e115e41d4d358ced5a7507452da2d3541b1c078e12fa474e04781ebfdc1d3063fcf19ae0eb7c76edd5eb1a5b7f88c5b0924c6feac62e844919e083f15a5c1dbcda29b5b80fc728ca5b380d4400bf22ee44c9fb8fb47586bffdc921a9127959b4632f014e87901ebe75bd7de033272beba5705c612e1c54c3f84d59a6e2c4e6ae4f79fff91be69f08dc236c333bbbe86c848d2a744491eb2ba14661a65ce2ec00a89ecf17849fc8f0926be83203f8d30b184fb0bab44b61da25ed2216eea1a2a75132a0f91ced8fc142565967f82ed01fd204814d1b77ee553bf11db66ab656e93f418d756b357a6bdf9ca1e13cc1b4c962df77fbc81bdc3fbf39771f2b4024f7c64a06ca573636dbf3f1dc2fb2dd40f3950e8960144801a186694e8af8e9a0231025ede1e648c57bda7b153adb133fcef0f42517affdc03059aba28a9acae96ffba6ae20ddc9810b007b88ee4aa3eede62adcbcc23adc824842df737fd47a3fc059ab99eef470c667dc282baa39c373352965560dd4526e36fd47a21b165418bb2a4498582a345546929952567b68b00688a2604d13c58851fe4fede33ed1444bf4c3960061b1e72bd23bb44e49da1f67189e33c4d1c5f64552f0c132f6453bf2549f4574a10aed57011996de2084ac011654f8ded6994c1e7af4f163551a32e5c92513e6de6d484b9453db31e9244e07767ff210ad8d78f5861cc4bb5a180c6c2950f8b971fb64b4de0af060c5cf166e33452b0f63ab781cee3739d5edb1322ba08119c28f9a10b521d5d62c02f7949dd50e5c3098a1b1abb6012b2b89e299d0c239ffdd3df04ee926e60c94baed0f5716130cd7a4ae928b7227c7a7e13fe6f60089f4d0c91148dc06b40f760b26168564e0a3ada6d7ba014266447e06170be38135b594a7d73e746168c3aca1fd9f8fd6376006fcfce58e47bc5092e48329c1bac877e4dc191fe4691110262907ac7e2838d162830b5790a09f4b8241d3fe7db6722485037fbebafb45a90a038877dcc672fb60d3ebbd5b0699a607ce520e7b52bec467864aec5a17178713999ce537123da8a41d4ad42c7143363e974a91af0508158aed92051b8b96c002df1d7a0c73bb4a8518588f0e1f5dff105820eabea7f63675e688ac741833898103b8d5eede9f42dcb25cadeecde3877a294b89427944b5c1bc0a2f21ca465d7f9db8ecd8220d947b687740c3251ee8b87a8dbefd7ed6f46dd348cb931673ee6bb27293c85c27cfc6f314c38a5c5ea767a9bac94733b742153f757546c6538605ec6b133fecd9deb86c81d530a37b57baf198a18f7f30b6ac409e16d43e6ec4449cd95adff7d14960134a00f15703e940d5ef9a496decc4477a3f5db9bfcc01eaf6aa09915440e45ec1aa807e3238a8a24fdf2c08e82183f285204e79b8cb1561beb5c1502eaa88150ac44525d2679a36d88bffb70776a55ed2a1b610b6bfec72076cfa063bac03588823024f6c7d4fadd21da29a4a6c3938b58f70b7d313542743c9d0f44b00fad7e0d45844412c258a2e04aeb7c4de9858db8ea94c4c38067217d0a4dd6cafdf5b806775647935645b036d02d954bc2baeb7fba7065aa9521156360736b0eab3371e82ece0c237e848bf821710bea7bbe05f805550e6e13d8cdf5f4de83136bca228dc9e3a52b9a9e0aadf5770d2dfa7046a7228a5ea30d60ba6ae9a22260999902e59cb871b749459e529208b39cbfce2af9ac52f4d7bfe96f7f08afac856df8f32d3683572508a5a4785b5893e262c855c61d2bd158872ea05a6cccf77a6b7092e5c533193e8b2da89c2606d8a435f021300937755ae8c17b55ad3afa8b36b6752f630eadba93b1fe0519ad19e10502e687b99efde0a9b33390b6c81972ce9057a34e28b73e513e52f884d8ddb044f57eaf12a2632d1eba0a1567fb0fe7047ac6bc5283a80a9a85135d17003288810f20d1cb277db06aedb6be322e70d26fc239338a35bfdc3c5c413bf53d92aae6473fc8e9d5ea38f92ae3b9c73eeb325e16b608071c107df58095807b16b86a59d6cc66416d0ad1a609b4adf14982d9cd48cde199c6b52dc202b773f9a80b385d84c178cb6bedf7425b728301df62840b6b11a55409481b96453e92c61804a98e4599230061b43e749991066f1aefa632b6cd90ae7ed7e7c6a3943e4ecda2d7ecd811e3bb30e9d7762afbbdf04c7a4e68f7a4ee62119ecaef237fd14927feb3a84eac31794d6911284deaa0ff322167bed857944b4eb2b966ed2d16c745a56040837ff644c53e4e6ef72d3bf034117abd004b3e0290c0c32d2fc6263b9d7157296f956ed5510bd2760b2a51ed376f6bb49956c60d1ba70a84da02a71115a8caac5aa927d87c57bcb23d3ebf06486026892a0eb24232f303d365443a7a528ec110d6e09b78091ffcaf241a669e425d8f68274cf8ec97d059f5c30a3b5d4c0d5d9ec47d506f350a127847addfa66db43d6773e40f4d26a29bd5176f5cde9eab0d27727e28d7ffc6e53bc7e1bed256cb60d7a3afee84faaed8b1af61b1eeae7b22ae5c08000adb605ea07bc6ce71e8c5f6088058e9077c1cda01bca7dfcd16b802868158c235450afcd3d909480f9578d58a939dbf2c27fbc38d764d0a9427da92d1a0f36b8812311b33adeb6d2d5a01c98b27f8aa695ff948602b989e74639f9ff4c17bb6d6789dbe7f5bcf65b55028dafcda51d964e7e36702d8f41318fd20f478b07265a7e6b956cccb16bdaf92d62e3402624cd3a84af3f6402252a4494a459f57e0a1668835e71124e18dc8ef884e8c7fb6496332ce60ed7fa786bd4bd1be4af9fac573dd7b1027b8c34a658e74dcbf078f3b37dfa2bf72cb979799325254053c5592338d64d6d648c5fcca9d8171ffb233b96abef6a0e4d5a157e9a7961971cbf44ca751c0e6e32bb3f939b8c06efece8b9b691444dcbab8ab33a00bb930445125bb45d7a2675dff50522c86b932c510022b9cb22cc0d2fcccd5fe0e29fd52e7b4b3d77acd3893456394dbb09d1577458e8f5059f29d8fbf39d946f55af6842f1bdc6a6557482624ba293715f513ff93b61efab68758ec4f3038a8b16bff811399f5fad6ad9dc847354eb44779088b89931a33771f0d8f6a6eb8e0e354f43d981ed89c05b1321631dde3bf30f77941b2dcdc348e7458c2c446b63ff985206eb3c228c34dc219b4c8e45b7e0810aac1dfe842c020209475f0f46cf45a4acd0a5ea0a45d3814af00882259316640438174b8fc96c2ba0fed602dd250e0dacd1da1d7d2514ffa408f9879af01d49232aba1e47d3d47d1956ceef3318071f49be1aae9c9483a49131bbdbc3df0b19518da39734e5c42309eae90516fc376d87be723a6bab7316b9af63c470cdf6f1d15f21a3912aa9ca984a99cd5aca31ad998438e75d17138f84dbf21b9b7d636a90c201a327fec8e2b56fdad8f0afcd40c407ef4ffc8f25fe86e5354df33f809c9ee9fb18b400a6cc94948e3a01cb71cfd67dfb74704da0375923db6e00f9d62090c46f35e3e0aabb8ae3837c03f0e56e08252c583ed1d5ec6c4d8bf64a978de5722052dbc14d5c1a27d3db88b88cff1ec235e9dbf4ebd5d01529b4c9e64811c7ff5536e6aded626e3d3693a5436f4b58a7b11867551b9e331b0aff7b7b738533addbe4d206ea986081590888de9d3af218f4ae7afb43916b290490d78dc09f4030db71028eba9d821811e959ceaec6c0e18752f14e18336735d3b5bac5283cb6e1e7b02f8eb83549bde409f36c17ccc59446eaa231815ddc68e508b5873135210e02a1c5713ff357a109b1f2f04b3f3df4196008340b9fba85b85fe210d94896cfed63fa0756b2cd4427ab0e5e83d930f13fb8f6f8141aae78547c3f2ca2893d542ebe1608128b5c177d1d378e5e9c23f9a7e48930ccc2bb7ab8bf7b5e33d70c8d67f1e6ab47d510350967c71f56871a71756d44065d679ee88cb7d7c5f28e3a2866c055b6d3a6799a9653ee0cf8e898359f79df1eeab227f03af6255afe9d9f2e77c05b24463ad9fc51d4dfaec20df5cbd97f26e3d1df0edfca59aa6d21e74051c1ca649769d6eda4e7a9c8df662aa700cc947dc245080d1c07cc042ac700c189149ec826cf2ccf722f31d0ebc83608b19147f30fd21feb07f9c30fc64b8a12b2f06b7b1f67a97a11f38fa476b18d75c72d592f1f797bffb80dced3e965fb3c074396287f7bf0d4c0beb67a78390427c8af8e00ee9c2181b609c70e765b3fea0d7047c0778cab3746bc377cba8df5f702258b072fc98964626eeb3804c339c0551ef0d60941d93d29cd5c6f774ed6a3fef68213800175d20fa8b1e3ea6cde63f9bcd20e62de7974965392207f0d439dd3703371aaa8eff4fc04d1494756336b0abfd891d304e2c3c5e1e07b8045a6bef8fec2694c0369e7feb0553a4579e18978da44f46f522ff931bc0440939afe6299a0b587f6ef67c929f9f5da4f696e2508f75537cd86cffd551fb819cf08797071dd92c6299d6b41ed25402a12cf732748220bf4c99e8f54ca84f2dc904555255a35642f4a57fa5d4bbb861f9bc57e99033756ac707defeb8446b71b86dbbfd09e549a9b7c79fcb09f9b4531ecf0f20423c25ccd6bc1df7f6fb6a8a565a12c5d144c5e8d3fa6a9f4e48df72548c9c82f48cc1da5601b4fb504be4faa8c945440c17cf3f8579cf478e5be097a896b7ac6c552b27cd886c65f636d001359fa9b19acb534b27928daff5ad78a3a9b272c71c579c03ecb9106cdf094da67d9d3ae64e14185818108f43b9f8d12a802aa1a9426fd9e1a9359c321830320f6000f139961ad12e99d0af370066606d38490865882b596b4c04597a566bfb28a4b9e33a0b5d790eadea1d2c626a77de3bef2b2c1999c000bc8f4be7a37e8ce59760ddf4c31f8b7ea32a3353dc96ff9b9ccd9df9e1d2a1ce81e1384a7a3dbcb22eaa7c9455adb5046f8c2127d31af3e0c1eaa7b951579e338e2896186e86882c4f95dcabfe11f14745d769a19428938db4da28bd03e3b2973b2a6cfd622fbb69653746030e0db7090d39e2547417f894a61135c4f309e148c0a1c589d263143cc4b8143da14c44c0ad94f9226918b9d6161741c93685c7cdb943b4ab9906022f7c3da904f19caa3ab5f02d1400e48976f2024affac09d58d5ce3eb821f66927f4ebd1c398a081bcd80a6bbbced1d711b07879f427838f1c1b39e68a6fb2b09896723b1ac9faff39f42cbedfcc0ca43b7600f0d32121179565bfb4631442b6032033e4dd4194f9b9b388468ede61204044e12f6b366b1b2e068936181f11bd74eefcffc3a71f2360ccbd7a21516e3e8310c079e85fe099bf1a1e215c562e79686758e36d0e932fe72464a5364f860221071fb5db903aa948eabe0722da4dcaa93d9a2076a7512d5ed2c662da82e7d6aadc0fbf59e3304b252d80900f01e0e9bb07fd99d5968e9f024eb6d6320689415d5856fd3b213f9bb4eea6ab7842d3d8aec704de50f1eaba107f7264868313cb27c8b84adcfed7661b3075d74ab4e8e3ee4a5ffaf686f15749f8bad72082bc195784165caf15bc539df9c8775ea9321ce0169ba6c4c0655aace1e0788a13fea18f2a53bffe8ba8106c16fe5e6ff416be4c760bdd1d3644d39257450e3ea944414a2c5c87852fb9d05ff10655ac85d9a524854ba8bbfc1adc4f3419801eb46d7e53ae9225ae54fe2495aeec88a4fdc8e500590958a76341448864c2770995e059283bd9da1ba59c0ab721d7bde022bfc1b2dc9de6914be5ba22e2c4e067d4320fe5d24053d59f0248162cfa37146419e4e70ff146d6e1e25c2be8284276d24fff70396fbc1d57bad95d92fb359f421383561bdbca38f5956e73d7e6fd8b3ab8566117089bafcd4a1dd318c4588b85ee847aa02585b026728b0660275eabac246709157b2fd8ee3417c2fce1b41ab0c0892dbaa237dce68406a354054d8a01691ee22ed1b00baaac081307f0f2a33d8eac8463043606e3a56a2980782ab591c9a8b707cbf6d3e593f394b6f1ce90e2073a3d45a731cede4421e2e0c766579836b045f828611f84bd0332a27138eecc16da6d8359dd0b993785fb33b707fbb9cf37c0f1b3afecad4c40e21ed1c29028ec43086e6a94cb6adabed6669ecb71bcf2e2e39d9c631916046173a7f9028da80b9c7ce51d0021cfa885e76dff978648b6d505fa1e5ceb2a771daad55c81cdaea6f53873753cccd1d18067820618380e924aab13a6487d0e873774c1309393ea9475543c18cb058df1d40a19b6363c6b4bb019368c197bc888d369bb5eb312f9a3a28ffc4b39503bfc3237e679ec2cf76fc97fa90a948e626fac322a7e5e6d72c1d486bace65c58b3e12c5d291e9286cc7ed83ab4b82cdb13e8c145adc3d8fb58f74e074579732434be5db0c3de9790afa81c5a3836cb1d6dd8ee6bd260a4657979ae3955a0c03cf26ac3248bc9a7e5b6a3425a2da987fd98e5c4201402f03e52a889b876db9edeeeb739e29718c0c1d56b923e17974421ab55ba15a1f4421e90066af1dd8a45accf2547ea24ada21f299ad5dfec6b0b5cb13e3a116fdb740a738d23950f883f0e7f43f863513efa8ded1b0d9c8611adc7d8b423b83d41ea95c406c1cca3cb785d78b0092f26cc8711f5c73eee1980fbe0ca32751975a6296ab39320fde3f5ce2655bfc5c7db1ab2fbb30e86e863ca1302e1c17f23c87fefa546af9dd925fafbe1842bd3f784e17ab8e57a29fc63f9f364e67e2debe7dd13b8500894f4f02916f7c098697b455178cf351697694f5b709752d1f5a4e44a7d2f5e2fc57e7631b306600a408deef2900e918c462119ca48c6524c700647b336aa5464bf90d16ebb3f8ae870a74caadf8bcbb4c82f68ee156a0cd15796314b4958fd06f0d87b265f5f55a5ccc073658116f51de5e9a4baf04adb08e6b72ea862780e284dcf079e66cdec6c7d3ebf08059a676aeece9ac79b76507b739b5e5d2e2a78a4735926eb829365c0b6dc92d8becff1c52d4e1f5762044d07a78c0083ff01b087a80ef4f08068a6a08dcbea020b33e14a2e4bf374211c7f554b4cd199208fcd17266fa25cd6ae0841778f33a5db3726195914bcf3aa61d097f5eaafc21fde5fd5bbd3ed4d8a7b0fe1191a275f1f4a34cbafb42577eadfd3b9ca63bcb614fcee547f48af548286c2639fe1e7f5d6c7d99c1a2fec7e97228ff2ceff4cdbfe516ee0fa82f1e9d72b8e47ba7b1e4c28f9cb0fb92aa04d1639b6ef92449b02ebf3bb358ee4c21728cebfbd6c8389903594e9e312cfa5d04de4d9b75b8a26105a4cdd40977d700a810bb9bcd761b472a5e05b72e7cab280b742a2f59b81b0073c29a4acdbf4c4685830aee424feaade13b329dafc266619a7643c914eb9a58a5337294264f9b49d5c96e2cd2f257909eb42ba64a8aa6736c2d5e024feafb6fe5b7c3dbf438b2e94d43a0d28c1ed274cafaba26739d643beca27adca216118ac0c707a852dbe16a98a969feab3bda945c3a959fa9bf01c572e3ab951a38da1e44a95017d050cb2d068950c314aea334203e1eb13d104406cbe97bcd0fda4fa5960fe23bf30395a7bbf6db57bce6deeeb3bd2aa28de6315e46f9ffc30753d8d6f7a7e0fb86447e717646b6dd2cf4e8cad1a36948a12455d97106a729149d1705366c03320902d15fcff0466313eb5a701b00b1108fc59485310351059c01370ca079f1c350232d70b5e36e800db2b94437b8890ccc7c5865c6c48cafc3049ae3420259ada0ac9ce6214917207930ecf6982ed13103803dbc3c75f1e26f9f8317a64f6af7f58f9b5e71244f53001c0ea465ececec93b5729ac5b13f4a2eef331c4255cda21bd7e9ff4af6ba6ee2f5b890ec7e67e64ac84232028a7c526e9abde822c5e53d7faec8234eeff03af3feae55604a1388fe250d25b99c173d490fdd858d7580f3453356cbbae6be108561aaa9f520852d276b380480784229aed626291a92fb367ef645a7122547ad3c4a93b8571f3e77e31a9f2c4b78826c7741d7459de4167131fd84da2797cf2cd1f1cd6fcb088d39d331e959d2e620ca3a3ebc1b2bf6b3f35c4d94505f39cc7f4bff96dac7c6d5eadc73e592996e046bd7965327cd4c64adb789a306a105fbac99f627bbabc6f570746d807fc508e9676d2d0a8f770b77a2bc1021a6228b0e5c9b025ac113e8ef56fd12fbde8b7d000d10218bffdae674e6dafa5630ea7fc752da61237220315e939aa671adaa0332c9e7d8650beeed00b5d913ac9ee75c7f7bee7807399a2a9ec05618c37a6b6c7dbeca008a4420e28d5e5ee08063bf78cd7ce71d3a5bdd3348b8b0c805452a6533f44df7eb6b7533a1390ef0596ad3374277b4cbacf39b3f2cc47dcab2f03c74483f76259cdeafc9bf8bfae23c46e3a9035a5a1e27525a4750a55a82ba358982dfe18302dcac7985a966a0cb4499c642718205a781fcf7fae14fc902b4f57e82b4c369b978acbe8a8c5eedce6ccb6b05585cc0edb0c90918cc05171d4d89437fbda7ade57bc7f8c0e9e99b97e64fa56ceb06bad5e36408bf7172bfdc84b7558dfff565ba1f53a92f5e237f28dbd3b5e06b17005b6283930dbb2c5f3aee9d9b6c19a0c3c9ddd2a3379d052f8f20c111b6c284ed6b6f1caf2cdd242576de6938a95e1a62b4bb25df6eadd64dc5b48bb00e97ff6d8a56dd8c1d6be7d92b5914f6d8c0cfb50554000901a08eadb6dcfb8636b15801b2fa28cb10897c2bebcb4206f812579be033ae1b50b43490e7f44a633661578c10242c169d4c4668f0270011de1147c574df0a991a8232721380df10da527d68109fd08c87c65c8b15e137e11c5e7831e6240d55de4fd80dcdb371809f81d3da1cc84d384be01304cf138914b77fdc509802350ddb17d3a13cc377de7d61e832f72f9fb2173032c3d93db7df0f9c8b2be9624d80effea321831e2315d5fdb29cdf54f0ff4e0bd516f65a400063b343ea3c750138906ad9212104c97c9f653aa5cf45c33305f906d753540dca282921929c5622df648f2f7401c2b3ec42477396e53f99a3fdc4c97f719dca2d1957bfbc130717160795ca32b1a2b1b990499e8a0dc2fa027d0c62802c22639c6fe8b70bbb56ea44890fbbc0dc9860f681de4295d431b4dc756197351ddb53f99697c2e4f8103f7b0ada9b0b06592cf9b0c5665935d162ac02a225a884022707cf28927bdd94ac47f338794b1038bc90b96596534fc3399100ce82f0926980a26c6f2dd31dfd97069e155d30855eca04c7d97021646c0739e7898751f49a1fef8ded0f4afb952bea0bc91580551ef76629f5cbb576df6f9ba2587b4d199e0550cc751b109bbff9d0f9835f619d5197243cb0e986ed568bdb1151849945bb6f9613e0300aba86b2f56c58dda335ea76792d045d218a0267a4c9f6cbff857c607d682e7ce2053c5d9a60cf56ae720163ba917dcc02c5b52a47f977279e8f2d74e96daa55586156081afaf8f3df9052383269f8049473ccd31011873b1d699f2425bc9ed5114a76655a72d9a3c360d74e300b9ba88429584cc57856a6800a8a8f565e80a0c853bcb6102113b65366b81afb080420b7a7b437193bdaea33dd346f35b79cad423b09a38b15ae4ba3eae90bd18ec8e9049bbd7d870adf3868d582e35fde2d2c34c19395c0ea2292758c3a4295dc5020b9997ac9c676d4650a85769cd093f38e86f2f3f496ecaaf231d554b46de68328fe8d56783e3edd897c156a0c18b170aeb8a2f3efc680bec40ca1c0c71b1580c21a8ff6f380240900163591f43c97f6f4f418ebd162c5259fe405c266ba02f94dc7d9eca11f632c7f0ddbb876e61f8d3c407b09c00738ad43906d7edd59c9bbf717162ca769600ec35513537dc29e056700bf24da761c2da42e515bf9412aa7e7e78cdbfe6eeba67d65edd442bcbf0660dae7ac098373843afdb1a99b6e512f0ca2ce8be1d68b7498a0c3c69a85a8d603068b00f11b6e53369d32e64edc9e85935a206210e2382189be8d6c4e99d2d71267c498f068cbb67dd931c3051ea0269348e82d067177bfd37f334161fe7ff7a025ea67644f17096da44333357193b2616185b31276ddc2af3fb24a1964ae443547885ee66e60823c774f2d68a1d939c457eee44cb9f6ef714a1880c749aec848cae86f0d4044763c55d98d80a3b5165bc33fe18f6de6f356998e4983581f8b34c366c9c1d6e6597c3a6f762549deae3b6c34d12cbdce77b786696a79860af62a4ece7d222d7853291d04f9ba3249aebd0f950c3dd6a30b95f66c52dc3599d2666c7728b9cb1a76cda955e742dffbb5d99e0b721bb0e40a612302d68b3d51b767ce6a848aaf8fc1a1a30720ce17dede5b6c9bd3f812d855c810f49235758ab7082a2fbb2c204a61d439c62ba2263c879264b1dedd21d460e4152c4354b5b8a02152c063cceec0bf059379b352bf2ae6a4eb19c5bd6d9bc417b88c45ed21c8cdb132533c869d3c3cd872a6c7ddd6c8e678e30ed94c79c9d6b1ddb0a071cf0e9040c75a7dc6f932d1ce230378ab1a4aee795acd765166f266142b12056398fa26eb26ef242681fc09895431a2b3471387609f85930de5031dc373f05097e3b246d66af05b9d6127dc31eb156c816ded02b77824fd57f199ce11bf6de48043084a0211b0bcbe861f72e9fba4fabe9124c21c9feb986bfea84279b50186f6c896662a3eae7919799ef691c26e93241ce4824e49a25dbf651564dabea4d73b2e4b567fff18a9d2e3a6eefc197c8420c72faff35901b4c0a5e995b4c0ab07c74f68547073f902f0331cc6fd69688c7a4640ffb328344ef858042a2b851b4ddcad1daffb4c6584e3b8338e2da3caf0c8b29549a446be464c0c6ad0acd8fe36c459960d73f53135c1dad962a1ae8a0ea438f4f44c4e7ffd6deba58eb05d7aee485f90a99c1e304ca12e591af8577b4c39bc3fbfb44fbe344c7f5c80202db6ffb30ea9cd7093f1806ec566eeb8a9223e9e3ab1e7ace28e3159219afdead0b43128a83e82aa4402161e989a3128649234652ae1cd8f1c787e5cc93be94dcf9bba590a82746bd4413a9adca8b9da91c96924e427ff90e024f8e664ac60413b71a653eb4ed2d91c485a31087e611b4e459b67c55207070d9e08ce15891c32aa7bc385e2371c09ead92e7b89aad3ccc88d6b977b90875c703c4dad217c664d782ecbf62786e24fe97f6579ebf750399733f9e95a05b4cced576d386d402723de86c092464dc6a14da0569a3390e331d5f0283a66dfb3ef4a3ffe182a1c74a11b3e75e884162faceae04735632ee2fd1d186aa3437bf97a162bd77bbbe35e5fdb4cf29739d321d8b80b91c86e4dfc7d1d3d288cee859690eaf805c8f80cdef617a37d1733db58626328b43b0cba4520bee22ee0d3645b68008cceaad3ac1a222ece76ea0dcbca77f3efbf0cf2318349b329c1ccec59cd875940614dee3be9d7d0ff9b0c341b98e2ba6358fdadb821ba44607d36f7b4cd2734b27e83976998b4ed93eb48f4c921f992f5e9d6f66e6ffd14333dede6ea4538e231b1116bf288b7587e3dec34453b1a4bc53352b663622ce439c15c45d622eb89993199a65aa69aff590b5726ce20392e14bf25d39606f6fb3f35cd7dd9dbc7ca20763031f3485a0275d3ee92e870bb5059d1e26dfd90f8906ca260cd4e1ae806de17a349ae47b296dcc9d04a1b593ede6d22bb3ec0d668f1fe52593a63b0da093cc88c16772d6df9f47b75c6d049e51afd0f41a33c2b42b358b96276d2876d84e401f54321fb30be6d1911b15e2dec12a16353afe8ce55f2099b43edd977e2bc2833218cd8687a89d8044f8fef38a9d650faad0500f9e8423c844926d572f4637a1d5fac7e6c3af01e505657f476f354fd1d50bbedcd798bc7ae6b2a00879fdfd5c4b6b9be00005dc0be6055052fea2708a1b0744c5f1084e2a69f78925c1c2ab8db34f1833d65395a5c303b4e22d3151c515355c7e17b3cac407c30c9dc1162b1eb3fd09bac59655a4f67ac052df0f799decb881a85e45f33882bf0d9005c5478932c77781ff4b5fc9409b79b6c5f54382ff93fed5e7345fc22908d30aa39d7ace6e1151b0e87129d73161fc0904aaf28b7355c8a8323d053dd7790bb3f3c0db6ce8b0f259faca7c1510e47724b31fa5bc36832682c82b67144d88e5ee5859d88ac111535109f09908fe7b2b316415c79d22670329a15aeee3644e844f4018b0fc7c5073d463e1691b07f230724634a1d009dbe8fc394b1940ac422ff9bd3258e390c2c81a7fcf4e4abb998c766942022e08b60f6d75a4482893611051938331cf58fef2592b2362f658b62dde16f7fc4d0153fc936bc2ad5284cf1d33e55678303489cbb2b71e3215cbb36e377c01cbe0c9c568dd20e013d89419dd5425ddafbbeabf1d622af683da7528877740565dbc59e392dbddca62cb500c8f8803eead7a464eaeb7b7b54bfa5972beac3b8dfe0bcc18ad0487b37190933b55df5d85c8007f6f6b721adc27932ebf2e81ec6411ac0bc4853578c3be71f8b63af1af17c48f018e95b07fab1ad5bea399a9f96cfc3b3ff53e03cef6ba5778a3a909a9d57175eafff8ea5cdd3cecbe0a07cbd49238592c242a7ca92106d7f8942a87a37ed17f9c5f0f0f6470660a2ed1e471aa11c527b5d5e6236e5cdeadf9164bbe8d14483401c1fc80e7a0b1adc2dd2328048dd6fb5a22fabb50d6e1574c8df82cdaffc40e0e7e907c3d9a245da263dced7f0bee2cc71f78dc23fca7e1a85cf6a8ef8429c331555f8de50de585890c2aca41c9c1347b32612417468e143de7f6528374d39df2174a40596ca6d948a5e8d9da97b713b93a7488c86a4cdee9170eb38c45d70e439765d03ca8b299681ea785f62a0ac4932f61af298a810aafa4755fca6ae428d56a5648480ef9399fa3583e28218c3ac1dbd33f46b8ed28039170fc8204dcecf710fb7f0073a76aea7ba0e473372af5b69119aa457e1581aa8bfbd04cef0f6f9eeb420f9e5f2ebaf31d70ee689b76a01dfd9572b91d997f1a6ba01d7e4f9f623755117caabbb9d2a37c0d4449d8d59a074fe8f4c28b80b950a13636e47cc6e47d73a92a237c97a02815f6873e1646bc9a661f64f74df0ce1cae2d250cdd23ac7bf6afc08351473446360eae9afd0057a94654834567aa2fdac8d7e47e0909bcd3d30f3e0aa3e6497c8e342fa8fc104426aa4820bfb0a10b06b1649be17d1d4b51457559d2007bc4e7d514c7677697d2820cd9fcfb676c76e1f9581672a523170630753d622096b21f9c14fb64751f4e567359921b24c81d4186349c109a1a5c22ee0f44f871ff2eee7c1bc0624b236055b3240a11e61e526537201c7a4b075c81edc8d4c4e88d8b7b76609bd3f290e34cf549d64743990eb608aa2fa44df517cf46df6f72a48d3d7213438d1ea51aafdcc2ba328da2acad4f8902449879ed75f332e1627a4fcd9047e5ea05d53441b05c36e64bb1b009d713ad07d578aa52473df252f9ec9c8d9f949b9cb6e14d53c3d10b7fb1d44f0ed07807b07a35006e886df2f46c48bb0be02a28a13e4c756d7860272e2d71bed5799908c94b305aa32f9b6ba7213b86ad2655db7c201141febf7d37d4dfaea6f55f23e2a99ea91f8d30b5edf647d462194758a194e7a766ca5eea52bf709f18df5371882f52b00f72626bf56e535302fcc3ce832478dcea5040c269143052c5d4be54f04bd825ed353691fe51c510b10391b3f031e5d7f1a419e6b19975fa4e0735170999524000bbc239334e49d86ed415b322a988e4c85bf35b12d7aaf82a37090131fd556dd075e5f32a8fa6b0ebc17bc1db1fd56928e0ee2822dbcb54a94f43b267f3a473aa2f2c3f5275c0d93f7b03184a413cf1370c49475b53de78ee84a5ba9c5b32eedafbd5d7354dd953c2bd7c73abc6fecc87865b02a34beea0334976066da9690b426c534c5cecb65dc4c6f24af00d3fae951b5c265acea1ca80ce96ff37476678213f196b41847792ddf99838b97fc552b6b7bbc5fa6f25f3f3be8940a7639818ea70fb842536ced6325ef596bbd7831ae0a7b9a76e9f749c81fecd5fe06120c20993fc17f57057faa165d7955ea27efe86cb180eb918f353fe73645a83813177f7acb2970dfe469a073aa7cc28b0ac3aa2850a5cc032a851b321c4fe027b0eb9f1521a821ccb3c98c9b9718bc7c050a28e709b7410249d290c580b8348880e0c76bc4bb73641c9c5103b78edb61e4671531a92c27a40ddcebef9fddaca3e19bdd2a25596bb3ffd11ef25f595ec27c537323785d77b0af9f55d3e0558ca840e67a3564b628c49cfe368dc1c60164bad6cc5d3ee78804d1fc77b07b83421765422d8ee7e5a1d9c81debc3a114f3ff5ff3dca12ff6567739ef3064d9b84aa01e5b9aeec93a8a74156aed6a8cdd9ccbf8117a8ee31042b9d9697a53b07d4d5b767ddd79d949e486dd67549ee84dfb56eba1dfe113cf893b013269defd49dc26b6c4680863a988021c1d4df11d23cb2bd9035e369d57e9d4feb2c332573ba196a92b2c55792f95f6170eb1491ca5e0de4501d83ad1c193bc9c37346835036a64e8118e1181e597d98591a07cc0723e24ece8ae2f99b6d079f7bb339d685a3ba518decf0f803dcf49ade1787eeb982b5e959d0dffb9b001ee6959f123473d01436fb509672cd8d8968318aeaf47ede4a8b65174b2da7b4b9cdc671369c579d24aa7d7e9e99794f715b9c3565cb4ea464cca2d81adecf26d7a3af369888ec8d1e682ca2b2985f2584a4755b174483cab6c5ca576585b6b2596e9dc193ae9ee7c3ee1544051e7f5f7fd03daf4373b8ec3c48cb9384baaa9b00c40dc6628343f4080de80eaf990f2c56c50474af07202828c7e327b44c9e65d63519058b9b9e7b9ee6403ac007e1bf24aeb926e3a35770a7b6176214b1494a6098b0c3ba791a2b513bf3edeccba58108177fd27a06a8276ae3d98b4ff99e7cd60c90d50ef1aa1734a948555cfafbf97f1898d32df04520e520afa6708339a0440c674884e3c68c1ea87d99e369162c5637878e7a683e07d23e0e3a52bc855cc325e0589912cf1ea62856b21ee4862dfd2f03c1d000a099b42c343e5775850cce1db6a6f852c8397a61dad8b2a9218ab921f80523f882d75abdc22fec9621816f728cd5a175dcbdf55703a90893f140cb9f6d4378d8bd8559393261a87311317ae68483bcdb8c254799b4f9ce8847872a75ce7d1513d22f513c44ec99a84a29211811a23894ab4b166500f83f94ce42a7ecd8f3c7621b70615b9e33ffffbbc49c22c5c9acb515d79587081ac18e0a8af3154675d279f8ec23b042e2cb0489cd7f7ae8e221942f7c955c8e86b32065d107cc7ce5a18c764f9eebd220399c5faae5f15e723b25004b076f8473629c91d440d006b219b040ef8c45fbc4935de7dad8847a06d9020b1d6bb7eb6176140e5c174259a6aecf704facca7c915072ee143144ea31af4d9bcda177655be7eceaf6d2125cc8e7e04e4e094dd2769f2804c0eaa40b22d90c041d8aee858a81ffc523a41491b01d705e7f3585b5af0ec4089b3e4120effca6b081121146656268648acefa09832baef49996e36b983147ce7599bed9cf7eeda5ea19602d277dd25f16bdf5a425bf7c550cc0a9bacf270b09bc80834a991f74a15cb80114a91b137330518adbc181d5d5ff95ee3aa492da9b9875bc0e8e4ec47c97a1e45fbfde5d5cac4fd174419d41abd75195b196a4068eea1d2d38dadd38d99b4474a051d84ef50c0cbbda2c2a59a541bbb70e1491a9b7de6be5832a8568043b76fd487cdde5abcaea46295d107bced292e8a6ee0a169ee64e9d64a1a606fad4f61d31ccd5c8e4b6e6f84843a19fffcccc02202520064b0a45a5b468c4699f69b931b99941ad1b98908d6ee893e418425e1e1fcf4bc6ca33018ae9901ec1d7e1430f5e6b1316a45bb91596c21b903e894d6f0a47cfe168fbaddf2e50a7f038df1d04f87320f56404a08b735046930ac13e643be176079c4e3a41e88cf539d8a220fedf5d81d69a51bf96059be1d6fee12933a56e77cb0d77f3ffbea2cdfdc794b15ef91591c7b2a254a64d09030f94cc4eba542f0bb10f5323475001b2218db8d02932a7d499ade015f8459cd6ef10a24d6c9ecd44eff14fc4d12e3f63b9649e5dc5e09883c1ce05ba620c55492fb228d3494901d23a1d17e5e97b2b70bb9813ce1ee179a494877ebf64ecb77e2f7ad300102ded159d38bb7c04018975568db4f1c59c349c820790a7502f8bd3b2edc0cbbc8974c4c0a31e4fedccf8f0b780b64b25171dd6a0d68a53ccb4592acb89e4b610154ba52f21501f418c30c5a349ef7a5aa1730f51f4bc4c43e4835e6260ec02b5f9a12ffa87d0cfb72bc776d1b3689ad248c8b2db0c4d7870cc19fb389011c65ca36bf2d4def88a202730b64135397849f7e65b314fa61db31e684ef3d7a2e9932a46ae52c1bac51f7f5717a948ff1a29c3221d8615f45b37cd10d3ad9468c577abeeab4a731fab7ec3ebb7713e034a8cf2d9479c47a752ad5d4c418823f71d73e3a7188aff74fbd09a8a07fd1cbafc353fe084ca8d9d95f229a93fe2eed638cff581d7f11c31b3dc2a55d90cf3a9e617444f1e58c02037c679d7770c059b55f6e0ad98ebfaf2d8ea639194319b3b685b525d2d4d2549b8cedae0a64bbb902e3962910c9d7c5460940623c5f8d39a43c03a55cbc2726ae6fcd3eed68861ebf6cbb220920249fd3556f95b2fb4398e551c85cc10ab24759f7ed9aba66fa8cea5f023448a5614c969e4f5de335fd2a3ad656be3a2f5b6d4927a8496435c18648bcd9ae6630243b90778caece8d73be4ee18cb3de7a751b0295fee2fe5b410acc9381d5464bc2902eeb8b5f6e4defcc64f5b5f04b70274ca95cd69e35e712933fabd80142b790208953e1ffa10e4e68540c178d6144dd49d7837513a98637fc24f56a4c379fcc8bc7afde5e902a5699b5d473e498a85b396937af0d5a9c2b86d5f9ce0f6ac9e9b5681172ab85e0b5da727d56e5525473d5d9e8294c77648fac8829252271db09f3d0db3fbea1a848167b81da834ffc0bd0ed1935edcd7c44c98c257b019411b175dfb04cf3343e73a40e6a316e875736825ced94bb53027363c664d4d51600d6567983a8f051d13466c382307ee963cf2a6c4491f7698b6d2e09336ef719d7cc4e312ef42a2488bee545e06af068af232bd89d88a58380fc5cec0811c9f1167c44df05fdfb7df2fee907517360c00436b60afe51b001fdd47570e27e6481fee71a58f212a95820ac9e6eb8d408858c43e4d8c88192e1a22db108c5d3a101ea855f17832085f5cf1fafb60709f667067c6031af73105ded943faf0c7946c3235fa6e567d1f67f3d2fb40c4ad7d09fffd70f80ce859f8eef95db187d272eece2addef808ce7de0586543bb7f9e161ee0601904219a13d010e775b271c6ee6ab2a7e3b5a102a75e159dc5609d4b599ff450ca14c0f1f78990b2a3a00a4df89dcf93784c22ef90fc65a7805f56e2fb10ed31703859fc709c89cf1e46dfb2b19a8156b4d687d165dcfdc66facc33741c4ff36cc17e9870631e8bb5462b7eb2fa162d2c2557eafbf435a182205d03d836345639e661ce06b578c2cdc8cf6e41f8c1c1d514b38be4cab9b9ed481c75c5dc0fadb478c1e3acbda3b94b95d9f1b2a7768a12f687314b5a1b06c13051db00759bfbd4c332e5821da6988123117e968990bac38dae4a3c1e0f9d3f5594536b069fcd57fc2cf64cf4e75faf88eef18caa61e06c97903f2d45555fce01cd0736d10be6e956702caa4e254feee8c8f69979eda1ba189ffba41d6f77e684709044fc8095ff1982ce28498851809ee59fae92447729850e4e4a3f6683eac942ea4edbc053489047d4f686bcbf1ca2c6ff5c678bae2f5117397f707793c1e47e10bd7194bd7c97c9d91b8bd846ccdff2b32bb4c300368d1f6c7b6173df7d4b2fc141b83e0384044656b0a7248b21dd911b338224ba22ce9b8084db6653fcd205515a774b47fe91fbb4f35dc89f584a23ad11a8c4666910c2f6239cb41f8aa0023888b81df9538fbdcf8f71c993cb9ffd7c611cfc5f007973b4b201c2358b33ff6f971f540cb7ba082e5fd29c9859b9385e90c5ecb5aab6be51e6ac54b3792c8bf69d5fdd9ce565baa10e24ed3164236c1c4ce9c4c757b46fa004b2ee27e76f34c50b1565cba3648002e4ad05ed7fc7b6427e7accb457932abc9745ed53ebc31d09839a9115546c9010b617db0997e3ea32ba29f1897d9751eb28e7eb686fcc86fb011a34a0d58adaaded5529688858f0d2004bbae85b3ae8087f7712d4e46197347c74f7cae6eb0215bb5e90e305b03d16cd0f9ede1d715f64e80e4b3f758ae2cfcd7d631b7e188cea9369a0b19b2074ed674d7ac98dfb32b63b1d5a39ecaf84e5f4a708318ebebe144163e1e08ce0c0f906f3bb573dc371423c1e4bd7961ebfa956997524c727dca011c549ec548f1db3d3c5efd8ed37b140d242ff15c8b2521195fe15d00fbf4f53b1e9fe45825c7ad2a2afc05160e5545efbdfbe3f00015006285e1c03899057f7bd23187ae82ff97b5d7f15ba71ba82be8c82c1f198428e346fbd1f5a0bad843fff9e8e46b97107964ad0c2fec9fc7c7a5cb0b9e9483cc9afc18513d96853f2231b983fa5473007dc97d786a89d063db9ca981930b725f989a61be8e1fcab5c3b4324786069648349c2d3e317f12a8d925ae2a513cc1dce3fdb66879dffcf8b19ebaba78b5b007819edb6961877bffe4dfbc6456a0b06cf92d48145b825e8a9f0658be2246d9846d094f872ecfd5deecc9c2e0b176b32acd84eda419b8a8b9be1f3f261a6a924c0f256363cbe6e0c5dd7e8740d1d0da947f520d81ae8f65670835c1f0c13b309e034d7413f849a6afc8e6db29ea8fcacef58a0c4fc97b6ec0e793de9fb953d831b783af5a85f672870b6aa5b27efc6040d7153d85387dfa271f7e50e05a9a6378e385da98a47ece477fad5b1b53893c514fe53ce7adb403b535abbb184c7347f72b0254ec0ef611f137002783da6c7c47db991d7a838c1fac89b32cf76486ba771971a947c550a2d3cfda025606cf369bed622785ce3f1708df0e212c9368876f7581fab64e889b06a22b457e718d0d46a1d5ac363130c39f096c81b2261e3be373ef341183dbaaaeafb6d79ef5537bf9edfb61ad4201327db70b23916643cebc10df949d113c4882e494e3432a097fefc3699260a91fbe24f3c886fad9f1d603780f7c9cab6b8be273bb4ac8059a064791f70d588c089e69beda2fc26e74298292c401165b092c18cbda0ea9a8a49ee11ce113b63c058b53519845295078f584026557974c68d87f289f9ae687e6dff9aef5185af059c3ade7d35b522c217f1c0261f561ce67aa8e177e84777750292347a7561cb4fb89c5c554677f525e05e0e67873b165e9a314d980ddfe7e54c99d6f4b6b02b0f5dbe99eda413a80a38eeb874dc1594576e0d3f03a8f4a5bfef9dc3ca12447f42746d6c3e531d2ac390373bae23a58f5f24033954c31aa9e77c4e77ab0545b351aae36cbe343f367d407225c97e0c286e7f70f9aaa9cdbb5ea1e85d596abce6f472cbf43e7285d5621dcca811b3431b596afb869aa4384cbd64a092005b5f283b5ca83eff07a911336196b7f39759454ae1f829a3e277592618316ffff57cc2a4eb9dc9f2060241e42305d3f580365f3871ff000c102a275e5fa6890bc044b76d227421d1d4b20803ed7632d56c0e1f519ad122b8bee6a5e576e12282a30ac028945629974a910abc1a3a22624b5f49b522e0fa729d52d9df628781eb44c4974e39d5d514c13e5f60584ce3225b2544013d5abc745a69704ab8dcf4d5e08dec57ced0b39f25b42f3f986ef6c6a32599718036f381608c9a29a851a037171dad10be9bfac703e2d85cc84573b4368bf84edc52b181ad085db10e4785f54927254ba15a6d108234331acacd132ddd489cd98d7dd1d61ecc0461f7519790a0f8b61a6e8757fc353080a0ad959386986a3ddb9ce4efdd80e8becb105bd845d6bfcc68235c570d2e8a1397ca9afbf34159d145354f9834bbd262c477e8f98b4ffd8d3ca05ea86bfd603726dc4e223bf75511751dca6f96ee7d6776e974aefc125e30171144cbeee860159581259a1c1b819c337c17e6e65e256e152ad0a511155f3609cd8c16a380d859510053499017e9428db56af87f623d17a93608ced3262cabba122c239387c4a1a661f54de5f8895ecb76b1021eaa19327af369826277325d12b33e5f1eb6ed50c2669fced145a6483a11a0234803b0c7198ff7a1fc11e5bc5df87fa4f768eb2d09f9103171b6bc228ec7222579ce20cd1662bcd7e98bc41e5df491c5f88f6d257c220e500c4a578cca3b9bc7a0e6bf7685110b9fe49dc26f0c5f557424b4a275357fb0bd31338ab541b1c5786727dca6c9f4fc75d6bf07124f516fbf200e734f2b07e9f668c83f0e1be6578b0f2a4e4defe6951603c1c723f00e1270e5615ef8df371a6c5ab1777cca3bae6faeb1f9f9da9fbd5eaccb19196aeb022b844209695aef438981470b0970b44d50212ddc5a18c967ebbcecdbc65db3f0bee8222964a35abfba614ae7bcf6f71c63c09503791254642f8524959bd2ff42377ff2658b9d91356df796164052c5f1a7b21d725c202a920705856156c73c0e95905865f8e0918de68905407334bd24b08ed41aa429e934158cb46e31e6743fc0b6b71082ad43d5a8c425504dc9bbfb21334ea8db42fb4758f45f7c9d20e653f184ba619ec6e65f41feaf8c8cf67f758cfb38c146f32a4068f5cbea9e2385a2907a4b313e4f90f91430af05d3fae0c43087fafb4ae07a6fd052fc111aa7ec6022ee27bba7a1ccf9dfb9a0db6ac62bb9f485198482c968d56a03ce606e5998f74d5101f205a99c20b907a80af3f41253d842ffeaf213279934383e355a3745c5a0c5c9456568c94a469a77e6855fa312befd34502ff9a0127c6fc77ce22fc3c642232bf2889f6d3e5618eea37d88988fe16b0e168da52f2938b93e3f4d826e8a2273e3a49bfa15ca62814b4f7e2ea7cfbd639f7d803e53e00610650890cfe9c896b372bab8490c5e896635294131ef46e4ba9002a12e70eaa03caf09ff6d5a763bfd9fabc1abaa249d3b1b1bdcbaca6dac005a35cd620301a27041121a59275372a3b423b6d1d0147b32575647e106df0983d9a5b7f33d415749db5b164b902f2fab063c9abf8c1fff93d599957ad51f0c817e6a81dbfe0c80a1428ea12a9dc206b5ac2935f6a7e1a103e616846d3a2c3dd0442045171e93d9aefa7c6bacf974b6572b969bcc59053b987d04760e9afe88afde11d327804625764b7c27b88f637b8ebdccac4caac4d4dcb9d3c9082d8ce1103b8c3a45199d7da98e7dafd19cadbb1bafb2d0c77aa0b7b6d5bad26cad292482398827615ed5df4f9e1212e1aa0a9b088533a1cb2940cef0c52a8b373f093f4e8dfb72520917740eb83c73db11b40c4a014c484ae5a5415c1961682cccb8bfbe8cee8fb206da12c2090fdb36d865ee558135d5548002fda13ab92dfe33188ccd9a59368cb619c297d189a299c814bd39dfb712b6800656dba438d84b2e2fdcecc8060055187a1525e100bef4bdc53e2e29310cbb4468a6850c7cb97d8740c1097e52d365b3be4fdaab490b6f7f0edc36fe391bf29af51f030fa7bc90868c8da7e6271994fdee430f25afdaf39beb8cb37f99ab1645e2f7021de23f809c964722bdb982a8c3196154c381772015c5d96e31a2ae8d5faa23b9f15cebac1bb71a63a2d7ddf3272d61baab725b152380167718936f438286d08c6b777bc69fc20f49915f6118a24f1586aa8b44b4b2db699cd5ab6a58e1460099a9b2c35de84794f780d30885e65ce3bb19c90292f90549a93018f3a1d71c393ff8e6551cd4fe47d2a72d7099339472e28933a4b020f4ecfe47b0c52cf12d7d8ca1876a27f19cc50e0e04f2088b9f37d8e2a019a262b7811c280b8e090819344075b540caab1d708939d0950af7869025b988854d77bd337f0fb3634ab2118f89243aac40bfad521e7dbdc83c098b9769a741fb54b643fb203c0862c9ad847b6d72c1b039b1bebffbd6cd2d266b570f2bcf42f7f88058eee87e4aad69fa2ee08f40b58353f638efe81322247ae28ed21b64987f4bcef38b84a21fcbd77d1f59f421cdfacc9464e0bc0bdf518a8ba631d75c4053335a468ee2db11e913c363952fcd7288e9c6c8c255de80a317596ae85be451d49860ba64d886a4d3022a2810d78282e4add667fb064dc790169a55eae13dd95417796d4ece41a17d0583729529ec6345227f10991ee483b5450e14c8dff99dbbbe082251eca7024e966d4e183ed41d8fe50f4c7cf2698dd0719f3fb8f6674ca8d577e6297eafb124c2c543f97e5eb48fce050942f803f3a56e2e0fa695fbe192ba97aebf5aabdc6707644f8600f22261bdb25529b19d123ba7e66493450d135e227b3fa03fbca7af118dcf9b45a2de25ad08dfedf6b4ff5c8e0c2c8b0d68d4d3df3dd481733495ceed34e52252ad51e0eb3c36cb862d9bf8b58c4c323c74f21aa188e57d39708a63578492590263e59246c007926227a4f43300e24639fe2549b73ccffb323f2fe5d7735bcc8d8c17de95a3ed89ebaff0b8632269dcc518a461c876e46f15548b325e0c44d048e18c0cefa6a4886a3ceb4982805b28e949e56fc03a2d1ccf02ccdd515d0c9e68b6a8e13925c4f3e57adf881c0de62ce52e763c6986f9f919e2b7af6300be6e78c866eceb76fb04c6fd9f9c097fb5405a749c2ff7f0693c8037c32348c45a2dbb84bd1be4837679de179f381708ff605d8849a94f08013f3fcb64c47817f299159b2a6fb282a4776f6f697847fe574f41ce49f1bed5fa30f05914ac3b8bcf839270d6dd10edccfc629c6354bedc89857eaf34b6a246b19e801cbf3e715786620ee0f6177535326f94649d056053312d557e3696f57532a4f85da67ad0ef8d4215514ecb2b925f3161cdcb099c089dfd1379aa9d09c3e3d059b90e1878a6421b7f703697faa2e73837fc8c005e3c4f7ea6d84757ac0d3c63eca6825918260c6295fd4c5cb4c4ca65c7a3a22b6091378f38356a4e2abc0e15c39fcc019a6350ecd1e958595b958b4facbceaa5ad62ec563cb6a388e608ecb0396c250f1dffe105b96161ef3b9aff3c8b3c2377243d4dd1080ae27957984725f9fc47f493c8ce71144b1f85a85d9987117c482f8e43b83873a84e006b2b9060a129fdde16d4f92c74147bc520f8ecf0d8d0a36d46230c42c4a5cf115cd5cfe3b427ae62ef3a485975d45cb9cf3abd8a04c0f05571bdb552ce727a1665ba7247a9a52dcd748c8e6475289c6d38b8e0767b2129918d12dc564bd488655edd7fa4463bee06bdc7143865c2c8f3af9adde887883c85b67288762872133120bdba2fe447216d15cd35228f33f6b3cf123a887081b236b590be1b68a92871ef5968db6c338806474b433e82fc07f3de1adbb7ac547971ca9837776a460cf04fb3192ce64ae02c44da3b9f71044ebf2e7bf3e2c79622903f0c3d401e99d167a63e4083989154a510b2f8ec8fcb31ac9047a4886ab2058d9b703767abee8a21cfbaaec9f7d9a6395a282015c2e1fffaf2821000df46d9acf6fc9c8bb2f5a1865e9b9db396eeae572a472fe41631de4c165f35c66996b793d83563ce82e90b61026d68dbf5d6d9b435817e6c82d84b81f9fcdbb1d50d9bc8f2e4364461252c461c059b3f2f71b44e08d3f73455a9f1c020c0b7a4d6250fcebca9d5048577c9c2a629dc58c57cfd51af459b638a9f91a0b8779457345abd4e3916d7b269eff1af65325cb2944a42ec348969c011382246ccc740416eba34168e02b69e594b6d051ef8b6fb9e59a35eea3dac5af44ca55c666e51673dde0ae73cd48d48f517af229a7c16c2cac1f06d0809cc214a88437061b3cd55f191230a88e7a44a6977a95d52d208f59ada058bc6cc554d66c5a48a25773db0bba77e92e7a59c3ef6ad656c69fa5271424b84f932c09a8a303167fa388fae0dc66e4f411b5a593f23f7b26f835512a11c9858c41bdae1f3b83e1493750f916e8aba9d3ccfb54e6efcb7784f2b76cb7a30aa6a7a02fe226ee97c5989c3d97af3423c70dac9980d96a05f5f09d799e425a2019a787a8407c275a55a73c10e5029af0e06fa64650f0b6a8a107d0ceb810b40004885f8954d4d2ed64f62cf5904e6946499eb11ed57ff1518ca6d938f3a05b2f5ba833e075507296823a4e7a1fff90d9f3cce6f91f5b7eca748f347afc4a7c93da5574f5b3faf36a11eeb24b8aa6f109731ee2a406a2327f8c6401706f5fc8d944621f9c2b4df1e1b822d3720c4f562057b5f1cbdbf37f25e1541f61283cc52c211a73fc4d02b3d97c186e64c57ce6cecdbb2c580b974a0534c23438526bad7c9a71248f18f82649dfa843e610ed6599cb12a03f0b3633bef884a913f2069ff732ab1cdfad01405c01b590fac45e07086d4098a025c915f992a5798748ccf4938fb9a70ee2391a57a013a48e9ce368098682fb7778db7648e9a52c2da067aeb4c3595ca367d37e9196625352c540e8ef9c2957ffea80832f7cceb1d5a0214cef56e57ed421525b4d877caea4b705de1033495f07dd5c01847abc65b33ddcf5a1bc9acab733ebd91971632c0dd71a9fb758addf4fa139aa2006d20a76f232c4a81f24b22208148343cd396e57273616b10dfa18975ae2a993b2b6a0192bae48bc802896a9c6268b08fa96c53d8351b4a3796d8a78075729cf88bd2ca330e128f2ba41f28644f79d2467a8918817f85f2626404f2f83f774f508d3b4f9194053db52159a0363fbc2ed307ccc2732c970fe276904aa68574ce7df82ca3e1b89ac33e3831ce4bd46719ee9d5dc9659ffc4b7d0eff6c1489cf1da489b815904ab4e880d8a89a32db8c90e2155ac469771e5859548e1f430a6c9f4bc150c853f77db2fedc93ab8ac5f17ec6974fae1dd77076c616d5247c4f8ad218e52661ed9391810ddf3edbc464fd961e58da9bcabb71e9864344fad4934c1c7385d0c05e622487925b8aeb2a293df01393d8d8bf4dd15c9afc22811c6616f0b3a6ea215d1c799c92a61e132a2376841f1260131f372ed47667184ec84787806e8f441227d64269bfc2905fda21353826a49a0a522da906620a39acbfb98c140306256981e2e7e69887039f8c5eca992bfa33be05fc52333907be650c9a442587186354fad2300ba0d50208f240114196d8bbe4b51328ec59cba7581f135b5f101b4ac6a9fe071e0bfd1f706a7dde6357340d8e699b6529ed0c7eac04eb99bc7bf7ff533dbec59e01b65bdd5a848638dae7cb3a0e6296e8ed460b7cfddbefb73a8029e393c291af1e884e85ad0572a40d1d69f53a8de5600560071eb462fcb3567929f1716f717507fcbfab7206fc466b96f476fc6902df70ca20c460c41ec6bf7883e8b43789b6336995efd934b7db051fe0350298bebd283bba77f2753a4d9b4bb0be608dedabf6c4d3ddeb591e10217cc3e8b5e6f3a470ed3e69f4a48a60c8739cd2d44abf4c9b479682df02425b4ed63762af32cf28e29699333222b8fc2404223c9441627ea24ae9862f8b1b7d231f4da449b038ccfc4483358907969c275e25da9b86664063f5956dcd46b3f423348cc5532273047db5984932dce10c39fcfad6bb76cf2e163641a32c2719edb3313621c703027c10ee4ee51be9dbd0062982d2943091e30e752f5d4547c5fbe178d22587774e914513137329b14d9eb3d435769b2bcc92abccd24b75a0dfe0c419c78d127f8d0ac3c22752ea7d639b7684865ba06489f463668873da3b03a9a89240b10bddd77d4f82467fe3c060070428d3d9d906f508731bd0be7cb24e5d054332b622d1afb992031759701a4e1c8f57cd9d4978c1cb59146040539958a703d883d391248768be959f1a200c9cf4c78c85303d9d28a54fbdcdc0892cd2fd061b8246b435d9e3bd5967328c8749ccc0777692f41623a1f5a7732f7b28b46a57d9ba851d263f066c95e1f84344a7ffe3d20bd655df1ed52773dc2da71855856b41666f3058c35d1ec8e0e0bd8bbfb9f32b4363fef4f12e6fe0d95ad918211f6c65323907bcab99ebe0c0a274877d84521c40744e161486306ae7f94617641c1b3a60c6470f72ae3b0005b28ef82a12db0d2daf12a2ceb61234bd8a2e886171a5bb5a292f145aa669302f661054d70c34de3ec3135d30d80f2823ccad0f4f326059b059a00db1e855f9ce1c6cbe7c06a38df4c86dc1d338884386a7ce8ba6c34b0bc273aedf1ecfb6e9195e084e44ada3e8b3ff10c7adad4554e9e245ccb2cf2892a2ea727ad0283938e2a8fd374eb7a5ab6d4e3d7a763232aadbbfa521882adb2283474233f23a038656ee20e9eac2ca380a0bff9dfca46eee25b88d4934807a8a270ed5f945300a07e7d665f9cd930d21cc443af340c554fc2ad241b5ec0fb649c420d53a7de2de1215f42aba43ea2faa7042478686f62d3a60da80bddc5ab0071229a6120c1897a14eccf1e849a59ce674cb2134bbfa36e84195c8bbdaed1c6f452374d51fdf8a40d154f69650bc4ecc0ae370cd201eb492bc0adeb6eed70b4594ebdd68edc02bf400acfb567a00db065e71df26526fd79c976436cfd4dded7c034b824b04005081ca97357a99c00dfe0238c2952ea92f1a9215810ca07a5285950d903930aab8c953be25f58d7e4cba818cc710d539ded23369ca9f5d03402f2b61d3ebf2e734d86c306341f4a0605d00949d6b387bf563310f5bb7295cbfcc426d87ffbb61c2f0e05b6273ca5ea43c02d7182f15c7a20ee350809dbce072c6730cc9315a6e7721ba431b096af92f19526e9c9d9deaca4da44c0791ed5ecf753801181b209acd04b91f2a1efe1bd9c6971057c636399899934c4a41ed5bc73f9fe1c2322b2107179862259b0a32f59198570c3e46b124e397db86317138f675119ffc7b641cdc05d23371e76408e66f42389a61f4327432d9d2688facc5ffccbe46c20dd8bafdf53871d7679228141ce1ca697774a8e05854859116c1025b5922a3c866280c73362823e3d179a59693692d4237b87fc9719a603bc2b2256ccf2a164c045cbbd98f83842003cd07cf5c9d170fb4bb5b87c72e5323dca6c7e34a776220b6cc6df1599fcb27b5aa7bb03dda26e12c7516720376678a871f1309855a9948a6fb9bd415cb20769c6b96d26a49bd75a39718ed62e287b4f3194c8319ad6ff3d0726b71d19d34a4879233e4d177915930602c128499f7e0d573a71a102444fb0af2130cda9f11b18ed7d48a1ad1c2cb1d3fc21100dbae3d58467e0eb55f7b8eef77ae3105caf35924480e397458729616a260e7547d2d3583871f5bc51a2df61cde652bd89ccedf2c45883debb2ec1ddfc7e605f4d9134600afa2c77adf426917e3828635cc864a7220c88183cf21e8816b75eee9ebe9680eef1ac11025674e7621cf85c2c4cd76c3ccbbabdd56c963be10a767bc5793624498c2fd3807f06be5fdb92a5cc6d9844833a4c05c2a44404561f6e62576a4c1bec3b34dbb90d596406f7daec006190553d8ab715a57c69b68c6a5bda5fa8bb22cab88ee8bab1c8ee23d7e5045483a9fad350bf0d88d609faa97ab9ee1852af574cb593bbb30e6f9aeb1bb175b7424edd8e7100428ca0b86bf85aab22717817cda03eb63cfba25b79e7cabfcd05c39039bdbab0f2fc2d6d9fb17f76bf9cd2048049e6333603cf07c6b7d793fd51c1012688151a920e0eb1111ffaac6bb545dfbd5e7b0782178aae735d0ef18076172ee0e7aaf982dcd137629d7c4a9b6c18a47d80c6c7a557ce5f9080fd5fdeefcea00fade34c29c904b3a4f49a27e8b97ebbe6e36b8c9d69ff614443f6e0e731d19b103142001211ff0e6270e47aa781a75bc7a37896a57a8cca41d79d07338b3de56de5bbdbb8302c1ba1f2e6c594c311ecc515c5d523dcf35d795e0f12ec6ac668f2a828ace1c49fa9aa6a20075da24b1a6cd5bfd14c19fa0d7d3112db278650d64f11ab37c08b18954f16f4dfcfc21bb074314b00472fec40fc78aae279653839d6ca5b73b3b0bda970bcd2e123260a34abfc6a20186b8c16c0d57860501929f3601feb9f5bd6456544709fdf5b3e25fbd27883c7b036bf479adcc3da8975e8d9b850391fe186132e40b2b17bbc1303c2def931658290f47d4f2a122d4cec7e3c4148f0f4505f4172156a5a5c282a73202d78ca126ca3751da1b790be91d4eda221b375696124becc88f5972dd8527b369760258c7739d2c9ed9094776902056418045bcd0991ca8493f80c26ce6e4701ff5b80603bc8320b03453959130b0817a052c35a96a5bae6063d1df0a4f748eae030a10e18c8512e0a3f485b8d68b53b66e6de15953ac83ef8b18a7f8a5ebd6d66a7200f98e22395dc1fcdf218c936d3d57b953bb3df1720daedced8a7b6a04142ce7acbb678b9be48a627b0a567ca31fa6ddbb3fd2f031fd9cbd9856e7bcb489bf6ce0763142951fb2de9a943dc091da007af25ce5decde461d0230d8863fb579301ab0c8a4bcb6069a4aa985e100ccb29b9449c418101738c6b580d9af83bc6e69b837bf8e86671ff22c89187029a6e3e4d44e5b6ba5d7df2a16bd8513bcce5dea20b179a590df4503c22cb0a4f0e3701c529e13ea1cb707a7258390273e661babc40a9e912ba6e378b474f50d544b261d688377f22f60d380040bbb345ecd179fbee79804cc1c97a57f74aedd34e133b265cf7d473ac0b326a752637e9319cced11590d784979a7cecb45bddbc9ebf7c9dc5400a3aefc31a694ee7552cd2915a3d6cc4a2607c0367cf353a374bb001e689fd8e2a57b59d0237e06c145e38bfad1ae93bce25a82468884c22e8081df322414721753786310d2ef6848171d88c7dfdbbec68ff8ffae08f8ade525641c3ca1a04c518d6b05844b24b375925f0fe744e77e1ddbd4cadc5d7b03034bc9a2cd488483c604c133b1f493cd4e88037d322eaa9133212a35327c76aa977d0dc9e2223745659eacc5879896582b8654900cdb17a1f9d07b4d0d31e9c0564360301a853f472bb0d4f2684a228807d3b833d0f2f118cfc55582803c9c265de5041d57ba5e6a8951d4329bf293978f1be69271c8ae4dd15b06853f85f30660fb10a44a7ee9a3f6d2930873407abdd49d333ce0b251c269ddeacb3eabc639028aa9f1346033bd40a8a03b8f1f782e8e45561bc66c48aefb4312699ada2a8b782220a1237e4657737d7de6e799d830efbbf4500ca002ed7cbcb13095e14406e40d943b58bb976d56d5596b4afd15427cc88d8848f9ab1419a728d3e4f6cc0436d8f20f08728cb5f780eaefd89a17abbf153d1121c93cf38e2f8f820b22d1e0927e5db2731ff026e6c6eca64a0eacf643d53038303c25597683c37eb11cc4abe61369a09f9426e76643c7d342eb090bbc728e957bf951f932c19fd224da1cd8b1b61433ab262672d21e67bd11bd4c0f88f2aa25fb32fc17ac9738c19feefcc6c1452b1822dcc34ded70612126870c03f81117d37ca9f63e8f934c7a24cb213488337189aa8f7e4ef340cbbd2e4a74bae5d48d5de92a912ef24eb92685945e93e0990f62fa7557adf9ac7d78575d7216c6d01d1c727b9f692991d5218e3ad3390a53d84530c706901693693946299f7c8e6e0bd2d9da41ad3d8b6a13a4fab6a067879087b4d70af213d1b1613b977f417b907d9a52e3a985ab636f3aff9b6493deb1903a909645bf2c807ca4f367eb1d39339797aeb6640cd9424363ed36db70c2afaa13b1a1178a8d9dd01f8518c61059ddd169d4d83caaeba83df56066a51383f7a4dc3e8c73eb0187c4f7fe0bea5aed61951fdb7067e0b7054b6886b1fef9fa34fa0fe623c2b3ff64c26e8e929230c39a38793e403e7954ac1877de66b9ccc4e6bbcecdb4eb1e50dfe4497c7d858791c4eb10bbc7db3e13c2c734dff6819da6b5af99425e60dd5e505587a495c26408a5ab59ee8ade4b8ea8931eb3af761f5e95ad6dee3b7c1096c1ddef99fe79dfea57a9e6a88a8f8f4b90743f4d61d3bd42990f8c357ca01b80619da554b87b3bade370314d967d6f077960bb86ef926a6cec93cddab52f80599d7d5d643890f7588cb65c91b9f6441a25e9e5090f61af98cae1da46bf3d66cca6f1ee426f7e8ee4fcb720f2edda4e111768ec2dbc4c9ce2296d90037c74cdc61be4797a511089626935258b0e2cfa909aaf3c7a5338ecc315ded623b550587524dfa51848e61cec18082c74d1bbfe41a72d8c1803438a47fc8599982ee4ba67b50bef7c24544d6b9e1ab17308d8132e10fef79639ce7792331f78bb74b1600bc34d0fe2857c37f034efdd6130dd69d9e150a691921d84d29c4f994a34a769503eb14af6160f51aabcc536b3eaf8dc319cdefead3a1f9b99d0b915776f943eac7ae7bd117a58f150ae2bf0e5741260a18f2b375a8dfd235d8300a337cb904dc1789dd738f0c3d08b4e8600df3bc7f2c6d0a678ab476cfad2a7036428e651d39bf224f3cfced0da3626e71257844b0bc5bcdb54cb3c3d590dd3f62032e422f0c7344a6493cc9f4d1330b634cc186aecc23a16000061ec8c72f3a5f8c9cab9479b4bad77c09828ae3e0e055c427cecba707be0ae25fb1e77712453f088f9e06e72c8af09e532296e649fdd604a24878780e2d01c916b4e8c4f5a261bde7ece8d12381dc5c1b9b1be29c0efd4aeb4c79ee9769cd7012146bb119e12fe3cf4e4c8a65708778635612cc9914a7b77ec0ff4f0145a238d5607fd1ac6c384cfad7ba2b771c17e05f45c4d5f41b6cfb3ebd61578b61a2f80468571733dd54ccdd248a064e2cd4defac967668a1da6602940a346d7c185cb7e8858e2acaeeeb1a78f4d6200fd57af3087f03ede05a648cd99927caaaa4b25ea19f05ed29afe1daa1357196a99a77a998c08cf138e3164ab6abd4e60ba5d3bdea6335c81f183dd3bf0707cb836be964b551e0ad61b238c8f77138e0c6f9fba90cd2b267ec01d81fe6cf60e6043e193b21153038c74206d2d662041d9d67b27259e88404a9aff30105dcadab752ede1735e95a04ce935183e3deed5ca58881a5603c973394a0db8e86a67d07544764a1e9a081777fe94ad8e3e46cb6bcb9870c4d62bafbdc383af649d78520328a76207e6d9172f5e14a88cae9907ca67aa63f2e987edcfb580bc18c9d8f2b593b2bd7302f1edc5d01b80f2e5eadb46b0349994f94bff17b2a45191fbaf9b790b8468a77eb78df39a0630dc05a5ab35733d32ef7f66ef7928a1cd9e9f8c452b6c1c9d5fdac447419a10653af212be85d71130d29121a0b3add0e8a4cc5413df3cd0d15e20e73c6cd5ac9e31b1e2970f33bf7fa1aef4039dbafc88fd0318fb7d7025db551b087fe598b1d8c01a5df29385a6eb3b0c0e51a89fb3156f8c0104eb220418c9933b86a0f96d81fd34057794c456a088b30f1340adf3940396704925b0b09c7e1b055055925c90b81097482d83908ce5aff38701448dc9a7b25236c97610f39f5dea9c47ad31db8220d52f6e3f2737c44843fdab206d6ed12a7c2a4312b2eb59260e32732ef6dfeb4d98106c074f4a5cee409bf8fd28156a2a25827f24fdc9fa81032747f37d2332c393dd0e34ae292bc6fb01a34377b69564e7a510f4b351fd6ea7e8ffc5f09a67ca7fef92c75f90c18d4eb846c9cdd389963195b1446f8f60395856c39f27d5456759eccea8e421d372f202db6a3007d5e8add557b5be7be400c9b374e4b3c527b88ba2ec3def8a868dafcb502fd6c62d7a58946463210679fd861f02e13c8496a6439cddc2c0d89a67b56b383b5c016b73fc5b89c6edb6d0ddc84e35a1951c01ac66144fb79fed9eccb77ecbaef75a59a2c94884356059ab6950f48d37c43ca71c152c4f69b56c2b20b2c7dd4f973606929a42835664e1e4991004b90bfe3fbcb781cfa34d90e1b7b304afd12ecea0b519c7ba34ff02693a7238c1774c3b65baf61a4adf37675307a45784c6c584f316a824ddab719cd04b32c7d840405578edcee7e2027a79ff899b80c7a1f740964cab19645fe36191e22c739ab45bc2cf0acaf76bfd44368644b5601a1725724b173441ff178000d7be81e059b89e266df500ffd4f95d126a0bf0e3b33a48e03aedef21b6d3eceb0bcb9a9936eac60af2390ed04b1142a9185f3e4de6ee950c769af105f63d44c298d880086406462d1d86331dcc5ff10ff5decb25c73bd74758800a67f3aad33e0b3355331ab8fb4ff6b1f8d1c859ab2565f5e2b2fbfb24cd08e7b2fa39b958c3de4fd135f47ed40aa81308a8ded81b4f6818fcb6e0048630379aa36b2a201712ecdd25f02acfe79d58e42c1d57d629d244a7b054557a080ca1a47515436a9d01f4725d1a50115856c56665e4443976917be9a3f02f61cc326b50b9c42403bbae644c6f46106119d5a41c76c676c8099a0c65b6d074465b1424c94e93be9b37d72cd5a0191ee875683757627a2949522861a9f3aec1a29dc2815a61d82a5c657ce5dcd44de445f03afa7542e121a9a58669490b27ace687725b280550b75e4a9107c7ac4ce2e4a7b777c369ae898d89ab332316349d903ec7afb7e84e53e35c8553a7d6f8d7ac027109eaae9d6af7b098e794c5277d3125ebe601007ff02cedfb10e1ce498366e666d4c58628eed3e20446f1f9fca07786d99eeb47867eff6b00e46e5de637ef1f85f73e1d36eb65e6002db0bac21e957f795a09e0caf6327b911c4f5ec0c17ec01655b06daf8e5cf6c976f63cb258b856fd45b64625e01e4f2da5d3d7b213cf3eb0a6e410675a1785d02e9f64fb6d1c107979545199bcf058cf96074dbe3c2231a9ce1a4951db4da3133a2955a526b392423224aad22e7cdff1581ca8e6c1471e68bbfdc778c5a63b14efed3921ab29d3fedc25a52032928f77ab3377da94573a2f0e967d6f1083f8bcdeab4cfdebb04490c219a2db505dc815e5f108744b6d19807b8ebb8a5249d717709c00f9c9d9fd8a60300bd1dad7a741cef0e1b8d3e4a9e20bcdf281b722c7daa8a698d876065942d7767a28d31925b06190493a74873430cd5feb2323dc847bb18501b66872f4f17e4ad7aec74d2b25c80fb2670505949d6fc478574e4868f05301c5143c987c11bc55b6bfdd0ab3e01219b725f11dd3e3b50095f5accf819e2ba500bcba44efa8f398781be8b5e09ae23318d09b23b7cc8e3eca594a3e343089979ec10c31707e0912bf907384da639d20ae81c9bf59a0129b5596490b78fb0bd465cb3360eeab0f611bef8acfb50a1837b77702ea1fcf0566d2e8c73e69c75c929d48a85084b3f7fd47c53e19cdbf6fb2a1995ac9a6c2928a35b168535666fd830702d1952fd2f1efb0916201ba99923de89e7cf469a47ee51d741f8ae1b7321e579dcfd0be0860aee76493fa0be63c8dc0657e82016a42af22f705c484c7fba2470e654208623a90139b01fecfec9330af66e2ab52579ed735367cabd4e295d5032239e43db595d9706eb08a3cd24c2e43c1fb55d1c7817345482c81c08d806c26f7af15551cc9b4c41c553207d74013642b9a5d4a1b984dd68d209d475be9c980c95558da6b38829803afb0b43fc60806dc6ca15b09b522520fa03c5be5e3359659561ef8b8c33873ce1c6e43d6dc387145e0cb35bd826a2119894404a2e31dee5c1b2066b43e22b93c9b7b1b4c04dda31bb23ff4bd31ed4880331cc6172c17f52df981afedd8859b90ca769e1f49e07d6c679a492dc59cd919bf06ae213013146e781be8ddaacd6d25540957ab3bcca478269c407595c61cb6f8dbca258052c42bdf8cabea7ee8245ffd3c6834b4789dd64a60cf2b520cb8fcf3b78756078e71bc9322f2b5ff9a791fa36ddae65e59193354c8c2196b363e1f5b72403e9a2807ea4136f93a7c64e172af347c7603f919f07aea0450002273dfa9f7909ee62932f2a4913a8092d4054482d054178417713f75b3d841145e68ffcde103dd1606d3887d9dd74c91805b6f9dccb973c97a9c176e3709096cd75091fff1473a8ee36b66fbec5c1bcdef669fb5a6e88efb5e7f63bbf64c0364b4f8fff4abfd66326b7c745d6a8b45eec8f09b7c48e6ae8de5668fefbbca4c038690a1e082757bb4fee82917c14d9a85bf8ddc2de3ac9b1df01e2e42b1ae5e411abae93402171c13927b51d337444e953222b5defeb09835ae68abf67dafeb8fd5a5f4fe25c651110e076d9e121ad1be5a494fa6671d9482ac61b013738bcf8f36e54f8831cacd20a47ead2fe7955f93bf85794c85a818ab191dc1a0c68e48e55ea10cc2082d4d36f424fd4a89e71a13aa9c54ff93cc2d3eb075a6ba5fb019e83310af36637be06f530fa5493ceefa6ef368f89dda4649a924024c7615e993c2a412c9c97d7b8714b08c549e08926981e7588dfb13672a6673b5e269bb5bec2d3afb0d1f6cef744fe56ba6e63369e16195dbf555915678d42900ec3b7a356fdd21b3c8386fdc95c5fb905d6fa72ff33794fdf850a89d17ef8d475ed1c70b30ece11548c8868ca3a5638acba4e07afd869444bad96488b154ed575fc13fc8fee06b37cc999f2627623cd03d2013901a6f4ca9fb185ae41f1017dfaeee3b9618c116ebb39fb8fe8531b116efc2f92201c0b5f21c39cd920f573e657c734bda77005373e05a58cc2439ce2e40890d3354fc4074e9c4825d1d22bdb28a9624d2d290b5043883339b4064e0db6601166b63ef95f829ee142d1e4d9aaeb96af57dd26e16e653d6b78f289d328115d420ca6a12a7b66d3b3508ce1fc42d3ee6182949d47dd685cec2a5c35cab5c8fc2cf8078158bbc2a17ceb5542fd44043ba1119244078ddcf41a31350b23b19b2f502f58b795e9a2c8a3773e9d67b81fc61715d6f9d5dfaeed729dd58579c57d0825277518ca6583f527c49909b65aa13ec5ac20b3f0115784ecd72ad7559752a8e58a654874548064deff73188dccf2e53c905951ed44b8617694b42c9f0bd185f5f348eedaa0c618e16d782c178a5bbe75c675edb1110bfcddc94f433a2b901011edc2391ac6478bc72e8f4673935ba012686d826920e6ac72dab6ef2a8f5d5ce3bed20f7f32c1b5861644d4e49a51cf8f7db42ba8d55f1871ae75fcf1dd7e119506287df860d376036cc303a3b6bd933fa2cc58663972a3adc425c0f34500b71a1641d4c2a1cd561cc3442c35ac9c5acc0bf14faf8aab88411c53d8a712480989400d86e6c73c9064f01fa8f377feadb64cf657bfcfd89cbf2b251f7cc8fc97126a9a89ad2231d578af87250b1e455937a78eca2bb84949e40f290bf9e4a6379e6a12a6f1e106c0a465125dd130f8ddac7a8f815533381e9423d776118795950db9420cf0c79b6c7a0f4f0ca9ee4ec39fb75163a854e5d1c36ea2c59c24a39dc8a15f62d3454d8e3595259938602cf7c3029478fa1fbb633091885a2340845aebae1b5004e0e447d1b8d982501390ee9f604555eb54d09ba006596e22fc4038f328b05c415f7a2126433f30c810a609a9ad0f60fa3110a5febc772eef2035e6883dc6f9b01f133a3072a5457f29f34401a546c0d6b57b53d86dc28c797d9417c5216b2a10b04c9b5ce89e6d01c84ae009e1eb08ed179916ba396295a4e249b0173ebfddfce4c2ab98b785344977675050efbd554cd9557981720dd32e808d436f94d73fc8e828c02e9c47fdc37fd8b3db0008acf47268a6d5cd4740907b0b37fbd3f999cdea239e2262c24b6b762446a6d54d1f2fa197fd24392dc93bdc6c77d48e75aef41c824d2fa502aa0915f188f52807929bb57a17a9c6373784cf6c6f4a3a6f42f1a86c5407502829e9b15a44428cb8256bf004b40563c81034dba84ad403bdb17a44d5a65991d813700585c5a4d22e01571d28a2db8dd9777977e1024a0c8145c6dee73aee39c520d9ad015cd1a8eef1347ad2a800aecfd745dd2de6c182ad073e304caf6712c9851b71c060c282057c3fa17e8a75b08d9f22f7b8a127b424ae157434db675997cbe6d0e3783a255a8cfd456eae4be288af3c0d96507ab239b092ce1831be60c83f4100a80a6e9fd8d377a64df61fde09dcac3f5e3d21aaadf3442f9274835b01144ca14dec97186adde992b42ce56198e23873d44b7dddb31303a92ff4b5b80ebf47060cf97a9e576415bebfb2a60a49dbe77f5188e135880b576c050d4d1c9d5f003c1b9f447d604b400765da3d6d66881a08947158ac44a71d96d5fd391e15fe28fa38da1b8322b04638ecbd388daaac353d569437182c2b5efc6b6dca6b47595cc0c36cc7575a51493935abc93717dba991c39903ad7e22f964b7522d6db4cfecc613d3fbb7341cd40a6dbe324364f6579f0b3f0a03a8bb521edbdb78eb8af75b0e028ba802f4988d9b044ec8ccf64f68f05afd2d7aa2ba6dc6307de7890aece1ab105faec72b49afd44d21534fc77139f12974b56d4f9dc4fccfdab245afc588d04c4138b588bef2a66f4cfa8a806cfff59b3f87797457cca0ea5b4c778d63eb262ec3fc5be1b61e339fccd74d07488bfa734971614eace10a60a661946ba3e27dba927c7846c87dbabfc1f255cd71b6e5ea1e47c2d6195e5f1029c0ec3427a3ac679703e60cd0bcf4f6787846c2c9407dec08ba3d43b2a698db9acde313433cdcf39b4c0685363c152d50f6bbc98b8950faf8d4890e3ef889689802b1411fc2889fb8ce7289c73f0ec3478ae0ac6c4db1cdd368d00dbc27b80ff45b9f55ba9a5c4febc5bdf6f4c23ad1a8704fb1a26d85b833852255e433ae790575a7042fed23b6dfe46c68e253c1aafdedc5e526791c512bb0e13e3576483a2e9265d380a2ed7078e24ff89d6de08fe67421d41bdc8a278f7407c1f6adacefbcf93a17aa5f53b88422654c2a7ceed6661ad449957f472cfb3c30574ab96324620d127be99b53a0250f5c5c947ab67fb532a25b59344c13837970dfbaa553bafd5cfaf06ddb2e7482709c6e313d9ba5ef2a29f4dd16ddca87ecff3bd2efa2c0a991bccc7bb77ae5684488fe16b39fc9fc5b1d9b395440db609c791046481c753f80dfa5d4dc38412cff092dd58ab07afa52fe31b6590dac628b9f24f38ff0a206f7f827cb2886d91b1373c53d3a30fd2087251f091b29c9168f3ea91e251cd67efa65d1739a81a98c0b1d089407eded80742a28c5f9481e6144a9abce0d1ff0e9dec00cb1ef314dcaf4775af68c6ebe8c9c9c3094cdff7610cbb52b4e69a84671337087e9e5160b6fd802603f46ec3c3baedd6aa02b1b87108cd92c05a269556aaf64eed447caf49eb9d430aecb756e8d254dda53db22dc86f7983d0609090cc74e7e1cd892cd47779c325fa54a3ef0bce251596ffa2ce717ec0a0cece69732f71d00d2fb583b97ce871a27eee44aad6facf5ffbdb8f8c7d408f3696abc0a1a0aec85d448cd7659c6c9bf6f32497f1a3e6e85037c8415747b7d2f3e655270ee6417f5683fe426daf2790b393e95c8109df088ff0bce0d4e935de53ba25e214810b55aae9f92a82fa720835f8121bc6bbf8af85cccaed9a6c8d0907f61daa536710df80908a74176ae24a8409170fd3377185496ea11f236a773aa247c481346429f87cba2d5b3a65a5794b86ba629aff11ac4ccd99198e9b64816f60173607fd54a6ad47e0d754a819c593fc91f8472e00be38756b5357f66ea0a1e3d540becc86a8d1e857f61c0ccef68bc13043eaae7032fad4f000b7252cb23c55dae19653e8565898c5fd066c672c6b2dacf284d222c1b2e23f9780747e4205c6fdf63be0f5b8edd4aa9d4b2c9c4a92d16941b67d1a1c2230dcbd535655ed9d49b2155f9775fb7d852025e64c6876ba7549020358531be22423aec932e1391061af58b93e944ac789d294283a80dc299a373d3724e2adfef17eb00ccf1d136d1dd203c00f06cf6c035b09bdf3977f33e6572259ead92344f1d76701115cd04d916e93450b91031d5d835dda6d9b654d26d2e270d93eb5c0e1edfd029ebab055c9e196d797d1791c02b51eb033cd6f32a2522c2644ba41e450b1de73b98249460aab9eb3d32278b869f65ee234da73fc668e52a103a50f20de38958484c4bcf898d4c773934dd51890dc50f52c3b4c6b8ac2016968d98ee529990193efea73dd85361e934f2e72d67a233fa4e633ca1ce11ada072222f05b12f88ff23dda0838a06932d2ab5a802ab27753ab63779b07232e00d49a1813cf0e0a66bc82fe26ac4d98981af73f487481da277a531175898d326bf7f997809a0b0926ca80fdc09ce1a69e6e113a7e7a24014127a76b3af231f2ef06c22a1dfe3ff5337a9cf1f05ec9d41bb3877dd7df94332d721e94c051efa7f8aec7ca4e794c8af7e433991d00ddafc47f741c2a92ffe621d4f60897f9ee9a916b6ecd116f6eff6563404fbee119faf922c9b5fe7eb4bf7479a7e1127a3c816a9e29f4406af67c856f7c0a34d290ffb6cb037cfb540135a71b1c619961a20f1e9144968f67e84dc570bfaee8d23b338011fb176d3104817d29c22636f4c60502b0e82dae0e5f6315a1d88288ad6678b391f93f316a27b51550b454428375485e499ca827cdb4e8773c9884d9a8af9a103f17966e269c8b8894ab0cc607b03a2e774ba0b409d950b886a5b45ea569c1ab413a52ab6caabbdd5ecf6c601b1a6c0ec44620bc6dc0593f863a59fe9643399e3817d82cf3abfad6fc04c1159703217b94a1a4f7af57fd18e4d6777ab30459ca94028bde377c49bb8a7e1419082b91e60687f90a4d928f934046300227a803d269ebf25512e1fb5a0a71a8efcc3651ed49f6c2207589b9b77d0d922c0d733c3d3d72a021098bf0625e625513849dcad180bb0d649940cf1bad223809456df6b7f194ada687b4b43284bef10e43264675eb46fae54921739e942f89dcbbd87ec0a197a2ba9859f82dc61b1925cf06514bae2c1d6e73f5095693bd78aab8f2e56299a534b0d06eb073d2094331abbf25e940d5e3f751a56014d1ef2fc2e5b36c8c78f39d42a2c07b1794c50cc656b58a4ab0b0aea033c882b897142ed2ad2400a2530bda1a3051be351e54a0f0fd05e9fcf8961f7bfdceffa9bcbf2fec180cb3716df42bff39b07378f0a7709c9b910b8a76ede1aed1173e113696a6c470567fc706bb5939d9b98a27daafe4d1fb7b43cf72b7ebbd521c5a996fb8ba48455efe69c7a81a401ae702f4d8117b04be5cd8c7a3d16b9496a2c0266eff1d7ca6ed7a4a38682dd4b04aaad065de2c2d1cc6c6ddf544cfd0ae285880ff6052938b4e84c0352a045d326693846542727973c820207bce785eb073afe2d15e7cb2d58c84649e45f20e88d0ba3916782b50bce23b13c0fdbd321af61f54edbee4521ccf0922ae1787dd91d1f32f9410d805a2daba02ca69e7dbe7724a7c690dd4a9bf725ae883d3e716ac3f638a645c9071c648bf46ae762b490cf690857e75eb8eb637d7ff16ca87df52da80772140d41355f0dbc79e98f86cfc252d9a713a6b81d94818b5bf2887ae31c92e9ebe032fe8d710aab185c4190990333785a31e2dc41e5501861f6b58cab7f75d504f52d4a3f35a0750bb52ac0f44155ba18adca27e8a7611eb1db4b7489e498a3b92c14f23f3660750c00b46a24557ef331797cff01a36d7ed93ab5d3ba6a3dca8151c488bb386af7066ae7fc8fcf6267ad5c0775a6c7f1dacdc1aac04ecb36ffe4d95aba9b462b6ac021adf2638cc1a0cddfc5f3ccd27c28925026e7157fe644daad39d5399aed1544394f8662eacc6d0c15c47d12404738926b36c4e1ae66862f956dc5d3c38d216100331c018ae7923eb96d52b15f6f0e9997dad29624915478ba2904df349877f6d8ab462c472140c7791ac2ab191ffa50d961ce99a0fbecf3f23232077d224c7739a1915829b4e048750dee78751dab616d3d48dcc429e45590dc0d777a44434384a1abf8ead45fb6fd8696ccb8e1dd94b15fdb576ce29519b1b9217a1df74976f00ea23e1601905a4be847776ab3638605f148fb2d763c4de3e0d6a7216f614c92df23b3a8b7d7e551a62373cd1be9b2205fa1eff61efc0438646d24a635a562765d414374d2a4a0955757e75896d5b42b39a448edf88514d3e5066e57994a871e62f39a4de675f54294eddfe9e40b900a763498e7be79f79d29ad5e40fafd10d9ff8853cb2b17b89ef8ff2d6b4f53b0080a08219da18b19ce4ea61b00ffca78397fb069b44979609c805d518c765f417b0dffff88ad0f9eeb394ab27905b255b181f3ea086be981288737b7383c770eabd96b8106fec1fed808b10b7c5e4000772ab7adc41e5c1a26c1a3933d035bc8a13c2cfde539fd655a54e6b17968912fc0e53490e56048ec00d43f6ea9b91a805017eebd97c4b3f5c2722c3d61253194bf3ab8889584a35ab237ee0d03ff366314180f01fbbb1b63c7611f89daec1ce95bb3f7d9d25b93c8732ee977d3c4156f7a7effb0042a3cd37ef9c89c179a4957a9cd6b6ac485bbe443947dd6a160148bc2b274e59b10b39b10749510e14040766a944485f3415dffe00944f3d46eef7d361adaaa16f14bd42aeefd903c6b3d73714efd613d3046e39097670bb809ae9967b7978e354441ffc0bac2c65033ec02b8014270e9a5d3f75f69386ac1af7756170952eb3e599b585b3d01affa4a88d3a4d7be369e701e97833ecfe7b609b241c9c130d92e2e3d5598a0b6beb13468b190ccf20304361ee74fbc74d99d7b3701e6a5a5f60f8689d52bf3682126f75582e6e322c0d8a070dafb3019dae6a2208b6ec01061d848c03d1f157833b755e2af04212b422f953f0bc5e545c52ecb57719b0f60dd34fdfed48192fedd7e52b06f5914272c6d6e92dae2beaddff702a05e30defd7f4eefea04ff124f02bf7d93fc4c71ddcb6c86cab79a4845ef3bd1b26c47e9c14dfbfdfd0adf68f6ac868fa0a33b7901e003f6a61c7e68bd9f849fc9c447fe04ba06372ee35f444270a06daafc001ff3efb8926b47910128113138c7349d7a8bd7daba507fcd76f1d9d5dd549117886a2734505121e9eaf104b80d9d0286c4c2a2bdc3f1c8af8294c791a72eb0c89e2cd64119a63cb5a59acdfef18bb947fa9102a7a58089016901091b8f4cc25e01af21b48c79c269a2c76ede6b2aa94d161a80995883c13506ebf9766d80c2608077cf6668a30588e342f25683a627dec709f23a1f025fdfbd2b3cd6f9ac98baaa56c0649bd09257f91785639043a8db55f9fc672b2d914f79d4c33e1c7e69d7a952c7bbaec3fd7fc4e815ee338275b58060f996c654b989c224e7c8c2f888bd9aa22210ae9cac84f68c51e46a94c250a09059c1565db9b50f3bdb5eadde8b75ec90360a0b0ee7e2cd32c93a6e5bade49cc91b619cd5093b22a6e76c905da4955aabd994bf95af0a20ce5ac10b3ad0f6d41a26c54814746dfef85aca06f6f25380bd67048298c9facac15d4bc73227b2a3b7d15fa488dac0a3ee74e1f58d35480fc5a546cf9aa4722700b702d71fe8eaf4c3beb067ab508b98bbc3d49927faf2d2a5744d39f425ce358c1bcfd673a8fc63cfa41356621b89df3f1bf7b36846d838716a0ecc3de2df0b7803c58aa31892a82fd3e35bb87476ea8b2bc36342b2f4509d9069fea17a9e95977c8f36c5b77a20be6e24630dae2a7bfdef6e7f5585b1c2a4c63a8d131c7c7b46324c25f620199cbdf3ebcfbcd442b65c2ef522a440f6eb5f1daf929600737e39c42b4122fa25e182ed5875716ffcf30df5b73d88ac2e61ea10b703cbcba96d782758036dc73d2be762d06a4ae1dad0c6f2abf263c4a84898ba332317a3018c8544e5b9f13cdc76b056cc890fe38ab7ea58811cb5746c7ed3ebf535a04d37306559fc4092b032b24e44979103d7630dc29312bbd471d19e3976ba1988b10d724f14b9ad2b07d20f1906fa42c273b20f47d8125f44dc6f3fd6e4d56094d31e02f314470083f615c8fa1f3e254c49a888796cfba94ae59ce900b7ef1e4451b9545de86accc410869f83f08679261d54ba799ee3cf714e3b3eb1022ae5ec8237f2ac4265e898e4127c1eefdecb1487987ccc3b9fe62400d93675112be541e5f982d13ea1fe69b1f4949a030e65826c0a47c2e1b5eb008a9f2715ca04526e92c7275b78c55cdeb300621aed6936de5347ab85b8ceb1c8ff1164c422cc82a679a1cf30309f679ab7847ace5f9c2cf853b7c687a99f89f96f292dff58efa699a4e58ef5c90b5ae43b5c1964b3cd472e62bd3f3a3f831853cce52361c469150cc3d24043602a956c6b7afba6a13455c521fa4248cdddc59804dd5ea8b6ace85fc30d3f31edf2893658f4d99a74c5f69cf919486db4a7f684473310d7143d6721c8c87e96ef544b0461ba47ea220ffbdf10ba3adc000358848b989c8ba4d7149e2ac8211134e426c1fab22f8686fcf9f697826bc7943d706d828510d638361f615aca7b3214f84146300edc392304a96ce36918ef441e0ad1765559141362a50ba2fa7a26ed3dc6e06a444e17dd66f09deeac6e557b7780b3d81d03c383b825b69131a66f5f434eef3f6d9f443ad9c652d98672e37c3c1001945cf826a87aff8f6fede8fb5e5e219cb315e9806a73bae013aefc5424e6cc45ea309a3d4bc8368cc54d58704495b2ec6690d8179e4a5e07b7f6733e4cb4446893192ee18f1bd382860ddb2e04e6af24a3f4807f747b990183183eddbdae314386cb38d0c0b994950775c997dd2a3d63e756904468c239833d9082a15f8beaa195bdb3618a7e9a4616291c0a0ec4e1abd2e4474bd5dfa95f5195298a7c4143766b4f33c6c335394bbb0ea97ff849cad26107a6b405c73d217978287acb8c317996f4c1446f65a32c1bfdc5cce0dce3861a52ca5f2a99171232095a2420d8bb9f7c61c7b24cb602041d64136cc504b6756c49c03628cabd23cdcf262ade2b83024bed684d7754998739def4c59cde6463c2ac9390e53819373bdad5efd46ec9246b0d48fac2eef9588367053f1d510d2ead14c3213c953982dff5cceb36d7265f2aa6224ff16f6f005dcc390a1cc47ab769591aa39e88f4c3d278cfabcf21e588c8c396eeaa92f471750e2b46d6dc6f31f0c2d9a52f4c6e7b6d32b0c8ee824d613d5ded10d20be80113f3dd5fe108a1d50768a1240ef7a1346ada3e961557b0f06995e871eccc69cf70c3b6e7e215e65a9ab27756f9dce3352e56431bfdd3944eb10274a78aa776684e62eaa4b1e192d2179c2574ebd6bb78f0b37b7029c9733997ac64856a775f4bc7b0a4fcf1e50fea5640d11350c0161b705909de71e88e65304ed7d1338febcd036a9a40506006f3fa69f2c57cdf47913159655e78bcb59f876b14db636a7e40f3b2cf8df20565c704f6f5288a3dbab5c6f86ca3a1a8bfbb9b23ea00d84a0e1da3069b11407859dff685b5a4bfe6ba4d84988382fe4a5e30a28800baa822a059a8ab2ca0f937e12a4035555d2b31afb394fd2d35209539f61f26bbcd07193c4b63352b023e2e138ab6ac8b2a763c85f349bf0e93705fb2f9622c4e3204b1c5463db93a7e02e0f15c5565b958d32af5d3a6f67b7ff4888401b69a046deac271a15ebca5e5258013b25599264ed9b41cbd598b01b4b5d0ff763e065486a23820fab3ced6b4b5960d28e981a8207b19d18ecd74c9648038156697889726489b791a34d53fdfac12720f7a906d616e40acd039ba15a9332d19662d64bd6e51da5c95a30298fd627f298e69b2260d7372f1daab5bf923bde39eaf5bf2538087c76815c1c846346037e85a703774d96217ba96a71ba593253a557b46e591f8a8663920662340dfa41f5616f4776cfeb81dee65d77a9cf2f142f9af0c3feda057f9f06bce88a9925cd7c48653aaceeefbf528abc31cef538a4fb063bde4109df5a21d56ae08d26b428891c6cc85e5a445facd5e94bc063caaa2c3024614959d1ecd22443b99c08b7bb892b82bd1d0920d7e6107a78a4417c99fd249ec575f88bfb1d0ccfa4f0bf09bbad4bb460719101b60dbe07ee1fab11182c2b2d7431778fad220282c9e2d6a6bdbda0c4e4da1eacf64f868f58cd0f064eaceaee06923e60e7a006905a69a510f36b356181aa699b1f08bc8115f48b061f89e0611e8a478bc80e0b34055b43e0786751aba99e6700fc9144eb87ed686b244009950704fa9d6144c619c938552b5138a53c7cdca57827a2af4946680162bb7d4f8903088546b42130837adc9fe0af440e6e5b40ecfdb3e803c74605da01422067308c75260c4fec1b117cbc9145cf03df9bac42c51e4edd0640b1679cc48593a4754514038d4649dcf563c447c3df6e29a44ae5bf1ad77d01391dfdc30e3773cd4ae2193d28668905eb7868ef977c3e2ca0478af9abfa18c3930b46551b835581fca5bbb02cab2316f915ad653aa3d6299e323ea320635be1679b8e28e1fe5040d97fae26501ee7388c294f9cea1bf502528483913934100e0ad9fd0fb380d31deba13db9f2e26038793d68a76de466dabe45e93ae6a3d23abea13bae49da0ed82596105661814328e685a64e971b9f7dead6ecc4f6762934967af35547a3449922af1bfdea45ee8bb9f30e639b7c19da255a164e556085642a8deb3a37461cdf005c1a3fd16e631a2edca63ee1760b4ce7737ebdee6a07fcc3052dc42cbb395ff5e4121c5d232e7cccbeeea2767d5fe86cac105b4f895cf3c16911cbdb2c4ce2203814c40890a4a5e2e3a5e37a5024edf37261f6bc6c8e0e08920bd539d5742b8806c07ad2d73902db9e3fa89a56eed18aa5413e21db548b9f1a3c4e280075be95fe3a4ec16d8fe853ac4b47d8f20dba2ac1b3797068f88a9e2d5ebb48e3ca513002a995e60419f77d0b872b3967a8337b7c4b2c06ae3d7ed0e67b687274553ba8a44c253e3758acd5a642fcd2a7c62bd06ef6eea410d3516c571af154eff5b4c4acf48ceff4eb2bb6cb7c81d0767b012e8a36be4084d3d4c91ba98abd302dafb02987621ef398f65a80545c50cb7455805bad02dbffc01755d2499dd0fc1e0c32460cba6946005da8d4efa8a8e91686b1a5b74174231d5fb16298c59e9abf775e2cc699f26791d1ff9e861c9fdea39b10d1c19aca67ef9d48d6f51bd5a7b01b324074182d414d3ca684745ad05f69cbcaff9bd2dbb798c7b0049515086ca33a906069a68eb0b8da742d8070c105d721afe30e0dcc9d13157521704fc99136bf32c5cb7b3d388b8bc741842bfbc0cd0665d1d7cbf2a11bbda20c98ae1c176c5bf1ac55d0ffe344c0988e3c557098d72534bf44aeed3b3000404c5d4121825cf95a49aa1304d17e38a3a897fe71f47635e36603a7a25f6cf3899c88eef273a5cc85e1824fd5455a9246a9904548434db4c8091f3f83e292e689ad53581a05c217d9ede03e9102c047a3b3bf4c632dbae5bc7bee88e7ceef68f00c0b7216be5f32755c1fd35a6304bac2144648e16d586b18f3937018ae6a82ac9ddad183d5dce646efc975a80ddc7d5c9251bee61c67cec63fdc0a492e2454764293907142eea617db7c89fa28f4de1f5e70f514a1d51fea67f26e2ed0024818d97dc2f2cd3703aa886f6e0b8d34986f66d4661d02a415da085274391cf3db1b096655ea50e866e4581976e1cc60467b0b9d1aaaf53dd99087b23124cf794e83f26f148ed386ca4ec2c55ba7933baf213b04cc4f0b3cf6f3795218de5881aa7baccf62a782a9ac5401184ad63589010ce6e32348570bd3c67bc7781f3f2c553ba625bd6da65b32ce8f47995d048b3b9ead1145ea3dfd9620cdf8ba1ad902f5e5e6cced041d4757751744060a0047a672c60920d337d979b9afc4b704e2ce5d192d4349915e24ff5306ca412279ddca6021af3e564c1b8c839a9ca1edc3b941e3c9b094687a945351ab69deeb4439e63e1d93af5b5ed46e6f62826cd3ae5bf20a703abdfea951aa11b92edf5581ba21c5091a32cbdc829d5c748cc06a254fd064cc5748fe38dbcb055b0a475c8310c4fecc97b135e8ce27aa0b920f8f48346e5abf6df2634cb677a3a4e0ec9160d3ba09929d5ac4cf49a5a881321b0542766f58e76cfc421e7ddb1bb3568aabe6616017c1690300ddce2f855e91e9b96f8659175e0ee54ac131e1c1dbf8a606eaae3cfb368404ad11dc97ff04c538143ae99fb6206bdeed27236d3ba32633b2469a0586c95dcd7776f72d05f39e77a80e7a167c06e0306b6c72681ec601563fd6526e663420e0118fedd657135c5289dcbc4f53833439adb04ad66768925761e6fedc99842e2a81f511e4d26f33990878676d282f1a572cfa9e1d477db7f62da417935e37cae24155571773152f5343576ded85cec54eeef55763f17b57079178c462f1d9b660019adce6c70b113aed89fd5de16fa23159ff488ca8a277c2fb303ddff603c3284d3b2d029d5398bfb903983db6e8837eea284568d3bb7202eb8b1f89ddb77d0ed38b2b57075427f973ce4f6cb4427fc96d62a06a440e6bfd7da940aefff6d5d37b6d0310e28222a50766b5a842104d26370a60316e3796c899ac7833819e6d04efc97fc1c86b62c1267e62ac0026bcc692ae54ada9fa448f3e579f77fe79849c3c95e3352f12fe73bc07a9975d19fe78e02c1dcc845c875e33d5912b174947e6193b42df70eaf6fe3a9748f88c051a26cb543a4d3073ec2cd9264ad7a78bbbeecc3310f573cc0183ea83140e4d7a84ab6ce9d97996dfd4e7a4b2295cfd3d449fa0d83818ef09b10dfbd3c61e5acc768dc61f74e455ad4aaada48efb2b51d144265c70e05a9353e8f213ec21f307c12263f50f6527d6cb1db036bf7aea67525c7f4b5bc5f5e297419613544a0046bd5ab1da0463c37936a779ae18023f8037d9fdde7003e638aacc238eced535daa2f14bc2df9219ce142f09c926139ff7a56a34a104c877ea9292cfdd01e22e298856e9ae17ffbe82a26279543b2524d01420cb03fc8585cdf78906d877039f8eae3ea8dc3696c4c5fcd72f14478497a861ef181e30fe489242f68362465f8a177830b1e9e4d89ade520dfde7b8b87efa613ae4a454a57e7e4ea161ed6eabbb6564e2869d21493439e46a6d1c1f53dda312ab50c0a3cbf90a0928d2b42cf9e498b6262a2bf6ba3649e40aa6c7d846add132d455c912846d91a73737cb1097aa1f7ac67c218cc139bfe8f51506eae842688dd56059fcad56e3115d9a49351182c66c0fc0631f588895d697c76be1da10e16a8a292dc52bf9406084ac66e8904f244e3075d5a92e48b00c9a65c664539da4329db5c659acb57befb903782504e4b42e4a9d1700b6423ca45aef85dba102cfdea206cee42c1cb9ae15ce755e1fbd611b15822f99922db7d9916fa7e3860b8b8d9c9685a754669a527e538da004c1e2bfa971121c07ca16862d12fd0fb535fa60fd485b7af4ecaf122ac580fa819ed6b3e4cf979c0960aa4ad3c3bb3d4b62cd373c6454e00ee6e2dbcc7a4874dcb6890dd964a6ef5ace9406f549b0d6e8445044cb97ee2ec03ea1dc2017ecdd7238841b5108ac8d5778799a8398aa8d8a7f0ae27e4a2ab7564fedfeaf682b12595a8ba043f12f4489494a100dd0fc4925305dfa0edac5961a0ab7576665118551f5f409dc8edca0edcf68510cb121811a96179c6c80549d286c0c43ccbd962c583eebe1f7f6d5d880f505f14298d39abaedbc4dd34f2fdee9dfb989360be87d17c4a3ba86458b39b19345a07c5ce19bb070bbf7cd985915e67e72db5306d2431a4b48a2c299c3bde6d869c6e81c739169d4789580c482a9afa76f369d17660e414414e82d3dd575eef22cca293279982282f0b990337cd00eb1bf2856d87193f112a05dfa9a19ccada1c7c285ce3b91ced1f6f8a81ff96da9bfb8d74850431d82ac3e2c195220f470ef38659d17f330ed7e565fad346929c9b2364f269f384ea7fccdc1116cf389a240512b7e6c6923351a19562f775632ee539f611bc966583717dce2b0413c91985708108750a80284c50f844c385d3a6ee8ad3399090967017aa765d7a4e19456e1ce040e4d9cfbc2e175bdc6c25f400759c92068d7061e749675417cce7e08b85e2dfd90a5ee2763435405759f1e1ba6d726bd9f35ea4ac9e5599b4ccf22f16ab5a760673308a81b9e2f2dbb49c12806f11e5eb85c41eee08ad8baed8bad9476b8a4c1066ac1ee6a7331b49f625aca7e8afbe2c6ea2af56d7e71fba3a67bd31e85b10437ee6848662ea89a3c2cf509c0850fb66853da4265ed275fbc100558b6ad2f72881cc9d1980753ecda35b5005e7a93a3165bf671e581cb7ae9894130f8fe2813574eebb1534ecf5a49f808bb51aa00635492bf10cb49eba9378a786c0756bb523c031d974dedbcdac688231316952c48f39b519bd88806bbb2c1d3d9a7e16dd89b4a508fac16ff2d7cdebd1d4a182c5cbe56642f3683a64a15a7df8d52c0154dd9a6cc457d6eda552097d31fef84614e2dc6cd6be5fab25b7e4833e5f1185f5ef6d72f10344e57c317707e20156decbeb98f8ee64c944a816ca50cf834d5251bac4a09639085148238e94adfdb6e0bda454e6213ab941eabbc0133832404fbb1a9abb5e063f734f65d8246b9006d774b194f317d54faa3ae5d2d2b849d1b8c928c759f9ff3a4fd4d239e9b709ea1dca8d602d480493ac3c2e544619cfbbac52856f05d4d4c1f95a05f5db31422955b5b8ee678fd5b53f437451e2ca1c49fedee00b3fbce9d1c947f09a213bef4e591aab9629c046d8fb2f25b524cebc4ffc33a316157b2b0ba4a9f06d35f208bb6e0111af651e7a5db9dc067888a863c606d95962bab08e8b6c3f967ba80b12207e22ff6d8af0a23489ac09ed56e9e06a35228011f81d793fa4d55e88d90a834671e282e4db66d7ac7ced28b7fa9cd7a8126602c6189d803d0fdd9a2839d306461e31da976121c7ea108e468fd5dd0ea024ab4f22d90c696c6f08c158d2f65ca7e22fc171be94dae24f96dd988f2b267527e0d40839679e79c2e92ba8c4548b15694d585d40f131ba00b5c85a43f1c7c443fc1b08cad8bbfdd374505a3310992db578c61eb6c35a7ba4b070a0e821e5116f84d6a208988a045d6cd10a08c0d419e18ec42d2526fe3cc49db75c556ecf8336003b553e585935acc533cc06e45b061cf1c688d5d5935d06aa7807593fbc89b273e383261f51d00b565d99c266a6a8e71f0cf503b775b936c2e93ae5d2e5c60074785d722518a33318deeca0741d48f4e23b7af76b09f629db1647c9693fc21304c2a551b9847680015f64da7840a08211961e6180ae9cf601fa0fb99581ec0c4079f6e0eb81c9ffc19aeb005272e61daba67444a83f89aed3810731993803ee916de2285e22473f758a8003f81454619f8e5b41592e0aa42563b0027011bb045c6423be106def7b2900cf38dc004ea6ebab19300d0348408de26fe635304280e1d3846ae12e9a66cc251a9974447c56e7494927387d1e14c4c70cf00edbae615b79c4ad4f3e56c44f1d0e536ea0b2fbb71cc3ba366bfa62428030edccb287999b83da2ef503157c1c10b44f9e1f1b20fa4b1f5d027f0118240ab5497ac26decb0f15761a9e873b9820242763a992fb40dc6c2265ac3f8dcf57eec1d587b05e6b61ffbb6490925c7d3aff5a1152021c7f68903763ae1319a852e73e7a143433f3767ae22538da54b34359136bd4230ecb781382b9a4e5c4fe92592f381330614942527c6dceb282b33b3070f0cae7a60137fca986274fa37524b4ff34245fe8c2498a96f00c3668c88a353f3d63cf1dafe4ade6586feeb96d33e8f16264be5007f8367a29f59a0031310d97aaa68d7c56ddbc0de370d9940eaec02d0764c2b317ef8832050f02690d7d84047ae67ecd5fd5e7acc79bf7f3a80863598d690ce5002c3df7466bc14ccae51828a8539ed0f39370fd577f3dbb733120e2f7042a6f66ae8b057e9262b73aa0179d73fe2dd51aabde958124965b960619c2ffd22e2680dd7b2793b73a035fd04633ac5184f5c93d4d91b1012daeaa9bce6111a189c3682a555a1046d6a77040d411d8d946cdc521e08d00f6917dd7eedbc3b761a802fab83a58f5160028ab321471df5d24d7b0e554d22c96405bce4ee5432520583b92a1e2c7e5963bdd43460b851d0cb8ea19a9a3e5dcf6084c737391f6ab21e1feca8cc0a68240b79b6bb1cb9e287de416d5b32a8fb8c1719ad37aa72c1915bd19d67e79c95c41ca611585cfc94ab9b38f95b48162fd23b02206649b90fcbdd0f8457ae8bd9bb6e102fe3c5cbddbb2198fe30e702fc1fa8eaaa1250a0bb2e49513590340bd40ebed0ddafc5f08f21fdaffde7c2d5c3adabee343c960a94e941d97cc5cadaad37708a51dd59128bf103860cfa6580dd9e05445a958a38a783e271c368862cc95c453c25dcdc228ffbbf5b215806b3f112262e92addee89a57d6b1e0580bb363598d05cb7ba906eca2098f1b42dac7b6f7b727c41e30a88adea0881e341f77c31735e51e2a4c8d1c989e6a2590d8f9db503d5de210fa7ab6512fa0ba10ef235e7b4d59ed3b58ec20389504b615012d496bb61e6dfe051b18c37d595f3eb05dd39930eb287c5afeec0ab72b53148a2e50734262902b9ff0d9640f045074a4088027eb758049b1b4ecd31bed0e478824121490126adcaf79340cb2d58c118b6bface419893631a871cef67e7f714780e1409544f2bc07f058ddef00993003629f32e9b8c7657f8a75365b37ec0a3f4cf6e06fa1f31a8930cbc0b843277a14239a541ccc90d7f54423f70a45f03e5158f702bd7960e9dde6ba6b4c6478340713ea317639f7e26aa7c592d7d060a513605d603c9ae6f388163c684854964f59615f52560ed04f8849b1ab179ba31bcf720db1430714b78c6d361307d3eab99e50630c8a1b7503fbf2f6bb95ef1df71bc67dcecb4296563c8f004697cd14732febc0d980f0a873c87d60a26b6785d59a4403903260efb71af8ec184dcbe52cb30eb6ab5443f50f270c742e3b5a7d039ac660658c5a882b22b7e45013b3a768f5407627ccebc9345397e0914944861891c15b49a11ddde76a6d0d9ae6a086f9568e9419907a86d2d994f7287f14edcb6741c3a1c526d7c8c31bd0b23da3c2c76755108685e29d1605abc229495acf80f183f64046d8aa0d0d4f7516b7431a360078eeb0e5913a3c9011b27fc8b52a757e33ed6c7d3a4795e868511b7ddb25e695135277f866ff73f3ec71d5ce6290987ed2f9b391803bb2c0f3d8742b191adc0e5a71d09932e892261e19f0bc01d0ff565fd3efd7b39d83a3543d160c3f84857844f255b3d05dcf951fa4898dd5c0dcae66b87c43dfbdc25a0372f1ae36e944a99a3fbf74782be467af5d2c302f2f9931ce4b649d05374a6f86634a47bf74ae03adb1eba511967926835c745c460e2e5747d38cbed03d0ac5a2a8bd923b63c577f139bb105e244abd41bdc6ea370801c17f45396d3183252d35ca00cc28dde7bf759a3a159b11fa545b7960c5a8310d13f2760af495d6ff0dbf5858d93fd3f2314820bb4408dd947a14881c255e05f169a45825f97678837ed1196bb962df01a26fd99e5a95a2906f928a43c44f294db90918e017724e5f8ee8141a84c5f386045c1715db25560d88303c603530f3fc8e356f50c9a90d636145e72ecee5af29bc9c008b6c02cfe8d49ea0578d2f75d47a7d45bc7dde29eb14b4298dabba618b7ebc8d1b22c98b7e20da441b3cd82e85ca8b90a9fe2d90f71d11fd8494cb4b7971223ec6883b509a2472dee40e8b20e26fa719fe8979673a4e13d7cc886d10e107e4ef8db897ee71e7eb463e711a9ecdc3de53488ab23e0fe70e56eaa650fd651e83543bb4cf6db77d37ba6955e3a91d533fa15337c8d4518e291e30d1239236b1e8ca052014d38ad0e0b495f0f4127386c3aee8ac4f143ac96e8494878433695eb0d51a1c0bfedcfcbcb4544c45eb4b385660d7303f3d8f055eac452ec8deccc0cda95d0093f12b4149f399b88d67ee8e969c9bf7feb21e8415c58e377eb4e595faa159809f14aa593c27ec402b87747c004786d95d8451ca47f35269a69d6f6cdc439d040ecce2c537a3619396da47eaeb392a78b24f538d99902e6a913bdde92321c5532b60e8303cafff42950f7253ec65d64030ee586aa046ee8c863865ee5a966a526df627bc66a440d8dbfe0a49120042cc7c64b3ba58f39091c3ce8fc1ca882ad0936d6d7ba83874f0bb196751a50715f3ec6eb4ede4d2a08dc660504827878f8ceca42c40ffcddfaeb24c880f9838ecdb032c53222ded26ca6fb7d228d68e46410d1d5e6b7b1339793e74db755f3f576240be33dff09728d4659003ff5f21142dcfb025afdf9784138b6d96d7c0a64d9a1644c5428a365f7b4a1a09f60ea1d0e810a4ed7e01ce7a1d69505cf1247988d0c471650191cd0eda3838b682e6b1d3adc5dd9f1fa4c134a4f7347d5285c3fdb2903d5e9bbe1b034d64e60b18eb914b0ddbce4b3e4df30723b218335f4b5b58f719c8ccb3da035c3931323995fe3f8d794e71a79b8b39054dd63b9949dd16fdb642dc4c6a2f9de9b17ef0c62db2b00f10c8c05c3e73548e45e4a88c199cc9cdc980d65d99acf5a6046d6ba147d38acd67b7c1a533daef45a8338719670412c2c449aca3c7c19f9a17991c028407e9e9deda0e26e178ad4e3845cf4f5cd154a001079ae82d290d03f179426f209ee72598e23c0ad750f1bf5fd1d7fad4545dac5055348e7ade6391d9b0559d3b621bd7ae404d869951ceb356665e2452056a79b08d76f2c056ace76be2da266e3f1e61f1cbab999f6d66ef01154ba86365fa61a038374c8076e39575a00de2f6258165727e38195c3b2aa9ac1727a06e77f8fc661875e676b6b6ded014e489217d28841cfdc5a8965d22727adddc9531f26cc69f6cc92a45e33dcb2cbfda623a82696455146135f52c83fdef0a8cdad36eaf7c3c84b9e3804f5cce0aab44b31b3efe5560d92ac94054f5f84c270529bbeea44ce4734b4e843339c853dcade5937f2ef8f3defb7b07faf36d09c5d67f1eb116f6ed52e1bf89e103be4535eca5532f8e91fbf4fcc1da5c3fe80019c09ab8bb829987ec7e5290aa7acd9d15793c93ab0772079e250899aae51d18854904b3acf29a7ea5e36e1049a4d065a7ec5432a4740e3737d6ba976d9383eba57897d2d983cce4aa1a5953f4bc2dc98672d9926d359e2abcd4e8c29b75a66a5b01fb3b30d8da32d74f16c1641598e0f7baca9e7c14a168bbf960eef26249f050246ab3fae727ee825a22c99ad5ec9e5a3a51cd863194a37b4d68d361dca2c182dbf173f52007d2704570f8e6a640ccf8a2033fc3c619682427f036b9decd7d138fc8ca8e44293b3bf0d5942901005b08c7459d95212f023d22cdf82153211d77dcd65d5f2b733ac7cf2879945cfdf150ea4998c6c9a8b3f196608ae8c70cc963067aea805dc73f3c3311d859e2b5df3a9eb6b3bc100823507b9770750d197ebbee2b41f561192001019bf5d4ca50ea471bdd822528590e78b58888bcaeb9df15ca163881f6a3eaadf426fe19c14645ab63868632e3da002ca1f70c827d1f15683bcd70674218cb401a5974f806e2c40e1a7da79bcaa327d4ee7282ef3d973e0ac009eb3855396c59bae37aa43db530556615e59304bc2c60226228edf02029b4e3db9dcad3132c1386d1df08f4bfef7442e1fadc99856534f09a6d23e728dbb21085c5f0f8d9f7413dc83ea416e7934350f08405c4ff4fcea7f1e5e1a0b390416cae86a3b7e73ad91b5971b73d7401def9cd9d3d7034abe6739c99a03b6ec464396055a843306441c45b46c334fbf040b6c086be260fa03d232568d9b17fe39d0a4dacd4a0eeb51c2e735419306bf1ce4a75300d24b9fb0fceb4154f1c922d2f5bd3563ab9b59ce301850e289eae12b4868a35db4661e7dfafc2ededee13d500528d9b539404dcbda376975bfe1884534b5234004900961468c20014dc6a68b3a431b3252d6f6f98f3a7ce65874780891808d007fbb277cf5b31f54ceb6a3bb8e1faa67d931e8221aa853f4378a5c11503b71419a4ac7b5896be87e7c2cf2a82492233005d4041605c468f53ea824d2452acf67c39e31a284c5729838dd0c0518e5af595df8b81f2539a9ae90e1e0573c4e8fa395d4432b5e8667ac942c43f6ebfdb463814d4bf726d4b26b60b2c326566956c9ba1032b9055cc84d9c64f08d73f53366232bbe3ae8a07c19ce0611125c1ea51ff7dedc9e7ce83ab754cd8d89711e52b4e84e4bbd2ec3db84abe2acbe24b8c566c12f84c45122db47fad3db39961945f5b35e336334882ab8495ffc24e567f4adbcc5917376268ec1e44d33e6420018c7ad8d5fbccac7a7779d952648b7abfe6f1571e1e713ed373ea74c2c67bbd061b93c17fbdce70012f95d01c0bd14af3c298674335ca238aecc55144c72412c4d8e3845b094a03728c9056a0b36c955cf2e4316220186c1c6e685907bcaf6c022ed5b52cb842b096273ef3a08040861870c82a52b0383b5f94c6a5a2e1d58aa1f10ecb1764827622c6cba2e59dec904c73368c10320b6c2443101c0bfa87ad7fe9510dd747084a9aa79a449c2eae9af9e49ccca3790b65ce14fed5458b8efe16e9df2c5a6dadde20d5128a0c513fb4764f4068dc16ca2e23b9e6400b20259ca45ee27efa130dc36d5ee773f936d7eba17443590f875c515d8415cb41608cf9c9357e2822277afa720ed2e748376a7290c4ff47a61f37551d777466d390bb734e2a7b0b35c1dfbae181c4c59b5c9d161876fec180bca7871fbc7402958ea73b4000c9f47023053e79ac83d50294409f7460eb4b8dabdbb3a41d7eeac1808c5884f8c612e5df09df0b5a780693891ce601b5fadb85e9790b890a37cd8d674f903b33f0a52db54fb35797231aacbf99225cd8269b7f86fc03d330d2def5e614cefa0291a18d08c8bb744d8acb62eaabd56aef5c5e30fab73ca742123cfdf19aab2ef85e023642be5a50c66c153414ee7d1a926c93ee089887ff8a3c7bdec1b60ead7c3321a8b77f1b367529bcdbc7ed408c30064045358645ef036ca652a589e1bc4f3b693bd0d37eaaa0728e89fb926eac112441c40a44ac1ffa2988f8f0b2804dc116119744f94393e1ec38168021057b664d53860986c7fe34a0a0e918ba83ac3c5b39719118a6357f7053a4b863c9f9a8a536e66e77b516aa3cdcb2813c57d88b61aaf0952f53f5ed185ac94bc9afd5a12a19f5ed728d482b23543637c76e0090b300237f8b727b913e3e758e0e17cdd5088d2ebc23dab23da21dd9d9e7308a77e829bde1ee7ef839be81d8191ab5ada71d8ec529b81c346bfad54df0d5114c11f29428597e9eb9ad2986ca28c9f8dc872764708e329ffe1f64810e8fea648f20190611f6a4513673994478305162193960c8f2e63749dcbaa6e8c5754a7496a55234f6cf8b34d2d2625bf27663da4832c93314ed81444e28a42ad4d61ff0a01b9f7c3f4ab3c2f54779f6e34ce198458340e6b686b3e6671427c7153547e4e42e8bc1d4dc0a73fd050774024e987a01ed2a9f226fcb96d934df8966b2684a9603784dfc50c6a7989654c7760b55a98685b582087ae2c3efcc1bdb315d52abc5c66469cd7c54e56c60bf490cbdd89796bdda40c62601d636645ab19c222220e900526bdc1b59203d8feb85fef8bb3ce1d20b39ffb34407da98a37e5db66e81b0e7bd0cdb1d007031de5f7f5c0f6a7f1136fbd392af7a80db90246512c31297f24812c9da620dee5042355eb5183075e37b016fbf291038790f15003c48f7fca297d84dbcb393215eff041b30389f4f312b76a9ecd87375b5318950eb24ff10081daf2c55ea32a84ae26db591e6ad7e7c833b1beb313e3aac5bdbbc587cab4f8c1068131868a92711bc8bf45ae62f60dc8bd6daad071d5550a7de59339ef40a2c9ea032617d169dd28a2ffcb5d07c5cb6c038f4ae72fd0f789d8761b445725f3e904c23f65b5d475c77b241487adffad54d3275d55adb0e938cae344c604ca9083d6a0d6d9191d383d813eb35a496874d4d1022b164e7ed2129199cada1012057797f9bcde3247584a37509716b6652bfb235bb3ec4ec4994c5a93531200db582d9a32841805717f3d6bca10ff1bea99c23ce5bad958b961462d269c20d1444360470daebbc2a6f34a3552f3d1c4b8448822640bfcaf39691f39edd985872b59848b3140385336b70f4b57aead20f0a627ce37321af7f650bc2956d2729de7f9f3ce0178deba87a8d059033d77b79289359fb7503beb760aba431a79a080be90e8c399587fd9e15e8ab29617156e7cbcc6bb05c238f33bc8bb48b33f38b6f0fd135a82ad63f570384c9b29dda8e79e857e59217848f2412c526bcec18bbdbc4e71253695351cadaba44086f3cad23c31f252a2b32fc092c5f7226fc95559ecedd927f3e5d170828aa8677e4fd025b33af281fe358059d44915fc31e94e5735f32f7c5f283870c03f0da039b1d02e645b542c33497c5e5c699efa500b160413eefcc362760dc6c72c02776158538f5fc0f6e3b4b5bf2aa49eba5c10c8aa55a8dfd4a31ab71c8fc07375a04e6c9fbf14d86603889a136e1bb75a6df53f6fcaa364df42b7e6bd0239b0eb3c4d959ab3a2906c38fa4bba219660671444ab300bc07981ac2d5ef40d1cadef3618ea3e50f6f5f214c31e14d85f5a6b8e7ae7a2fad4df34d48f35c086e983504b16eeae0ed98f912b80f25546f1e79cde7ca1324a0984784d9b5fe078d35dd99052a5d46681d117b3ca03090b379a3b827a00efd6f0e808e7eca900d2d9ba7769082011284a241570175a70ee9f12873123587ec2c41faf9e6a72d1bdc264f1a3f7aa0ef43567aecdc49fee356e64cd13339b7c7e06e3fba8286e59f6660b0d303fee847210e5035a435d937f6a62771e5e8841aedca6b7a3f1ffcd740e9b2f034ed9b1df0d8c27043595abc1e5c1f455038d31418b19fd8038693295fee77e15271953dbaa2541406277875976c8d3d65abd835bf62d91c64223545b92638c2067c216ac953e3bf62b246b97f1334b5710aee0cc0b68939a40550deab840b10b1af702d1ca9e2732af8bdc24b0a0e76f72ac3c7c4bbed0d463573913e1a0783ea16eeac616c1618f5baecb7c8b7938741ab7c302ab1a5f2a66c0ae6fb9f0a085d7a1137e640e2dcb7256761c95a4627b9c5ade7e3ab4cbddbacbc26b55dc0ac10d030ced73dd736f1b85c0a0260bc22eafe9c4a7e830366e7082217d608d47bae8f91de77d6e9114ef141782ec595ad811d6a04d5b597e9f320b518e857aecaa903426e39483cd9bc4bf7dc639648d6d087c5e6bac56e4c1dccb0518a5e84dde34fbbd40f8b1827cd1185de1f0276cd91da88cb375cb2b792245ce2d68bc8968f49b7b83d3311266d0daf174d4eec9b841d1d6e5de6dfa7fcac4f2435a5345c5119978529438468a24bbebfe34c2db08a3cdeb949960d30bd72e5977070e775eb0678e7d78b37842fcbc90659725783665ee5b2244c0039a9344a32da5f76a4076afdc14b0a8d3f0c5a47602395f38570cf9b761e6f5242b9f4314d99a8af9913f48095e254c2d1ed1f6dbcd286599240b5cb8f6539083b6f5d812752e1bbb5b3e691afd7c91ccbfb729a85c3a4efe90025e17e7f8b962321c54473f7e4e076a8f96ba22180600234df19d69833d4a6337552b765a941158b849447e91cfe0fcc686f8058eead81a9f434be23c87ad9c68fe038dc74a48d8191091d9d729f1193c275afe2e6ce773d0f91c77167e4692eb3046fbb1698c6d749540fc3e7a85db88f7c831a5a85c6b76e389c6649e8518684704b375620ab2f7e6084c30a1853a4b3bc45b1b47c414e7cff1f7f66dc22ee555ccc5d62e42627525b970ce7ba1659f5f8f422bcb9c4eefaf4831431d924b6b3032f3b10a911dcd82a3dc0f993baa556e95dfeb6b3985fc39adea74def64fd5a7372f333d427d79cf7b483c842e8839f29ee37600f4694914e377f7264a547f59b8b4085fec7adf6d52af9320807024b3fe642ce459d6fdce4ed160d04e31999f3fba96f308eb0f013f6932f0fdb8c639c3e197dc3fcd18430e22fa498dc9cc29fe4193889e89baa92caa2664a8711b093a80504117e7f84ca1211d5de321968bfc65ecacd2be35e2a46af93d8d3b6d286d9692a0eb500cbb4e46526830e75edbd5bf18327ced75d434e42306726f219e60fa17fa09134fd1812239764ee2dcf6907f5f71516e7c0decd6bbd8c11723af50ae856860538000f1e0e79f3513283e2e301ea1ffac336d9b19aed0c9c02fbc5ebc1e82a7bc3fda18c6e4615c55e684bd072f33980ca673b189c0165aea1922f683ae6a122504852e4abca861b4762b010dbb694d99022287763630f11aefb94cde65c12a954422e1a277369a739b49d56b50cee1f7ff3ef0f82dc89ad236c8eed42a2dea39b150ec417f6a37b5aacb6f7727cbb184f18d0acbadffd4206347d555b5830543a7b6de503262a9852fbebaa0533f2fd9317b73af45c0114a7525ad2b3213941a244bbe56ac50afc1004b669371ce49101343e932dd1faaf3b5dbd7765151864c778d8c67d075d75abf48761db06c1763ca53aada16fde3625124ca33fdfe4d1677c6ada60fe48660303eabc27b09e96ecab026e145cedc5cff06c8a4736c76458a2dfa76a5cebf18650bf192bbcb29fd03b28c0b31aaff0d4f17c6621760914e3f12924f4278344f463314258eae5829e55862b07812531e937ff9c2ae25493e5ad74229ec5e1f9df5ea24eaa712a9e55fabc350666820c5b2d9a8c0bf5323bd1012355c967df6604df689d7b5887575ef4021cf732a2188b3881c3987616f80e15350091431a81a84a62c163929eb368e95d5fed4e8979a8b533d37ed097193067953434d74edd6050c5685a0cdd7f7453a6d05fb804b1d78fdd4df4cb92cfd2f7efcca3f34300fb642f9fc82e19bbbee02f27dec6a5bcefbcdfcf81bbe22cb81e4837e5d2e105058d6b0b05fedfe01eb848bba83f5a9e1fe0e87815028226fb1b5e9c1c2343987b73c0661d9ed563e9997b71fcc37b3d75397c22c5824e3c8d692c5204daef6b9108391dbb775d624c1c9023bfff4ee8b7ed66af0942452d58f2260b7b4a4c4628934542bcf9eb988dbb3424ab70de5438fcf3c05871436767f619d03cdd9babdef44c43285c1b967a0d152a6174df7ff3806a87acf4c604b2743386d949ee37e7d755b1ff0eec9c56470d0e11716ee1f4cdeced39ce8acc1efe1cec0f37863b81da5a6e1de4e91d3bd52bd45ccaced0fd34bdffcc709d96ecf1c928cc9da000d5fedce3d3b05c0e0eded4e33d744b78ffd88c93962371d175684c13d1ee2548e6dd0ad5f0643741605f862adefa1dca214f11ed6c428457c0a0290988a3298867bf4221b0562a8ef48c624bfe17186750c4cc3e57150d65155a16a0f829d28c21231cc7d95480e8e2b28921199de7aa74d098d51f8a695c8367fb661742c13edfd84d6454c3b9f9bc0f9e6bfdfe3785c6d19f9b674e1a47d74f8862e933fd1ce4cd117fece93cd6d8a819e6a052a5d5c4ddb986d826976f7d0732696d5cfb406bf4150986c8385464f319d8632779b5a920ee1c69388943add925ee4be586eac71ba22ffad21b0921dfc08053de8d933fb31df8eaea9f3bab3358042e2404923acc05045b698a19ed7e7db22ed0c26115be94685fa2549ca7fd8bcfd3ced46490b32e6f447feeeae12639cb6091c646beaadb05a71c9d13de20225b342f0254f3dcc2fbc6e1126698e0d935b8a8a29a13e02f2e9d9d9368d0a0a223293d23a3ba8076915600ae5d2122e882febc68e76918b7af95343e674c0a0d5df8ea33ef2e97a2f6f35273b2c97589f2527e83fd716505d3d4842e35e7e02fb319e462cf335d7d07f1c756d7d2f2486b14ad62f78d0101b71eba996ffd45d5fd4d77ce7afbb876b4d1da1232171774d4563b2401fcca294f4965f661d795980b6e9b0246970ddbc16d021acacfe1c86c00b5857e07bd6168bb6f245e708106d93f33abd52270d8d477d005cafb0d9b42e9013f03994879215fca36c4d35aff7139938fd845bebfe5b657c13f51e53dfedbe03b80211c213801c5ba8943bf36db2ad44d49e1c522c44615ee8afd9c0aa5de95b95654741cb02625155071f3faa5a563b16c01c970936c3d45a9460d142511cc06c8b4a6cbbeb3395a927a9f3156ee7ffd8628a05c3d7a19ee82dddc006ef25436bac2e0b80c7d2e7ff200c7a008c8c7ffa278e569dea779d8bb2f4d9c4b8e248e847b6da65537f02ac784988ec748d4675850c402bb81cd78776d6a874cf8c2975759e9836b246f3247a44472b94d62622bbc19838e9db5b43e05d3112c4063309cedc16512199d4b069cc05d05ea2ca0742c7852c82b08d2a1b696e041f7a2ba48bc20231cac79c3630e812293df4517ba0eb7c277b8564d39265c519ae697e0428d2e8b701ffbabdf8f7fb25ebb05abad05c87a4a863ddcd1d5fbca5ccb5f7aefc2a56f5f6fc2d23400269ddbc01c611a9877016ea31c3291bc6b1a79a47b41380021b3a345d2decf1c6f4418caf9baac31cb96f3a15944db03b2c54cec53963af2013010753b0e2e6ffeff7affaf0e1e7e6d2ee2e06eebd391b640adb0cd075614d2924fd2ab51012bdc382d7cbe2a2b1009f9849ee0c24736b4f70f5d473e8ffaf15d1303600f246139407c6e1554b8a43f1e33a1565a4061b3ee52c336535da4531fefc7b3e5a7c37ee6b00ac5b2fc85dfd361609e081ff9888e1218bd3fec259aae06c3071a6b0a92015469511bad3d42b407b9312716f55f1afef9854ce5c93af9e23e82f5dd256b4ab05687bbc77a98e0961d0a72eeaf6a0722a01efee7eb898a183a63b860535779c04f681144287c89b2728f62fa8cf4644cd2b405c3a9c43c39fd349348c54423a4f19e02bdfb49ffacc26a971bd7bfea2ef4eeb477e82562b8877931d9fe2e9d536d77a01d7dc189345e6bc27eb1b9cb447326c3271d41d870bc40e937d05a3fe45c8f78ce80cdffbc3125f06ea8585c0f843e8fdb90e6bce52d0ebab481c6cd6310a3867a02881c7658eaee996a455a2a0e77d1c6c2dc4c8b8a4e071a33c6c52a6ac41544b398e949308353cede473a7c04bfb64eedf9fb2b3792651b9d9a2471e45cfce2767f86bceb2db8ebdf0d6c5680bc983565125e3e3f02ff6b5c3f488abe2a2750712e99a5fbe1ffe0d09c98769fef6d7b14ddb2aeba95a03a8050c4b64c92b2b18490224b32825d6d8822e46f389a7d0d9648d7ead960aa31988dbeeece872cef5a1e8c6ebe8226fcb394b3b36b99bf9a35d899184bf094db5585e572e1049e03ccacee4ff00357b63253b435292d9ce82fe1e264079a4248c56dad279410243a1d89375e807689ae9e804366da308983f74fd68480bc6c78e0b0dd584979e4bb890b74bd43560c5c558028172d6ad1fcd45bee3f3618f95378159a8b3bb4aa29f119a73fa25df80788da0cf685c9db77222cf3aa62082405f0b28a2d98c7a74b14eefad645bbd7c2a657eb761e298c5c7a10c6f10508fe18681785bc6aaca318adc65145ceb90ad1e4d77cef0b044024c0c487a90ff61a98b3e787592667632ff57043455908ad81b5385b1ede2a2c71e28d0e407b07ba91ee8b809281865ddf460469da0b20af89997e81d90957ef2ba0ca8397e1dbe74094320dafe231da1578ee7ac2b7efa9128ee917ee423eb4ade6d02d5fad77a85095e2aa016f1bcef11b934691d6de7d4ddf4683a71ea83977e198dd67ec092d34129ea1f79055c815fb142a7c766aec1e524657bda998566f5c886d33fc157a68b71abfef3f136add71f83b4934ca8e0bf29468f2edaa966528d7afd0f207f7020f5d9a8f1ac5270b18779423e01e1a39b92c856339d646e90770862e6349031aed506fb5a85fb1a1f5cfa74328be2a10018c7c9d6a291ce397049eac1436f593ce1050f671398a1574f6ef04291c9cd4c2b23f6c0737244771bc5b772ecf8d7e45058567383b8b9c3c839e582180cb986bd0ccffbd59356c6df2090630440c38e225a5462e24ac486e189a6f0d7f3f10609ac20322fedcbb3f81f76d091d2dae73b08f0a1f3ee4cb28cf1a369bdf4b7ba8e88193ff5e8ca69302cb095f86a40869ac2ed0f2997de23b4bee53fcef9c6f4fe976bb7274ab637f115dee0ca2af83f62a830e797aedc6376a72214f98f5330785e49a92b422d03a6429d7a3712b34d1fc42c12b5816c712635f6d454d77d25ecd2f42c16b9b1163bab5ac534b540b0844ad3564473817b0a0e39bf86f9daa1254d7b6cb0dc629e3abfce2327a0a4db0e6b175375e89e8ebed9ac73700ff9fa7b48d3270894b8532cf70a95558afce5eb1929d87862d8123197139f6a32c62b2faa2408f81da7409d8285e0136ad396fc9a1ef48e95a1c95082bc6925ecdab58bd6942657bf86f168475e6d5693bc3fd3ae6a8297c5733e58e91c32a76ae57ac12141d30880b2976d2bf509b443dafb790b6cf7e7deb3b1d573c0f510e329740ab086cb8207374b04c73269a5f678374b1536e58bca45c50c8642182d0beed7830a7ab224c17308954024a8cfae2faf95a086ac46142c823a2203da7a5d0995d9f92f478611f2049a8cfd45d590dce7f9fd6ca61d7efd87a944ea22cc3387a109bc8af11768229c6f3486baf373fb0e383c937c03bf303b59c49e15b126c72f8baf55c654a07664ec319035f0cd056689880c3b88c41aaa3a90255b0ad120d3c2ebd174f90888192e6e4f01c4939b4ff3525592a63abb72d5a272beb901db4239063c4e23d7611119c3bb2378fe08f3a248c0d146302b9e06e4ffba846ce5a931a8e7392ce07588399efa87192af53e681d65ebe83d01b06f294e6e4ca602ac02f1ba294518df08795d7b37cb2db4be399e799c41979531d6d9d939243685ae5d5807fb985d2c586620f2add8af9fcc8102c5e58411a3ef9b002e7a6f3f980d5dd417866d15e6e1fb3892e65deb65ffac403ada505204ea90f2b390665ef2ae6b8ab4d560321d85fb5742a3e49df58c0a7b3016096f8415db0d80883498e37d1cc5f5d47f4cc15c53e99d60d83a5e8ec2906bdfafbdc75e2cba36f378aa0fbadb0e7a7eac9b62a681be07789040e346559cc702fbef6fb9b3655feff090c36a750bd7f729b8a0987d3b1a56eff46cfc2635f264b2fe28954acca262553c94fbf93ff176190375b9494032e60b9b472263a1fcb325a3695a5fd9ae933a59e471abcc8d65f9734d2318bf91d9a987c43e3d31dbbf4db1385e8d1de67ad9c03a6b4adbf0c8aa15e5d911d85fef2737c29995e935ae104bbb1c53c10113c633d6848de5357761336af2a521db9c9bca8de1e8bafe6b906d63cfcd41e03b78015ca7e5def108f631a09663559e919c748539498a1b5d50a7fc88a5a756b0fddcfb665020dfca61790df75cc28ce166be3b8e4c67f15fe9782e55c41628c186c163c8314f3c5a3ee1126edd3f2d3025318e55388bcca3950d2d03349f8de630b035b720f576115fab8a4e0e5053b96ebc3b5b623f79d6391ada52b529f9e68009c3785b6edb3e1d6b3fb125d78665991802363dabaac08b9fbfe4ab3150cebb7b236542aa75fe69c6dbe90ecc0fad2a3160a75e4630618ac937afa563d4b2d894ea3d37e021c71237e18af6742c4b6956ebe08a64d27fba9865bbd85cbd31695179fb3b29652bb5dc73194f387df3e8bb35d8669eb739209d0345825399c759786e526aa28079802c888175253e028b356aa5c192bdc4b7cb9a5f0998865773c3f4cb4c845b19525ba7d95902abe2f397e94e0b1070c0ee4bf8e26aa6ce364e7c247b6963dc7c1879d12bd54bfcf67c0a7e755ff702afd94516e8b6dc97f8f5fd03c315558bb0726816438f6b245c889b2478ea64ce59410d390a795428c31c2248d6703ed315e6e3d016b2fe2e4f225c974ad12209ae1902ac83f24a50aaac048ab34abebc665c05f018a8b82534076971caccd30b5c028420c224befbc9b1fe1285fa907811b552bbed540c81bcf157f17bc1942d81e52bc8ebcb0e33be627dd839fece69279ac532577bbaa593e060ec404a4ef81041b8734eb7e4f99bf79345bb1ab1a93514ddce2d7d13a64e6c84271564a674ec3e1dd611a32ff3fec014f42ef800228c4bf9e3cbeb15a92a2903bcebc5e16fc01255226068d07b13f50885ab40e718447d006e4ea826614089e5c2fe14c07d0a8a4506af75af5c37e01c4ab72eb2663713822605a546baf0430f0b58d6c01c4b3e45876b8704a208ad0617b46c3dc53b8ec81a2d09f1f0607c2227ffcaf9cbd8e9f6b27057bcd1ba3fd8e4029dc596e873876c2680c06878781edaedc2957ecaf02e04ee8c72b8f34a8a6459909c681d6b5e472ab879d1aed0fb8bb8ffbac5c5ab2ec94deedfbfc0aba05eddb0c0b10b5111e4905857187c2c3a91cc9c438cf9402a50e6e035fcefc64678d8770c21ab4e65dfbf5e9b6a71a1fe66a4b128a06fcaab97a85956205f8a113e371578695412bb5b030be3f0bcbfe0839ffa2067d9160faf55a931099e5fe8b33a495511cae0ed6d1a27e30451f2e0838678d82a10410389d15e7b8fb5ece35904c77626936c082e26490b1114e1e283a49a1757b8eb3a4be35959f5fe5cb2a6a216dc3e9eb90ec9f154b78ac8653036a08cd7051a786c8aefb9ef1237a97d7d2c0b80f8ed9a95c652a5e710bfcfab5474f9800ce8d23f99b20bddeb34acd0663d7a31812e4f5cde92aa3aa4700625641cd8a760e91c01dac78d21ca0604c7c12e1a59e6eeba605af61041efd71dc00eb46c6e7ac0417e03320cb4bc78798299a1432adbf0692c401271008f2d701fd4e21dac7fea8041dd3a101c486cee1989155fd600055078e489a5ec1a4c430ed7026b6183735768e2f1c55ad1650614ecf7545234f06a85ecd98e10c1ee5e9a0cb32eb5c3b4355493871e8b32a4ed32b2cfdc713d44d343eb293a9fc1c8d5d1e45538e5d55ebf8d6951ddd328ee14ef47e36f885b58bf9ecbf77c01a16b66b0572f43c34c70420cfaba4cb02b7565b85c0ac956ae22f8c2f6321c21f3fb870c3e3faf7e4ef462c57c121aa1ceb30fa32454e83a4369a3d9e5aae1c0ae05771b10e8a057e68555a18acab2a81e206389ed20a1a54f0b6b404dd097c888f10c7efb06d614aca4e44b2cc1e0fd458bbfb73441719e840b93c7cebdb5b09c25c36826c99b5834b59fb2c0e75f515b31a5e4f39bb1211db88f6f951e9ada3af0c417cd8130274f9da93b64d92b7fd6d6e72eb30ca4932c5df037166fd9409aba5621e7b7d8c94307d6ae7351dbd6ac92277db9f0704d82abe9b8209772db47b07b67638699b3a65f9f85230cd49e0dc7bef719fdeaa895238e7f7fcf1035532deb2999d78e4ddf87a0114bcbd238c2329f4a0ee8550cd7ba7a2354bbbd412ad184f0416c620e80e7825b27fbe6447400fde80798a8f33078831a829c85f46df4942838d94b5347f48722903afba41d1b6f28e344b9e81851d936f90a2b1af746bdc3eef8822a19d77d9d57d1f8af439e618e7e793866e30794aed9201d14494bd42b31a848d0a2c06c0c10a50b0d97fefb005594b5a038da0e0e235a6cd7892987d092abe7e2f637f02d4c271ccc14a66c483aaef85de1e82c208c07dc4835e83a82a65f68795a8f1f18e5dfd04896268329c289547c8bd1ba65964a5a98099da154974760d9cb1ab10ec6f6720237e23c130e3d942831d79c07910614b8321f9778783ffd8b672b558efffe58cbdaf1c57e6d97bb9da75df3b03ff95a42a0f92fef8db3fea977f0f5f448a59faad31db9825fed1e648d02ab419afa9858873719f5f21dc4e9dbffdf1fe6486de8b8baacf6c4a72a8a4b20d06f9351c78b233cb6328a956f8ba2316c91e3ea14edcf20481be762e2cec9baabdc2e17a85ccf9b37a57d6e99f720466fe89074c364eb29a4f8235773aebca85d85ebacb87ee8638b66afd0ca3f0235f116b10cd80048f4ef41ce92ec996ad2f50a06d042b53b54a988d4706b5af13700e32ec2d278c07b0bfe6751ae497a82cb8aa355f5bac645741fe79733945139b9ea015b684a45d5be56b896dff6c1312242403e5034a3e95a74fbd79642ed3b6eae95d11ee7fa7d48050dca27936a39e81577c82de25661c6871282d20e23797e56aa562e29ed99225e59a12b74018d52fb64d3fa8220686f7dbac54abbedf422c3be20ce02e9ecf14adb5b2fd83312ca935fcd54c456d1272ac1b25522c60c8b3162a7df1c050c829a12b03e00175001b64071d60872b20c7ed0e1cfe54e32e70dc889c2877ca2303f84220c06aaa5c9906bb21abf28c0edb1056021e90acaaa66821e318518c2162398b0f1bf03ec7408b37185cabc83f8f9c5562c14b518d3035d88f07b164f2ee6e3843d852f9dddec5cb1718dbb8fa728a953ccf6f2e6f97157dd4f64a9aac4b0f850e2db3fa678e14a08fab407e9c55e50fc18b56ebc2a82c9e2ffaf2400bd0a1a5be8bb57521f0aafe6c69631577245d8d05be1328214b7f72353e88266d73597381dbd67f469df4ef05ab246b49620b1e75bd68410d7c9ad34ef6960a8f2aa13424234e50a73e931ca9c4476909edf8b575ef2d1f4e8fd9c3be21282e5ee92e3df893bb3bd514fcc4b58030c390c7538b92122721d0307a20eb1df2386b82821495fe6305a3bb90e987b2c414432277c849bbb5c3f6c9811925726d9eac8bee705c5a879b4314a0de404d1fd68915fc5644b2561f4d57aa7b839e4996eef11c161132ed91143db70ddfa4f4069cdb5021d2e3bc56957f4c5181c2818df55f8f57f24c66f1e24b06d631caea6decd89cd47b856ef602fdeba9e0e3380819252cf9796d5227007fa16f6a162f6ab810fb5559b3aff9943c84063d2f89960cd5f85b4c644b9e075c2b39f3e7d3ff5c55380fe06000905a2835d5d40dfbefb01adf003b83d13a1a315cedffc69b8f07f9b6228a822821f6a0b56a349a8cb8886ebf89e3af375cd9f63fec7a673ee8b70fdb3bb458fce7d161f2ca683c71cf1b91a8219c86daee44d4449cc2f202e077f42a022dbcf85c9f80b6b6d73da1f7eca9623ab27e8ef598a3c50ec82d16982245f5f00cfb09958647f3e8fcd42f34b982c9bfe706a8c747361a4238fc3ffa37ab06c4db8132e8c9081ae92652ac3e634408f9b45f89bab3c979dedeb0d71cb5b40f720387f1af54a4ce4544571f3afc0cdeecd48695c5ff53d87c987c4be834ea54aef7ebeb93e1516996201b2315aad9675e1da7ef1ebed0eee76079eb06ed96a1cf6c1e5a4e5d3ca15b13bcae5a8ca783528792253bc1c1b3eb334eff2c6d09b56b37b38cf5cd8a6cf56a6ce51e82e4575739374d2739e2903b47a394e94314f7eedd86c69669d7e8b153986eea8f4111e59c1562d0e327ab779eec0afecde9e464b23dcd26cf328538e6a307c72d707cb37a95ca954bcea72ad3fcd8a90cd78795e95772fd8ae8393f12bd15793723cac487bda212615ed69e9a1168394df1701178a0a10a86e86f1027e459cf983581ac372f5685a8431ea21abfb1f54ac5d65328320ab483ef63c363335b58b1e4372798dd1492b18e6e3947c4779b65604871cfbb988b945092bbb60252d95f98be0a6d9cc4db4e12bcfb9f171a2247ea39ee79a4113338de262e57cbe84f6c5bddb0009243341c3ed42a41e75c313deff9a771b9706d16a3ce144d7ba7d29c14a41e9751c1b8d32831ca7906e946415bd14d9034ce048eac15723460fa15ac595acb10446b39a8cb61c0eeb1c83625356834aa913ec464236545bed50fe741c5f09477ef4ead653dd53450434bc8fa3c4c4e8ac98944e2fd1663791278dc1309db3d2eb0e18efb6c95474e9c4ebca8eeedb7a291893f94f0c9f1b49542cd7a1a24a586469a00e2f6bb73c628f13b5701acef67fb08cd718c124e40c6691d212eb42651daf478e658293a7b1e1e167b1117b6e0b2466a04fe316789208dc8fdd797e31a6f83b3b86901e052490a7cc4c6374ba865eba5e5b93be270edde5ee033a2c878135cffeaa06476369d3f0e533511dadb3a9d188f26de681881322215aa3ec7ab5a27a7c0936a5985f111c9837403352bbca4d3bd165626dc5f93dc21bb7e08746eff18ddd010b4b869780305f58059da44deba541e49f024a01b8207b01027f19c20340b9b60066738a55f658e8e6506983c14e758d159673c04904d89521ccd6ece3e22c65878d7422fa2a7b8cf7af07dcf8993792b5f41d2a0fbafded67eb7bd1b4b9456dc9fcbedd06cac312cc391d61fb4b7ac18caa479c3a1e6abcd06786c35a5f288f9244bca917e46b676ad16947c874b4af5781c5bec5864f29ad1e6378fab0c57de12784260ee87a964da50c51554dcaad8f8b84594f9d75312965dfadfe586018070e940d680ad2745c62b0c84a4c70e0ec6e90610d46eecacafb4be1e4040910cfdd5973659f44019e1dfa9a763918de6af9f1e5c46b82ba34a3361c4122c0c2e5bff18003054835867c86d3815d8a596a08c59324c83a12fbe80fefde4d8cc1020cba85aee04f954ee4cdb76af22ca0cc2ec191a69aeaafeebdc9b8dbd4d996c7c197e69f2cdd4bd28d2610e84a26680156682657917cca60487ca5fcdc83ffece35518c6c13ea5633b8d3d57c70729848a7f30254d510bcbacad8970588ab126e13621909a07fd162bc14207b31221e2ba06bdcea46d38ea484d321bb197c7de79825a1a990a40a987b1589cb2632690ce8e0fada4810fe2496a0913de9406313f0e835665abea638cd5ddb653287a2d6cc223b75436e5aab86ee8f731e84718dfd13c5aeea67f75e5c9bf4d8fcc81601752068190a87d055cbdd4a0463dbdb1c2f7200e13ccce3401856cc21a1bb36b263335c05d0c0138db76c125e6784d878f4b2e9f36872ec54426d3df2a8d1a36d51b4b7543feb47449792c85b5995af6bbcd823a09d4a1a8fea42e5b5601554684ff53d255394676b5586706d40fcd22eddd2627c39078ea522af62235ab7dba86f08a047efa93b5540f0e48f5df62820d4c7a274f13849e3f94a71ac141ee9a894d5fc183abefb5a61c5d0b2271a489cc00682f05dbbffb39b70726d8c8455b8a6655f4d6124f02a2c70360e05159f051073c580fe96c1c104c03b98675fed194fa56506be86c19c458c55c5d4871311c308379da3410a46e7714a5df3fa2c3fe6f2c6222f9cebd565015b04aecb531e89c0943ecf77dfb973cf441b084b5c34a83b18f088a2eb09cf8dcc8f0552767d3f499e2ee599e9b7f3f4159b756deceaa451d687e8628d37e7f602ad3fa6595265d8067eb7b4a4ace47ebcfcd0ea083b1b0e2733cafe6421490d09250acb6f3d25610b713a198060979b345f69bf6b42ad93bc90ae4438de64c68456f2c89a751c8fb5b37063c0cb3a916a9409b2297038e0ff9d1238b54f728113c5d6a208387b0a67accaabf00aa8bea7ae4f70482183972e28aebed2f6a0c436cb8de51df77cd10b5ad638290eb310bdede1026b74cafc9a58ff7e5bd674f7aad0d3e4ee6e95240e1dda5e932a57921600ba1ebdbccd4396951ac6a85d41173e14b2bec9878f90a69963a0fd543a3aa81d9e19355fe19bd15042b69f7af74028c109153cd5caaf4a4e85aef93dc419856b6e52bb64cb06e2fe52ab71d4922129b6567c833bd1d55608c917d24f47f13af7337e042976c7c4e24a49ae45eab46f3d146a563cc54e22ffa2eadc270f0a71fd17eb02cb57a05199781c55702c3590d4b33f19bbb2b72ea3272cc6f19a3485660e6c499df54088ed886dee972538ef154954d8f3269feb5b3f2a0a116143c1fda0c3da80a3fd9321c922e17a1fbe9747afa35f2e95179083458ed179c2a76f003d9aef6537ddfc2f77a31c595cf2779314968382d9ea265de43a080fcf0bc10ac6c6e17621e52bb0c3f1cf9890b7f5fc455ce01de1acc7b2160dc9d2eaf0fadf79e6fb09dc32f7a8455d075b96f5948df6765ff94dbfff3b54c3e5899713731a54cf2d0b29e53e6846f28c1e033215d7bc45c7c4a8c784b4f800db69c27f37ca79047e4bea4d1ca49b84e7404aaf40073043b43188e9b78fe10d2973facb632e9fbd562b143d6623c25da7dbcb6c9427d54ae063ed60349c2560b4874dcd4d363491dbdc6383fd84e069b0ab5eedc052611fe474754e1d149e67901d3ccf0c2a9d1919b04a8885a73cff1e7523a53ecfaf17ef8892f2ab63c94348e5e5514b91e4e107a7ac23e3ec20296a9308088db36f129a6d64b2e69a9b7e874c259efde51b0c0d7e16c5a5d8c5807291e72763d01e787cfc082ee49a7fab4d540222deeaba1382b47d0c6b6a8b7b0d9d1339ccc371a8e25eedd1ca1c99348338488b5b50628f47618eeac52a8886f9283f23fcac8a33bbea7456a2010b6520d15fc6b5885fb4818640e9749fa76a4a068a184a245392b184fbc4c125edd7053f7fdf8f790b169b1da62da0f614a5b8b3cd09fb87386ebfac36e941a9758c7f10af6865e3bc5a518ea2a625c2d82d25c4e8ff6e58de3895deb57b6b3c6d8adc138782554f6e0cff2ea3482fbed251e28acb5a22778d9a2560f5c3280c713fd66f918eccb0f59cfe3edc285e2812fea72a0185ebd65add131f585c42f01ac004fd181b906fd5a7ece0ef88af5c45fbeff2f37430b061d499ae850f4b7a4e06f36d82d0b14d8a6b8178a12deb8c74d706fe15c9e8c8089999a5ad7ad9b12746a362051376e2912f540846c3c88250ad9b22e5782299c41a6abd73acf1348b9c5bc413bdceda7dd11a1610f2f05ab8d760d3d8f76e0512be448d95156882b42f156a7bc6721cf310960ec36a4fef4a0e9d5eca2e3ab70cc075890e72efd2069394e0d91829ebd543eaaac2275fa2e1173bb064ee21c607c6cbcb70f9aee45d130bdc0eb3ed0e093636f2b6e0f7e42b30e33994ba6d7fd7a398db2a264835a12f0b0473bd92425c6b000ab0de750144828eeb2a5e68613c76adcf49e562c55f2ce3d4e0c53083c39141d1a218afe8abae5a346de3f08805ac941e5d7315a2923a54e02e14a095c93ae92e48801b89d14ee413832c06bd86b3da45ba3fa808e026b6b19045ce085c07c894272a573fe5e603bc0a273ada55f00d6fc2fd526777bc04eeb42d9f104b4e99975b9fd0c34b4bb43ae2464b88fd2c0bdaf63a5715d50f501c9c38b03bfaa51163111b3e8ea482cd77996634df35378b7b59773bf5db728a84a3c89221ec01db5f588dc235d627ecfce51fcf2e16019b5642ae6c2eb7edbbe4dffb086e26a44ce2279f9c253e3c443acbdfa4119edeb3422560cb238ea9a59dac6b77bdef0d94d64902eed0220e3a1ecdc4c67f6e7031b9ecad4f6e490b2f5f4e6efddcafe19bf0d8bb35e223ba2e138c14fd2fcf3a58240f1bc4ce97634c80aeb59a8c8a44f06cb34f7931c875d85293ef4d6af54291a7055ebac3fcc065409b827e119f94c6548a2b82fbd6c543703b1f9e10fc8637a6fdf7086c5e48a4a775ea3caffbf5089bbbeaace57146036c9367970c106640c7bef4b96d46f9ab9b11da2aebbc39b726c63561cabdebb88b1aa7eebf82f6d122b5ec1e831df1864b0eec0f752215b0ca60f87efdc84a0776f478ff446516b5dfd16c7c8ab15c518170b306e3892457d06e84e7464218b06cd47c2b4d959cfee1deec7dad601fd1e71c6f2782691b97a2e0a8101d569e164490b2eb605c0e3e795f3d08d6d32d52ade30c9e02555ff1a23cff95ad611a5ae68c06f266722fbaef361b9c43d72e86e81c75ccb2a521b47f4d3b7298009eb82b60ef5ba9df59f42fae269e1213f0789d2764e5c683547dddec978600cabeae273aff0849bff5b062453bb8bbb78f1c921dfe5510fae484aa110943a32cbb0cb688ef5d4cb6ec195d07748803749e4fcc6c8e7ad9313fbffccb12b6dc36420f3a7501a9f9d6240e83c079dfa671a8fc3546a6bfa5405a8ddde3080231d0439925616f3ced5018328e72a681aa7f6504dbe902bdb05085b886c166e80a4c483424c150edff77aaed33868de2a34e5fba6f7243df9ce9279866230afa66c5c74bd4db956ef1b92e766ccbdc3a1d15d0d3c899e5b4cc3def6113bd133dd427d0d92db6e961809568ca202d368fa3da189b0692c68f37606e1b8c98ac79553e289b4196913ad3628169454b038d7bff39d1fd16c554f2d8012bc8873d7d85e4b5b6e8440e8def65705ed38c60b1cf45599520a101a1e1bcddaf92a2ff9de98c43a96dfbcc2583e42218fc8531b5edb33ec48c2b1b631b464016debf9abbaeacf6c4cbaaf51aa32c8a11e5de27f0a2c76866f07c29c2a02e2081e38d318c0ae687196990c9dbc30fac8c7939bb59e1e3e7aed26eb239a8483fbbf7f8e7942019380ab6a67ee4816739a5b11cbb149c95f1e643f0795d9fa288cfa86d9f77aa3e16ba97c4a8860132d21f5c80c4bef267ae6a929b6366492adcb1a30b08bfff2712c608c7f45ae1639afe33c732dab16a183027c4ea6023ad380d18ea39db96c0e7e94f7f41fd76e03926f7b341e9a2221aa267ff22e0f7eb12c7a25d260f64ffff47fb1858183af1760e123e935cfc5a4cd33b593f2973f0175765154b5334433f131f410a378d078e075f2ffdb0ad28eeea14819def2ffe71a2189e0672b56475222fd9058e0163a2e9d7402408a9f8e2edc744ea45a96d59d6b0bf6710d74a468f6ed490f37507a1804ed5c217adcfd174cca8c5ed6e74023a2fdc1ff82a495d4e4fb288b77b8fa2b6db770181285dab52d44fd63cd3399c88ae3830b702618ccd010f45285bd8b92f91316011a10b8c7478dd8f6e5ece08122b9de13433795b42e43fcb56a1214de15dceec592d041ffaf8f0c28acd3f9bba3c151440ba59e944c6191357b2250bd2e731cbf2d137afea59d1ac15aa06c40bf622a95116948722f54930a2ebdacab2b57fab46554c7a92f406befd8a021a58afa9335bd603275b15dff8c80aa85459a9ee023412bf217daf1da50d952c9a9af9076581967cfbc456daa1038288ce2eed647625b4174864b63eb26b4c1b202d5e0fe72b6bb43aa510dc84389195771e297fbce49ba0e717f84346857ae5b851ecb486ef9757ef19ece30966d4300873ef041d8cc3a89b308a4d9796ced3abbbec098cab117904da3cfea8b3e19b91befa5f987e373684f6e6fca40ecb5aee129e089184768286ea8eb59afa1f36122fb52c244a2f5866875c6fa107e959ffeff93646a76eebe9647dc0402130e3a0d9bce3eba9ffebaac7e10e6d2d6ebcd3751523896a8b1c7d053299bf3240546a91b7032a4495de7cede397c6f7e949ba0eb39562625fa4709f0f1752ae13cd204ab9ec269d204846929dd35ba5f37be3485e251406eaa55f57145a84328dfd6662b792a77ead3d90537881aba520b002b5e80b16ce1826161e8f696141e0b4a8ce7ae687215e2d61bb25b0643db7871355a53c89f41fb7bc0d1ad85437406e25592f9fb1585c5fe28225b7ee1d5c788dcc7e8c77b70c7020648dd6d34d13fc086ebd3743d6e23736b7fc7caeaf28d387878e62fa1acb81f2e5601898be4f6c5bd5084e602a5750750ab02823bb4b9fc5b5039940ec7c005915784d0ba131398bc4b53c664746444f8da4a210f57e5eb00f3a748086e8c12a7b74644041a5e2f74ef71ac841ecd9869297816b5d13df0dd0888e8f222fcee6cb5626a63b4b1da0f3db5a4003b1ea784f76b5cdd84b39bdb363054ea56b0e83279ffd9ff95a18430a40a799d801bfbd9713379b20b2e451293b638394dbc3f910f55cb325f6af2680c9313e3dd5c96d44ff953d661f195c11176eeef43ff9d32f1bf0dba77f7cff3ef38aa3dfb63d8ef18bcdaf1affff3e550d32b4711a61eef228d582aaf840463236d374a3d463e3e45b96437a6ccab21173857d70e3c1e778ed0c8c830450518b80a171558abe304471f074b861dd3bd4ff64d3543351176c1a6ffc0444a1ddb8cc7c5e9c3acee739e4bad6cc0fbd0f31436b13885c4d372bb4a9599c30d063388654fbb4e148dd94b836961efb0a6487db62474e83cd8c1b66d0d8defd9091e57ba44231229662d6035d784805baecaf4375d5aeeef81181781d6ec71c7a35ef62582cddc630bed29ba46065440cc5fa767e972c401e12046285460e5689651124cbb493302a40524498047a9e8565930f51c05ca69061deb999898e186616b020d12c3bec0baa6ee20a438a942dfa5fd07cb6fa81db98c3de42c6a3aceb17959e4529aa4b1798acb87a300368e798f3d6060de388ddfa17b9ef76ca2f785010c182c54d5e8763db8aade83beec8556b981bee9242055075952d096c18a3ebe31080074425899be5b62792488666f8ea26ff4bac8a104febb5fd90d641630be5f2c5a0b8b014c8e034b48d056d102ebe070596fe31a41196d6b9341f25051e3ba06f6ad0826478ed191a7b80a6f1f16c062c54c4abbd634e340d852f285c1a8ad376468d24ae1fe84ed90e29bebcc1655241562fb20e96fc483323e80d2fbd1664fe84944aee833c99212251a84da428b6a15d2fabd10a81c1b109babd9b226d24822f2ad81b48e05dc6b27b1b519f75b8eb8775d7f8d607e5ac9a04079fa755b1c2567447113d4bd0417f12c17cdeaa659842ece5f7d33946af38e2e7aabdc6a9c906d7d9dc020a72dcf05b0b01a88fcf8ded4655de0e3c1edf9ea20df722d65837d2a050452988fa29250b80a1e254f87fc1c53e0f79244ecc35a653f8566616f8ff292042e28e41fe2dc35846e1ba2f9d29974fa7313a2d87f96bae1b5cacd085b4d0f4d9482728fc13c4508ae456e03dd78b7d7c4f63dfa70f7510045e64dc47512f70b3296c5e584f683fb235698efa7fd952d00e3f88012ac7fdcd3f5ca666af3f14c7929f282333d1e7f83b844e5ce423509c638fed573e1e88dcb4750e0d6a8347503707355dac9158a20dd2dca9ef1aaf5bb49033ee91f912f745bb252f104a8232d0c7aaf0fafeba50acbe13f95d0dbc12c6724d0105e56bb4bf3a1b61a3ef57c7f917424b19f7ff333ebf5b21c2d8eb877247f20f0d0e4a8789a5c4af14f8bda4967f1b1f5ffef0b3e50fdbf0d115068134ed23ef55a92c783c8e80e1535a764ac8e29d77a191a5488ee07e10769ad0aaee4ccef1c8ff2d5aa091691566413d3792a0acd79873bfc28faba70a6fb5921a56e35b5da20d25810cf6de8ca42a81ab82a9996a94df10a0c3b962e253b79af22e49ca4925e6b0b360c0d994180c915a6989c8233638ff6abcb67314236fb69fa2914739686057e14ac04609dfaef4deee39ae58db251b7cec2fb3191b9107b2d6857205eac9ba2e8ea9cbebb87be2fc04e89fa86a26c6d7b48bba4ae7e4c38c953ed534baed466eaa87f68707f0f7e2e324f8699a04419bf555dca647179a1f206b138fa8852bfa1166bd73e503a515f4425e725b8d91f3df56313ce7131a98d652ace96c4f5d085ccee1855caace597b3d34a51f952b12f8b0e846e6c5dfed5ee31d0337634cc720e18a7643edbacab1a58bdee2e4913e3805f6d78ba324fc37e6f727b97dc75ebc811a6ff28fd996bcd4bbe1a09129a5cac20fc96fcbc73cd1b547e9437f34f43479195fdd6806b4bf24026a408c47289afc794dd3cd958cb791cefdcce2ebc96e66f4bb0f26bde4b0233dcfd5ca62b45cc6a07a83ad8430bd46d3f26d86d7495593b7096ec08297b89f5429894b29380394260e78ce8ee40a42d44af9c5dd71ff9688c5ea37f1ee3c7d5e302d2f6932eba6a2120aef21737d12a033268025b476e895d0987a14c3f5d3e78a7077938a10936bae99b271219ff746180900e434c452618b7119dfce91c4279394993cb7d92bb97f04da0f8ecdde8fdbc4d8c8669bb253ac8c973a07e483866d7b5297389c5aa17fe55d525c6be1905098dd4abf5da8325771720d32f0d67f45d6b6422f5e338a2f43fe6e21206dd30116fa0d8fa7a04c147e0df13a3f24bc29904c8310ad605d2378a6b2c79d9cffff36558a26c92bc229ec68d38fce50bd70d5ff704d3e14c1fbc71d19ee18a6e0e478ee72052cc63a4b4b856162aaf9945c48a7f74be3875a177e75590e3a23069587709f15ff16fb99234ec2dcc8b59718738207ccde27356559a36ecbd16c6ab90299ffe10acde700e7b84c21490f22fc6cc4bcf579cbdc3003e7d8da56fde33b5dfa0b0f6d6c12a4ff5c8a49a63fc6abb5638794feee791ac27a561f002eaace70482afef283195f970509a410cca9ad37b8e6af11423e55df910b8672f047345e960a2bdaf015d94d5ec79e274825a00ed1cd0165705a701edeb6ededf6035cb43b39c1189bc6d33ab95aaa1170af235c4fc43f1ebadb0183355159a6e4c17786e3e51d8234b3024829c88f9df23122924f0323a05e745c4fb1c3241537de329d93073e244d023a09dd21eb1bf19afe8e63b8c379f44628dfe6cb22165180e1533447c7621994694a25e5a4d055c61910d25707d1eac9af9dfb5a089cc7ee7f892b0e729721865eebf177fdce7449adee5aec887cc3ba1b06bcdf634cf2e5d034f7ffe2bfe08ecdb590540ca589a29c538d777358ee82eb00c63756979cc2bb228aefd22d29fa1a190b5176588f0aa243f647718fa54392189a807927f985538f50d0d8828e0b23ed0c1418ca0a39ee4a3ce277d712394c87a2a56627e52e7aae9e3289ba0f137119d2524d229fbe79584023997f8098539dd041a843fb98040617930ae6790ae50595f148340c6d789b805f93b4da0e1718dbf74ffd89cd2ae74fe827d13d062fcdce7590d632ce37266fe2283554f40703f98bfd0d57cec34c63633919a3e1478b18d96dd01258dae935747864db5b89c31d66a60ebe7e78dd12bd3144e69ec88d089196a6f13a59a5b761314e566fa9e2a15aa1475a92a7e2c73006d5d26b0fedae1fa053350794a8ec6a71bd041a966fc73d3fe5efcfd9f2f45ee4e6f6f9ae886c5ebbf17cc3ad10bfd82681c1984501f674aa7c6bd51e7e7b0f08c5eb58db6f59da5070f12fe491c0dc950f72d35e12b708621a097e5ad419a03a7dd8d5ad0cefad02c42d1ffab295808d7a16d1c0a0192eb1ed7d17e1b0e9c6432bc1913c6918330556f15edf7612c8e32a736f12ad654564ecb302a50d44649ef5a00fac2ec35278d88478a9eff6724b0ab563543e5345b96caee6dc413d654a93ebe534670b9458dcb06bf0f6c2fa0fe099c17a59b7d1de9c3a018aa23d69ce12725cb90502a1d16fafcdf8609f8cd14f123857fe63e366d4f8f0380b83b944f47c2735acf45b3a57e5629f96355c98d4127a271086ade461ce6a0619e3a3ec82714585aadbf193fc926a92af49f45087daad67a638cddbf32beb7b45d994c597247e817d6d958e52c1f69eb3a22c66232a99a63d201b6d62008f47d61bff805b4b1d276501f42a1f0a147aaf844a5eb0b9bf07180b36d4cc48165f296f8143c14eaa77061d644e1247bb4a664bf22b436d7c34db8719386fff06987f2198d8b2e29209695c078149286791ac3ccfc7cd9d99e8a5c116064b25173706833bceac52d10547d27633ca5ca8acae5e900c8437cbf9951461ebee23531c472ddc5b7c2fcd9ff44b2ad13e39dbb0637a86836cb4c3b7cab33d9bba8bf4ad2b28330923c4f23535bc4088af77dccfc4679dec53bc8086489aab4441c9b104367378ca57b214e3f5d98ca2ac58e28cccddb143793f6e948fa62ec5abc395935ee1580f0770e1a19b8744a6954d34b8320df9376eacbc87addff76bdfde53c85bc1d70f906db6efa103e54bb9dacc3fd0fcf8500b3dcdee399ce9a1c8e854273eeec9b59d9014f51063da68c502e358234b2b2f92261b1276c8510084f707c486cea114a5c5a37854fbbe2e0de8299dfd2cb594eb270bacb5507d9888abdcbf21266ea2dd1a4d0bae5695db25f3572ff3c45b7ca7ad6872b1d609bd25beeb7f654cec9a2cfb5cda96ee41e7a6b197a94c26766a07abf856e20a256a21869ccb353c6e74ddf3ee203918f2e88b97f821066abf9cffdc56995c8e263092484682005fd478c29678ab0aec40ff78c8e760dbac3792836847e744f4b0ae202e88abbab5f36072e3937ece88f53a347bcf1c1c824c927ea8e896aa48a2cfdfad922f6b8d7d0acaee6bdd6103128de6b277dda8ad3c408ec97dedfd8b8cce87001180239bb8b8898384934616d072761b09ccd2686255f90feba1b035989484ba4aaa006e61e5db3ceec95384ab36c8eab7171ad9409db878dd124e855860e1b61d20b759668d90b8b1343e05e2ea768fa15ae3f7ad3bd993660bdf831900b0250366dbc95ae60358c1c6539d8b635f55dc94e8c7bc23af777a9d3ee7afce343cbf796dc76fc05a0bef882881bcf073ab926c636d7420c6c0f28e93d3527de56e1d11b466c369e0f6e0d5f350fb1c8bc226e3e9219ecca521b0d75c5420ea26832395236ba0f122f64fb7b6a3b8350b17613479c50d76e909ab85f197a2ec6ac1a55b3360855a51d113e32279ae7a6b861affbfc4dd70dacd4d8c5ce41953377f17ee6480bb7d8db9cca101f6404b6bb42f3b637205ff8776d87762a7e7ff044727ad84bea3be6259f0f220ac7721cf2a62ba8cfbf6382d5da815ef268fabc0a2068887f027d2f882a75f5b7c826f22d45089b57b167f8f6d4fe9a8cdc9833b164529292fabe16d7f0bdf09bcebd164aad8adbbc1653229f86568379c7c4bf7d8df58d5510f9b038c30e9cfcc742f0143934ba9687a67ac5aab98ac23acec550317a8881c1041543a1250b5376c417f68dc84a33de32fed56c9b61acdec6da23b0a65d6fe60bdb5c93fc28c21fa43f8d08bf66032a4c6b5b2ef7c2a04ac3ac6d7b2b961c04b564256d23e7b0a514d49e93216c6d8cc81bb4fce68f965ed558795f2aa4ab0fd0a997310f62b7157c9cdc407a6fa1a835a3894a0af2aefc0ce2527c5e8ecbcafbb4db9d68470fc27e889262676f0a7ae8c62600e8ca2cad95a4dc0ca8c84457fc9418e4515fbf9a6d7216738041f6c54c1d8573a732dd1a001b144e00365e151bec992b48a2d6472506d995749f7ceb92327f09506c00e034962554c181009b45d5e13f61e1b3e5f090c7bd46082a1a68dfcf0f051d4bd951e725e231c223c1b13971c5e688f8ebfa07f692e5945ffd021dc843f4647ab93fa830bd0501a5b4df24a43a9255e42022d6a8cd0ac5d491e0f3f38abd134246a0ed04e0218a152daa4dc4b1d5735c09c8a6171da85dcac69f069178a330570690f9168cbea80fb633e57361998ba1367da6b7ee2a5018e5bb97c7c24fbc2fd9c63674404d0512e7faf4f3018fc145ebdae1a03a6f5c1166f927e6f265118c3b0dd3e31125e5d03f5fd613f4519f499076cbf84ddfece526f1c0895be229eb57b183cb3cf4bfc817335e820ff11911e6da0243ef5b6735aebb0735a37784bd5afc6fe2c5afc9a2cf6508319838e4bc42ab83fd5b273077f021eb9a87617b9fe9fce4518216e385d0a0b28e6536d9f79228768f4c209813f04f646b6d1fd1ba9c134c124389f747774551c46d9aad31623eb8b59f2bf32fc114ac9031e77afe499f5cf592259b43202cab6841e4b19af64a7d634702e3f0731f4c56aef9e62f972cf4fcf5f435f2c2e6ae22e14750ef4ca606f0fe384c1d17f65a6dcb915117d2c4ff494c761ef94cb4a21d8bc7af45cf6aebaa0628725362df82a27934a62e48651a6d20f944f7e8fa24561de4ee8acdb9b1a9f234d65214c7938a8d9f9b198ddc0f13cd26adada9ec3751c62676a0b745f62d7bc9f5ae56cf54f543367b654b0d2ee044737ae84e144e197b33d38b497e82de575afeb13c4510c8b2419d16fa21dbf1222443777ea0e85664191cd97a4136377ecf9e2bca2e3df22c08b20fe60b272cb949bfd47fa85c1b057e42bdec81fe36d818d925deac72763011bf7765191ffe0a6f8bb129a676c520dec645e40995ecd63f8095181fa9be06449fa48e851f0caa4766ed3989ed1808daa30045977c444f46439041ee78a1108b683ed8f5273e606aa366b70720c1dcc57200af38807814da305fc9e64e98fa8f91c754475580cc0492872e77e5e211c6bd41f2aa05bfcf57ad9e65778af31844e1a955169178e974fa14bd66efea60ae4af859d9c1dddbd7ad4e480e20cd8ac562df2e5eaef4705db4e3793e3bedb409dec816e6e31f67d80905d219b00152ee7e2429b38b0edcd2408c4e9280e388b763ba762b8dec48d3952053a37c4b86e964195e481bf76a046b50e8498db6fdf6fd94800d1a1e8847c0d90f245a82eb6f17ff4a39d00c10a939fb6978d3e6c44ab94606781334b6f784248d76f455de449725892ae06ca5919efc4fd6643301b11b09a7bc371144030427a6a5ce21155e189be1f799fcef03faa32c81e6561f6517a46966bfd615a505270ce1c99bb16ff9e525f4b3d408349ebab425eb0ef59b2b988dc3c4af860c33e0dd87e32469d3ce854b452af07f87a2415d8af80065e606653243260efad0bf4d5a9125a71bfc82c65fdff344ab4a0c96f1735bada11d654e5574ff18401ac3102775a0b220cc17dcaf57a55fce0b70071a4635e49c6267ace26fc66120aa21b53ff995c04373d924019d3cda7ab032afa1172b226102c54a45ee91549933b3c4570fa4b253025d7789823c8fb541c9e0c3622ecacd903cc1c3abb2c3e0a6aa1956cdcf8109d96dc908d8b665fdb1ea1ddb2c55206aa082f2f2b559abd4354a78e016afe5b2d6a31c14f9509268cc44dd4f47b3ffc0c9345802d705a835a763e3f42ca358c1c07f4875f26c4ade233d4a1ba96e9706e99270adc7c81eb1a6e48458abbcecc4cd53a9d8a775ae20993a4553f5ce5df7aa1f5f821235d5dee39344e93ac719cdfc5a678b5650c47308cf178040e45fa6cfe08370a9bbcbed3bf2c8532be6c87f212dceb41c4489e9af1cc3dc4bb9e144e3f5662ec2ddb3fcfa2a0e1f5c69a76a12a1040c4f68322d6e33d221855457a90f8a0a0e325e7ffd62ae71f96b7495304684efa801b15e3f8f795fc577672a194d9468742de8c133f2604cbcff2dcb55d5faa3f1ed2c89b173e528c2cf330634f70d3114e73c7bdd8a02f844058b8c1aa972c515d21150669aa0bf0c36024f1a0b63fedf38dc3e23a28d4ec2a9664b1d6e73be8f19f9544af771d000a7037321c99a4e2d0bd25d775af5b6c8ed9f07576a6ea015aaea1606f5b308ae6a92e5b0ab6a252cfa55052511c643b387dabe7edabbb5e25dba2a42b361d8acdd1a1a7d9a8a7618cba42ccd39d6f8a1875319d03d936b8555b7b85e0e16f7120a518126cfe42e7b4f4a9fe4374a8615bc2e0d7c37e14f56d34b24979bbad9677fbed04a92806f8dedad791d22d34c3b5f62a5ecf9429b3db15640cc8898033fc17701a5c51ad6af94a6580bdfc8cfcb7ba3399aa47bbec88dd74eb274651343ceb2b8f7fa509f8c36d5c2e10e86e8d2b9d2584dc1309105c061c021cc41843cf674f68ebfd3845a9cd65cb5ad532c9ea97c33c5ee691f3ac395371d5d27044cb4b43a6da27b9e1b761ec66e39413f4e0cbd79e589744671bbdb88303f3e6e615f218f1c19ddead2fa3ec610a4dbe00c504f1954e110b5f91026d49c47f524a95d08ed2fdd2ebcafecce5bc919104f0c6f17e6b221eb652562662ddd082bcac96eca4faa4bbbade1690cefc24fb7f70971894e89f384937b8cb117a69f592bed3bb00d3a2c32dccf1c9317551f536539cfbcf9aed5931acaed2ab09e3f14fd0238675f5b41de29e5c9df14b6583c9a7230a532fd93e9f02fe90a27c5a7ddf907454bdb27abedae2a6d91b13b5d9380fb8548160befb35f7f5e959b281c8287f3d6f66aa2098fd56234789bcb750ea965f9796d3a3ae6727ba84a77611824a2c9951c851f057f0a08ca3b2ec0fcfbd4eda9d44f76e9b82507039fd580492979d51e10109b4841efbb29caf2925a6b9c76dcfa3733323ac2d3d97b484b311e270f006d5aabe516fe90148aa5f7dd4a1a2928177e29f1db4d426219533f8d4b15c17de8e19be96df46e10fd7c9f94ed39b34b902103af2b94d24725479c213618f102fba2720bad22ac1c7d8d74592dd45184a13d6bd45f13a255c0187d095d1b92b9e3464d2d9b190970421a81d32d33a0e18b37b70f94370ed5610619bf704eacec95eba09cf1d850a673db29d90bb58c3bb499f28fd8ae16cbae5521c9f0e3805d78c9479b05eccc49133682ac347414149c56105f721642af1fba4147b29741cb12ab15284ee40851ee263cb435dbd37e81ba0c1eb6954bd9125239842961c58c2bd03a182e90674cf0a1f0f2185dbc612bf630c6086fe22c9bdbc0e2a0fbd14969cf51dff47d555c4be247ed2b0cc23b7aa40e3afd7c898e3255f1e2b00c346a3e90ac313a72d80a27a7433a4e760b280685d5672ab34b2db406252a123c93220d6138beebfb173fcd67cc7e953eda112e387b76ed654a5d4ece46c74dd9bb768f1cd070860248b0620b686890a60766cab736fdf6e1ca7c6dfec21cfc20eaf0abb9d7a4942ef5110f57321abe41d6841e3f3845df2b8ee9a01b87dc2f329d275b22c4defa3f6a14c04e58bdcaa17b037e5e75a10cb70c9a9a973827580641d8763d8ef92e92e0f45aa07a3ea9b2c70a5764cd382349c0e3c5e9287a6e8aa3f6865378714952d6770f90a668465c691fd4a2225ac3780481b56d5b4cdbc0e16b52dce028c15b6412b55548fefabe7e6cf44e72f27160046f9098bb59cb410f5309c96282fe98c90a97a7bc31b60108b997ca8497d0790a1c19547702871865096a8a8bd85b70b2bb2a1d8833d85738c0121697a74543ae8b3f215a162c46f10ee544c160c8f3a57960a86fe7860055d59af177b6fa475ac4c348d7e26aaf43f826d424d54951baf6d1fb84772fb92deae516b230da838ac454ab3f4fed132261c3ca9fd7da932603490e04ac68e462109b8c288c546b8cbf095e7eb5c879f738fb9a1923c025154da3616209f69f4718e5d35f88b5c7da59e8ce6f3b0a29383bfc788b613804b762105042e9ff5df8c21a40635980462ae18482c0ba2bf7b713df6c7db5422c1570a9e3d01a27c18e72f3d72828e93733fd5bc9ce9fbca29927b0f5b1caa97bc142b5ac2e838afd96a9a731244df65f127f4d118268f800accad75e2c1b2d4922fc38e4103a145c3173117925ed0c3699787aa943df2d5833bc9b1f81e4d7360b2db66f4af3b61e7d8d220eb6dfaff6768c5ab828ff8310b4a2e27b75f6ca047279b1dc095b5b9948eadae8b8fc5a8bfa5be4d7883697c5d37a8055d9f16c604ce145023b64e401eb2d23c4423d09d9ef397dab2531c9a14522a547fdfe343eb0325fca78be583db45c483f52893aab5c62a206deacba4f9a98b2b265072edbb57acd119fd633b5a95b0a7291293bd4593dfe49f9eff4a296e237144ed1e9edd81b26aeb0b239863855f487c136758a5e13b42fe05d1fae6ab9d2e59e44f5b6f2f91d8a2cc40b5b0c295e03089f324fedfc462e9c5c2709a0ef8ec8d35abba471e03519149a105bd96f387b9636993cc0c501705959352118ddf4a2db8a982f2b58c9f8452907595aefc625e71cadb425d2254ec574a936c0e4f7db6d72d57def92f2e3120078adb31775aca50c54a0cbf7030ff40b238a76da2a04114d2f0ba57fbbfebbc962d6649eabe53ef22e441876e1bcfcbd76ab489e8134909227fca57fcd3f72204974d377ea46c98a808173a4a629817315420b786a6e704e37ad8cacd26d970bca479737e735be4d95fb8c3a0b0f069c29c945bc9ba279390b1029d83173fa468b091724773056566648da96abeefc16348e507ebd7734a1b0876d473e050aa3992900b7ddb0699cb49b0977a588298d8aa7b78252466cba8f878ab187b39bd6cef90c79e2b3cb2727b338bf98575b516b43b8ebe829c7260ba828eb2188d2faea0b62fc1ed47e4f9ce75c34047205ae10a46580d78c781a0852866e1f1cb9bac71942a0efb2e30ea838e37ee896dd14136df1b3ff61220179d8977fd7371a754e39716326d5ffcd3d30ea9a383731fa229bcc93b04d197c37d3194b4c0482e9f597002b6f7c475e5d966e86ed881db3201851cb784cb3633f9decd2d878f753d64826be24a1e1820c5f863b777ffa1664bc5d4ceb9b9dd62d071d24f45b8fb38bff0f18d8b4f198a778bce866045f79b4de6233fbeea99c2b5f49eb12a927b486afe5487e547f9cfa44c8bebb37db20ba947a95c97fbc95132d194572f225bb6cb723d948bde2bdd955ef9bb2de1f622703ec8467736cb9751447d583d9b827e72583ef72415138567ec0848d4994040603fd8a7a812f48b755ef2b750f4031c392a53297c1c0d2dded7cf73111e835f28506d0b6a502d10a2d457f4e9fac9e710bb1436c916bcb4757146152690784804d67554589cad2c27917aac8b6be47ca024ca40723e4ec27079fc477427b4bd375288da4f1c0fc5b50fa20793fef17fbbbf4333dfea1770d239b66b72a42e42a5961f220ace91445dac4c03988257731a7077002105e6e84a91eede0f8becb3a9805fb1b9ebf57a52e12440b4adceb9fc009028429ba7d09a59c21eb6274fab59013cef127aa6884c40a5a7ca7c1078b13fef9457469f0fc7ab373a285906bb26df777ae08079fa8089c9f774a7e5931cbc7e6b969f9fa487f234b53a29254a0c255b1346597e5e50cfa9d111230001a3ae7e1d0d743afdc51e9e8556015c369c6cddfb5171979eb4cef35ee49f7211216d9d1dc44133f9aba7c3506c6971e3dfa62020d8f3fee843d652d149cb23b8a3f78b026f0eec1eda3eacd77ff9ff2402ddbf795b821940ca6268875f0a34f052913c4053552dd31b4db989d74058ade75f915542c40be7e331242773faf50b29a4f3e0d057ca076a03025a615934baf0d20804241a0371baf87c6bb196d7159a7cc25b6d76eb7cf1e434d02f8e6163fbaed6cbe81736250c3edda6855a1cbee4b2dfb9b79b0e2d061bd7e5f662e8a6b6abf02d8863c610ecd2d2e44915cd0cc5b15c169e54c42b345af67ea9657d3748804c8cdc767bc55d443e677b6db000ace64d80510e10efe684a34372bbd0ee6bece1f44798611c8c3cfd2d42314956d257d2030d74a40bd3be1e562b370f02f86d3a39c41b24339ef77096897fd5317deab6cfbde6d8db588ee4a7be869a0cc668d132999f16b3a6564a248c09c8a12ccf8ad3c62ea642865852aaa49f16eced3e42526fcc108247cc6db01cdbe45d8b42c0981dfc3e5dc088d2b8b4277f75b48748e65b467836a4bb1628bfb880abea08a0718c968bad6dc55da75c8c8f72f3642813b876a25ab981cffedd37f5b907cc5040c886b77128966463f82304c3e2f51408ff9795dbf442ddc47075ae1d33d77ea5fc2e47c50e13d8da2a5e984a2396cb5a8db866581404480252f6a7ba47f0a58c7cf6310bb36858ce67b305be2b72693e12c166a707df1ce81ae2f142cea1be98c56a2839f2f0dd01e7b799c23de93b002db9cb1e1692ee3c07a04ff728f540c3ce34770c5d1bd8405e476aa6699c8a97f4b7886b62a36a99548a98a61fa69af2d35dd2252dd5fe5235cf7a3cc42290530eba2ecab5e455ff4873128f1e5f91da3fce813fd02fdca5c928f3464a510c3b9d2a8af78fd5da03c4da2e0d6dc9858b132df6f70e050abc4aa247e9ad4ca20abc9c94710ee2a24704fdb2c58f2f41fca73f07247e6941527b5ac03b6109a2f79594713effa467991e0a8a1fef3c20aabaef58c59134ee07932594d31020cb0c6b22060a769a31f4b8847f40a6a3a51b601b1421c2ae0b47d4acb5a5b6c51bbdecc11d7efb93a32e5fd03b6ce9f14a8eda595e012f1776272b30c6d7c6a8fd66e615f6c1c914c558705f700dd48176eeac67b27ea1c7192e1024efaa1bce87f5bd5ec9dd97ba173c8284e618b6abce03fa7fb36b286007e102995b13fb59b4d7197a79dd6d534b7eab96542d219ca7c47c4497dbf260ac3f5d17b5affb356e364a3bd016f26abadfa2a10835f3215d11f03e586caf86a2eb19b1238f7d13ecfa7b5c8e115c60a0fd17c0de0c94b25d04978bd44a97a187a0689d86e4d14f344fe168af94d9683de9835afaaad77febc595e2ca4873b09ab83c2d9f01e40b8ed4806cb26718d52dbe5e64227129a334c507a6e80124966faf0b5151a8cb2f5403ab0d1cebba723bd4711f7c612219a681698a69ac4285330887c13c1186dcb18df3ccc45cdac23c31f4bed2a84d8c0e7404de41e8a8ccf12737685b2314e6f3d5a9a0a58fadcc3b6132513f25708a8854e5d7c12cba1e0c48706c7f27b038d4be64ae501c2a8c293242460bab0d914a162d9d38bc0adaad14baf623529841fc700fea3d134b2c6086dafaf04fa8531f51f2dd6230512342213fdf5c18d684545c61f9cc673a604746d0762a37aa95b6489fa7ceec1cf46f020886338071696e2c36df5975dd1771e62dd3f627ff67ac6b3a344d829ac082cef54268e756188c2aeaaea935569216beb9e1b7ba340210d4deccd64910f6237cd14b0c1585f7701d53bd403e278685501fde0d81ff177a1a5e2854574f908c95003594222005484b294450c1501746b171c201e98909f7a3a2fb150b7a3233154bb43851d41a7fe117dc14ec30b7f25660fd836c93bcdbeeb1a06a9c1526fc5cb9b08625e4da4a4a9d6ff4b431888ea34f00b683960f992bc7734d399b2f3f2e45ecbfd0f9d0e6f04458af12ae7420547953628769b37ec599c9d5d8b170db53ab6e92d26f290dba0c1c7f7c673d11a371473fbd4666b11178aee070430b05db6136c3b272440b54cd19cd4dcf04bcb9cbeb6bde3c36a85e47c8526a418eee6fa21e5d7f60bf1dd38204e2b5e2de42238b9f6197a8524907fe282d68a5005dc4acc860789d2c83b2b2dcf854abadf446fccc70e93a9a67eb5215ec03b18986307899c5db1a32121f1f0db77c962f1bcf2c9944b90d923f122705baf50250bd4c86f2be6c31dd92ee426654626fa79eeccb001dc87283c2969405fe1e1e4da6b70e46764b022cfa8f5d8ebd5ab93f8cdf0af3d6d65faece77766d7326ec3edc9b4654a60489845ac3e7513f352f5d77848bc804ab744dfa19ace891312917d6cc5a8b212bcc7da750a9359716a50984014d1248bffb410cb651ff269f419e7d56f32f4e632287de8a031e092f6b2466779968875fe39f9f0249d6509607b6539b13a652a840d783575bc7091ee0ed669f79b712538eb6979abd278a70a9bf72ea682472320f631ca9c95887223cc0cd1757fcba4dc3a932e887ba0e684ab284bd8045d786b994d82e508d4570d9681806eef662527ba590cbfed5cae857a321ea7445283d8cd6f086a790411c24f62a11f388e2489f1bcc83d571869cb3fca8f520143f3b47b467550b312997cef3079032516b56c750a31d580dc39ddde53f6a4a3fe30e41fb14c6f0c86d417dd918074f15db1eb626b1cc8829780b7d92a63499038765295224825a3c0d938a2ad9301df89bc5f188f605b1ed6d8567e314e280e1a7e2c43805cc444623f97f5bbcd2f461bbdf43fc43644ab47a84983f667aa287b089db7bb4832421d067403f3815f4b243f2f7b39b72f6acaf3200201afa132640688850ee8e7de93baf004c5812f97b56c985c293632c3d4f78c22ad30f7bac79b531eb92e7afc90ee8efaf412c8c3100f5aa407a2ae60836a3a325e723a824ea9b378e51329373fc48362c57a2d1c2b2b412ef1bc6e1281055ab300cb6f169cd6969e0a5b5931f5dfef94b7f4c164740de080bf29fbe3c9a98cd7b6689d2b83d333b8a37c69bbd7f3499b7428b9c507fc4e858c9ebe00f61653ca6ebf72babf1c2234860334784a12704bda33ec726091f6b0c10f6a90f212ca0692172e80737aa32f52991c81b9a90fdd5c11c6b76e91c387fce8d2eafe3fc849eecb00cefbf22de4b1b491f45490437286c57762918f15d866956878650d173b72ba37b4c3f7e3420abee582fe897ac0e98871ab43b1bb6794d543b31970da2715368d6672016a1ca10e477f46a3ff32801d6f4cb4e4a081a57129d770d3197841fbbc2d93218f1e47e72209ed82f4c39f781e501a1a1a442357de16cc96cd00a5cfd423d51077f1e07e4810adb8111e4be9939dc9025de9738236c26e274e520e40f65331042ca14e2afadcbe26710fff591952bea159db8bb7dd48cddecec24249a85b4822d39befccf0b3f510c12c08c6c1259b1c82a71a21cd95f999af0b544745de46a4f33069b62e246cf45b6167a7af93794c1adc98d36d07a0aef3479aaed3e585c9b9e4da6a258718a2bf007d6fca78279d6e9df9d5427699968b476a3074bef1add579300d7fc76d8bd78ba8e5fa7854fa245d65f3d257ad860e7a1f40f01a4aa8c9334e64ed247f3fb66f697d3d03c4bb12de586184eecd9ca57f7543f8c1dc1a95fbe84bcf4e28a4fad773450f8527a874fea33aa1f8c69f7440a6e75ebe6235e2440465b22d21ea9ccbf7f14656ca982a99424106710d377b97f6af2d34813a4722aca598ced0ed5fc3724a0580c16e5eb4712d0426a6294b57dcf95fedbbac775a1c20e21ff0e4f8fd83859bcaffa4e3282b2843fc641d34f0fef4fad9276e34f819448918d3d401d7a5f35301e1149de17bb1a3d0198ddff6bd7191565d0596129b14ea48a07c14ac5e420f8b5fed96f53809c0b47a552908dbd4708ac2d2c443caec8b769abbca3e459ed58945a930098131635a6a519e6d584577b86b076190bd36fb9f527bb45a4a896f0a899c22f3f1347a6c04f34c3717a6de00d6949ee1e1bae51fe38f862193029e4a638c5004b13607e15ea5e3ab9350e6f0f5bb4c3b10f18b85f7f1d101ebbfef3425aba7b50afe40aa948cdc2e14908fbc3d7faba79cf9f1937fe2a44ef61a3656078fd8964ffc9fa58c7c0dd979d416d4cd3c1d2c42beb6cd7c68c164a42b05709034bc548512ff4227088be31a34eef0095152f935b993a0fe5ae6b1a6c5da14f0e17f025eb53c68a66271b8e0d5fc35934afc144274a84b26dd58d88aa5e577b4c54a39732cf8622f2a9b147c62c487ea8255af912ee36c7efa59dec6146f460ef74394ef8bfdaa9d393430288d4537bd3fff329646a0168a1009511fe74953324b8fcaaa1d3e89939ec20f0caf06857f1216442e8af06d038cf6b5b4b5b7ed94bb56e835a9e1cd52a8a029ceed89d7e43ef32c1336d6ca16c1e2ac89af1950dc75c4460c779c5899acb15515a674de7e5027652e2ab10d97cce783716fb6b66f4655e64c8d26eda94e349abf69fe1537df356c83accaf7c94c78bcf81d0b7df7fd603d28f53f793895590e399bfa5d755a2ef40ef4732b0aa5559c3980bc327bae8476f3976c790f07e211403e07087b58d64c95eb61908d7240a24210f10c39c03fe95b0533e2915d97fe96e4814b78fe002343d4526828abb376cb46f0088ff07d86616f7e48f82e30df689ddddc503845c95545d4067f15ce0dec2e6e21d8d25789aac6eeb3d635382da9e21c7b364505974c83c2da9c176aa6fc1fd046abc738eb53338e5f2014fcc44fa08400535f945e8e01d1cdd46862d701134a09ff50d99c2ed93d982000c4e60bc1bdc412a468fc4ed4ed18e7119644e889cd06c37f18a1069c5405948fa835fb99fceac193532b4bda5d9b66628d52a00c6e5d4f57091e6dd9611da39e7a86febd6ac4b08acc56956ee60419e650e6c264f40d896da9b67e58db53f985497097ec64d75f9fdbc08d2ee0730cdfc214231c20cc1a28cf6edc207d8f9fbd171c77af686f5f06f2f600c0ac3b132d31e14dae3d687a8150300399a80e83946249b020f620e459690ce3ce14bb4ba2d982e5636f4a82af5219d2862bbb311a19d2818607844b891eeb00d5382cf1d6224d959bbd93075de55f6f3a354e633483872e1e69afad05013356c83df484c73072ecab9ba950070dd6040926faffe63c64c0e0489367a74a35e2e2f0d953516da3653fb6e78f697bdbc3d6badfe4168b11eec5aff3cd6da424bc6efcc94f0818bfff870af7fc54c4fc24294cd4192e14bee3f1e03eecf63687073d448c799111b2eb982b4ff70ac629839de369e85b4f39b15a477227b419ab9c43fc3fd9e20fe0a35298fb491e7c378cc5c8c801a86ec45b5384bf11f868fe86a562aa4a78b9043e9ee6e30fdf39ce31aae67ea051577b544dc50aef15a95cfeebec55f060cb7bd6c93a437b89f0a4c1aa2164c8eb0ad78b2b43dcd2214e1c926c919585a2d4d6b43043c800869bf4a97d00021b65a9237d4593a2e403bf34e456315f32ea90cc2c72702ca363a21fe2096fa6bb0aa7fdf7209981d1e98e3384a4a73c56a4ca0f6709a2583c185d9f78d394ec90265fb2c7a10d40dc23519f15070e6103bb7bf3ed3d889e8d0037b50c90811cff84d9f1edcb507f2755474d2ae80d9ede297e5104f18e953bf30ed8d4d532b4c6277a054a27377b61066d3bf435c348fae3bb3d65a889af1cecc5386e0d0469129d4a549a2ee57b2e6e25506fdf3a906bd6e6846248fda1f657a8d449144f3074696ca6aed19cfca85d8c8d37aa000508379f75add5710b97fad14a7a9f8c41d10bda13f073684333ec221b99c8073c118d30cc51c9415843669bd390d5b9ca6ba05c6132e7afcfb9cd64643874fef998d909c5ca41286c1f2da4ad9b4baf0f2e859a5354dba9ec2dc4965323543690efd5c2dbfb1cb87503ece3757d8e19adebfa290937892ddaf234af60110dc37d25dfd4573e5e654881c1d34eee65960140254db046eeb86d0eb2d6a4b18e30f61c13032666ed88915a42538b36009c329a2342475fe06596968d207966562788ffd7f66a9116e335c3dcd706c4891d94346956da538691819df70550077bfab46e3d748ef7ce1177cefbf5f3ea5699d05a9f5c64bc0379cf867d941b0eac951fad8bb1ed06cdd9f1dcb550bdb4e0e4a2bd221287d47068ce3636efec2a299daacab3c0c6391242f8203d9c16bed074436d7da516fe94fb97d374f39f24f313be922db540033a439e89320470dccecc769b7ceaf39d7f09324a436b9774ab247281c9ff5354ebd695b10c0b20215987e9324e6425fc8dc6d57e04dc75279815bddeb56c0501d659b7319ba72495aab65ad050de6bd3a3f18d9db049315e74c21ddb01d9407baf8c247bf748a43c71d563d899d769ac6a3b602f68e9a14b37919043f11bc03bfa63614bfe63643cc31102dc84b02d7c9b0a08d2ff291e59958ad1ec83e5d877b801347770042451e18702c63dd36e7a7652167ce53f33bac9501a4172d350d98c6015cf193ec76733f46571819655c5f36590f2f98f0de78de46f5fa036e0b1d2e2023cc051e9b0a6890e066c6fdd36108c46ad29eefdc9e2b6f5579a3700f540b8bcfce008cc9b6636dd5d390522bb0eb9ade71817238b1266d8e5d173e8559229ac3dfaddecfd8028dfbc0301cc27a7219c98d2e6248fdcf2bd43f6769057a769b093382b81b92d967a971e60cca8bd61249201465f24be8e00aca07f2fb8c463aa088c9c74f104b0fef0651a3b07867ef8dc2eac26d0e62371ba1a48e50eaa0e3c58719e46ddbe1f6d6c2594ea8d970577de7292389d1db0305bbadcadc10a9c43fed0e142dcd173706ba5026c53ffb289155658fffe81de221bd2d309035f9e5597835155105df1cf33f6c673901a8b3a98e1a365cf3bdc22219a43d2af6afc4cd25e3dc49d1e31e5a21e9be540dc7a4e4d497c5182e54531c7066060f4a26916ed7ff521b28a361ed87755a687f7bd56c4bae95853e62f2306db46b4be7bc8b943c0e42dfc224f3932d819f28b2c567c82ca124995866048572753ce78c3ccc39fd57439de36fe85e51ff5895bbc00100cd023dbff9182ed3d371444d58cb39af4817db398dc3a8075063343f1a9f19074ae6ea55efb5194b5f912c45754250355df347d32172a6eeac2af0c103daedbf91dfab319dd005be741d3ab8315bc0ec7048150203868c585695328849ee2e1841a9758f7a644afbb2a9c04b6d7f92fc005acec94c00ba2b1cfd7072c0c0cc72acacd0a4bdeb9e1d3d2bb064f7e47966897fed3f22b90171a4f9e059019cad2d584a8a0f33f7a2fe311608fa2d52de3e4b38c199716da0a3acd90cf26d759cdcf9305f6950b1eabc30e0188666ae47f17fbc1468053231d8a0b6d52c18cd2297b86f4cd36d60cd972a2aeb3bbe9f159009c358e01f3b6d200eddc0e578e2eecf8c6e219889b8ce040376a599fae9c9d4365837c7820bf66d1e231e48753ee61e1ebcd4c2664c2439b71a98cd2c01dea07a6a51cf896bf4d2a826b22b688067b5fc841e87f64dd0b8cd779589e0b08d3fb852a497922209c99d6ea3d68b0c5ca5b9cbc50a5691781ccf16227f28afec0b48aaad115bda08809347ff7dab09e67445685525b6e803152ab2dd23ccea45c6cc817b8267c663ca63b1884922fedf97e5797a37a2bd34084836af3f10a751b6720536727ecb81654260f60f6271bdcd4d01e36376dbfac78706de2b1555b1fbbe38e7105d052fd9fdc0ee1ebb6570c7e187c9fa0003e88199eea4e129f39ec4fe03d8f5e7934b9c056b16a677874e3f68af2ffdc690a4881ecbe209f82cd234d1ecf82041acecf38823ecc68f116b5c9b529fee81d83645d2500b44b6c23fa9fd2b0eda40934401c5824adf7b48a83b3a06a9bbe8aac4db9917fd9b5212f75d477d423299d1d30d42ea2183cd31745c540d9a43e6398d4c2b910b2dd4a9f2898041fc17e61f9efd86c10b57d33cf2d0b639e7866cfd0b3f574bd2e744740ad87a6ec739584fa449bf7f200d0a082936f7e06981e03f2808f6a4cb82c36a75a3a8c33c4a2a382d40db47dbf2232a6eef158fe18c9429a78b7a7a46464dfab44a88e7afc7702e32bc94b558feeadaac2b7bf5e68756809dd8e4c68c085aa05ce0b610ae7fb0bca7e0b511f7e772f6b432e491904d997919fa09ad6a82e3319dc2e3ea9bc2650410b0f04c0f16d9b078a18230c8df6ed9f2ff5b7bd47af2836e52df2f53c0e95b69b0fcc90e49043cacf83d76664c5fef49d44eb87d2b72c2af4f6b9fd7dc80e6c242251d837148290e7da13581122802578350d1021d0776c424a7cef3f308c411ff83027b5d417eebc7b55e517e4fcccaa4ccb0db8ca15adb451504ac160c27919adbfa4255dd2370612df47153f5c23e0b92fbda1bdc2c017e9193f563328168beaca180d05b477d0554cc95c7d01b7c0bfd54cc65052de96f99ed136aee313b4e06b9507bc048e82da67dfdff1023ee0f8fafc737667c7138f89814c60febf2245712f2e56107ce1953287e10926ca4126fc8a1d06ad4687a619d398d5bd7af4ff1288f3c52c003b1bc683fa7a679a22fb22e86dc875202ecfe30bc3f54a7a7f32493c967659f0af43760fb8ed182a5ddc7b15b0b1b2deb5f977542c950a6dcdf6c33d25438061c4f5c0dcd8429b04dbbac9334c1b0785c1f7c5d75eb5075ccdf27b053265cd6df6480860a1b048965b1c5d04530c7296c4f81d7d5f7829fffa8df2276c66789ffe97b75d001a75f83a002eb9c05058a8b37429fd9a0fca63b957019105066601c8562f51aa6ad7bc4f40b92a04212c1c8ae957b26cc2783f2e8a22aa35902e87974c3c96374f036c16cdf1c4792ee4c10afc7576601a22a118e8398cc9e1e69ff38e516bbe91a3b0441f1ccf3e2b309e5ccb3dad28807a110d9563fe9c2b4377fa121715aecfd905d50e30834098fae68074323d02a4d313fee26f36cab4bd1cf6f33d9322ea69935fb9f5a5add238c80c05285fc21da7be00c0c2c122d65d2d4139acff932be439ccfdb3d4fbdf1524f081c647aa47e719cf7209b278c0e39825f2b263ba7a4386fb6432f6af90b0595dbc47265bb93c5bcaca40fe0be9e01ee75256e1f5a73f898e1151e049f87c8336b942d68cbf939779d3f0af0b358cdcfc6997a1c0b027c44f770cdfad8043274ad4edb8b83f1f0b929120492024f95eb926db040b8a0f7221ced5508f35ce5fc997c2fb8221a993a7ba2a8049bfc1b8cd847d6a23f38834c77e468a5e7fe51b3d077cc84b26d39a355496ff4b7523e76a936d4ab543eabb0342818ecb52e1ea208eef1a91d3914c94d0e715f43dd252337fbe4ed641cb8dc8a2a2b36220895b4cd3f9bfe18b4cf6ec401e3431d4e4292f667975c67246dc3dc1ecf4df449bdcd55881fcf0cc77e14d18fc0f4dda99add59438ae0389e17e330231027ca77965a25f8f436f8969a4195fce788dbf60d5c5a9f76016e016e6447f88afeccd6ae1d541b3fbf9669552303b79226c724dea1f7fb0b1d643047f84e8ee6aa02c6265811d4b732a9bc44ac6d3d04575dc9d72938a51500e3a2e36cda7710b1e2dd0f76d2f617a6bf0927485e64e976fbe8c43612e8cff0ec33c522747d582a6f549ee24cfe839ba045f8442e2ed293e33f758c33b7cfcb9bcd4d796c61a49102f93af33b8d9ed2b1e2b98d7bc5e60259e19ae090f9e7e5837677a2fccdae2cd9f59100e1aefe0bd4c75dfa28384c2a4a778d91bb6ab90ba077022e14105d57c7fed64c7ebe720195833a2b5733e1a5d75ddda21033b5bafef3fa8eaebd30c771c6b55646f31b6d6c802c9faccccb985fd161f1a10c2c342fbef8b5efe05cce88e918ceff4a9d398bca7f90ddd307037c6a0d25ed880aa7c7c96edd40557cfc156c2ca40af00c5b4301bc6f6cc948eeed33bd75c7c308bc3805b96e957e0c74c774aeef3fa41d17cac5b2eb79d4926a678d2533281493128b9d7855f17a9cd93f6ba1bbd092db06e33ee13ae856760302ee83820dfc2768e2d510d2b7612b6d6d67ff56219feaeeecd7ddcd21415f8c4f0c413a64b916481db4acfab7044969ff0bda042468f63e90aabf359872cefc71c37f07f995e9f6187d1f587da7cb8e258c646eb9ee03b156d895b4133d3d8ccda2b910940883bd231456b53e6e20e3dcced0193b95729c4826944d53ff4cbdf0bd40490bfb95cdb3fc0257f197cf366c4c73557f34a67f3ddfbf493f761f9109305ae81c3daa3a04460028493494265f49984eccaf4c061766a4ecd42e1ddef612ff2765f63e41e8a0134d2366a8e34fb272c5c884c6bab13f5fbcf8811168ee5494d0d5e3fc40c60a3ff39c1e4c8801e3800f4752650ee6ef41e5bff78cb23791cdd3ec0aa60df6fb6b847d8f895a386faaaf6f8f404fcaebec2ba0337dbe35eed95e9e9d4c3fb8aa6c20fe262bd8fffc5807182e1dce75c3397cf1da7c2e034f9f2bbf737f8d1c7756f78926aee95552b269672d8ca5d463494f95aae269cb0ea8c52eac292ff20a80ab123d0156a70b2e18aa30373314541636cda910a311dee81a914a5bea0ba39a026099f87826ad43513d3de5261c16bbf411dd1b1b3071a5d6a8a9fbf1d0aa27fd135ce881f3e10a09ee4ca08dade70d494fc0b85bac6a8362a7b04039d955377946bb446bcdbf1df037d64954627a7043f5603d93b9ba9b81900b738dc5f1812f13f2329a4aea5643ec13445853229c36741a15afebb2f57303ae6032b0f6aafd3c96b3c62c6486aaf78d34a420a76e17e76e0b58627b977f377fb350d74fc6131dd166c551e54e6cbf72f75e66f4d40b1597db4045cf41cfec3dd4aaf780aa6657b9e744d8010334266f5483992e8ea7c9fb1112dbaa97b3cb6736b8a920900c3f4609055629b032a2683c5c8588fcd2bd85646bbd16ac2e0e13764d574f68d212c7eca7d27ac80772321885ad0ee850715815adc39f9201ec62ddbada336c3e635a137c3a646fb02bcb75c7b4a844184e7686b04a764a0d7af42f87b641174ed5654f93c8afc0b5f7ddf70baf3fc3de17ff837b334d04925cd5fd541d30bd1bcb8aee3c52b506a5f61fcb79e91a0ab6c87616d414ad6044b40cf0754c9fec70cf5f79b5f3655e31827c6d5cc779ae2437aac750ed1cbade5f980e8a3d25874a2fe3df5a0c3f3299c1aee98c5173e4114fcf0aecf3b5c39677663034db255042eba1f2996ffacb252fc3440e58ba27c5a315ec9f56ba48e302ecd28de8cc0d73af0f1aedc53fcbb9130968b471f5e2b9c32da0a706c728c212231ccf71fa61eb09a81b380ef388828aa78b19a645b93e76308127eeaff73325751df66d154b292672d13afcaf7bd94859f1456af90c620e30710b0d8e5d85776db5add3f54c9f7fa481591a10b1687b055fbaa1e9f130fbf3f8548f9687e9e25b42a6fe9560143610e000caaa7ce5abebfa53aedc80597fc436047debf052b96dc9ee07096824f965a466d04c5447216adf2735e27547ede018769c96f1b7df1986e2ef1ccce8962c24d6b554c4df4625f99e1873d7d9c5bc79dd92bbc76be036c4cebb0a7dbe0386138d7760c0c440803ba2ab66379cacba3d4740ef7750331f386a54d176dabd4f4fec4bfc100432b0198663b92790dd7f8fb62020f788e0b14f59f142ba026b3cf12a71c1bd3084dfebca819857a42970647c7a9efc085a51ab7c419a3ff8630e4892164db2af82cc9d02cfe160d4d1eab9143efea1af1a7590ceaaa4549d99516da913fdeae107065a0d4667e06e0bdee7af9cdf342cf3dbaf83ec97c448e2c079a54406e5bcf208a4abf283e0dc0d55ca9949820d1ab456c9f27eacf1c55969f3d8c9769a93e5e77858a6c12eced4e4b308d30bbc09a1f3e70e7bd9bf26d8611d4cb15b8ea8078695acd4255704ddbb8ff0da181caa09aba09acbe95b9a4b2e2e2765ce39e1d4b6569a730b0161738937e326e4c2314e125a21cca1a467cceb388eb993cd209dff3bed722612fef96817dc109e340b70e9dce05d88ae1e0e06b0fb4d0f66f7bc1ea03d028cf63d5dcccc6fd4ca662f2775d3366af66b8e03c51a00b8cc63c0e4b1ceeb8514c961cbe4759ec8fda4199affe1add48af01f26bec557038941b7b8e677fbb1e0824de5fa32828ad38128c219c2cf2ae054a38f575e5653e7c0678e72d7da2d29ab653f7f43f231b9a27929a68853395bf589fb20795b94b9f85309b54ae565daf469fdf02f802eb23040277ca9c8777e142d0af1b6932771e3875a8eb3c7b6dd23fd626fa58f7a01953e59ebcf821927add215688d1864059270514bbe6c08484fd5608650362be0dc14345455cb61663fa9b258000082af49534421fd1e288692c9310997b9d7477e471fa61fe98b45494cf08d97cf12ecd99dae2b04d031016e2ba6a5433dc7f003e3dbe7065c7248c1f30bcbc4ff7f4502f68a15e0fa2486222ee7a7ddc622e9b91c8c340bf0630774de75e0ec83b3cfb404f3d998b1f1d03b6a137266703d7fd8c690b1e5c319819b71f7dc98fe757063b31825f3732731423534106872ce8e60f2fd77e2e9d54f2f16885aafcf8528d620ad866d24a39935ee172b06a99a530933e8d31c1434c2b056d9e16d1b87fe1dc6535583056d9ad0d92389ff55ca30e692e4a7eeaf78c5e51c082e2e48bfc059a9a0dc96fd44e70e124c4dcd57e3502a8fd4ad2f5e2dbc079143c05026723fa4fbe0182c866abb403bd95ad8adb4737fb8607a4ec602df29fe66c2530d383eef147e60aedd9b3b505614cd82b2c70c69fc5e5218c06dd84f7aa2329c0a1bbf60a8bdc0701576d4f996ad4cb9dc992aa9f3cf8488f47194133e062e409183dedbc89d1105547a7c2e0aa1dfec81946da205396b9f1d472363b8e0a247340112da9eda97461f84cb8a2774a6500cc9fe93538ef584571b6d7aa18625f83c2394a55b343cd4f79ce89704b2482f8902633fef052906c852d0d7d12e3dfb65894db6ef4c29c10d59fda733f7533436e117607562bec8f4ee94973c201ae662a5469b99d221d388b9b340929cebd0c4e714216a2ed7e4e5a149f715ec87935949feda4ccf3edd7f09619fa200748aa6c29267122d5887fc0632b28ea3321c299f876fbf519221df9f5155f34afcbf53e40ff418df882bafa7c9a109730fe734cd27de4215c22c11fab34d80b11fd71ba8a56aa3f84515d2fc00d03a1906fbc3f92af55f3411bfa32434eaebbb89a9facfbadaadb0429a6b1c194be0fe86c427202b6402e53e16f8e60f780739d626be7fcb1fc7f6409a3032444758072d82627bd04c9c63791d9c545e2ef6656d6ef225fddff6d2b4ec8109552a585b330a54c0a69db87c1bed12370a9239e218f946637dba64ed7b48f7bf7cefbd9f2dbefb0698603c359b45345198012adff612ca6bee0756b2bfa255f1dd89977080f634a50f5c850c3528795fa93590c47645863663e3653ead4b16cdf82a91e60a0effee0df3be8c49fcab01abc3807cd5ee31558de9a2bc23862c41258d64601d32b014f10dcc0d1201ecfd11c084ff3678d67bc21f230a994426ad6f989d4d841648995d0f4b571a7e050d352373415a5af83aa28184d2dd65ebea6bd69d7307e381ba8cd076f81c03579c286b0419d07f94499cd1b5add06e08bf1fcc3a45f4d3deeb79a0a8ccf80bfd5e68cd5f918e452c14a8f793453d11356e0812b3f5f5ce5b2106bbea8c4fb1db6140e520625b006e8a2c44220afdab2ccc30b272fe196bc515b5ee7fd06cf2de4b7d2e34a45744ac1697f9ff054a0df7a1b535392a6ca39ba18b370beb3f29096a675cac99bb7a16eb70d9ba1e90d1fd6e155130f39f68a32448e2bf84f1a721c2bac3b184d7f26dd01507e1f0325394d3b1feddf2870cd419f3573776bc34073554d580845e4662fbc923818e6b292e6848f86003a2c9cf4595862b7be5e2293177771d7f3af5151be7082583bee2e5a5efd4e3f587a0b1a97a069efee3d3e3541ab30b99b9378f9588b1678b967c7488d1926bc76bcaf3134de6707fb339fabd6b0964436ad5bbef81210c662549a0606dd395800064225d1eeab641fff2173290a225d3b1c234f5a52259db7fc2eacfd7753e06defb49efb997eaaa865c35e14fa68afb26843c1352920dbb87668c6119026c09435c73834c53f0c7d02d02a29aefa65ce81c13dd9486ffb027515979dddc2a6e738fbadf5dce8e3ae35defcca08cde3e10e6f7511b1fb03326dc4cebca3939c6d90079b7871e365d7e08245805e9d1aa68516849520797319a07f22b5bcc306e9b4cc0e142336a14ee4ddc02f1b6d0446c68368059fb39c9691ef48d7211bac215fd1333bd676e7e0c8e7df9ab7147c811cb90c16a0def3a315c6aa2d268e73f776a65e9d5698286483ea4e75d03c8fa34f5eb989d12d0071557fba18452dbda1ea7ef7903dfe990025024b691773e2605f28704636c2b0b86992cc222931c7d4b78ac7811507b64685eabe00c78b1d66de5a764eda1c185dcb327b2d2c464a0d94f922e1fee933562d8cf1704bc67da142e8ee3953b5fcfd239b011b8282a869c8d6f1b43f2aa6352a0b88ca6f273abaebfd71e8c0e0339ca3d6560a85729ccc32bfee9fe92afcda548a5a5b3cacdadd4a191c0d66d8db326c923ee59cb04d2e9a3893f3f0c8e9e9fb0ed545baf6832b0479de36707f1e496182346677a85ba18d9207a5702c1e6feb84da5c65e9d03d214517c0aa59b5acae7ed79cc1a86242ee30bc4459815bdaf85c93e933241f5122a269bc130af063a80c9cd02daf786a8788b3a8fd833ada153070709e9c625b22312eecfb459392fa6c719138590c2f3e229589ad69a143dd698357fe90e6c6b6502652ba46e26b89d5fa7d856a3eeb1920a9334f69077cd0a4f3b75809ba51def0c10b929b2e974fd90aee4e58836ed1b2a90f41f52130da4a9e5d717b16fe7a4d0c87398e6720f981c0f378b9858d6ee26ff5228550b8a4fe27b4661507b7137fd0a317c52b0b0b7986a28d86529b383b8a9c1a59466b5a53b2c72b9ff3c164a969b510a809ef7be9906d1d6f5487420b80c7d2fe08470817b574653b8152d84e02485a16b7479b344859b8e21708eab4d2316529bfdfafbaee71ddbd6103bb79c6f2448f615baf2c021841a6850456def49f8c0c371f8c40a51f3baadd2bb991248028c8ca1507bafef8117cdfa2a0c5c12a6e73cd325dbd77120bae807fe23a9cefca71b879ca26785ea7bed74091e289f54ab9fde08dcc58cb866144f3465575d11c950b8dadbfb8066680388bc9ac78943670ec7b1d8828098c2facee281ea671eadf490264b1b87c7bce4dca1697455f7aeef01470eb86f74dc8e57276e5d616f17d3e3a87bce384c8cb89039453efca47e42f045d6c8d8a7ebc1d54b1a9fdc100754ff61733de7f669be60da89603d2bf7dd4dfe039720e861bcf64cb52133c7b95b1dbcd6467176379a0b0d4f93b897e76b66318d13b5fbe0b178fceea424fe8ef89468c37ddf8620eddb3a189e7bf85fefb59d05a0e244a7d58604651a74eeac020c365648fdbf81d76af98177bf99214c23d8900f212cba963bcbd2881f073fecd43baa4612c1c077c6cd54df96ac10f55288b655cbfb6a058d96506449eb50665545f7b519adbe4ba06258e8996c284d3f9bf03b455ea0bae93f85a26e0d525c4459f89582f7c7aa2ac82d1626b56f02e7d0243da837cbfb8dca012b23d8dbf694bb79f62459b9f1c3a615b5370bb75e4a0fcb2f2fa4372d4842ad6375ec6064526a6765eebac6cc53bb7f0beb212692c0f24d1a601e80064e76f5b3d38999530dc9ea40e2de6a3119b8a8fc5bf31774c164038e64d0ecb524ef4cff9f5f9f13cc728b66120081ad0ddcd94e3b8ec855c4fd7bf6091a2b97f8ca0e94659787098be10ba088e2e0e4a11624915211c989cff4da017d88447d106b2548c6428fdff1ada5e081fddbeab60b0d6a3e7d94bdff8e1d24a7ac4ac06dcaa0011524ed66533fc7d647e73c779c8f18b19a264feff10e18a2b61e942172973de7c9094048f4152b825499faae612b7743d0de95a2a99cdec6e24f3bbe57802e4544c2a1b978ac5b86b857b7063f30adbca26c908ccc4a930dc3b01685ea1d8b80faf1d3f028887261e4d09b33e8e436597ee8f610d64bbff4a8266f3352e68e4ece7aee5ced47384bdaab9fdd0b337d3f45b452a6a5d0761b9a0a4840b4cdc6006a9c306c268f3b96608889e03995fd8670bf2006bdfa3dfaea2cc4b9a87f91bf44d36ad02156d9f2057f292f92793f4319848ada6779efb96f7bb3628edc7866918d06955a8d6dec980253243ec4fba8b521ab6d25447055f103bfcff76373856312b25b84b86bf0e49917148eeb3f9e9d7d36d28378c958b7ac19f43b2c28f93a3298c4d5866a06765d9450379570ab7ef5c16fc0eead040b905d656d8b7bf9bb8b81ae47641f4b99ff684a00c304ae4d4673ff865b50dcfdd0de30719773a03993a124933a0d98636a71048bed781b70fd9df0b2fdda24d631f38e6f7bdc05628b93190df052afe9037f160714dc167e348fcac083dc4198ab4a4267d8e45d58f07b0386ac4c9174a6f813c6f1f60241e3bf7daee2a338b3e0c2e8c5639869cabafe4acde55a93ceee744dcf918bb8c58b019aa0c368f6a921b40096ae656e54c866dc25b910c270be76121d122efc0c7f505257908b7b7876109fbd4c97bd62a9b46e337d25e610bf4cc6e1f49e994fa2f71224476b25f5f7a04b5c262603671f2fcedb8d29f6931db40b6e3da7d57ef44b44acbb3e8490d44941cecde3ff92c9a54e0dc88432e4736b3eeef2b754489616b34063b032b1da7b4d035418168887bcd2d2c73bb8ca82b8f89526dd5120be399699ce61dec267e1b8f0ec2537176376b614b64003410591a0e6f225ca663387842165e0976d971442848db743a2ecf4d86f9d95ec91f1fe27b169a9b2988181d7ea7730802e19021e7c90429d9b6ca5f74d69e2283d202c8593ba437623be34e6019907b2b5b0195a4f9ea7f084a816ac6123ffb76fc021192c6b2e222132df62734e5a70148d3171b4c2e2c4f784b8413ef5dde3a1f964623be67d9a8426ad9acf98b6546ce24f1d9c50eb4532850deae8ab1a0a15cdbb83c7c74414fdb0d5fb6ff1cfaf2ecd37d6554d7e3bd604ddae35db895e2ee8da8c23b846dc1916e8412f0019fff53cb8a3a4e05749832a7222aecc5da9016708aed455b1eddda0671214c9645d7d7682687779b71513f2d72f0316b768b79f4a5712a32db9394b775f444a404c2fdc2783850e23eae343a3a6fd908f4a4713d78260ba3ed29f1536e56618a83faf5294270390cff1223650db7cca633479d00cbd08a2de4e1401a9155cff6584ee8d532a3dec0b48973e6a8d85666b1f3035055e844dda20fd6762aee88c07135dcba67e23bbf703d7f1df83332791c18fcfc1ec66ec900327931fb7fe600d0e902371d79a58d7640b5ce576b63b41e6fc0efd64204500ef21da963da7ff84ecf6ef3ddb06304a02914e8e13a755c7ee2af1d9ab293daed86eb81cf42c4739d5403a05a02ce8106f2025da7ccd220a66f0f07ac567be70ca7ae74d5bbffb4261fbeb74b015d01e7ae4c8cf0c46ab4df9403c5ce52c488bed71ddd95a5ae0b26763cece2d7bc2f466a4f1a660df264efa8e990cf06028d257385049ed0238674918886492292278671aa03c1d8649b06dfcf27695608b823336d9a3014a1d11996195849c8cef0a336cd3b8c5c61c45f2f079f592fbf414e4d326dead91e59eecc09abdf62dd5f31cda88e3c9fd29c0e3d3351932de72a70fd1139a6a523f78f13de0b8fe2298cca6d2641bec196d4623ba62e34a1b46c68005d6fe2d22c747ba5b4517221a71ae562a9083052ccc0bda2856d94e577b4e9013a832f266bb13696157aa39bf92c5a2f28cf9c7e48c178fee1ce31be24c121fac5dc640c2a894e725b70b8e960040a53784ac53fec34440c57e0d1c81be0acded444ba17781f2224b6b1daf67d50be1df052df69aaf910829f60342a8a87fd5036f3d251cbf207a307b599237d21bc6f7af784a22a0c2a7f7eef0da69bf1124225daf396678b6d04b6f003bf724e5a42f00dd265e9075687d5cc38c2283df76d7c50c0f92dfc764b224689f141d98be30ed5d28e43859641e3f166931d13eb68563b822e2a6c7d7c3396755702f582de42519e66b8553dfa5a6c63c66d1359bbb9789ccbbd86a00b99207d61277439bc3a2d5423fae86f13fc8402db7778e62b49e13a3c59610facb62a7e784f4656dd903ae4e674452aa8023a5614a1f6ee8e700f42eb5ff9ae09400bc105139cdb169c6ae2501166107d24196745cee316dc7a43e01c17672ec4d9b0e8d437c1ed19973efae202c719f50c8b8daa08b04e549114357ab8f4a441c72e6de5adc3144b59ff211cbd2388f35cd1bfea6b155b2a7fd5c11d42dd8db54ecd8ca08e505e475cf401fa579a891abe62f2d5f7cdd6702f2dcc6f4e326e510aca130445b427bc7a84ca995cc1d85e1d1cb0e7315d74a3875d78bdfd28176828d7c86f83e7084f26b4e67c64389e79d888edcb5b9e704bcb1763daecd146be032dcb5aeb2c69c701420c5eb1f3786268983379af11985e08d1fb67301af02c109782f71f37dcd99ff5e81c009423e8246eeca90640f1e9583a726f964ef1bcbfe2ad2108a4c143a26634e0d42421934c7d2dc4337fff9c8532b4171a16c39119575aae2c336236e2ee79d2e21a5195092e7d70efc4e44a308f959dc334e469f7caaf0c6fa1832baa49f3fd8385fdede0f4904f2b0f342cb43afdc46992edbc64950425665d0c81b216a6acd3d3fcde4261866538e2ef4279d347cb13c6e4341181aec77673a1946f04cfeedea4a36b5b2fa8fd050b48bf4f864c8938ede5d4abacb7d2c4fe7871d1b7f4af9f0d086b832bc647f457ec71c3e6f32b366cf89d2939768310f8299e385795ba952f493364c2321e152b8e1f00d95e9edd41537543ed37e40d30bdb8405bb3a8cfbfebdd748605ea32408ae6592164a936d3d0b259394e526b91fbcf65785037f92d423ea5cb6b598ba51bdef4f4bbc27b93e3ccbd97b2833bef8f2348424a71cb06e880658933d900ba7b839838f3c71a96924b4779a0fa61d88ffa361108c55b4f6500adbbe454cd870fc2e4e02be19aa174cf9d6acef7dbb5cd13596495f6857d26cfa7ab51ac0f232a0ad0ad556bb1aa6553e3e1be92d63d1ce2380752bf325db9a02b091febbe130a7c89e847d2713c99fc9636ce962025be6ded5c65fbc2ee2abadbaf58a870ba71b08c5502ca50686d8caf80ea42681694120bc7569e13c77b036c3bb52d7c7e90cebd3af7975973f4a0b42810bb90f409349ad01ec2ab8e7f5466f511450d2cbda461393fccdaa5c7f13023696f45dc0a1fd9edba93272e4fd03f4bfbc752e71c2f52c29865b418a38b5cbccd07eddd8838c25f2e87d195c8130ba302c50ee1aaf71f328a3484a1c6a05dae2850b6b3301dd3ec1ee0b02a271cd85c6d4d2f6b35469b2512da6885f08482640c723bf924b47885e911c49bacbacd6429a0d7f9f3349759b8433e3232b6dd2cc3e671b25a1b2d355bcc2b3654d32006a61afb43423041453648d206ad738380af0a2b658ecaae964610832950e7583f301b463f2b69307630056914c9788d01b1f30b168c33994317a0dc9a533203206462e585a3f874fdf61d9e65751d0a794ac15c622b1bd84bcd28b4814471fa636581fb72323dc58f0492e67028b4ff99f003d2da2bd8db1432a1f6901ed14a41fc07ef9be983fc9fe4a7fac3a52966b22df7c04a909d71274a82ba183e4a32fe9654c3abec75b35fe20cb9d41a861e6c9caf4f759308b0dbcd75277b1104377128be1561393bc3be9298869f6e0bd454b8b14983c4ee1197fc89e46273233b31ed17d028a9f101157ea425378406c3f85e326688b11d07accbb155c7b3cb2fbd54a66418180c7f135659b1e9a9f19ee48d5b3b0c6f438258e904c9b0cc72eb100b483c43d623f853f25e164e06c3cafc86f331fdf75b0898c30a70fd736f84b50c8eac74a2ee182af82523fb7be9b1e1e7ad49387e9cf48835a4e42da68b308d2bd38a462508b4e1aede1e39f5034d13b1bdd4902d2e3712d2321e54aa8b49159d70eb7659b4f45b85a952fe22cc816c9e17124beaf00691e4772494505d352423a3c4ce9a18d8456def05bb6787a038270118af43c95f3af7c14622f0951978eb000a92101ba49d78b903387bd9e7b80426d090c87be5fb59d06fe150afd5793f26b82bed27a4ef3d79f8f9f56c53cb7343cac580ac18ac9466d6f8492435403edc32d32a00d78d03c0413d13477a11733515777e8447c3d03b9e5850bff1a9f9a13ce56328d0af06db82913a1059a44019affffb67cf160557ffdb7042717ea3b32e89f359fec78680ad74f8a062c7fa90ab14a899f16fecd70b1afc016a4fb5d736f616898b8e53c248a96098ee2b544e9eaef2a415f644b2da89a793622c182f4021c7713999bd61e63c219d94b5d53e1da2ac0ee6adccb70afcdb2207f8bfec46e41a4e2029d57f68d7dd96b0631ec0e9fb84730c33656f7c67faf526adbeff1ace1f80f048598cbea61889f33fdcaefa6e948b9e0bc4908223d81b04e17a6615d4ad84c9bad10f786a8017bd05daa4f85d38d6dbfea0d3faeb4e09686df97a8429fc71147379670c4cd34c2d275418838061f93774f0262a6e13b63677ece58136440a18a4cf5d3b6539a2d1400cb3e16d61eaefc50aff93b7e724b6ca379de2b37ec0615407ff580023160f54a0fbb48d16105b362f25a395f66f2c434694a98a4effdbbd52f0bdd92d4c6cff915e8f310550e6da929aa9896221da525d528684a974b7a375a61e2c9d7ba408f260eaa389d1e14a0d4587648081f86887232089d0b6cf3892fbe3ea8404dfcd95fee7d77842a9c5f63b5cf5140fc1a7a5fe99637c2a6bb1e517c386fbf85ef8d3d5cade73ab0d1137e5616b94eac6190f5dfafd47f3888d3c53724be5a47b339a9076642185dc6de922a5a05defcf804041bcea81ee58c48bfed614663186e6045f94ebd79f1e3ba255682e2f7b84ce9a3040abc6ffec1e5106d7011a42e11ece6297ebf0ced5fcb64747e82ad3dcb294636a05675e93d6121002adacd96b356a0a207dd5acea83afe9a6ca7ba3aa30dbad43351d7d8be17c343f143fc9cf064363aec085a27a69b05f8aca0ced2399271d7fbc5ac5ef9d70717e3febe3867da9ea2e0156d1d88c89a00d3a34ceb6b967f1842d40168dca114aa2b7c6d1b4af47b78d039559bff4bd7e23bdac4bf902f155103bb9db0e397fa19625aeff3de691bf685c59506fa5cb3acc8eee7541277c9716ea615a1d6042ee6b29ab650edd593819df8c37af992e94a45cd2b7750cccdac64ffb06ef3f0e7ee03da8f3364837317666f3120cc970b8bf7f6a899f12669ea526171081bc33b279e421eccf23ee82095eaea6fac43bb33f08412e5af1eaac825173d444d4eeaf5f59d4c34f4eb2cd21707295933fd6efe9f81c4ec7717ab463af03bcb718d5a7a796cf83ebd958c90c709eeca4e8e831b157cf6cab0bb8432424e5b821408139098993d7c2cea6e63348b442c71d6f6d27b56e70a018cdcb34358ce3551f1c75f738de886d13458728139cfa7806a8fac8cb466270fbb0136b516b28f8d22fff24be15492952e0d9c56a078cd50391ce2a4cc0f59630e0af6467a81ff27991c66d50304df38439ffb6ad30dcef8809226287d0ed58022cd1405788922707ff363b7ae52890aa547d9685af22f9b4a827274b9c5fe22f6ffd2353236bee47bd3e578b5a02d46b8a15ce46581787df3b59770d04a11186fa6158c3f219091fe3cdf29819cc6f48b40c8fcfa6bfb256f36cb3961f2c5874454974378e32691a3f62cc865118785458e958f3188a473d84c29683727d53bac8112c0483961b2db8eae925192f22786b6dbc80f518843f3509ae391d3928ca5b50de0265a8aab439dd881885f7ff1ac861a486ee23d8aba086252eb7ef4ac0ace9a42462444538876343e1da986de9ea2b99813c903429e33e88bccb451b4c235ec622c55dd2bcc6ef6a94490152024c4831192d7bc863675a08775f3395e3b002d5ed7dbfeff3efc0b03e153c5050d55bcd93b78f67d95697c29281313b7ba71035897480cb1de73bd125d615185f2252dff05550a6f6f7980d9c3675b311fbcd38266ef20506e41408c24702a3ecb0420610de1112d87e025752f81afdfa0d7d0ed1a47fa8995865da9cd548631e0a8d6aec57c536296038173f764678f847ec6f5b74091c03066178ca5de3a7e8fd7d9b9bf1d5c1307d29429dbf51cb9962f01f20356cc0fafb7c7754059f5deb6cae3ec6ef9b20ea7c68f1148b944e81423298215341ad17312b2e1b90f1a7792aa31a8da961556d103db89d86876704eaed01f50f307302ab61e9788dade87b83c975934e271fa5e784441d8dfbefbd97dba67168dba3a64ce190803d8f16e28951d655d6a1eff21f184cf4139d25152f36bca360f33f64201f64d602b44194f408b34a82b17db9a2b690c990319a07f52fb205416b380d00186f3043a1e60a12d507169605525429032b51a49e76c5aa6bc898a81464f84e4dbf3fa02fb74e035cfaf256b0a11c96d9e4b35e140d27ddbfc7db841f3642707073e24af5f043b5612efccff1460607459e281be04d7875e8e80a7a95fa3825582025fea400cf37138138f8809080b5ba1f8aa84bd39331d831d8445c469f88c90265a1c622b02cd2e751bea45cefc5287658865ad9442310972e745de4a71d681d15fd5cdc7c714f8533e556aa521d0cfdc6ebe72216df7ab69207ecad8ba96da53a7600f66940a75fa777c3bcd619e22f7df3914b2949507d4f4d7fa671f1b0a25b9431323e225a52b3878cafcae300fa49d20db57e337fd42267077aef403b4d63a4a520c93b4874218c7732f7e5535bdac9bce3411cca4d30614626393ed56a072b21452649029ffd5a2908b99d88336c32b5c8435654cdec6131f3a514e65206b12547706ffa156bc196b1b3e2e9b833867a444d12973a3cbe4fceed0cfc2692eda2a033effe9e329c9ed264ac61c250bf35a70dc63b42dbe7190ece34f6c92bd8ebafaae139b8cd40e1acff6c1c094eb93e6c0be6190864ab9a6f1d663b878b7f14d01f31a0b923d4e84348e1f9b00df642a9bf77c6afae16c066d62b60665f3bd0684be6a3cbcf0876fabd1aa2f723431f05ff3cf14d58ae38473389261024c893a8913ada4e6b3a8d9e7df070c1af0674949afe1825df8ef0b21385e4b50243b6e5f50a49eb6c8256eb8fe4fbc720308ba11a4507d25c92aafa32d83fdf3f8f22e81aecffe4d77a9c45533422e81477254fd51bfa40c229e3153f2fe229eef35995d5af6edd33daf3f05f4ba76d7c423ed6546624b8753197ca03347124c1590367c7884a76fd95f402fb395ae68a26ea14ae704517f790701364aa12f53492a5a68c4c7617340c6b82c13c09f575f720643dd7ae6cfc2696d791540805f4a29caaa745b2a99554dc8bed1aa6e8b33dd6fde13ba6f7e824f66ae5fa0dc0b7390e5f2a771027eb1654d18e710ccd2e96485e5924583bffa29fc5fda90741a3bb9e0ea09878a286ff305181d5fdad0df0a29c8878a1c8fb071129326108e7947f3f9e7734db8e0c4af13f522e096f0871716ffec8fed10c1761c8fe94a4856229cf055335a3d466e0d7519a603568112c5951b9bb33b42edc94818a6be9b93c3c294d7bcb6efb5524c9ebcd872123a0c75b393e3223a4649fbebb703077f39e87e03f1d42b6f356025ebd2f4ba4b1039990dac8589bbf0161235492530da1172e4594c004a2c721310eec170c4acd639d0e6c6ecfa369e3ebb6efb059fa17159ae01f07cb14586538ff2b2291d6c36b6f5c8d83b111a8b81b6c1ed5bcc46072ab740850c3931e6652b26426be7786dba24db05375731496c71492953b363fd94e3500c35d516c0d35fd93d3a661c6d6ecf2cd498729c578beab35f4afbae225ecce99643eacf13c5871065da3e352d227f33e717b887f68dd876eadb21d29572631f686560c408055c876db7ad7148a27f4153761db31b468597d4ed5daf7a8f06b3efd269f55cd21d93adc84e0ce0eae614d050f178c4aa75775ffc94ecc5c41e3bd3b9f82ac505a3acd7a877b65376942e207f08e3348b4c543937a6032ec84373c5b588d6cde5f378b332a51d21fb249a53933f49f1d542f3f63a2c978bb21bbf728dbc641f6b2fcb8b5505aa7227104f43148cbfacd85a4ac1d283bd5bafe2ae90704953b4c20f84e5b0b8d1f23190dba9175d7dde6616f7ca66d51d3c0d92df9f77675d72a5d356cff7479cf01a4de5a0f097ba476db2c2635111b5fb9920a91ece61067b93c2cf73b48571197fdbf58750e3c081c5d24da97787fbe9274b0bac16e3a296bd0c43f682b65554daca432d16c959b4b3c47ec3f2f9cbfecf2a37fbc089198af1b8d91bdb22171c8081f1bc4d8d4137c19c9be183e498c41eea09c3a3f43f90e9521543040f340612dde6e56e1212dd1b5a9325df9063d9b6a93e4a5222a3fb53cd93007db44a02e25fd358c7dbd76d3a5f8b9c0573aa06e5242330cf43581935ac6c706fdc9affd3e412b1ccbc0d780eb3e383d86e59d3de7cccefbe954533669337b0f6e629651467e74f60d94a066fac09e23a518d5ca27f354def9159d7d41bde9539e77bca61526bd246d0c63035eff918f46f8d5c1b456c1bc0f21285cc5b395cb78be774078e3b5fbd4ff01c005b31e74cb2d9d6b81b279261e9463108ce43cf7e80f2ea68f5e4e2934b204e2444434005de0ed07ee45cc5fa5881545eadf222343a0958024a8956cb82119b05276567ca4bc21dec9e7219fcd939a22b5b253207a38a2da48020a63ec19e6a492519d9063f6f8e3814fb14b7bce20cc8330c26f2343c89128a84ae918daef5e3dd1643dbe08cfccb0f1265251e0c29ec8aeadd55de717747164c68061fbe030cfae06479e5195751e7993d752690badc86cacff8fddc44a9dd85bafdd2fb5ed08935b61c28499ae662bdd08c6418da3459e3be5079a9af7a0e733d30b6dbf4ce0267cfa71775d584c9a3441915b623779c0aad1acace3df24585c2b7489c4548950c088041a99bb807f039b6ece7de2d21b129d9499ab484957c33de0bbb48293d171f7e400648df3db22e5ad05cf797071efe9368993e17b36db2b7b5c685be4ce8c24cc6e9c2df786070294237d3d157979c2fa99bf4d6ed1370e48d075e1411978ee957d52db4bdc5a892c3f0d677b563283b3575791904850e1c6ee289456e5d637a48b3235699ac689cc3c32b81454a5ffb92e5bd36cf779859f12227c3ab50bdb73ed75ca41ffe0e84456857e0429ffa800d7a7384d30762fdeaf34b78733ac82c3376bc5509bd0c80f6b2f962ed6517caa2911c57bf356d7d5f5e378a1da3a975c33eab5024d17de98241674df6946f788da815b589a547b8b21d17e3ed9d636bc9a98032b568547388634dcbf68b96592a3abe0fcceb408f3a5d5fdde0233ae6964948f4d7179f577ebf5b7c16cbc5720d9fab161818c2877b555e27efe67940ff57983177348caf617457783403cb14cf5c3a6c4bde9094f33c13e8ff77f227e86ac79bb6ed7076999a54cec107f33b90afa497bd34c510b1dd93ee0495597ff4999b66df508fb6415c303324c5cab6763cb7599be8546b17dab5c7e5e3f4064b2b22ee943394bcd8c5015c12ac86a4cb891e28e807d32d6f755880a03c096769c9951d15ace5e2855ff725ad03fbc98a8560ad67eff2f08cdabcfbfedf56e30b107b602f745659c0762729f263737b1e2e37a9dfc09239bef552330ad0af6b855a65213fc63550fcb991640bc7ea6dcb1da735d9b7657d922914e7ad5b171f4020e41dd88a3fe0db8d553c81508f1338ddcb573677b022ee91e25e89784c217024c20a1e2e2ca8ae05cf2f54ea7266cf7164ff50e9068847870ee72313c12ee91d74719ef1a6fc946477605c1a028e82acf08608cac01b3cee24ffe118fb2706a2187f60a18e117d9d08ac9618479b07c0968f5fb1c3b906f5d5be4fab99569f147ecc263364f6893faea6354841f6cfe368c633a033b4365f77543c34ae05943ea99154f41a3c6c93e6191c90da7627021c9e3d339ed716f6ce1f91a734fdc316033e72c6a6bbbad1ced3a1776c1036013d914e73c6bd44024591f20f8c3b1be0f786be8b674cb6a66aeb3cb60a8aaf0b4c09218d39f7acc74ac8acf6364efbfa54e911164775903f1802174a0219e22e1185b1fff18a3ce4bc44ef0a539c700c08864063905870456d7ba060b1eaa43c557d9cf9086c776ab87df3093cab8397188d6ef50114e249587d701d2133d2902e235ea152a9126529f9f454d100bf015f01836939c883d8e227e27f48994377b23883798d6656e353ffb7e97552e8b52c8be1f0ef5d115c3aeb01ee9abea60393e93db57c57be02ba4fe0d13ae785c72911b713cfc588466efc6b41698d646bffaad6c90032260cca23d445906d7901db8a10de90cb3f2e92a16a2a330faa05544634a89f5c8c9cf5b1fae7b92819fcbe0fdaa5aac45115c2c99be7f2714626f1d3ca36f71a663ecde74683909ccc46132292b7555cdbaed2bf0a81b3936820161de8ea2c4da320831ea762740950b8d30a965f836deffe36a8a40f0679cd1f7c65897407a70a108eb6596d6a9f5cfc7120de2ce060514755b11232d805f70629a1daaccfa5670c8bcfa69f1202579febf0a7cee5340e3a56ae4b923473be6ee2f1439f2728a8a2820525cfb24922336ff7d61c7d2790a47008c5ee7c3098dabaaf495aeb036a3ad8623df32647cf27576444dd0de448913b75a5ec5cd3c7bc9b83c0cccffa23bca59db9cbe71caa8b60178b630dcc1d36a334c769c99e88269da009cce387b2ae2d351acedaf16b1fa4fe98d5d31812ab5ecc7f62ddbfe3c27051040be6c8f2f89cae3128bf39c5c6f45cf11a6952b61b8522c0909ebfd3f1047f8493a433b448881181ce44a61f91b324ce8cfa09dede90ce087aebb10fc9eb35558711ce682908fdb150ea37f79e859a6ff0c06f53aa48437d19bb198914387e75b12f792182f594c6d411d9303aa18c8615c4a68cdd3ed23a0056a3aecd75b35995c60629652485ac2892da358327399a298c72e8ac678a4035ddfb584b91b42794a37d1f2fe4ed95b4fd4e2cd5cd2287738b10f54248fb31f440281b951ec3f55f627a8d2943fff5f03d239fb3cef0a3d5c76e9995d5e91af6d33703b34ed700eba32a7c3274da036a198682a23f05f91dfdaf7be53c27a9318c6666b4bb07b12f1ee24376336fb16609d8d3de463127c2973083f9c83b79d8a803bb6152382388aabe6ed710aba8dca2b484a024143f5bb699937078e7e4e519f6b00a9747d7cbd03bb7252053e1f4ec4ac2dcb7df6966f3bb46e23d79e9b5575dd7d3948a775f7be1f939b7119f956113bd80db1616f36ead73c1a509221410f9840ba47c054cabed7c3ce90f10dd42bda36310c32ccfeece1e91a0fefdb2cc27bb9546b3128f596d2707738cf0d53099e26c8e00315f4fa703c74095471ed306cfd32c911ec1f91387d00acb90d291fe920a2a23db32c5bf8c6a3dce6864158537ab0b74ce73f87fb789202b071667ab3d2921866657619ed83ca80cf4e24034d2c4794a74952d04276b2fffbc635da04e8782265edc9ac100d87e4d6a57444da9d89dbb4952a2bb3ac35c31fd6764633bf1861b5b33e1f7ec96cccfbc3c0fb16ba9e9ff0dec3b5f5bb852823f4139ab968b1dec04e49f7913384e88920b2d8a40e2de498a1fe3dbfe07a2afbe4113eba07e122508f01b42da4a2b0c7a2860ab516061311d722369b133f695e1b65971606924e07223fa3a8cff8746b5d16fa8f3e640b5c4af8c9950d451fd3c99002999a862ac5bd2b8e21c4a0a157655bdc4f16c444c498eff28f03e4fcaf844878952a02604de384096eb7ec5ff0e68b877db5d55981b3e1121df0c7b3666a617855a0d85c405173c2a51d9c97a67cb8168e358f1ffcf70f17fbfeb424e5ecead215f90edcbb4eeb51cc18a808b91abb91df9f03fe42f514958d124a52bfa3ddf04e5334a84a83e3ccda0fc5773e3354e6e5dc0d66162ffe91d596ec6c20d9f1ee01f5cf8487e7e6b5e4e24e8b4253596c181f59a3b686949de6cdfad31f7594bc3aed67642771c4daf2aa9cb5ed164cb86ad14b69a87c4c1dabe4ad4fa3b06253cf9720f3e5e12d78fa085035f7a3a38be991bfcb885716dcad9f27b8703111cea4d01574d825fa6e4b80d5c57a638ba01a1183836c0b0de32be0db45a8b7043580b51080e1854e76e06cd3f52e5456bcf06c1f03bd458f69bfca31d85867914497ac491c6c7058b9aaae583676636f5f02d780f4d16d4c40bd88b54d13ba420ec910a8fcbf8fc6d2f569623a2be3000a1c818314c4d396c843af69c87cab32fbd33fdba2acf896e0fdd5b8cac24bcf1a30ddbf6823bd894abf29125374423eaacaf1262dc98e0e33fb8351fdecfc07c284ad659be58869eba0d65fafaecabd6479885611073da76b377e0585aed4ea8044393e6e6fae39d12b2bcf904ec4e508fd6fe4e4fbc9de783dda84be20b8520fc908bea95d34c7e9ed9f72dd5c3eb46e66f3a8f92207f866d2029a8b5c966789b7c567aeb6918257e5ee3447d3cadb43b8a442ae1a7fb5e0c8f3b4b7ed70a9ea19096c406d787bd9d8a888ea263dd1afa0793bcd59241c81d02153d7376224380298b81ef5a2ee94ff932c20a6a17d2125785c50ce490ea00f758a0e7b553ad5120ab9657313aba5832a364ae387026b876c676f6f8fe25bc2d02d7c7379a00a86b71c283a7a8b6bfeb61fe3f04679c8c24eba885ad08cc4357966dc1c4699eab81f08b159eb09356257cf5a5cdfe72b36c54846cc59403770833825dc7dc50ad05e27e265fe9263a67ae5c1e314565256f1eba9b8a52c94ed1c2d004d8be71a40c8463f835c9df13bc053ed374002de350c3979634367e90ea69d9be0bb02fd86d08dd0dd41e6c69b235a2aefa16939013c725b20c6b2b02be640c03491eabc3cd93557b174d85a91ad1670e85ed118b53e14c4f8ac6b1aa3ce701cb697dc3010403812e6b28a9fb66975273a8f151bab27c23311a9be21711031f1551f3186c16a1c35354ab64c00c0550b27bf93cc754694eb2fedf83ed816f873757bce13acc02cac062b8a23d9ba4b9229628326a190cb59d43af1c8a9861588cf4d8da8df904d7cf033adb17c9844784acfdfee4552289ad2fcca9a4747afcd1173195dd5ec25892932519ba8ea843efdadb70fafa837962ace826bf9a40b7a524e4ab4488bcb7fc1b6ab809fdfa42dee00d238711c9874fe36e307003960450651daffd2c4b194b86856b88b3b43a15df9cd156026fdb8ae81139f843dd61065e30cd548a4587f3dda954c3b574cdb433eae793c60354d3be982bd1ef3ff5267eb060476d8eb877bd7c40605d48e52313b97caa6046a7cdf10f61da4e0b92b20c88dc652212fdd0a173eb7e818cd524b2ec437c9f32d331a3cc6244cf89789a5fdb6ca9994259a4d65cf672550ff10baa3885b658265483e4970fe5d240942a72849f975692114a6c908c636efc9ec849cf08a83f75289416efb86a7ad4bbb769eb43db2254775488a32ee6f1216fc980f5ad90bb04201a8f11056b4322bdcbfa5da240c7212b212d6fbfee9307a2613eca0ee73695289ee9e0c200113b6a4eaaf86a3b7f67941448bbf2629784678a48ccaaae4340239ca2a39140279a6af2983d9a6702812abb88a7a3af9d899978aa47456f1e657f3dca9623eb1cdc58ece5d5738a4b3584a2c457e1c30b9a666d8118963ff6050619975c278165c9a19745bde20b3eef5bd97069f012cf63f216434aaa26e692349e2cf34be769a531813bfac71f73143a3a7faa25eeeec34b0358435cc540fb1d12131abddca037474f8f77318051a7a810e2c2e5ee42c4bce2f86250fd2d4c02b6cc04c52dfd3c7ba9d23dc22a6bb98c0822ba73a50cecca33524dd61a07c76167c598f8e1c0ab07ab66d89c2b76bd061c3a9dabf237584cdf080eebb20db2553d4d8ddd9e27c7441a04726a6f24733e3b8994da06406851cf07a6a1c7409cb5d7092d6b3035fc8903ac72e5feb0018652f64969b5b7b8ab05ed8816806804032048bd7c138e3a5b0465bd12119bc435b28084907bec7f38e329a593cb31edd53cd0d218a0e78af5260bd43f82742a62577f888ad1587d25d0bb201b9b440c36e1fc5244f5e9fa2750d18b2ae366c93101742d689dc12545b643df9ae937acdc43f5699329b8b121e72f5a683644079d3f777feecb9fc808d3b4bd21b2fa128570aeb3b49a0faa83227a1ea3bc25e1db4e1c66c82a5af208a5fec79663cc6da24d0d80e6215b19367e62487f04fed316179a2930b472730d682fe6f6e414861a8e101ad5aa19408331c7d2f004e7882bc6b112513d05b49a60f21173e023914b295a7ed4d8321d65cec9945482bb37ee8a5ffb1b99eb5021bf3eef619b5e23be2651a48f6d9f58ee04670fb9ac6ae149344d21b9bb297526e59aee34174d816995873e0525bb11de7f175d967b10bb2d415346c9b287a0035c8d787369953f538385e6b72f04e58219c999199999950f01561894986ca36f3993fcea42a9d0dcc85017603a8d26a4390064ebd2b679de55c7515e11f573a0f56f4a8487bd4c8a9a9ac6e834c9efad2842fe90d907a702b2d3da3cf3f98f551029fde81ab32d836185cbf8ccda24782ee289554570e1265f42def6ceb5a4f5e457a5b47b3517cbcda12a7d004d396076e111165e93d1a0046798caf0b50bb15e19095ab795a96bd499ac11deb353ac1a57cfb30d2b3fa73479528de04069f7430ce8a151e637cd5acf5d2dac982d009060fd82c596c33e560192f52355cd03ecf38274c66c4a4b7e973d5bff6de2091d0f232027f9277e191f822edc3c880c1503cbb2396234e95d300d874dc2a88a89fb96b313d2e0bb1e8ced9c2cde770ff7eb996901b5a24d4d5377b3dda0d6fed9249b1efb212e4a217b3679c5da1397185f95de4fe1ca38e34d3f884480fcbd7e81104a512726ca83b2075b5e7b95a530be143ac854c237c683ff758c672b1d4db47b3bc6ae718af6d9d6b8867333695230451933898445145624a86fac1c328e7b2921a04be63fcfb42e4c8a2cb5c81d13f18eaff8836d3ce8f3720abcb696f01a1785a9ee30187324ee35cc19506ddc1ccb4bdef8436d02c90129f7d8b6b30e8a3b0443bfc0f8f5fc245ffa2c314f2b7e06d69f90f40fd428abb237fb9269b5b2b259bb65821306a3c287f5b83ab2b94976f17b59e188a751b33e4459916af5fa835075a885c351da6be27110ca688ef5b70df583269b49abced391bff5a3a8a0142a6d8925ba2263d635d6bb968159c23a7cee2a28953530284ca3b529d9ca38235d1e53aeb16ae05bae256d41da6c812b78d23e01c986665ccc92d6cc6222d534911c1911bfa586f4f480488014ddbad3ff2152fa9e3f6854d0c6203c6b74f2886b73a161463b4643d1fa8affc3cb5b29bb3dca6fafcbb0c9d07e75c5c9e28dacb23d1da17a5580b2774333f287caaf318ef790f830f97953eeb04e4da2a8b46fbfd088ff28f704480526560f2f65d70dc4780390458930d64260dfa59d9df29fc5c2cc8aa3998e28790dba30f17c243ecb51012a92012cfc25f23ba98ac9f54c484513d493c91fc26845622ca0b50ed2cdc651ef0e30605bcadc602b8ff3a08b2ebcd8b9237854439c56b8987754b233c42b1af2ed3aea5c875af9d80c0150b36f5de1b29670b8502fffa0bec3704e7c8d8806363e9efe86986f5dbc9bf2d9e71722d5b8e0fc9db044df167d84964746768ec9d32f2921b766930a3169e0b330f3a52dc2f05449059d859a67127b94aae699d53a2264d4ef4da750e0d330014057b3943c14482d964585562d46108cdf3ea73b7197fb6ff60a39da6db8119afd4cbda6519f950b983140287c838a82a5fc55d6b0e6aaf565720ba9097a47fc64744eba455b7929a0d0d91e7da53ca602fabddc4c7c67a25189293ba3ed932d521f344244f015069c0e6e295f5cdaeb13c59f730c1b4bf5edecdde96b15b3f2eb0583f49570dc87ef7a5026b1897821ddbbbfb8ea0a85fa926c7c4c3827f63a5217fda69ff13fbdc8fe14e498106713d5d06024e923a5c031b6f61dfba3b1ceb138dbf9e86e78a2010deb544fb93a3ff6df1075c86b425338e626e8dd2d80bf1aeed72d32863c13942050e841d92f99dbe7b789d21b9f55ab1727f64fc21e797b223adabf13d2ecb2efbcf336cf68bbab6cbaa216c627df86fbb22542f6f0fb4bb4462688ee85334ca32214e923348f769a987c22f9b58eecb9d3d62b6f87664cc6eff5c957acba9be9eccb1068687dd2ad9c1d290b6f7453c30a9aa5dc056ed8a6f3154556fbdb09df477c014901c9991a57e3b2a74529755e2985fbcd2d4accc0aad3ea6b508e739089890774edb99868f9d53749a6225e8b06ce45f294421ec6266a5289de1798df152f079443178a97443bdff2cb2af1d2b76e5d34dc7a22239140a4c6866edbc4daea46777b432302509a9159b19fae7cd04fb2007478f77bb319047a8733712e05f87661ca41c1e3ccc8f8e7f73fa48bd146fa16170852b0732550121e4ccc5da2a7be03916df8f26ad04295e68e15978458b963ad33a01b051306f064638299eac6586115b1a3765dcea9309e9606604d504d460107b32a9245af245492105f32cd3ba4f2e59f92539ccaf23a9efbefebb9c383ca5fa3332f6dec5f8b2e22199b5450e71b1bdda2ed230cb8e639f28a61e71ff0deda27d6c1b22146984f9bc77039570563a670d84608edd4c6f6acc0ede51a8b801251add325796bf859eae052deb583db81ef38b5a6b565322aab577801888c02ee7252321b53efbe69fabbd0fd31362004b664c49debfecbeba37d1e3dba5849d8f783ab069cc2b789f17d569eb604a42827774b0582cb98971de84899876a33ab145ceafb8782450de08858cabb9776b2ed16bcdaae67b06cf0b70475dfe4f3734b0bf23ede7c7e86b9429043146358491f1e72c844c9566f43fdc6dc7ebad2c6d140f5f09adfa17ab4ea4ba53d3a12718a703abd5994c1e5a7b1fe0ffde61ef697a630bd35559afd9f0011406429cc2ae93782f541fac14127af20096160a7f8fe6438fe34837a0afb7993e3817b34b12ce978688e551d51256cde50c7795f3a228b7fa516115d8eea1383d2a4e6ef4e8f0ed9ed47a20eb425e3d049e4cd89d9758194a95ed337fd1ea4b32e1eeea32b4f5ceecd4462d8ca405e9d83cd34b2fd84e40c1a7a0d1b400d11cad7490327340146193065f208a15c97381a020c156fa498d247fa4da591dd0c40b0f6a8767b40f2a1226529b2feaf46de88d28e4ea119d45eb029fea2f1a948912a5d5bec100edbebc1af791756baf1cc138119412b20679f027c88a75e1c0f7671eb1b01cd474041590135f56a8ba43e4eaa776414837b7f4eb9fe9a4d8c0d2a3cdaeec7b45f4f45af13770845c66ccad719bd93777808b8c206dac8f98afb39081fbcfa1e492c24f495d294deef9c274399d54c06a970a2f45f2f1744e834faf96f36b4de02b614cd164dda7b506cd73e5a895f43848ee7e42051c00ca42dc8a6b718182d9cb24184ae74158ddbc6069d6399f87d1b7948437af0a22c80ea55a13863462157a949fabfe2499cc13c4e8ac3dd4ba4fcccfee6745f0f5a47ea3fe45ef274c8a506819d2919948eccb15af6544167d84663a68dbea7c74205d8258dd878aecfefe3ecf450411ea68ddf300d7e06e4b194bdae725c0b9fd6855e0c0c1d56df2cc8f0ae04f81b53b21c03e759d20c6603127a1d0d1c7c495eb3bdb01559603816dd735a483fe86998ad7b1b25fc698ac09785eddfa6aeeea47526a7225e8180309ad3c30aca6b11dab00d3c2227b6aff31164feea1e9a7ae27451bbd5a3da5954844cb0d93968ed87ed51983359e40326dafc83d1585f463022b131671fab20ef10ceeb81706a09c3bc444983586203ad2077ee80281b9b29b1c840344fa08df8f276a0324a6917b2fe721f0387d7e318ac344d4e5885e86bd8ea310d31f13c7a28c809efef4a0a5a6cb3c9b20be6bfe91bf6e2d62fc4cb7813fcd470915adb7e34f813caa81b69c4ff51124d3228d6924191fcd2225b5ef84fae6e3a3c5f415e824a3c7ed2ee7b7c12d4a42753c03cb204801a7c3e0243f90b7c289708f11772fdd748e6141db2ee4832af185d145bbbdca90af819bdec62ad30dfef41d8eed69ce287c9562aad857f02d8e3cc1c707bb03409042c23015fde2efcbd398d4c38a1b8dfdb204862957e84dc1758f62007146ea736f069f4e9cb245808aa09f574cf5571037d43fd99184f1c71b9bd9cd82d0dee1ef0fafe1acddebd8e8f251b29fc08a3c7b2ff0d42b1d3b1ec8b564544a289a1b3b0498c1c9d899fa733827875203eceb1e12ea256b43c362d973fbef543400ce7e64bc1cbda01864473e086b72a7f8d6056e1a0cd26b11ea6f1d6581cd737fdaf02f5b4043bfc19cc76a18b97d568a513a0cc3d0eabb183ded33fa3c60c06d7dd7ccc7f0fad1216e2e69956e276538df839b8f2f6c4a21573aa46216c1f6674b3350397cfe0b4c8d16fd57b29f164949792fa5da8145e076c496531dd52f8f3a577e496bb49f640d0612ea6987fd64ed2cae296723379e600c29aeb18fd8882ecdd7efa7de3460e602c64af0d768208684995d922daac9243b7a95059160a6fb98d24a1e5f53433c79ddeaa7810a1c1d7067e0dabd049f8ef67df1afe720fd2d7caa17d63a6a85a71aad24d174015100b2fdddc445c5770cfe523d3e4b1adbaca45abf940e926e52679c585c87db9e84813dbf0e67f9c9a0399c736f2043bff01fdc5edee2a974a1af51297442247ce07923a67cc064d5d314bede198345067102f13a536ade38f9eaf5bccee5dfede2304490dbe3de46a7ea4163f965bcdb1f1cd37b719a74f9d1a728bc48c4c398511c81003ccf7db3800aa616f9dae1a2515234ef9d03f416e83ded65af22ff750b941ae9c98c68c1871e569f46c7750f1561facb9c58192d54871d82a1dc6c04172601e34bc2abc12ad772e4fabe05ca546046073a441984c6f781d6919163d108495df5f35bbf97fd8051e3418239599514bee13b11b7d2d2778cf08e682238ca91ebe9b4f5936b38404f0ba8e956952c0063e2edc4c1db46bac1603190d23594eebc8f4bfd466481bd9c27defbf75f7e56f7626d1f56c2a26f144f5b3d9bcfa5c8dcfcf14943bce118175587222366e9cde8688f374dafa386a863eb74a8b019f795c57fb1a3f838b97804a34d0a89e18d9e3551223d9b5a636b80a9cdfc533085ce8b1c031a0a9708fc64523e1e10477e34619f1ebb2e4bdb29d9a69d9263e49b6f74ccbfc468eaaf4864a6a8019f4f06616322865c1cf47a70d8ec3af564e2dd210e857576b21b5f8fb4bebfdedac846febda99d89f64afd783da120b2ecce8ee4b0b9756965b896624568215d6826bf37e5cf3ae2d17b217bac6eda7bc7227c9ba2cdf463c24ddae046f7fd019847ef09c565ea6ed815298a982193d35a6a4a2beaac2ea417db7b4b45c9e70fbe64883b4994c391f5bed93f0e4103ca200fb189bb67831307264911de29e9c2956df961a1a7d5678238f1564f24f5b24505eafef26c6f7bf23993d456e4de652c82d5d6cb01f32096e63f59ea93a50835051f1bd6cc37e7c8d4dc915f9968e143f97f590a5e139c6d490dbf48e506dade1d4592a2f3eae94991539f7e47667888175affafee720360eb66754da4a77d9943433d7a196c03a147fb7893bb6a27a9498c4005566ef73af97526aeabfeed5a42c2e78f823bbcc13f5c06e6e4316088ffa3521b60945c041f30cf1f41550df03d51868a0baaf03f74b38e08801fba83b0aa7dc6c50a4bfa16b567de1a5cd37e88d4cf95e0764a32c9a941b8d325d9af763dd2e8e38c79fb22c8bf4d8b8f0f5f7b8476f5784a501e5c500343f43c97a929e4a814b592d00a78311103ff8ba51cd1c4d5962b664f2ed15f44bfb9ecb1a06b965d577159afae6f3d5b626f0643f57b0f2f0e99f1ecf6b4f04660f39574d509803a44ce41a406f62c204bd92a578350aa416d0accec81ed3ed9d817b940fec65ce36687794edb96266ec4c74172738ab7d8a13d5cab947d09cfc0654318a26ac00a07e39f943ca5b0856d95264b320495b6c95aee2039f37f7dfb2b0c0293586dd52e0bbd5142ea2f2dcc49598db1978ace2836e3716535aaa41845ecb788aa4ecd8126a0325094215a41598ac3509944b6fcaf9d0f4c99e281cfe249ab6ecf9fddcde21c4149189bf26280110590562b5d5dbe3568d4aa3cea2cf4a79652ec9b9d9a0c9e9300b55622f82a14b5e2376e44a1d0360345504bf8e9ebff018065ca7bc29479e9938a59ce94113a52f196b62bb2a0774cfd2b0e10f3108418e0ac427fe41b68f0af8cf630ae091fb4b396e51eb7e25be4df22b6b3655372f3e1769eb04b32a83f36778df4910e0de08fa65b743280d2f6bce35a834aee2fff3e224a89849a3095e2550939c69fbc9d2e98d8336b95f71527edc012d12161d933b591748e803ea20cd0d0fc9fb7f3c8d05b5c3a58b630b34a80b8579c8bc5d477a5a2ad0e9122ae6557fd1318096c9ac5f118c318178f8d5f1c7eebc2995847e7c89e5401bd275b0b69c9aa60a7b020e35e8255151f5beb67c4815de29b558c3c16502533455aa4597d3b8fd96c6af2f2cfcac9f2c39701b2bed034cc48f0624d32eb3ac8cd8562e574b4a4d4ca236b1451c1f985355b05e827c4ce5ce10b43158f3e25040d9e37fa565513499030524232ec2013b3bc087102e30425cd3b2eff669664fadcfb097309c3dbd6f87cec688931240aa355b4ab27a73055d2e9ac0a6dfbe8514d60d111c04117453ca8f8faa66ab7d5a16a91369769230cca1f012fd5511622cec72794735c55fc4c418c6667806a5912f3f6d5e3de09f420c10a4357acbae8cd2277416ffbcbbed6e423af281e90fabeb73b4a82b448f5d13f40b6d612413d74ef78caa95ed34f80e5b36defda11c1054f2a99ac047b5f49d4b758e0c049811c87997b836d06779733c0022c348a1100a03361e089075554c7751f98f6cd2a1808214df1a867d81300fe3651696b09a5bef7408457bad62fa36474a3adaf73338114165bc5fedf0594e3f412f1d8850448859b62332781768bbcd84a98504c39e3998bd148b4b1fc45922d952fdae05e5923a56484dd4e1caab50be9d9a9a6b0e83f90d1cea6291896a6caa70a0b8b51cc162786f6db3df46aa1bea42005ae81b0612774079f2bd343d8342016d3d80d673bc8274646b13d7fd40a4c8a4362b4b2871df95e11035bc48df2c4991b37191be4407645d4e7cb4d1babe4eff8cfef5546ed5e9636ee8efdaa8eb0a302c368fa17eeb8c17993175373404bab7a14da02405a288368c838689032e65544d07c5ddb2925e2257d6fca7411e3b1c8693ed711c2202dc4b750a0b262e49c393a2ad9c47c91cb90e80fb45c53bdc5720fd70fbe17822ad7b9dd7c896f188e2d40226fc885e1e801fa28b13d5646c78259c9a79aa292d59a83f40cc3da9d9cd632fbf913c0612fec3f8707540cbe80283e926f12bf29185d3d36ece101aa443e8bc75496bd270ddcdd65ed63e86bbed20a2a65264d70ca702dfe7176f2a0d09367680c8b2c87229e05ddd505917059f1dd017a2fa33c0cda61cca7dae1d6079bc077bba666057631956d0e9f95ab41cdc227007736e83c46d4aae28647c0b46b8870827a74924b147b363726a08af45ede04e183d26880e769a7c2b058ed0260c6d37b54c2b89e89706b65bab8edd5912dfef02d0ae6ed20cd3131ef3d0b6ddc6914a21434e7cf32773dbdcbf75068929765a823cac4f44a5da0faddc43602dbbb172a2873091e892075ddf99ba709d64e47abc456e923eed1b986580086ff1ef2df26228632da131ed57f662ef30b2d5a822883a044a78099f0ad856c5a42581baf7e8ab2db16828038d5eb2cd2eea57dc63caddcd86ad532cff82743e32d81224890fc86790229896333e46a2603baaa62d04d035df8a5f2530a0dadf46b47de6ec34e25ce2bafdee1ca14b6c5d4c007c7e6940df38386f474dc9475e037d01607f8a7de40b182a8ea6450a5f0cd793ee326ea0dd1b81df9a69e05f98a4fb5b5afdc04c505b70d887ee884e340df5c7ee98bcf4a5459be35b73e3994238f89359b35f37222fccdb4ea7cf2d95da419f736042214912d69cd1464bea65795b9d5803c4f55609d216aac984cb4922cd74882d7f697eda9cdc64710920aaaf5ffceb65b7761d79202dece1e313d64676326927d584f80c25a23a656c3afbf87e0896399bf09344c6c8b5da878ffc552e2eb4e47bd8d05de20eee2952ac5761d7bbfc14377dac6905ee3fbe33d4473728492b3848ca2dbb0e3f6d8320ce0375bcbe0a377edb09316e00f50dc83cf44b8960e76571b679da2c60ce99068e611c8b595609a78eef7dfd580876e6916b206c811f756a8a73d08ecc8312bbc7cc655767e556a512cfc8f4016218f041b68cf9c7f1a67e61ba4423d82755c61348330f380a3cfd15d9c7eb9b9266930983c4c7fd815f031d124746b3ea6a358c550e1f03b9b02658a0f33060666d8faf8d2987f6703020e49ce73c8ade297eee3c05732d3ca3480385e5253fbe0b13a872f598114a1a8fd2b7f770441c39389c517d150f4466b1da7afc1085748c01572a776cc44bbd4128b87fc5d94f0b67884a3d77b1a22610692ce776e94dba494a26d9fbea1e1ac741aca51e09e1585186e976b721678a9eb31dd611b5163c2041f857450ee298b1c2eec3db6ccfaae46fe26825d56e590bed765c0efaadf83f80846fa0b12fe70a3f783fc58127c1b93fb2c09cfca2ebd4fc38be1e94f250466cb093aea03edca9695f2e4dba556b56702f424adbe2c8c454104f33e9048b72d69e44012ff6e2590bd3009f29dbc52e9fae6fad1efe85a7e6ab702e72baf237413fde4474a5736b1b4713cb8fd8ffc65ca64668ec5e5157d30a1af1cbff203cfaaaf92de7da5f1442b6425f000bdea099525895486f2c6502eac0ec6265ad883c3697d3c918e5344a39673fc84ba757247b6faa33f31da8bd3f55d7aa09858ab9f913808dd785a0176af70dd15596376a75367988c553d27cbfdedc8ba69c61291ba8ecef809b2d41e09a04e7249640b03f118da039ffbd28700231bfbe5a157bfc0a0d2e0b77ecf5258ad805811e78d2586b9c6fe89cd2aacceda5a77aa39ba055d2c52d465dcee91879d12f9c8354b7625fd7d711738e163177bcfbb62d6d48e47992746b97e3455e84c829156e87e5a0992a50b32ec2ebd9597492244706d1eb27010c79c0f0841ac2e08f7d11c25171bcab7a9bae9f18dc1b0dd0071d827f61a38d3704c315dfb4de425929d2f10f76106b86821e8f9f10c59da69d4b545854ccd5caaf9d58004c4971a38683fe8da4e9c69ebc03f5e5e434149113b6e37539ea7c54a48c79c5f61334b11b4f0d8e5a295f32963fb1e3cdd1a1d1cef290460aff2bfb4d33642815c965971c656292516722dd18d0df835fd1a82f6e556090a30ca8e1e2a03b7760dcc77d122588aeb906c92074139928e8e940fa8801380e8432d13f6a689ae540a7e7d62460ee83d9774185e342f590ebbc5ddb5122c116ec5e68e1c2cad46e988b30a5c03ed06a50316a607953c249ae32ede6842a8001188159ab33db5825ef0fb6bf3e043665d1703eca4f0d97649aae3ae8a82db51bcc1589d9eec6cf2136bc1f2f4a26bec224eee0d96516479f5b6d28c147d13c07eab80c2987f4548111dc5c23a1a9cf8b64ccc87b224a1f7d2353f792731a92881c038fbb4e76dbf84f27e6c470149cc7db1189b4b0931628e27e73b6e1c46de1371e0a2dea5fc282fa3d6bad562e88800cc64c6003baf253f9de028eacb03e9860a8a514ef4e2fd5edb7d6f2ed8eb8d58f81cd1f6ef05b706e22856fc29b550973b9377e31314bb36eafad66146cca4ce39ad9f971a1954e08be464e6a525be21775b6b988069d3e2e31fa9b7cc2b77040558078784814577f7bda4a76985b1d759334c4768d93e1946040a3f41563fbacdd8f6ce3ff427fed432fb67f21ff3fd10a5954ab8d4fc7d90203f9fbb1f1296f84028f46ef31fdbab50ae996685b5b82d37d055b02d81bed02cd5dbd5a9875f9de160f89f4c07604fbdab1032ed96cace0a8008980f871a967e76b2bb57f263c73563988c5350809aac967531b94f6abe6277863b29b83078b40bde72b287c106e67c94fed74516da982ec628a8a320ed7757dde1c3d986a43dc051cf1127c4066987613c465c3367e40399a693c1753d37f286f42e25f9a51629e5179770c6d29c8cbe832c383a2ae058be92f016b0ffd67a0fadef93c13a6770ca50855370e783bb763f70628904631aa1120ad7d72d8770cecfabf3f306e5425dc1914e85a4505afaa4130c28fe275f33152fc263c3c65cf7a8915f4e7597f4afc1263ee72ec8fe0f3a71fd8311594cbdc61067a6bf66e8069569d3ab15e088e59b629a4be2f96959722014a0c80a6d5963a4f2409bdac0cc964fb5b0406cc0c8bed3001a22a467f9f774eb99892887780dcfaa485c6c49cb4ecc4e57d580990f8e45cc6693c2fe3b0c48d5c8c7c0b750bcb549ffecc86a0785a1a06608c6da78fc5ce9e110394f8c96796b4f4077fb3a0b8f31f343afeaf133c19501ded94c67a35dcafa64bcb42f90bc7c7789a2adae4306ecada4b7893ed1445e70b44887020a946cadd37d449cb6dc30c1a304d75d01711c509dd557d9f8c4aee177663959b2a2b35f53d07c0401e67b43c65ea6d48f52b8d0a4cccf258aad90d80f5c77d62dc5f5b859b12d094a485ab606ef048e7420f6cd2652a58a1ac78643ed8dcc244ae8ee20335cf6dda3a01cedaec40d1468cdb9b05205c6622267ffd612ca6f484e4670061f55c6416dd7fddd560e8fe3fabe2317829db058e946c53fe99aec284818e4d07b327c207f664be378a9a14a7985583305959b2cbdb359642946d7b816f439f20d27262494e3f16acba57eba33e24bd3df2d90b26b22c1b14f8abe1b57a3a889339a0c36b477777a7835051b198d777c4b54dc21cad2e64ff6ee45dfab02e281c2f3e7d56f71240fc9d6fd991c89f207ccd6d6ee99352181c93e2a4180854839bb77a5239db2d826269763abf2e982d4ab3ea3aebe75b3ca955e582c3a4e200516a935fcc2cc9e6e0ee49c1ded1d6468062902bfdec61a1e9bd2364843e9e1f61a7b7d1f9b0906d3a73616cfd1106b6e4a80e6c4609a9c1f4dc50f60fe623569673bd7e2072b124f58e38ba8a8a9b07ed7ec2b601d328f941752083731d0e3a154a8282cdbd16425e262b3888011843f1b8c12ec4979de433b73462025a4e7e48afc7a90ab03e7bb4733bccaf534793b0f4a1954b1e528ec1cfdc809576f1ea6d419f6eb4e62fad178176bfc1709a9ebe28d8f0261ff749790dff76217676f466cbb041ca3a55eb7398c0d78915909aa6e6e8674a40f48653e80389cca6915d4195a62c69a4af64b4a5543746fe6ab68f5c63676f807d4888c6456ca3550f767086c318203d2b60fc62fb6d1672bb46551e952614d410b6387e35575be3e3544121302d6676a13f58b9578f576d53bce4697bccaf5aaf47eedb3498900c2a60d3bb25afd2cd5cb4e59dde9ce40f3bdd5e219d70344c9ab7751542058f7dad1679bbea7f3e528d8adae7aa5c18826d54adfc57a2c19cf7848619ec80d398a957292087ce92fde9cd0d9c91010a3a9159ea03ef5544b884cc146d3fc86facb8725ad554edd4a517900b8db4b26f8b48ebfccc3a3d547e0b5541512e5f8925518c6b2b162ee1f39178b15aba0b72513df41fec83eadc18f391326aaa886326440fbafa9a3858cd2716340bde923f59561f3f38ceee5b8891f63816449a22e405c9a6f4fbb6a1fae5791f4707796f58c7635666b72e0d926c1ef9acff989ac5e2fa61399f02490e72f6c67df0b569a49ab9529e88962ac5e304c47819ef9c7d6d92cc460be72c9b074c2dde547f672164a8fd36ccdc9f3d3aba24123840411e32d26b871aa801aaea54388376d87b3434c97c3638c68e0c726674d526a9053c3f090aa6849ae8cf0ff2adec3550422048248ba0c567bd5e59eb2c9db756f97ae984c40b9b44b72c30740b947f08ebd733eb61b6fef96ff8014b3a0daf0905223ce1b17785ed85e2fcb8dd0c3afd9041b716253e231b84db80266748497433256dc19958ad8747cd9ddf365df8557bf704fa185e4b6a0d43ea0de808d55b93a70ed77129bd19922a3cc6c872a2e7ff423b0f051c7a30b6f5b1465b9462fbd1b926a9c8e555f260720e6763de49dea667808a6b89fed7be7b983f1d9779bdc923f97a998838dfb9ca63066b75489e3b0d5718ebd9d786512f3b37700b99e36665c4d855867e9f41a653d983024c3f3fc0d3b02acbe35691f2bc6cb0609c332b7c7eaaa2ccf4e56179e40817d25803a8e24d028b1040fb17105c531c2085989db395d7805e6194ec3de65f01494dbfac2ccee441a510568a4853d2c6fce49a969a9ad6fc3a4db87155b0893bcf9b9c4e28fd9ba83c32e705c28ac5e7d92b35d2c21c39f60a20171040c4dabbea9ae66b4d4929b25108cf0d4777bb42793045f6ef4db6717377b8b8d439359d6d5a70ea69996c6e6eb5b653c67c181dad29e9b30e606af25199e4089e9b8002763d69a98d92eb6370de1e3e5a8c43c597e78a75512a37ec6c411f9efccba55e103f2fad79f1d8eb4ed367f08a91d29ce6919156e3b7656115e1b66f6ace9cb951918d5b42c4b87b3e8be20509db3560e5d252b148464cd047ce9acaf1a3609a27a33d46c07254bfcd45bafe635902ce6b3ccf94d9476b175363f1b1137be2f18a651ba02b53074784e4799b2eef06ca6778b871e8ee4af822f17285fbc1f0f409fe9b7aae767940201faa3a8acc88337b972bec61fd8aafd6f2ae92410c42a6f8847855d439ac004f064c35fa850c0c5f0a14862dfb7cb27af2584ec2d215e65ffa8702f5dabc9aa7a46b49f8173d0348d4a989406c16ae904f131e8ff1e34327df85019f9021a4f4844e8b02477f9d0e557a9caf6e03fc957801210e4a10edb9da2d3d1e7efd49afa1c22a5c024c24e3d03d16c24a2391a05e32e76a033b4e663504949cad6c986b7f5cc057cc6ef6de751cd65f9907585fccf50197bd415c0dd625c58abce6f7ea4693886208672893357621d003fc6574127fb47b952b27f581e1aaacafc315bffb618fa2a24683ce4a13ef0b3283b52d9b03913f81f94f11d1a34fa3f1adc41e072c796eb3882a5b6a7d7f9baeb647ebad577b8d9f44d6f7d38fadde40fe45c05be2b22c07a26ae37778594c0cc96ecc167dfc96f7dcbde5c144e418d5aef363928c0d9c01fcc5749859a3143481f1202aa94d23e51c9939e703450551e3d8ead460e903c2fe0e542ab92c69c01f4404f74a6787704da8aa85c93e48c5d2e88b91fec6dd8c118136f786a589efda1a132a0ef41d5fa0f4e62c0040c7036eda809da6f76b16fd29bfea2d9a75dd8cd63f91e6a76058c6088fed8607efa40b24382d7f91673f1e6e0dbe2b25f11748431efca76a89da2e721d226a78a5460bf5ba14b57d7879a4a126e49c14ae094fde6f9c0a306f422034ed826b7cd8fce2c45fbc9257786f1a41f09578e3502bd44db1f48d99dfeeb387cfd12a5d57ab2dc7e9750f7db1ee7abf9fb73774814138449abe535513fca6fddd318786387fd43439905ffdc06080765ca7cb61021d191d358b78ae191abbd2c6c0908e75d1a5c9fcc363bb54d26da02b7c6420cad8592eac78e2d203d94f48f99d1d455383ec0f6b24f3ff5c0bb02373cd7687c13362270d547ef6e54fc27f31345888289c9a554fd6acea6be7d91ce731b8131af6ecddf79af6d476f933c47831660ded3a0fb481ab15bd9f074d570f4aa90985ef33df000bc51816804c02947c28225b860024f2c455a0267bb57036d5394d6501646d02268b7931038d19da00a1490e1af40a2601170343bc5a8fbbe3be670b19f4e10bf102252759186d1a40aaf64daf5ce82b909dc7713ce040423207eca2829d7f3c755addea3c89e6006a969fe49013cb7257ce546af1e5e40dec578d6ccd6ab8c5233c3b31f47058a71c0c8360f4e4f4190f984cb6f3b7cab1553d0d721d2c9938e7fc73fa170e3b60fa913f52c1bcaac9702af9d8d05f3327e1c5dbc794ddafacd7e117c44923370a01a59b5c1f3a86911b2a6848b227258177e4eb583ffbfa21c971e9aee14de127e5b822cefade8b41174ebc234cc5149a675085f8f7d14673ac5de9119416b6c53b6dec6ad9ba40e6f9051b2b4b5de3a2200c739b7512efc8c6e17dbe983ba337eec0c9f6b162486c8d7ee7e3f080c1c25fac960e765e5218b0c0c73e3d4617b7dd18aeab6bbac03e3c0689410a792f244548d4cada4c12f712d56eacd00cffd81304806e3a7897ed2f9f56b4b86d996f44c57974d2228bccf2566613df4d43091622b4b0bd9c633f5c709d20dd385ac28274ff77b01d1b83bffcfbb7ff7d3a2cd9cf6bc31a1bb0f62136603f798b28754316bbdef93cd6f7b3776d86e9bea0baa2ce51798558c8954f02a9b2c629e32c4cb5ff0ef1d2f2a067d05be252292d39967ac1e0a615e578cc0065f508c4c0200435cdc246384d848a6c4136b5eb89f3b31bb81f2aa3a5804cb5b51a9f01e05db735d35159dce4170634236a519fbacb6fc090805b4f5541af7e7d6aa5380a781d1e487075616adb81797cc115370608832754009824c3b53ad78e2b3dfa5494a8d62b13bda9b56daccf9d677ff8431a127301c60ee3a31cde4ce2b4c07b2568c257d589b17025e704bbca6a6ac449099b05ae85350dd97703738d538e90f64a277e4229fb056b8bb5026177a3d4fa2c256455d8f73900dfcd060088105eec220da325b78bddb8858a5695a111db7316f8d99070972e6f458df3d8bf570ea1e6e2d938c82da776cd9d9aa0e9a7dd033e6a15b7ea7ce891e780e65e5e96b54b535019a6de574d78cbc7a2cb3b7addbf2a1ed621126e6ec41281b84c51bcaac1ac8f3c329d07ed0934997d0ac935a5bcdc24e21cf67314cbc3a4f3b3d9e396d8d299e4fcd198415909f41d3e3c564e97c645ba37d76d8f6a50b96ea400a89414e82b9531cab740266488b07ed9b44b0fcc4f9dfd6b4dab9de1390d26ef2706a9c3d6ef818bb581f64e9ded7041e0063bcc821fd247ebdd4275aa6c3dde22105e9b45af83a8209f6156ad9fae5d23d63ecc77cd4b8842080d6a7137e8f1172351d9be97afba3140248785538391e341bb75423dc7af4ca5f7157c0143f30995bab472fc033527d7cfb6d7699c6d2f7bb623662d6163295eb208817f0c1ac7de259df1f427066fd1c1adb30672902f2ebe522f49f8eed5fbdbe2beef9a9ef1bba0ce524b8180663039b27b7b07fcf956132b5af36b806dc676e92c0fde91e6d9c5abaf0457ffde2de2985d5e294c43ae399cd5e435e98eb21695355bb47b99b5c78abdd24a7b26b46c771a1e53c0cea3f454a8399cd8b5d9af1a2efba6366dfb84837cb7912327fb2cd0a7039a8976afc54ce871dc993a6a6ff5f2cbf06c74fb96971ea588b721966cb1a52314684da7268bbfd52d3fbad1b23a375727cfe4d1556696c4402541bc57b5ee69230c6084f82f4a0fc378521a620429e6f9ac4f64884b992fd57d5e0751d77d9d8b96d106b7f7683842b5c967fb239444cbe05e5b8c65b8cd5f10ca0665b078972d0c03bd216e6f6b3faa7ff71716319ccc3119c446073cca2585d214dd8e8d46c7492fbb7988851272291febeda8b88dda9d758aa26af656947dcb1a2b7e255368aa51d108560e2a96fcf4e4271569486390dde8a0411509c60a40cc72a4bf5268c40e68d472e4c51775372ad1fb80418a100d475174e2ff8bd26ddbbb54b294d5621030eb3da38f31ba6f34170d6deaebef486b41e9c1870e34f2350e72b46e637b763defe31afec4bc91cf4c06f2ef78aecb94d4dbbe6219091bdb08fb89cbcc233fa3483ea77efb4a1e0ec069f0722b8cb01c9540c167a4315ab45732d01a45323d83d07d0afcbed3186ce677655b0d50d364fc06899936a702978df7013982717c7b0832946d45402255b6dc64bc8d55502157864bc8b329adb6dd90126c6fa92e769530f89b52a1eadd490c1e32db2a9eb4c1f4d7e3aceca40de50ab6fb256828f98c52bfee0170a65500412858164c0f53f96abc66b9077efe912ec07d17365741bb63921afe82bf502289ae1eab47b180b8e6928d6c57427688c45a68440f23b177be4b094f5d49fa62dd6682478915c5907cbe4349e11dec92e66510e021214de2a4453a419e792af63a81da37fd0517863f5531e7a03b08859de13133d527d8d07476daecf1a66a6eda76b5213d96e661befd7cc8f29c418c8fda82d45a4b6076ea2a3b5e2a96769c21c7912f0d56d369f1c3033109444d55e472839cedb6dc82d43795dac04594a5a949a26359aac5a67fae9254d6c99223899918c8bdefb19486af22d6891398f513a24b159c7f7e5227a3051e62695ef2f619287719f069045f882c7b0c318129a4ff5bd8e304bd9d5d148eb395c99d2cf70d5beb8c4d2555b74fdad35873b197d08eb81fa54ddcd41d2680dab1b8d3490c00585637f61e52f4f9c904b6903368c618447654f5f80f45ea52fb3e34a22f9a498cb39df46aa57e99cc6726d1faa08d921be4a64399ec0d3574b83dfab49f2903e45322b14398668a163d6a3b7c9e15325fbc24dc77d56b8c579a4fceae92e82ff13357f767518cfde4dc1e746dab5784c30e860d242588d1587e3a2aaac9453737ee6fa5994d1991261881da52f1538d587d8f239f56b7a98bed54c84d3b3c8058f1d3b2cd76249092d61665ad152301c2fa7ff5df6ebbbb3e04ac206048c95e352e82f3fbe34ac234da0124a1c3a59da58257f992db8897a3f9f016c7415ad6b3dd1f4f00be3be79bbf3c0d0e4c419ce0c431621c0d13f384965171b1cb6b18191c1a2788b9efa06660b574147955430f47dd401b5a3b984d3a97646c55c9eb28999f8653b3aeb0669930e1c952d69109ecdce69fd382cd641dfe724740b2287be15200189df727888ad4402f9a2f16d48e6b3f47e27fe93776650991332ee9c1e4390a9cea4e1c021b1fc072db1583fcdf50347432499586a4620256b7a845205521498b6cbc8afaae41099e37b450a529c6cf40238a5a659706aafb8ee6d9ccd7068f8cd3697a9d9cbaa9d29b85849c57bc27e6955cb7bba2850f3f9b907c5f5f754309ce5fb50a991586a791282d8dc9db914cd523fd12ce422281fe72290ddd1d766f5ffe2453daaec36a0931f1ec9514545e239d728e713997694ebb919ac64bc7c364139663821f4644725118ac38c5e31f8953e06bf94bc1229f865c276ad927e6de6d7e32909bf8657cd9d700cb024c976edd11bb7510fe306106212f4a4e6d22de0d6e8a44c8a94c49935756db73e8fbfec5bb5e4b3da34c1dc49f456404f84d0d6478eb766df521099f3fd0e46110c97d950082e9252af50348fb1c6b4e74b19aa6417a4f31af8279676d3aa87782b51ac55fb554fac5774d88b9dddecaf0d3831bbb7a903b40335632e459cdf7fac8499b0dfdf6f0aae3ea7c56ec4f6079d348d5419cd710a1a790774be8cb493900b317067584abefe71016dcfd765a79570011a25d3a2c29768ac8a9564e90fecd31a5bcf136e2845db32bbe57f3f7f8367dcb10d8dc3283bda0ee7a532babe96e2b72641c39c8824df0005988a382c1df2666724b510878e2d1b075d9a41855d7beeaa2206c053e8a83fa363599f501205dc6248a48bdbb3359f9153e785d87c28bde663ffd8fe612ed7dfd7c6b4438058372aecfaaeacb8327eead20250c87e5e9813ccb01a7f165161b8c06b2b99edd3af78582dde89587475547dd2f6ce288f171f1d3ee40003a4fe2a993ea90afa27d2369827e5ccf1d3f4bd109e14403d055bc38a0e72c7e3d9d6848798a51a109560f71430521b73c28390f66508c8eca87242bc57812859a8f08ce0a396051a1c15e1fe74fdefe5a9bbc92181302605749022e77973766d21f8b857211d6220209d2e6b60536aab9ecd030433fe5b6ecb79e3e62f8cdefd8dbe08dcdea7886e0a20a776155d9cb0b015d534cf94a050bfe9c888dc63f9e7ffa97eefe586b8ce77dfe6eca0db216991633125564ad11a0771219f0b6d77819f4cd4ced26eee3c5f7561fa56ee60daa5176f863eb713bf57fc27dcdd33463b01efd96fcb31b808d42dd69aebf3aa73120401becf4a2dd3d1a6c4b62b00d6039dc6055aab0e5c53258a9fb381201165b6fa37c13b4b6b10e8e2d9853287815e8bece7239217f77bb8776357656f85f4191dc08e943b6f513c20ed262c0ababb9af973d63ec0903b7535ec7732becf0bee76eaff302342dbc2e8e6171e58a16cf4ba038d97962244a520e79484881db93b87d0a06bac19fed5984a06b9c9e7ed534593280ebb8f71c7ebc6bb007b7b14af95c99ab20c941b2dcfa167b0776fe7385cac51c28e81e311d5ffa54b4dc36d0a02b25f6faf6d4895f07b6230c542ae458fcf3a74baa4d2e166e9d85fb9e4cca244efd56f01f445f3b8a4930796cc9457240198c4157eca10813f5878cc2f09a30b4a1e890d3cf4a2f8d7296c46bb93064befbba08f5572778a594645baef27871b25a5e7eb5e7dd4d13ccee05b6956551c6bdb1317e5bb992f44cd77d7b5e4fdc8374fabe0c3208f741ffb24eb26d421050774b3ed9768366cd59aaf2e85d80f55939011d2966e76c697c6e1900697b7aa17504fe508e6d960b7a6865a0edcf83d1b1de216afafb2faeac8b4e1885567e4c4ef5125ae88daf3c943fb0305507d9f5305f101c90f53b2ccd0e29c2e8c64adb83546d90e353514fc8d3eca714aa13d2fa45815a6970908e0002768eb43f8a048d3b5b59081226c435c75f33916b7da34497ba34bffea9e91aaef672d71cb62216375da1746092cceb96b90ba8b6dabdd58ffa8cfd89086187d3cd36b75359ffb1d44eccc68757e0e961353d4b24e25e06a8ddcdc285ad4dfb00c3a6e92e00dd8bb12788f3cc649d913a8e085d5fb7e5d8cfb456223416bec41651dd19e280b1d68be557a134aae4053092ef964d552e51f304474fc5d10dba9d97f39dec8b5c3f278fc2f416c7ebcc3e23ea78bf2e159a18a18bd3cb292d7c71285f91cc02b9d47f60e0a0a2bdcc1d58c9c7899052ad52faeaf23d0ded271dfdc0ca95b6ae28df38ad80b88524c61475c8feaf4576f1dc618fe37a5f269293c07b5ebb7141eeed6d4c0c03e05d8e09fdd1a4cf6340c04cf75558959b4c192d538b5a853db4ad623694a119c9408fa5dc7dcec5f3f292f4aeac2ee7727f2d9d502013a5bf52334c6b6175fe30958bd51d7e40393b1d09cba058e5b5d751805b2e0a3a15ebce9636a441fd6858c096542db0624a67d5853dc7f0195a92c305553c92d31131c7a129b40ce4fa78295c4937da56dc2bd8cd236cb929f22fbf026e3f842e908f0c8290e956d2debb0e92ec3be4b95c16dc98bf33b34fcaba41033a0de8134aa9daf4469b9a57186cc030b895d7386ae9d4287713974630afdfe0a98dd8f610226c6cee2e95e672bb33f68ee5ea928b913f0fb9537a4ce2fbb5e353bcfce86b4f36f69d1d5fc525c1f057fdd544e5acc97e053daf44d8eb1f74051b002a4a865e885441a6de23d8542e6c523fc988deccc6388aae54deb773b0ae685cc3755c30f323855313b3e6c24b22b7fbc6e63894d80142634369fa2cfa1d151766ca222fb488cd520b7cfa7caa69bc804b3d62cdd40ca63102049684a66261f30ed22a1789cdcc7daf979946105e8376d0afde38ce3e29af5c4b32b5dc34944b8b0964adfeb4bab1886892402af6c67612071f067c5f58987b64deb60a5c5f1a1c1ec58b137c7ecae0189cdb8a2e662c45a678d8344f63be810d18f74893dd120e6850fddce869849db87afe0e080a30186729bc816241da1f0162e08707691bd8adc4ad223b2b1b6b51b232482c4e8cb91bd04ac5b1c11ee43030c301554a53f0666bb74956955d32e07e1e065ad17fea8d614959469b6445757c0f3f6af524fc3f3ffdf3d85ad97760c00a8435546b5df5b281c14283a6b229a902a0d5d43846b11fdc90ae7974abf910b803587de9bde2066597f2941648ad90bde2026d5cd582daa984922f72aa743c4db64a3badb784930ce064ca8d0db773f91a1b0b2107aa8ac09c6d99f76c56bb144f6e8ef9c2382ab702c2b368e6915dcb7e2df5795d25a97343e835e4c19ed64a22448172b8dfbf093f637b590c92e9680b240c6ef0cd43f97a94ea4f4926d1bcea6bac32f68f058f9b84bf83b91b250df60045ed8755291631b1c0b8aa8142e8bf72d1f003e13a8e545cecb86d02985034223d1accd50c6c62c648d11a155f63d6b6d26288ca8b263cd7f8c19952232752ad787f2d1c2e00d38ad9d673ba1365bb0ce7743c19d810a34a22f960cc035b5138d53df38cb2cdd3419d2fdf5e8e6944845d734ea202ba07e0f8ae7b43cf01f3a839f7c7a46c922b86964e3b3211da78c476c2e1df6e8fceb880b574dbfce318f97df76a7c869994a19f0de408d47a8a9c6677c620f06c9d44e970852c87aa73d82fc02293e542ed62b96152badf4f83ed2a7aa0790ae675951d3dea79255756ede23e01d8ec6e7ff1d39dbf124f42374c7b714b99a96674a1c3802e4a22b343fae61b32cc7ee12bc86bd790427e90b86bfba5e28b2b5505168c12a1ced17aadb8474eab56dea8eb7f6829ef1e95ed727c10b02270904c3260df7f3af7b8294cf5981057c3b4d608e65b9b8468284f958605f1b2a6bba600cfbd0bd949b819e206ed3f1a9aa2d2112a1cc3a7e95aa0b439e9dc6483043dce46f99680562f3c8b65615f4c1b4aba96dd0b000e2a95bb5aa1409c625051ac43de98b685167047554caf8595b2c7b202570b3dd916176526cbcf109cc6f5c959d0c00ec1000fb82ed0fdad1494d963a73a2601106d02fdfd08f95d2534f6311d1442abdb97c1aa3534c883104066ddf8a2c2bfbb6ed6b6e9513efb862c571654b8786b71f06a06984331652d4dfd8d58d81406db18839a84d81d8205adca4f134b79fe8eceb2b8c055a16ba7620532e5532114ca5aeb82bede820eabd29c55615fa86e2a34e87c0a75d708900c119f0a1592e4e093f4595542ad93c66353d76942bf5e4302938aeb8384f4194af64fbb59900d61ae58eddc0ae5c56f5c7b7f06e24f18c537bccfcb67889c9130dba4c638444ca2cfd9112fc79fbea54189bbfdb2a23d197b56bd6c43ecf98c0c48af46bed625d797e941cdfb332dd374978542a7c552be278c72e7737c9a7ce9ab94b2e340b1b0e8007513c26897128d8019ee3c832a38775c745c7dd412786e5f5bbff6ebd43e5fcd88f5387dcbc61aaca1090cb3fb773255048ac7e398bfbff15397ce4969e10e8f7215cc54d2dbee4baca5f1c9dac90ba83eef4ca5cbe32f19884317d10ec635a3786c1ecfd8220facf163d0d69f902d757bec111df593fd4f24512dac1a359e140a463bac3ae740c42a59ec82e46f3752a276a3675457a9bed22254ea1fbd4314d54be810b6f244d3894d97baea6c798ee71a2b4ee61daa49459fef2fb325f92f9646645ba9c6e4adb676cf6b3797073f012a708d5e44eb7140903c90c1d29ba3925f0345401f844acdc45af283028c7a1b3d62f7ccd1e93e9e465b798d5ab283fbe67f7c048fc2bd22b2b6037d57f743184f5e3ebfc4c457c52334e163239fdd412d5be86bfcc2cf20ae1dd86a906ad090dd37521e9540547939273171e72aa78699ec719bd5e37e2d8417865827a1a76b3f80c44cb5f0e10bfb14ef55ca85011eef035d9ad95b4bdef1d861ab184ebbd7e6732811fa413be29e335e68825aeb485457ec1db5caabac5b9772a68f261f314fc44655c5a45bfe6198e9968288700b44260334aa12bfa6810b7ef108185f6d9410ab9e7adcd592f07af3fdd30405613a8976ae739d6470e0e7ce92c804b38e0b47df69716c030cef802caf2a197329df98645956a4b7c2e5a43598cf624f0e28afec50b0a29371c4beef01d7e4d2b7ece027f79b93a8ad03a0251adf484a87eef86bdc7b0348085d23a283d6cc820cce132069d2d0a94a7db7d5b38d1db37f0a0f9f0f9ce5018168f39ab184b4dc900471b62ba5e237dc50e3b49f61fa5cedfc9faa5e1c87606c694835145bd24f3c48f06ff4a414e4ecefdeede39cdb878866f3dca8f53da36e7d2889d5110bd6b4943fb93f54e626f866a44010614d2950e7aa77b6f71571d2509efa8097ec5e385f64b3137c29701f3d845c594a229d9d02287f6de6a5a0c9e9efff1ac467d4df9d166fae0071aaa3d94c5924615f9daf7c13342faa1e50ab54934394e61c0e45ef145c9dfbb665f1b8237b52409b3d7485088f9c015519e8253f21f8fb2242f2d7cfefe7a6e3437d522b60bfc308ad6ae351a9e57e53b7f9d2e3675f1bb1931f89c3436df5a4b73bc36fcdf0eb50c863b57a7cd9b1eb90dd367c5dec6c68833bcc3acff7e060a1a51236e3bde814d229544a3bd9eb169024d2cc195bbec6f3fc16cd420b829f80634332c184d90856b9efb09f64a788a0333be74097b4f68ec843a86724ff0f38eafb3d08e72fbbaa411451f97e1a87eec1e68434cbef61b4aac7f0d86b24361ef0fafaea5e32b6618336ef5e25480287b35901d1ed75dc34bfe0590f7fde24edba3aef1c796e95ac3453c88b8652c2df8889de8c6d6744b41f87e498ccaf2741a9c0311793d4097180611d9eed84748574ecd9a5c00ab26ef58331b4cbc9af504c34a700be44393e365540b3bdf8e552867cfb5abf8417b13509daebe758c24e24704565d16e87ef2553853c50df1ff1298a9200d4ac82806dccf337949badf601b4fcafb8b29b4563358484d130e2c61f4f9db6c1ecb5e4eedcd97ab262b1ef5fd36beb541b7ba81a8d25440b5acee82290502ef80730fba48b098921cb7f9d3690373c02ac86cde55261ceb18c8060904d0b9312aa508f0adea7bb988c06eae60d199794fdb0e2ccc3685e8d0f5d1311c88288bb79fd75aee9a692d74681bd0274e2cebeeea7aeb64bcdbde038c2495a151471da6c57e495fac6f7302842a8f6f67c5b95061542fe01f4c8d4c78f5586ed59f9be294ac77dcbe409eb024d3af7510bb709d5314a4e3e717d587d5b6613151e9988dc89b410c35a5e38cc8a2f51ef78472618c126cbc6339006eb11a797eba75c08763c4054933f6880e6fe07a91f05b39fd0bb7573146005f5c6aca0fb49f1f19cc8683705cf0b969328dc2cd8d7881d17e66a288f85b0328e5bf12cd71c4d822eb29d87428ad382e42e8f744ea2c588a827d45268a0755e23417982ae1b031d816d36cabdf4028bfb99f027e803ebb47e6d4bafb712ddd3179cbb2e42165ebc044396494ae4645a05c28e738cff53cce87a69ea7ce0e15b10f9c24b6a2c6865e90b509ce89d10a1df14e50a85fca3ea539f1c47c819c57d05419da7c19591cf0f0955aef0b6688e77b42583e3ff58e7d1ce325f7d366550ddaae70694528cc9dff677ada84cdfc6b20eb86dff84916273ed2c198d3721fb88a8d4953bd6eec3e4ff8c4f7b29f6b29c554244c137b045ff04ec013b1550ec10c5a835ad083f025ba216f6998a0f9bc26dae907bd92d91f456a18a312fe56cbeddb52eaa9f1b2bf694fb2556746ce367dc8c03d7a12bd55ad9cd98b3546fd6aae3499bb5ef058cdf940c1b08c169f0c6eef9c6a1685f386a8af9fcb7a72dead4b80c004e3aebc0165b03af80e154f5838263eb464fe4b6e398202e91c22fb9b2488f0e1d8abca992fb8ed7410d1c1738660b3e00c67c7a0e5b7a9b597c4b213ade305e3709050c1f0c3360905c742f09c596e1c867a883193a34b3af9cdb96a2110ab3022901c744e6ad803248ec27f941c2db698ff12132058757c3bd80a9405640a79d01a2d0d44728a58cdca71b48ae3396026060effde9b2752ba71f8104a0fc0719d154883a0e485a30ac07f63cefb1c2adb05341cce720209eb5c68b3b9966f243efe5982e5757033339a055a82f18eadf12069a2c833a1519f3a5b5ccb679603bb42293c8e6d5c582c018cb6cacf44566c042526e684c0c1efced5d8b8129b7d6e99b60c83a22ce8381e343b532559fc42f1fb73ad7a4c463e061a7fa247fdc873adffb649961bbaaf612b2cf2843ede7882e925f8316b144bdff70f40c20cfb70aa27d4c1db9a57aeecf9ae9a946142e8fd71c345c1b18a9e2d37b6af2ad4efacb382ec30ab6d82a70b6e4f64d0639e5dacf7c7124af0b94d53af1f5dee1090daf216d5ed544fcf4a367b984bb35f5cd8fb6d92c5db95abfc5e7952997f7639e935b31ea79bdada36e362185a65f9e0a0671768500f89141cbb23b9c8f9318f83edb07a99930892e9119e75e5fe1687ab3507f40d39127662d479acba1cc268b153b257f81ca499b467d5ccb8d416bf9ad9cce7605ecb81bb798014ebc21b5302309c3f1548761f2fc6ea5366f397200695733026b9c2e7678be1503a3504c65287509cbe3b0a2b1bef8f3d9a2c55ee5835b6391a76d21c50e525e9d4b2116c7c8ea800a47c210229af5d925e3349d78befc8fe558635302250289f05691d3bdd930f0522bc4a9f4d3225955ea9e2bd17f2da083fc88147b9743dd771a07efd84870c4b6145cfcb977b7a25acf85818cf22054d97aba7dae91881ff0da6afb8c2d1b40f82cea7fd507fd8a664a4f245ed1696c7df9e445e20069e749e5cbd707dc399f697d5332369d1b4163e42672d5b1ead50e8a64a08888d157d7a1c7e7d316e9deaca5f516650d28e5d6cda0185987b94f1fd5f378ed1da86394dd40ef625f78a71ba220f9d94cf52e9a0fde8c5225d33c9bce69c5eb99b5b1c07b3bdc816c69983f01e27088e76f028934ad6482418b76bf0f878d3e18b2defa14e44fc9ed5dd7084974af55eb0805c29acc52a355c2a6a6598e5528a8f5d59445bc76cbfa5fd0cbc830cd5098fcf7f21cb425fe9017908f015a12963fc4d4fc1b9b2db78a582b6c5bdc8d8f47318745b47e2e49deccc83f76b45d12a0dfa318829791033774b319411fc65c76402de1e3e17f93412dd76f47989d7791284490d587a596d0c85251fe3837cf9508d8b2ab8df342053e52954baaa3754a4e0f17e6ef73e75a5c273b0d1069409fd8c9232095cd7ca02432320c391e684a186b47c29ab1470d8e00ac71a453f7cc5ad805e744bca36ecf4b33eef0bfa9b9f24a5c870829e3531def5e9459ad4431e4062938b994ed188da13f0f53b8d792dbbddedd3368bd50144a09849f3906872eabbe6ac7b873e64ccc0ad15bfa2e5f7a25dab2d3637012403374e0713ecaa34220c2a64ec0c8cb5e966e75ad7712ed3451513c01693af126f1920f11df085f068df3f149315f4ed92bee1003c938656f2f6a5ecb119ce8185e7bec147f8c97fb7d4232b21481a121c59496e5664eeaca8366e74736d1f637b1602efd37c2503480514a8faaf1598b858ac153d547a32a198fb2cf1fd55ce4cc7cbdb19a20782361ea5ebe41b1fc2dae3ebfe8c11f209c76ef95af62eba84532ef9dca17e3b5d7d89cc9799759a13d6bab50d332567f1d7776d3dfd5978f7c05b342b864b8f7c587eb36831aedfcf42b8d922dca7e3773b14bc7de69bf4253b3bf590358fa0e11d89048d443c27c99377a39a09d96a7b93dbe4e6c1e9aad4872824d7ee42803337352ecba34cf65d6dd8f5f0231254df6df94fa5206bff723136f660ff00c06eb0259614f1b93adb280d1cdfb04e44164e2d5a98863bfc35879067a93c408a600f788d7bab476bde4f60b1c9428dd0969367a913796c445c41624528aee531dad838884af898d1ca8a19e7bf045cc9b506b1df06eabd9a852744d5229a61e04d7414d9a82c70e85fb3f05129eafd3bf9b81aec0a8ec027ba9a3c75e2e336fe6a25064379d7320ec83b391785e119c0190b40207a087abf485be42787d64c811ba2a4fec6a19eda598ac133f06592cd23726c25211fd377ac7e386e4d83bed903f8870b8a388f51ce3b6cb188473e90c0effb1a16e766d899a403d4d98ce8d515e1cc4e3eede4563c982f1e3acc006ee09a7bd1abad101e1bd81614f541535e42c78924cec2f95b43cc5dfc89de017d9c99820439051c1f85ad49b330ed8435085116f9ffb5320299d223a5f1261f12713fa8d0bd2d5ab40e773f090df8ee008a0a366b3903b342ccf86a1fe2f441b7a828090e0844341b2e03a1b404b05fb3a87c76d1bfca356ef9f216b051f08fd0382bd011d5d5d9cacc2b9f1cb787b3849caf7c2b521593e3600eb4c2f9111974e2be4fe08fc4286f5a33bc72d2d2583dcf9e1b63da0c3ffbb5776d8cdeec6729fe305a30c4f52a15e5269d9fbee4063ec3cd56450cc47d01eb53777c180212851fc4bc1685715d6e1ce3df15d77493dfbbb8c5000fed71a3f1482451d23df10c67daf201dad7b40078e51260294dae1376019ac260dcd88f849cde7f43b74b76a9565f46ee361957133ab34eabcd45b13094c7406006236a0d90be40b8b4e35d45fd3089e6c5f470863cab4c843f605d7340860fa3942a0eb719d2ba207743e2fc4f29b237e6dbe72677ab8f3e0a79bdf473aa9fd609a870e084e6ac09ee92a1dc36650b0291d7b0cf856b9ea6c7682bd0f49f3017e4652bdad366a57ccdf3fd99b84fd80a623a22330ba86bf093b82e023168f7a3ce77227e8935e9df07ff4ea083ae9eaba3bb2499c8eced1a3458c8bddc397d9e5fb35276d54cda3d39a37df7c6420fd9cdcae8a71577da4db42228a241b1109b4d8c424a6c3ac34092c251dc92ecd95e492fcac81996031f11e56ad2401f51b16a7893e99eaa215a0b717069045a7445ff6a16e7a61a8977124d675ea1bdcb7063e4af9bbcd07e6bdf6b716e3f514e699e9af772f78290f544fee031a3c9456ff7e9d2c47d30f96d56a6d2f0b3528723b95f4f8d0da5e7ccefa0f342a7ad4d558adeda741a7e06f950c21b816a8e7a566696ec753661895fe90bf10794d42dfcc874e9a9a2a89a098444d744a2f015d061805888c0bfc36191a40eeae7ae35e9ef98aef5ef3b8df3ab97a8dddf0b7a9a90d9485bf1dda925d883b4531537edc7be38c4b95780cb182074fd05fd09f24829774969579fae4cdc7f4e655a6c98b621f89cde7939c87b7e1bbcd887017e7d97b5f8d07708f2303274ef5f8b88e735bef38f1ac33bed73d3d492d9404b813f4c40f1888c6f9de4c80fbb1caf05d213bc9f85161ccff352df46196837018064e57aa7d84ddeaede28ac3457d139c58a7173982d0add6121eef46407bbc7f32e730b860fe00d65d074b5e8e4ac6f9cfab3d0b1c19783e752b5418180134410f0cf1a93ad1b96d9b326180bf9ddaf60b28ec65867eb141016e816ad081974505410b14f1063b02f5b297aa7e01226d8c704ed13e96d2a3f4d083efb6983d9796c362a594138b7a9203a5166de016e640bd101b19587213e58755004d2aa8782d45747bb6d313a56eb1d230439d94d627b30dedc6da14779a4273feb31462d1761241e966493a8443f728497a8132c2197308ae158882fd8d08797030515582858c6af052b20662b4f1e38671a986fd8dff824b0c904830638a8b2e0b941c07d4aec121d2c5fcd4c5ab5a2cc52426b3ae373b0b96d784cabd0de1741770abca0b1e475dbf6dae8d98fdf2de04826a0678e37b3a9fa5344ff564419f573fe9806dab2ebb819d59a36f91d2dd505d91b2d0537b8cc01526bfde2f664bcc6eb11177655e6a253213167c59e32b00c90a6ff4fc08aa9966abad6ba2f3c60a252a8809d757d3e6ff5ead0d068f6e4b9f013697c22845360e9d57d6b19df210b9f896ca4eb8d2cb19821bad83a91cc0eec6ffbc4c49e6289e866aeff5a476d51833cd68a0235995892a31b16ce4a286b20dc65c18ee32df97a2557dbdd8e11a2d21b200803cef707986248b2f1068005709bfd5706e3f2b0baacf8a5cc2d200e5d9a26b34e9f4a4e87c1771802a29cbc4bf7d8f2781bfdc26799c817690bcfe24b65caac9bada0d689a9ca599d72688c0f25b22bdb06178c6305acac22f0bee32675f7448b1b5cb41986e6675b256ca830f0a59cf9dfed015b9fac9c7abd46550429b51c70610beb792dbaf44cfc63ade98ac4fa97fba21c3247831f50e11b73cb87791a982db5f610ec733721e261a46f70140e6df6b83ebc00620aa3dcc0bc06aba841cab3a34865af95933063c1ee08554a76bd11288ed197407a621feb736c85444f398d25c5acf40a62f2a69c04f6082b85718bc82527a4b988ce0d6effc54c4611e2858d90b2e7251bc9483ac877d7d0227d3ed32bb85ec7552e4c58e2a71e5f96fca921527743862f7f9595517c82f6ff0c4fe35400389e78e159bf44e7adcaa919728c8ba6412694aa4a46819a57d653d580581043636f3f368ccaaf99d311346cabb0be8146d58633193f7963427e2fdb5f3fbf3317bb6cab59d80ce3ad893a6e7eeb700919678d1e9f7a39a088c3a9a1089debae85f85be336dd073d4a9529afc035a3130d369bd3f330814e7afab4c3bc45584c087362731093c9e2b81e4066c197aa12f866fff1048b5122fc176e1a22a8cc348fcc281a55ac4f3752f9b07556038f89b70afc2b5a7cccf8198f0f9919fe9d56fbf8bf0bfad83e85f3000afed616b51bf00d9e482b82b05459d6730d4dfe8a46edcde2deb125019bb3427f061953d383abb5baa0ce34d5ec9201fa7d81b9a4f51f8e08e948fedcd0de49db8ac60cc695b94595da97433e947be0a68dc629f5e0443da7e0d3db484e165f9439739d366a08cd15c8701a78e141d793a22eb07af69e3353dc5450cb7e70bb3a924c07c6417e2ca56422017599c31bf4aa97e66d2035841473d1763544ddd89a3cde6d7177e4b60a0a034c10ed03dbde8dfed626406cb48c3a62d19635d5bc9ec9dc818bcd44cfaabd21cdfd1d6c2840139db5dbaf1e25596651067e22aacf48c602530e0d07c095a436945ed9c452a75c7d50e87883a9327ac05955b2b006430a2314d0e5e4cc9b004041902e68fddc645cdbe7b0d387cbe62e42e75cfd17eea439b94e6e2ca6d75849ec580acced8993f1f54b8a51bec8321877cd6eefee7f60e2ac092b626f9b1392fd224a4efb80cb219aa1ff41dddba0082b328e55b6618c1f295e99bd81a55db74d3960236056b54423ff8f06e9afa02849245c5a3dd87aee2acec7c33817510e8d6ca5b2be29f6e5265a1e1a357240e763e5b634ac73ffda711f69eafdff9e00dbde2be82a397b856218a1524c31e11c57278a10a090bc01a251a8f1603a060f21c69359a9d717552e6ca2917c72962bac333a67061bf3cc4887a37cc7b0cddd5b10afa70216d12828189bd060016287d1652fb8ea110289d347a5e13d43a83900ff745dc0847c76e8e751e579213cfa275d1ac868386cc3aae4901d440dbb1c9ba39381e66926f9e0665e9afddff202420af75179295e9f61ee3c8b291532ea5b5be80fb25892633374bcc27042282f8eeac430d0329be0a95630eb7e201ebc97d98f3662a5ddc6eda2598b19eebf66c3c5be4a40857c3fa1131e6dd3d0e38aa16ea427ec5964f44916967fb5089a2ee4c110472cca545eb1cf1acec26d4115ef111294e95801a7eec86a6982207d3345fe27972c3e9362d6fb1402f78012c43314a197beec41bf697149a6f722a257f49c467447f5a6de9edac38de0c2de01424f01b61927fa1f80d6f0cf5c525df8e9f5090fb157faeb12199e12d4fc24e057f06e142a7502aa4f31c8856fa23dad30cf908ea9300bf4400e8a36afe58e42843abd10b090f2115bd5c558e174becb4e3316ed973ac8237056f3f097aed805c7478cacf8ca8b660e985adf894f252671824db5f5c2b973c9ed45e84a355e7e765bd114f9a28d6428d35f6a6ef226297fe4ee71fadb2d5c8e5ec612a498d5a645d38e61054aa427f695ba424061be24f13c4c2c38ae4ceb7de0a8708994093accbc0f4643b99b2c43aeaae7c096c66f766d7b97f27ae266a77062fa901c2c8cc63f1dab2363a321dc5acc16dcf87af15bbefeb5d572ed7d571a1e7451d01f84cc463be7b5a0ad20e355d976a6645fe531b82b64a071428423e949a0bd48eaae808cd82eed3a5394cb43900c686366f65d5a4cda4248d9cd495e6927065caff13c0112451432accdab330a72daf7b279f6405aa958d8c9ca0704485cd37b0342579584fd609d2f86b1ea6172cfd8632a1dfd14c7f976fe2f9f3bdf7ddcf2fafa8bbfd27fdd1e5765d85a435c7d4d322939c10a7a5f33200a3019e852b3ad8409f54c56b6ec573ab1e5a28db4d2859353be09b1d5e1dc5828ac1b386813f3ee7bb9ca645778533fc10a55f7567b570067895a46f25bbdd2dffc347177d70405000170bc151c6e7a66dedbf2d6ce85bb1b0e3463591ff70c296e451ccafce7fa055c4f6020f2d334503df0a75428a432c8ddb17d5722ee68e799acd38a32cc06baa0dc56edd4de117fcb07a71bd3041750c263b6df58d9c60ff00e9bed398d3bad1644510700efef1c9dd0085028b93dffdeb9c5d5ef68ff73933c322c082d31586da6a7662e328b29be477d833795561ee768bbd185e1badb03c2689fe470f836a264ae0b2f134543d1b1ae05c158bd33dc98742019a47b612e209669bcb330b13bf402b133dbaf5d7393ad004d70d830f919e9e4c9adb1e22315625d1fbbfd24d443da6b5edf837c25dd2c2338ca68391ca645f2daf4c1bcb128290ba8e65b6a889d10cf3f0c8639e9d58a33a77a44f54c317f78ecb5f4011d8a11d3801ada9e1df6ed08eb9a702e2d6b8c6b57d7df5bb1e1bb4e0ea3f0c68ab2ceb257f6f6c3e7fe2c1da1462ec6f095b2f134004279bddc6996dd77f752a78900559a9aea3c9049ea16e6372c86b170699eb1d597e0ae42535e3e137b3ebcae9a3d5549a4dc116c3b33297bbeecf8b22b9f05f9cd6bb03c45734d17c85cb89812b81c4779c98942b3f4e9d9436767b6e248c846ccc781d3465bc25271741fdd6a525b9aaa89a7ceada2a0c9c7156da5bdf4dc1ed20a980ff3683519eb50b9ab12c1214fc05288792dc6938f4aabcce60e54674acafb83fae05246bd6fdeccd2f0bd0e64851442228b241837ed20e6d9501a295956e3cb141087b6b0b7f31784607f3a521f216ba8e71740973b7d2d0377c0da7f98e2b91ed6251354bcc137668663353eee4ebc31abce110605bae8f7f483f459e5cc3dfad57c721c5416755f941a3326486f4a17e7f3cad2194573176829fd4648e7a373695a123a2811c1c247648ca9ac00e5a109cb3710df328fedff8a83143c88f740136209b2ba935bc87799badd7a62b0696d1e8eac78fff3ace0fcf7a25c7aa08295a1cfc8bd84e9897e61e9a727f3156143e2f64fc201ad0a2b4f1cea43cb4d5dafed8d43b2dd69df91853aed6ba92b79e85cca6cc798ac9c052f3511eae39d25931e1cf907aaa6b0f5047003f139fa6894dcc41db395dee8a627501c5297fd14c514b159ad28c5e921ad2c16c48c7add856572b727f25502b07f6f2c617cf542a7f243875331557f3f55f5e978eb2d6152e2188041b062225ea555939b93fdd5d62ff4351e4f5b84f6baeb0e9a4e6bf57e3e99f6334d880696de009b43d7cf529bad763fcee7ca023630b84ab7cecd36b59a9468a07a46596191871d85a9406c228aa9415171b890b606eeff1ac2e4c3dd1659e900c63c0024da296d8b66e4dafef675eb85a26a9328bb2f0bedfca3b44cec49b28c0b3c127c85793fa3b51d2b653664142684b92c2fd569bf8de916970baba14a5ae1a0f03450d3f5b5c643558baca35e7576ee68041713128e9de51287c4794c7031cbbf71e42bd351bd49d8f73227c0c8cbeae456a507d0c1ecbeb77bdd99635d8ffa571f99c1621eabee7e39ed83b6433567d9ae08eb2c1af40e6768eda053ef988def0c8fa646d00961836c9130b4d6696d1e6bf307964a9cb053d09c9d5ca9baee9976ae93d170414bbe7701171e92723bc517649722a8c6446f0f54ac482efd1877f2512278252ad79f036aa259598e735d58bcc97d4294248ee464759e94b3242f542c7a608a92ed64456ada89e08e77552f3e3f7a2016fda7566c2ab97ef93e3f667c0819a70b4991d75918d5652210d1a321df1e77f05c04b94fb6a3fd2ff3838a8d69bb855f6f0822781769b77ea6e4be5c0dec8433b6f22e0842a618020405ba85bacc87b3b0efb13522e5e8cc2616edc099539ea98fd0100193f33605af32528a0dcde0584ca10039e07e4227e74693375a3b4bec43d529dd410bb387aa3e797d1676ba702870e7d9946fa48681a5c7238a5abc2a36bcaab959a089be8ee9fcfb99f383163e31928f674759a945575bf1ade3217b19d4350d26e25e053a4bac27708e838992411281ba192ed13d71dc92a2fc12ff74c26e8fe0a088a46a4faa0bb1f060b25309208de5523db5298980605a6783ae511f1423e9132330073455e7ec0ea6673a452d65dd92ef40ff7f054161e8635e7670905252f0bb6bf4363643133dadfb85221023312108750596ca9a5e6011b6ef1aaefa29a598325d32fb2ca2c63fc10ebe0ba7f8f4728c63bd7dfb2072a38c294e4fddd0f15197044ef4ac7ecd953cf63ce77e68e0aa4056ee01f9a768031474a9953bcbdb150bb2de50d24a04d5f78e6b92db3664dbae77138006a70bdd66dca0015a069c10ae4b9bb770fd259579bcfb9cb088d6359171098849ba020ffd3460d3ec06fa0aa27c35038591506f2a73c4d60d7bd3f3210f1e8f59446e33723e14fa18735f9e054ef59cdf0b6ebb9134aaa0561e81d670872e64cb949b73e48bb23688e9dd9db854444ede04f3e08cf99306fe000de892b4a43facbf49dffd94dc79082c20d05179484373705a3ea360aabc7f535e51269ecba37be77e1f306586f90ee51c2addcd185a4bc70c3b89f3c68ec314f2fcfe9244b44741574b41d357fbe7e6e1350713275d01a7ef75cdfcaad2764796a8c8a4f57130c023778db0d39b0ee8cd4942c56d40d17292f9effc2246a7360b848f2d9600ad7804153473ba37a951f9177500346823c687b4c782a16b490ab0e69fd7ffd3fd22c857b362754453e36a42ced9d9f7fe0c3432380e05cff542fafd6f7c0bf3fa10a149585d8909dbff6b7dfa5017dfcf0c5f093b014692dfcfb9705ee72d2d31d517533f69b8fff47058e559e84a6a11187ed74aec6be15cfa47b2555e06cea938129bbcfa37150e864cb83a3b9b5afe57c8904c30f39c2439e2467720e09d6fe1ea79ef25271267b972c89141a60ebdc5ab099c07f06ef6b6c65a48ff9a14a8c1db71efd459932347d0a03e02fc7958cebd33a6ca55836fbd033ac4c05101094d536d967ff0d599de9145894f58155a249697c094e2ebd1dd41a085714dc6a596b75326deee57169f6106aa1ce87c35badfac7cdf721a77af11db18725748f92464bb18103bc3dcfef484552e989eca1dc9ea1149ea1d13520d69f73bdd8f12f5c0188604d43b38db617a0630987a0acd0c4830f0ed087212098c327a7f55b1750b3c5542c1443cb8c4ad0e6247459c763af42476dc540f3dd9fe38bfe0d033ec80aa81cfeed472132af17ec5fe1210b722f1fbb119a55f2e9fa0f33073468db94333168e98ad4fcde41dfd9008b164d697859a6d3ce43508e9f91391e2e8d8ac8abbd901b8b2c878c1e56fb5d7a3113425cf66b8569d7fede8c1a82260e99545bc1bfecf667782fa12f7a4ddeab221e68e4629e37cd1a9fddb83742d113750005bf7b8d2dc72ae61aab39c0eda84fa67b297748c55273db45ca9bc8d2640a260309968ceee8ce88e4727cd4f5b055deb43343d21d9f9bb188eed6cfd5448b2d836a766985e752aba28fe35b2dc17a61b0208b6838e85b4645914b30a71051dd3ebb16396c11f81e0790c7a8aec8d1131a3003d25ce519531aa21244a1664e169732103c7438bcdbbb8f1ce613c38d39eadc06a610666662874a3a5ed5b3cc1ba5bf9525351591cd6b9d6a016f141070ab98aad1905671abf11cd0e2eccadd0b6d78b9096b20b4ede9fae380e8949299a4afab03f453f0217cc1d3ab794e3b02be1d6303d6feae0985505365b25110083e82201e8671de5f6eaefe85271b9855ec23c3156040939bb934fef708205986b6ad38e2fc0f32d4bf7b0b981470436f176019720093a3fbd876424b61a82785b8af78d8e7801600319360d5ba1955847556014aee728e124b4aa9ba64aca8fc7b1003742fb73aaac2d0aafa01c6523aa44057a9ec35fd3885a688ca96efde61456df8531415b0e60000b18cab00abd9634f60095691d2b6dfe5e9c58276b9bfce6e7a6616bb7be71a19298ace0da25a371c143b404782380afb85b8205405f1600699205935a94dd3c63bf51c3f81e93dcfcf645c8afdf52ec0149e382e309e7644437d95e8bcd285c4ef34d76226ff64ff023c974fc7c9e025d9e5dc6a1a389c61701eb3248b663d665ebbe09c573cd46aa480afaa7484285c9342edff43f571f723c9d0d9f28ff6d5e773910c32105ca1ae1df03421dbb85f31447f8358d08c23ecd71b9b39b4f617684fe74c5dd59277341341405e6bce616c45d63c8b37ac7923ef8d88ef9998d69681c8ceafd3d8c5b141529934d5bc30345bbcf701efbeee04d7b0b0cc7dd4eb031285e17c052815737ed3db1af19e31c6f66fc987adeadf75e5ef0c3ba6a4677140093aa06c4ef3e2af1a9a2fa3d84aaebc618231ce9f1650cbd9475da419cf6984c1f74928af23b69ef7d8c92317b55ea372bbee8974080dcd16309fd7189320f4884efd7709f7e6b4449625aeb6a791f4f305eaf39028e65a3fee9d465ec9ed940f6d0110c484a4f866f20bf18a42da9c7956f5cdfddb4940bf21f348cb111dcc3589c3eb598d9c4c939bba8b5e72b4613f0ac9694398612b1ee7de4d700ffe64701c8c72befed30a34c78e0a0675bdf9b55f22f1fa4da5c37b010fbbfe2c896b3aacde5b75d93f435c44aae6a52bd6b82b89ef03914bf7e48b5e8808b4801dfd696fc5b4590df752b2393bc9960a26fee369dce5d44a4384a95671dee4ad18e6d80809ac7550c2ec66ba0f5a64b3d3189c2ba4a607cb657998bfd372b430303fe9088c396560df0f7230b23199f5cb146a29c5f73c6fca73e44fa422e2bd49da99c53a90ebbae8cdc5414668061efd0cb37ff7a04160a2b0ae8f78e434e0fae88d3151198b8173220d1799c09de31b70d7d65c27605b90e83ea444b655060541e901d56990574a2f7e97d914abc47e9aa4d3bea3fc9f01e2fbb3a307812dd6a31248737f000f8e247669dcda8cb71df4518177cf6cf7a664a9d0110632d1eac58cdb24975f0fb7d0b914c270ea604bbeb8d382fa81c17b247b855dd77126de76551485cfbfefece6e10d99da1cb32aad94371f4cadbb2e3922635eb059d088363e3cbc424dd70a1f94e49c858223f7b9c7bfdbe32108a62d30ec90666559e398e88df17122d83ec5ab71a67652af1b3e739738ff755b3fa9383d914567c14a42015cfd002e619519c23567ac3b13a08bf1df633b3b8afa63b21a4657fe255095435b203645e5b3da59805b3e1fc1f69328f3e5b962042d9d3775440b48fd6d50cdd9f354751f5e6861d97c7ef2a6190146e1a65addb6a06fb02371cd8f5d44ff30a93fa0c94918825a63f7c712a2695799d297f439ddc5211b7d172050df35088e2b3e46521b5ae8a32aaf01918dc9258cf936acef7800d75603ea5ebfa35962636016d3d055f2ad55382308bc4875ccf8744084ab4302d4efe87530222c15005d4b53476815b68e342e5bfb091400d8936ff8731e09d62fe6d22d14f056dfebb2517d722d8dde36854de6afb64160d9c76383e269bc0e7077bdd9047b46e4956b77206b22b76adfdb1cc3fa04e1eabc38610496e2d1aa8409c1e55f62f441e2125ec4819bdd801d7a0515051ee549c4b0d80192c62485398006e2fe85c4d028cf652830446de5210fd9147cd4ce12fadbba404c047bf962a23e247525aedcd90146c35e3402b2fdeae36cd304088345957fcae60c8842e8b1680c2d8e44ae1472fec5c59b6449f3a182e39abf5cbc3053362b996a65ab19ff4ad474e8da442e14c233256e4d6b485378494c8e989811340752401a1f6d676d8d9a673d353d7f32e5e339fbe1c3ed8f5a77afab87c67ece0143274f512e5ff2a9e1b828fabc01a726abb474047959e79b1ba59ef9fe91961ffb74e52bf3bfa002735cd1cc9d2c9e7b27df174f0e68309a5f8b3d333d0cea04e94a0baf642eda17d75cd90098072269c61d667ba9ed4d459d5d4f5e041169f2bb447ce93b461eea0ef126e54a87b2c959a3cf62040a6e2e71c3659935b8643de14967664818a7c861b4ea289cafe861f6e73f90e01589ff710240b3db3dc880eb979313196857b88325d20ee57abae97be9beb0feea92b7373a193b1545ddd02eab76510b2ffda4ed7037534f97d14c5f9cc7f6b9fbb290f4dca79555a21f8fabc45112dd8eb28593f894d6ea603a7217437fc83e5f93ab63a858d9bb87856d0edede04d2dc49f403756b10ace8c6fcf2b4fac6f89bbdeeffd6f8ddf63f17c0c579266d1734d64a1d2638fe30a7192d126bcbed4a717f598ac221f0ffbb2a1105dbf0f395213fc61af537f1dbf6bb3120791fa8148c24aa5ea087d41c221be68c1fc828d41e069ddff2e0c02989b2de79a05c7eb07948da51905672123c0d1aa0f2076ce1b66cac9f8367884fcf57eb5b48bb45b94b8e61f63639a3bae7974b0e6d1b5af929d7f6a2a5510ad8c7a1068f5a75092e74792c3a81df353018dde956ef7751c197c7ed7cd12f1c807af6d5b38458bc5d6247fd12987e956a61e3ac3eb9cf784b03799f273f0e801e6880e818007d46dd9d43dbf1055d0922ae1f801abf11716c6c0c44fd1232a20944001f40a30de9a682e3f5b012cbfcf09b97b92b4ffaf364a81419c958362c850e972b234131c3983c898c93e52c96c82edd57a83dc1a9d85956182b9f94ac7c3078e241fbebead110304caa5aede922ff53cf664c3329aae4c0c954d869ad4e8a8df6ab73f78fa0094b5d5bee8b6ef802493a690c6237a210821759d031e4ed2a0ce8bc3c8dfe413cd5ded65ab333db5cc16dd3027af03d7884c703d8c87926d0f205f08386ef3c928e95e391286bc504cb925b41bf98344791aec4581f4a51ab428d8323919c96ea8edbcca5fa35a0fb4801e1f68033c52d27a0f3f1a490474f31b2755697661c764a7a19e38868597d902f12be74565d752ef8bdd78a96c1a6fe7459421d5913065e1647ff0e0ca6eefe7ed2e548f9c14315a11a2bc34412354c70cc1e2369e2c1091ccc8301b2a358c9d2a9d6b481dfcfe0c4fa9025a87b05e62c0dc7513dd447f913026adc7285175dd9f41ff50faa44405bf9beecb77bc3d26f8bf323ad7a5141dc612134355759db3b62cbebf0f1fbe32cccb9f79d45f2c271b044e611dd3484c7eae1f610c2e6d1ebb9b272fef6963f0322178684b96522c94873e60967fd51cc7919d1081ba6231145c4d5c41ce905296f0079cbbab50427daf64a7218f8ccc0dc1ec19636b101648b8e397572da45e487876ec1b5e2a8ecf96c5b14a347d7f1de4457c9afacf2ee9acc34716a89d2806e3ba16bcd4f9329fa51d7bb2f1b1b201d22de6b5f874f8964fc1166273d98d39254a7a0f49e5914ccee0d9f56227351266dfc336b34e45f521616faf2271641f0d6884004a26d51d74b0ba220fc948048abac46a020c4fa2122aec16b1e89d8493a3153f7875f5777eb0041401fc2695fb7d949fc8a87825abf5ef8fe9456c5c63171d23a14499f094655aa2d9da7da697216048d8f97caeaa42d87b3553e05ae97ca65658776801fd7cda71305580b92a9fc0f9b9fe753614cb8de3ff45d912daffe3d01d36a740d42b9d151871e42edb1888f0323646838289d52293e56c2a909714bff240636e7f733744bb6d6f0c4c116d58d6a930ae5eb994fe3605dfbf2ab38e3a013e5caab46d56931863e872cafc06eeaac4b1a5c535b8c6250a1b9d2c6e7f0c4962fe0be00d7cba04939995b1916874ed4551459a406d35349da2585822b5ceaeb9229f3ffe7894c9f58541fa5b8fd76b726ed9c328a7b2e5e9f3a3f6d5f694521597b52942c720669b065220523cf76b8e4dcf1117ca15711c48e888636178cd6a0503cf77a6c03fffc906e866fe62d1f95b5a97528f65554d60b7ea28af2cd83ad9fe4bc96994bbb1c31465147ae9593d655da2e238044c13009f1d4af0e71295672207370caa3f9bdca17a6d868161e39bc62bd604896652bc61df06472167a8def3fd5b82e26b9f5ac323078ae190d1433ad3be453aa10b4d11dc4c30e70e08931e4517f0457ab55a6c1cd53f90d9880ee0c98011bfb44ab687343718d5aa13b2cb3dc8fd20d0f0afd4506597e332a7702707ecfb68070c3c1f757eb131b36ef2a37a2c53ade225ba23d55997d56db78768a631da53417fbf73659ecd6d9a1b5b224c746ca9eafebfc3c5b10e4524ec0e1e9f576f916d795d2acd015788d35de71f4c54408f983ffda45973e511954d20698e4702869aed268b43f3320d8908099866696377d91b2cf7cdb4ab52f33d7b4bbf6ee4529a4baf4b4e60e1f59e69183f879094ec6374530c06312204be0c21fe2e190c53ad49b404b364a9e5d5bf105c8c7fafc6dd9ff014c1550c573be3949fde76461e3c1a713e012d19e5fa8fb96d9a6d1cb73a50666c52e11761c5bc4a1b451aab54c05625c78587e5da48359cfe2ee791ac6df1020f9e400b9f777c43f61bb196b83e766cf8af1c700448d008ae4fa25224b2aec9fc074f5d552fc34e19c52a77933627dce04bfe2342c8f3bec6dc69c8c981daa875d3369748b6028d79985f502226a7334903cf8b626787a19fb732d179599ddd89879f459c6703a0ac7ebfeb3f68b3766068478c8bca091d0828d51ccdf08f58ea56e103314fcbfd76afbcf4b1796f797f3116bb696378ef302f2cfbc241fcaae5346431d13fd89aa1f2dd03a11058034dd511d88054badd20ddd31f9fd5d6fdb4e1ea5857783d8947fc64f240b6c543671104ed6c17643223402c64a35d6fb9ab5acff1c957b578fcd61812852b26814bbeaa0243c14431cbab637ec2297dc8b05a6e6ca35e42bb411770a72608d50ed9bfc625e734578f41e3804a7b2111570da364708f81cd66a7ab3f0a10b4a97cadd3de5ab022b63eb4a183011d2d5cc18f397bbf93ae18be52f681678f74d8cc97cb07a4422a005dbe82154d403b60294f38961a9ca1d23f36756f62de28fc197d9bd73be62cf8d931a967e84dbc7678d721eec1b3efe2dd568747ef7a3b0b98d157f87fb9e8393b701cf20dd58bfb06e97e1e8b54330e04c06bdb01749f99a5e6cd26df2afc75e3924e53bd36f3bad6c80591d05b951b8031db06c675754c87573463e316b5d51af426e4cd202a4bcf5499fba26d8f97c0c360b0b49a66dda0d382acc53b3a0d537e3aa55d0dcb97068320cf192a490a75de4c3a4c5fea367041d42209b6a92b9fc65198a478e9a49221a0f4dada5d9f8df15d713818bc9380409da354a9b0b0553231e9b8be7199cb2e32a51c1f78b8492acc5390bf3fb0ea93c5baf0837665e5da6a2d1378c18694c3783b8038b177c730804304f2869e4b2ee0ea620eb3c40e0d026d9c024ca59880514556f270c7565eaa07a6902b9d63de71b4cf4f8a67196f59824c5da170b28309bf9bac5a188e914e65477f1d5463917a6732942134828365c8835226fb6f3b945dbc98958e5531e12270ba81665471e56481034700717e755c1d6dbf2184f34ca8bfa0f524ba2d27f16e4edce239a29d975e79219a27907a3df1db89d770f0639766a6ee9ae2d9a0ca772e75e59ab6c7f7b43859926b9f732c5df4f45669d9c9f0523f7512665002c81741e08308ac045a4dfcf9525fb01c5538c425040b9619ae89e3c4139ff58e913739bfd8ebd2d65f9044f7b55baace005e4c6fdb416e11f34b95e869e7e1389ec558a7f7071822b21046aeb599e2630faa023949570e8e7f019ef3a3e3f6d3392309640eff306518a75829deb3928ce4a714d28a5de72fc52d91ea0bf085c0c00019a9ef724b5ce95a36ee45f9f81fe2456f55a1d56c80e1225f5e1ac2392fb40248c5aaf3f81f00858579b2a0eff49b831f5c0b60bf025b7c4a077f6e6317d3adbe0566f3a5cf9ca7e3b08447e15526282ea3b95e416c5aa5255b135c1fc56f88de846815ef3f9d4e47a8aa813344d4188154a2e543134b8761c8d17092640dd2a4ceb0ad5b37c6cf3f888d263b9f85a529a82111a7fde6fb71ec28cc5c83a0d622fa70b650d3d9acdbc00ebc76fda062dab6797f5f625577965c081ba9a4eb11c13582568d55af9f3055a0153aacfa1accb0b7d321def81e8361e19e316a637c5b5b65e9e372d29c2b29270aacfc5d384e29a24b5eae40dbbea91af3ed08f35f42d8b9476d23cb6620457e16f664c81a5a3c5cdeceba1a888d14115dd294f5b5e2d7fcf9a9dae1b91f391528dda115bf682aaaf9e147fa662268837cb762a7ac3cacb22c9bdffd6fc2c9161c8c3db2f86d7ac74eef82595daf09e5c260e1d467fc4392fcbade0477b50bdd6fb67e42c8d9b39006b04be35045b3e7659fbcfcd51dc805e8e5e18ef640359a8a01a885ee7e69feefb15f3825bc6958968d4801fa43a8b8aaf224e40b5fd86afc100d7ff8f0189aa9ebcb2f30fa0617f40f22f80f7b9d44901c8d05169053ed6a8e5ab2a1340c1208c665e40e87575c9c93e884e0f08e7633faf485ebd04bfae1d6c7d699a15cf34d474501889b8b9daec2a2f548049cea574c52ef5f6972639d7158b61f15fe5ac61b62dbe1e954ab1ef18d68d0c23c9654239caeb3e432ddf4fe20e17784fc271521f166847eb4486e01420c70e4f78645493e99afc6adcdfc45edb1d3d1745486456c04ea34d888e8337e812d23c8b9120839ccdcf94e1088e97e02499aa18284e6590f0c8ff8e4d904e4b882e25350d1a99a5807bf8dfdc0ead276f2831d3776b0ea6868a6a4b1d48031f6906a809bb1e056c956b65f392588393d8ec3ce077f8ff050a6871d53a522b414f012ae3b48f9cff8b649585eb066460915326469c35232f7a15f1522146b1120e4d2efa1c47c9f1d7d44680bc85317fc17afc182399de0c46c4864822ef4e71d00b0db74a7db580732741f3079d5e139cc94f470482049bd070ea8e2b9fe00db6dd3c367892e171865db6414dfa7c25aead86fbc2c8a85b9ff0a1ff474fb8679480efcaa7151cd3e735b6bf53513e8f796d728c5a12943758f0f78cc317e82c6207618233fbd20b17762cd51420ec58d5a6125c513ecd9d6c42ba123b1e8550e7c4771b5aaff4293b91afbb213bef7b3eccdfb29e03ffe4cf82a66a797398fd2a3a5faaceaaa645bbc5b07d287bd2d43e7cfda997c1c82c0a0b0db827f6bb7a9f0f5d19bc369ed99823e9ebeec277752587ad10a851fb4569dc87549cffb0c9e9ce998ebc51106f6e777da9f9360bad4d6aa63cb1c3147c1f3557d923cd66790f1cba7ae77e294e294102ade471cbcaa82dc008ed85edd1838d7ad54e3b05bf51c2e8a107299825eefc8fa4de04533e793d46763a7455140046393080d7d697a752a4168edb07ce697ed9a4084d0a779c4242c6fb07fd1fdc5117f1cedf91b012e6e6551f7af7ed0895767f9ceb2059073c14aa5c78d9e6457d5722fd1056dcbbb2cbfa6033be51666f9ff1102647401cba7dc3bc4ba5703bb31b2ab06b25a6832fa338f83e3025d32d0d72be8ea21378dd5b50b98cf1b622f117715c53369e0d9c090a5c7965520bb81f46a0abc4314742fe3a987cdfd60d0744084b01e1db0ad5bd9efef2c47c71f21157ca308fb41ed411649e8c9222c62b9b6babcbb779ba480037fbc9c4503b0fe4cf33edbef3972996d0a9fdd8012d0f3d7e2b586ffb4f3a28487fd525e29efbb7417b5a39bd118c911294c7e7c56b1503e20b6ca10692b1881227cbae6bba5cfd1517c4d094af30baed3d3c0577282271168162ba3808b88894b44f40105c6d77703b4fe20299d7b886003b2f957fb8f82d3a4eeed4ef8e658839de4880d26bdc3e72d65a0ea0e01cce1a9355dc06e76815f04c8568937fbbcbc2dc0c6ac2573e275adefb6c710261553e450608eb4ec4921c745ec2a751615947ffabb73e47a27dd4d16e5f5749ab4a8cf02870389b948deff28ca62f87fb16ee64416a0418ba5b0a1d2f54f001a7e64ec726a262b09140064ff15dc06708d41485c7dd20105754510ad427d03a9470ddb18b139bc35c83751bab2f33315ee3b44f9e6bed416195355cc50d2d788c5a9d72631ccb57f06d4cff722c5f216393e428a8b82f05e93e28d3d40bf874efab24f601e364edd3d1de0f1c958f91c0753ba0b693ac23d55bb05e36a65a09f3ff0daca846a496a8f12236c20b2d7f5e09f1421eb8c70aac5534ef849908f96ac43e31c9624eca76a21a091f9551f47f2f141edf2a66567eff155043347789b890cfaa8c8c41566289cf69817f632a72f33ca2fd9409b8b95b902daae22eb0eba6cd9b04ac7e6fc3c23745c065511b835d19b96cb8f5446fca307c1956471256e729a757d8cbdf1cb684c15d94bf7a368d47b8d30d0984f1a2d5b248f370f4c7800e0227e63515921f7c25b08251b1b2c1a08f0368dcb51b4116cd2365f82d43efab2bacc57a3df7339ff70ace2ddd384397719a5be0d56ef2248ca2eca01576d5eb89448319185ac8d64645ce6dca68a4c5398d4636a37f21dfa0ab45e7bb355041f8d1dc77816bb191b42d15d195cbf51a44e57a2d4ea5e3880830561c47851c1a2660f0d3425cfb8dfb6974e21ccfc012020bd59839a81ad99715224c6db5284a5fdd6d1f2bec72ee63abe62321a37ee2691d5cf2173dfdc2e77303be45d6567b8d1fddef0b7aa4c8a96f0070451d5784ab3e1a1a1006990cbdd804c0611a353580f772119ad66509d5f489e9e759d0e6bf386373e87c1871216777fa08eb0a8034051ff998020253a5cf4e392271f031aea7ed44a97d26197de832f6b66e46c2224c1af0405a64a76d8ef3c161526d4e6ba99ef24e276c30eca776c744f4f7f73835be6cae200f3dfb68cc07ed55db0810749a60be70c4a38fbc82cf8914aa78f46d72a83023e210ee0cab51b92ff56409332ba1f75eecda4f4fc587362fb50e682aa860c94a313ec1a1895e5ba5e9d9abd3d67437e9e2b8c581e02532000367f2e7b163beee8ebf8c2f795391e7d77e5841415e9b03ffeb70538038834628b3bb6a7ec51e22ed24fd7d45d5a5f968f9391e58fbe64eba0e182189798ee140207fa6c659e966629ac0949d1517c94ca4c314151f83a133449f993719eaeb63816ce1f36a9798e8c768f1138eda6e596fe67ad816722d68df6510b63f5cdea2d4875d0065bc92e0ee9b811de631dc43339f214012695454302835c474ce4557cfcc3f257d582add1386ec4fec7c99c0503aa42f467e00e009cc7602164f02ac71f46f2fe3da93cdcf3c30dc8c840d42c0b6fd646b64704fddf78e6589618e5ae97b86c72e58faa5d285d2896b00513e2e51205711c49c0f824ad556b57e71be9435f6142953c7566273725335a2f6eb2e89055df077e30d420b4463cc240d993931a68d9e4840e215dccadaf3e486f78278a0d245f2b137a208e6aac5ce655542a2b78b3e269936be9a2c6c238ba2eeaf5895811b40fedb6d8645e1ab6717c1d4ec491c02456dcafd1e5d8c0f5c0cba85d0f7e4763934c0f2751eb0c9f7a97a09ca8f6a1c41ce8be73ea322e4bf6a29c02791c87b31a5979d3d597f45d15f7ff854d312739c7b3748fed82f181950093996612a5c5f6ddca641d6caae70ed556f60010f34a7ad0b880b86508dc16cef352b9a49fa7e2540278f0b6a7e30d8d5e01cd54c5916d969fc56a49d152634ff6f20f14815b81ad1881325b56b78db1b726c3d940f6e4ebb87156decb0d9975f945b29e94c8554df58bd88cc77ad7717c115ec4a7fb57c7a8dfe4f7ae3b55777d978f3b9437a7d75ad510a12c4374ce7a85e66bbf927664fefac159867d035e187fcf198166aef4da204d477437ba85b446f1ba722539e60a9a2e413988b0038e4710420da24085a454e14a30207d4da484ee73e853c376540d0995914a839846163494b40c6132595037b96f5333e68c104a4a3fb369e8b7b8d1b16da1f4cb54369ffe7ad71190bc98771aaac936761034679b39e76573680156eb27bcc66275ca131bf178560d4ee0d888b7270a6b51f51f3b1a81935c2b136c96bba84cbd9b679791b0dd01d9b361a08e30d821bc3f6a692b159450b17411e9cf27ae384a3f622ed047445d1e4620256cb692f832dcdb1719df5981b23c7be08b128430ca6bcda691cec9e4d9bb2f88cc364f1d8e17bee8c8a454b7e1ead087115d5659d6e8e5c80277e546ec5962f89f3dc7cf6e4e2b90e2594d3bbcbf37639a6e7af66f9266ef88b49b17f0d5fedf1b6aa37f94009df86423af32b5409ad28937f409cbba2d8e35463bf7d85e456511809d1fc9d577e187af647db243aba7e5ba9c12588a4226b5889eb0a218e1935e4773f6461ed724e7cd72ae50f5e32cf73abac506874a91a1a17849ec4016649880d2cbe9010b0a869b0ebb98996c971d199148db74dba8941635b8906ace30052cf8e6c985e7f4abf7d9387377c47f53c2ec231ddd15f22a604216d85fe9e7d7ecf3bdca0496611c7337c61a6995aed6615a906e73f244982b04d8267b6fda0a328373e00e49470daccacc26644f79f82098b30f1533cad8e34d5b35200e66017e4cf0177764351b8374203a3041fd022d1c45535a8b7836e062ca1db4f6f145a2f3559be546e9bbde5fc1133275f45a30d217b928cf089d17ffe3f1cebc6032d43cce1957318f3e54da9c0635224b3f3c725624315b0cbf1e7b300943ef25b027c1b748bc4c3e0c6127c52ae4b25a1ab646136fc096d017291df242faa6c133470c7b7bd3a2cd31ac8d3726638bd3d25b7483f85b2c85a0215bd6f4c28706cf9fdffe29def147a3654b9129be81b0b81cc19164439943df31523e641ff15e29e0edb2f1606446a4d350d8337254862e9202238a041525a7171d2984d9d82e037a99c6123773de9318272daaacd02c069e1baad53c8f9f2fd308ea3233bf19292eb03f27889e90cfa6e5d31f68fc2889d5215d53ef937132352b104b380ab41bfa33938cbeb14a8909d8c18778247b8c2f7519ca6419a7bc9c6d0f94b5d177bcc5f05e435696c1de71da62b6207ec8b6c6883f326b55f93dfd6a08604f960ad0358cd51e92a0b7e5aea2ec05d2f50e5442da64deb287f2dfea9093aee28ab25efd4d0f0d94822af0754dad72dce34a9a88c29d3981846867f6a5e9d2994603c50102cc473423e2cc51a537e985fec0cd28c08957731138d2061c4c2c45ebb1e0bd7ea811a9e0e8078c3d779835e4347e3c429f10be0c5cd67dd5d3e4e9c97202c5de9baee4b083dc93bc9b3a3d0561b709ea91bf49d28a8b7ffa879fea358bc7be87789dd627b14d2903b5baa02817e177bb5fbe0e657e1cf168a60adeeaa23063f04e9ff8741db6677a5dea6fe90eadce986d40dfc3b6f8841045399e0c276aa413afcba14d9643f971299639aca981a0bcc0abf35a91fa7ad1a6aa9471f8c5af8990bf0b52461ce26d3e97ff71fba14f4a9bd58f352f73c3749e697873fc237a684ce38764fb1fcd75980d5e05abe791996629a319720fcca01d0c20b874fb5b67311d9516d9094205696b9961e8215ba0494963ce1b6a2124679535eddb4e1f8e4976473fd0a10d0f9c576dbbf36f4c49078797c608d7c5bd1c88c1ea2c344c3ed57a1a4b2a048b20686e53f86cc19d0fcda18de7c328aed7db356c4d2c45ea6381e3987d7627a493677d14cdf6882144eaca357cba9084227e6418343638f7f46bb6d0aaec89674bff8588f9d5a23527ee0c68c3b59882b282690b9ed236ca36b6d5022b0da33d19beef7e2343e3afca979c00593f4ad2d77c7863b2dcb80181e4adbfa1c23dcbf21f86d24bbe533831111e0012ec6b646bb1449b47a79596cec46d0eb9876e4eb5a7de9b79dadd55ca9d62007810e1d2b29007b36dfaa1b73a47312effe146d7308f71a692b21aaa20d9760d1eeeb684af9b1c12c39466fb7ca2f5384fd27b302f2df718873eb6c6bedc5d115a4df6729b5b46d732bb4d571a64e702e36d91b7d53f6d5d0a779c93ff9cadfe8e2856d820ad39d152ee0e3e84afdda772a31533e88b94b7ec355894e03e6f3bb1752b5bd16782a6103c3d266935c44e40a8e55a57cb475220b1b2b1af99dc80784656284a96bd71c781d8d7443bca1ed8e25c0e0d336d1660fbaaab6f64b7099916566b2dc05f315a91a4df0df40edf5b0ab1dd5aa954a9b155a56740377479131f18446819b462fa12cee6e1c47778a100eabb16403a9934908ad0e135f7aed72f0ca3c4acc894ca3e89487c63b443dcf81aaa7a79f7d8e4969c2715080f7244a5288c8c26aebf686ffba1af3b25ce8c2832a8482e7d7c315d1cdb2793dcc6ad7a67af3b72367d1d5b2f3e6e9dfd4f3f9d1101e8f35b000d18e8efcdd2ca5cda2befd3d9abd29fef572aae2b7197aae52278874f34b80e00f344ef0ed63f210ad3f0c5bd90bc3f7229a8ae252fc0b8a3c277a6dea2dcf28fe93064415f9af5e88a2199dcc6d27e3a2f80266f17722b5946c48e12e627d95ed83998f1ea48426de393fe6fdd1b19e4593f45f1c3f5fae4293acc79c9a0290d5e7766169e4146411b1dc6987f2d18f835f9cf19da028e925c3f2945be45166c23cd410471a009f9c6b7d73986900900a28969d0b8e0cd551569489d2075891adfb5e1d8cd275ce7d831dca2dcb2372a008464a83af68624eb48d6c826ac2d827fa9c0d65b1ac7808c2354b0bc4cda09db54f06c82fb632589aff95c4bdedfd3915adb2e677364b61e1143c0682a926b96341d373e4e58f0ebe5be5d990b1003992d4bd9156178bb1e8d7e2c2e2bb17859f11df5b79080f8f27dcf4c6d45307f51fe9c528f4196548f81c8452be976d64c876c8b4294b8a0eabb5b9804f51227eb8dec1dc6476c601ebf69911bd4e4f15667fbae841de81ffc5fb517bf0992ebff0a54a7d63a4186c0be06db2cee3e24d605fb62fd87d7f7dfc7fb3c5bd0716aae4d390e9c2be7cc669c4dde8599ec324a52f5e7d50cd88a9ca8418333be1e2cef7b356229b6e5a46d4e475238c6c82958af14ad4a4f2d13a87629f9a66d8afdec96cb1cf589ab4f814b9b3df1bbd80cad4efc4d84fb3ca8806644f56ddfd9ff66ed564873c6cd9f4472db343dfb8d123197ab0d6c06091a98de27dc0d35cb61441ab0919faea85ce3f58ead57a5ac152fe2c5c826e556d476de5bf229a8fb92db40d3a8427f3a368f25e87e557521a701592d6b39891af2b9890b683f8a0a9cd120cb5580fa8da88024975e4436c81578372a8f0d06248c011020d4e992fd8c8da1b91656b1173267fa58ba857428b70fa8d0dbf33274ddcb3775061c92993934039a3d217ca2101546fbdfbfa4148d36365fa0a61530d02692bdb0f00a75b18ede8ef328eaf286609688005d2f5283f4d5eb217da6e23801f652f9c5f3392911634c65bba39f1666f7ef5c1fd766686dbcd7c8ef3de4fc0c518872f646ccf82d0e4f031607b49363ec71ab7af9009a16624c4f37e92e3d7dd328ccb3b60185f68483a8eff5555a6c176bd7025c9eb2f20f80423d9627eb683dd57bdf3f983b27febfe2c110122899e6c27899b46ad0c861d2b4fd7576f0e02665c62cafdc09f0c5faff358da9a4e07fa9c5b41a2255ac5ca2bb3d36b61c67bbe8116bab4cc00931d3faa80b066fa9f24db668bbd8837ed828d6d13ca9b7b8287746d709c6d7600c35f947f6b9a376bef9b20fa0328ea0acaa82a6b2cc9cc98b9c041049f22bbf0ce093ae4b9e40d3cb2226b826431df7ef1d14d27c2b86db8f6e481d7e9dd0e1c703920375105a92a13bfba7253f633721802017ee6391bdb9df33cc7f1dc9525acb138e3c24207701b24d18ac88dbdadf0dcefcd356af6a28bc272a491e3d2768646abfceeb7803c68e7f7f69bc4d8d8051421b8cba44563e334c1c3d6177091ce7fc2b8c668ce025fabfe4bd8406d01d99c854311cd13694fb1e7b4fb79995dc9ccb53f229d4b9b2c98873882b9d41018a0e0c7a50c2087a95c840d0d2fed8e69e5b2f18400b1920b837f068e82a2d75e5191281ed638b4c88a2861a23bd74f30d3bc5d95878fd6bcca010092c4de11bc58a77ba94277cd40071d99bce4b25df5e34605dc883870ece98089c61a37868b1a6ad712d7f7d446d5f697c4d1a0f3dcd37b45219c30087db17f6cdf3d83b889ea7d12277837c8db493e446b7a952d1f97c3991294187ec0173b658b6b56ae435f9dd3d78f51c9d3086e7a5ba090d466cf95dab3aec74494cd9c45b2fc772d9a6549a29f49bfa09be8632dd6f68de409abf023818b5c81c62517aa085f856e2fc82ef9d35a5af45016cdece04be6152ecceada2dc3f5a0f10558f39b9c78f500abedd88e165905707863fcda96011e6b0718bc5b16b346ffd01562acd27d21db54be012bd67ff491f361a8cd54846271e9dbd1d63943acd6ed925557b18a995e692d0c977812a23b70845a25d65024a97226227a25b9238833134e11f229a19e6ab970be5d89f01d0bc35114a70a1e2210c5a7510019c61aba6b9da53d8d0a4c266c3111f9ffc0a745064384e4f2f4a292fc888541b21657a7206122e36a26bc48e92f6c70cd15263df62af0c527f8b50c4391d09700156951da99c2b84ff1d5df14c558f78b1c3a685153108b936c43786524caeeb0256a686fcf668ad9181994c2b1304363d435367462b9fafd72e68eca78a544dc628aa559dc53718b202081e8854633036f8bcbbb75829c24d5bd5817d9b5e80cd56fe544689efc99041149658e1c66d0fdb7c11949da464de67ac14cd7d1e615eea291f66118eb07c89c86a93a653c644714e9403f918dddd6044429485452389f9e156333c4cd00529956072c7e62a10174c148957f21eefbb7d50abe8d5eea74152f68226f328a274626eabb2c10e1bd4483f84ddf1c93d4cb3db781069cc6065f32f48e445c6404f3a2deb36658478ea02b18364f8b41ee38bd4251bb53474f4c00f33aff3970b3e5c802ff82892665a96ab9e0a6ecb92c8cf739c7122a5b9f6e7d7f602da6485fa7d82dba5ca6c6c1dd5edd6a83df283e305d61d514eb5383f99246ea5cd6d8be1840cbbc499cf5fbb64bc140f4d4b3166ab3d831165763a2e411af8190314f07ea20882fd9135a0b8b3146313f0b49a053d56e43dbbdf98d5d6140fde14171c3221fdb517c1582a6186af2bce3c96eb2d3307227dcdc744b4e0e6482cfdd6f7a31a7d0fb07baa0b6a293bda6c794fdb3f623b4abc168e1b61210cbb2964ef19791512260894e3465c71b16ece68fe7600732e9f4f480b2142bb83cde190adec147d1a926d20e4e662f85cd5e2dff1050a188c3d996dbbea920d3a7a40382b4bb4ffcf12791f62d161a5ae32eb60f6182d5125e6095c6b4206c8bb251b74ffbd2e2db800e7c8846ccebc3dae630578d7d24ba84b89e4af1a16cdde498fa86d10ff7c07cf2aa19945055d3c0e2d83808a38ce7dd2e4d3d3c0ed53f2ee13e807bbed0e8dc1194dbeb9655f9b6d03a4cf038a91c03e8b74d364f9d323431d4ff465cd73d1180128305acc2705f548758363bfe3a2096721de6eda97289ca6f4d8a1b0680656896e95834754b5f143951629f72f17a82805bc420382ca43c9206d49dac0aabec3ad279c5b6036e11517f7e1ef34893aad3002e96c88e8394108305133dea09f9658d7a6190c07df53117d30e7d68e39ef05ff59c7f23b01fa4beca7c1140f006392fe37b432b352d49d8633e87260609ab1d5ab73a24056c02d57053c868803a127734498212c09c0a0d35e6b065f365b8882b8b9258cbff598d717ea53c11a9fc74cab3452c16288aa2edcb4a62103eeea71c5e22d9a36723fed697f665584924f6c29ac09c8cbfeba2b26e0e4b0104139f1a28aeba9580d505547b50541c14c5b70d7fb61f44f0061d1f6d007e2742e594b9052adff1ecff2bdd11bd799f3f6cc6149c4576261dab2b38d1e3c2707574f557393093b1672e2730d468a7fc208dd9c602b96c8f63b41977fef4c7911dd142c662db652b2028c33f81cfe7e95add5abc463892a2405f2d9b945cb92fb62d91e21ab46b059e3612e196e6b53fc71855a0099d16528de4a73073d8ba75eeb1ef63d04d7fe885073245beeeccfecfdc6638f332bb084b7fb8c88b88a6f8d92993dd297d0f96944fe861a8fe801f9088507b57bdfabad90b37a5d136d79d4aba8123bee909881b17b36fbbca567e0c7e12b940c84c9b525beb12b1d530c2a85fd3a0b9970bbc0a050b3ddb9b6f816ffb6bdd0a1d5278fcdede16d24733483aaa5cf5025897827833bdddd5ff1bae6c009944b81436f8387a457406adef93418cf951ffc689a0256a139677b71866017d0ed871d4fd07b23a4e7c658931e957c25f141023ed5cd8ba186e30aaae0f59579d283aa19da9ab3bdeffd844a8979ff6b0aa7b11dd08b3a04538755032b32910b878367ad2b831b1cf2b353a93916fc61e5595bd9062d3b99ef0c053c77e037726f870216adcd93dae52da3adbbf87caf9287a97eeb4adc42184733e90a56f38c6e02548f26c35e25801a2e6ad92a8660f853090dfc8f698404bcc5ea63de7d4529ce94239404637ac3114574d44133960e50b29e08ed5ab5b2e7a82b7dd3c2f5c1bb24a2c21fb02f8cb3467415841f3725271366cde55362000e2375f246a53dd206dc0e65bedb9dae7e7bc001296595d79762552edac64fc6cb262980e406e22b47193277df98f736574313e8e7f9ef8e9f06cdad0decbedcc7dd8fc201d59aa70f36faa748d8a11a8e89745ee76e3c3dfa43c5b837236f432bba93662cbf043b92a54b3653fc88b1a256d53cab11067f40173e44cc94f8d249deaf340fdbbdb70c148ad66b48be50f708fc89b03c9b26359e0578b1f62555e9fedaa0d673652bf997b141ba0adb96a46f39579a1d37d6f259b0b66118626d2aa3117213e72251fcfab1c647e252545eab576e8ed98ceb865c42f557cf848cdfd61a64e76011b9b68306f4a15f57d6be3c9371a69121876869f7783b7fb6ea33900d256950af88f56114f8a26fe19acc9786bbb3f194214cdd1ad5a22e6bc939f997f27c36e1b4f0c7687de97fee2cd83d311e4e53b756e5b5b75dd5d9891ef846858043c9668239366388bbfd4a1233d4be60f69e52b1a180e83c034ce12b5ab8088cab1166a813dec8092ad46d35238ffe9437d7566d201e795d4e75771ab64e01a35f02cf4b1281514493c48906402b22f558ad7c07984e580a8402855bc4c8444b49e877bb9e7726dc8888ba83833ca30d19f55a210e77717ee834ffffe6c178a1efd757cb94bcc5f9cca7dc4563faa11774c2497d4b6757bb209c8f250323099fe1932cdcda8538495f7dd99873c1177757547e8ee18e61ceeee90bf5ce1f74210f26ccdc37bfd1dd84959c6ab8ce7ca55444f87186eca020218091f569f263fdfebde423b1bd151aa37abd92778bbbaca1afa1136c54031f8eab0229a146eae943592536dcd548f205848919cc65ee38f82dd5c991f6d9eb32595fe16ec044ed908c7e30ef0f0c2917aa729de1e367980ce84f48ae2da9f2d0bfc63c36939cea6319b18c4ab1b83b43c9e390e7b7ccccfdd2fee5445e01177018f62a9678fc709173e570894f647aca932dfbd4e1d323edbe77fc004939ec131d4b1bb72015f76e49464ffdafa018fb4f863fad0fdea05d5d1e3c2922b6a1adbaabf789277deb8fd55ff5a6dde93059e5265ac8d76c5af5d02350629f3d771639aaaf3e521a3ad1a466dd014d6b8ae3a5b420aaca6718315891412bbdc72ec5a0cc51f28361551bcdd323d490dcb823195ae2d12f7b37587fa73b5165edf659a3bc200bfe33ada063f6b4f9f2f9e5010bc1e2fd49c91e3af643cb86665bc57ec804cc8df9a5cc88159846f361437c218c4fc7af122c415b179925176ed8789c5b80bb42fd50d6df1d382f9158cc22d0ebfd856ac6c55ed6f1a394483198dd5c36cf7ee27cd72dc25d8ca380dba3cf54b9912640dcaecdda1b6f12d49b23d51417d1338d303686fac687c8d050efb40c92586cbddb22f4c96cf13980eb3345e6dc0b6b5489c264bd798b7e19581c87352a246703d314e3c9d03dbb6eff8612c0154e83d78b1c811e7994f3eb08bab782d9dc489e91ae900a194448dd154dfeebb89d42e8bb5fb2021bc0876cb4f5470d907b407cec0c2cbe42d9cb1c3e64e2a4be46df18fec00eddcaa795fdae564bebb046f771fbb1622141c10f4e018c7229531b5da2376b00bc3a53351329d965163f69d8a1ec2f48f710a755be78a8c344c818d8275efbf05c2875aa951b076786c6ecf6ad8f5a49af18ea430e990d959f1dde6638b02dc4a77a944d67e6806d31a30482ab43ba67037ce8d432bfd6f351fc96f78a785c9065da1f327baad56b97900436e95bb0212c62c3e7be8104cedd4f1e2d2efbaada2f7d5d84d3092c595355c5e40b59bbab9ba67c9826747140ee2124f65c65aa5587fb3608e9edcdea55e373a422ecb7566b62879f98f94017c6772fb13aff55d99b59168980911c1bc9ef2d4986d58b9da399c007635dfaca255ad30b23d7fd73a177f47f7fe8c601047089a88cc301bf821d1c173d2128c215d1b285bc6e859a67e24a61b8f9280eacbc3addf4059d798c2a99fe48f6d023527009d46a978421552bb2c6ee9ab00bab8af8b99675dce4fb1bfaace6f25f53ae73d0d39523fce9270aac19ee7370fba1261e52b365be5e072fb2e617f4a7a67257105b5bf48b213a2777e09fc134a6def442758dbecfc0e168c44222d96c3b66db6db534eda47f9a7aaf3a8531e1573dac1eb36a375351509d097f68a055e401ea6c03de55cd85d62cb000b7c586ddefbe63b359aca1a7b84ffb0a8c39b84197090c4e474bb0214b3eb7c84e8615fab180cadabb9ab70d986bbf08d057bfcc06f6b03daee437e43df8c4a78caf12b2bfc8e099424b10bfcf53873f5e06cb89c6d41142164ce40f9b4a4783d2236429087a921da96e92f29add73e75b77057a1fb379f8cd6fba230c152db78fe228da9cff2c08ca9aa8c20f4a252c3fbcf62d7cdb8c4b128ea463256b6425b1850edeb06cc6b645d134651135aca5d162543b6a1f27823242abaee6a0a0f161b8641764849b00203b82e09ae38c37244a3753ec84b3e660ac5ac92ff5d02769bc3c88b6923cf73fe93b3eef193960977063c339dd02dd771730de52deeace3002daca3b75da295cdd3abb18959317b4762d35fc23786b28aa59b877db61a23b3873f33bb9651d8a3114883c60e0034f4d81a3f6c52c1097322f971c7a62c82b1b3bdf2630907668c818701f260a9e8eff909dca3a86e3993580e188981de4e59bc02d6d9c15392fe57a4477e2b4b3368fe14852ed7293a6eb653ff8fcdf9024ae299484ae8ffe2b6a507ca728db605601b0af8e9c195d7f1ebd9e05008e54e456fec29ad2b940d6056b682c1415bfd1924a1bb3e49a38ad47d62135a914afa73d05b62818349c9edbf013a865c35d998295942f61099ccd467d10129bc2c1e81bc8444a85a691c9d0d8370ac549f675259e5e434db0b67b2e4d1dcc8e0c620b3c2ea0aebf599298b3ab46cc6ba3e4296f189f43a9ae93e211d5a73d39ea1f59be6f5609b48fdfaf658a1c8a68ef7aeea5552ddb8b9707fe05f3c3d0c5462196cdfe8ee497add9865df96c349aad5238becb5fba7788ef61005d9249639093e7b7588a0defad08f080d54433ceeca8d9f91151e90c378b0503654859bd2ad51cff8e516c16379f619d05c9ac95d9f6677dda8b5b6d16708754cefb24322f4fd148a666e7fa2ea58168a217f2ed8d607e6ccffc3009c4bb9d10c53751920c2907bce9284e3a5b0c2d5df7cef66a7f7478c485e0cc548fc19a7ab246a180566fee548f574cc2ebf40936026ad06d1220c1bb48284c9913bdbd80879215fb27ffb0f45f44afcdceb2bc9fc32444a42ba0cecfe348477a8d0bcbd44f0d8360652145dcf0358e27eeb8eb94c20eb54a16f288762078e78569791205af69724cc2b432fb49d1c76d9b2ac2678642f5003e5933e94f3a77a54cf0ff66d321e9fe389bc4c614bb83716785a1a01bdb6bd219098ce3e9e2b7714509918b8a03030b7166d3b8180f4e83167da9b06eb9d66936bf31c4fb82a0f3c088675b8ededf0abdceef974e16793d0e180bdc3bdf01727cae5722cf27babdee5603640377eea71af21a8660141ea42a2cf6734ce6e7b26a28a22f34e2e5f6391acaf9c6ebc348d7e85063cd4e6f04eadb54a1399ac46b972fe44dba123f0d70eb3fd8adb8c5657e6fa1049507ba4b796c1e448cb32f4ae9e39b8c5eb10e6af646ea742ad25e4bcc8a06c30766988f788c8c83e9a2fca3a1ed9bcefad473d95e869037f26fc99d5407236f3d103541976bea38ed5a6492288f647b113bd22700b6b1039928c4772b2cb852c6b4130af0a08bdbbde31a52ae7e8cd5e7c39188f5a1fa0667a1a72d5655921a73b121444422a41818e735e3299165bcb3954ebeac457d80230d05778ee14a4bd5518f39e8b453137be6ffbf6c21508e28990d7c3f5be51d4786d7c522f20a618c4408f93767fa8cc1fed85d252f971bc1b09fdac05d7a42a08cdfe16e9eea00ff213c8f44a194e3144034e3b90692ba7bce64e1f01c6f90e51927f04bd1289d5424224ce3ab409f8ec489adb3947fca5dddc99364f07aa52e47dc2032c879a70f1a60f972373ccdd1131e912ec04a173d5d78ac374b5d62ef0a33b97bdad287842a66dc05963f0f7a301ce1e6aaa4e0e63ea87cbfe9667ffa23e7de08ef2b5693db4162e2826564bcde283eeac221fe6927069c0fa12404cf7c20873a83de6b7f249ab77d07f7965f6f8fdb8b853df9f84883dd7e672701af77ae52e60bf6f8e11bbbcebc4346b6a4bd8ba0c02a0ab4bff0ac7fd925e61b6cf3133293ba97b521dc2e28b683aba4ec95b075b1f06c43d5d94fd6e9cf3f0a2629302e25c5383fb771f6a9e7a9e61fe33cee05a31bc22a42f22e5b47a86deec7702dbebad422054770dcc9102caf0475ca59d3d11198b901711ea99c071909b6501007cc278fe76ce8d0d6221af9e98fd15199a1ded5bc008ee2a1de57cbc258d7e0766bb2d663cebddd17601478af4417941a482a8326fd7fcb2caed4e5b02bbaf3ca62e90f4bb11dcfc07b9e60618f401b805a8b2888a71a5b420c50265eab84d4da8931a941206e66eb79502751cfb1611b6d3368b9fa28f05d0eb4817888abd6375d242382407bbf4fe2feec140eee476b4a53e261ff5bd3dd5218efe06db14bece02e2d51948b8c4ef27ff611cbcdfee7a1218fff2276c36605250c75047f8e2d921ae908f11e54b5b72faa5eb4287300e57372cd1c18b907aae9f7b93d45852e03323ce5c86a2876557c7bd317ba664b64a98b0914e00135a856c80f63449af08ab2d28c57227a9d9ffd8d490ff9badd4c89e915de5a175c4db82917a60111b5a115ad8f3350fbb9afd0e8fed93f5b8c42539ffdf19e5c390c89078f402e118880af3e25ed70f0ffeea0c6a7abe79e271f241595a8572d3d8d5734a102066695246af8ffb540d899d934d18cc7ba6e41dcf9ba4929e8fdfd62c55527002ce07709f11cd1a0165797633cf6a87e804386e59a520586e3159affd2b523c364d1c4e3b70fcfaeca909a061ac4b1e0c8d4dbff016d8a9e2c98461d7a8dc5f00969f721cfbc50ce47f6fefb84ba30a350d25eb6edbaa7d872c283c89433bcd25181a28ede11beb3561cc1d9cd7ca54776b186f016b2859d417689e7aa9f65a859d9062786e6f966b9087f4af27706f9e9031f918f667dd4e45c4e0774e22febbc19dffcaeeaa23dc231402355b5b0ca5c9490795d18b6a924d026829ae0f3a2d0a6a07e98995f0cf5ffba662f595f0241b296651bdbed137f1bed71e061f0e79dc4a3a21be04f8d8d490ca914a895a00b35e404074a6d0d83faf68723f1a7c73367cbc8f4bb66b88f38cf71f7f07f14debfca9bcbd61068b39bb16769789e675550ddcdb6a657ff3e19094a9ee8ff1b664764f4a8c403a43edbb3d7df262824ef3cd1524c2be0b8e9c3fc51c264a1fb767dc929f8100381486e3890209a46ecffb2e2df84594e956430444f2696aa50337c7f6581625fe4b3867c0de9604d3b89eee18afba29e277da8a2ced77bcfa03b6cd118caa8e93b2041c58f9139fb4ae866c1f42eef887ca4401a60e86c5bd368aa35afecef90e43e3a47104258bad8c80e62684d425ce8ce2d1e52996326fe70ab7bf9bc81a7ae92f5b6a9b10fce43b4ba6b546919baa03acb408fead26d7b9754c5bb224c6224a26b307738341359a6524a28bc45b5799ec25d96d17178812584d37b95b7e78abe746392ee658b0a76e6625c6855e28827de6f80851a3bdcb99d4b9ab6cc94dc978e58636d9e0b80bdba0e6f9a4bc5b1ab73298a8de6c3e7943477de12b76c11ac8704f550d5401cddfc977460845cb16522c6489e23860c2ea7390bae232417cc9e23075f40c57924a84aedd36cfefa2eaa6f13a9cf4024c6f0eff030e8f2a90c0b586229d9f49568520cdf295e1b7ebd5eb4b77815410802343e7cbbe53587393830a05449c9549f0d259722dbf6b10e18e93361558f3b40a5b29543e3fbba7097e4032c0a8011b3c2ee4111c049eb9e5c5e9f6563785e5f9099594a94452b89e5e69c538957ebd610eb6f14a734e40fd0111d276b5e8c8c38e757e9e718b9c6264baa6b40f26061555e7f0b695b302d4b99c888be2e00f20c2508858c5c2a2ad13ea06c2db528bd5ddd4ac8ccc1a18acb06d2908c02d6de42dbc40a50099bed86954f98ebfb78032aa7c98b4c87f09edbf6c384d808db84dd32a3ad97d34c5235d33ffc98d5f1f724a83dc49469289798b70816871a898c8e792ad02c03bb3f61dbfb1979e97990511ba7d88a5f174977d40980ea6a80a55e790a5c296628bae00c0b145bdd4da42b0fc9d113650ca21ed691cf3b782be5cad4e583905b8d01d7cb0179ca494416249ad939d55fb6ecb8d7f7a1ad949f35a5a259f557fdf22f1c6b6a02b86d132b56126404d0c7acb578509c14f163c0882452742292c72143ec0dbc16052ef627b4b1c63c9c680faec4cc2e424f8f3a46bab11bf9911593d8d7052bb071b68259ec04c1be722dbdd037dae68af6d35466e450d747d9e2e81b8c91740be501b7facd255aa4b513e942e32eb6f8589ad70e29999db1cacb08ccf9fe6b4daa2523c03a140b5ffae50ffabcaeb827614fdb83385658414dddbd2ffeeedfa66fb092f95de2838ef6d944d69b22e0634db30713163cc95123ddf81ab650d9f60fb515fe76af8fa4be77f0a205b7ad83fb2b8c257ff7d1ca88aed8f02daa968797f084f7441e4f57a5289f6b1b504644ec36f1bd4999ef477e2dae4f63bdcbf3a509080656953b7192a91c059f3c921213907bb99b50a94d267db65bcd4451a62699b69f5f7c7dfa783722cf3e6c543669752d272d85acdfbfa1cc92570d0a323e3b4a88a6a93e6c31d16f02d67e66a8cdacf7c587291ecee675d7cc846e855acfee648a544202c29c48024463be5649b8dc8e336a516bcd781f78a282f65b0910fe3f063910a47cc620b068adceee03bd558291d2f17f5a1e8e0ff76015414a74595d825efddadb4d408c5b8e3f589a83c18bfa861aded2d94c07c0d07c0d5db24e14514d544877acd2aae9bf7a85ae2b49a1af09c9972028d0489c4ea59c71b87536ea5d7793259ec7e408721117740118684f908168155bdbdac68cc3fa274e74aa7aa6e60869b8b3e3acd648ad4c3985498edf030d4443eb11c3eabcd667ab459af104269f551172d2a0b67f5f4f3c84447f2b226c504a6e0797a9cb05cb4fde5b0b74d72ed2e61f74441ce594174e5c41e56544a02649f97054f63a47af624386b7493b0b6b69d18fdf209fe6b96fde5bf6cbd5b44b850018e4ae6424370b72093b7fbf3abdb390e4f772bf7571c6ddf33f078e5c9fe9658af41fbe7d1a069c1db93ed3f8bf0cc7e95e8cb53e4407e62b02b39495270881bb5174fe7c6d3cfa36149cbf677b67c982e843d474d26afb02a3516e965d8e0d6653c21d8b34c6c7fda2c66b49c392618d42ab461934c2cbb40782d261078dcd7b283bfb248ae5a7f3d960b21a87a76fb3596571f4fc346e1dd15c53b9e2daceaafad4b79b4b46ef3cf4d944186d0e50adde494df724780795e6ba2b30ced3ecc6f4d62f919efc22d8df534547fe5474335e6c6f1e41b1ee0dddce34e030a48ae315c549b6ab603e16d00f2be514154951d09be5477f1d1147d6267b5c52bd54fe9e4b073c78cfd5db345a0787761b9a4664d107a04d3c5a40b52b3a91b217048e4aa8700fa84aeec59806b902a3cd9917ccfa3854299c61085a69c12133b01b970405bea204e04ec3096801dda50f8af0c46e11c2bf74165d36f88d6ca15fa3f38413446724ac36022bfb92991b43a79f201e6e9591b52b36189d09a0fbec845e04c245bda70a2e9f2eb10dcdcde4885503cde2f4c8fc1214bf0b31618ff6c3168d84a0d456b61c99e1bf0594a3c0a2110a157aa0abce7734e534c989aed5cf104657a3db2de0be6841a96f19c7d4a9b6fce1a8e4ca5d360de05533e9f1ecab1c8a9c86b034ea54ff259c1ae4d5aeb37823522595e25e8a367f0d6aeeb1859610fe3b3c64792d4a8a77268ca74c0a7d35fe6bc4e63459d95200cea821ea6c5e5270c1150c07b377d87fb8aec1700001087c023c27ce2dbd9f4eb7c695072deca1a5828cba47c1d869513edc55a440a9f264a8bc341f8040e2fdd103427c4678cd72de33a6eb8d421046c10683b4b07b83bc542dd2cba095e094a1dcef086f832b35b0ac64f4a14df1d606df07d0314bb1e0e9003c427839a3c963e75adfd8c190b353eeb0adb02b70c0a971de83090b9e9fc89c747d1c954f91d132a3ebd9b4fa4cc68fcaa255d515e9ba752ceb17eddc96ca4c6036703658a567e77af57222512cc7e216930c6da8fadaf0cbe87d8b54b873f9ccc92d0b6a215b6a3226953ed575333f601bf02f2813f908518211ca38995ef65f68c560d0221f9b6f3cdd64b189f10c8ac017bc32332b7ebac457be3106fe97ff47aa05d05e72b6c2d603c3d55a2e9ac43c3cad33824aea9527db0124b7508c338d58236769ffeded6793fc0e2844aeda77c2cf7c6f44ab3e49548053cdd36dc1e796ec6f23ce099b573d9b603bbb0cb0494cdbc3964614313de601bae44b95cfc07ccd5775170bc14ac2db3d0515d7ce0ddfa4f4f527a48a192b12c6c03ddc9c28f1580e0379b6a18a48b379cc5fdac3af05237bb8d9d49d03b53e56cb4ba3ef63964507d5ded7a0622ddad6adaaabfb9dda8b54bf169fa57305bd38645814d2bbcd349025b1bf84c100b174109b6c7c02507f85c3f463974521bccc25e0e179c2edad0257046ceb0cad4788a3e927d4391531d14e9e39936acdd552cd64bdf5ee784f2ee77adb2050e76a5bdb8cb445f5ea921d7bb72a6add1657eb5d55cb344c48ec6294a82c18ee8574f00b595d1fc0999253579123a833eaa6c0a56ff1ac9f27fd759373fdce791f33dccd3f67f33f96cefbe3b500104d351166b52e39201983257e6dbc581053972b461082c5bbf67de5308f26adcfff54d034800dcb1a77ffa61c5c0584d660da6ecf6ff36be55e67e8b257a4f1aeba5055abb9efbde73b426427b48cc8b8d46f22f81293da387989bae8e649b6efa38bd682adca7c7669cfb4afdac16379e635a02ce3e31f11b292180643032e90b8b7121de7a32538e0428a276d12247750b90c9661b7a1530bd015cce3bf6e71941a56955fbd398ae75a6e7abb52c59192c4a09d41c6459eb23c1b6395d88fa64bafe04616117456eef79e3dd6226da17efd1cdcd46e635342d843184996450b5b87350b742d93513f63193599f47fc2a9cedac905ef2fefe1b8cf5245f1e436b61baa8f14ddcec0bf57017ecd6ce1379d924e699fd0c0f4f3c29b5a40878565afa18a04323efb31bf25af866b1aa9359a610839d051564463923ec1e8c921e93a51dd72d631c9d11791bebd22f2ce935d319cd3cedb35d90871350dea5a02d532febfe32a0e44bcad55d8ba17c1f90c2e721b49a3fb2e4b51231f266ce7162722dc68f370489e77b26f008bd4e67c65d24a7f0012e17110c76ec7442b59cc65e1a207a8aad22b4c87a6e7328d9a7b838e202a4bc21cbbd93c49c0c357f00470bc7ce8ccbb033c2ec5137f5d64c5857d03a83bddefada365e9cbcac5071c76b7251e849fb95e5930bea6976e04192b6286a4902a7b4a7fc8c618b6f94d311a9c42544405fac41b1d61fd82d075ba1b67373f169ef89f8e493ef97be3ed6e4d510c332cf8e5ca8068b5a38e295f95217d21c743d13cc6ac21a5fde845a178e4daea06704f92d992de53a6b58a5a3d2b70daf9d01bdcbc382f8e0e1fafd3688ce50d872addd78c3c2fc416e85589c7327844ddae8bcbd6ff1a1d6531aa86e6fdef09a9499f35845270ada61d0272a3d29328760e2ab513c4913e4388ba7e25c5c0a271a643073b15787d477338824332ad709ece1505b2f5e4a7872b6183299d453d63bf842c0a5a3a47a19ba82d893dc105bbeed879fd9f2dcd195d7f293f81f61a626810d6e48b1d0f1f2a37219c6fdfaa18dc9aa2f05b20b7df68f85b5ce504e32ffd1b086c8d6d34b3acd9e640b4af3340b2ac612d74f89490a2d2b4c5c3438880bf6efdc2a844718c1cdc685f75ffcef108a7e9e196acd38235429e73bb57a3e0da4f78348d40c11731b2017b332684d7db488c31530c19da928195e6a92b23562ea4c35cd8959591b46832af48b9d87e936e15af53138579e1c9775ce0bb9bbd009b66828279cbce3c21e725bc1169705c68c8b391bd5a9a40a9c91d914012952b9dcabd43ff3b3313a8ccab4aa34ec0e800d950acba12aa5d29196de49b9e46fe56e62ed6ad15dd019291b470b20d24cf8aa5485a03cbc433f6348e638682f7d828b801e434d1d4f3021cd29e06f5982e79d998ffb8eb35ad4c8571e87cd97a18dcd3b70a8654338011166bc04151c22327b1f8628e5f94e2cee8b0b1b2ef44df2224e1d0091abe0a003bcf524fe5715d40cbf71175e5d5e8775d7a9033195f7d30456fad82ee6f91a2136456f8e02412fa4b6eeca11d1ca39e2b430b70c6bf982883c8f5db74235c0566bf2ed6e53ec3064777ddffc302367fd972663b8225ce7ae5b73712491b4a5bb29f34c9547b59a45bc361565c37d521dc13c29dddde990840b327efe5cc86d6531951ba9e6e8b187c954cd7520778aac6bad71cdd4b87875f5f613000ecb8e7c8c4257b520ddb793c14a161609c6c88fab56146431bf89ffd33efae822765df03255adc2507c6ea12d27f10cf39e4747193234dd05565be1bce2142d9f2a7df0e0bd45e66e883389059962325cea18e81f4467fbd3116f404ae0e445bdada0003c3b07b9e1c69c250b1b4de945d209fb2186974bf8984c442e1b3abcdf3edd5f078cbff3a32d337d82b89df99707aa933d306f6c63231f5275bd707125768c574cbb406b61d3fb4e53a9adf00a336efb6f139954b49f87a93fa6ea10ec10fd041733bad1f1861b881ef09de07f30258dd5c96c6681841c461164248cb22084523c79ecf2556fc1a19da121fa2e9f24db7ad00a6d08e9f7226771a6a3e967ec33ba4a6ff7421640375fa23a77dc325c9a55f35a3251c1c5847c1f6a22a0c4731bf17705d2adb11018874a0536fbf838f417e79d374196881b1d9db99344b08f67d07a96bccb22870fcb384fe4bd2265b42362a6b0e8338e732d913fa8aeede2841c15352d72e9dfade2e993edba96e17a0ef21c310df522d1d04470d0f0e580b9e7f561daeaff3eec164058c090051723b1cb45d81ba3734b88e79369fc4ae0cd1a5eb940d0e365e7d885d41b4bb9a740e53d6795c9e68c80c036cf6b5f213ec7e0964ad3a50b496bf6b3ddae94cec7636a3e0a8eabe2f66bed977fbc7661c951b1cd4a3dca75eacde680c4fa7cffe04f84640a4939f5bf7a4605b6f47147fce6aaa4f3caf4874fb39d1adc91855225f5ea82df6b14a6f0e7abe992e47714f39d0f50d8e5da591ad7ee6eac422938e881b986cda95aeb437a1bad1510fceda13abd8d0d9870ee6f38eabc178859aef06941bbab5c924d01704c6d2a2b12e93e3de96e0d8a200e6dfd69f5280b2b317d077e659ac56f101636e3ead3f3b44db6fbebd5227d995fee320291020db06f78890586231fdff3ece78f6f3831578e0e3b63a071d6d29254a510076f9af45dbc44a7b98cb28097ef2ae39e6df6c119eb761b835b6c40497e95d38c0931b9cc0b506a6e3ab490d6c1cb66b6ca552a922a896bca93b8f99f1432244d34cd9586c7e440d71a4e86cb1c26b6dde8f230068509411810ed679ab263783746d72993f5be3f0d5e2bd01c549633c8dde711400bb45270bb921f48b04e18aab16fa4c39297eb3455a21b89a6a7dac95b27d1ae05c6e8facbcde67fadc2d399937dcc94a3d635c5560746904c7b140a12aae64a561fe5b77e72202277d375e7458412b0e87c8c89abf78bd62f81ef3d85367337e743afc2afbe337d46e4a203d90c090be0c0d98ba1faedb4930869febfb05fb4e4f245883413ebc0224b24551afe00ad5f7a44a60590b41d3a8dec87ce39180495af2813e482e5ccc1079f81795b04ad318aeae928eecc491565152308d5c13d7738e576906ff75a2b38e29a8c00cad8933502fe2f60238ec4183c1221b6e5b05f220aa3492a8eb9f3d57ee7310a184991723ee59fd499d4ac871dcf66a9263a36dd680ad1b6fe6529c38280b745566c55b790102d38662b9c2670cd07e91cb0c3480cd76ba7a93d2ebc50fdf4f8245164f5cc7b25e0e06bab7ba4525705a7e2750c36ccb5d86bb7cea5b8c3b8b0f9c34f4705a223b3d954cf63b01bada92fb53f3a01f4adc8744e0d3f7bc2d8988098f6c29e7fca16f83f3d902570b0803965b1c2f3270a54990d89eadf3d07ed0d1f62666a23745154b86a16c51081874bda5af567e807329ca963a335996c2ffd0bdd1da81fdb65ecd9d6a8093c61bb9b54c13ff087983672a445eb431868dc44156ec09c4a7b245e960d7154455790732559334dea6d898f46be1ca16de2a9a0df6584eeba4a447bca85723f882ea8b95195355cbeb26bf58412bed63fb58bcded8990367c9173bb318f4e6501f598f4d36f5d2f8c6d320b16fd590d35a57e52714c4034e531521e2a4e7ae5f209707cc47b558350df7246af444d1acc2927e0665e6d9e711be464f5f7ceaa38b7604bf332562e751aa1e83c66ba61d45a7339d3196c7b7037689b7e794cefc9f58386006f6da6a03f6680d46116aff0aa5ceb65a99c1c6e05cde1e82a347ca1f44d8e53e61fe594d4f24608e009c07ddc7533e334097681ab4de5e8db25755a6e2f2856ef2d54594720467ecdcb5e8f63bbd0e1a80dab38e562f05e138e5441c6842abfe991c6654010f7e31060fecde1e683ae457914d91e1288ef7e187561e94d16a101ea811d35059b9051e8aebb73c3edd63b954ca37abff454275fba7fa04867dbced7e4e5139623b01c4dd0960b071ad4dcc799458789f3e5cb53af29e40a7ea55cdf4dd0ebd07802aba1d0bb18212d6e11543d796662f8382838f5e85245de9f7a2495743a9002daeecb7472447da694dc619c226614e33649837c1bdfe1a7aab9ff13a1e120873440492441d3c048f08c73c007d775fa72d68872e17988bcd69f4e0f8e30e27ece2f255b181bf6772a482b997f564f81933b4cd46a34dc6c7d1a210c7bc1f16a14423f4cb4c172ea3ed0e82a30f768b07c9f81a928ccbb3a290b802dde90d5ea15ebd092ebc5e75bd7af6922a1e634b0a3962d6f855c62d0638a649bf1dbbf3c1a60ac4dd2dc4bb7d27c7c9a99844dc0b6f071bd369e43fe689c6ae021485bb995509f571c0f2bccc921be90d97e1ee141311ec44a588c0495c5211b58f9123c18a1c81e5dca2b40ff62b1656913e4b3e3fbace4ab08a909543389aeb2d39bb720e00dbdb6cd1c4daa5a865b0be242aa0fc340c590cd2b4522440a20f3c8ec0ceb15823543dc95ac60910a635bd57c6ee77e112312effeebd7b43b6f592ebbdb9c97f02f53759872564fd222f77ca950b9f3063f0c5b73fb5679e4d94cc7bcaed52121968201973d97fe8ed2ba4b89d26e8a7b3cfd04f8493835d8a6128fc53c18f3ec5c89a4e7f858eadfa13d686e204fe42cec547648cb8030f07b370df4bbf7ea674d1ac3f32f21fce5c65cddcea48ca3eaa6fcc41c508dd222f1e2f61a203d25ae1ee5603c242901009b701e6f20a6358dcadcc8783b6319e9f6378977e16d5f9f31747d93029527a3fcff45b317fa5b70d09350cda247bdeb47fb29acfd1c916b57e5356703547da6d9c28c511f7520cdceca1b97cd92ca71f4d3d3260e0a3cfc5829a392b0740ac9bbcc963f80f99d57e98bb562302f19b7dc468e293b1141ea29a5bce145cd6eb945df02227c9c70a89adbce87a8d5dce8975ad922a410d4878a04e4700564a67d9a9387e45e15a476bc1b55d1beae43b35ecfcbf9b18c90d51e7f1982567460e146c501980040bd750f59826c43e255289164588415e18bf76e12dec32da5e5e0e87e3c970551eaf776abca10d4d943f0d964949376c878192ead0c3da2cadd27ddcfdd4b85a6c98d52a5f48ed933ae91c43b4bfe39b35aecf9050a0c684025ce70d90a719c8884398c095de9f0a101e04b73930feaccb09d30eb300b4c1486ee4006d7fcc2e7cd15d224ee36aab9d08b640c23955d48ba64a1815952e020b1ef0abde6b2bbb215656dd0c7b177a5acc7b5ef7a4a9234bbbd48a85ab580946943f267c0378547cad2c7e81469fba4186a0930ce4a2189dabb7dc86086f157ce4f84e9a4f74c098b621b1dffbbd7c671cf0ceda38fcf6541fef12b08c85ef31e1bb5c748e7c7993c3ff778d9bf4bbc35bcf393d9973283d0c2347bdea77a9d45134e03a97e806c9f14568ca5ac0b95ae18669ed833ff379b6d43d0fc4c6b37687b54fe29ecbe9a07027685ff8ba34ff0dcfc8bd3177cf4735b3bcf855ca81927d8e87da0bb875e74ce9d066437cbabf43966f56bbf3d6ea104eab5216e83f15b2403e9e77818e0491b1eb2df1a101554b4cd4ae838b0b628e3f332e2729a002b011464f76266cffe5d17d228c8ed8cea3d197d7556f431f3ff4e812392a9806c695e421c8ce0a3801a57aaebb26747dec92f4613855606a8f065136379e088b09745196bc07acbfa3be4c38cd29a5a91e0ff8974de47cab211a6fa64406422a2ccaae395cfcc164df8e63414f39419c6aa184755ec72d012f58bd0e3f7db2d82cab1816e11e02f91e474c24d037d1a8a1fbcc7f8d559bb29f0fd1365770086ac0445f99c50254cf0c15f6475608e8d79a0c83d67700de96c9a972344e28c2f85592d556ad6ae0482b7899127c130ad239878d767f9fb664b9b68b24ab71d1ede59ff90632d44e6aad5ffa45d29b83a2102070b064863847f5040acc45ff993c1ef28534d8f1ba52a410bded517892ee46941931b3066204bd8f7e0fdfeed7a89b0b537e54c4f0cb5c01ae4653674e3350023de39efe98c70382a3457dc96c3247b66c020c9f188916b662c373026f9fbb58457ea155a122dc5cfd864f58b8a3b76a71b41308d846d6ee6170146566b1dc94a7b67a599529029ed125e6bed93611fe6a65c659e395090915fbc27296eb4959a5eb686a2e7c2bc8484afc7d71e22260d574085098ed05f6c3646d058f08b697f0c3488f6889f7df8bc7ecaa45ff4d0e486f5e8ef6c52bf3e48386e34981743c54ae471797f532e8456e9c0ae205cc7ac5b9fc1f9f28fa053bb6f5e6438840b74c40cf2e000cad47b8df14e8ead65d91be2b369fc50aa3b44311dbbc6df5900cde05eb8bdd0ceffc9f7380e8ff7db0bf3fe9e1667dba5553a5b1eaf280b5d3262c62f6808b96a884b80bd22ad1bdc148f9e0ca51692c7331a5851b4eba383e43e23e12adb273d7afef243bc32600e3ed286336f20619b639da15061b22f77898090b4b76e2d64a0f9574416aee508cc894106ec87bc3fa2faccc813533d4709eab5efc2583bc5251d847fcefdf8c7a895eb66f234e06555e5fc69dc2bbe3a82fd1c832bce64bde291a33f6e7046bb9ad3e82139e0e8f688afd80ea0738e440a428bfc85e1f64218a85000656acbe9a1764d06cdc8ff074b9901505a078e978ef91afec6edb4b897cf2327b567997b58be355cc6711c21ec663fd5fa32546562a03012da2bbb0479e29eedc2d28b216f816a5e9c478d91c5fe6be4566b32e0c66f8c05d7c5f8381cdc5df2e8a62a6e49c89dc94c9201367c1d6bc66d075345ab33bc40efec5204295f4e68d7eb3a5eb5449154fb88196f61b2a478ae9386593849628f9eca110b7fa4f1e6bd94caee3eda9269f84ec9c74887d1590946f9660b498076bbd833ede36a16563c6f3ee88738a7047951fd1a96538b0b743abbecf17ea0553597c7cf7bf278e484f7d354e903ccfc5627ee8a42c9289bca3205f9ce826e884b42144f3abb752624a87c2922ab33e4d49b9252f620fb8df8a1696c3ec955e63dbf178fb3bae7f1182afcffe5e7c3c9ad9d31b13107eb857a96ec889b905ed1ede5c90c13c25ea6b63bf8820f54984d42251d693f1f04e13a5d91539f5b31d5a2164f263cb9dce81a9b525918bb3d13a9c735ea7c4dec5a31e2e0ea9d43b4eadb344512aede0e4601ff3b2f8163ee40710bcb6c8fdf217b271e066c46ba697b76d5e896b1c2b33f519d6905cbb21acc0f9fbbcb3859e6fbd54b029320a7e6e2bae49a4faf6d917a5f5800a1337761c2653871d48603f9e326989fdb279ce597b0acdcc5195053e88c2fd300e25e5be1ec15ffc90fc7c4e568b5506bb820d047019818ea2073f1eac988e35fe3462242d37af5a0741dc9d7690359b82c4154a8dac36a6c1b5eb0c3c960d5bbda2334c4d25d2ddfc3e00708fad09cdc55b0c84d986c0dc4d0223c5332d27641f8a36b36084bd41a013a497e3ae0abdfb6db363bfa3c09d81c48171ed9d1b37e6b295b42714e7262ec11df7173a9d815f65906e321114594711e291d53faab99771230d51c0a6f1608036786e8e08bbd08585121c0b4bf95b2d86866176cb437fbb797f82b120629dcf029eb1510286efd189f2da6783471eceda084c353d66de30cd0bee583ed32ade9f918c551fd0dc5051b9ecf4e93c21a5d7b3848e68f090a46ad10a4d56a508a38a2f78479a7815debb9b2ec57964095f6a4ffd6c5596ddd5c5613dc8ae2e52d66f77585023f67a75899aa87eba490b049a28868672b729c1736ba40df3204198ae144c2cabc3ca847cf1bc294ed550ae31be6d37caa7756dc89043bbb570d5e8bd2aa4b5a9f86e118ccf7beb6ddddbe6ddc4555fd315b25405ac90e0aa11d0a52a0005df1a5ced80421283fe85e11a8ec5e71049ae056a8451513db982e57782d8324fd8d93cf6cc7b9cb3ad3da30b8ff156ebddd72907f888353976cd99f023f57e648b131475cfb60d4d695725b4614f6ef1469b49dae6d8e18f4a4b1585438894cde6fe3d1195b6f601555961769effc3020eb47ab8887dcdf6c5abbf2d0cfd987b5106ecb2faba3f3d3fe19075a09e89eedc6f4ff95f75502dbf6996afe205f60a8ff947abaf0ddc670e69e2a394498ab9dbf171cebd88ddb58b7fac73d6ac88289fdb44f3a9667084110da1ee0ee2fd431a9ac70044a16453faf1bd2874fb7628f8f0e63f7e14fe5d8cd4d4eb4fbef01ecce2e210f563037a1bcbdb055c1843483d19dd605589a41d8683cbe061fc46e087f1ad928eebd009a1241bc57a681793f6be66df15e1a612c25fcae1bad095cf1f714b5d62b8a64884bd0885236912ab0ad447764a01304b8e72543c20cc36b78d9319d4b9b8d57fca5b05f15150ea21f1cc6c4bde381ff74586ea5e28ae5c162154e47297587ea14dceec494a1565c208cd3f9cc5ea04378f4836cd9c6bf3a339efc35a7fd92e58f4dbf4c64e5db614f6481ff3144056f9f358385bfc6796f5bb3387e5104799d7c829d474f9fdc822494b7d1654855f85693f5601c44481dd443d8b7df92b5c669f39105b22c88a835c6f10c01c512ae78e14f3c40caa7dfc1ea60208576d4e9845ef7e30fab9801c2e9f63477baf4c36220aba0d3f0dc057c6a00c2b7ee58bae14545ed4308f5ce376bd108a27f14000bb3e06cd483012778784d01c6c4b82f196802c3229f2bde4612ad8ea1a3f585e138ce53ec9228d8ff6e748fdedc4389d7e9c98146feb96a6911bdf528bccf15560930ba92c7797299e7f0a19fa264a98c528d6d070b0199728e938f344d7ddc4e751e6c1ca946eaf00893e6dbe7dee1bb17ec55ae2ecc9ccebc6d2d912a65c11cba25dbb0ee7b87d49a21ca1cdda24efdad4688659309308c7d9f58f2ea3439b48a640f53090a2c6483c7c8bdcfc738963567556ee955bfb02b19b1e7029f0cb775d2aa8bf6503c50d44906f3dff6c256402a48715d8434cb12923aa3f543ea52be1072824d734233c1d0b885b7aefa48e894efdb6a746745304f7e42563ce206cdf23782f41156e21287eb3f4a89ec893374409c907ee6cbdeed8f9d36c3302ffb16beb7e3a4781013a7bfa58c218894c5b547fd3db942609169da2bb85b23a12f128b2803ab4b9ea69a2abd3b7ad365a085edf7955d58f036e546b80415fc0b902ec3a59e559b3e6c1bf86a2cc665a78fb5accc676de2a9a486521c0526e2491f9b2e40b8eaa4e5b97a093df61e4a9d4155b252d70dc771076914842b646e8cf25a6c8d59f72c6fce2e15e1876f1acd5c921f29a3962e05149822974f3986f5536af09a2fcc3e686988859d09e7391cd923153d7f40535f68199b39019deb47d34648f3ae575579e6cb970d483b96623fbe3ed11a5691a2406cac3f2d797d46012f4d78467004596b592ac09c09446b7ce8a3f4eb264b827e0ae689a3311a44ba142d048862da2e47625d57316a2325196b86032167b420cef4ac8169a852883eb0cfbeb962530a457d224e835262afd190ad31f2ce1cb57e946864a0008c065717e89f51f18baa35d43d3c94b0d3a731d667804e3d6344294a4779c43a76ca176b4d29118a057590d00af0a75defcf0af1c3d06fe585c7f5c5bba2bedbf717c9c0de55cabc53ac7d708242d87c5907e8b97cb85daebb8fbcefe7d1b75d7a2c2f503aa18172cdf57d7bd3acf4c511763304a1fde00a36f77dfc75a3c81d0aca1d9105507fe2cb9da4e3334cc71523c523a09befc5eaa936a43ed26710bc24afe4b11cd6cd2c12db1520af39786e574b94ed5389a560d9b07e58cebd389b4e070e204554d97742b338a30dfd8ea7c818b5ec53682108401db90ff62ed2a434ea32281925b987be91d8c0fa536e7a4ee923b12d575a786a8f1163931efb6eb76dee8597ac5aecb1cc9d5d3d3e11598d27a4a20e6ef51150a8680ea78eaa3b3ef3a602ad8e7b352d9f6e4b578be99c38693d613cf2aa312e436040511b9bea506f1b20a18f45f68aab7f7ee0b46eb12c52a5ee06f17dd4a9fc27c8520a18fdc6a3cfa0f845efaa6392dba11a08216d4e17e7d9c00197fa2f486b4564a97d668383cbaa029128713b3c140e0c16b66d9254882dd76bc290958c88c2da51ad745cdcf3959c8c38740fdf3ab1c693d46a2d69b291bebf8df357ee3ec00f1d7c3d3a1a5640f26eece7d7865de880bf2ba6e5f64c9734f57391001b3d51510fa15ea78855d5e9f825eab806ecb3aba7ebfd4bb891b32e55b9b2b903cb7f95b2e98e0df4b0aa49b6dd0caec6e2535aff5f554304acc0207babca2781c1f94ea598c0e7923818417c68d269c70808ceccae7176074c2247b1bedbc9c1a864a55a05ccff49c1894ba4d575246ef28ce449725e429ddb5408b9b9ab4299ae08097404f3b1388f19604c3fea4b5e28f9a4b6b58d87939dae1db2d95bbee1b5103c10558794e070012dd9732524fc031b1bd31bdbdb940cd7fccf59f722319519d0ba08c44ff5e58f5c117b35ad1b434323cbe68153e9f752f08ac80b0f933b74e66aac8a85c9d85fa1e52551e6e94997374becb3c35677890cc2b00dbc71249ae9b2390465fad19d0fc70c47d065da5daf5333f16968fdc47c49cf8b1df886df27a87bcf5a7df5dc50b4650eb7a6f321f0976a5d18c7021bb55a2e701ae65233bd49e1abf0c4fddf83fede94e8a102ed891afa997e8260f10a7291df976926602a5a1f3a07ca38388e5b8edf6a33584ded47d0d855dd38c4d492a3ddd4da750776103802dea35f2be820b94a63b72603985f0c20f065be23221f18bc99ee6f41438441d0787acd6fb4993a07047ac8a2c74640e74ba1166bfc7e503930aa6e989594e29f46045ae4906a7812526f4a2dd8ed9c2ce383b631916758ad12490b2df0ca45f4718f17fb5bcd0aab4b70c118de2d24c301830c1c4f7e7999e98b76d91028387fc124a70c89c5ebb4736afe7919e372f1eccd92b5fbab6372931c2756a4e9177d62f488fcd1a4ea90840323e27d6f9b7579ab79be5bf818e62dee01749e665d39e038af522317466f00d0d5feb7e2030256ee902bbcc74c841f64c6290586eb75d5a98b3a28efa58b5fe668759c82f43a081a283d445a553bfed04ad14a098c0d8606d4cc88a2e5331073f7ccbcaef2ad61838564175972640c8396f0fcbe8412024079db5725f3282824578236326e7e1614ea37efef5d16692feabd814ed5cb689d9ae436e2eec613711015585b9907da758085885951d9671745e16ad91103d9c00a1f6bcf2cb33b12a00482523b17d307609b2d6d6abb9f75ca72cd59171ec4714accde0d2e34ef413b59bb5a696f789e229d8c4552536cf65d63bf6c4d4636a7097f48f52fea8fcddac205060f61993c3feb9b12463eb1b73f629c69e05aa37e66ea5cea1ba54c5a97debff5f7339a3c3c549ada0e46c25dc3c5d10cf66fc684c03590595f5bdcb46b07b3cc5b7b1c7417b16eae5797ec57ada6386d8129a75b09685b86beaa1bc3c200c70b61126ecf36dc46fb9d48d28116e0289ef8708e378ab7d8258ab3af18c6fea86800f06a89a07af3df5c1b47ddf6150f50358b9021265d8454b2e7dcac8c7942b7248b36d5c383e743de18706a4e54fd4ef5b842bd1fb22d98f28279bdf0ce76c12553e9456dd762eaec4bda7031c537848dfe08ba6b87f83ee59adcc85057125e2682d577e31447e58d40f8b631d0281db2ecfda9a9252955a1dd0f3b88f391bf621f4123894f32c70a333bec573b527aa0c7cb78762628d167b9863646f377cf545af5ce7fe3b76cbcbf5dc21ed55d76c47f0ae1fb2d383ece627db7309877d64128b01e5869eaf13031fdb0ba38e7e766ead58aaddaefed8624416c64097fcda78818ebb0a67cb0481c62de28a9c72ac6ce32790ab7de2b70f947662fb7042a8321a120ed3019eb3884731ac1a848d6a4952f5c74aff2c4b729fd4b0c181081066c70fc2e22cae962ecb5d81a0d9a043e8fae6eb5f6fce4d3cdb4e75e4e255221a4e546845f623b7a33401c5521bdc9e575409991343119454421e8daa03954a25f4eaca10e229bc4cfd3fe8fad72de60d8aba9cf9e6c050fe9a2abd33c43d3246befdebaf550b31f3ce53a22346519d07a925226ef71265ca07c5d499f2e889a9fa832bc84a6d3295f5f62a42a3f460a1bcf9a0dbbab151756491f213623ea0399e91d4ac4ee413c770abb66f479c3934e6f053ff6544ab84bdf562e5db65677e545647dec731e18294de10c08db13e0b166f44a35067f27a428d7f5252ba7e3a02e89da913d5fcb58be24df4d71c8a5bad3aa08e680f184b0c7f2d96095a8ddbb2cd16d762b7233489b4717f4e49f5b843f3ddd115f4dd636fa0118e32be79426a9c0d62ad0a46fdb5f04e724c6b937816888c10f70d4a28c1b770c49d887c9fd09fb64d8d3cc8b2ac9c35830a6c9f10995f86ce2fcc71828ccfa7975d7e16c119a279f64a76c1ba1be1fc2f3d8ee34a01d137c008b21e14e6630cd65d7ba97ea7926f27ff69a6ea1563b279ecc1ef0017c74de45284d5623eec74eb815e4f37d30e67beab9517a714c774791d2c4e9abb0b5819cf41492bfdb8e286e114ef6eaae4b3dc050a5c83d76919561e289176f33906d400d97f872258291e0631fafdd9588b2224523941352285aaacb29bf50c43761233a255fe5af540581ad899522948f0ba459e55cde466fe281af1356c00096886860b10a299b88ec06b642944c27218eb272870f0198ec3c2d2ab9cdd98194b626865f91f46b83a4629081aeeffe70583262216bce555111bb453ff87b495c53bc1aabe4d498011241d6c9d89536d16218712c9ea199f5bc0bab856a006e8bfab270140a7bd77a4a3e2d355940e383b5de8d25c974cdc4cc3ccd37082f68e9c7837624b2153896bbb1ff9beca5066091ec4b6f04e96d2230675dc2be72eac6af124ff19c8d5fdd2160ca7f86c3007ece4d4e217d21c87ac1ce337867f8e8db4d915aab28e07df4886f67067c9570418380d7e0b30e9611423e5d614cd0bbe423341b4a6b6432e2a06030a0b53112078fcee0a2a404d07edaaaf2eebdfe99e13f6b010b56942d4b28221885ef6ba492012c92c664a67738346f38f1ba6effeb686ab31e8d704f4d62b270921dbe61c40b9140fe5a480937b839b0862fa6734a222f1d632863631cac8a4a4340c821152d443a53aa4db6d324a079200476a279a9771ba40e1fa11e1aa8998d560e6bee1d28558373ceda07f68a9ff0b4240cfb9b2d4379c4296de2b73a27d60afcd3ae4ce1b1a1dd809faa40834328e9c6b2a33706db9b24d35e921325dbc6691ea9912d5dfd7cadc1fa92e77a7052708e7d504c7ba813d177970e4e08de7afc589dc0dc01c32856f3b3b1c7185af3af9923e5d77fdfbd2f77a5cc3842d9f767655997286c9875f8b471011fb85dbc5063dfbc6dc138a2638063d3ecda098d588c69d04385aa42fd25c30dba2421246025502ada959e741f270c5939a97b1a99bf55f0223843a2f1cdc2725a63cb2dde1f4eaeb5702a89c37fdc7cf61cc06c4d5c765071129ffc7aa9b025151f0904f9534e6ec77e9c327d3fba126846356902b6d6330cf221ca65291a50b634a69b368a8dccb91e70b4f2a7bd73e7875c1c8eefc338168884cdd0871215272ac39ec8bbe73ea7ebd9e25c1cf831296927b8cda170f09e18cab13912a6925b1fc6f1ce394aeb73a6a6b51bc4bbcc693b737a38754845c5744475043e73fa6cdf02f93db14a1bf6ff3b54642113e1f4a68aeeaf34d23b16b3284708454c654f1e9031dd4734946bf8c3bc41a916e55ec4dace4be7fda5c3bdf509f1a37fb56cd6ea50be16e591a03d3b0553b3a6f3c3e32bcb379f413f3847b431d5f60030424f5081c20e93d33c511abd3b9f8c9a3f6b2e5cc315f17e861c62ebf964c73defe386888a1c280b5311da3f0dfa476a3213d7f93d459eac5cc49e89cc455aa745fbf49c98c36a451350899e3ad7f7843514ca6c2556fbb6b217a7934a0e62c3dd6a6ee6383c61b12b837466a512d267361c64b4c555a6732361f0e82f4713dfaa3a396e235e7b11bf204c8f45b6574492b1f7263a7afc38ab59f3ec0198090df77287042b99f7142a2172a271931cc449fc9ccde2e8e8b8eecf9490fdb886599b391a2e09a18a3102bcabe811190de977e4ca40a77ebc74ab21d06e196990c7cefffd2337029dd91d1906d0598a2f60684891ba3e3431ac57eb419ee4c656b6c380224b20d7e2669ef7b4885cbc46685a6a252f5fdf9b82ba8cbf16e65e2f008b6ed53b2416363640b2acb0fb32e0c89e5ed0442786a7ab1885cd20ea425c61227af55b0a26214cff7fad626391379cd6ef42654b26f87fe76d163874935e0a1bba5be1893b477db7f74f46b51caf8f365c68271e7e21bb27c3ac9ff7909a95db9f775dffc6590448b8fbad96bbd892898c786a342576137924908a4377c5c9ae22199f8cd35736eb9d8e33e8611e810f17b7198a4f4789a23b38c362dfcc18ce1a33e8903777d6bb05e67da1ce73f701afe03948553a4c794ebd10f2f0901af6e48e790859fbd373ea5ccbf3684511f554bda11af48eceed01f1a73a2793eed919ded8c1f63f974b946980897326a3f65165768047910e0027610ad591ae03876bdbf245f1032a67ba2770216cbfb27b30a6f49ba256559923656fde1ffbfd3f0ced311d0589a3206eaca40fd5c54dfcdbc793008cca5114579b7e9aebbc9acc287170e92fe71428e9d0a1e67fe577dce0c1f4dbc50d1eb4b9d4674ef11b13f5896c84485c6a5f15f4912fe51b614b15aecde3fe18806517210bfe45e921818641ff8dd85c979bf56f77bd57befabdb491b5f18ba0f498821356445cee6b2640488992aa88e9b67373151e729272dcc313e14d8fabe69a1f51dfac670f7bf3dfa48c049b869e69ea5065aab53d9f2e784045a8baaec0e9197f8bd8386c88d4288e8565139c41cc3f8ae767a261bb421952b55633a60996ae4d3bad0172ec7512db8ec7667584bcdc396e270ee1454083d43fc2f87ec90cea145c3735517bbfaa070e7ce04dee553c5290bc88708d4a8e0bff11fe1f494a7881b77c3c8105435bc02d096260b9f99b2041d1e49e8a669e658e364c7b8c006e026c670cfa70855e789493b73248127620a9b6d19a1bdfa2e0354225c59add441fe43b72536d5ef2cc9e7a1da375f0ceea9d88654c3d1b2dc37ac1ecd756cc06a985f67f91378caa687f38bd6c30ac2adc60d8edf4d2127976840cf0805d768ca574d93571d30c737abfc2597496d9e4c6e03dcb86612459d1d28017b475e50726ababe58626f47c4c2743b67d1e016418b0cf2f7994d60c562f0e6796d624386f51ff17c924fb09042d3b556ce0cec3a10d8df6f0d70a2e4366300f6301b0502af9abd9353113c6fb695cf1cd1bc436c7f75ccc7c054de55784f012b10af6a8979b63b48eacc44b6527aa5cc987af8a2998760916b3bbfbe95717123c5c80429372446aaded9b3e280ff230a8fbda0b789b4509f92b776a269fea697f9d0a96e58a67059a70a6f2443693de6f60e1d766db0931fe79f8d45466a7fd4ba30be00c34fcab78a9fd2ac4b19c9d140364fbabd472d688d141e535c3d095dafc7dc478cc999b71c967cd330e3ffc7cc32fe49992e4b707c363133c0d5ba1f1b3c2556a9a7532bff4c988b76ad5e665e307aadb28e5cd346e7ba9257d8f3b1cae991971f433ce9fff359331e06128bbaeb344adf8bc5a3e687e56bda6bfd0db4c5604f3105db52927a4e70d051444764c1066e262ee7ca0ce36bdbdb54a5b9f50f02ab6140169cb70421dfc7d2f51a5a8fe5d667427996f79080760997c1585cfe9fb9c78dad5be4c9321ea5cc44969073abfaf962ae5d9b9303abff5794ee451e9e3c924c67babe4b9b521935d967dbe84ee0445c37dfc63338cba91724500cb3f4c320f16e7fc022621e28c6a39f7ff3b0f45e6ee7da3fe9a8ec99f259e3dbddb7818ed1a2fe8fcf9a248c02b1f55029f579a6e2edc0f6fdd0419bfe0de21cd6449d88e5a4b33eb118ed1d6326613da6d0919ba11e5f410eefa9503e4f9055815046bca2ad7348f899a8d0d8fa0e98bbd5ee93233b4354e48096c4ddb1ac17bf813c1e2b13a1577f49726b28ea58350b929d46dca11955885861f90ed65b71d32f44f1af10069addd5ba972553cfe07e77459313cf4d51d877b664626d68b68ad36d7c1d08dd789d07af80140d6bcabb1b88cda4b791f8fd42ebeb5d5fff3e54cfcb6cba8a8f34d6f7de7916e91b3be42b20115e6ac432529cc92301ba6adefedda628e028c5bc2b13ad606f563c0a6f08608380e93c9f2ff68f6252dca91b989c16e956adfb2f79360bf171613aaea33feef6a3149e8e51df5029c2d80add5b9e33d1bde595a4d342c6185ccd9e6464251c1f5ffcf06e5bff2f972b4aa66998df0c5ac19944df5a6260ad801b611f455f7082e4a50f15028516780e6ec3ee9286e7940f9fe531f6ac9448ae8a0166c7b10ca9eecc4d4a3cb8a40754ec3a79577fb47b2ddaaee462ed6b180309f027afba1f889460cb25e7563b99f9b0987d4d97c533b7f42988d07eebe8b9541b43497e04df1cb086f48fa5bb593d0d1a731dceba27c63325ad7339eab5bdf1c6fead7de3f4077ca1583ed6295ce5fd0ec76a46f5cfa6e3ddd0199ba3277c9980ba4f0be5e8fd90c6a42a7d613eeb5e14827d611be54c883bd0475497387ebeac048f4c22f55f07dc90a7b67125c594a9da2785add434e0025f0b7a86bec49d7aa42f01e082717e98164ff95cdae1e66ab02e82370eba2f5d0ecf9444a07d610ece5b0087f130400521c2fafd5febd482449b285beba6bcae429ef87a8c8731c486fd8a8587c1d63d5f15cbf973a357174e61f508336ddc08033b2fff7d9e5a8fabc1235b0ffe7f4e595a1104d54a546524ea3ce5b7375375d1ac50f33f0f5c2bbf3ea578f9fabac9f15cfc6a742543f23f88e4cd7d26aa03715ec399cfc53037be0cd5c7a47f1c409a9c669f12d0324139f0519e2e4f1452daa03c80058f5c88d06d05c2e5de3a9f089c7d59064ae51108dc58ae40f2a7fd758f8db6af383857a725c901e0757d77c71bf2c1fdd7b8267e638ad629cea0b9fe0179e371970f951326e52a8d25bcf86916d685e9de3cd31b42c1e11c98e48220ed7796c214c89e828571cf6f96ad2ce38a33cc0361b2d7cc2a6ecf978ebad4978b1c187f9f592eaee804fb236031692ff82ff578b4d70ceecb858d46f279a40f7aeb391204b43642f1869240548fb3435b95a01ab3bd757a7006ff45a711eac32fdb311ab874d2a8b8f6f7a35f8d59a6e77f434ea587aa5d14060bc90af112dea259c186af6542f9e866aede60f7c9e2eb619645a8c760cac1a91bf0bdbf30159fbf9dc039b3bd06f346c514bf3ffe783d6ba957abd21fd17afb197eb35ed29df252f5c212fb1f7937193c9835bba5c49b18880f0db627b95e526c787e6dc56c951654d38d3ad155e3dd573e69de418cc963924ed2662e9f6e4772beb41fa6053aa2c14eddecb93679d809e1ac37b007a92c9da6479f2060ee5c20af8b86b53a681052ea504b4071e7b3808fadcdff3f197e2f38bbdb8c8abaad1d4c5a87e5c3d0be6f10e2f81853f3ae6bc784d78398fbfd93a8f9c00e8f8e7a9069ad7889f4a1e11daf51c05675757aa6553d17ba8aa0b41e7b366ad34ccefa89e14aa1c7ad78855a7bb48087076ca16ac166e39cca7e368ec4abba71c500c144c5f2d5d4b3bd625cf7a72d8f2494b849ee6f3e7a4c20693802d6bd1f72f6d6db30353b8d982dd2b58328740c11a3d475cf4df7ca03fd7a1b0ce2bda8d4a83308b0c7d7c38835b2fa4fbfecee4707a6ae30ba1cf46d0d1d4f580fd0067684bab25774aea248e4abfd4d0ab1f2449a73662bc6d79d015da21b374d27c58590eb8a21575265ec48751a41ad09dabbcf7a827eb88550634454914eb573768fb1c588e2dbbe0dc400cb9b7235a5a32e9b9afd45770b298d47333f20026169e28a93291310bc75091927115ef7fef61740c0ba4c9ecffc09c444801e9e1a4bfe1ff09bb88c2177d5d1f9025eb3b29acf855d031f96e759b66c618225a4ea1adf258640570dae69b32be46445ec6de9b1fa68afbbd5258dbc11b92f2abfa3f9d2b51ca2f8cd07890bf6cc43c34a0539096f62f2fe9bdc1deb2d5e1f87acd140279524a3bc460328e80c8d27364a9f214c75370519e83df08f7998917f79d96b94abb2fc490fca76a9e60dbf3dc39d922ccfad70692c321d5facff501f128ebcbe2840f22bc3c7926aa6958f2508a6b1dd040d0f3a507178da70b7c254712157fb57dfa7e0c81310cdb562e57831591277d21e1311b5d7c330571ff333baeafb5129aaca796295b98bddd99589bae8f9d2914ded0fbd3e9e3a43f47be2cb4107174f677e544d98e671de29f72d7caa486d634f5a267ac74b64e337953a59d7ccf68e4e23cc441e0435cb76a671fee1323a5ba0146c6f61d5bd38d11cb3b8d3049e6a1411ed0c6b3bc78ca2ad9d9d6c2a748f23386d1098048e4441a0ef61d74f7c6632ce292b755ffbc362f9d20875f2b49f179f926076b64ae6b732279e462d189c9ff0327d1b67208523a0f606e8d51935a85da28395748819a60455b070e1f004c35c48438a9627fda164ae64be42361db8cb5878022e0cf522b9b9843c43dbe98adf634440cb5ed73eef1ab866c82bb97064145017a7847acb4ae2911765b3383fbdddbcc492a1b0b071a87ffb4be18a3cd97452291e4f9a21ddfdf96986a7130d430c0ba77e832c12cdae7b232f8ff964db25c949d62f9fa6a36b3ed19818578c79a140bd5bac9ad01ace2626267193e7b836c25b5ebb302334e0819d49637bd38e8a292d9110147e4408c17e7231e9ad94242fd373cdc56d57d8f812ee01903b23aa76ab3229d6ed87887579bad3a78f05b07368e00fafac090ef3c205235b0f99c1ff521741a074e40ab6076b6b400468fa25284a01e566388fbab2ea7bce2b639eac1b331234fd09749d252e2e966f0e6f1934a5aa09e626369d46e5e595ec87a40886f6dfc084fac3edf786cb001902727c0234feb5827e048e989b8c8e7e7d9f3ba45865f3de2dd3eec9e375192615cfbe22bbb8c7ca6c1fee7e79160f4c1ade798a94ce3e2918bc796c41885049d77c27a404a0f086e66e08ef343b669526972907506e097fe67c8ac09a92f2706d3b5b7272378e876562b567f16375e3114254e75d8715813333d5af88bc31b8283f6e6349bb576022bd01e948b721806670c0b8e047cf8c31d72fe5a2816cbacbece20a444bd8ed4f1b5d3d82aebaaf5518d2eed1d6706c590e4ea072e7aac56ff1afc6a5dc8cb3c10b9c5fe35ef1ca1536b895d2073bc1a05da60f4e69908dcaec18abcfbf6aead3c52e10ba469525da02d7206c698f640c1ff2f18bb79f4cf546839eac26e2d19636a16da370aa2bedab7cc592f71402ef1aeb0661af85312536964dacc4efc53efb9e40827611649dac887f43092e2785dab24fd51af78cd3c2a85437701ab058a950b4fb803a3fc18d84646d24f2df61feaaf10855aa7c9e98cfd820808b8aed2c81d302c51a983ea7c685659e314bd43b931d8de1a9618ad510d0d850b7f0bd15b71664ab0a92c43a01f4cff52887cbad9de2a311b7cc63fbb31f6ee7bfbd23db3e1cb608665d6b7851bfd9391f78f2751024af17cba09849277d6b51d460ef565872a439dfaef3388a1c86b9d27b4701b853f76094ec08e917cd1c4d83fa7c3a7ab7a5932441c3c8d334970854dfa8a626787ede20c6a8fca8666fc039339c10cb35267968e7621b5f293616237ce2adaae199b89f9629dca218805e544dedcc5480ca11a2592ccb634ad5a9f347fdc13caf051da1cd54c3c46a724f31cfaf1931a6c6cea174b062403fafcdc13faa9b0106f37540d1a19f2976a06d79d95de0c944104350f4bcab98fe903eeb97540f6580ff33e74c4d5b0ef8d84d8661b0d638ac5959360188b3be336cd1866efad9b20107c2580bad4973dbf3d1c9de909ea442f1eb947ed1d810fb864fcf0502227ddbd5daecfe8a9fd5716e5d3b617c1451659fb0441cbc479f9af4ee103e3e091108c3d1677841ff0b94b55f3e83ce523f50e6b59cf0d3b87bb58af0621916c1fafe200676bac7672316b7fdae5835670f7cc33d8f304886102682edab7f0e663ad15a7688f5e5174e9f459563a9d1347f66875f60f4fc1e837acefc19ab18e7506d67a6083ca248d2c5d0836ea022a91a8759701c841fe8716d4a7c4be4219f0542268b06ffe26084002dbe443b3b76e05906eb266e38aa0e934683256223a2a5dc51f065f7ba4848e506ea62e35c0713d5119e132bf6a9c18f122cfd5a9257b2092150748010435d3365a29fde4e657c6b24d5bf390aff407f50b8a64b47ae310350ff272959e52f3263568e5b3a337d1b1e93d6d7a5594b34c60d0ec70dadb13441bf37190b727992f39dc4f45c99869f92ad9b8e00303833c1bd88ab0c9a50f7ff89249a41abc035a6cd99450c024618bbeb3c19dc4cdc10e2a51ae43312154c74aecfa971e2d5041e2d3e4fea53ad4b9bdaa6c1d022181b96cf8b12fc899d28b36bad9005eb12bbe96845573159548bbe03381d36deb6dd3392596771c3a452ce6e5a10041c5788088e0a3a7f8a44e599b39c1353e01cf2dcbe227e12a2a80ae06606b9adb679224272e52f0f6d1937efc426166ace8ae02a3cc1e659b038b101cc59bb274617d22c650e45e8bcd05d543e2c6a6b1297b64ede535513ad3b9a11f1c8ac686a5ce68a7e5ece5a207a91acacdc717a4b57a55e2211b0a78bd11542edfd694b2c7a92c61321f81753d2f87f5d73cf5fe2d90adc8620cd3d6112364cc7cd8ef64a0cda7b07473c0d2deb3dfd3f2618befa95ff0247465e4f02b2e3194397608c30fc8c7df043b9f93eb6aaac479512a8bd6c7e85d1f2a429a01dbc4b76ea0e56b7e785b41a4582bd5d4ff5c7e4fb73b44a02a7dd64600290f030cd22c5d74cd6eb58507990351618cc76a11f65faed72a5012572775aedcccb5fe725aa5efd52103066f0b667daa60f7e06fb14180ce4419cad5b117b1ca1cf64349b292e8fcc7e8ed4cee26a47b0bcb5a0db573f0f1b8e0167e4256300ce60b65b2992a6d5b461fbf4cfbaad67def24681df24b7e049e0955f1bdb7cdab9ae4f9c77f5a01dba9a4805aee398cc40acd5ff53974e293357f0718f8429dc22d413862b41873d41444a9d4c4830f292234b9a88563670c36b4ba8a11d039ade574a307ddfde7cba75a52f6f22e79b33d7ad7a5221347f6c7f021cc9cc4c79f334cfacc94f308f25fc24267385cd8713068afa77d2b97fda057c61a27ae34576839fc849c2357523f3cd713c7d1288b5017fb21ff73ad5ba71fb86d224848469abc64035265b0c2654857659137f2abda9fd03f8c9340ef88d24590526d6322a714308482099707f8273e4c3d99da2d377d75c3c79610f6d1343fea9af4cd0b9e9de606b52aaf71de2d556dff51f5ea4466a9730e6f7a5eff3a053ee7afed7dd74fecd1b7d0ef537bba94cd2267caaee575b5742372e93abb2d8d9e8de867bb479d442c7527bbd820fbb14aaaf5067b3cae4a560fc736fb5779c6a5db267d2e545e3ab652de8cccb72d4fe4c0defa02efb276473a0ace81fab5ac8819627e747afb49cdee626a888ea61cac19515e52d7fb39eb1a99a90adc5b3c8e138f7cfd1014cf0ab6146463511283c8dd274b7a01a6dd670cc224ccfa160540e07d66f9ea9e9804f88b394dac8b84335ffbf2e59637fb385b3b9b8529a6392a3de4a1048f768652d054f7a058102f690b4a7ade73180f10d9ffd73e716f2ba63a241ad9a223f4b40bc71f5c8230b6c63a6a20993c53c2d749e30d3c6f62eb7f3d9292e378bf0e9400ac7fc5ec25716bff229f9566a742d52f9fb1fb965c5e7ce0e95d2f580827542eaed66608a068c35ab6abe154f520fdd08cb9efdde3f74a1ede29c681c2423c25ce348c1b5d666e004f9a164e6ca4ae6b0566673e62810733e6e65affe3e6a730fb4ba74bdb511d1cb76f8a1024b93fb869a9e3893e471db59221c95bd9aa3cf537b83b78a042bf0ca313b7572366ea772fa3d1d4ddee6a4724109f6cd14a33f9b8df60e207105d9dcb581b4571bbcb3e035c9bdd9b3d7b1f9f85cd33e1ac5874bd57f0defbac43805c0b9bcdd5e8bcaee79710451624e7ed948476d3d836b0b699e89dfbc38ecc9982d7c04e258844da3198e00e488e880efbf6010a377be60d7b0a18d385f254760e351bffbbd352e4774451029d4cf73a874fe3b8827644da00af8ca8b0647b795d21e289b5fe7f8f46fa9d9760580776bb58b1f9d62978ef032fb88daa2bcda3cd086fd65e9e686c157ffd720625e2ed2ad1b119e162ce59c9e907fa03c994fb51bc691eb7c2fd0a306f0b38e22d6026b061ea8d9c0f778e071129d60c6f1bd7bf40977db8ceb79fb62ef5c565b74efebac9d882d3731140ad7a3e1fbe964f84a18110e164d1255444dfa8fa66b6a1329f6236136001a469a14db17b4f629618ec905dacda21d572d39d97ff9be78eebcc652518aa904f5c07db349cf6dcec6e4809aad95cabc7fb96e671f1544a94a03885c07eaac25c3b396191854519d150194f4747018611ea407595d4b456ca6df6aadd1852059eb653861c9a3bdc27ac08d89f61d9f9e61eb5f19113b96003ee3d8b80699dcd8ffcafc761e2783f0ef373273f2d990ac48da6e4354baa94c9b93a7d006530ff434495f6db0b98199956c32f43b251216875663e99d5fdde9aed212df74d4109c162b680cb3a343b6e78cfc0b2e1b56e5a4f67201e51d05dbb7507895c24e77600cd61a1a73447ff60f00f2171054a0e3ebe84bbb222574adbef5c4c4dedf8a7089320a76833b5e5f24a1d782ef8a11e4a87f6ce64f77610970a89704ebe39f7a64b61892efdafeb2fee4996d54cb419774777da5d3eb452b9c95e22a427c821b485180daa224bff71a0d0ae6774eecd4b1173bf3fff33c5e9ebd77308f9196024fac7e9aeddeb907de90445907a57901bca33aeee5e4097de15bdcb089d97093c42916e6eec8c7556b209efafa5630461e68a69935de629c8f297a60505bc317d9758e6150ddd4edf6e836e16f6640981e1c37597787b785083988a309b82d527920c2d7ff70438ca2a579e9e7f3f1f0ab71b168d89fd238b18267b706aff45646a2b2302805c2ee341184f7df69b4ad2ffbb55bc9da075a24de58e42a01706e9e7044fee074b50a05119f6e40f79f56d0ddbe470cb943ed31f26845bf5c6e8fee6d4eb99306ca2611cbf455e512b2c1b84a17eb0dc7ec843de3ed24a2f2ba283df916eedd2cf43636989adb2dcf2ecae7e11d1ac4e56f1c3b5df3bc0782abd53df709517f0d3ca3796035b4bb314b8850dfd1481e91a89f51284c9eb73e437e37b9c033ca0f52e100672ebc0e57b7fffa527a6e6e3f335acb0c721d1b78c65ca5249f106cefdc84798bd4494856a9aa2f41d48c6e505da6b92885022635f12738ef13258dd5227095729749370ed956cd7e10f9a7561100df7ed5ee5f9bc4b0c3de29ea862781bcd2233e3b0ab294a330f7e0fd5499b2f015221565474bffe9c5077cf181a4ac48eb2ff8e6ac917184a980d92d0aa1da2d2785b88e01e5605a75cabb96e82ded59a01c62fecfe7f0f4bf60a56796a1a1d3f74418a258bbdc70c53c2a8599198aa1849d62e15dce0d434c2df9d7fe126c56d5ba081e3e2c3c3c19edff08c151f4af4127009864cb8ea230ea8f80c0f354ab13a28d488b1d538d276af6a891602d341d07e90bd2476fbd57fdcc1f3c2befe055584f62170bafd6187d3a6ef9676b699f95e4f67366426c8b1f4319418c9650f1f2db1a84b57a553afdd93410400eeb8744d00b3df640f905ed4adcb3abe900d1ad3198c885a5c13fbb7b1ac9bfc8a5e792a3670042b561745dcbd96fe1708288a0ad7410d030aac66dd9dd6617937a30702b4a2f54b224403bc06471d57e669776cfd78c8ff919f1a10fe4bdfa5a1681aa713a284e19342811b7cda13d2b52f40da7d163b974dfb5fe762b427c76847f393315b22de91e9f7350f4d3624311f6a30130f6e0efbae3f65d7e50ed69c6cb9617107b06e495e3d8990711e46ab1f0ecdd41f07575eef713f47025cd1296ff6c37dcbe0a1613b40c03e1237b3602fe61bd2f45c1027ef246a825f4060058fddd03247a86e4a675d57db14b1bd1e882bd09ebf2e37bd98fca97922bdaf66a256b5fb9de7c940c259bd3b50381b84c9dc0a18ec72924b4d326517e6412504d2982bc30a9ccc3197f8abf768d38df874b0dee53f9d1043d25e892fbe323b6134ba1b1ccc559286b01d2284d9c33526632b2f7df18e64e22b8b897e4e135febb16b5bef96a95f2454d39b285d97f9a83097e1bc0dc59608b18bd35188e2b02affcc536e7120bd39c573208d0f594298264235a1fe3c9826b03ff8b2e41a23ee02048f3eacac94338fe00f18f15426308666d24be5f7d7ef306fe428604b576c3146182627bf79f91193ce2e86d0b5a5278b8cd4f9132ce754f77078dcfa11b659953c6eea6667c0ecbe194f7d1317543c6b2e5d9fdf38f6f9fb46bb0d08cf7530c5cb8429f540e8a62fcbb5b00efabb61b59c734687cc96c65f6567f8e8bb729b05436acbfdd7b54d638c3c10c947624c9c4e0bd81d2a0c9d3d8c41d7b9e0fce351cdd1f759e48ea29427955b169e8c618539851bcb705b100beb842887ef99f0ee67be973425df6c2bef9db39ad8d4436b34c0bb962ea6ad4c0f0a6daeb45567268397f31d07d311222aeef64741fe3f3cdb271ce1ca3e0939df6e01d29671d5e4647e5c33a74fa05396c847bc1f850670611de83d6ddcaa541657e1989cac3b72f2fdac06c3b53758f7d0a201958adda4831f3e21904d01bb2c39f6e9cb5ddbda2cea0b3fef87189d5c5ff4fbad7dc35a172df30c44403d63eabca475ed8366c54be45a1f5e12817d7d50280cb369c6b68596aea503427993047d14b89b87ad6a7c01247182fb714305f0afacd6d2afb76d625abe2ce59ed0d3ef7ae8f6e53777a6011871ad815bdd873ef47d428074ffade786228a253f12957f28e43f66e00faa260de6b241da0d6874138ce250d22987a4f0b7029631e951e3b5397ca70e1c963c09effec8097e6cdc72839bd4f34cbd186fdd812a17fadf29979a33eed6efa3fd20e30f55dc6c2333f45f83775ef10ff9035ae3a257a9aa7d1183d3f9144de9fa296affa704115d01cc6243c0d3e314b66d248fc8560a48c6779443522f235e1d7513094b293e4de2becb91a9543d668685afbdf4281347d03f152092555ec762d5acb1761035d3c00b1f3ce73c640c4fe6fb3989bda6e9e1593d8fdd0dfce1a33124645f53b2e97f55f9932166c22dae165e5c244231de76d2c60cd186cd1e5b958f6b69198d8d5208d209fea4553b4d6a0c88285c0da2a902c36602b48df30b2931e9f8462f2febe80c203a3f8aaf00d8bb230bc0f0c0137844c23ad670f29e8e48f8a6751af5a1a16b1761f78279bbff5edc80043eb24dbe9c3bbbfe8e97aa995c30abbbc84ebe88ec9c81a8b84a5c472b1c7f4071cc46bed4fe6f0ae229655899333e8486f301482ded6e0ffd54da9bc03251950fa2f8b91536bed8058943473a91ef4d524fb43b5b4505ca69d2ad1d27a30d49828d04bd34704fd8a7139c66a9e252c3ca88790f83a261455fdb55af37ae2fe151f93fd103c859b6f37ca7334fb72f9ed919828a1e8db1c9b15e85a884b62fb1ee73405d131ff65df9ee83969ed1fe6190951c67ff650f0dab10c4b4485924223e07021fd59cfeb4066d176d566786ec104016ac3fbe97e9e13131189ce3f0cf57724f79b1a2f794efeec2caa0f584e346b8c7e09a6d0699b21cb201199e8dbfb8fa52f92b432a26f7137d63e6e370b2190ced9aef5b0ed6644adfbff9b43461875f163e4616e0ce516900117357ad31c44e23da291bc1a9a20a91290f8357e7547bd2d92bbb78ee5d2051c47277d5744024c2e467b1996732f2952359594a12c53ae055b8c149d516ced4da83a83aa33be22bbc04963b41f9b91d58fa4903b350e93ec60f0a4bc0a2bd9f4c6c6db12fbb810073139797c95cc76969eca180ca8de20e702bccf575be0b11798a6d89f16631f6c569bb3a560117940a480bde960f5f04af24c8207cb36f070e4f418f0325ea1ba9e73f0a7e5aa75500064193b3220eae7d8cc09347aa9cea80ad4f44d280ee6e1854e604d7f705d9b7ac77ebcef9f396bccba8e35134a01c418260ec477c7d75e3c50895e1775fc9e84f993d46f8044fee46fa2a6d19870cc2cd10bf679b331c75843f92364dad083d9a7e652d40d987339aafce1f33b2bb562129e6be6d11eb017e1512cba2a9ea93cacea85f62cd0d5446d3cc46542159f399b6b2f76cea33a71e81e1a77fd7e468aa0cc2e202e35fc48d0736400c450721082132e1fa97b58d91308870a3bb6dc718c38fc3492015585b57783d313874c3e1e4738199f560f1ee2ece0547052c080e47b0cc283a88fc1d2e5d94e20d99191ab23eb2551923df71e431f74197b7aa8cf22e5c43ccc32d2688b5e44b3cdbf5a4ae998cc92fef2835ebbe3169fba05cc8dfe520260623bd5f170fb324dc3c9c7dab9e43a3c0078bae54bf5809ec8e6beb0fc7590d77cf3b22f7a72b74680adb67f4856e6c411a3e120beb4f54240a197497294ff2019170ed403b78574e563336a1044390150fdc4a731f1d4b5dbe060476b566a11e55f291d51ac78953aa460d45b402a3439a4259e7965602405913968ca4b8f8349e11076363a3e456072a6807191f577ada68a04a2e7fd5950d9fb567908a4a86f8957b3a0fc75a07adc15e11188083cce82fc5dea3666fae7c35fe3f3144d21a4dc0d0b161e71cd2487f6b4088ef3a151525c22810571cec5cacbb560ecd15491af608e4571d0d651999645975fea61ef8c78eb6391cc8af3a6a31efd8d23bc32ab24549eadc861e57f0aa454c6c0507957ecde48f20ce861da992f340074aeae0ae3aabaf9e5a18f0bc10983486c8a420672defbaf8d6d0b616e80e65481f3916f983b34e9853bd77533d9a9d98de4320cacb89bb1f07b9115fddd60ef79dcf21f37087d2a788cccd995480c51702e5737a7c56aa67e794bea67aded2c067c3b46f95d87416a7b1c297b78fa34b3cb7f92324c53895637a0ef564b0b50ac46444e5124f475ee0d44429355414d7a7ed8b51c769645d8ef9011be41c6ffae86e2577b392332011ce9b16f03185c839419eaffb47bd5f351c22b77d24ed7ca91e9562f11c53cdb90f7e6557a7f5231fdff5dd0aece71305d8640541c8043c871507bb9d2baab044a89ab95b37b9a11505a9b97dc0061471a715b53f9325ad46e45b8ab11f39c13c1fd9eb21736772d577f1e058d6893ebfb68c70a43de731edaf37acd45a6bb6a964f7fcb5514020098f69e6e0fae52cb9692c5c2461a2e9faf49e68850fced6e04a33cd1741d4687aefc2d2c928cfc3f65da90413763d215cf923bafc3110344f10fc9f4c907b80c7510fce07006d1bebc8ca720432d604a17e224bd342b8a9076434fdc3e5753db81b476ebd7f97e551f2216793c341babe7f5140df39133f60a63571d61d93e888bbbfbb4fe73acda5db8931f6619adcc461d955eb57778a3cacbd228605bf111a1ade6c4f6e10b5aaf293ecb8ac5b726859088ff5c0fc728d73f628ff11f1740893ef5d1da6bee6b3edac04f421c4c2a54c53517a1a52c31444491940244c2796e0142a24674da421c4f43104e192b0e256f94771f4bc6a07c5b14d1ffe0ac75899635e2d920de67ce87ba566dc6d959a189e060d6534cf1b4a20d9e1b6537bd78b06519d2fe99244d708bec3063cc2065ffa9aed6a9d060069950bc73a98f832f256d243b42eb46cd3c8ee1ddbd278d47a7e8ecdccfaf6ea307c5481645e2669babca22c681254d7c991c09722dd33ed500e9ec0f723c7523dbcfd5f7847ed036bb042a7383b385038be8f789423b040118a7cec34ff6b30cb6f95f478d19f43d3d4ddbdee48dfdef59c5f9d9617b232afabd1df1575d8f436008007c8d77c5292bb822bd764ac92f64cd99b128ba2742c370d7e62b04933959bcafa60b4d728926858b8aea902b6e21b1ed4d8e945512e9779eb5e0a3e121a3790be1b344329f029a6fdd7ca747d4c2bb2b233de734583a82099c7eb354a2e65ba712f9879630953bfea29ad32e0cb4fb1513e86f1b98b75e3cd35d5999ae909169f2009e38ac161d5f233d8aeea23268e6a6a0d5cc2e72f6d8d3cbc37de85e4b79bc9a90ef7cf1965ac3e73214aadbf797292e061b77435344be1cd79d351c3f6de84ebfea3798de242f954b74c178502df356786c93599ebe22c84e15cd815fd666e93e4a61d0bbbbf82d91e838864f8bf322685e9510de3eea9954e68438cc3e8d52d961f07bb762d88266e749a76929c073fdb08e999c954f8b15f8c30b8cb01e8e91f6631bff4f2b343cac273669cd31adfd44a32b98d0d62bc031d68622636f2b6c1665d96ab6ea8e357057fbb1337338cab198094aa6b74b98a88a2c6119eb41f23fe868ef6b02850ff352b3d7dc23258499eaaa251464515469eed46c530e541a4d7e404d3f686d969e74e92c8b0dc2794a48fcd77d767b02ef10c0c18f319b072ed68c75f3fe251cb35e267acae0982ef7a49c143802fedc51cc968bb8cadaa7dda08437f48b28531307eb8480f83df77f2ae0a58f81e15c76ee30237034a2d51124679e391d68fa2ae9b87e3ab58f35fe5255af67fb1732bd2aa90376081b8c4dba96d625937484bbe473acb240c3050c8eccf918ef4cc333ddbec7c789b654c704682b9592e43fde2f6526fb02c844be9d24c67b92721050dcbb69fd1f05d29238693bd856461bbd095be0bf0564bd6f0ab24100102cec31ac6837b704b03be96ec03dab7714aee28041c5a7df977146d31543d0b8268633e7be684bbde19adfea1b0592c3cb36884ea3e49eb74854b2a784f09c72d064bd0da998113825ab634a652eafa9eac4ef720a7702053b46e5b34411166e8a0a12bdd7e344bf5cd2e8c408b411a171234b84e2568e9c56a4f6513d5351cb5142c838f782fd9eea553b5ad007ba71ddf32880ac07ef0b3c284ab6d8a612812fefc08c7af2700003e33b71816692834a2dddd024e5325465a3f1356321baa2f0e7bd1599c3e6369f35cc0a1a2ccfe1a8d2633b7866d7e0fa045e999251af0b837890a8f81bc53738d23c9a969bf84e4903413e210b67fb326b3758188f1e62953a9e26977b74a7394e9007a72bd7b5bb18ad5ceb7df9123fc0e0a41b74ad29cc21cd56cf0150be217e8e9844b8087a21d187d60195100aec43cbc474a4f8aa7e66be50c68d02511aed85bea5f4621b30e95564bf8f9828b6ebd6de66bf048539b215ddd655423cf0fb6c51d463ba6da4ea744cb0401276845cfe83648b79c375455b525d6bac4a79d7d253f59e50f86d2ae4540d1ce51ca4a2e0f98a9b2190969f1e2e8f8a68d86ce1346d2c853fa2d4f2da4473876a9d8a497ab08cf08cdcec2b4b6b5ca080bfcff5f6d7ed93b6af8393abe81c2e9cd1b7dd3559a17e6c58d75c40d0f9d50cf7c38f5f9c1b336ac980c6d5e02b008d00b325e0484b403eaadf4d777c6d93aa4a8415eb17daf4d76197435c934a6b16c7ecbe52c96c54cd5ab0f3221d2a4a7eb9aee55f74069e2446f4bef6d7ee42f41c85f7bf58dee568731cd0ecabfbe7f95076c41cd3e2e3171138643e0dacc9a4a85b7c1d52b14590290825646e83ef3db294491ac2a792d6945a9f03ad8fbe1c7f2fbd270573e9d25a70bd7f5c0c37175a35e5224c2b3fb4cab3e7373b72b7eecf3b3ce401e99c2b1bd54937aaea8d08b0216e34a983d88c5ead23460472b61f0cdb031a98a6e06f636bb71420a3f48efc15f1220194581d6a59c4d25cfdf30e6b6b0bbb3a50e79ff0df8a012a6408a50f5301c516c9c9539bc323d3e57b8487514a0c7f87a5f32b0c0b01bf07662288c0318bf9fc873b55784a6cba205face2c72c77184e889e3315d27286b8e0ad61313a27dd88638ef25d725d339e9a90d75fae25b0f906cd72c0ec2cac55e23ecd0fcdb4c213e0c3b33330904f31c3dd8306a67ebf42f4a44d94ab776844897f2c32d32f5c53be6368fdfa06e85fbc4fb72601c01a3a8f08854182d38897bc70de5abd5ae7fe91c03bd83304b327182b3d2730bfe0569623ceea0959c381efec272b0ce9daf9b5b7a3dd2cf00d00fb828a72a3fdd20589ca0ec98f8a5b6b2e19d22d269b9597e8402a33093dd5beae8ea65eb2c6d660129060d4126d5ddd43292f85b34201fcd6632103b3a4ba8660ab246a2e0bd2821475431c542e87ce0f1495d7baad8f0df244980ae9931150603161b39d3fa2711cb0d9dcbbfd1ecf4e44af941676eb75ba0a5a22379cbabdf11e62a68aa2db815bafcd6cc33b5208824d9203ec7cdb161d511ea43c8c0aae04d86080989ca14ac7c27231fe33b4bb712056e3475e58689cc46c43c2ccadbd088f992993130068c4aebd6d06cf2adfe4ad3e5d9656a27b39626de9cb3b9114feca48fa816b2725682a7ae1e7efc71a869047e9d5db42d1e8803f42b9baf3afd2c5fd05146a303e3ccdaeaa7bb3a4d65c54437974b635be98453c689c00c9eb57cb688beec890a1aa4ce5fa5163e3e6bc45ebfc966d984f14a28af162d03ecf73875abdde130666e82d82280f7fce7d0ad41eb634b1fe9e4a943c05dbd807d7b1069081ffc9ffe2fe80749036c0c2e29f43c3617c5a3c0e7103fe5f87e6106de4b8d11f74afa9585a4240a592700c6e9e7a9bd637571b244f7502431479725049ed3e16f0a6fd8d4808950b6289eb0a0112b37da16096fd732596641509cfb14de715a50c00dd4046d26765195bf2155da0441b60e3b316f23e3ddea25fae920b5d525eb18c634f188920d9e33753f8b4afe4833c2bada9cabd7b1baa9a6a14616207ff05ab1044b4f8ce7e457ae25e5b67bcddc9a9f8b70c1a9fe5d07ecb45ab331a41d0909cadccbf3702899b3d376b8cef98dab4d9dde8694031008adc5a5a2b8608561ecc35a198223123859ec1688d019242e12eacda0ef63e9b51f2cb1310cbece381c054659f52325f73de687712ebe870fdcc0d348086a3fb8a63145997291afaab6d90aace61226b90dc85f2709707c16ab53a0b743c228a274c813483b1edf8e06310fc5ed856632dc5dfffe2f5d9d91ebd5b27e22f3da2689121c5cf5c5c7d0ef900ac0ec24e525eacf3793a4dc11277ed86ee76927f38310bb395aa5a087d83ea4ab1798eb3706a803581bcb5aafa66b6049d9bdd373235f202af045c96a14ea0d145831c49e0e34c40f5a26d78f36c621395c6b4e4605512cfbf928155b2c2cbaa6134e85e616e022d9fb5a3378c3b62e31fe29b0813e29e045a4e507acd90546983a13933ba6920f7646cafa1c04b85cdaafa8adcbc7412bd3c0298c328578211ab299118f327e95266b23a0c0907de27d3912b62f15a7143c477c683d9eb03df9fde55967a3e83418d34c3de05ab3fa78347017b0d865bfc0a6e6a163f9b76de4d7f9aa970838dd8ce5d8265e9caa4341441849ebf1d92adeb0d7252a0c25dbb11f25a4d80e2d183ba991f417b9ff17faeb4ebacfcbf71ce018c12ee1f1bec57b587c515caae99f7fdafef960e09d35048c5aaae6f3d0791bb0928d78da3ed5ba3f6f7bf5b4628315054e8c117d91328043cbcdbf855210efbbb2250acf03f5b1c7ae153fa6b553be7646dd5524af1452e9316d11d2fdb41d6ce91821884ee2481195888d70fb60c4822ce1e8f8d193467cb24b794a8411cdb328f8506a4eb137632417cde7aabf91462fcb3004e35bd5e4629be858ee0458d9a22391d56c4d76c6914caf14216f246e62736b58bd616ad53985dc703e71eb9388dd7ffd2f5e7a72f6e2a0804374b770974da629b1920b56ed6ebb6003382c36bdff52c64971d21070dd198d9315919e0839d586478374504886c074c38d072021f8b62fe2294ddf4344ee6965454994d3de7e022495bcf84380ac5b7482f475448f9e664eb3e5bb08f77c2210d20cc38ac5435ae515d7d4e56d4593ff7dec57ba2c66841c03ae2a304f4f77a863222876f8f3db65831b61d92ad8aba882b667995ece780f88679bd0c328d4e6e8d674dfa751ea8c2055a8f5c1b7a7ae9ff8dcc9324ebbe5ec3377e99891ae6329e11aca2aa9123643fdd5ddb19f2811d060852218cd6db9e9c2aef4f8954de1421782701f5623e8aea0e1d320a41fb094dc12a6d97f05ba6e049999fa3508ab542536c12d057c4eeeb945afd64dd4ef7f4d484554406529ab8675a2187e75be2b756020dfd00b7a2f2747a4417f0218a8cbb1de1f2e05421b1b1c7cd95cc2b1cb15bf1b96f9394ed4c5b5725ef481e28589c73aed41483c5ec8432ce5d9332547e371366920f73b0a9579824f529f7646f578bc0148eba23da348a05bad6e43c2a42446a8a8f927e7d68415f2975bf5456da21a44235845561c8cfe08af7dd98741c6f8559519286e3deb35bc6a14d913b4645abc013edca9475b8817c699837b4a7418123cfc981e9e2b3b235be85576039909fa27bf3eaed70d84a899702ca383b35ee2fe85181f9999c577fd5c21f28d8fb5073202f30a0f0932a3f2276ab3315fdfd2b08791f752191b09711a69a83f0ed4c0e28f9d6fd02daa3c0fc8fdbe130723cbd084d94e28c37530a18a81c5496fe70b7f2bc6471b882bcf0b43938f01799ee47323e77e0948a81c8be33a1dfda9adb2c68f1da9ee1c9af0ee3b1e331716977267d61c1c22e4d1736149a054c411db5b29204c597e6f06d170b823ec90d6d6f0899a85b24609d9749609f22ff908870ee95316d7791c29df5ceaabdcbf55b72e2365c7430de5c4877cd11bb51573f7d12ad00b0c99495b0dfc6402594a46a997e9aac263964c80d1848ae0c9b287c24101a89edc0dc72e788252e8c0edefb917f438f6a5c4faf8e9896583806f907ee9ebdb1a84bb28af5f357795e6fd3343890f7eb346291ecda36a76d10753e770912db36ba9798686c9fb36f5cbc8af588f4427e5bc9418d34332f1f2f2ff89533370594d4a704000481a80f293000eea80504209231975edbc3b95bd3a45fd3b734b06db0c02dea50ad9941dbbf90452f3091dd0228ad8e764c60c182ec9669b221ce8546e5603bf2a382c508701e2348178108ab83e53ecffd915b4f36dce244862ab2c706af287367308edcc26d2752f594892703574c76e53842d4856ef7337577836d42052879ff7ce289cf334f2571f4f9de2b20a3fb4ad6614ab3dc9a7f4201c1cf42380685f5e47ab76d7fda4feda6c28203f2899df687b5e2033679456e2f0990ee8e98872aadecd4f6cb0ce911d0fde1ae03e26dd63386d124dd94ccd9c1f8dbd52b60c1e29553b7fc2549f41a398ccff7a5c6f64649ca7ef1a9a2775b93fe071b599078422f1791b06bed45447d0484f537e1dbefbbfa4cd30b011dbe39f95f8d4365eb4f218bbf2e023cfa312775202d8435dccb1ea0ca9a020fb01733978d5cc3e5872c004c1c1c31b9d83400c0df8251531fca26a3bdae34d68137138816c0d25798139dd7442754b21a4b2f0e3aeadb9c93f893d61c3032fd02f9d793d18a7db6e07d016c411e6fe71c29d89a45d304861dc77fda2701de42869a84f05fe177cb820643046ef26e4e44ca9b7731a00cc0bd4f10d633f6a2df7e35d5697e813dde2a57f561140382bf1da79f5b9ba4a5f20d7e3dd02caf8710d8f9d74f1449326142ebe8e95625d240fb711bae9310effae12b76e76eff0427ef16cc03e15f5284971a75214915fceb20741427dd150e6ef177d7036449912f48ea0f5bd33844b5955bed4980fc8ab1395f320721487f299c0aaa272abbc8888846429abfd377a45d9aae63837d7179b2f78b4acf1188eb2230038cea7178758016f54b67a66bd4865b9b00574d6348842a1830af4b51422c15734a0774817d9615286afc79cc14663a49211a01ecdf48257728759ab972563247b1c673cb06914889c67ff570b935e8b41526c50b6b26fbb0860956d24568a38fccd0abca33108e463f1fac39ff66ba9c5931e612be08820b1f576f924b18dcb9bd785842c4a8ab6ebd3fd1957fd8547fb1b3fdd9a04ed9a008f605929f33bdad8dd5aaa8cf1ebcf8f4ba37f13ecfefd8423adb192986d841624d3c2ee855b82948dd0518af1f211d777e1bc3433fa43f4b026d87db4e264a27be8d2c4d03cd08d156a9f09e34f5331738d7e9adee24ca7147102e7fb0bedc35eec9a297075dffc99c9b454bbcc7b5cc9703bac097b68f21e3176a57d6627d9307451c029cb1987363cc1d963c5f08b94c48f2532593697639d7cdd236e6b1e4b22128a79aad7e84ecc099bfa9633f249695ef9eda155e4b38416983b99d973727931b4d2061086a330f34a50cffa78e4598b77758aebcd5ef684cecabc82d3ef63184d7a27dce8a716053fc5921af2350571a9aeb272f6b3b81cb70863793b5fd85a61ac3dc378c0a5f3984db9418222c0364d3d02cd9021adea5aac608655bbbc2eaa532a560b1d1383c4dfdc281c54593b21014aad6b5e7e3d828121a72921a3f2fb9b9dded97aec9f82f2c202d586d29896afcfc4b11a3f19193efeb70efd41cc2c0de986d692016c01b539c77bbce192cf83a9e7a493d37118900e158f8e118eeee4460a407fe1b71025783e9a12eb3dd8c089fafa07442fefc249a48d3fcb1046051e2723f2c6d0531c5d16f1b783256b695fda6b4afdb9b4ffea6140ab0ece7e3bfac6c2f7c1e3fea9875baaacdb3fb2c3e0d0e26b0b15f0d4c87817ac666b0f2cc108c190196a7381f35d8ff119d0ab33f97b06ae31caa09891e6e5c986c4c6ac7cd9b3d4836278a95bb9de4c01bee6c439cc5b16e574c8caec28caaae9ce97adcbc3706b8267b6eb003fe4a62a88105b9364fd217e08338ab2c3b85670f66389b3f26e3b02015d20657050bdad2372be14bce59fa65bad7a228d1d203663aebc195c239212696d93dd0d2d4ee055315051573a1d59f829346b42b7f6705609f95694f0fa5d0f1ee4455b1feb97ae13446816ffb793e34dff88ead91f1a09ecbaa83dcd0d5b46c180129c395b2659731be036491a0bbfbf326b95cfd7392df6c6ca7cd18b22af9a006773ea1fa9dc41a6a45e7ed1fe1412614eeb98ef54634d7ff4e4b0591613ac2f2e154678d33b325b0dc6d9658d3ab6748c9bb46149335534e5b36e8fce133ad59c4f678f1a76d4f9bd18eb52801dc7d1f4455e5cd37c064e9ccf4ae5a32391bfbd9784df331f5e9b2c87727512a73953f577eb44f421801bbb68d2288bbe86177d5aa8530642320942ba7daa0bac227934d6e63805ac7d0512ce959644ecc26e4a4c7b7c284d8e9642654e587fdaa1f5941e976ee5d1c0e9573f5703da9c85a09f909afa5e41cfd055a9716029145bdf73a5f9d5e7ca3c76ef03b32fefad1e62c603a69381b008079f0d6131310754bce283c37c333e49ad032e35c70c28dfff18948e46b564f9c1ce14453f8942d53e5597b879b0f859a4fc4844fbc30539a88807f382891c99cc52d82ad895797489dedaa8fc3c6476fce99608a03e46f5148b177a15cdbceea48d9a639f0dfbf54282809d7f3a08cb5e2da500538f2aab44bae1d5fdbb37e42778f6c8c084c954b228d5eacd8e75a47cf1ba2fd370535624d9114ea2836fd061125c3a1bdf2e4e3eefb908753755fa6790f8e180a52237eb2f6752bb68888817342b9869e91f70c66eea56c6dd30aaa42a396aac30b412515eb9ef98299ef752758aada9236ac179c8dc22a939ae3667280b03e636ed713ffc7d5b74d0d44d3967bc6919a7a8433e3fe35911e9424587443d73a5f207fe8191edbc7e6004c18f827c2ac4c387ada2dcc5c87e76ebefb0695118868d5cfa79e645ec01db431456a060376fd79c42e38b22f5568a1cc69e709f5408e90ccfb3d7d2e297135e6d0357ecdce7ad11f87fcbee34c8050f2ddf65d82512669ed6dc7c81885c5a202c7a277de158259318f23b953210da6d46cf781789305c30e3fe89f6fb9c29c1444d07cc1789b63937fc14443d96ba8e631979e298402df1c8cf4625dc48e16fc55379c4e1e5ea5627c04dc7c90963fd8674882f25fbb034c78741dfefaba697317550b072b7df732836868842cd9268588bd754650d54ec9b9f6360f9021a55b7b853c78459b23d0bc04345592ef25aeb4cf29d67eafbb4eadcb21796b76f9d7ad1943302b3abdf37b00285e28eecc3f2e3be7e5707f020db58fc3ca2691f2fe5a81c1c5321183d0035f6206de2dd4b49139d5be05d374203649d787e5c22e154565d5be8050ca7c1e758491ba53dc08100a8059e9b275171fd8dbec0556df3ec0cef4bc064dee9fe98fcfa8b77d0531ccd42b9e127d2365d1ca33163738f04b1f8daa23c0749fc36ebe9dd4e21ad42ec538ad69c51c2b2cd7d621359cc09b42866fc75976c82b74bd602a633f63f1ded38c8a7bbfb1f2e0f7f7ea0c7f8a7baf95679911c71dfafbb71d8b30ae067492cc948d734b6f2a3049689f2d2dc8d22f37af2bbb167c0e56eba14364d67254623c174c224149180a7a33673609549ab6049e3ed97afa25d3df25347cb6da9c31ef71cc7bf14cb694ee3401f866765b388772b263f6232502abfe774be1f3e0c2e98773f18ab3e97b0bc29743a21ca09171fdded0ac85c2b1d50f3fb6c73a5aa82ab05d31b2ba9107bde5bcd5fd42ffa2b62e084466f6edce38a4a2b55b972adffed73f6a2e7ad01b623b2b449350563709fdfa376760f2a8776f4c4d51b7536c40b44adc498b07a7fe3bef83b55a09998a2a61042ca17c91ff67d5d44097ede6a9f5b1f398c6b3fadbaaef01b959c96df80298c4e316f442f9c667e91224a471e9c394f934398db16e79e52fa922d109df0ad1fabbc353eabb1bab0df5dbcabea2dd35d5f27c4162987208afe9cf5a1c4ce6fbe29abfd70bbe54f5bf9b60b3781b2cc7a1b8a17605e63e666bf8645033a59f3b476a745e44e3bf83383b3bf7085f970fea251a26b091bc9354ddf44b3f90215e818b9ee95627890cf0edd1a5803573a498c4bc5c04fe7165d0d63617fe977349b47639b62938aa0fc7a6da67f2f0958abf78cbee4e7e0a3690adc584fc0be43085613c85974a733475fa75819cfe1b9ce13cdfc246b68c1e0b725f041e6e50b9349fad42ea4553537b1ed0a3d94b9c7ea309400ef0769146110c05d007defec4008c1deb6af0990927aed3d0de3aba43536bfc2e9f4be588f9fcfc929b846ae4195b666e7d6b6be106f639a34b433b404f8dd0134260670c2fc8a2a89097bd21b154757f26eb9e9b7c83ffbb57b56927e8b2c874492232eaaa3924cedeac7e8e70fce7f757ce60d01ea25144c59adbaf08546c46f731eb3419ef1e131a92830cfbe9d7024ef84d4042682622985f2d2897dc87cd5df9306fb6f9e9020f83dd541808a3390a92c3674cdd24c011e81e9b37a3cf0aa1355698053849e06e663c42e439b721b9136cb153d1d084b8e85a80d902187921ac02aaf29ef12266da0c0a9aaf6cf8e9d953b7d55105d3cf06bfbb30431adb7b9ca2aa1de4ce0f2ad65bbf8aa04c07760a30f7c6ab718985ef31a094993a249c4b0d46f5290facfc2fe842ffaf4c3e1e09f6f3351301131881399f2abc4ef453aa230b51a11b28722e94b432bcbd69a83c2a8e5d9b60557d208cba33155215b4ee2c4de4e924149ff066f9598a717b9e3d1e619552220b7e3607a211d68a70db42fd777ce1cb8d4603a8a1566117e513c24e1358418b13c2b7fdf125da602c85e6d3cbb6cd924f66a463b0ca3cde68dd0ba68f35ca0e112445dfc3a9a5bd8144eed30721fed6906bdf93c0fb696886978359bab58c3661dcdcb6120f22227334ca7b32f1f8ef4cb161c43c144c4cb1d6f8184c83aa6dfc0effd29da2de54c976f2c11a781af02913e9c6ec0b63f6e24f0cb0314a06b2ddbda1d759bfc2b9d1714f4f42ff221b79d20f1ee599630413808d77c6468f65d45a6030bf9b436eb61383d0df6ea916a14655049a19504b175d5866dde0133138e869c77048e8b9322e8454f70ae2c20f6aef80c755bc8f48d2befe4565fe62dbf9a3d035de42030b29edefdf5dae486f27fd4c41ca0858be968b623a9d3ee723bda5e8e4f6684448893c5cbcbbe3c7d9694ad32303cf072c776db859e0197e1cf308aacb3414472a9b75352da1381a5598b571b8ae6e402520f2c403eb1519548424701bf0cf8099805294f080b69e9ff28882059b1edc34f6fa4944023e5a5c9c850eecd1819163c0adf8ecf5fce9f92287d56d8ad9a3b0ee78d0935f39bd4b16c5639637250b503c04ddf93da41c4de2d1d378073217df7b4fc74c8a2efc156a36587276d81d7e11c7d49a82f705393a691659c5ca6834c9d1899310dc2ee0d3ddd9c1f72b0cecd03ce2f15f41bab8e6241ba92d48f22c6c2bbca9cc6ee5347dcefb88c091c035eecc0f7e8e83e65b71e9265175df05af95dbe3f72ce4da705965a5f93b8453ae967373282022b4d768ee0e665d2d1b543ae4d8636f176f87746037d571df80bc113abbc973d410036ffd7d9cb6fdbf47549d41a715f263ea41cb92c38f18b0d6f047dadd6e90e2a0f2ed0a19a0aa436e5a63be5cc028c56b6568e206df897c25bb1355053e2a15e9e8bb66479e25eb4cdf76f3cb3555e88aeb8a73eb6f6c3d37a79ffec149259c7416f6b9d5ae2eebf6aa7dc592f644b93f0656c0b227e9c84a458b84bf7f749e18df1e10125b0389bb81e9817f163cc978849c8751d9b6174c51a5a15d7cec83fdf7a0a35b913942a4ce73fe279ae8a4e78b62b16dcca8d5350f6c3c926f7248d81046ce1c3a1b950a0a4a926854e84c0e48179e52ea7dcbd207f4c42376cb6b2c0c31ecc6a4953dc1eced1d57e3049fbb8a1ef3a016e14bb2e1330ff99028539b4601ed5b6bc6d20dab061e12b4b87739778095014b65058f4a7e490588668d376a081ef84c44c9079e58ecd596f6f6882c905cbf08a7d6dc457ec45d8405b48d3a7b40f914992ffe1966fae570178083863799a54348804007f9fee0eda3ca9825d0d0430fccc1ec530bf960dfa88ae74d757c6df8d8c5fb661bfba8f3ece9c64f77ce90f83752edeb0c4c793099a06d35f071f081898a30a005dd26ca3c502a7e8f65cc8a6a23d703be91487734c50ab9be8def7842616e32209aa377a30c0edefc68a53b671e35be005f21db84fc73eda7881582cd69e9b7a03ec9ee512a55d85a5e4ba6cb27094241ac0199a135f3936e7124cb434b26b83a5d96606f4a97864f2aa859532ca18796411e781f341c5c91055ea6059ab95847718e4285f9ca8cd3a7cd1ea15124bd71c92241ed9c722f9beaa8370518c87cd15f8a91d2c15f538eacc8aa352a5566c1899b5357ed303d758529495debd5aceaff777989f70d76055e3d4b11668cd469476acf26417327561e6c888669ff49c50effe66f8f4f21cf0e42f31622d40723c0cd2ab8b5a107ff062b7550728b167e3a39fd032e608cb12bedc697cef43c977ae511a0e919fee0508358b5ecc0bce0dfc0c0a90572b9fde49bdda59ac66e2b138fd75f8bef9efa6cc83520442f73e7fbda119ac963884ea9cbb44c2f84497ebbd09fe89f6a95f9cfac7b3d7c41fd58421ae71897faea243f5b6e13ef5613187763fbe470fd692be5b300fa496018070cbb4949a127f946efc88775416427453e98136b9516baff70b7ff059507b8905a3da7c7e0626f0d4e93f5e3904bc521a50509220b8c228d999ac46f1cb4e46c58e32612f344465683413bfb9436cd7c0ad38b2f7cece2a6fcea4c03c6d27dfcb7332ba09c331dac33b2df34407498e182e661e8a5ad662dd05850b333f262e05dfe0d79954936e6bf7eb9661ff13b8bd5dcb3eb7fb1b2289e65b33491750638528ef4878e4bd4813ffd3d1f3a89a0f93a1780ee296880c5b1666b137a68a53ad306be643df3db751ed0766a9b62bed92edc03c03d2457865a11e7be27c6321839f9d2197a42b90b1fa544f43eecbae682e7ef119fe5f8eaefcfd4d12e8e55b85668365997e7ea5a4c79537699509f12d63e3081b9aa9f0efc49dad96160acfe6ad2ad81c64c6d627835575ab32ae8c460378a2cf8ed18ed21c1cba4399ba647913f5cff5ce648b9b5c569e681b85be1b75943f61c99ee93106de969dbc02bc868215b764f4f88febb777093d6539e2f1eb3d424c52c9677fb69a0732f7eac124393cbbcd4d421068dfa2ae46a01edd25a97c8fa4424bbdc25f440a6b4406ddca0fb3fc7746951f4ed699ccc0a2903132f8860912d3378f91c9932f67458429534a6b1fc532a9cda7f66f10ad1e000f6281aedfe17ae4c363cda9268ffeb5d75d50ef11908cd322e5e03cffa92c429ea36f167a80df62080d3cbab27c9c08ee59f31cff7bb80ecf414b297251dbc8e2fb968181a23d3b17b5dce0de9fd1c84808034cbdff9c6d9b77af0e7c7d4af7dac1da6aa4338cbf7d5ec59fcb0f1a6d0d4fd1eeb2897d4bd8c61f7e3de1da656c87273c4caabf39c4e3818646b8037505347cbb6b8c2720bfdfa9098d156cb3683df98e40db8efaa03469eaaa58d0c92aba79e3d62cf1143ed1b57dd64c8b1daf3a09f90bc2e26970ac09a19dd4fc88a63947f1ac43b369a61da5dcb936f66327ade96b7a1eaed164dcbeed7118d6c47c1f8c7980da615e9e1668b6042d62e42ccd6265568558d8c7d317f26c1399c67a549c902879b236d613ad405f6ac2b98c79e0bb4f8ff83ca1219ef985f35cc29d970411a019fe5c934d8244d907499affe7c341b76492e7aa529cfaf939b8026152f15f6a10d073c5c379504bc3e2d1cdc8521d1c56edfe4e3954e71e8a4522d5cf76a329198aa49a22cadeb0e9638501944c54978c4893a18110b464adb8247bf10961559453a2fafff1c7ef56dc29a5705584340a804a5266231f9f67b8ef67c6eea0da22399d779d83f819e085707fe5ff84840236b877bfa9b3bff3b19ed503eafa1aa889d44b1edb663842e60431624354bd94a83bba8face3f5cfe126cf7efae481d8a014592d259c689f5a61ab3af827595294f265897dc36b3926cd51205a0ddaf4d8ad0f61bb01c8e15ba2ebd048d68f17f276b6417b7fd61c0e66b0aef37100a2ff1beef477679a889ee31cd9604b4be801b5abf4356bafd512ca8223123002d8bf01d660a4be32096e90c9310d910b53b23eebe39c27e4bb3359eebf44016790a466136197aff2742c3d3b78425f0b4aa4759a9661f69a350f9e991229dc816b5af9510fc4ca44557e419176043f17cc24b398b287e5dc75037621bee6a4e71ef16eb0ac70d0be7802d9041ccdd03b437ee9ae64239eec20c25e8bf722179820226e2a7d435ffa89221ceddb2b22723c8532988462c26591ea95f32490f18f070f97dbc1c8f15425d0f320c7339263c3bf260ac430ecfe5cf16b6b070ad4f945645d3294e7bf764ed56a9bf053f1215971e6867765ab8d9f007ba861657defa866cd8e9fad4107af4d71af6e15b205f3600a10f9f285685ba5bea6af1897d3bfae87830970c81d8a022f36ca86e2e8232e08ab98bf113b045e74a77f610a9ada1f758e3a5a5b7007fad65cd6594a4652fd082d3bf10725fbda43e04e09972c1fbcdf8f9ec3a4667004fc91c69d0913d58b5cd1ac8c35da8deb754551ab130653a6e33fb7a8efa37f4dbc42977027bd7484f2bb4332fa3432cc1a476fc2a965dd57c5ebc608edc14bc71eb376267f0b6c28542545fe9f86d4b30d929bd82035ee54f2de132ce7899cf9a59e0d59addbb9c9967d775f2a6ec85e12e43653a9f4466a93c5054cea3fdaf08633783a2d614e6f6539edb0a915f3312f4037c385de55a805c7256895334bfceea3f1312ece99e1dd28c8970e60c8acb781a5d969f7785ae598b15c42b59e47ae74a55b612b294de69e3641186877953ab0439258a3428090cc6b04d3e08b0cfc26d771441ea2d5d39a24c126bac6bdabec455428994e256829166bc7364773e45771e31d3264db771c43d9879e086584aaf9fd8670fe4786010dfb662d59368378ddab72b77e807620f5e04b1e50b6a29360b6ff565026b377b6d0686a70df6d1d5d4a3655c4344cc86440b36086102ffea1f651ef97a5a400182cf9dd647e39dbd1a169b66186d4a134c572e52387dcf488f38920cdf3e6d50cc290bd2f5ddd0e3b7f1f0cb2a414ee1cae629ca232e2bcd95f568622895108a28177325c3aeae687c585ff1d308793fd5e2e1b2299b8912ae6664dedd9cf34413b336aebc40304d193a06c7f565db59da0ab635ce54cdbda2fca90d44c8825e1c8ae02096cb7cf4f347fbd02c3ab3a2ce8f18854a4136eef4d5f0d193eef9e24e103a8c009ad7de98c4aaf72c59d0fd8dd383feb4b4d3dfb724737484148068c6c748be06d61be676834e01e9728fc969ff998d4b85c531ce42a381898f240ce6459aef878586fe9865596635ac0ee7ccc6829e54c3b57d35df92acca5a8c93861e5522ecf85bd074e672426f50b34e22bfb7697c4aa45d33a269a5658fa67ea3a89e0574c3bf4b37cc4da7c1ef06f3a41ed2112dee06d612c85b84baffa9edea8ced940e216800880a2ed8f68ee92bb20dca999e8b2fb47e3da33f8ecf81e9d59f1404826d47bedac1b631c391fb9fd645e5bb14b979cb4686f86d3f0800783f6c6a7e7dba0f40689ded292dcc21a2ce97ad6025b1318c81556bbc4b686109c44f6f61f49c5f763b43670de26f88b1a669e48f6ffd81620859b1072aa6b266c3aba16b9451f3c83083e56876a3b02449356b35b42081094f797635a6507be091a06e0a4645df2e220a918b0ee361b26c6fb2c6a9ebb516c2ede87f71973e9f520f7f51c043249541b2e52bd12919b50436d01f28b8048c97d6acec51b7b816ffc3c3325c52b186805d8996dd7b7628ac522cc4f865bb37d1ca81fd59961774e064317b7ca6b61232084a9f8df8dac3d42725e8ceca6e13e8c8b364589ea5df681e08146f8961f0efbabc4283f9c3927cc3368c553e79b767d43d7956d594a2c9ab5f312fd760f1ab3fa3b754f470b4e77476fa46e6bf2a830eda54e5a37201f0aacdc99cc7759c0c197be320c4e50710ba9424b629daba05a57efa65750c302c6d94a3c202f9ec45c655705c069ec56775c413c24f4b840239f8e7abbcdc8f3979222b0ef2975633a5f0c2f7d139cf48a2d4c0860975e28c70a0cb42353fd6459ed4f8dc0a4b820ac9c79179c2e0ddac47e5b1c6866061ef297ad5e10af2fd83af8fb7925c9be826fa85a1f59b3cac0c48127967db96476216746619b028a9e7104ae5168da2347770d3a4c6a4e125748119fc680d94a3793d931517d13f9d4ac3181162a609df646ee5185ac08661c566974bf289796a700b7cac56a271dd8b7302661f61ab90d6c81518791a5e41a96cbb63dbbfcb9b3c277a4714f8629decd2bd74773a863af34f5c56b1db9a040f6b3cb8e3d7d97f5eb27372593191a936fd1c268403f693987e5a5ee3d070c2b71f8dc711a180501e786810c5b7722bea3b995f3c4bf9db6e400d0e6e1ae658672b7ba2f15936dc2bf4bf742a01a9f8b587c56e00cddd01a4808fde121c8fec6caab3d90532aef3ae215a17e50b703f2c8a6b55365eafb6f5b8c63a96aed777346127ffa5d34fb9d1041ff87de49edbac2aa551e5f1f98e41dfb797c8f5b60203a3f058e11b32a11c9b41a0ea1e0f085191b48ce6a82d267f8b44aecacb2015a234df8e28aac05dcb60e25d616427ebcc2eb785088772ac05262a50b710edbca7ba3ffe81a4cc01c0ece89ccf0d15a80baef04d25fc966cf5e35c787eabf42511d1a71b6d2495846e63f61c11726f9302e605667d22a2f08d617e1dd7f8fd7c8b4ce6336d671859f0c4787fc235e8ec417e169a104f19cbdee8c3763e7537dd941b40eaf4fcbe91d5b5ff01069c25bce01c06e8a9ede7bcccc331ddd2d122c2326798f2f9f84c417ae3eb84599bd0dfc6381a40d8eb380ac0ecfd1ddd7160fda0036cd611db2eabc51ab835e4f27ed98f637001f370ab8b783eaab806ea535b79f651d6f2d410ad00d608c35778746ac3cfdea344bbb0a311d4e9745496692f7ff2ba21d59263e07f366dfa70862a8dbec9bd600490a762cf99135962e046ca6832f5c9f314e96d66227986ccabde81e0d863d38ee0f3240323303b9b0dc44e46d8a2f5ee1e40b1753a0281ba7306b479a1d77bc4527608f15136da83cd17320b81e5abac1df0fd7b1a21d75b115fbb01522f4ded2b7204b9488f2af1ac512f5205aa609fbaf01c1a5c874ec3dff4690c81eda9c84afd7cddd8726b87c3474ba3d610c5dc791ea1f5e8b21dc1b2b9aa3449b14034c8b2a97860ee404fb65c484399fbf357fd7c5d0e19b4eb925352483c503be4fc4fe6670958976bfdd6e7afa05a4561a6423174242eab1a65e6870b5b012d225d09f2e525b7288c063effce3f51e52e6d57a24585b5b55eb38d3f4ce827e21ea2e6656f0a48fa8b8b798c22eee69ff8810fcb1cc50cc745e2622382afb98a62a003d97dd6ada857d8bb67d7e3143b729898f7bda0574629a65e78eb0060520ae0dcc5c69ecba3f7a1c591b0fcce5d1f6604dd9cf512a2fb08addbfaa9c9905b3347bf79cbd8b36f7cdae1c511abdb62d206f8b959da1e929c1440a4ac58189e2b60e4324178c3fed07dc7a7d95b7de2215726b244bc5a28dee0e7d8ca2c51a6558dfccdee02e5a3f1836b609bcb4419bfed35d547658b75bcacfe6e848f64957cd4264c1e2cdef3b6da2ea622482cf752f94ed55f62e37a814a5082ced53601b535549becf0eeaec930bcf5ee43c85d7c02c9cbd35575521f5e34de68a7f89ee5ea8de888ffa83ea167a203619ba7f11b099bfeb2c7b1271d3a1d040f1f1c5ce002a229bfbaa6c46a4ffbcf22f89bef0f2b7282fe25dad7ade35f4dd274ebe2a6eb5faf0b41139b7be916072f4403ddf837c431b5e8f25a11e36207b5d6e2b5a48a38d6568ad862eb1dbab8f4b328cf4dfd47f8983a3a371f8c1cf2874224e6e61d5b6ef25b73f0bb95e5bf5c34fb135bf10cb5f900d7c51aa857a86e3c6e82516970ea856e4e95fec1001bd01d20cd80ec6d36e56d3009a900dcab2205affce2ae9a5b81e0a02c0aac5ed0b4f0af075938170d9901563d9b851a460b3ddd18ed51cac332c0d38aa77b8c75e0608dd30ee8b182b94de1ec0abaaa705b90a17efb5e2654e1af026cc36f00787365da63dc6e70c32c1885f18365355c3ab0cd4b9afd50b6f8233c0a988fb76f164e2199545584f632f08ff1e7a79922548f72f8cf8a7359eae76f1305dd5dd99af96d7337deaa91258208f2d7857fceded802ba74a7704c3d4a97fafecc5b1bfb78e7b6cdd0696337a4887eb7df3be9cfd8034b9f4b339b7744054c0d8cadb81bc862ad0df959d5ea5f7f6231376ef888f7698d92a4a719be4bbd7319408f681bc9fff7f91299e97a471f04b4408fb1f0a29fe39053d184b3de00498430caab0774d9b81a7dc2a5d981647903235f931b2aa2a54ee708443836106501a2e143d71d0e3cc187d2ef943c93f90d660cbfbaeba7fc0b0f8820cb050cebca61933a8bb2c515b04e4984e3d980230f39be59a69b86f723e12d07c0f495a41cefdac9f542794c2138dc4ec7e36dbff05bbc3e5672a99ec89fada24e046c307604b592759155e149fcb7a5e7f483a3c2f418cf7372aaf1bfde8cc1217a7c84f0d2b1d4a41eee5b4bef208ee43fce073501ae812c95b522a20f9ccfdc8bffe6d909914b0575a2d30a2034fdbf1289cf021b577507bdece8d5aeb0b3f05c2a22d7941d985810302981cc1dfc46528e458a3ea54d8f3e62ef80da106a63bf1a5a315f3499e609f8031ef56820d7b8f0c8988540f95c11c9b2915ef3ed5581d657f625437c3eff6ba38da74ef6d13c0eb73c61b781bf4edad35c715cfe250d3d7f5e690803d6ec3bb62bc6857ef663ea73bdd198137211d5e1ba8f2cecd0c478601c7e49de9ad733b60075aaf5034e9a7af1ca43b443d168f0d41b6b6107e6e76b9892806f7ec9a846eeb82d21931f51b6fbff0ba8c81d99047c1bab32e1cc66a6b40468715dceee9249a1e8cb0eb47f75f80849ebf975ccb860b1329dc002692022e7b333c84e911dfdbb33eaf1d61984cf4a2b2b30c0926242ddbc10b89a5358402c1a0731f29d197b12204bd856c56aaf8c9b549cbd50a80586dd8e5d3d257bc12a23a1604bfe306c0c85e6358d690bf7be7bb40e313e9776580fd15e435692a4f30b387ce39269c1b14e877d52934d4765955390d02b37a0e5641eeed3f0caca1aa932fe6bda52865a3274a5be6d08ce503760e1360a23b1c53cc97d888cdd4f34e6cfc2b3eb672d2af25ff9666117fe9d5eddda37883d7f93a870b09e4891450d2dda43bcd9df56dea7f799374517bdb9c8210d8ea91637be310b7525b54e2bde58eb73c85a55fa7f9dd55101942616dbfbbd08e568e37f51f3ea40be7c7d322afbc85fabbf23c2647350d22bd68ac543386c8c1983e00b41fb3bf5f5cb387454f048b0f768a7c04d3dfa25a81754c72d33443745a48ffad7956ac5be9c57e2b081de4b8a6dfc7514284bf69cd0c410d1536a51961d7551a3d76660c975fd39f3049f5000bfc1cdc6da3d48c35e95cd2929fd42dc3fd064500b7c3a5a920934399db69b1876c43d31dbb794ebb3ea71c783154c616850c68bd410e1d06a30cc7e7abbf04e38309833f77aa0ed6f35e065ee705ad18349e885fc1b838f9d3981a1e3ba3adbcc6414a8eb32124e526262f1eb72c57fc57434a6ee657c2789646855fd34482c9b9a7c9c51c985e70a5b0972e0b3d9caa0bff248f0aeba731d6e41ff0dcd7d90b68d4b75ee68355bf04fa8666d0d08e10243337ecd0b4d4075516b4bb19c47d2596961018ae15b46f404191fa5127a10e260ea5c3844f26cf6cbdd59432745d43b9fcdf91a05e1031fd34ee5228142531cd7b985b335a5ad16f90ac0f997284e110870bdda6eaeab38f7bd711544ce17b7c061572dc9630079971c826fdd0219440a4bc8c112648bec34441e3a44d061b533d78f7fc9cd08d2bed95fd8158adec2e8834dad8cbdd74010d11ac88c6e44560dcbdcb36b93b5d94e70f408d666f4aecdcfa6298784745e0d4765c5b563aa5c29ca26946e2ebadeea0c17796450cffad829c2e14e9df58043cbb1a21f04a6bcb07b60aaadaa96b58419ec4ff16552557583c1e7b106fb055a2c5bee2486c6638145add79d129856985a4464e7e012671136b4845c36c33e76a34f7e40f595ab1f0dea8bd89276003332d76b727533c05ad6717508db80d2d72c6feb51999f28f4c9904945153d579f3433aec14c7506821f1fc54be9ea12bfb42a8efe92fc241ba8cfddea5a6566f68493d8771720f8a34f0eb62ddba7600ac920255ddf4bef348c0b9b56a1b2dd4ff8698c47473630dc233210e2f0f55bafd3f7886403436bd638484c2ed57c858896dd6ee84554ca20f0b5b2d07523ad5d1ce25b421f7b4a500c6ecd7115a5f1a80ecadba8fb7de9f886abd95bd7d7b1644d7efeed360b88516399d5c30e29f58d14e14504ca58f696be51836a9ad6f7200cf6ee44222894bea2b099d20a5c58838d52b5bff1422db183419a547acfaaa44cb1b1b33a4210cb19da314641377bd476f4c07b5341fbcea6031289583e0df9246c6f0a276be02a6bdabe5f8f4d9fcae1359084e0901797a73ff71721cf9293aeeb75cb94a8542d7cf0edc1cc1ba2ef288cebfb86605050d7f914a272eb902ece82d2ab4a56fb09ad8013311a3ab8df769fc232ed8015e5883f3696d763c664f622be4ba8b40e0ecb9e2d6dabe527e3369bc6b577580feac6e6ce293aec26a9ed108dfebf6deceae976d2a45340746d6f5b26e61885e2e8c89ff419c1e7b44aa789f8224130af196d41c87789d30c641b6d3ec453bac60024577e3ecbed92fa91c9f90ba053256b308c516650bde70f6d3db5a7119285d2bb3a9fa402f760a8ed1e483647ea4b8924716de664ca8a316901fedb8736ba2fe3bca0dce8e0e6a2d2a12f49bf754339cc0ebe764595fe7ab6100c71dc60ddc6d0e5a119caf68fa4f7d3c0f6d05c791bb9f67f90bb3800dd1d05ec7a7b7de7b9cad5fe29f06b09681414f1a4c0fcdd8a265c200bf79bbbfd2b84262e2f99176c91d17ad09fbb7c8ce3f7d558f6839a069833f1a3a5d9cd2d1dbc7a9c400c54c017d882345a1ab1bcf85b85023f4ae1accfb606094b14b78bdb531bd3f4a5959195c14ff257329240c9d659b9357899f9edafdc8f0d1f170651a825a43e53168072702e63b046ef25408a7b5f3587eefbbf086051bce40d6fd59600a3acae19dbff0f042316d2b07c5b8e2d3367df98868e04ec8a85bf55ad7344c4487969c5e74f83e9dacb9e21d0b8ba80f097bfb3730488813fb5c3e7a9a79fd15296f71ff145585aa47de5f01a705204fb3ff59af28b2610b994681ca65d58a132097c4ff1ae3d8cfa71cc70b558c5e158085644b260828f32f6b1caf27d496c273355056c3b63267297eedce1fa3aa99d6743fb61e2857256bdc59be6206174a46f7a20832dc517eebd40572b72105a29abc38e8cb58d3ebb41cb729408ee98ab96202b5e9f32bafdafd39f7e34e2e6828affe2c169d8eb067d4ad0b01032134f9ca94bc971c2557d07e163b40e99a41cb92d73bf5bad8e082bcea4874e51b3fc33dea427c550d08875a0cb6a6596b3e90651feb78254e90e008f45c41651ea3b8c60253731db0974a31795805179e14b55f39e2f381b7cc493725ad8b705c1a2b4acb97b18cf49643c6d5ae4b190fccadcec4320f1cb9fc840d13992f08a152c0607d1c118e5a9269ac6a02e94ef46a368336a074512851b1f97cdbe721366dabfd86ac95cd8500fd690bd38cc431dfab3950830eb1bea7f60a5bba64d8c7be64aea3cd830664476c3454088b238b2163e0877ee3700a6544dd81f234c95e1b166305c464197f337d208e8700f3e1dae89184538d5cb387803dbe2b31af3fe5c83b0eb5322caa6ac10becb45ce5982d95c9ca4df58bb46a9486b738ab1f0627a1a776b52d2b4383123acbdb3f02ad9c5e983a1f8be996e965213cea74d2d0f990960dc37c77e4097df4985151796faa04de54c5de9f6317ac73a85e808792d65f6fdeddcfe41b549d00ff3cc2b5deb8a2bc3e9ee9600c7d0cdc77dd188bdd0069d5555e73969f44c6b2847a114bfae049bf6b06ca4f51c3a19839ca28b71fc6dd166955d7f257f7818ee7016635c9303ca55cbc22a77e4cf994c55eb31ca76eb7546fd2291227fbe5646983250f60261e8ec20ffaa81e02916d79f1dde7c93292ad949e8041abdef44606855fa171e8054db030580fcd5b34c7c44ff0f1a1680f4c3fd40331ba4700f10e689de97820d4967be7e84ca967b043c20389119d7398c2bd2c105322a287b8fbd303e2ce396e88053af4f0ffa27d2cb69cda311d29744c62e9323b322e63593e661d2b3b4f6248d992c46aab2868d72d97d8a027b9c65c74ab280039269b0d00c36a1c3dbd2ffaa7362ff96e86a59c354154b9c1b70bbdf9a1fbf9904a805cfe0ab3a30907392160827eea83685e2bd693974e263a1f84c536d43b5c22f4fbdc2a9d22abd341244861832bc21bdf9166857c9f24918e93bdac55172d9254342ac4aa16c76bd81c9aae9452200511c3dbf239ede0cc38768390e3003ba4b17b3009ce23b4c13b967fa4c1d58d9588bd22ece500fa326ede4b77e7fe6e5e92a4d3f5d4b2f9e57d3c60afa3f7fbf77af9fa32d3c2bb3a542ac8566ad702fe6d3ba0f7bc7287231600940c55e6e0e2b684f51f185d8d5e9191eed38ded860d50ce9b628a91771d66f3daf42d961640fb62ea4e68cdc3d3e815e369f418489633b40b8b6ed3242a1781c2f6d555dc45557b45521bf0503c41da98dfa2eb8fe102a1848fc587e4f0cf1c0e3122b9e00e7e976e95b6ab68caff72728d91a7b2939acf2edd4e111546497f3681a3d90d9cce604f8e0864ba9644e36e1b6536500c16b7ed90ce208888fdc45bf6dff414ec25075703348e620c4a4c73fc8ac11ffacc9fab1350b435c0403201d203e317f4dc87f6300c363f4cfca55ade0ed85b4ff8d07ed7dd4f50d8ae8d4f4e1f7ba1cd3870bfc123a716e198c5ba4b0da65b7b08960a57ef89d53600b5883da1484acd0075fc259275a07df69d7590168b6fc950d13037bf19824467788f4777b21e840597733d89abaeb5aa2e8a4ec4fbc05f0ab3931d604b1e0c5f2a25d95aaa744c515f6f367289fa2594d2392356e9bb29478193470179a3154bf6906a6dafc1395616c47b48cb821bf8a6645b19a335b285e439f7dfb8c430f73a4baf7879f53affedbfaa00ffc44b566f1fd73ec013c73192f73278a33b5974745d0de28a97ef32bff726e39b2b86352e6c4950a537cc0655a445b024f6d58f9aa8eda95ac355b19a3fae573dff3783f14361ef0e8a511aae60f30347287a96bf01438800a027a6a5f2a15fc522f3a88895f2a839b890ed215f0882a4688e19fcfb7d145473a7f4452939f8b8230b24b725534719ba9d291850815731ff865df25647715d7d2dab11d32a820a44d64f60c6ecc39c12af2cbad5a8d5346ef24aa6b2a20ef07473a19763ecac1cb0f98be8dae59347ba3fd19a809be022d916cfec2417b8ccfab0e3c19a30e244c22b46c74d5280c2affa3ed77b49de44268cd405d7dd9044d91fe8d9aa8e201932ac71e0165627382496f034e2e882896ba75e7d2919485dab9a929ffa9d176737c04e79140dd0559c69f476844dffe7b0c667995ff0a5fc7edc95bda902cc5904115159924b48a137811d7113c4836ea630987cb7c0a5f76069cf49044facdb0046937dcc62f25ef5d2bb5a356077e8bbc07df74f99160ea22d99b6efca5d8b4daab944e654cf4f26087b74110d4081a7588a87331c6ffdcd68dc8195f6b284b071c0f32b83a7947b70d42677c8e02b6536877204458402b3f067b70c61c56ed9e2de56fe0389544d25ad160d73e6345f03192ffb29508a3e5e8ce46991c77df54893ceaa76ac881858ab193965bccbaf302caf7e3347bf7116e2c9442bdab834bfd23c1e717f184c5d30e35407f67ed214d69b9c65141a6a817bbb1f54b931cc6615c4b09b57878d457e0d841ef25ea728d823389083f7313abeee083cea7d3fd93a5ac871ee4632fc75de46409032563bdbbc682a6e6b41b775b42c4f417a575af26ee16e3f2c39e5549be6eb0a2c3cc9fd2ffef4b26b725e1221280cf1f0f258dab6d9c9ae041ac11458eb4bb59d1d9ef5c96162bca85a452ca56485874abb2cb9f62e1212f8d10024f804cc5b4571b5fd75320c88a4c5883dca09d4eeeb780af7514465f724ae46c1a5d71e6fe5983365e8edfb9fdd7cb96060f0437741f3f832de0cf5a4a0ec0a5ae512370adf3167069165fb76bad3c81f3ed7a0a322319a7820c9e7f9c97de967c3eec073dbd977eda1f809aefdb26f75ad7e6d549ce64be7d275da9f7e5e8e0b6355acb3da5f7162132232d7d7911ae9c459f597b560c3f0bf42ff86925bad9607ffe9f00d86028a01617d50aa67d444ef45924f76838f1e5c8dc19865191f5b304734b83f28cf3cc3f1acab9802cc40309bf3a50e7bddc0b02d05fb8e44546b54391fb6172b5046040cb2459038a8021edc29a99d323684083e388507ae8c0b5a11a5f8bf400968897a88e7b9fe381a054166e9f1f42cec20dd2f5dfb4a318b1102a3da96e286f1292399f74338d18486084a75247a5276404c140dc8e8345da4340ed3b2d2998df83b784392ac5ca7efe3669c67fb823d9b455d63abb7d9749f171306eef0454775f37b34c304e9986f128fc1599fdb963684719ec992a346bdce558e97679a97c4419c54f8e55ea97d3f99c533069280b9df73cfac5a5e2fb3b6b81d51b6bf7278d10b236340279c6bac6d7f6c7f22b92d83ef735b1ab568652abe25c880233e1c2e116efea5efdcb9ede28baa88db29124ec1fe745e1e53f5172187182c4c4b0ae9c0a88e56a9690696b328d93f1571e575eed5e1b1efa3c9b1ee307252ef8d97acef6be4490b57ef3f4b4a9a9da51365fe046f64b62ed243287482e87ca5d450fe97c295b068756c11e5e519969a8a5e652cf5612f607044a06b1154e3b811b5155fd38750515d64d3f2f873e175f748e4b605deb3e9ea1b8d374456a76e2646adb6eeae3703f4019eae49cb2cae248838051e5ca760d1316871e20b4042be1a3ab17b937b71a55192e8cf18684a8f2d167804972f9f3e9e0aa27fe89cdbdd49efe053c92d852c32a4418fe5eaff7f98ea36f47d981a212a08e6a01ee523ad0ca52777607339b07ec8511e84b65465aefde6d337385d0b7e516e6854b6772412ed684b5c5553eebd807146cd7daed7b9dd330748f0b046a4ff05872b847f570320883d709e966ba18905fcef90b30e3aebd1ca5085741b8d13bc37292cfdcf1c23273473d61aa168f5d5539f3e3c39b78cf9ee24d53d17ee86fcf9fe24931218e8145cf68c979ae5108a1783551ae056984abd04f22799d671216a34248e11b2843df2ff8ae914a1847f6cb4d32743c41f3fa76e355404ddae9d2a402951590f29664c55f8469c79d0f0f99aaed1166d8c96535f80bc81f639ee243c19f45e7c00c53b2443f13a7e070ade4da92c7c1fd2d4f988f5415c98452411ddc1c2bb6303e69c7fc93eb49a8af80407ecefdd6fca01b1ef97a4680d3a811429aa29ab9fd8c4205fe83c262b524fd638cc5f238e65030db3c8d6683139b946d17a1f159cbef4e207bd0fb39f84eaa1a4d77624041126f4d4b381ba416b1c29b9662bec8cd64ada36ce060bdc772b1d190e7f9c1af0a3716bf97732b0e51a0d95b20f97f6b3d12335de1d59c0694403dc0fda8851f2961a3ff955387dbbf17538b4c8707137aa8ab5900a2a1ce1347b3ec1c4958c115cb161db73c889596c242ef80c30ebf2f49c2b9a1cf8f1c14ff5d6da447078a6f9526eb6e0bfa2ea72b605b93a8e07b8d91a43de41169a5b9a1563e33a5e97baf17d7c2b295ef041d2f004f56a89e661e0293793c37f5ba9d9380f97c73cfa435fa4a35d003109469bb77a07dc51645cefb8d36980fdf5e0a3c5e91b98654b5d9a812893090eba245c4e618bcf95388da11129441c99733e0d95fdde43031e72eef4878a03d2d170f19fefddb32fa3809d75e01a8c8c6996fb9e1f7666ce9bfd9f0f981d4520b69645887539f783167b8d307c34e34299ba379e23262c6dcda534ff2ee08cbb9b1a977cf048bb22cc000c561448f4e4bd38bdd08c18210573be261228cc1a600a209fa13c4391235b5da7dfdefd9792fa5d1de2d54f368ced5dea3babc6a972b1a60acd0db8704960125218b592c6fc013fba9054c438ad0882d714a828f6dbea157a8eac6406d1e461e6ad75727a5b07f04c177b432ff5fff7abb361b52da732c24c07d34b981470f4b07e3f1aba054ce237cd616f877b7c0173d3542688dd739dd374f3872b4c6bdb3f0cc6783d44b0d73a341bf675e25b25565e8c6a7a5c20807947ec377a059c3c570e34ca3a89816caad8fa8613af2eab1acd786c729ea9222665698f248e1b22acdd1b1ff4b83fd8a17d4cf6643483039c11bb57645ee4d5b634e9406e8baf03b857d1c63c58801229a3618a5c03a0121c0d550493a3900e9be8d8784865660dcaf0a4c5853d6822dcfe605db4c583ed2808ad6c05308c5cd89dd7c53b7513bcb0388c52b8db65fe8a3c3149d0e326a40981846cdba5ffa44212fedd458be7305171e1eaa248585454406dbc739de52cd6884514a1ed02348f39b23c1f0c2bb4f5fbcbc748b251a25c9119e653b7d2173697f4351f27b1a8f47b610b85e77d61ae22cc19ba7b8ab8581ae5b0eb28c42937623aac4e118cede5307abae681e6ea2518782916e06343f9d83f7cdd55d3d64b8d26c792ae1ffe4653ed648d883d663880e4cccabc1c6daee8a348945a71b48c9c79f969d2a875eb0ecfc5f28af9758b93b08006f382be5f482dcaceedfaab66b93a271c6add0b440eac6a15f44dd08942adc5e4deb3fecf048fcf04a078656a878f94f6e82c755df8c3aa2929cfadd8547ebb7fc18bb17f26fc8485b08730e4245271f8f13a1a49ceab6e43198fdfbcadd8cc71d982fdee52bfc2acdc8ef8aedebc4da58660df977edc78948aa03ebd4a65fd8de837522021f861b8fcc60180bdc061d0fcaa49f8778a21a462699e3d211199c125101f5a334981384d654a3c59f364782e1c5341912877efa77f3cb87e5d6ade591c0fc499c1359c730eb9926713cd96da09f5ef28ba193a8e5805086fe31c1eacc5b913743a7abdc7b925b846d389eea78eed78273c40674dbcf07d1d13549dd333c5a087f3f74ee4607fd0d249f50e92cdaf8110c36c47436c893c5d657aebd65f6fbbc5f5adf2a5093cd3c81af76025b54bc12b25fa179cea30fec5b3d689a6d5dd54ced08a7ff3ce070573a9d27de1b870ccc9fa9d9731b416181b3e3b3b7d082aab6f5db9a8c903bab788b08ded7a41310a101008b0374863e8fcc8317da31bca5f6faec02ff69aca3161431b9e1ea291aa555849405a82f7b5d82b2538969ce8217036417023b1f8a0d881d937ba9ff23c7659e9afcd4328fa7bec528968286acd5251ba30d8e58c66d2358c9e3b1db0d8667b7839dee83fd81a706e672be7fc62b3a4bf90a4f084e0b9e79b68075e3a797f0d65038c5b45ba99510809212b2fecddc4e9c28a635b025e29213f321639d415743d7ad738504f66d7651b2a0cd6b2ffdac4ebcd5f20700c1372051bd659dbe1da3ff6abfa42ad34d9c8ea57d82ed4f25fce336e4ca839cec0272cf5a16f0e68ac0be10914a00f30586e11d2f44ca90227f88b9441857c85e7814c43bb50f1bb8ced4948f59269ceb1ff1b4f8bdb8bea20593fb1b4988328b2932f433d3f6d67bf11c8aa96b9512d3cf74483b94aa748279cee0bcf0ad98543bf4867699578b81ef6680bce8d09d9c70d496a19704429d9ad288663a763def956cfc4355778fe13eb06ecc0f7ebe39a8e3f4950188c6bf8936d1a878ffefd79de50a0cb4c45d74f92a9895f5ca9e8cf27fe747606c80be65b28d738718aa5f57c392bdfd799f62b79083a8eeadc3d7dd9a317fe975af1da686c6d0a20eeed7f0ecfd26fb8cdeecb78d93649d9d8e540f147c00e4818c8762bb3da71d6e233f1f9311038c8080a96597f27fd1f59da64dfa7fb0191a17be722a1c782f7c5afc4d7fe12f3f6355023b9ca707a3889f03e15ce2e86cbeed4b3d9a938bd4e7fb94a0adc5c265c786dd3f29c10460b7a1916cfedee6650dbdfb14114a7b41ff89879fd5540e93aead389281b12a5fa1a5bbe12a830d1bba01ce00a0f64df20c19582264370ace8ec4cefa0b9070edc877dab555eb41862f04daaf543f8877c261c5f5731a5fd8a3d2b89bff79a224000f0586f96e8598a30d7d7d9e483569444daf9ec73f271a8176a238c5c18a029ab6d309fdf039f780371d779a7514df8c9008f8063a543da0db37ff330a8578efd19fdb5f8bf0f6d27c7e16481978d7e843dc1c158bf71c5f8ddc0ea1ed7ccfb9a10e7393c33fd71737fd71fcb28d274a8cbfd068841d5d1d362ed83e29dfd0730f9736c85c470b09feb43c3e78456694ea4aeea243043897493a7a7b15dc052c3ace9ed27b97ddb9ebe850aabcb0c8157d18a406d5526b1d3c8b8a3b21fab0119578c23554a7eddba48f369cb95ef25e55035f3dd0476573c8cd8e451aea5133e4a2a667695f93597c6f1dbb4eb4ff151a53a8b098dcee59ea7a4b3eb32709c56985928ffb92697e00fec32d5c34cb168d5c71edd5aeb96d3310b388084b3c03cd15d48bfcc5d4b2010ae07c536bd9ae9f4da56a3c4f3ed28c193cacb10d7b03fda763c2c12b69658671c3c0266be0c0be79adf4f56697dd0d48a5a6161407df9ae8e24179193966fd9d16e3e0eda429562b44931cf5dad626936f5aae075b9a51ba5d7991b5d1af89b77efcb8b6aa53a33506ffc934c516cd2fbf82460440fc08695c68349228cc5dc2a120f44dd9154a542830a0f462060614a3676ccdd875d6a475e17144a12e85af7683e7624fbcfcde5ea171e5981c2c33090aab0a6f0d142b3857a9b3a197d8a06d4fb6fa74bd59ca66ce79a2dff2015c82779573a991cbf3fb42f33f80323b4ce5222a9103d505184aacc467b811435a0fb05085d0b732a9d2fad0b19cbe762924413ed6e5979389e7f50bd52bb8cad2403572fdeb6944816d0a7156b85af69ac8e9beb692e4ef2ba33d06aa9cfdce0886160a14d6f4144e9881aa215e9ad5692ee9f8d25c4705e5cb30e916bc5e72347fe775a8ccc6aa593de821fa12032438269ad031a7248ce040828d14f899d9243364280f1af740e1544f770c1e8da54162e7b3d7c6f2b82752e8a460db420c1ede1651a10137dbb0af30fdd42b8a7f013b40590762ec62aa70ca415893cdab2b33750463c378c729dde31f2d2922b71a88397c0ebea8a600b81ef89e5cb88ceecb7dc3eef6c52da02fc7624491b86cfcb49ff38a6464f461110198c7fe42da6c49e9df9b9bc02eb3a27fbe10b7169a769651d3518f937b8879c76b5df4f0f715c8d8edeb0d64840b3121c46202edba00a7817c75b2b84296dc1d82e6843fd0b1cb07cd6739073005ff3c0d82c7de8e3aa12571e407d4554a80cc734993ca54b61a5252dfa9febc89f151c7c2ff8c665fe58dd6d733cad9bcf4d18a5bc1e38fb863dd0a5df57b9382fc7abbeb5aa7e698600d2f35c5d228eb1e8ff636c15548655beea9eb167769ae0550e06296fc70c6e7ed9916eae220405aa5a68b0a2f09a5ba0064865891e2a8345e237d44f97b37499ee51c3e75ead7c4a90e9ee3eb57519e61d4b6a256d244ddd1b2cfc21edacaba114b1de1db3e6cc206e5c465f7ffd68cde36d2a9670a1678e392bc8e25cc46409f910f54b508aeae984462aa3cd6928b530b2c44fb199ff921f995b92d8e0989ff97439725f3c526fe97346821e29ae386cb53213a888ec79f940dd60f13d3b0c02b8d2ee6d902c7b85c9273a8730f4f09f5faa6d6b5b4af6d5c78079506f82fa82e0468ea49254cb1aecb40eb8850bbe4936a3cfd292ec8ecd0becff998b968fb7dc78cff883d45f4c4c3685d5bc234b4776e77c05088185235a6574e08aa508e6faf6b5aefe5bf177a900814c7997ef03e99db0362a165ffb652b159b720a68696e05c0237cf6a0c6cf96798d8a4e3906e2973c06844905daa40194d36a385adb6fbd7928e211fc85b2829a7c3d794dd2e37983d8834837c57bc7513da277f673ae406e2190828ad913e64b0d3e6460a3f55999964ca5fbb09f816df32fbe19d81055c6dc7c63ce79650c78a00cb3a30d0fbb78466183e377fb9694f5e2c528f9b3b97be7a363d77682cfae53353f9b59a1a0f0383adc902499bab990590e08b3612a3fdd889d4a61673e33483ed54e589bb96b0f7e619838d187cc1e0c0cd52d4230fbdfeba576982735b631fa6c1fed563ff817fdd0f3ea8c9b50bf009148ba17fe73a55f20e77ec8a9a749d4ccdbf9d908bf79a5e1f9f5e9d30bbc2016553950cf728a502cd7798e89ae4c480ace1487daa4019fece182144cee7c4dee8d2f9da93eee368b8a93c55a8c219790be88f8f9e0c27ab0f0c961259d424f9944f9b31a8757ed43050d84a8bbcc61b2cd523b11b3218d850df5cc5a9e0e203cdc2dacc50162dfb9c4c9b506184b5ca1292f860fbfacb7d98718e117e9f2484cbe940be01e203e94ac395688483a593aa2243901887c5cd5a1351ce0a39c38b89b3c4f789da3eac50e1efee71fd5d203218e7ff35c298b8a0cf7e527f77382f16269c6e796973385f99b67a2f389c322b00d0d73fa67bf53e3baf0782e952160d8d46d90a30df8e9aaf532a8542e42d40d15749772ca56f6a769f6b6560fc3b75ea5f0bc2e2cc3902444328f6bb734319e8261374696fb2a087c87d32b6d8498650fdad0097758d112bca3f29568e9acd8d53f85b449568fe555b68d9f1560ea911b6640e23d9659a5efde615b914d11fb24f7813958779b912d09e60b22535c6e917f7ea8de5f5fbb1e91161b85d18fc78ae8efa9ec37a37881fb396ec6e2c3bdb6b8a3885fbf4805266122238fdf03883af25d251969c659c1d14dcf064be0fd01e25c9ee96c92e0ddc5e5c9fe0a002f919340b3dcc32acae97eed32a0cb5c53dafad32f0eb3fa72b99c0643313e593011ef042d8a33036cb9028f699bc16e8dd06066f05c629d36a162e3e47cf8da57bc2528f69c61c277a4b38c5912ca8f91397b4a31745ef6c39d3b1cc1ab91448cc3cbb06b5be86f799a3c6f470c8fc39706e1960d274ee71a942ce88ede0bfff62fcbb26d30548fd389682230e430c176e372ed0f3c10286e94b0d024a555508b1d2511ca3c03b3fc1076f07a238d226af9b072a3f333915eea8c5ef05c9579c5880df186ea765cdaa03dcdeb2a7fa351d3b536a3c66eafff94c68d76201d0af53c8705230a271ba061058da8f1c8585e2bcd1728663e3b3c5f4d9d3bdca0efacb3ce4d3b0acafb880c8edd603bfd797e60a3d0eb6a8c144902ac06280a2c4a432f54e357646f8b4bddfd6be1c729c7ab3adef89574d9c7fad25722895231d2431a6ce76074e6ffa580a69eca8693bc2fef842fe70285a031bd5d55d3d4d2e5c2b7956e52431bb9d2bbed2e8ffeffddcfe196af0f7bdb3fcfbe21d0d347d105370cb2caf9facb69b1ecc4ad9fee55153591ea0860f63e619460eea3b6bf4ece989f3ed9605e1816fea305834ac3a21b9d4b962a0aca41d425911c05e08c52ad48e8e858c71fd4f1f555eaf2d7da1637fe11b0b380df527dff049a687de2fbd644c4b38ea30b0d020fbf718af754dcbfa913184e227535d635b9143851f201584fa95bbaddcd5c363fac6668790454fb28b2ba49578732afdd8db9f007aec30dc8dff14e9fe190084697230e9a9572d2bff78e227c1a1c4d8c576cee9cfc17929dfece5fb23ed1dd562bdabb5e7284cd8617ac79045ad5873d75a8201c54b32e8e0970e52a055dd43bd1728e18309d25466f62d9a7dfc656815760e22297ed85c3f651511b8eebc0a8f2851640dccaead551648d672cdf55bd9f5e89678c84202242299593a05a7ffe18194886994f1ee93cb4b312a799c0b760775ad3515ccab571aea2a66e474ef2c1d68ce6d65863c7338ce0fec6f7f8c57d92060aa4548f5a9321870d81ff436e32c3ea2be9656935fbae045df24184c3a9c8ee3f65481c88aa98cd9a9ffb3116194a18cc23d3dc12d2ae2ea61ca5fe75dead594ee7499415e300682dd0192304782678a33bbed752495ca47ed00d36b95b065f0def29bb7eb70a3f014c63db7d32666bbe6010217bb62896e61adff51596cb96aff6a615afe23580de14c3e8f0c17b86e733de681a798fd55aa26e30fc25157eba10ebc411637ce78d40ac595768e303fc8064f7961d948f505781d0b261c8da8a292d66022cc4e77f5a2df559db80b34ce9978a6cc0e761bd65b6a6f39f09582485bfb3bcaf0f53976eb641ce999e8e9f081b10770ee9255bad10ca7a890b36fe7b6bcef472b2de42db9c2f9500853d8e811befddb50608a3407ab6b1be2e2698ed067b7e561e23a340dc929b0c51fc3ac861d3a73dc51ab6b23525e74162b1178093ad541d2a85834269b91c429dfa495a6fa7dc6759916ff68b998300939d145a625e5aa1657057a29645a02dc82a28155255d8179bf47708793a34e34d531067d4229353852ab193e3c391b1196671836fa2937d5cb35b5947b938267a55d7b300e688acc7f100ffde415168a738e5ba52cf8bb2e8b2630312c7df5be9ba81e586459aa869c0a7ef4b1dfa82319fe5af4843c5808777e88e27448c653c039df697de3201c48947b09d57e60ddf63d9a6c6a542e8cb4229e6feb1a0695be15983bdecd311b2f368ab12a16cedab069982e9c4674a0cbda535cea639f180ef5bd09b4d4f491c77fad3e41f3f28b97c5e46133d16bd60c68147575899451d282594d18a51bc3af2cb62871a0b58ac0d744444d3d0b0ad3081d1e4c6eb82c2570cece4d08b244f7386b0c411043154a30ad2fe401e939c84c877abca8c47b40c2d0375eac91296598413117ab83be001c9fc1b704fd00b91c7d398562d22001b2e40c0a930f062d315f72ac1ee46cf5e42f994556d17262ef5b6753cf9cd203410bebb06ee4ff0a24052d7069199525a9e02589b115b10dabb1e1f8dfd0b567a0a88dc213166221eb6fd01cbf85873fe98d9b363d847e909a572ebd96b71e05f205f52e0a2a82a2ec53bb7ded950f48224bcea8ca25f0bf1d512f4d893b22c316dc725dfaccae1dd90c5d86b042585076e5039c463acbb375304d3a1de728e0973607555827e2489106afc340e4323d82184f814ff83cd6104049a0d16e6783dc417ed7f3d73a5b2604c14eb06291700cd55fa79757b9b123b07db43ac4bdd80d53a18e4db69eabd76f58f3dfb9ac2f88430843ececcb4c9a6e5f44db1969f3c317d012b327fd79a462242747dd49cf1040b1710fa3a1e45419afc04a9bb46a25e80575183b6a2b451cca168dce3907a4beb0a0246a0b903599d709441f88958fbc90897890fc3735e9e91c84e8a26198626051c18ee2caecc7339b0b053350ec694ad5e70a72abd76bbca0b955b43f534c004df37edba0980b7b09b968a8cdaef674a8e20de9cdb8cb2c93d06d17f1ddb2ca989a37a7311952789131865952fcf70b09c36659e6719111f6dbc2e76636b6639d09f62e6ac4e7be2ff82df57e036715d9288aa52b837c0d3587a430f2bd302f0078fff693c68d00530266265ae03000ea3d3a12a866b4d73ff5df9e586a8ab12303051a3e7bab6ef5f4688cf9484783e1cb6bbc73cf09bc200315a1070ffb7cc4f2d2b243757fc44a1f84360bc1d8989b100e8f68f610e0c7c78434a7778944378ebf4c53b161e2b670d40bf1b85d010c532cd7fa7a0bbfa5e6cab45c45ee7e56411a133b1dedae9b1a3edcaa3956d8e44cb10cd7b66e152e89300ed7fc998ffb2602e0a21d26567170572f84e8e0a9dc72940be15a30d8fde8f361128367334537fe0f5e668df9bff30aed42370dc84c9ac22f72a6f9d350b26ae1e5f09e2e9aa4162306a6758787f89ae86401cfffd268f1a1b2a42c7f18a52ca5bfb2f62acdbbc1c70acdad9c1cdcd4d38fa4d34ec996fe9e5b10af9e6bb8f08510f42bb9f5ad62640f951798885524d6df52baf153dae86dce48156bc39c95c6cc5fe527d378e37095e06027dbc60e878bfe48617ad99f428b45a4eb755ac8132684f1ec593fc0040aecc5192aa653e95c5c67fc7685a11737cf7a255705331f124cf9b3f46dc3842263323bf274d7ecdd1fe0e588951e229a1af7f318db0c0604b086710ebc568bec864bee273d7d929a1ff4b9aef7d19453b311e5410abc3b4974a7b173d71bb3fcb7dd53b54eaf59fa9b515d6b80b983f0f00b0a81c87fa6d973c2d7f15841bf21ac2bc3074f0cc012dc93131745f611f9914458db7f12da03fed9bc7696aa4f41d143066a6cb710021341ee31590013109ad5a69383d68f0518d9d780a1c8358d4198dfcd040e31b267fe07a043ad647652e805a6add8be63bc6442b965c03cd52f2a48fcf2b74640d103c518ae16cd7970893df999a0defd5015a9779f336019ebddc0aae647a39eb7a1848c3e5b1558befff30fba214136fad1e8fadea1bf00786487079be19a267dc75b6c03c22685fb1940527903a85155f4e0e1ad956db600c4928376f80007ca0100b91f20d48aea53cf7ea83ea9d7cd50eb2d683c6dff7d6ff6439c1420dbcc9af570e0db566553ab2591e175a2333331bcdd71007ad26afa1943330359accdea1eb90d04b99a6a5628bd5c2fbff7600fd4120283781645770cf81aef429043f67265d1ae7f9841696ad379ce2cd5d558ff3e55e9ba89df9cdb9be0ac3ec2405e5b96e3dad101c218c71bbba40d78d5559ddc415b48ef64b40d54410b553ee12d22c181dfef75382560918de3cd0d20897b5fcd158da96f586af215e20e14ad15b0bbe40b11d361c79360b3a6ea59d811a22a067751dc3e1eb2eb256dbedad65246af6da8dcb73b3b25e88ea2ae16796e0cf87a6ecb1388ca7114950fa35ecd5fdfa0ae65e99ff3f0dfb48c298c6b0b952ff863ab52386e11573ba55611d93db454fe8f38f996c426d7c0ea87f54556f85ce94cfbbf912bffcacb020f035712ccf9b498266782501521b62fd50e97990975ef9471e646f0ea307c3a31b1a32ba42f94f9056ebc08d16b1ff2fad19807bf6aebfb354affd48ee674b9531ade9a9ea7b6f85ce8e723f28cef8eff36099fce830fff059cf55759c8cdb1751ca74abb1e3a81b3080759c450955ca7432ad8c5b7209eff707107aa15eb767998dd5890459e55c6cba1107866f867a95e7a3a5125e5bcabbba67f808e2c4ba3f8b09158bc8019d0b64f66b89ece74feca90e2a0fa8cca54c3f2b9f1eeff0955bedd7e8a1fdb2da1dcf160a9ab564881bd9e6c6f638d2c5cb249fb0704c49d9681a51a5ef2c8a2242b2221d1251d77c920310fd06dae54c81617081f9ba9ab12f9b3e2efbec65fbd7f35b315496f5e368d367b0e3ceb1463907aaa4258ef08eea55e8884d74c85bbb64310f89debf90ea5c4e40ed86739c19712dbc00f62e0152f3313dd02bcbec2499fde6e396efc04c79a5174109fe452c3a1336901abb256ad81e11ce31f677ceaa3049859a33e1a6e427dbc2223f0a83d536dee1de8701987de1326a07c3bad06f34c9bfa009ca1f8be39d0de6a15204ad6358ee512b45ad4c7f0149acb1d001e87b3fbc36d228db5af18eb00fc5fc8dfe4e64b61b808801896f1f68b214cf44494331f8a23680d83d7fb6e0bd6f3fc41bb2ee273c68769a2e6fd04b137e7b0aa7937caebb5d83f22f4fdabb0af124979b55c59a29242487b13d250251d7ef35866ce84f1113c853d06666961a1a0936ec87172ed20cec3b7f1ce25eb8b0dbe82127dbfdaa06fd91961b12e038e520d8a16f154c49d5356b8baaed4df703b3a9912e4dd3bd7c9071125e531f420dd4dad43d779422e0f6bd05de2f56d9dc72ed703cd39e6ed2026a45f537946efcd14e8288ae818c84e7c56ee587ecaa1e5d8bcec318a15f91de524e164ed5e050bcbca7c568df8e806d8b69df3a319653080d1dbeb3b128b3f34a42887d22b10ee47e04189bdd5122e1d30adaa3f1c86959ab1817d43d51bd5198deae65f8ab712ec13a9ea4fd082dc0c916f57de3506c65760b0419228f4dc22721b7f1d363bf7b1fbfbe1247ed8db39d76bdc91d4fc5da0f1c509a9145ca997e87e9af5a884b2266a50e3c381ba00c5debae611d8836e27b9db7af1880e9e07bf238cbd8c3d8a23b9716d1331e5611d385d524a2eb99144384846d0139b0d443fdced9657644b48cfa941d9c24748d0332a7e50ea4668f277b1988f8cdd595957f7bf44d0ed28f4ba07912533e985692268e10c34adbc3f2f611f214a73838a3b95dd9fabfa51c54e7376b84f39b311468a0b3be85587a4f2195d3f4d9c152ca1bebc9b639aaf5a53c0d0fe8c89539d1944cc2c7cb72050f90035591c90fcf33b3af977a0b027f31c32d46870d367d66f82c92558509b982d5dfc7748b0b9757b2a140cf08e1b04854ca2042511685c13cca14477d3b09d790efa5487c75c6a0f73fd5400ff739b3c1ae3b7afa611f417e1e7e818e5251813b185e4c9d75f00d2eef9e2373dc535d958f3521c6f206f88ad923590a5a637c6ac10de60a624ae4764bbdbccdb4717545f84065fb21400d86c174129637166262989776cd8d9e13c4003a13437372493e1a1380807ae377ac7dd02cba7e1ddc0a960aa53cd3fa43970ff4bff984f3d3d9574e97aa5657fc3799c444ded4e0bca2be85e2aa20ff5e8cd5017114ea025563b2ecdbcb0e233657a4047617f786cdd550da78c13c9d3d88e20453b838999c891d72f4054b6edffcfed4d8010d874a528fe071132a9b53d9b23c0d04b48989ccab8adba3a3ea366d42816f836b775a453a663118b7c4899ff6f5d447ef953110e9eea067803d9bb0586966393b869028393203031ff58a8fed782580cb2938166d9906c26e83562ae5c9f836f2ca3007a8aa223e193d16eaa547e8b6d950747f6049a9636930ae0fc464b5b7621c0c4c743f4fe4cacc413f34fdc2c55b6f660588374eff842ce2fc9f11470c54ea27482160f09a8161860f8e56467926cfa0d8f3029ec649847dd40770aa5e5a20a09882533a57c5bd3c8e4d42d9f6f2b1cc97f6a24b532d1cff3136f78d2c6086b7597416c0f1c2c8408d77466b45b0d4ffef78631ea34d7b45796a7a9759767bbf377970a170485576ff031cff385a7b05e264f2acebf3dcf003f8e12889cb1cf0b686a7eac4e7870bf8d4343e9e0769f3c0baff88a9136eac7394b9c8cfad7d3cb18ff299a175b159048ea8196345ca9f676848dc919f8ece4caddbe7f8e39cae13cfc0070dbb888b7181c61bc5860977b19905a89ff943bbda0569f37e2fcbdeac950b83d10c4b5dcdb62b5034b9b72da23991112e7eb87177c88d12577a9a2082726fa287f0b461de73d6f5f8708e7986220cc47c76a70df9ec8619f3394003ac14684b6d7f58d6f5036b9c43234e040342b69838579cdd18ebbee962c352977d83171ad3fe111b35d078c665a5dfb8da5421e7005a1c8900e8fac9b9e4da6cc2e25c2cb22f3d3ef49e0a207404b86d16f51bd687a05d47a74bf9e4c3c9c2d45237e1b06a4018ccb6df8a4bb58d3333a7c788461f22690479d0d87639788cf0e3d2deea46cf4e4d65afc8bcb7c0c11a586c7838b1cf0a428a8e989b9166a67d81dc44b7aec210d657ab9fba8f5b65adcd25ef5af2e10f3e81c86914afeac00f0e318038d8dd8bb5c138971135cffdc0afe64daffcb6f6035e21520426102af5003bd6f2a9d812a10dbccc5d152e7829a5e49e7bda8c49da891c73deae13c323db0ceacba408a3a324af1edfc23b4988fe6495a3cf442b059c9f66bfab2cf86bd4e017879777cd10f98cddbb7562df7c9e9243b6a04445c1a151814ccba38f336741c331585efdda6aa955215c6c937d061cdc8d45d214e735523c7469534c52ca690cd339b2bbc15cb23525bf73ee2945f5ab8248c86dbfa546bc95fdea450899f1d1e8182cb7efe5b43b8343beef76e985334f37f5d3be3d920b518c2208e9302e8a9d3f4898b80498238f4c7aef9e0a21bca25596a960e1049669a1e74526aff75039d238f01b5d6ff139e8c56b1d2fd37868826ace1b7baaeb8ca26695b2954f02d10807003b049e27e90727bca063d6e42242fd295c746bcf4a5354d170a6a9fb9392733ae3b342f5fc2fdbfdf7ca8a79a6a78178fb0cc30e790f576772ca9777f22ceceea2beca3470fbb98fbf31b68bdc8fb1bfbeeb96b05ccad6e32b354db91343cb472fe8cf096183a76d7e98564b316646956f6314c3d57d8eba9d2e64a660652082a87e7f0fedadeeaef845aab9ff7f988a096de41af06832d9796bff60e71a0fd0ecd68b8deaf42c03285ebf44becfc8ad1a1052544cbfcfda12d2388c92c309ef4beb953993409b259e8dcbf218e9c862b243b04a51925979abf34d17e1b62da2a3cf6dd37e4c6eea35fd7e106a56fcd8fb110cab8732a7bb0c8fac16f3647a528aac97821b04f768e0f0e34639c30453b796308225ec326274f3985ca50bfa1eb159b76010a10b2aead15a1eaa5fc68952e194390256ca396b44505ef1b6f4fe04be86aa9ec720053187a5313887e277b87536cf0dbc87b62da99c4bf1ff9759c0add5eeafe5888f2b629896d359be235c35b7ea61ba87b8d6702eff3e3a0835d64eeb810ed213425efe7896c53bf60c441dc5a45bf06c04af513b3c1d10d88e5eb3d8f0af551c4b6cc771a92926d7b2fb6cafb3399a8b14608be97756013090a42386fc3888ed80756339272995726374d91d0dd2a9a68d29fe3e2deb96fea3e3d0746aef61923005c43bfba0d05e3a7a3b1a4705d090152fafdfd1c0398650f60343efe7d223d97f71bb93f004e7c89594540f644fdaf5b915444ec50adf4b017c3d6daa1a95c47c7b3163207dca65cb0e2463a7be60b4cdae5b3e12b7a42955e1d3de4a671e37c443a5e6addd38440a547589987dd098c35907c898249050a34b66af3000f2d84f6a2d16370b0ef6e76ad3b5612837c534bd62ebee0f8075abd29a84028a766b4b89fdcf770b5bcde43cb98413a927d2b302d608e5fa08a715eba00b4307b9ca1999beceba5dde43dac959726a3c9245b0134621741fdbb15663a737c333e6bec3d4b65a168ddb49cba1b7d8999662456bf0634dac971d7bc2cb298cb1a4c845e9426385f049416051159d7c7d312deb113f004cdf78d73582928cc7da0f21380d9ccf9b13adbc8215fa2769ef1accfc3b3d19c3d3a1c3bde3c28fe15fc6bf712144420f31c39b930ca59fa1a6afd264b23dd87d51335b8dc37639b702e3790b6cdfb98964432d0a2c44fd2d914cc18bffdef787b31e2d67a9151caffffb0b8d285766a80987c01404bc0caab90a2f1a29c71f5cb23503732296568742efadc056c9e49826bf959aee9abc0723af6ad60dd8786ca0ce0b261df18dd5adf6234531ed6cd71aaf174c38f9ec7ea54293e997a68e1814ba7209e0732dc8b889fb058bba404983addf141c1a2067963f1a049ecc8d6847d4b7740f3adc90263f09678a541046d926f05e79445edbcab3660fe8b832a92b472bb93a027702e56d9529dc6259c266076dcd1e80e954631dfd2e1b34b79edd77e0d5207ad4417f3e545d1ed5b661faff472b3757ddd85c2e43d8a766b7842ebd70f394bfb65e745738450b2836bc3c6b0fddae592a73487d8ede09a3654e90c387c3f46ef1fa0b9517ace65eab6324af415955163598ad60b889abd1f2e512c0a116bcb3f2b3abbd13d4aed39becda37178f7df587ecc9211d09a871d1268f1c927fb1d466e4878aba25c657a4ba82239a1894318fe19de14d7206bbb426a4c5dba5c30b4192a14d4bd35993f25febcb48207e5f26915083d8a42aaf1eb1330204d63da97d00726af965de7ea792fd5d8f4eae3d29af7d352597165e0e01c0f04916f6caf0434d55806cbf6c8eef3d64d4832928f73b2238819c05fa3b2330febe30ef035bbfc94e16fe8f132727a85fa4ae5269c1d786ee09262964e61b6c9c2319c77991f51624aae592f2aa9c481ef3613f0c4ba02392822a589bb9ffa76a45707f41261d7e6ed2aa700cb8a14b406829309e298413778ec83104e71db117f01baa25d34c75c7d4109eb641899e38447705f9dac416fca4cfe0ab16d06b1bbd60d6a0ad1d5a0b6b967dc131222dc132718a40df19157d0bb0ece3828ad281ae088886d0b3cc294a632d259e2379a7d9ed857a741767301386d1546f3a58b74da8bed2246da430c248cfd898f94b4e8beae91db8a34dc1ac5c08b45e4eb9e71d48158a76a9c60dd41d6124e0dc0617cb5ff2589d64226b937d6d10b15d1585af32057b18df3f73ccec78ae586dc1a7fe91882bbb5c7f49960bb1f988c52825ceeff94ffa838c3f0c53916b640e61cd5f74ffd06ba1e2898a5f274cd9db9a831d2921fc89b43599ccf0786c6d61e87b31cb865851b51c81282b1b1592483ec08f7f8d60f6003e868367c49eac202ea57fdf69cff369dfe97c8a8fe3aa219374fdee9820d15dac6c71abed76f1ea096cf8ebe1666678554b0da28b8e938a6cec32ab1d6643548903cb6a46bfee3669adf7469a02d3aa12b2c865a2d2482c79a4ad3a62b8f4b69df98f9282d9086c929a0d0145de8c57675390024648dfa1317c4deab662fc2074a52309c81b2a924e9504c1b5e8f90f377fc6987dcf01c62667872246db55b57dc806dbe3d34c046448c601f3b6eaae304fad929b6a3b0a701d7bef5aaf80721a289388c9cc84db834ba3f4a66ed971747d317541a55fff0218ecda25293b1ab998bb1cb75211bbc2479a87340a8a3866d069eec62a320ecd8730d2fda30c4d01d8bf085361a11d25549fe24ff2417db8f50074a0d2f02ddfbbb8616fa34a5e00e905059438be506ca21bf573f4d9b8b544bc70ff02e8d27fdc2e7b91dac9732eb29fb695e8b7c318a852b02327e768405e716f0d878da815d54cd30f65fce972f0277bdb4514ca73ad7d31b13be6feb94988fd292307967f8e2183498697daca08aad35cb7dae097c658f60916dcbade1945bdbffc73a9ad3c10ef2384a987428205181b6fdb6612575ca092013dd9cf56197c814178bfdb40ee2f10ae709ed55491b733f57afdda3141dd0cb5f348297c71834c852fbea5294b93655e48f62b7612d086b08bb2cdbd0636275765118a2c23d36bd9aa7d76721bacd4f13ccfc69162f23d4ca4cde77becde2a3f3b4533712faec67767d353a01f063669edb8cd14760d5c68037ee116b115a1c6ad378d180e97dcaeb5aad8ce2420ec6279bd9669f31d157b21ec85554fe1d06b38f42c3624df9e4fc8c065f430bd7be6c37be3a38c947719288f61325e9c66eac7c4955b8cb63252af349186b72f8b00888f963c355d2642e013210314c39c076cfc411bd24ade09bffc386cf093c0504923c088b0f1ad2db1ba3030e9ac6447b37a314af300a5ddc3229fd362b5c374f2b4fa1b2c9636be2c35d9b59042f80d981d0406741d87d2a9a836173080c01b66de1e8492f35019b52ea1cb88f5f1d3ff6efb926450791abe61a2df3ce0f39247066496493b69cfb54ac5ac3669c7522f541c75a4f7ab6083f1f07fe7f8ed63bb9a9abe7bd12c8274028857c2562551a9996ab73467907cb4c05c40b326a41090877d4ee52d0977710880971fb2be96a54f4c52f9b30ac77e9a2b604c909acfbf97289e2487a316a95dfd758b78766d3ad3de74d111ea4b7fafc91ed865ac9771d721b4504eaa1f7e940cf2fe0153eea1efc3eaecaedeade9cd593604922a56d74249460470106ac80507b25fc046d9b6c3f1f1366faee4647582149020c9454fa8d5696266d547a92db3aa58e2fd0322be713467c066aff017bd6a0cb805e337aaafefac90d31facf67c1e5d1608fbb2f2b3d7a63890415f529471516e8eed56350aaf6568af0b3d55e6067c2a66fd888bd89e684d1988fff7237fb01e3b71409c227d7879811a299863eb073db77253076c8d06bc72e33f2e769870a1ae9ade2a209de949e6aca1d696d4445b5f444785f2dabf3665b267ec57bf6c7984f899ce6e2a89c94db7c4010229befa6761c07a51e3148fc64db1468e2b4215bf1e8dd616e6812154d0754f606dbe0059a63a37eb1ee12e568e005ae234c24916ac2ccb6818ad3ed18a174b5f9fd2b4166c77c7b4741585924d0128798ef7430a82531770fcd1c765b678cf276b0a0cbb09554c48872956c0e4a345e32e8dd0154af859cb725cfcb561620c813eb67a2c19b70c10d129c5b1411b60dbd9b93ba989a5444ccd11df1da566387be88fac82dd3a2902964e7ef303226198d5796e086fbd59149e35c5b63e4b4afbbfa13310b72cde36afa930f576c2cb26dfb4da1926c5b570bc4d0ff335d020ca448e9fb929f9b09c8a4b48fbd0a003800b7df4b5a402328cc4ab98b689605a28323cea2707747377138b84c8966f27ceff61620934083c6f5862f1e557dfab9ca5ae81551b4cfcea4b0b3d01d3a74d759a6afd0ba479cb40a9e17442386d053b4d3d2739a8ac38f8916ceb1a41d5d4c5eea146964df5a88f12d2ffa2b99166afbf2c5e7bf37528277a0c1f8e3d32f071284883a4e4ae38f83769cf7046484ac3b3b3eef6267c92c4604698e44fb76015ceab0f5695be607d579c367103a7553180e46a6357fd5e9a4432cc9a6eb8cb34533849371d1f78b308ef9d5f03f1de78859da605645601564f29523a90cba9c93873485246e39f42567225022e89ad9dc5e9dc421a8589dca483d1661a80563c42b683c7dd32a8d09e3a2076fa445e55853cc10b69c3741faa137f90bdddb1a25b567193b241d476fad539ed6687a9881f3d2cdd641f2cde4024cf535248c68bd13f5fde1a8ba187753d58343c3170fcec3c6ec72d280715b9ff5ce4eaa1cc116b6c65f4e0158d4904fbfa4709d7fce9968dd88475ec37a3ecafc2f964aa513dfb28cf929a046c778f066437251b2233bb69fcf210dc82fcaaeb9177083624ea7740b74e3e16688a5325dd842fb40ea62dd51a9a8f3f3cc148b3b00610b0845f4186aa729a4dc83ce0dd0d04236338c9faf7df1622991cb12f60bf4fec305551b5f47572406fc57fad2cf6c617973656b451c5ee5f1369359aff031d8a075efe4682714ccd2ef2683991f3648dd3a7b598fe92c6347370e550d7fe291cfa05551124edaa4cea4a9088779536ae95f0d4c884e50fa229743dce6fe1bb6d19ebd0e7334a00564f3478b8bf8d794f4606f6f36d339654b15380726dd51ec3bc8c7681fa5e686b9c81af8f474b91a2e2a13aec413cfec6b6c541ccf216df056a6e3712141dd6fa9c8e327b93d19a5fca17bec7dc1673e0bda12fd1f879910121f912a417311c082a7328f330de374f202d1e1a61aafb220e73c6186d231112d1cd228e8ad51adb42d4469278c64a93701c5d7d17432140bb4e7bcf18a6d57de24a835a510cc29d96536503cd18f23f8b13a5d010069d76aa7e1d62888879b49d870ee3d525f8c9aad590c10bcbe2e39bf2361c18212df4fc758c39c953c991d0b28034349acd8c8a354f8fdaebff01a04bc541b0684cdd8b07306c79cacf161936e14117117dee015948c54b626db8c5ed866b15f7a77d2bce3d9c85dbdd0aa3d8f6771d74b2bc00c51ddea1766b7d368a8829ee6d0739650c1c7340a4cfc0b0bdfb57de05b4ad1c07099fbae1febe22f0f0e8f158823b30d1058502140a27ecff5ca6b623b7de837e8ee089382b67350637aa4e3ed9ccf1a5c04cc0aaffe983585976e57853a3cc4725ae66b92eca90eb46b16a4d1d0b4eb64afc11c54e8b3900326adc4b764c76447d45ec928d11a710d2c3b2e30f161d103b040997fde1ebebe10c836a2548a641576af4bcae6b14756f91eadab32b03ba420f2362d48239c097e49ae5510cbf7471d8871ea78a93d83cc90b129130f8a3ca0c3951180529a835e4dacdd5942e76b33a65dd54895e8d714dbc0945e582317d83540444bf59f04b16dc4aba618db0f0010a32a409e19d28446df4c9d7028877974e3eb4ca40eddd105298dd2c6a7d896037ec781fba94679a64306c676e7a8b4af997be11282a9e93c3b8bb7ff9ffb17bf229c37f6d485a16df7811d8740f0d74f36214e6896b4f053dd97f2920a6205b5c42d4847f2d38a98bc50e30c95131ce8a112fb5b1f09275d554223d5ef2175a422aa410ed7cfd23bd720ac73fb92c86c59732607ed5c167704b9e3764df72a5f1e66bc942ba07ed8857fa5f8382c5491f5520233dc80c5babd776abccd695410253d1925326c57d2cd20785543916b74b0c8a64b611ca0630bbcad11224735533ac0b73ceb97f579c07dc12344f755b66ea396357978612855fedd55d4b110d3a37ddc3243f599591d264c0ecb4763b57f8b5ebeb8c7df082b3c1a042338aa5e452d1c1f326d1c8aa4a10dd341317eb6f145602b0f8b1b51e78a34a85b067b2e31a4024e6450ab68202f8ddfe4a83ea407693978da9d19d36e26872a31745b927b216ee958858d12c855953bed6138b637b3b74c30ebc4d93081d170c4875047d984cf4cc396d49ec225f32deb412c6609604078f16251502772a2cb8ce4dbf51a374aa9cc0ce5898a0073f86b5dbc1fa1d5d030887a9f939d8c4cf0f3a232b0d377e238ac56ed7476fc6135bdef1f53c545cab42f892b82bbd708c2686769177811cee5be11c25c2f69b2fa021b06c740a3ff9b3b4811bc5cd474a7226bcb4e86b1b892ca9ce7501b01308b16228c5d114506e7f5b0038975ffaf0a2bcbc3422dd94ba960dc8bd589fee76149b6f45fae8150b1813ccdd9015cbfd399a1723e286e04e4a4e3c5882f7b3bce8c1a58193d5eeee9af56643b751864bf82b643756df40cb2dfaa9822c12eda57f5ecc0e7b47495be08af6e1882916b23586619cfc941588e5090a71ab5a0862c5ccf3e9dc43b312b05cea3bd8d2183e78de9da78ddf8090f3acd165f0fd716136fa6f089e7d9738d9dd3e0a396427881672504fca8eb2fed69c89f644578b2a67334129a3f07b6026cd2396ca4171707883057f97707f53e6bd2a147034754f5e443a4774c567adbd7d549f3cf88ebeae3d2f72af162ea12b935a2261effa7184431292635a06ff8fb41101ccf38ef2dc987332226e20986c5422b60eead51b46a37f0209949607e22aa25c962d538756641acd17f86a293db9696f634a5d28340c51200587273f85100a621f9b2b84baf3769ea1e6c858a6b98cab4b1090be573ff16ccbef97476337c22cc6de1b8292f0d712720b8c4b4008d8c0eb7a601a40232cf7109c69d54833f4b7d06ce43a9fe9bc6e73f1a92dd17fec3d88bcde6ffaf88e906b39aba59a1fd3ff9102c254bb8f9ddd2f383e4ead89cb51c78e4a61c5b4c9e02f2573ec0c9628fa48b4f8f4d6ff70663b8fbb1fe7d5a19ab618c656e362739182fa08b6433f7dc37b9a2f54b8dd362f38ec8a39d1dbcebab6d5d63e11120ff754ac3f10fc3cf96342fc4cbdcd41c74fa4c716c419c5c7bdfa4a72b2c45d66f8e48728a889727bf0b3d87cecb255696c9411833ff736ec081ec12eb339bebe1211c6414352fde3ae5cc8b43132e8b7c0d0108c43fb2ad0bb87153880db24ca8b52e005d3c25a2ad5d575b5f05688a46990a57b4bc5659effa1b2eafcce477c803cc15095d0fe8403371686c02d4fcb3e4d9c7b0d55a3274027faa4bdabd4238a544e13b947bea745b282bbc6c48ecef6a01d972cb28559ae3caeff1ae2d3fdcda109d1209d16bd8693db01a7a1ed07e1d2640c07359fb4fe21dbc31a190f4437bc2b0b1f1b8f75d79ec3d0b2f8dc908bd0e0ce8139be7b30f8910a30e353a14b6e5d975e8cf363ee5b41628fe72138d12f1869f8f1b45b57b98837a3a746287ef77c605497a97abe080fe5b1294ea5f2e2812dca0e609f519cfdfa8e99f7e3fc33aad8b7ee2678716826b2978b93edd53c073ba9dd6763b95c9a6fa738517fd862e7c6f16f9d5faa32a7d22f20f07d03a9c468d083ab6b1d76b10d7d73ff61b0cba7f43cfadcd23cdfc01dcaa0df2e011871530a0a91a3fe9105cb9aaee0bbb129aadfb4807425902c96c5f2ceaaab2584994c9614e7f337b47ffa642bfff1e25f85c88868b768da4f16012aa37619adb68c419251b41a22c84be0fdfa4158e3ab90b5cce7833eb282a57e4f8ada1d03679ceb92103e536e4dc26f53e433e9bfd0fd130c43fd8d958ccf8a8c8dd3e5dd1c72cdc0282cc7ca9c99936fb02ba253a82a6952628e7d336f1df924fc1918bb3de9bd68292e3c9e92c115de8ef6714e3e7968eaed31f04f11ab90f36317411390d63cd3e5905bacfa9e3ba0e3a2219a42a4d74dc197d00b2595fd97a0518bf3f3770e803cdf70bee41a13092f7849bf32de50141562e3f0afe7367d3beafebca6b67c3fbccd569036875e325e58a564f8f66407c8f0eaf2a13e7980d58d0bfcc6efb5dfd7b19a6042a20c309598a5f854fe1ca000328fd89ec66bca998bf5f9b66b257a36198f70829871617c854fa3924f823f8534dff70acdbf7e3b5f89612c3b9f64b7df313a3a6427e67cdfcb29aaa8924261e0513a6d290290d0be71006f295025b67f07a879e0244698732ff41fcb04df90edf13a349a216f5b95f53bb0095a1412b47b962633ffe5b432926859e27f19b8ae8b4a04c137de711bd259ec7c599212da957b5831c7cfc4e5a92b9bf2deacb5967003700758f28fb5188fa7e5a479544575352c978784598bb46c503000847213a46cb8d3cb28e8015b9af9c647fd57eef1f9960317be9008b4af50213e94f22d60da2e173a311b747ee8c6ce8d4c04bd1f793771f77fd853a3fb6cd8c6fb2109e65fbfe52f1eb9cfd352d53b5a0a0be5d1f9045a602a4744c44968b173b8d6e9e5604d2c786167e170b753d292a97932185d593f8fe2f3db5acaedbbf637a9a8a0adbd52f1f0211fccfaff2e97fb0576ea1a56ebc92812bcef3a3ce659129bc37712148bb8869f3a7a5dc993a659124443a70fd57aab17db6bf557c202dc646652af5bbebc107da0b876e2b44400be55092f80781975a91807ec83d3d461a5d386c8905a7ee166f175cf9ced6de89fb10df4d4063230555cc83dbcc20603c444c646a5f3d8d07d3635b99969f938c06370240599edb8e52a1ed89119e3c077e1b241a32d3bedcb11e14b5b0bf26480519dbc0ea2b7ae28a8a75b5077f403855dace355347992e932848c43e8040814a9ac9cd5757c4f929e2980950b76e7969a8783ac41eccc3cd8b86e287d1033f1041d00368146269ef098a7f92da906ee8a29bcbb899626f98d95a7a0291edf90f469c7aaee57fd0bf1b06fe0c532456dc5fcd4ed853ce2ffe3464f41402ad824d58214cf74e5b0d4cbde290b3abcd35f6d2ce19654930a1da58d26da280c4234a4f2f598200f096456ae478ebe9156064169be84de1a5883b5d197d639d4eab6c91cb705fcac5c869768c88aa26df0b2550170e27674ff70b789d73509a41fd0cd1717e1dd2873ac9c731243bf6538727edec701ebb3e09b8ca4d8903fe075fea97a4e7b52c49ddb82b6e7ae320077e6d9b50b14b6cd446063fe754984762ece97a69125898c565db0cd60c672245aedc3f03ccee03acbef2c517c7fc087138783f5761fa947b906e79b67747c62d450e38a9ecab4af390d9eaee7b72fc581d5bae82ddd2539dd61aa4bf0ed1d169cf9464dfd0a180e09e36660b986161f7ad51550b556efdfe14d88618f001e108c5b4cc9fc6c8b7271361e1d98aa9af8c4c40fbf7dde22e81e5e6d6597e4314f87466227bf072bd31d02be0804597c377de4c0316376118eb2030c98b24c6382d8b22e626669d50ad7d8c60a9e72d9728d5a192e2c86151de74003532b7a8eab21d1f66292afacbd5576b8b8322e22b484e91bd3561c210bee14974d9dbc60daec71d8ad6fb0249c758df8e7bff63a6018219b5ec5a9217b75b6ba49aa9b217f629793cfc96d8ed9f95ab6e93c1508feae229ac80b948fdc9a5e11018ea27cd441c0ae7ccafe91fccb3d94565e569c2587805938e2aa0386b02c090197cf0a478f6c17bcaaae98596c6073993d9a378e0b4695797b9d5a24e185e9568b5792baadc60230ecc4a80bc5f3db901c110d46293d1d1e0ce4c257d3318cf0bdfd03644e6bd7ac1c39e3a41837c1f24b8c201a44621ef235c152fac02bbe31f51deddd4fec825863a0fe57b1d2220e85de91d25b8bcc02938d919d897a4b505b27af08a079d517724f261479bb8767136c98eb69e0b57f1368c40092c78f02d24338b6b49bb2a6aa91b1631012ee0079284e7364d6a51b7d00d12ebec31ed187660df27f45e91e80125bb6a1680fd50ba8fa1b100100b7149029ac4540dfe5820e41bb32db75b2815f47774d0aba935e2cd27a79bf6057ab361cd9871d5bfbd3040c42dff62ced2e20b011b1d0a43a12525f96212388ac75e5182496b11fa54e1b4e371077fd746150586b7d3b86f612feb184915f8a984cc9a84b0bd290fd9eb28ad28fa49436f1ea3b02f0fffecbf931804de461c34f4453595b33bed5370637119fb1aefe40f29a5178f11cca79416fed4f08643f7881818d49961a522641c40b152b7c5caf6d39400d03fae651cfffe2de3aeb95f20c107f3bdabbfd8bd4f8e25c8eb8e1645d72214c0e42d39557012e85196bbf208fb84a3e725e1774eb292386cf5e91b05848432e429bad3982b85ca69e9a7e1dde8b8982dace59f778b922dc06f2eb052c3da5a83fecec8a3cabc26597128d11f9be04abd7e1525df5d9b7f881102a8bfeea31c97a6f986d0e6378a935372f870ab64fe2bcb494763faa18cd7cc12a3436c3c5a05954327a959ed1ba54accef0eb98826c18c5c7e673bf0484a59ed27e9373220abc42c62f36b91fd82646e89ed48991b6ee79b665d7dbfd89146b9b14c79309f33f433c042ce297d9b7545bbb4c10815048935bb05120deeddaa1da5640e34e936ef3a0fe225b6a74ebcd9008a3128c7e08ebd2ca5b755c3891713b8b0cbac8d87aaa58b2cdbe9f7aae3b24d43fb051835fe41ff214edd4c18c16b18093498cd2455bb9201a1bba3a97e83b51a8a4992c6529df837fa4f0575a82b5a9af791ae4b5cbf0e4d211a32b24a064ce9853907cdcc16eda5fef8442c71c530e9a69aeb1f873f7947dabc8263a6c55266f82ee40800e564c577b056564cc55985dae881d0c932127d42e9f5a86ba2498f66fa5948a4207d3b9a00de9ce9cde74722b8799af74b307fcb7e91a96db20c70911084c0345bb05577380eb317e5bfb6cd6308ae917edb2caadace6e46f6940afcdef86cd511422c0fe989565b294fd832fc5b014b9bb97d17e592a22f521b36f30dfa3070a328a64b4394dacb09d2ee644e90806b488617a2c372617029b3d67ac27df01f70c89cca122b79cdbd1c597cee18cc480ddc8a7d08ac12e6a3a323f0a40f974cba8ba563fc1db1c4286fdf61e049016e796cc5bfb647017253079f7a7675eb048f6eb8fdb81c4c1f08eceb4e38ce8affbe6c6248f19e6877e8c90ac55fe198e493d728de1b3002e29d7b2b9ff8078508200ee2bfc72605e45172d801c1c49f616a9c5aafa473a83e05e1dc2b45e6859c84b97cd9602922f8343c29658730927473d45b312eee2339f00844adcb118fdfcd78db1ea975726b2c88e3bb8d9c5968b51853e53526710c6f001c3b2482f454b8bf66f220ac0dc706f9558c307ca87130a63fb1f7659ca4601f7191365d9aa1cdaa7db3212b5e47046a8db403a163fd3daf9a21136f7117b9d3a1fb6c7d4c542e14b136737d7c59080cab9d2502a1a684c9f7da184469acbfded50cbfb62f3fe5a2763e9ac81d44c1f5363009032e0e63143dc9a3d7193027feb465e1f06fa39ff8e2f796cdbd6618f1f6469bc91ffc4f0c956f3990d222b30aba6683193dc844d0c42aa4c4722a25ed4a923e56f165fef4d606c482ea8cb46d9dd5498456c40e9ede8e606de6ebe08dc3d20a6e5fedeb899a57df7fd75d6ac404811b31142e834811dade9225d2030ae1450d888e15ff77dbdf53c7b56ff9d0750b84244ac04859142eeb7994d35d5a9b1f827c2417d493a1f4739e647a422f6cc51e921cdfc57d4d47fc4e142364c92c1ef7df6237e6dd7f33ddb37af0c6a8b76a57c0fc301e1e3a1b9e9fa8a298ff7f6bc4dfe5c333a8b96bc0c798dcefdcd5f0d9af63d99090040e84649b56beff25ccb84208ee3cbfd069949997529be0fd013a41c10134542394448cfa17dd4ad94ee18c53d385c5819165bf794cd5008d95322b0b9e2fe8a71ee49a52531f34500ff39191d71ef7070e64af19e2486418a5be75f1a59aad1bb5ed3c23886c61048a9ab2405d64f5cb622d553cf4ef1575293e108036f854660ea78cc2ace84fdea4fd6b95c4404c35d1ce1f583001ecca158be7b9e046216bef4ffde8da96604de19fd92db90ed8626bdf86e685d9a6d626a09b19b597d0c5819a3cec067280dad0b2ab02bf055e011f8f41f4e84e7160a1f948b891bf0729c9023b53771a34860308b6c5fd0e70fc4cc950ecc174c0fdce3879500dd0e587b544a1f95bf26818ba2afcb75162c3b4750d700920ce6f8d61ab98f5eaf46b99cbebc3d6ced43aaa2d23657a45c2140dad5ae299f3ffc6654d278f21af70bd00b07af8b1f8541cdab741e105dce332cc0e97669a308db433b7110a481e78b9ecf4531218b96add02eb96df8484461d966a4189bd0fb3f4c50a9c9798e495ee2ea35a54805a4cba9a410d62eb05ce96a49e0601f5a8fcb5ee1eeb608bd6d762f4bdbfb093456d2244909c7f1f21b1a2f620493ca030b85168734490182db7ff3eebd1880cc4fdd0d23e879c74c4ff1141eb5a0a02ba05c6194e93fc65e5c2ca86628cdcd31a02780a107091f5bd26dc616baba1b1d12ae4245498f1125c838107d3b9df6f419e65c1e653507622c079e4bbf267d6de863e66b9cc0b4313aad99462c870a90adcb1d7ec60221820e0d679fa9f54dac212d2fdd112d8e36004b972171cc9963b7eadd245157cdc103f05dbc49a9494dbf3528a95032f153f0727acee74551c09e5d17c11ba3cadb6be765a3150e81302a1fefb3f1e8eedee5f3f8aeaa1b459870697b30d79413237202738ffde87604b3517b12355263c4e31cbaf8a569b22eafbd9d0f9cdcc59a55bc302b7c24ab57ee2e65884d763c5a1efb8c9086ebf6e46bcc85f7b876690e474daf5bdaafd2ac530e4f392d4dd82e6bea56047cd1adf0e530d72998a4fa8aa8db2e563c1ef0ba3dcf8052309c84688aa216fe1050861c65014f99fd73c5d9439b58d3ab37d8bc36f2d53f497d6efe93f9bd8dbe0607a13f6db7717600b981ab9f170fa052a7f8eafff39655619c3238ba56db6f111103e7fc49585de519ef7ded4d716b6d3768c1c198d4511ad41df82428c0e49220e7ad97736ec45fc7b7b0134aaf2c0c264a97ef9a2108ad501ee85441e52a44628543e5c0d037b397ff8880f4599f8c19d154c79bb0e343af0286737b8b84afb7a263ff79083864094ba7b5faf0c08cbc93a2bd5c1a13c040c77965cb7fc85f9e329b457c4b76ca47ee0cceff70d58138e0c7a994519c2bd8fc3f845c0a7a9a598c9c879ed26be551f99c0793f4f07e742907f466dbf2a5fe27cb8079713fc891e9735da33e69bc32f9d2f609af02a9709645e40e9973cf0daae856b342ad2ebf3c12f956204710abc90b0de6058512c0eb9f1cdb144b001fee03743e0dddb8eaac4718e52b7907c5910f1f6346b4386c105b21376ca452f39d4f9ffa0274e27e66e6a583032a4b11c00483bf9f9cf42166420d2efbf23a5c46e6942accc33526828754584747dd1ac333037e36e75d410a7c02a57168107d3dfd73d0e00d87a308e5d104f5bfd0f52891a4a2130f75d8fc946f87d20df5b617902279faa2702179f34580a50115779b061ebb4efb7e0931d6451edde65d5a07130c190f8654c07a8ddc7fd2ab21b76d6aaf725785efdf9a5500ef6db95482b52d72f75ab305a77dbdac989a7dca2826a71030182cb817f3e9518a9d03ffb4c78f2439add70e164e788f3e1f2e3f6419a68b4c91418c637efb61788181f64826f6703d8cbce00eb150e6dbac05432a2d42cdbd16ed0737d79df36d751db47df0bdcef6fce0da77036c07fe4600e68a63517da61d1919354d27f7f07929755b47257b618a6ba90ce99b6c1131153a59804d5554fb0853a66d06202132dbe8fc778d943bbb9a6371c59758c993801d35799998397cda6bbcc5ac6fbc3ba15f81e7047624191afb01217cfb820520fc2897dd075b75a1509a7e5ba0b73271982a54e586d6f5e567dbeb9a191775c085525bdf4e3d7c04b0c4181b0831db64be8bfa612bc3e8b03976dbb5113641d8db7d386c9402e2e483343ef348fc1245919e83a97a67e4106a2a517047ee64fb1d29aa8e72a8c647e3165e94acd99177fe8c53fb78a49b5389823c6659f6efda0de7b8eca0f5bdf4a72cec990e30de9db9a89c992ccb8fe863440af1ef1cfa98e35ed4faa15c8a063cd2a48c3d061a8a5ff8743b320524c16f308c2cc94eb4af3d80a38fbfa0b03b94e9ac53be216eeca26fb778860463ba65266ca5c5848c5d82d27ad6409b5e81517ea742c1c1b004205d585c0a2214e3eb990ae3c97d3314dbe0870a042a431f51f798b5df6eb6273358de25a9a19f2338c5f81f4631426960066f39daf90629718635a2e2001c90b92da74ea13b03af654fa18c54f59062c34f6a577d5127b391ca3f1651199f3cfa26f1ac0cc619797a6cb78488f98a6043168b09aeb11c13ce1a4765d69e2032e8f62c7b9cbb6184617e3cb7e92f516ec096986d1689b06c84cb12eca7e9f99931dc869b4cf3244eff1b672fbcdf9c7d57be201b3e8fca0f4fb615246d08c657d0f9da9ae72925dd049a654c0da139ab2a966569df42446a2cdf9972a8dbbbb36c09a8953755974160345b69edca3529b3f111c113a80ca1e58f27623e1ddd77bafa3a0f3be9c2c57738387ec2a311e20d48d5d977722c7de9d69d19c0bef4830a76059f7691bcb89393b612cb7b39c577569aa8a8bd6ae74b7ebadd2b7536dd7e1b7d25b14fa63759818f081c9624afd03e80b1d72eb882da2add4891a90b8d9bd12c0d03a2acbf9919132341ef9a0b14a4048f0f2c60eae491d38ff452d41e0519739097cfbc2021083931badce189e8be50cbea3606077b31fb97c3fbe149e3e8284d70e7936104a5a6a7e2ef5934c12bd80fb9ffdd6e75f33b6e74eb988118cab2daf5c542ac92d7062e7f18d953cabbca7d8d43fb7780a6557a4be1bcc6152a54112441434d83a8df80638b19f26265bb78f94c43b880684c5b172e62b1dcc96843c4d4c798373ec51ee81c518a3cc6a5f494a4dc6615d6eddc824dfd51397e610ac8ac1b191a7ecc614e4bfab19e7ff5bb346ca62eb366db54aa82b479998226666a6ee9dec3df87486ad4698a36a4b123c4fd91ab0c2a481161ffb63d53e6377c0c8fb966dd55e7027dcca9c8bc7f8ffa05466f860da9d898046d7c09bdcafe51efe708c5d962d49783a7e74d55c28ff8583f060ac89786eddb3e477371deeebbf07b1678b2302262d4aefa423784997df88e88f8993082520b206b57e0b0d6fd54f91a2bd7d3a098b07713b8add3817849fff265fa3bc4444bf5b61f2becb822a6d9de62470d03dd7b67a3c7ebf6233d686d8baf288bb6c1fcc3600510f763e8d5fa9e4f9057f2c409211270bfa015f22917b4e305b2b195290995795bed133192308329047a306fd810af77cd06a784fda3f8546f2227436593100c4a9bb370841f8cc7c548cf9402bf41653cfcdeb40ee112027abc02c26baa4f0e7cbbbe0ad036607df4cd4672f40e15716ee490e70de8c1ab63359168ecce88b492eca6e006e677b2331aa5aba2438233e930df5d92501cbdde74de2f2c4bb93322c4d1fb057632e778fd85af20299ca2dc484304e02c27d2795b02dba852ad1f276839ac48edd76d9730016bdd9b611b3d695b2fbbb8a8f36561a35b15f3768e8c093d6e996b437c3a2ca1a80445a91689c7a350e4de529bc1d9589d97cfa33497571de9064939af4c88980d76479d4d28da730a671f572b51d8727bf4b5ec7d325f6eae326accaba9543667436664e35a67ac174bbd05bcdc98c497bf36b10da9a6874a2f61636a27ff5b3d2c8dbf072eefa12aef309619b86b2c645541f85d100d8e8bb5288e3f2327b63f0baae7727a4bb58892c015854e9ed284eade1616b24fda23f0c354663666284bc749a013301941574abba6f87189ea5935a8fa4bcdd03def29b6f8144b34ceef26ff1a595c57bc70db9f13a744957de6638be6c0fc4a7ff829276e6cc2e14b816dbc13d90b3438c98249add72f8f166997e5dfa1cbda7cd740cdc748092f72efd9f77e008ac0014fb570e995d8e3aefb665a0752007de30feace9dc2a90e5de85f17e341cf7502934a0ff1684ed26c78722bda5073755d77bfe6f2fc265c943e60bfe4391cb1630aaa06e09d4113df5e6c107ee61a449436aab49810cd79c1da1807486cd5753cd73a16151e673f4fb7bb28dcda60da554d77f4b38fb0fa416fcfbbb0ef38d4cfa4c1204294aa5d93c5a25bf69bb5e53c3cedc7c2b437d4da32a3243c429f0dbb8e63657651dd71190f830fcd1b3cce6ea052fd5189c5617b5879a3b1eedca0e38b3410bddec94bda7bf1e771670fbed603cca5d214b34d24a1511c631388b337cc63e154ef55b5366a7a586569bbe226bf8cac3fadcabf1e94db8f554a2d815722c1b65c48a11164d384d1878fcae0e02720adc5fbe87974528d219290dc3345c35f91e59353b1e3e89be8177b265db7fee0f468466056cf7b9107c4eefc530cea4d9bc05bdfa588801396995b7fe53e5a69a28d85fd9f7218a68b74d3549539e65a3693c77c4069e81decc53c950184ff5f30cec08fc39ba072e8d383fe12e1b2c8d21a92f50385ba1962a9a7209a8d2fd6c2fa7022ba7482211a7a1d056d7edec457642d33c1a6f49e68416bd36ce618ab57bc247c36e5736a7aad701aa4176725788935e6b7976b4a6c6a120926bef5245fb7a9a6880344e39aa1165ff9c637fc04238de6ccceeba6d3ae3d119f1f49b37a9ee6c9b97148045686977f2cd5c08b70ad9da6ae8116481d8b1b6fe05e59a297bbfdd11cc991069e36b0bde84fa99f8f6f5a45588b83f5f32bcfdacea1e07c66c21b9787c8d3e40ecf5dcb91da213ebccbcb305cbc7a8f39c661a1ee2fe9daf2e2d82642688c3fa1c48796bb741859e30bcb9cac6800d156ba090cb9f0060e7d6fcb971be70d0e146732415262a7f987c8c065bcf4623114069b1e7c2301799aa6eb8d3ffd2ad2f5d41efd591a208e6171835ac577fed9f64edd0e5835ff7ef1326ac4142282e1d4661bbaf97d20797f707ad43e552467ebbcee9a0d8ef947244b35e2dbe22007816cb6aa0dfc83367aa361b99feb2e63cfa3920c4175db73f3266a88d0d42cbca9dbd8693327eea7db315b3f641db8b9cacd87e80e86aa5bb71d319761d8b27591cb88e6bc6a9918fc6dca3b4b2a80dfe4ee06115f2441f453f859a0469c6f01b41ae8f36f3e7488bba14e1aec92a46dcd75584823842a2232dee915a038732248f76fac68e53a43dcdb62db698c688fadaef0ecbb41f2ed9c44b6e3a197db803c5397521d820712e5c82da9b69b0d0a40bfe97615962e7955b7d939126246974611df597f63dd04e68a7f8c5181f0baf7d99f0fe79435d719f235c29c06360b92a713456042b0acc7d0d98d4ecdecafa7c09699c5454cbb3765f764684759d6998c06bcab3cbbf150e0c1ad1a0c554c6e0a6bf51ad0b091dd51c155bb0adfa15c42d5f83c346aba3caee054dbfedf81444ef968441fd5f6f761adb5ca71c4e65f2ef73444c67fd560159ab8a02c747095b72de119662a99c9a5088f01d8be4051d404323f3370629bd507a8ee0400bf901febe7f12ed0b987800a5b72daf7ac0b73c1634b7bae07ef34122fa098be15f57b647e036d2bc3e9936db2dcd7936640437dc93e36fe26878b1c5673289bbd83a46f065ef49adb089bfc5c979b8b29b292d0b02b539f6c873850986ab4a86d36a12e36c88b8396e3df02a35ec19335e74d66aa17308efa6bfa537148101bd1f6c11b9cdef889327f8120c36e3f054b5f9a3ef8526afc3012a851a57455f0b3cde1c2f89eedfa9f1ae46450de78de3afa1c1c3085b57310386ab248ad5a7746e306a7758c5cac98e98b1f802f3ae7cee53da7f2e8152a6407aca26e418a23e11d51466ea5eac989f9daf15472daf94840cabc513ff3e238a2751c00a4768b5ece7d82bc052ed99f50d0821088eb5fe9a1416d4e5ff94d1950a64fbf618628d71d6748507df66b98f35b3eb535bc6ea89d1c9cdc3b5a4da893e7cfb012cbb5b519b23fa53e1365c1edd41d86e8c3ac16735c29f53db6fa583add395144c6c84c21140d8efb513ace2677954d192669dc92023d977b35095dc7e363944c6f1e21961ec8e97780b44970970494b993252b8cb6d5349b63378748bb07c8b135319249b430333288595c17a18f5a920f6e60d48ed4c5d5eae38857618a7664a34a1d26543339edbb439eae2957bd66af4ed66d42bc73bd23b382fcd0782d6a6ecd6461dedab307bef6a41af1aa44173b93752c2257b187114c6a73ed835539738a774cd6d8a31a562bbaf99011aebd9c6787b356b8077c7af4e3bb73e54c9f5adad71b7c2e61139cada1dbf452148a6de4c8fde96bec9cceadaeaf48963cccd03f1a2ccb9cfe4b4c6a040e1b5b7dd5a473759a3f8f01b2740e03f49fdbd93ad88a69feda864b10438549f2d5a4ebc64101046becc9b0ab4780ec0f1c2607bb817d7bc198d58a6ffb125a0496962be1d060856bbc1aec6df9707239b565c1bc5dc3ef8319503d3acd110dcf5a07045b433d1fbb8e6c85bee883ea9c7c142b20e7a35474956a3c15c078acb653a7b412383d890172a75a641ef166638b87e4fb871b8197d4849a66c0cd42e726adfc085f6ee626b502d9cea0f7ebb01aed61f153a74e6b21a5dc001adab2c23ac46ff032571b61d9fd2533a8afd5fd9a48f0b50520c9d09c336122a100ba06557392d5a555a7e25bece13e180d742c1fc792b68c79539722b29fc01be6a81beca01c609cf5ac6ed3f6338b1ecc3e080989433e22869efb5153d38aa21b7fe90e994d40412afc7c2c8b79aa642c8010b928455ff94541688930d9556c587df81c67f241135ec460fa64236ec2fb67a1c5d6aa6f28ff0f9e631d40dd107c83e5ec1f50cd76885003dc84adb98d838a50dd106d3dd8380a37e4bf4713f8437b541f13853089a4fc7199d97d085993c56e8f87489d6cf404f0fa14940e4aac1dae726810cda03df195eac30e73e4241d28ce6f2a285303e9dfc90221e0dc672b996dd307d75fccbba5bfb66d430a03c2717b72fe0e8525887718060f7ed39eb0e14ef5a0251ed224eef52d16bbb506ca7f786919b770cf26cb4d7979ee8c4706a2c2872b1ca6a0662f468b9ad56a215098504e130d3408f684cdcff1f8118aa3f674f1b229072a9421224adfebaae654526c9b6a21fe35b37664c2b2e04f19cc2ab808c465c0f1731ff452996354263785a4b01aa516ff84c5e3555d89b41a5011c1c7181c7631fa11597970faa9a41063ccd8293e9975049ffc0267f3df8d3fa545620777a849883999100767bf26ff5ce2547c9026668b8ae15f41d9dd0d669067cbf3e23e4a597ec8d180be24032dcac4c7a9e3ec1daf158641ce2a824644531a9bfa0d046a1ca1399687d1630a6af93c6ab3deacbd1cf463f8d3b18b84911e0bc9703fce98ba01ef40e65a58a146d07537ada115be1cf4f51493d57f468f30b7a5749f18dfb954778c9f9e6b137bd4d5b26e0c55bdbff94fa2550b8216c388ddeb6b773c738e2c0f475b77683a0a2b509a4cd610419c7ea9131241c4bff98d3ab8ba3c4598ea752a6ded8d946e53cd3647ca476094e31e9d61080fd4f60584ce32ff06c5d9e41aa5160458febe281440feccdb2bc9e1565ca3d3552daa08f83938ffc3d2c3936c46530f7f004d4ea35955f07a9da610ca7a6140fd1ef78b81776bdf1cca46368ed49a32ceb8ed802d88bc1f52dcc401ec4aa0440209996e507e741c26c5593ecc7bab65a23a77d09f79bef9c32d334d3f4d3cc29fecaa68b4491fd35db58379f5abaa3a6ca2c9b8ed4ae55b27d4cdea56d9604a8ea03357a32a78ab2c9b77b9d28abdd9ab7cbdd401a3781d54bd98fb29a37b7daf773f8a59b11191b1e1da290ea780699170698f91aebc87f49dbcae8af93fa57d86aed921e8bcc907a80189fe2cbc3d613286af264065334cdf7c4f6c1d14f1edb70b809bbfaf4d49a035df4269c541a60013e63cd77b7437911ebd1a0f9e202ab7eaa825976137f54b47c74c8899bede1865e9615f5baf7ff4ae482b32730e9fe400cc0fec20d22605e8d9c60d67321c69d4296edadf9cb0b6c39e4c07468e1446ee036674dc7424892c83d5fd5d0f5ff92024fe158c94ca58a729726a58a2f1c78ab663ca085ed8b7d08d73cff5f6c907981564ef95bd2095ec99a36b4ba68c6813a1a278fdd1aa87d716c15dddc3c33737216702dcc25b92a7d4363e5d825d5d5922eb2062facf8ce7a14e7eae69a44abf093b0fffa3ac221ed9981f04ba2ebaa24584035ae18ee4c3eb04d987444b7b914598973c055985d79aafd4d2b42d5e5f4c3f511a0aa63f25fbed47e2544bb4a2c0400070fef9f01812710cfaed3664d26f02467c2106fc7111d48e366e7fee9186a2c5b822f36b6eb060a46c9525771c9ef65b185029e36899ff82f5e60e164690b511927e1b4bf2cf693f402ca192ed3aa6d065a4805dd3d0e32cd40994e4a5a4a8201f44007f5859114f0e76e5a2dd47cec0c8aab7ef4fbae5d6ccb22881e47901f54ec9aca46bf10b6a8c6985862d91cba692f67ffe0bd830fbb931321c3f8da6dc72fee4c6122b0697fe01ead8313523cf8fdb87ed2f6f274d5a35d973a5d0fa63e9c124e1b9ba5ecd93fca23683224cb9582fbd01d6d4b7df3668f39f8f272c7c47c82c6ee78951a09232be301bf981030035a3b5e6d8faef0e9cac05e756932ed743f4db15bb614332d5c77308d38955ee7b9f86164ea7785a974d14cd68f2c2d046660aac4beb450d651e3392a0d354c9d8953b85c009c849b8b4aba599cadb6cc936deb54e7aa98695d2fc3a30c45bd7eabbfc5bb68a034587ad8a337b4cde3c30ad5a8804d9033d730c061cbb037c97ca5f3c769fc0321f75178d4f7f1fb7979c39bbc6501e2c80176539f35f93df0ebd067834b9012f12e8ddffaf128b6336a56b7f99b8da5deb4a18441cd2f96b41648e7824792275537c38beab62d4962d43472498f0c9185515e36774cdd87be5c0b7332573c3261e320b8d99ebb05207daa073fdc362148208ccb133d7c05f6ab80603d69dd2820007bed019084e520d397a793fb7239b3621342b14a53b20c8511deabf92db89e5bf291b4ebf074fa2e10eaf9c7c145a2ab756da6cc353e720b61af3373aaa3d2830331a4716a22afedadef1a512f2aefece9a44696904db7334ebf4080619151724e0b39558bd046d37629472800c6b0f17034ec4c8f0d1f103e3a22c088b62638c94d1e4d2fec110997df53d02f221751e31f854183e3ffa35cb29824488a0193414c4b512da3e0c5422ce1a1ba2f2e3aa23e47ac3e73394cba94171dc8f6689be8ba473fc4f0c791aff140e4dcbf510d3001a26b6837a5a0340ddc191e56fb45e50e3dbd01b54b82a48f076c8ea0c25c783754f11695b864bedde878c83c73b760063254ceaf2c93d8859338e246c1d4421eed095e95e892360ad65b8b29189dc5b4a49bac4885177a83ae4563eb07601cbff3296f76fdb5d15c7654f7f124eb2b89ff52b9b43bf383d595f5a38d227720bb977c93388e14d4c78470a4f62958c74b2a0c8829dffa2b1f08e93e92ce4fc3b8cbd0ef5c65fcff0f6b5582f85832b5ff4a7f4ab5d2e2929d9ba69a7bc5c01fcbd4cedf7754ccf9db0b8bb363d1776fc9afbc3f1ae1e745147a4216c2c3811cf66c8ac18fcb4a16d529764f9941083415354ee78901d57d0f05b9cc6490895d5e30568932a821ed09a53855e579b26768c667f70746f114868efdf9f94786b9e0e0b61e366142b2499fa7208ed5a1b8c43a15e74844e5323964c50b2bae30a30816ba02e475e2869ffe9877c931ef3dddab795d5a7594735d934691f40dffaa7a8be0c940c1d2bfe7d5776bbd422c0f7b8ea84b8b146dffa412caa58725564df85e1d1aac2ebff4b42961415c0f43eb9e85bd7ee7a2f238702ee1d87cfa45196d6b5eac2129ac49990594756e128e2ad259249c724716017c851f7aa1ce44d699d334d97f73247d22221d59fb936e4e0187b7e0700d1eb1ceaa239effa730717b389d383bb3ac636e28b14cf42a1a44806d9f2fb86fb75eccfc94b5b4fc3877091a0f4da36e05fb43ea17fdaa075213b4a0c6d3cee14ec94428d7e11e6af1d0f23b8ef46200ed5ea378a6386820cf3e9fc175184aa6ad0893e4ba86cc86f3ab558a2dee907eabaddeecf394f85cfc254c76fa05b9e9b05848ff3452c307c640d634545e74485e0b1529d885a25141caae4b8023168829efc83a533d58ab5f965ca102a1d897dd9d5e73b7ca6db8ea4d18579de5efcef670a3a37d298b83e9bf7871a609bc9aef57ac39840c6ae0b242b422b02890274a3343f7d24a38c3bed1e8a11068260dab2c105525eae63f75055aa71a6d9a06492afedc6fc80cb7c3a3d39d3e56d6542f4bc7056c02c9b959bd6eec1e7cc977358ff3b733865cfeb71575b7628e04a226804636b8866641a9c55562697dc648f1a7fc4e0fd721d01bbf6238c2163de243ebdfd7b94e5899d9ff9fc247e963a7629341b41489047c1c966b133431b38a0b3bdc4e56cb9a5a7403ad198e2b4addf85358503786d16297b36feade215aae678fd66c9e78e4e821ed5fedd5bbd57e065b97c1c2d0e978ccac6550f28bb6f1d5a012a7db441d4e2665f6d394f633a6aece33947c1ef2a544cd5f18c6831672a2b229bca4efc2cfcef6b312168ba8567fcb65b1765eb9e63eca3eb8e947a4ffa903c51389273e3affd0139a93f5d02d552653d09a0da9034469b7d7f85598c9587371aa9d2d70e200b3f43e6b60b333e977853c0338731409fc37a2bf85fb4848a3ca87e7ff8d5996621ef3f273ea4fedd04e713aa44a959aff48c3eea379699f0f4ea9534243cb6d7afe5d7eb35e968943ad60098f54240d0e4380d53b4d3ba5a33825db8cbd04a8fa8a30d53ff66fbc636da7d3e2b788460aa61067d43992fcd6b711b6905fe229b3e223346b361d4a5a02931156ccde7b782d72b5fb9f4efe5fe4f1008c3e4f651939453d4e438869cc4b778978dd4b7fbb9a95813a6b2a0e54ab2aee31466708bc874b201014f9c8f4fa5a2bcfbf15a9a8bfd1820268a613ad858880aefd80a77623d27ef3190483a427619427dc42b46d7c0e1c681c184b0618487689b17c742844d02d194dc7c25993c376d7b857f6567919405a254c1d4300f2edeca9cb46e711feef9fd28de3353de71072e70e3af10fad5f0b544b6e66e59891fdf5f25774002232a02f9f3c3292ba679dbc97dd4c8b28d8deab0290569425da3c061a9d16b7fea661d188686a803daea0a14d92173b197900f3b9f4b5ae241d9e309b22f14b62fb7e560b9dc34516d69cfce9246a59bfd2e34141f43ca2aa3ebbb44328025d7d65fab758baf06b92be12b1aef01a3fb242a7abb35d155fd517d0b8a8e3d4784c7f355943aa6087675524bbdd202025d2ed799c0cb70c97f5bd7ef7dbc55145868b702b0546c3960f09962fca741bc09b41b136aa04b5ad145950e96b6cb221dd61a7f498a51295e2be71aae4eb871b4a49dea7fa22d0f7df215e45ab29eb2b59a14d72fb522f7a072ac1803e9e5861d8451faa22c4eb68ee01779dbcb6b4121b3ae6372084dc1b674b96d08e55190e264a59e68f8ded75d5b59e9ad8923d99f8e736e0e8252d4ae21ef2d33ae3caebada1868b2a69926f54d6c5645c4bdd0a389f4951a341c125cdde70b377a3d265a6abd2b494ddf81d664060e1dc9cefbd70d71238770388e5f8ae16bc0bf990ab20c8d1476118e2b1fae7a04985e2c7bb15e24acc6ccedf4932b682ef060c4bb453aa2e4e837c96f60f1ef75209736660f2fb7f9601342714d90d40c92c1d305bec5cc5fda462fd8ddf4bfcf17008066ad1bdd0163ac83c6c408023e213560ee3307199f760985962a78a801aa043fc57cd2ecdf84be139b7199771a3231abfebe48d56a2a380ed29860dc4e4c5ffac28783a18695f672cb37b2d26bde2be3e11a58663fb4469578a7da5cf9978f877fca7e5dd81333188ec5067452ed10d23cc57dbbf5325420124597f65eb7e6f97bd244fff5004e79f1e42f952c0d42564cc8252e6f0a2573a2d0da16190fe3af0fe8a6657a3782e339b41110add4641a3fe816ff38447236f6287d579b2685c4287ff4cd253f69236aaa24d705e7d8c8b1d9ee722d8f443ae8a1b38d0785a7ba4be6eb5e8066fa21c9e2629b479d3684a5fe61edf6fe6c8373eced0f3105f8948c7e7d7bb54ff9008238d960b9df2d996c068576a48a9b901ea170031b03fb12cda15dd67ce8c0b56bdc89fce91a9aa0f2d2f3defeadb9b3400fd93b7652fe8e6ba581e79212e7b64ab0ca1cd9d7c48bf593733749d71e4ee214023442cc6ea784536163fcc92090370f378f48a742f27fb3cb34172c466d9d008d4f29cb8c63d430d46cf60594ca5c1e29564ba31ad90dd79d7bf02715f734f94f4aa43e32cda03af7a4f4f1a194d6cec0bb8e195b0b86c49537a83e86ec663cdf3814a96cedcffce41701ba4a97ca0ab38a50b453a414e7edcdc192165833ad3f0d8214c20f4b2d8bd9c844aa19bc2803eb012994752ff50f5eef63b4b1eb5c83c016fcac7c0973abe29cbc98fcadc5655807c952868abf933201ce4adf80ebd929771b0e6b4fb7f145fd5f743ee29c0e21c624cd655d8e04969db0053d7e0a398f79ff2aec2df2d6bebaf6f24ace28de90b8cc7b23a83d715d35b0f53dda1b85bd0d90e1bde5fc0a1219f2336bd1fe4b8ca3a88fb3e83e90bb7690774437debdec1db79beaebdc9d8b75c2335c63675fb47e3dc802ded4ad22665d3150134ef456405182526497c16e9b71f3a5e7da37575933db0e18c7e3e04c3901f7287fee71bbe7e28a59afbcdc36df666333c547319881ab978da1198cde70c7c69466fedb673744dcabfa9a2d114d9322bedb23a137db9666b3f9ec3074846bdedd32e42d0788160f5d7b1931a4579b5bf2a425cb7accc107f29734ddf75a10b94c369ec620fd8a3e1c4f9a59ed77dcbbd0cb1e8b7ce23c8122ca611f5fba97b87e2f3bcfcbe6b91ab5a01b9363504a05085206e7d57d9715d09155a95d9a0d29d4f14898a47dd1d63bfec66d710974c8524116b4a76d2572046736885a5ef5c6b40bda0c2409e0c53d13b5a8806e0479390c3e5ed1a76c6a08537056e701266cc5dc5b931bf63301c1f1a93d65550469b1f988c7bcbda4877ee6ca79f0e200a3176b4de1273d3dfb2757be2448aa9c7b8cecfdb46655eb193787a42fb2cac926bce611d1354e6d67cc4eb91f2d70ce31fc9d8b16683baf57960fb0e1f1933e0aed081fa8e14f7acc9f1862442bc5754bf7fc6ea98bbcc1f1ba115c53e8d0cbcdd3798983ba7ba57602892791229c677dfdabcca7b94156030f46245d13e7d8e98b5b06c9ac1572dcbc570091a922a1d254f39358fccdf04aa90d367c1cbc4cad9f118b92c86d7d0ca952279c12e505c4539fa1307d6aa0e066429f36e05cf8fcfd9d8afe50131c84ba46d8d0e4f65b08b2af929eeb869645624828ccce96f8d5ba44ac27a151077256619e46b0211f71c711fe5f5478c164708ce42b9166908f12802624389d1e9674af64c963ad50426828e88a89383c4a42d05219b95e20095db5c59fb7ae9999c4c443c70f29026475d47767de4cb9469341c4249bd3168fbe9e489f0087d2dcbae9580590faa8445d808ff8509ce7eb5f08dc631cbbdd2c5036961185f4ef0873dcaac77a105763af581d62e916dd60add34a28aaa12b47d5cb7fad8c2d07407f643743ac9b398a192b0f593bee4a9b2f9af766ee9aab90df827c3316d5565a2d3414e8c3a67915d1217b5941360f6de7f1ed8537a8ecee78c178625e99bd442c4eaefa1d43c22799828f8279f814189735a45620640b7b29974098d4dc978b561fd9d9cd8b3e642c75defa2ad8127a8eb3b57ca6ed3fb3f5a94f178c3d4e085305944b27bfa1a80a5405a504ce4119eb748b9c614f4a0e5e38fb0b6709f63c41995e70b9ae74807d6f89ec66762dad42bd3c36a46b30647884aeb83ea8cb35f40825ae66a2dc8bb507ce512fb9df98c37e951b3df7cd4b441d9aa656c798f8ffd3890afa8575b1c61f45f086cf94cec2117d528ef2ede5f34128c3c2b51817ea0d8457e0b6fd3ef57f2f0d84a6849785c8dee40c93a96dea9d52310759536556eebdf9df03f9f9919c407b3ed431689d6c96af0225e9b395f39394c02c73f6e5a18aae77b8ae45e42d9d141752e4c896097e86d31dd876eecae655ad2e1892f734d162dc042ee221fdd815d3982ef69c3147b11490d58b1ed35a9589d0a779f17b2169d645f214f39ae0318784ff16c59b8fd34bd4772ce167850b45351685ae12ae25a39eea0ea5176fc3f67625564814ea68ce2560ba8137feb856c054205b643dc31898fa5109db7ff12276d0e3764c50ba82590e62962ed9e525a969e32e2062973d81e92d0feb7cc8666d48fa7fd6baeafb4497cc389965d4db15376a45b731beba6834c911ed561d945c95e9d46bb748faae944d462ae2e6f1ec1a01fca3c967235649d940fe39ccefa58bdccf1d336a409edbe81542fa46c69fe517412037533328514d992d43d30c00989f49d2a631388febb20d0f5f5966ae6864206692e8249c21e8c7da0de57e330a197bd394543727374f83bd9b727885f7c0381d3fe9d0df83d1c0e8d483db8159edd8852e07391efdace96dcfe164384de000429aa3db562087081fcebc538e30a6e656b036695a3bded648ccb4775a11d17c9dba27a12d2a814b56b437c29000bbf1bf6f852ad54f1272da6e688721b936cb2859141d4761312aad781a1c9cb97ee29299ab75a6fcdcc937dcf324ddd82bed5abb033d772062c7eaf97197c6d7208f08812e9b2a133a201a6fa2f91bbcbe8b5b8cf0308548ed69207535421ed5f7c8d5c67c23fb3b0cd861115d77441287d1e477e6c87a96023e64261fad13076750a535ab2f0c0fda029314f75ce4faa0db3b12a83903dcd223d225726b924b60385a0f8366859b711d59fa3456e7bafad18c7168f8eef14bb0e36c6720cfbbac0019951e0376cbdae97e7bd9a182e969c83aa40f3f523427e42a527bdbf9bd6195233fa4604ae3c93511251b185a3a3d6f4ac2f455bdce20838c368aa7cf3670f724774e1c4e7d3462b0e75aa347d506f1d7e95cadd021f91bc72d3b4694388c3408767b9eb480c7a517ab0f5d15f728f7f93c998434d7c3cd640ebe8a6d20cc10fce42e632e3b185090e8552f67211e57d4205c060e9418ebdecf6ad2fe0e45bb51a5fc99fac3229ad420ba64c13cac74bbf1ae0a727f358bb30efee58ffb260c9407033c89304b1eb460b77486ddce96de26d0b8141c68c3f09e7cd9b8ea7bc994fadc2c7fbd87dfe68b78777d8e260d326ce7611e9fa3da4b3bf0944502a46c0cdbe5f3aca94a9c5fe330595b44b3f9a5ee992748850c3b4aa1c22cc2134c7a1e2cf29e2de2798a1a987ff91738371587e085e10e68c72c40d1db67a74b97860787e6c6b6ea51e7864b851d4e90b17696491650485964c0f29fe8ed87c7ec9288a7494dcd6824266fb2b8bbdc69e300cf4e5d59483bcfddb7e008eea92846699e4f7aa62e92cd71cb046123462e7a2f28b0e71370479bffb2e69d60b6f7b69aceef0c04abb9f0a2f5165e854c18849b9b6d11bb1631c7b337d9ad502a07c87a91e0deafd898317fa13736acfc6cc54e9be123627768eb2c20d75edf0f8c89d0f265a4de5bc722b6dcb62cdef1d855fd5225fe521ee5a826e2acfbb0cad2609639fad95b69c48d29c9a9c78e2fd1dbc0549b2bae9fb97033de01ab4d1211b73f579f65d110699bd9e7e4e3bd03cc5f93264302645a615b124ccd40a54712b20e886466a489ea104db2cd30ce79b40cf3d30f4604171baeea8d33b44b7b3c2a387476a404636c1e774be89c80e7dbf42df1b76d2cfc6d7724480a1b584ed48dd82f880a50b16846ea505eacb55fe6758b06a89b4bd34a129f7696194d3c260adf8da37ffca97c86bd6191c6390e2f8d6993fdea2747d5ec4082798f6ed41a1f6a9cce9585f22ee2d21c596c46a965bbbc4c9abd5763cb4fd9732f67b626dd63bd4dfa04fd454ad803766b7e31b6bcf96e984d65e14769db74536a25e4b4502cf5dd1bc33cc93e0b757213fe7917385dc11c4b7f5b6aca7d0bcb3605cbbb5c2a69da947a917d81b58a0e4719c3ebfaecc8cf5309654260f1ea794c5f3e74eeccbff5111f2e85cf8024be51425efaa751fa91a5e017b99187e089b80f27836d9d16cacc8dd129f4322ab8509cb33a92369be225044c14ce048842a1b6d1e95e288b44086c63f9104627ffe1dc3452faf19bd4a885f446b93cb1d2a8feacf481ec1811ee177f53df2525e37ae2e5ec021e545c17d0f7e6d309399160e44baa469d2ab3c4d0e2e77d8bd918176cde626445f24176ec89a39776bd4953ab13ff10646b507fe73596fd80f4364be240741eb71c45908078e560f77e21f39ac56ee83a75bf50d31de45574d8e21a09b306d91f07fbe684a1c1dba13b4cf6b2caed563d1e409904a74a106e88b19eed7303b47d05bfc528ea8ce8c1fdea6949aaab4bf48a9a22fdcd555b6ad6ffd76034aaf3cdaf72f376fbcc4c44e17711dc76d6e0cef585feb4943272df9153e9d3e226ca12ff197f33a2fc3a1efe0ce266c42f8f194934b382c6030c437a95fcfa6e12038f1f53f3d23db220ab1852f8a7cf8af950d1b536f9b21a3e5a7a14ed371a9352c1da1b73006b9bcf57e80a90543deabb8af8ed656eec174b234ff1d721d5fc79f14420e092a37e37d024feb746190faaf5e03f103f37bf3a88712df2315b29081e20d0c8456b7a068b0b342c36478d84b64bdb83c98632222cd0271a88086fdf6dfa473b4cf30c342954a65a4bd10752a3bba461939986f93a4418dd8c1cb74ea5829521c90b6c00172f96531e276bc0f1f345258091d04534643ec0871cac561f2bad26aa4eef8ec5e57e36782a7b2c652086e351c93ed3e730f2c3974a67e6c0555c76e2e5fc125f593e042caa6ab1bbb26480a23b6b7b3b1cad8cbdeffef47cea5d7fcb3c6ad1c118ff083480754e95f879101bd77a704fdfddbcf73c3a3be3a9e2f526913b6e1ddbaf5577e5db76c308eb7d8836bdf6f378e7a8cba734bd14c4c162feb71ab35605c976c31d7e7167f42dc63524d1008b15f65ad13b3765c46539878fed00a0d8a0a4098b706cefd01c1d2fe49e1ce0a1bde2eec02d8e6b9ee4b776d29f48b038e7d941caa2c460f6df5f7a3b19875f949993f50e81d60110d5e3f118ecc3091d4ded7c5ef50c855ac5c6a6d6dd9c0cdf4df6980ba1311b53c2417a3c965f546f9f3e5dde7bfebf2246e9f6886cc7e6345a8a2490fdeea3f0bbc75279c5c4c10c23181f77b35abe9e564e580cb5fe39ac3c16863eba173eee932d9909382c8f1cd0699f405e441e32b6ba67d86cf6373dba82f4f686c0d3b635585d9192d9031ad3d686a0c57b53d6ce281d29eec26dddc429c35de1c0fce682a770c7314421ad60da2c3d6ddd65687a89247b2a751519d62136b6b671cf1727a24b3233fe620db85923b0b33530a9f45c5c80cbe58af29c590789d5ab2bbe43c057d49e2722c029cacb6109983c91f349375c2085b2044e8913bf9f30bcf25e5554501aed1ae20d08a1826a7490c99cf6db8700d8969f8366c7e5f2b4df617fdd75b70641680e009448a0a0cad759b246b26a74c96b10f547ff103af99b3e8594126a95544ab0aadbe5dbea633a7d6f138786627ad2ce973cdc9239230c042758cfec2d0fa496ee9cbe1a3d4e4c7a8be2ae3713fec9ead8f36b30b5540a477bb7d40c5c4c511f6d091dcd7c2daa4f915f1a06088d1f3a9f8c87ae7b41ade7512886f7c0311fb8dd8dd1749149d7372f1781d40ad684ed67326270a7a00498a7fb65d23a9918f87d537b01d7cde04c99be7e97075b92d9909339e7504a3c1e42e28dcbc7be4c8841d8488fc3339174d9170e3cb82d57cd1f57af4a05d616bdfd6441082712f358d99c1739f88246fdbe0108a7a9c3c74e4f1f7415b8adcf354640396ae90e6b3f03f03e91fa8b5ae2993bb2812731afba2d81063fedd5b91581b0d8f8e4289b48c6562787189c8ec6f04241dd267aef7a5e53809acfea48d2c10ffc20d0198858eb895f7b204ea8b2fa2ddebaf39acd33f1abfebbc7c7700a1638b8218273e2768108f6b05dd68361d50baf8cc095fdc60aa5b5eb7009bdb7ded0fad1db5ebf969b513bb16a19cd1f0384ca5a7068ef42abd48ca3378f6fe51aaf8503f7da06c61900fdee3d94c9cc830929d800c8e8fda8761a3a19f9174e9062ea8dad8aa7e336b38a25c1334c1a3d2da4843b96303d3194d8732b71b1e3b87bc2e30f1ed984fa777ed5381173b9a282155b2e94217e5a33950aa2eaf856312e5ab81f0ecb9478da42ef40410b4eb6626d0d378ac457f394a9358a76079926af5ca4a26f6a946acaae52dda490317aa1997a06932a05e2f42123e11207862681b7af026dfb4573682329cce06ab60e223e9d9dd1f33732ce849ece5becf6a289565e880ce83379f1d0f6c20e809d42f4e15ae0cc21de781f1d496d41a3a9fa9d334b4a0a4c9d83412b0468e6e3ded3f1197332455d58fd4d7c905d8be70d02c37c24bdf7747cdc71901c39e3848a3ebea664d941f653512041d058178b6d8dbd7ad82b83fd0fae26c789a8fd5996d0587b6119ee46da69f5a068c58073d235ec2f5c58822081b589608e06c4c39df5e31ee083b483295d9c67c6d2bc015bf1619fde3383dd909d47171f3d11a0a8d9e98aba2c7c77db97d7b20c34fad82b87cfc3e7b2a52eb9c1b4a9b628dfef97e3ea84717aa6a7a3e2015f90f9eabe5f47e551209654c9e2f330420e6c68ef96f2cadeb15c85a91f2d65f39a5a56893d1ef4fd1559a5e3dbda91224e3299a9458cb5b266d90ae298da86e7f7a58ab14b54f3b0478e238095e1e585e423fad79efbbd65f50a16ed2ab7ca30b2b80053afb4e0b85d26727cf1010f82ce4aa15a46e6540f91092994c703bd995534234b020cebddcdbf9c756e5d96ac0fccad2ccf82482b941a53f17ae9207fcedeb765fcf34976181bfaa02f2891b0b99392203cd37e9a6252da73bdaae25f4febd74c887cc851ab04f2b3764ebd638511f6666de6005b54c80039966781144311b8979dd0f24db84f7cbd0d8add8c655592c401f763f8f54c656f40913d318cabe600aa870b8dd80c141717f5ea20430a76a237ffc8dae276f21ea1a5c9f7af3e656ad77affe1bcbd0ab02e2869ce8f7d573574e7d01872dad03b437e2a52e831f9ab448984fc4752624e566bf3951c702ebadf2c6e3473d029449eac8c36852d74c785197ef5a9a7fa5e9cf8b3ba7db3fb9dddf183c4a8927d39903fa930f6f5726cadaa3b92f0d9641a5f49b64dfe910a22fed8793840c3921222d9b74ecfa20bf9c7638dca5f0c9596e0f633cf33bcf3999d495852765f80863e5c8d8dcbc4b8e51fe19faf12501bab21e77460afbc0926b32286a731fbd618a7d592de658b0819b43569bed311da5c991496df281af67161f29a41c96d1d82cce4d020ebe8f6a90600a48b4130193d791a89328e6d73f94431956a1b80997b81b6d6ae7d4d24a156f0b524e8f5cca7c053d8fe6f8e40782e3f365671a8412d14c83ddb1613d397eedfeba2ead38e4636004fcd9eef7bd6ea44f375a5a134991981d9ae1c996286c6e1bae579d028658d8233a48a31187515d41d6f0a689ad2ae10568175b8495ba6a91906ca1815766a2d14a0d2c453ef362db99df6e85baa97f9765e8e7d9d307189a3e8b297bce972fdeca6c29f24b035d9fb5c3630072b740961ee5c21a0434a2e2a4f39c255ab139257190bd888d381977f121885aba5f002dbbf75e8dcb34679fd13eadb7971fc9df894b04078aa11b1fcc6cb9e993b4b97947c3dc6433be1aeb36396653a04f1106dc304da1bc4ea5d87691b9168a8f53e7a4482af038f6080287efe671e129e5b27c78e6fefeb622089f88a20bca76c785066e18bad9e6b1a8c988763df892450a26be7a22353816835a8a8c8e8762e05e0646e2897eef21b089db777319d28e32ec4bd56475202d56bc8ec067f4b5c76fa4086db3a878765dc465d639de964d493e7eaa10aa87a4a735e8f337900e73c4bf95fb5d44b388cf8ec2147453d0ffac18e8d17d79431dce003edeb1f1b442850ad0e3681849f3944b78a7b5396e780f3e3528152c1e0c756a0f2ec058a3a6a6c7bae562af81562220f2162f8029a8f57d750eb6203cf84a9914070111753f58689e3e8714d74cf9915924d33cbef19db6f683292a46d06b07f732e3a1c28cbf5a70cf00cd364acf65878d923aff225f299bbfdf2543163a8c39d7ba83b082320dbbd86f9bcf28229aa9b087fb6d5c00d70bc20b095c34ec089023846c39337cae82b6952074321293ed1145778ac48fd2c91c439928547a039ade40c18ebaa3d16da62982cd9d9f97cf98174f6b73d7500bceeb7e27c2fc5f647ac1712e916053285b19c3c3dfac0e0205e3d37370a522a3c7dee376be07be8e07375ffaf769b751e63afc6420d5f1bcdca1a34fd599f84c04bd26a6b3a5a6f51690905f21bea511637e55bcf2ad4b6946ec16bce4721bea9f72b36627b89bfdb6f39dda3c0a1e2b0526191856596397a789f61ddd22594e6f36daa2737cf0efc08329abd2e73e36cc914476f78e8878c904b38739c190bbec797d7dcc8e850bf1f56a091ecbaf28ea4114a2f8903b14bbdc57d815569826ad5d17adc620073e0234c86aab3cf6a02bdf1ad792e08a053bba2af8a34f44e19c580761c1fa0b232b37d4590c0c2fca13e37d7d2ead70dbd8e576c4da9d380f634f39f19383bfc476221381e6a8e0f93e45ecb49e048b303995f833677cb5a37a963526166c52710e522d5eaa2aa5c7f46b43f899cab38a4872a8bdb62e4af9dd24b3c9f5257db79068b11effd444c24a0e13bf34fbc81e08896af21ef74366d7942b04c9610005479e9f5e0eff8d20ec8c5fb1ebe95c8834faf723d36c6c1f554965bd421e0787c701e58f2252c5b3e05584333d012c26c3263a23ef8c26ec5d98f9f6977096bf74ed7c68ad6f7fd98700ceb404930e3cd744fe47fc465fd768b08539c9a5a234cdd4e8d2dde89abf264534d563d9e249bbb11cdb0471f5957eb063f185e44d1166ed96c57e9f5d0565f5fcd1c88679824d0bbfff493e97db5571c29f97f20b83cda8759dbc81c283925d922ce4f057d1f6f84ef35c4ec732d91eb68753a3dfe2bb6134d1213afd9cdeb029437886d42ce331f169564a410470ab1c1c85e17f3e710e656b120e8734b238322082c29f2d897d2ab2874b9fd98da9778dd528ff1a744608b98f1cf91ffccab9003bc68ae6f52273fda7f80f47a22f2088c49d7b3607aa9fe5024ccdb0e3eafd7bc2a2fc0985e35615667e9919f4f26896547846a9a933a912fb89a0164b5520b9bbfe4403cec4694925481d4679471a867845c83957a307e3cb562fab5366c0b4a8da1ff6156f151d373be684ea509e2cbafd9f2cc5f737220b8c25fc04d8dc732887d6aad8923a4829a8cc039ad3da8d63eaf92b0e7a368e5b70b8480ccf4ca4615eea4f18c8536dc92e78629f1808b5851ad70bd0aee110872c35eb479860fdf1883f03c0707d07afc69d3386b122f8e3a7fbb498ae216a797403d64ce44bd593295ba0be6cb39b2f40a5dbc9a2c90913a7592ee1197b0dd6a8d0b76041955190fcb3940357aceb75c4b77f565b852fb2dd25156b77267fbc9ea10fed437b9a980c2e3f7523c019e44e7facb74e080c32affebb35074cb9fb58658905101a30c93d09d6b476cc2b3607e08e2192e3f4917d5ac365674b36920b5cd7eeccf09cb3e0b37beb9ba96b3dc93d4bd732b3b47d8a68b71e271da4e77d4131343d778487b95c8a3727c49fd54d53f55947676021c9bd9a1a318b8d6d69fd1c14a73cb72e5f717fd726f002d1d0cb8910a5ce4215b4d69445fd483052df29684415a607749890ae3816af32b3763901b3de4906e8dd9d86610b79145f22695c0065417a7fb3d41576223af9ba04d68238ce7a2a99752ed698ed9111a69ffd93ef28238d7f206ce27a374c5153e30e3239c7ababbd0c93f845e6242e86bc1441732fdd78bb929b2fd65e351c1ae3936cd12ac44f26ef89f6bc5a568a8dcde2ed75442d97c2d89c7f2d3d7651b3508f8cc110b35313f8fb3abb62eb5fda17ee986c84f52578ad05784252bae5c63cde3e1d32493ff75bed5304ac08ef11b6ca90eb6ed4edc6fca1a5747b859bfaff454900d6b99bb5d18f6b719a8babf5fd9ceffd7f45785e73525c35c6f291f3dbb62fb3bb7424ea7f4dcf176c4cd5696d6b289a33abe2cf8840d7ceb9e85ff045f226eddfe1e2e024987bc96c63933e11836e96d612521bb67f6bfba44b69abc524b2bd4195d5aaac5dd739143868202749f91b24b1ffb1534291a7933e1bee03d26df81d55d03fbf58a38d757bcd5b0c79713e6808f75844ffdd474e3b189b51d594e5a97b166f048ddc2bf65f41d095206c0718d51efdc1a3d7539d9da55411e460a58c7c5d5f9bce044a8b5cd131faed09c4271010606d22b720dd53d27e409dbd70b96edc987c97ebaa6d47e7fcf03b86eff3525565426b99309963883113fa61f99a05f447249d27ef3e77483c8aa99de6132f0b4bd1354e232525654b2925e40bdad3aa0f40e16b6804ced1309e05227d6e167f7e1d771c9b53a100f0307b2134d975c546d9ad3dd149feace556c606ef254a486954289b94ffbb24fd17e5da6dca113a29bf9d076a9b0ca74929a77282441309d9db6a717dbcbf43bae13307ef36db97d2638775056dca6505d79ee2c806e8c7305455528fef073a40f52abbe52c77f3c7fe2d52c587a7687cbbb88a73a0a5bc4c23f0a1bee95e28f77847b32586c85f0f50749fc3f928a4c9c055add7e7e4969509c89259b5d3755cc778770654f1d755bbe4df9e3cacdb493c0a8f995debb99a6d6d7af20041761f2ac9ad73906830aff1661dee0d8fabe9b06b007a26a4ef363fea77382fbabdf526a6edb2b81c4b76696abc15c06ca685b1ac06907356fc8963eb120a3885a6f9e160a5478044ee759b7a3eccc4991d5aab2c31167b03f9ebfe0d27aeb9543338a6071bcaeb832f49d6ec21f96307699ed942de3866d4d192fe908dfcc58956cfbb1aca52cb3bd71ceb603cc548937520db49bfc06a587091dbb4339fbfa502c6b60699eb144cf945052149a2e6a80cb8a093d9ddea0c8adb57d9f488dfed50e90bbedec07f83c4e03f765e17031b491a8020a669b4a666de98d805ccd904c63ca20eac8e535e43d1a4de8d7d45f7a9a4515170190c9bd4f1355a4f0abbf51bc2e325c57f92d631047f12730c2a1733d0e5219ece261a4bab143cd22b6e94d4152978330d71cc56e8f08a8ccba59b588a03e92310b91be17fc8a5ae6b61f13fc19a2e929f9c0027cd004d16eda7e6155b8dc3e9325216a8e18caadc8d8c60521985526833f088830f1676b10ba620eef24983cc7725b098673e747b2260b7bf0caf1b9a8987e54bd53d885a2ffcf55f1ecd984e3cb50bc8f20a848896555dd4188410fa4e2f6110b0928adc6727e6cf3c26cf1d3a5dd6349e92a0db64ebabdd8955b21b0d4583067c40529b9cfa8d02116fdb9afa9428488b303751f2ee05cfdbd3c37e1605ad9a5b8d81a7fe842ef460221927374afbdaec4500a16531ade432cc11695611f7a8f88d5ade1f75dcba704a4500eeb9336be16b83a7fc5d8af7b70fcf89a03b0551606ccf71fbd03c2c363d7575a2f5c95794a464f463f9b4d2b3de66216a21319a68ab020174cdc45c591ee3fc3f30fd5a5d898935bf04c34a132f3284ec620de23436920556b06d560527de0484bf2f4f2cb674e43591b4a6252f9a56c562cf2a393c1dee03d6d5590ee57e7c0f6272d007632c83e1e007b3a9870c66487fd9847b93f2eeac709838f4ac76baf4c141970b850ade22e6dac5e6f5100f2273d5dd65e8f487582b7c0ec1cc6c3af799609d08349f5abdbcff2164101e38e2b52f23ebb69dfdd4afdc4b548912aed46b36103e24686c6dc950928d53d23ddf03423b3b3be659249bf9f2ed146436ee999c63440cc8fd099b23e2822352cf79f81ed0f618189711b50e055020537806aa9d9883cf7a3bd51adae0d06019a3c8e452133cd3d23cafa66a19127c285ffb94cdac73d6a01e2a32ae4d8643c9f12e4f988da2d3713793356c45b046929804714859b031fd9294ec49aa5be63ab29c728b8aa25d3cdc230f03b0e934254986b130ae99733da66570621623880d2d249969a555d4eb5cafa1cc245714a8741330eef6af7c451a2970e84d901af3c8f53fd9c4d835afa0ddc6c3a9d28ccfcc6417c954ffff951270ae6c3961a3aa1113aa263d44afe6d9ccb22004be4f9eaa3e93f5730b8e2f086a072d58bcc3247697f9dc1a917a88a5d115a5c4bf94f60e77ba93c459a17f746de2450d6a087310a0672d2bd234c6a564179be66ad48ec2776c3f73fe3e7c1f8d4473adef2e7d11745fb91a1d6945f5363d1c80e6bde73541d13749a290f0f3ff5a7174fb2302f0cf108077293e2e4b33b2c3c50c6a6fda8d44dd4355f241fcbcf7c808107504d5830bc85e2b81203317c8552105b7328f04aab000b2224af74d83f761948bf9659f4ac33359ac47bfb5db4c756fc9c170ab0a47882dd0916feb3ac86e65c7bac9bcf6720cf2c4a64687292de90832e6612ef1b1d8b3b4b50d38b7e53b09acb81275495c3f69086c67bc8abdf51b4dfaffa539425ed194566b1cb370385458551a4999bccd5aa44bf678eba6b0e9a9389d560c8f4d80ac303fca93d2f0b5dc3f7697d76459de8e4e138d4c1db1001a63717bc9ad74d62be9a3fec3abef89e0eb15235b35405fcfaee994dd2af37cf315b79d8b8ee8a92113636e17263778440b112fb9d635f82f287ad770d898acf424de55319d976831d81407bc76b5ba81ef8e0a0f6914ad9fc7aba102956cc3357010c0a67ef82a3d5b419b5a9727fa8d89d28fdbeb7de5ff2f3a028a20c247796c72a1ba7af979b6a7aa88cf9417e86d3e81c4ec99d3a7909c02231d21b4bef18e43658535701b4cefd2d9f3c48796b8054954252962443a6414b4acd6db30cbefc91f09c67a3a4139db75a2b91812d69ea03a1b756155dfc323bbae289d93e462172bc2aab689052b769d364db3d45f0b23a39f76514139de19a34e2b4833ad9ef4fe15f0ded11cfc1f90ce43a42e288be5612761516209aa7bd461a8d5ed53b8dab2a5a176e87bf9d5642572d61b1adf50b96b8c4f94603c5787ecb67d502fe6610e94705d33c52c0c1e0dad2cd1199666ca9f71a60d6d57945553e6b59f5552c69a309fd36e5ee34a207c43afc25ffa6ffabf85d84b8fea448ed7158e25964d76c2ca0fff0bcad5c7f6355ee2a43ae69ef4e810f362023cbde51e2aa8d1a0aca57ee5a4ce4ab91373c0f91a37b076db53f5f5232e8f685f6baa70a973820ae676c7099dcfaf14fde2f888612fa780fbb7c79b09c56bcfa4523b15e668a1e17e6d951a64c8e4843e7d328e6b325b8b39b359e445b9732b36fd2685eff8b28868568f7e76c6913e1524dfca8493464b5b4a081ab206cb7a921b65d40034cebd2793d5e8f431cf50ef1fcb220d037e2e4aa61ffd1dfdad736fdaf7407c575e6d5a8d62065521822d05534eb9bae42fe0c0c9b6b4a24880046949f84da147526831dd52b3868e644ad12610e8acb2925fef605e2f6c2ca61ac469c3095e77a8c8d43c0272a75b3754a6bee75631750dfde0095b1136e421243bea82caa256e9c931a186eeac93ba33c1d429b4b3734eb8f7f551fdc901242b7272b70a3d232073d82dd9e258a53c0dddcb19f5a2b3321d3292f49fbbf212b41c6eb80aa3528ac4bb8144cf39a29483e8315579192fa339841cdf1e52d720e18d8e896d85c78b13f6d0cada14bfa2da02a2a95c0d485417d2c2f91d1aa8ef3ed7f66299a80d6be2cbedf441c32043b597e7ca30297cede0209602f7831ea627552e32c88960eaa7c4b07115539a3f911b65676eebbf21b833fe54247941898ffe848f9a85544af18010efce483e07d71890c6274a48e1d792af011898465553d0b910a2c6df647a9fe3b9ab306f8b3d5260437544779c658d72ed0fdb6c56d0283d62d49930d31e11440b5dd2ca27357f9b0789b6eaceb262d5e6406f64a23729ba9ed36f4a18bf49090b2af71654df605a89ec303b80cbf51760fe96af89bc77d9145d3851e0958372a3f6e647a9bb5f8ef26a6b2fa02c789d2532fb410c9299f49ad99e4e735d7621ad1c18d8e401c452642ea3856df8a5faad8345d62db66a77f8378742325061be08ea292a5b03207ca030992df309351ac1044144b8e5e3901e8e4b92c829acb834b6dab48391729ac8c541787cf043c9acfc124b50b137985a81a0c719373fad7e9638721dad1aac4953c970ee04e8811e4bdf043881a34d53f5ad09bfdd06249b1c45dc174442ec3c0383a8c0ebc642cf238c8229839e03ab3cf169e8f14907a5677144f4ee3fa612f5a0c883fcfb7fbc0c40c9d3b25b38c0a4a1e1644373eea26a6d0ad7f251bf3fdb32b7a763402f76dbf83b7f9dfbd1b32c7ccebc8eac5ba2512782758760259951a19e242b7c8d56e7597e4a63573400c1285f9dffffbbdf3e4982de2c73a6c8fd91f8ae6b58d2f06a60749af80d4c34bfb49db27c01e1dc9ec1b076a22a9d2815aabe1881071ce2c9e64332bbd42d3e07bd5f852a925e7ca59dd55435d135c83259d7f05b9813f9abaf269ca51133e34303392f3081f7d4528533450b603702c842ad5d36e0782680e6f9dc3bab0b9f6de81178ffce16fe6acd2ad667f25628ab811c0bb9bf3b734c4faacd8ac2fa905db0c90774faddc6319f60ae39bc08d2713b6d616ed01b75a77237a4819662f5a3259bfe038ed299757b11b586d7aef6e4baa2a3c65417141e65ead709c85582091adfbaac0d9c4b4822261bec84cf0381781b0d34bcba3136655f3e036d1f6c56fd0b80c507afba9e9356c03228ff7a54f03685dc5c24e17869b6fcc0d698c1467e695aae4389bfd21c3f457726cdfaa71c790caf13f9c006a32f3779bc5cd139b89da49d999e760b2d9ec6f0ba1968b616b63b86817f977bedd2286b16d4468075eea7eca16f616642d263dba888472d1c068725cccb7b211bb307a12e7a74c917aa2daaaef610229f7ca8de198f784ec5f8d8c901c807b8ebc33dfdb6105357479a4ae673773d73c12d72ebc37410968067e2fd94e48c93024ab5b72270762cf45b61392a663465a412797d694e104958f9b473dcce410a968a5da06d9399d443d38a06c0eddd357ee3443b6f66a52b583d6a2dd34e6e7806d310585190780f1bef9b7ce6b4a2a7efe9517e0f6288b5bdbb693cf99b8ea41ee5e4e1ac5d41ceffd8b5ea89cc625de590fa2f86bc18eafa385ad9c0960670932082955e0d23d4b4ee2f463fe53c550766dd1c83135d6912e68c33e54fe73391e4c0b2cfaa4c393898ff684c8905e4142c99946b26e13ac737b68df3c5a6f63eacd2ca3a3a396b2845182d33dddf8362001b57546f94997ba3db92966cbe4c95603fc655a84cfb2f5a8530a44b506f5bd18d558b80679ef4d2fe03629e5b2cafde67d8d1176c2025478825ef9f13c94df2867288da13fdb9ac5a6f44d9564089a0746ffdced4ad8eb1c880672f6114606f1b04ff72f2c21242f207293048db27ace85a8d61dec510a52526b5a8afbfadff29a428c0572c28e62cc51416e40a3cefeaca01087f29b0fbe9cd86805dec08000bd3a0832ef142c066724c34ff2fc6eaeef685c00bf3bb024ce68ae59e8662fc81559f37697123a3200f0838aced0b8bcc81aacc0fa9b573a9c3448a8fa04a22c4d4abd64964611548f812d7deb46d80628888c3a6b05e1dc9f6b9562decd531c4486d5cf42a1459de55a3ad95ba9e260809ef4db93fcf1dfae77736029646d496f0c4daa969263e6d4cae39badef7e2a98f901ca9bc17a9e0b85454e2faf3166f8282c9d111dc0fa68972695382c1c135da00a623efe50b253f5acbbfff7b7fabf4109a61481a3c885f8ba4f0106a35444fc537f435f0fb00b32b1d44b4307bf0cc855a0474ab9050ac1a97cb6a67cd6cefe45a80953915dfed370ceee50d86ffedb19b5f855c30255333d791b8d9ed74a876d65cdafcb28f07be52c1e256a09d6502928f550ddc8de05399549dd33a83ffef88177ec18855cb3779234b531fc7e31c57d0b1469ba837773652be07885c03c9d41bbdc54aef63bcb5a192553d878abbf844dc17b39f473d1d5f8b80210f201c4f69f23f34252bbe2ea7fef25a5bbe1a2b7df7c251d890d05890227bdc7c343105c29fac6767ae0a5fac9f5e9225447ca7c68099cf3cbf699e5808cdab5dba5d41c3b81a6d58867da44b5b6282b85129cc238996e78b47c9c3663272ec87f6fefce8e5d7f608816d47e648341c71c00c05b05c2f05e3002b74d5d00a54b9acd322d9e067eddd8937f10c65e4f2a372ce9e07c187d12b4a4ac2e30b8e94721306b5b543ec94520ce6055136c0c5072c3687582a269a2dff3143d199fff1cb57e5690944a2f8d9c00a51f48e1ef214e260d9745c688513973384c9b86a8ae3f261188de4bff9c1c43cc7e05023edbf0acab56831debef9303a323f12cd4599daecc9693125e27f9c38a032664827b3094d41fd48c1786d8050db1c104de042dfe8439a72e2cbc31f856734e61bd8e22d719a82f2859573a3cb85cb2af79e2c7e5839c6c0eba29df8f301ac629ae784f93ac70e8ad8e9bc47afb2a7449d2a1c4357861a19e5312213ac88f563595ca0312ac3b63efacfa2ce32451432cf3da744e7de2b2e1818df32e7d7f1710946cc6c50e2df69f99582f5518ea29bb40fc53c93cacc674f00a9ae128235e98db478af0f6d3acb6923551e9884cf7a2fe7ce417c2a13d1638447bc52f77e0415662e0d63bd0326cf46696af4242940ac6388c65afb43816fed7f8e430fba0671fd49350072ee3c956494120a75cf6558dd7409a3a4bc8ef793f75e202dd87e5a43115436d8d0276888c10d453bdc4541c6a52c6c429d92efd9559556f0aa32404790f9c403317a98b829cdde275a160ac55a4b2f79416064d82bf7d7504edbd786283c8a65ba56c72dca0b129d0961519350f751e135a801625afc58f5a396f011f5d7e1a6e60787c8ccead5d87fe2d83ab28b90e3a27d10822fe4f2bcd1d3eba76e44a05512b34d620a702b166bcc0d1d33e03acc28e9e75e9884d28c12b14740a862ffbfd9af44db775d6edec891c479311671868c75c0632fcba0115bc9308236fd72cf75b124da423fbb605537c2acc3a8238a0327d172d7f19145e2415f65a05edc1634bf3f58ab1b2736aec065f69a4175d12cc56c2f64f1f773bfe57efd29e57cf7325d7d8114604e5870ac8bc7c9b8e447a1f3b09476b6d5cdd3f2698449720d30fbf70eb3015366ec570a79a0574524d7d1bcbc6733db6cd3c65cd3be55c2a09a5b4dc0de29053c9c5422386a7690a8dbe12119e2bc764d7a315f910d2b405b18ce42d6220e8a7a0ab4ae73fac418c3c7757333946a36754dd016d901a2a004d714f92ce451cfa88657cb1efee06b60e36fa0f5b3c4ea0afe0c7957b0ca341037d15ebf5cfc6fdf4f10c5f39c7ace953791e9d2900235a6c1db06a811cb9ac7326e9b8448ffdbe329cab87a129321574012de9c37c385f9d25511203052ec34025aa086ac06bbff14a74246dcc5885ac2ab72d1df43564ea3feb2629b7c2107a1de657152ac4f05dad872620f7ca83351b89da6366bf8a7609dfaed07c58bac520eb85b789ac593655807f37c752523300c36b6ad14a0785c816db8ee60a11c86ab45ad27700455a04916b37b2d844980b68671f817fd7655fadb038ff8f415055f7b6ba2e63a890914170dacede672ef329acbe419c304a1cee99b59f742ba00367cfcac2513600ab0cce0950d2d155286fe8961c7a8b64bf06fa161e8be9d4e1fae4e305239fc8af89945cb93512f83490f42aac4de5b17be9955dc94d622a276abdfd7a333daddb1f8470c1134a2a65febbed42a5176aef46b738bf4a1612b9e0104a91677e42096cc1634a1f22f96412d95d870e20b34f7ab175122cf184821783aa89e1e6512502d890aca59a84cacdec5659c7d6d4811732843c67427282096147739478c2bc6998608e71f44c97ef59569c9f19e002e2954d19a18abad894cfc7b07b4919ef769e446d4cef231cad2a5557cff48748e8c2db8973279fece3a708b3ee575b2da9a222a552cc643dc9af2b6c7c6659bf789124ddeb908aaa3c679dd6a337e9ea7a52162ca1aa4ae131d68c0f3dd1e6c7266e41d83970264e949e0387e2302dcb9f6d872573eebf1813d86fc7a77021ac001215d4bbea9b7bfae4c89864f4cb1e561a350b4033772b896ceccdeb146903bd6f7ccaa873e9d5a01694b1c287f8661510adbbbbd4b5bb840967a2c770e9873ebc28fd68c4103c2c8032ca7b3d5b235d6f646e60d48676c86f0623b60f043a300899978b913de43da9c3c6d27179c5baf8ec37e3b79960d0470b620720b37689905663aa1f84d65b975c471329cbccae620b7261e2f0fe38b33d46906462f797b4e6ed6627655a74fc1e2322f9b5d27b357fc0493b7254b5353d9e1493a5a0c67b7b175880cb911c900ea512badafc841268ddd509f535768bc71da9f72a76453cc5c92bfb96946dbea9fd33f922a1e1c45092188350da8028d168795f784159d5afe4cd81d7c23f7c49e88c250ae4646fdef90c2feb43573b9c92d118475880229965a0d68078bb6c78fdda651a1f90ad8ae04649803316b71ff99e54e511df0a2abf424afacb2302da9c29c24c703eb29c96cbb5f074f8b535b468b4b7ccb83f246f1fd5e7616ebe95e0d6092ccd756e163e9c61dec4bdb8de03ba965e606ec52dac1d23c15a574e4bc26655a525a4867cd1a67ad397eee8ebe21cf385479f8e92cfe7d58e3e3addb3cf9e07d4085104e83aa93725fc861b8c68d6f6758e989335763342db851197ca29161bb0e27fc35c639ebf02e828f62178028704239ab1b2107975fd810d6daedbb2b378c0037c322abbea254db0520a86b77154431aae2cedf8d391b3f9e4c44e86b320316b54d48abee97d75dcc472c289f8958e2ce03fbfca6fa51618a6c18c379a206b8e085f696179c1161b6c8e5ba0b80f0cb26c87f5d77e9e1773db0e83920a66d8ed6966da32a8370a4d557fb6b9287ce60f4dcda73dbd8fd210e59c058ba5a74de164fcd27d4d2574a46ab80f94063a4bd932be6d4c5fdd2f55996f7cca59165d026cf73116a396c9d5de2701cae23b6de2830cad077fbb268e0737d1e1c4f3e8ea0168b2eb9428ead0ce6f46468ce4742223b43b8613fc319036d5902f57984c0f33f156d674faee9c23854b942c9552fb307ab2c3c3bdc5a48a246e565e8fd787346e974e4ec7334236a33ccd59c6b9a9b5601b9e916e8215aacf36832e8ca67c4e0aec74d7ed91d40f5552243e5b4df1de5e53e4ada8ae129efcd8157d75390403f1d6d35b740170c52a8ebdabf45b6369b938a3e262c0d3714df655d0692f98404403f1032d7a1b96c0c2c9a3ae3eb3eddf1a5ccd606601c1f0c8dbbddecceb13e98c04ede5a59a0aab24161d0a7832d21b24cc71b4d883eb5b88609725b122f0afd44a81968c529418ede7b9ebab7fe632e3478f1d26333d226af9d7c668a5eee7cb575ccf88ddaca3860b133db5ea19a1a3db16d3b81a7f8dbb6b9692ad6bd48e555472fff69f9562b3e2ba94985f09a0c0a5484e924e841b60ff28ec615568f553891410255f17ea0e1ad97864f705ff774304e873fd8cd1b11a337689eb83edda3bb101d0c6260b5d131c628a965a34897863c9519528fd15033e28d5337f56df8a87ddfda5863962000ac6f6f1357e930f28f9993da09c4b2a65307873739080762711195f996f56e4f092359d850d4e56ef3d2408c1ee6bfe1276347c195f061ca017d51698682527cc0eac7d7e87a3eb22751857efac76a22ab9a638f1eb88368c4ade7695f4f4791efe96323742d55dc25fc15afd55d847027b77f3f440f111d3ad9345859f2d73dd5356c713f3261bf9f7f960d15fd9ceba69d042d819651c6402a2972d8922a9532a2ff62329681c59316af665387cf5314a6a2e3c0175d95d939b538d2254e6e5970eadf04926b41d08c599b171cced14b965c8b9f234b6c5aa74a626805b7e8a63774a0081b8226594613a378041ade516f88094564831f0377adbf04abfc753f68fc559610e6b7cc4fb4adfc2db00294e480cfec84b7069b2d251861e53637f630e7967efac178e4c0fcc75e733bb1d2e78c50e6b73d4946f6528f28925e446e05d1a755d1ebfd0b4c8c8063c63d683d5bad0e5a15cfed613a1cd3fb19a0e3281c1f1bb3b1b49c1c491f0fb842ab5c861e6733662ce327a492f9490948c211a3b42c695208f20484c57c9f99907b16ddc8462d95b54b2c9a087c3339ae853129cbbdeffce4a623dc0a46dde0b9fe5451fc856718331f38086dc57cdb462d9e1ebd4550deff1fd45571163038f26082cacccee707f07f4db4b8f0873ccad393e50a0a5031122cac5a996f3e56ecb08ddf2d6af5c80af9af4562278a64a782443ec7e8d3c70c1d39a0be05110a04d4df2c5ac378fdd2de5124d813920dfba7feaf60752e490364861a2d46fe78ab452c764cee246e4ae99fa7149b23bd18d80d37fb474332086e62217dd298d659ce89a0a8514a5788be95c2701886a08a7819d94b83d608d13106bd096df5c61ee9a3322a823a7294943780980e00ddebb7aa6271c53b3fcd468d702869e1c2bd6571d833880cf9f4c906c735ed15c95120781ea8c48f94cd00fb0baab4c9ad1e0a7696ac799a8a818b25c601b1b20d383337d222f1e02ffba8a137575d4f301d5c9cad49d6b437ca9a3920a7a36babe3d5d997393a25e811921f90a7779deddb90caf7524020fd5d3d885fd5eee8ef86f0d35332fd17da18633a5574a7a9e8475dc31c25ddc4a136fec7620047e413f3fe8db724cbd7de2e539921a11270460aa811ef3c9c0f04b4fda787c89020d4dccc0d53b6537930dd0424c78994dbf225bc126efa750c5718c582a27866f890f72520c5aa8e49d2d85cde45330a427279adecb059e2e8f1b0b978e67279c4d9a556c4b773c6ed0e47705f6983a8c224250bf124ed20986ed95d1b291f699cda556822b1f6459a50897e4a1487e3cbe78bba86dd5730bd54fad1bdfcc969a3ce0790033fe765d8cf3828d94c8b1962ad0ad17efc6c6c773ca3bbd12ecf4cdb40646e33988448991641c495a86ac8f559bec1cc46bc968f0f5e8e330e2f299196d55134c3914a233fe4f2e86bd37e16247b6259193f7956db5478541e688ef677ac8f2db55a1be838b222c8127be575982f57e2192f9ba984f3690b1cea41d6402bd559ac7caf6612b3dadf63fc00e67ffda2a92481b9294ab760ec4e0ac2415f06637953424792a1d6ace3fd458530c3bacc9be3c7fd0ac8e6511e84862e06feb674a1e34d263ae39ae6d53c7923926898332858e52d0974f4ba4c0abc0be561f4ac850dfd5ed107a8459a397ad0468faa3f25fd9410cac1600561dbcfe6dd72dd4bfccb9f56d9b06d6888d04a64a6c24851ce0c2ec348e36f8b7aa8428112608ee396fccc48370bbdd3eea96853cf21c0a76633f7bcac039da050d9ff8edd5e7df23ab4a3e12ca891f4de140172049bdf4e8979a5e117b954a00312710f0d4012ad08e3af8c8082a051ce7aa5aeaafe69756b6f1756065124b7c743d0b38d000b64d688710fa569de45095b52c107df7573868d947d4f38cfb783055d8308cdf64096e01a09912f15ec462dbf06f6df5075e2f332b8edbc7d9fdba713fcecb5df1183b6406fdd2a1b84d848184928272a5d0ca422f63693df7bc0234966c9a3e8e4929b308b77ed120fc2b74f7b7d00c5b1ee496894fb521ce82166b4c188928b2ee005be10cea99a38b53b16eada01dcd128f0f0a1a0c0a008c60b670e2f04337a39ff4408706acd5ced12284136f3b694f1e72d0a8e5473e466a77e41637beb01dd6ce7f21b84dfd59b2ceae966424f5af015d897b36ebdc7d48570784f93b47d67c039b818e6ddc5a1483c4a91661208550b3106ff60a481ccf7fe3db8566fc332b9d0a5df248e5a735dca8e8c7e125e0d5aabe9be1e66d1fff316752a37f05e82376d75ee268443d0ce38c8f21925260633f6fb30ff6989f3d58ab15c3988b60aee7f9f8b33dad155ada26d7820f162bc3fd43aa54451cfd8cac8447437915c13ced8044bfad2fa2bbd7af06834de0afc2857f1044cd95b7ac9bd4def8d50868a981da0858f671a71e687e0194acad39c1c8fed21d9fc7ef5877f12ea7e049d3457c4164ffc8b1a79b2aa9e32deb7fa5043e431f6d493f7d7664fa9feb0322d90dfaae63913b6f7f5c1e8862bd92fc73dff31c0732638b24609c7317193fa7d5221665176c092f098b8db9e3bb7d0dffa59efabbacdfebacaa78d5f6e66487318a8aeb812bd748017ccc66505077a94a576201bd854b3ee9a0ec30ec49fde67a133f8df8543e4c397629fb03503dcc3ab5eff0290785803b9c19b8dd443f48166b7d9034fb95957b7120eab1f2e32ccc9329801dbf4bbce03ecb21ec0e7ec64c35d33a8473e7bf0b8189eb64edc14b151f0f897661feedab11e4bdf5f7fffe984548a7463ed1efdd4aa04f09e79f13fc23cc40b00798b4b7a7880465b7ee5d92fb69009576b05fdcfa461f91fca05b1775be03bdf32678e2f93c30c98e9f7a1825fbc7df7f18ab58b15b951fa7e3639fdc44aad54c80f83153e9ce20b018ac8a64c56fe3ad3071d87101110d7c33a71c1052569442b4123eeaa6e5b8db4e3a35e7da47aac2befabfc6dd55745b8ad102eb2130c932a21867de47376d51eb28f4a7d238cb525990244d9ab9e2158160793bd71b5589495ad9c71aca3e40a6aba76ca77f9308fb5d1e1ff59897aee0ef85b90f4fc61fbb2c36beb10a1c049ca83ca872f4cc0c9888f96d62d35fce7b45b41fbc3b7d0b07de970d703b959485c8ed4905ed4327352a5da46522fbc727e4310776465e1b805633b6b218cc742fa0c0e4d2c060d5a72747d99cf6fb54f65d3eb2c737f3a9323441852691aaaafbc78f8e22f41c055efcaa4118b142d163b18eb0dc9e6b3de29c527ea61dbde7b2ec06f8b3357acb98d40d02e6c973260319c43c6da2d1a7b438730d8ec676265f52dfd3dd994234137062aec2c0a334d3cde59b0830c3176c9bae610fd3eaf9520e77d32e57e4a584a1bbbdbf5c41d1a28f2ef70fda41ae9824197e70445ce68b5c2cc8fccc4d492a6040b4d4abe750fb6bd54ba6ec95569c7500ef447f6ec65a4d845bbdf58b7fb056afd190060e433f12c6aa3df1bdead53593593806b82def68fe3693138593b5e1c64814422a72279f3793a42dca378435daae32b8e3f8e89eb67807b354b6e65d35edea4cc11fbedbb6393227aa53ef692ec4c27b12f017a22a36d99a4a26a2e54f1ffeb6eb48c20c5b7c163f7bc7e732539382f4413e882320fbc9fe792614836da2ac2be1a615ae6febd37c9e6a4a2d21a91843c9ad63b45664e3f47f8bbe3f051358db07bec215402cc9263c2a59765290baf5db8024af137a281f59d700997f8717a133f74a41f2d1ce0e4b1bef585cf4ce4b3b1cd23fd06d51d2e9e5b91ab4fbd316d378640c8aa21ec9cc7756f9abf77469a74d8c5c15f66278c51f6f775f33cd54452c77a9fd4dcc5cfe157dad37c55d81de290078e7854e20db3d7e18a5620da221693ef242596586e9fc046aa205a93ebf87e63d00952ca125d1c29cfbf18d6c89463266c5e12a58a25cd869cc1aa53b2a4fae786c324f3142e9fe94f0b05ba9e220f5e8b04b4234cfdff36ab5120b255b81b40c4406be7d9825202993ae5e26735b6dc729513998e42e59bdd0af8ad842c605467e68259d87ebae06cf5808ebbe54377a3a814212958890b742b764c6b8db05bcc4d9681b64757c2812fda37a9d676be82ce596592a60896e465403b4d5ba92ea07ae9ff5451fdd76bbafcec298ad1ee1162968707be80b556f03497b84b563fcefc403d416d54ca2907ca3b4f6c3ebb90629cb4009a165bfb3c21c71162b03b39bf7c0ade88cf70f03cfa8da723665b083ca620f80d861b486298cc5bd14aa654d3ad5e967bf347436f3e76cd2556f7fe49db88587b58e33824e581dce2591e924cef2ee43c1a6035a79a1f036bce56694a18577eed38b8758014d5b6d79e4e742fe2c8657e9f4233020810a5262cdfb0165b78be45ddd03c482c2d52afb1b3325b0b32085e731bb2b6e9c3f03413189ebd81b4bbee835d157c1037bb672a318257467b5d25e27bc9cf38c9d5c89beead40228d8db71f6ab0be0959f6321c0c73ea3782a4b73463db82a646100a6b72d786d0482adcd333b6bbfb3ea9b8eebc915f4675d32a6e9297fdc8dfde4d39896a1f037f5c9b54607659db8675932755cc48cf12028533eec2e00ca55341f6c485f75cb9d73461c20f8e55afa127d26f0a537cff26f672a46a8c4b34d6ec554c3f2c601da5a40e96cccfc2a4fbd1f3b820c86e728f5269c80a815700218d80013e58d816e942535c33bcc6f3c847808613e00a90c4781c12fda3761492f18cf5eb55d7db212f448c56ce2a378e1d5ac11d4b1d384eca8058d09a518082a5210f7e6186bd78d27829c8e5dc325623bf73ed5fbacc473ed2b152959e50e6ef8280818637b8285302962e7733a2ca0cc55ee50bb8f38f5833796ab396d2bd9b860d2453b3ae87d3a09175d2e66a9effb41522ae5805944ef2bf3e3a59844d2d1a0c9ce3a5d0fc20a8b9581cf45f628a2c327752710613d39c07153911c5dcbaf8cb3a7594e4b5a03593632e2db9d5a27356b9e12157536f6037acd63dce605e4eed971ff9eb9a84511aad4b2670909dc491785fdd2509378daecc56259f227710abade4cdc841dd06d1f63f0d7081375d3d6d7b5b310d5499580a50d9a8b6b46cd20a4ffd3e01a3c5039011077b699f9ec6cd64fd457fa9b30b70917dbfcd416b362829e855704a889919f5d05e19cd0b0b890b2e2bd9914d35d147c154615aacb1cbd2795f5f5e0d093f189726a6de6ead71b39f369575560baa2678a922748168b598ec4e3fa769e8134c26ca6ca8f1669871a12964d6edadb3053acd6995834fbeb06ee0d6d10903aa512ab59c547530f2031708141cf409389f552a04faaa8886f6f15af88d085c289990c1f4649fda8bb371403490539a3f0b7148aa0d21d39037d424c5712a0e4756329b38cac5d18d68ccc63a3cc50c207a3de247f2bc867cbd17f3287eba3106043aede1ce6795b77630d34e8708e997093fd0e9b77a70bc2eb8718d404f330c9c4d9a5fa3d240c8dae2b0b9fbaa361174cd2fb4a265a712a6349b1a47bb4080e2637ef8774cff03a7e10048052ae004a7b4d7327f0d56d02d2b9a38e3534a908024898f1c5aaa1f77919265801acb93de2b050a49d2b78b1231ed4187eca955e9279a3dfbf0c7f3211a3cfc1a1201bc68292dc7ea6bf7c613926802204160d5f2ad9c9f199a7d1928c25690b644a00d5741e7c50a581692329fa1ddb74c5f5df03490e0a91153d56c180391681318cb9b3d184e6c2b5eb3dbc318bb99f660929bb683e20d1131afb2f249adef5d0aae192414f3ae2d58709df306c155bf2f75fa078ac87a405d3afadab75f28a16a613f5ac9bcd22cc3a9c398470d2a50175fd7003ca1687db197aebf8039abfd4977760e3e0c4a4ae4ec497f1a9a983507e1457384f2b2236c9cf05e8a9fc99caaaa48f91d054b739ee2f9e4e4fb4446717540a0f01e5ae51f9ffad9e9e78fbec80272f8d40c01e70a099ee5558ed0846bb05b7b663690ec2a478328d75d8af95794595f4260be6fd2e62de7662dcdf0423d00fd5129f7c6f519adf22fa252ea5a506361dc6b41a74cd28aa9f3ad08ec126783c2f7efb4e2d9812ec06f58a051a316135afd78007bfc48d4daa785ffecdcedbec0664c8ebecb4ac01da2f4d12cd33c33a3104d084efbd3e9202e7744906b45b8290f3c6e0b00d04b72939e614d830114519270b973aabed93fe8ae10a70798559fd5f8c4877bd91e8008b5975e60649b6f34b52e0544d1f70cc35989204318c524d4e9340d7387fd5d466d129f0c621d6d7a55ef23d496b8d8259678bfae975e36f7f2a8734dbfbd59394940519ffa1085885a875fd7d0e69db507bda0f3cd14bc05edf880fe99e9ecb94670f4bc2463b76acb014ae590b402bd39d821e91241c5d5c31147541cd387111a1d41a7afa0472842aae4b7e1bb987a3b0bacb58e387fa23cfd87c4329f38f4c1353be0860b387062667e319e0ce41700660050e15d7834cf2c968c42ed447065761ce03a2ee3bb28df09e01a9277d8cb791c4ee2c50208b4698fd5a71cdd794ac819e48ed8469e9a676facc070a3617ae1fd6ec98f509d9dc2edd4cc7e3cec01530e277f7342cf4786b5229f10fb203e10bdc90c726100bf0dc49f7e403a4214b9389dcabff0af92486dcd6f646f220e56e822ad67913b40cf26b1901335ffcaecc46d92f0e2c29fd6f1f7c1934777a44bfdc850585df12444c86ec15657a79693bb6746410aa4e181e639ae804876af4bd992968fc4eee2629d7886c363dda6fec10fc71562a93444a5b9fd802f284bc98e39f2a3c97031fd2bd29c13698e9ad917c054945b567e8cba193d25faef94f44a62b2de5a9b9df8941cbbd18188468eb8c2b302c6d654a63563fbb4d277809fe6c0c5842eb098e6b109630bc2eb4999243906ed39ec9c062c5212d3e4462f7eaa800d7a47fe41e8f03a6a0706983a2fcb6b6daba851a7acfb8d6a74cc51aaf23f334c7d6afa437cc4fb78d65f30ac251194315dcde86b7ce72d88d73737f689210825211a940c361c18078ec7867a657a081fb961e45d11e386d131a6ee8c7ba69a8d85a2b8d36c4ba2d9b1205eed9f3daba8c1d0c09aec1a8a3bc31ca816d105b89bd4ce860bdb1c4dc8ba48f74f6bfec8975f0fa9c0c703b6ba83de33a2545ceced7b24febd8dba9af5773a5e55663c55e5ab864fba2788a389095ae3d752a22d017c21f66510d6290c91d73f11b1f38bcfb0cc661da19e1d0914ee6b67e66181e6ab4a37f55e5122b8f6883ee828e31552a06d2d2f0257bb7e4a7447d8bd0f28b4f689a4d6362a30e9978c8e794cdfdf3984c1feb7559669e069250595988a39abdb577b520f9ea71b05690c2c85cbc5115c07d426b4317b47aa98e399db70c438fa31a46c98939563d9947564c6149473cc5f803d15112078da76adede9efa5ac53501644d4c480a881c2d160d02cd4e45279891831a23c51c9017e8e1f9994ea135b8580884bf6b5a031854e0a797cb9f755fdcd66f01c9c0a7a198b18d6b69e7a5583126bdd1544859a4c18d6aff8e36f87e8c0cbc641d66609a0124c79ac096b7965eab161a086615d0242fcb9f92bfad1b207165552593994aaccadd36727522f6ff49ddf1dc6ce06d1ff2e1e6e02f8202516e62fbbf154d8c7e86db1dfb6e10a9ab366d9a96d1edb666f7058bba065459c2e501b93dc178d6fe085787814719387f512079c40402a1f5c819b1c4cdc8c702ced5f4ea797b341f0e47d0377bd7b24409b8ee7c20ed4518026ea78ff1f011ac15d51511f360ba90935efb2136bd5db46fa04f3f286f135bb92fc57ad74e7f2764b25b570d3c47dd16a412d608c009cb05101adcceefb3121f87d2eea5db1a828f26a1a2c510e362bb6357c4f2f63845bdd447ff9d3008ac2f1b0ec6cbc2342dfd032bc69d95b2d3c28a0af256905478227c7454eb969e0c1aa4faaaffec49c70846ce38235ba0f2d55faebaa0962cce142f3df5076a05f0f9049948df0b02bc44ff9c4a04354e17328dd8ccf5cd921e78576ac7a2bd79eaad47bf09c38a3262bc3e565cf579173669dfdb2fa54fb041612480eebc77bf09294b6fd14088fa197bc97dd7bbfac2339149980563abc24c29ef7ff5314f6583badd05cfd594ae7238e84a1e93dc5975ba236b0aacc7e5c4981ee02929cc2694fa4a9385be87c1b765071327e148438268a68393598ac961b8f925bb9e782468836c65e9430c352e06fd380d7781f4a9a94520c822567edd1eb9917734449477cbc031efeead32081482efd5e7f3af78c9bc48132450204286701599f9923bc62cdaadcf582f90471411753e72a985287dfb838c86d9ccf3d546ef7fe258b304a352ec22274522804a55fc810f4903c7e75051130177808e8473cb01d7b23ab9e1da9926bd38bcc19a62704fea426394827003002ca86c0fe0a711396a521f60470963378d29d9ab9ee6cea57cb04b78724dc12ef8d4c22cc93e4a31013d06db8c7127fd04f29af6743d4e24422c76a09679f886806305b1fcdeec7b47979247f74b6203991f40c95dcae87336a242e590dee35a48dad71e7cba46d2331469c1fecfc17d05d5563055e562e189fcb69042cbea656f96ad36ab30e63389a01166485b3633301a41407dcd3fb239b9d74821ca881e5eb9bd36f7b2c86ee2c45c628e20109411f1a9d290144a6d34ea157bf31b9f69a36e4efb3f5dbe1ed35a9bb7526a538f8d32811c1f18838a3c9d4d02f4404e7e55d30784b34fcaaa7d57392e705799af111cc72d1f34fc3963c60467aabd5f1003334051b9c398557d114339267e1e08b93e20256f1d283abc66796aa3517943fcad7843e470efc9cce52e628a4d6d5852127c0186110df70ad2116617bd7d537cf92e7cbba6b542d4ebcafa26a361a7ed1163067d778f868c969337af4a9805db560dd0b94bc6eeb62e2674b36350499b3cce19c6b975f2d53a1ae3ad6d583c0d87de345e4632da503a79020b2faabf264c11eaed2ab4f7afb18e66ac3a57fa95b1917638f3a48134945052054236d6ecd038eae55a9a8a764da1dc2340b8a78d3f6ec2c896907c8309286ec2ad1ec32f64ccc61e2408f5136938160ee78366e08913a205381d125c3494b2707ac462bbbd0fd552cf8037ef96592714bce2f5987d14d3708a6ea368418e8d2fe6450f5c8b7d3e8a4f66870c599f2cef8efd47acb28df685e78d2277e53fe984d82ee3512b7279217eac6e48f7d8903b480e64fb3c3a426b2e12aae530e6ddd7087327979b9bde826e3128a2b176fad6da0520451af0412c702bc5b5522234e3d9183fbb8c918c72bd51a524c77435514a5f3fa24994f92481da65e083ff4789b5b63f5d251a9f4989f3cb7d980dc685e67095f0465755d8a5b138a849d1aa94a3863b3dc1dc144aed03ef792b244e92b82cbad9bbe8bf165e68c7292779c47206a4fd1ee2ba1a3d95352f6d64b480ca00c183d800d796da195d9f73af14119bda2f6e50b0f11ae046b5bcc9a21905308b4a68327781c178637848efbfc0f864d80fee4d50df270a471446b6e9239ca6f6061cc14373452fbc9c6da809461b1b1ce319e538f0d61c2493d15701995f98a3e078a52db21894d83511016a4dbcee8cb00c179c98585231f2d52021fe3fb27e3ce7f21fb73c7d3945ad08de656d367348abf2779551470f4304ce7a3083af4439cad51a58ee6f5004c570017e39669935d633335f882a339394083906beeec7fa173cc7ce10ff6804cf3d5cdcd158aa0a0323c7f23eb60ae25acfc6595d81d3e4b17e509800d98c74c9614fd701b6ad145ab4274ed8ebfa3214f66407fa1eb346e8e475ee54710afb92d2c7f8e62df52b6b07c6ca057080ddae6fd209110c392c9cd2d1568230789dc2ba509402029dca4690adcb954a9f0665e8a67bb3991e7cccfadbebff782c61b461de890d4f6937786b8027f12ef451afdf976737106518b285fe1c24e3d3ac72078cc49baa419f919d214be227ca5e02a72f102421e1e79c6f5137812cdec67dc229ed0e4dae7c8b0fee507485c6b2039d9d3718c3cbc4505cb3801d7f93665e4f9d9a2943b503192c0f0e94d830297e5ca87d6c8f74ef79c0bf9b4c0de1d5c558cadef538a110716a06fb8b5f91b65e13efbf4e9e2450d57b2b4451bcf0757fdd8ff9961aa65891231f5568cb6661c8b295d1f05c8ce6efa97542f50306c2acd00b17792eca414c84b698c63ca26d116e1bba5940483244b28aa11c92f72614a8203c87f42961ec57b3c34b78ca4c04385977ea94a5f7d9fb2278eef4e6cbdcc205863a6a063847113b26dcf3ee767c1cf5ad1343ad811f41590d1141b158e093187cd2a5ba12293e1ea1aae9ddb4b3c27fe29c604e5176e3f68c578812db257c6ba7eb2d58e279fa814690cdc89f1f922393c52724a25444a1bae6ce5314b25d9a8ae37dccf8116d15a3a4b6b3f38cdac7f6f3623bd6216faa8ac0ba040faafcf6760c9c9999498de4cbe349268763407c1a019589204a27c96626417de83484e93e17855339947bccadd91d0530008f76bfe7e2ae12d208bbce9787ef8c069c102bf878ea1871be83a8f7d91882464458e0451e72b3a17cbdce7342e314eb9ef88536da6551bcc0a5322fac6c94c6875adf85d08ebb93dcf5f265e59fd9b46890b21f4845f4974d8f3e74331be9af8d012aef124cc7e4ae62fcb68b93b92f0411b0833e6ed04bcac078853cd65f81b680121e869ead28089461b73654408200165b6c69a6112eacbda57f8a6500c65c172f7c3f3ed5618296b8ce83246d9bd09c631b54604aa844ff3a0930ebbf803cc30fad0914bc481db567b9458f01463a04b2f96d98ca0c8160e6b451fa99092290b34c06fb8a8d8518318c4c1b5b0a8b1e6bb1b5d22461b168aead86ad4477ba24f15e344f108ec88adb846d83a016468b857d423284a545a2c66a09bfb512766b67ac57c1511cef442932633d34cb65e38978c7b42310baf7bc7ff1f35b52d33492c835def94941d2684a232a56f0dbf15e6d648d5b73c9932935ce1994e0830d44e7fe7f469149cd8ddd461b6eb1fc67367a9424b84c1c54b9c97c59e34beeec49a3c4142460c24fd700a1f482be17a5541aeb2d5c353755a8b37ac1c5d506989f11d330ff43421773139ef54d812de572dfd74c0d0629361303e3b7bd96854b5e86a355eb83cb602eefa07ee0b89b4064f6aa5d4d62de92b51b97eeb5cad54d301af3d3aa01ee1d7e5c2f4e680b1db0f5886fd3d2ee313fa9f6a4a6cf381f72b2e75b36876f12a6fe421ad5c125fa43b52405071d7d185ce2d635960b70284ff098e0b444bf89509e8dfbf5b1e6f2ea0dffcb209ed2ec78e208012e88ecc4b5b090eede9810eb405712225f7de390917c17bc8f1befb56f20326cb36c9f0894c64b266ed027d3e15eee56416a7ee1c2d93f38570cb7f41af6bb2bc1b9a20b1617756237a49c7ce244361b867c5a256b75ca8bd63021c4268bcbaccf64877ecba43092430e554f56027e86902f71bbdbf7f53477d2b267f53106816aad3c309a474cf8654b2b6a249c45beeae11c4472ef36d6fa43a3c799ea16715dc8710a71cb61b80b903a81166905045d045c1fe85b2a6a0ea43e7b0b5c65284e88d62faf52e39246ebd4f22abe50a4ab4bd5711a109272dabdfef653d400f4809c84935f51ec0273c02c7e3a4141b43ca3717fcf2b21edb4268551c454efe372c96c9af150b328271529b77b14dc0890af2345677cf91b6112ba33237fe0aacbfce683f1877bba21f8db9a3b704dd8bc9d3cc61128e2ade42073ff19f5f3bee78520a1437e6a79e5a01052d58cc35bd95606c61d69c383c554452bc1815f7b14ed9d8c982957c1892cc869da4b881a0d6fb0c2deff32f836bdbcd136e56c4d33a584dc0e93001d36bea9288d533d7244534d23867658db3d20574683cedd10a40d1d04bad3fc33b50224ff023cf305c4689f7cb65a228cf9fcb1bb68f3f316ac4d7d8bc141c8281dc358c67df07ce31b9ac276d10ff0c327ace7ae84734d92a943aa03d95d4d98c2aac3ac31eeea0f4aab5c9b31dce93d4b60dbbd098f5d1487e11fd208493b71621f33c32fe3f00d69c5ea38a807909b357ac60bb9ae75ae2adb107ac2cfc6f665dfa62c42348aab453cc1f7a7a073789babe017d5551b439707354f3fa4aeb791fc5e3266fc396d3e7d18432294f53e84654d419dbb93974c251a7928a8656a91f88b012a4c3d42a8b0f2683157c5b693e50a5a022ae86243ef871c29df20b7ccd04aa0fc529618de51b6f564cdd86788e7f8c5c51da539c4ce2d760f8fc11b87045bd1810eed67d21a466b3312e990a4e9f15fd955b9234cb4027038289dd005776ab8709e1aee376e319403f3ff781331ed0000d3c04dc25b700ea49f9da1de8c0c1091174f23281aa9391ff9e71205b609acdb0d051ea1940a000dda21f0552e3f72d128f7db215a8c132bd27aa533d6b4b5e453cd768df9f1d8adab1fdd7be12c8c8a61bfa121a0e188a6d6254791bb7b4b8ce37e7f1a093f8393d215480e4658f8aef3d7b6758aefbc4bc8826a9d2d785c6a1bc534c38cd6c696b5148a677f546d9dfeef6373c8fb8c836138d668a077e78a6ee462b1a4025a6c23491389d6d9bad2df81b7fc06826a204304b6557281701a898081710509d36abd7deae35c534d7f4c4c9785f81d9fe36b9065482d2ab3fdf13d0cba82762f66ff7f78ecfce674bbe2c0e919a99b28a738fff9c5f1db214493cea0f91a4d6463a20c44f9b2b18eddf31ffd27657b4ee3147f6258265319eec266adf175c5ff087589e10ca632201b596a57842f44f6706a53795877526d5647076659a785a9239b3996969831e979b2820ec9a3e2e698ca6f9de7050f5db45776446bc24f45605ab087f11eb788d8b5fe9a939d5e74f2e22cf95ad79e63e1793dd9c334f19013621bf581e7cb555ac3c7c045c08c4974ded79280ea4226cd74d5b984479e2c6b73414640e9a91997b3229949fbef494054812023ecd27e41311c3039cd614713b5fef8e58b4240ef7ee968f2d2b7f9ceb80e5f6fa2767e75cce51436622bd9ad59faa18f8d647c6bb673bbf1c1938b889e9d120275314f0424bdabd7ac3c9825fcf7bb039f43c498a9f8ef8e508c8d122e2efe1eccc2f04997dabc8e78844b2188bc908179c7dac3a8e2e9d7098a5da2f3454a07a447ee7748c75564e925f9b3f5b773cdd525884d3a3f5e5203e35fab0d7832107aed5e293aa1766dd30d85eefb9d7f3de39dfdd53ef1a52a881b0b5d651b5b11d5f030ec933c8f3075fb81503a5b6259fa72beef4f8fb06ea7d97d0f179e0d417c7d9ae25c3343ee757d8ed96d8d04ce01633c20595014abad8c6761a96c1b0fd63d0ae2fc9c4b033bd3c12a6541ca2030832af2d9dabcc4e54a5846ff17dbd0ce71d98c3a64ea90a8a3a4a3926c54d4e323e7ccb0413bd0c713b33ac04d83d9b0fa0267ba5d22152cba6d3522ad3dd681166ee56eaa9b46c509a24718ee7b2dc05907f0dbc8ffb185444d06a56750979768b193d94aaf4e08d054b15869201fc3e87e61d035e4da52377b3303bdec0a06970aec8e6f2b87cb66572d057264166cc6ab91f749246814efe68635b66b6e1d8dac4ddf02d64ab039f8071c88ea76b457ca01a86cc4473a330e119f5befd25eca85ef09bc196f3fdbfd915f1d1985d3f5ef4aaec7875b9bb2abf149925c2c36ee9d6cf4dc98760ee046373d611ed1d30e7e4e31e1b25400de8c89dfe37ddee18842e286957f17f3588e344d4120f707dbe330beeaa394d273fb05e23c523cdbb5a04c8f66f79661c8c872f498dbadeadb0acfa12ee7e729458ca30ceea0ec7f6da35595f1f99b2547c3ea091913828747f75b2f24cbfd1ea3de1cacdaba761fe7a4180dfa1477f53be7959d5992cf8e25dc03ce1141461dcdc97880570223313c5fca23d2bf41a0bc9a50735a9e79c56f80508b0a5d8a020070ec531b07ad83082661ee1f213a3ee6937f70bcc52750f1d6b8767b227d3414a2290c967fff068481b9737cff2f5ae74f4f1b3fa8904f9a2c922295f449c2706639cbab17f13d78a4b3907daf02394364261a57de555aae6e8f7cab92d251816f831b1bab4fe39218b52ca514db47ed161dfa14a727339619785667bd57a0d92bf597faf6f308eb8ee559830a692ec9a3c982993f06b30df1e196f35d47690cf08a172fc04851afce9c69b299fdb5436a62d9cf65ffa9e76fbd817912e8d52eacaa4856e1772ecbe14df50a9c55844755ed38e9422b06e9f11d45585168b86781e7a79f8892547bc26205014c4de347f93e1d3ddcb1619355681b4b9c289d822e5338b303c8606f0c7068136911eb4ac6acbdd608b54a37c74454099b0b671be0fff418f0dd261420a15ce764112d226656ab9c11106b6076176f6d67c87146566a89d07961038cf254506a4d726ca17085e522743c0ead1b9eec10b87bf4c583db1b75b1b59ed7cd10dac32762406758a468728fc622a7d57a9a9887a70705436fc27aec0248537bb28ad4948d5fc47d25c3876b3de257433e088d4a2e6853149c4b97a7e76a04d9f9b5e36f088118cec9cc726afcf992bb872be9e0c848e968403d597c89cd500f44b4460c6179b390240818785e6521e02a56907eb04531880bb75db6b6fa25786faf93e91684b488c3167282e2f3ab30be13536d51aefc7b6a3b801f39eea6a793e3e6741bddc84239bb6acbac3459fce6b3f70081e67285f6ac69fdea7e003a446033b16fef011688b4a43aecb5a01e21c1f0bda632db80d3ed66256e923888d97cfccb9291f6fc776d5bb2d9dd46db40d86ff4627dcae2282099058d4ddb4c2df3419c6adb6608ab1b789d217196c0e5f5696e68c6cd59f9a4b34db0f78f33db665dddde7fea4cdf06e11ede18316379f6629149a596e0ed3dd106c97adb85cdac1f583fc5f723ed8b0d7d4cbef5fc94da8d90e46a3b4cb129d49f49e754772014c43b8db603a9c06737985ecc1e75284e2f97722fb08755bf4e8392c30036ab0d54beb762501df1c801ae888cdfb544c639e8b872d3f7cdc7eeff091afe2b80013e3f85c78c99fec79f39ef6d3cc6634de165bed36c70c9e9d43d7835cf5d239d68ca4730ec28653b936d48160e34f9868f8e51852722ba782e066a2b29bbb2fd61e7048fbb27fa81f81a57764edf11df04d765774cedde801e23637cdaedc8b2b5813a42500cadf75f283c43e4e1946c107b734395d86185ec1b4919e766471fe24dfe20f97f442e858d6da2f2584621ef0d6374a454830512e3c26d31c3d7d948b45350400bc132cecb2f856cc9e6635affe6a657e74738168121e338d979a3f0c42b7031e34fb50c3240bf05f863f719745afff9632ffc6b9d2d05ba5e5c68eebc7833a4982d7b238be76e660830b910ef7f4e92619135a4a95c89269b6bf91229ca3992d5f19102219a8f2b265a1a85cafa21e3f3316b3e916ef7b4134640fae77beeb73fccf8ffc636d1173c14932f0290f27310ae0547c5eee6806ba7f82aaed0df0c5872b00362b49a028d117e199a599d431c74255f9422820ed4732ddf7227685fec84bffb937e5bafb4ef68ab161ee76b29d2254272e65765fad7beed7fa8d0e9fa4638d4a0c10d728fcfea910534835cc1600fa4c2024777c7b2004cc443fb82c7c198390e6c804ea7f44de451109e7c030702095ccd078e2c7f03dd49d648ae4eada340326b2166d2fde8827e450b61aa0ea3fe6e9c50e0823c96b09a9e0078426803978ff9b9e0322487d6467da599659912078cbc2021741fc8d94e7456e4e0ce019ed2cd94beac6fc54c6cbeef33bcdcdc50f9b04ded180ef757b52e6ea5f5a36a91d48e118f8854b4ab6526f57b17509fc05860167efec5b3ba904e2b78a1138033e361a8cb1f6d3c4e95eb759e1d5cfe2cda0d2fa8072f782f651d8f5d9c99a5f7fc00aa5ccb2800891119c7608efe606cc936c534e6c64ebffbf93d96fa957066fb9afcc50305af08cd50f388a9e876968b29c23d34f3eb479a15e51ef1558c6bd766bd4c9ee791315b9774867f1119adbc60409b5f9d3411ab3e2a8b955a1f71ce93b98f03c88483e109311f73f0d4def92a9bd84ccf69dd3bc57b0a941239ab811c8e902cc30985978c9e3ed1b7d0d4e9145e7d8bd2c471cfa8b1009714ca0a71098eb01be3b81be9361463cfa94991443e20e06721a7bcc89491b9ecbea64772aed210a1ddbe3af2b7662bc3709690dc13a6927cdfe727b9521bbac01dbca0e57e9a642054366d4fb06e6c4d17d46d320ce565aa025677a9adcc78c6b67f33b53e8c175f21a5b4577d028c6997ae6594e29cc21543a6e0de921a7052a65e7836b06a4420f8bb97ff77beb97cab49613ae3a9c0f4f103ebc38da73ec79badbb52859ab37674d8484bed8e7e6f21fbef87bd228d08ce5efd86e6ba4d67d1d0de47d584663612a0e6874cf10c82aa5db3d8bf27fe39b23dab39e610125a357548319e95ac9a0116b171a67ff2784a0a0aa3bea9717ead034b5ebe1c591d9f3b644b18971c9f9d60e8f21d1d6bbc02d66befd97d33b8679490934ba6ac606e136666b5992bd806f75fd6fe2057b7f84b7dce99b4d4ba56ae5af9ac0ffebf287e14760e4b7c3ea4412041da4ebeb8012a1fa90a97e50e1d132150b46d2ca2260affd65e9f20f3578532148817ab39049805153f8b65070fb8d8835b260175837bc2fefb6d3560ec10ed9075a663cd1e51b0d60c2a5ae4c2f2b6b4efaa524e68667833c3cda9c8994e76bde5d24e86f774a018aebabc1d5933df9c45f814a29664dc33d56f15f858642792e705a1a866f7e92776b26af645e91ad8f7cf247e6da1230f611e8b69f0153566a2218fa8000571cf953a9cb881612c7b283df6b62b2aedcd7bb5faaec35ba25db2eef8c952e2fc4f068a265471a501b49290ee9615992b881948b0c6d2321a1a593bb6e92bafac502714d7559c52b5c639a8a394cd12c1e4d41c09f4128fb7c1cfc2032831f887922d15c4f571aee9383f9811953b3cbc0e959a6645e145f872583b466c963d1fda233c35f64877abf702b09fdcaf80895f5f0aa199368f58767ccb674d0341bc8b71e117c1126674c0e5cc22744ce3332f0631d3b59f02a07c7e3f5bb0f75ec476330d72c1aa5c20c7e18d63764751258cdb11e5e63fbe4c474b1c31161a6a561bfd74a57b57505a7c596be8ebe98191a18eb067635636b083f37b897044f0f01b8222803da39f60a787c91f79cd1e743484dcbc18de358e8d2eda20ab22d9372dbcd43d3e524a5481b67b1c3792c671f10b45acf283da9a9c44e1f3b6775e300d8da1a90f264755cd2a10a86dd7b53c67235b10083498e65a32e8d8f08b50b4f9b3ff24b72e4dd890aa85754e04b38fe702cacff7fb6f9e21d170e247c18f79491bbdfe2f2ebe18b139e86ef5371f177c92493132a81437a32fa40dbf5aaad95ce04cfdc936981cd024b2c57a985a89a56645faeacc2f57f5ff1f77d0b9bfe43b633caedf6268be05c17866280ed49eb3cd02eec77c6f3654620a82f0f80bc6ae27aa28356480db668667cb0178297f334160935e4b765629a88e84f4d25a8914a85ccddfbaa423f9394613c837eb3639e91398ee696d77220c3a4d86593af942b1334749ac1f58b7cb71fecb00f47e9cb0c4863823430a987ec8cac730d49fece1e5eac48fd6b6109b6d452ccf59cce0f22f4878c4ef77972297569a253b10b2ac83eb72462cf0b96c55eec340b8dacb3d24c595902dcdb5b1989319fe57edd6796a4a77db3cda870229658f33048b4b647f14aff788afb5c61eb31b5633a8720fdb623f36dba1953f6af204bff36e371a58595050d345c8330cab951c4fddafa0bcc016b7c5170a9a8fb2ca802eb5ba04d1d4e59627253bf716b9dad1b04aeb79d337cbc65dcbe2b0948f795b936bdb310b5162fced71795f9781e1dc7c34a6575374d41eed2c2f120b894e0fbfd6335587a25aee745fef14f67855716ad05f09414f794bf672e61c46af2f977cd238d9da7fa5017b53bedc392af31fb08754e9a9d63f1afcc5ace024492d9d03330b99fd30c073b51ea2b3e1341f300b29665ef1f4dd70150f4a5ccac9593953365653f9e79d07a46b2f98a8e0ba1e89bf04e2385d49b5956846e6311f5b442f37ef3b2f5924c879b22bacf1fc3783a73592135bab4738768fbded3f7d3c838c445ef6f90e194b3b06cc172144f6d306a1c9c02a23f0d243a145f73ecdec1333444ee276fd9efa6377e458182817c0159b7fd00e975b9fc353d0170e99ff1118ca86ebdd800d24c9e452b006fd8f9281a9ed9bebd643385013d2f1208a4490c82b6087cbaba2fd45fb126fd05f548887fe6eb62647d8acdf70f9a55d40aa21f3e3013d7237c284f08fe2ce9fbd0439c1fcd059e749d3043a3a7e4a86e832b3e7fbffc2057cb4742893e3bc9da0ac808be3b5727cdbdbcfc0f1348af59bf5d49f08b1d0d6b48d9e08f08e391a301e78cb2abe21a6a6c3f4c14735d2aefb48805ddbbb29a540080b5cd0e2c137af194702663dbd0834268513561c60de04bb0662c906211c07fe6a6b9a6b118e1c1a0c83c6087e4bfe3d997cc1c76f543c38264083441cd85e254a59edcfcfbf3ff49d7b12c472505025649a106e2229d02c62e12030df08211cb4ba4d8b3cf1f56a4ebb4abc1964de5f97338a774f52751f1771099fdf60e234d8678039bc6dee72d2d2d2c9aeff3adf898a281d931cf59877345046d9eaf5f0126fc58ad27ce1d3bd52921003ef9ed4457590ffde9d01ca39fd7babb50fb16610db1fa1277327e37caa18702117bc4115d1736e349d4e6991abfab8f31eef2bdf83adc960f39439ce12baa9d3e15704e7e38f462de6e3ada02985415fd6ed2caabef61acfc93e9fa553eef9fe8d0e5f98d33ab505aeff27ee130efd68822909b52a4188c32e86a39b6e6b88cd1577697759a5e93c9a666316b86fee4b8f670a2766eec13565284a12e4ae2ca1109f0016be593e1bb61c688cea41994ef92b9b01fe3d29973d64dce192ca8a0a89a445a4cb277f51a7753a77b827d3a4985b8ba8c0fcabf61ab7cc23f7486f5a7b9bab7617daaba2e470f00d4104fe87fe5fdc7c50504bcd4472454d0c8aa08e650a56d4ea30e2f329fa41df6d8efd65047359797580a3919747c58857b8580e2bd7eeeff1fb3b09b875b8b542c6330800d5b65dfd5fb878c6ff56061374ac34bf5b5a4007778c1bb275a9209fd384b9f7a12fdcb0d08bfb685ce032c0fac98c3cab5b8def303e7adaa305586a1c4e49109949acb3c5bc05d98908b5e024367efbead9f4ae2289cc1fd242a68d29c156b385ea783acbeb3f35bd9b856b06bcda7ca5232b5e01c40c530f6a5e3d00104332d55ea0443334f853439a585538af81d9097856b73f6bc07891cc06f44d3e99dbcccaccce5ac4955431910e08c5e5e4ee754537ed3e211e99ca859e46933f7407bc4d64ac2339d0d900d6e493b38d4c10d0e6d422b1024ad2e3cd8af5b392424832545e187220a8141956d176ace20165de3094d80bdd612c3ada737d8d9109bf35b834fb7c30310d1896d8e392e772375f2535ff2ef3bd9dbabd7cae5aebf16c86561292231d023e09c82aad604cd11df5fdf7c2afc23f74d6782ba298e49a421008a6d944fba78192cf0b54c36d654ff0eea3fa149a2dacce556678abe73abbb844697ca3187d3e8b72f132bd55b6b3d07dedbe90dfce7a55eb0b7fb15b0a9866cadef452dbb00a033fa4d335f6d60bc080175721626731a38c69be52dcce8b4582f99a34ff1ecd380c5c3bbca9642257520f7e693009a29ff5d98809f6cf86a443c00c5de30d3a653267a1f80be3b0ddfa762e839764a6fbdaccd2f2863b70323dbe2eafa706cdf86ada68f0aa53418e74f4643cb800b7ab7f898256f2e03f15c89bc51b1d245598b7bc88191e5220a4a778307aec9db7e99cdafa04912f5ff01c5ad9c9260c6e62fb488ad3ff67150bf3797264947ee2f94c7ef554d13eeacfe92f70d0d2689954bafaf60d2b5cce8cd74b56493975402a74a5b6e1ca8931277f5ad4f10ac95acea77b8c2bf8e086a283ef276feee8a14f43a765d88166e43167b65ed127907b01ef211177ccc4343d42aa8871807fab669e264ecc4fec2e211978d9c80c6b075ae86cd48387040c6dc30dedeed0dadb022dcb3b1fda2a69c9ec9fcdf7f17b6a9df3bdb697cf15e4ea13050ed556db850c11b9558bfbc5ec5eb1f4331270799ed2841f6fd8e0587f086a0f91ea1200a538ab85173b3e9e3bf91c289cebca26ef2de5acdc670dafeb8742d1d4edcb9453849f7cce87f10b25d5bbd763aea938967af3166037016c28ecddbad50d2bf9aeaec1aeb664db12d30bdf8abeea97872d8d9680e002e4a19b84adec749908bb07148627c8c0c33a1cba62c0579fa216fb9d9ab419bce5741622100d53da71dde025b323690df6cf90a4e9575716f7ea25c1ea50dba603f1acfe3b22c45c66c8e177e622a0629fd53e96c84b4df008d416f3f66459477c2001c3952f2d545f86279f55a34ffa784ecc6355e68fe9c68b074feffbdd408be114b16988e2836f104cad235ea66bf32995dbc55ae75cf2e2211b0ba7c4163194763433959fd69b59133bad8dc27e6b844471757bde2ba7b10d4594b2639634c4ae2dceb50add1881ada33fcaa4e81235a4c4627559fafa7ef3c8f57ee2a6df4a9f2cac0d2ad98c56f6d56ca15fd2d60a5307cbc7efa90752f3b68e8c92466c52f739bb17bbf172713d85fa88a7915359a667859d96f3911dc92e16d3765c1b0d2a4ab28e522f466d475192ca673bce7552260124b48d8fea2956e11564f9869045286051e01c7f25407b834ef70ef930928304b569b6a7cfe58ad8eff63b55c5a22c22816e6727ddac915512fae42a18e8e6fc0256e6f7ff27a454d1586f305b9648e446de2d9a17a60f20f08a978e96fd580a9399408e3154da1e9e526f2608185145c6eb99e9a4134aad6d6bb14d7f10c3c48bcd4b089bd0f80b66f8aa849623cf2f60b9a5230575e2acbae9c6ecd016338af21627956918d886e6f2b718d2cc1612d0df672b628938a9de1e09ab603f6aa84dde6c12641a141b9037b338be5a37d1c763fcea772882f765197dcee0aacec1100e69e90b47816925befa73ce06dabdffddbbb36d181a1c102566ef2248a1896c4fa9d3242e0c6e0c2a3109dfb75d956dc322ccfd6eb85877e15e8b5a1e28be526935285dec0f27fda5f35cfcc0bf620342e6b6bd6a3c0d305bada3cbb81c6faf58910f8c452f43836e590fafa3f9de170d40c8420a73cac0c6fec857b2104133508071dad02a548a52531ec1434c1250d522926d0e184ec7c20f8ea88c3f90f7f90223a257e8be026d92f982f84f8df749f2d0c0dbf06f87f4adaad6ebfcb97e5e926981205dc4f66c7ceae607e86ed4a2d9a1fef2c23590de3663bba85d6055a53ca454baa692d8e5ece3819e95228df1dcf829e2c155c298c4aa35b51ce3d8d0f7e11cbd42a2e7d3ffe349f1659f2bf5cf8e1e886f2a82b9f2377e65cf9c1585928ac5fe37f00d2dd62426fd57b827d6760da9a2725c60bfdd85c9d046ecf151f55fea2e0c1fc66527edab7f14485615e7e2f96697606f8b6841f768b3a47d06cc708e95759a59ffa16f9f85f6794866717a4875353362da067ec43243b360c3587452d7735749c3a1dec230c37f517830a7a49879af474053fc4822e2e10190178baf682c3d968d71e183e41fd808048865d91a55e0f119e96e4ab7f4fe54dd120fbfdc81033903e5ad88fab09213c7288b57878ec821f0e251ed6132aa7ed445dbdbd684c8abfef9b8b1e0aa2adfe1ff7ecb7dcf448c53143d6ba90cae22f86abc3ff07fa6cac80550ef72904b9843b0d302bcf2be8ef71491adadb11d6705c034323e82b30e1022ecf9ac945e9df9999a6c188e5fe9de01655cdd82a3f6b6c044bfaae37e3e7bac38c0b6116b2e35f130901cc777104561768f128b3354f69c0c232bb7fffa87d6f511437f8b9fd80a105282852d98716906c237fc50aaac00ee8915d5016fc93b069b33cb3fcd35ab7b915eba59eca6a49491de0ec377733c73de8562ae5c9ed6fa3472c1b6bc11fee58c93c1a5ffb865b09e1725db68a701c98fe53de89305138725652a8d33481313c8d689fdbafc7e5d41539379aeabcc0253414fb2296afb7708e4a2a8d345ace6b7a0adffa89b1d099bfb0cdcad5446ec92c90af2b6025a953784fb6b579e9e18123803ab2851efd04cc5a6a82a1cd04b77295046d798a6f16a8cea76b378c2ced39af29c36092c8e6dd731dc51e979f9a544a344dcae27c99205ff3c35f6ebdc043d8e4f9c233edb9163d434a674a3444c44f4ee294a4df91d93830e31350f193cc4a84c898d2fda968e437ed2d649f1b624e10b7181ba06ba0ffefb4e1e0028343f71713224845a8466b1c77b09aa2e9ef15cfffb274fb75a6c092d2a9ebaff0ef72c4d9d24f6b2b9b1b156cfc3662c01624111720b50501e5af5f804b11f758c164a4b2647e60ef651aa7c7318dc0ca04e4e0866498af4c3fe1a1db030c94237b877be3a0fc25af479f2729f9db437f19d0c14c442d47f81d1820f5a6583c901779120e4fa1f5a3d230f8fd7f46ae81d085abe5fe7a02db0025a7c4fd42f9514a0888c9926364f77565f832120db4be9317736b4d479dce5d7ac0c789ce2a9cc2fb74887f2dad206dd30666d4d819e4d17c94eceef954a4fc115e7007fdbdaaab0b6b4a3a969a4a6f108846e7388baca9b17285619530e596e6fa8de5ae7b7e0fddd7c34e8e5e822fed72793d70b89c88f9a0aa080a16b271a14e8ebd60ba761e61afb07a48134d6b8312ffa4fa2aea87086f72e774a582b46eb2ece9917dad62a853c6f9e090d2565951332cd467d44c595c2fd1696f43268f32b7439eed07c68506f62929387069daf10f8c929394d747faa41b564c3a8e29348233cb5fcd4de8b588dbaf0d0234ac558df1a9fb335e00b6de849806a5a9ef38aa789d01f3ed4414ed7cd31362b14e8309b92795a46371ac4a00e3ba3571bb463b9506783836edcdcfcbe19afbf2590d8d83e58130ed2470c31b4dfe5bed9a3e7208b520adfe4d56a15d1fc23bf0ffd2d2d1f39aa2469e76a3e80df864c224420ba7bee420b2e89db87f6a87b7f2fefe1e77b8ef6c748fb1d2c28642437e9d53cee09a549519fe0e42e78812cedf0bad05dcdbf467989dae8c27273b62ca9000b75a12d51908e9ef649410dfb083994840d80ca36ba4a99f0df95c398d71e2aecf03b72e0625870bb5e5e5b53a192bb77166fdf11ad5df3d04acbf3d8cb74c87e0a4239b7f7afe3267c2d47bd02004a6bfc810b1ebc4ba36fb163150b83c4902a4ce34584b7ddc233668d13f64c1492591bd5397f1df3b2d72a97fb484958c7971c79c9597c5a6e9f67f28f5b20eb1d3fc0cdaab75f5610ea7b6f55124bc9d8e03ce64f78af6325e4a72f112bef2532eeef38d7e6a4fbf597ad538e2bebca4c729cb12f34804d2a1ce289492d9323e91d377f1dca102893d2e683db515e9f1ebf63ef784e03a7fd72bf0d93375ae101582b0eaf2dc385d03657d7e44e3f2725c1a4a3a07410474ab8dda90dc1c1b1764b03a31f92406ed491c70f7aa2e44020faf5d1af24c3a3aee6f1b476d2b5093a77cfaeae13a2a5bf083a83496c16b23cd9c7121240d7608930fea9e31841f5a510daf9a3736d167991cfa209c71ea1638c438f948249b398dcf3bef48ea3bd25d176b8948a1a48b855dec5f9cff2a69ae284395c5c4d9c3287bd2410ce21dd3ff6c396c1011b6f8d40cff17c4b3bb8332428a1c79283349523f82171edcff8b0c31672f3ee64b9a830f50f58c60e462eba1c38a94677be4b1ef9d12b84823d22bfc8a22c453e9e42f6267b62bfd0c4cfe5fd5c72f19e6bb1975d3ab42172cf2d1db136bf242edeb47ae785243f100e4a6ef0ded8a1146865f82f09d9f5b8d32660c36bc602ba36691007b54ba497716cc86fe33e68eba74e41ec910f3acedc7bfadbcd734f653ee6711750358c9f7dfa586196c51fb14350c532f519161f706a7ef00916a949cea8afc4da60299ade110dffae59d3e8063bc215ca8102d0d41612ef9875ea96272e320fdaa40bf0094927931372de6bbce92885b504cf2bbc4a641bede3dda1050a178d585e5e998f31d5d82da8d45c3c9bee603ea878f46d88802d5e9337e2dd6c8e0e091fdec748745b281203ec53460ff76f8340604d7f076fb5a08a4bc8fe3b02bf05dae233e042aa44d1aa0e71898ccd95ad94808e6080a2cfc18e4194e7f2c1ebc61341603193a2ec107f10e68164775fe0768a30e306baeb9490a1276eab1b532cca832c134da33514b2e71af7ad4697a53dcc04d4283d95d6b8696ea1bb3e82789c4b672b5134fa19b084a68cd8c835a45f389ca5599f150ff5c00ac71580a5ca25805d5d6aaaf5ee987b85b71dbedbb13158c5b049e9e1c502ecd5639b5012f7c82c6637ed03ac1d5484574ee307e7f4deb26c3bd675c5fd1a5b290c860341218ddd67a9ef0d0ce295138c8b2fc48a9bfeadeb0014462b7632575078799a83a9a955b205e51c0b71b767bc37c477d75785ce76adf7d060ea1b33b9911fbd386711003f2f714f23c36adaa179c81a49326a23cf7394caa045e419d6784ed115735ccffbcbeedf36312c2f61799f35414166bd27c486b8a03394db41657d8786adf842fd2a335d4f1ccee9fd73b37d79edc99471bfa0fbcd58782712193bad3427f413c55270966060a6dfaacf06d56f03664e5e807df1395a533d85ded8f57719b9f86c1df4ade4853f3d8f965976b5778b2f04eb3ec8dba7948e2c8d00b6fe1320508aa223ad2926b0c760c8ffbaecaa53e532979ab013ed4511b61b3d962fac3a6a766190d357799273f73b1aebf4bc8022e8b8abf795673238686724b4a4575814ebaa98ab4e57c7ed897fa9756d6eabdbbfedf9c06336614ad4888bb788714c4c6111617b80d00dd7af73631544a2f6ac9739201b3eebf20644db30786c80653849f37e3bb31b9d14651e4bf56ef24915d71e001750ddbf7f2408069e0b701b0a081274106a4e2431023e48e46013244e4226171cac84cc0bce8d3b30e71374fe9cac748f546a2245044dc8b3f3bf0e2e23004f639e3eb06b8a7da7e3459b909b40058e8c3c010583e8553e50de5039088423e4476396987b38ebfe8cba30e2d12bf108f59e9d13f8f0608354274aa1178267425481e0bf9f96f5cdb465b56e62010398e6d6d5486952bf72f2ef1e329221330c45717a7eb9ce0d7862063b485ea8813885d284271fa3b7dcf78202ffbaaa3fd416932f6f9a23e372ff804e1e8c89e7455bd5a0eb164bffb4aa95ceb26926e38fbd01525491f477baa90bb9841ef4c3d489c4fd598b5ce79a4511b5e2f6772051068e84201b9d6e58db9500117cda39ebe5e7f32f22c97514917b007ba80560e36b592d0645b9c07e2107b450d763a4a86e4416a98b7a2b267f15c2ef790c862037c2d168e794d8ce4a1c23a9d4f683139229b8e6ce4f2ddeb35d6f339843f51f8d5adba48ea32e3d054b37d21389b8590960a8ea57c497b4d65c114f2f26150a7a0fab8c6417031bf2d57c6faec06caacfa4642a3362ac3a96c5bbc42a6864ea3b45dc66acc516545675fba306768c49c93a897e5bcd9c71c2d38caa58bd24a00fd3e1263e5668162caa9e2a73c6770219a89297160079d73def11ba74b70a95f3e0fa8c1872794a856f22845e54639b66665316865802b48e64fbb3659e62a886aef45858f0ba28ea878ee6a76764dc68676fe1e578458c4e9bed8000b6d537b6a3684c6f7c0d943179880cb77d5a388b303e2340c382ffb2c9921af475381b503b5cd585807f2628b3bab895a36574e43f32b171ba97c77d298229576e836671e97d264794dc892a7c00ab08cd997cc006e2123a47e17f9c3f65cb28b7d9a7ee7de19aa8a0329acb4c8070b03f6680f9adf1f258fb46bc192944f5f33569a6932341b460cf4da8b083c857d06b860f515d668c430be35fff33981ed67dcdd4b7806272daebb7ec0bf87d1d509db5bddc165cb91cf8bfdbfef6b84370e8c9a0be1474eac784baaf838781d8d1b0f53ba053d831c5d35a19d1fb240b54e2bc980202de9e0b98cacd3194a59130915bf92f0d6c4d54c6d00764140a3dc4d7cfee4babf369414825a6a55ef132518e60d1922e96f16db659c21f7125fefc1718b20fab500b07728813d3d494534aee5437ae6f973e06f0d327f6356707bd465510617e456f2c6c18b036833a7619620f6aba464e396db7d2d34d442bd3e57c9219564898569a0b95d682557058e579976523cac96375639f78553d74873780411989a770a4ec136bb2f7ec84590f8975a63df71238ae49dc7a0ab9d4392645a405d8eba0bb892428a7d3d155226baaff49fffb5f7c82933df3aa3bc49b601f74d29636fef9ad55b19480e8fceab0c7710137572ab536a2638fd0555270ed8ae394af71b1dab6c1474d242389f9125efe09b23f654921576c279f4ea761423f8581f381b7834d34940435a2b3608d79db2e04e8a3248a9bcbc70fece108863c9c645d11df6bfe06822dfca5e406cdc823136c1520c96cb063ca2695edae507d478ea2ff2a52b2d2ddba4ca32ed880f15448ff0f557eee89cac96f3b0b63f053b0664b443127da005c20432ba9342d0646038549f2ba89b8702e7e9a2a079b92d0b76575712d909931ee19918e4f697eb6291cee6d47835dd5902711201195a0847d578dda3d9f1fd04ab0b1ffe23f33b5ab44d381a01b6481b3d3f43db5cccf8e0ea2caa60f177ee2d0dc9ad371b81b70a626f5d2db999268913166e0afcc16e0d21759e417e6ba7399af422da8ad7eb81f4a294f03d79641e215ae249e6cb43086383e430344e45d7cad8b436409dc9a5b3863e3c98a603fe4cfef6e319d23ed3e73140f6a9e088c8b57a4b873f31ee24481c1ec9bedb24359aa61fb0bdbab7b4b551a05ecb33c6a20b115285a0ca0e79723856505f1889ef8e90234dc7dc9a68120acda038f6cb0caf8935d06ae7a0a07b7b221ee647130a1352a7e162ddfe4c9186cc686eeebb5526885900da76820625cab293619d58a52d44f5c440c6e2691e6f1c35a877397aba8ec1df09b2510d69b025e1c8eb0bbcf1cfd206b48048c5591db390745036b41a88db75760875e1a7305ca0f1fd69623ff4f0ec6c5df0c3be6313ef854f24959dc9df76f2ca47597cf2c3d27a90858d517ff7695ea45b8d5045364d31b83a6daa1979eb56288611a8081a1ff9247c0961bd917b484f69cc63d07a64e810ac082b939a2808115997c7546827466cdd2842e0b276c882e2f5cd57fd4d71e6d9347831c171585e85aaa8e611dfa2b279956993c1fe8703deabec7c09d794673a879dd4c553781bd7fcc3823c88740df7a72eea7df1673c54d0dd4d83d167dcc7cc7f0bda4794b9cc2ba0cc93ee54aa5a876adb99baa71903dc2a2c827bda09c735db8d58e7c13c15a46986ec32656260f729aa96ce784f2814c29a81519675104adcd8f7c0c26748286136500a0fb6391da1487876892cd04f5c72f9b4cd16bc804a725a81a603fa68754dbe7ac2f21110fa0f822e12c760234c2b9b048c51e70b5fc6b90c59dd4d06fa0d5df15e492ad5af60c1c3bc538ecdef01c8b6780439a9175912b2ff8ba80589b4790c9c77e3d44a6753b769f3131dd2c910fb18aa5ca6f3efa7c75d725fa3f8857aa8de65e83dc49a2a3f48d78e2abcca04ed0a842c0d61ba9cc8d56f33738c06828481d7ae915a0823008b1848cad7ef3154695a26c8f6246dcc4ac45fb309720bab09c77eca4e421e273378ed6a823d68d5975c50d251b74a4284875ffc666482e05b882ee3cd4e578d56b4a2b04870515d63c89ad72c00c25a00b44fc25ba5a01d652ba91544fdc814c80313c103c7086e6f2c4f5b80b5ffb7072bc4d6fb76019dddc6aa4181e5cee5d3b3d9e9a6983729b4806da772af8ae3b8f07b8ffa85c61efc54b2c3bf909e1ba71cca2025a73a9799b19ae2b324dfc0776cafa81b56e1b37b55f57fbdeda52bd9258c8464d6ec9bba283c5cc3ac049d64bfdcb876abf753e865428d0dfdc88902909410b94451a0025883b75e2992124bc9cf5e43f2a595b22958600947471d7dab86e0cc318068844aae96914cb99c640909aac71ff69e2f63adaabb928e2c5f3e25ce93192c20f109170dc04e4054d07cbcc5054ddbae419a4a92f86e67c2b9a786e300645b40bf3e4e00670f85ade69ff19eb524d9097ec04152245accf2f6654ced6ff12d4e18496de7ce1def234e67e7aaf74c6ee4eaf7945ce0553912082afb5b16f78cad0c18eaf511f5fd2ce50a2ec593574bd39762cb8410142c3e7d8c1b27272961cfa42c9c7c6c081d55cadf220326e2890c6330a8733eca0362d0616cb463940e0866c830a7a509ab6d63e76ac4386f90448a4f393ac4cff27ab96f5c7a903ac2a76d4db8e96baacce1db775b073ba7d180cfe37425d232d98f9c343a4ff55fcd443829d44aae65ad9fe2c2cc714abfdf97014a06e2a035bd3a924b444ae02340947542b7b14ef29aa000c87e65d28244b9c2c28912d84df903412f39432bf6d517b2391a5549d44803e3e8c78ed0e8126b23ce87957f96a451c70aa7962cc264621d91854817306856db18bf5828ef9efb970cae4749383a845906781d6a993945c67cf0159d01189985ecd09c2f3f600df6eb67bda5dad4a04904270c912b257dab937deff24844cfd219ed826381925eb17909305c2a56fb4d093841f336baa8afa0236e531385ded09be87e70ffd4e40da801d61c9e30fd3fcc56e5f381dbc71abf568f854ece2dbbe6d05967abd0eb863b75c67e69dee1478e8a61c3f5226beba86ba853a7d2cdf78466c44c96bb2dc3dfe19e391bf32284287e215e743a15f17af055f654f96d8385e18ec8096562124d74d19eb96803bf7c3fc83b58f95079c5be39cf566362ffce1217a6bdb3db6cbbe8244deaa972ab3bd8739f215fb5578f85e2e0e8e1b35000a1b8e9460bc989f42547999bc70f264cfff6f72dc9b53509f2074fa04c86c2b6795f37742a34dcf09b8cc6e83a4f4781bd9d7019be821b678c5557c7d33b063bf3105fe2f51a1fdad5221c96356ca86768510a945a5fff71c32fe4c2d941073a25595e01f538bbc10f94b5f1926145c88fb892767b07719e73f69f5f68e208d1787c91683c3ad2d3000e37527d1b4c42390fac4d9913cfff98e2d2fb112303e69a447f325a4a5fd895fd933c6d816ffdd4d49566e3c6ea13a656038b0c2edd63eca355ce77c1d3091ce2ad59383796ce6d0d9b5d5a625af56728bdf97eb065ef1093fbfb07def2fdc451a82ea1bc8ed7899ac20644b0a5170c5c6b57fc39c76c2566aec81ae44a284acee0340bc30ad7391717de2a5858dc35620081ece8c8abe4b0c79c0801f8776a6d442fb93adec5e1098880542c9f720c91be27e595ee9de6e10a4f8a1b3a50db3f19449ef70914247582e36f7f0eb097475ea403e03a7d152691e9d0397035933187bedce50c5538e9f3b07ca7f513efca94b2ec00398c5ce4f693a88ae39602e04a140f6a1b25a1b847e9053079d05341a337792d88f4f01e42290cd83598e046d76c189b37f7cb9e43e953ecd493967a7e50eebf5c8319bbe4a240cd0982ba72b0ceadffee404a34f6b7a3eb033d9b9c9e60a65076671f8bfc754d5c1cddd909a7b98f810aa44f394806010390efa8071b1bd2b84ea990f10374aa26cde1a412f6808fab785a18056e6bd28d29d366cf55c0461a583ef9d6d198ac23d69169ec0677e18e0645a394c1f352f9477026a8d494ba1f305a6bed30dfea36ad0504de890f3c781df63a78a720ea29015b6c0e071b9f19b47c9a53068894edbb3e6d960fb13c0d1e3dfedefc84a4ce496987a132943dda5d311c496df90cded121ff216df5dae0fbc479ee9e263d04522a076f741b52822f5a83659e294a27d618e8d8f32e26a9f19b7b63c68d2025a3b0c9d0bf6faf2c7463580cc628d9f90a6c66d5f1e94c881b21f85f33c629b3b5e21daed71fa3cc33ab5f0f2ac8c93f2ef0801b0925f6a62e52a484758595f955e9e380c0ecd9b6059185898ba1f89902fc08a0b0002089f49790ce52ffa757f10cd8833c498c6e002cda553dfed68129749c1236ffd3fe5ddb4e6be6e776fe55ae43f5b50cb4ff214dbe8c346298fa21c2dda516c6a3f750f2c7c44a4d4e72907de8e3916a635ff2a5fab05f818de1b3f2933789c0b2a884b2a309630603e986d553141609d6d47842950622dd29e1cd39e67fbfdc08c65d05dde62aa1327a099190845ee77e31b6bffdf10cee07f568bfb034d9fe77d88c48c80fbdb98238c953d7f1439e912d2c051e09d63c6d50977725b2a2dcff76c3b9a44df21338c43518fe5f545b41c3391c004f837e98e25b8e9f733b7c5c5493c125d584e9ab860a8b5ac05f81cad91be1ab56404f720a8fc9fc0675066c36ababe0d2d9f72e01379e17b6690880589458037fad32fd7e957e99a0a7358c86981865d91b44262f280a5a6f395f16b24fec42a8d61b7b112bf28c2a3032faa45f2ee2e8e983d611bd0069b1f5b8f84c909ecfad5a0807f74da0dee7fc17042d2c87fa05b9b0caf6fa1246950a8d481c2ce7aec6ccbf1d262ebbe7d3b459f5f0d994b90f1a5e4767e2c9661fa3f3d70d130a01fb026ac66dd35e3f971ff2127f07781438ab28730c3bb74145056c74893195b5c51d2cb2e5c5914a9f657aca20f774f1f2db5b80302647961025c4a9ca73259a42734e3d26a5635c0b578b31b4528799d1fdc236ae78bf4ecc5a299be7703ed708ab5e4ce227d9dc8f07bad93501050c652aff7a59986a3f82d2216d61a668b5cade35677883d5ff26b1fae05426c5cc9c04a38010e7821b6de14ce425ebd7dda906d27c929f24ee2ae1068b3ba6d3462afdb305f05d327c3e425a62d4370a30180dc8eb7a267234ac7e7da871995c87a81b0ac3fcf71c5182d6e3c57bb3d474ed7ea5a95eae462490a1109c1cca3254e9464310f9f91cca15e3b568183335d626122f0a22d617e09b8aa504998b655e0fd698f5836730ead690591b229c0f49d22a7635a3bcec9556df4d1dfc112fd767d3b2b43f8a303c9acf5618d3c8bda1d1527986997e13ea5e0d45a86eeb3931cc49c84698c371ea3eda980705dab9d679379102f8570a9e23ab962560c60a6c740196291adf4fde1554780d257dea9469bc68ff53ce4b9538346cd84c1eabbb273a71d3851e92e2aae5fb14ec8eb42275891229b527ae79294d85b79ba93f1532d2af005ec3cb4b0dcc33b744d93c25dc97af9be81a2c30badb7f32acd3a46bd3f7c34a4bc9105e534abe05c18957942d8f9b7148a24049a641efabd6c915a0b81c46c655d1c485f9637430652034380a639ec349272bcb46241c2679af520cd8d8179341870185d383c840712c38bfb6a8f2918ecf98924d21975e90349f7bae79f366afaa1f4ae1f413f5c6d0bfd4f2078dcf017f336a5d06635c9cd2565038c3406c8e7b6ca26852d22c44697e67a567efbc4237bf1e8ede339694be9cdac3eb3671f23106d31d155b81a836a964ee28560dae3e4e9ccfc8dccae9cfb9cf0f0a352b5ab58edfb40f4b3df4f93530261fe413dc1b0259e062e9be5c5abe67361a235f26aecda791e561369fc97c80c4ad7d570a7972715204002e0ba8b10d97943fb3822834f81f081260a39677c4caabd404fcac4034cb5bd46fb5606f747b6cf0876a7a4f422e6298f1d7c91455630d27a70f3a8ee8120eccca844db4f4aec1fa3cbec1da490f5e58cef57943ed1f73f8c61a5da76566b8a40ad58a3d03a1a9ea2e2470aadc27500b22e5429cb8f9fc3491c69c902ea4c7ec764127faacaafbb1ae86c7673ea303c992d5f0541a58c9a5490e2a9b42f155b104c1947027357654abab6315099dc96ef47b0d8a7cd09d17034c5f606817b67b87d65016c132f5254422ee66ac4ae1076177f2391437546e75552e1104371ee21b5ab0cc690b2f79a0025561e0300d9a78d05f271c04280fcced4acd26495c93ea403b210dd6455f2993e6ddc9df5fbdebd90837fa448a9dae18bff1a4403a246bb01949780707b12e7c8d6fb39a4d6f978ef1a0dcce3a879f206cab9626358d44baa1fab7cb0e4831a9008b05b4b7c094df66c198dda359d7ba44a735e1d26b5fcfd576e1ec681d2b61c9c6f8e6953f78507cdbf5188d01674da61249fe702d8d25157d7f09ec574e3225208bd06f1e2b5f61419b01c2f28127eec6992ffbb7850fd840b1972ab04eab2fddf3c0488292d544480f9b010ebba173eff00deb61a512a31ff56c590cd8f3897280c6096c64a1ca7030c8b5f2e045c72710a007f3faf177945231c7f358fb83f2d6fc46194c79bed8200c7e5d56443f622bdb22af4fee0d114a1ae7e0c0f338e8dde1a242b0931c830237a2fccdaaf134470de8c2d16bfb20b16c61dc55a6eb57e735f82547c7706326f35c2166c23e0fa8d68ccc13e5f473aa14fd521d65349b76a8c225551229591f123dc1e6f6dfbc1dd3ee2313326cfa2452443806e4a7fb49beb4a7426e32a4d63184c5054259b75d445591dbd93fa3a36fbb5bd54d7f2e5115559e136eeeca2ca2f778f730ea197c3c2d2f7cb006a5dc39a3816d3d0ba199f72d3d1a373f714f2211d1ea0174dd2627984bc72d76e868174ecc298c40777f3c6a5ddde0ae99d72dc58abd0c0f647c88986d5752e8ff795e4672e0c6b2c8d42acf0f67ca46f7c75072a03f8b3fab3fdf47a0a264687c241c40ed4f68a90999f6c2374fa9b181a8370908a1b969f39a217e6376b592ead5fc269c239dadf175ba65de5c1cac6b1ad310b0932810befbfb0901434f3dc1907f1db12c5621295bb350be37ccca5e0e84f366ad1ba87288ce1e71cb21cff2efd6fbe5fa170501c0392490ac36924c70067d9a4801c525e78ed63aa137ff5e928122a6e3d82a218f303493ba0842f34b2a63c2e5a411d9073758890e5309f2b5fac5461a72c40cb2650ab9ed814964d6201cc77d28e234496b4a6ce5cc095695d6c661d306df80e8ae1dc96257f911a53fc4b3bc96ef3c2cf0502b6f5b68f30735b76f50922de6ffb13aa74f3f6c0d077efa03774fa210da20fedad25b5952d8d38acb556dc56df074823676345615893ffe3cf62d64c7ef6057f1438545087b1939218d3fd586738a322e50ab80e20a96610361f24ee8fd6ed52312eb111187e128e0787ca1106152baffd37f152f52c057fee658b5e013df6e966446557c9f448a679092f6ad72bd5ab5b18ee2dafc3dc3a3783e9105a1dd06afe2933d41d62cab00ed6184ac515d8c9f6a8993dc38064c3c58b27b68f6b4de83ae1d5e93f89b82aa44bc5ad916e01c4b0b0c519a55529d2fb5ec3bb1784ff8fd95a7378ce71f94fa59a3a0c39af55d5ea78aa856443e15c126d93af61bec50d0fa80aac8b2481d76fee0c0bda35ec24dcfd9a6556650e720ad1ab82b0aaf76f18f3b68a9c9fdfb1a19c19522b42e12691be4c9ed543a3107b07dfa51bcd5de0323ddd322db4ac1b85d17aa4fc306c3eb8df800d53b917bcfad2e45c8a0c45bd4c63e1c946d82bc429faf97044584f20c64f1b446e7cfadccb3606d294ca730ce3200b1eee9ab426c747c9f6455f218500249ae397c4f757312211aae66814597cf3aae92fe6517b71fb27126b50038bceb14a8f70d3177252e4b24c29fac42c887dde5c3e58673b0d6047f3c6e87e1ba13ba4ce402fd0da74ceb472b82ae8f494d123a548b2c1f0cf7c8d616c8ffe8f8eb3415728331776fa8136bda50ddf95d3b4d5b7704b189aeb8d265c1aae446e13f4fd0b7918d4100459c3320197e70f013269bfbbee700479dd68d8561d3f2a24064d8307936987a0c095d6a722452e2693aca00a31e87ded9158033707ed8d640c50ad892bf5653bd8a831473fd84d842f682bf0b7fe81a42d234471118ff62203b2de73049d332445e33319e8fdd09df87b91f9f393fe3fae6c84a89049a234135c3b78bd50f451cc1defb29f309534c222211faa20926aa98f06580e6a8d6b040c7a694860560f3eb268eb865edba579026c2a73889eda4f33af41b38e5a3cac819d63220e41405ddae4336cfe33036425ef2b2a75cf1827042ff9a1c30c4d036716ed4d9e159d5f4b732c152214e1bbefc4f03c0ad07f2a6a018a45c92df342cbf8eaf626a69ebfe153f43a588c902747ae3324eaaf2248e538645cc9647f8c2e58040e87f509f98661dc7d73ec024edf53a67d0ab874bfcdb123c4d54657609c3961a643213d9139f71ecc033af7fd4909e1800ace44bc1d2ed87e0fea3dffaaec9d38e89174f7c267763e36d012c1727dbbd583974940bdb706c3a6d5b278d7a5df046dc24b52bf5010ebd1262902de083627dcb87e3afdaf5cdacf45ccc30db7b8af654d453bd1a4157dff33e3347a4b36dbf98e471654313a68908718935147ff9065c3880689afb3f96755dec91e4ef2df644deb281f180f63a0b5044411f2db544e1f84f94a39da428f431e9df489673319b2b7514add54ab47fad59399d3e17327b9a1cde4cae9729459b46ceb87878158ec805be2eace114dec9b98eae23d84ebb73d62c5f274e4835d917c575401f3ce7c3bb11892ebbd93f0237a215876e950ecdfe76c47e0b54d64c0546a3d540a2b4526bd7dfb160900f937381cce290a93346cfd03d4fb8637a569cc67942a61153faa64dc3960f66bc2812058553654a20d156726286eedead0201ca7839ed3bd3e49ea0560268ea0600b683d4df2534bcf93f1c13a9e66c26bf5d2abec32fd4b679dba613e96bc1fd864a61a2dcabdf88df464da94f9d57b3abce54aeb0e8577009a2a39a46972ac53a06e8fdb5e83de78de464d0f13d2d231fb585073d4fe904375487d4556b220d888e8c93a7a7527b22488c111bba41de07cc55166375e0e8e6da65db8615eb3c605d0c22447ef2412f85c7c850e6d995607c27ce829b569351bbe271f12948252e8eb130f1dcd350686f173a1220d99b2bdba809c12ac565095a31f86b12264a581bc27f98f9db2932101f1a0b4ea3855fda330ee24e723d74abc8be93c2bb18fb3f0bedc8318d23135d12e8acdf3e88b738dd6fb5c8aba07dea82cb99ba5779c55c62d1204510da8989a0c484dfa22c878f3bfc28f76f92231c1e871dd01e643188115a30c290d048bbb081ecca9d50684835a288cf261d856471ea33ea0daae1e4852a3a3256ea2c84a9657c90f1696bd8a9a6eed1f70e2d50c9754c76000cc8dc1e5579927b4759a6f889b9f5e24e3b247e7f149856cad0163071f275567d530d3866f8320932b1a4681843a4ded1ad56ce15617a33694ceb7820d515a960856e2c9c8256aa1c5a6a2570c62a2dac5062d527e2e974700f0c33126c744d6c7c0bea46fd12888d293882b2d28306653ecf6204ba4e036a9e8d164b89cc84bac226a64823aa55b085a7f652a040101dd5c36ed0eda0375e9802ec2b7ab30ae7fded8f69160318d0a40dd1c8bac3ed9483f6ee075fec9e578a54771855369a1fb08ab40c9b9d3da9d30bab1e7b2d34cdebf74b748adc4a7a2c96ff56b21eca4c19daa218e2a0ea593f3398f15b3f14f63eb4da1e754ed4fa0ca6f282c2f7e6c7470f4547ede6e5b24fab15e3646592bf63ad37670268da208f21bd4e415169d87bd149d881d8dc8055b2a2fba2277fe89ef1b366b489b4f8e7d6ef77ec827b34a2c793c511a606a6b1bb8dd2b3a5d74bd29ad5de3b9896f88079b66d2b5c8e0b3aace4b2986461b4b16327c2ed24370ae063698b2eadd9f24896ed47dd6e08dd117e6d035a4fe11c19d664bb053140a049e72bce9dc9fccce8aca0cbd7ca7b1db58deb491f5c0a4e8c935cbb2006982d6637da44f25bdc734122e2a0801ff4c55fbf66a4dca7c875c0156356fc8f33c885a27627a6ffcbed7ef7459421caff9a82f4be568706c0050f540e34cad7c64dec9fd95f7ab802e3634370619e2af4d96bbdec48fbaa16174010b489f5ae6462a188f88cd12afdd06587bd1eb19ce7b2b607060414ed89c1b14990e37e71f3ad5b2206d0cba1c05d6acc365dba500f1cf5655b5163e1390e026d3b111a8e72f177648c24e7e3d2f306a957579dbddcca2763c4598ded663dd36b9e4620535d68a428a4b15dd047b7f7d3545b0997ae6558b61b579af19a985f14abf380d8bcf6f298a14e5f9c925776a786ca04527f03d1eafb9d7bea3954bb7d89680b0aebd269bcd7cfed6cceefd7bb4732ffcf7c437d2997bcef1c933aca3d6e86d2ed6d1896876d7ee860cc1cfb02f8135ba840f7caf4f51a6362b3a432324b8cff26ad566370cce7ee034da2d772e350f24a6202d6010bd7811bf191c398c27aef0f6b8ed6336afc2e597996be15589693da38bc46ae2ecacddeac3d9a55ff57448dcc040cd9be325de70251ebb1aa8313ec8d3855647a0680accb3d591dee71deb780206f20faf9f41d85559dba07624400cf35ef3546ff93a9463e20df224f2f2978c0426db7db7d41b4832b7222c38fd2f0812e7b2ee5ee67c5a9a7dadbd018cafe2e4aa9c79acf4093dffa4e8e90bf0bb52b7138289a159495768cff0f0d0d8506fa30f1fa3975aa0ea1a6e2cdd54d8acfe28907d825a7023fc8c87ff0069ff575759089ce8ce833761699c47fa5da725cb63391ca89e4665d1c3735eaf3e0c5d1440c0aa38475c8be3b8891584f6bd6845b7d84ad8e01ddc8c4c7c23e346fd295c57b41be486f281051c1413943f700c89eff5086de4afc8c71e998a57af7418bae69010bec8ee8695d066afbba38d2cc731c8dd5b72876243ce661e6b74a565d1f669e773283cd43b61d56bca1729426c0ef45e474683ddb595cfa9fad3a30f28abe4d2e12d77b288a2a383e34d3ed7b0efa707309bc7faeb53d50ef91402d8eb966361536cc42525b090f8918224eaa7ee3ebb44f5feb4028ece442cb5322275cf676c1a5a0a683558d44d3e8f801fdb36f58bb7db096e2b859a12c91951ef85e5347cc996d1727a08e482bf628dfcd943c970216162543fc6bcb357efe57a044c66bf19d8a62be4b7ac2729297ad60d5c721e0b678eb66aeaf89a810d35b337760b924d3a45369df1bae134d5186966e0b2717f25148b89e9c127be09363c96a5bb2d55a9a8ffce57c854556d104663f65dd844b1c625b44318eb513a9c0464c59f81aa5927accb6b72a655740c438bd3b7f5ac1f77cdb7f647be26a60eec6e7f0f73c2641b70750c18ad5d12a8164e437e132770f50f03f9f97f643a9aca05b9bab0f063071386bf6611e63df91d79502bdfb2e109c9d38e3a08568a4a6582f08d92fc9529bc05bc5421f1bf21415acd11c0da63d9954583716c26443d028d4403b14bb1e54407ac4dad38dc16d1b3b6f6002907f70b6d56b2f9ac3ee586d1dd373b4edde05afe467aee6d97efb75bc4d8f34fc65f17e2aedb83e8c28104c874841773f91632273474868c5d672a93263d4f451ae44061e9191db560d0f2c8eba3764dafb8b767b9a6b6173013d3712ff038ddeb72b3ef7df5f5f1acabeb2907ae86bdc5b5dddb5fde1944e5ea354ce3d4d5a5ba3d7867327ca04549001575590f8b1613fca7f8cc8c16aad3a592fcbe0eb7044ccde539416e42664482dbe5af1b4b718ab332e46d292c30ae1457fcbc68bd3300a944fe5d12343f7b7602fe1b9c5c582105446c3540f7b4a32b596e51dc387e8c55407192424766348b564b3a41ddd513ac479aa564bba74ce1f2a0d9b04ec3edc09fe334acac521226b3ab613eab4722f37684b112360d1386342be2fc3f2132bad871ff95e3937bd2010e944d9b0b96510a83989940406d62f0d4d179b50e71cf033422adcefb42f7bc19a0ff870b41d80048db7763fe601fc832b7267b23eddfa2a11ffc5820c5b46e7e20f39dffd680dd8d2a0a68c0f7d8183562e2c97efb49f0e8bf67123872572dbfce6e41d35525f627cef5ea6cf34765e967b1a6a200c4aa78e8ee759505c4132d58733807676b3966354c8373e85e7f7d9feb4702e131e7ffbd506367e4953ce75ba7500c528f62328a8685e2021d10ffe7cfa3bbab8adde5826b25706c1b23baea45bc80fbd0d037b83b51cb312fbdf18a39aef61b41c7832a85e2568b1eec5cd528e7395b4753a437564c3a01f17dd0a77a42bb3a0d6e1047e6c01e9b3fd73e29728c7ded8daa814f160eaea328b30b746de8117357d0a770b1acc9117c7bd5db16af70d5a397002e9d683c3b08fa2bea7e59a1ac488ee5c40c63e6b732665c3c8c8523a633b5158d077126aa9cbf439bac9fcddaa3461dea2735fb7d58e138f2df5f14dc6c99f85134968663d5876610415a3ad3703596103ac4138eac50297c7c4d468e57c21c36b44acecd6bdef29eaeb8b197b96a3503bd1b66fae7888bb58dc0ec13bf7f2f152b1165028f45af8775ad873da9ea7f66810b378e7ae7dc2d9299abc8e7dfa9e79268018a1ecd8efc51c1e8b3e3e3f2c2ee5eefc6ec08e41fb2885b27c6293c278d7259d8865a6a2869ec7ba6088ce1faf2addc5153d4cc1fe581575f4a10a5ef6a4944d1849012fd0d1c4e48d72af708fbee0df6b3325e2652d3b715499a85337cf405158f263c9e088f0f66cf9b164d17963f5eb2322b30e235a170a805a48427fbf1a389be60aeee8280665dd1a235d76816b2f9531c0c9a24b12b531ba5c24d941aa36ab64a86adf1eb67e61949c5a9c6d4ddd62237c519337ef723cf529ff443d2890857a3a32bc7cbc72989e38317459f9f9d4cb7bf8c5ae2510bb9170257097b0f6c4743e575d6f329d94edc2364588b621b8d1bbdb20fb4db449b788eaf5f2a8779665ac7af75edf6bf492a4a3980783403f6a78c2627d7347ab3d94d057b35b04b29787cd7bf3046c5ea1feb1bb4b6089092dfdab626861232be83204fd8ac3c82b02d1619c84dd12a0e83e8ff0f0e0ce7a848d3ea28ddecdbcbdbf608288fba47b05cdb697b0ece593e33fbaae43c38705defa3ebbd6ecbf3760707d2e958a0a9ff1c604b913d19851b5407d0048f39d50a15444b902b89096c41ad0a22a545572e45e640262b370dd8b24e0c961aec69d1074fae476bdae111282f8238483af4ee4e5f84d8cecd10915e478d5bc1200c764a8b3f2dcc7eaddf2b003cbfcd96fae6826ec4d5ec8ab035e048cfd7c597fac6d0dd8599596edbd6700886fd1200d840f8e271dad3c9ee2601063442e6bcfed3dd46650c3804aaf9d1f8b7a152de3da9358d147fc82873aaa744a9f553cd881bce697cf6d093dcdb95df9d4aec916106224e94b5075d8fa3104e77e2a72e9507555e9753309a93c92e625055a16a4935d113a286f01c7ecde305e6b25a0ce502f2523e8d84293663a86ac06771f168cbc5e8310c4b8b94091152d75b21b38b13bc1c8c15235b2637d7b5ada44daea1a1a24cbf885c95203ba5559d1bd8c229731332f3371614d93285e2acf705f106a3959755ca8490e957486389768bdb44cdeef33cd6c3f9a10eee2cfb8eeff7c82fa7e94ac27d0e1572dc56449c90884e93fe41196ed774d4cc4cf3ff0e7a0b55ee377165135ad8091c1c7c83d24f2f09990f48a8dcf859369358436abd90e159c4177d38fadf8ffc76af6e2c686be77bad2d50637a52246e2e40901c479dc95514442468b9c02fe525df9b8268b2bc93ab15bd76298098483532a332789bd853f96b2fcf67fb444005be9edc5d1ee991f554907b6081d00cf9b079de2fed2262c30c36c40478c346b2ba675bc9a9dc58454bd1542ef0dafceec221da407622467934b36d053550b7318e08bb2508421693c6ad7f9789353315293e616979b81c1d9c75bb50911585ef3ab1fa8a22ea3d0714de7e379b744a94b8bb40aa8e1555c990446add1a714885725dd4069b82c2ecaacdd9f5be7a0074eb6f7bba5f89cdbe30bbb6cf60f2146caf25b9d37111b4de11ba23737f17c04a120ae994458541e5ad521a7471ca3bc7f0140d04acad9fd3d44020654437c7fd37b63cae877b2e5451b0ff67e18b53d23d4d1e8567b18c1f2665833a63591e32fd36503eaa8d9eb15142e9b788f7eee4378b69f07a739d787fab82c1b64ac3d1ec4662ef223cbcd8f13604f65371a99cb8381b1074a0a2e62f2c2d59f5bed36bf9a8596f833b23f91faa6f50e3f1531671d920a6f0c91d79c580d57f293d39d91c2f02c2e0c72d064d4a7cc1c4dceff1c2d8da61a1d89e8c760bc023d5cea90c0649e345616bb5f08896e2a952b09d0182e7733406a57d8e467ce17680daa2ba8e5a5f63ba09a7f670b8d4561f0e84a5786a13e42ff228dd9879e3bd908ed2a025f12dc3b62320017e0a71f70a437d23dee933ef7c913f4ac0e63a179db4d71cbe08525ad90ac6bc80cd31a656c111df3e431e9862c1255ce2990626ae75e26e57adcbfdf42387cae9800d0739c7c0b084d7b8fc439ee9ce6de4d76c4959d96fde1f232ffd1f18fbc867713c019b8c878320b70396d5bad25c5f9e0a25c4a240b61ae72f589e31c2fb7fc3e8dd8e37cfd68204c47abf2f917d00189637971c3001f934d3f42c4dc32dea831c33b661eaf6c585e3e898387718f308d81b9f29f7b849941803d30fe09f391b6224faea06df5df1f3050b263cad1e69370912193fc801ceddde2da7b6fd0a18b98fd56acf30d2ae46940d97a3633dcf28f910923a6a788b56b9c5de9fe828aee5bd96935fcb3eca2bd9c3996491e87eaaa3f863a45bf88fe47060602bc94179105c14920a8980ef818ead1f86f168d4431b4dd5304fc2d8a6e598910f5261f25c01a2200c25de551498b63077caf477d6e53ef408973174e2288f2edcbc90cd6bfb720a5bc563b3644afab007a8e49198f2c2b94cb722bcf644ca9d53cba544843de3ee1e7cec32ca287eac3df4afcb7a345d6b3d37dd5e034df668c632dbe6fd828769a4006cbd712dc035d591c03f227dfa8f986176150cc40f2f1c3093f124d9ebfb948cdd055b494dbc9ea7353309397e186533a06fa6e7718946f2284b5f05c8602d93602d36c54ea24a32e453826ca9598741b64e6d11817850ad29b76f1e60de4a0bdc4ad919ef71cc20b35096a945b2f02d97d616591f096ce812e00df1700bfc2e0e9c0bb234c206430442629afa2ae0b925ec134af227ae3c258746b04eebebb3d5cc61607e4f602c2cda1faaccc4bdd1d83d0e7e34ae7969ea9620ae18cc38ccc10f99a30c84e87e060b4be7b1e848c01e6c0e150a4f1404f439a21e4c0ee31b1c2d05b1ae180058ef09dd22ae4413f0e72b611ab3095eee77a82576e2d79c440ad40c7f35e746fbeb6060fb568abcba18e79bb164527e679f2cce1f70475c6af569ef6bbca9646c90df1f4b97b89129c324c43331c3dfbdd7d10953c53ebb9741bc2cc1a6a0ce9eef607113157fe005b6523700c120ff8fd9b4c0a883f6d3f69b25f932e257bd8c77e75cab500f40e1a74f2a90e4b17fd6f4e8de1332e2d98228bca2f07ecb616a53cd293620234bcdd94b449fd1a04cdf29027916e4159251f596850a5f1d6bd62796560caa153e093dba128d862d975ef5ab96e4b36a1c7d705e5a9da79cbce2d6695957e8618b7d2ef973eeddb4f230ecb2183d03dd3ba7764e472399c97176c4595acf3af8fc99faa096bd68aa8f4fccc77342123c6432c930dd380db0697acfaaaeed9902ffa35a8dfea30d36d36705c6a96996c7b21c9d4c5ebdfc5d094472519dea2c5887e592b6d4d04aa515579b7f8693c545901122c414c1454722513c871280bcc9fcc089b35579a330600e9002f114c8011d738165544f6131f430df6d28e2d7fad541afc64d24cacf15fc97ae4794e18664a57bcd1562acb05028aa0bee239ff348c4447e28c752ba5ba808f1d3d5653d810c1c4cc1b53a0387eb185a2bf802eb967dba07fd970b85bd0302c867b934065d63477f45cf34567eef1c97bbea2ef9185ade583a6e93708a2795631020b6edb74cede5dcd2d4ac2b4832f18231aa4a7a7c158999313aa169216d4ddfe5d7e0ddb8667ba5a8b8ac4b3bd84a65077f6c00b7e8afab9d7a3ecf5c2fcb1c25fcbbf1716d9884f4202ecb96209c2c544f7acc471b852e392dcb5cff7ebcb4f45ceb3d4b707d203cf102858c15edaeead1aef4267f3deaf691086d99b00638c94b2f172366821463cf82519845d5a4d6665a802abbaa22b5117f5ac168c68de404e57ea42c6a29de6cbfc0176f27a8c2487330bc2d5703efe789050c693fa7efb117e318dde15255d9f2198edbdfb41e774492075c9b7cce72c5bb4878904f3e6a6d9e2d4fbab066065a545a2b3085bc992fc6235850dbfa771c8297d380a413083282bc55dc7bbabb881f08050056743240374e999f45cba508b2db4012818ad1697547c53e8ccb6190a3434ba880bff231bb61b750a1cd788fb7aa1c15ca70be9b85f65a348435fb9ac8f1e451c279788c7a837f99839a3a9b09ae3d68427862f88fe63028836d4a4dbc64a849d43c19d78a7def548311531bf76e395a8b4b0cfed72a13a764858028684c9206beeee11419243314e77275136d508fc4c2f6c505100fd02b6aa0c9a603b3021c03846b98a96a1eb2c4d910d60bb89ba8fabd1039543185fc43731f7f8f08b5774ccb6aa5496a8ba41a30eba9771f2439f8c703757fe9576ceac2af93425501387c9abffded95b04fc3f4285d58eafc1e66c15fc7f6ae8bbeb212e8c4bcb1764cbabe5c113cace28841960b1a8c2a59ab57e8b8d80f25e4366759e45cc09178704aeb825f280fee8c2b4c892c56f73a7621305cd580c2c935a0f8c344e71a144ea2971fafa7bed4baca70de22952cdc18ff5b804dea98d882209fd0c6e77951ffec2196697627628924b86561400023ae6580f70fffb5a2b9d83cce34febd034051778f3e9d639b79a5ea04c43994631c3333399cfbf2b474879652d4c996f93ff486a60af5040dc6adb1f48303df854b1aa7156c2c8f624de1974ceae2d00b6e425396d8818f8658d58bf127398a43b559a57b2521c747f61cc19ee53f2bc6bea6a860a24d5b251fefa4427245f6bb987d6777034e9a3df213848eb50d962900cc7c635a3d5d56ad991fd9544b8cb68e9b41b31826f83bcc21ae12a416467b5b11b8312e866a6e4824c8b853d2c789128823e2938da2612b9e9a254c61f39a8e735da220a53c2a2b0f9f3c0d41959db5f1b298de6830be3ec6acf91adaf5d434ff5e33436ea770814c8a11643b87083b63ee4e442b97fb9c6d663559369db427e0eca20c7173c5789b9b37066518f0831dbd089cb45958320b0d141143c32a5ddd993d702732ff4021b349f885d32ef7b121adf36de05ac79920c29c49d40abde560dcd3864f7d0d09d67f7247266e7e413165141eb0a7842852844e971a47077d93ba1644b3d2eef62b798a6d73d4dea3b3afa98363abca42ba53bb11e571049369abe7948febeea10f58d266810aba7156d4ea134c67691bb6f3e3d410448c199055c3c6f0a72b10a09a23f3a311faea1b5a7a328b98006d8a746b47e3ac999afab3f1faf10e3d3aad723e1f18a0ed1535b1397eecf785e5be3913ba792b04baaddd916fdf5002151f7e3914b122d819f720b8360e1ac8006f669556e4e0aa25ce56f0fc28e1e417a851cc5533f49d1e29b42d5ba8f9238d93e30a6a7eae3a80b1ec60ee345728dbf711007daff3e4ede0959edc24ab102cb7e86144fbbd5ae72750659596596838485c870ac283a0d0b43824aa6ccff16c53afd6d26a87b9c640e617934671920c9d0605ea50a54baf87556b0919875a62325e3749cccc0ec54cfef4351af58a151d484f4e56f889f09b0874ec98488dc15c10866b17904fde6d773982c12ca91879dbbc267b9b23e10411c4f2872bc3dabec9d50bf7c02ce0fdaa57190d847a4225e9d5efa9c38f11df3130460b0b97b8da3dd2ef1ea8424cbd83b67128994e97f4f9b004fe2ec0033a3873ace977fa150f0999f7141289256dad314546ff0d91ec9480b0cab8a76781f60ebdc7d77ba83663521bc7a9704ead50fbfb41313abd87167df4197c92f66bd0646a215a28710d22e6d59a100d70f4f79fa068f681cafe9ded3ec524938b5f33ce7a48b88e56e0e2a21ce09465cfddb82b33a18ac1e231753b9fd76aaf1f1c64f17398ab94ef654838be691bf929610a7ee5fb3e78d7d5192854d67eb43539b4f6acff29a22ed339abb48adf3a4af776e3f9e25c4f1658fe5b5846820379c74577d078aefdc242800b4a29d3f8c92bb9a175efd1308af45896e67afe9bc36080542a5b3a7a7722a3c3ac70746ea6846e208d8ee7b843442a01ee58515c74e12729bdb7ffddacb6411ec79d6478354373fbef5b91bdb5bbd04373e00cecc8d1db3d6546e0a643be9b173088c57bdc7726bd465ff2b0f1b6497dc0034265a328f5c73e44c3ae2a57f53b8f3baf1380582ff9581b97b69768b044893f7ad77daa5b14eaee2d1d0e233d2310238b5715d169a55743f61595e914f3d8b27eac3f5cdd2e394ccbaeb8508dd9e486c468237388ddae92932a60862aa92af6415a0801311ebee88dba8f9b3e84979c0e893ede3da2fcb172538a8be5f0a752078884ea6d09b2892ce58b011725b166eb28c71b0dd395360a6d7eab2726fa97a981e10751308d102326828f4f18a4fcaec497dbd7267f49de296799ba712b700c07c2df471b3ad26eb6bfa2dce63ecff079aa210cc4ebd340f4586588f7eb29fa2930dea71cc30efb90ef96ddf0b4a1f1b4fddc3178b1568109cb3472a299d45d9145dece7a286765bb49aba24f6761dae040fa5eeac524da1a584518446983fbb36adcaf64dc630d113f007fb411ea694531721e9f75cd121a9f69f0d94e0ae13e2daf64f51dfcab025211236d665d5a1e4163ff402e879340564a8527ff040424ff6dea1775d8c10841729dabbe058e86e36529d0d1f6c8fcdbb694263decf7a15cbb1f0a602d38b9d3310711e809aa19656826fa6d77b26728f8220d4d8b9dcb3a9bf821a2372bdfd4d56983966a59040dc47071de4051ab2f45a16e0bec1e2fc7af6e3ee9195ceae39340147af44a3d29a07648a01747caed81ce8835172006eda63e17301658db607cc1368144f2a7d57c6503ddf554fbcb4c66c98b2a4eafdd962dfd3bc766685b1be6f0b15e9dcacb7fe7d558f3c2ffe490cc1ade6914a4d012a4e4affbec84350c6d00316ed7f3ae743ca5c9c87919af5fbdbe27f39ac9c07ef33a3495d2b0c05ac95c7a78163e6ec41e021d47811d8b35b908a3dab8f3428e0351b59f6383274766864b629cc44de536359427ffaf12e1232d9b8a1aa79687243f7ad4b534f751ac4842a9c03fc350ffefb76261380e66ce4272b2467281000b5328d56ef762e9458cbc5f1c383afd95526ae19bf95c805cc61373fa616ecbd38ffaa284daa1fab13dc3d7bbfde03dc39174275f4ba677738461428c4e740f518c534bb4adfc6b301a262e91db417a7286fda4187724377407cbcf5d10e8d6767eedb0552657f9d613a3a0784aa198bd2de536a48b268a8dbc6ac5c6611b5dd461e5bfc534cc7399b384a0199324a67feb8157bb349e04dd9a5bc81e707027bf3ee164e64d00e87b42d97e55b2ceb2c786c6481d850c746aef8852d8937d484c3cf25dfd83a69fb6ee76c2a150ab3d2a0a5dd4ede5e4a4b3243da855b081b1a6656d09af9cdce07d9f709a8626a1021787dfb274d0212403ece2680c88633661c6f18dcfa8aee4184a77fd9db4f99402ae6ed764f09ceab4a43a2f681199f022e28c56af26e2ecbf05e33765bc9758d84597e635760483918c5e4d73ef22e84accc7e5238441004c4172f6f8ee982b409f56f8649ff8dc1c2effe1f88733a88c14f334d9f3f9a7a2812b7b1bbaae2edaba0ea16cd63334d800c90f826beb6a2a9e0157352cf74736871c18c63282c23275a704eafa2d29b390d92247c5b6fddf7a9b45d8b37a0900c31a2066b291df5bae09c9d27affc69be8d23a7203fb2d90f3565fef17856fea07896f604c02027f68fb304046fc534b9e6f1460114f15fcddfd296db91565c215b05310003c6930076ec4f9bd5835934b90592b3850d82047082de61202d7f6b74d1e31425ff2da03c8bd25051287eb88a23b63ad6e45c6a740f660361941b343a3e37531b18ef3605bcf96fe93ed5764cfa94fcbe904c2e89d96358f76da1c3dab1a2aef262027bcd3432b44401d13ee06a995e8c8614871104f312f8f50779bfc079f92815c85146ce2e2d07ef1ce5c1d187b84d923451b55259c8111906976385995503dc8ebb7bdee99d3a5ec5a6700fd9b3eeef4e3c920d61570d7bbc7ef6d5234ec21d592c6f08f4a103164e7438cbc3b3ec86d5cde0c091a9634b8dbde6fbe4429946f3b623782de2159e901cadd1889ee5d8a8273486e7696bb7e37e1a37a4a27b8ca5be890fe2226945911de26383b259121166cbcf5792f694b8024d986cd312f3301441e5407a93408fed910be723cea82fc5730c2bff8beada0b52c45f164f2ec8ab1623ca1dad70b01e24891871583c799b97e41897c0ab02cc21b4da03a4c506e77b478ba59bbd845197696e56ffe632cd23f73d1ea793ae822c949a2ac1d92cfd7aa73aafafff28091b301172aeeff4b7e57f41331ff728fa7278446a55dbd24f5d239b3a29fec10965bffc742131fd44911a7171149a7fe3ccf506fe5b08115719c50dea09c8a44f2eb4011cd135236a56b3ad2d5178e38bd70507fa841357d4f3d766631f55e0a73f5f02948692470c123e1e619f78fe6c40e0f867b8ef23e0ad03db336c72adf7bfb55d9ec8fc186ad6898a937ed575ced2f65a2b1561cba9eceb0888f0b43a18b379887cf162945ce72129c396628c410da05ca899f6c97e505c78719751e9f803933b4c66a1f1a20002b144a095563150f9a49a7e6c3489985e4cccb859dbe0098c58d4dff1fe0829d8b0aec5aecb5e3d6724deddf718d51525888bb213fb011d6c57266c3fb7fdac4e2dab6a6308c67a62b27f54e8fde257a31a0c4e5c8ec739a84f720bd6108bf2df70a5e76b8bd1ff968639ac5e44169e468565ca9f29445457c46ae36a04713f96712d9d94540b7d82cf28628748391302ce2698fc39c61d384b7874cd86df8ead336531b3fcded853649bde6af1c05f2056e92622fec6da73c0ade46d7460392a5ef4411234328f9f585edd5deb4999f7fb6ab42827808b9c0c4e8bbb69770c4fc1f9d658d56278f59a934bad81fe27dd8561a356ac627800b44a5d0f68d77a9f30baf52f448ff8fa0ed08a5848f44f45647a1f5469c1ce4cd585a2028c88a4b50bbbe3acd1abe68aee35edae6a220476bb95023a098783996c0df66be20f0241c8b8eda0c7498bc7d803ffa270bc872915a8bf468c1f9efdb00cd7d4cb6a2709d77e61123ee043cac26d01e451a62acfbad20265788ab651f31c460b44a8363fcfb59f2384854698c3350617d5b27b22d7a738f1ba6b485faf400528ba501f2b62ea5a2bc504b7508f9deb8452dfa1863bf14b39e6e825ce801c687c4eb667b1e6458e980410874172e555aad4b82b9bfed386d48b2df6a41565e1bc3ff2e0ee15c24fe5967ac8aaabafa02fc3c4bb48826e8f4f944b9293bec226e14b2d9a3d603cb3f6c005b9de194b83efc5c1f21e7a6914beee05831add323cb9ec6db73423ebf94db8cee2358d294ccc95aeef7e5d321c9d364e1be0a1b753fabd5228cb0816585e40b5b6cf6780643888ca4043a10bcf08e89c5ca46e72d01adb7ad0ea35009289d0d2287a79efeabae4e58b6583ca73861a63ac3226561dcc6c09c2eb1fc72f554f8e70aaacab8c22d41f77975aef93b73aab0962f61e77df9614d4237bcbbdb80f89521ee4633a3bbfde14ea4797b0b8ad2ec469451e31fa80499f8bd25e50776d0f42dc1819653ce279933469849b1bc4a0a7321910f0e294dcc91514b961c54f0510718885b5c47ef4ec2027d2f9c551cc808597d1a52dbdbc2af240310f504340dc63b5c09dab93e40e1ed13ce2b1ab5f3d63b10390b197a7e3a1b1225d54deda660a071eb1c79900a94d168596a419d61bcf84e82407308102f7f2deadf318c480afa4d2c4afb4cf98e2aeaa05488a0b9e4730599b05202909f545cab6919aeb9e4f077fe6f3f770e54b6d78b0b4ad86d05258c56e6527837ca88eba7585a43b614e58d901af3c89d2af2ab98be551c184001395945442a4e4e10b24f6d999cbaeb62f93bc14afbd3d036f7b0b3941cb5df78955126bca42a5883285a4b59a0c634e60928c1939ff4a64d15eedbd7235ef97b4bfc5bd9ba6ea008eefa21fb66fe6b6fc332b14e27033353e2804c99bc1bcd6d0a955065582e99c53fdb457ce7456e7922129dfbb153b8902fecd2407bc4579d2cbb8c8a3e4a969c61b47307c64dab4ac41c34ec116a97ddb4fd722c2ba524b1fc030fe255e5fa473d60f8408897680ba707d395b908de28aa9166866161b046d7b4a315c718d9a0a5e2125e46b3478a8b910388c5c95696fbcde6c8ded08036adb809a389cba8dbf25d29b680ac24142cad72b52c48d92a4667378245c68dc43b632ef6d3dccb94722013a8aab083d2cc1cd9741f251e3b72cecbbd4c3b16d10222c0a33f07056046457ba761599b0356784504d7f84d680ea992cf11aeb9737c6a651ab83378e41ce59d3b9bacb0aebd45385a56db7c40116d459a4300069351b6b6070002d15339d87d480fbead007a668d8b843d98c08431366a9cdc6279d5b7734340227642073611ad938726a772b8f767bf86d57eebfafbd7a3938300ebb49b6f5b26025648f76477f3349624e81e7b557b18e2e2c2b405d145baf23309da882f15eaba546318153c4f1ed12c16b4ffebcebbcfa1e95b695f428caab6a5daeff1d7e202918346407cab5556df1fba1361e005cddaf43f185851e88d880bdd0cb5cb317e5ce82610049ba55417918f72039e8f09b296962a8081f07b0f636f716e9c78129489c7b3933268feb56b44df6e207b949c5034b1199f79b2c23972f0f2678866175cdcddf6a238dde64ef72d873464e4ad84296eb3e60d90899bec3781fc62232235f20394d3af22483082573876724cc2fd39d4130dad3f4b0441b811a1fbfdf18e3d4923345777bb7dde5f039332465e2915a9ce18870869b1302a05bdb438cbecbab0922bdacee59436f60d3cf0f81095019c6510847a5b726d4f50a40b9317d4fda909fa76430177c7c78b6e535fb516c2007aab1357452e02d16a97c0707e81933cc47595f4d41bdef88ec0d8f91d515ad448a9fae4d5b6e5405c36a5c2bdf692e32da9a51896fd1d4d25f426552ad58fb16903ef95dbc1ee4c1b6e6cc1448b0a9f8d8add26baabb27b951142073a93e38227ee0156ddbf90516dd17c73c89d110a2411ee3d49f8a12dbb67dd8ca56e65a237cc15926d4847fede21e9da75359773912f6b8d9459e03bee9501c3d8d0bcbf0ce11ebdd66d6c824d94b71c0d27f05988b51a6673b3e6701d2ea1e53fafc19729d0c98b7949f9fb830a706c062f18a91d0de84e8813c2eddb024316d1af29c831b52d7fe7a717c2913b3d7bf88856eb01b6c40be78d9a1a94f0d9eef22d0f7f94a6241da829bd8949537f7989052c671766f4eca0ee75ac00d0d85b90ee5e8510f5d5c5c2347f0d8a6e2bc8578ecf9db88f3546e7c8217aa282c2b7035544e96791361619e4b4b8dcb2eacadaa5dc09c282a0bafca90a6add2500d32c928b0465486d4969f24847cbe07fa8e5cf1fb5ff68fb7e909c08b2160bbd1475d7e8d26c07b1228fcae47b5de3cb46a6166ade891880bdf1088740e2915de5908d85acdcef3879fb258003b6b72e43f86e74cb7fa368922127375c03f1fc58ddcfae5f3cde2965737873eeb71e650c1216608653b989c29376c61abd990edf378f2f0c3be890811c41e16998bb69338f7f078d3155473f883fb873cd95cba1b8c15a1d0dbf7f3676930c6c3089312e6f81440912729462a29cef2ec7c8af8bae1093c4e4aa48353287cc7de59ed8da1937344f1cfe95b263cf621cb70d61c65427b5b0ab5477cac5df8174d1b85aba83ae1b4dfb584241783769ad409237f8348fe78881e954d26b0cf48943ffee9aaf74852f489e8f15ee19811bbdaafc42755d13195efd424a84599eee7ee14d73e8df2bb61be18b463073743231b4fa67bc05e18fca7f477ef6aedc7ca8920dbc5e01b9ba8589511e3331c98166a5be1d457dfdbabac68b7d02bf1a4d06b353bb2797663d28b8b88f6fc45b5b2b35f1cbfb0d7fc941ddf66849b38b511c57e7689f054b3c1c1965e8fc2cf169062e865777d01a1497a864c07825c0457254c2a946f9512fe8e7e0c63c5c2f5f94aa7bc46ab690004acd8a9bd0979b54a63a4605a4326e257cb399bfddb5799006c867d1147b8eb6f2d7c22474e7ec90006762a4b3816e0709e193b545efd20fe3eabb1056f0afde4a2efebb0437252420b2ff3d2fec3a5c1702eb51d1cb10d7c767fd06ee4aa38d9719b80584be58f38d77d2ccfbc55401ec9378693835ee2933d2ec0dc6fe7d1139f078a56c6c8a0455bf92f0efc5533dd070145031206606e55260422f7fea723a7bda66ac61464ed4ac0bb006906637573d824c264a0909bcdd8668c769f6dee6ed5852161b4c6db0572f7636339115e0571172db9cb5f6a9ec6d8119cd324ac711ad65b7bf7b28caf2256753bb6efcb27946d1791ca29aa9ac15529c56db083d14133930a2c451a14aa336339070d4a7b4a371df068575cf57662deb924dcc0ecbf15139c9815a758166c58c8885e8e920530304af6444ea43cc8a856965eddc32d74e485159d2da810e565b252f1c59848daac8035df36d3122cb4d4c6e776adeda187bb72aa692c4c5bc09306ef5dea853251b9b2ee12d1906d424b7e90a89ee82d3f59bb60b3d67c373e1b67aaa4f1b052cc31807896a7505ad53311c50a640397840c5c90449184db335f5bb10c207f9ac9b69ef301333ccff45029eee4dd8ce50519da41a167c709c3063930617a33d26aa386631a0476409347819f446188a0226578344c6a22a6ad90bd7a5fb4e2b99d99f2e3f062563ef3020974ed4608ac863a0a2db019b7baae9dd653e68cb62d930f31eba7b33298212e1dc9f3eff9345a6da4bb5392b384d1963649dd851c8ae06340624cdf97262542aec6258e688d32fb4d5b99ba096dcc82afbccd9557cd474ed995e088620112d44a735d132d53d4f5129cce6a9f7108e4b7143affd6dc234c090a30c1eeb9d30ccf3d242c6c99a170f6c075e59174b20eb5d7876c25cdfd6745da84cb82f45761b72a2eda660deab69d69e5fc44940d37baffb623c5d4682eb86bddf3c5d07d1a416f6996172c96532e2bdd61ec05c32521cc557225fbbcd372b2bd970fdb0d986eb8834d91e616bfb766a09bc9778cf06c9f001298525fe3df06705e039b58a7853120cbcc432bf28b68c161128066fead5f2c34851ec60c54aa95da9bd0c4a2d7462e5b89f558f8e8df3bdf58830875df8b3291ab732b1961840bfb4e00adfd7b04a60ed62e3e9f44a85a6ba8e2d9f41f3340ddb99697f3611cd27345b1750483dcce135ab3e6af78820e12168f63b6ef49b33cafc404118e790e25f410ebfff9db01981611d50de41172f52675a3f3db746e66e5aacbac5bc54d52d657331a279e61e093eaa1f64d2cf80be503bfd99ed16cd90b1e6e685482271bf3590cb834a4bbba38930738ed485d84c3effbaf3e97759704240f8da97cf82b1013690eb8d94f2844f19712d57edef11c2e91de47965aac5c0c7fe9fa30c55ae6dce46382fb179a6186ca093af529869807d27bf2695af025d3e2cc00807bbf701bfd6b5755abd387bc2639aec43fddeb86d864d2d2c6cffb6dad422d550456fe06554d5e89719bf64d3bbdcea088e69ceada5f3b431b808a71b8593795457f9aa59a4e9317ececcd55b9ded25a044bb9b26da40582b34bef5c2879abd13b9a5d2ebcd3d1f9c5847aa56490c524f498c7bae01b5ffd439c204ea7225071aa1e9d4e3f41278b6308a818360438793b87435587828f2717568463303cd0e793143199be0c964366d320c8b7fddcb1531a78a2b21660c02fd51efaec764ec713e77af5c044e48db6527124b4d6b0c57d36d526af3f0293e8ef376c9d5a7b9ec714d238a27c32c1640d27f70a1bea79d22b4db7cd7b5a8e473bbd3546a88541f525ced5d30e6e4d268172512b789f0d142c2f676a9b92836730fa6a5de973f1d8c607a848bc3e5c68b3a6378b10345a6c86c5590e4c6f98dba03db2e2b0647b3da49ecd9609ec94828721f59b1fbde37db37b43b8873f1b2e234e639077d73c022c9ac428d4e3533c565354f9bae52725ac4567bb727d2a270aba00b84daa76ac1bdfeb0cdcf56e996e822e9d51a7842209a26a23915cc5ac80f5e2027f29c1905d797e7a5bf51bf738ee956f6cbdb9306f4b6a35e519cfab6fdefdf031fb5e7e87b646c2ab5e2ab05715181d6d94a2ee65ee6685465f1591d4fcbee34f99200bc5ccea737308bfc6a768cc0ad5a2b22fcc846eb04f67771d7616e36d47b4610e0b03b4eeccd5de44ccf2ff99aaaa77c17c82b08e87d1684094fdfd056a3c1e9bf22e2b691af8e919c3a398f21ed743c253d04b054f519db9e1f210e3067ab658f0c5b1c0580e568fc61dffb754f90be0bb916898a84908f8fc751dd25ade2218c978e6aa87d8001503a3d1def3ff34c21062714e1d7c2b0f5dfd5188964013d4ce0e3b32d2e483e6c0a33ef79c38d8498d759acb796443771d14b720e35b2414678cd4818874d357045e3ccc3bb6d48f97c20b4ec08a9cc00ed90b643fd16569b12d343bed02ff7dc7362bac0608276f00545e7b2c1af446e108a453fa88489db19349f080b172cac0871fe187aad1f584f20dff3aaa39abba643ab946f9e2700cba70db2ffcc75b20cc7f9bfee8aa861543a1a8d837c3bcc94dc0cac85751b98df5cc80009e9cc6f00b51e3bb42ebd0d489a3e4b950c524d8c9e42e1db344af08a2d5730cec4f18033810714d289be8d3f7a4b22133f886aab8bdef7e5719cdf62b36cbc8c6482b37e4400bc636886849c134732a0e8573a828e8482d736ba68c7466b55a260ff7bbb0503fb054777bf2fc831b001f739c21a2a2e587716d44a3baec9f1b68aba21c9d661d17cf006896e50d9ad4824a0060769fb9634ef7752b02af09e7782ec220e62c9cddb5788247df016c1759552f802d213db63a858795817f35495974f2173e70f6383b59f1b69045245eacd9e31597b83e2d7ee1b34e199d34c32ef6df20f24e42ee58503869ea5267e63b2e0d2858381b614795e21b7b28b8e8fa2c8da2e7650739da04f3e436355dfcc0cef48501317fb81de671d1751ee82a48219372b101ab71c5bd59eb81f1b5b7907fca94c2b51e51bef70b4c2e3fe19630ebae2e11e381c3718939333d78b2712b32718c20d6ad198637fecea8312b151639fce56e762dc42c42df237146714f0d36ff4c5c30dd954da0908792c40f6bf3e07dd3e1f8a69534852f572273865752c076ad5b12a600e067277c76d20ae28a45e16d382b971bc9cb691a34eb8a949e41ad5bb8f493230062898f2e3e15e67011dfaa7aa47cfb8986ce31185621efe5f5d6431fcd5e6b713ea836364fb2b208928de64732b82d4854e9c786fd62b3a6cdacbf58cb259e7e003f7d4d86eacbc3f667b9a63eaf2ef27fd209aca8dabc70460aeb115310829e789ea07af860b2a842f50e29d8b2deda944f1ee77fca344221059fcffca04a46cee4b97ffebb66fa6e5875584d4fc1863ce32abfb92f28cfccb772940d5fd970eae71535b722d84ca1d5156b92d6417d69db2f7e0873176d7363766dffb7c284fd620328f437f2d32f4d0d0aa55ed09501f57fb5a33f3d1c72646ec29295388b33e22691ff1e040a82b5dd04e4fc32141dec53f77999d80060f94314ca86b053b428a9c570bb3e41acf683d5e8f5745e2a19d08c09af718205390ffa319508cf8141007388c81e5776665040aa996cf42ec0b1cdc529099903a6d040e24fd184d4d2b3dfcf09d6c453a7156621278b31904d3163bb4addea49fcacf69c191a76e21e06b5c8e68efe1c27ebe8137b0b828f2f3fe2f7d38bf1e437597f1853f5c8a9c541e94dbc60971fed83ea89bb3dc2d9b073577d269373f2721f0f840126c59d993dd05188351dcfccef5fb9bbe42091af0b68847d753857db35aba02421c7370b497a35dad27631ef4135e3375c3012cf09a292d9cbb51a4f8fbc3efc29ab6964f256659dcce07ca88e61d3d469f5005d1b555046549579da482d51fac80b1b083dd1728b18e0d748ec94588d25671746e3bcc4b332dace88ff7ba3a9144f6476f5ed4a59b20778135028dc491b7efd8041fe9f0725057c129930d54e9aee3ea49b55d75a4fcbea48b856eedc580d44f0686141548d2228ae54dcc667a74d73acc72e08577182ee08441749f12aedac216bc305ea2d7ab5cef3e0ce5cd2a2ec71d5fc974933419aee7381a1e19e7e43e468575a7c3c31f97e467e23da4167a4a738fbe5a374a1f33ecb6dc6fa97a93832cea7e278832f1b0eef3dc097676ad40df410266be2bd216de9290fa39c15d96c11e2d2f674784606c34595f59e247ad1870ff2c06971b31dcd2adc479427408e082ba38c4285db81a68cdae1f9cc2c6ca5375ca1b6cc8917ad83d3cc70a492e77180a5202fcfc893187854e4fa44511219c68f96cb5e05c35464c8670671c8ad27911c4f3555e95ecc4472f43f00364f9042f5dc28a21044e7dde396448d5a0e7fefa0fae77688c9ca69fba0f6e9710cc5b98a2699ccbaa32ee07e109920b46b9b74e7a360922cc6530678ac2aef66e9623f85c6e0a6087b83b5f65b6b0b055445bfceed18641dfd818e8308d680f363ffab76321362f1cdec58a7f78ec30ad9d972f87ac0999fdbf77dd3957e60cae911c8782ff3ee96127668ade21ed3f38ac5c4a018b9402f686db445023e9f4076c65b034c77a2823067347209cf7e233ced176d055b415eea5bf9ef325ac0423fa1abaeda560def9f9ad63198cd59862621f3c2e9d1f74d386fee152aa42089653de5385cd45d146080a9536b6da3fc3c8e0f15aa5f8fd4407ad2cb4977363c78b1df41784890dd3b4eab003db1e6e8aa5308da35db4426be4f5e2b146961e94a7f5409a831161f253de168bd016c86821582252d948556495525625255db87d492d8f34ba15d4e16c36e8d96fe9aa67856f969b351c026333a3da12b5a2a578dc4bd9904eec2170aa009cf5cbf7102b22878a4f008c75f0760ae9a0009ef797886c6691be992e9ea55900a60f3312cb62044cc4c270f1aeebf64dc20942ad5503a0d0684af8bc9f6b6722dbd0dc60678e6d958af39f1078279d2c7daa058899c44e070e14e56376909b7f963b5ea0ecfe19df5f1ddfcdc676b8ab9ce3aace8b73b53b0448fd4e1013e54d8ecbabbe924185d544bd97f9025e724824423733c3feddb6de30aa7eff23f174fa7b56bcf9863c28a894572de8a6c65b9f7d0476e1a7b379fa8b62a0cd625c9c2f87a9a98d05a88e3fb76448fc542dd7416480847a4c07dd3e2a98364d37bb6323c323389a85c5d999c5f15067b30212c712d2da35dc781c6c2ecbe3f1552fe0a273860291489f78b2116c9da36a5de87ee970d994daf479c0a494106e76e4fb5dd515664ae9da8dc077a81556d73fba16ab34c8cbe82384b5097935a5712382222257b70ef27ec62550352acd7d6c83916428b566f5a0909358a25cca998aac2cc8fff51abe3ad50a892118af4ca0a424e8954011bf3679be8c400a215bde2bd5696a0529a7746608355ed02bcc6ae1109dc95fc2abe2ebce4754d8c4212c63e846460711d781213174096fdf54c2be251bf683cad23634ee25020619889be05cff416c198cd4f3fe34ae621f849f7fc44b0c39a28b2496a8459952f60231494559d4893c5a4b8e6fb9f01585eecfa7080f305b5aff9d0459fd97554309d48b8b08149afe852746aa7b6e62ccba9e208f904de601ca637bf99975b80294280e8935bec8c36591eeea957662b77ab088e92bc8fbe8686d47c38b0f48fe0ea047e174242f08f17c32d1ae41c7ae24f25e8aa84346831ce2a251af706a8f019d62bcfaef202e0a56796f7699dec7be610f589d70cb878ca98fbdb2b356986bc47b401a2511e2d025bf2485083d546a7b715f46b828380ad3b140f0efd9fbb86eed7c79f284dfd906a8f37ea05f6b033a3ab1900fa913670d2dacc159fd8f95c8bcb11959fcae8d245e7c3412209ae4072974b300f6311b015fd9acafab648ec774287272d6adb161c402642ef75e4badffcd23b81613e05c8722672093efb320deb3762512b8581bf6c0ec95459f6288c1e230a0d44cb364cb21f2d241e90d97ab9286023d10c996e877879d7a815134bb9e423bf8741d079082908a5d657da6d4cf22d848dc4983d32cacae7de1ccdaa26bd61710251ad1660b373fe384c33b0f9d408b62884e42d27ff8c52660875745f1f1a8ab7bbe0fbf7a3c3c7bee96e0a074f5cbfa25294ae734fc20f73ea37136e3412907b68b65286778477e70756de2094dbf91513175a082a5cd1d556b519d5d2775d75e6687ab4165fe36c3b62d14de7ad9a356b072057e2dcf2726c885dc3a9f5b6010462cf96661f16f1fc2ab4130f65e453c6888affac8ee940eb58a44389d8776c4eb3049729972cafb0cb0c8947107cb0b58d43b20534f453ff65a9eb9af97efcb62ea0b71e30328390ddd74a281d380d58a0880c3c3d1b5eefd5fc5e3bd5e41b56d24e10f89800488df6e81c3a4f5caafc0a6ec6ab1f715e192765249e4b631b54c8635bc177f8b8f71aeb55ca42b5b46de10c3bf40b2bf833fe1cbd36ae5c04fd5db870bae204a76b768754a1d700679edf3dbb06e276795d7d06cbf958ae000b30b0e163f64d0791408c996b5bd7b7f0a3d2c069209a87a70c2adfcf79e9e74f10b95de95275cfee1d3cf5df08f0bf55c0a0e22609682a1b5746ce132fa4a221317d97f9637d598f7f540d77776dcb08b34eb1678f6c3b706faadfaa1c3db6958ba18fb198a7f4aa90b679670dc30a7697844c24b08116b5550361efdb3cc540ab29517ea04f9f43fd382beab39c3306019f329b15d31c313f0fabfc6968bbdec0cedf5f3160b5feb32c86b412a99ce82b30614249b5734b933d1dc943648fad02b1e37df94d8810ac2db3768f497dd93021cf441e75d9a60878120d901888a894b5aa0923143a2751c389cd948f9fe6e12723eddeeae34200d86094bf0a6d88077b083f38d446452273f740799ef44cb460eca98f809f685998ed0bffe19e0363372eae3f2510d7e31a48960e12693d1164c86a4842c183f169e66bec5ea9a576cce794897ecc012026fda19ff32aae7cfe73c831b0a05cab28268d681631652e4fd70018f625fa4eb963fcc32ad107ebc734daa1b3b1ac1bf24bfcefde1e9826a133b293f0d1da97af28a841f9dcd2db8a0ec0c7c31aa74b0204d2a81a4a8814c49631af77ab948cf3fe1a6180c432332acd75d888d917819a34781dc64f479562c5d0e0124664b46d66f35d1d7119cf969f1e6d84aa66502602fc3b44276cbdfcfeb97d3a8dc7b7093eba8b9f776a33a230040dbb6beec68d73ecba36fcfd77640f23d93a6d54944fe1d626bba469f19943b4bf765bea33ab6beb189fca1e80e2d6e805705be8e3ca3506f726102322cb0095f5b19fe66683d3c4df6217e220f0ab59f324aead7497e65c745cdafbf99e188757b00c3ff0eaa8f4e52008fa71181fec7682630300c1aa357208c0e85dab1b77c60ee151281daefa2a97ec7c5c2ff91da2e28ed42b5b676cbab6c26c51418a516608212cf90543cc65ed0cfa99e57b49b531b6ddb92aca73c2804b826a9cd4e7be9de6cca7e022c8212040289431280dd9c335b878b768d202712ea3ab1ad13026ca78bb8d27f291581a4d221250b0c33d6895cdc012d5c884d1aabbcea30e3d7edf668127c5d6ca1e5ed5180f2a3931cdac6bf17de24882615c775af5d4b95daf617668801ef7fd5969d5b8754f4093e308399e74be6866a8b5fc288277cc9677e5d28cdc61ab5db5e291b8b828832ebd4a55778e46086f4f97ca84a2aebd38869375bb198a6e105b0ca69acf3e50c2553106fbb0b70e123aedd72e4513687f5398f81746c58a650836dcd11f9b94958a30dc05a63d23eb0ae83ba55c26c2035febfe2c6edf9bd00fc8da7a4814648830d982e59b717d3c191c3401c0032cf7e6d2db9b1676b4c0be7f0a986100cee822c46f6b97f4f72379b7711789d1765e72a2d12e4280d75ddfdc10889cdef9534fdef756b73c8c9ccacc8b13ee200bbc8beb8827e9f17979b5d4cad9f2ee91a6ac66c70c34e3926d792d95343a7363a589104ded384dd3d58b1fc5fc12c1679729fb333f281167d1a808edb96d15f37a53dca2ab83669ef56cf03a3caefaa1560c7bde00558863e0d663ff0a36e196f31b6b33c52d7bb644f47b03341cc2eb99a5a24a9fab46193ae691bee4644b3c9d1bfbc266a15f18ef87fa31cdf0803a3d36e76d16d99597dc384d42dd7671caf8dfda17e0a6d8f565a390bfef251816e154284efb25eef19a04b5ad121f0aea598142b8453e1ad1c2856ba5045dababf860491c9db9b179ee22f8c4d690430ca37c205b0b26ae6e9c766e4db7bade3f09961f8629e86ea1d208f46473aaa75706ffb45da09e228aac6b17eee5400164012bbf0668a31aac754c9d0d03db01425a8a5ae58a09a088ec4b36898ebe5cf97ef226d721b19795da4f94dd128348866d14e9922f66dfdfa367f93353a12bd3ad33b27097bc3d34b08281ccf5c32d9dcc196eb5cbc6d4e694fb0e4b143129baf861ba211b8bc1fb22176865694c42cadeaed8c36aaefaf24a2d2244c614e7119ad76c559a71313b7582f5d41bda6e343f9acf9080c9d509502c9ab1773c5409146c153ef3713d311bd4c08f5cf1d764866a2697b178c6689df94e643c4a4a15933d17ba6393a653e557323ed63d8f8352171e481f57f836a92d9333c23cf8d8863ff8620fe2c7d1c066c810f6bf2e422a267f0e1efd419da47ea74273a250ce8dbe5c8d0992fb4c3241e9afd7c11b397111b3340365ae87653a5f79727880d949c7af31da7e1c4ee342c4005b4e9ce5dfb49bb917360a893859175734bde2f51d60c19e9f800ba2581d17d4f91a02b910c57493be95b47094879ba05c09aeb08c2c211d1760d439a6cd470bdabe3196af39940681bbbb4527e6ab7a3095fd2337b11c41f249231c7756fd559c9778e1f3718b1e65c71db53e2564be0ae155ed3f11739ecbff159f091aa53c0060c117d662e3bbcda3bfbcd04bb83374f2b03932dad68de3e55a48caa0c7b615d7d1a95bb37744edec3aacd1d860e5725a7595f56ee283ea177ce940f2b38b0ad52a360faaafc0829d21f2b4e43c72aed7b01042541af42e149c5e9ae2b31b3263b943dd991a60263493134462b99fe46b47d42d60938726d6b971db02c02f231ba966d8ee9ee77f7f2c680aea599468bc50e0fe875511ec26e77e36553311c3ef0d570c5dd2e1e41e8e50cba3d8ed96cf561e49a4b0ca153af00118b55e63194e411a0b7befcf204e506578e080995b33864fa29c59458839145f2795317a533df9b9b9ef79e1d267b1179a6e0c12323051097077a90fa395d8ec1238e36b9780e9e510f1a3d45ac2dee9de3f3606488cc01b782c4234447cd0668f5a2bd4fadf28714fb211d5356516e3ef7bc6abac406e540c532006d4703c2c8e27cbdad97336adcc00dd63c82b0316fc573bb8b596423772a0fd25a9421e32b9cea04e918fb8d2c72faecedc6118f5be15173722ab8521aa4ac5e3391562ff0cb00c96f74bde4720da8086f61f04d3f272d42ea34ea85c198177d3dce59da200dda96d624a11093056aebded0139ba4ce739ca2e3a683a433c249e6f185489dcf3911d15552171b78441339e022644a798e90e96db03cddc2dae18ae2d81cef15f1cd5a3a307a32bbfa2aa82f626e46b7ab4ee47dc8bd1066bcb18ebd6ba5f798b24a8d1f1525aaa66ae5fadf27cd730f1d64703d7547ade9ea25724117d6ff53ba1ea57f17ec81f8d7cc56413178bfc7b810785091e28d37b8f05eacf9253db34549bda8088ee8d01eeec1c4e69b6d88dfda6e81dd35ff9fee005b1d07a1484b2ea27f697acf1934958a42bf30b98bcd2247605fc7d49d5fd22242bab8adcb207605929273ed906f792e8cb3ffd4bc95f6d93b0c17b05840d81a87fbfee652cd951674d6f21794945518d1a71964a1c22497a77a7703a277cd9c71bc9286530c9878695716b83a9f6db3bd08b45f92354725342e2ef401e99f0c466bed5287e5f6016b24eff8ca968f75444f2e79353fb4354130a2600508dbc172b87b6e19cc4c303f9d2cfdfb4a4ac7eb9cd78ab4dcad7c777423fc5993e5bf367f8d32765d985a477a9c7158254a54da047af5782b00597b0e0ad47ab729364878b966d90b20a2d25d95f73376a18ead33fa9546c5feee76af9ccf641f5a822d38c3af034bdb77274333f796e950d4a76dd908cd9bcfce95d8de968cbe5150f62f8f856683d1842f8434ee1e81b8f30947a7b7cc87b0f7dfc892922dd7df58c7f41a669e031ef23b4d5f0ba3f995ba618ea1a3089e7ad570f2ba764a953fa02a4125e5506760fa0aceb9947a50b660cee7a3909c24bfd4a8bde8dfcfbad22b18e20f0c8c3c332573da55ddd49812ef389f1d5d78c34d1778e43bf4aa6f3b34dd1cf490470c45e81965c2efe2822757ae6ab55178fcb0466726909676090f0feed53999078c16dd2d5eadefb75cd2293b85688d4a3b02d66d3c71b9f6cfd09876c19561571cdd3d0709add524ce45c1e69f76982922e65153f844ebae177ccbfb7e0c1975ea61a69bc0f82161a5075b10e932cc7d1d5dfa32f13edfcc1c48a0f1479b7548cc9df302197cfe56b7aff311358e62b08c4c1e895904b6c51bbbd46a82bab57e7b383e994bec57ccaed88bda5a3ce61ddae5e5510816988ab5467f83081604d6dc3796d6f855ebcc75911b9546d4a36221e381cd41aad3e6cdc063378857c557d4f26ac51c7414a3adf3663bd495c47aa76f47700c34cf3f00766b78ce132596e2f7886950e2959be9ccb40ea4625a93f12b6258222a48dc42ee29dc8196d014abfc2aed9c4bd70013191b2d35cfa44ab219185f4cbe5683c53775d1f8482e7b65843182915378e768fe60e75693afaea279e1247b3842f8295299e81bdc6367deac0e75481b375e92779fb6c2b0f742e671efffefa31be2d21dc7f0a9f387661ab22eb527ddfbcdac6466ecc80c131d559e92f91a6fa2d613a472710ff1de44d2a9274d7d5589010836929cdc86b684928c6160c547edd134608fc29fb22ee20a8622ffd9464f3eb6308ffcd9c1e431f92e7b4cf383fbfef4cd027c43de601eeafb4229a102234c7166206f8046d9b2427ae274fdb40442c3f9b74e484b3c753a2ae885ef3170345df7d9eade8bc01f14b4f51ef10eb14ef4389a7c2d212380a5a622884be2406371ad192b0c2ec53c34acb90eebff81289d83a70c3b57b0c90fb670149d9cd1bea160165a474c98ca6f7b35bc94a15ff9db4a39bf9ea67a52d508569e7b8e92fefd1eef8bc9a6bb231869d50237991903dce78554c2dd90dc75c787ebae518394478c66aff3aa634776dc76e9ddcac8d0a61ed97a86833d616a31a908d5343a884e75c68f4b2813ddb7760fb8af0056a71b59a20ffb79001ba7a615ed1f7be9e8ac1ba35de03f5f4d5ddbe4a65ab4d91f35e6d7e3b0943e700f279afcd7d2504c813725ee106f0c912706e3be82adbafa6ef14a8dc82fc08048d1bcedcf8619bf23289af5bc7bcd0cedebea9a3e850d3c00fa26fd1c759bea45f94c43e2463f74726d1a240e1508fbe8c4a357af5217feb30c8a3a1f350d8cff48d980d10f79651c2cc0bce517c1d77aa8e02b759716b90ef252c21820c0a82b66ac5499e9864adf92a14ccb3853649863852823cdf26887d0f6f24eba099e20adffaa053041f1d7f08d58136634b6a6026fb5d50184212c06bbaf22f6ec89d3113422c0e5a51a8f38d8c33b6c0a4cbe18e5f2ff5cd0a5f689b5b3efca93b2c5cf4315efab6d1250702c1af75cb36f1d5c91624762e75ebccdcdf59ca9d317a3893161caf289ed9461ef74ae599a3f536e44a085e37ccb2352a328588e36129382f955cb0d268f10ea88c4774c4276f61437077748324236728d1ea4d5543450b95b1c34a125592502bb3a81e769a8da6b3ea6da036dd2e9164e33b474c7612ddffb88dd84be01d78ebba6821bcb49f07d55a1c915fbb1b7bf5e972a939c8c0babd464517dd683f7f6a2b8cf10b7c50cbeddc2bda165539d0fb9cdd6a0ceb7ddc7e1a5b9b62f86a9a5e328cdd6c708a15fe915cec1477939aa6b35eabe39b62afb8b87563f49a1166c7629a2bd8a6069694fb48c8a2cc52561fc64f1eec310e1c1288a85505736157fd7f4320f611f8aca13d814a4087775fb289aad6b674d551ce9f8c1da0e5f7a575560ed2629478ee9ac455282ae698322a3e9ad4e6c4fe7e99aba171b06462d0fda7e3bb983afe3f9ccb68a10ef6428714fc896652b00e531d8254be8f6933370b74639bb95b2908b13d582d6177c72650b3204ae31011f76c53d28ca39897ac2540075d5df68457e13209b38d2ad8722c9831418dff527373b2371a1760fbecc84a9f2a822f4e9c54bd5ff06ecc25c7f5c341ad7538336241e5b226af3b3477237db205d55baf5e63af40bbdefcdef71c92526eb6f4b72f3f4422ee8d6af27630e0b4c645077f9ed3c481fdcd7ca8c0764437b38a119e67106e102dfff86c90f8176dd9e2e47e8bb4040ae636934d4295dc62ea90ed6b476242a76de2c789d18fb98e92d36ffd156dfb7cf98891af1c29fe4cc52b942d74e6f2f96cc96cb1772127b2d272a69e9d9a355f11e880e14565c8658a819e93f695eea785dbfa565fb7d0544e039eee83d355f70093f2bcdb3eadd29def1ede495341af8b3aab66215d4a1f29d7a18287b32553b74a18c30ff840ad30ea8330b2a36cbdc88bf3e591bf81565d8402ed9f91d99183adadf266e4e780a45242d1c118cc4ec9d98dd1bbead32798463cc847d1c6c5c338e549663ce1ed6100f39bf3c4196bdccbd1f8ea1eaa849551f4a3589ce1144354ef6e752edf8bc4a25a55323ec7ee5bc95888ffc9eaba4ee03c9ac040458e271a98848734f697ccee52155817326fde5fb985cc94eb51e631e407fb4f853d65597c3df5009ebf83a66c4f85595ca20fe4c3f94d179d9a16451716896fafdfc7139c77851e2f5c49f4576bdca248ce44df38da55cf092704c35cdbc9cca4d21bb43be1ee3aca6fd3836fcc094238e4ddd09a10da5e02218308a83c054983144643fb6369a5094d0d55d7e4f920b925cb04fc037b92dabb3e425c4c93c1622c0c95f0ae89a902509ededed7723d942ce76b1837331c2f76fd45fdab6037aa8cbef308f7d00fa9f1f3a8f89f02727af9bf9e4a0f60fcd2cd9a432991b0250927771a3ac3c02c78af365247fc81e1102f36128203e71af1bccde4448e79d0deff45b92c3ad9228e6305f7e72690c87a1bbfa2a2424f3e52617b31fe58da9fe447a9413fbf0d99beeddf691479018c7520c7d118f70c66dd046fe6ad88ce10d98fe7bc78322003367b2d3d11d72b46cfeeb19baf222899e5653fd8a9764bf140980286862a054926e3d223dda9e9b577e814080562f3e32b593c4c5b12bc07980f052920ef659b76b83863b604e675948c5f43b896aec4104d17e08113c7c626ada1c2ea9033bc83420330a740698493491392241437aadaa87e43677b65f24f4e3bfb77e060a4cddff7ed4e37ea8fd884d1776e3d7fd23629ebb4373b1594a15c30ab436f20f5ac9f43c35b4d58ea660d35ea2e6d94c81a1a0c9cfb5b2f2984f4d4b06ed80f3e1f6248ed497b695150d21b2335ca6f35648fe85beb9f02ead4c0f8cb88c8e6369750bfb3ecdfd44ce610f9d01cf7f680f3ce1a9cc65a78463a6934a936fec000e3f51e6ce8c9342acb230d5f7950971810cb65a2917ec5fbac947f2dc728b8433249c7461822f319809193394500aeee9ff3b8d363a6ec8de8d901a045a0861537c4cc547b8a53b9f8b27362158139b8a0a2a5fe4f87448a83d745c29bbfbb550b762e96c07f8701f3a506a667475cac1a91f49ac47f9dc603c537b69d2ca08dfc3bda3ef38da3eab6ad89b355bde5279c9aeb11328f9db5e045fad3a6ea4ac3c812dda73cfad5063a9424f424ee3f7caae2677844ce1d0df80ac2919a1881cd30343cba452d2d2b68ea542e4ec100376f54933e1ae32cb39536e6119544c3cf979df8839b311f0b04c4cc8b13488792152a0065a59cafc16c050393767811a9a2982545d94f85d93f196f95d934e43bb674394bfb74853d74c5b4c0725ce4ae31e832c553549c1d97c7a2ed8aedf5fdfe10dca23ae45f5b9bb27cc567a710bef1ba191d0c99c1e54db110e9a84f30c8c108a465ccafd4db173462d29e0388c0e5a5cb4c977b2df2704f23df612af9e42fea5a6c4f464be038d99f8bb74536ce83f38ddb36e121ea2bda2a385a67626e7b892c4316c3c4d0249a9c393bfafb81418fa2de76e183749fa3a9011bdd9e8201d98719f53013691379543b16c11917e601e632fe72f408f92e9642885f1441cabb3c578c95dbedd815d4af7ba63bfd180acb73635889d564d9fdb41ef9cea7ad4c0fca8c5d13547c5659896265bc0310bc2d254737a45b8a3a993f0f054a60da814dcd11efd852fdff4161b507a265ef128da69404c9f00cac3ebbda5d64c6ed4810a8178a98fb5ed00a508170e4eebacc70ee59a4433316c9ed74626e0075913ff42ebc3f26503794a7c5c158a005cde08937617ae6c912c5dd58451e946a5785781332c2460e2ca246f99dbb81386937b4b1be32db4437a69f163c3a19e3b69c5453e1ce6177817143a8294c5c9025313e7242c7375dc368d1627dc059afbf861f261a9aaa770b38d3ef036ac05fba708c92014531ef859dd7ccfa91ea58651df7cea819f64bfc9d47954b29dd16ac9700f81423ef6bd6d8db553809477845a565ae906c4148019192d1fa843a5ebb15029ada89410a4308b58dc9b024ebc004e88004578e91037ec85c2271dde118f037b865a77fdeacbcc8fdee91549a3292a4ae7c09a0f98764b4f6a4aaf6b61bf79f125b51305be60354d5987a85b89bb32e35107481dfe9c998a19a3a1ebfb9dd365eae808bec04968065c9264f5f368f5a4d902f173afb56bd366241790f6c53515abfe5f8074f3877f5ea7a34fe4cd4c564adeb3a10ee81f90a8b12e611c6559b8e7a1ec98b899c8bf66c223d653defd7e5280a613903ae875b26c499af571151e286a5d9c84fa442cdfa897a349cd3734014f0a9d7d8e6660f41012b2cbf78127dc114d1fa6c21b85e6b23c899de1ba86189b09176958fd2dd060fa2d93dd5b0639e27aac4ffc97fef6e4bd024b04015ebb599cea44c59ecb3f63be66ee4259dbff9bc6c38dd6a8c77f98dac2565dd3356cf9d95e13a49a661f1969528f7218c65948c9678585f8fe66fa4db23ce2c2d73bf038dab0bc7aa606caf4d39bced9ebfeda1ad360f638c65de07d81ca0b492d1beb8dce8f02df62ae8761191e6e948a8dd30f9c66ab3ad4c5a0e4562bc63b5fac4cfb3910e17f08e1430d40f2a90d5015e66693bb143d84c1944b8dfb724f57f91d1103de9a4da23897b2f8117b60354b1df273b32ebe364b260ddefb8515610df49d7ae4e28bfc84d964c3962cdad6b8108e62202bf673136c76c0ac16322b685f2442f551cf0d6ab417dfc52efe88456f6ab34fb11c97ddc7937c52f8109dc4c77265b14c08ac1a7c8f950e8e249938fd3302a11c74a1a5bfb8c9001dbf3aeca1fff445c6276de7039e58bbe21d86f43587b7e667bb51d8acc208b6e2d7c3fdc07c96b827600a45ba168ae9856d1335ce4c32d94a33baccce53d34c83e16399ac741bfce575fa30a329aee70c37aa9e5ce32f47f1a5976bb366e58418c6a1ab8fc528c3e2b229a54c0780e8ca2f6a223d3440bc24a11d64aab9c0e9efd73d93cb6bb5af97a846dcf81c11eaac41fef4bd2ff6f203b3fd663e2d1d7b563bc6c1bc8ee54cedd7deb5edc6445748cc0d7e01f1bbbbc285a55f37abc11d14631cf6c22cddefe8f5c7faa0bcbcb8e94ed04e50bbb323425b9c4e0d997cc8b73a30648f6e57c65046b46cd3fe05b7d353f8558baab282a4fa0cd39bb73f48b19956fa0b87129193308dda1ff492260564cb6191286ef889e1728d751c7f086354db93279a6a5ab1dbcfb704f20f285759aa5e4f0f505cfe5318c8dfd858cb569fd5f4aa9b21fda63e420d59c28b68329b759413e7a997d0ca9c55fddbd395267bf32790e8eb45d5765dce5c0989a9fa6212ee679a36a17acd10548f09141ee1b15c4439e9e2278359e0464d2d799acf5b09beb9d709861d6044b62185df84700cad5bb6b28d7bdd919e4c2120fa2e5ee93e7187e58430a2089732c6ab140a03041b09a7de087741162f0c18ec28c166bbfac6dacc6131a35e4e6e533117473ad9c020ed2442190e38f06a4f5457dd4f8c03050090db848502af6a8cb7e9da55bc8b639f87ddeef380e494e1edd7486eeb68015ced861860cb5127d3aa5376bba746d70435a68818cbd613d7bd514ff2663227b41f1cfd788594e01e6988eafeeb2f8a0060029b5b134bfc6cb86c66d24defcabf1ab4c56a23341ff9c552806560ebf763d8116667a1a4f4df46308ddac0cb660150745de7cbdecbb9127cb9df0ca443f2b5b157d14c18ed65a9f7fe6bb655b20d50b4f50a2fedb5ac8f56c57f35577e80310f51872bb630b3098827ee9781ec6815771e95be583f4c7201512053cd4073aabfcc154399cc7d791133278bf1821cfcad0f514ed918d353e28b664aabf49830f7e52323bbf88e2c445e15f48e48c8051986fc79ecef7f1f389f4882ecc1429439d2dad6ee4cc9113923acdc5a628c2a4c840aa51d1be29808be7b9cb804d01e9e416a1478894aa261751361fc71023fdeff181626077c2f51405e58df76312449104457267bab65f6a1563cf4f94897b8c4253b8769ef38d52055685c6509d262e0e1e63e719663b35e22ad8ab20a004042f1ee6a52f9eddf3c30775e3ddcbbcf26a27b61f1d1ac061fd299b13028ef11536fc3eedab8e22dee290a05dd8b881dce56474b550c121eeea3dae972c1674d1df08462121112fb07a0482a645484ba7b5b6c0c0a440838fe16e90a39da17addcdde0323142a5c7477133cdc855730c85a289ed40a14b422f574c050319f0414079ff3769996be175150953594f51fb7efab6d2bea699b91a58673e659205f30d1827627b57101731cc05bc247526d828407ed59dd159dedbbe2a0c6b6fcebfac4193327bc817c2cb07cd76a3c0adbd96f73b84caabed83e4c77a52e48d0523a40228725475077f8f3581aaf72a7ea9a07c75c9bfa810fcdfebd83c40a9f2359bb107911066920d7f8f7be123c9e9196aa221b07947ba07bcbd3f2475ee915183bfc78dc9f7315f90731de33fd4912634100598b3b9aefabb7e7ecf3522312236a6fe4c7b24519a7e9fa69e6e7d74ee92cb28459911b2f5a4958c099830ca63c1408723db8324f8250a576f2bb3b28d0652b6cf3a1aa16ab7acd59c4212a0aca4f26c42647e87c33870b812429511e9b36f1ed3423bd3b14f192c40cecf729efe968dca7c1ebb15f465c98eb2f44ec910675d514b81d5385d4914182265ab6450c30895ac5a5a9ec112bce589b29d9aeed67f8cfbf2dd4b1c95a5b39c5b6ca67a668f9da391d2e32d820d83fc18b1abfc9b446c64e4211ee56a52b1f76b4e282e5e9b0f5e61fef4fa105e43782d22fd52462f72e42d110e2c26a72f444a4f845230258869b163315f8929520f7ddda229bbef0276185f4d017daa39154ab71cb097d5b41332d68fc82216582871433c4bee3c7a54141e5336f14525db70b8e5cabbb45b79e95f3ccf3a0a2e25b4c216cbf198cd7bf742e7350aae67995ed0793fe3276186ddabfdd215e0b7d40254321b1af590d04d32887d957cd4bf3c70919a6ae4a24980d29ae246aa2a7529c4a633f18fc7c99c8a138ba1776a20ae38f0c2d88895e90f9a3431afe0cced2ae3b492d8791c830c82e5f494a37e4a3c247047b6d94d3219fd650873ee7725195331d3603c42b50bdaf4244d19f615c9c62a1849b24bc822343dfc215c67b82f7a2fad1340ab0b87c8f707a37add81afc686e016f7b99bf161ff282c9c92e31a5e16cb86b9a07e450a9feb72844631d7f839f00447b126d49f75c05d8956814664ae1ada6f5ea2e2a422ebdb3f9cfe689a4548f1cef918fcaf457b835ee44409ccacdaa19fecb89870333320b0a64f1070ae7dd7b2ccc06a07c5f41875420ada198ed7450ad06e8a3cb507b5012b0e02da7dcb43bd0d9362f7a162e738b2df2663f30be1c8e3733718494cd0d8d0e1cdae77dc24535bb40e857dc3703bd2147aa77a23e25ab6bbbb52d003c091a2486230f9e0fbd9a3fcdc664c678707c7615bbb0cfce0fe40360bbc5a21920e360220c3045be37e60f51a7cfdd044113ba79bacb8102835d2fc22662f2b478866380c604823cd75997bdb264c52651236b3b423469a280ff267c52b654451d6b8cf426c44c7ef8c1c23cac246547fc6a6e0c51811afaf0fe4d55a3a730608fb504b22f3af6836eecebdcb0ae06c6ec37e246dceb75225e3b62c5e6d26e6301e111126963512ea232a832e87a6698a2a0df52fd97a8fcbec0bbe0920cd860ca2edcdf6374a303653db8ecaec5e394917529f49309e7e4ce9b1e4400715b7edf9cf2b7d08702441637f16db9bbe8ec9a0f87661127041fd2df6bce85470510fde7849ad83e84fd3292cb740efa08c7abcc79ef1e1133e0c70f77b75d7204255c39cbc54f47e1d1a30bc1e67330c93926a0e2b5c8393cbc9b76643d4e0f287a5ab5dc075e88c943d98bded8d801c4906a7419bd345bc9b724bd1c372d91850875f51b9022b45bfed4b672b3e127caac33cbc714956921d28352071098a3806a8ed96710b7e95dc75996638b73ea270d6c3bf57f6587d7d5c0bec237cdb5936223079aca41a23f0303f3cfa85f0118f6b14c08107760d0dd6a302ee0d0427da02baa277380c499556eb7368ee8fc73109fbd1ee3d51056de04137188db93b780b58d9a39171022aac5463fe6e1f09f4accc81c187f9373bb8a61f4fcf68d0396e658364de93fa2378b73b3870bfde646eed19b0426b17d653889ee6b8fcb08d9c4bb72de1c0bc439a25ef46678b8070625adcb6d54bc54958c06e7370c907ab93024c0e51f45a135fc4576a0780035fbbdbeaf93c25a39bbf7b12b88992aab87bd4c2305b4224822e2a4e6ccfe3b7a54e74f922df4bddc2b1a843c89964a17fa5dc31879f608e6a329121f9ea7bccee15ce1fad72cb60fc12d5258a6eb81f0179d00b7ded24cb3397ec635a5c867028e77a5e7a1a04f1ce9997200eedf884ce0a65da449e4e25d3078145b4c05ab44c3abe024430ce5b01e89a92bfaad0b1d370b8b5ed6a22b8061f374f1010e6cead3a77193d4580b471739e8579be64c4aee3c451f3c45dd7bb7ebb5d91c91fc293087751524f97e8af7004c7310e63bac24944b33d461a63bab85b4ba4c23c4d6e52910b9faaca601d2d3b93741dce90586ffa166950fe8b25a18531d7a3efa907213af6c60c5ac8425094f24fd1ecd9ac9e1135a99fed171a5930dd70ab50d3d861066403379be9e94bfad5de13e842ef91e4de86c7187032da17f784021369f1cc2e0b48ae118c9b86d918d58c1905f0ee9e5668032ccb9ae9d5f7dd95153fbbb2f7be266b4e212cf528c2742610d41f13b173b1aeb7a843aedf0c4c4641cfb560877209a47b8b6a9ed43e0c9781a491835aa02eea33abe140cc3ccccd554c489d4b45e2ff384b37526592bac732cce9fafe6e9b3dde162c0a3591754b9f6ed4c3ac764db858eded52144a33f8db289a13e46657b742105bb38f2848562ba7c5e271fa672dff0122e95c2742eccce1a9eff522219d57a2adb81d5df3c506cf2593f816004431012065987f6785b443b313e49d33de42510314a3d566dc676a28976778c06777ef60f942196bffabfd690808800be72fc237acf4fa212c4aa2086d86da5e6a738738100210e3debf0fccee33c682ebf1c2670eb8f1ca5eaedbe02bf4319fb71f1307df9aa68aae9fcdcf49889937b5adb753f322b13c16a4bc61b10caecced6396d0226d4518787df27ac3b6cd8ebd8ccf69e63e8c21ecb075b21f79c75a1735188cacb59a8e6dd883feee295eba586c8ffbce3b91b003308a4554e8b36a744b46951a57d809936ae42d248914804a8d548d5b79136ea5357a2e450693ae6eb9c0e11204bd07fb929dcc9c5ad5403e5131e14796ce9be231756ae268aa23d6071cc6a0f2d6d72e08d2b21728535dca381a6abb4e7e8b81ab86dee9c7ce6070836b2fd99ab0e9e51939a4c7d6f9497f8b975fc0afb2d353e7adc7551bb355dd4cae14c2a3cf4b8d10bc4faf3bc677d1b5fdff3961264b3a2f9af038edc34e8453b6e82a5e930fc1f97ad8cd191842f23a33b3c74be338933e2b1201ab2b55d885118d964822a58447d24ac0421b9bd631420df7728b95e0247ab79e1273e642a20ef6c798d6a503879278cebc5fdb23961d3d89b330b79f54d081c06b4f2b9862be367a25cbc5c939938e1e108caa39ede41cece47bc8c0359e73e4f3d000bd860769ae6224595a031c40b645f34d4e9c5c7e802b3be3462f9f044cb62cf9c5518b1a23ce1982630d596d24f07891725671ce59c198d662200ba3e230d5d5286ed718c326fd67a76af2532a796d11f30ae694be133cdd9a362b1be2525ad965c8b089568d3aef19b2a5465efdf2d29cd0ba9703112c943a6faf54659187d1e36bc2d0eaa10dc74331e64149cde0573ddc5574ce74b32c5183f13fa12815edeccf027ad90f1c6b0b2ff5fef625402f0720d301d15a120ec4252048c3c20f43e5cca49562bb4e7ab44a9711d009ea6e135b138a17cb093b8274228012f597d8e01854bb7c95b13e21dfd2d9a48365cb3119e58108f5e4463b1134887636ba1ac8a10ed45d6ea01d3aea68ab1a92925169f674352cfb64e4c52b50f7d43ec2135a84a3316ccd459e2c0ea4a7ace231d15364e0e0094c077cc9b08703658ae307d08d9a57fb6ca01ba225c59ebfc299711cfda29860506149865d431424a530217a5d1d848d579637c8332135ad6caac23e5d5e5f8657df2ac22fb93e822305f7c59229f7037e51685b3f0ba97641045a7d24f866110aef3cf210e40e53872bafd19eec8e0bbd3cd6839aa97bf27643ccc7b95a3b05eadd5751a119613177670129017f1a48c4355afb106b6cfe0971c3c82996c23640e0877ee6da7c3b65d58304e2f815fe1f62612c8d6e6ccc544f0237b4c0eb717132db909d58bebbe475d4dca94e64cf06ba90bc369204426cc2a3e531fdf285de0d516697ba8247669fb732a7249f3892327f51319ed3b566acbac6952d16e9683de4980435040350198783a45f657696507e81c8282636ed99aa90f2aecac2481eb374814c04b2e47f3ab9b3e643f6860147f65eb357c901200408ed163cecf58c3795a78d0de4790216bf1b7716cd018460035675c85608a92120cf46bed11b59fa7bd2f905412ec097ba7e137f04d3b2cfbc8c602985e7fa2819808873bd2dafa0c4f05e92ea9363313a7c8ff0db21a752785b9830081fc4049e6d616faeb3c3eaaf54739332f0b7fc1f46538566d993d5337e824ad70de389e0befd117356c0f759935e9392b1d94772ee1556bcc6c98415fba7254045b02d724fbd86c189073424d9215cdb351ec2a5848786cbb23d2b73e5811b3f9c5f0208473fcf16c598ade5f6271afac678f7a3895725cb53267ce78f09771ec12e97d064746d86e82176decc886b03478d3d8950415822b1eb88ff6ed7f5f74cbc9def74518247a69faf44bb889fb0365b80e2279217522ec098f2ae9ee4ca22a82df82c0721baff105e528f04381575603107cfa95515ac284c0852e891ac185ca4e2b2bb10f3a5177a53e595cd7acba3c10f4b81319b63772362ccee16db93690d1264bf12bdda4850f4fa6e50250db11efa4e72611021b22df27f58a004cc7d7aae94703d448c8bf4348c56ae1634128af17c42d83f4a458efd58ed5616ef92b951e36c33ddd695d9001d598756d52e44a0474d6b8c8ac58230d538416869ede1b95b33f37069ad78668619d33179d2d775e3c2c2980d489cf3313ab52ab6f28908aa49b569a069636e85ccfca8aafe61bf51036ba1c6c8db1224dca620d01a5b5aedad2919a667d22a9213e6cd8fbdacbd80a2040c0f0b0696992f81240bc56da4a835c1eb334ce7f23f7f29579c4b88bf850deaac8d0c9492e29e13e64bf8ff02e2e07c18fb287ca159e8c8e5e619ed677c2f6410123f4482deaf8b50c02c096f9d11d5eca9ba5fe8f756c7c0e5e0bdbcb65d012e3bc9bab08f98589cb279c5d2c8a532bd97a806100f44aa8cf99b1c1d9884e15bc62f095128fa3cc3b22a18585487caa1516a72b17edf89d456de5c5007542d4d12759af621c5d5622325ffa932f815225d107b4c26dfea643981aba27c8a74fcb4c9540b9e7c2c13e8955df0d01dc495983c37b591282014ceb925cccc8656e8d418de88197ab83565151495c9fc350d9b7b4b912c396ce2124749242a3a39ea36b39b016f0cfdf4851c37b217aaab1a888e5831c86f690b6feae418f96c369e0af6980c4f84b396a0c68f4954e6fbb285f8507e9f4f102eb7ece5d0269f8a3074f1365ea015a5021336b20002fd5b03794b6966ba6bcdbc2970351a40eec168c4fabc79970d2af2868b176eb419d2a2c69135e03c24a673abaa5a3b498f847bc078bbfce0288c4701f319f64fc0863463dbbcc4fe730534ece1b52da5b5e8a79d8502dd06456d680aee5d29454a3452f7306c725393db493ade38058d4b2ee1920a78a084f80a82f9fa0b68bf7b3ed2f6d6a72f06074579ab4d29c6724af9aedcc043df7399d110e9066e560f011cbe75fa9b5754cb4d4253b2a87749effdc8903de8d34cacc8df1489622f94600c7aa22d5e54503701583ca06098fe135d262c6794bf0c0b0ea2fd7c08b02f8b926bd5f65e9ce523e309cad49340085efa7aeb1d8be68e30dda5f61511896b5bb2502149824d566a59550b68d983bddd33c71867bab0dafdd159e99e03bcde02a7ec4f350b3273a05a4dd7df76043c164c5379bd5381c62b6ac90203a5cece19736a8b76cf8f9d94da3c537f05cf036a98e50f628b718d2381f15cf65772c3904c8a0bb28bb39aefa6d6e7557609be9f1db27e78a9ef43b1251e172a6461abda4bc4097a3204ca31024b7b6372f542b276cf216bfb812d989f43587e3a52ec7be8e0b27742728cf57e23e2af173c1795efd6585b290b9befaa7fd14c973115691dac52e5fa23c8b0b7e18c686485c3a99569d71278052470878fddb8e628c8fc4714db5ac0f590929ceab2a66bc3ac593933113e921b5f2f9d9e4b50f762d3a9fa108166468f96400d061959bd6ac6b2a9ea77dee90ae7b2eea313cc4d4d09372fe9862c00aa9c4aa2a56640b96c6cfbf8f1d9a1d365548e37c63df9ba36bd22b635fbe218fdeaa5168d92b808ffe42df293032116d30131439a05a3b17d24abe76bed30000efd1bc6f8e6ddeb151ef2f412eccea20caeef45080e565259e7742eaa57d3396b29c8ff3df1a9d165cd2407afc9fee2685dac10eb4fbba9c1acd3b51a13cd55685c68916c153c12204889a6b6d908b88e855e0c02dc9e5073625d3a7ac171e6f47da2049bb44c598bed0e358b55316ba794f8ee86185d8b92897511d1f38a78f5c297aa9fe4b0fdcc444d9175d15c0253ad408c014569d5b6b713963d237d18319571271ffb47c4edaaf9583a5768ad2231ab8d4775a92d91dc17a3e75718b482e3cd13dcd90c0078c5349b8ab30a97193ed936d29d96cd4e90067a2f7fd863284e251c60b0341e292e1414f84a50c7293941ed5e2d5f1529e71eaa7a24d68ff1fdb363b883bcfcd07cf0c08e4e5a8c39fd4747fdb465b94ce33676049f551830ee76faec0602967c280c8bca35d058ed24d325f8fe0ec16c3bc6993e69af73cb60b12e23a9852169d909f53190f045235b4e3f11b7a5663aeaa4d49bb31e5f8852290fda51d6abf97e60f364a69770d628d1480ee5c9e5cf40e834d06d4ea93f77b0f66dbfd0fe94695a9c4e15000010bd8d25c54a2d5dfd9d7d3fb72c9b41e63c8848718a484829407a46688e97befaf1c1e0d553c828dc79504c72e6a8aeabe926f140df976965041f2ebe4539cf955f299f1b4c73d86bfbb721229cc982fdf42ca9c9969aca9585debba166aea3907250909e469bd80fdaa655b8d1a15d8d94c8f400a62cc0d569b65f5f992fe5ce099c806ea89828d4ca11b51e0da90089e35c14b4c89718c903da925c31dcc354e361190e6f2a7f17a5a6881e437144d2d3a5c44cde6210e24490ef31b36d382a2601d9c09b6867a9b6b55fe34f2fdfdc543ae48c1516470a39ffc4b67eb1b4a75042dde59bbbddec580f33acd457dd931aae746b440916a6d4bf2a42cbdb388957545c274ce8fd4bda16dfef04777225b617b8e7f86f5d8cd197245504c84ece179305773940bf05dc144f09397a583b46db5f71d2ac143f163e8eff6ed90a8309b36148ff7ada7a28fb23020f5d719eb4c06486cca9f2e8d7266e6e28f35a40425c8fb32f597b38e8edfd4b675ba2956544b5ef7352154e7ccaba431c0c2c52bb1835e53f166ef93473925c3ff8b42416f8deed496166c6598fc4f8aeef9630c71df6130f649da03b351e98c4de6102982e38f8e0d7b9054b2a3adb7bca5e245dd6263701cf07c938caf892a138060cbc3a68be30a6837d6b5ba35e787025d54782218894d4227e51bd64f81edb5148570f51d1150f3cced06d901944bc110f0b2a26641a7bb3aa280ab8910da487211c6633c16e7cca59d88ca26fc0952f697f764bf2aab70aa6e1b36289663a1db2f5c5e2e0d4eb4e67778f67c60947523f27210223973a52996207a940153ca2945b6c7d40288862e861622d5d09bf8c71763fb9f2d4b84836b80d3c4b2b650f7578f06f0f2b716e4f00d5dba24a71b69db33b56bfe0da20683cd20a05535d061169d40585de8293b056bba96ad8552c0bea7daea0dccfb265bc0cdee6f53fea790c65c127627a511d390c808896f1b069391097fd0bf7159b3ac7345a13bce96f5905d6aed2efae871acea75a90641649b94a90cde621425e922e499b483182da156715c82323c482f96f47bbf763a8d37a06f574115599127cb244896f9df9f8c049c9eb1e6fea2381fa94c8a0f6d9ded75f54ab3e9d3627b9da5111ab9bb186f8859d38aa1a7c7511de7afa873f340ada6220137b39ff6662f1964cd102e67f9deea8ecbc60d1092359f1e325b626bbc95483949a5a44096818530f34dae18a501e38ab27bceb6734217a6ac61a1c9a9c02377c70ec51256a6af3d9c2c806e2d2d39509ed1ba49b06364908d5e1979d94c0e369ab87305dafbde7e327292e13298665ac6a57af7ef0031d6fe4831ae1061bdf577bf84de205d0ed4b4521655d661b95ff233a430a8665fbb425b17a9ff2d525db592e7494922476f0e7425cfddde1133315d3a7e66c1b8e1d124d498fda17b1b43899e8209c4dea815f354122cd7fb2aa8c0d746c6e0f930b4bbd4f1c2177010a7e306c0d44b67132e6ec4cfada156dd55d1ca824d63b32979b2704bf288c4393893e8f213fb2ad90ea61ab48514dab2eacdb3f75dc19e75f22c9173588219ce390abff3c233d7d4224128053a210cd2b5b6732fd3a6533712305e1b6489b6986251bba58398b85f20531e979d557f235d4c5b9d144d58e6f6644b6c505fda8b2210aad3a82e22a409e809c186750dd5a46f1adcc55577b473b455b78a697900a85634ad0119ae608eee4d8379e414aa7dbc5e46c467e22afbf0671b794e73cb1a3781fa953969bb7f416ea8208e02c510151b84f7a1ac89a3c2c455ac1cb4b522126b83fbd375281b019b42194e0a2359ed4f89e77494d7a977eda81d8882f0f63b38a68387d797956a78b27427892475d2f6286928f4fc1de1d2007f7a33e41b0954f4d828e9625eda6c39123dc0a1c34ff4231b2a6adb6291b35bf40f90de59edbf03284c246f3a1125719af3bcd60785bd8d3f94b37bd89f7dc1da055557406bf5206aa79819eb6fe8d75f32b65f1ed83af9017665d93fd6cee943e6aa59aca2bd29151c834a26ade32000d1fa27107a291b7ee60ec51be10eadc3313b2fc38737933804b18aa591fa4674d72c5fcb06179ec3717fa0bc3a4afccbc18d5e58110dd2fc9087736432784ac506af5988742773b0828aa37eec66cfb6f8d46d4d93d10bdc96b3ccdb14dc55e9e48ea7c129aeeeef7aec721008e98b6a198d032420830f0e6ad2d9059616b633270d462ec20a01699cd49c2c72d2ddf1f1bc4f38abb69880b575e9fedc3f2f00b5a8be3e1a3aed55db8c1c9d434090e723559234263b3c7e3a44364e880c6e96c0e5ff419ce2ec1fc2fee665780882aecb974b84334cd6e0d15e9bca337bd18e5449da09c9ba265b1b8cf9773211808e0b1e70353e88e8f5e07561731c6a4a8015c7f8d112f999626b74c316e92aa0195da500b29055c4b84ee30885636147f5b95ff1c19b2e4f1a53c91bfc65b8c70812a37868c3035da4211e4b5d8c277fd141e65f137269ca74fac6a64d31bcdeeabbe0c977caa933fe2d4a5b84048017715ed8af1bd28a82c65dbfc9e5c543b46de406fafa151a48304b0645ee52105dbe544885ac99adb00da367a9afc9eaa6cf8674a238b4fb3a351335bdd55ef4a698b3a663204ae393145b88652ae36e6ce863fa50dbf4897716423e483cd8f92325c429e8391937e34c2b22aac61905a878a36986d1a8cf74315d59824413e4a06f33a0b8a71ee16f221d8f58067a398e6cb97c397608eaf71436f767858928483dd9a71c0b1728c9322085958db4f6cfbcfbc1ff3fa7904d1cc6a1a30361aa4c5dd1ce2cace9663ffe4c356334cafe9f8d8ba8ad458e7a1aa78060a728f86b9962da60969e02f1b46b6d1bd8904104def42c4d15b7a9f4751824d82ec5f7391e9d652adcf0678e69ddbc84ea55425f44f8ab99fb1090ff55c024e7a8c0e232c2610b705f9b892409ccb57067b89ac28951cdaac07487cb8d227ed1b61aea8f23a2f93a58d9068532936c6ba621a48adf16e3fa6d3c044d122f2786dcafbfe4aa6c5f98ffefedd0d974e32e82f578715d78b4174c91062e9d7dd3a10530905068941e28126d7c32177663e352a5f2c3889868cf779652eb7f2470f975010db1c4ea43d12111c1625c13242854f02524bdcbee2a9c486581df9ab6d290ce58984620711882d8cc168dffc8bcfeca9b166b182fd4ab9f296a60a70da37397dae7ac8093adb10015d0f1b17ba77af320f34fc511b84f4c7b5e1a021a1db3f83ace2f83d83d164e33b0010a437dbb77ab5ebb008222f0847b01d515855c891be5b9d46c6395fbc25400bc2765d47ec998c4f89d9c5729f9bc137c1302434289eadc10e61fa886bb8e47e2bd57a754ace82b32aef983491caa5360158aa11b126b0f3e448464f0d3800a9931ff30566a6a6ae2fb200055573e7d838ea680d1435dbb364ec5cfde6f72a5b77dbed74a51b892fb38d9c2a505a07321f57c3cc65789b13024e4c4994f5ed1b445e86cdf3f2d9e37158995a844c1102bb6fd6290548edefac2bee4263cf53a371af9127be74dfe6ed68d03c51ab5ba27b0e22840781fbc9161f67f28e6fd6807c75aa2b357a4ba3f24ebfad11979cd8fa6f09613e942edcbcf7df4d8037069247c89ba3a096465a722b6d04c5dac059d4a956e727828b156a143b942ae9d6637a63e1c457299835c580f1ac01f5973bf3932971b61b6b3d106bccc4f2ba126143777c945350e46708b39a63c597427783e217c8f2910d3af9ee7dcbd12e094e89528c775ff80ca6905bd2de44ffedc557cde1145d4c8a05198682cfc6092d678f368ff20e6088d6044506217db6e4b8d25c614960de1584ef107d5af3f6cdc4376b07c1d8e55f28c73150b8041fc76fe820f23140ac43031692dc178d17f8ab2841585df6c239ef2113f9fa1e6394330f1f5c52b5f25f444306076266537bc24dd096817e856f0f9cd3be8db4ff35e09fec6cf567673d62ce5aee49bfd61bf1fecc7fa65098a4b4b867f3da5f9d85f1f51d6dfe30635a229fcf176e2ecf259d139ae86af0f8551463965bf3423eb6bbe49b880c637b09d801abc1af47673543786656cf4329dd8e3dc694b052d39a5ca951e928207dedf7199dcd530ae04dedfa84812cac8e7e4f24f0b5de166cb7ebefff59946e8842baf6cf336d58aa03f16c89ce7075808c0ef4de8e17892213d9883e8ffa0ac95237014fc33748074b66907f8b5c013bf64cfd786737086c3cc76826237bfa210252eb8f05c2d8b4c1108e90781d25bab6ae7f017d783ab18e713c3cac457a83bc4bbb51c472391ae3d07dd4512c0ec4cdb4c4444f1e9e70ef52a799698e2f73340f0ae62a8edf494a74b81a8312c9b06161f90d792ebc07af9a8ab147e539b0b810833d6c4b4e170feec27757c5d2448e54eaf6a483914ac75912fc4d3043a806ac9a1f3f337fd5af3e7a1c3f0dbdfc7370636bf361b108c71e3ca17343171c42854db73957735a5860fa00f352334f91479dd0ac7888955008e78b2d42443b484a4da814b5b34a9b2eff7ba3318d611ac4db89f711b5af571d38a85e212362faf4a3c75ca94ba505516a0c01fb2227235884e833762d3c4b3e5c1e23cf56488d750fd1992af434483bb87b899e07c3e5ff75583d7a2582f50017632b29ecdccc835e16a1c1fb5ab7e730167a0c9c807420e5067687ba2b30a3863078222bdd7faa85fbd8c2b739a42dbbaaf92f5da3ec8687f0e291578e0f5755abfac1c08c752ed6fe2f57acef29e48a1b54cd0de1f14b92e84633ce650b726fb8cd40550fed64ab2365653cbfb704235511c8850e9623cf014263ed5d2ac4ac4e93698af608a38e588e3511903b9ee9f7cf18b10cb63c43e4aa33cfd16a749054ab0392a3a05fef5207612ada5bfcbc703db5a85d6a82cfe8921d34860d61de5e5f94c1c637774511354d370c73531d6765fba353667c3ab97788f91e16ea48805b729291dde6f68a023e530f12ef7d226247789726beee5dea4e73956335635ee9331e099b69ace98b4cf72fe7d133aba70cf78d47e1dc06ac3c3de2679bd6f8987110d401bb5d9eea926091018c0956c2505a08ef1d86de97ecec690d5eb11db9c1ebb2a732393809bc960c06139ed78945d222d2b1f49a7ecff007c51895b011fd720b1abd2faaf44dec552435e9f2d5ade9b89d8a7f60a55867911cad5d76705e0d7b101867c249190266f928e780a0c4de98e620a337c6cb90d0e7a733674af7954cf59d93715b750639a0de3ffb7b00267e52d4dc2e1c9a30c700b675e5be7c10b151b9ebd654d2b67e1be127f00c8fd9dcef473437d62a9ad9b63822b08215209dd1e8fbe51be26ba13676bd7dfac04402fea86018ff0b214b76831adbcb2fc630435ac7e323237bb628ec3364c86e5b8de1e92eb365d2e83ccbb338416bd2017b23fae5fa59e43f8593570924a16fce0c7281a5f0f4c4772a1a4c5ba6fb48868d66ac3a9632140f4ce4a62f3ecf1a5724c57ccab2f92f62b65996b829ecd6b055e449521da72360dfc82a6fdfbd122af2097fad945d475cc4226a5529477d1851b252c83e11662adbd4dd70aab876ce9be6a9d4d65a33fa6ed879cacdedc1bce0f3133ae273cf31b146701ec4b883dca04ff2a9b859df5d2f124d5b6fe1affb512c22c19d795d95e847809b134464bfeba32feb0ab740025e0b746255f0b17c2902eebec8f5a77c20054520c416f7889858779229eff106097cbb61f61d355e4ede9c7924cde7fc919467188a56720d16c833177d93b2faa7bde3ddb121b06baece2641bb4695a21bbae867b2e06f7e26fd2ba3f728f662246927e907f4265cf962fd29415a147106e950be77be73d65431fcdb6286aac755b0240848bae89dfbc8abba0232261eb143655aa7c4303985c72bfe9c9a9a63bbc2feaf106d16421fd9e6ed9f1d5f7d05031112a8f59f2feebf93a47c4ebfcddaeac81de43507bb194d81e8f07d5e3e23c15561e4f8040bfff0cf2a306eb634dd62f9f4546ac9da977186c7c7da0c531d3952664b1837c8ff910a993ed0a66d3e87c0648e3108dd75bf5e0de859d925fa801437421591a62d3188da9e36a4810959fd685b916455894e731fbbea6416354ccbe6da993f2748ff2940e4a9d4c027bf56af3170abe03ea2f633ed433a9bfb4163c3a278a146120a0ab143958ee5991f60a055feca3160a0d421232b827d044a1cd9fd4726419a327819a869f35ec75f0ed45354cd74bc118f73313aa98348e0ece53c838aedb1744dd2aa94b71230ca2d8118ea1ffbe0b72255327631046bbc50620587195fab61603ec4dba579378ebf645123aedf01a4a1112bcf0949812305ea043169f98e9910c05ed6581ceb38127b28ef1a468cf73816562d6aa5fd2091a3c0c2b4063fb4739affcf60bc098cf4916d9bf8df85bb47ac0247a8bf98f182e1e60ee99e42d9a3cec953c7e6e25a72183e00281a26140593831cfbf854f2f92eeaeb76fef53f2a639a90675175e9ac1b8643fbd67c4334df7f3dba6d1b5223a7607c55b81b7aabea8eafa7c50443cab21ce09b19cd0cda04897b04704ecb498113b3ad19956edd55244d4a65b64613bff06f340c7cd264874cb7ae092509fff2495b498c0611502f59e08dfdfe869b70bfc9aa1d5a9b22259cf6518c9af485d83c8ee06f4dbba74b9e9e949bc956b828f30b19a53d1704d51aacfee7a4dd4241a98871ffb726cd93e7e0335bb43287545809ee24ab7dfaffc3c520059c6b079a406f284de673fb9dd4bf63ade4d746d71982cbd97f33530b2a2dad7d0d5e17a185c5d71f305c43cde3ac935ed6bdfb73cb4775a82cd6b51ad3e38acde44bb2d58c1c22173bfa8f79e48a11ef0e666c3be25e6085a99e841cd0870615b45e3c3a14f81da2031d7de326197b99631fee6b4221fa4adef61dff4193d2af0a8122cb1ff920ecc79fa6753de87a64b065f838de00216954a92d524aba650e4020e1ae9ae88cf3d259d55f4edad5a91b05a427be6150e35e70d113ebd569e858355918be41b098981731c134981de2e2734e05b91192ba96d3442fbbba4905ffc86de4f458c845f6e5241bb09aab83bc821799ec99768b76c2b0e18fd14151f01c405454bb545ab14cfa7e5734e503c2a090ce2833d1129ee88836a7ce6d720093c0d571a3eb030a78b2ca9599376e8266cd49c7dc39c1514e3a15741735de1e3016114e0679e24d2453bab3c8ea563b2f6aabcc45740a6e4406a9bb0b61550609a2d0a28960e450e9b5e67f843bf46895dd07b5ea59e3f8439b6aa0cd29b25508feb7138d5a21f822c06d057d9dfb28a95f797f351ebf4a53fccbbfcc7789a8599317f17010e67b63f4ee4e0ff8cb02c3d1682bd7609feaa0e6c0fc920f968cb44fb3b8813fdbf87eae1e838cc5c9da3aa2bce025b9178e360c9f90317d46fd613b3ea886e68fdf63f5528411763ad23fd914ee773b9ba72813a0f07f1149d1d7517b19f00c9dfeef5821f26d9b835b15ac467289c5d3a23ae2f9382115d95b777118c231e95b6bdc400aa1708ed60cc1eba38b2e719ec27e7b22ad0b5c55c6d89c093c7c4c2f03f8435442ea08846e897209e5d5577ff20369cbd15622d86ea8292a5597a33b92a4e04e88876ef7b7b3af0d9e8dba2a7f7e6340c9badcd6d432af96ccac25ee06830a202adfdd11da6e2eaf17267af104d5e8e8883c50e2a409c756eeb36d66139f5889644038d7c3ab0692d05740dd78dee005d46475994641979d2f518da833beca3f6dfd18f1eb5deb7167c9f54ca1fc26e77d74921e902dd31945deaef44cb4fc66b90cebf5e94bbd653abc7cc0a66ad9244eecbe89f4e6ebb6a4df0a5efd5e634d5f099224a85bb008f9330edb1e17a7b2d01ff6cd8d9fe3f52990a3413b78d055142eef410ee4e44b18e5c2b251061fff19842f01652063e25f12f95eef2c48c53332a0b85072053a5772078d4b32b38ad24f7f5abdb402eb8d2c7b3ef3f98274a8ac8ec554d2195099031091b0c5e3dcb3597f16ceac6d9c81dfe38ae16961b0a06ffbed05c7fdc0d9d1feee724f4de9c5900b0d365ec5256308a88f55026d54b0b78e082a44effd6a2030a502e4b7e82ac357d3bf5f624b470ab1ad8108bcc5e0fa80e9be35ec157c8954691b015e5acf549d0ad5cb463a54131b786babedea95fc7868283d321aff348d5f5c999ce383cfde6c7fa6c355caf6ea38058a6fe7098878aa39ef145a03c204bf6e058b331bbf073616b52983a01889823be1a93eadeeceaad36720342b4fb58cb7d53c06fe03115de4bf6fe354cddc082cc444a111ce69360bc5e9f125242712f0c0483f2340bba4d90f4e8d34e912653f8a68102a16ae2cf98dbd006ee1efbaa8d3aa4383a6947043d23371c71faa259ea9f5a540ad8fbbacf1c9ac33224a0ce54a3b8705b1772469d92de926ab1d516d17ff1d0fdba7d9089390bac4f76943da85e038fcb04a09b5a0a67e0afee320d3ff888a752647dd8a37e12018841725c5608964003b8cfcefc5059359bd4b0ac17fa16c8884dbe93b767cc5777ccbb5aa73c4c3a21aefe617b7ac61d899b9ccf2ad8fa3a6520c268fe695ce804d8feef65df6a24fecdbc6e3c6df85f9cf6cf107f9f03efb534242a544aa0288ca489da1af0273de287040610c6ccf9c636d3588779ce097163c4a0495f8aa46a4dcfcfc872121d430ab21c552907b2e2313ae06a265d8a474dc1d8b9d053995486c1377813f6d547518426875fdac55a78eda2f8777cc818e06b9689a8984430b4e38f7b0f9b3e6f5d89dcfaf4f2f29afb40afb0d14da7d99366bf6b153e43705fd9d2d9a917b3292c888923754da1eb71ead678407476e54ff4b595ba16f3f7fa45a1e3362c7b49c9a11a6991da02426431c6cfb0ea5d49a177d1a6fe9ab21a0226e0098a5bc7e4ac6d6c45a4adb38cf98713d438c1eabc6f85eb2a87886f8c9b5eb142994811826d21f6e9ae33e354f366ff9f7a2778c7deeb02c9d166053783007d6f7d712d3085eefdfd3a65f08617e92e92b4ca5dcfa7290d288a41e70515e98e048f3e036c4b524052027a0ad4309da40ab68c877ce89be83f14d59421d1e9294186c6e070c803670a7c4b26646159ab31a7bfbe9ed22be06c72b85acf00fbc8d69b79a1d239bbf4c77df505d74b39d823f5f07202f11b5f2802b86136320cd5977316f9f450857972e23634ade073294ee8be960ee076c1b53ad3c7269a6482a7028de75deba08b30afe98b5e05a7964648bb0a2f3f5ec8650972f43cf829fffed4c2fdf707851fbfe8baeca51e8af23b93ec4a31748f647a4bd59456520fd14332af2da8b91db6481ce0888a14373a1f116d8dd9610f67579f009420ce0c619bfcb28610ab4e2029f97831625a24f7de8b09d9470b16082a54e6f1429c26470c877c87e74a72d0455b001e20a9e46936511051e9ce3d4f296976e35003b3b8dfb3687c1c1b7f9ad344aaa9618e225d2d3471a2a754dce4030d2f6b64dff3b07a2d586eeab48dd789036c02c8cbf73f364e4dc3539ffc742eda8fe19065f6a3656a700f0a2c0d31078a374dd27f3e183daf7a25f8cb33d2e460fae127dc969d5486d012dd8ce153aee02fe550bbc3549f6d2e876fd2eeb81b4865a1f550cc57e5dfc92979be7a58f1344af01993a25f2902f684a3abc4a3aedce5b5587f20c28db17afc9266ae5bcf9a97463eaef87957abf3aae134acb537b786d8c5e320b818bc0a06959dc70014ff460bf73366a396ae3e9959a51fcd723eb3a6fec3612751fefc46a58f83df6c65e6d29e548291d2b57b3c20b5c803144201932444fa58803d956c00b1b7567e4d4682c4d44405c1730575b2422606c4392a7c3c1ec214d8f5771a0ad98f2ea78f7af86bbbfd73b1d65765d504c1c8f06afb05ec0bbca736883259b356217c88381c4799d4bc695b60f9b4bf035c6b66b0a7e46119d19b59886a42e78c90bddb797ae62b6edcca8711b9a80a20ebeffb5cc1e7fffc8a616fbee257408eefebb5f60019f49b50e8aa9dfe9994cd1e5ff689d56c343927b670fe9cda4862a3834285e913e497ab48d72eeaa4e2b0001d1b52dfdf7d928d5328fd2533ff4d14abb33746b8588fbf5c52839c1c85d49dcc4a6388203aa38d0aa906c64d2e396c5b85ffbaf80a02cc90e2a2f86149ed47cd999060460c921e310967327440ec15bed7929837aad62d7d41f8e14ac8ba0d66ca607b20bc8c86a2ef94a2ec6adfe5f100fd04862533109db87355354e48937ea6ad7b34e7f93eb7cdb7d2633c1e8ae47d66628a4a20e1870326d711fe7acfed1a1fb81c477ae90c2c922d58a56f2c9ea48669f5be17db656ce686d6cf0645569d64bb0b68f4ed531ce179f3f46850e5a36103d139b352d6bed86d5ba6f62b795b8a8515191a8b97c75aaff22ba68990743ada02f35f7a102925a63e3de25a914211fc5705dd4bf87a90f9af10cff1c8c738539760dc56c845f6224771adaf41d7af16229e219d483597bf07380bf87e58ffd8a88effc60bfef31bfa887a6af321ca58660e674da4a68d64235f43961f3f67d7829a4d7dec5d1080f753ecb0f35387e204de71885e27db086d38287da66a8b4ff01a1dae79479a9b2e59ab5b36c99e37c67404054dfa5d9f9eb3084833b35648e97be196fe124958f35b881366c2aba654f812e94cd8d02e22bcbc9cd5810e5e93b2e8f74ee23773a25ff1d34534109e8ad989f1bc2520e8406911e34d08ff54349c5a66c452cdc1347593b3037a0a99b1b6ece82e08a2b459b398aec23007266f2d602ea593086ce93ba98f272212793bda8d54f7151cbbdc9d8fed063a4fb747a17b8a08f08978f7df5259e387be8faf69d1f0c78430125684c76b6838f5fc038b1ec9328f41499027893ef58a625f01d8ab2ab738651ad8c98eb975eab484ec96e1748022c3e280c83e537f2f382be485100fe1e01e2b29cbebe4f5a9c1c4227e74393541460262b849586199aa006c08f59a1cf4c7c5738f5dbe586027852ab39b1b85284fa700abedb1204050fe93082ed0ebd334a6bd1dd67965434579e71534ad08c53114abc95f72cf2aff4d4f20ced4c9cdcc28adfc7bae377eb86923a4f4f8397398bab617e6e4f28537c7cd3ef4be5758e0a03732d7a671fc98d42c3e8ac08376af826e79b139735b880da5027be590c39a1eacec6b4aa40bdb51ff80e56422ea35c31f10e5eff8c995cb9d959f7a3a1839aa40e90a43e49c9627f0b778a796fdfc77db616680d6b206cc649d7ad71844c768506709624fbb8ee205e697a1552d104a505813a78db9086d3d94e9bc6b6706b4c706ab85b752f33b2bfb665197f28c7465d4cd80741233c9167e097cd32a4efa6591894ebdffda8c5fe5d5da26e57299abf0d1a57db5c2250c24a4490a5fea97784aada5bb0f3fea71699d5962f0f7e5ddd0c625bdd38477a401ca2e2395b421f9023dc9f09dcd014864450a4bad0467e638243ea803740436bf6a49ab8bec8d563d94e1bd91b7bab2339745a70ea55162ac29b8d5710cf7a170657896a0c3412b337d5e17d572263a4433d6ed01405bc881feba2208610e1403415621d073e8defde8b19bfd3eb0f871451c199b25b30ae8dad81d96842e33f9c7fe447b90453066fee8ed469e35c338f21bbf08363739d4d2b90947e7ed718745a5ae2714a0513844c7809c61ea3571879dfb6c55e898cb1d19e6a511c7d402888768d3a7eac87a16e78d93c33187d64da5d792a5eb7dd4cc2f7b2d8b4c205dbc5f1f851c93e3c6f1a7cbae0714cdfa215013adc19b2e108d7be6a0dcd02ff9ec73a2ef6e8f02b11c5b10dd560ab064bb678259850a0f8b5bbbdc5f476390cec8d1a004adcf1b3a82ea10f98e17c86e09fa42199f8383e580afa1ac54d33449d9d31786d6e6d65efe634dad4ed46d096b61f547cbf56224ecb879a618a1ea250b401b32ef24de7869867d20a49ad842a304a83db99dddd6cc52de6da8abfa7be1bde779b8c0dd20772eabb0228628463cde064c81117f31e7c2989f42333ff9c59de1dfe67b63d3027df418be487da8977d70dcd9b583f59c4c602352ee2ef2e83ff6546d260b05101e059e94f4d7f77ee5973335f914bc530fc166cee895f9f3a690d2388c88d4002d4e77cdf70b4db93d9ddc77ee42573d153763ee94a916b9b5fcc1d592e02254cf805a2e2445725ad8056c6f8e47676c845428f9ec2080daa3ff87c69a3e59090a50b14a2a9ceccdc85f3971a08cf9e4acfb42e5ce1b25466226ade98b20c7188b68fe1ed709d421bf9d3d690364cd9eb08868892ff402be6be6b26cac724020d3259e0f23055ab319e729f291ed66f29f5916a878f7018c8ea039c943e9504a385f1ca82d6fdaec82ffb46c222bfafd0d4f6610f9cdab89d073daaf675bd543ebae95f3a5d09531dd66bc242272c6944e3218521340adebc52036d5c6779c495f57d1acb7ed5d99ce4a26a81f601de92ab805c5b593cf9702f7d1a990f50bbf8689be3d9307550b7ec0431b90809b4b98cb494afdacc4aed1324588e3ddd2ddb459cd7b30a2cf483e771bc1c3f695d89412ba5c1dcb09923d36ddf7398f73dcdeb2023a790748cfcdfe051f668dc5c3c751ca98cbba7f484c3a2d57c0da1925a7a124537b54ddcd372415cfe9d2d20f1edea3ec2c3f8b9743e0b26d4c3d2a594d7cb031d2d578be77cddef96e9792069331b361427eea24dde2d90ea19de848ddd786809c5a59c7886786cdbd838d648100431b79818b34eb59950492b4e17ba501616d0db2cd649216e78e1419f89d118a6f3890e5803a542853a7b2dd774bb61e87689e63764a681f9f4c758ad20bc10dde555552c50ae0047ea774a835fa646137c164a8efdbd16623d221d9e12e53fd5220aa9e4bad690189558336a446ebb074658b6be91d0cb95c669a4b9378a4cb7f2d4889911784222e70aa2f2b51fd93d7da8fa9a77f20eeeac7c0732a021b9461adfef61540935d07b94a252c4d2409f7a152351fe0fddba9415eb5f486c6f91dcb4ef84193317f560b3866e3f6fb69bb9549fe76a3b36720c81f3d8329743d239491e01fd157fbe1b1831dcbb426305f0ebb32c74f5a1a144d42dcd5077005652b998e16dc77371042c6a1f13aa4ebc005d134b806919db2750a1647b3d9ed2e39a01145c8d1cc1c3228e6afc938706f12827df9879110acce1cda1e24ede3ae940ed970e2b779f84b7b62d498c862b3d24fbd263765350fbe92a9427ce29ff248862c073a30394537fe055aa6c026124271b8eaf2a84dd92abeec8582250ebaf07560cf01f654005e747adb7501c0f457a96d1f6025a42dce8628a708c67f43c1b7dedef7b341c3d16b21c1f34ed8037d71d05e76dceb0ee421eec568b785fc7316354491ad787093e47583aa2d661d93874581dbe103983b7cc032a8d428fbc934f81a9753b46c16c5e210cce8c974fe556fa3f4cc10a83b6b420dc609047b735f7d697d5767a5fc059069fea6e76bcde446cb39723d464af2f0506d15299056040e460811ea4704e4a8daa0578a858d5283baa76936e0d088b0b53566f4ef1f599eabcc83163f0b95fff8363b547fc9d57c87f79e33350cc9b4efef6c09c6a1333cb5896aa28be35502acdf1bb2c6a32b3fee6788dc394a9e4893b38ed3a048b638f8c44d04aaaefe212e91934de44c0323e6cc220901001cdd08ed924bf8386ea602d95bc88fa4c82e5d25c77d92e2575c4838c5823984c072d3d88af1c2b9a95b609c6a3831416473cef47153cacb28c65030d56dd49c7af46cc9a49c2a7020fb30473941cdf09359744bbe6e1b6ab547889b9e3b3021438738e34ef48d0a320f8796e3968a1ccd072f07ddf8162a45fd5724d8db7922cb8a30d9bc136101f88874c4ed4b0d1056ae717f122e39d95c8dd5414a8d97eb3b7234d1b2b01fe98905358294cb11e58fc4f79760f8af78f23b3c932ba7a1693dd19f103f5bbcfc7a5d5c8d9fecb27774c96a01c128b66cd3a1356a02f45c03e5c7008e13637f8a7a3f8528880d5009015877321f80100d67e63bdabbe89d88619ca2d733c7d78d1c486f256a6e6ce147e821c999f5d2da507525316f362b451739f39fb3b053c8aaba9063089546fc5abfce0bf5deff5f728f017c04c4f911ba4730443b687e2090f3d0233dfd656bfb1d1b12c34e5327cf3495259f82868a6d89d6d2ca4940846ef3db8501baace8e91823917dad13abc4cda928a58df856e21c8a413457539412e66bf38adef44b345240ebb9038f6ed5319985731ffd775cea7a3b8f3bc4fd01aed0d75354fbdbae6bb797b61d4c281c57c24b23cbe77d0edb68983d9a301813229f95f7046b648634cfe5c624b5aa5be9adf96acbd9288d7e6f388233a5ffaefc4acce88a10f70c5681df1fe783995a9330745f89cc1763336dc53cd79ae5e8f9d4f184a1bd9500d41abb2430c05297f552d70922129081c4d7cef90ac04e48fecc2057ed929354f287d724bd4d0b1c44d19be90ab28e4efc52d4e35c3e0c52f4603f23e4f9bffa43ec22bfab0a18112bc9a7b89117ce127ec5271c06ad3f30e1fe0d2ee94323d4999fc23b13457539c60394cab92e1ea2b253a6203c3752fd11f554e8ac2565a7c199a4c7d230f3a94c331267c11a5c95b1e8ee829047c7b4a40ba68f8167beff286e8fc4310943f21ad8c7196d4a646854e0731fcd07efdd4f26e5f4d3a1958bd12f66e36061d86815949d75dc928bd0dd437927c1275371406ca3ebc0d8d81bcaed168ceac3c6febbb02f16b947e92868ca6b803c7f12ca2e623971857439b4cdb1d6485e64f223e4d137bcffd12bfce41a4655f28f39c448dbaee9318d6e08269501c27ecb68031d75f3211a39b9ae034febb8933f119b074a98dd0475b3ba194329c7da59d1d150e64c6dffc46040c0f9ef6f80430254aa888e64cc36721c6e429b4964824133c7a91c516bfb48df4397c53b24e4856e30f9294ced26e495db2238a06fbb50d47576ef7f64f05de398ec94ed31a3f9a6adcce5e5a7a9cda47f531b6b8660e875f973eebeef9766db5c18bab355771c11b85ee038ff225d5ab56079295a59e51a9b28953622b1d9c9c71162636f9c04ef3df5f14549204b96882814bcdb82d5ba83a7ea65eb1132ad2e055259784044845e1715df8ad03fac4b81829096d34bfbd2167bf5999662edc87c334ac4ce3553f067b5f079a0af05bc3f6bda5e4ea78e4e62791aa6531d25552e371199ee2ba32945ff328fe43c21c6e591cec03853a9c6ad21d9a49786c5c2c2fc50c860361d000727ebe80a0fc6c514859aa8a37a90b6762a36e9e2c37b79e3f70f6f578844a188cfd891959af34eb2c1fb8ba438ba44f23aff4d2275030145aa440166df815b54b73990708069019044c004d2b1cab391505a59732df3d0d0d8a42b045d8974bde56027481f77f1bd14df24d9bbff468a99b237b0c7cf8893b9f8961b55975a73b1c5bf927ae7fe3dfd5210997e695b197e0e991e7fbfe2aab3698edc7b564e0a8b1500187e82ba10ef2c35c278bf2f85ca6721a4c97c475ea8ebe330eff83e3393e7ac6c9ca912fd6955169d67c6b09fbeadf69b4bb5ff3fe5d74e6519457f151651bc7346af654cfb02dac6aa0e01b69d1c9a55e93867b798a922f150833f98740110a8ea48d549b5437b283fb5d6713c3e2be83576382051d42bde3b743b4aeb0f2ec5535b69d774f6c6fc794a1b18ef5a13a5b7cba7af7b70e3c5f0acf5d114d696d6bd5a8710743ec06e0ac0949b2f1640baa0f27ddf76b582eb41ba652dee44f4fa0d30af9dc3537ee0f44627c7d41167c1db7ab697d1e67add1b0a40de09049b47826534287c8b659825aeb02d6b8da86f29d33f39ee86c44ee2e14c4406fa232c9577dd837ae0985d0d1ac1139dae0c0f5a61146028e3ea92d3d88104177f6964092d8f4eca791b50358fb43d521e5f9baea04ef806df15217276c99c7110b053a762d212deb70b74b36717f94445e483093f8e94f8a72e5485e04ee06e460be6a27e654afbac64caeb83cf72ec0f66a2fab54d7fcfce3aa5aff63f2483e868283c604dda6044f7f86ea1003eb7024f8f8727096e6b7cbb219a34a3d7631abccaa38d98bf71200aa0cfc956a464749376f13984cb340e87d1c4b1b22b22df1bb5114f610b7db8476367c0a1b8dbcf9dc2c26e3007f2da14bf005668cbd6e98bbc0be0885a937ab00120da70d30b8d362040c2f2c6a97003fbe75ce0ae8cb571bc2cf1d76c8b91eb97b7a5494f1b35b97428a2585b2b1269d301ffbb1c51879efff4181cf1af266c777606cf2c423a6aa7c8be80699bc6f85e5dcc99b93b3b598247e1b69ab110a01e0ee46326b8f6b96e0b68755933a25ea89607d2d5aaf2ce8f9e71fbba4f8d6651ef3088ce73786e79cc200a591f37eabf1eca5f69492fc6d23d7017c254f357ad83c246c2aa8f67fa724287db277873cb83d77f49af0ce39b96a0dc2911363f4d057870a356f6018d6ce050b111831fcdee9f7ed6b106bc5349758ea0ac7eab4b2e4dd4f34a10bc7723cc9ee66f5148dc096d1a3b193a6e2c6bc240858a06682513ea56b838d63360922648fdc8c163f9100ef542906f8c9058c501d3326e393167d726abcf2020b7f6de4d6b93069aef9522e6afdc9fb708db7e5cf06085e9ca496d7cd866febf2ed802e442dfa1ab29e1b95be7fb6678d3f69d0d76fabe6c28686ac8804d7e88a21c8ae89d28462592cb23ea224db17652d7f016a12b8e1e8b11c076b3cd90ee9eedaca7188e491d077ff23256dc697bbb7d0080ba4e54799d3cf042aeb9b845fe44d94b35f7b4fb514ae059e05fc721202218b3b359f7705bcf716bc548c30a8adc0cecc90dd9f18aab801ddefdb35e80d6808ec457d5cd1b8d9050b23a22a805f252756e62c81b474a2c0ec10cf3352a596cbbdaff93c71a5204bf8d134c69007531ea81cbd6970c16911b759fd669fbf5e4f902476281d4eeb572b44186540a406410e2db2d689d63ec79eda9e4de88b1943447cc33819ff4af0ca091ab3702ee7686d75d2a6cf454276b107d39e8ffbff018b4453c3d4b2bc15435aad55d6f4e6ec680e36eb42dc1acd92dac7f9b1ba67a3f52c5794e9fe6b81243aeea9c29795588c61756d0cfed820ee0ab8013aa92360c4ea50a025dff59d46238966c421f45ca1bc5bf2f0685372f84171f87d493df0a9977ca94cb7d82ca2287153e8f80e073ffa89cf1f7c8d37759d2aefd06635c717513b9fe563b824a73dd923c320db3f7c57d0627b33bbe44f11441e4bdc7488ef7cd36e50b19765578826935ed8a3b45a2112cb0f1b6fa95776dde76ded3a0052cd5e8534cb7d88c97a216195e7e6df12e48263fae184cc0b58700fe8243178efc1000937da8cf57423256d6a8092be8a1f17fb3dce2bd6e7961b3f4bee205e5011cc503e9902c24492a346f13504db9f6afbf4293c398a94e69e18d4d8626dd1f0a9c52c24ad5bebb11c211410b4f3cbeb52b3f6b7d91b3a277b7b575b7e61a67a4fd43806fdb1ad5c0bc2b21b085878875ee31376dfd75737db286ccb667b3026eb1a9985e346d21bd48776c82efcfff7fee4a4fc4826769ab5bbf27637a1f51e71815e03b3be25ca5856cbf949762b35c7755f06d0753dbdebfe2e0ecd85e7bb3d2110e8b57aa4d525450def6d197fba2426c105e089806cdc8a4aa1ca8e671733a5ceab11963a95021f164cc17fa03aa6f06760c2d53877506df6d6370f555d5e473a689ba6b44bec0e365595cb004e403a2f2ad3e155d2812b0cbc54de787f2854481cc593bc64e3a44245cff8c84293254c30f1a16f3943cca6c0bf4adac68a4f1c75d8b5cd64851be75377a623e050de4cd26bef12f05f938a635497cfd3d679733ee34fbe2e1bc9a9bdef1376a5e9627cc7ebd798592e6ba0ca49175790db7973214bb8be24f6f2ceac281867b42964241b94397fd4cf2f323bdee6369b053686e47c8df514ae9a329c3daed38575aead5aeac8668349a83f9c30308af34a1b9c5a9c768d4a8ad1150266133364026a04b259b35acdb75a3c3632b707e81f8c411e3eb0111f33644d6638a04405939c4fd3cf27750b44e3f83d2c152f9a89aff00ce0fdc1c88f11e6d8f24930acff10e64e6403517d4bd6433164c993efb83f201cc5f0ffd004dfb84b3cb8d9c97bf3c340ad6f40b521425284437fdc211c38a9adf6907d5b70a3cbf221703fa260c8a2a6bf1a1982248b351b9b05effa16349697856580463ad846c71d4506be5a0f6f78bbd363514c750fdfb20d6a359b9431c190453827e7b0e9b1aa9b3ecb89a090b013e44a71632a40d93fa1755a8f1aa2cda879885cb7a7ec5b4dfd2aa814e8b9a6c468ee0eb3c34d424fc9277d639f0b10aba469005209d7e0ec0959c4717eff898beb9a60cde5dfac62d7fa6861a225f7ac99a1002a3b4dca0ab1d46d2dc21a8607c1809d4a23c4b8b263b266424d9493ee474a10e6399f21e1a97a33d31e83078adfe59824a4f70a1308656339a4fbf0e57fe1e8f66a95d0eaa9538cf1af70255841369e91189fb1be9cfcf6d3c0ddf639ef892e16b1c92c48421a9ab8f7f47d55cafe5c03cd274c0275faa206eb92a6e18dae27d4fff225a71c63ec71a14418a6caee806c16092ac5d5c8f813f4a863d7a5af85eaaa9ec4ca111eba6f13987b1d381ffa17544bcf091ecb3e22fa2f18c2ed264e7ca208f85c9d66c53fcf66fff859cfa72e4158f2a463ca98699cc0bb32fba1b56c4d2d25a059bd22f9147e874eb160cf60488bc5ac87c88d8ace74ffde370a91a5d2f0d84e2ed5faeae31eb264cc8e59ba22f8d1e6ec653f661b2bf2852d67674eac8246fdc1bf33fff272c1acc41fb605a4d5d603e8cf6743465f2abe742ef3fc1aef703ee454cfcd70d299425d52b2e840349f1cfaf5365ca1ef98669010371a2c1f37a314f2b35a74614ad92cb424985290698dcdf409270145a6d20c965fc672efb2113b250d5a421459d9b41c769fb4d42532c88de5a78cae0a1b8837b88bab0275d38bf1e09989008b64310834e1f9f960f74691a8f7fcb967a61d83cb66b90886bef85f67b44a812c0e031495392dbd2286ad2b455f577976949babb49c117872a240c8106129ffaebd749886b3c193b5fbc6aeab92ffe8c6de5ecf1902646a7b2211600d9185852d096319f21b6552d5eb9d9aabcf8127ae7f60f8ec2ee14f603b6f1e29879c3b6af2f1779134a4df41ff2fba2fb7573bdaefedc9d4f6ecff1812f4ffbb5e897c04610574870743e354e3588b3a2ddd5c13bf8c6a1b392f0cc7ab88da8d2ce73d1cf3d1a8033868bb907ebd1392b8a144758587f5f65b7bdc41a0ab0633ad121fe5843a0ae25856af446af58ff5d8b7f32114fd567f7e353e67d650cc660474ade9dfef3dd22b7a4285cb3de761f86fbcc0a7f458cf6a8dc483e6edba86f3405b12ecc43c204546c26811165e3063a32374ca12fd514ff8a8f81be72449217ae43188243a009a4793bb1d78b572595cc15128f98cfb29d827269c93c160306054c422fe74e8d1c718fc722e18b05ab07f46f32bbeff7cc38db620c335cb154d3c0eadf8b2cd7289120ac34b618d4dc69abbf70a23fcdcf297103bbfb4dcca37af4fa15d02a387c4a86b480f2e12433a75f28cdbb85e014b5d756a82592df17de812edebe90bb25a3c0ff1b42b3232315cbe04bae780d9101e3606b7a0c7030e1868e68d9c02ed47191bb5a962d537bc4410018a1b59c00986aa7980c1f466410ad1435e88135b848aecd035f3b28ba2f4339324b9b24344ec1a238e5eb1fa1a222c0648e898d2418ea9795c52d814d3c15fcb2bbcf5c633eb6765b84073cfa6075e8cfb4834ad4ce3e8d082f87aef27a866da3eb7f3f583b5d20b7c16e7dc1f7471969e9f3c1af488b44766a3c60aeadf4516f2faa8dab2c91739d7b7636bf76a2a6f3c1090bb7d723ac0888731577f92d57eff20ba8885204dc944c33f733431a6e1b4bfb941d777d7c39bdbfb5d184a5413a8444ef2c52683b7b526941eda168cc12542d0d60fd30f4de48d702933e9713841262d1b9781844fbff8ea7c00df805c49d44d94f4ce4976aa933e00d2a5a1c500b9e98569d4d445691a080f82f8063d8e0389b92499526f8ce4f294707e9385cd148bd0ac66d08b4a4338d7700f0aac29a5273bcf5a9c2f324ba8b92bcaa3e9533e4f41746534ef74afc3d2e0b7d8fb1c3fe96efb75a4738720e2e60886ceeacc11747402714a27918edf02d378815151d658e14bbcd183d78b4ce296fd770e78859b4ed46cdf3720fbdb06450cdaabbf12e277b34ed3cc66dbebf867c28ca3f14242d5e5197ec7141f949200a90f1c0631887180d7a442e403dbd2326398cd183ba9d2749fa7e7bc6779baf7161879a93f53fab17884e119333dccf5e23d9adf64661bc1193d2326cf2945ba58105b927be9e3b9f78b40a3802d6a3c9c59fe749a372d3523817603b0b834ca9af9d35b7abff6f0c7faa4b5b389bc1e16672fa320019d956418382bd6e443f527256cf83af054ce023fd4578c8f4314678b438e2877ec4c7174833290bd1c11b8e4d86bb6c4942fc1c31d841a3b684ff6fb5010431b05ff631f65c3d3a68ad77ede52bf796a12a47b3408f34a8cc8bf50bcb52517a6eeee7b0491ae3d20b723d370b9dd42b581f717adc2dc1dd4bbab37bc09b2bd183797f575cadc4e17870486b9067ce1c705b1132c1b52d6f3d65c3589083f26fb513d34d3b2dc57f3da492f543438aed1987a1be5561556dbed139c6028fe1a22dfe8b69ad98eaf7d160320be044326144ed2b03cc7c1028773bfbc3c4ab0d19514932f099b629d680bc5bb150be7c4133d3830e37b1606f1784a7a2985bc4a1587c106aada37f1a082f0f7f1c3bb0b92acaa297fe328ea0358913b26a4fe240d5f235396d62da81a4384002725be14f5eeaa8db7ba04bfafb47cfd4422d4e7d5c0b631bb69549b3805ec74997a9caa53bf99dc0de471bb6f628f11d4c7d53ddcc650ab703d18e2044ca85fa367e06dff3715c97cc87f1aaad32fa324c1f21e3c85078889ffee32c54631036756e22e9c3ee7730bd8d6bdd6e4422ab099d274fee1545e3dcda279fe57ecdea004c2933964e9e008eeee551f2c0d2353f90b916ef3dc22a2211581ade9e7ea50f632a4e965f581a6f7d3a767e1fedd037e4f83a4b0f20c8096e9322a16e30653f5c9d419e32e86621186294ecb36bc55bf21d99289a15e52a5e3051db8ad0245ffc0bdda3b6aa42a7a3d8f37cca5712537bc92118529216c4f052b99f5b09bc344ce80fe466d56181928c50d0a859d159ed1de7fb624bf8ba731ee6e382fa850ad49619de1b88f2df5f03ed1b29334c378f218166b8eb56a7dfff5d8ebea880775eab0ab3032791231fd03577d2b36ae180941a43d0468e63ed451211fc112df00291e97f5c9c705368da841f47213d91a645d1c80b7eb90058b99e2871030efbb557af1e8771c53a29dc07613cf54b5ab3244875c2b3a42d8f4fec49027275d840ff24ab0e25a59cd5c3deefdbc4527206986a22d41267dc3cfb0c84b777e7491412873be1b2c4b079e81a7ba831ef8118deb35c2a40c09bcd319e93c0bb2a46a4674457662a66d2dfa13da463e6e9f5fd49791bc5efceb21ab19edf94a32b28ec47e4040ab98366de9ae70521244aef6d88a822ca7fcb5a3761cbb0b8f1d65a292a869eff77e1c2b99275ff9602bc2fda3118eb96f8f686abcd924852cd2331784d1142514ebee13dedb2e142de64e72c4b1d00028c5902662678c68ad12813efc7ba7984fe3f526fcefd8ed41ac7171dfd14a9565b14eaeaf508ca50985c4947e2ef76d06b98c2ea2f850b25518dd56c2d58141c3532e584327115e2c2d5e2a6e64732a3237a9c5853eb44d83f24bc8fca638c980e639d37624e4de9834ee0710b1566b41af3526736f06546273e4d54be154f143e68b82cae22313ce771b46d26e3dc00812f487f6b297d3866697a693d2dfd8704675d7eb3c2c5d7435c70c8cf01efdf75782370814d3908745b2cdcc9cbeef40dad2b154a58f57e0208617d6ad950128f112b5373097063e10a76d78f93913a6f37d395e06b3b84326d379db7272a5734006a954c558364079a90dc866a6c6a11e9ddd44418e0fc6c3c42e7b7b1bfe794c33be25a1a244c8b0bdb8d7ae6ecb2f57ede6257e15219bd1a89db3bd02db2cbdf5bec59f9e86140abc8108c631453af92a57cfbed629d548c9e54e84bb7f95ddafbae97ede57a5b528a13be2aabe0c00580b5c0bb4b9ff1f1bfee28f7d89dbb71e0b9ebdd53d9595551323cbf7512703c78944b0714e59a70053aae30389e4ea0587d838859c36ea725ca28b67ce98d7a1e606edb060d8e32d89c942117ea1a46fdfa426d40ce4b404e33cd3612cb6786ce12f98b82e155697917e99630bd62f9c752a1733595eb8dc5d22e2722f6ab24f3c2d3b3aa195ed9412d705ee9be64f64d9f734df03f47838a665d7dafea6ec3e5bf4a2f4d88d20e5e95542337f7cadeeae80debb36ac99ccae2bbf1c65ddc86696068323dba858ff2cb935a2e88138c80c6e9450fbd957741557c7e8437e0b9da0cb374e9dab5e9b53d129af70ca3def0576dbd6eae44589bb1c0ca3505bbaa41c75e8b69d3ef668988e2b9dae1285422b1dcfb9534338ff90fa9605222159fbe388c5caa887ead2b0d683a1ff4a70250e4586f1a856be8c38d7a67b1215d8f97529718745eb7adcf5255f92641489917ec52cc9d8d4bc39bd597794677ebdb96c616fd0196c83ec6a2cc308d9fea794877940c9e1862dc8a29d54f0f2db631222b2cb2c059a0ff04e7baec2170017fb264c1bdcb01efcbe6dfd741619dce2a1c3e5b289fa8f1e385a7ce302ac6d9f7e28be683364680977851233b1a6a3df727f6920e2a07b2733c5a943f7cf26a7d5de44f42ba6b28004c71c2077ab9d64bc15d7c5e83c3a93b6a30b48bc9d95f5dd49e9c6744dcdf992a411b97e485eb6a1190d1221bf113e96aacbd5f3664990106b607bdfd8e646246e6be37fa0b40b58918f7e3b20a933c1b8fe85322e0200357d4295c83de324ddff09c82c9fcbb9dd4bda73a22ecbcd25777afd89bfa990421b93d5adaa8e2a0c41195eb85cfad21df77721d3bcbee8b353392f8d28cb2fbfbbcf078d076093678d87ae0169425eb49d37ee7acd9dbb5be1f08bdac4a2cdca6e45b43b1dd08fc7cc38c5f26bcbef53efe518736a039fa1131bec2a60004488d52a99cadb72de9f57b47a793dfb5347431aa6b7bdcda76dc244e42b6172b248dc55541d9b521802f4267b2acd93990c5917f7ee4e878f935ab551e47d9f410919be68528e627905135775f45061c64f6e669a86d078595d2251b8d2b9e5ccc25d3b693d52c6e8da4f9625fc80253236debce3e3436c0fb1683e06e6bb849acbbdf46e470cf41677d395154dc93e46de7d0f0405c2516f8c926005901d191826ac871b263a48ecab50ab675092fc2bf5f343a80836c6d053977aa527866fc44a647f8c124c7e1cf4b77082a203ccae7e7606846d547d6e236cddb67de5827f3c7892d0dd871edd2ca3d242b35e77eb815cc98a56cd0c65f4bfcd69979a8f6cdacc8991cda57d8636633f25075812b6f8fe345278fa3d71dbaf1b3058208da3ab9b45b23cb83c0eab7c78ec4d42ca64918aa0b23766d9adfa9eb284a828d90ac7f779da341fdc26a179de6c7d3ce7e62842f168a1cbeb1926099c8b8c4a07c251389c44360fc5d72c0501d2836c49f0830f72d09b16e6d6f19237ab2af4678c338df9e0a89f0d34bb0658f90954e5f52b6d751126c584fe64a9f32790eb942869f5f009492e68c175bd4ef5b149c2df2a71db6573cdeec55ce5d785abf65b45f7fcd35e5c9690f5d77a94db35066355dc856f3b9e7cf392c3d817829d6fbce290494d069eb61362b06c9394da661eb6af53a156fe8f06257090e358c30db3dbd6d4687c571f659f41a4d4fd82e2cb71714dae98309b9a46b5737019332490fd4f4d4687ce19023fd71454771c2c7251b59d42ed2bcb1e0f9d6a9d42009c9e7cee8e039edcc216544ba495c8bf58e961e5c2891d2e1f6216fcde0db32350989e0c803e647530dc7955d7b6711fb19a229a243f31ae3562dfbd7426aeab5b94c3204aa6075661321312bd8470ba1a10c72bb0eb696e3fbe4d05a0d53dda6a8d109e7a1e0006bfba6d2f1710417f9357527b673b55f064b5235a38bae70732caec30ac086780a54914171b1f9ba4d928c73c9f657fa06b82a1a7a827296d94b0dfa5f90d16c8f5e48ea39405a381459159621490c66c100918ac0bf964973bbde9c0dff4682a2521ad6c884c19733aa1e98c0c4859797234f4ea32e7d8008c8d2772ca9c1a608f0588f6c1ea6a29c1af8fcc24e578bb9e4f9c61a98a76e1e145ef0b07ae594145af38ce0fe38b932d6e267daf1002e051b17c19a3763b43b88ff65a6f03034c905f3f63878c54d1caa37e257b4b8c5833b08c9c288e6511d7dbd864b6c5fae11c7ac6ad25193688fb28416be0c561e8cf8075f12ce94021d7a03f9459658011706aa162122181a8aa8cf0bbe1b9f2ce43b66679f6219c549e18c74667abc8ea409ae50834089b2d5245f9b6c3771185f056792b4655d4ee6f7125e40a056501535c7c27e799b390c24ad98e80f303964924624fe316deb4ce3e0f6970c4b42bd31f50a078a2c3409fac4ec580d3677cb0149730d5f0da107ca9e465cde0f043ab5dad3cab472177645001e578ce65a45db05af31b265d0fe95eb4c0c7de020eaa9a53d06120493a9aea919e0048acb5f78df842932ead869213a82837e377a3e29d919d3808e28111291f2c90e3b8cfeabcd8ba2906ce41eb6bd532090017457f1d535b8060f6b713acb883ccfdc4a6625794c0b476e2066001898f13682dc5aa69d3b9e962ef6c653d8347488b5537c1f0e7c9750a1294bcfea4b8b99742d8614527665bff175b4251a9310daa52800289e5c7905f36c49bf0bcbc6cac235875ceb658c96c6d24106c3e738f2f31d6b74d354cbfd4ab1d4351e9186fed5d9551e509c8ad944ba22398a546432cd2a8d8b3bfcd94df91709e2ea73c4d3e46ffce00d962be951b5051e72a6f78f11eaeb8d06121235f83916a0cbbac3144470425b4794ebb058e95ce012402fb7e0851ad44460906942dca82a543466fcd6dfe7b33a75a39759eafa981abfb014340c7d4b5f4d6a4d8f0142a94fcb97c1a49776ca7c0566b030e3c939f9e519117957b2f55dbb7a14a3f04513181b87d97d1f78e976220197f17714b86e746e306b5a41ddbf98225534eaf721ca861eb3e2d344cc10d1a3912650ab86bc834fa62c8828cec40a33c0d8bd2cc927f0ebbb076bc9d9b9a53ba51b63e02ad9993a3a9196cd01b5d26cfbd08d2e20462ca883f04a435c7836328a8a8b432375b8bbdce2d5a5c91c5d00eefeecb39cfd78cae3b7efac82e74dd2efcb2c073990521d76a715771f38eb36e64ac43ef4422d3e22c64c2bd9146ef3d53b9dcd5ff8ceb33cf59c7bf1c20c89be736d8e6829b21df5f7d75c38b455ab3b68c1ecaf8185792df8840a87ba2cb0a548b0c1f0447c9f04d5080815d4687566f4ec3e2b743fb007b36b5d3e773adfc65aa76b0baec39d2c085daf5d96c2489577613eafbdb237c8f0fc5e0c405bc90f2aa9e1f546c80653b30514bfbe0744debce36e30ec870a0398b603dbeffe5ab0251fcd85afadde3630902935bcde828f6ab680e8f50d22cd317eab4855ccb1b2280df4bd480276e00df1255c49d9d9d445a7a45b80d116c9a7b31bc48ba79c9a225160b34e8a2f862d5a2a722799c0a9c5a80514914b8961f325aaf968c107e6afe2f11f63bb362a485b37a405ec4f2e71b998e65d6dbbee2f715e224dbd8a15bddc7c149dfec0d8825358aa60908b3949021c1ffa2ac1080a36fd90abf838cb0e2713522dd9c4d55277e2bb058ad780ac02bce5a8b45f28d861ca4611d7d61b99bee636a118681450df131dbe705f0c04e5c73f9084d870a95d0ab2e5956b90334b3123e18fe8f4096662ba8301eab75d76de7694875b1e86be83eabcb9674918651688bbde110d89d9dd82a0c66215cdff43d8c566bdcb4807e2c30b0773459ec36ce4649343b38951c7a8d7617ae06e1eebd52a86144a7c15fac33651c8e33939e48834f95315a7605f0188458307f52a83b245fddab388aac43ce16543cf8282f51141c4339c737c618180e36629d4f28d6bc3fdf1af3077c74d82f296b8a25e9f54653620907e285da0f888d9adaa9356e7a6dde006ceed4eb2c65eacc089b17ce1c395f5c75fad4b4b2c18f4991908b2bfcc6efe1363f7b9c93c3c3d18a647052e1f914b2f1d7ceacdd101587a5748db4149322c16159a7a48151c9a85aa5efe1a8a8f8dec853ddd652698a2cf931602b764c77f2a24cb7ba5c4baaea301aef8fb3edecd0ac0d32d0cd5e076fe0660a0567b58d880bb6cc0dd25bedfed34a3f4a55e93256a8d55452f58e8d8c475189b2311881f0680ded5744ff56038a6dbf71f8e6bd2b0b79ce421b6a1d7d740481ee23253499d1b4108ad04db0c4bec91b08761563ed76a401b2273e71566623073462ab2a3d2a7c430a292f9189f8c6bf5056b0b663a9deed860c80227e994aa5d28c98cb9fca85ebc0362fb5c6e7574605d83a0b972c3efc39b49f7146d8bec8f78da44abe463bebbfe2e1f906c55dd033d2aa9360928bea6f08f21aaa6fc433129aba41407a28d0f3cf7e0b05418a926c0b659e93a71dfb72414a863f7c7f2e0a97fb2c9e21e37958eaf3eed1e7d538795c659b97141fad9440204b0689f03d58fa4474470bafce123d402693457681bd813f9d0f81fde052918780c4807e2edfa91b5ec66277a3bf8ca38a4a8e7efc4e9142c06b64820348862eab1e617086fe877f13cd540b9c1afc7ebb06f6d69c89705cd1e810943ff2f8b4c2111562708236f90a2f241d66fd9d5843693db68c09954f164936bbcc77d5410d5c76cc9083cb51e12b85e964c08f3b2e45b64bce5e68c7f025b2fd147803a3814fd209bdea864c2a1ac0fd869461a0c4d02ceff45440cd070e461b391fd1265d6e866db816f81c0c1c5c818b29b05ee1f0a40b50ed5b38bac5cc8e73afd631e532e8cd8b91ec45eb86d449e07c4aedc9697ba0f4180599aa5b19a80c0a3ee5f6be8d149e4128eff90c6c14124334f0cd5fbcf87226f55b52ea00d5a74ae4efd7736859436aeb9c9848e97d52c8e8144d9487ce28497236c10999d52bfb0e4314395b03a0594fa494bd6217df6ce687f9007f53b62c7557a846b47fd4116926a756e9fa8cc1a24e639b5a847aeaf5d77a2891fa0876e755ffdf233c849b5f884fa51d5d634582637f1a3e34486bbd354208c489c65576d82e09377798409a35aea8558df0b2cd659b1770086f7a3717263b444d040fff1a33dc94c4ac932733a0d21ab215ee8f46e1e01bd0ea2af3f3312aa7cdc660ec2620c3447a70260e765e19b9affc74b299a3ac198418c21ff7eb9849a5deba56b5bcfc261183c3cd871b869f1b69b245676844fd6a131ea1d88188a2e4cee87392c8032f54717f8aae245704709668a59baa49d17f766ee0b2a096d15a686dc50d2cbfccd143e793c127effb79050f0366af676493b70ab72be57af7e64909c26173111a5d14d2910e84d631146c89ddd69104a8b296a9fd6ca0274e5198b112f51ada06b9e84f65df13e262cdc03ad80b3aafff3d80378e28ee3a14605e310f6a43a7d47de32c561de31c6e0ac9bc15cd07d2b103deaf27bc1286193201a453a5b646fb81d95d23f999bd0cf67a91cbb9487cefc7fbd7f9aa6df784782be4819e76b9be54d35903a5639503bf7921b84b7e48e5c56f181320540f94ab80b9d12a545bc63e7f40f7105841d252e3e6bb3416d46ff516e91a139f20592afdf3f294a8fa93badc14067f0c77612abf118ca4e916d3e656740ef9d5ace2a3ab6c62d474a5b88b5e3b74888e2792a50ca7c8d7d40bad128d5ab1b9ca0b6fa50c8bedb0b770c59f21dbf62bb71e4fdf712fc5152bd33b553ddd8e30c7664a2dfb715117270bc5974343ff883ea3de28cf7a4b509e88bf527ae4065eabc9aac1a832eb615d2a10972c6f110f37fcfa8a2724323fbfda6d816cbfa1da5537f5e58db2c7d418a4bfec01510bedecc68649ddce7495589cd5ed7a85a2175eb135e32a667afa148bb0aa5cc8eebbdb124f00c46a4399c1c10c3e68b0d79e8687366e27af089e3406a8eee0734171cb2e9dcbc6790353153d9f22003af0ecbcddcadec1f8e08ca4ea99589b05755ecba1b575c21260aef26033f37539070b4520ca679bd4fd8a4d1672e653761a28f0949c2b09db7dcc7888d8e8ebea84c67259c0b5b044521d162e38c9d7d6672e8129bc33ebc06b93bafb20481c00e107e7f3e0534c52330259c0644eefc978db760e0b31cbbf8b93c1aa4d84c6abe4448bc009b332287ab9e1081cdd3442c92575f7acf52b3e1bd005517a9fb36c82be3757d874dd24ad652e36580204608434ae762f66ed3b67cb7d22745c5034e74ab25fbb754c90ad217500f7774406c266691631c88890b650408835e5807e3f6480140d353489654719d1ee9d47d0db06db45c575bf220ebe2935c653a9ea299c9b5047ac3be68bfe84865bdc7c43ad94f81d4fc450896dd159e2ed954ae8c7dcc5ba612778ca447072fef84964062533ca3e11a4b64e37887a456ad353f6667cb6086fe0e01c8f5c1f19dec189d8a00b0621c4d0a83d54d8a97a7a9508031f8d5aedaeb5f323ae57417f2a94fb86d1bb8b8470b078fa58980586a5862dc5148f9b977eb86ef6a19263ae4a405924465360837756feadce1bca68afc70d2647781a0cfa60bdd4d5523a9b68e55817d9624ad7a5aa7f9e1ecbaa49b8bdfec64620da54368c7c759b02213e16ec4f5699e942f7ca73e503f73d976b9fd8026e2d5db20be63d3ab21169419304181ca86b75dea0f87a47616898ed5e1e8f05f542a1d005c05cba530b2141ef97755632558d3d9226e2354d4bf3f605bd7d2c2bc8a431b2d9b5accab65180a5d6e2641fa0c6d8d27f8a1364cf88a3f95673492354d9dbd90ab5438e2e11e75bfca54aaf0cc96b430ce72fd2dc5886cca004a82fc0d325baa21ef592e63b217a1d64a50c912d9d893d5787d7515728160e68937063a842bab8b06e1c990c4815d1d73eb60211b717166f4c4eb916b652ec38035bdf6dd9b4b8dfbc9de895d80525752be51d952214145a9bc5eff82f92fb7af840750fe8fbb6a017e82a12c6bdea153f3d963e8edce4b300680373a3b2dc3b12f7d03a0c9aaf955dfb56636a3b184301e4d21ab7f79014948db766aaa6656fc7bf07d06967c9eb70aa968f9c28a6c7e80d39ebbdbca8e11d34910f6f82cc3aa02fd1c308fb956c1d766f313af5079909a8709479173e846838bd74fe0ce02eea0569626575ecc307e4ee3869756009a5aa7f2a124bcabe5d3d1f27b595755d889f85455d9f89a2626f00d2c46c88a316d156e793494130a784ff25c5eb600a8d9f49b63104361833cb049ca2aff110f91a54c08547379afa872740742bd3016671c695b28bdc051e949aaebca6f190a38f14c3acbd6eb391fd80374f79bc169b4bd3615d34bd24d58603e07b0c10367c60923de0e69e5508a6c74a89ea03b964103e84fca9f42dcdc546bd9a0091edf4ce5cf90c038fad627dd85a143be545e0b17d3f9e1e2892ec510078fd262ad54feac20b45c8e8feccf15fed6c8911dabe2647267400e9c3804dbd82209e7ac6515eccf8c56c6c5a2312f0324ad58ff5ec2811269d0a4bf0333d1eb44bda14d50021707a11e749d15fbff8033a2e5d0c1d3365c6fe0af610b3f6b8badffd205b3163e2728cb70e7e73b4b9ad1924938e30a290a3d07061407c940e7811e6c0eb1d37a4b45090cbcfc8f8ff2a18cd9966634835e7f109ef5d729b32b05c939153dd8fee600f22b864b854508257d44ea66b2f166359907e96da1b776c6fb9b24c0c9fa93ecedf24a5d82df3b173a8de510069435231bdc11101d0a8a5eb973334229cfab615c86d0b4e204f3a9bc1e798db1204527bb1a5630c920047e0fb26cffa545e2dcb4efc6fad2186ac7208a8ef0dae49cf069568ee00d072b8fc6173f6bb3f4fe058acab928c4e8829bc7bbbed6cc572a559fd7a7c7438799bfa792d7699d92e03a3a57b6d97edd8e914825933b73df56fc74ea4da95e9c4906cda689f9ef3642e728488d3d92aec5a5dd0aab76b3b165b15d758c4415d9b6eac8c9b4ae5da7fdb8822bb84b7decb39aa8c4384f9139e3ccafafb5e74ca28cae0ad5800950c3f872eaa568b5cc1376333ad4085ea5f6d3d3ac3d81b879c3eea981e70128af94d7675170458d079cd1d62bc6952a5e454678256a9197a696a453e5eddf98c3c765d04716a874279b2462775873917d99d954d16a87ce4712ada48a94af22c5a6b0b9f37224608826fab59962586da9d52f59b724c48a85727a28ae045304ee699654d82096b44fecd3b8791aeb6ea864269d1f898009a5c4b95979a2ccea5bec87a342169ea485cf787d52627c06f72e3fa35a590fea40303bbe40992cbe571476e551bac8c256ac81b3c3e1b213fac7c6dc233b88ccd6479bf9ad798091e42b1bdb84bee120bd64de4f047ea95750dbb7e088e9b94b000af4fbc804c9cbb8d6cd5cba155a5449405c14f548fa212378326e76f369a16cd6fc5b4462ba1b4d984f2859e3f1a4f05501d352ff9027f2a89e0bd0f420d3baa3d32f5d19a9d0d0ecb57e0cdd624133b03fe0b643e262c688e7d3a78edeea12f7d394bce24152b89b7358326d992599b211e87965afdf173e6ae7ef8d2b84cd2b115694b7034082b77eff4395638922224fc05ea11562b435998bc422abe506ec033554ed0d344469d495a675615c8aa93447e01a7dd95c72e00dc4f7790f5620c0c3373675d16e59f79393279d4a5037cc2547b450c6075b6f0d832d99b9e94ad47598de8bbbc127fa0e01379df43cf49576e2fa280f842defec0b4d1fe29619bd72709adbf57eb630fec78365f1350b12d2186066d6d2bd0e0b642520102f4aa76784652a412234a423fb2b0e198fa4fa6c593f5030dcb22952eade8bea82f3cee0397fec74857d0a5d78498aaaa9413f16898b30520fcf12bb8af589a139b2ebc76a26b0eb77ba2ec91d7846afd6af4c4293a07e89ddb67707bb7e40a067db942d9cfc33f03dadf4101ee8192caad813658b8e1ac5f1658d38046b820adb333557e49f40d32f5e9bd1eca25af6faf62d2bc4b7b58100f4ca4511bf6d58103baf967d489c6b48741d392d8bde42796a13775d3b1514f1c199637c30955a36a350c452e0f7222ef486bb0011f4d76f1c17f72aa3a532154192f8056e011237c3a876cf16eec61a47ea67aa672d0c626ba687e43c996e6554ccae3b4811e55e820b3eddd329778aaf28c20a8c6e508b609407f799f892cd7cdd37b1655180c33f71377041156111b12c1d4830227e853b9ef9c4bce2f1cf9c60286e89eba70ec0b63c0f2bb3d4474789bead26c6450e1c4f50d2c27a729b39da00ce8bbb4229e859146a0ec1d2a3803883c2bd2ce74a3a49377b6ab646b2fd5b83d21f815d0b388c20c736a4d1a76caa528a9081e6c06cf3fafb15efa75359e9c4e1ef4a25104115fd051be592cb69e7280147b0b267e72b146046676eebc201ee2836e810510a58eba044ef6fde41517f1593891f7f29acdaa3da38085dea2bc0abdcaabb4a7b061ffed36d6bb0134c441330f2f5f35e90941e997aebc13905c2aebd4d47f8b1073fea9f7a9ade70eed6c04cc0136945fbb8c6e5bc48c5c5dbbb63ae6acb2f080659225efdfa37f24d7c2b0565ff074c8ff32a5c65f7bd189dfac108f3a794c88d0e97e91d7ba455f877453754dbada3f2621e3adb20f6a189e2af0ac6b0e441e030004a91bcada37293855750b5e25df6168f5d04f72d80f987fc74484c6e404149f6075269efdd1a32842b6c323a581e0d3e7b3c17e47e0131d3efb4a62dd02bd0d597abaae9e87fc98ff1ba313e103692cd2dba7566787db707f3f544e50410375a2305013622e2e5618f1aceddfc646f88be98a8b4d5bb45acee1019a0d1553f8c4c0be5bf9912572b397b0f2273d7ca1381fd860ad18bdd1eaf9df9154d01cdc679aa903084f3870820fd19bf65c456970627073595a2f76498fbe9d6629711a01a1c501c9708ef2e363fbbe789d96f2381570718b1c00f6821ce7f01488b6140a5080f6cbe8b3ae646dbbcc726f2690b963a84e594250020529aafb5c6327f661d559895d894626444b50e0841a25ee7500fa55882a854badd7510f08c67f1616cb718022b9e1742142b1a5369b43e7dc1c977df19323cab161bad5fb5e87fd5aa29ee383a6fc832efef18fe5ba3800f18231b0ece7d7ca8dac74bf2e3b4b82b6b17743f60afec73cf1013d4def49bef87d51d02d6e833de332ca29b703d40b95a2b57d652519ddca98008b396a189b07c80357cfae17187c4f238dc3629776fec156fbb91a11c743fa144154b28917ff6a8d06b4026fc1005a8a870f6beaa00944109c4753c37bbfd0a5ee963e651e3d37263c00affb5b865d2d7d0cb1fb5024169a17ace2a1cd839d5641eb27381ba9ed4a712ea6f2195ecc8fad100a8a9f3b772d6c58b9a305828e6f49abaeba1f33bdf703a5be0b27cc3376c3019b92d1329328574a5f615749ec7da8aa42d76fb2911eeb9275c27e895c727da99d962f88af857a9be7dfc64c4aa28a4825211e04bfacb228a147957623c00efec5f50f85d304cf3894946479de199173e790efb04fa796a5bb052f5d37bfc4f0af4c9e4cf722cbcb33fa1130c416aeb36b175a82e3f3a0e92dd8da04f5110e1ae4061bdcd0c255da589c8e79202e8f0827ebb2c0821a974a84a1f816e54d10e141cd74ef83956d6a46855835fec8d65a5b16986ee96ca5604683e0f0344b0feb64102b72e1853bd58eb27563a213db14fc1d1f4deee98ea7feea17663acdc01c6155066357ee554ecc57fffa62fc7aaa3de44d63a433502032002b301086d9ec8d49df151c86ada731d885ea5d1eade7458fbbc69ff14098004537bbbcbefe8a42cc6fce9119f3b657651bfce8f8f94979c97673fabc68f5747ef8c3d6c3ba1c2e2a1fc0ce32babe41cbedc0ee2e7ff6af787720487c2d2e6b150d39b93dda746e4f2532ce58bfb5d00221c537a6b733dd8ad32599ea7e7579fa9d39abd739106b19be163cac476cb76d52d64b86eae9d1b0998e12dd99fb1293ee6d75cdff3bc73370f84c05e43b428f3c42df61bd7487cc8893b3c3c2606bc13b51ec20daf890646994390fecf023d3eb294c71a04d23a997c45a50210847e280f7af8c862a6927487edc78ce1aec9d940b9e839a60b72ec757ead1774fd663f956266249913314f7294396986b586879f76edef17e9c4f2af19fa9370bde9143b9dec3622fd7051337fe7c72d78718e5ba1a1462412d1275d2c9c87e53fcd8c9020e876ca41fe7ad398412b05cda43713fb27971b7e22dc40022f898f75a599e63e23a8ac9849286cdb7c348509739cff90773b0d278e371cc668990d3c10933f69c2c0ae20483e7b4b78fbe26bd5bd3398ec19ce14bf899d33792bed4358ead62222f6097c92091f16197d27fa911206dc5472e961dd863be71627344900d8d59b79310250098e38f3e535e824213a7569c0e0e5c02b3ec1262009d17cf7c68bb32810c18468a4319d2904604f4c26c6dbb7ee1daf35a42ca3e6f4c6c876d965d4fad402af4b1147a65fe97a8a3841bcee4b57cfac230676e7733b39f64eea47439587c1c7abf10c5aad21c674409afeba2471db92032fccca20885ec199bae40e5a31fbeb1aa04126857d0f709b223f8deabfda2334f5740e7464e553f80e94becd70d0c7f330b7274cb83ca7a0df37c41d6e9dc5cde4152f9750ce4dbb33701e8914549ae449313e738eb0711d482a5937a903abd3eac91adc52a6ba293149ddcdaeb108a946adeb81e0bf27384dda961bbc1cf8b69e77c9ea64824fc303213a8156baa0d1ac5bcf72a0f4d06657e0f336fc269f6009c5db5c467a890ea6c6973aacf707708a1cdec04972fab274d4fc16ad6554e030106dc1b439c92440b2f2ce4fa80aabdb0ef5a462e96e57b241b6803eabd0d0dcb7ed3f4d04a74710ec4ca9657e519ff9d38133dbb84c6baa2de9ed67978cb0b5b5316a4cd2a01fca42b07f08e81682d42db019d6a19066222b096247d46aa8ce33bff5882a4e006410671c506990e188072532fbbd108708c520445ced6b139e4a10536106f1b0df75c1f75267261d8df6a15f251873e1c2fed8c8653a4ad761a2290aac4ace31ecd47003fa6eee23d95020745f1a598f4c1464330d219b6e34cfce9706e9154483d8792e2808cff8553fd9388b7dbdd0077febee53bb76fc5ffd2d2ee2f33d50499c75f30a14a21cab2590446bc12d9c3bb69b091767024596d6068b902f52f1841cb29b8ad62061ff435a717af2bb60612f6a43ecc91c5c6cc41d2d0b0ebcc4c6244b590600b522ecf6638e19ba79216d673e20278023f532b84007780a9a3536d05956fb5441181cae5828c9d6fb12357d655220fe2c534a2addec9b10ddd0c8fe8fd2f737c44409e256633fb75624717f5db64b093d9e788574a6a7afca3202b7fa1e3265f9ea031f2cf6c12a68153a69950079a4bf8f72140b0099455d238c0468cc91a359e77f6e6049dc08c9eaae04b026c05afb05475d4d715b27281b34bc34d854dccc454693a6450053f5fc7540f87f8cc543acb200b80c43c8ebf028f52f81e73ff369b05ef26a0551e52979870f1dfb6e2634b3797578aabbc04f5ad71c720e256fd82d91de9258f04869013d9fed5d47689d197f944980277358d7eec6ccfa2ec1a07564e175cab481fd50bd4e828ff12a8345855f10d229b61b950402a83acc4cc5b17f1522d639c8a1ed6b9d3c3c92256dbfe0c3f5671e195646108c162278a85103345b8fcf3467e224bbf988357477368080a4bb21bbe5bc1eefc018a72dc1064b3a707731da6e426fc120016cab503938dbe3894f31b1600afe0c40e9bc1d8aef04dfc92f444138151598c4163b47221cf39e82ca94d00d4cfc3602aeabc6ca3939a5c29c3153d635d449438e2271448c3378cbf97287c1d84b2de2558b1acb7a34c3e3fdf1fbbf4ab92289e691ca50bb54e320b15e0397a24a87fb63ef8c3828473b681fcdc9a3eb98018edf606a8b2974787091a4ece2a9aad02800f457a7f9ed8f918c398cd5da7a32eb7299b4667a58a4558f146203186d7ab4137ea4f9c01ba743e61289781927ee880d5f00f9ad91e85257017713c0faa03979667a87f46a3259103a433c4b3f1672bc230df27ae7da647c12778d6d27357bee0f812d5c3c9e24b32f12e50125fe38d30b4272f1715f2f44159b878560efd4acab7201da71f65f3ba5862c556f5137ffada20680cd628762e0fb30a4d36c64c845f6ac4e07bec3e8b90923b6881bda4963d1066609d5684f8ab58d466835ace5ef4ecb2c622629d36b029b3544c48d9560f68751355884456625f18be73b93427d0e698cc16f24860ec70303645823f9136f44761ca8c18cb5dd28163f374746c5e2ef526782a836a80cdc1fda37ac1495575128427e840dcaffea8fd35e36af1fd7363db549e4a6eb6788b50ce158dccbaeb382dbf5bb446214dca08a287446ec3455e24243cd8e45211111239b866e07d50252617679bb7403e890aa9bd6cfac1547429c57be8dd5d6340fbd869ce73a6fb0078fa725c2cc96ff3e525a0c5e286bf4fa3bead7aa98588aa8ae64e6d351f360f9faf7e14d7e4e552d765c8b17b0118ef5d1b4a1a7fbc39b80ae985b07784a1e63936787a1bb70e3f915bf0103f7a19df1c2221fc1a3b5381e0647324460872acbf4c9ec59dd796a794412c163c8294631e382d986e8f0d5bcf4de640a891b954b1316dd3f094014984e175acc715994f50e81a3ee2754a998167c86f712b5d5cdfb3550bdbbd4eff8f2c82e632c8e191219938e763722f0a359447012abda0f698e78f25b904cf1c0a17aeca2526c45659db8a3386cf4e18e57ba15630cd787688ae67ae6b921b33b2372efa9ef5ee7cd5e86bdaf243ec39e41df36ef8b624f81e13c540764b82e89157721d215c2bc763d7bb1a183e9791e9c6066b335b9d1fbd535e3ba35d025b42bd2ca3cab1143b9119e9fa480c879f31e9e1361a563a48e260f4fa54fd4940817573fcfa9fa8b409f0e35999d4bb6003b78334bd8a55cc9c9ffa1bdad87cdc8906f500dc3dc07fb52f4fd1522feb58b0b2468bc873b9e620ccc988c32f85dfc67dc499b692cf796d35b16f4f0858d82e53e49eb9d9f3b0f5b4581287918fbaa2bba98fc5678c69b80a345fe9d984a1b76d40910cea257e5c4fb29c73b76f03a1dd3192e4be8e775e80aeaed6e543178aa463d6e6abdd983b3eb65517d4ce6357af6f256d25e2c17679d03316c1b1b455e2c86847764924ea2612a5f6e44912a76ecf6785dd1e570a414c161e60d3515382516818bfda7fdd3cf969745529667a5d1f2c9d19afe4b58f3230ae2d916b1c70914fb067f7d199dbfc6ec4133488fa39ca97aba3c7503764134fa6519d26b1c53f2d423b51f34385c88d3380da141c107a41cda08cf4067e587cce8c12a1be23808cbd8e89c435433799358c9d2eea6eb91c17303433da944bb0eef58d361845d59ce9caa10dbdc5a4b30a601508a315d784caa670ef27ddf3063274ed4f6dbba3a5b64a2caa66904e6f622b69b4b721f9db79fcf1c84df71e60f9808fb9a14ef08d7fa18795a1693f122d915ef725522f41293d37bd8166b2052ebe06729e08cb55cea33ce64ff36b914b6e99b84835e1c9f73a3fb2df7fef55b98fa222f0a297b6d7453567f48b1719a4c791d61c5f2a255680b321e87c9de92e21a3a9bbc3f210b2bdffa4cb52fb9b16fd4cc2e29d2bdd2ed78478e93b8fb8f40728753253361c85e4dd0b64fd56dff23151b910aa2cffa735e08bff7186e6420b3dd200fe2683761f7e0fe062bcb794164fa920d752ed9b836860e9726cd488117ff5cd444da4ddff95751fab37e978cede8ab087ff9652c8a00d13a57699ca94622b75ac63a9bd02743065b3823aa6dc0d0fbd659683db6ed8a8973b57677eaad667f60d20b98d1072b75b67cfb44d379d222f68910d8084daf8840596df70f93c07f994f56edda8801b890ebd7b8d512aad2285ad37f41d4def1b2209081f56e539bd8289bffe69523220b058affa9adea61b42879e96ef2d3065f8022bc5a32d5e5397f61d232a0ceeab7410593fcf6b1b3325162bb61271e22b61272a1eeea260060c860ca6a29d12aa8d77ddc33f85f07fafff20ef08af9f2ea39514e70ce6c669894435d932880a68445e61a891efbcca23e4021b121d06d5e8f8c4c9ff804c24aca5d1e34bc30d68c93302335d1f00dca5e7b01644b023fbe34d2870f610f0449ad5af2cd77d972ad54d9a2e822c228c4e8a852cdcb20258f3ddaf77fb64bdd92764846db56f7432ee9cacee9329613e8637df26f34e9448023b8aa4355f38310bc8601a7431056494bfd7ecf069c29adb2f5e86aa0552497dc66d1d8172b153097063f5b61d5c5d367f3dfe808bd9b9c241f83802f8bf8e1973edda9ba707ab52405d6cf380b347f9ef9301611a24ac48276b9078d7e87dbcbdca1421baac125ef3ad9a5125048f259eaba567591f711a334ad8c8a483d4e1f4cbf1137189f28568aaf0a01fe8c76d0894ce2c24ae0ac6838ecb9f1b3f3aacf32d6be8cf8ccfa8d03de46bf83643c85e2eedaf6baed2d5ea064527928d3e86755ef3af5b382675f5fe1acb8e69ee643a7b74498c0c56fde4c4031623ba31b3811a0f04705bac4f41923ecfc7b748dcb9c1bc3cb9c967523716ebd49fb004d743e980fc4b84d883575b82433b122e279fae2cb2a65a6ba3a86f4ab95a3655aafea9bca41e9978f7cd963b95db16ba73eb0c0ed6f85f75ba68a19ff3e801d005dcbec45de753903843e01f64efaeaa224eeb32659e431c366f4fafea78b434061de6602598c8aa578dbe8e4bd57db1d0780c074bf4da69c489741f0eee5a17305611f5ab61e58bfee8a4b079ce270d6756535e59eebf36b0d652b302827bf77946689ed1c692afa8719d79a4b98d1f4c0f935a40e654ad6176f40e9f9397eedd1a693f326d8ca7b6122b72143de2b3b1f5f62eb21a9fb244860e27c56aded13f57e0ae1663f7def1e657c88ea369fc4df34407a0e9ccd97167aa378b92a9ddb4ae1ec6c2cc889c00447399823a9a2a3a9656f629f0b9e95586f78b21c6f2204463e5d1550d8c4ed000f5a365f70f6f505a4ab245ef474630b50efc80bfff36b5fbc40763c9bb416c800d2d3a11ccc5786e7fb9a56f9d9e884e1a99e1cd21790476867b2e126b7f9cd51c3fe3eeb2bdd790a8ad4c42f6d8db6ed75a4a83350cc0efa4659d82b97e5f6d03afeaf22f5918afa33f317eb5015266bddb42dddff4ca672f4d87cfe92e6528e50501ee51cc6ace84d9a1937d06ceddd0463e38a9fb4d6517651925b9d989404cfcdbfe374da0ed3ae2ab147c2791a01e8943549aafb51c2cd45200864eb76e4ff8bdbb77974c72b5a887af1c424d4fec2b2f5f4006cc74a48935e53d3a1fce3a912adefa9c853e91ac731554c90233f181f2c01e731853d56c45bd7724b1363b187b9c2dac5b335670a77c8c4176f948b599c11f9c43654ea10492f855c62543d750be9219033e6fe0d8fd4894a5d2d3a79aa3c4a5a06533735035b7113f68fc210c8e51fb25277c6726baf8fd6ac27607a047236adfff02183cd8ab5cd25d198f36efeb9ae95716b8bd9c726ef7d93040bebdd09264b8d8876a3e156d0c9f5676ba394502b47e70400a9aea74b4833daa4772ec9bbc465355ee5cd3be6d616d8bea607f04c26d7066423966eed4c62aac7b6b3e04ff76e4f7e806c667656a4229edbc34de582b490dfca7be44642d7b1b46b1e6d575e983a04a8527c93502b6b552111957ff9064010eb7cf32c19f525ad9cecf90573fa76f28a03d2cca8221371ac9aeb9efed332b0645356ec06de868b1823726fc8d67edf17911194f331276d5178c59e8f4dd2edc3c0536fe4eb11f81e33f37d24c74e2542e07a9f88482a579214753c0f26b90b02ec9f008b207410b102bd2dc5d844a0592618892eabcc9492ce8007d1da6e4433342804ba140ec104d92a9d651e97b09e20edd16a7c688ad22c4ba0b4a026bc393bf7608c376e887d72f50d9aebe99cbe113b5b71fb98127a0559d57baf4c26a19116d5d844281b350b4fc33fa2032cb95a2af493f795c110d7d4488282e1eaf5d025b9e6f1ba5a81ed1ebbedf19540185757f400f3c58377eaa4f308aac507662da922903f1dacd5f7b2821c534a77e09f9b3cfee864f32327746bb191385ffebaa0172f9a5427b41b53ec8001d0aa654b3a1073dcf62cbb0ffd04a05fad44fee80d593be7c37c9ac412e78e344a3134c1c0d743fd4b059e033edff5b236a207d7c45cb53551e39a4599a54418c307cd2bef03c89ed141e3f8f2047d8f787bcd38e3392720f84092fe2ef9c3a9b150eac5e9e00bc3fe6439f237db3b1101026bdb7a5e999342d87048605ec7a2413b52eb5f5e5af4833957735014e610ebb4cd2cc62f6f8832743c23bac373b32d4ac931b148b936a34fd84b22ed51a2a70fc1ad04191aed2a5fbcdd7b7a94b7b4fa6af502cbb6d10f2681712c2a0caabb0bb2e77336655ccd6422b8caad97c36d929af0bc7336507fbad0ba955b00efb5ee69b14157554ef3e519134c806b25c69ce04d3fd86b650cdb688903416b25d87dc7fc5271433c5a2eeb23aa853486d7a090a02cfce136671c33d9ba112c3795b2a41d8ed92afaa4cffee87d8dacb0e0c47bd97be36f65076f7c2103296a75f4ec5a9e0d86c0da71e0afbc08a87b2d54ab4ff15a037dc4c706617b267bed5bf3b899bdd4b4b3b2921f787ec95d61873d4d645b5b80d4fb99e305b7a5ecce4343b774fb16c8be5297813a7a1abf74ff355709c4159c35b3d51fc864579490fced79e3208d3c9ba72583e00c6955348567e1a9eaba5b65410547ea514b788d182be600e61748ebcac24451ec9ca0bbdb7438f17115c1d034d094605e45f32bed9216b7c05ae122f2937e7248a983fad97ddce38e3ca866391bbfca24c305714673635be1b181b17c65077df273f1cf2498b119a64cd26ad96a8d03cbaed1b913ae2a1e5d534862453692aa592be254dec1da43b876cd7de675fe4f4173d131879e6082fe94efc0795ebe4b6930a236ac734627a654d5517a03402aba6dad70215872f12c0674b55469237b55be72d93e02e8eb4eaabee5972e3caddab648f3bcb9f5011f6286d73f9710b598f8ac4b9195a5c52c1093658ccf52d57b8f5eb11684528c3ac2cbb9304888447c2161aa77948a25dacdcce4cfe9808ef52c3bb4bf2fc00efd859ddd301768eb400a1111203ee03a78c8266b9210e9bfab31722246ca47268a8ddb1a77396f02490d340107de87f39f2dc112ef86f3de04258c981374d2cbdb45adc358f1a36951d6f357a6e48d2e5506afffb93b8fbbcbc30b682e4f1df7ccf2658be69bd8850aa4b2fec44c1e8927e560d123a508fface554063045a35e9672414298520c4e3a4063280a23678b63eddc748954d8e0149c73b9d015821a9ca05b32be0099288e0bf62f56831f5a465dec4f0419a62c28237c7fc3defb70e597bf851492b49b2c27b605f1dc3180a5c8ad68d38138de9ca79f049b7e590556305e4197b60bdea383b6224cb5a09e29491538b209438e9bf681d148187ecb10581576a78b1380bf61a744aef498d12cdac76b9dbbbeee06afbf8fdad1a43398eee41fac812e0f5fbdaf9f0f69ff6bcf143bcf7fef49b064402a56f9da3e674a80d4ce1906046e9e19566e81b5d40254b908588081cd5c585b1521a0585db89f92c68d10b292a18df07442d474acb4e94879eb81508bb801b74feb82247a66bc1c0d479839ca88ef10eaf7d89a1b719901bb0ef1a2f71aa3d5badbb47f7e3b4491ec5c66235c45748c44c04c2a1bb56882a66b47199e9eb8fe16b16082a9228f46b0374798ad6370dc205525e20e939a5fd88efeff18a827f2dd5ac1595d77e91e162cdbc9475d17e6ab9f4d5d1c56c3d06e0111603d273b519f620a0a81df7e27a42435eec05c141c84566927babf39109722260b915c85697b9253ef2e2b8d1bed29ce0afcf352cbfcfa64867e65a2bfca64cd75e85091ad6c5d89dfbd76bd84b8f8d96e6b7d242bdad6e593d1f5a2b092b3d8ffc98b894c59c690376a8034b9ba50791f0db03147d550c13f8b65f6f340bbb1bf6ece159280a03e21fb3debb50be5648989e6ab706143f9fc5a94b93008530d30d1cb31ec63643e5380da632b7968dbdf7f3a7bf73dc2e3054c21bbff7667423e74bbf984f4f050307b32eebf420e281ef707d8e3162f95ac4d3c7c33d41bdac0db5167295003734ee5fbd8630529ddd20fa9517c6eab6fc19f46ae212e55e3107f77b030f3845486030bf45755ca33c0ea76fab5da3cca144370efa5841764e19073d13eeac3e0b87cc755e0a5469d02eaeb87352504ec7918c45ab377afe4b7f3233e514e73d97ca1cd1ad997e695e5d6256eb66937130748d5383a94b272fdaee7942487999d6d6419dc58c3314274776c7869a64b0da232fbeb411c88e26dd45b5ddbb0cbf9fc8fb64507b455b5bcdd3c53e8f283e05aeacf52619f7d92a46e88d9f0639e49ad17e78d9b14016ad58c530fe216191f1b63fcf4d1a31ad153edd730f85cec289d8b87c7f38af1033c3db468ee599ccc65c2e48b1b27fa6974ea82ebd0151c6debd315f8b8c3552f0defc9ddb7051bf99619482868ee1ca61bfe9894090bde08eb9655488e7792d897fffe1b029150528ee1c6d4110d06282ff4aef05ee656bc2bde169a73eced98a57d04f1ee6ed5f6a12a562ec492f5f7df5e586ba389ce8ff68f240e3754d158164d1feeff37eba73f3be1a75972c63893cfccae38a92b691c3944ceb4af3bdaf0d61c91b386b4a9e8e79c9ef98c4bb81523095d6f2aa05985cb2cd56060206af78608db71de2c68849af8902d9652d1a14a738e06ab227714707be7910a9a0ba1539637423e47e1935b9719bfda343968316248ebc57f1a8a3f88a74551a8e2734a10c50d7b608e4c1d53d82010c44b73b5cc5b214ae658e5af52d0ef26ee870a53941844407efe0c5c272d72d4b77715d7caa2465338f9f86d45aca43e0c8c8cb1803eb03f356731235aae7f356e3001de885f1bb9958f0502856d158389affb5bc2530d5df69b8f195b63a5111c902ddbeaba831dca4e8c8dc5c373a4ee7ff793cd94ad1d02dd19e6a5d391a4ff6334541d872be9c538fa9def7e8a226a61cee20466093b296ce59af1af6228df85ab99d15ea2be0f172a0052af8b2fc3890e5fc666c0e384d5fe0176e817b3c9e1d6acbb75fc1316bc985da72becaea3a3e11368fec2d60700162020b081a07f8661d36ac991f8a799a7c813f2f783b1501cbd29bd08f6811be3f72d61fe3e9392510a6a21becc98e5e3ad16af9a832838a43335bdc21e28d859880646164693717db6e223286dd85b6f5f24250432635add0efe468689e22573e8d4e219b09f5ec5f7bc058af37a55af54774c22972d401aa9552d15fff0fe455e557e62535971cf7dcee17276324bf25ce47948bec5a2be05ee3c2ba6daae52c8fab0d0edb558354180272114f1f26bcfa6e75e7ff9b423b54c8006d3af621295db9a6a760aed0bde50f02cec31b95b77cd1c5871e1a362172774bf8cf0a2e85428fcadbf745840f49eb7624538fa5cf200c442aae6550cd02403f7c7741513db61b0ef864a11a353ee9afcfd6a8e11da5b142af34d6ef24e44f273809ae38d617af1851cd3411c50c57bd91733d9377bf4a08e161f51d1eee8050b29080a5b4a2f301c9b5592eef8270031a5eb91a8dbbecfa5dd67ec715cdbdb1e316535b49f0734d5d7419948b386cd2b78f87c33459ec69a605f0ea36411ca7fc67c32f10cf2e9f0659aeaa820d83c6e19c2b8c5cd639d578c37db54d3107be22802c439c13d329447c57cbdb3d7889343c0dad70907ef5bdea3ad32824f9bb678cf50cbeeb3ee2f7f0810d2ca4850f905926093a613187aa488aa565088a70aa0f0fc31b076fe323771c9c1c1b2573e0d4c6a732a0094524738577306e9acc6b55cd9c4d2efb549ef4ac1403dfb4791f0e7f5e4532c998c84c613a886a84cff062ad4f9ecc3986d3abb1fab412ef265a4d3146717660a56e278007eb237eca9cd4673454d7676e041c20daba1a900dd237eb10587cfce23bf2e4c83d52e781713d270359ff4c0ef9390de769937c291f78e002f4ffee4371bb4b764ac3dbc3c776092f75b0e682b4e3f3b74ea232324786bdeb33dd349ae270cca7aa5c1fc717ee52ee92833e0a75efbeb39468acc5a71018bf4cceadd5a18874437071abe43d82101eadd22856767d29a558bce9e138bff24868d59c6f4d5d1e950d9ed9422ac5ec9c50310a4f5ef76e884bf081e61be0ca5f512d328de3e3b95c4c02e7ceee0103ce8bd1a3b02b4f25aa17e2bccff1fa74e86f58834cfac786da44bb5be765cd7f59ed4ec33b5daf6f3369f61fefbea67aab9a0f6a791a6bd1a9d51f60e77c6b22b460efe5c8d4e52c1b32d05d0b0db942b01dfbdaa0fc3766a6c7211a97a65c852609279120793154c0c68f4d055ea7e2f5fab66bfcd33d8b67d8ad1efaabc0e7b36108847103225df98c89ad32e29edd05536ae0ac7a1e6eee1d67772fe0e457477a5ebbd837a74f89e9a9f050b62e63be577292f4799e8376d8397a60f31f2b04aa081077bbe6ab90946650e6cf27f03a18c7054a9aa5c78ad336deb0935ecc4caf213cfa439f06a37f1ef0b1d792ea2e9ee39634f99128fd06285afcd45cbd98bf8779b00dba2ce5ca0e93cc1e38f02c47f24cf4ac6d04957e996d2cdf6aa902e31ae99da094175b7ffcef65b3acc70eacbead727540721b3c45d57a06fd7b3c8dfa4088ecd83771d77b79b3b005a19bfcdeda0ea88d34ca243a34c2f4d618f870edb4ea3d38ac4bfd4180e2c0a88f2f23e7f4a316751ef09281bee9cc6455424db9b90b8e9a6972a2ccf502b1711a73c467a3064db65a622a1dfefc8e929221dfd8a45c6403359c4c3db933545a0932e9a33254d37b4750f7b588128b3e4069bffe57b8d6fb5842fa5f705aac3a6892a94ecda807f1467d789ee735c97aae6e0f49aebf3db24a5dd7664bbac379dd124776986ac47b2eb0324aac810d5d566da55dc0d542441774023bc7cb5607d7ed8e41e471d58d1dfd755d77b64630240f0c8c4c74d54c73f4121c0a938b3202872fe2ed23e55147d69c1b6e9c21c706fd3aadf857655a7c3c8b1bb41ad129d822da897f966cd2e6a2538500552f2170065e02d51e8ca90623576b81d8ac2b8622f3ac5e69337c6664fd7dc0bad5885ab60516b73404c2b7c60f6d9fc9558ca40f6cc23066bd7aa5f1b1c4849057bfc928480eed062c962c52ad104ca70e328772e106f085e225198a7e4f9b05dbbd5f06791a3415eb2593bd84159ee158fac47c152ab053c6fc2e89761669e3fd08560b5edc36b868d77f7f295366504b619402e0a4eddce693b7d54b0be4bf61873dfc16d136fd050b4480c306ba19018a509efb7eab91def3ab7db4529b91e058b153952f8dd16cf15628dc8e0bdca6c8595b83c10466b68c5fc11baf6e2a92f6325382268bf5a9c7121821827bda3655d55fdffa25a0c566bfe3424af42f763d4d74d7d96d452cce70971fe39eae542b57f43f024dd53f1be25ff369f1a93df8428a90801c13d7b4492d30e41cde4f5866f9c694ce7488c9339f582f6c18cc68d1b83cee4f4f689efb4598d41e47763d42cf408ca4d760cc5f90eb89f69fa060d56a33a78bcd6120a8ffadf1f7bc00f88ba9d22e221e03063e16a447db19e43b3377edcb6a0bea27bd2b12c7c93d9570476b7dbe5cdec834602550e7f912f287158ea13a0aa5d548f36e6666551159ef7807c4e66caac63a07eeb4d8f2e15b7805925a2681c9a5a1e89dc590c60dfb42c5d5d0bb9c2751cf010c66782db3aaeabb931c45bda6982166e17dcd5ea992bc5b4520556ee79568489bad1640342acb1c52a6d29daa2fa1712875a1b76e7e3c7b6e4cb99b305cbcb0b0dbee58e332ef7a1883861a1993a7342e3b8f19fa7d319c49c5149b9af2a83a9ac381f2f2b5fc922d314d7e187a48fb2323a31b3d64f0db95572304711a1a37e8426bc29752aaf0d45a1635556d88f6050637cd2073477026c577827f228f563df6ecb241f8fa37dc8f09d0ee3b1fc37babf7a8fb089e8f87f52e8cb226e25179d37600c1fcc6140569fff5c470791dd257e3690185e773bd5fc5a5251de464859fb45177c79f881c8c9bf150b44dc961189b1f25680f4871361abd56f80fd0c2b13b4c8f2c0d21916859ea727b30222188c90856771861c6f0927a891ecdcbf8db25bed76a39711ab80931459db85315fd59ea59fd502967a13b46a26b77e23742cb7a750510ed5025ca09a2dafff0864c69a0fd2cfb9d2a477a6139dabe307cd51044b5214c09efb124c8217574271eaf5d46ad80f2ada8285d3048a521f6ab4ab82867ccca208a0ef6d8049832ec043d97fd45ab30a4e613eb470ce441109ed1070f6ba26bfa57d1ef48d7be62f25374a48c9b2650ca226b5201c2184cab56302efa13a2b254ab0a42b8734d1c001c32e62c8393b7dc2e49d6c4d925e3b73dcfe67471b3b5fcdf3e8d7727184ee45f2e7f5dc8d81cacc96798b47cfdeaa36a05e17f6b280b2dd3174f96be297906cb32abb76c4c47b057844717a9e0397eca58767421ab8b5efb5f53fc37b4f1f5a579968005e9bfd26924ba668c2b48dde21bfce858bd0153ef7b89e8547476b71f4808305aea53cef48f466f9c55790d35f86e162de1ad72bfd7b8d77ceec7e9a7afeb437a1e09d081427cc23a3ef726177680af1ce6af51e2e6def8907d4c53cc283c1f0c0635ec2e5d7a932e69ad43aa3186f74419329f70cd42f0ec9e43640b57fa7b97490c1d961295d953fcb28c4e2332350a5f71e0542ae006aea2663ffca575734a9977eebd9e4ed29cf205a8d89b07f1b5500f6947a16e72b5b061ec4a21c9c75acee4896b9ce786910b1da724df891954ebf42f30f801f4c56ab7c82e78e256e8bc1502a0e3ba881a91059a736bcb55f0e4e79415f11a5c7c2e5625c23307bd9626d89d052f6851878f625d0d00e4db175a1d70621aabe64147e35e0bb3d92cd3e3e609213764f917fb5ad6940ea2e7e2dd26ea87bf8a655060b830a0bc021c882db0d9587cc70b43c99d88ee72b397e24513955e3ef4c5aabacbeca979113715bf7ac42fb6094814750540c6c7446d7900c83a465e46c3ee041c504d5d1c07f6515915a8b1c9a31a46a79c77f85de6086294bc09ff73cbbc1beec4a1bd8dc55bfd4c2fd1220fc270f746e7809db29915d82b8448ced2b442a3bfc1f6505bfb5ef98fc13082d51003c3c651a729378bb3cc4fc87af44d6cbfb8ba9ba0b997ee877dbfeebb247649bf486d6809851b082b15a4647708f8dd334113867ea11a2469d3e5f261c007385970efe860e5a54897a6b58ed3949a6e1d621bda0bc09ff1aac42df4864b5d170d08107423dbd2d2220e9e3b77891a16aeae71ad438140527def280ed75c32c6c6a7d7d2773bd3a799ae3d6aeda5dd8076064ab32d1ab479153eb11baf117c96cb58cf83c841fcd6d41ef565e0a1d72fa9242f28814bc916869edc08f1282bf639acea7a20d636245f037cc86d45b569657a88b5a4bdfc14ea40ca63e3ef5141a9cace5f680a0665163146594cc634819cf9f7f7a1daea9677bb6e115022aa933646a0b6619fd39995238d4e53705efc5b8df2737ef45a66bc6a51b0c418eee4d6de2824aa8d3d4c19bed2815923d924857cfec5010f9b79f21b093d124092d6931e7ebb9cf1f16257b8ff23ab2f9d5a4d0fe45ec70071c40abd2a498f42768686b20ec2487fafccc504e2057a7d2c538b326a2799f8abebb85f36c9084bffdc859b82d2b849b376480b9650084180cb5506ab0a1decfb5d4f84588e56aaff5a7cb192c921cc4b6fc4f3916287fda19f9f59a7651b0ffecb5b15ce2bb7a24c49267fa26b0597f3bf8b7715cde42043a519801f06da6e36b539deee9cf3a88e3504f0652c5a621eb86f4fef438611f283a07700053d0d660f79174a06a4a8e1089b2c354afecb007e25ed5e92c4267ee5c3416ed51c8b20718da899cbe903d5ebb42cc3891ea037d5f29df1e0f5b78b1854bc2cfc88ae55e396d4a0364288fdceec5e2def075eaa5d331ab2b2231fc0634c81ec3a5b89ffa8826eebdefab59cc6030f36244337cdd3f22d3f3b36e350dd63676c6fa01ce395aa150c77aa9c55a64d021fe0a2b31b16063b65d093718e50bb84b1dce34bc4d1e1143774dfae36f38e48cc24ce7b75399e51093e6970eebc7a8760e2704f411ca0b98c456fb30bfa74f5e12302974b580cddd9688da2ee60b7c8b206e412598637b08df706a6d230199dd3f4b3e9d166e1f7c72040d87a8c5d93011202795d0772cc258d12e262f86f3e83450a754401e44cfcb4e03ff3b3f6f5659c09fed2b3fa0b0ae2694ff09162763c198352a2cfcbe5db5c3a93e8224c8a461d2f671f68896f726651f18faac1e4ad9b0365d5a533bd59282c2beebe9a719ff8930b314686849e1ca5f91d67807675cd8859fe52455ed095d5ff19f9e01e0389191dd4be439ba96f47ef632b820a8966a95c29e3037c1b207953eaf592b5e44e35cc52a9d4280bc1870da55353e3179a2b134061c2ea64fd412614e06ed41da049d232bfe4e86eb251853fe939aa61f98050e318126fbabbae861d303576f885728b83f44c32a18c85fdedddf0236023983ba9ef9add551b791fc0f2e2e13d50a659b07aca25ff379bb886ca12242befb5142bb3a2ae4222a002eb68e235004ddd5b2d4e9873a680da2c74e62d69e32a214a97c9f9dbb0a31b6c83b36f8f2d0439befd007b69fae5f829a4bfdd8a549368707f91b7aa8e41a144030f5a587f6a8779a4cef2aef383d2bd5e68f13a4334d7eebdbfd579c04c614818ca59e1cffa9ae93616bb437126562529b11b3b190adaea997bf243db1cdf97ca7b7614ca39051453e09e1f849f4f09e2fd141a25382d4d1d21f11e14cde4d75d9c3d8e91fb57cee83c6b2fa68f110f416b0dd2defdda6ea4515c2b3b424964a429f4eafa9009a29b62cc9bf80fb87070a8abb1c9c218fe6b9c9a99b9374d23787e259cbd0e0a69b565a2290397e0481df6c87ddd57d1ddf9ca42d9b4aa45ad0442b25494e9c43268c542a4b4a3947102b656ffc1401156f116e22e5f709b19a0a11cd425eda87455474dbcf1ebf50f0998d146e2a391caff0067cf06324515e03388993dc284b8354e2a7a59d62b25fac2e19ae29315ea87f37ae749294059e464df08a51c0e7f016887578300bb3eeae3b5f4f06d111647c8fc735eb723ee9b262e0d4f63b52c0ef76bf8cc197e074cd2104c7c8b7d67b9200d06148c679f986e4225906fb404b7f0f870994108a85ef4ea753c88042fc40593fc0a3a0aec0138f36b4976c0f9b58ee93b652be5059271cdbfcd561de2a5551a5a8fab3dca9035f226ac413e83eacd92758ef577e85a1b7d717dc95eef75b72520dac2a26aa880f2e361a75ad2479ce3a4c7aeb0a1534e58590bcfc5649463527fa8351d5d8b974791653995aff93841c07d08aa693ab7bba00cb821fc769e1e08b7458f5b1c91075183e1dfa668bae9ff3832fc9689e7f881921ec918c9e7c437e93e5c7508049e6e0c09af63973e95d0353db98adcd4328336f0e40b3b054f84ada4f784a1db006dd2b7289ee3c87f463741d2fe35692efd83525dcb2678680445c4f0402bb6335e5bd047e303ff14e61eb53307c4f40e847ab4aa826c7f4d94273028e3eb1095e281aac4cefc99e6a88d744b81b378026ee79a85bdb6aab3ed14e490b57701391bf0a5b9707bbe9f308682803fbcfa0027baabb240c9599a770413cc5d04a00f4eb2436936dda1013cc08346ac5f84b2587ce7243654cff39e62df6626ab1264f5fca4075fc5647b71286b8379064ae7979396064dc01f94a46213527ab9ee3803bcef4ac086d17c597f582270e9b0c7a9f5d90571867052a8ef7d888a9c7b547bd4c476064def5228b84c9d41d8ea5f4f44644754243ef15f44fed209805e591e3bde9dca90cc8bbf6276d12d203cc538819bfe4a66663fb0b564e6231de4a930f7ad21b15be4efe63cb5e39db855040f2ad04b25b0991d418a61f894d8a889d70eb498f3f8cc50401c595bf3f68d0a1d2fca1818fd5d38ab9b779e9739a0cc272d631fc9d55603efb78237d19098f535c14003c1706b65e6f285b57970f6c4d10bf354509d90dc86767ce14467a5f2871ea714320bb38031c963ed558dd48a9963998e7093cdfd4c310dad9dbe0f6bec87a8a89833d2502d1c1a1ccd7ce195dd9012a4c6cb4c6387b47ee13f689d900c476c2e12ec3e86681eadc4c59a9dbff4d08a9075995e8e2097ba0b223ce61a710f9caa2608cbb2779d2a67f9b35b9a538b806d7adf5a7ee681f6b3e98e2e81924fd8b4e082f4394999508554ccfa4275ac09e344955a24997c23d349651e1b47cd66c36354d1eb766842488f39601d06013df12ff6a33e4ceb576705d511863b909a947bdc537e6de0ee815ffc2214c976e625cc497db047bdb89c65bb9918d405b35ba6a0f2b8cc33992db0ab15a6e5153ac0c520a5ebe13980030954e4455088245ef5e2a082c74f56cd24ba567919299dbee44b610d0ca1352657cd464157792982ee864827e2e993b40d8424fe87c973ba3e6f6067ff05eccde3eabed625982371665305430407d3346d03bb4e77463aea4c5ecdb174a1e1c1ba886a46c050f43a15fc481aaf519c03699edcce75f9f8cddc083527c097bba11350713801b4c9ad8428e8968813a3e44b496d1a66e339d68fdbe701c1e97314cebc44f056662d5f07e27a9b245b12a4431829df26a799f3fb252d7919fb7124031c58e6bd749023f4857fcf74e151dcde28bbda878891f81973bae78e819b89099b9d73ea7f366c01697299ef629ca1f7eab8e6ef87a620aae936166e58b06d9b95fd4dfc64094419ae857edb20bf32b1d683e73323e3c8a790531c3620108fa6e7256090a2ea00f0773dbf7f843607bf732d44a0e2e290d82e81e5523d99635cd45b7ac03f8d544d038126a656f27a8b850fe2bd48451c7d5046edd1691fc4470f62cf48ab60c73eab1e1fb6f627e5a2a34dfd609aa0a1012acf0b2708de884195da697eac341e51aabfa47862d55ea7e0e799324c3b89a2fc8260971dd91ffc654e5bbf36cedc071fb80d80b313c441551283b3c215bc3fe96f525ad523fe26a913630c16ff1a49f8e63d6cf9384835899437b65f7946aa2c5ff104ae1410e380374931a1b68e357667bef15f6fa6a7750cdb15221c0dbb653496c1a0d09cd8c58a2b26ed7bcee33d1b94ee7f16c257ca32b6f94427d20375af569457a8c17fa0ab8e68a0b9f0c177855d925a38767e419237692f5f6da4151368ae51a6425e3359b07636e0e993e0147a1e6bbdf9057dcc9ebe1f9187e1baabfcbf381efc9a3de10a8343851492cadf4e7b3e582bb3eaacefdfcc3dadd55d7a83365af2f0500ed573f3a977620ef0853b489344a3a31ce76b0949e31d2e88ad928f58989f9f405a45262e16b7d18495367961f05c75fcb3683789b7bc64b0821c140cf52413ffe1c314c134f9dd2726d022e18cd22e31029031239787855baffb156b48970bc22e65b51f89d36abb9146e81e1f8728ada10442e42467b2c3dc0db82e022cb39c3c143a58a7f55191e8a32ea2002206b9542c1016bf3278b5d03316ba7fb512d824f19e6a9b5984360dce88f2a218fab67ec40087b10e682b3d346adc2c67dcae1c9a613f546b8f77ff71be9c96a6a37a9fd30f418bda3499f97c6468d556c7bb6b4f8b35816936c344cb4320297855967dcf02ac93da3fe07163f71785c8f4c5a34d46db62ebbc7bb1863f3035fa4041d39feb1dfd5380004c54a00d8dc7a70337a90ec3e8e2e5e78ee648f2deac33eefe1b530850befe54ad0b4ec3d4bb3471230a91c8cee303601a5856b0ed50b965aa0d8c8075c326dbd7429c91a23cfaed550dd128240b47143e53e5597304e748cbb43ed0ddbfd213e57a6cb65132b91dfd049843f0664b98373ecd636947a5996bcfa7b77fa584e8225f5a8f544635ec67d5d27a189b10db701c1fd811b33182c1716d7b6a204747590170e59cedcfaa4266821dccecfed01682ecb949a2a988ad3a8f9f3de1766068e7905ce65c3f06fa7bb311f5afb9e0fd0ed10b6db97fcf7c46626a4c8fe4bfb20bbeefdbf5d5b1178f0fc4865f6babf41ab193275d81ffdf1596264d27bd476e20dc8cd4d52aa54edbaed0073db525e05a8d5048ad5c89f802d7ebb830743d97d89a9d8aae755fd08e30b4b369f56ecdb16d219c869e096bd86dad7d0b0890366ba0d24c12ddf01cb27ca3a1c549e0eb66bb49cc5a496dced034503db4d8ec4f2324df20d4b819d06258b543cd2016bddf6dd9a910e28b022c708f0a6670d1d98ba6172b7cf44e8a108e2b90986bf66715f11de79962513fe2bf16f5ee42657f5c252ed6cc126f940d6c3d08cce6bc7a7536e708c251114844be60d81f99cd5c82ec8ca090c8d56c62bb4c1ae35aba3be1394656a084fdef9bc9b3409ee818f44521af10fd3e284a0a1982d84b9487bd37dbbebea22ac7fc1763037ce1a1ef2e7601ff0d8f97a873a6d6531e16aeaa174247bbe75df2418376929cc5ee2a50ee9e6722d8608feee8ca039e46b5fc30b705638a3c9c296c2de7936105aa988b22d3eb13f7f07322dc4ec0e765ad76649a3d4f53c1fb212dcde523e4d126429618b569e84c47af2351be16d5ceb59aa2d789acaef9fa9629157be6b68e4f0bed2bb5ce2c88b33b84656047c39d3d186e70bfa82af4a42d7faa823eeb974c9d5a2e1207f5cb6bed1ef3250c305507010d08a93e8904d574c93c902c79d03d94f2c4c64a997bf66ee45e91b0950968655e3f1242525eb10591d5aee6c8b16f8e68500226221ff34480d5d1168791a530ff43713007195795c80daa97e922f921f765abdd66b5fe4f507b7870d4b361b874fdb7f8a64aac58d9acc875bbd28052dad923cab74363dbad9a3c66cd1b1b8987c1c9c56b55e35fecfdab2bf1b0e420b4e0bfcdf4899ab620a73a70e7ea6af9463ce729b820bba6de1d4068c1d4b81cd00dae344bf284a3e9821fe861e508db0fdd419e4fb1a6399d7658b35db5ad5d4777137349353b215d9bd4d4193e7e1d1d49f8dc5b98866761f45693d3abe3fdc8baed573d4cc6b841b4968fb68ce1bfde5e93391780bbd4b313ee54d0c559fa4914f1c80e328e15158ceff7d0f674322228d786c45b71283ac8625f22ddc204955c6859b527bce51d950a70df6c49766f53ca81d2cad784d962f941a2c1e53ffeeb19c1f8ad82ad175e94a46fbf47093c37d01b2716c7de63c5094746fa9c31a432f71b04b5346fad4b3ccfa29b77d6d97b695442aa215f75f6d8558aa7d0d835859968f57a0d6ddb035e0d489c853044c4034f55cc56106a1450a5f53a664ef74456817d741b4a578a936c874263ae6f31deaa4edfc16ba5d94f4ae5f6e6c3b57bc918c3cea4661cce339982b8fed29a56f60907f0310860c4633610fb1062b9cbee605379bfbd6dc0ee398a9c92849ca13dc0d07afeb6f48f6b0e94d69475b60227d4c95f484ddc2326aea464c193e057e1bfa78b5f987f262340adcbe02f3cf9bb853e32f63b67ca2446c9d77e167530a1ab8334598f8bdd2a9657dc3b06536e2be4d608373bb0535b427716600611f4b676c6aad527bc7be59df7974f196c56d232946c960c4359ab763530bac7c8570aec361474241365e3d636e9c56cb76873b616217b230ea544c3bd3d59d4e513a2f57bd5d2b22501fa6bfd1a29eb350579b9c8424abd462cf9f700a3378f14a0150c9af112327100aedb4b563a625712e227332342ec6fe6d89afd93830ad5abee64c2308182cbb7642c752e4f1c61862593c6b7073dd7731677b86da9c1a69ea79582949d7684c4934988a962286a12e480ff6b85be38f3f8e7d10797da2622a77d86442317c0813511c4734310469ee65ab5bc5ee5a9d177386670f7a2278d7b6c6b352bc3e2ec5274321dab78989567393ccbcac8164262bdf12c332d8974cfac97313dab1f641a97567db1cd8c11f71baab78dd32032ebc84244b89fb4c80a473a5869c3fa5a26e595311985173e973105834d5db396fff7db05be4dc54c8b50e090ec929019ec58c381da754dafa89a1836b268efef3319642bfb4feb1c4182ed61a74743e63be29a7147b3052da2e41f4f8c725321a7f84c47a99f12a2ce6c2312f5906463495ae57b32bd51153b7d697297122fa1e63547516c38bd3ffb9c9d0a8b3d1a5c0c76578295ab953e5dc8c3bf34e586c6496eecaa49c097f0265b2f20b07c2ce6363f09b00b1bc10ad3ef3e37c0c05eb3c78e7bd3302e738b9ef527e7cdb00f5d1c71c8eeb3aaba569d88a4400acdcdc18d1e82e77b1c3072eeaed1010c55ca39dcab4c60386d14805a25b83b73708bd5b0724e6f974c326de147c752e28d53af257aebf19ed887c883dc9abcec3c82d581d0f71f599d085d8ec7ed3a21166648e439030585778801e93dacc0a762eb363b4ea8dea73c5e86bc45a400cf6bb1f101c12beea7b1b0123457d8687243b60fead9c02ebd2742acfcc7d9819edf6603986518d0a5e19c1e3592f48107fcf221820c2ac7db1e19b8784b4fe1b0146529a964f4c1ce26b9667958f66e67d3d770b7b191ffefc587f2eb2fd21d6153d8f22f92faa8de9f751d4474bb160513a0c366e8314c1e687978ffc88a5d2e6c617224fc9365aa9cc14ea2ef8a970267c005ef53774dedb6237e7632197a5a38504fa01a7426aaa745b9931e7f61f302e964faff382f65de8462e828af9603ecbc3345eeb4efd55be9b929cca8ea9f5194ddaceaeef0139ef2c18040df1355db44d442d317579b456d9ee89996b8907d307e2e10818e0c813cfc6617b6c0ff9b79ff0a0874eeaecc3beba41950399ef4bd7b6384aec9c9fd30c325b1bd8d46228e05c0dd03a2a64220d4c5c2eecbc232adcad1e7c8dd2611c1af48e57a9be1b69820ce9c9e8833dfd0d18451524758d488a97c908771a8d1891082d17dac9447302e1b3e6bdd032d1899f6a88c73c3e5a8d646af08065b9e29b33e4885abeef812785e1d01e7e13c010be8c6d91ec911a1ccc7a46abb52b92d49ce236579e138251b938dec5288e21d9061789423f25a27e4098416855cdb28b40f60a1849d80df106c48bd5280dd4e5afda44484da8b67b2241d8b7899754f55d6c4bc51d361173e58cee7714a46a04513a5a78dd228b3a6c5d23f5f2aa8f06d5cca11d3228af40e8af69b3275317f6d54144814021194eca3d40e0b543e08b2bd8d0ae5b4874d3be17225a8820ee86eb71a7d39de2045108666e318b4f7f8d7aaa5e9cea6741145d30f55fc7d3c01a09912f712b2c66e133d3383f341a71c743b925141e1554bc5367b051d64302b999446290935c79f4f6a252dc89cbb3284f590421b91f590f24d518463d05cf962f1f2ac5c30a6ca1f7a4145b29a8ea3c9171176a44394d08ef0ec42ab30c428e4a7ff928ef6732fa19a60a34c718a78c562f6268688cfd41d436b6f21c8fbb7f2aff68553dd6dd2125b5ddaf0c3995c5e8aaea313aa6e7c19c2aba1252bc29a61fee91c6a1659326068fec56340b60b0e39a66c99262cf1fc2ee5e68f433ea2d39b9f07d77ed4bfb12c531e558084867c4ca989477e98de9e385ff11ed245d2d93a1ac947f8af568197b9cce7be128b9251d0aee67e89edba735b2a8997be8df9286520c50a82a134e752f38310df77911b86619448904b83b537882d3ba767c8959f531791791719b78597cbd61376a2babdc4d19826538323d07595b4a572857db1962631e3113ae07b31f562a6085e8315411e2f294b2022cbd201674f8143b70ccbbce682e1bd99afa4a9c29546d462b0b3fdffa585f754d8dcf481d2641786c955641abe6025b5720d7e55ed76482d5dcbd3ef2ea2bcaa869b53c8a4318626137bce0f71c383e2ecf68273913761cfd48753a95e9ea7b41f2eb2bc0c6cd64917390017faa2f9f499e930bc855f6b9d15754e57f25bb9fa749edf5ef133081dcdbdc45050ff0b51d7de3bfe8faddbf4c1d4892d9eb5bac0f90d21870707f6d5cdf929d1aaea7bee22cb5234f89fbaccafb83b73fa522b525ad6862ad312dc13d4c0eec41254231458aaf975e0afa531c5b83318829dae2afbd8617d13283ac350985dd7336a4eae78623e3a014b979bb76bb92d5d82b808345a1a5029936ba13294ba1063cd0d652ba80522f83f791a0d9b6e6bebf26d86e4a966493887ab7e241774fe647a39a9d3f1d37a69b3871b8091b45b0442d99d44eabcf5c14d042fe45901b32093f51c8bcf74d5bcc37ff0ec2d7d3163b7f76725914fbaf292ec0580628ba11a15741d79d4a4e8aeae311f85c0cf118fc492dbc06c771033c476cc2cce5577e5d4cdbd77bbf60d43011e1078d9b83632aa79b3232d4e4d4d807dec721d6d6ec10a1c8d66ac9a703c585652460c1f1cc32184a0f98b096b2f1558581ad9f09ccb5f31129e21aa8e59e9adb5c48cfccf8e02b5cfa3fbc046e737b386fd2dc079a8572eef24354078ab32f21cece1a710b6a290aae65b4267ee535844cb6cf4d577d64076cfd45304c1e94dbb2bf2dd8acbd67f475f3642e073b00dd28def5d59ed6862e20bdfc704bcba53340cd6fdb998f8d434eb57e8b82c46d898bd3611689ec08da949fc1bfe6913d7e8d28a95b817fe6c2f075e3e714cdf87f3397e13a967e0c6b9b55db5b6db2a25cb0581738dba26517c039d0467580b0925d2fa4e972829e9854cdb268219a45742bbed8ac405be8ee0684b783f540a03a3614759ccc06cb1ecfbeebaecf95c6c583e01aad4bc0519c3f33879b2d5e80a276c56bb0af38c6a2bacf4ca3d99b831d45e8a2653034614ed5e43dbf644f850177c18ee7296d9dfab5a310ef1ae07b18a09e4dee30a56693d130a999a4787aab317e1b51168d84ef743e4f821a79ba27185f7162cc8acb2a25d60db2ae0201660b34be54717cc1b88c9b539f94cdc2f30e354cf78c83a5e5fceb526f90bdaef7dee2fe7c50bc45b56b359e473b5cf430a7153a8b40803eb77b3cd45c3ac854efd5e641c1550791b61d27d20e44c1bb10ea7e229a7fcaac6cd1e34dbec6663c184c25126020fe6b01ebf3bcf131982dcccf0517af53a045d3fcd17c7d93d8cd0ea8da5fbd9a6eab77b67be513dd72cf75c5c88d28b8defc5174e405ca12c869afcbd525853b0e44329e86c591ff850c147f502253fbb2460e8d246397e05833d925111e6741f97428f60882c5a0faa1b23a3ab98bff9a265f53cd5977d5046c303cba2be292405bec071ebbed4dcdd1e928c16e7eefb985b114a59868f66a1de1d9529b70fdd13ac8a24b99c23e2fc641b2e9e58f799684b940be8f23b51c5c7e8ef745b745303122ca353f06e7bfdf88944cd1b2547de6b2dea796fab4830a78e76ace820d90aa238bc284ce6d0fc0a30abaae72c165b1dad7a655c1ccb1d75f6cc7ad26a2fb12126e98f6cfcabaf152388cd0385c97d7a8dc2ba7625eb1de5b08375810a09c8940a4094b2d17ddce66181796e1e8e9370c5e156fd19c98f918ab6d3f64284291be2cc0db6254b02aecef4ff723d2522d8db15d639f60bcde3ccc7de53e336a9b00e6e46626e1d87f9b8cf39a3bf5c7bd977bcd624f54dbe5dafb20cf309b206c7463b90e36ebda3b6903e9adb88b93b8d0e5808797dd1c97566fb9b5e790189d8e1a0672fdd76e0775fffb04a9f40df40ef53ba41a9ee1ce61a89211c8d538e368f457adfd2e18fc88ebc1604583c7a04b8cb5edde094029c78c394165b76e329924dc7c52eaac4bfa1fd842f51dd153aaed6744b6b0b054c4dedccd1f05c43609341d425182b81a9e22186a3b54e422e48bae646f86aed4eeb79ce52006ead455f68e90d7f0d0c4dd25e70e022247bbba1273aa11c171164b781f57ce5e464993616e35200ecadbd52c9669db975cd595d68f9948b16b4981ffc16ef5aec66d5edb71e8ce2043447d7b3771db399590318c008e9b75d0c61824efb455f403dfc1b49e49cbfc499169910b47d73f56c0299848cac2c02d8b18be0ab80cdb58dd7843423aa553784307235029813b30693b8290587c94c02360834da0c3d304d5c23ef7b3a2698bf2aa6f0edd768bdf12746e368b73dc1bcb4e00ed1ac70169401408cd9fd3b7c527716139e5e01aa652c02f222ff22670c60636206edfb0698924e611c1d711837a8271bba242969322904185c5af87d8baf1be86a591a79eeeb3ac7b7b4a3858745eeb744e68928b39845ba9450003b2ab8cdebdc793fe3556bb06c0c3bcc0b391299bd8f8d1fc5248440fb76f7e4dec07bddfd4e29c2cd1b3d0208fcd090edc2ec72d55946ed1efc6c8ac740037bc5e88299cc0c83b49a2a09691771ded29fb8b8faf6915208e61c8224f7d65eb267faa4c38243654343fba5e4a6e903e1832b7ba7de71c27921e51ef84e1fcbf56e7dc8151d50978c89cf8ee9ecc7f402a02b6a78b4ebfcff6ab8addaca7185d4ff3749d0a3466a3f37352452c0614b785c1323cb098423080f085dcdf14debcfcd351ca53e0bbea8d01871d5b8be3b56ae78528e7f6b14112964ab9efb70167d96c1f60557643e3ace611887450356dc2cf3deab9731043052ebe5701e87c70d9c8358874a1056203639a17ef1f76d2534cade3ad76ac78179d94a308deac0741d797a1b05e4a500d2a740caa15fe4c029a11d7e8407dc72e8afde2b12d1e2975e15a6edce20fd5acbdea9ec848af8d854f3084f608a0cbfea85610a0cf94c7f8a628b417dd46a18116772df3682c7d20c1f3c86f91187ea34ad9257ad93f5d5beb7eb28fd7fe9383711a1a1a6512b60c16b760016ede62edd642063bb84b634b08bfe3594b912d3e277deb16afbac121f0e1332afd4dac0ded1108595d95271553c4508961c1e6a764d0b5c1748b4e9e82ceb0a4b52a9daea22606cbb199467ca3a02185431f5646419c2db61dd2a64432c027871ef1e41cf491ed456a057578d18d1fd40d0c29f56adf501231ed700b22c142876e16b0ce60cb3a66449fa3d9949ae82ba6ba784bb123ac6409c2957a4a2d76bed8a68db82674885088aae4c23a54aeb99e0eb6922e5b81807b440e6adb3c8ef310b002ca896fc8fbfd3c96be581d9d5b4fa00452c2428b78fda571b8881896c47b89dcffbb23f58e03912cd9517ca16ce53f8eeb5250c81fefa30d107dd22c1ae3a624c87b51c581d004dbfe1cdc3f812b14173a79bf9684a9944b97d91da0410a081cca28593cb724b890ad4fedec568343e480787bffce81fe020718cf8c29d9f337180c01e0def91c5a846e3e9cb0ff1431630121eca22ffbfb2158a2afe5d8f7fb3763843c917e093c1eb5e21a9ddd0febf42f51235188624f875c12901ec2c5d28ddbac69b27b433dadbfc95ae6bbfff7f251e848c7c3f9ecffd3a1aa392e20450d4352923b85c6c896bb4e11942dbf3eab1094a3b9f389b35da6c9dce653eb55f1fbf0a10ffdd61722825055e344731ba099c52b0169937b61f30fed061a7ecb857b791a6bdb385c4204fa875d22bd2e66063ac0b6cc3b40fecd28e8b380410fc357d5939dac27152d38910e9cbbfd6045b2b893f51bc98033d581acfa133f32aed48b628dc3aaf1262b8f2d51175618ae9632cc162f9b2cf28470d2e38c1debfefc1a4675a604e4141219c72921a1731fd3879fce3997a6eaa88cedf095665ad02787e48b116a11b2b30243b4b00d2fdd70c237dd91e243e303933f3fe85ed76ec2800b92abccaeb5f53ad08c448e51b6a3bf9691d3aa7cb80f518937d46be66218c349a852ad449f5eb6904ae4e3222bddbd004c3c8c0a92a0a34f5f9fbf7761ba22ca9ef4daa8b85dd64e399269886bf9d8bcddda370280fe79ec8bda6142cbea7c55a9fbf39d29548e7ae1c49feacf3619bce2b27e969a4e8b49b43294ffc85b3d21b2f9ed790da4a00fa614b214c98d284d6502e835410afa1434532ae8cff2c6c99e6394abcfb766b088236675a4bb799c05a70bf247e40cbfa559159cff23a3b7767608bfb1613ab0121f3fd9229552b1192b71d56e3ee96cde29e082d97c9c99c7f4a40967e882bebc7c04ed0a73ce299fa39380a1c703125bc7c89f8cf2c46f291f1a98b0fe101b2bb2145e6fcbe32372e7fe125c2cfa1bf50cf0298ca811a85298d180ff83355da6f398c7882b0fd12ce1cdcc08439ab3773d0493c42a6fa0dc9ef8b747a1d3a977ce95ef22ef9fe48ab7899094b338d0472882b5b56f99ecec18ee0ed16ff3a49dc5a9053ed5298ddb0e8b2f8d5aedb07765f3e2bd43cb861a9d197c4e227b4198b2a930481fc76bf1af92fc145b493fff3e8596e32979326285d25b2f203e15d3cc336e4a10e1fd4de16d63a27b6221725fc849b574b09d9f93534af69b918878491c2ac17da8d7ba71b067a2eb72c57839269ef3b2d66965d43b238e5277b0ee599cf10367f48c86642816eaeda15922e9f15b91c05d53f6f5c423a153cde0e402efdc336c9f0399e213a72be8bc5251bd2bbf7a474a53a4d398bd248f68b90add6feee7efd12843fe9e7d82ba7a632b9558dfb0a0559f5f9bbb98189402b346c20e8dd786f11c5a9ebf2b2ea60bf5fdf9d9b05e4124a7a012542fc1c0c2c495cbe65c8321c051a281c94e29214a6b1e5590c653c260b2956a59e4f87053baab0f5d7298b57068bd9280432b09880e79edeaa2d552b0a2ec4e136dd578ad038c1939ddfb9b3cf742d0ab112037d30f061fc9040e066646a16c21ef7e1c74e70491e26d222420ce062767b3dd450d60bea00cf44af46fbcc6ff368e55afe0d78806e898cd7db31df87316559f9b4f54fdd66e34c66b58bb3e0a509e57e6955fa64967ccddbb87246449210cb58911fba8cc882b91a0b1a2aa7290f06c3d4d931704de197c7fb78714160c29d307a80189e90afc0a1338abd4ab67ae65dfcf1b8d5be020c2733b5ce9c9a0c2e6adeffb25b346ac7d6e6c07c75c6b84459c8ea98aeabfb8d61dd7e1db07bc5ac7e7c0f84bb4af4fe10e4e4ac2acc5e9b51d3e619c85df91275650967c471dc64f4ac8f84a5284c1e653eb732629f4823124f98bf376f39d43e69e74b212e6f2f8d80732df7a614827adb113971f9b461fdd0eb514c21123c5bee543f0bd8155c91beacfe71f3db6aa35618c59a204afc25ac675060db2838afbf758627a32cba511d05e4d45b6aa053c98983018be78b5519fb7eb4e6081e9ec513392d9492d1c2221fe90da3ef417ef50734d9031acff194b48c8a4451fc7fed99ef4a1486a20ef835a29e6e523db92db3652a3fec928e44c7beae54bf839fa968da84b2e0d913ba9762ce5ab905fe0fad7a1d57a1038767da673af72eb6b19a26c0db6f442b0bcd53c5736ee66579e6d5a175c385e001e349f22cedc41d1d5a065933cf810d1d0d6ead0aa05e8183fd2656dde7f6f9e3cf4b54aec60eeecc9b7e467398cf05094da270c4b0c1e7eb659bf4e9028b196cd5607dd28812db3009b24a2f519207fbd6d5e956e16ba9054d0bdf7ed0c89e7752ee8e16ec1234a62345ad7c8f348306aedd21b7133653da865fa7ec8e83a424c7fbc805b50d7530ff5e9bc90d2644a0afb3055b3b190c52ace18c79d458ce01dd7d4db40aa408782d20b8558293f1e333e0b4e8f63fd3b31e2ad55351a6f887edd7173dcf4b2e7c215b7cc8bb8ed5a7ac97223818efcad4707b9f647ad8499411049b86ca55858522c2f869d21d5651cef4aabc6e49ffa4702e87462ea8651f3bddebb874cafa4bb6d0fc75da4476c7c3ffa95ae2c1975d92b42ad01bee938e774b80278da41eb2ea083bf3fec851aeb54c9a9174cdac335bb70c6c61059e969a4ce23599a2d34136ab1ce0fd2a5188c1ac69b1c91008357a45e3bd44dc725b0d8e461e5728d97fc5cb4b2a59e964d92fd2a147b7f6665ca90688c36952d5a83e3d23f41d11bb2abb58b203ae30c20f38ce52981994d1eeacbf7217976fd66c2e7c5ad1c2ba3059af47136f67049e9c4bce8a3a4c0f6e04bb8202a914baaccae9b03dba757c3fb707f84ca01ff6a1fac2af6721a556e032d3339f1d58a6c0d42b64897fb39b5640c6690fab0cbe09c1fc2c068d6cc6eac74a85383f2c4bbb42bd4fc5866768290adba0bb73f2d3d418a2361011f52695aff1669f59091c457e310b100780b4eea15951b391730e528dd107caca490b6e78137fbd7448f1b0e7ec203ff452cbebedfe813dbd15f781ad52aeaf6d2d1ec30957b8dd257128e459dbf765cdd98eaa91ef67c6c6b74471504fbb258cf27ba4f5ac1cf3be7a5106fc218bcbace2dd4f81736b1ffe4f4b4fc681a3fe106b3a847979298a6e400844bd0fffa46cc401f7107519c25ed18fa3926e2cdf2b23b4d6b72df2f5b8e68c6e3e79048252bf3fe878f76e55af2bfb66421e29a6c7ed94472ef562cb125029fdee923054f46e7af43d65a3c4e0a94a5ef066e4487017e1e5633620b6bb865a7169ad4d302376ca860be7f67cc2607a78e7c89d34e5804eb00a490073ee9885a9a046576307ad32a1dd74941d033626ebdc8d496607b5b8c5f2e19a985fee631beab12b3bdd298f18d90aae436b388da4a9382bd97434bcb25e1d9101c582b017dd1774ae2a5086e2a995174c41fad7d25ab6a735ac4458bc1539010b5bb9269ecc76413d97d9b2b87078291e328f76faa4ac54ab6f19773377b6759916be7fcd00ddf6c9762fc438343bcf954f539af8b61a932fbbbbf7b0f1d6e5a82988330e6b11d82762e9568e3204f0756e5b589bad6be4f84d35980d51e6dd1756bf72f0428a11807cd5a4e59aaa8083375f339961e58ca878c43f56bcb89e13aa3a4496a007beed56200a065f8c29f32960058fa82ebbc4add744ded56b367f7b2f691b3c4c3a2310a15b987c59141b0ec6d0eb7364d44608410b7c2b33d10857a2b6122f8c3993b2bbddc9b854761e8dcb72a83c6ebdfbb7d625445227b9f3b7102415cba15995c20f65e7d0c210d8158d0a7795729dc95182171ffbfd50563da4e3ed1ad06cee1090a2ab3ee94ec8f2de4b349647991306e4b12b7110c7ff50be62cd9185369d1d1c40e725ecd7c6bba4b834ede26d61db9d5edf762a65a002a917022bac9ee5d8db2f2f6684781d3fbb9f7bdcb37c7510cc1e77b9a192947e64153ba8df0ad9df9061d945d4526a52ad2ec01d3df2a9045bb6c1fcb1b57df7f6536a3b0648fc749323bde526de85c53f3ece7739dd63ad26924736ffa94d5f3cbc02f6f892a926c158f0313385b73e1b68e9fd1864834f2a9de4c0b5820e08248dd413b2959ddb6bdbd5867493983bc28c45a1a50a653100fa23544dcb7ada4bf8b2520d72e7efd67490e55bdaf844691c698d50b58e90ef474acbc7579fb97a6be68d57eb0b053fcd84383b1754e946d579d91be3902ec3be947bba656312f60d93365bde7dc016007bf8dbc2c57d708906855ffcd828c4d0e6f9b4468982ee4c1211f547797a23a9ca22902fd3107a2bd3464f44763bd00b0212597af6266f0fa9501b7439b2725c150df83490eff29ff278f5fde4f21287dfe133db3018e3ae5cac5184cad76201df0f897a2ed49d0144f88131ad8899fbb4ad8271a90aeb68db9bdcd535a1fc7587abe364b01eff0fec8e14075d6c1cda66ec6104785e74d34c343f3413b2cf635032450a6ef745b069f1656d816eb3d83f848cdf0f8482bc6204daa1ba2b9ca58d8c86cfeeed6a970f14076efd886aa435e7426ad30637eaf3ce7e300b85417b2d3b758ac6d5d21095448e7dba89451008a41aae4297099ecb933fbf667708c12b3516a91840fe7d88c59b716e478217a520f5f61f4ddf44d716d8d3034b9679ec4fe271c53ef070f9d78ae88867e3efc12ea7d382622532384cdabb3e9d8c276d88ae67f6e49c79d5e6a545f0eca281ae77e0c049aa273f53c864fb007d6e8e30aa433add674bdbc2f32dec8c54b76d10f57193548c85b687e80db65f9c23f0b17a6f90f49ca07741298e6d5440685769fc086a313a19145d9cf12c88be4d8bdd2952bdaf5ae88c09aeff168023bd547dd2fb50e56eeb0b0ddc41ded7fe6d62feee59f82789f7ad86494fd250cceba02e0b21384b6e61bca2c255ed5aef2758711f76fb7edd03536514f357904b0849ae065b5af3933b2e61bc915fece7fa001f5313afd29a657460fbeee5201112eb3cbc795147f3ab9dba4e573f0ae286d8b1cdb5490e2efcc253ca498965747d8b0fd570ab13b792a9be8b8ee4f1260294797c3a409cbb35c3d11cc647e08cacae714203122fca08bf43d1218291bb42e64a5621dcf0b563617715f30b8f3d37856a5f058c5560c53dc6bbbf27ad376034a7a69f1fddec00a5056ec71e94054f50841bebef1d8f74e6b3142341ed5efedeb1b8f4a5344ee4707c17f4657a97625420f4892befb5e94295c9c926343e19b6e867151901a9bbd4d67fd5a6de5e5bd386b425a441131e22a5a0b46f83e1524d3e20b5a24b0b62d88b8a5c34d219fd4ebd5b5a40c3d33023a41072c6ca4955a4fa933dd8611dad74b3f4c347123956240ac6fbb9f69576adc63804a66600d3c9b081ebaaa0f6c8fbd7737744806227305fe18d44d357f1cf51ddcac622ba32cd9b4c53bd5415bab4d730c494b600d96b252d597a7d26d915144438481091b762f6599b889ce504cc6345279a6fed1525d20008f8b4028dbccb36a28e272c955de70f4668232b83e25eef1df459100d60e5088cff0ad67b7d652d6e3467ad276186598333268c1e7d4971f42bd0f0f8fa0c9093624e7394f2f97ec76a40fc0252440c8169de1b219d572adfbe7e6f6aa9626060a7a630604c491143286fe7c14f5be7f2e9cbbd2f18d284e3989ce864663e3f3cf66139940e179175d64aea2926ce8dadbb1eb09d9c49733b887a67e321841349d9ac3ea5bb901d2a7b92a5687b89abb4c766a63673f218d82a75cb00257f6acfc8558cee7fa935ff521f9fe803575769bb3b5dcbc1cff31d51209da10a46fb229dbf32510a03531428acd7c8143976eb47da9629e913afec438d269e492cc023f4f193364208ca4ad71806346c867fe1a5ab083af6c36f10478d40c772ffd4534c43c5de60547190ea4685b637824898130f621bd20bc1ba49a809efad580bebaf0ebb18292e6ea11847ab0ee40cfa969541c3adf3efe85f978ba5f79088423cb813c449fcf5fab4e12feccf08ace04455ab2a0d774433fd0f6c6674c90515e6b5183cfe08078ae814eb1af4e661c446446aa5fe42d1101879959384b50fc26f4c303c80a03234145eb59a0144a1af8bde6ec6d21f8b404bce2ddd3be106b63a916bc669bc7bc7259cdbaeb6c04bfb1dcb708375b3dc4c7192c8c00c6926d114a3d8ff6a6b3c1cad24d9fa79396dbb4dbd5a45bf70d239a7904fa0b74dcccd8493a89e952e4dbda74c660fa47cb48b8dd4eff5cdba19dd38a1f21c940939d84145d99d81b99e33ebce319d70d1ced738095b14a21ccb3917a98c44d75e55347e7f2aea92f9fc4ffe5fe149e84a1d0242428a1a855ef9948fb2d91ddc23a17a8d6bf3f50c1f26b7d509108e0fcdb9db3f1ebc98039eadb018725c78d85a2d86b88ac84dd73f4dc8999f8a110864e8bacce42c125d88a1f8801d4dd72e375fd6a541a8d148b4114dde8979215d827086a8ff5796c67d36a2fdf2cdc038e077b2d8fb71c1b205419699343cb38d437326a411ed412664772e481547133af8b0af0cdd479bc56a6fd49d7ee56d510c365ccab86ff9b91b02f5ddb668b0f6d46648a2f511c4709b3ab0223460fa5b5c78487ff521b6e6b221178bf88d6fd30d72ff8259c14fc9dea72fda697a37e4f985ed08650521568ae632b5928897334ad14310ac3cc57f723b5a13ce3abb2e9bdf75403e6c1564ecf8c772efefffd6b0317f56241a0f77e87b3e8620989959b6fd7fb10c1c80a386d7436b099c37185dd484bdc2631870ec61156e6c9a9acfc8ca68c30332cfed1a2c1ab73f03083e986b32ba060634f3aa1b0c1e6fa10701dbaf17a48e4a6dfca523fe6cae356bb24814beb860a78234fa1dd8b5f3606c73aa68a8289fd5e369d78c06328de64be9af1e6a8d7ad4de123449596219a8da7794ba2f24132013d07bf5b44e5b9fed018e0673854a052d42136c641262744ab4e65274a082b2d85f1489f6982a88eef9ba2b16dea26a9e6e45e9a599fcdc964ab8712e3ee37b5fca539a2381e428aeccba5d2339912d3b80882c6a8552e5716d0525c649ac6f7780c2333ee564c9cdb5c16bb7fd8c1674f88a88d76f9889c0152ef0b34663ce665a3c9fe8bb79afd1d9a2f9c246735604174edd6fbe4383349a3d84120485c631b47b46f5d2b965a8b230a2902a3132546ed08c658a3c01d9f0ba639a6c68af14d0440ff9b3da6477541fb4474a04baaf9209eeb364d730a14662114da6854a6cac7424c00fbdf55652e518083a3b20cb2fc384e4036b6e72d79021369864dbdd20d4d8fb048cd62daab8407ce527d1b727a6b79b0eaf814abe30ad28216a8d3971b74671137d27fc7fe0778e9c62592d537904c943c9235d2cd5a1802ad678df6be5c6fe8814f807da530856e5424f980df30d35ef5787cdabf7a69cf098626af64918ed4e9c6b2a1385702abb278d5c70b034eb71c8d790dba70b5407a69fe17de57888137d7b09fe181e2eec1f21ea9892cc6762ddd57b2c5188b2bd500e64f28ecc515ad6233e5bb16c3fcad5694726d7922191f75fbc94ace0419d1f068a43ecdbc0836f7a0022b7de70eba368c73570b57b144277b423b9b91a9c909e7a4c1d9813095a3a994d5135893b38bc77d5f3d579b042e80d023bed607167c89705369183dad32e193391fcead88e3f77d56bab28c961728ad7e083113b7b9cf24a1891f9e1fc6f1637778abaaa9051c66044cb0d9eb111077030c1d352e15cf26cf758b833eef2f1785b7132fdf0c1504b92e617216420a6e10654b1342067208c17b06cfea61d6bb7d31827a91f265efb3e681eda7f0f0b08809117bfe6d8fa94f44cc746e2ea6c28c24836732b471086e6f346f38ac7315716644c1b0d2c7664b22130e2e740a9ec808c56b0c361281aa16c37a1fddada140bb00d0e933d53f44640464e3df5655f3be4f5d67f2181555ece9a94a0defa5ae90d4941b651e35b5a915fe77df521fbab83238ddda2527bb25ce00e4358692bd09504838a6207b3ca41df670c564b04059e3e7e7b2e3ff91df0c0385c3ba5669c7f67d2aa606f80345c40b23a374379de32bae35ed4bd185a4c0f94185c1fceb427a8fc2b27281abe29d7dd3aca34c6524585b5568a99f4713d7ca17cf01828d9bd835433761a83bfc4d166629a4cff750014d52c188f9025bb3f0a5d56f1ef6343eb24f800fcf2430eb08e91c57ce8172068edb01b5371187cad95013eacee66b535334824fe8fee89826d91e1157579f11bc1c511a681ff54cb795110e06926dddc4a3080d842efb06a679104753a10e8eb0db72f65ccade2b16dca612cb8ab08cf9b64f688b9c9b88f6a68d83560029b4aff0b047dae7fbb1ba216043a529db4e8c5d4ee1ec9e44f02b4a163eaf81526d7364e213977acf5aa9b9a9abcbf8b4bf330db2f2d65e06c35bad1d136d331a6b3e83b06af5011596805c3acbf59cdec7c74822cdba94fc754cbac2be499e0bb1985d6852efd7b983af54cf530e38bba56918caef3779e5f7e449d0b2eeead7d474b4d91bf390a8b38812bebcf70604096e651a30469497953ae9594f05638783ead67664b3ad5a45b13c87557c99489f1216301d1a87371bcdec2d671985d9e56457ea6a1ff6149d3929dad46a7211ae22e1e05d17ce729693d8c1ae75abcc7e7c1fa7808488035555e5438be954aa94ba658325d0b8852f36561f64df4d6957f832891a6c22404b9bb6c5b0a7002b21a1ecf01b19d15fcef124296a80852be83db90d87cfe5638d8b5087f3a5f60871660e3403e6778520a521cd51a4e75b8a553797d56b4131cc3f4ab491af9db77c26709bdac58fe57d5e31dc33e5be17b6ac5e00bacea8b4080640d51f34df3cef0b5efc2ab9a4db7f8f3fe1aa50d4f90108df586b16671d62b9e6d5b36f07d1082567cfe62c3a7423a47cafd2152dd442bb8edd7112f92a3a8d06bbf862b3d041f4b1af0ada37c016c83ab37a0920bdf0cd348703863ddf5283795af7fd9eea0be224e8d0563432c3e36023a8248b9a6a170bccdb1b4afd3229cb435b040a73dcb3c44eb6c15307cb2fc547d8373f21eb120461fad72e33ce701825b90caa341eb80e5bc4075f1096f0146861db9c86ff7aa18271dd258d7e61ea59e7eac09451fe8effe8de7728442956b716fe6579c925a3f63596e2a7a8073a981864c2b30763ce374b5bdfe782fd548fc39549b14aefa9c4e96a6d8da46023e8e8c8e328138a1cfcf7bd97964bbd1fc21057c079d3091685bdb687f0707281a04600d700b7807ba142860982121582ea38b0de9e07359991a691a68163d8081ef74cc2516de827fe7c16582bb7e247c8aad53dde3dc367f9d4405f242d361753ce88aa80e36417687416fe365650487aa5c794710bea747bfb2bbdc02b452f91af63541cdaf40d921cc4ab1908d7c0ecaeaab1b9133bbeb685ea1972886207addca0877e22c9b25c9554802ff1b34ec4bee5a8bc6e7849aa5e2b526e1588a2deafc5bea19681893113db6bcccc7b7116d72cbcee55bd3cd7ea19ca37fba93fbee6506de8affad9307f1a9c6e5e2b684610a5942de7a9e81ea461a4bc2936586b33b290a3bbae64028b46f95766cd62f82c508592f2fb63d3641cfc2d7ddc8d621e01becf8345ff7bbd9b6be1c78ee5ade8408ad0c0b0182e61596063fe3032924c8fc9f4b4c6b8ccc31f057bf0b022da8738fe845dee41942bad01ba89d02cbcb5cf80fc40b4b898d9bff915b57f60e47f6d86f3e36033954cedc4c4f855a0bad457d7f45fa894fdd159bc310654f23f64303050c0c06d5a08c5238757b0e1f9856d2b1ecd3042adcaf18265fbee9621bdba4bdad3314e93541134d873ef378e559e126391b7d12553418ec885b1902530aaa828e3df97b574d40b8f67e273bd9496d8f4a9fee811ab825aaca1a9320e5a0b15db5453a934c1a287dd30656647dfac409bda1bdb36a5c43a3470ccbadb4054b8a366348e3a2e68ccd7c848e697805d7f109bfe60d97f5e2fca574506df2b92fe9c1d6f1f892944a5fecd48236f6639515a0e75b25d4e818bafc59e36d9f10a8f87dd7060432d5098ad7fdf43d4ac528a6c547d3359b03e7ae1106131617287712d5f4f49251cdbbc182238dcacf0e95cadb128dea04841f6ed17af6c15100b4761e79eb4b1b838f6ca551c7cad1b3a10b752c2931b90284fe75bc200cb960bebad92e4baa7295eb7ff5d353d990a58ecd85c3e92a63a838fe1cdaff693ff5b0190cce19838d285024a2758111cdcdd8a3ce41fa0314cae1da60992679951c672d16181eeeb806f2dcbb8f43ffd211c118bfbb2305ed299559a9e28fab409e93d6152821f903eb678ddaf1407ff930273ecc1dd8a55f29d232192a1a88f073c94cdc4cff2d21dacfc4e2720d2a9fee9e5947468a99d594ccc7548192deaf0dd1c8a52237243c78a38447750ebacdc1dc3454937186d74de6d129ec1aadbbdf2a1c90ad7e36c576ae64951ecfe7da1703cbe73cad24c52940bf63d6eb3bac95dd15f4b5f8cfd8c3ba0dbeb66c3f7814d93021019815f73d3036548bc89beee836b47b22949ce00e05c25e3b023c3eefc7082ac3f7a4a72dda989247cccf71e2182ac7e7b70fee55d03038fd791e65f0f194d90b06553f14fc15d32457ed39d0253d561e55d6222828dd3164d0018ac600fa9f168612a70f52ca262752a64722dddf234f653dee762f80897aad018cb09c756861a14eaf6b64e26f41e089e1a723d347f0a2d10316e486826fb9b1a30420316863e58997296867016119f67148712d816a27d4bb1b1e963676b1b273828cb1fa9ae75955b9088ae3f3b9922a770d5059c9fa748a603263d57e8c1f6993d7ddce58c50fd4824f454ff093086c70ffd935f78c8320a2b24087c5d7f51bb8089ce8a146cde102584ac20e4d113168842c7c403781fc495042c280883de640fc75582adb4be4bff539da5bf0787c35676df1930119b82b7210a78dbee8a0002be4fe6bbb71c95641b1edeb8462f756261894891d6e8f246d24ca47dbfd5228b15aaac624f3232077c6ec45461d76983500da9e0a9211a694e9061494423de1f3559da213e118cecf8d8ce79b982d92782b579e10ceccbc3a28044543b58c44aed7eb07929008fce3afa7958a3cc8499e428210d25b1e78e69bbe3df67cc4edcbe171d14a35c8075714bea7566199b7aec713be68a61f3b740ce06a67d1fa955b075f077a3c0bb0a7a32f8e5828aa90638c342649591f36b3f706fe818624aab3bcc6e2cd6425a36d7db4871a80126f15675186cc85eb82a0e3ca8e5f4097a2de85791f8ce788c2db293924716b23de0572b0195290a5a172dc74720e8f37b44bb404db7c537952b0cd6a4b66cf92503f84b02afe19ed7d533f4174a53927d2d2f7efff4ad65f5a4817748fcd035c2121bf729f28dc002817b78c16a0ea82086bb626cf8be5280bdfa69f879f2c9320d962b5e65fe5d1778035d06cff3f37d1e75036bb311cb318fd520d607c780973a13fc20600b37c7dd23d488634637c3501395ef9ac383f28d21e2dad0431ae5bab0728b33b072d967e0ed6772680d04b9ef60b4db350377e3098d03581e72ebf8c802f009a151d9928e15f5af0263f835ee52a2804c6ff42329778bd7ca429063f5962ce70434cef3bc2ffd724b20728f0920c04c163999e1fc2448b249d328bf73cc54937a6dfeecb740545b8e74cfa0fa60c5d03eef957fcd95394e4beed5d455cdf9307741620898906e49cdc7e2c55bd6423c647dc800352a5f8709f2759a5ce47e9aa45e7dfac9a4287e28bc341e417193d9d98aff3cc70d69f404a309eef6dbe84fb594eea40c8db6aec0657e065114313e88d95f5dab03cf374cf74a39d6acbcdf4f3f06d2e1418af75d188a9df9ccb3cc5daa6ca5e549da87d919248a0b91d8dd42435eb4d3c28b73ca99cc51453be669cd9aadd42eb15972e879bbb3621f96412d61f85702f9c9ebdc40d0dbff10adbe7c8dd579314dfdf05caba14345e9b25a03bc4f1e382051c700283cca9dee9c8a58af6da47bc7a7c1f757a6d0aac2eb88f0b58d86ba767636fc29e9076a169e902e6468898a7341337de42f327e32b9fa9c06accc65aa9f36fdddc2528e95afe264e9348152e6b3835458b9d1f5a5255cc7ee53592d57cb021391354e96b423e6e80c0d711e0d8ab300b60daa356eace164af932d3edb9785954e9f5eeb94c012ca1c1e5e8dfd307906db13db01467ecfb84c6ecc504fc37b7b990193827eafc3e839aea9de1cf7dbc63f9878705133b325a505644b305ef51d4cda17c9a3e027f675bd7f4065e20f9199549318e1990b93286d9ebdd797f9bc3639431c910753327659fc19f80548f66ec0c44757c7580cbf973e20f03c690f889cd8228e0a594e41fb1ee397db08316744da01f6b0173d719802622100675cf905384e58f508f1cdbd2ab70015fde6d08d4b75f608ed04d4493305504c2b86934c16b25d25151e497cd0cc5fc027536ccad09b05fdca7cc8128a73f2969a6479fb9495a6685692a311ebf9f5b5ebf21a57f7b3f6f0034466716ce571f6107f2381e9be0fbb2de3e2c3ac3489943a1deca793f8f0ad23d88990aa79dae10b5ba95c7f3edd8707817b9a3af4a34b491415cbc2571c8879e9393fb505f2d0018a42dcb9b9c7bcb6f9b4ca912e6db72e6e935422a8d80fe19c857477db6e9a0fc115d46980ef07d8df8136487b5965a15421d1928c40cd379a589c483701c46938747aadd96327c2135cbb580db9b87f8193c064f8cf05da5f730626890f2df65c5cbc2819d70b638e06471c0ee081f4ba1fbfe501aca51cf044e8917023998dfb76eb24a115e477a7511c4e29aff863fa2ccc19a65d7d68a58992ed82c5e695ef6f58c92099659947b6c016daab9d20c01ed236c47d60b0b8b03956897e1153cb385708014d4e7fdf0ead8d2f26e3fac7123cbc0e2f3b013304168cd850932ce1d0c4a7f9d71cb1936dc839b0742bbc18d06f6c42155f0f606fc7f5f454181cd537f2ecc3020ff23bdf3fac8b06a20fd4e8522a5d04449c3a9a5423feb43519709588f1f188bb5cf3b2855dd63ad128a4470a53fc7996a52d5566e9f39742823303ebb4d5a7113faff6b9c35bed0a157e88269bf37da769e0eb7d3a1b973e0312c1ff688d3fbae13e4cef07e373c02673ef5417a73d0b916393a2eb00eb815bdba088ce06d07681b9a82f2f2391c58c8c6d2129da44ba2afaa730148420f31d522bf17e32d67f3724da79e5fbb7e0f6865cb8de5888d8519810823c8a0b556c9e5f6a7c244372c2e41240857989fc92f85f47e7f5b4de86f451bb0195961e033be7700cc7be5ff3f1e53752037c1cc02a82a8011580ecdab80fe1689446de77b7fd756464d5f44afb37eba7ebd970d1e3d41645965c493ecd9134d892bcb40e3503b651a54dbb1ea94483ba38d47f8656fcdac6d1b7706eaeec844e13cea65eadf4bee60691262c3709cc908718556f9f997b33b19be513ef085bb538deecb9947755bdfe03025c9331a62c6a019056e82db4ac046ad5dc29f98e67bca4b3fd0ad946453c82ad38a855a13af7d1f51f07d55523380f0a51237372cc9b2a75789a2a10175ea28b472756c80a50e4ae3a5bcf0fb02cbbfc517e1d0eabc57beb730149cdbc97b8621e0b3c6d08ee855426da6b7034550c6414dc50065a2b9194820cd55eab24ea40b167b90565cdfc7fcfe4d35b195bba2a6d8f1a90eac01635d32106f3619f3f6e32fa6899c62b2c88db9349327a0b91f23a95095c3b5bda65eb71ecd63e919c93afb6c52355bca91b6a86f6824c67313bfbed5de7f78810c9253f302484b4017070b7febcee20fdbf0d67f6648b14a19d2c8f743e2e71ab1e3e9a0e3e459ba2223960e5581f852a095c2c85e40887c0fad86125014b7d5699e6fc5147bf8c028ff7ea940ce11adf03b856b3b5542f214e7c7e5f8e844eb6cba0fe593d7cef6b35d94a8df9198521ecb2fa0b7dcb77d51d31930ea53b3e658915e80f86439c714d1fd7581c19cc424ee1fecf72d41ad36e58131db0522cd0c30d3aca0d4f6029e8ffbf83899302920f70c294431c3541aef575dab920b5b814925efca721999df4bb09bd62af08faf90e8ec277585b2c9f693c081d9372792fc7eac4426ad6db0b171a5e4bc5aa57b9a485f5b2f02eb69e9b106e6b0764a8a3d0bf5239e12d6067e615754e93dc5a68683d80497bf7e347f2af5f89b268b3b8fd4479579c39ef126757e5ddad6af2af45144db719360dcddff38e446b28c0ae7af845ff9d81822968b556b79ca9e47104197bc8525e253f9e9af92b89a21b7938093fb85091f8c3e359e6aaf42dabc41975e80192e1b94883457ff60556742293865f796869dbd67c9c9e2ed283ded9fbd7c5239cb144a9ae9213b0c6d67ab5900c5f15edf0facd6fdb897956d7e0d15a68a79878845fdf467410563d356965a61e29c869a7d4cea1a3a7706be7e21227cc4f9147c3a8904d28730a5535db60adac81ce0aac32d16058804235265c5e89e68e113d4ddec569ce23ae20ff171211af02e4523fb3b7b197845526966e8274ad5cee30ebf4d839c212421d1fa415188bf63a2caaa2fcb8b68cd5c1e948a07bfe898b6532bb32ba5913323fd4c7e4e0f306a61ab59cc0f6986a49ee726691b8b1f83ce472db30478596b400c46717b8fda46c10a9836e86591f842ae08a3b3d3582ff42798b576040d29379bba63e3a843ca347234237c10313a1197d4a3f6c8208e13f3959321157f257a0dba6c6faaae50e5bd5037bd8f6b24c4b3db3354d88c5c1bb8bd4049dd44bbaedba02c5222c3502d7dcaf93e286f5efabed0f8a39f29dd1baf6746df2d600a4d148eb205c42c8ca903087b28edf8b3ea51189f7eda6aef681445344ceb6b948bc6aa3ac9909c89d9260220ed552db43f96bee8254e00f24e44d216219c56892dc0a37bb6e85524a70a2670098ddbbd1593010aba01ce706d527211380ed062111e375688017ded57078604285d0368b0ab9b376b3749a23807f22d408e7cea1c76b533bdcee8b8899688ba02b02a4b8ef56f2aa4de998d416dc3d9962b570ceaa1d500179ff78a31730e257093e9e409ad75084113fa3a1fd60b100bb2264b9dddded57dd954e73a4c78bb7b2be2f8107b7f311308ee6d5e57b600943a4cb23da06fbe506d65648c8c50d6e4151a08fb70f10f4fcb462425e044e3a2844475abdb252698c4f525e37ca880d85c6eea9de9af6bb94be928709b531e832fd628e88437cef00a3c74d1fd940fb5d4de1aa2786fc0cb0d88e4188641e2fea418d7f3c36bdab059041b0ccd506aea7cabcee1e53f7e4776b09425690ed39b5ecc1e8abc474ee3d6a88527298688a52fdba8c689980443ad183bae904686c14a1c6a8694e6dd2e39d67c3f77d162e55679d3c1c3816893e8cc78ccfffea36bea93a0b51990bc803a917fbdad14704b687810b06f63c654335dda9220966dad14fec9e4581129a0a5351373136cf40ba7a2fa75e7371f4c8b8ef1f7b217a71e94d1a595a5ec492a3c3c45e9ad7d36fbb87cfa44b1107fe371b9f26a05e13696b762cedea3853fe1699bc307898b372f12658ccc6aab80f90efa55c55b49b5adab49794cd2d468fd9f3bf3cc9ae5600e0cf0c90c7bee60e65102d61861638b02870529aa8ed5e34ce70cdfaa7171490144605c15aa980688de16d2442cb776e3e88507fa1a7795c9326e79300f0e3cf97ed2f6df41db5db65baf5d3daccc6b2b205ddba304bfc32703f3679e9afc4f0dac4a3fef8a10bb1e8619b8c264fd6461c3a463bc53a786544058eaed4be521fdd6aef310a2d90b2b3be729c2334990a47a16b7014df85e949db1d8d427f34d5aed83d120fa84a54396682481df74007473a51d814dd365ca50c40341663a4c2632f70439c1a17b154b680018cbf979dcd051ba6f814a5c1a5c8596a2872ceb405d05682ca397a65f8a9b41d95adf5a3c1771bd90f5d71a2097e34564033f1dddf41ca8410d6c59015b0c0c2644cb65b83fb2e3a8e827711c866257c6db990a60fb6a1fd165dec9f5e0b65ac97ef547ff32aa91bf0ca7f33dd3272e22f27c79668a0f5ff083d22844f01f1902891db54eadfaddf7d74a7f452ba47a907bf0453caf73c2cb571b2bf54b5f9165a8d17e86b3a5fdf232a1cc7a96f1e39bac3609412c8238639a7d71f7f9c2e0d6a03acd965b47a7f4713d81a833c90ca2393ff16c10a397e966f816814fa31b4f782493a96b6e00747d4ce5a43c8311206b3fa38a052786e3e8e9ac7543d6f1435d75a89d31fe9db057d31bc00d94e7b4e82b9c1e555c6dc5dd5b9b9e8d57b32494c11a992eef11e5cd42c9f2e6db943d983314393a9d3e2e41358ae5c6df18dae479ef9d7f4cea9480b13a3d49c9746fa8950044f83f6d853b3b95dc6eda2539f1f03a2d807c715b743fb0c86b8c50690ce15aeec7570fe6239dc62d84f703bea4271db515f4b6658555c4ce9a9a8b2dcb90583cf2ee116686506ff821eb64926747196e68dbda90b25b759f22e50304725406b0e2b89c4412e436bb1a6264c8a5c20816467368909cbef68f357f62ee2b9509e743da097bb0a9a4f16c23527e3cbe6526c7e971dba105b78050c65d2e77c37e7b0bc0b416a726d34904b7061b35cd3b1cc36ca7d624bc737201cc0741c3952d6d39bc1ef8412e5780f926cbc40fe99dbbf58232bd775ff2e0892fb0d515245ee32e802ca270c8a7ce12dad0ce2ae96d44166b070f2b7821e098d15791816e44dd04c687f04911d607d368564e9d3ce9ad12ba2dcac1aa6242a7ee35375b00105e6029ca054e6cb36cb3b075ddfa81ba4d4d04851f6a787634fa7683027337c3824088af23eec5da6b764cdebcc41036d4a4e648c020c2dc74d781308533a893f817c7a02d37d7243da984e93544af1683c0b6668663c63a76c0839b35c955b6c2aaaa71f60168520bd96d6d5fd0d2210d660d00db79dbcb91a30af21acec152ae1edb44f8a2ca06f2a23423fe599c46c77d604cffee506fb0fda676ede213d31b77886655d6590220d06dce703e13080bde2ba2c291a35742a4479be21ee210351a6b9a467c1fb65dd7e5103033e9413bf0841a3bf5220f54e8870433678b32f55a34a3da656d3d1eec4455f6df4eb2ac3a26b51179b168e63bc36bd5856e0759441661812d6e5179f09169dfbc7ca31b1b87801a82f95e74e57ee15b7900e245fea2624e039c59ee7b5e300e58079594f655d6dc49694fa7af9fd2048d7ca4b134f3837bcbc0f987655bd44bfd49dc760ad7d0f250b6b65c64ad473c5df767db72bd61b189181b6a8dc7673ffbced37165c971f27c7704e466a55700bdfaf8330467c08890270f382635d5b8b3bd265dff8448802faa993ef7c10a11149bb25a36700756f0af5c645667fb368c8f581ed1822306c7eeb91bd9d281a65ab74348051dff65f0da062acb4b3765913b03285e66fadec1785e7ddd90c758b86dba39ceeb0f48f3721348defbb8924c3a820a359eff02548ebdb96a80dc88ca6c11d9ec767e516801145a3272f56a8d3598b52d0df1e2393061a4cce7c72111fd28e75337384fdd0c2aabf6a347e34160d4408768255b0f8c804f1fd5beb28553401e48560bb0fa0fed92c5480e35bad3e1ac863af7adfd09241e5bd7f3560e34d6cb7202ef7eeb76faa4d2d38c28ab69c740a9859a70998536b0be66afc5d60be8d6677ca67b4e1948d97b378370bc3294fe2719e30ac8df2e313a52d3d135f762f251bdec8e58eb2061176156ec76f16762e64e864f4399d2a40fc3e9f1d5045ea4d659ce2164e11a7c0c23f5f60a64cf96be42af4f2f3c6dc706fd1342e58eb2cdfc1f58e5ad9c2707ea819a8a855d6d24d6f14d1ad1b4f6d4be96287989be44d948920d183127f6251ff11094fbd217a7668419675bf006d22b4eeaa74aa0c9f4da3deb1c4992fe9d2d1047994a76941557312434ef50df4ccf0ea6f041a4930a53e7959296c1009308189decc07fe9fccf115121d6de5443f7a73be3fd085179d24bac1ad7a13c2eae150b2196722edcfe48ac7ef7f07a9f03972c33eda50a2eb0afb6543db143f61cfd77d9d6b3affea487cba727f46c89154fca62c9cb78fbba4b7aa9620f0d2afcf51ce3a58967089e56b819a6697b837d6659a20251bff6401e9373c2df0353b5087a9423f659ac380dc392af9268d06b89110d591dae3881b7a11daa9eb1df754727712d562b90c0b416cfa7e1a94a528dd45a475d9147b8c235272474518e771833cac6a96cf25192f628bcd676af54e23cf3f60d1031338425c1f8f0eb75b801021fe6962e51865a6223fe65bece06091b831db44a7e51c2621a09f41d50c332fab9e535b6cb24353464148a63c36f69199b274d75d346e6d65b42e3b02f1094873cae84a7b5d2a341a54c4a2692b2fe0bc9be25d84b8586998c50a6d9b5b54706b1a7dfc63fa1d9b9324149e3a8660e9c2ee5c07cf4b745e7cc13bb255f8157945c04caa534d909f9b8b6662c843e07b044c51d65e2bc33051621d027f38994969c327341b1086eb42590c927d52f4d9f33a4a9bd3c99dd489c6f182256e0bb801fb314d932d2642a273391bd7855f1f70a27ef54467730b30c919fca243c1009bda5136d59543a63d7db3f1893347e6ebd616cc8cb8da4ba9d6838021e778f49b6f353f0bc5dd3776fca91629d5e4872a9336112d2ac1aa810eaee66e236fca0990851ae7a01c0035b7594c01cbd86655096155ee46af3ac36ba97172d206720ffdd0f85756fceec6f36c7ecfd32d43977a40e875c2dc8592b015a5b4df0172856503b3ea931ad7c57e142c97ce8f50c7e7c8cd7ef1171bf5900dd060bf67350fe21fce571517982cb5f273d8b09b38ffed420d55e97e64ac98597aa62766fb1346dd40398647eb7b2c85eb44338f482e8e265c11cb4d2c42e31ff68a57e8e69f76661d17af07f6475b093a81f12d64a96fce8f23f04841c211787cca2d50f077394d1804a553d933cccef2c616f5b22cd913aa0d0084c378fec8344796f09c923d5ad775151f9a9a333a893e12a2add2a5d6a870e99641f481523de6b9363b9a8331d2c927e53cd5db836dfd560578e5c0c2a91e3e9a9f3fb9eecaa614904b74ca62a276655ff684b97243ebab8ec554eb2dd433bf39fcbd66c90de8e519f6ccd896f292959c1e5146dba86329673cd281353d25f8c383adf098ab464f202e9cc1c1831015a535ae23f6483cb1cd925a8e52667b77398541031d1e3bf681b67b8f372d374325c561f9b7db076c260c49e9b25b76ca4e11e8bbd148bd63cb7a3bfada0922a910f4dd7b7a258db9595f76e76d0444f5d176ef41bb9ca8d19ea379921c40e8ca7982202a751cb7558f13378f0a61f1f8cac385a32e296f52ad3bbf303e9a45b0f996aa0143c71b055ed79f92d5ddf94f9cd288ef41d2f5232874968e98ab544bb1b025112e6091597b88284ae476f11ad1c5aa52f406b722aaae92b5e90d11dc8fbb3464878f72b999a3f8b5b3e865cc670e3007bef9099dee1fbb4f14eb1db2212a8e11e5249c02996951d402c472e0f8bdc78d09593fc42e9f98924ae062c1916ce38a60141406d95b44ee27d644e24aa3f1ec169b7d0f2b91c305c3e0ee0179e806b0a9f451e21ccf10d14e02dedbd234d48393f4ccbafe71c5558f93b7e3c6b984650bd6f15cd852edd4ea22c4bf1ada22a48b434613b8d39ca51072035dd970da6a886e87671bd1214e644a4eaf95963b498ca2cd9c62b103824528d4386b3dfe1ed5ac90aa19ce24862824ace929b4ce202a805a21d3ad3668e06e7362e0fa71af70dca63a49e4142230535b8e718966859b1f47fb7c09df02bcad31eef4644402665bbafac44596bf4f5195aeed86f599be3843decae8a4ba63c0ca9587994b872b94b48ec295981ea5ed5d6d1f6864b3e695024415e56a69dfb37ba5e739e28161b8a9ffb965d746f8e2a5efecddf0fcbed2a0057a0f165ca9ab8dc58b182e52fc0de95085a5586a568c57ec6ab9e1d9e375d195213f60fd1d1dc24cc4467f0dec125da6766229e8df2bbdc546e5c40f6aea9f7fc803767e2a21f7d3fdc713309b0c83451e04ba0f09a7987594234434cf1bdfa8e4b8aafda0b5f67c157c3f39e97d5ac71a4dc391746509f16bcb06a9e1124ba7ed7d8f0d5af4f9c9bec22ef95bb3c07a286901d3e3fc317b6b7e8c0eeaf24e54a9bffd1e4ed903546d5049659d90446cf8c8bebb279c7e20feaa3d1dd7fe70e2e58809d769aad5b6b612783b6de9cd86668f80767027a8d7f1a898e795359987dde6a2d2bee3a1523d98b7184c80f8462074a8fea27895cf0b31bd66e59d318ab640c6fb82d97cf5a44ed1b9b78864fbfe0b21aed69b73b76ebf29974cd4bb12d97b93a6a7682ef854011954adf14d84baaab19ffe997919f6b1bead7f4bfd1b6d7c5993157b44ac0f406850917bf312078855474c5cc94c80279fb9edab0be152311b9be62426ac88c8a10be8871f380f9afd76aed816c72218c286a6d4d8a02dc7e511e9445e5cabf1a82d9941f73bbbe831920ca0b400e8f8a13c02dd43b9fbc5cb48c3217835e5717647a51de9085cef38b17341b41928b8a2daa5b6972bcada3445578d580492d61e3908c533667a0017de702b432dc5f7b895c27e6744d1ac423673cbe73f15a31d27a54493599a84e8d2cfbe0dd4ef98519aa2f534336684787592e3d43910fc9805f5ad0c556585cbc21a2089c52e7de49b950e14070ea5ef86906d3a54df38dfc4878d4e976192bac98782a7dbc375f86ea60bb4a2779231eaab9889b99af18c38c983122e9a3af5629bc5897394e9aa547bb63ecad74a53665a3daacd01deafb7f11e857d0635fc0f45a2a887b2d9a8254521796c85909180078566ed2a5cdbb837d8bb4c331bab849e47fe613fcca4dfdea8b88f820cf4ee25c9679706b4d885171fb70ee8b59aa4d46baac226a9b6c955627f2bb43a89149cb079d23453ae137cf367b8a930c7cd855a0f206110bbdabdd9e69b0942bdfffafb4074f3ef8c55d499097abfda858c768d6b00d4e3d744a9cd6bed708e7115a3b74f67613729de614232bde74242f559f6a92507200d2668c4b99e5be2fa6bbe5c2d4ff9ed2c41e93d97bfc230849ed86aab9fc9f724b2e3fa7fd2aaa646eccf74a36f387894260ea16dfce713990e3074e2a9e8a2988196f57ddef58fe71abdc8f7446ffebb58fd57b4920d21339ac71a459ff46bd1304e55a9cd32fc933386a33dc23cd7b8de81a8e762a031fb1f7243c6ae2199e9db522d4f32989c51db34f325f1168e8141cd671d5df6f228d6960d77320b184fb0a9dfc27dae5535f81bd7b68cfedf264ec76357bc5962406bd2ff3f3dccd2485d84a7ea2a060ca6583c5ddc2300f2772afe9a1286da675ce9966db0e2f638a269770439940ce45c3a8aca48b3f20057073a84779211ed567a2fc023e39e7b33992eb82595482964cee91e76448f14df191185e9fd7f4fb7c2e8705f3b0f2ced31aec17c6094bd9d70cd620d79f070b05e62fd20780ace417ded0e668a7cc7d19abdefe6758b22ed282a40bff789ce6be34ef57c011a7844e071f95277967959e16a3619dbef099fb6f9b4c8ffba2b97205af0cdc18693424e5b241969f57c3be46832105dc3eec18eeef02f9a68a2604cc0d43b3e72ac8e473839c31b29faa8e924ad249cedf70fdd32f76934d307982baf794aab981fec77248c28fa59d6de0d8e1b2138194cf57163b790aa86420c4fc5430e60539f8f215fdad13f8620cd1ca92365b3fe174935707d41b2535e7efae1dc2a1b494a48ed76892a2f293d984d643d5e87314258a730526d3ad61f27a9c9b1216d094e192f0a9a48218dc1c5ea26a77d8374635674980aabcc8505650ac3f9721fab0cdc48c94ab0dcbfd331d0b1f9474e64cd323ba98f90381674132c39b7609a2b7ceb90f8460188355d9f47cffdc592c5c881d170bd338a211cdd20c3725602e891a1e7245177c54156bf94eb0a4c598e76ef264abb33f20b7c31136d0339bccfea18de20a265a8405ae5f348d020c440ec8ae5a797fb3eaf56a0135164f7d7c6ffea40623912d201f785aafb4ef26ad79d0e4e05e6f2b0827336caccbce15600c7ab1da191a2b743c77458dfa3515d678d13a85d92b7126026208d1563c33d52b9c10052a9a47cb2e3316aaef0baf66d112a2c28f4364716de79e3a180946de44d360c7ea1da05992f99eaa3adcb301ca2a5cc707c1b2a3470ff4e90462df6d967885f60938a1f8644bc4e2f339e597cfed85c1f44fbc53570fd61d75657235d9f5eb2b74168a39ada0f7f7bd040342959aa1cbfa46d241853e9a74f9f20db9180af64eac6b916c286a2938058696fac6e746ff05ed7c768b2cec225ac55bac5e381fc797e9d0c14a8f0e3aae40366c51164145242978cd1d6a67a622b3cbafb0a11613e30a76fe70028d5b9b80277ba8a8ccb9240be24d7cdaec481837e35be974895e3d1039a4cdd61f660db91033b507fa2e0681174eb28165857987975be5ba41947f6ad81e551e180620c376cd085b797334171206d1348e959a2aee23cbf31b1d5fbd48a37d6a6cdf38750bd0fbcf147df788134fed1f338c1a7fa246e6abca87068e3176cf39519808d4509d7d16ab4c12e112c3f29316304200063e9f7ebc7d77ed1426ed5a42ae45ec8085b7b7856ce41ebf14edba4341e720eff8cc6ded55681c507fb1f201412fad04e890e31bcd944d9459a8f4a52b1f92122756f05967402f139b63a6075d505f8dbe605b0a687f13a5f229955c601da52c4dece3ac2721447021ef98b53f5fc1ad3338292b5eaefc4ae28c86e6baf42c9dca4e3a194b093a59d7cc266cb5afbdbc5bf4cd4bf6ecb61d1dd4c5d730186ff942a4fecc85fc98a929533e7922e44389b94277053deb046738de0b7958c9a921526a1af3b97d39d0e914eec6f2c577c14cbc63a0b9b782175fad7721ec5c21adffd2ec0333e973924b2ba404e8864692d01ed2caf1632b0d62f65b89c21c7996c9a2bbc37097aebbc6a79917fee78ba79d69e77e41b478a9bb42d7760d00295b15a08d13db6e965808d3a1a486a17ba35c6987c09cb6d85a857bae9d9b622d686a118f3b3c7bb2e6d86bbcaf6a5286b3e6e3113ce559f7de5200136d8323c4461bcbb6ca2ea05f074c22d3b3f3f4b5adf3dfb633ca8e900875792d5af7eab1f73eeae9f96bcf9786da1ea001e0f4acc8b43738d4ae5281d1ed42e92aab0c38a2f9cc9314c843faaf5b2c9daf8f820918fe5180d948191bdcb81afad81d5f1a4be7c444425378503fd1722fcfad308c4d1a7c91b312e32c0a0ea2a2080a52c249828913fbcec772a7655b4c6f8fd435a0842bbfa8ed18e70f79a1019e1f9afc45f6d98da4795c68c95024dd6e3c553bfced3559d0b8e7d11bc421479396e22be64df3f285f47e6807de14b6a3bc9fd52bf4bce9ed6f20f2eb8bba8c6ac33c3951fde2c1d35896634d7aa8fcd435cc829536ab89a150875158313fe3524f9de07d72112aa0d33b074a61b9108038bdad70b413bb005ad06695b03d95f9130b4d57b321cd4e0b349a095f7a01d8486d0e0ab8b3e6c8d43c1b0e1d4d1f21c85cc43dff7fd8c8b0dc7942cd07385842fe3955ce9ac914f6391fc022719d8f07c3f3c4b5a0f0bd734c9b770a4f8b6932764ba78651313c649a4e2d8c48a87706a23a4f1fcfa38100b19066de32422cbe22474712b8372c6b9920bb565cee46aba7a96984d8b74fb25a3e261e3f6d0720c37883d00d2af1374b091aaa233ce579f0c5e0cd5a0d0e19abcfb64146ff1e7308c3380436f4f951ad122a47dfc3839609a4849baccb5464fad29aa904f9ed5d2e346709e5780fee39923de79b6cb96bd96e8c25c683574ee7ef3e85447844032017853576164f6a9a029900d272b0d247a3d77c283b8a632747c926a8e92c0cd05ca04f4ef4dd9c3958e83e4d008254965d6f5212195ac5f4f5987b212ad68a96fe48dfd9dcdb1eea16f6394f4926018a3a9e0ee82ae42e2b497e07e9d3d9ca4fcb3655d8911bf981b7954c5b851b177de652379406a478897242a0d7acd5bb4fcf26f89174fee7b71e203a1fc294d513ec4a3377fa336c682ccbdbcd307df9a2838712d65717862747a7da1c877b5b097fbeb2eac1a7cfe52b48f8d8f70c81095f4fc08e5abd77083fdb4b251fe702f0059fc62104c77e4873b759db8a8b47e3a330768beed5cfb40d122c4581ce95821c91b6421fbd88ffaca4f1e948b1be67ac5444e3c4097272122bddf77ae3368c91d480c3026489ecfc237c519e15d63cf221984ec2e419acc0c44744de9b332cb0bd9435c752f104b4eea64e9fe55c066ef4f88179ecb62513c184e865267bf33a409948f4940acac0a36adf4adf0d84ff3025f0a2fc8421a81503042ef3ca809f3c7510c6f73623247cd56c1ee4470a49d1dc0865df9e2e4b2a5191187a387a1e72922157914edbaa074891e12b513fc691768440fb0f6905d655b7d17196e970956a6ee16a3ff891baffe142611d44b29a71657c184cbc6efdaded538a616047032d6241ab532dd0d4bc516b99ffc213950471c35f4f29f723ac9b48d9e7bde083a03ed70b02a238f2e9402d0a7e67d95585c295c1dea4c26f9d5907fd9f2e11c9450978e39b06b5380a53c9df58351f33e17a9a57b374d6dddf33c8b311caf8465bce378093893a98cb3a14efaa8b2a36285597677c3e667cfc872e962c42bb624c7d2fc5308b780df37bced072b15df271c8d69704879cfb0bed3d53fbbccddf737462ed2d9467e4a274450007abeefb74a7615e848d17215f75420c238651583af85d4726ea7c2f1dc8a9fd90ae021490a622b7a6cbece44635f9675d1816f236d433b0843ee7b2635be8ed0ad97e82a6d21a8f635bc14a5b782cd2480d59231d3ae16acc822e871d2ff9447d11f59b9ec0e1ee677108e6060b5709886e69430f5daf04cb41db06962cc4b0d895f8b437d0f84094a0106c2db6c660dae5620bf4e598cb527f000b2e9571f7167c860af8320c7412e98984de06af8ad784ac265a90997c80cf691ab3257611987ee83dbf940a6e342cadab7567b0e8bce5eb36f8d98f9f5566a8e75ed4fa59ed877e122369eff1e2bec12c32b0fe897433f4cbbd3c8c9dd884f9d710bedc5bb7cfe6c39f87cbad77ececf0b246214b79e5d94bf85065c355c55d2acef6d6f0c03c8ecdb123100a47a31ad052950aa11f8d002553f502f373981c7b177ec1e6bfe5acba365638d7d1acc8ee7f2393f7134f51bbd7ad2c2994c2612ae7a901bbfc434b7eb68e229e49540453109c6734a78e098607282658db15bc67ffb0f10fc315e025c659b145d606a7f77c4ecaa8d7de4b471ec19cf82e3a96de3545e14c8be28368a5719e479fd0432ff90d87bad26aa69c8d1a0a77100aec8975688dc7a5e85ca74b5f923ae242ed8f0ba66a2ceb725b8f67f39fea79f6e3ce4e7f8483f6706e4868bf0aa44f79da7cd78122a841e26ba43b41de7daa0675fc3389dfc704104c2e08230b05737b27fee1ddeafb71dbb07c698e134922e3f668519432be7446f4939af08c5c8dda73c05d117372966d3ccc1bb624cbda3e0e10f92c3919c377b9c82f5fe827ec931bb5f857a2f3665ea9c5ac4d7c2e39073779b55f17a2a7565c9f6e6c7d6321ed2f14501a0ea7c4af0fc7a9b5ddfebe2f664a2cc2030c0e475550bfa91bb68b9d85ac1b74adc2aafd7e1c9baccd65923cc32980267c8cbdf3d21115df54b572cfb2792858e9cf879b54b8f9a75f17f49c44b7300d3e966802b5038f41e42deb7f82bcb2227fcb5b8f6d65879d5dfa7eb4138477e0583b89668626b2569a6e4b79e70349bbc1cd3c8dfa4aef55ac1a8ba05337beed207070780b49080b21fce59fd60d3296c6247d59d124421a689a8896dcd798932706814a1f0344a6f6f2c7831e56635b72c73b12ebafd2b1cba54cc88530549046d358b5e30212facfe25dad82b31310e16794bb525df5e995e334bb52cebb83372f28135bea39fea0f7e129e0c6f5bbe6e81d6245223850a9a70d5a4d82458c7fb74952ad7a66f6e827c3485769bb775c8b6034e75281b5174f95213f97bcc8e2d03bc9a58499aaa02974554831a80005b71273ad7371156b36cee764adacda955353e4ac7fd7ffd419bffdf501dbce8254fcdfa1ed37873a778c81840eba4f3edd42fb38e514b5588709f8ad2c1fff9c2546d3773ab1ab78a65d303efd5675a0fa801eca41fda808e411ed579c31abc3bd5db7d37d6eab5b853606942c2baae566417b956e9869b21b27defd1cb73e512f944e152d800df9e5dd377e6f36bfd2be2befb56a7f0f7be6438937b88c48cdb9b46d95299b37cc729084f5b098c7ad2f6f3aca937790d3beee15ce1d1c78c6fd5ade8abda67b8570fb52d216952ec62fc10a48a957d5e3eac683a96d997d9f4fe6b00e30520670dae7c14f7865f39b4f79ea944bd4db336ecde841378488eb07a2c771c1f3aee3719c04e4afe7dfcefcfc70a7ea77b5906a1694077b22c6729159c4180dbdfe18893ca490adc2d57c84e7865c23a38a0b486233b8a8027b5f57145765229493aa32a49a4970e1c01e76b3b513377c75dce0ec26f416dfa8a33ad45cb638808555debaa8bf42649ffaa98d4eba542e34fdbc0ea41cb7a1bcbda2198f3002ad7ee09c85c86c0e03ae4c08ead5d0c52d699de452937a8122033c5de965375174d9f60e4bdc9fd335a23fc5eeb0abe6ea90558c3ea79cedea5dcb044c3172bd5e5fcf2fc92169432798cd261760e7820f40eb4cdd3c8351368d36108b3d8072d3701352d13f27eba02dd4be8d13f14dd20bc8725e3dd05c2df6328e8ebafa7479afbb3730a67596853ac18a2b3003944e13fa81041e2c35c30db905b74e25789b1200376c9aa942de85c36ecbde641d747cc235b18a8bda6fc8fffc71f99b017e1524e5a9ce0921f84653fe752a1b7da5f387239b6dc7a0c592837d23309866c9a0517e148742b82fa6c47d6e37cc7270ea684e24fdbf9606be7f77afdc9776d28ffd8167e5e9af72164d6a5c751a2b88937a632f1845109ff9e46ff9c70a9cd6e1078d5ee455f512edb94e50ea060da4894770c012d7a299c6e4b3bf81263f5efc144679c922387ffb26178cd36eff51fe3a5ef20c7c964c3b8bb207c5b971895bb8229149825f8777d531f4f91322ecec2a121695801d1bfe8bf6bf268770ea7eec60aa95c634218c9bd7e735ef88b77f652f2fd4e9594508c032a52bf13b9a9c3b66c631a8b3afe6deb11edf8e1fd641ec16786a394c2d72db9b9a135cf077100f24cae59df1a1c7d079ba97c07b90b976adba2406ef70ad2b05c8bcf5ba32de4c04aebc9ff72bc7256e2a03424e88e6d5e664feb3460a01d5b90b824e933b1d116e418aa251c280af87aad65f143133e95f6a4a1867cd46f5a4c859d749ec4a618355f5d91ab03d54896f2540946e9d16f70da8566be3b12266187c69c713feabd805b0d11205b138c48cc44654cce11e6a92cdcafe8112e387747624b44edff64f21af321666c0ee86ca7e61a24871e4ce1e392d75167dcb2d09bf0831563d1ccdd85cf23469847e60b69b89f616379ff375e0d103014c1dd6000bc2fce7fa5fb5704b45c941ee05b38be15fe9135bc3117f3e686b644ef8eae6cde005ba54c08c49fe841e9f4c69337bce518cf81938f66b651b57e12fd661985ab6ac1237c936e0c69fc80d31c8216912b7d569b79951ddf1962d82741593017b49387d832e04c4af981fca92ffa2aa035d9bc1e646a03d26dc71253b33c44748fe6f6fda9d015002eaed19c262225cad3544f3a1828bdc2f08ce3827589bbb0e524cc8cb79788c370759a3252286c8d87080a5cbe9a97b3322c5f0c2258c10c22f1f3d805189f634e1ad2bdeb1a9d4e72a6ac83d9cadefaa33774c8d9b67265e3368e5b07bb017577d380d64649b377d9d891239ee8ae8cd41c69c829d0dfb3de8966b6c36c6f5d4ccaa80231ecbc5a7bae56e3b678248c47e01dc8edd080489a28421b9e72ae9159e5e5b1520791209fb0b1d2f1f23e424d0542c636c4f309e68f8f16398d838ec8b4383a554896ed856a77ee5131542da6fede294241eb800880f9bdee6bf4952ef35f06a4a44b9eca706fa9afbb3f4be80261f7889f94b2e708e86e758c09632e08009e6c0a1dd43a2652419cfbe47c9ed9f0be8c180df5b63ab149198cb52e4e16f0f0ecab9f66248912a3265d7e9d88511fc192946a3a17c75faa8a53fdb8789544a230c63b88f1c809894647e41bad10b76754f9c37a3f980208811f5bcc49977e4a5545601d87d05b2c722e71ce1fd3cb8baa19dd01e5dcb17428dcdf709debdd6849148e55a7d3036a94ae8ecd4f7068f6158a34b4e60aedaa953d06f0273e5b9b4dce969890a4ec5e7e4d2a6adb717d5d8c7044478b0e87ba603434e23857b9430f8a13c6da6ea9e990505b67fb110adfcb61e7361b1c6047f73f48b7fdbb029663cfe8a88d1521b690d3af4ed3d95d82eed4b4f79fd47936403badb9a21a436270c3be9c93e0029de44a53f01ad05b5045cd3bde02f71c7f891977629aac466059250c1d37b6651f243f30a78d8b3de840f3974d535e55b77883e7faa9da31ec132a771dcf419246374c45195a3186e8e157497eee02e5dfea2b200439cd2128cdae4e0ecb17ee7f83256d06ba197710fd44c397fa1cac1417d5381e52dd5a8a47ab947d5890f221446e87a08b4e849df992809f8836b9d92d0516d11d5df0bd47f8cea68a2324cd807767319cc6e06e37fa4ff1535fc4c214c46aab2a15263fb2d2844fd00365c6e0675af40427ba825768cd865b088fcf8356a78f533673f0d4264265145ccb71628bb858a7fb486666c4dfc7aa240b0b46831f39e53ef0703a5403b3dc59de538fae4472ceaf0fb71ca4d64c4b335be434dcc5bb0a139ddc7f611cb36d0fa369a17e6cbe61b996704ad8b3bd07f9cfec017450a39d5f9a88bdc00a7310bfa03c66abc183532a3fbec0069752fa710db8dbac007127109cffb44f26658558c41f6afe7966eda4f885ac608a2de0939b8cf58fafff97c344d8d184497662a41620387bc9a5a5a768ec4a61f57bffa65176fb5a3e3335fc19d0bb6a95d13752fd1392e10fc6ef4d3df68a2513b4c9033409ddf7eaa80bdfb02d3e929ad18374ef2c4c718c1a8cb1e462dd684f29cc16323815608e8c80889c825dfcc231094b4307a087389ba0a348e00c8860c5f6de81cc6941bf12244927723b64b54b3e5da889fc14c7957bf09bc2a724fb20a0126dd465bdab62e0bb4750440d075a3e34247a7a1b530ef46c2369d4b9da42fce1033bf81834edc896e42ff1b7ecfead731f01dd5f795b12d15c508c8e188c3256b88b5cc5923614262f59917b408ce672d6cc79a84c10ed70ec75f01a9578a60eee75059b7784977e4e0410e993042a9157a8dcb8bbb49f3045cf0fd34e11241528a02638325c3e034180d61a9eb9293917d9a62588628d7b104f0d304a927ac01de143a6412213a72c2f7304b4c1709b23b4dae77f905c1072ca35472cbbd2ad2c30e1dfb2cfdbcb70ecd04142a5695161334f43749df4f94fc9e82fd2e91f15f415b966cac4e567caa02d8d859c46982b32cbd1e30f8f94a86035e109280507a2376c51a453af8496d2a4ba0f56a38dc447e8d04e5a78265199d9da7ae6b313c275e3ab5560989762cb4a65d6a38453444c11d7c51ac13878caeface59799de36f7da453504111620bd54faca00315c8c409b8edd47a8b993617138f8c2bc2a012aff53d65c1dab5a91df6f6ee779ec181c2940bf166bae28564e7c8875f2d8a4a01864ebfade8b9aac54dad1c0bd5a3dc96b1774b88774de5045d5082d0e57f11f8294f302fc464a36252f4e39c3ea007c4388c435bbe05819f12d84a58f05ca16124194171310e3d35cbad0dff5590220c4cc219acdd9c3a9eec0afeb4cabc45f185a6c5635f4607a19c8d82e6d048c6d1d056bce6a2ccf9d728d4aaa890888305f927ed4991ce47830f7e81252607bf3f23bd4d23044ebbfd18d62b2934f513d0ff95af79ccb15ca5c2357995e055d3b042bdedaba08279c6a660a4cba5b3b8d9830ca6d103ed891b26ac505de5c75c492d00c8dfe04e6f5a2e7e2fda87d99de53563418655bad46a6f2abb2b9dbff7f7061d56a57e402add58ccf23de0157d23e0095e7dedaff02b609d1020a26cc535ba4d03cd3bb0c1a7c9ba38834cbf543d258077c7c4c5fd2f5ceacbd587354447b0d5ff7e4911b2c89bb81abc5878be09e348364786e5d72707443a5d62d85cf36e5334d8881c75ebda3be4be45dec3317961481c540de14c8c27b3354313993d16a8809f1723e800884a68ebb0a48b169cb0daa1eef10ea1ef0a49dd1ee6f5c14b54622d5eddd0d6a4e3edff6613d8afb9256cf16762254bc9c713d651243e050dd5ee517bd5e051de1b4e467a6535962bb1e86daf9bd7bacf19b1ec64e9ee6c6a595a5e6f0753ac1df0952a3ebba9b861b8e96bf5837b844ce5e76269a522c76e6ef190a7425e94d18bf42bd14cd6489038a832aab6f5a8474d5edf10c80b64ea6de5c303446bdfeae373d011987ee6a4d03e7d72567a3d9b906eafa7edb5e1956a240232618a70034ce4ad15c04eed86961aef027a813a948228a478d46e16741767877ddaa145e97df3d24730802d78aed68a9b0915fcc853d25f5fc3748fae735bd9cb3964b3d1ad46997fdd5e5c021976cf414565de99c85fed7e11b8105e965692f77bc834a9539bf435341f381fea2cc3507837f8829092056411b9bc538b787a5f6b11a8af71c4caa83bac1b76e418b906529197075f761ba99f073a6e6ddd62911d37f28d770c4c6f08257f802eb6227e123a78b1e30fe03b8676dc5238a9b08c32dbb6b3a816196542bf4580d536c0b7f78b744c8f1fa105d43c9b1653924f5d38003f2f688d281486dd638576bdc302268bbec9f3f8d5d47e93cddd87b028db166b856b96b827c37a88a8a818ffc791505feea2c38cf0bcbf84fda027dbcb632b97cc6480e7c14ef83c241b635861159a1ea589fc31e281e2c29f7de3420943d2ff8e8f10ba49e30d2937b541e5679c7ffd4463674e05fef3421ea18d754644f37d55fbb8b19f2a73ac2f711cf8ce9c8ad53431b7f264e51355a7498206f4330b0ad0a773f4cc76d068bc24bf0efe6e6dc1bf05fef58f2a21f1a74c21ae371dacee9793df97870ca511d08a67a08855485808fab7a0dbf6c79d44a63f5158e0d869da1f77d54f45da2605e3b0856ddf4a4b8fb02a7e31e08999bcd4c220070de91577b35d304f100afb1957ac55878beea1133d85e3c8114ce0b5fdba19fb0640c9969f2d04208379920c6d7c82635262e8e43f42b5bddbdba8024a8c620a6fb532e157424d37fe02000a0465bb8d8961ab0d421dc3ca0b317229635dd9d8e8d844d71613e918b7a1d8f6e66a472f46e3769083e8fa3d84ecf7426cd7e0bbdb65eeb058de69dcf8a419147715dea3e149f383519cc942eb1303f695f0fd12aa73d2d2ff68738618dd83d052ff0769c6203bdb45385fc1db327fa18b08086342eb41a6523ac1a3b091debbe38713cdd6a13d41130a0d5b5dc832fad23f0fd3e4af0ac4e545b3be94e16f24231b396f0d8c4c1de30b9b38e3ff5630abc320b24500fca6f148050001cd03b30026e6deee6fe59cea3a1b0e917a938f7f703ae33a6649f2f581f85a289020c263c8366555d1be80f13aba5f6562352e855a5749a324ac5be4622241a96905c8df16c8d9815016038a769afb0f1954902b9f1e4d205860604e55aaa0016bbf6d9207b8048a67f9a70e3de59b206153c887834355dcb658f425837a09c62f00d1251c954d1ec50b6abf6d62691ce4a95f7335f7ed61996f06afc0054e2b72c12a39afb7d5da378dd7fdd7c78c8d7062acf9279a348bb636150f396549fd853ed44dea96c361bdaac29ef316962a07f1ff7be7a7e2b792bbd9af1a4423674443d87521ee941cba788848006c6deda2c57d323c52244ef233ed3a70bc4b59e83cccedc510f0a5cb3c8a17086318351d8d1eca6f2fee5d6a374046642c64c697d75347b0866f28c79f39cbd272d40bbf40dec95e197672b50c37c334530cc271669e4a1bee6dd65931f792c214aea6fb8eb4259b1e7d099aa8ccc960bdfc3a98610ca13b990bcab8be689b00f2df67015b42a87dab463897d686af9122c978f6083cecf504c1a6ccbfcc1336ee96cbc4f7c326a9396270646cdcd87e2f0b5a82e16c74e3a38cbfef3000cde3be15f7108c5f81de45fc52e381ed8f854e60aa99a561207e24256c801aae6cc4a74c2f32e65662f2b2e40d44c6eb8a52e1357c5e3f2b1eedbd8655900d98cc4d56feb703a7e63ad4cd5d035b801701fb4bab04d1f94f9736666ee5ce04f0e797518aaefc68bab6a8d70903f0d1a072266a62c5a3c04e8b4ea75babaae91c6d2eb6c07a922a081dbd18ba287e697fed29ce78816b7ef369947700ef99c247e2da10e295c2320421796f805aa5611ee1811c5ae458dae2795b26f6019c972e4c36573621449dc54dbf2c84b580d0e14a2a0fde0aad8db4fb8a2d9be4eb47d533f9508795b6f1d7899ad07a3cbba52235336f365b9a6fad0ff87750688f973a5380eef7108d8191c4adeffb1430dc4fd8dba414c88586ebba107ce2c0f3ba8200ee07959eb225ca1a425dfea5e0f42a40f8d4b7e681b03c7e38a8e626dab1f6eef29d8cfe940cc3045d1236d7d7f3e821b460928ca5b9e5e465a397d2f1d0f393046edb164b5f2eb6968a62a2cb52e040a0966318cb41e870851ec54f26eb61b713263aa9b34219f87c7feec9f2e00699d16d5faf43b3fd5ec095e85d786df8cb5b655df602fa0d28d147ce97590fdbaf31d255b695e9c6e798973bed869d524b5da22cd63b8bbc02cb78a07addd5342c3a3da2b14e4ec219e4b0c7426bcf32b6ca3929b85646d7cba647f88f36032d4499be177417ef70af5b6f1d94dcab225b2499370b5f171b964c0c2e5a95bcb596558e1c0b41e958c77625ab059acbaaa363128306702352491980008d3f99237bea38a17ac73684d9cb0c85afaf871bd0953ce8b488e188bd251c83a92a3fbe6605b423498f088b6c8e9869d61bd7053b83d00f03fc4a391a39bf1eefe8bd978a42721f04ccea4750d950e85fc46270e78a93fd341cdd1926b906d7804e4baf5d2d32b8aff8c6d750a1a68a8275d0a4790fe474c6d94b87674c8d0ae9ac4ab88a620e9b6e719688e5527730db6e3b79efdd77c2f1b970dee9fefa38f2b3b20d0cdcf1e3a9c56880be3abe38d057c95a7521ae9655274715bc32b818398491bb65a1d00eccb4c7a805452551e081b6a9f3eac5123ca4c48c4a64916882fa2b946c3270700e6c6d984e5dc81e1c5d5b3af40f30345ccb842dec8eb9dba3837e4fd3769deeb9116b6bc6e4aac630b7fd38743f990f7e60778cf7f80f6dc8ee349dbdcaa8ac8bb97b8ba65855b91679473ac846829794380963dc4d82aa8b0d6b7ad36c2df50e3b452f0b309fdc056fb9ceda5ca8f954d842444ad65c5b843bb25cac536b376171ceb79f2e24ec7c53f79788d3646cc067e7d69af616617e3a3a30207b186259225e69308fa7ac65d50b31f67d80f25292cf4375646a84f4453aa74ac38d7413a37a753c2b2bf5eaf5f90c217635506b01d37644795705eb1983beeaeceb858a3aa6b3f9d85c2fb4e9c9b0c506f5dbfee70fc81ff2e5260d44fbe52595a1163d65a06569506a79727e2038aefebf945ea83cf81073e354e08172c32b5c8ef41698bd4a21f6948cb89d8bbfb7aa1c24cd16ebfd4f020bb14eb485bd6dd5b962f9aed2ffa0798fa0f71de9d7ce0bf25dede3efa013a0ace8a80b7cc710de59db829f1ec4f9634775dbc058bbd6e1e4e4e55dfdae033bee009a713a148cd1901a5f3c0395270846ab3eb7e0f2cdfb2ed8b00120ea36e826d08c5ebf917058a97178859ea2a67710ed5c9d432037eb4acc1e7688c91e58691f100829921cb6f3d24e9fa8f157100d90c98247cd767fcaa87d3ea15d6db62a38ff70d9520f47eabe980b644fbb18aa045c65f97851fb1e6954bc5652c336e95d53a810a5ccedd91360ff2389cbb48b9d554b832be952703d193f8d7292481e3ee7b34f8364af30fbff3182de41594c396015cdbad00c7cba6a1d13085deed259408bf8c1df4f29ebedea52207fcf8dd61a1b8e0348c577c7bc677c9ff26fd1e4f1a1edec92aa7efe611e63fdcac10f3e8662fcc4e4ca65623dfdff7ce05309b0f337bddb75e1e9a28e630fd4ed40bb8fe929063c9fc1bed242e44542cea02e1409fad67031e82f1861ecd8a12c752a8ea9b44da4d99e26850bf517f3f27d7cf8edbc3646dc4d1d96504162aa008cee9daa474b6edf61e978693d8b6cd439b1849987d3508ca0d001fc42c8f52657fcc225ce643274fa648845301dfb1742a79eb34bab14ddfff87bc5373d1d75b87a3f8a05c93369abc91c7577bb8880ea136af9f436502d964569a06a15a04c32f8f35fce18ef1a6e7bdd6daacd1782e031334384115671fcc78279bdbceeb28c5d00c0decd6e3f086db1dca75dd55d2e96dd35ed3cf63cc31f5a2d06352042cb096f91cbd34745722df884be17b24533bd1648ef856cfb2be8fe71ec7d98ebaab31a2e223f9cfe6b76bb1b5bfee78e95d8709d057164ede12d078f2e02c2b79879bd02bc441349d18469904a26f970843eac76c4c97a4905d8d1ed170941270eaa92122c295850201f07b71be8496e88a50bf6343a8310181853dc0bd892a79267817908470d3e44c38ddee54223aa7450370e0cee997b4f001a8488504bda7df04e56e34891dd63c22ff82da1e3cca92980700e9a8a62e1a1acd28d95bd57c9c462b3f8460a801f7168af8180c4a912a0af0f939ae77a94e2577799e152abdd743a2eee3448197b2b8d03c5df9e3d943bc02c112ca6954473bbeda6dffac4c97203285d4aa423fe81b82ec17fc2a2c0cd4ca564156f17b4989b3fd446fc5ac4867c2f04461032ad37352a3de0c906e36cabbed5582e17182aeec61ab22bc842bb7f9e8a249a509ea6a74a5dffecafd420c15dd9316e5527f958b18a34ed74e2eab9372c522164979bc39d5341df8da781aeaa156e6e3f1937f7e59334b2e6d9517a29711fb3cb7f19d47b70c596a7dad0741757470e3638487eac82572baca8e856461e6d306390ad80d24607f83515a19da57827799085d4bc5c0813b2285016b610901896d8d5cfba7fda2b6043dd891f4eeb6f9832391f05ef5c7ff0ba9a74e196d3f870612ccb858da47a1c82fecd9f318ed4c2d7308941c57f0dae02dab0b1c02e505a4bdb8c803309fd4a0bec87b7feede14443a960c027682b48741d0d180945cd2dd7ef04fd7333ddd6c01efbd9fd8140ac54258392b094311839e5eabba32a681380d4525bf91af29692c08140a1c8e6e3d106472c06b59b1a7868137a6f9427e624561df2487de050df6e67632c6ae7e173ff1da60047ef8a8ae344e37641c4036722d1570922a6eac652dc013fddeb60823c7d4d6b9d05562ee451b7760635873c51cdd81b1c17dd1c565980276861554f74c32437485f901fe56fd63ac7e14a48d1fc7feafe7964689d01f79b8141742575a2e5fa79a5f2fb2ecb64ee47d376ffad1da9231b68efd024771128cd5607c34cbc2a7e7460ac83ea9aab80e3ffce0d0f8537969b2044512444ff4a69538988ba964cbbd7dbddee54bec0cff6100e5d1b7998265f81057bc454f6cafc244f06979dbb2af79a8f743aa818d32c50f658854bf6fe816640ea524abf087dafaca0d724ec5cc284f322e4cd4717fbb2fe0a054c78dbc51ff7c8165fcbb347208f4211c122797dc6e304fec73832cdf3b576d57cccb9bb7490748c9a743776f89a0ced3b1d4233d7d6e7880198e715d55e6a43fa736a77f1b815007f7e95f42d0c040edea0152cea503047ecd02b9a0f229d154dbb1b2b52de8c5f4d103dbf31dbcaa5d39ddbf4028b0dc4a2708b8638b8d8c310caa2bc8ef624302a111354bfe60217d5446c531a1c6f7cc5959299cd78ece0832a4eef21bff43acee61721da5a5982ad974ba341651c998cbd1e48e8854fee3b690d1971676581c2222d93d14716b512c462b8404b38c9f2866b6e6bad191b5f9e021ff2fd46760a74913528d20e305adc42345e25bcafa884095b6fa17d762d87ca4edc81d3719ce34208ec394052d94256da5dd4daaadbb40be3813fd77f54b0ddde635df0705967f78fcd8171ceec1de9ab5ee141a2f9ec8dbc9d691a5e4097da124eee20b7abe3eb683ace6e9b9d6b236511030bb5f7266fb5664e87447919e536c240d979f93a9c6180dbe89c61f4894eeed1e2570a253e717c372dcd8800477b26bb1baa2123b30db20bc5b09e8a25b7c291fb55f59efbfcd78a7be8a3eab81d8fbf66c1730521af6abc76206c1b77ab6c431035934fe8698c944a59f5ad12811a591a3cd2b69c91f4f03f17dee9cec1f5892b6e97b2907fb289cb0e6915bf0e828e6fcc50032aed6426756716f4fe79eb4507fa25d48b06dbebec5ae461536e09718e962e2544c604e16ac1b86dbedea823967012cb257d28c73f39142e3e67158c5430d69dd3b167941677c2d3ac400b30f2a7d82302f8013e0c86f632316742e619eb6d69a4af8ab576d4fd6b689f8b6c0b4048ce41c985f67389b0e0aea61fa4041025680ddbd989c85fba039746821acc763ab5566636a39c4064c0f46e0c6462e0cc26754f777db51766ea8456a992f12cebebfdd85e577fbf95dcfc29edc3421e6f316bf755351cecdc140fc978df0406dd0ba4472734423df3a31365841ac38afdda26a59c198a1c134072555d20248133f95473855ab22ad053e992f66e1d37550945414c4bf426afe5d955478adfef02bf10c9f2b3dbf34b57738534c27b80b919bb84e6b0ec95af1a46502dfdcf899b2b28c080e76b8ea3b1447738d4199858908e18175e3a270f1d7160ae20d7eb6d65ed313153e29c04a854d8d1cc3d992489fcad1edae24c17c5d95077554a701c09d600f998aa8b19ac2230fcdcc402cb320599506cac5a00b43f03c340fa04bdadbb1710de63f40d742847ff76e7448eaf8f60c134ec990d5c608434388ccd938b091dce83be62ded322534a87119c6ff0846d18d60ce6a79ba5763a658a212cae0d05c4b42acf31bbdcbc407d528da2964f6951b703988086fbd5fea3a1db10eb5dad2184472a45484cf3bf96a2098bab88129ee5359ee4d1c88483c10cd816aa6aa5285a02049850fb7aceebbe46acb428cb907bf3bc621d0dc1ddcdcad9625a97638dde7ea239a8543aa502ac6f103dbc137f712b8bb7ae91d1f0eedb4665b0a773508a8d2c6b105cbeecdeebdd548c8e155a1e82a813ad8c7a910939d9026acd39d9f072b40acab700099cd557d801e8deaf920441879bb50121b0af33fe1ee545bfacf31a0af1712ae0f2626ca6fbfa633b7cbc6a8157c5d6138ad6081d4a68fbaefbe131e79d9dfdb4a5f4a87cf51b3169a9fa79c3ad41bd0da808d64dac6531f1cb453d8b38b33f5bec2928779e50ec866c5987f7d23fd723a8e3567b677cf175390c33a1cff328824fd69746c6af5b42c00ec747aa06178acf19f592486cd7ae4b3a38aef15840c9034ecbaa11624f0ebc3a79f9626ca641a36d76a6a3777e51f39b5f5a393303347dc8687d4298c6b48c34f1b2a7143000bfbefb3c2285694ba6aa91326eba271c35a8b8d5cbb01635f2766e4a378b73c26dda8e7d28a8f01e556780ec2d684f66ef83e72205a70a7e8dddbffac6bc1731ddf3e9cfa9cc6d0f1ed2e30328be60a2233df588cc0900e9a01e7c6920816c1a1b774290f4297e1f4d706d223a2f81a6dd7fb0a793ab0c60824b98d480dd762760290db94353e84decca6a9ed577b19f9c0a44fc567643278a7578b0740c7127d7c559ce79e693da1d2db4bd8b8bd2be2b2b96d8fb00925d4ae9ed345c738654c699c515b493b110f39ced9c435ed4272ef88909fffdda9b3a3ca1fa7db9dceb8c95083e7dbee1e8f35fef11c5f24da2e577b4ff43b6c337a2ce05ae1567ccde4d423c64a4848d0352ef4b3ec3d3754f8d91616ae18c384442230e12a651ea36e25934dd206a34b4f0bf2d5733c074ba8136708c9c18da7d50222bb967aa494e31d722c8a64883559de599558a186cf1114fae59672622088c6c33b09c8be13e8de3ab4899379178ad404aac29a33c3c739e3c5df4afa3a050982c48625dc49a03aa60ea379779534122152399fe45e5e6651b5d2745f553b8a248c9f7bc0ca3e11eb16620d6df0d2298512bd8095793e95d4a06bdee83597f35b84566780df9e0caf71f4d20cfe72f524736079d29ff067697ececa971686a2f135d8b0f79bb608cdc44bde13fbb96d4413e0217cb5564ca2e5edf7ecab86828d310be64043cc7bc541c68ab5b6543812facdaf21cefe1adc35415248e09a4faa667443b394747799b849c4ce639cbf68068de4fd96ca2008f2777028d39d8d99ee74d6fd3424c2035ea4bb6e9e597e1d56737a2b783a9d727706b615ce8f795fbdee2d3bba590c2ddc7788e1c041ffb721bae18bff7437b7b5f6e41e188ca8f33e506afb30c1c72802126822893b3ea53fb243e3bf8da18b7348e7f8aafa766fbc9c5aaa0a0470cf596c3c23fdb064bd44ec101749421750893170c72c920ffdda6606ac33053595cf14977664048ae217c7666a9d0b5f73dca8003df43a65148c9b1f3a2a483850b75fa26f030570958d37d6073560e89ce569fcfa9042a42edac5caf4b581252984afe98cbd26d48dae130b20ecfb507cf98b97a49b8586ab2e4ce7027c9fcbf57d59a0e7c1b6deb7d4ca7b5795eb5b391bf2f87b5e65bdb97e231b2b81d57515f0b012c7793a4de3f9bcc1f644c77db1175052048c9730f74fd54819e1ee7916cf5664f03a2ddbafbb8ffc725387d239ae1d34d5c659cd336a848bb89365f3d6b3c66cb512264111110e79dee8b9601ad9b82d04e6f98e6afb973f7ffd2079f36623110402e94eecce272071a34fec8b55f83369fac088b8d44fbc9d983f331240204f9531123f7d758fb8eb20376e6780a3e8b7a460157f6d1d439ccb7aed8a009ac53af88d445ae7cbc4e9bb2f46e82139cf9846c945323f77066e375be9becaca5c8cde70a51300178646742e9563e4fac11e5d84ed34abbd88cfae81c1291051b52faee1566ffb49049fef2faee4c44c9d92e14d77c89fefd9a7bba80884727e590882b678b46c0c155c8cba747e9fdee99151d5670f21a2b051a4d75e352f735075ea2a1f89ffc90409f8354efb2127cf9aac0a2a628bc97a16263dfa7d14cc3706b3c63f48c854d116e058e13c23991d1e5f7f40d3f933299a5510a54975c533afc1ff7204df0389258e9d795cb9102cda238fcce580f5deec8992e17a323ec98b777c095760227f56c6e16294b2712517efc5d9c462bdc8ab9a47a642860db0536465cb7ad4f726851766bb5457328d03616859bc5c32b73ea5a15acc1304ec38dcd31d6617ec801b21a02781028dbe188e82cbed4378288911faf23bb76707951761f367215507d0986beeda052f57716a8bd7cf2571a6806a9e1ab837f77b70afdad81514e49df4b1ebc10aba40b6c194e2cb0c086415d48cd1b5023465ad84e042c9a3561c3365a86c4d8a8def85f5baeafb6e054523b9e63956db7f10ac102f5237a80130ed3ca8965e9d23153bcd274640fef795e746c44d8d2bb3bf02da1f3ecd9335815ff880134072d71b1b3f256526da7827ba67a9ba6a0b8898a67945433455fbfe3abe790c36b5a5c596ed945ae2811b7d3ee856b89f75a7b6ed33e530143ba827c8bec356136cf5a9b55933765c605d4cd717b8bf1b7c9aee0fd8f426869e7a0d3311f00637dd3d84a41c88c706543791c41880b84493811f03bccb0caedf028ec112f9798016f0cddc4ce103eb7d3ce4f14f9db6111a8b99cf791c13fb7f2e17ee8b0cdb9bc04e139dbf231823ae7b8f7d953f2414a109e8be5e8db8224fbce3860a5f7fbbbc9774676370c42222e8f2786a029a2c6ffd3e5e61b58999747381a74d1059cc847aa2e23dd9c3b741b41352540ef0861d181f2dd1d40927f52171ab0e36ed58570269c82a0cba7593f3cd40cc33d5757e52a716d133d12cea38359f4066a17c7214db2db5eb13ac7ab47a9ee017a4b7abe6a973c46da5ec6535fa5512316af83e9e80f530fbf1aa97503dcd7efa4642c9d2e542f5af1bff060db0546a303523964a6be568a80ee295516ed6e88efc19e41c11503978355ad1a0c36ce82a28867d33b5439f025d9b04b8de7bd24385aceb68788b8d46cb0a4c86479056c0c0da42829712aef346056ed726f45694d60881456117ab45895e32ac15ff620655df6f16b48de3f139b015a472104de0f559af3ccd92c9bcade84f4d403cbeb6e05a266f7f15cebe5ebffbe8aef991565c30115ba01702c2906c75f1abe75a40b30993ce14b177a70551f5b02d2e5968ece9844d3216d988d5b78a9b8eba0a801c2820195b950fc48ac006e0db98273f3e54753658308ceefcffe8ec6860c6db55db115fcc0a3215fa8ad12c7bed3edc7ca844f7920acb70727fb1a6530dc038082b0eb48681f6f50bd6462ecee13a0cc9d9a2c2dff8be98be0438f115890959195436a0b57b118a3efce8c5635cff517b88000df2a4fd4ef52c3c6bd15373e90a6f918957ed7e9820abee74a13f9943306bd5151c0b3bdbdfd1c63720037e1b4f349c9272aa48890e61f64e3c4feed9e55e1a4c275c991ce109bd92ef48cf38c9b2fb277b510b561eeffcd780d9d4dc507c2c1e053078256e7d8cfed6987f947de50c67e119e038eef00020feee4e7eb3a7f18ee7a9b7bd235ed9abfbc006cd319fc72e4e43c008d16460633390342caee2695a7cf111c7bc593b41c50c40cd139c3e1936c350458737ed335385646928b31807f163c1a77136e8f4d315317c92bebf198b6e54180ff990e723d26f3b9a104938dd676253066bb5a4bd6b490eecd909c880396cae806d172a3385f1e67eb1a49491ba641588a22fdb06355368409a811dac0b8805bf4473abc9f78a0cb5dd02a482cf473749a0d66ea41a87f2e9086982220cc3b94a7a5e3557fe578af409103fa1cbad1888c8bfdc7298e768079976952dc280d6a5b15c9ca2fb3a4532d0bab73b5d065a9122535f8bac0e2c2153143577b4250f5c615b33efedcc99a6152c7112c30dc3068769bea9f75f534911b995bea7e36989a7e5f362ca876a1b4899cc184384b1510e3d5ab2870dda18cb5bf64b9edbe70d085094abec21fac51595c74e89a196b6dab9461136f61628c763cf4b7532a75dd04460cb26092a4a97cdc8d6e7eb96d214bfbd0d1921fcb2a7dd77e35e98dc3010420b88bad9f4e5f2a7487f0c86ec8e10da7add189e2a625ef7802f33290d72955716924f8f4651b09b14e455404d21dfa0a3f306904488cafd1ce0386aba3d9345715dc98ce9eeca77b9b812bab531caef16cbac9a0205ff70b23aeabbf63af8698750c25007b2119d2b5c14a59e9fa70ee12db2e2e30f027b62424d7aee4a03019ccd0e228cf5c339fd77ba023dd32a5957598c5bcdd9f94b3b3c90674dc2ec1b9cd70efebd7da026ef17529f503e2f3a487d79d7d6091427bc3801d902bf1576ec24fdcd8ce2dfde573db202d1f5c19dc919995fb2babf37d481acf6a1618cd8491a02c37d6c638855be4bc4f56d1132fac8f9707444b7168d8dabee7bd907910f34329964c6854b8d8764834885b76b46e1a1d95e3de3714ce473ae3cb863a8eb7c2385c34228c920ed50a51634ac12fbe555c6b68b42ade0b2918177d345418d74a4b193066118fd349a6830f682395788cc15858bd220847394c53c952e263c146a9395ea8de059a47c6a5114ff1554a09866100c7aed952a8eeb87c244e65eff35827b08f17d4f12033b25119cf1ec328f135b082bdbb0db738b2163ed0a555c0b814f503db1878eb7424d1c674dc7d6188c1bf1df4bbf154393068d44dcdebcd9c4a4d7ba3336756d34add82e6dc47a99bdf4d1d7f369b75cbef8a448cf34deab47315b558528a85ad3c1c30787fca71273a1bdad1b4a0e33c29aa981ab55b7190e5fd508578d98bd9aef96fddb1a8aee67f7c3b48af83a499816cdaf7ea01618160579aac1d1df9aa5aeaff1d4a080de988f5f6ed04098a1f8ef6122cf038b95819adb7cda397752ec182a1a301a426ad8de8a690d465b52f6eabe6800bdae3c407d37283fbb71151602b9161017c4848f43111ab40519b56beb675af0ce53f3325710fe6f83a02f02427c39f0c6ed57706dbe85805891fd1eae640abc77e2a715aaaa55825cb98d07a59b2910420386be8c018bbf384a8a544cd07d6dde9c0235d67d61a6f82ed3372cb432af708bd4525d9728f0b327fe0e26d6bc2c962e0a5ad7aed886452666870e70c393e45e5ca78f4a298074d698cdac316b211b1a7af60d43977c19d75f02b5f8d9b88322f98e796c8bc05e5fbdb1521c3218d8b595096baef4a4ecd2dd07a7c22441628dfb6732a96008af9e35ac200df2fc0e973e5ed1d1ef2d1921180944ac6c334c2093f9f12b686240d1866ab342b79c7d3f73270f90e363fe3e7430b4cfb9e13bd95fe52231d237ab779b1f1b228360f63a756eb1f7ffe859a818c2d2ada33f7a2db16919b1c7f60e78e3864a0bfe2059f312f45828fbdd57e96ba19078a421937ef0e9af4f24b691fb15a099ac24dec99c58b93e8eaf86f4b1440178a772535d57eb4f476581907072321b639dba06c420333728e1fc4b29ce9df8db986d5c55e50c12cc4b069219aeba58c317e1add45c15ff23a43d5f1c69a08b767887124fdc7b4a7542133f1a1703427502fd7206a6dc5cbdb579cd4a995d4fc50d81601aa05406838441875ac9f5cf6d1ef809bcc36680ff59bd377a6bb716a07c7e83a1183e10bd82fa19a72a770ff47d84668dd56bd516a111e2338cac130fa094487b0a41b7ab0abdf32f2dd51047ef79639c1fa290259315ebb5bca15ef304820ed7a80e04d1b7fe30ad2ebdc5cdc0bf9fd4e2075e46b6890c923c2c9e7670859d2dd1471247b7fa0535c8b37ae9fd5b63f21dce1ccea57c97688c989726fdc3f9890533b42d74864b630a91c675759c44b9e1ec124a44419042d050ec26155af50634546fde2cedc3eceb1480ec287fbbfabe14f176d23fc94d594124f66c50383a8db0d0c0010cc8175302f46346fbfc636d8068965a41a1962c7260d022b036a3e1789662e408bda5ccf0fcdaad64ae8942c3a5f3901d0fea8a3d59694e77b20eb11d99e26518f1d3203150d5104fad7fc01ae3f949d25da772a30bac8adb355df0a6c70e563fc86f6a1ec108b1731c9c1153755540eb67522f2dc6671e8eb7e502a583346fe0a2f1262c2e2e543ffef30ea249d3844f1ac4793c2f26a23830db8bad4cd2ba3045135813fdfbb2305ebfce72f49a6d48554000343045872e698ad4e2b468d9fafafef68b0a41940222e5bbf6f58497d9242bca687d9c5f847f26dc0ac8c8080b5f6dc733644f125c72da19be7cc0ee945917de53a080f606a1e1c26dcecd042098d85f0d5a87550c5335bf6413f75b973905311c4bd878d1eeaf79fabd6b515110f18bf980127cede102e5622da6a5720b7a198aee08c6e6e04033ff0e49f42e53ce56efc4810b0c9770774afe38ccf5312876f3749b0768d4a0cd51c0992e3c7cc280148b8aafc9bb3388133132074ce6b0ce1a45cd1df77f5e0f3952f46a5f586c6feea8c0caaa05274d1223ad4f9789e86454a2b0be271dc5e60b73525cb259772f0a4eb7796efdc3124aeecca78cd74953cbb189c79c1a0c048a5d0012e32988125c7942b457757d694ffcbf82623628864dcc3c027f9248198a53db5a92f20eff651912184361db01926920434d9f4a9126ba7f181add2cc2940678528c6c73646a43d3a25763d08487f092f0ee44b63a4e55b0216f09f7da98e73de3f0a820eab53e582567460686bb1dbad81359927e413b0db5c8a5b5669b1fb6e90318f0d22668bdbdf27c0a6ac6f4cc67c621e12a5b4b22d8de1dbec31afde086aca6435a8a83d1fce06de9d854b6a343e75f4325e25b48474317818d9ece0d95bf01a5bc931d50e0e332827727099293797702c050b4527eaec0b70de6428f059d16fd9101f4e674ebdd59fcb8108076b2ff3e4f8679338a73b1573d54c2bb128954478a3e3c7c537505ebc31ab0d3e2f1e986fba6070b9a21423b1af72aa3eaf537d1808c8202d3491b9902e9284ac9947eedd25330eb9378f3bb13831fe3c0a093828cb6c9ae04839eca0d212ff81134b8e23d11cac1cb2dc42f90d5aee4c42c212f139b8ca3a1153a52fcb72568680950ffa93b4c83fe40d3384cabdc9bca49615ce50b5bceaca956cbe979f115fcaa5ea918816804b931565d33ccdf8523e4ee26587fb779748d424a8ebe8227f6ebf40d12c949da54f7f1b084d3719c58716decd523e4582344c106210a63c487eef24a8f656b91dc7779da0bcfe6c5e936966d0fc05a7e07557246a01fbea6f0a56e3456b7259f40533b83dc8976bcc035b3696c567f7727128c3bd4d78195bb7ae66155678680c5afbde1ac13fc16d61c82f090d76303c7bbbd033f20cfae6341a52c6f47de80a1592b5cb56a7c73e57a049ef6d5ca3ec366e13e3cf4ca7ea45e5adb4a972adeab2d7dfbdc9a4bd520544d159f30fdc77271478f8b5571b67a3e284cd40759af3b9ff4fde6914a05efdfbc5ce4e50831c486761df86551b8b72e6000b2793a8bbb41888f075a7a4f562bf68f15b75c46bddeb4983e62cddb2d1a86c8c99192825c60ba78146bb2999386f01335696db14ae1af8534cec5d0556bc73f9328f2e02dcbb359500408a1213ebf3541f85e9f93afd665cd35bb1749316d41557ff4827815e8d4fb2d0d5d1cc3484895e7fc21ba8047fe17b3d443f5e3c1339dc1ce2e4ece992388a00841adfcd5e8ef33190643ab0f7cb5c286ca3098376e434eb42bb7594b6de0e0a17f2cff112d6f65cc63824bea23e796a070e72503d6ede52287d964f9c8e205d6844fef5b2192616f2618687238bab7957814b7a2f43b848b6c25bed8315f13d52098ce4548dad2ef1322e41bcdfe1d9615c43b26f5c0d45db9c2a24c6a157889299b73e94c91b60cdea970de292463204de3abdd24c84f6c561863b989f9b99776ad102b78fa500dbf5c20aad33144e2ca88ba895e31a32b0a9b56c4d4d3d1e35184cc398c398a7d75665a3d49282b8f5968351687cd14a7bfba50fb044b6067d5ba6d0bf4a4582b89ab02fb74a6166701b8bf1b702c29ac05bd69a48591c2b39f1dae32511dc336415cc9f632503c317d88165b9f21e0cd3ca1f8d45b2a80db4b2167e7aa81f25696be28aa7674280b15559a8d98a395211c04ffa362c08444c875e05371865d00f7b8f56023a86b7a7f7c5c0eae4e8101ef0ffe161c12612a08cf94354826ed60777d76e0fa3cf9d3dc81474dc079b6e0d2ebe10ff3c703e378f706ea88c75612c3c82da84e8479f30c266625cdaf09d759a1a948608dba412da7c21600e7929f75540047bce638a503dc80c13376a835f53d93ffc7fa6330ad0c2a674a613c43359c9e46a3185d0ca5c3c8d73a57c0e2d646880eb369981d5a3395352328d2d66097a9ea4078b3567a6cb4cd8c215cc020856ef03d45c393ee72168750448fa1a18601a875983166082c2b04841ffe97f013b979bb1570bc2b95753be0f4c299d128bd85fcc863b4ca225d8e3a0f5786b3576df16c27aa2866f1394fc3ee197a7bd546fd89772b8886b213878678b340daa945d8e1be753191f7bb50bac010e65ba8d11136fe6958510e26c517ba5cc06d743a8d7d7164cc14fb82b17edfc3739844659548588dff9733df3bc892acee44dda210d4ae92e5a76bce6afb9781212cdbd18e655f9dfeed49d4e09e58951d757a77afd7ba0ea8be38ad761f0fb4758c7a51319680fe7144a7ead20707d14b9d7ea8f42ff66f0af0a5ee1b5a9648eb95226f22c111ae484e89a7cc5109aa357d39c174e96df12b73a12c2acff6d4b815a8fcfe15fc0dbb7da23594a92deea72c988474c4be3accace2fb1ffa24d0c9577bb2da435fdea7ed378b27b25ca604729f68ba3320a3c1305615447223e7d880ff487eb33367d0d908140c56e409c4089dca30f790d0c23a93ac4a2955b9b352d7814806c167d70542fc97915da0fd0319533feb20f874e06e35575dfd0ad33c12b758426844f3221734edafd3042037e68d635e1790cb33aee614375520002ec76eb0afc71b5ee547601b2c9eabad9948f094569888927efbbefc3cc537aff8cffed039b8a2ffab4abbbef0874785baef4c8ab356d569268fa4f9af57e8e0bc70df4c5ddf3d96286be1fd19b9a0c757c8711204766c72f486fc957275b9e0f30cfbbec24bd14cb8edc876d9475927d8fcaa223b53a3ece176c196f057bbaebbf986dbd4f5f3705954235d8802a5513a127d0f4348919c923ec024759e81090e085d67dc0fe5a94d329975d48c93e4c4abaf58c1720a9af035b2e2db24a30b7cb97386c1d483103c4a5359b5e1c0eec7a29924da3e35d0bc48a3068cd931f2c69f22212a4c64537b60e248ea7d42d62ddaef6dbcf772da15796e0339e283c6c06959e55d55e4968494f049bbb401cda922d7052a575070ecbea4589568c53396a156663554d63356512ec39f5bdb3864d5a74247369ce089b370ef9aca2dd47a657c98185bbe7e54308457086d3a9a2e8336673a8ff668630eb18dc14b27df5fab0776937573aa9d3822ba02fc3f6332608e4d1344e69471343778bdd9c63e718d6d0f2257c8f6dc37e668084545a8bea9814dcc77cc451d7f2c9e39288aa1e6f2d2fbfa1df9cb6661c2c46032360eb5063b5dbdc355fe1aeca4cf5fb715d238c41144742ade45d209225d2033b10b667f6b2d60f7743776a0c181905edc717e353d36f76ae2cfd73183993585e1cc06001e4ef40f25f3a77e7d3cef75e62b1603961cd677d61abb9b2f43db2802822846c6e99c261ec338dc34ff102c0706af55320f47c7d2586b6419ee70479ad08a1a46de07938d113c898cd27469ae64994f6d41d5790fc85e1bfb1c1c43f00ee00b2e2da9540422880d7ce70c1afa4b647381174d2a1c982b38b1b235fa4e2ef614e7a99cac61bfd4ed5dbb3734aa342245161ba923b66be7ab176d354fc98688ad594694713ef4d22f05bdaeb50279a9356bebe161f92a6a6a71a5b0cab26a5f2be1753984accb60334bedf457732d49d5bb744c43812a63a87ac0d6f6053dd779fd3b4ed08fe6a15e907f46fd6546aa07eedece25c2e40563ce7b546feaae57fc6c47421f9c33b74a4dd854cd6ae05ab2621a9ad7e4aff7175e952749191fd10a647b6956fea10a76353e837808b0549d51a3e295250f74b54c915435b3ef33cb3240c93b4286ba88858b39a106382afe320711f66c4cdc9c014050e077192f1414b24a54e8fd1eb94f59d47b208f57c7f323ea08186876f3ea8d97c47547d8a76fa150193f14e27e21e4868232d9297d4e6495d80de70f6c9782efd83a625abc8f7d89fc60302afc118e1c9290e84b13e50d4a5207761144311a5e0170c5d2cce98511b94c409ae526e28f4c34b95bfb9bfd0b5c25acfafe22599e22589937835f4d834a8f725ce7c8d4288d30ed986fa4f8974a0e8c77a53dfc9bd10d64fabe448d8dd82dd59c41cc9d3540e20db12601dc461b3a30ca8d41f11bdf0d8ae49cdd2d2bccd251212a36fe6cb7d267c1b3113231ba76c61de33ee82034160410384b96f354e14fd25b65b88cbbe9324d0f9d09a9e91d9f375818a10babbf9726287d1e38cf89f27fbfcc0ee6b819e6f86fc673fb795c7765cadaf4859c63b8aeb77b9154a518d65ab794d37a4f313c7fca02e275b6322627ebc18e65674cc0b4645ac534d722e7cd051f0851d739e71095a99f6b8618093c125a38810eca73034c198a9c70226385128be8e9a4f1b918c1dbcc784d8dd6645b4348171476b1e27c4c223c0cbf588bcf875698e4b0ec4c3405dd3048091065816fe5a047b6d28704091c48bbe1d4e830c88cd8f8970f6f459efe17c0cfa1c6f06872ca011c321def71aabc8e1bd9ee113974b235606367519384de7a6146f28e95f40dd54abf147977ade4310d371262f5e7b584292278298a300f5def5dca027ccfc519104a017483e5f94405a43233389278f2c99ae80ef01882623a4a66f3b91a0f4742219b481f52e9a236c9a175def99a4fba8d576e24588f67ce2653c530b6b8d1ea448de496056bf7e68cf32bae5ce480a1f21fc5f774761525044872c4b10c365977ce71e345e47ce052fe54e5a58da940289ac0c060618e39abd8fe7e238c4a49ebfca316d050ad4f11936baa1ff952079f81358dcd4d21f3927b199d9ece40078464f40f29339dcc2c36b9f2eba942dbbcd3acf0a81433357dbdc3edc95d239a1f790e254b1851911a6b9d45715bd4c4d317653841c9582e2baf20cabcdcfd08f82225e5995b2a8268407f4169ba97fabfb5aad0f5a0fcbbcd6bc837a62fd4eea997fb87eeef800bf012a297ab09dd68f6a0a77aa96ee5cc62512a5b4c20e1d37bd993849e75381289cdf0b3e06b8cbb7a83a2dff460a41d43eb2f5e3e53c23c6e6f00923bb7b988c0fa2556dcd0dff85fc8ade8577ee452b416dba0d841b0b262bce4d34a4a671113c2a1fd84a99145a37870748f15f6c4326643c27a34d22fd00693f6c8942384671f820898c1df124ced6233e41bdfc08033e6cb142a9a85c25a5872fc7720f95656ec48edc9d5fd287148898c0dee55eb0f3f5738ac3f979f1b5462b5ecd852947166faa50e12c386d72857ea5566c4fd01e805c5c6ceec3ba6a772f77ffd4675a12bfced5706746da96773e848438a307eb831ca10b0b903abbe3b4876f4234f7090f4098a223a2ac4833a79f61dccdd7c503994a89d5e46efab67fcf6f843cec1ab022a4a364a630daadcc506e34b24ff8f052a0ae9cfcafa986e6d399e515bb3bbce1af108242270ed9e0236882e1ad1403c72601b805c9b74074205c302cabe19baa419d3db5c0cd830a6053d56490744ac7af900dc03f7fba37d6c3d48a6227ce5d5dd1ae85eb1ce3dcd0152095596df89ab32a735e319052a2d985dd0e2ddf1c64a547d123f57151b9065aeef443141d8041addfd0de6fa16492b6fc2bc9ca30e51381454080e5e61f4e8824c6cfd8d19eefd6e464d63fe7dfeaee3318e93d662275e4fa764dfbd4b398c338696163912ef7dace7e302225a2339c0092faafb7d1ca116f80fc769e5b3b1c4cce71e9df47985f362a7c4cb7f9d130f60b56a118f1da702f2436f75f12027a547fcd835e47b0f67189f7cbd5ecd798dd2330f5ccc35e15e8248adccee0ecd7e7f81377d38d676f511740f10b7b7c6a20410b71d0e408a7afbd4bc86a1f404f730f86b4f55f2a0539d024e894de454e56262fe4abc3d1c81909550c77f7f54cf11e5c9ea34252b982e4fac21604f5ce8d6eebdf78633ada4985e735c54109f1d9af2d02395f43eb6c792b31ab5ce0039f8eb65f7d7c3877415ed9be7b731a9c60c638f75799e6ecbcfb33709f1a3ac77ee148cd883d35cd9aaa64b0135fd37b92503757bd1cf1c14f791638c3b330a407a125d05437daa7d30778e3bc15cb0c17788e8bc2b11fb802594c8546d7c15e8b8e295a005bf4abc24b95c2afac685397eabe770ee1e83e66b1ed981a959790f796c048cf4a7da507c1d11e406e1c41b880c5e76719aab42609847da9e98106a9a5417a0872c2a68e684f57bd2fbc9c1041a012f939c0f66ce930ed2cf995798b995090b4818b30578a9bab694fac3dfdcd3f9aa6e5dfe386bd29ebef666238d691e0a6e7c16d84ca5da8eb0da07ad51cc4c078633869beebf6b5790fc4eefc676177a7c5433b66bad867b7d8b154006adb58b86cea6b1e8a940b81ec83d0e2b31cc30fe682a899386f7d97d9b6fd3e44f2d3693fc8f3231e496367806e0aa56990dd5cbbbfff97ad2a604edef43594e40c8d2aba0d5aa573a1b7b0eb983e79dcc50728d20bc4c3f3462a3fe014ea76c6b9f6f886490e7269661dea61e5cf5b1ab97baf20a46966fc32d2e2863085d9a8a09936054c34a87bb520b23f9f1a574ac4fdc96896c961dddf0661dbadc11941e79df45c6740e339299a8184b5ee22e7a1d63b2631d8cd8b5adbc967389a513c0425c6d7e30ad4eef956aeb63dd54cdbd9e100eedd419e3012329ac5ad3f407a76cad1af2f8f3cbc6673bf263bc126493c9e2d44adc7a6a29af34cb90ec3afbf7f02768f8f502e7cdc495b32c75df4b6b2e35f975b394004c9658eff2d61b10b72e0cc8d935e2e0d35fc1c09cd5bc22661c0979b2f23bc77932a77e247ec170c82c2ea4976f89e9acbedafce6d2750d58aa0f6e099ba596f556c62e36ca9198d9ff1b7bc2850b407fbc882f9bfd22e3d428b70429cdc85a05d1b4e56839e21924dd3f023a0412d85e088fa8e12e092a6b2c378cc232e01b96253b6e0653ef0c17eeea5df5fa654a0c506a2839abd5ed69e1a30c29df2d9da281b98a30911c4835a2619d779a68b4f81626136a58547e9c564a15a615e2f4c1122f4a01b5d9672d305ce403051c2b65702d214d7d014c6688e1913dc15b0596085dcc2fd085588cf735000530518524547a9d2b68a1b52df2491decd65ec0ad1b04f637574d6203588d25613203967452fd530c280c455e04eb5e2b35bd204937bb7048e6c4f3e2c18f04dee07d8ba3f57618bdbbd2127b263a5423bce49f2fed4aec06d75071cb6ca76637a7f17cd6511daa6a8ecac5e35472876a4b38db3ecac7395e50690cd34c4f6f27d8d855289dbb5573538153017ace426f2ee8f09cacc17649eae8b3ce574436168e555be21c77ea068fadd338ceb208795c1c4aaac6b0129a9b047b31927115bd32166c8d3272d6817c418f78e9bb9eb326562e4a08e658d1a2fd28233a83541628a09c880592d5445952ac1d2484c431122e6758e117d9188189676a1d41565f37e101f95e459e0dd6d4d98c4a0f7279c9080f8a1caa8e60a2f0412b8e9e35981c22c70ad34e54a9fc941afaf287d0ccb260d72ee19b89833a9117cd5b6b932980e0b86df547c96e6a2d48ca28c250fbcf4c5a5ff704a8d6988b1dd4d187c088b555eb2383d050a540fad1072279863384c9b0336dd53cd1c606b59e29699e71888b17e04750cbaf7b7599fcb176ce14729821e8401a31f3078428c3039f1055cfff939ff1917b0bb1ad315144d85a56ffdaaa915be410e51886cabe1a363217c4c7e54bce6f362fe1574dc1a816e7a48827e9a2af2dcbcc97e80f6bc6e0e482c56b17037e97df4fcc49cbb34225a25a7ff0e6edcd041406d4bd02880095f7408583add4cd048bbb5ec174d6733e1e35790425ed9dcc6b16c5dfc4370340f97eed468688f5dfb5ac0e5a7872c0641fdd8b417f66da24eaf211a9a29b59b8d7a643910910dfa221f53ace46f9096194afa4f1596c6337b3e0e960c3893865f77bc08ee9b1e50d72a165eda3f93359cb538382a8314ab4abaacaa9aeb432d8dcc8c005b96a829507ab5b95800a5273dd02d4721b6a12a02777c79bd4500d4a2bdfcccd89fa73bac66108d85c77b906bad549938f27771c8d2e3f85eb5a3811c63dea7c42298f05a6d2a5f8fa69805e20910356d312aaf371ae3878464925802e1aed5d3a01560c690d0cc7e83710a2639b899d6c3a8fd878ab823d7bc63ec4ee749ed10c001bf64ea4d8910589933b994d2a96ca2523c804fea7b337580b2f5643caed300f35b1fb167b322601f73cce51f2ebe567e96e8e69438c5a0448e7c1810dbefe915347bd3a160bbbf7122f231542f0da42de2038581061768573f8edf0be31abab5329f0b7cb2e656c0d860f38a06c0f5b1d690cb33f14d31129f8f094f442a73f51c2b00efadee4aa297375e2b6d794407f8cfaa1c29bce22d574fb436e016544c16b94668b88fc56d680b9c38d447bd0530c14138aa91a1bc00c65ceac416bf5ebb5a6d9457f20d1313012f5f29f228f8e16d2626c2dc0d9f260cfc539cde9ccf879111f6b91034e0c4d27d5ff05bee605e7801d8713567e546687f80dc101e39b038f64affe1c98d7e4ffe903815679af3755343c1476efb945333396a02b3ffc7743f57954905655a7a0a26dc89be656b2548cd01e64865c989179a3a1746836a20b832201987fb6a32616e1ad26afd0140f9693fce38a9acad43d8b7046d049004ac76e1c12380c7054f7814dca824a67538b3429d7c3771954aeeb92fe36e0bd1c429c36fdc4435b52fa73850cb103a47dae7d841b191e1b2fff867349f0b5d431b24a89464be3f81884d8db724b8af0764373572e60914d17d46896b80b1cc7d7a1bd92220de1176e02b9d0e048f6cafeaeaf0b4b5592b488292821c971467855d1f7bc1af56c327159c5e557e06222a217b1da08b64a1535bb84f0817b7bfc2510e68df2ff88ac78631689169f8ba014b1556ac70342609f8f41cbfe0dab82a63fdbf614ca93654f00d1c31b0a48c123080f56fc370f2ed69541e19cd1dbe69da70b107c7e5efd92a786452170eeda4765471824db01858e1f76f914f1c37f2a25fd480acb4dbbe76db67c72792dd85ebf35a6828d5da83e8e9c1e9e9135b9a714f49a090a3dc5ccd59ae831dc218d00872b16731c3ac3afc752263c55bdb0cd3876221d559024e6758accc71dff50ed52936ed904c84428ea4813184ded72e72429a7687963e17e392aa13ab53d15b24d87d124e5bc092c6a86b53d6ee2d8f6efb235898bfe8a868406a312d9ca280201a8cbc445a6721a96feb2ea0a6941fca160573372a08f1ee258b7a5dd768cd0c5488f1e300a80f5eff5de3eff4b76a3db21d106060515b7f263d5b201e1888a01a1663a8b26b8bb03e6a3b1dddb9ca92c197112eb9c98d35915c756faef15b2349ca8d97a7af8f4833cbdb22effe2d59199df371a0ff93345e2c3eed77d6317e1756d43200087b8e3d66f64ca39531ce6d16a7e24cb457a06303e24ae9e3ec9a9029b7b7ea45b2013b71c3e208e3ffae1446244976d33aba76a1419e37dc324af8029a95ef02a1b1ed73d208a07d472e597fba619a341536e214fa53342ddd5526a2c8e5dcd6746729e403530be8da0bdb7c1cc4f44d8c3acbb1172ecb5f0e96f94c14addc518a4cd301a5944be090bdbffc26151050ea320843ca29bb7c10b0314b6a0167da98189b134196cf7e84bb08cdf09eaed7847192c4f0fea51a5674e49222575217bf0c3d86c31ddeb62a00da4f8b223f1a51d7f490eaada486d6cb51594db90ab3c64224c37a58cbab97591a84e7cbc2eea16831e5c15a7b1760a79bec4d42226dcd3796806ff687a7116fe57dfead7737228df194e241688f1c2300797b6fc695d749045db0868b23dcd77c050700c3255867d60592357fe00d7584ba39d104eea81117b909f92356dc33aa4081041eebf9428de9a30bfc876ebbfadc02077599ba587cd857c08df088f37167d701aa37f83958f75c5344529217ec02250eb013c7a59cfe64e4686c2a130c7a3e01a446574f2c128079e98024059d507c1ee6398bcad94925ae853d0783a2c7365efdcd878f074cdf4132cbaa70b37de71037c0bea554c30a8056b9bbe2a40a4423c18f6992cfd96e61b4535853468a731c8be76abe44a6e0ab89006301ce62c8ca19139c5d857bddd22d75d19a28e7315b578cd6d21c2c646f4b005c625d75c2134ef515169a437c9189edd46ca5c514c9c9d30a248fa79eda74f48f6e795d558ad84afbc05b653faf42d2a785dda04003bb7920fe4105d2e1e3603b9721c53e3a28638647596d2ffa5a077a977d02d97fbb1a0d4854a04ea2585867428a863ed5b0f7edbc88dc67f207affafb12364b769592ddc4dc2701431b47b180aa59e128f5429a407b66f86e9fa4149470b1358c9bb855ffe92c5441ca1b7f7da24133a2bf317322b9e694b15cec25f3c31a3cbaca589cb8347a741a43f9f2a3958c1aa73ffa5002f4ec486ada49b43ac0cd7f19bb5955b3e807346fde332b5608470f680760afef61b947e3086e4f6dab73a1ce9a4f2b25943e4dfb19a316b98a423e3567a4392cf2fab306681fa94669fea5643dcca213c5b8c6eb9919d2e27b21341435d2f7b83ab8426a8906d307471dae3285bc3e6beb6286ad8eca80d460db2ed930e77a21eb238a936d718bff8fcfc277094a252c1f79c71c09561327144ad90c60e83e055afe55c5d22e5df8f794f6450f56e10ac2faf760e76e22ce915566ac5f9ed5d307751cd93429ae5555bc98488b38b2550fbc086c15b2c97022ca2be1292b6d87ff2a6c3a35c43688430ceaed963dbaf6f44f179f3b15d4811e22a15a6c227b840c267273f65a52e30e81637ab179417dfd0ec0e7ce8360aebebc1ae927351b330472d4c3f6d7fd68fe980bcb90ce3bbc7350e4a9c1487299553912827d4ab1a9ea63bab2bd0fee450784ecd3b0e20bd3cc88d0c311500380e3ec9c25f8401b079d927e10cb26700a7c95af08b19d8dd48ca61c8a1ca49ce41f55caf1a6364c91bea8f1d0868fad6bbc3aa3d7d4c0459a00e5e4ccee492c32ba9715b3d1eca35abe3ff0364ce7e4addb368336a6f7b92920be769cfdeab1355b115378931cfafaeff61e541d69e44352845c18fba58a7526e246ec07a7f872446b33f10f7ffbaf7ce7da8679276e0f3398b9d23ba26bffa8f382c456b499128ad8b6a78beb1faf5e155175695ee62750fa312c073596cbc639eff411ca8e2ca2d2b8f93255d76d5a5bf06f4f91ee56e1dd7dd8b94e254acc2bb0143df668c4a50120f87592ecfaeb33a6a2775983d94523713ffa5626ea4d4c9945bc7da8030755cc6f136ef7b5cd17d35b695cb7981f770e0e7b11cbcd46e40f27553aa0f7dec7b5f3c3448c89ceb20089d635956325dea5769069c2ce23008b6b2de198db44a72576cc0244ed829e43ca54ac29343c677f9f3adf3b60c8a96e8ab6a9f54d6e96aa03963dde349c36177c01272e9ecc2d8ae3cfabe85e9ae29d81c54b2ed89261acdfff2a1c85df9ae8c791b9a06fcadd281220ac0a6a303e6f8a573e8eb65081ce9899e09d6b4af23ed46a61ec204adde41cf9d3414a67fcde34d2b1142da86aea0380776903bf54d411cab1ad96077caa00cb45d5d639fae6396c0daec99799b55156a23383df27e78de3dfbc414779b1727d685363f57f7b2e6f5272b56d69a0cb2a9c1c6d962d40f703eacdb07baa6a6b8d180a30a9ca0756aff420e717b6afe73dec85968540641c6e93973b7ca492c1ec9b00b4449d35b48b3e03146d22a91d1b56597406728f70794ef6f0ca7ddc1f73fc2821f30805c1ee0110925f71c7e8ea47c0eae75ef0e854c2adacf0a8e17893fca7f5e1877be0b7862ad44dc3ec42396d8edbe6fdf43be32f866195f9e036afd235246c7d8727fa9708da6fa2b2c8733feb798baa1388618a992bdc19e13d9ebe2b08f6ab906fbaf18e3b3022347067c6d8215e834f2514960edde5fff3f3fcea47310a548b6c7c580decb441f86784e22f8f4054a681fc31856c06a4f2a850d5f12a86cad6eab836e1f835ed587427b056f486d266631a078cf2ff0cd003dac4b70c9ad2ec770835a920154c81574d60ac9aebbe6ff3edce773213d26097fe2f3db9a504edf1827958a2a02f5d83660988827aa48ecfe5c8fe3efb04edf46e3bd2196e319beb1df4bf8e36c8708cb51343755457e0d067459d0c9cb32f3db93d94e56c3fd84e5683ff4396dd0aab3d18223aab2f052309691d6f0c01bc76fff7e349c94ef5a6cb5e494f39c9ca598cc372219a8081084dd442bf761a325ec716d2630dbdd9744127ceb764137eabc8dcadc6e4be908b574c65432b002cb085740439bb85c52ef759bbfd1ae7975a2136a221ee3ab7ee37a15561cc255668d855eb6d95b1b0a4c2f4753cb6cd4cd8d90379810431f98d6f527bd6e2b4bd84d81f9ec1a13f75a7c0f788e2d07a1002d4a97c49c801d238cdb41117fd45785a2c7f0c27ef91b9d783a63c4217a3395d24c8618b084180495cdd8b542a69c6b0d307abefee8238767751735ebebdc7729d3aadfe7314e3d06367010ba03b6087e30f5371fc9d2aa7e3093e531e2c3797d739a638fb62205d5354bdfffd5388b4d835656de3577306a143432ed8ca3d2d5b8df7a0a9da76f21c914d4e634d89c61c6a03a63db8314fca6fed31a0f01949499ef9c1838b68e528f46f41566ce1387634f05806a1e19d36b46afb5ec18af9d935a1ef5d93b4565bb7b5314ef2b04610d9d86507972709728f9f2224e5a7cadf5cb73bdd10b2ecca3558faa6a3104720fb66985422339b3da703b142700431cae99d38ead1d2e73b8a8996c13a5698cd56696ced11f3ed0453217bc7bfbc1a8491f4b0fd04502950057f434c7c554482efeabb4e0d7ccdec6ce6cea7c870cf27417ef93810357ad7f79508b0cbc861edfa72018c888c00679bba90fcbe379bb9a3240ce66bee136948668730773236fe3ea3cb2d49694f7f0ec94255a9f31dad4c1e8695339ee52462477e0cafe2fe198c188cbfab0e81a4e2f6216d6b49a4ab2532b17a0f01c03ac4d1a044049226a87ec5a160e9eff15ee9218d5b8bd23675399f8fcc0105b79d5142b367382d1ff947c8a6d1897167449cd7a419b2efd429cecc344a959275a9f2d2e66de8e3832586b5f5a740ee57855656154f9372358c7012d0947d489e16f9c3e8dff07293bf4b27aa3e44be0d8adcac19c3ed92bd5c5fc06a44c2f9f19c4365bb8526ae1c007b1c76f237948c9b71fa0927e0bb1db0d60081790e54ac2295ecfd9ab2d5aee0d83977444662c7e0863adf4cb5a7aaf665193984ecde3d75c39e170e55336e8ee45f31ae1f541584d9581dd6e4d966f9692ebddd7e3bdaee05bcb1907dc57766b1448cf34878d54443af790982835ba0eabf6a6f4ff247313d433e98d2c408b126732cf8daf4238d4e2b5a4ca9d81909b9c945a622d3c8fb96357fe9bb4611518545ce75a08b1c1d7bfcddd0734849944d14379f549facbb14e2a9d7801e86a250868584145d027e0371f9ae925998c10133d722d767a38dfdbab9752cc7e5c78244893ae46bd7e90e3e9fc9f3d2a5f3b262370038df9a1013c16da4c8395f4cc0b259681b539c3e07242bf808df6545ee57d6aea053f927fc5a389262d7ab14c3b5d23cb94309720163c598e3c489637bc12134ed8a76502965a5f3d000168fdbe18bc2507c971ad70809c88825b584c1b874c74bee807ce420735027f184c8b9d5fb59eb79cb52cb943cecec63de0bd7d29a97718206a0a3e270b6d329bb656897d0193c57535ac8daa3b208c0f2f4ae527c396e3553cd108875017d1e22f739f1cb79ca9c137000f78a32528a0e50ab9859e4ed75ac440535b7f2e212d7c37e4c0088fdb433611bc8fa547bbaf4c7265d572001d0f0765f0b1d319b3b4388136728c4df6cb08693a5c78f661f472e5d62950492b8c67d82a43ffead8250772037f01cf092d17945b1e4c6bbb974e35b283bc70a003bd391db1d9b8ad505fc6022f4c6dacb6d18824b0238e96e9afa3324de87ecff32021597c2ba81e575b897e10bb557e3a38cb96ee2d157b6dc2650f80db08e28253e20539bf2b94b3f1775fb170866de2be44989df4b8515a30ca48496218a56df06104fdc5580f341cc4477c422792b5dff2cff25414b9cc24420272181cbf969472ed28ae637c24320a9ca9e441a326b614c6fffcd51e573f93700f1feb29b04587e0cd3b286bb0317493c5a4ce06a4844db5199051fffda2f0cda1fe33416cb44b4d4225ef02e48c26a458e66b4115fd9bd8edae1ec890d5ce1b7a20e2040df66a651b08f47b61e43f894c05c1e33801a9b0fdc3e34ec8952e9252b44eee9396f6f3616f01fef317974fd06bae27db41e461282baf90b7e53865929adb14233593c6ff1f181754586f1a7488ee8b67001435ebda799cf8ca3e9e76245e9b3e475cb00a5be449852647f0a9abd40ae7841e2cf2c3928c70db069d0f6b41a00505d38d7690977f1fdd8372c3ad0f7c79d204fac27cfd20a32a3f41e97d76848d0fb564ecdfccf95c89a9ff5c11ccc86c4f4b0341915be422d6e7380d0785961b4237a901985b6da885359e6dd4641e6d5cceaf77bb2580826c4ec922383d10b9f0b73d5cfceb52c6e573b2ae6919b9a9f0dab5589638bf32e65af1714e9eb8236539ca139003619c8c2d0805bc2ae55019980094fabb1362687dc045b2a6956e6fbf6ed294255873c77534f983e9aa094b60f2ae9541ef8c3d7c5ef51ab4edbbc64cb776bfb2d4ef3057ddb157b7d6c6ab1439b329f7dca5049858ffa591f9490b13bfc4df2a00da206df8ef1aa80788b93c053122a21949b42e0e2feaf26b9deeb9174744b8ff30a6655e1d4f97c65abb19ed95a5aa884e07f8625cc8db1d3895cf8922f494b5365af37b57ce80761dcc7d64733588217e3fb917ea6cdc56b4aab1e3676d9a2f43580f4fafc9babe9e9ef8cca157f825b3ad28e63abc8376a9b4ee1b2708c2f8fdd12553a437ef9e8bc3201e40e274ada0302ceda40f84efffb55c49faa0749bb3e495d35ccf61e86fcab71f2e7dc31d1d7adcd69d5f4d4a3fe593f828257a32dff6a0d64e9fdfcd9b1d719dfc21acf35d8ca8d4dc69d80840d56e84c7bb32a4ea4b4b95ba580e112f9c31677491ffcaa6bb98d83c79a8632a99f4387c3af22bac2736915b77402059ad84b7967521bc0c74cc587741b449793a27a1553ca1025e73426c81e020b9585f6e7131b455115d9ef1073258b83012e419b4d658872b54309d7eab12c7e0f469701f861cb1de808021fbfac20696fb18e4d1c70fb7c21f9b3954ea5d442be9d4cc52c73cfae3f560cdb9bb45db1b52e9822a4b0288a4fc6961a81c0d24fa518a96c0294e71b93502ce73c7dda5eb921de8e04c221f0157286d5d351027b9d4e17a9085fa486f83a8a2351079f58e7ca63b56c59440abb2fe3f5869047228533996fbfcdfac277e0ac26f698117a2da65f6561e8d9160955054a85cb11abb51961d7ecabd8902eb0a0e46ce1c77c791d4495bf375f32938db83e2b7a9a5d9f10115a3a677c255555ee96babe29b2f337279dd7f1c0e6353fd5ec60fb11d6823cd198509797b5d0be804d984b37a85e5276218f5038918df345209a2cef4f041be0662a33c2d5a8f03a2a0a2297b15d70369e05b61a16b99721765ee0c68625b56f17fbce8fff48a2f876f60bb976da9525804d72a0446373e6a98835cb3982c2c32c5fae8649b2a7fea461369d6ba11f1dabd2c68630bf778518e1fce574acf08b24dfa889927b115a19d05c5a22f938495ecd467edee3483ede7183be842f5408742f892bed558b1432f3a781fd30dfcc574357ba03a94bef8dec9d71112174b3f0862b6c0eca8b6a54759a985ca20226d629f170d9e688e511a5f3b4fda5340a641c4d96b01ce770cab75a55f60f4a7ac1d32461737146021b1e56be40d2fd028980a108ce7ca7af5b878371d3f7b79a1edc526e6a2ce4031e752e9debacc7dcb82d3c4828605cd76bab15bf76910b8617fee43118fc91ac07f0e2b5661daa2148170d16fb861c7e94e6100c9e31226fde6691622968eb0258edb3704eff3bed2fa9e790df4f07658dc7e8a0847df3ec871b62bf8c0b01499037ca7b065d2241ab21060188a8851cb605510d2ac35a0075a27d9a585cb8738b05b1b565e9ac39e85763126605d14a32cdbd5a44e1f816291b1634e493e8e4531397a854fb0bef7b6b1a0b09abc01f711386f4a1c4ad382a546e00600eefca271cc40dc1bc57f82558f8d43a7ac638e1d709ea30680c4ff6f1703276f3132ecf419f038b4cbd631c1033aec8ebec7fddc2d4f697808983957583e6ea44d9f5b2b8b4896bf3ba6153b819980e4e7a063e843d66114a0e672b2ed3ff69e003647e48dbd2a121ad0b8d963d409dbe851197c37cbb69c1602ecb4c24355fc782d3f5279cc8ce26a11450380b34a89d9f8cbcd08aa38f67cc39ec14bd879839416bbd4b833569d3a5f95621939290401ee155ee8d4cb0eb100f474dd3e960a7ca0ed84ba8804fba7a4332239047910bf17222f592c54972ff77def684ef61af9151371efcc1fd5b8b5c40af5de5557fdf4f484c809a5cc28d535359d3bc9c01ab7c7656e18fef4b114764c58e47575007cca27566072c9e8707d1669f4deeec090ad1f4f7785149619e64320b2f1572bd0955c0972354d3a291936c40ef987293800eb6f815a7198aca6abb9bf15ee190e3130775724b23985f52d97ee3d4423aef387217b07a5e87d3470acf8ac977ffcee1af8ea4183789bc9045a50e995b853f318ec00de71333e2a25870e0d146fd9eeb3a7f800bc0cfb0f1062940ff3ee9a1b353582f62b3d0a4e3df3ba2f1eae49527c2794ec101612eec911309299b8bbae21e84e24537bcbf092babafc391bc025073a11773b20653b98492d9d8e7d69e5b390bf28cf5d3475ce48c15af1f1798cfea0f3bbaf2eef7cdfc120528d0b37283a56a4b73f4b9bace7a8528365e337aef2ffbdcbe3973e10e3aa7426476c2284fd3756aabbd08b08ecbf3a4a839c2bb583343a852b004d428b73df33ee14ca6c17c14987750b5e728a5493323709b969573723b31777f9a41756e37cea854d60014dabbb1ebf79fd222e7e04b29e7609e7f3e72a97415d1186cf07a346031dd6f042e06996e27f82d45f9e079877e0d8275671fb900769ee19faf3f7d65c4758c23712b5ce96b709fae15ca330da7193e50b9541ace5046bab84fc3e1c10591455a779f7a9a2acc4f0fe220b7b950f07c4acf6c7bed8897f7d8c43bac7ff163192953f6c518768f0c0503d71d870661c015fa30da0dcf17fa928a2111d7edf39f385990f58372903324e6a144c8f0916f23bec49e64d06e2a0f7e52374727e8364bebc3e122d2e7c2cfd474518ce563a9dd3eb2ba6fd95e1d921435c9791c6a9ab98587bb5c36e94f341ee013905fc62d0bfb906f9940f77374d29515906476b1a05fe92e559dc3cbe555fe7340bd228fc0b472baf15d34bb5da36155c6f9693b66e0773944befeab0ddd7d56bfd3810d3ecaf508d854a6257cebd89be36772e8a0d0283fd0df113921359047e44b82615e5e2f1b5be5a154d7d87c8da58468430a3b040d602ab1ff8c433e378453c319e5057078469a75824566f5c08db6541d70ec752d11f0c4e18c2ad5bc6cf6ed6296c201978f338dcdfa3de8e0c7bf772fd844df3cff2e59b3c8abedd47c28b600a31deeafe54f37788220c2a6cbed49623575e65700a92c1b775896a690cba84d301cd65ad36b180af90d0beb68ca9e6ee00748794076fd58f3d121bc5668482be5f4ee800d0ccbfd5ececadc7de04903f7a440222e9bc83aae84661bf0a7ec679c834a75da3e3283b9b65c37990263a88a425a7bf8e85f428f9331399f7efb1c404e9a0aa89f8e6fb6a166c7d7110d8330f16f5c6e041f32a678673bcc142eff3a24d312da94d19643b7523543fa53cb3733864d4798997ffba9c87359ffbd925cf404c16b5e5837ca9b55d4f1daf9a0db0a1f006f4758ba5d39f33547acf903cdd8487b9b2139cdc106a862df08da2f9f65bd79db6a5bbdfa2cc4fe4e2e0dfe9e94f7e1c7be9a2858b56ff8f5e6468440bad5def451562c58a32c0ded8db8176f2e247f70a222a6093850f5852268acd6e75764e5e53aea9edf69b44fe6decbe9b1e655c0c37a4202c9706a5e43fd9e515d81527d5bd5a7a1425e75d21a5f9d708726084d12c07a205663045f9fc906227a038ed693638041fd97e7b67aafa7e2c3de0d36cfd396563a691101d37dd4ccb7f7b7856510fc56ec34c372a88b493ef908dc8a38e9ae8f5d9ee2b85223043a7dc548f4920cc63b57e88fe29e5ba4df45ddc4c2c19e48d036ca7cf780e94fd32e94898282488c857daca3512068bd2d2304714e702d46608446da9678595e1e66d7b46aac8302260d87db9596fb8addf0148e72109824e0cefbb40e8a6195ccf50fa5386958fd06ad760b5cefecf08bf01b818b70f30bf66c9a283ab76d92df4ba453cb5eac8a483fda8ce98ea17b28de6abe4ef1b4d7aec5a1ecbb140578a549438536996456b7c799164322cade1c1d27cb7670844c1d87903f60f7598b740d195a50468ff64b4fc394ec97c5b19c283f52742291fd078f1ce62844dc60a6e7978b6ad5b375732eb8efdb25790c1f4e7b0270e503de5bad02779c076dce5835bbd810c6c14c30a19757b9d6f36a65707e88ac1c6184ecbca79d086aefc4e40bc480da54466b9a18be69ae22b936c2240ac2da1e71d3af8ee5c910ae1dfe2ae61ff013859514801da22f7850c6d3394d18db576ec4f3de8c649d779ef91c396eca99dbd25d5d5b1f312706c49caeed941754aae81919b966673578e6dd4a3338eb5d7fa294774a49b9c913c9a052606509c600f3408bcebb887686e6de8d48518a0e1dedbb3d660b9875bdb921f7d120d4284bc86162ca70730390d73ae395f984c28e04b3a7a5b96ba6c2db8fc7865691c0db5a7af83f3d073bc2bbe4035d4cf15096d3ccf0cc14d3f03476eba20e0bbb4c3bb361be614f28e3a4f7ea01b5e80d62a02de5b1e8dd0a3c073e4d0b82174051c1281fb99d14ccfa619569883edfe7fd1ced64a54fcd452bda28c31199ce8cbade2d6a7566315e4ed7e23bc22ae9a55c4935136e5fee39cdee08935ac45f32d68bae9de512ce942dc8c24ea1137ad86ae884ef2195923d2cc126cb17fe79ed39c74c6f58ec29534d23f647dcece73fddffec29f301dbdce28413da336cac06a30f6734b5f30295a155c21294a1d8187d70e2dbe8eae98cb8b4f5a5a3f31b2ec55fa1fd69438a6377a19de1d74e2644bc1d106f1636f38335bfa2372590c35075614de869d1b6b487c2255aa7d39943d6a1fb3706cf86042852c56fee6161f09b1342c58ad9e2b10c10876e46d95d109d98ac5434bc5b4605815ae4d49b931dff261b7f17c0bb03c36f441c13e1409d717d446490eec9e6c8826da9507bf343f9075c61ac5b26abeec51a48c72f7b69eb11e885ad3c17932131db8596c8de217159c2ba2a6404d21f13059bb19536215eebba41447b2a314c71e323c96dab0a8e30c9cdb5a86fa35d0e381a538c42efb978dd840b4c2de40ab291a5dd99328bf653c9907c54d2c287c2edc8d1a8472e8b923beea77c4d2398fd4c62f578e350c0d8b6914404684c9372a07f52e0f55590dc82fbb881feb83673f6cde574041e78513a9a1befec98d2939347accfe79f3878755cecea0968a915f30acae582e681906f017a834ef0803ecd63d6e3a5df5baa2cb98a73fef18306b74deb8255c2df2ec474e16e72dcb8d798146d4fd60750ef406c8f89f58dc7d503b0ada71bf74f508a4ece209a6a73f0b82326e4f1dec2cbb393441f1c619ad10adc5312572817d33767ddbbedcfe350f453efdda8a1c00c2f65268c13ac93e7c2602d0d6add933f6318a96d34f3018d7850491d5af99e81873fe1410c23f2940b9e2dadb72bd77a90c88b31a2b3378ad3008d106a3b606e5d2e8a5b0c9c6fe277bd6f6eb404b2b9ac8f6a436603dc09a7e4ee3edf0665d21624f953e0cafdcad865a26550d96f3e31eafc268f7f6d258de7be98bb8ac181b507e3578c3a10b2aad3e98ff3b854ad6a70ceb118b5cbc15e5cb0181857b99672f070fb4f807577591f1c152f82e7e51e8b96d18cc7c21f5b3fc79b3a4cac2238da1f7070362b8f999ad6a75508247b194331e610ca98d4a6ba0b65a0aba0250d281efb8ab275d238098c39dd2a2c8974bf8de698173890936d93c3a1bd791c16ce412426fc2543c68f80d8f575ccceebde76157868cc556a0bfd2829a236877a1d807fd391c7dc284c9441b835bf0b9818acaa23cdcd5fbe2dfd9cb2c49a29b793caef120397d18235dad37e93a0007edb133b0f42b339d496071b0622fc7198df8fb204baff3534c14ffc6df29cc9a2765914505e9c31265e3a9bcd72464cdb8024304489d98937b0d651d8937bbfc7f58c31de0ef8b399bdcc0ee9532af3a6141159430f89e825edd2b77c6a1fc2daa2a0a73e6753577c98abc5f7c295605c16e6a3cddc2c8f76cd0c185b2a0a2e88a979bc8cbc3099604b72ed1756b0900e99de50199948611636307727644d00b9f7daa3c2266c2728abde06182893c550e88815721a384f49d788b1012f8a89590a1e7089623c76c49c7cba80c66886a7c538877a86503ed73f2cc10ebf31dd8e7ca09fbff94dec5f6bd309f4a9bb1f7467407f62037b33803e4c9711db3a03030f188acab91b553d9455b4a145d0778118d057a7e3316d2568e25e69b5dec2ab0ac49b96f47db16674dd01e6182f92e665228d4d93b3140958fae38a7c05a10505be99f2197aba83341b71aee702e57e226bf14b9736548efbfe2318f15cd8f11a287850e14f28747e90dd7236f82e476e892a1b7c72600d714f689244b2383100a0449c182348e19f08bb7d7470d21c1c371d0245d4cd834ec0b47bee7a2118e18a7b3ff1f5a3ffd78ede135821050a4972e5cac2d265c4bf55ed89eb938788f9c58ccf96687cb8aa954312ac3b21d55f3800a70215b3967b4347dd283497bb95fadd2c0c6ff693781b75394f018b2a0f7cd9a748c86a3526fddcebc76ec9000422ce7ada914756958159958316700bfff4b4aa82bda1290069c7631785fc4d7985c44dec7744533c16f1d2dd21b417fa0bba90ed87d1851bbaba15e34f480f4f77122be86dee220f1763424e1064067b46ad73799fe2f50836dc0f70b82a075319fb1504465f26c0847776110bf1616f695b303354da69a0fde1618da3d4a7176072fc90f4710dcd5ca4729982b1d8b0408e5221db00961275d417e86d073a01170df7bcd4b7f9afd73c198467600159b2fce13aea93f4267f5cfad8f13d0992ba7cd653ac23d2ed42deddfea7131e34fe77639f349c271d017616d778a413bdb27bf7ac824ebd483006cfb5453682085274396bf08e216e86dcfd35ccd9e35581d9358339ef3723bf29587c6f99198d9708e92d7ad9a83ac5a3ea8576b26e8947566a321c32d07407987479e28e2279a2ab2a1e230654e180d197c5691fc6503a7c40289f1a920d53a6dbcac78e31873c21ad92f1fb0a77f1b20687adea1c26fb8af04d8640986fae2aca609c6c3969cc5e8465cab5b5972f659970550cde0ee80f8081e9187e8d1e436535acd428cf819c996e7a04d51b05cfe60da3822ad3efd7e8b20a9e1d7cf634bfe65eed14402bbdab3e2d69399d30b397f37ff3ca077206a56af0a08a661bbd4873022628120155571f5761881da4d8a16f1d54c54514410119083c8e5383aec5320c769c5697214b355b518173b33bc9b8aecc981c3bda78d02dd31de0d46a7f325b78f2e3092b10ec787ceb02f02aa4f03f908cde14c647769dd2ce2f06ea5b6b22cdc86c865656e5f6e3840fd4d1802256dcd265df16e391d729f1f58152645cf8847a2b52ff0c5bff442c8548920e305b6ee6cae03a7d6e29c372b39986d74b6aa75e81fc5137fb655b9f0545bd9534095e9aaed3e272c841520aca861fbabf5e71e75da4772070762546538147daa855c16e74f88a8271de0b1050d10c7a61bcf92a4c6c61ed8f71d5fc0b613f7b41cfaeefd9dc90b778e292d82153abd17999617f4c7f7b9ff13315e4e7e2b006937894391c56d2e4a00d66efe102175c9c996ceb44750acdb5f6bff0319897989f91239622495cbee0980f7c3469e40e7788c8786c0fb07e590328b7180675abc2ab593ece1d17e41ad2b09e8f70fa93991b2541fedb81fa00078d20a38a481dbe90a3458a52b429f87da840bd66e7ed0511b0fcd90d2c01a05daa08cf748df7d3f4d81fcde06442a5b7bded19ebfd2f83367797a79dbe2ad16c273d3a6790aef277cf80734acb88257894969b7a5893696cc7842cee9e89177604047da074ca418a99fbff7d835a7dee97344ab2053f3e3337f8b8067c65f2cbb0d960123ed314e0811403466e4c92c068709890292d55718acb8229b9d86555c8ec4239a0677fdec8626348fd5bfc6d18f74ae36ec48d5902947f0647476933bf8eb49d00b6e55a947cc95ebb91d6584504192a893ecf4c8da6321ad80494fcf78631aab3eb1a98b97ac6dfc508066ecb6af02ef65f19a1f2f13eba674de527b3e9c4b7c79c61406d8f905dd339e6a24ebed14bc0ac7f58c4171a1c42b7830f8f3362235e3c9e988f50fd01e1c53b2cb7e1b1f425f3b7b11a8da83234c8616e61c611e75c34e67ee3fa5469da26b2f3660a0cd112ffbe5a86743b4bfa2c25871e56b17dec522daeaac04b415134a053fd0ece634ebcdfa100f7c4de3861464811f411ee316844896f051e8642aecd96029d6218e509a70a955efa5d16d6dc117beea70d69791cd3df10f34c79eca1b44d92cb1ae91529373691059cd58cb954af30ba2e1f9c351e35799f2aa9742b8f4783247675a618b83858200e48e4461597cdd498aced06ebd8eec994cdd8a8dd9c1c8bcace400ea1229d1b531952fd2a911c3b5054657256cd6425f75180168d9ac4fd4b2c9277cd8cca867fd1a322b3339ffc544405f6d9ffe2d0271c79a3f7dfe0068fc9f265c627b5c0efafe2ade81bf9e830a97343d52aac3f5ba0e1fdbfaa36cf5522feb110ad5bd6c2ee5bf26cb95ffa6a4709843dddff6a4a6a6107378d8617a7491c114d2fcec193dc8e345ee264f8b5829b1cf1288c0c28abaed6c1dc0988cd4a3d38d331caf68d0c850cb4695cee48ccefaee98c1e5de7eb5172a3b527a015959e509f79f2c8b119d4425bb48158948301006a211cd18e266c75eaba3b3aacb70724bec18c2d0d36adcdd0c1053d916bc597a69b6524cffa0438a6a6a76148c1fd6e52208c4e6d555c3d7d38d7f64d41b81a29502973f82527cd28333a7ffd5d538a4de211c08fe34da1900fa708825486799fa6a5dac9bfaa11ca2f0e1ce6dafcc1d505b03c3d35f55ff517ececb3d8bfdf2b781b3bd1e8dffd8f2b905a7c85f5223a48aa2027d92ebe9697b151a93a61abe509252ef0ab88efac16bae2cd807497419fc8f81cc71d0e0b5ea8aff9b87fedd00aaa79fea6514d246441f0c62a498881ac88c333f65bd5113cc03750bf0ae20fe34dacc8ac9a390623b56097d9fb131871345e3cef975766687d8c77d418153b765f58b13952f2f58ce0c6f11846cb891fed0610490fda9bb0f6514a14fa602f819a83cf10c1a292bd54704ba622946de2ea1ba728e8b34a671fc28e9e78dc9cd1f39aa9ea22598e8a92d23716abb9503696c744a3d39f87442d37edcf9efd8f585737f5813dc43dada99826dc88cd53660521712af96767cc9d2c3f362e4f6d40b947881d00de9b899b3fc7a5894907e29cbf4740d955d9214a73e5d48870225c5ef9a3553812f58cff704c55c446530c4ceb22d40ac21f04a55712aca7df70010a147e1a8dc83a590b865b9b36e788c130640a48a8e13dda4eb4653c20974ed66681a303baeb2408ce46c20e1faa9eac5de1fc89261871939e5828e978bde7e68ae88663190e5c92931a748a1a525a394350e0acce37aebe3dfedc3796c5d24d6e52c9ca6acd4a3021ee098ac940080e062d5f72e01f860a515772e5540a5a3e2a86d7a471dcb691c3f08711c2b2d3a471acabb88f24c67bb0f686ffd39fcf98b74b52f6b25c4ecbc1f12ca20ad5b695f0cd02186e6e96fde68f7281da76f45d9c267addf360a75ebb97d8665040fc6dd33a57af035ca06442fe1c036429794a76b21f42e46b5dc6b007dc2ebfcd5e7fe2e3f36c214cfcb1193603910cacd2471c2cb41c95f5a2cef52d2cf2d46e63dff60e8f05665bdc633f964fb249200b1fe6f6c5d59fec4405f41b8f44faf7484446daa0d921536866f7941f0046dbde2f35db9e8db89fbb6bf4d4702beedcfb248e9cc90b435c89afba7459cf34bd269c5fb198a6356a000c0b664e1de8eecac5338b69fdeea1b09e5bc5a894aa1980e1e3d00420af394804d52a886696d3d162af328f02e4f61df9791bb6192fa8bd49ca879583f0bd50d0c455e755d4107462f807a63d97c3c645dff14e4efe1fb28cfd60b23e7e80b527ed0e5de555e2710d2efc4dcba2189a25cdc4aa8fc1bf0ac5e0ed439f388d2059b47b99052ce20eeb4235c4f8d75e430406047b3d6d05637092f361d2dbca9a9184205e6e67fb57988e6a8765d702988bfb6eea6fb95d26970550869f6a2a9bb3132d7fe576e1f1cd7bc9df63daadff4c4d0c15c9361e73735baf7b97c6b0828863fc1914be3c6fa0c5818f4853867e4482b92bb5a8ace975ed8e4a59d1bdb20a4477b42198d0a50d7454677888878d7edad910ea1e73cf4be6eb47d109cdd14ac427dfcdd17ba26ce1b6b65c36b38890469993e898c7a9ef1fe1dc6aafe3933d448dcf804d9c0e4ae9db9563c1de1a4e8c925886420cac2632b84b3cd0b9ba77205d07f4c61d04527585fbf0fa60af2f276bd99be8c5833f8c0f5659d33a239c06fd84b462bf218bd9c401a7121552aea2851a7f331992e07ad5bd3fb035ae2d11cea130e5eb2566e44bbea75acdc8c383ee444ec16c1f540224b534728bc3138cd8e1d9577f7644ec3b3ee3cf0417d055955ae25b13536dc2380bcf106861416501b72bdaa63ecdd7ce74403615c9ab9d58259c25f837cb4fe2cb30089b591d4f3cd4ad5c6a7693c22da94d7484c18edd9fa1a791e3c3fa49356a90e6ff8b388d048570d9ce63773541fd90ded62f434a8202066d205c789af2c54038579b1af8cde28a053d7e382f3968ebc68d5ea7e457d9a856e3c1817b434aacc01320a39b12b06cb6d2962a8ddd88f4eba3f68bd80924cb73091e4227af1add88033cb683d44c43215d2378b92a676d3f8eb91034ce61ddf749bb90deb33e82f4925fb403c50de4174cf4018c28b10cf3ba55803fbab394f5fc9fa3bdeace1086859c3ab374f3e14cc1a47c1ce3031e5c476cead3bd419224cb11bc56c9f2118d2a0c2f2c0c7030afd2c3882ad03a5b1c041f2024f556d4ed34a303902cb597211feb6ac1c803cd661b51e23dd5a39aacfd434aef698c08d6dc8d75f839f86d2ae9ce016d10a8a0b6c44b52c443ad1f7ff41d226c6b09463150a732fee8ca77f56ad979fe90b259fe2a5d23a986c581c3bdb14bac3e390a3352cf5743431f456f9c2d461ba5b795ab79af442cd6b527e8505f9c2bdb5ce4964b2d62413da49103e2693cb2dfddd0c277319ab94d793d8f4daf6b0d79ddcf5f07bb3f0408cc3c3757fdc0d1fbf37bc1ea6082655cc66ce3fa7171bf4c8faca4acaab1127de48c6ed731d0f67dc91622ed3510f3e8e77a0f1a46f90944425fd2dde3998f2241e24f0a8c7e75320a43c3ec494a360f5870d979dc132af36b4970faa9c7a61651eb340b3be9a2b11daa420b5997215ef49e73426e257f72b1812b6dcdee90f844339dbcf565cd1a25b302ea1dc597e58c91253baf578a6c17dfb63cc88e7f2cf1c138d52c97f1c30192a8a19c4dc1adc8865541280975c9c7703fb8ce49be1e1486d1cb1d8322da23e75b40996606bd235579945741add76114c1fdaf45de35e0ce1a39e009ae11d5d76f243b1eb60b6019984770b0df7f871f762c2614e151ee2fbe6ffe7e1d075e098dd7fd2f8ca0188ec40881476980b11033421e0d7bb71d43f9187166ae1373b2a7c8eaa9f61d47a0268a77b8ed30e886c3ad05f40645934c6b11840e3499343d3d32c63d9cb0a34893dfe1c241664dcb8736d4fd7df9c5d3e0f9d20bcd9de545971fbbb8b0fe7a04c35b267b5690284aa8209259ec321a7186b011091192521869e043f67ba6a17e4d76087ea841820da9ef39ead5721426aee3c4f21b4ec89face39b1f27c5d58d51d8bef23f4f588c5b102b4a8ba0e53cab2cd558ceda329e630f8a6d4edc8d5e65d7af9c193808bd4d24941f7e8e0fa7a559c3ce120a6c4d635eeda7b8627f5d09691b8a1411c2a9285bad95d8d48c79a0db4d4202696801ecc3248620f467a21e4a82a9ef77bb6529927a6571000dc1d263fde8553a376ff98dafb6a70bd4e8eb0adfb2695284b4d49977a5c1947445af38146a79e866ff523d96f488735c38f787339e27baa2183b93f8762180c96509c6efd5a7e51d91d203d7ca5becbab427fcfaf6e3e2ba4e95d5c0b90f56505716aa15b50a158b9bd513a3633866dcf199daa1b96804649125e63516fa506ca1e15ef92410ade5003082710bed54b1d2bb5b481f4940828ef60518e993541bb907545db64eec43ba6537ade6a4726f54716b6e21a09b5d3827734df6a1ac64ee80a647da4837ccd1545b8694d14d691e615764e56163369303af2fb52cfa50704723ffd1ac5ea213d3a1e808f3fd920fabfcaf141a0a74065d26ad4887750bc3c00c4fda4894b66c7474e9cc3dd5b57523278c9622d9e8ab790b56597c2c4732c82579774e5e4efc5c009bd2b1034c11ca70f500cd233b2c2b310404f2c3d7cc64e4f81c991ebf508336400f54eab07a4165e1e0e875c9636cfbfc77db30141975ef3fc849db9f4332f61895d2d8899da7235740a42b503641329d954008d0c0bfbbc3adeef57f2d5bd4908ce41c8c079ffd7f0cfc3d07e503a3bea5157804a6556aee4e2e177a31f850194a626e3f5f82490101eac649c4b5df3141e758c9db917f49352a531ac737f4589b0a0be80fa2220b881712bd13636bad11e226eea85f0e055f6f925306cd213839cbd95093cee22b1bfbbeee0b550b2b0c07eb2d9d49628f4dea031d7ecf9188ffb4f10b322ff2efbe75e7a7092df927a256e9a69fee22d023bad4aaf5ff114e40cc1f79039a76536ec54c1a8a6b0813964cfb8d237e0ff0eb9e92199956ceaacea0b8a5bdbb6aa32c4645732dbe67ed586a44e1b345436ecfcb93e8d2084c332acff7bbe33c7f55bc9f9df71aa578be1e4cb9b682706cc90df3eae3eccad5ee3260b91d96ba0b531479edd60c06f89974d18d19615721537aa0e95093eaa920c648721f1b9fe737a24482062624cd5684f8d296be9cf80b65d118783d6288ef16472af96f758307fb9b324916e4031d29f8d68b914ae41718e90b00cdb4d0d8f56cb90dc5449dc3716a563a4c0863e199d91d43370028eb3d00ee3964cfcfc09ea9c94835c365f6f2d5be9d9229c4af04abb73257209627296350689eb3cbc92555b9d3f8e9416e159e349b24fff314356f0d04e09b059bc84a84fb7934ca1cb45118ddfbd7e552d379d907bc48f0789b824d90fe629a0e02bf98dafc2b7c2a28385194f95714f672bb117189b034e5bdd461017ed66bbd9a171e8d27b0360375be3dc6ff309a78bd2f84a62f37851b2af7f817bb64e1e9f5ae96f53a957fa6b9b64d2be2804b237cc495e4d54e8c46c1ab466f5718be3ef5028b44aa4bb206015a0b00a4f8c4d0e3bb0e233c3fe3d3f83d879a894a6a52ebb04ece3e12ca79669a414d43f5b081959838244ecbdc8718b791af737348465ea481baaae707bdfa43dec9ff0b6c7c79d6c1a56db65d617f4ce9e0397458f5d69ef81a383042a06c47cde1458c9284e1479fab50f16ed0de8a06b1ff8c6fb49a2b25fd711d348955db5110a156ce87fb98399bba680c075a07cc511b9f359fa4195e068409e199359d54e5c3572026137b9bddf3149b37aa62e55d401dcbc77ffc0ac646104cb0997272ff66c90805b1b2cd83bf2c406f7a9587698804f0bf94ed773449e36c9d9f8779668225938ca75cb3849c45455eb79a17b34b214bc0893976b014ff57b67e719c9cb07983623a5bca42d2a5ac01fe14581e63e222dcec60a5d290528ef79da611f56c9e715ad3f2e07f0e46a84f00f1fcd7a3ee1441200c7a91c50ddaeaf3bfa93a9ca152cff81ea4538e48f1120c97a204cd43d1435f90a0c60c07748096ea65c494506c1c1c7edabc535f3a3e4a6aa35aca7845dcd0c501551ad7227575a4f803f3f8e2632ec62d8c8f868e16f8d7bd41077bccc179bd3ef8993784d353e5b8b0ece593e813703ddf8e00b1a604fad10f193bbbac3bbbcf62882c38d2b41e49bfa93f7ccc3908469a617be22ae949393600ec44405bb9055c97a18bb71fc97742e5d7592b4d03efe8a43f27fe2ff986ab0f41a9621db069979e7e67bbf110be7a2982dd1a136cc097f1988a311815a76cb424089155a53e2fadbfc805fd5645966bc3383864ef0d1a8899a4033462c406f2b3419aa781611b3c02c778169e79f94ba28b09c844eb5b4f8a303ccb6f1f3575e30142e53454186ce1003478ab971f38fce1e2e397048e9798f05ad5f6f4f4f3a3f44e6c7cd9bedbfcaa840f82d319447187884181b2a0ddac366e530ed24da5f87c48f9d0acc9718fcf11f419d94808c153ed6b6882b012e5820f083589eb7e4040e2a7c7349ecb50d868e6eaf2055fc501b82c9711568bba6df516966aa9718b0e8ace6ed127ad75866ca297f89e1f007d26486ca1d6eb3589b0e673c3f916a46258a1928c4296c4c9bef8dc20a10674e8765219086888b6d4cf1a991a44a5c5d0ba24dbb7bca39d12ddc1d93855a2263700d8d2033889d2fdea9fd1a4b2198939279dd18a23cfc47b5cb82219b010fb9192e24c879e6173559144f5d83a67ce1ccd63b692d9f05db9d4698ea6cf927802f27b85ef55dc5c825e291d9f9530f0beb8c18d5af8e208456f67550eb7daafe3c1c29bc9e939b132fd1f0b6e8de129f8008df73642617b7bc3c1b015699179081c1a4e51345c05d087cbe890f24c8df1ea62a656fe93133f322c413c9b5198f3becf05d377d291e9d80c4c7c9bd5f5c8edabc8f7b514a81f8b3608e8d82bbfdb052c662302090472cafe3c8b349c5c69ee247fabcef13caf8ccbe9721282ef5b98442a4bcd4cb1e4694fa5013f2e53d06ea5d9799aca2de929b9fedd6e239264936b14c0132b6a15a5a5a29da6a39b8ac9f8a3fe5ea5d102ac1b196cc14c8f301b3e68d607343f74edbad79ba0b4a955fc3d192b9b0f371aa80451a3a34803777d1d2e48f1ce51ba15213be719772967702e7ae3cdb6a7c430bdd0c6e2f4a7d0a1919466da02d16b83791527b5c1cac6c9c63211c9c96c0ee5ac7e426b9426436e0cee08c73b839a1e8e5332be42bb8cb6e3ac770fbb63c474dc3c2fdeb723a3f56f4ef8ed869551ddece3ea18acd6bb1df83af657691294f86a1ef1ad1e732cf532c490256bc7498fe18e574102d33f32d2d1c8d64ec3d27b5fed976094a355dcec1e1c14823ad3025aee415f36fbd24acc5e6f9161c51cd50af9be19ad2d117a64a4f06be9b7e7549a0dfa6532b8211320a4ebb055b1e8b8978ad073a8254a42580d7c011204455f99c8fc11d55f5a3d6afa76bedb4d7721776572dceff969528e71562f3490cd7bb572e41800f3cbbd449b9745a07b73d36aece51c941fd4bb08bbf5af743d92bfe245b9b5a5bb2dee6c299dc9b37e74b4a3fd0fcde5a26d816ca63e9e975552a9955b4a460ab7683f9f84e48cf9d519e78a96b67626239294f2b910cfb69069484f7cdfe9e1b371c892e7996412b98396766d3963d4f6b9517ffdf08b284fa016f0f39eeeaf02fcfc1db85f3c93f56689deb318e72e632a4126322b1f14a2094ed2c660c41670a52dd6c03c96ec18f3c86e33f44bf456af93b16546376f973d90378c643462b43626dd1f2855cf74a8baef4dd67227ea8f85a0009d4f7967ce72e2fbd74e53bd6e21c7bafd2cc0f1ee714b449815bdc222c5ae456b076e1c6d19a9e7b71ff65b28e23d8a8f3950ed21c70f2990cac8aedbc2c190f5282746af92e0feff20f3187a71b32931167c0b49a126f53a726ca9ae47aa2893a04eb753f93eb7d17ce1bd157cf78ac00dd668df489b70f24f98abbfb856994f6092569cf2f7adf6ade778c947f295d35ce839238046335708a320ce312cb92fd91ba2bad54e524d1bd096abc71b2e34a7ab960c2753684cc674581a5812e14c91ee369110f42a5f493b4cb4a12c6ae00b7f23dca35a4f3dae89813c541340a95d1f19f998991966656f19dd719717e18b0d058d3716b7fb841d9d1f85fa39a5f5c8b155d76a2d68c27ed94caf3619b284a90253ba2c989915098973de6f1ad5f0de83770896592865abf3dabf73aed57a9ebd265e92d4f87721013b901103c5a42cf2ca8de2908f46586dedb41bbee276073e0c232f48bef3aa42e7127161eb1af4e75b602c483e979d3449462fa9749ebe109bf64b45cddc69c65c88191b920041e364a2fa3b4b68870d11bb4a5f4273d99a7b389d486df8aebb1a53c8792d7f60b3559e1fb14af887af90c6713de3bd4251c86700ac939e19af94360f50db21d2fd3f42a5c5921914e4c941c02b885ddddfa63814af6617cdc79843e0709101c063e3b599948a0725ae9c0142afbd60d2d070dd4332987f964e5d3c9254b7145610108a31cc2eadaf42a256315b48c0686f18fb2f86a796712e25d4cad7b7a1e39de3b6a18de5eef69e0d376030a2916ef5d5f96f8315bba196c3e742567ccb432b88405d6d64340f12c42a1afe51a190592737cf5128c8187902313d749b3fe1c29cc9aa4ad620f0814e8cadf0c1a1674c30dc4f121d6240100e1e901517dfc619f80a0ff332932ab1bb1a9c9214b551dc37bb263f6067d0d112547447c950de70aaf987b01e11de4324b20c0a6285e8b63b814f95bf979add5dd16ce6c93653013ee0f1e3067ea7a03c62492914a147d84139d795f8cc0aa6c233f8805332065f3065a0f55c3fb370cf0135898a11bc3cceea9c45aa542d57573e57ae024f09e9aa7d853ea1929c062db878e0126c038fe5312020f05ec32d1135859a7f3dcc334f94f59deb55c70648af4fc5f2b08f648a41b474a0e4744595fc2a7c976c9cb95a600aafa804b2756544e59a5024fafa7a3c823a826889f2b889d1abfdc3232d23bf50806d8c5dc1834cfb0c8c6cbdeaee0a5a271c5a407a4101ae171b511780a846b60129e16023a82c50efa0577b2080dee5f9055996263b68a8b20416f7eca56ce193d6fe32ba13efe794f1d291a46e9f699a962a0b87b1f4d1ea00e316bf737bf2f7251fc17bfb63ce73774a40f7b31c47dc6d1ea8aac42c1cae248f8b80e6f9b373538c6aff6c779135cb48583571ad84e29375ca964f2d6a29d48211596c6399f69095c865871e80b4d81201ec17b2696afc1e6f120de54ce07138dee0c7a696f231c4ead72232fad4f8190b1ac668bf9ce5c68d854ac9b41820d95e713dd0337298793ff2c728dc8dfd91c5676a6318e54894c43bad75a0694636fc7fa596a60419a79070df104ea87eac922dc009cdd733144d57088e0f307ea7f963fbde7ee10e469c691023a7a706d3ef6cd51df3b97101d59b4d33b507f0f68a7c634aef7a235cbbdf59c7fd22bb10f4948e77c1442591103e7dbb538c42b2526f328b8f8c86055d3dcc94c79bec02398858b7cd8e2c4052788a70fbdaf331416d37b74272860e2bb7ad0861fbb17e3ca39957c2612b33d40f388db9ae1f666f6e84dee28a7393b44312ad91430bbb5a419906d47a50c64582698e8b21531605f12a372131af67a081c35e18fa6c56b3e0f4053f929d255e7b66c2eefd3c4be19bb12455a1e7bb5c468f6655fe3c550c8cf8485ed348ec8d07586658fa9ae1b31d83c5e003f376a62ff7b7d83618371037f352ed4be47685b360cc1bc16f422571d49694da3c8a8210837107f220e05b44ddced79b7be97989d7031999041bfbd954f05c30ebb0074341f2f6e8720b299da08a69e3c755ebf9b1fc8d2443379fb4499273625806446b49918dbcbb267c7bb96d0ce92ac00a088529dd3a09cbb3da637d34f5d5779a14fa0dd8ff0dc519283ef7d683967ed3d8cb54c5493e80dbc20227ae51ca41c9e3cb32b6bdeb31b58a3e5c88027bb54a75e6ab5c31dc150a02bf5af86b55ea305598be499b4071d41e924416a0eaaf8efb0b0a1c4654c9318eaa34ff29c0f62441c2f58e04bd94b1faf0dee08249af84ff2a2b6b2c89aec542f5350fed913dfca0b1d988413c6b2496a2606bc8c750f516592936668fac48da3eb19aa6ed9d8ef52e00cec8722b6b5839399ea47df8ca23aaf124a1c405927ee6de7b3642ef71b5e464855e8eb0b6910b1df9c3215fa7af7f01e0b0e1352a34f364b230eb4e80f3c1510d7915fff62d119b4e35d6e7b808dd6e6dd665ebb0411d8f8fd582670faaa3bf89c391f178ad987cebc3c5a40548ffa1f74f221dd014fd50e374f391b82d844633498d157128de436ba4b7d4d2f99088ff449d6c44a7a99e18e7b45ede3a8c542ce708f087f7ec5d26ba509ad389ca91d4c72fab3c26c1b38d7d6bb07e4c4036909e95e0f3de47272389d73688304fba4be935a47f5088bd169fbb0ab067c9db958ef3542fe6fc6b1a65599ef0588487e010bb21451607cfa8e27c4b824c1ee8f939bfc3430e4923c5b10cfad531ea14abd582bf8d16c69aa935f9b483cbeb8612ef3ad9c0727904cb36560f8ba7d05c450965f339d8ed3b06c989be81dd60b04e434d50d067277513e676ffcd3dfb873a5ef8035983d7f3fe5c428b866ce446ef45ea6574a3dfff1d0cec6eca02e401ebf88d94b22976fd9fd7fcab0138fbaf1197f7bb3d35f052795cf5209a57ea53aa6c390f2e9b50db923ea4cd51e27d827eb4737a7c2f260d68967c816881ef2e453b3b43c125545a84d8ddf9c43d7612fa4d1c76abce3036bf2c686fba83a4812505f8c28d83ff3ed8899ca4b078b52eaa205d8a0e0881801728c6d7b5670d69a342c090e5a646ccd108994a305833b3023bc3b3653d786f46ff4b87ad503f97b87ff688d83a23b41e1e8eb10cc997ce6611824e578b59d2e13141b3a07937e220ee919557a9ff28eb38d111f8a933f0c82717277fddba6c5641cc44df9d295ce54b26c268fc930085460b08e8212d72bcd947e21bf14bc511670a1b4196c72a985a686bfd5d9cbc1072aa9893d8b1bee1d24ab91cc81ab4d87ec11833026ffc642a4dc70bb132311e371be4793fda323160cf38a410a36135ec0c2724696e9811633a1f8511d9e045ba441e272d05be340017bcc88df6adf7e802a6126ff1da6b648c30cecf1595e923ed0a4600b23eef959df5262af901354f11a7276216b81af42b329016bf09990bd76ae4160409119d39d72175ac30ce4004953c450f56810709ec3c48ab35652d3d6cc9d3085858681315a113003ce75c504e8899246604d7b6460fb3ee9c88ed2c63eb5e301905225d6b26e91c98b2ae6aa1a7a9f7a96857cd842409597d315260c63f4f18893d97d8856e46e602993676c5af0d5d7fe5c5769c471d29b658a05b80d279e41eef853cb3787fe01819d8e84d1e7bbf4eb869db238c055f6cfc6c3ce54ad60aace6caa31b1e4438a475af585d1ff59c225b327f02e9d6c2c35f01c6bf252f9557501ee0a470923aa196305aea4d4ebcd12fe3705195787089b187e83115429486b08e4c25d1642822366eda99ff29aa96b4a0d50e5d5a803cafe42052c4af2d92642bfb83b1c83da5d978e2c7b7456fddc8d0aa29532d6b85f0d95d2383d01d85bf25ce72667314f135789c7541b1359c4d88a7091a97aa54baf6b60560a972d6e10c092c8660b9ff718e32b29ba36d75c61540124e5c89be7ba2dc3f91c3358ba5c2c75b8e0d11c07e013ed86cafedd62e2b17b6ec176cef376eac410ae7ca0a6f87c8bf7f0ec8a8bf11fe713e688d1cd919f0b7f14fa178d35a8e646bc5a876c69d139a513cab6ea16146a0014988f236ecb3934770dfada2268c178d769980e291941408c8bed9523e2454d504e9d1e42709191700bd344436ab4854869a035069855e20c351dfb17faeccbcd3c1fd4234676fbe3b09934b190fde4d1c5559e4a8206a916ca5b66a46a51d11658488113436281afc35b2114ac743d2747c32e0402f08ab990382b5bdc5e74cae28044510b3aff1c4936aeed4fe99308e154b1148ba84e151a83472e47a8e96d2ed1862bac6e3d81d8551d9793bb360380a72d97ce0c27c5130656f3153f184a194f3ee239c70334df6169abddf477c373f381099b8147155688f02700d4144803453299ae81ddc504dc3c9f34e3447c260ae3fc55fb64cf5ac7dd20d27dad7f459e6077ef27967c71329ce3e905a8865c1574cb6985ec4e75f1a9a7f5ee020b656b15c6076d1ab851bd975957c060e3ab5cae875021df319e96c6e5694287be5f029467f6112bb039bef4323aa6cc83d64d17d548d43d2c8898867aca4daaf07b98ec5e2fe741c35cde1a414fe4bc75c419d1da9f6882e22f9f71036b76368b6284e891b540d7b27d488bfed3e963f4623ad961721ab0311555bb4fa505ad08b60f76a77614b2c535a51ad80a13d105ca620798d3764190a7c9f16a62b4a3179d9466e5ae84a4841019fc2de35bec7094cc419f51cf40bc3e0a6273c283fba5e30dde9f453d1eaa00a18180c8883896c43115077d4709582584900ef72f0481f73003e0cd377867f9b42bb426d51d76f22fc1f48f48c095c6cfa60ee56339812768d2a3d2e5e7718b16f85a834571166dac31be326ca6d7ef77618cf0e1bb63a3ddfa225f4957edbdb9adcb6917f57a109a0ceda23934242d96cb851747f6d061e1f331b6e83b8d9ebdf04a18235192d92e100a2d315098a68232440d36de209558f68f6320784a4ad6e236cc77cbb86663fff77fd31987dc65644e2ab08f275dccb8af178aec100ab18d51de9b227c227cdeefacc20d2bbd37b083fb415eab325c88cf3902795b6765546f0a1a5ea4765a6d700aa727a46367b68b50ad5923ba2e9e7114758e8575a004d198feb4c5ef42bd4b1a2bc22cee0204c30f2f4f119f4490c43182762de296a76c83e13e4e9595b241b10af8f2fb7f5c2ed060e34ce8206aef57eec12221868616c52826e24cfcf8649dd3590728678c3ddf424fc0d99dc0b3f48947508c1293e97bf95c9a18ee24ffb6af6c7b98afd49cf21cba2e6bcf2664b2ca9e4a8abfa05016d7d6ee988d4e82d9f7325ee708b8c79b358666e8ba65fe76e667bdcedff47de666bf18185ba5ce4f60a02067c2464c906694d50457b512fb6fc3acfb64cafc0aa398b8774e1c342d36596ad196e2fcc195d2f89efb7490bcb53958d69402717b42aa9c13ba39cf87a79bede04ab4cf6102b241f75198d8600e1263c80b8a67d3a7d9b97003f4bf37a4bc4363def352ac302ab1276f784f91d3346798636d746e88584776d4a7c0741c01291668be28c62ce2cae3cf710b9b4baae2352b27637f93629806a56813d019ce1ea7b235f193445dfcd9bb6b544b9fb8943c9c90f1582d61c11493618a20c16f845f35950644102529b66ecf79f6a18ed015eb41b58bd0d534dc70ff75a9114c8ca8cebd5e6756abe5e682ebc554cbfb0e9369e0e9da06eacb496cdd44a44d0943d25b66f5a59aba92928f5c210212e905f6ba38a7c7f522e21306b7c33b80806d0f8356fb5bff1751e5cda8a407828829644afc84173f3f610440bfc43fc4a4e865993f3426193e11b31e88c68e50a8157bd882ad9a384fa51ea1bc4aebceef43c7e8fe89c3adefe262ea9ea9e2968fd775c9041da57c444712dcfafc021720f618a6dd2bfc92274f74e914d1ebde28b298654eb1da3cceee2f3b390e63415c8618affcc0d8a76ad786cb9655e6397efa63cb23b7f4edeaee8e05c09dce42d0c69ef2ecb9fa6c5d486385f17ea5131ecec36d8221abe6776a19a486093a348473d85d92cb9ec9154be6fb06c5883a4c90371a9da6ac6ee98844df9d1d12f639107f94d8d2226ebb13ea64fb97e6bc229651ff53e9585100086fc6ee2de13682cca6fe75e60c1f6b899445945747fec8aaa6b7a66c6d056c4ad9e7c7dd7aae3971af657d31e51ae9dd7a2669838364c728ca860734de75db0d42013d3bb7fa0c094ef551cf539d584aef433b26f964adb4ac0b36a6f58b8a6dad5fe8cab60aa7ba4db781283542165f4c10e10a41e8b45655b906609b33d00aef14f728e4b96a07b90d94357b935b74748da9cb405672ff4b50c706cfbb687973ac01097dcc630e13fd960bee6f99d7c32db9dbdf32e7f3366d1916e1568d8946c7130384cff71585e08bac4e2496ae8a982f35f60d979b3a481389970b4b86b4942c8e2c0ca50a06a5b3e8fe7ed9030cf34e8bfc54057cd945191b1169c2b0508b45c5eb749f081233444ef3d793edf3c40236d9a8c2c6fcd0979c76b63b81ef9a6cf48415e028d5a826e5757af91f0051f76bd4cee754927918ee95f0dfac9898d4f8e72c68614556655761e0293ff7ab402597ccc4e7fc5ad05bb0a5b3cdc75f09963c974e09ac7082bd86dc065356717360ddcc425cd88460dec051804b8a104c0c62b0ad7a2f03ed0d82079d4226c14d76d3e4d793d7f322321105d12913dc221a634847b4710026cf61b97127156f1278d140de3a4d3540351844c5298846b0f2268ab4329f413a05b8a5febbd9840bc7d18bc654b21eeb1528d45ae24004b3d01eb07f220728f6de0b7b417da61182b42f16e72373a81a2aa3a63aa0d33d10aebeb6e5503d9af2d715782158b732e0b2a9f91444c69fc8166e10bcddbfd8745a55fbdc9a17a171212334705cf64a8ff141744e9a522734d44662649eb7e59147d295e43bd795d57822850eb3acc1439777da09a276305a9c677c093ae756a726fce0e7d0fd7fa90839763d3438ba74b4b4a656d1fcd6e81d5201ca5b995344cce3aea2f3154d1a41ed9cfbbdc678f59e330f2e0462e277179fbf7498681ffe42f73e3c5936c1789f760e56b52668d8b5cbaca9d8b67d12d078aa9293efd140af63a6f821db4c35b6c644aa72382d9080d7136fe52b269b5293fcc3925e4bec8ad02bb70f97039ffed40b8406e6e9d97194d6da4a880c38ac32874bde828628ef2d07ff607e808d7a6c57b014d4ac0b6a111aa75c9b01dd20232538c5b78e4559002ada8de8a2f2fdc796232c37341cd3f6a005477470ad4c03a0a683cd90945d738133e7169e11f45edf9809ab4d8f455265d28dbb753055c3dfbb1d33e8c23cec48bf2fed65343c0368fefbf52bef74f31851373aff9e365b73d1c7c80c1f0cfff0e21a844f207d5df98688d87125de5cf15339971e9878d9581519a754457bf5a36cc5a418ff4cb213e7fb6dea45b2fcdd49a952226e25e78286346913e8bf355d1dbda1a0ea412ef71e1815cf84f22ff89c511495d954773cd59fec373664846aecfaf78953eb4ebf36dda1370fd807c4201712e28dfb22c80c15b459e8567c23f9afc5ee8b0767a27f2f747e1adacd1d674df65c1e48cbe5071624d85183eae095c09d60152d3442a3a32a89aa34ab1a6db8e113daa1698332a294b522889196e2760107986e302cda7322e91142725e947dd72bfff75a2c9635c37556cb59c40c2d0f56d797ce1f7fc82e014f18adce7570d576934279ed53d9dfb99822fb34739177210b492685d0355bbdc5dc666ccc6351735d8d7bfe2e351225bb720ec0f7e8ac5c8bc81b141c845db0da34211e26b3e3272f27d962419e4442f8fb6f8e87ae14db0041f3cdeab295879c77f95d37a0ed9d3a7c5376cdec812ef690d4178f6e9e9a98489ff809c41c85b6659e467b846e566fd28b112b8ba30ab0a196db7ed2e7959bb6c2cababf598c76f4d8a796a4524f585569a88c85e5e6a059f0d4f3511cb8b6b00dc52c6547b0e3b848515fc9ed446ea761aef16d57410ff4124c3cf225fdfb0270c1919bedbdaeb7e1e8bed6d051d0cfd1c3ff8fd67c7343f2af5c90d75537014dda9580bd940b1f8593d5ba5545fe033f68d1c27e0379ca162a988ba3629e98e41166f442e9376e6bfa9ce0a580ff421e933c227717dbe4b39a1d32bf06290bfb136ccc972b31c43b6377eb0d6187540e533ffdff9a539e8513dd62b6a204f2aea07ba82983626ddf4514f5bab5d6119a7c0c06fa6d7412a8a6381ddde0cd0e66021b05ffdd370a06e6c0c7cc03f0a9c9dd1aee4e6c49f916ad2eb943750d214f8bf48a237fbd3ce1dbe305bd2b3f3389085f46f38054e94d0463a3ff73ac517fa0a2f4b4216ea9ee1671e16b651664100e0362d71a8bb8c3f30f8b35d68b333f471e0ff5adfe5512acf096001320eff29674a26429c19f8c259c04e55782fc68f77770f92bf53d8cd1291615356be4c551455dcf9e8e602c8e00397af5260bbd900f76df34cc556c7d7a7393a4c62a362422f398e7259c88915634670d33d49b783ac0a4a68679ced8105bcda8bb7e553c640ec8a6b1ea4bb2e9499978763e4bea8229fd93aa33c3cb722e87569c80275cd920f97e3190583aa87b0ab31f923d7a6cf0e5be497f0b1b29b5d1e1bb93bd015a46e643667dfcb411980092b59be9abe9f24bcc78ab9503146ecf95c725b61dd2fda1dc73dac68c104a724b12f55c317b9cf094df62268b1db16f87e4fb41c33443907d2a875b2b571cc91b0cbf91f5a2baf78cd1cd32a670a4b93374cd116173a3685ee909cd6d3e87cc7b77ffee6a1499d4ba945e84cd2f3bbd547917691c0fe0edb8ed7770d923998d9e07c44141709d5f3db0cd2119b7c647cb5cb8ab1e9153d4d109d6fcc724298b4146dbde80af2dbedeaf507da8a705f423c790ab3fe3f741e78218981bfe77515e4064b4b2dedc5a03aa6e7bb95d555d2504c02c4d4a6375d728910ab8cdac5609e8b77944b8458579fc900546f99567e88c32319f9e148070038895f788ffdae65d73e22ef6e683285a9b02b6671c3fff9c82a89d02ff06b84c64a12ffbb167cbed109d6e4b3651f505834306cfc442a16ab72d2104fcf763b74fcaa459511fb42173f47e3aa9250407fa07b4dc3d667b5ef60a930db90bd450200897ee5ed8776676aa8e0d3d024f660c8e3be71426d18e0dddc93a09a7d0277f5ff5dcda54d587768335039935f2fa53171ab6481c6a275c7a03fe4234d5d4772689b2fd270ab6f8031fd4f6ea07a529388bea77aa78192c8bade69e7519aad267cf41ae57dca0871ad80da33265ed2b4050933abd2fb12e61ae36acbbdc04a47b0ec6156e5a71e1a70370eeb17f667b3e8e900c74a5f14caa600f3eb1084740ef90636391d313c3731d96f64417d5fc09146fbe5574a4c0a2270723b8876d3426bfdc209bbe979bd2e926d084d21d0f6ab8896363d50b722e398bba4c7c09b2c9d00bc676e9d0fa3afe9bff3c4842e48c2448a35bb5735079e6c9bbd495feda2f546c18faccac86dc3d6bb2cfb3737dc6d83ea90137c156d931e42398e9c6a4fc10d53ded423ef665b689cf3d5efc8ab4be66864cbd809bb521495cf55183447dd052fa2207be3719e994c108a76d9e4678265b4a2e3b7973a6982e23493d4253dff2d652ea1d512bf73dfc66c86c4242200d0ef131cd89f83c260b4a472012d8c8f4fd2179c8b0c4a2756c9880e0d6b9d4354bbe3c34eb4015664de03d7f4d7744525748ed937c31d3377d7deace5d3695628168d90a5df0107685929fda0b66af8584c1f3222d9570709f8ac329a6882192f02be2f6d3dac90171f43cb9537c3c4b37aa364ed8ef0a8eebeedb8b33f78739d6351d2fc084d5550025301e1210818b0ca53c40ca9bee19cf4ed7f0f797ec1603a233fdea2487a98a8abe4d5c52fd56a19ee3ebc9c29e248500106bf0284253f02b1c32d1a2e394fc2b5de84adecbec69e012c24e99a946aa55e0d5788d8842b16cef4dce94022d6ac36fede77cadfcd9703c04c29fd71f2dacac7905b478a9021e571f99f34bacaba3f64099c4dc3ef27f0410d19145aa362aeed7c0528fe38bc60752400919ba3217d1b06bade5bd19419fc390849153cf92991c2352f719da98bf7436d490128fbe407da68297b6963ba5f0b6f3944957d184bd8bb3caf45ccc540b76356f0dad59049c6138f9a1b3a6f03e0610c96b83e7e93d2be21f3d2a1aa935d047d79a324fdce8951992935bb37684941e6298e2f3923bd82d8ddde9d34d219c4e2d542a4435aee5f7d44bb2383fa4403fc74a852418670bc559c15c1970ca64ad491ac437b17c3337ca234401c5132950613ecda0dffd3cfeca4c9a63b36e7778580b900ebf070060683706982886dbb9baaa76f12b3fe96ce921809f93410cc4f32b44817179843c34db3d86332d42cdcda6d6cecafba566c17d2b8f0b71253479e347f2ecd4decc0687d216312118828442fb4ff0be96740ac0801a08e64df95951c8595336779cbb0ec0913987347c6ca73073f1789d3f297875407101065879d8f38ae4273de5de392802f2294682631c28f7f704ae74d4316236ebfb54cca373d56bbb00e9e3fe3764de04f839dffdc259e88dfcb3669df86cbdf3f0d0c58fc72ad12f8093819b7b98957d0893fbc0aea6fe361c2c11ba9a036cd967ab46393f736e2bb6e146c282cee53dd0c8219c24e0de2b0ebbbfdef727846486392f9a392fe7373cf14c0ac528f7764064be3df460bbe04dd939570275aec168977e1d1a090b5e8f4596b788ab8f79ec9fef99348ed6e545de1f8706e3ab68d7f9f3a7cb812e6ad10f92138fc5f23cfb97c53b063652d202b261fa07b78d24713dad8af1c5eecebc1f0e24f8924815a53190a6d964e878a3df25cd5e4dc605343535ca6e76cf842f3fd57a8f47c8590c232a00ad8e7fe6f289c7e6eeab344e338f4b4a391f4c835d252c503d2496510bfe5e3651d5b5bf10fd26602bd8ec1489938d357a639c02e2bbbed99d0d098341e8f3a3efb244922aa811933d42032d408a8c1d91fa25b83c687a4d84b9ec6c3114e55e416703c669ddec2f6fdbfb1de23aaf9834121f9d070c55aa24d22d04f49f709718da65b8d3b00b59b1675b44d1a67df0a0301f3d8ca378e8d72a8521166d7da05fb925dd78c2a165a5c3345fc2f6d1d7bdfe306e00917e5687ced6af2edc27137a1b1bdd826541c9151e6bfb89399344ba06452559f623e30412a57bde8d05cc25606bb5323157f394c8c801c01d54f107689a55f7f59e4dc74e167aa9b0263518c5e815cafb5cb1b5316808dc46323ca9f48170be778bffe2a9e4f5b3caf7946b980cfe81bccbe523ba9ad60afff1e8a56540b60f08f6eb4d515819be02ce9f1ef25782176cd509b384888618483ec9856af59753079737c303691c98642841daf9a026911d5c48f00f0051c60e06c4ffd6ea14c5491532b71d7993be1d5fd82d04b65a2fe6d7ccf11b90ab324ecf7d9a2a19be125ab33ff2a59e23fe11d5edeb8c04860b6ca6f2db0c3e341ff6e11a4852a048561ccde3fdb5e8e9334f8bd73930d70f61c822aa4f6c66d387203773b283c99a54845cab15b5995f2afea324461d6320c8a0d9bebee7a4abcc0205e7020859d2fae2a3160612829950d90c00c21fd688cd283f1a7bf1683ee2ed37d3760e4cfb47b4805a3b9e234cd2f4d38f88e795e8fbcb7f9253e20f2f086da1d499601c3fe786fa549a32a4663e44e7abdb61bc71087aa479b52271682642696a94d30d7e549f265fa171ad9629b3832eb8963e742a92e42e037a683f82bb32bb77e10bce2e14c0bbd2b0d1a7c1693a5f95fc43ba2374f38699db4c8bc48fb32c365e7b7ff8674f48b8cd377ad8e4ef2443b78dcfddb9b16f4d09c7f89a1c9ee5b5c685d06269587bd3b2692f1179b7463d4ed283efe50ca287f42c463f330efe4ceddaa0d8ecbe26de8f10d9a477866840cd7d751bea6657f395403d6221b44012ffa5fb67addd962c7cfb746bbc9281c652c6dcf0e8d7e36e0e7e5fce2a99eb70e42aa96d60181dda159c10ed4c7d89a99cb037b14f19d9f22a4e1f207a153aa5bbed89d8acb84ef828b575c8ad5eee79fd4c7e308fe6f510d0dfe8b4bcfab08dd9b3c8801f2f862ecd735d40adce40a71ffed289cc61b65dee655ca1a188b9a7834b706e5cc4d0a0352e0c869d134ad326772fc95cce32e2978d07de4a4b230da5f50689a52fe38c21cd449dcd79aee1840928df3320618569a0ab37ed31bea73977eeaebb6bcae5df852af7529ccbcbe05f5d4d8578d898b54e47f4a043a1f76f88f2795ff4745998dd8a7d0dfeab77d063cdb922ce2c4eddb098d235e1f76fc5fc26d647137313c0f09e0af0d4127768ebc5b7aff1a8c9d22bcc9bc56979f63841030789b333bae6d7a057419a5d28ef1d92652670239f674a65bd5e2a61ef6c8a78f5a4fe0f5e843a96ccfb5db66ea7019164740a642390011ae95d1524866ca42039062b0ee4608ead5483d06214ab7d2513c55d86d670e277ad91875d6e8724654fffae0568e9b070887dff70aeabb41fa87716908968cd530a739f490be7a28522cd5f63088eedf2ffddec2dcc47c596456b0e8cbd4fcb77e5b4b53ed5c22e82ec982921d70a66259964d17c29cd5fd107b79fce9b2b6f7e3acd5d82ff9500194b2e97a6d8f4cf17aa8b031101cbfbd71408838f1382da41dddd6bbbd8d71cc81ff740ebf93be38bc6690c63ad0199ba68207737323a44d7942facab22e19a7822e31a3a30fa9fad64b4e7af3990377e4380079688e86c2b9aff4b9cedfc02c808eb0808f69d7f39ec2072b62e9fac3dab658eda0307133bd6b48af9735c02776570fe0743bc0072d59aae57179e2f1ec12ed99c160fa9e5865ece817433fab75fc7a0fad34a0ffdf71272c94a2f18fd80b51b1110ad65cd87f45ad97f6f13ba00c397c97f27e2304df34ce42a68b6b285136ce848953f78c3a1c826928e7715d2afed395dc237425e076c5f820476c1ea02615657cf7c52a64bef2d72563ff888d04baddc31c7cd8db53c8d8f2aa67289c9cc1229382a917aebfa283ab0e7f820bf84867530d5c6eeda7fa4324087b80816ed9a651157a7327658978b824e8d38ab3d0f4b10ac5ff209bac4198b41f12f6e9a78958657251945317de9838a15e034a5f4f746182f167bbe4a487a7affa8bbc36b7b34dfb1ff474c5bea579f9a23a37f1c35d153f89712112ab5d52e428fd25ab7405c1d30611f5b48313b417f36e0831000ddbfbe148e806819ccb50ce9185e9ed30b0772e68359e8d1cbc9f77a43a18f9c7a04c9037128a9fb205d07fbe15f4f317cf1810fb2d8e1c61fe23b9d7cec403840a81ed11469ec7bf717ae12f2f1d89624a0d23a6f08a0b3b51226626900f37b59fe3986a9912e3fb5f499e17c34de4862d909a9c9486b615671c3b8b1ad5722fb050d4114d00696dc9332b93a6f13238a9895f6863675b5aacba12183827184abcda32a7f11e402e1f5065cadf7f7aa278205df3511471a06fc13a66a24abb27b01e740d19438ba907081b4e98870b309ebdada9973f286bbae5142507e97e6cdfef5ac8d90b2dbe7dca06d7376b0219b9a1491a12f36866933b06d1b7bb0fc6653c21a04cfe89f44069a722f70882be6794e58e96d70768a094c57ae1ba0646b5f0f59c5571ec88066d9e25c006d7e60dae1460884d0014b9deb1be41bd75ef4b7bd70c603b057ffaf30b249162415bf0ed5212a4e237ff8957db65480f97c66a1266779b476fa2e7e18575d8c6e11d6f7439172a809630f3e356b88406f30ba06a712c7c81268317009622a75730e0a0465637fc5c86ee0e97e7aa6e7a1db390be69f51760d197b1857e8f8362fd274867619c3246df8178d4928c9e3ed99e17f4a9f86a5873570bbe297fa6b672be8b7fa2615b1702cbffe16d6babc9db60c2e1e3ddd82473b971721de91be72c77eecc26c83bbea989d7130a31d1dd65218b25ea7c8a27589e14fb4d910b2f4a014d329452077225a6f6af0f4226bee49555c7fba895abe7a1a9b29ccffe0d44e2bc23210846b27842e8fbe1d2a9b996e327a59fe7911698175fe0f13c06fba698d0c262546d443a9872c2093e8be38dd165f005d354710a38883ca6e1a7f1643d631cf8fece6982b714678821864ff2e2d15eb511e1a71e2e942ad092424304fc22c2a57fdc91313f6a653e9a6e9637bc58f782e619d35cf0144df26049453c6e622855b65a10757fffa276a2ecb37f16aa290616c7b6a36cdc2523780f0c656a7eb5ddc7b6f0cdd3455f1eab2c030af40e37816530340ef4f3db243cc9b002ba46e977d5d46e88c3b5626dbb4a3a803c54fd14535d475ee3f8a0623d51d2a1628bb192bfdf95b9188b03f3207afefb5a27008f3b1318c517de457480b596eb83ec2eedaf33db7777793a47d40c50d37a054417c43aa0e52fc33fe8a031720b0bf8bd2aef1382988b143abd6396c00c48b3bb731a1f91ef06c9c76392ca448668f7822ab23ab0848c2334bc7acd55cb83a48e30069f4b7678c843c7252f63fd98c5778d564e51aded246a2b616e6ad30384d41da3f98e8f11ac52bd4dcdd581cee20b7ce48561c6cc2a2abab54a9e8af9bade895c89a9bd43de6c2e11f12f8eccb3ebf0e3045f5c68cc9f5a2676c0284b7828227c54b397e493fb4c6b3f0d466f3998d416d39d04f2b550f1f41c6b8672dcaee921fde7b3630b64dffe830be62c37de38a846d74900f5ce831a9ebb1adecb497c9155a0b741c58b8c1e3ac195c2942b409492356d163a1dbfc90d83a67d82688060ab8b08e031b3f25e5139e7317e782d27a569b868b60e96d8bf70732a85012ed3de0dd2dd81379f137d6daab139bd95f0e57ed43d41528142cec0d42ac538376724cd8671e37f80220bfeffd680e26fc4aeed2535f39061c5176a0e9096a018ea68137995ee8a125415894745c7f88a0c983942d865d96aea88fc775110ea50769773518c440743890cad94a6358da8913f871d275e1bd230c9f46afec8dd4b7508202f233c640b43c922712d8768ec73165fd3ef8053941e9eace5788432c87ba0ebf0779df0fde0133b0fbbc691052874285fc171a5ba26f195e939d5803a2e580d0e1bd9e0fa087fd369854622f49fb850c72b76fe10376c8b24285c4dbcafd9440307f6e90a6fe8fc9ffb5b75e3595d616a43026a425253b129e4ac17d5063e30e405b699d1aabf24fd3ccdaa12fb7ae135b9875c645a7e2a21ce044cb456882d72ebcc34d3d1012a3611240cd22b3bebf7cc59fab5d7f715c45d4eafbb3c7c228891101ba6931f3a8e72a775cc531be68eb413f6d351c3853f6d7f5f6bd407ff689a8f15998493941d2a2ba5e993a8fa26e6d80c9c2f5a3b2aed15a1fbb3a46c7d879022f928613761febc94ca52f925db1ac6cfdce9d430cf8b7ac501139146268eae94b4a9c7c531d28f0713c866e7fe97bf02309a16e879041ac23bc4c2a5310a83095385a663269d09fd2278a45be9e2081198fc95a4e0340b2c16d0d7fd83cf2ad7949047656c01ee4d680524a93a51e76a473d0838cab7485c8db337d8c8d2966c3cf36c1dbb28e30b5195b3977e454485f3f153ddff548818518f38df248d7c4fe674f4deb65531a47a095cdc9672b52b29906ccac9e469362850caf618694fe1cfc569bbd2ef318851a69ae65e08b49b52b1df538397cfb4a32d528bacd1e95528217c9357a532ccfcb098d17101a053ea1012e107d768720fe2f1b7273e5426fff1001313249464a6cc1a1e3b3c9e4fe10d593caf5928882cb60ac861929d988fec55d432f3355b5e69b459ff69918f19ece00878244bc0677c9307dea8f825ed417330fa4a517c574504f659a0464237f1f036daf6f117fa042e337a6584489c28ab8004ed18b2738925afaf744b7b66602dcb5f5004ec3e4c57a9f16e14c236406bcfb29d3e868df2f1853abb509893d31b0d3482b5074110413c7fbc132a31b5e706c2060fd35c1ef9a0f628cba2579e481207512f8e58601fda18456f0d5171da1d75d02712da7e5252a0bc3bee9afb5d1d5af3d4db0f2df72b12320bbf0ec5771b7db36c68c2a3971c8956799913e687b65d4bee7bf7a4d8f0e3d6dfa4d067666343add11739b904ea1f2b67c5ec80fba67c278a0489cc38520c3e58efa8af0f18c370f584883cfd541067d5ee4bf6ebe16625d7f77fffad395652ce58afd6c5810ec24350f6c4ffa19f9db375d4bd1e2670cd7cd878ac1baac32270b845b2bae641a8369502a86df648e191e4f086c3dd8afd1b662a485cc3361a94189b7b41ecb4bc405e6a81b670ce15fc35fa872851038f77650945f58a857f4838ea8f2a208941c0763ec909f171986db47b2895b70a6d9cb195ef13ea0165984d3617795dc505179e8f7b7b78b583428b46b29332b05611efb75c17ce84f91af896bc4aec0920e0af540108d1d60725a4e24fbf4c5446ebe30e9e1a7bab0e5d07b831e7be3f4bca75d905dca14f7a0c3b5684c1592880e43088b263d72692495b140f6600e880c4265c16526c2fe0e52634187f248edfeac5b482946360d4e06dc798ebe03273dfc43c29df565483a91891cab60119efa7525f4524f50cf0aa4b03e31c5bf2f7ec930db42124ebef6b0739e42a38c92498b544dd9a06fb72d9ae117dea33b0448d0b6f10d27c89e9818548de403561b7483abdc477e0ca74ff50bf142aa5b7a6796a5413a56f37912c1fe29be91701b4ae0cc901531f5f3cd06630a8c9fe80a590125d7c2dcc270bb45daefd17586dcd2450d23bd15369bfa5fa07922f9072f5cf1f27fa9a9bb2a7daf4a608185f30a6e4751d01d5050d8530bd45d0bb76727e11f7ccec540e1b0ffcca26194651a3edd1b8fdf579eb48926e968ce0555597de2d1d2bb9f0a5a7ef7db6e9e41c30a30628edbdfe57060f58f9619141f53eefad373813920a14bd68fa9752b2e51dcf1b9f8e0f81291662fd0d759dfb6a9183132686c999308e48d93e491a7519c54396f0478042bf0c890d3c03307a0cdf45d33e295b7002eaa08acb9332f9b333446e4b7a7d421310d5a5ac095690047eac944a1471876eb0fdf7e8dfd7ddc5379a36dd7567e6a7b5ecc86190ac66a544cf4bee49a9cfa5991e44898d95aae9083d840f7febf52a8f6784021e269b9c63751f9fd8a477a420572fb6a3edff1949cd26ed26907b5a1ec249d0a0958979d4b8a5cd7aaed3b0803570ea8b779c8471fd0036a45af1ccb622cd1ccfaaeda5dbb34bd5401f18a46e72481fb0598e9b485ae743164f4daeb9e04ead2eff245a076e1fb82af739e40aa604380910b04d7e7144d01c9ca4de70e9a3e70be809343a60c63ec8184bb8373a44d9b2a7eb76de720a136b1b01b57bb49fa705c322a80d2791183ceab1bfb9cdcc2908aa1a5d0b9c42383dc443790a4e4a1957341b3bee8b6a9902c352edcf76c3058f9b35554b0b561eef27404d3aff04493d7eca43259b11bce8d3143c6de4da964621cc571d5876bf6c950c17efbc55793c1b8e468de6fcd03caddd0e90a8dd16c2cd9cdf6241deeaefe2b6b1f8e39cbde1bfff9095b4fc831887f661f5e69555cbe1f794e2cba4d64f63d46f598342e05213e045f55d12cd62380775e5eb8f07972bd6f3772ff63d0ef7119a3eb84ab60962924a5bb5700972095776a6b3c8d42383083a6b6472c29279e11abac1c491c52c8aac451fa6ec854b7cce8ffb3f9a76e239685fb0cd2419c7e5e4a65939633f1bd6637d2f743aa4dd44170bee790ac757410176ea2caf63158f2d985068e84c048a9ed949a6fcd5b709fe218a84b804f469f0e02e4a05b3f7d64637e6243970faa08942f5a4375472ac22db6ca99d6d7f7ac1cad5082d9cb336cd012fe959e833d95af5ad9443d2bd62565f0f158cf0c6d985fe7fcd073c2566afcbdda2ea6d3091e72788685ea8974680fd5b21e0af8ff85e0d84a6ce9efd0ea64a097eb78ea9603643e8e82ac22508fc731280459e3643f53b9ad6b464d3397d55af3350267d496222fb97cf14a08db3a26636bd51ced58662487b6f164f0c757c5cf544baf8281f206d228d2cd6903784d4a19757caaeb240f272dc3c85de94d0632580ad8605e34c691fa7a03699f1f2d9b7e4c9973132b8e08012ea4291f784a7c80487abf367098d81370c7212fa6b59b99a3b21ff3fbcebbbe5b0d49be2f01e594dcca0fa6cf2f54f168e355f83c4c2930c8e37a2cb1c4682ffe08e86bde9461624487ed168cdae4139abb27c04bbaeec4f80eae7830f6edb54cd87eeadc04d9c7697c2611cfe75293500b2118b8c1b64aafceeb79a8acdabaeba761c91e7eb34668392fa7ea97a5ba713f9fc18790c524f61420c5b99ab891098c0104d23f861fc09687d1ba0f8aef1c46f1e74508c56cf517fb8c21235e58187272c6e6a71ffcdec60c2c822f6e1d9b3dc380c84b0f5df31022f17749df11de9b4f471176a5a18b2e14ed4c7cd9b5630879f5a8ef242502f64985d39e2556f3edf87af472f561f78e66c42df507de22e198a4aeecc491303174fa25ee5e797e2cafa5d691f11d0a89cff39fce116de44b3973f3785474b27fa7a8ea13ca76432d57b90b9c1653163e57024c66643e25d40c858260b1501a2de76e388612b5a32a5184d34f1d4b0bd597eb11309bcff1c27b918da6ff5dd5f9cf15f203afc2b5aa1ff7b52b4e83b23ae13454dd5ff11e2a4632e2cb8296b04b490a2b0cbd1c0cf9069d1d7829a2568e3d522be026490cdc57612910c074a844a40c44cfaa797c2c3eb7671c5cbcbfe368c9a6a9b538265d05066f20085dc3249ee4a624bf6452abd6368b0cada092d6971e9860a02f40dcd44cef92f183917789e2d70ef1927884fed5a0e68a2c8b4c69a932aee086005a866db31fd10e5467aba54af2db62c35d7edab0050e134a74d1bffad6c27be6850e2b1a2a098ad04e9af6debfd81c95b1d36ab401ad437d563b74fa1467b540a82b879b62e8007a93795fb888cf22618cdc0561682434682de636b27c87f944450bf921b7e304657f5f7fc51e94c6f227b404820f948a166851ead8ddc93372709fb6faa212bcb93dbb7a3730740545e17da80a2192790523e9c524a30308e675e6df4eb431394e25665a983b7dcc41f3f3170141b5e97cfbc661ddc81cd3dad8dfe94dda8c04daba3812ee3869782111105a511a7b80ff7ddc60c4d82d75514532e02ccdd3092bd1e6ea8adfe19a3d4fba11d7a8c01a1e24ead13f57389d2f689763b24d8d4fa1ea1932363dbf2c4eed25da7dd22e5760e64a62640bdcbefe7ba4c83f952f7d03468594aec5855318d3596a656171c70d440b7147bbd162a0f167671f82783aa0611beb2b5d388b0b222b49ec5eef5b7f5c51ab11a142b49cdca099a2bad62664e2b18d47a7248d4ec4a86a70b93186c3a67d84ad4173b56ddbf48ddac9116d6680a0826ca6cf680c39cfc97293ff62ca13cc6d4c1169356edb043cb00591bb6c0147716762b5bf81e6cbd2545eb774be9bbb134dff03c1908613705c7be5393e9a5b8090b2ce4352a84f1d18c7a0489fc701539e220bc84e6e20a437349a43c403739c128c96f203d99e93c297b04c6b99f5d16915b0115d726478b75f530b4f09dc025b0893d68d0b914851c08698c7e3bab2736cef87f80e3040b1ce62b5a7d5beba81fc7b5795a0f056d4154512dc08f7d16a4e8f87b18151441a31b42b645eb5c9bb7a66fbe48ba5837a9bec45f58dcd4cbd2c4b27efd4817595f33b22a94bc86a5d3be75942fea5fd1537d66a68bef00ad12ba9300cd5ee15090b4068477bb9f93c29c23f5adf52406fd5e2478c6cbfb4b6267eb21f7bbec994302acf58fc2b192ab3dc787e7a6f36b04c2ec639465662c70889f4e3a75f5a3315e003b80b34f84bd62b03d85bdc67d6949a38f97e49e68b87a977926dd9b3bfb8a0fe3ea868cfb09f9e1ad06a99cb9294626b6f04e3afa14c673d8523796e23b51265db5888a6fe00be7ba8f8eee8af78efe2108e02e97bcd819b6b243b8c017f3018b93817156262609d4246848830daa605720c86439dc1720731705caefe80c33a86c8563be6de3682f3358bb533f4a51c9547eb3ae2d17ef1241c154e256218c984f0420aba08d463fedf381d62307a2f12cb091451d77eb9c8e5aa2991b398ad6aeb6765cac44ce341c48ba6822620fa64a62539f85911f0b816cf63e44783cc13ef08932dc8cca093320c6d7bc8168f8e05cd5c9e75775795cb7853300b09c05c9de075a861fb91173f633e546ad6c66b802dc57d32373cb4d8916f5668fe6a85fe28f7272f8da887d6ee2127d771a572be91cd42bdb2b2d4b6af8169d40a93970a1e121a40394323998c2cd2c15ac62719a6e05f9bcb905a720c7c8eae346b3efbf018705cd03d56c5a6dd0e5d2699181657d2edf1106c2cfa1496a079e0bf8713ef26732f51cf0442996c72c5f7d30fd45c0ac0716f86fbf21f8b2e7350b47600b80c164ee5af5c15a6b7c10cb070328f4e25c8d4537cbcefc58b9b3e43cd8111dcaca76ddf587e14b4a51a017ad98c9318092943d3eaca78041e235e921385330ad51b0a3db194fea8dfceb54b031e03ae90f2b4a5a4f26664b7ba7c50898ae81a6675b446b70bf2b3117c3c9cc9a59761384a1aa7b52d4cb481fd12441fe0a87b693dda4b1f458a90fe1f915cdc14c1aa0efc51adb2de916307f3e41ff3347c52edabc6a524a5758a1fb32a48751a925e146d305005d12fffcafacd137285e8d7684921fe278f19784be2fc3c673bc72200ef9a6d97c43607e188feec03c340054cbe632128b86810991af1393379c447edac971c3da1c8136d5f1872178d03722800e498ce1df3259c5849d777257e3831648f58446579ea2ab668ef5191510c038a038524e9f5e90becdef40c3a2d8d7166464c7c6af7da95d94f01108d810039642011d996a6e54d18e59a3f54026b8e268e41794d1876af99226f35641e261419dfce3347bdc1c9251b9ca8fdb1915e6c66540e523fdd398444d69e53e1fe1606e525abce4fa68ea746805f245bd6360d690f2e4e04c16cc4041df3e9b7b3695bddb6c30c0af5e6377f785bf54325b7fbf7a6f0070e163a260d70955a315d83a289e0817b651d80ea1885cdb27ff2bae856f1cfa38156e4eaa2c74ad25749b71cf44fb52859dcf8eab8ea720347c20fdbe07743fcf1ef316a24fc3b98006eca924308bf2d2dca46aee68c58b03ffba48df420ef5020652b01f3cd19cf43bf16d615b24df1beb8b618b87a437ddfc489e94511e90063e1a1ef5a6d2901c9209fb0f6bb4d197f5bcb186b359dd3a0bfcbc47f96f9dd5178cbf362e25494c7c7bcfeecd53db4c96eea2adadb4991cc1038a99634106780bbea454d6736ffb2e6ea97fbb2b5899a77ac6b4a2fe2bd0fbc2a50b5c574b8a7e39f66a54fdb3563dec34c9c78558057c838e8b1509bcf4410b00e5fdafa60ddfaa652bdde04fbb63edcc3bebb47356e1b35ed51569225c144b1397ff244e9db58403633e035c4e96b3b27113df0733ed6c8eaef98a5f4653b7517238b482860f7b515368e51640d6d5ee2e2c3b0e0200351cbeb9ee79893267664d63c6b3d55d02ac6b23eee8d80f2a985b0edd99c77fad6dc1e0c3376a0e9dab144ccb741cd8a67a072f0992dd2c91a172b7670366730f4ee5d21d7c4c1cc01905431b1750953a92b5a1f21a090140ca613b6c6279a8f603363539e706f6418c4cbd56235165d7e9c9a4ecb7d7c1da34c9a8eea35e6ac5f6ef4b5004060de424be3ffa2f516378812e6cf5623442a3442296a33bd9cd3841ed5cd43539bb3a57546a944d2b2d0b597d3597db51e93f2977ef4ef5b66dc6bf3618ae7a7e6c2ef8134a65d6dbb569235ffcdc7481516195c4861b2aa2901b87b1ed3e8330b01ad406ec9daabec6e1aef2ba7e3e0afa5d9149807c5fd7f204671a7ba2580ecbea8e7495a32f60ee59d383eace4d1efd372130a4d5f40961102b71aedf62a57b323b251952e6954c2d833b58afe2537a802719ffc26abf0922f04827172106c6c5dbebfa12dbfb30f118988d2e874c94af7ba743fd30ab62199fa622f84747566034279b966bd255389b9c32e50404439cd96f8686c5b8e44b37c35ee6239e98a86934f44c3d8201bdf35d4597f8b853806f37410ce1838a065110df8f2798238969344a0fe6aa082f1d0415b8a3651668e2a2d5bc48132ce11e63976eb383a5daeb0b9de8dd436f345d442095592aa393ef24ad9ef1777523f2499967cb7011aa4c6698564c0963af4828843500cfef609f45a287f5b012b87a3497acf7792b620d94e3686bad2e410f467ba6eda1873abd4e2b47d9cca217787b6e87868caac3bd3ce3dea5bfc6787006c80935df55bc032481c8af1f4931105d3ce3995ca0ff7d4f6160f849259fa1803439e133b683f01e9c29982f0c4bc66ba5bb25da8c1e449d980482fd5299b52d25be1660d9db5510a053bc85e548b44aa75e1bd7cb6f66be9e70ced1de61b64e70a62627887c59b7c24741423de7705b40245d48f4d3b50c17ca41ce87c14cd4a935d7e7476541a34c8a62a86152449dcee010ad35bffad6563fad97dd83d037cab9933a802d4eb93ac0989a57452c32dd57df12fa0b942f22489b613791ecd86a396b8f0ecdaa970b950d611f4224285f425d228361561cfd52428f8c0f84ff69cc305b481807a507a10056830a96d2fb3a0a1aebe8eb98364605396ee423e954145560e1b5509942594a1b999ea37aebbd9c84afa570e74abb5135c470bcbcc6d67856774a0d4a7430ac052b7c9c5e2d439957cecec16a4cd7a52cb25fb77b162f430ab248f315c46c4c97e098f972e68f714002d27b22307a2b08caa5a3d0ab028145d9ea0b19418baeae2e7575ba9550c7aa2a448f55698928149e958f4c4196bda756ca80f49435d092b1ec0114f04ec5e8451019bdb1b95189edc972b7837b04fb5601f81488b921a1327a2cf49fb9012ecb88c2285fc1bc1c4861325b8f147ffbefad89d79295ec153df139d5e0ba414ea220d2265a6e7cb4ff34c2c169b3996ede7678f92de58d715351c7cc73d47bbcd5ca39ed784a91dcdd6f1f37ddff8a4b57cd77ac5542c2760c45547bd929ff92723c1644e9c758b11f8fdf6de2538f8e939d897d2b3d5dbd12d443453235ea194098a501cd1e56919eccc8ab6e1a4d4456275a3dab0cb1a8860864751472b9368468d63f41584185253ff84941b59e5f454a07ff94efc0d256151b8556fdbc7c0085d5e4a61ae46fd122d9be2c367327b0a767abcec3ea36b115a8d19015493358bf8881bdae35f81d08380e8c51c4c944d4eb78b827d65f3c51646111527913a1a04417749d4485840e71e6a136c5e8b8413e470415599b0814717acecb055609ed98d6f6a2fe0efacfa9ad18c39ee01a00dfcb85ad2ed657636a156f1eb43fae804f04e08116030c422180cb6455386d2da82e3bb5c7148b21ca4072ba55bfa99243717730110ffb1e7c0d7edbb86da49b88ee6a662cc7cc93a8d89d1bacc471e0e7d402b56b030b53cbd0963d9243c5bff6e89804a2699288db75c5fdca511f7220bf81a8c1cbf06a1e2107f2972171709094cbde6186aa4cc4a083632f2662cb816b5fb16449a275419d1ed0c09f4c41dc20fecc3a1b3fd3a85fac21aabb8f6a08015888e58321f12c7138291e6210af90c67c4143fdd8833982a912b4fcae6d982517ecee48061a12ed996ffe1f6ddc0b7f9226a0754ecd768ddbb7b15ce958983220d95c87f6d2a04d7f79b7ed8be290d86d3b771c1d49044c4de0b67d0859b9cbe7025a4474f8e80c350f06ae75a857aac89df972a125145a71a79ccea7bec2233c9123015bc2841167834b197c2438eeca767d7e5b23f5fb962855c20800d609f3d31bb9e54f581be5af1e3144445be36f39591e8aab192389220147c425ef5d040ca184823d96bdd99b25b693d3ec9088b71e2bfc35db15d675fe3c4836c5ed01516ea03dffb69c421b867d6de08df949d2ad382ea6f25ecb4a1b8a37870594505dd18c16741d9719e2697e3811bde9f275357e2cfeebb6deef30c66b1e0dfd3feb4b4b7b84ec33e97fd895e564db57e0d4330979838ed08d69f05d1ca6fc1ff7e2ade5688ba91c9cd791dcaf64c470599dea6cb0c1e694c4a4e33e7d80ba9ffa84d746a475d52bda2cc3de61d2d4a5881f5df48a5404158aed48f2ba263b7f215ca879f32ec2f9b7e799d06862161c2e52032ba0c4a29c884796140e480ab7815bb6b49df8052582411e2c9ba655b8bc447f79f278e2878cce6a9fa4d95d0fe945a9c44e8eed2910617af9ca1b744f763a1ea38242b5dc5838d80876c05170cff0a03c5da1ca36ac90761c2d41585471158b050172a218d7eb7ea96be5660e50b64e564b4f4a201774b7a80d2436f6deb342f5486730edc1ae0bcdbd0ab5eda99e1bbf0ca86c3d20a1eeaf3de37e96807438e6910eb126dd2df955e71388c3b17b81ceece37587685aa3227b3e53181b9453facb7d7099abf2b843cfc39fccb99f9df23c65ca23dda69550a0bcadd7864c82ce2c90e60a2575c15973c433daf6b7766403b3043cfb3d1229e3b7c1272d9158bf38cf084bb5b66db7040075dea12d94e260cedb7abd10295ec1a006bee5caa199bafa58f1e39a411d0b2b069ca00245e319cd57dab505fbf1edfaff367fea44642d038e62f8c809098e94034569799929e7be555091861a7013fc7c58fff7c7ec9652ddb5a48e880ac3ee3079a8e3e8b826c43f60bd12088932deb679774bb211b1699de5127cc203b4cdfa520de746c0deeebc9797405f2aa7559139ca0e699bb71f6317609681f44a237abea842bd07829c3d23d1cac1253dcaf7cdb883c8e43ee1a164f0bae3ec5cb4a4f944c5354b8156eda4ab844d6d8c939370e6f02faede1941d9d8519865644d69a2627bc44df6d1d7e43344dbb2bbcd8c2b88615d66e2aa1ce20d886a25883d4ad94fffa52f078fad28ad3d86bb60e27e691a569823821edff3dc87c4889f34d5dddbc8be96ff2f0046492031cb69e65efc6a194253b2a6573932df4587f6c8b430e35c12545181bc9485778c6015d63f87cdbd8457b9c77872999e5f597085cefc893b7b9af895585889f82643379cb5d29292ac8f50c3a10a96f0b734e563a44454e94174f578df793a2d5b7f8da9a44b1fc2b9c174de8474976793dcb935385634c3953d881066f29888317c61b60382230e4ae3aed74b01fe81295f70a3e09757058856aaaa2d9d017980a86cdbeb3c5491c701b2017a1f86c6553d1e2423a8e55a012b09a02d3b74343726933d126419f0659958edaaaaf175997aabaa7010938dc2f5e36c3a216722ec970608859cd7094a16d07f359ce12d73d1eb8cd280a452a3ddb9fc0e2b4dd8c0ea18af24ffcb0668d1774fd501e87f43b1934b4f180a45a1cfd7981d6152f7ef65200459781e636cfd2fcd2a6c3c580c4495b4ec6b886218d7b533a5796dfc3f7591abaf7cf8263e6e32f03a01f6f7b13fca1d39f79cfbc481ee031be831e8bc4feb5bdb3e3250b1071fe842e971e840c7e8857498a80803d40a64346388cd2059631ef83c50e3be129aeeb017599a1cdaa859389d5539b2f5bc3e5828fbae4572259900ad7f3f9e29bff82818c000833398c93106a66f824b6b508947c5d368c5dddf2e75188e6f54d6bd58fcbb84ac5dd9f9c8dd70fa477354220e4aa4be7babe519941a8bc85e8094313caf7e42f0161f16f3eeb18e4da31f8b334732559585a42ec2c220344ffa20692a0a48e502e9702fc511f2afbb9e33106900b5e8b5e3db92f08903808e67ae89ed50948f20785e9fbcb404a0af79f86870e3836b5af8ea9daef2987092836275aa50795cf44b0fc2e18292bf8f45c3cdb7689dc1fb457e1cec535f32f0110b19e5d02507fd4ce9b3f55a6c23079f78e81db7344e1daf85c722fd3c3cd690e72a8c8058edefe147ebe8711b120d359e564d01bcc4561aae34a16a3e06324441677b3907ef32a813d0217d62905e0cc8de84d47d441737fed0e4c9392c5c274c459b0403fe8316f7b78f536b59d004814f4fae6d4530bad7bc5ccdf1bd0d16fe432012aec06182ca3a47c000a6a4b879f18aa2cab206b9319c80edbc8f51f0bae718b95104948b8d394ed66df4191c39c039ef125a43465b4b672bad38f527ad42a5e5f917855f6d1695b5c6b6327672047542ca1a91da1e23cd56b67f1299443083e5222ae647a597e2ea51b1a8ad6c498f70f3b98f3043a305ff22374796f607dde3fec3bf5e176c75050e94c3e4341dfb58b8a720db7ad13ffa1ea7a36ee106d0fbe225ee12ae01f81bf66ff38ac776002a9653e44867eeba26ab0c19d3c3ab37f984f6b2c6f07e56f51c0a7dbe403ff51865a21dbf0455d00b460d051759267165d11d9dd2962b73c0434ee88dfe7cf43e8b7a29fe231b57c1a5dbdbfc3a11443f0260dbfd375f28af225a6137360079bb7716780b4a96cf45bf5584888ad04414043720cb11eb4fb35106d61d94f56cd196323e34b453025c246e4e3ffb82aa45d991eba13cf4919043368036c2b61d5e67cb969539abd58638444b41360fecdfd826e46c9de322a06344e947d6a668f7482d4f1211b8fa81c7674b3ea2026489b335c0613ddc6cc9d192f43dcefc393757165c3a73ffcc3cb7f7597bb70b08f77beda3ead1889b82a2c3af1488a78804fe3348d6ffe1ba5e032ce6cf69ec749470cb3a4201660d5c38fa79bc896cc1cd6da552dc54a198d668a9431d29185e6b4586f18077fa3a337227025763f20bece851a207f2f03217f402d3bd1abb3712c69add214487934353ba29cdb99c17d04d1aaca13edf4496b38831d9cd17b60834d92cd184fbbd05e241c92a91f7df42ac2c56e03e08c2fe476405c714d7f43fd9edfc719eae3ea7cc465a4e102d1b2ff8b254bcce62f27f8fa95a92ed23effe88728b8e67e1b9cf03fdce937097399a31ecc5e63b2adaf159672019ed4dbcd74b4e1666d1a34923a2943143b9ac8d59d4e1d0bedbcfaea6174f25712b9cf862f5e699a2e1193b0fba4002971232fb51b277d6ada0c81726ca2877bd07ef5202079c7ff0aa8263097c6b0270d0e42339b405c61fba6252fb225c2b3060ec1dbc1a8b89d3fe7ea331b43920dc381760e9c364c2eafd9b57acd6a93802ac231a47ddd2948179095fa0ee347dbf5ddef8876af62bb738038d9f5f8fd07ac673e299d01441e7379874e6c07bbcbd91af9d73e55828f7d775a01d70fea6f55ce4cda48f73d0db4f069252c4722c06d5e03ee384ca6153e7d1faca0756352292279407b41aeb3a5ac6b8c5dc17e94bdc7b47796625fd07d61151e60c640dd2975e02729d9e68c4266156e27e944d06f073cb8437a47ed56d73e0b7928b32930d797de1189b9f1ffea3996c524bac3b959a1ee96f40a56ea5af8f20e91266e9720dcccdd799b3bc4a23dcf6a730f65550971983fb476b48b17976d99fd20b779fa56ef486bd2bdaeded8b063ad1f2beff8d03d85f9496da0fc6e06ec626ec6493459bdeb4434329c654afeaccdeb23d363f6981a5ea7e3635f8c8e21141e8db4f059398b7c60c8033eef2c0922b7459cf363b0819587e834998398ee90d371c4a4f5857829643fc5466ebc4a0ea44dba8fe2fa9697c9465555b54a16ea0577ccf27881c296c5ed70441e5a79aa83d0dd74a5fd9c7ca44acb03c00bc142beee26a32d227e8c4c4f26359ce6f629d53096335a6f51e122361853cdee6e0df06b4527d42617d0d3faec2b585d4dcdd9f8fd0d7ae5eeb12b02b7027efbbda597e5770e25f18603ab398fbc2f3933e032da1ad171d3699e87c1c024cd05c4fa2333d253d50627898d56571cfb80cc6bb56ce2538640e9bc4fac80a936c7ef3fbdea11b3db6bfb3e7d4684e1948c0105e672708ba1275c16af29440be01e1c84cafe11560a18c737d5e16d8e04c452df4532112d134bf1a709e5ae0f003f76ade8a915a277f026100f687bca80a092e332311e97e3e9ae19ffa8ea4fb3fd7f2fadf66a927c4f4c929542e85aa0cf262a72cde0e966f5676106aaa83628fe25a06512e52ec7084a689d0e5c395c346df78a3de8d3a0ec56d02b9741211a8f6b44a643f2d601301ddf700d5239e148ec924de8b564bde87463770d361ed54b854aeb0a7120c2ba40dd4dc17782c94f8794fa651e24f1351366027caea6586ed83167d42f548ed65b04adb2cf4de309df4dc7eb901aedb12b75876653eeb8c3ad4b58b5f009d51f473a78a6d08b0137feada3c4e08d6cfbc4fd315eb2c17cfcb51774a0f239c1630bd47e4b635426a338ebdd3f4b35fda6b98eb4874ee4da3f7425d84bf096a76fae024e89824b63b8c338c5c4714aff66524de6152a1d317234c564e38db35020a36b6e90e9b7b5dfc89f95a9d762c74ec8f7316361d4764c9bb169ed26e4c4614646000e7f2ac2fdd0c81d6046ddf8d5beaa33b131dc0034939ea30607f6f3c45d30fdda009418a2b7bb18bf1e40931a0801b1875156a973ff36c280a62aeb9966b0cf92dbcc7e3b69d6e83c1ccab9c17ec844cf299da5392936f2699ffb59be37462d525afd173efc8b6333ad9ff9d98febca14e093c739cfe85a70aed59e1c72de002c5d941c67949cb8afb0664f9e26f07d97e1dacce42977c9e6c7577d0de4cabc7dc463e231d71173954ac5bb97d0e1b8ef6d8011679634dfeec4c6d518f0d4e6fbe37a6b8c94c747877540ed6b48be0281aeb8c48e45834213fd793a89eee73b90d25b8c0cbfe35ff9aae0bfa5bca9ba1107fb1fc6a2b890a0f835eeb7149efd2c40069dd039ffd02954597487e4dee6ce1eabf350e78be9760c444c6785ac860964512acf2c6c5bc794e347371a99428c9b8d25274d288914105037b1c65dec9b2992e652bec0bd13b0a1386426d07874921ca550d4b5190e0bf57c658b1a15d4dc251cd97b58411055d72bb80188198420af49043ae1e1d845a428ccfe2f21dca7cc536b8a8abf846ed0acd158aff070476b2105656b68aa0db8d09251e2c006cdc5ba559c6fe33901556e1aa7b653aecffa972c691465016690164f80555717c5be736e252592480b08a0da7d072288853ecad6a090dcedddf81acc00647319b3a58b432f20b2cf8894d207d28cf0fef22df04e8b0a5a9b4b49558990bc114086347cf26019911c7920bb1131a1745ed2e1e0f0c9ac978829501ae7e966a37f8897ac713b77bd9ac2d0cfa27822bf43fed99c5dad630c4f903dff24d9050775f8932c856fd07dc8af7a46940cb675b7ec747f6261472af1dbece673b8b60f9d969fe775cfb1d0631828d6f185f127ad6a2d9df2512285f6472aae7e5f9ae67d93db25c15ea4ca80642e0ec7835d1f5bede9848a1cf41a22bdf5f1a418652f0d991b36ef69f56dfe68315fd8c8e4bad3bf7efa55e875232a24f22bfd35897ebe055180d43c0244f41556652b9bc9b54137339f07b5022fe0f4741b4a1e9fe8bf05e3bcfb69e38edb00edd85f006231c51c8fff547ae90eedc4b95bb082bb8b846d0cd556d84dcedac9aaf523ba190e9498245cf74a9a3858a87cb5119dde56db5e5e29f14487709ea0103f0cde2f53aeac4a753c8cd9a2cda2b203bd6749ccb7d4102da86bac7469e70fb754b5cfc9bd0760e53b83eeca530e0234fef538d05fe04ea1b769cbedb9f529f7f29661a7adfaef1a57a730f01336a511501518d3cc9372b2895ac119d45ee93a1921b1e1fc0bdbd016b971f7ea2a75fd8b06d365193e33c99a34d9057541107b349ea43769a73f7e41d333e249c91e4f21c7cadb2cb1305efa2d08b472ed826ebe77488444c664dc50099943c21c042da5b87a59155080e4bc49378cf1eff4e23f8baf0039823c00012cea607e911515aee3b42fd5ded36a0db7648a2921afb1a79308f3c44870d35585d6954c4d6fc40f953fc6d2e0e6a3e04ef609b535eb067a7a79395c24618a3d0a5532897ce5077b226d9fee4cfc77daa61f3478930ca8751ed73a953b9efbb25b03b12e5f6347deb9f41ded6e21f46f6705a11e24fc8ff30312d7c480728ccb5702648bd9b3409191ffb1dfce3ed68e285a5de2ccfbec25679fca34066b0a489eb81e98b3b56a36d0a621dedc692d6320cd8884e37982a48aa0feed5332a3c760e303f4dc73f1637dc4bd3ba23529c4029485251660e1803d8e4b282041e725ff95e6854968e492e213e1144fcb2e11cf4528e7a38dd9962c776636a3dfbd9efe6182b0795d9d778cfaa293b003f0cde0d28b0596d8522f715a61a2526ff2f2b26b8a9bb3b95e7daaf58fc3824fc05d56ff65de039452908fa030958b8fa285d252084e53c6fcd0e7a9ea31bfcbe551a42dd3c3809ec8de08d79f5af695810aa251a1e452c3daaa64c94b557ba7f5c971d3c86b227331cd29742848f15b3edd46f28f5c1ca534bd514027061ed923ac2493272eb0dd35fa4900d1e1b79ea126ee6e837799c053de51d87f8cf7916d8fd1c50c7a94d435dd3ea71f4c6f36403069b021514a3d2a5915657c306052438f7bde0e674e0fc26aa8f149bb76ed323ecee710baeabeb9e2bc52498f46f458348a6f9c257ab8fb9c6da23ba4782869a0fdcbb35429f1f7eb32af3352ea2b1cf0dca61447966dd6a8c218aeae1d88f2c5b0e72644e48f47849e1cb495c2206e1fb40cedae4ae345496f7e8e46bdeecbdba833e2b85fdf7dce1b12db89e8f14f8d88513dcb5a8d0c9ee5457770cecf72c1eab6a23447c19c8b508c69479bc5febbbab89832acd83f8211fae747dfdc30c55d4b5fd0eb740c1139f42bf458c477c7bd62864cad99f1d3068104ea7cd5e01fff71538cf867243a2977e11d72dcee70ff2bbbdc9a80b242ebc012062cb4ff1689236c0fedcc86f67b18a9968a07522e89a6323bbd0a25c7e9f06b423386901a5fe308d58fb70f0560cf405abf8f0815cce63bee08c90c9c847e3a54467fc6f97752e5acd84ffdc605f94bf40de25d185492d0d8bcf4ebebe3772f1b48c1a30643037f9856b52ad99557fa0c294887222584e3dce73c65ad1688dbd6e426ba5e4ca2054363d347be6c27182a13b1856bf0f4c2cf8e23a885de89d8c1dac1f32ac46f2e1d1c865da0ccc9855be7862c9380ff3ca55669c74eb93ed74c5fa781e9f552c368028aa0a1e3fd13d3a9758ef2c70215a5e7c6e662c24269eaab3ee9581b70f894ab2deae7740472ecb82b3e7aec401fe227b318f00f8df9a68d42b4ad5613ce0675d9af88365ecf7917445f58ec158f24fa40b3e8c482f7b924883e3f4da0fd6845b846d0620ac204cd82a4cf9deb5ab8fedc6d0ea91b05b3aed7224ab5b1fef74ab051ea0b1f70fc6da0620e448063255b4c8f51b4468433a416cf4fda1384498785e122baea3db1ded10bfe79a6f81c5663674dd2bbc90d005363ef805530d7aed725802190af65cd5f46ced7ad6ebc27ba38fd60ab199d69be816c7e6397faa6d10442e51a008f43391ee871ed3211305fef22ff1de7f9c2a7015e82f6a9c45f2c0fbb7ad7ea8732b1fa7848e4f57530009cfee8884dd3dcace5924b693d0b36474b73db2e48c4e310a1fcee0a1f371a221592089f33228384e03076dbdf66047b075a26aefe9c318a5c739bcf4fdf561c82e3c42672d81dc9b695f5d63b1dd2adeb2c01561fd031093ed3bc13528f4f413c52eeda3c90df71611245d8350647cc75ecca6da9e4b5ccfed741225d017523cb65d4680c0d08356ae9c2ba30e08c267524ffbaeb33f3831997078da55aca485b5450d3531bcb744d1673b29965163024dc2e5ae3cad44036ee20e34453ddb2cf6226758f5b7fd7200e696a094387f17e1db7d6ad1df0c4954bd22372a07ebb55e1563fa9d01298d5f5489f549265e7e56d12fe3fcf6f8006fd55d09995432019a65c0326b28f218434f37f3396a54757c01e54ad6d8639ec7451cc1f82efde176b7d4061f1a5bd4820515ee0ec43de20c25614100366ff42a01ebc1bd2fea3b72a7ef385a467b4d0bbff1b69ff570b2deb6e19ad47ce8428ac0d33971020e64a131161066410f05a8231f6f47503ad5dc5f17f94db509bc99b4823911325af8ce96fb3e90fdc987a53a5e49e218a1c9158babb1a219c284418b862ad0b0acbfbc6695e3021426acfef3709ce61f6a5a678fe0758099f5f3980c6c998c0dec3e5dbe1e684c39a3cf1ec2aafc60e18a49f55cc86f62150d6ff710cd37bfbace3726f4a166701c5ff4559fe6c223eaaf2b121977efd2b047fcef57f42f762a16323ba94e8fdcd710e43ba0ec30af446a38169bdf6d8e999fd3bd8acda01a79146b75fdafae0fe3502be1dcc9aa68def66e8df28e7c4796c7bb7b4b532bab8acdac4d4e35ab973ef79aeabd1831eedef910b510749615648c84af072bb968b3506081229aac57393319ff531d6af9c57b7733cba063c9294e86f4259a5ac5e9d0e42b1b7cc6facff8503ad0b393f73644d8ec33bf84f6d2aab18fa2a479acc9ebaaf1a6cc24765ec630630753e57621ed14cb3658ad4ced97af070698241d5c94cddb22443d06390e732b5ea295623f7be409e94d2356ecd0764ebae94794fa0364d4fcdb8ddddc4afcc87f464f85a163140db81747244438a99299540474abe182ea5e7b1e1bee46726011a76ce40847142b7c58b6d3851b377905c2c12083a45eeb98a1eda1c1722e2fc369fa0c4349408d671ff976bb59c980adf0a7c1ac0459a51539ea543ac0fd00b4313e76188a7d10fee734ae2c601b8a94bee6a2074307a789f6bf116f9bb663890bcd50411f3c61e53187b969a59f6c51c9f87b03338c43f68131728573d642a4b0639643c2a809d724d66b4c28ce345f8ce304128d6c1dbce802c472e29df1a5e66c333f11967f9d600305141991bbb2b785b4f0468deaa0a537514078ff78b79e69a543eaff5a5add2ae7fca2a59449e6a423a54a7e1ac012ca53a8887cc6cf9746788f5f37b266c77d2765ad5c261f3c62ac39d23eb8128fad2907260f654b28dd62c6a4989b2488cf938be693db7d4d1a78abb1c41412cc31d5aeb4cca4cba199029842fb4c25883164d9f4e5091b35772442e99c1b913d3e53aabbd09f38bf99acc70674fee346291ff56d2743ec5038c99ec0f1732fd535de57d5ebbedb1efaf32015fee7e4e968505ca77c3a3bef580573c62ee4f387326b590d1252cbf68840a4a255f781e5795d0b16f5087bbe9bb75ef9fa5c76d7f029843d69ab2f72f71e0bbe241d9c6f0548c33737ea27ed9cd0337f6c805d33301bfe0dbd071b55075d990a10cf8a438a7b07e68d6aebb6fb7163c491a9ba370d61d2d89303b9118f0f49a3df549e853a9cfa18835de0c4dc846f15a204af5e8ba2fe7c3342b2f6c89f03ab64e94f670c33a91e2ab7f06c6cc7c134fb4c86b1c827f95139ceb45611737b6570e83b56519b8538e3ac9763a71ec01318b92ae8e245a791c9b609a2d308c06f9245c5905701779e546ea86620715a76bb047378855b151f77056fe2e43a3f460728ed9e4795289139f0f7e614050ba9fbe0510c9ab85b846b45a3a21d63dfdc37cfffb293429d623398c43ce0565227ec5c862da791ed5b8e401a6dd92b28df3d1c48ba4e70327950b3c0e9bda8863fa6767f2081f3b9c1e788c47486e7c1a873b1269d0d864593967a9afb5c36dd4ebe66aac66c723023e240d862d70fa147db3bcdb1f538237e2b436c9db8a116f4d0648958648b50d8839885f72d10f66c54d1c6700c6be52cac05997fd7aeb07ac57b797cb12dbd8977c7b19aa0aee4edd338ea9957fc49909bc1a143fa47694b3ea82c1a498901eed997c9a8f7a56337ff7e3acc4a66962760bed4c1ded4df17d7569ac1410c457a5166cadf571b081372af489799978e56e86187e2de842d1a2db66b9358783ed02bb2be7d8a8b8c78a36bdc068fc6076a7069754f92a3c0c6454bc2039bad9511199f8e016caff1c0f0affbf3357107e0b97906314ff2f69e6e875e4ccf8c5a0b90fce6d8539b09df7ff19969ec773024d04464d36dedd7e8481c351652d86b3dc3a5625841baeb07325ea3a1d7e6c503f255318f6e2b3a36cf386bb708f4e7b2863550d9513c59b3f2d42c4bad6efe84908a33138853e8b39aa2887f06f3d3dc69e0007e86590107fe712d3efc65d8dcff983976ed7d2d3bd010ba2a49276b4a152e7214cf3d5f6eafd0d3f28246e32610876d452b7031c6f87749fc7a37eaacedc21f8efa7c4bdae8f4069a73af0b2642cd1d3aaa76a3e689da004f70fbc436d81cf5dfdda29ede65db4423f7369a7951b0fe4a1e17e1d3ce838f7b3f660814b02a475efaec6eedba860e5119ebb7d87621c65993a3241e29fa33c18947e17947a65d787321811145207f2fe96fa4a9a90bb855f450ba4f1ad86f4599e0e1f8570a87b0c45b355b3ae00741b85f778ff4b09a4033b767c5368e3aaf96b3bfbef642cac83543d272fa28ee3232ba991ad22fae9b7180ad088377a9c699053259af602c9f3ba81bb98486a7e3d150a8fa1c710dea870416090533c7188769f5006fd3da58642bee4fd1282fbda49923c2dcc56eb38dc1cf1d201a3a40de4e2aee01001f936d735c4eb22a7f3fa758da6f90dbd1a504efa220171ecae58589628f4ea35325b7ca9f39fbf08417ee090952e6bc2933ca1c9e95a86d9f26bb8713e0c116324d051e7c632ceb4987901b4f06bfb28eb8cfc701b6984ad85e9da5d94062514177099bf7f976428ee0cd2bea08b39ae1ef99904c1011a02d5944faa8661ca905bc54df37d3c6ad1cdf08dba2dd190222b079ce2860e539e33896510c60e103a545975d9067957b6d487b7ced8b788124a997c096c6a6fb708d180b0bbceb846c73e9c9f33ae6d68fe8b12d04dc8c12361f74502d86f5b3c140631da508dd3a29b806dc266d61396e1be354888ba9fd24182cafb3d44b56618b42de978aa2b5055ad86b5863bf534fc147410d569e4433a5773263a4abea4842d1c28ab135ad4f99a53dfd294655caf0c95a9b2989def9754a64363ebef4a8f06030639415ff635fc59f0e4adb0a580f97f6580e30ccb20a9fa7859dc15fe8d4c76e4b1b1e224ab64286fac89f89a5d32e0787a4854d613cbad35706de7567033ad1c382c431fcc9c483029769db83a47fd5e878bbcbce2c7ff1bc6041ce3293a0193fe2cab8990a61300fcafca2de765e517c85cfd9dce884c51359a801a21cffbb3acdff96b6ff56f9e8375be6fadac95bb8d9be42ad671b234b9a2abb9451d48921a2bd9ed17f2e0dc3aeebc26e56c0d75af2b38ea291c0f609571456c76752cbf495ff7f57f3288dd1a9e8571509e9ab85754f9885248264ae517501adda637b4ef5d6aca47107d2761857370097c18d2bb2021ee74069c5ca2c3ba6c1b545d8fe93a4b5568a8a0735c11c6a46051269a469fac733724099eb41391c98b99ac179a0c4029d1b33cdd17c3ad628157b5048f784495aea16913da0ac4697394ba3e5b45eb14d449adaf3e7dce7f47eb7ed40d17101787d2bfb4d28ab6633992f17458a1b33d1d228e71a9698a9e6b73dd7c96024eff8dc5c80a40e0772e14c37a77861b1f3ca00ecc4ad7ef95361fea817872632449b2a87453b02045bf9527048bf86c5ce471bbd1f899877f8493474ba7d33598660450b6c675022aa4bb781cd9ba5d2738a5286c844d772455c7d2fbd2c702fec50573bc358ad17232b5f37ee739631cdc62e55a9a2ace7a7f059ff905daa4a846b45dc2b815501a12ecf666669c138df1bb5a10915a4bc8f9d9982b55bcb27006e2168be7077eef3848563916768f8b8900eeff9fd47260be6e71efcbd5c95cd40108a1aa82c53a64950c61b8575d70eee7b56f04053e59ca356bbc909dc459c47abf7676cfc3dbc32c7776211c658c0296bc0a86f2f9ddf5e9e02bb1dda87478b9a8146e4fd64dc2771979b60389772ed49172e4e1d3f66cb5583eef2424a5d15beda57a1389740746ecce1c8fbb84b5022c400978bc0ac1b38e42044d940610bba09f9077a4706d68faa0540f99a579614b2b3fc4fdd29330f1e07f838923d8235673cea064851f201d19f32933b490384a60c059d9d117c842c3cb94fceffacde2ea3ff4fbfa48b4d27c4e146b5b441eb19d52dd85005e831d21945bd11c66f143e6bb8cb745ce7ff41e9126d645ff78f1664b4b46f962ed729aeafa86b541f96fc0e0cdd1ec2cd8a7b8f23cec76a414a73dadfa923bc41ae74462761cc0212e8cc3c4dee3ea031e0df516ceeae1a7101665dea0b1bc5bbe5deecfa7e5c004bad0631746f363c2f8931f5c99951525802d0a01c378ac1347f2782c738f64e89e32bd17aeea24466eae182db0f7a126819555f0d0218efdd766c3d62b5b34ba887dbda58f71805b1295a6f9504ccdf68c9f6c57d3cedb5206e067ea2eceaad170b17742cfd3b20e9106b6a26cc26b551aff949e9605341257e8083b4b9e44555c640e32569862b5dac654886e056881c9523f7167b9135e70ea7f19b0e619e412566f0305e6742f000c1dd921dcd8c011ae8088ddef6cd80e01999ac89c2eb88431e8466bd516b0231de4f918b915fc6f68868405806cee4a45f177f8fd9b0606bae3502e9da5a8039c2449dd47983f519ca061f0ec77e737cdd520eff5ba99f63183dbbcb5a852691f72a074968a19ccb1f8120c3ff517a94693a4e2917bc1f569e6f2bacb820b89314c4bd5d2a308aa5563d92e7b993a243c3ea0064e294857f9678e590036f2a21c2b33d4c11a68d0053aec46de718c62ea699e4b1fdf0da5992613b04fcb248fa94c92a6c769c33936e73ff3966bb7dcbfecb80d392e951b684f9f9b7683bf0ec0b730964b39c128ac454dd436c357c3d6e2f0ec3ce7e510d2533b13a754073a51d04d78552add8d81485e3447be2f605c2c0ce226cd49639e2e7bf7e2101e2e0f064d3239f87e09731c0b4b5d1d2d047816fd8b7303035ee4166bd2e0aef1c10c74f18d7d8754672003b38f2f16eb8d520f3683b364b587d1f7ce2de5ace49d068bd88ac065a022d647af564dda7b5853dbe01e32f1854ba9f51bf56374a399d9a97c0f57d8904bd8a65275c8b3a826663e1ea0b8c299a35b1d7b33498bc6bf496c7d25b3e25c0d63253085d4b4ca217d603e50cac2cf5b057e78ca6500e4a500e52849a5e09506772e1616feaeb7de41fee94fb29ce75a614f9bd9c5d3c4d93ae6cf538d6089a2cd3481f424b6de32d72d0b795beda649473165e47632ecb9bc683f026a372e11d9788540930b175e14bf545d4ee843253b75c58d525ebf56aaaef73358586b29e9454c00dd12473a6bf459bb49bc55fce281c724faadb76635c831048811b7bbb6eaf4d2fb991f6df9f7efced0a9ae876573220420602adf62d7565d4b988bc223011ed8b9dc518847040128d905cb5c79d52f0cd6acd9e0789cd2dada82b5f17fc762112bfc5eff2486907eab8a021a98eb7c3765199c5a6fd0de25aac327439ef0c910ef59911e30b2d0f86863c20fb99129678b9e4bfa9e42cafd60ef321910b05ad26f9324e2b5f21fa5e4b8a5e5666db193e6b4f3d8e376e4a1884cc573a107b4efb3b6d1bd0171c92bb7fef3489e91bb7d850a8b5d51099864b80cecd37ee5d849cf9058977b9f5484359358051d16cb2e3fb3b85044ad75dedbaa43dfd06f1c9a705d19e2ee69f4c560c546e4b1fe5de4039eba002528aa879b6463ff7932d5e76f2e10049198d472666654b250ba91a33a56b34c39412b70e075ec60b8f3e3463d19f68054c920c9b136678bc8e075f91a2ada1a58bd8da278f8b04fcbda88ce77697a927ac3c90c44951d86a5edfc14f97e127d1c54a4a191e7793f361cd6d908e6c4d5101bb94f9737b3bc981b685eeadc85779aa68e045dd5cd1e8e461e9df0f049eb027b5f638ac7bcc2a26586c698bc36f743954dd7c95a81ed2143a4aa144832cdb7e176d22c74f4ebd241fadf16919e0228a4a7e6c505e8bb41210b96fe94f5f8f85780544825eda8f175387223d45014f33ef374c9b153b5ff749e3ad5a401ba5400bc6c9ceaf75862248e961bffc2886d8e3f0ca9a0c8d90aae5110d09c6ac40702482c948ce1ce5f7e07aabfc22bf8e207955e6b46c2eb3453c6e29036dfa7f43f16872045b63810e201c17277ed457bf5eddf530c92c980cc0b0001e1206ef575791f1533ed3e3316113c615d8cdc56341c35403b647687889d4db724233eeb8a6e7409eaa8c2f8af3594b052c811a5d55d1f64d87e58662d954a78f86357fb32e0d8864f3d3dd605871532a179a6da6b7a04aa7fe6cd21b78b9cfa35edb1c861209f76106a3e6095316a91d0fb079e730c7045e5dcc752b45dd67ce3fd9b199ef4de9db24cd5c8c66d13a6bb5518b0694aaa58498239170da0a1efc0a05b01df88abd8ae2aea801f41326ed8fd988f258361bcf8f821c37c759a118b5008b9bef606ac793de7c3b96d692b1536ba267cdb527cd9fd52846fe30a138f0dc89e2419fd08ffa20268c6d63c6334d868ccccf622db39143c81ceb141aee27d1fecb25d5d9db48489088210d306b442af8a66ae79d6f106bf3dd3cc9ee4ece314f17f8a13a87872644441b0dfd605a3c17d76eec9250bffb11221924c306363ab51f3c10b94cb04eeed6b74c5f7b5fc996da7fee4dbd38afb6da2143c31cc9f8b64723945979cedcee374c5509f5800673b55ba58e801218092d37174cd6cc00be03bc20ba70ce60bcf0cd8ddb55d68d04ffa60b2b8a3cda4e16a4622416ca2947b7a837beb532c6e0baff1b4fa080c40b9d1221df495e4af1ecbaf0cb115f4a86be4155cff1d07a11fcd45a81dd2699ab37275fbbe9db245091935b8d54650897aff29df321e280d111a995c665abc4a9b0707a921735af90ff5f4ae00354cae710fc61327d933421dbacc89610f83f0d2cf1bab2a6bb8ab28d6b8472e58a9879b306193a7d07503d4b49065408ac9db8ec494bd9f00f88fdd01ed6ab7abd99e198bcbdce94862233b5023b89181d00af3dce7cc71663f3236a83474d0651a7d10d223dedf8aabfb650b1a62f8b460b4677c243779b6403b1a9276fc171d8996d9288d756a8928589dd1d7f1a5c80826bc63cef71e2e047127ef8916acaa48b8dd7af4648e132272d745f4f0581d9e7ed9f2ef1c98f55c61e18495482ad0e3483949f5548d7f54ca01c1ee2712d1eaaf1c0bff884a4a2364eb0f5af24f3ed718d6adf4cc274a457f65c98c7fde30bd361db2434ec032102028810bd3e5da09e0bcce8b6766557ff533f154aa5c74088641fce65fe2e8cafce2c375e0ba90b6cd32cf0ad29040c4ab2311c7f11ba05fb88a1b65abc7c944923d9647442f25bcafcc8195c9dcca79f854856d1043079e200b0805efa2050231456b257ec574ee169035385efa996f649186f2ee7ddb9c495fc69b5a5d539fd2a6bcdbebd8bb1d5c13a3aa7ae54f82e849ef3c291c4e9100e670cdbebfee92cca95c955fad25ccd4cdec9b1623ebe9dd73ec1048c05fb827ecfdcd94cc4590b70ca04f4ca0f8bbfa3199d3087252da4916116598db1b8355ef808c4136ccf8c7d78b4aa09dbf5c0feca056237cc27c2cf78a42876458830e8eac83ea5d2818a35ba7199db0313a49a418fdf4e92dfe96e3c1fa29273742f3925122b2cec5e4ee75e1ea84a7b25f1e5412f85deaaf363ee399092b9620783b9d38c6cd30a5bd58c6ec1ed6f1affd2f646b9fddb77eb1bc234db0f3e388f57d9f9885e50f7434132630ea1f464ef96a785f378c1cc977ab5d848bdbc0937ef5dfa958fa19a0a857d2fd46b17e4c3c6e3df1aae21fdf89d1189c7aded48eac86f75f9b642dc02de56020fb3019362fbeaa2e8bc639deb7c91135cfd75ac8450d68effc136bfd0c30d189f65c295703b9899630ceac99e5f60552fecd549c5e22585a65c5a1e39900cab06b0279f031dac8d4f7310745e337325eee9ef2cb9ae1e2046304a096f0e59c91c5e33bf2ca6cb691f5b82fca3e17f185cf3480aebcc746d72afc5f74ef2c1d4e3f844ec94f276d6eaa6ca799106f9dbaf9f2315b20960a7ae8e9c545a8979de3f0caa1d860ea44d9732c3102006c26399ca614d17a07ea4248fb5c0db4d5ddfb7c4769330998b6d0629c8831eb955c350604b68a5b6b372b34c8ff291b13c6742800114943fabdb77a960d361c46dea776235da4d5226486fdb14f581b0d1042159850bfda56c88b3f3217afbceeb2acfe7e4172f4c6583f29ba41147647b0d9fa12a4a7e4bbd23745c1da40af0d1ed9dabce23e9c88a74370a9cd268878636d84ea07e3519e48e12e647bf4b9777ec09260301324a7aca6b7396266d38d922b240f810ff79285c3fe0c72197da1339d93508cfbd5f41222e49017f2d28047ae0bc9a42f7cee20edf824a82c9640a33e46274e9b98a9732385184aa4236df2e6c844751a4b4a4b49c6b9dd4ada075695e834b722b1d30998276a8f74359892f0d83ef4555271cfdbcf8b8c5fbb0bf61b0b14bc93e8f9203ba6d7a0c2776ffe12f2d68b9e46a8ab686279158fffdcd4f716c29893b6cd620035fd98894fa8dd63512db6f43477f8ed697b7a241182f66b52f79c8c4c49d9c0c2d40a95f27cd01c60a550fdb499f0f84f92aab4c5ba607b8026a56973681a6ed3d8ce06f9f91c7faf077e0b148e46beb7bd2a6454d530ad90aa61938bca5d3d786003dbb0a278118d3ed761991bdebc47d4621d381ba24f5628cc0c38f2e1f32838f073af04e1b5a19cfc341f02ccbae4be154e1fac817b7dff7fea275ee51af18a0556f14d1d34905aa6afd0dc2ee6ae3500432cdc24a2d0bc0135eddd22205b01ed27846cd58c3265779e89c8fe43f8f7f08ba651007f2b13dc4fea5bed45241f6cda9345b5ee2c3fbc1174256cd425015f4acf1edaad68ff76d8e3cda93a120e1883db70726556bfb02e8d087519aacf639567803a704f589017776ab10db275e0c6ee3f0527e04216d564719acea64a69faefb47d5a1187507c68c7f1a7d705636f54d9f0000f0972aff569a93dd1244b8a96295cff1294929603cdd4b11010ec9587e00b76478dcf781590aa3226f6d010ed0a9f89f3fb284b31444b51af26e512c6596bd157519a4159f2fa11ad5cde11ef712080fb216525e8c96329c909fea01dbde4335cfc0e5ddb761dde02609fa20af73f85915c211b399ee892daeb7cba07a55cf14700f473d940d9b557946b28b94558f0f48e51a93eed2000b9ca6251e1a96724eedb3ff5a631b895166328555a6134d99e33fc248a546cc4af6673a6df6d2f2ad0bd0fc8ad55f92937d1934ad84352a45bcde6005138aff0bddf3462243ec3964d33ca7d6ffa1aeedae58909907a78bdb878dbb97f8ba6a944153cdbee008d7b78f6c23a6c5cc0c37ca3ab976ca770be5c679c30402aae071906f25557564aeee7f382774f0d8fe1e9cab10ba7ae9169e6574350dd2937e06aa727350e788bcb692a87317a5a3f58c76bed9234aee7dd389db2cbe2da3179f5020186bad9227f501972cf13450c773b920dbe9fda96acef8973f81e09cb17bd6c52190574f1f9b5893ee384ba4213886fe8a45257f83b68865661da0ed219bce91ace112287cfa9b1bd6b4dbce6d733e1367168d69f96590324c5fe0198cc5a2755cbd2ce5adc80c63282802bb266825c87414bca20328007f8f6662beeb25529fb2e5ccae4bae52ece1ca4741e343ab3920957b272ed61283ff1b66fab4ba6566fbdcae0d0362c45a8dcd311ff8a8626689daadc72d1ef6f589d253dc5e902efa06f386244a5111332e33a192f3c377e874407a0aa52db4c79e1adb24610cb10de5edb26594a29a4a601c44ce380daa022758a408eeccccd0005ad41354e8a65ca605d2b2c9a6f1bbb754a22d0f80113757b2229edbc9e231a4e442f13ec9ac757331685d93b29d4c52c25db4aa3eef0bf20f93f6224af7ee21c7343d825e7b0b6275d53d34c603ee08da2c3ed133a69c6383a90326eb6c1dc81862d50c753001f9aa97ce96e8c20834658dd6441ba09b1eca2eef036eca11fca6182f1a5d302783867bb33a737f4e61a65eed7cdcd68b746a267224ebdb3489d5ddd1c4ee78fd952eede2d0e089323addad957bb90a01be0a5689463c2b982810c3d7364638638975e7a4443d4126d8932ad0c2cd989729a10b465a4697f3f2ac8284dbb5d81413c23d47cd6bfa692d2731597f9d639bc5293b849f7aad7995f8895a46388cbfd6cd76086a6d267a748358c12540322c21bb8e1cbbe6fb97a29b99e03a1a3337c09da4ad04cce39aa6a239b75f77c5016dc319e31dc1cb5256140702287476b3fab3785e79fdbce8b68907dfb84de9004982a1c501d1c3309cc6f14eb12858b5611605dd605f76a5b1744439a65a3027e65781524e8d0162b76f9066338eff55330e4b733437b451de3377929eca3fe15ec075473a0ec312ab26708e4df902c1120a24779e2459f795eb69099c4dab3aa4a7a972a21ca8744e1c748367ca8cb49a31688f3de2202b4255fb10e5712d7ed75d99927ba8833443d8c1434502e30579d56508061ce326a29b22e27d0b8e5b34d6f640ec5e7fd2e64c1249ed81868f2a14e8a57471197ae378d61cc9fff5ba5364e21b1909bc94fa2c96bef9e43a85879623900f805b7911c5a6f0555967326c03c411d1eb1e16e6b7d87a942f626fb2b7c067dfa659b772a223fed1813baab5e01eae27f17cb5ccfac33a7661603a2bfcc2aa1a63b7d2750d749bf1d4d09c4c1abf553f346411e18fe114ef30e148b617512778d8a45e2eefcae337ba0c5867738d41a44d008b559abcc135f7cd83be1735621c280299e7f583151925f0246e559ba09126612df14ef35bb663db9d0ae811c54a4ebfb6ebfae7c6ab52f6d951aaa7b2e69af9e868c99763ac8f25ad153f8d3d98afc548828de98f76c994f71c9b16771c0a139300e77651081dcc680052bbd04fba4cc0f6fbae095f7172bc9853845653f5a7b4bef3b25a4359ff57f588c434169f1152077626abed54255d946fc4e890428882eb5a9af2b1972b5883ed92f172621282ce1ae1a065e97ccb5ecc0fd3ef29f78dc89fcfe2678ebd72b2e5c5172f35ed8c239ab0d24b96ffd0a4b8e2bd38e7c7a7e042707ebd5ee0e41bc3a961e5b7d06512dd7c1ed3a4296cb5d2d1d307e508d4ef35372c31c82463f3200ef5da4eb355399ed5933b57dfce148692b0fc5c5601879459c60fa4b51380250db1489308e06fe57959df4e33d70816efa490047bc4131411632a6182e45ae1609940a632c2553fa66015269d30054109c7ae4cf95a3377ed6391f36898a016deadf429b3f1cfa5ed0d30993d1d8320c0860b9184da427308ca7c5f9292a21648083798ee7ba14500b415426e1336f4cfafd4ea8e5f3e4c2e125f16009da188efc699a22ecf3aff7259da5e48f97ff1de3b3d29fbf9e0405df1fdad7d5e720e9ede7cb1c719ed2d8c0311eeb39282f298b2afa3992d0d38cdf40a318c21d39db9865ebbc88def524be745fd405aa3b62213dca955acbc243369de401c3f52f7509f2b80a24aeb1de9e6093d6c7121287cc284c9828d9794720112f272ba8fc5e510a259cffb319ce4021b52b69664a1330bdadcd9f3b3d27753d287b734026c326dbca1e02cc3a8f6d46a0c1192939d0ffb8c175b5b0b505324541890e6824108eb549fc987b67c2127644bd2dda7101449704bbb6bd819c4476ae56dccef141022048c6cb1dd495622fbd16a7e7b2c4d51e74611e7e535fc4ce6eaf57f57f5f007b101179d6a0bb29b07a8080cff2da131d04ea25be3203916bb6f23fee089bda88baaf9755a05242fd15e8ee63a255bd54a4fbfcbdae5367525250deb39cae3c0efde4d4c62c68846289f1174db84948595dc632188334cb49ecbce375871d3bebe87272a71697f4ad5ff8f01a8a8678002f358d6b9abdabf2a2c9d4ddabf2d4e42d1a993b282f654da6a78d282ba43d98adf10976c1fcf63c58654e2404d5532cb3a37e17c3d46b2d313fd75a59007569989e220987e0d43cd2c1aa95b5fa996579204952206871a16d290d4451fda06654e3466d0bf2814427563ea92ca69c2cd8fd0c80988110a0679f51960e1e412a14248cc4298d69c45fba74f600b9a2dc542564c6f0f129d95f9f969b6255bac25800a1e8fec2b25ce52ebcdccd10bf1b3b060de9ce82dabee6d630f2bfbe9c9a34a262881faaaa040b473599f51cc7aeaf740eff66c22161e7e08705cfc0f5ccec1f757f0a42a310c2d9a18172699f8e3912299708150defe67bde50b1e24ee5f9c1951fac8c1bafc40651f1cda63bb7f99b8b82d8096fef383e0f572f82612bd5ca1fa7a897f7261b34745692a1c5c6c371a1f5324011526f5a6743c0c1cca275eda3c305a4d3fadad76eb88e9106031f269427fcd22560e1f291abd16d9d40001341a3be87a24967fbb024e5940788e35657b03cfa78d3df9b64eaf52c243045f56bc9e27109b53f61ee2f57e21ae3934b29cacb37c12eda0c06bb94a343624bfdf99c53709247ba78c126ac43ba048827d8d2db90e784ea1ca1a7b81449b08ae401c73040fc8894d1135e2561118adbe804ea82ef0d3ac6f50d1765c0205aa06beba4b0c2a18664fdc35f4d92bd905d166481d63acec7aed45916c2bf737ea5def73b26862f6155dadf8b5c6124700c41f98ad97c959975a30507457cb4bb50ef58a41409f29c86984f19b731753bcd915174a5629eaf26b2995e450dc8984fb57ec55128912f3381e5244d24b9b476cd7183ea744fbfd961950da1ce58d13c5ca829f4acc4a8a592601430db61882e9fc7df519650123102c96a14d632f65b6184a10d446afbf2160c18c0c18d24c3aea80e1deb8fe2e38cf6fa403fc212ede38ebda68733db14b8b1bd26ccbf982f5e95ed7d7a95271621ac6887122a27ac9645658f4c4758a1eaf3be6ed47bbcbda0f182e319918724245c36e68a2287ccbf0dc63f23c917726671046cdaf199812db607185c1528ecb76a4d6c81ddb7047afd7d6ae8a3ca07625bb37fa8e76f481172acc7179c4ea95c01374e5d7aa4cfec18f27abffdf0f48e9e0a6ce4f7f18e36879b876352b667ddb98a20d59f8e4d2943f53a11eda8c64f15ec07420d0546387904ce4fd4ba2369e5c5db70b653c34eccd8de41557c3a6a6d833a0e763084fbac403befa318e46c9951762296f3f446a761f0ca472a47a6dbdf544d15e450335324c28734f3b7da4d4732beac5b5e34b535a7d029d0acd4cde7ff152a23725004955716dea3777654774f2c101ad8672e339817293affa3f3359b9bfd7f995dc9a9371bb173bb35bb4e833f43fc3a8c4cd1a4ad278f89bccb10ba11b6cb7778fea591539500ae6eff3739c6381771bd0e291d8f4e7a0233b09ab6bd24bce96db5456c8a58af9a23cb8a1e49580c1889ae138fc50f3572cc175a4e871e2530068ba4b30bd1f8566872468b21919fc518cd9d2a982aefcf1d9aecf716bbd77f7c37495235ef947aff9fb0a990c2af6fe329b639059b39a189f3ff2db1266fcaa33bd98afb774fe47a9dbdaef4578e2ba967703e57ec5411a421550c5b45225585351615d56c0fc7a3ccda892093822297f39a9e7bbb245fb67c0a73cf71143188f91bfa2d7569a4dbf0151aac6cbd168cddf66e0b85a718377c93c48f4cb9fddfb66ccb76f2e75a78be4912922ba6d25a5af7901c9622503c76bd69485af9050210743d5eab3f949a7bc9053211c3a16522246b179c5353389acd3d4dd1d3137b1e5db1bff01bbf221f65da8dd41ab8eddde99e8ed4f0ad96b169b0e7b92ca517427d217c1f10ca8b649661a5b8bb60af2906dc7b83af66dd80438c7fc4fe061c5bae88aea1745e67ab297b678262f7574e73eb303fa9829c3c00b1a3b29f7093db28ad41e385008268d13b1fb44a266e9db5aaeaf07a73d2f17d694b1f2c42b424e7e5acf4d35486e7c2a02dc6d9bb74b0dbbbb68ddc29efe45beb437067593abb4ecd75e41f78b005456de92a82456e4e2b5a9019175cd0eca065c7583c108b19db5ea672c6e0a062cd25c6d70f9043743935a1e13a68e287ea7f0f0053dc02814350d7a1e9e861d27b9c62103dd4eb63f46b04ce9fce96b48a9ccc28c5a670c33e8e99c38127bbf6782926b0e52864148e978175de8db5c0eb0bf740419b82434573d53d9cf65c4d272424bd3166cbdb87b13a496e173ab8fe7fa7a57d63a7bd398cacd2fdc6e27ef8570edd387b3830298f6e3f6759ec5c30e38e9ae7b2541fb3a4f13532f124613e61fbd76f6652795cfd579a28aa82c288233e482dd7794d6dea71f3a01d38bbb5c7d36f91c202bed6f310eea43f1bb027178969621395c1e447da5fc2b298ef83f9bf52b93170dc19d80c94d749ec578133a6a08ab86cf853fb129183acdc53a8b7592d8cb8b022365d88c701e9657ad39685769f0c6bf9fbb31f8890e47eaf59676452edd1a2cbc6c40e6b329b7a898c718c70a665249c30e45f3d366aa7375ad4fe26ef8f0af50c567598267c035d57b85ab870bea7ab6193c7cbaec5861ceccdb70f41703f6bd3dda6a080c23926e9f0d96749b93596e1c77e8956ca8e68c4eb97d26a571ead62cb09c8ceda79e182344e7da68d14844bb9a54b1f59a4ef3fd94100f815be42bff96c4bc1bab06045748b1c739d688500d954dd6518c615dded3f71370088fe18d387e9d24148cb90728c38edf445d35922be3ff24fc5da29a26300e4e95f796eb2e118c927d77faf0932c6a56eea77b08bd5c3ef7d0bef64e74b91df2a68c7a268528327d1137033780a9d1e7c8514eac2f207f66ee7f2a0d9b872a34e412fd1aa688569f582ed600f3f4c11ca52cdeb3f76cbaa74c6719a2968c0d97fd75af7161911fce935460c9f346bfd59eea9bdd6afb97dda36c811f87906d8a11f1fff532c2a8f050d77df1d0e4fd513a27a78f1645e989c769bc436c7a28bc1a415bbb381a820ff6d2c3ef97ac7a9444df907775888d823e6f7f416e2a3a5be402fee23f6069a951df833720621dacf72bbd96401bc717f0f47896b68d486272323323b5202ccf0440e2a9e7333e27dee8a834cc38262f0c656240c9334df1bf54350fb71bb32f90283ec809a4736dc11bd08bb55ab5721a401c42dbef9c4cf529ff4838d33454650056e92ca0f972731a07d8798809e86db827b75e6ca193b1a5c6eb77610abd180849e92ffae331f7357cbe9315cbf711b17ad7f14917965932508974104af34706bf23349f120286719489216270d201458062aaf95f775855231b201b101f121d8e7e7b666b49989cbe240f0f08cb546178c3a4651dc1df6b6e8f338217ab4060e26d630c46afcbf71930e569dbbbe89daafa85088c7e3d9e74563960fec2bef9a9a9a3e957a37557850f06088b47b36f99a0b229cf38bac64b4b70bcc70627d097c4ebab304c5d6178c75d7bea8e1317e26147b1e53ba199d4ddb5f77859a9ff314822303d2845482460f15316d1d00bfae46e78b879fae593d87414b308b11ea97dc8fd50b58f3bb7460847ed648505de2325e052f950a02738418b4ee036659c17551c29fece5e0a6ab80d40783395b987470f17190e0dac2517268847b1ce2a839a9366d02f89d794be6ba14ed17b747fcccc506e7c6fa7f314c2dbe0d61f04a38d547844b49714a93454dfc815405df127e75f4b84c0185776f8c3437a91311e1529f264ef48fb5e137d0224e7671e176748b0b5f36a3abbc594855b0b834f44d62512e1a2f1274f9d001320c02ba2677fc722ebd65d65990627ec7718bcebc73a36d0a1ff172558df8b56df3bc6a9d04968d0ae8b35326d175576e01f1e9b903e0da5cce481bd35f4e21e3503097c77300d34ba709a435f5d1889a455ca44063154841d25230acaa1bd71296952dc9fc9f76323b15c16ffd1bd923f8fa0dbf954e52b8f6fee250d6aed304e0170dee0f18b53a2357f77c471a75b7cf91a86b7f19af668d672f5ebb6fa47a04a69298023d182a002a2a7bec0eb555cefa3a47d9443590b2acb3805b3d0f8499b068bc9740f72ba07e102389102ec26bcb5c1f47ec26758d98b9b3c6f32ddc3aab356cc95f9591e1f2153a546bd6cb9e16a766f3f40163ce7d0ad9cb1dde22cce13e3431f747824f0be399d0739d89a20857882bc10be8a765d2c77b647690bd53ec5e74ebf8969c1532e7c1987fcec0b947128ed04452ad8fc78e0b5b454ccc241a18ae0105446adaa064f29279c411ae3d26f8eaf3a9176e75daf8108a9f8cc56525e18606056e531b83a95146b2c6cadf8879195ac7ebb91da35c2ccee89fed37667c10c6e8c1a528282a3811b51bf65f1ea48eaad665b82823dd0069e63a76e0e86e4945cfbbb82452108fff0216fadf34dd1412dc2ce8986bf8172eb2e8ba36b7486ba388105876434943239171d02eab0558acd95448950343e173fd9d229ceecdc450663a5c3d96ad9596c6ee2b77297d8b28e39a9538e78a61201fcda82d59ae3972a34229e15c8230e017d8733e8e464a917b76c1b79148db169e61be50bdd4568414a2c48a38bc1306407b3727e94ee2f42c2a8fd94d8217ab29418cbd3b9f522209c411384236c4ce3723d579611deb7b6262f7c78525f2451a24727549e3198f0ac3d3672c3c7092bb838447641631b10993e5ee5b3fac42d3fee1268849ed4cd5c336b52061104c3132bad5d7aff230cb17d5894009d28178fddd5b0edc9a8e5443f014a81278eaca3362a6493ea6905bafe86ce3db1874360ee2dd871fe22659c6665296ddf63507a7261183b4904ad72723d5f269f406e7cd83e4ec91c49f10e463ecbd60a74c72cabe3a0d9200b83c1ac6b795b47f2dee3eae070c38fc5049af7a3fddf6277b3d4032f6a51f553f057c3bf214335e105de860ae7f9212073f423a09f1ea3d7721869c4fabc3dc157913f1299b1eefc650f4bd4629604c6ffaac4337d5587b8d1c1a9b88c9b49d2274e0ac84511b897ab00965708086092c38c7902d9dbd4cf14771f4b6460ffaca8a98dcfaa87976c5e93f04a98265b654d0b0b4e20858cfe5178535a3fabc70aee8acf1cbbdaa2799180e095963f47d500977a23323813d6827d74136c7dbc3ed53e3631390a725eb1e6354f317d7122736c29fb6095809a2b0fac99be0f91ea340f18fd96aad797d306fec9df11e0a095a476b3fad2d24c61050f53016faa3522fd59bd6ae0c3920dcfc093934a758dd3645cbe9e69861688ac6ca94aa2546fb5e8a5ed06a379d3c20907d8a1141b2dac3ab6beca3c6e1fc245a5c59a4f3ca100fb6a673c899766f70c1768d44fd003dc68df9bfc574d0bb918f0692c233176dc6a2976b52cc76360636506ece960a3f0aefc8f102b177ef5fed9427f7a6814aa73919302a0a88aad56cc279e8b2e2302c0ffb870dd048548b004905eb93cee1573b385319ae6ef23a4e9729b9b4847c2d83c0c1dd3c9fcb8503cd32ed4f1c659a2fdefd7c7a4b7b4e49a8be3eed32969c4d84755c0e2629703e6ec66e47c2d1cd736a71691442723758323d76ce8e4429e2a46283a71300543009d4e54f9070bf38f226adc808406b3ba74e131f06fe6a40fd150fac6c127ec824898f309dc02cab982aad3f7ef8c39c766c1a7b4d61d3b8f417c62d56a6708da4356272cc5ff0d2747115619f581b81f28a4d0c58c667ae005bf14837c4d50d46615779a7a246afd028a5dc7e8fe1718ea91b1f64aad911160990da400ce34fd2c995336cd2b22195598165d575ecec4de9209d10fc8a04785524b253f712bc9265886aaa115ca51bfa580557b5f3b36493edeaa2deccac4129e99afd7f107167157bcbaa4b2448080e59c769157d138fb24ab06310cf453697b758f4f54ebccaebb3d9135a59c7ba5cce7ab965dc3d317bfc8fa5539fe58b19219b9ab9ab221721f157bcca9391e94e55800f831ad8f21f67225db7557c07eba04a3dfb0380c66bc11b907d8e664c8d42cb1fa1ade0269dcb72a3523f48d2a527591fd492872dab25c1b6c8f1c03c76a82dc1d2c7ba6af3681f50a92d240428e1115ee88c782e115666aa520479853abfd24de80ab19f98c4ac0cc6b37ff427f592e8714bae172281e0495c0b0d8b64fda59258f5e28f33f458d70444eb98568efc0f0a2e137c3c22910bb52dbc6d4b591c724157a09b3da9a3ed0cbf451f028fb80773f0f6d5604ad28c9270f7124ff511d814fe974d5e52d00b4ef9db429ab9bd418c6ecda4c2d7ff8a4d585fc153a2fce5b6f39f692cd32de46c858982dfab1f7cd4cb9e2830c85020f0d0b9c543a883790dec4bba999157f4059cfe0fced61937f7394e3f5beb4f6508376555f54dbb9faa659cc1d16920f219d4e52dbc8b08fd0b5894fc904160c055e1cf399e3e3589719a1aadc16740cbb6af311488644f13a06f355c398b49aac148f9e25b289ed2de5e9e55a4e32c2d155ca798238918be91d579c7a0222aff40e0e78a2f6158b94450f5646232e574870d794ae618ca652b9ead33acd6369cdf8524ef90d2b13e6a06995c716034a23ae3c6fd4e3322bbe7ad54d4c95ed71e15b69d689d57a2dd4637c2690aa062a8afb851cd9bf73442e3d1631986649cde868a37c8ec4b096a458fc5c427456cd6900699605c354ad57d8e32f3e3218da406df21582e9867122bb0c3fefbc0819e44cd3b9792257a5f369e1eab41c2cbda6bc26ffe0f2621a1bbd2adb4a077441af78675165220f7e98af4cf9bf2c9086cb44ca45bc3b2f29f10262cfa317dfed75bbdb539e945df19684681645376a6a1c5dcb8e522595ed23f7abe27c4af949ff977a0520497ae8decd3372837a9787300db5841acc35e414eb098e410b93dec8be600c867fe2570599e17c22d278da1245465bf5c1dfc90dfd88f1b869ffa7299e57cb604a865099330ee8c01710b5e33e984fc26d9db32ea5fb45dd75fcacc174fc8f47b2d988f8874f8c02b89c6b79c6e7e725486639a59663f140aee890be2b02ed2cc7c0347236398f4ddac9db1ce9381f397ff10bbda4ce721533e54c25293731826c2d8c7fb118146cb8b99acef0febb79e41b4bf1c2466c7a3d0d36b608ab1e162e97e88a5b09c10fd0c9b6d1743951a6628475bcecb08f168857f5b6212a180a0c542c3a8f58273c538410b36d2c4af0fdb074f9669bb06346730e315f3839586680179d6c18aaffee412aa1dc813d35a5a665dc83e69379963a6fde1ecd86b64d7269b20854bc488a5b7dd9c7254288501f2794e807121c8b9bec05b8c554dbbcd4550ab105800651c1a6c6a7ca3e17d7b4e663de37f9308699718d04942bef0da55f87f8afc5f0b4c57df7c3dc6904814055dadfd1d58d8e85128459d278626558ea6af549189aac502e9da3d31e8a20655e8ec6f4616e08f3dc72beeb848d7f95a4913b3e4c3f86a2f37ccd26993ceef0c5b1a50df9524713eb5352584e6f4f59426580b54814c0d8293f7d24fc950d732f455e0ac89c9e5d5cb8f73ecd82045f7b932419dce400c099ebb62896c58e448ad1dbe6cb43459611e6845f5f78eb8e9701f18bcc2041d2a949dbe5ea0fa04480fc9d35bd1b86fb16cae5414e6a786ee492dc4b992238dbd448c24e1427f4fa241f9b9a0e4df5de434af251f5418d07ce124604dd9ac6062807e2178affbef5dbadb8f9eca558f3ec7392dea3d903fbce6b28bac24c7de66fbda16fb60d52557a7c12a995cde8c36c19851177e983d1a1d9413195d1cc569721e88ed22b55a9d5d32465b84fa630543fffa90ceb4a8ab08c06cbf87508e15d43bb6cdc44da6b5daa3ced0395e03a85bdc8b466b23407f0fbab9769ae1dbb1339e8b062b31ee5aa654a049d949f54e907db1d3972194e177f9e83045aeeb182c11b3389cc280600e24536d3c49d14cdd785e578852ab2f080e0180f279d29528b89dba2a0035e23d6163db82ed80e6dd7a0d624024adc1d34a2803a7ef832bf483c90f811c8251e8c95be5409bc1df140708dc299c3401bfffc937c6446c10489d69e933958f36cbce1874198a600a86099e9663e91bee1bf8afd914567903cfcdd5d1d427108fa591c78fdbae16b2c79940fc5fcd8e7e8ccad72b86bc2228db2ebd48e2ab8d57a5ddbc27a1b5d63a6c21d7c455b2ece1bf2d8fa24636efc52dee54d15ed6bac6781ea8623fa7183288eb4e47c3663282022642406ec0a2ffc3f3be717c5510a02a989c9b3d387df21efc648461a472d77ccd9d8f2796f197a9ee58a0e5b84a2566a92ed3b20a8b5d21b1de47a061cbf5596f3e0a4e0049eab6532e0b5227466930c1290350c1f082e1fe9e91e96a5e8178dd1a79f84d105412bd13d009f24584828d49c99fac1472693b47b09fd24c94ff388eb4244c9657259e770baa9714a7fa7a26842b7d9f078eeb428a0824ab07edc1ae3a471350f7f13b6ec8720086155f68df9074eb49edb2eb8137e8dcfc265d9118bd611ff40616a5fd37e8a5b4871ed42444198d0ddd8660a3a0b712bacd7ff074827128359f2ba6f2e61a622583a914416b6454cec558d303356d6dc60d305dc88ce7ad5501bd5d95d86d7d815df8ef7ff02ee85bbd54c179f7bb0930b678f268d3335e909de870bee5e92ffa2740b0b0776b0b945a17895ea3753c16f1116a60fe942e8dcc209c0cd7cb8fd3cc60000105c231d944c63a51955d0d1a466e509fb2a3f0e579ddd11ef1e6453c4581d292e6d3c6bca65bd0af2b2f3e24e35827b503c616dd17c53c5a096cd3483265ef3eb27f0b4e5d587b6a14146621843c2712b35fa8671df881be8ba74f1d0a5eaabe01ca36e0b404196bfd7c657108f0a43dfb885004c7aa0a6db829f3f648c8b189c6de5f66eccb896974fecd289890d81de264efebd71a595100464278cc0828fb73470d6393f50f99aefc70610e6e5ccae4fe3880f1947adc5bbd2b064d18f8945efb18e490e95a4eb0e370fb6716a2745e6517325031bcb073fc073391bcc61e14b36a8b94f1ef05a8696e2770b411f51598c4b7f821374f9e2cb16f47333af8e03fbaa421fd386987236ce55a06e54073234b98979b8a396a3d193102edcab3eeb70f25eed4c063deaa1005f6d60f8d60e34cd3ab9d6ca2f1f5d224e4d8d3057de522b67f3c0b1c01945e3958388c8514a90558a65fdaf4c791529ca525df8785b1633b4ad43e724153672c31c2f7a5d9d67b67a008350693b62e8c75da5c0f16d0accfaf9643e4e6a889abb44ec9885e9c96104a696e6105a728727ca25c1a5641e7bcbd5cf4f7614e7d49c0282984212770cb124835eb5a45c0e30c9961b08916b16533b19f317a61084c4a2d09ce25d9cd12f38f3c2986acb4336773845e6ff2f3e49ef857f97c05b406da283001b90079375e62e746435611fdc8fe79a48f78f3e2b3edcda41f77fb36aa0b437a0ec9c434df592b9f91519a05326406760ae93d54d82191bf4e2f2c0ccb8ecd2a38670b52815c95106c31a9a0093c6b67a5c69d253694ed5f334bd4ad0f87065199e294643cdfe5abbb7d0995d143cf79b94cf2fb213ef0a67d850de8f1917bbf7d040501b14f7dcb209cb8fa7f96134a4e3c1b9de5acf4e3637c42e7630b7e1c14cecbb3d13bc050289088b7995420adc31cb98025b50152e3e2cd4d41031e7bb8f3bb1a7cc569266e3f2ddaeabd4017ac4525652387132ff4556b813b93bfcbf4e56cacb1b2fcd33a52857c0f831491cdf5679c9aac5efb1792433a2fb14ed32b794f79e928f23945622983afb8298c8a6a4ff4c6be548da7dca23a43bcb0ae9b3434e4558bf5f57482f6ad66be7a8206a5522aa5131a579fca15fa3faa9cb1fda57416c48373af61c1c092aa145e3db8b3917fc4fcda4440eca5aa7c5e07adcaca30550a019ff76cdeb2cdac022cbe1e197dc37dd50c31791af13d974727f329a54b32799df2e387926df52d41cb08d4b0ae44576666731a1cc7efe3d5591e2be7a7553b1d77ab897007f0436f07294eb502ce41cb31f2d85a1aaa7050cad3e169d5ee1364ab76a54355da1b893a16335c5d90ece1e9e1ce1657ff8eebeca5e8ba9a50ee1f256dac93b7fab2310be498b74cdf7a7b1b9f7dafc2a3716ba93d190ef7e7e5f0af8927129e2d151ff98c1edc4ad4a9db96a6a379a9f09d97c4ad9713a948a639a8971dc77d1c6f3495770d9f82bb3166faaa8aea6f38b64ff40cc795311a4a83c67aafbc688c1e0a792d96d6007f79cab77fb3a1512341b589aaf318bad5226f260bb1b0056c468263c11b0482e233f5b97ba68cce48dc0fb79714fd833dd1579a93e8a4178086f04cd8f311e01bb2ec024c0a93311660e587d9a8460ba95e32368148f60f7e82777f495e5476cb47db70faafa060373028440de9ce04cf6306aebff7564d62d6bfbf6b2d9fb688a2777a509919109d453193dc068a8419fd6dc66a012cae495447bd6f2783f711b3177c949513a71caa90728743a178fc8a352f0eaf92d68021bdc2a8330a2857a0fd52ccb0b90a615a539ae4e66a984026fef45177f32e124b6255c2c2ad7235b05a8e1bb4596ff5b81fc5f8ad21c40842dace666aa87adb9d7f85bcc4b5f0b80df8e84cb036356aa97220b9b2f1d17b6da217573bb94ad0b5eeba2d223121375a4e78dd7450fb9b936da77fce36852e302238842497a19c967d5a10de5a0dec9d7391103a4c8bbcf88301b47e5696575c26bc73f603b6523356e97c6f4c7bc34a2b54dbeb9d58f34ac340af33e1a3bc45c75bc8eb3a5cce733e6c3a9b0ff91d8b4f9c398c7d8a800638f7c1e1f4575652bcecfedbf0c3ffbc92d7d83f4dba0305833742fa0d622dbb2f3db708de97f2f8f06b6dbe53f1f8d1a811fb0a4c5b422ef7effefb39429db4f9f3e7cb0cb1319d3a18c60f9bc2a11a1d56cae10fda38d2ce350152d74aa7d99db4a0690e368bcb8a6790a6958ab73599aebd0c145d6d209dc2bcf513bbf178f89770cd3fce43ebf57659934499b0dcbedde9738c127dc3e8cab3119ca46f92a24f17d33a7e8379de5d70391676388271306468939533f9ee4bc884a98dcf2d75a4781565d8caea30954001f092a7d08a500c99290a944e7c00b32ae58d056f90f0e08e0f39f1462d3d6a51b3fd00876a776403fb711c37f968fab0e709fa4e8774e99c037df7a91648f8ce55cd67801ea532205f5c77a6b641027e0cd5b43746317f3413c3b6127b1c21cc2e9dad8f9d0b313d41c9be131eecb1414c14fcbeded84c07fdf7fbb61162a2fe07fe89002ed80424a8c621f3526e9b0fe314fe8eceb2bd9468ee3498c3e012c3a009f6ce492abd350a2676c475b2794d7a0c6ff54f52483d3161df380e508aff11f7f27dc18f176d985eec65dfbcfe4bbdec6fdbc9ece0c539db146b0e95fc18043265ab693bd6a17f69fb7ad96154f8b10aa4de9da700551f6860a40c99884b7ee036457fad9be6cf16a7737519a00f619cd0a20ce266d9b0b49ba0f26573b086cdc8babe9e26cd906cdb4b935a3b86108069d039477f0f14830cfb5bcf51336361b7f3cec1a154ad99f982f03a78d78eb17b03bcdb947c4993eabfb99da8c055d155c5c222b150b24a7f4984a4d323f791e615d6b676239396f2080f6bb05b17e55ec589b91caecaf842bf7f731a30be8554040e8de846cf7ac91068f5cc54c9441ba47bb024c1412a8b2fc4fd399b463aa30450359eb07abec9f2d001bc3d9771fdffc4020bc575093267b8746241286af7ccddf4d6a9b6fb596dc56a19cae053c100fb54e0e6cd9005daa5e0bf63d40a03bee43ef36028510b7bcae5e8c261f20c83ba7f13817d59d7bc241785dc69befb504dbc072db581d6c36e12d373533039c1b1b1b93a3a26423a13e3d3f6dbdda6674c8574927a88a4ca8122aa9ac6ce79a720524a5ab601af9e8c63ef2d4c8db6fa93444c299c4d66f6aa2cba3256a27ee2879cfc57d02690cbd456ff8055d121b0e7156a99fb26ef01a21abca946291b1ed043f2f9dc6d3aabe0dd060802a7cd40865bab4afd6aa54e8b69fb1d2eb023251b343df777a3dc13581bd3cc3c4c17e363b1af9a4508432dd3a010633acac5f0c9e4452977b5f437290b4cb219b50b7937e8dea7235ca1f4a0e43bc2290756b408bc4eb13f2c92b4f588eaccc3ba4de31b016ee5f4ea829ddf9cdb077d7813fbe1afeb7ab37903aae0f5c45a160d359ab8bc7888fd426f08dd56d4efce8321ee097198af420044b9a51b004151796ab966f00feaca6e2d3a871f135558fb1e586e19b9da586d714170c3813a9bccdf179baac59a9dfeed61d3503971300988dff99de3d5b3af6082c6eae70a0c7a45889bd45088d1ad46a3ba005e780725d64ddfb10ec18c7146d14210fe311bfa6e2b961e32fe8645807ec070de9d2345d984dc358298652643c1fce48bd5239ffd256bf4388c99e32569ca1f2785f78ae87f0ded0ccbc1817b3b30d5bd94f76ab6d1456a6a1b6552b658f2045b7806275641878974c19c99572a8b24f4809d8135d2d700b2be0839b74bba6e1b2d1909542db903d441e8a27485ec2f524c6609c1feb67ccdb493d013c71f4b04b4958bc37b2f3fcc4797082e713286059c4b572f92c70964d135d761340482ca18ad1776681e87ce8f1b3ca013032dc64521d16791547ee948a4efea0e5431ca1218e4824466a72c664635b36a6c370107e848615d73b56205be6473b95875c03896eddfebeff267def5b26e6969949f0c9bc05944cdf9d71f38e4eaed5ffb8095c7b211bff1ed36cc597e217bd101381c947d6faaa4a2f58ac8364d0e5267650a2e8e5fedf8112f5f16a67e1378264223b837bb065e1c49c6f4dbd956d53193293d89cfb7cd55ba4620a64c66f2fb17588b553f7f8355c98d94a56eb5fedfbc1a3e6859309deed181acd00140fcf3f6c0bb8abd354a355c9a344f152a6f4d243772131c22583d3f476a89cd7a6c23ecc6317dfa3f32f226bee27952fca6442ad32a319cb6dfdb218d6f11f82e3b87c9707d4a230161b0ff79f67cc3e048d4fe518783835a314e745d95f5764579b54bc20a896a6feef08493d7bf6bb1929d37b926ca410c54f587cf23b6703f86e3b8b6bfbed26e39b893658b42215fe8c9fb0f19689355cfe1ee1176301439a7b373e0c00b45b42af9e55aa057284c0e93fae8e8f1bb82f8ffd272577491147a95d12da00ba0851d5d3f79af510561f11158e17b68fb11346e56babb59a623a8ccff4dc81400eef9e11a91e59e3646c1349807ee5a152ad56d1614fa61c8d1d0bb35db2bf9b5c684bf812e214963cf341b7bb68819ab63f863346d01c7d7707f0ed0f6a1d032f6c65d256554552a25203bc70dbce793883667be2a447c3ddd2deb38cc57b76de8aef69c2b26691d0d2ebd71c3c1667658e1bbb7fcac5ec180ac9a5ed84e6b68666169c30ea8b4007a3aaa324cd7e9a5efc43e15c4ba632423434c9bdac9f17518e50b696ebc5848edffdae1224d860b5fc7262e604cb80c031dd3eb2d03171b3aa2b761a22ab12fb44263b63b67c227050a4ef965e1592e743551cebfe354e4b64a0ea512fc83396617cf9ce681cfe668aff2bf96afa4c7570c01f561283f168ad642aa7986baf459bde1b3be44a41ddb444377492519e95ec199985d70f2a881f87d52da10ac0c641ce88f928bc34f34a0798c68e9126b5e01e5b7578a4b5bfe6e2dece5741f00b1f1d34a5e8ac740a45ac43e4296e512f4c0b7cc21f8ce1e172f4ec992610bd46c8f87af0a06a6d55772e91870726875af61605ffbab24292659eca6ab403a73d750024cdf14b2bfea83ad70dc4e5a9403fc7299bf4f50d7b90f8cc3f8fd31a41e43098a68d72679709dedc2a709289d577dc8b272f96d15412b07fd38f324cf59dde8ba2aef96207fd131d373e291512736d19befe336c9f466444cee90dc37b33e4ec0c5c57865be7ac7ee080560beccbf8f7dc79773451b7f288a48ecbaadd912c7fb63df90e4354225b1a2629948e8bcda8b187569a611991d9988292b8019b99f8be38c8efe1c0c6e567bd2d491b73d1911363953663b45de43f488d8009b83b646fd6db4069e9570b195e284094a1dd13a0939799b17aafcc6ec1771f27ef84eef673a341a81895e3cd0e5719f9c02cb57a67ee54a83c20f81da384cc95c65996c9fef8c16f4a5fc206d8d31437b3a0bf0567dbef0ef310124fc710ae098d6394ee21215f86fd5a672a105946308e8aac32f72e21e5ff4b901c1957c01448c2aeb154b7eca4101b935419d6950fd35faa96ac32a1dcacd7724273efafb17da4a13951732d411f68868a0382b1d88e08d6dc0af641c6c5378800888bcdcd828698a9e57442ed6a3d66493dfa0ca198b61d4ea6ab716ff6002099424981453f66416045f86df3d7f6994e98ba384479344f37e99f4e6172ffdaa4d82448b4fd935b530f499cc6cd68af512feb053a00ac545e51f1af4ecbeb773387fccd6751397020acd1b197d8dc2ce76ab0c1e6aab1523d0ef3451f774407d85bb7a4fcc37be2d5ec1933cc5fae9ad2db238bcf500bee07381986fb1c4defa21b9f50dca48d4afe4ed5bc105398692550666d08f51ff627d6136a13e373fc287372a181c6779c0f50c202ddb40a75019f667f92523d9fe67c3e72ed8f1c7c44bf0e3110d753fca82c4cffbb80193c9875ea154146ba505437c0b8ca0a968dc1872818ed04197516b0a17f7bd9e250c476b8840a5a828db2c2433c651de0f55078bbfc0dedfce84d0cf9455c38f5551c5b8a498aac4c81ad42214233c1fb4060040bf4b17bb9535c25a1492ab7e594f9bba2e14d1aeb8834fb877e5f4ff3bfc1a89d092fa5aa9dd7de1615acbf4b0acaa81959ec88c574d9bb2525b27c3f678603861f5756cee7d15c00432c083335f8ad43f82ce860f54696f24bb04289bfb08d7f2b78be43de5d4c9f738fd5b02670f42d61701a17ed0e0c776f13a303b543168ff10b68a4e0a7cce87e589c7d9dde516867a2844b81b93691c636a4e997a8a2b70f1d0328330f3fbd65d09cdd27c5087de854f01d9d66e8ce2ee82ece4477b128beed01ea081d0747a75fc0ba6cca4230df8ce7c5c4b73a8065893b7cf12af706ea29c7797cc0c50fd07bb4a589be46ab92f47ac8689f141e3726f492c19aa92b5eb3c53b7e0d6707f2b39ebc396d28eaeec51a3360ca9014a529ff008c3c95e1d0c413810b22be9f4dfe7c8849eecb91deb13424819a54d85d95c9878b9f4d9ae410eca17d0fd4a33e9eea56ac1d00ee32bdaff1f4f736a128c242fc74d451e519504d99cceeb3a2ad75c32ee73ecae6e712db3d9390df6d9b80d78a58dbe841729da6f5b985d77a22e08e3162744c218b72af6458e7145af6e84d0e7c54b354c20e42c1c2043a00fab7c362f2cf60561ba08510f62d39d6ffab041f9889ab8dcaa7a456cdfbccad02e1e4591ca343c5ee5574e64c4c01212639e8ee341dd7826cf2af186dbc0035b5a4b7e9a3a301d6e63d805de35f823fe9f572cc5a35a2b8fa2d7822b6eb92dd8218c09fcee9777493a580bceeed25a98b1f987fbd5fa898987aa509b0020d180e90182e90233446c8ae13ea5241928542b2355d776ab0a56293a0de4d5832e1128e1680319c47b7304a28dacb7f0b41df642ee36e7041273d5bc0ff8c48fe041cccac18ad439ededf27fda202c4ce6b434b22bd7a4240b1c8a4819224df29f70f6eb55f460609569a7ed3c0b88e130492028d62b927eb1b4ade35123a00eac54e8d7f7a512a3c1ef7e8369c3a961da8d887c1f30e6cea5713dfc1dd922ca9f48a882a080575ce7f1ec30f63b2bca0acc542202dd483f131dc1eea6527c1389e8f0aa766414312ee5bd2c23329c25c142ff90f966f79ff732d2ac7fdb9c1673e876ceaaef02d0b2198d24ecb112fc0b7672a59945090238fb632b91dcfe76ae0a76de2ef5740a03a2ec9b6602df17ca5175bc362e245e91aaf88ff346f859f0db8ca77387c65753c02c01f345e1af86407f1c9c6c72f3aa7e4266b4db0cfcc5c4a529e119c566cefd5d94f1821e49b3401bc567275401e0c70ebbc7bfd054bed64b79ce048cee26b98018bd71510a1ba9bdf661ffe03a9317a73625c6ba1015d5843de113a2615a9b5047a667e83f1ec5a5913124185a95e3953ab381eab40012669e3a4855b6dc7a24be06d7f4adb9cc7b71b0d4c8553673a3d995d0e318ea21e793a7a609a4ccd87b0ba2b5baf81aa2fd6f28a6c164bcc7cf2680333b5d56b26b08eb0777ac77b34c22075e35c5677a5d6fc30b162352eb6438163042028d5d36de7de46608bc4da4f7e760917064659112c6c027e5f827b019160e4b80a665ed8bb7e0090d8e3d884e861a2b0a89cfa6092bc9eaae45c00e0aed229f1981834aba8875d76bfaacd2af8b33a7ee27f18c01890b4b5f63c481209eb6b3c5238cfd59f2729e5e285dbf331eda227b19787983173faae82dab8601ddae037339a8c47c9629b459c26f1099a7c583bd5ace2a2ed6a51811c91361915cd12d8fdaa9d5ed36282c68dd4879a06e22c57a68d17ff3dc85ffcc5d66c02d0e4fd0d2953244415a3a9fe1d06ff9a7042d941f05850667c86a931eb273482a577cd17229e05fc117f762ea5ada8baecdc124c2fbec038ac6e81c10cccd3bac1483d8e9ad2349e584e958779cb25827531314dc7f8fa24b3787b91cdc613c94d713a133c1cfaf5db85766a553241073a3dcb7a5f94e13929c6936e414d074d3bdfb27cec4c77c36de470831b2763d4b901cdcd5b35e20b323e5acc59728330cb9c3482c12e115d1635241beb17f38366af643a4f8f96d4a047680cbdcbefc01af5080de31191c979ca3d23e3fd709b573666513d2f5ed61b5c30bea176ef0b61643fc085737f78d2efdf7d83a0bda4cdd9c9c1a0b535d14481c4897cebe2527bad1602cec3d63c2ab98a37bb1a97a0e8e5a2eac490f04d1ad087669f07e43f47dccf6a78530b359c6c38d2b5157c0c49cb5b6251dc3d227ff14c8f6c2b4252202aded1ac9bc62f9c073644102aa5217be99489ea8c2d9cf783ca5d902987e32db743e0479c6e27e824996f4193f3b8e66bcee8e0e0078f85fa53c2843db3bb2137c89a4a4115cb111c00101dac51f7d3eadef7f00e230271910734afee2cb1661a7e078348a19039d5a6b52c409ff20884e9edd764cf686c13a8095ef3beaf8e8d6c40ab9f19653360058bdb3a0c1435fa2bded7d1e12c2aa302cfac08f1c12d9630d7aaf870cb5767ce22cf1d398d04f49b64d83ead621bc66be444c8f0daeb1f64fbdd7dc4fb2452b0de34ffc5400fe49a31eee5729a3b39d24af387150fcefd1cc96715b61eb87e757ef9a0be8e0a82db801105c6ae4606b467a8a1cd8b76c18f8293d3bfefcc7e1dd0c26b3faaf032da0820d4d4e55b5663ed8e090204a57ee3ba961f9d68254a1d0da3b3a4063dbc0b71cb7d19d9e21d29b7fe22c578b34d06239dcae501b6e4186fc387f010455f06e4ce2410f03669fcade8c6494d9ec0e4ee9120131ec3e02c3298dde24b568ecfcfc739eb9fb97ee501d8a38746a8cb1f5c3e91746eae1627f7c64cb3d5407b9d32c27604493cd90e899e4ed0f40fae7b39f7b6d0df29476a4913ce19e04bfd5bf59882caf9f3830feee9f198ce491dca785815fad101814ca6f0cf15b0aa11a9b4af4a0b3bf300bcb788c18d69f84d02d3ec3c29c17b1e002b282fe707d9a5cb3a162223da0854adad75eac004e72d9a93e47ed86c731e78c10bfe11ad636e574fde812ecc2fd124cd1d418dc30262eeafe65cd7c395c5c8167a8cf7b910cc48da72611c23c6e607f8d94af410d018c8efce6914f655d4792f36416c937a75ed1c54e7dd76afc4fe39e01df2e4e1902a831f18f44629f452dd88e33c975df05bc35c120992f77ff4de511fa48cd995535aca75a4b2b218f9d874e01d75459d683672e49167ac03b77aaa693350f0209746e62772d5bb528e47919533fdbbec4d6dbbcca02df9b642a9dbb024713417d8d152b6ccde6f93209eb98cb79ca7ceeac0315f517647c1bf20655f551be2dae90f2dbe3940809c177c6232502a20532890b4f22dcc9b7dc03c74e045e76c411192206b733602eed003a243d74c569c4ef3be348a3a285da162a8f329a8613d582b8aedc73550f052dbf11d1a3ba5e307e254cac7ecd56736c6ac60fa8dcd913d1bda43493991015729bc0520dee2c1b4a5b40f6fa12ca9a9b3767f0239df2be23af5a6e68b557fded9414617302d7985382fe6b6967e9096472ed00157e72a236c34adea19fe21496c7160a25277fb375c3feb587c6ae6fa0a5be79ed9755ba994c4019fc238f6326e18f8035a0f44b564722bcd6c7a1735639b404d9d245cda9de37d70c30b8d9c31952b3b2dcb395de0f47df940fb34094c715b25a84212b87fc0c8e4d5254940c77e0995c2f6caeddd518176de72a8f3fd3b6a736ca65dfee67af744e7833ad270b01c69876d12830dc8165053954331692a28df01732ce7ef680b9169ff9657faabb56d62cf7d96c684928633c1605e2bdfd865c1f24eef32698be0da70565408d936a35b5519f279d736e38b3ef4361acf54a1fbf59c57c1340724a5f4f475fa70423838758ca14b84d0d37eacca69ad32e54f818c6cc9315b233fdb88a9805b9697035ab3043217a43e1dfc9026ce3ccd8d92f4cfafd9dc795d74d0bbb2b7307fbe182749f4cf0168d2884391584e1ddb7e1ddaf652dc114f5ec0616a61487607ee4ea4af09b5a3b9ac3f7d35f500542071f9b92d9e2908298efd4b8fafeceffd0fc61be196437a68eb74143aa5179ded283481715439bd32e68018f1f784e1d196be080187c25c472008a6ffa2a83256b8745c304077aaa0085e18e1df5f473a2ec78ddee16e3f608bf0b98b9d54bcb884dc11381343e6cf4d329f2728a58edd5cb6b609eb207d5a56ad77fecebdf55528a88f011426a43dcedad6ab5ffe59a373113c696e603d690e74d7412271c2c08ff024ffaa4b84ab420159605612f6efe2c10852b7411fd819758af215cd37473a6d74d96e7478b09a8b2c411c7c4d3f0051800f915f28b9d0464503d444d19461b050e5e2abb297639abac5c4631ed93bea18a9bc451638cfbf2a04c9f93157ab37055f9a9786befa589dfa29809cce50f4fe011750e936aa585c6ce610ec4f977fe73c938fef1aa7d0dc9e2c7cac1e7b5209e47159b256f5c47430e0bb0f71471f1398908b85f89f8b48e3517a43e86a5c2af935fcaa4e8709ad511a6b6837b888379dc4457c24f56bbd06b08ec44ca182472e50ab4887ea6703995e3bbc9850a73c4b2f77c3f4ec7ea7a37814f1d5e35a70f76e6c5183fdd66358a4204ce936b54ad8d3c8998d3e4dd680a1fc13b69fc44afdfeba57a91290f417b7e29058867738649f9612846a52e48664633f8798b7f9f4f5af94cae037d0dc7c3e9865d2a4b31374fdc6022d3167dd56420cf95fff3d0372f48ba2771df95d7a4383f4e9d38595a33f459ad700ccea280797122dd54372eb191ecf92b5fbbd29828c45fa15d7ecb5fb3b4f965bad706540f1373044381be3a2ce4cfdd8150bc53b6a3602036cf021ecc734bca19bd28b202b848592d9d37137a1cdbc47d26888029497bd7a216e1578c9c88aa7fc87f6ef58cd6be3926705a3b01df2b0ec1b9ae6b342dc40547630ed6a6529a845d666ba7901b291cf4bdb280eb6988a2d739189b0cd24f902803c90cdffbaa0da4253abad87b6537e50914f62680707a9d6304afdbb16a7f0cc785d1dad47e95b297bfc442990c7ec5e0a02df45445643f4e3dc5bdd2973cc74265b5dedf12ae9eeb9102b0ecd119eb5630e090ce66c29e7a79b4896653ff171918aa8f0c08fe6868bd4af085e7ae6448527988136239935ea657ab24467f64f6b212c7b936057b912a5086697479472eaec1af81853ee97a429466dfcf709badccfff31e10d9a2c37e49031a8c34180815704eb5d2544f0fbdf5475bf8d765d9ecc783f368d16ccfbe11d93d6101054450f10dcef67c5616d5deee1ba2e155a44c6cefa0b784a203b968c30127bd224f557b020630eb0bd228f69d8e98ffecb16324aeddc1155aac562d93654a7f0b29c71e5e1465141f5271a17975eac77d1aa395ce610098f20f405c4c9110a2ac2c63eddfd7cd06b00458e3a9bc8c2ced4dbfeb93a69db79400bfa0d72494c2ae5fb80bd92979e6dce1eeb96120bc5c92a094c06aa38025877f91c670403e68bb1287a0310c8df0a38f8c2ee9f4617aacc22c5899ad7b9bfc6ddc2cd64fe6d970df795c9f3940637384f76e045f0849139ffb010dede097b12afb6f704190dc0d85c0186f6d98c371f8ff9d116659bff119eb3052abd3920cda01e746a32c6c4e542c42e45f45d55b35781642d62b5ce5282feb45721aba890340651f59b9acd80d62c8381de29a6b6914098dabc361e411ac1721b17e27418d945ad75ea210545e30d3637e9787e04c58c23c3a4bf8cbf63d154e1d4ebc319dcf1d3c459181f7cf3f75781321cee594599eee86c943e915039b4ea21e4cce3a3f3a4c08cace16f985f31764aa399e6d8cae7463ed46b7d82fdaf10a3a9d8ed5f4bd7234e10b28d03d6605b98168b85d5a1a9b78967448bc7b2718b63638eabfb19984bcdcd2b0b8abceef6814a75c0265ce8814af2ca64d77ea5b9c46cd5d489a5c1a0685aa6c7d7b2abfb4e85c5cc1eb8a54fc8584dcf08e87c1fa4fcb86b34b543d65636fba1f695c4a9543bac0583ac6eb3030622fc360e5307f475efdb404006acc43f53e299770ffdec4980da63ce5cbdbf3b558a5c3859e1751a330e8c1186aa328ae38f408b740844557ab4a15c6891cd76d5bc31e3512efae322be1fe38d2b0c4498b36504209400b4c6702279df916b4596e02fd03fb9bd07ad1ee611b01341f7b23f8f9810ff875cf05e6d55b2e5e5ef9e8d154a6c4fb29aa34fec2d356de523614d7a235e0216ff31b45b41aaf2e3797b8702d675a5c3bf4296e36bd8bd14532887744ea6daf333c404d08cc47a20f36a355be3f825000b7e543a4e3221810fa9bd0862c52b30834d7b9c6e84d711f272273ac4b8d126adc7491bb95b2920c46ac4134f49c472dcb27048fa6ad02e97210b223d4d2c3478b99bf2575d67c3baf334a2eb4efbd59d82ec20023569c61d8bfe8f6f05196c25b93236bc55605edfce657879856136aa4fb89b9b68729da9e5c797cafd20bb4fbac513fd374400f45c2ef6e1a9cfcd4a70edf843bbb01316cb376ffc1d88bd1f825ada9c9c9167e57d9881d73be210377fcf809b3e7700d3304a068d04edd8e12b56d372bb95b04edbd3958a080961827bc264e7b234bc7a4e3e9357b7dd8a405897d0e9ef78fb6751f7af78f2cdc6c02cc6ac2a736fa7cb06d3ac3b4d0050f2cef1eb0c51bdaa57dbeec0a62596800d59ab69965830851402179a42fd648c5ffbd165419cf34ba80cba2042328a89717def50751520f6219a39cb43555c6692bce29a2cbd726d1955e9ba841910d62d403d4196c37d4faf4565a81615278504a203e2690bcf5f705d82a0b828c8a8036885446cbc266862082262004c0f8059aedc19cc002eed127073de1b3a012feec2cda92d4dc16a41e59b05ec6adf7cc7bb6f963d93255cfe8a7b77bfdaaf98e9977c7b8b1c38bd2051ac225e3f820104a672d6166e7c3e2c432db2a80979a77892ffb7ea27eb2afd82e210dd7bc33708adbe953d03ac3355bcbf75604f7002c445780f3df27d036153a5fc388d8eeab3dc8b802a6c88b089d0ea424da170c842129521bdef9a88b6674b73bb1493cef517f687d3a239ac788921bfe530ea38a2e23ea77e1502d93b3ea5c5ccfd6c9c4464dd6d80755d9049feefc60133bdb347edb66b3586cb57fac32977c8846a96ea107f177c23c3d79398ae268e5e5dc11e5c753722b8bb7744500c2d7d09d8f8a11cf5696989a1e72668e697b81f093e2c440c200923d92c00cafd311ceee9b8fedb15955283434ba3686775ce2a7f7982cd04e5cedad4833112f2fa1ece87fe3a6416ee237064da93d3e5b9ec78a4164b669f765d5a6e1996db46194d936d912f95896ac5e2c6ac4088996600861cc0f3594b00d94aa7ff0a9efe63cfd8e3c5a4e1d6e5ff2359d14f95f10fc9063726f9e5ca25187b98029ddec082a08ababbc854eb6cb87ca6e7459a93b657fcf0be03b30e8cfc43c5c160c6be1f603390949789f6e4adb68e6f127d748049e1e367747f175ee8e2ba199a715cf1b19f1da2ae52468266cbae5658f2d39c4706ecf026bc12c8b4c65367f02d5516e73fe88e7f6e0f2a9ab2e3b0e288f7f5bb2acd3b2fca71327b27ca85a3f5574a90e1b063d98462eeea93988dc000fd0068339a2ca7cc190da5d7ce81685acc579ae2e07cdb61971d65a57381c0d747abe09977fc176b074f7afdb4590dda5a556876c5935628b2e3d6052dfaf3110e0e1fba1cd4c079ff589d4eb783de1c603495cf55998202e4579942a7dc4b0f0d7a142a92cde8b7e53ed9e96cb57056f167ae34876ede79f6941940c948dc2d9fd5d54a32f38278ff9446ffada761893f77834783af1b349b194cc73400ae950df63d23bf647d764043f14e913a0d9bfe48b657d4fbac682eb0bd6fb202e2e0f5bf001c4bc2a8a00859044097aef7ea7335759fe69e41ab4e343e17f1d67b220e8545ebd57e08c80e7a4dce25088f6ae59d37c5e21f2040ebdd3d86241fd4f4c360ded617f8f4b2c64bb6375ddf0bae5035a9a3906d9155fff6a3d4519ad9df7f1fd1b4ca15cbdd642fedc8d5dba91457e40c92621a2357026fbd8c1bb5f4ec22cf68480a68c14b2be90fde8e4569260aa762012f992028645f4d29d26d448ebfa4c612201fdf5a80c97362ccc3e6815d369ac042cf80e6df13c8e61f209e1dbd45ede8268b25c9f1f3c6599c2124c57106500f6d5a9f9afc0accc2212433b47a44dd66af27cbca1a4a9351cd00ca84bd27e9dea2c8e0b8f0d8a908aa0e57a2505f6cd5064e7220d77fdc4b64da53a3c2495e7af99f9b7299a14e420198026d6b86cfa25af0b2fff788412c9e78cba2dca72b310bad5851b5bb51960f43360bcaa23e08a094efb901f1e73224fbb0c0ed9505db38d2396e0902eb0ce2d30ebf96e7f7737e253d00bd7a2ca89d7a6d393937d5caaab913db23fb7aacf560f2c3693c3ad5c7ac9956b7915de57ec0f086d3a7a75a573cbadb4ddf33777bca354d5dcd75504d8c9bc57e8afdd82e4ccb3bcb79e443b1502ce033493de2cc4c565c8539cbbea104f6c6635c7d581b96b856d8ce91369669dc94321933352f277e2d52f8805cc55018a39b1d4bec9aec0578541f4898adb6883767ab2b699df12342d36c601f72e12f0d232550539dbeb08fb863b05d19704806fea5352802c3492e40c02e9ce50150b7469cd8e31c1fd8fa70091bc95f5a526526513597a2ad11970bf89f0dca6568ee3deb0b6383d58f2c7621a34f6fe6d6e397bb2806a3b360c999e82525fe8a38d6f642dfdaeffe68d14901750955061e022554f2c433b001b784bd4cefc50449c9508b8b6bb04c7a2af8f86cb4870c4deff43640943153d94e7d61dfb38b4b56b33efc502e6989c589864123ce51bc5b3a4b6696804cc653a719bfa33b95121a3b1f91a684b8c81df77eb2bd151485781d8a7f83bab410f9d90a55cbd2a99f9c5fbb4692d1c61eb3627c88a0eb5094ba644c7a6e99159a23b480de6b63f1b96893c7e3ef92fc6d94725b4bf3d7050e7deb479789777ac470e80a9937af304d06337ccf4d0fbffeb011063879d19976c8ed397b5886e318007fef2e844fb9987c8399d52eb2dd13249207dcf6ac4be16cc911c0bb0a7eadee48b3d9e3152e876e8910566078f77890413d6869245c82b5edd6695a7730cc16fc4d66aa22e0f100685b7f8a7407cdbfa6b3b898aa5cc05f3d9d113e800a993add43c43da008fd65d75976beca6985858c08aa6a7853e77c30ab15cb04b87e9815c40b8d49f1cbd3cea4385a759ae21c96313fb3529e678f5b46923a6be0a8600e5cae32dbfa04d88032286567c2ed2187bc80774d4a5adf7313ab07255e176c1cbe43114255e70e0d60abc574216f613f6be09330d4842a43f00a9f7678913a495f44c99b6ced5ee8cecf3bdd632b6f3ee37bfb5d558b38d3f2332943ad2338310cead4b339bb0599e2965ad283893fb8396d5c729736f7fca7abf21c6a39e45eeb314f20eb7eb1247028857b8004dee4804701b4dff93f997fb8d7580f15948b9c2d880e594e9d3b902c22ad7fb0473756d18494570f2751453dbef6b5c760dabf6c15e75a10a4e0a10813fe47020191997723362dd0538898185e79935978fbd8dd100ca6e938b0b6e831220962647be287738b0254e5927c846c5cd86eec3f7a14f70bfb38fa2c9eb5226961a2bd2c2bae289827180881035970787f604e70a2788ecb803c9ba60b54da7530feb03553ccc112056b1d61068db6b4ef91a267b4344696308e644ca0fca870d9d7be444adc8430a10a3f1d5cea53d203ba9f188b581905a82835c5eca6faf59bd730308ee62f96d521fcdf44c0bec98bf232358a776533e150d333314925daf3ea1e54d3fc768c540886ff6d12b9952a877050ecba457560a5e485bf8ab1a28c0a75ebd69608262ee0abe847c05a2b3287f02962036ca4f25893f89070cfd6c01ee2a301862228b6944b9a3d9a6359cb7382afc92cc22bee845209f5a8e96bd2fcdc28869fc30840eb65991419e856b73cebeedc7c1484bd72578969ca4eeac206d14f7513a212919c15411e633b393fcd8703befd8211814db5a908a47e9526b9f5bb844fc8633c6e17aca7106815a3d81fb4cab5810726d713f58560c3aed6ff7e96eb0e4139d1bd7c49fc0a9c677e92d200e69fb7aac53d5148e1a083c584d8883bbfd36eb5bbad0d1caf9a7beb5c1998838dfdd6721b13deaffcefd090a765862d068af8b375a131d640df8ba45c5707efc38b3253db5f36f318027bcfa38017e8d80871098879edc5aaeab4603552335652d53db4e72601f8dd156d05c526fc0a3026ac60cd68c9d5fb4ff9ba6f09820ede0960e76981a1d362f93f5ec94a2b3088e7672bd9691d15829b4795999877fa0dbac70c82a125f358bb13793cee47a1daa07914b391eddecfdfe047081673f6f9b37e854defb45d48de54ca8a69297bbe2791c30be0ad12060599ed00c676c7dd4d08b487ea6b36b54d640dae294c2740e2947c1adaf5e542576bf4bfdb5056f806dd99ab041d71918287a7707e528b7de2e2574b179c4e8f3cf7e348cded87cb861777fdcf64c4b4766e5feacff4d205adf02554e2f85cf104b72a71b7716801eb6223726c36ae983c7497b3141393f69dc49135edb237d3547965e216fc60fa03bf89b720ef09e0216b9f5ced6f3ff1e44c1204c68aa2dd5b4ceec1a38a9416e9d9312516879aa36ab4854bd06b1115695d2e709f2868a17b7a80974b819ab796ca47f898daaad7786d7918d3f0bb4a52bf999f810907de12aeb2801a3db0a63565d66c0e94dbefe74386dffc58178e3256bc3de7380ab92ae7d35d4b605c75e9cc55e96e8aea6cc6da0f5f68e63b3351ed38b2f917403712ba336ef09613e958bccbfd2942b43a367e95dedf50e20d23bae478ba19fe67683b21b6dbea4be8f307a5ae0e466118740d81f4abfd9cde7ee1d6788ce1a88fd1706265a837e78e2d87dc2d8a50be22d2fbd308dfbb0d2c710257b3d460584bd897defe835106365ca5dcfc1e8272a8b36c32e959feff9598224f8e82413b6baf39eb1a50578eda2d63d13e65988c075e21e467f72651500cacffb3de7b6007a64601a11dd6078b5f64ecf4320103dffb1d202cdc79661dfa2bd81109e6d2e2a58936e3e94f264f7e4c52ca4e612d1cb7b8f4d86edac7f027f8f94d12483df7304f5913e113effe1c5b5f7ad6b7b71be94da77695c78d1194cf79964f5eddb5a845bd18a2e9c8eb316bb878ac2cacaaedf530406fa1403110d1e46485b4f8d9ae8d3f649a6a7561936bc14dad43f1b9b70cdec939780562bfe4d48acaad586557e355d07ca9034930a635c514fab5c9f6ab8731384d39b02fa867eff5f36ac0c0df714538ded2c6e48b30a45b100939d6e414f390f7ebdfc3ae53d3638c9bae8f2b68e480bd9cc5312bd9e39250a24224ec9640ed3b4d8c935356ab95ae0785d665ddd9b71ba3e5de21a353b5436967ee5b804e50d457cf8a904609e0e4b360f977e5f066392667e588f2ecb084893893df1eccf5d62db0e474953e7f1f2f608508aad18f3ae155c11b24ed35a98e07903ceba47924fe7e721d7216277eb895379e9e595ce20f8bc010bf28c9f910838787c3bade76df18c1ed67463703384c8349eba67aed2dfc187939713938780e09951ec289306d525e574516a6e888ef60e0fcadab092876aa9f9e77c3fb01cbe6e3a67fc050297a9d743d7861dc6c28a6f5ff8c7b0e80fe34476484d81a65045180acd186b5a0be1df4995ec84d7d32ef43b5c8e1882d0507f65f1b5345b8ca2e35b67d13edb57be60d09d681a3ef5a857aff978d6a1254a32f338b61e729347aa2694bfd43507e6d9c048505a3d2ebb84f61dee26b848a9283c1e244639d86824e264cc5adce1071ad98ced49ab0103ab593cb24f0ddc5746b9bbe43d3e4994e22b5c2bf0a0c77cea6196571604b9089bb0d3bf1a2c833c0f3c8348d800e4abb83f022929a5e169d36bade1100bdb9e37c4571717224e5b59edb12b6abba07a664fdc772e871331b6d5e3e5c1e51738b993a2e5a7b2e9e882c51917cc8a4a6a8662f0269f27cbce7c57bbb6de28ae1f3af0179356cd409d8e1ff417c6e972b7cd1a7bed583f7bbaa255d5c9fca6d042ab0fd5d11d07c076583decf8cb80a462fa195d90e4d47c16cefde74407a1a7631c56338bd320511ccad66286f564df7dda927642d69c1bfe2c7359792d3149c56c40bc1d468633e26af5187298fc68a3792a6be97de097b2fcfdfea62fecbeec82c04f1fa3b93c595119d2949db6c913dbcb0eb21cfc1e32af5d4f5bada3b20cac5e25d324e5feae56e01e4c9c5399b41b72b4f7d5adba76c2b898d21872f181ca256bb640cb6bbf1c4792fcd228758b212906298bc0a6deb93db90faeac515839c62b64db51a5339cfa70dae64b834d1f24362a8e5e7402f736dfea73901a8422621496d19dc46392c99126382429def4cb65ceb8cfbd43f1c43c54a7c16e2c1779e51f0a82bc07207f6f71a4afe8e200199f09b293ecb0935cf4ae3671d4fb9079c4a385244c2cc5f23d1c67043bab5f46e5f580a7a674b862efb7c1033cf5ba7aa6f940665c27e04913c5a5dfb3709fadbf6ca91f39bf1ada0f37ef3e273872f971edbd1aa9d2d6ef8a7ce5dd2cd9a6550970e2b68f858f268c750583acb042df189094561151960ecf27eb2745387beca141c51eca02c9edf152f52f3284d8031474e9f33461e87cf975b9535f27ee304ad2e0ab91509b84dc7a1ca48f5cf145b5bd03510bb0862e1e0e328e76887f0f01a873c478ac2dc5105526f31ac7890e40334f25480648490b1878a6562c72b6c2242adea8f5fbadc5d35df9fa5abc4d36aa42434e412aa6e9abf1903d15e801d45034e2861eb48967cd646c35b0aa1bee1488b52e2014aa91cc070ce259897be0f4fea1d6c132353238a8976e74b572313e41802ada15a2b7772be1f27038775a8a1a9095f8739f2ea1051c8ac10da596bbee106b3833aa97a6f35fdcead3509dcfbe15b3f5608a6042067a007e33645c2c391feaf2216c23f771361430273a417a8bd0988c290b6eb3965621de6a5656f62c2a062a66ad87eafcd75fdc8f353049c92959facc4b948666fe05ac7281eb41296262f8fd8ed0c4f2936660f488ef160f5f30b7b5f5178bb0238115a3e7dea59484750e024ee00512d7ead9c16f8a1928a04d93483235da4cf120807e06e36d81d8d530f072ab84d770b189a95aefbbabc7f4d48032fbdc47a0d979120555f1bde1659ea4b51e8e87473471dba531e8000ac50982ae686ef2c533498b5c34f4db30cb6a0c00d9eef9584645c4bbd9ae999f330601be20c3de74951be1c4dd2a070dd1070ab6142d6dfd6c408aef0b7d04f175f57b91737f909b810d86ed6ec196753257f335c5b9136c0af7b92bdadd66500fcb960326109b70d3cf19d6badf78d00c69af033d2181b72e1a342bca4de128a9895b2f2d0c258c62d511f83caa22e14a0354910a48c9fefb0a378a67ae8b7108c1888a2eb3baddfc2a71dd22b1c748288c668011be47afdb55a6d08cedde5f061b35f963cdedfb39ea1c71f7e84e18c648b87050ea9b1db9ce44e6b932d349dbb565720dafe948455f6a5dfe8113401a79b368f7124c44f89530085c8a686c982a1885076736e57a60229a47b0b29b69285776e2fa03513f54d5ba8eea23e8dd14096abfe76e37f0b7464646827b465c12b2f802b87eeabc4d7250909436bf1280474eed0425bb8a9d4dd3f45a32194c178dbb66e7cae579c0fba0e32050870ee7c08bf1bab688f9887baf63aa2f9b74da59c2b775b7e7b97aea581b07e0ff9d9a4f78a7b87215fc6d19cd2f0a4f1e9f9654e12dac9ce30ec6ab4af99f0960ffde07722c245d99c966c029ae3b372d421e63fa7ad877de4e82947b3e49934d2156aef0e0302f449cafae7293951f2c6ebd6df002ccb4e20a620c89ed68ddb13167f03d96796aae669d23e88fa9f19b602b38256359551d960d6ff610c2a8507fee355f8c47d877beff61c856accd3530b3ea50ac91dc10b8ab05008b121fbdabf6d394ace047ff1693c6d7e9e7d4820f139720277daa4b0607db825a658ae7e93e5dd6bf771665324ec83454cc97ff61794693cf8f2158641230fd6a36e246e2201700b4b0541ac7f5d1d77b89d4b288dfc7b0232cc37c172f32f8da79d17d848563d70f2b45a827d2a2bf177742d96b0a51876c6fbb946f05e16d38257cfc57f7909ff0d68edf470ecd3ba34ab2139765372dadd5fd76662e841a92a079787fa3343f2e50bfb3ce1463fd2c870ed9dc3a2ac924917507975e862f85c22a36b5d473448c38448a2e9cafdfb8218360ee84d24e59352e060eea0c364bfff4fb1f2711eee8c75e040441616e88828723ed5d65da969b650f6d6592d65ca64daf4f90e138861751e364ed2a762085a37f1bdcd1e0f1061ac2df57b3d5eb067522a04f4309011a4d3e75e0c08f7ca49fa20716f3850bf1cf51e51225f01bc2bd05d9575efaa13ab9ff6d458fea825e550dbf4f7e170bc43900a82d8e18fdf790009d64afdff17c447e9c02c994b8e4344abb091b15e5c3fb18c2905cbba7accc766e4c15ebcbf9d4f8bd38cd508d5416cf38c2453890c8dc47d5210d9261d96d99d33415b2195788910f71516cf1d04b26e12750eef871c50a9db7a1676c17ef4e634262be9c45e7dd0ae18b68211816d0efecf02d977f7cf181f42699924efba3f8c9b9a2908749382694778d055fed6b5b4edd4e79dc52770226dc1e18b20f7458952fb464dc8d3b68d430c01260abf3b2ff5c3c4b6fa3c67ab41026390fd941a24d50d8f05a6789ca230d7dced4a10f0d064e44f36a889da63527568292f7ecf49649cab56a4b16550ab0070736045b6adc9eb785bfeb8809a407c7f22e5ce179495ddf640958c0a845bc62551a0a7b8cd1b0869e4e42a3854d4a6bcf894f5c8a8019ef695cf6b0f6f0690737a2c6a7f0b831310c7b67336696cb8ae228e817db860b161242ee9e702cb325ebb677d3b0c5e10fd74590c5b7503e13d4684047145bbc3bb2019136364782baae47b06f75f0a8e50a29e069d9cddc0a5e07586149fb6f778aadc72349935afba01509807195f16ed652396dbfcfd51100c95062091c8cc55064f950ee264f6801d564e6059238cbdefae056592eb821754ef7594e1b4fceddd6d665ef09946debc24e7038767a461f7021ac0234325d813873c083737effcd9fb63275f7f82ddf3779f62c59f96e8d6cca6bae5fab499ce75b79faead2de0b8f9bf85a208376fa61a4a4b416d53b056f68eea909c08d3dd7a4bb0b172c1ea514118822b0f716df24fb31adbf5cb96cc684c7d19598bcf5ca916cccd80a1bf033b6066aa567d27da290058464922b10844e076b52cc53e350ace64f982ad993e5a64d9a557302900aee3b92aaadb4806dce97278db46881773236165a9b111f14ba3908bf4cf8e2093cdf1faf6b9f2bf17fb76d9cc76202137b32e5f7d4e38d10ac7e141adb8f5d7b4bd721e2ac5514f820b96523ffbb4a952fb78ecae0ce0314d714742dfd932df551adb9495f06a49ab440e45a406259f0d9c8b9e74931b4168b93949638391b4b212a28ee8e67474beedef51bf7e227231f079f85116a5c3004238c393799eb906330ffe5ad3c7d33d55353b64aecb9ac7b51bd538758d427bbf5337987d42576171bcac766a1df04c026a099e0256a637f0e154405aaba818940e096516dbe76b3a972dcced02fe6bc4319ee295098c8bb4458f3310503601a3eea5f7968c9035b52148c9c615b3229b758bbbc946e301e798bbdd1f0d9b1e08f6abcdceae2165e3156d7d1709f3fd8af2c8c3d4c8c04eb697ce60fcbda771265b14bf4986106c98f3d582da69745aedf0c486abeedbe6e049776ce62761da208b18a53dc0ce8a4940d4e5262a54acc49840359846bde8c89538e5725aa9910fbee575ebf3dede223138634964e2ac91f34809559401af49fd21ddfd96c9ef5cf79d484c60170919d71a9ced1e83114c22d673038c40fa0993da45ce2227f6ae21fa1fef8b5ecb4c4e4867ba1d659bf6eac9006bce3637c179476c916d12c84ba3186dfbc0286c4fa4ea893b209af81fe11ca13b1a7f088337ebcd8556663bd3437dededcbb8c1c8080dd899252f1f22e5b22fa1cba63b1e23f41bed17d52d57d205e03aff9d0edb72821b33a4947bfb24a2d3b6338e8d74f5dc7188a3ee97eea1658afbcbfc6247993e4e9361ec1f387923be5e54861492e60f92c2b618be704407c260815da817195c8313db27fd902267cbca0fb07175363dda019de1f3a996a439c9293ecf4987ff6a26c09969d20ef3d75544fc716d870a885ab3fdebdb176d339c2f81609ddc9987a95e17422e225f5dad573b9a88985cd1e6e337593c7370c7c49070172e5f013ba5a4ca9565f09386900cd6eeecb0c1c55bcfe7ec38a0cd1e317d9f28391be361259c09c98065990ba17f5089eb3368f80d21af475eda7edd33eaa708d0956ef1cbc67cf820c36cf556a3a24d415e261e15dd5377bf785bced1467faeaee6f0d75d7856813d08663eefda794ffaab1baeac90549684a4d37f6dbf2fec1ef97927083cec01c275113531bae145f80e9ab7b8c2f2cd75afb100f3705442e8635c60ee69a6f3f92189b33c300be4c9081725fd892cf6bbb4a1fa0e423ef7d433f2e58ec0e5e19cc5dc0c47aabfec716466fb38425e989cfcbafa4d09dc4ec70dc93176e4d81ab6efbe81ab0c4f040ff0f2d820608363fd38858884bdbaeff7db86967025c7e37db0101394b33168a5045eb888437be094e26c8e195f48051cb2722ef1b06a94af54727dec5cb7bed4034fcab0b75139ceffd55aca03de90af16f0f9382ae860c9dce8735ec0ea55bc8eede61453fd8c583ef66373f579a42354334efa00d72dd160d45cc85687afff68c58c81f01a62f94b9fa7a6ddf91f28d64048fe9c6a5ded52274f48328259f79786a4472baa622db08a62abb6f3e5ad06ee6ef5da34762d0b9f9e5936a595738e3b258494652562c836b736dd8e88c043c6ba4c9072b438546855204c4ee8fc281ef77a6d09720e43ac42f71c9b72e38eb103064c1fc288d7e59b8da87f8bb16b11389e72bbc10d5bab5f91930728d669b72af3a90f81bb0fdf3745f99ed9689a48adf39ce64124abf72cb9fdf503188a649bb983640f12f462ae64020689ed2ee47264f7b1de358d6dfa8460bfe2061ed07a800881f4f2aae65ea7f8a5bd8133e4b170209865e7ae00c2833173411c2b33877f9bb587694e7a6a7b1575dc29cca144381cda6b8600fcaa8c93b51170af2a1cb82cc2be3f57dffa1f4a762a263e7ae1c8dc082958bbd57437d56b261dc4f7615ee622da62b08af6dcb9f22bf799c28f67f9b0c6235f209bf7949de1cf95ab19dd694ca0168e1595d800e3e97a9de66cd68995a5354b59667b122f15cf3fcd86f80175582312f75bb8458e6a59b5a4771b1effc170653a2100d15a1ed573db9689d40896c2d3e7fbff6a46e0295fe9e0b79d952368d1f9591c7c507164cc2d6fd3bd19a3b86715514c24c8695fc3aa72a5a2f8aa8daa870a93d56a496c58dbc432818044f135f80b6fad64a55b43560fd4c0deedba3b33ea16ec07362c096af6e2fcfa709cec33ffccf5d0d73ba260b98aa41ebe79a56df03dbe8ff30b0283abc525e70e9a22e48e08b5cb50722402d6199daad5d57a72e8c4af1e00834d13f24a082de0c6922fadd8e6f056056ce41faa7a4f353ad453f2f4a0f24e98401f8280e77f883137eb25272938174bc8d955736290342f861a4aa9c47227744fa8fa1ebc8dcd5cad4bc17306f24cf8b08ad19d555dcd2f92ece2c2ab6983c0fe89e261fc95be0b3ff268cfe30436fcd4f403c25f8f63c769a37a713d9cf9c4f28f1ec3a8ed9088820fbe804b4a30de2b1a367c9bab77a8bf9804d9352e1f30ce35eb4ea2b3c9cf3f83853b396c5c50536b63da145762c7878f2c3e4bc8ee4ecfbb45030372b1fc08cbe55056122c1e3e522827a148cbd855b31589e09972e2a4818b782ae8c1370c0acddb86fc06be9b277fffd174d68daed348c1c05b14738fb717fc0a02ed7876e78e9cffb4dc585bb899f964685026bd3d60429447f234c375893151d790ac9398b4dde0aea5f5eaa0fdfedf26d8bcdb35fba1fa877723a975a8c025a55e2950ba3b03eccbde88e1e8521e41734011ef4389329890bee61cd5bd2fdbe8c6f41801ebd35ec466d39d0067979ecce2c5d1175028263e79e9858e51ee50788dad37ccc145f7eaec6437df5bd04d275a66080f8572981c50e561b5bbe4f3c8dd5ca54c89acf8753b499a6e9290bc20ce36d855fe883120fd1a41772c3de52ed1f8fb9f73533cc253bec9aeb765664ef987ca977045ee5ba5579df3daeb99a30b0677d61af18a6daad51251d7a8dc675286bb9f08b86de38512476badf7077c68eedbcd5eeef30a6bd2d9a091e4e2db4793b216abf0e127959e9723c6dec648f20a3318b6f4412360d5f20d432b143eacb78dfe4c15441b7716b8b2c15ce50dcc3193d3a474dbf74a00ca0679f78619f1e6cfa05af4be69c6fbdc14a342da7d8147c3ff97589645724cd3ce92fc2eba1b2e8a382645f1089fad38c7a369029faac9eec4150d5b4b6743c92be0e836bdcb8e11bdf7a5a17f4e51ec4c71ce7d4e5aef05291bad49bd50c1c48f2498b26d6e357cca4889999beb173e613c5e16a203e3eb9f95400026b959fa66b869a4a32e6078c10faae1f430b7485a4c1f6e63e92aa0c437a1ad2e21252ce0ce10a8a769663146a1c844838c8a51a7cfff9b5edd9ed9e9d5b46a79bb3f79b65487d9ce20d815a48f003e156ea7c0b6ca5e0a7fa25f0102ccccedf5568d14525defc10f0f474c88c56d79f130a6c493b0195e394d8b2eb10a520baf055d18cd02eed7afec1bb4192907c1383dde15193055ade3b4e53b3a1954ac44dd47e1367dcf4649542b422645ca185940f42796ec1fc5230f8e908abae61b682a648264e50a844040e7091bf7bb8a3e2209f169f8cde73a21fa451cdcd4a66eda20c1ae2a476d4a05d9627ef7a94bfa75ad26ac94a4365ed0bc6248fb7b9aecf7e79579dc6a794bc27f47a0a163c53ab82e4f67445fb9a9a60d8962a2097888284a066441601a5321392742ec5cd963849078118d65159b701ab424e7920e8fbbc68e582acb3bc29506fb449eef53621493b34d5182b80f86ee0f18d420414121c4c26bc33fea37fae40cdfa3dd24630589b25a9b2fe987b0147697a5b0448286d0b36673bbff86ca721605bd2e2029cc09f9f3964336f5927e7531389ebeaeaa5ce0c9d9818a53c8763388a789fbcb2fbcb150f05bffffa963a2b738522a1e98234bd5ce23ba93780857711ea18cc6e0abad95ca48f634ad25705242ed03c8a1c6f26c67f20fd340bfb08e1b8c14f73a6a49da8e9b5c097bb60ed0036457a328a84841e155bce071d31c4ee061582a5696572785c580f7020fa3f0289b78e2cab2901ce4789477599bdf12b30f3b75c829ce45293c1b3e003f851c6637a3b417493e1e00a2b85dd6831aa13eee06cd3eec2f850a1ee264a61f0a64ace90e3be04ea552c7389eaddf06726d8dd6b35d5ccf70d198bc5dcaff3f94cc50a2929edaf5647c02d183c757bcc9ccbe6d5816e0fa9ff0524258b6b216b5ab147aca6b39bec0ccb125dc97fdb11a8c21a7975f684c8d56f9a85e5395db4786d4d661f8cc9b26713dc6f58334646716f790ba922e3a944d0d88d6a26180f8b1e7d2a58aff4d1bf9861fe97c219f8f34247975e6bd269342a82d39f33eb1d67ccb7ae8e1a48dae182fb7f3c678d9de92959579b77022d1c6166e729429ea166074e84ba9c4d5b1c8bd0579443a8a5830864e4f16b46e9cf38f35b21207748997d80f8de0d73b37a027ecb664e5fdf82b4a1a111897b6bcb3af8e5d1b4f1005f96685c853b531fa271c227d142e3eacdc072da55f1067412c3156443a699e3050299dd86ab0f2623eb898f1f1f046af2ba3d9317f22a101764883e8cbf129ff4f0046484bff5a18fd6307a2dbcd083514b28bfb455a65e9e0e9aff85418bd7cc8814d8f6c7ff8537d026f31b319ed66fc94916e50cd67a255f0c91372543c880a282b6b624388336d82f2e2214cb8449ef36425ce0b684d81ed35057b6b2748ea5af05023e74175da21cb4c50ef561cc47cd22c500fa39a6975fdb0178127364dfa7363cb2a7c3d09569df02f436624613dc73d99028d3c33019ef53721d8fa85e70b4ee079bbbb297a93ca45af82bd30abc9ba81ab85ee2d7d2d399c5a940f03c86cacce677e88244d93da83d3c19ce3ad3cfad02467b13532eb054896b066337125ad1e73ac49d9e30ef291df6982a3431ec00b78861cd99a7c7051e107e37e3ab10974f40656b2378518642914d9482b2319a701fa03e4467528ed429ca7b646576d3054c3f41575f946faf828108860a9e74dc50a425f8976ac27ef6458966195537ae5d89485a73ae3acff9f3dbc1d0d18862951735bbbfa960aca1e1ee0ca2ea1256aa162690f9d794fba628aa885d9c6d183c6678e814a8f048029514d7239fb76df2ff696cdfe6a9d122f521306a29b43646daecbe4e2670eba239d6fedf4758b5086e3883f0d1055c12bb7d52ed34e360474a54a513ff423194f4b66195ff60c277122a5dba4b5fbca0a0455b482148b5288d0be3e95b587d8c8bfae2a993b43cf246f38c08c4cf43930781f8685d82e91e5d33ce1a0a66568dd5f8a07b8f7103b2bd59034aab65b92fa2397c5f38258199a56e9291d97c33e51909dde2b7ee8f2066c1b53d4004283abc9ee04912331b3a56cdecc4bb1a5ccf6b56d63ffee4c693ee46319094153756b25d63a443736c734b638bd1e0a3441f6e93c55f061b336b027b483093469cd68da74cbb33f65ce620ee1c73ff90e44aabce1eed457044f00dab2c7e242125b8e980b41addb645b2dbbbc8b022e46d0a7e45e369942d80145fef8d3e2a8b03210a402af9783488440b10026a335b0ef643d94b0d95dc50d4e5c48c0b53f0a6738dd40ec4f5ad2de8e2271192a226751e260cd38fc6c476d50fef8067e3fae96eece6aae5e811527c786f8ea623e82a8c0fcebf82fe5ccd7c69da44fff0703394a6f8b359a305ee1ce10ce5bb64bf3d032883ec7ea90ecd02e5f765d17445ad5b77b362bb145c90afd000da45dad6fb769869fedd0b041af6651906db0df033d97c024a85c830d4172923160a8fc775814b4fe5f4b30cddedf7c60167155b0cb6c8af27b924d07b4c134bb787c5c6a180aedacedb66997bc14c96d46b3be53ae521c6d126e66989038e5eff434db5b664235e73a0a34cf515f72e54adef17a5f14f57730c0330e9724e0f3f836085c3a4b0320b66d1d5fc9d74bda6b85405d3830a1126e7b7dea3cdd5ea242153790d08e6b843c62f1d0fc1b58dcb9358d22d0b87ef37f50c7f0d04b48fef8086acb96a91bc2c20aa05368513ae2c4fcb8d8468d4071d5782ad1bc5b8b7ba4bf6141c84aaedc0a71d5c8ace18acfc4388fdb4748d142c6f54e055c5b8fad56b2fd3a8ce94297178c96fb6f1bbacbfcfb707193c53f420609ff96154ae6c9769f3ee689458827377eff91d87ad162cbd2b1f85f806c2205dc702ac7d749b614573ea6e028dd68767765aa252a5b646b3465be2f1713735e7254c63d4f94b784062aac6af62179e136520fb9f29a01612c47e476a1f2b3e0ce4b440a46c80a52c69da807c495d5a64dee23c102c7e34ade1ab660aace937e25ac18709a75daf2c2cabbc84ddafd9cc0e63fd5b7be437d89e0b0cab3f70f672e576514c72f9cfbfe8afe8dff4996c58db6693a149b8fd831edd5947dc97d415f17a9f0c44e4850eae8d20660afcdcd851396ea6a89b37a316911fb0a2d842e37321826b4e96290a5c9064e674dbe766692c1c5ea86c044252622a12cf88079bf392be09ccd0b6e99fa69442a5e9c52769b791951a5bcf93d333c8b668baab1b0cf365ddecd97120cee0d8c16a6d0aa34de328eaaf0d34e73454b55b48ce51bc346308d96fffa2d49e300ba85f4efd8d6b39263189b28c3aab047ac2cde31207105ce03aa4ec85747b2fb7518493304a25346648e968164a4842c192437315fd02dbd2ae7175fbcda54f78b4189e2f3083cf25dbc576878e7deadf5d069ebd33f55fcc2e90eb706dd17283c3872fc4d13d32d51a9d969e176b16aab44bf48000db583336c46055d04bf35db4b10510b0705dd3311403cc83ada0de872c41e1125f9315e226179bbb3f41aca199233ff2ffd2b3fbc8ba70141ab5bb872b7b9d90f8d6ad10a8cd28a83d4239495f422990db015261317c8579318b80c747227666615d6230331c22e64da20efb403853fbfbf2d1574c6e0e03726e1313fc70f1a28f1816937b8636b2a316d03e9e76093e74ba6c81e90e123af665553c1524c7876e22493aabaf469015c893f565739f88db9874a87d9e06e5f4570929df8a48416c9dc7f705e3f7e2b991143b3ec7d04abba89e3b35bbb0c837fe8cf449f7ae3c57f9fba7f187a2bd40cc115ee5a6604f242ba1dcf1880ffc7f9a1fbfcc0ce05ee46134b6e7f86147f49bb3840903e56890b23120b5ad72e0e8cd8d62a40777c3bbdd56d7bb4de57db686b586cccb04fb23bfd02c21c38323dd2e00c2858bac48b2e6c1a7544ff28173f6991d4101a51c3691f0eaa7fcac5146247c3906a1e75bbe022b3d5bb29573dfa1c5db0f1bce0ab874ce26a8fd9ac0c9deefc5d775f8c626e74d279cfd75ddac48f054bafd05b22b25283f37fb7128ed027e850cc185ab5889dd97dec9c58afe5d07d64a89da7a8decb2dee0ef397159d05eb447ecb475c54bff1c8a6f6564b96aceb26d6d990a3ae729b9d2a7cf83af8befe9512a6d0cbe7908ccd87ab99030d11bea650a49d91f7e8d64a3ad90b35e46353ceeaeb38bc52d564ef8a5603c1a6b9c39befb1a6be730235425506230668fe29fe5acd21e73ca900e8b781770fb19465e66223441856a8f016e594e574bbebb13a5f60a8a7f2686303e832ada39a2c7f5d72734946927fcded2f0ce91a4128ebea8efacbc4bef47597862fb32f83c04f21d8f60ca7f7bef4668999e267850d62e19491dccfe72684e969fc93023b60e3763d7caff8bd41d1133628caaa75263cce5bd69ea80c0c3b229ebe5532b1c63f1839481e5a2a97bc1b9a30b8c97f1ec054d98d6ef8bdd84142aa72d13d759aae852d929de576c1b74266cdaaf8023cec08b704578173017e6c94b23f8a7d483911f98099ad577a60e34e33bdba171b25b88af6c668d5029e1125e672b6723849bb7a19e7720d6ce19566afcec2e53e84773f07b74f0a67de7b7dc7cc3875f1775aaadf85599efe7760bd05b42856df98ff1563f20c82e694b6572f3ced0c018de376723365b4338325d7ce908351e6cf3884abae846d22ce08c646ff6a37bb7cbbd103222b9847f4413154134f250eca5bd8470843c1014e846de83cfea9b55f3610183d852b727266fdff2c70711f8f7a3150bae621cf28f1f6f6eb3f5300b905c267caeb124aaf53bcdccb8eed62981e65828a997809c406c7cbffb3682003f7666a3d5804fdf0df397364ed36241cb0c4025be6ba4d3d5c6fd3134405ad4f239a3365ddb0cfdc3f3700ed5bb3b9df59fee47cfb4490a0ecb73ba8868cf1ecd64318eca12f219c59b9da137fd4426d4d98fe5fd2560af6f7105605c55d14fe8c2fc437e80410a1ce51aac9f9fa79ce8b7c6e081f747589a6cb53c5804df7039e52b4c8d37e0f643cdcb0d0b08035e2373f97f5a86314ec415a50ebf66276277c8b675f1d2a952ab94ecdb20ee945f967eec282c654f786aa62100ef9939b23a0bd3e8afd0ee908b97fc17c7668479db49e546d8a300aa3387b5c3a8e347ddf5bcfe05b3cc9ad941ffaa9e169388153d7b18a10da2813e3f9f4c19ec3e768d047f56d7c115c0d349ae328d26638d0137fa21220a37a7ea0e0cb3b80bd4cf713bba6ecd68e3936690000076c4500779f5f0437fcfc4a86bccb6c6d164ebb9655d75baa63579e8ce40c256ca17bb1042ed3ca2743fd922dd4f0b41cd461fb1ff377d4e2afdc2c83cc830191e187cde93314949759f7a79ed19a58fa80d4315b8ae2d6daed1dd6789955eb56f5c5c8d65ee43133d2c4eb2b1b1a6c6e46f4668677dfd3f460a443466169696c9dd1faef2496a19eb663b20b361ea2f534fe8e1395e7aa54415f0a9b3d3d3e3bc22a7268e6b0a0aba18e91ef3d67773be29b2484830e7f54e0803c7b17dbe7a3b0c6c6491519549cd7283078156660b197f1073bfd4807a6659c8e8628f89449cf929991df74fb09c34c6f89a0f0441c50ce8f67af9330d79f73b9fdda888a9f33f8db8546550225080d08a45b495646c738b487e706567bddb28a0cba942920328e140db2b201f381d1302ecdc1248e83a34144017189969d1e33fe7b6e70a26a2de2c6c9a315b8d70470cd4639eedd2ddf64668d8fc8bb0cd03c7f15fa23872b6ba7a810c4f3c5e4a6f20f97687b5ccca0d3d8bbb51859dc35e6da3528853a95beacdebdd58c00f990ca8e6ec9033fef132dfa74d358c4509f83ec6b9c4c1be1d97ffcdfe32f5d2f2ea6fb5e62884196c31ea9f0628c10206562e380308f32c578fd8233652ab6cdc35f8358cb3477588ea1e966bfd35fca61dc2cb642fe7949759f12a5d7f4e06f6907b2c98500afd4daec72805bafa46872513503d05394a20ff53db9e1dede14e4aee2b89ec341b5ce7b4956bffed0ea09b527b7df9334b385d974d7be34828d39d0438de26989aeb3095df688258c6f0270400987c515ebb99a79fd043891dd67e629c29d09d0bdf28c932d8bbefc8056c3b4e14a9a471dabd649d7752732133d62b8f0d0fbc6e32953d57d6ef7aaf593dd056dc4b512d944ae131369e3aa62e06be00923e9ac87c30e702f11347d0850ec2b9909bbc7c5d53ce0111dbd37869aa154d2ee59ec4840b9dc18242ed0cb54a41a47d4d6ee67ed03fc15f39b7c36aa17bde62c723fe81c24d10ab2509ff828303107397cd2ac04d5b45c142cffc836f90228d597535e4ca20ceb5f8f34b8ebed1907d66cf11091b40f92e1fbeece1df6218576623ea993021379774cd51e625fd96f6433ace053bb9b463a02c1a1f2168d18109052e4597dc8b858861e82f59e4f14b9b6c142c9793b0ccfe21856e9328173fcdc2d9c3be2a4b06df86d457363ce7627403219fe723fde4803b3fa5fd0015d4ca4b5d0b4eb2628e8c81f8d839063d23c6445d753872551d3f194304e7be67deae65930c009099374d8f6d759edc94c551de1a562793e400a699393a7b99160ac186ffbf630007dcef7aba4803c5c0c89c990d9ff4b2725f4201dbef3501b3cb93fb3e979c296b004d46c47b890edf6c8302f7e2cd427af39d8fc9aaf7559b7abf8c5ffc987848ff9415f355aa58c302162c3d3b381ccbb9b16ced1af15762b7e6f43241982bdf6554b85a950d5f703bd7727e637c1dcc7f38997ada00e9d41dd999e1ffef51c845085d7a2bce4c92286a8681408c6dc552a689afc757c75ebebad7503f1731f0db50053ff5e962c17338c8615e3dc1cbad789bba1e672e0ef6fc5858e1da9a3e18fffe198e132f33c5f77d4839f92a8c2be4ef4dbf60678cea089aaf0d68a24d4e3f7a04762277b7a37ed4dfa2341f3089bfbf7015a2360dd9cff5cdd8404c60459149de83e8667a58a10ea843c254974865d7e854e1e8f678ac2944e78308b0300dcf77ceee8d4908eb21af2f36190162bfee30527ee0b07379ae1a8b9126843373fd537b4c7232c65b19a2f1b8f2550cdb581425dd56e128940c2ee936b013c19051737b6c1dd95dab58f76daee4bed601818b1266dd2a20de484f982ab7ea38eb4de279f0bf1469d04efacf89251eacee618a2a97c7937e3a385c22edf26659b40f7f5d77725c5a125a3a3e2e15d241c15554327ae1fd733429cefc9dae2ca96b8e296f791eac715b8ec3ed86ddc9a59c2c316f9a7970f7051aa8fd28cac3b39070557a67aa397d095133d0a8aa696fb9bef52fe515943d0e51b8327f69f597eb8d80b78ab76e327eba51fe627d941ed8127f87664b60eb341295befbcf5b351588f94954a04b9c579b0e3f45581bf8a9be2fdfed0d795f28c8e2b58279c20e1fa017ed53b472ddb0563058bc768417b13edb23d192acf978a3270a1df2a58a88268a307d4c5000e4142d5ccfb636e60be8a9041ebb15a4b279247b424d643d7e17a6c8b5b8a6308e8bea9dfbb93e2a665bc2e479a799d285fb4db042197a6d5ff3e50a27fec3a0169ededb33b6c60826bd25d541d7bd587c900b16b9c47e79a0c1e822b60e74bb53f37f444b694e6a8e2119e2839363cab9c228203909d75d2fb3ccb657afce0be3e2373fe3090e0903681b28dd45bb47a2fcdbd8aa67faeda017b0a77cd53c2ed0e0a79a7d00e5ef114f24ba218214720dda8b169b0fdb2f8dc60df16797c24de6662314a8e36cdd332631cae0dddcf84a844c829524229ba0b5421d90eada14fee1fff5ffbed96c287d55cc370b48aa93d8d28c4744b8b3efbf01edf2dc159bded1e734e0a7d3b732be93a6047b882a31bae3ab5bc27b265568012f3ffc0d5e97527ea7d3ded2292ec4c3589546ee3bb9087edaddc41a5cf686880166e7c528d9e83c8d0089a45150b772b01f980a9a0000ed17e529f25424201836744d7006ec66839efedbc53734c8f4b2e30668b9f0286243aa2cfba1967fd039042a7b423e2884cc73074e1e1d8a3fbe2003121a4b7ef878d5a891884c0c2d637d6857c40409ebba00bcba91cc482361b35f463425388d046b74635841834bcb506854c93746afc6e5c27881a4a283b574d121d28e4867e284060366e4560b612190b4e12febd2e8a9b6cd16c0bb24ef5bf0183c7d30709c92c74a1bb6bc5407f2445d93a7eb2c47b29b05b3536eb792a0c0e369b7088262115d25fa5e6a59752e0c5e6c5b80a5873fd2cd835c21a3e5ad3b9b7a703976ec73b9468b0be03888b45266500f93076e0648d3647ae2cfb0057745960832fd9d17077abd6d2caa300cff3ceb0851c5e0b9d6b67ab754f393c955d072d23869b852211757f2d4fadfc6441fd3aaf93072ca094db43bc28beffdb4040bff50c6f550b6b72ae05fec6758fc26095aaf10c8313a4c78baead9e7e56d9c828d149003d6eb94bd61730c396c8a878e0dc6ee63b44a74ba14106d0d29b3d7b101c55284ab71307969f78130f3f218fe1d2d6b50b91f26f1928f2f1272516fb739af392fc758210a130e92aa12d8a8b470bfc9a827c0a31a8dc3351ea174f9d04ed0efcd00b8502e4ab62c5e68591fdfc77fc0fedf085674a1b5d87dc519ada147b18c442928d35bf6551f767d353c3a935dbdd38002a8682b19459bf8e8d69074a065c081ea6d5f47e67d900f6aff589455a0f366e471de6095e892f19c829ecc544b24278160c032f7b808ab6a21b3a260b606b0c8b85098bdb0ef1437fda80f943cdd5e18348d6dfc7dc8e301ed7ec6082f713f78ea5cb6d4aab16ab23e62bc1f9a53498e594a7e54c8563a4858c6f4ae3f4e6f11ccbfb5ad447c01307c6fd4fd89d9805306e4460aacbe0d2e64010eefa448c3d8b041abdf868486d9c85fcbca17d10984b3a247475afc43e970db2fb4554fac4f9d77b3d0a47cb446593aec19c25a14d418ef538648514c4e89acddbd89a0b371c75eed30203a4a48009f4b1a37e3885c4da5ebfcb09029f17f303f1af00fe2e23724e51e3c69e3c47dfeece531f63b201e4f9edf18ad471c5bcf2f13fac4d32b667518d2be8fe95531f452a7921eedcb3542944ce823190cfc234c5e35ab0275cd9b36a299b7f636d58775e81e836ffaed7f6e53460e9c686f90b9bfc8b6becc8b53925b58ba7dbc45be910024bbd0a4de69f8528cd17d98ee95996149d38a8435e313d87448a17109197f500f6a612ca9e94a460152589e99c20aeb4a21dc57ca3348bce2e03c468062eb1149fc1cc092d96d307578ee2435e764cdc0fd4bcf653e2c274e3b0bf52fa6cfb1d313aec3561a5a50be2439b1948725e083ade7e4283b5c68198e10fd54101494c1658d5c0e0766c999fe678a3dbeb129534b138f556db3b1339e812af71e3fd674067f4ff095791bb9ac1eb63cb8f0223bd2f5e2ccbb1a8c528e8b84055730326af0d63aa637dc840a94cb4b327f16be80d374a47c0262700352dac316b6d7b59107f07dfc718fe702e3b9ff179636e53a44de523dfd331776fc8e8caf718c408cfada59992cacd155b328eea78aecc576dd42baa340db925e449c69c199a42189c1253bf1e4ef4ae445c3933f4dbeb7ada21247def1c039831d4abef3b1c0bba55e4021e08ec23a904a52dd6da25d9280693a9796c7d5ca3e98d0c56ac96b732d18718b3923a7b4363d0bd2c6327f509155e4f232cd6b40436a64bf1412dce5b1cdf2354b01022c220277d47223f12dba773cb481d49df4e7e8e2c88a5f51a977a25920ee76dfc187163cb1643974123adde5a53c04ac7f925b85532eb65ae6bed331c1553202dd2940e8e96b2febd3cdec7b2fe90fd449c96a58dd9dd4a7c8181c0b95cb343c090e32a6712e95250ef78b2c4d3668eca1f5854f9f3e8f95e175341e321875d93203ed30d0735897fe0687d3bed16f2fc32f445f48efa28630b4f40c7b082ab1a356ce9b2b3e40ab0d312e80901fdd17145fef015ee826ed8812cb953a9aa804e8938c9b2d9b7bc0bff70f093a44f868bd5e91b999286d10c5ced4d403996ba464071fdc1aa0567e110d6e2b403b78a973c6287f3931f5ea0d902b4d2c67a86bcbd89bde24a8196f07ba01ffbe5abe8767eca24da76b115997138e2463a363b4694fcd97a2028a7d5263690869c8b51769f1a22f9d0b953982214657f661b0ae197a1566fcf3b24e129125ccceb582ac5538379a94722047c9810fe64762bcb1108a46fb5ebe188c693d9ba3adf832062900b00879eea20029b01860364f93e00509a7478d3920716311dd1d92bd7779250d5351233cef54ab46583093ff87655bf443a0c4d9dfcb0e5909002cea4300b13354d8c2393f63c535e0dce8c232397c26c41727490ade0b916c2a738b7dfb129660dc367a4e72a614749475554c3dc7ec562da9b4eaee2209132046d6814c3bf5227eefa56f692540cef58b65bccbda9c71a0ff71badc9cfef799bd0654a669c3763842a5956f62bcca77997be93ebe0f888cd1bde4e7b7ccc45afc2496080b3927dc4b69d68d265300db705c4402f2fad42aa9b8ed0040219f0aeb68bd49e537382a9618a6cbd810ff62d050773d289cbec6ce61bc87f33dda396b2fcb87d7a4d7ecce9fc3c8efb2bd629d99f961c975881165d4bc538ae43d64408c16d7a89b40dea5d6cb67ec309338f8ee4a9cfb22b9f2c3037ab366d1cb9510f94d6940514f68ce22c3617266d95541e5581db89889571898e3f281d9d16fddcc76f7f7c26b6d0754e7d9644092d167b877448f711508e778362f7d31a8ef166b0c955feaefac991df6cccd6e374861ca6dd7673c2afc6a54ca121c2dad791655eb92bd9925c97b82328ce1ba73bce43a9b545fc7afa2f0a4d9a6399b9fe3ee4c4e06977f3a87f9aa8ed5950cb5e79c963ef97ede695d4df4dd3ff78cce16c18aa3a056b7c2b1ae8d58db2fd509a011d09b0f81fb330d98d77db56d0bc506c849cd290adea125ea2e701776614c92eeb12f6a76db111be76aed8384df8752e76a68c75598df310da34064063c538581ef27824346011c72735f054b3c37ed7c761e035d5f2bbfe6406d6b0ddd5798d9c659023bb329640a64270a8c592e0ec53a7b31306cdf85056b623e97d533c51091185f1200a7a1cc5451586b91f0940407eec98673dc35681f2bdf0f3d72bc6ccd75b4da08d19ce97aab68424388ff5b55dd372a37a6b1beff75e5b63203b33e9fe6ec262658f23c52a4e5bd8876e4711eb3f35f649d4fb6c0deefc37cb9b9a871db32d3dc9dcc29e015a1f606fa9e51d469ad2bff79e79e6bcd325a43ebb7dbc8f30f54088810d065fc1125cec77279fd38fb8eef29531913daf7b59640c43f5ee881867d00d2fbfe15f64720f92be0507bafd650e6cfdc9a3153b80d564511718c4633197f9e2fe65ebc9e2b5bc508bf4aecc64c54b5699902db4229605bb124bf5b33d09f5603b22270fcf5c3ec51331f2d6242087966a202406349c4830158d027941a1e148d433b741b69a8025bec279899eabb42e865e2827f60a64e061973c50cde12bc71a24603562fee045c9dfdf9c1cc0733dde3da1255e4999af08416e51710319af0465214c9b9072860fb2141886ed4e720ddd977dcdb69371d7c28e095989a4a2fc916f3edfdaff2d0516116d00bb2390f287914980caec07a9acad92d34c09f3215f54829045749effd80f052dd588d07e6462ebf85a2a6a23113f5fac73c2872d3b80d6611f5b9989c0cc127a89237e59648d48ef103b4e3d912eab5594577fe875ac3f5a43f4d8ca907c853c6e8b634b0a88f8e473c0ab730e9392469605db0c066c1c43b50a472728694390bb678f8a56e871600ee50c0f693da4151ac089aade7a4d254511e790b608fc935ba6018163af13e13ca664127822dab3762821e903b0d9769158a92baf73bc0b71f1a9dac08c87e13ce6c8d4300044430912951b9d2c31afd6a41fc7f40ce9bc0c4081a608851492cdf7af6c4229c2cc8121971e9a4a60962408d777adb4ce36762ed18a8961d10abdf87b73dea19105f232d226480bd5c3f6c483e6af8f2154d0c081144db58ffcc54d032761b8aa15b6616bba8c94763147c9b919211c1296c23e6d4d6f1cc609ed68de482e5a58f30fcc6fdf1c714fda44cae8c89af6d1b7dfa0ec5fd47fe23740f36202c03590c0e77b2c62f7ed462e987fcaf519d55f75a8524610d31fb3770c79de0d21b6b15412daa796ed19516177959ecf376618d0cfad7541c95eb0e843150cdc3329c3c66b2cfcebf6d04ccaab24acbbb3087c0ad23ff4655f4739e917818dd431a5a96cb3583d085f72212455a80f15dda45cd065935e86cc8289d84114896103f7c7ee69a2c6204d8fe92401aacd3d0ee148694fbad28270dd0e35b5107174cffd161f32dee1bfb290c518203188c11242bc35f69baeca953ae6b872e33cc5b3bed8db81037ec6ccbb83682ef0ac8e6a67e78c031d13fb0cebdab935bee283d59d2331d2f8263526d6a8f65048d2a2184f329bddc522410704972c6d548c7e8c942929f562263211ca2da1544bc6e4ea8be497e4522d27fe8d1e79e14827756c84956196dab901d03d6860f47f780d1b1191e876a95f9e5aa622844f609fde0fd91b85964a10462d5680d0f47307d888f6d83a4f0acfb5fd44bd3555a6ea0d57599c91a4cd58f13c99c4047e21c1547b7df188805512824447e2046d2f7f768293002c8bfc23e2cc0a438f8ab650cd0dead3b61e16c00eeaa78e3ccbe5e20595a9ebf58096751b414f10bb6acb76412220565dcfccbdce2fef00d02d219a24d87fe69d395df17550cb2878085e0d6641be64c51af39c4db3022022d6aa6a7182d67d2aabaa3db5ffb8403dce1f2648823cb0584e962873231cd9ebdf58f3d248564ba84d32e2ad276d89f2f65dedfd02b6d4a3c6c3b1177f17c3a93e4978cde0c3c741186c5d9e725015aa9e622d567cd44da8905f8e9ad323c53456d26267686b0e304197a581dda0fd803432c85c8c450588ea4fbe08d3fdcf202623e426b4903745a64f0134785ded57ca8b0a0aae746124eb8c73eb823eb42a1a96727e785cce5063d0b3275cbeb473e46ea9e1a91a3d366e8712c19e517ecfaf116273f1561b0aa90c2de057da35ab155e4aad8d5fea26651d5f908cfd500e26236b8bec2c94c2df3684629279c226011022843fc01cda5fa090181988516f74b9495f971fcd0587f6abe31d4dea41eb6daa6b1de6600755e0aa02430c8ad7540fda2d9f7cfcd9f0adbe1091f8e7bf5bd4f3b77e53d460ecea28908bdf5fa243930f8486d0f2869795dfe7a946fbbffccbe09e00cf1d16a39c7d15614b8befb55fc9d97b15fe84f04bfe4cd39863c18be630f4a1808e99bf620e1173e019cc8aaa73817c5611f3106c8fbf129083388ce7512a91b1d644d0b410e897fed932589da29ab5361f12cb9d79131a6e6190cde3d2348941e4c088f52645bd341a672a98b10965f922ab3656cef880504c54ae72b42ff02b2042248f84a070ac7a69cc1d06d183aa4620600bf66f32b53536d9bc697f1fff754f2fe9a526ae760370aecf6a2a7267ccbd0a6ee7c86d5ac7bbed68ea65c92ed308ea31b84aa984a3aeb566a041f568b886a9aeadc534da2cb5a52e24a8d203a1f44205b900af3ce339f23800a550daf70afed9083fa2c8fc461605684b309dad22552bac22cd57e315336c4e985ca4d9ae23a86a6190bd40aafeb2be198a9c1a785c5ae5369b6f78bda9d38cc91b6d63cb1c6968055de4e6d23bd4815c30bb7b462001f3ca324314641b5eb33f121272ed98f6be949c3c091103d6b23fc36fe11c0c86337e8290e9e64a30d41387823d31b049a1fe2637dc54036522f491a8cfdc234cb520150897b206a02f8da229fde2f825376065529f2662937105e2c72995555a8c72c611a2384887a59623d3580e5140bcd281b58a515a8cff14ae9f92d63cd0ffeba5db25d1d9c6ad6238570a2d69d95685d0b39de527e9f3515f6695aacff5ce66ae844db32d65df723e1c1a02c84f3d18a4ab1a00971a14cdea069ea79efd10c8b77bc97025333d2c100b09570abe466c2a278ba4f87b7b3c5187dec8cb399df1fe11d37817806999327034315803c076021826d8c949362cbb20a81794357a110a0fbc5faad6d060d5dd2fcff487d28ad8fb8f244a27b61e483d3ca0dbed712b39e17ca9cd73317413fe2281b8eec8d6a14cd5b597e22b00964d5500a69285fd98c00dd925c1f0a762e24178f2ff3446488a487f280826158ed191374befe531b48f96c86a39c540d6a2b83c6ddd1b19908c2e246c94b51974e35f3761656b55e673dc9b9dc7ce04f05280a3a5483dc90ba2fa01a02a6e2e994b46cb07f79ff02683549960922e00bfabac9b160a7570bcf2ccb32c66d8472c65e921ae7d58c63a52df390b417ea29f0dcf1c7abbb5ec71b09d87c05c410f01e46efb83b8410333dd5c63b0136d681df39696215b68459d54d369dbac2b4c6019823e37ed8f32f7c172148bcdc10e855fe527d6b34f0c3a533eeb00a3c7c1c5a46b2fd0336fb2451cadf7f0e2668c1b55a32ba24f8768994343973d8e336b705afc540eb0c5549f20bde6d009b70076208e37b23578533fbfb787eef32fe98a089441118914231cbd19c64a7e5178d512478df021330735568091f44d6c80bbcf3c4d59e40fc68c1a91fe4cb215b4ce68b84fc24ba07b4cd665b312142fc5bce15852bc5251d431c5d3eebca7777a773f6320b7102a8ec1dc0f1a56c0239f1227b2bc7b6b7dfc303f27c2107ba451d9ac7e81b9100cd65cbe27122de8f8a41a74abdb523096604d8b423568bc3f2d2d11198dee21ded67d455a51de5597229325ee12272611d74d4312d2137c9f79702b1e58f37977ba7903effbd3a424f62725b5c0306511a3f23d72bd465e06f6251f080731228816a9bbf074371116bfaaa57c2eb7861f1c6e33cbc1947e0d2e8a2c6d9d2b58c4e0dc218eb7d06edbb66f2f4fd6c661bf109a5527bf7bc6edb313d7a111782135157fa28f211837f2c2ffa5b46c26a17779d1d2bdab58c149a8b75558f190ac367d42480bd207cf6658cbe940af53853999e19b7ec5e0d66976b1e0d2bc600a42bb10a0d6972f2ad5277be68500752de8facfa4c0a7fafdfe4615818e9450205f75050a763cb10b357f6bb344e9c689bd8e12c14d66be02571443fea199389ec782be1a32953f813e73390688f1ceec355ebdd087777c1c95b189c1dab94073264a31b03567dc59f844c7c7d4cc0f8e797cf989ac4193da739e790a2d637ed4344a956ee947fb597c8e9aa49fb84e4104fd7b5888696fe2babea3793c4732c23c5ef1e99d6dce20a4894b82b4e6f23860b39b7caffc706fac20b1d9c639204a81dc67ff7ae9ff8a34d1d3300c4f24fa7935de5ead9e8914965831bc59b9ced3479f9a9cc61eb48d3aa534a66e0aff17adb5ef01cf1de31098d820ea1cc180939f2b82b24b88b1b537a923a474e7fb98d8e3e42ff04668452e5ae55014ab6c4d697a50cb59091bcaaebe0e33c025dd30dcac0a6abfc0f7c61e9ec0a9e30e28af4a69e6e832045392d81b1d81febee555510a89008c7247386f05ffa5bc959dc2bfab3a08d846cf9fee826ba642ec27a640350b386d826c52518f1d185b04231775f20a299242ca64c7832a0a48d80301bc3663900dd22c187fdbd594ca31a91680a8c4b1a7edddd4efc991e1cce8c0fe65213dda79cfeed87ad20b29d437e49d5568f3b2b48732ab64240f0cf21e1b12228953d18fc832dc7b65a28ff029ae491c52502648593419e3b172c41aeb857b63e0a9e00216766f5efb7c5b33bba4ace2f3b294f25a24221eaaecad64860516d7a104303b68e100a9185f8ca0ba6bc19d31824b8f5b212036adc79c8e1c5508c0e6a5a5130f542c88a9844e1b17579685bc8c6b81642bc7cb6f662108ecc0a068f6c20450775b354b6a28c7181930fee094fbb2921f656c1eccbf5e235612d444d8377289dbd5b7f23061a0216dfb99a00fc68797f71d351ed87af2a13becf71ddf992a7db0ddc08de67ce73008e69f117e580315fee9486aef731e5eb5cd2737fbd73c479657a8d79e6c923b9129ee438a6b83948190baa1e7e797de975c1480fb735cd099d080288043b3e55ad982fa1d514690f5529ab613f5ca32d4ee9d1347c02ae1dfa159a18e32e5da280ea4a0f595b2b2115d7fbd103a0209cef408c77255f6796d77a11ad3f97b60ab1546be4c849c0efcc25bdaf9a6a8aa204ac6a9a6aef9826aa572f597e7c7ef17bd782d629221b08f22ff65b934bde1244f912c4fb4c98268dfb85de2ff5053b0c1a7d2d622d48a6c48bcf1b075a762139ff21891ec842964738044fbe88f7e1b8ae245013b31947df7940b5864f34064dd551748ff3fee3e1a4fc0de0e7fc8ac9f804bc787a2c27fe306d4c9422dcc6eb8fbc5ba8efdada466e6c9c63309a3fe0d64556b633cec2dc79cc0f690e25a28737d72667fe28f871b9d85f173b52a412e6bd47e034e510e2401634fa829141eca23801c55b4e13b0733bf334f724f2395e9da935da8f42f290a18bf705787da27de69b3de5b69854f6c2fb587a54ee59a506d63dcbb42174ca8b95f4c5282341673339fcbbdf48e112440728e971f62685b7c23bcbfae12f22ec3efef56c03a32c0273c8b33cebd13e08e7ac45afdb3a5ddbe21cac4e2b08ed17c95701293d7d713e0ccf5108479b756da23161ceef189468073d539f9688037e573f94c874b720866b948a59c270049c06d0f63b0c2f61bdeb2c9e962f56a6f53d9b821948cc1b0632088eff9585e373089153fff388cd9ff7719a7ff5df12d91ee372dd540d2d8246b425355a82c20afa19d55d392f0e8823f3159ab9ef8c866f3c158dae0bd523672eaaa5124d05b5c198b61c4c110c59e98f92a069c9ecb4e8be7b78125081a7f5f5ac802eb86b7ef5cd581262e44bf9ccadde15ef509565295c70a81f79604f7e2990800067b2edcc37f8acc87ad352b888cde9b69cb43ad78b749ff4946d5b94691d96c2bd567de05ab6a16842f77fe7b7ac13fadaaab2f789e1194a55c8fda225394ec590f4f74754320cfc1b7b43bf7d7e0db2bea9202ca2395cc3609e6fda50b8278e15ba8f96b1a17f8b2b7f43f59d2e9bee5e5379c4ab80325ed7ca0769f7de9caadd462a702a11599d577917f47de8a5156a727e8a82d384ecc7bff0481b4d70cc702681579b12337c0feb84805ad3b0585d72073814a36bf79c6c6d25b045cf1f348418337cb806b6d9cc138ed97025057746856b39f3dcbb5c71575c863257a8bdfb386dcdaf9774f3dfa1dc418a5b27288386406b7eb8df5a9ebf742d2e9fe583cbd006c38e94186a695bdb05d34e959ac47692201f4d6c70bc8031e9e3638c70e29c33c53cef1101da9ab9dcd17f13accdddc3659f830e6a3170dff7519ca80e9781481f10531cac7606b733ace858c8013e2480580c30f13fb2112456d54bc0edfdc7896b1dcb223e43f5bf858aea356204d103c58821d772441addc6890266343a1ade4ad4be465e6ce01376f42c1d4b71bc8900ed52174e7db6aeccb36345be00ce969115a694884335abf3197d3e226de8288de2cc6320adf101214e05c01bb4e845ceeca117aa3f93c6cdc4a31464a5ccbc44be6b8d2f7f3545dbc1b71197e785284f5c0565ec10d3b77ed46caf23249d2426de5872a1375f1dd8b41c750909c73f9eaa068522fcd83643fe7710391af3b97f47f49f094c63a2c8ca9b9703fbd141a2e74ef837c11d25ca3bf615e42a4e340142fb985170c834d95c8bb70db41ac2970397aba01a10fa64f4c9138c9736dbee7b82860f66b79c75edbfcf678c2c7bdd91f4ac1e259e8a318b0b28a6c9e15a3ad38af0f078412e33329db89387bab274a7ea72b823b96d353ae858ea9e9ab9889090932c1ab955f0d9f14f1a1b2e3d0f05cbe8093820249284ffbf846c1913bc9a8724fd3bea5e3acb37daf5500386ceb1fdca0f967f3999e986f1e45e6dc45ed76e9bf3d928ba57a8d577a3f14de7d8acbade05e34022de381e26342ab9442951b5cef9a2973fe252fbd2f5ba5dd323fc09b824786a66373ac9d1247c5835658c391cb26f5255fd0cdff2f0750d09cac6ed667d36990c669b60d2250362574c17c96647f6ac1bba0d80e36cb71fb43671e3dc070b199129b47121f44310c2782140288e399607b6153ef58ccd394d9f9cc0772ac2959f3a5793f259b5fdde3522a185d04995020ddf3db5d1458f185cc76cf35457f237b440d53e359de4aa3efc9800da624860704317086c97a7803741cf63d5f044e4221f70190ea0c89643a707cf42110f75f0b07e269ee4e15cea46496f663c1692fc9334eae22a35de44d3db25e13ce59d7a8fa8f8037189bac5399dbcf235bdee26ff4e8a456fb86d1bb6d2736f7c4dd7bb53234cb2b6ae20555f24732848939d28bbc0de4b5cc29b4500ce0a9a3130c6ea3b9013b7f0fb676d4dc912241489b6a0f2a1ecbc297b046b7d106c638b42fdec29f3c63c2b0d178a7e579dc02c0e66f261a50a11fc50ea46205748953c432c1d0957204359186c1d1d8c06083c0ee13bb6f48d7093f64acd296f22230a427869ed70c703d7983d0a409cdc72b808b02285810f53b9004f71c368bf0340fcabfdf3f196a6cb58fde1e9ee13d5e47d292a7a0343df5caa5c18a4c982caede351dc0529ceee70c9af68ed85ec71112065ff421d4320501c8c63074b54a30af3c50437e2abb7be3bd724f82bc6181cb769afbf96f2e9d613e98a12249d06b9e23ee6b205497931ccf512e2d7ab213991b244660d12e4d3b18d27c4bbbf3ca8f1e270446a6e7789468bb63aa787c1f22938736b7d9dab41003a01601065320b744f9e1eb8274c07b3666736c78f58b89452da5b513f229af5294a40cd4a7cd06c83fadf0b3be2e4a52f5c6690e2ef78f257e5869ce6503724815f47070fcb2f2e7a1401ac0f4944043927adc28c63f012af55eeae27b6e16682f21ace976039645851f1a0fdbf22d7b1334af0a51a33d0ab8416d2984507f11ffb50cd92941c5322a6a18a7234ffb36120b4b1f9df4d70042fbc21a418befdb34712fc08887fd9350262a37c8536aac814a0e88faceee5380aae18f5cc9d5bdeea79911a058752a5cf112a08a90f5e49c5653d559bda2a6fca384e13f8a99c284a5f3788ebec0a91f8659f087744d5efb1beb3905a6bfa3a4c761ddcf4217ae66cfb82ee104e3226190f36e4a2be4f682e9347ad90a650e955356ce666247ffa897c01def36532802f7142ba16a3fa9d8f7ecd1effd2c3770cc6060d6ed3c14e47ba0a68413f1ce7d8f41afbcb1b97682ed45371ee3bd57f899d5bc55468de66c72cc03c5399f13122f6fbadf9eaed6959fc71d34107fd17165dbaeabee547a506a12bc1836688cc12ef8db66d96833a51a1f597549bc05cdb982450c8694067fc46983552344530d52fc1d4dc8ba9f0c26250e5a7f9e5055cbab6255c0297680304b9062820722f7542cbde76041d037d7c39d184bc3c02e0102def15ffc068afca4b70450d770d26c1bfb6bfc028f6e75addff1574df262e52fa8efc4b2f62811df91c79ef23f151198c74c61e122644d7db333a5742431c8a5d60526ce3d0e8ccaa1267b5f2c0804eae875ed3acc49986349317f457283991d4987f7d5b51108ad31bcda366571338daabb11d6b958119bb71b7b1b5af19c85b87df166303dd8708bd734c82fcc57a2ffa3ab831cdbcfb682e97c82516f6557a28cd70cf79fb23346f2a0b8255e23fd9ec75e6089863bd4d03076dd4bc890d25dae4e5877988fe5feb057d3b7f491c22f2894f21f07f34ac0992a8c7f3d82547d54d3353cc1e0e3dc9c00a5fd9749fbb19c24b9014fe11750e728325cc07d157718a4a5e6f0a1080959230e58d87a9526b14e029f01450ebf49bf4381bade773ea59089965d2f02c278e1cd73356b274eb35419225ae77d4295a50b1541d28a152c3d799f7d3ace1dc2866c0f609c0f205a79cc5400e799087a2f23ce3e2a4c83d9a36bf923eab4f642a62b512acde1e9a33f069dbfc1211805c9bdb348a97aaa9cb905b37bd3c33d8c854fec61790d96c33f753d4a9974907a60f25a4687203313b07b89e08e6443711ca6875fdb05d9a657fffc2a2b2662143fcc1d2b489b5a685827b231cdabe02fa86031c8a3e4a9d1867bed2c006ef816a347e56f9180b4fb286567f093daa70b5952065b41b45979acbb3808e2200828f803ed94c312b44f19f7175c085e563be7167cb8990859ca82e02e78700c141d8c01557a256aaab7a19b816577ba00e47ae2535e9783f5101d9c25f75ce5ef62ece5a56b22eec87c748285a1ab6eaf6b7d27191827de9fb5df85820319e6b270b5ca9bbda0ecd854cf95d5bccf41783f8f181aba3e423a27a9bcfc2afe83621882a3f1377f8634659637f0bcf55758ccbe78630b36b7a9c5323820276b76977ed8b702353fe3882a8d330bb57c88ebb3dceaf7649d069526126dff873173fbd9eeaa86837ed8eade1b7da9471cfcca47749046fdbf511a2b9263b6a6dd6e65303a1b2cc1eb31672906753e4f8fe8c37b07e36f029e3d45bbafd4bb0cdb561b8448ef991a37d6852434f0cca5c962b21f059577cf41391185d296a9aada4e11395d13d0259d8dd29fe43d3ec40691e67a8c23b3ad56a5e36805a6fcc5e014c02e65dd0dedc6ce35fee9452325d4ff664847a0999e8a79441256057befb9071cfca966f98c822e2764c02794b2fd17561559dc00a9b32bb5bea08d5ce1f56a22ceee22a467bf1675f48ea933e14793bb242aa5c384e4b03a1590f02d9d648cb96b500e43401e3c91fe4ea3c066a1322a91168af39773271c3d3e3afb5afcbb971addde7b6589523d55405fa58d327256c36b11b26398e4a3fe86d14fd4be31f4598c11757d655d0625f5d2125f2299f19199f06614cecdc8128229136c614317239973ca4c6c24bede92276cc531388803321cad5a2ba98f4a373a14d441e0131bbc1c00f66ba71433676a19ab1d845dd3164db4c877859da9064d4dbdb1a7d0f4e125415bcc983bff49e9ba318922e68cad4d8803b5f999ca1aab894135ce6c70829590f18e3d101f7d929adf27eb04521871777bb6c17e622f826bbbdc64bd6b526bbe8f358f72bc5b41ef3f7cf71dfe83018e440ef56703968417def4b81f8bed49f1f206a7882052fc77323c8e3cf063ad1f01e7c0be8589215a2db294020b128e40407df0d161e4ba9c2303329ff2af08403c4a6b3623feed5df5518432b63a3651afa868e1f30e29a214c5fa3e8516719ffaf2f5d3d1b698e809579ff13d3a9b76ebc15f12a9410be1692a90c6f8bb83bb173fd774db6a87757d265e7a80e52cb9b5e305ff055ab7cb2392dbf6cba0eb57f67ca3fa23583b59fa4e32c0c8a092ed716fee1a42f342ad1694f2e03ffa3945fd291987fc712f51ffb7c0074953723ac667d917f7eac5c5c9d1407c6a8bc3cc50394ea324dca67f69f6a1801cd00e33c02abf377f76ee8b4a50c251ecaee08d8904f72b70d848de2829d07cc3eff41acd5aa27eed3f2c63df8fe30a04b21855fb324d9af2ccf972f5d673b82ce7120f1b9aa221005615df3559195b25eef836bb363878c17b50fca9097753304be613ba0dc0660bcb8273df1aac8c5b7e85408bf07e55065bf3cd6d39af5320e9f7debdee053195ee17ad7ca4d9e7bc750cf174c6044675b95a580dbe46a5b91cd310c8ed863c8d6afe2750b774a21ca458dfe9839ca7ffd9ced3c3131638b16fe680666335371de0a84268f41ef105d8a3b574ca8d8c8182055184e11886ea265a5dfc4607d126c84ac3bb41417ed6286c59b4e0703fe1ed1d39db1547da7b6e11d9329cb31da79a5ca567a3169a972e17c5cbe039fe91691aa1bef5d27033bb129a4c5f6726ea57dd3d4b928006b29429492cd1693ec0b2587defff5cd13b22d197d5d00b85851d27083c5ce0f3f2fcb2c4039286e343179f806f601e6a52625a141a2441e75ddc7db9b3581d8b1be64afd032160d86196a891c059f428ff227466263900862768f7bac69164f16067cd15debedcc1dc96e5c1acf7dc28494916c2f410bdde1d2f97976340d5826e98e6c8cb5e3dbf97d81d12b9029cac91e14f359029b026b0ae72b1caeb16ddd9acb1ebb04f36a68ae8582eba7cdd64cc27bb8c8f7c9d8977aa322aeb80ad467db74132a9adc754e32e1d5fe899b8f67c8bd6286ddaea82461ee4f86bcc5a349dd432ed364d4fb209538981fe661656d536f74e56d72ac04c0f2a447742bc4cef2906770f19380d13932c69b6524f66cd664fb85f48421e125001d03202707230599fc7ff5bcaff7e13734d5799cacfe0dc119725572fb266ae7a0a9c1d65bfff7b9b81f05acf458a52154cf65f48213fd92c99daa6b822d0e8ce0d18cecf2fa03c67a04e44a383c434508eb19f11de8b5aff0c7a81bbca346a142435298737e1bd6672c3d69d54e0199a87c158a227f4157a3c636def720e808a3d99b55b116749b94efc9d95be18126ac6116cd34db55b7507926f0d7d4c6454516c9d059490380023b75ff5946b14019690bdbb4bb84c303da3fcdd4e51e96a9073553af4c265a7ebf662aa674f7d83a4add08b5d809753cd6f018c365dec3c9527f6104cb723d923a25ea291d1220722d242ff0a698a228666bb6911f13299e3ef7da0176a426581e7969f4284c7c84b05cab4dc2af7fb90d1807400f6dc54da1f6827a6f57acc3ffbbc27fa6eee4336007622b8fdbf727df36fd171e39028a70160cbe72e4590bdde63e92e3580103c1bcddcc22cf5c7d69409e97207b4eda20ab8ba397d78c49b7ad0e2e7fa79de5711aa066c65d9d1fefc2a1f47ca693ae9265a09184defa59a349a1565b537505a61202ee379884e4532bc5fb12b4be1bf67ec0f9439f52f2d7c88e567292833c8107ad01a4e1e01d1dcbe094003aaf3faa2b6e64501c11608f1d2e8505e891c3daea1c09a6dfd275417e0b90e8f586f1ebf13078145c7dbd80a14573fe55eb64b3064227811b17da5f32a17e306b95ab291a3b4d7db1ea9f23c92d142ae03da18eabdef683f9f457767987eed18420fced3033ec65e45028f659668dc78dc09bbb996d21c7dd7637ac9a96758cc12e4cc407c76c3a8ef672e69bef57e615d070a39feea598859d35b40fb06eccafde1dc0f130fe1680c71f49e21f79627b5b62c3614d3b8f0dd577a5cedd51baa4a769c527951810a5241ca5c6387e75ffc729a2903ad83440d7e36f37ad79079dd75631f2d2de9fadf0b2f9a13b7f33e7cb39a880a78dd7974490ba51feaac38e4a30bd2f6056d3fd944a08466fc7d80490defefbff7ae2f86654bab1936047a361575e6bc67fb7e8729fa46f351a374d74ff1ca21922ab6cf8367b6a6145b8a1dab00e380952b43ac41177e08128049a467727a329e39ea42a5bed050e5562f40b9b32b39500e1903277e632d38b569c451d5b7131193f9039c852589f0de410fcf9a40571e988ab7579a1b1fb4b17753b9618eee1c7474493efabdac0d6347b7a0d831e71b5e8bf6a21dc41133de14d0647c36f8426b28c2d7b99e859032dfab60fa592dc103f66c44bd26af6eb710e14b186a57daac405cb918e94d3c6c9e80d360a3eec284b99759f73a1101ea5d4823ddc7bf91096cdf72427879f75f554873101deadb5b94a63ac6014ab43a5b2494d9624e3e7508cbd6ecf22ec7bf904b5a7d495860bd721c105aa1d439678d2bc0af3fd1b6a23293d716d18645099b80a3fefbce1e4061133c38325d93ee9585d27f91ea4b1a922b3dbcf1aeee799472e89da37b8fc4d33fbbf2d49649a4147bfd0a07d4598c641b9de4da6ce75dc4e2e3b76e2f8fe2d2394ef5595b29db1f8f9435e41e60bf510613351be2820cfb5c5ca4178ffb77ef25752cd88f5af494b7cfa906bec296a94c7a090213d73c30c07a22777300c9059510c3a731b7fc40785e0f6dcb09bd71453c26d825f35c9676ac12ed4fc3cfd25e5cf978a5d9736104e7882cae7500c92cae957604b47ac73c4e831fc9bbfd3a5165499df8ddc4acb1cdd40a2a6353cbc3d81f58ec58ef4cf1c81e222277e42c4eea311c2e787cd490001c4e954aa0078bd0712c52d7e240bc888599666f044cca184ee42aa2e049c6b5e5ec2edd55c9aac09d4fbca964f02b3d2daf6eba36b2cdfb81e8aad8839457aa100db38c7db48ed1fd448592a1e5a6d203213248277ac73e61fce7fb86b7fbbaf254dc6ef06f6f2e07d3b24888df813ac7da66e90ccd6485a4bbab488a7415ea4b6309e6a812b949dc8559809255eb8cf803752bb3cc141958c97ce3626103df2bc263edac43c7ed40f3aa8112d7df13233122d791db1c9965f441afb82eb067d63ea97ee39a952e5875eb2204740763e8f42cc7b2b9f28e897403440129772e71a2b8c715496ba1b04e26acc9a0447ad7e3e05d20506d7874e7a3625098013da11f816b521d5b903dac6c165c7af81db00b03d5ac245aafaad594858a100ff621ceed17727c18715506c63fd4af783145258ef3773469de3c2427008f9a795010691451f3275c82125757254fcb51ffa64de3ac6bd5bf45988b625097cddb7df87e030af623afd83980372389c5ee411dc8b6d9f815329611c2a7b13674e9cda88216d8adaedd67621a0bb7286c17e2a2ae7732bebcc29c985c864e0283a587c612a9b8c1b10af1bce5aaa1b1fbb213c37b9107016a88810c7f796dbe528b9895d19f49d4727d1a9f4b0589bc7f94d9ae82b031f0fe678aa27330a6235cff8f24bb55feda74100505ebe520b6d8cec0f51f5bfbb6e6925539d13a12f254f31de18fc22d9dfcc4ef4eeafc461eb087b51d9102ba9236a54b63f0465a01757bf6853150d6a56f9cd82b262c0e82a459927c25af63491a3521a19db802fffdb5e7fb222d1a3d54ae2e36515508f92dc85675e431f2cd4e8cfef841a10698b412442d508fc787b440648ea978faeadb64c4a9fd8c8129f3749f180a95e37dd5454ab0548b244adc83da31a2cf4fe67e880e367581eb7489369232200c575e26feefdafbf5c826e516c8bbf2d425fb36db212e9601e9fd4ca3e6b0b1797eb4c6184cede09daac0015aa4e3c1147f7df01cfcb90377bda2c8750cc3819e819c2de88c70c814ebfe753efff2c459767290108b991932d0d05de7a43e4b3cb1c2f821847cf43175b0eeb9133947b9e8e56c409074dc44c49a43a41da145119ea79c57d92627f40254f90b39dcb20cea5440557e7d6934db40e8232e3cb4de16b594c9e29ee9d674b12d457c3beea35cf9abde412f03d6fb89247eb90481741fd1fc2d8bd1b91f5027e7b44ec4b9c23ca8fa68025ca6089634504f484f1e5f556ea6941ececab2bb7264ba07c509fd485778d12a888fb66dfd417c4f1a5b8827cc9c4832abde3152b4167e4d728f09dcbb916b81244a758be9d2260a955636186eebe4ef45e9c556d24e14831b13a90cbe64143e37fb43b95bb818898b93ed83d2561d6f2c249474b0e6a55b94e7eb6a97a16027fb846f0ddb6b95a8e1233e6b81867f4a08045def331e7174ea7c9bf0fff0450a6d19577de1988805e0b29a0ccdf831a1b0d72da0ab2961f0e6a18fa1b79ac52dfb4a5c9990c679577223e87cd77b2509a690887630f05cabddb82fa2c6afbaaaf5ddcf62368a79c38ea7d323753e94670289b48692b47c5c758812d3b74c2b2dfcf244c229ee9c676dd4b3d036b7219b21d04ed587480a10d0dcc267a755f9302ec6dbffebcba69ab21764f2d774dc97f35e7fe553f9258f2d93a3d37b90d6f574b79475043204ac4edbd79054f568f4aa9095fe3cebcfaa6649a0392c7f9ead9f8a9051b29a90194c4bdaa2300acc89cd7d135c00eba4a9a4a9a47e480c9bf7e22670228db388534bf78ec8f8abe2e13ee73910eb6892448722d67862405a92404808f154fab357e0b06b1b6cc4d4b27b111c08b08dad5842ce229e8939349eb11a33b79ef2449ed61a82f970a04d4e389303806b05d15151730b61b6358fabc783c4d9e3c302963e4ab16a4313313bb229174b0422991ea7108afb8f4a26f0a8c7956bd50d6d064c1af6661d13f188a94bfc2c694d4aee36c8f04fd52ad481593703aee9fec1de539efce972ef863f9fcfab79a5ac660e25123e14c7033b2192aabe51ff74b99b3a0c43444413fd10fa7c42b80dc7525db4546546e24d99a3df941ce64ca16bdd5f604a824edbdc5a587a21a747e2aa961703a52ede6ae78957cce419db94c7fdb4fa80bc455dbff9b37b798f394967156c118b96e7304df9900c186c2d23126411f6c2e16bd594a9c9c6796220600ce5f2ab5659ab791c9abca5ea191b6806681d108432e53c7878c705ac3e0b69a3249180d57fea3719d0edc712a554434d667c8398559665f0eae00a049a88e2d563584ac4b9c49ec1a89e1bff3ccd80e83e180cd4dff57d2dd16f9cf87ce679d3189166856602030b124a9024908a5e025bcbbe47e00739287a363ee3066fb61dadae889a23d1afd69e3065a765ad57942bbef79229e28a8082bda09967aac2d51dfadaf22d3b955c297da07d58fd45c87e80688b3653b1c9fc3900a6567e62b8e14a0617e8ec76869c4987bc5d7fb6aa579c9b31a7984b0f9c122d77429cbaeecd37fa9574c7fbb580b83d5dda49281514295edb9d154ce9c7adf69171cd4fe3510f7081021538b5d74f60e1b4702b9993b0e8f00cee97ca342053864f9637590b85a01c4a496f8a8faff452ddfadb147a3b693c2893836e696b4b529f3387e0763b594773b823709528a73ae6023376cb21a1838d9d0180bb27a0dabf11a09b7e98702ae412a855707a93eab6a8d87f7072b08ce429d129ae1dd7e1f7b6afeb8ea247ce6c233629882e5b091b16ac6c42869a0418f7fce0eac90a449970c1b9cb4cce34c75389d49bb8eb706ae57182fde5b527809b10ad3c446248cc829bf43ec0bd39c0145884ec7c90e61a7f37dd300cfd95bef5ae870fbbe1dd7450e5c3b8790f88c9927df1a67a0dfe4e89990b1cd4d89e21ac4c556309ee4d7971279271f8a3e08e8e817140efc7169e28a155eab930c89a9a234b6fc030aaf3cdd7ece3e19910ff040de42ed10dd487853975eb7e4d63802254a659f39a59cf6d779100c600f04c1c8cb3da5f554a00250b5314594a418713aab60eee3d1f15a932360490e947dbc9dd149247909327bedec31c70cec677bd316a9bcc70e9d7cd8e57143a444d7a1faff52e6004f595b19c908167f652b0b974327e836a782d0799294abf627a20d4eced50d407271cc1ea6498138702015558e27cd872f52fa6a59f7c789e7c04ddba26259f18f87cadf721ed4aa0043ef014fa840c4eb5f55557b5e79c2135f4a075fbb8f95efa20e73701f84213195c86daf7d6a9dcab1472d93c78eb13e3743c6f84779dacef8666af3f4f510e433be4f4e5cabcfd80312fc96c0e409c9fb0525e9f394dc26bf1ddf8e2f6ce8b38b4829ea337644524e0477ea930e741ce42248375db3f3bef7381f847b7c49abe185d86872a99bb44b48a20fe66c01eca9aa66636fd5a634076c8074c171ebc2cc8c261dd58842c81de863cf845a9d0a784973d17a422033f971c8eaea5f1cce194b4e42d8ac5a4428a27e62af23dd28d8a34d719f1098076c8b88e57551e1e5015a12b8ffd497d395b0297739968366db8b6a4d97a63895f9a1b7fc8ac4ddf0393fd1d255033e97488e9361c669d60fca087425744439a4cf657665b3017d6e4cef687cafb85fcf3dc420f878329f048fa0f3dfb2904c307db391112edb116bd2fb2f4737c12f04e4fbfd15f60c65c673c92c9ae250020542745070c7e4ec3928a13ac48a4911bc1418615dda362f367009288e69ccf984283c0c1af9089801063231eb96b687d7f05d52190e3232bb7c1757cc102500cd7ff8ed30166fe0f5cb7f8f7047320d0f6d779584b196f2113b91479dcce023cf0f062a3d7f419c2d985577d2b45c2f571f85ae0b6cdf95dae65dcf1fa7f19c8f302ce597553861de04d123e5527164f0d8a973ee267c2bd49f7196b96dfa76228c9a0a8664849a0cf517192fb87c240b348cd8e31d94e4befdcafb172db4a9554da361537d8a2f4298be48a1e4ecd5b70d5e554a86fcaa0997cbd28579b25b2a9f4c584d78c865bac071c2c1c9a59ad377bfc8a4371d56cd51f1105e867de97c1251769eacb1c887f4f12080f20398ab4dc3baecc9baf43f2c1a8e65ae41838a5aedf08a9ee93267ddb1737c2a92876a177a4f3322585068a24be4207a1c8953f13f0e1c9d07156ab3f71770cf17e39280b3aaead2bae4a780e11ece8ad9c427255d241a90be0a6730787580f08326a1d74f2d8f004da4ec4ee7ece67d5d649c44c8045f9b13775b08a2c74eacaf6323cd85aa8bb3e0f7f0d2b8b43e46614f3f8d185047bbd1c9a21309f64293dbb6bf6ca6b93cd5c3833e631504106df91e0f309f980d106466e51ab6949843e6917f68ea19dffa1471ab051b529baafe93dade3c127b55697bbf86e7b1840fbf8353129508640738c5f689453f5b8e067385e5eb211d1c4225e9ff6bbf5bb9669f9550a22dcdf8fffc1cde84b401c5f8cdf8143d34ac5b6ecd567bda5d4c0770f8887ff0bab8effd2b4c141172b8581ff1aeff5b2e8cbae4f1fc6cf75cd1772eacc96caef2e9cfc027fe0491ab34611a7e7d6288c8f12c6b72b3b6937eac56d8b40f4e8210f9f476e588e25d93d1e01b780b291535bff6dae67aedeeee19e68829d3ded13bbdb8e88bb873c0705c2aa2414d323a27bb41deddacec02a9a886bea6da8064be0436792095e22a6ff85ca854fb9a76a2eb305dca8ce8daee3bcfbe5c6c3847672de7ff4849102742c0db3f017d2b585acf254c1187f757b8e79557cf39f54b5d55d868efa3ef20bd59c0e125855bfbb5f668f9c4e2bcb44977540c08db3ebfa89fc1957abcad06ca8ac1deec236f210b82e68546357f8ed4d1f57b592625ea463b72aa70782060343144b4e2652b645ac474aa74d5881498ee099f9f80cd15aca0b9d642751e4e8aedf934743ff4e148c94bfdb1d0bf48f0dc1eff23b7d94e370bdbd6502904a6c4cad4862edff3edcc9859a2c467fe5039388a51be6d9715b889283b1c1e366beb2d368981cb56cb498d0125a8a5df1924de6a61cbdad84e6019cd7cf4e86e46d8667ffd7869ace41e0c6a76149e14c57b9f6a813ae67f4510128bac3c8b8d9b0d3a9ed7e9a49e542ce4355c8ee39cabb46d0c02f127c761046d6be841758fcd32e40e59ccb7e8c47208bc1d6f7d999dd38874ac2e4385570ed339b614d6076da3ebf3a376de0209c1b0ecd7b1e1bf58c70db21faf40c67596670925316c3494856bce85e80cd0d331ffc27575ed672f4977c2a59e7f5dfe5ed2e17e87a7542f0704bd0d91d410d034b28ed49a86ea4b03ab4a9213414e1cc7f6dd81ad29adbcc6a4896c864a2a3f45a5e85c75a19f4dba97b6032342817b1c691e9e335f2856bb259c57437debf9d37ea7a18329d0ca549a9b728d99504b1587a3c2c19ee80a2348e668b524b4c3534d3232b8a285770abe96846eb96130e78e10615738a8679ab906b3473d46b56fa02698f8edc42e4389d8d6dcae41d126fa74d5a188bd5c114b5cd5d24188bc2ceeae847c9b07d8a6ee263c6b0f7cdd4bbc2d4bcc9c50f801c5e432a1dba04596b4bc63a2d3bf2d060558a1e6fc7377f6007f8e5071e45e4ea8f54625a7f06d419c7c3f7373aea95f638ef68984afa55fe636017ebfcab0a1a76a7a01155283f3d4f67735778f31af94285bcfe9c73278e11e16e4e90cdf43617b6d8489de2f02b71ea0a4c4ff01ba6794ffbecc80714229644ea4a8424ab37251f68b3c117c500e11dc4e93205c03d4affb9ddf20a987a441b7d375fda1d5a401fe22b02cb804568a736d3a0dcc5f362ef1bb3be8b35d493bcf50b442017bf27d93f8a41144b4041694e0c6c6349e3c1b8c8d5ee33f3a3ba34d2b86fdb8b94695354b350de221a4ad276349707c932341449c8fc37d9080686d15724b800c997dd62d8bf4128fc06ccaf7242351cc730364e151661246f8dd1b3c074a00fc0e61fad7ef9306790063bf717ece33cf573f550a242e9dea1383118642444beac05e8a268718bb64151f6c6ae12893fdc74a022b1cac1c09bcf4fc3baa6edf9f02e13f4ab20d623f8b537140dfe2dc0f3e3e02e58c8be359b393332692a7b2b0930d8bec285772240e77204c9f0e58572e29b4ad8bdbe5c64c7056af2ad9ea1691403039bd1a04ba17529b8dffee99a26a1c61da9567a2f97a14b7966bb99f4d9b52a4956c9257383c8373d21331adcbfc10bbc44cfc64a86bd6982de565fd852f6e361548fee59bcdd7a0b9729647148bab93887756669a22056d623ef55f2b6aa776fd5fb3a49192888f59de2d449b2beae59702e8bf8e6a84496fae1009e3bf2393bb2f5bbaa8371a8bff2c579bc785145e51fb1ec94c037dc9a070b101ea1255cc81e3ca811da73fa995ec824eb185f0fe9180d19e6a4de99072dae498c588e37bc365949d71d6eeb35a216675eb6b283c63f68ab2b876561aa2ca6165ec82b81b8f357fde2228699dde2b7aa58de67e893c985c64fddbbf76b72a119f3cc4750b1592da1f738d0df536997ea4e6e9d0e112854eae23535620d3dd6475c0beb919499fbba5a12a1faaf87c92a636fdb742ab306f38a96bd29fc1e074e79440fda94d6b04717532c5914bed217b93d48e5f3fb60ec6141b8d9ed40d80867c37ff8c45798105499a2619fa3a1823f3882e770874b01f7ccb3865c2c21608aa968fbcbe85acc3ecae46829d173c3afd092c86fac338ef9330139c25ffcda8a5a2128029ed17da416e8c5ddc20e8308b33c327780cc534b0391d4ddc3a1de5720bfb0e579a42f805f813b0daff0e966d9523cf3f66d0c5ae8d62448c38de9094e07d81ee260f4c32e57b94dd3de5436168e2a1187be5c6116fa2dbb17d9abb18834a3b14e09126a738cf853f2c49d2246c499b149cb82d1db8d269ef5de84af25d1d346629bd0ce0db85b3a8174347c921934f6d2730b733f36a5b2b5d84d74b02bd3b22d0718ba91675c1ad8dc1f6e993df74dcb6745f686276683f242e6049c3918af37a62a4a443c2c13e0e8edfaa428f89cf7a1d5cce207cd722ac5ab3c99ee53f7cae70971cbfaf9b844ce677a41c424f8ead78d3016e12e4519dd02ebfad40c6622cc9de1f081f35fc20e57659436566c48a8506fcd301e8fe931f2a0d8886c2ef4344becf6849a1931323980dcd15125741931576cfaefb23ab650c074be72abf3b2e00ffcfa687f73f28450704bf13cb00a6e35f578c900dbb7db41796c13164d9ce8ac97836d9367b3a933c926245f40ff9b26094173711ba06bab883a3c8e16279576e4efc8067357c5cb07f74cc5c631e0024b1657a087cf61feee47dd31bcdd10e8028d9e879ecf59a8f9e6f928cee331f37aa8ddd0c52b59f498ca7c0631da818777c3be24c3c23c1e72013ae383766bfefa5db52c709b564ece5cc7bfb3b4ba50445fea3395e82bab1f7be7293bc72e17ac98cb5c2634c51c64c34668076c42683c857fe9018d09c31946a7d35f060e0ea517c0c99b756f168325e2bd398b011cf3330c0435826e3ee8540ea623b651f04c04ae05774b754c625fe77cd45b5e6a575843e740e5e4088dabead6ac31d2d04d720182f47d40a4ce099a871e6addec9b5e7401d9091938f92c14f078cc90eced81bd5dbed41dd52e8ed0abfa5ac35010f503b3c5aa2a060a9b9299891e94ca7fe41fd863d482fb975926fd1c03fbf9e9e2dd4a09f6209ce01c0499e2e53a3c58309396a935dd0992285015795de2b6a397882920795077fd0c78734dc41849c508d70b04d51d9b6dd48b18ff833456454f06c73ace6a9065a1ef1ea164d6d3917dd2d8e47bb4e0bccf408a802508a7ba2d2c23474437fd82cebc13fed8243e4fc8bb909cff68578ac10469d049573cc30e9713f18c08516f15789387927a2218d8d81f2cdb7d1fcc647e94be5b4c933bf2a750922a9a5a3d3cf6f9f7f3438b04cc3ee43d29834719fd9980a65046770a2a3310ce924bef7b68c9fb131d9423fc53b52b622d361b09c10e4ae8250b1af4a065a77f94114ce4c56f9c5cf0c92e7f8f189810f77325b9110c66846d1953a5af87d0c97b8ac8ef63fc101f4ddcdaa76b176c835f8fdf5849893e39a96be9eabf549743a71fc919cb4fbce2b9fede991414b9bdbf95440e74f49ec415a9076d5a7215102f0a3c7ec9a8bd8d8227116cbc9d969c5ce579ce197dbbfbf973b76fd1e536661f6f1b8222dc198f9be6bc7fb32485e33ea45cee03f47885a007aae5ac43432274a2ff0485dcaa896b687c78a194a39c6c93c7b601bcbb514718f753bdc3c63daf5cf242e8dedd15f3d16c50adf3a0391b4288a27f47cff9ecbaffe913f93987ac912eecbfb2da0c97b086bedc9c9f46d7c9442458b3d01e5275772c02ada2b8abb809c516068271bbef68de48b18cedf799fcc30bc1b3bbf7779be7a95d259bf28dc379ef61b6737c38323f0e823b7b2349a38d9517f0515a5f08ce8a6355c7ce75bda3b0b085b0656877314c88dedfecac5e2a59d0234d54691eb72ef00e5951b077b152a33ed1525cb5e5885f6f62c304bb3450ea58374fc7131aac23929fea41075684a925ac4d499a1941661a73d408c200b8eedf657ed135b0ec21ca3504b5a9f594a71fc4a6adb04daf3e190c14b6c44315c3060b37309018808c24d6ae31017534225f052f0dcfa09d21c91817c06c14c83505b0900ca2dffa9801be68ae41bbdc5e535712a212a5c0e77d68899a50830ef699e99bdff024eca4c73d9ccd2df73c7c2a694aeb453046516546b4d6e5d07544286091dce804c9e8885d0ae23e11a2f940eebbb380583ff772fa0ac9d3003ac791825a2fca0c7d0679e45d83b5926cbd3109432dcb1461344616bb5f5b0e45badea126bf6006d3d6837170bfead02a00771b6086b9f4507242facf7e87b167448be58f39f70403376666c3d1490378788142d8bbe96fbd816adb2f9e5826b0d6896036ec5a58d6cc573df69e3e66443ad595cd612f65b32fbe98039c4c3da627bffa0e7c5db588a5a776fc3bc6717339b0b0bf0571c2c7eca05af7b1f30cabaaf65fcac1fdf15b32747e7a9a94aac615527e2a17debebeea803484df90e38141dd666e142f46ba045cf39b691abf503596e1ed2aa7587ba89abe791be02628913c763c73c1a2ac6b0a3140e9d5dc059cad9d5634dcc914c18578346e6bf93aad345dae5f2c4a4694b3817d570c1156c91777a07458a5c2c2749cebd1a7824ccf6a9f4984a38bdd33af896d2569498e97d0f8b111935664b25dc69e1c5160a104e185d18e9aa8fccfcc04aa939f1b1b1998992a404faeaec6ad597390e7b66ac30794d661b4af2eff6cfddcd3017dfdf9a7f23743c2a9f1b187b13d0e809b7e9157ede19012a0b86581fabecbfc7ee653df885da9960a149a2df0710289b85f0158cccb1ae744bba96ae3c80eb580df540654aa40ad13720472374f703b43e5c29f49d25437d5d5e99eea55bdefe20fe934e81d225d043c9c40f0f58145b341d6e9743c12fc619435452248a6a1ef8c2a4883a55dc3f79e10712f981e2ed437a1289658348fcdf8c2a53746717ff17a5d5a2bc36802afbb2bb8dc14ca6020120ab7f445fa45ddaf3498cfe7751b0b6bbf2bb4846e7a712f942cefb9ae2da744729b6a71a1bb5b13437fed409bc8c5f47ed38dbe94dc71f1dcee270d2da661748a2e8d3b4c16861c5ae8bca9d355f4181402fb31a34ba42889a7c1d0f2106abb8b895f6a3fd885aab5cba17811b2a6e261dd4f2d3a76b318f2e5de18b9666848212750c5cbf28ed02018f25d07a1013bbacd565056c3dac708db3c535b609f191176a7ff3631e723b49c1ad70cc41fd8560645b362ef57d6e0ff524c5035c522e8b36d2affc59c5c4b5e059e718b494b69168792b45231f53d37d9cf2cba8d30a7209ca2bf4bf310234de0f5b96324c2f5acf52ed8b6b9a4699c80f9bdf9692013af921b24a9d2d791ddd23a63069194aed53913c70999f04b2f17a8877d3985e113d761b3390bcd8da92016ebc71ab3b340f756bd9801441e89ad98cdcf3fa9760ca1f098d08443949aff1f842d11a3d92ca31e7bad7b3f2215c57e2a3c33825cfc8712afafec60a3107abba5df1efa8d42245b9b47a7efbe6885c72de70b15a7f52ad70dd837e1d769a007051ab6737d29de6398b13e453a256fc58946a726776903c183fdd377a6a0dfdff0a9af39f25e07f9f7099804354e6d29a678afda74d3686be2c715ecd07dfbcb7561c96968b8c6123963aa98877a219789b74f76992468475857675c8c3fca19ea70a8e84f1e1a07cd6b4cb7b2e9aeeb197118a24b1e06acc2510f69fb6c4aa61dba8760722089e5020a182d3837f8487f182b19b14cde23d7caf3de80cfd833c4c6dac51f26d145e60cb080ab7344717ce6390b82d03c240c177d5ab47ee60d68d8d7dea4cb850298decdb038341bc2327dc6a8cfe4003102fb275ab71aecda92d3e7d3f13035598f7b875c23eda163d5677c24d4c2f90b55df62b55b397c00e20b3c59aa2003a74a52cc8ae70e63ac37ac1b3e0f38a3f62055222fd009b3d03b0c9b24c6c3db42384c3507ca0b9babbe1a22bd632f6b4be1042b442dcd45d6f0e5fbd6a112c34ffc56d4b68deb748d3813f40efc55c8766e2721b7931054255111a1fcc87fb1a9d175b1024659a699a193e07fe2134ef98358b7833486e370cb1eb46304c5c9424e95238ea61c9fdaa62c2bb8bea6483aeb139c9d78fc8fa824dd56abf00745c92c28fa249983c35b174a4debbea6f9c5ca424b071ce7d8d06bf542766908cf2e5bd0c15b459b8f628bd09c1d005bac9c3d65c4d4e51ca2609a312c4162460ed093566658f49bb42d1e9a7e64dc9b3e548d19615c4fa70a5c94d9e49e6a01794f6c4241a35602df4c24009851d36254cd7a053f9d36d6102a2f366cbe60f65192b74fe8ef651e3c7d20ab509c051e487ad0e679a858ec04b9b5b00d87f883611379c9d17e1bc06ade9527fb6693033ce0eb0f2701ce953d995c418ba30bceab606b1d46e65604d5c7b04384d0ea95dc373c1c3b6eb52f5400265830170cfe2da7ab4e396485bbc3df100a05820f26390f9fbb0749b7b9e7c9f3d53f4f5618d76c642ce6b7bcc77457e871be0d475af59fcb9171c2df2c3a3cccc398ec670e4f270cebe91d6659125a3edb78739721a5f0ef7d589fe27239bd9cc075e104892c6ae86d698621202801aa142b6676df8165261c698a14d2d8fc756dd198ab8cc6f41a23b5a72a422b99ea58aef1631605f79f9018e10947d915ab595bf3b951f769a05afc0ff3017193c91d8afd7d675e3e5011ed49123fcc7d2a22d1d8096a0a6a81fce4696f93784085afb12da495884f2b27f21d65695cc2677c81b1d5c6e8c39a03d7aed047468127fed7c638f4feff72e9f221210168b7886df0efd2749ad8da83d244af85895b77fdb4e9903ce338f3f551797b0fc0019f05f6ca106e7e4594be67e24275b267dc1da912f79b9e66cf326b5b7ed5ccf570b405de4b0d1cfcb44c77510a6b870ea6a145a2478b481154c46b8b38b532ffb0248a0ff078f16f0087f626dcf81b12f7bf4413a3ff16db6d9853e46671f0f6745053e85cee2f3e76ad76a1a7cdabcfc0244dc560cf0f51bcfd357ec8d9f5ca6fef23e0cc903421ecb7951da57ad19c56c5aca9da0d13a27984b37346d3fec515d8439fc1edfd0530cdbc35ef983dbe34901f8f38591e2bfb20026f811e3872e428d3824d6917c5ad9f8d7a7d335c7abf78d72179f1ce46dc54d046c56f28118616bff693ff380a1fa1660306df471cbab4f05c64a2f3b4453ab333fe5720753f91c0139e38b6187f7e84f8185765a53a82211e2caa00f945b972185ace20dc3fcb7ec4868e95797b0605661e066618f08a69a4cefb45cd587dae2a1fa77b9943a68cd0e1dd8f00ef2e773ae61df671d57f1d6c6ebccfc4484154867d363668579958bf81c1def3c1b73d1f090f56a436710021adb4b03df62f03e9acf91f047880c2e99d8ca6307a0b1565ae42447fae5746589c6d49d97498d96f5a93d042a9af90664c96848f1b37195640f42e3b6e7366a44c5011de54d3bdad0758d521fad17cc69ea6cacfb1ab95cd867d20d4fe4fbbd2988af45d438c4ea813b6f649a459ecf6a663baf0f9cf1d8f5d26d4f6012e7c1e17ef9a7c5be58e6fd7509c711a632befcd23bf3abdea5e769b19410ba13896650347cb91395677277d1018d53d3f153e6a0a416c61f35e76b2fa80a66651aca9feded9f1902947f86bfcbab4a15e5eddf796cc3ce3db15d8d10eaa605e3e0ee7b399f377d8df79a854de0a2025942c1a61430c19de673bc0e588901d066e752fc213c47fec1a0dc0dce3e95c0797652dda984cd0a9b22fc52ef737c66b78084ce04e805b7f1db6600fc416c0c8dac7a76a88d77639acf2e21b3d17b72da6630bac8e4f487f9e280de0dc804aa4d797389c654e89d39d325c7b9b16057101d2c813b77a5de8fadae78f27f30dbcbc73a981cd0f9ca8f7bfa4f948f5ba8522ad3b986d67f3bdabd8504f46ecde488e837bdca23ee68400e711bdce3d74be56118dd06ce4f2eaf7b8ee7d34470d5800f66fb04d4853de991e506cc6ac62bd556e3bab1df5e04bcb2ecf54867ee02db69097af3e57ec5aaa9616ce0567df8138d9aed26e09431dd4bbfe82929c4369279810ecc9541515b060b0dc69772c0d92a62bd24e950d4e654cb9cc68530533cc951a80ccfd81dd0d889d7b8554cc9bff0e36e2f01c0c4eff4339e480c80d46405256ed9009f27379ca101a445f8fd7472a79dbf01a0c98d675c63d70adef9bbd360dab50518877629dc4dd3d66bd89ab2a0af5bb446b6d552b74cf6f5b301b003a98cf39e32ac90ba89bb1e0a9cd7ce6bcf17d1c9f167cf30ab764acbd865f74bb1b098b74b3a47a49a6210459aa6e4112ab364691db7e37bcdce8342d6a911a7529f9ccf19154374a1cc377d2fc33b3acb1094d0d740ad3234f535652091de18a6ec6998114febf19205486c7c02569ddac73d35ca9bab9303e3bde2147e344711f3f2a85e5ba174532b37d99d217cbba3c40315e64d12dc1e04208c896521bed789dbe224fad1cd2798562ca945e9085de4801aafae1541dcb56efa5eb6a044af1f7e4801dd7039baeea4600cb154007398ed6fa26a7bb0d4ddebac9bcd01aa30e680f5970aa280b85db804fd60714aa619a348bd7a5b123d7ac8a03cceab163de5dcbdc8b01be96a6bf32005d5b848f8c75874fabf715150ff793ed2777151672b1c25049694d7437f87e376a6840d98dc332232997fde6cf5e9ee5f1f39869c2c943984cf64a33d42059d3ee3bc43f3b675df95030c992f3c1a61236bc3e67d0a735fefca3829343495ff09adbadad6a5eebb1bc0f55c9c3fba29bdaeb8d419a118eded02cdf25c9f0860c9a5195844cb60126c87b0fcf733e693ca409e8c37da663865188f2b558fc53401890feb42229e1ba7afff45e0512577b2c56eeee21299340f728446643a6c6b1b90f0389a91c5beb792f66aea1857642545c41bf1d34e7fcd30630af4bae95b18ca88dcb48915349e95389484d4acc67579570f7ad23586b41ced802c238c96a6a92c4e2b07e55de8375affc14c8e7fd87415e64467d7540c32603ebc78a9d642b29c8e9f840967ebd60cf071c10aafed6cb60a7c66ed6db5d4237f73d9fd1d9d42525f3e8e48746e03e095bfc6980915fde673d9ca7929821acb71452aeb4f6b4cc106fbff6fcfadbb9bcc93e22538d95fd5733ed1270bf0433ae04329de48e5a4da002eec1b88f8f76dc2c6b526cb00773384e085ec62d1d133211b13440894c1af375ec472cab81026b5979c5b1ab8d0259951b5b25fccadb75d8a87478151de1d86e492a2aba1e050b3bcfb06088d4f621f3438a7f9376e9ba4e4e2a750496f0898cc07156f19f1304d773810736b572816ad7113cf1880bda75eccfeee81b9d6c59309bca3fd2de503576261de3221f37f603e1449fa4444246eb70b93f67f626f37dce8b4b432c513ad8ed6b48917655b946b970ee66277dc4dacadb0159018bda5a54702af9d79656a3f678bf520ec57ef9018925c7c532e6699ebf0a3e436b7092d35c78884a0c66a5725074a31256616067a5d9a25aa185fd20b1032816e021941ca1723adcc4b83edf7e672d6fcc39f137936f353c2a4508524ed8b45f85f8dc24cb087d867a959024d5e907725c474ba9924b0a810b4518708788e606e5623b70bfd6123a23e2844c00db7ecd2e21665b2a2848ba9a47c17b7101f72fc931fab7923a98dddafda1312ce61cda922e2ec6bd1e6b6810cea5d374d2df70952d9bae907c4728219c4cd33f9e198aec6faa7aa2c3192581b13ef059d18675d54789a78a79194dbb757d55639c2be46f52cb126e8cab7aa6883b510c549a1913f675dc8b85411adddf97950b78a81a7b8ebd96129838487aa624d43092b0550b239749c5c80e7cdb0ef59e430bdff8c30d938b6e6cf37e96a88cf27a647ac03a77673956e47e614db6270abda51856ef1c60f894f50ca2c14202cbed7ed322872e9605adb7456ab5876889becd4a8ec3c30a1c444328f39c7d40935f4cc4e4deac95ba3c7972804a913db776e4f73bfcd6f0da56ce986c2cc98e3f8455ad998513492ce9ab4e07bfc7c8f0ccb38583dddaf46507cf0ec1d3f3682ba2480900714648d36a00de0b577e19d8f05b7f83a9a54033ef629204dd8fa9ca0850c62a8ed9e26ebe60d9fc9b65e00ab7099af4b2f979adff54a9fe42bf7e3952f955367b0f67fc305effe0716a3d5b10ebd163297750e9fbc7562dd4ce3a2029a1588fe58b13f17f02ec09fae0a4e6424063c44622488c2e19e3371bcb74e6a9ae302f3d845fefb7b54e8fe15ab313ffff30966af65c2f2606d12eedb29c923b33eecef01b36ee13287eb97b374f3e855565cfea6b508a2cc009f8f73f32260319717ba2d1d8e0a481214c2bc895bc9e9b2818dc39485a3ed55fe22e1364b6cac9300e45e1b310277a277d44c9a6196e8c0d9594f91716f622e2a3943d0955d97996089b85029b87ab1d28e731afa669675a77fee0c046655e9c0aa747562f43aa046fabdaaebd17adb75146a38b68015720b231c9a71e9c5e2b777313030cc20a27dbf9e9d1885323915a99aa618d55fa6b82ba5c92529441a930078312c5bf6ce2c6b363c4f6e3000558af81cc6cf6b4ea493d9228e96a85982e6001d9a9ef8e65f6c9d5f782738f1a7aa4b808d41bc4de03c2d8de64c9288f92fe4a86bec7b2bdaf4942de587ed40794ff3472d7add7a9e979648de03b53f0417c01e28199831a2f197c309cad78cff9ff5db17237e717a8f43c4042a907377775b8c3aaa61702fcc53806f1ec82a6df0d39ebfdc838bfe0c1fc98cca07b7df6e35d599664e33d968b5f0942b6ca0d21d083febf30a407578e25550bc8a7f904f72824f852049f76d755bdd83ed90183bc84e0d08040f8131e50e9d7449294da828738da74598996270157d1505458eddd1fa7c47fbf72516d5d76610e047fb57b8fb1005789af6b505b082d5904cb16c224ce19633caf66d1d95586afa15d8cd36dc66e530adcc5d8b2abf92cfaa43d8cacca80ee1e93c39103ed9a56d1c50f2057729f8677cae4c1ce1467040f2db3a6af445dcc8004a1c0b5a32ed23042dac7aacf7f02e6ac997c62d0a78fbb6b5125bf1499a52efdc2015769a80647b8a625e442da43fd58a93c2a8e47b73cc46e1fa4c30ed173b2a1acd67ebe7d171bf51fc5a3bfa25762c3b2491b73ad51090f1a0e5bc0e6e2925041cf0ab0d2e2e063261652edd0c4d6aeae7f84b6727d0dac0f4c507db5fb87337f383d8589a06c03b86cda26df5d22d3e1f09e2a3df4412b83915170212cbbd167e96f8678dbfaa762bfaccf84bd7f5262522404132a8cee34ccd98df5e718f7a1b0d63f4af11862e9038ea64c528b9329ee0a40e1dddb867ec7742968489bbf3df3d37584b66d388c5db866e39060be3fe8cea53ddfe14db72817a0c5ce5399e9b6ac551d10b33d5ac945332c91ce45a4afa007cfa118eff4e0dad550c0ef1b3d88a42866f23ed25b061b9c82803aff120a7a1e9f4a6a7acae8ab002aaf597fe24da662c1018f8abd7ead0052268b439e12009b47c095f542dd75bb5808dcc61e9ef1dad3d00328bf69e1a4c4ae9dfd8914dff773ecd33e0eb89e77cedb111bbcffc4bafe26fbfc7dc7200fa3f1972320abeb0e32455f8b57e3a8de03ec3abe50f4c1572e7ce2499e1278c0ce5dc4535b3459e61dabbbd135260a66d4c91b308cae25eafc4b3446481477481f9816d465733ae274e3d55e1085b310c60879b7917ab486af584f10bd99035ac14381a59eb136e9585ca12fe8a68c37b6f4920e2e0f80b88c1825897d1a532a97c1ecdade1105642f556f5d0221c7b598b22660062fbc5f2ab019a4f933230edfb3dc09f9eb9561b25f555d3651750d669b6fca34ade5af3ad17f90f575f7d7d4aa49ce2d9de4c834bc8d82c503a19a8f2239193ec6821cf3a0d1bd2764a5b421889877f097ade4a4c98ae51889f52d4a90ba3ca294fa221de2358c72807a62660a548e1dac6e0374339090b8556c25f06e3976d6bbc783c5c7a40769c0725bff232cbcb29d8c973ea97c290aa995850eace56316670c1d8349643ea5273942ecb110c4ef7ca9dec64e06c661b22afa8366598015a5366903af2bcbf023ca0fb4d58ca8c8b128382c19a907ff6341e2438f47c7afb3dd0a572a73ae2d29441fa119355392bd122c3149fded73ed678c206dafdb73e667e095dc036601ffc7ca3652ae0bc1a7b08b9e8ddbf82d5781562c08f9e66b361b7639c831300c3609872e7004509d1692f11e9fa0d4e5d116fbea6bb4a1ead41607ce7760394fe9e8b10f934583e7e44a21f1a1305ffbfcd6cc2f8fea9c102783587a8ad0a37acc7041c7f5246c75cd2e688055ab38c75d80cf1f3ebd8f87b31c5e052cadf595a842596de3022a58e3e79372bbcdefcb78367493f43246c49933508d4aba2c8c1cac32584b612298857d39cd18ce09751bf881f4d27f976236e4c97ca12a9b195e04c6f58ce517955052badbb53d054e603e79932bc0c31cf0fea63e11e0f32f135b4d8c2fca09b310f994daa5be483c7e83359ee7149c3960feb9a05c09e090a28e4914a481ffeee7a3f5749727c603e03b0e138c7c82650f578f0618dbbc46ef9d5e2d2c798a01cd7a607883fa820933aeaaeafa162779638e9ec09a10547ee066d021c8c6f62853f6a860b7d9286bd3389dcdffbd769ee30797c4235b5b5b86990a71801f2359c1a59f56854f39c81a8f47af8954326a5764c3d884fc264518e0150fd558e72cfaf2eb8aefe01ec212ce091f5d9fd8447d67751490fc5d50550f0228e6f460ccbbd4b4b3ec123a15f3f0f1cddd8afe681cc62dd2ac0346f0091d6dbae2b0c5f19291c987aa5e02a243db421ce12995d89c03e272c42f3e0ac61f0bd51f4e3772277cb4bf46f1b19af805abfa31ee9abb291be63c97a66e73c0b3860b7117402faace2f73dbee599f3a0e7e202dc58fdaf51b6ccfceb3b807635f4e8b36c22053f851f21d12555c0e5034507a153c33490d54a5f807e79111d38a5768d23f7df9156a65129a7a9fdc4d4410afe1969b72ddbeb0437c65d036349d6abd08f78c55aca89358cf660499a53a7b2ed84f646cd2bb3d1b985e66e30333e33d8fd061e61f5bf85af96ea93c921e1b9656a1756f2cbae6a49d6c9f32a7427d455c307214bfcb842fd39290520c56fdfe79b107d804a60976743cd0858cbcc0600c436d16fceba079f82ef5c24e9d987415f470316bd2401b5514b0b745fc446386f55ca8fef41e2c6b9a7b158835824fe4dc939f5dc6716b4949d1b2c3554756c75f6c264e3e2c1b7d60e090cc169ec0085b1e1389e26c6fa5b0609e159bd6ee0398e7887cbe7d7e3330fb25474da9545d37cc82e3b82bd5d4bda4c2e20529479192f4840e4e4df66dbe9a98184968b6029fd09c147cdaf80d76c80e45a8476ce4b07ed6be0e994462f3fe611714bf4f686ab398462e9712e8e83fc7cc10402173094d1a3adae4267e8f35eee978ced46a15f767f0f43669dbad842b66e93c02758b242bc064326b606833b6ec1c0e9da4ab8ac87b9ab64187ca27a557f150cfd4e57de987945b88191f71ad70b1588bb904a37ac36c3746c84a402809318d26e22d65e47e08732ba96d7d1ccc531e38bf8b4217b05f8e97e878a929eeab8130e68f5add15bb458a7f7d42ff9a04aabfb1bdb3844b6fa6fbabde9d6f60b6f3015c3330d77d9f9783d39661ad35c5ac17981037f600eb238d4a89928297fcb25fe496c9c32f6f24d366ef0ff3c0b6687d0d27e5f2e86cd0a5fe3abdbda4cccb2e47716d9cdd4861effddf9621e50ea30d70b27c6debf00cd6838bb1403b5d70d8dfd843358b5acf88a0d5f6cd60afb37b0253e692e7a0f65fb35e7fb46cd831c8dcc2a2c3bd0eb67a9a5206203b81c263b4a11f275b57f2a86e13ed9f431306db547649682c97ad4959b62833972c13fd1563625960e561fde200ff21bfc9f4c25d8b4071392ef49082c1bf478646570c61cc1887c2661c668fb57b48c5f8eaa431cb340ab66a8b9dfde25614a7ef601561d72cc2a485b9054ca26886be826334b97511ccb8e2c401f4632132587337c199b9200afc7b40bbc10c0d5eaf142e4ac4c49f184c2b184ca86f7a8a5cf153adb4166ffe34f30e406119bc98716ca6ac8b916ae1927eca66aa882b2d8ff5f0befb9c37a03b4b79e533db348fbc315b8369c34cbf122c79f7d69ff2701c757cb8f916865ef80b0dbad9928606b41f236006c579d5d91ec6dfb1cff2991b290acde10ee5b795d0650780c0197dc9d999e19e6bb41aa71b76ff773173057715e7ef7c8f7e1c12549ec0683db50028ee4cb019612977b6663d8b373518ec0de7074e2580c168d82d30422f87318c4630b80d4e01644864d48c1d4ea3a62a358007c4d1902f82d9b755e5161521d75914de57e80ce8aa3e11dd3c232b08700bacf4a7bf96240b5b5198a781edc4f387dfc2362281565ff9cc1673b5351841a2cdb73be482da6a7f7a29d1947f9eca9ba647b3090bb83aefd792bc2865879e77a009e315a49977169822ad656339e8bf5c4f2b3938f9d16509c9794923e3b0780647c037c37ed9e5067940dcdfbf01eb63545aa681565e35bc6ac705e6379b8db107badd2bf61f9c6ec0e7e5795a50b490444b0918876f76c4fa0b97d9c875f7815b110a838cd73fbac545b66e3572f5f468927c7d537603bab1945a22a12a37613d1e2bbe94645a0688997c8142725ce5e5a2a921e5b961ab534a4e1eeaf676e93c0ec541795354325f38184b0322574f4327b2a7fd7cb0eae7fd3f6dae9db12023a050024bfbed0f4de0aef90b1e1078afc918779d46da9b25acc7dcff15500f6b47404d8dfcab30aef726b74351877c89baeaeb232093b84b946a91c32da200bc4ab1942f080d969936393b2db96a15da62f3d786cd86b7c61e3838ad74180d240cd01e87dfde992cebc8be2761cc4d733ca9ede169d5ac7b94c2a414e5eeb4355d7755259ab713410e871e8b121fd20426956d2d5d603d4f97bd0630334cd7fba386ee9fb67f7843eab76882d8c0dc4be7d26299e13de3b270bb8649cbd028a437feea36500b9f2d14dea1569cc2fba3341aeb249f102a58a134cd88903bfd1dd41351b45975ae0236119d237880d4307db4d52d62b615721ec2a99a52071e3501914bd9b690dd8bf7bc06e804d02d519bba87bd56732b5c993b265c01cf7ac6ff7afeb0edd06cc2a0c4e97fbac986c23039d6bdb96b1594122506dc1820101aec8725e816c2c7a4115fbb00d41326f40ea828d524ededb2a1260bed23d8865792919e8d7eff66841de0ac8889193e2ad5bd3dc7bece39bfb17598af750569a9799ff17f539226c2ba21f5d854983c193cdbc0ab8c023af990a7e285afe0c12cf35480d43064cdbfba04df38e4afd16237ea804c370c8c70f6ebc960cd3d89422b6d3ba6801a881c9c0e9c4b43c46b384aefda4fbcdb7d7812f77b37a511bc7264c3379c2f167097fa645fd01af82778f70f8cd674a573d64a8a558d54b68dc1177a5284ae6dc0209f67d7bbec7128e2586e0c50454ca47deaff99936a5b478e2745b36ba2e47d03ff5c5456ab2549ff421942b1769b00c8631074465c94af6978153b1dcf40cc43d8fff31ee466610fb4fc136ddb8a90829681aec8a09708e2f2556268bf912b80f3b894b8042bebe8ddcfe6ba9d0f5901213026d38eebfa6dc3e82e2b8118a71557d57b6c3466cf7a605ddc6551e8c53f3c8febd459f941d65701b5ac53e9ecf8f60fb145dcd8cd3557aa9c1c7272c9a0b9588ab53feedd4b528bd21c54c27578c0efd7d3fe4cd7285cfa539bac7a37963ecf38c698233b3b80353419029e52dd7d2681f3ded562593b94b1420bb0c3b69707751b9639968e51bb4ab6c597a5d35bbf823494bf481e11215e231516e85f09684893b65c3ce6df7bfbc40ca88a50c1928d24d2ec89d4cd137345bc35a6fc9d1d50c2d998d4630dfc0c0c2a2f92bac48e17fb8c2a84d7fa2f9a66b1e2b26dfdb7ab35aca1f59e7de76c1f2fb5099f162d1cfc83cfb115ba2920c11cbbe0fbbb0b92e9d148f1909759b9b04e31d2cab7b06cbd090c47085a6b0e5065c6abbd267dd48b66474837c996a13d8b1f2d00613f9a81a068571bf8e07b99ec7d7c7a27728d8715d46949cc950eea4bd57f3e6b26a4e56832c97880e76e8e0e49b84fb17ac6616e5e45da991ff48d827e695759420553ef0bfc6101d70f9899230b540b4ce8d12f71d83bb603b81b20b10e3a8d77b15f634714b9e859dc1536690f2b9c3b5693f43b75cc38d2c1d890c074a55346ff8fb59c19e5f8e1d0415ef905d13023454fcd5a27a7e7bf9948c482e0927f9cddc35c925863abed28924ea3fe391fdaca24584e0fcc891281115e2986e8f60909447dd9e3f43b89f23abce7d6c90e986c54f9172532a32c0ff7f980371895ce59df519b4ced5a3ca6abf11d31358bb3492219c7bd1e47a545485fc529a331b7bca3e483f0899f4cacb19db8ba0b4cc597075711c845178511b69b3c6b0121090c5c9d009e26f493c638e051ee796d8e31933d0fc71590c3b0c76b1d29205bdc2ea849602a7981fd7bf69e939364beb765f0f0ec17cabe389192a04ca5b51f515530b4323b134228de4572469e9d2ea09ad064e04dcc016a0749ea9b357c8c783a4434bd6c4ce892af6d69833039310449765161af549a66b8abda73f967a04286e5d2a5e2ac8c119fd9cd1420203992ca5ca38cb92e38a2f8fbe5ca4d8ac70de9771a47603f2ee63e71191b5b14db2f31ac776bc84b4edf9ec16ce37bb743f26448b8ef4ff006c1aaee3b9c0f95d051e4b1ce7886a8780fafbdb7edd1b1aea89142e437c7688e3b8c748d4d548e4a7b02014a5aead3986aa312be7a3d4dbfc58bc01a246a7ad0958528f2c22b604c8dc659f5158dbe2a80c03a6ab8a1d3a91d5c5bd7718283d132c8e5383421f9655764a5ccf9f8bb21d7da776639b1d11e688346316613f563427fd15651c6d8761a81ba606a06fe4909d68bfae4b629202d7da84f452aed43be7bfe9eab4a391bf73e4d99c88b1574103bf2fffacb8195ce341746d2a7f96e6501947c9f3b5be6411dea256eba339a56d784d9521b3bad3fc6485e0023c0d06eb3402959600b2fe82f8e30d05fd116a16a3a0e87a4b1998e507622e7199c1cecc0dc8f7b4efb6f1c8e75e5d6b9ff6aece9f432b72aea8a1e235ea67c0a37437e57e958e79eb9d012709226dd583a0ecfb643ac36088acc878fe4a13e87072eb702b21c10ab7d30d8d5cd7e106bae2537b79c9cceae4aaabf6518c0ee46b5f4dbdb791a0cdeb8483e19ecbc889489a6ee92d46c34e07d481ce2324de2fb79156ab42c791f344c11613c5628e12d678487411ac1d5edbd24286dc67555b686bb99c7d6ccbf71981f33679b011bf3e1c07dbe8a375d9b348190a086f6e6079994346479c0a9c9881f18fd5852935ec3dfb51fbcc85b13f8f6f5b7891e87cd7ec3c7ff107c693abd0c32b9b83edd66da5807baa780cd4e4b433f4f6657e0bde0160d1342ce7820dc5ff1ddb388494eac0dc65e11cbcb59bee0e1dcbb196e7631570df26839abba40cc37d9976b97f9400d410fae1975f5be8cafecb698c15a5082f33e8147e4ee96e4514396606c199c722946a9ff8802b10666414358bafd18a7b64a2625a382be39a1b71dad69819d4b24f1094002eddc5df1dd182e8d504cde1fea3591f833eeb17b347d72e611ad22ddfd8f01ad98b62c823c0d8bd3de2ce49f49f8707a610fb28ce211e48233c782317f9f3ea9d959fd907f954493ef05480b7193b62401f3027cb0c89d5ed7f41f7c234bcd9701bfb073bb2753ea6095d2df5764c8db6797c2eb76d8725464854bf386fab9cab7963426da4e49ffe815eb71d877cdbd7a2ae858389e088a258b5a5066e67a97589144c489298586edf8bc204fe83435f3582a2bd7e452e5272c12292591be3d655cb7129c1b2b052ebd7cc3422308f37c904e89e89dba3e15c2a3b2a4b732b7471fe6bc9d0b71825af924f2d63ff781f326147c52b5bd5a3f6d0810c7d37ace33152c0d7c0e93ce09185c23056f35b312e1f2a74de00e7050bcb8daf3c3e326f97dc2abcac3029ae63c80eeab5bc7b6fa58ab18513219ce4115fbd79f0a65c11d16ed6c31415c183751f0e86b6251bfb1e252425574a60d2cebdbe52349026f0cfbadae49b8f72fa66966a73a710591e6eb046e6a7b814cd71ec6b061da67b3168db77fadfa9661f6495a91212df054d52198966c15cf8c9e8e003fab8e0b648bf89af909073ce4d22fa252a34d0f3c22e2573bb91e8b7f37fd336880c4fee0b673c48047ec5c2187e7252c7df714da8b2c0b005e4eb61ecea7c7aa7a1a85a0f7b2459e78876989137798c57421f02c68d3e563f74188ad5a9e46e74a6901daf8989d103735ab76ca7cd333abe0e45db825a04a2bcf90307f7b671664542fa7ba90576704a0f0721c1823d8f77d641eebe08c9dd3b6e372f6c1bad10ed06b7f558f1b53b8491abe6b6764df07292ce2c1d0ed1cf73332d7634fd675403bc381205870857b53e5348228e176170346ed6dc17760b1276194f44e2ed8fd413d894c3fd96e9e14162940d67963bc2cf18cfd60540f0ae3d17967eefe4ba4e2f93d369831a30254cd71d51a892df03f9e03fb63fd9850b5457621ce2f8a1a05f54582f00a58e19e139e7f687db0659a3363ad945c6fedcbbc575a45ebb6565546e3fbe9b7cac55128e843abc5c8f0a8239ad4527d195dffb2b8d26cd85f4f93199fb4192b6df618bd51d73b6f744c0e452182496ef1edd60fe53ec371458f98a02be6a64af3af36ec73013dc9daccf20aa0a80d13736b53015c1757d1916a4d32c6e28cd7b212dafcffc4053566972992558c69b5258e7065cf1dad7d4b36f70e4829f51ca0f8bb882e29955a858c25a6a84c1e6a10d019fef3a1ea61756f306ff68258e09c758bd0d19d98a4cc1b36d0f2f2391d88190083d955b4111fb33d9bdb588fecb93cbeffb64d4e70961dfe60261b8e0314b27655f6480d1e60d3766347ef6642dfc8745b91019218664ff2354b2665b3b5c25eaa6f633794137263e00c10bd4c854e1bbb34c0a2d54a29d5219372a699e25b74894fb538c37c7da2675b9800de60d78bc6adde51ae6b78d19b66a5a6c2f460723760d0b81a1cec30e63267cafd7f78956373b614d4bf4ccc69bd15cea65f3c19df694dcb7af17d1405e1b8ba93902a668153af88e6bbd1c71cef2b7111bb136830fadc8e3cacaf48282198ccd3c1e2ad13c3940997f5e3803b7ca6c15bde45a1663fca427fd5148cd003a2f5144a1aa9efd3890e4266eccd41a17f9aa79539bdf63e03f3b572eeeba2a6b98f35d321c892d0907dbcd5afe892c69b947dfe8ef937e937b09c45bd0ef97273a272904dabcc3baee90ab9289dee46b2d0e69199a6c597de71fba8ae61ed4f901d6f8fb472e1e464a5bad8472266ab06ef38c3e581cd596ab1a6db9bc7e81117210f2d16354c2c197faa4a6128dbfe08237394942def7b3d461a5e526a3c5b0019c03d47f91c7615179363cef78249f2b2e34a09f202072d3759262ff221b3c70bf49f0a11d18d13ad844aa36d4b8a5a36bd961b70e6c2ef2c8fe711bcf5a43c25d7b495b74798b797cfeecbed8a3c0e333f88805824374ec2af8d1ab632be3597da71805842c0947f3963e0f92d3ad5e3eed4fd0cdb5b1530709d54cfc3b953954820b8732c2f7448c35ae5a446fd1f70630cd45f3f32ec8395231db6b5ab330bc9b353dc3e02673efcb7f6dfe1be1b6fe3841af006ad10b48505cb0fb4f5f7341203f5577788f01949849aed4110e4643d6b22f9d86066e3831d7bcdc50d586aff45775a5d513ac7726362fdba0ea9522d5f7fcc21c6d7dad622629ea5cf83c3e85380e6e4f9e5de964060ddeca260616c3e6fba80180521a61c9b8f65ff2b83b60886575752e3a959e9fc9988a263aeaac2223939eafc3ad677cf286a299cb1f8ba6042545246b800976afb2fad5a2c593cfb8c801eb512f70de318db21cab1a05c4f9f909d6e7ddcddfb34cac35d6901904536e528790c8cb878945c544fd6d98d12fec8e76ab5651be2060ebb7aefaed59e1e18437f070791add1cea0ae7d5d489f24e7a542b0f94088d0039af88eeafce01f8cae1e0a7149f05550e386e0d8dfe2e83fed3db4e9dc9b269c32bf07094e8c96991305519dd318128dd4bd606a1b35f092330afc05056202e053e39a09ef537c6400c7d561bfef04732121d0dd43843425f6d745aee898f7fc1f4ed42acb4852d258d5149a1b34844d3c38260b83551f2d2522151979ec8f2285ade5b057648b00830f5c6436621726d111bfca80f6cb0393f63cb76f607e57b299c5d8c34f8c968cac4d5f45c14242bc6c23689a8e432e7fb58e7dac1c16e99f2ccc8c41577db06a74a85a7791616ae8297118a7d7c190a5e24d556c37f404f2e70f024500a634a829ccbecccc60e8ba9ba985950ace98b457a00a99a624d0e608e6a72483743348f22a26c29998dcee2cb08c36ebc92b249e8451f45cc5df7ca38c032b2aba4dbfd10abc949354eb8e87c26cfbc54c65062b7b1bb7502e3669efd1d65e5f0fee5915d6950a60b2e8fc2eeb6567590b8dd49e2341a394beeb2eea17275eacad4eb2e09426a27a2e507ce9a8d84756470b16b144283cb85b88e088f56f133fee253bb7cc32af929e8fc7c55eccb147a37d38273d3a42eabd9a5b8a43d0b5a696223d5656b9ec712c0da7bae33844ad24586729181025b2bc501351aab3fe2ca95522ab82de6fd90e1fe436b622003ef7ec700baadaa5d33c1c39d3cd409d71145040e4df14baaa8ae4d1055ddade0c5be12bcd2d446e34de1ea16de42c166d36d5a4d927252434b1c2fabd520f4588b0f7c0f78f413b5e92c0ff158b2a0f31e525e0e6709829d37caed99ba90633640c08b795ea4481298c3c24fb1544af8edf50f1e2ba2ed2e04916c1d7f1087a8c0f8526e08116b62a68ef5705f937fb28310e43e68b482f5ae9fa751dac29db1e1ca6a91596a171e301521db2c7b0499f181e16d45175a47812c765c296e5ed7bb19a305572edbc5a748f191d0c2696d73ee1ea8b5d860618cfcc503c5ef995323b3d3bf96d034631ae77d16a51bc1a20b5e141a58173ec9ff73e1d2ebcf9514e0f8ce7c8d67b65cccdad8786d251daa1448567fd8a9172a633ab9592f578a5248ab12a8c8b051a1004100fd3344da69df4b6247ccafb159b76e663b7db236f693f5a1e445fbcc5e94d9f30493bd29501cdaa832ddc0db98ca672de37dbfc7cb220a2639404be2263db88bae9e0462638cbf37a92f6a243e2f5ad1968503403da20c9d18cd90b4bbdc642e6aa29f804943e8e89f0bae62e016970f8590d9e04fc2cce7a40c89da0bd181249f3cbdc2583df43e48117112f1a9585d134bf3a36636d9cb1f47fde111d4d60ba3e417f6ecb2fcd12d4998a81716b8443836d26d67faf4a28b6ff51f4df71dc37a580bdb0898ceb69f1e0385a10af5fd93ea7ea9d4bc62adb0025e622cd2e72639df36e09886750b93875677c2a9a4d3c2aadf7759438a3680f58a10f6998ce799076eb75562bf9815eedcee2278217be172381d557b138f6333d94c498d3227b947bd356ccfa88bb460885e6af223da38f1ebe51f4c55c9517570a18ea107f7cc5860d8655aaa18d2e73ac63cb30e1f13c63063bf447e73fb972b038e36041add7344393f91c14369db077af8b4de7cf2c18c7761cd8c4b09fc2315130300c6007e0ece066e79609cd0523fa52c68eca5ab622648c8a3ffab205627a235b0502ffa7b59c79907aa68747cfa712292d8ed37e3b8d25c8fc3c18fe8a9224c74dc2860050ea41d90d2dd4fcc5a2fd632f66cc1699dc5ca98f9c52ffcad1caf27867f367611447c52caaff966fff74a1614adb9cfb7eddd03000200b1279b32cb570f803ec5d844b751ec1258f6db0cad85d514b04e4fec00a0be60bc335a7be2d2bda873a09d25e196b559d993850ae7b30bf33055582eaa80dd86cd1de88c36425f75d956f57de0e4b1320291020ab20064d998fe7e73b07d560316b7e3b108ef00075b550ce0a0ec75639d8faf7f1c38daddac6e077f89babf86c18d26afe53ec8f7a65f3f6e1e5c563b50b0db89c8a3e43baf15ad602a264393061ebc12222554ab031258d6c1e73d54ca31867af3d9f8c33c171b28c8c28f45aa95acb95b3af7f16346751e2513e1743515b9db5da3bc445badcc5b661f376f5a544f90b805cfc3810205654f13928c1aa798c1ec5f7a2cf95184b17b34248651fe84f3661c0bf66f870f3f239266a490b9b449440858bce3bd360a47c705f5b50215da86eaf8c880e69d3ba939f3078dce4e323dfb185b0e992ffe181b791bd8af429c7e58f41387e86995bc4e461057034318271279bde18666865105e1cf9d9d52f7bb3a274446d59370a59a3bab04736cecf090538dad5207e728939a6da102d2d86ee7f4142a70af01c8d0e628141aa88f1aee2a7c96b815ddbed977459ec3500f87a7a3e36911ee10ad50831f2538686e6365cddf2a2e8a1fdf21f6b6984d6e17824c0db7474a7ea2eaaad0d676ef728b0a485e24db7224da733c6fd0045318c08409346901daeb2845bf80ed69c6a24a9fde4e2cd7a0d5bbbd733de451a363b2253de45a1840206a7e2608edb2bfc10493c55f3caed9d4bda662f425b0e9827af42a1221f13d2a98280e048a4e4072593825ff24e2f0cecc9aa48b75fcf47a46e37422989e13584bccde2061eb43b1b80e1070b6e539e461e5ea694cba57ba677c5712c7e536bed2c1a0c8e072c0689cb0431ef009bb71718ac74b7761ab809a8144ba02f1d8189087bb51531a9197830f0d0f773b9b9cc4a86340692ad14b42c896ad66188eeb7685235039a25b72daf7719457d761556ef299fe5686015fd71802deb1b95e070f56c47493a2a3c67c3882cac7abf774ccda7f0a8b8e503b172bba888c380e27b445de1191cb9b5895e79ce5ce3135334ab53b558af91b2d76f878175cb99bc6bdc3b6b8bb627042c4ba7bf113238a8ad8666b58c7b24e4150966348cf4c487d7b1a445452947b861b923a152ef9d83d7e391ae3e188d2792c34c5fc1cab516707229d8ecb1ca3ec182212105dc6222574638d0d787b3b7fc6e1a79504f24c548aa9ce2b1130131fafb44ae63f282dd3f06f747e7cc28da89425662cf429a90cdc6b8e9981fa7090eb87437aa8ce6c6744985ae706fa7fcbaf9125ae9ac00c3c54a2da1694a4c7d0452514e294320b0887597882d9060ed4e84547fb90b2d48ae2d390b6032ab9787bc0c5d9f1419a0c31943394bc238949cc1f5f99b3bd5e83545ca01f4212fe4819f7206dfd9d6e1eed918b12d6d5ff64de46873d0d14f6c1c319265a1dfa3fb356fd4185a62e92ab6ed4636d801a41e93f98618738c32f6971d923074b3c510962ad2b7f063ddb557808b80e43a8c2a2c85d07611625c223f74b3aeb30af6258d30b0edf2a30111a05a0f205bf925ed7aae727454e33a0d47159d7d2b6e80dff8530945b346f67b99a7133a8823b24a36280dae2cddebfb80f39b7e8dcfa410a707fc5b6dd8dc7cd7a13fd681e8fec3f99caad0ba340a1114bad4c8e5aee918d71c76ff0a72cc21ecc55e0dfdac22fdb004abc2572cdfc45d4cc1b55f341565ef5b38db17c10021728990d36909cfe7d9c03bfe71d22c686b6eb5f51f612f2532ba098f1f180776a25018137dbed786f366496992c59a80e7488ea17f8910591e433296b644fa28101c6efb1998de17460d367d37b75e5fedd5f3da2555d39fa01edee83b9c9b4a51d35d914d301381c3cd70b527a4992d52e0e28801def64fb824b23c0db996db2c86bfeccbffe18af67fc1e4a713ab1405ee1f7b4d56e49f33f78b9237361d4f18264aef39e53029b74a26e168c988699d2ea1967952e337df611eeb7cfbce4d2dc168811f88a5641830e5efcffa96adf446dff977597d7ac666ec9da49930aebc97f7ab6fa2adaa4b0fec4c61f57442563f394ab09ebdab659a0ec6c9e52276c191154628f12a5c9a3a7fb2995ad2694692a630daadf6bf546f4a4bb39b2a27ed01083fad9ae67e0869a3a49c3b582785bb4bb995dd896c079ba174bf846080959e1d8e43664af39da09670ae5b3b3ac4063e2a39e00dc7b0019c6ce291ac7c2a615a6359ed2d506f53e89435f5dc04ac720140e0e429b0a5fbc3d42e127e0ad6aa94799020f0da2faafd24fb4be003d89f841306e5850e03d4ac5781adc50f1630aed86c1e00ff658803cdda5b0c5f38455a5e4214acd910b9a4e95bb46acbca560539c99c7a1f5409ade8209333bd3925b51487e46bba0d168747ca6f81ca49bc1a822c0197e977e812bf460c5cda56a3b4d2f845be33b874501a2aa6ace87151569f43c545bdacf9c45ead6683d4bfe86cbd200e47f0c57cc46985a12edeb64a4e4bd5c90b179eff0134863496f874f30b7699bcaf7c6fbe68f038a6131970e28e19b865b67efea8a29f29b5d258b2c069d235860c316cf598744d2c1369f49a4f50e2348d46782949cb35f2fee88abdccbeee7414c4c19e2b52c3de4bc82ff372e65103b60c5c17c4f792b77de4a41e369d9da9c2ab6f6a6f39745c544c11972e6a4bb31637bc8554e2d373879236ace67535807c06753434ae36cd9c4a0aedee2bf069e0cf6f1e393abedac3a4a7b1be2d5e3779be6ceacc0c9c91f254654c7d852981033b7faf0ad3d0b43dadb4310894dba5ab56a34397c5cfddaa28fe3c7b18e2280a677f48d8bb8a36828df8c2f102940b72a8755c2273e876f55848bb3461949fd7f94016b176cbfb118bd6f4915d861bcee8d553e72119b650413a7d28a8b6e92a189dea8d53ff18e31d6c9b1f7322e1a9f0a39b37847b41b1bca43ee9a413c36d31eae0dad04ee29226d954be7f477d20164ba130d61614d186805012a19848850fc64ae7d1c9fa4d3a7195ce33d5694d3d5681f03f1386c0cd5a63ad2f285c4df6eef3782114f757026f96ef3bcdccddcd2cd8d8df8b8a5a430732d17d01879aee3a2a00fc9c2c22afcaef8897a810939f8dcf6ae9093518159d695edff9843c61a933d7f9e3ddb0fe0d5647fde22479312685b3d700f909df8d21712351fc4ba486bc506af422d33cb13d2566f132b73e19cc11e9c31d7f7b5d8a1aa91d0b67895e07d870f072bf1ffab89baede86c9d5e4820c4f8c9e387f3896d9a4d67a5f145714a37dea8cd448d25ed59960a544844f2f77e22f6f1bd69028bf8632eba5788a301af7c9a4dcd9002575e7a862c3e211a207df09e2533a94cf7182f7ff82144ac32eef455fb49a1efab80d6c5161dd6d9d8fc0999837ff9112a70e037d6dfcb6740c1c99b9da31b08e48a45d0950fd9ec1c236994937f324b47290793ceb39e07df8d3896c487aed093a122824286b5fcba5e5903326cf7ffeb40b272cdfc34db1be9460b18d6e9622f4121386a2bcf50c35e9e9f66695f4fc8fa5fe2e188f4c44f7c3212558d96efdc648f812d745f099a9c37068c81ef2e93611c7b97ae857bd48f35841f945f887e2d547d56e1f05e2c7c61e95c04b4ca794993fa46f97179f08f7f7ce114932351192fa0430d298911bfda6e0dce231e0c94df5f75e3ac3cf4a2a70976ebd500bc9fa6a8dd7a0014412d91962039c312dc0ffbc07b8d2af1516299f49f985e44f9700644b9a3f8bfc0aa55458c6f81129fe20191993f207e8bebdbc260ff2d2eeb268ba0c5b286918ceca29d21e7c7643f840c4bead78dc305cbdedb4d9fe09796eef7b6dd2b383d801d33ee010626a09d7a86a289c8669ad744b4bad092b758d230dc93977806971ae714811e054965d80df1147652b354fa5fbe1b1f235a8b92a857d87d334911db2335349706569122942db59d19710152a8a4bcab67a9a3d89d7800974cdf955bd5986179b1a99acbf38bc708888c9c61da2fd2a523de3c6fc960d3483e49940c9f438c2fe4b08e73871b5f23c9930ddbde8da508b5bfa5c02125a3ec1d562e716f0e3dfebf3b752f78ec048df022a64ce2b9e7dc7b47547d5ab9b8a0573fcd5f5238349b66d4d968dc69e010234f17a7bd1832280df1fc52ac89a48adf67fb37f8190bde98a9457e93979886d5fdf1b24258f676b69f1df832d6883ac525107eec8d3659cd32606e5367b4d58c34be330dbdacd0259425f4a7011470b64e3c926b6d1fe1822a20911fe4ec7a0a0344045eb42152e0f02c489b1f37e9d9159ad6c880e7fb499afade6572fed9bfa440aaf4f599449e21512f199e449b033dd4d66278907e7b5d74574d541f2bcae3e694bc3dc8529c99def7ff056fbb754e0201dd6d965b24a9ad5b55f668f56d201baddd0b0d0087bb1b58e62e71d08d068781eb0912e47d1c2fba448c4abec69a1ea738c61df169c55eb574e23d67d8a8e480d9d91cfcaee790653ea4c4e710dd13239bfc8b55036a6cdd007e5a744d8ebbbbea1579dcefe118956d4e859cccc4b88bb16efc84777a1cfc53bfe22bd4a573b288fb12b5414b24d389e6194dfa28c477e6253f3503d804d940f39a2274c54e43ec64bb8b9d685b6e939c3a493492b606ca9d0aa15d3995de4f01fd96e7fcf9e74cb2cdceebb77a538c7f10871da1278f01fef8a25ddca99247b8b81ec1d8119ba3c622ee60b2025e772ab3e620bd352f0b14788d848ce2aef23b0e14cbac660340cbaf0556e7f9e1e19012e92c78c9ca7b678418560381c68cb4618b280a4c53b8066724a48d7218ff7f4fb054ccccd8ec4c04d4223a36c4671a2eb58e6b29dfdfbac5f714e4776c5e90b59ffb5df9cfaf0ddea850712d925f25f0f519a6ae80fd838d71a4655ff6da0f199e3756de31c869cd7be267eb783690a8a56b989cd99ef477a4e6bec6efefc053ea6b92d00d57a465afb7289daa880388f4b27dc6017c0ce289a9a6a3aabe757ced49deaaee9ab2e65760a907950d89ad111872316d339b2b0e317f1484604a8117a04e6f0fa056c7380183e6635fbd3ebe7810c4198d7eb78d490026fbc629d43a4b713077f3201f0808b95ae1a05664a30f1549b8d41f575c5d02131bcdefa64eba83bd674508df56d06ef9b7cdb1f1d6f78dfe4aed5409ed19300a470e446111baf059155a91a53619e8372d178aee922659c8cd94f824b7ae4a71be027375e9231b8236497741748d0cbabe45739d80460121fe78d4d696fd735d7144fe7a5921302a3f5951c25b7831dfe74a0980f8979a0561d574b110b0a1e0d1fdce12740e1251b73e5d525bceb7b83eefa07ef9aeee7aa58f7b93d49ecdb3a1a37dc9a44cc511f260fbe062f7dc56f31f1e5f9a5eb7483d4800f0841df0164159540ab6f113e74c1e800ef4edb16a5c2340ef4139d860c009edfa2d488cc6cec47bd8e8fba0525ce18b1a86a71a9562f29d136c3a78e813ce633c0a10caa0b9874dcb9af3175ddff9aa7a9b0d406879538c39ab1570abfaed0352ca55c9ab32eadb4f5745357e75052a3c2cd195a011ec83572067b319a34bb3e728b1f07e21290ae111a8eb77b2f920864f660b16e5159663cfc6c6a7fe4e6835bf02fe818427a0ea9821b8cffcd714633c45421f8aed9ba60e7b384d71b555aa4e1896b3eee2cc5f86a207962372e605326d8ee9f350f027a6fa8fd133e090bbf8182c4d24950499d5e7c6aa19d0413642f3247d8b44bf270918e77452882158127a4a004767c7d97abe07c84e6f3c620aea033ec4977cb9c56aa04afbfd9de2aff787cf36f3d56d9ad1f3d42a9809575031dbf7f6c33f822d13fe45ace83ad36824ec1a741fbe54ce9c88fbb40a20f0f71a7d3c7d0f3b8d48989f3a98c69e6b30c86e798dd1054452a239867bcf8c89eec30edf4d43a896f92cfa41b05a1c0994a7b40d3d51a4ea8344b300ca8e4b9819a3daa7866a3a30096f576106e9a373ae5d2b090252d1a7ae8204c3614b48c04338daa0041137b1329444d36c0fac79347645a38376c8227e8c80c7bef13b52d37e8f5b006803a5bbeed2e7c2880ce6d1e05fe922ad1b4eefce712d5bd08e60fb405d11bf0da65e8b9d7389c59d883da301b25b6ef541df0bef0f830e1ade2ba161b2f7e22f705bde929b8fc8e5878026f1c472802c4e1b1eb677b263be46b2b2ec8bd10b183a5d57c48bed5f7c832517be208ec65cd4e27b7b91cd457d62dbee97bc543b7a377f2dfbc28305557911bdfd9acbcd94f5aa922ceed490b3b50703c6b2c6fb7a428ec6426e01f414e5dd311a1643e3334cb0322f37d137c51c73b74795da13e4b735fe2459659103b33a95309dff3ddce529ef7401a3ba60717e42d61560ed5b5e9a13857c59e0a720299b8e3291518997a8f07f3c42564d789842fa8a3d00ff50ea38fa0997f4f68d27cd819b303b4bbcc8e18ea19b0821fdd819d968e7291f5a55700691a1c96dd1333bbbebca19aa701d6cd7cec8acedae9940887ffd2cd8c8a3cb4f255bfa36b54e6015a04b56ad20c4cf99ac61a9b38bca53bf7a7bc2c9ae362d52bdbe3d225db4ef37212a974d8ddbba26a24112ff6b5fe1d2d28efa450ae9fd57ff29d9ecbaccd0c250c0e0564d78ee92a0dedbb176dd1dba4b83a8755e88e2276006b80677135f41d5f3835684a5aa7bd3d07b2c6c5c19d985b8b1949c858ef375551e8ab5ffec36b85dd64dfcce353eaca07246bb13de34ef3b7b527a517cd06e4cf9cc7c4322d0bef0f42637a88c24d920c79beab2cdd28e9fff3b7295cf7807e1a20f011307a487af9240c53fb02aecb876fbeed128afc90f3014d739e174d726693c857a7a35b2fe82f0201693f65bb27c47073303e21908b8d1ad2a9e76e67cd825cb887d43541d7ce28c1679bdca11a8e25dd2222d395cf03ceaadea7fff78b3bb4c33b8d29efdffc40619d3d9fdc053e564e9c83b04e0e10b8af15c97fa53bb6dcc07fa2a86c2cbb5733c5de6c1ac1c86dc1f0efb8848ac7005f5db63797d003ad9e463b5a85b1d69721061f6952f17a391ec045c3b16a7b4ff0cfa4fe4f2b4036e101a0750daba20fa48b825122c079c63b3576a7447b62d8313726bf1a6a65254eb01252a71d1bf38d536402e3f65331eda803f40bed719f7f4933453d9bc13f687e0e56b6b0040c592bcdbf81b4c693a606474ff53473a97a7fcfe71b96db2e3f4bb7c6f90ac9e6bcf8f2e634b6676ababbd1e89c4c9392a3e12f18d2482f7cf8bda998754a6039dd212e63b9c0225bcd8d4afd14a18689462779f11b87c239522cc7f12d8f2e60f42f8c640aada8326103342cfd4098b58700341b112aa359ed5fb9c8e2fcb392fc7aafec5e2680a5a77eb26aba86b485b2d1ecf9a2737b014d7553e3eba630cd2489e06cacb731b4f0b3a1a2cafb9e49116237f4953cadf6c61ebedbec2e9fd34585c224c22d04c6c08d1c2db24d912aa6d12769899812631fad3b8233ba94c5631c8af7b0549e40dbdf7ff0f4692784a896e22744be1f20fb4ab23626bdc620e9bfb1d1a84703e7187646c032d5138d905671ac3232bf4bff2e7202672393ea46c7a9714fc11a501f9b4c27f514b1583f2a8f7cd16f45aa76e9ebad55bcc2668b43ab95a1ed193c37ea654a8645e49abbf43277c66bb1603a4fe89dc4bfeda2fd823a4eeedcc6c19b9dda21277fcbbf9d1817e6e79ec62b3853a8772dc19f7aacdb71d623bbec4cf7a1dd77b6c6401b028f18148d10d165cd39f99af2aba9512db861aacd37fbfde2492e808341eda782be7ea29d94f74cfdc7e199b0f2e11e560dd315cfdfe7ed3853c87fb29ee8e8601342baa86303c61918c039e4c8d22afd71268fb7124d1c1a78876905ffb727e640d5f7a4bad98be6197cdf457d032442faea2b10fc778b9194f09a41ecf01f2734ed38a9c5810ba5b4d210c6bd36873b277e780dbc29b685dbc777e2e2118770df104ae3c6476611520f50920f1b890eed3913b438cd350a1ab4ca4b121ecfe40060fc835d2808dc6aabe595075fa2042ae7cae96670c4940d7e0071f72fcbf2257f527377f3edb2e811128246e8b856b0ca3f03f5cb749a106a53c7d9f8e9b6d17a056d7ce3b1a3668428172fe23f41b21ad0326acd5e8609356142bfe784709adaedc23a98b92c5ba53b60830fa7d0901a38b461cd792f68c84d21cce273e369b917a9e5d6db0d135f53cacfe2f97e1bc6bed6490e22074ab1316395d2ee2e8b95a92e5ac118571b9b145f61540901c0f2a87813b4030fc462c67b2f48f7b3bceaa65f159f353974b41a6eb7732335dff005b913345ab63385e14641d6884d232635344dd9045d3c13638ef90931485bad7ee14222c69360d9e8153deee0a84c6d86729478d24f63acdf5d8a6096095f239b51da4a1340205f8150dcd525c7fa26760aee339205cdb68e8ce6a2877e0d373d86c8ba4007aaa0f56af2e01359f44fa6e023ae4ed7574997964cafde3d249e8e8e90004579b14e2f67798c9ced61022b3edd00834409dd8b38860ab46fa427609e12343fa0b0b7dcf4a4ecea431b8e39fc53dc92537c6c551d01f9a8e5c18699f94c2dc7ea66f19a932a9332f4756d0337143058288ffd4fac3ee45a08a5aa8674a5f5c75b533704b2fb10591f49180e79e8257d87c1c971594560610451d93e692e9f01bf1e42c679f0b32aac6720a9250b74426c5126606259694187d5fa41d2c938e72afeb0cf60e8b486f0662d794b62399041f073ed192860ca0c3317946bfe2c2f639ede62064f643213046b4c4c33d220b9c977a9445dda43cab4146a02590289a42cd0465d2fd977623f9c3bf3c01c88644c3f47ca1d79fcbaab4306c37628387aa4d8150662fb6da51a0ae1889e939643f53d4b052c19bcb0303cd4440eba3bd4cb409d367e8e10434c148e060f2af786ef8278384dda877aa97809bf594ca4c49b7d7062bdc21dbdc36d85155b34368cb099a83a684d35446d55e09f520244788cc5364c53035d01dee4ab1a6383c222f27bf52e7f4c5a16e73d83b791cea6207700f822b294f95a77f85a7d0634b506484420d5d3907a1eca69a2c353e11396d79a696f5143494da79ad74efa0a744598b42d983dff1a0fa60da3222904a0cbc69724397c9fb7ecdb43a6e82986838ca924c8c2643eecac18e9f8bf2eb7b408c7fb456cd7627da94b13f445c2d5f66f5701e08e4a696aa3bb4ffbde2bf2040196759311e0868341804ba9b7ecd3acacd9ad394f7c7f28ea889a0e70cdcc4034e68106f4abb0b6c148ec06ef2d96ea86beaf0d201d299806e32ddafbb37b3b2c51abd1c8f9a89ee1900ff5689b115d93362bfd53694b909f99a471b56a1520294b611ca16f9007ee8a527f8a2a54baadbaa145a222478ddb8fc54fa3ce56d089ee2ea0d611918dd5ea6cc30e47ea470bd22534e227cfdc0d349a28d8a56fd0641151905d36ba273cc80aa6b5247a2360d9a5c9adeef86f4f9d39f36a2c43f8cf68dc7203b76b00c0ef24b5efe52c2ab70e219a8c7f1291c282a40c167ea59eb7a4415e1c9311c4019508193fda6d00196f8d73065190cc2cbb1be1a32c66900a309f101dfa6cb296df7b1e2b0c66f56d22a0afff8f3cf7c436ecb3c176a7b7dfe474e899d2294bc9ff3582b06bd61c06a80d1e43eb240cd52fe497232c3d1c6393f1eef0c6675e9b466a557f437d83e9e0871e2ee857316dc7730799f2f6b61d760d5d992c8d5098c9db7e968287003763440bc20934ee2d99b8e806daf65bec1b268b7a8f46a774b886555115556e82c1b9cb58c320da413e8a89f8c4461b372de93d77872a739c575e862e05bb5ddc79d2f701685d09853fab6572944e231f90189f8ac8a6a0446d287b7b5503e9e44051b6f3671de107eab7ab2885e2a85a0072a2e662d3f628f1cdcc2f3357caa8c8621aaecf28893e87933a58fcc0cfeea61af8a2ddb6bc0bd88968f1f9d4a1b544434c78470ff95ee8041e4ff9776980f5406dffc9bb1542de44597e34b5379bc178f814f7ce39b063abdddfd9a10dc074ca7ecf032825194afb4cd6807e6dcf958856ab9c466404f14149eaa77e12f5a7d187fb644cdad3c08f350462b7328081ac90a44f93ea42bd8f7bb9042a628ff32d40139646fb1f18d6b25595b879eeb7a66495f0787a591999a780873a5e378cde253093ff012f9f65dfcc3ce671df8164f3a29f747f8c116a2ad225a29311dde30fc624c100263e0c7b05daea34ef908ec78665065f2f60e1e5d66aca200fb12c677cbb75ee080fff8ce1ebd84f2c573e841247511ee12de09ca29a19078c83771478899c2cf618de9e9edac70a6b069a9f699d9c9cf32cccbbb278253fe50d99e0fd61458902b40bceed65b87ff7005babf9684e676bf4aa7fb3656ec11e978b8bae805d7ce837977b1993c93d5f3e3f0204ccece0c8ee668979ce5705eed4ac39b4b49fd01bb97e29d5bc83d68f825f31b3b38466973657b4444bfad3c9153da36111a82e8564ab263175b9b7e15385f17b07b4dd1868b348681192097a8964ecb5d1c4be75ce2d8d6038d2905574d7a8d789273196e0130a9a774f8cc278012beb1778184e6648aac83285c6a9e9bc46c82588838962592a03cbe96471ce7665b84f23f8f13419b26cb6da1658c7d2556a2082dfaa7a62e9e2691465bf67461a187d6f99ab873d974e345d92d353dfea2a34250c4b495f1db97435f1cee2aa2e51d1dc79e159d8d3a61f93593469c9cd630c25ffac9155ac163ab2ffbf5b271fd70a567553432d67150c7c9faca16031565e9f2dd187688f3ea2f41bd439c4390abd7eeed05c428154072c6adf5e00eaffdd04be28980cbd11df05996f0fbdf2b7c6d4bd5d3ea61ea6384469a99ec5b7be5cb5ac2e73a71d39bb386d282a32caae7a0fb60b3b1314da5672c67b7526e5281d77caf7a97e4c77c7f74e22b754550a48da3d67fb9db542e42a7775e49939e4451db899fdb3d2704c73d07794db35c2850e75e1a48ab306aa714eb7a19ae4aee0cc5a3c45cc64d7c368c090d9d129ef3f2dee8b46382ab35e2acad94c06ab45555eb7df360e1a9401e497d09e538f672ca121df358da695f2a5877c112d99cc5cbe9e86f5153dd8155fe1add5c7bb0b244eb2e4562fb9059a1679f779139f6da7b620bad4739d6e14ea7291241246f10c584cc689b11e611dc107cf3b0684b996f010b0f98b2c655dfa2e171b7581f7992c5be11cbc76b895c3a4e99ae28926b5cfba3294076ef5c9c55f34c8be8bd2281e820f4451cbbfb7d128a9dab39de694397fa2324d7787ab40b1a22f0c210a7966d15deed32efb5186446042831c9a4aebbed0ac6e03519face7bc34c0631bc2f508033cd561a91b9684149e62b6c8d73b03c5d56d21314861fd9dbcdde644e1cdfcec926fb4fe91946ffc35fe3428e89063fa1f0c82963f81b22c5b6a7afdbb6845806196e99f2d764b41dd7a661e923763b703a73f730ddb5875613810dae8f321e5a533ecdd23982102edbd0bc98ae0dc0f24dec96750a50b188db218b31f796d7619573a73ee5cb6a5cb122bb2cd20622c788c14498a714301c8ef0dcbbcbf29a53a7ef74f0ed44f24d5f01631f158b4b16489e5dc3069734039e9545c938b7cc8b86b4d1bc5f9186a061d7b4112941fda886ea3652cebb528949e59ee1aa4374c48bc5bb2405a2d67a896674af3ef50d3bcb85553742a9d8d9a831c87b98c32c642934974ec6613be1e37d3a9cd5f92814a456e7dacdc479fae6aded9e869ceea6c7d38dee649205d29bb1dcfd858ee75d73a36ca2a7260a05b163fd40679effeece63ea6a284a08da79ac4f572229dc361cb390e5ccc85456c084919a8a34c0c4c1269ae23589975dc2c5c2d840e8c7aeb3e51315405aa09a40f6e9ef15dd0498bebc4a5803cd4bfeff265ebcbe543baf2ebb3e307927d9230099bbfa57fca7e0b05dbccd43f806dada13ee96c83928be4ae517b4037b269acc4617bd2d69b65abc30ab83fda7ad7b17949d7facad9a3bfb7f86fe6f39ab823fe21a5a1d64f8a357b4d7cab160f62ae6503aaf1ee3a12ad234014376e0d1a093a25783b40af44dac7848e8549562af8fef6c26b0d4b00750203dcd8123a47925bd38134fe9aec4c8c858bb769b0b1475cbab4bca54ab582ff223c256b87f60ed3f1b02b192a6ec11237c1628281f9169011b6bd467635cf3dec99579e3e1e02e2ab8b55338cd2d1985102f17184ef5285ca67c3c917859c0d5b7eaf29dc2d53f132b255148f467b989444a058b0b20941b905ee123f0a79eb40d0983c1b0ef80cb73b1c7e92e3c8e004ea28858b343d039fa6f980d3f8efc3d22bf0b323f97a7d259e7ed756d6ab6ec952e9663f51a964f838b0b1624a21b0d8c2ca79b2c075d9121177d8a8f9389b6ccca44e46e52eaa4234e16e160ff6202ef287ebb29eee8ddb32d1e4552d21982a4f42db37a904e18a9e563c3ce3840962a86ad2ce21e2e2f111b2a697582bcf89d979ed4d31e2652f6d97e0be1ba2010b056e709b708e96ae052c85fc5bc8208df85a908502c02ff526d14f05d7dff1a3734a7b3e5f441124036f8779fff8fafe28df4d1eefa4bb3176436cf33132df927ab350df808843b0a11f8f1d5b694e69beb237c851be74f0b9a9c5cc8625abcdd14c8909a6bb65ea12af3ecab33a3bfee93692b25e888ad73a73f6448ae15bfdf8deffc4ab7c7ef71699cc93855f76c4141d63c7aced560041a5976e99efb19ebaa545bf65e0db7087aacedecc25c7ec561fc6cc994ab7e3ea137ef78dd0c68cee9eba674e75ae65c7229f4e4339ca9909141e1f00db73e54af145b6527a759fc1e6ad116d0574fda52f5badf4aba8069e029bce35c8d4983c464fe43915fda68bcc9e9196bc7855c761c17bc8f76863fef637e2d8653bd31394011998c6b19e074587e424518c638caf16f114eeb6daf64c00b975c276bfba59f7c30473f55e02c679aaee3b50f37a4691b328599705e229f8fcbf923065640541518730c7848ab45dfb640e225665b0ffdf880993195aefd948ddf82ef1d37aaf834cd3a5e70678f1500aaa1b774a13dcfdca54ca9464ac0a5bc14d13948de6dc7388a5fc7ce0984261de640e4c0eae612ccbfc46c4eb5ce3c289922d3eb80290de5f0c7f0545f3dfd6a9d34128f68dd28787928e02b872e4cea9c063ee2d8ab96b81fc7092625239293cec489f0d367e7d74aa0189db9c6844bab206ac0f6a34ed4106aa2848bf4701439291c8dc04d8bbe8bbd8f21deea83c1fc4f5cff8ba64b26b4b810c50ab0746b1344cd1e85379f38196b92712e8fe5089e9cf7d3489cdeeb7c176cf320c70441a80332d40cd8add1de509938dd8357dd8a949d02a7c1392470212c4732494b8420f9e5816a9bcdf7ea0ce3de85a3fceda08ee8c8f030c0f74d74fc16d5624b18cfb726064a1f9978eb80d972d749f1836c37dcfafa53bd4fc335909329f1dd5285e6a52f4aa17995aee857ec35edf202b751a9766d8bd238978ebeb217d9858d045924c456ddcb7486797437a46fcb5175fc469f55f700617dbb08ee6e231ed48192111cca59a1eeb6e060d7b89691f993cd9d96276213e860d69a1a2ebb2a922d0c08665c13c85f1f168cfe43506161df58f82a2c2371a3e6da710278f6bf3905d55305b61dcac1f4b69b87b51d9ac384b8e8a15324a24ceb2328056d19097a095071560cd148e494200a36ea2424b351e473911cdca3572e5ff6d39875a13bf92e85b156e7af17b798747400f5127a3cf0f7e599628e08213a8e8253baac1f0a3e0f836269ae3a3fed5f33bb42de791a7591d8efd4bc29be687e523236e6cc5bf480abff07414dbb1ed3f947b30b34d255de05849e675b51fb75793a0ee4c962438c797303db41fb20088c8890047cbc46632b9e3407fd42fa472e46978305fac844796549553f7f233ad4039abe387a918da49dd76b5405d9c5dfff6007ebfa777736e76ac498b8b63591ca5d5158dfbcdd965e158857f7e7eef9259d8e8d0a1b53c2f7d3dcbc86a84aad6643c2bbc3520d5a360005c25fc915a1ea531a5d0eda5c60cf4964f88aa733455be19250294ebc398b90bacea0200e2b1e01643b8f836884cba0cfc678a3324992ec5b59fb15e0c9d5feb11f665d87f59eab8ca6989b1a0f97ff345f115359a3e8300b069b0d77040c32e924fa0a79d733dfd4d0249c522acfd11f0ce9b3e19624c74fe39f477b1005cd39fbdc242d281ea079c73dd98773613c5228fe2bbd7e174b073979943fd792d9446e648d29fa6b9b7ef0e309a1f8baa8164f55263053764e15a9655d0246aea7a2852d5b10935caa31c86c119d634781588bdacea825d0fa8f59380732e43bcdf7cf74674fc446d953b0e990cfb0cb96eea2b74c154c9ebc0194eae1b4a4bf2beb7921de4c4596ddc187f6a29042d769752e9eac64d18fa88036950d05dfc09be26aa8422cde6cd9b1083217932576896bb23424c68a84ce994f41878ae1b4089e15775f1b8b1cfa613c498188952abc20265bd3666711cef15ef48363146d63ea0d7da05fa9da5fa6b4460131d17e9c527764d8a56dce89cebdb854c1cdd9f637337fa957a3d839a56aaf8cde0aa2966467cc5bf6d226a8f9b36fe65945d9493db0a847ef07c95d53c37508e188db81418141f578d841ab08ab0b24bf714e3e452b6358e1b2f5484547721f1912d3c3bc40c65fcaaebfbcd1950d701362dcfd7e92aa603464ab88200814dfa9ee80267aa1a02f417ab5094d22d35cf3ac29de9e6911fa0e7d05c66678f80c5f6d09907f883e6b53f78ca8ead32eed2932d3d6298f8b9db53b0d23cae3cbe452aa91f8d170c53980339d9e6c13085fb078cf2207ee4677c13e865e52eda2885533454554b55164494ef475fc19682320fb61c1a5743576c348066ac25dcc430a10f896a08983fb825d2b3a95f0cfafd9bcd5ebe6d471132b3148842735401d24ad24f2592d6ac10116e0d91eff81b8c2e105c26486da0254b55ad207cf461054433ea30be3a0020c84221907e79f0a406ea2efb3f4ddcae9c516489b92c60f860bcd628b408eb7ca6ad4c12a3225912282cce32a734742afe2412aa9bb2cec6bf1d7168b826e2552e87bad7690d23adf42153c3aff146070704cf316c5a59d3afafccae1aefd7c9a2b07b997890d4faf70efa0e4863817c41693aef323c8f107e3844f37d0dc7e1070d347d67dbb4df2454eb5e369b649dfa24ff0b033eb9226d5242c2316527afa2a1b28376029a249e498d2800e1f59fef492c3f723ecd9d4b71e7544b5a7fc3867a1d36b180e421bc1c76f023267a20809b8b360fa8962da59f8b16190b9aa38db4428899acf50ce1c8f39546cc7cd628d727e37a3bf18f60214a5da962cd00828af9e6be3cd975b1964f061208bde2cbd5da1874dba6edc2dd76a7a5bcb65d9e24e124bb69cfb0904001223e3294394107166ec776091621bacc66840d4aa31e1122317e0d05930d9bc6374ec5cc7c2b4edcd1ffbf5e05380c5b220c91fac57e13e575297534ad7eb06f49d0e288ada416519f9bf3c607fcff8426f7f8552e011a6151a13214b9f88899b0da7cba2a0b0b74523e14b3898eb6d36aa5b4ce39c8dd1d732e46f1418117a9065092d1b2d987e41c506585550ed490b826c67351a823f716c3f89679d8074db3b3b4fc9ff5cd7e5da53d639966c0e34d7eff893d043d2c9c29e228dddfa970560858ff6fd861c9d9345fbdcccd74c8851cd96e9a253998801ca4f99e98f0d835951b8ef0cb18375dac91e437caa281ed1dd9ce84480c4b948e9adec3b07424334503de7e912117f80f210ff37ed9e8a7d82ba7eba3eb0deab33920ed60d39df6b85facae86bec3394bf869aca22ac03cdf913cc2c0f493b5badf359ad3087927dcf1e4dfca9fc4673a24bb9abac44c445285e97780219ea55a12319e1caea38564465ec6ee5fc840edf454fb37707b54ca7d0a0f5225c26062912cbaa7c7b823c2fa33de9b654799602abd97ce9b22bf78b009a9947fbb678c4f1e9ec8dd205f9c0af2f11aa4dd5ce1ebf4340b14212b2d555731377043441f460b43aef1c9378a284b862ad772956d8286295758b9b4303dd5121453e7498a2ce58d4a43d50cb763bcd7e4c89957b11ef09eedc528a90b16791b25b87ced73809f2252215cb50d08d861a9dc4c669bf92a876463ac0e3707bf10df0be4c846ef0654822b3e4fe382f27d90c5b4b5ebb951b1a9e7d4939e1351350ec3788c97b06be449e063ac673e22dbf15586769934188883e0fc98db8e144e5e0267e8f1628870b248988c99c9a0f706c75ccc066d2e0ac98a9a8194687233ab17c81cf10b4216cd96b56732dee4023babb89183cf531ddd7f87c9d5d7c2136a0e63b0665c1a12b3b2ae25b778023412f64b8f415c698694a93dea50ebf7eead523efc15f2324fb580798ea1a06865994d50c9a3ea60d52989429de352c58b14bc84233d19d5d463fed217101bfeaad2f2e4bf445c98e3a797e1191614c6a688d963605d363464c28415558adcc6d20125b03924e6c98c3a08e99c0a9d583cd360abc36c4fda36558577a6a9a5233aae15a90f328f7adedebade4dc39024f282a2e9133bf3f28593397e0fb08ca5c8ae45f5b6e53267988a1c100f24584db11cd10f6acf5dbedcc3f09bf93218b9745d4e3396b25dac5c2f96fbec31fdbe29a2d7b88c922b146c43a36578b3e2e2549144ca6fc7e596366feb5ab89c83a39b0edcce3129811d6238c1eeddb62188f231f79dc05c48a5b708c3b235b8efecbf345a730a48fd033cc8440cc620aae947db0d20cbb34f25b1008cd245ad12838c2eab4fbbe972e65f9c2ad8b06199379a1530939e14c51914f2636804c496e476813b5302ed0084c72f3fd2d38fa7b3007c52eab6c493fdce4b965916fb2b8c4ddbfb332ec7bcf5ad8a6a53128c1b45dd36b398f20b32d3bd303c11f32988ba36cc46c981b4a8d8886788c3a3bb5c8273583b169ed235d25cdc786eac3d67b4e9da8ef5efc11400fbbdbed31a938334fc2a948cc2da3fb484e7b46997fb144296e6bb57e9c6c2e2800aedf2a843d1193d351d2448e0e1de8edc2eed4cf26f94ea79cc93a4c4b9575f5474cd7c5da21cef17bdbe7ff00f7648482db3038c84a9908591baac836b3a0b13684d3b9032caca9e9b886a00777d0f9e994dce18e39e5ed9bcc09b4c1a31f5c2ce959068a2123a1248de53180c4fa984ea9439932853cf5a01b1c17d61df19c8dad6e8d4ae3ae57ba1497321b604e2dc9c4e4472a8bd85a625b96dcfd81300af7f2098a7791764a21ab21e95dced899caa26be424e8133f01436b370f02080badf4d7e7156ea82689e4f775bb11aa476f6dece6c5ee6caff0a558e0bfb455e0e2e14987dee356f9beef113aca26e68c161f205c4830808e18d3987884845139680aaa9fcbf00e2b5402fedfdce30b3d5feffd7a3f8bf36e59266de362217a865b253cbc53dd1373a33190fec2861d9c029d16dff1f7ddc6ecb333a7d6f998250c25d3b0ccc656472913849c5e9f0b7f021815ec6de16652eef35f0840033fee7b21b624a86e25a943b1d6d3d780818155efaaebeb53333c588c4be57e77b60b8351ae0ede555a572bb9402efc47067e68d6cadbb5cc31d94e320f443d24624a8140638541e304ed6472fe968f3db9de6a91d02f3f4ebd30f9ca6ffb21ba86421cc37d710d4c1644e6ec0b9765cf4b61306a871655e8eea47c1741c0248bc1b8ef1f167c7f3e394272722b81337542c4dd7ca0103410a5d3eaeab0c2d9f18cb0b9cdab5e9e60e3e23d533edd9d02fb54b257a107c982baa1e9116af12e03a6edbf28bc406683939c1876f5eaff0b84de7417d5ca94de243ff55449b33bb5c510d3bc01896eb52a3167910d968f69a20525c04361273491a7e7dbd035b91b65286cc74f30910d9c46976928c15cf7fb1cf820dc4fae146112db91f19718eea8021e4ff6bbeae45429a5a1e13c521e9992ddee0ae5b3ad627fff5290c4980ac27e52a6f211a2c26df45dd7a4606e7da07a6394eec80f954328aa9370cd6076ac684383d10dd4029617ac6a69e4526a56cbd7dd043de704ebf914b144db2c047acba1af798b01bd04b92f5a63ab62ae9295019f1333515a37f34813ffe9af2070e9bf9a627fe9db015aaf72b5ac078ac8b9c6486a5dad67c0d6a15c6c7276df5360d71bebfd52d99c56b26eda9c35553d4dd0fe74ec5aab9f76cb915bcda112cdb316a3746fa815800e4e2b590bea2aa5a046c5c89c95c65acdc6682d63cc9854362f50d22aa68c63d42ba7eee89c04a8d5074b3c609427636b1b4037d6f6ae966676a7ac7f5418c085e2068d8af727b8197a4bda6761e1f987542319e6603423226eab816549c9b236778be08a8e990363e216b10f255965e66b463a64fbd610ff45e586fd7bc4fffada04e8ae12caeb1004a499ebec7c9c39020f278c5ed1a27b17d4126c8192cec235534325028ed82102fe303bcd3d57a7075aceac5739870a72b0ce45e5b4c6b32b31c005d1ac1143192868b886cb1dc37f3b72cb16ee89046a8fecd4fdb90918d23caf0e85c081082a7428d48c0590993f6f36e9776f6c961a50a48c1e3ff224bcc67b291f5a7866a2494c6043f6a535cdb5575bbbb042cf76ceba29b855298f2398a95e8912c35f43c9546da157666c82ed3f98c97348d3a1247a510a7c27b44b214970c82f1baace20df3c215ce419a3cc0320f87cac7ecdc4436a7215956786d41ffbf30ef0ad2c3616832f47b85b41a4fb0cfa0911b07636f529e3df966e0d259d963453114a728331a672d69f3736e0536e3cb364df73c168fb0b45e7f2fbac421f7e26bd27eec47ab1bd55cb0d8617186f02b84810e55d564aee027212f30433f96f956a65d6d42acb982c0b4fd39c1610179853fc447b2b5234f4a5d6feb1fd7567f6bf5d176d0b9cce26931256ffaf699fe64ee16e5b276a9045c069d552123f783ba76d54845248c79a787da251854c96ddbb23271db9286370599209e11d11bf810d4d2412faabafb988ad7cd7ecad1926c6bfde28f59d8a38aa089732b541b688617459cf2837db23cbb25eeb3324d5ce4fb77b72fc6f1d72729ff2ecc3d15a68d738e22102d13f58d556deb9ef3c9d6231da684521b033d21adced6e1e4250510865236a7f2f06c5092ee36076672219aef991cd14f2b4e9ef1c8926826814a379aeba4018ad47e2b6af708d716aeb0fec9583c9a4c487be16da1201e16c7d0dde610a7e882000f90d727f7246952e3d87ba6cdbabd374d6b038c890b2def30529886e31a13cb0a3363ffee2ccf0a0711cb8b0e6059231a2e6992eb1775f7bab17f72d99e50918044b9c01ae0bc0fd8009333490876e8c35fe5e018012c5316cfa3292de5c63b0a55039ed759ccde16b595dba034f887fd5dddbd3dce9f84ae8c3bb8de6d129e4ee7659837fe99e21ce5b289c5099748849f123091ab32c8e7a248716f7df689b36b643423c16688a534a60031913d77ee9c5f9d399f51633030829873ae77ef2dd1a845a5aaa16e913b3e2de38b2ba4067bee93b3428d6a0226db66aeed488c919e9ee56a4c434d1e2b3dedbc96f244622f2a83d84d1a855277050830d3f49ac2779ad05dc8d8e706791c9d6d26c2581e97d05912dfe7384d3ff9d2eb4b57c35c2c61e7546243eee779fb5d6769d3945d9a39c8fb183e7e6fcd1a11dd0ae5ee25e53db624ea54a426496a28de0822e01f52d272e842d3b134908f63f357e82f231a21644f820c80f762199791b2ac5261d5ead1a90759072be68edf1e5821fee78164e7b96428ebfd08a5edebbe3b8ac0a795185957553732a7f591cfa564546a5a9d47c26b82df5e67d46c87cd5082d24ccbcdcd2dfdc1671a19f576796e0a1f055d352d34471fa5d1a4da53aabc03affb40abcf13a055df501dbcc0fb482b328f9d02cc5ecaa3636f4648b180dc7556d009f09ce3bbb39821ba5c23a435d8ce7189981121a15ab1f07146cbac329736396eba065fa1e8b964f9e67776b11e20f7ad070bf49f4fc967aeaf3e48435614b78ca20fb0939289558dbcda3ea6918beee86e9f7bfcbd01b096dafa451f344b15b61810f0304c6c9773714f598dad167eebbd35f8cbfc364110a4b711f9b14280a6eb6f6ce8879b45156a98bfb569571af0bbb5af45cf3f6cbb1e04ce89b879582acf16b233498687255b00ab98c3b7f3de2b5cb58a06cc7c0420be74cb89ecaa1d6b0cc20af554efea69006cec7759c21082c9eadabc536ef0240461bf238ab093a9c5a1f68e279c1777180f6f5bc9bf75682a57a66dbebca3b8ae38fca6ea867a555dd1dd2d5f299585c117d8a0ab83a7244500a04666c65596dbae632a107d492f981d2ace0c9d5d871d19ad92059ba1a97e0b47ac279e4b92933e74ca90cfa13fcb61cea7720b979188bbf24074f933f08bed782053557e8c56424975b75bf763cd699be5f0c9368865427e7743f596f5dd368b69bcd3da7d0319a5071bcd35a705d4022090a40981146edb08c195e2ff6b2d14cf6f94cd6e37e8d2ef58d85f9cfda38c0233165dc5f9518752d9d6f76aada303b8c4a41f17ddc7d8124f68bb0b6879eb2b24b193c9014b3b7d798494951f86cbafa24f51fdebf6efea6799038d4de37ed1e2c28bdafbc2f951c83acb8164aba061751733a08e1bcaa8f586491f5917b1386f7b05ee5426e4f4cab5e4c0fdca3ee9556ceaf0905780d7c4d2c0fc5c61e951d442180f5613e4a0baafc16ce32288123639df175b8721fb92b7ccf6df84d7933805671b863154bcdba41abdd390e604d0a7a9341c2aeff506c72af31a433dc73fab7f34755903403c1f11426acc939772bf6320442e7d77b2a4557a16a7bf8ef8d66162989a6de8d049b3722cf3c9c32ef8cb72925d13d77de5f0672c59c7f94d390375d6f698a86305e80a193c66cfe9079461e0f066c83d81d3750e2b449393e6d4828ee15f93bf4aad192fefe094f35d47a282ff68e915a7e12e732dfaaa6680b12750f9ab4c6e6a1abe109f1c3b340a31a435bdc17748d356e93dc38857f14bfc10a378963a2ec89622e4c3d3717efc92337f15c4253b07380dd3761975407cc3a1eb3466449b69652a604d74b2d0a1d41cb51a414d32cbfe20296652274a7df13f84331146c9338b0e439797bcddd46def69ad4879c0564e423e3bfffeb32bbd10eb52c9893678557cf51a32a4c37b5a8f865ee69da9cd4f5810b7afb5552254c64826027350f06ea3896bc2a3a090c88292eba7ac12ab112b0ac0efa6fb7ccb6c4fa8fb5894c322bdfbb65a37c40a8a8744b3adca22cf007799e89e085731a10071f657d44b6fc78cf7dd3a19127e405daaa3f8be7da6a9c2c5b4315eb9eb2c975d4c382aa3f234bf0aaaa604ba1522920672e7ec527e35f0e43d60a36d8b2c62f8f267ce9a51e3fcf0e046b31406874fb55d6d9785bec0354fb8ca7447822347ca1ce17e7c93d87827d1e958d8f738b95437f94270fa0b80cc57397813da33543aab1a10933e7d7c2ecbbd68f6149181f3d4a9c0e198c98689deae02f9330e55a65c7f9bc3f3adce96f506ac48dda1aa43cd8846d5abb0c97a910b4cde71a842c51d61632df6b549be312f600107e8fbe2d86b2247fa0fd881246efca48a743f90b0a825cee2c580cf1f5d9e80f8ddaaf69c7ee0ad96c1c51454ce0918f0249565e7fd98e784de4564c8585b69ce568e3036be063de71cd7bf77e4ea9d3b992cf0d7158d4b834a92533812b0b838333563c50e52dd5498112779ea1891d6f59c96652556ac0959d11a66669f88c6d1e1347bf1f413b6afcfd8b399030ce24ff598d3385f9c5d81a926283261a9aa680c397e700e0cb32c3b58d19fada6e01dfda3510b178b771fe5406fe5c8d720be5ddabf97133f942b75c6d80483a7fae3300e85190228c207b10e38902ad69183130bd30385b842b0a01bece116460c01e20b32f61695140c924fcbfe7d7621757d0d4d6826a6f2127c8e5989f34e0a5ea25f997f3fb25cf919ecc706b53ae615557a67fbe6dfdc90a5a4aba1c08198bd9412b7305d26c0e2e43751d1163630a8549ff179b17ccc3075315be6ee52c5195680b440c84617b66f57a2b0b33935ead19afac8f1c8574fa13fae55e0be7c62ec938ffe7a2d4e851e6b2e5d25e54507e921a362563348621d47f79444e0e29232257a16e2066ddce9fce402e6b84155f69f54701f5b668c898e6aec6dd0de9cb03d4ed39bad5da73a36696dd6c6df83b0f994cb0828cb114e24ced263addac6f9f326ae7cdb91e5a6695ee06e0398b988a2f8208699548bfc2ab181e8c6036da1693fe776d4858dbc09cbb4ba5e96f1eb6ac603bfff4fde33daca61fe86d4de2b2af0eb5207ff9fb30fe54dc1536ad9ee93dd4dfa2d8b0ac51bb74b41b69422f738ac45c2bd05699a5077800f251e704e09e65cbbbcaba269906e23823a033e0a9c32f50b3a09583964b70984ee655c2da43d08c84260a583570e88444306b48b8b807da545cf3ca72ef8dd9f7c62cf339b8d4db0099b13eeab3c42028414edb988de3c507fc88eaaddc214eb6be96b2a261cbc4c0fafa7d6bf9436f6b0e840962510fa1da68f87d0469704c55ee83c77ea0f50b207e9664055a0f5371a0791bc02b4cf087c5cafcedc4f34210058939888bc0a9ce845e399cc2d90f792e657285737ec99ad34e1a41d26c8dee303e0f0e97a1c57b51d7b583e25f7c57560f695e88fc7d119e5ed8b2c286b9835079efdaa3f5401b7b6f34db29ee889c2a7328484cfa168d02571c5f025945686b3d3bbef8b9f26274c501508e13a60e4596f2729392a480594b4add787d052d9621d76101a744352ec582741daa3e0077763dc92a5a3d8fc374fe9ca192a20d508c2d4954cff770030c0b13072dcbdf27e4d7fc8656bf9fb059bf5043298406621ec2f95a12646e0bf1e4948bc20f77524f7ff0364f4e70781393291104032903dd7616b3c39ca2a44fab62f77bab413086a2d38abbda727bc4b85009192bce743fe2dde8c8a9effb7b3198a390511eb618a05d63e145a3d0dace22c8db750ca932b7501ce5abbe361bc883b9889df44c9ebecf6ac3fa4e838eb883c1255e16b68203fc9d2e0a4f1740754883fbf99c66bae6fb96d8cc476b35047fd5b728f6a5048064b367a01438e0333e07558a1876f9698fe842487cb2910f30a4e98a22c3d0061291d979a86e43842c2923303ec05123464f40f5a0ee88f9ea6b14b8c0b355d768ccd9258ccd0dec1bfc33ae7c2df3d4a83676f4482a5e0877f02e9c0564b705c2dbcec10022c09d5e457b5ebb474e8077b1535cbb25758d49c4c64514d392a61207e8da0aeaf2512cb7d5bbb65b2f2918bb18a5c8a531c59afb306afdeb0cf0faabbaf7ca97832f244ad9210dbcad6c3b9723241272e9a3c29ac6c7c52f92f4b3733878e358bf425129b322c59563745b33f053dc4a0228c8facb5d999a2156375a0a0eba4924bccba2abf15ce258592b3a6994ba7bf42863bc7cb0a770e093f286f6c8aaf65b3c1afb8bf35d938627e9f82d168cefa09853a96aae37e7fc718f45c2fcf0ea0004d9e2cafa7900ec2c53d40565a1ef45c6ecd830e314117b7da2ba204f9630579673e8b7ae4feb1c514d6817c5f7b8e11e2f93216aa4363d9583b06136ca6f7f24c5c4fc07f3382d11b0a73142f70eb0386c3f2b9e6d129f3be8ce2a89e806c8bf3877a6018d981bc8704d0fabd2e8cdf147a3668f7cd3923f9c9b3b57174c5939db1356ffb17d6a279431b8d52b64b9a353f6360eb5172ad78578b3f37acd29f464ae3e7b6c77b04efe5094ed0665defa699aed27fe7819185b60e37fe0b7692d04aa3ffaaa79c6c3380e415126e58b38cc66c7a617e12c01378a69622c3e4bcec0b270ddfaba650b9f44a26dafe65e0e5f3b059d1f469560beed4a41911822bf27fbb0b2fd0476191793061f6022a304d8c0123cd8834b0230c05757a2251ebd5b951ca4602465da1e29e144a239dedeb74ddc43eff8cc00f01b3e9aa0e218326f431ca9427b3435c8ea052740c57e2078376c96a32a78892f0018a908f3bc880ee621cadc75bf1aaef23308089c8c6e0f10b407f3fb5eecddf1890d324f78d0b006061754bd6bfbc2f9d5f6b0f8c7dc60701d4173654f83b36551fe374924978987ef97e46e56da527baf625f38da1e888b20466095ef112514f7cc0a85bfbb1a839576a8963051d59d68e5d950618d70a1bb3e5f91a346e932d3c0a7a521842b5530d12da38d53520afbc5e95832883a164a1b09666d4262efecd0444cee9c3c5db825eaa5b4fdbd7f0f342645b2aa3321829ae00f4ed0c7636f08e578dcbb2b5435669a1515db6f4f4d2eb519baf247db60eceb17c4b38ecd10ebb7d35c212c3c0a80f3432bc6acff822069e2a9f5a046c2f863318a7afa358ab7a1aae845db2c79692e4c9a85adcb64c94fc916d74e80c516877ef01d987540afec0cd8e6d436b6d2d685f89e69121c482006d5d9a5d396b0e5abfc72ba1daa68039744c6788e45d03d9369943a3b052dc6fc3a7e95543ae5e69f6d1402ed45fe49c7205f637288e66fe08bad682b39a8400bdc28a15055d6211613f5c5f7fcc22dc5246a64e9e25d458918beef16373fb98bf7ac79702d065ad83be9d2d4931f4a606ff2bfbf40924f019da5de97d58768656fd915c40f6e2846fefbb6f0de5b7281958ea6e4cf0bac2eb85a46b41518f561c12230953c75f640389e33260b9a3e613d537f74fc7294b475222624bf579f30c22c21ba96738be2615319ac601875276094cd03622a9ba35955cbb0204a689a7fb9053d0c885cf2553623bb11d2234d42ba9c5b50ac2c2c9fc63636c127161ca76d02696090f09b416e758eed61ed8d07e094d8cb351d8f6d9d65c0649bd308eba658cafe1ac24c6ffe515d98a525f0d817f613a676ff7b0b5e5105afe2a961d8cb463fcab0169c42149b5018a2417f1155f326d05fed0688d50787a44aa4affda393b13314cd2f75654b4d89e45e34f4f7cdbf1a63453f5d555a6dacaf73b54598127e09cf38f7836359d936d5a8399f92c47371943f5619a136aedba4baf8ef5e6c5330365646d0700b4d81d6d793738f909c5649aeca0c61c2d0973715d3329f0d86e37ab3e7814cf02773f4610955d31092cd860df9607dc90c36ed7d55ccd5e9c7ee8fedc8a4b1d320a3a559b17dcf7f445247cf4eb86d2a69a6372536621ea8b0f39ffad39472b40514a04b984be803792e82eb3bbbb849a641de54a4734dd64bf47ce3719e733cd7e81104b8fe389bc7aaee866ec2051a0f0c176c821fb136765203cbdcdffafaff445bda92bd3f6cc82195f18c2024e4f048a19caf93289f49a618b2bf96ed68a531132f95880fd13e2210fd16af6bc277375e9abb90eec580e63346e59230133b535925e0bd6e0f2a383beaa89560ed07cdacf2f04accdecae663d7259637686389181596dd8dd8a346de4e2dbaf04a48c7ee8904bcf7d98e4efdf7cb9c7ad352ee74cfca61d6e7e4b3d74f99e98da0e6e1f1bcacc37207604463dfe3f215d6185e3d8edf1f2158c93855b82c6f9252c13718419fde29133d30f8464a12619b045192ac0e01ecc280cf03c4d871134702df39bb3f659bd58797ab97f142b04fc698289ecbc3263ac04b4dc9a8a3761bd3d7bd494b3955f2f1fee2d4679a3736a1806a85e677dec80ada65032448a9c88b158fe7c7aa1548edf6c71ef8fce391837c748585a5479e69ae16257090137bb6e8c8ac16bfc6abb9a096b193a01f3bf5be69c0fa4f483def379d9d3c8d7e2570653889a987f5a093c7fb11c391c4a43a573de8c40109ddbf0770bcebc92027afa6b188bb9ea90280a7605dd073f81687b5cce5dfb83ac0796923eac496bcfec080c1de7348c8aee7ab662f750442b15dab27b5029cf6834209aba76e6061788efbe287f54917f534766fed48685c52c4f3bf9a74f28e0f19d2482d0b160a95fed40645b5d2e4aaede9bb5aa4fc962c4b09e143745ca2bf9e5ffa67825a866f0b90a8b1eb7ee5b8f563981a6b48501656d2128e20de738a1dbb33a34e8f35af261c7d9801a110627358fe667b0e228ad65fc9f089d74c01d8c23aed96fbf548c56db01ee5a937e20720a466569b476378fed295923c8ddce7c72d7d000fdc2eb461ee369a390e4555ea54c4ac665131525c8872c72ee2bad008f504bf9aec453e7718dff24842ab56d0b736d4bbb8619cb5d94535f1eca74997cf0c68d967df8fd002d1f68b35beaae5977049159e6549c9c6b48e9ef4a46f2ba77696d3e8238c0e94deae75c0be98fae7030bf832472999350e2e9bee61d14e173eed4007311a84026b753fa1fbd675f010d6e1bb6cca84e5ad4010244df3ef2858cfcb2d76f4e21badf3a4d7231ef85b70d58fa62aeb8625facf3728cf202765c8a3ad93553991442a873e88b8c08a32479b6140baac2b9cfdcebbe41d4597b40a084673983ffd32f1e910d1c2d5d2d86816addc6cfed7aa7beb32b9924b35278e12a1f783eab058a74467fba161c7aa3472fcdab5e5caab5da0e54f8f915cd3660c2c46b79215e1555e519a66340b7d97e87c1395542194757da580a2c9b94c4b3d60a18e7aade81c5d7d7f2843569d8b1f906fa577be4839d6fee8c32214f620f520060e552758e0baf84fb1e05ad39309071fdc824fe0169bd6a4052445a1d257873cc3acfb9b192b9a0f5124616814f1937aa7f8c64b2d15ab660493645d9730081187878615fa79d14d72d7d39da49c862e598b7d852aba1f762f0452a6c4c02b2a84d92868edd632cb081e560a2f29a76d566e91e096d2164451b345635301df7b1f7bdd0be800acdcc207dc32467393cb5b8a010fffd2bf0c70e4c858018a36e6c3d729223eea7cddbc4ebc125b45164110b9df2ffccbbd469088e44a5927f3fb9bd267fb51421e4cd49fd4d5472d7043d6ecf3d83f135de068b035fdcfc3652f074beee125a32bc490e846dee8cd478dc1f0a595c522e805fbd9a0e31389d85931cd1ec77b141bc387b97e36c6a252fb67b62ee70b9ea158aa05d745cdae9c4646936f9b7ed8045449de3bd413673adff1ca5b9bd18d6e27107565ddc45287c4b6fd916dbbdb3af7228b80483bec3f2b84fee1ffdd0cc65e26342d27f080e57cab2ce7a7492798cd28c3948e578d9a8bd6938eaf3bdbb884e8d282a4d2f1eccc626eb6a3f0307ddf64225b0457af927b3b9834ef8e3cae99b5f76b379d585fd29dd4339ca0c9129f9e13b96a46cd1beba69d08775f5feec6c5fb6ddcdf73d0482176a0a7870d01554a4c08458a952555a3d3b5aeea84610544b6e664d58ce9e95be7d54823cc1ddfc4da404ac249b9f9812bbf164f84750b9494120cf2bb0f818dbeae4f6349e4135df25a66498d3162eeb9761f6dbf9c315892db55ccb73fc9780408d5b695fe0096fac6379e04db4ffca19abd73bc87175ccc567bc20f29146ddbffef97a1a8b43ce405f3770cd105ce2f17b5b798f1d8da4fddfa83d2b055f823005f605bd264eb1eb166b8d1d16d1a7669412ecc62c1b43a69e70e313526371317b6b04d5c904e199580c2ee911e8b48b7da223efe7ccb236b199e88fa320a95e7926bd90a5fddc907bcba3a14abd1d497b5bfaa6c368ddaa0030a836bec18a9627635bc45f6b62d57c8fc245a4161553991d746b91811e81db2b7a687fd8597109574a73236ff3aebf52a1895ebb4310bee8f5fa0233745b899c5c569de01e6404fb3d215eab630c8903a665180a9d8c0858e1da393241a3965be88e62e956e99b2149bfe6fa6022bfc09cfbd3ec7581e5cf41b5559ee0f2d4fa8d168c3916c132f6374bc6d8140d421cb76d806b1b011db2ef7d54043c4d99db16ab3a1ca896c29d017345bcfcd0d2365599d4c2be03b82745e1b959ffbf1da66d2d55e607993196fae42734ad618cef0749980cb4183e5ebbac4d23ba021cfe8ffc680a7430a43c612ab27ddc56fb2cfa33580ca068ef50cbd97ace1660c8b0647c6561242d346296d8e188a929510867d9650cf5820a868536dc99aa903c48a7bc3bedbae95ffdd2dbe0f2049f65ffa1c70c3885e1c8fe3aee7f5c52188899942efeb3961e6cdb6636612c8041e6821dfa9fe92793b61db81d96d7ab65cf6dfa37319a6ecb6556926654a341d6365393ea03f97c150b22c4098a03029703a594b3791367c17fc8a8bf56f7186f6fbcc714029d2997f3915202e011cb4ff4cbaa66b375d14db9e59a6bf77950b1b27c977f78a16faec485a713fca2de5f5e6b621691141490cad5178c1d63d5782c84dea29647379db464d4bd6d7d804d8814df761e581c5c94aac7b5dee334bbf687bff823efb77fc53358f57497bd7bea18eb3ea88960a852198de6b3a2cc4ff94c47be3871c2004c4286c2260264a79986d1910f2e87fa7ae2e58d19f8053945e4304c286e83ec9647802f146c716c7253f8f7ed9c7bcc62691cc8d79d76d9eac6f907f2707c1000e29925204c01b0bbad93006e77d68e576b87807981900f869b1fc601b67cfb6e950d1be5cfec6903ebfcdb518a93f444305b8826260fa7a607dbe148512617fd8ac349b221023ae0b0d9fcca7dfa99f2ba37025842be21c910caa434f21b75ac91fe7200ee8168ab74c19bd440385f749f8ae4076945c947d3417195bf4967779d73607b3f500bbc4378f20525482a985b1625b3326755c6ca60f478a009474e39ca297b33dac01028a0d7a4351609ccbed973d5ae7279d63b2e02d48afca42630d78e06c17ee921b2587f2a6bbd9d233b6ecbe90a51f9d3ed3d53cd9328777a7a3bd4a947b0d3245ab587cc3f7bdcfe537af624b1e1e15c15504fc5aec3a5f83e996959a20803d98f159f36ff680af1e4342f96dcdfc06ab876ad3b6f93103945edb06b2545b268bc97e55e74e353a0a9c5d93f337c1ef4e99a7a6062b9426df736b61dfe640bfc19dab1822aea11b06f639458d80ce62628ff1ae2759ee5049f554495b0348f7f6498b5d5574bc354633fd06b2524ec1d2e2dae2f9336d4b05c32db247e56f8626d227902975cf0fbc17d85eb330773623a50c8c49645725d3cc6732541efec80e77cdddeb31791afbb457b9267ff13bbe8632406ffa2a202a025e8597a906098e88d24d6880fc804e821a6fb7571168fd3b91acc2ed6b10c3183f2067c1ae01fb54a5ed7cbd13192837762fd2edb66938e86f8d4679d0779d610baf86a54ea2a393c6e5873d12764c783f13efcc775a811b1e91f5605715e38177747002525ecb37959a5929aa8962cba9f7d47d5e2e41414497a5a506c078a01c2a2ab4e600e20e19d271df4be1ded524e5ab344b02ad6f7ce017e69c13df4e319cb1edce608cb3eaa05e47019ac4c8f4cd1636c51965727c27982cb4b6e5894926cbfc3d53da6a76debef4a49d4dad5ac84d6fc7f73eb3aaf250a718ea0ff9f4400581c53f5a596121ab9eb6dd418e2e47fc2a3b9afe8607c86fbf7970c1bf3c9b31c4c79d17d5681a42d80a558776475f4f38d84f4995325f0db35e7653598a3c5c56601bfc2fd6045fdabb117b13f422bbeddc17581cdcdff12553168d77f71fdbe23c92580a4906b7d0fcbb864bfa78490a422b0c1ff10da3a95b3eb94048becd2d7b41d770891c556fd96699244746611fcc9bd63cbbe463aa1989ba745779501f6e1af0183e649e5f8ec86f1e1ab449e7e1a59f7e5752efb5d1eb9ba3b4fadf018bd701f3b8cbaa00d6ae67d902431942bf27028a32ce35d9e0fb808b54aade2a8f56eda5dcbcd5e13abeb6a2712c2305f7179c5de3ad82f271c8da10ae3d6e0b010062c534af45e07466fd5411815f0572e5c4cad269ae88a64d3f5701c4a29210a5e1c311ee09dd6b1771a09a2f42eecedefb2069a5970d0107bfd798068eec37fd55b670ee6409c91dd1d8c0dac34b572f2b0ad562a8aec6ca818488a842a5311271c174e446cae3ef14d1d05d4a949fdc468692c3e3f808d160d876c2ce725cc1f8fb5c6b4e61fe659d6f0a6f563a7d3ab4ba71523e7677465d375c049fed01ecd29fd0cb42aebf5ef8b4fe06078b051cc60fcec40eec3de3da7b5955354de1115a7969d135c2ef45c286782d80568f2f48bab48517b4c1ce98047d35d78ad7413948a8dad3c574c6791e3e29404f8a0ecf11b72c451e588a6c7dcdd6783b7a12e85f7ff3315d61c38c1240e7a90fe948aa3c4279e9f60203f0c3d70347a5ea7255dbe389edd02868829cd325f2915b058a9f31f5eb0b72c3e16599edb00a3a69a11c0201c59c5dbbb72d740cb03caebd17edab83a817b8f38153d5d20302be70715152e4c999d9aa4e67e2f1f1d8977b2f2607b830f13073e010b859f4a642e961804e0dd1d960828c98aeeee5635a83860e261a714841d8b7d5424a0b654b68b5066e58f6788c285697619e65d344c64dfdda8fd3f59768471aed88a5970a171d6fcda1cc8236f155e458967d07a7553bf456c97d4703cf2418c1e2354ffe23736bfda9fb8a63946e89ceb966aab823e2beb5f08bc5d6c3c21549347307171e873132fc97358daf04a73b9d2ff35d0771a12107207a6831794167dbe69a8e864f465f3acd17fd1ca718868eb9084af217f53fdbc2fed3dbab8481f51b3548f1570d3acf937880e437a5084e66db23c1a1700649704a68cdc0e041f7d27c79f0b9940f7354e6d7ccd668b76f563f047c74ff3bbdc094cfb995f42ac5d0a633e9badcb3ebb1e3a4292ef9cb40ac13fa886bb8b4e86c3b8d2906feb980362bfe57e4d18545fdaf6f8a23a11eba62535b1b4becdace7c3c93d8ddd0941b424d36e15d719b13c042a44c9ea062cff13ed211be3dd6070603347f006f88ecbb0f70d19728d61daeda44b07a199765fc97fc7b629934d59fd931bf1988d1ca9b7d169e9c95e9ec4f7a987a2f7871f7ff8112641ae54466267d8acbc8007e5957e8c8841c9539cd3730f5072bf3f2b31b47828c565c48b1f8123ffa7bded209ff398b775dc6817c09b4db699609b9fbd2da98473df113ad6332f4cba1fd6c00205be8e1d9f66af01f657a81423893d746bc0d3ee38bca45f220b21fb2db804ead8e070dc9e926b12b4c9e870c71506f28dc669e0568c782a7bd66241803faec7c1efd0f95ce61513f01d83cb73c2ddca2c8302b9de21a52272984c464f8a28f058cc92e482b281c4c106bac3da29fbe9e7f4eac3a4894fb4180cb0cda70730d198b4e175fc217a06b3003e554eb84b2a205cbc68e4df04f3a39fb5a84fc1281407b8de29eabc3bf95a290cbf66d9e8332ab330444c4d369ea9d4b19550478c43dc7830d00c824cf2c2d9f780e0d0763a17ccbbe40e302d554eba8ebfd525b5a9152c535db1bbd5862dec0be412540916fcb1da8640d9de83dbe4d9f36376582cf7cd07b7df00f972c1260ae7ff18348cba20f8bf2b539fbf334c36ec47bd721f47ad0c6d62656cc749253ab7b9e9887d7af18891567e38ca78696da44c194af3a4514101c9c3e07b9c3bae0feeb93ee6bee6d27575495bbfdb006658e686f854b2e4728483e6ebf82cec0e2ec383b5ee36334416849b698465f027a0055868fe3f2e6631e1dcd2930c7e20a791cc79d60463a5ae77adc77a7c1b771c965c8a9e2d2e734f597bbded7aa6602630c9e9c3d4e080a27cb371d620d19c8ab11214058e2a21b2f90f845c2dd8f94080afe7378002d03929f418d91138b3035dd83a812ac3707e98dd4085155f60b223b723dcd1ff29223937189ee8dee4ea1e3a87f7d3bae4d735ac7a0efdb9aa0945c0d171173c4d71b2f345f65c88fb53e78487a12bf9056ba9072a3aad52836b5933c1211abf0c99da97170e774a21ce6ce23b9576c2fc4cec87a791e3db6088ad6a391c4684d7af43d6f423e33d2d3b717875e205cdc30f6efcc3801d8f9d4b3e1ecc6d587248bc2c5a05c6262be0f1201856b9a1e41f044bbbf0c5570b941e4aefaba667ec609ed56acb13f36e67e0bce21ff07d217eb6173d4a57ddd71849ff20a6557bae5e9830f009bcd85c55d02fbc962be4b995077717ebda20b4c42e0f4266480ffc90d3a79314fb18319a2dd39936c2ac6b967acfdb863d756c0a0bdcec9beb3d317e37074f08df4de588e11fa91062d0823f750c96ec777c010d96f08a2da3a0242552bb1ffb0c44da865c19c33694158069d30e50de4daac9212c348d37f9803b792c07b159242d7e80bc71ffabf4364dc606b19a361bad869c800ab2687a2821472715ad036be56564a9f1abfebd0610567892ed2748cb1f3c02ac2d38c506f96a5f5cb6196e4a12984671af4081ea406c748176be4e442318aeefcf2d6b9efe7c8fc14124038c4e543933461cbeae17bd2dbcaba2d8ad6a86ec53b2e34ef893e7c3b4ac8e8204173e0faff0e1629e090ae28fdc3cebf6ea701a43ee3d3c9a4062ced45405ac2719c964567f3d657fa666a8e53ab75cf5d7b60ee94c2dd1e6a728edb2a0309516ab913055d6955a26491cd68925b30a9795b27f4959f6988ec4ad6033c8c2eee8e7d05b09ddc2f7113809eb7533686c8c83f0490a6fbc001f820c6348f699a7333788e08db98bf2246df11986ed4060767c4bc4f6eb0741f5cb73dfa3c40921bb57f9f54d8c904ca3c9074246a780973590db4f4ce70a1b75fdd23b74c9856de8d744b7b1d1b6c310bc93e03276e51d5e470daeaa025a66473c708c5b82d85f19dc0dba86f78fefffb75d178e0efae2c9f4c0dc07b05039b1fa72f7c8b393cc8b62af031ea727535bf6e0e3bee646cfaa9fa9c347fb1218ab8d4c9b02c514a1361593052e5a13f38fd4692732f5ae9d7d5c38e566655127b1083c5389c05f4c374631ac2384965975373c9516013615f5fa9e244dc9097032bd37d77b1f037b845b903edd55c6f1dd3768972a0fe31aa8ded56cec5c9e7e3b315f7cce7ab96d6c1a67675cfe98feaba61ea8da82bde396140fdd057f22acb0c5595b20f93e51545286716d87b40faf1cf371e26ff36c0ece82c50c3e32e2d69b30cf7aaadaa51611e21a07e59f284fcc71b67a4a3e0dca987103d8ba322d783a438dceaccfc13227987e99403f2b9d31215001d5b00b0d768c34e81e3b2259671a4b7a6bec46e0ae151f4525c5ced9d4c3808c9939ecc79577a27e3c460d0ec2aa562c679c19345e19dc000b8a065938d8695d00a1b3f06e601c4483c9e57b8ad0404df93a0a29747f9d56e1bbee9a5c4fdf9343d26b0e634121c18de40241ca82f3c80c390b81ecd487b8e49e659a195b27cea041841235538f5c36f71eaa3548cdd2ce700c04536654b1dc8d4074e0b5b430070c55191509161ac82732095448196c122b97ac30d9cff6ed23f70af67d0387bebc7e284aa3a73706df9d28ed5d3f9db25882c10db00ab1c5288096d201b7fd0e852b52b22655a38a35421c507954fc5f35634983a7fd909240707a20c136e560c71d8e7e02ca697d6246cd48dc37d8190651c4bbf2bd1d5eacf956c7367f7c6da06465bf7e28f6f61dbd107b469f380775b62ec2f7bba363eb364e7d5775ca7a1d6028ec672920416b82930301a859244e340f7c645138a4c42e3d635cc2f2dba4ccd71c3cca75692364880380fcb23057f282fd7d384d376b45cae545c470945854e35c3fcbcb8e34bc0f61fafe9d0adc967283cdfffaa6be2ae8a88ef587d2d25f74b5e71d112d70ca45898979e286effe92868e53fe8552bd271df127326f50b89d38b8ac229cc62c87a9b43c957c29e98f5829915c7fcde0ba1f5da43278e62e7742b01ecb454696cad58d3f0384584b24479066c8c759e3df719195f57fddc42eafe87f2f671c912c86d32f7fab4b742197ac4d87df12d7951e21598c58fc2659cf534cf8d60904368abd86f8c1cc6db19f85bbd25192a8495435b93958c99f226c586bc633fbe6b911f4419cdb8b0d1babd4b1d4973854d6eb198aef9445f87af38f7e4e62cc84315fe46610104b15d97cf29c0bae2b64c9dfb1fa9753049345c1231cb5409145fdbe7336045974d0f5e933870ac957695bf19cdf07d5f3ac36fac2bffa9c7dcde7f7e56b898aec6c9db910b4d722a673ecefd726c0f589f43b6753de2fee0438e93bf0a71af7987bcd212b3227609689a215edbd5d33e6d0b359bfab00f656f45a2bb9a0c0301227c5d836f98f03f6a0c24a89779be40a8dd94fb46c65e6723326464a46f6219c7b4348bbe3c02d9cc350aca5249e31217ab3d6fa16a852b282b65c7e4766fce486cfb74059a01f09b675ce1207e7e5df30467a17b8bb858f0cf0944193dc6debe1f1508637919707b5d5f131e9aa6642f686556711d82bf078f38299c4b4559eca5a80726b85be5b7639538b77f4218e824ecaad743824669de17ef2e5ff0f010ce6c282da924c89bf05ab400a59205a97c3f1a1ad0cc157eb1a1723a6e5939b33515e93fd88cca00e03b8c634f9ebf7a155cc9a63227dcfa84679a9fd636cb9008c83a0299be279526a1645e6c391ecfddd5be7db08157db74ad37563b6907ad1a55e1e90b4fbbe95064a9674169a1fdfea56d64ffa7b1f7d414605bb5befdd1c19f95b363bfe209fd27691c9670adea29e614e36e121444c3bc4aa0b14885d53e2678e75d7ac38f7febd317882410c383cad1da6eb70faa27f77aaf653b1ab5ecb8249b16bdf8b1f1e7380bf4860b885b3b7fb0075a88c5082c02c050e2951c1d246b9c66fcdcc7cb7ff76fbad969aeb80b581299d4f7bb07dc5260459025cafa86fd0455366639e91622a9c808254d1e3aa064ddaf9200faa3d99a68b807777e0490ca785133db541bfb23810b697b8b4e7012ab2ca0c7454a13290249641e1a42c8222a8e1380734c011e03e2ed2d1acec73cf70ec53512306c71d74667d6a29014c0b355a7599fed110b62565742a1ca47a8d716d9f8873f19e68027c9a5e67a46357c52751961f17a3a9cb0d39a047d090ff9dfb4827b144628aa9e80d25c12f5295aaf136306913f06a5439edf7a83e0562b9d6927d65886448d6310d62f2a251fca9433f334970e73a926f6c75dc698760fe4aa3ab4f03f7b672f4cd2a8a56a66729698f5b6b7dd4165262292ac39723f9a046168b2840460ecda2e5dbe85a79249cadb8a071237b80979fff09721b4d02dac055fd55a28a73f55422b7d6c50f36c6db555d3d626b4c9834609de9cbc507b2167a9815bd6ef887f25feae5c08f617e9466327331a9e127379947bd7604b095494462e68ddef039d787a847c2715643e61e54d215b719bbad6221859b4764342381dc81ea0d204d9eb480d987df1a3c978aeac3927745948db2c9a959804967378dc7f3509eac12e2936b36f71bf82a4a955e1820b0e40dccf371b2d72483b2c88c2139ced8504d64168900c7d2593dee263a09e9de2931f5d1b4ff7eaf7b8de3e8fb58086a39cdad44c28bdfcb6798746a3c0badfd3bb56b5d35575717ae026d16cdb6b180c752d3810258317075d146b98f2fd4f7153865479bb6d12bda4ceb9377bb780147e5c10284152b27f4e5015c92800fd9bcd45b5f0d9fb27607f4c4f41ec57fa411e607da661b281b7046d6fd8d8791f94056169d99d68f0357a0bd01611d9f958146e94341dfbbd77418e402d83d0e3858f4bcd2b0d45812cbba4b30e3f4c87b2af394c17cdf09d2104f93ef43f7f9636f4bb70686baefe0f16b08560675dfadb48d41bac5dad0e18fcd14e562291fbafcb9d3a302b73ed3d1d5401ddba2de6bc7444d36716bbbc7b410683cf5e59cd222265231b7572ec237a5a3fe66510cfbf91e92c401a0e086f7daf50e6b8a55707e1c778eeb74d2c75d8affb7aa8aae9da60a97842aa36edb31b0ac090a19ae4ac137965337ad46a434e0acd96b1e4e649b860fef9053e11f4b64a0c675e3fbf6562561122c4f3096a5f6311750cce92ff192144c8086c387adffaa4e36c8ab3b57bc1b564280ed04daa6b6c805441c1ba975bd796b45a8ded034e0b183e3e3f153f5821c2784da95c022162df63fae17248515204bf23a5e7d2ea60b9afb0bf3ef3e7e75282982a28979c1eaf384e8c7dab03cd52ddd12f89c79d79ab8223895aa311d82787e13e24516f58aeeef9c27ae270b2248876e8e4d9c5d5314ffda914c7a796030c830fb297302c58921a088532402a4f05b7ddfe75c6d002c4f7e605cc8de62a7037e174f044278721ccc981c6441a96c49728aa14071fecb93151acd920a0277fc1efaf255744aaaa7ac19dd95b94001be0b850c381ec35cdd2a37c72c0d7d935b990be034552f3ea2b2451ef31d60e193a8a799f91d4bad47a0fab2b0d28439219eb64afd967db6e60999ccac0b1743dc3141cd84a9cc8cc436fc3adac369dc7c00e1944e11a02e1e2a81144618c7076201cda09a1a39f48e2f2dcc0b38cac58110fc757202c21597afc04132de5847863bf99330d7b293ef7386b925d4ec2e2533c4c4c1bd61b5e2a970a5465d8ca566e9df32fa20ed3cefc8ba536cf963eeee7aa2ee50bba3c5fad6ad53dd96d692cf72229c6c2bf29caf75d08e0bd1b48b6122efd3d805fc28a470df6f8338af232049eb33ad508f0e908359578c50288273cd0ad9697e5c81f916699835ce9beb87da313bb10488a8cd15863ad3422f438426d2561d63ea259f0bad55f006dcb00bbd325553ff26984137dd00ecb2d3d47655f958a8addbd8ff50f905aef902da36f9ed7b47ce2e789f798a64f9fbd37f9ff85039b777f4bcd0a4cc1f97c70464c66cd77ae1e6dc1fdd07d4eb71b7a8130cd303317217f956b053b76b2c4b6ffd949f36d31918aae5d442061c9c57a0d9c665b9dbb20c10bcde09c962814c91e120e88d877bd3d4c4bb4e1a4aecaf6075ff0481530b1c8586c08879b2b36af2dd7c73e3a34473415ac9c64b60ecf7d3c0cdcb56c825d110cedcf1b06dae89f50a8c7f69b013e3b0a48d24023c2df7f93ef052fe444a3ac028b8e5d7e39d4924902aeea5da4edcc951e541665efea08b8b0d0c636bb86de1936cad65d294812136747e401dc3129b02cadbd4f405c7bf7d2f0c5b3e8d0cd14e8dd2c55d269c4676205c394ff29905ced1782cc42095507abb985e31eaf10ae3dd803ab28e76ac72a65e307a25663dc26b85bd4451748352315631af6afbeeb458d0179d5f92d65c9aec26603ebaec944edfeec9e4aa41105822e7c4bcdea896003fc83b0caea6babfad277b59bc00fec6d89707651210aa85d6bb18ba915181afc6efb26cd427363a93865caa23a5669c2cacff385dc400e231ec24fe2310ae7e5cc53deed71d09f11da2303a3d464d7d8f035b7dfa71e5cfbb84aa3c0a84b5e96c6dfbc40b2b901de1e0e25cea494ac854fad61fe01fee6e1604472248adebbeab81d612f77bde12ebc912f7518f3b37b828353c26d2de21cd0d314d179954cc0da2ef351f5a9871a4d43b66cc4c58d44615d4690ee2ef5109337767f5b50a3298e0866fc77d93d5efe8fae7672370432696ad869c45b8fe66964a18fc7b7e3ba2091f75d1e00313b5a109cdfcb3259e67ef5c26a8964ae2e5be1cb6f649aae42f467253c0790d2cfb270d2cdfd012fecbe530960051c2fdc91b288d6867c88ea4d09d2880664fb6887082cb5ded34c539c7a725bef96350001d083705e341a8ed59890657c009997dc00e690c1621f4efcecd8e97ff4d16ca52e9c21d52e55fb96d4520675194a1005354478ce5a778a86d3f35fa06396f146628f6bd1f0574bc9edc08515254c620f675603993472c2899d7cf7cad6b67c3812df0d9f705d5ad3e1886ab8946a1f54559f40a4d7a71794fa464c49cf5a35cda3873f2c1470becc56020ffb641fead80fdcee5bb1957d2aa0018bfc9dffbf9d1bc9d0b2e90f8400acca9fc425a6a6ceca9f4f22a114571d607cd9c7a0f09c53306c5a6ae816748813917def7b478040bc0aac5da657634d9aca382e2f0d532499e6cee1105a2ceaf8e397378e05b6d42d0e497958ae1d75dc414deffb185a5b7ac5184667df07c9abcd4c3676b1b8c5e36e8ead5ddc558e3ad9d31054468748a6470457d574be2b3fe0aef15ceb6a5c0dada697cced357156d3ef8541ed25ba5180f3fc1c4543e05b8601abf90f5fceb020d15e770a4bbd7913d0eb9e9d608839ab8bd43c2dfa40d01ac508d075827c841b173eb700c53e15e80d1b7cc8e67f8bbb06682fc88964d4fbf860240eb0917bd2223f35c22877e7e778928a6705def053f994d29644a2b1a17b8e54743e3eeb3b889aa4ebe54fa5e2eeeae6155b7958442a40e6b447343a1c685f1ec9fabee048b3b3e3b6af3f6d6f30942e7021ff3bdc4d30fb2149095416a119f00781c1ac6ad7bc24bfc058884cbcf1ea55f5379f25e38272d57ef815a64a703cd860e15d6f9393860d40cb6b6695b340ac518ede752e3f0c32b62506ee3b7c8d183090d5f66d68b1232fa923be625095ab5e2c7f3f0a9f21cf77daf35b6a35f4fcb943dff41094de78d02da8c71abfedf07f196ef22e671a7ec2aa3d4109128809e48db239c4669fe202ae8ea0c7808b81cd76c180970496898b0f1c3dc7cb0e7c37c60ecd1604f93d5b14b7e4c08d70a5361236e44934d33c21d4f27c37e342fb91ea82a44364a40dd2d6dbc7f392dd015eac6f4a309990943ee23b3984b40fe9d1399cbc8cc1b4f4ed00a28c7b8d47d11f5d0bae40c2dfbaa651b79e10cb720aa5da4030367323d78e72bff8626dae2425e2ded16908cf4c044674d5412b7cf0e8816800f4b7783ef2c692e9c1d3d2424feff82cc8992a8504cd554ea7c1f361d3d416f9c4d6ea3d7585b9246b7123c923b3b1c4e5a1090b9e0cfd6c12d6fa189bce9fae2f429b15dd88858034d6d9a57b89336f2a84ba54f97a14c23c1599c6fdc7131149cdb83fed26d93261791dac10a4e0e46fb47bb917a815ee28f1834f228f5f9e8fc6ea8636f1b3a0aac322dbd9a89b284b4c137a6b77392d27c70442eabf78fc0b03719fd58f86a237a390f224c033fb19b9a3f57bd115d6adafa4e4c6c15b1d2e4cf531a42b13c904232a6c9d7fae0cdd4729f2ff945ddb6575eeb205a74abc7e8c065f6b3e01888f352f3c9fc4522c8762cc4c4d62ac9363b99485031c9badc3469282c6b771abedc3b71543650597378f0634ea2ec05b7c636a70de772aac2df62a7c8bd4e00f33886dfe4b117e5378acd7a67373ddccdadda1e987096c44dad490a6c1f5dd76f8f99cbfd2063c1bce33e796c54b00330100bd6ce79b371d3d49ea13a53d704940ab27d2568b46e0d92902836a6e32e709819859ef668dd2fc6b5af9679555eb6a4a1a9fc68eaf5b5b059410a2c14cb8598c4bab2fc1ae9b6c8cb094691b46db8354f187b70366c65299cbd029844265e8b48a2146305359d5e5b6c5cab4e6bf456b07c7c72928a72ad2aab71305e47256285468b7f48cf392a110ebedcff5660be0e201a927b74b91ab82bcbf043c301322ca3399fd0554f3c205f5ec07f0b2b865f9563964674e4e4af41d2a880861542c1ee402e596068ca01a8f5f67dd8fcddc4d9e1506caeb3951c999c2fd99c83cfce4b7b40a84769f2711e0815dda736c9a89403773e51f75a07a7b7580760a6f4fc30070b85ae2804ee44b58d1c798ee9e2266cf4917bf3af29ceee813a1151a6b47d4c1d82e0cd0a161e821f69850549f86d02439228a8995c664b4db32e60128fcde089e127254819c7937509fbc4bbb676e1dfd84a1512bfb3956ddeae6ee7e5891c45bf1cbade99d45986c6f122fba75fa3e86f2dd4c7b985be2c8165103895a0e750036da27443957b9f0d63f1c7fbd9576cec355536bf01d7b4937b596e183af87170e0d528c1c11802f167c80acfb3932f81acf9cdb1adeb44861061a0bc7899df4cd95325176d0083d9e0799f8264ea74c8155487b785cda5f5b6d2ec472dfb3dd0eb44145ece4ed1395e01598b15fb199596f22490db7d8922666ecaddf7656da9d0750e1c4c899d48ddbe430788eafb8619d25d4560643b905696d5281081004bd74e8dc914e127ee052c0bf503c8eda05d41b19ef898121bed9ea455def7c9cbf4ae688592b20077d139250eb914efc93b960150c7a2f898e34bc4defb9de06183d55f0ac004df04f3b31888cf92d8fac2ad69fa2cb3f2850443692e37f4d69b3dfa695041d5f6e1e344d4dc0c597a696490f74846bdb302da6b88d5f090bf41ccb7bf2ef67a34348b8d77d14111cb3a047bf6622e267042c9cadc87ad10cfc3bffd88161a5e0d055a1f0f9fa2823e0680108b24a122360b935b1ec5f04a7a161e76fa4758814f8f189b97d72ed6e0daa5c751d4e3f30b0260d435295e4321046a617676665e53879fe48ffa51bd27e9d586a5dcfeb453dfd298b9dc62e1b3dbc632d35e4dbc11e4dca6da54ca9a8518e3a085afa28fb4d045c44fdc235fb6c8b70c04a11ae52080a8a5c99f3b08fca6c8896c213d7a2e17fb697d8479d9012b14649b8fe1c4f32902e5e5e3c92ba9f09cf31a3fd0e80462c007f6e5133ffd64a7d9d66f9bdc3b83e3ddd125ab202c9b9a6ff32225702a2829f7ad5a01fc8cd0c71ed016c718a41daaa45e654ebe0ecbe5100bed4c4003334942469c84d6ec687dc5b7419d6a60d301befaa7fe594faad65b7f4ce9a5a0161b71018ea146100163317ac152ab39f02e6e844fef88ca14faf469d7754bc4bc2b6784fad7414b81e584f80380412446b72e5753dee4b9d2c159539265b880868a097472693e45ea5ae351322077c06f3473ea464ddcba9c6c9ecf169e268c0a00c8f03492cdfeadfe7249e35a74d110313bdc955b601ccefa86894a1aae492dcbe0064cafc6c754be6ae5d1550715520f6fd30423ce3d1be187377ca9b26822b36f66e9a45838f44962de38e2deffdf11c31a055c6d15fd74dd27229c7a3feedaca76268dbb5c1e2b4ee29096bd37c1c53bc26f5581633265b11adf491d540963e6c9a0e9d5cb107b29f3348fc02b38732b8fba43106a04064173d157625eac48dd82f13f6d0503ba0df84b793c9ba782d2ab7362323e603e725d0dd876ae77ff9c8b0da24289fb09dbb7eb366ac94b92c1fd36dde26aff5478709fc6cfde397adc2df8fe7a519942197aded85833f35a37019ba01f9bb58a861838546b7dd5ce8d3b210c93e75b0e0e0b7ee6ae22c9a4506b2609ed63b8809399dbbe93ff6d97a4eb0f2c22376c3e9c86d68e22a496f45bf660b9f6fcee6affe79984c58226bbe757ae3ef61c7512fabec5c210a7f2c2f3fefee904c8c8f6775cdc1d4a720e6082d815f96736460781d5cf460bf64d9b5ef478373c4b8de234f992f50815e5348de902972938cfc153e1579ac5b8f5cb2a3d0ebc36afb399c20756c9a144675f63df2b750e5965fa890f9927e0fadfbed9e1eaa7e96981022c98fe657b3987cc04d2760d9aa1a8544f0a24c257d42cc88cea5cd072866099b8bbe87b46c1b3bb2fb512a5733784cdfa208f068c9be23a27d86b8b5182c588ad1060a86ef8ecca61b34d2edbd23cabad444eb6ad27aa2f070679aa68fa80b949ee4ff2514ba85217f133d1043a886b481114522d85def19c8834aaabbc7c8107843eea811b40d3e73215945126d9ca9a8d9c4a41fc248877a1e871d561f3d19c0c9db19f6bd139b4cb5ab5979a1e0e6f7e63c5657bab583ae8d87920bae68e80ae598b702b0c566acef1c4f1c29bfec8d54f27ab3018bc77303c1d04c9fd303c214d301eb586e73b1d259f314bb14c9e05f515dad7eefaa92020abe239c89f462d71194f69878fbe89a548a6428b00daac97561fa7e7764e45403a5f6fd46bf6fb5a19bfbbca2f40d51feb5b264293de40ac8324b1bc395f027cb4546594be4df47032c53a0c1d9cc389d60b48d2cda9d0edec178aad3752e0d5446cfe5604e06fb2e34e06dce24c2789bcce7b04ebf9c8d6bae2e1d5a6e9d80a931e5a7a86c7fffcc3969af2830496d69a7a262bb40a83dbbbd11932b233a4aeb48326b1571e95b031ab853976e63ae1edd43de6ec3ee882ab006c1cf7ed8fda30168976347992e9a0ff6be6106e883f8a26f394bc78ee9c9d479b7add90cf49425f9cf94eb4d220e52bdeccecfdd5b948f85cecf3b93c1d5eb5467bf86e72aaedac1420a5c89515e450882b515ada7a1e2f9098efe679ff5f1590f7e312cfe640010779234f27557c836b778f5cecd73b4f02a77a28f08532b7e4182081a70ad5a2c281ee975f1b5fb15eaf7964d1989ad2be22fc98adb1f5144e9d3147caabcf3ff92f9fa67ecba602b019d3d612ffcfe1bd13814f4ade67b68cb40557f474259da186f83bb01b4f1f8554530403c504b3a4753f99680987cf18b9ae4a81af067a8ed9104e144e8dff4ce7dd0dd778d57cfa0f0ca5a5bfca85a0925b153923e815ba78b90a492aecaeff3eee8cd353a001e86f91956f71d18916b9ed775a6cfce0fa68458f7af266e259815b9853a5e670877920b22b171725d4085db6636c159c288a11b406cd09195250d690321b6dcc534e58bac5c0559291baf00dd3af72c6ff5b22fc2895b7dc8d44c4d9d27e77bcba6057c8c7e2a7cae2cbbb58ea77acd7687ea08901581becce3f1c908c47b725215bb13dd964143c7d505652b88854d482d00b444ae5adf66e4d4bbe2868b1986a3ac583fa024cabdae149812bfbb372143e711b63cdefcb99a7dd813aa6df752b57abd3b24830659c832c64f60c27791f1e932743d99683b0b397b8787836bb01ae1f72b4991688ef6c6b8a94e6e8f86a25cb4c78964ec2e25594497f0ed9a82283192e125f509bc9b527d715490a145b0b61a4316d90c805acd8308caad6f992e79ba9b11aced0edd349dbe8e8bd359c8630c1ea1b20b977e78cd150b50493c5a62be67c8f0b9994fa56add6c14ec3959d29c6931904abc3423d14019c568e254920ed96efe031341c0580c612e43cb57612121864ac61038e2325d0f98e089c5d8daf18dad27d2307124be0fb13534aaa446cb295edbd21880cf6a7037a485ebdcae193dab3e4ea553fd91bce559d154a39d37776c4dfc51228e76f867d255092c3b2d0978c77ff74f31dcfdd28bdd0d7f5ce8a5eb7cfa547ea26e62ff44c3a6ba6e008ed23c95dfe17e4b1b704c1f28b42765f5b69f4e50e78b84d81f16753c764e9b1f06ead1aa309559b4810f1c990bea686aa1227190a99b68a9aa45773af504e82ea42a88ea37da99b7d4c8fcac9f567f003784ab393e56ebce1b98e10578bb5e95968fbe1ed38cb19b58e9379cb30f08dbd02e0f378d2ca996b35324208d74751ce2a44ecba84d3ca8aba6a0eeef8fea40f835543b9e6170d8438275032871fc866272ccc7a0892cd9dda8e309e8a0b5dd9246df7d55c8f729254365484c53f10c65be6b284d4371c28fdbd68d652b10811ad7a97dee1b7859e84aa35dc822b5a89e220b3168d2f950670fdac086d58ce4ff82456eb5894838de7dd6b50785a88ab2336cc5a34261cdeeb71c302bea38a9f4762586dc2694b2d3338a083e5b2460e50ad58a2c58d53aa250e717398ff3d1cfd60e6257429e8d8d63cd2e6cb2a1a319c62d39d2e898dd7a7f51b4b2ba9865e303efbfb2e5fb63a1f8a4d2322b12436a98b350beeb0241d35e4a17df0eafc2f87451d53d89e65619e526674c486fc28062b7c5a244e67efefb8b50deee29a28271458eec3f03af0a0a8b60b6aed0bf7faf1b9260f82b7da0d5672b8d8ba642440c2e6425a643510670c97d5b17761de44355646eb1583bb4a10889e107686ba0c25e7a01908117fbde5af3584e5a8a32e18a72303c710ba22067ede32f9467618e5edbe976b74923b2a12905cca5550120c0edf761ce9cfbf05678eec4cfe5bbe16c8e8e92c252825fe993e92ab4758337a7cf24d74e7c72f8f3c8f7e20851079f88e1cd22b8e95dded135c82c5bf3aa6716f5f1d5ab1343c5ec932675f47834cb2d6c5e85c463e029d030af117b9b373873c72599deafe6864c9762aad04ce13f1827b0d4d3e0f48361797e886b18d5a86c535879cfa5484f4bc91133a8565d67309c968e1708e9d48188cc525100234ce9b2ab974737ef5062aa795ecd776279e65bcfaf5b51043aa414f7fa240e5c261e01e3f1e33a9434bfa1d037f0adb8274ae3306674459121b63c616d707fd533a6838d8165aa3f8b7ee207705dff31efac305daf2406ce482f920364be82f47070110354f5f86abdd6eb5d9e8acbcab61fedc3c41ce5d4aebb39ddf8d1a8c52f1d8f23266d8a6de7a6cffb78da04f826daae1b64e36123a59a78c02b3dca415b8c982554a73eda64f8b876d225469a03ec3fc7134620d2020707862aa6de25224d7415a539ba653ba65ca0816ebbe9849fe3ce8901dd13bb037168d77cde2a3300f491f5d30ebd2cd90b24bf26b88e562a3253bc2bd802a901f53d1dfa585b0d047758d6975077046384970a1a16411efdd57f61099555d7f33a999ecd39d051189de4ad58cb6a02fba6bf416eb7d9199eda3b7112a4214925d31afe4dbcca1e1da6111ea6da3d1845bf119d8bb65111be7a479a84569513c3a6e3b8690e0027a1daedc945f4893b8c877e414cc552363c62da0842fa6f06568195dfde1fc63193e1433d92b80bd331521415d7d9f7195b7788e3e9977f20c52f67948a8a038b38d4aec6bd28742e8004bc038a5eaf0ee3e0818c8625029a7754c7fb1aac569fa43d616e7be27be68a071abbb4dfed3c0f2087842ccdba27ae042f74fc820f20f10734761d8945b98e6ae2c1f1a658df3d24efc29abf46e1e5139d884734a187cc03e48f0c3c8c76e762b72aca852983b71572262181bfd2055da1657295966a678b54f9bee08fa77dba9934aad8203b45ff326b407c4e6acddb2c28408646d198f8c050e1375f133fbc42e235a777b73ae622ce303016758df64706efe1550da3afe7c566335e6b8b925b4d72470db6ca13fc34f7f45cf742692a5867148cf979ae6471e6390613cc0ab16d6b5e7d7b0dcb1f8426c7747a744af1a9d540f71f65809a94f85357ef6c69f555ef9e992742b35fa335b7aeef61c63e2ee5dce4c32ece8ce195aa79e260a34cd77a16313eb453d6d93381f996364c787528f71c8e1340471f79fdbbf768ef9dcd371bb6af1816500aca5ab80ec7c4a852e0849986f881cc230cb1a6186e385d8ab36184cc8638926714b28ddcda6254a189d2044dca4e8e1c68647c61c0dfc4dee911309af54be70c16a148086f8555b2f1017e445b99ecf6b7a58eca2295fdad89b949b35f03649f4bf9721c08a4fc7a0893570e63b4ee23cad238d8753b6ecefbd18a59d280041a06824053e8e60c921c5199d44c3b00fe0cabfa045a293e686ada8dfbe9385c15d3b5aa5a92d4f88fe136482aeb1f4214013f985efc2b6d87665f91b150985329be05efaa2cec71319f8e30f4f321191f27387d03f44fa7bd568a8954d89d22210685701d2e93376df3c77363d5e62ce23e8c6b4f592a8082d6fad16538f6b497497e03d208cba3dba176f776b9fc6472ce085408913c287986ea468410efd493e477e7fd33e89fd6fa8ab5c14109f879994fc14b9862e6ba0ae447c72910ed74bffeb0c6852b515a034cdb70c5f36e5491260b256c06f1d156b468fff80d95183936767024a0905ebd473bbfe9f6dc8cfd2f3049e41d39bc9bed46dab4f0faeb69c7e597e50b91f7b4ac572eea8f479f6b2f89f7521e9de12877f3db27d7a06cec44ad0c56dbc6e96bc3dc203423d2b9ed6a9157ee35f8c035bf5f1793c487f7675cc2376f54ad11ecd656f44bb3be07f6b0682a3a65bc4e0d7cd2058850d4bb6278e97dfcd17c1d57094f8d7d98078aac7335f4e7357d247d7b804356a163921509787e89083053d93cdda2a4442086c22557949594ba5565e08e95f177f3626ec845460137ef268af2ca49876b5a110be6a6450e1d441039a89ad0cc1bb9fca3b85510a4b3b45995655657c711c4ef74dce8d2054fcd176886b811c39581e669680dbb9c3240c46210132aea4672ea9f8b3d2b9f096286ea3e630873bc28b5ff6ba4a4eea97ee3d23f91b2d57fa81a6ca945492f77907c67a469ef39a55a4d485c1b2a66dcd5d8fa8975ceb82971b9c38c4a916f49f27dc058b98ec2607fb453f4bd9ca38081608e4665398d05b957443b9f74cb331ff9bad57516b646b34e2b2a266087918f8647d4121c25051b7fc367c22be79236c74776453c6fb287cf5e6007e75abdd8d64a345e2476409cd302fbe78c61a1b2fad875820c8c2ee418b399d684edcb37a75db285c5057eec2d8de425340d973513faa27a484f5e59c5b0200c755e1553a4aa22fcb9c78018d8edd040cbaee8bdccd4297df0d7135fa05798b3c6a915473c086d4fc4c81fe67f0deda46588136505594ff6bbf374a7370fc570ca5c0c55606b9fcc27208d703f54e2c9086d2d57fee6b39e6b0dafc8d67b71a98fc7bcb7b1b3d0eed9cefee5162ee077a8efbcba4ad290b8ab15e9144d703e99afe42fc7b05330dde63ceb5f0fcd981031baa2e9970c7120cbe1c035fca280bee63d4f41775753dccc1dfe9ddaf2110aa551c0e9a1bbd5707ad18b4b51f02dcce165c382a9f770ecc04bae420fad08fba1ffa4eea9fc0b3e5b1290a83698ca001aeb77662679857f623ec36a634a99e175f17ed42dfc02135f352f808fea9c4c5a02ce4d33502eb0097e1d2b4e512ae6330022676eba1f89d7a9b7ae0f0da511ba6edc4bcbfb1b4386c07a9a296086df762d7157c46613e16d9c7cd36f918645ec7b21d5d41bce9d3ed575d3cb06a2ab54fdda81cd800962b905623dceb3d53ab4226e0bb41c9c4ae3a87dbe0500024be34c14f13474ff2a3393af8749e0dc0600f6558c8df8b9f1803c72e6401082f1df2754038a60ed5cd2190e97580af87a3826eb80a0a7fc88b8c761be44a5cee37158d9761b0fd6040fbb67beaec771f5c9831542d1a683dc089d2a24e110d3bb51f03f66dc496ff8a4ea9ef7d471693fe805aa8160baf874574da19710ddab250beea6847795f8a4f7779534aa3985ce6e2200d67171b50479cd9aa2bfcdf1b285aab08c2a96ccdaf6cf0509ef47586bffb162af9743cb83fd2325014be78f80e7ab73aa1f7d4c029ed39dcd40ac471099d2641c165088afc123f87df7be21df91f437df57039288f7a3b82a620d05f157a5616a2bbd29f5499ebbc689e7c77358ca87d9710cb5276dad5f4c51f0d44b239763e81e5ba1a4f913da0f06c386b660d8df4f735bf943529fed5fbdbdbe50bc5ee3002b82db3e634ffdece5796340500edb3332ae333f09a35774150c3621610089f0c3595b7bf3fc9d880e5bb895290bd0c3af5b38d2e7228fc1ba93eed6946d5ec6566b26af4ebe8289bcd0de864db1a0b8bd4967e8b8781343b18ecd955ecf8c5cfc4a2005483a1d3b47f31510a3e84c3c2b9ce399d77b26e2d2fb24f2174a715393a1caa0799b2656d0480b2b2f3468b2480c7dd5254ff8d51baffa3a17a11047619d92a1ca81986d21f2da2c4fa3caa382bf9c7d6c37f4c855f85c42b213068fb8b486475cc28c9e23a329cf6260e8f278c818ee0ba5af4ac02b6cb4e2671f961c284dac2b1bec2d907b2b617d71a91912cb59fdd9a9501dc1ea70cc92b30b4719ebad39a8832a4d35300143a884810e7bc728de86df63dec04dbb34ebb88e83b239b207f2bd65fd149572953c310bbb1f3adcdafde62e0678de60897baf90cd4a283e5f93179373feaff367dca9d1b7b10092983358d377f3b894316a2b6df70bdfb5085440deeccf791f0c92c034d878e2a93251c4a2730664d58acbcfa8414212d10847c58a1fd9c6bb73f92aca027f455f27bf8e0a2ff875ecf93845a25674711fd0dabac607f8c0d8ed02f04c11da58c1cdffa895ef07bbdf99f0465dcc8d57feb955ea11d2f47d632a499513421f51a7b5ff82e96ce1076180257a63e82363ca1773c7503e435b452e8c3a631e4464082606a486bbbc50aba56714c1ff72a822b2601148d44f4b8066458684e86fc2d5682fb63a2dbd021588f3e4b5f8993ecdac1f8537c50e27657476558cd74bac90b959f6fb853717e87b548ba83b161909ecf94a736925c8ba3c06f1d33f3c032825e6aeffffbd129daaab9edf562bb5aa4028d4fcd29632c79ca580ebc94b41d0d74d0c2c278e09ddcc17902c741e746af88c1f342fb495418fcd6f9588d70e132b98ae1c8015999173a715ee1872af0992c9d0641d5b916d073a140e9258fb95a2d36194353a0f6d3288bd750e6219ad2ac87a97c14d1564ac4843dc8096e1fcb385e962bdd706525576bfd8417c0740adc227cec7489b69b94aa5235886901d28f7f379feebc882722b16d9146621839475c5bf5de349be7397e5648c2989fb0f14865b505163bca3ae78be5d48230f16f35ab37dcc7e04ddc259f9ec9e8a4c15f9d99025ce149334e4e7bc8bbc697b080332f292fc2d2fa4411aa7b2c552435279cb1eec9d7ceb5bddc365eeeb0b2cf2e3da6e8aa5755b651940d21b1ff17d5309013bd0e54f783fa0bf0d7798e7efbe8299cb70e76ee7d7acc373d4957e8ca86919cf785b44540c9e3474462fdc236e471a5ac478eb7bbdf1299043ad3123670db6f4ac52e1481ee4b9f05ba526f2b7b479dc2c06cc754b1207d143f32115d7553c80eb6c8314b7c8601a3e8bb408d3cae15d3d0a1a63ae465c60898577130831358a2e31e5ec6b4a1820c02e41783238e9e8cbbdaad0acf66e4b415dc85d4491b7d5742b26cca2f5ea8a8fadac07a68a1bdeb6036c7220fa05f7508b1530beb45d602085fef882375e68a044d994c630e0edaa0b53f808f5b651a88f897dc29e49b58f3841ed9c9e30562c28612ab3baf4745ccbcc6b95e1b5b198e109f802d74d865949520a47ec7063f10a28aa5e0e99b7ddffa6ea6e94ea8ba3155ed9608b317dcaec385eff64118ee02b8bb23cfdc9000415098c5a4de0b47171eacc11129dfb39f21c6f7a49ae0ebde2848df53707c9aecdf9404b00ba41a9960f1d163cd6cedebd0d8ac2ea2c93d245fe9d7009c38af7b0135d08a67e296147321bb1de4074055e7ce2cdb9e10236e207a9b5f1e3215cdd02e547441cdeccd0e8e7653b4e38c2cf5853d3f9ed0cb6b6027f68c6a5acd872a5e66a037c1e5d7f6995ef8e80fe12a71e2cad22c43b2ceeaf3eee511a3b09d99c415cf9724147dbe8e1e91a9283b37f0631029a3e82c6ba175ca293f7367c884698f087a11e0bb4600019e0315f61f1ca658f12bcdec460366da56f4e8645a7a6752395ad6c44effb39c86de52be659329643380e76fb829fbfa393b15c25b29e3142f6443eb7efe3856a2cd4cf8c0f025f25fe7c9229bd53f6f00537864342d290c9f97239a5f68af5415cc2d0965aff6698b68197dbcc3d174e1bccac265c332f9af6e9f401958902d6451b6ce600caab8f75ce176fde137e46fa86f29270581e6a3fd8a71f9b55beab2f9291f7002fc185fd89cdebaa7576d39f145d70d2cc24e58c163d9f2c23daf2eab35ada33257b2f15f9b01f89c1568887fb698c6cac93b990c0a4147ea22aa4d21934ddc4729c07738971c765307c51a357710ac3dcacad75893d6ac1ac8f4a6cb9bba1091841b717982998da7e7858589dceb6ac96f5b232bb191b85dfbec9031612e60f57f1296a4cb95366f4add25919f2838338ea9b7459167cf101b7211111302248fd329714ee43c0aed974befb0bde6b0faf125286b0c6fea5669fd24f1249becb86656a10d6a3be0a555150c28952e01982af7cf36b01a91174a3664aa96eb2cdcc7955e5ab41be1e285b7741b313e52613da35c3280dfac8ea4ccaf6f7992d0c17b86f82dfb4bb9faec3b4702736e4f023e9df153616cf290204045e605a6433d32bf74861bfb6e77f74d4d85a2ab2c75c264b24b25a55097bba75ffa82e40fb004de9159b37d93741d92ec1af16f703e85a033ea23a28c8f989ca05412127daf89a49c387126c4932bfc11469fa96c572f73349c15c3fc919dda52937394c93810c6ef9bb8deb2ac2426933159e65be581ae481f13bd9ef4591a77417cd3c9e3654dbefd0669b6d36f1150eb339727e5caba44cc9d4733d144a3a5186c348300e828b298010ebb3b085b4e13df85d88843c8eb6738689ef9df7766af76a14d6d4790d25ffbeef1f1a2d8a9bca25fd577e7574461ee1e27c92cb0b27754ecb12906cc375eed0162daa51ae27ab41580fba15cdafe8c448aee5628b2c6b4b083278a33b37c819574af039693c40e0c7c30f535813a38a77e020c53fc38b24d5e0283d8d2d8e492d02597a68bff13dee0ef3d4456a8836b422bd5b9c32c0d0a84033d67343ca65a8e0005bcf0843a393c9f61ba1c1654586d120002ca12df3b31871e478f6f9c0d7dd5ce5020af371991b649feb7b2ffa1dc7217895e382a833fdbca2713b506f33d8a473cd4280628c1130b5689fdbfa28715e1740339510dfe02b4ee73769699c8496a4f0accb523b1183204fe041194bc92837778de206bff7e97f51b4d4e6733da4dcac6b4e5ef5ef4e9c4c63fc0fd9248fd9c9ccd52dfde0bfc5771658ea66046f73c9c755d50336dc081f16a91106d6a3d80d0965578cef70faa7cb8b33158b852054605a30f34084b2c99724e8a9e13f174d075b6268b14014e3be0256c4848ea8b46ab9c265eda6e3ab1105a216bbc0bb48385d4ddab233a7f50d832e24dcb915096cb36de84b1a8c8f770d0db74ad0805eea4ac74f334f6121d64d72fd35bf5faba498b2eed65f36907761b5707d40de93da0c4dff93c03be162f2d9339b5f330552d67df3a2ea37aee7bce348444c9ab768fc94f7a719bcc0c13265ad55869a1f6c85b87221317309c78422164936bac850dbba9585bcd86e0f4ee5e07ef91bbf267f81f493d006faba6148340f67d2cab6a087089f4cfa70d24ae0c44f61b0d03f74ae9dba78945a4a693e64c719f508f90664d2d9d92490410260387ae680bc30ecd2d2329248beef1e285683b25d27820873b39a33e98eee2086459bca0ba455a74608347ecae5c5e9f1c060e00f6943c7e13e7946741f01c3499d6fb9a18c74aa9c6638506c3fa46e77b2fafa69824b87383a1f91c4ffb157576210f5a79c63f423c5f4459f2ddc0e76a6a91902d9c10b479beeaf854b43dd59660f81edffe24e179b6f021db07a5d083526c859a43e1dca2509c579bb74abab0a43230b849680fc9113a14bdc9b254ab89202dec1a573d9eed521b37fe3851af7d29a6976a83da77af6cb9864a36adb1eeb5994d942a5a8545fc0917f04ead4c8c4d61368da3d9179a82738e0e8a4405976c90b727cf39e126debba337a12e1310f74d10a5e1aa3400ce005c823d0966cf286984665776d8e553011a2495fdba9fddd84d198a643c7fdbaf32aa0163d52cb1791d4755775863551c66abd519d2148a40a72b3792e06b44c2d0863c1860681b7c0f27d95d3a27ace578044c534b1b723465fa31a74d519b3313da3fd4ce8dd37971b7b725eee38dc7c448115a10f1a329f0b433ae8530af5aa555cb71c5881d108d3cce8e04c53cd408f03805dfc5f9734035ff3b3dfb7e81f1275f3f3fca7e3d235f05eca0b99bdbd301b8a8dba1c91552bf356f0d8fec9b59877d3c5e0dc76327f5280f39908719f934638de788c9ae128e1be2443ffa52c6edd63ab28597ee1044b0130a9b8b4c33c522572716956ee371967db2a857ffbd2b780444c9dcdc7908717adc6a9bda7408e852546ca2feaa228b4b6db83d284d195664f99a1edc02ad7c4bbd0a47298f0b4e874c3910059856f3164cc3503d0ba4269e296f2816d16346fabaf2cbd011e5fe0a6d74b453b259842f7b898f424d31d3eae4b19b77e74f252dbaf06f00efcede9f2861dcf0067d864d2b75b201a92378df1a3c1ae38bac4158af9fc6b051349dc3494a157f5af43e3d87d3241ddf2e8ed07531f5333ea4d358f6bcc67f14c2b6742e55caef95c3db661f459796dd7977c73eed76579e25e396eec0a23748473a9ad452d84d5e86681e19986d00d9dcbee497f97831715bf86d5586cb184accb7bcb27c503ad6eafa853e4712b9fb3684cb79be491801a6cdddc9460afa67d0c967cb75fad3f69f88797c1398d93de420bbd8c9e22d556500c6275a41040eda60c0f8b00dc895b1f1b45981e0cde119fd6054fd0865e02fc27a2af08066a520e6ce69cf524f7a5bf81a5d27f7367373cf8926bd58c2063579148cdc2d6dbcc4b6d1479ea540face429a7d694790ea82d32170421c08d27d4eb8319cd0a2f7be2df5605dc8acddfe84304158aa8468611c6d44c666b3957e8629aaf90257b32b7f8f6fc10de9348f5216b21ad1af225c5c681a010669ec641e0c6d6c2636c293f80cdc23ba66d015dbaa9ceb21caead0f3a0888b6adafeef8a11d9e56f5ad696d65998662b3369afbe3d015a771e306d77effe72fe0cb95fe3abe5ee585e6ef3ef0448350d6ab8e97f230d93f6b202a0bd1790c925adbef270d6bb83ceb1e44988476adf38a588bab9269df6c35eccc62a8cec662fdd091f5da62ff558fcf5683ba95cba4423ea2fd6324a1eed66a184dfc9bd28ee47cfc45fe9dae909880106fa5d50372bbf0f558e3226e3d459a23993986a6a88611c07fd3e3219fbbd62b74839abdfc73c2a8715848970538f45fb045d63501fd3a9fcf0b973b6183a400a48c8920177ee64918bdfe46a40829931325cb4d017b31c6ec40880a204f250d6257b7a07f64bce0dcafe316705dc18bc3a3e274cca823cfcb6ff89f3bac1e830462c779da05c279ab0f393e41f768d7b7c3de0c10ca36d9f0e7088f0bb2304f8aa61da1d0d1c0940f1cb6d512510e1e50bea6d647248f7343d13c40d8a32b53935e0dcff4f06edc734ce081c6e35b5216989b11f7d02e1f8f119ce74b6cafcf831c12a8a9dfb86ce6383e811e8f9c01933cd57281abd8557227cec5f00407b5d2cb99ae88fdc38b4970f15169ab1f7e5f1e6bff79c21831448863b56a3eb0bd072e9e6862f7725d1e37c6965ba8669b5ccf4c754a93095603a2ff207fb25e01400f95b5f8070204243aa2a082fa5acc176ef3725ab78ff7efd403a0c8db00cdc449a7dfea28a7b859d3fb0e63ae64f95bf8f68b7f5313aef230213f8a4f432c8501ba14f934ac7376eb9529dd53cb5143cd6a58b8dd9757fee82a8fa0ae50f48d83f3237490d8c3e9c97b8f7577a634870b838f91245c5cf33a35f02387b75899e8905db2d329e427412fa697c64ab60ed82d0c6520dc2e3ca0c80f569319d30464034c9412a2b3f71dab573f37f72290158f718b6791165cc73b4f6cf64a6869c66c2090e584d63658bd6c4128827af53cc8844ad9344b1bb6c0fddc617a77c35b7e491b7884df2f0ee51735254ea07190095b7c6015da6bca2d4555359b022325e2b334188eaed632aa7773ae6b791be6c801174307e0214dbaa6826803572b305f31e10292ae58093b73e47e7c10add1f339c75bbd151df91cbada7a8352f39d1d53c2d227ce7e028dba16e25fe3f5e62859d91540dad2023261aba5e7d4a8f6fbe3e85bd303613193b9dab02dca52525b19358b60975ae482fdb143a3c8a7e29240be8792029a16aa09bcde0aff9643071eab0d1209df873b382e4377e198fb78d3257f472adc95584f421db16c1779e1abd7654aa8a82646b3a56eb026235f4298324c64f8b738da3c89d3a46e6e79514b96aeb7d06a5218a602dc602d4676ab4bf0eac0981312d23233b498ee091b39bda33739c1056d1eedc4799eca31603c6a78614b0abd55f3cc4c42d4dcc4a1744815d37481e68033f9386c6b38be90cc36332c43f8efea1f3519f448ea9d16675c019e275e62cb91522393f8e86ee03913fcf8961c106f47ee9464545d291f65db52dca6217bc61178c383e250fcaddcecf47fbce51ad214ec2484b46b926a87b0b5116abb6224fe66fc1ee901addebc17c42a30ac6702205dfb828ab059fddb33a355094efb5d002fb076364d75f188c9f9781435e18086251ed7d119968a4332d16b0ae0b847eef3ff9fd2f5d48b5dad622b994ffa6e07658d976304dee54c9d5021f23836c948a38e0c4642dcd25589d2ead4bdebe8b41da6172dc9009850a0ac6b48cc508224d60de0a9f9afb3cd4b94d7dc495784b5f9ca678d1e27d4a15f6565b5751892ef9d6ee6ea556e6d17d7b82143662654568f05b85edd00e4b916c2e30d88c8b3f3a7bf162c6c6683ef82c3add9c372e3efa9ad838cb8fb473760e7915619c4a56ee49e1fb0db51a7ecaf7386351f623961775fd5939100c44097c6826df698c7dfb67ce3dc329cea1b497d6c7ffe7ef00178602a5b6ad451af268d8dbd2310d8fcf5d0bbadce6b88a3e307b8b64b36bbc894cb60ea95f3e6c775ebd9455d6a27b4e3ae7a3a37d09f6b39b195f198ac22df705de27560c6a523ee4bf948a94c4212984f12232d2621d736499322f1fa7871851b36ddaf29ca405defdd769536b8aafee17dc3ddd1a7e307f3ab8eb10400fe195c428d2284986576706f1f1c3a48d04b36619ae6cdaac23a72520be958707a0e0983742370f794c44239adb57b39774a8e7b9186c9b22fdf34353bbf8739f3c32148ac36173c82a06d5e2ebe06809bb7f5d7240ffa47b0f63957ca1824de7c0ad28536b370a7286f8d25e5270fc0c9b62d3ba2267f4747c2ae156356127d27fb9105146b8a8119741d2bb4223e6ca8454c0a0243c9d06572faeb2c8beb189c11a8396cecfc24d16f0d651a7d52b3545d286aa729dae135794a91879730b0f874cba1f8fa9353ce014541c74668d9529926c9a938787b838998c7aade11587607972e324f05f81f766f45ffa4f7b990484b00cb47cf2f32e4cc11b2688139042b68253cd28d9a80f2401092d769d1327b3455f4784bd705c7b640a634da954b6dfb7d16c4b853da27a1b592d23838138827f386c1f032472ae7308c01e895cfe446a20ba825a9b4e6b4b238d0ddff2097de5149f722704acf80a46a3abf0d5ed44fe6c3515e772b1b1a98d45f2b87301f48a954079d9c2ec0d5276980b0ce3760ef8b46f048dceeb63dd8383aefc0df4f05dcaf80ff9b9650086a81735b488392bea3a753e110b47717e5d602d91d210281fd23c26bd170ea908884e306ad2eb22d51aa67298d06cbccce9879f847e7ad29a0f23bea49603ca8652832aaf14e7d9bae4ce7ec5dd0eebcb7708b0faec468c089513b453b794ed988989ca591706b5e09f5227cd1359bb7c4f5403f6a0095785fa0fd8687452c7537f2013502bd646be119e895e00b20475f4838d1580d52ccc80488a48329f9cd20f7e5ea9d8a74fafe664d7a8dc7ef7f6428784e086942c6d8de42a7cabf40888501f8f3842ceb8c16191f8f455d05e4c2caeea6956b6d9274ac6723442889249a9d2405aeff99a61ecaffa3c0acdbab98625a404ebdc292fba67037e1ff53b3775e05792bdda027556c8454978fccaddb8090556e21bcb86873a2fcc45f53f7b0709e301c40cbe4186028823139af77861a75be0b03e77fc6a8d2ae92f45041be545079e79f12c74ad7aa5cf2102cf6cdd346b00da3feee1f9a976835f7b0150040b4ce777e989f3a492d64fc64a927c95c0aad1e2da4152f87002023267cc23c589a002b44e438741754b602baab4f52921250b0ed4e7c2319661b19b3fa60db20b004c2158ad16f5974025fa1f27e6d70a513de16fbdd38e115834f0122c95a7df3bb7e2e1523c7393745d30aff4720c93405a2efb0062ec0dbff88a64bc0f59f613fef7131b2970ec30f9f859faf9da1c321f24154079f50923917216759c8098c777fb3f27acac569952ddf356de31ecf66560ca824dbba6934328913caf935b3b37317c89915e5d5f4195d70259155c638fac387c39d41c0538c2da508a73fdc75d050772cf589b1733ff568636937bb8e2ec254e66065328bd29a3ec2801758addd6fd5fbaa3d5ebb7b3cf9acd3222a5e3be5fd2907078218144072fabb6cfe39c878df01d9b688666149d3c33196fcd6b362ea1d87e93cfd9e764770d91d26f26f284e1ac7b6675f17f768711bff936fa27c640241d5aa69c1b061fcd42624e5979d7abc49b20e7567d1272f28762fdf28c62b23364d2eb02ec9c252a70ddef9701241ef6bf23f8d8fa8a6adebe9e413fa566f2d71b41c5e8fa23940d726aa1293801aed218ba8bd6ad2401a0c55ca4345091d0f77927c3eb79cd21c477ccb4767024dfc9aafdc0ee6b2772a067840f3c2edf860dcd397b4ed597683986088b70d27851d5e295c82d816183a45a8eff9d9b5aea9f18a175f85e2f6a801d0f999ed4f68e71a0f2e089063e81047a5cdc07118caaf0a7b105e14315b373a83938143920a52163cbd6a6a75da3a674ce8e50b010b2732ddbddaf29c79c79a7fdd20916fd59719e3792f3b98fdd1adf308e1ea583d5eb87a3091975430575e40b3faa21d9a3608cf7bdabdcc6818dbf8ae6d98e1b7a49e125e2d0b44f7d72f1ff82f4964211a66237d4428ccc3c67556a11a2e1baeb15261c06fc3f3aecf455aeb217a632674e249a6278da863745103a6eecd5698572b8f80a554b087985a7cf097f9aa1a74a6eb52ebaebb1fff103084cec8ae15eafe8efaec8eb350b9588d97545dd505f60ff35fb94af80020d1261da7a38873d6d924d8eabd4962952d3f20df6e3a94badcc53f0a9fc1a0c3749ca266286551a42502a336c163dfe2664b60a594ba925ca166e0aa7c05d3177c1ea45506a59cfeb3a2155345332294290dbf1d50f3ddc5b0a6355541efb1c25a025bf7f4153cc84a056f25f11b1ada7fb71d7b900768bf62c456ff8176b2c6a860414d57af63db436a7504dd2d4803492033a26cdb3751ad135faf919fdc8a7d020f9b99a83d0c9088bd7a863c84f218954fe887ccec962c0a96e4ecc9d4c81d7c26504625f5f61e6e13cb7d848e9da91a73fc3244846b53f846af2f388247fc8aeb8efe8f41eb0675ea57ac8038222cb333f493921af38963b4001563dc4df72a654691e949d66e157710264fd521f65ea17fbe596c255528de66e128369ecb592493c679fb2109f2e9a4a3facfda259a1d8e5235a4af677f004f53dd5acafac384f0e95f61d3cbce40eb0438ff4bebc96dcbdf0f9cc9d7e2b7f84e6343c5dad964a5020c190f94a7b9bdac162b47110c7e00a176f689aa5555dbdb212ad2a511a7c4eac99d3455b2533af4107020db6b14979870d118c55385627a1e88e30a48d6c6e795240d203d15398213787178d1f4024db88f57b2af99c7b6012d806a54eee57cecd8fdd932bda513a246d4d7d16b04f67fee2f416bea689c990dc3a34ab5cf0165c04c38039d63cab53a18ad74eb2a3c9e8bbed257199eb15cddc90ac3a1af27f94b1b9bb37c7a0e7b8ec29e4868ed6e688bcd3c9245f917b040ca1483779ee19b2812f573e19b162d0c747226358ff9067402ab63c320d0e15b2cac6511eb6f6fa3a785d4ff21563bdd0ab64bd6c87435616bb59da49823437823ee7f0c1f189ba198660e6e88b4427db05b089cb767fe683ef2a9518f6819483f8ca10e4ecb92785bcd9bceae77680b44429f62481e72bd648bb113d2bcdf18e5bcc890506a0f0999643028dfa6253d0e8758b9678e4dd8c02ed16f12b80a04bb3d0a25a8d8c76b4c69c6874c50a9ecb2ab7bfbb7648690a86a22aea94afe6f95cbe0c96041545fecc30aecf9d9ddc873b4ebf92c844d4672a00d96bffc2a943bcbe73038429f018ee4024457abc2f6f0517cc1bc08a743aec06b7521d745404614c76cf192147b8c4ac626a0032c53244780dfc87e07844750fe3e1f98cc3f4acccf2c60c0fb8f61b2d06ac4ace52b87e56355439c6de9b78aac5079a438d0818f4f64a2fbe867f7edad09cbac8b3e62a8e1348da2ca8342f1d977df165915d3d835736feb5b506e0a9f46b039d921104d472bfd70f604e7d480fc0864ffeee2618d81131e0d07699ee0246c8138f5facbd8cbbffa7e5c7b7c82097ed27d15c648de19fb6b54713c9c8021d2b1c143e6324b8d4a718bdc32dea25fe1a999d39c31dfd55b6956c6e5732a94757962460292b8d7333f3e48ea23042543a5b5326949983a9bb060b3a15c344d02166105c4ed71574d246f7ee9ed4144e7a31351baa47c00e583e29eea7096fca6526e9d9b4ceecb9a4364151955f0ee686d2f147d31dc46f99b41d7b4aa574a616e0ab776a98fb3b7d9b8683364c29db0a0b27fff53bf22179f84faa988475e9b6d3f16a33f7ca7ca5313a8a16750044f60754e1742f7efd44a26b3432cbbb7b4aa994637884ac2a39fdff09797491dd4b5100a73dd3ade4d1070b9276bcedcb49e8cf8c7876161eae123fff1a2a4274b72c1ada8cfe5d530d507efe2ae793bec67c4a0d3b3d350963889a2e09525ac0a2bf5fd4de933f1c1a925d654a9fb704178ae886c5ea2f2cd7d8f102d00d97a3e80776ec1f78e69948b7ebde2da9354d61c025e8745828f8464f1f1022ec0df01e58c33d3c7514ab0c8dfa29515619ae42329731242d96edbfa0863a4f1c34472b9ee6386729c024e76d71693d5c61c6d04432b444bf5eca130c4ab4153cce40351d02a397ac4beceb6ae72526fd88ddd4646a338e81c9bebc335908bd62201d58b4adb071244ce134a77fbb60efaa614aa24edeafb4a6236ecadf8006dacc929ca01492c0f4f3d787a8c6867de4ab416d4cac453cd0e62b02d5bed6f04bf8d81f7f5861c34f1c742f678824e61529dd9159a9f00d2a05c974913bcc9df58fd3bc76fb1c43626c8b08fa7576e8993be61a190312a707c61a7c24e8bc967e0298e3620a8f3ef92ee4cce8643331244c8706c67b742a9c5c14a5acfd2e0b7fd5f65daaece4bc9ec48ae38647aad7e0a88d3535dfcc0300df30f9b2cdb8519124623a66c13ab9324a7609b6a1ad3c34f4b7259fd6d7e51068a47b7b143b769674cfb138ddbf7a8845b35e239ec963640a2cb9526ddcb3800a7347cf3e9afaee9069540698e888177d6d8aec7d111c484dcbed72f5c05e9a4aa05d5511b8ebb758317a14c02f9250e3b8d15c4b58fd8397ac9192b40ee29ff592f2dc82bcb1b21555cdf32142218f1ee0b24113282a8c1f0b43ace0e3ad2bb65c780caa47091d82f9530435432c0c29683f2759e8137b5d8ffac4667d34fb7e80fbb1797b02f4389b2d0cbc72c99b71f777dabc45cebd81523f035c20612afce5808e5a75a2ddf8524b9ef9c8e3a3729e527a411d2cc3f0a9886d81ae4f29694462a4b6a02067008f8294f92a4d971680b46ae15af5ca2448e3cdda2ae51e7d90cb5c8d5248d85a2b9b02c044ac3413ab425d6025b5040e0457cdd3cf8df3979cea67e6f831fa6699f6d8e9b33d7928af39e275ad0b20cb15e67b8c88bcbf7ec1bdce31330fb937daaf2a1e7d7e8b20328f63f666c4f9f27b4e7bcbc18ef1f0201024f94e865880607a4a60c3c4e38a563ca0c1157371fd8c02f61872da017cd1f085937a9a5fb61ffe994d6f8b67f199ab899b3bda1c56848dc9508932463a1611dec1f35d8c8603d1a2f856a3a003546f163ec5eb4fe42efbb6003a0aa4628b227ae1f8eb621687b76cf2f0646744473df859bacf21a87b163c39f98e35c9e70af3f96288e3d99c44b4fe0e034e10cbd667580b176d88f35bb05dddab251a5ee5fc5eb4297cd1b0d4b771c3469d67f745ac716024c5870957a7313a3583d0c2a10df512a14d9e1c9b337405b0df3f666f5efee17a75a1869bf04bb26390b1dc73ebf754a18d7494a25d14cc86fd8a79dfd6c24f23f9c1ef6c961a7cc46ec06972a06d4ffa514f1ab6d89d2b13bcf58e485bda74aa505bf179e959cc029f73ea5e35e2eed07dedd2a0da7c57be1ad76c439af054149b330e0a0bf58a9871e1a138768d10afc1d1493b54a270569cfd8fdc7c89928228b821e55fb011c7d63a023379f862a2f4ce31e37a2cd5f0853f42525e756ef981a42c5a89c1ef64241d0a7de561cd481470116dd470667c8c230eda1598d3fb9a64dff9bc2d2e77e0550326a5f6ac2860c227804b306dab5222b8555fac992714dec7b1a4b784d57f2bd435b897d35e4164758844986ee1b8a810af4f6cc2674248eca7e27a1fcdc7b1227c9bce58364cf878e1360d6210de419bc6e01afd21de5a139bb51397397794594b0cb735cb6f76ca07eeb0179a6c92719c2676d2f9fabb9edaf6b7b5b6ed8c7ac1d256ce0330f6201db0b07d099b19db98f72417328669accb4a7036a6f893df540bb2afbf80025e1e200d8ff4745bd5690424f04b166b90fca8ff4753ff191d093baaf754332a216accab1132ed7737508a5a9b10a0bef899dce92de68d04a1e7a38d965c9009e74d11fb1bf9daded1d6a1a1bebdfed9a077f2f046e4c6c41518f384c930fecf62604f5f9842691a5ffaf071fd7cd4115d1fa36e449bd806dafb48c5df49eed6b83958b705f7fed7b48e6e713167efffe7da2507ac45306cecf3feec2ca1a3b9210554ae1ab263273d5900854fbc86835c96426f0ecf70b897838fdd3a7070c6f5d5a8b02d438988efe033e25610bd937ec199d4c9794c4136ec18b7e354dfa3bd6755fa1f59afae97af9d80e075fa92e02592ed555c17c2316622b1fe0aa308e686c9e16047ca589bafc5f8a936b142ca3f6c81c708be11afef2b4d6bb03607de537fbc361e1b2b7ac360ca3f10613fdb15cf2467185edba2352fd5d599177df9bed0d1df0578e6e5c1f782f5ccebd2df097ffa9d81c50355249af6726f19ec46a2737119e928602b80b9df4cb8b6f1a53878ad506a6081a0ea5de264b9e2f95c4c305b5eee62380912da7caf1123440046890a92195c71d045a3873c9df85beadb8ba19d8ded9673511ef7cfe3634c59973ed6266ecf52345c4c9309504e28d6d49a0edd5b85cecd8e1c31f58fc6ed1140bde923fae4de77d593bc87107d06eca13d2d50e1838c2ed5d5261cead9e330a68e095f3dddc95668218c270b8569a2ec775a17c7396237789785bbbb62e3616e36294cde6d3f0a33276c3ed3a3fb407d06d55c17369d5461f3b920a3c358c3400c406ddfdc8ce2628afb4b4fc666b5253bab65e2f3ca664f05576a6b28499a24fd6c18c5bbed1950ef4e363cda467330f3d868f10736ef1ff0e132585692236ff6292d8bbeb0975c2ed11ddfbcd3787314f1e1552e0fa3d3f3a138a14ed7a0974e8cdb4f554946b7ea56f70e77dffa6a8add420d60e84b9c0a016c8fd02f39cc9b0fd4f53d189e2928f57a58fe19cd97171fa309be0e2677528dbb8f26b34dc1384f24b9a68d4e4d2ab6693929d8c2c645937330d4817d65aab2c30fe61ea063ae561496b31cb0c7d8b16b2861a632af391fb3bdb0f12ecc5561cb32e9b487c934acb4a84969234e95f06ddccf5ad0ca6747c72644be4fd7d091f4de7acad94745f8b47962672784334d5052520e3df296b8bdf9082f014a7426863975bceea14fa1eca682603ad0a1d81a35d944374d02b86ea32bf66b6f8bf7383dc4871cd2f2f9dcea8645e7ce56b709959c14eb5f7e7e426fda0830f50009a99df0d23e5b163af97754d519b2e9eb186ad5900e64dc9f5b72fd3f67f43815f4f24f47bd064d9c77f72f3ca70d4491eefd15c867ad6e9b537afaa0a60fc6ebc70c22ee2465340d598ea743a407f180b51dc990ae8ce36d7b8e00ce8596688cb46f6303716e667799db985001c9a6e7b0440cfa1ae91d9fad24f923da1721f2acea470e1b6a2e4be5fae5516dee13e2e3c9534cde5f19fe8ccbb1e6d82f9e5ae59736dd3395dddaf6245ca608655dc7c8a555de7780fa59325f8763deabeea81318eab94d9f95fc948cf1fcab9504f463db66f5b99ecfa6c4ffdef800c16567d26013a1cd4e0bc79a1f28e2fb0e6c92aa19363d97c3056eeb8d7b2816e8710b953bc04bf599c36c461b267d0d762f3de281e7831b5ea03db981a4d4042563ba97b3c177bd94684fed172c40cbd5e035440df47ea076ae0e2644e50b26df866399776b5f2aeac6ae842e1ed05dbe2e00cbc0a37f0567babceff88b788c24f6e0a5c81527d2aeaf499c24738b2e33c8546b80f7f98ed31890c05e71865bcb60f3371ba14c7bbac59686409e692ba263605a07349245bdadf64620ac348257619fb6f9e178426e59f27eee358145c4bda2bcb701cfe60c82797c4cd934e7130aabe881391d0af191ea1797027c35b095736bbcfc4e74fa72f16b3e7c0a622cfa8230f4b823496930a01143dc5f4d0566371becace2634c4c9a42ecf87183f622aab8a61fdde65a78041335a1f6b6ba4a5c94f45b60ce9127b372601da725c6596e4bca201706a92c30e97da948acbafd3aff571d51f98df3950bc6ef9ef99a8f23141c3ce7bb4d4c6bfe9a5e31be9cf5df03320a8e1cdc79599c5bd1c56726b73ace5fc2bc6700fbbd904b6f9be5d3e1a3d301dd6cadf87ff54f92bcc26b3a28a9d2f82c628a597ff6271d6652f961a14ed334009feaf39c377c7d992615b25a5f4986ada45dd00aed104188859ab254129bee3683f9ac69b1ecaeb62a844c476eb1f8310119b6eaf1ba41b770a26a80b274718cb3f7241e2a1278de728aa125b80a29de9b37165392cbd1e90f3f1539e92f2001214bc14b28c45e6ccf217586891d25c976eb016d25ef9096cf7bda4ba6cc15851f59bcb0aa4b5df7704976eed6ea771e287a18ee71a0c17e17c9709e6df3e1c046721a0eaaa9b1c8aea5cb93539d936bfd6ef98a867068094af3b92852fa60f7a2ce70ad8681e6560dcc49efc05f1f6dae11eccc88a17d4166122a7b79d30646719792b8a656e903b84f7d5a5a8eef58b961d1600624f5dadbc458468dde00a6ae2419c0be44acd63ffab339fa9c6102d462db0774c4bdd62a7754d22073014a82bcf416cb1ad508ddcacea1d9dd77fa44d1b6301101c9247530443d13cbc9aa24c8eb7b4c9797ff73bdf8934a1eb7e75c8333405c5b8a66b03907b621661bd7ba25f8a589dc98f990e7c514b6b2ce788d42a848b4c55aa3dc99e68c211da6e9d6986ddb1693902ad0b1525d18e4fb635370ac1434d1fe034d388747c2637234a44adc0a9bf5a5e302abd1dafecbcf9d3d4c48f987320bfafa6b90c918df5045d85d8382d10bd184499a59d44861a298973c1c8acfd50e21d2ee7bbeef19f64f2678dc90f98c3ceb95ff39f8ca9c2161d78df61b2935363ad92df95000354962890c706928babc2d56c54b25d5410d75f9a3599ccd6f3babfbd25b3c191241840c8bf0057766320aa9f4a2f155970f244672c12b00bb78fd6079d25190abb875f1c825ca356886e423f5b6d7468a3d4be2dc05bc0afddacf2070d5275531b40a629ba6b2e3fcd4824b24bd12143c82d1a1be2aa67d8edcbe878bd0a2bf1ed3d606af615d297449a72f24bb3c4210aec2cbbbfc07beca37f0b365bfc6b08c5c1f2ca0f9481f24c7779577aaa11a2b0b5239c335e9d32d1ccc3de7a625c6e7d931505d6e76ee7914392a8098c5c0ae0e45b6192c050a19cba6fbc217e0b87d2ad899c5f8bdb3281292174c18ebe97a76577bf3cbf4cd33f438711e8496378585c1ad1f50a6d058c1f7cf069d58ed90aca2d9152a3f52d15eecc87b3f47ea6207a7a8e1d05b15617ccd2d93eac6bb890fd96d93491774d108bc65c59d1e36afe115ca3a22c55294adade986e1175d2bac72114d2eddc9bcb52550f90a464f22d062724701a2eda7b4379c93eea2e51468dab300eea8dd7fa26f304ae67a6e966f3078967645d246af750880c04ea11b203dde6f7a165f8dea96b0bbbe94b7e58a6d085f3ef8032d86ec0b247b4f89d48f0d0422fbb87673c49e9eeb3cb24c5c104be3b5a6c1036b327d25ecdeffd4b1716590f937ad30637710e0b08ed483671834045247534abf381b55baa330b095e9c8ab4f0efcf0e332935e28c0c6ed2142532c018a61c1cfb1bee5e12d2a8a149baa9ee89c66267652995dab6a52028f709906fcf006833279dc7463d85e967a438b4941d716be3149cb68b6eaed4fafa627f4e33b2453eb648824669333dddb89af134d856730337d6ccfd0abb19063b27cee83f636bfe2ca3f17af7e64e95f7837eee5343ab9bd281945dee2d8fc0aca513e5f33af5f982e8e2950f2b69aa1f4dd7d995cc86f89de65379537ee0b33a640404df40719fca33a3cdc08f559fe241bb8f8767d56a5b47c576baed5337c839365e35ed62641100ec69f9d78ecb074c085906fb7e9a31321e70176a8d518775c5a771c26a3a2251f021c8e5ef7dd44d8deba54cadd3c520f3d20447b728fe1669df4101eba62e965e2d126e6f847e19ab14515b82c8961b32ed29173e077a5b7a4c938fe664c05a8d37f2bf5e23d747d663a1bc92df733a4413874755a5ba7d31113f8e092bf059a899600b4211b7c47c54bb44b944dcc496aca4b1294251cff1b2785faa3ef87e9cc013466d4c9ef873a8b1392d86c53e2f5cc9bae381945f3dd02fb4a541b7d5e125a41b92a9fdfcbf0a3dac951de9f30fc4f1fe7dc27730b36576e436f72c236533eac2a1bf087bb39787097ba1dffaf80bf6c65a7dcac35d337bd48e0afbb7473d3798d61d2692ca2309f4fe4d26207558a2a22a2e38e5bd10d2ecc48112f5c39a5d570e894d7927b0a82d968678647c91e0d4ea977dfaed9c150e7778c99c590b56eecf73cb2e05d140025f739fb44f2b69cde4b25e13d636a0af6b6c554cfc297960508979abce4d891dd81c12dcc3630ef2d71d73409ffdbf12d31cdb3ac97a11e4741531589fdc8432f36e8c1c1650b418655bab2d4e7fa11bf90dd8cff1ab276af98361dfc4ef3e0c03720eb3cca735e6ef9569dd10d992ff80d7a74b0e05a9907afd0bfb8d78e0e40ea3ead8286908aa1ece91579908e67c146bcc66fb92c0f632f41d2b8dcba11e16195a9f1eb3758ba39f516f6d0d37b3e8b0eaeacc2c8dee7a2553e3f295f226a051f0f4a4ea5a8763098f44bfd592421d042a5c424f063c2d295416185528f919bdc00d2c5ac1c74e6d3c1e4352eabe797ea49714c8f452de0f91cd3249780f0bfed1ce27dbdc079c785500f558449a882852b5212c9cb55043ebfc75c1b7edcb76cc808394419c4a3ede548fd15cdc414334c66fa41637f0ad94a7ad284e352f6f36d4f3cf8a212f7bf700d6d3b31882b833060e4f487bac6840423e2e1f776ab27731559ed3be36d50988f71029645aa2f69e1116d434d568148babca28eee91ba023cc80a43f5fb5c05ae27930dc1205129bb07f10a98d099e35a63590625d3242132790115c7481472f83dcc869de4121e93e045be195bf164c0c69603da72fb2042968d8865b90109c3c675334cd1aaae5a5387d3e7e785d631bd2c6dc968eb767cfd7ac8a1d57a86df9618a6b115997f9ae837ad38c002cd7edf340779436c40a5f596d85f7199e8d5d4ad9ef5517c57382030974b92aec10eb6c31b568fe9d8527004fc67e0253fc96e5ce3ba9e248582f55834797ba2a9fc3610b04295e1c37b2b54f6b9500f7403f591089d4c269c61870b32fadd0e5c36c03ea5a1a710bee7f785e7d461a3ccd3eac96a0e283f531f3c38fd89526aa0ff870b048e2e6ed8265acd977f92c49f3e23274e87a1d9a0f70b53f01ad076b2a3e0f639af630561ba3a25b01a5a6399f15e5c2a0b371a90fac1152284877c4a83a8d067883c1f43100bb0938d1a0234e7c36a398332e80b713feebd422cd22f8c8ec1c0f9cbfb784564fedfab23e18c4b1bdb1f59f6068a01bc69b6701b35df61d14f8fcd99ce2c41e3da1d848ac5540f133192ef47ae0cf4785839a7533e3f406b1f1b9791ce05550ea062afa02bbc28b6e9716f0fa412ba137873393f10d5d3b249be42cba6b0201e9fb036d000c94b1cdaca586ba4d8147a364bff77ba3140c61df1e5070c0b3b439f4d0eddb0d4162ad9d95063c39e8b1d3cb7cccbcc371ca62e1d76767081bcd7c398f9436a32635d97e9d72aa6dd274e038a2f18274d2c51b10f0a8c0b9e7f0df0a215835a17ebde9b7c7862e35f81de57e27daf3d8cfed2bb8949c1b125a28671c57d6987dddd0346591f8ff2d606cfa62056e94c9181f966d9eac6c9f9fd1ecf71bfe7399e6b93b0c60a66cf26ea6874ee9e6625b3466bdef9fd52db7fcbd6441bf175a4f7b642380d5185edfa9e43b17628b11ab19fa981786cc5782fe920c4fe00f746b16e931f63ec7a8dbac730d3ac1d594cfe652c1b317b6f0c711a77b7870f79b9ee7c979f24116a3328a61d8a37673f0fa8cec00a81bfc6b063d1c3ea5ddeba3cd0a1e69607648dd4c0a7f033340041e6a1bde6919f3060c06c0f040bc2701118577dfd757e82b6f25c22bb2a845b3cdd3ec106af5e0e844b55e16666d41b75feca2bce1120e6789e0c6878a72107cd55803d1ac1a4d79c7aa0ea7babe2dbd1e581b05491e9ef233dcaf8b02c0d9c93deab6997e9d36c3bcc79fba4389810ef4640273b432f10d1eb1d6a1210f53d20388539998bff04ad88cb64e75433f5f231943b628b605af5abff3a217bdf1bab8982ef05de60d14b10e77fc985fdc14ab94cc9ae6da82800ac1ae6fd2eb2e06065ee0ce4a520669fada445a432dee9ed54af39cadb3ce6515defde27ad9a151ad8abd845dba0343d8e1d7fd039ade06aeff9540bfee16fe81ec1d867a525069b11544c2dcde5768a9cef82da337d814a63573959a8c193d9a4a93b20a0dd92082f4ea2cf9ad8d5bf2056153da6338cdd0af65051d4d3bb48c13e81a51fc8fa7778b30154366b25b090036940cde9156ef88876d87ebec154cef5a2aa7dedf40d2b5acc8b7bf2e85a2567950e80733ca80cc8b8975bfc18f22d2ed8f6ce4586273540cbca46b0afefdc93aa469188206c14793ef4e9e869a91effce97d038ef893715e35748eee05d402494e02110422af3d1f32189f7b970e2c157eabba5baf98a105d8b48b5bf0d0f9a75858a3c061b8282bf2a8b690f67c4b788060c00557f75f99640cecad69008ba4ec12487ecdf8109f772c2ac838b762c776e91faabcee6ff394a24677289ed95869a7f351ddb0962c00c441190a08e47241fe3b5247c372e8a66a53deaf3eb77bd5d4b19f51d7b055ba3337f54178a313f2198b44b08fb9e44b56315ccc17a2cad9b7378b83c7ddb7dfbdb679a8535869822b7fdeeab5d75233ae52cac1f3d7fe38e5997b5a2b9f679894b7b2b4200b61d2655c874022bbdc8cfc14b69c89ea38589deed53bb9adaa9231480f8e1529d18648caec01736e70c140a0f331674404b4a0afc60704ce2ddf60ead2e77617b6afb51b1ec286c6531e1e37be7a3803927160b5558a1a1dc3d366e96e35f2439188bd7fa0e3e0284c8722433f6580ae3324da062d363846a9833d60fa38b8992652b117adbc7d58c024fb819b798fb80c77fb50864d8b33ae7545c4f695aa001be25c7ed165d4a004c2c808fb8865434bd9e7af9499fb23f03713e3685ce392866d8d15cd151f33cd21ebbb4819153f4a4819d91bf3786261a003bbb0b0385bdb091eb7d9dfbca9a680ef91514e1e20bfe7e70783dcf2cb7d0f00d55ffd25f560d458fb32a0a855af97def779cee486d3923704930ebef752288a6d908bc27ffe27ddefccf61d82e5586433bf48deac82638c9d8ca964a979033a61ebc87e0b389d9998b9786d79e849f462da0f7d5ff7bc27d5a2579e93ec29cc0f8170b11909d237363e8825fdd6e58209a7338ce7fe3acbaa92d1125e1ebe5fb4235495adaacac4c3c48b2ecf6e92ae2fa7b4720b7a9f6e739d72f15137095c388a9215b470368960c9de2d6a838adad0210551cb42db884e38a8e90f63644098611a2e762c71084585e73c920ebafc7991caa872a645221eaec55b5900d48ef1a3f3e08bd93d96c14a15ececfeefd1e833d1f5a2bf156d6f09a6420ea0757fba330d950aa6c1fbe8bc72df8b2ceb87d7e883eb52850c664ef2bd09d6c7bc188d0185decb1e65d54dc347ba7125de959cb9260da22d2d635460dbadbfafcc7a6317e09814139c4aeec341c9851023319525a6d81185445d0f2e537f306425e79fe7f4a8d6df3fc4c5b6f66901712030a017ffe9a66f75311899943f2b7b954d15bc2b9396e333e1f53cd98761150a299c7264bf6a4fdcf88fb26ef06b44b16e0b85c53e363228d6446556105ce40d0689f3a3f3b6b268b174a5747cd7f13b74668f2213b39052cdf054dc767376cd19c0e663ee91fbd2722c9d605ff442850c2a0ad394d327ee669308fc26014102b10228bd58977a74e3508dd291f8246da1165d687812fd472748f0d4a6381c93514d66e1032a349312978b25498d5fffb5a9c1e3f32b318e66e96ab0a76e77628271da13e1a85d40961686e66322047ec6105ccdddeae85f2464e09ee7ab2dca6edcc542daf39defe8dd77217459e71e5d163ecaf244c13e7d00fdd00ecc054c6309a5cacf7591a6333c6f54b985ef19c8121d7a3439744e81ed0445b463bd0b45cc22d3083cf7e115c59a7011bdced023ff79431569f67bc9fe3ae3e647235f4c1ce2464f35aae3606837e587513df9b75588b6e5e6f362e6aec07c848c55b704fe0ba6c25c09b71d5cadcd2039f49f924460f86a3893a393382905ce9c1e6821176e28dca68fdb0cdb4420ac93d40ba75508e3e60817a835aab067cf4709f6fb48bbaeb5544f504c55eeb09f14a58c835e228981a0e0030054ceff08597ad843ff2ef4abe9c90506bd41751422d20d8a090dd4e5611c23b0d0ad7de9d3664a1b8c74fbce0a47f946d51dbfd17e60373062be4e0d0367c3f4c36c9ec428bac76584aa6251a9dcd15e81066d4518e12117d64390a7cd7d8e2f6dc211982adda4ab05c2c7808b69e42a9ce7731218e707682f650b13aa776a97a449f9659c479a14638984a92ed0991979aedc3fe767124066fb3a2fd9d263333fe97bb060dc072553e6ed6ce0caa7bac498c2fd77604e1852080eff147005bfcd9f491a69da26be57871607b4cccf826e36b17cb94ce682c2fb51a66902a5aed11513d1076d4e84889fea6f941a638773a4738946b6160d1c55ac216b3668e838fc45d66e8b4261bda0c52407892bf8938e3cc1d20449fdb8cfc463e282b45b52b56d1e73fd205846e607478459cde4bf555599bf199aea1db918d89868014e4b3bebc0b3353da89503d4d0191de67299c31e2af51fa1cca7d9cf5d5467d68377388839b85f67ec3925a92070098fca745a383062c28f73b0820ced54fea110ec1f701ac35832f840d6bd291c9e5a6cee031bd50ab32e3025d24a9ae513661597a8b31895fa989af41a3d5d6e0df95db0c5a2e45ed5ba5de0c4f6ef9139b218d99525ca0894f69cb9eaec62993b82e76bf33b854655bbfd56627fbd37eb7b8986fd084346a73869fa49b9db481e67e5375a5c4db18dd50497e79bdb6cf0203c5e060f0025cca2fa30aa40b0d5a6d5ff43b01042def81f6f9cff9c19c4b0b0176520e0067de5b079ef1bfa34f50e51de83445e7836544f8f33919006ab28fab1edfa1cb8c87bb100b3d7800217ab3982c1f898004cce5141b26047de83d620e7f4f455ff3ddb9d1dbfce256e924539d5f84a8d3566785fe5d2121b84d612cfcea11a9e1712d0b1a642a5b0e70c64a9c8c5f19ec2ae9971ec68e2ac7e571df8035fd10aed93dedcc287b493641d5b6821adfd4359b46eef9710b73d091a9436893f51db679e6876587abbfdcdc6095a67ffec2c9b891dec42bac612f3aee21482b34f8de30619ec3a829ce80ba471c3e33a4dbb2c22e3a2ec9f47fb0183ba3bef4f3454a131cc813217727b64a9e001bbf36e01e2982fb3d1c66429c6ffbd76cc1df55a11e6c8fddb5fa504b5d19769e596bca930bb08c78518b86de6fa4a505f940c521c2dde789a36e508fa31512b7d1cd21147a52302ffcfd2a17eea4fac548843467852c03b7c08b69e66dd084c646b46495ab4953b53f3715c4d823b9ebec37220cdb27780f08171e8ba46bc1ca6bf0c3aeb58d6d1018c10d341a1c31a7d1df6f0dac352b2ea30ea774b19ca02cd73545566405451b21fede651a7d5bc7c21d448b9533609e71810614d7eaa2371be53282e57a4ed680addfc090a489bfaf50d4fffed7932696df0e1ed4eef42b6d0737efb7850f05444fe7bc47601f15f1e6a4ace7281f0c65c38db401fe571ae5efc054383841e4e3535b060d7e25d24b434eec53b91568bf4daf6715d6da8c15179576b3bef9aa0771f67ef3df8ffa87742c26069b9400f3970de168d0fbb29652c13fcc337d15c9205daf648a958030a8c06ed34ed486644a63b681742b3d402cbc0d0d7e05181fb8c105010fffcb59d5beb8fcd52939f0877d6f7def064111a1c2a775b369835e9a8947c25edb233dd11016a6e144735d175c11f033eb83c6c2a313d14b5bd0f47cb3a3273d54833e64f6dcb3ae009c54670d6032691bd742d224ede17b253dccdfa50df3ec84c97c8025659624d8c85940e68e5c1c60c751856aa8904384557f102e32b69a78c4e1e4dfbe5e21541b51cda7426c61d5dd9b13543c40ea456e14690357ab6ca41ef8cba29aeb7d8a23c774361eba20d9fc040609901aa35ae3b8738a393fabf97b7ecd91edad33c983c0ec09c436a3871cd9f7bc9493f51db5f99ed33687d34cf5d54d1e2dd2896d8a7939c8a9409d87a4ee38fa511097ee7c6ac287f1215163ab9aa5df65c0c68f52fa1f568d04acb3e23799abd72574b5bcc1ba4aa37912d862e80daf826a98498ed8b4e53c903be7c5b3ec42c226c83865100040964f191c841ee68e4e88617a8746e20de2c2e8977a5b928f04d12e56839239103029f77514431f4558e8eed527abfff15db72a8c31f10366a6912386034cb16fea4d555697810db00a3eeb5a7bd3a218719d2cf4f58f622c40a2a5a2a266e93f7527357ecacd3a04818159c212a9e6338652c588961eb17cf26bd8517fdd430cabd0c0cc2bb8aa03e82ffc84cecc07ca869b2b1a9f15001ef14ccd1701a8845be8179d7f66076ab9c82e957c76aa06bfcabdff4183b5666954e7a976ce317d605c76456a29112b69989a84ad80a79f4a51830de10458012c4b04cf74fe59c485519b6a7e7cf4881ec9c1de21fd05315ef934a25047d8a19447b0e48383ba9f04ea3910d968a725c729718ad46874f04b032aa59126ccc1c4c130fe4ff3e2974699f153f1d2f1060f533124d0a1c7c48d32519362ec8dba11b287eb1a8193dbf4d81d5385684e0a3ed91cd449195c6fe368b0bac94f7ecb02b8ba64b286f08bbfe45a5443f9c734726909b49e5412c7ebbdc2b6188d8408a60f22e278eb6f110575122c0f84df08a40fd7ffaeb94ae135ab13f7d02acc129784155f1df2bcd1152fb3693629103ed478ab2c5813a22fc766c2d61c4c915b4c83b1b8bf02b8f39caaff07dbd83be3af151d1f7ec3f9aec22c21346e442ad3c11ed400ca067379b4f7d6ef70e347ea5d6e9351fc1478dfb4f5285381c21161d740d270bcc0cb8d00668bb75a0d219fc6ee0b3669911ab912ba4408088aa087a49d4b18eb538565b4c838bbdf6d08968ff5c30ce4abd5b0dea9ff82ae0a1ba9d686aaebd678618f082fc58620cb5ca7403380ed7fb0648ce1ba61d7212d7a2412e67dc1e29ee9e04c8dbe5ff26cbbfd7a3b1dd62a5c10849f74ae8ac0e7c9330fd2cfaa82569698d103df8f93d672ffc0c1393b44dd69a8c083288704ba19ac5eb79f691b026b2ec9788f0fb314e326abf66915ba1456ee3e8f1fad304f70520af41eea66fb759ed39f9c29f87860a0b94d1ee5cb98651ed3ab3435586157ea623e5f9de054d10d7481a663943ee5e0be612f1646d1af755b8d69c097e5871b3409fcd6794650c41b5c5f79d0d4d1e93ccd835dac89f84d98ad3d92002e3d99a5ad06f98e98686760015dbb7627ba55ed4068ac9b30a2e6b0b499a20bfec47b76f1e916cb23dd23d56fe00ccc29516e3232463ccb5384b93ec5acc73d54907543ee15adc8575fd08aeb264e5ab65bbcff84b250be1ee3a8d3c82004e19ba3cf7fa2d2728ec3c9652950943da1556bf1e3f624299a00c1ed10373e79e10851f0028915cd6c44ac63f2ad2f8d16feb59a1654986f79395888383dac7a8f8c34d1c3049214ab9d5849c1360a1dd5cbf6531c192f502c167df08a8fcce398993f6d4fef3b029533fdf6941f202808cb8ed1745d2e536c19cf7710b4836d627313d1b436e32f387a9bf76af905884db12a144928613e552607e3f14a4f16b5854e4f178cb0c8ea3563f5ca35661ef0a038178fef890516c42e8db57724ef07b6544b43e4410c8c0b99c74f7e65cba71507a74206656709131a1b3af9888d72e0f0481a356cbe05d9d062d1e2c0b64f7e9b63e050e169736bc68b6e90cb71c0d4a14a0b38ab18554e60c8cc6b56964bfa62a1e62df9c7a6a467cfffbf9ce4453c1109f58530725a9973a63ad0f3b5dcbf399c2cfdeebe40c09078530ba35571a9c5afb3d97c8bce3ceb6a99aaa832d9f9b80ee4853a021bc0fb3494cd95f3de40e5992c0874352861ca79b61e5a5d9564f2906bd19e5c4a38edf7d742f1d749b5e0c17a1572237ec1a8f8dab60f14d4eb5b94a872366496ff3a03a6a8571dbc3433e18360ac4501500457237e9ae85ea86ecb29341a4da4ffd1045f88925b135aa3c40054591964d421124923dff12fc5eb5d9ae50878a51033eb0a5e1466ec901ffb3b0f844c01c2212a9da3f227140cdc97bb7c79e6b2af30ee3fc9ac457695f6797cc288533447a1f47ecb45c913c54eaaf6b62f15159a024ab87d66b4d49e53384d54e99a9b37426cbe097aa0f414dbbd89537fa62bbdaf5d60612f34402e9639cdf24ea6d222f3c99833af20557232dab93e29a6c3d9c286d32500eb6fa48585e2ab31338bc33fd52a3c99617cf74fbe9ab002e426aa6991ae5f756c759c7d928e9741452778cbdedc09cb45b5862f3a4e316f482431f43274d28c0131a68c8d7aad5f14b9c147bdc9dd7b047824f2e8f7964af2a0aaa488fde06cf51596b58c4b6e62c599376f7f2a889f5e424bd51b097b5f1d97559949f7893dfcd6ed4a9a4ba7e4413fbbc8af5d839c1c50e404f6a9647eef02b3a358895613d54741555ca1dcd186850c2c6803ca0d875d073970e4666eba2dc735363846ebbd92ef2cad81fd9bf7a1466c2ca81bca236ed716921531acc2fd2ea832dc4d05fc972346d05387d7562b90b47330b0d3578c858a16105778b07edc9b90e73700907896ba05f8038229522ebe7b2c441759512b0290bdfd0643cc2656e0480bf1d6199a819c94e9a0c609ea713119b05e57e57d9e9a0bb99a9632a8b8b181d5adbff3e2d3dcd23e9e0ccff3e7186c64023be01421e4b06086ec4fa74ab27b8a90796b6c653ea7debc88b493602a81a2c8ca231d0b33d8c53c54447395dd77eec4d9845541d4ed8201eb4e3b5709730d5da3251b586a680809f2fae67d89c1fb594b7fe7d70484852f420a02cfd77f90dc24d16c60fbc577cf884f8dffe11928d5f9ff73e8eb5b866154a5325cdf96b9953d4f594a03e656f60981538b404cc31dbf1020155c992df1dcf848f9a722d59a325f7ab862702bff081c6e7d5679d627371539e88519acdfcf2bd11eb1e3b58650ad179765cc5738b24fa2f8a706ed2fabe909497eaaaf3663dcb85775b7bab783d174e7d088944244be024994e54145ebf664ad90b3a83b0e56d537f8e220dd37be47edd97ee4e1e9e839108337d3176b91918a09d10db5c15c3b4fc4b9fd26836aaa5553cbf205539aeec8203ebd6d287b39f4e70918500ff5b415f9a4a6414d4efe066a1d62b00e92bed7a36e01c2591a75b5c03596b460893a35ded082520a4b90750261ebc9a26cc0703f92c06ac15721b2a959212134ed8100cad3233428af5d9a952bf992054a97445a3357520979fee9daf6644adde0e8d395753f5096367d17614e25e6e1231aa911df81d882eb219678344aa09f6368666c295dfa5a261f6e143c410777a52de9b42df99ca169e69b7a215ea83e8af3db108f187eec2b792dd6f1199c4e5e6af593d45f192b03203ffaa6cbc32481cd4d5d649df83ae9598c55e33dde71e7770f583c08e31fc91d3597cbd00229655a6af6605c06eb7bf0c054ebf6f87cbf45ed3eea508f79f255e5864884a2bc1d4c28c30db467445cc2f8941b35f7deae296c1f278719eea540c6c90f480a98bebe9f8c6a56bdd4f47bb77dd4f5f3c59ff2f173bf309435ecbf5d6625ae3ceb840441b2f1acdb432a1536f2540713397852b522c19221b213ee9eda80b5a1024cfe9a28c7f6f74283994953baef6acc79b0c244f8e1cad40deae46265ebd54a6f1d65cecaaafaea17beb9af0f5f1778b8d1932b4e0cd22ee49c8f8d91f68d85aad3ffbbdadabbe17ac17229789481652eb55e295a64f49af785c4d2d36db470b96ff1735fb2571a514f1d5f246c75203b3fd50ffa999849cc35a2429a22de550a0383cad0e4e75e63250652cd00540329b707f2f4d8610dfab456ac2fe5641eb37a64397c9fb78a8a1c3fb3a4d24d0764c8a87cf3731928e30a46b04509ffc0f850f327861c4e0a8449437acfc9f5d2de3ae9a581888a2cb1fc41f346324c6d4a89627919a0b7422251bbad8634a3ee098cdbe923a7b74c7a9e3ba848bf713ec4f93a6875f9ab1ab60807db721bcb6666e3640704d1755b2471bdd53e6f8f1700c252376adf111e8f3473ae974c20a4b18e4d1fc6679cacc4777fc6dcf14d0496cb788a90bd78beaff5b15df14abb80189ed79762742ddf9c0888c58fc86a32aada7391861a43ca29643f88d90cfa78cc4ef8542ee52553c991b61178616b859ec517bf8ce760817545f27370c15c317a22ac4aee0494cf40512fb912bcf9fad1b1124765b66d726103f7862f55326d67fee63ae0445b3d8402d729404d479b414d77dae4ca6e03e944941691f8c97d510309460a1f77c74a9f96337b1b39838464a2370102b8b6524302fd7aede9e843ed228594df4f91482fd880d5847dd834fa03f99348f85bc234b3e98fb5432a81792c9daa07603e7e1ad94f09217aff580827cf9c9a2badca39b99f2d90a3573d7435ff5e623aaefdbb76a7f6af0c33f11a30badf0b0c1cbc5687a1cf10c0b73c79a806f17f8083398e6ae67066de12e8200db282ff78e0d6e3a205418eb55a599ec311a6a4456af400b197eb026930a20fc3e888c43bdf47b402f3da297204cf023af9547623c05df034c04a00990df176757f30517b42bd849e2a1f764ee12ecdb24497d39200d4484d7db728009dc1b5e19f813647bf8fb139e9e13ae5136e210c80e07b2af73d5f893fad002bdd0e892a67768dc220724e3c7091cc0dd4190e1d78a504f9080ec27d5748fdf98184a3cfd452a53d32bb84ebc0dcb17f8255346daa5bd1471c279d6bc1cc628a8994a3501c887dfb4ec6970c2cdf9fe4678decb6393646131d426de0fb46f1c71fa97dc3d7cecf141ced4f6a3b85e50c1d89a8f575c5f0bd3173b98f83408e8a0627a339d10a5c6ef81ff94e8e764d7f4be59c687c379471d77e35123a646ff4055f2149e705bce37a4d0c9997e513a02d5df550e61fc3b73007572a198c8efa594ded700bbedcd8e89978ff1c67850cad0ced98c26eebb1d64401d09c9e962b22f6036994b5ba3f8b3eb2d9b45d190c350180569a6f9d2725f08d2eddc80fcf542505872c13455e0fa9c084cf2f7a772f50e0d5d8ac24beb9f8947023ad1b3a524e9117f3f5b7d5f69aacd5deb7fd245220d63ba840d793c344b5419c345aab6e6b6f3446d6b16bc9402eeeb687c6cd1c8519b3ef5688e22d826dbb4f75da1687f74c32b91739992991db2b65566800f1cc9fbc4c3d9f7f3d36c5fc9efb78e51477e63b727b7dfc733534c9779d3fde0ce7be73afe06e0d3f97fba088686c0aaafc1aee9983f210d4e79950ac1bbdb98440d4c50237361fcc6d1936b1b26b1721254256e7e6c5cd1f0c49f7247e56e444acfc5e79c338aab4d3bf5d8848319ec7a14908b50a71e994c0cff66e8d85ade4366f87004f784384b4bbfc681ea3c85fffada3b97dfb74a32685d21d9c774aa32011185e7206c4d4635ed88f3245dd31982ed8f8e34a14821660ea289ade492caa7792ec19dc3f973d5930cf6dc2e8575edb8ae19c31077d695e239332337f87af9d9bee8b8d62608c3fd740b7c32c827acd3be29a3eeebf3ffe50384ce67adcc4b341e77cc210e8666307b9ba382789971a75cbfd0df894b636f597f18ece1d1c448f5225d858a7821a705b13f3fd17e2bf6fae92a235f25a4ece7c6edb0fe386946701914b45d603a776b94cfee2eed49cdaa9f789cbd424ed26811adc1cddcdf42ab592db79a6f34192f331a4577ce0379e52771b8ecc6c277bd5632d9d3f410b7d5e6831972d2ca9e037ad71a33733a37d859f949f28b3135c3f029f96949e93a5c950cfbf72f36a772056712c8146f8de35b11dfe01ebe425c81de9139427a0b9455af3b748deab3624c0c3743c0a42c7d2ef4ea77d7db6943ccf82d4659836b4b27e0ec5d93dae1bc1d5c8446739e47f53819c2f52ed908a387b8aca34bd7e4c69efb765d7ddad8a018a305af07bed73e05890c48991655c9796f593130f516b1d8dcf9c766778e7d512568f94367c6af0442a19be75164cbb42701b432ce18150d4c31c0d7881e709dcca8251ea38fe71cd771c2e9fb33c4894cecff21181785a60cc7e4b660968a57a84920f80181d23f15814b44e1e71c385f65e4aa15aabb55cfe6dffbb58758ba8e16f0dc8be87929f15c8d7d32af1774693230b64df04d970a3b726281746dfd37c376be44a31b47b92a820e35edb92c6237b93f9a82b591a3112d82003eaab637591e613464cbd2a809b656361b9a24edb8bc232d5bbcf62132b2e5431c610fe5c93ba6c28f3b2f1e10cbaa3f6827280c59eea35ec113cada3d7a33e170f38178b66bd8aad0ed1a64be5dfc522fbd96504f0d234fed2faef9d30366bd1bfaad165449ecb58713be35904c1689f3758203cdeb3a6c2503dab86b440eef0544d99970b88c329a6e9808d8eef4569d27aed674b6594502a4674efb329d5efea9ccb4729212b1bfc08766f5231247ffa6c9fc44eafb041c9464a3fb423cd4d55da36d1e38f00f7d0d75801cd2d4733910492f3bf71b19b4687925edeea6cd6dba42a0dd8783e515d5c9cd8262c245c47ab2f4f8ab2e03a49e3d80bf707cd65a86d54c845a887d528246bc901ba7fa8077d602df67fe8d7b549b6c3106a0773791b6deb4bf71a34415d89867f4a5ce9bf83b675ec3d692bc5da09c4fe569e09373286862160b6467c8d5c722f2b236fda1678c975fb5fd8b396cbac9ed0e764bc03f9c71fdcd8eb4967fdca5110161e6b30ca5fece0a2e2721b9b8f27e12880e983c31c86dc457e4ce7aefa3351a3f88f1d88e32c9f7d9edbc8315f9158be39ac1802da8912faab5ffb4f5152c02390338ed02114feb3d18816a5adcc38aaaaffd3975204512b2b59b886428a48d0f96a4c81b8da01ead25a8d11cabfa7254989347ee566fc848f3065856aa6014fc349773253f5ae6e7c54d7019bf1782f8a215049cd127c13945dd116ae420ae97be25a2e2f4de4c9804b7a662d4d352c1edcef16918b5fd8cb2e03a7a88443465d6f3a9cf18c3200137e8ea1467c58047b8bd4d8f455e2c5dddc67cbc424aed89b6db174d8fce0a0c31dd057f2dc5e7543832177f8d85851b28c786521bf7dbe52dec1921922ab1f89cd6595c726adf5dcc89b76ed868adcfc639b4bd431a0db3e1389b744ec3b78d765d2fd62acb6072aff8a8a9c3ff97320446d319b35055e7e9f2e6fc52d4469e25047efd8e12eaffe5a4862de0a68b6704dc2ae407ac781e1a25b982f00acadf72c9952ba140995bb07934d2799ce94d4109f8cdff32ecaaa735d4dc35a4cecdd939f14d00ab442b31c227caa2c74262caab0b8c957e818ed2028fea7bf1a33275cfce8ae014bc42194f34587abfc61d502f6215b8df6bf8a770f4f3c66845f0628672a12f6f29eff71dc9f8561421a176306ca619f305419a72b321e526721d3bd6af207b6fdf4c8fff88f28819da138a002bceceaf5ca42aa81bcdf9dc1653abe0047d53b01b62169d48912bcb539e31f247539a10c038aeb8da39b6e913b195d00fc6a27f405e9e5a733ff7f8d01c72ca2e39d0994eed882c04202957a771a15cbcb896cfaaeee0c28de18f3d64e812a3cab13c849216c34148b3463335046568889cefdbacb5a62278c3c8e9d3a935856e00dbbba2a2d5155682616c39500d4713157f770a671d969067ccf47361cfc1bdfc3e55318a6d9700c62614207960b6bfed83ff9a9a0d1297d5f61b9a6d072b182f6275153744d3e721e2b750e3b3e76e89f5a48ad5a9e524e0cdb346f5d0efd8ffb62d96efded4623cc4809c9a091d27a6ab8339ebe80bb47127d2c7fd0bb87794f31c4d73e8d3684e716b8b82e86f28a9935daab4c72d5c99afbe5bd238f93580d0885748cebd7a476325604585e0433e3c2d6956a788e0437321be20d8f171f0822682e919cde84628e4e4d2d74d84c0903b6addda98c10abd02c18e0e5e134e850af7af44192627cf95ed25cf01d000b77e67defb97e86a7072e6b0d6958ab8810f0837f8e6aba806cef898c8ea6e25bc1d861694c3dc8155975a0f622f00eddd0cf5569d13d1a3a5ddd1b1c42202ad95fdbfc987246e4ed90ef153fb75681f8e3c0c3135a8e684a5c07f4ec580e5c72f784b66ecfc4246dfafd0b483ce5992c3b271a8fa0447e43d22c068b4dd4cc7da21233d6e64d6f1d965b359f5ed58c0c6568b4349854dbfd6f59404fbbd3192ada81cd124b26d3264c07e9f45bb9f6b89cbbd609023669e03c91cfcc5b3d98295c764b8c725e021fb7841fdc253fbbabff0661e06335de68f1acd0bff0977b59214b457c1c18c497b67b26ee52ad460b89aee522543600b135886d527427404ce2f512a267c174b5778e42684f665e0136dd4b38aa445c32e585bb6444e252ede0706075dc31c2e0305de2ad6cd3a3f880579c448a96c7c27b6020f08aeece9e384d34378f64449da367e2b8191e37158289e94293034f396ae7141241228ceaee563df57fb3cd1be34bae7d3958a510dc4e858977def729cd4bf5bf96e15eac7330519110932def185e2629e76eb51ded4471d6c6c27bdca3d501edd5948602177a2038a945ecd2f684049c7cb04975e37d185783735c840540493a121b218c0fba38d9fa2dffae524ac588ff0232a70b99db3c9b86c4990b7e6be817c88b4410f8d032e4651c4e1729f85224da1ce4d52418a57fcdb8dddb2b151f2dfbe5bc0adf3e0d6b8fab0e93036722cdf9556fc9bc35c8ba30bf3fa58cc45ab0edc487535c9817c6438797054208fa776925d8d0aa9a8603f0941338cb409f0190f11e8cefda0be777bd005e5caa3ea7b9cc9abc1ab1fbf7ab2ebaaa5958b9393d04f91e26923cef01fc1655d7774dec512402f751ee3c28ac8e4e21fea625398fbf9797de8e5917e9bf31478087b919333f456e108c26a49255ecc1adcc72d3f23bdff7e10d0eb0e3525e35eb77b3587c9c1c658dfab2713f6699f3c5a36dd4683b49c22c716ef0dd3bb7843ba1607f65a684e57dbc7c1bd53c0b71a3e8ac5b064b242a216b39e212d3c3f40b8283a1e5506f45b077e2cbe0dbac8930febcade15b3491f22e46fb9500f655dce6c6c3e35863fd32eb660e3dfc26b2099b7ad5fa740cda25025a34c3c943586ad2b2cacfc8a4d47e36c7b1f54b49c1181e935f5bf641fd0afbb942d4f880b8d45b11c3eb0fcedec314a19f90dbda08ee43fe5003b02592672c7e1c0f7a8ade6e2c377528e41194c08a89924f82521064897f3503b159664ee8f35e533b9c315ea947a2aeaafd223284cc4180a564c0de636faf95c40f83adb5a65eb79ead99b867be96270e83d561dab5c0ad75f29910edb9db32c450ab732d27f38b06565491605fa2817a8fa4606361a50542b297b38180cf931574f17a3227610fc9cb96d5b3e61f601678032701274f00c512ac618bf7b06e09a5f2be4bf5256881ea5bcf67b82c37ad7f3158426bd6b3e16e8da5300f5ba4b180600532bf45c3d19f42c7af5a5498c8974c8dc418706d1c56d47120eaf493cd3cfe7d66015fec9a46dae478b2ce2a93c0946fc941228fe4b49a3d7041f77d3747dc56fdb3b7ecdb8d5f4b4a19d3a096e68abcda8c59622d765261544f6f12d3e4c1fae71172cd5dbc75ae9953b992e44d10fc117bcdbc6c3d2b40140c77023e2de41f0c74a7a07f6a5a84274d57575adae798c3571dedf64c52413d3563f9a1f8c20a8248ba9d88cce57783098de646938a21ef9b64f5378bfcbfce3db0ab09e6db323170d5b57b90af3bc0989d0e53de870803c2a181fd9a02c14e59c1172371f5877df7964406d57247f308c5e01c01ff79350aaf8d58363ce78005311cb2956b88c6146776e792e593ca0a9d297b7b4407fb388d389e0a73ded8f901d35633c98ce42b385175a20d0c12c136f134f4505858acbfb581026a34b85b9d75ba4c0ee2fc6a563b0b27126230bfd6366232edfafdd4f6d7901229758c5f3a8d2d5191dc477a01cb60cae0d1b32e2ce45288df3a02887d648497d30951bb0909ac5a8e6b34aa4697c091d12a5bdfa1cb97f1b428a574c505cbfd4f13baf1bcca8f1b01f05f86e67713a3cbfaae1fe296a9e76d135efdfe93756270a4daebf0928c9a33b905c65a3bdaf389622b2fe93ead47ad7d2b09d871f1d2a7fcf60f642d911e502f893a04441934ac97f0c62454d99c1e679a86886f5fe54f57b72b0873a76d633c79b1839a118cc4d11ca5ea1b4635950ccb4b71e4a99f4e05e41fd9611e009c8ff2f9b6bb4d1a9e4ace7cc0aaafe7fa0c1d16e3c2885f5f3ff2c648be8bc913da99aa934c3cb8d03c009a581aa550162075d9e9cac5dcf50387a3256f8d6911408110ab56a0fe930fd5d606ac1af2a3efe73df768105df81c4dd48db497ff3c5e9af5b2733870d145415ff8616d5ccf096435b53bfea5bc47abdc8b2e9adeba7a61016d5c47b73ead6a5d8c37a5765ba934afd65ff14472ca75dfa999062fd40ea5a1995abe9b7a71b801e6ea8967123d047ae802d9d8bd4b07fa38617018f4eac154031f8720fbd2fec323e2339dafd6dec3eb21ac71a4a75228206f083b20194decd2d93f7cf5f464c64fba86add2b851294a9003b2f63a5e37aaaa78df4d4243697dcb3d7a73a083a8e019b4c928a803a5c6991d1c94d0f05a712fb87405050e944ab39b5401d36982d70a775ec985109612d2d921768a8c4806866bf9113ad7db1695e33053d54dede6345c3d2d04958704f34e19a8a08c8bd1a6dc9deeaef2c9dfb14a7c14d4df630c600d4549f0dabfd09d6583096403f012d6fcede022308b3d6cf9526a6d338370b4be9b8e18890a92ffa536e1d96e7cdd8443c57f24f9340285ab7b49f724f07b0d70d613cef28f67171fc5303d3fa728d9d59902ea4381e792f17dd0a50c956c019e75146ec636a97e8541300a4c930d638a6d72332265708c05f438d499f561ed61beef184b4d67a25091363413c090c220e592a6291cc984d4dadc6e738eeb09422a87f6abaf7a1055f801b20b54ad3e3f7244a8c30a152999df021f58f4599294b9a482e42dfd52d21045425791782b0c4ae45fffdd7feef1638dbcedd112759029afc55d2ae23d0fe3f1dacf931bbaecd73528a2bf82f19cab3249f43b3a03bd328cb6ddfef22f8fd79ebb4da634b38ff292225ab71b5d051401e2871db653b3033095bf61542a63a9e936f4f8f993158a84a809fb56468bf0deeebf8997e13382294535d4bbf8ef7a3bec8cbecdcaa8ea2b729b33b9979f1ddc9b5e7f90a9c8207a5cddbfbe9d2b523eb29b22b05d485e0d6f1ab212b3efdfe07e5fb389bb7ad7b6de5c8824b88b3f51cac680c0f263070abaf75dac05711d2e5aef7ed7501c528dd57a5017ee1fa1af9c3811e665014074295700aa8f81d58525182eb1bda1540d3f28e13c03e58de4797374988c72c936a5efbb1e1e353019d14c949b6a984aab0d066e5fe75e7011272f9e0b014b602fc91a6d8fd6a68cd314050a6673d0226a0f156767d469fe2f5eda1156bdd07ac7f82966bd310d14e2f6dadaf9e69b447a66b45f37d8802997adb6857bc3fb1b6598fc93dcc77ca7111cfae7fde7ab55e350651cd33f6e9ba7f4ed164667761da182b0fa8f9669f6d4191c4dbf3c244570a44b20af71f09cf849012dd525cc808f9e649065f4a0885657f7ddeaa882dbf80d78357318b23eaba4aa6bd842766b59f87a5e4ad8ff050a9cc7012dc51d03d765b753917456635a99fd56cef2bcb4b50db0ebbefa4d828b51f49db1bf70698d1e74026ea74d04f26ec09176dadd09149fa0a5cc223e266a3ec0bbf885bd48273870c27c98316824af5a23d0b1a35fde3cfd914039d272d05b15f6aa3924c4772b8c87029628e20c39db94471830b178e9ffa6672ba71c2187e72789b6f32920cf7aa695cfefee1464b44d58485f7245c0b0ecb11b189fd8e36458536629f047d6a360c9ae89fb7bdee6f4617412fbf170b4fb7fb8af01d8c5e8f4a37373ce31de33122e0e65fd039d5a526efa8b506f0c7e4e2cc263ae1c551fdfdbfd028a7ad0ba61f320c43dd4d1fe6e4c7ee168af7365dfbd612ced085785eceaf40701e6ae5f82d629af52d29bf7e7bcb3fcde9b831615adf74e65fb376d8eb4231192b4cca176b75d833e1126e867e6bb32f1d528f22f9388509ffca6de4c4fc1e63ab2d53e162c4f449bbc55a0f5c458d7a2462900269d55ca1fd902d9486fe5b00991f1b3e08d1e1d6f77e982e0e5984a4f2baa9f244fe3fd14129236831bd252b4477b85b64f3212f097e6dff6f7c01510d69aaa8451d6fa23d9d3c3bfc6665110c314919030ee68a9d3779c5b34463d336def29b438f58dc5b7baadecba6f6423ac2f2ea4fb72aff254602d3d8ec1a645149e92f4119220b1f254844259bffda7b3304ba4d5bdb607e4e05e73d7dd4b40835e140552d8844fbac80233254258360a30579a84f441046d3a12b27f087069ca6aea2b2fc871c25903eb79e884eed7def65f62b497a93cd9e974a59341dccb615d0c581dd6893efcc6b17fbe0a805dbc0a487c7e2f9ae307b6e6591557eba542276bb10922a4f272dc2a44e71143bc3bab94aed843db830a6dace7207f2ccba8ad272ca3e3e9f69f454fc8d0d2d0420f9ea7b99b0125829418a208108b8e03ea88555e24c6d35b2a60f6e6c5be57918a885c7e231cc8719f7d83438c85dfa864f782a8cacd205f61259232870a8341989693d70e0bfdfe79e06b726c03b0b225daf2d1361666a4236cf8912cfc145d1252214f94ba0624416de6f5e910b3b0632dbb6fca990ba473a5da5bbf7d239cc0656a01ca18eb0ceacc2a76ace0dadc25e8514d02fdd06283f934b95bb3096476f7516dad12b60d8fd1697b0a01b99f6d7da05c6214a0125c2265cd81e3c8763627c01fc77ba5907765748534249ab4bb84433c7b495c5a84327e5adb09a453fd63eb0bfefe519825d61024ea0d04baf6270fbff4730d57e83a7eac556ad384220a9f7e8584bf17ac2a8509155b283bae1e8b384843015e66cb80f2bdc9be5e873cded908bbab9c8e30ed7f48da351b7dd7b77a3a70d50bd842c3e2ae20cd23c472714de8de052a11cbe942967c2ab74f726a7380eb2f54b17192649bcbc370879c17b16dba4ef6baa0b166c5494f845679147f9ead583e1de6e109e215b193217ed1a61f0ff61556baff310fdf5df226d088acf08855e3e4860dcc4ccae06f9b392dc2a25a63f0517b063149b0b3cc4b44dc67193ed261b139f280445b1db8560cd57af77509e818a26bbf3c6ca465ca661aad7a38a9d0827faa3cf734371262b562fa8b114fe5466e644e76302d212c1b75082088fd1a5e2415827aa7183c18bc4955c9e6426d2f48c954840740170315708a388277f92c665f32d75a3b94efdbff2f282870405e4e0a58e2745c5d81694ab8d3a6b7f4d2e13f3b9f9f37f1b06511f8362d5bcb3dfbb2ebb374d10c8a6998574a188cb19f55c8317d8f2eeae06c56f008cf102b75c1c1a5638f23f27acdbcd9c5cacef39d5a8f9ab546c5261483f9cde17337536e65eace96a90833a42c62aeafc4564e29c5463b7bbc1acbb1c9d0415aa451fe1192a0346e8b753f91673ab8a9dd91aeaac38185bc3d77c9fee7b9783e13a8cc4168fdeb7f8479332181a7aa6bcf86c588d85ce98946b991024406a9755f882de1efb3c2dbd9a2b6176ba259f97817b298bd9ba712d1512205792dd4f9e68a2032695d209f5934378da587784afe65533632be14d6942ab9d6b074c6ff39ed51033eac85ed1eafa508bd72fe017031e1b84312f2d81055c16e5b829bed5d09a3cc9be7243adf3ac52ee16d1d03e270f025de2ebdb6eec7257be6ebfa7e0a8178d81135f69b3420196980cae196aae0377246faed6643c314676591cd31e6868edbd02f633f8972be53ab08d9c71eafb86d925eb7a5f3e4d9dc130d0b86274c9a4059fda482e85d62e2cd5f864b45a10bc7ab064f050696acf54eb1c6e89a17ec72787bba92de49a8049467c0524a78e99f335cc15343de9c4e58fb5c14d8ae306b33723d53fb0f1b73c03d733fd50c4296b7f588434ebceb6d27e222da14b51ff870ad6c70db941504079ca47b7f2a78f9e0f54cab28f9d6e98f1e1607fc3cd3acb618b9e69330e15cbf44f4604a547f25e2f861728e3edb51731e76ee3e1f335b5eb23b4723d53b5f7d9172e06cc1684d02bcc72ecc58a753d14def07209db7f039f8e8caf796627f546e878ee1fc5a7a6ae29d349a9f36be2242e465952da99b66663f0117e003a54f0227791526054070d7a2250b8594f34af887aad1dab72b310ef2880548c952d993eef763802829e206606c3bffffb173ff4006f1a98aa635373247ddd03175a34ca53768ae057f05a4318bb6fec73772b6320a383adae1de93673ebc1b58637d116807f1f523874f1bae35b4ee01d01dce62c3cf7fe01a7fcb532b0791ab6b6dac542578742c59de7ac62a7da2bfd9eb5616f5936dc5f62a572a7bc78247fa8c96fc0b9f83943ecd46cd11a1664260d6d9c5f1d20fe2c7c91d6ec1e2c9b8ad4ac9e632c760904b6d17e7fb7b12eae244909f2d99596f72c6e737e9636d894f5df9e6a08efde9075471ad480c573de138c79f679e47874162bc22545cc2edd07b732e2b7f66d486820b1d18a1138bfdb27450e932924b47bc83f70733f12441cd76eab03d15d21a219f637ef3a515cbd0d87302318e4cebab5a038cd4c01e0e57d2ae5d368b22bc2848ab5fabe02fe376dda3234756ba39106cb90203d6db9dc68e89f537efa75ddf54a01123bfd5c720c1f603287c42f0f840a68df06dd94c7bfc9d0c1797449a9e3ed2ac1c09225631b48d300cdb310ae4064947ed8168c7abfc8b5bbcfe8530170265087892854a26be36696fe285f7d5f684ad446ce6d8257588cf9ab2f20e2f50d4cb61310239dbebae71ebff61fa049f68270f484d9ab082a14cdab47d5c3e6897ded4897de4ff856e7694cafe7c34610e85a8cfb112e64b80144b5fd5dcc6a7a0aa8e63eb0e46dbcf52f6933fecf54ffe56e4d026daa6998e870008f0d105d12f58148c4a6df16dfd429bfd908b045e3d31db0fb86b90ecb9e1d1cc856a369d0c39b6b5dd7f98b2041bc59bc24aa476a36265c398ee5179b8a26d7ac057672f93ca27c36453889300e5a5097a0d976bd5f4f44b5cb65c4b53f0619f2a7ed7919d36ac4f7e07499c7514d342347c8f4c2cb6b24777e03296673cf92293e1540ea7f6258df75e49c126fc423a0983e02b176b5c0c2bdef53a5e9db8b8608efa042438c349705317319ee90e7820059c4c1c405294d7932fb6f6783ed6ad1e3bebad823691425378f91fd8eee9a9b7ffb23a9892750b9cf2279038eea79c2cce2f24f23a1275fe92dbafad2c21bf77e8f34f082be44355ea50f55adf46730ddbf084ccc7e32b1ae0d0a4e2ede88f6a66b31cf5ba8aad08f23219954418c38b9749d66cb54d0ae708d116e1ac9dfe14f6c47632e79b84cc3f9ac26267c2803446632af3131515ea510dceb5185215c7fbb70b51a033015a6cdc52db254df00648825153d6b92e15a6ac0d829348f3ac1cafeab421dd05bb02b6d897ee4b76f3f7169804b048a709e8f3f0473eb850d8c1b001f8968c6f26786de27a318350fda616016cad1fa93a0d20a1757584b5463d4750a9b46ccfcb95b16c759815ac9c0a400f813f4169f73728264480f5db1da7d833ca0176253677dc3c44d5fc3d106a8d26eb1cb1d2d932276b0d1c040ee4b2cc6029a264428d989d8a39cb2487e49707b380ad8d54fa5733618914b792b265a864a6d9c2784981017801ae9869a94ae852a0bf80dceac717cf7e9fdea2caeabba4eba6196c1a621210b53a90d657c82c681ca9376301d699902cb4350a3997e92ee1c6b50a278e1c0dc7a426d321d13c6c63195afa7b31182aebc5e7c973a4f5d727a384a3ed9082cbc2aac9ce465fa6005b45a00c2023ddad86044a9b6ea4385f41aada36b39633374f07f572ee89ac3d44ec21c6242e0a9853cdec2bdf7aa52002b88e9052782191fe3320aa0c9d3a086d3f3f3b3c96506acddd631575e80eaa11af5447ed54d2efcd4664c155570fea93dc89a5365755a9eb8d1c6e2a4f8a50a518af38db2dd53f267ce88297ca7505758f57b862ccf6aa4a448e0b608269bab83ded6d44436c1ea05e3bdf3704cf3fc68b502adea7d71ed671ab370fbd242abae87f336c95d8cf35c1f17bb7177c62462c3d64f5005f9d19b40d10e4d3a239d0eea8b1e5ea557ae9d00fffffa104680c682ae4d3a107c0a3a971c1f8c5b84e3db6f8537345a136f3e4e3c63341ffe44fc2f4a63015b524b970ef7370f16697c9c34cc206ee0de7c3d35fc7bbedbcee0e4ef2d3583c825df4e7848730cb276e337efb0fdc7455fdabdb967c26e63c6600367925bf9afbc9405f62c9b73ddbd15d2147d72b0814402035f9c0fc811f80b6bca5976c442cda0bf4687db89c583643d7792d0acced3f2325191dd1af54c8c416b2dcc8103470f0e0e26cc247850add87228a04a7b82e52eed92925568cb61f0c3854b5c194de27c96f3762562158bf0567594623b6528f6e5be03d525b33964b1bb509d32d28abd9640a49c5ea97369f21c16aa3fe572903fadb29ea3496cf70dc9d001aa0d951d35f9e253d6c35eabe3d13eef45902b317768676f9888add48af1836eea0a1d9e3d1824cf311faa80b8e5307d1f4559a5df1e994398ddcb92f772ce5fea188db7554b9dc8fb2cf96da606426585dc9faf0b3102b418b722efb349582208c61aabc6f748708dc0ea03c1b63203af64c52ff60fa7d03e5d108e69807dbdacf15fd4417ad41e9bf1cb4f9a846ef766483429853f029f6dc5e6e2b120812516db69170e09994bedfe98bcad5399aa866491efab399c832ac457138450942e8616465f31e6d84a3bd07c4e04cc93c25c4426bea3cdf4cb1c100e423f22bd6c24bbbb7bf86d4bc1c41b5d07c73688f99d12401fe3853ae85994c7f8444411aea794f1a78604b160ffe7a950ac7b7db4c9310b6efa6ee07bf6874b01cedfc3af2165fca552048186c7218b07f14ae94481dc5a534aed77c98f1f1a02f7e88584f8ef9c84dd2cfe26cb77a629bc197695b64b68b12d5b2bc9d8521f28e202b763488cedfb0f12631875cb2585a9b8ef4a866f12d8a4b1b21af0d21548ed2acceb587d70de29dc06098460c61631bb347f063e1150a31fbd5ca40b65dfc8eebd24f86eec62ae4dd8053ddeb82b225ac54a5ff06540f75bc37746b40e701be24d078c201a2b4a1ffa99694b8487117c752e81cf7db9693bd7047b32ad6f1ca7e1a05dcf5a2281a817f2c590b7740f4d5083f07ab9fcab8bba26c7766194f0d3202f472a426ec1f48298a85a86bf68885a3941ee2b26088752e3ab59eb97606af3ea164642f5052066d1d71c548be450fe4011f6a0c318b97232648ea07e9e93bf4d487b85d08b3df4d850b95d6c03cafe0d23205a4a0ea781720b3c3716b56598ffbb1efc4d4a083b8930642cf446e5765b0f259916fed79503e87a558a36edac7b8ca018f405cb6e8317beeedf35e8c7f033596063310f063bd20e797341841591e7c853120e09351478ffc6c298a6821ee36aaa0a29f70167358c32b52658e6942aee3dbeae2699c40fd6524ac6679b0e78c3aacdc7b0aadb2973dae5e7a652e1b1050249d77ab37707c2aef0ee9b33529e6acb54ac1d99aed0e276a53f0857e6b7a3dfd7d38d9270b83542612716919a54053fddf8e9e4b0b86cd9f8d90828e74423bf6b3e02f05359be9b8c0d89f9008ae1b41fc10b2444a6e6a4647050638c4525a4fb1489128519bba6bc2c34a7b295d29c924a7398dd5fbb8804b18305b9c8fef2906db991576e40a770ce87e50c3ab0169314dacb7652b50d46f7b82ef185fe1ba9c13b1ea8b591b8352bbaafbe7811c69bb733d3953a9dd66513eed036f650330225e7e44894fa3e3a16e4c40786c559215d3e042b9564125712c57f7d437a0394b30efecf4970e3af1a07bd7ae4fcc0f6bc1b86506dd6adb98f8b361c2e0f2c1d4757ebaa9676160159e5c639058b9deb6a787fbd4c4dece2d92a603db231f22256f34a6823203ad4bb8587c3fd5f134f427e1c7baea306493b507471f38ae35df5ee2d68a8ddbe9711b76be5e9b9f79ae9fad4e4fd18bc71cca2ea72d370980296e73db36286331b49e01929550a53c723eac7b81b96235d2abc484ceff95ec89defb78fff0347d4476cfd7bad5809a06dd297e07cc7695b1176718af06e4de1c5a9c6f31fa4f812d9aadc2e5cf479dd506739911694032358085192c20d579ca9e7321d8d182eb5f876663e2bd9c33d1b6bba9abae67282ea39f8826e653eeb357818d6ed0e3e387800fd2cc60ae29e41e2578b9136fb2dab2a32c59b9f7399d08f2726f52f5e0fb2e7be4098838459d3e51ac8bae8f7e713d77fdbd8edf5442878ee2298c648e123169cffd3668d65d6cf16e74d115f369baa683c9ae4ffc50986a71428ceb080ab101d922f18ce322fc5872cbc5f81fe419d9ad4bfd735d8e1bc5b51ae5ba6056addd3f5217c0342e17615de6c23775028e303ef8ca31ceb0c91357093b846e238113e6f090a376835caa9aa26b127de4a3cbac40e3d40df628b3f59ed76eadf55c257975dbcef4267b3ff405a67631a47ba6dde65ecf2fb4a234b8dcbd62cb9aa90ebd6ac8107254e87f7c07812f599910a0cc6b6aeef269878c0ec7be5c75bfc6bf49ed127f86c1b1cabd8a82bf73dea0fb29c475c41c1ddda96a6a616ceae6c3e2f4e2a2f5ceb021379778a5504af669116bba5594ee77f7c7ffa9b2f6983ce1b55ffffbe54fb63aba1ebc927c9cb49f0a8addf383b53111f9727e76ed7dfd11d15dc7fd592b8414ba65754da399562976ed02ddae371436cf0c5f3a47469878df7272feb733e589bb0f6b817757c18bb89336c3a380f836a74766c192306f755676272eb5ca54fdd06271856e368c70eab29742348502b89b92785d799b3da2adc57142488dd95b819257bb5dbf369c7731f1d4813d9aedeb7213e77bc33f3d399960dfa9ff4a2aecf1f016fd04afeb79edb9d5c31fc519fa4b47c7b65bc00eca7653307127a4c0ab5120e8274719cd015d7628a914c01cf9b144bdc254e358340ed3f33a702fe28c97304dff3d08f22dd21f525e4749a64fd4049021c9e4c36ca8fe256153c6f0f006d168c326b005a42f46e08b703908b05d0ec479c6f29adb17f2760d355ee2120a72843adc3339a4585bc154c0e0e24ac5001f9f3e45975a2fc2da794c4012940e5d5eab3c7bfa6b3d7a6cd4bb1aff1b932e9b6c4a2b3b441d27f3d5a3cb79a3cb2761714dcfc837613eb58a76491ed67e1167d7c7b3acb13a3ab80bda1be6bd0fcd062b91b3fefdc5ae20cb7b5c87eb079557c4e6529c1bcefb78320b23a2c11de228cca4ec148efc8b9856d9abb211eadf16b20a89700bf28ea7ef94593a5a666d54a27ab2376718664d245b02bea78c7bbaa7c0df903af5cf5e4b0fff9b0e428896aa45b8b5275f403e4a23508575b784927f83ce3746f29491207421649a777a95c8f2bd408f4507aa841e48a9aca0bc267f01541d0936c81f6380d4556f0be6a3c03c71577b789daae8aee64be3488aa12a76fd576e7f9d3696af969cccd2a0dddaa125d89a43bec2eeadbf27075ca0616bb78b3e61161cbfe6011b4c8170b2d4ff58c06caa21601a0d016e36a85e3be4d848a21c6f690793018872631c1314fa8a0ce8565444bb2aec4b8c893a9158776860bc6efc54c10bda33213193805a943e75644d8a91ed45aa487412e55496447cf62ccafdfa016cc08a9749a3cb7a06bcf5bc19a86006920987bf01fc51bf25691ba96139e946f9998e5cd8bcd3e69a3bc6c3aed5b885060b8f5e4ef4605d7eebf27e5bd1e04ea2f95996647edb3b0fde53b8b79e2cc4a70cfb6db9c4de269aad21b835c509d3b1787aecada0c733f08d7ab937f1bad84a39c7c6820d95b17d17491dd86912d4e9611e1a447e0c2d38642f6cc33aeb4ccf777a2f06912e256e18d59068f5e08a5e1c144b470135540312037095ad06aea4e502a4bc5c6b0539149ede8c143e26a81ba9e55b399a9369cbd9d813ee302f3e74a93239c728f7bbb4a58f06a5e8b4245fb76f6f6f427d400eff11d7e7eb204df42536355b10f9bd57d9013e080d856cd2dcb07a3a8dd06d7c74c3c8d5bed3093c0ef40c2d047da881ecb649a8784050e86d046cdba225c2350c7228cd6c895fe1038cebcfbb0e1645980e4c0bdb299fd40524416d46a6a95c5aacd523252a0b5ea60397c1a753cebc8f19deaf8939a7346f4111ef340e5f5694de6937c0c3f91e9e65563f8af238718fcfe8695de16d97e7245654d140b28335330a06106b2e6df88ae3218fc28183bf22d44ae7b001c17d29a58302c23cedb2b86ad379fd878b309849069b5b4f0d82a4f6bf0bd1d4c8c97fc129589c64ae9a9131ae695ecccd90f3fe067c0e83696c95c9a3eece769a1999ebc237270f32b3194d6887d93da3bc682a388b23447fda33bb3ef3b150752009819304c9bacbea113a6abe92d46312ca737db8f0fe69bb57dadfae638af9f78f7da8da606709a18b57bc85080e4500db280df3a963b60755bc32d1dab3c78c94f270b4b69344b67a8daf6f7c5b37bde8ef17c1f85d49156a06ec01369ca176b7707a20f75140f64bba847ae9ed38358090c66689d6a11b62a2c748e66110ce6782438cc79772c4bda1ddff320a11ddb3d2884a9a9d79f93d1b81126275f5eecf8e75d62f92bd9a60a260e3bd628ff3fc5ea4d04014c6a382083adb26f5fbf24fabc843be6f8ce497e13e787c2e0d3d0aa53ca25b8ec9fc443849dc6d220b52a4cc7a5bad6de172c75e2676fa14a8c7ef5db8288419603b7dba0d1c2e48a719571538ad2ea7f18228195e88db951230a0ecc36b75abc996035c0daf3f1d6d04f0d997a8d7176a019ecbaede52e90902773485783ddfa0f85bd2a74f2ace004acb4e1a94ec8e84dcc763bac969b4d319ef4df235a78e870ecac406a35b23375ad9259181e52e94fa674411fe662b5a701054b5894749a796b113a12f811ad398677ed0fbbacbd453034449b5b14e2eca27cc24d25d26f1fb1646735044584dca9cd6ca68ed2c6101ef5216fd0148a2acc071f7e3f81038c0a20827848f201fe3a078557fa749ba4fb3e732d52f9602dd088a2934221446448cb805a3120f53ba69983043f9c7a6eeba68a4103dad7db6cdd8b5c2eaebf44a0958764af32626bec2df34b9674eea8da6a8e18675a977ccea514bf7e66c21c5dfbc7a7f5c9db098a72726a1e3d2912ab78e59686f1d1bac7d179060750f66b727a121790ebe2ed11d286fab047efbbe8d963eb62f0a57a15ee8a455b5cace7b6e6551c2c356d4d1de01b41f04cdb5398ca49e53eb1c8cf136102198a1874de84efdd25fe7c9598ce74aa975b5b83414ea2364e8b5bf6e77d5e06b03fe5ef452b635cbab5b65027c7470ead9e5f77d725fced27f1b0a1aece70a47fc9fb6684aba707f58a5c85d43ab376bc5ba2bbda21d1b6ab4d03a09c973adff57daf2189ed71b98f013c3fb72a517649e1bef902494e35931c4b26a018550337a2e0e4cc6b026e83e20b9e3be4d0bc25ed01448910900af0c1dad37bc9cbfe20969cc9aa7770d2bb38e96f15c422509ce39d7ce7011b2f5ff69e660ef56228e9dba4f5b2ab28e797daf9827b8d1569c6b592d5aef63f0df06d1541c1c3111e8a2c4f396899ba7033de337a15fb82aea560b70575238f970c20c6c9565d5612f45687bb57c4155346989cde80b24de09bbf1beb384de926ed8e2c501d437d054c59842142d31b1980166a44140dc6ba76947230d06b86520c56634563d216e6491ac11dbcb997360bb9d3fbde256bedc035c60cc69c822a73906205f8e77a48b87d0ec846c8e5e11fa7177f07d101d0f79715801887bf265c4bae8f1bb611963136cf57a562d442bb45a55b934a0e84449a8e0f0097d2b69983d08f066ba1dd6d575844971f4a4b92a4bdfc712c09a20280ccf5295588b50c9c998d5a77fdf0d0c5ddcfd2d32c1e4540d7434d4a7f66da4ab37b96918ee2ac31477dd3332b8015c9c4c8c29cd602b1f6a8fa4ef616c90a40aeb4c300a5aa1844e9fa0f23a20427969c834b86868e0b7e38007273f880daa7f3bfc7bd2154052cddf92ca5e9dfef083870c6c37be91b5e8b0215c3eecd4116a328fed88b13488cff24f7d76c7473960fe200a88063a47b2284fbd9c1c5e4a4ccaca7b43390c11f81d5cf4135364474c35ea2a9ae2cd38501145978f892310e33e3d3633098b89557e683137f3c242609b2416ad38aeb1cf1b8116cc5a3d2a654cc7c9379008234ecf4cd4c3ea044538c9e3c088eaa8c38320cf32821cac9c374263f0e54366a5952a2eb0df708876de057a744ee744485a918c6773220f6763b8ff88f39ef2a0c08affe3d035abe54bf2eed6e64755690ce9ca00d7638a9fb6e0c9116b7b38c0543bb101d45bc1e6fde2abb631523380c14dc8d7e68aab5ecf681b953480753c610efb291fc7dc9b8071a4422e0c3671f8a6ea678a3b1481ee40e5ef0769b7fbacfbf95061367e775b944842c07d00e905581dfe3b8e1bad9788757e080a14feb0658c7fffed64ca808c830bb70215b29fe4215e6438dc8e1fc559f5282dd74099e698aad68ed58b546bb7beda13b8addad38c3c3f49a96ce15d1b80345f4c8fb65ccc2d450f40d7d5a297a75814fcc0f8d5b03f69e983f79ceba02add610ec8985cc9225a29ee3a7eba1e08dcf2743a15f1a1d4b5168467fecd5b3c6da59eb6bb678dd37933361300d8229ac2ed6bcd91d680f98a62f5a5ec32b1dd55d35b62990df12da152024c059053ec53540d60cb2051927cc9cb9d4f20d4e9f249f17c7e3d884241670647232412c91e1b1d823b44f77d6415afc77cf81fc1968d5f0c4281d39ac86a15f30d7f50ea2464029afa91bd1e3556a0f9a4b34d7065ca0f03b55bc0e3d99ad3856ac8105da04f07e7051d82c1d46918cabbc168c9a485b2e3b18999833b2c89c894f985543de7c3d892d0201c3f10eaec1a3167fbb445330252f4ca864df4ee421123fa6fac24dc3e397afba58c001c521ff17351e06cecc3f966f3e5783e48ec2daa08ecace5290b5b1fc49de64361a22ed8c9e2074d9e3fd3b602ba4b3db0d0054f5b9909f44182178500795375706388ec57d6bf34a3918e920b1371011dda95248a7e6e374366fcd92d320ecdfc7bf1abf175e91251f142379b3b1d8a8f3c698771a1687ec37279ae43ffed1cd9c70211c077e4c2573afd3f1f1be789bd33443d4a91129bf26caa607e9f543b7f6b2713710a3f654da8a4d8d88606e83ce597a8ea2a43041aa0c9d9d3b8def79b3849c78c0d86e434c9c2b98f6930a872939658ce4892d70d83fbc415bc4f1701c71e1b195eecc142bb140b08fb23fb378532ca4d4675b06d6a0033704c7b6524fd61408bf7f982a5de7629815b02f2165bcb9c7940e845ececf15563c63826587bd9a1dea7fb922222ab4cd0b458b93ae90e45d6a79803bac9a574d36eed6d7e46bfa37f1f7c2dea8facd3df612b5d94010cf419a718f9fb8686157cb945c3a27a3e77b8568ecdef2d328d6e50c2779f711c5a57f315a9afded267cddfda5e8bf77f5ced11f752c39eb2069c7a6607fccd3bee4bdaa25bec6174363f4fbcf2ec579a6d1bf91b8d665ccff9e4e9b13cc389fa729d78b6b2ecf7fc9e28c7d43c17cd88a03456938e752ca7e3552733c1bafd36091a6ed4445d68b0f9ba4edb741da3892e3e1cb5a2c4342a57b0c8ff39d1a6c912ccb3f55be20760d84172ef2247539801606798ce502eaf5d1a627967e086b799b2c9ca43038876993012b72923a5e218233caaaa37780310bff11168c564b6b3711f55ef62b8b2ab2ed0c954c30464a55ae23821f2a988d0cd47f4e5ad48b6ef8cc3bf9ed3e3908ad5aecf30dbbc9a85d978d4b13d76f56c2b435d2b545f1cc117ad561710ece1d44aabc88870aef60f6809ea9d2d415ad2c32989e7854e96d8fcb1cf7f5782a0e4978e009424b77e80bd91ed80c569feac293fecb7e0397ee3ab060deeaeff991d770331ec374b68a74bbfce847520decf6d7d605ff63478a2744fb63670e490b1dcfe2bf852dc0e5a673263d0d1afbef02977344b806768c8edfc6b08f54eef969b448bbdb2537fcab2a4873ccc9b2f43af81013a110c22682070e104e0e07f277c735b75ceada375fcd8db4e62f6c6d134cce51cb327ac0e5b8c7aab982657b3c17627ee741b8fc51486b36ded86f2499ce384563944235e4ef3fb8a33b3ed657352011e82bcdf04fffd132e1a058f63416f2e8afbbd1c290c1e85dfa0c50cd0c34d7f365d561b65701464a0477fd189a417524e9204935ec95ffe7761cf7e1751f4b842adc15d2d85b21d7cd86bf8b290c3339fc19242a34205e34c928f2d43d35e89b50ad8a5233725f77855ed263d5027e04ef51a95fd46f461bd0eaa57083f935170dfd0a3c13047cdd43966c9154ef3ddcfd08a29d7a8049e7eb58dcb656d9f5bcb60e264b8d5f7e166e7449f88b4f410bd9fc030d26c8755a8d73ff1711533e52f13df9255457421ba46fbde4f528c71b73a2e546b311504a0e4d740fd901705b8e380ddc20fa68913bda59dbcf527b6d38273356b0d714b7c1c0d4f88901634c0fc2e480cb26500dc2cdb0a65ba9e3365b9bb18fad3bbbf9b6a93b2d9ff71fac31f8c18c4d421512029da1934dec9a5082ea6080c05630f99f95b7565037818ebe5fe59c204ba4d5eba96faf3eeec43a0760c6e3d798c68439288ef3b9474ee3531b7c05c2d2f72e1bee0e05984116274131f6fd50b521250cc511587a340460abf82a1515a705eba316c07f084e0968b47fb78caa056c4ac4ec90701b93ef3b4e3755cafc589232e96ad790079ac766bfbe35640bad55753ead5075c7a4ae93813317fe3bd4c332c4e27f835e57750a39ec2420586d39e5f53b2052484a4d69f98f952644c637c02c1292550c066c8bc52c7ad3e583ad0c22623817b493654fbc08dbee90ffdb9c06cc90c77eb04776fc02cb6f68e1190e0cf39eb49530df80b3300199e1ea2161a05d69c9cec75b64978e0089782b40aebeb4eb2adea0edd991e46319930ba74e11a0f51ff546b76d16c4b24efdaef1e56b1b0245a34a8c025521df797e9918d4a101dc1f124d266beeee680f12f1266972ca1797af8ffc6adabb462d5f8779e4131f8155a02ebe5d615294a00f1b715b24706e6395bc2c11dfb9ffd46fd61915b3249834eac3cff9a804f67dff3dbc78d9ef25871e0e238117d41c2779791a9fdf9b6d209ae36ce993c4bc47d8475d675a5fc398f5eb20065c7515d4a86c3230f2fdc6c42ad54859773ae134ecb28578cad520863d8510d93892a81cda8451c9f5df8bdd06bc2d0ecfb8827d61634ddd71b0586a640d58fed74c1fa0e6469de0097be82b450e77cf3a23cd42246921a263e03875c20ae2c1291b35b31cb965b6b7a5b465dc03f08666cffe7ba5886f85809ba5a7a81d7ecd71cf8081f49364b89acad4b89f9766cb3a75ab6363b5ddccafc804c04c676df51c574a72404cc5c9109e6a4b2089f5a1a988646c424aada43628ee28c5fc52c8585c94c39d8bca08ae0433c8e57cfd85efe91fe92bd7601f33d1b030c285786faae64116df46a0eefb92bff89bb2ce2350a22e84618512fdda1ebf6dc915f683cd2349d855eca91ba6f45f6f21f7f23b00119209b43dc12e9f9f506d504c30539234d1edb785c63020c7198bb08657bab826b29598fbdd8995ec2af0967ca731af902ccc80228ae9c28427b42aaef8f884a8a1325cf25c3f87c5acab0a6801efa97dfde8888873e7f8916496e730f203f682bac4d1c2bc248089be461e033b1492eb15f3e6baf8898871558add66a8fac93684e14d6b510c96b6e70fc3a55b6fa3e668982bf583d8b0bae5ffcb2f3fcaf153167d20e10cae976ec7bb879493e8730b13ea6fe18ee0d112578eb3381335ed091b215fb05e43f463f5f6b1bb357cb8b79fe8354f14147bb57924700c02f364fb1284d92492e44a5ef8049343e00777f578323a962f26b48ed3d82e8e1aea974986544499a80082f010300b47426ff3b20baa0af437b7082646438bbea56e8ff2180979f1abb2e238f24eb3eeab9628ba2c3a76e83e07d996195d604df51fb9efb96a1c8c25936bc59dfe61f70a80c7f2e6a36bca871fa38af7a0adf62b66ecd62180355cd7f3070a9ef2042f583f07eeb926c381726a52ac8a2d906c27ce9bfda1c619989db9280da25fdfa2e5379b4d73195d657229173059c812f209a30edbccb8c0d59acf6bee8a0f700f5b3879dcf3d07295da092f8e9687c4d89ad758e70599fe5c1a6869804ba9e2f07b3c3441ddb6df0a139debb91e3f8a792d9fbf9c5d425c6e3f8bb56c31feefed3d4b1d0436d5a2286be0332cae571949554df6f45161c2530b0b19bb32ebed723d41a6c42ceab793d56687044b60d667b9d805cfdecc373d99be559cd1a6c1662428a2bd03e8f98913f7cbd905164f0ba6e6e48560070cc90f4a4c434e2f6f1026316f7f0607467f0eab74ee89317b8be6781ce7539f671efd00c949ba09780fb2bccf3bf5ad391b81b8b79ac8a80b072d88240affe81e0e11b279156671d77403c62d77681fedc19d7ab3e81dc1a58ef6d6866a7f2d58676120c441566162457fce3134c78459c04f4ad79720ba48dc07b245377c86455638a8376c0fafde49c250e3b8c45f545cb0a6eb8b04d76dbb5ce145343186aa02860cdbd96d06d4a3347bcf40968d4431d1f9e9bf4d796bf3ac5ced5170a90dc3904c93514c8291e25121c6137346e90c492652e06fd7178f4af9c226cc6f7334fa33a4b121c333e7e1a0956845aa0c68d9cb1f6956ab39982b570593525655c1be1f1586d9909ec923b451f9925714131d7e5ebd44d2daac434ccbf0e3399e909def9199d98b708b1830b0d321182b1d761b227fcdeb751a42ace7c225895e37a59df87856ee9598eb11596151809b48eda87417c961283e2ca405cdcd5f9cdfaa870ee2fecb9c62166b97acc8feeb99db4f6cf25c21ab33095715a8766b06e354438e21c502fecf4c4f940eb93412292aab27abd73d81c33266ce9f1003345e939dcdf2d4f504342fcede4f9ad890a58da2766bb923461f1923ff9261f74bd240c7249c4e316ad2d41d76eb1da46ac55560650e704e78907d6d184d6e035d937ad8b041c7d2229d011a258e8f5a9bd2b035b1a9d5981ad9e71b6d4fcd864900f3b16f07a887b0cf57e6d0d989d6e31314c78e8f098b85fe4d17a975f043ee08d008c9bdbb85eb24c7a3c4435fd820834dca4ec002aa54ed72d8ba70b105878534b75196f5a7401a122734e4d91c55f2b21fcb2265e8e95d5e21207df81678fe31a1a66e7527900a610df981bc077f0a8ba51062785f6436e89cab9eb000d955b610775c4bb3f4e62f170bc715f426897b2a22134aa0035b6ccd60023613d6b89e7c8d4f6de2b5fb3468da87f7c6e3a57553f06741f85074206eeb0d3cb2b747dff43e7bbb855ed651b3b3c9244ca82a3ee9b933061bc8548da74dc80e9f503a26c22c58e34c15eb8e00aeb65340a412e1fb5f17d8f51048bbba5a9d8c35a03cbe3fabb50fe961853ec39f24ac5222e4f4bdfebe24c0bbbbd1f52d8f7aa7ddd128efcc8121175f9b22a94d32d01220fb6bcd39a23c4972ec2780d5dac31cfb7a12df9d866e256bee48308bf77e38dd0f6497314775d2d6da1b4eb23a99660e99fa6d99781e8d367f293ded9c7120f17329d765707fb0955c9eb8eed9550de32e3b688fe5594d99c4a372ac25e80edd4fd6b7f673c8a97ba9834fe2ad42caab2ff5ecbb5c56cb1d7796c38ddd5499db6bca0e59746891fb4570fd0672b99d11dc054592049fbd04357019d974bbf2891aa35c216441e64a99cdedcdd94e0fd3874f23b52c8353aec8c65649591b53e44408cabfa07ebfe5aaa112da57276702350a41fad115bfcea2aca542cc875dae0b82fff02b6c684bf1e1ff5ad25ac35f756eb2ebcbb4ba5bc4cec9a09bfd0717a34e3399c0db419988253f3faece544672dbae8b4281ad04fd2f1b72c3413c845153a8f5ea18ddd5965f391f7a98ce36f3b836afd8b880840aa49b6ce2850360bf74f4c0b8fbf3621e04be93f42324c4e2654ebc3af29b2b472f3732de2c3c32c63ce2becd91480104c10610cda8d30928b802618fb0096681c2557cb2de8c3d5e6c06bffa702c0fb228958f9504decbe59ec6e0d872775ade5f15f795149e5175a70c551012a6c58213c9cd18822357cbb58ca71f85c019a07a13234ab852be945dddbe53bc6eb86582465fcce90c85d249c974cd1381d75dbb99d9e8008f37954ab5de76b35ff1a5f37abfd7a1b77a5345ee8afa2a12d79d1d92628da22ad8cae3c15101f1c8f981b51d109cfb58263117b3beee62e68479cd1338ef5dba035b5dc4bb29c220240f2d5482aa844e64f0c9d6944314fc14e815f8ea0b88bca0c2d15809638f194dee8771bd962a710f3fdcb7530def126ff10b69c6058d8a34751018287de4531fa4ced6d517017a62edf9d0433c59df9b385befc4dbfd2b0659483e07329eb12c542e13bbd2853eb57b621bf7a077c644bcdc1a82d9d2398e20b3cc3e1f1de8a87396fddb4b39c1d6582c37ba404667bbc42f8192b171b8f6f178cb3c30d43fa1dde5050f4d44a45feb78a4d27b5d72826e42f1977f526bfe65fa97a4686efc81129e1a853e258787cf78cfd2b2f67e998e330c477de69c1a3908f93b2636c8939f7e95ca9600bb91b46ba0acd94c7d9eee197438ff52bff6723e62ebe6e824c0b91f6d82feaec44f903db5dfd8c08b353e382a300c2786e0b36360b28abaeb8d18acf42c98b8932eba6e6e6e5901ede64020d6b713288c61b03e361fe440ad452fefb122aff57886cc763e83770d62b75aabdd5f9e8accd402ac094ac191a1dacca6939b1d95acd0e1199775ff1082520dfb57a52f7e60039a635fe50edb4783c4673ca59816bcb96e497dedf0d74e9ef814f41cf1a465491f9ccc2fc685a409f1f7ea0c84afe0cc7a4af0b8c8d887d5720a4deb9f24ec28f13ea93061e785ea9c4903e973356f839fa8925747d92300f4113107575922c77fe55c592c7ab44cfc4ac00de0a31aa2429181bd5e00fb81b7b0dfa9b25e890bf54c35273ecddb57f98105f25e14a3334b77b4f1034ff73855817bd252feac06199939d4b79a7d80a53ae4bf121cf30ecf7e340f6218036cc6ad0080a5d15caa62a1a3faf7c73d4eb1145a143a2d267e912f0fae2cef33a453ab100798619f0d3562d3aadebbd5895bfcbd9fc7db5aed914b07106f9dcddc05b822bd8d53fa9a226fa414b24ab5296934fa6cc579e58a6cc820e831d5e7fe1a88384fedd5528f6a21bbbbb2662c7c4140b780ff194f2baa4d9b65d4f613e2b6d3abf107d54ec67ba3d8624f3ffc4f1bf4f623751fa9fc410d2a41e154f3e3ef5da0e05be700d9e062eee158f5ebc6a19eec8180a93933db080f2506b7923ab6d852c3a44bed186b26509123653a5fac9a6e68926415d4a8703563dcc9100324d061acc835a62bcc8a1aaae3fdf8a989d2b280a378e197dc9d7cab24dbf2581b56475102348bc6e491a2d9526b508e62b8dc2b0a0b0c9da6233de3f59b9edf5f84f9387a41b213c90adfd67d4aff156c56a3c0636c87d94bbe5b36017ab7da8dcb5b1e25213ae85612b15b0bf4b6ff57cf3908045a930a931d5b4ef434c5b05cd43b5252abe16bfada9c9467ff975ffd665eba81f6532b1e1b5ccb8bb87f4c14e59057ec9ed888356de6202ceb3d02e62ca10462b988eb1826b24a9fd5d0f09bab42befcdcd6be557366e29be960c84d0db3e95373d11e1f1d9e027e6085420296cacff610b1b30064a883f1fca545cdc64e9c7c29764a67ef79a5ddc5fbb4acd936ba223795756392bb6d3e2e213fb643a5048bb86342dceec8d1ca5d514888645447cdc70581204c4fa8c661a352a641659cc78551212c3cbac3177100acfc0d0d07ed4a34c023eb81e74b5ad8af2ccd4141fe58102ac8a6d373dd151beed45797272644fecd855da64eea62777f7e280237f3c0072ac745720d7ab5528b6e894100036823c1c1673c5d6ae57ccb79179359729e1e27b41db966cacf3ddd65053cb0f7bd0a8078b7894992baf5392c28be16e5d974a0029e3862ec8fe1766eea9242cdf0b8f8b4202a3bf1cd77efc6a2db48b0d7c7e9c9fec00cb64726373a0f55b1c2aeeb58398a7806fb50e27df58f6e078f97cacc35e531fea2909e7bc01199a3ad34eace6d515a28dcd6e5c2ab5d3c54e787452d2c696a5e21f8305d4209c852b1f4f138af1314377696a7f6a225ff54f1f4f3f231c2b91bc4f715c6c6a1c7e430a3edb6bd50d1aa413900828ccf05b034e5fc6c4c9ffb804c59c6dc8dec00db85ca6ec96d67a4755082fd4a40e680774a5bf55525758c3a84bd792f5e120f422ad8d4215ffe3587438c87e4200bdf50a863d6f8624ca9dd57640623af6173452b6f86b060f2c36f06f423860fb4cb6a6ebe6cc3a9f97bf7ba0265f8775ba5f1eda679b6d3fb7983d1fee7c972ce312cbdc19812e2418aff584c057b989ea7194d0e9db879098cf8f3eb18ddb4f322ccf61df24a974004cdeb21c7c04ae2d1f77eebde6d30645dd7e516ae4a973eb485426d4a50e5428a334f3a867efb0af059b66aec056296fa4d7f3ccc3e2fb834f1b4e430406d62714b2b27883b3369d9be9aa39aaf44b22976f86b6c30a2c39c0266775ee8f9cfad5c92ebf5cbc5aa3cbfc86435f124945be05073cfed3deb57e2efab9367e6ee1e56b788631d116f4defcbbfd28f593d2e5723325c25fcbfe97684c1c72e425021263d44554082e1898a76b20231493c7d388726b6c1b74ecdb012b9776c0a524733a16b10e0400c753cddbf1485a465e586f307e34194878ee985a2c4fe692f9b83612f6247c53a2a926977a9e2076411c9533fc78aed1659b95e7195abe106e47709d08d151b77c847a7f48b7e54bbbc10f8746cadcceae3b0d2384dd0b4f324c96690b73559979be23713e8d05d6f4a1d2204cb5545683427454379028fdfaa1762dc7518e5744157868fd8dd8d89df9f3995fc508db9e864d9dd280e4f8f16a37f075ab15cadf0e4785cf43bd0aa0d7946e62e126e6953d6679dfffe40575270d4cf3669014f190e95d24504dfdde41e0603900d2d8f2df74988e8e0e504fe993f0389b51d7a5c8223207c94dd1399aa8c188bae9fb00b22d93af1ce954b7b07a2b0de49da689a0392e58a6ae53e609263261d0f477c2ae1e67664696411f39ddaa24e5d8ee562e1990d3bb08c047fe750d91f1a4459321cc478af8242c9b31f460eb66852f37a6b34a9ffaa031b2e4a7c1e522e9f79983a9e24ee778fe5d0f0e4a025aa9cb8a288b711fe0502715663e31d3894129d88541d99c1abab9b8a2c5836c5982244dc13cc4fcee96578f13d31ed36bf96151898f95fc5b35aff27a4082ab199696d2f2feedf511c049349f959c7b1aa0f2c4e745ae1e190f8cdc3b8a33930f27621c3051e788a3be72ca80257ccca30de62a906691582d176ffa590220010a8dae36adb58ef05c46e55936086a4283063c6dfd3f7a3c76c79bf85c5ad87cce02b6ee7a8a4252eaa6acf5b499c97bb23d3870925ad7e91d0eaa2053a9e67f22cff2b79988234a32fdbc3cc9ad6880bea9e783a43a39736d8c2e291c0a3e34cc7ef54aa360f296e992643c93f1bcadd08c5c6e2208f626c0ab57538ab735fd721d34eb0c015a397722eba46d06d6269216fa9776f9cef560edc6493549057e14dc29feff892d19a1ecce7b733e0ea1e193d6ce6b9554cc0fd19bb27df7d00c5b1e1ce6183540b52e755baafb83eb1aefaa19ece55e14b7db2ff3fac129f3fd1f4d1b2bf287bfe84178c52f687f00642d4b117b31a68b17266863fb91f5414ede12ca43f242c61707b2ca261378b8a6d90e08f25e368749c59e8d4f4f9223363a5e000706d14506b7fcfc5ddac66a41acf4b3bafa28e151f8545740f8439a81a4b0b1ef2032761ee2c8f4409293406c1b5c1b18436ad45911ae85e44161fbfa26f48ef90ccd810d6ed8ae42c15af4b275cf9c8830fd06b556daeaaf86787c6f1408fa3b348d7966a881f35ffc1e540490f7e6e0a3477b6f2ee82e380734c9577a15663a9d01ef49515b6d2746ef29bdc0cf80bbab11b905ad840ade3462aec0cd50d19a262ba14a6f9210996c3b891cfb77ba65c2625dd02fa40a12f5e57a6e90a236b1d747b69d02990f9403ee0179f2dc41f6e8a221c2cef37e6e7580346fd083936cde01cbb624451dd9bd932542ae099b2d2c3822c05dcd3f36048cb2af704bfe0eefe9b94daa80d2ae36db785dd16d92c5c39ec52da0a8b4f41e71eaa0fd25ca64fa9bd8d8b4bde6f9b606682343c5834b672575582b771e48b0b5bf8652abf1306dc0b1c48610aaef104c1779d27105de5c9e55d2952bc0c4c3328c0a8b5223e97a02ab494ac25e17643f9c84e7b51bbadcb4c4768826b80d1676d3a8de6c4314152e410e9f3a56276ab850832bb316ed78c55234c6d1bfe7520ddefeaa0b1a4715ae59a49f20fb7876ff59e3b98b6f01d5fc9c1eaef6551db8b5fb65b5f52a2d8cca7da8b7c2e10dd1890c02aef2f72ed0be6b31189d451b4e8ce877776391aa21b0c2740857f35135a8fdaedb1bb59b8dc8229cd18b03c75946dfe9f5184e1a5ed6d2223ad6693caf9ca6a8c999de578419f85dbeb36251b5ccc30d93998ba993731220a2a296e991b9e6cc115825acf3443502c3739571cbf983af9026b63f33beebbdb6854b5415db6e2784e6ffd0880f7d269f79a4c39f448c96243fc1d46fd22be14af8be2d1b39bdeef7fd930b32dd2718368b95b9569705ac2ecbdba96cb30abaf54fb29b0b436e7888c45f8984e26b89943d54cf957543c82916242852e70ef64dc18e73c37579e74830ab31b6304024ef40c9d26e68afd2ba071bba15eb7d1ea3820251c45be207e4932977f2381f311053f36e3346c4680c7c0873936ec96fe037b35d0da182d28069e96066d1e189a20914d4ecb3c52080650af6f25e36e856a0adef8abbec9644972795e00654548d516a29e9bf0bb9d28cdff82a9d779ef2c0e7575c52f6644f8fdd0fa18a84d31c2cca9846384f9ba365f8583a6f688e715b9b65e8b296abf2eaa50c9e9bb3dabcfd64525ac5fb162899d3930aabe34ae23175db1e0fa9872ac6bb787d92ad60d9212c530d851ec1c082283487aea12294e3330a63530934b625fcfe7b01a647d77957fe14014a16fbc990d02505ee43f35587ade1813653ae074040c984a128092917b90fba5b1ebcbd832c6e118a240ca68d2754238b4ab977b94e5954bb303ccc77be739178fdc58771f98ad3d24bfd90f87c0c38f5c1809e990a922a81c444e1ca9fb3ccf312d26612da522e205561d0faa5c8e35ae42a01e102e6972fb69198bb4814f147afeb282ee939455d6d3c50b136d1ed8baa9633f24e428d79bd0fd2d736e9d73cbb028cd0ef242f55ea2c4b70afc1ff2aedd20aad6415d635690bf27f9b6f1dac107ec04de5b83d6bd49748229a8eca174a164124a5577d644860e2623149bc892341d00d95acac6e7e0f2eb707aa6bd534b294539a295759f13855816704a0f2e831d7ad232a5dc7e38a1638ba7e0c06eea075c0c17c8540a95861350f53205e5b0b7ecfb9adbc79c811c924c2e88c1732304677f5cd502b568393147c967960970f5059d56d2d4e7de119775dccf43329009e80fed43dc900f65d20110d60015bdbf025f69cdd03ac37b2bbddf642f6e82f8b894a534ec4f4ba26034c92ce136cf58a127b4e68e1ce314cb5f9c899db37eda7379ee63cdc306aa02fc1485843c15053996b3302f31254dcc9cbb9912b839197c6ce88bee1eaf5152b82f008a9f0e2db5bf75d70aff01a8f5ea58645313f1e41b11b262c7fe5f87b9db24ed6352f2b4a5afde990240e0b1a9b1fd58f986fedf13e1e027274e08531225c727fe2e4ccfcedec10f8dad5352bb247f6243353f6ec7cdf2b51d25d165c299a991603a657f821303f3fbc2f35285c5e7919ad19acbbe37a5c157c661b5263f986f3f2d1c5f847dd77c4783d21a01704c8a48a60e0042e40403b36c82579784fb99885e22cc23b3c57c1c36452a0ea819e619bcfaef2acea04e84a2d2edab7c7d94fc83b77603ece3ce5151a1c1021e466bda2c9b42a8d6621550d4c60a791f46c21617943c4cc30cde6e1e9b62a3e7bb75e530cb3d86803e8ba33794377a11e89bdd2a237fecdc269da157064ce0d79b564362903788d489246cccee1621e2ffdbf46d3bf9d07fd18b939f5a097c312f099c3b5dbb01b2bb2bad1b3ef81f146676737af28c1b4ee96bc7a82124067b6164a37d29cd3170e2bc78e4e529705e79a7691016e176f3a94a4809313b255b719f06897bb131e0e2d6746988557ad4f5b31259f3e9f6f88eafb051fec1a9769ffe3b55b2e4cd369c8d4f411987e671176c57f0518b3e2a19521e52a381f780bbf77fda0e468303929c68165623e429a9cd594ac31b3b46d6445cc9d132a3614c527a8c9ba7b2332fd4f659eb9594cf67e7e55ee17ef157780ffb4992195c648bc9cb46c407e6ab957fed4b86fb71ffef8258b96820bdac1a341d8144118faa071f9b1dfbcfa2606bd5f634274e627637683df6b0224db468b905b3b9fa8791e10bb90214f08f384b3e1c84a65abb07bcde73c7b31eed20a569dce4e7f6c0225c68a2025031d03dce445fc0e920d09e0270aecb0810a17e8ad9c7e78682abb106b5d719b0cce0e3cc83d569d38501b68f877d061d8f13f05f183df6f09653a2994946ffa0c5bab02caa62b63501c5a91ee74f37abc034b0fca5ce7293e9dd35acef32191a63bb19a9e2253bb7c137dd5137695ac5037eece124a9fa1ffba12e47844a2d23485fb41e6ff1867ea92c461af05c653e915b351d8a1d0814a01a2204fdb8edc215602b4d795c97b7764f3125dc2e03f38ab2bf8e5702e91463b1ef08e06f06c6f7b35ed9bb3a10bd22f3fe295f7922eeca7d9fcea298fd960ba884f6dd0739b796d956aecb85e571d8ae48f1598df910b94c204ddd98faa59263a809f60ff6e9d61633219a68a0904a2ea98211b8c4837311066e09f3f7d2fbd863bd57fb62d0b172d7d130450a895d3a253b1ec858b05b30b41115561ced8d94de7328373a49ca302fd4ade0d18a2c725ece560e2f85fdb8dbad2f6becb5e39ed2e90e262da8a1d36e0e591ea6e4cfffd89c0b057c5e33048f6dc4757fbdafb81978adacdb96d29281898c9fa1e9fded47ea1e11049cccbcc0658eaf44e7a15ce672c36f4ee09cc178894fa257a74f6c3aefd9d60f8a4fa2d5456372157251c3f72425a6e211f7bb20db44db2702f11f240e315a6ceeb2560cc0286df5cc1dff089964571a0e3563ed326b4d7db25eed95bb15f679e1f970314e6f687adc6abce603194a8394858b28190f3222a007839339dd9d918c087aa6e564802a3e1190d9bc9665d748fdd416b1eefb5cd1599311e41474c73cdb4dcf798c3abe4a676171871ffa4d54fb622607c86fcff89c9279cab55d08bb0d2fcbf14f121daecc9f6ae5c768d31641112265d54d088c1ae679aadfdc589e261fd0cf109ca17e17b7b1b0a979bbbdf0c8e11c42c2c2033d4ca6621b1e7b2feec8f170569df4eedd8b0fee94aa9085b2a361a1f59f7cac84537b7e1bfc6072fe65d8fa13609c0a9ce6d52e48774347fdd0390b584366b44ccf17f60a33eaeeb6a0fad8c49e9ce853a887c6686e1c0e8325e730c61e0561c3654f6079014e6bb7bce23ff58db51484ae8dc49672ecd61f1d41e5a6db6be6a09d44321d5a978c3465371a26ce32d487f01147a4c061e334e1a92d23df57fa08364c2591e14c05c265f531e8146760a92f5783592445d567ac6e7d85a59c135a3bc52d7c354e911a8c98b6588a0bf65d7761aee0e7ffb7098aa7c90398685af8caa4283db6b5fbe693125deca7eaac3bc36aae3d10a90387e001428032b5645b80063fa5e5cc94f218ae61b936f1b138b2dcf7d71f94c068093371779395cde6e65a0c0e396780a11621a1b7a1f24d2bbe7b7d6a7c2427c0ff94f5e499ecc42fc8e9b1c9a81d9ff428ded19cad9535dd8272dca43bf0030647a5f7f6f1d4d341794b94ebd222d23c24982f9d984bae2ca2af50a7c4ff72ed717d41f3c2926456c0ea49b32cdbd7f52449a2da75ee0666a9c49252a30cb94a06ff9e2e7bbbed1a6f4813b46af7695f1149fcf9d485dfdc00397e557e940fd74010e8dc40cc5174036803594679ddaff9408c0fb43041f997c8d890e8f596d6aad49803d9f275afcfc6ab5c95307a9fe2844ef82d91666ee963ef50769120a19f413216480a585ab0cffeb6c0b2d5dfa2ca48d5b5b30e463cab60f93b12e9cf62b690eacff380e0106c71c677cd4ebd6c4f072db9ccc9ca7ab98d9b00fd521acad8efe1af33b4bcb69ed4331e554962a76a299999322011dec370d5968a457060007897d8840f21c9bee9d1346cbeba0a93d8cad48c0dfde4326e6cd99f8aba0606927401917dd0d7fd179e7dacf1a37b1b4012b1c75368f126564be586d0d77fdfb311c20acb026c19a33e74d77205b7922b1ddd8aef68f150ddfd56996cf90c459f2cefc1b8d6834eecd9ec8956a81973bc67fcbd303bd8a0404584b17b985fbe05973191b4a83f292c43799297e3d3c49181e58aa5cf20700af565ad75d89f7dba5377786f47e3b87472645f5efb9874c2582cef9245a80a5ae4678aa647445db22293eeb4e967563453631228c3f87ce3ac0b159d4a4a358e6f5eaa0165146f9d250f37900628cd750e5968898325cd5128bf29cded361104020cd0769b638127828b472f983bfaedf9fd94c4a18265386439f07aeda67b5fbb9f075bfbdb16659b9b8767ed877d17450dcb936fa50e024d019be4878e459ae36a2d4dccc2122c1fa2de61fad19a5dfafe2f7f64c2195724726d7117bfd5722fa68622cf68ca73143889cd8e8a81f6526ad084e2bac69c2964f91eefb896a14e4dd8a743743d3fdadcca35b771cb77dea9f9e41fd7eccb8c148c2ebcc9351c9cfa1e3408173a749aeaa00c213582d795dd0290f5bfbbf2a71094a9cbf3c0f006b9f826ecb0b47bea495ddd7324cd57814a21d6f9a5e85ad3528283da9aa133751783968805304dbf46fd8d2434a25e46d53708cd8b4e8602e80cab9a95acb685ae0a94b7e47bdaecc9d248cfb1569781cb0f60400e5e5dbc8a8c829aedbe78ca00442632b402d0cd98023adc7c6a4e5b9c8ead4821d7553e39ce485c9fdc4815a61b42ab0e500141c7ffc49e49d06c834d373ec0389c44841241b907f44880abffc4059afb6cb19e879fcf15110359782c3cb751ba2bbfc68664ae7cd236ef1d7596b135e7bc5f2acedc8e5aa0df56bd456984a5a6112c3cad1299a842dec1af990cc6f5fa06b3d5658740287640f7c23f025fe7bf33587a87cc1f1059ef7341ba751504bc94604180ddedcc87cfb74e578bf4c4659982541c946fc4ed1cc05e976c9173da8159e0b5801e4ffcc9fd4f3732ca7f14cfb2a098aa8231314bda1e51a162e7e486cb1b09c73e524627798af09ca09a6de745bd093e09e3104b3a8efd66a7ac137aea27a8c39d973317408c0ec0e9cf0413b5e343210fdfc533eba341ce66b1d46a403e142a2cafedfb64437ae61b5fe9c8e95611545b6cb91dceaf7bb5796db20f370ae1e8364b5a3940af8ea92cb54921f2c4cd83596289a4d77a1644828428b5afded2a28d8356c3db5f3e07cd46df8d4fd627fdbeb4877200f8bd1bb3bcd2908e8c48b36793ede74be20f5b190f47ab8675bba8aa4707a2a9c12f8e2671b758e3cd9a4b9ef45928dd04be982948ddea39ae76111c7ab1c43334315f4560666c3c445b4bc5b809e96b8ee89cc06b18e96d88508f599c654c6ab7f881199ee905d1cd95df45e9c11318bdaf6720be3ecb0233ec891c86ac7454c19c8ac92f3f391990c853485012db19d6102b8595c935fca347fe8814e9cd9c0c95f45b84c4421ca431911c91abce4335bfa6c140ddedb15b6c37a23e27a0cb9652d08810ca91345f7af5b25447dd098658da2c3419254ee835965c1588c48498d68e21a0f06e964955b0b4e4cdf639d88c003d997640fe8d04bc479cd623c08c3e366a5f46b985c8b26ccfb47ec5e3e488a6c276749520cbf35dcf7bb92320f63fb32cf4e2906d7311057859bd1831bf1860d5d29224b40f0f32254e2a0cfc959c9359bcfcedc5ff5aada270853284aeb2f9dff60868c291179dc6194dcb2c5a8a3d255a598b1be05f6c11cb4f9f37209595c588c5b0c1274a4ae7c29c6001b236a42329d0b0cb3b443df3bdad63f2429075436a9ce7f04550e23420c5a8847694ad51926e7cbfcca93b60c27972c3b05fa4ecbfdf5eb8cd7eb4baeede4b6128f1a6486677e1e48df34c612b644d589d76f33f921aeb13ca1bf987e4773309e0fd2ad1381829321f0f1b219b6d8bf5be33b30a4cc7641f641702fdc4067821e1e59cbf36b89620f360ee40a8234ad0e7db3b2a1047e0a57bcec12a9695b136afa6d9ec633444ada10a9ef74b4622636aff5c3939da555af48ea7e961d49ca6cb2e14c88fbacb3375d191eb75d61f575cd120842c24a84645207de93ddb17574233fefa18356df0a0ec57098187375dacd6b52e595cc1be66b2b2f9ee5c4ddd75853ba4d9b6cad546d6809a240fe91254fb348c328aca7db2f9bdf8e9357cf8b802c098b098fbc5d93363063bf1998da34d4ad49ec9a1dc6d3b5f74d386d174e9054567d225f7b51210a4acf966b476b62bfd00e5bc44edc8740115c836de7d58950415fe745cec61a3652fff6db9500442822c57777c162f3fc3d6a5fa7eb18ac30187f36acfa0eec491d66859a9367dc9943d1b592576dd9efb374fdad743e01c203c658f0d316449ce747a7643626af900e7565646238d57cd3b70814d8e50f6620006c144855a266d9309762a2196dd68eea0dd7ddea2e8c5e516a0b081fc2e288679f9dc560804368fb62ae57007a9de5eb1fe56039d660b17bab68e0c5e6e729451963e2d06ebecf5f108f82a77b112b51b1a5260ca879b5f08efd3a782302577c971e142759ce7a96499f8995740af8137a5826c26618405d8f85ab7e0c8d4c0acc60ad0722d127deb15cebbbc6d0d3c1b02ac1d89d57f18b14ca0d12a7c5ad85f88f7d69450e39365a334a67bc8f7bf0ea822e0d54b0f1c959bea0c3ac29cde08222353fbd7618f7bb4e98bf2d0dc21a672de7ce5235c7afbb6104826336bc085737b098be694591ae8b9937fb9f1f0aa0de4498b86ac2a86bfb9e97d49ce7e2c82507ff13a1387c04ea652d7ccc3c22b98d59251cd7b64613d4f901fe5f5524a20110444cb46670b01872b57996467da8ad1ece8a70504511c9db56b62e8e7f39c8694b80e195beb279a54d9092cb425261a1ad517923b47f878d02c45d0b3c5ba02e0194c783d0787d153555fcd3d1e04048ac07823890922e7e3e59d3d0f6fb10de97e0b5de2920f18fa19cfd1b5bd648e8a752e286568ee46c7cca7c4e06bc8f9ce09a660e0e297e387926b06490f75428d9004c4d5bcfe417b3d553102fce16d2bb1780bfca458cc076876867ac095ee1ec601bb70c28bc5e6c436e833959ff2869f2f295e23a68a21ef13fdefbca1f63aedc8bc05ec34fed166836268336fd608578f56a3bb6720d22efd7e38dd10e4dd67df73b5bb368d328a4a240e54495ec8231268282f31eab44c4528200fba9f08c5a1e0384eb35c47bd634ed40f2aa90c158eabda3ae1d50022dc11115f3c6d54aa7fc6c1a3117dea4dac77183705a03f503a295a8b916933c5304559e7a3d1cb476d0ebeb4fe9c705ce3c8106a97e5bdbc683725b0b81b11706ebc24507c694875fe01a9a5778baa96b62436e47e9fb140ce17bb8504903484b9f02431bd03b3ae8ce4df03e0bc2c210fdb0cee635c07163fc9790276687f997835ec60b5a934a4ccdce652e3e289950250d5e227ea1f8786c1a91c3eb877ddd6770b3b4ea460c4989c2afd4c5f038c7606da77d49a5d900255dfb9420008f0dd482d324895d763e0fbb66d4fa0172205cc80c2534859161cfe8e9142025bd8082ee90de9062400bc822508cf9cef171bde0626f41b960906f879c5b90011881c0317f00605744f296d76d0497f9e8f8b1dd3b86dfcdddac75bcd72e546062841897732d0df919e615a623e60638c85475bd8f077301e129c826894a90d2b9c1c50a4402e6f1bc9a5932631fac9b63817d1b7c8743af27bbe9d27bfb84ecd98e27ed82291781beac07a7141e23231163a144cc4f4d85991218d7ae7fae82cdf4ad2460e225d4e96b4340461afb16561397b707fd19c359bede770f02079184ee0789e56032a2d9065c834b8a7643b4b86ae0c2604793aad11f0ac250a9528f1498ffb3a5d00e48cb7332e88e337b0b410d6de74e8656c240ca4cb196364292d0830fe3b0826d6673a3c9b0a726a24d230f7b6e0683a1e4c077e9652608b97f949598b0de4c0ebf68f6e0e930970c8f65b03012851023bf847b197b90c8bf94b68ef574a9ac63538f1918b26f94dd33ba080af8b9fa1eb0b19cbeb335c03e1f6302755818e6f56d37793707f4a30ea517f965ba3652016408847b664508c6d54990adecdfc2a7ada167b5ed4911ac1787f0884d22062dd1389ddd42b6498aa6f9b2c2631a7d3fd6ac51e7a0df7b9f8a61810919daad9b4e9072a0dccb8ba1ac15c8f14c5d1df9bb395d28a097ef24c46f1e83c72506806b2b246d87225aded83ab05484ec92bc73de0d8106e76ab7e1c28bc0913bed695c23f5362e7997854434852707ecdba54d96533ffc7a0bf655ae1a28074871c6c9a8ab5155af64675f4d2aa8d2547904650b975725d9f644e29ea1564da704c3186dbf2e1fc8a593ceabea732a00a614a50fe4f7b35a1e56b89deaa4a44aa8ca540c4fd4a262aecf9668942faf9adf80c8a0091d7a92740cbf377036714dd781bd614fb790f634aa30ab8566758768f0264ee2b82bc84132519303359112dfa7a445b9be5cdabaf825c201aada41f10bb97ce2181177dd9738dca7a6a0352b6bbf24749f9c9353a43192f97b7b22199b3508c8872f7af15f1815cabd6d440a9e8e6889ee94c808a5f7475c985f2c76587826367a3df99b033b75c82509255a2de2ff14ad92d3befc7233c4a4fa92f54a95569b5af5ea44ff3415cc839954f79d2c6754e5c4090da23a180ea38c6972bf76779243a131218a4804ba9f15a2b1c98e39dae1d1537c57d2f642b244d48930fc484735793107d40094bb9309a05e77b7cd20d9691d357804684f04c02a5f3e0b4426c481c6cb555d593ae33012d5b258dedf904b15f485a5b1d63cf3080867af4f3779a4671f4ca330ef3cd5e3b70ec5d57e7e8347f409af83989cb27e6efddc55e296d2afe56378212739d71cbd2cc5dda1320b47fd139319073aaebb2069cbeb917393f841d3153e79febca3dfdfd4ee906f4b505a54ca7c580f9c17c3b9c69e6f0196afb64308dc1a13f749580f6d95f7fa72115d358766afaabb3c540e23e20f085b7268913c79545d2f3a0e234e1e96b0179aa535455785ebda241c3049e17bcd9d6a36a224b3795da7777bfa66606d0f935022b4c149495e4a56f564c0675953feb3cfd1efdcbc512ac773f45a8e5521230de84b468a4586c33df3743d5bada8f8f59e22fae3101eda832cb6b2913f4b17c8d94c3d068c62b3190e40ed5b418b194935b8cf8801ed0bf9c437ac843b4ef8836099da73b3976fc4fcd007b8da52e7e56aba8ea7b866e049ff33b55e809cdeeffc0213c58c6bccc243fd107438ca3f319d283dd0d27f1c398dee3e272711bc266f3955d04a87d140959ebe3783e6b5827ef7fd9cde9285dcbd5ecf428c86b0a3722991782386a67f553c1cd8eaa29d61cb28c5ebc6ee09e4d989283ca3eb297a2c8ea33940da05702314a4bca52dcdf408b3c4be78180f6c403d42e80e9b3af9abb8e2d98a6f5c336dfac903c21bde12f677a0d8b2d16c1483ea23c87d37e876eb39e49f73a30d9bf71eac3eab41d3240947a87a9adeabf849b1148e94bc61a4bdc053152c82dcb583a5d26ca57bd36a7c5b9829586f11f81e0aa5781d5702e02caf8d7753a09c17cd23f3d32d4111b7c241ca927095ee0ace211420a727273e849f8ef96617c13ff0f48b499772eee5ccc33eee8c25ce34a5adba7bdfb8bc5cf8436baf149af018cb5194433c29bf0c51d0cd832292213293180beed1f36ac4ee26e6af678c31f230e4d2c5cf2e54c72baa213a51b3c714c7d7666936da64bb29135859ae1fe8405b38ca90e600d4efd7bd9a3837c636aafea55c55d29d5917baf6160548ca1000b2eb4e0429fd41f79e18369777018b29f4c767cd0ffd4ae6f756325d82aaa1996fab4a50b28dc38a44042cad6099957f7e9c6d3c47058daf381912862567018f2e1c29b7ae76592367b077037f2faa1d7c6bb49ef15214fb5eaee13fe583c545eff26c29a8a54920ce4d76fa5f130cbf77a6bae16fad546af37490de2a13ab29418ef8232573750557b106dfed3febca41a364fa9169b75b67062431df9958a90c386cbeaee467f1f92ae31b4ce631620932eb07374bb515e3bffa7ae0f1276c3a9b1a9cfbb47ecf53ce8011d857e6ab1efb68a56e294880a2d052cd38c059dff4cce611373ff422484fc9495808fb39f39be3ac50077070dedf87c4c022ad8c7d3db4f5fd2311f45ab48ed5ea8b16dc0984af6d44a757991a1aa4b794aea426d4cd49cdb74476012be05105e00a8b28ff8eb6346befc350884361a3fe22a6456df97d7faf37b420b7e62295a210c50511ed1ae7040c51ee194b6da27cdb90481c8474a2ffb7004f68f228e39fc1af495ec416be1fc43e6879e0f8ef887bc370d4fc2e763f64061be1b5a88e9377e29876941a3467f47effe69a83e3a9206ea0fa789041808579d5dad5461e3defa65c795b2b3f3ce59f0ef3d872818721847bee834cb36edde63b4c0013fdcdd860896973694e5289e5b5c98335b1e26d5255b195108507f3f185ccf5b2f0b97b94603c8c8d75a6a388ed2d52387de63193f85aaf831a57450f06eaf3369a8c4d6ae2f4bc9a85a77829b332f9af2ecf591dfecb445991dfe3472656945366fe9851cd3ac1e1b1e2340b06f42ecb6afa79197468fe751aaa17368932170b35d8ae1e32dd7b05711fc2af37d0543d18ad89da481a853f7af29d0fcfe3e2d82838f80e755d442d93bd8bd663a8ad42c3a977a775359feb6eb659c865362598b8cfb5ddc2b38befa86685eafc7fde11f29672e6962f29148272a40ce3f5541245c90adf97867206eeb3f11aea15960af567a13735ab489ac081057a61b3429a962a6a5d8cd4c6407d98fc58f088ae8b5d9ace04f327637e62c3da870215daead408516f01715e9decd0c8451ccfa673424261f78387eaad4f2d2be8e2a445e5cb3c1b990552eac6acd78e7bc9e5eb748495977b2cc8084533eee8fb81f03a301d362c794d3a64afa7911a3b71fb3ce9c949bda4cefde7f257d5ac14481f47a9d1ba4649891e7fd9ead7a28e388d360ebd746e83a059eae98b2450e877745ac3438435882ab95e2dbaca23ee39aa71fd36dcfa628bb7e94d49da2ea0837b0660055e269a3c484aecdb245a41e4ab1bd89b6ed3c5e8ebcc873efc3b8a2c320c5a93c760c642ae87aea67453593316f957a0898e6dc45cf3a0913c11af04b63070801b35021084f056afb442d807fa9a55091f50fe2d60447318bea9475009793faa6d26df813c79756d0607a7e4c55250ab78862b2a5f44275342646bfdc1aed1923ef82128fd840305295ff9d5010170aca13843cfc1413557dd58d04afdc06c31365c28c8b28e93b410d512e461bebf87b0056b2f5d91fbb2ef58550b1c4d3552a1ddb2700c6e5d48bed2eb81866ee272369dc56c5d7e1927960ac0687dcb92a41e43255455160aee10f8260e98d7a77742d7a055559bca2ca97d0e32d117137835839bb166ca0904bede64ebe39a54ff2f92c31fd2fab9aeea38bda32cd6a86ff5cd88d6c2ab2b9121278fd9fff84a05661d9a6268a2b4345410b8c1af0264a5312ca8c9f615b510a0e6cceaf1a47b4f9d09076c24a317b907b83dbaa21f296c0e33859ced1591d7dbcda42aa45c100ed4072f947b3dea7f7fe9083c4af4664a9d1cfd0d4c794acf1e2f8f54d5541e1012510865fa45497cf117e95858dbacbbc09443683fc0d37fb22ca1f7032cefc89cd73b714b5e291492c13f0913939845b32cee84c8c27b2fc8f645ad0b6f0066dd59b25c41e98fc85d1e5a241f88519e87b9606bc7f4b5483a7676f789b457c264b3d207b3048c25c64ea0978a99d4b956d8b47d5bf7b38ac16a554ab2a89f8ed1799786d64496e8bf76a4c13e4f344ecd60be1a49ed498cefe357f5898aad08082c3b50a858397f3030145ffebdee84926f8685e394d813b918e68a838636e96142580482ab79775529b830b26b15cfca319f048caf12f269c882cfc8e7ec4763f5fa5ec3e7f0dad066603a0b3f85673777427c9f3ab1e8ad479f11788276064a757d8bb11f1d58e6ecf7a75d54039f9923a744250bab4ebd7fefa0a0376b5829d96eb51fd23718b917dbce576daa44b390b21d1551fee35e0a4ba28c405a41fa8c47394b92e0fdc0a4cb1a244a7902978f73f6066681aefe8c391fdb7aded4b6cdab853ae59a5d873b273cc234af917d490298bacf07157599a39a2e87a57dd6154122ca2c2d66e5a0af6c54da08c6abfc86ee6969551497e6e38a495a7146522815a8413151332576e138dbdf6606dbbb6925b60f9d86deed2a9b124e595050a92c7fb08c57544bbd284ae80786dcdcb6d8d8712bf535172a80d70a2ff10a2068850c2ed11277a6c81795c45c6b9f1d02312fe4a349a61e24b811fb3f2e18fd002c11679a038efb8152e69824ebfe486c5719576cd300ef9c936d35b9e32528d05325ac25eb0c59b6246def8faefa4820bd3001d0a0cdf52aa742e07986e8021bddc67066c80bc2f844070ef13441afce297415eb168f23005943a20ec2f7d9eb99ec52edfbe88a4af261f38e44952149b4fcf7ad2e239ef86eaac73ac857ab9bdcd91e20e7290f4d6a2d8c389fa8df9948a384409b2c73636524d3f11f3dae7c96082a20e018c7a6e0ab85d7db923d7b7efc53ffaaa35170b68a9cecb9b6ea4491f18b0f61f708c6f6195e743563ed396c0958e36554ad49c814d3264afbfbda77fe1149269db48ef1d6033c6164f53066be35887b59dbbaf994a46bcb1cb332f3e789846a757de9bd48d2b0cf028b2bc18753bb6e0e0fa7ec03cbebe0e91f34112f62dbfb2ba8a66dc306fccb54762ccc5cbb0ffce9ad9d51a3f6f6008fc915d8c7f6909c41fd7ef50e627e5ca9d0b145c3b4b90b8df6cfc27225e6a762e41a658fc99c8c314aaef354bd609a4beee64ec3dd9c807a236ad09a3659e06b2fe39243f20dd456c3d8b82f063b1275b6aee118cbc73b2c1710236eb9f2c7c30b0c320db603a7ae0565271f8875a34d01d0be15c25b0758425490c9928429eca2c90a0ac8d4def8e5ceb46504e23d3a210abb1a7e44450f55d5c136ec455a9f00c2ec2e4906cb00592534d807683e57628c82cf47699bd04f6878818a7785482abbca668ec9200c8afae87959cd26850f38952a0a522df04b3d99a312abc1b1e22bf2793efc894f5ef6f551b29306c2cfa1ee6162c59cebd3db434df692f1ee3b09a993e1982e0cdc2f4a672e71a67ddf6d0c9b19bc48092cf1b8eca8b606a8858d1790aaaebc1f84d22425daebfa2f2d435eb2e512dc2f355dd28081cb430a61b516ffcc4ec9ab76eb9c98f73331cdecb66df7891ffa315225a9ae6fc7347473b0388a200bdbeb71e1e0f5719b3349e00de8fd91d5c0b43910a6023cf8faaddd0e97fd0e1d34dde9bc38659e5e3f47552836f6f52b4cde571643eeb696261098b464b7acf8ee68b664d4b59051ae603981519372fb9e83bb3a90dd0735e08ae77d80a11f82b1c238ef72c4a4f646adc471d6fb9300690f312cdbca0dbd6076ef2c4a4c9e76f88ed230331c4d31b1b37f408f48c6305bd2aa2c72bc49cbf4b8b11157aec317fd5e8394ab4e435502a8b8d3cbb07dc53a12f69cd1849f5aa5da2235a1b8cd9123b0fd079ab19d8a58b1590264050b5bf03082cf73071b797f35984e7172c52873e7445bb52b01a2e5e883bdad60560d2a26879cc7e881e1d12e32986e741ba14e22e6a4955c9cc173723ec8e86c9c54ed9ea3e5bc7a76e57bc5dce45b437eedcee898def0230ad02ff64741721ff69a071077d50813cc76413e26c3bc71b626cf72b538ffdff44c2567b51d239a4236d59fd11c5967bf047ce29ec95a8f6ada18b9ff5fb559c2d2a3c7ae04295a8adc0101426750d4d9e39d9ebec9c9b565a6fe6833ed9ee3eb30b80c751cb4172b3b76fc36890bf61de03c2a2a12dca33ff6c126ebdb1e0253a1dec31a73b327cb16cb61a431c2cb154a2933325af95970890be670d73323366cdeab995a551c24cf0aa888f7b3f348e159007d73c04e6cfa4289d61d98d9510d13cc7f3158c36fd1a75607f3b5fc6443ccc9d7ec210f1c9530a2dbe9d4e4ad3f25a7529448bc2a9f089b5284395af586eedb7bf851871f947cba65979e312811fff7a2fb098a5e3ef2b658220c2eaaa55826909e0383e340b49269aaa0af5678c66d30ef09ff3bc5b3041ec71702c643aad4ce9fc5d03a870c4ae18e8b12040583f50e555113ba362949ff28dd2f58b72d18ee84b94be7601fd5466695cc4219c494abd3f43d112bd7d45f04c0415cfec54059702dcd90a56fd2d731682ce40a210fb56d3db666d05513081bef0e09f1ea96c672edc5a218d7d4343d58f6b29d0c1dcc6957c44273b4717630bab3548bc1eb988eb5565510e663b06f078cdf37cfa472b317372dc43f1c22f66e4a77643481c0eaa61c1b4794f28a939fc0ed813c2ac3bfa32c8227d1ceb550a28bcb0eee42da15d09021e3b91548c1d6b4c9112e3f87da9fe467989f63a54241b092160d5e63c132858c9526e067211567f7b8d1321946dca9b3693d84e38ae966863837fbb4e35b2b02ca779e0105accabfaba29716240623b6cd3fc90b63c954ba1eba8e8d6fe1211f6a9ea68ff53be684741c64e6031401b7d9df91b1163d0010359966a904b4c0b181deb55059e27bfbd07314bbc3216354622284d79bc1a89670318c15091970f3e6cdff39ed3f82c788494c848a06a53b8e309dec63d52254bf9420daf6d693f83d5dbbc6f5abfb6da303bec9abe8c22fdda62779ac1921d91f48ebec54b0e6e93d608766c545526c3c95d58003610638e499a29a64615b258cac8199d30453b7de4ed77423d97327f7afaa9bddeb5d72106be2698517d36fbf24d514ec311096063e23af35baabc9d84302f2e0e78ecb96c6af51edb15be86de6d0bb5553d03e7dfd31be1eb26168d810a567341d587099ea4e40b785f38bc6e4a034049361aab8344480a8bfb73c23a54df9b40a73493bc7c4b0a0a7a0e574699085a0651f3136300c784095ba2a87f944525f7b492984fe59d8f3064257c5a2f509a19af6318e67ef4974d16afff7f4b59489c12314fdec39bb09fffb073b4a7b5c777e79566a98f4fa58d2a1f7276de3e97137977f7309ec54c07e7ab88e0f2594bebb4cc7d3cf200256740b3d4c27514e0d6bd181f82e3299171cf0c6db9682f16a9a2a9b37d0cb3686915e6700e5e848f7bab1f3fee7fdbebe6e7f9d8bfd4721bff452107bebd8addf06861578e7c790aada572e4f1c98214d020a0c4925ca0ac10f4727a909fa6b82270f2061196ce54ae6596a970be3166c2dc6f46d0c2774233d9b6d0861fb7daaea28440baea659d82c3452aa586ff37051b95103a909a448675f32bd4db0b8e51331a2422923a8666c1c3624eb95eb3b7af0b6205ea4552f2dc071b60082df1d67268514fe5946a6bcb8f8bce59d1f35fbb4c2317d95b79634887d5f5012984529c52d7d6ce21b63df758fff6bae207cdb2503968e2f9ff5638110511bdfcf25a29145747f316b996b4de5fc3354ceed2354c0dc25651ca5af426dfc8395a8f86982c557176791c3340a1fb47a06be617b10eb3a7c21c0bd90e45b6197d969f08f924676bc8bd9d6b273b70d59fcf26b8c523f7d65847685413dfdefea709f31520f84c6a642618e1da775a25d64bcb46fd299590f77551630904b2377b2d4286dd9e33e2e393370c760fde365d17de1d6631722281d1620b741c31e054e4c12be5ad35715488394c50a87827337e44afba69a2ea896c5c281834e50113c242a2eadfa70acc9b173f91d19211c05b14a78bd4b1ecb251442ac58dd86c85807f249860976a811fa9531fc559d5f236349d257c66e8e59db1b194d4b9fba637f3f90a0f41a748317f2ebc89a99780457608d7cff7fa307fcf118e64e0ac08b909cfe778e9c864911a84837c49201fca43833225e00a41997e364154939a602732ad4eede1b8d9de8d11b03b30f9ae52bfc740933c3b315fa70491b7ff8b9d0024b0c749bf87eb10a2cbd21c9822fda066308d9896a33a731594e6924c9b3c826ffb377742cafc283ebe228bcd66803ea1e3f0e054fb64b9d77815efefae1d4174ef5c9e29f957403cd9eaac4dd9611ee6dadd691139ddfb17e63b03a426a88e8aef16c4ddc1a138a3783e09b6fbae3b9d1996c2d99807cd08cd2316358c90ec5afb38233d83b36fc7cf536258c5969be53f869081e69994cc24dd66815e1a317a87591c916e8eb928035c45b12ec5ba41b209e6e2fa21d5143211b6c3f00415f1d63b872d58ae713af3ca7ec729eb5e4e56f405262449fea413fa7b255347bbd385e0beb9df18e8d59fc12fe15bb7b44bb46f29fbf8c404924d5fc78c5ccb41f267aba0eb39a906a0b6898adb8ba5c3a93c9121ebe50fa4dd2e3d4b7ffe0d19f86aea3c314a20bac03ed713819bfabba36965cb41544f1f5dd66662a31aac9d808a10f44c022a3e1a4434b1f830ac2eb69d55ed2b81d1d91182ace00b04c02acfb6c26bf2a2bc1250c4719834b3260f96c6f8e35c47aee8baae334455a6c885dbffb6a3cfc868b56d44ff1b3b26e195b31976288506b45b68190acd7f75f8362b4ccd3ab6806441336bfa9d6f81237cc8213c11bb00e97be2e0e754375edc7f9fa9195e0c2fb03010b76988ff3ab7b8f55d2f88061c1df2c112d374f998cf44d0b9e674b70347d50d1b81b21e016f244db3d5f0db2b8d3ac7a3afb99da1aec49120d2eb2fd7ed8de87f03a5693ef9c5fbf4fcbf5cb4c7f237d8789e99f89c091294b00e6e47eea64c0b13a069b453ebfec039ce2d92d8326d61b93b89700dbbf2db5dfced410d4d69de989d99130e8ca195ba044e08652a294b3ede72e45e38ef3762604a831df8c8d742d7f48ee61db1e5fdcbc1e05ae7ab6fe9171f59355459e194d0a5773a5ff2aeadba73ec67667f0da7fa41118bb8e545519620635a26d94e3cd15e1986dd3b57438888a4e1e22f517a8e59e9afa602885d079f2863da43eb0febdf82e58ab310c87ff153f9817750e9c860f9ac16f7c3b76aa8636ea5b50df5703cfaaccc0e309d9af9fe42078e023a29acfd2ee8d072f634d2dd36ffbec4875933aa6fa8a50ff654b3ebc0b3b6a8863ea86707aab6274abed4c67c730769e66c4f7b6dfccde5cc11bf087d6544aff3c10713dd50d0ab07656f0a8316532d6bfd490149a13e83102ad4f83f112549cf5eed5224d8c17775489e219891be4007f889ea6fc05f3f462dd7997e767beab91e9e577ff0313a64098329772490301fc2e2299123c3ec7d07a476ca56d7a6fce43b8ebcb059b2c4f1ee1c95889fe94aad1e4aeaf52491a28465ad4b1503bcce7353c38fbde479c6ddbd8130fb598b1ce9327d2d00b3d18642217d7d0c02b04c27ec509fbc0ca76fb4a3e91a65764a382b3d5123000c2610859639e612cb0ba51935215077e252f04dcd110b3814f2f43c2a3ae01fe6f38a2ab5bfc0de4ae3f0c8ac9b957fcec1b21e20c4abc6933d4ba6ec7d8cd1613c43ce7716bbbf42948c9819ee5df3d842951f0b5475e694c414dae0ccdff8a323da945bef4bfd9edc07f6dbb0d0d91f8047600d8d28916c2f267acc998921e5f524f856613e489969f567d10b18c17de092cfda851024b1db99b69734f966ecbfe16815a45c04f426130ed555bc0a737e8e1fca3506ce440630be36e37e505bd3ac0941adaede7a8d3dc331c18cbb4ef058eaa1922ae683c2b3b98c39b3a4e8bd3e942da542661b0fff0a2e649defe4654d1796593c2a3694cbd03eaa975a31fea8362d1763f11241cac2387d569d90258a713688a5f72f9ca22644dde3b0a3e0fa272aa1bc59eb8e8ff797225bd8ea28a878a668ba184ead01ef5c437224a81bc2708ad7690c90e3c49a68077d4aa7908430a3cdedf2f26d75b7d635898bb0c136ce3899c94a07e46764242946c5c6dbe3a1f7773444060f8ac73f316afd2d161cf038202a1a578e5805542e65b759ca845f6c1b1fd23b18264e079396c00c02061d73160ba5cb0e67b59b2cc8d4890fc72b175a0a4f99f293aef5c745df0202a8c54e6609020fdd8d5809e6a6992935a34d28c444c5e5a201facb00463fda36b99fabfc4063c9d97b4710fb109b13400fdb6eab89edddba9e2a02a0bfc73de0dfa8c26c89eb48375f44e23dace6a9804a76bed8c4b0973ed0bf61744b57481ff11f0430a05b5c63b4b292c9f42d040b78ba808100f426de055f7368b3552f3afa147a6dfc4c790c2a5f5b266f5df427ba4931ebfbb2a09e21287f1e04613b0eb56789ed0233cfe70a7576e4fc21885d9af002bd2e9c2c3cf99f3350f7a5d789237b289dfe6fdf7e83833010a99dd823a34682db946076656a9b0e07b41647e6ec28a59646235f2064445ee2b11d8caf054b45bc7624f14de46441179168637438629b48c42041d04513eedd2891dbc8a91916b8d7700d66c6a50f7283b0c06b3a57e736895c4e356ba756cd2f4b8b1e546b18670da67339da27153e8aafe3696ea9c1e3c965ca6156447fe84b40d5e617253352957464d162c364770f2e37d8b5666b12e088a5f4ec5042a83eb7089c6d7bc6862c8583390baccbf150703a50362b3084cb8a6c0b6c5ceea22c2bc0cb43160052eb814706804465c57332e7651e8695706e4ac73db064e3844ee2a0e1b1911daf601ebb00549f6c42413a688b1d1ad3919cff4dcfd7f84159ddfa5e2ed3efe194aebcaf631088a7f6b5eb128926c2f0a696391c850bc057485deb1e950eb5da951db040a0b7fd24a943881acd05010cf903553bc752e1453dca12aa3b6965efe2eb6c420dc9065194d19e3d4d9d4cb2a514d89ec96f63e104f0baae77a594574fbdec3d515f60660a6f350dd7ec50fa0f4040788c8340c9925d0b683c399df51bc498dfb83bf7272a31c77bad1a1b0e5f681943b823ce70eeaa426ec1ae9c9954fd5d9af06b31f1cab52f18a23ccc2a65a65be10808883c63b0cd9b7d48a90ac4ffa76f87a9e4b134aab8fa939f73747827837c17eab24635b5d4f789b8022c689f450f7b488ca59eca627f512d06a664548ec405fa9125d5efcc12b6ce61d716781fdbd16cdd0b656524847551f0671251a61addce4a76b90fa02e88873ace8731f361e3ac10ed218e6e2be3b5e9bf6d3267cb5074d307f26edb521eaafa6f34bca9f77fd50cba4bb16e6cdc2ad6c330aa4fa3f2f7243ab6bb6074fd42d4afa860f3a417bdf7e580df471158d6eeb326ba951436202e058bfe802d35311429c108b9a6e401ecdd553984c81d3007263f0ffa5eb91cc67bdc1cc43d289cbde7b1eefd6d40f62e7c1729a3a34c6951176d78240343dbc6ecf135cbb3a55a75472972542c0dac9d0e1981eed913c0f7941d7340bceda98d4608a87b5fcb1bf107e78529ab585c57db5d04b9d662c8f7e9752a2a5bd0837addcf25dadbcbd6c902e856a6f878c35ee102bc6f882f1d00be879a25407181032a75a95c130febcfc8db17819844b9c9d73ce6d2706edb082232bef3d323ebca103403fdba0b5501b23416b4ff194a529e34dc3992d5a5a6cac9152164473215fd210e812f7c04a7b3fed05510febf2e38104af53b5a0baaa2fa708185709a3e98492ac84009645dd6a6846d49275dddc842303576bbe9e3c93e42b0b9ac6b314f71f781ef670bd7cb60d3c808ce46afdc6b1a4f19bf069627c0771c1856efe39dfca26e0103bc8fe17d5aed63b6d8bfbc3225eba4674813ce491e4d4d61ba5683c845422f60903691174d2e10346e9aef9f41bf61962c719f6384b7f8a78c21a6893106a94790b5fe5ce216af9434a5a027f5537bc27277aec91bcc8a46c6635923c67e1420def6d1c85f2546cd1174946626a81840ec522c650494bfa7eb141ba56a59ff66d5b0c7478dfea0ccd84667f1d14418470b5a6d978076ff689de579f9afe65d201616b33fbd11a130652bc8c689f94ad4d0c1641db87233a27b53c497ea6dc7900a66e6b7069d20c09d70bd2e51f3321f84ac83490c3d6b6519418299489368f0c20757694cff0c75553e48a24cf9e07e587aea699aad63ae93f0b0b00832b0e220b307681c61995c990c7cd9f8c779bc25c660fa5797576a4b9a383f84d0aa4608a9f28c26a479b9df5294768e02dd9a79634ad3970ed6a5478f830c3bc92df9211d9b7c7ed0d26d177c965dfda9e5a7543a2d2f6e2396dc1f0ae3114d8ef7ba89574f98223d9c43c68526b3f778290aefcb66b623df8335408df803639d162ea8f6858539ce331c54c1ac6c7699692569f184c1b41b1297ead776cdccc7a67a6aae1717ffb19e067183da2b631b0b7e207ef9de654b03edf495bd0748285ab9eea69f48bd2b50e17d73eab9404a9f7a120489cc2a3c7d56b9140f417ac273037d675df51dcecfbb3d06d6a3d42504906a49a59102d15240422208616e96c5fbde438766b1e2e79d0f3e5d7d6c8d002fedc0292f46f52b1c597e8735ed94974af0b83c95c576117ca84a8b943922e288fc40b3750eaf38b84c2a5735f2e7ef6267e0ff262b798b0e2023768b6f66a0f346d0cabf4db4b483ff297d9604d73dbd9bf9ccf7d5395211085d32f39d85dda1287fc8c6c3b5a39b5c16d9b86fb6582cedd4a73e07262d17a45e75f848a159be772b3f78391552117ab8b468724b48d375a4123151baeaded5bfb4e9fca8e5436383adc22bd38997f91977edd7639e06479e538be656d61a6df1e08f4350d164a4799a7a851a97bbf4c126a0f1e2cf1fb3870863dd959873d10d14831e8300469a41391544bfa0a96f5d9680bc52f7823507b7564a2eaf4d74c18790cc8fbe7449f71ee2a435155e614ed8f6ba2307e7da3a1f80dc8820746bd90d79007f55feb9d916a10284b1c68e67fb410d1c5f3656908538ad8e260597bdb75d79354cfeac4da7a194866134a8a35f8f7cf8c7b083e4a469af7129c0d51ca87079829c851d015b50c831fbbcdf5bf6c850b300dfc45fe33cb24bbd294bbb1645b843e9923bb78295c8b177e4603da12b8172afed3f6a3bd1dd120adf3a650fceb22a6c0a4bda789a1598a8070a699a222897054be89b255f56bcfc9916f1d991bf0e83636da06b6f575277a35d863e54992e19af5726c1d9eaebc0fc6d84a9b3cdb8979d974489839271ba7641a3d8f9bcd23782f11f8821c09b70a5d11a734edec44d9a8ea9a3197a084465b854e8a9dd9a58c53ee450eb749c794b6e684920e901fdcc94b421b0e45f87f19e0d2cecea898e351759e192f387f57e6fb8c1ccb97f4f58194a954f309d4b407ee207dbc999d0402b3cebe1214b4528ea18cb30000d7cd61aa72ec5bcfb10314632a2390fd23fe84359e01823029e0f8589f0fc35bc2b27a91c5f6fb7349af98678dea40a314f50957c88bffe227e52ec239821b51226c2a20d3d69fcd2c9595c583ae52660d0dee01b98d42a8727f9f73d7993ffdd3628bffa0e5834d67d43805ace47df12e02663c435e05638534e18800a4697924c4c0e5e8f61ff10558ad10eb1324404ab0726088b25a625a592442fb47379b096b5c50b8dba54a5d9de4af83c6d81d09cb5df052e6ace46752fac176a0e08da9bf5e71a82a98dba85d3ee8c866714e02ad0881520a70879a1ee186494d054ebae6f45876d721c4708e36772a114b6ec205c66e0b3ffde585c0f9125161db7196e2d7f6b7cb017823d52181eec2317a4126b9e6fcf850e56fddb593ab8e6469069212561a6949775dcba1dec50b4a673208ed91d365e47fa88559180e956ec231a19a685467385fd428f9e84f5c48e0ad9625b9afbe26f80fee56752e03ef608c3fee1b00335137dc559af474b815813d4f95ed37a1d1c1cef4401a10c653d18227c1e414ea57604ddb849c6a1d4ea8327dad1ae84f2e14cc7df2e83c97c36a4e844fcaa17765f4f3ffb502b1f1303bb24741130e53465f93e57baf06da9a2f0f9fb5353d509f3a55d94cf07a570487417c148762cd83d641e2f590ba09a3363a30508b207d47d6296e7c76ed2fe9bcb7fcee93b7e3c3cc89fc5e15e7bf1992a9cb9173e7e15bdfafcd355cee7c1cd3a594aa4efda4faf4a449f13ccc407016a0a6b67b7a4642e4064102efe66002b900fee3da2247cf0545bd313d2143ca993e9a20e7f538673c28f4474d82562fe5f21392406695cc523820e7fdca811631cd65b7a1d34864a84405eb47eef5e80f3cfa8eb4b621594ba65c013d101ed53c683dbfc0a2bbb3da26485f687cc4203d5eb3ab7edabc19a148987d3032ff6d23c25e9f8fff4ebf7637ef43241b686b3bfae559a16d45229a625eb7faa9921eeb2cd6603e77ed7cbc6e6c5fc6739e1a1649d07f679c250784c91e2c8d7c5340a7c668506c7a103b27caf04a2848d9186e9e767ed1b0aecdcb45706654c6260bf81b7b2c9d00c493fc71f86c421f7a6da7bbd35a06146984a5971879937e421614382c3eabdce0370a72cbc6e92ae0f443f3bfda9a04d9b2890af7cdfc365d2a066a51c065b5d777a6ca5f0bdc0e22ba00bcb7b55e8060b09ed535a60448416e890080a65e73d46bf844daae423728911b9fa28b075b0da46cc80d4919498ef1ad2450b1ba2d6460a171fba63982590244bfe07d252006ebe37ccff289fed8e30cc07c524264be86228d0e00d54d6964267217a61b551355f7b5b4c8a4450660972c862404594dd35f61d6330ffa0b6ad1b835eefbb39fcfb3fccfd21ebdfe7682152750ea2748adabf3e7447ab840c87a81fa9226f9346fd3ee6a1828b312cfc4374811e25bb29aa06a69ff8ff9ae8f8bae4af919d0357541f4be036a6ac9da400187838cbadac2b0378a932f9726be29692cc48ec247a80a0ede60410b64f918cb0f71fec192f801503a4ba258726963a50f1bd25328fa0db72c03334ca7946ed0e334b66b349bafbab34ccab2a7a46c7747c9279be98d8d8eeffa4ad106a7ad7200088675f90de3087e27200aae5e55e0f2b5924b562e207f3b6046737ad95b29133e5c54dd4016d5221857fa7754245108ae4ffb6f3f03f50be85df9979a66e8ff3c7dc85181e019c598dbe583941c90954192f2621c3c62e8d0932271ee66f2501c00cc63cf8cd5f74424b670f6ac5006b51fdc04bcb8d131318889dab7adaeaf9304c79d04163bdd334c7f927da0f340ddca4d17ff032fff80f4bbfe2a1e938a0529864c31d8cf2016a2e8a7d25663d3c2b92614c310f0476e14157d095a3cbd4d9b23744904c9e87dd6fe9b3481e5f972a61d122fc253f44b880f4dc4a4a83a0c69009160c63285201ee1145fbb1cafa66cf5f8eeafc481b5e10853391881e8e4dfa3f6a7d4f54a02a3654732bf5f0da86aafcc31f06e5f561430bb91bcb8b5f73c783a854ce7f7ad2cdf890bdcbe997789245aca143f33256865118e02c977b58191596f7704a116ee8866ac4fca429f20c5d6a0546b94d7597c345e2691b41f13cd1f95914b3543436052eeaca8b2ff18782e674354be620f891e378b856c75407ad57350f284d977b13a94a9973516689c3e8e1b80550a9b612326cbb26443cb5ab462cb9507ce8b8749ef6089b7536899bf7352d30b9c68552977d9b47e4b2ec5db7b09e298b13e766f67b658cdb97e0db0370f132f602d97e7b38862107ad771e9efac8b386ba8a3a84bd06d83d3c6bf7192afc0e9f9cd4e44e5b56aecd3ba99b8a71700ffdaaa9c9e9a23f1dd86385fe74eb615268b9b053efed601c8ea798d0e6d9ee37e30ab113a7a9452a1500b96ff8e4c7f99df4dd1cebdfd8c3ae7da122d75a52836dc123331a4e4af3711e3534757fd8b9956fb75d8805038888d5267e3cbbb445a247aa156abd44cfa30c733c4acc20a5873358709198786b9cc59d3bb22dc1a3b8073616fda6afa574d34110545d21cf4d374f01c7eeb866347b29968054d87e1355ecc8a86c405bf357065f35bed6c92258c0a334536a11b2321c77021aa1223cb05dc445144c6155292415fc0972cdc9cd007af7ca0582549d91ae824ce075523f0b15f7819aeb917a82a84ccfa915653901a0ec23c9a1f3c2a1089a5faece536d685cf88a517ec257b6274175e4df757e789217aa55006bda062e313c036bdf5fdfc0bb63ada57cfee0f19c2e1fd503d6c492e8d9ed02d3062cfda3e8d8cff5224636eff0ee643b60ebd786e287665afa1161d5f0dd67392e2943e533f671e189ce76d8aeca5949ea268d89fb4ac785da03037389ed09540221e9e3064c3a2464b442191206af7d51d16412304e594ab5996b71c86b8f9e83c39420af2df96a01ff7df8e8d5c00b78c50a849d3e7f650eb399bf61a87ecc64802703d0f7abc6f52cf87744ffaa543c6497b837f66d5f6a25be3f44f6d38c6d76373fcc17c78074fbe64a5ca11b340b4c8c7c57448e809d62ea94d8e3d8f5850b046fe6369020baead0999d01aaa1fdb92c7822db01e9a82dda7961c4f18caa5e8f022cd5277f2a791495ca9ec29594cb794b2e1dd87f5373e59f7b123fd8c0319d700cd684cb15b1fe1108902e198f22c6e4b0f03d123d5873add7d5334801261582ed23eb9d4dde12966200e0fa06146f4aa1c2719d7aa60b430ee5bb81e3e16e95dccb246d6921b40d7a534000cf79f372cfa6d6a0e1b9c76e6b1a32aafb2f4b2986cd259515506dded5a54560c6ab4d6c4b42897fe93b17c0b1729ca12738263071460e89986d0ba05c092dca85fa60c9f42e82e43a451fe67be99061d6b5260ecd8fef8cf36d00655346647284f32a5fbf81100d065ba23ec9d6fbee218e7bf04ccb2bb94433297898ea79c32d64721314639b39be8f3be399bab941ef83b50f33eb9da0febbdb28fb5d836756c40df68b45a1352f4ed16e70d18230c4569f31203f9960e1987a06b502c09a3b09e12e8e3eb51c47132d4024f6131db4b39866cf0442ed7f446e3edac3d031a83b7a48f56002c17225f48f9d636e56e9df55b487191866f753fb1cec631d855a31af3a551bd3de3def187510f001e2e40476b1832aec7b2cf11ca3cb8a8c42cc3b665001a01ad2c09fd774cd88016699f9f52096478ef363c41ebec7737c33da0f39acfdee9b3e26d43089273912dca2b607bc42a6a390474938ad11d913e5a3799a723b5e183b2b0db9921125a9c62fd8253490754d796fecd8c6944d2d9038a45ede4ececaef1322b6b878bc140abdc5ec0e54bb14ca7a6d6ed14a39faf1f4a2d9c43d62cdc52306d90d12b3c2161c62bebec0a42677e03d3a285c66299bac480a13905b507bb51e9b322cd084d474fbcc2067a21ea0bf5e1a942db28cf9ed0ae2fe6c11506eb2c24d6cfdb6cb3eb4fb315e7be0fb2e994ecfbb8b4b0e3cdca305d198ff33cf9dd714e5d6d284f03480907619a66109b879dbb5c2dc844289ee9eeaf965dbb74d6de6b640a97ce81ac22ac5de1fbb0ca00cfb93e22f8a8c0a1a988e2e461c75ac21bb71dcb12e7761d54d9aab39a3afe44d836427dcf3efed606dfbd7f12e9e95f53d737a31524eb9a5b00b12972f85b55b03ed906854d99dbe93efcd943aa86be5f5882433168db98717dec8b487ecd86cc2033abca250383e3dc262cbfb3c99451bae3ade26faf478c8dda0bbd99c5fbdb0d590210ff375df5ae0d19f95e2af72b7c265fcbf6fc77450b9c628698bbba66d295ebe3629f97c58c27131e0dac966a6183fe3c329e3c0b12b48466fb531cd5cab2ed737da83d15227e2949127a8fbbe1f014319bea98a6b1215ed98529b18f954ab7c16f0d28ae4fb5d214656bcf3ad6d0f9eecdde6a31cd2f70aab0c6d6a14da38d464843b0239ab3f9688588740590b01039c224ae215897a8e6194c6c453492d621cabd40ffe999d0e9fe2eecde51e103a9c92bc319fe98c62cfcab9227938be3cfe36845def124841ac0193e05c5299d93152e1cd455d1567f97f7ca73e924e40102860371c6923e47b3543baf5aa8723955fafb893c216bcb53503a8f53eb27c5e1d8433e6525595deeadcfe964744625c3678f54a3344925ae00fc142b28a05d7491a730534fad55ebb1e42e1127d4a66fb21005ad9fd123a493a370db2ded1d22cca332b083b27f7db60258019418b4b86183bd6e4c9564751e3d25e7670689dae60f7acda9767019af9a116ad29ecf8b140dc6d6700d9f77a4ca3c45058156f32f2c359c833cddeeee42d5913bbb16f33f441778eb0b4560f5cd15bbed442b743cf50bffef2becf3151e31b21b85df0c6c86c7a6e20640c11107c1852148f3cec61a47e8d1716039ada1875c4c738c18025d4e6c9e47eb31a7f9a286cab67e0939f54f2c923d770b4a0f5a6e1c3c256f2c5a6c65cba02f27df6025db24cb14f1c411845d147ed66e7eac1b8a290debb9efa0701268664eb674910fb7cd728949e95a70b77281d95d34f364b173a87bb4c5ff15828fe9983981a6c28dc2157e49b49a1cfce96555e77d176f51a66e6f3646dfa46f7ea1c18063918d290e1e6cbc121bf307d1de3789e215c9bf9ac6471fcb607b770882a5772e4e3d415ca73501f48754d4e76b6ef65ff5dd342130b4ac64036aa42023cdfb82065cafb178fa8cbd241f30462842e169d5c7731fb1095d884e4ca021cdb58e2046125a446826cd51c5136f6b3041adae333c83aad94b8f7dad53751fc295e28408bcb77da4d1de251efd1806143c5fff0b4f59717744c9314c9ae3620471b152a9ab0d139ed729a7b9220a2481ec213d84b26edfd8825442e34eb392310e0bae879dc2cc8e4f2c22098b934418ffa899bec366bd5553aa3912636d981a8eec3a99c34e8017b5b60aea2a6b77d5c2a2772ab6f4d8a7d156af36eff7189553e752ee6d743e7986b2ef9bcd41634e5adffccc9bd2cc14684dbce070562bfcd37298438c490a7011dc82924cc0e8b646cee14c655bd7337293ad4cbecf1b688d78cd644dd59f938fd74293d9daea2960aa08e0b3770c1fb410639a738943095fdb34c2f10deca1c337aa607b4363371b18231d0918567fabe302daab500357c519d1417c7611e366c5087d04572dc8dea9b79c0e3f38db49d17617726f02e05fc0ef7c149e921c947beeb74343b92651a0423a36d2ff0194f95484dd23de07c711ac0a93fb2f28e6701bf3556bf8f09aeddc92b04d0c575320e794e765e124ffaec88679e0ef47eb136a76e95670bf0d6d45497e2dab91a1720655b1cd9107f8bc8c2e58b286f5d0453decd9824307ca5465b254d6aeac71a976435d25bc39cdf9630bfedb31c569fb36663566b24db7448659d9b8ff16ede5b91d3b1309fa020b9f6914ca04181f4cce6513d6c887d06eaa004ccbafda03b8d78d85249b4b8051344661083b535ae370e371c43acdbc7193fda5fb3f4c4feecd339b0b56fa30cf67351acc0cd6d1c65ae2bfaf786e7fcaf248a90e3b4036ef8ace2c09099e0ba94ff8ab30e57d7cc17c12b8aad113f8444ab456a738001f9593fb18f10b11efa1a5d45d195f25f4e643f5327728118fbdfe0354de34ed4b4d437dd1113342d850bde162aeb22ab686cc3d5315f97c7964fbd1e3de06a2619ea24ad1d368d8ba186798bb7fa00cfb3b1c703fb0c0eced59abe3bd77c09f2cc40159003cc830d7c4e96271a8e1e3a5ee2f006244d2122a64757da40c99a81b82b679c18088a9d557eaefa4277585d24b14533d2bc30c95104663e22ee5d77c5a8ad48836b0cf2a301d0f9fa5374b24293b65c84f03d40fd8acbc619580755579fac3387075e23ea8ece12607fc14ca35565098e543eea73930604ae0a34eea71e56f067d93ae7cf959f7c9f463bf1556ca7347100514efe64905a9a896b6fb16a56d4b2d9807248247cf29c5ae1aa9d4d3cf02ce8d64782437b8d437319febc78d0cf91f4c5ea51b1ae8e3b4d3fb3c4e793392fb8f467abbe4d4b96ad49e6d5f5d137e6823f903f086defe770cc38e27a2df21fb4892afde6134531192ca816440da45ce33edb201503ae90da9bb1b785976035adcff6ce434bdd6de24bdd8ca9ceafb2fb432c37e36a82421090f0e911de49a96b21625eace1fc73f179cc52b9417ad786273a6f4cfad0d0f2c8e7e28d563ba0315b37b335df08017b29ccfb1f997ef692b6b3eb2b6ef7a7b0156652da68253763ac535522eaee04d5987de9b08241bcb93c2182859603bfbc2bd66f3f290210d5b548881cbf4f3922a791e8a3431db0fe765bcdfff7a0f204ef728e0f20352454b0f01a66edb7d00613ca1a03ae9b3352afdf9b6e053e0fa85d802e100930967982b4caaee611e57cdc436652fc8fd59f4707cde20abf338d980b4c2acc518fcb71f47af4e2ae435996eb3c22e387efd3723a1c6a4be93832698dd5092e427b19cdd183b8553833ef7d3b9ebf3e8caed86c4ba019f36dc98129847ceb246966db037806f599f981e58ee46adc06733029b818414af018c7b4adc63412e3ad50fc3705c75f19b7760171258520b783cc36f2221ed90209964cb13fdedbd2e6e2559eabd9166469e8abe6eceddbbdf15a77277a0aed529f81880a74115786bc7087899c1c58b879afdb4f09ab4b45fd9ef6b2dec8b1d69f19268776c794bfc50b66e4e053766ddb9489c4c2cd1e8b2f06d9c0b0bf0ac04b6072ac671a2c32812032b4e737c71f3771dd539ae327974626c797b2119c9057856491e547dc019dc72aaaa5d8621138cb1f10627f905190874679df25d446d2214726db5767243a098a44fbe63adaf7f82d332231ccaef5c7a6be7d34349ad712f279876e4a79642530489063fe97546ad3be7e885643cc47c1409a3e19de972ba4bcaef6a4a9beb58361ff485a66e9840c417312acf453005b0634810a0be3ed14ac6868f33d43c2b6f3be5e5b48c920d84c885bf77302d3ad0b61008f449de2ba558523e5cd7ed801f74f999709ea81f838f426eeb390cda5e0a777fd88b0579f73e05ab4a79dbb503e3d1b78c4d7606906182ed34e8b6ddad4c1e9e912fa68bf695434dc5b779d796bf98453346c5b0e2a8fc311ac1770555e86b2940b9426f057e7b87eca11c7ee265729a65cd04ed7184f6ef89c9b301c073acb647c8c00b0dee3903b536883fe4eb22ea22370f31366e3cd5b845e54f6d72918a3381df2af6d98d4abc6d9389ad10b873129e070971a3a101248dd42f3c51c19980ec84b3eb39dbb556ce62844845d733baf1e984956514d6a62592e8e2696a7ba6fdcfdab9035f4562043b0c5924488a26849e9565e48f89dd9c146e7d2bb2868393af25a6a17c8588d86fc4db9cf792e56a1e26c20d02cee7512ec43242df492c0128e6f16632114dfb3c127811b8fa1ef3686f884c09c5710b3748f70bd1d061a09233c4bdd965387ea6fb3e4112967bf9e0749256d70746f8e56d8a5350b41b33b8574e32bf6fe0bae77e50b566643aff7e69624f2f1ec30894513609507a1d8ccbb423a85ddc05b2f9eb829c9d8bef126759ad37342d78a711174cd3f4f8f1a95fe7010b2a4d5b3f50d82d569eb48094404c72c29a66f5221e7b2fe0d840886197fd7369df7eaa614fe460a17d0aeb219cc728099a439c80e33151bd39ea12bcab03db6a60a3dbb8ddd7fd02cba6ede8133fe24a8bb9ce29b62a2b0b402d08d05f6711975e3877630d6ad74a162a8955ecbc746a380a9dbe25809f5c8ea190ba778062563aff6210729abed0ad73cab2e70a183ac442024072ccea142c078fac97b6ad49557cfc6c28965a5d19f6bc74d9f2256ccc41721280de2677ee3bf42c8abc5f1a9e830cd0e3b9f8bd5898efb13eccbc9da39fc9010b8d21c811355ac163f3682ab6ea9b01ec9d2ff0cccff312db87e9e6324d037d1d10922b4eee3961eeef81ab21c98632a803e26aff19deda94b8b5c51ec8c4b938316cdc84e2c5398700c0c7776d4a3b5516da4266646efb8391d090f0e1c355534ce1a1eca68f3572efac83f83468d22fd3ae7a084e1f21d9355976518f7dca8d7c5f8b8cdd349aa46d31f9202e9b59c7d4d0b44fb9618da1cea97157149230c2137a14d0abd88961775af791fce5e15a88f205b8f39d8f6e1f0e27c606a78e503579456382b0dfbd181b4803340f5a07893bdb3ab8aead7a90672e6dabe13161a064cbe155fbfc8f432db68d98ebba12c4ca3cd931b995029b168889d1dcf1caaa020eec0a0614dee44dbc2bb08445aa201410d651e6b5ebde2b3feca17d563780e31ba5d9b5744a3a9b7e4a1a20cd1f0e1f8354f7935aae0f6ca1193f7a2b2846417dffb42f86be33e5c1fec0409b914af8e9cb25af2875f5f957dfb9e76cba048b720ad51890b18cd8bfa78e6191da08a77f29006b9e7f237e81889672ed945d9e441e18d6c6df19a26e08f5e08e872da4f0e31bf92ee9ea2606162b0b427c412ee761472e91616663d9477e25bb308e7cd980b1d47570784e6c97f3cd06277ff62cc0440be16089ef69d827d83aabbea02fb79f46fb31b91272893ec14ee452fb651fd0da9c940eabd8cc9e19ac4ce22f5b475fe8cc6164dbea2f512e701a8b34201c03b4ff1ba96c69b01c26d39a2416409e37e786c75ba1b06bb8be30532cee1544d7ff094678dc500742f021a59176254636df1b0ba88d2cd224f536025fbd3fb631be1d7220c8fdaeac6c3c5409745c14c58843ee8ade00bdfb9c595295d98ad0e7b2f8a11f4a108c8bc47e75d382a9a1b677374c8003ddba0341591a61ee7f4d0e02b8279b0cfe98dadc7313acefec4a861c9f99a90be1eff609741f568e90e05e0f624149dd1b925833bf670dad2760be2c7f301a00b673a1b2a06c0d73d06d86f0336e7de3ec37f3746c990d2fd97c8a3ee72039b5ccca1227b08be2d108bd6d0b6686c81043c551bf7d34070d59be3678d90bf27392e17148d5e69e87fee9dd4a83cfa153cd45a7e45dfcdfc1c352204fb01179863f731229a7abb198a24c5bf009ab5649d1d8e672640800d3f5566a22952943b1b18c451c4a05fd40355c80957c75632fdcf7f786adbee6d62b1a85c4bb72cb6144285c02ccbe6ae2b0fc98455d1a43dea28c38019d60cd82bfd732f22bcaa09a8feb62d7173d5e52f84c0301098e3d912155529d4c3ab1fef2f6f6ddf4f79b68d83c440d669b94f4a821486d21d0dc289f3d37083daf13dd8ab29166566ca2df0e6cbaa461af4e4cde8fb2689e51487f9a4b2196f3be442f9a646329b3c411ef4e3d43addd9deefa2fa7bbb2fd99858eeca0fde0e0087e7797bc06a2823735ccf4fe58901a5a6d7e7af72db7dbdb3f9f905a57147d9c4e10e2059be445b301a2a8678a2ca28f3c5c14d63c8b866e383228e3a1552b4f1274c2b56ee355fea4df6189685861b7ed78904eea3c8303506f495341305e745aac96baa4b74997e5feb436ddfdb2f8ccd64ae003d4117a038496666011c1256b228827b4cf98c03ceaf556363b1777de1425d8f73fc6856fc37ab48c4be768a72e72b205708cb02a4dd2695720a444f6991863e0e281585e3134fe471a959cd8beaef13dc26b58c0c903a6a4c3884f55eb010d14559965f5acea9051293aae6c46b3f098ce951d6bab2f1fc0a544f64de8b95d1efae864398360d13f2e2675eac088dd3c9e54d2d32e90232e7976e5ae5b12b08984bf4b221b0c3e53f7fd3b3d638e23a556d0c479d78b9036d6533c0fc9a2ccdb57dd5a3c6fd5460cf7158e6a0f2fb2992ecaa3469426c682b19550813330ca8c607d8f5d055c75c4ce6d864d2238c15f1fcce93e5fbf056f0deabf089cd5e9ad4dfa8bd0e1371ef5259e523674fde8db6087289e85a62de0749f88087fcab3ad59a2b1ff8378aee34fbf761f5c09a2eda51185375bfdc229a73a3c2457d53806833000317a4f8a4a7655f0d78e0a9960599d109cc85f86cc9e8417dcf643b1760097af8b9954984d8417cc7d9030f7bdf229e9861eabcee9e8bc4226d6575ad5d38e3ad128983ca7ad830567b9847468271741332208e210c38cfc7c4e188e1c4175b2416d7d151e22a020d8d70ae884da8c7f67802dec0d03fbcd780b213308581749833862cd226128409b0c0d77a62f2e1880ad6af1a9f8518eaf289ea44dd057399f112ad16884cd39e96a44458e7e8f37c9e5253b83558fc16940ee8bdda7c268ba5bc0faf876b2cdc1ab96eb91a4c60ce960ed95033c5195ecb6fda4359f17a079875839b53a0ad76335aedfe7100ca1d68bc78b18ed6c5dba2ab0708e5e24f6f89fddb0688a2bfff69234c0ca15039022e0f6d55397c710f3dce85df691b2385c3e909b802193e0fa453aa6968a56c445ae0b06ef0645e269e730fd934dccf12ad829bb09f034923cbd39f63b0c5974b33afc76af5c5afa191866ef9d9b9a5ad0158f681ba034a99fb81b672056634ba25e145667935994bc263356f8c6e405de81bca4d3d23f9ab6b310ac6a21faad26835553dbde627f868c7fcffe09189bfa3fea0928f9add29fb3eb7259febf47b4d8d0b5d5e95f4c9f4e6e63dfc990c79fa4f5e6d37174a78dc1a9c10fc3741c314518fe941ff522702e938378d1484783c291b22f84d1644bc7b5fd0f88b3803ca4ba2dc7bba85a38be0a31f89e55b2c43ac1c203d541b6c2d334f34dff74079ee4290f3a608fe580d9ee61d4c0cc5d72e3406e8b0d614b5b1e108e76171f7a13b61e62331d31dbe6273e4bfb374d4a2575a4549a9d568b8cc4602fba89ac431041e4f8833094deb6cc8d0c25a2958656fde1b6aa295df6147db651bbb6e7e11b27e07331c4537b9c81c0c9ec622b79b638391c277e6dd975f4cb558e3377922bd9e3ec760d59d40e296faa0e310535c926df7e8f56b22f2cffb2259754a068030262cbddfa469287c890e1a2e5fd3a6c7461c5b82a0290af26429c0ac2ee4ac13cd5f71c3c828087d69f21d3f1139984678d4ac4593bc0b6a3eeeaf1917520484a8ff9371a9961d7ca232a0350702a3456e57c364f51b7d977780c93fd8f45590e072f2e99088bff41c8b0602580117ef15b8e2df316166776d6ec14590bea7246279c27ab0d17447b52ce450296c49ecd161e46c905a7ecba6f260846681086e1447582bf56052967874da4abd6f8a717f92f75c5849a7720d4cb83f61021bd5fa09b432c61b09c7b0764e015c0dd56176b6fefce27bd74d4d1acfb96d05f0e472f474ea9cc1a9f02a4e5c5428844d020ecade7fc7c0d01f2d1efb99dcf2e7c8493851c9e8d58e0919c49944027d5aaabd31218de652354c3737c8e26c61d870c264363f5a1cd8b69c6ab2018a0dade8e5d0cecc9202913fc649a86e475a170d8265020993115ed5944420a6d8ef4a884368ef4fdd873b1aba938779d17854d33fb8343d8f0eaef718c39a177b7c38d9112c1abe0c0438b729a54aa2b119e8a1b73bb2173460b64b0a49787c0f02ec7b0ddef32ab3c193e50dd420fa669d491bc3c8105694b50d713a797b3bc6d14eb621d24842197156e8330b92bcb7f55788ca5ba850a60f2452198fe6e57186869bbcbca81eb38e0bc7078f95874b5acafecd2500d26a04cb9a11f84683f8f14eac60257b02bdbace53b9d297cd61613d861443c3874cd88818f1d0a89957875c7fbbaa49039f06ab88b7757e7fb84ed98173279ac2a4b94e5760954ac4907ceebacdb319174873fa50204663ac4474dc9484088d7740acf489da82970beca23cece1edcbea2e923ed72eab02205743b4b1ada88c67f2f2bf767e0472078aa9c6ee6e4f4f8a92cd1b52ec1d43ff76ff822f2aafacbd986f737eb84fc3d659c6ba552ef4f693f615429884af32b11641a4d2e30efaf3ccc071f8fc01a67831b4e4e6a526313dda35f4574d3b8a451cf670b586bb47f0428d330779851953ba43d491358d05102d6a41472a4e73b876dea9be6bce71c476fc2f26f0ee345c3d9a20be0ec0025cdb56c64c44ac8f3588bd19e59e197f3ab7381dd24a4f28dcb2472c305efedae52329b30b1111ac70d1adafb4f63c3545d43ecd307bdbdb60459dd1aafd17dab416ff8a6d7824e6073007437cd254efe743ae15fdd3ee2b23c8849bb39c2ac49ab503ed145bc1c02071670b2e73e5d5d09d699a85e855361a727fdc79cc519ec5cbd9971ffdb965d8716e245b6a58391adfe79dd49baf6281ea6516af599614025e875d5ecffe20fc52f029af7d9c6c6e4576f13296d9a53473c82ef5c51e93b97abe70bec2dbc0af835524f6af20703dee5cf2dfde76e58a605f7ce3c213884dd53044b1ab0fd64276c57ed31d63b26e2a30a1be3b939c93a1d99cc5b13e6ad34b2bad4116b033c932679fa74427b7648350634ddb15fc1f50b9ad7fa43fc593a5a0e36d5b50f51df068411b8101f24cd6ad997f5d23109fa9aa1134ec79dd4d72f65f7437484bd9b276a051a09be9e1e80f9469f26d49d0460a395ee1ba749e400aea4fe9ea534093d8e829594b34a898df4b2db70cd5da31502af281927a4b4e8996983d9ab6f49009dbca237c0aa2cb7515d15fed2da3e34cf51462bf26694fc7baa5cf51c1a465db69d9f84c649e9c7ac15053910790cc08e5656cd42659ed9588a54ae194b47993fe21bab4e9499c2184c471d29a4b22041e66dfa5060d49424a37841fbb25ccc5e1e3a51177d27d172fcb118803f92bb71536fd6b85299ed15f33f5fe948d412b9dba409ba429fa2e72235644269ae9f5f83b06e4a7ef862a24dd128849ee26d81095e9decba7c1dcb966802d2bfe0dee5c8bd6bf7a8408f11fe889f8eb99fc82d6f0f3df2728940729ba97565cbfc7ef721caf5f5d0210af0e4fe9ecd717a743be1bbe3860deecb27ec6a523fb78b640e29c1794ad161244d673c1e7425df26c8967433d612b486ae05e344f0c0bf4b08b469a6ef964c5ff35948d45d030ede9faae53ee1431ce6a115b9d96849f949a4807d13809a9ad4c8c699308974ebb9b31ff4ade2c6f49fab17c8719b59059763d14e93d75ae9bee3ef87f744b1374a0adde2614868a1156985eef2b08441156b175fe10ec7782409877dbbd16c61709e52c10dd66c9f1f995df4b986f4955dbe59f03fb75a3b1ce14bec64f293557213b8bbe5b68bd67745fe349e1b1b463c46921f2edf464d38764cf5f211173618154f6fbccff9cb3bb5f6ad098f481576336ed349c7438190d9210326bf2c895b47476e3cd133df975c85ed8d2aee7c492f08d623a3cce528fb9b8c6bbddd80a40e228599eb1ffa5e5b39788f677b36ce980192d4e3f9d193d7e6e53a1cc39eba51e7ee7dfb2179bf92031ec800ba713cde7107056dcbcd313d175dd1ed71668d70a52453f915c73593f26212aa4495900f43851808841d43f213ddeb1865387f1541545f46404a81bc04e03ad6e217647555b9af940737997b91995b09cac4c5f4944d950f7276c94c1759b047998a68185d69bc4e1df98396fbc0355f6a4369ab5f3b43324f6c226ede14a04c38b7e8603267f9af5c581245858cf7064cb522b8995e3f29a2369fa6be1a90ec258ed866e3250d7371a19e7099e243c5b5406fddbcfc389ed8f6fae84651f75151f30a1dc9b7e1b945f61df0139c5aecb73dd996697d6e981e272c873a0eda2f968fa7bd75392faa74e4eaa220ecbb4c3f47229a3469111f8b61b9cae203242701885379c1e0a69e1bafafb6c7d7c22125d9c9ab5381a80ddce6fe659264bd8088ff073359313b89dc9c4e1966fb2db2e63fbba08b3b56e4aac105f81e90772c1f25a0d545e19a6ca10e9d457890bffa5c312c1cfe3ae8c13a0ee4b58190a7f62111b64c7a8eb14339e8c86c4f50636ea37273927995eaa0f5be9c5e082bbd29cbe68d24e123d13de52aeb636c8cfa39341eb5cd9cf177450d37a401c577f0ef43f4b18239b11f3f55fb90d5fd7d9627c94d93258f285fb57e4d0d2563ffe83e8de1155857836aa4e234d71ea8ba56f2a5984586f6ba82dedbc480daed650769b8f0101221adc14fc2083073d5ed013aa890cfd64e89a5f16bfe6165464843c785ca67c7266b9672aadd3abe54310ae5727b1c3c107f50ed92092d88a1af43c9a7f857fe3f75f716a802a492ddaf62dd44df857dbc306214ffece1615145d34d74bf1a27d2181e97273d2754bcc9839aba36a15e3b8715c555c0fd83b0014f91ffa9a2fbed7dcca5a1b466ec63b872586d801a6eeb88443ac5f2a2bbe65800209aa1628d8d452ef4ead0c1c80617f836c165d64b033ed110259ad8d8b336d1b7331f14ca5ef01dc850f5e16f1747018b368e04ddf4842ea09cd925e5e9a7331310e47591c76a9c8ad554c1e986203cd74b1fb6ed8bad48598cddda382092d576cf1800a31209b560a9383e85881745d91bd7c9fc2755a1fbe55e770a79ddc4d175cbf4bba85edc3eb478c7ba3bdf0aa2b57d9028053d2987b0ab5bb93b3a69d7f1014e5d363e5bf89baa3b3603b2a130d992ab0e1ef3794ed2e78282745b48dedb0ff5c81ad39125c482824b2970523991a2c3a86798572af218a383dd517baf4649d586e4d37b8a376b7665a4b7928665cda38bb8fc7edb5a7369585f1fada1531375fc8eaccc44336d32c967613a28c501fe0754fac67ee3ff0f2ccbfb7e19bf684fe3275cd271e510e1d42e1ec1236cde02aad4c99e6e4bcdc65e700617e3ebdf8734b5240904d636aecaf3f81c5e5c8903ce430468725c8acb806cf556e0db92c1f459bc433b5ddecc059b9403e86484d97628f84994a1fc06a6971506a9241519abd8d3984fa2eec4b674251ce64ca4b4736039056d7b6707b3ba4fd2c279b46e50878f6e01d189ff1a59c226c120a998af8a9c08ac3bc4a2d5e5d8d9f5c74d8f29e59a14d6235167044de9e03f4a1030b8b32961444999a3063877413a842e529c004001610520679bf8fd093e97b9cba32b06def71aa87b834d784716c18dec4b6b56528e7dd9a25f6844094b5e327e50d23538e17351b6058392c4c0297d0ecb246e66b49d210dd4efb0a070972417b426f7ac715469a1f1604c1dffdd3a75c851a2253dfa8c5a91ce6ae83fff87a7ca7f7f34dff0d5a34a9e30a872e77f62d340f7318b6dd8ae93f340318e4e9996e9e3526b0de70ecfe51222a3e82d7eb97b471fd06a7ff8588cd54a6be05e8b1756b4b6dc0fbee392d2ba90d3a1a6239a4492166f42a515f45895a63250907d75ab1ee091f79c9a8f51fca8b4ea59b50e797d034ac33b666e0771e50c0d23b05d2c1d3aef99ed05b3b7b2cdc9a7b65618b3cc1e5179b8332945c124b4addac4fb3e7cfb23e503a1b39713c4fa250a8697ba1014e38fde0a65d27ed9eb2b3a62748946615218da78a99771f77d404fcfb84ade68c72a13ef63533112368c2aca3b990601c3da1d87ca58b2986794ae4732e3d84fb0a84f5c8b0871eef132250f07d2d1fdc4513b14eedafff78acf5395b4abef05a1ff02cd35c82d958c2222e15666c1b7358a286e6f6951a898f314a1eb4a7485ebe5affbde7b1fab09a243ec73d2819a806951223393eb699b7df3096c01737ffd6f07fa9039a788a1ac5e9751e8039e6421914e1552967804dc5b541c18d2c26f487905ef7e2078c29a6e830b9e7a513c6043623a5743fec4c83d74fdfaa66c0c7ddab76bfe8e9d7b7ebcd0842cdc2653a5e93a3101d57a8cc81ec4f73add1091403e300c279579c9ee47bf1c5ed992a9152464365eb6e67486e1159d8d2010efbb2c0991ea08a245fdd712f09cfded4e23c6db5a10fbc10594b506e13c7fcadab90ffa9fc06fafaf3ae6ce073720926e6ed3c1ef3b8f4ae434180596a32ded08377cdafda8c32a6a6a6beeab416cd1b133e5ec517b6cc3bbd228c14c093514fa8f276285135ba96e5a8fd6034c9fb24fa4e5f1b75cb084c2f3919df703da465e93ef9e09f95db7456c39ee202951c7a7d3eeaa890c2f174bde838cb52dcbaf4e1e2539776f3123749b046dc28607e14dd272b8876085f23212e251afea57841bf7122348078615c8a53cf8185147836d93d38f3bb0ae4862580b35d86a5c13feeab427fefaf92b2e3d2b9f11001d455ed5be260c58e491059b081328bf27cf9430ac709fea5bd8aab3ce1ec31832ce64d20aff60cc0d0ffb07ad2a1eb4edcaab5689566cc5c08984d10a6f765c46f20a43a24cd3bff4962b6e411f92893f4fe646904be12867ff50b2e7b76ba3f781ceb027ba92e1e37fbee393ee633251a22cb7dde953a517af34b2b633750565b08a844e95f5db46fef451aa26261ec24900ceb66c0e400f6a2ffcd3fd832dbb12d17ef73dc1db27df5830fc236c79ed4a44f8135b377a9dd868d3296144723f0943532d1db930f140557675228c0ed2034435518438d1fa301da925e606aa5398f54b2948e7fc5d7249f2f81be20167cebfe82790732dee0418fd42adb3619bd355a7da6ab9d61cefae6269ae2b90749bee5ff5acae67d83843e9da24d52d7d087b2b0ee8ca44625cc956c609df3ec8f0e5da29ca0afa167d8a72665d0e437891398233c670cde239aaab3d2b6cf295137afbcbf050790c5627b9a5fc02009d39b3c5a836d654d79e778a03759cc364a660c242f3bfff7b989341b7104ca14bd301c6599ecbb59fe50b44fc8fa1e2fda4626e81b33082bf201b7711db2baecd2b9e8a62fd4999b559d0f9c02045c37ad74707674b546ce713a312b356ff7780dbc0613f7b5540940e25b739d6580c90b6c97a898e1abf1dfe575e866e3769fec450cd8c73372fb5b94ea606355972ebaa493cf2b30b7f2a362f7df6fa0ee5e9fa3ffcc082c176519dcb819d09da450b3eb77c293dcd413b9432872cb4897ebedba72304cbb37718e5a2135266ddd08508ab8bd18d784154c1c51d0cd9b80bd1f9fd290d001361fa38ede1c678d56ac17624af64cd398fc6b3e16c4156f812d10e1e18e16c27485b808e885473a810c1acdb47c1b0f160e710ce1d187b916d18932b5213d81b1c8809f8c5868b929c0308804847850b2580a5c19815ca0bdc40b434c498343f1e680c835b3f0ce09265a310577c12604cb372984d9ab3b55a5b42cf8576928a8b39cf40e189a6d503c575162dede7c33158fbdf7864178bd7f976d82fa6935efe97e6c2a823ae67697caffb8149607db45cf792a36f76bb13cc070afa8235d089f546b2c02eaec8a0f131b36aead8592265e761242593193dce2329236ed52a17745c5d1cc1c6883d18ae9ee834c1dfdd7ffbe560989ee3b9227db4f16866fa0db72d60c652e9ce1348a3965c496b6089b4e1a9e2cc366fd4cf78864e1cb97d41582f8607796b215c60f7a519a3318f1949ed894567b85d8dc2a3bea5f1999170565e974ca802f4a7e197780757104831cea9a6a5f8289758083436b231123e370cd0e75db3c4a42d9c746e7e059d11e0507940c51e049f8bafaf7f8fa8221bd0b8cf01edb9e95f14af9fb740becd443336ebcc5424cf18ed97211393a0f417a94d83e4c78befa74999b1e8ce759b541958ed10a1f8a61dc4bb37b9edce3e26c73e7612fe4fc9d4c2043f3c21ead5b711154ca1d82e17c4555088ff6f2dcb500641a8fa5d2c28725d0dd03b2a6027595f8f73a4c2c6e69b841212d3c50575b432d8d58258d81be1a378dca3fd197734ea09381fbf14c024ce9de7ad1074d90240352f9045494fd67684fdbe0dbe10872e82ec9964d2c023dc99ff00aa853808a162c54906110b7ca21c32e6e25c0e36f1f35019913776785303227bdc849fd95d9a2a39fe5f3461d3e4f8b47cecf8218fea4d46f3c1e6df6cc9278ce1786765f5f3646da7ad9386862f8425f41f7c128684dd5f287e2c5aa02b701000cdcc12c6f764b8f2263303f4eafe87595ec329a1be800173760a8ee77fa36ca8b627826e97a041647e3e2e43e2070c64f54ec9660929edfa5c8930dfd30111bff642b763e1c2b23d2eabccb98233ed72291bfd7b748b1c83bf22d4e5a31f778f04dbfeae372dcbe9c2e3247fef06ad36209b6949745f86fbc66592bbd45895790fe4906f6d4f940d15a715dadb3161011c55d36dee5ac6de18294cf12183d968baf35c1a82e50dab9ed7d45a8588d6eceb66716d5a0612f976aac3912184cea0a22714bdda1f7d834fb5d662f28d6ecbf19885e56766dc4d865f5634a154286e336ce884002b37f8b0194e0fa169d48c11aec3acfc4274705d8544812ca74082423be6e3560638b2f594886da1568e3098b34a2c9c4989ebcbeba2dcaacc69bc50df9132a8dbaaf815861f518d610669b571ab02ecf5a667468c53412304326fb77f2729dbc1c0b4da1f76ffcc1747e9918fc8c196dcd65a7d3d6b8211ef5ee6cf38a821b1a4f0b09e57084fcde608052771e096564c7194f5507dcc4224ca7a2b640e8e31b8de543411d6d2550d324cc098287daf22a0ecee4cf22972958c0ddb3c8c9053a75ad54e6f8492061061e923cca8c3b9f6f3598fbbda9c3a5df1402a85cc8f673a56e946529fb12978172d5535947796ab4bceda344a02b53ae58a3fc53016725f7d20293420f55b82f66585f786e724c4084a65ac353575644d7836624d191012666d897c99cad702673c7239e428d09ac010f4343d6a6bc286e3679a142dcb98625f7c020b7cc57d199f36bbf939c48deb165488d13ab62458867222cd527827b6aa005c0ec765b43cd5f8c940994552a66a46c6ae999f65f9367eeb675081a441bbf98a1e4bd9bf247e92f8e5364862246066f5ed9795fda01e70f6d27bfbabd4dab4a90171c85ebadd1f3b9967ac11a62813bd8010e049058d7ff388494e8bc21b3282519b9cb4788dad55628bd6dd5c566526753d6a3297a67834c4fbda4b3cd11fb4681b50621de425f63633eb07fc8d3ebedca2a7d2405df4b94c5e3a5eadea2b09fe338048e1a416ff86da54b7a53fff26d258794197de2e3ba931655bd42667345236dd3aedd270c203e8434e0d0e8bb01d7c927bb793bf49e99dd4f70d2beb2f8b31e61a18639c4c8093c9e9cd9a6cc045ae5f22f485ece9d0ed4bc428715081c9f3291676af8bb76e2bd65c442b74275e559ec224bd9869a27e8ac3bcb9ac896016218875b75f0115a968da7e7f90057ffbd4c53d1ffb8c158af2d50269d3058e02d0720bee3ad28531cf05774685f6d6629ca5e4bba598e9366e6b8fe2c2bcd8a46f8a44584a204a09b2912623d4a1a2c6845739edc93b00e13645a5fcc57e720e4531caa33bae95642cd1f812133ccf19190915093b2f7b7e5eea329817f14e580b5ef98cc5f4263da7948bbb944b4ba0d607d66dd6279a8bc28380a08b634498c1bc0ac78a9fd9eda5198f1b8b8a0b2cd6790415a38d0b8a04f7bf881d1b90451538198dffc9c0cdbd0fa21ad4f2bcea4a048de8014504dbed88491ffc57172dd9102f4dd9104dbd09bb344093aad131fc1c91f68a5a90fd0d97b0f9505ad5f83665c218e1b7eb9e1f5033235e6c791e648077c31a7b0e5daf52429888ba05b0932808a786c04592666f7aa149b776686ada3beb089f22092ee6b013c879c258e2e6444bdf652c7dc39dc391d20efaee00b8735ec94e1206cd4804ddfb83ed3edb73bbffef8647c7ad5a4f8682580add4815b181b02842d4507766e00c355a6a1b61144f83007358fdbbcb6e0639c5e8060543428c1a7c6fed28eb1683c1d88655dcf5b0d9d20df0ea569ed7373aa5050c28414b4506ca019c5789845e96d0a3d037014564e271f04ad78e7964cc2808b678cbf3cf7bb3dc87fcb9b09d4b30f1698aa6f383207d217bcc7582257849f2cf25efb2fe99040ca7867a183f80fa55d530b03a1c7709262f3fb26fd2f80341928aa0101da1cf85386d43ffa91790682449569b3487f8e617da1220625f26e9062f75c79fa8c489d5e20e6abd1b4b09c3f1255292232fbf1397dd59093ae34197bac2fc195d723909b4690ede8bb7266ca064d6c68ed2f0737c453f3eacd71e31d76b8cd83754feebb99a8e10cdccd58edb3e36bde025b16c80ed2aafa846606852c3f12fa790f6192c10895bcdd100c91728b993f2a5ff25f40ea023df6e564f830d4073f82aed82e6ac60bbaaab68a54fb42021a035cfeaa2d884ed452b9cc8f8167f3b6c99d25ac6bab7e826cdc930efd85aca483f7bf078b290c04c85ae34fff885f1c7407119214d463a132fcd461e6ff1689d772b22b2d187b2cd6dfaee171088a7adbab78791734058230990847a384732f92cc1f02aead1ece44417bf23bb2b83b9483fab5b2fb626d215cef4cc1dad7ad4dc8d6a11d0f84e48e28eec0f5886d79740ee3807813439a1d49dce7f1f1c7cec0330fe68106da62d64a9db298ad77f7420bff147e39e6a7f991a93a6d3dad55f04e55b1389f524873d87a4913b97bcefa902b31440ca04e15d8339f8233d8751926e3c51ee3e433fcf37d4d891206b93dfdf6bf49ce4a3dcaa531efdcf648095d057b6e6315d84bb8b615feff39dc5544cc4c972ff1d0494d1759ce2bf22026795468116b5c95020a7088a5a9d2229530f464f9046e5a6adfa5d312c083324f6503f9900ca1cb42a676082a9d668bada5d83027a02db6d7d7767656021aaddda6adebaca84bc8bf30eee6014b6934b324aaf30f171ff2233a7f4e15a4488f53bdf5f0e8182e166241f93bb62339550655fbfc67037444b186d3d8f3270f5ec99c63a3ca5312c1c06247a912967f39854e668ca0ffc16c4f82e157c596bde1c3e2d0850bcb4fc18759b8700afaa71f1c1bfda2b98d84f9075bd08f72aea0f505b94147d54f0ba530aa83cee013b444bcb324bf8c2df41bb94bca99cca1caafe5dbdf097ecbd33232cae6984d99af62b248d59e37c4f06487b0f3ea29ab887c2877128b57f89682bac423eddd190c0687382abdbd757c7e4da737b3e46b54a58ad717abfa0c2bc7838750af0cecc8297645172a8d649764f60f4f561325097313dc441a830e8cfaabb7a0e8eda9d3adaefa96f5574513e4fc190eebfae1e42cc02ff3766fecf0f7eb60379e2abe85b925166cad4d6b3e0725ea02f71bd0bb923431bd7bd7e7372406d585f3a8449eb89beae1a7037f48c94aec8f1cc92d4e596fb96b1b130fd7dfdb0082503b6c7a86800f9dd32141560f62f6213573dd7add10b9c4315b9304dcd7e3bd8709154698a917be6b6b046d63b2dcc83e7fbc8e0f49b7f8025bf898a663c039a9e5810c8ca423ea253451f54d0928087ada75d904fd8ecf7c0d7a4a87400d53bf34dee9c62dc97995165fdab910a80972a3ca61d0ff2e8d0b719fbf52da4421ff4401ea6ee8ef6e7a11fb872cc942b9114f3c424bed5ed5a415617324129dfba4fe8e50ca22b9b8cb3b0f988c7348628d02e3827e59779598fe8ea962585064b6735895d2a7c6d147b6d296e2035415a9577bd867edfd48e8bffdde5aebee0993f5cd9a3bb6b6095e1c1502aff28a93151100a42094bf4c6a46389729ee26d880ecb858645ffefed9830e8f85dc2c7b611c2d4454dad183845d57f3f829210edfe84acb2a7211f45b224980d7f1f37dd31390ae9416dfe9a14b8a38d5fdc044f3611b95d1f11d531b1c5272b2051e672e03bccf5134bfd4b4bfddb5a289bee2339b085df5b6d61a92edce6b6e2dba709b8046a4207aedaf404938c253eea613c7c541910906216d5da941113beda3d1f9b7288317f0858b6259d73057a50933b2c714df7c19944c7fa262f9cd469973d4b15c6b924a85f273bfe91329ac826dec4e97e821328614bb4db7d041dd1e7479b1531275a40bc86d10ea50297754669e23fc949b9b6582a74e4e8748454ccf0670e81f532d86cd85cf0c3047389a6698e7bacc44ed2fd84ba7875c76e00ddf5d0ed002e8235101a846c78850439b1f1d040a84f5293783578bd09b224fde7ded6af5c599bb9fe61987ee1390dadb27dbe29c7cee171fe65015b2d9a203682427dd1d9f663dca26358303c602564c34c263eb7bc4a32e0c7a4affaf3132c5d7f6c2d6414f098866cf0efaa59365c574d547db9b452f1cd4d08319982f5e058ac7edac46bff33058f884f679ea6c96cc18aa097036540a5e9483c0cacd496a3ed3f433df6bbd201f99a9d51d340c66f2ac3da8207e72780b801f8aadff5adcc45395b6d76822ebb510a5bd6ae3bc23b10698b0fce3615e79522afa18ac83bbcd0a32ffc82a45883c7a60c537f0590810c94f954688aa1ea94748844a878187be95936bec1d537474291152c2b0dc36f8c55ba324e06c6d33bcf3e9794b0e43521a61f2186a700a2647f4adb2a2aef593b438357d3e7283094612b0b6333eb525d53c12961e5205b23ac34a2ff3a03dc65245d14c1431c8b9baf546304b004c7f49c6d434003fb45bd597c97baf119af534add92ea8ed720a52f175a39a5e29fce998c05cdcfd1c286c5c24d8bc97c5e2e99c680bb7fe99b6da5541ff28cefcafcaaae383596f6844f7414d7a8ffeaf5d1b35d202c1198954bd877dbf01e4f435360be385a370d0108cc96fb6af5e67396690ae192cfb7ec5ff25cebe0199d5b380ef5e4e2518e6e4739eb7c45778d433ad35834cca27af4b90f60a365372251d4c7aa1762112cc9d06de5323c3a89af763ce4002ff16d02c95c7881e810da0e0f7c96e4ff2116a2ac986e19232bbdf62eba43b7dcb5eee16e89dde996bf88ef0660b660f6ab45ddd275b3fd165d17fe2a258d1bf2087f9b91d5370d1e71af34c55da08ed72189044ad0022387cc9847c006b053df4f49c013cb63bc1d7777c6edcdce1e110a14f8d340e5ae21d3611658626a9fc90873f403dc9ac1da9ccf7a193c263fb7dcde692aa835a288014dc71dfd0a10373e5e1f5e74b0b8abe3fca6b9813094a342a8b5ee6fbb04a4930d737b12d141cbe3fd79c466b367c9173981aef47e1759cc65ab7bf272e3d386321c87bfe6650b518e7c98534d1634b439f00922d1b6e2a6a286cf624b27f9b27aa4fb0ee465850991ee86c1ef4b88123b5dd74ac18e4add67613a69d4df5f147b0703c6d05d4d4799f9ad928d9540ef77876fe9a83ce6f30e6f5054cc77ca1896f428e8ee1724efe645c6f22d6c45057b7615987b1900b96a0277d53c4e9b3099bc089385321e8ebc9b8618001798bb01a6edc23d4bbf841e22971a72ab26571a45c6a04c951726ac11fb73442406818ff938d32af9e10c41e7255e9e577df059782a0f47b1b80e07c05eaa85068e11639a65efee5d33713197311bb4872a7dda3ccc5bcb2defc943ea71baef9713d618f6caaa138ba6809fb0f11f0917db8c35a49d99e63be1db338ec6065c4c5cf92062d163d507e70bcd24afe35a6c1f4809b3872d3e543e04d663cdea45c41d4ec575abe1ecfdbe6d6bb61df42ddda250a020d40df199583eb4a2bea02326fa7d2b5c323720ce9a9c6a9d5b9b329a1e6e3ec1ca9fa5c9a8f724099dcc8f42ebf05982ed1e61e58604d2cd337d5ea98d352f7703418beebaf340f265be4171d910ea353936919741c7218742f18a8709e061e70ab5891e04b29504de6b76ae1ca67ef794dfce54c9b571a06332c6abd607a7a653613a8d9931b40016a98a731fb058a68554e6a2bccd32684171a4f494019f7127b2405dbff8e087affde521b214bd3586e59292c7e92e6885b306fe0a51b770cf7ebe17e64f418a87a698e7683593c32ae7123f50b6481db2bf9cc5f579f74f1c399d0d066bd9278214af216b2fcfcd539f356b77d7aec8f651f17e739c821be70f765294733972b61205ff20f79c9300c85b96ff2eee274a8ecb6bbd626935ef0710fc32258694c7785ce29a45639738168413980c502606fcd1658062099cd5f112c8c0dc2db6ec4dda062cfd2c6c166d1be1f8d89474787c6abd56db11eccf3e54dc462684739542fb7a9332943469829d5307790f422269d2d5d30afe182dbf6e9c6f26a523dcb9a551550ee4ffc80f4fc71b2a9209dad81bb1bfb3f8e42a5f5cadfd9834420557a6df856c0dbf0576fd20925a3aa281e2ad17ead7152ed115d2d724c6526f633e8d638f62d7ba3cf92e8a6490e230e34d13e54ffc7c5db106fb021250b636c40cf4799bef26d6361d06921a08b1e9129663f25859880aad34fa054aa846932b2fd1263abea10157a5fa37142aa2a3982d7f0e775f96126084e57c2ee1d4d7b1227557a94bfcdf3a29047c62e3dc187ddcf59cf96e675ec2f875804e0c07e87dd26f84b457bdf0cd1bb905ce1b9fbaea1e0cb201982ed5b3b515b26ec8bb6b5b5673d087b7b496ae48c877749464d46eed21e609b42849db3f9eb7fd7cbffd71735151db0e4a664c331f98a6effd1fc40620f84d02262d9983a5830ea8a3e40ae69aed476f85fde2624749a3e7bec9fdade64532d3647a732118baa33f5e1b9972093fdfd41b1e61cce78b5b4b710eaf983fd00cc36e44bbc68c57f64857e5d9b6f8d316ad7a22a64153dab485e4374e465755a65021dec30132cec4091e01feb4fe370d531060bfa66b4fcc07db95bebcfe8e59e9572d77940dcfcc4dc00c9698e4e8e57b203b1e91a7764f5516a5519fe89cf40804a627e502a713f9c5917c9045a6dbd518196d55a5f6d53d7159869aadb018a42dcfdfa9c55dbeaddedd0ebe962bdd7348a41da93bff7c6a96f6472cf50cdf33d1eeed3e490b1ebcecc5fa6fbefb26d297762816afb0404c162537e915bd126c103f5ff94b4be428bc617b3164b19c8caa26f24e89e5c6cde333e63bac14d7176067ffe4038c75558fe7b37fa03c0551b61324125eae8e992f6c0a12172f0d280f9eaa3a2b395923af58e3e805abd594ba2296df8d24076e205bc9694b6992e93f1ab0af355658abf137a05aabd520ae2e30ece2cc052cfac09157c2f9be20173c381226826f71f2a89a676e7e851b6a025904a627479c335b078a9ebb5475a396d76831d88db4f574d9fddd247d952ea4ced2f366611be025bd97c653d2450bdbf50f74b524a39976b76f102f785712b90b6ab099d7d7a01bcdf41ce4e7e08ff48f6cd15f3e72cb1d60c894cf95af7c2c09553b1c77370adfe0f52c732a60caa983d5e55fdd6323750d16e5467718eb9188b4c8ac585bcab88c4fe94e309091c6364613c3ef9a1adf69bc0d67bd0550e2f17388557f25a2516424e6f004580083cefd1975fdf1bf6be636da8ebd744f9627bccc9de60bb872f6285abeca9e947b09adb8b652dbd060486894cee3d80adf7970b8fe124bb9d46310f8c472d8ed5235203ab0df7d3b789748a7e7bcd569951db30f2da27120a70ddcb1641be507bb6cb47303dc2c44ed577cf3cd68803008d1cde0ecf78b709bedccc5ab47daa4eaf0fe273b3713499e80557cd6a24344072aa5f250942df7d5893d0e9e934e95d310ca13a37d03ce632ffd5545a6816dafdbb5efaf0bc98a7fad3941b29d0d38dea5bd1c024cb4fb9a8efc4540c10234943b503b20fd24599090b3318e31c4b760a824eeda509df8a4dc56cb0203a317083e971e158ac25d0fec0f4727a7b1d571c429bd5942ba9aa17bd19d75100c4f2d01a8114e0c819522d43b8b213d2a832138bae05d612d62cdcb9a034cc10ce99bc5e6dcd472b64b3596ebb4d1a8ef94c599cf5d0ea9ee2443e6788dc3d503c0a485de734ad25d4535bc3fb425117ad09be20e1624c14d8f6b9cc91dd0d832e10e8b386b0c5b7c73599ee6a61d29b0055c597730500b162cba03c45815673ac1c7f392915524e3e4441544b3cd34d6051cbd36ea9abfee6bc3a373584a8bcbc32850cad1acc3af22d63551c89a95666a0e26437b43e95e53120eeb76639c430848a23130fb160811bf7498d6695dcb986991a3e898b80de2c661e80ffe02e53d9b034a70855e9ee7ff0057e280abeae2992d372837f892020fb3c27871f24296373e774b430708b0f5060ec37d880f414f6635106365ea5e67e03da6408bbe142295b16d493406a28bb82d3c2139dd335c6be91575a120cdb694cecf0868b20a9ab190b43037b78fd9585ca8f9ae18c5017e5c97c842743edea9e9c181e80e081aecd377d8a693d116d34680b20abaf07ab04dcc5e99bfe7bd6fa91249f35bd0ed35e03b185855def3ac433c02b4347c8c0a7bc390a4bc4172f6f46608a9c755748e7c42dbd921418591d856807332795f487564bc840637d5654ad5b48ce4a745c3e6ab2849fb0115f53f42cb57b13c79b1199a42393fa94c53c3649d1a73610defc306b9d907388c617889a2ad83ea8def6ed1670d4160a5d3e751462dd56201c1017639a332c2a2706b6aa0f34f454a92c134a2408847c10c8e931b5452322ed78c59bf36baeaffdbddf78b1e6f767ef8e788fafa212c07acf1ab54695e3802f9acce0d134c6a1a377e82ee8f400c2d7610f04d86d933f8ac4df2d307b105316e034ab02da2d497bebd9fc4b053ca45692648fa68296cebf989f04f63fc4d96e8bbf628f6e39fdf94802764f78a3cae8047e10bf55b8c281e5ab108a81e868bd5a182d093948a0c5efe4da0f107c87ade9dd04eca5db9c1873f5e918b44603397018e6f867de26d3a6ff91b43a3d269f63f1b58cf87d9c8d0964da144eb8c8c5697aded3ae2546a7d3055033379520076a132f111ec2696b60ef9cb0c7b1144bf171e44b48b187a3ccf40d854cc1d9c075c2aa27feff888edeef1f56d3bd97fa5f97cb89a3d28f569d0fe42276a63f73bfadf02fad14951acaa74babc4ce8c87164d2639f4be151dca3ac3123f39aa668f8cec3d7081c1fb490571a0c152d02bf831b8331a809e3a7484178176be27764ac9b98b6eb803621eea49609f9343588e973cca0188c0224f9c3b3551b56d54c33fc1c1e4f5111a4ad6035ff80111e66ca0b32ef90256670fcc1a61a4790a871521f145f4dd47d1c95bf414ce510faa88f58f15eb30242cf5e3786c181c33077fad7e6a68a41ca6cd5cbeb232f9feca90fdef97fa96502031be12816a2329bd4b1a4e242354179a5b73aee422d3c06cd1389df61dc37ed37ac736b0cc36a656f6f37d285c51ccf1dee475833eb175072157e8f369022c9d1fd6efd2c8c2c711909440738cafbf175788bdebda3ac8813bd554da959bfd81ce1e9a328ed12986c8bd0cd45b18257bb4c8256fd113bba3e2137e72999f0789e9e0b9195ebb1ebb743c609cb65811a36d0a9278cddafaf04a71d48c7aed1c66a043af109e1c90b8a9c7f057367cc72ac246ad649dd18056d6e5393633ca31041203fe4e6a0c214c4e093ca93329a20b843f45c67309752933de91d65df251c63f5d593ed1d3d520c1e39868a796f425594a8361607fdf274f04aecb2aa9eb0e8cf6b8f2ac3c815f53e6c0145321513d3f79d56de55abf365d1d6512ff297d456f0b0d0ecde507098beaf1dabae63e3ddb4b8aea221930bd409880a18d7a229aebc5406c9c520e118ea0fbef8a5016e9a139b9de737a99a846c0c9585b7d6d319a2024fa7e5375ace25d090cfa158e594646572fedc3eb93fd276696674920e7e439736bf7030201a3c47024153fcf73e9756a54a91269fdf4ab65cca8451d473f296d86fd48f0e27d7c2d1f535b3c97a4c7fcce6fa55ed2e71075463be2156e82a1c6cfa1e5603cc08335ccbb2b31b1c1867fa0d7565a12f142458a68318feb53aee5d02826d74bc2c4852b0147e54c05f84d78550a1456d803fade6bf00dc71a07cc88965a35665445c6c62ebcc9a1790cccc0f82db15400082307d88f97dd01468555f5574f9e38fa85558a4039ee65276e15e0cf2462b19763b84a1d1faaf1e5c27109b989bb19bce02456030194217788b915fca5bc7ec50a8044b9135379be59e7f74ff05fab42299b38a46ba48c69d144a43414c563bc6b658d817109eab4bc5092a340a8a18075df946f8e8143e3b55bbf028866a34460109b0e4261e6fbfef39c6435196f9b8919a5ffcbaecc3643e069c076a475454aa31691729c1d2d7f26e58c30ee3f4804a67fa4c914b999a14b9f10dbf6438f6c291b7ecab15fd4d5c10f7fdcf939f7461fabaf89f9df6c9ac0fcd066274c3c2bfdb8ea67611975828bf7e30ac5cf229a1e49d7170a235c73adb65462305f06fa833cfdedea5a96f459df2fd56584a03d9d7a8cef75521f08577554959b514c0673b3df1173003549a9d15a932a154c563cbc2fd2fe6569f01c3a3d3c813eb2195abe25ac9c9573e37cca9fd66589d8d64ab4da442f7f69bd82d3c373c5dc61e2624499bbcb378b9a7835d3aaaf7208b4b17ba46c6145f305326f2ffcff84559036766eb2b5a28dce8468441fa7d38117c9c7bd4b487c5d2d435bce2413d0fd14fa2882c1f1033e2bde02fb71c6865945d956601eeaea05676aaf2e6d8a6fa47058a93224070273666920fc87cb73abb324d3320e1c065eb80680ed96a426ffde86695ca2495793881a0955b60a1e672e29b8a779c526ab2921e1a1f52d7eb5292e04460728155a94e2dbc28947a9d82bd32b9958d25a941a3c4b71bdb5a23fe5cc6104e3067a69a1a2d28224df4fcf0b8c9396cefbb573f017dfd85866c5b0361f1ba27253b11d4ab8812e605c33694053d2b23f6833e404c44dafe0c41a802f365e1b48e98aa421f1c782f905a4a983d1be3ad856f1b7d7a8e07a74f6b4207f3917531345e76984fd29de1eb63829cb0aaa29292277763cfd0ff6d2aea9d72fc413495efbd04a8ae778be83a4ae03072ff0ea3044ad2d9bef41c39957bef08a5fd215bceae017fa750d7efc3c758e6d3adf2b17a7396cd7288b19d0fa4074341f5743bfea2982e1abf91624c13406cb123c3f48f49f5fefeca8404c4571018c869c562a01605e3c329aedf3ac3c3cb0a71f8849c4908cbc40441104417f65aa1b1258b43ca2396397eb2e064f23a4c52041497582584aa4da50b93e7bd0717bde972a6f9ad385ef8acb95094819ba624c189e9df1bd42ca95130e25d456caa8ec3c3e1f271fb31c804fd78d56ba8839140a07ea2532a5625cf5c00f83fa46d6fa46b69d62b8e21d8fb4c6bafaf042060e09638337aadd083ba2dbdbaac6bb30da39a170abf0b20e4d02822bd8d629efc63b77d206c66a4d2fd57426992b35cb08a6c6fbc79192e636f7fe35ed5fe28d067bc5de5469b31ed5f9dd83ef01a9bbcf19da64068223fec577e325650d59d9eacad956b3f03a4b87428826f01c0d43a227514919180dc1ee4442a499da6d83872d27a489f43e4439d1afb76e0662dfcd9444949adba632f7f7c0d5a8ef433fcf988ed9937e08df9241f348041bbc0eb929b4d77655e5f490849649a08d6d330e79caa04e7fd5e7c1f98df9c0120dd0eec9575acd87112c4489797ff771ee624b193d4eda26ef81142605ccdd3f08e608dcecc1eb8f8c8da1b304260e5973e49e6d7bda31838632b32d5256f056ca845904e8f32f4e209d8fb7bf8736ae5369452a1d042d0f0872886d2b03ca66858a9a42eedc944f3dc04c9a65ccc2a2b6ed2a723d0bc5c1997665d47872c57eb81af8684fa4d0e8b22102a936108d6feb6270f3f2bd7f5a83faa84e9c1440114c3247db23eb0b0c1ba031fed8122eb4bf9b04e7d3e89fdd18d7662fbe7c2c4c4386a84e59ab3bd51f553072351c44f544c5cdd4a30aa78db0d9115957641e710b54d1266e302978f3a1b7f376835ad21deb639c25a059e83fd67023d806718598c25335ec73edbbbb228883b0f07c4e25b40844e5d03d2f4600817c78093ef52a0bddebf24e6e2e7ff88931e3db1f2f65640923a926b7c755bd7c10aed09a566247cc2d5a0b18ea0b1bd169dd504da91b5fa2787a499ce58a6baaf0fdea377bceb53881fb83c72fcc72d72f0c21556c57ffb357ca7345d1f1c266dc92229e3e1818464dbc06f97c1f561d3bf63fdfff56328d3a1098d5b6491444a794b9d7545bfe50a4d42b8f546fdeeaef22f1479b8fc7307a0d405d79c9a154b66064f8892852a4f859b1bc7a52f51f8ab981b3ac1c46803f611ecf61948c167f666c819a9492eab2cafe52196d0d39da296628a7c79d675ec18205e846a3b9c8186f02735981625108025f70beecd9e2ae98205f1e28a0c26dbd514b07f2ef152813bd10868671d4b272e2e8ac468a9a70371005ab45e0224fdba4db98a94ca90091f545a417d79a70314d1e82255fcf116fba350d574e9adf2d617bf8ec81e59b4b1232536b3c78606f596f1eef7b9387da9d0dfc8316828bab4316350580ef600a09b09a54a9924b0045cd49d6efc66c2adba4f4fdd475ac637624d6d15bccdfa9a03377ac3e979bb3a0270dc39f56f355c688e671cbb9e3e443744dca569cc5a47f475f952ee97da2be07076f38197966c83ae72e2eff94f20f23d01624d59c323412688a03294afea77866e449fe73f9a09e9c1ef5c90a4fd43f15f42b1e717f8d774e198b57e83ae7acfb62700b81745047e0ecf26cb2af3fe560a890012b782ff701cd600f0def35113a1d12de991199b0260672cea08e45e8665c06db302770d34dfff07ee44b39d82c781c490c59e6116239027ee7dd5abd5ee560a31f9014a15b4208843e2dd9eefd687d869e0efc2f1f2db0141cbe6772411b37d74f427295f8b5c9add29f99d9b6d31ae93eb66ea6f860c7b12782fa16e56e0c4d331704af42b55b90271f58eaf612a11c782055d41087ad17e08d4e49c9b38546c1ac9b832ba7670f7fe59c4f485f81dfe4319360ecf907d5851eb4b9a7117865f7148d73f2aa2f27e4462504f0a4613f8ab4d56349d14726dc0945be8861292f9b3ed8c4cca32cd81b6192d59763678712dd6f6af6dda923b9c7c5ebce62b0bc087887828a8db1f1bb088fda0c51b256a4097780640efcea3361cc07a9482271c23339a5086080d3d8c0568cdd3d66c2c8c0dcbc3d9c753fd86105fc9ea6ed6ae778bbcd15dfaa44eef52fa3ef2225ac4e6f5a083f5ad2dd6f9330f3d7c268318c62a30b39121013381c0cb769b31093536d2ab23584503000d7eb0e4664c0e5157ad37f676742331f891b66146434f5cfe1550968464460008005c8e861e11aa88bb07da2cd462d311f23be74935ca1b9a0e226aac0081953ed04611ddd7abebe43b7186c131ca92fe1012efa71c83bbc341d718583cd485b3cd8d388cfb057879dd483ad6c972ab45824816a500ec5fa4c915ac99c34e2454a5d09e40dab472fdc59757a57439e42abd49037aecd44d551f47b13d84941c82b3308851afb71a9e3e94316e6205e9cb670467ad3b404169a48a12eaa127dccf3ca972cdbf9bdc0caa8cdf2a8de5a7f0f25e1226cc0d1259dbe95769c27a36cc58c122315c9631c4a075897051405e0ef1fc325cd3c0965af8f21d3e4d715b5a217af62f0b35d30b8d343ab64ae5ea7cc96223ca1e6dee7541d0b6f3bd53a34c061d39c746b304c51058cb3de6dbe751859b70c7b4146186a620153f6a1668cb32806d7920532fa6d5e455f3d7ca17ba71adc4625a763db65d90db920fcd1a5f320ccba1649923ca3d7ffd457fd255ddbea685644e5e1dd8205a9e6d1c4f6e021457a35b47dab6ab930b540b5574235aa453b30b6643465d57a97135bbaf133d0016df9f6a5b023e4a8e130610c3c43b9a4a11e51bc4c37519720d3e8633f1d148b7094da413c3d148b90ef7fdc3531a8c74f661deedfa075e3cd0f9f19a528f6aa814132a0ea06eeb01bf1a9b166014c38d674eafb78a5565178a0d63285b3593189775f813276353fb13c75189b211566d344d946711aaaa7c8f95dc240cef330abde99c908b7d4787f51c537118358f8204fcf5113ea5a69670293e9f0b8d22af5e6101deb4f7ace18f2d8ea6a1c857e0aece31e7a83178c619fd1bc2e4cabafcd64ae3cc9a911fb88ee8bb7ce78e73044c04e37cc8d71f27a7d9bbec6b7c6c0395025a75ad151ec0f93156cb7c1dd43930b631557859dfaedfe7a8bb83a6f3aaa5cf6b661f6318ac8d5ae41d61ff735a7741acafb763aecbfaa4f7429ef0a5d19b4a6f63ac8a8e089162f9af194d7a1e77a92738044272419cbe7973acbbb86b5669747efd6e70c318973685d656497e7e5b947fcf9a1387766d7690afcea96c8628edc968fbda41991799cb51657dd1310531d0b5403b0b4fc124335195c1ed2af667f42d855a20b9d987c1aaaeabfee3b9e037f5fa4b48db4ac2420b9b4ccc21ffdfb5f27c64be964efa07e440c7724c8ea0edbba2010e69faac673ab6786b11fecedbe6adb92e97f8c21feacc96a3ead2203d28a3fc5fceab4bf96592263f6c28e8dece123718241d978e0b61755b4f6fcb54b93eee2a663d89ce7dd665af2885562bc6cae8e3a6415904c9b2abba60f705f53d99a4ec0b99046a9f6ecfa360c84c37c7ff3273f1130e5582fec0b6e957fa33eb55e156cf46af821f86f60547967ab39ac570ebb5c2c23b8e2e965c0b00059b8d91ce1809846f474438a1fbef0062fb4fe8186a122b32eb8dff98ccfceb7932e4c8a8603595ef00d933d4a6197e1fd03985622158470104ea6621aa33f6d35cc4fdd7be17174916cc82a2dac7507a646f603daf3137d0e5f2465c68c7acc2de33e93f6cdbf053f19f97aeecf19c2a69f675d76f2019478883b087a0d3e546ee4293f1a889caad674b193a234cb4ae9a5318d7e5773fac8374abd8cf4c53589a81318f3915a9a8633af5f90c9a75cf87467b3261cbf7fcecdb8f017de223c97b7a91ca382176d36ae7588b5a12f1f9c9aa1a13781562f3574ed00cdab2f7a52617882bebfc7bd064778662ff1f6693957a9f6bcc82e195384ef55bb5be67d4a76abc63cc360d905a6e8d13d6a8f36107395ce16297ea2db4eb72821f5d4192f6795131e9394250df34220a461021cbc78df923509767fba1a1ad6c848e1ca2480ea2c65d984e371e1ad0f733705daa559a32d539f785a7a5b298a56e143284a9287f76b01cf1782496143f2366abaf7f92e277b4a84bf500849bc1528af81cac63806ddcda673ae419c6a8ac894f992883e343a55142fd715b88f66a6451912bd4862568f6e07954a043cda3b6b9998b4e5e42930c69f5b7f3905d4aff17decc63d317d064a9765487142e5efb65ef04ca15396756746bcb0d0ac107371049b552da3a4b7c598e5c3ed64ebf2ebfb5dcc23bd1b15849bb7322806b1538c4ad797d742edcd3838a357893d63b4ac7362035c704e62968ec011c530295d3da592bdbe7d6212f6d29b84e0d243d71f56d8251cb868ea259b728c92ff2a45cbc12a7416203454b88e95a0b3f7513857f2842d639e0e5b343fd2ffba5d6b0400ec3ba4f6107dda2611c05ee4e4833b5971bc5a6d7f655f3663e87f04fdff3f215749cfdac35f90dda728625d3e651957b4bc236ca796637360723ea31b0ec3785457b76c0987feb302f092460479e541a9facf86e05a0bd5dceadf89c3d2b03459439d969c81305a3712256653fa51c1bae1a4b9a59c23b2900b3d4a656e6b63b08a674e295b2791e51aafdd6ab66b3c69a3d98e02dce34d4c009781a446d44116971f8bf941c20156c7895a05f22461f7cb4e7aae50969c1547ecb5f05619ed8073b616814d1181c387c4716df492ab04a2a88b59b2b5c66db1ff98f6c1867a1262bd4c2cef0cc850a5ada7c0cec80be2f8a952d09bfb8932674db6567f6e0be7f4c07521968637a0f693d973d15331a481884968d6d6fe62298f33d683d4d498d6de3ac9d4a054c57806276b887e767187d1e305f5f516d66bc3cc87906495f27aedd17b07eeefd824f66c1e51eb21edba8cde1d89fd60188f02ff228a920447f798f1cc5f4ff624200288488b3370dd47752f9d307f54ebc2565eca9313bea0ee1aab4f8f586464e0e8b7eab7019b479baf1042846b055c93144ab8f1da387fd5c16c1a31d2ceb19dd5db6c6395706e3acc93f7b646b4dfe24782b8598a21b1cf566ae145293c0491bc3f2ec477993e9c7e40710b257a390621ca89219074bc9d646c95dc7b745e843780eca8aa8dba745e41079fa66d822a2f8669ead0a7df23b536e8073f7969d1623f79c2773f9b67e5c0ab3efaca5a64f5c1aef824c19cf500da091b723212e31023084cdb3dc87f3af3af3526723bcaecbd330145b09719883fade96ec2ef920ca991b2987a3dca5855103c0ad56f7f5ab79f83905e30e09c9ba2d293658bb587341766b7971ae8bd99c6cb403460b185696641c85e90e528087a36c148221b0ec9fa6b082980063116aef893b52815bdf838b058e8d64d057050baf98abdd0df0d4debd9f2c599ac09fe3484dfb53a10aa991a651c474ba3fb61031f7bfcd251a0e6497d454bb2b14dc18c04452c739173e120a808744c7902bad1c735ff586cbaf794ddbafa9604086128e97655845650c3a7feb3246b27094b964836917911d99590febda1caf8c8c50b8da87e035168c1951b530bce2fd84f4085bbb9de93c3c601a823a753b3d5d32c075810314d01ebf441905a4da740ad3e58e767f79121bf9953f46e14b1e0948c61a14aa4e075dd65177b4b033ad2059137a1bcb619f8e9409ba1105b0cc4ae5de8a37c5e1ffd2f5499ff194a0a7a664a2d7116f798f2f00967816e9ee082dd335ce6387e6177aec9db4da9de5a2f0c17c0904a8b7a1aa5e0018d893fceee945bdf3da9b5cd82334eec7f9403e33ee1d3b61f584c29f6e0a3e5ac560b951ca29405f30ac2730ea411f0692816d1fcd308ed3073e3a4d7e91776057a0fc500c190e806f6655163a9a3cf39ecb7e5700d3615d2b53744ad7225308502a899b9771698bf6028c44b16a517e802b533f8de9c243eb31e8c13c8aebb604b74616ad390643284a2053fced98a995d905e8570f73bda7b770b7c0bf80c8f6cd3c701f9edfc387136fad189e8f78ff1240c6a8400ef46f64f03b5210cc3da85c1cab4c7e9c1410f1d5669dc50b2f5cb793b5da24be96693c84f56e06cedea805761ca58d5d0f0c5d5df15fb9f901320892a8cc8437e6540fc772978c01573c278527e3c50b1cd4c2990979a690bb304549a2cc45d0432bcb5b6a890a01fa9abfe498c1f1a309f51efd602d66ad929381268f299e19811e79dd8756324b89d8b3cbf014bd191b4ddb9c8eb84b6849b79c945f8a176ff63160fbc2e1152ac828a883c06bc9f9c1f139c2c1650b0f4e6a7125af7fbf0ea5d73c84734bd7bf74fdf5782be7118d2def2573a469d365cd78547ec20afc9bf6db0881a5ae8671dcc4fee589b92c86e204905ba5041f1e445581c8f8678ffce9a8aea2c6cfe46ce0e2842569917a1c193100c5d270804f5103fb0469bb8da1ccc4f02b514b0b99ab6d7751f6aa640308b61725bc9b9cce4f37e8abb615901e0626d454f24bd41d1cfc202d2a002f78ca2da4d35b41a68005aaf33ae15cf927e33fa76e4b090c03903e3fc42ab76e57e51629cf6b1fd2a58536085e5563fe0cef894057320453da9a3ac6913ce59c438d2a132bc41222981a0f0582178917d535b38f06336d2b6ee09aed7033c0c1ada6e56360751a757f12c546ce951f45d66fbe37c7da3e80665884e0164e8afc075e589710958cd32b504e55b158e1a809f8149537282e998cf56eb36b3e86aee7cad567772a9980ae6226f6e4ccf94567ec8947814c086d76982b8059054909bdf425ab089e9c26815161b0b5ce49637b563aba16e08fa27d4219f5da2247e7af62b8dc7a34d62c36f14c341a9d66ad7ed89420bc6448b9044264df94e8bdde79aa214ce7e2353ca997fcd496180024d701624c28123f2eef876fa286ebd56b467c3b0aff47eb8e14ae265224c1cd281e3a9c167fd21b4b4d3ba57e7c34d0df3715cd854340cc2cb4e05409953f3115b97ee23a82cb87007baf2db1459ae5f25ee4fa85ee3c1098fba631a8e1a7bf8e124b833503db47de342bf897133498123b394488362b909d5478694ed67109dde80a2ab91753881b6951faa009b77abaa085713a753ead7f71d7cb2469d4d891ec14967708761164dcfbab94be08b08175ba688560599d7366fbb1ee6b4c7624c89e0ef1b38ff200d8249bc49597eebf154663a27eaf1a968af299b7680802977b8dd6c6be865bb8ac2d519be2d676f0a9b860c0b02b1a36740dd186557f4b8e452b3ed183fe6ad987f2c159d5aaa5bfd58df3884a160bc1c31bffca36dfc59c9116f1e71ee8ab4d58ca17641652da49b03b2269b6f697f5f7e057da334db8dfe0f7b306671f20a08f081835a439b7bfc2e20e047eaf7f0e1323bcb48ca353e78d069bd6ca2b12ceb58fd64116b1cd0facb7388c6741aca60c00f5a1a7dee5dba89786004d96644073319f358f2a8c55e2e224d95e0f113fa1d126d2a8c75f757294475ae5a684f3760583c6fb4ecf5d574d9c360152d3886ade9a794e9b49fa1d22d1f7dac7d022fb40e96c146d52423b095ad71392a884bc634198366a4cc843f282ec77d205a5e2d18f1cd9c558b6ecda45f0147793e77d6dcd9a4c5c4b96bb3f098d7593db004d63d0462ca846199ddbec4d60a22f26a816841081a304f4aa892f7fca61557315b6488fd3731a3cb1c1c45dbd4511240b3f04cce698d8b0a0cae8b14926df29e593a6f836e7f0c40cf50966be1d07737873cb40fd9aa51de34362949e0cb86f93f79956b13233531799df302ffbc8eb17c8902c1de2734e2127ca34d4d40f0d5847c5f93da58557aa886aa83c10435cf3d3d141a674b5d6b076c32b5ad5bdf46f8e9d88b55fbe34f6b15bd6a6d96461626bcec13c0e960ec5fa24cf73891ac286fa064e98697253ef44035e5f006cbd184e9d4ce42cfbf2bed3fff47e1320ed179668049f1b1578daafa7175cea02f6caf2560d7b52ffa03fbb388cc7ff6743168e47ff2bf80f6fbe92092711f3cf8aacb8c72b3d0f6ebe8d6c63a0aafd71192da0924ee7f05f97b5e84eb771b72b9f77393edf9097986828fdc49652c78a4a1e15423cc41a1e47c579581e2f478b250b337015783550d54af1f80e9fa2d6ab451b06207ae1fb63bf1e1baf730c59cfafc2c0ac4f0826b3f5f991098133875d259443e5302c306e9d7c954fe01f63e70888c47b8d577a6a1eb8755352a56ccc58265357065cc20adad4e61986b3975b1e27428c5cf9b3fd80ce5b809f71e38d3c236973019486a9d27cba892d4d0385befe01f74d5aba7381a5b5197d5fee3b6372dd8c608f4fe984e514c5722b698efec50b295584659902d3360f20b83338f4968aa1ee2adb9fd804dc048d1d6858522fa9db2db8ada483f2d81a6cc216690fbbd3d13bc744806497d4c93bd13a0ffb9fc8b6fd9d9bfe9038d52e8c55fd711bb0ba615693a14bace0a0532e143eb8afac000a8ee324cf082a0a13b8564e8afe15e4b062905eaa26fb053222a8144af7edb18b6a91a1ec5ae89ed69b5bd2b43da3935d2aca0178f584d1984a5eab8138621f4fd29cc4e75f31cc1d62b34548b08f4d20a856ce0c18e6585e5a74fab515e90f5fff8ba4c996e77265062c4ae63e7b4d71292753a5c959a94a2a06de10eb729c73435cead27b6722e25280f014523bc1aed069aec99460f46c456bbf69d779b3a5cdf787d4f97b721f17271958ff81b9958d0eea99d9b24cd5e0e243cf59620956d0ae3f8358f7725e7895dc9aaa5aa3ba65af18a4f86fba017f4d1f56f1729f3679bd18d235de32127c38fe56f7a7af989bd59643350a75ff78e7be8049a23aff000838bb1d0b7c59b037ae2a92d7ed9e0c1c3381b40eb9025a45ef38172f7f7aff59294c264429245b52901551afdfe92fcb184d1091adfa17e21735d0bc2d74d3cdb45c879f49073a3503ec9d558318683e0b7a17e71f8ca520d304baa474e8a64297bcf8397d9e09782d0829d48153abdd21436c249a7cfe7901a369ed84a6cd793a13e6a480884784ec9afcf9450c89a47957c1801a9f05929e5d8f5ba714b37b5d5ee91de06b0a73bf4122ce285b0bbbdeddb518696d5277553a2ea9ae4f3757cbf401dfb637dbc2c53bb8ba557e2ad8f422f2eae3c6484eef5bc67e50660bb105cfba5522f2b464267370d0ff5f1b66e29f753fe9e8e02f1056cfe96e0d09765bf31aeac3de75dc5f2cf15c57c8ace69813e41b4b80f4f6a2e2d297aa55b5c1431b406f4975058792e1a43b57bfc3a948c0e458dd1cfb9c1e8a9ad0d19a24b74a2741bd4efbc924d1ada1aebc0768374df25ef967d75559917d20d1a5441137e7f374701a6561c9d031b7a747c9dbd7f27005ebf73415a4482e647f2c08a21f1a7240072e40da28b18d80dfeaa2ef090f97c0a2fd8a3f47f5ea7ca7ce1d3b38c6781f338646add4bdbcfe7c51d51028b5327846e830add2de220f5ed4ee4eca885d8942f785505e387028360c12cf353b0c1cdb4f3428c0af1336dd0f51363d3e0443184e0f6b7512d5532dabbfd1db9ab8bdffdaaf26cd130cdd5ffd80770d75dd35fd8b55bc5466bf5193fcf9b25869b3bb7627a251bcc472ba0f5f7989ca123100bddf64de87b8be7e73699687a7b87c53c4f62a2305993197c4bbd8c400565fca952537081597387df8921b29077f243e22e6773d9c7ce546b9412460922928b84f442e4664083bd7dba5e824cd11c9fa52fac0b8c5dd2954430d0090c40d928c6a47e1c6a824167984023d16beaf5d320d10bb1980c62e043e54ab345c367e75e734e2f8e2ba7f3b9e46225ac5abf6d933343c906fb458960e2fe04aa6af3fb8afd3ad7c6c138c9d87f2a864d7c6fe9c76919a2c3806a978e1056be0711778ec0c93b26157f4b27cdc9f93da94b5fa491043fd9b45071280359a02f1ef4ae691fb85592b28a16f4bf7138f9c9e628504602e2271076ed88d119a2c4372aa7b7f1ef00106cb080ef4add7bfe1dba3f84d605a03d6480f75751341b696fc44ba1603c91e708d478987ce501bc0343eb470f67a3f1692865bab2301cd36e0f06691344ddeb9d09acfdc18fd76219dcc6ff0436a9188c1c21c08f201d6026cda6605c835899dd420dc6235fbfa1618b39bcc93ce7c96845ef1871b8b82b7bc503dada8dd7bf65f36ba32195f8a849f49fda583d63826c5c5f4b195557fe2297f5441c20b8873acbf7c0bc83028cc1b83ff25d27e61c08f5194cc4ca3e8a1bd4c293155b9f9feb15928c426fb78a7c5d18d27694cc8952eea151a2095fbf9392e3e94ef37f2b152d448d718d1c61c96752a5013adadffaf645a41ea29f7d0be49315591c54e693945d7a073df925077eaa5781b797fcc2cb1ea3451d3d76809312160ace329ba395c1560d44829b19cd8f07c8e26d419648f06e7543f6bb11fdd618e8a7cc478090e52de20e5d20f46467587e143665637b422e06f0f2d4dccd15e1c33404c3daccde04650e1efaa1de8a65ab0bae8a9b4fdb33f23d17224083ace749dfd3951292ebe5461f8701d00d5a00cb8fe54be81f00876c12f260b4cfe8a4408d55f2b772305d15c02835d33b74d8b0fdf12c96e5983caba60297baf5b92ae2b84677532fce2d6deb242d4f5b1e389aad39b91e0775a36bd814dcf87ee8982e16484c6c4e029c3ad286fd1422768b122d745240c0568c6f9e30af1e6486c181be436b22cd840531c397a612c0c5fa317d6ef84e9bb1be4027b71862af2d2fb4f46606e527237fc2cf405d73d0d3d4412bcd452be77f577a6f53254a24bb8dbf990579a521f003c34baab839c230b3149165f71d2c7d881dbad2a0385726ea8fa0c5d62f2aef3b3b75a7476c93a9622b26e67ef4eae2f16871cccd61c194d57aa0485f91098f6808929c6731649b3c1c4b14935c2e15343c9de531064d4a9c15add8801604a52015e427082b4eb4cfa33c8738d96b3ecfbccb0a5d4fc593149499f6470a4296e3fa863c85f32bb2d12fcdd930a61dcbf625f2ee8db2d1bc232b67b6877c59eb9f54db78ab62fbaabb09db81996aca28bbf103e38cf9a00cf3a5443fab7a5a52c9d349fda66d59ed3dc649684dbe1f820d3cd41586c4226f61b2a9023dfd73079381837db8f26456ebd79c996213ec1941bbaa9aa6232d99fdac076a050cc31ab88cf70880e3c123104a0e3d8e162a9031f60b2d790682de3ba03e59a88f83ecf850c964a6b9d5282482d3173963e65d95dead1f76580966f755f96f59d3d0152807dd8f0473a72df6662fab0d8f837371ecadf58082d7beb9617145f52355c05614ef64d0d633aeb2801fac385f8dcd3b3690d84a54d4dcd5c78aa932be2d20c7726675fa1386e7e4792fded6f4282865a286c4f9d18908ae531dce230ceb4901c450ddfd22bcd9e6b97a3943b490f01b2612bf5b3ca0a7f5484bd11d8b9dc2e378a6797be19317059f5da5e08f4fae7a95c58bc00206b323c23f3db0bad55e2fecc20f941d3240c21e608513db786a1ff2b117389e32ff54b275b5ea826f346a2eac11de8578b65aac574b1e53f3d508dea8df6f9f6908e0c1c688b3cbd6b1530ff1fb012c0b834660b94d25eb0ad39610a450ea6472b3a5fe29d96f43a17c211449fa22d4637e793cd2c63397c7341b26b363fbf32b9d6df8d9d6798443d6bee2cc11a2a771a1e7926e4558c46367e25090fb325eca18174920e7dcfa2b39b175ec615f5b569d3d16d8714393c9307f4db49b20ba6617681fdccbb212b96c44a838d202b0ccd5dd95791567c0b2c7c5dd10e3765988b1e44f5b4cf55a9065c4566321c8002d6daddd6d924112430beaabe2bb47b872830a2240be764d8a6d19400eb71ebca1a41dd46a952df606683bb95cebe31e542c77dd24fbd0d6d27c80bda7c1c3db426fe952cfa47dea2ff9c9c616785553580a3b46c67706c69c04ba13a1a4ff64556a7906196a4b2fc931a3b53da3eb9619775e48a74384d507426dbeb47ccd3bc60a11daeb2c515619f31ff8ebc325638aeca1c52269f2cc1a08b88169b72e78f7b4440f6ebc0b2f3390df0208c1733aea43c53ed26f112e8b23c0dbfe0ba8723cb18f199e1e82702ab0868e4304bca9e97c1b2ace7fb656af40eb81ce29e183e8695d297d5dc1385e04e5c44b4820b637ff89d49568fc5a0a0a2ae13bdf7b79ad84f6fa1c7d21cddf92b79286186ce9a1b3237e0728434ceac7c978e9b8623a8c1eab7e464ac1095ce0b67964121047a72eb9b75e42152711e8caf1ffa9cde9fbe8393139d33bd9ce87c73fdadaa031ab726900c7273806ba8d4bf1a1e7fc171ae01798613d590e0c95868f6737e38d817ef5f70392d03e2db1db8c41f36cb8c0344de283c8693e6d53df2c0ea36e218e37a427693f530d6dca0590ebc2f09e686226d5b03a4b0e4c35b1d21dae7cbbe499661b2041dbf33aca35ee0ecf2cbf1aea574a4f7f27dd4b1d3347c1d5018db6e6691392abb42df7e946ecbf547c71d0208d2f6b520796d0bceb7bb34468407d82faafe9d91d1b83075de7670ec139d5b715a02cf628f5ff95a417e90a19eb35c86b826d9f074603d66a4d551bccb8914d2227abbe3d3efb626ae1d96b78847f3fe9f1bed258ab1556cb040ed7f31315d61535a118c36de8425cc15d6ad353ffc0be170a55815be0f82529522634ba59ae47e5fa145c47f93718086ea989808e0828c307e4a99d1660e9b996ab42c82a0adcaa954483ada30f21586364fd5cb95a9a9f57db1d56264452bdf92c22d4ae1ee72ce92cdfbbfc6818c137a045f923b1fb0b55c26363c5e03c1a44cfdb27f0fac6d8c09a8981d34de531da4e4ae24247c6b7bbce985d1c778c96c5c83280d26b8032cb91ba0fccdd278129f395edde284cdb2432f45ee6e07188e69d3b23f1815c303f0cff19aca4a155c147eff7f8df79db6177c0be611b6b6f3c35f79013e34b17afc9ea3040f6dfe764dc1ecaf788f1e0814125468f69c9a85ef2dd88255cd7348f6bb25df755fdca931d9b67deedb3e1e4a9d7580c93e5072f8f26efd12f193da528b5da847fa2afbf1570947b3a700ed719c4960722b219a42dd25c918066193e340af1352206d76ffc7fc39e19d72be5d9b48ab36ffd5329e8e72a08412bb1029d2a6a710cc8dd58eb4b0cc6c83fbdb345b40a43e208a418982e68ac6774ddb77545d6a0be0cfae28441240b37c68637b1b6b3380e56e2bd29838246931a2f90567e5813d10ab3bb3f636f502f9af7c57767f25d14c2cbbe035d3f0aa074991ee2030c763297108ed5ef0899e23a8a2f4d733604ca6cf1af905779c0a0d2ede8d89aa9c8d31686d46341df01acaaf43e0c772e150b36311b1eeb6dddcc436cda5dd3e34e36737a91ee2a07ae2a06d0c6906220d0f359d0bec9d1b6dd9dcc02891061297792422ae690df348ef81920731cd45e7b2c096fe130bc35faf10f05a9af5265f8a37e5434e7f040786eb8212fe5e0604c2ebfa84a1062ea836a423c4c21b8de9b3ded5a1684c63fc741430ccc92715e1bd6000a4aebf1e9572d8a792e5fd9509d1d80b9f089477b016a48a79033f659f8c9a340eb649cf99409f589dfa339e49a4fe9dcabce334945756041a6a1df728f7e235024279a2fed472c4468a7227fb558ea775e0655a87a60b666d86a8bece1518d587dc561574168d7432e755d6a849ae0cd6bef88bb1d065c5c5010dc62110b6c99881ca35e16e7d54a029fb6f36b861a5f059ebd39a9bcd1a4d7f038ccaa68cb34b329533124339fc9f88d225632dcffbe79574a18a7ad8a137a992469d9aaa43ce89f498811a26303a1564e8d54403b83eeb6bf4f0fdff36b38c29b870c0d435161d7d25cb82aac5fdc7e1ee55dc31fd38510f9283f5cd988e614ececbd1f056657d2457c3d89a2274c52db4d82a8b8807e38a3b1342d5e10a9892c028d912864c3cf44a3ea06ee7ebc14606c35a1adfeb7b56f752bf93a14bf4bfeb1270ccb66f1463e3f9b611ea5a541019ac9d5e8068b7769e5440297229b744b3aac2aec4aef69b597976d77c7e02a052e0ab98646efc4a2fa0ff808fbe2ce8e01b7a9c261d4073a3cd95561754200589c0b258306a81a5518fd465782f778b5b1d2d3cf6fba9fe1920d7f607897f11a5ae8a5365f75539ba892dd7f2f7e9ed207ad4c9e0e60a8e7dc772da9a9b9754b598e6abf0e91e3e5c5e37aa85844fbdf409bc2dd30feb4b0658c80cb2e874b1c972a68a990d8766a4e7dc08c98bd87d4dd099a797f96d9d431088c894afb36f86648a0104807d38dcd2ad17f77183966c95ead8e2d8a4d801e1eb1b9e97054be245991d6d3df54fbe5b3c3cc0a6223128d991b12c8f609f5ad321f6649330302b22b6620ff1ae18a21c306207ac55e7faa64409e7407873239caae447a6f13b9c530008d205baf8f9999e916d34d523d55fb58cec367f0d1805391460f13f2a7f1c2cedd51ce6028884d5198a432aab4a3c1f97f83c22346b9be997e7188b117068aed0d8f867a6af8a1263a5e6c0e4e3ad679d809649bce7529ec5fdab861a753e2fa3cf101292aa6a3a443a42c656cc71acc30664ef5df5421956eb763aefe013d1aa45307e092ab4d488ed080ad6f242df2695d52f34bfff045ad809e6c00a695bff49a08e967ff00fe2a262e97796b80e3904bff1b6d1b95b656974c1efc0e13a30896a62897bd36f0593c68489459353704b0fe04893b7ab5e25d7aa6703768b1ad7f71e71ad1260013a878f4e159fecee5bb95eb116db0a1bd531b183d753d911a6dfcbdadaaaf2ea411461d79d126c7cf1df9e4ad964b83f2441de2584d651e9be31667c0743256f3ca18ad0be36d166efe7ad710a5772faf18ca2198bd79ad0fee64d062ccbda81c75a1f409bf5fac2a59c2ceeb27270553fd226e45d76a453f24043a9175210f279dc7c4565221828a85eca1489cd54bf0b2294fd2c57b7d81282b064e197ce64938dced171db78974e4e912b44222b86976a5b7d81e8756d5e295c6363ce0fb75a34333ce2ef8e747a005b30b9b04837565855ffc3bb3d39269f528885ebded2facfaff52230a6287667b390410fd70e82e8cc5ecfd8ee3f79be6cced925215dd24a3e6b00a973f786efd9c4b290234a62d6021c72379b9eb8b30618163412f6f837859f37c1949ba635eb97f12f8d46188a504a851b75288b98a14abb59b5e0130b9010910d2ecd5c1ef06df3565f0ab976efd646569e65c9537c8671e585415acc6d667d6f654ad028958564bd172e0e331ba437d62f3d5eb4e176cd846db7ea3d1ec3e34774dbd286689fb4e0defccc07de5c8032da00b5dbfc1081c45cae9b1d1834a8c768bcf64c1190e1348f1987fc73f5b5b9e61557445af9951573f00d8809ff74793df56ffc9fbfefd299d4072830f27501005aeaa98166ecaa3e2a04fb63fc8cbe5edb0b6d923d55a819369798c3794423a2e801b7cf044ce856a9143edce493a0d2ca80c87e7abb77beca5726f71040a60c989407f55383101b1ae1bddcfa083dd67862aa507b47e423ac5b5b698637743c077e315ef013313898d38a70321ba10c97556c62e49915eede1eec0396cc6c7d1583bed869fa2d0aee6f239428b55cf1f170b5c72e3fc23ca5c8481a17c22ac7c5cf4fa35171d0118c41ad4c1c48edbc9ca8d54450c00e91f0c5f04c904801d009a0969a887ff288b99a03f58247717f7d4a8c14d8ec378e23ca38eadac44168f318abdbe1eed7e0a3df64669ab496ba69ce01a04c8fac95a1807192f4fca814bdc9ee3d578e7a1656a7fd7f767121eac778d6bfa3d31db05e0c437827d9365917579ea400c00f4219772e12a8de5c0294d8a8c4014284195b1da09cb1173885badd09b31d18b5678f96674cf6990f0a456326192381a236c26202f6e8d5a7c0009ed51d0e91a4740e3ffd4433774d3f761b891aae19fc69b88296bbc22f2dbdfa259b77d6eb07daded8c9f99d6bfa6207ca9524374d3b3969e3c8e03d96b047dc8fd74577f8cb63e51f594e58810bd64c2c448a65b01bebd21943556df7d656849de5f971c1ace16a7c52201c1927ffc7143079f242f01cef70eea0eab2f37b1157f9ef5ecb22d65521a150ecf63879983f99e776d8989c5f3d182e0f2a0efea67f530c660991ee852c4de832331fab320e20c39c7ee89558c5e9673a796cdf28a0dfd4c25e616792f21a244a27f463fee49800818c9f0a4909bd347cd8810edfcae867f40fc926c507fe52de1b3e346d469c98e126626ec4782823c80bb7d8e941d237f3320433ca91b8a44aabef338df77917487b58f68fc5f9127d8a8000f9c44eac82d411234ad1437e5452a3f50a5ab492bbd2999d1cb311c827732b24d44bec7cef1d6f9794932a3be2c66e873f94132a652e72c6b9fd9fac882f964d2e27204c1eb46a1a9f938a230a8214d421cc17db21ba37dd28d23da586381092e598a2da13f3ab1e3afd16ef60fbc492f57db3062b0c49add88dc511def30daeea9a1222b2be33497ed3c7703501696881125379fd6e2abbb3baa76bbf9e1eb8eb5c6c5193640b790a3b32298c88c6232fd09a8c8b270ddb7c4ea565f6dd811cd952034cc82d6aa13f33a32c3f6986c1af5bdbc8ba71bdfe3c8feb17e1a6e3e8f511fa1cfcbf9fdce89d53bd81af8751ec5b2b943293d41971e3b115b03b9942613ebb4a8f1b8101dd3034615bfb41466a40433db87f5e0d0a2af6c6128f3fd7ad9a9e2535d4df501bb9e28c748da56ade1ea85d12d4be80a843d7eb4dcdc431e21191d619c61a1ba3b07f6b6ff2661bfcb1b4811e50958761c06ef986002564a8bbbbc18c4ff779fa5c761f6d91e56840996aa96639288c8733f0b8b91a3a9a03e53a7c556fdba1bedd97c7271daf0645ef96bba770353f0d3eeb8a4fc1aa5161e478e3be985bc10064f7a46fd4f1d87eef14d88a244ae029943afa8b0720fe2e5693ea415f57d3df0d3a5a066794379bc5ca8ab3a1124e9819d0f4d86858652f587e51bd72ada2eb180ad0aebdd7de66c5454545db5aee6dbf6a007ef01791e6c79dd4dfe05e415ea5d077e8f0cd8a6cadfbc2f1885f721c2d7fc66fa1af49ba0ea292f4727827d40ac6421e9ca88f41af7d3ee8082c1f2125b76756319e77d40801acf36691e65a1bcef1a68ea2f8de1c90b78e09c58db2e653dc7ebde3f0ac227ff6759256ff2fe0b5337e656d37af23ad6a8904633bfbbf78cf83b1a114ab33e80e388196b78c3852ed9d1b29b38ea89d6c86f3a051f6877ecafbf84345c1a51268ac80a0242cdc31a9e474268f033150973fa39192c1f9ea883b7f2230eca513d18e345cbe2a8bcd87e8e1b6abb9b070c0e50155fe04bf2e46bde725baf1a112535b68f279d621ead38942210c0bee0439dbc94ba1e891d2516e79555bc36180e1620f77ac3472f43680ba3a40722964d28cd2caa419bbf40fb4362233c26cf528105117988d87c324a13965c48c8ebc61d3f53b4666e34fa0b1764c37f364b5f17f31b47948c58dad5f03fa20467546b6270ffd2bcd62d7de976ba2db96896a0267b406dfe1b17b6480df4e4cd709d64d7a0bf398614ba4934e50612d0f0b9a091d6bff2311361792b0c0506c00153a8733afec07e18caaca03afed4e5715eaff8dbaa907ad9a2120c83dc848517b2a08bccba0a7566012c79b4396ac874cb50c4bd01472da58a9e931f17959006511cb28a3a1a4eab38071042c1768bb59d9ec01bca7ab009b40256782e2be242d3b1516a0a308e772091ffc8e7da529314e9324ed39dea2015968810ae4780ef55d806c4c5cfee14db07fd4f76aac9bc5369a07085c84ae61481bc577427b30008b63018b16b592c123b942cacccc30d7d734368cdd954a35e3e202e314c1d059a1753eddcdfa3a3c6600c0dae1ae723b597e1c6451cce1a5f82a7200c9659531c61fe704e5abfa0a796e342290bfb33f4d4df783071415cef7d05aad7b68eb7892c3da9fd6b90b4d8cdb3e6124cacc0c0293ad8ce2c81e99676ab7d68dc5e8d1488ba831fae600ebe22b847bbc19b29ba62eeac516283485ff267252b71bc8727976e7031629c26d0a40cb06e959e1c0120883f913a13a91427920d7491bec52dceb0ef7abf170cb334d3f6afbbe767ba4db726f64383a1a153e7f49144c6fddacac7b96408bf4b74e1f4310889dfc09870bbb6ce71f67f06e84798d4cad63d62f19ffc404f532b46640538a4b4be827dce8c37707a4dbbaab2e2b5bd8bea72ca4215bac38404d7f645537de4bae2aefe8aa3830d71909f1c2196a0381383fddc305e9f7e5988755aebb382ce2bbc82919f1ae32f11d5fdfbd17c8f3b1f27f502d482763cf1456c4dc99b67e20740809f650229572ea32c3701819899eb1791e3e9a01b78d85edfa05c64809493fde93ef2c48ecc0a88784f7d40988ce553d052bdeacf8f64757454b6d8676805de32f4efda19f9087667be0256e733300d11bbe0630ef6fab3dccc1ff5032dd6755dd9ed67bfc1e0659311c35efd7bda2a261499a233d9e6fcba4237cc4937ad8f18429e91c004e30e16ba254d1b6d3d32c3496c9d1bea734c8d7e3f2c8d71d6ac3045abf97c7c68e6cbd2b9aec4cb2459e586605bbf6d77551aca78729e228aa3d95401988886fbadc901557ee19503fe1fcb2e4b883c959c2fdd4d338966adfc63486ffee9cb0716c4bd44bb203c4a10221473648f86733870dea2ef5d7660b588793871a8359cd1bb36b42e968c81a464b491b5a69e2b872c78b4bf772be0605deecf4564639801e61692eb984278bfee90bf4355f6bff4d8b0ac7f747e90b3dab939f24c817a5daecff31a2f1998257a12318b38d4996a8c614cd87df5ab242b0eb7b855cad2ceaf19fedc83108367b97b8af400b1ebf1612123e402cf4949f1763e13612ff6fd6184f9305f15b29ef95ad91ab74eaafa2f9e352369c9379a009d714557c3ca5f34aa15bd2d431ddec93155e734d1203ae5f503935f229f42075e763eb9953c015d47ce1ab01690b1b2e7f1191d018aaf564774b19fbb3cffdc9c37849f7160b65f4e003503d881a7a7d5c69bb0bd3ee19b43d4ea42cd8152198a98d4f7f29b3d0d4b053aaaf0dc0c0ae9cb33fdbea1e66988b5632afdb932bfcf11aa0da7905b31c51bb9577a4577f3ed20ec5688a10ef22a05b88a982d2bbefe7992ddb058ea1723c0b8dc8a43ec37b3d06a0d9ba8c531e23334ebdc190a1d2398641ce22ffbbb61ce0d8f8b297c01fc956b8dec0a8e19eb75af83f80c1ac9c1d6b29d04d15b59e89c491fdca28d30145f75708b9daff9bcfdec935a98d3bf05909c8d7549cffe4a8aadd5f67bdc8112911ec8afdf83dd30a1cf82478ded7daa84a31874af34d89f180c3e1d16ccb311ff364a522f77e8ed07cf65292a4552c22ea1d5d2eb0e85b6ede12a5e3ec1b6a9c7777c78431dbc546aaaf702b553afd8d89fd97d71ecb9931282a4b15bd919140eb4b5da677e0bfb148d6ec5d44c1399f38fc3943a5578241ee8e151ae4cdc6fca9bb82e59302dea9662f9dd5b86c72d53c9714c1ab1b151a501dddc2d1adf511abcacd5f535a47d8e0478dad48503824d6c4530f95cca064baea82b4cb1bb7c7d64461bf4dee3b6fab6b555e4779fdd6224e4cbb4f27e89a5316a3854629021564becf76ca4462378aff78361243004f271d010aed62d8855a9822019fe1e1f0841b87b2181873f7c420290c402f12d5ee09989fe471d980f3001526969f087190fccba5b5402b72dd8f221705cee0297aafcb8333c2f2be62f6599ea0f6d05b2089371721dc5e171cb4b4b263c927c6bfaf491c54949f74e33da823d3283c5dc6842b711f980f5d7bc68d08a8d790fe4d08b9e4fd82408d6772da225e033678643cc35e4d5cfd98bebf19acc4314f38170eead64ecef7022cc1816b61c4599b0b89aedd30237238f82e4a5ecd3671aae0dacd363fba375ebb7a04d25fe157f61ba2bd3fee5bb213bc4e1da6f43d7401ca4c9626a2912c9f2cff6df16c4722d56ec59e9133219852857820605ffa58845442ab28793343962dd7d30f0349a8abdd3cb160a47bee9b4ba32f30324ef1442b3f3ef620e1183fbd0094c36155ab3510efe23070e6ad6abd6dc9c9c115283625afb8c10bfb19ed10e9e6aa963807418bbaac6d2f25460faa7608321e9fa5c9d1c7741ad4d4bdd8e4002a0e74b85b0d48e8287dea4d5e6ab7faffde3c061207af62ade75dae123d02d0c1045cd3f9efa981d8b977479bcc86cc994aaf0e204112fee1f003d55e89c605476ea95a19c90a88784b2cb57cf9a504ec5e81a6dcb4948e1caccb47e0787f268b7660b0cd1408d9f9dbc0be32b0ead76076b7708b1b0df21be4952142b51527e36a47dd4c69181db49b1ad4e982e45e750d2afae38a82d34e70b6836e1a25ccca2782d35b8edb40c5115031edcb492782991dfdff48b3973bea230d772d3920b435cb23d710afaf3c9cc92a5e90e012644024879e92f73d5e7e1c23f3872efc4f7f6de47d6d97d93d1789357c9bb2e783790666c48891ebad9f535076aada27e8061e1ad323f40d9cd857c539b7f41487c3651b4e980652e0366d5b2c9528a7c159df0005ad0f3f7c03d17f93165e11fcb3c2f2993da97f99670cef4756fb4eed3fd46b19dc7817b06a67235fb6b034d88840531e47f677d3df4fdc3dd756a42e7e879f1bd3e80199cd7beab67e7b5f3b028aa1b1d2a010b834c691a763f84c6a961384dda2fe9a9e5a23469e9da8487578d9d7edaa9bfba9a4a4764cb498ddcf9c5d6236b2ec7c849432575eb24d6f71047acf7c230b0557af6278d66c382d96891c9c0bd6d6b079ef3d45529a81015ceab50d21abf3e8a52bf71ce1d6a52642e9b648e71249ac439082129c716f5503977120cf83a26ce1687d50d0b56403f8e9b15838603d9d2535e15b28d0f64bad214cede52af13162dc2b61fc18ffe846575081cc7daae0c3865a4c9b0ffea4c4ed9367345188743ed76bdbc97d2c3deabe925471ea7dbc0734bf3000de869f88b1819f6c43ddcd088f54a410bbce5b6d6349b365a53bbcb76a13b7062d6d7bb878afad172ae2f0e1bbaae40e000c3587d15c98542edec1dcdeaee0e3396e0eea86e3487495953d13b86a8c7e17d29a26b6451b07e9c7f48d3d317ddc92ce840905c09f1e10b347e85ee1ce0299af6d91ab0a4024bc3ebee9cd901844863ca8c69520d1d5fa5963e4ef99a8f0b20d83a980a2344a99f9eb073a73b5b28b385d95887404ea2247c26cb512eb456f43f79d93556bfb4ae7a1839c7d390944862ea24855c3ba4670052eb6093bb406992421780404cd0de55553fafa9eea03895176ef4bc090f2d6b49528504cdb81a3468b5c2230bbe42f28b34544420e915dba7d61e3bcd874ea7540f2bd561b748f1588ccf592da576bbea36f7fe3ca344bf0a8d3b6a936b2e90325de60b82b611be13e6ba7b4f3507b5ed3d3d36edb6ab1d3d63d7d32414020b8051c91fce7409268e744f055fa9019e9008008e362a631cfdbddd37f5c75cc5918c804bb362faa6f88586f88a24931b05e5c693e65e32b39226c8f8d8c7d1bf0ee2bb96ba80a4a0dd8c5f61da74a00f2af0587dbc53427d97ad40908bb1b714e001f6e120859bb04af1f5ca687ede95dd6ac7d103aabe04986336850888a61bbb5cbf4b2b955cb338099084ef1e8ed6d12f6ca120ad57a5a1ab188e802e190fb2f3bb4d368cc0831dcb9fda8f8f0738b3c261e92059f8731613d90172148cde803c2f1829414a1c97ee5b69e78bc0b1a1dd1c07811d124af55369ff4b368cfa7549d5b9069685b7ab0a652b14a3e26565cc87a75e536071ca3c7ab75f32f1428a07469cdce67c49feb446342cfbeedcb2676ccaaaf1064c1d21ff458bb09cc098335e0ca43966f9dbe65267a11a7adfa10fee9921ffc34ccf2e725842db861eaa48627f05e13add6c5e106d43bceac55d96c0c55fe6eed26baabdec6dbac34425c0b55329b6a3b05e0a73d60cc2e4c84838642bba56d693752a04748ff50cb14269d00e067ef07dcd93fc1480d7483956240ba3ac97076d3417165a0514e77c69c52b1fb717f3d685407601607d7edc297fdef39f7bb6ca0e7df284c796269dd93d461006cea6d6cd9553a32add0952c2ad11deac8381c7b543e84ca7abc6256258a68d201ae7b79707a6d2bd3aa65bf4c817560c5083e6746c39413d5c97c81eeaaa93ca6c31be25a300ab57f5edb73f4cd24f923a7e24a613a2089ddfb3001bec4a40a8b5d47fcdf43c528f1b514e8d9618342580e90c0e17eddb7507baf1484d13b988608ca09fb4ed4953b434f6b11a38c03619753fb4f3a4131a198d413cc55bc2092e3c3ec781d31bad73e00353518d53befc6127bcb6ff6d86e06d74337873523d1393df781403db1f0003622f9efc6589d928b52dfed276020c24ed80c92354a410d9856bcd65898907ccf48d4d3f41884d213e74bd4a33a7171b03246e833430a1b2cb68ae628f039428a2d18e64b11325fdcfac6cceff0721d6852b68b886452dfeb9dcaa52dc20b091c74bf8a8507e2199e02c501efc10bb9d54b213473c937f1345858d5759f98e7315805beedf2799548316570a88718aa8eb58fc42fa4434456bd3cf682b3b88b1b65e7af0d4a19d5f42a25377f965755b0faaef8e22d3ea84d99663eafe8bc0f18a26dba77453ee505b58ce005367a92cc7e592e067ae94d7dbe7e4bcbee025636906a47fd170bd6cbfc4a7e5ff9f845bc92e88b3c8ca8572eaeb15f11122feee92da75f4ccdae6bc1de81a9b1aeb374d9d6350cc38cdac5a750f1118a55fba73f40161faf01c602f42d33442f8e6562bfb96a261f3b9e605d1cf31034abfd4059aa70c781bbfd0825559bdfe7e6bf29374bd132be78b1a62b0d3e9b32a1d52e3d0b09f07350726adedee11c6e5b85eb9b47f77e460c42d2d710634a224860bd8b047495c6b9b7545edb1acbb335c0be7856117be992c590747ef14366460bf67955360049708c508ff6ca69576a47b05bc2e169c25e2c950feca7603b1c1ce9419a042b0e66bab4444eab1b57e57e9d0c7a50bbbc80f32ba9eb3f2556f745499fee5c1457cc08d44a765cabeab7fbb70a27379cb95123b97f17fd8a864cbfa2eccc61d2bdd809b09ec4abb027dbdc5766a49896e759001da3ef325a3de7789fb5e3ca5fcff6185b5920258b57c992b5c4a3550147f54fa8277af65dddaa4f756a7f14fe419f74ef0d53214ec55ac6868562777e6fe0c3d87b5e312e32e72900f4898fe1dc1e5ad735342b7821f0e27c0776ac277c1c6b3fbd4cd9d3b286e7eabb8661da30590dee1ad3c9504df8dac635e20fa9e55495bab9496a3afffee1747aa519194f8dbf6c69fe09f369f7d4c236e2e5c33a9bc3fb6dbb76fca1a34604c381f079cda3525694d3faca9a215ca82ece1b06752a73030e8f7a7b1ebab9d842c7d46356c8d03f3097d39097f7bf1a0f1ac9a30819b84350b9dcf5d6086b2052e82bc73645e4512ab5cfcecce1efe758ee3538da79f25996b8b8802722333f4b3e3c390f247bfc46d5c2a958bd3e5e47382859648432db228a4f6dc8f2cdebb1e24dd18eae35ba410165f5b36a781c4742673dd1eff5d0737b6b390f818013a7979f60c36a815cfb4c24566b3c07b6afa0fb26769c89ead30813ae7222afdc958bc96dd6a552002418ba74100cebee269028e7cc5173b77ce49baf90f50478896312d7e22fc857e6b566e533a8f54f3cbf96e3ba66f9a84a1c6904c9ea4edd221afa228d9fbbcbe443021d6a33f58937bcece2d7d5357ac83d959c267fcb2f36c447939d70c430bcf2fddbbff47b0ca9850a93ddcdc7efd8f37292846b1e73838faa8cb35e2f10242bfd413f285b54bc49dd4106265c01cb15e6e72578b7f2f76c28264938ecdf0114df90f9b11582fd88afcbb94103ea3c0285bb1333b65386a629d26b162f92e5ec70eb1b8f3fa76e669b98bf3f3cf463ed77b7ab152ee94d73a2cfa3fc467c17bc8857fb6cc853562e756db006b072eece811e7cfeea6abf72978c8e7ec365e907ddb87f4f4ae0dbfbd6cc80e57fdb30bfd0cd72b54f5434c2416af9bc61d1ac97d884754ad174943d9e101459cbdb4f98bb2a8a388a52295c7e781b1f2b2c4fd9318cd870f882240d7abe26c72fcb336ccbe6c97d34261afada53f1314115fc89c70c03f5370a822975eacaf32faa57d71254174011549f89c645f2e277098198846643aa8fa4fcacca7516126b1614b15ededa70424a54383e1552ff49c8863360f13d52a8cdfaf99098c9eaad02592b3dd75ac62277359b3a772ef5197500157a11cafea8e613660fffe57d7ceb84d20632cc4980b5b0014677ef55ab589140865de04023409e77616f1ff258bc6c1421a2df4f2985d06f1b1f0f11ccc060166ee7a975f8fb98c0084eb1bb67c269c16553ea4e90c650df448116e7e97981f937d2d040e32b962442fa7dd374cdb38d42ad07dd2343726421586490e1831e7af4f1e7bb776e39144af4fadc572ffe90867de12b69dd05b50e7cc92c4543b606c68600da6fb73f4cc08d4b7a23b3e9bbd7a9a667d08d8ea7018789f45e2855dd898b92f84c06f863741668bc7f0ec7453e05817efb0d7943a879ed2e290ad6e634aa6affb05d69ea2e8cd8e5cee37cf0ac97ec5d3d4e654f0fb14a39249cf4dc8612af9662b13a823046dd9a2c60ccbbbba4e486619d3804bf9213e36101c10bebe53a18e47af520e998decec90901d0643a4092f4e197b61547af4b825df1d5c5a52cc5ecc39a66fe6774f1205e60963b7621f05f136635f9ad2ba91c112076439fdc306fc11f406d7bac26c42bb32e0b9de73cbd269075f486fd4b216a936a74c0f9668566e02bac88020c862e22e2111fc393a4ef58951b5765568c882df33f3d9f9f1fedd7cc51791c9efa4703f75e10f989d2950959a7d259ec9575b50af944ea1db258b567d6c0aa2e15c1fed15fa03c4808cfade0af5a308ee2dbf0b4d44ee1f763cc29fa677c8dfc12048cf7a9b6ce872db36573cad7d4af2eaa155e56faa41882c4d95b2537019a1134433e7ec844637999e6619ec46e172524fd582cbee28f48ac359eed60de9b0dbcf349c1b94357efac16b18c7ad673abb62684d04c316e2c35337e52f66cf5b839bad7763dc16e35f3ad3a09b760700e8aa91b2c7772cfab3b6f3edc5c3074e8fbca464b2aa522ce0d010b9d0e8835d0106083bda1fe05916a3e0d4c61f475035d7f06ceed5dfda81374fec881cc85cfab834c6efee209394a1625346820ccb2edab3a295b86179f5b4202d4edcf99ab8de90df0d74908e251d133e16676e2ad0e08ab3831eb59ce3bfc80ecc20167f778f2ba219f84b8cdbe7be7176c396f9c06047baa8fe1638340ceec3fe5b9024b523a0d9240870189da1198616d6211209072a9abcee98d54bec455ad876d971a6e85e43a5e83b23f0a762ceadea2428b3c294e11c7cd1e7c923734ae8c86f315752054507feaf800e465a8b3cce5b2d52d6d0a4cef767b0cfeadee03e667a3ab9103b5fa3ceb71726f32108abc534a512e9c724a6bceed5a28e3e9bdbda7c34803358016a771c9fc916924db257e83223540e99a72e80660125ed0692e6057165d8a063ebe32134e7c4690dba50b8bc931fb08541853385bb2a82af76f44be033add1accc7a2f49a2cf52ff6ee45cca117ccdb818aa05cddd55922a04a9ce641b89fa829c77ea8485b074f26e2e5adc6df9400457eb07d8f95857b3a03fb8b92da2e991332da2d63d007227522ed85799871e81c0180df44bf8ed81448e0e5e4e5d6b6f5e678db1e4c62b7090c28fef5bdb026e0cb39470e6aad26b2c1e27db7ab37a91af7c81c4b59bad17d269cd0c4718d747367cd0e4ca4f57adc1d9523cac7c768e3138c3086bbfc7d02066e84721639471acc84b96d4640fc2e34f9f8f88d6051c0f8ef2e77409d32b585f3d75891caf59db8cbe915b36f10f1970a5ec5c9853edb5b45df26c86964d63127e3503ff85ece829eb2b93bb3f1ef87737bdaa28dc4ef6c47d820d8d6a473aca205dd6df8b22cbb88dccee9d1f53288e930529c491afcdf62742a9e670373fe68f653be93f355f6c4e36e5371072d8b6209e5d22b7ea85556736eca36d940c706ade43f7051ce6e98ae2bedca70afdb589ec2e7ca704feef0363c1ce0f0d7519679667b0c0ac5864964996d7c88af774c38414249a646afa1f00ee2b18444056add2802d100a19fd062473cc80bcd26668cfc150db6cf61515270cf1182bf033e7bc339361cf260f4f98133574a42f5f627ca44b95d4f96817023e03d5e83c1ac61475fcbc894a74445b7628479783b095f5ae07dbe76db90c3f16e3dd70b341d263f4800dec36dc61246871ba74a4bf6f4cf9bd3ffa8272dbace088d6d0c46128e50f1b61e7eba74ccc5bb2b269e0402bba1464ad966ab91d53c5761f68485211f63d2f3b0bd941731b684988f0b5e57b70fe021f995d1d568c992297fa7ede7bd0ad90721f57a0377c9db779dbf1f1e833ca1c01fc9b11323d001572b98c7ff4477303960df3b4e8b9803a734c286055483786b271d25639bdc23788449100deb881a5fccc9cb2e4eb3c06ecef0ec8475cf768ebd41b7ab33dd4576bb0923db3a2daea8ed719601e4dee28ef71b3023a627ee73b8eadf645bf3290997e9682da88e090dc80fc9197648722bae6446a196d2b5053489afe0420bfa482ec711dc3e814409f772715bd2a4785cad427452d494cfb6509865ab58e2c1f3dbff41a87f2bbf82cdd40e11f97f2881fffc593171c5bc829b1068618ba3acc1348f9e8c08265fc92efa2252088fadfaaa182d666f78854764555a49cb833828feb7b9262f60bd639b264d528bd5f661c057982eafaf07658ccd21c8e8148670cd346977758da749e336cb9c28435116cf438655d7bc01949785153d3776e4d1c58d16000036f3071b953e9bdcdaabbaf74104f3491d1cb4bba69169f0ad33b8784ceb77a38ba04b37abcc42fedd3b710ad63ae34394f3ffd98b2914b91f77d483f83f1e8499dc1722ae284dfcd1e34abb27b3c658d7a439e647e82ae3830b49ef1ca29d9e7c100faa268c1e7958f7ed7f99f9a2adbb2823ca5099b36a5980b4adaed778031e731a084845e12c34fdd2c43d498e05add847b8b21ef9785e050490f615cc2bf364af013b387d9b8b2445992dfdef3bc222801622f99ab7316eac23472a24c59ca92dbd7ed51fd3f35c2e084abb93eb77c2bc91f027950960caf07b0296242b318efb1b8c211e46a7fc5444cd7f6e3969c4729a2d91368ca030f4dbb2e5bb62f920b5be1e5791d2fe6662ce03b74abf06bf65611decfe951e2851fcbcf7de861e8b1135e382b2e415b624e6479311ca269552f5cfd647278457e31d43218d4c65915e3f6d7fc9f5337aa4209d40e7611c75cfe3fd74c09f83f00609bd8cebea47e5d30d21b5322ee1d51b75daf17879ecbe68191db519fd22738008e8baadc83a6cd306368402974c5d38e4d5f2808f5ecdb90451aca3c57886e11c74dd37d48f01fa61f81849cda98c5b27417ea1c0f50204a74e9ee34f04fcc6ae4c2717776d9af3dcd5b53299c50cb3a5c276cbda9e00cb35153d02c09f25869f0bde2756960f59b8b86c23017f63d8f64ddd926589f0edd45c6d4abb58fd4ea18cd2339c45a86c3172d1d984e2dd5fde4f9041a664d2c7d7337d0d77980867cf63d33eadee5c67883cfbd70843d56a88b57ebe890c6d2f215d36d2821ca7c1e0b78af6f5a5bb32b06066b61b445ce9c39111860c82644090c73df972fb9967278b8580cffccf3ab81942df9e7e5972961b9b53fc209fcbfda6b63bbe34e78419c26ba1142cb4f15f3ec7cea059dc2912692df3ff046f5d8c4bc0ed11b6a7ba4e04a25f5feb546dc2ca8cd2fb97a0935380174ee974f9a0f796885e1c2460805e130da2e85034e82d4072a758bbd5df8ad8b6f58b0de00736f14ad48060f388dd1d99673eda5e492ec345cc4a312708c5d4e7981355f67c9bf6f825fab46b543c82d38139defa4976c0ab831b0c50ff05e199c697c4f3b45aab5bbe3c447fc758e48dea6c5fd4d32f5a8e61f8785a916d3ce70868b86db930249e16d3b66a6b8e397e71c6de2e51aabb39906e6efd6a3cd048284ec83b56633644144cb81b787d9063409662d9321686f4947c3e073e5c1b5cda1a577467d50ac9a2d5c92f964c8613f2bb6cf3da533b492d171dfd7849c42664db10de6761dd2b42e560b7ab89b843edc49f728afef3714ff9ba81dac39f0be245d195cfaa260cb90cae55ff84704b6a022b9294fb406d15522e48d29731c32654f733d6f3d1f49f05476b33bd0b221798c921ede301e946fe74b50962ecbdec3a90f7ebe8ba724888c4182988109e48cb0e79f9cab7716c5981e33cea017cd3ead61b6658478a0626cf8b1b846df235f2ae4ff0056ee91b7ddded3d501d57a9a81680bf54b67c6449af18cfbb4d513db06e0f1f206303ec7bc91fcc4cce096b20814c5bbb42913b6d26d188fa47bb6458683a5a374eaf9c7bbcd05555f234c45759c9eb01d3557e2aca926b95479bc02d28ec4e8b346db698d2ee16b722bf4f7d47eb431bc5ab69e361453c4556bb4c6f14f305838567a24668aa79588ba3f4c549aad321c2987afc62cbe804f60325a23c77d0b81842c8459735b16c8180a6311e35d0f67027b5cf035d860d81add517db3db936470da8d5b9018bc4a7707cc083a20d23bbd2b04b83ca0477cb0b1d182c79f53fa8640bfd0e10fed5b66d83d19eca2a07fd531ee129a3138cf1c7bd465202d64b0c94042d1b68aeb2c116aca904b1044fa7e3ab5e4c8584d098bdd6a9d22b5e677f496ef0d9f128fcaf169bf55c964bb80c22edc495e8a6ff05d7e758da1c7e851446f312b3a2be2e0ff98d5aa614fdb57bb44112dff04bac81ca7e159733d0cfc1e1077b709348ea4c122c5c2f97c4c9b3c129465f3627dbc1c94c689db7146cc0db68764fa3c86767f443e721cf90792da85c1debac0e0373af54f135634f8b5980c787a0fed81ae44f42cf6a9edd15fdfb2e70f7233c3252288f627e2c7874db0fecde91d39ab502467d87e00def907c7f68594ae47ac441bf99ba9f539ea7b59d3ea41cc795b5c05e79c70e9546f19c9cdd657f883d316ca3808393e73e76b7a500c146f07021e3bb9774306108ba9f1e44e4464de329c4a75ecc09d6c35e6279c1dc52d0cfe2701b4a4728f561abdd5b4077b00d5c2660883ac7a2ea5061bb66209fe3d06a7860f1e0c26bcd0241e9a355e6e9109a7d8666a168d3bedb3682dc26fe3bd0d0a92e8b019255e4652e955b9390fd1d01ea2668aa9f070a1e946b8f3e5d6083dd4fd227892358c462836d6a1b3f7369b49e4b7cfc4958052a2e5cabb10fa1b6963cf180af758c3a7a6dd325d2f1a411bcc97ea87d6e561f3d31fb4be0dde5e81e8d47eea3ee1cc44472ba7133ce66825cb55e078127cc9384f8ea00b99bfa5b159c677d73f60236a3d1ab8d6e84420c696a5b9fd3afca149c022aa3fce23da2b5b4d3ff300669901b7f84763b82ed7f7d00989258872dc9a59b8ef73b3e2129441a4bf7abfd6e4dc48068b33540c67194149f208b03ef45a21b45a12480c85c991cd801c702de7399a6b3281aa6560135f61ec9343ed5bcdaf5d255f66ba23a778537f7cbe369280948f65372526564cf3fa9ababb9a8e18e266c701adfaf8a16d6b9f7d7b63db6fd488f1733db955da50cf993413c31d95aa5155fe0de43229bcc3b55020da66fb720ee134cec7ce1f018560afe197162a1c688c663aacb405f2834219146ca5dd8c0e0f7922d2f7c89e8eac09e9153bed56b7c3a41fbad969b768b8b4e708593befa11ad2a642456f12878da51b75af119f6e3a5d28f92aab404b14a57811d2cb64b2f411f391bc7ac362f3e5c0848b8d03689616463d0178ada51ade32ae50599373c85072c28df613b10b30a06466ff062f34d8b953a2f68cf86b87194b5a4d28141e4192244a4aad72ba47c2d8eb0d794991aa388af00b32265f3f3df2a5ff3c116bac87c3fb68b239bcc359db75ad9958ae14b0fcff272d994036ea83c07f95e8422801390a2882e812723221c6f3fdec2de3ef12b2eed1b8bb03b0153fdb906e322ec77232a4faf9629412da76bbb53cdc9dc1098a26b0da49ae442870d9f6b89e911ebf096b5792f313a490dae7b5ccb1b48a7cba293283290c53d1488d55ce49dd94afb97719571cc41d8050614f766d24bb23bd4876c0b160a2307fbce0d6d5ab614806eb6d92b58d53025f50375591fd3d1e98ae447d72edaef2a38f3907dd9f06a87f2f207e89b0f29471fff2f42c0f2a2ef249df77cfa692b0660d7e4deba77eace7fda50debf14d03b9e14420eec69a8cd3723a9fad247cf6db3fd7981fecad69345199a307ce310e715193af477f3843b905271bd73921ada3743febfd3447e311edacf665321613cf067ecbd01d76d18bea831cfe4dcd2b1d85524dafda740a5c4b03be7c4a5d539452c858280f4f677eb16f244af14fde3d01a2fa1ef457cabc63937f4cf951f0e5984c641a149c4a9fcb5de06f4f6eefcd7fe9b9b9093e08927677b8ddadb4d4b04838f73ff41d26ff179b41c3470a4552d281baef4885f27c843f33979add94d9b5e2ba77cd10f462877c8c791f69d304b3ec114e986f4d6ba9bf3606a725c362e1f4a4b23997c95a4ca04f232f9b50b283134ce4f0aee826a03145a6afe90f8db20b68a48da7ddb30e815ad57fad31283328a702d89a6ed6fb22dca70e24b807b5668dd81361c19e4c04af4392d5d88fb2f7e3ba2689a0d2c568f9609085acea6386427e3aa2c483d469a33f10dff4e8e98d0062f2ae09fa2b8136c1eb376c7965be849489b550bece1b6b1176724e8bfcbceb08bb5753e81917748af9892ba37e75e05e95249c354614021b35af406d19862e9a5ce856862b30c080c0add59de4d5552abcae088e9f6abf3421ff085b7b20105c00342fbef84ec998358fcb960622fb4a1c75e50e9f776de6170e392601cc0c965532f991a583c111c0fef0ed628c13c48baf998de4c34b22ca401151f836f7c51e139a1c9379853e6d9c6b684b4c9d4799368fd892a1d64bfe1cb08e34eb4d6cdddf55bd6d01ee5aa6fb5042f2108e9c3561b4fe5d1bbb99478a71e055aba07ddc0b7dd6e56ff27d9593d14f28c8cbf7e3bad7b3cda15c39334cc7ee33a161bc350a6afcec5d4aedbf2201dc94b8b3fc22c864875fdc16a7a1c9c2d9dc52196a557d5576ba4d5f4a84e68231c2c7ad68374d8ef1788fdd069e369fae7656357cdbd5802bdfac56b01926d70e4a8a44fd4b87ff593d5fb49742d382f99bd1a88fbac583cc0db539aa358dd8789a78b55cb3a3ca0ec200dae1ee66b876ad1daab347588b8449472755e89c65f8851b40dacefdabab91984a3837dc3d648f95b98418e6b8bf9475b0728e5709399e740291fe64774984398ba317de075aa867cc352e96f3b64908199b17684aa0b5cfc211f3cb36961f7e97f657c1f545a411f2f3cded351bb2a3ff0d9fbe9345e97ad8e8ec8eb0baf749033d4b36822541c7f9e4b3386b29c19006270dbc27a92e974dcf023add9ab1ea8c65b81c89dbe0d662dd7e60fc1e96a808ce02532b6c7e8a50ba0db0a83966c0c74286392acbf8c6d65518929cf41e231e87e0f979ca1423348fb9dbb1a170c97ea664907ba43e6cdaba2d1629fb686b8356ef77a96de5632853e51b6651885082bf63722cee6a8f075339cda45053a75863d5604735d32b61ba5d9085c835bbe3af8a9cc5da5782ca47c71abfdd6905ef08129d8c5a6d81adc3c9c2de8cc339db9faac863893746ef6d4c2b41ad1bc1f7f38e1631708dd358dd8f623b144a9a97a92cf5525857f6c152e12f5d79c6d890cf4fc40f917f087323eb61addc1b20ad44783722c9b41c4e44b8205f7e610a35425044cffa5d007cb428d290a7629ca481e239f4c801091aa4799199ee29000fc6ee17dd33ebd1150a4be5d5624bae1f4cd082b04b22712f15750830aa71b8f5122b349b17f16e969884b89c9b4bcdca54f611363f0ab66ca627d3cdf4ebfcc902d5b697652b539ed39724b829f8fe103007ed572dbdd57216bf1a339afba93e2039bf57ecc33c81b5d4f756cd029a9d51023182997d4ddbb61926bcfc2b9c2717a58d06b2c11fdcc95d2b8118d50b31c07b7a7ddc79169609b2ba6b88d0362c12a0bb4f1de423e771bac06322c7a523d810cbcc35a697f3a80cd614cbd331dadec2e06f56019b30e89a4279ec8425908bb7784a0a3452a9896b57f3a27d0c09b673d20554442a23a648e33623f8117860fdc8735cbf5d7d129427303b515d6b6f62b4f59ba09926b206381d2b77c9070c17d64f8a23d00029bcaba370c14d8d0375f42ca5c65a1a6cb7dbbc273603bf1911fc8b7abacea7fb55bbd80b6e37ba51bdf9d47b22ec04a2438949e7089355d8214aa7064c93b85150a9d4084610aaadcf36c4d0c2caceff358e3107f1a5400218d43dab8a5a131f1de583701f76b5417b24e702271124ba57faecbac56671e6ae78fe2c8bbbefbaa46824ea42db94a53bf8b549c6795d4398ef91573d532d08db97e4f0790ba4032e9cec1409761d404dcbd75771d3279ba1bf7a75183d718e9956b7844e2e4e2292e86f9c2ba9dbfcdcca692c90b7762404e1cd9c6c78f2b38188c72666d29e0d93bc3e1c6aba96471c9b1d825ac6ffbde6507e0b4883de5b27e55b957c6498ce208e34489769cfdadac57bd5c3e4a40d8d0f48b8579ab18f340a5c78679bcdaabb093aa946635c156f189cc67e62fb800d52cf306564042f158823b410f210eb0ecba95381781c494f67adfd05513e7fd302abdbd487c8361842723c1b203b31bd0fc6b1ca0bd95337ac4bd86b310ec78ac6ef6010e66f741f59e3f02ffd9d43dd74a6929a840fc9eeecc71a09c707d3f5a7da4e5fd4a506d3c2ecda425912420e41ed27e3b63a9346055c0a7ec64cd94e49d064c52758a078d5ca206da3427dbad8cc0bea2cc625942290106b7f014b060831182adb74c7be860a3702853c7f29a6b22f4cfa4d2bf5cebdd23742a5cf4fecb3849cb9f346873de8675f9a76ada6fbb32b521cf800d9dd305cfaac9e79a9516de1c053bfd5876e3af6f2cb6d517745d3f52f0e9f4fa05ab08dc0ad5a951fca95b7e9f50bc3ca39c695218e4e4ecc721519e7d4d17eb68eb242afcdbcf8dee6c1eae3e29451e77456b399e5b3b8d5011a7f888196fcf83b67e5f93447f0fd5cac94d1124b551b103399a6a206cb8119dec2d9ed7cca333020c3210824a9745c118f8dfaa3491f2d3ff39ac6371cf90a20c08415742808e82c5eff24a713d524a4fd51d9757cf4264dbd3d1b23a8cffeb0f67d384f5344dceeca26c7fb7916102045778b11860383410e030f649504db07957c0abe5e1f889292fc32bf77a447652e8562c42abfbbfde1be8464fbd9ff8d84a8bdebee6ecca0b617ada4c9c71ebfe3c733c0efaf85156a2a0d601f9c2b230ad62b54a9be9d492a10b469866182a95c7f435edcc81481c901bc5254b975d06a7ad651639abd604176fc68f053c345f8f9cc40c593156a3b742e04f2036ca2131473549fbbb62bcc06b2437662fbeb6b382bf36c690cb1a3996746ff5d08d24676aa8792dcda79c529397b56c6eff4baff72bf891303c5bd8111502698f976aacdc62c58d2ffb7f4ba99396dac22c994eb3a17b2d2db12d4c971f5a3a5683a3f3cc0668090f98cff9d9662dfc7cc67b4d43e30ac8cfeaf15105d4af5a75d33795ed057f2d6e1014aa0a2f263f5325d68dc78ec7650c1084c885d4a594d7edc95077daf0551b2cac6c5db0b2b2595c489be1edfaff706245808b609febc5b68047acf25e000f16f4554d6292da36ec1a61ad72cb6abd92fc228edf5d8da520364e1e9e4f240102a12139fea07c65ffb0cbb57cdec0bca3c2d69bb9e2a404ef10d337a14a4bd59611949fd87c5815a077a7e9d24dd5f506e4fd0f27ade5ea4ca5807b2f02ef13dde88fd1ecde2ee786f6c8eba5455a5f816ca025438e3e241771e2881bb21ec371c45f3620fea7a8038e880c0f2f743e74d4a684f5761da3352f33b7f02ba8cdd661d5c08635a314ced3e7d8eec5d57cb767e70de0f5dc8d3b74fd5b9590b6b0f6898e59470af37a418c465b07ab056e8a70afa11c958e736ae1ae89e287302e4c26fd8b66959f6ae158986c480b2a44a0108a70e28503f1b5232cfcb9b33ecbafcdb29e9961fe5422fb6a1de47d5e76c613ef824e514755fb24940a77b53111931aaef72d591a1d07136d274e1a5dec3f7b0a49885dcb5f85c639369b4efd344ef5eb291c8c2340a535c2aba4911a81ee239c1341d39fcce30fee39731ca60c50a14bccee79edf665502939a033c9c13a214c61eefa2fda4f7de5001eff37da0c95e0d47fbc9d89456e4f06f0e678313b7a791727f77afe09cf33e29ef23583034cbf9a30956e698ceb3654cfbce243b2857c43f925fc9c4f52ed50c95e44a9eb09c4bc420aaea32d07c678375dc62c2d4ca38d77b7b669a2233dc556fd02d0577b51dcc6005af414c44ca072decc071b100506c0aedb55cb221d502d966593fccd13f51ef95150e943f77628d17b3e1b9aadaf35926262bc764c083c580a4dc8ae159d2f70d65e092accea0ecd5004e968da65e7bf260a24c1f4493dc6aaa02ecae360dc981d55c1993ed3a6b439013a738af05674c64ef311f04c89ce33d672fbb123eb08e9a0c4bdb6b7b7863638399100ce4b838abbdf5e47a00502ac5d278c7c4df56ff80d4ce76ac127797d5fd0c12e6ad706d88dd53ee54187a62a58584f8acc151e567248c8cfb53fa81d4437fa92f0dada470b136b6f8652d6a11b03dcdacb65ab0f78bca7685f5ae53a47bd58e1994c192ff82f76bf2c0d9a1212b589a73ce0e256294532ec7688da2e04ed3925016c4f0e9cc2ce730083e598e337d1d5741ac037c499a4a0a929e9e9e869a0cc2186741e49c70c1d2b5f916ed1556eb773b2be7578bc97717e77b46f5c45c1a2a5f42888acac03e9aaaa9603465a4ca70cd0fea24c6da758ce07b250d24641a6835bf57ccf9110a59a5a9361a0443be16caa7068ae448160315d29a5d876aa15506f41ee9920e6fdc6306805ccdd5e2e98114ab79f31656662d2ad0c9ea1c608ec45aa55e216d52d7c86368db0e9c0db5f9d0f55d7c13fec865331480ed080d4588d1b941cd078c209321621afdf9918cc7ede2b852da8b40ff7dfc2ec579590d337e057ef3f460943f2ae8c092aae3ba039fc2c4bea103556dd8db394a242f00d2a78bdb3fbfd51367213ed3cef4b5583c569864af9c0f39911bc015faf9d8fb8618f4f25e16a24801a97ae3f1b9228f141a2c89aa956880ab0a5711f63ddbcc5a62dd14b1475e18dc7bf9c4ced6fc4f24468c01be4f4491e44031da7499cf27203409d63bf0b11b99de5282fc9214dd4ce6b96356fd0b7ed3348968f3f41144ced0c9563b7b592c1d60823b489602d21e92299c5b67c4789fa2db9e3cf5c1b728015ed1f3a481e1356f98482107c7d00a6494c0b6450de2064c47838a36c0b5c93a38996475b344691ad8824667a44fea83a72d33e4c39c72e41afd8a31cea5512e8c4ffbf4e8690fd8b05995102d8c08a11c102bd878d8c0774426c53c8d2c14607321ea4a6531eda8f7d70e9de9d15b93c2c4e6bf4e64de44be0ed1cc5033dfca0798dbcc649a8013382e283abad4bc85feb8a98a824fa773ad0cb0d9cf2599497ea68b019b178a10a55159f81a83b38f0c963171ec8fc13dd60d1aa7052dad0921a40e549556997222a9946f2e796cc7348c10faa2d15773c043dc9e0b4cbd768215e36806c79d47d692dbaf76bb2a96752c6403a64a6b81c037d0902836e855c370c05817b76b792178a9456fda2423ec65b7088ba67307810efee55d250bb3c2729efaae5949ccbf269903042cd0f69b24ac32be0b56233a83774b897275b7af423af61bfbb6fd9f5a1299165693eef76f4710d4dc9f09f626fa794940438f1fa5f6d88ac55286a0eb732ea1d5dea7fa33a39d1b6313945e17a0b5c2d5f9aa512ac267b378756393d55eded67a56b80680c894650d760d821a075bbf0a4270b908885c4f689b50682574167a617f7813e35f456b04bee6c37f3d459f89d5c8d3cf8d8bda5c9923e907b8a4b08b73ab9d0be444cef5e01be5e7fbf0e0a006720fb3f8b3ce9fa0079203fed4c1cad8a075bfd34fe3e09c80f6a0e17ec5c64f2a8971e895150d0d6ec7c944ed3691cf88d82150a23f531fa2d150e659a3a039fbf357ff4ab0d975cceb536e6173be5efdf89f7119179bca9c3ae438944a70da15206e8274f5e2aef10545bdd6216a3def05c796aa1caeb7c85d8d9597bad4e488b44e30be20411761addbe168ec10eb615f77414725f0eac16e88cdcc5ce7d661d3b588e38a152e6c00f8dacb54076db4a8087924ec9dd9f89c21c863cf6c149765b5ca61cb92f52c7854fba408e20cd19dc3b924fe072606025d1d0787fbc457283f0f5a42ef6e19da7348887d6ad57d0eeee5811f54ec15ccb0996ae63629b745edfe0cbca29ddbb444cd452bb3bdcbd8ef1c68009c2e8c44f489043c11e6607328fabc3fe166b8d8205cf9db8cbd05f34dadf2d2af4f22c611f6a7e21fe68541b0d132cafd1605710aeff280fe9d0e7eace34f2ede24bc9fefa36e1d82c090a1f7c5aac1230e10a49c728da5b34665afd4cc10aae74a92a0310ae7f6c5f67e3efbef2a614d712600e1354d8243e585d0ca233b6a4b2dc83481a3b1a3078a1c93ab1c98edc55f8e89ed0aa6547fd1077b222eab016a7918e22c19093dbd5d60c926fa72b102b85805fd11fd85ce96bb8222890cd0f56eddce2ebdbe1ed6888b74d2e21044cd36d9bb06bc097155fd758205f3f898908f7835efb12c0ee1b9b03f2a713465fca6f7539556c5950d7e246a537cf073ab6ad07498a8a0c28e0d88991113b4db17f608477da2c157d4369d231eb5b38136228346ee1ea2d347cc13c6fc9de00ee31583e672b7ca798caa3e784e3dee9c18171e0c318603c0b6900a609db092ba4cb6dca2bec2967db2c8b6514ac77f831d24a8da9ab6350db08fb879725258728b45899da2726d9ca12ba137a60008da7d04b5e8e2b60f8daefe59efff2fd9daeef0254a6bcee36eb3c82b1daeeda202336830def9c0887c4b7372a6e950b343edb5dddd15eb09b9bacb1a13cbfb51470f775a7da9d5db79232531fdf4082abc92a8965b5a4248b2b9be39a05d9cf9e420effc853d6682277932f6e63aa6826ef0ecc939b8eca5965b173a6faa9483dc98e39faa11f6073754a9cc95da8e944c5eeaef3f6508e07292237a67a4cd182d5a009556d378786c0e7852501a81e3dd3516eb1a24b2c516d55f70f17f6578936f99973a7415c011e0bac43c2dacb09b5d79125039639aa25930010f356125e73b4de185ff5e1846d558d7f57018ef190a6b4551c3e529ebddb7bd68b2ad9c7a3b85c4c15e9a6b0a7fcd96a80f2b7b28f526f4e9e04d8137c909821b89bc095e61c296e26453b3e93572677ef7e8e0583abd8596dafc9a9f3f6eb366edcab6f90b70692912157a235d6a415a7764dbf6f799557591b723d0c37905cb60dd5c621afac9689cb86b49dd237d5dbb6d30c08c9dabc593b430606b818ab13a52d529b4f9e9bb5643eaa3d9d6c952f9c110c6cbf315d151d84335469d1496e5a36709684f6109ed814119b58ae08707a06bb1a735145ae56d5e2a4569cdab2ecaaf87de52f9f40e7245e219abddffc2c352ca57803e54c1b849ccccdac1a4f26d5e02b2bcb4a743b1cb044e92678fea3ff5369fdbf7854f3ac72fc06ff3e8ea9f972b37883cfbf54d86e187de884f742a0dfdb2d06148d2eae55e5827d383a95a41c551c3842b9a0a53eb6302e28d07dbd9d0be40f9e64fb8acdccbea4be781bf362ad014fee861252cea37f9ba4630e33ee33f2fcfa6197b8da8c14d1ec7d08165d5ea6381bab9d1f241bbb2e02954d115784afc579c947e269d21b8c2e861133d52d76c65bf485ded5f377e2f56af5b47ae618c6410f12e5293185f6f8456cf02b54c42c92e6b21a9a6cb0f9a24d43911773567304c711987da183a4dfb6d3cba010fb47f9879c6e864efa74f7b7cf9f1ce6bd65f0f00ed9b6b15df13f3fb837158b3c54f689c6353aec22f8122b008a36314e3a9f46d56862f8cc751a7d643207efc2e8b5819344976aa3fa5d676ab867f602d2b3619ae89b9ab2f13a3a8bca014e8a1ea42ea83a8c83a41e15d8ddf1b5cccc50bdd7a096a842e5ca085f7648cd4c8c07b5328143cebcefbcf4c21843815c531dea00f69a81aa5a6f7160d4bbd061ef56134b60bae67039dba96b33b4d533eeb7af7cf6cdadd4a00df3fe50548f3ec1c4f04f381adb2069c984057424bb8815ca12d1781e80024bd6cc40873b6aacb31863be952f0ab7c3b44fcde32e62a731b9dd7ab0660f0a52ed318f5633e3221cfbb0f605a7d077a0e13374e74ef2f5c293e1164c6d9491e1a224976223f6041528420f8a12c7860037adcfab3b085673586058cfcd8bc9e077c58b21c4fd58b4bb4197d3f466e4eaf1a6704f4194e98482a585d32cd75330804f1d0b5019d2c3f077a5fc13479d13a1453f7284c12eea39bf5776faa75ade843f2753115e356f2a62b8967e65edfb12551400c7c9c81e8133ead1b750e9d0c55e64e4a345e44510a23bd3d9b892434a1b3024721f569f435863348b21b5f284b2bb8a0d521545dc72e47c250834fe092016585e53c0da051c773a14e0ac026fa45caaa156d2e4ca52b37419b16744420ce0e6db917e861158d31ff65b71dc73aeb3f8e70818b7e75dfc9464fadf476185f236c393dbf0734e4cded017bbf2b00e6835feea4628eb95038e09bef32f9a6c184b5b6fb2c1ff13865deec78eab7cac6cee370efe4d81cdd277cc16cd35bfa739337cdbd8360cdd205be8835d9555ff6cfc847da599d29acf4370c875961e733afa79df18198a5958fd78d095f8a4d0ce7098909bd4214bec2f789476d948973dd6fbaa26890a5d5b69feb21b591d4c6574e455f377a055e8a7d1e0408d9ff6244b06ef4ce229804e6dbdcd9434a2454054101311da4bfe1595684b070a5db496c90bf529149180af250834d337597922d88b0a8e1096bbf82e1fafdd224f952d4e66cb3dbad46b5585cfa709cdd8fe4ec6b6d2300c65cab4914e8240af486a17634b71230351e1ec0657279a120d89573c5218dbd71fa1c694c29f7d76ac0094a97d0d3e4ec66473a9f1877edde8f63acba98406d1dfaa740d89c5cba0f43c31e67a842763bcd35713c32a8538f0982642a923a6f9d794c2ea6c0be4c450dee8f6d6631fb543e6b70fa9978e38799770c5c0214344fa824d3ef8919fd488973c6bfba160b7e340aaf8efcacd58461c7b2c49ab9056189b0fec5fc06b5f9f6568d22ad372c16a2497576d848e8c5aa1eb2f983f267e56bf86b15b24529c9b60a7d896c9b2cfbd7ebc6838680abf83d803eca36541a5b7c2bdd0d9e85c948eae3db8c83aa1449a4d015222df45c3050b7b972f5c16fea8fc75284ddf07c3c0d053adee1307c187dbe9a1b4100623b1d83381bc31c3872d37b5689ad136c512502447594693564ed0579beb250dd87b6048d1b32a05f0ad2e49a2d479eaec388c19e91bbb4060c1610314dde684864870b03d05d54c35e225d4e3dce942f6a37ab0df13a77f5af9d55bb06b759c842dd3a3020bdf68d19ee50887f5c62d8a6e7c3b9ac55694d0a5e6e94c0b775fa16d79be2154a31dff12462db17fbc3fca61f938898b34d81c394d5783f9c4f4ac2b41a0ff0f3a75cdba145c24616698c7e1fb18f546ecc17e403426f96dad1ed69e358b3e5090cc9d0f4276e52068b518b6ab7a7678b606c412e4edb609f0bdede3ec96314b1ce5711f67ff68d9c74a9893ac37ac0a9f28538022675efb3432efbfbbb32d3f76fd7efbb397a687bf26b4e7f768bfb93fc1e1d096e69f1a1189f27e56522eeeed7a3fbe673f3c34bc58be3bf5869bb1029359493791e7b61a3e07ddacc3e64b46e460a59c29f5a2a3546e9031ebf3db05ec8b406e406ba2477a7db0b8dc1999fed3b6179e40296c4eb133e01be55dc14e615cff2afd3f7d3dfb270d6458f686f0002d77129c77829dae823aadef223888dbee2a305494c4aab7b3915ea6fcc7376ebd6a4bcaa89425929a463d2122da2a9845d9270bb30c5c33aa3ad43c941a06bf4e43b07f2d3f517c6601423057ef82f274075c8c25a688180a4717eb52fa5bddd343081fbf4bb50fcc0b81a3d51b03a4dd31117baeefc55c66cbbca83d6f0856cca7550b8b2063d0b83b2e0fae557489b92abba81c79c01e6389767bd334e2c729aaae409750f0181795066222650788db738ee0851744a663c97ecd3981469ff96f8a6ca31fdfcff794b61a21ceb544dfdccf7fa68ed83c5157d89ef17c804d96f384ba06c4fa57d83d8ae667c6574824fc6ac4a988b7f83745fba743f38200d35c399d896b3b56e04ba6f64e3144c40e088cbac822c7724b98d0c5dc7b7c6aae14021424d91e622e247baaf8098af1c26d7452e7a7cfc23cd8e632ea57a2c562b87a14c992b236c446aa8a9b5f62240cbcb2b4b6d81d6045718d7e15236eea728873fddde6a4f52ffa33619130ecddb44ee73904eea5b03b29c137fe2a82021afcd98fe08c2520008cf8f100bb35c9b8e1e0db9da1745268950f5929a8fc976dc92cbc81be861109255fad65c3b9f954cc8470aba1eb110d01b59f902a15059a03986b6ae75afca99047fe2da1aeacccfae28bf83b3fa0db1c44cf3a0e1dfca587a6d6f0369b9f0c38fa64e5755e5f8f11d6c73dec70a20fc9dc41d3c5657bdbb04017d6ec1d3960786a14bea52c3d64f197744182865bae696671c567c28d99db29365b0780b21d24735edc0913cb0514fedfb208cf67980d162c15e6ef3ceb79c9e3be10e3677f1e34fa028a7270476091d6f9f3c86149ea9a47a5129c27db21d2c7e54bbc3f4eab36eedfed87b683ee42ed01550ddd3e9515c253ccf7624950f96dbea535079cd9acbf85f456b7678cd6c6abad4781a769db3f3fcda9aa39f7e07921eb5fd222e991333f9608b78d238a55252da005e1ccee0987c5a5fdf422bf646d4f85ccb60cf6d8db373cf1ff25bbdc640f58b4a36d35c28608daf53ed75775bc525d50c064cbe206914547f04051f49f49d7db699fb2b57d460be4c21072cdadbb11bbe556115c0a943a949cae2edf65ac1c804285d9b8c55f2efe983cebfa7e7dd0057997188ef66e5d521313d52079105f9bb23ff13dac3e909d60608e02327430f20c900feccffe49be471ffd37874ef3f02392fbdee1f20696da57586763cfc30e4b42e53c33297e6a4f01de7684bec6a91ae4f12de24f80f45adb74f7749cfa2dcc17f19a43fc1be3c755c45defc4188620d60c3d894964ad303a075c0ecee30b5332a8d121ad5d881264f69beaf108d9f0f47eaf6207d555cb98f9fd96ce14155e0bcacbf460edbc60503220ff81732aa9dc027c6b3105265f36964e5100c258140e7dc312c98f737383d1f09d33adac793de085711546e10d72f5d78b03a1a58326a98c1a442ac0cf1eaed1f4d3c227aebb49a6c8c6cf629b30bb3f3e6f98f378931ff2557ccb066a8131dae16135b52195d30a18e08b08a62dc86a402650118e072168313da2735f1ba9eb1b1a497c6072420c5f822c17c276ec6c404650baf2b249853f8dae51dbfc5f2c2655fa278bd4703e9aed1270667138e3c69f3b59203b17753e7cb4a584a55eacb88e11a1c98e219db57dd61b01e59acca778dc55cbcc3618c88ec8795451fbdd8410cd14e54b0289ed4f886e5f5eafdd73aa1cf2e74c4f997900c7e968101d53509de0ecc220de1c4f71f56a54377c10b051d727df567106d836d087116de5b62361c019fe95f7e834462c25fc18b53bc2bfda190bea55ab363e1aaa832b096d72ee49caa9e623f01abc0e421d1fd312b1a62461bdcdb19cf5d7f6592478cc2262f8fa9e4f036a1123ad7363021ce63a73301127c327b5848eff1f23c5375a14d6b8cb07d385b32b46fde87c60de60db8fdb2e1358f43c6c661a4e0e9e84f451b6df973b52f49d4762171d3372308fa32a965e3815b7fd77e47a47a19fe0d2dc25e69f532d55438beeb08ec88847299525b9e6e0d953fccc50cd6ae49c0fc796cd9dd4d74242af48edac2921272950f24c88f4537430ec4d8f1b36e60c4a2e1791067d8f8396a27f27cc4a3da28a561d85f89fdd2e4b18829d2c8d76a4b281289f5edd617e4a755683188de8d3b2a5a242722cb3d60b77e7cc04bbf77b3367bb180a6119574e661c355e4ab6885b92cd56ac01f9c09968280d10b18afb631ad34a226212f70603f66465622cf50ce65b099c6acdc408915d9a6b4587f524d7bb67f1ca90d099793b4c19912e9cafe0ec259bd14b20e99615171d6ea2b3b98fe40bd210109f55ccf0b7bd08f0453cbb54b3d309a8ccd01e30c91e15b661f853f4bb55e26e2c3402b71176001ffbf4f1566f74452dea2cfeb596c2f47e1e26bd3704d4b14a07eb66df31dcd6c18331f89829aa8f763aa944f6cae8f8e4737040263113adce2a8155a7cebef67b51a2bff74910d9277d99a50d490d50f9f5f82defdf422bd606ec2c36f01ce91b34915c264f52f7b527134a32109c4f6268c48a6e8778fe303412c0bd668319cea2ec6c5c62bea9e5d5f39ab868ff462b6a927680ffb851fed2aa4a4c33aee5c2508dd264238bd666bca9b433ccb5f2cec2350b0f21efc7b2971b09cf19052805bbae85a81c6c19f07320a91d34b1eacfe96855ce80cd8ae9b4d2ba0a9e6ebf7fefba6c9e05d164fd6fd73ef5b2cdcca562a7d9e4260711bacc5553f351d5e14ffac636a394cf3c00c3492207c67fb36df510245ce8594efd1ce6254d2f83422e0cbd27bd1c8ce954c2bb0747b0278b7daff7800a090e2eb9715536e3c161f9ff19b5915b13d5786d70d50f9cbe39ed6ddf438b4a6ef9155f26ac62ad50df72240994d21aee45f7c84e8e5c6f4f99f6457ac945ae91a6bc0ad4b016f344043c60d43a4e3b22af9ae2fddc1d8c6945794d400244e2e0b2d8ea6676fe2129291f0d4e835d1e43b348f300a581d443ed7c1937cd986621c0ed5a9f1ecdeb0354e53ab84846dbdffd5e5775c87bacda0293f2ec9fde91592d081fe1ac6e198c337998ee9b7ddf7b9324ea196ba57314c2e58e3ea188f2861fa6a5a4ae2663fb827ce0337799dd01fde59e9d20ddac8dcb6936b7869c1dfc2dffa71a668d4df79711197ce3c23dc2e5c2b90fb28e9ad1b11a8ab8270f697bab0ff74ee9019cf8b135678c5437ad304f03bba594c85efae1e5a5c5206b780d7a04bb9dbcaf290a72ed626977d3f1d7669427cd8ab2bc28a09dcf74c7beb54a6506023b0bad722c57ed9b9e9222a7e03eb10ba3c64ec6ea572cf02475dff1654a88780c62fe882110cf7379de1eaa146d6f8d7c4e6b0ca3e192d3dbe495d70229b5e225320a64ed623eac33b007403c3f236c21d3045836a6988f8a3e8eea1cc7279ec61112b8cc6fe0fb3aeb292e2cafab1c3151f69bcd504d6b5a1cf4bbe5c6da8052e5c20707cdd9d6b0023fd25a50c1aa97027c54a0f6c17104c5764a6bfe70e0ef0387125f6675fbf202e0a35d0981ee5bee51ef37c946a59ddbeab40ea8fa86c94a596db5bb5d36ccbab1776b2e493e3c20b7c06b48154b8ca78370dd3642f744f656007287988977bf4d3cbc3d5d4326a3872dc8b0b8d0bfec5d3b66643ccf6de7603fe311f7c404835644b7d038fa13f32fad72dadc86b89296ea5067e8f9ff9e0c44f2db8b4433c2afd16598ad31c01e3bbeb16dd14b66863a2017b0c5f5394e34fe33bcf1f69a13bfeaa55893818407cf801b35b55842dcef2a43cb15dd4b1519d38143e37edda7df62bcccfdf4f274e02d26eb1c7ba4ae9bf74689e0bd1f55eefb73c2aad121c47f04ecd5fc7f2363a3455097bcae5faf27a505764b085721e0a62e6436dc920c100b782339d01c713c12cca126fb6ef15daf33c736ec8d42cc938fc2e6c0f252b8750c74c3785e3cb35b312b0d63feb8717ff4e36adc272a4dd2ecf6e0cc8e91cc5b4906b621963a0496dae65a7ae1d11bfbeca69d83cba4393aa19e2d6aa69289bc97e1dfec7c80ee0ccd0a3e923739dadbed2d9646dd81c3dbdda1457b7c92a77922657773296084cec591e63d85011c14d2c1fd89ed8ce0c2c2236c39ed3149c3389efc218a8f3de00c8ee0550f5ec43b70d4ef6ef1b539ad6ff71ce5223653c613acbab29347a4b4d73d92e7310ef65a984f6881f6a9b0cef2d60d649cca613f95ff7443e484b4c70a9d2078866aad83855baf9b70a6361542c9510c49217c6be4d5df8798c064acbd64d3a009f4611b5f8a2998b181e6a6a76c8845e62bae89573d564a14f2386a4a29feb0d260f8d4b132e4793fab006845015c4f5c1294e18eac359dbf19896a6f2e25ac6fe7fcfda86d2ea35acc5fcba91535ec0ea52db68fbc7758e35c7bd87ab5d985de39aa789dcb962f1ae040f5bd8d7e31a72df81cb910b77dde3997e9ea2d616d54b3089af82fc2a6eea75957adcbf7e83f1f7ed9bd5c52b01694b7a78a7b50ddf6f5589e5773eb0f4c2634b80a2bde6dcc50c6fd2e1a9a11d2511fdc2767c43719daf643a1d3b730230c099327e074aa5456b669a7928b470563292d37f0b0104c55931d62eeaee035298802170ac258f1655529a38cbf1cd3361474cc1d8af07dbb82b3d75f3c2d455c90753b631c6440a837fd48fecba0644fbaafd8cb1fc02ad03668183dc1b3cfc01f5deeda4fa4224d4e60c7be1f90c5ec0a26f1276f0c2ceec4492a6609de9e05228ebf68bd5d4eff9088cc3cae4ed22bedbae26b024507c4e17c0e72300a24588ea36bcd9e20bde36923b41381c786ca357cdc9614e7476dbb8e4f2a53a6063fb56889ad4e2ee403fc31914633868d4499192b3d9bcef03f85e62fe337a8b34b9eea5da7d04a48a89aa657614e14dc902289bf6e74c46679b46641f0195933be64da8e24402387e6e9a53a49882564b4f71ac46e20f9aff09cff5f7cf403d5437690321e304c7639c52f1ef6d6a2b0f1fac15ca3de266bac9a4957b5b394f64892dffbfb4357d89f596d5b6bc81eb0d2cbcd359c3e7cc601275f541b7c2f5869c68403e058bb10cea43c1a509487de0b4eaacc5bb97cda71305eb5a333c6266bc53dc0d63026c03b17c7ffa6e9648aaa05bf716db35e21b95972b2fcb5e35048b082727d642da737593108af7a22f0ffe30a5684809b6bbece00555a7c5f1df2c1fd585f45360dd0e6df53a10f36d6c9b93ec81a9d499d63212e61f08cb4a6fb0cf5fdfb6563a5c7cb75d8b6edc182a15e3b072adc38f25e50983869371674eec53010c831f4a3f1519fe122409b3b90e8ee66ffd7a1559e42786ba1d710bb0bbb03685bd5e92a3cea8a79de8dbeaf091c66f5c19ab3096afebe9300a6d2dac2d6bd7e0e3b847e4048f29413b55810436fde98f681aea96375b0b5c0adf1711b64db4413c3b456a815d0bdd4db685b183a2c794976dfd7562ff860c380408cdc9a62c0d34f5131b8217d8d20a72b3eecd59e6d30c925f3e55a20ef0c219c52feda5f5e0fd1f39d061981e6a94ba56b53aaa72c47298205c322c7b363ed546a71ed70a1cef0b2eb68bc8680fcc71e5d437b2976bb3491fd0d1cb03036e1ea31bf5e5e34302dde773c5279abf80d14d314a022d943e5953706a606f500f5cd84117749393e2cf0929a3384365cb3c40d9dec95010f34335429796102873ef3036122b63236a4814e8e64c5dc39ed22e9f1b007251fdd2c910b09cb189a71949271dd16b5ca9e0582f599e8a987f556dd8a7fa12ead225f57a89c36502092490a5a0c6968b20d5b97e7d7ae2d88a8be0eaa16e16798f89d1c1b7bd81679da4258f3e860c46e0f1b0f1a4d43fe1cd356cd02ba2ccbf4ec1aa83fb4df6ef6564a848779d0221cef68153e7b5c2f172255f85cafa89e7c21b1007e976eab5de8eb88d3e549057235158a4cbd7a363458aac2317352697f3139008e0d6a8649186e42ef7a4f1de397290a1de592451b430acef5382c21bf1b7e67c7ee5a65c246fb27c32302f47ba21755f9bcefecc64d9fa9d3d74d550453c65c34a9ec5a112c9d47c5213f6d752b75aa7ffff74d9e3c8fa771f3ad91e3816536b3eb6d94546a836f60131e0e2161837e32360d8c6d3be32c1ead8023fc9bcf782a26f470f17ef2c7c107ed449762d2d24a74e2ffa95c7de68e81f84e7b43420767c9941426d5975e6c9d088fdff7f45d5bf9d2705b31b8bdd564aefbbdd0941bcc509dcc92695b06701331cb742df10f9c1b3386108a6c3541f2224467d38e38fc8a9ef124237bc5c50c1a2c797d88843ba42aac2203e7e92af986faae37295c3f7d352ec2b08ee669fd93fa842c2772c1954540fc1f8ee24873e1364d24272cbc8f26b7ec91182d3c8625a7bbde66a65a9ab50136e883862a80836361f7db5df95812e90c124598b59a2b87603bfac7511fab88e30cc8653e6aac51ca860b79ae510c52702c2a2eecd1883d9ad45f98ec6cc1fe5eb200aa2c6a690bfacfa2caacd18e5f347982a80b9b94f575d68c2fa33832bcc39fc16182544f392c74742c67ca92706ee2752874d2506249d88a7dad3d9f17a56e56ab277e199abcc6368168a2b1705c87accc21e75b7502036cd80943e77de4bd85464edd59c0877511cd763a44a751a1902f0cb28a0a96143aaf565df2cce825877abeea111e1bde8be4f7f43f6151072a0f009f24f69fd7c5318609e1ca5ea21d1bc7f99da00a0f80dc661bfb205793cde3f375ca55452912a1f8bcd737baa1b6c1431ff1effdd4742c2a6dc8c5ecc5fef1160c1fe3a22d0db4f8d60b74eca73ae1dc3c8db17e6802e7748b8b1c930c311103c5097f28a47e2c9511e48bc27f39181ea4960488d0b4a944505f42d4990039a0631358aac016f460428a24e95960c8236409eaaf4537ae6a2ce75692ba1cb546159377be6cc1a9326c04dc6b0c0eb67b11601b22a1b922dd301d0f6cb9249c18d1b63cd8054355357190e283e1f39d7b80ccac1a6a25ed82edcb264d5e7700fc7697b5f5ca631e20d8ded6e00b69ddbb6db4f2aa2fa8fc6bcbac63c86a04425bf8392a59fa5648b674b2419ff352e7f47f96fb7ef47ba371d97cea5715ce8994e194ff493a49fb9fc3759ceb2d491dcd1410e95ea46688ecef37c6444101bd0dffa6110d5a8f4a24d16550216e331b159eef7b48eb2c094f9be4d099cabae598c12f2b4e92a4e6faaf0c744eef4440516c0d7404eb1bb9f2f906c11780be0d257a2f14da74c914ad3ebaecb99a2cce8b34a81701b688ec01dde10991603a97e23ffed124b1911cb9f86f4a5fe7c412bd812dcb655802d11f066f1e825fe47291f990f6a1ef09adf19227f6b8d9d3a441c6f11eacf90f1f8e5ea815dd882e3e6cf57fed445f70168197503f8ba78fdbc5a0d63e8aa8381077ec7e51768a5925dcd93c6c3eb9e2f16bbf365f5195a4b7f154012725e18099ba92ed31a75ffe859d02cb3878f6b82dac6bfafbf4b78aa4f815779136b21ab84ae65d0d117b47c9a774fa2bee52e09be60c2550ad2407643a48825b488a03bd39eb722654cbf208fa5ecc37a6f4704278bb82d73b2d53da256b634cca25e6d62f9d84550db1ad239e16dc448934fce5d9e3daeb47fb326b09a78bd320325b9c7eb3d6c299e639cc1988f2a3d807df87743c067ea674fb3348a66d6a2271a8a42f05693ececcf29aa296760e1297fffdbbee5c7c68539309c254d12df13bff730aa376a97d2f333dba4e37dc2a83917f5d7cceae0117164e6373d4eb0c9a3716fc42f2c978cb599d3c33f2a00124b5e0ceb7b03bd8f2170919076e68718beeb4c12a1319f7c9e86482b3e00c1b817da035c7d589e1635667ab14336000c1ee5b8ce7fa41a401f00248de167235484d3a3c3b322e3520144f6c41414ba08f51c246b0b40a5dc4a8010c7ad75d752cf9b23fe2b5940828158ceca02d780a08009a3e923c7168a1c13895f41dcddbcc0b9390c8ad4accb6f0fb0992a2940907c1f32fbc68b426b7412ee3caef469f86d172ba07d3a03a8e85ae34f961e0fad919f45e07512a152fabae263415b176f6c5367249e7ddcd9900afdfa84f6c73aec96587644aa50ca2b808b0accb1db59b97f9980946af2dc12c3c4f89d0b15b3d2ba61b47c99d72a9a0f1104c10ddd278cb9d3d54458184c42e3515db08d70f4ab609d8562e682417668b3c7fb0bf6547e3783632c3862ab328ac231a6760e2ddbe9ea5db5bd0f18b09caf0c3fd3b0092ebd34d27cec73eef087f05b3ef28b58a739db918e57f09f8284ee924af8cc47ff9eedcd194c231edde6f8cfcee337b7f2dfae8596c4f50cda0cc3be3000dd00f6608dde9d815bb6b45c7ade5b9c7c676d1cd3aaaeca6d558fc8b159de61be1d331a5bd2303b52ffdd58dc7f1001ede517f7ee3beaa9937083a208c3e27a8adb6ebf41817e4ded925630240a5dcb53f127e5b015b073f62f5fe6e7bdccdb47bfbc030fa9555c81ac92f548b46ec2a5492321a3ba116d2d1079d07915755a8dd773afc125f8d0e27011565abb718c76e60870e3a49aa426f5e9122fa4f94d8f73d625c240bd0af8c86c53c597edcde46d6af156e97750fb235e562f9179495c117b43ff499ef2d9884f82f735cdc37a7d1cb030a77a8ca3d9665e52497edfb4a333d7380df1f5caca37a2997abf6ec79504aba033b0ea1a78907107ea6637984f0899126e27240c37f609259c9edc04c9094eebb5776969838942a99b218b08cee783e95d86a17b07e229c6d28aca21e90d245b27463d05b3be853d5348b994d19c58d58e1a91a0340a590bb855714ce02a521c3e8700ba9d0cc97a4b5627a1bf556873b10402afd1c8b9d44fa4ebd392ce65e3082388640bc861f02fa3b45a38f5a179bab97356f29ddb8fb63fabf63388366c47c4dfd611c3d87d7faac1518047ef9c83bea3faf74beee30146bbca5373325dca51c0a6d9e39352ada3e989882b8e33a14281a12072c346cb11cfbe6e272b7faf89bd61cfaf523f743a35dbcc2e99dce6ae71871404e6247e33c831fd360d3fa4dbb99d9729156c5011a4fb6f16e6310419d770af805831d13897c0358f1385794badd87566f66eaf307c82bb8caee5b0a67de55ffdefb35e5b9e8183ef2780086913d8a466894fac194d283690d336a39719efd9ea4f763cc2aee443251838da37cd862026e057b29aadde3e50f1e7ff84474466fe8654e33a61c54a830269aeea408a75f3635c45b29a0ddb4f9241896e03413aa2ccfac2bd8efc949d43d507aadf41572ce5d73850381f870bbd0c4385d03be2b2186762eca42569d2ab7fe31772026165311c63ba23763f43992a0283784f8c95f8684d58f65a3815d833b5b6b999dfbd9c6e449a3a6198850c72accb049f729834ad2c5e82e1f644d8246d70e37212fada0061ca8618962bde5ac9ec03046791428ecd0a9716add12b51eceb19ba21a744926e31117f586926c2915d065f5a7104f29100fedf51bd651b9295c759dccbbfe40a29a619408be9c30ad855f7bdd044d5610c0895b2097d45012c5b940f812ce2da241d8026171746246b180db0b89992c41d4019f4c628dd03e52869d4ce2fdd5fc111966fec7a2c8ce0837c94998fd3e9337af058e061cbc4c318b2964058d652aadef47c949ad5ec221770d251b5a8c45e4a9388f152baaa9c330912cc60c9967441ea6ce07350af1efc389f293ce6859e5cde7d47c758e3582b352c7b7fd60f057e9c24b6dcedca2f0ea2a4c2eae06347b307fbdb2538b90608953986cf94d94c6f85dd25fc30d9500a2f1521bc0276b32f41a85805ad0a7a4c2666fcd3e7bb3c33f7b7c86dbc8980f7cb470c91afeb0bb408ccf5021ee99511c283f9d511d02626f2a9d165e9726788984d7e4305ef65ae3ea16f0817a69a9a9562ea8a428b50325aa05b337487a9c81932bda0f6317bc5efaadd55ddd0104746c391001b3d519d781b1bdd91d37627b5c8a71005b0d00e43dcfcb6bd691d900c9ef878aec8046e9a6ba0857db0e273f4e890d5abc801c7fc538a64c5f118d0807a8e1b7d09c84b642ab2efe70bb580e4187959a2b801ed916ce5a7ac067412812d6e7c52b6095b0b2e76c9d13f4a7158e9816d0f6d5c1d5c2da20ee661bd1436c8749bd6b646f638c46b8d0e642dcb25d7fcbd8ad533ad7fc6341a3730491a47f80ae7b78af732317dbd7a66bef6fd822c028102db06d09678f3c297a012405efd3c5d527ed60c1bd5fb1cafecefea9c44c98208fc0112969f12bda0f1333286940ed122ca1fde312365f2008f1a3fcf21d2c49692aa5b40f509101c3d3e25b869a1d479def8e45ec80b03f6d88479216655d008f2f02e3dc21bf519f55390669d881036dd792028a1b6929588a439b3bfc23ceebc020e3ca0d6e5df5eb6a47d73de8ce7dd580ae3f0025f9e544d464524144361102b37f78399646931b60fa94e8e411c7cde9c0d0a183fef8430a4eb03c4f8da80e9bce0f403e5231b821c2e5550f949b337c317d2f048cc29ae2072d7a5ef86bb0ff3305e6e38c114b0d28b9a152888492fd8c0c981744b20b6d8e07d63bff8ffddcd7881e7ddc5769bd3fdaa1aeaeb0c0ab496e581368b24eec6c390538a8326cf5830aba7c9f2c1e6e85ad3633fc669ad54388f510906867195410992094822d2c599c2b680f4ee5ff386c30e599a185e4d2b08367e599d36ecd7b9eb1146d01b09827dea3f599c5bea54d727683325dd451abf6ed4975b00e2667d55bb2707fc54aab01c79a316cd9223d60c3e16b0fbc6cb710f023735809a6a44766c7226abced1fd4e82abfb416f4498c92df24669b5f3ded4b5ca7624d1462e56c3ba16459ef2f137964906ee27e60d40eef7d6614ea6b201fcf64b25b3857fc86b5d0a6797bbb40625c64e4e20e194bb74f6e1e132dd84cec1cb0e7248ce9134a722054388fc7d7069b52489183949e0ed2cc4db45c5b49f34534d07adbfd63f9d97cdb5de6ddb3cf1da76a8170077896abbf5ddd79d0568883c8060ad119e95e44a5b5fe0aa66cd65ef4cbc37597655569749d17a355b555dbfe5dd4405c21d9e84035ad4211d001f35cf7805948f48272f266d00a01a2ce2997091ce571c34b8db4a95bcd13e7b3cfad865a3ff6baebb10c7c95bb9109843b41e55e0880f55b613c43d2b52c9b625ff328e775e23597cf0b5c64b3a78490b951c8e7bcff643d0098f49b0bcac4efdcdac070926b295d1883c1bc50cf8d1c46943569869d5cfb9e35158ebdd9fe6f71703f768fcad9efdc22b1d4b049fd13abb0d2dbeb076c582c1a9798566b0e95f237af1d8e82600fa7680028af750e0e6896b1dbd8df0baccf25543ed3891a4253825e5257121a4b593ee4b5736178eef311441fe27ea1d44a57521fea2f96d4f07e39d61bfe4163fddcef460688fea278dcbff4dfd53995b5aabd160cfa3386dd98504e800c737278ee743a41096e3809314d3f2161ffc06c6d7e6958b8c3503d975a81f9084a10e61d00345d71b83af295725f992cba9a987528d6554ec79bd7ba6ec3fa75b4d5839507ea5bf236adda99cd78d5e8160c8f444f7e3b2a72013be652d6403ca22495a5ab50801108211e0306a99f2645b7727b68fc2bbf5de9618164e58f0e4ac2fa1ba0ac1f08625f3f3bf3af35acaef95e487e3cbfffc4acb474f69664252ebbdc2ad6020864013359d1a43241328c6ecca321f3060d1c47caa7328413ce08988cc7ee8b324417e9f49cd6315653bacf863a54875fab983cddefd9ed4ff8fae62cbd2b7cd66cb61ae49a8e288068108479edb94563185530585c34d337197f419f7af54449d9f7caf889ea8d08f2740bbe02e60cb950d286695e191a0e3b3899135b059e6fe5121a533ebf4a05811e4b91f9b698d58a94e0e47441e2cfb94ece5a182b3a30a9ffa18e32ae2f791e52ac5dadce54ef5ce5740d97d1195969abcf4df40b8e9552ac306893f0cb141636b31a01f9df393a990af6ec9c45e8953aaf309ee80bfc5a428bfcca970292e976d88ba97b4f7726b428d19544ce04a96928d31f24deda8dc4c0f28ee639aa3fe052cad0039b98fe5c6e8651659c12f6e7350f0eda67b5371e179d035ca69f54c37eb699beee3eda84e949d12db4fb2007b5f0fd94fa092e63c1ad2ac0cea6785737a2e6303806ad10586a57a14a77358bb9833be8eb6df15cfd7202c5fa12d129b568c8f15a031533e1682885ffeafedc9d154ff29e8412caf2aedea63cbc97113cf72c41d09846bea871a7eaac2132a296043a2d6e17f25e593f60af079f84834b3ab64b0ccc4f0e48c8d41d6f8aa2adeb3a57b61f09ec6b24d5e50f98783d4999d49c6d5157e58ece43e3c7b51f1c81357c8a78af7be1078281dce90ca9c7b6ef8f59ee603e53ea3cb7c34e0554af45d3b4b4b8abcfa562ae9700ea664ddda0577abf5e6bde4a9806d519659886f098066110b670105adc05c7301a6e3dd77bd2d1de2d913c69c80552dc004119fcdb7a406b806e0950d171a7896f97ec0a20c114512d633295bef4bfcf3c308ade41588c30d992c953c73ccddda6824e5a2de580d2046eb0c5907d2dfc7ee170f9f06fe6d09c13520ba32e88a2e3397abffb9b84b5727d30e720fd3b38129dc675842d0f5fcb8592715b47738a6034c597b321148dc4441ac1fd42bfaedfb71425d4eddacde0fa5dfec15e86af8ae94238d67525170221906003b587ea793d6eb83643934359484f3beb9ae5e6dfd87165866f04d540de42e1ffefee3705ba73b6db2fc731061e94595ef2c1ce87444f26eb1e4a420bf5c6aac15290ce746ff895ecd25e3629b1ba440b38c9628e6c15df16d1d59ee59e6a92d1d6b997827b458ed87df0c7e2f6d200c0a6de583d84e3ad1e9cc7d0b97e5b5887b7d1aa56e51db4bd8e29475b0c195ba65662b184196fb7b7f23c6658508f7c097d9fe5d038c3568c6fd1e28e3bb40c267457d62778f366b780517246bf3bce0a7a4592621c4a78e0e823f3f1ea99d6557c606fd01b2f46302813619164c48accfc00c3a3a1fa2cd5617cc82738c139c34faba7cf251564544fd90b52cc195534e2426834161952c4e09bb81d93163bcdb65df1836d5b916168e7e515c060888593859cb25241e8e61f7ea194cf778d2296f705925d4562e8cffe54db65ec87119f39901bddbc745a3693fa73b83e7c4b3e896f7e5788976ed45bd03d79dc70611fb1c64610b32cf13cd8ff46f4b30cce8d04879948677bb21aeb85eebf5708fc6f3a1704d90b8394db51beed529b4cc48ba7c86785f803a80f12154412b4d343f22943ff21062bae129f9552279087629c2c259ff9bcbded7edbc785ecbd1bd8356605c51843dcd589dc58bc0821801cb0169494f391d850dc0885cea5b5291de3331752a527353e4f6fa1600d7993b6d01731178af3e044b74c60bfbffb086262921aa8e6c16b6fe4c25600c66cfac2c7224fba8a54b2ad36d66cf29d322a72a15a0e1169fc0eec1bbea799abc35f26a6f119254f47f4a69f4d2e84f736e24b7f64b12188c9d2d1830c47c8156971c24cd2d9f893e3aae442c9f0195717a5bd64f61dcf627f417609165d27c16b7663e6c217327206cfc4391d1ef80eb42a06e3bbe481cf58fa86862350746965e7f6c40400fd66d65fffe4f9bc4b45ca212f39989917d3a18ab51f6f68b121ed9395b47aea3ff778130be0ffc85dbebf5c9e3c1349c39156d9b075bf6d468b61ac317725b444a1851246be1bfda5ea2e73903c704712d94562ef0152f3c6c0dbe33abe8828fb93b30d4e613b56b063814f6d145b1dfd83b935250812c7f20407275379561c346a5ed80756fae7660c4659c18ad2c7d457b5d52f397e31c337391f5bb1121babdc78b9d38c89350bae4f5bdf75e1d8a51e101f40134ff926b680d717d2856bd00c4ec9283234dd39884875c41399db1d4d1c0026378ae1dc1c02deba07f7044991c0ceb7aeaacdcda9548e1cca99c74e3dbdfeeee0cf715c58fdb7fce403fe5980cfc64954c88a570aecb437e9dfd655fda2d52e8477958868c6165642e2cdb03a8ff3f353f0bc72a7c4e00e489eab4a98504b77ac1b392e91b677e9c92ccab5dd8a9d6f6a4bdb95857ed03412e0fffb893dfc04ac8cc3b78fe19030fac27af7e8d7df73ceaae84b5502f6ba8fafc8a3168f4429070dbaffd7fc678b309cba5a5cd730ac41fb8d9789b029c1b2d41f8f5eb7525695ab066c087a8765cba8b142f49458fea7cf05c68700d20c4a828a8b95250ec22ff1eb73ac6882ff6225f369efa3fe29a35d32b6e7c69c9f84257d43a33081681f3f4f110eda63f571f946952bd23cd501db853ed7e4bf2822424494a2c90728a299437a6e869c2e411edef4179f2622cef90294b2caf3273c6327fd4ddc4dd82f8318c0082c4e741816ba3059978bcd387a4badabf1002438bc5c5103145cc60f46a89ad0d4dc2b2a963e63536bd4573080a3245aa0a4ca00156ddd6c2bc9cb5e22f68054458c1f047a523f99dd428d92d75a9d6b7063ce77a1fed7939f49f8848c176b642968152ff8535be6f92e1d44aeac109ac8d2065bbf537b8eb53e1cd787aa5dbd4eff2d3f2f71238cf58620b1c2510f003ad974838d55100c9175d5001f0ceb75b17dff9c1570593f2f8e9eb9ba579309073d21ed629d5c58eb1fcc91244b2f2362a66a35009322993b4fc1d46669fc12e637f4b234546aab8168820b9f5b3cd1b2332af8ef18265518f4878e484234bf0e5d21954504498fae1d2e51fad0185b3299f383a97b946b8768142fc5c360ed01615b172910aec2075b875cd1173b11072163f0d105868ddc9c36f3b94054532b0ac0a8f9e6373c117b17a997aa7f988237047cf23f860c257a57e3d8cc68b0ed697427ad8948796f6bc423b6a02ee35d25c141ee02702e72d05975f99bba891d08c710805d2d6952b427912a8a760b88d2945fdeaba90c4c206c6e246c2b3ea18f2281fe82413576f3deb2f497ed6d24d4e92982b5507e0032bf41b78bc96682d09c47c445285b515ca928e9517b35ee20636543b8bbcf62acdd5de5601fdb053a64d5dc2e2c1f03af6b5ec1a9618191de0c9c8297189dff08aff3232293f2d0c2cc4bcd1ff77c7f9374e3bff59f732b5e2bf83f5bde461f3f534f9691fc19185cf7ea8d9c8088310538773cc3023605650fe82329b652fbecb9687844a470af34b01b10394edb25f72e322b10e026ddb7a5cb505e668755169db51bfb69c9021116b674751ade862dab031d084481f209faba86096371169a69c7e3196d6d8e2e5636410badd021533e5af6da3a69d3d733aa24215e1ba4d7352a1f9416747a3713826b57c7f729aee3b43a266d0b34cbe259fdd56fb06a5b9a1ecb4503264104cf642d1ab02446acc262669192d518291ad395507cfe5cc9632aafe5a6d464a2ded973bb53b533f94a8f89349b2d517134d9f0c6c86044aa94aa2270ac5965cab4381d0410a15f707b9a4ece509fd87f839e11a3acb27b64598b7d284dc5a8f5db18fb60020248ce91670c29fddffca5aaf221674aa02b265432252bc02913e9f02289263ca6f8eef99dbc5cc9580ef6c5a6a0ff755ea0194185d7e155f744d7fb5774ba3d5d3b74c2d4ee302e6db2737a6dd0801cc7d46b2caad110d2ab905ed49275f6070a51b19242649b05ee7351667777ec63118b173a63dad56aa0425f6b9e6d647a7f119b7f4b099fe2c3111e0b08f13b2ea77fff6157758f7deec405f9f232410593df8cbc4a95451fb75b59501a33983b92be0cf20a39c22862ffb7b6348e1936a4c06d1a5348aa953156c855ce18e02083802dad68a7adced7ef784b63f786bd7f72c7fec8ac1c9fa9ee9d7a638c7ea5c21b71b31ab0e4c383af49ac2aef27bdd7cd66397ef7ca6c3ad0a5824c21fe3ecf5f9c2b2a80f2c068f26b69c9769084f8612fa25a3ec8fdf4d072aea74a4005f3be2183498d79ed033596d128b549c72c2b6df9d4dc916f1d8b18f4140adc6a22a01534c1417eb7f293abf0d289d3768f23d3c9a076a710870ce9ab9c39a85ca1876aa30b30a8a67999f78643f62ec432887aac3928d311e8505e61a6fe684abce37a9f837fe17cfcb3f4ceb1050dda8b83c633b82a42135c18105d40b98c763d41db01c59459dba8788b239814aced249700318d5cf8a5e67c967beef75cfea406882495d4fcbdf6d6497bc9e028c005daa30fc693928a656ce8da96a7bf41a65a7faa5b1d443f4cb42a54ea51b3ec854bc3c7110b581f98b91786116a51e670c0fd6ad0c155a4027e5ecf0c46df61e5c7c73692a29df0da8205696e7657deb3b6f31901a6aad9d852d36c13ca6b27aefb27ea4a8b90cce3f34a2b27c8886a677ccd71cc7138d0ecee481bbfe943b3a315aa3d51d010b55555db930d7ef7a4b3d5b5642f41938550565c618d8d40980b22c19b5d534c6282af89280a3217acd7562e45e0351a16a8aeaafb58abb14ca07a742780d7dfa5c7dd0af3304703f7935e6f2151af20de4fa65ff93a5b918c5e098d1d257316566ea17711cdb0bfa3c9af27bd14dbc29630b92db205d95a2380ccf7a5aa4dee69861dcfee2b2adf897e673b0a4f99106154acf9607ebc0dd5dfdba719af56cd550059b2f51be22f286d6b39e2defabd28c74c5fd90075a3c02d8972756c34c5306d56cbc280b7713ed1c3afd18afbe08ed0c89434b05c48784b1b6d2c781c13ed283f62a9675eb6ad63f26a2e41d38d2eef58718dcd12efa308b896e5fdf8664e4c62fa95efda04dda5fc82677680ab221f5365ec32ee93f73050dfbfd4b3772e84f27a3d1620e273a86242b90244fa8b7f37c487ed1779462153ebe4429c378613d8614dd6e06881a5785b7a2643765b32d4d0f31cce79d1c81c07d3f67db70906479f4b8d78f75765f52702fea480917b34e869288874a7b7c2705d9ba632cc9dc74e0063cfdc1823ea9013c669c1c69aa6699b239d7910204447d49f17ac4b30341d67b403287e4317e02b474aefefe4455d1717ed2177342f3fd7ee0a51593738e4cc8a96022e9562979232d9dd5e14e71c3a5353a09cbadf03bf6fe982646ea00900026c81f92d8e5c95d3ecb40fac1027a19bd68d155a0b812c8600a6f793bb61f416c7e3c57b2cb2bb1a6eaf4451c5f0f18dacb6c664b58695aa0190b0f2c8bd31c44a8bf76e7455acb50ce495301bf652d506ab1327b99a5aa5523263ac34d016ecbc9db9d9d42e38a19ce656828e584016ed9bf0f097230393d1cc9277d86032aaeeb2f55d0e928003f5fecc2e8976e81bbba8c29a65f538aa4ee21abded22686b3abd401baeaab7573c6067f39e772c99a1998d1855e0769af295f76ab392d64500e3af021fa2da34b86b732e536cc748dca457d53aced04894875b5069a2e98242db4204e8a7dc640d7522737cdc6a81c689de880959ae72aed047eb049d1b7bc155a603e5e2bfc75e44126400ffd677eb173e945946f2cd3084a3a3020cc8d207c6dce1b56874fde38700684784d05456c44ceece2fae7d228f8dd05f22b40dcd36583eb549145852cd59163e7f8fb0749fd5692c966d734ae6886fb9420b44404a215c80daf54a5eab2606e1b1e2c9b428737027b5a487e88a648fa3860617dba9730303ed8ab909f5ec468c0009316b573b26cdf0fd4c207f56f883cc2c0beeacb0ccad4a0feb1eecd71423f71e7a39e6112d3e895b3457484299043ae64b07672139b52b9db2b56b0d51dc47aa01b884af14bd0323b358244259ba6527c3b570f8f18862461c0439ac3494178d157ebda72d34c3ab943ebaf09bf6256f2d68d30117f20fde20f08ded45dd41e87695feb16d90fabb2b6d2d5db07c432c7a7aa5e1b33b19915eb66728a0a89c93cb959e2eee31ab3fbc41ab1c41bb5632b03bcba8f9daa8304c37b703b3e849d0931b187525312adf8584e35068f9f644095ab74f63e4d0a0c374db69fea41c1022b96cc35b64e3041fab23e2042e9aa8746f9252227bc06a3a6ff5c34da7daeb338c93325ab44d7284df835f70674ef07937affd7cd8731761776e432c3aa0769a112f1b87af9092e73236d06de8e0e177fddd3a6c619e432657f174ee1c946f5158a7bdf34211056f75a47cecc424f56ffea884b58ff16de47075c232fd525ea5f08dfd444431587bc50e386e05c092e4016b98c131256d5c10f9e186da51cce2970d3f6dcfbc0750596ef0fd6caf9138e95dfb58dbabfb2c51fbecc65fa6eda4ff67cc095f99303523e90951d897b8245efe72cf8f4dd3c18f4fc661a4e35a9118977520c10da257a11ce67896f0302a47ada8fe39527b98ade82bb0de961794a5a65047fb072b336a466f9a45b2106da696ad5b842f175e5bae61e9af1fdbe8d3cff9dd198bd97c402a2ee076eb23d9588fc16d4fca864fd97325cc8b5cfb0d6a98c9097581ce6a4c71fa06279dc84bd337b651a707e15e9e360402fb0c1e054b4b411b2f6f2a25574df82a7390a51dc5af9ef4f910c7121630ac0e2e732dfab4f471507aa1dfda0c7aa447e1c403992cf2f33b24ed73898a5c61bea6b7e2789d583af4efc103d332e2b68a0a899f77fa9553f0d69548a4522f369b87a21b1c4dc20858a1e90bb67a04a2b3def49e3164dac3db3afe6a35cd5c22f95eb242223ad9c9c126cd85a1a676bb2dd891b77387143ddfb8f00018521e19741521c5ca9e9cac7b0a1154338ab32f5c56e1a647af7afb699714c4d2ed97087051668ab93fe0b265aa5519dccde8510f0a7cd200234ec6f5bc3e57d878f5ae7a57001ee2802fec93d6f8cb723d58866a641f9b9e92803ec8e9a64ce47e6f01e15c0086aa3ac12266c176e2208a5666e28285445b05387f0fe5e2688f5fd7a87632bbcff6da7a1c3310fa42f57db7f216ac302185655f575ea4782c763321a9ffedab4c3b4c551b87b871ba7c0f3740c34ab02428cd5e16d27cb378d711d325ed152cebbe9ff87183f809ea7fcdc4b897526274d33bf9e87e6aa3c7e1b84760aad906756555d42ae350f5b7d95fe857dcfa4e7d0652e1adcf0f0873b433bdc7ddfbac6025dc12c83c1a50303c5b474457453eba331fc624a6dc7a4275f169585d7c9691ae3afdee0ddd55d35414603444aeeb1f869b0c1df2f22a486bfdf843845a185dfd6065c28afca7d49ddb356f65c28e3f9289828c6b7459d9cbad8ff418f7de33dd015d4916281da6d00417aad80b0771b20d2c2f91c650ed5924a69e2f738d77495d30b2781b414fb8c9cc468bec0549dc82fd442544137d5226add1e24a3c4a4e823704833acd0ae60f5556c2aaf0a67a34f2be3467dcdd2357ececbfddc2ecdee036250281baa364d0272846ec74324b80cc313f8c4a5006682f0ca9cbef8229bf53b51bc2ae8d224f79816199c33b4d0112d0b141e13ec558c4edf848b0189f126af11a2d4044ea5222b61b943914f1af0010e001d780dff05ed431f372264689b8e3f8f66f0fbf4a2db3be8183cfc3e8347ccb3a60d1d79535acd59f097064cc61516d6e8202814015c016dcfd8a4a4b453e7716513c5873dcc42de4c6b471ce507124db2e99499fa07725ab5c0123eb6e3a1570f3f7b1675bc43d419cf1a229f8daa550aa3ec495d6d3eb7e227593b1bff98fcd9e8920a639ea7771da8d507a4249c3a2df444232223aa631d37393e5cac8395de17775ea768dadf9ad75d6b2f6ebdecf1de22c6ffaa4cb4085e9816163b67c39ac0c5471b5e4269bc1042e439c45f1f6bea4c34d4996e39fb7bca21d03725caf111ebebe97da7a5aa44bd5ea9724924d2150498496dc765840f8521e0beaab4f893d42c7630b16ab8d8398133f56f0421ce5324f78b001924f312a717faa33f852e7b07d5c235e1fa64fea469cc8e9f832fd8877d76e189df0b7a3a29eba54ae161732b4b930ff509194cf0801b3011ffdbed35ef2660dc6af0300ed650564e20ebc6f4a69d7148c3ce8befbe6094ce60d6262b1fe2a7d3c283ca85bac6bb2846838d00953c3987400448ba00366aabdcf1ece2a9b7a23f664d82e7796324a1567493f7c6afa9ddc70d4a8d6eb3e2b17ed419393e4bbfb262acb49390cd7369ec587c2d45aa3b17f8433fc8ed0b938ed3342382c5f1fe3e2289638731ce94eb25a3130cb4e20265da21ffc78af086d0238540731aa62b76b2b164433f32b8a818af94a95081b25503fd5dc67e44963682ed396154983ce57c0515d89bffbd5ba061862448b71adce155334b280bf8bf410ad173bde44c6980e1fe661f5554b2c1e65ecbccfea4d1bd29ad9af506771a161ec1340ea1ac5f2acd4c34823a630e964d0354a4a2052544df829262226364137fabfce5dfa800e2df2bf41913b81f97e3f4d183889117cff142e852594bb4fc418f725db352fc31b356b679c9989be519cb351a6a2800f2280305c94ceed9b800dbf3ffa26e7326ebe67e0c5987d6a4195d164a390943fd7ef843616ca1f9202348974bbbd6fba728c377a31eaaa25d46b7418dd3d146a6380e4baacffc82f249698f0fbe7a832a7b56a21d68e89b298f393146ff92f5c041b1ef5f705864ccf60eacd71957fbd5b8ef5db61d9949176668f6f36b2c4c0937c3b4eabdc44598fa679c178e9e61e7af086b4dc4c4933e170ad7b40d5cc09315a367fd598049fe2061dc13f6910fd640c712c6664e579b8a25f796ffc91d819c201946612aa708d821f61f539576a531bc696af0f3c2c1d5bfb91c4dabc6aac654e765d78c5cabe63d31da61d6fd0a51f9fda6fca2ccf2620fbe9c8764350a219c06f0422f1d3114a4696747c5697853824acd13095f4af28af8724329826407c0059066c673957961f5455a5e3dbf9efa28bed808a5d0c92ba8fffa3b1bdca76279d93a2610eb5fcbed8fbbbc0628944ae4e31149664ad72a62ae1fd7a64066bb7248ea5e1e509b59d6fd6ea929e05d589ff7d6d1ba812db769609ce909b10d2ceb8e9a1a917759160121017a5873fc6cd626d3d416d88e9549427d22ce6db82df4b23331ea1750562c01a2bc1da3d09e4845f5aa8a28e3e4610556fa41e6f8ed8bca4e9af3063262a5abf16473352c8162e1796a6ffefa64c5e177d54bd71ce4ca7d9a7891913e4b40a9e58147d58b4c8086d68185b306a0a1f7496a7bbf4e48d5bccbf59cd66788ea6bd2341354f2850b6a3516718aad1ef7e3abbd74690ad4b5c8addec4fd6a90dc40c1933c0a8e0f1a4089132f92b8b31041e6e602ee799a5f36ba120a5299b7e8877b34f77faf376830ae13bdd47fb8e8ffd7f6d5a2dfc7964cb5ac525e395f745696445c6bef5409852a775621f0dde83b39eb00af076fd613bff371154cb701f4eb088ce94deaa9478f850fec876d8a105f4746b715b286ac47d5f55852e62550a1738a19b0eef7e9add17bcff1cd7a0e8ad612b50a27ad65384800dce74df7d37dc1043caf2ea898691676ce3b0b9002580f451e21642d5045d5cbb86dbe339c933ad9167b7652889d4f1f1ced1a705667fb8437e752e3fd77afd18bd5c2d1e82bf6cabb12c66a3a918d5cc870d47e13367e6db375a7a75258e05d03c051eb0f39b34c96afc057abac79b36e69627c660bdd97ef9a989d20884cf454d513eaf7d35ad8757803c11491b26bf9f6dce566f70d7ada705f4f71c8de4b8689437577a1c40c7522876069b330e87f328e299fb5265388b00880abad1e9412e28e63303bb76c620c828cadab64d66885ce58261b5f2ddd33445e5e61f96ab9a5b8ad9cc2caacbfa8c445ef2ae857f59eebc8c045b172f7ef8b250af8c071ccf89d218a78a1fc66b538ef8fc343d2b683780f1959654ccee8117ce68478863f267b60c4ced764e87f8658d18e61bfb9e1672966136b16058983d0f811bfc06f75b795442cd148ed9efe2db676564ccbdf4c4859e1fe58cd70e288a8bc475da7d74d7592efb3d8fd375cc508f3f862c83373aa389fa3587e7ea65f689ca57f7125c2bbbf4aa41f9805ed8a0ba5e903260a5e4af1bf2b1f4553918bae7f3a7b650d0c6fbf41891fa351760c04427abba5173602f33fa156f6f47086b251756452a8d67c9e6119b717921a695efd06b95a99e40568ea58d64e65c5df63c239de4732a2c552483037c93a36e8851154818f967b40511818fa727b0a112e652cfbd42ca9c880112cab2ecfad8251df450619fe99831638e6d48a398c9f6fc39b085c8afccd04d77a9625ae890ed30f964918899cc31919c42c2f7adc5e3f9e22bda34ff07126466d6a743fb6bdcf33b983a832dd2c5284a8ae44ee8fb3012f583f9bd01026b6a06e3bbac1cb1d0c19e32012d7c66d5ec2bd68cac256460c3ab24a163c8bfee7943b9628b8c4a4d2294c044fd44d06f5f6d892a966e229a25f27e6291a252bb2fb595e7df008037d07dde1bf79e8327fc4ab7bcbda3ff629efe62b4921130551053739058a28db4f2e5c7c655ab8abc8c33d3c4b8b9d8ce41c7ebb39bd1ea2754b753ad116540b5d00fb671977d9f9bb22db410d6fb11cc54efa1de36fc787484105fe4216d7b60d665068132d76f1dc4d028ce2a4f0e33d113ce332700d22f13a081d9fe2e46c7dc618199ea6bb4321a1c75eb8bb6570be29b9e445a4b3f8996567bf02cc8cb3f16b3c132212fbeb95cd23e8a94e1f5d42f4bea95820a5c7a591b772b28a9f5bff521f73696bb37adc10fdde17f52ddc45cf55c8f744949a35acf3ad4edd6d15e0d400a62c987d35c734b66498148b4e300ee4167b260c777219d57ea4f36573c5feda936cfcdf8ff9752f1fb3381df049dabb845478e70af06b164671ef94a3d7fa3da8bdc368dd1880ab897346506ff4fa50b8312a05ac7f436d52ef02f8387ed5bf12a29345c1afa37c723acd2f875e32b30ce73b073d0bd8eaf682a88536d183a3c7b0d94954eb30409168657944b997d21ecc2d45c8fe9547d9e588a01021848baea03f3df917a8b7ef7050841fc4373db79ee7875fc3a0013c44d9b360aa77ac31f3045be688a374ea39ae19027571e8fb7abc03d480cc44c4c1f49aef7cf7619a41eb1c6dca9cd591e8acbc8e8571e681da2b630e89d2023c1afc24174e5f4c42f1eeb7be02c7e03f042b36be132919985d64ea241ad878d4b1560d299951caa8e78078b409bbec79380d563088e2f4d52d6a47aa03e5968328916b14194976488a5ba344eb44891d8ca89aff56b24be9216e878d3334afc7c706f497cfc034a709971b16c88139e66dfe356c7a759222436c05275e8293155b83a4b6f4f7c9b95cb3c374885314ef6f245a201e5edd69d1aed68f7fbaef87a3d5c6ee4aaa1ad5023ef40782d1be42e8b715fbcc6ded814acc1b3f5558926ac9dad2b3af240f00a548b18d37d2f2ca3c208749696939f06a35d1caadcb56cd0d12530c0e5438ad359d4228d7daf117989807affa9c0beebf641e11cb133cc22e0fd1cc9588f9bada80c43a6f0564d6272df3d5a73de965c766ba75b49a8be38a22af0d8879b8d5c0475b28d0cb73e8f3e9b83965a8d4ef90eae2cc5d8a8a035ee189294f66d4b4ada9f8824e1ee77b5876191271619d51fb774b93d438735813f518ec713fec7e4b1e8b45bb7647f0d8d4ecc3bb9789c5064e9249bfce8d84184bc91afd2e8b3ebf9c815d1ba243a30271557f09533f8887a36d126b9b311a0b4e73806bd00c4a058a2977f6fc04a4c9cc93e1674b808ba4a179d78ece9500b51d98a4c650e262eff66472b1ac5e12b2e388c8481090ca435888d52f285f0a38f0fa1b1f445abcfcc0977a8a514e95a3ee1d241555bf70f47c5b63bc0cf1681d07dfa8dc03dfd1acd08c49436d750aee4ee58f8554e3e6e981d6e562f5d90a307c3c0574814c74351c08e6b40d846e57997333b1888210ac2400499e6a8a0c796450aba3df9710bb47af177b4a7c1b6bba2b83aea77d55ee0284f02a0897205edddb02d64d465a028a79834a72a783ab2f8c7af156a77b78161842d669c4cf120921545c24ad1d33eeb7038e037aed49cf23addfc3f3d51d374973fac03c42c2541d10aad7ac5bd41e2e1b671b478edbae902381615971bb78c9ed1355092c7db1f7de0107f28f939f76fad5602986de455a87fa2d852ab4160a8e397100b8ed35c1f1b43aa998d0a49577f79d1dbeba3c233e65e937f6610ce8533c68afbf8ecbddc85abaac897aaf459d27cbc99cb2b78098460dae97a9ade37f546a740bdac6c3a3e062c8354feee37d84f0c692f6d09f4cace5f396827621f5c07e7d0e9cc85c34d112cb85c16ac1759b140c330ccac0f9516da576ceabf5aa5ca5fab4b9b516fe59529a522bf3e04c03320c609e2246bddbf14fb4f255176d5711122fd2b483efa8a9b8f9d31552186d6ecb41a03c0c2fa70586771d88cb10e5887247acae8d710f8901ea2f373d82785e282544e9fe1d95250e0d4c685392041712b9d3cd035c079f997a950b43a0fd2aa4af9f7ef37f14d67166852ef42af62ddca9cc7ff47c6e704d28cf17940b506fabad159c464e38b810c6bd8fca44d23dc11c3adde03e70d338fce9f690d1545dd0fc4dff5b46a8fe0d0f222046e069af607f86215f24484bdbe1da0045020cb8bfc38738463eb59d1ecc870052f885921089d7959f9f83554578cf372028fe1a0d1231011b370eb4a0bd804d42d29900b4e7abd94e4ec20818c95b70e57a303eb7ca695aa0c72a0bdfed6efad0970acfc762192e7c46a652e251475449808aeb19844205ceba0b17c66d59d42db2ebbe571f34ef337dcfbc9372d2741926836ee2cc0c95a09c8843a95e15be4c00887321e8e3ce546000098a533fdb1f6fbc744b01e8c69cc2e11906e580b3c60610cc8ea87118bde691603465635be90304fd5372f2d685b8e9ce1dd908f62568380b090372e986355e20a4118a4d0141ef5620d3593fa89177b391519af5ba6ad7c39eddb754291e4a0ac6968bfd8218e92d2f1df2fa9ea4c9d49c4908444859412e1d0277baaa84a2bbaa9ff14acaef7fb9819d7eda2b9819d9e15aed6bdb4d9be5063560c578c0cda0b5118adf693bec98601e522221606c6a18d02b781807f5aad78134880f5c3fceeebc23f222a4e10a7748338adf011eac65b77442067da820a0ac47ea956bfbdb419abf10574bab373a147842a2abe887cad811ff8ece23570eee58cec6ad94c6cd2db4ca6301acbd88cb2c5561352b9d1aba3bf65d77502bf1fd41fb8c2e8c5e69b36fa11edfa477e573aff963dbd8494ac18e07982f26e43b90a0c42c6a8a1cb29297f0b270fe6e3ed00fd66edbac2ecaf52dfb250286bf52cd0c7162408c72a993fa55b1d39ba4a9a20a33c76eb0a002e6d01cefd53779757b6db7ac6109692eab6acc206c9874d4638ee9259abd50e43fdf53edbe6ddd731da35e675e2d7bb186d422acbc24f2c92f341e5db1443b794632ee10f4d435a67e7ad8e0e7db00cc623ac27b987a5bfe5fbeaba74472906e780d0507d10f54eee363e875872666a8ab47cc00315483bf2ed9caec2f4bb6f4e65588f3dc022c68350fd2c87d0853c8cf292bc07907eb488b67bdd465d029866f78aded731201ca9d8445d147301c75d2417194700b3c8ed0ea2627706181d3af07bd5a3d74895ef82aee438074b403556b27062153e7dc7bc8a8ef4f25254547a744549c2e0179b5ebda3a4fddc2b18429051bcc9b128677b5374c5db769201bff83e34a1b692b65a92ff2b5de4fc75f193f72d4e48e1aaf97bd2af6a5612e40146902e20e200284e41fd7cdbf4e421ac223a3a4cbd71bd0e49f05ac1a2282387c2e3bf6b93b2cc91d25b8486d8c633d0faaa3ad8a05e217d386f090223a4e4c1adaad2f8459be7e066ce9d29fbbdca7d4351ac6a192505a6a5b05dda883bf6462a56551260e05d66298b3ee5f980211494bb1d8b6006f81b26e758f8814bc222d5f735f93bcd0097f11167d188f00b8b2e0250bfbb0b22291c694bed9a6ddd4685029a93ad23c1a63723d6f7c1f8dca3ef9178bad9d5610f7022682eb79637af9100a828b19d81927c55d7bd2e7d607c06fb6d8b67d4ebe0bbd726466dbd8099eec855956c9f15bbe59485d27c8eb65df055dc12b7beb74f4bc9fd832a088ef559038ac78b5d4a81176b7083ee7f5d654ef40cb29eb256bc4d903b6d0c0a4a394042dd2feed4b1f47f054d9891b18685cf3f63e2940453567cff41fb6219c5e509640ca26c6f2520b3b63a361539a9403baa0fc654610c8f6f69ab8815130811f003bcf15207236bef3f724505fe2c2b62332ac82fdedf2e48739ba1003ef3d22187f51796738bf1725e22e24e8eb6b45319896088abbd35a0433cae3faa177e2be6943a6babdfd2b9fee77098797c84eb1626953d9c0d87a61bddeedcd0e585041ae34a2be760fa5282365716c19104a8ff4373902f510995c8ede1958502276b0de088ec0066f83226667c0be208452617a34c6721557de2cc88daa043a8b4aea84cdcbea1d740837ad606d9309ed19945a121d1464225f4e716f387720b847f56bcafe76710b60c04bc76d03d0d37b9cb0dbc4fa646910bb5d60700ab2e652315cae8f8b25f112996fb37a7ea088b511a6f945422d829cb987d1c8349867b410a915c4f8943431ba00c0c30f7f207e539fd8e07a4f2bf7e5c31cd2f460eb0fcc1f65d7f34d635197345fd24bb73e9e8f41cd53f0e8cf546cdf99542925c684626c713b0baaae8e725d4b056310b6836c89050a73b5d8c3d3fb5e5e10dc8ee894629c4d4e01def55aa635e340b5282752766e0fe4653ea245918807a2840442347ef45bb8d66c78051453351142586672d785d600a0b32c519eb4a82df9af9f81555a509101e23c1c7e3ee25ba547d654863d5095750d186cd5f5f5d89c51e36f90aca8f81ae6cbec120f8817fa36dd1e289f1fd25a1e8fff8f5fb908bc8434784cb1aea5c38fb906fccaf4f889e6cac11fa65eafbf424fabdbb9466e7816cd5af214cadad051d9de3256b7a64b0994d9a9864cc1654e4b41e880751b1ed3c8db5f59f5a5c94411525757e264c945638c81561d68ae82bbaaf3ac61cc0aa994ec143ca875f7e83f9ccd52b514b9db268f868d781e5abe9636d2ea903cc2191e4fa8935e09849b336e621459107f5c6570260117a2134e28dfaa3ba7dcdf5fc69da44ae582548267598e4f40049888d1bbde26b8c59a9b44e22f1050cfbd72db61f2f65c145f31edb06592c1b78e9eeadde28837f941e3db78b7d1a7be62af5fa0b75b61147b5f374d78d5b3cad4bd986d5dd0c093e3625d4192e474435a28ca217a3d54dafdad4e121653a6dcaa26418dfc238338b48f16563b29f344edda70378bb9f82b840d51616164b7f6172bcb51f4acb716ace60659e9e4b4b1916624048555b186dc48173b13fd0f34a213dc532aa56fefa0931c696ba64eb653ef1a0231694c2dfed91b32c06cbceb244808f49710926e45bfd4a399b542d4ce3ed3b2987f5e7abd12644c675b97597a2358df232c63d42259f717e6a8928cbe890a2cae01276587517d32266b72ce51fcc64a8e0da75e15018000c569e5d0c6acb19d46c2ee0511e81ff6ce73f0cba7b97f89eb473c54bc4a5668d0736f30ba5c8580f03403943fe3f3332bf569739c92b59d8d982f3e795ab0f6bd0dc487c214c86a5106a44a629d0c38c89892576c7d62bf285fe95b19b76e880b0c89dd6f7757a8b403b6df520146e21496eab8e51412ec4b0056ea3b0f07545ec35d3f809896f8550bd45b58c5d1bca8c6440ef61470cdc3b0af9d48e44c6021c8956b721bec474a554dc1ee039b489d5b525344379f86d2527a2eca214c0e9a90737c754d7ca79f9f893d9b82a6a10c8d98d389bcc6e39877b7e70b0ed0932bbdb6d9c28aae5d15551eba135ed84d221e16855b634dd3d5f3e3dfc937519509c8f77a65bff3097961d028a3c648ed3f2f7ac1ba13f13a441d27ad708940811f5b48fc739f9a2c946678c0e266b2673b38733465497e329e4a49e09bc598c0e15dcc593c0b4769157c07dcf24069dadd32ef88b155fa37e5770362393264493aaff9da6e21a4f68748c78f1e1f7db5d2034bcedfb4ef333a7b7d685cb3700e587b50717e177e9b10b458a60f99558809966c6c6967f068c2976773c51701112f8001b7fa8b3a14c2aa46b0ee8af6171f45bb18580bd75e8ab45331ddd0f26dcf6bfbd952f5e1c5e3dd31ad0740d9d1e9d40f625eacd58c14b9c3d28f7619e703b73b29fe91cd8eaad322518e43ef89f433ffdc2a7c4902aed17b3341d75c4f9044b2027cd58e6aac15f476579fac0affe6c36929b6b9c7f8d3c3420ea88055cde2eba8162b7ad8cd57c93dfadd774c9be7a3c3c6be5a718a0fdfc1f882df210442d75d701818208c13f26e55294a41da2d8ad602d445cbb36e72285e18e9745ed4ec4b7935731c64a37f7679ac66c2e10243ca9839246ed88945f83fed38c927abd14e325206a743fc1eb3e74aebf208b7dae3574bd3c33897490e4618fff7338c915f8610f21f383838aefc7646eab4f4cad659757677793ae44ac8ff8f457cd5ccc466f633b009b3bd903e008e422a063adfabc2c7daf7df5286f19d3a74d764574e2de03c93c898c34e32f3adbd4b4bbc5bba3c0c10ca730f45735acc5fdfdbf33a277b7bef457aae650ec3a1518f1cef1fbc72d24779c966b2bfd921c12be6b0c33b3a9119e48df484742080e9c94e5e69d8b7ce1964985df791f07b1197e2433eb903d5a13fe30281125bcd724fcfbe56c35960ae2eb7aa03eb4f92f1850bb2c113e9989ba899b2194cf9f15b0a4df418325f660cb9e629c3d2e7199ad3dfcc8cd406f451602e79ae71a53324beace1fbaacaf6d393af56ae0a14cce499c7ea39a31a6803fd782b5f77457b05780b51ce347a32ec2a1e2fa9f34f41e50fc9f2679acece592faf9bc4dbdd65c7313eaf0230ba4d9f97a1c2423f1cb30f169b9095a5811f517657ed006658cb70641f49982cdf2fa1d2a3e79cc40f68f03d1459e7a6eb61b59c6b7ab668168c27ddbaf35df0d3a402a658fef760ee2a10f48d7bcb78804648f931d716370d1e854362abd2d4a25ce5bda6df1186e31ecf3342e81ea8ed9ae56881a19e7d02463cf0e1955065d7f9f5016eeb05783ef798918e3f72d9ade496f60c66d254f29db37907b5158b14827a55b2b3fa8efeb5981b8382b84e0c4f31db3a03d1ea9536a2d3234181ddd0ef61a093c9333cbe0a70bc3d69170b170cd19d0f4361bfe5e80eaddc505499d6f68b366b2945fc5dfc806728ebea25b17c7d9786615c8d328114962f022a59087721a4d042b0e76da6ef24614f89860701ac0d72c78d736d9b25976a53c36167fe804e8211ff8e7fb3a7cae650d834c76e1de41041cc42a3f3d3bd31b2ee3052b4f796cce9e0aa53ebb573e0faeeaed6d43c03e43c992cdffa33cc364d37b2a5838be0fc2de8e2423420e55c0eb201347ab319dec1cfb98593c606c11c3bf244c7cd0511d4207bf52c976f726bef586f8e467ec0ed04d01a2841c7795a5a4151b537b17135fbe789473a6fc69a73e9444a9fa124fbf8c0fe14aab67dbb4ad5e545a9a7c82d79cb105cc44e7980f2646c910d0b843de6bd646bcf3b6b6b20dfd3320d13f52d89469ad49a631541f6293d9f39be0552e8c85cae9d2d715d2937aa942cd97bfdf2d10d390a48e7feabc4e28c1cb6a1a295dce541da755ede877b6c36d4a270e7705a57c77ff63266a8bcb9802470fbbe186b4b4ef081fae3914a47cddd26f65b473b9e06140d6ce6401f37362750cfdb92650c4e935693f1d26a7497e7a101a15025b4dfd60152639469eb9dcddd1344305e13bd80043312c49fea10db0507abe3c4b231a94255d1d6ee6132fc8ebd1bf25b632439b4b2edd09962daa50ca65741153f389d1566a077ffe423991ae687f4a0031aeacd08b4761b9dbf86255806502de0cea6ab723dd7d140d4a21b8054d4eaa4157a42bca9beca8683004395a96d75501c71fcae1ae6cf7c68298e0afc6b63ea2324155a7d13aed6095ff0e7d7fbb192d535e6594aff79381db1d789a5ec06c4c0ecd91440f3bc39946a1b3c9190bcac7ef538a9b9bc8995ed66dcf91559d45646f25d4005d44b31d58397f90042577209c42afaa1ebbfad849f965072b73cb64f4505ad33ee992c1ba5c23279ca55feb150bcd4dbbb614f8f75b8bcb8eda6306d68b8d5377fdd7f0f8a162edb8df5e2580c3b8be05d071b05ebe6da8ff11a384655476c8f5ee9f372d549c8fa7533be93396dec9d9e9b6f3dc22f74bfb891d32b90ff6233d1148887e74a883cd8c8606f89a75d072efd0fd5a569868863654f471701dce232c447573b4250652dcd96c4de0c56e11b37d3791aa61cad780703ae907c8c8f528f3382264e67454d98572ccc4909eb6c0fc56c1e8f068ab50ea24f54ba447d397c7ca6cf05de2c34d0e1d2dfa43ff43ec3e51ee6ab5a31327c2fcd922cc2a57b60d06a0e0d3ac6b63ac1351749aa86a9915a5bb92ee5cbee174b255dfea0763172b9acb8be871e5e7fc76f2f17212c456c6b5152403bed9678f6823e05b00f82732d8c7e03238dfe47e3dad7d21d5504bc0f7b89c100f0f193306abe51d83edfd705e75004ffd4e694faaea5e5416558d6bcb03b7f8ffbbfc95cb225269b0576d8cfca6833b5abe1d9d4baaf725cb08b8cc2cafa9a36ad90dc4cf692c02ce30a40a01658fde444562047497670f16720db0303532097f5739f768487a26a33d5e144b9613e9a8b5fc6b892c1eedc3215edf01b590964d0fb74debf161390f5197af32421b42c678fa445fd8c731f90c5b1628f4290868b47c8839624c100226161c178ef8adbe550a78877a9d5bec65311b09bbe244742e20740714e5c9a73bbf43156c5f7b090b0b1cc7ccfb55f56c709cfb2a5b71416755364a11216cd407642db0cf5e0707332a7e126dd59d5e3c2240f147720f32c875cbb5e9423e79b32b229da913c287de551cb7323e675c1806bf1da8f0b74065bdef5e9873c096d21dcf7dea65be3c06d56b352f36865525845bbddf1d1863766dc82fcc58187668c8c392095b2a7a5c0334f53569d3cb3286839f95df5ade00e5b37097543c7317f2a71c61dcb4ceb14094a399e8274dfe1d9741fe1d55aa417c7f99be0f9eb14f742d66c086ef283f55efa7a5635eed77b28f828ac0d192e2701a577aa267d5e8e6ae0ed35e0bfc7514fe3406ef3e0ab2be23087a8167e88ab58e13401477d6fd450285dac5d230260592ec259f98c08729320918e14182b74a5ece393b9b564b3113e9ca24e26e5632afec21760a0c758f6b70b6b23f1387bd539e90f8804da44b3b98cfcd552e28f5aa26d17dce43c4fd23859e7994728198b2117d24df2f405bee0e590d32dd03042b4ab0271bc26f0cfc3cd67556011c44bff2753bdca14740c18a91d2eb24a61bdc40a887c27521bd4fe8623a464cbc2959a086805d88d8539bf1a4359c42f77c41349be62ca750ed5b573ddbdb69348399939ef12a23f34fca32f046efd1778a85114637130fcc22ed8bf49b40bb3403e4be65f0743dd78fffe6ac43d392d7c848d2d731a1dc0c88d57fba9b9304bec6d0e8e229e1b8fa343d8e75c1ad5dd0255cb2086dd746ef5c9e6a89b9f41a90dee3225d41f629bc44cbdac532d2c17402c09ca01ee21532e4fd93136a12e6ccddb3876c5c98e5d3eb2f04616c963f4b044f70c048637efd4104dcc2ee636f85e1d07d6b913588683b9863b06c26e6b3f469896652e1723d2f87c372e424422744553ede7651788a61a5492ed1b455dcee57ea5f17ad3b0a596c3d9608204f66b284b2a6eba9b99d02cb27bb60e45ebbad951973e1f024a87d93e7b8278c56a3dbab720817bf19fc64a57cf4a4bfdbb76a1239c2dcfdadeb3a61f9b11622ae3ef1ac58ae7def09a12afb85d39eef0bb3487c5873d1566e12ee532a6b411443c485b7b31f9bb48caa7b72adf5f662e79e8c56a36d9edde20820e96b390a02fe827beb6d600b8a82cd2f1b27804ac7101642de5a593d985ca7268f6d87b20a296dd194cb8707b7654b0a8880a44309e8a2febe7c9cd73b1864d4e163182981776ef58e3fd91e7a5c825dc556037ab567e95758d45044d10d3e9c6cef7515f191ff6a0688e8b299766c5fcbd7660a9a9db67d490ba2a7f199cb2bfe544424f7793b1ad3218e82aefdcbda0cc1c0ebabd43a9558c895e4d4ba5c692ffea92bbe7853b0ec228426ecf6100de5b23abcfb8d193fe3d9156fbf7cd8a1fa86b37c28e7c27ea3379550c8fc9b8658a6aa9c6127edbe615ddbee994e1aa235788021c4350c5ae5d97aa12c7637d33efc764e67ae3f1b0f891b547eb9720a4afb9d3486690b18e3937baa505ca019261682de85dc49cee193e6be0e29e60f0165de91185a344d442322d3747cb6acc2dfbf7c6153e59748ea5a5a78217553a3b483d16fb0bb7c011b0d68899aad8c874e59890314dcaf11e0bb00f33322caf1c683138953de13074ee56a76da3207660a09f6a6604ec4e301cbbbfad94c65d2146e3a8033dbbab3f8d3c3b5d28a250dd32664dcd110cb11f006acccdea643c852199c83ac032b68c3070e6f898f5ee21d1c0462deb475b6caea22b6ad2392913c059c25cc890bffdbd4997dab61eafac7d89f618c8f272727dc6161393463935008362baf347e267a727d8d94d789dad37fbe7e7e44034276c0b36c837c5506ee34fe0c4cad720906384674a39c4a9bf800dc3ae4ff70d26c92d0c6a9b93aa7c7371583afdf3d17b778883ea6fad1fbe7f1cfd01f256ea13263ae6f6a12208f93a374dcd4ced9b15c958f615a5ecef6ed2e1dffc2de7a47d9e3a3c5514bd7db2f852e66f7ca7dff0cb27e87226f1058ba0e1be0f4646b1fe73abffd2c978cdebf3a532267e84ef1e38b02c96a183d40a451c52e148a8dc9865621041619f04c7cb9a65b3430678b659a3411c031da305b91de445da2ff115e39b87bd38a224b8775e9f393c0caecad12bdb1d41ab1122805a1b29ba93b3f39e9ef4dde0d3294141219d988dd7cf822fad3748bdab54df02ee52b0a5e8c5178eb2e5648f99b3e0b93671804c0750f1e426c62e942517e15d956109a02c7ac5856e80581d0bd394b0073733744d03d62066904860b68ab8789e5145bcbdd909ee34b0156eadce5a9a7bd8b3c2834aa0f83aa3ce18f4486293baa2c224ab9e15aa16de8bba4a675316d40084d3e1019ad9373b661a7a4efe6cdd290a375f5e8ffc773fab721d733d20dd09921ad0739c279112fb460fdf06fb7c12c0b1ad212d81819ec518d86be8adf003ecf0c573ffed0654bb425fc0b93160adb5519d4f5f74698e3c9dfa5b9f5277ff501626639322223d0aa0d0cdad61f2ad2b21a83470bd4a5182cf3ebbd4233c93f2779aa9727d294de7ae8c36455978ca76f3d9e10daa9a5d5c2e1abdbdd6d8b4389b92f21724e43ed025e1d560f8b30dbadada17ca9e78526b8b4f29fc8a203fc045488c980f38c94cfca8e363e487e82fd93605d0dae532da2a5c47e2416262c74471c31e85c63b6fd141367b738790ddf7cc685f66c3dc702356192bc447423cdbb55068a2dee508be3857158b10f5a6d7aa11142b64cbb5c1ec31697e76d338954d6743ceaadf44fae2df55176c6a86708fc485cf950652cf6b859818f8435c196ba3da6e46886fd59d4ef08caaae2b503ef24b635851dc15c97a80cbcc6cd042553569e3eb2094f2613fafaeb59b5923ca3ef223fcd8d3b4435b52abd0381fec24ba9134748ae546011013ad80d0feaede4d2e75fcaf55712704cc88175a6a9dd9f742b54405f50d8ef642ae74b6692eaf5ebfafbfcbf36b57a4fd328e0cce4cd258e3c4ca161a113e4be57a796d4daced7979cc9b194cfac350c392df598ad1004885660d687f292811a0263a829b7ddaaaa933563567b66e4430f593545204ec8a02c780b92a059d089680ee2f781df59a56f1d9c9b613af3166613d8f1028a2782b945759b058c991e46a715d9d56e185347ca1a2272c3f4a0c164215afbaf069ba8b025e8651c05de60b456540b218dff74b83acdae72b04ccd993427bcc3372279db1ab370f2bcbfbe36dfae7f45448c59fe748594e2c34afbdb954f4e00f1b45c986c0a7d742752c432918b91575f159cfa02c6f2c8ef5eaa3f088b8d5492f2803a2740001efe17ac7795bfe4135f4f4793e387b17de035de255d412e14040cf18ccc0b1c55e66e33fcbfaa0f663e7aa89e5ae0dd7188f56cefd72d9c513030ddf68d76b3652bdd67102e52a052da6103b27df1f7495c38fbd7aca29a133a6ba768ee503a41a1ae14b829029dace35f8cdd2f70d725fdacc70460ca91855165f5c3ac51ba143effc5d4303ac172572852e9154fa0b0b281335a9de57932602941cd55fb8dd8388853a5fe4b0114e5fd839517394a466e62cea34b99d07bbafa82d2f82667aaa6880ddfe510740446fb418c9086a826f807e5547ba426c480b493596e9c6c60186e9e1ffcc5003aac8eebfeb2ef0b1f2611fa129dec9c3d98eb099f5600f0863ed6e774cf255d4529efb180daa374b73a449535c24c13227a2d933adfa11411c631554059729a0912511bb7957adda7cd095f03abf1bd8f3d55bf53a8ccec4399cee992fa40cfff39ee94bbe366365b3ce03c42298ffa37f8035eac18fcae328cf274ea98d75edfc377731629a7fab838c2825ab717a3a661582d58fb5627c20c55c136ca8addbcc9597c47dd0982168937b27cf3d778bd66b32022c8d8d66b732be304a3266fab307329a218ff3e5dd8b40e1086d4182e0ac72ec0f87f4c68f4bb17dd660e776bac20531b598be868f9462d02563ddbe7c559567747e87c73d67337f18e333e164de09c6e93783c37aacf02d84972407371092e368799ec56cf3d39d89301756267aefd121777875f8edb4e4cc676d0ef6e60a8c05de0246c94c6971c0e49d48f2288cacd2af63e7cd5a2beda56143e1733bcefeb17e43a7c27b3f3111981c6cb73f967f3eeb2a284daeb7f69c1546556c7c2d6aaca57c24928d8d042c6ffd812f7c861d301942ce8822f0c1541f1dd74a3126a5b2b1c2ff4b5a035344b1ba1813dec19313c74c8b7728ed2cab801a2645c3d02bf9e7688acfaa1ef22266ddacad44930b16dca6ef8d41b1a9b4b21d3192b49ba3c150b1239c126a02f5fd74dcfc6fa41e063aeb7a2b18e83183bfb60226fe24cce5460e2fa7682ef5265b87851e476d0d60ccda799d4c1496b3bcd7ee1d2adfaeab24ecc6cd6434fa57fd1214235d2bf55586a1dbcd8d77ed7b18b4f7da60452d77e347968b61ace96e979f35db638d026c0eb2b62b70e4c70b6a0b13647a2fe0a7d77834a43492c65d6e8c0835c5fc1be675a320109c3480f038a4b4cfe9fcadefb7dd7e981581d657aaa46a44f760053265441a3bd1bfe911f61ac4d10169400db9c1ba274eadd5b31315af65f714e4bda8ade9a6ee26c95647d232f911eedb8ce97400755075810c9d083c06c4fb4c5581ea4c8ec0015e12b9e149394b388d441bfec29c0f5b9dab23706e4e901c57f7dc982c66d0ab18f815ba80a9c08101ab078cc4bbbb88a55ea57aeb8d0dfdb93045062706a254079eea00cf353725739fdd2e03410a724c9a02829f198f8f08218d9d7f5fa35d2d42a246ac4247f88c1a6d9c41a0151ff9d0ae9d13cf5af69ffb3c6ec8a3cd2f03ab1cca68f81998aa2d34828538cf1503006f42511730c98b8b808b21482fe021d63b057666b88952c4b95426489a9713b39f9d02d249e7cde4e95e76c27280a00e69835088b4a72284524ac471453b2d778118c4db38013c3f65900cc9d08c18e41758b602481c2a95545872470136cc4ab9f0ff892f4ea9f4567dee490d0c9beb8465581585d2ac881ce91378648893796c8ea914f8cc68538340f9036ae0c658789ac5cdf1e4a137d4d9254120ec23289e16e8e44d485837e538da2d6633ac5f484855003a7bf1a047d79d332a86cb314cc85318b112455c3b5b560d3854dd65c53f18b0b67125ff0b29807979d55bf6c5725c6ed468d89aea053a324a911714ea463ae4373b7216197dbd57697fcf3b17e4c3f259a43eca68dd97b0bcc98d047c17d5a9e0ab7d5d85db1a2aea586dc4b1a9157f2175558b49e5b1ab8e42363f79f4df6ceeed5fb1a2647e9ce7768c8d1bd141cf06e7412b9fecefb912a1326e6dd955ad863e3b63375ac54b0109ab0c3bce16156f8fa8a7a0650001ddd9c189eb076628f8470878fe069b37ea693e21681621400a083adcaae371607171f155a942abb927d5c65842376fe2f72136964b1b89ea273d29ed9845e4743fd728ce245b29d5aa12c60679804619ac5fee444903f2f1a6a3a41d3c15faea9dd92896d4a4e3d3fbf400b7f29f715b7be9c86a7d7c5a146fc6952a06c2973115a571d5eb1240fabbd67a0089982dce06fdb53eef2b98f3c99854ce7f788f8e9b6290a4b3071633cd425a5142d5250fdd9ea991267cef0c6596ce919f1e6c52bf1009f218ab7ab75f1b05e8bae683eaf0e6e1a1fcd29da10a6cbb6411cee020e4264a6cc90931b126f6995a2bb13f15d030e8f367c3ad85ca06bdfd83349831f39ea6c34a6b0d7aea78cc24fb16224c5284501c25f380ddb24512660c92ca62d36dafcfeb19e93d2746f334a2cb2c614244403004b24c362d1735117c561793aaf7c45f9f3922746196ada2da3fb4c7ead9cdb11d50a5be37f52d6195d2463009d4df72a3fdc44746016e80d2c18b5e84b8e02cca9d73c3245539e74c4cbe9c46eefab5c4ebb45cb7e58844d94afa91395e13325e7198366198cc2becd569c4d4dcb2f23a7ba0ee4520bd55a934a6df7bf7bca6b97b73878d95f9e8963ee6fcba26ac2b8cbc99f71be87e1e4e71f0bf5de6ad13ca83597ad78a0a9029b03ef9c7f6955b2ad1ddb514ab80b43aadc60e96b40e2c79b58d516dc7740a5f82ee33454bdb2da9ecdfeffbe877dfa470ee13f758067eccaaa131fc2aa29c3a354d49f9a44c06803e6461a16df609202d71daff6a6ebc5ec1b74d43fa057d0867802f77a34f3193b94ed123edbedd42aa5937dfc64e20086b9a6a298965eddfec285c763aa27ccbc2dbfef5aa4fcafcf0c317264e8a9343aa0db5c6b72d8cacc892c60061d37d61c376e5497457b2d69202ddc47c628a5d9a4e00acb8fb1ab827dd46ff0c82cde34fcfdf048d41139778a08896ae11a29aaf442d8861f126d8a985e95a984ed2608a1b5100f70c7f18997380d39d2b0a5e030385b18d206231d24a31421c789f6048b2357a25f3138685b24ab5ff3c3cc04712c49a9d9935d065fa9e81f71d93fa987c13015e2197b01e39b3d0a1f26cac639b36f027c6f7f8d6dfc5dde03668a20249a3d270118c305bef4895a7413326a947b382ac4f809f9036b2284e1e625d77c9e0e13c1e6ce9d088eb0ffff462281cc7ecda9df4cf80ef0afd4c35bd63d17713c3f832306d72e4391962a9e9cc30a0fdaf2d48895dbaaf17b8c9dc4fd6d2ed418e7e4b2a75c821f0f84f447695357e4061e721a6900e3a64174edb950431e07bc6307095701c787da79558a4c00a48b3ab01066dd6fad6de506a886ec398031a23d6a3e7578849507cc45847d882dfd60cc40a105bf62987c9d4bfb744601fe827278b1689d418a6af88d46a37f17b0f254b6aa0981af3110eea2bd59fd3133c3260f3a999220c7379f6cb2c6447c27995044bfbcfecc52f1a086d54e5a18a9db7a895368a2a500a4865d82451f1ec9ad02e73b4fccc49a74900bc477fd01212da9f6f5ceba230fc75dc2102acb84388c89d220b62a93de44209bb86c0fed6e6367c77b884fe1958eff595b7dd854633f093b0b879f996ff5a4856db07243ddbf4356ea989ca2ba3fdb9d501316535a7c82d7759dd7deff0821cb9462997660508c4a11d31439fe0215976bcc23e3fbb9b7f5811d32f0a427635d78ab3431d9c87556ebe2a38061ab4adad0fa2ceb6724854edb08fa1a7672dcc4a02d597d5a9edfdfe5161169643a8d8deeedee549dfe0415052d642eecf8b020997ed9ebb24e7d608afaf4fdbb6aaaf5b136236a9d50935d83810ede36a9f8a2c84a0bc20b354c19b047a5cca83324a616426c9b9ddd4562dce4832d6e19805d4be99a3eac5fbde8350d8e564e66abe4a664404c8f4ae897b1965111435cd8117c0e4295fe7d8a4d870b505ccc879f27bc30b3f52b2f53276a3ec5cc42e4446d15e014ca775249e7adf72d0b011608ea0a4006cbdea5568c2224eb268b5e0a25be7ce4306e17a013e552d5202f0fe9eeb93ab3d823b8b5be2e7c91c35dd51a04db09fc13bdfdaa1dd504b1c91ce097e4a66e36635ecbbd43ab4e57c884dd656c6143982588b1a96fae06dabc08be53b63bdeab4ed686256ff4620e7e03a73528e266dbf3a1cfecc5b27b47a41c329b118f63fa88b1a2230493886e1b264bf842c0d05117b84feef38bc3cb0ac5f791e61301efacf94d39eaf93a8ac523c7a4e15f7730a77865fd4b2da30bac38d3192b6725597a9e64b72a2180713ad3066c335303961b2541eb4067700e5afcc03c5a2d6659f284d2de6a281c3b654d8669e54bbcc8e16d27a2fd8d4cce1e6bb00d11e6afbb22fdda9247cd92cf8972b4b8a2b4634c3f6b559473c869c26a2ec188c8c1fe83f8cf9f7afb95fadfc2a26c8d7427d567d39bf1742b8df121152fb9d91bf03c916a445224fb0ae98b495541ce6176fffa11ef02849016c22f2d30cc95f3cfede23de7586e4b652cadd6f05213a9ad09dad94352d58a39d6c2e8617ed784f9d87f99077436d6f29adc06fbe03d5a9e0d67c2185b72eaeb7a6d3e74507aad35ccec773d873a0747f0e088fd8d99470aec6ad34841894b69102ed5ca8d736b23ec888e59f0a2f20ae7c6a821c74f56dc6c1795f4b5d15e952cae0f2bfc25b37bff3c058cedaf89d013823e214764651f0cb59fe162a04d3f9e47a8e4d097ab85fd68f14450cf41c3b2cfda20f896c8363bf0953c81a0fdb7d30023c352339db4c606851784d6e781fe6a811b0d0858edba7185449a682732be77c70b7766ce16ba3d0d62f96e3e5582fad361473e71e9bccd15e9581469122309dc6af7b0edb1f26a44d2d764900a13f1c84ec86775a04fe1b64c82fe1a86bb5160635ca2198e1be67785ac5d67838cf8d33d711eb4d6ff1915a0cd83bb97f4eef1c167aa2b831fc77e8f58ac33b54c62dfd17570e0234d347d76dfece0a1b2b2df2972e1d104a14220fbdbf932469a439a02712ff4b45b2632d2a73586dcd599c0c9012260dc669fc542b522a037075605193254f9291ebaf1fc3eefaf89b90074e652cc2556d8bfddd54da0b7eb06c917e3c646f61e817b33a9244070285f250c8f73bcee627bba7337a726696c4e95b12dc0ae7610bcc6818e25c733286c52fabfeb59884e0dc0d2147b7f2202be530404102190b1c1ff7a762db961f1520d8446e759a5613f8281974e457b54c00c9d1aabcc73fbacd9068b873f333368778793af09aacbb007b8ec0c2f432884aa7d2c67cf147502a18edf329cbcca16c569d9bbe1258fb7e1067df22a8885f3b000d747619ab642c14ae74a4bdbe5145f2a9095041e0115f6d7aa297233e8611fc0b169e45d645e54579a33f90519446be3e5296239a38b2e662917db38312d574fcc97b3ee4a1324d2114891599e038212540545b72abf5fcf4bfcff2d112c14070533f70572599c72d1accbea44e20f9011566d386734af6fa063295844b73e4a93bb3c678038b56b16bdab786559229e269d9044e410220604da69bfbf2e88e0d2382c019bb02c2e41b8b66b174469b9b64815777ba3b47c048982a1d59a48a9eeb8ec7722fa6ceff6948baa5ec7eed56746f6d10032982df613ea20f0299daa24d1827b8558c090973e65c7b9871961eee87fecfe8868f5b051d21368de0d8b91cb5397664ff50a8f68fa1dad568b757e8bb6d2a569431a68d634c2cbb7cdb14151b834cf0b31d638c752c299b9106aa457fca81a67f65385b48729bce36bd380c7d9a9edeb1120457c720304fd41df57e810729c1a5a622e785635fdaab09e4525a742269f3f8c0478db88e7a47d1fcfaf8edbc6178c1a3627bf12af474b5067fee38b80f5f91cf7e15578c66bb171afd07f8b4561c30882e28e816a986e2ea4d59e55bcc773f2fbdcee9ead6eba0250006475586f1244c1753aff8ba8039666b86e1887a52b2decbd9777fa0b0f356fd58a7995b81822bddbea46c2a3438e84e63acb841d64c254e494ec8c5e3e592be96e9b211530c4eef12f83cf8c209669f3a22a54ddc096ed5848f2da545685cdfcf7fb152e38c0e888960bf31417bedfa676fe67c9e88acf22b5a6520b6229fce6e69c52211dad282b12dd37ee591530fd296058819a88bd2297a8174f936d99b2e3e5599046f5cacae20b29699839ec8f05d92e2c650acad7b287f448deff6d4189cbfeb71b2cc569fa156c915473386398513ffb8d001460469ab02ae27954f566175cd0b89592225f0934d1eea25e80150dd8555469fdbb1848755f8eb19d184b67363f626e5b8094fb11d9b8c56ca7eb156916f41dce5326c6ee12f5646c167c2ec332835649007c74497b88e75508feafa4dc99adf093533a8979d308317903059260436a7599d1c79cd8737cd6db43d3e40d5a0021463f9b36f88c46442ae11ba766f8c261561f0c8a9cdfaa40f0fcd2e880ddb379dd7ccb60156eb82364a15a653cc2074f4b9e3d7f1041361939b08816906bf8ab0cd5d732c09ed3ea675933339b454531cdcd2c43629d5847f967f888769c470752085883180cb9436d741092d96ea8b15c1d28c2e6a850136f807050f03eb69d4484b1e828eb8f49e91d0a950cb9b5f46d181175d610a5da30750a795b91063ac05eccc9e33ab5e2b191a638b1ff59aa987aabf674a2db2980aa51ea2fa04c904a04b3a5b22d66acc4378d089299b21095657e978acdcabe168689e3e43604c16fece795f87f9e7426091bc15eb3602b1c015cc9ba7dfdfd0a237737b7d3a148b4a0875b6a1abbf7c34814f15741b962e3c9744d5a76ff547e53f2682df4d9f7d7d53d42f6e182b684f7d9f70a3f840f4a761d16efa868c271128d56bba841c33a57eb44663922813135d158a2e5933fe72afb00089a256ff2c8a4eaa5cb2e351517f64bb61f0bdb2e6b4940ec2bd2da7591138ab302c4655ab0bac4e2cc39ebaa0d350db0b1a9e0b13258d24394008b9c635c80552ae3ebb3405a62caa16a96c7a093ab16d56da0c716e5e126961aa10430cdb4618c124ca93226d43758762bdaff275a307b8b9d7f8ce180cf2f838375b2edef03bdd0460a22c64e5efede51114de1668a7bcd331dd686640a75e428d9bfb04180a81e7694226f6c280b92ade1c2331577a7036dfd47f68931ddbe6abbf41a96071b6d884eb0a32f48b5db2bfc7e57f9176b4080953c73e24d10e121829987219799b78943665c4dc5432ef993e5093034d5e0d28458be915edb0ff2c4e1213e720fb01f3480f6355c72b0b4209730abb20228287f5da89cfd8f77a69d5b8a165146c55b63ca304e8265e04c2dbb8bf624ba5bbea3d8a416aeefc2c5acbc7eaf9ef45db7e1d6c0d92f79638bb956d9f5bda9d156ae568c72a6c36e8b69cb83af86e47c73f6e5e2ec0b99340f9e8db68a1f4d3e8176b0c1301d5513a8440eec692c134aef535e78d07bdaa3bb1bd02f52470e2c8487a55a7d1e18799aef527f010343899287c655f4ea237ba14eec071e0377996e7c3b2fe95674241ba81c3450ab8b9a8b6120340530369b5c3434c0708d73468aa6a841bba711a13de633342103485d861da8af76387ca948782c1e9ef42bc89eb54ebd091050d96d44e5f725c304ebc78159aded96159c651be2ff497748da61bbae024cc0ed6f19998a00c8001a3ac4366f12f817984a44c614505764d18c8747b77f9caebe7ced0ba1dc3d6d25dd4c1c5a582f7d59f2b10e2d9003d7c6c3808eb3ed55743b40348c9db5d0283fd5821f8841378d1d93b9bb4c772900aae18a4fe6b22fed7a7d4bcfb9d90ee5bf74e3b126cbae277a66630dc9bc459001efad46025d93fd6866e393a99f2f1fe403eeff694153d99b9388d3db6f31c6cec9222609abe45afb545243d652f30885faa893f5c8ae097b8ad09121ec99382e07f19178b881cee37a1decf9658075c878694b8a8ae4d4a906c0937e30fa9a09af191c48e88c8a4349e6212ec76aa0881db096eaf37d6914a188ee80fb8967e515266d28ffc0b612a54c8339dd74b4f0800fe4ec0922d47061ed3960cf884533a00b0376a41cfd9b4ea5bedff9b644b2f34b3d9f36ef679e861f1cb73bb9be088a0637e99fe2d22e6962c80d0528ed913db2f1a3894691241ebce87a3cf487c63ec6dfa45fec3224b068af4e197e8859dc553e2927aaa89d480aef270c58d801469b2f45d67630cce28e9849543f6d94ed1f669bf43ef61ebd43ea657000c0fa15492a44279c2dde642a031263d3ff8aae9ad21c9bfeed22277af5a4c04824e0ef4a60a55b9088df686686f89d59b83c7b2e7cf9acd33d0af575f44aa5ef2ee725fbed70b028606bf1de553f3e3a6c3ce6031dbed9409cc29ddc41e3d88bf96bcae1d35d71db55282dd4d2fe20726a3cd5f89b4b42401d5d112fe26594b2bf68906f569646a16cf216ad94027bee2ef3e486e66b289f9e6f9a181b2d123a9e8a8e567674ab5248f5a65616a122c0d2a443005193e5cc8b7cf7a25289c191a560caf64f87bdcb715ae92d48929c39bd3a1d9a8308174844d60bf8378bd6aea1e24ee2ac6ef0e3cdcf9be4f1c2fe6e115c08151fef2910c8a1327820f47f35ee94d08be3fef321f9557ee3b14d447febc8bae1b193d53d7335c425cec3e36dd19170709a301a546f5a637ebf1805c624e1100bdd1f3d790f06f0b0bc207791ccc6b11e7ae5674d18ef1b6496cf62860e6b36a2429f5b1a24e4873d123586a146d4818a6f12abf769fb200f4f1fe6046b224c38ca561296da122ccf73db5882f7fb76e49329c5235771275d834cc8c6a26d2a98cdc05ae1e22dc84b477b0e2b77ff8d0314c14eea4517b808823de5b265b707461e07a855b26c14c45d5b90e10f5c12235d58b4c5fb6ae82a653f4d8891d8d4e04f2f1615bb39feb1921bb33793caf7c3b1fa0d9e8015b4f64b0dee912271daa71ca21e0afacd5bda4bb9cd604b907cd705f1c89a7ff113fd31d3d5bdfa646503a9d69c418d432b43f9ddbedbede8f33ffc2a82a5e05a392f2ca01df593b8ba8859c1af02b89a8c53c178878c7b70fa61c1cd1d5d33c1ccd90b1be8bdaa623c4bd1cecf61c70dfd3470b25ecb3d20dd4b8cf49abedd9331e0b86eb8d7dcb8ee4fb2231ce4370b7b1face8d9a5fdaa723e1d56307cccfdec52ec80768633935a8e2164dffeed27604e8cee693ad19805b783667f3010fe9dc8b6a6dc92317a1c84c2b39dc5b877f8f9613dfcca906afcb679783db178152fa17775cd0fb413417e6fe626dc87a05bf0472b401e4cff4973202274325be0b49499e6b8ba9b4c485547fb7f688800cd67acdb03cda51c203a4d4eabe1d4009894545a073bd0ac4eb48b9d31ed3502d9868b15ff63ea40b3d38a90e4839021e3e04fb08f1b145892555bf51c40f8c7919d23fc1022bfcf65053d8f56a3ae81a5cf604a9c8c1503d1cab2646ecf53927364c8e6c1daae001d2fa6cec76e31a834ba70c43b991aa36f769cbaa24da10e92dc7bbd4db37ffe8ab5e9eb655410b6f93db77e91dc6abed0e9ba6b9a0de5168f5f5d54feb6a4e72016a34bb3ae0f01bab8223ca8bd526dd547b12fbdb795a6861b0d91082955626cfee127ab62e8e7e6c0af6de9257b31fc0609c2f41f04aa15b07f1f8de7e126d0a265952e1a07fe2e81f2b82741d87e69083420afacec959bb7a8515bd7b40e23df5e7769d0ef99c9dcd644132f31b871ab21a6058df9fb4e2dae6148043b71f34e4a894f6c55ef042ec2eed34abe2f4a338e15207295e7ba59b53809db11cdf8279965101bfcd497d954166dbee3c289a05753385e78049ca2b11a050019bb1bd0c675c33982362adabb839fd77b9160f08277b3367f13ffb80820f60e59f94b4b0f5658d726cdc4d53fe09aa4e4c2ae62d0c3e5e5134d662f6a49c638b0aa825d03582607af0234ba2410df6e1e3724e52749bf40da7502aa2847c0877e67a7ad1fec6c46786568a7f0812f85277d7b1c0b84b931aef84f983614bb7c6e4ab8931aa549ad9656ee328c4226494b7c1435c5457f661f11736d6dbc75d8526c67e362c6960549bc84f335f27b3105c7741d95dde4514a6e34e59ef7b53f2e3c3e78f4248eeed8c023820d33cc40deb6d233671773619625e42b376aa5d52f75040778c88d31fb3be0a6af303cbd9e1ea0a431d324c0485cfbdb63cd73d7647a3544a8ee74f1eef71c63db8c42dadc718f923be28057e1ef39cff5e9a66c9b4ff5aad5e41ce9b681bb0844cb51635edb9f98cf63aa41a77f89cda6d4db10382b8169428cb7e819462b5f8b8c5fded75f9f5b8551257156d9caf19528502a45dbdce197e6b6fa57306aaff7c6adf0aa211808e425635f2bb58c11b48a9d3fc86b3beb3149b381c42283cd5efc1317550dc00b74501bc61f8bfd156cc5cf6c8c62abcde843f17fb9a9647ade6c36e5fb9e14f37080f60c9a0934b4c3939b49eb5ed92aa199df445fab89bbe2db876c261332f8c9346855da15d1693dcb3cef22a25a79361e0901eefc8440a3bb861a602f5d062839202c7d6eb166f2ef1ebb9dbc065da5ec82f82cc1d2089090845dafabe0a459147e8c267c554154d6a0436331500c80d38b09583e560d697616f83029ffdf84155ac6a2b97dd0fd334c3c2fb02da14f8aa1d86958e9ee28e6ee1ccf5ba46f015b02f884bd431d04dbb54b24bf2390862815c0d0ff63a1c6a101ae0926d5aa4e8f5ab9b17f23b6cc8aafcac64d4a76908e20953ae96a8d35407d8b47e0e90193f3404ec81d0e2a8d1f5c6ca113e3b3f3cc1b899b5bac9c60c5b8738f5274ca90bffec7fc09de7fe18b700e25011caa6c513e207efe195ab011c4ed29cc26a83b5fc7cfcf3a36096cbab4f3b9d9debb6622f45edac611ebd90eed7934f449e0e2095216dd9e591a7f65465e65315ac226d56076bc307bbb92d88f69c78b75a89fd4f10ed323a3316cc03a79e2ce86f2aacf5a3a6bdfa6e3afdf71af5dfddd6cc881f7237acf5c0bc35471dbec83cd1e1c6c9f44ad7538491a3022b38c2a5d800ce1eb7286c4d0be2ab3c6b23ac7996bd5a9acef7f77122dad02cb281635b311bcb265e1ba7a93b22626c4da861a3c5951aacf55e785e33a140de34b00d7885728a04e7db9aa0c83bebac71bd93b72da839b6891f383ed6af4331ee9e2aed80196117caab417b7aa6041438432876561f56b1c494ae7bf8208c7479575564689c332c6d867cb09ff754696ac62f0f19d184dd5aff30aa13eacecb51d6ffa88f58d0d757cfe558a23d066c01df7122c48ac652cbcf2ed80f228faea69195d354ac62dbdaa6b79a942c49c3712312a47fdac8ddca545da02a703afe45b9127af5a996a6c27430bd352124b8f7db12c9afb939bad83aa248dc48f541bacc9b5a780b82cd160673c1af4ecbe45903ad6d4ad27e3fc66b7f039608f920e847fafcd25df012edff3235ad06b1cdb2a2df948aaa4cee2e55233a832935900b213092e6c3c40fdeefeb09bdacb736ddf62bf3154216c0f77dee5f64ade59d875283ceafc1a9b38b13ecb1dcad2cc6142932dbf6902478be76dd754755a3dfe3d9d3de572c2cabf4265f4e543015ee84f021d546a592914c7022360fe8ea3951942e269e725cb448336fb696092bde46f5c7df1058c773dc6580ba87b454769fcf790dba1a0e381b94dfffd301c6cd508e24d18d9256871cce86a0bf6eeab0f3fe316f999b660c4ffadf5324369fa28bb10dae6f27762d451fbac0661cd0fcd46e0ee1dfe1284020078fb29e9471f5082db32e2f6639982c4d803450ff0bd116de23c5c820e7f7682d8e347314a8d5c1c0645bc5f397547a6196e6bbaea778b7ce0bb6aa4c993581cf6376a81c23ae9615005d7f7dff8baba322982eb66df052d938b7d59159af985075a9540fd2cbdfbbdd4af42a5cf34d35851782eaa9871ea364a2c59de7a9ce0af52ca6887c2a2d5ce53e6c3f454077772b3c2385feddd7bdd74fd1f63b61292b9f08f9baca06c6013b3a30be8b647a2af8cebef60e7fd0ff0624848108805b3196e8c8bb657f048f612638626c6fb60e995d1c76e83f6f0a275243b10a4abeb01a22f85473e33d47f5404ebef620720a837ddffe2cc0f090c3ff7385faac01cc0e12acf152d0776d46b9d5a4233943107c43165fd020352d7bcddff436b3fd7e9295c324cfa30ce910795c17afae11f8c46184143bdf300a38cd696d00cdf935d7053d382f74f8c4e5a23cbcd9d3dadda3e807d8a509c2fb0aeaed70c813a6d675cd796b75f3732f5d42d4ee5a21b8b8c76ddb3d331f363c8079ce86ceef782afd8f3a2265b2967a74466fd85a320a3fc9d5cba5227977e37bd92c098d55407b230d14459b09523acd901dbf541c4845602529c656020ff031ed2645a5bbf8108d556a8a940162486e7e979f91da9c0aec683f9aa635f0150f427bc3425942dc73f4bee32e178fd2708d2795c308f9d9ebe5e1abf1182411d5cc3176da28dfca72942e66c8f9fdc5aa151ad1079be0039504c8074f93a65e20ddd3794cba0aa8c6ea582120d1ab9d943b131e11ca006bd5da2041acda9800540ea9cff9fb4f68ac39d41ad7d26c77e65cb9d0865878699f8dc9462d293983e4f1b03efce899991125f0e06cc3a6e76f72a26703aeccd7b845df952e9239a553be5a31ba6eac86516afa5f28263b15b100771e810533c1c7aaf31a1f93a72445e2a5ffd74b4a74f4388b045fb0d08754c76b2ea0aee9b157f0d56f7dbdd1780c2923389173b495273c19f650255049d50a4e8b8c2aec438836e7af7e4482b3bf35b855b66e1741b352fc45da6da7b2fae5c951a9498d1a701fa18cb09f4d4fd554a5e46a3184a895f78ec95b55a54e567126f106accbb415bdc8a95a45fcac0b93bb68a83b76e420840ffd52637652c970514cfb832bb165dd155ef1a5d7d120441db61b9abc4dbf70eb5b598e56eb95ee516563876afab88d68e4c6776884082c8025e8516770d821cdbf2acfaac5c7bce3a5164a1d5a6e72bdf2ddcd408b404f6194c34766d4d1986e64bdee2007e9030baa163b77d4b35fa1c02f494aa42dae1ddf16221b836d43444595b48a9361a33fbff7bf706ce05fbf6afe6860e57ca38ba89b8064da7eeddf51c36f60129783c5551777231fda75031ef2c43d6ca47e37af656ba8c5b0070b46112af8e4faf3997b151420ccbc8cac1a1e664b557089f7fd0b8566f9bcfebe426a6211ba5c5fe4831a27b298cafe8e3a75aaf23e6a66d90a59b795b505dafbdee0ea57ab889ca5a75207f55d155b720dd71ccd040cd3c85663d8ef0ca05f804c0c3ae7a4e33164fb02db84c9d28981b00fbe3b90b7c3d2099796dfacdb24524df5d69bfb029b311178b3dc6a5445eb318e3b9feb6de6e7bbd71f46ccb40343cf5556674b74f6a66a5f6751cb684c20d64e0bfe4f2bcfb7f69bab5dd2812ff75c964d205d285fc3fcd9701874a9089d2c81575354808461493a9e0c1223ae7d39a6cb8de94c6f59ad1bb5cdf487ca9f327664a1005d49b33edfb502cfcc10386ec9064c9304e83e96a9f82d4056812633f3d6a54f8cd72b43576a89c0870e0d77d3945436919cf2945d9059105dd6e5f84ce3b174aca07c39bf2fe42cf9982bd12d723796ca9436cfd8e96dead855023bfd38d1e1d6361e85696603c2a8259bf895d01da7c132aa5f9b96c49468d07dd28fc38462fb0b5240726551d7b425a6ce0c54cc85e52c90d702a5f48260f7eb141383396ad2289c20b4b4478f09d10f2ef7b0531a203a60de3ecda3a4ddad173a3fe84b2b549889c23db69067dbd6f43546f6078a5f7ad8371c84b4824d9705842cd05cd201439a103fa631b7b7f1db3d09a3fe95540be645af670cc1ba6248b0d5d6dbeb9abb6b1c3603f502ac111addae7b8a2181fd66019e071651432175aaa8deb7fa655cab4fc4eb9668400182570be5dd86f1e862ae643427bf62535664f6ea2531444b4c8c390e50ae0e781273ba465958a21c6e717bc82baa7247c2d9227e4473fa3a7041f314ed21ea35b55a7a3a68f2ae341bd5ef0e1908f580271b3aadb7548033aa0e7e6da8f4f94624ad132fc04c144b7011b9bcc786c56889caef26afec563ed8e63ddb613e41497375d3f0ddc091285614a7eaf2eec1272c3621b2f1385b7d0ed5ca7d278085c78fe9f8637be77c54accd8c9ca3ce2bb7e575a8cabf6e0d378762a1ccbb551b8e63deabb73a85c7bb4e8c0696bd46e9ccadf5e6535bd03322feb058db69c060f3b4020a88764500eeb47d05995b00ec90ded23b564cf96c212a07a6e9185dab977d2d410c304eae87a5a9bdd03d10c848da755961749b501dac451645ec7e7715afda957b95a985696ddc853aa8de7fb739a52c3688043359e7b6a8d14d8161ffd1830602555d73d162699a50d89c33fb3cc5b8f12116df7422f4652fb3a95e1301a79cf7146bcb0362859c32a9d1e66c037b2c0626bebc32c43f8b85505cb2703d9b011b1726ac8080d510032837c7f52041c5941c4af8940aae565ca0dd1ed4c908639f1889856ba9b00acd4fd4eaeb60fe28471db3a131fc1a2427d49c5d845fe4ead7cc63c900ab120fb1ec0491b00b114e962b7fdb30e867f10049980be13cefb645b0fb1443a330ea1b7c470385fe43661b067278b38360cfcb3ebe7880f2eeb9dd1ff75faad442904ead7067ab673a432fbf50ca21cee0f706abdd074176cdb7cc3b87fad12730eb5adc407f219f9696be47abce711f95c576821a6b656fbf691762da2b4d7e6995e2d75ba0b391333e7d6b00b32630365bfb79267c79d98ed59abf4b30c00ba7879e7091bb720755aa1a38b54cf0f6b7595c5f3f9a4a25582a984d585a99dfbc6e6f84657fb7d6495c3da05a1786a066c2936415cec6e37456eb798470fc365ea06baba675a4f4f9638a223e729798a53ce8474cb58c485a5743015d90ba841b2035617c952b55c4005efd8deef2a642da494837cb5a122843b195977eb3c5610f3594d61123b2ee8a2fc5b97645dde007c38694e9b22a550cd796c02533cd0a6f7d3b71bda9230aae76c7581e41c730f27c9988b8e112a15b4165bb59e0df7ba1c3fd24a3b0a1af58340379a673190e48de78055c71a235dc3ab7f34ed09c2eeb42fe33c4d5da659c12e6553e878d9d9de5141d9265d014840a328fe78f5974bd671c912dcc49705c9e4030ff36c727232d3ee7a3675e28732fa1df1cf5db53d43c76cdfe1c41ddd333ea938cfd10d9d90f35ddaa3d9192c84f80affae528b30c8f7ca4a2c05923815731ab76c336d2afe408b462b6da59f034f986537c2139f2147b84e92bb22003ba6d43ab7224f0f804f212e62e89026a1aefaf06683e479cade27ebbe070b6301667261af38dbe983b471643eeb977de3fe7e4fac703c2e23feda02a886d66d471cf5b2c13dcdc2da8a8a85e9a825713160e5a39654de9f7c7d324efff50b636f5de6d617ee99e693b541b6855dc3ff32bad09d7589a1e6965d4be9e31a707963723840250ed58a5a3812184cc0586fee245d67469202524b6b7f0b24de5bd466b09ccee5f43de42fc18a9fc68eb38277a680df2d1ae7747fd99eb343b497c9dc51f753e3f8440b7c3f484942428e8dbd58fcae28719c7395a91dcffe4b19621bc89e6a16efbdfb86cb1c42a6d92d4fd8b5e1711320800a8ccd01203e39b342d73944138a0cd6cd58a5a4fc470a295bdfdfe5ec2e57e74e5db26494950a4856217b2935cf42a4d10f845d066ce569a48fbe74a6e01ad583e085a563cb99b8f7622bb71cd7a68876296c317281682ea9b8b67b3809769258baf32df770cac2f4718857d3bb1c61dcb4321a088414f3bceeb0fba7ab10cca4f85f34004ebefff399041733ffc9202498a8ac067e56756d47e3e61fd9b1be1f548feb11ca8fc62458779cf416b8877c6e7e87cf85eb83f11577c5b1936cf3d7561ce63371cb18afc99d3f0f073c3e60e540692fa8274634972a73d981a2c05e051cd4e7e9532c68aaf2c3da749b84eb6e745a9bdcf1c952f03d282e7f3e24c8b6a5198ae4f801668bbb94e9dda2492159779515149b2b246badb8476bac0e9c997286bca2d244c78a52c4978b3561e172648f68fc3219a32a535ed8a658c7aaed7c7e3a382e479ca54d6c92d91baa8a8fc321e33082f483b3855e904868dd30d8c37249ccd42c9ff9167803062b2c056c8ac7f2e0651cdd28a41a5d9e6fceffe9381bf95ea082cf495a0fdf8b6cb02eb606157266e52c6222e3f502669826226ebdf6b17a0b897024c3b164d18ccfd5711a470b0f8b650c37f6c525533dd09e7e08d995975b00180a59fe477d42fa91fb95040e9995b02b0c03bf83f7c90b044a7d479afc89e1d83d97fcfc0e05cfb95118136bfd0f3ab04813d8d28f321aebc3ad6b5d72e611aab3a8f703ef553695d6689b98c55c2628852f9443e475d3ab474fca08d5187018b35a412a70ab65b6329808a414ea4db1eded67c946c57b2c4211adf64aa466374c8a718065a97304e6a357fbbf7c1715ce8c07d760a0ce8fa6c2120e3872a179d6af33818bf9207ed7cddbcd45341670c0b1e1a2b93674fbc49cce258ba95b36ac47c9405118027f2ed2af11162463248ad9ba201514862a1ce2e5766fbfb02a443fbfd94f9c609b5b12d2df351e5db46a94b2bb499bbeaa5b6d9fb457efb66134517132edd1dfda8ae9918ec3fbd4a79760acf52026910f84044aecf68803c140a3d9b9c0dfd16f98d8ac0b6add0e5af349c06b1351b46b55fe790abb77dc79925e3e4917d206f888f0e8cc2e6b051f6815c6acc954f8d6833e83831febb0add102f8aaf4022c62e10fa6c37921cd751d9d0a1183e45e93b02cf4f46f23971ca98dc749bc5502deec06a21b123f6455922307ee83e3bc4a42e34fec8a488a1cc5da56f9cd03af2a2522821451379cf8556cf219030baa06d4e7d940ca7195b0d127e481289b1cd4e390f2dacbac710447b801885f93367c85baca9632dfeed74e785a9eaf82537b104b7abaac55aa87cdf25804996c6e3cc17a43435dfe43583e69104392d6205efbcb7cf69b59bf97a038c2fdac7da7f94b03b64c069c0ede937c5ddcc2da8f25c1a0175e4e90bd311e299cbddec3fd5e23de7e01fa520bcf57edac48529673f298c15a738966655f54f0020888a341942e689108741c420f0a2979fee21081f0891815de0d7b2c756f33fadbe42f1c0d415595f6d224eee0a9856fd16fc82252373a2bcb51b8ba44ad6703c3ea165b761c41860e5152d790a34b37c438b662b780a23269ebaa483aa2cd93ebcf75e3f7b353f8cc1d699c86e2a366b6791989d34573461a5815cbb4d83fc7499c58a91dad3ac1d13166ca2509d33f087c80431293c99672447df81bb722c438397a634495a65dbfe9c8a091e21383905ff1d9b134a1a9c4f5df185bf513e17fa3a258efb908f135a7a86d29198fb17463329449e85cf10141bfbc3afd41cc558eb207c1b112fc7c3fb86f7c4dfeb43c6b0628bd32b5444816e86fa20e892a6523e8dcc89afe420fa4184c9df9396760e8c4e6f1de03adc28e0600f733748ace378ddd85f9760cefbf218cf021e1a2040e463325b51630207f0e34922ada8ddec2690f7b9c336dff46f00982f4cdd99a3ef9566e85988a1d1fb7120356360a4274eaf6e8968d4f32c5c997976a257d397fd79bd82f408434501925d442879542e40ce6114c92c243b00c38890b238a730600d456717e3ceee018c46f88025a4f6acf86b28b0de518fb7527242ef9e4509b90c7c227d24de4022461f41220b646d58b838287e87c27ef0ceb7b9de1fcc93aba6ccda907a14e7430b8a7b0352587146d2e04c3c686e6416d5085e4e8d0d28d1cb3370db45b9202431289de0eebbb80cb671c5192c778ccb2c8f09d0f74e4dd1eddfc9cb71ee0daaf6ee868d65e4521c00c8d39200395f2a2edb435a20a99501e56b5be14aa9acd86a2e4aafd4ed4af3841a4543b2601308c02e7d9bfbee7b215bc2fcbfbf23a1f27493f88f2a67d5c2b8c6f8473c2a3b984962dfdc12d0760beb3f46251e0cf1c83fed4dcebf7c7236d9f5cbcd3db6a6bcfdff430a5b13b85157d62b93c0056f0d5dc4019e1cb079d8eafde201d11bdf9c3371118e90d96d40faed5d914b7ab22ea5b15fa3266ec04f46ce58ae3a830365815f666fdbd36dd2799808d77c32d4abb67b7731460094a359bbb1c1ce33dcfb571fd30d4cbd1c2290cd0cb069191aed238fcce453f78ddef14e9735f024f2d7b74ecc316bdb9e7c8de6d40c8899ded8f85f541b89987706b09c84a86ec3f552f3ab930575d81e7742cf201668735e6036aed9604d32c587cdddaf5e2f7ec8bb96984ba56f28fa290deefc0efd0a84573c2d999251c0a42f39f304414b85d539cc468555bf94f8e3bbe247a98f1b44905007949f357cdc38e574736ad57c98d44e180d2a9b780410b6d3a90b07d63ef4f7b0df0a46b1d2640962d40d29836bfaac6e1fd53b33e46d7c1e19474cce18a4ebf635640baadcebcabbed70453770df31c3b613a77dda447c4239957f7bcf99f1ca7501869b80264dde385fe5e4d530a6c70ccad5fb6e6bb1b4d6ec66ef1298105c66b55a59f0d8f5746386086225ec72b65172abbe542ff1f6b2433c1be4b27f1e8ab0c1059affe90e17602674eb361cdc236711ebe5dbd795e5ede3137db0a2ade6068df48fcb72199be61dbcd758ce655c404077000d79684306de404021d135600b45767e880596fd77cb641e689e3348d619cce8a63c4fea8660e534857e146aef66b000384ac65148ed8d799b7da72e8c6d618bd8a8e8bf8a088d45593d072516b6bcfef1e2908eb7797c4ab864b1e7697ff656350e02ff1c0596dcdb380380d0b46f0b43743a1718fc1acb7ed34204f4600607f0466377701edf4c51df11575acd516d720407b62caa6e441118492914867eb77b9bbbb262cded88520dd5c2ef1c6067a5cc3b74bc81be8dd399f21492cd9ecae74badf200bf9a2a6ab30dc34c64c378305b67e66bcdca180f848845301d006f439a223f4d8ef151a2ea5da9019a80ce23024e7aac239f2279eecd27eb35c5b98fab1be3f3692262abfe65baa96ebb7d6728bb3f78b09231a8369b4cf4db80695bec7a571d402dc5f1773245ea6d5acf877e14fbb97375ba42a310c1b1861087cdaf371bdd757f66d5c8a2f73a557a3caaa949551483414ce8e92f89c4b6dbb4a24e9d351d05637b7ec8f2a65df0df87740d69daa3abfb477a53c70f227b403248f192ccc8bab63f1026f2a5d612632ac59b273216c03d498091ebf453e5764364532b94dc3962f2263a74fe7d635f6444286ae4f5369d8dd1222acce0389fccf1c2bb05727f0a8e5fa71b1cd46abf7a4f26bb9795459035bb47ab9389248040d2ee06ca12fb9bdb0989c15f4d0824eebd133e412c5ab735689858d63a1a4bd19f0166c7760c3d064b10e6c17a08a4a706ad116a34e1d04933732351892c1d26482c99b28398b228597b4f50292bd5ca341ddc104070ab1d29d8aafd19754e3f4e2cfefb138a3496fde0478e60fd4330a34da631169e8675c2874c9372608a8c23cb2db267aea6c9b4f59c49118e839ea6e8944c263ddf838fa6807c5ee4cf75dd3498c758643e1ec6dd18f361e2e96ab5ccc3e028a9d581618a55d68f2a66880a8a9c23a0a3c5fb2fe701b22183f62e1ba3fc00fb79d2e5f572d8d5855b39850102229e200b7f4a1e22f51ff32aa1f7c9fd993ae531a79f98351d51aff8d109c539bec8b84e30609ef29cd1eb7ae5b56511dacef559c897e72405f1426abf60a1470b283845474bb7819de6e0df9ba76821ea3283e2cd468c41eedbd2422b66687572f35fe59683026932822d02f762b022a1128e3657f2d46b1ea916eaf656278252f14dfbebf1367c237ad8087585bf9e8d3fece5ff9ffdccbe5481602a364cd4a9d0b298ae85af486e29107148b05ca14ce9416d716381ce7c84cdbcb1ef236eb01e3a141fd6def1bb4a7bb9b27a4313c98f2590aa8deff39680dc732175cd44adae53c81a7da8b8ff7d0b1f23bdf403c9411e0dbde6b2538723e531215d0363906b6204e4e46c31b9618a7c4996f6cbf02e5ce4aadfe22a22100636aed16348c261fb04c61bdd9f726ebf1861974bdcb8fdcefcb06f0395fd0e72faa9c6d2c366623ed888243287ac245a0fbbca830fc0e9c06962439603926afd5e30b2b6f4d0dd46389cfc93a9d74db923f82f5b838190d402fc4ade1a2996f02ca50bcbb106cfaf31f690becb423c9f36f674bc62d450f620156a7020ddacaa10573bf43d9fdc9c79d88478dc370b70216f3914d0e8eb70b4e018468401baa774a51b9832943e22c1d1817e2941af43a8493e56b4079674b9663a234de59e710e2b51ea8f02e1fe41dee8e09dda820284c157901a3df01f48924eeb621c3e2a017f30e4640076f236be613ea71925852f91a1af2c5319ca6fb7647b859131fd6d0d57a05a16f648b720a45984a3e7d579ac04af04be30ccec8c8c78e3e07ed6330018ffd09928d8ab928e8964f45ccdac3591ee2a37dc42a3fc8f1f1fdf8a28c33f9f09b7e44543d5f77366946e32a8b319406abc10e95de576f2c9aa4f56fc2ab9446e5a3405c70ed2555027f511a1108f4e1b4a6b57d2a76af09c25843af172207528f8ebe2a966927e7bcf943eb9397cc1252b73e87d9b181cca1c04f99284dc91064db60b51a8586052c8cd73a1805244a2a48e921c4d0810a11918d97a874b008da95ca664d12fb183d7286f9921f43cdd610a3163c3e52c6c55712591f3d609f0a1202d2f61938c63971ad3b1e9d3bc2300c2fb42a80ac96315fc140b5f2e5bf22bb27df0e6b3b0d2059adf21b6c664e7db936a0598f31d66daa03f28d32568de09e4086155ced4e96d062620b9b79faa04ec1a8c07c78e54ebcaf55b165a1cb880d1d706d57e4ddb2fbef0d359249bab2f621d0e5ce37309c37e076f39312690db1f368acfc04efc3e8a1ce45e933c8a53430828bd6321be9eb68dc7d61e2f1ac92e09d807b8c9677b9a5110663c07c71a5b7f5c2e1adc40703010ede3f3d5fbdacc76ea26af59d26cd0f432a7f8081501a5bb0a9b9176f6a93639f24a7ecef1071b5928f11f6b72407e07d05a90a20eea6ad95e2333d7460f302b60084b9a71097eee013a5e5e57e1c24cfc76bdf2f0603ee1af68622416829d68d6a55fef7a0332f9aa88690763f9102b36b9cb24932b29a8fd18a6308663598e5e9ad58f1e7e93884d149894a8cf79e2f1d8322e93cde37f1bfae151edb49160749941be55eac24c9133778d81cee3fa0ba19215dd52680c1362949131ad01de36a8ebdf1778d935892ef0a5abee53186d91c69d01ee21455f413d75a0cadc816dad29b1746aa248a21373b3f991ade970b57c08a083b07ee57f105feb950dcf500ed244e8d547af9f5554d011779068a48210287afd236ac52ff3376ce8c6f7662fc4ab71c02d00c3591db1a80c2a3bc3bef5eae02cd4999d1967a7fbb22511c9fcc68de7335d218bbe91d17a08ec7fc7870ce54300b5886b4cbeed742a1a4a2da22bb065945e4ac92d198cb0cee9083865ea5f7f7b7c1b8ae4dd3985d3c4473190960a17c8dd31db15aa84e4019435ddcc1f296ee241036a8d422ab978e21813c97df94c2a31059ba6eb8f50308ca5eceeed377057eab8a23d121e9cb3ffd632542d239eca6a428b02817b89e2ee98c52a10d53232623e6d68dd22d4d718b9809acfc1c9d0829115b7e74af9d05c22e4a015c3a29caecef34f454a9852e461ecd30803c978cc2c95a7a29a265856a1731939fcb0b552121498ab76c729296510b41c55a2b9c8c39107a0f3cb3dd8f71cb945f36e4b0413c42ba99f93d69257653a1c6b56282ea3bd13038ceaa27e415b9114e8a39d2d246d75031ba8d9498132ffd0df7cac9195c0b38ca8c00cafbc61f0601d559915407e4593c2c4fb177575f763cb57a341323717663534b11ff5df966b2b9c70663516a2ae6315944e9e408b158a6e9566b4489ed9ff3fc6d0d4b51c2f00d2479bf7bdebe7d20ce363cb630b6c3467bc412455f7cee90a737407e23c4dbb70790ef41853d961f4b16ade92dad4068beb2f8624e7e4f5bb411068e32c8af9fd97b420180c9989544dd5d380d7e48a7750ffc2d88d7f1dfabc7a9a332d76021a000f03bfc6a543ac13755571d2d58d9c9412cab1db5cdf4ad5786aeb2862113bb666194b6de3c94c5c8d50eaf3d51013a7a6be42d1cabf6030ddb521132c872b38dfbd3c73efb55fa8dab5d343751cb993243cfb66990e7bc3ce1a511aeff993c03a237532f699e25730be7b829695afb646f82ac53e05a6f1d03b55c3331940234bfac87f1e68fd8f0f67a47c64dda6249012b73fac301e088c084c1b3c8ec4a97301121999eaae0e9c32714a27e947f48ef845661bcb2a46e14300b354bce2e84a2cedf10a02ed2ff739ab38d348a091ed8358174a4882a58f67e29633d953502686f9cdd43a12edd7a962b5df4676e00b37edb73b12a889894e79e48c8b52b165aa3088903955921b6a14faed4f637fe92357b3776a8154036298769f0a3f3636d4b9de06bac31cb3586e844d126a72111a0855cb97ca1471927f81c1a6d948799105ebbc9f60a6fafcd12b9c365762bdaccf56fcffb992d6f05176bfe63312417639d87f9f102a9c854b140fc2c3f3fd3d31cb24a295e2324fd3a26504a9cff507c1658f3a2aee8ed123d43673771d35e9d3e34583175bb8b665ce31c6453e05295bb030d0d383436eefcc5227a70a525165fd6455cc487b09c32c1812139c0df4674528d41f8b7ec758966339f5a2c64e487d3c6b8f847ba5964011ae2d9b4d45a43fc801a62bb743b3618b24828be7349090ce79e62dd97d607212a0684b2870c653750920027680c88103ef42059ed30066910b12a7a98cc5ead92169569a8b7f5ab412664bb03cb4962fc57729686ee61e369dbce1f21d531ed54a89fb8f019967470ffc2d879b30a622924628fb6ee9d0eba403466a8c4af5b2ec86e6ab759d51a1395208e804a694d3968583ada2072c014b5547e420ece169e9ccbd34a60996bd4a63252de3ad378e0ab4ca54c54e3e401c63e899dacb1e797950680051021c55ff64f06d0f0f97061236c3d79f3938bee9fa50d823b157204e95aab4d7f6a400c90efb84cf57c15fc031b09af995eaf85cc3e34890457f88c688faf7e9a9d71a6d3806672a3bd4573add1d802c3518ad425aefd2d00dee9874f498298441b38f44023c597fcb4a0225ca6de30a5e0cfd9cbfde2e459f6de4dffc8a2b00dcdfc20d0e6bf1739866216662217378e8fedbee115debddb0d5cd1a2a3b6765d5eb643ac43d656bc2a3e0a6fb9e4702b3221ebcc7f1c0c170c0be760485297e30ed0612d427ef7dffff256d2b6491f36441b87bc9a0d163d16b92d113327cbed6bd82c648ce56a3b941b1240f1f0c6b974f437dbc19f601cdca1251c9136f7536bf306402b7ce2637ea7df305fef0a1b5ed5afb8311f02f85b169bf691e5388acfd7e803196446913a1852b4efc0096819c764936c7679b8b6f9178f23e42dd2ed056ccc171d8bace04746f1f94af466223b2553cec33a74f6199a1ab43935b63add79e15e0db38e6e1626438ce8e99fbca66867886c5a4526915d1c0e464d20f738c4f51c3609fc796650e4023ebb1990d707ae455d448720c5add4250f1c92da4f78942e6efffa342d5855f667072c4d5b659e3e5724db959f70c07da61bae1f860657d4ab41b3686caaa3547dc46edb17cd144c9d6459db9f9b9d835f42cf64b5c4a969b8d6b9857eaa402573dffce99f251666ef2329757702ce12aedeabc87fe439051ed6c955a981e13b42b5e85c3814d959a1cdb06f214d874f7ce5de3c7225783c136194154f9f3f60417e66a25e6a4ed968c5404e863bb34e1c35dc7a183912d8518cc7dbcb35fe335c70562a48399d4674d1e6f832672ac977f21fe955ed6064787e1519e66710adcb5a44a8f938f6e65e2ebe17f781dd474b7c6323e229c8607603071e45c5765e33d93febe85262f21da4c6357ab77dee96fa01c3b0de99da685a385317d34638922a6c5f517c52ba044ce14f71ff2fde363f2fd9ae046d588821a88af306af9ab971d302c92e3df0c98f4e46a806e6725a4b3b350f59a8be0f6582b54325809b037ccac54d54f0dff0c374197e4a1db696633353335700d62a2bc2c1223eb64049fe78fb8d4a36213a3f28cd2d3421fa6863d4a3dca690e687868bdd070e692bef265c965679f466cd17f163b42ca14b0bdf61e032f56fbebe35d6f89754b3ee96ac885b13fe3a2437fd0b4103b7c35cf14b2ab75e2fc5c9a3a6078776ab8010fdb467f9ca541d72eb0f4c1b341791c13d3954a67574bdb7b118d1ba40b03adf016253d4175de79131c926159fd75d88461716b66e01d9357400e3a77497e8c5584507aa58c2ffaa40cb96a40def96f13d79af09221c19a369dacb371fd9e5651fd22b6b1ec942df13ea9afe1d62e403c5cf9ffa60f060363e705287b57ea67abd0850bbeb211f43a43e6d7f452d12084e005c718583fadbde875f89c69c4225da59a96e830fbf50a3092f4a128b02b1fd4b00ade7f4b415f41313b31686b9c55178481f43ea0888f5effb5e1a21e0348ac7c5a191986674d17ae3047d7c6cc2e78af79660a46e116dab099be2326651ec41de309b2feeef5989b3d5f76a1779f57f567902b23c876c72f82365832ce25ab03926660550618325d2dc7c73a5c13ed4e01a464ca7bb8e9b2ce1be09e5789686d914000d2c5b09c7a8e021ba72178e6adce623721b42a72048e1d82131730d20b542a54f533199235f7e40cd2155c0383d397a825f7abe29a2f6888faafc636451743efbbf7a65c124591068c134eddb6a2140ec2eb0613a7384783941d003d4b8f792e38b5126fc40e3c453aee20f8e7f08ce6035bd7dbf8fb56d40b3834e2f5a517b5a87a026fc2eac2d6e3cb94067958184176e220dda87719155c216a20b51c15ba29ab94b37371e10b38f499e53b5871f6d411b70e6db4188982cd44b6fc09d6128b37db4eb921a0346a46e377d889e02b8a6bbcb030715a7cd9c2d643648b31412cf3b1a03de607e5198cd6c719f8421c7bceca0027eb41b8bcb76a4be60c50c40097b5c95cc8a3daa012d09de61ff2a934cf4a415976812a04aa92ee2a36fd82032483aefa7c864e43edcaba223bce8ad71b9d6329de020441c0e54454f91dc4540d8470cf101ced4ddbb64000b0e35dedcb1074029161782cefbcd1472474d99fe2fe1389d2804384fbbf78e38a675c592e23f1512055d29b02127665adac06d1372b36de51cff2e1f1f60aaa96ad9cfc11f1cdc7945fa8423c1273402f59eddfa96c1f3f23a68d0cfbda18ff0e7068c2d95d6d229c252974c9a47eb040e56322bbd65f627df630fb36e81f650bb599517df294b23f5e54978923c1261d033c5a44309bc3581870dd299cad4f28b77d70bb447b9d97dbafdc9ae86b4838c9ea782bdf8b182ac6a1e748470b32ae9cd9bea15db47b4afa85700b1ff07de89565ff03e5ba0d4489f6008b2e09dfa0458462020b48ab9ff608ecb8db8d0b87434dfb5ff3b3bbc4933ea53b97a15bd08347a1d67078f379abc4d8dcfd7ce8432d5f531a6e3956098f7bbe7f000674b502df246a66528c3df140fcc114e07fe909dc19038e24bd65b8caeb57b216e8f8be0bc8bd1567abc4bc687f6cd09122994ebaf7a78a1b185f35770c5d6402e8ddbbb553fc9d514efe4046a718866ec5510289583eaa172cac9453ff897a2634b2896802e1d138e005bcf67f8ee38592dc198d704e301c530a6336aaf9552d52a64f5fd4aff9ad239605152aaa1b6c094f71815355b12a012954d0499955ad3343f2808a87373ce11d0dc0ff7eb39040323e6918b3c5dea3ba95c8c18ffabcdedc1d22e4ed8a8d89090b8bd8ad800e9f2a7aab2f9ebef830358585305426f7e80de379638f7f7c0d5d109ff748ac069700ec662efd51cc73253612aa2dbb6bd0ebb552fd88066f38d18ede38d720c4a1b4e5182c2d7a17807a701973b9b5bc32a5217fc62d03f16172cb59d5685a16e4d718a783272b84420fca90a42653bfab9b3965618f726890364e0f0f3b2d95bc216110899655f21af0affe21a0de7a7b60a1a25a3e9628864ebcca01e27fc909934015cc4692d6743ffd31433ee150e95d3af387f70dcebdaee4379ef36a1b6f9f8029c3ef41bcd70e26015be2531f0be0ec332fdad4f01fccdaf891df4ba53f581767a8a325d49cd819792a8c7b3b07933d5feb2768ef597e88750ea0640e66ee10ce28e8b2af01ff4d553f7848d504c381e47f1551fb84756e6d1e4f5ccc9d29deae8c73f5c2129158c9ec7df9969e1faac21eca858475791ab4e10251d12df5e1997fc2f6086be34d49c8650a47e9dadd1fa913fbac6226d2f14672346c07785ad9a8b04767d3c5ee3433275f2effd9d798362c7269bdbe48cac30ceecc407b38d703206bc8187d9a2df8304f8425eb8b01d19d349f9efe7f8d2df960bdb17532dce7a251049df71fedeeb1e191d8a9e854fd3fdbc95830ae3983d248071088c8ffb11184c0df26bb2dade46ed851d1b442a9118faeb0fb39f722fdc9bc9fa05bc96c6119f4eaeaae80c5ac80c5e7a1e1a12f804ea0b29fad15ac47e158b3e74ae02b43ec7eb6fc2998a4602092a8f4ca75cc6b834ba1be6eea282e8e4ea26148a67305338ddf48a22d518e446b6f2244c1b2d83281d38409248f0faa6b654b7e0f722bcece3528e0d112d4837abe76aee3a43e5cfd03adfaf9d3cbdb0061a6eefd339181d4267ea2e34c6ec2228fd29ef8e0eb747cd80c64f03dba613dfd10a2f4fe44ee40af0de2a5cd6cb26bad60bf8326f52f082e3e7d62feb1b8e1ad80717a38950cfda6479e2226c096bc3976f5442c7c25246d3de4ef643cad8b7bf2765a09c226d68c2456c98b58336c7e9a5564bbe4a694bd0b1b41b9722578c7cd5710415f4eca3bd8b6d18cdcfc3c55777bd64ec0fd22b814371066fb884fc20a6f687df3deddd01ad0242b80351c05b34acad47a0e2f286f98d749ca6fa8d08b43739d145c12ba203af062973b1c2cab60dc2ca5b1ad3c5190b0088de3cc74adc912f719cc870c27e872fbd10c1c4327c20071fe79c399d77ec2a69a28f81af99f6719f666be748d85b4f5fe11a927bf95af3d941616db2abf161cc5d4348450cdc6099b7d714051805f27632016b68200e6096582a611c5d5e216266f24d682be7b136f50ceaadb2aacd670c59cce9b41c43e0db3e7a921bef79812b65388feae0fd90bc30e68e223e3adc47242dea05e225a0ee9ffd7698cd39206ff22d351e415d9eeaf2c99f91d067e447554783baf74fb1ea6d334e6560586b1a0df0b65ac13f18a8923a8a5fe1e709c547fef2581a5296e8760b8a33be90322b53f987b07274ab521d46fdf98b535ebdb5720b909d41bc60b64151b4f0c2407197b8f3a67b4224b42bd7e59ce7a56e86e6c6d26a143c463695f85c8667e8f7718003577abcb70861d48c600062493d3fe0f17c612559160570129b0cd7977b18d3ac981d85463e3c385eb5682df81fcf2e65169cf63e086a85b9a969689c4d498b9bf221fce21791d717e5acfffdbffc2c7db8042d9acb9dac0ad011c05dea9172b1eb79c402ccfee504096195b90f6afb369d238d62e86521f32bcf9655e29bf48e4c11b999840e79cbdfed2357c52a4f87c86602e744bf27604caa2cdf5083b0c7ec515662a4801d6759a004df8c32c8f046e5a6e25475fef5f861b0b120e7a5e300ea80b0f79fc41d6f44d7cdbf9437261a2ff51fc7a022adb23ae8a207600e2d85316d1b67c88aba5920ff7775a79eebd4ab0a857eb54c22cc30f6e5984a7fe02246868968e43bd7fbc81e150983cf5d9d2eb2bab02d0c6af4b58c8bb20fec1a3ea70b012abe4f8237dc7c887d2994af721b4a5b15d59be798b7350e41586e33eb549220a8e94fd6db2aa4dbe1149a2b9133b0bd92bdb7fae2600c2fcf48a3850650fc5188e53a6fbd0083cee1f63819023a6842dd59362a2de0181a430affb22646e7ba65612a9e4814126c5908d4d582d56499ccef473a8af7843458b379814fe86392ef06c9e3bd33b9c434bb58d519f14717fef39bfc8fa3deac5ef458c6036136ca64959e23f4e237b43203c1f7c4c1bcef9a8c1c25fc1467b56e1c9349d910e4f7abfc10085ed88b8e08c9ca695bd3b494b05fca9caadb76506f265613bb1c63e584394dd6d49a2afa93cbde8168adc18e62ecf7b0f12f7c377269e6616703760477bee3682ea47d357bc5f8fecc41a7ce805ca2de1add933bf70e0c3f38d5405c543893bef821ef708132f4feed2bc05acc989d321f2432dcb55299a82506ae1d5224f6e399c8f938ed5a036c110b357bdaca461b4d936cfc85be3028d7e205da414aeefbc64b3931262ba5e7eed59486ae7d44511cb29795c82f16446ef4ff1e0d115eced7dd60e89c2d5a5809903787436bc62c2857b90cc80389460842af7913dcffa27831e12330dc89593cc22dfb48ea001dd67593484f51ec5928fcbcd0c5b11baabc5d40aaaa31f5a9d32b3cab1a5296fbdafa112f4fb5150afe173f900cd0068e50b28faa6b52191598cbd1c7264cc5c5c54a21cef01f78e7d90eb2a7d3a42db178c305a047174d291bb42d98808b6651f96a480f11967d1c4989f3f0609679f91ee6f042bd21512f29d629d8dedb4cf66c877f20c3b0500d045304aaf5eba5abf1601310cd79fc95587421e521a669ede71de305a5350e018cd03f5216cea01df1b1fd89e52cb9557ff4fe97e3e81024d3bcb72d174c0b66fadcfa0e73054146633105e26ef0ef5b8c05ffb48de66e527f603b1717f5ddb43b9eb35a74d7a2df03ce2be700387e670d2e1e66250ea294e68796909acf5ba63694cbe31e107627c496e7d4c5fd8a5df85af31c95adfcf24ba7d350099134580a94df561519ad1b8a649beddf8e5b6a1f70f9290080f38aefd8efeee6747462b8f7489001e07b2b231171852c9d99c30aced371a15d423ecc6fc805be8c9f251f7ed19caf39d0c34932f79c530ee771d0227cf5940ee9fe798317afdc9c1bc1875137b5458bd03568c89be7ead8702fdad2dab4cab279d9039e98781d648e34afebd707c71abb56af077592e75fbe37f2d9d52eecceebe3602317fe1131550400ae4345bae57003cb2ad45d2869df9d2e3185e4731b6e3d89ddb6b552897a2b56d38a9d7f7d4ea2e1d0317d446d6024cd903d6061cc9a20b9bcb72cb591567f0cfee8e4e058b01426ca0f83a749ed1805251c42843945b03c1365d39033dd783cfb70d7f15525df0d366bb4c6ee9984a8d1160255dfd4b9daa2363ab39dd7f595382340108d7797a664661b1f54839b9a6fd06566c6dc8553eaed24a8a669280eb6c15fbc4601ef82fc8d9f679cb57aaebf7e3cf0a23b87a82d6f1544d1f9e095ed0302d5c7580298abb181102c473472da190770c4747bd4cf0c931ee1c29b129307a0c0818d52a4b84369c3260d8d9c1395834b0a662d576ebbf22504a221b87903f5222be03f1ef7a79844f99001ac9cde46282ef825652fc502789b7c3a6e12665d4b6f1d9eb4a06f5c89f0240b330d3da48213389395dd690786fbd9ba52b317a05b4ab2f6af63c45a4433dc120280efc034be2efbb9f0228ddf04801fbd1ea70db84a05dfd50d70a96cfd547ee238900f401cb600713b7d9c8d26db21a4db251964ea82a0df91bab606da00eaa3734f837a9b569cafd071de8b4888d37a25e290f030b99298c71d3d6f228d636a7804673e26cdb1e45222f988f8da7349813fd63ef13d735b62aa58d920b949ce8ea09a40eb7b9f3f07897ef4389b85a600d04dcaa165d87b7a628c09fea117b35bb61dfc7ed68735b718f67a67f301216951f0a9e37c5a711d0d93ce7d9870a61afb2502b4580cc0f36b71fe0cc380e65b04b4032d0dedac599a18f6cfd0ab90fac8ba22d36220ee5d35a7206636eb46871c1518785357ae6a75dd9e85579059a49ab21f0916ff0a1f9c8c3f957049cf334aaed180123be251707d9e61cb036273f7cd7a7f44426f5aeb493807b3d0dc17f75f93834c5a7165507f1bdda0cdc9a574101a5049fdd53a342b54fce482988fa4b50ce314742eb011664e788a158e2c53d7ac1a2cb47ef0767c34adb6cba36a69d46f9fb89f3f1ff2dd1edc40020a2c49b74ad16f6c805d1bf5fab3c0dd1467967babde61f0edc17174cfbeca2cad5d8c3f120a0bbe201f97b899fa001eeb0ad2940d59d6311f106623e31e15580991f1b0d4b357c61a92a259b7a981150e723a4d782427a05263e5f18fb235487642a6220b2c05e8a174bd59fd0bb78ebd41c1d1925807192c9ff760a5ddc5dcfdc43fb5421662cdab81f2a62f2a853a6fb30f64187e08acfedd765787fdbf2e144d2b73452e5256cd19074ed30d141db1e0b968836140600eb2a6cf35014e2c4ab04332047d45a6bfda5a9c6e3024320ac81e12e602d7640179e199dbea1f87187072a5a2ae296e8a43a69001870f974a4c324b3020f4f0b0b0f796a02e2e360140788ac1a4d632707810bf4995cbe148f6412ddc2993624e4e71f8b72423886fa211ef93f4904ec5bea1a3a09c160595dbb8f7240f4bea1e95a9ca35a081d5b0a5b6e7e86606d7f46664336484cc839724c4561435f43a4efb07639a413130d82eee97bab068caad75cf7545b803967562988189a328f0908bdc54add57df31a8e2e2427b0ff729aac1c840b4962c4b317fb9c7e2c1fa025cef9ef45c6c2542919eba7d2d674b029f6ff625a3e07cc8d3bc4541558ecad808b53c03521ef29e60d0a616aa7a4401c6b5035c2fef8bdaa8e28d323a3fda3330434a8adcf163f6b36d460352009ec2f170decfe6c34d3a9e9f198840c087bd8c1e37b1b16738f830116e663f7196d1b50aae0c99b6deef3f455f20143aababb1c3170542efa7988885d736114fc71da6038d87381638e0e979a396a10daf233a296b98b520182e6238b4bb84ca0657aa4c7863d00b062bb364612f0a6e4944555b6acdfb16237992812f166970cb83c8857bfc59b81f0982a26dc0dae6e8a1030083de140ab7e9d3979a359e0da6b9c411350c4e9b4ef0b82faa315403d43ed211ebd866e95bd6de179f1f3c8200d7313fb184b591afe6d1cfcf852a1724ce76391567ccccb2f5ea7528f5986c78f8ff940accfff667143f3fa99b320ceea87669993d28331a954e657d57feb67ba84acc8f4bc44003ec3dadcd20232760fa6196ed6b9ec937b0eabb110ae3d89d4ab83eec5abd1640fdb907e2b9455ce4240fc42827cd7bbe00fff473e2e8342bcedee0839d872626a9799410e8472d017c394c8d0c57d754533e2106c1be094976b6800137a7aeb043de20502480b3769a8f4c63577ed40405c13aea0702721ae76316892f47167b01d8fc82a5c7a0a32e0da2a2ecb20ded5cd67977c0416b1c9488f03766748cd62820a4ed0dfce688ce2ba25f12055bc4ee629a81dcda7f112dd82780a2c78d9a11d3b0e0bb2fcddf6d7e8a5c054143fde25c53bafad6452fe4ac1fecac538aa40dcf1455098e9111588c4ba0111b06f3114843d0d788775e1752c8269e957cef694d2563b2288629e68490f9dbb5f810b78a695e283921528b257ac9b291bfb64503fa23c701283175504bc2e81cb6ed3c4f2cc8dfd3a04457ad8b3a1027c0552b5f3d18788bf92ec7aef1d01bde335fdfe865469cec2a49af3d159967d6520c04b1e9a4b34a0905ca54cccf85ca2d31fc2c22dbc6998ecd7e2716c7c2dfab5079c68138eb8c6a36825a9f828f4cd2b30a02c787ce7f57f43f132945bdd91f7f5a43d1caf8080186fdfba358b07ca6eb72b44c92b13cc9c4b6194ed9648618230464cd07dc4d6d40d4c7a1454fd5e63317d5cafcd00c2c46fa8fbfaf2b5a3e684310de1737808281d32f4aa8c7626df0823691ee520cc521af2398466608164e8bef137cebc9f48aa7ef2de5f52699048de197b6a32dd4576760caa893c3e8877c36d487c6ebe64f6f9c13b569f818a605744dc9b56b020e4e0c6631acd623e20a093a42b3992b3a7b9b84d52452b7ab905540afcc3923591d58505cd3e512d5448672171be9719f527e49b6dcbb0b54aafe6c98aa07c3c4f4b50a536dbe5b66d3fa07c4f7d6b99f12f20bfc39bdaacbf220f102408602b4b602642542b25740ba007bd4f4320d2f8472cbe03d8af2a14fd28399b9f5caea7c5c8d4acfa27b5b73d34f033766918986e37754d6883b0491f3a6552221220a33d5ca32ae156439bed807b855bbae6cbd325749a370043bacdeb1d6198b008944fd3930b7567d0c37fddef62cebe32b3672a98778b556477661a1ffc1bd6a6b10a7883b5a18e89bab30e01ed0b9786887b1e292d264759451e13afd589fc345826f79f244ed3f07cb554eddcfefecbc43d8fe19be826a930051742699ab52499363ed4c023a4b0b974755d544f5e6b947ed42edd7a6743988b0a05e6a2871e6d9cbe991478cae97e9cf70fb633f37e9f781ccce9f633b7b1e04c0981f4db7fabd5787048b98f3a1764470e259dc67743f8a0908041ab07a65292199da04d684abd94b1d88709059e033cc9511dfcc69307c9a4a5247daa854f8a155b511088f4d725fbcbad6ff342d06aec1239b950b6097bd5cc6c2d96b081f0daeff6b66e288c87dccbe51e56426507f1b5beb234092e422dc31339ca38ceeefd7d0b5695ffefbb44c39782c05b5e7f16bd4196527e7ed4a7a02a25a8bcc40e3d38f612447c17a2f99f4ee586c73a7c369fbccba43607ba8fc6567b03013505135a75d7c0878bd811acb59fca360ee816feed1aa9dda6697b23c5f376a9b2f51cccab6224e266ace97feef6fb29582f6180a5247e8a9db5b7f5ab79c44c6590b0a47abb7e848a79a6abc210b5a55375e00c2960d61f38eab1281b02c74a80373c021a6093680141aa519d51424a777437fdb5b69c79b405d876bc984fb45857037b5cff984c9eaa5be0369f81be6b8afc68c0f482084e25d8f3b5675fa50e68fdf6140b49d8b88409d6e6c5ea41b78366b7969809b517790ed375f0929b738b2deb80be78a2a7e0af6495127f46dcf88d059b44e671e269b81a309a9dbad6bfa0b21e3c258e9668456ff521eaa8232636f04616058e001dc0e89c7538a2d65146a009a203f5cd5241d0bf8f61c1f50288990626d7df6cb529a7df42ba708949c72da151fb620bfbf007e1ee38bc235d37360e3c959fb839905ed346e1da0d0b022d1b71fb6b918d5c0d8c0a3b90677ca5ca91340b98af6a88abb0870f19ab0e602df78db83f4c73e8bcebec2b9cfc4decffd439614664357f169515920a565f0b8499884a01020c736266108e442398cced858af2c7c2fa7ca6ad2a3fa3a8e04cd96e76f7ba566a738051c9eab2455ffe50db46d94bac8a15681ca84f453ab3322a1d148470186b22255e687989d1225810403ec86cd3e127f8d7062c8b079fde4a92b11e3a0447135ec8cec459e1e695a0ecc5c0de308bee5f43188caa7d7df4689bd41e6458cfbdf88a2c711e45eb1f46d0818ee02740633ed3f42386d339bf9be523762032d0d25e9956db7749ba5bf0517913ba222b1d46e97d769e546cfa00b708a20193f87220d2f73b9f25ed63dfd280fe48b4bf5ad0346c8ae2ad4bcb6d70effc129d8e0fa8977d001380f97326e52c10a983467e1db755ce0f1ff37ff0c7a948a079f61f37fd4aaca3d5defef261648b232cb83176706a31f67cc5f3aa2fa87095e25e44f36951d7753fcaf53c74416524165b01131b11909291080aad498a423a76bfddae53eb129526a2fe4bc066380f713a8504907db226835907f2b17abb7cfb8a7187cebc23ea38bd6177d05639e3b244ff6787e3cecbfcb60fe0894cf0d2f7e653728700ec81b14a9034693edc5f0b368da78776cae04bf7db985946b97d6ae8e705bc7ccf4fe12519a1ac651b62d0e179d9ff08efde76a0af4d44c75936d45fbf57b316ad538f2ec2536ab450da0d07563cd9d97deb834dbb1a12a461841b961cc3c73f86bc9b6da01ecd38499143f99580bf27e51eab931158255976d9c0e6dfc542e8771f80a14b6884f337941fbeef9be2b2428ef9cce884ad334e9d39c60f1ee909329d3abfbf7c71c8081bda4afcbc7d2f6b10cf19c251f504bdf6351bb1ab720dbc3812f0805d8e93c1a93452f35667b94747cb2c166d9e6404217f1d89d25eb66feed5bedf77fcbb7e8f9746cc86162c418476fb80dcf30b90e3c014926cba467a4917fdffad1bed6607e24eb2684973dbe616fe8c55573fb78e1a5b9d8ad90f7eabafd44ed1e95d573fa0792f3beae8592c49df131d2c687ff60ded1f60cc1fdf3237719ac2944894f6e2ea1fa359fc7d411bfd30821572013e854ca55a380b67e650bfa1121af8b329e80f9b7af5ba2673c0d7eb54cd197a03366d6e9d196d7459bae72ab170ec258970d09a3a138f50525b5bc45863bc8a743a87f8b7e516470b88b8bb45774a542060eb790546526d24d5d6982f2570c97c4b7d1eb3dfffa65e79cb40fbb02812c88f47693e771856870fcdcf5fa86ef89f6254089c9a251279674857a0705253c79abd0a074f8851e30e0a71df7d2c2d5dfb9f58ce1b0033001c6303b525e91a25a7c5aa04d880fd01b267099e8ebaa751815fe292ccd2cde87038fbd1005b48a5633157d2b4c004dcb5d76ab18159b77ee0e321c995f8d463abbd1c1e3a8b53dbc0a5e8d8532bfd49645d4229d8c0d556c54be2a720bc8075d804dc274394401c737eb38127e89b1bf5572aa7e49779d778f3e0a53c6a3541632aca4a571f5ae0caad592e050a01539eebfed75ea8f33d14e234f1936345ced29cd830cd518107a81ab31b7c39276f46499605c06d4627a54d395cc3958c27a296026c90a5587827ca274f29be48680f3c4b405311951cf830b1464c60f61c8bc237f3ab3f9bd3ce47ca9be2cc9fe493f7deca939f5cac1b561ef5e3f795d045baca0c3c16d6fd2f46fc523ac526e1e073987fe4ee491e00cbe8e5deb7be8359584900330c56b3bcd26efaa2181bf2136719195c889c5ab46237228d49c55e42d19076a1a5e56dfd762ba7e9b1b3438529bb1ad58768a317a7c16b1e1f9b936b9d5e8b92c91ed1fabbc619205040e3e3d97b6cf8d84480643a1b110bb5edaa93ee8282b6c933206c8ee7c78809dd706f5d5e033340de7e6c197baf7f2ed17a958a67dcc6c16f4dbc907bda0b7d4e6e2bb1e91d5a56cc287a308f4914520d5f8e6a1e3eab9bd7ebd70e1c7b84c0bbe82b3f68b167d6d99a00a2e86f3985d2d5cc0ce67e9d79777c8fcf62ea6a1b1fa593a65030f934f816c51a6b1f71b4193f6e4730b1a67e9464d1c3be32a3de01c5ec1c5ac4fc67eb494a42cd7bb294869f12bbbace9ec81667ec53abc7ded387f543c7e457a3a4a73eb3f24b7cc691373292ee02a8487a84fa5d7fd7eda9d4d6b34a5d7f607e770cc6c552d91c032853edd4d000fe99a99185edd37af11659ae6fb20ec07610ee0383f3c4a0836b13d71a17823e38f5602b90102a810f691a6cb45d7b3c700b74b48c665f6d71e1b9dd2b88ae1973cd6388d36cfcceb92ea5d3107bafd41ba6e6a7ee3d93e0e49470bc684847a255e2aa04b192311721c92687a6c49ed95e31a9d251b68934e039824d3b454b07cd8081b7f969b8060718fbd95bb504fea397e353f50271a30f721508ff825539d49901d88b730d97cc02978484176ce5ee2cfd566dc6a6f05b708973d5769f9884dc0acd30a9d3a4b561a29a14bcdb75961c13775f54fccd9cd78a1577a4ca2892369f7520e4b11caf77ba68e45915ea8fbea4df2b9657f999149e47d3fa53cddc8434f1d370f31f7f83aff0bc8620a1a32a87feedb0e4d0892479e1e220250e398a70367b292c02ace337362ae0c902e9ecb63976f899ade457891f59e3243fdd51ed6f2cf04c3ab1a0e1e75359945e8c7d611b477550e61d62979ac0900649926761d0333f4199ad37a8fa91a8cdae30252bc3750a9454aa98a894f65c471a645cf4baabf4b39abea92f207b5b5d03845a39f665c041ea5c0d42ca5a5ef8197638c179e9af98a31c16dc6ca7072af094a8095e08080fcc99889b578919531c94186be09eeb45510662668da3e6ef152588fbd90ad60bf15e7e9dd4a5bc97ba11817c8f52d9a18125598cb2fcfd670815f2b7adac04f499e7b19142293c27851a4193140a82340ac89fb233081b846821401ca0730cd238d37c5508ce3ba1787eb45e48914c9bda90808b2d60973b2f39b5248b5477c4fa96b079b97a256a603e6d88b05a97468c06ca928f75155e01442864bb14f51133d2ff1844360e51f34c58d04263052727a0c34a4f795543b98dee2f48269bc54a20450a68b8a1014a8c3fa311bc21e51598217ed36bf0e3f014ef4206f86fb01c46f6eb8f16f5ca414cf7b474f004f05ca99ba3fe1984f95701bad7e977ab57cff0577216e01e2245f2148e93d75f5047a0af37efa2cb058e4695f961ce25af2cf0ab8ad76a6bfd6cdc4f57d6fa2a245e8ca38aad0456c6e0e1da8b2c080d53a3db5eeda268f2013e7f41dadb87242e2914ac7b864373c392816f4f786dda228e4a8386793912367d7ab74dda6ec6c81a31f4e0e7f2314f35f85b32be036fff2734a3fd2961c4a8b3d5700f70de85f04cfcfd1f7271106be4cde4f3d134bb083e9dc1c340e916a5fe1a0ec404662f1aa16c82e6a2bb18f2013329f191ccdf4d393ffa5fbc7c15ffb20f0ead2f536c993228456f50d679e54441a7f73907a42e9562af474d77c01b709f783cbb0823b42083ab5af97279057ef1b6ef07cbae5db24e6bc65477469605bf15858ab334261b9dfa8dc0deacf47e1252d7808e6bccdd3c4748d7b32ea4ffbc157d442cd771c71153cad86849e4cb1ad7a30e0db14fdd8f7cf4f9c8cc008e4997b5cdf0f801aa97b9cf902770e162d5de6b539417bbff99d1a71ce7e959cb4d41f83e11a32e63b045eedf09628a9ddfa51bf6e78873c8383e3d7172252257c280e6af9652794e6af6a0144d2043ede98841e9665f6b337b0469f6005d738600c5882425ac6fa6c6cb6f54c6df55e39645a982a6e78ea71469b2dade30c3286e910949fc527862d838a84ae719f8743f1d0ee44a159afdf7cff2bfd52aba180ae5fdaf25a32f3fced468d71359d3fbf9ee2f11c34df611921abe4567104326f8022b0fd280c053e75392387aec6980b3870796f64bd4cedc0117af94e6f815aacbb80bfb52dce3fc53385a2cc9be0ec7560520a09dd7e6a6ec527590b68e02a5505009136e3babdef21b83ecc489d40af40875dc791a6c917798ac28a1c6064f4ef753755b52475d57d27b34f3944b3fe37cf2f9659a312df246a932244be733cdfbae2e568ae149c0123508272c24496a8f6b62fa6915eae76324f04935d1ffa1fa033ac255ac542ce1febf94409deb3e24564ea72a37c316f414c64fdc3746fb5e8669246a625382d8b072a06659812f168ff97fbfaea6be7d163eef5d357fa56c4fbd5b31a233720064a2eb70ef1539476e9b7494f543ebd38cb06ce70874b21874b3be9fdc52a7ab760280d1d4f625f2faa73b3957f8e858aa53c83a02604b052b9a1bd61f554c84d5fdd78e3a1e4a9bf9328d39b11d722f0a7f42155e014d8e8112165351b41d4326323e762248be431824e76d723c0d9e42c35c83d16bfa09eb85dca04f64544e446d5e19f8e528ca89aed7f2a6a9b14e9047b302b696cd4411a32997f394b306fe12e3bea9b5c2a5a7c636b6b7a81b834aed9e075bdd6444537c0899a6e5e19408dc73eb149575ad7c3e3b1e6a98b7ddd623ae805699a881bae68edc4eab2d5abbedd550c0f79c5cc4dfed65f91629d0038d631ddbf7b0bdc86ecc1c5a74135681f04e7d8e41f5f51a007185e565c8765f8634f336942be729b084f27e253e253c1a3d41abcd3202b6e333c7e866b7b04ed7566841a9650dab6789b82784ec31898f8733166a3fc92ca721617573e85907e471f66929dfa4639a69a8a73932f7f6576e53f419ac95a3ccd63d0a5de39e58a4e31a445e667658f47ba5f3582f0ceefdcfdf003bf5f464c5c729eafc21b2176a3264f62565de7a00fb38f7e4bae8f1e1015b99e87f966fae39b897961486ccfc3fd00045054e2c5fb89c9985fdc91940c4475284d4d8ff9bc26aeb45feb83dfe333354c97ef0b8d8ebcf8832b3f0b823ad3d5b57658dff93fe1c5a6a3e25e0a8238dcfc162d1eb3105d945e65afa3b8819ad68438db8ae0b462c855d8ef27493425478a5d80fb3380fba6fdabe1b1a596d31a8ca10ca04ce34c70a94c09139b867d7fd940e2048b9bfa24901a6a55e1b6a199ecacc103cb1970c27299512a89a4696a9ed98d1ef86b705f081fc7a023bdd30489eeac5b83ba56022f90ce4b9766401b79e82de72f9ce44220b2a56e1e96c5c4995ccb393e823efb523869576dad86dae172daabde0013378f810c95d4eed9da61af95a0702d36f0216e0f37461d4b0d350f1b25fed54407cbaaebd7bd25d4060fbe3c43ec6f34069f2c983b0b20f8ceeb147b41cc87c921284a366e7ad7f9215a1049000d68269301e70755e88bd07f60bd6ea386d692c1b04be9bdcdbf5ca8872d0c8c3e44648517a558fd9009307b4d3a27f5ab4baa982f0c32adb4bacfeaeb1018c2419cb782dee1d8a88183c050f2efcbe1fbfb92e71850994e3d8331d2ef18da5842beedc8a8a601ed301294cd913f89fa79e88eb05208a6b55e0f2465650bb82252891b4b6fcd43df9dc8680e67b5bd018e32a75d907b65703cf522c94e674a399f909d4582df8a3cf93096db2a6643eeabad21e33dc48b84f3050b889dde2a3c8bdc00ecbb40fbec91dbde308ec35b26e3a68d8d19eb29248ae18d6dbe414feeffb7caf7fc3944de8153d6561e21513c0b5eb3ab9dfc18b6df6aeedc5b6b6dc6493b2cf3bfe484587a24ecc7617f16ecc167cd0352ec9bd09d886fb6ee26bcc7573841367c5e998d2e60f1220945ff7e01558b2baf7bd5fd13bdd470e3c35564dd8f0526921dcd49398b87d07fd73b35ebbfb79005bdf815013ba80c527ab007838ee10709321ca57147310c7a5236b62e83a03ae3845cfc202b1a5a972223789afc4bed15939e10605a494b3dd78ad8960fb229e05965ee4906357ceede0072b2940245d2cb20f604c97a783ef7e1186f71392636b2cfbd4b1b54eeb68c277c3a04d2910e45e6e31ca22576eb30981126a076743e0728aff918daeeb50ec57ffc6a5616e7f05f34bef74e178c368c8129a847aa6d08b6affc9eb1b270cbe262604305895e79850ee7edfcb70d72787dea37b9b2ac2fe299caa7c6bed7804f308320839dd8f819934e1e4d4c19c4738db6caf4a79002480125c2635503e0167cdee2df0d1b7d2b0a9fc1077906a77831cb998cc94a9dbfae1dbf2115b67801467dc8da8d36ba583fb2c8eae6c8ca2334194ae9e1b234fe1021809401250d63b60de9b6d7d9d179bf61a0ab458c1a50c851b6776e2932825937ad4aabf6dd8a0ceff5079b84021daa06e4668c530e585e00f84c84d8323591f4c6951b0fd4ff9bcd104955fe140e88518decb5b97c76a6218700a7003d2c0f06c6c0d9f9c2a8fb8d48b524ea6bab54eadb404eff13e36972ce484e55a0ea65903f8f3959190fd18526ca52702cb46eb8ce2d1b632caf037d79b4f0a0e772116e93f4fb6877cd0850ac2cf8d01dd1a36b038f717edec13ebaf793124b51f68b37325c3e077892614e55d5d6335d5ac869f65fc43154017ad5163c0f0efc0d0faeadc006d621709c71abd5568185ba221682c14f69c5aca9538dc72fa0ed64eabd7526f772cd6d6d611d62bec016b78844740f3ed2da644ced9d3934c4a4f8d7acca3109452fefd1708da69f86f650b22ab3e2a2d8660fec894f1d3e9c20f61a58f8122f4d37895403580a3b321ba0c9d987d9c85c441eac1a2a182e98e514e1b89f7bbdfa94d19017e7aa551585a3dad052dfa722c2b36f0a5477a41d83324ce538445383940e241dce68fbe12ce0fc5ae89aaaf829964f638855c76d6815c7964cdeab3f680708909632aa40e37e10dda1dbc4214cb55c5da0d5f60edaf27e4dae29cd9d088278c485fd94b5c797674decb631fd6b4f345257cde0a4f7fd3e19bf13287edbab92a893fc4e1c74583bf733ac3ea5b874d119c6c454baee80458a388f39ec15e4fa5a7380d8bed5bb869830c319939a692b3a90768088adaf7098bc6ccf1d9b0a1ab21e5471e21e1a70b7b261b07c317a509c6d79b83568bdb0ed6ae67c7e566241e8f516a3d13e87ba73bf8c2002a824a24f221f10eca8590694afdd764ff327e959dfbc50e37eb462a26448681576d8d6124b446fa00d3dad6d74ca4170528f8abb45b6aec3372c4628eb0509f140b9ba097920f17d4ed5ce341dea7297f8377072959cdd3544d6dd3a28d816703773e1ecb5bcb3f35e02a107024dee62ce3723edddf3db26b27e74c1ee612ff211c7156cb73a193ceff8bff741be78ddbe19ccdb1acf89fb68160cb9c660846f05ca81ec8ae87ccb82c1b96b0f8df52ed19ff63f0d579aed9c64b663b8afa658e1f26364c33a6cf4413d673b40f5de6c77155e2d8d65d002b944e7c4ccd4ca4becfae5a98ed10ce8ae52a5b718bda0e177cd6870161546e976bfafcce3a6f5a6bc09e1ffae53db523f5b7046f4bf8cbaf9093f2cf068846d748a09b98f1c993a4c2052f6b1ce1d96f57fde4cc6ebb51eb4059fdb1af1de2e47da7f342ffce949a361b3b126fa5fac3c47d71214f7009454c9b5d6af8de48983e563e864ce66ec531317dd952a668a0a278199482aee73f200920a367473db9434996fdff914ed8b3ca09b203170a300f831bf47c989f0670994d256de53abe79d264ec60de945862f8ce0b2a0b29887f34fa8e7dfdadb745eec87f746d55c33b64c0578e6da5e746d4c04e21e7c9f532d521ffe57c5cd166b73059e27240f11dbd581025fb7e4c9c008e520ccd5e3ede48cf69c4680186f2c0cb846fb2216bad3cc8102692bc469405db5d945b04ece9ba876fc86c309a4a95ce390c21fdcbfee1c8f128aee7441b7b32dfb5a43e988bb02d3d7643db34b798aa47d8eb16701b1ac2d74a99ebd0109b165c7bd3b36f33b592ab4883401ecf4fd363f4bc566532874717c090931a8ebea01e8915627e15d317d1617b4c8cfa97297c20a0b70fc1b3a2c7210bb29b4b05733fed27962836c6bb08bb57bdaf8611bd005ff4e0f0f89de09d8fb26da7b122c28f4d873cced8b7ede59f8f90eaa2c1c840a2fb6a3e4797986a3aa13de551d357be5bdc290df2068c0ac971bf9dffc4368d14b16782abfec15663b44abc84c0faa66a81e1e43e41930b77d7cb9ed71c4d5a45edcad336f4b38b3c329dca3a6825a40e6d1c0eea8137a95471f4148c8431f06367590a8d94cbfa82b86f22b3f67d938159a1d6341fb7029c3293dc90e58e8e21f4ae4a115b904bfae69d274414dde7ce1e617e276602421bcfb6930abb7eb80caee2536e4f912d65999f390edb17ece9af00a48a3613af27b5b537bbeec727c190be99eed53f8aad8cd693d80416409bbcab1e260b905b1637e2677774e51efd398237c389adf9ad9fd691317f57aa7f80c2d6f9bf6e5c4812aab1b93fd1a3c04d51fdaf6d10a6db6a75b3dbcd89edd0a15c186dd17c42ed2332758e10012d20ffe1301cfbb4ab0a528c7ced17814842ece7d1e45279a39a4491989f6df316708d4836b711461a6f660ef1c0884e2e3dadb14f3ca74c94398e684f1c7dacb000a19aae3802cc7d57e3700ef3536d2d1be1fb8cfb3ada0d92ad4682bfb46436619d328e24bccf6fc5e1f5269d0c6d53fe2a1158139e66b722bc6b4c3a7a4363c514e05d54342a64cad66411c983c5f7b0897381beba5b964c21fad468fa90d54a64d5d994cc240670b15684fad37f06c38478dd5e26e38bd57de5c058dc7527a6e7e7acac40103d7c0a5ba1cf32d45938db1a2915f243d64055553800ece265ba93771e0a5a521c24d5ae33204ef55e7db136d11ed9dbb0f8182f686f6d652f6b76696e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6c6962736563703235366b312d302e332e352f7372632f65636d756c742f6d6f642e727300cc5a24005f000000570000000e000000cc5a24005f000000590000000e000000cc5a24005f000000710000000e000000cc5a24005f000000730000000e000000cc5a24005f0000000001000011000000eebac9038b5c68030244fc01dd4265002351450100000000000000000000000000000000000000000100000001000000bc5b24005b0000003b0000000a0000002f686f6d652f6b76696e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6c6962736563703235366b312d302e332e352f7372632f7363616c61722e727300bc5b24005b0000004600000041000000000000000000f03f000000000000244000000000000059400000000000408f40000000000088c34000000000006af8400000000080842e4100000000d01263410000000084d797410000000065cdcd41000000205fa00242000000e876483742000000a2941a6d42000040e59c30a2420000901ec4bcd64200003426f56b0c430080e03779c3414300a0d8855734764300c84e676dc1ab43003d9160e458e143408cb5781daf154450efe2d6e41a4b4492d54d06cff08044f64ae1c7022db544b49dd9794378ea449102282c2a8b2045350332b7f4ad54450284fee471d9894581121f2fe727c04521d7e6fae031f445ea8ca039593e294624b00888ef8d5f46176e05b5b5b893469cc94622e3a6c846037cd8ea9bd0fe46824dc77261423347e32079cff91268471b695743b8179e47b1a1162ad3ced2471d4a9cf487820748a55cc3f129633d48e7191a37fa5d724861a0e0c478f5a64879c818f6d6b2dc484c7dcf59c6ef11499e5c43f0b76b4649c63354eca5067c495ca0b4b32784b14973c8a1a031e5e5498f3aca087e5e1b4a9a647ec50e1b514ac0fddd76d261854a307d951447baba4a3e6edd6c6cb4f04acec9148887e1244b41fc196ae9195a4ba93d50e23150904b134de45a3e64c44b57609df14d7df94b6db8046ea1dc2f4c44f3c2e4e4e9634c15b0f31d5ee4984c1b9c70a5751dcf4c916166876972034df5f93fe9034f384d72f88fe3c4626e4d47fb390ebbfda24d197ac8d129bdd74d9f983a4674ac0d4e649fe4abc88b424e3dc7ddd6ba2e774e0c39958c69faac4ea743ddf7811ce24e9194d475a2a3164fb5b949138b4c4c4f11140eecd6af814f169911a7cc1bb64f5bffd5d0bfa2eb4f99bf85e2b74521507f2f27db259755505ffbf051effc8a501b9d369315dec050624404f89a15f5507b5505b6015b2a516d55c311e1786051c82a3456199794517a35c1abdfbcc9516cc158cb0b160052c7f12ebe8e1b345239aeba6d72226952c75929090f6b9f521dd8b965e9a2d352244e28bfa38b0853ad61f2ae8cae3e530c7d57ed172d73534f5cade85df8a75363b3d86275f6dd531e70c75d09ba1254254c39b58b6847542e9f87a2ae427d547dc39425ad49b2545cf4f96e18dce6547371b88a1e931c55e846b316f3db5155a21860dcef528655ca1e78d3abe7bb553f132b64cb70f1550ed8353dfecc2556124e83cc3d405b56cb10d29f26089156fe94c647304ac5563d3ab859bc9cfa56662413b8f5a1305780ed172673ca6457e0e89def0ffd99578cb1c2f5293ed057ef5d3373b44d04586b35009021613958c54200f469b96f58bb298038e2d3a3582a34a0c6dac8d8583541487811fb0e59c1282debea5c4359f172f8a525347859ad8f760f2f41ae59cc19aa69bde8e2593fa014c4eca2175a4fc819f5a78b4d5a321d30f94877825a7e247c371b15b75a9e2d5b0562daec5a82fc58437d08225ba33b2f949c8a565b8c0a3bb9432d8c5b97e6c4534a9cc15b3d20b6e85c03f65b4da8e32234842b5c3049ce95a032615c7cdb41bb487f955c5b5212ea1adfca5c79734bd270cb005d5750de064dfe345d6de49548e03d6a5dc4ae5d2dac66a05d751ab5385780d45d1261e2066da0095eab7c4d244404405ed6db602d5505745ecc12b978aa06a95e7f57e7165548df5eaf96502e358d135f5bbce4798270485f72eb5d18a38c7e5f27b33aefe517b35ff15f096bdfdde75fedb7cb4557d51d60f4529f8b56a55260b127872eac4e87609df1283a5722bd60029759847635f260c3fc6f25d4c22661f4fbcb2e89735c61787d3fbd35c89161d65c8f2c433ac6610c34b3f7d3c8fb618700d07a845d3162a9008499e5b46562d400e5ff1e229b628420ef5f53f5d062a5e8ea37a8320563cfa2e545527f3a63c185af6b938f706332679b4678b3a463fe40425856e0d9639f6829f7352c1064c6c2f3744337446478b330521445796456e0bc665996af64360c36e0f7bde364438f43d875ad18651473544ed3d84e65ecc7f41084478365e8f931156519b86561787e5abe1fee653d0b8ff8d6d322660cceb2b6cc8857668f815fe4ff6a8d66f9b0bbeedf62c266389d6aea97fbf666864405e57dba2c67d44a23af8ef46167891dec5ab2719667eb24a7f11e0ecc6713770857d3880168d794ca2c08eb35680d3afd37ca656b684844fe629e1fa1685ad5bdfb8567d568b14aad7a67c10a69af4eacace0b840695a62d7d718e77469f13acd0ddf20aa69d644a0688b54e0690c56c842ae69146a8f6b7ad31984496a7306594820e57f6a08a4372d34efb36a0a8d853801ebe86a4cf0a686c1251f6b305628f49877536bbb6b32317f55886baa067ffdde6abe6b2a646f5ecb02f36b353d0b367ec3276c820c8ec35db45d6cd1c7389aba90926cc6f9c640e934c76c37b8f8902302fd6c23739b3a5621326deb4f42c9aba9666de6e392bb16549c6d70ce3b358eb4d16d0cc28ac2b121066e8f722d331eaa3b6e9967fcdf524a716e7f81fb97e79ca56edf61fa7d2104db6e2c7dbcee94e2106f769c6b2a3a1b456f948306b508627a6f3d122471457db06fcc166dcd969ce46f7f5cc880bcc31970cf397dd0551a507043889c44eb20847054aac3152629b970e994349b6f73ef7011dd00c125a82371561441312f9258716b5991fdbab68e71e3d77ade3432c371dc8d1916c2fef77153f19f9b72fe2d72d4f643a107bf627289f49489c96e9772ab31faeb7b4acd720b5f7c738d4e0273cd765bd030e2367381547204bd9a6c73d074c722b6e0a173045279abe358d67386a657961cef0b7414c8f6dd71754174187a7455ced275749e98d1ea8147ab7463ffc232b10ce1743cbf737fdd4f15750baf50dfd4a34a75676d920b65a68075c008774efecfb475f1ca14e2fd03ea75d6fe4cad7e4220768c3ea0581e5354762f4ec8eee5678976bb617a6adfc1bf76157d8ca22bd9f3765a9c2f8b76cf28777083fb2d54035f772632bd9c14629377b07eecc3993ac8775c9ee7344049fe77f9c21021c8ed3278b8f354293aa96778a530aab388939d78675e4a70357cd27801f65ccc421b07798233747f13e23c7931a0a82f4c0d72793dc8923b9f90a6794d7a770ac734dc7970ac8a66fca0117a8c572d803b09467a6fad38608a8b7b7a656c237c3637b17a7f472c1b0485e57a5e59f72145e61a7bdb973a35ebcf507bd23d8902e603857b468d2b83df44ba7b4c38fbb10b6bf07b5f067a9ece85247cf687184642a7597cfa54cf6b8908907c382ac3c6ab0ac47cc7f473b8560df97cf8f19066ac502f7d3b971ac06b92637d0a3d21b00677987d4c8c295cc894ce7db0f79939fd1c037e9c7500883ce4377e039300aa4bdd6d7ee25b404a4faaa27eda72d01ce354d77e908f04e41b2a0d7fbad9826e513a427f299023cae5c8767f3374ac3c1f7bac7fa0c8eb85f3cce17f2b000000040000000400000086010000870100008801000000000000000000000000000000000000000000000000000010662400580000009d010000140000002f686f6d652f6b76696e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f73657264655f6a736f6e2d312e302e36342f7372632f726561642e727301010101010101010101010101010101010101010101010101010101010101010000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106624c701000029cb01d1c201000a0b0c0d0e0f3a020072656375726c69454f46706172616e206f626a656320737472696e67603a602c5d7d65736361707574206f662063686172616374657220285c75303030302d5c7530303146296b737572726f676e2068657874727375616c61796e6c2f000000116b241909f86a24fe6a240008000000066b24282c20202c20636f6c756d6e3a20292e7273009c6b24005b0973657264655f6a736f6e2d312e302e3634696f2f636f72652e727300d473243504008a0300515f04006869046c04720464697663dd000000e16c2400630000006a6669753132387372632f68656c706572735f3132386269756d6e7075605460003b61646ee650646f63cbd5d7ebf200fafc9a6f24de636f6e7665727471202f206365696c28712f246d617829203c20246d61782e204d6163727320616e7361746973697065725f7468696e67736f7051cb7024008d00702400830d7665632f6466726f6d5f697465725f6e2e727361696e746f000000887124a30000626967757485974b6d757461626c7920626f72726f7706017b69016a077273d70166697865645f2e7273f472244c0642616265565246496e4f75744342414245cf00466174616c4572726f72446973890100008a01645765604e6000b474c60211000000607524ce002d666163696d706c732e7273486f737761737669646573656e756d206469736372696d696e616e74250000001876bb706173735f62792e7273282972110901037724ee76243a20694320657868612e2041626f72744c7724005e2061727261797665632d302e375f696d706c2e72733c7761736d3aec7724005d2c672f6572613b65732e6173206c616265612c206275742e6e206120626972746869667574757265496e706129697320637573746f6d438b0100008c8d01000048418e013800000043426164696572726f728f0172524e6f5072739001000046726f7a656e4e6f576f756c6444696542656c6f6d756d41737365744442795a65726f554f536f6d6e65ec0b477472696e6f64655f506c656e20213d20306c656e202520323b20696e6e6572847d3d6e6962626c65760060000d696b3e911193944e000000a87e980096002c814d40550000dddf3d000000000000a07f240054367665632d312e366e65775f636170203e3d206c656e3203203c5f8d005131000000a480244b004a006b009aaa868626870d8e0d000000456e644f664f7074696f6e3a3a776562706b696e616d652f646e732d822460017a010000c88224343500003669702e72731f0000002b06010505070340832432796e20604572727a010000d4833201312e7273006884243363616c656e6461722e727359d484e174561400f08424000b059101000092011c85800c448c0d1c980041ec8a92010b0c4f8167f72310000041f88a92010b000091010c61706973003c0f7665283c0aeb8c08046e616d6501e28c08db0b002065785f5f31011f657867696e675f6d61785f6c6576656c022163727970746f5f65636473615f03256432353531395f042305285f62617463680637736563703235366b315f636f6d7072657373656407257372082809217369676e0a23320b270c1c61746f720d1e6d0e205f5f3132380f323536101e74776f78111d3634122a747269653235365f5f726f6f131c6d6973635f7072696e745f686578141d7574661522162373172a5f5f18346f6d706172655f611928671a28731b241c225f73651d295f1e201f1c617070656e2022211b22222328636f6d241c652519261e271a726561282a291a2a192b272c196c6f672d1a5f5f7275735f2e085f5f72675f6f6f6d2f333a3a3a3a683161323366633763373931393631633830086f6f6d31343a3a5f3a3a68393338303437653131626162613862313229636f726e3a3a6861326632323964373737613138306339334e5261772c413e3a3a653a3a646f3a3a6831663931636534613935303464316132342e67726f773a3a6837396238376337393438636266636165354773705f696f5f686f73745f733a3a6d303633663163383531393861666331303645667265653a3a683837633337323034396136343461333837253a3a666d743a3a3a3a6866646165643231623631653265613363382377726974653a3a6866366665633333326139366331303531393664735f636865636b3a3a68336661353832393431613334623136623a2e725f3a3a68613932366532323133363764636635623b3a3c266d7574205720573e5f7374723a3a68643335626539633533613639643831643c3b636861723a3a68363764306161333731373838316364393d68613161643737316538366635316161346f633a3a7665633a3a3a3a356232626335303864353938663039303f4e6e756d3a3a696d703a3a3c696d706c33323e6834396531323832636435613065643438402d30646665313533656230656634353661413e64333933363035636438306263386463423733636363636130643330386332363843493c3a3a446562756737316564663633653835376238363639443962733a3a6669656c643a3a6831386432636635313630613965343638455f7266633a3a6268633031306232343163646463346635354639423a3a6837326230356637636432373430346333476f36616362363665353138616562613437487363616e3a3a3a3a6837656561656431653765626563336131496661696c3a3a68393732653963626566313938646639354a38706172737273655f3a3a68656532663739363833653939363963374b33616e6f3a3a68333962383831326530646462333834644c2e3131394d3d3a3a3a3a6164645f6c656170383832653333323334343339396636614e496e616976653a3a74696d653a3a4e6169763a3a696e673a3a68326430333031353137643839333562324f4564617444343436343538653764343464366163355040643a3a50746f5f5f6862343338303266633230663430333039514d7b7b636c7d7d3a3a68656335376233626538323537363963615239733a3a3a3a466e4f6e63653a3a6f6834613236383063656665386537316239532f666d745f7536343a3a683037353262323334626366646461326354115f756e77696e645531616e793a3a416e793e3a3a747970655f69643a3a68643534626266353930323938636663325635746467726435633534313937653631613465376357433a3a6864396136383766303738313731306563583f3a3a6e646c656e393465306234633061306438323963592c3a3a68333631613138373166363066373334315a323c26333633396132383331666339323534345b4a3c3a3a52616e67653c4964783e323566373435343736366130373338385c323c63686172643331353933353166326637383436325d475f646174613a3a656d653a3a3a3a68303436383663636533376539333435345e393a3a69735f68653536666437323361323362323862615f496562756773697a6537326666636161306533666139343465604164353736306364313833663261343761613d3661313033666634623034306164303762375f3a3a683231613164363933323232353164373063303039653132346636373731383036626564443c417338343064333161376364623065613936654563656c6c3a3a393564633139343134643166484d75746363323635386562626330373237393367306461623232646631333233323062666832663564323961616365656435656638695350616441646170633139343336313739636135373733646a3a53623038316665383861663936386464386b333964623566653738353338343539346c2e68303036396333613133653437616464666d68396165343639636638646236646230396e613966643133643134386534363662666f62656631363233363139333434636632703765743a3a3a3a683431623137626230346633333331346171315f7536345f696e746f3a3a683761343762643262353735616563393772343c6232303537303835313661393961366173313c737435383466393130323835346564323633744e5b545d3e3a3a636f70796c656e5f6d636566313134303932626664393739307531733a3a757466383a3a6830393564323435383339313734396231764742666f7220693838333330613430363630313461303762773e34636131616634613635363137653330785a637572766564616c656b3a3a6261636b656e643a3a733a3a4535313a3a746f5f3a3a6834653936373134623534666365663066799201737562746c653a3a436f7454696d6545716283d5a8929b1c54082111111191a949daef02091086024990e4401022c2fe128010894012822443c61011111111914024100922294892749d0aee896b0593633c7d0ae015401a8ab8c48213820ed80805f17cd814a2ccaf912dc9ffb5fce6730696cad6bbfe5aee306079b50866f6949457f45f5cec2fb930ce2318a0eb9100a28c0757f43cb44243509e9ab031a660d4cf7124ed5b1d5ed2e509f8605a1c37b97462ca203e55f0177a3521834e1a9e0195a8f54069ac3144910604b01a8d6597e3022ba64bf3358ebdf1acc0fcc9fcb296e83e50d7ac044a894b259823f24e42e642bbe89da454de5902e650c5308ff61e44f4999e91ecd15be872a1673b8057458d505c9e1c984fd030c8834eebfda1abb6d8f2a1db2836ba3500c07060dc35be37095c52b07aeb55ca0ab276c3ad5b055b694c8352a3c0de475d8c199d6db47ff0d2c4902b1f01e020fd5a2812fce7fba591572091f2089cb6bc128170f5f8122953085e4e23b7c8788413ae89b744ae371b2e429d9716bb752307f5544871e4a53a7f36e3b29a34824b8b9871c37515603c5fd83fdd867c302f8060c8a731806b2dfce484f66ca5ded604617334baa842db322225af55824203c333ccf6244f287b771636d068b939b36d2386e21c295c04684d07b238e245f24411bd29cb3105e95602fdcd468aa9d650a775cde0df1af960eff1f1b3cbb7b2e5ed2f87cd23f5ba739476d6c7640fc8ac1c4b88ae73cd2e3a1270125c28c4758fc0cfe41191576a9d9b53c445d8baca94571d23e3a645b6c7a3cc37e266872ea842bf8a11b82caa3558b39052730c3e0e8953eec143807370388442651014e42c1c714a9aa5b540217105c8108bfe2532d14064c9f1dcf7371150b61de952afce12a97ee2e0843033f02aa4f5e339c23f003769aa360a6a172cb0ada7ab3adbb1e153988951d122e19f657d3b8dfcbc31fc46cd34c452e2a046131d25746ea1813f0b91c03bd2cbace3b1939e324a70d61949f16cb51698bc5982849dc9e65c6af2119f707605231979ee0ed2483877efb25c13778d889186f04236f82b188cc9d89738cea2db9b48e6015c153227dee550d64a66e6076aad7b65ec0a6b999a33c707e6c822fe0008249e515381356e4e09a8aa59dee58c906e3de2e1038434d44234a4cd1a4811b051091c54e610130260c85336863c0ce1271d5d1b447b1e8b1e4d2ca804bbd355e835883ab70a17d33845c21b8cb799b85f2dc1c0a2852e4d84667c9b03cb905f76cd33b0ba50240c3dbf0211815f4e01d2f287e7511580614815a7830a4ac259d800a4ac1822d86ca9896de00bdab069b480582accdb6a20eb41a79a95e418b1c7a72d64d00b46370b4a1c9e1691b44840c79ac3f50c7940ff586f19b74371ece3607d01f2e3fd2dd01023ff9831203483eb632a76394429cd01aaaa6c20a6ac17368faaa714160244538b662139858f3824d1c3835f25a2647a6d88667860101351e541ed4166c45b0c3bafecfcc18e4dd2ab2c778df9011bdf023d644354d44e1565e85451dac5eb455b9c9cc021156d43ac073d191344d70d3b382a3e0400daa5af45d76b0163a076a82f29df3a88c3803d318a454d3358e69ba790bbb4ed1568ce15485d071191dced4c4195fb34c0480f2807f1dc6e88fd70f5b2baf483cc26429b64734ca4b0826855467412f180b7b0c0fbbc47e3f18bb6372725550845eae1e1e421188d1efce35bf54fbc3ac551ede70cf40c27965a91135ebec7fc5917dd1e0282434ac267681003710f4c61f407d64c126d871b5ecac8822c1b95c8523110ace66768e15a44ec157e8c5ab8b1ec82c7d945db891d54202149a382b3d0693f3d70f8fca0b657f26a648801ff234e4c01ee80fe950579df327018258d2dab115eb2fea5c02b6e55c5007fc2d80558c81f87c7872870d74e7c159115e044f4445e1f7ef7ed1d7a119db3d340d41721e61ce08f2330ff151ed8dd5bdc007f185d5574e0fcd887b00dcea2c1122c3cb1cfcc790f5f6fa5f80641beb35b0221605e05c6851e2905bc09ff5fa010caf366fc76046dbc0f478de2455977c405709b86166f63cfed091201f73dc260f105982a0b01cb06573708bdb9f6fe8904d34b01010347aafb9e8fe80c1280da22787243d65426366a7ff55a0908f38a6c81e0286c8426d99d18ff013d3d45c8ccc85b445c38cf07f5625bc065ca612703a493b0663f05d2df8a8ff34e4b0011e402b4a18da92e5ce2cf060c7fdf5b8559d0fdbcfbfa864c26aeb290f90afbd415bc0f958d9ce1b36fde8d05d6371790274184036c2338e36aa2f988d1920b78bc0713ca5ef16f73a02b92ef43ab4f09e192c6884e449002d1c4cb12029bbd609c817085104d090453db3c60aabdf8066ac0bf1226ff8450f8761a4dcda4fa14380c13f718d8a81c658c065a5d4e6aec16b593448e01cb750178051889894f684951e2e0d1554331a397a6ccdf5d106ca0e3f30e2ef39da18740f071e097ed82f754ddf4296c0dd08fe401e5df83fb757fdf819c1b3b808ae95722a0c95d88526444cb882c68f9077aa13a2b6c83429efb20e98323f9b32ed053d88170e623cc3d33f13bc630803f04a5a832c41b77e55891961c3e92b0d1d93f8228e45c0a2939692d0a92710770edead8502048cca100ef3858ca960840e3a2856491ce06206c0977f71020e08a5371ede49d6df1cd9839cecb0fb0785a0d295aa4ecfd09087fdbbc44e307ea91b2643cc211b8165ea673fb39a8dd0a27d5ca6b4e80cca9c8b9cbd9d9f31809cc1a54f2278d3f855281abd60f9ce52fc15901c15daa203a36fc46e51f6f8089dfccd72400d0dfbbfb5c72e10e4d7e0f38d7e948f18b53b85d1b31db2fe96c7a40ef747543860d133b1e6061cf01356467785a4907eb230f70ad5acc414c1f66251ea7f5535350e9f975263ac20d0aacdcfa407d5e80f0fbe610f35feac0c2c5fed86d54d024803fa9e0147063ab21313c390bf7b599281a21c70cbd782d8e45fad4bb59d40da64521b6a98732a19f6d92d505eb5189649b0f680d5e00ce0278020348503dd73fc730fe5f00d75b9c33047af34321f3a36585f8ff4bbee33d30280ae4da6b3648305cc39f70511c1a55df4b76f8cf8baee2913e4eeb15ca3ddcd50892360f0ae7878fd6217731a0c4edf2099f60253a929e30daaf95f59d84c3ac15e1c55884b9a602190f7e3c019d808295420e1053fd037add819e5d0b80dfcc8013f1038ad21b021bdad0332828ef5e5b40003cff32caf3bebcba7381483a70c750c4b979a6c04333ebc06fce20027d41c5bdf832dec7fe8002483c28eca01d8a025c7240b0f36a8b83e4954002300b9b4f428c3436027d85f19e58e2d684312cdd6514263c078830bd4c54cc0e484057007c9aa6d23e0174dc115665237c6958021c9624818db80e53562588bb4ae28d8fea288f400037a8463a7d179e5000be47c062b3c401304126b3a0d5db84040dfcc114e81eeca345e0b5930bf8f1c90c74d34551dc3713011c9a99800b36e023411350162a045ccfa7813d4102f62b557069bc025ee735c03d11014fbc8621f7fb4e8086f21cbd8101b419f8280a4908f4a8900840963a23b0ae9f38208a1fcf060912ae170f63a06d46a9845f62282c3d86e070392606ca5d6c8723be4d926653991e00c51a983d4aa09b2fc2b28c8908c8a45e7f50724c00993181673812100eb48ef4885cfa03ad05a4d9e6440dcd69d77fcec1151881032b9d169ebfc51516760566010f680cac1d32b0316b93fc724aa4065cde3981ef04918bd7daa392381a308a28596da08c98673421ea3ec70451ef500f84b1436d850938379d6a3918f245045810ad6dab034e67861f113620f026c301ffffffffffffffffff115942b31135f2b4514a29490b3ee9c8b1f1e7ded69652a69464922df0f105c2c0476beaeeee6e3e44110611a310178b05079b62b10c2172e40c314460b1ac10395284dd0539eec0a8d076253dca9df8640e3b2495ead8ee074d4ae8d928b9815f8e3a20ca5ef4cebc127532912345e8600c2e5bc3a93471a5dc20e5984376e246844755932e75b158eeac93430e6b3ed58f2f9142781e0785e835f9742634ca070edbfe8de9fdd60cd37a03a2ff5cc6c8209a3daa39dc704b69726496af3eeb16cb104b8e3678a734487d2684c920cec1863465eb854c15ae2efb418e357c52e38f92d7f194929e98a8613b1732c8985e55b9ec62b1a894300b72a4e1d3c17e33a78c2ec243c3265c7b5e3786cfad3ac32175d4e4d9ccf307b9198c3998d8181d9b714b97214156525654c0881c6550c3db8b4d5e424b2d24c39dd564753425bb4c1b43a253ef67586d1e5a2b86d345b649ad74f8932529e408435bdff952493971a181611debb56dbdb4cff24b23c717d63af9bc7dd6e1a1b52e168bc592811c5ec0ce859a101f53abea8242c5fc6c94ca5027c585a349e125364a2166095b2c435c8d93bd88b1861c5be8fe6cd48952caa1856393bed8a7d69a62cd8249eafcf7c9a57f7cd7c56279410e2c203cc46696f04f72dc8bc5c239aee00917edbf2afef774725861d591e2e3d95f9e8f7254e1962e85b68ee219b2a4c27a35e4c4099dd293690aedf9ea53a3e44f279f0839a46098379d54ed6a7ba5da2047141e914ab3d67a7ecc540e2864f7d17363dd27d8a7ec44474697a335650409420e27bcdf1d37e7b0615dac7234e198a9e5ca68e251eab57bd760142298c8c104dbc45e3d33e98d325a0277333aadec33a1a598831c4ac8d464bafbbd3993350a91125fd9367224471256ff7a8d2a9edb765e2c961ae44042a7b26534f5e1dc95ea62b1f4ca71843ff36bf56bda5f97115e11db60fa5ddd48711152b9339b65fa7f7e031110599315234552908308fdb7dc91a16a6fbccd310464e7cca99b74bb7fcc21844d34ef7e7c8b0e2e73b158505a06398280ee4c0e20e8263e95e6d65908611701c72f94be417c479d39ac6b2101872f72215f88be55ffd1a55e2076369ec54f85a89217462d5fa7162adc56bd76b16a86b7962ed59b140e5d70f264add6aebe739c2f164b6f02472efad6515cf5e79f8d3a5ca8da374c69d9aa6ac25becb3e3317ec34df75992e22b379280c3168e6e747de9c9e5fdeb62b19c98ec8aa77000472dec6c2ea53e3b7f4ffb4a0a8a8ac532e40c8be5c62470d0221faf93b9fad3e58a67715e8f5945fd2759a59285f3e2364ad3f54a8dc7224d31da3b4a719b63091cb06034bc968d9a1a3b6d5ec179d2aaa3653e13adbb62ad94acf9d75eb5d923465ab1fab0426dfefcfa175d9cc85a4ae060c5396dd23a480db3f2ff2ace8ed15f5e3278ceee62b1e0500572fc376b1f712ad6aad506adb43cfdd1bc582c65e040051e85b70c771f4e46378e80e314c72c93e8f211ffe2e9c562390387298eea575429a9d9a25fa5e83e8a56f285ce31932285e3eff264e8cf16c20b01917504a58de01845269a1e5e4e88edca44912ccd624a76eaabd2a8e460cf08d2869720c80e7084a2fd7aa94d76893521050ad5483bf19965b434e713668ad07c3a2fb3d6ed8956c8ea98dbddf535e962b194004727d4ea5c73a68a691da3cb067070429934cdcdc5e8b8b72e16cb0a0a4a4a101c9b40c46ad7317979a7d1b984814313e6fc9c77374a33819633f2c54b2aa5d5bf582c28168b084e800313e719e5f97c658b26998ba58406382e617f6d7672d7be31f5c5623152e4c842382ca13aad2a3d3b5c4b0f56e215a15d44f77a86565e2c16b65854fe808312b90e39c24b5675debd582c272862908163127e542ba3d64abfd21c0e49f442a8f27235e5effb1a255ba4c4c89e21031c9140876ae54a68187db2584a800312e912af9d33e6f691ef62b1941059db7eb2028be50610703c4204381c61c9776beae8a2cd53232644be07381ab1d45969bfd96c6da7a3828311b7a994a53b896e28e1fa00c7227e9d8478d1203e4b3b45b0415cdb681936a39f8bc552b2e26aa8889108f7e7c3299d52af9817221831f2b74fbc6b3607380e91b68c328eae46a536ea320465c88ac9a6a4712317380c6107e5af3d659ad7562f160b0b70144293136a43858d50e5b99c818310fbaef6a9717dfd597eb15856806310bbc9d1357f1e3e5d7f1184a3ee6f47ee99c98e5f2c161523262b8148279715af212a63f3178b0510ab8b12ca83edc8a041178be50faa6ec9f8f49d558ed6c56269230728297e406d4c4ae59dce3279d4a50f9df6b6d3144f11e7ba582c7c30c8c6f4bc3ac8d7a4bb582c7b309c4c1bf64beeba6a2e168b1eda4c2fdd57751d75eb9207cb457dc49df6a4edb9582c7850477f196552ea237e5fee60bdaada6badb5ce41bb9400871d0ecfb226f4495f29da8bc55207d6c53e77dc0b531bbf58e8601871ef1a224a978ae6b098929e550a9d7ae3be582c2fc021877dcc830ad5fc4ed95f2c961267230638e2e04b212bb6e9bf347e2e28c001873dbc978eb747991af5863e77be59d71a3199bfb82173d3f5af635a579fbcb4411d3d9fdedd983a7a7cb158d8908afcafbdfff318852e8d630dea6bd2e72537c9dfac8bc572021c6a30f328d7a63a8daab12f69405eddeb2f93bb1bedc50438d0600ed1d0ccee4969b95f4a544a4ad03003c71936f1416e69a5daa9566660a47e7a37ad3f6f8783b41023e028c3e6b3f264e9184629370d1c64407fc7c7b0314d7553cd5b41c9111c6358bdd041877b3ae5731ac12186a452791bbd41c98e590e7084817f39bd653a68cbb93fc00106d5e8c60cf9d16d2383e30b6c1aa536bfbefcbc31151c5e68d4c728845a5959cade018e2e9c4e3ceb453eff0b8f0b776ea1dcb4f445ab6d0bb6a98c9934358f67971612aaef3c8ea628e931596056c8100d2bb3bc4e6301153f9bf9b94496aec0bddcfc3a5d750b0f5b21e5a5df3ce68cb96955505b7367762f1db5085141dd6faa9f835091799cc25196be151d7b64969714d0f29df7b57cd2bd6a140c4ad6cab4367a75070abd6a5352aadfcadfcd13f670db5a5e6614da3127ac6fd7a316df717636178b65080b703461f9c23fbfaa9c7aad74b15852562c9621436630a40dde9423cc60b040c8ca8917b158546250813652d2c861061c4c388da8c8a83245c6c6e058c2fa65e4eb5cf7915179196204252504168b11949466419012a0ac9c9461b118d9228b4309c76fd61bd3ab5e5fef9286901557817b4a1a61582c2bae62b1582c4450780c1c4948f9b6cba9fd3e99ca0a0e241c2653c74c263a67301dc11863a651f22e566f638473f53b67e7d8d25caca60867619fb6496f90f5200e222465a409e9e95566b9e118024aee7f28b5d1417da4e2031c42e8a4ae5e19a2727576212b3e028b85554c8a5c7004413125b4e5880eb9571531b9a86c808d1dec800c1c4038640913c2677506b78ba0a48c61b1ece0c62ff4a05b880ea77ee5478aac1c39e3862fcc225faf316785904008377a71ccc95f666fe6a3d251fea40c1edce085f95b1f5e65bc8ba58a9d0c3aa2ea376b822064941851b9e1841bba40a7cdfe1f73960f8dada0b061b148e1462e8e795e89cd30396ddf183770610cff3a3f07d7318889861bb73874758ba99ac87f653a9372c316aa7025478fd6d173ea8298ac103952c40c376af1ae12570df55a274ea8b4604c7d7508adf5dbd3432e2a4b86108b854d8ca8dca0c28d5934a231bfd04cb551f577346e70431647ef6f9984d418296619dc88855932ea30559deffcd6c10d582067d39d49d131b56bbd22b55532f2a74bc7f0bbe2b03267093ddeb93fd60ad5af6a9850abb14ac68a46870f2ef6ddf36a76156ed699eb3ea953eb49aaf0ddb56e7764ab739d546c2b6c3c8b6ed92047542893965a5e54a4badb9c229d0f4246a584962b36457abfd38b2921b4e9b914adda6c8fef961499103a28f18f9b5d7a468116f5f3a29af994108a42a5d27368d397dd1b060c8d2096820b94fce0462852f7aff4c82ce3895d81422573d0be1972a4caed1328294ba9e83b71a1356e78e224524f8b9d8fd985d809e64e2825849f49a91cf889c532a40c8b450441ca10b27272e4a2028b456585ac718313481d75decc93da45633671cb7f294588b97e12ba582c25282b272616cb9012151423272546d4a8a01831c1911b9a7045069d63c67b9d5574b158869c9c20489f98942048101408f1234496057ea4c88d4cd84a8bcc682267f6a598506aa60ed921b412d310e2821b9730bf545d9ef53bc92872811012dcb084a73ad887a8efd3643a110ec18d4a20559e9912b24e894c0944ebaf2ebd519d39d7b83189c4afd08fcf621e6379b1587a3d458c1b92e05d6731b35ab5fefc89842e4f73e5463e64362f16cb8aab61b1f4c991740312a85e15f1995fee8ef672e3118e329d4b64564b33e962b1582c4386a861f23db8e1085cdab828351ab4bc5623d69b8509173ad9ffad1861f097e15ecfa534adb488f327a1f40bf539c7548a30d7e67c52be14dfb9910855b3523ad38bbb8f4a178be532c60d4418f3a5947fef663a76086fbeeebf5c7ecc239e3891921516e38621fafcc1ddb7b40a81d6428ad3a2aa4e348b107b4cbdd14467ca52a5417c5ae7bceb9d63bb9a82043916dc38c30d41b8f5d2633c7f92676b20cc72545347eba44da880f0bc4b6a11aa779528ff60d8e815cfea93ab10fac179ff13f1de91a53f22f8c08d3e28d34f7bfcbc1a3e74f8f0fcc8f958a133a6b587a34cf641064f42ca66f4b0aad152ebe4219392b23ca0775477286d52abad783047a95cbeda689995eb0eacecec5e2df47eadd00e67fc17ae57788dec5a0733c30da4fe9a5ebd2e19adad8b9092b65852568c90e0061dee6cfdb284cb7755ad3934ea5ea98f5a938e3a2c29c1c10d39ac5d76d89095d2354be3a0e9e4bda1a49ae97f70506fe76c8ea37354d72f16cb90199820021d48230642c8b8f106836ee9f1f66f72d5e306d34d6b25844a19e48edab0b607d72dfd65062973b1584ed8d92861c3514d07fda5b64e5f6b821b6b4083d64926f71c3dea0f0a6ea841e5a2843aeda0536c77b158fce4488a118b058c1b6930bbc56d0ea267b4ded070fae8209fba84ee8e673007f19d59bda4ab6d2f168be61db15882dc300342c8b80d3a088d7f7219da1f753a5a46b552792e16cbae6c082c9616dc20c3a9f9fad4b73f641d031ec5bf3edd39966e93183eb57b32e84de3e6228be572230cba3a5beda75ebf42088694affbc69f6d29936a6f7c41ada5d4e0a54ac817dd1842fa8617d2ff2e37bee8ecbab62e2464923dad83cb9e26b9802973e1d295f6ec5a0de3c6168caf5fc6d6a33491076e68c193ab59a4bc72a973f862b18071230b292d3b559fd9ca1cd48bc582033f49c36239d994152c5c2eca43446abddddcb882ae73ed5bab27791b41b158d21915582c16cb890991142fa237ace079ceb5555aa6d195a9c2d24309f12685d8b9e962b15c548e1079bd4185854ead7399d87852de056f4cc115fa4209e55df2efb4560d14335c0d3550cc308262028b450d142242d20d29a4a2e457949bbae9fa62b198a9798b658d65f6352270230aea2c93c89eb05fd1f0c5620943c58c1b50507ed5960cb2c7cbe42928292922384131b158d2b8f1844699cc526b7d52e5e75c4c860c2923481a42527ca58c22282963b01b5181c522846f38c195f71c7752fbc9df6f34218da63706d5b4db49cd0485345911cf9f3676100b2c16152132b8b184357e53a62a2da2b92ba10f2e5edc4ab59de32621575abd8b19cdf3b042c262578ad5bbe23c8ad01114f97e792a4eb6b446389d7edd8aef169f9345484b7d328edec86cf149438818168b10223788a06fea92e36a62950b2f16cb89132941392971306e0cc1f85a2957b6deb8cfdd1002a66366fbe724738e4adc621992e21795254304168bc552525262b1ece04610f08cae6b4c7b0e33f10d20d8f22d932e99df2d3d94936515582c294b6459a58c1fb8f2843cf55b6265140a1b4be44bd4302142c42d969513131414a061b1a0acac78ca8a8a498a0f72213b6bf45eb494920c7a707b14deab2f376cc75c2c1693121493954d295949b9818ac532c4073c60e59ce7e02645de282f16cb1a87031423164b0b76c0bafe9899958c6da273b1587280b24ad6e025b226a0035d976e133b4aeb747eb1586ee0252b6cb10c094464c0e309292d476ad2327bcea763726133c0e0e184773e4b99fa538796f252d2274b644bd8596082141e4d3846dff79a6e6eb6d11bc504ce830909ad7fce3f2a1fadba216408f14631018f252ccab438a9f4ebcdf9b5586ee0211083871290e772f3a6f3b02fc68bc532c40c2167f048c2f9c67d3da590a2447eb15890c08cdef4a89eefc64b332c16232a3ce071843b8717cda7b343b5c94d52d23043c8ca9133c2088190347818e1cd5c4fcfb21d36b3cfa308dfec6c6abde7496bda4d52d2b0585653800711d6d549aaeff92a087251593294c7102e353a6477363d223e0f21ecb6df5929d5abd9da4b3a32a40d2fc14565c908a279283848230d3c82f0d8f666555a6a19364949438d13133650525010021e406885ebcd568ff26be58bca927151d9cb1941d208324609829021248c10b4918252c4cfb0585697084163c72fd21fd32b332d7f3c745fa0d9ca85f4647a9bde10213982b0a317bb3a2d75b6f0bc040321b88090cb0e5efce9363db676dbe0ebc0641767faf40ccd6eaba2a05c4afac444093b74b17ffa2c42ebd79deaca85f9cb439bd9f89d8cd8818b5475f2177b0da25d7e0bc566a712ae6fb30aa92d74ed9ceb7b730cb56d472dd2a46e60072dd279fb9e9ef2c56299859a6dd2e56db889cc6461d01f35bb8cb91ff2bf94c4029d648e99afed8bc5f2871db0309e90d1a493d231d6e9fe25be72c4c82b309d33cb8ccfb1119b8bc562b1c060872b92325bfde8c9d8a183ad386bc673f1fc6a5eb684f865535672208220418810593182085981c572e30b3b587127a9e761856bbe9d2e2b263818b2631566ad1615e1a77568083b54916e0ae1fa233e2aed48c52e7bca5ce6d3b5a3b9582c25971da848aa66a1496ba1f1b566080f769ca24fa1f57afcf2a853f7c10e532ca3deec555fb92d97e22e7d6f1e63d6ec19448aa52be9f766abf9a53a0adfd665ef6850eaef8922a17398f35cdefef797ec08451f468679f924f3668362ed9637aaf5316955b0e31346cfd1f5ee778e9b23252728168bca1a2828170c9820e6448c1c49e3024272b0c31389aa7f95c2943af16af1263a074f5af686137b868e274dc84e1df4178b65c726b0b95317d737cdacedd0c4a2c34dbf9e6eedf72f16cbc909c408a24284081841820411e26c98582c44d89109cb3cbedcf4152636ad9ed97590369e5d2b2aae0613765ca2d76a1a773d77b71c2de1ea36cda8658a72ed2bb116ba516897a5546530c53b488a5b610725169f56e566d39d3d7b63a0c1028be553d81072d9310954c8be8779eb93526b8724dc96ade57abfd20f2f0d7644e25166f341bf5eb5490a095e6d27f7b4f171952e821d8f40e6ec9f3c868ab1311da1965527cd3e48f58f83180a82d80982980982d81941cc8c1b4ed8d1085cc7c37d3cac2e891c2982763042a1f6bc939cc80ad43009c362b1ec58846a22ce449d96adb76e8388913176284215facfce34e78bde7624021dbfff64d33ec7eb1071f07b9d44a5ec106dba147b293bb54eef62b190b1c310c6a8104acb6cb25ba61078b9890cd3fb28a414213ad53a3f3fbd36e1c12263802164e5c81927635c760ca2d142631adb18bdb47487203cada576072d4f22a61d8148e6115a99b835118fba80b1031069d0526db013ea1bf523464e4c4a8c1c597195dbf18755c6898c728b658813596b0218ecf0c341445cebda990eb9f7c17919dbbf84ea1c15721d98a4f80a0a0bced8c10747868f39915d23af124f416195121593dcb187830a6de97275b6cc282b66871e92695398dce0b7b37f1e3665fa26d5899a954a3bf070e6fca8b5dacc9dc52763c71d6efd90b9eb51ad7c293b2c65364b69764eae9908bab0a30efc2925443d6f8cae437450a48fce9bb2e3c28e39e03bfea365ce29fe8363d82187947d0a11eff81fe6b3c28e38a4c584fb4b3337e57f193be0b0feea4f32ca5de876831d6f503e77c88c796d9a77b158860c6163871b524a68995a63544ad6f72738d9d106e328a9a34eabd5c7d520d8c106d543a8ec7edfc6243564c71ad2d518ffbff96350211676a8e155ddb1f50b7d397a6e61471a10a16b2a45c589d5522dec40833b1bfa9e2dc77b932e3bce60b9a9668ddc529eda0e33a4f5b9d6bb31ae0e9d5ecaa0d65bcf5a3c6466f1da4106b4762b255ff6cad2a68bc5320664b3d0f470efacdbb9582c173e39b2443cb0430ce739ad6e26f2376e6c4718b853f69e36762732db01865667e60c15cadf3b31f94226639586461995e5edf0c2fa439d9bce4243bad605a4993abd2ef2d637be830bd7ac28a1e743c6deef62b194a0f48e2da4b42939fa694cb6a42e16cb077668c192c96d93d83ed926ccc21e850a2dfd74fcc7171694fff26c6392af90098d55cd52b6c30a2b91a7f67294d45a477754a1db980d9e46f4eb98b3830ab70c572a5546de5568d8310546a6d05988bd2f164b4991f594151523474a9c8fb4a7906087148eaf85ab8a8718dd5f14b85797396d14de49cb40c1521115b74a06cd509fb0c8302ed348d3394b74c24a53bb9462ddb6776bc2a156cde8a927cd52c7046fa3c8e41f65abf79c2528a3b45a99ea2b01cdd46ec275cea22326419923b2358cf84cbd23e15c8f496764336a7947586c7ed82711bb194f178b25077ed96104bf4d69bf5dd9b332694711d0d23155d579febdcfc81659d941044b5ed4946e7cbfbf86a421e4073b86806a5471266eb3634c09218f0d31193be54b254b3b82a0d45279baff4f78941ad9010474d29b64cf6f689e4ca48d94955f2443a71e4d319e59c62e43920e5f9c40472f2e25773ab40ad52fb474f0229d75f131e7ae0dd35f2c96941215131dbb30e9509f4fc7506bfaebe2efd99455d58c66a35c98d285e93957d25fc675e0027d99e444c9aae316c8165a4c6e63adf7b702223a6c81e7d4f1579127bc3764e8a845deb90d30ea5f266ae4ebdc8683450365e5a48c3474d0620f19558d94c23174cce2cf23a3a86bed1f2526810e599c4a84b96eb9759e9a58e81a5e79d2ceef0f332c96fdfaf3e3bd5e78fa8a759b0725e5dc141dae38e7502b9631fe9c9a78ff1c63acc075cc7bf34825bfbb0c74acc2d771743edaa6173e52c5a2b53215f721e55f9c0a57c52819ef6b1ac58c8aa38813f9a6b77c4b5f021da7588813353a4a4d32c9ba0c1da638bdd232663dfdc2de1f818e52f44aac123aaf7a77cfc7400729507937e93da6d4a98b0d1da3c0ff4443e8972ee4de3a44715a1d469a6c6f7dad25a22314e794d9c00974804293fdf9d3a819fcfd4f607b2bd3362a1da4679de8f0c4319a3bbc5e5772f54b818e4ef01bf657eb345ac3c949a083138d967ebb79ad5bcd9840c726becf1b675f93da671f093a3471e8d5cfd9c309b55aaacb38838e4cdcfb1b65fef7983089d6225b6791b99fd3061d97308d0c52eb15e24a9ffa061d9638aed86e0d4aea55c2bdc0404725945ac9d5186d4b73d4a7400725901f3b9e6eff27d03109f5afd6eabed1c4292d2f62928282131d92404d7bccf9d6732b4e9178e4ece49d3c39224e154898c53376d4d8b83a1a1d8f305bfcc97f7c154a09e970449b731271ad33a378e723282941d1d108b5fa78d52935317430420d5ae68d59a6f687a6631189cbf7d7a2b957ce7d59d1a188de54b91a533d9d4a2911daeb2cdfa9df3e5317061d885826399eb73378ce2b63061d87505646ea18dff5fa9d8bc5b2e223f09536c210830e439c7ef3ca245767b53aafb272b228d051085ee9243d07a51a5be69711e820c43169909eaa8840c7208cfd2a5bbe9b8cb11a272697342c168ba5c4888a90223a04d17689cf3277a7974a4947208e4995e9463b112e758048c892b729355cbe5ac71f8e613f6bc2e3a8d2b01f3cd532d36922a5cce8e883a3b33a6afd7f25656cc555cc88840e3ef4e91fbe84cedacdb47b303f5f67fcd3d275343dbc6ac3b79026a596f2e6e118f4eaf09d4e8aef0c0fb794294228a9b9c39fa44819649786d4a13174d8c13b15a2f535afcd6a2e254174d421a5a76d4ae769b1527a035711a2830e682bf97a4fca315d5230828ca1630e463ba5e5670eaa366b849ce890831b5ee80d8fbb316fe8c2031d7150ca599df5aad49c4d0e07c5de78d6f122eb3454448d4db99ce878c33a2632cba69a8edebae11242e52adfd1ba6378b158d4383139848e36304298e8906964036ad4b45cba301333af818f696d367d146da1a5865d09f55f5ab38cd2c9347437b2dac36c49a97234a8b56137c9aa079d39439a5a7f8a7829c3797dd16106637cd2985687d9ef51191679bb7b357e72e721c35f429fce4149c7e0ba78d09834dc6b8fd12106c44b59157f1874e94277e7f00fae1930a885768797353b717d6197bdada39475623eea85b44cb92ac2d36bd1315dc85b359c472d9d9e292e38734a758f48b9cd9c2d2465e61479d156df392da8abcba5de7a0ca97916dc1ce3357ca3ca9763214f6a63dafc1b5b26d115d0f25c34b6d2cc9cba0e2b183732750c9959f6265d7454a191ab623cecaa878e520125f231b619eb42dc53d84628d3a0e930744801f12b645e0f71a37e74b1584a507a0c1d51303f29bdbda743864c5e2c1622ab8262448d2165043143071414bf7955a1daa53ef304852e51df7965b891af13ce55e6a3b5f6d2aaa4928e262c33e8eb5f0dab1e5f4c40a44e329a34ca10e211a4c1868e25a4ba224c8990fe594965a043097c0721c5568e8ce9a374244153da7b37b712194ff36fd23c031d48485e765c4b0aa5a40eba0c49d171845c6625bc75071d2273741861edcfebb3a1399bd53a8af0a9884c195bb43621a48308a84b1dec3e76ca933a1d43d8764edfe6701f5dca3a84a0c776ed7af306f171d7110474e644ea07f1d8aed601843ba3996cfda55ffcf2a5ae541de50bcdf5eb2c5e94aa1ef5a21359d25f799dd4ade4052e427806ada9a4bcbd0bd37568ef77abc8f8ba3888d452648bd5f244988b3589bad964e36fbeca410e5cf03a26d355d353aea75b687b3a27f95217ead5261072119292c3166c16a36fccf578507f2dce312a7bf1e1c4aa162d10d3b42b73e741ec9c8542877c8c3aaa8f275e59689a4fc955baefee5eb158563ddc7ceac062615ae7d1259bd3acce2b8ea3b4d6ceb9279521579c3be8b47aaf49539d46c8d10aec474a9311323bd4c6073958811cddd431876cf941be41841cab607c343be48d9c906d0e55a833b59e97152945ae4672a46231cfc285e93c26b336072afedce79d6ce32625c31ca748c90a59aaf393f86b3cc8618ac57b6f6a2739f6ad2f2147290cad4793d2f02073853ac8418a565bf56f7ae6f84b9f90631498cea5757e74cc18ae28d649aa76e92a938e311f8a57f47c26fb59512d72430e50bcf94afda614e5f8c4cab432a595760fe7f6187278c28c4ac96dd3f94e8454275427be3135281d5e53393891ac17f24eb87c52da75851c9bf05363363478c6b967185149c9a109dec4c8b019aaf6dd0de93282a478afabaca010512931a272e309393281f20eafb4bf4ee56b8a9103136ba546b597a9f3949e1c974036573e479d35b9ccbd2087258cd97d54a4d059b1e28bc5920393f71c95303c4d69dd085fa114e4a004226d4b866ea5747cf162b1a820c724d449331b38a5a64d9e5167a1b3d665889fa01011c362f113142268e490044285f87a4e214f7cbd582c28c81189930912e853a5838d545721aaaf9d418e47f8dbb9354afd2923838e488e6bcffba84e0abdb936bc0441ceb4e1250862b490a3118ca79236e3ef2da4d226256dac0ee46084ea635c997a359989b7885b95949bb5934311c72c4fedca0b29d5bd44a0bb8472af5f9d745544e4f235a4d435f7fc1d14390e619455f320b6646b311902d97ae399dd87d3422e845a7594d0396b4b4ada4859b991841c8460354569dd668e732f1fe41884a747e630a75c73c7680e41245e9dc6ca7655ae36814807dbd3ed3abc963c0142d91ada45ee9a4e538e3f1c8587d1e2b3dab4d30fad6652ad85780a7ff50872f441cde251df33abb9440939f8f0b768bbf8ea242ee61c7b507cebaca47cd79bcdcfa10755eac6c724fadfa9a4468e3c98c5ea57d37a11a9f21423255fc88187a3c95552ebcc36629b2b2a3e56b17d4c9bd5f5bf890dfb50c5b9c59a149a46d5e72b158ae78c32ed683317262a8c2375a9a66d3e4ee167dc0ce2df7538995d960f532c6d4fcacfabf7c55ba5386bfba06932cbd6dffb2085a11dea95ded0f4ba93e16314debf54bfaf424deb920f511cb6b383fc5c9eb30e87e1231428951aa5145a87eaeda05867cafbe8e5e339c99ff0654e9132c6513a52ca87274efb31bc9d7e9b55b58f4e38a6c76386152d379d1367cbe9cce931293caf868f4da8aed9936a6dfad0c4397d9f87ba7636219509fc3f77378fd767adf181093ea5f01c9feee3e4cac7255815e942a90ad3a675253e2c61cf96cce25ded93ebf8a8c432f9a779a9f2ec499492220217f8a0845969d1e052d5f9e92f04053e2681b2d351fe23553f9a2e2544886c89491113332e2b46bcd98724cccc3d3a1a4279b90c193e22f1c9fb57593f6ea7a590c8ee472bfba0ab957f23f0f108a4c71c53cecd061d5a8ef85427e14279f8f58c36823f6dcff21bbb26321f8c509994426bb8cb26955a84f9574a2ddf5e5eb657071f8a38c4aa7f65ffa2f77143f848c45a69d9d17f5da7d2413cf84084a25b46cf3a76d019f7e23e0ec1a951ca37ab4f526319f83004e37a7ce384eaa0433e0ab17a2ddd5d32ef5f737c1002d91b531fe573fc947d0c62757e2b46b76ad559810f41d8e373af679a8f40f0a9d952a4ee80506dd62a9598e8545fb9e0e30fcb9c7674f0ee1d1b990f3f3436bbebb1de3d3668888f3ee4fde1eb47dd49d9621f7c586bfb6452fe3f6c4cef21f38cadd94debd7a87a385b681b39f37511ca13f8c8434a756bf91c1d64e70a0f4ad1affb13526512fd1d2ef92d95cca3a699cf317cd8c19c7aeb3569db183e56075d76290f71a9a6bea543c24d4cfdff78d820340773e8bd86f0365559ca412fe55a2bcd9fc4be180773dc542d97ba3e670f1c90ab75869d8b9a523a3ede80899a6ce68c3a668d71c3f7e2fd54d886b366d2f9523f0bad65c3315ba997cfff94e61acc601a26839e66d2b01a8e7a5a9d18ffa875bbd2e0faa9d3d332632693d1f09cfe14997b5ad5aece707c2c2d6a369b383f7d982195995e78ee6ebe948f326cba35eb7ea5fa604264b0f54784d41bf5a82dc760f24e27aadaf5218695789741ad466d93874179a7c97e53a5524a0886735261ffb93b79f7e70b9a67f5afe6578bc7cf0b9d884d7f2764a6ab0bbb2a213326dbb86007db2873272d23f78ac1c716ceddcc71a774a5ec4f061f5a508e4e52f3e8e7e7549be40025250b4aad7bd3344fe67c721f5860fb3cc8e9b0aaa54c5a838f2b6cbf3a7cdc850e9a3a1f5648aac6d2dccd152d75087c54215f5b711522934e1afaa04232ebe85a3e33cb943f021f53e075cd65e9adc6be330d2123f0210555860d8f41ca9c6e1f9ba8ecf2110536ad877f6d21fd85275f52051f5070bfe4cf4b39a7db2a2949c3c7134e51e679e4cdcdc779e15d3e9c80a81fe531636ff29659c34713d271c5ab132237ba894a7c30c152a6d3c98a8d355850825f378305414a1064e5c819ef6878a39800871a7c2ce18f9f37baa5be8cade34309888dac97e2456de94c0533f0910444cbd01d6764cee3f93576a5053e90c08790a94f8c5a57f95c2c161480f1021f47c83faa185f572da34c3e8c9094f9b74d526a3dfb28c2a363c5478f4fbd3e91e5123f312942051f4430a74e1acde5e5e3ec3e8680dfc9ec676f3a35667c0841a594e65cfa6ab46b3c088af3ddfc3519b3eeca0710cc4e5a33e4ff8b3b89f4fd511de2f2f7c5599d9ecb684af5f4ee85e2b2b799a3e5064f0f5e9cc3f67dad882af5dbe552e23a305129d263170b295ea368a995f9085d7ae86221ea4e655765292d948b5b3cf334caa9072ef82c56abf1f4c1819fdc22f1cc2864ce16c893b7fda7db5b44ab85bf493b492557e34b0f2db43b5bfdabceb45778b15852b6c72cd62d7fdfa53a36e6a82c4ec2b5db6fc91f35552c8cd3334ade6c8c2f836061c8cf96c944289739e6157c90a14fd743b4e8922b72153d42340697a365c9911ead684fb750eb5aaab519d3e8c10a3388d8986233cb88a9c72a9239895dd1358f39eb8bc5a202891eaad84367ea8c527bf27d45a2472af8cde99f63e79cabef62b1f440c55b1fa26fb21a4d837a9c620d22949cced9daa4ae8729ce31ba6a368fa6cc698f52381f468c6cfecc9ec8061b2621b058d29915b4e7c0640c8bc57b902279428356a31dab3a390ac3eb37dde35be219238a5de7e71ad51ac5a83a1489cb358d61323beb13285262239a85882b0de52776d9fc575da1bd2df744aa5f06117926a446ad4eac6e65a38af837ad224eb06243ebb03ac7cde99b30ab17b34a5d94f0a4d404c234568cfe57aea39609b35232469d942fb55f933ef112354c346f05aa0726de927952a867cd2dee4ba04d5fa4dc1cbfbd374b28cca5d9c6119a3d5889a5e69659cbda77751a25587dca4ceade784cff2438312b4ca7da0b110b7a48e2fc23cd6e55cb98e4de272625282b3d22e1ff89b03b5fd136a5ec911ba8582c1ee80109bb5bdcf98b6ccf5bf778442be3b35bcbc913cae4831e8e586b96b2d4b96b1d2e6f041ed23335aaab522bc388733673ebfb526fab5c041a36bd8d6978524d7b28622d9f31ceb84c3a3e9c08c37c468458792dfd400f441c73cc8e8e9ed5d9e143f025a3a9f039f919321743245b68aadad732fd62213cffd0feba47a44c1121128df97bde3f0b595a8f4118fe764baa276dbeea21084697de1cc573cada68206eadf7a3c7fc2eed6580d054c9efae33a542a37afc01fd39cab859f4a64fa34b9f98bcc53244053dfca032ad37ba4e5a2addefc562b9aca084a1b27262826244043dfa90cc99a63445e9a42973e15d59598be50463a0c10210f4e083a15993bccdf56f214ce9b18757baadaede95523e83460f3d2463526f32f5efcbd67be4c1d155a621cbb3dc8ed2030fb7f4d825d7a56cf7aac71d72932f65b494d47ab42e7638c7527b4a6baf4c3f3bd0a30eea8b558fad6e4ae8edd2830e86bf8d7525726a53877a2408068810393246902ee3022964389fe010428f39a87c55c76f8e1b47c85bd0430eacfa58fd789dd38bfb8e461c0ebbab72ca54a7d72d19f48003f79b74e9e03e42337e29515915305cd0e30dfd88101b956ca955ee1e6e58e753af4de659e1a7d1a30dcab23b3d0dda42b5ead2830d6c7ebbb7397f559a64419012085939595e1678a0c71ad4e0f2568b102a84a8530f35a07abd37873fad83f02f164b1157418f3498b4d7e3c8fe2865ee4fd0030d283d622b64f6476fb1063dcea0da9619ab947a0e2d9961cda04c64750e22be329c613bc9c95dd93264c870d0b1467c6608ad35f71883aa93072dd7db4cdc2806b37d7899599d92bbb34718f29149b38c95aa5ba7567a80617b294eebc327f195f9408f2f9c77a5f8b7ea2462f7f08219a5ffc68d0fcdb477015da24b5b447cb2465468d0830b9ae64f1da5df469d832e16cbc91a5129d9142f630bcb9c321dbae684e8540bcb8f316d87da11595e164e61d26f9548b3552d167eadc9e4a4d4af3f4f8f2bf4ea3a57a7abf99e15a5b38715966ab3ca56b4afa947157c25e4ce4e7b6746de420f2a9c5e7cd57a701944e8bcd0630ae7d92cbd63e89b5f992ff490422e7c5f0a2dd92f4289851e5140cc758932f10f1e3d3da090c7c6e4aff5cd684ef57842a285a818e55a3cb6d5c3099c782db4969c7b34c12465942ede37087a300153afc55563eca38ef75882739ab5760b33a1a3df4309f8ed6635a7a50ca295286304294388913da34712749549f5f89a6dd65a911e483047174ab9d24a346a17073d8e90fa3cdae2cca49b8f3d8cd0bac9db52df7dd9aeb12baa47113e173ac27456abdad7c5622959834d8c68a00711122e46b6ce180d5aea7b0c01cda74de3f7c649555d7a08611df6fb2f0e1962891e4158d377eeefcd3c0d690f202c94c6158d5f572ae28bc5c2e31726f1ea714ab437087d81de785577aaad31c87a710af1fdfad6282a55bcf0df3546cd7cd9d99236d6088f5deca25286f1d70d629a22f0d0054a673e5383cd8897f2c8c5ad448d10215f6c7a9c072ef020646ffd9c8ca2a95b98a430a183522d5f7b6a0ba4ec97b239bb93abbb164afd6ed3a8fc46ea8c167f9b7a1642660d19a46691b7ca98ea6c93923a280b3be8ec332e4fe84cae55b272c4088f58f0f3256c45050b467c6cd999c65d6bd02bd4b0b7b7418b2ef3942b90a5539a10abfab35a61fa09a1d6f4ca4ef762c59d33edbc145a37a9bf8d95932328615481c72ad8b50daac63d0b7d2755a08589ae93f5b526a552a130d9a947eb5442f4731ea8507b293fa1f5e97cd4c5e314f86fe64fcd8cf3aaf59412c7c1a2318487295032c652df2d95167fba84804729d67e5aaccd4586802144489ff84a0e4460b10861670111225b4405168b101cf02085afbdc3eec59396497929694759711ea338ef7b10a14d4b97304b52504a4e200a4666ade30721ab263ec52314c6dd6cdac18497ee20e2018af597dcfcd94e5e6a7eb15856200465e5a40ce5f109e5b6fc51233368699a0bbb1195131311f0f0c449dcac870c429e3ca11308e9c4a563f6fc26c3bd526ec9101e9cc85f0b95b3afe5cf5d3c36f1abd7617490ea5db33481fe8e09cd5168ee25275f5244657150e22b9bb2a2e2011e99507c86cf49ee3b4109a30b3c30f1eb681e3666ed5666a51c09a30a3c2eb18e26b1b15f74e7dc2cf0b0c4f51a4a3e6f4acf417fe151894d637568cb7ba5e44909dc836ac9af352134c9088f49a8356e5299b51e25a54b12a79e36d9bcb275e69b47249217ea95ab0ba975fe4062d12b57a456a3bb7c7f84195337c3bb740d428ef8c49ed8e79846ccb38db83dbc4a17ba543bc668810723f8a454ac0acdff9dd1224cff92e1e75445b0f79dba4df7354e6778246255dbab5a6d83ee312122992fc5758934b51d3ac49b439b70a9cea574f50a3c0c914e4226cfa164cc36cea310478fea95d2f15c5f3b0f42246b5bdb083d55bcc063100a55659bd92ab6eed3051e82d8b58c7a63689a68d860e0110863ce286454931a36b5b4c00310c954e2ef45e48bf1248f3fa89d4ce96a549a254259e0e187cb65dfa368599a63f8061778f42153a5d3df5faa7bcb67f0e0c327afb2659031e70c9e10f0d8434a66f52764269993f93078e821ada32d3bace689471e8c273cf30bd55196a9c4e08187b45f7ec906b5318f3b1865ec8afad7c9277d0a78d8e13a51ade4eafb2c17d52161321b3889addd28524f9c672e25e04107a40af951eb2475cf4879c0630ebcc898c1757cc46f521478c8415f755beaea427e692e168b9022be52060a8f38d8adbd73856db6d08d071c3c2d4a08a563fee7f479c34178103267685b4d310f3728c256cdcca50e399d471bd4aaabef654a74336508e926c2830d4aa17f732a296cb7f436e0b1066673546f32e8d0e6611e6ad0bdd378afd20d75a534a8d95fcf3748d11b9f754445480b78a0e1ff2ca733c788c935cfa09f6c6bf911a24aaa6638c3eeb76c684ae52d8f32f4eab5c7d68ffea74c86d6b3aa3a21f237bb8ea1cffe385711e7398f6230a45e59f3cfb4496a78848155d3a95ae3bf7e9e2f16cb0c7880a10dd52eec954e4aecfe85e4c7eca63cf355898e87170cf1dad64ee4660bf3622971365605053cbaa0e79462bb2934c496861021e262bca3c168582c2c061e5cf05f6b76da8c25dd64148f2dfcf2a231b4cbec4abe178be5514a868001060f2da44f8b53524ddac82014834716d6ecbebe4a5b738f980716f05736229b7184d6593caeb00ce23ee308ed52a4cae06185744e42eb7d64cc6d2e8f2abc2f95f6bcbddf4943c810e28d620219f0a0c241d6e3a826dd624c76e1934d595330a88d9b429926cfab75e12185e58c525d9dd6a3da9cc532440526a8018f28a04b7c7753a79d09d5c562f9752216cb10328478a398807940e160526a132aef947892ca06b701b40d24e3037364e5e4c83a821ab00dd806cc28408d9325c23b30601140e8d10522a001db00e6060c057845e548ca0e1c6d2c0d0400004a899103002b2a47d0d081c3d5d8236a9c2c111f3854524872008063b2c286496b62ed63da3d321ad3c79774e688c552c4534ad830e9925e3931592162726495a4381113234550d80c209938262b29171522252524403061a4082f1d402eb1e22a967036508a14f1223d8054a20d235cc48bf000428953e203c8248ec94aa31439525242024412c76485c845654b4a488044621531215262648c1124000824522e2a25619c5186193e803ca2518a9410b9a80800882356111322250700d28893bdac94a8a83811020061c489b3e18b4049711d9478ca96a8208c33ca3063004014817aa424a5a4518a94b0716252a2869f2c0048228aa0a8b1728252a4e4649518196304100082085c335e644aad115a7939a25272625282b252a282c234007288cb5c0acfd549a98ce862b15c00882110cf54a1bf73db2a5f4a0ad1b9d4d81954e9dc282fb2271f004288950ca94336f87d96f105e5c24006e17f9766f131cbac462b88c54bdcd363cca36d6306904020b5ccaa4388cf10a75d2c160302087545ead63aaa68f129f19514670b903f9cb3ae0ca24793eed452c34f4e504e4a14103fac5ec56dcace1e61a64d51f1923629b1582c162fb2272400d207845aa133dc4acd59a5103180f001f1fe3437b3328b75f76012f53ace9f90919bd683599e887a71a7775ace835a4f6b513abecabd8707949033f32254a56d4e00e40ed8ed87730f4a445400c40eda296d232e52b379150052073bc795bfa293be8c413a642a4d0a319faf359b50564eca98c3ea3a2f9e5ee375522072586c673fe51f27937b26ff699431c618455416076d2c8ba5040740e2a01eddae7534351c56315f62e6edb35935a222040c206f483d4b856919abd3f76eb8d52a1984c9e4494a59080980b401a99b44bf86c97c1f6f2365a58d94343c00840d8e5a2d3df79a8a15ea5e206be86bee957c75773a662100a2864f4ce9760acdf231514c4800240d46d5990da865a64e15df24aa77354e4cca0082064ee796f1a366129bf2037286955e1f29539f6e1d9931809801a5a31b747852cf97e4c02f33005206b75fd888d727527b08840c9c091dfcb55cad8b0e9031ac4356867ccb301d452062389fb2cfbc9791cf9dc904240c669846dd5febfe42270408182ed32ccc4f76bef0869ece5ac6537e7bb200f182752a842e3b17e5af5f2c96df131c9418205d38cb96bdadb9de63902f168b1a25ddab807041f3f431a3a59a54332e1b251d06902db0dfd13dcb205c89a83928b9815b2c276bb250784960b11839828068217d7dd1f54d9ea67a16daa4f77346cda94a0acf241650abd7d5bdf435ac7db194ac6c9114942fd14c205738ea4e8de55e5b7fb6156effd4f9b3c2d59d5415decf183cee0af7d5dd6565a5d7c82a6242040c2054d0564dc8b2d77d692203640a8aaf9579eeee1fe61c011029a039a7a8d2b14cd4eac0004814cefc19bdf284e76accc5625183c8960c8980ca46c0a8408c12a0c06211f2022050487695f4cfa426e6e427a8838a91579527e5849c0d9303e2843b66a94e8b109e841ed5d8158b05c524016942a684c67c6a3693b0170813941d858813fa4be49d848c0164097ed62b5d8c4ebaa5eb33a9844cea1dad54df8dcaa88bc5a2797b51293132c6082c96db8b4a18409280d625b4b80931a366ba582cab88091105828435cfa49055891731594959364a8ce4c04b8a3811b7582c961d02e40806552d7daa43a69f0f10231c4abdca70da6d4fc7b401a408aa9dd9fc19a544388c142eef3ad2c4a9800ce1a0a56e6c0629659236102124f6e3e1a3cce7a559204138f5b4a752a19a9ed3040204c377be8baad5da3a7af98549f8ea539aa6fbd574f9e10bff57fdb73ee5233e354c547a7178191dbfd1bd582c67fce0c5b623b5d0a6bda3d9fbb10ba3a616f37aeee5872e504acbfa29b9dffcad1fb958e7dc3d7d1be23f3f708192233664097d3adfe2a01f4e86ae8d908fbafcb005af757f374ae1ff2a54821fb5509dd9eb68ee759b45821fb4309c90bbff2c56438d13142263fc9805e3a2ab4e973aad6abc582c61fc9005b25c6bcc31a52acf501113f606e3472c38199e4dfdfe367c0d237b860b7ec0e28faa575ec8cd42ead5554a4a86a0214445c599c1b881abc062f196c18f572ca656e68dd42ca1e65e4723022a680859c10f577077223ee9b0225c7c6d9c6c087eb4421d5497ca90aedb45a47eb022919bfbe9568e76f5fab18a3dd568ce9abb5f8ed40f5528eaa1759f56ed9c2a1d987ce0472a1ea9ed5e64f2243dcc19fc40c569c2efc7e5433395c18f5328444ce5e758662fe4178bc5889145c20f53a4cb5ce718cfeecfa3a538b8afeacda243bf7948b1cec973eb493dd11d8e42d59ab793e234e949e48728d2d146bf6975424fb537f8110a64ecbc2e9366ad6e56a0f8939279ba417f08711af9f10974cbae568dfeadf5e8c80f4f2c856dfd0a29ea042255e6d2593e293f38b13cddc1bedcc5ab95b6e125f8b109a5d0a41d75294d75a71f9a38b36fb88d52a6d3ef656271ae31d493e68ad57e6062a5f74a537b12ddf9adc28f4b74beb2b336df0775be157e58421f5d57ede1857019dcc28f4a249ed95e7cde60ab75b8f08312492545c8a821c5f76812ab876848b566077e4802fdfa3a436832255b2b129aa77e4022a963ba6cb790a31afbf108c6d496eab14f5246fdc31197de8ed677fe55ea37e211db2d549550cfc96684bebd1be448252a346b112b570da2b79e59c956118b6aad7a6d2fef7c4ac41a93d63935c72cb64d885867d1b631989aa7341d02fd265d682b0d91d03e1972350ab9b95408b5c6b41addd934c7244268a6c4776aa1ae5f3f087bbb555defd7b7850471c94aed9a4f7b298302916c7999975189d83c204c199bb2634628bdd23fa842a6b635cf3442aa7e58fb5483da51f661d51f3d7695302df3c307b3d4e2795cbc8774f74bca98f37699f4d0be9fcc61b49929d9c9835af50aad446c8876e101a1ecd4afb97787ff6c3c69a99e1d4ca2beccbe44de5307e67be48efdecc798a1832b847893d9314768ac073fe6e0ca24da49c3ff099d5d2c96213fe460fa4b2d27e364eb689d98103939a27ec4c1f6dcda5dadde523a1cce5a75bc32f34ca9df903284a4fc7803328995f39e77a4d01aee462c962168084919f2c30d9e09f97bd2b478f1ba8bc5e21e82bec18f362466ae74d7f3e5a978b158ce0f36682a9a375a83b0dd20fcb18694867f88caed491da50675dcf8b169da66b35e834dd6f891865506997ffdc469c68f86d5850ad5fab44ebde2fd3843761a43b8bc0c297e35832d3b8f8e58a15eeb4e199679f4782921d754d66430e62ca3e996affe7373b15848f0630ced8c169a7e654768530c6eab192df4c566614229265db246ca16d11f613093a9aaa71517af4e60506fc447794acaf697bfe08dcc6d6d429a7dd0bcb0fe5c4f97eda3a841040c36599594141ffce88221e6f5336fdae8baf67aca4919164bcacac9110dfce00252b6ce6242e9979514678b25033fb6e0ca4cba54cd8c10a1167ef159d7ad988a529f2cfc52ce84d05272cf643fb0e078dd695255aefafa15cebe49cd6cdfe997232b24552a358fe91e3327ab701cb9fe518a7a4dde0f2a205f9b9a87d6caaffd630a9bcb9cd934aa6ff5fe430a49d3f05a3286ce1c7f44217da5d36b7fd07aaa5f2c961f503867b43bfe08fdadf31f4f58c69a0ffaff4266cd1f4e60739a387dca758e8d92f1a309b6c6cfd3498f7d4725262832dff7489322a75234fc5882f247836c9dda16f22ffc5082415eb58e31db8f242c652b979db3a623b51f4840dc7356f3f6a24fc87f1cc1f0935a55753653d213fc30c2a6a59019f1423f8a807c6ea974653e3d77fe2002c2c5678d5352b7896d8d1f43589fd88d315ca47a0f52f92104857225750eca84f6120ff91104c6f59d760e519aedfb018495c66a4e1bd5a88ffe2f7c9df44b9794fb42ff57391a8307d72b5b227bc101492fcc318877f618f34b88bc48b6e99a319359bf14da05225b4c5fa9f1aca54a1769da6757fea71f7ecf85a2a5b446a72d7f3771b1d87cfaf9b45dd367dd020224b630f3ab8d419dfa89ca6ab1102e4f46a6adba4d40420b0990ccc20224b228313102060a2240120b0790c0c2c40818604880e41549e28a0990b4c20024ac580503485471c4c40802485261011254acb2c98486ef462d75012146728a3435ddcd9f16aa8578b158d02031452229858a9b98180163040f202145bed1f665292147a676b15886fc8064142646c0900089285c0d35368d0c908402142a1120f90403483cb13cfdf41a45d4c68a891a483a51d200124e1c53e9684accc454d99b2800892610409289b3754b836c192696736ba6846d18cd61924ba4f56ed0759e41b8565d2c16124b284b8b382d23a98401482811009249a0735a1535f67db231171249a09d4f0b1dc5cce65793446297c2f57b14423dc7580d2490384ad53a885d1dcfb2f23150d278c4a76a3a69cef3dc10a980c4119718d9416e38a94b6e248de0743a1363fab5cea8923022795ad496fb248b48837950326add3dcd2051849f5aa915a72a5d8416184812718b14cf7951f7fb422488306bdd3199b8d3ad93911c42995f8ecc7a4a248630af9467afa3fe7e97a410adf8dbf5774dad3e2484b06438a1b9ba4d7f3c88c5a4c7ca155a6dd45f1924824877529e36ade956260cc4f9f95efb856635ab0202e9df4aacb815e19a1990fc4119f33f88cc27634e2f891fd43aafdbadc57e847d589bc832652ef6837b48f8b016f36a72b435e6722f7b483573eed7a4eeee28891e58f5724b272956e7675d2c16b758da58315101491e4ee6b3ad3b961a33fd62b1b441c488113088105931c47002091e16d53973d01e6222e5178b85e40e6caed7a953c759fdba1d54153ac727d93affd497143782c202923aa046671de2dc1ca206091d946f7f2ab3ccbe3187ded12883640e6d8d0c3a5aaacff9b91c0e3aa94db531a890fb2289c39dd4a92e17192a2b148610131238208326b18fb1fa456b0d923758fa4377279d47e4f86ec8b58bbeffe8619b1a90b461f522a57bd6b1643120610332e3ae97c8d7c55242647d45a5640d2247160c48d68094aaafe9b742b7972e164bca8a1a27264da2867d836869aa6362f76d9234a45f3c07cd1fd55d662468489f69f3a84c86f55d919cc1ccdb90e2e5268f4274f2258f5282068919ee9cc1e6c6a546db5c19329d62f5a8f9ced0261996a541c70e66c265a7c7b050db4cad35cbe62c16c371837eed28d949750e83a6f64fc8ace1fb5c0743fe41a7bfcc9fc7ef24f94262931c2f6d4f3d527f06891790dfaec448dfdcb94a922e246e322e67ea215c8a840bc6284fc6c69fec64525bb85363634a6d1ba132245a306ff29719e52459f8cc4c5637c5bf63890d245838bbc7cbf20e7af3a72728265a20b9c251b96688f1ce59648ec40a7e9acceb14376a73c7084915981b75d59ca1a5feab0c122aec39bad2e4c9b56312d56837c306245368b5dede284dc39678dcdb5814989048011d8d9da41c256f5b1456429f0e9dbad469eb6c9040e158aff7d6d1301e344f408568f0d974f71a571c9038c16ca9f3d37d8f87107d85a40999167bca3bdd1312262c3faf3bfd57ab5432c9129871a1842b1d75ac349128e15ed99dba3bbc55be869024e1cebda229ecd3a379489080b72af7cf1ac91154a146adaa939d64d09018a18f39b621f374ce5e222942225e6eda3548fb1b9110219d759b2a3da9a2f7910ca13dcdeea1f34929d509a18df1f5d86a5c6b8df12609423afb549590e9c6d5870408c711d7413c28d1cff28989c5f28b83f6f995518de9d89b0f5f244ea8c6131b1fbd3087e8ace579e6fda8f2227715ab95ea9c599bf262868f5d2cb6a984f6ca993e5117a8f24cbf42070d323660f8c805ae85e83adf18ed5c7de0e28e359d3dd2d327dd62796a45cb93ccb5eab205ea44a8fa8748f967eec0472d7ca5857bd628f12aa3b460956b99973af3310b6556f51723e3d961be582c259be23e64f19fa7d52a5deda4ccf91a5b44f98805faa7574d87172fc50b8b4d8ddc98b23ed757ede315ef96e92ea11ac5fecb15762af932966afdcce9562893ec2ddbd1a5b4d459a1c6ec5c15f9713b070390f6a86451d288300c87028130200c000002cedc8e400073110830404c200f474362c180d683e803140001484a3270542e28201a8885219160200c0442814030180a8481208a842890e4c81c7c3e372e551eb198716371292127bcbbf9e8cd1e8930307a350ef92d0c0c59b85f35c2588fecadd20809d018fc7d976af800b89b96a66915045ef8ca481c5ea251f7c2a580a4ac39794bebddd2abad088a67bdf6114cc62d8c5e08d96a2a4433388895795bc2553008533f12d6994066e5f5b8905768be5d0adf7bc923da6ca3ab545a2fe6ae45320f80653005fd34a26bc05b7e49988dd2014dcbc2741d3f0fe0f0bc053772f9d140f0d427fec65f1b486ac6ee1e6957c25698330a35e6ab075d2955de1ab0a736b83a3a87c565c0d9cc522a959cfc3a12bc4303aed7e8d52a83b9db9857623c4bc0c9665572e2cc41a0b43350085f55a2b4f37d70badbcc391bc4ecf681a7b9d0f7efa26e84a70ed196eb9207932d502f4b46ebf57d9d26474ea920b65ab169b2c3e7ae1300e9cf099c7390d33c87f581c74b44e3783f06efc97a408a4270a988d832d130e46babd6ae36c42db59fda5d083c7ea405ca027da451a1cd955268580a059864842968a236ff45e08688a22a38f67b20889889979fb6abb923edaf5f700f19f60cbe8491bf6468ce9644bd03f47d4acf1ca3119ca079aa31b8f3ec9550e461b7b6a30d1c4c0816b41705330e27205ab9c0481bcb9841b48880b7ceb5a6aa85eb66051a300bd70303b8a5dbbf48717f826f5b827c536983c85b62450ce086bf0189609d1ecf5dd41bb6f25afb5c094dd9096db5ba6e7f8ded332a61b4e1278d07db698c19ad196bcad5095acea90f27e4fc139fbc099ab766537151ff75b6debf5cac1ae99cd7eb05c57eb07414b12e8efe51b4b8d5e389cc400170235722058ce71a009ba2d9223c340a73a9274f537e2593116cdc32aaf398fa8cde420c526d3de3f189d46d1a354aaaa5eeaa43160ec6673bc83186c2edf3b5ff229c58f0ac8608e189cd64e3245fd69155a58a14feebffe1eb255c32a92d2606991191d592c12c4269d663a9a10d54c359834013985450693ebd0598257422260ed60f6bf30ce67370996a1933b1f1ec183a0fe539085a48b8c3222d11e7aced861db98a06fee46ae51b330c096c7bb6de10986025d36679c46f9df215daf7fc3211c2c45b9d63647647a5b33653bdec30713be803c959a8414e401ab47d016e68845dc14bcf82a529e20d09e115771a483957558a1d9d993cccafab7d3c871caaf4e0489f473f42a3c25d36f0abffca3d11a084a9ef3084fd8d68bcdc1ea88151e76baa33c9c610f25e026f5533d3621288c18280ca928879e860e85c7bf6928b115b7d0221d57bf1543be985f87fb8b8d2758087f3ad7f3a6e4b71bb44700e73fb6c052922e2c889c8bfcd5156cbb8dae97315200e728ee37b811bc6f253ca2fb8a56fdd42da0bca429209c045769a68003116c553b6f3c41859b5f957099babe91fb5e56b7cb1d6e91a4d3e39adf08b081252148125f9d2a792a56460a87bd9683aabf00c1399bac799e2c516fcff0f8568392deb28fd7485484dbb5577760b3b9226b9d0e525a7a0480a1e34e4dc0c2b4e09cbaa3f365286145d7ff6efb16feb1d250f5aced91144a20432384668c46ebe38385a487e3983f0f505258683ae247521896475a0e0c3091e65527cd5f0c642660d379220b57e39e7857dca44bd6548d8a1d4e4222d41c820426102339cd306523831ace0a69fa5d48f21d757e124d8b809beeb8e7444e1b50980d651112d2a1727286d6497c7d7deec85f10d6bd7849031e3b5494e532fd808512ab0d7352a3ce7fc63fc18401f7f2bb13b1e64bcc61d3859202185da1fd77b244a0612e51bfae6b3b3d1931d8d8cee667739235ad9eb001b842030c4fb0537df94893bec7436d1911d5d4c6edeee2a9334c0062c011e07d219c75c362047db1fcc53fb4d9bbac39c0e6d200ad2520f29d960052fe224281c0bba5ddd9c0dd42572a4af6bd0d529cead53777ec7484656ad4e2906bfbfc9cb729d405437e86ae7586e0eb76f6c694ab51d68c8f976c61d0be937537918ef57a570601405ce8b768b79525627d44133190d03e2fd7fa3e07ed40e8d62ae05e76b6e3599a85a03f083ee54162c7521d66e1493dc0da05023d8e9ffa411bfa974a21ee8256e9496e6cb71c306959f9f9bd4b52472ed4635ff08749536bf6fbbe2cc605f6c3032cffce01f577743325b230a27c6ec4d7173f13bd923243ee629f6f2a77c57a40cb0baa05bd4464544e3e673cf7e446a30edd699fec95a6b74a1d99469bf765aa8e24c5bbdac5f2d06e8dde08b209d64bfe7c727979a6b76f4185bdc927f283269576dc959a159cd57bc691aa132d8ccddce530a76b4d5f3a2374357cceb7695d4d8b00ab02d8b8d128cfd3bc10fb9629e113c6ac8f8e0c6b529c4435e325fd6f3283893e835078a98623e028ed16dc5a35ada4479e154d151ee9b4d3d87de829298a54131f12fff5679007d496cd320b3157139d8d929061e62efc7c9c2608301a32bb0db8fd6657f65440d059dd76db2270b34b196b8b22c9a03d7fa6c39eec1a064cc78af88b4e40345ecb3bb32fd0238079a22ae15b3a2bdda8ba8da5c7a2961b028694116da704ebe6e17c8ca9796af7634b71d58efd1a5de79bf275fba759f75c561b444674a45592877726d3e5694194a414f873eb6115ea209609242982c2db0777368db9d1b80c9e200dde0f4b864c1f5983157cb0130962c1be19edafacb81c8fa879e837174c00bf52e0ffeb931f3442debc8c2cd58c142842963d44bc5bd19592a8a5619287a6f921176ccff6d3a12cc91e5a6cf0b6e19959d24bdacbaa523c1eb77060b5bafa867a528dc4216ad44b2b8346b1c351332b113af5fb91bce467c58f53bd39689572bac2f5b5466211b3a536e4ae485b4b23c9dbac466ddf41f7272fb20758bb15f638fc52714c1be702ce888c7d2c011904f11d7728619a00d33196e0f3a76b127bc1724f54eb18465b4e1a78386f3042bc8dc96d7ffa4b9633579df102ac54cf2ef5ded36cc28b9ce06342dd0291a8b8820565fc202fe8aa18cbf494738e24f146dc276d5ad597d8a3c21d0564a8cb607316d1a20898c2b142171959714652926253be9552ed3e9e2f0a13aefe540e0d49d5234790b39cbe68d71092a15c4c1111a75c195ae64303646eb00ecf5b6c2c1e0a97de4c7f6ac6a964e2e48810b1c48afd5fde2d1f5959f8dd0322fa90b3999adb7c7b9c5a73e22134306f014d84844d2a14eea13a0f0b0e640af807635bc925851664b803098ea68d5d708b5aa8a5ea7bf50e17e0eb7cf425b4caec84de4e063b10d4ffa0d8ec75e8e8b8ca3c8c57a86fac79db6c314d083fa581d1dd8fe6c503286bd1a613538375415abc0b9a6bc6fa326d965b8d5be5496a52d678efe14fa51b1e15b353d5d8ed7a56d664924c634b9bb24d838ffd05f5169cf994b204ca0265126839e767bea1e09593428453970c7b83f46b072c52a5b2a786fb2c9ecc40c300fc0a3a8a456e1348c8a316007d96454e0cea1ccaf7967c7b5c789d4d56f96555202b6833d736b11ed0680a483336f5a80956bf12fa01ade2008069b00c928481330e42dfee4514b5525251c785219b5b47a447a26a4af2e6dd41a8774298f880f396fd5904944294cfb3ebaaa4eacc08025d9aaa3a5a88eef98ba40cdf324b180831294648b19a6f8d9419745694389bf34f45522c3b9b628b900f258d9299ce2d6c1ee71550f1e83e54ce75219da34af2749f4ba325723588dc039c1021c720f01084b15d09b34f24df2f1d2934980c84208d4c669da22fa779983cf8ef39bda01dd1e8e79209bb204f6fe6cf81c5d8a4a21eec7ce298428f6b1fa0df71d9234c695106518ea534221d39041e8ead6b6bda44a228af10d320899c30b199b986bfb9ff39bc12e3a29895d0132a8c2ac3f7ec8523a47512e3cc6bf43035f43219f36dee1976b22cb83cf79b81c8ff35d4fd3820c428ffdac32cd7491bc73635706aa81c217fc652a23852e410b22cf2ef2fa26b069b74d5dd3204c213c1e6a69b0a6c935edac787975d36a24cedf863ed2b065563075c026bbd77c786ed5616ae4cac25f92b6011c95e232f488f7cab0311567be47839a5fe2dc62e3031c5f1eeca7a720a1964697911751002f6e62317ea1dd011223eb57ab01f194b2167bff6a0b02046b3142b79f7896e29050b130917eb262beac2da9f3b5a6cc7c971e9c45b7a30ef800bd8ed6815422c6840917741f2ec6ca76e7b297946e37961b82951addef74be58c5fce871d31f4a7a1a420c0a25c42582df2cc2c4ef21eddf181b32b3a1f4553843d10a44bc9faf4bf91185b4c48464a3fab9a725900724e9a3444b2078c1dd995b739314e66e2dd15cecd4c433aadf2aaf1b8457e6c3bb832dca68a88fc066e6615ee1fa08011c2fa08a2e410d3582cacccc7cbbb8719d35b92f544d6a7ab02297dbfacf7d1f2ca090cc024f792fd4c38e67b1ee145d29003a7e468fc545ef7ffd40c02a2e77c551142c8eea983c1770caedd7c8b0011d6cb8486a5fe8e482384583ce2b893e134face03a0b42288d840c6f6d49cd21c4b7999de39bbe9cfad5e355328e30100849fdb28f3503cb16af6d48390a50963fb77bba3582a28cacadac80b58d145c21a13631508a9b0a9ecc2c9ca8f8356c586b0fe0527c5672eaeab044349e27b3c4f966440453ec5af8bb1110d4de0118c6d10039f39dacb7a9347295976d72310142fd7d577e3d2ce9f8e934f90a1d4ea842dadc71c7961f051fdc08fec20a4dafdd32fcdda08eec4e15636724b9b887d92f704b7a24125dff353bfe5239ed2e1227e1bd4ee89cca4b54a4f9381d8dd3afb5a4557f020c9d40e74309e3c0ae35f4cc0f268a20051609708abf520e36870fdceae23a2dc36a24a9c148c64260b400a353c2005a76928c6e1459bebf26205bea339b453c99f4582b40e6f377c9ce9a5f6d74db26c2377073e23addc33950776dbd2c5a437b5ba0379b680f167afd16fb0ca4f8b69aa0bc82e6e5568082d04ba1d48a1f2acec55e07b846920f278cdbda1f4d1788685c5187302f2d01ed752ce1e060d2d3f0bf5559b0c8b1ff1c6b39c9bc4e37abe4728e73a25674d5f234cfb3080e9fb5ec31abb2f79af689bef08ec9f454237f3b5f950ad326d459c107ed23f8e03ed8f28346f67932e7203e2ff425fb3feb6d936d8bbed595a9d6f60fff0eae381b32cbb00894de2f8f9a6a1b1b79c2ceb166da3b7fcc3b7d266ee2f3b351563b827207af10be11d14d01aa4375195519da1d96920928a8c184c0a389069da415019dc85425fc79384c13ab88cf7b2026b2aa7648d9febe8ed852eb72bacb89ad6123c004bd3da71aaeb91c2c2a6f88c370f62243dc7a07ead2c35f6ca80b2550f4e353107c30689ed725441c8a2938d4bc7e3e6897a47f24bc3133473f362cfb836eec1457f1ebd8e4205df6acfbe3089a7aa4e0f629a79d3ba11ac63e8ab61a666551b45a333cee93f3e27f82cb27a903a2517e9baeb1096a46800e01d9606414653f50f4ce754a59783affc8cb728845d8859c249c81b769b2105c67d07ee24551016ab0f60d1a6de3ab7b0ef12b663f9ed9d10917870f8f4e0cfe7647663868903b23a5cc5183968fd1a6a54c1592c104b1ad588ac60e70d1a47ca2227855b5e601a6f9431325eb62340af59e305ba75031621d81628a53488d8c905ccfad9c99b1f8645433b8e94cb7a7888f3773b9257f9aa424ca41bd0fed2e45f65b2f82529c07b895263049b217498adfc8e3008a23b3eedb6cb4ee775536034be1427a302d05a37c813bb55fbf285f770b1e17fcf90f5097e883b2e4aedd927cf43bcd2b5a90ab88eaac76fe0e4db9ae17c2dcbb459179bc21597ecd5a84d0a301f982cae5962f8825e15634166d21d2146bd8eff915bd459fa8b827e1e7b55bfd5f7412fe89d3e0debe81bf898c8740ceafdf59286f53b73c761ebff8c1171fbb8f2a24b5729a9a2343d072d385264b82d0465187abb6a7a381e17d11bf9bd2d14a385995f0b958b17eb0db42f75042deb79549f71b0c6aee527c7cc7d797b14cff43aff04e9fdcf6330e48aee7e219283425db03cc278c997aaba2e6fa7894644d4e05961ef641bc2d5a2a5204fdd22bda9394c49a9e394442a8fe7fd59d325e68cec57cf39031d90ad9732f141688014a2329840d24d9342a7815e58b8cf0a2aa51ed1af1aee6c258e0d2ef56cd388569199851700ab3bb04d9f5636ad2bc3e1e217f3c2d11fe8dae0b175a1a04b16a8538c8404348fdd78e96f195dc7542bb04432bf40810c7511c2ce82ebef46a075dba2e6e571268b2b0676fdcb485b4348a43063509dc00c202cba169f79b259aa9915c3d3f7151c412f14885ba5f5d50aa0373e64e73000f4d4da2ff5d0630dcab5a7b7c4a965bb566719c4dba186a90d9db3459046bf64104c56020fdd7afc1dc078754e84b27003fa979aa44cd86c10c3911e032a6bf146504a5872111fa023a09a8089e9912ac7ba882067f12f1982aeb0743442356e92fc252b181774e672d4790cd485d417b625e4d61cee3f61560de6806c67c4541e2dd08dbef34e6fcaa343ec4fabe6af2a21ef96e04645e8872decd29378e3d5c70450f15f7d46ce3bb4719a75fb7466695450e89eaede2aeca233d5d41ef295cfaac7f7d03c2c73adb5496ef21ffe9dc7721350e66cc23ceb4e9e567da0a828ec7968793e5ca82f4eba52369e60bb5d3d741a85aa786277c109b0f585569b618429917be5b574db33dd9c13f105cae3c83209a07715a7e63ecde142ca73514d095ff2182c15e875c309d7886d216eea2ae813c47ce109d6405ac6924d49f60bdd4ed50cbb2b7a98dbe39413b7af67b48ec1d8ffe3db32bd60ced41d3645fd6bb0c62aff6595a79e6a6780b18fdaad16d0ef9a3f40c15a2d264de53683e643a8bfe9c5a7262fe8b22d4b4cca7471147339722343aef118c1f854ee6228a2823a0a2c888e20297e7355b7512192cdb6af7582e0665e276d3a55229656d68cd8971767121124584324540d1871403b4e01913f1c20202b9d0c9afc50d68039025340135d04b2cc9142ae239413f0bec0e2283981614b38c9cf7c89eae9827d9af7dffeeaf6aded759f297ff070c88f0fd48b139aa828c4925ba0005843930d6d028fc1bd590700eb17599997af11438001d6b434a674959cc5205e0bba22343dfb0802ecf9e9acfdb98b44b52e5ac553f23f74fa20c7c3e29149cc8d93aa214c5af403f31f35346499a5aa6191dc85ddb0287dacce9cd88937e8e73ef9fb2394dfaceeff1a12e4cf6baab34cc86648246b5c1f5bda89d5b9192fa938d73f1c102672df2ba8637f531aee5a353191f5b9698ad3fb6d9caef55db7320b9a7b84c891e1b0b833306359f95aed868b49d42e71ba84731dcde3dc60219caf92eec7414340d711197f25a3ec30d6da898fa59f855c65b74df7d110869b58acfb97c959e56d412864920f0e725cd03983e13524396d4341b3734d007e2be3fc22edf03bf66a713a513541fb64f6a0f1eaf7abf11f506f41e40cea958682c4635ef991dfb789ac89fbee3f82c505a5f9803c1e4699f986e238e0f0a65f88f63742c71ba1e5f33292689c3a82f82ca93172192585653a2c3517c2d4620dc2c93c696f81f2a3c20074d89f983260061f914e247fbcc57783d6a1efefc76ac22319d25d996fe421e7ef21f59c41bd83f08d9a8706492466ea511954cceeb270b8507c9861452607fdd134053bc0f475a08750a3013458e00d9654c541d4fef28a582d4b81eb9d472fd36149d2a3ac520a17e014ec89ecdde109cf82562c5f635a4aed46014c1ca9682fb16166762796fe54ba69e130819e722a830162388e60776f2784655ca17d0ab2b426c04768dffbb9853353c55c3807ba1b4610060429113a03e7a7df083871ab8b5f3c78230fade4fd01cf93072577e12942529094f1765c848486d455331ab109b9cf812b6d8a02a91737fa1820266fd3fc8ecdd57e193ecf72920ee2201937fa37db2f392c0839013ab195e5035158db709bda743c582c44a3091082306222b2d8f085529c8c712621e0c4627b1e9e1226efc93680fe9c91914149b915d1ea6871f88437f26b4072e8d4af4e115895d13ac533aa2fd2d726f599a0b4a95d78e225edeb782e5c4317b4243a13b5f0e94d6ef69b9df78c2db021b3c54cca486c941d42e57219a72ee9a85fd7624c4ad42662c29d730e6ac4de8e464e26f089cc3198778c5db39e8f9ac4a6a9c902a0ec66e4beb801f2c5c85fb1d55ccbb60483664e0c68a720319030e38f7d6a5ae9719531440dbc5ba4e664d47beae1375162b577413d5a74a31641afa370335cc16b9e536c2365ab4951da206c388fd16d615f72a4b9742e9f0f79cd0770c8d4b260af9276ca107c17c4310cf3531851fee8dcf2f6c71074ed355127be5c7835b45cac293745fc8e1fcd4bacbc60ba2cb08607c6144513aeefd36a11c1eb1922cbe493a60bceb8b996ebbf6d60d7ec36785805badf8b0894fe4ce2245d018c38bd1d5e405923b432ddec9c645375d1f652e8ac95bdfcd8476d01f914d0e836154401eeb83e7d545d8aefd7bf350be651325456bf925e6c0a2873ef9b3a40a9cd087732ef9964f2a137276b79c491c29db62cc8b7f1970ddf63051d2aba6839f94e3c9f1e501cc6bb2bd7edce9d880691fafe42346adb030dc243b09731ef34f603986b30d6a94e56e7f57c1abbd9f2c26f6b79da0905006296750164ee77c5379c4455f8c7648121c70c5530992b861388c38372e80b6cc37b639d09043314b59c4e55e971329fc8a35fc3baa860399a7395ff35b5babc2d85c33a17132b0f59ad0e17233e7e15d2abcc5d1c450059c483d074341a5d37ed018fae59ee30236c7a2c9a1392470dfa8d32cb4c9312a028d78078819e874424c28bc0997ff553f4ddb1d0329ccbf139c6b9b49fd2dfa6ce3790afae37a7d6dfdaa982a072e29ec162b39f23bae2ec4d9530181b857fad162e3a6aac3941780c61171a94d1c871be3c83af01c6f1584dac673486adc914386ce4e425b61d761a1e3b56a010fd042d0b4525b726c701aaedceeb620e88c3cda89b0963194fddafdc1e7e0245655f318b16556672e91f5649f6ee50b7ad41ec4e45584e9b91091bc3abdc560fe6d84150341f65fe4ada3ce82407779541c86e269c2268a733e2869f62af52f8f7e8bcdcdf225f843956180219b1e12da3146d045b7545709ecdea3b80352f86e2efebe389d8f88f05cd2e5d438a6b4b6ccb59571cd2894fcf3d94bd1fa9a532da983e3957c6c991c1a4e86624d15412e836ff1b035ad361891c75119178aa35b4e13a753ea04cf2a640a8144d1fa104a80196e44b56d976556187a327cacca499ab476182a2638ccee211881b79cb5dd2aa3aa820fcce9773747015972619db19bfd4aa5f5ed6ee961a17413692c612306f53812fa0681e4290eb151b488e06095235334f920f3aacd6087691a5d3d95dc8bc35ae95ab342a660538adbb0d8a563b1649de2411c821f22add0ef7a1558418496d290880e1a879a1a1515c5571c05443dbab3eed0b7e79132aa864379b55274f307daeafcddebeb405dc26076f7c836dc588938f5807d5faf7dd582b3c9538ad9f7cb332c2b7e1aebbec2d697116b8dfc0139b38d1b22a635c2f8d2806844fe51c8274468e4e8e75a03b0929a3f260a56b1516d65c79a4820ec12ec9515e854ce205081fa93265f0c1816c9c65f534e656a91205a350690861410e1ccbf03779e003c4876a1ed50063c07c5abe09c84d1c26ae252220c558d3a9dde97a9f8ffee20a7d1a705b3cd282f3861614469f7eb429b563612190a1f422ba84c80aa85c6e8e70096d3e604d38634b7e599ef543a0790275cca03a810151e2e169c23f88f4e0e99c43426d4a7e52974b6a32fa67fd2a600b2eda5859196e24a568ccc5e9d7e18d41e8f98d93ba73c8bc3b7be37e900e3cd3e7a6acc91a83480488adf6d48d8f6cc92dbdc3f8bb8c8bad8866ead61f10d5d5c90179c2ae895b5a0557851058116b8adb4cb75c7dfcf3b022d9158a51ef136596b53cabfffa4624798a3359c09e80a6c8667081621c079cd091812e982ead096dc465717d41e51ff566190051c5e100c8349644519add76e7464800875311b2faaeeefb91287824b12a7f62fa66d29eda82f838bc27c00de151ee4c3b8a930ff96f67c3ddb72de0a8c1f03906b90a9bbef2275fe2df8cfc129aaccc87a1c952875b69471bd778171778009c8d41d16f131c10c427d598d8a899bd21f39778e28eef20f5499c947272112c24934912a258eebc14679d31d19d1a78d44bb7974455512ad1a33d00895c6c8bbed8cbbe52d10b3204b4e23edd1081c5749cd5081a648331c3024699fc10dd44dc9ec9b6392cbc0e2621a2748d944e161fc146ae6be5783ef683427f54e8b7c7e74d4858fca4a83dc0f730f3d8efdc0ad03e583412876ae8b4474f2b58806502db4bf129c9e211e22bb4ed97ea45b7698c9efa6495df36f67c2bbd426c9623dbe8c4592b89e016c02dc755fa902dc3bb157013a872a8d0305ee711a6f4ddf3f96686410baab310bf4769c43d3dab6945e8b51ee9e5b17eb22b93018d17602427d98235ad3c08236fb5cdc76129ba656d00f529c97ae29cf9cae6ed7c98385d5d408e803fcae7b28f4891535fac4ced1e235ee93ed3c8a524794b2381e294fee8192a0057732fe7245bd01cad300d7957336a642a4dff574547be020d94974db86b908ce60e675a4f2ced34ba5646b98a878723bf9b0a6c6c81221918a19324cd952a8ca03a2f697edb91a48b392b25ad1dc89e60a851292f3eeef9146d0f4223bd96b0921913571238d6561ca949ecdbd1163d7b01e04e7f7ed23ef8436b877515cd172c755dc72910c3d62f6a6d0e5c72a7d8eb814d06896545b92ed7d5bab78241b7dddf2e6c027a820d84d0ad5077ed6671572106bc0f9f3be6db1084859247b68f38e6a74713411d4769f2afb7d0cac299b9003d64712771286623728a02df69495dc1b9154dc9102f2ab78faf23f3df6fa8e510f0c4376936abb739778e6839d33ac307ff0c541b996c63cef5b73c4105cf50f592ed0ec89fbfb38fbe3bf93a43cc50b303c703ec199d0f2a2ae863e29f48f6c572a59229f68d71acf685e6401ba7febb7003fdf632a50825f1d581cdb4e90192c540bf55ad5c80c952fae7ba8fbb7023a8c7b751e868413cf89d5fc53b6625f66f408e7988213a440b7dca5a4d850f71680176662031fe50f79f27bb7c9db99b403748b0537fcbf62a30d37c073d963f836b6d0b05738740adec3fbd3d70c77cca670b0b633ff5cc109b697f0c9e7f1d8bc43a57f045d4b2d6866149b65cb5fcc8bbb6edd9b456e26a9a2d8b6431e054eb7b11327a684b55c63bc4ff2177c5aaf9ec2df241fcb705e971e28e556e76960277c63876ce591e5621a7b55785ea6ee98b8c10cc39ef53d57560e451e6c10616a0498341aec08a887bc09ba89b3a3d8264ce67f4facf457850980edd788bc7cd806b92bd9c0846db4bf65465c080ec59fb1ccee9f176c08cdc6289228943388d5acd03657ca347cdb1dd2d00f528fb471227c4290303999804f4ddcaf6cf29b621508fe348c192cdb0cae1dca1d4ba1b4276da66bf8fa5be5d0c17010c9239957b9188e53f49f8685a6125869f08e16d5494ec03d6a71f92b526b9543082e96c4628b54d2ad9a8c1831a72c17df8bc72637b17e9a7b05f91a1d96e973824b147a4c99ab2015a87bba5865961cc2d150ff936d3d02b9ca0b4df219be0a6ae9fc33ad9dc6fe56c742f527522c3577a623409caa98823c1e95abde72c17fb0ca318433df1cbd1e483ea6cf9b495230fd50cf9ae313db160c83a9f889b7a7539b21b55fb3b9547d0229e35210cff67cdfe662956d7aef5f0a75465841b2d142046a8588e4058b4890a64366bcb1924c49370478d5237667bba21382ce8f7bf701b97f50c3231797d48fe48ceee51f30baa3c6a6280d162a9f33dcd51bf4132b1d5e1ed961b320a6405468de0f71da87436c9908d133b86d769dd186d6c8a3d480857af62e3cf84d568e6a5ed1f4ca3b7298f07b518a9aa7852c5b1009dfb92532f1f30d6ffa63c88a14e43c05cd3fc79a1528c534f90f05302c43169983a93b817c4d5ab4ebfe922369f2e5b74032b183b44903df9a23ce54dd9d8dd5df0f2851b10ba64067585e84f80f51870a4d670a1125f6bdcabf91d33e8f6fc77de902ecb189c2ca5f06f681bb83804d9960ab62c68eed487f284aa2d60df57e698dd012b113546e7fa2a77cb392e85438e5ab33e70b232da09896ed64fdc4fa52aa6e79da322ddd435ab95983d41e68f634b56bfd22a9631cf1705782e806a36d9189275cd396be7a2ae2a7840a962b1b1194ebe5ce0881387fe77ff1edacc57c37448fd67e32bb5517d7c215e3f9416cfe52448b9ee4b82ff032e78f8dc93cb3c824773052697c89a03a64396311662007200d2d639b0276ab60b55cae454454c0f25520653fbc5453a48e5a0d7ce80c708620748ad0f12dda69ce3215ced00f47d510c88642456499404bed5b185c994d4b447df9b1f4bd30363362b7ffd62f8ccdaa89e4beb751578531a11fad924f1bbfd65d2b3ae9a23524bce73549bce06d033174c04c8e343edfae6ae0f0db514960f43dfd628424176640915798a6989965ac3b5924e8dce6537117bfd2cb81d5fbb11d2d9828ff8d0e84d473a3d6275816ae0715c68b2d9de0504586f012d46b54c2672dd905b90ab9071ba42c865234a4fb45ff8bdf292c4eaa4640b29ebea0381bc00cd97360f61bdb170b83ba567b421cdc79ed566560ac439ddb7130993c62cf1c71ec5a445de1dff4071fe839a810a67dc78651306109b39a69fffce78d2e93894f1a25e61dd558063da68ed978b4167f4458078917cf0cae4cf081b48ed0125f4cded7fca7b8462f3d848b74478b0df0f779358ca70bd2a261584353623e17043febd14d9b649f588858ba3d6b5b4a457b3d88206094471d2672e2663d0387459fb290471c99fe1584b30f899f2d23848e341078b5fe11b1b554d7324689cd1c8017f011ee98ff58a0946a385a943c0d8e249eca70f98b917f9f275c86d228ccb97f618f0af5e3ce9b32207e3bc681dbaaa35e51f4ea78c290353fa91becc21ab7d29a82fb9817e1c416a09789baa9962d7316d21c4c0660e98527e5409a94a281547d3349f18654d02cdb017ca03bb37d884e26ea37bfe783f22c768a07fe52c06c14fb9fed697a795074244badf349479a2e639c8be097df80a1cd2294c0e81bcbfc970afb2d4197cb7da6b7e314169c06839c20d202ed6b8ff3a24b559f8c1013076dc8bae89fc58243c2e6326dfc160483d678c2c611b48149ae2d42e50c9e5d98bbd6bd81bf3681f955c859a0ac4ca0e94b83ede2df3b63d3a9ed5e9d988e9f7e753841c955028e4f8e458a9e944172e084f56b269b55daac61406e49d6ea70aa4a677c7e2b078d48cb91c32f2d8d90e31e75f64f9d0c81864f30b299e6652ac0e73ecbcbd4c2500af46711e78fe168219bc04da650a689fadb1ba35af7063b83903c81b69c7d2b7cc56c5d4613788e0204b077254b11911891767e34ef2763f17b10cf2a65532f6a5b8030e33e4e882568b93feb9f1885f807032ad1c175d07e13bd1d3d7e88eddc4eea815b28dfe996f3235459656a8a99fc4383cebbaa778439ba473c1e0997ba82c3b8f12d26df3833f39758a0d3858bb5e26f419aab5b96e43a64a5adc1a0911ffd74f87fd499b5cbccbb18d481ed4a59583a8170bc4bdbd1025beabc927da0682ce4ea647e1c87c380e704d8b68110a20e44cabd63ff232fd5c2043b5d4b58a0e6cc16003586661c7c176a2631964296da7fe38e5776609e31eed03ed41832d87b1576a941b126cfb2c2826ba158156ecaf0f4190f9784136b7bdf77083ed63dee7c4bcb26c1886f8bc4fb255d882f1fc7768989a6d6d23e47a2e9907829620607896ceaeaea8746fcc0fe971e7a3f00792851ab64dc218273185a904419cf051b8301159194d8ec25a7ce4918197ddba3f302b03842e13e584b92cca149f3fe8fa48aae82788a2b12c3424b7431e012a42f6b7bd26d2f6a4d842f2f18c5a94637fe3b06983aa7cb2c54b88159b844feeb945413a4cb3f7a7f6faa0ecdce557c9d71692ce01ad5a689f4fb898049e27b2fad41248fbaaefe36b5c22dc4c6787433f8d9aecbce63621fdd07b48c8b233d0cb967a20f96d6d0a6760cbe7d54c69610e01e7d01a9a28c98747a3cdb9a1ed07ce0d265c43a867e135ad94fac2513021f958e549baa9ae76ac0dd3892513a584210415c809b03b11a9a8807933d7f38ebf58cb4c721dd1de9684234107c37da0da84d072bed52840433c9ed6f940878bb3a68d774be109c81d0b7f1eaba007b6050d83925a19f4a90a688c18d63c41699b6e754b05ea1da49098b06983118bea1707fad4a57e7b0a4a14e862b6a553a5fd398da14f78f01697e3c7fc87d606c62626134444884d38e736b3b28167c51c35eaa46264ff9f1b8ac286418ad32223047b7ef1f8de6dbf841298fa49c24fb642618d23856313e3c5e8273b00af87a0c42c801f475c77c2e241b9aed79119e0e93584d54af01efea926b4d69d313b9c277b29a596d6002b64a8c1ef1ebe0bbd3cef6a62665684e87d2536c4c8a56c49feb66ec5f7e026d99df769a12ac61b2203869b4874d7669d230a3a62b2135cc6cfa7bca80a6560f3dab222ae7712a1187981b4a251fc18ba7e4a2bd2b547d1aa87599ec07a030d45b9453847e75bb05d8e5ee74ac6376d16e21aa5d7d904bcd1324a76a01083016d8bd5723ef802e0fa8a24e04d5bbbd2f50771a4dabc11fab46a1a094af0b1e1a2fca2475f12f348b866e081127031b2a117ea005e173dd1ff3d65aac5988e4298ac23d4094fac54ca0474a035adb6f49453c83186b2ce8dd612141f7d3e2d4cc4a35e296a3fb779638f8a646160ce81ea75bde81d10860ad58825baf5a0f3b764ba3364d08744a2285224f1835d59377bd6d404205dfcf3a56f4be41b66b07a64061d5b4a7f6121f2aa3e2ae3ade8a258d4a7ed18832d3323cb4ba6ba8a1cc9255730158c0545d4c544be317e6e1c6a2a09b2ac6a4604a440d9dab9d40f4bc7022c254f974909bd88583c1ea0a61d827b3349870c3c9c6095c2ca9d385da9a9a969110434faa9b60388f52349e5629339362659621012a3a76e0bf4536737f03d0218a0e330d210a816737930925aa20005ba7f539b6d0aada2bbb208ad9e773a602beb72f20a74074b5492555f3889538ddd9947b42cdfb25008a6ecbb00fd613a12c05e85d8e54097bd70ce494d41c5f8845e4bb2236147c23e4c00529e3a962df46ec3b874934f8c78719165eb706c693ab9257aad61ec7e8590a3552d806d31ba5758acfec2d5342f3a70ba30378b315626c33fb18b7b9a97b160e08b8e60c51c0b5123a1eeb0e4b90c4d050829720fa56029fff3a5ae2484431558bfbb591076abf625eb58853a1ac7d9bc92b62929770eda68f7b82fb3cd6284356cda48a77d792a04acfec4b9625019e7fae2813d73df4c89f33b9263e452d9ab94ed60412d83845d76c96cc0c177796f63096dcf79caba4fe47bed4b89fb294b3b7b354ac5fdd0467297472af089e054f0fd409d1e63dd93b3adef32c701170b2cc3f97c5d888ce70b364dd3117f18ceafb31e593b442b3ecc78a9aa0bfbaabcc8164e3dfae20a69025eb13fa119764d02018af6107adba2a205f23462d3410c1a61b2b8be6de9f682a988d80f327a3786ef2b50dddbb89f6e3d899c1b2a3e1a01c501b0dc8275bb19b2f4926beb6b2938bf6cc59d580e2ec4ac5fc304a160a2fb6328503174da87e759e04049e26b13fb9ac38bd3b3564c75af319cc190c11ab63e95df886d53a3f510eef1676096a04731633b790a63ae5658ec65ec170b5a974b12afd91dcb6496e8c3f4ef830be6174803a6004d4c1d72e0f3ffb82ccaa4874df787a9804a4dceef6859232c2dd6b7598d107a3695576b3cfc8621fc082255c0357f073ea422905f1565db28348e57f6175a803fe3131bebd91ae7642f15508a99d2ac14b8739a3b8c817b656c496aaa0f216932854dea490fc3dee5cb4efc37b976107829905155262d02f8614f220904e184b2b720f4f39b3bce32a02fa3e3f6c174c1eb0067ea343aadba980ad12d2032978ac143a62c9214a10b3042292405def587d59f0487ed0283278997c2dea3078b958d982bd71bdc5b351da42bc69de9aa4c9eab27f4b5ab6234e79c1bf94ab55ab217d10ba493c3089036015087785beac8584065b4d0103970d752953800a1fb2015760d93d1a3cf7450fd90a0bca9d90095cbf75a4628d0357b708f0a2127c73985d68c3bd67132cd29899abe194336d42856ab9b34a66632a08ac867922771181501d5d924ab5c3ed1cd700d4510889de2a0e21b282da9927ebb735a98edd28a7ae811e6e1c24f88b623f465caf4ab3db5e2a4209f658199a9a9c0c9543cb41d140d2ce2d5d64f7755bb76f51210c660301311e6adb837d3d26b2b6c91258aff0a0b1bfbc87003efbdc396f66474f4db4374810d61e34fa06ab6a9abae13719346b251d4ed3132496721c0c017654d8bf0e2bb141d5271d445c46caefd9c343c63f67dee9c91ba2dc5d3ccbf6180e64c10ec6331d2c7432b98366b124607ed937e1ce50524b6052cecd60e8f7303852c12e51f336c11ed0443a66378b95f301df789017cd05a307686393ea48b1d8846cf8337428014c99a020025f52dd870ed213225ea5ea3e73e18313d808b9013c9e13c59e074c2362ce23b86d38b661c50af47470378e26db7ba9b3950d34151f31baf42e78f1c3ab42da969c4160b3b6b853d89f3189b55c8291bd0c1037ac1ed4677cbc5236b4031adcc1f3d0f20f584ac72c0eefd66487d0d624d60686d9bbb1dd81cc96be8bf0051318ddd6eeb52ceb37dbbc6fd9e43fbea43755dafc362ce491a1d41a2287bc628362ecd063a375c8f569800275173b838631c2227c815111120704fa2426de1e10b99fb6d037cd08423df7012641070366eeccb8f40cac26f5b5de66457f90821f6e34a51810830381446c9ceb8dd6a7daff8aa77998174b88600e745fccc825037d204ebdf5ff62860ad954b0565c804f5b448a7eee09775fd978f8bd207dd7bf0b92d8f55a506ebbb4226923e9f5cadc9c327a0494ca77808657e520912f0fae6b20bfe7d58052b6c9f02331bc506a72662c7e2d1247ad6253a623517d2815aaf0b2533f117b6717886aa82c6f0da451403700c0a695af3f76deba91f2c33eeb8024624359fed2893a4a880c69412acaa049fc2a880c0f3cc730858d4307555206a3f3124df343c2d7565858981211a906b1d4c7989b88249e5ea24787a31b062bc6534329813f247dda6be82704c3fb706d62fe131824498616b28292627585d684fc4039f575a28d2040eeffb9af7faff81c642e7207c78f8489fc3d4731ae9f3cdb7697148933249342accae260463897faab81b97fb8996b52fdaa0e"],["0x3a65787472696e7369635f696e646578","0x00000000"],["0x3a6772616e6470615f617574686f726974696573","0x010488dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee0100000000000000"],["0x3db7a24cfdc9de785974746c14a99df9878d434d6125b40443fe11fd292d13a4","0x03000000"],["0x3f1467a096bcd71a5b6a0c8155e20810878d434d6125b40443fe11fd292d13a4","0x03000000"],["0x426e15054d267946093858132eb537f105fe52c2045750c3c492ccdcf62e2b9c","0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"],["0x426e15054d267946093858132eb537f1878d434d6125b40443fe11fd292d13a4","0x03000000"],["0x426e15054d267946093858132eb537f195999521c6c89cd80b677e53ce20f98c","0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"],["0x426e15054d267946093858132eb537f1a47a9ff5cd5bf4d848a80a0b1a947dc3","0x00000000000000000000000000000000"],["0x426e15054d267946093858132eb537f1ba7fb8745735dc3be2a2c61a72c39e78","0x181cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc208eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a4890b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27de659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e"],["0x426e15054d267946093858132eb537f1d0b4a3f7631f0c0e761898fe198211de","0xe7030000"],["0x43cdcd39d5edb1d16e24fa028edde0de878d434d6125b40443fe11fd292d13a4","0x00000001"],["0x492a52699edf49c972c21db794cfcf57ba7fb8745735dc3be2a2c61a72c39e78","0x00"],["0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b","0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"],["0x5c0d1176a568c1f92944340dbfed9e9c878d434d6125b40443fe11fd292d13a4","0x03000000"],["0x5f27b51b5ec208ee9cb25b55d8728243878d434d6125b40443fe11fd292d13a4","0x03000000"],["0x5f3e4907f716ac89b6347d15ececedca0b6a45321efae92aea15e0740ec7afe7","0x00000000"],["0x5f3e4907f716ac89b6347d15ececedca138e71612491192d68deab7e6f563fe1","0x01000000"],["0x5f3e4907f716ac89b6347d15ececedca28dccb559b95c40168a1b2696581b5a7","0x00000000000000000000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca308ce9615de0775a82f8a94dc3d285a1","0x05"],["0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"],["0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc4de1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d","0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f0f0000c16ff286230f0000c16ff286230000"],["0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x0ffcffc06ff286230ffcffc06ff2862300"],["0x5f3e4907f716ac89b6347d15ececedca487df464e44a534ba6b0cbb32407b587","0x0000000000"],["0x5f3e4907f716ac89b6347d15ececedca5579297f4dfb9609e7e4c2ebab9ce40a","0x04be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f"],["0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x0000"],["0x5f3e4907f716ac89b6347d15ececedca878d434d6125b40443fe11fd292d13a4","0x03000000"],["0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x0000"],["0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x0ffcffc06ff286230ffcffc06ff2862300"],["0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x00"],["0x5f3e4907f716ac89b6347d15ececedcaa141c4fe67c2d11f4a10c6aca7a79a04b4def25cfda6ef3a00000000","0xfcffc06ff28623000000000000000000"],["0x5f3e4907f716ac89b6347d15ececedcaac0a2cbf8e355f5ea6cb2de8727bfb0c","0x54000000"],["0x5f3e4907f716ac89b6347d15ececedcaad811cd65a470ddc5f1d628ff0550982b4def25cfda6ef3a00000000","0x00000000"],["0x5f3e4907f716ac89b6347d15ececedcab49a2738eeb30896aacb8b3fb46471bd","0x01000000"],["0x5f3e4907f716ac89b6347d15ececedcac0d39ff577af2cc6b67ac3641fa9c4e7","0x01000000"],["0x5f3e4907f716ac89b6347d15ececedcac29a0310e1bb45d20cace77ccb62c97d","0x00e1f505"],["0x5f3e4907f716ac89b6347d15ececedcaea07de2b8f010516dca3f7ef52f7ac5a","0x040000000000000000"],["0x5f3e4907f716ac89b6347d15ececedcaf7dad0317324aecae8744b87fc95f2f3","0x00"],["0x5f9cc45b7a00c5899361e1c6099678dc878d434d6125b40443fe11fd292d13a4","0x03000100"],["0x5f9cc45b7a00c5899361e1c6099678dc8a2d09463effcc78a22d75b9cb87dffc","0x0000000000000000"],["0x5f9cc45b7a00c5899361e1c6099678dcd47cb8f5328af743ddfb361e7180e7fcbb1bdbcacd6ac9340000000000000000","0x00000000"],["0x7474449cca95dc5d0c00e71735a6d17d878d434d6125b40443fe11fd292d13a4","0x03000000"],["0x7c215a8bceb5e4dcd92f78e36a5fd0ff878d434d6125b40443fe11fd292d13a4","0x00000001"],["0x7c215a8bceb5e4dcd92f78e36a5fd0ff8d0838bdb05dd1aac26991aea8e078b2","0x00000000000000000000000000000063a7e2be78898ba83824b0c0cc8dfb6001"],["0x7c215a8bceb5e4dcd92f78e36a5fd0ffdd2c92277bde9448eb8c7246ac873075","0x000000000000000000000000000000eae111a54fe8107ea6c18985c4df7d9801"],["0x7cda3cfa86b349fdafce4979b197118f71cd3068e6118bfb392b798317f63a8910c174c55fd2c633e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e","0x04e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e0000c16ff2862300000000000000000000000000000000000000000000000000"],["0x7cda3cfa86b349fdafce4979b197118f71cd3068e6118bfb392b798317f63a893e73123ebcdee9161cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c","0x041cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c0000c16ff2862300000000000000000000000000000000000000000000000000"],["0x7cda3cfa86b349fdafce4979b197118f71cd3068e6118bfb392b798317f63a894f58b588ac077bd5306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20","0x04306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc200000c16ff2862300000000000000000000000000000000000000000000000000"],["0x7cda3cfa86b349fdafce4979b197118f71cd3068e6118bfb392b798317f63a89518366b5b1bc7c99d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d","0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0000c16ff2862300000000000000000000000000000000000000000000000000"],["0x7cda3cfa86b349fdafce4979b197118f71cd3068e6118bfb392b798317f63a89a647e755c30521d38eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48","0x048eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480000c16ff2862300000000000000000000000000000000000000000000000000"],["0x7cda3cfa86b349fdafce4979b197118f71cd3068e6118bfb392b798317f63a89dd4e3f25f5378a6d90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22","0x0490b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe220000c16ff2862300000000000000000000000000000000000000000000000000"],["0x7cda3cfa86b349fdafce4979b197118f878d434d6125b40443fe11fd292d13a4","0x04000000"],["0x7cda3cfa86b349fdafce4979b197118fba7fb8745735dc3be2a2c61a72c39e78","0x181cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c0000c16ff2862300000000000000000000000000000000000000000000000000306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc200000c16ff28623000000000000000000000000000000000000000000000000008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480000c16ff286230000000000000000000000000000000000000000000000000090b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe220000c16ff2862300000000000000000000000000000000000000000000000000d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0000c16ff2862300000000000000000000000000000000000000000000000000e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e0000c16ff2862300000000000000000000000000000000000000000000000000"],["0x8985776095addd4789fccbce8ca77b23ba7fb8745735dc3be2a2c61a72c39e78","0x18d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a4890b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e1cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c"],["0x89d139e01a5eb2256f222e5fc5dbe6b3878d434d6125b40443fe11fd292d13a4","0x03000000"],["0xa2ce73642c549ae79c14f0a671cf45f9878d434d6125b40443fe11fd292d13a4","0x03000000"],["0xa37f719efab16103103a0c8c2c784ce1878d434d6125b40443fe11fd292d13a4","0x03000000"],["0xada366fdf7a3ba269db9ab51b5e00cd8878d434d6125b40443fe11fd292d13a4","0x01000000"],["0xaebd463ed9925c488c112434d61debc0878d434d6125b40443fe11fd292d13a4","0x03000000"],["0xbd2a529379475088d3e29a918cd47872878d434d6125b40443fe11fd292d13a4","0x03000000"],["0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc632a5935f6edc617ae178fef9eb1e211fbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x047374616b696e67200000c16ff2862300000000000000000002"],["0xc2261276cc9d1f8598ea4b6a74b15c2f308ce9615de0775a82f8a94dc3d285a1","0x01"],["0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80","0x0010854b1fa555810600000000000000"],["0xc2261276cc9d1f8598ea4b6a74b15c2f878d434d6125b40443fe11fd292d13a4","0x03000000"],["0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0eed43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"],["0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195066b8d48da86b869b6261626580d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d","0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f"],["0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950c9b0c13125732d276175646980d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d","0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f"],["0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ed43a85541921049696d6f6e80d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d","0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f"],["0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f5537bdb2a1f626b6772616e8088dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee","0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f"],["0xcec5070d609dd3497f72bde07fc96ba0878d434d6125b40443fe11fd292d13a4","0x03000000"],["0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903","0x04be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f"],["0xcec5070d609dd3497f72bde07fc96ba098ef7dc060436e4ed803af07632b89b65153cb1f00942ff401000000","0x37f68164ff558fa9e50943800586a868c52bff83dc30603aa937ae02dc2fa57d01000000"],["0xcec5070d609dd3497f72bde07fc96ba098ef7dc060436e4ed803af07632b89b6b4def25cfda6ef3a00000000","0x37f68164ff558fa9e50943800586a868c52bff83dc30603aa937ae02dc2fa57d01000000"],["0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609","0x04be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0eed43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"],["0xcec5070d609dd3497f72bde07fc96ba0ff3ae12770bea2e48d9bde7385e7a25f","0x0000000002000000"],["0xd57bce545fb382c34570e5dfbf338f5e878d434d6125b40443fe11fd292d13a4","0x03000000"],["0xd5c41b52a371aa36c9254ce34324f2a5878d434d6125b40443fe11fd292d13a4","0x03000000"],["0xd5e1a2fa16732ce6906189438c0a82c6878d434d6125b40443fe11fd292d13a4","0x03000000"],["0xe3fd011a1ea758d2e1b46ed3cec43fc8878d434d6125b40443fe11fd292d13a4","0x03000000"],["0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbe0e0d969b0e48cab707000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbe39b9d2792f8bd4c305000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbe47ab1c010b3bff4908000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbe5153cb1f00942ff401000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbe598b52bf1678443909000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbe9eb2dcce60f37a2702000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbeb4def25cfda6ef3a00000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbeb61f803a716bd3b906000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbebfb27f1eaef06bb903000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbed9c986912843223804000000","0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],["0xed25f63942de25ac5253ba64b5eb64d1878d434d6125b40443fe11fd292d13a4","0x03000000"],["0xede8e4fdc3c8b556f0ce2f77fc2575e313792e785168f725b60e2969c7fc2552","0x02000000"],["0xede8e4fdc3c8b556f0ce2f77fc2575e3878d434d6125b40443fe11fd292d13a4","0x03000000"],["0xede8e4fdc3c8b556f0ce2f77fc2575e3d9764401941df7f707a47ba7db64a6ea","0x00"],["0xf0c365c3cf59d671eb72da0e7a4113c4878d434d6125b40443fe11fd292d13a4","0x03000000"],["0xf2794c22e353e9a839f12faab03a911b308ce9615de0775a82f8a94dc3d285a1","0x00"],["0xf2794c22e353e9a839f12faab03a911b7f17cdfbfa73331856cca0acddd7842e","0x00000000"],["0xf2794c22e353e9a839f12faab03a911b878d434d6125b40443fe11fd292d13a4","0x03000000"],["0xf2794c22e353e9a839f12faab03a911bbdcb0c5143a8617ed38ae3810dd45bc6","0x00000000"],["0xf2794c22e353e9a839f12faab03a911be2f6cb0456905c189bcb0458f9440f13","0x00000000"],["0xfbc9f53700f75f681f234e70fb7241eb878d434d6125b40443fe11fd292d13a4","0x03000000"]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c795153cb1f00942ff401000000","0x9583a6399680146fd46041e0ca76d07adc7ebd3d1a53360816532de2ed30f01600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x507d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f678711d15ebbceba5cd0cea158e6675a","0x507d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fb9093659d7a856809757134d2bc86e62b4def25cfda6ef3a00000000","0x04f4269899ac7d2d29eb1056daace6dd7d82b5a1eaf7ffad1ebe10df920bb99765"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x01000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c9583a6399680146fd46041e0ca76d07adc7ebd3d1a53360816532de2ed30f0160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec6"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x080642414245b5010100000000507d1e1000000000809596a0e76aedec473f424e9c1a87be59f3146bdc6a5e1c60c05eea441c6c28a598a89ed7248458fb7f8e20d297058f96f514def4cd532143b64771cdb5cd07803726ff8256ea4ea817d2c1e9d0b09247d336c047de0a9ee4fb01a02704fa00044241424529010104d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d01000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000","0xebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec6"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x01000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x0807f7936db4e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca487df464e44a534ba6b0cbb32407b587","0x0000000001010399ca79010000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x1400000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f14000000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x04ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec6"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x010399ca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c799eb2dcce60f37a2702000000","0xa6b3a3dda672373ec6aa1932fbc41efbf076bc02414551be99ee6b974dbc599800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x517d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0ca6b3a3dda672373ec6aa1932fbc41efbf076bc02414551be99ee6b974dbc59980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x7dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000517d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c1187465153cb1f00942ff401000000","0x7dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x02000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x116ce98027b2e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x2800000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f28000000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x08ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x711a99ca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79bfb27f1eaef06bb903000000","0x0d5680588be015e5ea5949e5d2665d79b9f7ab7e50ca35cd190f5db16fcbc95a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x527d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x03000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c0d5680588be015e5ea5949e5d2665d79b9f7ab7e50ca35cd190f5db16fcbc95a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000527d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c1187469eb2dcce60f37a2702000000","0x1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x03000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x0b2f3b6ee1afe00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x3c00000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f3c000000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x0cebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xe03199ca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79d9c986912843223804000000","0x1a05639c8ce936fe5d2c01a1e8f51697934f09805acb142b8fb66a37cf1ac8a300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x537d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x04000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c1a05639c8ce936fe5d2c01a1e8f51697934f09805acb142b8fb66a37cf1ac8a30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000537d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746bfb27f1eaef06bb903000000","0xab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x04000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xe64fec5b9bade00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x5000000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f50000000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x10ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x514999ca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c7939b9d2792f8bd4c305000000","0x180647697ebac7b5d864c034aa165a22b8763bcf0226709fd9937a46bd9e3e9e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x547d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x05000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c180647697ebac7b5d864c034aa165a22b8763bcf0226709fd9937a46bd9e3e9e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000547d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746d9c986912843223804000000","0x7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x05000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x92cefc4955abe00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x6400000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f64000000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x14ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xc26099ca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79b61f803a716bd3b906000000","0x5e7b132daee6afa50e2c15f75c5e5c3eb356ad26189f5c0dd922db915eaaaed400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x557d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x06000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c5e7b132daee6afa50e2c15f75c5e5c3eb356ad26189f5c0dd922db915eaaaed40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xeeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56a"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000557d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c11874639b9d2792f8bd4c305000000","0xeeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56a"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x06000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x00ab6c380fa9e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x7800000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f78000000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x18ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56a"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x317899ca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c790e0d969b0e48cab707000000","0x2e778c412750471264bcb8d1bc925cd1954d003ee81104ed8ff21c5a2f1c3dcc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x567d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x07000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c2e778c412750471264bcb8d1bc925cd1954d003ee81104ed8ff21c5a2f1c3dcc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xdccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000567d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b61f803a716bd3b906000000","0xdccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x07000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x20e53b27c9a6e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x8c00000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f8c000000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x1cebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xa08f99ca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c7947ab1c010b3bff4908000000","0x1e4de61dbef3f6ad5408a9ebf49a7e5c93f7b5142b4f1c5b8d12689e4ff9617f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x577d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x08000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c1e4de61dbef3f6ad5408a9ebf49a7e5c93f7b5142b4f1c5b8d12689e4ff9617f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xbcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e22"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000577d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c1187460e0d969b0e48cab707000000","0xbcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e22"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x08000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xe37c6a1683a4e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xa000000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25fa0000000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x20ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e22"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x10a799ca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79598b52bf1678443909000000","0x105ee34a28a1941334658773dedc54aa10c7932650613008d052e27551f3f7d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x587d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x09000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c105ee34a28a1941334658773dedc54aa10c7932650613008d052e27551f3f7d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x0854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000587d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c11874647ab1c010b3bff4908000000","0x0854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x09000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x3972f8053da2e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xb400000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25fb4000000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x24ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x81be99ca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79a6b274250e6753f00a000000","0x4ae28e19f0a722b79859cd75eaf75d6ca155fb8ea62dcacf592018826d9c259000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x597d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fb9093659d7a856809757134d2bc86e62b4def25cfda6ef3a00000000","0x08f4269899ac7d2d29eb1056daace6dd7d82b5a1eaf7ffad1ebe10df920bb99765fd8e4119a5e93d460d6487d41b44fdd3835872849d0e3d044aa530a1dafaa0b9"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x0a000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c4ae28e19f0a722b79859cd75eaf75d6ca155fb8ea62dcacf592018826d9c25900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245b5010100000000597d1e100000000022b562c73a7599bb779ef27bf845c209e1873d0f312da787d7b4d3e5a51a9c0d38b61ce76c113ab35b54fbf752bff66f3a1f62a2561b00c161e955a651a9650bb552a33020bac1c92f8853abd7825d68034b82594a32c5e34a54a04d96886c0a"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746598b52bf1678443909000000","0x885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x0a000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x12c5e5f5f69fe00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xc800000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25fc8000000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x28ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xf1d599ca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79be93d8a4ce7799c00b000000","0x5c43a668a784bb955b0c2aed0e1d40044a584dee4ef71e51984ae006a40a3d5700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x5a7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fb9093659d7a856809757134d2bc86e62b4def25cfda6ef3a00000000","0x0cf4269899ac7d2d29eb1056daace6dd7d82b5a1eaf7ffad1ebe10df920bb99765fd8e4119a5e93d460d6487d41b44fdd3835872849d0e3d044aa530a1dafaa0b9ce159e35d25fb61098f29fdeb46671a0e8606f49b250b900f80bfbbfdd2683c5"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x0b000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c5c43a668a784bb955b0c2aed0e1d40044a584dee4ef71e51984ae006a40a3d570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xb881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245b50101000000005a7d1e1000000000b620078d95290f96ddb4e0a41ad8f3b8d273c382a1508cea9dfc1e964e87a512943de8e9cab79446aa0e43e2816cf6c44bfe3f52e218727352054237c07edb01069b30d1e669bd1cd1bbe3d55a6e112f986b06965775a35436b8f4bb0ee9cc08"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746a6b274250e6753f00a000000","0xb881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x0b000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x5f7532e6b09de00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xdc00000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25fdc000000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x2cebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x61ed99ca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79ef8763d79d01484e0c000000","0xaad7463f28e7365408a93525eedb30ce31521fd8a196460d49427aa105f2c0d600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x5b7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x0c000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0caad7463f28e7365408a93525eedb30ce31521fd8a196460d49427aa105f2c0d60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea15"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x0406424142453402000000005b7d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746be93d8a4ce7799c00b000000","0x37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea15"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x0c000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x1083ded66a9be00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xf000000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25ff0000000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x30ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea15"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xd1049aca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c793135383ae310c5170d000000","0x684a246290922a95a50d98f76b4c585f036951c75aeed809828a5a11afd21f3900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x5c7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x0d000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c684a246290922a95a50d98f76b4c585f036951c75aeed809828a5a11afd21f390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x72d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x0406424142453402000000005c7d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746ef8763d79d01484e0c000000","0x72d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x0d000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x16eee9c72499e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x0401000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f04010000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x34ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x411c9aca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c796b25ca40f14443730e000000","0x7d4a852bb78ea6368919b860f0936c74a1af975e8a950957aea31e182c5e585c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x5d7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x0e000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c7d4a852bb78ea6368919b860f0936c74a1af975e8a950957aea31e182c5e585c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x0406424142453402000000005d7d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c1187463135383ae310c5170d000000","0x2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x0e000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x61b654b9de96e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x1801000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f18010000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x38ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xb1339aca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c797bed79b7ec00219e0f000000","0xf49ae07ff1f6c27cdd59b0faf4d0b1dd59a7951243a5f20b4c233ec02421811000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x5e7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x0f000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0cf49ae07ff1f6c27cdd59b0faf4d0b1dd59a7951243a5f20b4c233ec0242181100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xb77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x0406424142453402000000005e7d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c1187466b25ca40f14443730e000000","0xb77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x0f000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xe1db1eab9894e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x2c01000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f2c010000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x3cebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x214b9aca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c7966ccada06515787c10000000","0x0a2bf23bd86393bdfcc1bbe0e488105afb97032c0375a45fc442e9701f91c0c500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x5f7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x10000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c0a2bf23bd86393bdfcc1bbe0e488105afb97032c0375a45fc442e9701f91c0c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xdde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe12"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x0406424142453402000000005f7d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c1187467bed79b7ec00219e0f000000","0xdde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe12"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x10000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x875e489d5292e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x4001000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f40010000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x40ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe12"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x91629aca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79c2d9675cf95dcf1a11000000","0x0c1736615bb369f98140b55bc89b79e56ea283e6ea95ca4a917cfc3860cd5d4700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x607d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x11000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c0c1736615bb369f98140b55bc89b79e56ea283e6ea95ca4a917cfc3860cd5d470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x64059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000607d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c11874666ccada06515787c10000000","0x64059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x11000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x433ed18f0c90e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x5401000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f54010000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x44ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x007a9aca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79c8ea158dbfc2e1de12000000","0x1a78872728e48752ec71a57570a89ca4108e7f2647f05e0df163e8c501e62bd900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x617d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fb9093659d7a856809757134d2bc86e62b4def25cfda6ef3a00000000","0x10f4269899ac7d2d29eb1056daace6dd7d82b5a1eaf7ffad1ebe10df920bb99765fd8e4119a5e93d460d6487d41b44fdd3835872849d0e3d044aa530a1dafaa0b9ce159e35d25fb61098f29fdeb46671a0e8606f49b250b900f80bfbbfdd2683c59cad12ee4f2df447c4176518ff7c9aaf86a9c3ab87dc8573662f4f6208d59696"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x12000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c1a78872728e48752ec71a57570a89ca4108e7f2647f05e0df163e8c501e62bd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xf0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245b5010100000000617d1e1000000000426abe7f9933181ab6d7621ce0526a13d4cfc231245058ac3633768e0ac551252c89ee0f638fa34f5bb3cb49ee43b22590435d899d482da71afdf58e86f58e0ff6caf4a8ec4d92faa9f25babb977afdc1adff5a5000bd547fe50df8b6c70900a"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746c2d9675cf95dcf1a11000000","0xf0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x12000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x057bb982c68de00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x6801000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f68010000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x48ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x73919aca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79549892d44badd6af13000000","0xa0d78c7d68ba1011ab243159f48140fcd3c59ef3c733478286d22cd28760018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x627d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x13000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0ca0d78c7d68ba1011ab243159f48140fcd3c59ef3c733478286d22cd2876001800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xc613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000627d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746c8ea158dbfc2e1de12000000","0xc613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x13000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xbe140176808be00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x7c01000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f7c010000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x4cebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xe1a89aca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c791f0e76f06ebd150314000000","0x66d6c67c78e06370e8610169e3961ce5bbfc92545793e0ca9e30383e2dda814400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x637d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fb9093659d7a856809757134d2bc86e62b4def25cfda6ef3a00000000","0x14f4269899ac7d2d29eb1056daace6dd7d82b5a1eaf7ffad1ebe10df920bb99765fd8e4119a5e93d460d6487d41b44fdd3835872849d0e3d044aa530a1dafaa0b9ce159e35d25fb61098f29fdeb46671a0e8606f49b250b900f80bfbbfdd2683c59cad12ee4f2df447c4176518ff7c9aaf86a9c3ab87dc8573662f4f6208d5969694f590add57d4ba87331a6057f9f1137442e533c8f79c4838fd2fa7bffd24db5"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x14000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c66d6c67c78e06370e8610169e3961ce5bbfc92545793e0ca9e30383e2dda81440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xbba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245b5010100000000637d1e1000000000c664d3faa69fffcea0e0b35fb0bd1154eeec520519ef8ef6c7e8418e468cbf4def0cdeafde87c200bc308f982b3af58d56118658707c809025e00791bae59f011fd9903328f6981bb66806d5fef2ad4c88c0861c07bafaccffdb79dd5334cd09"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746549892d44badd6af13000000","0xbba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x14000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x5e0ba8693a89e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x9001000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f90010000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x50ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x51c09aca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c7974e76a9656c0445715000000","0xe6478079e1aa8c19ec85fdf1fe4a293411023be4403968a78b16bcf060d2a85a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x647d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x15000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0ce6478079e1aa8c19ec85fdf1fe4a293411023be4403968a78b16bcf060d2a85a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca79843"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000647d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c1187461f0e76f06ebd150314000000","0x885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca79843"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x15000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xd55eae5df486e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xa401000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25fa4010000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x54ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca79843"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xc1d79aca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79926f3965faf45f0f16000000","0x1943b06781aa18d1720ab9f17097634450c01fe75a6721fbbd6826668452498900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x657d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x16000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c1943b06781aa18d1720ab9f17097634450c01fe75a6721fbbd682666845249890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x29b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd69"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000657d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c11874674e76a9656c0445715000000","0x29b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd69"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x16000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x140f1452ae84e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xb801000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25fb8010000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x58ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd69"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x30ef9aca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79d3f163007fa5a70017000000","0x38d534db7ca04960c17cb53813d2494e53cb77e1859e66e4742edd1ace63530a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x667d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x17000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c38d534db7ca04960c17cb53813d2494e53cb77e1859e66e4742edd1ace63530a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x1b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000667d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746926f3965faf45f0f16000000","0x1b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x17000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x0b1cd9466882e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xcc01000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25fcc010000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x5cebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xa1069bca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c7987351b19f226feaa18000000","0x081fb453b8a335b12e98b76dc3ea9dcd708a16e2411f2eef5c363899a771417a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x677d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fb9093659d7a856809757134d2bc86e62b4def25cfda6ef3a00000000","0x18f4269899ac7d2d29eb1056daace6dd7d82b5a1eaf7ffad1ebe10df920bb99765fd8e4119a5e93d460d6487d41b44fdd3835872849d0e3d044aa530a1dafaa0b9ce159e35d25fb61098f29fdeb46671a0e8606f49b250b900f80bfbbfdd2683c59cad12ee4f2df447c4176518ff7c9aaf86a9c3ab87dc8573662f4f6208d5969694f590add57d4ba87331a6057f9f1137442e533c8f79c4838fd2fa7bffd24db59e8d0acbddece56beee704dc380058a30276bd64298afa5db65e12b57c7a58f0"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x18000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c081fb453b8a335b12e98b76dc3ea9dcd708a16e2411f2eef5c363899a771417a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245b5010100000000677d1e10000000006837235c7694827ee8627a25a0957c0f15d041350a5c6554c47edc1bb3ce8c61858e1a4f4cec4b3ee7c191279690c80cc732c01714209380b0be7fe15d333701708dc43cc65522bac8f980763b4166d38ed9e200504c7ea55e50c60d5cb12b00"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746d3f163007fa5a70017000000","0xba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x18000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xab85fd3b2280e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xe001000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25fe0010000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x60ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x121e9bca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79e99190c148ccde2019000000","0x3865e47b348980fddd68ae6d88c1d16c487c57ff423d60a85657803ba01a93c300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x687d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x19000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c3865e47b348980fddd68ae6d88c1d16c487c57ff423d60a85657803ba01a93c30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xacd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000687d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c11874687351b19f226feaa18000000","0xacd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x19000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xe44b8131dc7de00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xf401000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25ff4010000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x64ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x81359bca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c7934f85e685c16504e1a000000","0x3d41e666989093f1cf003536e00101255a54473753bf6ebb1613da0be07baf7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x697d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x1a000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c3d41e666989093f1cf003536e00101255a54473753bf6ebb1613da0be07baf710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xfd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e8"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000697d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746e99190c148ccde2019000000","0xfd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e8"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x1a000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xa66e6427967be00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x0802000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f08020000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x68ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e8"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xf04c9bca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79a9ec63ce7d367c571b000000","0x147ea47590b282a33b782d6db8c9b58790f4156722366ca7b002b835054bb74300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x6a7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fb9093659d7a856809757134d2bc86e62b4def25cfda6ef3a00000000","0x1cf4269899ac7d2d29eb1056daace6dd7d82b5a1eaf7ffad1ebe10df920bb99765fd8e4119a5e93d460d6487d41b44fdd3835872849d0e3d044aa530a1dafaa0b9ce159e35d25fb61098f29fdeb46671a0e8606f49b250b900f80bfbbfdd2683c59cad12ee4f2df447c4176518ff7c9aaf86a9c3ab87dc8573662f4f6208d5969694f590add57d4ba87331a6057f9f1137442e533c8f79c4838fd2fa7bffd24db59e8d0acbddece56beee704dc380058a30276bd64298afa5db65e12b57c7a58f0f0e834f543a382a02383a02b07153268581a0b17c694e99d77cb97d3aa862c50"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x1b000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c147ea47590b282a33b782d6db8c9b58790f4156722366ca7b002b835054bb7430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x4cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245b50101000000006a7d1e100000000052cf7744d2548a759fc071cd310317895f8fd0403472cd1a2b567a6bd4ed0861e5536d7819bd6550e48c9a5fb601203061fe908ce166a202842b3a75289d400edc262d870caf1b8692723430776585a254af6596fe1a81f69a2331f38e411005"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c11874634f85e685c16504e1a000000","0x4cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x1b000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xe2eda61d5079e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x1c02000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f1c020000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x6cebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x63649bca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79b1ee89fbf5fe7bf01c000000","0xf847e4f97d80c0312fdb3379f88655b5d9fd4357da996cceb631ca132553f5c500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x6b7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x1c000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0cf847e4f97d80c0312fdb3379f88655b5d9fd4357da996cceb631ca132553f5c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xaff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82ded"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x0406424142453402000000006b7d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746a9ec63ce7d367c571b000000","0xaff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82ded"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x1c000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x88c948140a77e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x3002000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f30020000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x70ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82ded"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xd17b9bca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c799d7a9a93920005ae1d000000","0x3c4fee2bb1a20e71eb02bd55f8802fb341ea25c7473d5dea4000681a85e87a5500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x6c7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fb9093659d7a856809757134d2bc86e62b4def25cfda6ef3a00000000","0x20f4269899ac7d2d29eb1056daace6dd7d82b5a1eaf7ffad1ebe10df920bb99765fd8e4119a5e93d460d6487d41b44fdd3835872849d0e3d044aa530a1dafaa0b9ce159e35d25fb61098f29fdeb46671a0e8606f49b250b900f80bfbbfdd2683c59cad12ee4f2df447c4176518ff7c9aaf86a9c3ab87dc8573662f4f6208d5969694f590add57d4ba87331a6057f9f1137442e533c8f79c4838fd2fa7bffd24db59e8d0acbddece56beee704dc380058a30276bd64298afa5db65e12b57c7a58f0f0e834f543a382a02383a02b07153268581a0b17c694e99d77cb97d3aa862c5046102b115d6dec65681e3591cf1eb4c434b39a3d38a63f5cb517db311c22f59e"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x1d000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c3c4fee2bb1a20e71eb02bd55f8802fb341ea25c7473d5dea4000681a85e87a550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b5"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245b50101000000006c7d1e1000000000068902ad1eec5b3067ab85214d535294f1ab70396d2ad46ea74bd76a8ae0f976501c3a34bd73bffaf939f02b64936f50b5395e0b7fe13e5923353f2e31ded00f7947f8c6c4ffb6129c99232fe333cc9c6c84851709722603c37928d077813a08"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b1ee89fbf5fe7bf01c000000","0xceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b5"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x1d000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x89014a0bc474e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x4402000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f44020000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x74ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b5"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x44939bca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c7901cfe8bf76ba27f01e000000","0x7056c47d78b405e9eb094d30f6d43564d1eac5432507e6ce54202ac96438014100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x6d7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x1e000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c7056c47d78b405e9eb094d30f6d43564d1eac5432507e6ce54202ac9643801410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x0ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x0406424142453402000000006d7d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c1187469d7a9a93920005ae1d000000","0x0ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x1e000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xd595aa027e72e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x5802000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f58020000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x78ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xb1aa9bca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79724ecfc48eeb4c4c1f000000","0x3851e67fb0800931e3043578b88895ac9dea5a46475f62ea2f92381b947b4bdc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x6e7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x1f000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c3851e67fb0800931e3043578b88895ac9dea5a46475f62ea2f92381b947b4bdc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x0406424142453402000000006e7d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c11874601cfe8bf76ba27f01e000000","0x42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x1f000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x5c866afa3770e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x6c02000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f6c020000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x7cebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x21c29bca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79dfcda15e347d758120000000","0x0a5bc13f348280faed883d7ce89092e353d05727032faccb8d02e95a3f50e15100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x6f7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x20000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c0a5bc13f348280faed883d7ce89092e353d05727032faccb8d02e95a3f50e1510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77b"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x0406424142453402000000006f7d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746724ecfc48eeb4c4c1f000000","0x1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77b"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x20000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x0fd389f2f16de00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x8002000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f80020000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x80ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77b"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x92d99bca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c794fff66b7ca63162821000000","0x1c47e4bea08041e97f982964fe8327e5386a5ff3f73b248d94302809a43153d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x707d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x21000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c1c47e4bea08041e97f982964fe8327e5386a5ff3f73b248d94302809a43153d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xe9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db2"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000707d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746dfcda15e347d758120000000","0xe9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db2"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x21000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xde7b08ebab6be00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x9402000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f94020000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x84ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db2"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x01f19bca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79dca155a227f42ece22000000","0x6842f40f103710f9dbdc7d5ebc90f5ae6eb24796c72de287947af03d847c67c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x717d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x22000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c6842f40f103710f9dbdc7d5ebc90f5ae6eb24796c72de287947af03d847c67c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x2e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3e"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000717d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c1187464fff66b7ca63162821000000","0x2e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3e"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x22000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xb980e6e36569e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xa802000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25fa8020000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x88ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3e"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x71089cca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c7917a97cdde594c82e23000000","0x0337cd6fbc96c0a9fb9cad79b882c525080a72e7432976fca692287b2c5a1bc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x727d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x23000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c0337cd6fbc96c0a9fb9cad79b882c525080a72e7432976fca692287b2c5a1bc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xf70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000727d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746dca155a227f42ece22000000","0xf70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x23000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x91e123dd1f67e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xbc02000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25fbc020000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x8cebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xe21f9cca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79f1fc507d3bfbfd3f24000000","0x1137e56f282000a8ef89b571b890cdacb8de32f240e94eef0512f9d9311e6e5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x737d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x24000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c1137e56f282000a8ef89b571b890cdacb8de32f240e94eef0512f9d9311e6e500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000737d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c11874617a97cdde594c82e23000000","0x024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x24000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x569ec0d6d964e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xd002000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25fd0020000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x90ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x51379cca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c791a87dce6c74c4c4b25000000","0x7857dd6bb8aea2e9afbc755fd88079c541ca5d47432b4cfef416383bb06fed8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x747d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x25000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c7857dd6bb8aea2e9afbc755fd88079c541ca5d47432b4cfef416383bb06fed880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000747d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746f1fc507d3bfbfd3f24000000","0x345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x25000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xf9b6bcd09362e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xe402000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25fe4020000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x94ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xc34e9cca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c792c1954dd9f53cf8c26000000","0xbe57e67ff99e0039bf8045f8fe4020e4f1c246f6472b3ea78256e81da4591b1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x757d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x26000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0cbe57e67ff99e0039bf8045f8fe4020e4f1c246f6472b3ea78256e81da4591b170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x9f88a3abdf9cdde4c3394b1203ed4a5f48da3f049eefdffac8da70d6df2396da"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000757d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c1187461a87dce6c74c4c4b25000000","0x9f88a3abdf9cdde4c3394b1203ed4a5f48da3f049eefdffac8da70d6df2396da"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x26000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x692b18cb4d60e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xf802000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25ff8020000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x98ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af9f88a3abdf9cdde4c3394b1203ed4a5f48da3f049eefdffac8da70d6df2396da"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x30669cca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c795056c834eadafc6027000000","0x9853e46b2da384a9ef8c2576fcc413c52cda47c7de6f484bf2123e97e412a34000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x767d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fb9093659d7a856809757134d2bc86e62b4def25cfda6ef3a00000000","0x24f4269899ac7d2d29eb1056daace6dd7d82b5a1eaf7ffad1ebe10df920bb99765fd8e4119a5e93d460d6487d41b44fdd3835872849d0e3d044aa530a1dafaa0b9ce159e35d25fb61098f29fdeb46671a0e8606f49b250b900f80bfbbfdd2683c59cad12ee4f2df447c4176518ff7c9aaf86a9c3ab87dc8573662f4f6208d5969694f590add57d4ba87331a6057f9f1137442e533c8f79c4838fd2fa7bffd24db59e8d0acbddece56beee704dc380058a30276bd64298afa5db65e12b57c7a58f0f0e834f543a382a02383a02b07153268581a0b17c694e99d77cb97d3aa862c5046102b115d6dec65681e3591cf1eb4c434b39a3d38a63f5cb517db311c22f59e0af254ac539392181abd67f61c03bcc5e373a488a3ae09a9f436245d2e9bb03e"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x27000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c9853e46b2da384a9ef8c2576fcc413c52cda47c7de6f484bf2123e97e412a3400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xcd61c0eaba02a08ef438c37d2642f1aec2f4793f8ac831565438024d7bc9a25e"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245b5010100000000767d1e1000000000541e76218472e0577d0dbafd678ae81326445b23fd3aa216fb34c68641edc85764694bdb054a61e2ce6c4c2c6e7b6e56d88014c59b75989a4b60227e67beca08ba060dce293c4b69dfa2b21a9775058e8feb8bf75d95e32984c96af6c287be09"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c1187462c1954dd9f53cf8c26000000","0xcd61c0eaba02a08ef438c37d2642f1aec2f4793f8ac831565438024d7bc9a25e"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x27000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x98fbd2c5075ee00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x0c03000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f0c030000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0x9cebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af9f88a3abdf9cdde4c3394b1203ed4a5f48da3f049eefdffac8da70d6df2396dacd61c0eaba02a08ef438c37d2642f1aec2f4793f8ac831565438024d7bc9a25e"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xa17d9cca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c7904c5c8b4e6df936d28000000","0x20d3c56fc084c4e99b007545f84014a1eade57cf465b6ecf9424e832e458934000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x777d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x28000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c20d3c56fc084c4e99b007545f84014a1eade57cf465b6ecf9424e832e45893400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xa2970b3cc13f6cac2339aec3925cf048f06fb247fd392230ddf236946b8373dd"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000777d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c1187465056c834eadafc6027000000","0xa2970b3cc13f6cac2339aec3925cf048f06fb247fd392230ddf236946b8373dd"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x28000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x7527edc0c15be00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x2003000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f20030000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0xa0ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af9f88a3abdf9cdde4c3394b1203ed4a5f48da3f049eefdffac8da70d6df2396dacd61c0eaba02a08ef438c37d2642f1aec2f4793f8ac831565438024d7bc9a25ea2970b3cc13f6cac2339aec3925cf048f06fb247fd392230ddf236946b8373dd"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x11959cca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c793cc9c353c0737ed329000000","0x49d5e4aff8a0d5a9cbe8d5f1b840a1ec124e77c6493d7acbe802b99cc01e294900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c795153cb1f00942ff401000000",null],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x787d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fb9093659d7a856809757134d2bc86e62b4def25cfda6ef3a00000000","0x28f4269899ac7d2d29eb1056daace6dd7d82b5a1eaf7ffad1ebe10df920bb99765fd8e4119a5e93d460d6487d41b44fdd3835872849d0e3d044aa530a1dafaa0b9ce159e35d25fb61098f29fdeb46671a0e8606f49b250b900f80bfbbfdd2683c59cad12ee4f2df447c4176518ff7c9aaf86a9c3ab87dc8573662f4f6208d5969694f590add57d4ba87331a6057f9f1137442e533c8f79c4838fd2fa7bffd24db59e8d0acbddece56beee704dc380058a30276bd64298afa5db65e12b57c7a58f0f0e834f543a382a02383a02b07153268581a0b17c694e99d77cb97d3aa862c5046102b115d6dec65681e3591cf1eb4c434b39a3d38a63f5cb517db311c22f59e0af254ac539392181abd67f61c03bcc5e373a488a3ae09a9f436245d2e9bb03eacebbb6f522b03d6e1c2ccae0491c4dedc8eb236451675fcd2065ae540425653"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x29000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c49d5e4aff8a0d5a9cbe8d5f1b840a1ec124e77c6493d7acbe802b99cc01e29490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xd3fab121228a7c17730ce1e3863a8b4d01b73bc87aa0a724d91656a1da8d8291"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245b5010100000000787d1e1000000000628e0788727ec31be94d51109f3d36d03a122fe59c34506227731da93764064aa35942d0f37019362d9cd582eeed106be3cb1912346efae85680eae0d067ad0f547650f9b1d68bc0bb4ccfc1c12c4481d06c71e3216a002b424c054695d4b40c"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c11874604c5c8b4e6df936d28000000","0xd3fab121228a7c17730ce1e3863a8b4d01b73bc87aa0a724d91656a1da8d8291"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x29000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xf1ae66bc7b59e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x3403000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f34030000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0xa4ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af9f88a3abdf9cdde4c3394b1203ed4a5f48da3f049eefdffac8da70d6df2396dacd61c0eaba02a08ef438c37d2642f1aec2f4793f8ac831565438024d7bc9a25ea2970b3cc13f6cac2339aec3925cf048f06fb247fd392230ddf236946b8373ddd3fab121228a7c17730ce1e3863a8b4d01b73bc87aa0a724d91656a1da8d8291"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x83ac9cca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c799eb2dcce60f37a2702000000",null],["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79f10bc52fb6d756d72a000000","0xd970806fabae04e3ef381df5f801c7a1e04a1be6802bf2ef2c032b1130fa970000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x797d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x2a000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0cd970806fabae04e3ef381df5f801c7a1e04a1be6802bf2ef2c032b1130fa97000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x2bb67a4b01891f8ac2f5c263e8b371420acb635580352c20cae36af42918b5f3"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000797d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c1187463cc9c353c0737ed329000000","0x2bb67a4b01891f8ac2f5c263e8b371420acb635580352c20cae36af42918b5f3"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x2a000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xfd913fb83557e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x4803000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f48030000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0xa8ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af9f88a3abdf9cdde4c3394b1203ed4a5f48da3f049eefdffac8da70d6df2396dacd61c0eaba02a08ef438c37d2642f1aec2f4793f8ac831565438024d7bc9a25ea2970b3cc13f6cac2339aec3925cf048f06fb247fd392230ddf236946b8373ddd3fab121228a7c17730ce1e3863a8b4d01b73bc87aa0a724d91656a1da8d82912bb67a4b01891f8ac2f5c263e8b371420acb635580352c20cae36af42918b5f3"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xf2c39cca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c796bedfbd1761799352b000000","0x1957247fba3600b9bb02657ec08533e478c660f2403f068a3432a9fde4310cd200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79bfb27f1eaef06bb903000000",null],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x7a7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x2b000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c1957247fba3600b9bb02657ec08533e478c660f2403f068a3432a9fde4310cd20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xbe4df08490e8893b80328455ef659a9ea1be2054e62a8fbbf660f230120a27b5"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x0406424142453402000000007a7d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746f10bc52fb6d756d72a000000","0xbe4df08490e8893b80328455ef659a9ea1be2054e62a8fbbf660f230120a27b5"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x2b000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x89d077b4ef54e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x5c03000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f5c030000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0xacebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af9f88a3abdf9cdde4c3394b1203ed4a5f48da3f049eefdffac8da70d6df2396dacd61c0eaba02a08ef438c37d2642f1aec2f4793f8ac831565438024d7bc9a25ea2970b3cc13f6cac2339aec3925cf048f06fb247fd392230ddf236946b8373ddd3fab121228a7c17730ce1e3863a8b4d01b73bc87aa0a724d91656a1da8d82912bb67a4b01891f8ac2f5c263e8b371420acb635580352c20cae36af42918b5f3be4df08490e8893b80328455ef659a9ea1be2054e62a8fbbf660f230120a27b5"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x61db9cca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c793e1f6295e49ed2492c000000","0x7843e57fb82e02b1eb909df7f88053e0d2ca16e76eab5cff3d42b50ca45ba58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79d9c986912843223804000000",null],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x7b7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fb9093659d7a856809757134d2bc86e62b4def25cfda6ef3a00000000","0x2cf4269899ac7d2d29eb1056daace6dd7d82b5a1eaf7ffad1ebe10df920bb99765fd8e4119a5e93d460d6487d41b44fdd3835872849d0e3d044aa530a1dafaa0b9ce159e35d25fb61098f29fdeb46671a0e8606f49b250b900f80bfbbfdd2683c59cad12ee4f2df447c4176518ff7c9aaf86a9c3ab87dc8573662f4f6208d5969694f590add57d4ba87331a6057f9f1137442e533c8f79c4838fd2fa7bffd24db59e8d0acbddece56beee704dc380058a30276bd64298afa5db65e12b57c7a58f0f0e834f543a382a02383a02b07153268581a0b17c694e99d77cb97d3aa862c5046102b115d6dec65681e3591cf1eb4c434b39a3d38a63f5cb517db311c22f59e0af254ac539392181abd67f61c03bcc5e373a488a3ae09a9f436245d2e9bb03eacebbb6f522b03d6e1c2ccae0491c4dedc8eb236451675fcd2065ae54042565334d89edf03ff872cdac89397fbca4f01c0eb93d9ad6b9bc70d2e48865c7dbfaa"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x2c000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c7843e57fb82e02b1eb909df7f88053e0d2ca16e76eab5cff3d42b50ca45ba5800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x12efd82679d82c38639c183e773055062e1cd990fdb5883f363409d83fa19ea9"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245b50101000000007b7d1e1000000000e0a188900336056f7e5f75eaa0310c10a8809080c03d6f6fdb0f54eb3e97113417a2f0dedae066b50b3dbf1058bf35aecea7145e90a3a9cda298f1b9474da504e28a869822e886b81f4962c440ed8b630a00b8306826b1b98d0c0eb0dd33eb06"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c1187466bedfbd1761799352b000000","0x12efd82679d82c38639c183e773055062e1cd990fdb5883f363409d83fa19ea9"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x2c000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x856a0fb1a952e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x7003000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f70030000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0xb0ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af9f88a3abdf9cdde4c3394b1203ed4a5f48da3f049eefdffac8da70d6df2396dacd61c0eaba02a08ef438c37d2642f1aec2f4793f8ac831565438024d7bc9a25ea2970b3cc13f6cac2339aec3925cf048f06fb247fd392230ddf236946b8373ddd3fab121228a7c17730ce1e3863a8b4d01b73bc87aa0a724d91656a1da8d82912bb67a4b01891f8ac2f5c263e8b371420acb635580352c20cae36af42918b5f3be4df08490e8893b80328455ef659a9ea1be2054e62a8fbbf660f230120a27b512efd82679d82c38639c183e773055062e1cd990fdb5883f363409d83fa19ea9"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xd3f29cca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c7939b9d2792f8bd4c305000000",null],["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c7957cc9d27e0a04ef82d000000","0x7557e56b3cba8139db489557b0c190347bca56dfe3ab7caf24369919a44eb74000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x7c7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x2d000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c7557e56b3cba8139db489557b0c190347bca56dfe3ab7caf24369919a44eb7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xa296518d0ad129915809a23976dc4e33aee2995e0a984ddc20019262505a02f9"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x0406424142453402000000007c7d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c1187463e1f6295e49ed2492c000000","0xa296518d0ad129915809a23976dc4e33aee2995e0a984ddc20019262505a02f9"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x2d000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xe15f06ae6350e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x8403000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f84030000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0xb4ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af9f88a3abdf9cdde4c3394b1203ed4a5f48da3f049eefdffac8da70d6df2396dacd61c0eaba02a08ef438c37d2642f1aec2f4793f8ac831565438024d7bc9a25ea2970b3cc13f6cac2339aec3925cf048f06fb247fd392230ddf236946b8373ddd3fab121228a7c17730ce1e3863a8b4d01b73bc87aa0a724d91656a1da8d82912bb67a4b01891f8ac2f5c263e8b371420acb635580352c20cae36af42918b5f3be4df08490e8893b80328455ef659a9ea1be2054e62a8fbbf660f230120a27b512efd82679d82c38639c183e773055062e1cd990fdb5883f363409d83fa19ea9a296518d0ad129915809a23976dc4e33aee2995e0a984ddc20019262505a02f9"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x410a9dca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79b61f803a716bd3b906000000",null],["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79f35b7abb205636532e000000","0x7171646fb0b440338b581577fe8153ed1acb23f780efe6ae7406bd39e472178800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x7d7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x2e000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c7171646fb0b440338b581577fe8153ed1acb23f780efe6ae7406bd39e47217880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x387ed8efef25f16f2d6e115be5f2e753497267644043aa093a760065442ac973"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x0406424142453402000000007d7d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c11874657cc9d27e0a04ef82d000000","0x387ed8efef25f16f2d6e115be5f2e753497267644043aa093a760065442ac973"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x2e000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x8eb05cab1d4ee00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x9803000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f98030000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0xb8ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af9f88a3abdf9cdde4c3394b1203ed4a5f48da3f049eefdffac8da70d6df2396dacd61c0eaba02a08ef438c37d2642f1aec2f4793f8ac831565438024d7bc9a25ea2970b3cc13f6cac2339aec3925cf048f06fb247fd392230ddf236946b8373ddd3fab121228a7c17730ce1e3863a8b4d01b73bc87aa0a724d91656a1da8d82912bb67a4b01891f8ac2f5c263e8b371420acb635580352c20cae36af42918b5f3be4df08490e8893b80328455ef659a9ea1be2054e62a8fbbf660f230120a27b512efd82679d82c38639c183e773055062e1cd990fdb5883f363409d83fa19ea9a296518d0ad129915809a23976dc4e33aee2995e0a984ddc20019262505a02f9387ed8efef25f16f2d6e115be5f2e753497267644043aa093a760065442ac973"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xb0219dca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c790e0d969b0e48cab707000000",null],["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c797faf5aee76b6da942f000000","0xe355e57d283800afeb889d57f04111e950c632c3ea39784f1e4008167459ed4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x7e7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x2f000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0ce355e57d283800afeb889d57f04111e950c632c3ea39784f1e4008167459ed400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x958c19ccea8aaa340fb466e66febcc15c7dcaedd55ebd2d1a69e5180f6a7974f"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x0406424142453402000000007e7d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746f35b7abb205636532e000000","0x958c19ccea8aaa340fb466e66febcc15c7dcaedd55ebd2d1a69e5180f6a7974f"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x2f000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x7d5c12a9d74be00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xac03000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25fac030000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0xbcebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af9f88a3abdf9cdde4c3394b1203ed4a5f48da3f049eefdffac8da70d6df2396dacd61c0eaba02a08ef438c37d2642f1aec2f4793f8ac831565438024d7bc9a25ea2970b3cc13f6cac2339aec3925cf048f06fb247fd392230ddf236946b8373ddd3fab121228a7c17730ce1e3863a8b4d01b73bc87aa0a724d91656a1da8d82912bb67a4b01891f8ac2f5c263e8b371420acb635580352c20cae36af42918b5f3be4df08490e8893b80328455ef659a9ea1be2054e62a8fbbf660f230120a27b512efd82679d82c38639c183e773055062e1cd990fdb5883f363409d83fa19ea9a296518d0ad129915809a23976dc4e33aee2995e0a984ddc20019262505a02f9387ed8efef25f16f2d6e115be5f2e753497267644043aa093a760065442ac973958c19ccea8aaa340fb466e66febcc15c7dcaedd55ebd2d1a69e5180f6a7974f"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x21399dca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79098c62a803faa4cc30000000","0xa945e43fbc368177bb043576f40515ec70ca42e7a12fccef8850b944261d250800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c7947ab1c010b3bff4908000000",null],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x7f7d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x30000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0ca945e43fbc368177bb043576f40515ec70ca42e7a12fccef8850b944261d25080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x849a339118765aebf8bc3c229e2669ae6217d2a24cd127682dffe9928484a546"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x0406424142453402000000007f7d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c1187467faf5aee76b6da942f000000","0x849a339118765aebf8bc3c229e2669ae6217d2a24cd127682dffe9928484a546"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x30000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x9d6327a79149e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xc003000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25fc0030000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0xc0ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af9f88a3abdf9cdde4c3394b1203ed4a5f48da3f049eefdffac8da70d6df2396dacd61c0eaba02a08ef438c37d2642f1aec2f4793f8ac831565438024d7bc9a25ea2970b3cc13f6cac2339aec3925cf048f06fb247fd392230ddf236946b8373ddd3fab121228a7c17730ce1e3863a8b4d01b73bc87aa0a724d91656a1da8d82912bb67a4b01891f8ac2f5c263e8b371420acb635580352c20cae36af42918b5f3be4df08490e8893b80328455ef659a9ea1be2054e62a8fbbf660f230120a27b512efd82679d82c38639c183e773055062e1cd990fdb5883f363409d83fa19ea9a296518d0ad129915809a23976dc4e33aee2995e0a984ddc20019262505a02f9387ed8efef25f16f2d6e115be5f2e753497267644043aa093a760065442ac973958c19ccea8aaa340fb466e66febcc15c7dcaedd55ebd2d1a69e5180f6a7974f849a339118765aebf8bc3c229e2669ae6217d2a24cd127682dffe9928484a546"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x94509dca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79598b52bf1678443909000000",null],["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c798e233f9722d30ebf31000000","0xbb57c46dbc2a0035df200557fec0616170de47d3c9ab4cefa4563d4da45aa74900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x807d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x31000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0cbb57c46dbc2a0035df200557fec0616170de47d3c9ab4cefa4563d4da45aa7490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x033a3e2b0fb31974eef5894422019a4173ed9d3f2ea0f11f69c96998f572ef51"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000807d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746098c62a803faa4cc30000000","0x033a3e2b0fb31974eef5894422019a4173ed9d3f2ea0f11f69c96998f572ef51"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x31000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xdfc59ba54b47e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xd403000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25fd4030000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0xc4ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af9f88a3abdf9cdde4c3394b1203ed4a5f48da3f049eefdffac8da70d6df2396dacd61c0eaba02a08ef438c37d2642f1aec2f4793f8ac831565438024d7bc9a25ea2970b3cc13f6cac2339aec3925cf048f06fb247fd392230ddf236946b8373ddd3fab121228a7c17730ce1e3863a8b4d01b73bc87aa0a724d91656a1da8d82912bb67a4b01891f8ac2f5c263e8b371420acb635580352c20cae36af42918b5f3be4df08490e8893b80328455ef659a9ea1be2054e62a8fbbf660f230120a27b512efd82679d82c38639c183e773055062e1cd990fdb5883f363409d83fa19ea9a296518d0ad129915809a23976dc4e33aee2995e0a984ddc20019262505a02f9387ed8efef25f16f2d6e115be5f2e753497267644043aa093a760065442ac973958c19ccea8aaa340fb466e66febcc15c7dcaedd55ebd2d1a69e5180f6a7974f849a339118765aebf8bc3c229e2669ae6217d2a24cd127682dffe9928484a546033a3e2b0fb31974eef5894422019a4173ed9d3f2ea0f11f69c96998f572ef51"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x03689dca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79a6b274250e6753f00a000000",null],["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79f36341bfbb0a4e9232000000","0x3c71e4ef3c8880f1eb28cd7cec80d1644ade77ef462fe86e8144090bf41ab30900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x817d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x32000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c3c71e4ef3c8880f1eb28cd7cec80d1644ade77ef462fe86e8144090bf41ab3090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xf2f03a14e0200508022281c692e1adb359d06a0a76fc9a48056a1fa35e6bb97b"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000817d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c1187468e233f9722d30ebf31000000","0xf2f03a14e0200508022281c692e1adb359d06a0a76fc9a48056a1fa35e6bb97b"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x32000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x34836fa40545e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xe803000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25fe8030000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0xc8ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af9f88a3abdf9cdde4c3394b1203ed4a5f48da3f049eefdffac8da70d6df2396dacd61c0eaba02a08ef438c37d2642f1aec2f4793f8ac831565438024d7bc9a25ea2970b3cc13f6cac2339aec3925cf048f06fb247fd392230ddf236946b8373ddd3fab121228a7c17730ce1e3863a8b4d01b73bc87aa0a724d91656a1da8d82912bb67a4b01891f8ac2f5c263e8b371420acb635580352c20cae36af42918b5f3be4df08490e8893b80328455ef659a9ea1be2054e62a8fbbf660f230120a27b512efd82679d82c38639c183e773055062e1cd990fdb5883f363409d83fa19ea9a296518d0ad129915809a23976dc4e33aee2995e0a984ddc20019262505a02f9387ed8efef25f16f2d6e115be5f2e753497267644043aa093a760065442ac973958c19ccea8aaa340fb466e66febcc15c7dcaedd55ebd2d1a69e5180f6a7974f849a339118765aebf8bc3c229e2669ae6217d2a24cd127682dffe9928484a546033a3e2b0fb31974eef5894422019a4173ed9d3f2ea0f11f69c96998f572ef51f2f03a14e0200508022281c692e1adb359d06a0a76fc9a48056a1fa35e6bb97b"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x717f9dca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79926fee72d371f90b33000000","0x775564ef28a240ffeb501d72ea0455ac68ce17a74a3be86f1452a010e43db54100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79be93d8a4ce7799c00b000000",null],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x827d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x33000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c775564ef28a240ffeb501d72ea0455ac68ce17a74a3be86f1452a010e43db5410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0xa9c094578bb1090cae28fc3d9216318c83ac90409ab25963d8414db9a1e96acc"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000827d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746f36341bfbb0a4e9232000000","0xa9c094578bb1090cae28fc3d9216318c83ac90409ab25963d8414db9a1e96acc"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x33000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0x8b9ba2a3bf42e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0xfc03000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25ffc030000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0xccebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af9f88a3abdf9cdde4c3394b1203ed4a5f48da3f049eefdffac8da70d6df2396dacd61c0eaba02a08ef438c37d2642f1aec2f4793f8ac831565438024d7bc9a25ea2970b3cc13f6cac2339aec3925cf048f06fb247fd392230ddf236946b8373ddd3fab121228a7c17730ce1e3863a8b4d01b73bc87aa0a724d91656a1da8d82912bb67a4b01891f8ac2f5c263e8b371420acb635580352c20cae36af42918b5f3be4df08490e8893b80328455ef659a9ea1be2054e62a8fbbf660f230120a27b512efd82679d82c38639c183e773055062e1cd990fdb5883f363409d83fa19ea9a296518d0ad129915809a23976dc4e33aee2995e0a984ddc20019262505a02f9387ed8efef25f16f2d6e115be5f2e753497267644043aa093a760065442ac973958c19ccea8aaa340fb466e66febcc15c7dcaedd55ebd2d1a69e5180f6a7974f849a339118765aebf8bc3c229e2669ae6217d2a24cd127682dffe9928484a546033a3e2b0fb31974eef5894422019a4173ed9d3f2ea0f11f69c96998f572ef51f2f03a14e0200508022281c692e1adb359d06a0a76fc9a48056a1fa35e6bb97ba9c094578bb1090cae28fc3d9216318c83ac90409ab25963d8414db9a1e96acc"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0xe1969dca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]},{"childStorageChanges":[],"mainStorageChanges":[["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79401b534b9db2069d34000000","0x3061e56fb890c1f5fb300d73cc00512442ce43a7eaf950ef24021109243abf4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x160f30b56aafa7a26eec6068148674c6b79b5b2a818d91707dfff66e580e6c79ef8763d79d01484e0c000000",null],["0x1cb6f36e027abb2091cfb5110ab5087f0323475657e0890fbdbf66fb24b4649e",null],["0x1cb6f36e027abb2091cfb5110ab5087f06155b3cd9a8c9e5e9a23fd5dc13a5ed","0x837d1e1000000000"],["0x1cb6f36e027abb2091cfb5110ab5087fd077dfdb8adb10f78f10a5df8742c545",null],["0x1cb6f36e027abb2091cfb5110ab5087ffa92de910a7ce2bd58e99729c69727c1",null],["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0x34000000"],["0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850","0x02000000"],["0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96","0x00000000000000000000000000000000785aa25201000000"],["0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7","0x08000000000000005095a20900000000020000010a0c3061e56fb890c1f5fb300d73cc00512442ce43a7eaf950ef24021109243abf400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"],["0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc","0x62e5a0029e0085bdb346bee0f280d4ded4ac2c83568a62da88b6a789ea06d3fe"],["0x26aa394eea5630e07c48ae0c9558cef799e7f93fc6a98f0874fd057f111c4d2d","0x040642414245340200000000837d1e1000000000"],["0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746926fee72d371f90b33000000","0x62e5a0029e0085bdb346bee0f280d4ded4ac2c83568a62da88b6a789ea06d3fe"],["0x26aa394eea5630e07c48ae0c9558cef7a86da5a932684f199539836fcb8c886f",null],["0x26aa394eea5630e07c48ae0c9558cef7bdc0bd303e9855813aa8a30d4efc5112",null],["0x26aa394eea5630e07c48ae0c9558cef7df1daeb8986837f21cc5d17596bb78d1b4def25cfda6ef3a00000000",null],["0x26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a",null],["0x2b06af9719ac64d755623cda8ddd9b94b1c371ded9e9c565e89ba783c4d5f5f9b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f","0x34000000"],["0x3a65787472696e7369635f696e646578",null],["0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc","0xd60e35a37940e00d0000000000000000"],["0x5f3e4907f716ac89b6347d15ececedca80cc6574281671b299c1727d7ac68cabb4def25cfda6ef3a00000000","0x1004000004be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f10040000"],["0xbd2a529379475088d3e29a918cd478721a39ec767bd5269111e6492a1675702a","0xd0ebb668f20482457307b9387d230f727c68a4087f728c56d1a58cd2a48599aec67dd59c0033a4e1fefe5c15ac84d8f5341fc8298f856fbc7550d6439ea1c4064e1de4d9a9747550373f61defc017e7cb860a6ae93c3bba6379f35298f81d906b6ab57a190a2a4774394cc2420c2d3028b38e05f4133325198789aa1e2eb0cfaed7f3571bd5beb828ccfa12fc3e4b6946fe16cb8139d850c444127167f51898009eeec9acfb644536b7185d7a6ca4d076869b04d041cd705f5e773535e17a5d56adccda0eb8b98cfbcd98846e7e691050417923654e0ff05fec958913d1b5e6664bcea132e807c3626b6e5c445895290078765b0a72d5561d0533dc764777e3e220854f55dcd7b02a2f28fcb563ddc9436d292f9682d67328af91cbfe6aa1675b4885d5f71f8f1bb9c8e86d0a2e316af2678852c16def60f44ac9c622ae44fc817b881f4f9216b9b5611940906b2299e04c60e086ca369a198403f96643dabf93c37542a010cf8ef7e894303dcbdab507f952baa3a6327462734adc41a6800ea1572d8740075c59cb9f619e1cefcc62507a12e86bd3df659a7f7998cb78f50539a2c957ca034d9dd3a8204fc5e2af54c8d4f139797edfcece14d6229b7890b6249b77992fbff5965c307069d561917873db0fe61a51595ac66240078b8a1d167b6dde24167150ce9169942a3692dd874e8f862e519737656591811e0676ef0fe1264059d7b745e9c5f89322012a14dbe9aea66bccb243b2b29afe1f538f2ec04f3f0d559851bf86305327f5c8e56e237723d8288227abbc55e0943dbad96528e98c613e58f96b76c5018f76fe6b2a266c3b271948fc23b0abee7102940c7769e59bba726ef0dc99c408f52421cfb7a94fc360458a5311ec031c5ee8cac8a802c8a885cb63b980115b69a562f8a8b5cfd920b3710aab4ef358a5529a20d8ca7984329b98a2fad4e7dd54084ed1ea213e36c7291f2784b38c5fc051d299d7fa6fd691b5fa8fa41c2f77679cce7e23e55ac8444e6b9e6245b95bf9ceafadc1fc7d877ba994545ac8abbd208829194ceb2d5362093991b5e8368116dca0e52a7ef0451acd7dd6614928f96edfffbd8eb2b674198ebc31031d987226f010ab5d2212071fd4d2557b6a1aa48a0296674f1d6eb24d61ecb81c244dc4f4f3be0e386e327e84cad7aa5a10db643f12cbc1a4415a268b207328b8df9b25484db2896dd4e8148aff33f6af443075e98a3004490a9afb2e96458e41cd2d4f0604afb2d11a82dedceea50211f47d4e6c524f2e55c97f14af26e6e07e92ddfb30be6d011c7a700b50ad8ef0b5570502224f77ea8af08e04f26fdd9306a74163b696e7bab1cfaa81f42a802cbe4785cb89f0ac168ef75f8b178f79b4852d8c43fc8344dfc1973590a1e2f45592833d3228d543c9e8c548755d82fcd95df70b60266d64818415cb77be9182e6911bb2dce95109eea017bdcc30c5a32d26d9771801f287e72d2d04db22e2d2148864d1424f6013c22fe8077a0c604b41da997b669639da2bb3ba4dc3ef70636c8bdc4f35566d359bf34ab7312464b2433180d7aa63554929dfc033481024189b6bc6988f992ceafb3e4103be64c967eaa1347d25f9468fe6522bce642345c1471def74f3db02abf1cb5f7cf71e03e2a647e5ea9a7968be1f3f16f02af9f88a3abdf9cdde4c3394b1203ed4a5f48da3f049eefdffac8da70d6df2396dacd61c0eaba02a08ef438c37d2642f1aec2f4793f8ac831565438024d7bc9a25ea2970b3cc13f6cac2339aec3925cf048f06fb247fd392230ddf236946b8373ddd3fab121228a7c17730ce1e3863a8b4d01b73bc87aa0a724d91656a1da8d82912bb67a4b01891f8ac2f5c263e8b371420acb635580352c20cae36af42918b5f3be4df08490e8893b80328455ef659a9ea1be2054e62a8fbbf660f230120a27b512efd82679d82c38639c183e773055062e1cd990fdb5883f363409d83fa19ea9a296518d0ad129915809a23976dc4e33aee2995e0a984ddc20019262505a02f9387ed8efef25f16f2d6e115be5f2e753497267644043aa093a760065442ac973958c19ccea8aaa340fb466e66febcc15c7dcaedd55ebd2d1a69e5180f6a7974f849a339118765aebf8bc3c229e2669ae6217d2a24cd127682dffe9928484a546033a3e2b0fb31974eef5894422019a4173ed9d3f2ea0f11f69c96998f572ef51f2f03a14e0200508022281c692e1adb359d06a0a76fc9a48056a1fa35e6bb97ba9c094578bb1090cae28fc3d9216318c83ac90409ab25963d8414db9a1e96acc62e5a0029e0085bdb346bee0f280d4ded4ac2c83568a62da88b6a789ea06d3fe"],["0xd57bce545fb382c34570e5dfbf338f5e326d21bc67a4b34023d577585d72bfd7",null],["0xd57bce545fb382c34570e5dfbf338f5ea36180b5cfb9f6541f8849df92a6ec93","0x00"],["0xd57bce545fb382c34570e5dfbf338f5ebddf84c5eb23e6f53af725880d8ffe90",null],["0xf0c365c3cf59d671eb72da0e7a4113c49f1f0515f462cdcf84e0f1d6045dfcbb","0x51ae9dca79010000"],["0xf0c365c3cf59d671eb72da0e7a4113c4bbd108c4899964f707fdaffb82636065",null],["0xfbc9f53700f75f681f234e70fb7241ebfbc9f53700f75f681f234e70fb7241eb",null]]}],"id":1} diff --git a/crates/phala-trie-storage/tests/data/db-0.json b/crates/phala-trie-storage/tests/data/db-0.json new file mode 100644 index 00000000..d52abac6 --- /dev/null +++ b/crates/phala-trie-storage/tests/data/db-0.json @@ -0,0 +1,177 @@ +{ + "name": "Phala Development", + "id": "phala_dev", + "chainType": "Development", + "bootNodes": [], + "telemetryEndpoints": null, + "protocolId": null, + "properties": null, + "forkBlocks": null, + "badBlocks": null, + "consensusEngine": null, + "lightSyncState": null, + "codeSubstitutes": {}, + "genesis": { + "raw": { + "top": { + "0xf2794c22e353e9a839f12faab03a911b308ce9615de0775a82f8a94dc3d285a1": "0x00", + "0x3a65787472696e7369635f696e646578": "0x00000000", + "0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbe598b52bf1678443909000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0x160f30b56aafa7a26eec6068148674c669f1404d36d4ac0f36ef705e52f439edde1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da932a5935f6edc617ae178fef9eb1e211fbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x000000000300000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000c16ff286230000000000000000000000c16ff28623000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9007cbc1270b5b091758f9c42f5915b3e8ac59e11963af19174d0b94d5d78041c233f55d2e19324665bafdfb62925af2d": "0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbed9c986912843223804000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0x1a736d37504c2e3fb73dad160c55b291878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x5f3e4907f716ac89b6347d15ececedca28dccb559b95c40168a1b2696581b5a7": "0x00000000000000000000000000000000", + "0x7cda3cfa86b349fdafce4979b197118f71cd3068e6118bfb392b798317f63a8910c174c55fd2c633e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e": "0x04e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e0000c16ff2862300000000000000000000000000000000000000000000000000", + "0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbe9eb2dcce60f37a2702000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0xada366fdf7a3ba269db9ab51b5e00cd8878d434d6125b40443fe11fd292d13a4": "0x01000000", + "0xd5c41b52a371aa36c9254ce34324f2a5878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0xf2794c22e353e9a839f12faab03a911b7f17cdfbfa73331856cca0acddd7842e": "0x00000000", + "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0xf2794c22e353e9a839f12faab03a911b878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x0ffcffc06ff286230ffcffc06ff2862300", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x0ffcffc06ff286230ffcffc06ff2862300", + "0x2aeddc77fe58c98d50bd37f1b90840f9878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbe47ab1c010b3bff4908000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0x5f27b51b5ec208ee9cb25b55d8728243878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x00", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc632a5935f6edc617ae178fef9eb1e211fbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x047374616b696e67200000c16ff2862300000000000000000002", + "0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbeb4def25cfda6ef3a00000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0x426e15054d267946093858132eb537f1d0b4a3f7631f0c0e761898fe198211de": "0xe7030000", + "0xcec5070d609dd3497f72bde07fc96ba098ef7dc060436e4ed803af07632b89b6b4def25cfda6ef3a00000000": "0x37f68164ff558fa9e50943800586a868c52bff83dc30603aa937ae02dc2fa57d01000000", + "0x11f3ba2e1cdd6d62f2ff9b5589e7ff81ba7fb8745735dc3be2a2c61a72c39e78": "0x18d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a4890b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e1cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c", + "0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbe5153cb1f00942ff401000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b0edae20838083f2cde1c4080db8cf8090b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22": "0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x84287068616c652d6e6f6465", + "0x1cb6f36e027abb2091cfb5110ab5087f5e0621c4869aa60c02be9adcc98a0d1d": "0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0100000000000000", + "0x3a6772616e6470615f617574686f726974696573": "0x010488dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee0100000000000000", + "0x1cb6f36e027abb2091cfb5110ab5087f66e8f035c8adbe7f1547b43c51e6f8a4": "0x00000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da94f9aea1afa791265fae359272badc1cf8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48": "0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x43cdcd39d5edb1d16e24fa028edde0de878d434d6125b40443fe11fd292d13a4": "0x00000001", + "0x5f3e4907f716ac89b6347d15ececedcaea07de2b8f010516dca3f7ef52f7ac5a": "0x040000000000000000", + "0x5f3e4907f716ac89b6347d15ececedcac0d39ff577af2cc6b67ac3641fa9c4e7": "0x01000000", + "0x3a636f6465": "0x52bc537646db8e0528b52ffd00583c4a057ed5860c1652107055c4e9f0323f83a3512c3cda84a40c9417c527ca9ce805947825a8e708c7f9095179b8369ef75f19e8c5cb88f184d014d1fd8dc2184670b3ab2f2fa32c3d9b094e6db3d8c2107ceb262222b4c9967b0732161f155e17075b4f802096bb3ffc2c1396d27c5609cd835e9191d42fe44a6bbe8bc61e36770745cfec3ef223412b321990bddfd266b0a439a4a44a229148fd4264f2e8a0e6b3391c85e413ae275c23d207f9b56a90ef6bbeff1edeb27b1d09f03da45d5bd49dc78ccf7b15414b047de3b5bc4f3436e0963477def5bada84559b54d6076ee097031c7dcfe9738973892362f61e8e461edd758ee8f44d77a42b8b88d9c350b8839fa570c8494e24092249f46834809c01e4909ddade95299dda1e8e387cb2aad11064e7ce264fee6ed6ecddf42aa5f14e6da6a310355ba66337f2f89ed2a95a737d4adf7c35939daab7acf92ba170f7bcae34bdfc8051942851a2ac4e8fc562b156dce9a335db3d5ab30d416e79333d6fa7f2b42dd520a43d90db65e46a82261ec89f49199144d05d71370df9d2f48dd9fdfb7dea2b513d36d6962dd9d9fb57d63cd337de2804ad82c5ca1e4ee23d09125a63b1b24e29f775b85c1f7ad61373bfd62a57220922535a536f6df99d7a65121d2ef7395a461293bd875c8924885c694dbf9666e7ef66cdfd61b37ea66f90d428d9fb3d1d87a0d9c394d23436bb53aea4f913a276657be2038c00da565b6791ef87e81b3355c403fac63ce5f48d496505e89bcef736af7c7fa371ec8a5eb151594ec9a64d4675b7ef4da4e30eef5d76f74a21fadfb751889afb5d196ee30172da7ea559737d8f42d4f77bdcd17fd8a57d58c72172da002d44f7471fd647edb08ffa7ee99baea4f9744fa6dc7cea1b1abb010ba8f7fb30fcde95debfd2eccebd8e42d4dcdd2bcd16bdb23bedba372b73e5907a9ae9d8a39bc8d5eb9bb6b54c65786ef56458f42069ec4914729f7bbffe0915f925d3d89318e4704467c26ff3fe95dcb791883ef795fd9ae9c3b08e3b9428007c87cfeee01540571d6652a3aca0f8ce9566cddce998800f04b10231b5aa7bcfaaee733ab4024957e0ea0341acba77a7f507ae894cdf2311f6dce9d803ccd82c22535ae361930bad48fbc6e45e8770ef9b22cdc18d05e03942a694c6e45e4fc71d5c3fa7b9721b7970427036a7bb92ae3891d61fbc2688b0efd1c776fbbb53797aa7f2f4667f904ad1f4cd96ed492a324e5dcd647b4f9440f89e999b2e53fae93df7e4b7f7b83c7c0bf79ef1f5ede1d323bde7e530479df079bac974187c964a37bdf8e9e7099f25d54f3f612edef41e123eadbd874fefa4c54fea4f7bfcd247179dc367cac316ef71f1f03d203ec1d7faf0844f182753a779257ffa597fc267d7ddc32778efe7e9e17bb8b7c0e7caca53f049fa87cfef2fc29f2f1ee29344fa193ee62a9e77119f5d77109f247c9607ef91eefd14efe1b353f9d97dc663fcf41e039f2b2b67c127cb49f2189f2bf82c24cb63fc241f039ff823e19f9f0a3f49a9e053e52c2c8f51616181f114081e97201882df0b96134c89e491f50361483664e94c2f3ab1da53c954ed0bd2237920c9127622cc09c6be30953af0fb48a147b294440fe6134f25b2da0a9a5e742ca48ee544b23434bcb09a5e84b729c5006968544e21e99b31e367fd8c191f0c0c8cd778f635220d1a3fc1d3a0f182244d87f11922f8195d4dcdcf17afa1a9b12616ef304ee3543a8ddbfc84b9cd8c193fc3cf8831e3363fbf8e86267c7118afe9585e5369686868fc244f039f343425d26d62c4287f8a2fbfc3f80cfc320563f3193f4f9f515323e331f059f3548ccff8093ef5d383a1ba8a4a3d1dc669caf2298c1ff332f5f267e9a53dcd6bfc34bd46b5f96d7e9a6e53554fd9bcc64f98a77edacfa8f961fc33fe9f2ffefa33fc1f23e6298ccf129fe5538fc18ff9293ea6feec1ee3353fbdd75419343fc9d3e05306cd61e053c6317ecd4fd261fcfc5e039f34685c85cf187cc65c45e5c7678b168fc1e7afa2f2989f2c8fc1678b98b7f829e21caba257dd2625a6bcc4670b7cb67879513c8c9fe061e0332575183f437cc4aae8536ef313c44b5815bd0d3e69e0277546f818f804c1afe073e5618c873f3ffc80109f60f8e313bcf85dfcf902176155f4ffc98287b02afa1a7cd2b05c063e61e013c663bcb80a9fa999c3c0e70bde6082d6ea45cf8bd7d80b7cc260ea02579655d1cf606a5532d8acaf4c7fc29e55d1e312e6c7678ccb5be01306e6270c3e4d987cc1d4aa50d8acad4cef82a955b560b3fe64fa123efd24e124ac8afe844f16fca4ae7a4c5fc167e92af889cdaa87f4147c9ac697f04922fd24e193c436234cad4a84cdea93e9476c56a04cef611c151b6155f4223e43fc24b5eab907f1f9e1275ff5f4d47b3f3d7c76f856457ff62fa656b561b3c2525645dfd8acae4cbf23e2a93bdd0ec853773e9eba5379aa388307940749635cb822b7641afb800b2c2d6fcfe91bebd3a9edf4f66571c66f3771647ad326d39ba94c6f3ed39ba74c6f9299dee28cb86756b59d8a2d1ca165d98043a9af762fc8eb6879b32f0e53ab325b289bf695b70b41f2ac5c422c9043eacd5a31121a255b57a7b6e7b44b780569d659de1e5628ec2b0eaf20ede9b8c3de078d922d36794ab3b272bdb795b5ba38bc82dc2e044957db73acc543eecdfbeebe9d8e0be0dee1138a7b0ed798556d38bc82bc18d5a3b23696c5e9a167684287284441c11c4cd05a4121eb9bfaed356671e88a87083f40c32ce8063998021156666de90802156be8011cac50d3c1caac2e1e1b40c103141b0cc1410d6d5899d5875af18127a8500736b0a0c78a95595f3c2df0c0169c488216e810148395597ff2168304394c71842d38a9031a566685e58d0bb51fd0c089160c25810e2bb302e50d8758202b2bd3bc9dce6c7888a5652ab3e3f174732208e9e98c4963d97ea339eee9c35bdee89475659b7a8be3dd3e6571bedbbf70b7c741739cd670b7ff4ab255dcbdd26b1577b26f4c966c4fade2badb581186b27923dbb3d01c35dbaea49dba25ad24f1f53da2b6d7dc19b59dc68cd0834c634578c32d6ba6f99635d77107f7ce346604583e758a7b8fdb963b4c3bc561daa99ab772eb14a535f476a7796ef71a421e3423a951727d2dc71284b56b8799c63ed0a4e6ea04165cd88ef435d398117c904f9da247b2654a6b284652a3e48fd6b44552a3644a375a7ab4a6ef02077b91be6fcb019034e6248b6c8ab5ac59fc680e9abbefd11cb453e64bae27651a7332cba74e55dad58a28ada11b1013212633264fdc812e80ecd3fe1685dcf744f246a800b29eb60ff4340c690e49631ea8c1fba6df4ff54d777b4004b9edaabbdb48585fcbd3993e22a499ce9864ee87f5b6de147387b67e88ad65e7585ec28d2d529aa3de346bb636c89aede9e9c8c3626fcb632d2f298d422bd6d2e6710927d2f21251447324a9ac8c24885cdfa723111bab8e3d4856ae17fb86e666e54a2999a90c8fad6d869066da37669f7eebd79bf4212d69a7b6db20fbf4f67424a23f8462daa90de39ce6e98a8090e690db6dfac6f470f48d49a6fac6b4c9f7f737fa66cbf7a7bea94ea8018b7cffd238bdbaa77d63b3a923dffe7d4adfd8dfdf8b7d537f4f672e1e42633b21cd21df37e696ea1bf3337dd3d9c6684045b6171ba75734b9b3f992eda90d91f09ece9836d93ebc65cd61156f497358c7ad53f76ee7fed100dbbbe77418363dbda5e9e57b5a9a57dc4aef746c6cf2e4a69544b179bf3dc776e9fd9634d7ad24bdfb9b128656a4e38e994ed9d7bfac6597b7349fef432b6ee5773a7ad8e4c9de73da8eb4924c2fd5d8d4b19976ea1efca96fb6dbbf6cb562b31e7c15c97c6b493b453b15be8e3c6ade3a1562333cf85ad21c963a36f7c3dab45ad12d69ee53bef72cce93af68abcc2ddf535a63bee47bfb1ceb95dfc1922c4d2f73ef915292d8a9faad53dce9ebb8e3c3281fddbd7b62ee775c49c71d177b9dea93a7ada4f99ec5d9582c168bb5b24fd11c76c62653199eafde2884340749634df8641a6ba26523d318eb8a1c521a2405004963ac1d649a69eedb110719635191cd2df7bd7acfa31687b6ca2473bd4966d3cbf4fdad6fee4feff50dcdf4a11d776cd807b2fb2dbb8755ec9ed33d168027770febd8837b874deedcc31e77f81865ee39bd9535df92e61e776c0fabd895dce9483b65a6e41ad2f16273897cdf95a697bb73a5c99d76aa7b8ee54a9abbd2dcb892663a5eac6373a7eae94c73b569a13892f4940b69dfd89b5ea6a7b5a479eb9b3e7d684b9abbac396c5bd6bcf54d3d7dd8a22debc31bd2de25bc82dc6edfafe38e16ebd8d807b23edcc61df575dcf0d6a97e78c53ad6d3d162daa97e4e8755ac65cd743c00cdb6a499a76bc541486b90e188ce98cfef9bad53f6f421a541d671473d1d79d44c3b659fd3b5a49d32bd6c7f83ecdb8764dfd04ed1dba7f44dadd9f4b24966fbb08a64dfd06c4fc7fa9ccee92e513ebcdcf77263948ffef6fe86756aae9876cadc323d1d7bd43736fbf539ddb50a21a43964df3c657bfb53dfd0dbbff44dbdfdd63875654ff64d75220e55647bda37349b29d99ece583ce499caf0d4ca23a43d90a45c9dc8c31d32258594865390385727d6a082dce5eac41a5cb966ca12d21a92de90da90f4867406496fc8833a021588010c5100be20144248847008215018841008210f425858839006e10c429f1004a10ac227a1094257e8442882b004610ac21584548421e0680062017601f4024803c3008a01c4023806018437007d00520182000c01c805908967858f0adfec93c2d784cf096013c02084507c2af87cbe157c2cf85af081e00bc127826f041f09be287c25f89cf85c9f09be137c28f0eee0e1011c42d8030201948227f39ce03d01fc01b805d0099e113c228042008de0a9c0f3f156e0b1c06b01c804f0095c0d3a207453745280577435e86cd0bd3a27ba13744f7843e846001201044357020e0b5c16c02c7c45e082382b7045e08cc0c538247049e0940042018c029804b008a0074025805370330097d0c1ba1e743be87070a37450743f9d0fba28b8262e10e40a01cc02bcc2f5c1fdc195e24e71a1b83db83f17073707dc15e017ee0dc21e7426d8b0b065e1936d419b16c0187804508aad0adf13dd0c36296c54d8661b136e145b1336d9e604b00a1009201028e364d04b0899844dae15174a57716b706de009b512be177c30f0b0f084d049f082e001816500add04800ad00abd041e968d0b10e065d0cbe2a7c4ce8237c557c4bf0b2e0a5a08de03de1a1003c41170114013802d009d049530136017b4013804f9a08e007c056c783ced543e842d089601bda96d042d894b055e155d1401e1242271d84b089d003e0191a08e014402a7065e0aed05370567055f0b8d05278537840e072d03fe07cb8156c1fd8aed03ed8acb05db145619b4347b14161b3e256e1c21a76757077e061a17be051e115e1fbf952d03cf85adf1350a8a10083402df40e4016d8443706af09ad036f091e13be297c50f878f029a173f021e14bc267c54745e3e01bc247044e071c0ab8145ca00b841b840f079e1d3c3a7875e882d03fdc8c13e2a86828dc103822b4ac9bd04ca87968568d5267505ff505f5897a826a82caaa2e30522403448608614045810680d0f1c3e5010692087f4228601ebe327c30cf045506de153507de152a0cbc13d4127c35f85edf0c92d4185c3adc38d4107c79d8805075e081815bc2c784838235822d821dc212244229262081081c114402ac09c29a69e54cf0b50da20488057e1c011224891f3fc26a912812e4c70f90d620442c0044a7881217f8a17344902442902822e4c78f964f0e48183922081231df1ba812251b08e2a38811214a94045140f9b9812a212204884e10247e04097201185f1ba8910b1411f2630349822881e487902359a748900c6c004811ff6a34c811458c14f901e48822460ea053440923471c91613e3608399237a044c8003690cb6f0d3e7c6a98f9d2404b1f1ae8196812471839924409d467069a44090c08b940112347fc10722407b1009095ca27442f60c44892233f8e084942499220453460e4c706820c81f18d812211a40806842829a2840e90238c2c11a20492203f749218391224098e2f0baa2488101d21498c24a1a304901f18f821e44806720489224092f068f185816a40c8919c24c89024461c4044f981810609a244102510b0002482600003401620e3a35125438e0892c4115fa04a748a04491224892242fe79a188900ba03e2ce8114294141192446789203f3640e4c811203f9204418288102556438e304264f5f26d8166e007101d204800d1096200d2a7050e08210244888e90224254be2be890238c10b1c08f203a4a1c11648920a5cf0a34891101882f9d135d3541085899f28434c662e5ca635b387b027b827aa4761b1040e0504a291040e078f5525a6b0ae8715eeddeba6bafd6ad76ab701da9d6fad54abbe39a5eae7ab77a5ded181db6b7ba59aea55bec361d281d3aba39ae7e96b3b66d37adfdc3c9b3b67b6890bb5eb576eb11c78d6a371ad9d168341add518f465c8ba4d1c85aafbb6d0e00340eee76d76b2d37dadadab6bdb54ccb54198eab5db9cbbdd45a6bb76749ddd65aae72b55e7b656470ba6d739ce538ceb6b5a4ee96d15dabdc701c77fbd64a7da0b7db52aeb97b6ddfb0613fce56aed6e6b896e96e1bdddd35ba39ee72cdc56c31fd7d6d378ee3b8ba719c6dcbd9b65cd7da83bd6dbb5adbd65a12a96f5fafabddae8de95b397bb76eceda2ad3b5860d0dd3775b2ec7b5edaedd9c9d619be3642e27c335dddadab6f6d496bb5cd7704d23234677c7b5b52a525b6b55dd5ca760d4deba6db7741baadb36d76d28aeb9b67d37db5d7793484db2b7db76db8a39aeb6e5ba6bedae5c7b5db9ae9cb5b739aeb3cd75dfe6b8dbd75e8ee3b817ddcdb968ae723d63ad4cc73567b96e198ee364ba36c7919ae3babb6bdb7e8d9beb92b32412a9bb56cbf5e538dbb6d6da6d9beb6bdb76731dd3cd75ddcdf5886bce76735c73cdd5cadd3e757375436ddce5aaed6abbf6edca35c775ed6e8eeb6ad7ca71b49ed64a6b6d416b0cc7d5aeabb552ce6bf159985abf17d4b67177db38954b6b77d7ae956e1c6ddb711c47229148a4900721cc9e306084480b0946d8d2e2421a7204100b10216224490c17204192b8a40419f243678920455aa4b4947494085922c80b29034652422e1024c9116c42a52809828122409238028745821c3902e4a5e5480680e828099201213ad739028892224092e8fcd01192010b28a144250651f223034690280224096ed151f2634812231ad0095264e6a4840503a915248a00f91124099023193072430548102247fc08820120498ce828f94104c8114688c41091104204c8921f4a52688d0c08d129a244126cba808e1230a6258224f143a7889024477e1ca14448065e4a468c24f98144902441904862e4c78d0f3d0411924427c68d1b98258c6840a7c58d0f3d9470f450e3470f4186002162811f1828222409254092789781163648920bfc48624407c81146881001f242d249024447098c1e64c8221810a2a4fc946c20c8901f4708216201258ea492287131422288122541921cc98091237e2409b2c4c8114192d41872e3430f478e08a204474ce2081d2016f89184122145845c2025230aa203244990224130f00300357cf0a107245c8c1bb88090244196fc00a204892382fc30a2736403498e28452241960421f263092019f88181224230800123447ee82c11246649912036a4357e143122444992204b7ee80451f2638920481411f2a3881020491c71810b18f9a1b344902f2912c4baa0bd81244632102403dc922241ec0cd1ac29cfdde1e9b69d7a792ec7c3537776ba1d1e9e8d67dbe1e1e1767ae7eeecf08046509ecf08bab3b3b34377280fcf8e3582f270b78da07467a7f2ecec582376767676783623e80e4f1bb1b3538de0a93bd5084a8dd8a93b3c3cd6889dbab3c3638de0a9d408bab3d319b15379aa113c95a7f254bb19417978787878ae1194a71a41db089ecac3c3638d08809d42a594d60c280142033434d78c18ad8675a2a9d178b9e01dd3aa8475c8accace9899f08e6985c23a6256656b5ab00e20abb235ae13d601b32a4b030bb18e1f1a308a849f1f1d2c24fc04657b53072bdbff40b3382bf8bcfd0f41164765c53b95421ab11b2f951e66356aa7218b93724ab179a168cc6ac07a60dd80a5bc844f1b178dd88d570fb35acde28c5260d9d2a0d5888d6ec458a10d8d590d580fac1b30218b238636311ab5b0c68cc58656c3e56233b361d1b275b1a9d5f0f06933b361d5a0d9d46abc6c62346a356636b41a2e1b180d5a8d1b3548375e5f8d1a37b371d188d58085376fc0be1e58dcebce6e4cc44ab979236603a341e36acc4e376bb85a6eda906c621f8d9acacacacd1ab453e872b3c6ab05976edad4644c9bd9e8050e572cdbdacbc5d9cd6b8595ed4f38b09006f39598cbc57be95e2d5bd44daf6c3f6b7117d80dab545ee62f7168c771b1c4625e7ad5645cfc05ce6ce62e7058329fb981e1cbf8e0f2e1053e715ce013873583cf1b980c3e7dc0d8075a894f1cdaf189e33a6f4e1f62b00f1e3e716a38287cdecc7c68816f58385838b0f386e6030cbe71e170e1c46e6a3ebce09b970dcbe5e68d99ab07dab5f11285221bb4132da58757edb260366aa49b376a5f0f3091a66283b5622326ba798345f281258a3515bc635ab9783dc456f08e6975225d29a7ab8b4d1bab1dd36a74f3866b64651f66aed84dede6c6e5430c070b7643bb99ddb07c80d55e2a37715c37311f6a3ebc566ee2d05670662a3803e1dcc07ca0993eb8cc1f60d9fe00647146f86c81591c115fd42bdb1cb4174703c0cce2b8dc9b5cd9de6596ad4b6596ed69d97e84cf1f5e3968395e38682f99c539e1d1c51f58d972ff00c0bae75cd9ded86c74133e7f70cd00e0c231a3fd10b3382978d4a2f2955ab68f65fb1456b61fe1800120d6e27254ade52e3960a7b7fcac65cbf2138e170060287ce670c1678e167c02e0844f1c2c1800278e9a55d9abe03347ecccc13a71c000103b7f600180c3670ed7c5278e180048daf80269dd6b7b9168e30c74753300b8482ed10c8c753f6c0060914e57e2cd1c31510e560880d8bd890336ba898344e28f7086d544233e893803e5808520263f9c6335bc635a75d8b3aa3e5d7138cbaccade04002ce3fc6355f674b599385ed9be0364cd7d9322e187226196a90ccfdd51f1545baf506bd976a7272d0e77fa93c5b9a7bfc5d94e1f72e06ff9adecca53e55e79b27cc7b4eabefd846201e23b2e3c37736ddbef4f281620fa16f3c67b3fa955bdee77f027140b20ff51da1dfdd6d941d3557e42b180d24d34f04e2ae9a00dada9e0b3899371e52c4d5a41ac54eea4ae4e28169072959fd4aa4c8f059f156655f62bd8495da9e033c7aaec53ec4df8ac34abb22f61277505e2d3c6aaec49f88855d97ff834023ba9ab8bcf3ab32afb11be55d96ff8ac31abb217612775e5e193b42afb11d79755d977f8a456652f622775c5e1b3085c5d5675679b8be3c8fbfa6ed6d836e34e69a72beea64d476bf77405deac34ee7405e21dd3eadea4b10fef9856dbe9aabb5959d97aa72bef6685e5aee44ad2aaea6f79b2aafaadbc55d55acb54662785a776370b47b4a67e4473d05795b07280a42f91d073805cd26524959595f0e424162ba1b4c6a43566bd799a9720eb9720690c49d842753469d158f59d6c3154478b66654d3dacee9dd455bb501dad0d4575b4c417aaa395024375b45e5a501dad9995c567f7960d91ea68d2aa596d77c2ad6e0ad5d1ea54a88ed66885ea68b1b0501dad9813d5d182b16a7c726fd9e0a88e264cba55cb66d57762571b1ea98e568ba88e1638a23a5a2592ea68b990a88e165ed9d397a88e568c95c5e77dcb464775b4ee4a476bfca88e960a4875b460569b8e968bd5864ffb968d4a75b4bca63a5aa4a53a5aa78dea687dd53a5aa9958ec6e7f61dd3aaeb9ae33a7cba97c3a4c567cbc6cafe62cfaaea5b3656a769b5e193898d12a57ec7b46ad95835be55d5d3ef707593dd4c63606851240ce5daa336912d1ded929a7972129b8ca4667b9346293f10e234f9de040afb581547b4bf35e78994c6f26c37725f37fae851eede792311d5e57d231136b47645e68eebf3443b0af18d4474b6ff4aba0a3d6fe451d79091d43ce4eedee8a31e2146471f61cc27d6b1477d81ff4602f064b14721ea2b23a9b40c3eec4a452273e745698d098a5f8f3e88cd9aed2a04c5afa42bafa42b8b2bb52273271f61287f25e99567856127d29187c566bd94c6f6d86e2ded14c7614b4722b6db3cc40ac1614a6b4cfb6aed905abfd95b6c6ea0ee34cfb55c1b8ef0b259e48af3763a56db61f895e0c3d2143fe47bf830a4e27df72d8764d984c6cc701cdfdd95a3371e4892241f5e912c9b9074ec775d6328e4479c1dde895d49e3904952f4a658888c00871cbefb6848f7f0661786e1e9b823acddc3511547e5f82e6d26c70a90e3e9480172fcf8d08aa312e7701347231791a9813cbef3a8a470c821588a238f11276911588ab81b7c4e83176bd67ef470047a1f896e1b23a95144259298dc0f6d097606bd5b6f2c91d4288d29a50141fa8ede2bbb7a5a49386ff8d4a99a772acfd81e1242089037d3181571c8f5e10802641b7235c21546982287a39dd176d3bee22f23b151b69b45debcedc3453c6c7a27c213452d5f5ce4ccdbebbddb723b1d89a05370650f43e176b259ef57048826b17c8bd029b8f2bdc981ec7d1817f163041a594882b744b65c49bf95f6748c800b561d6bc50b513031036b7b85c28219810d9e782571f1ea818ca573846691a1b068642109ac254034892dc1817c0fc503348b558759348b15c527fd4e1118c8400b4ddc81556fb179242f8004062fdc200f4d58ac152d8029f3f44ef358cb29c16eb791d4285bedbc7b6fefdd77f7725b5973c8957d7f70bf6ddcdd36bb7567e1883a84428cf0043582144273747dc3fd467370a7bf3447b57fe99487ea6e7367548769ac08b57a6f7375420d69c87514427ae06ff8ebfd7abf0fbd83defdf57ebfdf7bcfd14e796fef36d35811e2e09dab513e4c3be575e5a535f474dc684dcd74e65a1f14c15584581e351ec29d7b01cebdd6ad08accc9de61e0940b1c91980e6a0bf0fb9b24fe94804f77e570ee1de95c32677faf07ba525cd5e699adcbfd777e590af1b7d74ff0c00fec3a697bfd711c9124d3cd0042b27a157c283c4d4801df010252ba1b39f274090c32be1c92136bf7be157d20c96e612b9bb0f109b4b7cdf503ebad3d3777888772467366df6bee1ee3d0a01665ad26cc71d5dee6e723f97698c8a3a505a734b8fe7ab5b1eb04a58eb56eb264484032a60904f2f21a565a5945624c22de555f48d974d7a45debe9ddb9eb9e790f7383c3289bee1aea36fb6ccfd0135c8dc27d038db8ab34199a355640e4726c22b737fe99bce1cc77117fb6686c34368add3f0831d40a15123481a8312855c59f974c6acac5201643d14f416e7d9529acdca828245ae4d648acdca1a295eb2657a4a73a07a8079bb49b390b727b1c91b4632caf4268d924d7b2464b69876aa56169410890f195c90229b4ab43045a6ef8183492dd3da0328821ed033c8dc430a84a4b19f5ae67e1f76231161369570020a389b4af8600619acc12023a151a2e441944d9d3078e114836ceafcc4200c4336754210864c7fe004fc81931e88810752f0408adc0747222a2c73ffa0108a1225531e3406451694d47c291ed2dcc39a44c7cb486894bcbd1b85a03128b290b96f588953d639e5ceb1b7ac3a9841a625121b250a0f1afb6143de5ecbed5d72efd1877d7d78c53bf24052a394b7ec71c77d8eada549633860e57e3712d134c8dcb9b147bf62f3e24a6beafbf54bbc4c4f633f2fc874f461a344c9f43c5ce5b22005163926d70f01966f144378e51824b5bc0fe9c8a3b15973fba8dfb029451af228446f264fde6e4b948f1bc5907bb3e6c64b54ecb7e774784b24344a942844c4e4fa7a97a864d1622b6f14d9963a9d5be47e69862dd2d19643fadbbd5827ccb11fd0b24e678bcdfe929aed6d4cb6654cee92e65aea84999ee7d64e43d80fb7305649db6164fbfb5a528a87cc959bc8954d981c3993d1c923726513928ed5a447f50033c5484679099297acd3b96228dcef6916b24d0eaf1dce89b4a471c85cd9c4868911257878395adb5e4e84a446c9505a5f716f7a6b6fa2ee353716b92beb736c58cb7e2d6d0e775480a4cfe926740685922e2fe98c8124950224c5826291432bc2c8740d39bca21b72687ba3db56b91891a9814c71e75b5238648ac94ec1c8169fbaac79b3db0cc29ac3d10fb2de7e8312eb9fe8569e3a557f90f5f4670801723b25c31edced435b72f65cf77e77efd7dadb9de3acd7e1d31a0f0ff17ec33a5e2c768a86a11589b8580ce9d859ebf5bd1d25cabedebe4b947d97b5be8e44f4bbee7ad7e1329220be27b1e7ee95358efbc77de53dc785b6d4e1b23d579a7d6f09c06385b8b71c367932f7ae34ed8778ef1eda24e2bfeb88a21545d1dafbb047a579b7a5d9d9fbbdb75e8f42dc7bd83ec7769cd96dbf6112acde0b6c10b43ddc4e239ae9d8b492c8f3d4ba80107c38bade77b004cb1ef7f774e401fee634f87542d4efdebbd76efb42b0fc96d46cd625357f0f9bd6b6222436a384b0d9bb874f6be86bfef090ee391cd51cd27107ad24b253de6df2f71e7780d8e4c9e073ec579e86bc3cadb1c9f41789e7a3a3dbed470790fd8365cd5ea750dc65e4b02bcd908e1f064baf34795456465263de732c58d67f65d3cb6124355fccd3d52d0e210196b005265778c10c8a105b5131a4349c82c421cde78aa3bee2d0d1375dae7ffd4cbd91eb451ab30d2087d8c3c866ae0faf69932f0f01be7c7fb79b169b3bd9defc0a40c5902f86b2fdb4dc7ecb06d0c80212a2ace86d699ed99adc89f0b820773777f23da53f504ac3a4b11a9020ebd4dc7118ca49bfc313456db5619679e68b4d7bf3cbfd1c6b4b1811a05370ade861641bdb5508432af258171ade87b714c23b4a882ed7d7be77fa008c2488dcbdff1d55ffbd5f7174aa6d3df7aed8a653fd91473d2a45ebbff208cd22db5209305b9c2409771db0662edfbc659b3b875c67ef855d9afdfbae4435f6c161cf49deb612c928d7f7764f471f5cee0d9b16a37a58b3cb8d9174b99ec7abdb08c2264c6a9455f8264c38d60abc93afa0e85e1fd616c3b0a4abb008ef75886a84b7dd7b9745badc0fbdb203b94bb3e6ed67eed2ecbc3191bb34ade8953b797bb8895ec993bb346f6f5ec981dcdbc68324ebc86334bae2c32bda5108d251de49efdb71887bef25c98f4427452292347a28be7b773b3c44f4ee343791c7db7b7f2f3662d63c7eec4478c8129bc5f71a72873bd1bb7be38e0e27b9d7d9f2c566af210f59627337a4fb3dcda32851f2782b5e1445d8e4c9e3e9e8a3c3a81eb6cb1d46d265f1179bf744badc8d3dba27b99191d4bc04494c16b178cf49e6c61d1dc62253b16f8f3c6a7ec0b8437cd862edee6e7bb97b39911b7778dedd6c57ca7176bb1c6d5ad273232da253d65a3bf22091ecc8833c4a7432896f238f3e2a67e4f11dc5fd9b1985281de5bdf43e871f82230feea87beedfc8633beae2ed357ff7bc37bd47a9b7953573df4695187387c1710711e4cea5016bb503937e7bf790961c2d2fa5a5cde126d2b27378455ad61cd24a3b11922e8bbe816c6e27d2f950760eabb895366f37879bb8955ce6c4ada33809994b7a70e44621ba2cc2f5456bec7800ea21e1311ef57dbc3d01787277f0bbf89ac191c73d8afbfdf6b0acab90542289c94bb66c76279d2c977cd91c9d84756c5e4111f2129b47a7a38f9a32e41146124494dce5b048a93c42bb2b31e6ee61275e67cb621635f4c4213a458de8147df77013ed28043daa088cc4468992fb0aefa821bc28e4eddbc8831e65441679c36506ba6c76d9a4ef7b6591aeec40de4ab3667ae6ad34bb4b26f2569ab6cb9dbc95e62676c993b7d2bc993ebc629b5ca60f39b14b0ee4ad34bb4c5f45ae1d7737db9de848974d245dee4e71f76ddc8100b2c34974c67cbfbdacab3b26f1519385ed3e62a244b95b390449104359c7d29809f09097d84c7dd8889269f724281f62a6d7f932ad02e52326f775b6dc340d999ee69ca65df7aebb3427d1297a11cee9147d575f4b47895e3a79918778d4e8222e422a8daf3b44af638f4a86103f6293bc48be45d29b7c93ace86259f3589a2469c9db718768243ea74937323da923d38fb08d08e310cb54a7e8479a4c1f765d93ba02c5a3bc8befdf727b5756d4f70e17a1598065b3566279846691a407cd22f77778a75b157bdca16488ee179bfdee435025627287a18487d2fa2ac43b348bd50eecebe8838a61089a6dd822586eac151dbd5b9a7dd4109409b92f4a431ecd728f44d02cb277b0a42b3a7edc737a47920f9ff0bb92c364a7e86fb9d1db92d6d399daed34cf6765bc30823464ebcaf634d841b64e64eee1c843d2a326289b47727d8fb358d92459acbcdd2b93e88c79c32611ebcaa61231d9bb9901f35e8998bcddbee224255043b647f9e835e47a9d2d574c738f4458571e52df9d8a6c9dc83c79063bc866ab210fa92311d6896cdf231115db77a7a30f6f0e54e45aa4d590ebbbf248ab2157efde4d2f0e51640f1bf1e210859221ea396c76afd8e4c926a535268dc5800599bb89c446c94b363564ee43d0dc61287ddb80c63c9706acd54884752273183504cddbb79b46ac2b6fcf8075e50d2b31e67a5bd2ccc355ab0312ec20c7641a238108f208eeb03da4b63439d0854b83212e0d585d9a9706acdcb7e5c9812eb056363713dd7b88be31fb50ec57f4d6deb3aaedab0f04b199264fee7cb189f27e6fe67bee5d9a503adcc4a5016b655f7fc7083c0c3780831758400536ac4e328a130ca1072380328795c527141e4642009aef154057f6f62157d26ccbd31e8a2275e4c19351dc5104a0d93b0f9a3dcc93397c84e7a4c1136960ada0e8f3e4b08af596a87b9a87dcdb92092878d07ccf44778bf28ebaf8c869e6c91e4631c0be7b02ec3b0c45918b87f479729f088b051a9e60e53e599d200229b2086a905d641a0bc11db68b9dbaaf23119d10b0f0c3cab653f74490dcebbb243b754fc7067451a2448912250fabd34689720f40ee603bcdfdd7ae3f3c085b52643037cdd12f5b688dbdf7eb7de342b388fcbd4bb37e48dfdb3e9ce40b1f7ee2c54f142fd640f0f56115c5b27b0d0f7e18498d92bf876077b0fbcaafe6ee8dcb7e8ecde95adef7ef9bc39e55d99356651f5a81a4b127b5fc812056dc6f493b554722c0dc78c88669a7fa446bec0b407eb9e653e6762a8fb55b14e1f6d0cbdd8eee39bdf5cd776f8a99d26f7dd3a81e1b01b2789b513d6ca6f9be5a5abeef7c6fd60c82d926de5108efd5059c587d5ce0f39526c781dcfd8e3ec025e4219b770651b28751e0bd0ff1b049e4c5159e0898bd13d171249ba21301b3785acbe33b8f37b7fc9d8e04e03942e628cd97c7e7f41d890045df461f57bca8bcb4e6fb1d7b741eb179e6eeb7dcb2dd2e3699e0c4e7748bd876be216e5af37106f8cc2288e87cb1c9e3618e0758d6eccadd6d0858dff79abf4055a8da1695355015aab63544cbfaa706e1a8ad5407b5cf1255565b75a8fed020af87ba5581a8d0a985daa7cae850aa83faa706d5168e96d1d5d74055a8fa5c19403e3262b6455fc4066485accf6d712d3b647feed026bb3e1b9015b23eb7c5b56a16e80add9fadb505d921fb738736d9f511ba41176813b2b2cde7cab6a1edc7c7065dd936b4fdf8d8a01b748136212bdb7c2cd015ba3f5b6b0bb2aaa62bb7b501e5b642b947eb939b6b91ae4f4996db0ee5b63fdcd0fd316d419bbd42b92fd0b6f9c86e1089ae6c6e5eba52dddc86c4ed67a45645e3a60dc23284389fcca5b814ee42b943a04fa813fa8238ae14fe7c435f1894fb42b90fe213140a818438a12f4896c1d6e70d71b2dc07cafd7d5c902764554d4fbf9faf05ca5838a0b095f2f980413eb9493eb9fff9804121f703fa7c3f5f0b947140610b6c7dde1007025955b7106a114a0981c04fc8f4057d9e504b504af8030e993e993704027132b06502fa5ab2dc618b03fac9dde29f0fde318141b949a08c985535f793fb9ec5d931adc294a14ec60d7d29415e10fd5fba96275b49514919ea645c4a901764559d8f07a41234ea84547c5ef0d905752d4f48e5872ca14edecfca4a6b4545d6fd74432295168cca90d742793ea74acbaa7ac86b793e9db7d2529175dd50e701a974422a3e3041b94f439d8c1bf25e7e4e29a8a0dc5d4bf6122452f14109753e2b1ed04b4b24eb7ebc9fdcca7d52191aa130f55a2c1d506e4ce3f2842c8e09f765bc2c4e49868fc521614c922716a021920a50ee1559eebe0c208b238a27a117961fa195938a1089cf130b10cb900a900c66713e6c0acacde2b3e2f39d7e72af04e53e09fd58550b9d8054847e2c4e88512b2b3fa6a0dc0f4f3e2b2b402296168b0c756aadac00b1b45864a7d6ca496655cd1274f25911b2aa0e62f159f139fdac04c988599c1dd34a05058ab2d167140a7fc2211b6cd2a016e08b18c432fe8c432570483c099fa26cf411b2aafe0987686093d65a44a11148d46a11ca449fbfe0530c1a7f4670680636a9500a16874699c8871406893f2b63ab650c12fdac844222d0d81a432111481c1a65229f3048fc114720512b94892a6c521a13231eacb8d8b4f1bc0d9b38bace6293c6380c72afc12695c1e0f3ac31ceba8a51a371599cba8a81cdcaaad8ac2d1a53868f0cb094d192e1ea4a19ac1843658c9a55d52e54218a2f3ca126c58fcc47286c350a627478031d9ce0030e05fd8c433e360e4251a6a0431a80644240a34ce423fed0d450bbc20b5fa8c22a0c1287fe861744e143822c6031b6543e5510410b7ad6205bd11507721f839e608427c4a1891088e06745579e7753f4238241c1e209ad15a4807411080f573481421ab068c18aaebab03b386af9e43e09348a80728f8272974a1ff9907e4452268a64a3d10f09880c12058d8646402419292412225b231929881c120d913e231929881c120d913e2320928c14120991add10f09880c12058d86acaa7d48a44c241b098d5a241f124804340a0a4b2aa4210f881b5a9199548448409e10d70999567c5282bc1f2e88c567e52768853bf9e43ec972d31520d2595ab959642ba7d64903f49d21f89a73fc28039b0f2b364f600d36498b81cc1835d5ac540579a58a56aa844a55cdaaacf841118a20852400b5808284a8ec0932bce1063dc081cc4716341aaa2d8032843ae0c00d3f413f24a1d6186254ac200a51986225121a01850004557099204606943992652e84800624d0029310ace86ac4a420276aa03dd1023b0cade8ca238772fbd092cd810c3dd0011b98903e58b8420da04cc182d78aae42135049a8e493d2227f4ca5a1d24f8a0fa9650a32b54a293f24219390c9a724230d99864ca5a09452cb34642a05a5945a2621934f4996421a3205995aa5941f9290a93454fa49f121b54c4025a1924f4a8bfc110da50009f990add147561a2afd744026a1d28f1814b6729b7c4ab29386728b2940b94d425d0a8b691a328d2696d395673a5724b31474f630e1de536ae566c2d934acb833910a4ac12713375364f5315ea67f38c64b8cf118241997f195fe616a5534a749519dae7abea7e09aab4a0e9015ab1e834632e11e26e17b764c2bd34def29954a3de29984ef39490fa2869910c59eef4cc27abaea31e11832ab6a26be4f094f5e823463c86204599c12eec7a0591c523f463fc6cce27c781443b6635ab9fc7c2d4132540b15d40294bbe402d42284126af9691982817291b5f8b8b45e5043a81f171f17a1918b8f8b100aa8a515835f5a2d3e2e2d9720d4500aa37e502d3f2d43281f1719aa850a6a0172016a1172f9711942c9acaa835a5e5a825c568672a364b95b642d422717a095162ac804c4d23294db4586f2c98d126af969b904e546fde4460d995a5e5c7c5af0c94508455a553d0a2877ca4b2b376e69e57e8c97c52991c81a6c7ae289069ba40c6c9e64c4723f0636df5795327c684dff244dd52cf74d152bf74d193e41b398a0fb5c28c6a785ac1623f49f1640313f2d826282ee73a1189f1632a198a1161f8a016a211423f49f1640313f2d82682d7c0e54b6625a0cbd7559e9d3a215d37aebb2d2a7452ba6d5c2e740652ba6c550cc508b0fc500b5007d588272df6745e8938541e3cf4968e527f7177e8845c8035a8919cadde227770894bb95bbc550ee334696bb858d163c80022c4c01076a4869f95bb94f5a45158290022826600206d30a66e2b2133e718840065568a2c749084a2ca3d2e71c79e10b4c78028bda07563167e2c58c6989988955ea3ba6d5ca4f6e172da0dc175d003d080f54ac764c2b266686b0acfcc9cde2c267e6e765240acafd12680628f7cb8c506e99a1dcf874e152ca546664642bf7475828b74c50ee54506e18333eb96584729741782885cf992018f89cf179814f1917f82c67301e3a4bd939233b675a2796c13241270e3a4ba019a0198c656686b0acfc71e153e2991f173f2e5a402e8e1fa4043670375bb45c00fdb4801ef4e3c26748f603243334130434239b69c90409c9e8197a98045da10b4558d15508de9c09a2031c6ec0fa000b072bba4a196fcef8d8290091e1052c3a1061e5dd9411923949c31c40a086282bba8ac13b263c640521c880056368030dcaa0dc57b52ccec9b23861f89fdcb2dc3f1fcc50ee179fdcaff0279fdc3240b953607c720bfde42ee113ffc8c860867c7c5ab9657e605a6150ee03e53ee113fbc800c1c0bcfca85c166728b78ccfcb50ee128cec45c622945ba62594fb2ca5904ceb4508a6057e092a87647c5e8660642f322cf303d382097a015f6eb862075830c2d08fece7c7850e51a84216baf005211f201f981610adb1810e3db2113409c2ad1f199f97a117264c41c5141f18a2028cac1caa49688307923043030b567455c2678a76b314da584e6034f0401c4670529916499b821dcca0853944614557e2f6119b2f4254094298831d6a297843174e109b2f41b9db03402b9841140fc8614557213e53413ba615387a1de743fa17822f865efc90565e22a15e5e04c1e013c60b3e610c5955bbe094ccaafa2df8741164552d63c1270c9f157ca654308c147ca67eacaa854af87c0144c2278c20abea9318464bc4270cd987cf944f884f17203e5f0c59557f845ffc58557fc4e70b21abea7bf884016455fd0e9fa99655f5397cbef0b1aabe08bf68c100e57ee193fb85506ea0dca956ee17addc3fb95f0ce596e54ef9e41eca0d94bb951b4650eed44f6ea1dce3cd17b2dc307c72c310ca9d02caed2228f7286219402f8272cb80fde4feb08c1f1843b965bc52b2dc327c5cc872d79b327c723f156453348b4357179bdfb0795a596c92d94c05651a9a0ccf66ab0bbe1092dce96db7db71179dfee2aa89131c2bef1f188a63ca554eef59d18824994a47ad5a354565e54d9c9c562c6fe2845cb9bc89136fd5f2531327362b14e652ab4b6bd43771f2d5466bd453ea433dbd4ba9426bd4b79429b446fda934d11af52ce50aad51bf52b2d01af52ae589d6a84f295b688d7a53e9d11af5a5b2a335ea49e5476bd49325486bd48fca90d6a8179522ad513f962eb446bd58a2688dfab07ca135eac11286d6a8ffca16b446bd57c6d01af55d29a235eab972a435ea6f39a235eab792a435ea6d49a235eabb2cd11af53b2ed5ce423a635224cc720e699e66d01407c824346e73dad375df31adecbd3fbb06c19f57f41ad2996cef21893013e0f719a233d9384022a939a7456bece9aa47f46126484c88ea97204d1a0bea700f93ee3ddfbedd5edc73efd9b2b1e2f0b9635a75ac61976c11ee11894461cf6a6d24ea58c3ea8c6ca9a71687847b4867d2bd877491966db36a88cf9e9db56655b67e06ee01cfa4c34c30a9515650d4385df55cfcd9627acbc6ca4faf044f57c1a7f84ee51f3e45277daf4962f31affcaa695cdb2aa5775d994fd2a5fd9b22cab1a5152af6b56d5b576b5ab766511654e4b196b589dd15aacd62aadb2de33d6abba6c9ad6ae0aa333da35d257b1f97e5dd10c6c9e6a8cc33ba61a6c92b4cecb39419695ed6b941c206b60ddf6b38d7776591b0cb456c66dbf3457b6df629fb5179f77765ed6b9c12ccdba621cde6ad9de9faf6c2f9a654bfac9caf6b06cef756d315bb32f208bd3a97c3f5b7e3a7997a3deb2b1ea54b0ca4fefa697cef2bf656335e233c4e74af795871f9f82cf113e457c6e173f7aca397c5e7c8a48072ffa3d777b9b920364cdb9f2d6cafb2a3752b9b14a0b2b39d7cb1b638965fb9572ab956ad95ea5dc5e5d69679e6996ed534a8e55b2b2fda8bc30970bcbf662b9d1485ab6ffcacd55dad8e6caf6a7d2c62a0f9cd4207682a117d0662cd80b0c3ed882144dac0006b6468bcd6076408319c600071f1aebd65e17b6d16ccc0729be90051551bc604557dbcdcdc59d610e5324a10e6980b2a22b91e826e76ac2109430051629f8c2105674452231f1dd18854214ac2db8628085d78aae407cb66cac489809ae268733b4000e7680026545571d66e2da997592051c664340026c45571b3e459809d28e6925da5ed9fe589cf33ba6d506fee0763a81248987d98a096a83a8ad4c8f46c901b2a6a6445233e334cfc04a3ac7d69435f712640c166e5bcb6844cbb616eb3c9af7da3eceb2ed58dd2cc5ab79af8ff0c9d16a318fe6dac08bb16c0fbab27d47cb76fb581e6cc427d7b1665ecd1b71ddababb97c5eac8365fb13377aacf07b79b30ec6bd4eef7b7933abb25cf7ea6a9fcbe3407c762eabb2b48fe56d5cad8b81aed1a3913492d5cdba17e8d5c6d9e822699b07eb3e1617eb5e635723bdd8f67130950e167aac933723bf17f78a05e5d02cce196471c4109c7d3011640d8921165bc4574b180343d0f5c5441838fb60a28b55134de04b8485337196ed6bd98a610c045d5f4cc8e29870cbc60af5d140d88a185b0959210d8543d7570363614d9c852eabb25f0d0c6be2eca3813031168634f025c2c26f067e3090d5e25281892eb42f06ba545e626c06d646df0c7c8930310c591f0d64f9e9261833a142717633aca9c0385da5e09ba16b84596cbc7a7085afd12cdbd3b2f57aa8f5f06a11c31b341bb4991e60228dc506ccbb51b351f38125d66cb0666eb06cc0dc70f5101b5934366cb86eb87a888d2c1b34d886cb079658b371836523d68348b371a366a3d643ad079175c306cdc6ab0757f89af540b32a0be324828db47136628d66a7914b141b6b23da181b8d44a3687c91ac114ce412d144afd145ba44b5514cf41a5da44b541bc5c617c91ac1442e116d34128d30d1c8251a6b23da1813c146da38628d665f6d14c146acd16c9c8d35516ce41ad1c69888251abd46b5112672894630923566d12b8bf2289649d7e86a96300c6f7a956625d689a491606118bab22dc54835133923bd50f834956625920633956024da0c1923b97e7c9a5c31123923bd4ab5d28b34439130128ba5442b9162e48b2cd14aa418f9224ba5975559124962995825188946c6482e92667a9566251609467a913393ab1423d54834928b8c99582558e9459a915824ac54cbb0122d03955c39468a651959235f1409acdccaac94590acb045379a9d4f24b0596424b71adb04cb194590acb045379a9d4b2cf8a4b25965233cd525e2ab0145a8a6b85658a659789b6f25299a5c054582931536d05a6e252a1a5c44cb515988a4b8566a2adbc5466293015d68a4b25965233cd525e26984a4de595324b61a5b84cb115960a2c8596524b7999662b2e9598ca4c85950233d1565e39b415588e900a2da7a6e2ca194a89e504996a348b6cd2182c28dbe700e5c058682cae95d809d6c2ca999d622c3596d7caacc5c5426371adc44eb016568eace5759a9d582b3416d829c6526379adcc5a5c39b1955a0bec4463899d5c2c3316564becf43ad558662cac96d8e975aaadd45a60271a4bece46a799d6627d60a8d05b6126b619d602c341617cb6b65d6e23ac5586a27160b6c85d6f23acd4eb4938b25b6526b81e5b85a62393ea75aceebf4caf96199e5b458583d6433085aac95ed83100a82f6e242c55c6a2d3397570eeb053543b15a5c602f2e54cca5d63273790531f40243d150ae1697d80b6a8662b5b8c082a8bdc45035d4cb85e5327b99bdb0503017970bed65f6c242c15c5c2eb49718aa867ab9b05c5e6028544bcde5c5ecc5d5123bb9d4c2970b0c456b799d6621cbc5658ab5b4d44e3014cd056542bd5e5c662717560e5f62b1190e42f6f212c40c054b9dae4a3888205af67010402eae205cd9de0c0228db07e163715c16c7f35ab060602c2f34182d6631af20601687966d0b174c4c2606f6522bf1d98205037ba1cd625e3f16a78c89b1b4a8b57879302c9859f916f86c416b011383bdd48278599c12c6058c2b66c62a61682d6030303598570cad452cc605538379c5d05ac4625c30ae98590c0ba6052cd6a2d6e205c38289b9f9427311f39a69319361c1606230375f6a2e6260332d68322e9916af12667618968b98d84c8bdae9aac5cd185696395de19b2d60306ec2d05c3133173800b51678c7b48ab919439bc10118c23037635c323808168c16b1205aa59b30425665615e29d90c404c28db074066714a2d6e1f8098c5f14a5ee97aac14532b95340cb30f00cde2c4781e8cb21653be3ec3b1b32e83cfd2f5584c8d86615665832c0e8c2783679855c254775de630f059d6ca59ecac99c561c12dfec232d8c5f232d6a2641d866b31ca197e95acc370ad9ce1d75f98865f2b635665f10cb3cabbfee2664c0d5696aec73e3babc4b1b256becad3ee2af10cb3b0ab8cbddc7ccdfbabc4b41207e0c54d5c0b007e0500f652ce020094c265007c0e03b309442d003e432cb59919930c4b66f6e2c2e562160097c57911ba785dc635e3f25cd0646833f89c99c9b064662e5c2e660168591c940b99d70c6d46a636f372f19271cdb8a0c9d002c062999181b980b99881cdd458666232b1172c172c17b199984cec05cb05cb456c4606e6620636537321f39aa1c9d466646633172ed3cc0cc542b9645cd0bc97c9659aa1cdbc5c645cd4645e9e0b9869a696513330960c0c88d9f18e6955de7cc10222c8aa2ccb4d17312068375db0501808a19b3331206456656562379b40bcb2bd09842cdb03f163714ef804e26571764cabf0b36c63b4d38b650f44cce294380c3f93a2952996cb7b0183514bcd6230682f60b08000b2382ca99a4bca050316c278bd88cde0339562c170bd80c1a80101b3382df8acd4cb0423d632a3a5602a18339617ae172998ca0563f6c2f5a2c64ac188bd98bda0a5522e18305e2fc2540c06ad741306cbe5859aa158bf090386abe505cc85e6e242c160bc5ec45a5235969ba9970b8c18ea05edc5cc7453c56299c140f8a460c740b860cc648068d53c0c04eb856bc8351bcaf63a822ccee96266714c30a6d7b255bd68bc9aab667ac1ca560593e12a69342cd38f4f95ea45f3aad1b8844cae6c55314fc6cb24631683f6bfc0670c154c868b46c3d241b3387f65ab9a9532608f11a3e60296ad8a96ed65c45cc498c988a1a2c988c598c988f152cd64c062c462d462b85431192f19b318a89b34afbb586a2555cd7b792e130deb34165609567a7934938cd95d2ca7abf2a60c98cccd18b5d8ebaad9b18e5669ca88b1601d2e196cca6095b00e9f99999b31663a5e566561cc18301dac107fc7b462655bf3a289c17848aba160d9d2cc68b05247cd70cd78b1d0b2a5e19a01539da526369b8179f19757b69f11a3c5f80c4dad86058367c4d4d45ad4b8641c86068c06e373c6ecaca99d35ae93860c4c033b69bcc0e78c580d8da66655f631700d8b86866b06ac46856b66670d8c66665596066b460acf78cd60d5bc68623360e0193515ad4463bd6862b5192fd40c570d8c6646833503366ba98905e115648b2077996eb95bae4ed156dc7d1def5b00622db72af362b158dfdb9147e7eee10e18a9fed49ffa538a95a52abaf321e8e6528cd678a1c3a31ce4be1d804892b65696880e2d4196d5074aadae6d1befefc8a3b37d288458a178ef4a28a37f2514b084d2fa6a74d0c77eb0fac3e8a7d2e8b7499a5e67f38325411a61555f202be98ac2e8a7fe504202a5d1c722f741d2b5614a739494406bfa1d36fb8e42dc6cb1f5c2d60218c04bee6ecea44637c52cba999229fd46738039ae0b9a032cb7ec95dfa8fc6056f501e5ce1c07525bed1685af25bd1dc8e5466bbe6fe38ef021de3ed807b3de069636df2b8265e70f7cfd56529afa700909b4a66fcb52122a8d3e5776255aee8f64b92f2acd729f1b7b6c19e446216a2ec57a00963577638fed8a06b043a47db37561871022b5385ea6f7ca0758559f8e508ab0aabec56296fb74e42e84487f6fd2d8dc006f5617647ab3becc5a834cffc170a4b472df7cc9749c1187acaa4371a84fa52a1a8774595563f20a9c1da31036932f9b2d17c87a93740911f21877f0681e438875243293bb0f31eee80ede99cc4d60867ab5768bded6956e7726db8d74f98c7e60b93f8aa0714498550d7d37c727728737bdf12659aaa2535b6065d324cbdd07a9c8fdaeb2b2a98a5c0afac97d5b5e91fb630966714a312f7fb83fc4b8e396a290fb560ba51eb607c0231ce22697e9c5adfe604bdb05e87188ce76dc51b10d22eb76d2b8b7638fcedd168b821c40a7fadb9843bb522be21e0e21d2bea994a39496208e0f3dc61e16ebb83d461c38723f248078438227c0b8e37e996e67ee4e53dbe9900b9638c61d1c7743801b9600a38d4d6ecfc7b8230b5d01c61ddc43ae24eb9b926cbc29e67b93cce2ef2f36899c3278ee21589664659b8004c1e7f47d78dfbd7e2cc3f1f72111e20d794fc4b883c829d71331eea8b854859944b6afa579226b796f4b223bc052ec860c1fd671c7783b1271ef691e9f33ee18b10fe41d6f00eec52fdda953fd536eb10cc30760dc11863ae80c1d5fad40d29cd3a52afaa6c8a914eb1beefd922ccc61b74c478bc36228de717878e7b48202e5e32b72cab4535bbf0063aab9ec95a52a5ad537c02844670e97629dea5b2c90b5cbab23c701520e30925d6e40fc408448c4e8d90c2ec9b6a9eabe88b18797bbce5ee96128ecedbb211d674f33f7206ccd408c05e0c9f608187b587c3102466a0512146b5973029ac8dc3993034d53f709187b6cb97ba880cf0345dc7b87870bea05a645cc4b2c33e3e2c589c5654525c554229123d12886e0e7752e3044dc6f576b2ea6a5b9e5ea22d314d2cec6e3ed6c3c77a7f2705d535185eed5a7e30e2c768a8959e6be95669582ecd2dbc853de1a96b7770fb792f47e406e6657e122733bc8decdae62ab75cabefa60ab6dd9dc6a0dcb1ec9751cd7b086752fcb838d482a7b5b09e5be4b1d9b776cb9bf75d72cd01c74bbd9526fc2a04ef7e64a0aa9d2304b23ee6629d3d331f74d30d330f74d7733cc74fb61ab34fa94d6f44d9be96dd9d1547f2b65d054bf2b694d99a24c53a64aeecba03794a6cc974c69ea62b325f79b2773ddcd9b3bae72254f922d371e62a386caf23a6553a2675564df74d85e74931cfd16e77efba814956349ad4a3cb5382793482a77e71e7625e9c1c89a45aa0a7fb23838accafec3e6e93b78022fe2d05c228706e87288717807b1e979ffb0497adf70649b1f406bec6b0fc87a930625a9f64552d923ef653a6e1b86724f4728adaf2ede49ada040f9e822a95c5996a7db7e50edad44fcdefe6eb53221c9125ba76c63b366dbbdd21c3a3577df1e76a5d72928481e1bade1ce7994c3dffae6e2ba71b7f73aac533387513e7a49cd970ca2e161eb1b948fbef721dd8780e76ea6f4f8b0d91dbcc5211dc1dfd2dc86d04e5d1ffdef346beeb6aff4f056f2644e4ca94bb0a53ded8f9b78436edbededb8c3621fc85ad6d7f1e2ed8a75dcd1b5366149e71f7b9dcedbfbb4e974ae17a21ec996eb37fbad5e0126532b5ef0846747113656456f5594b42a4b6dfae64f57248949cfc7e7e4d3a3c796b76f4d9c74b7a30f9b8b38bdc3ddcb3dcbf24ea7f63c92349fcd063222e52db517995ae102226432532b5ca0032c669994690c8b23e494f3e40b802d9bc67147ca51a5e965d4574a7389bc72b3b4e7ca213c684e79caefe8c3e6160fa9c539a1f85fc2264f2e5d9c6401e7f695e7d88dae503e54ce7296ab8474e4b0b944e67e4b2848384903fae417e09198090f375ef92d7bb87cbb0bca87e9db37bcc466d4554ec71d281f2e67390b5e62f39012a7b2cb735a1c77c4bc832cce09c502fa5d0335cde278b87bf73d6c8455d9373e3b5c8455d99f6a24adceacaa2bfb5bb980ee8d4ff0ddc3f2e45985af230a01fdee11e8778f40656de5e9e4abb235de7b13521c7d6c79c3e64ede1e869e477a9ec7c48ee8fd265e87cfd1bb777bdf11df39cdc4cee88d59a3264ec677471531be05f33e5d79e4f81e8b18fd8e3eb67cb1697acae91801f0c725cfca8e44dcbc6153e529987b8e8d297b70b9c55bca6fd3b1b9051e627acacd5a6b7d25ba58321939190f1e66c41b2897585469a6f2101d9b537e711d7d58d3dbc7c7c7c7c90b1e725969d7c5dbe6a4fb492795379649a7e38e96bfd5fdb72ba168c14882c824145ec26512090f69398de59c76c1a6b7826925fcd9d6caed2dcbe2f4576e9e566e92b93d6fd6b4f074b6ba93b0b9bd542a4d2f33713a5d9d8e3b48cfe9cde238e9be7d2b756c2ee1255c6e39a94412446ec1504eef4a2641ac4e6fda68009bb76f7514c29eca0d740d546bb51a8be9669db9cc9a4de7ca21a6a7e0255ca6a30f53b984cb1bae338b53c2a6e791b0499217dbb7e79164369b76b2374fa108148bc99a8c2df1216ed96c0cc78fb8256228900491b787d48a174421b7646ac50b60396cb181c89340b158939128f34e92e4882449912443b2f555f851c964e4e47bcbc48b9809133be0bd8feee43bcfaa6716e774f21579ef169fddc9b31aefe4abf03b9dd34cec74f730abfbe823ccc40e78f2a20590237c761f9d2ccb537c78af64a2ef3decf1014d440f1b4092255d8d4aba0a4565eb2bef63c964e4e47b78b174f255f7bae12150bcd3580ecb2e998ce85844875b5f81d8c9879904b1f2f006fa0d647178563159ee990f1acb5b0bd57a286f751b0265032dcb43cc7b281be85e44f7ad3497b0aa6d08940d54572cd391474ebed8a4312662b9c22c4edfd2d5c9247956d5c72479aaab01fd7abbed348fdda93cdd0ec8b3753248b0dd6eb721cd412bad56749fd33420bfd3bcdd6eb77613a2e6bb1d7bb4866edf1242fa0092c6ae101ad98094552634514513b9b7d37b8b69196281dcbe9dfb1d7770d80772c3a81ecfdb9fb129e6fa932c16ab89153d37eea8d807b2e6f09a65ae3fd02734913951078da0529a0411d4ae150977b0e666bba09269cc0a3b58216445d066ad15322baad8eeb65921c565c934664509b8991d66429fe7cd8266b24fac25159fd77117ec66105619544a7720be6ad73a73d1d88cd5b6bb460521bb594b85202b6eb051a18acd76bd22dac144a0ba8316a910837cea544985136c622da9d0ca27ee8ef4e51d7758bc4d6148ec1b31d3d814d2c099b4d089b524338d4dc109f9e4892999c6a63005f5ba4f84eaf165fb0e6416841506a4182a21eb3b45f1e9094f701cc7bd9694d6742d0847db48348a2178ebe76153e9de26d19aed5296bc7d3bddb6db6cbfb16ddbb66d3679bb97a435db65d9eebd179bf7dee7d84bf68d97b77b16c78a681c77376ced669bab5c575a73e953f7f7f97ee6debb172f99ef7dc9f7f9720fadc85d5b65238f52ee688e52be1cc771d8e438ee3996f352b03d1c8561dbadec4c47225a633fd21a7b91d6d8df8bc92f64fbfb2ad43766fd02ad6feeed6b1664ca899ca9b45cca94d67c81e62865fbb0764bb33e21bfa1460d6cc84226f64ddf66460d397c0d6648831bc6b05d8ca446d9a81432a535db376c6e1baeb29a0292e652a67f020eaf20ab2c9b6476825ca938394d480155d19cd304174dd16c9f527fc869c2139446bdc969020c688a66b345b67709b1405620649acd528b09426a01d2def468ec0935c8fdad3793fcf68dce6c1778225799139ae42a63e50a65cbb25c471fb50933b9a335f661adb585c281ce84b4904d2f0dd9fec54cd134a106b9ca7a5459aeb2fa03cdd50992be42a13994d426b942a135f43994dce006b96224354a6e9a4349c566fba84d38d11cdbed5b680e27d01c55466be89df0049ac3a3391a237948ab0a481a936141bb6ceff50dc5667d42a65fb69789205b1b93b9209bef53fe727d02ade9688e6b056b29ad416f29a576cbf69456d121cd740b6f71604e3fc491ea6371624e2b78fa1c8bf39d3e098bf3e2f4d5657150a7af4016e765747a1c1647747a232c4e79fadab238e2e92bcce2cca49cdec6e2984eff008b533a7d65591c18a7af3f16873c3d7dcae29c4e5f84c59139fd121667e5f4f56571f0e8824d2fbb9ca594c13d34323ee32a25c63d32f82e4e2a61a40ee3aa8f65597395cf7858cee01e17e567ee952f704f8dca69de9528dc03e3c5639c2b5f662ef3f2b784c13da8c3bccb181ce3aabf784bd9d313f3973381965d9e42b36a1173988fca9e18fc44c6aa677ccc510751f88968f5bfe09e968f0e839fa8ac7abaa37e7a79cac19bca9e9794c35c0473d153f013bbea61f9e85fd903839fd4ac7a4887111dfc56f688f01320563de16340fce465d5031ef517fc2465d5f3f2eda5b247c60cfca465d5e31df51afcc45bf5bcbc6f69602e033fe1563da2d2aa47e5a3af943d31f013d4aae7e557859fccac7a4e1f3d75b1ec49e127e0aaa704033f19ad7ac4c7fc057e8263d5c31d75b2ec61d2c3b372819fc058f5bcdcbec44f54ab9e958fbe97c7af65cf0c7ed2ab1ef23067d2c3b392c14f02b0ea193d06f77c29a4937f525731c7f809ceaae73b0af7a0fea4aeca5bf6bce09e2775f5f218f02dca9e97969fcef295abfc495da1704f4f4fcfe8a28f171f3ec7ba943bb1dc52d2326555f42ce54aa952d657692a6dac8abe543ec0aae849656559153d59d61faba21f95a455d18b4a1c56453f96656d95156655f46079b22afaaff4ca24ac8abe2babcbaae8b9b2025915fd2db7d29647caea6355f4b5dc49e1a93b2dd6c3414867cc0d96690e92c6aa18ca34a60429b249cb3456450a72d31c352741d280eef64558ef0df8eebd08ef74dc91044903c0732f827bf81033019e0bc573a28bf3016140f695fbe10f886dcbaabc83073113df3d2f3c185a1968679f15b2354acb9ea57d3696fbb701a806d87bf73013dd2d46d5dbf3ace80a55c447472409a0ab8f95fb45785b6b01dd5145bc72ffe459fde4fece8a8e0b40555c842bf7edf680f3e21eb22cab327ba8ae6e896a00f7fbcb71e7685c90ccd53eaddcaedc4116e7deae6c5967a8065c26b8df155dade8b8a30804d45550ee138a06d4354cf104d60ad5000eefd87be00729f8e008f62c8b051a9e60ed90591cee7d5ad02d39eeb77fb8f23eac6303ee395c4b405d51ab32ab506e99553550ae376bac0275aa7d302b151b6cfb6890de43ae3487d8b66f1ef4be9a43eeb96fdf4ebb7bd871651501f99dd67f40dfe76d1eeec61d5d57d602f00ca13d90d509da4f26e5ea441eee90eb4804f78acd21f67daeda21f75b7dc5a92bfa3adad3f1d67a5b7a7616d62ade909bdd6cd7d3b1becaba7b0464db3789f2e1e57a2f578cf2612bcc86e6064d0ac74ba7b897530a99428ab7e2e87470b97befbddcbdf77a4e3a9a2e84f5d77bdf26426be86b69d25aa60f6bcf467b923062022010bd223c103c8032492173482643e4e8d0f1e4e5644936a7fc84d2d3d0748adef3fe3dbc2167574421a6e3869c49d52851a244c9d58ab962d37be711a1b45c318efa81ee386c3a75a3b4e9943d4d6aa653d65a92f9fa01b2efbdd6f22fa794530a59fbe6b5de7b4e8bd5eb6e7a9ee75dae52eed6ba2a9a414867b60514017637bfeffbb8cee438ac6333f7071451005ae61ede905ba7ecedbb923649ecd40086c8d111e2b85171dcb0e914b7e37b2a735e69ebb883e69de266e8e7ddc3a697bd77dfc19b5df7bdfb3ea4f30e9adf3d1d9bbf7ff8c52b53481b1a1b9a547f17d11aee339ff9cb29a509b23fd21aeed5869b48fba672dca9ed4a3791486b380f9b357bafd57bff7b4e4f80d6707f7d687affba9bdff77dd7e3de71dc254269160f21eb0a13b07922b96fdcefcd6de32a7729f71a9af5dc56cfbd87705d9e9c70b97befbdf75eaf77efdd0ff12e77efbdb4345ff27de9eae60ab79bcd76ffd099be0eb9f6f7ea74a6e696efe90dbd79ef96efed2f366bbedfee1b87b7b4f76e76cbb5c7c662b15899be8e3d2a8b4563996ed5c2200c433af3d45fca30a429df3bccbd7a076f729c77cefb10ae3b58d24e75f7b08ecdde3d7cea4ab26fbad787ddb99bd50364776f24a2fb100fd72664bfc35cb975eade3389d0e47afa9ce6f12ae783fa43d64c45187277b35dab07c89a298fc661572d1d46b93ac1861ccc989c8be6a835b73e57ee9b241c6a55e6f5c97db325d3578a73394076cfe9ea9594d6d4518818249d779a3dafe69aa4f6bd120af7fba23a38197033e068c0d580b3017703920425fc097110e620d441b883100aaa43e481d80311264621fae00754479396cdaa7427dbca2405d5d1daa6a03a5a2210a88e564a10a88ed60b10d5d19a1102d5d1a2b943a03a884075b43c2aa88e165904aaa3753202d5d1fa11c03789bb63b2814cba2851a2989766c24c3acca4eb4e3b26d40a45a083c704fcd9ba01e20f04b122f179b23e7c7e208895884f9e1d24e103a633e998746fe2445c891ff7734b5981e247123fb22fe2d2c57174d993be93f8b4b498139a15f80df40ca115c513a488b23acf9d32b8600b3e3f41275831e94a982371f9337cf9e9c2d27f71a4cc675a5abc53565c937ecee093bc0cb6397f160113fe059f1b6d6351fb2253c499cbd6cfc0169874798a687b8d3fbb61f049fe051f31a2ba9cd0acb88ff0b9d55c16d6ae1c1b9aeb235db06985ecc35af0f9fd842bccaafa65553ddb5eb17eb1ea4b5cc1dfcfd68d9568ec7755c127f8145c6bb49ecd1a5663309a158a40875908e2b3694d9c882b110efbad1bab109f1fee5ab36a5c1d963087294c01852668d5470c36284316a0ec7413a488c20456dca105ab105b56cdc2b6186d9bd55c1b8df56a9135172ce6fa5e56df9dccbc2ceb25a656e29d9c6635d6458992072d64e1092d8031e95a3756e19d886bc0c216c41003d916561debaaa0022c08e10352500393eec6acaa1b8c410783ee059d0bba16742ce856d075efb00abc147828f09ef04ee099c073c2db4eadcabb775a02128c40042100c1135a83d21a17c7ea7ec066759da456b7e7abdb84bb93d3ea32a135621687c34db83bf156b7095aa3ef845c5d0fd01a7dcf8b75d83cf56f0c680e24344abe31a035fdfe65591c0e53aaaabfd8f4c84c5295c5e62986d2d473ae976dbb15423a63d2d096a83f34a80ef550890ab55005ea567d8057879a7650fbd0a12a4be2d44215a85bd5d5b2fea941b503a718a87467d35967432d0932a69099a1194c000843160030381c1a0e064349ce8bf614800c72a47c66569a4893148e529821c618000006000040004084340c009d3d409c6b4b374ee3662f85a3a48ec92a28b3c1d4261450d3c0269b1def84086d3342522c6504fdc223d0448d4f8550eb68793a9ca05ea89de2db44d4499e21e5f73e2d41d249ae328c5912579bcb061c349c87c14913ad6a84a8f63975c33872f6dac9118627790181b5a9d0aeb786b4546396866e53874c18423eab5456b821976f2527cc6d5202b79d0946aa64b2c088e823c05063648de3bd11801bc9546c103daaca90950498eacb925499c623a72c3e76975180b1dd2a9963c05c84fa11c4167cc8b2c297db4291dc053dd58ece9db1a19d575d5f47d9423e48d891ea0336eb100e0bc998b7fddb0770af6ecb3e8f0bf274fb8e7662664a4805eb92bc699d1cf9f521f93ea5afa3baa33db169a895666df57a1f11b8ea78dc983ad23c4e24def46a3d3c93091b202b09413fc6c0c7391345754926df041ec7225170a70bd1f53e6d7284e78109fa335fd9948e36965d77560c657c47522c4ba0c1b25b35f6fc33358f709b0b90d3b2bf619f8c7bdf6be5665ab0b7b79890b5f77a7710e86410336f56e60634a34ef449e4a64daa5faa7f853d2817426789968b999230ba1cf740385dcc362845e9abaf11d5d69f824789744d1c7328ceadbee166979cea544b8ab1b0713359a139fc4ebc2637258d14a15fa0bd9182de907481a82d481f2d5288856bbe80f38316e9fdcad0d5b31389af2029289515e07a0c7d791e5fb76ce04bbdff1ceb722ccfdefc0f6447172d97995ade0ccbaa504435a4d55bb9e5f857181803602a196743291f2e214b8237c9cc8e35153e5747100e07e9f8d02d9f95c034133130c0787815ee82162e2e52f73120309b2281ac4f37da753c086b1bc6833cb5110d9697dc6ea79e995152f72ed79ac4c7031446cbc7ea0033590c1faebd768c9f80fd5f83a75dc319025f03d239cbbac898aab0259c17848087c2d95b2fff05ba6acd7daaa281bd8c8e1222404999a634262303c58c2fe27dd86cb0cd32d6f41c92f2548023ff55c2fa2d03947d6823872a15c0babd2801521bd888274cce76ed31a48364735002dac06494917b8cfaffde0bb19b777db07c4d8978773301dd314d37cfd1de6e83138730a5a1f8aab095db90b4c95dabb124f4a05b5dcb2dc7da99b16e91e64877cf50f9db30ae7e9ed493067780f9a5aa25354843e968769125ede6270b58e7ad5560564028cb60cd3c5a1a3e526876a0a7eed4dc53e86adc2afa104e3b99694f6fc554f26ad5d4370ea90865f5095a84303907ae64301e4cfc1af31a95262d2782975f7e2ff035eb445df706b0ab7253b87adcf2495a4c2b69923ca7f9a9e985ffc2b4f442d4154f700aac4347afdd73b7d620e8a6dcbd140b773dd451e1ace31bd71dbca10f9fe17e0517309d3402be3451e6976e60540541dec5e487058d753ee64037d377c212e20cd3d56e01cf86b1d062192a27c87b462ec719fa602a8839b6538fb87d3201d47d6e1173da60c666d922b0dfeb86e50a9dd9f4eb7654c163dabc78d95fc72720ac6d6544bde48ee34a37a20ec3291ad723573aaf2fc0f37989f7300ed271fa2416826533802e705d8f380a11f04abe3ad954523f874b38d642af1b6899e3a08f9dd3c809d626306b8dcbe7d0f1a6db5c06b001f8c131db2b025bf5601e9bd77e24d1f00378a2766187ceed8d920fd1661a62f9e7810ccdc8f78e10fb3741bec7299baec9e2eb0898e148e4417eac586485cd7b5e5ba64a86f141b25f8815f8b7ca1108cb7520e14efb98119465258fd3f6800cea8f7ec58f8bf9eb090970ce35fddfa9f2f88391a87a866ace3822f9cc599bd4f742f66edd7ca89c5d8458525c34c61dd8fb21d4e98f36229468d5363f8fa2811d306514f2c96bfe68960889ec5e20e23bb31ede3d3d9472bf42269aab31759315b1570d80fe73798de3f27ac6058a8685b521d6ebca7ee86b297e2c38918594ecfe11a5250fd77649d0c2e50122ea1ff96d28a639a2fa1058573ab2f25677c1ec77f940ea84c56c23052ff0decc02ba3850b9d6b116004fd44ff2b9e47066e63f06c8f11fa391d8e1d1340b3add51f5173739da55686998eb4c186faac877e85b49bd7891281f96df5080e7c212fab19f0bdb387518e3ffb9f069858730fa76c424675dc1ac0c38e4e3346dfca2666bd8298fd432168acd4229d92f28a21115d5cc103a758ef73926487ecb0a712bcbf58f8cf1953147a5b69ad157b9e74bf4a66425c93b57d921b9861d020298280255001721267282e4d6190956e70d4774ebb81cca3868ff76b626636b0c29819cae8309322babbbcde89ba183b34ba87a5cf58633970b677232cd0a18b673b60cf7232e467a61d741698cfcb66bdd5d7d3851e3a6391e99b9a9a12e767460a18671dcbd502aa12a88b7f4c3d4dd299dd17cbc7a1845ba08ac1ab621899152df37f7cbb392bf9381a97eb0d8dbd9768586c0cc1ab0b6936f45a4460bbd9ed8dd9d797d0205d37182c1c478339b6a989dd5f10b5243d2bf928063f056f055b4e7628cf6c0b841e1ee9a01e914a824c39076d14e9f7578bfcd741fd2ce5bd67a6836244f5ee16d63c5907c4c2f171ad27417666b48d790c6c17c37d0ab59dc9a4720157c0eceadb25e7cdfc890feffbcb97d648251b770851e096a6928ddf82844e9a6bbad3b59caa607b37157c13117650cb41cf451f845ef4f61ec5dd755d296d372f250606e6547e668fbf822dcb2c31ee26cbeb79ef9ed3b24c64df80ef71bb652fae06721e20623010019c82d6a6a6c011a4809b3bd364e211c7c6aa24beca9d7874c84b7d6f40161a7411f2e503a92004efb0fd175cf24d03f24515786844d7fe5c29ba914b18461e9a7429a72f490bcc2f4cb11dd8c7f6bc24d39101db4258758c28bc6c93abee34866061b166a7653c927c6aedbeb84021c2342d5bab3d7a332c9bd0629983194e4545d37e7a28945d31815b3f8463e79b240cbc89ee8483ae98b84cdc3e45dfa53824ebd410c2f9c25dda18d9e6cc08c1a908cb250e607bb30a6253620a7813578f847b91a4b3c8130a69b689c15cde1da163b7343698f33adf9c151bba28edbf4ce7c064a0b446c6b5a16c6760ac45603006dd74697f8d7fdbcbdd4da2a6b6e18d36a30480aee0741247eebe22fb816f3d665c786293720ff0ebc8fe77f0bd85a10e1334a704aa48694469d9a6ac1b8b5496fa417f528a0714306254763e74d7efcfafe9d50321c666f93651fdf10c3e6c1a15e6e1cca84cf3cee638ac03a0994fccef34101e2889989c6b6b5c747e1a71ad5b6412a951107ecd2124dfabf8940c602ff65aee0fd8a9c62cca54a8c6122ac80c10a53cb52b7e1dcfa8fe03671cced90025f953345392c199676ef116592a45599c13f0572440bf40cbc69c745d54033b0e370504625ff1e58b08ad5e72d9244c5a1542993adc4967a96dcd9b5d401ed31d50c84e683d6e04f79f7134747708187bb3161633e7118a7ef5b8745c05cb48df86198a7307704a8546f3e6cbdf1e9eb3b0d108bacefee73c5c84e170d6d5f85e7b9f8f8e30673b456b88adce2ef005684a5ede7a8bb238157f8a6a4e1dc9e09a883841d4810c1b414efadce2cac694be628aaadc1eb86582ed3761469b54f8c99a0d24ff8177ef192465850620aa38ee532f2931ffb5054885d8554d01abac420676119363bddab57ace6284a762977a321ae5c898b67a6cf841da4ce642ee74ff9eac7840ae896ac23a15a8cea26cdd3c6b2d7a94c34507234a045aaaa998b7f917a6ed8e5177d32e3c354537ff9cb09772728ec103f826c4cf74c5047086044b79b15e6a0c53447ff39557ee9efdb712abb0fd708e348235d5d340985ec263b3d1bb09a5ed378141d1548ccd32bc8c0c1a7e96e0aef53f1ad131f8ebd2f46689d0b1ee37115673f65e7f408231e026b366244018b7de24c94ae94ed68e250aaf07c8da48a323eb0a67b5809cdd426c2fde72a2ae329625c04193fde838be8ec3ee92e5e8c50c5e50e7fe0219228eccb804bb3304410b399c0724a840870d30fcad965b8167d943edae50ee867196164c1123ed63d46075fcae2f3ed54b4097e542ee47e491238ad77cfd0d7001249c4eb92e31a109f500a8186094b5e5a2b559894fc114d768092a3f187d3316b61ae2c79f207798b35feb04181cef3111a2339dc03d8115d5e3e88360e4ab2e4d91e8df36bf47b30ab9cac90ff96d42ef5aee2a0a8ba5dcf646056fe0f4c31ba70845817d522e01d9f1e59bf5345afbb55301dca163235173dff78d1e50e46bd2488da787092be5f7cd1c6ff0579d414fbbca891ce64ea6c0f4cfd28295c9f0334a124407e082e374707d11f21c2a4a608494816653a2ba72340aae4b0324d252d5ec1992dec9a9d13fe00af37f370daeafe3831850fe0d54de8002be8839bc50daed8a5fb3be78cfaac1a27f810b86dda01d6bc216c569fc7b412aca2e75eccdcb4e818ef2c53bbb4b007e93d0e7a7b92aee447f06693075466b4aa047f828fc1c5e635aacdf499d0a835063f865737e1b39cddc384c6cab22f8b7c407dd380f646ebb08b8fc984be96987cfaf46211145510d092b9f4d7379d752ac23d35971e514cd8a11f0137973e5cd2fc4cbaa7e728a49bcbe3e8445d3e4e1f33d6e5fa89b216f0185410c389389d3f0bcbb95011956c68ab85b445507f3a400cee430cb765eb3d2183be018dfa288048fabfe0d85f69e7bd3ef2aab8ddaff78a770fd6c4133b69dffedbaaabf24c55b85477a3819537f68970bd717a617a703d861ce22bd99fca2bbc47e189a086ffd86acdad9452cc9d5c5fb5fd46238a11c842063b82229651d079027cda9fec02137d8450c765f59caba11647e00bcea1b06166436ac19d6fa87335044a11eae1b8d381e54d04dd6cde7ba472b9739859ccc0cd7b706a9da2116675af8d111b1f23c28b53118d62a23b9448ad9308d5c69327870643f8b3c95766fde501845bcd28569a089beedfad07e261f86f3c18a4c6cb52335703f35a6c82999732b88051b7f94008349ab12363223a4208c98aa781ea1a54367c8412772ad3b0f75974f709d95f599c283d8b347bbaf1c02666a62e906a3ab549ddb7382253eb75341c4be3d10fb588c1f4c55babff4dfcc8054a95c2f40032942fca1047886acd40cc3a1246df21cec1594e7a264c07933ba410c71b3b96fd15be5f9cbb2bb0898affd0734c83de7183b15920f3cb9363fb83d1ec89a416c3e1f930927d6a9aa2770e278fbd400c62418caca9093e44db2c75302bcfb7e495445441ccfa0a428837f7b125380249fbcaeeafbffeeb50cb49afc54e7a571ebd6dbd6dbd561d84c9a160a651260d19e0fe979571387d5b5d79e9bdda536fdedc8ac72ae4ad7c3d6cbdec7a2c3d6c1d136a0efba3d46fbd5450508338569c88521a3f90484097b095cfa399ef6a54907a56238a32c415c85d1d0baa8080c8f167dd29bcd0ab255c7691d0e70002c1011b2440b3e19be1032c75a1b671c6026f1eab2e0996abda75de7851888140857711fd270fe5955d6293cf114b67fb3711ae71d38ee741acda958449d1a1892be62587c6e11385a5a3afd169b95e895ce8b0a992e3192336c8bab856cbabf310560df6dedf10348e932ade76cb9063f0750a15121d33930525e7a802b8648a960b52ebc002d04987b292483f410ac93bc367b8dc315d866008c73b0545d72920b989541d7cde17f6155c74734b4c479bd1747dc4fa42694d96eec038d96b9ce715c98c477fcd802fe26e29666512394775ae5e30c48f4e8acc7daf2b540011936d0dc8dc404cd6ef0e7746941bfaeb789f95811b3798830c20aa51d243217351bde2c659a962607907379cbd5a9eb8cab751e42a7f07ef2707f3a0739bb8451c6f7db47b0db787d42b44fbd17f259aaa1773d1924a2f54d9c577fc0994f260c1aa51f90278e239c8787cb7a9778dea8317a8e24f8ec2db89a0be2bb1a633f96237ff13437a9da93bc9d5156d57a9ab8b1b00f2df0db7ffc63cd1d9930519abee9bd3c3ea2ce22dde688993e8ec230e51559d92b7ad7f5b8dd13c0ddd07d31aded2508f0ca5d6ec076b68a1b9b44e2c68348406d67a274b43e4116b4d509b6958d5b1031585e5fd90d1a4a44cac0de7f45282e361e76cd57d0713bad4f6ac2b545292a5331cd2d126394a45c77d6332e5a7755355d963852c1d511ddf954cb6a6eaa648b795d73973f4d538ab7de1844e63ce720a65dc741a6a32f23b600ae478a1520e898b958890f7b106197dd1c23b93f8ed87f91d131846d4a61092c516184a144ca3fd6417eb13fac72aae3584496cc589d8d85bf490a5207de6224a9f893c8b6a5eff5c963796e50cb6df387afee4e6331d5dae7501802e864049802b4739a5037649778ab10c4ae4c64e805a08c6aeeaace890974f49db144fc8f09f7f1271d235a827e8e6b9c7b9cde261c55e9adf5d6622416e1b1cda69f05b96d0e9848ad5065aa510f1245448b167917382e97c4784aeb988a152c7462c1c68d3148dc35740dff2a0bf047265f6234644a7b2550b3f4ad3776b3e40985056377d1cbc1287526061fea3dcab00d13cbcb2809bd06a2201a701548c62f926443f4e505ddaa86d61e3c5385a41ba9898e05543642342e3e54256e73620a4e95242d789b663bf3dbcff9a3bc551c1db74aab210cf732ea30beb75bf8dc62a9f8b40f9e2402d129b521d4e462c84caabe759b40fe2cab11e26d1925b3bc0fd3ec7d302eb37057ffd82a8e6821aac3c851143f539b28ad45a95b68a943c483cbb3216f539146e26b47dc1025a8300b19fc54c45007125f099929685a61dfcda443ad59a4993988c2350a56263a05c90fbb86c12ba9e26ac998e3aa584614038d33fa6e8398ec10e3493e81a8bca1c4c3cfcc03bc15a5b4bcafc12b50851636955111d773ce98f208bfe44886332063ada639bec65ab169b7d812070b57f70b0b7585db0ccda4148747743ddc83b40912be09352b5aef52c8c1af491432cda53e41a772738b6ea651fa98e0dfa443a6cac826e66d8f3eca5b8675be42a350c4220701620c35a9bf2b617a02e3690aa93c9e33d4981bfd42436ba729069ca332468d0bd86c685b4fd26e6406401729441a695d681130d6d144e34379ba157469d1d57ac180dd2dd720a200e8fe9bd7f8da158c3b1bf2f783534c987c6271efcb1abb9d250bd055bc98d1425a277ef44050b6df3bb3e742e4a1f331aba958862053988908b054c6894a07c41577c62e136876c398704c8c7c5125e0518d3698752796fe0840262fe556a292d1235b826640bbc5418c93ca6d8837b8badec6480ea3b97c7f3d3cad93232aa6b85b47714984ae38bc797e267645333ade0a3666ee32169eda147443426e5384272a4e5174ff633933c1e88e1ac5ef18f7b386d2d95a9cb5c51f59550cee5007f814845b11bfb8fabb57119b951bf9afbb7e4bb92b4abcb15f0a09062924a33ea09d7656537bf09255db735dba5bb1318b8440325ab1a428c4acc91be573462947069395f94e6b332ac715c713c52ca5f90546e7f766c9ca8d77b4acde562279e030c9c6e007ec56eed0c716653f92aec7c50b3ff2b63bf8c22556b257b73d09b8d89e20cb93c522df5baf661ba3caf698f960ebed700ca0d7f6be8848c5c971968d7310a79c9b141777f7e483e5630bad6a4bdf405604ee1b18ed89d758784c5b45e167b6ae16e686f02e0b2666707841dd8e7ed66e8116e68e14b88afe3d1381714b6708b9b311047e723b18671bd1a67d02c40b139c3fe9c14548f3ec76e45778f0a35be1655de2f6589c98f247d7c912ae63c7cbd58e865e6f96ab3dca6738edd10b78d6f08187bf921b2ed8d7e7af76a8fd179f1dd275b443cbdfc1869d022b57ae857bde0033cd1d79627bf20e31447a4ba06a16d823b6a4107d6dd7437a4e6e7b469e6382d84e3ffab22166ebf31373f53ef2ad922ded615f2741119ac8da630c778bc903995b4167af3b8f8468898e3bc282ad114ce7bdeb00ff1e3748d32335337a7f2114d554dbb2c0d523944e879d90de55578861e2bd2f7fbc0b09368c1b6d03499db85a2670c10985dd756ad5b6466ac8e67c5d614f2960bc09860f785fa609ddeb6ed06c49153e3d04d39f61c1074d66e122f00c25a00cb3c3c27ba1d7aad8e6ebe3038a4afb87998d4f2d369e891ea86f4e4b87b2cde761d330da5c0f3be27e31fae6e700417121d849e946b457fc4a1bb68be45f09556957770e1ff8720d99e88f3ea19dad7f02271c1fc4a0af5c7ee6c7fb1560a0f4b229cdb5f541f92970cf173d4fb2834963b274541faa8fd44f962bfd87eec6f6ce7d8c9f82b6ede3e68d12a4a27841761d2dd30e2e7912637615a8616044a6ccbd090de279f9770dfa46831f56fb5b06ec55547e43cb3036a6b42da5d1b498f24b1629a741f080ca0208a79349d7d0dd9783025962f59b7fd0542b94a30ecccb1bda373bbb7ed8d42a7eae96101c1c242909cddcda17948a4e3f5f7ae7fb5d94aaaece7b29f3a311a5b6136f019940942788d029ab2b38df8013a3ad93584d949e2d9eb4e8c8f10192f85447644bc6e185d8f39a923dca9ebedf6345e7d1a1c89a297707648b4959ce8cca803ddd9fab962d23e9f682ab947d827f45bfda093d759f901f23a88b52bf67a561c64a73ea2205ec0899b60b8b82918308807cca56aa664a58e1e430197eb63fab0529fda8683a8752f7700d02691cc7f90b98e22bef356672776d92655dfc295d7183b159dc9104de0ffd7352318a39d58144ed239bd48c959b042af81c8513fc2250dbc7e8733ad611df6390458b506ee52140c51d33e2f46418014cd23324bbf8ad112030a8de2a833e801e8aef90633216385a6419bb41d904ee58a5451a71c798c6ab9fd27d79e7c5b32d380f728b49b1d4f441e288c58678d2c97cc101471098ada6d16ee14bdbb371f50f679d511cd5b43be2c608cd42c5bb661068c319023ca5b30c8861b3c1a55e5060e8b63922485346ed0ea54de08e84954a0cba5760e4c06dea66230da8eb531a419f0a484abf20daddd57252854093732cc7949bf4a962499526238f8506372ca843505e3bad081e7a4ae7d0ecc5523cd72b45a8614210ebbdda01960cf053d8bfce724d5b66ad3ff19c837b7055f5b7f93dc25ab307e8ec2c07488afefef87f696826469d8a1316d664027e94ee28fed8fc6e7e4dc627d9c47eb05d9ee9352deb51720e2b82f9b7c814f68e6e5dac1d9d1338854499664d1b24d1657faa7635646522000b7cd180ae496405a2f2a46d9a6daad8b711a5010c4246b6e6f2930c94574148ba0e40d04e2f1c50a63583b3f9219a9cd71e6ca7dddb9e92df29131301b8081ea0cd6e303dfc613117c7faae735a9789b8169185c1a0101a2e9f3222c59e7b94cd4309bd9a2c27bd7951cec762279d605fc0312d4f87a15f2620639e6d367ebc498c5446b2f0a5bd0483eef15f26a481a3658fdf293c5dc47a51c9e599345c24e6c130db1342362d6cd802cad2161bd295ccc11b1b4031c925537db33900b5247bb435a34f35704bcb1ec594c1e7fb8295db13cb93bda7038385273a160f022526fdce90f2f21fb36ab977a9bcf0291bd4f46fd19a54cb1b868df520bd153a5db045f2d0c100eb8102e50c55ee5208eca1d09b022d36955a8baddb1baf2b9e29e758c54bcec161eb27ac8a110ee5076a61510dc00dbfbca27cb35f312d83d0e8e181de5ec63a8d4be564c4ce84543dbcf55716a9bddeabb712c1cdbbf8731937444e40919155773c38031578f7495a8141cec1b5f31092132b0ab0a1602aa0f347517d6e927dbdb3a25d6e71af74bf26c2cdab281ac17e785c5169261180bf6c9cf30191968b12077a82cbe1041a019d66069c7c8918b01cb2f2ba5b059eea9a8495625aeeb2547e71c08fc3e6682aa88fa340b8c9f88d7e868c0e2ad485fd060d959c425b0767316239db751ab8b9299f115ab1f757d79c2b0cfd784418a6c1f629f4cceafd386294ac7d4750e38d5a5dbb885a2243c48bfc48a95a255cb5ce05f744ae6de1a0de2b1edf98b81f388f3e9f43a78aca67d7459ad5ca1888a201fd6e3f1dd63f1c660c17a5a2e9722647afc82bf442647fe351e3d34f767ff1a60961cd7f74cf593441d240d16c158a00cd478bb253b6f7c6137b7c23e02fee5074036c036960518c88475d66e652db8593a1114537c04a6d404463109d2f8ee6b1b3ac700c82fe1522fee52afa66d5c3a3d6897f8b153442ad34dc089e0d6eaefd80c3d434c63992ca9d3a3779ca9e1d0d22c7c5ecb061306141e5e072febc58a894b838630035b88511b561c007ffd18d4bf627eb3775308b0575727dbb705836cc54ff6f9b6bd87b31bfc37deb6efba0da59ac4e8e1a9cd8924bed518163f56bcff3d85307f59da665ed26b951c8d76cc5310eb49cdafb0644ec1909b3edd35a0d48ebdcc8ce89b1d934647b073be98f7242243daee2ee2ae0703b4dcf14954bbfa49a30a85f63b30dfd4c2783a770dd3374b1078ddcb4185644a3c9bb142b5767e2d82f57948e8f8797aea2f384faa68c2ea8bdd4d888fda35cbce6894a7e744253db9191f0d4e08bb19691dea95c4fc9332ec77998a7b603b2af2bb0ee30d7a0a47375093830e9700e23c5c7ea59b1e893e65ae61f3972033ba01e5cb2bec05d29ab0227aa472f807b59b2d05e96faa9cae967c400cb570eb92816c0c1c0b479adf293d608025a623489835104d4bc1e2641486050cdaf54bbfb898bd009660e604e603fcfafc08dd7c9fd7a89cf62c19cafb7bf1f37ec0ad831944a60e6cbe8198f1a5a36ebc4f85ac46774c467294027b797d2c343346fa7235b276c8165356445a13e6ddac74b44f4bf0d727ceeb2c867d22aa7ffcaec0f604fc57dc1a6dafa9c11c04032870557cc00e98d1a83e677b0ad5a07269fe6e5cb4f7b783b1a36d5f2d0689a401f962b609a37684810f94764ff4fd70d03343a8c66257c59f1a30b7e32810e67d6b8709533610ff645faaf985919b73025b3af631aebcde058ce53eb99238a06c51b79a088d4d2cdd1369d9e0b9677336814b780deb2d19eda5afe41691112486e2c7727068a602106305e9ad0180f05c7de230c6ff384c12eefa14621a58fd122d8497f7409f22646d1d509a1086a7f6dcc3a37b24a7d36d72cc5d594579cc3e576e77cccdcced03582953a2a3a7e74e37c1ca7c3e3adcda87a6d80a062da90bb47116ba453342d39396e710f803e3c72d6d07ec8a83ec3bb4fbcef834c1bef365713638f7000b6863cca1870f90421160169bc67a9e1965673045eee0551bd0b56ec12c0a41a48c480c415885179a2cbff13e3d345593438ef660ec2b0db66c6ef0909d238fa51fde1b4041d146f021980f43f46f106edd1938d120b77c321613e3322d4f04019d247d3c2189f18424440bec97ae4849840f98606561c20a8455fddca34df056033ed13c28356c2842e9b30ec9d3989111c2a1fed694ff52c6726e995264bcdb0a66396740e3901b10c7931f305eef761bce2b090d7e94960e868686c9dbd8f44f406ee9503c80218c521e524a2d5938a816b52b1eb70bfce4cb63ccc36806412fc9b676038326272210f080b03083c779e2f01715ba8d314506dcb02f9e31abb15dc201ad5f3b0d556cdf9f3b186b6e47568678306b1f3154012e07b356a36a05f68be0f3a133c195756833f01f45c0bf6d593b2fe78e8b45a01603bbb0c8852af56ad8564e46f062d656120df374610a888ede36920e89793e697f5ac8c5713e09fde6daf2f094816e00b620f29c299571760b24234c0e05bdcfbe6dcc9e2f6b6b8dc27734fa505790a47523045c86af69568a46545a3adfd505d95a9196057172cb334fb5ca0a4de93cc44e535284e5698a3111171d41e5553aeaf108b8a780f817276c7bb84cd82ca164d796578a789677c29ea5090bf40f3126d78b5cfd62c58a77b2a3c0c92b8893acdeb8d5899cfc6636896bf2bbec4968682d42db1d8944493464883e829931bdb8cda0a4084bb636967705d7b3b67ab3f2be799e4fb94b33a88051675d0f7debf4d4b198b18bb84d1da8921e8e42e2554a5760b03ec053d39673fa759fc95d2293ef7d3afd0b4784d3a4fa741e02e1f47b6d2bdad861b224fab98dbf579b88888901b0c705beacd27bcdb4992c25b1210ba41bd8330a235d0d86bb460c3e2dde520ace456599ceeb0f3dc50711a337428c52e265a59f1add2319a42c6094f86d14c15f64829223a4f125b92616f53c6bc3ebfbe82631ed75ba0cf68cad3677e0ee1e28cdf70d45356df56af84646ca68daeb718f575352f6e2471eb2f012a379f0d84723686d9512ea3e7ee5b5f013e47c4902c7203b1bc861b094ace3821f3d6430db477a27abac90f81790728f619e310bd36580be0db4bd46fece3b7dfb04264d7ac539af07ed7f0aededf552dd4eaf5d24a3d3437c2a1225547d70d989dc098e2db4c6062e866b1418012627d1fd540ce86db372c7985482724fb78d666797b41c407c2d2f93e97214403349ffb82ae09481da8e7fe214e6b400fce113cec9f5fe69a6977e58c2bf55e70cbd22031610ed21b0e83a16ba8ea4349c399d8fdd63164b58540f3a87c4377014bbef83acfa2bcee08ca9fc035d4110629057a26ef2e1ea0a815aa2a53c5aed575e9240d06288b1b276fe5816c8c35d7c8405b0187795bb388dda34ad5ccff78a273d0c4c7058b0f2e0dc13fdd33169b4a297257d4bcb2cbd6a890c264fbd2b542d01426d485e1f70cc36a11db7bdd345210e39459d9827490f746548201f5cee7fa258d16febde8a6d1be6e8a499e0d4fdda55965606934f07052ae6c79fdee27e93dea1e954ec69d4e79339150bd462c2c76a92870c3a4d71f896650970e3c7b4dd54613c99a83aa5522d497dc79c65b4519d5dca4e296e8d71ce71f8d7dda3ac56e6d818cc1cd148f7226660c723abfc18a082d0beb98449e87eb67bc7f7905547ae17eee4a6b81ec5f8d17d6bf8169eccc575201319da578c0fd543b33600a65a52ef073753a3e547434e09dc76f55c80d9337dea88697cf124bd6642e0117cdbc7afef1eaf0834a4624fe1d88fa2066e33c5b7193c1b584864df0fb008651b8f13f6dd8bd5683222da673e037d894c3ff31099a4761979073af80cb7a23a1bad8920b1570657c51d0b4e8f13a12bed2f30811cf45c0f966eab71609f175712775e06f82200c1f5a12b55d5e3e03dc94ff093044837d98882f818b8bd170f4460289e82b51a83be1a0eb3546b852385b48463a136d020b9d92c66af838dcd649be6f7bac4bd20386c8afce721569c1f3cb45fdcaffb05aa0a3c5331b81839464fb5c4a7bf549a3a5a30af83f7d99660817ef2b450cd058591432d6038aa228df93c7348481c28eb567a67516d006106fe4de7ae14f40b5d41527860c2b58eef252421bc7072c278472c2be33da449f792cf6c0ce6c01e17131cf665b52e77be6eeea2e3dc05e4556eb19b0cddad9845ba3b490ce1c204b633a76b64c92234ba20484f2c8fedb8951f19a4378b061cd5d51ba335401b847189ae6f816810c19d72128137122be6b2f5183326b047c02f231005bdffa872a8c5e85098e2d4c6d12ed6b005fb5250d6c5a5686ffc6777310cbf5674ed720ecdf51e0cf4af10dfcb65f00218c84e679b86aeb830b74b4a67b055821797021cb02aabd00645353edee7a406ad8687c19470cff8c8e0d4890debc017060cab6a980dfdc3f331ca7398cb23470c6547b112d2e58533a4e38db9b5c17f6c58c7d1c35a069b8ffd4a8a75d85d3ee363400229e334409b112a88927c6e4aa0b2958080930e41d165892e127a5243e4094b26273ea1bdd07e4f0a3cd9557542127012f8855b2ff6e5f2d68816a5251e5cb500b98578c7cc5c4c93578a4f3f56a16ce10637d23478b4d79c7aee13da87794c1fa82fdcf014f8e25e01f603c69a75d3e4e8425884be1e31d0d147803b7a3264ec65536832cdf994a151363dbd9f10bfd2c2ae91a247bb807010166618eb36ffc4776b714562ba9f2effc1b284fb29f31f630bbe8736ff99d0051a22ef822c00b952b02fef01d477edf2729e2afac4e0690fe758041ddefdda31b215f158b9485d6efd3370b8b7e51f4959597e27f5c045d729377f9ce3eeab909f36a67ddbef76e492c0bb25dfc9da73bd9e1972bf4cdfa341ffa377411e4d351d35fa5ca412a6279380caf8be1fa241476e3d01c8481f06b33f4d3ea1d098a660c99407406cda5ac609a86aa0d2ad6f7c724889c5d3262a72ba6b93544148c91d23fa8612bbd53a6d26d4d17e2a5d0db21de4eeae86044abfceb87fe5585de4f2080e114526ab997ad69e21324936796e135c1c6713c8684a216864433e9704856984f270dbc2727e1e1863f92c0851dd2f4f10c6a9c691781c2c4b8713454285b58b02f69031ebd13e7b2e18707214beb8a410b854b71ef9b5144ae6b50326a80769011bfdfa2e921a39a74c891ecef9c7ec693935f5906f0fa84a496f7fab389911e37d03bb99201dca684a80dc3eea6f260fd4cd5c5eff2a2f7c831d990cf668daee093fdccc68d971a43f638ceaa2e83f2518a7fafb51a9452455a070beb3f32e493e48254b639c66124e2cbf074ff4244456541c92c9e4e3642ac76710d69e6e1e4a381aec2049191802b6281ad39363cea9992a11241a0fb2878ad970dc4797546ab816b5688ab27d483b79f4b7aa68d2de73ccc770779216eb9fe4a046316402bea6dea3786dc3a6f31b61e368b6e921e88b6ee1e05b33bec85274ddd549d934f55ae2248073efb6ed3e8431c0bd1b037781bc72ed58abb9175de595fcbd4d91f7dabd61f4d37b1f88097976fbc98b175750b6c7a6bf92f2c496e8d6217093a0d894fd33fdbaf6b411e7849071372b35057cb38c0b2e629d0d153edcedceaf98b13a4ce42b8c664a2ec4a7014e444bc8466c94399f297143dc0c2a4578bdd7063448e39de2b392827c8cb355364498e7487aab498e92d4fac683914f5cb3a1b5c625678d72c9b35b8a693668d54ef4c477214a771a6903387ac477579fd4e9ae252fd6374e28b4f8868edaf9f6ac3f614db49f9eaf76ee6b3290261b8bf222637134ca178a55e0505a49a9f6135d74149ceecc254a38984ac74ca8bf896ed5884863ea3c910f646b7e2eaa3e4a1fd5b5daaeb8ca24aa0937c2ad332239a9b65e729ff63655698e82ed543617761da2254302e9f7d688a7cf7bea139eb9791e3ba7a6f5e1a87ad93f113c5e38e05607c8a661c61ac6fd6154807ca2c63e538575df1ea2e88f92b7b86dc0697476a41342d57368ffa77c79a56dbdc607973de0bb74b7b761378f4b8d1bed660da34b9d883453d3fb10ea5d6c44242eb11cf37716054e8b88c1fc26504402e82e808ae0373caa9444db0e12c8ae257fc88a44c393c4ea0de70f5cd183bf7cd2dfc804777e24398c4c14dfed3a996e0e65b81ac083c22523a3279984a52066d73e7abe689132620ed52320295817855f785f4eeca75319540ad279759245f84b958300dda801aa3a4af741e07cdf0f47a15f16dce1dcb76d6abac3472263c20490cdbc8ed3a01b1b0043edb8627d9255c9edaef49e240cf937971b5605034e1f734575da07322207748d48669606a705e2d8b16ab821b3f7c61ad32518da84640328d6e751063cf003aef5c8bf4b94216efe8e20be28f22e67443009d1ac69fd33e32d7006d20cc29b5ba64ebcdb19683d71c91adbacad4caae15cff616eab828aa7ab8f0d50e1ca645318a032ae19afb01e82617d700ae5cf0277197331b3e7fdbe639b5383f09215eceb38853a97d7a8c955654382a997c2b283d60ee54f8292a010fca1c51d705b99dd8f9305e61ef2205f26bb0b92d282e2891657b853c9a25b1683bfe22eb2c9ccebd21eac58a106c6d503aed894594c4d25063e980c889e15641f69646105a50ca9b5ecc38f3e07be564eeae62a2cb3a20f946299af09ea131c483258b8e84192a5d604dcc4650235fc1cb04c1eae309bc9f6c706569458d61a4d0f040cb0c3ab9d0461f5e84c24e1eca14fe033358583565e025d11c05dc48ad457401e5e1d9f13e58198331fc4b6f415603011a6c55f5a606bdb5f5feaf44dd80d5a02d421a1968f857b3ac997163d819cbcf7ce062b1b3be765b7354aed588597474f7501a43b806beccf09d36e270ac9970d4f317381e2196f8db9671142c12cd23425602a5c429dc1755201e85eb5324f0e5bed43132d1ac813072238aa7d218be02042fc7694687cd09932a476ec7f9c86cf9e79dd1a2a55ae60f617b6af4cf36927f2c974ab587aae8a025934b0230fa64da8f6f87b78925380a5cb73bee60d7bc5f13b2c59a43e892592c1c6ca4304c68682569c9160d2e581d0160c918264892ded9a576ab4e8276c9425803bf4bc0443ab512afd3ba37981d633ec6ee10c864e49ff44a901a7fe42e22524500b7bfb40800e3f469516409e0d33979ecf67d8830663fdaa55ff868603c34ce4c28a1eed28b55c1d1eb982cf787ed67bb662aa0d106874cc33e7cbd975b7a67ff7567c06e9eac092d083e92f24b9e11ec8c65ad031dbf5813b5f2a98ac378caad256745fcca989969de7e0c33ef591ff0efbb3bf49cdf666c8803f6bed9bc484d869dc9554ed1af8ebafff049275ce5167d269b95cea9902b1e9bd373a4fc560a87814461d416acf5bdc4a3e6363438e0a8fb66ec7a9f049f65ae2e7609b5dcee9eac10374283f859316443dd99fa6686bfa5b74659e4b865e36288c2538725d3de14f01b45957ebe9affd5c93c91e678e6053d71aa41eabdf41cfa8fb11be455478fb4f24a1f2d0783f04e0749a0d4ea85bac01a2a9b085dd0ff193659869f2f5cd34e64eb4508d5fbfd5420aeae695b23b2be5c8cc4b2921d8d91975667c90becccac8faf5d55b63ad0a950fb6ed4c7aaae5c694139beea53db36d63da532d7e9db28f483e74cc23fe4ccbb74f584590e41b21362a288c36abb31b66ce30dea8623f69d334075771c6712655b7288b8d387535f38e69a6b8bd9918f1cbaa3e26a022b02f4eb2a2a00aaaec633e69df30ed74c37dc967b6d84d7846e3de14a79b6ed808520263cf82918dadf07ef6e9d47de1ca28f7ef3b4ba332a5022c296e9db4b5067ee8e1b76a0862d64c5169f0435e2da706504cc5546b069b251b8ebca533175211977151d01525d94806fb19e5015734ed49c319fbb3cd951bd24fa3c17ebaaf4992ce68e11dfb93e0ca331af66d012c89ecbfa33d1cedffd4d4d3a60e16b791fde70955c4149828cc81ffcf354d35e94a61815806c9865db552ac36bc255144fd542ba495926facd482a2d6495f6a80ec99e2e1ac3c92400d399d5ed69fe57c6102443300d817d6c41bab4d7b3d65b85e89b0894265c04f9adddabbd3fe3b08d6e7b59237adc7ac54beb9e4b4b6fc4ae527d91a933211a0da8579c5d5d8308ac9507902718a9e2880f07ba87f8d9c26d549f9762accbe2b20466474f154602c938a2c5632cfbe312db2329f8a875575f74541a2ea155e8b4237ddc2946a4989e752430e119f417705a475ed5295e0a75058a050852c860b088280c079f8604ca121b5ae9974474a55f87d6715f28f70df3f2d1ffd2ac7c56cee785733dacd4e08fcd5d9b0ac58717dc1db8b55d7f253862c2be7964ef92452d3ec4cc5a946301448e6436c72ad692ff5187506dd95c46c0806da5e92d7fe7963f44abac6595a123c9521a6824151754403f7c847450a1dd8dc58a9a70bfaa15869a483242e241a116d35dbb5da919aa0f123a6aa8dfa225297fc167befd74a821147af0905559a0cc005fa9f810ceb0f7b08532c895f43888119de264843198cdaa4b3bcd55c81025dcf7a2e235098bb2b32c1da19d24ff1ded85f4d8cfc3c7bbc9183b7e649c9ba916366c19d0cf24ba2d6e901fb2f3bf4efd1e5b7d05045e696ff9c914d2d7f49b9fa0cc361faafad2829ebe83e2ca5cde5dbf26809883856e11536ebba157c7e272910c9c3237fe50155b0bf56c528b88008ef15bf43220a7be187a6383123aadc3bedefbf6c2543fb204f56573d289e4a7240e31353cb6a70da154b65d97db432b54dc1414b5693cb59994f98e7f7a3b3e251f084508e0dacf69dddace6a25a39f5453f83f05a6720dcd49c46a2599105e415aa5e700d20a16d8084d081fd4615fbd504f92ce2eaaca0fc08a2deae599beaac56b464b1f396a5e900b32d7f7f8336a8a2608d7ddc999f2168661e39140f96bedfe2aefd00d97920ecccd30d0caa406ac55e70b0538b30027d11e7857a299ea40de08009d05b2b8d98c9d1ab59c7922c515c75c15d6c22fb7747a496823a10d15205cadde96133604765d010081fa323657b8c6613de26fc2420551277019e5080a899c6355c5792494950d38020d78ee567f874364968bf63c084e0010917d2b3f62e002a4eee088dc0941bbde5334bb9d529c6a329665e1bd29b24470f9709c4509caff8985084d4d3e0e26814d6be4f3e1c4e6204333c42f4e9083b632cbd8830c3b0845d4d5e28e4776049d3a67b4665a5cde9ccdc681b04e75836eca480e748186874cbb5cc84af39b8108d1713b847a64254627386231b8a3e5c9198bb9576fb14709f4e1e4652077d88292d49f3787d240239e198236613343142a5cb5bc38679955e0548ef780aec410925fd3480dc2484bf768cec78329fd4b3b5323681bdcfd31b33e04bb4848e080b601c00d79988960d51a5b9003a2f5288caf4d88a06e29a2d59185052e1fff0e26a2313450820fb97b0829828c55ded846b384356816bbb735313e3bd3df52c0a34b2f537e991bbfc4eed8b1111d74d1ac37f3d277d30318d050cf9a12e61a540c3563c9464cf3bbab4bf00d34287eecacbf5bcecc80b43a7d9b272e6fdb0098e333a61f2561ebf056a45d2730a19c618b3915252caf5d64373e63d8bcf244e22ea9ac76c51eefa13fe30582e09008822285f48e69d64a9720cb7c8e2cd584f16f84c260382a05964459e1d47e59e73eb56e43f21141535761a78dc5d554c837873c8a44ad22adb746dd29c17261dd070f932d66151156ee2210d1295e0e9841b142e61c262030bb5e4f39ba412335cb56f8485ab7d583ddd48ad389d8d76290e8ede85dc8c5d4a7ea459674d6796ae94ca5e0451aa72854ed792a7a46a5be142ba8081c23a59b98022ec572d78643ab6d483043152021f39ed4a8cb490f5519eb33c2319a787c18bfbc4080562ef033857759fca0ab7f16a6a8e21aa649b8b336d5a3d95983f092b4def3a7d16d5df3423dd03bcf409544a97090a1abfd140c05eff2931062a903ba6b14930d23c07b3649881fc7d0e083a6c692649c8ff86301b784e347e916db7c4061a0b8c28be962a27a2b250c336462e6ef011def9db720d4876ec744b07c6db20f9c8472701958978dde5ed55b9e26036d4ace9c1bc8c717775fee1c018db1f792553ec60fbb9824de8809c4ab301a711562af1f9999b8142493f59e002ce105eb08aaf8102e16d6557566b97690eebb7abab125e0e2cd81a5f4fbd1fc69d02927e0da70ffcf8ff672e2e0bf9e13fa85692a49246ee1c960a7b08ca51f23d6e88d388954087cd69ebe981ea1c292b89dc3e13b7534318f2e045e7032583e6a82c86cc45f317b2685a7a10509a0588cb161648e29d3f2152a441bf523c321ba27263a1f3d4a35d9358055e4716b09a45ee39e56195368d1c0b9be6d5f48b0d1355694ee946d3c0060e7c9a15a58a07b2c95dfb8c3e430108a7097d6b9ed4c5938b1981d6efa62db203989b49b89141e462ab64dd2ba74f6732361f696b94ec555459d3b81de4ac571280def16036c96b4cad2b7a3f61ca20d80b4f66150e0f55f31f185c5f08c22f186ed28279827e710ad611e551b296d92b8b30a7c5aea777f35f3406d81848774899829ff4d8d331a34b3b7bd274f9194938b15d80e982f5d12fca7c7f130ef7deb1741206090a1d73ecf719ee6238a62d7747a247f9d4347dee54b53d7c733673fc62bb178ec1e4a6b2e994d60ca54c89cb3f096ed2b4b1ac49a6544ed796501730292b6c48a94cc179c894aabcc3c48818cb39149b98d520b89e6e13acb0b58aba6c6e5c361b88c3274c0c5cdc7176e96d15084460e05b8749e098232794860c2487c06195ff51d230e3838111a25562fa3531a7867d69c85c79062cd596603404971944016be91b144956518bc7a770ff8be85106530e30abb2c9d7cb22540ae85a976e29023b1b51b46321d349aaf80fa729b4b98f46c065f5218acb3c40bcf74bff5d75bb276f5482546a57ff7db1bd857cfec6283e6f6c9074fb313d58ead2611933e1806c4e0bf82f45d139c7819c80a666a2ded85de02f2bb7884569be8dfe3335284f9735c8a6518ab69e5402776afe7eaa04ef6280ff14381ec378cda5294c3dac8ab18e34c9a97df7de86c165399b2f850e0c9e9e512da1815c890cd44eff63d87f5a1191a01dc56faf74435c9d9e3bd910aad94170b265147300f3cb72a034b5661bbff366d0b2f0840e10a0d2ccc6dd929b0d21b20327a2209939525d85b79d001195782a3cbded80af8d31bdf0f8ff16e0d7ff80a2d8bb3c69be56b8048f70c2346fb160eed400fe49bc6c259bd056245a4244bd3c5a45ae881477b559e55efc359c51ec3bba5b5c6ae68b45bf2fa8c3fc26ef5b70a31ed90b40ca03bc68b3109c7beb3cb04bbfccf265f1726a3080e14f0dcaaaac53d2e45971f4bf27eca26c4c513b71a0819b89de970402c604054fa416c157f89025c6fb840dfc4daa4bbc1a3e6b52003edc3c4ee4dda6af4fedce4ed8d524ae9c6d95982c4b2907a797b54895e071a90af0fc171e941f03f8dbf3434fd3e01aea48e78b6f71b00e87d569ef5204b81cf7f850e43c2cbf65648943ce30776c8851abfa252c8021bad3ad5b60ef39a24495aef0eb8ea2617e6c3f2e541f9b7b40a4cf758d101276f74dbe005440d5bcdb3559f3fdeb12e43318a423664b177e92a6b8eee5b1dad2aa678c95d8b4f4c7d0998c2fff4b4ae8007dbfeedf8d15c43cef95c9bc8a792595214f890951a70606e145c7a419c317cf110f345f60a7f661a11342273e82e434632272908eed98eed23343888c8eab4c227a8b930aa8f1f38a55670c25e7c024f9f4c7e407988d6a9a3bf9902eebc74d741a6e7beff58df11d48d4f23fa042a21d4a82703cee87e150ac193dfbff9a383ac42c4e399aaa8181bf04b9607c84555b3ce5e667ab93112bfaa4641bef5ba11938dac30c41080f2c89f6d40967d70776710343b256538eff9e511248be3742bea461cf08d3198917c4d73d0994031ea3caddedb18ab13ccf16e7fab631bbcec34a985515512f378729acb927b78f6a097227cc329335b9a42d6f404aeccf1f658f454807091bfdfb2196438ff770f73f8c0e00217afaf6c50b7de43b2f2713136b334d560bceeca4ff0893b3048dc27760242403fd46fae57d17ebc25d450fb015ba740ba352e2fa3a489daf2ed0c572db2641106366ebc7ed02910d3f3201a3265b13e99100a211fc219d4ea7f4ef867b8c45d5dc1f18baddddbc6eaee915ce8a937cbb3c4ffdb87c7ec45283bef965684b9dcb23f8676439610012617e09b6f92e43027d9e1e7038d27f56a8cfe460dc6be3fd241a705208e418f2ea90e7bc0c1d1e3a7a59e8ca01d923d4afddff93aeea8f1b141ca894ac5a5463059234e18c6e45498f0fd9843a91fb14e0e55399769a8fb5cad34f2715bf644412d819e9030d19e7bbdd8c1348cefa9386b14fa3fb6c89e02856901bbc7415d3b67758bcbd0401af9f45137f643c829086da3692c64215282d77640506fe7f4606d03de20a0debec44471444f6d017cfd2e1268412c28b2abd075329aead24bee758c859d7adc31d685b3225ceb3b11d548eb8363c4a20b58b64b120f6bdf405ddd59d0a05e165f27f0fd7df787382070c0a5b3275f546c0b43660b3beb0c92cd99ced0e1f654d5afe47eeb47f3fd1a0c58c0c7c5b2acd19003e82398d3e2938538ec20a88a7758ef4d73c01cd63dec009f6d197dc102f9dd2532048d0837885a82c515144c924a9083fe58594faa2ab25bff12a5fa950ad7c890de14cc27a502213d4be7d25bfc0963fcbde572cd41c74943fb58b09aee06d7b5f60d540266ad0b71cd6b970e3b7da276dca6101eb4d83c1a6386b60331a7439f105f401c0c3a90356e829c7deab46e29279ce0972e837aee0bf3e6e817ff3752f7d6793ccec4b2dea64c68928a576513cca3125fd60136cf8440229aba281e6bb3d68a93f45b36026f19590871d17f9ec5e222e96073eb0befe3429df507e2d8634c24144648bf1ab100c4f52535f4a040ae42708a6a505b283cb682b3e19f547cd0344041ce41e5a57031c0ab22eff9e1388e4627b17f2697eef0d1370928bcfb819de158a39aa7d93173d50cd7c74d5ce945b749dc338f4ef4ba06f04ed1d4288298bee5e7c6f8c2462096765dc239064fbe31542fc3d508dc28c70a769dec6b929e1132fccab8823a7c5e05a5b3d02e80262064b364b09c38e9e98f21fead7576075a7707799ba2d64773450bf71d0a732c3ad4417fe42cd72705849a117d99eb5621c607bcf9f709424294522353048f88ef1e87e874df11e9467888758c6efc37f05d4afe0d94980150c904477dcdc6b1d2457e2e6a35af6911fba61872eeb41a277eb5ee15e867d18c8272b5c7a19d89d4ed4ee74a90f2f2885f40ae51bc4358d1c1d3e72eff27bd04da39586626d3eb67920e939c5624b49b1aaa74a4977d525dd54f4b4648455f5d7ebac01eed0247882debbb79fc4c3272c14487cd5e3a58e7679a682c9178c96d919707c50ce62d505e85d47808ab5b90966ccf6d54ca59fb3ee5c64af6693ce7e008b5cf17293a8c80b35ee45580ad9e2e854d17d2298fbb8541b6931559475a94411bd09cbfcc1a9f3f490f85c9bffb7e14cf6529b2606634c49a598a7dffff38a361536e71e2516d43165be892a0de29fa4cc542d8657168e730afdef3dd5fa6faccfa4e0b862825f6a2661b577e51145628dff653aada7434e73b86ae623fd28e31c54696740dc3cf94a850595e594ad21f1901c74175a32997a734cebae0aa6e36f3bc5438bd358613a00dfd3b261645933f0e1043887b3b750b866a83bba955a9434251624a0ed293c2f8be626f2e253fb0e2876a2b55bc44af679d63677f84069777eb5c527b8aff640008d03ae557c60138d7198a88177acfa385cfe105598326a957a2707fc9c305b24d85f41fd7910d1e399d81424ca1f725f7c499ede1a44ca521707206e5c8c9efee7b037e42f4cbc794cf81e1b5dafa6eda6c6c8a84dc9022733ec8ead63c9eded89f7b88cf441de3175df062c33060426e1abec6ec9db59e2c384e47245b84f278c32508f3e497c3b8d55e0bb1668c4c92bad82e52d2f2277b7ce0a44984c0a149c787763bec37669baaa3029788472c2ed37743c92b3a5d4979749e69a7acb282c0a958fa79e4a99825926bc86ce0af8fdf094894d5f19f969f468b54f60fa3c5da234aee163cdb1eddd06a5064601442e2c5acc2f51eb464c7adcc295f475a705e5376461ad63bb2e1bdb98189041a831de7668319b0f2c5eeabc1b9779bfdf02008850f5ad34d72c7b91d060dc9c4437c9604261abbae1edac6d735513f37374a473359bca0de3dadbcf5a4aae6967607b0875d3e83489ed8d285cc9689d6fe9a674bbe8079319a7018d8da4ad1822bc8825e4221cf53b4259b14417fcb9296f1c1640d4cc64dd277bcac9121ab7c03163c99a15f0bf95923ed023f8441377d5bea8da4ba06a9308e309fef84f4017f270db9f72f0e33c7ee66fedbdc9390ac082067cb43c24df369882261b267050945cbaa05ca40a4facdb8a3975c8adc925f229aa47aa911ab0d5a27cb77808053e9703f6883d303de3e63b0c0e958665875d381246b6a453d8fc00bfffc7c900ab461128a011d60366603a83f0b5b3d91ff5284152fbc2e6304a631c74f57f6b7ce624082dec179d8592c2f7874bf10bcd988de6b3530f251180d83f1001bffdabeec7b3480ec687b71abc96a5dac107193e70e5879ceb1d55d66926011cdf297622259e3ad1ec12c877f87af48a4412bc12c2f61d87895508b7bd4462b0aef6d84d3b9ae1f876f60f2a489e32c4ac2151afe57f895c38fb13831410747f996542afc6cae84069255fd5f47a95af3fbec5990dc02828943d9d2a1f6f3c48c592c691d145e26f194eff842ac27ac5fae616841c8b4a17352e974045b6d553d4ace58b08c4701c5a78dc469c6c62d1d08d038cfe485af1dffe94d7c6e0450f202ab8c4e779dbf291c44c5df8017c5837e89010f3bdb1e2c4d9859950fe7291c164d90ddca2a027ec7e662b8d398abd4a10f218e009aacb3fb594ae072e0261c5c2937bf4f7e9477987ed6d318ba21b3539b3257a891c7130a30ea14807420f21a978b35ff9665dc53e6e3d8029e24cf1d947e1a02a4fc19c04ee0c45bfc87a842ed5c6edf76dd22c465147fb3c6442c2c0db806a51fcca6ce790203cbe9550853286a06e1c4d829ac35143bc3b6b6b2142c71513a1eee2b4effd7feaf120548c4f36c8be97dd88d8c0cd3142570c643f0626ca7f4b5deb9100bcae8af10423e396e374cb56df279a026604d6ca94e51a1284269638ed03d47511dc86779904fdc0ea3a3790c586480a7fc7cc611c43b5575dae83c4adbb4444f8bb077e9a8169af9aa759e0cb5312c8694e2b480857b933e53e2ff5ca424e5f3428830471563c6741de25a4a6046b93f4a5ac136b7697824733ca61630798bcba6391037dfa621f80e066f3e059142f890c3afafcad20fac42f961e17fa5f3990d2e95775e5ba2a175aee5a2965cd5967d2cc0f12f4b50512a472df2a3924a8b3f18006697d8123844cb0f294123cb12fc296fc25414cf5bbde37eeebb22e12d2c978b5431168f208bccac60aeb710795037f99dc5d01ccf0d969bcdf79a34b70396f36b8c7088bb223666e4a5f9d53d7d4858871bcda8d55e2c49d2ff9ed8e8b694ec553da9f3b84bcda99da910d87f50264836b54ed8df0881a601f0cf4b625e1a4ff8881beac96d8369dbbbf8a811ede969e4b49113b0b6d0581db4bcc1654b3d8a240d3336e61acc09fc745de36ff760ef379ab2cac02a4b27427217c3e74ad8b36347482002e08b88746577e7880fc5e66357cd81e75926a585670e26446956cfe2e26d7c705d2684721f39449a69944358818aa373a584caf1df1f582222aab44c3dc3fe07a91a981a3b71bcb221c717d5156611b35f0266433385e252a15ca0ac7cf8cd6099347806caf03110ce548d721814e443ecdf6d88f5a6812422af3d2a922b3a10520df7109eed393eb18b511bf86fb89c9b77acfee07e3400cb28a0d1fda8ad07f68f81568931d77a2b65892cb4fd877a3a4a8d9741ebc992fc0676d2a0ac1085ee21d394c106fa5b4b2ceb1506e26b8ed4ccbbc2899d69145bb2c98f709d5ed5f17b0571d277f5d0cc157ba50c05d0b7e0e4569fe45c5ce7c5dbad08084e0afd66d5a4a4ed7113ffacf8adab236fc9b9f08e305090892c6f3491b40abe7810e1fb2c349fcd8102ac594fef9ae6581616b43775f969e3d0c9baad3c0deb8cadd30df3a505e9a6fa308cd636f0afe4b44e76253035ffaa542b745ed491e4c536dd3b3e915da54f812d192339df47fc92eaef1058ce8bb5a35629a0b6d460d5e87a13490fc30f410b6e4483a3e00059746462af9522da0f1651b7c8f581eaa94745b4c9b306da76f7312499b0558500f48cbe365989248234055fde339dac2b3237eb50d4f06546a17de732d7b4132cc7412bccd142abfcf478cfc49e069117b51062efad5ef377ea39badc706b1c773e93bc4508ab5bdbce64c4656aa63507531f7f01033cd519d327a4454ca085dbf7169c28fbbf116b5414ad74742989d1e44d35ae1e715ef86e05e2fe764f6b87b31947eef15e379cd01e7e2db9993bd809573e761c71bb8015c65a0edb539a9b59f857d2808340122cd739054b6bbd3e6b7a402da53e06269b2f3671c78bb8caee7ef07ce281e620309a8926ceae15fbc13703e05321e7f60d0e8c3b1f7bdb63f5d45defaeccb7243550cbc3902fbb5b3b9b12e603518cd80dd0343cf01d8e62eb3cf885165697cdb56c2b47fb29021fc4f780711edc50c8d2f28257bd76bbf00bedbb2f932bc2d740c78a8306663b81f70c9c92c3890794d1a2ac9a225a09f61f90c98dbe24a59f3a0c63c9914db9e5899d64c11bd275f7acb584fac85d0070ffda14ccd44c20fd2190558c4ef18cbfa50272be2be55c19829732c19ccc7b744b8b1a367752992b945deff7f3ef4434542d644eed1d55aac760e915d88fe953a79b8c9940972c06438422b29277b5d4fc088c4ded9974e8658927f0194f42e2f1f678a27aa05924dde2d0e545b74457b2ed336080d0af51799e1ec4c348e3af8b9c9d9e5ad617c22125240c1b3b56937319acffa7cf0e0fe4cfa239e28aaec5995f997bdaab3ab55f0b31b799855c6a6a4ed9a4e26754912159f3fa30117f49f4469425369caf8ced1e20a09a6abe1c4cd4a65c202da94897a3e7b1fca82051e182c4e460dd63d0868bdce4cf16021d364f7349aeee1627bc36a3bae9c087474020a1011b82f6d0580f5e3f9b56cb8bfc748a237ef392ff55ec54385255734eb89d77a5fe5e4dd5869ee335af49e96c27b7145f9a774cd3b974ceee44a339ef34aef551cbc172be77c46abde69517c1f5792f994aebce3a2d97dae68de735ef59e0ad3fbb1f2accfb4ec3d2dea52acb172d6e7b4f49e9684f771613d527596177a4f97e79a294dabf5e1f24ae9f081b183b8789c8ba9bfd1cc274fb2389f5df4feb0bf3c0195509b880883f44369176bd116fa6726560a6a6314cb6489bdd4d6fcf3e1177d200c5aab772a3e55d84ad56af2d811c4538a5e05168185596b6800f88e514d8c57c8bba069bf266f1d8ca7d593768b94a931564585af0b28d3695c4c8b4d86bae528dd173b5cf64cdf444969a1d2574a156dd3c7ad53ecb0a1cd5b2fce027efbee4d8b4f2ac60385a0f7b102f5e91289266d1c3222041683ce7d40dbf44741ee3a6c499d41fb0264a970d4da57689a78cf8aa226f17068360b7c9c622b47f5e814599dba505d47442d387a8f5d6e16d5d2ef596044479c109d54a84448a1ea8fff27b4857facfc8b89fc28bdda8427911aacdf8846c1b3b3ab0016c67d3fe48bd921955e49a0bb59070933b6db59501f83b7d2c4d9b7ec7fdc65185bfd9471eabb80b267c419042c154995352eb7b058c05875cc4ba39b795dae580de64e40f0dcbc291fe312e4cc758390e1864c41dea4b9bf26542d4a22718d9a8100e1f9dffe385f04b4b80b9c4f665d45cc00fa181a3dd32b74671e653a56bafa70b01391e45652ee92a0def7ad0a0a791829ba3d34b219133dfc3076cafc98c45af60e7b88f109eb41c026e743abd772b53f38980fc04c6b7d62c4137fb94dfc59c5688d571008fd374e0f2bb49e62d55eb37e049fd32d528d0721bc359cbf9a173acc71adc92069d9e17e664d256a57d3f2e17d267aeefb50b51f769ff3b1e133a91d011b1b47c3775a5dd799eea3b3e72c7b064391cebfa216c3245de47d62f7b4b5374c1671b3ac33e37f429f5288cf12e297caddaf09072a6d9fc804a2d8650c06edc41e82c444af34de2cbce0db9677547fc7ac44b6b7cd50bc5a4f3a33ec2643a7b04179d6bfbd23c5094c20e365d0ce782dbaf775c2b9c416752d4cbff1b2c26b76976cbf623a97181721beadf85d9046a01c9e5c740991262f28a2eb95adb5a84c12c3cd880a6cc1b164439514b47d008d4ae8585896718b952ec7438a1ec6f7c0ae6bb7424c1a71f703cc40a241c6d89853725fa47ff8899aa7984c867b3692442b9a354a9b622b98023247957f349b4d239cf49e91ae6552abf5bdbddb6fdddba1565631e507ff8cc5e8ad5794a968d8bc1f2087a534c263cc2d85733b20dc4a5b11523c21e56a49b4437a50b9442672d5b1b621f136886cfd31672080f6993f105221684876bada70899577cd1a6cad80c1b1757e8047deb9fd178fe7a7a2e2e40ae49b7dc7b33aa5baa180ff64b9f61fb3fefd7d3221944dce12b560f537f0ca26e571cf646506ecd82f96df3b7f3322b3715d2946258c80960d1857dd09fb45e8a613fc4687c1e0187800e52b72188d882018f1ed04bcc624d76ae2c4a7e1b818bc594508de07fbffee06d6c8e8826b7e262b87ebeb46d6a801d4620c87551444e754e6d77eb12b75f8567c5ba899103862e3692d68326d01c5c254802817e74be008dd9fe9a0ec1d4f1934af9a1f7e58a64bc03badae2cb05b863162f0ede2f44f4bdea6f8fa3c0aac9bd75e9f80d7f619c8c77108171fbec7a7f3f15a1fe48ead64f495e8f6612197c2950fed8056d6adb04a2ed6e4f061c8bfcde7bdf751952976b5bb9ff2e0a226d6d3dd48a81455af70c268ddd39dc143855dd97ba8f125cd1882f46af64ca13d805cc663273c7ca9f16d064108d360ddcc8cb8e5556642e060ea2efc942e84816a489339de014682724865517f3e4f578aba13dc193e108a90f91871e108ba9f4ef7d978325ef39152068095da416f065ac25c06b07d3faed361fe3a21437ba497bc7093dc7450afe64b2e6165bf8780f6340335894c2264b609f3cdc3df0e03ab7745ed039e559569c4f0fad25ec4afba00b8378b411f1f9bcdb930e311167a1190cbec0dc3107c346c39c267885e2f997dccaff51cb62fc07fe88536d326e51f40802bad7b9142d6a2eaf2ebbd2c66ccc9414ca67b31e87855185010d075e435105c49cabf6964d888eb33055407f30b9628c5e29c35f57b0c71cb65b30d7b6384b1387db65dde7c2d79a649c102ee8afa14fee69f932f59b8312f433c12077d1058504ee03fa0b237783892caa9d9c8150ea0638e51d799e0f89b1667c75384e8838bd6fe69124fe01734a86ffcf1bb01d0a381b9ba38976e0b088dbd43b6911dda185efc36ffec1731eee0ae5482310ad968bc988f2ec598cd14b1370d6c12da9819602ead91968ca6454cd31574c00407442196ca78f4232fb5e870ea218d107ba7ce203f0d3573618cd40cd0713bd413346cc779e9c2124a2e54204eac842ab80fd5d441973cf05c9512ff186609f402242004bab26fb952206011a70d494f3927ae09ebb771248cddf1f0d15c1b1b58b3e46e110c7274171da0ae4ac26e0a432b32c92ed3beee8ccef890ea35b3d4ecfa27cad56b703444027de0dfcccc1ab18448e42612d9ddddbd038c0ba80b950b45aeced5b93c93e5be6ceeceddc198669f05001aba6aa0a0bec3c7d7bee6666a43021ff1b5f4991718fc9f0b8a4926037a2d1e06e409a1bf63fbb5959b75d2ce71cc85b5b81f33851f23992cf2f10ffe917fedf4ea5ead6cf00edee9f2e95b6a290aa5261e3e5237f6c13eb25f5bb9a96df75e5bb9c9b530c108a9cfd1703eee84311f654e0f17b15807eb480004e0c5b1c954e31000191a7236c0fed335381688e268e049be975dacbe562b08326cc770b36f5ace30bc6338392707a23b86ebfa73ed5a464b8c0c0e2d15be68285328ff419d93ffa02b65a5437c1f7e1655f46584ccd7e24f2f33e00ee4317dca098ac765bc7610878132b7a8736337f3e95ed5fa19a77dd2198b7055f66aa6d020966eac06ab9193dba0fcc6319c6a826164b47818192d3898ee0a900801c8efa40069c807f1998741f1b016cd6b4e105048c4d7bd62b85e358acbde521017329fcecaed5499d3c380d41f1bce7afdce033b86ebf765b6c75c464688d6e26184d03d02131e21cb7e50fdba63702ffdfef859697fddabec7df43715f42ffd4dbdbdcadec37a60331996cd39e7c57cdcbb311a8ca6cb1fc245947de93fac39910925af9cb0e00532e4a8a1081cb8b083112f7a4cf4c665844c132eb381b88c905779ed13559a102864d7cc1a18355dfe26e2b3891c89aa4d46e6c84f546d417eba7cdd4554693838ba0bd74c653f5c2e2351a5f5f418e9f2f76ba6b69b9d24aab4214376922e5f63cd14d662b1ba7c0d485469ade8523353db4c0b88ec1a8986a1511c0b8c9d23f695873b8765010206fd94154d27ba48cd27bac8a8e268a28b7c1d19ae0641f0d84fbcbb82101d17acd8c1f5ec2174f9463a51153b2d74ae06d0466705d8c2d144559723bb2d749f1115a29018443a425d18421de8405c741e007160007d80dbbec08160d3bcb055a1ed1dcd8aadbbb043a03317f48e9c6d218b20c38a645760580bd808f0cd0226c1b558e8b704b666d604f50ab4d713d069058a8229ab3053208388d046f6f26510de8745cf11b6d087b157407c060288bdd201844624fe49c6b7025b6afd28a5b6f24170d82310dec7638543d8427fafb217c3e3509e724f76a3b9a1cbe7bc0bfd7633e47f4897ef6d256c2ff1ded0e570284f592b7bf95a2be47d9d91ec7d1d17f2636c256c1779cf5538c7a12c927f9b992b9d4be4e9d217bacc1e0a879325f3be8ea7d3b81e105b098d8864911fc4d45cf254fa0fe67c37647c33a6a6a33f9408555acfe8bf49fa8fa24cffe15ea14ee79a86e3c3cdff349c1c1a117992586ba6b61b9d99d27cb49ea8da64445ff2be2fbdf63ed3f6f6676fe47db27fda6f373395fdd07c666a9b992c3251b505892ef245def7a692f799b4b7bd4df391e9f2b389674fe2d86f33252f7f0b125510ba845e7ef683e34ab699d0160463ae737d9deb6dcf280ecb61e71b381fdc0f7992bd7a1c0d6c996f08712b6209ff742722511e90afe1682e89825da6d47a524fa0ce853a1d7a36c6b6f644bf8a5dc93c7620385017128d4825538909ca49849b769fd30ee3c620a20801c8193ada9d23c622bad36f479f189ea80eddadbe252626a6d853cc2b7ddc2bfd59e77cf14fefd39faf9e0177b7ddf6e75ee9d03dfedc617f721dba5f8bfd69af302c089be3725d0e3bb49e07b45ed92bad3d4f67dd3d5b449e746ae97a7b65ed5b2eec8eb419a481fa09e14dd3365cdd804ae9d3a740ff994c3aac376ce271345ae49688c5b13831723b449e5a2d23375cd4505b3359ec4db769b03faa4cd500713d667685b5514ad915e1685c33c5fd98d6e37c94411e40c2703fda40650d23b823689dd7c62e695f55eb439ee46f4b6369269f93de4a4df4561b8b60ff1ab12f273afd96b32bacb5fd850822f62a7b2232ac52ab166f9a876544c88e71dba3886d67eccce5b1e71911daa959d837a7bd08aa379ffd722b23806d599685e2eecfd850649144b67ae3cf365e7d264bfda92f3c63af6e9219bb224142834e19afec54a2748b0d5587e4c6cb8c938c5f31a17022acb50e67c858e92829fc752ece64d2feb7d3e9e5a5dfced1c0961ed56471f3b18f1b8a2c921080d6dcf66a67b6f10cad79edd9c694d71c97abee6c9baaa3d3e563bc1aa93cd5a2b4e6b4673be79db3ac12d92bead15d712a4e975feddda175b2b8ec734a6b3efbe6758b7a739365dfb25759ad435ab586d65cf68cd720bbd6d46c31846c755bada01c4d3c82e63e721baa21a441b5e62e5480a72bc093fcdd69e1660ba3d44a1fb557aa1cbf7b855520f224bffea83fac66e58d233484364ad9c7894cbf51a3ff64bc701d3e066d6415f6f059a00dd1c3074054911e7e2e71ad97f48c571f72579a4a53e2a6ce09a1af39d6c286e4519d91d611877d967889963869ab253eb25697b8a8dfab4b3cd435b7d1fe729b11af3df0ae337586e7a5833b01108155196c5716069a51449624db1409928ca32180dc45def4e7276bcdef97f876efbdf7ea1d733d7a446f4ab52e71dd351e2164f9b03e1ff47d60ef18aed3cf2211b73d4b2de2b5e7a9459cf64cb588cf9eab1671d9b388daabd9177148bdbdb72ef1dcb5ace912cf7ac669cfb6e98bbe365de218c7690ee3ae710a69d4078d3608a44bfc769d2e711b0ae912af7d4724d2a31d43bbe94b9cf63cd22508a3f12695a1cb1f1979c9c90623a44d7948bac465d79c16d1a13ab4b4e90eddd1258ac399b60da598de7649c994b312cdfe36794720a1a14465290300916e1137bda13756c4fe75ae28572023949a4562b4f3e79426f152c66db62fe136333892fa96b1d295d2084de2230ae407fd41836c5a436b6c681217d1996943599415eab5ded024debdddab6c0d9ccd47807a4e427315c253e9f2bcb88e770cedd38324be617b75671279928fed890487d673df5d77bd9f806de8d8637a00b98bbde7cffcc9fae5f388b6a7cff42171ac5fdeb92417fa0c6880f2b46d256acf41e2b8735c8834b9bd0a7dcea149dc768d4318d05e5d358460016456ebbc3b6467a2dbab3a1f357be4497eb7e76bbe320efb0ded18da434fe2b4e70268129f3c3ba26d3375a68e2671d93d9b4dd326ce6491add92ae157e09e7dd63884c16c52be74378db98c160fb3cd3c4c8a49c67c5235fb1a8730188421a1f059c3477b35da36f3c7e4ddc88493b612b59746a290016a49b3df4b6e0f792a1de2a31a46d8d8ab2474888b88709149241289e4658829335993e5d2327bcc993933840c1b3bc67ad3878d3d69268d4ac750112fd288e4913c44b8c81ef992af9721e491e9e3d2a2ea42b5e54f4e425b1ee9fdf8188ff044ffc6e723208eeedec8ee3c02099b5d7b03870e7150cf5d8738d7914842d75d45125fe48e71dcf3c3ec276816035767d422aab783f6f955c0e9c9225267f32e4767952581935cc893fc24b6dc19800e71ad6702e810df7ada92258d3251afbd5b69d40c981c982d5dd2b5b9fd10cf3d4563004406b0254e0e1de259dfdc06b72401b68dac9135218ef51ca3431cf75c8010bf1d536198113924901c5bfe903f722ca1519cfd25f62a7f6e4287b8ed18b7e17e731bd06bd06f5ab656257b5439939f8afc990b2e97f2c35efa1b7b55f26870b9946de45f62c7644ffa58624b1ad228138196d0dbd62fa25de3329b27643ee632330fa3c5c308d1d5c4c4afc05df425fc0aae8b3ee3d8abecd1e0669e48cce9c523d4c747f45954459fabe861af9fc45e558f0627aaa22344222f76f1f3a3f5672e388d7dd60f3b867934388d69fd70c7682f2699114944d2a5b53f3f66f661cffe88bdca321e551fb363ac2765a66439a149da6f6eb3fd887752802e548063e8f24569e8f24dba0b5dbeedae0059e41780096800a9cdc7216dd71c7612873dc4678ff1272f4089c75b823e273cd56762c7d06e3f37014b1cf669bd2f057d3e6ca95f80bdea3e1b4087b8ec9bdb688f719bed49a34c64354f7b4c3ca12dc72af6b3660cfbcd630ff1d891d84df0e8d837b163302ff634b1e32b6b62c7d0de7d764204c594118eb4fbb577b7068eaee1afa06abb812ef221bc0277730457d3e57f345ab21fa2140602a6382cab18a7d7e4cef92f7b3587d84df088a95e342277e4993d4f8d71d931863359e47752802cf6b180bdd0e57764e892a3c9eab41e8dbdc368937fe8f233d7808ce3ce7179944ba0bda233e3b66f1cc2743d49aa084a91555ae78a76af1e3964cb967480ae1c8ab2143ae3f3a646fef8e1d9689b9cd936922559257e05eef533e5b4dfca6d60bcc639d7649197cb6831f330303c1859be2e0e5d3e470588f2032705a88a2f9f63024cdd0fa9e00afd0e1c8e1be229bae0a10fa12c422be8f277c996fdc2a4f0f8335946a36d137d5ed8093f527a79f13249a0c461cff8ed313ac4473996c8317b65a355cc62512f9128f56a4c0c1560af663655d33361f2b9096800a9953c0e994d26dec7a3c41427fe6abfe26f223b01a3d472ad2df50927760ced0680e2ebfe03ec2732cca3f224060e1f8131b6d67ab127be0cd08703204087f8ce3a3d3114354291001de2bad37c80bd9a0ad0219e3bf5990ba0dce6c69d046c9ba8c387a8c38006e810c73d47a143fc32800114c565df80bdda9fa5d0216eb58dd4d380bdca38efeb7c1ab095881dc9b6e9633647a0c4bb1e2de257e08e7fc4afe03ade587b16b3dd2b47d1d96c4fb98da606c806b8872fba7c1156872ebdee0d9045be03a48010a89d03b22dc5031cb05774526eb37de536da777ae28c4911011de2b1679f4e1f402120019ba3014d68ca29e5b36703e8cb376bb2ec99c9e245e7707a1f38567f033cc9ef422c284f380f5d7ea543979f69eee09243af01b4d1b901b6d04455d7135de4779169fa1cbafcfa91d7a7bc7b495495f1f543d8b295886f79f4c861b75c732b28d6f31dc91354b36f001db9ecf68531c7994c6f5fa753ffecab73ad99ea5e9345b2f07413c771c83225114fd4ef7e660a045966499f6fbdcfc427e0c4d6eb773e3335674a2260c7701d7f4e008c52ab8f43e2031c409fec27b86e5fd3e17a742160af3457165a02223cc0ac94be6c808e9cc69b5b53136b5e5ebce84fe8009a99993893f10d6d485eb0c5b35e8b0d53e8f2a71751688e6bd160174be3536c3c5190e0fe8060b2c8ff71bdbc78512930b7b96f3f738c66a6b8d6664595e68a2ef269ec2f3159e45fe8ea38f8d0d39aa9a8ead490a4cbcf2ddc6283d55c2f2f5e523c20de6ab52d53cc69bf7cd36c56e6b5e3ec71963d65cd14eb4527ce383f7e4b79a706d8b286e8d213f2e9f2b71f1c5f48268ff833f61e0073e29c71ce8f31c618638c31c6191fcad4ed976b5873693a3a3fb18ee69a7bd05c5ace8afaf4fc1fd7ea5e5d8f1e3edc2b96a7a8e548940724a6aabdc21e0d6ee269c43402fed49feadda85103422002f7f297c972ca039dd901598a2c45840f989ac6669f9a8360cbfc28f60af4814eb13a47d069842cf3a3d831b8db8f62e7887df28862afa803348acb9fa5d82b2920a03797523c40c7fd80bdb219635a2b8d80de2d9a6fb3240b970544651bc0134ba2724f172f1f235dbeedd15cdda70b1b4054d7936924aa53037cc05e51ef48973ff10081198504eaa594cf08ac44607f9680963b7af30e5c7c8c45b73fbf72085d708cec53f63881d712381479923f816d9ae2011398974e41010aec95cdc56ca514a8801d5e16d8abc9a3f39128cc875efad5fbe6678c773ef2f4c23e47d7234fd2e6b7bff75f2e735f8b87b99e909a81bd8a3146fa93eb3075ec31b057d853debd329a3fe798bdda3b07cd164a2a5e73fb3956bb091e9ea6f254b194811d87cc16d094772f27b03cc5ae47a23c60ea5e9d8fac03d8ab49fbfd7e31f64416d89c94e17a2ef083810c50126800f74816f91bd8abe9752f79923febf0ea1c9893033b86f6f84960af62ac00118410271600044046cb102ea6528c1873cee9c1114d8731787058501e1816b4dea9822c647baffdcbe75ed1b71cd778adbd178709aca9a5d40d57d439e39c5589f85524115f7ea45ed0f8e33e53caf4eda89d522570b19b2686afa9c6b422f6af86adb4eea8bd7a57d4fe9a3ff25ec997b95753d608a99631a1c57a4e8e4728a90c1b2d9c75aface5eed513c32486450ce22a9278b91bde2b2e06f70f8b2e3d0a5bb66ca5c3374d1937ac18b673c82ccb59cfec14359c59eb1df78654fb4ed0216cd17a6f4d13ad38908cf1a59452f2efd4a5a843d2e1773f1dfe0e1745b668ddccc41e51a6c707de80526629a5f442a108b7f66121dadba44528dbb66ddbce113bc769ce040275114a790281768eae0b89a2482482754422e5928c708e48a5bdd2255f15f2497b45daab5269457355ccad843331d127277b25bd9597193525252585a6a4cc94949494149992125352525220c9b47232a168aec45405e44e506ac8785939a17ce6f872ce2de79572cea7e4917328822d7855b26368a7b0057ede9274f8267ba5034a5687ffa3f2c5175ff42e7a6ef8f0d4305264c68eeb2567880c9c9bd31640566a687c4419943883c494e488e8e7057b348fc9ce114f4e505032842929dc0ac6ce21b58c70a2ec950ef8d3e5a3ec95a4f244e9732a4f947af2a547e549a7a470306088341781c49a0844863c41f9d2618c2fa594524a29e58a8c192a114a183030877faf74bc4ec18e1cc2c9972dcc7d3c3a8d2e2acfe5f31ddadb2b1da695f4a2f76de0337588434aa9c3146365437140645be90c42c620601098f6f1e830521ee5c4a4c454228d44a1ff8f70454b0191524a295b3dbe9472cea77dd29f72ca58860c573e519476276f1b6f46b1ff6ab874785e3bcffd713a9461192f336e9046a612d16f1ee25bc75cc87ccdafa0bd669aedd556ecc0bde4b5f89987c19f897492f132a3c60e4f86951e005065d210dad09ce8f43243db9545438de2cfe29036f81fee95ca3591445da8e4338a8be1f11f692904a8d24186f84f1221fb4f06e10aae67ffc99b1f4095be69f94f02e1f49ffc21c47fb2071dbebc0154e92da28b7c19ffc91c04f19ff4d1fa22924fb26040498362f92fee00f15fdc0254699ed885fe5fdca2ff175b7de5bf58a4c32f12410850a58d7cb1051d7e640154e917ff2ff6f8201b3a7c0a4095ee29f92fca90fe833effc11e537e95875155fa0f00325ee00e7c49a9834495f6892e437841ba7c7d1355fac8117da3d23fd145fe2781481e6c1155ba0b8d64b2c8d802638e6bb56a786a5e353e3c51b5891889aa6d84cb89443a740de9b01ae9fb355968f00ffd8aaa9d44f7449506444a2e09ab8be8f57423ac2319c3f64a07cce9f1b1ad070f227de6a08004dfa9c39cbecdc8d3ec1adf7a64de46b3d17cd025facf888f888fa5cfe730b5ddfc8529192125a49f5b9f1085fdfc124c693f5f05dad03fffa18d52ce46b3cd4820dbccd6a384dbe0277193f761d38f3c91f799464fb71bace512fdc8fb54fa97fd187d89f799dee47d1cc9fb701d792abdbec8fb546449f3ee055be46fac755f5eda6d3d72b6998d66c69893e574cff6d8d7abcbda356e7f268b4562637dac8f4cb62f8b556db7303e4f9df9ed1abf34dbe6cedc9920fbd6dc9a57b17863dcb7bbc5bdb93799635de359689b01f10b188c4980f91d1283fbf4e8beaddbca3ceb1a971132372e23a4668edbabfadcfc1cb509b730596a135e61f2d4269cc264aa4df884c9559b700993ad36e1110694650ffa40dd3157cb6fc2214cde8af090a10c46248d79eb76895c9c8b9379e6402010a6750775dd5ecdef7647e19dcb64c4415cb576763a46ce80862e73ad6bbccb9146ce808650e65bcf5e0c5d126d18aa24cb3ad35de65ee2369a0bcb99e58b65bda4618f1ac5702f711bd06f8dcb08b11cd7344b49a29b735dae2ebfd62cdf0d03615badd4ac88dbbb57a6cf18efd57e8cb58857ad3d89dbcc7030da8f320d6fa58b8938ed19d3223e7b89dba03c887390a5a2bc89e9a7d0b80c041943d9315c26e2f2e6ac453cf612d63b86eba6cf5b6bcdfe8db1629293d161e566eca4392dfa0f22d93afc0d55f64fbacefe7bc1f67f35a00beaf0bca08f461255d6c35ad1e524b308641245228d8ba592e6620ebc76cf8cdb702b9d7e10e8f6e1893ee61c64a1904ed1ed479a81a0dbe7facd7ec86e6584936af6630722080d250a65e5ce2108213494a894ce05f311214eb0088c0e75e470d22a1df799c5f671d0657a4ec3fad6e9c8a797defba6bdba9784897438182707bb5c120f891bb75af36e2137beb9b15ee79a41704d4dad7d720c04fff861b10f4c8369acdd2b1bfc76e790585b3e3b880bb1cfd198f08be4de9ffbd3e5dbedc6e21e1bcfe01990ec93df23fbfa5c1f1097d15e48a526d4e21d53bd1b0ff7cad443f6655fd0467e19e3faa0f4fe3051b9409e63b19c6278b7468812130fe206b1f726241add2d4a1d290362655e2ce39a72a2f7a65d1f51755bb7757d74f9f74754dd2143ee8f8b73712e90a8ba44a2cb4c659a4be402319daecb756ba2ea1ab941a2ea2611e2d6dcd77d05718360160bb3ee4d546120778ba8c244ecbda92172b7e8f25db806bb32cd8564a13b7a947e8c31529ee15602fbec358f4469cd13a2244a4554735153e9e9669fe2a7dbd3fcb47baa7f7ed65cf3e81dfd9fdec9a1b99027692ab944de87499a8bf4216dd3689be47d2a23ef33bda8e4ddddda4f6a6d2f9485ad9d1fe0a9d3433c411b9d1c604b7724ba7477802d1d1ea04b9707d8d2f121ba7449604b4805d0a5a3433c61d5da5af713dfab87bf675c5b11b1d75ce81dcd63e7bc17f3684fdef4f5da38fda148a80ff591a92c96dd3ae3b76fbcd268dba6cecc04a9353540accc8b691baff5e6260b6e33207e0173bfd2ba6370a7bbb65a59df78d6757b65bfa32727272727275aeb4dea4e34e908122f6aca8e34b32022150727e3b90b854298ee76e7699aebbe43a2bda22fda3d8577afa97f36eb23cab8b6f1247ef8c3e8e5c52b7b2122d77d9261da744a288675979b678d6f9a5b31ce8f43c61a3b92cdb39eb1cdd8c62dd2d7de78f79a2c9206c7dd565cb1a965a06b5fb6db88f7aa3ec67af3dab36da33262bb5d8de68ab10dcadc06f42736030136b50c94f5b6d1be729babe7e6b71351c4eb45b578155129965195ee4e632c6757db4e32cd66b1301a524722fd09a97b4dea36124993f4e61749b659e6361cb65978e3bff8359c71de70c63952161bf4cb8b57ec0298e1f383e4f5a22c78cda0f17a5199170dd40ba379b568162d14078a1b745d90c7b5b0ae753e5bdcdc48dc27b741e2b635b6c602f9f183be5ad8fa90279a6a7bd899196b652c8bbeb542aa6b7eb8faa4d457ad9acbbe92542448360e616235224f9587561dadee54574ed93849b1956edabd577361342e4c7361d07ddbb238f5466dbb9b16a7dd34ec87b53c3656c7563b6bbdf7ee95cdb52d5bb939915c6cb9cdfd8dd3ea7d7aa3b66d5960d8d5b672b3def9180de603c63e91d83aeb90d159c30816bf26535d0117edcbcfaa1b58cd2ed636ccdbb4737c9bd88e1e8d51e9f3338f69e73ff17d7a72afa64ab739d9b293c74ebcaffefdec878047af272773cefa31ffdc4accc7b0e85650396b7e50ceb6d2af79662fdb50c5b8da6632fd9f4e19550117551909bd1303519a46057892af44cc1115ff8353e8f08352e8f093802aec63d760a3c3875f0d55d51df671a74ca302c46cd02546034f3599c6ae81d73ee9e436dc6b6eb3d10e0371991b5fe26c90886cb5cd36ad2727de666118edf54e16499650032dd2a10991d7c16e5cc7bb35f4dcef74566cab5cf649699c7163c1aec6658464173f699300c42164d9dddbaff675b7da2b4cefac3768e822f613b47fa7fe712ccbb130fda0a0b1637624f63ed3149dfec4d00617694007221d6ee125d35bd082ceb5a08d2e0ead7ed2230de2e0a3e7187ae54fb88c06841041fc6d4515de02c45b907f5da7ffb0cb4854d99791215185cdcc0ce9f22f4e54613d2e91a8c23cd185e77593441526237393b0380e03892acc4574e10248978f6b666ab36a884415de892ed8957730912e3f9339e7cca2595862f0aec763f14e5ef6273e13555c0bfbccf4e08ec0d3e5e7e7b19ba850eac31d418e3e2a44213d887484ba3c843ad081bae83c00e2f000fa00b7dd8103c1a6d961ab42db3f9a155bd7618740673ae81d399b431641861dc9aec0b01cb011e01b074c826be1704bd03dfbea7cf86726e85e7d033d41a56e9828a0b30d3205539a7cd7036dc42eb1e81effac853fcb5e9d3ebfbcbcec55f4e87cca65c829b518fffcb3a71275f23e1eddfbec6370085bb82763af3c8fca53e695c8d38ba606d3a2cb6f098d5c5c3c175dfe10bcebe9583b51d5a901ba88bcaf4bd205deb17d7b40f0ee25bb203894a78e7a7ae765a5f3ecb0bd142dc4c2468ac03cf8255114bf34dd14a319dd2c8a7d284aa7a24e3f42152643fa6f961ea244ffe14ea947f14b9e78e87f98071b9127b95973a6ec4b26aab099eefbb759a6fe6d16e6611fec91309999d23b936526aab01ed1457ee77d6fe25c7a87c3d88c88e32ff1fc7a67f4f2b11e1c377aacc7eb953165716e88e4705ab085b2425cab658d489407a00ee6c1af205656aea5f2448d0cb129cf0a102b13737929016225c28d0eb15733a6007146265e11802aec13c30110b51f3e03a0cabebc4700446995dee14c4054f71cccc2e83b54651a48850eff08880a3d7c1b50b559d145bec97f373a7c1444999e46872f00e8d2b11a0c1155184d74c92213caaf601f1afdeb5e39e8f263789fb4af215af0219a2edf0bb9a0cbe7df0713afc4141aa19c74e8053d44832effdee83b2689bdbb27a0abe310b6c4bd42c1bd3974f528a2a1511c7e1a7b951fd2d4d6a17bfd1a7b5531dd4cccd2a6943e49c3bdb29b6b71432487235193c3a997c3e15af33faec50da9946b0d91a8ea7940f7fa76cba09ecd7d005c4a3dca05ddc9703dc5d03e63db9fd184133457db36edb6be68396180ed44bb271ed7da6811aaa343735cd4d5235974286d4d168ad36f0cf0c4a4f1156794387f68cdee484b9e381c5797cf0de9a285f387d61350709a4b9b824eab4553319a795b19531baba47d4e8c460d90453e1cb01d5a5e98589eac1553feba108a3c2bbdda9633b7dd9eec11f4082490d82bfa484c8c3d0e892bc6b0b6d94891983448129bd6d4e41ea1a5d5d62428101c9bfee81b8a2c92c856e7fb54e374665216ed7b356164b7311110faf17abd5eafd7ab47a6b8d67d69afedf56abd5aaf1646b3b5301aad85d1dc1646d3f2430b011587d6dcf699af96614a279d76f6cc374b6e993d33596866cfeb357fa6cf4c32914c4c2d283480cc6db8a7dc667b3c33869fd269449e260f8f766dad93c5e5cf04d07a1691271d9d9c1fb557b9563ab9d8993b7ce64c576b7e8ab6220e13782ab1f5d61bbf01ca41b398bd9b5a1e7b157b6a0214a021b49129367db6cd8d755a2fe9944f22130727735317823de69bb565328c66748a48a58cbb1addb65a491d739bedf1dcb4fad43aea56d46fa8e38d667c0e99add6d5b60dcbbcd358e6a08ef58a721dfbace80bebbda299eb6e9fb3d65a0cc3300ccb3ef268c13cb8b1c6ca1e95fb9579ee9a46f9dc62dedc6c3a730c9439cef6238dbc59fb99cd1eddecbd76a31dc532bfa1ccad2874e3a59a466fcca3992967c57c2be25781c262750b31ee336e03827c02b704fa00ecdd2621cbfc9b5521597d47ecf84d3b86ebf9b3e52616ab8b58acceb1583d4f6db966b13a66b17aaeda72ca62f5aca25501bfe8f8e78745afa69208e50c224fa43d6b664d9e3e682690f9a3a441bff915b8cfdff864cd19890409870478928f4f51802c5780123587481495299095a93b2d288b8ce592ccb70216508232b92f2ca00ab3bce8f0470055b806c701dea1c38751857da28b8c2a802680a8fa100f1dfe07a00dd3736f8069d8ff8150dd7f21215eb0ff88c8fe1300bc826af41ff442e83f0886d4fdafa49202fd974487df0098d25ca00dd2c37f02da28bda2cabea28bfcbf2fcc8a2abd5313551c2bbac401dac835c03e519569a28bc45458b8c6fb8fe3ffe15887cdb22fcef33e8e7b6f4b4c767256f1f48ef54a4c4aa449682432757a18c08e51897a92547ae636298fa57c96f2945361bf7227a0140e9402e24a997f3c7aa69fcd10f0e8f461cb471f67cea3531beeb3bb69baa39464ed7ff4b19f586e25e8e7bc80af9c761f73e88c97aacd0c961adf3bb701bac09659e356c1ce02a25ab067a20a0f2fc8030c200ac6d347ca38a9ef1940151f6890a40671e32096ec18954ee97fddeb89efd4d2ef93c3913ce2e3d385fc913f1917bd78eab6913b4de88c87ecc59e89fd44c69855d9b77b65dfc6dd4c60ebdd9d837e15f30b4f16913a52e73a01ea5c9fdc66c604c3fde6407f371005716e0990bb028c420ceddccbe7b090d2bfeea5036dc8e75c33a5855490d23fee4e6c7f72fbb55a4fcec79e5a25e6631e7d62dd2be35bd60728b49e0fb0bbee9b7e9d2d7b351390fbe43247ba5c599f5c4a1c9c8c637df2eea5fd1033fa075f3782d400a971758d10f7bc1a1ee7af32e33d2859224d8d1f3e6866609d92520281f837a38372ce39e713e845fc25ba8040a0ef2010080492d13ff8ca337ac49928f382e99212fc9cbff4cce5cceb3cbf33333545744c4386e070db1db55aad21dc76477246cec0d71433a50203be644497fc3f532a50b27cffcf7146cebc904046a6657032fe0463e5576474f1a3e394f5a953f93fbd8a0a0cd20a0c920725cb9f7c7aa658d13ae73bba236ea5e76d74ef881bbddc77bba39189e346dc764722fed125671453ce19a57fbf62844701f2147feb94110c15959a56ceabe8dcdc449e9c1c18373535f1a7a503a3d50a52534467c8109c562bfef4c8d31a1279be8fafd8137da211d2a344178e24594c253b6a9f6fda29b2048aa64b52522e0a67e2fee34a44f34b6ec853fc949292ad861404c61260b45a33156b6a5a261d183a3737a49b9a1a9d960ea9d50a52534467c8109c56ab35e4474747fb11f1cc9496f227fca7353f25c64fe12ff2145f8b7acac3bdca7244393939393928261414fd948b2e9cf6a04471ffe1126dfad121eaf34b649c56e429bee43005145bf244f1c3501c224f34cb81f2dc9e79ee01b2d0ff6e9f72069591fe0bf5f9b39fdb7b667eb25bfb1cffb8ce3d0ec9f3d8efcf19a924ea9ce83e14717054fa2cf11087b065245526a19f6fc2332efb8529cdebf3339cd8c23f3d1c52ceccd4d78cf256790878f4fc728ffee34f74a15ff230d1be3ca1f9da9c3f939ba2ff641f794e881ecbd30c71d9e356627ef145cf8fb98dfe3844a6744e2b571d5edf363a1a912cf461e491a78c97bcee42b2d0c96317fc8b7d3fc63faf631f231289da3fe79cd3fbb0f87386ff78f4edf51dfff18f44654f3f764137efc3f87a1fc78dbccf6452c1e892bdef3be8bfefd9c398829105f4d9e3bdcaa6882ef48d7072468746a2be98e343a23efd43a2e8cb1e12752251b5c34e3feacc14952c1c9427ee455c4717ee714c1c12873495f002c8c0873cc10ee25648cbbf98a4d347e19f29859b781669108f3de3b16f3c8e62ef78ec5ceca5aa4377130e291a6928535a4a775aa6489fad8e5be47d3bba28f3741a06cab358ac157cba633c33157f60949e3e4a54c59ce842df6ed0e4e43f15eee7c34455087874eea7ec1f9402ca7f46acf4915643041010957f3e8b075551e7636ba38474727e52ce39e77cbf751f345fced49c98c8995a331abd361a3dfd1f8d3e1bfd1ee50f39911fe46179023d0e39e2b28738942710cce971833efee4646fb7f761af94d3e96c7bb8419e1358c765cfb4632eb9ea2fbee89c07a3cb673b56f2d926e23a749f5fc2352741bf6f023d0d40dfdb7f3152f1e7a4efadef50df3e802df43fadefd751156ba20bfdbdb7f7e990d141cf7d206e320307fa8feb22cf244f3f332567260b7dee37efc3dd8fbc8fa31f7db0d54455d401fda7f2957ae83faae6175ff4f91b4cfd64a15b155bd185fefcd27662f4a2ff5654451e90f771252fe47db2e7cd273ced27f10b59f64f31531b64d94f3ff26cece17ed01e3d94a7d0f33831f2441e96a790a7e589ca6ebd2ef77e393353534c16faf4a34e547d74a18f7de77d1ce7d12deae43ea728f5f9f43faa3074992f449f8fa9f449b33ebd4f478dbe3d27a667a33d1c33e3f631fe71fd83af4ff6ef77cc3e3f7212455f24531086d297ad0e6360612f1611473ab8e0a7c728658c18b6c4c701f753cc141493e5ad11b81d3c6cd1e1c72e70b643971b6a5eb8971ea517e30f1c72965142f9524a136c919cfd4f3e9478b2448f7a734229a594de371f461ea1c0c19f5c4a0b840c572419b81498c24c251045cbc0842056f8b48629982b951aa72a9e754e11373d19e79b1e459e2214b8cfd463b40247bd97a7f826798aa61ea5074d33156162a7f2fe40c2c7216519b849e58952ef3f8aa2b2d3977dfe37a7bcf3b13cd5fb50fe9cf3428f065721f576c83ea90e3287da9c73ca30641843af17e1a99e603b31af903194c5b26207377bfd085dea571933ab985f24e991d5ab9856d8df817b842df5e7e390545f21bbfd3bfbf5aa98f579ecf26514e640a4471acc618b3e448f3438e2078be2e4e71ae14942d8223d9bfb4270f57148cec71a38ae0919ae408982277992214f4ee04ef224dfa406f7419d1ef4c81a4b4814d4e981912ebf09024894c437242aebf24f47e40976f932640ac2c825564b507992fffd12f0fb5f912829922709a3c74d26701f576419322a4288394e4648940f91c8f4e1ca17697a84228b24722403d701988a026e00da903d3e07208a0ec1052b98428f69e831fe03606a03f1238f8cd3184e12257b7c080131701ff4e1397d96591b06eefb77829ecd8e62a6b6673265d839fd92090b3dc96337c961e076c84ec57fb443efdb21bb3471c1c59e5fffa7bdcd7e1dd00b2df0837cfd907b6073d66b7c0530dbc3027aa1057e60c1080101ec27b84730701b90a8f83a24ea24a676f8b543ee0b1cecb57fdfbf531446ac7cf8965321b712dc7ad67ef6f721d76fb97ea925b7d9aff7a3c8d446653a244bccbc48833c009127d83b8a4c4198f870675e803325bb0eb11085d70620843e1ee67d35eea320c2e08f7b95c7c03d8e89434a3e1ff72b6affa6e83baa0ec9121f87847b7a1b883bdc17bbc0651d66a10bdced50a70607fd345310e6457a5f8d1ea1ab471a6af31d325cb998da18afa518bfe5f8647ffe7d7aff046dc02f5e2f07ecf5e9a9c29f2ff88c2822892eff9b31c41001a8d12284102b4404812100bafc4f2586a904e5c373f4619cb5b6c1064016f9184f00bc0128a21bd1e53720078a99fa68f40f638f0af8c29392214f6ece8fd864718ff309aed3e7708d54409790fcf53ffcb0d6cf1445a78c92d697954a2935ad544a59e9a474cac9868c210a4b96f8d2c562b17ac048a83b0ec923c61b593e8a832cd003713242607c2c624c8932e0fe574e5fff93d1e79b662aea4cef934f7fca87106585d4f72154d9ffee9511dad821bb7c4abf7a589e26a5afe9d7da3f1c613a85ae4aefcbe4438cf1618410c2086184114208218431c6896118c6e529fafdc8bfef11c36aadd8631886eda81d93d1044e462b70d8c72cd6885d5ba3db0aafa44ec8d7fba04f8cde877119c3b01af1331e1f7b8af167c2300c7b8d45ad53f9b1c730953de6512c526b2986c5ffb88e45efbb8f795f7d4cabad3e3d462c248f3bab14e20f1b5f3e3f487430e4a194fe8d94d2186b2a909ce7b6850ee984904b2eaadc9127f85016812d9a9431c6e8c93963163aac120bf2a3f273e449ca59297775f85112a13f5c7cf9509e28973fb0057e9e59e0e2e374f8b2e5c5f9b2c583c6ad8b14cc482453881146225d229931e6dcc730151fe31bebbd354c2fa7e8dd18071c7de658ab29d61a6bc55cc5a7971ade57a9bdd6d65a6ba5b30cf9d4e187ff528cf1e353e46165f42243178e7e583ef4a0851fa127219438248f1aa34e8639f6da7b6b8df5a5caad8fbdcfeb90ca0b238f4fe0e4d78fd1da68ed57cffee5f625d50173ba8d740730a7c31865c419f146a4282e5a7b2ffe8c39d4f7bef63e2cea30a274185f7e87f0b10769a4f1658439599c4bc81e638f330ee3538c39ee33750c1f7baf121fea78e956ca1e798a1c338436648c34461a2395117ea60e3dfaf6314ce1b7de17fff215705c8f2fb74e05e6d12ffee59d8af87647ed9126c3956f443b39f549c6cb8c0824d6f418040cf0249f4394dcdc63343576248a63c91318208acb029e64adf46636636ddb998d01f7ed18705f88e6ce4fa4839f3b995ebe867d4d96f8e25a9245fee9f42fed0b492482137162dc51b42351d8877c74f9219a8e33fdbfde99298eb56377e88eded13b44ba15f4cb349b254f39e71dbd036d40017c3450fabf23f07fa82150a04a739d84c8b856a61b7bca5553e8e26c468d1b5807555a347af8f97221f6319cfdce1ecb7e6b5b2dddbb6553c31d76c2815250e82665bc2b5d2e23e40ad9b12ca467b6756f9be211c934b7b9ad5c211eee55104090ba3d12953ea3b892a76ea8042b9aaaa21c558a6644000000d315000020140c8884021291268bba07140012659a6462664816a8398e821432062142000000c01818009891216900cd3c378697a00d3742f285155441f925f3e48d8d9e4aec6bbd06d6bfdaf46725dd374871fffa3f3d42c06bbe1bc223690abd9022ebfd85f47a2260b377dfdbc20d75de6be7f458ea5d34814a9b9a44bd6dee603b62f7c64714844db423a7c4bda1e40ed005b528f64b47c2b9907204143fd7299024dc1ed8caa8596d5eedc1c497520ccdfc9b991437b16137e97abefdef881f5fb7b75592c41866eb1d51b715e722bbf8eb4f25515d394ab787d3e76fd1b81546f3bd2642433b007aca1edd4c06a19011a0322a7f77fd65df1a728382906c3607764df79b36e5e393cc733a74be04309f73710259e4e4b713f469cefdb54ece0fe32e00a99ccfb8819c09104e8f2692af795a934fdbba8293b1ba98e944c4bce2d78c05d8acf7db44051b70cccc99c4e5d02e9d21cbdecf4467368658a2cf5954e9b07e01f3dd646aea2b12eccc11e8bfaf5131075541afed2150dca1378e59945438bf66367573a3278ddd4a6f01ea8796fe6989df7c3b09a99bf5911bb64364470e3ee9f8ed6611bc131d5191aa7f9350de227a94548fd1e2db354f1531429a86777a5bdbb8dc9306f91a3d953a187ae91bfa75d34bef454c250a81d99e885ebc022e91d7ae598e53bfe0bbd10ae10e00f05667f8a41a77c9edc3676abb47c633218a6d37b83064b877f58a7dd3b8e5cf73fc33f35ef72512890c39b7fa4f1bb595ac7ebe9d388a5df3d1ae546eeaf8e39e2372d8b9ddfc57aa85d965629f918c07cea865f86494837727f7368d7be13aec9a84e81cc3be370f45752b30104b6e100363de9a0895a0669d326ca565cc061517a3ac85ddd11e47daf4fb1c6cbc2b005c0d965b129c26ec3400518398a5812de784f7c2ed379198cd37a9dbe378ecabb7d92aa06b5a693f1562750b886e04fd13f776e415f70baff70067b1af691763ad25ab1dc14d1ed3aec1bf6b2d1cddef66e7905e004945fdfba11b8637f4d43a9e97cd66a4d6bdd6b8687761f533ce901fe5543aa0d6d64349ddd3b1612806d669b747604aa6370a01d56f5bdb93698cc244278cc48a816da5166bd3a87da07f7001d7b50960df4b048336dfb15b6fca4fae36230ac86e909d4db0103ca61366a2bb51729deb0bf6d6e44f6aacaaf5a1cf51cf0e52e9ac52134d64cfa38e9fd420acd0d1e6f302102a1a525baface1927b9e5d687d147b03852080b9206bbcc6844be2ae0ab4028f48ea0fe282a7a712bb928cde02d6ea53408f6ad65f3fad2dd1d66e9f7d7f77ad036a16633d78f19a77f1c84fb1130f6c59292dcb347fc0ef0c8dca08c5ddb1c56ba0fa85ae4c332633e31c84377496058006756f4d1ea8f19e8683361c47190d4ab12832857e4ef6e3123f3db3fc8bd78e8601e7a0b310ac28a011caa78400098f169b7d28b289b795680116196021839a0a5510c147d00af5bfd8c76e88a874795cfe610ca01d07099b69c15915da4bb5288544e400033ea9b27dd0c031eb8a086506f3dbda72b80a22bd1ddac0396e4ce79d0cdc6446a49763d710d9355838ed87b9d0a8091770be9e6899e6dec9cecfdba4c8bd35dd5a32be2f880f2fa9720fb847cbe57c294d331ca3d545b17633b4758ff3500ce2c4e8e31e7c4fb7e6b97328792b670014e5917d4a9aecf55b8738354cf8bd7d4a0723425f4ce5724fedca3826da8f97412adc2ba149354f88bd0ab9070dbf8cdcdb71ab7b871a7ee35a75bc0bc19873bb11ea2dea313141bbd4c4c4d351ce570bd974718bbbd6a759c8c337ec33faf4db2bb8066457c758ca8ac147ac90d8461716b408b8540be5fd085363e7dab943f138c8cc8fcc5b391cfe4369d3c1ba920722ec203a54db0e0d4c806c1d8fee7f60ffd83dbf538a69bb67932735bd1aab09088f4adaa286a4d8a3a7f70ff340d05e5d9472584c049b54f38ab7f8104f2791c33ee7dc865f949ff1a45692a48a42b4e40cabe7239d9e50d2b7c8a4222bd5756286794d760b819be43244c32bd89e0aabd1120469cccea4cd8da5b39384a9933ca6d3ef6599681350c2f0ae189a004d93c4c876721be9fa02b9cd496d27504b0a5a6002d6dd2a57ca42c956596ca9ad1439902a0370d358918508014c475384e4ad8b40698c3e810811a26709e7b005350ddcadbba10f7a0eebcf1ea0210679dabe2b932641b77951ebe54cc297ec9ddaf85d02060f95dc020b52c27134b00f651c21962c5019f9b34817a86afc3c7e60aebe6e7de64f9dc4370cab0191c3f39b2580f242bb5e3388293059ada860699258ae7d93751b6b58e20894b91540ef9d2eee71c992f9874d38c7804f0375628fca74a68c2cc3a13787328d2b22c32e6c07811059948ef89100b7b7c638aa550f855f4c4689e18c2fc29b20e070ca697f8f2c47219936a18d6f80e636c92a6ceeccd63978024168371b13803338586b2b263d2b5cc58b5604f7e42defb1028bea44d5880c940910a4ac9569d96481a3c9519207c88306e5cfcba38365064d14e054dcb9e99e1d8963172031108a4a87424c716eaf752e41f974fdd4a8a65b010a8a82f51bd5745cde5ffc5e46c5becf18f814b12d4fdf9f58f6ac3fe9a104900ead9a0d2061dbe6c54b2cc8a44b462299fa419c5efdc59859ac0428ab95a0ebbf4d57c3b5b8a715d2f6e47034cea4a817ccffab3841aac4d399c132ae75fcf5496a63dfced16a1b4029eb0c36e919c7c77b1c21668a7552e80489ac274cc9aa7e49d7f3ef91a07cf0fb6b46e11f79c58dcdbfcf5340b9d06dbe15e03c1219429847ba6c3d16e9951fe7c3d59eec1a20d87437eb3ee3dc51ce03d0176a895dd32a8db100b68c6fff25167a4022faa137c6dcc0e410c2e1131841f1197a7a48e9242a90758b8487f818abf9643bb8d54c0c36ee768e4a26d16102bc2c7095bdb4e02fe095b24407a12d666563ebdc2f50b834c837b9665ad8980824d67af394be7e92e91e8b3b54ab14ab36c9093f7528f13d732b9f57c0684a253016581ff45b55f6d8587acc093572981bc0db8071378c19c3c9413a74e02334743988362945ad064b269a0c94821d5e743647840e3b21b8d2e9893ab48c3cdcd67280e8a2854d76c9194aeb367a2c45c61a6744a2e3d984f762426401b658c7d77ad6571081d7915ddd04149e085be51463976431ab0450731a09cc9fe106ebbf2a4b3b5488cb3a13f7d969e0891c691c1255bc4900fcdb6cb997d6d227073acb378a8f805e420e04dca4ef4dbc008d2e839e367dc0f55527996cc8e2a4af74c45a9b8b91acaa0e82d9b8c5075422f0cb5e88b010ddad5d83f1bf7dead880cbbfca578755f005da9aa247d1e8a3a011eb3529e1a6ae98b3b38a13480087405669180174d228d782a419230ea53bc5f2f678fd2d55cda76b24c3c18ff0a6d0782c18a2ab552de38fa159dfd76ea351716510204d1702fa665cbeaa6393da6e0e1297eb575430f89fb02cd264c1962b3a71a6a8770fa37d36cec9f318e2ec8843b319f32dd0d49d5168a1e70dfe00ea51144a26ee5bc51b557f7e7a201e6a286d8b8dba0b1b13420c5cb8bbba4571b6304518060cf9dc736a0f6351922e77b00aba54c0a0ef5895dc9496f788ee623ce5de4445f395ed12a00b4f80865b9fa1f1afbf2b898f4cdc43206064569b2ea870b0bf8925deeb5ac00af5b6f0b09c61a1dfcd285a8e7e7542d09fd06e81790053735542fbd2609194119c6fc1ad49d384dcef2108a90daf69d450a54eab32639fb08952bbc59fdf15fd0be863625ff54753c02f887c9a82ac5a0118c7d8e1e7cbdb3ec1d71345daada45d650abab817af06a1ba5b27e01b217b4cc497b9acb2a51c68c051d208f904b7b6fd8ab269434c07899b1ddbda39ab0649c206f79f95ad40fe10867341de8430c54f8b080a0ee99b6e01004ca3761b959a0f62f6e085f59d09e98ce10de619f27c5574851a7f18d63d82c7cc1885c444fe33024a35ce2b83d552abdf5b47c1414ed7db63d53836ba4931a1938b0cab6d1ea0ac6083ace98991de2880cc818ea04ae3447f1707b28dae4bc2e15217d8e7fc6b6636391979303489b16cd17cd8720babe25f9de2cdbc32ea8693ae044f6ffedd20a8438860221c1beb0860374f506f74dfaad4b271ea26c3b3c0ee7d769bfd0377958f02d11f4f7d71919acbdad4f1c7950ef2c12746573a4a011db17712b44365c664cf261f3ea2e0be8ae99a3a3156c5ee0be722badbb477ce429e9f860439716667f0fd32c66cf0fbcd0392741549a08b7c0ac21ac786f652cde528cfe80b74c6413fa68278019d5a9a6b6421f6abf69a4b199d93426dc0d71339aa328695fcb2b997023d5dd0610c87e42e9d481eb263e74d32e21c2aaef321a7746c961487fd829acae9d647c99d3e03f2c910f6ac6665ff084e497065f474a13e9f7ec70a7ca943b7f87df6a9850c2045a2d17b7abd5e6727a750486f98b4f2bba5eeba62bf29fe0dafd43ac335e61256fa14dd2e35c4ce06412df4b04e5a39b1a0e5cdd2fd85da5cb22c1149fde6e01a5ec553cd7da0b04796e906cd43e24623f04fc029f594b0c3e959f2a75dee8f99a4030a6eb13496bd942df887f14cf51fb19aae6b699a48779962d335933a9377c8b5ce1ee83cc0a756be633833bab080f37de8d3225168f887b57afa8142dccbece919da1a36a0ec09f6f424a3215ca8a3746a935234642cc2e9b06e6162ec55e171623885843ad7249c562e5c8a64709a964d5ebc2bd4f6a9b5d0027bdf1fa40a0d0116cd4b411ca43b0b52d8ff33610a0352ccd26e613c2241301d85486b5432b769314025637c379d2cf13994ef1102014009c56d5c3084f0e0d66e57e4c576928c0655c4e9ed0bdafc0bf2dd4d6d5edbbc1749f91721bcee5ae3d398841474ece65404056e467f9da4a42982383e74649ca56313746a052d0b90e4c748b590981edbfab6c5a9f85ecba5209bd2ffe4581c53b4c0e71c1e0721ea69935318d463b508eefbf1752ce8ed6baf07fe4cc2fe0149e9ce37425b0d1de1f44fd06886af0b1f5a58c080f8b6c1458689d26a40f3802fe85b55f2736eb8b7000e00f36ff680fd692aaa7fd22f6c8a64c6f5c52057d2db6f35ccccdec6ff7983bb0cfd21cd4cd9ecd7492ffbaa048c5402a1136bb67c1be050eb658e6b8a67419039fdb2ea08fb36484b07dfe65760970417fb224b6a60dc394db32589b680634374c33b980398f3c9de3c9be0e67e93ea9929f5bb76e174c6aedaa3975c00a1e4c3c05e38f23e3fe7a708cfb9fdea207e625619accacb9e10344f804b06fe71eb863cbd29877f6c6b398458942844292fa378e4feb7c1a175116dc2821e7f141f5f1af11c9f762482a932d87c8a3488eff75df469199eca09c6d8c2f9583ad4289f44ba40b367322cbfc47f4cdbf0b30e27aee255696c61d5cafd210ce514f246776b7a5363f8ce20c7ec8cf8532982f2406cc2a35d8c2117b9de311260b1d595dfa4bf203cc939464dd9760ac52b2e2c4a94d97e9a67f9a3f5573ee14a01b426b9ecff31ae68e79c185077fae8a9902d285fcb464c0ade6673ad80931587ba91e819a84d2bd25a194f07ea43f26aa9f2794a0ae9819304730f468bb1eb26d5cd3ba5013ccf488a1b75e359f5ad0a671db5b091796a2c23496d4c684d50a8a9a191227e5b05816f49d6822d65155be4efc82139d3ddcb932270ba841c11bb34e35641cd6559d2ad69cd8466823d8a6c43bae134ea436d3cdbc9654ed6273a9497de104f05ec13c443bdb0de75e3f007ab1cce4ec3b4758939053477ca8945c2e969c5f4857f47331571068a41ea1cc9efd8d763a63b73932efd7c5121a2f3b8b1302590f15eea4c209a105de36bf785d40c885437fc392497c64d5657e0d272254974bc4da6b8cdc16b00a70da51fcf47e97121793c237a25d35f468d440476e7d73eb9107e01d65cd69fbdf0aeb79782347b8272725aa5cb6a574c276dd922c1d4cc3e685c44fa2b59987a10fae13774bd342b3e4ce913b6e0e29bfacc1c43af8ff47d7839d70531ec82720b2a7a8e68091669caf1c17bc6faffd814f8204446a6ee5b1654adc37c1ef22ed269f0d3caec0a0fb292dec58a96c41a5c4752d19acacb992ebc7b4c40fa840f1602132b85d6ef23f9fd767a70e3fada378bb5e613e0766519be19f739b565cf39e0a4852843da3114ef90772289a20863a42cf226bf1ceb90bfb11d085628c6913af69b8c51cc54bbdb193fa1a8bd0767e74d60a916407f3f3d68b8e4306ab21d47d2d156f281fd625e661eb23b9845792aa0c0711fc03aa48b495c1793a6044ec22fe05a86f6c7b5093ab0f29b5164023d5981f74b48e6b316133382d3badf91c30cb25a68dfbee4603989e753bcad5e67b28aea7ff31cb1abf3ec1f36cb61d8b20e952d8ff92d23251d9cdb80a0e72b705f38e8fec2cc0b9eb25504873658d2e2c9692107815cf3dd16d45f9f79558a6496833b6f2317ef58e10f48a3eaa5865aa23b16eddefcef8c11c19da49745052cda27415ba7e43e832eb7a955a9db6f5bc665e14263af383b325bca2ae94d5f36ba339a33998876f99250f11d9153f20028c2212cebd06f97baf5372e40b093b13bdd0f8e250aabfd4b7f8703c2d96f07c89f8d063045567d0ff51ecf6d4478e740962eb1aef1bc70eff208ca2839364041d6c780c5e992814e557a5a6dc98deb1e330f1ed86c033893fc68ba15ab78d7de691cae828003fbda649183903b13de4e473f1f39bd10b292723ce92d00f722657c0773943f697b37aaf17c5879ae8092be7a71ff1a9bd4515d5018609a70940158392022ca4c28dbeef9072f0051bab15b11168f4b5a252ac40a4c5e7c0b479016048f06e023f08fa97472e20f0216c7f82993662cc47f7ba722d0157661d504945454d24d0de24ea6fd40c7ba8d77319b8bbebe028fe028beb65386bcb17bfc2b20100cd26d7e41cb76428e68bf55a8290702e76b6f13287c2f517cdc351a4054bcdd64f8749a52427b4d3c44161e155953f23987d46a9f70e26056c58622741b70c73373cd050085910066f9589895a968a74ba1d0a911fa0288364165ca2fbe7a6bde8e8a0e1bf2d040b2e2ef28c64fde6f01298d936608bb0006a07576bebb63e3d718f05b6c91cdbd72ba0499a71fc43491b26e81201c26ac6968cc9901e72634995ee6286afa289ac2c3927c266a63c3b4120e96bd25267aba90a82594e38299e54d6fa160ee469ecf7250d47e3f09232bcb77db4e3a6acea058bcda6e1cf4fa2d9ea1c1852675479c189f23c267f43cf7a3aec6e94bdb77610730928830980b4e58904d3a18e0e4b8b89fcdad834e105b2dcb6c564ef0518d264139df2eab2f3ab1c9d1ca5f40633e4f73ddc9bf5a410738b93059225f47af38851f690d985c7c4abf67ea0519fa45ae63c4af652059ef963cfe43ce9739a30d7067ee6f510418a2795296a678666a6ae13bd6b612b1237d0cdf248d88c5f9b7a2608796e6fcd64f3e888e1c907564f0bb5b0abb073b54969b1dae6e2d925b32c551bf07f71d6f1e93f28ade3eae8c33175e60f8ebdbfcfdc32074349a55702fc2bae00ca26daf6495cbbbcd8e13ce63a9363539ef826cb840938b2d276313182e72061ca8d600e6aaad65109182c60c7cea5a1838bb29308269444ac70b183391421175789722dd9a605d10fc25aa813dbd231b4718f623514e4fcde5066830f08a645cd9836423a8e313815ea81c6a245f640441f300a98075553675198abed02136060ef565d5305f5cb2fba6c73a8beba9e32364f57c11b80d1e42f0cdbe2febd18ce5d045edb274110c281838bffae12b7de02701477bd5f359c236fbe5197d90fb890d3c0f21345b3b75eb055cac7aaf4b778bc2a36b626c23f88008db8ec08bc8cf703688780422f0f21db85d326c5cb021716ab8ff3db5742751834ed57c6c6bcb12c9c62def64e511ee46ba8c907604d73dc70568186cc59fd34c84a174f4434b96b28576610c5f8d7f97c1c5d55231993ed5c3a4e66a071d735e3cc757e0ca2cb646485a84a2c0653bd2646f389ef55be88e47823ac2743da76cd0f7d429363553786f2a3c38f523455ea5996d41210f7ff39c479e4443c226cf307d1604951a387efe69a8049e0298b22cefffbf2472c89cf9aed980e27acb7966ce999ff7759832315a73bdddb3a02f54428bd8e5d69abea907b881dc49efda74ac0c5b6814d62ad17d3958953743172a695f9cf86b4abde787b40199471db8f759c6d7b269298b2fcf7e9accc8920915dceb2da48c64fd801ce8f5962d32d44c3fed8520131362c03c5dac3b03a464efd617de867682455b17d7f0c3e96378ece66fa804bf1cda37f89ff2cca7fb3e6c3bdfc044a0d50010e67b292841e9adc7e870dbdc6638ad6d9012de126f084e8bb4135cafa0072314b2d7aa13de46b15e3cbec2dbe2e28e58e07275226df5fa5fc2c3f144c8db12647625bd832bc2d24d78dbe8b1ff368f035a911a528235bde1d5fcd35637c8a2b33573d330483a57e2fb68c505655f4a2985fe6d76b7cdc2f6c9b009458685bbc1bf0dae3a620e312c10f0aad7c847b70b0fd324dbf99eb4e7bf82cf03683e5f8a77b1da0f7a5a138cf359e6044dce3380a16bbfdf250e02bd639342eca76c28cf3746245a228c9fef86234704909717ce4fdf7de0175dc7d130a4c7520cee3135ecc03d1a3fe96ca9fdb51a15ccfa9e085ceb949ce7b50aeffde4095bd124cd48c07f9be5a7dd07b67d95437031d876d0849368bf204777b46d446d40edd3307bf50cd6b765cab8dedb02324967589c750c0df5d1be97eb3db1d13529501f0d6bc67cc74c99594280548dda15d7a73d33c45220e12bc8132581d73ebeafcf2c4f9679b3461f9973d9850b76f1775f47a0d6bfca1a5528ebf65f1bb1da5a9c8ede0a0886f6047f5e6244bd68049b468d7bce3dadd1d3fe9a584cf8dc8b1c2a8ffd79267743c6f47d9dd142861136b2b6931f7af572455231d5358066548ef7ba1e485232c00966298cbf544fe860a9dc38e22409fe24c8dc936c887a9ee02c160b7e92c0926f24ee02cbb689763b2ac080c88cf4ecc94fe90307bdb86c54816475424c1a4265c3b5636299f992ee4403f996d4c1b99cdc978093cee8b43a2660846f1c131cfadba5abd6120f557e205ac46e3b6a72f14a3c39b052c2691467bd18620aa51a3b66897aa9dd9508f63cbee320296042fc78231f3ffd04021a2bc2588b193f3d1d89a1107bca377bfbe312fe633068d291d047051e37f4657c362995459851be5303ebbce080756fa5ebe08c7ed69a15baad9c2fba0443bffa7a051bf5d40a31bc5a36136250f8b82fb6c23e2260d5db8a0e1fd96b2e8d0395f06f761765b267f52448d07563d5dab1253dca3272c1fd9092322ad7c2c6d1261059dcf80102e083cd78894d8281def296d0a975a85d7cbef9397356c04d108804f36133c30768486c2e0929463cf9d4d7c625ca801a8cec8dd54850591e1965773808c7a2bc43ff16c5a031cf647e70ebe3cd13f885fb987bd85242e7e5cac67b17d34fabcff7b3f5a619d6b128ddc19f36413a4613e20288bfe104f12b80d91861ee32930ddb26656d62f763749aa9632eb10b3fe3167c9c6aa0b3e49701bfaa5d41bb7e4ef94b278776d3493ccb72a68e8aee9a586abd57ebc00589fe21e0e6381968002ce001a918b8ad12a91bce76a857cb1724d66a2578030558c41d07bdda3ae572d867038f6e0389ab3d48e131edcb0422bb21dc228498d13e144a7b228b18251423483e01b50db3ee1f4829d8fbbd3784c3c1e436582d2faef692cfeb150ef930f7be0e76d68e3f101018e911b7765ce330ae92bd5a8d6f9b01ea265ef5b5e91fe000b17a2c6066b58c8f40d19e260230e3b450c7823eac729a2367d2c54002ea120c2641bcfeef8f67bd98e1b5103fa3bc4baaa2f93752adfa23e30f9efe176da943860ef99c4720a162b1b1110ff926cacd5f86d7b2cc014b9006715a8f93a41b4a10e43f9bfbc44fb274d6c3d2acd9ba1fd9a02916be152a654332f7355a4773900e68a1f6cc142b339eb27e66672b807c714d70a2c4b92ed2ae29326686745be22aa5b035a3b9a383516bb6df76ddfedf53e8c505e9494e830a75e13e4acdd6f6015745e8b27e2d700e9ecd824d72293e6adcd91603445fbf99de8ae5b2ae88ce4776b7bc4a1bd0b4775dc2f8177bf6047c48c6d0e1b4cea2404e12a17c7a6fdb8e81bbdf640c059b1c1ef0932e0e5f8718b778513bf482a83cc66d5f26fb59ebdb9e230e664a28e388d5f8ea59c6923907224adb026a89f92463b9ef4bc17df5114869eb884585503a19d29955aac958f2a7b6559d7fbd9f0080d42e3bea7a6525141ecc883d8e06520c117a4bb7ce9ab36ba749915f1c3e5c5fb9e5c1970c59efbba0283febe5f36bf09d5fc49d9277ba875869ad2815403402199f20bb5ddfa01dfe5f942f7b3088dae0de53655d5262dbf3e6907ccfbf6a43a8caf2cb95ac51b8ad15179cfb6b8418fc1e048d1b9a8288c49c58ceddd7547692ba9b64cc12286a6c147f3b8dc98d5799cb6c32dadd65d1a43dc027a4fa28f3936efe5c5a7a72e0f7fc54437bd0a145873a7e22d551b67e4715cfd5cd71ae7119d282c2e047869cf9ee300c3e035134426605e1d6812f9843a59db6affc9bbd16f3eb194289856f4bb702f7fa1cd276909bbd06e20ab0d6347c7d08e59448d7890e0fc6c9c1f08376762d4bea93cfcd805cf07887b1c0ca5457101211942060540a9fe588ab421da6e00c9f0c6672c0bc591c42039c846a8e1e9630ca472b833e76643fbde0ebc42bb01eb1b52c3b27cae1a5463149f9b89222c4f5b58fc7b3d4dd191819f6ccc2cc5e8dad94783ed69959fb1cca96268a626eceaa83d5885da0eda16042bf8a919e05ddd1d1e5122721871070555a92159e31002604e5d4c294b13a9c318a16ea00f9750bf6e8990e4c2f6138f4711997182fb1a17c8a548e6cadcc2b03f7153cb33928442ccbf8fa8870b9b510b50b1e502c5cbf20789c6528996255e0aa6657ea4b6455ffa4e68cbc8db038912241992b62993d6b2cc4b5639ba99d59b9d4c4d9ad60a6241d04cdd826ddadc2bbc9a858e697d09bb3b557ab00a052133be2f446f89ee305c9b71c75c6443b74debcdeb6cc736046b03591d7b75e39435766fb1ed832a9889d6db8a4753218ec33fdf77a193967b7b3302453e8e33bdcde52a4230b30585648c1ef8e792ff614d6288431cf977aa0572c36e46b75ff8107f792a20189957b129ac1090df9e1a0c2022542c5ffe6c7f952130be953ea1fd68b5d6a3d3b9ef165229bee175dbb1e69fbe21fd71d21698258cb5e6614cb68dcf31c7546b895efe451bf5c1e4f463b0010d57453fedfdb144b317d0f6f7152f65203de5551415775a06d16bdc35b87f6990ae606576cba2efca3c65f68c901d86ebf306196b3cb2bb86cab15ba3dd66a18fba9fbd4e2c975b57a9e803588a0a0d5b2543de87da8a7f1373acb796a5a6d935bbaec1579099ee77a73ff6b28f78921e9c2d9083f5f48ba128a405893045b88cb742069fbd34d282b7b7e4c09f028bed9a0c81a691e04ab0ed5956b518095441c2b171c71f7f6cb327d6a550035094fc05097a6406e6838513cd6a463835c19ec8d38a7b46bed5341594885853165861b65e93c19fbc51a02fb0ab0f96df56103f3940e8dc0625fa9ce5128770c7d77ce612063e9fa10eda4741944ce0b5b1f5bd002c3292175793876e156440997127ae3d4af6ce78d09bcbdede43b4a6ecad0820df66e4f15fba81d1827a15e57f4f5f9655923b856e039cb560ae3f3b835f2c902fcf77f4507d85f94c6c42e7586d0030e78cc490b56624e1de81d22a9c179cd3e002d5a08a3762cd12657aa759bb029eb17c7d13f961deb7e0f8601a4e13904c82d104fd5e22343666464dd77655cc0b0a6f412d87b2031e84861b0eaf99eefea07434afff1ba54f7e77ef72c615d9bf79b1b1039a4f494abb57a7a534dff4b541191db3c1e29d0ebb7922bd542e118829fcb27a595f9d266f8df802274279c794aa361f203802bf037af43f91b003a82a0c2101f4be7083162019efefc8d459b6e5473b21c37001e1ef6ccace72ea219898c8e812787f36250c67bd11ca5460cc0a39f3db12983bb18934b9d6c5c21d08cae549fbaa01d93a4c5744a86974cd21ab0730655e84a651bd27f908699ff1c2410896775f34a15e10230c68c9d29abdf24581cc04881e10d17d7b58ad4c7676c991a62030f473fb8cab6eb6e5f6e76042e0ada61a50f4b3fd8408b66293ce7a37fc57c47edcff76705a8f201f15bd122155332dd7742c2cf4abd335f354177744c14aed1a0519401deaf8cb62d73f81fba3eccf321946cb350f66fee63c8c2287fd5e2d8f59a57f2e2e9b73452bc5e2ce754a59df5d62936f6d72ffbe28f526dabc85ce3f0ee076879bbe5dcc9c32a706aee6a42e36f1eeff703bf6a41df567d3f560db0fd7494eacc4ee59bdb92718e5e00cacb29986c4771a53f2b2af19ea274a5725700f1201cdfebb58b2a7408a7464d17ea74ac02c7e721f97acff87c347e8ddecb27b7b3fa7dcd673f7351c5a474cafd588c81ad487fb0f6dfc54c8ea328964a95b39863a66953108eeef10d57a5fa38632e3be7949b4b9a27ec81ced2ef4555e05d3579ddf5d89f4d3428324cad032e59541ced3231bea2eba3d2e4d016431c955a804662aae6ec6253b119102afcd91ba314221a9dd57b40c02ee345b523293d74a4367d8c47a9b55508660a1ac845755118a9addd9d3ff862b077897f515dfd1d695e5477129b650cf18baa8c8a1b959d2efe808baafd3a61288b92d17f45c594598b7873844b23a67ff23381b07e32e868dd5830d65af900157eaa1b94791fb59f65c869f76053e794fe779817f85487e1f33b07a3ae20f3de0048b28e86475748e2e28316868cf0e297a62e6eb2117305a1992c232ece0b595740b8681ab4eed0218ce12811d8651d2dc835180b17a2e82a915370e90276b1dcd433f374c22578bbdeb1b64ac76807df191af6fbba877a9e8478b17a279f93c5d3ddedd3302ca40a21e6a160616c5a1e4b0430298cbb88480f87c4e9af81e9bba470222dc2abf53c6865985ac7d608905f9c295917d0c2cb1ffbd981ab17260a60b2faca1021dcae1915784ca51e4440074a886f994103a7463701f00c6b0c958ca80772f93d0b904a090c9a11e7a37386b3203e822498842514c8044832789d32bad1c9339532e9cdff836465dad58dd4c83a6ce6fd26127360ce267541e29fd6f2896d1d89e1edc1647b4847937c1abdf0c54ca5fdfa1c826afb9453f34ef523db345b4981d72ef107bd5772029a5e5751ae9e7572025c79df9394bda56fa5b2f76923219cc84da2294c5fd12419ec40cca987334f9b992a6bdb0cfdbf8698b92a7a7c7253c6dbe5a3488c69c423b916e1444a501fc451aecb9f4e5c6379311f30f549340d20435e4814a4562448098cf5f0f31ce98bc65803169238605f5accacdf3d0713a63faabb63c0ce83e5495a50f8d52d7778a86c17c551e50c3f5e72de21046cc54814e36ba9052e814850cf3634aefe23bf016420e4da548da2571a1370a154a38a2caf31886d30d1a21a55f16c7ca5e0876ad440f01b281aaccfab46ebe934c0ed24dec618d1cd18b631c8ad7350421dc99fe283edbfa8df5d9fc861edbdb736dff3ad364faad19ff9b94a1fca1cb0df3b5b5b84df8c168388204a4133008ca5800421e0d0a3ea70789c24d0f5b3d14045030977ca22c01002e8692af42f8a57e9488545044c5ae305f7175d099f8eea8bda150c0d606586b8fe452b186fbed2abb72120d0ae7fbd2b62bad642beee2ad2dfbf3fd2eceba2212e2f780f114653c9b21829146b349d9eb4f9dc863b6121c7edfd922a3b04107a8c8197590d1367c33fa3faa41d8eaafab0fce80646d49f4d71c87d9abcb324167ba43c344e171310b1aa71512ef3204107b50f4cbf8ee2e33bb055948daac66bf2e2ba11204f8874e47d3b984abece86fc920d9b8b6374e40c93a35296c785e44bcf2b46027f516a92231b9cbd214fd322dcd049a594adb2c9d894be3bc6a22511653513fad6445e76c42891722598aa3ed6794eb756df2a5f8789ac4225bbdfa2930419ddd2f4301b05135bba7fd9e3e3c97ee9c6dd7b747361a405256f65bda5e00c226cf392bad73b9403eb0f9b24e38c34b00a2ecee8306eee635e5af8433ad02c11295a14572009c82a9ea84c2d1b1dfbaf7315d6b8eb1a76a741d729c160ed7f4c8621a286b4f9790e158c469c863b9f18ba1660c56f45c346c9985cfc2ded9938654d3c847efd1b6be4080df79fa05a4363b09088253e518fc873ff1301b923540a1449612e370492f3f432d762bee72837fcf3ef628e79fb678e74aeadeb5bd614287e166efb689feb684a7e064b91657b5d68d4a2f16f83e2910a44281591d03a49af3e73dfb4496e3784d013283cd8aa4195bc31408d37e7096b19d2c708a827a72721bc0425d06c0a346d2e2fb695a95fa3c09d68d741810f96d5216dfe9f152c82d01b82acda7c633b65675ba09b3701e0492830583b5ec6c93ae0b9e5c73a29ad32d260a615a965060e33faf11385b737d5de721e31cf662ab69786448b8d74f8214b623391e8bfd79c60149f6b85ccbeedd7874e94e9aa73648319d48b9bfebb4ff813862dd1f06c4a824f157553588aee25d19da89d65ab75aacace9f735d2774560247317664337daf620b12a864bcdb72408e485d305fc24df0187bed50e08aa83cdcced3cd096d154c09b8b6ef69d37d78d5fc3319d0a72a96fa2599406b50137d9b990895e13530b5826d10f2a15954f2351994f50c8ff3a5ecfe107a87fadabe6a100befb702f9c91f5730d1cff50dcc5a056fb75357de143b712cf794d5d2eeabe75415d26bcd493d48b96389c9d203ed78a98ddaf78c261d0d4b2aad06b467822674c6df12321c106ff468b5b5779cba829e12fd8e4f10f6a41a2c9d8799e6ffe8369ea7a36888c5df5728ad417f516ace7bd89bcd4efa738da68afa41e2299346a23180af09c5a97b15ae80bf6bc695c55281b4e2c5b626a2e871e03eea03b5ceddef1c7565388172268bcf6b94e102d2fd4d1273bb5089d058ac721f245f649b3a70b5e6da7d88db1391def976a5b7f740c4302074bdb711d69179b4b035d4d8867cb18407e8006608787a4cc32317d43e5d49054b51934d61ba650f921b7a3e8cd231314f7a174bbfb4c4784687a29d3711d64b8839369a117a7d784223285c41909ed1390580bd9648d49fd93ef73e7e2f94482755e172e510a4e4a4b13d1b7e17f4a124d45a423f27a976790f536b0f45bd272941bea44f867d87f63c8b4f03663ea786c72513933cff9ba03a915a98d30a31cf7c6efb14cc345b2cbb413d5143f05d513f6e0e7e9beb3f1f374c20d3effcad0307ab7560dd6b5db0e85fe9d325f478b96c70e3aedea6ecf7bcb20775dce78fc69999bd360b0207d17fd519242794b9488bcac2ab538104459e3401b013005837600b4effe8491f8eca522c879a6ae761cd3640324b40f6053fe0191b56eb6ade88f462bb4350f946909612bab94006d1ce367436b29d0d06fae6f7c9fb1a5662b6c1614b92702adbc056fe8fc2e91897ffcef03c01ba62a9e10849d09105d881eed1f478543b010d344a2147521b6351f310948d65ac4606c5dca262c59af88bddb1a063f5f55b52829667f5f2ff5e4462b98177913a5f951894e353f2aecf5b6f425a5e091220f9745870339b1ddefff7c1877c9956a1e3d6b7f0e3467620e76e40c78d0d6c6a8487e35c34e8e3079a4d5366f9e94b86e1bcefb5d422edb3800ae0571d1d2b85e6857ba4c916d5fa7b846866b30b18c8d523dad2d5d856d9f794d49c447be1c5ef3cbaa16b9850c72e7468c9e0f30a711ec4cc59683ae65e8785b7b3abf76a9d8faa987243499e8854fec10d0fe4d5c869ef0a21c323adb136330687a633de51ffd3105952e424025641b2d3c17be011ec1e292fa7995f7f8afba8fe6844e2287d1d26d699489c757aa70f1b6611d6a102e55398c827664a35ac3861a51639039fa560f88596e5a1665ca2db10bfe4c3fb945000ba370d58d86c6dc94fcc0eff1bf48bf58d8e63ffa472eb863094f3a8a5231b727be9f31667369d375d1f5505dab789a16b1bc831108c653c0870753886a88727db410e0d4329e730319a0b8ca544668c9bbd2da583fe5725f0833ecd5b464340fae728d7bc4fdd9eb72f2ffe51ce01503cefc5ae4c7bf13b0a5d86ce58df0713bac3b1893b79e423c902c89b93a384e659730c332dafdfa12e34e52ae0725e9de5427d7881105adbe8011f714eb30c49806921697ae0cde3fc51d2dacbbb80533d48ecb14fed2b5be8d34045e96963b0e1bda8a6e29612314166bf1b5e6e605b7c06b0ce356363a31c7f3c4208896cda3673a314f47e2266b1d9a50032de2e1860f6e2fce8a7927985f0faeca79807e63a3c61d0391a4253eb56238bcd2e9fda35e10f251150d5fea694908c8ff5d17e1122b3a58f2a28bc0202a45f24097f60529852639b3ef03844bab937c5976c0d13680b908605b1b1d88ea9a915f70c824213f35e4c6d415edad00518aea17deeb9a08ea624d82c8825d86e2a13aa6eda640197e18319872114ffe86426ce667c1146c4be6f515c88afe01985a657a4eb735e2e8de07d62c22fe4d93535d59c604c85cecc6f6a82141fe92eab431b66ba840e083a9dc5da6a56c39fa91d0a1578b54550d20d8fa75d5b4d29383a9b7c7e304caf8ddadf523a541524a47b8ffa759521828f7473fe6414a829d44391946bb33a67c402b86e6ee029a17af8c8ea1dae7daf55e2da2f4bbda2053280ba93e29c33eab0cdbf8e6794a7c35e2fff13f6aa67614583aa565f790f5b03734fc51f9498704f20e5adc1f5c23cf27b502e8660893c8fdbcf334b9dc3375287511609ede0dcb2ffb9ecf829bb98b4ed65678acaa2f3a04a37b569c894c58a1b355b499a1efcde94ba46d0d2968a29e1aede9844de33ee6f93697e5df76720b039f82f82ef668be782369aec47a3e6fe4712c5913b905aaf32057f45ab1725c0f378a0f14f16de947bbc792623e4b19cabf75db77481dfe2d95dc5eebd4c477721c5131d920e798c3dae917d73af79d250181b2566955feabd34509bdca1472409f0eeec35f45e6ce40b6efc6917ab2a30d38305647f6a8e31bb0ef3dac7796447641a715699a2c258c78d9624e8d4d3114b95d6526358673507c4be317a6d3673e4141ee4ed012300eeafaf982b36c8d92cb06c606a617d6bf812d1a99e11581f751598c1e74d910cef09aba8f68aacd87ff49decc401644c7d445cb23b44305b7644d39e77d264167f7d08a7b9c20f32f339e8d13316be2028b0181138f220749360e1182a5a0498614ed1f7f305f6350660e5b2d3667e30de2cf3d5054540816050fd6ac84ce1e965553a4dc7de4efe913215c58848aa1f2d025d437227135162a83575d6edb951c231c878de9a7b1a19a0302ecc195a1831d5d62247410c0540fb71372e4469c614394f0362963686a7467769490ae87e53807bc83d0331438e0fa525bee8baa935cf8694a377543668b377475016136e1500df3baae29dddb3ca77d33a4f5056ff78b9e2da63d5abc16e782aa8cf431675b16eabc56a519b5ffacf57824e0c8e1b83a56525bbb79c3082debfa9668b67ffdf686c8d0e55c86cef857541b9ef78ce7ac0651d1673c6b2eabe5358c8ce1039cdea42ae1959506dc7dbcd2cc3d928e12bcfee7c39d4ad4a8778eb7eb7bf2db9165e837cd8e3a1bdea4fe7753f6d6c46f575f7b060acfe975a9b324f5e7ee2fc97bee956ba0234131f0fb59bc229c6ca22b39f6665e07085d630217eb8ea8e350779ab78e5a2c924da57e83a541666f050bf36dfaaa173f165b2fc5887351959dab6e88e8878ce0fba67a279291a93698296194d66fe5494bfad724c4e64810e4d83afbf126cbef6196df4b2d885bd1092bc1487fb10aa97b6de255799fd07a776eeaca7eaef8631444b5cb3323355024c10a5dbde6209169c90be2a7ab4f11016df434bf96688091f82047b4fc7e31989a6581a74abb16ad3c620d5c639035497185d848a77af653c3b2531b25b32c551e037bc041a44334ab15c25206192de0c873018a91c2566782f1e43857971d248aaad709dfd230cc66f01c1018d1379317e851e74b96cb7ec1f112de9cbc95a8d258f6ba28c31f746d93f2da39b2e3130d657fffa89fff161541126ea809ccffef142fcceaa411b9aa002f040fab755261a68ac957aeb8c73d7c84af5090c1b2c14624d11f432877648907a274bf25075ea9e49e6596dab49f62fe28e8b5ae6845aee0a0158a722fb8b00ee6511e8bbe47498341218c3b2d62c4f92daaab7fd703b1ca7f72c3537eb68819439be5b3db01d07b49f9f9334b202ee5e9d63070b0ea9946d63fa157f0d0b3abb6c1b44de95e357ec4c83a141d5bab460dbfa98fe3c042f5401555d155bee1f316df3533c5b33ece23be6ac702e8f9b7f0a2d7ad27a57edb3d190a40de94f34cce51116de03a9ea947ac7f0bbd8fc1bc57bf00d4d95e306fb190f7dc4f2bce8916673706858db422eac6899edc7b1fab6434b3664bb0f651b3e3ee7e15502f987f93a3f67c9d2e693c74f637a524e10987fd5eeb1c52ab2275d7d9d0dff5a318e3d70640a07020d82d440be27d916e60a867f1f3b5f3ac2167c6ae520701dbea18e0b18f24d37ad0b6e72af48968a9bf171df971d22265b7ed7334ad23ad1caf71919cfa896b7a6a5168a265a56de389a587e75ccc2f2fca2aac8287ce98236c8511331107800c3b19db66319957a6436b7de6ceb8e9489b0bcdf1b5c0848ca40eebb722eff3bdda32b60d41af8d5126349d67b5b65d11f883e969b40023be2bcc4359d43bf665dc22bfbd362c14ea8a2488eae8b308b659664b8591f3ad6ce3bc09bc683064778bb95dcab8adfb09aef58e50033e538cc5a961e5f3ae1cd901bd9924b4073c9e287bebb9d15d6f6508020758110b4049ea248034fca35e4632827f9e7a07617b69c6ed4308b384cbda8e43acb7a7a165ca069e76fcf1721f3b82bce25c3697d3bd0abec4414a56f10c5e51424dd080c3d6793792f9adf1be0e5743b8e035b3291db68362c60491e21c9cf1ed340304c743f7339fe120983fafd4a63bf57f5f17fb04a613ca6e24554a4f5ded7ae7637b5801b597d7cbf15ab062d0fdf01a69e1d8542a37b15c429a6d1df6320347fab017db89f59024c183739ba21445ab5b7c157765ddc683c7778d875e17b71d2e763b2f40398000b6a1a606bc4fcf627211f01a16ddee39a4528c403a3ab60b071b716db6735dfb5e120f33115ddd2be81926fa80760b3d6f1edbdf4911b62eabf8f78a6d65650d14df8953b8764c93d52f30d7d65ae5d2acce95143dfba92591f84384e17467eb481efa013fe8748773a7dfdad27c4281b0dd5f09d92b5f04f5f19110e9f4cfabaa6cfb6697b31bebd7886231d23cd265b419312f53e3ec08c1068ee61f7885aa00c7bee1b272ed471bbc50aa256522aa34110dc1bee5736738ebe751d607f2d470876bd67c8055a04ef84af5766e63d421a6468693c723b456228c00620895309cd171791146c405fe7d012485cfa22ca7c94410c610ffb4cca2f1817f273068c2d6da356c5e697a04bc418bb2baf899f45649e67896dfb15c1f81ca7a527667a698ce0f58b8f5b3fbe40f95075feb64d513fdc056bfd7651b7e4045b6ad74064b39ee587f24b476a953ff9c9fb2a2c47961be687dbf169be582fb984d29a79fc22b3765fa3b3cb85e2a78e532071e1b6f0f275c1731ea459aa2f20c64cf6f02b596602bff08b042a020981907d02d9a66e001c9a10a5820321f6b9a21e89a47b6115f17dfa49f7d5477206cb6356bffb50ab0d31e24c06e420e28b758c0ea4818beb38f5c53f4fedd4c4c6ab0f2dca24173eb4209061ca1ba684583e80e992e3965a01229b9510b3bee049f515cfa2f40352ca23ef2f31ea501fb93405d2e180bdfbd1ee1f10bffc28ba76eac0722bda5f269e18b303f5d58621f74f60826224ca0500df8123cf07167c741f86e5cf39ff3638983a6a41d22d7560ca799d52b4b34a80b62b2a8dcbf0f72058656a09402e30a168fb846179d277f4505a38b2bcadc4a7d3a55bd49848f55930bd9e90e69058ea3540e64e52b74abf69d1041ad873a0dd5e1821caa1406d0213377f80a04b5acbe1e0fae4f9c1e3873629ab19182e80ee716bfa497b01969bec48683c9c77b0ba3a96ee4b7a8a853e0164625fb478143f8524d30c54da62fdde63077b6b122715ec14933c7d133f5372a2394814f0d513be523c6e101fe3c8bdf11d90d158cf431d3ee1e371e268078c95c895f12134fb6448c4d2e04f1e448c17d78a4df2850a90df0a3ec603e1810572a9b5c1e8e94d299477c064d741678fbcd2398767ab5d8de59bf83ef692cd0d6716736f44fcfdcec9b0f1a9e81f165b2cf47d57539f2ade54290149c2d3ca964dd2293e5fbff0a8c49c6f8950e535e8524143c61c9dd956afa989151b441942c64210cb5ede94a1d0eb5d759ad488c53f67198dd8b3be01ae9062a2a90d92080bc1cea05042057665608a34a14395565e74b870029f03c9c24f480ace3524c60a753d3880a53e17e162c8ecce2b2edd2217f93ad8a436502d5bf3ca4b2aa028f173907683e3f814026b3d0a52e4e8c22bd2d2f69d02aa8185a07269324d84582fd619102c86a36d0fc32e1f2306cc1914d88a27ce9c2f0d2d2fd1874564226352295fec5127d6095fc707d5a0d1beda9a5db111d8e9fa47463b42b18a4ef0040a1746f4c4aeb438361a6ca127a7ebb4f385f1cf77676bac5be9003e8d1c8ee3acd8a65b17cfe714fdca6689585a3ea2d2a5afd5781d5ffabbabce67eee19661683dd912c012c3b3407fb6ebfb38cd430eefa323fe9e0f622521ba0fe22fef0033405e491b4e6732b5a86414e50e8ac7be293c83ef037a79dd39a2663a6e9345d6c510bf3cf09c3cf4bd5a6d8febb78620b68e8e98621e10d5e53c023db5579a0c7db90f93d99ca1fd94e3745f4f6c1c0cba3315bf1cf9e0d8118dae3053edb33a3972e936f9a486759da95ee6f7c0f14d1afd81835dce2cc953c574aa2b1bd5a6ae2ee7f291fc50e659725841a8554f2771ca1042a170a00ae210f2fd9b95ad74060a4eb61dc403737f0c543cb5a2db09eca71e08e74cd2ce1089f67744f35105330bba9b97d85d70b8d0a78646231e22918720a19a2901940e26cbf403748a414901125a485589d79f8123d6318c44108846912e0d1d00252123d1f4919be0db2f3a1240651550acbd4f6c72c4893d969f5e9ba1ecc45e53199804cc8cfe785bc59953d29581f32b47aa41a6e9019870ee626f5274f24566e164b588a5a1023ca233b50d3b1e1a0e32fc11e3084edb08ee167c6fffacbf06a23da8c079f1c842ae0eb342c79eb5522fa79d265daca35e4fbdc0f5931abffa5490fa8f00f155094aba28a890e06f6743bf0106e722627d1b9a017f41ee7964a69679690e5ce544a4de6dec421191a8a77acfda9a6ea3d47428b0c925b03d4dfd1bdc45203ccbc1686ee6add5e2f31216f589291aa2a1291503036dae8263c6439d019afac64125b0749d38089a1da002e1a894026079a59466808583763f77bfae67f1699f2db3317fb63e627c094d85fea2f75534468a800688036b8eaf9d167b9b755b668798ee69028f3a271010dcb505b5d67c7cf7b932589306a139323ce630c80e2ee003931010c6542a1b4234c610eff578c406d8801e11ea5de3514d1ac7b97735adeeda9020a21a2046974df0104847602884000b2a6b4339d6c23436c76c2e3d62503293ddea171001b7e6448c06ac65be75d8b0fd874a4cafc221168058be88be2859c0411329b26e7c0a760976a7f67f646150567b69bc1cb3ebed2cf4996b3493e2b1641085141d63d4650e837c941be760a0ac394304448a074ab698731967d636b91c36d626f3c6a5d32cce6e4ab2cc229ea6d437494b8581bc24048516d7a669f69821951a4504a343f0e946b4bde877e0ac318ed41c0c313a9c244f51d0622c7a81f825a20941d629b75ce55a01094b4ddade27104c76c2588738ec09b59c854f001a07fb766e9ed56cb41b521b8f7b8b835eb3c609584453d3db9bbca0fab7b92812177afe48542d787a4f173fb09736473fcdfcfd7953bff108fcae91df6ca4da2bcc306f6296b132ff01055272487d7a83ce6101c5b1aa43c64e2f7cad509c5e0ae9ebfd4ebbe2d477244a45ce299ab6a2e3d0af42c5695a57adb8a90e5b6341c5b51b322e00550fc48885435a5b40087c08475331ec0cd4bb7c37d4fd0001d28157eb7182d383031254a8a69122d6297ad7088a808392653bbc3e88bbf140239d66c0fdb2c7bc0710afa5034e207b8ff3ba90f378c1353134d4641c6550209a4d2006e17c3eb05cf03248aa2ade55a52de0cf0931c5262a7edf5f317237907daab20314c5af70c975e0f94ed8ad5d749292ccc01cb4e79bd755e3e53a80663776b5d78d9ce7c7e28a1c2eb19558f5ee0810b46fca08ddbfe2ff468829357256bf707d8d98468c7f71a62728bb9ccce2c58c6b1fc560561c14b68f3ad96f5dabd60c7245c007a75de8fe2e584f1a8abc781f72d60a906190e1101c0d82be403dac5d144df02bf167ccd3a262aa2a8a1e02001f18606d179bc228d50ce6f8ea8046de83b7dfef4a5b97ef9d10a2eab02ef1ca9bb1848fc55bf96d642023946cfda9418b7820f3396d71f8f5d8702333792b60eafab735adc060e801785e8d586c4404203b22d7b63244a122c5de461328b6ebe0ea7903aab54557d5649208c28454dc7f25201a5a0205f5609db6e3bdadccfa76635ff33ffef640203dcf3d87757af05f6a3d57cf9149ac6f1b8b4217ea6740bdaf78d9bca11428039d6c835f861549ff898d072b794d61f66599b4c7be3c048347204f102f741e8af763506171202d6876fc7b6b5452a4280b22270e69f203b92fc7322395ed5a6989deb9959d3dc1dcbb765c40467bb157ef5deb44f83ba1c4a2946a2eaaca277c81bb37c790a047792772a138fb35da83fefeb019ce4ad194c9ecfeab9e046f8fda8c6e560d7d7317523131d56d8187ffee7a5746b4e4ee20f02e970866b60bdb9f59dca01b603998c80c25f56d8ce6c098923aa9cd9ba5d82e30f6e6743f8ff1a6e187141ebb3fee52467eef617e6aaaf305ce088e53db0d1e569c64478c4ac1d6a94995887366297cbefd6d8a2b77fae2b68a98f0c890ce314404a91d938f5211c848beadcf47613df4342dc1fe71e4ff732e28c6a1645ca7fcd8c0e3100cea7c75b3f322e63a9266572752e23cad2c38c0a2e7fe0be4bebf654da540cdbe035a430a4052be44df3a4dc76782e3836d4766704ea6d09d137cd7b63184c97e481586d7024caab6dcb641aa907cf69cc8ae4da191669ae83ebc10560174c675129077f5e910464735ee257d8e862c20cfbc3fd3ae3910686365dbda704f060636919358560703f6d81917cd582635780cb668584653eac90d6177a9123eef67f3ff8d0c2b6074a47441fe7049812176471305db133265dff5af35f93ceebe2d59e6df581ee3503dc113d71f653ca5089a15a3d254d77a14a1943a112540ba53d1fd2609dc24afb5eabce77fc2118ddb6ea6714c5f57502c78e555e8e06adf9af35c4b117dc09310c43f0ae607bc482f96731138b48be0736ab239741c63cd24a0093c3c723ccdd6ad8c20d3c9abadf12fe791cdc8a5c341fa9a51516c60b772b3f63f2a0897e2b85f56df60f97d13915303fd3130b2230be63b998c3b2ca0c9c032b1be5ebb9d312f329ee4b5415d516992c7992911a448eb6c154c20e28ddd15cfce1a7f05d864f3a3b80849f7ac4733088bd5c898a797571636617b4d95670a9f24f6863d6ae4bc60e8c6866b93aa0ba1d52688327c488e1e0782077cd6d0d988e5b580e3c23268f0d72b08855849dc911d4c308a62b3dc41d2b5abf76f48729c13d0310d2dda30bbd826a6b44c4192aab44c16a8773558a61976167ff27a7eb77a3e14be7c0fe0d32338e27b30a2541ed80a99d3aaeaf5ac604d3e2000d7a2e2a80ed2b01e85401341ef12304380b3d884aef85713719cb2268249934ab8839c1558a40f3b82deb80c5aaf3428dbc3bd488c826f055ec00a3b52ca908fb708931f05fc60586a58a3a76dee813e7824f0f3ae66d10b8cdbc9fce6cb6446cdc8fd75b95cc671e7fd3447b8838b9b7a9b7de5a401c985923d65f99220007bed209ff9fee3ea66e559b41d9a50c5aadc07c0cb3b0ac06a3f556910c9e632eac881049adc8bc306777a514535da874d3f2147fc4e62a7df91fb8f3b175001ae01081aa70368101b585e5a12a9064e4c23d641a4f99c843645a2baee22be65dcb3b51ab6f9e0fd284c24677fc60d4af20725139409991a92e600dc0549000bc310ea727891b489bb8368890b3544fc3cf23093c6b36cbc232f12e31e16e10d10174a2a7e206248abf93a1bc8d158204816ad0e08c5d0cbbc06be7407f0181e061ac206ffbcbbc43979ca2fc9d9125d11a50894717ee5449946f9a3f557ece6c6491d757afae6501ebecd964524d425689701a05266f22e5d3704c7c7d61e1cb6e2474d47e6adb0444a165532b0884cf47f2bb83b54154c094237bf62e3dcb148c27d6f9e8299ecffcc4aa77266fa63e87dce6772ca88c8fb2c307dbddda71e35830c81d8f364031776e73d3c2c2f47fb7e8dc9e34ecebe600998fbde7960255bbd1020280c92c8bf0db4dccecd33f56b3ff5cdcf3e8dda8bc251b0e27bfc2dfc4a944b0d91a11e83f68f4d31ec33daa62f613400413cfeb285304ca6c8069a0f9b2184f5727c21ac8149aaf2b640e69b052798f8cad6e262d0340199ff633ed0b22263821ef4560e2f4f31040a0f2aebfb76177e307726b2c5c8c481718bc9595e33d64eaa65776db16921f9a22dbe91356f458c7959b73c6611cc7afdfcad561a1fcf6b402f2ddafb997cb9c5dd73a0524be63985bfbfd561da053560149df2eeae7b806e994cf784c5fd3c4949aaeb75c39ee542841e8ab3717aee90bd68cdfab8d928aba580bf1f49c5292163fb40201d30623c8a153b4a6107ad68bd753e86376041d29963985181eea5eb3c3808ed08ff0744da4110af8767be8b162f399e406f0b29e1fbf9c4fb999f662b7d7440a2a591e32bd60406523d38467688cd4df8f68b41f5caf70cd35a3a2fd0ad4afed74b3b5c76032723a835c24a4a786318fe4f97f66337f25d509f60f4890a90f2189a9aebafff42bae8d24fd4e4b81d734a69849847e95f656dc3b4bbe6b33869832168e71bc4385f71c39594e6787f16da434dc7b44a33a09d2260b1ecda9e1c1ed994173484511d783ff70bc9ce20deb7c4e431ccc821334c4c08227097cc7edf71b8878ba52c2aeee7dda86db1b7b259f02a301accfa9e4beb79932ed508d245a8307fcfec91d9786164c1d8195529bc6f2991f6a2772d08c1946603d3bf66e863f0a7af98c2b5afff55664c7c2e9547ff553f2a3903ec28da8445a997fed8441c13dc814b3184d98a548a1ab9462d8504334fcae08fa8977843223abbe78dfcd8f07ccdd9ae9271b5874070473321430e4a2cb2701692c47be1759fe39d0647771185158f1d4ad2a9b6875098428b3570977078982da613c1aea23656e38760ef79c3a1a7755611309c9b7c95304c0917d17633e6446ee875eeb9ecb2d4a34165e05faa8e288df72d6e03677f0c5e0f0a2d8f704bb8c744d3085af9c9db879e96ce2df800993858b4411da0048d0eeef8e04048492f2d3c12ea010e0eab61d1abe294869c956f0168be469e1ee7aa9e22be062c8f5553cd1c3f17805ad422a1a4ca51423e0b5058e1cea4cd0cada8ce04ee99704dcae39b26aa8bf4260187696242908b5e304dd524a29a55ea9f72337578a7cca594f80c7e3a3157064dbe8b4d4942ec00b8bbec239b12de29e6543dbe815c1d969ba91cef84a984123f816f37e6c8a08857b57921c7942c0b75a7a2b509e8013a1e32193f211f45f44e661aa9407208c0f6992f50ed5e243ea0a25f8f22bc0406e3aa95b4698d014a9256a1d0d9b8d706503dfc20332a6dfe37a9373b153691d124de25e62519da9902dd971fe6e283b41cd62444a4610aad0e43472d18ef0f93b008f559ed9b4811916ac8b0ec4cc436d6fd4448fad9e11d4a5062de35a714d066b499a309cfe1c3950a34539315e5b5511504ccc3a75026e9c841fc111799e48556ee55cd46382d3f13d10bbba05d9989224854fca0d4f0bc1f32041caccb67c8665f60140c60cc4edfd92db0c27a59d2c7c89d7048a006ed3bf9718e8377ab5735edf71458f7f6896e4cf9bed4ae806cd3eaf1f0c0d5f0ee929af1fb45c8f7d3512f5065ad0ff00b5c1b041b9073db478eb06741f1316630f72baea7a4e244638c5bb022bbc2dedfe87df102051ae044fd822cc39511029f855c3652a4af19f9cb574c763e4535f16b7022c7383008a6cefcf7f7df90fc7820b1bd6a8119d6adbd74b93580fc67e4b0305a76a59b1edd4db47f22fcbfeced0eb95b94141b5a018a881907b886dd3c9bf64afe5084ff8630e187d401a1e19d517dee3f3155fe0c12618e0cc01766368a4023b3609185b9040c87158d0d7ebd95c22429c99b7218f53a98abef7ca5a128de1260ff4855255e3a41e30ce8811400b481ba288e24cfc731d2c70eed5c62a788b3acf133fb3121650aaacf8c60410e7e97313528de2ea656e5ff6380af69c06094ce689eb113e327c22ad284ab7c9be7823735d10d90823efc244091bd15723f01b8dd89d5e786de2677888a9ef65b829c56a8a084a8c1a379bc0d4e7b9cf3c66c51344444c5ef453b07f076769a91829c7ac0a8ca61678313500266c133fd37805fca0ed0f46e1709463ceec1df12626b9f82e7e2814313d1d6b28f33ece90702bf7bdba426a4e8a8444d4a239be290c9fe97aba84f3f40dd91d251a76428cafa2371764ed71f978e393eae0343afbd4eaebc85aa7dd3823bf46f3d264aa983fcbd55e0bf099b36082fd61d81eae3b6d720808642260f31a4f9f3e7192f08cbf35bf4259534f4166fdf1d9772640e7114415052379eb0f000be0b7278f77500b994a443e8ace4fabd76cb9e75948a5e81e1c0e179cc1e59ededde672743a8d0e1e655c74f6a35041c2ed9c1ac14ce4aec16ac183afb524e47abcea06e7b586e2510005dae21b3c8c1eb254b3e37125abe3dac633aca3565dee2b3d02de0889394d294a85a49582156a19555029878a664451652b7a68d9252fce1ba36822e53a0b8e942ccb447d0e1780131955be45c74f1428513c1a657e72e9e98ddcf10c2cb62b2fd8ca1ec8855dc2788d68c9d87439bb1068b8df0847deb7f2fd874e534e4861af7f51d1eebd65b66b04151880b5e26a0c385ad7839c63bd47f500a5955955292d8ef063bd2835875ec8ea4a419b67838173d758df830ea5d56143a4b4c7d215ea4e7e61314195c52ca30dd5de8e92ca0bfbffe919060d76bd3f54385fd9c83cc25ef5ccbd3788ae2f7b2bd787377c82aa48e039c0b0142888389f25001476bf7b18b43e9cf3244754be8b25c2f62f97088e5bae04db51a6f8d61eba8a825cc74ffa1532c9ff6c372689afe82ff053c01fc41e4958853877dc2dd4a0fc41241c939c294dd4d436a6886bd46e6c0f189f7456f608a0e34cfe51d967a71acb09eab8957a23532d097fd88e36f17f6818f1e85b6265bca1c2a082abe98d19443e06e0152afb550c327c760771f7bf84958009ecf3a3c762bb9a266511584e325b905739df9bc4531931681c258e51320e032b40187cfa1f4614b9b130cd48a6cfcd14baf041b86d96520dc85ef9f713a3217b9fa0319f8720fa3e0dddd7b5286f37d0a29384d5118b81cb5c3260b3b290fa06b6ebc4188f39e4ff58e678c7b0b434cd5ad3401851b30a1bc3de2af25f8b22c9a263d0c836e406b79ae886c246a167c51a08415f6311d3835723bed833f07f1ef365a5824d39789080ff281d53e234cb6e0c95c5e0c2aaee763d5b7ea6f844fe528f01377c8c13446105895811bcbae64aad6014157c118be59421069ce44b8e3901bd8cc2a4dc55798a419b906f1207bbf37fd6d8d925ea68b1f8619f24ac05995528b42f21ff4aaa0f95c5d3bd178ec9ff070a549f8cf8c05eb4405d8659ed15c13146503cf75d21807a528b6014905d0fd63acb69b0e08924d5f992c877c8a2dba30eebc28c47e4c647e4934b72811e081c006176eb1e26b8ff8192c48f65df17b31c5c2f59039b1ba99e786c80df55d83ab029cc775915cbd9ae1b7ebf523aad850b179e4fcbccd59b0b9ef6a95c7fe52d5ba644a3da299efd1324e28390e7ab6bfd5088bc501610207554807b7291daa13303669d74723182505b9ea13aad26002ec0144cd41ee01abf1c988c23c6676c338da39c477b78b254703d9c5477ff1df94e5f1320426315997db9f669800a9b12143a0b279e57442c2c26af04746868aed63c6649416a8694d7100a9e06a0d84dc2ed93c96c92d271c900e203c491cf8c69e588c7c1047fce8e91e83f4d1f221d9ef3ac9fae688bd62c95dc4af8b858fb37b28cd188d8fc7f6c9dc516b8e3705888b1f6fcd911401d81b1750f5adf71afabaacf909ba404c21b7b36a8bc5ae4304fabe4c91aa4a4a2d6d76be532d81b6092bcfa54ab9a5be6ec8506c30200464fe193a649ed6d375aef49a8bc625a2d18ad96cae1754b8d32acd6b118c7b8101b0c07d6119fd9f54842ede6cd3b8803001ff154e3235ee4c469b6ef37d328409295346bcc0db1c56614c16d8b33d12dc9dbf87202dad139808266a964a56e88e215bfa3edc5c039162a3dbdc3c3a50383916b3475d548c9a1f62d632c14aa3c9f730332aacf9bbc7d22fe26f3cd78c5b0bf9cd7564bb2ac108690031f52c4aa484ec313b2283941cff5fa5c33d4439e9be0f1404846cb9b289b10208f5a56cf2576f56e733d3a3c0ec5ae1809f584e06a6a2cd004f9951d64ae0b4a2fae02db5c2e2004854b11490fb709977bfcfcccca412eb70a59a002f385c9e306d4ce82648fc70b52be3fc40ffd4041c6572bc63252926968ab7dcc9ff181361728ab1c70595a0382568c5534f0290c13c8c967284156e928e0561b342de895ac65188b0e22d9a6c0162ea6a76ef5223cc7b2f0378e28782ab5190c367d701e636f24ea50c115660a9bb5700e0a392e86a35e92eb5b1b44dae7803ee45f58eb41c61d0515e83619036d02d38cd9fcba973a5d33534f635626701cd0d6785501e9908bc7f68eb78fe6f428f445876f64d7ed4fedff39661ec8257590c4a2d79fdedda87c6b5cf826c02ecb1dbf18ac5503cb6b40f3495c651607df466c2ce4a9b1a426b55510b26b870efa62799c992678c16e51b497a62f983a6fd81c9c8de66e1e7f7176b477e21eeb17839b82c1dc2caac47730226f9ce878167e72139ee812b8595aa8270f7285a58c571098b12bdc5f4497a1cc21f4e6106c33586d90f9033e22eb637faa376a45ae56d6b49f2d902f47a5e7b966ac1f5ff5df0c2e65cd1ce859da1e43110ae212ffb6c07e89ac928ae54cf7d63f9c896281782ecf0172db95aefcf751517585d1f77210db73af9f510a25c3dd2aedba5c54afa670a60d5ac3eeb803603fe63042c5b10875ee15635b17e1f9f32209dac0edf3e4feb9683d47364259a995ee2c8a0d07d27bab104ca2804f7836d844df9e873c51e088325a80f3c9795d24d3c9a76376e29c3e2865954a21f7ee00d98e03fdb43c8348e0cd7c3bc41a00bb2b7990e4fe2cbac4211e1c9910a2b63a3c7891532d235ac14e26a8884acf676e41154d664a6f411df3bf0f9cea49c5b8775775a8f282ef5ac67e7f49d5a462a554b029bc306e3afce75e5b1a23f5dd89d3a18557c7b8c7a3268db3ef453e587c46464cc780d3e1534ae693cbdfc9847ff4e4418ffa4e4fddb3aa12848d3d7418b8abe916d2a0bdf1ad8e6503ad3e3f99fbc241e622db0bae15cd24ebed700b14a2ec019c0c1fe226395e3636ab6cd7c01420151b2a5f9eccb9a29dd58d2b739d1cdd29c3278f99be3e4f8aa03bb3870415d3bd6d9bad3ee6317bb401db40b53e9b56ddb35eb4c7410417817962d185a75e20f8a7fa8dc9e7fbce338c6a47ca8eceab1d9f91b2f6d34e6a2fc98b3b42b61f9389bc4619fb880adf1cec5162aa3757caf3a0f3030508ad547dcd8138befd3a27b5a89811f89c7b85668aed6cfb96e375c021ec67a685c857bfecbe7125c1633e671c6339ec05b3bf71efd09d74a336c593d8bf545932817f50f7580223ecaf4d56b32f22880223fde2973ced7f8a1f1b0dca6e8ff367df857c9aa732dd40a8837fc38140a1868bc80bb59c8b36e13b63f8684e13c0a5f7367e0ac79c80168483e59b7c7b4def84122b995cd236f3088df8711c4d07402c7f4a15102617cc8c0cea35e65f8a9405717d752a9e08a715ef4e0de1c7b7cd8abdbab9cecb1b3d040ab5be9db94bf9a87a905b9e5fecca69c27eee1877a028db9538ca9b4dd424951405a7e1c3995072edeb967c2e250c410b9124a6b49848ed64adcd3117e8126acf6b7d95621b8e348909a3e88fc9daaf8b91c0c9d48093a5c13a395a82d8d12d1304c0f70990e364144954d8a2690a78667be0a0e9ee896f360c9c7a95a41f591788ecf42f4548ac12b03b8c5288a06143d1cfb5ac597c5be52023851ac2ec6f4934b4486dd8aa11f4437e90dc3e1883da5a6af8418e4ed02da74568161605455510728345b1dec71c16b493e0960688744a51e7d1361329395a2a3303e0d7a1b61d50156105381c3a5d43f94f31130aef5d762e8b75fd2244d9ab66dc318e456919881a9e2c9c2a139bc8996cbcdfc5e0f126c5b92b64bc8de5b2629a50c7c077a075908b844621a518340564a9d52a7d6e6eeeeee4e7df44da15fb8d43de38b9f855d851aefed01a5145755aab4223535d61ed051252262ab0a8f44d02f3f151ec10eaec627c3bba29452ea18c438c4a00d492a09fc26987ed84194ca49f0e2510f7c5c9190b8b6621004e9a824a42c941c19b1222151c23a8d1829a6e20a830ede48ee15ff8a24706aac24eb664ff162f1c57b2fe85404c1301c39588bd16d83bea67bc5d55887ac467a2b097af1884b8252ea231854516ba33455c2456819433d699e4ca5f1a334b23e8cb288a410e6978641acf2ade0d8489d65bcee1508b6829756da6a04092e610c928c2430c6382472f77bf1e8de7b1d9b388f288d8f2524464a30a8c22952a485c112d7a21185f193d83c9d8c39bcf7de90621ad2cfa693121e5f978a9884c73a64348694528a55ee8a8d55164aa92c83f813630270f560c5a5317e4a59dce6b75aedd7ef83e075968bedac629adf3024c9d5ea4dc0ebef625f2aaed10a5341ba639b028da846802208e29231c5122951d25575377177f7943da9fb257d44999094ded3a6f4a9ff0bd46d7eadae56d3c7e16f4a317540d5e18794524ac35f892ebcf63b1a993658df91a97412c6f228be482823323c4198dfef16b3270631c64e73d993febdb5d64bdf524a2b65b9bf43bf347bd2baab766a6563adb5e23ab3277ebf54a4a5445424d6784bd810537a6faed471686e535feaa31223b5b6bb5afd9f272dc64cbfe0bed2945a1b252fac0eb95f7f40d6c77435566ac3d635c136e871c5d71cab0fc8fa3da09bf699f88f5e4193b2dccf2108826008861734fd5af7d39ef8de7bc16a12bece3af63f09ede997de8a6de869fa5e879024d0353fbabbbbbb39d62128a5945230db4a9fb284e0eada93eaf2eb62be77e5ee3ef22087a18a5363457508592b09c8fad92f0c74ecd83106b7e5e90bd297759d585beb8c7e45196989d2578986e61acba3c910c5567aaf6b1c8dd4da2ebd947a9832a280e2b96b5629251afab50424cddf39d61db8bb3bcc55ee4a1882eeeed89eb4b28c97d65bb3cbb60d3ad75befcb7592cd37699578996aa88eef0d42dc7b2dfdc182effb4c72b9dced76abd56a341a2d168b9de7e972b930c629582cd66ab54aa552ee4e2dced6aaab8cb596662b5ab75fadd75add5ab7d6adb56fdfbab536d33aa3ef37e3e876bcf7d621aca03a39be3dad8b96aae9562b66b068d8d35a04c8e0b2d99d357a311c72683af0d478f8dc80ec695520644f5b85b0a71dd13a44154551144551ac660dfd5144547ffc18e5a88f067f539f1a1215e980080f417f1015f120853e399b6f4888fa501f1c53e6723a7c0cb3f9b0d0500e8444213ea1a19d8f2777cb0501e572a3daed96cb0105e100480539a0a01c723adc6ab71f9fdb0dc76a1afc5dd3e1630bbbdd7c7e6ee0f3e3e6f3d3bbe1d468b51e9e5a6d44a3e9f047d8acd5787a6cc0c3a3c6d3536bd42e408bd17672441acd15d3e0ef980e1f83345ace8e901c1d68393b34d0663e10c6ce184e4f8cc55ce7894d30269abb26d6c3a9410f87580fa72636c4e93a2bafeece93540a4396cb65324be679d69d3d79437557e3acbbca73e11c72bd8b06195cae714ca558ac7f974b061a684064e39281061aae990fb4e0593698012efcb3583618bbc08019082100bbc00017588740ac156b85192c562ab55ab15833569001100dd68c1572ac990f842206410c820e6210c420086210c420e82008a61cbb8fee8fddb13ba06a5b65dc6d2c76c7ee23767777cf3bfc51cdca850e5c6dd7e11e7598d261e83f7a1c3e18ea5c0841864f57ac34b68ddebe8b110daf663e10de6a52644dea464ba5c691245329da2d06b45a8a7673a5663e1093811c2b0c483a1a8d46a3d16864e3e793e4f65183363efa3388175dd626e619fc4fd7a1b9b2718dbf0134db682c5a9cad55d72a6347200c48faa317dde6d7568b1345510cb76b30ac19b5bb3fb5e4a8c37773d73dea5087e1835e336afc21265742247eaa378953318c7af4f6c9958fc651d6213d25e51ac6990f60915a5b759bbb67d16d7eadae3b0cc3f0a903aab6a39b3656872fded1c3d07318869986216873c3f0434dffcb21b85d83ef26bd60f8e06373e3ff6cf88219aec61f82a0e9d5a686d4ee42af16a891b3ae7f5735ab40b44f2baed66d6a8ad28e037f674d63665c58c5d166dc988f34e68aab2fc385555ccd3191a64961786a19627506edc26ccd22d4996924654a59a80d53db0c5b5371d5bf525b03fe046aabd1d3da5a6ca80c4d066bbb7f63e0ff6ecc0c112aaea6ceec9bf25e8d7993f907f3d2b3fe8c9a8abb6f5f861b136690c22e507137533aab6f1f0868a5adad94a8fe29575c2f2003ff97c36b5a4d2baee4c5dd60a67536fbfecb619db1a83d6bc377431f315b13d3f52d4d4c0522756dcba39d873dab6823eb8e3deb0e5f0eb91cdcbbd5a8f146d0402b22ac8911912e9c4294345c41a20b7bd6143fa872f6acd707a4ad6a2757ea24adec5959a83a5a3296a2b16334d3dc6b92f6146d2d3d754a5e58096b529249b5a8a25a2c4daac5d0a45a1c61522d8a98548b54a772ee4839f263c464badfdde45efd3e412a74fa7dd3a1fe94f70dcc9ba6cafb24e5fda57c75176592e4c81e74fd1e1e269f8d5cbd088ef8cb2727d4e7246712f37fd372e6676a61abdbc7b343ddc97d630ee768b747bdfebb9c111c39d8f365c3c5e3dde8f54e70641c9c1c3939afc3646767078f3d7dab47899e1e1f3e279fd309489dd9fff93905a93320a0530bccd229e814f43277a983b6ef3277d9016dff24bf49ab04d526245fd638ad485619863cad4ea751490c540c2c543e09f1a59390898409c34ad7ac4e4227259a1255a24e27142af5fbd3a6a71557f29ba44d247e8fda446a93e9bde2546ffa54c5996fcabb66a5515fbe88324b5eb9ab1a659a272143a7216d5f952ac961b53a0df977954e4427a21311a7a25391c90dadddce068fa74bdc60f57a38ea8c247374d4d9ce0ec9c35522797856e626dfdc650e6ddfa45582a533eacb1aa612556618d2549a4cabd39bde9463589d32d903d9a333fa11260c295d93d22394128dc849e464ca25cfda4e6f9f561bc9ef6ff59ba4efa8ef7daf38127f9facb892bf79d7a4f4e9455e3c9925cf2c77559f74b6c4247df8f89438d4997d12b3cc403d71d499fd112820233f3f4180eeab9e561c09442a2828082152e89242eaccfed01039a4ce884822b2889412594416a1ccde2e39b04b7393f42e7bdafec9f43afb2ac508bfac71df8a9c4444eae8eba8248629869429a36a94503b9d5d0d0bb30f2bd1944c25b3dc99c65cf2def46e63486ffab1e244de944b2f5eb3e495bb72775136ea8cc72b9f561cea06aad7c38153e25071a6b75f66a0e25039eacc7e4e8e8e3adbd941f15029a178784a739738bbc4a1eddfb314c3f4e5ceda4a35acedf24c2653b61967f031a37ab0a78d8d363256a289956862a32dd1a07a74484f9a308cba66d43db2128d388aa3e9f7a77d2cbd7f587127511442f9f0f14101f94105010242b52028682c71b0b69eb5897614dd6b0ca310b2b1ec89b3f196685042423aa317eb09decf90509032b5335c5d0203bf3f7ecf2fe0a7bac485f65c02c3068ddf068d6dee28973858987df1334b5ce2589b9738fe5e71e17bde36b7c4b167afece180125267431418420d514211d9d33e91f770b0361cecfae69218f7665411285b03555402cd6aa836b86ab0368060dd400a2c1d2995a12e6e4cfdb1e78da9218dc780dfb4a8ee7ec2bceb0e2a107efce69daf9577636a0d288cd61d68fb79572068fb79db090c5116fb1504b6876f8eae5f7b2426a228675777a885647000d9f1d985a6120401d2db857a676d7425053f7001cf6ee63e0d2285425d6b09a401217633f52bd0c5b9b0fa9e7725aa4576c7ebf57084863625d2bbfe1455de8559205d5b5c6d33f5f19183be7e7174bd3d5df7e5ddf0c6d49fcbeb5d9c1b8333c10e9f99f3ebcdc138544d5d143fec97524ba9a5311fb6a7eb965a7badafe00a31fa46dfbd231f4ddf7e29eddf77f3b616d0b47e3cff6a0e455405767fef3f1a7ddfe8de6f341a3db5a71dbdff17fee7230fef5bc74eba519d847d81560b8862a594524a29c5380576ff248031c618639c22a6ddbfeffb3ea1fb7de087af9bbff1e36b03aea1da92074490c4eef6da7b690cf834dffb36bcef9f0da85b506d622dd6d19aae453b5af36aab4517f1682965b19eefbdd46d20bebd37bf40ddaffb75bfd729ce5eef1022756dd2fd56227b528c31c64fd3df7ff8fbfee6fb3dbebff1838e3fec0272d334bd8148473bc8bd5ab1ce18ad067963f035bf1f992fee7f262f9cc1ef668d0adc66f0f3c2197f90823a1e6e19f417de187ffbe48db1efe6884447948ec2ef5f3468bef065528bd56d7eadbd945e4a1d50f5a5d74fb04369a069d6293181cee09700f59981803f04f05bdfed6aa9843ed534ea6e37e34f4b2534cfc0996a1ad487662f4681283a9912f17b2f754afd64310f443a0a01697ff8c1aee88c6be20fcd179517cedc6f64d24fe7829b068d6fcccd945299510ec3176cacc62fa23ff3059c67b8da9f628a751c534a6dacd6b93ffc10a46d9afef0430e7d4b3252b4671d08dcb7251abedbd5128dbaa3417d666eaed77b200a40fb5f73bbf405c3a78f71188680bc5fe30a2f597b44b7f9b5d429754addde17af536bffe66bad0ef1bbe175afd8bf6a4720babd6f62ce08411004431c5af0528c575fef3d2f8cde4b3146a9d73106491c82d6c11bbb2188316501b17fd831f6afca507cc137c12006c3f1e210fcf0e8e517833774128336c41fc5d885f17d1b99fde6d19e78653f5cfdc431f6ef5ef0de6bc33ac220fd32bee1fdc0211f1e39e9525b8794e86a647eee7ea9dbfc7a2d76c11074e1ee2e8eb5d8bee53a136d087ea0f8a2bbad33f1eb0da93fe842eb0a821fbec928ded11d8562188e791486231053a7bec2f49ada5fbcf78ee0b535d7993f35f719d3f7de8b478ba37eefbde1bdf7562f5d933db95ff192b75a5befad600bd72665711104c151054795d65a51a00918e211f52bba9eb5f24bdfbadfd24ae6664f5d7cc9eaee2048bfd6a86888c8fdae706114bc2148ba97c46ec55aba25ee25857e432c82e375f7fb95aebb5f6c02efbda05fbfeed4efc57e5338df6b6bb6751682a0289a777447161586b796a7bbfbbdf77a78e965dd1b8aa3a594526aa294527a3249254a2935418c31ce181c85a7983dc10f5531c6d8e94de9ee75ab1af9eb8ec9151d31968ca3a964328da78b2fc6228d24a1c62a04b2fe1d32226f2538e486187b1d824130f5d9e8c53ee2928cb4d4427ccfdba5c36b5fa00fbeceea4086d9627004662a9a9bbeff8afec0b616712211b7181b4ceda5e575d65d64a78b2cc39032d929cb369f3e73498c9619be967c8b285aa19930e4744d8e45c6225b5991e55db5eced0abf3f157e9352f83dd2f84d9ef0bb34e1f74809bf57337eb348f8dd1ae17796f1db25c2ef539f4fab2dc66f150de3b7ecc56f1a0abf6bfa7c6a6d317fbe571c0b7ffeade200f067de35392d7b96176566c96331cb5dd532d9eb2c004cbf61c7c20a2aa440e304134a9841c208324488e1030a26b5a78b8b0d173cde8d5eaf058e191c9c1c39392c74d0ececece0e159d143454f8f0f1f1f1c10fdf3130408480608134141410809e984a4181af2214ee444289c88133f2a799117ddb0dbe56cdc78bc1bbd9e0d070c0e4e8e9c9c9a8e979d9d1d3ce7b7f4a0f5f4f8c027fef9c1414a180848db2f7b31239949b58bb96b2ecc5d9640db6f31c38266858a9631a14b81e244ee662b470ee09034cdcaeb2c28fbb2c6c92263c930e4c9729eb9953fffcc31e4563216020bbd62260c375d73135259515939cf95bcab5e796bc2efaf84dfa419bf47127e9323fc2e65fc1e11e1f72ac66f168cdfad17bfb38bdfae16bf4ffd7a5a6d33bf55348bdf329adf34fd7a6a6db47fbd57dc09fffa5ac5d1f857de3537bdf22a2fae9825cfeeaa5e59799da561622143279850c20c12469021420c182f5cb430cb9e3ab33f63963deae903b5672c8687acf8b184893011260217a9b801b7dbd9e0f1f40d995e0f070ece97232747c7ceceb78387a7474fcfe7c3c707c8cfcf1704080888a0a02f082121214343df90b1f4117d441f115fd157e47243cb6e6783c77bbdec064baf87037c812f13d451673b3b200f1e9027666eda0a73973eb47d15e62e7b9069739f7a973d1513ba14284ee46e313698da8b4b8b8c65e57c9d25ad7c59e3a5b2a29261c897caeb753bfff5af1cc3edcc600f604f869930d4744dcd54a2493953ced7eb3c5ffcfe5cfc26b5f83dea99dfa4ce2c7e973ad3fc1ed179c5ef95ce2a7eb374c6fd6ee9ac7f679d657ebb743e75ceef1507e3f3d32a2ec6e7bc6b6afafc94174fb3e4edaa3ecfd7d91826e8c3c707c60b172d6658d0ac5081d3322680e87e7e820001a500024550501042422784e48686c0217566898840224e25b0082cba61b7b3d980e1f16ef47a351c2f38383972725c74b4ececece0e1a1f590f5f4f8f0f1610112fbf90902b402844a505010610e8786c221754614128545844561910973973decd2076d3f058a13b95b8c0da6f6e2d24293b1c45654ced7eb6ce9fcb2464e3953320c995372aebd3e7fce31d45e795463a4337b1413069aaea1cd463b6d7fe67ab95e3997bcaa5f6f697e7f2b7e9354fc1e71bfc96ad3bf4b99df23267eaf74eb69c5e97eb374aba55b59b75c33bf4fdd7a6a6d29df7aaf3816dffa58c5b5f856de3534fd7ad78b2fb3e4edaa7ebd5e675b98231b3c16342b54e0b48c891d78d83163527ba2a0dcc8f57a3870706e3962727274ececd876c0f0f0f4e8e9a9f978f1f101f2f3e3320ad2f265690434021a01310a1a05d14641080909191a1a0d294b23a211d1888851d1a868e50695ddce068fd77ad88db3d7c3416a917272483aea6c6787c483c443e24131f7993377d943dbbfc5d8606aad55a9a3d461a43772008744b5ce92af2f6bb45c2f5786215bae568b96bff5ad1c032d6712a94767f627260c315d139b9166a912cde7cfad56cebbeafc36c5ef0fc56fd289df63ee3779fb5dc6fc1eb1fd5ee1607eb36cb5dfad8a7bf99d5d7ebbb4f9e67bc5e9defcb3e2f49bf9ffc5bcab3ae7d7596d927cf8d8d7a5407122778bb1c198e50e66c9433dedbf98e50e93daf3e40408eee7270810900c102682828210122209191a220d211191884844a84aa42252d10dbb5dccc60a8f77a3d753c101c3c1c9919373ea48d9d9d9c1c3a3cd47e9f1eae9f1219ae2cf8f18a4ce8080c416a84a62901874626e17cedca508b47d1913e6ce2d65afc5125b51819d2928afdc7a9d15c9316d7efe0c439a6f9ab1d69b6fe61862ad2c0a912a89422a13138653d79ca2d088120dabc56a9966ab45fbfdc97e93ac8de5f7187b5a6d2bbf4badf27b44ab565a35fbcdd2aa57bd575ccbabde55712eaf6a3debc59659f25866b9abbad57a9d7531452143e2d00e1666bf85266389ada8c06ee290985f954422914824422c128b6c37c0ec763678bcda8d975e0f070ece9923252747c7ce0eca8e170f4f8f9e1e978f131f1f203f3fdae6a715370679202020ea6c548d42a3d028a4ce86c6a171885569241a896ee62e79b4fd1873973bb47d1b4cede54c4179b94ef2b7ccd7d991d6973554ac162bc3902a964a759aaf7a558ee134f358c458a433fb12260c2e5de3d23312259a1173c454a94c33e5f787f29ba449464df2b4e25cbf494d526a92114db2d224b0df2c4d52e249ce27f9afb8d893e45de3d2e68fbc68eeaa36cdd7d99859ba6177a6a0bc7272740066527bb258366a3cde8d5eef05870b0e4e8e9c9c161db49d9d1d3c3cb21e2c3d3d3e7c7c5680a8fcfc04012a01919480680505055122290d0d9586d4195189a8544449a954542a62999b553377c983b6ffe2d24293b1aca898b4a82631bfac4132628e64189264848424ebcc66b90697ea499e24c7e05265538d92496757a24453a22a519190a85427bfbffc9ba451bf4793a7d5d6fa5dea12bf4758bf571af5a8f78a733dea5915f77a54c98baa12b3dc55ad52bdcebe4c930d9e89a7edbb4e720eb6cc31cb1cf5b45fc22c3b5067e7c8c80d59af8703078725472c2747c7cececa0e151e9e1e3d3d301fa78f0f909f1f6d3f25080a10101041a620944948c824a4ce864cd33444ab642232118d987b253377a943db6789997b6445c5dca5dee59982a25295a0542519862c294195641bac51b92406c9a31e9567c024d954448992a9e894326160e91a96a9e84b342b9215090a4542f2e9d3d38a53fd26e9d378fad37bc5997ffa55c5b1fe94770d4b93fcea4512b3e4d95dd52424afb32cf374431a9b545f93d6fb96470fd4c7da7c3b3c399bcb41879bbdf5706ab6a66b5c80666b6834d8b3c66cac6688f37461c855e3a2d182b736d8853debb74a69720cad05c89b31035634d8c8405bdd6a5234d8b8523119481af45dd9f8db8cf8add5ddb1664cd1600192d6d97deba1db183a33aaad217c1863c7fe5dbf218d5f4b3463c944dd4110b542bdbd77046bc45b92a424de8ea85c2a975ead4a9c25de8a883c8b9569f9ad89c9abf67a7b7272deceb7282874e5adcf666f59dea585f1641a956009ea928c20498c84aa55ab8488c972659394d789ca89b2e23316994b0b2db8bce8d2d2f2f282800318a0002e106000026865d7a922a3d56c32390d8325e0610a78d8cbbbbcf8e2f2f2f23aab809b0420e0000628800b0418c00e3cece0d1d3c3079f1f250042ed79e2c40dec067603bb81ddc06e6037b01bd80dec06c6e206a66f6037b019195d0a14395cedf662527d02c60b172d58689a152a6664742652a0c8e1626c3035988b4b8621612e3058d669a18596873dac4567f6e28c85a5a525003000c05880d180ad00530196020c05d80930136025c066c048808d00930193c1700f13c0c306f0b0969fbdd8326b69799d1dc08d4c000100000b3456502105144e30a18419248c2083859e91d1dd626c30b51bd8cd8bcb0dec067603bbc1b5b0d03332ba1b59d65e5c5866b05986216733d82cdb7c1a964b62b03cec6179864f3b8b4cb60283b1b0a890020a279850c20c12469021420c182f5cd0f015de597867f99517595658585e6759584185145038c18412669030820c1162c0f0c187dab3a5050b4db342c58c8cee9602c5891c2ec66576e3377ee337351693ea96162c34cd0a1533323a13b714284ee4703136981717da0c965b5959c9c172da613ab2f3c5130505062bc16738093e82cb70113c86c3f017eec25b380bd74ee32b7cf66ec2fb09efb03f5f849d30d8ebec093726943083841164881003c60b172d58681fa83d5754ccc8e84cdcf80d2d365b51213b5552a03891c3c5d8606a2f2e2d349618caed849de70de5a61d4547f62ab293131414172d58e819199debf417ef30de51fef522ca0b05e57516c68dec858b162c34cd0a153bf05077f0b8a5407122073b6f29509cc8e1626c30b5179716da8c25b6a2023ba9bd505eafda494dfb898eec53f28bd9c4e4e464858a19199d895b0a142772da69de59bc9f7c7ef1249f9cbcceb2a059a162464667e2b6030f3b78586acf17eec66f5c5a68b31494172ec606537b7169a1cd58622b2ab033c584964f72a699d0b49be8c8de253e8b656282e2440e176383f9bdaabdfc6eb9fcceda3dc5bbeeddc4c4c4e47556779302c5891c2ec606b3439df150cb1d26b5679631718bada8c04ed749963171a3b5622b2ab03305e5e562c5dee43fc68a6967e9c8de2cf162091111166be62c1ef3155771989f2e73a7bdb7bcb3bec48bac122cd6eb6ccb8d8c366389ada8c076626c30b51797149497eb249b313698da8b4b0acacb7592cd17394bb04a9490c5706a17d1917d4bf6350532d58baad54a4404c55feef213cf6eba9fee29ef2bef22af7a514425b2729382f2729d64f37c7169a1cd5862301e663093d6caa51251a964b25c836be5d2be1a317548bc4862b51a19c96ebabbbbfbc9bbeb7de449bc38426264e475d67573924d111196d88a0aec4c4179a94458622b2ab03305e5b5da591b891a546b1219861c2131926df06a459a3ae18817478c8c90644a8484fbbb933fe245720449de84aa940809d7493657ae936cbe49abc4086b043962046b84a57d247c921045922448c81122ef9faa38d57b46bd7851aa1b111224398c8cdcf8cd8891560916b942a1502b72a59dd409bf24fc9a82b00441db8aa47d4491bc3f597124def32e5fbc25891b92d508b3c441aa6efcc63f25e2ee28529512712fdd6b488129ed604dc1e85e77d383a307cb07ddcb9b118abc016fc01bf0c68422419e57d0b55f31d7d19f6a0a502c251ab1048e26d34de966bc41b5202808044130eb8c46250e56271c8dc25aa2f940f006fbe7b8a6e0032b067688b4e26e15ab39838d210e61087a4b60b7d3363b00bb3b0957bfb03b5d1d80df26d4d7298b97be8a69a905fef0bdf17ddf3d2ff6cfefbdf8f3b709f5c59ffb0f25d0574b3435251ab7634ae4edbd2b6b32b1566f4fa792b728d7884b93909cacb72a55ecdf9a26cdf5b6d5aaa5d474ce3795b7afb795e5edcadb12cdca8b650d7bda48d9dbdad3190903fda16be80ffdbbf67047f2776ac5726de35a87f77f4bdb2df703f59bfe80b50dd63abc570115a24298fca6449b16b57ed322507ed71abc0ba8fcae3d1c62bf2b0ecbcaefaa83ec77dda93de0d336dfae3c2d1605017ed71e02b4b4bcbc240001073040015c686100bf59fa6c65d7a922a3d56c32b91214f0e7eb2a6e017f66976f69d1c1024c4b159000041cc0000570a1851d78d8c1a3a7870f3e3f4a0084da13068634e3bd1486254992406284f7d26a95ff653cad38953ab32fc27be93c5d68b418efa5db6d46e7f3c24b2e7e4c980104002fad10640017a8d0f61203861c20035104bc44c30dbb1dce86e6f16ef47a32384ce0e0e4c8c9d1e948b1b3b3838707458f133d3d3e7c7c72406e3f3f41802a500c10b6a0a02084aa501532345487d4195109662dc24bb5a816c1983b37c3dce509b47d124630b78c0c11cc6d8b01e3858b16332c6856a8c0691913ba14284ee46e31b697d7595ba3c5a5a5850004c835d01f2ff4c74bc9d64c9dd98e46e62273696971711140000080020b2ba890028d134c2861060923c818c09f9fabb816feccdbe6d32e2f7bd1c52c79e5ae6a1797d7d9164c6b8367793f04100000a0c0c20a2aa44063070fdbd3a3fae0634f116ec4e8f570e0e0c0c8f1222747c7ce8e8b1d2d78787af4f4ccf860e1e303e4e78726c80a202020828254048113121252677668e8b44388882c11b6c8c40dbaddce068f97e2068a5e0f070ece891cb99c1c1d3b3bb71d313c3c3d7a7aae0f1f1f203f3f37c80b10101075161474831012ba42ea6c48867987b844442e26d5229831cc5d02d1f661bc70d1628605cd0a15382d63429702c5895ca3c7a854ab36c5bc638604000000200083190000c3601406b22c096288f514001a4f98745850218f92200a6214c520630c00000000000180194344441805b471ecc8c10e4a2ea8c23994d27f00f2ae7b253c2344a31561d42853003fbe5478ae983da92291d5df0cfce689bbd151301765d1101f56b795ae861567b34836595976e951ac282305d76196752cba6e94266ad2a75aa42a498003750a026fd845abc403089641a64cc48d4942d7f23cb017a33e0c7c25ae4ebe8c3b54a4d31cfc892ed1a01c4104db08819fec568cc96a1347f3ee4418be780b8ae978f05be748d4b6fea47c010ff01ec06df40335863b5c6e626b864381c32d79afb3d3c8abca34e4e76cae0572d3e334f74c40c33834c6f73214ceb6bb5c37eaf2d3510d3e8cd27469903eb3887b8d9222a753ead8724de8b06c88b4215c34bdea29309386434745265ec2764e33217c2762561c7aab48d0bcb14dd0699b520d4586514020fae119b16025bdae2e93957d15321be962057461125897f31e2b21c14b574283b951e792a30743ff80f9d427f9a5b1036a31d11018b56fcc61b83e0c8c61176c77b2134c37084628735a2f622229a6da603065639f16379fa4516b2f076303fbb4e6bc5587519d92c162ae3309c3fd87b58fbb128541cdc7d460d79785b14a7b8d381a717d1ceba5e909c3a0034e347c944bb2c6157f24979be40a87e1a07cb9978d8cdef93028148e3316e27a5b81e3288ab1b7c3be0700600000a2db09a0e0b1b1c1cf71be1493f56455ab0c662c70b274b87b942a8f587351ee8bb403e04f1a4575520356dbc6187e848486600f6b37b63bb2c1bb6ed3fa5ab9d79a0a670484335dec951ee956e1f3a297b098fcd0a0dcbc4fc2234c8fe2cd69aaee3dac3c4c4ef283f9b0181f5f17c2f7b0c0b3121a8dc68052caf0af71c8474442c1097c75076c6bf6e428379805642e42188a9002bc025475c6182f2de05f0084df17cede62b2642125403721d4c6ecde75fc7119a4bc2840233f3ee6befa8fe1dd93acacb3a83fa6cc606dcdf4dde7d6ab34323a830abf9bd86f5f69606444055e0f13a17774fac9d261e92276446f70bf6eb2e171dc69c13d2882ad0b916d1754e2142c740f2b601896339778e84dd0822bcc32a939144900604d0c184d411af462a3f8e1251b71287a412b6c12ab8f3067370c7b08ce80dacb390e06712feccb79cf9b65552d0dae45a9223da42f87856db8c14d44834848667663133d1ee647873cdfa395b01273729b84f699ca1caa11cf00b67aa83b022b8374725f4e336a9d44d8b8bb4fd4166165429df44176f1a2534b34203eda892c8a412f73d7a854a2bac842e7ec52342c4417d3c5d07d8680bcf01bc6ed0fae1eaf7b9debd850d4c1833c340e43f19d2ee5943936d0c1f396214e9b36334d80f8db191e06a18fb505499c3d9cb7ad3aed1bfb33ab30e9239a7e7f481e3b9f077eb0cac14f2ce40db5548d2174d2c154d40a06730976249708bdcc18e0d715c7bf327054534210a23410a20fc6425d88558a480b7c1a07af96584aaddcfd3394cdacb6b0bca79b191b926105df0ee8f7d7243624e202ae1fc06e7c4d0ba3bf092825f75767d06993a8046b970bca8bfccf364933121edc0121731e1bc120d4b19628a85bbf0dfff9649a6731ab32b5a3b7f2280b03d783a2a039c84a9666c5235609041c92b3a639ad490e2403485220b39b9f98b3362798716cc8df34f9a1eafe2f7f62b604691bfe66559d11d551fa130168a2cb00689ec82a126562d352917d10030da2900981e9dc88583790a609efffc58a05605a8d9c4183f4db58a31aa23e7684a3735402951b5f8e7e25cade5390fa22b5238a9e6a922af674d19c29a1a344c7b365f746be4f1adecf52b45f897ce735c3274ee3ddb24149d3fcc661f72526db9b66fac4bf2f70d5463c31c66777beb51d7f33e297b33dddd8bf597cf0177dddccc7cefcb62bbc6adae59cf66e25b1c7cc4422132b88a4150a41542eeb5acc2f1a2b92085fd533fc9964c32bade8a219b285d505a82abae44935e4982a2a67a6b10ec038da2ed8dd152b2b54d5a493799f54caed178dcad7542afdec44cdab1918c6dc97cac206c3428593edd81f1837adced019f5044380cf00d1c01ad4260a36bb71d8e6de6c09d7101c01f7b7331c8618aadbcc181d6d5805f9c980eb7df19b9ffffe87fd410c7bfcc9461d8a9c32d4bb942b35d05406123562004faf9c39e5e0c94204696621cc2355c8e0197dfc334d6ca04a4811ac69f9703b112e2ced089ec20e053c61a199a040fa5a947561d1ad13b444ffebb2c2741032ae7112585237036043315b794d9e5965a71c5cc07305321bf31a8638379cd2a0b7839074e8aea6ef3baa9e914086adb10e473f48f434e702c889dd26f790048dd8b6fdc9bffff3c5ed17d7fc93893a143965a877295f728f99e31a0204547385b8b3847b0b1ef20a300861408f4ce146c44aa31063f0b63e3b2fc21af6d8d8ac138373030327a6686096d70430340123165808072030e941f66c4e995546c6226ba59c80643b8507379b81e7388cfaec5d90dbaec178759339d94e1b5634fc136bc337bc37c0f6f18d8341dc575fa2907085342af40bdd8e47ce086c0d920221242d8a67830d1345c059df854fdcd43a17c6084e44ebf6ea8519bd4d1857f25746b6d44eb7417f808f6a5ecfa3abe1b1199ab5c5106a6d8be192b207fc6ead0a4a16b8be2cd71aafd8ffefb6a1e8970de9ac380ce57f529459723c6e8388aadcd2388beb07ef5ed7338fa876d2fb1d8c3433d8f5a430c66e44cb0d8d90cee6597ff53f1fc484594ab7be0a8f7f3f8892d586ec75de18e56862e70d75c27883400f6089c25163f88db0cd63ff65a3f22b954865151a63f84df6e162d11976e8300ec33a7a1fe4707b303f1bd5c406d407255df2a8a6ddab720d08baeb3938526651e76987b5ca96f01b0927e8dbef43f6411f4017db22b76e41094c56892cd4929e5a0b1a492eac698bf8aec21c511e89c299a69fcf9df208a986d5e41c5885844aca68a1294882a246e8b1c7a0eef145033307d545fdee251273153cf00eb5c8eb47dc1a0ba9101e619b84341bbb2de3b3c479134b370d4e2c0479a4217433d1e7479c0808b419fb4990434cd6bd841e0861b3fd3fc10f05bb0bb09c5ac9615b3e6c3ef1a7f5b0dd39a49c2746bf0e79ad52a2bcaed3ec62879165fcf9a8822d8ab82258e01c06440808680ce235b92743612927fff8106b8dcfae5440874678bdbe6f8991d5213767e7c0e51c870622314145a60d589b498be4029a750e535eaf2789fbcf72a84bc79ff3bfe010881442fe7609581c56b6fb6762037dc60bb6049848c9d6852f97e7cf01dd6b7f18d9c55fbdd1e17a7f8983792d67c07cd8a48ce034ee11f667f29218dd8848248bba4d2762a58eb32b1957bbe5efe72e584e3534fdd3ba22484e0e7186cd41bea407dc44499fac8e5c79a75c759db6a24d1cc54e14e22da51650b17c2325a8ccc88e24999db04e0855b4c90933e96747445a1e46a1f9067c673bd69d09c1da894f96f573c01d47f79f0038561e5c05eff061359223ef50675ee70e0d1bf47e4748004f21cf799044f90e7784c030be96de34dffe75c22a92f0449b781293b15683132a6d4e52e3211b5d7e49ccb398d3fc95f13c43b912baa64481f33c52b16293d9791cb22d6ea8339a67367a893487e9dda604841025a1b88d467d7eba33230ad030894ae0624907143b2eadeaf6d6a31206ca4d5b16864789c976bf7aab7eac8ce3044d6f88aa8eef838af056af8a2080acec4590e8bbf1bc52f915e714c1025954044e8a5da96b3a9114cc538ae0ee53041271c0d1e59f93724f6b93da34d6cb2c5284eb1f63a80c45307a5131c1c39c8c34e961d064435e68975ec43dfa0b31f13b188a5c592343371338437f802960fb680c99b6306c3b97c2b57bd9aabfd013f4a4deaa03af5b5c885f227a1f24cb7bf15d65210a4567039ac6a2637b440ac14d3151757bde09c14d7154cd31bb8460d35182c1a6bc68de2b5a8a50a1cdd799c5364b117a3a77c3c5e775161f841462e89a38ebbe03088a5c7e50259c577d03de19485851a89e0fc42463508831a6795c9720b955892ac41fe14400fa102fd9f52128833e8dfa30d0a364162c31a03c45e801cd749d57d9f9815506e900b8039446c22ffc7eb4788f73b33abdb2d1126bc5a32413d14b9d64e671480e76e05f53b2bd0b94ce146621de2e127ed32c492bfd9393f7c75a4b7fe44c7ac93ce1875cd465daafe40ce8a5e88238e691850d476a08bd3732ba426227a2d21afd42167d00edbd22d5b541f148b9357504b31ad46392a03f1f6824b5eb3d9c2bbea9881fc676ef84ae3ade1dba626108b3a104ca2bddb3d6980f2e04a2c846b3cebb89b5972daff7c2a95b6e68f7137e9f199ce3a8cace3bd99963942c2080443340937660f53559705303e7b29ede71a197990d92dc653b727f458d7d5e040adcca63ecb2ef92b876b25c2dfee16f4a0e75d5f2ecea25fd1d013132ab98d734a6d74bfb8608a5ac64cce18085386801010561920600c0b014e09e095e14c9997683f3d3ef37eae337110b332b446eb35abe178f78c15cdf9e3142d32efb8a6d9419d9328a32bdd035166ffb7dd53542b9669ef0bf41047f5b38fbabc9d28508e8a6145bae9eb468337a1746d791f96aa20e423719c1c2fe66b9c0eb4f4407c2b6293809b3b3d09b8018280b16ef84c261c600aaf304a98c04242ead2e7eb127a08776252eb144a34f13f4b6cd6e89f0faa603f083fad3f3c903e2ed557920ac43ce19d795a720bf8eaf4f437e5d5fbf86fc38ae7c05b9755c691f07dde1a855705626cb81bb0591a7e0653156817b3678512467ce71ea3af515ccd5f5ea6b080f3c8033e3a5e1415730d247981cb3e803a95ccd68d78f915e0c9fb7d11c41dc99dc47b422afca52606726212b5ac3caf2973be7b9e7b4b80f32e241883a39e6ffa03e30d8f02ae007431a90ee85e29f8a9de5b7bd4979d26a3583498b38bff2f4a0c136dbd9d256c0e5d0673d11c951b01c3e57baaf8eea5c910eab63125a27f579c19cf790508358984a14ee88493e0147d40477daa67a62d30f9cccd0631ddd38c7b70e78749f671572e83ec73ae4d13f9e55c0837b3cab8047f738de0107fe3926c96f026832b605610ade87170014b1028f67e153353a067fb8cf032f983e805ae16fa0e2491551bf880eb94b202f1eaf0e343c8b65359f0976c40532ad52ec4f3ad7de80b3943aefef12e14771a2ed2dcd004100646c8c353e32ffc89700d0e271a318adfd304d8b1bdd581ebb40ad1ca6a363e879819c12419a38e475d028011be60581c7dec0c65dd7249711ecbc7f1522b973b0d63f70259d70c0c184ea39df763fd71d892f874445f8bebb14083a5c1d9544d87689c404dfd31c1d6da4d3584d60356fde492ba38425ef12f10a268cc3c0b95fe8e985a0db3d1bde679dbb7eefd350f2d6f86b2be875ad827659b6b1b5eb975ea6132fdf17a6e15b31888d5d0826bb48af4bbfb7c10132b21173eb081176908e8ae58b586f3fd99bf90147c204664db7bf22ec511a56c915801088c8fac641970c749b2efb800585cf7c6a835b5561e9e1e44583b537c1e2472229c7851d73cf186c20615c99f2bcb5a065d0b992a5f92a3625f860452208ef9231214db4c917d97388bf9cee8c618509117c70fb296e215ac469b3942cd7bfc1c52bd4abfbabd3a813f716f3ca500f0d355cce472aba0760d40bb8be894f15e19877af3abe38053b717c710af6e2b8eaa11a28ac241ebda4bdd3102e46313820342d321d785f67d2a81748e5c677c477cd636e5264dac4d8bc18259b6bcc5f60065f4a92a530a07f0000bf32d05cb08f848814246b880ddcc5e34405b3c27a91dd535bd56a2ffdc5dc29b469bb1ae7980508b9ed3ccb8cd0bd5004c7c7ba1281d5e578e123134a12a4febb6ef2f1e174b6c44b145577e8ebcb3ec0b59cb2f04ac207875361a3e492a9141f721f5b6932f4beb6936cc8754d25d990eb02fd606d362353d46159bfede3d7f5e1adbbe1dc9fc34c24b8e779ee2168300a7e6ad344ad60e8c56785f24bbd82921ab323f1d1394027c45756ad5a1e98663fd09a7943f71d8171ef75eff941a87f8c2a819e5834a401fe9621f7cf02810a015e406f769ff84acd1118c3c36b35400388c7d3a253e3f218169170cf83c52790d96b3924c3fb8e5a2d9e537e7547b222432b135795eaf5014dc95a3e1419f262dc03288fb16eb0a9f18ff522a3a82c1f123aa1a5d514c062faeb6806ec570e9fbb00262f89d102338a39ecdb17e389ee9d77b3e7328335c9e6273c7fce55d717a7602f8e2baf1c2443e72751625476eee2cb13c1227089decb029ab13902bd9c8924fcf1c14254207aef855e89786c18bf3ed3b0000fe8b47396b330e1d110bc4b1787abc9d755b9ebda8eaed4512d11f17d48893f72beeb58d155b18ac1d0efbc791633992e8e5e52c462fefec9dc83ec8f36953b1e596801441739921f9eb5c09ed0e1f8100c632c29c730207b18062c8304ee041700045301ae37c1d32a3876d791e3145f1a7283761785d0ac7277d1530aea782105fa3b427ed3ae29f5122f569b37e3f539e177276c498a9a5dd67be0ab496d7d58614690c1b3a75ef046558eae0fd07ad0685ae1061909f0a873e99925f2ec7c4286c0b0a47fa86203e401df85ad4380042fea7ac926bcdf5e590b306cda76982086a2667abfc48fc7ce848863a001e53b8514a63f9edfc4a78bf4dcbb471d57bc829c3aae780d39717d71500d30ac17e4c781bace2e3e9e31f6e6e5bd23f3ec05730474a03b376e0633e8d33bd1032d89f155b55fce9acf66302262da04b5aade2ff70a08780bac06e0a090f99e47f7e7f088b28f10ed21fd1f25c91f37664e78fa104b624397ee55390dc0b8175057afeb8dde818e5ade840c67ec2da8ea35ed4574dda660cb895bb137fbe751d6cc3c13919c47759e796f2184ebd62f4fd4f2a57f9ea9e54bbd3c11cb972a4f87489db1abd7b13abe91e23232eed5aed2902ec08e6ca4e6169f4e5a0a64d52181c8d55388796927dab6edf51d479edb08081b6df814482065e7082c1ba81f84747565f49c8d9eb788b35524c2f10018428e3e54c558b8ae1ed397a4b84ef587a2506ed1c5a6b7258e8602d7c94e1aa20f26c8454a4e910360045a7aa6fe7c84be856fd5e89adf679c5b3eaee146e29ea06ac8d6a18ac268dcc9c5fbd66fbfc63cc9eb4083e2706486b3ecaba23df00e70bfc68dd557292a3663088654b792e54847df49d5bdd517c5bbe85ec61ae6a5d0c0884bcfba6500ee41c50bd9f0e179158e913ecf63d74d03ec22012cc8a4a94c0e98ae4d005b65cf26de73a9a434854bf00eb075cff69491f3118b663337effc7843c4e8870bb7704025b2f0688a585235bbfc2d3371840739446f49508f00a1ed887fcce73595f08b138c7ca032d366acb47d5186d9fd52b0e188e5c4fce3595cb042c2833fd14a4aeaa3a4539a85039a5bbac9cc96650d6a1bf250d8c79ab311383a9abfb16c75251d3028121f01447a3d527589bc8144696e733fa36d0bb1b5403068b9cfe8d13eb05cb5025fc76d884141481651251b245034ee0e8bb2b2eb943026c491102d2779c982881bbca4c4ec1d944b38c4a8493c3724e8c2fd487d533248a17f6ea68b9021476bbef719af3ca7f94824aebb5647d8b9b151d932ce59260c49744e000c400f6aa314fdba407201cddeefabdd9a2f31f984b41be3dabf681c054b588d6b511ae5c08c4f634394e9d622c3ea63ab7c6ba31381470575a15a58e88663f7512fbbbd48512cad9190590a3242bf337d2c508c97a12b297f030e034c6cfacf962b5b91aeb21d58f3959eb6715b9c822ae1f9212eba40f7f4060ba28415a133baf105a8291210e6eaea62839c10c88a955e51887bbc8df72bf427804ae1d8b3cd39436f0ac620c3aa1b6c458eb0d61f2000ea053d92c96ed8c77f511dc60bfef7595d2b8818dad9020f1db54fef2fc050b0091068cab2b9c4b84900ff50730201653bbe69ade064e45a1b8f1f043df4b5d967798a9ce4e5216e64d45c41b1bd4cc235d981624422b6214bee03a1137a07242316096e50b44f6eac8c944a66386f7b0705036fe64f97fca98c33abdec4fbc4d5dbe8a2703f85d4764722701cbbd1b14e4b3ac2dc6aafe8a5911f1c1c951f706f29677eeec1a7cc2ac55d0cf3dd58d8d5dd2f7d5a99154dabc6f53799650f0b8e60b5d01c4d50a5f86bb66ae1daa10b252c40383f7275f36476a40f6ab76a499da281d646b3d42dd2ee75d257e895489ac7c22949c5e5462634035d9c463790b257268d110cc5c7ab8b57aa49e009116af13df6ee3c4025d89e5cbc2d23a5b5f72bc92e62d3b5369c1eeadcfaa49ecbaba8dcaeee01f6e004ab4aa3b38e721edf21afd04910ddbfef9c764244a6e87ce7ac4883159efea8b48cf768968cb960cc71842f71c15794ea262a9655026918e1f807434fed487dae288c3a560434f83d2307f9d6eb819e60d1d669a7b78a57a5f204979ffaa4485fc8f8ce5b5161409f02e18c7cad9beed9db73d8cacdb4969b84c8b399eee610cfc3adb1774fcca68806f74506d66937c339b355a946a571914ddb5a7525b27ee7251e39aa105b820be75b1413f739bc177bc9ec8d98ba91aa41cea4f912251402fd388ef76af1bc10a21f04c4ea05ce72108aaa8dca6c915c89721f066ea925547fed87bf92fd3672f074a09e34920c27748db00453722ea3571c1a688d2068900b20ff73dd7f9948505dd40039f1b64d62241f3ef6d4d57a34653174d4eb9e38dd44b7fc7b9e7a9b7ae74e26d7a34b1c6f347e345572dec165058f9ffdaaaeefd4b302ed1ea3b604988424bb163c03e4a017f31f075c19712072aa8ada4a678b2d7ccc4421ce635cd7c8e9e325468bad299682a7a39c9f4ad0b3e23fc2110c2ccbb5e72c05b60b7f191b1ffbcf32954a3ab8eca6f3a7e9412168b6a14014a3f35a06f92b885b1f4bd7465df451d5713b1354f15666f24292e514381d4f7dd840c8467ab749f0b928c1db5cc1071f48765b6a5c1997c3aab4622b0962dee24e580b38868a9154bd5a77d94396444edd1d408395ca032cab88d8a98ca508a6623b6f87647960ec75fa60656ef2028fb393abe887e34b8d645b642a59c34f856ae663ff74736c0ef5d335a00fb536af994fc68613a21ae6b7605b1d311556a691f0e83938872fbddaaf9cec39eb1e9ea6d38141b07c286c6c00c03085c3a0f00c03ca804926744cdde5107916e70e909fcd03ab4a1fd116425b76fb78541eac1cc458725490717016134a6a19a86f65f9e2b0e010d12673a2a5e54dba2c2e68528f10980c87572cbe82c9c6f0554d67e92fe376c9a216f45768a53b5420b4c0c2a477540483eafab5d51114b1122e8d554dcaac03231d56bc3caa8c0664861aede6f23944d3b4d23b4a8ccee57c76b74a56aa9167ae2b475981f158ee157f16d08a825e4446434c35b57bac258871f7f76510d22190a378922b1a6b075351ebf3acf019d009dd4fc0f5b0157efc0b52004852643f6f47227cdb4509872748bd5fcc33c253bbec9c148ef65fa64dbd4b882e3d7da8ac1470f31b9a6741c5391775a74350fc1d833f5c3cdd50a54ecb21c3244ff43238b54a15a725ce23d394d825787ea835ca0bbc7ea73d998404959c9a46a2eb402718d0e86d3616af9f7a15dd98280270469a2461ac5c79f66c7369a80307f712f9e9a1bda7ca52e8fa048afd701c6cd9ccb1659f31c7eb5152f19d97b9041865dd17156ca6f9b8908c50a084914cec291eaf1de382e1b53f047ea21f0d2886c5e0fb6dbec8838d29c2c81b3e4b0ac74b0ac1e15a4e4390d564709d8d89ac43baffc937b35c20ff8c9b1ce0cd154a6756a3a6f467eb95d8934a130a2287587e8245c20c597b1cc47c3f15e799678944213e4dc7b1fc646489c8db871e4593299be128931b00b5e32a7b66926a0f3f96bc4bb745253d3e94169a61246684d3674b4bc9d0cd820bae8dfb25687ddc9d442fa4b7ba0d2a89be04697beb7669b5a7efa80bcdf8d13f9134fa97bd1eadbeaef48842831cbaf46a384611e90e01455fa18cf0ffbf25c9e65eacabc95013b6aaa14f746cefd21311fc378c6a22698046d09796b35c71bfec4b108cb08af0a9bb353133df0ab4a57ac738d85a5d2dbc5bd545028566a77bbfb20e1aac4cf179240cb59b3a3b3f39792cdd054ad24514f7e0911863859ccd6c0fb2cb040afbec58576f48e988b81cb8b77e008423af6c1f7c7a312aef78588036e07fe4c00068e4d9c63494e930dd9c569158372631d429deb872e1d3550354e23d53716bea2c6486992b4084cd5c6c4e322c40d1713855abc037065f358fcfc7db481fc94407716458e32f703d29a6b95a6929a3e0cc4f50d5785553de8547a347c5a4acc514cd433dce517fd55a3957bd40ba68acc86eabbb02b6cfe42b88eea55c32f6a2cbf672b18487695e61f4b2314e48584e25047889b243cea6175712e8a8912ab95144fb62ebf5633428e180da559c34a6fbcd42581085287713e520b8942678b908bb010ac4310b8e3ba57954d2e97fc986271aac6aac8b457a68f028eaf58a627c208fc94428dcce8d4e3f1a66e5680f49935b82620278c6d1f6df265d388a8697f5206e777cd3900e86c99aa7e360534129b0a41dca853a7b9ab77f59cf47d7624af487f67795bd4106ea6bafb762740d0cdfd194b5fb9b4ce1ac9b288494ef7404169a42d1b2d59b25d632a1c4ffd4eda6760ec079c2eb130415ad3eb55e1caa77217651910f6b694ffd2889d0c07dc2a0017ab72fe0eae233a49141d32c6df444305a9c7a1be45fb5ce8d5b667bc611459fd193d8567da95420565412837eac2dbdf958459e225b6772862606155dfcb2fed4dab1529455036de5560e9bb326c36c33e1ee5c393d64615c6dfba8abf029d09fb0644adb4a9160577b7785a5b2a9599bf453aa4141550275fff8f59ac17e2b846283573bca9179bfc25fb8cc521b4115629f912919a00c5082bb08a8764075ece6b4b503a0baebacd9c0e4966d38e5e9c6eed719b88ef6e9cd83353f512e1e54e36789daeab04fa6e97e3b6b3ad048ffd73d74e0d396c7d68afc767dd281422884a8fa1f7cbf0d735deecbd6bdd5268d036b65dfa30fd1f8e1b22c2aa9a65fea5a61d4334ff3b956d08aadfa76a4ffe81eddf906c4311c7d6a8c354f6fc4585120b9b66bda2d3802a8ba658c655eaeedcf6c0d5f1317664f37bbb6e6bbaa2c731f1207108825838befb82acbccb37fdda7a12a0c80c26c379279378b2b4519fe330a6e092516e9135370e8820da8630117c3b42fbd58bd72250ca7bf08305368b990ba959ebd6bb24dd6d2c2e221f0611222e496b1267d3fc2218162943f2a4e5350f001a5f38e8257049645e75cff1500f366dd296324bc55560921c0c45023e5635c106f20550e7d0d2c9ade6138fcbaac0fc2c5a2ce52e5b0abedad940826cc10a435a5f3d03504b054a55c8081255b4e78461237228d296b3e11cfa2168e77682544bd8e1e1150aaa173b948f267bdd8e4b151290cf649c927a3e3c1104d4c306b31c92803859a46514c0998c98aa95422196aaaa63b69638cd2462eeb4399fce7c780679364b438a7333f705c728487e576f60d527ead477da6514fa619a11ad72effd5e44f5d894e4041e5f22dd45d548143da917be7ae28fd57a9a93fb39ef863bf2e77ccc42baa91094be527763975895508123294b37195791640bd993a2bf6f869f637c8ba1a06ba32d41ff8d0a3f971216a5136641b369aa5df79f640ed8ff90c3f371e88014bee10a9aba845524a2747411b228bba6b4ad16ced664437a70d5089a2179b642ab2142f09c5626ba9fdf2f94e48dbe7ac90982fa34c0997f1cf51784524cccf3dac67f718bb54696e27937c0aa3cefd4a0a3fe585a853a5c26afcad115a399724185f43c302a3c6fc96a164a2bee2f8752d879c45502fd2e55c33372151a0e8b8a88dad395e8bb87c27c0bfbffc44285900e7fac93cb0eadd6e1220a797a1614ed0ded3c97ac329f2125b4a68898457e14552108f0acd3ac1cb2c1c784ac3485cbe33c3b0cf8c6e9d9ab9eed83a7897dd96ca17423b9e0f191b95a2e9c3af0d52ccc8635a3376adf8b5f15632fdef7c13718468b07d0dcd523839193c9e74365f2d9ebdf3b4a18e946552c56fa97268ab0a7158a37d545b30131614d0ab91f0f348e6e35b75c95f07276430eddf049e02ecf02a480c7737e9b83b607e649ba698e85252ca2a8c76ffd44a73adde4c746db353e7a9a7325e2a2450e95a5506c44cea157fcd8fd716146897f96a33226a3a3a7ceff1564a1ec10569ca93d774f4334699bb09dbebdf13f01e7add4ff2a2317e4cc0ba0212ea94536fee29975db8cfa84e5248a73beea9b566c94c81c91258432eeb8b009b914e5f79cfb289d9cfe5c682fe1392a20fd0d4b0150435005cc73a42c5294648f54685cd9da2413062f663b8aab578f7b036287862c38955e7e3b7e819a14f0f0cc333502856e3902cbf83a0923a4588abf428d47afaf7e488484385fa87d7e623c2669eabddfca83855bc9b575a7f28ee43cb8684ba8591f0fd640207065465a517ae033cc19207eb3ef2424472a6b1c18f7a1a01ba5fee19e5d1c616b9699b0831329d7d9820c04fb9269a2945bfeadf4d0833130bf05bf78f2e95d9bf08a2c1ad318231b16c281cf3407ba26bfb27c1a12d1c5fac812f7158a35e6e1e8d3a36101e9d5434527271d05bc72b0d52d0425b9509464b129d4caec28c60bb7a7cdf1c85288e01440f7cc3313d4dcb7ffad19a52701b5704e03db34606ff357edbc6f8662887e426aef873f7b2eaa623a0ae0eef9800991526683c4defc9c1c9f17a831a064d753a08783d501d81784d291d49882d0826e0419a871e2940a7bd514571480c6d4a8573bf2f0f7eaa9e0feeb4b523dee4245c3143db0d0508dc030c7f790c5efa6d2f793f0e17879839d13f5787d27c119f6ec8e332d8d258677f50309f62db92a737f6ecc43eeba12b63408d82ccaa1e717ac63a7f91afe450848b5f846919bdd0c211416d16d780d7c4908f7bd79a1c84852b3341a1562707f0a7f26337805a582e5c420fc0fdfbcd8d5999dde1cad62ab2794934f92d1c085a570d3a29ce57e9b6445f89a9ec1faa929b4b0521f3e01fd521c60bad14cfabdb180d8003d181d1aef26fb5333fe11d04f046b92f202965136f140fd59a59b0c41ea1b433b56a8420f68e900298bab418c4a57c61e72bba2f9e4604edcc154a2503277f32cf295b59360fcbbbbdf56872bd090e4cd6d133b7d38e0e1fc05e0114d1a1f46035cd5e09709ec6f19a421a98dbc45e5545f84609334df6e9fd317585e66ff4cc199c3a81c01e4dc898de78e99b67ca8649d079d9ac8e3a2a96d9533c80d617f5896d495f3d19f923fb4db3c1f71096effbde8429de2bd460016e0cf552cf598a710f395cc0ce6a547e75d6875a46a9f1672ef0fe6d2bbb917ebe176cb3c5dfc88315180feea9af6220644fd6295645f06216c196f51ffbeecf0891e87594541e83bf1e708c12b029f836330c3fec2b41587fc849e87aad5827373532e7ff080177fdaad086c74b3b1f508f0618103d0f7b75622fe76d966f4622917f420c9bc4038547ac7d6a88a9875718ff6e0ec15f2c8db6517b37608a317725c96858c34df5142a89f12561606c1c8853c970896b3c6e664433eeead57399461098c97a0622727c022bc0f099c808688c716b74d263dc5a374676b065351c471a76749aa403bf761ba2e24d2653067805c4878fafaba74673c18eae3d87ba01897150889690092a0ef1cc678752fdff77fe12ed14ab819814515a28d4ef1eeeacd9fee88115806f2016ce60ea45bcb8a91375536950273bbc393a41f3809a367a09b1b80d1299d220b0833b0089ad9f7bdaab11d1a92c11392cf7249112366193cc4118f3067b0b8979638b220448a89d19002884a261e80d141b54a7160cf784462e3549bce53da0efe0d36273aa86dac2eab0c742b1fc7c8c596dbc986197192131e28efd2ffc106f5aaf52b816a00378b859a9b44f0fb05d15a409dd0173cd9f7066536a7c4ec85501ce11ab976f0c6905659c2e00a7f9d0f4b2cf45af6790c09c902190f3dba6d0bf84bf3a2bd497db9d72b9d2e420e334f0a48527c5c54a372a5a959be5197d673101a35ecd79c7ff1e701ba921fb1debd8a04c54bff6ca18831e1e5bba2d6ae998bdd06aaa65fee182f1dbfcd17a0c04ee5a28742580c76a696c4e1cba8943b3ea1f6c508d8ef1ce151699973a108e1cc6428e1b987b66391b9cba356d6ebe6b515b9d4ab2472fd6b738e693c779c49b6d7988314d47e68bd5580b1b872d3677163f91c60da84bae30734cb0bcf7b5f559c52fd94829221c33b2228e16ab685722131a74c6985497530b8f014d2a843b2317c4dc1514f763b85566e8f713bde642a0c3f49361996df8a94b6390f7c0da349b96bce6dca55ae89a715857d33ec2258a7a24f3043754e4764ada62260f9287b2f605373ca5c2e7169bd70027f7ccd75502e45132908a8e1511d0c97f9aa3178bef743e75d19729cce2ea886b781fe74693633a28f9da2ae904dddd13983726ce093a3c102be38c690ef7611a2d4f8425a02fcd3de8d8dd675abe3857ab58af52484016f82baba04cac1aa1fbe18331a886481d73eba9cc0f8804b7a80c3562b5ecb10c124e6ccd2ca381907a55b87148ae89ce2f05dae550c04c7083d5a0547a9dff535e0473fe7e813f49280a426513e2912c2e3ec2228314b925b6a88a3eed07905047388c1a2d3f7e306e00a547f9c80421d0738bb195acdf6324f6fdcaf1dd10d5e6ed3f49bda791968657a8ff6fcbd2e30e95ba30e21fd5b4562b686cce9b829ba4be23f4e1070b6d1249f36256b49ee2d140c9b04fbe16d0c21ace2eef2cbce22562c0781e8bafcb4922c28999f5efac5589a6bd4f7a62d292b6f94d4314bf0671542ea30f50bc5dda3d7834f58d62cd47fedef3d6717a8929471744c667bb6f1183a7849344bfc6112a87797ac053af69ae78962ac87ce192241d7472770b11bacfdc4ca4495d1731ce91a1f17cadf985b48ec8c7a9bd9bc52421db806acea7e8823b5055b90c0115228bc1b57b5589929eb25392746c58d587662722c463437ba133b5888b5655e69e82f6987e220556a438682d5ed02e9f4de8eef70610471ff015ae8e831a37c67c404336866cb07f1cdbbba42d3946aad6feed1cd052b15243fe76b78c106058a83cd8335fa2b5b1dae78febd2a0775daa29f3b9bc7a44b771807e0566b69fa4510d9c7d50bffb7d927c5d5e001480fe5a768ad7fe7db4ffdc2bf5e3d16fbeaec20cacd813a9624561d2a41c45d08138ce4c658821b545e1701652b8de64a464ecc798a64a6e34bad360569335bebd4ea9883a3c49f12137f4aa2135540cd7a737e74077480a031f50bf3ab4ef7e451ee9e0a96ee9aa12c5771201c504926c23ea9452d9ab0b40abdd26ca9eca48419911db9b13ac72ec712102095da05d2ad5408b8ed690a91deb639705e7f7a97c20bde52292c1430d6105f891a3dd188ecbf3a5e04a350ccf1dd47eade43a08795a9ea14733c2cf3e831bece236f067d6a653cd60cb98742be801b5f19b52d976a798f5aaa1f1eadd6915f257d9f34ec7022fb592b901494d928f3070ac44da5c645cc9006f3a237178f085411e8ade323198d7f61680426a6b60a581a30a80f55273aa1aa423950b947d31ba90ee991fe664cf73b21436b0a78ea06c89f8256d0d38657358179f9a875255def6b680036b98e4941ae35ff774ab69eeda0ac83e77ada959074e151f658b50fc4c9c0a508fa5d87bdb10d5664046954f92e9c62ecaaa52463452d2033687ed4e15815bf9e16adc3a0f04a41bd74ba901219127cd5a22d0a44c27b4a7bc3487fb99b04a973645dd4ab16dc7c796ca88e9e4394d0fa7159ba226812b0ced40bfd04554ea2a62777905fe7a558259a19b1e4e9bfb90180be8126e011b8450c414f5ab791356b7287bc5be598a9268511d3a270d620f05206a67829d4e7bedafbb500ab922f27a6e605fc86879ee85bcef92035e9f3bf0c4bab35745660f2264c100477a86873382e84c835b8f5e05e4b10212d8154035361b4c95a21415183fe8392db01093322ee24c45ddb994b37c6a39441961ed72432e7d2a06556be89acde25ecfec3c02ca751ceb082dcb30a5c366a642a47f6f843ed608dd0405aadf435568fb988cf06c0630e8df34ec077efabe90f6168298b6a668d1b794cf4a23f3b180a00235844b7fecb3d4ea8b74d8a2cc20a1a288bef291947d41081ea9f632186acde6934de9dc447aa626e7d24ca2ced1dae6d9561097971be7d5cb2a2d88a5c234ad78ca77992f114c533eceb91860283ab1d50fee6194fc1a7ec85d90dec9317d0f59e7f713ca7f3e62b0e33d86405fe1f06192ee647e6186f109278bbd461551763f1504531fd198590418fe72b3f427c0db3115c7b18fbaca95edde4f79f79399133acf02a2ba30a45988fa4d6e86c4427ebf11771c6f516aad7cf0925a054117b8446b0b9649556123815e6a7fdad22caca5a7b046bb7dd5bbc4f8fba34ddd48357c052878243c586e164faa9a824bcc79963f7381dfa5de0e54bb2ac6359eed3dc9b503527d384983e7477e962eeae1759c5e51e87039f970d7872e6496bd04097f5913100714d290bdf44b4191dcfa4e7accf46654efcf8b432766ffc16c13bb050526a102d856cb18cab8b7a4c8f86177733707cb97b47c8f1785eaf4af1a9e0e06d063dd990ee7635253bc7e527674e4d807b604270e75eb94173900b0ee22553e90953b9bc447404f0d5214fc1d72973d65687ef33765e3975e48285812df1740aceeacd9f1e1e31d16939940bf183e4d8c4518c1e33de7db5e110a5106247e6724c9bae00655b9dd03e33e0dc67a18835f2a62e11213d34a7785ac4fe51254aee783a46399454440dcb7ac904f3b125195152c5c638e2c2a79c1a0abdbd3d1f9da3972011de7cfd43b23ec5f5ffcc209aec14e2f3f54efe0393f82d12aba7b207db5ac0dde6a41a243ce438a0ceac754b88e8f9d54d566f673c68d0e4c4e315a467b49960be346a0afefcf867463eb800568234b78d786ac72d11241065ed1d239294fab8850e6a7f8adff0ad3b5ab443c26d997ee0bf59dbec07cd6083ec1ddfe158699b02785eaafc8b18ba8548fc7e7129bcf7912cc317dd6ac4a21b669804fe6180133778bb46440829ef3a59f42935341b5a5888b2b6b9e5f28aa13886189bc0641063347c05b562b60524f21ea61b1e2059e8bd2431b363f79acd3fc3d81c58ae3224b8d8c1dd37ef34ecf4467eb507e05d2aa53ad1808cbc989b8912f69ce45049585bcc977a9875ff8ef4c58d065f2ed4123935aa73418658579b722bb96f4920ff4d41f82dd1860bf164441d09306e0d65b873ac22b92933285e61176e94cfc41460299bbf4ae909e7ca0d51bca9a25eeee81abcbca41762e719492fdc78a776cf139e1909df4f2d5a90b91d4f33b3396789f6fcd15e023b4010ddade9f8674fa6204c830f108ed7933bc8ddeb3acd943d0a22a2f0cbee060f0a7888560db720325f3b077cc8713d6b5ab7f0c588b3cba8704915809629178e16719a74668ca4a46ba948cec9180a46cc11b67b17cd05f87d078fcc806abc4cdb00f2dd5a006db4948b9b45ab51895139c3572ca7c6825a1241b97c00e8ae3e3c2ef748b6c9f3544b6e1f64b8631f09c2409a68026179c9567f0c9f44741cae45532b89f28a2cf8bd0c501af0e548809485283e46f129f0a9ccd7ae6c843424be427b7ff729e6f6f615c341d1a93e80afe200c316dcb944801a23f0c7899a2cf2b818de4806e83a6474a7c9fc3d1cd0d22f36da105d7a1fb25ec9783032d7138e39c154023624e69eb71c7c37a130f7902fe0b4b7492d45c88c477db6b2a698977d911611f9943dcaae7f36dbf4444f359cfa0c49babfa16ce0712f5b3236483ca158e39697e392940c08d7d1442723fc0714ea06b9d04fa24dc9f839c05501854132eb2dbf9d5cceae5415344b186c6fda5f8e736d2a11a993d98647a9c686f49d442304b7a322dc4ed6924e8c5fefa401b7e3826b148c327f18f191c0ac25dca2e3de3d117f28863e1f8228ab7b6ae03f2cf162ce6e086592dbcefc80d3ef06b4e68612030ba0735a6b45707813d363b3e8c2ed7b266a1e48556e2e70b3f00b79d7e81ce088f98d43bd1ba062ef4cf441ececfc2feea0171f6af8eba259122fa544466770b10d863f20c68a957550004e0f6b1ae22dbcae6bf855d0d1bdc4871303279f270aaf3ce6c32361b34e663227df455ec3c6a3b2be432d9d367e8ce555045be9863d56467ed797eb44cb4de66107f86460f34ef04ea3ce1ec50d79cfc9242c1e41f5a3d87b2307f88eca902dbd88bfbed33c2fe24d77b4f513b124a570b702a586b9fb9b9456aac16ab3fa22c856b9e7da1c458780f435db14610b7fa3792ce5d9e821c049685428576501e43f43b7209b3ab6721e79f4705c8e79160f63ebdb5f753e9756017a4072d880c78c56d2ef4b2ad33cffa33ff5e01ebbf729542e62fdde8c0faadd812b499f8fa837faf44ebb7624ba165eead5f58560964fed28dde6c8bf83b59e21ff8d64ab4fe95ab146666677f62d912089939f71796554a76d249e8a06aee19462a5749637628898bfa89d80dce3a671f1e05784be07d19016fda010faef4be7ab9df06ae6c6c35c807fd0cfadf31020cdda95dd4a7046659c19f3eabaef708e0647b4136d6a0494540990b4b50b15ff4c5118c03facf7308e07defab99074d27df18beb06e2931fbf8323bbd7eb7c1d2c8bfa0fc65f2cbed0cb057fe2e90bd17ccdba0fd21fab1c0d3badea41534352666fecaef8174d5dd34548926c2b4dd6d70150740748329891584f389ee0c89138a244934c2bb32c61752f8a58122ceb886458438024e9ae6c5dbe42c9ccbd13cb88b86276c40a478a80bce97d0f738561ef58df588fdbf03ffc3018a786090459f98c79c2577ea071a5865565c93bf1444cbb1b4874f5d38655ed0880d171ad2e3b31f3e2cde88f3b39ab459996a81a3126fa9f4a485662f08ba27a0982f4cf470f4d46da07ae9b34c1c3541e780de91d34ae5fbca469ed1baf83da5604295ab51e8140d7df9f1a2d49a9d4236b80ddbd7d135c59c6affe2486aa14b05ddccd22980ce99f43b679c4f04fe966222fa6b74d788cc5ab86383d3d265de7b5575bb2f02b370dff7f7d29601915f0924cf3281f4a5eb48fee6dd8a4460e279e9ed3fef4dd41d6475e90399ae5de9c6f7d02c83a1bf7247195cad7408dd671bffa182c41f8e79585d777063e477e34e4dd65c6435e8c598ae579bb0b0b65b6fd514bf7ee26a40e09828d61810ef575888faa3cc4bb2004605d0c0d0f496dc871038692893ee587e9bb6bad151f1e14e41bbf72876b9866295983edc1d41e9f8861e9e8c0c8026a8c13326392d51e6bd5651b7bb0df089f66dfaf78405c43f00b1a92100125dcf10601e248146a294ed662305f56f667bb96dac7180ff4f96efd6af16d3e8393a6b917e0f05594b723bf401cf44fabee7d3b5f37fbd73ec55d47a5fc17223e72e20f6fd26afd5c3b11ab2d9f6ca785e535279ce22e05a43a9f303dfe1f35f9bb6fad1f23780a2a0f1dd8b601a9b97f1ec7517cf65f0fe6282bdb0eee54e0a86f1f9add06cf7d76c8d5feed8a3fadde28727c2f75a3d18b6d9367ffecee6943283720838c650dbfa70eff33a39b5f05ecf06e0c4fe454a96a08d36d862f0016bfe730efb8276ab0e931edbca6dd6a0e53adc4059dbd0917a5fc8c459a8a86bdf4aebd0dbf93737409da1136b89ff88d8cc76e2cbec29c8a0a79e343f2cbdd36d56e239473f06429fafee528eced3c957bf6935f0fca4d35b6c25d942c1e42b20ea8fde197eb3368ddb9e47db68980d4864b1c4ee921a19aee69270f51bb179ecfa082361069131ef604e353b0237ce0c023afbeb15575aa129d66f61e9e8fe4a1be262b8c95fc364ea44d9f142c86c54d1e845a046bd78d89aed4674091a6bb802da36ce318f8d4e5ab573cce64bbdd44bb11ab2196f72d498b6b642d65bd3a66da7eccc1097b6757e3b77411b9dd3def072cb928cd19e18ff3ee07f1e44110fe4681665092de460e816c4de8e297f57e45e601331e021c7a0236b4f80cdb0dff736ca41f76f4c107398d6603eb39fc289601761a7ca1ebb093a63001ab2498b79d0b470d9e870be725c221b2eee2c857260c5f3416a2600387353fc2624e5f86ba010670289394ec0fc874906d217fd278d9126be441a7d8feaeddef859dbd19f58aeeb90d6df29ed76135529408f32ea7977e8ad6b5ac9eb0af8eb5b6f856e4b66af44808d46bb59fd063a56b6c70b5ebf52ec93ae5ba83a349eb40ad74e31d76e3aac6ee2ba892e77cb53d9d1388522a84acd738834d00bbd0c9081aef54b3ae7e13fe84855348a3fbc2b594fe6249f0d6605506f289eaabce275d243a50308ab271493815345a973e463a9d975187319b732ba81c12ae0d6ba9a18c55087ba91f2fd80010459e804e4a533d603acfe274b222db4d83457c58520899100939875ccce6bf6ead5b9383815e5ab6e4400dbbf8f1eae9b41605a410c400725b74afd4d9b7cfc726ff93ffd3ba50474193aad673e244e36a444d1a1022c46a5bfa609e8ddddf5903c478f5a7545ea636ac2279909caa7b5fcf6e59898969e78191c27d038b818faadb75e0549aba0b77dd5e6e34da27b07f5818466e52da921d184e6088c242781db9451f44fb50409f09eff4b694b182d16b1493bac21e67cd7221d52a61d7c750423a11abb20dba12b91267187a01b183b08dc3cd2bfd2f2d8e6936b59fbe489bb2998d2413f6e2c534cefb507a0a03809274c888942f8020d89c975ec3257313f83139aa72f9f1510ca05e211261b8273b6a30c5362d23a2edbb2962a09c5b9054a63a555ee2d26af8a4703113a12bf127803f85ddd5b958aa2273c8027d59aeaa637d658d59ab251646d216c9c2c22d866e7624ae8793cfcbf138a9d4b9bcba8655ab0d24f934a4fecaed9ff573c5404fadf84b173253149b173ec66f923544acf401cb7e8de39cae29349827ade4c8c797d360280e77c15e38439882ee0a463be543d9fba406914967cc136bcb492238075813434cae837470ffb61d6a252443e7813dce4f876f55be4e11412bbfbc27f521d6f1fde570cd2b2e212e8210898a9b053097603c408c9a576cefdce6f32fcb10436b020a88adae5241e5d2bb0f6e65eefa4ddb5d1488b7ec995b62643cfabf5788ee3d69f31ea07b6cf53fd11203013465618f3edd3b0187997f3bcfd2689a4ffe611b0e0ba80e9a853656deca9b2c097918d041af154e569b500feb61a945261a92a2b77e47e464fdf2b67cd88e1ea19052d11c9821412d8440861d656285abcc75cf57a0c743cbc7a59360fd0dc9b178315457c1c70357368885710a222f544b0d960cd4bcffe44aba54f72f6a266030e3a23d7bd94b3b5c7af9070c1c7214aac2bbe14a04a287345d17c41faa7082d4d09e4b86ab845a1267ff809714b820ccfafa4329c8ca577ab942519a55c2249e10ffea6e637a9794d2b87913cd740d8051be8d27c3f17ed56feb611781605ad7c77c41cf791bcf82ecff76f57dceac35466bee6a2c41e504497246c24953bdff0bd700b88173323e45874758c173a5277c3f1a327ca4dea94c8d6e374c0ad5a7175e340afcbed7bc5b0178bbf1014afb889dd943d11345d386ee782964c75afdabb9e8e75aaca495c011c5cf7282154f5fb6d0c7f5045efab06f5ce879591619f520a615f63884ed83381b670f55816c33ef4e9f564d8fb57064bb6b951c13e2656991b484ba5f69afd51b57909144f77387fec77755a5a7d9f6de17d3990b2db6e448f5ea1bfba61400f5aeff4bd2f4eae658527dfe5f531a3fd378a6969c6203dead5ef9852550f4c5cebb7c3413c357a85d4fb679a7b4456ef364f101ecbf40c1c00b313b40b030a459e745c4052a2da1c59096d67dd9a86c5ae9a0206ae90e405dd5adcb52073e0bf25965e57b367f7df5dd1aa5db146d49dd9147187d64d067b2177c1402a910a0114205776fd9ed3aacbff9ef8752b9a091f666666d664777777f79652a62465d206b80600072d3c01b3fe2ca56edbb31d56ddddadcd384d52ff767c806669dbb76414b34dbd4a497b4a1c9ab775efeea62f9e654dbd9b17a49255f2e877df9261b6d2cedb7ecbbce0b3aebb3bc5190743dbdaf0644dddfd2da50b5e90e4deee17f46ff9321c87f13a8820eefcee28b7b526a9b732b719cfecf1ee2cf3eeb62d3ce9eed6429a61dd564aea32df12566abbbbad5f7082524a09c461e4874e5da65932076acba3ff019a25bf6966dddddd762ea5940dd3dd30595291e5942d55abd4bf85cab0ceb651719605913333a3d4d20cb3d69dbab5b45eda4024d1ed0b864eab53a74ebbbb6d662d4c46a9a559db89557777c7aab5b2b32f9333f2add72c59ddeeed4e7bbabbbbdba64d9b5a2b1b8ff569dd3239635f6659bbbb7ddadd4d9b568b4798a6ae65491b3fb602e28e5f962fbf93337366234a4fcf6e32ec3a8c7c77777a237377f99f57af418aeeee7626d6da961f3f7ee0e0e0d4d4d4b45a2d168be5e2e2d2dded2b2b2babd5ea743a514a65d775ee3ea1100222e2871f4532119c1a39e594734a39a59cb3b5aa7139c94ecae96870d2659c43d9ff2aa14488757cebc72f77e9945aa5acb07ce8f2c28a91c9d1da51638353c28f00e4ee7e204728f1c3ed2f0929b14347eb2ba55258c297981c3b6c4ae84943b3ee9e562befc29269d5e0fc080ac24fd3f2ddd229b54a5961f9d0e585152393a3b5a3c606a78456f8fd3f8458a0201f6e3f8988a0164d8eaf944a61095f6272ecb0c9b8270dcdba7b5aadbc0b4ba65583238410df32c3225383849555ca0acb872e2fac18991cad1d3536b9bb1fe7c70f428ce0f6df2242e49891f94aa91496f02526c78edc8fb1c43d6968d6ddd36ae55d5832ad1a1f9f1616126a7cb7744aad5256583e747961c5c8e468ed90f9efafc121e22382db0feee0234342cc574aa5b0842f31399a66dd3dad56de8525d39a34d060b371ebc6ef964ea955ca0acb872e2fac18991c312ddfdfea9f4368f0b9fd5f0f0d3130acaf944a61095f629a66dd3dad5626cdbbb064264d879387a7c60a0e95ef964ea955ca0acb872e2fac1816cbf7cbf45fa059ced3c3edf774260f0bc7cb574aa5b0842f4db3ee9e562befc212226445a5bf5b3ae55ea5acb07ce8f2f252e3fb59fd2c089937b8fd5d0b425e6eb87ca5540a4bd834ebee69b5f22e58b7c20a2a295b377eb7744aad5256583e7459f97e17155608c1ede71eb0828b8df02ba552589a66dd3dad563e85145250bafff1bba5536a95b2c212aa7cff2b20051e6effc6801442fc5f2995d234ebee69b582020a28abad1bbf5b3aa55629b9bb7fa59f0028ec70fbb503a0f02d2c5f29d534ebee69b5752698b0526dddca8fdf2d9d52b9bb7fd5ffc3041d6e7f06c404961a2b5fa969d6dd130e8e2ad5e51ebf5b5a597dffa98593c3edc76a70565452bea65977bb4e462685ea563f7e29aaefbffd2e3238dc7ecb924941d97237cd3aaffb47ad52dfdfad9ec8edaf2bbfc21837cdbeee746a967f777fd69d6eb8f794c2589a42b0cbdaa6bbbf7166c3ed772c278da9eb1aaebfe42489f4cd23b23f098f1328fb5f3cce1fb23f883f3cce21d9dfc3a37c324a27a36c32ca25d95fc3a324c2f0d8f296ddcaa5f583000a5081850b0c21f20350db1cd136d4ef4af69aa1234560c82359849e1d8af424620ae53994a58d9dd6dc11c5ecda339f30bf7e7f752ab8e638e9f9b78f3bf3a5279ffec4f2bd9b72369d5f5bcad9f32906e254d26615a1040df9b33c9284939cc416b995e5912488c858f8c08451eeb2c70491cccaf2c81246f9c8124599cbda6bfe79f4dfe877c86d5a28a4736f2104faed6bdb6baebdf4b66c7bfa59db8c534e1fdc168eb3f34ee0b2c67903a8329359cbb2ffb6d13e7bf772b26df372b49036f6ef91e64c7b3a7d682e79dc3e7becb7eeec9dd0856367edbd70eccf5bdb979e01b60fa9f6593806d13efbeca77782f6d9b68559e7ecb7f7e7bc01789f859b17da49e39e176a5b38ce8cf32a5f99cb70cddddd9d9b66cec3ec1b53ef30f753e62cb4d3c7b83db6bdf6a3103b69b2f72c67a10a66a78fecbb72d81b80f610b0a17b2774597b3b7d68e148819d9cbd8796bec5f0cc9bcdd88881ac3d2767f7376a206b356b9f9d50b396d9e9639c796608686f3fd3bebe34c0962dc7cdaeb5dfe1bcdb5ec3e39c9e01e86f61f6fd36cbeca4e9efe7a49d3ea6dce9a6e782564b865bd32caed2ae524a2bad95d25a69c53277fdc98066f5e3b40d360a99196bcd7055826c3bd97f6ce59e198809049898ab94d69a3dc5d53ec5f527a695ce49433ff36ae8ee05b1dda109cdea67c04ebdb99efbdbc6c317264eab6db4efd7240d5582ec64204db349539fa80442deb50c77bcb90036ecf03eee54faa39039bd13e65b15fa9fe52b0369ce71f613d3495381b867274dfde9e560bd72d6e892bbe26f567dc7a390cef37d625bb13fb532b96b19bae7eb1e48d8e60e055eec7312ae94843ddb5a3b12ee0e04ff7eaaa2be0b5ad2ddbe0d73257286a692b0cc1f4e4998fa1b4bae2fb93620bb9530f5515fae9fa5721dbb4cc36ca51909d35c3a3993e90547c233732c07e4fa72c6dd53f8c50b72f3cb8b864dd9e29ea141d03da065f172306c0587093888e088e9345cca14ffa490106a42924a5818b2b68fa561120a63d82a0583c178412e8ccccd3666062481841c5f96c16466b81c3abcfcb4c33fde3b2a4c3dea3d5adfda1b5e0e86d9c8e105a99e0389ec914347a7fda49ec33fab4749319d56afc2eec319eed3364e8664f5afb0175932e44cffc55ee430fd252f23f7637e46ee07b72f0153f43ec10e0ec78d564dcb6bb5786c1773969763ed8b0e2f480d6574d46879470fad52c9a2dd939e870e8644f2e061d36918cb14ffacbc0a877f54be06aeafc2281c4326aabec6b3509414d389a5860abf90e52e7441c8cdda7335b5aaa492ca0aaac60b727356e34a38ec4864b67d353736f7a899521b1b1c1225e590b971a137deffcde6d5e77c741caeaf0df142232412e94b3f49cf51d2b74894447ae9052185a77b4ba49f9f52a2f172306c068784e3ad9ad58fa3a19ec33fa9146ab5c29530d8a75000008017e402a0d3f0cc15ff50fce3bd0af7bce885b5662578416e093e7c04a0ab98be2a23bd2485237dd2974821f71cd7f291917458a4d0ede7c30b427dfc78899146b2a8b321fd784ff2c8abcde8a3ba4aa17e783f4aa2f9a3c6dd2168003469a617f30693c95482f27c2699d6a7add65a9f42c23c21594ddc90ea1e72b70d4dc3e4d1df3ded32109a347d0118cfbd2059f7b80b093571a11fd363aa0b643484caa73cca93f0cff7d6149edef4aaeff00f554941c1983d9954f8c36c387a1312fe51fdca534dd2775f95a828e6b59230baac78bf1ca6adb591a17ba84fbf66bf3a5c336dea5d87fd76b8b3c58e047b123faa9d399b4d89552f3d9749ac3fd2cc9e4958cbcc3fd203694bca345ba94f6965663a296f503f24864c8ce18a283f4a22aa65b9e5cefbf1aefec7f623ebe67463fa1127cb1bd58fb208267fdf8f34ee239fc3baa741207b06d9374898fe139e4cc6f99a35583279f4e8e7a6e77ae58cff4ae52da07e8ee0c46cd81382d393902c24248d90372161fa2f3e6113b85d17f229727f57af4e1dff7cf57bfb859fc250f8c3b4529a9aa847c13d574485af02a51d6d21635dc56a5da94e269cc2a8ffb033913afa3d0bc9a3df91c81efd965acf8bb070f4f9429627801dc1083cd9431784dc6c9f6294468963d8097b138661483cc9a459026e416ed6ecf74c8eee08c791a4e91f6f6479bab93fbe1f5db274211792df2fbfb9a1fb8021d63d35fb9266391225d3cec9a47ba68ff99a34980e0b9b4964c8fddbe72f2fb01cd4fb25a7e641dc20a627802cd3d0765977343d3d92d5aff920fdb875778592a5679b7e4956cbff01fec80ac0f7634a66c9745c00dc38ccc4f0f4024f2653899c48244d7f09cf979c913cc61946ee9f5fc81eed48beb82e46eef7793912b741eeef6fea5ec28e84843d49877dc9e6ee5f807e34248617e5e431ba0e7a8c8e83dc4ffda5fd78cf79ffe19e2b7a7ff190fbdf7317378fc861ee5f3fdc2237bb0f4f91cbb4ec16c8359333fe3e61fcd5bea461ba66d95f26b0b4f6679fab72a6bed5a6ec0a6c72a6d617bc2059ce9ec3a8b7d5b26f61a951fafe7f59c2531e57b7d32e8a350e7840616c654a69f82d9685566ecd20dc5eadeecd3277f7002769aecd95ab5596cd79eb8d0cbb068eeb29bdb1ee4abda7746c02f3086dbbab9cee93cef973ba3bad2e7bcab901c171d266dddd94f60cfd364bfa4bc7ddcdafe6d2dd5bdedd597f8b4b776f79376d8ce258139a251f85da416459b77d4b697bb77477a71db769de8d8c524bb3b619a59666d34a9718394361e48cf794d406a50e43e75c420bad94f58294666e5df65d593b5b765876b76d4a2db52e6519928c2cbf8516e48c74776b2d6d4a6946ada5967695ddd4a5136a5768d6ac51dc90f56f449165bb531fd2053069e4733ebb67ceb991516a69d6766b615959b9d4bb2775c9b174d339e70ca99492ce6e29c3d133ab65340b6db7d7c8dd554ab7eed42da5d2ad3b75ebd4ddc3eeeeeed0ad3b753b3b4bd977056c77eafd494abd6bafa338889cc928b534e3da6edd9aecce248c9cb1166b54273d4aad95f4e4e5c81a6b6d7757d94da57fcbecbe2a5a46a9a55966334a2dcdb06eea6d2bf5b6df32dda996615b4a9651a9028364913bbf57962d2909d53d69e6eedd53fac9567a579d7f4b0b47a6594da794eeee143331214fa54a7daea69c914fb217b4b636fd16ef3965705da6645705a44e9dd2b696d69631932567e412b4bd0f4080126c8e9c99ed4d0f90d11b59d2158b7d24793baa1b9414d38fd38fd268f2dcd4709f6689e13e38c1f5554e3ba3a32725923ca26da05411c917493e877523a0b49369d51079e096aa1ae73e1c2a480b074a52851731330801e0844642c16d27d7c9481558f4abadbb2c7288e8036fa9cbb4ed82dfaac1914318463e37752067fa413cbb98305a4c567fc7eab7af49432150df52ac120104846100036b466d0da710b3c866ad7f2e64df2cedce647d036d3197318a3753663593a6699dcfb6619d093b93cd8bbc03ee721c67c2b3061326c96481b38ba903e7dc35f770fe804d1f9f0eec2c46e23e136e1b5a062ff5283c648891ee51e110d4c7f0222a34423b040d04a55feab0e748ff793924523787f0749dd63de77939ee1c0da59e8e5b7231acf372eaf69e17040be70e9e3789cccd033dcfebe8ea4dd899982e83191af1951413e60aa75e75ce3dd4c12e50047e1fb67d5c05b2bb84a9986fa0b9cf4190e2ce1b966287998ceeed289eb549a48e8ab664b26f4ba65ae37a1be86d60f735511a17222146c90a78bfcded0cf68e55ff2c78bba7e909d51d1da9c8a11fa91f2591e6813874a59a2fafa814b879af54ee834a79fdbc0bdaad51a9e929179c584f8b39ddbed478c16aed05314fa93aa11d4c2119863c72228da8cd8d1716502753f3030ab985ea470946c5a415683c21230a12f66ce90cd37d2c8ae47533f4b676fbdabb858ed0f011c23f2a4f515054de4f287f7aae9974d45a9c655fa9a1d2c4baa7a07cf4e7a4fa52e882909bb92fbdfbf88972a5ec92bcce52c9b24f4f26955337a956582575ee45f653ad3ad944be481d3d4551fa514a31c48acb8f1fabd5caf61172ff5873e4305cf720fb06efa3252d8611307c8b0d9cb38f848eb2ddc09434f649f827b57aba0a53df5e90e6baf329dbe987394ab54a65d5824e69752f075bb98dbda7d54a0d2692d5994937f51249ca99d24f2f87c47dfefe1d043ca5ab9f10dac251570a49ddd6edd6adc55052647a522d9c9fd54fee9f1783eee33e6e3fdb53760aaeb284279369c27d032ad5b6bd9bf6a95f23f8059007adfe7b772150b5f28a42a5babdf89ea650a96e6259adca8a87a25764f93e54011343c5f6a94ca9d509cc179c9f976d9741ebe5502e571568e21cf3d4cacba9dbb7592ddb6bb34c319627fef132c7595b29b6d984a538bdcdcbc142169ad5efad604471e53a8a6947b17b5e35a5568ffd77c1edc3bc7e5f4727fef1def481e0eb7ef892ecafd478bdb4bcc9dcd5f6a94c1e0a86049396314beb4dadaab77daaee53ab89917e564aea2a965318ffa47ed582ca844fab147e212b7de54a48e4867d36d36a2976b7af7695dadb85345b4b6be88290ae7617dc3eead471537bc1edcb3255a5416ed62afd36aee50dbd25930a258525cb2cd3b42779399a067e0ff054904d9c89f41ac899259386a67bccbbe08266f41be49633f547cf41ee2e1c4b24095cd26d01bce0043ef073c1fb3c0a745e2784ebb80a6cdcf682b66916c8b4ec02188601cbc466a0d6a06a80664175dc97c812ecb76fa03fcffec7f2caf3e57452eb4b42c1827c75761a318d903f5f2034895ce60ba6509d4e1a661ad5a366d5fa26f4cd7ce230fd4040bce10fbfdf740f986b4bae5f5f256feed7706441be40dc402e8fda2805771a0de089dff450bf80fca68f9e94c27145ea1ed07bfac86f5cc87b68b52a9184fa08cc631fe1ef2fdede7bfe27d87d4f76fda85928307218fcf3d5f2fd2ddf852d4f438c5bfce5a46d22205fd9e751cd4cdf9b3c977cd5af6104e42b050674760ac9391b6bf99e9efaa3cdba7b5d2676a1be3ff779b559f66f62cf7d58759ce58a25f572b09125d3c2e966e81ef086327021cdd64bc18b61a00bd9ed4b8dd6da7a312cd36efdbeb0ddc76f528ab80a504141aacc9e7915da2861ce696db87432fd82f10eabab16cefd91d575b6f983a9b5d65bf387bb878ad55aaf3bbd9e3bac7eb786fe12a25a971a2c2d8f431b2dddc4367bd7a964b94eae2ebf9bb8b64f4c7309ffa0dec3de04ca99702584ba47bfc52ef8d7e750584896dde5ec0ffb8ae5d43cb1fbc49dbd0b6e54b340e6aa64695fc23fa7a7f807e53bd55b5598f22a8f72fa0f9b5ef55fd540e6589a6bb6a65054524e26d5e7cd1fd5933a4abf7b1249b54aa13afae1ea35e91226e530eceecdd7868d8ec35389ec191a04dd33998060d64e28db4c2275f0e8771f17cfc5e57329e12f639d5010ea43376e7425ec6512fef11ef3bef3bc8b75b6efa2bc979797ae84bb0ebf9065528843091259c281a32b612e9f50b8d4a7567faaa715cb0b7259ac12deb2111784dc9c7dcb6ba5968cc2903a6c8329612ddf18ee4df6de8f21532275f0e82761cbf277498821a13ffb189665bc1c19199b6766ba12ae39478eced29430cd1c0da743d2b4fcb35fc2303053bfe5e5b45a5d498797e3af0334abdf5f04f8ae0e1d3aba12967903533b76f0b8e0b763cad2673f0b71b03a692506d311ad7eccb015ab8583613f72ab5487a792c9041b124326f687d92c4b39b15dc3ed2b7600a108511120221f82805c8945124464f9b76dc6d5ea872c7f250921b2749108a07ea49b3d871ca65a2cd35ad62a87b428e3891b3931440190450d454457cb8fd1a9f61165385124faef74d4d3988187223a9d3c61e2a8724154646d0842911e6cf6740183513602238e844417f8b2541e2902099ed4110481839068bb8c0fa4418421610322444ee081224462d8a2c80c5cd0019e23a0f1d3038424a620a2d5228c40424874592286c4e6a9a28c97e8ba4ee816640489ae1a0320d1c510630846a2abfe14891eee602d94171e285224eab870f488f45d241f8888fea8d4a3421df922e201215107f5ae2c8a262a0b507dea55a1ce1c220c13f8883a2e959048df458d1812fd53a18ee441077808127550a10b3312a9cbcfe0113d3c65561831247a68bf585224ba30a309c524ea1efdf3e88e73680ef9cd1467b8a276fe200569bc7c8250451160e031628813455a8cc1c91dc0c08550876488e7c853d2c30a82be253d60d2a3c50e3b681b96ed208c20f0dcb0c4912391b3c111828cba2b72082ab2591751c51346da34c3053a046d4c14f111b93392f4681bd7799f04bf9f0ff0882496cc306de33aef032fa9643af16ca2eca60884829a742d30e28c20d11b12c4936f1e61021c0081ac13782089cf9d4fb440064f485030112a2a45f18220222609451669f89c9610ca411371be7840c24764d5b06408111d564f172378429568c1237ab88a010c4a3c4189818fd1075a7139d9472e279b0697037938838727a28eab8611a3953cdfe515717d5cc1f36a914add1544484d7860549ae10a274dc469e241630920b164031643a2e9748406520c994ea8946aa5eac1173cb662271dd7bc210629786c7c816448f4d771d978d1c447f4d0d5463042697226c90f67f8885caa7580620a1e514766d1032010115d1d121f310b2c8e281239d50f6e600421d185924313b1073194085259803f7d0f7566d0100d8844d7ca888fe84f439505a09e3e2ad4994c00718227a2cb1b43489c4afc50c64b74a924f1123d3c49544a859292aa62082668e2a14e97a0075cbc76a61ce3871d9ecc3682678697e8c2d1239ebac7cc5ca7470d5c0489ae9622f7d43d523cd4f9224e7cfce9ef88b4041882a08322a28e4b4b43498f28bb870b1c0a1265f7905695c60f4b8044b97217e410040f8a4cb921072a7ac499c3192a202232c1020644628d2f986c4124ba5442329265b65ca1c30b86e49fa62c0a620846a2aba588a8030ca0223c564086194d6a60c0d345d02cc112a25942117c38d26108318a261231a8a1898e231cf0e870e2031e310b33ac189a20f042099138bbb0418f9028732c39c221487481404fc4b9c5163808ad54282b5a84072c82c4ee82086418891265c5831bf064687421247a9862050b8000122348a5065488c123eab8da0a30aeb82e0863258a32868a9cc90d9aacc0472795c40e3910115df7081222a2ec1e2d4d7c9e0669101101d24126cfd76909018d1ed1d53808893f30b24186118fcb8d561829109a4e744006454e0c010d2059c60e9a10d29938f08cd123eab838201c0d89feaed6a2e748f4509a21c313463a7e34648c2773881a84440f6766d1109a14c95104060e00d1749118f8c0278552a5a8ac284142872139a528e2c52377f4140dd968628929da490a7cc043843472e03142114013063ac4808747117830d42d08c1104f0c093588160cf1c83451410d3c334a80a062288711140ca154566a4816ea37ae23d11841183c6277cd6ad76401183ce2ed1efd3aae79140391e8efb2488880473412aa04a97ffafa3bd9f43bb9f43b99f43bf9fe4e067f277fbf93bddfc9ddef64ee77f2f63b39fb9d6c7f47fb9ddc3d779444e3099b700993f0c520feb0873bbce1f91976325f1b92673be66a147161c3139649022221f0b45851040f003d0e966c41c4f23a421a442dd386271c787d9230480084a70e43e8c1519845093ae0d36f850c43bcda6fc20e4ac20c15f088ae8d898f6844c500128c3cc370fbe1088f0daf1b360230041546a2ff8e2867a8b82e9a2c41e668cf71586d21cf07e2407a6a540c291275fc5df3270442a211fb3ba28a02a4886121346bd8d72a7d3615b7be109ab5cfc239d473a8593d89aab876fe0c5fa0794e226d64a183381c4268b618cef20d396d502cc630125d989174a933707154734590e8a1119520f3eb873b79de90603ce123eab86898cc8047f477ad80a089e8a1dfb868d240c11351768f7964c390a2e9d26f5a598c713449483283914c27fdc65f65013eac30a2090f5d1c70f17c7661b89dcb8d171c7e23b748638c2151ca1bdf75f5cea40850c2cdefee9ee2ce8700373307d2e7c0ab43139e2ca47f6604a06470009e334f00cdd1495baa40016c3d9d7e94ba97d3ede5480f94e10d3933dfbd1cf91c75ea33533933a537801ab959b93b09c7d9dc499d249bd535cb9b3f4339a70a43551ce14f2441c43b4282234e850e47148b211c51893ae004b382044328110c9a60010311eed3a4af6801909d228a25d709207ed886963c99af272f2c9420e252b080086c2809118fe20822fb84d00c84cec0a0d0e2a834b4459379040722da0b0a215057ec50a94052647fa04476e475c487ba08ea28a818627a8dd75fdefd5b2b856649bfb97ef32e7da3bd7ca9e1141a667b4e85b6e1c21e59d9f59b15b2cffc868516c761151850e4723fcaa21480f40adf7b21e98657cbb29eaefb2fecde0bbbcfc206ea2610960203da66fb7e15b82c4b2ff3cc5bd96758e8d26265ea5edcf9cad24675cd9d76d19d89552c40e9d2eabef4d2bf18c45fb73233eeccd8775eede79a6b0a66da5c6fad7537fdeef639bd08b428754ac1e0a48b8bd26fdcda509330fd9544c3fef1e296385920e9ceecb9020e93ed9e594a2bcddcbf69cb19ea1be81c6f50ceac77c0499791f2e4d63a8789b9e0f60d31c255199f19a8648c1c263dab6846200000500053160000180c0a884683013d4f83d6fb14000c5d8a486a8038958702510ec3288ac220c818430c30c018640851a6ca661504384d9c8c0795235eca204bc618784c395b73272793e3f8687a4eb0134056257b622896590c74754261857ccb5cfe8c68258bae3f7dd0ec2cf087c87e823edc8a42e9436e89d35f279a9a02481d14a8f75b57073be4e56aa63d6952fc7c7d0ac463357dda0b0d665c0cc633c3409d94f3ced397e7ebe16b513b9ff0650f34c2d4a4017656e245c661b0170cfc38ad2acaa54d4b64d2222096e2a32c6b1fff2bdd2f57b43085dd2452f969a09106893b292669bc7cbeb87ebf2e4e6cdfcbaa5264d7504821347b95875452107ebbd92ce6f7ca54e0136eec30738a52865b19707edae0e41326351c327fe1d7cb0ce2c4c1cb7392504840ec8c8d1a8780569dee914cadee266c27dbde9c77260e6cef34e215cb60e954435cc549ad5801228c23fdca73a3c713dcfcb58be6f9229d45b04430d472dfd4558dc74159167f37f4c71f0e7bae69c31d5f6ca038493b8276e9dd5375e782d02a0126b290a99f999ffb7ad56f51b35f10290b65edb61e89df7df040f0ae6d0561fcea73dabfaf1ecfdadf2b657fa76db59d709baae25b0df58b2c83b7e5f36fecbea9fcaa2edf273839f2cd9e6b7389a32861f91ebc4905963b614806d21feff3b9cd1ea779481c7560d87ee38fe242adfccb22684457704795dfc9a434b570610f4eb6b220d2797a87654a0df6c27a96e61c1b1bc4af6b034a4ecb92ade1cf4549e575763a210626100719c2e84947f847374a51154514518f3aca288d324a384c957b0fe2a869ef137c5da25d129751183d41762d1c8470b156d71e64602c5d2b618ce35a18e4ab7a9f3d6e0246c49011d6e9e342cd17e8c065073f92aa0c8b655a16e147879de03a60e2754ea46ccf78cfe75733f4fd99948c1eb0ad2e0c020a0974ba5fe559840452412d997416b320b2156ec6ed908bfb1b701b4dc462fecc5f69fc996f53083394c0b6caadfe85dd3e0d4fa6aead24a891963eacfdf0513330b14f840e4e86020594284870df8e384e56b6fe9dc5eb66157402c01575e6b114fabad7148d430f3daee17e80892b4ae351df98700bbd79591a60c74ddb93576757c1dd2427601ee597d07b3216157cfff527b5db4fcb196ffb18e7b60e41316efcd8069817f7c9fc23b38ec3cbc5bdbc25e5b042e023e2576628390d5e07f087844d7a7d9eca3cf8c70e2b2e49231a1f1caae14a5b0a52931a936c885aca4cc9901b6be12bdfeeaaa4b53970be49a483e66eff400371061ad0c4051bd7d7831730e6aab93a41b2a5e7d606781c6453896ed8e240a4761fb3b015dc113b8cc050e98a06a6f0195a9e6d206a337b3f2298412d98ab9eeabaca2854f6fba068a7ec111ca9d523b670b1320062d234d8c594433823740c68de1bbd1c2eeebc174d0694de53959057ab0207e8eb2dfed3a68cac454f9093e2fee92b9392447567c3d5df66b09c591887e748800df8fe2e9275ad1d144d74f176953a88b3159b8e80f7edee89725f7ca05584b140294f6a1d30cad3e3218685cfba40be077e36d0d4777d863d01de03c075cb40ea5df897429f8a09815e2655adefc432e0b3c9866b489775f619b091a84e7415509c977fa42b081150c34afa8f99da40d660a9e3807cd5ffc34313cf065f514f10773f2d429530beefaf55c2de503ac5eaeea8072236f1344cc1f788c06a1ef364e145ebf47c9366cf78cc2a51bb8c27484e3bc35e3f092b078a4cc652fd0865a27caf4987fbe8a28e5b37649a7beea47f0170b420f343d3d00ab42b313d23263067313e6ba606e04da4545af8527222001a4c7465572228e8a9777789a64a42602a2a122b5aa306247adda398f7f424ee0563324b6448caa8efde54f0dd1e621ebc0b483d2c0a0ebe9efbf2cd71422cf541678b8db72b893cd27fca70e3af5074520213b45e7b41c9a207889f83dffb20fac92d50618ec1bcd9f2d2a7169be5bc09b1175252309262539875aee40a939b61a2f66f94c092b9e11260d07702630e1029de2d2d531a2ba978e96e3434963726c77820aa33aae4c8c13df147303f327456d8f88ab01d677956caf048682df1ea0d88d7c8502102ccab1edcae7cdb994d3ae54eadd655e55206669f05b60ef83d8bc12cf2a0b5f1c4c14796931e90be9ac61282613af75b2c09f83159f1b98d8a5e0cc95c832706ad3395e3e4f3d28db0ac054365e54aafdfebc2f58d6dd439fea88126360c655adf53569f78f70e6440b1d4407109542126c506231555170063fd58e72e22f56abebcf2fc068a2075793579b173a300023cfb4f1e35461f8c66996423378ea2752bc562306f22954071312bb61a27405be6ce18954132dc528d64a265e0b91c525a4a0e1b44bd4118157a7789d6c41711eaff0b8bc2bd19e9df156ec7135f88c7575f490ae053ffb80f1ff37252b937a4a901c15bc131a0fd71d33e6054c4b71f0cbff9f68d1b506bf985a78712787864b3465db07a1590788f5bd76ba3f362fd2356b33efa06c9e8f9fe4154148c964fc56feeb92fdbe0f9d5f1fab804459df8fb2abb12a0a76ea2ba412a25b750ff3fcf224102c76fee00848c9ed937da6c7264775d9715fb8368064b2bdb84390a8347cdc21b6757ae806645fb9ffb70de6e066cbcb0dbe1ac626fc087b4c287d7c9d7203d96fba2e1d71acfd9652f2d663e1ead8a98fd7dbf7c7e35ff9cbed87fd77fdf4ad1daf7ba554ec10a0d7a2ff56d11c1a7a7de979e99017bef2a06989ff4fb6a3a749f588f9d1e6abd6b19baf7876e49f1619a08a404ae3949636ae6b0a30d11b08b93cd9bab56a9d2c5e0543f36490b71d89d11363d07ef0660dd3765f2a6c26c50701943d6a344fce9c46604a1e31f327e8f2c9424913cec8be7209b08daeaa30149f333d60e79209e1d30db7494f6b386d21870052e019f900ef4a6ae56e84d5549984af5ed9e1e55378bb091b6fb4ed3c1fff58622ab5f3a68113cc2c885ece1bd99fd38aba97bc1cf819c0b018fd85c526cf643be18f7fe13a23e94c03a8cb4958bb10b3007233ea131e238174cca7ec668335d88e92e8c4c82e0b1228bcd90842cd75276f4de5103bec0d465c0f7256d36a0051d05f299abdaa0044ec85555389ff37b54de783391f6982c180dea868395eb6f915ff0d37fc8457d4a496cf67df35a279330d01b3730a3e980afeb9e95c475e20015202507037f10710976d8bae6c8026032d643759ec2f1062fbeb53e60957c21ffbe8ac22c31c2755ddaebce135941f247dabff9ba39f0a13acfdfbac541ee2a1c5387c2fc4cf85bd741d8a84336f552240b89217891dedf3a944f09706e3538ac8a575a6800d715b0e810c2cb4e82bcd38ed0d7ca91cf3b682dcf4dd44332c5453b50a0cab5199db433e8c3dd618bd7dab7302841c1ec941862eb79fd87f1261bc1e63ada33980e7378018cb96095b92a32830d2f08fafea92878e55e7616a06e5ba2a404c8c471fc9dcb6dfc0ac3fc89e0dc57f0edec45b230256ba8bf8e4a4b5b11601ac020c4116387f881f0b62853302fd6a396291d4ba3d3178060aa2970cbfeaa4535588c992ea81e807534e182eb1f5c955d2d6dd057957e54b470449fa3a7ee825300181c903d6dc29e946279d112f77f3599adfd926007f0806f3174aa4b2076a2b172a1e79509e36777d91978a5f6583cdfe67b82ea894593bb0fd9722d0026d3a71c38285f4282405990dbb4154badc07c0a6b41473350c02aa151f08f3d3acad709aa79712ca8be3b066778ba8a016be639883e223e75a689bfff678e8e30634beca81201a770f2b464e63581be02dfce401664a255a215656779143a4808005ec3b2151501f89130b8ff3594ebbd5e0ab871d53fe90bfbecf2b88381763a71e0a45063409af6135a96232dd413c58afc2dffa67f23621edea165a15d4a45076bc2821fa3149eff582b30f433e75bd295823e8f9f0acc72ffbaf53f77139d6337ba7668154a1016fb6fea36eb6e331571b3c78df005bd8bf318ec2b098dac2518fbc0b6ebc6405ce522e54dbb9165d5da47135c7746d3d579a865429fe5c2ead2bae04834bcea00f93df72ea51f5942a50647f2df4cbca68897b7a5fdc41d11c8db82e4d036cd36b614565bfdce8a595b2b70428d155e47bdb4a6868f346041fb377be415a332fe2ae18a05859d4a2e1f49101354aa41a54ff563c9a0b256699b1552718d697eb2c0ebe9e4024e3deab63acf77570341b703c727c4c01595cf8dd311a3cf92cbdfba2edd7602c01eca373420aeb6ccd604ebd3e6c4596bcc1de1292594037bc0eaa86828837a6f6f87726a0116f8c54dc515874828200e1128a266fdf7a71c39609da33671e74bde25708dd1520db4df9cb460aeccad0ce447fd762c98f55314849ff3a945e50e094e04658025951eec144a718aabe357c054d847b7cf549d0d359ef3f6ff6ccb942c73af0e2ee33e09aae6d8af8d4fa64ba306305cb276d779629db2ea259866c9810ab76ba43e74312765afb8ef4680af86f957d8a5fffb7b9c5c32e8b65429ca3189f6129c9407220ed342a116658329862c01df55d2f04ab4657cd0df29e8b06d08af04e8f6128f51e80b45264185f10b3aa70f69080c37328bd901a8e27d8c77e30907483831535e30939182324fa3b8173165db292c4b90dfd53df6c4a941f862b5b5fb87a3e87d7054d9e6a95284b587d113a487e881e1a28139b9a00c53c20f257ee25e12743fc55c31100830cdb04c540cb7530320f233bb5b8f498601083d55307406d3f1eb0760c16de0d1a3fc717bff671c4d4bd284c2457ee41f128c5c5861ef4b1013098a8a5b8878d8166362262e4a9abbc0601d08b869c794250f91d202e4046c0464757fa6ff2f0f484159a0e0a3ba93b17053e1747dbb209381c7df860cd725d5d02cc702003e90528b5bc397a6e568b254a23383459dc996c9d9433d572b0053fce210f895ba4b0452afff55ddd743970ca8a391b345baf1b6c0f4a6b721a504c1b588b01fb701c0bcb1cbe551cfbb715eccbff15b1a3991a49b0a371718a3a8d94e5f15a973b48316aae82afdd69fb603181e854f40ea170590ad44fc43272359cdc326776ed468b2377ef7d74de4615c4366b4ffe44236b8c59621f98485cccd17f1caed48f3e6ee8965190cfeb60cd911a9e5a0f0c8e0c17c7c33b3d17007f4496a85a8368604cdffc0a094d693f3c572c6df92a78cfcb7bfd98a7e462652f4a064c86a8bc4bda7c500dff757c694db58186751994db485ad24ace7ed615d09f25cc986e91f3149945f8fd9b9b84c9c15095e140b45ade26371b9ccacbf764e48a69825d9472d82f9d1917155fd7c1ea1dd197620cac7f4313758180a72fe60a3df17cb1b84ceca9a9de783998d1ef3129e88d5567ec6040930e54057f023cc72f64048026c951cf73c49bdfca060330e0059e3b322683b6a90582f10dbe9008ca5858a72a08572cb46742dc5b1c2cb85760ed50fc4ef06f38431b476b741a59b5979733acf3d303c91aa088b3308dfc21dcb88617323c90f367797239373b119f0e5339866a162eb03156962dcedf4e900cc56576236d2a9c9facc6b707987e0d1e8d04617bda3962091b3ec74359e87731062250a5c0c5605fa350966d62ab129d03b9ad51e81b5ca9fd8eb705ac05205573101e2f921569b23612467efcb35eedb5857c015fb554f74fb7e4e3c10bfc580902d938fab0659e4a46bc18918443557f8d4c4fd62f94550f7e215a10b23d26683268c035bc472d0b20c8b7cc09e06de75712c1ae6271384688ef8adfc80957d808245509193e230340a87ca63242db1094b1524d5637bec601fde97fb8e5dec83a8f3cc88c6a8b80ba733eb3f3d95a52a17b50cbd2d4f350a24f8c6260ff047ccaa00da748d078ec98355f95fa3b0e08f2086e380dd2a01f7550f9172262420ef6a29f87ac1e511ece6f6697e6dcc241c222de2f255987f7fde173cb456197db901dae1ef05a2235e61f1cb346b97634392e590e2be56e8c1fcf94a7d15043e76708938834be9d3a3db7c6620815ad5d22f4e340bb57937c25001a0dd62e20c1dc92ebe41fc9879d4da372be9e4294888611e21c41c5c4b4c27373a3c2c9106537452c007f76c917316c21a942e862662a4153edf323b3bc25252734f04640625233aafb3bd2bd119fff006674c759b600ed88bf4c67612c092f5ec63508fa5f1e00964252469607ae122a74da2c01a78d8303c30c10138728352e25df12e4c48a89309fb529d0d66f071bd0d3bc48246743d242f204c26cfcc50d3a8854c9aae9a92bf5f4e624f69fb8288bec7d83111c6f8eb2f6f871f3b8fcc4bd986b23c313dbcb3adf8a6460e958c0b0b43f74bfc3e5a742a1ff13a1ab9d263b1426e96f32c78f9f2cdeb5d4b8e1fc812869e14e9eda4527edd472a3a49aa55d1558ec179b12cbbc51163c34d10b5f2d6fecd232b3fe5930bf62732155552dd43798a01c130972fc2f26daf5453453897f085e2ca6c2f582247a3d0838d48995365e2988039ec823fffff5a9d454d36da2a90c881ee5e70bea7f9aed63d50654de94dbb8ad9e4b7dd6bfca0c04b7d63137047ad931f05650c8f535d432c056ace7760e8958d122c535eb040ea84c42743b2223dceeb6075bdb4d888cba8740f411dda2795ad6510de4bafb4b5a985681d46848cb385efd221acd32938431fe3189de07b6fc168dc4051210ee0ecaad5278de60c970abfca0239988f7c7aadfaab7f42edd552e581710b9c43741d1b2496a30c425c44056ae00f170e9981b0fafbd3db864843e24452d1e9e687e26227ae151a335f232587b32a22d3797c0f80d198399acda444f442f0e5b8092d0530145a2a46eda58825323cca9b186cf8f890cb8e7ff23164a58ed380a000d62419f387ce091eae3a0065900c1bf7804f20e63abdf455ab92da704918e6d9bc7f24da9e8e5ba12bc67503823ddc8cddcf6cab983ba42528b31348136c82731a73f53ac2c5c9b1e076cd89ecbc8373af265400179a4d4a617b7dda14eac99aaf2e2b03f0dbb00c0d56884ed7b0bd6f4d6bd255acd60188365f65419bd0c37a13143ae9daa05961104f092e1e878b000b4b60ed3ffd6088b86c6c704a275607f9ce2f440cecdbf334c094faeda3e77f75ed7d9ac643ac7c4ceb653e47b75feb8942cd77e66aaa765cd503fd8c64fba4df427a4cfab336a830c3c40669914f8a5941ae454850ccf0ba69192b9d691326cd5e7051eda139c454c3953bba34aab4a121aa830027d2c5d8ea3867557ebe3ed4fe6dd4431f0fe3c4642ed9b396ecedcc72e026e6b4dd04514061fe58c9f8312a1f5b3930b939d85836fd546da18f16473c67a9e76806a28c338f30f60e53ac8683b81480ebed1ecd4f526e729c35a3226a8fc054b76b1a9b1ecdf6549a4acb28a429af140b3337cf35753589385e6872256d951cbfc7248c06bdfb0304c25944fe51ebe06797bc118c3c3724f4b3a2c4ec51b0039fbb47f6363a937f7847ac3f6b3cc9c7dcbd28cfd71991674ec4525685f7eb6925a741130ff3ca922877afeac8468d2bcd9365ef14d074e00b8a3c04a7ec02551d1f3e7f7d56a9a771f33e4c01c7bbfac04086cfcf489e2a153232589cbb1caa1527e41d81c9ddd410de058b8d40546c10f97628982f8194a052ed5386c83bebb634b287c9f07ce1e507c6460d99c3e8961f9ea6a22b420f9cfc6097e76ab44e468e0428cbe70b2a4c53505eb507876196898374abc382f78aa5510287ff52e432d851de97e26e569f208d7f223a57de2cd9f835b3522e7f4ca8130d3d5e9e19725cd6eba6903da930f63fc35e82c6fd1db21346b61244014c9a5d8899725ca31ed151e6537a0a8e968977c46a735bd8ab8f99d68e253b3610a909ae5030abaa3a90d3f73875ab1219182a8dfef13427b674b8fc177b80814f25dbfe94421721acf6d67ec47727aec094e9fe7ad6c984c6554f98c68a8b3c3676003dc312e1656b9f5fcaf0547a753503ce7b7a9cf06cfa24c5a05e54b13698652a9cee4f8ab217cd6fad541ef398bd1531b6097409389a614d6a77417d793fddd1e903d708087b552af24836e188f8a6af51559548e8fe8f41791940bf1bdff9aa11bb9139dc811dbff0efa768eed065fa602dd43e8b20990b6c1f24d854546b80946e985cc6611a0ed0d157abc53f105012e244cb8335fe04b79172b2051e48d8c696a29b944de7ac1935cf9081f3f575117ea63ee70b95456c31882b3dd46070feb54ec7d1667ae617c43b758ab725f0bebd2333239dedd65970d231ba2aae22f6cbdff504a3897fdea1c792dd0bebaf4e7f82d398c43b6850a56e159706c203c014df86a2ebb35f91d325046ce47baf395ca9e92a40171b82c421e1eefb502638e51cea94f8858215909cc671fbdc41c805c744c02fbac505054ce25b7055f157ffab9621e8fcef725237da89683936a05c28aced92351ae3d68840d2724607b1c18f09844a91a6c3319052a1584240b53f4be48fa20a4c9e3bdf83f7e7e975046d5155d8895e3b7586003d49ecc4006bdf283432adf8acf3681513ae7a24339c2370585d7bc74b879f8771e6e331cf7d1e87b3cfc338fbf11867be3b1d37d72ca634e9a0e1c1758291870385bb7c68e8f305990c5b5ec229c14923a44954580303c755838b4234a2f8654fc843560171c939b12b635b6c63d14822e39bffc41cd80c72aa53136a6653bdabe32ace64eb49ea312127c3342fa0d42aa580b49bad6743b9e59341e9e17aa865234729139714a6761e4a56e82a55305ba894db70012556d606cdd5d40eb819590b17b70a6630ced2aebd853a88117d540afa841f4b6b2bd521f41508824e3b9889eb2aaad480344b73c2f70817b27d3d04d981d22643e8537467b60808e06316c3c46547da1dccaa74594ec99f14047136863ce4a9aea3c81b090bb7df06c63aaa756b499f3b0995bc959c860e5b617fa0be12a230c8fb0d1cb70c919dc73db6a82165444021ea15488f476c4dc57ea09ac17e6066085e3305888608a46721f14405292e7867309258807050efc6f9869db24bbf2be4bebc837f40f843422f0100d3597beba6af6ecbae4afdf1903959376e9e588dad200796e1e1065abc047201c8a162000556a02e9c2639c8f956509f2c38654204e1fa9358c7eba4f5d9d83cd172c91646ba91bf0fab151fae28be251689e2d247443413e08bd495c26a20d990e8a249a1b8fb2f5ad91e5d8720f2b3cfa9be15f82250b92394b25adf1f9ab866b88f745a0c7c09004d0f55530c56cbcf1ca34dca32857a1584498988ac325961a69eaeabc916d4db75e868410d554fdd4465e7da3cdb07c84448cfcea029e93e0d03f41a64759d0261e0852bcde826292bae94fc74ad14be61ac77bd153167c2d868db68d4073f9d32d6111e861df7d40f77e8e39ca7e19797213e93800ee9cf91f072e763e2d334c4e543509b1969b93f534862e1ade39ca728ec6dc9bab820a8e353c842d8d35248366eb0f5002eefb47498c414a135d08f271ffd25bdcc958e352408717c82ecc21a1574d43560f2905cd38487dff93d43087cdc77557fad33615939f361254647d39a219b6425dc36b0cccc20f80b022dc935884a1b7cc8ec14c6461cef92d07546b9bf82ad4b28c10c07a404c883a5505c79a0ac62702f8446223038eb38256d0bb226bf88fb0bff45c4873d12f955d09d3830071343898d7e6eeddfbe2370b164b29de4e9e3693f74936e401c27ce5a4f7bc73d6c3c33b2d8fc96cf9697c8fca29cb57327acfe1ddcdeb5c41b6035674c836268bf7fb23c9e15132e9bd092d321c7a2ccd0f4811349b2bd59a0eb9a325d28a40f803d8d74098faf2b14dc0764d84b9a103ef843d7147b7ffbe7f0ee14130ca05f6b96f058ae3227f99146d3ff31fd9e59bcb77f3f813b5535b64d5d8c9c6208a4d00228d0a8fcc345443f222648d73a9d964092abbeecc22ae5b183c44401b7d095c683116003b0fdc10b1a26344615062512a36a808489d0181726c1818ac46a28fe2071c5b12f855118cbb7abd36cd8abb3bf8041846c6f76adb122855108d30ac7059dce69d9b2189cef7d14cf585b8822de7a67ec5586bd42b7a19b76be1755f5723fef798c46ce964a3dae980cf204ec617f5d551ec4e9b80b72dc3c514b328731afe7e16e6c26c685197b3ed2c23908e419534acd9b0d0fcd92a52b13866046a345d32ab920aefec1dc2152c14b2fa080a0f14a6e4e818c57de5ff309b4e435910aab0040698155280ffce80985b86dac5b92808f243d71ae24c35af09f519652cbda4cddd751fb0dc69b01c3000e283d4bd57684413d692872d70b1f8b0b6614c91018228dff721aed595f55022b03ab83a5f6dea89c5382988665727e0475033d70f2025f78d5adeb947de544ebac333bb8c837821752a3a81980aab35cd19e39b1852bfbfb4258069bdd2e9aa4c7e2d80ab8294a526fb484b4170cffb503f86725586c851fb2206dcd55b29a6e7349d9f2160254fde61e009add6682a8053cc36520cb034804a563025e4f35fd2a0ea732410cbebc3aeb77e17711f21d67ce431a2ce284da42ac986f9a153f3161e99edce4237488991903fcb382209b70899bc68f28a9f9895047e3165ec90576712046f131a849df215fedbe3721293c722c05d2895e1907e07639655f9f3da23b373e0f1ea583b5d00264c7be8557cd7d17f6a93509c5d558550dbf6994a2da711061f05d327506bbc06f11bde2e03b5a75937febe883eeef0157fcb3fb0d71fac1257622853ec3e70c6cd7be2b23ca53d3d81524e35ca495bf87dd95404089bf58c9f07b585bfcda24e552603982c7a2988882830f52e2772753d24f5fd304f2dc992b4704fecba0da6ca0720bb7821e562c3e99d4edf1fc716e7dd0ad2222d95d6ac9eca52720ad47a06bd59afc54bed37093147cdf2d886cb05ed848eb44fc36c596fdf5a48469527c30e0575e94ca491c6221314b33f0d1e86310b145bc8d05252bb2051eba0a0b3cdcf4ae5d290d3a3e626e6bea0daa0464b59d0e7aa8c914abcc226db44c910ec0301e84af8cb825058e4851cf3cdd03153151b908f99d417b98d43e468cebe3acddc568fcd06369d53bffec91a5412daca1add714c8cd2f6097b5595cc5cb349e8c3a8fd950a79f54e5e620ff6e92f68c6625f29b76c0953ce7d7d826e119622f02ba024506c3a37f4588b856f9b4b386f192d1e83a3b23f74582e645eb00214336ed15cd2ae9e6d0aba70456a5a96245a538bc2c875c749c295bc1f1df6fc974f094a22557c0dea268ea3c4cb4a012363ff33cf13a9f48de35c2f845140800e156c381e5c15abb03c1da5f55224283c1b3725024eff016213bd56af7cdae799ef641ca287c2ae8c2ae86e390fd7e8a07d72f828fb8f4c829611d041f805b2842a9aa4bfc1578b289699de7a333a95b17ea3da2430b2f4ef3f6c52bad7e5014fb66f8be0d97d01f19810aa4d78a5ed60cc95012d79e49d5d8f0059d2d7ca4571521da0966788c260405d1e05892822ba85036f864339a2d3e04a1d3c3e3a26d3d9fdf6e1e2ec18ae4940777e979295b50ff039aa9faf303091a70fd0aab01d4b36a34ce5c9245142b3bdeee1ce91ae810b7cfd4b8035bf858ca2b0c7fa53162ad96714ab87d78f6a5b5f516b773ddce9550569596ae27ae33a613b2add3ab843ee363684e81afd390093593dd2e4e78d53217797c2f4066c773e6ce8fefb195b51078fb423004a552f851b8cefc97891fe03ba052c49c12c9e2887929b51f1403857e96df2bbe28388446108735fb867051a6e1ed379acf92a0826ecdc3689b8e84f2ba7a4f8c17d68ac95131d451ef584c985fb32400f2415fc1db63ddcffec22a72655c15cd862a1b453fbf4dec42cf58c36eb169574794b0eed6f65950213c979ba2371f860134223247b18290e8ba9512c37caadf655084d945a775d71234f88e845e006194580102ca17b5cbd2b0440cdc7bc08cd85aa46151d07df17d403cf7e2a0eda300ecc9294a20dc6352339a909c74c4407926b55bf2e6e68c86d1e4749a0ff1b71858709dc778d201fd74caaa87ee4ca4339d33b3c02dfbdff85a7f139928182683a57f5940cd98a8b8fb4eeb5fc21c216852a6184fcb06b31b74bbb1b98ffae898125139a3f5c730e5eaa3536fb8067c4d7065dcb97467b90f7dfa7344be99111bfa9f061f2469496a28958d01442708213da32d432b53556e0de46ac800956fb6320680683878d3e5a8acedb9a7410d3675098c95085ea47a04b7243b80b914ed1f72045d48f23bd44d96e3f3073c0bf854d15155616a83148d97cbf09dc50a1a380c9bf58f640c5ac66d14aea4cbcc002c17f666740dab05877de4a40a6d0757ecde90b027fe120435d2d03fa33ec878348b1c5edc4b319e6fbea2bad5b6d0a28cef6fd51a51c425dcfb82dd9f2bd0b5a12d9d13bb0a69b0495078fba4c37f4cb03134cd158e0121b7fa124910655cbc76055c5eca876a336d749cfd9deb17faeb718e6f72f39b711a4cbec96ac20b88f9388eb2ba883a56492c4f3f2e4cf69501fac1ad40180ba22764c4dc02e631babab726f1b32d76babb8f50b2f989514d79bc47c0685e198420213d9963534aa859249554179bc745372f2ce4ff173bc921b3e51bfd1a658fb9dbb0e5d9c6e71ce50de4741089fa9943fe1f8e8f4774f67666903b78118cc6d3cb044079501b71261e25302831751492ba2405e6a62b290977d859e0218a5b27b1ddb5414c044e9e82b68e6d0b1700fa70b1c74be56e449235e55641b888d10be49e912ba37da40e1a5c3367b27f054326762c57f70112038b4ca351aa9e5caf9e195e76a4541ec3e223672842647afc4e142f8de567deecfc74dcd9c7c37382c0b1bbd960226687de506448841dff25212ecfae4d5e221a6743ed66936286497405b87d19ef088b072618d17e3a3533bf0163b93fb2abf0ae13eb5e3903101cabebc2e64c2eb1af0891da695c41ee081a431cde2c980f8ebeabfd329916b145be8ba90ca6c998807ca208e02d176fb85b7962c30ee0caeac003115d3d9a78fc98143944194ceebe75db3d7e1f090af9af57d44e215d8223859b990cd9bc684aaa3aba890a37856cb0efb9101d84d90b1d6d88ad7fda2c6bae7376dc0b166442d97b29d21fdc3827ac2e897f742e9688ba42de9ac22e133f49cd5791907a7c4b22da0e4b087547f2df51472e904b768a21648a5059ad334b892ff341412a7d4217c2ba5ee9f28eeacb56940cebe37496cbd18ae3699abeb4621c0b7a1c9ce4db00e45a9fcf39b90780398d21081ada009cfade39edd9c5de7bdcb2232707895c9fa12f8dc819b4f970a67c17f9fad68f291f7bc775997e216d1fb91fbc9fecfe88d45d5747958f3f68dcbb5833ae308ea84d094b6c453c437641464db3a814da35eeb7c9060322076f5772ba9132057219200217b8eff34195ddf255ca6ada15b2bdd243bfaf1cb524c7bd892efe25c4ea463f2ea4a724d884ef17cf05908d114d1e37f1cfedbaf61684109adb1e6632010109d4fcb69879065fdb62c868498909d4230f21991eb4aad736b5b38e840009ffa60b358cc965e09df697023e26397228b756af312cbd209671343b8110b7cc241eec122a8c2bacdb76c6a94b6aaa63f9a154062c0eef858f63238df6f74b73bdd1cbbeaf2cba791460bf8989d43ade88ec78fed482f01b3d3cba1766f64b6489cd663d125079342ef57d464ca0df443c1dfaaf6f00fe2b8bd4defa3d65bd3549e0d0bfe09878a007025de98a759a58eedb24e4e415856bb2e931b698c9706e673d9b09b9490aa63f03223f10d8482a2ef1842e4f526d0a8e73dc6db89f797a3884cb2bf7be1377d5842fbd83a832f426d829dd72996da6d55149de70f0c99f459e39e50fa304e0407c4b29525033bfaea82f5cd8bbd0b4d0277ad5fdbff72de0d7a8c8308084ea0f9ff0f7442571cc20aaec51975ca378117ff5722028eb2fc3ffa78af7ec7ef6a0bcc53fcb4b551f203869079cff0bd4aa229971ab8a3b99ffbbbc8e70a911b4979a2baa659f14c02ca29b5a02947c6ce4997e907409adf409de0c68d1d42c7f1ab937589394c7eb116094f34c6fd21db8b083a621a6d13c7c3889827bb356058a0c1f81666d043d4eb3922794cff9c8c0082bc42cd13bbc01c52bd2ac9c6498aada52e6a1ed175c0ae4883e8d5497a4a25d2dd7d891f0118f8e93d9762532076b66d490261b7d7c071733093e03aa8439b7a45d15763c8e7cdfb55962a8d090fd668c3c03ff7d128fd9a4a30a650514b74b58fc6ce695f23f49f75a5546a74880d1bfbcd9f929a681c2e1bbe0d3786dcba8d554b6419ab4556fc9fff9d7314b7e68a273c251141726f8be9396839376ba90c1524cdef127106ba60cb435071a9fd7ff86bddea763bd86740253ef99f979a67b9e5a0dd14f07fd2f6d7edffc0a7883466254c3b974bb374959826cd261b6226789b5e40048165c3f23970f4e59531cbeab72bc5eaa078f829703d71ad79d668afd16f860fd1b8d4ba6f73ef663d37eba02eaad5f435db8edc6002682e1ca876609e45040ff7678915950afc9f54d677348fb909ce0ee83b6b51618f2a23fbf7d913cff4b9dd0a3fa407d6da4a22b5f88bd3ff9f85e2dfee8a5668ba7278f3ce9218da01b310317fd050c89af9b3abecf0ba602085c3e579a845eb628be3d7625c6aee1667bc5576c5bac7ca70a549dbad0995cd2ab15e993aec9405eeaea6b8ddaaa5969319dc8e9672c08b02ce919be4cd781ee39e789f2893f4605c643a20a02bd08647e10e3d18dd82eb887742984c6e89580536cfdd4fa190538593468e9e6e819b12212bafd612072cfefc9fda57e262fe1ab8c272f5b3e46b948a244f38cf02d0498c92fe46c89509a9e9357f9cc025d6511777dc9f819820d63f6a6d8d1d200290cb84dc5d699fc67c0a9840f385809648a324a3fad85d0b5a0eea6c57c350dbefc530ef437809a6ed8ca424fb36c74c1dc1d5cdc0221e9f391781e909f5786c7a88d975a183aad43f2ac991eb6c604261e3e467ea80c76d179147c0f74a4a0218ac5cc943bf0b78d0b1903365125c700e85409facde7c5f86b94c72d1afecc6cdf649d1cbd297044317123025a8fe73aa1ecaf8ee23c433f85a2cefb0bccd7255cf22bd17e926a2d75528eb441075fc51f06cbeda18e4d2348c61d9f25de93ac5d8db5b4ba347081b7ec394dd3ae03d7e5db2c82f8cd8478cfa0846b23b228e9c3e084a175f1d474f3f533064ddaf9b61cbaa600186e6fc28925891bca72a2e24524069e0e1f9e90428b4187c6719b534a20df3a9c714c87e49de8a35e8901c0b29f6aebdffcfde47aa4540f94b7161b3227271692c4783b31564a49d7fa7508588bc89da278c0347e088fe0521ee5553e4da9b0976916968fb09ba838d189adb0418c2774d437d9436c52cd2cc93cc9bc53c18211407914d2809f46863940b0d3d43b64bfbc8e851e02c35fea7857a6e1a5bdd1ab0d320501740ee2c17e28409cd6866937e2e6b69ee97da319b8ad9e85ad13536af6db4ec907ca81f02015d47ecbf39d763098a5bbefc0ad60f691e3e548f3dadf486daf61b6d581d848732d2e68e873ec0cdc27e96079359f931f0ecf033fc8ec672beffcc0a4a51364cbec5a2b2414f40ef954c623a00f3376893d2bc5849ada116d4fe2a73fa0a20a6ebbdf6f756c1208a66e74d44eb9b61b41fb7299d345072807c614386122cb43bf38f41a661386247a41353cdcd55278d6cde6bc96ad1db50b121229492a9ade38864e9ad359100b159291136435850317882090c64e8f8bddf1be5532f7bbc7beb0da74ca545d679de697e3ca9e52bd45d1d7877802047c4b4d36ce5b97a2986ba77d95900caff55aa618327369187aba1d051adfe0c23613ecc27cc4e56509eaf9b929f63199a27d62806b541dcfc2a6859c0c993159b0453e60c55a00cd48ec19482d835bf8b60b573459b1e3bb60d38b0d46bf8720e63b7dcb6f934b2ad7566ebe7f17526a640d70c3afa411025fe028d19835bfe30972ffa6c71990b7cb1937fbbd4f25529385cbdfdf9a7c9d2b3fa5da30bedff6d76e5d3f9bbaa1b77cccaa54a506d3156bd3825750ebe9ad06414ddf77a593fa25598d5104762873036287b83d7333b4ac4611bb048c4de56b34737a48e250e4e7062f9f0029b8ec715f0654b9859897e8cd48cf76247ba12886f3604751356e1e9be40b05f6e2beb92598d66f07bf7cb122443d217f954542ee1eae85d7391c54a7e9fd06710620cc00749c319049bc25d4ec5a30c8b4e4f8e6fd26d27c78dcb6903a56291991f4b1137c8c87f6c9009849e34360f5fb6d603e3e8b142a775b3f4a3b5e99f01c53d70ebe0ed9706fe9273ecbfe25d146ac2bbc49ee6ed47d75da0f1980c4b96fc64f6d2d5d2f553d841df16a14f7f3e6e4622cbf9420cb058bf38ee0ec371e99ed3b060ddda4fafe455e0b851bd6f510d4e61811c47f8be8083d61c2ad75bd8b46c88f83014d8130f4df5d04e38b4e8bd72a3abcc3f51c8126b3df9744968827007a47e559a555bc6063097ecb9a726a931b20d5474dcb23376b3a66ff995f5a5000b37c74a1836d42a934f823e525615f35e4305ccd8ddc8d4e0a9b18a8c9018cdb454e9a07cb28d6a990bcf5bb6a7ae2492ccd056c24c10421b4beb5cc44b4e8aa0386fc46cb7746c2e9fad75c17ae4181a9ac30f743f6665647b3bd55f957565c6d76cf9b910befb6207685a9e3f535b02f0a8519d9a22d9d6d0400567c149e82d271c357599f48062b2c775ccadc20b73a913a007d2256deb3a3ef46470a3304f1289dc3172990ff3c98e53e1114627ad1903c7ab6723ca49a1325173a1aab28de53479ef3c018b78a98e0a5fca13aa118a2f7a973013ad01cc1046a5b2c19b1a94d1612256a0255893b9ae9a08c72f015bab03925cb2d8323785d326ff1444cb4329833110872102ea0441cc0fcbdd26d03799d49620a4d43a1213980d9ff5c44e8475d84b6e74dbda40e5d78523122698e40511a6f6a4405d31ffdff32849cc9200ba209a43ae7d4841e0dc746394dfdbac474cfb732f574ae94ca59e025f650c94c3315afde79c89db54e12255add2596a7bbddd99161922e1f5bc822767a81b5f12f5f67dbca54aa158225274ab708f04cf0c5782d1aaa7f85a1f462af2b01cc2ea455681ecf11b757e6bd81d086438321094eecf7fc563cac8e319911a28423b61a83ed51eb63fd6eb58d937a3fa05c0db0fe3cd3b2f1b8b531201fd7f3311f9884d46e344765ebe458190e0abf54f401e9bd3b57c138607c6b28af04e3c0ffdd00310149bf7f5758f251430c11e3b055ae466d64c994d74ca10798bf2eff21642a6befd32cd0682768fe8d0d9e11d7111449ab68d0acd55249cab66b158c3fd0f756c115c178e8970ae2bbe28b5b56e851c5db23cc8dc07742312809cf4dbcdc99322ce89dea597bf77aef7320f138bd81453783a766aae95c07340fb9a8f1a6c0d82005d372374e4c5c09a6259d467d2333aed42b56a4264a1777bdb5f97aac6ba244f4e802d959805abcc9d9ed6f5e091ed2ecaf5ef3d756315a21d1ed12a9b8d7cabab3bd57dc7c6326d02d703786641fcc82b8d63d57003d10da7fe15ac42fa854946d37e6fe5df920cb5067439987992a334452b47cedc750b58b063fa97480e3ffd50af042f6af7bdfb6b810b98fccfd670bc3824271aa89216b0d40be15e8dbdfbc026558a4ee3b15303199dafc2046c84f1d11d752a72941942314f6d3989a9d3f2d76ac3063f25b132cdb9dcfe6e06ab0ce20377cf6bec0102168e66d6b73a804e307a29f47a59664ac772770ac31edfb7005a59a465a8e5aab552df52fe4d52696885689439dd985d5aa6e7926d73dcea15d1548acd72dfaf83d6bc2daa5c3c23f26126fdd3bbe88ab6afe9a95960631f1223e796445fa979a6f5fd1a01f0da9642083341d3f92032d1d8f42dc3ca036bcf60c21cec85397ed94e9b7ae02fb07eca01eae0d8598138166ae189629382195f488b82b0a4c34d5cf912957c559cedb9836e367ea8e1a49982c6097f20115c9524a7b0a065aec8fb205676a1f3cf0ffb54b5b00d48cf765b5b38b71dfc52bf67a3fd0cb9d6fba68e20edb83d5b66a59432d8492aad2ba3bb8f02b562b7ef7161888b0e98d6b72615bef17fc26a25a6d01abf143e810731c50a0872158b5d1f7c35652e7fc41e110329be000a1f9b037ddfadfafdaf6c48c67179ce3a10147cd525ac5967eda4da73e0691f06ba1c384f9067876549174139fe5aa0d1323c77056c268920789a3b625e39ca9f8b8421ad5553f343a87928bf621e30389d1881101ed00a383ab89927899adc20cdedcd5f25da2a843452d98f31b16aeceb1021943c1ae0b28a164ddcb258358077c971d5eb8de037b4e41739f1a982e63a6162f7aca2b8ae7f476499e80c07924cc4a242e27290368c707f1b97ceaa5c8cccd136a09f96d803b7cf05e10a50ed0e6104020ab27a4d511d784569ac0e1aa28916eacc0e841dbff1014fef2e95ac4e013362ba2b5861cc8b113c8f9497442449b35848ee46bdbecdcf256c8ef5a7445d3800a77fcc879fbe6043aa442a5f15286f9b790bd2cb9031d4dd2875abc7b075751b883c25842a6c1a4b47820e888a768e1105c068c922ce7717d2e5202f14e33f88c49cc41cbcbc3d702563cedec74e9bba6cd0f451c45206876f555112a6590099ef917eb9dab4aaa14c4433793d8c9f9432ba85f86881685aee5b24b31c34197436ca721dc3e94f7c3bd223d6ee52cc2b3967066d502fc019efb41e3ea62570dbd18800d26391130decf65950cc3a199c08f827b48f171d3324816b7bccba84090f11ee408e8089682f2cb31186077c9e820e37f202304248ecf296a73d22717e294761642a3af77f0b5d40dfd0f1de80b1c8b624686002426a8be182cb02dd9fdcbad140b3227ba3693641f869c9c823a0ef05e674c02f7776437950c15880cd9240e3ea32bcb1c8ddbf9272f37e52578f2f6635ce250d2549080f867354037c4777bb34bb6a3d5aeaeaa3e97e6fa306e91ec2c151f20ae77855a06ec1542faedbc16d6fb9410fde2ef0dabdc8165c5a8d65108003a6ab7d0bd0958bdbfd07d3fcbc66ca5aaa6a3de5edb5af749aac5821e9e9e6d64ac7d5c3428d9c38cb9cef6b6b83561c47a81ecf8639af0f8918339e8979582af92edc150c9e4bf52eff828e601c1bbaf04f8f7c6734e3ea034069f5b10b06634fe5296e11767c537d07a6fb01f1edd22f015d59e978d5bbe0d9acd841f10b13fa8c4bdd6329d2f82c24589503fe63249b62a71f0fb39ecb1dbff9306fde07ea97930340851cc3ae7c717e617933c65f0c7e52a414641a01fdd7c326fc08f9ff75a10585c45ad64fab939e0c63688f841e4b8b865a8ffe5f9debd3ffdc0d627b442e9deca39095bf60ba07e71fd585849371c07becb25851aaefc59b2e1adfc5f21a88303d8397ce121522f3428f17538b160c8e078d29a56de9622aca3e08e2cd8e562093bd354843238870043fdba350746790d03e6fede1329ae0b68e61821cf7d7142b104996ae09e31b212d99745c503ee31a5fdf6cba36d4e96a280fbf6203f950b354a33e91989c855e906d0252b123bd267f22dba7be308225b9045e35c08f3c9f254ad505b473623afc981960d391de07c2cfaac97050d16e23f08c961b951657c00c7b93bfb2f09dcaed7cab57751836b9a636dd995560fa310d22f1d84b9cca2a29bd24316ba17f37aa537dbdd4deb4f97a5fb0e0c059f9d8b1d6c049626b1ff9131487a57e63db6563603d073ebaefa3f2671d0947e570ebdd58160e8d98487ef2109455cf24bbed4d6de2565bdf5690485c274f34791fb3701bbd6e851b8eee6b0fb123833081d8bef5fe0e0af8c008fc96921a8baa1ad2777948711c2d8747a8574a1e1a9870719f45427111df02d01d56f996a941cc8bcab28c5372786569021dcb2e61655f64eb75bc00870530ea1ab1f7e92ea1a3130e6a8ae11784a13b8fa90d6811f4cb558166265c2118b980e5a63556ba001f479c4db431de2cb279405715c0431e121302ce23836f0be5721611a8af5e8976482d46c8bf4eabaa93871d99be1848adc76642f680097cd8b0a61d292bb76349fa360e92536e63c8560f9180837edbb6d8eaa6bba5436121ca62d6c02084c74f59fec15447a70fea867db9bb70e8d9c1904d4906759c6221307aa222ccab510c221c5ddcde4517e40a10ec183bd5ba81b63562bfa0d9dbdb4826f5c3b99f6dbd6fc17f5d818551b01f51425be613536ba64d2a222246c64da524ed427bb605260d22abca8408efa2cbb9eedd706ea9f9a9e5b1356a140bcf2d7b6ee38dca5a4021b0811f4a9cdd245d097b7ac811e4fdf043f1a1008b6443b195d73ca5787425489e35c96be9482c6827eb68a156fe14a8f0971395826f0485c14127ecca1864454f430388ee399d3d4b1e1bdb573f7842c336d1484ca18aaef2caa7da594d597c67736c71833d9b28e83ee0b8e616a77cac0714edd5c2f7d35a285d8657d5455204a8533ae4bc5ac1b9334aadb6307b46e4f0e92e9be0b47c1030a8dcafc65bf50581b3e7224eef16bf62b0c36806bb709a921121d1f231e48b56e43fdec03ab040530439dc93a692ca85cd69e320dbe0014e19d4ed2df17da9917ec9b265b824c9932ea6fed5bd7513154a6ac2919ba15e55b52880e4f5dce204cff21d3dda27ea13382608bb0d50fb286070668e61227549095865d837a842bf17cf2c46e718ff258296bd3bb2978ddf0c4d5e307c44310f34edf2720b1811e470e08a35671d00cc63f4d041909858168cc78d4068b417fabdba83f09508c22994c2220db677da838ca08e32852e136133176efd5fb1d4dbfa40d72479c7603f82c6ef93e72eb08192b32753c075994c3f0297da2373fd0571d60f29ce2f679b20396e69a80d850e31041372de39bd3dd36f28c30c73a7aade81c08bf866f088ac0c8d60970e9a2d414f2c07060a4010f802081d58cf8205508b70a736094251db67b096f96bdcfd2c3880e9c75558a808276a0418b1509842ee4032bdc0d09bbd87b01c3dd9d84b259c1e313dfade1f0c4772b707ce2bb351c9ef86e05e490590d8bee0fe021bfdab6a432f528ce8ab336803c07a37e73d580e8f68172e8ac8609b61890d8869ca8b03ee0e317db56d59351c0e292b8c421c46cf280090aebe33a194b391310570eaa4e3c564c14385e6d5188ab090dbea4d8e8c45b6f008f4cccc6a639b0b3feb6f0aa32dfcd0123f3c06a3f2866c3730ed838061e8b48317b6d9c1dcf41759f0302790328daa998cb474107d9b862a6443bc743078dca7842d3472de7a544683ac7d0d2c1605c8d751dc3ff0ba6e37b9b6c39206aaa03d5817a0c0fb876f99c8aceb059c9206fd8b3678cbe896cd55c9c7297ac8a6da6a39e7d33eff5cc37835f0f9f997c3dfecceceb79c7cc9c1efc66f8f5e499f1af67af99777ae6cde0d7c367265f8fff35b39f615d5a3d25cb1f7e94fb00306a74e4b9a83c81a8e0672777496e6a1940e29a5483965ae320097f8cbb254ed5de798e0fd50d8dfb516955564b870a0e208c54f281f8a3b207c87b2a7358c0a33207041f15be40f2a9f803b247e53d90392af800e1a79207c41f957d207f5177ff6583bf209fc09b8aa2b87dffda4e7a9600013272c7e0f8ea20cf09412c18a10863b1c916a123f0e2954d222f52ca8640447a958d17b31bb0be60da90fbc28b0dcb2fde6e187d816303ef8b141b7cbed8ddf0f4c5c46ec058d74b2d619b56f1ae34d1f37bd20b59a4b0a333930acb1bbc57f62a81d7a9b9b708a358ebe6a234883669dc47411bdc28e50ab0da6f2848b0e7aa60d3fe0205fcf6710afad9e72b786f2f4f017efb3d0579f6fc15ecdb7f2b18c88d29dd32bc1b51207c643a85748a0f7b4c1e71fb8b60d665afcfeb4b813ace57aa939e19f6ddd3faa4d8af7ca5a8fcef725ea2f3caaf476f95c747172fcf1e7db97c3d3aaabc50745af92dd14be531d1f5e6b272ae86be324c8e39ab7d2363baa3bac78d2323159b0d9bd2cf5cc13ba4409ac7741a14b1703aa5bd968279379a8149d0bcbd8215a126b67eae039dc14b2a8db770d41cdeaba84bbcb1a84579939b7ccb2b8afac14b075585f706d4b39e14aff0513c93af7884052447af7a53a245774b881c5551c01475a3c877ce9361d65d744f9606a1485570cdfa4f25ec4e3095340315b9f27eb193e54ab1815f959403d52b6f072e578609ac97910fecd9a9eb45b3d6474aa954e4548c25a24068b22d5b39004b543e738f1372cf8185c3391e204a6b5c0b5c57e036b902c395e7ca83bbcfb50717cfd52966ffaae1891d00322649a0e1baca503320572a57a8660f01c28f7566717bf8bf140fb5aebcf225a737124b3f375496346e2e5c5abd194fb870bd819d18560846f0af258715acc80d44a37a5580403d7e0a864fc4af437f9ad38009ea92b11c20c12a1161525022a5c90d4a2cde859f541c56b67f81538d25f22d2f4437010495b9c42f70595d28e5a181ff2b8416610a175805446bdb1ab0e8da601d831b0e85eeed145396ad07452cf23500b141d8463273d8d543cd2d73e54a086f0d7dd57071d5d931cc00a42be4472fd22bb038d8919d9d5903e2c647434aefc113cc924922585ac9ca01bacd4de51fd9be70da567082d61bacd9eb4f396209fc2cab67e63441e0588d87c0ae9e7a1293226058898298544e99ac004f23e0d448a30c7d8d0079cf5ce629022c1cd3e242b59aa983e69f3eb8a98aee1f62e2cc38433dffe0f3e61b8703f93a94050e1b37733181c1aa0271d360b87e5c8dc96bb2232f53300f575a367958d703ab9c198f5464e28c7bd6e13dbeacb03dbbfebe8402312ca088d1790a777da6955c38efbb74f8fb90b0797933f459c9a10f17ce9bf2a243de8905851529380ffce54b11920aa3370cb5d9aa96dcbf57c3408686030f32cfdf29870be58fbcfca32da7e21e4cbec105734d463e94bfb6278c1cebbe5ab53cc01701b043268a87d4864019039a4a7f157c6929d2cbeb8005a6053642d83efb07b561c8d9cb0ca16206bf238f1fc88855bb7a088891f6ae4c0bad628a18f7662354b57b878f7b2a132a23970b46c246ed04063465c41df212c5c8529078c74ed95a2164e8fecdc664a33153a72f7d9488f185d2ebc17c2d7bc0eef7b06f834e3bee59239120a0317caa2e48027864152be342ce3ce8ed40b7c6c25d405021a802a32c6aeb1d1aa15cfa27bccecf377dfac941a487c97457fad604689d52873095b5d8fe302f191dc7b740cc5ae32696271c9d62864eb50f5c19538a5c229a31981b871112965a67f4a7955ce1dece997e6e78d0332c68b5fc849960c6d7ac295daa04b2ee04b4f1f9237fdc32fe90d197adbcb88c442097a8ca6c5e1730d575a540fcee8d80eaff27d92f963ee7f171cec538b4719ac52163e6356a463b837bec48a5d1340d3697f350e4a88a5c44e1eebd2610f0f5512ab0164baef89d83e2dd09254cc9a27f9057a14be00764dacbe2747d72065674f6cbaf4a93d3860f8346374e5b4cf1612d9d916cf35696879aa1dd5894d9205f171f62a1eaa529bff69379b5328d463ab3646facfd93007fb188a30ede0a145bd4ee25f4ab80105a6714227b210b76dc652f1e1157d7f0b8aa6abddaa674dd47ac2e4527cc389b1e681a807339f324bcb58b053bc88e24c47889a09f81d22abb7e56c678bcbd70899b1e42abc8552e9c0df18c2a7e57a47d9b7467e7f2ca562ab3b5bac3411da95925ba2f580226cd0933dcb14c730939679527ea9c59813c01d596d67aa555406d27ccc9925cc634be95968eb63695c4a633a1a70608c72c5c95a6731ac28ed6eba8a8d437bd474230ce009d2fc2af868a53ae5372be2c6eb68501a9aa1037604d777a9aa0114e1db6b10c7c30e3c6105c32b391e43e4d4b0a29f2a52472148281ccc84e3d1e0efb71d7d4b57db3f8418d7c5370b02463790c5c3598770686effda23634f798b08f1ed0cd1ea19449eb33683c15215255eb66bd6e93e972242295443dcdb2bcc79db0c66baa89ea0dcc4fa3ce34f463d80d00b2d1a1429a4d3a293b375fe9e0eb0718608522dd1a6e590351a1d99dbd73f4b38494237dc703d8a1f8eb017bc67a3b06192d7000838e7f63993914f15c6a10a32ec727f655ad9af056226fbc5b9ceecb66f6ce14bd5857bd78f04d5ef212fe5b93857859c131200474ff40f6ee01c4605252d92350161f19da1bd5e0fd270bcb43e9c89e820bfe1d3b2a07d6d43d2cfef45005d08b475126d3034ccc67f9e594827c1cae30c98569aae4a7692af7552cf628352de12594ecec885e1265b839ec4b3522f94d80d2789c11093226f83677ddbe71b362d2781a22fc93fea50658344dbd439a4782ae72e87a22f81ccd3f80d4682e0cafad1f2b6bdc5f0b1e13317768e7e4aa757af2214fc1a0683299687c699841c62f9ba7f6f5adbb8855ea57077aa6729e53dc3f30585d43647b04c5e04388517e4780ee4489d2098484b8b38251bf0c44431689aff7b53a0a70cac644e6032a477fa95d40121671c6f2be5d9676858c59aaa38ecdb97e85118e39355e54a42c360ef90d3ea30734f59df73a69806405066ce6aab129ea3776e90eb80bf7a799bdb5ebb3a5527929790d4454b965759592cbb5463202f8efa5262219d7da9652ca450a5d0abc0a59885b34f3546279d2344deb5ae5f7442bf3071b7b44334d3413cde8aa6b591dcf00dc065eacf668d881c5d11d5e517e8758d8700bfbd50e919c79735c99b7289a1915a36bc6a10fa013e9ba32387fb06cc71e6b96f6a6add65ab3aca57d59cb7ad65a4d7bda32a700d6d813b6a9305b4334873d7f411e3b9c53a64c59813cafdec43e6c3695b7afd954e601505dde7c993d2ac483b469fe7c8e5bb1798ba90e611c0ad69839873d6126f4091ab83405cf2c9a2541ac8fc988e8fdc13e184ddd3287348509a107bddd945a5ca9556a955ae3153d56a58d4ece7b07d8be43959dbe5f74d69649bd77c2f545831eb487004bd221bdae4cdc7eba9d42b4df157475b2fae3b9608d99add0f7275c5d15d32766e005a844df7fb19d0f8abeb7600c567b5be81d16d1b39ac39645825872955a16457ab95c2e97c763fc811e7ba809765339703e88476017281539825872955aa5961556668b49a133f50a2cc6700b7d1fbaacaa1ea9e20a8b6a854a5819d2eba6925899ee7465b68f5044279e8c4dc4255ca824446204b19a65a862216ef9f453c661cbb627f61ac10e6b4557a76fdb5304717fb00f56fedafce548afb23c6ffeacf7fc1e45d3ccbbcb21abcca2d939eeac8f11cdae4c5d55d312410c5916351b8218850cc58fc39f3e317d82064974992b3843c539e52d766548972be68ab96218e774d245ba4817e9ba26e935ea2d899539e551e7a6340e648e3a57264453f5671e75ca8cc77ad9eab34210b768466d10444f0002b04aa688614362bbd990a0aa1ff47da9b57df0b70fecb373fac03eb0cf87e7d373faf07c784ca68fec333b7d641f19e945ca4819e9b51d64fae935987eca3830e9819f3a0e26f393b3a9fef4eda7d740e3a98c83c9cc38279cae52c75908289b6a7e8fcf411f4f25d613302885412ef182b0c9669cd4e92a5750cb844d960636d9d315288541af8c4139a0577de198aac80a0de4040403edd86bdf2027a49745ddfe9adff65a16cd4256bdf5612f92f2c12c2a6fed66f99bf761de8e2cf35b34f361862cab32f316b5495bca18dde6eb3d5324c5aa66547b33ac09166088de5a26e558d43d29236527651c276e3195685f8120bdaccaaa42566873aedacb7002a70b9810b2d0bb2556f332d21ba575905a50d4fd3e9132ab05e94551f7f7f3d171a2a3a3ef2d10441c4cc7e1b499320e9f837662dbce8ebeb75788bbd4da6eac6a77add33f17b2fdf313fe5c08e8a7edf84240a6ed58ebd1a298b41eadc706944df6a09fbe6593cd261a4e07bd86cf4d3781261a4edfdee3f42df5ed424cda6c3b0ea00cc2eff1b990543669599b7d5838a69cf32dbe7af6b9f9b8f0c7f571d94fce07f4c9f9e4e87bfb035108e6efb798a681ccef0d09fa6e3ca8a535b5b30e4008931ea07f2e4448145994281c3733b5b3b4b576ad12d319207962e2175d6b4c346c3fbdc7f65316c2a487e99f0b3199a72b53ed01ba10533699596359d4279beae9ca072ceda5dddce87bdb0351bb1947221e691da8b3d44eff4255e6e9bd1df67b22de3e645d99ed26f327d10cf44f369999c78df1ac6e8f58f3b7f3c12e0fc4aef5bda0c41f0cbe25be27166533d59b6836832858a0cd5c330ec60f0a10de4e384202f8ec0ec4fdc1fec13ed807fb601fec5694d6df89ae2cb63124b834d5557bfad35a257aa11f28aad4b2a51f482d4a2dab2265945a5bc5475318132dedd12e741727743d40d62a3f71a84b4c99d80982ae351e1562a729cc072c1d7aa7c5bff00258f39194e074456ceade05b046bc27e2ae0582b973599528efaa3bd7f74a6748ff6ee9cce8df2f9d09ff7da28bf744b87389b86b892e7a0e5bc238a76ff87b6253f7a493b83a3d3cfd83dd0f77452cea73e64a51dfef4f5824c5a6b8716b01b17c56b429f70beb450c5587af21e95573ee70077ddf8277a84398c373d8ae885545e0d3dfaf88026bc4cc82f889dff9659cd3cf13f8ef5f8ec0a7c1fcb90072dca7bff3f72a58a3a82fefee1f1783a67fe0a0cfbb00eed0f4997d743fefe1cfeb509dd7757f01dcd16595174051dcdc3b1fdccfdf877026bd2c8a3b0f03b883cb278bba3f3349c9487ae97bd28ba464e3d1778302d6d8bcc5742096371f809a01ecf896f8601465df69ca44132f4da9cce9f6294e537087a911c0b4820032689b03718b66a299dda8199a165c780186aec41ac63965137fde0e3bc39d3ed399f3f430e84ce8f46559be2c2bf8b241b1a8fb10dea4d8a2e0f0068537038903a417ce49468ccfb51d9719af3060e4b09dcb25c6edbb965559abfaef3d18ab499945915be81be610ea10da843c843d84add0879048582434120211bac22395d3a857140e591685737a0efbab392c439f158bb4055f320da6fabac2a1ae407f01f15c50cca25e70207e30e94262654c5924c5922e3a83738413422487a03338ad5106f6a088e43f1879aaeb63c84ace20c90cbaa2a7e7ca7c5e7f532f0f595645fedeab15ac790565d8747dc91bc665f8803103c665bcc038d52f4f01ac79c92c88305e60a060c0c8202ca244f95f7c3c06f6a088ff4bfe6016750fe3a71ac66d803530320be261fca7e08e67d016df138b92492182649f4d015d7f4b124667a89629aafc60f6c3b9276556d39b2440ed6142a108e2077abf604a633da065e87ee85a1475ef85acb22ccbb0c80d91785044f3e751006bce12d7973d015dbe823a36a87388a2eccb5770874897f7ea779aa6697e87369aa6fd86b1050448905197ff71bf60e9209c2e0fe4c72685c5d23770bafc0da32ebfc322250e5114ad5407a84b4a61c89af2945a54e9c940bd017c1b6672c23d7c452d0b5a8d217f6fb1b1a76b75adb1e703a330df0b68ea9e1c47a19147dc1f4c6f313af3df6f50509afafb4d0aaa2a7fbf51413724d0164cbfdf78b00941df57dc551bf519d39bc29b14fa7e9f3449555b8ca2ee395cd227a64b2041046dc6d0960a718b66a6be0f95e87bbf431dd077e844df87b0980e776e6e4a0722fade624ee70851b7f0087b03f1f70af0552ce282c2dc9b58d40585b9d7b0a80914e6fec422291675714eaf986a0b2280aeb66a41b30a9a6d375786e43851bcf748d89511714153f739e8fb4deef8a0efc32324b92392b029c43df6b0aa053585e288277a8fac96184ddddf9baf4f88224da1b82142ef9698be1fcdbcb99ab7386a9b45330a63a188560a912e5144159a00208fed9e0c9f4a344f000280f505f82aa82b96a14d4cf58929144124417338d49e4a1449c1d9f2d68a420c59a29945dd7b0b85f8aed511e97ee88a7440d09995df7741d019954a53fa7d27049d21fdbe1b82ce8c7edf21e98aa033e1ef3b23e88ce8f7dd4da5017fdf1dd1214167bcdf77492a4df7fb2e037426f4fb4e037486fb7df7f266f86c0ca7699aa66982e6cd7b337cd433c067372836752dde621675bfc56c4c34fddf5fd7d2f7e5ef3fd895b1e9e1abcfefbf1dfb42ebabcfef3b977d01f4fbae75654ebf0f5f56659e5694f69dc30ce87bd18cced8df8bb8a033e7ef455d88a4d099f1f7222fe84ccbef455f541a96af7c732adfa10f14bf45e1b728fa1e91545668ba6f9691a455668b669fe31085a914c6dec4a89309bb586d4fdab77c40f625110654e9469bda2eda7e32fd80362ed4791f280ac55aeb0c54ca9e5ea40adc21a00ad8215a05ec905205ee10db712ec8f1742a4acac821c4f29b948d55885a994da153cdfd3e842b87eb1516557be8cd4c349183c669fa84098ee8dd12d3cc0bfb649305f1f81c0174f5a9e19f8c03935d830983d74a07176c60ab0adc1e62abcf71582aab4fb6ad5c63abfb3aab51aa70c106b63a7dfbb62d7db79bf1a6c9711f0e6ade1f14d6da52db64be2b040e6e459f305d793366688b59d4fdb7ebcbfc5a5fcb6d35f80d82b68240aabec19635df60b5bd562f92525fdeab1857ed5a55597fb0a6cc2c88157f304c020b3044d7dcb9ecf96afe34cdcf40dc5dababab91cce73c1821e2732a9aca9bcaeba8c4aa139b2da129f84307f5bef1d4bc4d60c83d22dad2ba44ef5c36592756098bb24e3e4d65d002276e598e325bc172abdf396c750e4bc1fa1285690d81a7e67900f86e1036476f6ee6bb407034df35a2e9da42b52425240e909270418b1f75ca0b3098d56a66c521ad61ab714ef7eea799d5c9c77b7eeaa6e3ef2da6c374ac556dd62df6dfd4c0badd7c38d0f7cbfb832294f72783174eddef715a5f6d37f30e6f4c3c4cf8d6e600578cb3dda3b3944cd77b307c39cc87ac17ea42d4841a342147d31a34e14646d31a74b1830f56440c6d3fe9b83a844b6d718d8136718bbe3f8859e84bca482f4f2572b4d41aa635e8a205dac4215d63e2b19dea1edbcdcdcd8db5f7d4401db624bdbad62f1129a22684684aad6ae3bebc88a4880db5a596766badd61f5d55f3f426ee7ea0303e501bf75e0563f0a103fd8a638f0cb4538ca802baf0c2493b73e8175a06400035d55614ea468dbd158552a1c679c2c0c030394f1c77fe40a4f381c25c16bc8f36005bbbdb123dce8a66b614b26c422321106110a12b3c120e11220989088b088d086f44335117222e4221ac05555b69d040ad80a2da6b8979f73b492f1de576aac4b3b400cee9e551a72729db6256e5a9386b59e24983460d93051b30356ad4802165a4ec849980b5765fc823003904e9a2a87b0beae02c16b1442ac4fdc1e84ccbf7e7c41462d7b57a10f7286794336a625530df8902eb71c2a3131beddc3b72028a7e690dbce8c0894dade1ab619ec36e3757a6d4faf576b3dd742dd473d8d6288b62dee218e63d96babc517a9762f42eb550788273baa691328e13c571fc51a48c947d301becacce9a74b6898e61c62bb6c1ce743dfdf2206ed10c858ba45899d3ef8cdf7b1aeade6589b689beda48478f94c054935e57c6c2ac1230d82a615156168b6279765e1cacda88dbeee84dca9470b9b1c1ce34f7191f75ac8b1063139722c824d099f2f76416e4167446fb3da9047209a414971c5c7470b171e1c1a507170bb8f8e0f2834b1117232e40b804a1ef0ba6ef77f47d4c5f1e273db051941d3bd3b1267a8b5a8a175f4c118536fa6693e56660937d3d52c515a2190a533d5242dfc360abeddd41ec32b9834226615707d1f34e6c75d5a38e1d75b491a56927a65ac3a30f28cc7d098f3fa030f7243c5e516ddc8ff018843a12a1a2ee433c1e81c2dc8bf0888451566ddc7f78cc82c2dcc7c0a31614e6fe058f5b50987b1878540285b927f1b8040a737f3c3281dab877c12317630b1e59f02885c2dcafe0d10b0a73af82c72faa8d7baf2c4bb0c66af654cd28cff32c47d6c8aada29733abdf78131709ae3b873a11087bb561744070485314261ee2dee8a5098cea5ef6f0ee216cd5038ea33cedd3bd53abab436643f189da9ba25563f1fb4400982beff9e7c4c7c4ddccf892ff641f145f14189f1fd4da1ef77037dbf3f2af4fd7868fefde1c0e5fbcb81beff74a0eff7b703fdf140e5be25566948af6ae3fe5a1bfa605065c69efbbd80ced8cfaad0f7a3ec8b628cf2cd60d482cec4f8fdb8059d7951029d81b1043a433281d29c0b3ae3d2059d199b40675aa4d019162fe8ccca179546c5de344dd334ad4a2c7f5962596bad1c68aba6596b5f6b8eae95c27ae0d2f62888ba82353fea140d639a372f03ce50b596bd1357edc1e0aac79e4a23e3f7a30fc61fd099f18a4a3306a1aa462254d578841109a36ccc82ce7c3098eaee39ec695f95866adf968250c09f8e9b815178b4a913d7cb08691f500c182dda9e3c3e95a77de1b35334183efb458ecf7a51719c9c597a25ae5e005e94764a9e284113adc34c625136099222362e17f972d99cb090cf4fdfb010263d3e3f5d08e8db4179cb70434b805e61838aae8fc0e782f26dddd5fdbd695511854857f48ad5f6d33d056d34bd42ef0ff684c25cd3376cb23f7dc3ff7c834aae13fced7cb09b32d1f0395d9d6a30d5501ae900120d4c599d5ec3f64f16c2a447ade1844303b2a8a2083dacd5299b6aa6a1ae4e7405ca37f376537390aaeded0787acb065a5d8266cd18c0b152439024e122cc842b62a3d46ff164b2046ff9e4af406e011c09e4c4aa8a00909c0251fd057894dddef300952e6c2dab95cec83dd54175b3443005d650be3025402fb76aeccd6d52944edd56ab97375ad99b601bdaa2f4b1720d62354cc34e9a68ffa6f036bbe87f0778fae447b51146d1fba2743d5f5774b40df70b58fd01eddbc0567105db4396459940f09c4f8305fdebcbd6762ed1657eee54dcc63070f6d4b1eba7c89429957bb9ac943f79080b697802e5fde5edbe7c76b370d50b9ec4111cd6c43e91e4d0089013c5abbb7a3ab135d2fba07f228b8a3bc798ffb2caeb7d974deee18d3f91da3cd9b55cba6339b377f4d7c1efc072c4077ee1f700055772ff136afe5fad2357047772dfbe8ce651fdeb59fd8861833db10a3bbac7907b55b708797e928df70b5e866d642f3159c217451c6bb02ba8232ecf2d601fafc079c61865d5ebbcd1f7006abf70d5787f216724119b4ace9336ff3375c5d2dca7c65d97a1d9401a17f39b41ee169e92e01240688f508cf8d0efd048107e874f7137f2ff11ea2cb7b78f3d0de4160cdd7c2b272dea3e03e0f026328b9d3bb86ab0e3971a4a29d845d99db22ae849a88d3bef3fc3ee08e2f54621fa19fbfdd73d8f31414bf4391bd2908e8f2234b4b802e17a0cb07e852cc3bcc17e58fe8204c53a28cbf2f3ac6f482342d6f1ebacc9b3bf810e7ed1db421469f39c8f9d02d280369c7f9d0bdf2ddb513ef21faec516ab8c7e9d5efc43bf4090cd9d5749e7bf913fe7cc3a06b166f1e0af8fcf413d3f0c9a7975801a04cbd500efb6dee2eeff0ae800e7ddea3c79673e80d9ecb36c4e8d06ddee06bcebc8754fd8530e92e780f7169f023de3c34688aa45819ba2ac978c6395dc62948d524d01cc24373f74adf228a84595c6ab7b8cc16070713edbe3e1f7afd9629cfebbeba7be8145d19f166953097721ee53d2ae0944359019f4c6fea047fbdc3ea2efb304faaf16e66d3cc7b88261d3c07d67859862a838a26e5edc6a24452b658add87e8bd5ba41a939648966a2198faa6bb9384e146d5eb27d39dae28fa6e001ba2416756fba3bfa3a71776a8c87fbb6d0166bbabebbb1aada25d1f774aba44c260be9980189d06537281bcf16ab2dbd3f58d5a0cf06caa4d7276ff9836255a6cb92c1f4a63298be364c10af2f8b664145adb11d41aafe7a4a454aae25887b8b6d5658d5be01a4a1d8174e271eab32b3a9beda24889b84e9db02236324cf064509e22eb56024cc33b17da9659aa52256b56ff868336f3c5b887b8b9de7f9dff2eca9de14a20d31da87dd31bae65ddee3d141b5c81dc09efb3550479d629e823ab4536d1a00d55af6a8106d88a97a88ce612df7f158940559d30630180cc69dde1b9e5e7144c5e0b01e947ad3b62e1e14915e219ad97b822556b57fd4202e3a545226e1907445483fce1be68df37910175d86d7360ee8415c3497b7f812c7d4a97ca492370eae796fba1e27d71c84458327bd2b2db1a852118b2a21b1a524b6a4c4a268ce1d576af5b749ace34aadaa7c7b4267eacdcd0dc8e9702c3a654a0f94d03e48a753a6782145fb287d703e3a1fa08f918ff074ca942952b40ff1748a926dca1429fa9ecbe162b8a8ffa85a3bc7b29c0dd7b25c11cbb938245605fe9ebbb1aad1efb9245615fe9e7b714ab82574a6d61fbb8a62188e4620d8751c5796a495c3b8867f9c19c88f1f31b8fcc7f81fa3fce3fcd1f21f2cff31faca6538a74c718186913729ff381fc44593796f50682dff3883b0e81ac44574798d0fc724bf6939d88284e51d8b6be5dc4a117d5fe21fa3dcd2f7415c3489b3d1f735734af49559d1b9a9fb19dfdc16f7b8af554eed4669957b2b38861f1330592c960effa3fe07e93fc4ff18fd07f81fdd7f70ff31812da6b54f80c274b9f51fc445d703a9a46f9790247e8ff7b135b1a82b8ebe5bc411f8cd721fdb12b0fb5e718d3aee7ba58812205cf9bdd2aad9061880682ff30ee2b241a1b5ef15d68d6c07ba7edf00d25a0ec2a29fb78f4d893b65ca17bafedf2b3636c030e58b2f740ebba273654a2d1879a360fc25efbf3c46de638ccbd091f1193abad42a3591913717236ff125c3c89bcc1b1582a4911882db4d2aa7722691b091189230120b52091246c2c83c92aeaa4917e9225da412641127a4aba7a7a7a7a747a7a7a7a787f268b2881564aba7a7a767d4c9236bd441e9801805ad823767c5b884c2f0e8e8e8e88cac91352e699132b246d6c81a594dc4d8480c5562b19118aac4a438a1128b8d62622c8cc5549ab4bc4622486a7939d192849437aae5d5f21ab5bcc49617d8f292a99046622893a99046622893a99046622893a9904662286b4982452893a9c848b2914c94c1482311c60263c18245090aa372306f14eccae45f52dedc0826c24258cea40ce751ce21a8c2e2ea4ecb6b0291450916d788c525b2b8421617c8e252617191466208fe36714942676a9737b7c2d2f72c4556567a4679a5475ce909577ac0bc517aaface4ac2c59516255cf2a5bbcacca2553bb92c4aac6ac828545dd58554bbe5f4162552c59e50a8b2a626554acb0b1322a50ec0a4b25c6e9dc26624c8a8a4a2c56b309c45d92a9bc9c5079a9bc545e2a2f95978a143aa3836a9524146666552a3716854b3b14464657978db2252dd78d7ee99ba36f09442055254949569295643299be5f689ccf4b3ba5739c385e97be7faf813ab0ae998208d05c3b4860e7cad055acc453ea2945316dd854f307fb9e90400c593dbac41f4d47dca25948259ef7bacf7e36bac45afda088be1a7a87499ac3349643087419d29e4a147ddb4f5a755275ee08c42d93589765adb5b9c2609c662fe8d9ecc3bbf5a088deb5bcc53cd35b010b30447bbfe00e2f5727a0d49dbaa3ef3724e8b681aab21fa02a9d2914755f4323fade863de8fb8dc9110f8444360d843be8eba3fe083a734552aa8dfb2146a0431e92d0b76e317b7edb182c100d8a57a36ae779fe3ccf1366b2e11ebefa762c0b4b54b0e679ebf8d6741d639076e5618bce843e84442a4d5884ce84464220c220e80c181ea134e11074264412121116111a11de98375d343ce32546fdc4289cc3300fe11aefb08d7b38e61f4ee120be711156e1215ee12266e123ac3a09cbbc84715c0503e02b78e62c98e62db8857be308e39edd625bcccab023a6dab6b0aca89448233114819fd785b8b3d462c48871dc69af5250871547c0c85bcb40596d6813b6421f42226191d04808441844e80a8f844384484222c22242234ed42b3fd8079371192f31d55e2565b4403303001c322a165650e1460a31366ac0a0809a515da82fcf616dc488c0ac1f6aa39ea1729fbb45a760ebf7e45be27b01b57199cc88a1ed770cbd45b3242f2e90325aa0f905c0f787e35b94f91e9158f85659e17b45856f96991bdf2d297c8f3431dfa48d6f538def13cc77a9b76886c2b789fa3eafbdb870864a52460bb4ce0000878c8a851554b891428c8d1a3028a066c07c77498def8680476fcec676aa3ce89377e38240dca42c54da770f45e976ce5f8ee3b8bccfdb7ba73daf7d9c2fb348cafe2996f9a58ef4f292d0f75e07e6a0efbbfdf580823a54a552a9542ad90ca4b2f031b12398a2374c7bb8eff369dc5943dc5943212fef2e4a4dd2e5dded7027776e20174aa50f889bf4b296064788d0035bab162ca862087583af832c7d5f73a4cc4296f9fbddb56a2c9da28158fd3a8566667246cab6d81665ebc186830e8c3d9fc555087dc25676bf6b43e0030c7c50e67be057c19a8d527a96406a12717b6d3739e22eb54a45405af0708510f4d538f57a608b8135e53f100175b51d5319e87c409f7075d97247374124eaa2a6eeef1127444850533bd4e1031d1065322bdb6e2a8ef9ae9214becb810da8f0dd2456a81ed5e2795ba71071941e00ca4bc319d1f72552d3b416480552455cb872b8e95eff5e404321d3e4625a2ca6554d3335b3964ab5d65a6a915b74ad4bba381a90117d7f8fb8ccf61bb261c279a4d7793e87b526d06733813e9ba969a6064491146bb2cfa2d9cbd75806c4f3e5694edb487be519f35e6869199b58d4bd46ba5c2e8ee338f36a9ac98d3a66b5b664964a1c1e9d8c3a1cf71cf66640e45edaac9dda795e3b35ee9ea77d27aebae6b01e171a9b8c3aa3ced8e4e6264727064dd5c3702ce8ea82ae27a7905994d86a520b920964135c82f05a58a224b7b046f4bd7731206ed1ec054830c171ae29c4524b336366ac678b525a97880bea72e9b849c4eb5d6a7db08fa64c20b1c3072b954aa497bd476895a32b8e9c9132d334ab593bd37c0e4bceaccabc7b024374fdf9fd97ae1ae823e6ab595f9eb71e877fc030650ab98595399132d208481b20718084430a01c905a414b8106ba20998de2f7aa461a81d1562a501f5fd4542b4da3d42dc62d7f7f42c4b2d9abae74aad15973777e62d76ae916851a6f314d6c44cdb33c760f5f95253269068e9fb30c7aa9a5899179dfbd0c6aa281347f0e8d50e6ff4b52e266e9ed03b7ce9dbe93c710412bdc325faae76d8aa42109162515497b80a41446651545b5c8520b2854551bdc5acea0a7dbf4129b5842032b328aa29b88302415b7d725cae377cb40ffbf3f5fb5d8be3387087fd794dd36ef89ca73d398c73fad91579d7b2aa32dfae8895a165de6ecc92a64c1c21d35b3433bf273e18dc6f091a03fad180aace5f937e5480b692fbb07001913b0c2598c084096103a6ea2813e8f3a350947a0010c7cf76a2819c89406a0d99e6e7e2f811c571c461fa67e3b932a6dc758fa15008a8abae658408c38565552fe5494a82ca804efa00890424156c375c4d79ee3caf0c5d7539dd8bf4a230f7a424482fd28bf47a55d30c9177195b5856544aa491188ac0cfeb4ea714067597b1856545a5441a89a108fcbceeb4f3fe6070e5f9a29a2969fa2c738b10612c16cb66754fa9cabc7d8ba66bc808bada72aa65357184159a8233d01fe80aa5c66accb4e35373b5e2835dfa3dd18c1865b3aaeb25428684c1aef90180cdcb10158699d01850c102dd85bd01919c90746e0aa483a07bf607a33d7a73dabe8a66178968cb6be5cf972fef43dba59656725995a69dda4bae52ab54a4d4b22597662295999c01216ed16cbbd9a44bd39b74912eab327f99680288150e1a032a64a077b8b6a44bcd3c4d48c92daa7de827e82386da07d3b4aa9da332a76b79bf484a48af9a49395534bba92e937248af1729c706a7d5b83cd25b3423e92d9a1901220ca2cca16826023faf0bd5bccd8755c3f6e74fabd991188ac0cfeb42d65a16598c182cb2f2a57a1ef85550478fd3376fc3a61ab67f4aad9b2ab56e8a94f384f84541dd85ce404167567eff45516954a04c41674837a03354d01916e8cc0abfff70406954f8fd97033a73e3f79f15742685df7f3aa03331bfff76f0f180ced4f885b94a46a521c7df7f4e5855cbaff9113843d53279571d7a0ddcdd06f61e83bfa780c1dfc0a2ab80c3af80c5b38047f754aa18b018316260ed2a4c350b2ba8702385181b356064c89021037177ad19317e355d7e9f8da163646a51658961dc628ac2fbf381fd8cae05037ca92f8731f6d8dfa82c2b2a251297428c8d1a30a8193262b49817cb18387419b8fb0cec1d85bfc360f035b0e83670f8182c3e053cba77e3c6d853969af61b98ea1430792406934250987b1b981c82dab8af81492228cc3d0c268b4061d2881998bca130f732307901f2886ae39e74d1198e14828624822c823482bca133e405c8232a4d08057b3e872561e54b1460e07821b53ab6b0aca89448dc480c45e0e775a1e71d23d7dbdf7eb5d68ba4ec6ae3c46d310f5957b46bcda3a6b12d8c906158cf965c1b122d5206bec2a09ac971a2f8823a4b2d9b96c3a7604de889215124ea36d9168586bada624f88374a375615c30a5952f47dd752914350d455912e1bda389904920b971c5c7c206514e69e4c02292365a4ccd434b0060c0aa8193262bcc020ef32b6b0aca89446df1f8c344449a9056f88ce2ec606a61426051cfac2245e0d1814503364c4788141de656c61595129e18d43d77a81259ada40d3256eacd04bdc38a163345de2e602da7bf956d65a6be90d91ce00092cf40c4d6780c4136d411a583564abd34d47d9e09ea6b12ca2684cce1a2241d5ccfa016b381d8716273cb68ce3a662a288a157d3981298a816b444106d698662100412543b9aa606c37bd19aee3c6bd66a9a662eaf990f61b109dde1aa51f54a78dfa25908ac314daae96e89ed5620d3344dd3c626e549396b4d8ee3b209c660fe2b958c5098abe3bba9bd621b5e421b8ba27143db4c654818a6339492236d2bb579bbdcf3f0e8c4a2743c8f746975a594f728ca5b0ce55b03d19ecb2100d85b2eba4e3cb9bf005ea80c5da1a0ed6e41dbdf1bd1fea33bae12c9924eab0ce96553f7a47f8ce81056d114ac0152a3594bb5d694c2b8dc0345d121cc690a1ec02443a6f4063a84499afcee5ab56b5d71f4ea07c670935c1a887b88e6ae25a1293883cd267b9ac35e269a829fbe3310710106b033e6161691286f6e45250af79a9289b3595e056f0e8378978a28b70d54363ab12a6fb4a2e5b4dbbc5df2a86351a3933a36199dc840dca38e898745815eb60ab1d2eeda1ff56aba237635b645102db020acc076d5d673d882dac394892454a03b6c35b7c3d311b2d65aabbd6aa75957268d13ea07e656aba560795e24251dbdbf6317e24d026e8ad361ebca3c80f28c5c6c319eb34c624fda696d6c79fb4a7a559aeda6da0851aee30045dd7b5e0b3c9d2911a130f7e3d134881f288ac401aa0a82a68884442a4db8439c5003a111fafe2bf316bbb9dbe2189ba74235f514e2f9f256269ebe9dcef459592c168b656afa34392e537d561dd3e6336f3c5b6c8b95b734f355b0f4b582592be6b4779be0ba7321efa5d64e4c5fd04d1c840b22061975cd2425adaf40db4dafe173501602fae7a62c84490fd0f60f76392e94493706a208f409732b0ad6bc409f706865b1a62958f3a3ea50d55734e3506031d5a11ce6947e085b37f5d2b84cceb84cca4e26fe684b9d8865409fb0b7aaa047856861261551484155dab8096105cb831122c2d78699703fe11ece0d0a0ab34521c56d423c1fe6d0990fdc8737f7a52f16225dedaed5b54418149446e3e103fa8639a41654b524fc0045ddd74cca796959fb94344823482362200509a3a9558b142db1162946564bccaa46d6b53e8847e8054e278f0f7653d8643abee9f7e1117a013bf6984e388dd4fe7acebcbf281f4c34b3b9279b3299ac661ef939ac77592ead13683c85b79f804ff76c17227766fcf17cb2af077f3bfb837d30d8d88409f1f44d7752d8e444aba92c9ae58c3faf27ba62b574e8ca98aebced06a66fb8438314d1cca393514707d4513590f2dabd6bebbd22d3cc4f80949f40bd4bfc28b3a9fea9df7f3c5726efc8362eefaf677f51be19c8025b1c77ef38de8c992080aef24fcc23671b1bd0b7db7c7ee2613a02e8ca944df5a60f59611ab69bde63bb29e3c0a41e07d0b7d7dce374d34f1fb2ca6173d81466623e63baca1702bae9f36c3ae80ac8ffe483f23fa6839e806cbb383d7521dbf1e9a92b007fbb02523fddabdf8581b8b7d8e942f0b7a77e7acd34e06f4f40ea27533d36d59b98de4bcab932279cc6ef493a57e685c3f03dc2d4a0356cd86a96d52ccf6a7b2a4d104ed720a3ae5d680a6d21cb7c3e32a10bd9ce6618c072804ca06a9aa659517933db13acc3d9621a58c3d5ce7561f80bb778935e3636a69f707c1b9b7c1a4fd50d9beab79b26fb140e5fc0f4a660c0f4a668607a5327607a5319634c57294c57264c5719d3d50998ae6860ba8201d3d50ba65bcc0307263d3eff1c87ed2053266bd940a9d5f2aa364a44cc74c9b5752d9b83969719b304b9440a4b68a6bda30fe88c10ba087414027531e1b4e0c69e285f4f0d73288c68f6178830f13cbd56543e87759ddc0774c294249aee4c297228d60ad6a83336b128295f60a16925748874e70b2bf4ce174e68baf3851243d074c70b29b6588cb61c67adb5284b5ad134a6042c68a8ab53dd79cbd05b34d3cab18565e55ca8fb40913822a9ac84be59c8b1856545a5441a89a108fcbc2e746a954663e99b0346f70a3780421d1de6581414abefcdaa3728f57be32161142676f3864d28ccdd7850a87f1cadf98dc77481b8b758eccad4158d6d1102d3450a933b717cddf77977072787f6c876a62c71b9cd07d683fe76305002bdc325a2d799ea4d128bfaf4deaca8375d27e6b0a497386eb1fcda627b8bc5b8340ebd49af2da684b845b3f217d4113a4b5c9558d436b236595761111266557becd14facaadba0d4975e926351a42b479348ac2ae7c424252b048162d1824516046582bebfa48ca6b460915955cb8b5a23e2fe649a99492f1588b68a9ac694c083e9a2292c0852e8e8e0f4167322ee0f665574c70b29f4fdd8c4aae810ecb53284024c77adb420882b87690d9830459778d3298ca48cb80889ae12bf7f7c701db90993d077871b5081df610846a0530214d014e895ef5005210bccc372004553d80d623d32d3d1f5587b9f0fc45473b6d43a1a4d559eab349d0e5505f64067420b501a513522551a151712ab623989557a416d48a130770509ad3660463f68d066871389d33cc22c2f509e6e4e26234c2e45b89044902392b1658816162158568eaca8b8544a4194484090464646621131fc21141111813e805febf32ce0753d74211e429c0db7edb08174007d72f8680af35df3ae6735af5298efdc47c1d04b25a63be0be0beaa8daab36d01d16b5a7124b6c750081eeb0485b307c29a704d32527259d524b0bf14d81b83f5829e703739751506e372009bbb70c73c7fd00f405bae6b046dcdcf5eadbc9df0cc47f2c16897553377f3bb06f4725d68e484dddcfe0b811430395ef42d2bb6b757a772d18a87c77a46fd276c934c0ef1b7a7f30ed7b46e6849bae9277073a296fd2e7a3bc5d72ea61de34f2c1bc6fd0b896f7cc099984d1c8385299de949877cc76735326d0473b0ac44dca02a2a8a8b46d33274d4c1933232200000000c314000028100a8743c20191449726930f14000c6b9a56706e4092a75190a3300819640c2000000200c000c0c0cc0c51009ac6d1f1dcbdac63aa9bf58ce6ecc7ecd0f28e47019d7c1813aa14d2ad8851b5c1eef3f02129509c504a59b2cde4907cde7d8904a9aece13da3cd1041703e71921a0a1cdb2120ba1573ecf3ff5246d016d9559785349748886c7cd9fadbffaead65ff1422fba542ce95ca707e0fe8e349650336921fae64df649ccd22c6ab972f680ac97d134b91045d886f90ca6b038f316d22b8e249b05a3897bc1dd51108e22df658e72d701de70e2222bcfcf4c55e89724b3eeba0f517eeaa6d77386d302204ad59e3bf240fe968af69dc5e18f2362e74f8eec22fff48eaf7cee86f519be7a47bbb65a26f5914e79ed90483ecbc425ce0783f7eba180a95606129d721c54a1096d5a52fd374626f8773fcb86beee412dbd67d5e4e639748bc9003b3477e1fac38cca26b81e3e5ccd990c7267afb937bb5ff3a97cb3f65e95e8a462e4431e9bb1b34024eab97451838937836b2c909a6d4973bef54e5055b64384df58fa9a8d9d665b57a3d9d7a57f4156c559f9dbe6c36fc12363b538ede12d148328015ef06b9bc4976dc41df59535f35d7de7fa57f547861e0adce1a2f45cb96c9f4a97b5005e4831d60bf5c5996d7690b145427101f2954655009fde408e4c56b5edef3fa54b4711eb1046f5bc9746aa6cc288cac75195083b529f010bf3b6b8dbd3dd819e762ae6b0a0f908bbee725490f301e169df21390ffedc99cff5138b9df9fc42cab269c5caa0412385fe8824d0f1007d4a6bff3ef905148d33410bc29f5b9a48e8205eb618e17313dec1a24359e6b6ca432ccf4c2dc5b7722a84cca22e196c8062727b380cc945af72f3d1b1c67c25a456b3a3766d676637b6a0ae7f20a36f1943c990aa934bfab5f8096d74561d1da2ab37fd63fbd96354461be9381177655f5f8b8c801ea26f7cca7de95b67814c0b5a23ae5e425f99501282208b8593c40d9d7f8bd7779748458cbdf227c21dcaec4d9483bdf1a0132c4c450377dcf0328894dccd51039754a34492f17c4e4bed4bfb1dc9123b4e4e0ba0a37787019ee948c4b308f4c207d8416d5e38a69ebd14a4eda6208bd60e9bc6a6ab5fc8dcc6785d5ebac6bb182fe321ae202ddf4828eefd283c9b35448e98379e615b4b9510d671b35ce701a7766902f2d9deeea717c3f6dbb101a2198502502249639d999181884505a0f539303e198f005b845be7006174d7900b585fabe5b5a7201b5a88e9905207da9ded0617cc9f2dc914128b087c94b35038e019426aa2d851ade6818aa0714e5190203ab736c50665981cb4efce65790fc004d13892d79349df1e7c78c1edfb983dfa7efc3e8b37275a326443063220cedde64deee01ad67e0dd47fabc4f9b956160f2b72b59a14e6d6e2c3796871723626e48eebf00ce4ef14e813582b44b46764e7ae9e9a62a1437d9acbb65a55d4211bec3ab6c630a535ca06c9480d128f5e61a919285df2bbabbfd4463667385f29ed912a97ddc50ce5fb24f53aba53995325c52eeb84e4d9854176820b6bfe8841c9aad4b5833abe8628e846c6f591c70c41e501e13296f1fb6f45662852d17654f691f10186a51805aece523ab3d2d3e5c8e581ffe8b2cd0f0889166828b605d5bef321c44a2c7b16c32349626e9c3a7ac23166e77d506266407b9453ce00133effdcf8050b9dd2d852f4a06218b61db93dd459e3c39cc68b2b875c79b166efe3ce5359324cea049afc917d3aa87066fcd05b37186036f1ea8ab3a0c8989e04ff7176a4ee00291b1928c5e95fcba0f358b9a6091edde01081f6410c5eb30f4fc00b840650a4151a5089789a69d5c262a8396e927c0ba6cfe3bd53b5cd8f50ccbd584aba04cd0a3ea9695debd186ecae05490143ec7487113bc721992f261595dcc6f3fd6168322741f38b7195cee0df4ebaac10da844bbfe7890d16f02057ccd089abc6c00a7120468c014e84a886a11abb82267a7fe39da2d89ac7c99c71fe8abcd07cc7b3178e84ae6e0cf9c38fd5525e3009e4765ae9527d8b3839d3b55f36fee2024062b1a89be4b95f13d20a45bfb5d24f360191e6924ff11b5b9be6aae46279c158267fa0bb149b7b4009b4ae6dd22e4ab892ac4e2a2abd0ad4a2de0f5c82e0b49c361105bd06947550fd36e35891004bc45c5351e7d0619b68f7acfab43348b37b27afe6ae2dafdc4abf348dbb8366536faeba3b9caea88a3e083305078c156697273dd37b882dafc72aba88328ce7893ea097d8a7f0dfd06ae15e5a4bb4d606d8e21260957390650b05fb800aa9a1d05bd0d49882bf29c22cc01cf37df81ade152ec6a36f2caf7093b5ef347ea7d92f6034e0a8967599bd2b5a037722dddc5c146c150eec220fc9e431a4e995fe99b37026fb94340d0f2bc1094a2fc3f9c055a9cf6a13b494ef0233f098db526c6299c48940e4d0854cd3b6910be51cbb53b5298dbda158071a38d3c663d179f8cf1e9fdba2b3d36ff98462781357e9c06193f5e26b9cedb0e005548e2f1739e176815a94a1be42e504907f3c01c02d4a63feccd7d99f96bfe1727f52c57cf322e63f0487cc5a96e84f8fd64d3693ee501c31c97d314d7300f410ead84501bc34e60235f9da42309d37d9e2c1af80976a15c9a57ef96e8383c38d26833b37195c5fbe274f8f92903cc45a1cca6f6a1401904c2b3c58a08de3762646d96b5aa791d09c683ae9c078ac9691667862d760a4cf593b91169173786d42b133dbaebeb6275d34060fcc4bf73e746eb0f3c43464d8869a48f7a461e39286ae0915b74249d1537edf0813fc3e75e403d633a279f16a4181340c366b15c70f930326b38dd3b4d6b1d7479c9c4b32237e411ce2fed029838b8620a0d129db7321afd810d3f83df84690c44d1174a956cbd507238cb2e7bf9a3e423b8a356e82904152336d4f51d0d61adca8e33ed677a960d3292cd4f33a0e2ceabb8fd47898588a40508df0493f5345f29f904f30066315e3c1d1eec9b9e978f9f24d78833bbd86466cf4b02aa6c3031b8040749a18c056041d925e732c4657e201af52b2cca0a3d8afbdb6d079c78a52007267e07a0a8a18cca8cc81288a2169b9a8c1097ed94fbc2ce4d04fb4e7d44a685edfce3cd03eadf059c7565254ca52d6056ac17e60b76f251f58a2fa78e399865165f58ad11eae92d70111905a3ba2b0365968c2592206d62a722855526b0b31c84b2fa1211e419cbae8295bbf73405693a83e347671b2643adf78b7736ce83c3a5d3f8acfaeb27a4cdd9208f1571ad33ec85506a6c66404afa6c79301ca00e221b4c436082ae15bd971e0f7e0d8df9e381170001387677fd885b3e346e408423a1344807c58dfdbff28cd5fe122d0acc3c2bf71874e08fe59c334be5e18ad0f5f88f58bd083e4957d1c7967e58046eb53300e5107134fafc1a0a433d3dca1c85191f6e2da81b53b214d6709111f62753a674d91aee1f7536e6050e6110c0d468c0f726094e53a53a593b258f60072110acf32a7d7cbf9a762744ac322286418930b67bc46011dad0403971f77269ea290813384026bd5e9094d81c75e81a5b74ef5fd3df83667a5d427f10854730915e23ee15d753d95bb35029672993d6b172b4a56b08e70e5f9df54a11640a984e2e4dfe6be140893a292d70d7f8295fee1155f83816dddd39aafa220103c2e6888cc261d63db12f13b429490e4f29b423a4c0c4b4a5e20de8f937b315a94eebb578d47a081b8939939e53d62ea869748cad35f01d6ffe359416df63fa90be297e75fb4bf9e8dd6b96cae96a5d0d6490fd295b4f928ff26f59c7af45ea221b89319dcbb024c61b1e777f1b3294852cb9935059e15f14dfd11ae86de2c141229867cf34a64ae03ef1c8fc999c27b318bf23add9a14346226035912bb46092abe9805f34b58900e0a5509d466c3f50273d1df06d16233163ce52d6775cb5dc7f99f3da86e42c8ccb0018e9c77503acbe45e11609520eba73708dced336774c10982f6f406e52063c2c77788d73e0a4d8eda6b51e4db4ffac065bc9560dd22fccc6bd255a15e2d2f8ce05209c2fbb576503833a6a0e637e1199bd41717de1b8003c87978dfa0460b20f2f9d7a65fc6b04b26ff2c6396ebee914bf66b033cab0e5f715732e9864c49192e418dc1e3db75272804e056954eb56ff39c0eeacfa536721383322be67a8d4531e5c102357f76264a78f2e7ffa849d4ff7cd2d5e5c227b755752f4ffcc061594f90658e1ca7d67c032769b04da034750f0422ce13a0a33ec241e57a20eda23bf793581e7f4974a0f1c6ffb52f31044cb50a3bba600090d177d8e230802ca85f6be15cbf2fec377e17984ff576a56084fe04646ec1adaac07344b6645918bcfe5d4790bd40e05d37d29f8f70417388a18d9ceb863bf23826e76d2345041f85952f137120e33ca3fafc7df697dac8410d223506ed75a205158591510976e2775ece0b57450af96fabb2e191b59bc31c0ab0fe85353289a46b5288d38a92b578d0becdf14bd2292516567eeac58bc71d389b719864fd64db3b190046e401b96b18a2c0f423886ce584444a6c7187f46e555574c72985182a92cc14cf2e77f0609724ff59b8b68544d7c79b8b3df66c623c5c38396d9d8537b0f4a3c9051f87ec38a7c06aa631c66984151659bd09998a80c939b29433c45d036e2abc2d91d485a9edfa140a1bc789cac33fe3c37ce37b30919fbe9f3b3a4ffb15ad36833f5d595b68a0c263d49df060a9c0f52e55bdc52db0c005d52bf75afc80b542d8dfe864aa0895a0b69a545a087338fcb2a919c1597651adea152eba40971e71ccbdf5420e99b794b73984c85a6b48651568afdab0f492f72109abcd2124a458d7bb52655588a72f53b82069d897d74a064107076d87a49185d3d6baec49471c1635bbf51135c3b4d14dcc329de6bd22887b8280850c2c080872b3a5e3124b7b79582990e6a501829acaa8a8a111612c5b8d89801c9d0b4962d02efaf5f3e069056862d0a13b673a11793ce0e715de3c28c284d99193b0b5110fb4a905ae4e1c09484e504235c117ed9baf6cc2d434163180d38466d15f0c2a5a6aa2e62c1ec5c43ae4d6d95f3a6a4559b38824ab075c9af796c2797b27f18e5216c5e0c317af9417a4a350731156c179d63d207f4cd8f71ee84b52dacca36ac97755fab26737711e8954e1101ebf8bbf641a43abf5cc52479caf243ea8e62453c1c4534a00e3abc85335ba3837bf54ebd737ba6bab78dfe066637d51dc7a75a64ff4c92e7fd112d287f200c94cb896b907e43ad854f4b04e00132b6ba40db836823bd8437b50ab781612ead312d9006fed0ddb6fa69f191675a647dacd08aaf81b463f3772dbea677b185980bf191c7cbd61241aa4435d855ab284bdae4368816d9dc686ec503ac34230d9db2cfc2baafb5ad82029913c395489be9e2be6e55eccc2329e2381f4446a70b4185c87f8e17bd33c9898ce5fe9173c1f6fb47ddc08a0e65c6cbe2ef9b969f3fbab6a6bb050bd4174d36486fb6c5b30786aaa2fc230f35d3014a76e5049ff165d381f7ca9623e72fe2a81694f22a1f3b04323da0d092437c3704f9520c0c2a90cea0d4116afb0bcc3fef85a9be990c3d5477a81b56651f72c77759569780a80f41a39f53c5967885078cb83f985eff7906575f3b169019ff8380912824e928d6bdc03e2d4d0edd5f8e4125bc31b41363aa306d25528c7cd975b0a15d58b5368766fd0364d046bd307a2c40d6aa672b5c823bb1654b3298be69d0777816a4ad3932b778ecbf39d87472bbfa24e57669f8d26b2ff55c8dc714a5588f56f5b3eadcaa8631eb5fd4ab863054418ce75f7992cdab7cb01b6e8fa6daa76aa01d2197d520e25abcc123f20d26ed1f5e0cd48c02a1089aea40d36310b7e70195ae0fc6c6e6792e3b9882e3f20599af5e510d6e3a5a1f08876c34a0a8b52047d33b5716181ba881ffc67ec79d8f5786374ed8940dff289301e462387dbef0367fd1a7398a2aa30cf9281ef167313e076287f67f7179b9e70a27c0444414a63c92e9ade6db41a75820cfad3a8c41c62e0f30526900cee039ac90c9ca2ce60e47773a891d28cbd02967774920b1cff2c17192a97c40c84b721061f2a4c8eda27a0a0226501e629c930868e5cf408fc494eff918901449e7f81d555210d194d726d1b74503bd7169ef4e624091bd7c3c1c8843d09b254818c37a70008d7c2ebe6c569f53256f68c10ab22bac6ee46edca43443761a14089eed20d9da27c0917b33156818fd5c9f67cfcee92c0168f6c7e66b14a98e749ccbccabcef4bd307599c77e05999408ac5bf1e248a13ef78a10e86c75b889e384039ed46edc95149ff4f54a165eb68d4bced4c24b838409d2168d26962fa04574e6ab5692a5bb5efd9e1aab241da5799ef2957095245006eab164d0c6171bf6215d4251369f841b1c11a4832f6e026742656380658250e847ca8c762ed57c49031cd3e4b8372a782d002fccfcccb7da83cf695280f87de441b59e530ad8fd8101cee6d5fc3feea8348acbeb06f26edce33cf6ab82ec57154e0cbed599d9c21a42346ca134394373c64b10df8ef55234b5b94dc28d5b1889a6302fdfc78a53a2d16ffe9a0f75761a5d17531eeba24becfc72142722514085dffe8be1256f95c3006500963d2314c1d131e04f21ef60798f0ddf33bc656b5e3bd01b47025e8ec7d60e526c2679b1172ee6f87bc66422453c1ce2630db1cb6c3c9f1a3f2f88c5717e1400a1ce14f1403dd83ed0ab4ef4c46855cc2bd4cdf62254d145fb8d3e59a427d763fe3d099ec712a5e1b8eb0cb6c1e17aee43d36120af4a8f4e46c48c4edb2ef6628c661e92141ad1a67516d2748f30fb1dc480cf59e8a17db9991de97b71b8c5c0d37f473b6a8d3c3a27de46e7a2fa9777884352796c91bfc3fe833003d10740ad18af45bb977afd5de5dfcb52d74842c285fa64c0e261c784e9e16b63d33c695fe87ab78b39cfd3b21a3a506406f1c92c2ad5cb26ab04a7c9b59d43acc40892c3f78fdf319841d0db72a5d054af0b0c9793a3975bc87b798ea8c6d1d3c20438d9fe4081efe86cc730b06178ca656a5565ced8ae5137804735b3d132df7c5cb349d1313517c3fc871d0074d1c081ae4483f1e3f8348857382230e64a6607e5e732a9d67813cfce0e331084f5d2ce1237f98a7308f825646369ce7fbff1e0431f6ff0c0c43bbc6870103bd85684cdf49deabfc77661534e9f3a85578e0469a568d456174c295311ce065d3cdeb4c1e88e4f317a912e06f3d5724ff246c554a7b51e4b99d7108695463e0acd2bc04e692b7d77a6e9a1af477ee3840d83fb39880a58fce4a845a51ddbb034f4bdb523f20aa2044e0e8361fa95404b160a0336d4ab655de68b2b08b1e30348a883dc5aa31fd86c529c33890c3076944157ce643966bf8608afa135b4d25d6f436277f8bed06c67a38f6e2f0dcf0f8b09f89fa1e554a48d3520c665ce17829b22173986456efe3b72ae00852c8acf26ad9918f1f495649411de3707bfce8e437985378a0792a1c023724bf549611e4f9eff8390be3fdfbaaa8076125fc490668209c02bc94db4156b1ac619396673f790e0f81a2bb38b187a9d6abcf806c6d0f0004d260d42dc0bfba3e91f611146f9a4b2a652a3d67bde5d330c16918328bf5294b3a71d9ea4741229c70048ac78d314d55d47506a16b0c0dce24ce56d58b9c0974e8633b764a0d6e03c2f5a7202d07eb74059d7f727b0176087ce6df5ef20be578e14a3f2404b14a2bb8261ce052bec2d539bca717e8171f4fdeb400f690b5feeac40b581225d6fde72f5c5649c74ebb461d6b3131df446062410c98fdd04231606abf6f286c4b2c7ae09bef84b551f9bf517ed2cbb488dff8fc903d34c667850beebe949698b0158a9fb31141adc2f2b0686fe51f0af73eabf08ce9073a1823978542e0e70d3bca57f4eb1a75886a4a51aff65656070fb52218f1ade0220382cb9a4676bf1470b4204edaa5b486a51451f408b550c4a0e41af40396a984a81166e87167df34c6eaa3538b06814d8087b6ba1e351ecb0f2467f3302ff02fa4ef48d3d63a39340d4f7f69db0c5da0b48e709c6ec842854969733761ce3c17a572fe9b92b4dadd9282bcc05d077a518e8b748ef4c34d4eb39b14f49bf9dcd3329ff2473e1f79378d1251d7ecb25e23dd99ed8f113a4e37a0630d396fea67d7336b69379adae3137619c1ed21387a4e9b993eac07cac1b9c43e5b7af3db322505b46d69465210e708852ad24c6928ca4106ab244ad221ac53185055a64900794e11b23291490aa31cb0a86a8a2a1146398a40d5944e2a88e80c832a8a3c2928cb31c0503035154166d3209783688de061b16d9017aa0f5b5a380bc65510531c8e2c412289e08a747455027c64b458e2686363ba16e0871d6659754c74d80ac222d26b0a99836b13168125a85ec96e87ec601289e45ce6cc6b6cc21f04c7d5bacc67e8a9237cdf27fe1984682dcb668da67424637846c5f095cc9c99af2f4e5d70326a43cbc3f70b3a057c60163ca980b58d3ef43545109942ba0522c0519025dc3f9acdc67d369177273c3ff06283276e71d6639938d314dda565ee6480538533c6002c054c59cbf23542cff71ac5fea5aa1a280990c077d33208f8fe4f5603513594c2c797f7eeee298819bc6b71bd633f605f1b864831062279d2838c3132270b6b985783b7a7dd69246c3a25a1e79406ee0be72648fc891f64563d367b5d788f0941d9ad6948ce488101a06f273af5d52c371ebeb598680b378b2a871db666fe9096a64f32d218694c720c939a1daec930fb34e15b65a8d9353e87abd403486a65fe2b7e7836df766e405c54b2038e82a92d759ad4b8b4628e38b128b98874c90ff8d0dcf28245d413135fdbd8ddbf1f65065597a680ad19ac04f809baba69e944ef58b88d7981528afb1990b3b36657dacceeae185b48da73fd04ae45460638eca9b5c1544283dfd958645016eaa262347b7b6ddc4c53b8c7c5e567400d6936eb1337da6e3ff433de39fac574628c7e9e8c8a6d9ccadddc7d7e58648c5b44b49f2c1ea8e032cf23bac531c45b8bfdbbc5141a5654f059fb959e1bbd419b5248c20828775957ed4ea5218ffd60e27ae5b0932f4e80df3b5b40de1b2ec7da3612ad0028dbecc04c1cde1752d9c0cdf5d04215fc5f80b6c047e7c672ce3f0ccefd1d08d32913a950f335646637ce44e6e34516659337fe23c76d714d32e262a9b7d5519a7029834a230c63a020db0d1eb2e12590c8c8f69b7d4ff8960325a10b09963bbd0fa5e62190b9a63c79430c23ef557dda09d3a24a0b9983921773586a9ded727777c654dd76ed52cb5ca7e2d484a2170e642b5e89fd49f2faaec3f6dae2f5ff07f2720a86287681f84410a011e8eb452cfdb2ccafe4b6714fbc60ff5a7696008bcccf28428256bc57065b696229c65bb26cae426c9c334fdaee09b1566f0bb154f73054131f7f3474556a9d5778908ab4cd32075ebcd18396263f8060fd9b5d109dbacbc0dfb6953bbf50af844f3ddeed73f8bc0c5cc38dc9163c0edc1ff781560996f67cf3f91bf976b7df0e3c1898b595ad0853ec53980523beac3f9a7a50f1c602344652ba11c2773f38d2108105c63bb094e81fc933a71064ecf397934a7ad77050194ce8210597c9c1ad04f626499988757b8df50e199f4a071d49bbee65a7ee5fc5f59e7ce2ceeeca79dd4c2699f5cc9a30b4befaf0fd39bf2098d20e2953ffcd908da7f44eb4acc00f90e701d9469af358db192c48bb9b06cbf9db598a533767ebc16e11d09391cc9959259613f0fe9467f035713cbb3796a090ecc07d3630eee9867748eb24da1f5b15a5cf63a03a181ae55431289ad68ed49d07c260911fe0a9486396f7f80b9a4762151e5f918d71c1e5ee16e8303af0b58a0106f632b9e9fdbad1ff63ac34fda0bc5f3ef34907a58ac1ca7ec11d7cad0a140a9981da8b5c48ccb16cd5459af9ae302298b89fdcf2cd3964fa1b4f7c02a41f5d23e57171dd41e8e1d4408d86fef46815c8759ad8eb43f60ec3fe599e93e89a6807915b4a1b24a1df42a654cc61d45136e03da08fc4d1679016e64a88839660497a7456b847307e8c384672382a2c4784837bc7c8002218dce5df9bf6ab5bfb94414e5c703d402cef321d779202c85cb0126f024ef000ba0d6dffa4b904082b6cab7f34b5db2d5b3753eff8b60da881f1ceccd4cca7a0542cb444d32df67a3670305c2bb3c60ca5b586e5840c7a3fdb03c840799ad1dd0c1bea0b8a6beedba5ab2549b20bae1763e23eccd3154a0bb6ff562d7b2bf33b3e7182b69cc3c780c1374fdcd2ba7a0deb64d4d2a7562c6942674b514893ba6622c7216cb2be504293fc964c4e2bd4e9cb5971e7de5aa3a885cad05862fd4cce45ce891da37eb30aac912036470a9cc2c52ec2b94ff2909b76596a73cfa0f406bbe66136b4a7efe2db3f85ee431d62e1aab656e7c4f0d12a962f7996499e1caa2cd33bb91baf129ac481fd0b6dda71da4146abb0951e9b8908122d3412bfd87073219a10e33a08cba180d0351750c7530f8308aa6827785913d8509b8551599f9903a5aacdcfc5b50ff251b42ac4d6c68d09a1b0773b852e384a038be1151b781a7084874fddae7c72d468e08a6db0c6ec60ad7b661c30ab7d4475fd95cc0da514664c3ff3eb0b539bfa1284dfe65372aa955a8426ad40130223ad4722753f7f5cba83e40242a95326325ce7470bd33d522c0ed940b93051552d962034a8a5aa758c28a23ce26ba8bd3f175205f18885343c82e41a7d93de04bfbdaded6d03fef7e9a12f32547d9dfba170056e61a4f6df2b63df64ae7b18ca4cf61cc2bf844ba36afb837c57a0164a83f0565c901066f9513b8b7a85152e0c4ef860154c969fc3ba0da249d220dc8b2fb1b0165b34f8896ec9f389065279be2a172cd610a8034e7a38150009ded1031daf2acaa522ec7175584b2e417e278401a1a3c416712b8bd7160ce4ca0239acc0c0434b7b1181dfe41a8b60ed0d4b6173115541e2b8c3ad9abb410c3a24b4574ab049a6d06e66feebfc6a0f6c1ead4be6ac9f0a5a27fa8ffe3cda6b1629bb8f3664296ad7a16b1ce10768ff90737f03009318b78901b4dd9f2bc0c3dc31bf22ba54274ae046967b41d2d64b8f1564ded728d583e5c584a3dfc445dd6cda3d7bdbc7499d7d98f710c7cd163320d1e5bf58a44d94a90221eaea105c2a8f090ae33d6a5c78426a1f9d81593f7ad40725bffe15a4f7a1a7b87dd783bc14e6097243da355df7f52fd9fe53744f9904db2fc86e31936da0c5f628612237da0bad36990aee81a923ee227add61faa26e266ec822f52f9e08824e4ab34c942518f60befb7a3955aa9ba7084eb91125a57f1a0f9fe29c975594e5f2789dce13f33904784b1a94892cf5dcb76342d49e14218107bf6cb17e01e5a06aaf70a5915a986c36df82abcf7b3713ccf261a168715a509f65199a9aa13971cb08f55100a550881f95502e7ff70e7223a0dbef7fec4af60da6dfa042d4e1ebcb5e3a8eed773912a8c617f0b2b0eb96284d1dcb9dec5c20a9b1c5316907094c4c01f92b8bd8586801c90b8b96f65e82e05a3cee5f38168b5faeeb6a57581468594ec6a2a86888e65558eb86df1b920bcaab70b902cce29e4a06a63ca2b87e76cf2b77518d260c99b23bac239533d826fe1c2bd69e4e1f67ae2c6e73cfb34c91fd504943841ee1f44560a05b2a17b206aff445a5894eb8c1cc311b98f52f564b81ab7d6078fa8ab3cbcf94a2fd93dbeaae71c3235617239abab8c35da13462de710e1d0e226f45a13d1aeb6c580f234ab0449774b6d14946070940286c72186480bb29a8e987774b904aae25da18081e84d6b20d83ae0c3bbdd509f4df8e552a94059b84ad894ca7968c2ad8761711e80a928aab3c16485ab1106475a64a86652a0ee8aa87fe956bb327be6cd3d633edcb7b095601a2ed8b449c77163b81cc9a0f024aea8fc9c901ba25356c0491a37679a37038cbfd5d464251251cba4b91a561cdaba222e2743482cdae010792cb7fd8fb28878dcfe096ec1db01be18b83713546aa8c79a3d91d64e6aa6655b0c6ecf4e228423cff159d0d076318c43ded658e0d668c1d1b782baca58fd1ee257b6df2763b5b4f7e2143cd43809fed2745f7dc93be4b5f4d2d751d638b69630dacf4bd8aaccdb16e9a217c3980192c99c5961153bdf4322d0c7ec1fc9ec76105fb4a80948d39596b8da63e944511f314adc59b855bdd11b2d925e3d462efc6bc5402273b806577db53cfc55e97938a8f8025864c375c0c5fbffd876c502c05d4d60974b799aa42b66dcc67b0b140cfb387ecf1316d5fa0dc01ec9c24a11a0b66223a18192152a94ccfde116bb91a451c9f2104ad8270e52e4c3e68b18a3a9b8359a85d25bc1f5ca1488bf0e5046c358e74a849174f1ca78ed962442bf8b69475f1488e9498fba921a4a7cf76ed428a71786416d61dd96d1e9a1e364df06dc559b22b6e8116d062a5d50daadcf491bb115f828ef0bec8aab2d44dc6ec911256d9c9c9d64d495173ea53545efc1cf52416b776ec234e0b04c8dba849d4a834bf99ecf8ed25b3ef396ce28354353924b9b9ee415b11502ce54fffeca08730291519662809e7aa78e1ddb141585e3c7fa66d70cd90f198700688190b9903414a741a2e5fcabec285036aee097363131f1857bc2d86982e961771d192a024aed4106d626688f648529adb1088dfba3b3c34b12d4102f08320c5c65158a5d2476d9844793bc6a44666aba827440271f1dd9b7093705d9bc6fd63d5bb18967dd3e4c4f5dae0c1163194599080bc8fe91c7d5d49fa0fcbd7009effeb14b7c2c749eba1bd47cb555ed2cfe133c1b50958c0d90e29f3c1e6db17e2d0ecdd6f6b7fc37f543c4d62f8f08da94cf85c204f45b506705a844f8ee4a1a3e5645fb0a251bc515722c77c50cb856030fae86fd2b9d6fd10eb48c2efd868e7613b91cecd6539059d0b8cced3c1627b6d293330a6c1e77d9952070193b67b000b36d846100d7c66825e9660f754db9e57e37a93a7daf20d41c52754d4dfddd6ef14161129bd429ef86745af619c14dd89ea55f2fd15d3e9748bf905b3a93e5ef9bfb37f926b78fa701c4ce0124c4279341e76990206f55bdde50e7d6a854fe67e299eff9aa27cc2c2496dca52127cd0f3942e6a6b6e7b6eec448b8ef19007e4a0981eafeda370560ac31aed270887b52e1eda39a2d0f776376576fd25c00eec1f6a4f106a83ed6bcd700fd523056fb1af8a302c8969748bba1df4c178fc215655fde6b86db6166d6ba5dec579d3377e99ee10f58dd5376bc95507640ea1739fcbfa6dc43405792f1b243eb37894892d0bd106de1829bf2109b9fc23a13791ca6b77b69879a07a24f50aeb94b862d37fce658030032c1f235ab195b02ea48ac99ee003fbb130a8f6d545e88578e87f055344eb1297ecde337c89ba4a6ebdebc02b51f54a624800052f854ecb4c4159f9d5135fb0db2daa06a0a580d1f7a75f762522877ad5ccb2d6f5b03e0a5014298a620357ff86b2b6991370a83a92bef51757d4625d3e1a8969cb4a3590f74df9112f1f91b3da8d1d5f049d2fd60be6dc5abc452d1b0f5328d24c68d0d6a3bf725ee51977f0a4552e53acd0a27d2790bff73892568489635d39680c7fd10683e43f42c56f172c673b3ef600ab7ebd741cffc7005863c2e7341aa16c6b8f991c158aec65040f607c9e7effb9b7f019f07a48a20e57bc01b86e115707a98862c6cbf00258ef440db3de4b0d3d45f7a7871d22d064b6f6fff23305d986f20b3933400ecdf3e411f9c8371ea9697722d3709d3ee418a5456a5875f39906e3a305697a8c6598c687e7fd6917d21e7d6edda442c57e280ddf12ee5a29f8cb97167695b8421dafff97a07d40506403fd8c53163226c60e46d63258dfd6edb2f80cdc2997938f0c5142eaed0c4db288ce8f3332b3504fc0189982bfe714992436cb0bc3aea941e9bef46c9495a320b6e74e1a7f6f3ce6a8764397f4da1a05fade32abc11a154dd6c31d31b35b8eca5f9ff941397f6f759111eb6ccb3c1704493d4c35a51acdeb00dd1d307e5a47e7fbc475752f44a69451ba1638469a79ab922951c65c6cab3aaac90a8b10ad1eec98aed7bcdd47710ae59636cbd4736208965e2b4f53778717b3c19879eee9c468e6f1e7d944c2b47003b606395e6df938cb100534fecf70bcbf22700a716813bfe8ab9948ef93220440ecd9b86b225ea8a8e031053a2e1bc153867f7351d8c1b4f99d605e1b3ae12833a1af3ab2cb9d8bf846af9a16a6da17bc25f05cb0a1839e4a105dd8e94994ac25159b6dd9695d7d50635c808926cdaa6decb00541faede55f6bc887a4a0938ae05faff2bef45d02a310c3e3e000adc54825f344edd54fc07c99cf6f064788329834b476ed033de62e67d0c7110282e134bd09cfa4b40480ecea5844e167601e945c5949f66447822283c947ea3382073581e273283361998578ec4788f10e27e13659bbb8a1b69d2f6b700a965a2f6f23a6b7ed24984f124e5ba30ff881375ca4b63f8797ba9c1333ef9dd4bd737665ca613ffcd228228f3b858891a20983819404002436611d534f466a184a8edf10d74a9cdce4b05bf88ea2d4af96d22b248a1a46c6740f9d8a03716ee54f678a8516e291b81bde617a1cbcf2fc1c085ced5034f7b3120e2e9805fd3f19c2cec0ba4107abebaff6ec4df1592ea9c4cd9a1f7f9290532ae95717cf397209eda9e9a68c96b7d8130f89c7f50e693142a8d5efc56917fca2ee8d689eaec026bf8b0720b12a538c0d550074cbb02005aee5bf9a8a09b3ab41ceddf01dd88a41651a678d7bd73da77489462f32a6d11498a174c442c6ec305273a58e215d64f992679d5c3fe08429e055e7228a064f4c52628b01884808b6c43c8e809b7151d66d81827f279bdcdb5a520820eb573248836b15aa2b2e07ca93dd610c9a92447ed7e3bc566b8b5185581859afeb7a809aa18536f26bc7638647951a9e03e62f6480b34e1f5d8aaa82081de99b51468b39309b7cff6aca671c42be707a023434857838cd89aa651e024eaf861a05ddc20ccb7de25eb904230b909093efd091f52eb6c83fef74a2792d3d9cdaf0fc353cb6a44f5e7b294422106ab30e8c76f14720bd77277ae6e65cf224a4e169770a1e116d42e1d8e8476d60512013c1e1c7cd0cf24bb74cc79bf1b9373c5ae3ec63c2138c84c9028bd63339a8c7cb04491d501b0d105e7c96f1d5048216376de79ca136ba62686ba909ab8567f781711808df3494cbba485fcbbc54b5c06b932782efc89774530d030055a78dd6b3d98161b284cc99b2cc652ffe8b285c65191d74658dcc8f266b0de0150f3ab2985af905b983302051f8295a3970370915bc0041533f0ba77616763425d5234e14ed343a832c23c8c7936b45c9b54990860e6c119b95f50e31b14748237a9f6274afac54ddf82dd2f07aec8847fae22438c4983f87b90b6c085c7b4295a8dc8ee3e1bad3b305972d5303b1c68a7fcf4c25494b2e997235feb92bd677c342424e533b6da073476c6621660d12741eed7aa99b12da291a25e05458b589d3be5be6f83cc299d7aa1e0026455956c12599b937eeca5d6e1b865fa0d56d9693cb21be592ea2b912be17a59b2d1867e649281b9c10594a08f7020637086a3a51f011ac6a32883a617bdb8c709751735b46268a4bda1914b62ae44e9eba24fbc0df916a897c2f2c3843939e665a20071ca44f22076d5fd1b25167c626061f7c88cf6dc954da0d5bc701c790a4bd2ec562a01ea9fa77b241cc0d46d2032ae372d80a54836c35f7584a1a11d9dfe037d702fc6425c006716017eedd4a55b8f3d6a9b617111fd41a946dd717ee295a498c11f714cfbebacaf6558654ddf4e34cf2e2354dbd624b1ea83b92d6744967392b8e8bb1143c0a84f5a851935351332f97decdbc035e867d52418bac4a1ff47e86014fded9c1d33b07721cb90ce1a72345298b0082d84832a29ef9c3101776f366c095b54a897fea79e84cfd658407a0268228f275762609548578da741b332d4fbdc339e6e42840f453866d794b95d0992cbd9ca2531a4d9835d1c32d197e4fc960a30cc273feda5c9cb9ef0c04b63304f24bcc032179e54a34b35256a61a52f8da4b2b02a534b5361eead3e9c84122f6b53c25c1676864880159c90c57de73b320cbdd008945b0af62f4dd6e872618f75423aced61676f62ea5947f2e6ca9b7a13381d5d25a3c0b91f31873a2c5dd3c572dfc495cd403c8d1b9924aefbdb0041d6ab1b9608b0fbd6f70aee2e40fcd0f163904849a7f2d0818332fcc0cded97943a63b3a9bac2986f415b37b45c2781ba2fa66fd04cefd436e142f41bde4e5c6501c8ef87aa3478d028b4a7e15db8b3ad7985e223fbdc90eb81d1f6216c921440093ba3b5775040967735c4e40386a4290d08530ea69898d225e13c51c977aaa2f31fdc5385e63d641cc3e3df055b0fa820d7ca314697ab41988a0a769b5426fe722a87f4adadf106a72d665703f1003ffcd99aba31204315f4c78be0ed3025e3aaa450ec011094a124935cfdfa46c2352be1b5e90b7d3a0e81c7ab632e0eefeb916c457b4697018163559b75d47918dbf4a68220b579e17a4c0de986887e580b474f25f171f3e129d0ca409b23ebff7a0fa23792134d7b206b383358bfb14b15b0bc08e459d34bff6cbd8b730e29a1b89d98166508f3d477019a65399989d2a5afca3df5f739230ba0fb303e413a417b80ce30cc13f798c683cfb1eed4366c9490c413720bcd6a0e3d158a821c5b212523d37b5b5a3a1b2580a7add8365645051bb14cfedbd5e9a165b5e28691d09f070b333aa0bca124dab221067fa7bc2a491a0e53fad754be023613b42de936261cfa30f92125ac4a5ecd10049061757a3d1e48d61c1498b12d41dad887c0da06ab40ac440471afcd523a87dc6a4a21488a1d79683a181dab50c5b7e080104ae5800d42484738a6e9c19637575927e31c2ba36cf6ba4605f06ffd3e85379f6ba309b4a72735b75bf3ca1cc212e076c49a1793654c7807b76f06ecbf4f9179ec1213d53f0c00d84ad4981de14cf2f2da83ac277db5cc836475e4df8c9575097c7a6d1acc5f1356db691e2229a248ff88891f4a59d34bd02a20c615c15ff580f00c4c813e793af7dcc12cf638bb9238c0886b28a690089ec5f7b3441cfe5e879d9df8f1b850daa3ed51585ee57bcf6535aebc64ff212c00f2aaa6c1f83742444bf365ef9643a11a88fb948db19c180a22c876fcb518faef5d6ed0ac2efb267817d789fcbbdaf6de74720c555da488da0212ba568ff260200a09fc073980134e72dcb630824da9d504d25a19b560f8a8e01fb6d777e2f50ada6fcb46e625244ba98bed0636ed582f21c96b69f888514594fbd3752e68cb785e6c3c155711cae52efe3b7338df9a66fbda0c126960f60063f57248b4c0a225c43a730ccc06ba4be256d295a15632dd5a4b7b5eab554d89c13edbdf68b88d9be82edbcecbbb3e8ffe6d56c29f11f160d8988c88fcd3bf661195dedc6c7b89107e398604f1c7b3e37b4b8d64fed4cbc725b3d50d93885060cb6c0b21ad72fd1447e41a467d40a2c823ec4f370bbc5810bbeca10748db384ebb114fd872cbf3faa09990a15cd1024f7e3d492ae7ebad4f93beada2c1fabdc16a80092102223cc549316c9febe1d75aae7b3b2474d24f006adc8f7082b895580a4fdd0661e9941b55af57990a8dfca0374245ebe033805a3bce0231d649c91687a405198711598eb86e017b1fb7ba1c552f3759426196f916f4e42ec5e20a91275fc20a13139c608fe4776bba9c436d520d3258ea3545d117cf52d805d3ac377600f8bc6ff2c448ea44cec89c3b7c1d1225d7599eee87954f0dc07d9eeec99f03dc460e8a901835f6cd989dfb67e035c8056de067f134dbcd4f9b6117820f404b7f9e376e2b3650522b9a165607a7e0a2dffbc2075951be7be8a6e2913856544da031a86190e8a1e3ddec6d0adaab69ac6aa3121529c44296600c7df96583d048dbece4b95a9ed6f7bc509c542bee21c9c9b07d6dd40d9c129c3aee7039fc1f91104c2c4dd685002d449a21b13af6068c1bfa530d04ccef45c9b0515d03cba580b1fa04761eae8c7537c6e7c2d81f20f3b14bcbef6d122fa81b43158971ec22ff62eef6247eaad3b04d8580cb48b6ca4429171be18d29ad455ab144dd22e860770bfad16958a00b9d65a5b09d7df01bf42b3670ae5871055201c6802c598aa53d3b28dab3020bc2c4b84eebe156ab70275f7e5cc1b9608d037343dcd4fefd70b2e4f83a85ef10218c06f723807ed7284d6823e027cd6ada2d54271ad40c1692f36ae12e4f2f7c969a99854119cb1bc0bc8bf42d23d2ada9fdf46dd0b4a29796a954e2dce5eabc5b84eae9ef03dc9f3c526bb8c132eadf92993e9ca6a7417a797b5ad868f4959cb3c1f8ac052a429a3c57ba7f56e2b1900ebc78f63142a9340b20562c288f3e8b247f1e93cca96d07d8572505b51594711feb6435b0db9a7b5b715a12bfc7d3cf2ac12cb2f081b79bb0305c98a67994d18348148f007f780155123b02ca26009cda345d0d576de13acc60793e97c07d76c3b9b16a0a4ea3d4ab9e6990a8e1a6624792d2a1f5563e246fdd06a971b6a0a4179ee92812248000964ed5ad2c253dd904e3182179fb01a4fdbd5fbb0d6cfcf63ed7ee2d8ef0c15408947b09220e4f379e43359f2997cf27d5cfd2029e5e766dba1206c109fa391df9fc2baa9d7c66c5a416cb1daf83b74a9d5277dcb82a24534b0a3184ad1b8823eabddbc4701970c140b345cf13e10aea8e7daa96e5405fbc10959f580bf2680b85a1d2f6cde748497e9d522b0a56ab484b49a78a0a800bf3f275aa1aa56d19fae68cf7a69b7d66c0810b0b0f9b12a3753b0a94110708e1535c60eb8f69d1044815b24ec507183a18285c74b0b35c0216a037ee0ad127e2e1ab895b7d6428cca08ce902b75944db45ddb00e334e3b6b34350685f1850124077362aca3ae0519d0f20b3df6890f0cc10b3189a39bab5c2b3d3686fe761522f09c4e09c1a2cbead6923b309a853cab3df12f5ccf1c135659ae1432cd59b76dbc85ab4b49b7fc6ec6748389724d58ebb4cc8469dcbd2f32b095634238b8458149e60752f432391a5680956546528f5b1f41778222bd4816139c3e6580438862e9657acf4b1b8bbcd6a8a1babb8149656c1b4748f4505667ca9a1f21626cb76b8c76772eef25b0c57f20784d6248144745ec1ba27dc9a46945b7a00d80c16bb7ccc2ee8ae18556f1e90d6616bcee8f30c741124f3cf7e10d07f77f733aeb706e9bdf76f9a0c334a0da49d1e20b57605c821c4f7cc097466dd5824f29b522fefbdfcad55791e18eacc08f4ae6e8c0ff9a7d212067e7cba224774b6aa54750a95a214047882932e48c72e74f2f77949a883f92c5f61eb6299bab83a511254e14c76605b126d81d9efe03baba791559061b3fa8a2e39b4578b767a1a82189631e7361fc1b18fb06011da00156ee8a48fbf7851f4b53e6dd600e7cbad905024112b0fa511ef81aa031d00fcda7419f1e0af6d17e461f7cda6aec94523761bd404ca46fb72db7b25bdddbfd666a2fc83ad53c7006ecc6ffcc0e3eaf0aed630be66852720ad5a348c1b810fa6afd7c756e8ec6532c264b372267529630204144c68f1a9b7a73e86d20cd09124caf0348ae61561a8ff8a987e7bb22604eaf66b4414d54b2b7504d68e9f47f4659bc170d5d3ebb1bd0ec160c95d8e6ae331ae17c89d9364b0adb5f34660f5072136eb7d0a7ea6a607d4a11657bb4c9b050a37a1b5609922019a9420b95ed01285023b326d559e3e4b7e2d6789b58ef5c89eb201eb57ec37ecb66ba7d6a99e61d53a88f993f682ff5072596a0a4d98c160ca6a3b94a2021e74648a18ea9b1639d1675910cd9fa52219ab52a6f5b5816c0b0e30546db574d04f9cb7d673d558d567dc0024ee8700702dd831d2fe00f071f03a70010e8ad58fc0edac145d808a364f777d4c135512f9df099b21432b80aae000020d96c01bf0ead416beee5520f2c6345699926307985916c69fee735adccd34b764a5b987c3647aa85751e7671b74f9b95dbc0f794aef812ef0fc6dcfb28a7e7ac5b2c20bb308d082e719afdc2410a33c72ec0b24b5953835637d820ca57b3d532dee22c1db829e91321c151d951e96b0dbf74ea907723e0f760e74768c25bd8ec91dd0f991cc3c9fb25794f5a2182009b4273e3d73cd1de9b7759ab98d6910b2887b35b83dd15969aa329afb47f035a87b5ba0638cefa78d84acd186ba9c91af6193af440a7a71c881f3c9b0187fcab7d6609c8528c8bbddd052a41930433cea2aeb5a91f0e720790af804e0b6a76aa8eae15bb04f3849f7cc20ad9c65996e78081ff25fa80b1cf0b22c6be3c7ab24ee0fb034fe743c2164cb300ff7b478b4a8cf9269d29ce47f4b0fd44df15001b67135969b82144f63c0bc68dac3d353ca32db446b60057589f551de14bb0958407c69566b97c6118e77ca9583838f2a38b8da936bb7ac43f3830650f78c3e3e37031b39b978e538a5c383d8aacd04f8a8c372ca93ea70400537732debda654f119e8495bb9221e277a2ce5b3bba3b6eb262e8ebacb9ef4a80a4b671a15120f5de9d0f8a12500bc6e341ede973a1eeed43dd9ccc6e735f8658e2af7b5242606f9dc8843edd0e5ba9878a87fda4af8644f75ecb418a800784a201d002558ba68ad4261ed3429d8f0a3ba071c346c5991afc35b28ae5fb452cee292f66c7dfcf6db811282d7da05bb7f84637f7e0634e0cb71e3e730cafae5f85adf24fcfc7f80d336cef06e80b9a403083f00a18086839d78d22d5b2528881cc3526596449505602e7b257c6e61bfb34b09f77d581155b36e7cc2cd8a5386ef6620dfb735d15e622fc5226f502c9dfa8f7cb29329b1ed2ddc2fccf3dd7088972032109d505e464043db582973a0d2fa11bfd2923a3ec597d2ee149429fbd6a80dab96a44c849026c85cea117782eeca9fa8ab076fe2e3796e7920e7e0c3f468401dc8e1283ac224f0e069dcb68e1599f9e3b366960b81c37668deb8a8729f835f7f772490c264f77a36f8b822ac83b29cd56b209d660a38227d50f51e2e840890bed28712b7806a4a3da713e5d2e3121826f952e5cccf138b6ecb6dcbca998a62ced925bc57768f0fabfa3b0b49c5680687cef81f80207a16681fa0ec05f8559941be815279888c38aa6900b776b32bc6b0cd3ef8c4dbecf4fbfe608be77e964e98e47619f6578dd198bb9bcedf23c1089b123807d3c6a1a4327a8acd09ce77638baf954ce3da0e8acea9e092b4a6ec31920d827149896036732727125c3c41e39b664b909ce4e166a2890d593a279957e59d5762a6482d81ce26a55d6c1a0968b51c5b8419465b14d54103caeced906805048dc9cbf9bb4fa3ed47866f10518a805ab8ebadf33ad8b6cd7e7700b28885b1c2586f5a83a1e65d3120d175bc444d97473f341055e3c2cd5d2357562ad3f1a6be983ce6762c51dc185cee71fda633498f62abcab51ca5ca7c490573ad0af852c4b09fa1f75ee79f0bd539a5ad971fd2bdd4c086ebaa43096222c338cb284d57c0d9a1f23c454c4d0274ea18a08b780ba681a3275c36d7358a3fffe859664ea5299e75d57c46c395cdd1764a0be3fda4968fa7aad2bd5f530d3c5c9a5caa40e06a511a5379e8c33c58baf32606159f6987ca662c71e4f0cef478e531c4fb393d40f5f506457c50c93ddeb3a1f769793564d825bad99be2a4c68e8ed2bdf11a5388ac7f9f68fd40d1df48a1f350d6b1c7d944e010dc231330172c46fe4c70111ec71df6d88d30931aae2a1c24fe1f4c000346ec7723bcdfc1b436f87cc295d5b130125293844fe21624e9413a131ed13cf31d741808a18f45c07f133b7e737d5c864390ef315c0ef468d4d64f16cf8daa36ee95abb94b9b9da12be9256f3efaa760dbd285fdf730f248ba9cf0b7e72a83ec97d5b5fab78afa5685daafe25d46809f5c7d6ac830da207cb25195c1347852dcfc2e683aeb6e010187e6828bd0790b62eb30404cdcabb6858c8dcd676cd90bb91a95b0b2d3439302a1746e18ede6dad473e137ddd394fc7310a5bf7d6e096e22b44c5ebecefde295fd5517ecdd54da674534fa1a48548862528e81f8584736328c49b530e2d2400750cde21dc66c1f8fc00b4fac1fac526500ffb34cf682dfd81b45cd4019d50249a956e9c83ea427e59935906bb94e16d51a77b0c3454445f487f28cac73c730099355d48c92c3923e4aca76242e722ecf518fe046d3828ed30e5af96e908618a3b89d3080a13bb589612f56fed93f87446915f082e70b02103afb259945c740bb5f55611a10baf5966454077b807300e9fea3bb0ab4be170d4099c61e5f3f6656bf9e78bcb952a6cd441f9cea6f3c771d5f2115a3e52d25c143a71fda9c4e421f99358b46653e62da93278e7a1f09a460dd30e001e461c08230a3a21924cc8375a4bca90bc9c7b6664d216246f7739780b528c59c66a168a9c925b31d863261b9f8e652b334ff70955fa2a46527f126eff52022e0d25b80b6e3a407706ae14ab905810276f668922160d4b3a5acd0ce12fce4788794cadfb78adb5479716a01309840d790471a5d7cd98804886643f48ea3fddad253b69355e039332bb55a346ae6e50fc63b4ed00fae76b374aa5a9b48d95c73be74362ef424d41ca1faf4d8f5b38739a4a8aa4a554ef1041aa29f28e4e3ad55c2ff6322c0588dd37151a20c0b45f5d6acb908ef555d12208e7e0b2d040cf399e16125d5819828733dee17a105f6050edf19b44dc94443801607bb3354c3cb740c5223789edddc906850e8af435a746f12a8875d287ea698670ba675c6dce97959e6c46b5ee22ef560f7267105eec91056e72e434a01e22f99cd59d40d864868fdeb27a1bcc8a56549fc0fdc2ca9eeb085be5f5ad2eadf15339cc89865e6437676970717035c0120eeb31692c86693e561088ca800e162f1c92e87668cb42e0c0832a6857978a829bf2be623d70c4e3995ea9cb9e4477212dee0886bba40b69a65e372557279dd49a8423585ddf774e9885b395f383a5445769f80974a5a9f94283f2f5ee47a525c5505a3d8503a6a4879c72b00a2916f0ac3efb85017183fab252162cef59b10015fb9ab2e2d88d873d9408c79715960062c8cd97b013f47c952e303f5b8ec82b10acea51d557e685d4760db696ba85f93ea2e411b6ab300456641845585e1a3c5f4d232831a99c43df49b5ffa24a1d82c3dda9067a3e0ce5876d8eb9a09c03d8117042245e8718c2589761b2dc86b27e34ca06cb5b38471a5512872bfbd7d57cf897c22e7b38aed1d3b225d3760ad039c4bf8b4c4360381549303c4636a70caae8bd6780ee9a34e1df0c6160f5f98e72ec179194cb48f77f98b73d6153088a5a85bdd601f8a2dc1a0e0fbd0b6c75075a1ec2112b2e2041ee230223d8dd5b340f99d3ea2fbd33a2fd4508b818c921e79e710a36b0952f4b4f296320ca880a8511d7e987c3d91f6c2e6fc26dc0c01ccc2c5336ff729ea82aede6066ac67f3f3de5d7b9f6ff701cb5e5b5e8591542d95b918ffb10a946d15d604325912d1baa159db458881e7ebaaef15b58ddd063dab1581b7c8118e75d0330046982dd00391f704d5917dcdb61a5abdea2a22cc88fd5287c7eee6b06ace4374286d725605290363b6755dbd7281ed784708df26e4a351cd287a9bd8528799d77fc722a912f860f65e27a345bf624cfd872a719375ed91db22b178366b19569a114e59d9b9e5db0cc4c3484d1d3851cc3897430fade12115ae7b0ce5b9038a70ec9f0f360dfa1bcdd10139cbc129a4da23f5096165d71a3aab6d2483310ac547da9a73f985f7c736bd29bfb9fec43f73d0f3ebfc9c8c38f6d661d7c59684196bafc72120d665413f6cf3a62206b8a6e1f665242d68ecd54cb06a738ecec1f53a7b04e52fd7d48ea719a05da81e918452227fa8cb0182682dc8b2d754b8eb88f80a689fca829835fa57410043cfbedfc524941babe32531e5e8cfa77e0e89d2e32d6ab7b31446be2882068a8bd8d5034b8dcf14692a0a8a27eb45f6f25a199d14e04c707b957bc10b116f2b4c958e1ea8bfb65ceb1506ee12a698588a685f1a495d791257852f45f10014682188db8f9aa05f26f873060fd37c4070d3c4f4b4964056d548abc3d5c502626dfea07b2a91defc2d4579d32446e37bd6ce794a209f7a52c31cb134353c5a4f9c06b90c2a69763ff319c38d1036f02425e859f02674ac370b5acf8a38b6951a73b2acb648711e75558cd1a3951819274b21afd352064720e183b42bebc1df71cfc65940b428e7318b21ca6916a67872aa6d23be7cc014eeb7c7203fd1c3dc7eef9e30d372b85b944bf1e58cc90993c90e0d417ebfb022f3611b4125d0f1390358f88a0f812a5039c7575752af8b2f1edc13c55d5ac19ceb69a49fb87a6e9011d4fc703c72bbf0094fd96a39c0d26a34972bcd13c1301ca38310a523c34f66e52a216698eaa181a99f235b29329cdb3f790eda093d9c0279eda6f132d30c9c90f6bd94e079e86b57b382acd9ecdd6fa46714a781ee3148148f52552f4dbb7f8e251136e00f17b613a31fbd35f5bb53a3ad76b39b5ba9d45a19294360a7831392e1aa4979e76c4cb66075dddd03ba02d1d271a0f93e48633869461ed226d284c528b17f76763924cc4edf5dab2364db706fe38ada2d0f563b4ce2f94fa28b10c9d8b6f9d8227a4a557c25aa78b2e2e7be1b53444b050d6e7c5ec4b386a74fd4c1496dbfc3b6d7ee65615dc47427f3bf532155f363236e0427f6a2525270c06b8fe7ce0dfeb9fc1603088ca02aa844c6008638b5418e3c16b53b0e2d356730bffc4ea7afc983517fbb9369a55b8a0431d256fbf240f437d74da3cd06f086caa51dd287d8d48dfbc761ad2ff44152f937a1c54a3d16b675b4d50393610ea8819823b2e40ff67a250c3b2bbfb7fd4f43c6d672b6388f43dbb0a963cbb1b70ec07179d6461d1b0379245a105c9574d5f9399a8c7db1274a417a208db9cc44ecd0cc4e0dc9361be1d446d1ae746975294808453bbe622bed0cfe84558031aadd0d7846c6a9af82ec6f79ebc11a5c2b2936494f6208719ac2a817640c5260279a3d8a34c02e5006832a0f2e6abd6fc732840b82486e7378695593180841a14e6d5ead5251fee994e7acf050d48bbb410bb9f99083cd14f3b14e067626d8d046302cf59c2f3e37125320c63ca94c6636cf8d43d0a9811802ab705d8eeab5fd4114ea41c14b95ffd8daf0d929cff32ae5cd0e30165b42ff583cbf0d45958295aa3eca4fdb045316a45623ce321032ab48676c3c806a1eedb7c600fb1c669484c2ed145bbb9f3d2b9ad273cf97c8333114d1474a6bbabedd4f33836dad16bd33d9d7f05f075b8fe04aff1788af897592a2f8b758ffa5e79705e8bee63de3ead56ef50d615b763bd6b8462fdc9bcc17ba39960db25bda454afd23f35aee9e776298f031e3b09b873edc1c912372a60802858be212a171502d3c1dc68926c8b7abac63dbc69c1ad5cbac64eed3d2e81ae1928ecd1e00d70864e25b9805381aeaeaead588b059a35e05943b1ed3dd5605dda07bacf2a2c0c809c30bbebd9648ae412a97397dee46d0dff23a8524320359a4aea219ec2c5a52374c858a18c6d8e1052ac06ae30ea6e2cac7f6d81205720b16ee2d5655ede6e720389d486277ec4ebdc91ef6570fe344a769dabedfe4e798c35a0b4ec922a8bc71739e56f7ab9005a63006dcf6a576b8a687d21804cc806cb4160346a0d8a9ae0a744e51a73c3f53d2730f5429601e53144d34722a07171391dc1c721ae0560276d8c9206eaf79a40f15ea47b2e3b99ebdeef3bda523c40a42b5df9e588ccd9bba9376c368a365cff892119e2beced182c91a1c609ae68c7be8708cc9d72a307424510fd5537c316fb24a8bacc190615d8d4630d4c7a307cc0d8410799bf7561c3b38aad5f23d441b215ef15e301f26ee4cd7470efa696bdddebf100c381d5595ca566b9a2ef0c26276ffe6f22e02405c17a50f3c2ca33e4770cff7b753265de2ae6b567ee3368b5c6fb335ee452530a105ddad07d5b2868782f034a04d9a1a9b275af78ecc63a41c03e25fcdc1e10b6425ca9018a86083ccfed837a2238620e0563ce82d2ad19514852a7a3845b1676d824a821c5baa53d7c26daa24f16f303f95050e74c3055b436dd7713017812ca4835a4698316459fc3b0e8aaa9f8b6f197fd056a8f1b4ad162c66c7aa7f60826b1133474e7e4d0f91093e8e4dd904be0fb8230150e188ae0be31a839030d53650344fa3212ec7848a543c82ac0f915e04cfaf20e676b395e6e38e97a7074052ef58c03605c0b9c603f7b1126bcada1173098a7d3f3cf6bcaa0c32bae7f91b69de68a1986d8f443f3c6923f1606f01c08e9e4a48d11b44854f18aa651e6433d68e8d13882e47038eefa1ba884fb8b9b4b2b86893a52eb0fc725148ec1742b1f7459da3f8282dc8554a8f7e110ccde24471ac74078218a72b34d474efd53510962ddb6350ad66f225322dd89af0338adf7328a45d1842a667fd13daacd4e4a27e7862cf37af7b676880f379c4c535e1c43ebd4265a5ce6505f12d4e4af8098598461c030243b5fa960834a2de10b02a08273bf0ae07cc74398380e37716dec17172706cd64fcbbe3eb4e20e8bf0473dba9b21212959707456ab7c05de811a2eb8543c56995461118cfb8307ca4c5a358487e42834870d804ba512d4060a5d51a67d55db70a072c945eb74e91d5151820be3fd48a0ee332926abcad5062f2c2b57802c8bf81d534856bd77efb2ec237b960ae56cd43dc77d578ddcf3940d6f0f02af96e794ca6126e142000c1a57d46979aecae6d85cecdef669be7be7650404cc663e7969bfb0293b3ba42919e72a36acbd7c005411022c2a7a0fe114157646054fd3e9545e1080337ee0201bd3912d2cc68a32eea2d26406640ec11cc8cab382858d3235033ecd34df2adb58dd3c5effad60b7d6d36a2eac1801d74b504931574745c45820f740b77302d1c400f4784d3ab9d8c222609e099f6ea6a9ee8cf757676b73b612449be8baf79bed04b3f9bfa2258d7526878af14d75a4a2ac75b81f9d9995145da51c037f990ea0edde3d0e460f8f52fe315f9c1814fb7564145d3c0b67885070a8941b185f1691f690de1394baaa3fc05a12978852e7f638983e8ae80d49ad99bae2f72d185c1102ca239daf69ad02a2e6cd0fe3598cf5f3ed2728fa8e0134741a7029cb42ed1d8849a2a57f76a66a87ea240c06285a276cfb58b204aabf05560f1e5e182e10d05b5ba8b78e988a1ad20da1193958975112a44be5c0451df54c14ecb7c2aff55e12daf5ed1cdc9d04889384c2b11593a20812600474d95c2fc25e8168590f511410ceb938646d8ac1c9aff111b26188741089ca9c5837d34144ce1ff8334758edc6255b87a4c27abb01b344dbe9549c774472c31153c215ec4e8c5c8aae88b1a7f50c54205d352e5adcde7061e1c9fd75968c0b7cf21e18286ce901e29dac0d9ad5a95813494e454b4e9e5515ecd4327922d534e3848ea381241a1e2be396aabf25bfb8635faadc0d0cf1cc4a2708531afe9daf22dce0aa68a598b10a89fab1789449bdcf743ce4c896b023c4a53393e1ecfc3bb33d574b5d3b3a1df2bd3b06c0ac101599b203e0be8bedc20b819e0473fd5b34cd1bc3f289b404114390f0e44de87e9cc7af56b8095c373a880306f6b496a076f7d751a969597262280ab0ccea1087e6d0e31a909fe1bc42e771d09df7666df9058ebb50805a763f99aacc615b6fb79469c7c011f04b367bb757d47e714b11365b56549794d6c98a812b6789a41bc6597b36d3d5cb49ef1841cce85241f404215999a8248170ac85d47e16dc2dac51eb173c73291a41c62066a559745d6b1030aba99aa2cca1a8be6235f0c466d2f4df58b798686b6feaa550a8897f34e0b8b385ec2848c744e8beeea187c056abee95d19c0c7cb2621baff4766787de6128d5ab7b745a084d3845f1c46020647633a8f1073a9e21ac87ce107f34448d1a62bb8688694320dd103738443d0e31640e11a54338ec10fd3b042f0f1136cb815f417958117fe0c311c69103ffcae221ebd2552a2bc6181287c69ecdb9df6c7d6c6090040f7b26efff5a8b36220de1b1b1059cf5a4e36480b0fe6456bf2e798537404e6d603105c1132396e67dc5d74500a8fb2720bd2ad9b76ae4ba57b0228e8836a404254a9d0279e9c27361ec5e328c48b191a14554828edba3461c39e1e2a2141969d78675b7722df0cb77fa725314ac6527f07051f41b9698cfff8359e003f74f932db8a36b1e678dd5ce09d518636c6eadefa23694021f645c82ebf82757d15896418020d941542896852707ecd9831d2f53cf209fb3598d6c35466a292619efef5154f48aa9e6cacd23db4d203ae1121d8ff21aacd1cf83e15609c17ccc585af4228b228f1e087700c0fe48a49e1f077600ad170a6b115bd73e7e5bced8c39be3ce1bc28d2caadd4b96dad1be3c84c95268ec068573aa425c6004ec8098e7909bcbd48baa62a40f2dd1f7551fa19647b90948dbcad2786b5e22f205a24652f176d6488796524ffbcd9f1a340a775ea18b6d7e45ba4015aca203d02b6f26d9879751a0c1e4b0c90b2a2d2dd24f3c6d494ded5803f85c6f48c8ab3181d33f7139faa929af7c78bcdec25fe2297149d0b44f3ddb0d41798a7ea3dd239009f8bc0276964fa1b72b934b288a45ecb90781698d6f7703ba97ab5d4631f01f1b818464ab0691144284a5f6453b42d6942b4db36e15f8459585a55874a010e480e7759b1dff5135b4bc85cf2fa925c415c8a7661fda3c002b1ad6eca67b904577641c9e227c42bd1660cdf6d98bad9f138ecf310acc974b86fe630d271a385f2d4ab30e4d9d698a487c04e41e43eb6ec8b5142f1f4a3356d9a55868e815592c92c7e17b4e079971faf4bc5bb560e6dbd237bfa12a02c0cc2c8c759b5ba515085bfc428f9704876647c99a85679563b0a3199045a72e2572379a8cf20646c5313eacc83553f235227b267339280f760e24f2337b2edc5c1c722e11f91c54b7d53eacc1a70a805289221a81563e90a279340b19e4d4ee5e46bd43663a08e9bff2837a2148c8af941788fc8272cc736d5d9c29d4035eb155aec0bf6999ccf8c21d286d858b20e264de74d25d9b7c7d2c35a5e124d237586bc7d02e222a399d5861c37acfcde36b3dfd9497b730736ba8db0f0e86c3d3515163ad77b1a20aef736c5a0c7ea8cbbaf642788e95fa398eaa066096ceb513d62e8dd15e48a404905850d206502c9cb5b4fac8628b59da8d45000e145c45c2b6b85228e3186806976ea247d10f73b08f0526a180dd8e41c512828563c92fad242e711544bcdb7dd85deb9314bd3047033d5444bb7d2f80f8da372342d6c7045f97df018468d9363cad7443b41082132a9435834aeb79dc0e72d0e1c077f5c3348de8270a1ea20f17f85a745a669192ecf36cde2efdf3d32a9a92fe1c86be9792d58a6a43eded2530e306a54187505a82d58d47bfa72f09876f9fa8162f5310854fb510adcaaf90343ba71b53fb2857e0106036cff078678a0ab988848b7592557d1706372f7a026cb5049af59fc555201a524d07759604ae508e3931a6a37643facb915b127c95a395a82916f68749c3443bf996d62fce3eb0302e00e0e004dabc39fd2e64fdd5e68750dd5ad62a6f33b125139f8f26366b2da4edbdf7965b4a995292015e0cf20b3e0c6e303199a0a17edc13dba81ffc09e2ddc7ac464dfaf13af5b4e7a718a3c6f588dabb9c58ae1863641e8ef13f59be82b180304cfac59bc7556e8edbcf62af9882725222d59188dbb40c9b260f072885eb837972b03461661e162c96f4dc8f7998802f0e83b074f047436979f9df8ed883558b5502b198220d97b90855d242157f0d6fe13a7be1c219162be08ce90aa659e12c180a4c83f2dcc35b5cff380adc84b9e02ed887bde02f180c0ee3e32adcf91f67011584875992e5f94807691464efeb58369802cecc8ff7833f16de6993b43c0b0b0b0b0bf3cdab5a9ee3a4651e1ebe02ce600167e6fb33934eb574cc6a13b3204b07214cff8a4a0aca49895447226ed3328c5e5346d82d272085a611a1a6546d043dca8b62dac68d2ae9042565e5424f79151515953672129580dd5c3fe46007210c640803db7366286802a8364adadf460934411fc7a13ffefc160d8c2ffe05d964f28770d4a568f7c997d0bfa6afeebbb3933d2294813c28ce6187467dcc23871c1a75dd296c28f4f133208ab6d7280d7afd1f0e392fcc2e8410421513cb85292b2bbfc2dccaf38a94524a151595affc90ab697ea690fafcfe193823bf9f06cec46f1d5aebad511a805ea320ec2232800118d39fd90b40987ecd5a800230c804240081446008f803c2f4a35821828040fc00694c2b70a64509e6958730c5839db8fd46c09995efe700a449f97e217006e5fb8f803327dfdf014853fafe0fc019d2371d3524c37f908ddbb00cb7e1196ec3366ebb711bbe419386db6b30f9a0b4561515151595a7eda93c0f955779c8ada8580f854b245b47fca28d5fcb307eca3ff9a5b389519a6023ec5a1334b8e36b9ccbafcd2515bec69c0403a8984b7c0695bffb8af89a508748d6698f736e50bf5e697dd328bee19bf618c94dd7372b6eb5c7bf6a337001157f36849bf4017eec4ef0c6336450704eab51271ebc2f338e24a33d66a0f63cae97f98dcbff42951f85dff8110a62a351193f93c1d0c3b4e688f5d0daa63d7e8cf939a851fc9c46a31e928149ecbe26e51de8cd3ff0859f69e41df6e98db71c68f1e18e4f06bee7a9d89d3c3e3fb4a66fcf2dfda27e676a8fbda8f03f934c0d34d8dddddd8d83a9b5d2a431718c0a156ebf6500f4fa2704e3f607b9b8fd1142e1f6b7c099054098fe7e13d3e8f03c1af5b7798c9ac02c78401d57d0a123871572e4c031060e1c2e3f2e2e27314ea7962ab4b4b084c1c26202c3645aa1c2ca8aca172a2a295ea4a4a0f8a0a09c4ce1e4a4d445a944e28244aa4d6a1d49613412454124e2b6e0b8ad67db342d342d834296615960186542e985c575cd2be69456c4e7c131de7e06c019f705c0996e05c0198e3a50fad1b32974e76b10c2a903386b30613055d0dfd4a93ce41a973c03875484bf4cfa35cd835a1ed05fe66b14eb15f694aed1ba9373ee8474b25478788a7eed3e08449a38f0677eb067fe9dde9d2bdd2783c44482714c3c1eb3c944629c0baf04f2bc7f93a95655af7ae5dd2bca757763230b6f66bb59deab6ef58dbf783245a584723918275fff3a39e94a9d4a27bb51edfcc77ddce7baaeebbaaeabb7ec21777d4daf582592e0355c952fbd7695b6ebe4e737f703a75193e54d409e32fd7c19e429969f4f229198f44d9ce620c0aad1c7d6d146b675fa47e507b7bdd6be515aabc944facf939c1210802aeec92eaa3f6bf78fd1d7ef1e7d4df7aa5ba76f66f7dcf9ed7327a9fb7aa7fbba754fbaaf7f1a88f4351d8492d27d75bec643e8924177fee3f8ea2997bfaeeb33ab44be36729da09dc9d9d8e078fa362e8ffde8f4437b084095d69d523e7b232a51774ac91e08fdac23a224e589e0e84cf4533a20181197095591c75392d25ab71f91fc06047ceb6b240b2fa5b59a4c9ba5d4b71e3fb01603ce38956b7cb28d3ba71377ca33e6646d294fb27c55ac12a42f7549e850c3eacad7b41425525efe666de8638d867a6af99a4e89576e29165ece4616b5714725e6f8cbfccd461c7f996fb25127b2fc653e0b25499bf666cacb27bd04f214abe6a7d89497389e9240dd4769ad26d3bfe7c9c8481c204f451e7f994f69ad26d3bfe7c9c848a0202139b4bac1b993a5f235ed733f7a3f89237d3c05553f77ca4edeace6479ed2535aabc9f4ef79a5c8f3f1b872e54f5eb673bb88444a42e54f241050a3f8e74a0702be2a8ff2383991e529eee79fba2feadcf99f37238f5b2a95fe4b4f3d45bf542a7df554f6a5d75aa08a4422bda60405c3bec5fec03a1b1bede9db64cf7d1288f410802a9637294179157b22752412891437cc324ef5b9a71f2cdd493e66ea4eb23b0d411f7b20f43122dad3971d10eeb1c73a22d9736f4485bd86aa2a98957652d19e8a4f643244b127825b61d2de3ca93c54dd9c54ba21a0aadfa8b167a58b3cf35bdb921f2795dfde880a5e95ee3404f6db03c17e838efd4a0744f4db6f2a2fa29ec25e45e535de48f6ba29b657575ab83df640b6c73a224a569e48fcad53f9950e08f6a28e883fd6417f51e9bc49ebac56ab954a5aba5a5d6a95c02659b0b0ae881220fef48bc4c79e08fa5c57c49fbedf14bbadae8662f99e587825ab75650e8a85389e9a94f43feee3402e14573e146fee7c6d08a8b29ffbdcf924fbb910494aa1a222c922751287e77b93467d7ea3f98d535aabc9f4ef7932321f8fe938ac568ece9dbe73a7f3d4af962ff7780afb497f663f9f813cb5fdd4fee31f6e3ef4d468f6f861337ad17fcc73a7f6dc636f6393fdf66dd31eb532c85fe68b5877fea875e76f37773e3771eefc4c0eddf9da5cddf9d89440fe32bfa6a18a832acd425566a1aadfa87dd3defcabeb557b737ebb517b6af1a75037d1466813d448cf191e8c20adbca3bd4e2500bef45b41b7b8ed4573c783b9a89f8c4c0e8dea2f76dec7bb830b30c8821ad76b1a0275a1c11dfd9a86aa2617130f1f3c74f0cfa1519fc9d428978e5b84f0e56eeda9687b0e7db8fb051adcf1c5300364626e8f3ac5a37a988aa930a583b94340853c97ef07a7d02f049ce15f82e47e3a6e6331032dee37f2613480ee1579cb319d6d6eba0a55fa37d7c3b198028d93284c1aa94d323b18bb1dde62d41f704687cc16d018c3bde018b7b7cbe65ed7434ec9f8cb75bd86aa439830e2880b703d8a68efbabc466544862061843ffdeba3d49fbe771b68ef7a21f4775ca0bdebbdec3fb75e7bd7b3fdf6aeebfaf7ae777eee7f348af4d703b9fe028d1afdf546342afb0bbb20d0bdae871f4ce35ed86fcf3fa451fcd7f59a6318f6dd67e4e34b998e9eed67e47ea3e7bea69bf42412a99f44ea27919ae14c43988c214c96bdc319cc214c867df6cdf5c834194f0d31c6bddecbb8d75378c6bd642ea73f20cc05e9e8422f6c60c60ff872fde5329e82aaeba10cbdae11aa6e5ebc608dd1fde8854d9eb810aa2a90f6ae24b5ab5fd420dd8ff6aeffeabdbebda8f2fa9185d1526ba3a5fc1973d83386619452ecd94218c6bc1d572784311f2541833b3e171db473689ac71c2ac86c7b085787c5715155eb3228b46de3c6c8f156a85f84281cfff5b38ece9b23106e0e4ec426d38d261493a8071fb1ddd8476c61e478b69f8eaeaf30aa1e46c5f139543922e97ed4657ed84679baae371ea895362ca0b7612172e3fa8b86a0e71c73ed6263e48f6f2fe0ca91a5d6f77817ebb2a36164116a615dacd40dffc59b42792c007896a14699de68d44a8b132d2668b16939410b0a5a52d072d3a2821616b440d1d2821617b4bca005876960fe861b6eb8e186bea1fbe20d9fe3e90d000000000000000000c0f3bc00dc80e3061c29fbb5c4e0fa6b2c262e344b142d1bb4a90b08070827478e0b5e07a3ba58971def54a82c3826169e6fc42ca6958b0dad73793ce47af020e2f2d77717b5bfc6b9a48492153d53b8fe9aece87463ae878e261d934e4d9772a6508528ad9507ce746907cec0db9de8e8dc707374d06df868a112f1733c0ea9f1f7c65c8f281a1ab5bea8dfc5722feac5d3a81cd713be1bbeeeaae2aa019cc1c1064cc372e40638609a165a51525456eae862892e1677b1b68b75b174dcef62bdbd9ee50cf04543551bde7daa0d36989e805eb3cab4ea2720ca640454b5e15dac1195d636e7663a46802808b31fc017ff4c07d0f31c9d8a2d1097972eafb9d81311a596bf6497cf19ae8a5019ae3ffcae317c2b2d366eafaefff505d3a85c61c0992a30cd45c6b585cb8cab0b9717ae2f5c41d7191718ae342e35ae305c42a5561775b3e1bf8dc786676666c681c3bbc56e5a40cfdf64372ca0e7bf4501cef047a6c18182d06b911a70589898139c17b880636036cd428e89bf86d1143ad40061dc061dd699ca802f0e0461fc696742438edb0684b9385cba4f87690df8623a03be8c4e709d836aff8eada73d9edb3f6c4cdaf34675d71b4fbdbd5aad56315039103e2e802ff0f67be9d2d671b17490ccf8386cb4bdf63c1cdac5d45ef35f9d95ceda10a3da22b6bf08f72e2727aa49f9f8ce953efbebca4aa491845756bfc65350b57dc5782090a8fb6010e4915da9c348dd57a9c954bb1f1a46b720fe127fb3351689227cf0c8200f8f2c7d7d8969dcc5402dd2e844e34a17291b4d8b72925d534a2965f6417c780a9b9fd27d100806c12129a57cad04542b5005aa9aa6753636274fdf06e5b12ccbae2c3bc9be08f7d7d3ee44fa9337a2a24f3b22285d91f9d963dd8974f240e89f70dd89f4d7fbd32f7540b0e79eeb884cffeb89e8cf3efb36a2aae9d16b16aab46aa594d2f314f7537b69abfd98677beda5fdfefbebb9a7f331b903a66d93bb28555df3faf936f4b11d30cb412b16f2d15e7cd9d5b86c821a6989a2040deef898673ea461294600691e7e0820ea7af84a409a1d42208de7a97109e0850b39c69f02904606be07206af45f4055f81280a8d2c38700a4c98163fcc180ff03a4e1c131fe0b8050b81032b91fcd859f004853f300883ad102f22000a2b6ff72f8602e4af45f001e00002038c6555c0c00697620001c00a4f1f1288d922b0f83b4778122daf30fc22c98d3283e8244a33e488f08e2ee2c05d3300bc6f89ffe9986a5e018ff53b783699010f298c6081c980070a6023639300ddf708c7f9067237303850e4cc3380b80331c030853c3344376601a267c300d11209886570f80336c0208e3cf46fbc3377a5464bc452c16de53f7a33d6779ff160bdbebc1d20169cfbf631692944fc8557967f94159baef0357e57dc5d2a7ff2171a54ac752b014d73f65746148185181205008063586fd888eac12d10ae16fb6619beb8f725222d51b862206387cc35060cff647a38cdc8f7ff48ed5ffe8939e391ee4258dac907e39c4086c700ea0c73e50727dc9f5cf9e09662010611e5c13c019c6018459310d1f61a6a207d7dfe8a7f63372e9ff68943f90678e07af69239751bc2facfcde4650bc5406eda29777364ba8ce50a857d7a6f6fe8b37fa4714bee2c74a6374ccd23921b5b43d9734c649db9b3f3bda45974cbc298cb49392522aff8a52bebb5387fed11bd26e67a2c11d5f0bddf85aff17e74fab44b5e9df5eebd95efae169f1a444621e20d63ecb5efbf8dc469d7e060339477a4f86f3604fa9a39ec2445d84feb2b18952ff21c588bcc68ddc861394cfb8b171be66c5bfac677df84b7c6a65fc25bee66d16facb6424ed45d1d79f418d337ad2d53110a55907c4d369d262bf5aad569483aed0908ea7e2730eb778b55aadea8bbe5625ea8380af888118e8bb13e97fe4d5c8788a6e1fb33f899152a009e42f25cb97813cc53cfe129fd25a819494ec0fd9d9d870bf3de44ea48ef45a06647b8dfbed491d10fada6b1d11ece91b512919f9f4eaf6f6da13413f639bf662e9a1ea54ea86601503f51bf14f3a5ec5ae96efd49e7b20da731d1125a527e2af7da903923dd611e9d69936ae6e73bf3d11dc6f5d112540fab72fe2cf3d11dbd3ae483f695e6dc494ce38e31be129ece9c747c253f2a3e9c2cb3d3e37c6ebe563cfd1df7e5a0e6a56c41ae7c6cf78e8c6d77a752304f297f8357dc9b4177f761ebb51d9bf554212658d5883fb9978e0bba3924c3cfc6185a90a5ffa1b555d4ec10837b85fbdfd8586aaecb18e8c342ba1c102d40bfa04c1915e1bbd44b851c2751c2be216d7a37099883f58b567d39e6bdf966eafc5ec3554f4d8cd91c68f1f7f6b6d11c9c7bfaee8b7fb2faec7c597d5e280307287f0657a398c3ab38e8fdc20695444c261a2d75e131d99af44bc1fb3e6bc419d3f536ea166a5775aea7a8b926e52a0dd3db0a73ee9bfd8ea4982d7703b3ed21e27ea982582371eb11c0fb13bc1b8fd004d9b64d4ba73a33d4d7c7a7a7a6293b8b547bdeda7cfd6ef71eb98f5312bf6f7dcfcf64e7ffe6fbf7d6f2f648b378ddabae9036f56d1a651fdf1468b5c8fa875f75fb4631fd447a9a0d0e426b0c287ec66dda9d64d0ab19bc31cd674f7407f6ba2edf6359e3db6031d4018bed9f3893efd913dd187aa51476e312bb6e291eb9f0f452471c9f58f471af531cb871af5459cfb46a3323ed21149bf78175b545497f6fc8babb8b2993fd71f8cf6bcbbe9832345a31ec2e931729c10271ffab1ef37724fbfa3bddfae2906972d893ab1e5976fdbc5bdd6befd1348c489452e661fb91ed992ca3ddb8fe324a31891fce86d469b68835ae44184db3701d230c1313e842f0f7db777c95926b8fbe213ba76ac51c7eaaec8dcd7c8b2aa54d2466e30e172fd8afa31eb8badebf98b2be11eb7217d7d9bd2a3c456c944fa7ea3728b7b9a0a500c4bb8410bcc5086e442bd90e834eab4a4513b8daa02ce3401d204e1186f798ae4a9fa6e8527c456a34efeb56879f0e0b229c6b671cef920ffa4fbf8caee54737780aa68f9720fdc82c06536dcd2c82a815b4421851bab80304c139b009f20812a0bbe386bbbee16b5b949c9c5ef582a6196afcd26a93fb24f20515f4321893d80303e8849bcfbbab7988364eb2212ad51ddd1072257fb9a6e0bef76b7e66f085ffef957b7da8b3948624ea37adb3ebeb6d998136d6cb51a157336258698eef54a0ca9f3951842b513ae478c5a3784474dfac51fc26c0161a2200508e35fc4a751cd3ed7f7339cd9bebb6f0833fb704f471dc41db4bca8fcdc2f412ff6d32e51973045daa451ece324ae0756fa12e7037dfa1ac63d83e9035ffc2792fb4d1fb7e16256decdc22da290e28e2cfba05dfa19d73f3a3989919b1946118430ed65b46eb556ae07bef35195a965254018ffcbf212200c13208c8fb88aebaf9158d3670e4d31d89861409a211ce3d38bf9c50403ce5c670032cb70bfa9c6f5e913bbe933c9b8fedc135bbd7517955b91b9ffb8878dca3dbf0ad78363c253cce266c73dbc057cf12fe3fa8bbacf34c6f597cc5e5c7f8e632b26893db1079026ae38a605677410771091c099f835f2708fbf78a4a2dfb920f84ead2fd71c9be37a5e57cbe38a69a60fc7f8578f2dffe9f3d53a634bfed750ebcde3008071210cbd82d421b2731c5db8a6866cf4e5b8bad08668648b13604103f9c0191c104ac1ba690f42d1de10984dfdf8865b8c04ce48d1a952a3a0f8f8c82d75321ebbbb3b4a13b47caeda52db22826cda7569dba65d26c09ce02e6d9b9b7671f3790ab5a231b155fd60100edf30ff75953af62131dfe0540b5546340a1600bec08709f88110c20c81106e6ce7675606c2c0e7224a95f49e1a3d3fc9565bb2d05fb8d905b145b4071bc2dfea85a6abc9685b118d829b161f5bd5af5e085f33798a541fbef6e39321a20448e94b4f84f4274fd7504fba52c70f55d542d51132d5e4dca47d3cc537f0338d20c683878ccce7d51acfe463f6ebd6856fa9fd3eca5cc83e97953fad7caa86fac1a00b7f48a720af1ac55df86c0367d8882382344a760c032b98718196f1948cbfc0870f39874eb554f0659c7de00b7cbe812f907d2ee41bd809692051b740c1feb9bb333b333333fb6bceececccdcdf76dbdddd371d442a38d2ee68794466666666666666e6c8ef235ac82c9d522643085e7b38b833ed66cba33dfff8d7b7686068334621f1a5d79efbf5b38bf1e545a99cd7d36bca872fbbab69cfdf1f55a3bbbf8fee8ecf2ea83f1ac5e37a7c27e37a8c31c62649d070a0d90a027d361daca1c1025408db1ba8fa73c7a3bdf8527a9e0c629236c80f20ed35901f416a7c7e006954101f9e49760cc39cd656eee6417364e6eee66e54f5efde8187bbd77417364aee67ba4d77c037703bc4a206887e711f3e208cc6513ee1fafda08f0f3883691b9416aa58c5447b44fac5998030fe70283201679a69bc30c893cac850b9c3870f0ef8018846cd77d691e6296c00616a00617c0d35fe7c6641183554be1dd350bb47338fa798f0177f4a93b47c4d1fe116b3da8b6dfc57bbfe710010dec2d2d23d4bc73ced4d1ffe40e05cffe875009ca17088091638648243cc82305c03f8e24f84eb6fea3ed30fae3f0beb807978988779988787a348c4405add608f1bb99f11175318b2c70dae6b24b71ed8348f4632b1fc650bea451de3e3324efd7c3fbed75f16a5c21f162c8e70c32c357086593a5337e31bf563161633f822ba5159cc62d69541b890ebc1c4101343945666813c90079479980ac230c53cf005760755ae81332cef2d14a97021370454c9c83689ec6064f98feb262d031d69c1852cafd51e1c638c313233e57a308dcccccc31464e61124fc12ce8f9375313ca49895447226ed3328c5e33252505c354524c2a2926cb1006e5a444aa2311b7691946515276dc13183bd259344ce67ac26ccd960c4aa353dbfb84a2a78d7c43b2d11893cb6a775ad88304d69576deb63a7a70906cb8d35e15411e549d50e57fce7216f5df82208c3c4306c92019b4b3d35f7de7f21ddfd9b15034baa68c190f37d19864145ca1c11ddf9561537647c9d208528754803aa5bdeeb4d8127589bf7162af4138c33259474c2da8f304320dd7cb70fde51160ca4d6ad42e08618136a166c1855018d7ff5ba892bebecd0e14d73d922181fc99903fffa61a46951f5feadca0ca2e02c59ff63024d4cfeb9fadf65c2289df40c8d9491db9d35148bf5cd24e7fbe10f92de3cfa8515207bec8973b52472e913a7249a35a7e3f3ad9533d972db923abb8fe4c402ae45c4461c917d0b89feb985035e65071fdceb6342ec99e8b29b87067ece27e52670a69513fd8e3423e7a3c3240141a18357202a2b67802b8a286f97e06e8423e0691e8b791888b71d3e69d34bb4f311f3a69c4a6b4119bd2faad775ac8c5912f5c69a1107d93f09a761f4fb9908fcff41901141282439ea7d82926af0ccbe4c79962f8c2cf97e30fc71fc822739091916217cb85451c196757fa6a2a5592867252aa245ec99d211d38448243123b4225fde74270068e0167b6686a176a141b8d929aa750dee9355d1f9e42e95ce7a4d4f5c81d1c08e33a9e8a30802fae1375a053039d1f9cf8137fe24ffca152db5cb20bf306003d8ff4d0a70700514e05e8f9a3eac53db7912cccec1274897af9a7d5449bb4dbb3e51e55a38c6f4437200c1a621b9c752a40943402f47c1a2575da53510b6f14823071e893abeb2f8dc0c6f58f6b0c216daebfaada1310d25792126c4b42fa9aa6b10669760856c59f8873fdfb7d09125c271641fb2f02e16eff4521c800a2463d31601a1f1cc334bdca49723df2e03a153ba082633c1eb953c8560df87617f583f32702cd39e79cf3e79c7f713da6e738d31c215b4c8304c7f868a7e27a6b0908a3d39e2f913bedf9b3507da9b363c47ca7dd11f4db1f09eebfba214c23972c01672412208c9549809ebf48b4693f052ae8e8e20b2e200c8e2610c6450a3a4e5168d902074b0f8471316901614e2b506851c902c2b0a43041c162e5e40a959215102685c4036150ea134e9c00614aa2264018973a55bc4402a3bc08ecc9254ce34a80311cb7b36d9a2321bb9fcc980061b023f5933aaee382eb2f97c82a98863122ed39b6a47e52e7c785845c28fe4432225009c9c56cbc6cc695a42b2de4e208122e66fda26a7cc98690a77cb0500b5121267c786a040c0315b0135247ea481da92375a48e9c511ae1fa2a99ec41f09c29581132c71acd30be681ba175326e6f233a01a48294ffa214bec611ec7afada68831a1882a0e79f59a862556699a1aaef0842b945ab447479d06db92ee46cd41f7118b5fe061a75fa617effec36d09ee8bb3bd1f67ca37d4222c99614894491451d0f15e3398aa3c91766da58fa0a1dbfafd06ef44fa37a687e5be766d5bd2d9b7c92c7bda707bb2e9f9e1eef111afdfbcb68f45fb3eac56866f90948d480a3ea69227de4cf90d68d5e7632fe321afdc7d7d5ee0c47dd69c45dcc422daaf0c6a5f6ba1a6f74bb98ed31ea227b4e0f2c6ca355425da660cdae62f4137ae13f639441651ad77bb690422e9bff933cb3b3f844641fbb224a80681fbf88fcec8988bffdd615d13e3e5475d9cb2722bef6dac716aadb73ff794ecbcc9eba1b825592c7573dd49ec4993fa89fe419c28150e0b9c145f515e2fa130bb121441fab221135f57841c7b85ec60f88a08468c5f5bfd2f021cec69bcd6adcb0455f09a61a75d4354fef5c9d28136d7d3de5b853098599e11965cc2a990c6694952fada8a8743ff567c8e3e56c761fb4e2fa651e626b55f234eaf31e2c8749a7dc44460563aa51afce5bac94ff9ce5ef2be81d303ca794d3e329698577275ded7a078c94535fa17f32aba43ee47898cc4cfa11e94727fe2dc9ea7e5b92d59da2b7221345d143283af968335b0367e215fdb48cc44e94679452698afe3d95bd48f240182be415120bc924c62cc7152d55f6496e589575dce37cf29fe4c971456b672787776227faacabfe22fa98838b59d18527dd07adb8a2ffbca762b65ec8f1e0a2ee8471c5ec7619b3f64ed288aff6226563d163a2c76ae00c0f4f0f0f4f0faf180787358483c3e2e121e46def3cf1331e4f659f8addcbfceb4fdb65e9a599733e6ca0bdf990eb11048e9e8a217548dd47abc4c1b946ff412b56384d0c2bee7c4f790f4f8f696baebe7682cda7d3698a6a20ccec4eb3a6fd6a2b94071675ae83759e537aefe9e9f1510f7dfb69d743f1054d456c0118d849677182abf230e5d69facfbea8fdc82c64e0cad06a4691dd20c1a4c93069ce157e93e935367a37fd6becc355f9ee3290f6a1da6913a9ea373f97a90a7fca50ea95692d4119d88b0a6a2a9b8fed8c968f64e6d30489d45ef341817c7765275733dbcc99cf23f388617fce32ff1f933eb26bfac829b652f3f48f6b20b121ffa0b07d1b706c27077ba78bb66e73ede53fff39eeb3d44877e7aa887d26814f6fe0e8633204def708cc399eb5d3e0ffa3c481424ea18bb24ce0ed3603086471d6bb76f7529788f8e98fdb7e35a25d73387d12b9b9fde983383fa491ec924c35a0b344031a9e368713fc96345b3752537b3bdea510361e0ade9cc320f0ff3c61c08e3538dca9d64499cf6aeff248e07a962df1c5b46bf99d03b9207ceb4c89eebffc926d7e9c552f6489e346ae738158dd2a1622499c8512779daf30986fa491ec9237b3cc775d0a81d73865cc853d9fb7b90a7e4a7e2471cd38d5cc556a34ea487b7fec859d3b1656c3d48eb882801a27df699d6558913f4bda3bd7ec9337a91164366489e51f7514c0ed1a1ebaf851851dcb632c2e00a257441d3b17107c199c4f114f7de8cbdf7788aeb244ec5bc47f28c71dd8bebcf9ddcc2655090077990074d19e1cc9a882c8d608355d0bd0b9b401fece10bcb40580333530f97f6fc31ae87e76692e8fb71237ce1c7ec063de879fcdc2581c48df24ad92541e4c6871d5fb023f26c86decb7c32738bfa5d383185fbd5db47eafd3e75eacf1eaaf87d786a3ef6445c9f7545b2bf1eeb8a280192fdd55d5f04fbd99de8337b86759002d5bfdfbb0f19bea8913c5e90c2fd9ef9a34fa1452aafffa9f2a346a7511cf79b8f0f97c16788788c1b2cf356d9b4f631f9f8f8f860dd8f918f4f1967f88cb1ba21d920245b33370d9342e5511e7bf6c920fbf8acdaa7714495753c353bff286d1f1d9ff7799ff789dcf2542bc707a56316e3f8c4772cb49693dca4852ad1476e4e899a0408f856ecebb77c353d6771bcc8c2cb2a963fbd8dcbb78858be645d5eb3a7cf6ccbd71f261ca7373d90d39b3a224a444f84c5c4f2a71775405a1ec7e3e888b898be45f4a6bfe4b33c11577712999e65087ff940fa6777123d95dd49d49de41331ff7a22e453f95757440910d3cb8e48cb9b9ec8e959aa8557a56664836445485ecd9babc2cc6263637af92d6f6ab1fc33594e270b552d16aa582c5499503ebeb6f23c3cdb45d84fccc7e784f22baf9244ed4e28bfd24100aab657e91e7bd2e8b36be3f88652f6a1342a49b13f46dadb943e7bc89d50ba1fdb4300aa364efbed8168bf754494d42772d26d5f643ef7dad70e48f6277fd211297545e46f4ab0bffa6977aabf7d7f7f91d99d6a771aa27f7beefd31f9acf394eaecf0f4d0bf1eda703f5f7b1b9bede56737ce43fe12ffc75f707c34201fccc7e67aaa7d4da32a167df8878384309f4bc626dc087386e306107e4308bbb5e67ef01fc237764787cd5c3b84d0ddbda1279910250e2617c9bd82244ff81ad6b006a10bcbbacf44bfbf32f13f1eb7c6257dd81efcc848a8f3e1852faf7c78b10e4af91202bef293604008e6959d90d8d1ad093622ddb7d060a384c8a71f5febd6b4d86116525aabc9f4fdc5304c887cfa3ee0d51eb3f035ab89511f6ab051165ed841ce01f0663de85f18462dbc8c60ec61d0e08e36437d17ff5e8077a7e6e7eed4dfdd0b7faf51b9ab11765e22c33ab73fb68ff65a87fbc9dc6628fac8fd208f4c0e3529a8aa69af77c081fe0efdd20f3f723d44efa351188a0e4020e0728a05f08300976d38b53c3ff514cb3307e0f2f7520108d3ff7597ff9986b1af88cbaf61d647cd4ee58bf5b0c3d734104c73811f4c5304c7f46f806398c6088e81331f84e96f7281229806890d30cd900fce90c008a661a23b3348f065f4273b7aaf519f3d82697420019c3100134c23c3316dfada5ddd4b7d160ba136371c1af521f1c3e87e485ce64ec8f5f3579aa9fbfa0590532cdf007a489a73b2ef679bedfb75e897c94a5d3f4987ebbd46d5ef6bd479ed65f36b9c3fbe22ce7e1cc5c736f858eec7374ac41d7c5cf44eb9c4bcb30b5cb8d1d328178a6e10be4cf3c353f08bdbdbedafde0ffe783c347f007ad00301f43c15c421af70d0d1fde08f5b517dd4b4d71da4610cecc2e5ff44b28310c6e3141aba31856ce6890b21b76215755ed99dfce54315d69dbc3b0d81bd7c22b097da17d18a64af3d548951e18cca6d15dc86c1ed1fd25e33d121019b50f9df0857e082063ce0220a665069cc9d86908f3d11fdda434e0920d9cb8e48d641870054517f914a845cefdde9775ca8a2df8e44af7e48d5651f7ab1623f8004f921f441a03be4089f221af5f1d8c00f9904917b2581c4bd7668afbb9af8ee1f3b19b71e0b2affe7ddf67879e13c91576c737d0cc5f52fde0b5101809ec3d4fb8b7f00204a08e8f9c8a13def9268df570805c017ff0cc3b62ddb9268ef27a86cd3294d1b12120a0a0202faf9f1691f97abb8ab91e85ba73d51f77515779584fb9ae6f959bf30af78c52b5e6d5ac736fde23f79f544c53a1e32bcba3a945ad9a8b2a38e82faf1ea3acf853650499b64157badc9d5e1890b7f6a724355d8c36996edb8d95586edb3f7238da29f69db49d3b02ccbc0d0c9b22ccbb22c7b0ddb6877daa8d60366d967d9f6f26ed96719cdb2ec37ccba09aabff442f56f20fad90d9cb93efbeec96846339ad12cfb9a8c2cc33ec66d7b3a5f9bdf03bc12de1884db930ffeda6bddc987ed7ddbb22ccbb62ccbb66c7b2d6b34eab797bdd699dacb5e76a1f2c31d5927c45b740d7187fc4b5e527e8472ce18638c32464f8b4adb53c31bf7ab324bda732b2a43a1c6f7d94ac47b440f557681061b723dc8cbff4987ec227fae87510ff0f685cf10c6bf07d819696e4ee74a1dba84eee864402ed4a84f0a5dcfccc8d8f8a88e906483ead025ae83e65c0f8af291eb7144e47a70578439855318e51bc5f2686f3ecad7fc003d367cf41a97bf16c30f352e737b4102ffb5d00c90fffa8c1ffff51680f8afd100e2bf4ee3f2d7655c7ec856b800c708f15f5fe1f2b74ea322f0fcbda4511078fede69d410cfdf555cff80ffba672688ff7a0b9a1efeeb28ccfcf05f3771c07fed83f2e1bf0683c6c77fcdc5e57a7dfcd753b8dcc1237ae8a63ced78a4d89a9c9af21f0f1d6a7c34ca71da739447f183699cc5314098c68f708cb72ec034ded299ba15cf719c46519df6a28028ca621aaee547988643e22da6a12d47c2345c0e75968a1ff1568e23f11c09581e1e8895f908d81e0f01db801fc232e07fd89817c212e02fbbc33fc0aa3e087b1f089bfa1f6ccd3bc0c2bc0f1687f76107f03d581b9eea344afeb46704889257809e049266708ccb208ec9611a9906c7f8afa4708e14923f8da2adbe0244511e400f88a519326805889a7165d09134a4106bdd45fd68370179b0a6ef61f91b60e9ef6075bccadabfb6e56beccab7c5f12a165eda6a1497437980c33434876328151cc33aa2fa06d4fc55e18e5c7f9a01310d8703639c6938295a4cc3714738c6bf0138d75fd5d19cdbd574545cef523a1c740c60794d93b1341f63679e0056874fd9053c8c4dc0e36079fc00ac0216609518f2095080026c6686d59c8031fe3c74a0b1da0ac2f8cfc09cc804f09072f6b5ce9b8c3dc0c7d81c9e0016010f630df038d802fc002ceaade59bb24bd07b001cc019ba0308b3321ad5ba83960150a5d2678fb259016c0606e8f923c0666360cf3f079bb5013dff03586dd5de6cc9be250a60e7ca9340c6a5a1e7f293f321de7fed6af996e89b8c05c0c7d81b9e003600bf62773c8c15c0e360bd1f807d790e0752300dd762310d87843bc234b425c56d69b17cb996a6b5ae3f87c4bfbeb4e55f5f01582e08d0f3e7721af5227a28faec5f6cf605e8f97b360b037bfe01b05919a0e70f00ab3d0161fc6fb0d91b36f30284f1b7c1666670cce957ecc96fd7f2408d3a751fdf95f7aefb56dee5bf95c79e723cacfc7f8db7d82237036a1484b7c5c26b2dbcfdddd70443189797b379ca396115adc834ca3f87947717cd26c7a3e0553a1ebb2def22d0616509eecabbbc2d0f11d09272c2e1d27d7c5b523a08d3d2e500a473c3cd808ae06f62798dc5dab0744ae8d337bdbf10fa292615cb5708fa295fd35a8ae5c7b81ecc17733ed06eeb72a0328d4ae9bebe29ef39346aa5fb9ab8fc1026a55554bea6651a453b98944e06c5c27b623fed89eb5fca8032316466c8d29081211b43d6c6f5d7b2783f2ee7fa6340d7756894077ae8724d92eb21d7440fa9949c7e981ee8a19b436dcf657278930ba773a10d3b9a6823b10936426a828d44cc8620f8478ffe422233337b37176b300156869f81d116527239053c3a14ceac5cec5de88e8bbd46b313ed78e84bbf2ff62e645cec7d00e914ece159ad564ea8302ed2c0e462f7fbcbe362bd4a4318b0161766e002f6395cec29fbd0370803dcab47a442fd9cc56a14f67e247b79b36ec3b0cffe721c294cdf1ef66e82da2fbd503f5363df60348a1f8bffbe320d55a10ebad885614dc6c5b4cc7e4692e801def8b0edc987f621fbfeec8d5c2337b31876b1cc74b13761dec57660cd530b1adb8e32a8be3a401b3d9b2f39a3801e4ea3264e7b5140d48ce287461fce28268e161d7f1a4846c3b62ce58451285f495a27d9aa85f7d2a27e328874d9a0e055a6214fb19054545858462ffa202ccf498e258e7d7561022497011776e10417ae86c2821b164471d3a8c6e936c9a0b6209ec05486aa8677816651b98061a4c1598cd39e4f29660ff0b6ec924c1cd6a44222aeb53df74144b3d5de11cdf5a0dd4412bb39081764c43acd3f731ad5adc397c38ede2e3373c747aa9441bee3d54f97c6d2325b3d56ebb82fa64d06c4b4c7e69c59c673cee93dd44343433e5b570f0d699b85aa89d21e8a2b837a07ce5c18ad5ae64c809eef3413a66816aaceef2eea7c2db3dad5a89d17b33a34bea0503fdf59e1d2afbcc6dcc99f3ccbfbe8fd08c8446b21ee8b88b81f42f4db07193df79193cdfdc32693a963fcd8094179f97d82f2fd2728282828dfd282123fc61321487ffa21e5555ea513d2f2fd2727282816de167bbd1243e8c57e88e9d64fb128bc9d7c4d9f94ba99d3cd56ffb43c1cbce894258582649014ea2a204c13208c13b44cc6fffa470ebd1420013f3f5674f6fc5a77da526c5f2d00a24db4a1ea7c51f6a2cbca33d84a34c020d3883268f445b6d167dc6988ed451f647b91e847fc331275fce32f6468451103a0d58fc842d588c5daa0e055a24e09ff13238db768e9d571d9f2959f44f41a6472855cdf3fb50b5ead88cc07f91a1835eed0c4a8f19bf7db71a7f7f8cb2521b7e33b59540d63d272c2296b35d14b1a6219227141e8b8b29b393a2e9758f295459d2c1c269587094f4b19bd595e4d2c968b62715bc70de2fc94d6caf14208f3ed5022da13c31bd3b05ec5893bdf8156542914c49aad2867aba32f3b05d849008bc562d16439b8f091c083bbddcfbbce621c5ff550c657a47266d95fdcddcf77ecfd7c87331ae3352575d69c72c834715897d470d8a668564fc10456a37a077afe557813a0a90c300c3863f234b01aaa1a5db8fe100b348beb5c5c1c0873444efad853d82f3bdf719ece792e2ceae7975b0795eb70a37596b758399bce0e380353b3e5eeddb68d73ea2aa6ec7c07aaa014dc58a52168a5fa66eb6a2edbb4d88db2bd8a46a33a8fefb427832418a01c03cb36206ae5320dd9fb8a19e27f550cd077b097414ce355700c1ad69f00bd97949ff3a9effc19aea0c30c56e8cfc7c0d16cf84e93c177745cdfe931f41a2c4229dde7d2628030a70e43ab0161583a0d7edf6930341aa53e23a583200c4a7f61e4050853ea2ef84e9be14e60545b813d679afee9327ca781b6ce82ef3417208cef5c513fdf417db3d5d3a8af71ee4ea3608f0e7ad0a8937ce84c1a75ca1e7a13a6b9dab3a91766a18513f7e315df3014ede1449e3873e2cca1ce82868686e41a43f371e00c7f95a2ff662b721aed39548934debc873b2924837c673a71bd8dbac689ed36200c1a208c1bfd869623a5eb21ee59be88e8475f847b96ff660b07771a42f4a30f22fa51c712847b9651578429070b2be1ee337257be95e7bf3a2e88b6317bf95a673e60d8caca63f1b91e2b5d929b576d7f6275dc6af9a2f84ea3c8f02a3ae52c6792e34dc0904349b64ea6d136a458bf28275607bc4156d452d740dd6c5dd5f295fdb313b4b3b3b3b3436fccbc8dad8e1b6d1cc29d16bb9a0036b6ae84687d092e3ddf813045940019bde88b70bf7d91d18b02d0899e885137754a4038c3929d952a013e2ad84267a5822a25fc1ff4b6291222fb9c46b1d39dea5d21fc79ad0c497bfed9d7b4c6f9b0e3294969ad2c447edba8c9ce07ede5cb6e0784995113a3fe5c82339b04af418998054d28e08cf6948dee377adabc6cd14229dc69af0bb92074dc4cc7d5323b735a1349a7bc8a7e71714199ad6db61a75dd89a4a7cece75dfb9aca80dd49e77f1d4af87341cb669b52b2dec41c21757c766590539d6ce94b17fb0ab796767677601a958a844ac759655ce32450302000000023314003028140c8884c2d18840931549fc14800c81b2506e689c884910a31042c618420c3100040060046060b44d00c09360af48ce2636f82f75f7ef0fc2170907d61b52ee73f4e1f8e3cb65da8cfc7bdb400f9a87aa5a57c37593863c7310c4177b69c00dfb3cd1c18ff620acbf178deaea44fc98ffb41497c43af8caa730bf1c9bfaa75cc8c0bce5540513e90afa0f7955872fd76fa8fb1786e0298225e53539ca1dcdd8faf7097b6db9ea6c13ded89f5b5648e925738bd523962ba3ea10ac0d660ae8deaa64cef6b2aabf7b82f8672e036302fbd5b07fd998b3df95742b5c2495283ea0fe81ca5b1b4343320e550a87c3c45974ed878d468ac412e899f291d2c65bf7074d1112a409380a8543a837733740f01be83ee37be765cc74cca14aad441708c8f75c0aced29155cfeb1470da5dc6b8a788ca35860c158d26131238ed5c9abbb50bdfc5141c4a3af24e203094d67014d5e1bba0f5788fc9314217add4a3e8d4d0ca53ef12661ed8488acfa7a1a7e46439b3a2574372700bde61d593f08299fb9d3384fe791ea551495925d531c943a57cc57f09a8d9521934b9574af2525d8c4b655a82c920205c8bc5f90632dd9944a12fa0ea655c1922fd387f52d75db7209fa0b383f29dd0afcf90e8c63a3b6787bc3c91ed41cbaee15bbd925ef2a73f110926676900517d3c286f38490da25aaf9f5849714c6de5bcee8207a2408f6b62107710bb0eb2cc10cf3f74b3a2cc86b096c5043978ab8d74aec5e29d45f8250abced945e9c336a3ad8e10f9f2e7f088339557bb9374e060a2269efd54b3151bda74517893881620aa5c851fc81a4d73f61a2143e100faba3715e38eb0aea9565528d7b7a723e2056a6ddad0d9d74f3cd8479b1de06cd99938683407dea7a2129458db2f925b2c3fe7ce9fd111768183824444828ededf727a4ec10abafc56d436f0b5e7a2920db42515da5b8e4d62f04479dee96b75a8bcb191c267417e530b71476622b5c4ade1582fd7ffa02c77090b0d6516f2dca060d33e3ecc7e7017c96e53e5d85df1295e41937cb87e2c0b81c6d28355c38109bfdf8e49605180801a59d9d0cf296f9f95b0a807ddf7482f5331a9dd85f09f1619ca1e6cc8894ec742a8f59661ad0fd4d61e2466f465837cca93764b7d5ca0525bf773d8b7247776ed051e88a11d5f509c787f6cd1d04347659d6ab97caba61b2e3f88d76713bc3b9299d7ef281f616c7ae4b6688e3ae92bc1365fab4685bda2260b7d675d39493af6170d773b446301536a9a315f169de652d147a0af6283974071ff57b5684e5755f6ecd72dc77e47c3bcdc026e315ec725d1704b6f047000e60e1b8f20500ede66b06f71f2ca5471150127e41d96b1ea749ad24d154a48e743f005222cd98c0b8012fe9b3f929d782bb52fd915ecb9212cf454eaa9be245c615988c28e9839af466a20bfae15048c698612e2de80a35cc32bfbca9daa88a65149ca02e2da4e8d8337853e6cbcf8976132883b56cbe90c9e1351ff676e42a7e403b4c28d025e8cebe1b786c399e849aed205b5f76d9f9ecabab9dad1f083104b6e24542f4f0dc0a896047cea92566f74caf5069d597e84e75efeecadf3254ec941dd9b1b9605c4e854f06fe002252dca8ef20fafc17d71bf2bac08ae030632aa9fdccdcb6a3581f947b1eecfa98c2db2213e8310e498d1c73fc40e94fc9b585765049a820ef20bf7132ce8f568591db1c83654fad1bca97046e5f8f54a4cbdac1e1623c462db2c969415dee8f7463facc8ee6cfc2f8f9e074760904654bb7e8f7481971f32691343d7060f24a4c63e484532325e74a1ed2c6046313cb1419bd12b3e72f9bce5fdeea98317ed21f5431d8b398f7e16fb6cfe2ef969f3f1a40fe2e05ec3596b048a36409588d1cf320f71a1c1908258c668c541c67c9da01559792992f56fd8cad11b048d03c4297606bcf031e9460776a92c1999b83f5ffaf7866e32a45bd6f8cf3a535a851fb5f9379ae86fa39750530138e10bb3357da15672608a5960af4a6665b247bbebba3d7c0ccec800d7a0583b295e8c044ae772c677c003f3efc96dbccf5e2aa12cbdc6d106b90a27b419e916e113dd6b7b6551646a94548c35dc34d98f3c21a6409832a8c9f021dc303cbf331a10f4c21eee15b9db34a69659b167530569d521cbf00c1f31770507c5045001a85cb18db609064131afba43c20e5aa9c1b59ecccb099776ab852248a3faa9fb347fe71ff41186cfcd0565aa97e1caf800043cb25f58990d6f68a85b7cc6a705c6b3253e1d5319ba13b673bd67f33330d3e145da0f4bf8b58200250dfccfd97b10563705a82668a55f629e9f6218da521edf8edd04d04094fcd020f2a8e0162eca9019ca3f160800fccd8fb404dcf848d872d7fd89bd28cdf50fedce2e46090f095ebaf550319168a280c805c72cbd6bf9b71067e8ed9d0437420bb88ee4e02d9ecba6f98dac103acf83dbb549c2d1319d24ab6c977e32a52220605ab60f6bd724a559b81177d0482cf144d1b9113c30f924e2a684bbc290f0b5943b9d3d0251842b09660a318f1150697e115fc7084ea3e98c5dc4411b9b90396a77a000c726c17c99a7e9b07b30d612fb20a6c68bda26d1bbbeaf54e4cf98b55bd74cde70ee17e4915fe289b5479e37d0130550107c1d416c3c130596ab8885784144de242d678b2d87802c6ff3b6016bb30df96005f3464c031019452b4f68475fc955ee33b92e8cf2587f8f9a97263e3ac0349b945e2b49ef65f846f66b8bf0b48d9109b2c22711d7e8647574323721dc847fd78a6182db035dc2e3f13211bc91eb6ab26289c411ab7bab11bf5fb1dacfd40e884adc8263b28c6de3cf702d650bf6bbc1dbae0c15063b4278b426149f483fe3816e56282fea7e40cdc4d260d22bfaa50dc49c4b3a4ee6c7e6f6b8516244d094a96f481da68d106ee852ce2da3e674fe7603782c27e87eace3bf64d07f925d804d47cd6081f796fdcf4ff1f645003454cb9b4f83509408765c18271393b0f2e4e9137d1a0bfae30e0a6865f45284fc2f23997e21835f5c3fda86ec0fb0db00b23b1392d02695ec6b0b92a1e8e23586b70374679bd86702cc9d6e80e2ce7ca257520c3045984b3687537c6f80420740d7e73c5d2bf6e42cd758d96de0047c15273c8389cc30eaee728f989ff04aed14d177b50ef1b8607284205a20624085c4e2368f07413a4d69c63f682972a7345956683f784b8397e20ab9b95e1e03d9c8a35dca4a5845d40dbb6950e7a06546211357762545aaeb587953a9505332b4ecb8298e9480a3a1cc1103cb00107be35810976627b7760dab75ddea0e6ce0982ff5c93b02c43f87d8b765725c2159dcf231e2e80e520a92c5a9e6301a901a2b44ad5b3d1ea210819dbcfcf3218e18eca334838c77910e862e631f25df7e0b058f07707a9fd69401fab0f26c1857c44f068d3503f159c01af1ef08e72b61d4e2109463bc2e5a0d7c93f50638bc0ab2d81872f215ea6ff447a9728971d6a971afc3e37480ad21711ee1124b44bc66f0232320c93c4e66c1545f6cfde92d07445a93988a61df9fc8680b5b2771e60677bd69ee95e582d08b735eb07afd504bdf25f587224131cb5a4470585a00a8b6cdd55ed5f3e2884badcd6583b73b90f8b03139c94b98a4100e8d45043ec52af287c494061abf0a9ac5e3b9735466d11c680b54220fa75b166ce19868f538f35e3ccfaf04dff9e2aa388b2214d1681c4478dfdf52b92975c84e02413e8451533e42e2df2e6380e6d472b69d1cac1f25a88bcad95a30ecb874db14973fe16ebfc3a23a7cb14fa47f3177de37efcfde7ea6673801d0c5020711f24f824b1c2b6b728f6ce30084c3056984335595f3b43b480b800d5ba2255905adc07cf6470588d2a74f532d1fa760b31b83303500805cd7cc803c15fb5f6ec3adc822c5b542e464bd063a25174831cd28591afe0eccc413afa2611c1a501ee937ceb24f9e51a98417ddc384923c64123950ebc00fb1a2a3f8ea7107737544bed60227b2bd2c15d220dd53f816830368623b61e94400a5e20ba3cc4af1493fa90ba1f41550ddc5a0213671e62d5eb3c230e86bbbaace04867e8d4847d18330ba3182100f2770309d66b2ec0c94dce42444582ee396dd1c91dc66c1526faecab8f2dd77b2f7a98a9a5521bd58d114cb542d34dd2789596dc6ebb56cb34749b3fa10c2fa4f6424726db9f0a2f24c66dcee769f6b7f330a56ba16781ae2b6345c110c8823bd254b3070ad09e137fdf0d89992b03b937404aa6776f75f236da8c09d45a59f7442093f9cf581c186f84f245621f48e6b904ac82b0cd0d50b7e123b8a29b4dcf92802b64287808079e3381f829238bfa34283196c6393d81319e317415eeac6a63744c662c740ff2b4a5cf28d2df12d81963cbed81849e37cc8cafe9e1e2e68f6946638a07f2233016b343023eb31965a09382f372745f5c03d062aec47ce32c0cbce07cf1eeee1ea83b2a788ffee3017fa1e73e678c053432d5a92c7592262c50bca9c7930f99706b3557ba87260b03fc10f463baa43a5c9fe12ab663ffaed2bb24908eb16e3ca30a76a475c2b9c4a205b7f5d285c536d3b90f49ba156f9ff93bcf7415dfc36158d1f0f33a8d44a22856b7a191ba6406ceaa9ec5430cb7a5bf3c3fd8b00fc9a441e3717f0b8bf4d4a5337f2b6cf50f2336b9d50ed8fab1070688d52dc035143497c337e21d70b9d0584b7a24bf12582b12b38fb81267b5f3889c01eea5eb199f425af4e09a5e335f05ffce1ff8e3d28662372104e6d4e4bf47d14fda7c746c9412066b7930fc5e2b0d60c7e61c6820fdaa4a5d8a29ec25bc0bc4a25df69a2e8225506af5c1b3913023e347b4ac3d92937b7276a1138c3b7b247186454c1aa9b9d5262c55cdaa52f7177e53ed99562be1cf80cdcbbdf08db25e0b228212e81764f73493e3a158338cb1f5c67658c8d1c837fdf441c9e03d33dc6cdc39413dc301386f0192281c56b4695c548ce3297d8c86bb712c8b42efd8db902325266b80bbe3ba290c35f5ac97dbc7f4964d2ec932c502fd83281214bb6c2dc8e3351f29d764ea17f97b4b9268786bcca4c4c0f2419b0cb5a45f64a9d64a5f279d4f66505299ecb07c6123e132c2ffa32f69a7132ae514afe06c02998e0cfab794163f8900428bb599be1412c2af24f7fb6dc8e62f0cef56e3bb861278484816bd80312afaa4470843c5b80f63fe78d2c7fb089724072db4d053c3d22752cd65c8a50082188a7b1ec072b78b2b11dcddc3b31f67ddd2a3943c71e7410188041c94bc35ab9adb38ed3d9bc90e2af11b192377d525a2bf248a422c228011f4eb7ccbf84ec366db8ec068889692d28ab701189bb54ab82cd482c4b24a59e0b477c6fcd475529a782cd4aed22abe895e2cd1c71f92b19e8a5269b00d92fd85f53b5b54ad5a75030d2fd7d4d4484595dd0d3b63f3a42a174d43d5e19d5a001a54c379ad2d69aac07585e05ada460c80fea0d22496990a2368d18adba61eaea232838438ddba048630c05d551a1dafd1e0d3f4d27c6061a5a36a2713d4c1a6b84fdf676506ad2c568a046d30bc5d5f9b536a2aa78dea044dbea361f42b42f5701fc51a7eefa3b24159caeac038e8a74ec08b08a239ebb96fd784d833fee97eb5cd2e3e36c689ff7280387b8ef9922501d4a97c9c2d565e6d8373aaa56f084574f0a984feb967a504074e3f783fb6fa84fd434e471229029b45e0e9a590eaf46a5c9e62da56636cf81ae73dbd177e8d964eae7b1410c129e0c7d61a3c1e26018f983fbbe273ccb4b5920b270854dc221e902ba1de0dae412ff0f87e424ae32927f217cd4dd7375fe7707e86065cd4730cedaf0814e6b5372582e37d7277a44363ac12003960e150c935dd893ef34ea2bc2d0dbb31138286a463536d088605ce8118ac6359d92201f13e33944b87616365174422c7c33f39443c02845d4cee6a59d43e92d2c5f9ce2930c27b6020626a4151a52c110fdbadb86d81a433bd7a20d236754aaea8cd8e54dac6e406d2ac2ea2e165174ac21b0885dc20c03067f2d832be7d8692224859227ac8fe93c172d197e4b06eb5646103e76ad51f6a5061aa9fe2a02ed1efd58f6d7624a35889557c32c5a4df3da7e3eb0293c7770d7049cc9dd351820483821ab2c3c7330f46742f40b50a7c9b8932685adeee1db7398e8327dd057b1bd98d4008179ac8e3b7307d4e33c60d8d09d0bacac47a76926e32bb69fb7235de8ae78005931c95790f2321129ea1c7ed69063d059078c11d32ae00b7d409601990f6ff281557522921b652d38a949462959b516e68e300e84380820db8d42f7eb19534f871e0154b98879569d5ac76df7e4f54807579d702208f406d19dd37f64d2a3a698d93a1af0c4752e59d3d2f8a7584b0a36a40f53f5d79be2ce6a60390ace4c59f4ce03c8a473dba8cdcb7f48e87c099e3c62429f613f6b3c98735d9dc5b5ef84ed361ace882854f7b87a6e51ea5634c7fc966e44c3b22188b6f33738ee5a0f374e4dd2887a79dabf36acf3cd9312f09ab7498b0a9ec09b1e887dd7db181d549ba9fbc8de2dfe9d3842b1d5d05d9b88ec98e78c177cdf7750c40227ca267256f5a124b62ab9da15eb7824e2ca0158fe66301ca8876b889fbb433d4a789a5ca4f5757dd46b452df5d66ff9a17216675294091adab3c31c40fd4f258067104ae061e21a6779ca5dd16f705d21b8b2a947f13cf18b5ce5ba096721150245270a15c5812e45b9a16b87410dd969008e56cb388bf78c2f1751853d18e905f4604b7e77e5a293ce64db7c6838ec5f9ea0341fa16995e83a53bfdfa0582941132215cec17a905079da00308f2c607e9ec7ebcff050482d46c80ce93a71502c1ea0cf68b36cb3e5234b6050457b7604a9f639951f80b0411296620c8bfc5eb0e6a3610e47d2d5f20989bf51ed2ee7bba0be08514dcb04496cb3280472239d60521ea7fbe87093b951a3a3c5589725d472d22241f66024b6172f4d7dea003a5bcd021eb43eec6423c3a8d108b87a043b63dbdcc6b468107e0f28c36487ca04df2260068a72889f10f3905b97ab6824d9b7c229764cb863a4240e9910687b1bd63dad09514249fdd0579557c9392fe4b775297ccf37beaf0f2745064c3319e7165daf6c6bc2328d8ef63b0a5d30a9968c8e88c60a8c6064e8c336ac0fb90fb9a095cdf39d337c96615bb3d52595a44f0c7f0aa02726fdba90d0da28f9e5aaa80a6bf29f33cbbec33910961e08c91487ed212407614d6e5c981752af4aee872182a8ce0b49f7b42ef47745319f81a452b0809d75e8c27ca23b4ed89dcdbac4b0c4e24e244f63e181e8d06058ec7917f259b9af495559562d75fcd22b8f43efe2d3a25d3667deea2290e99f0167089009b0ab568bbb808ab4e078bbafc513da413914954b9a66aadca8562d81c85774838c85c541a2940761900be80e968c9afbd4424859fbd4eb04504c885362faee910b11e99cc16cb024b74b3f3070fa99e900846e4dec9ee5244d5f722305f542909d497c6a4c7f57572eb81612ae3f83d07e5feebb770ec928847167696113201fb17d6807402235d623388369014bb64d9eb2d21c1c827f36e878af5da7cb8be2a285ced8365eaa01de7cb48ea44ed556e75ed5ca27bfcd8d53882680dd5a78b3572ddd043d5ab540e14ca5f9131d98c4f92ddfe48482b09a1da6be509a7e83f67f0954384ff87c5849cfef31d5c4eaf1d7047e11dd46b693e17b5a0ba305482ad55c0e751116b418e04de0cb3d4b20ae5645ad5f2deadf564b4059a642dcf3fdd58c9c858c2809f33e115b184fbd74186664c3e80810018c80a159c3f4edca5aa94165ec24c7fabbc20589979094f8b8e0b659a881af16cf5ab0d4d69b1d537e7724b69613d4b7d18fd079eaae9ddeb27a149ded1733355b8b02649a67213d3890c6e8cd298c5b1678cc8e6844dffc237825ea7bd8672394b8d48b250964529e450acaccf11434a64c01c5e9a98d052ebbd0c31e4288276d6844b6d51fd0934820b54f5d83c130645e896cffec803929458b302b3cc027c48b0ebc5691d1998f29701d1e3bb2d9fe41cbc55615d4caed94a164c267002e9eecc0af402e3bb12026b333ce46405c73abe3cd830892584df45f0f122338da4d8d7588c0ad8e661d8a8a9c4a41dd4d0f2f38c07c67c4e20b6ebe9d45f510aacd81e4a20154e88d0435d68994c19da0385bccd1ebe955749d1b99299c63857cada2713c0100b59448b3a8a0c0b1ed91e55dc79a3b1c067cc622c1e3ae0f3abb157700c564fcd7902bf701a8ba7e9c01880dd9b706ace8146581bdf6eade47b04846d7057bf08ec4a1ad1a18371c292d126d6ea0a08d253942c4af417776ad3b2cc8f21d8e5a2350cc651cef8752cef51484001194786ef640a8653cb781c2a59b521584d60360f027cb756272d5c1ce63b4524d2b3fc4684b16f83dbed61450c1cced66b1802561f06fd7d7d21e87008e4133ec93be1ddf407317c901fe7d51ab537018d4f000d04c43f7d2aa57269e62e4232bef3be8d00bc74223cfb22f53fdcc733c8b2f5bf74ae0a3065e1e512b013f289c915d4455ffcfe46f258ef37aa4e720e50e1b899e222126d9ad6c12cb5f8f665c0bf92ead054c0a457849ab54a7214a0d4f892ceacc8b246ccb50ed9dd49473e395acc2fca7a5b07115fc17f4969c7b89525a685443215387687446b2766d0392f8354a7d6d0cea96bef49c44446c920ca6050b0cb3bec75e56ab986f2e3d271d2034c1fbc44dce2749845fbc84a0c0891cc234a7fa7f129604a89ea3735d1081d3a60dada0dacb4c001d7a0216d27499a58966bca5bbfdd94af981b7d77b68139f4483445035a661f42efd7b9147117b5808ca4381f1ada5108c292a9f5b72c38454c35dde88ae7204e460c97769009b0575384c9d77c917aac7b6454244975a7e6767d9c1a2b0b49bacc01b600e04111a6da12183c37122a4c8f3460eef4d6001ad3e4d4bc785c3164db38dc57375c44e29e23955ac2a4591ab50e625309d3efcfec44a263c228a67168b0c92a9d3ff56d4d59e1d49a4acea3d916cf757f9aa4f97f08487664bd816c29a65abb5f7f8ae67caaa141d447bdedae0036aea7259602c0370191869fa88b875e301267898336ed861f5c63f19779fe9db9cd2d6e54fd484e5038017826425969fd73108514a1370f8a66d41f5c1a9fa1c86dbf5dfa554967da1226ba14eb289512fb135ef87570fac395da06313aea19eb153b656f774788a7cfad43c0ddb30c97db67a4baf91ce9dabed8737553eded429e24da4f8d7e6dc85c96104c0ef8ee4136be57ea7a4a8664427a07ef0fc0bb91b98619dd0a84151a5586b4e3e209ebf9c2dce5ed24885c5613bac47424a3c8c5c8efe79496e4684849e407f478f840089f2121a0294a8855d28b5225664ac61555a2173b25e19d3dfda951a81f9f44af99745297c404e85fe1d26ca58d52394f99230b60d29c76dfd36ed17481928c74b948098e6e12787e98f04f56122ceb4b1e1321ea7dc92551baf72ba8b8f1267524cc1ec17ef99f67f82b84f1636c92bd3c0c76074cbb1e46f0fa5822264d9cb82e86307d86532144e3e012876c2a00f378b849f4c360575b157836ba21c1ad0d99d95868733b46fd3998b19aeb6088942aa763c72acf552c12a2c005ac093a974e8fafbb887d02327a16f91f3a411fe460d0f7ba7680135e0a38a74196be9cc4ccc94a03bda694f1857d55959f59e86af6eac37e11c3a59aecf62a0150e17f4415e2be00a7a6a50ce84fb44cbdf05760f8e00d5eb46326b237f88317f18e9e0a736914623eccafe2d0403bfa137175252d18e5e6be3ea1f4ed16fcc9d420f57c69f55844b4bdf36dd75ba3bb985a79df63a9c03f48b2c4269c6c1cd252f1673e0954f4c05408cc23294ff8a6f3acffb1d8576856f06e3bcda0e651b32fa5275a7e474233b234803004ea9ecad801738e4870e5ad88a441edbcf8795551e822b9e7d9e1abccd2ba9654484b3442344eccc6bb312d8e284ffc8e4301370296354e976b6cc6068f7bb52eec60859d5ea3c643f4896f01be378f48217a079557c2a07524fa924cce7095243e8a207f9e1700646cd5f92c19a8a71bc5c026e55d013da10b1a042f00222b33cce1f9c89368c3d01d719105f6b5036a5b980e192a04182ce4df935e5c211a026a92f58c864d1cd9db22247a01d303328109b7db911386191287a7dea3589977f42c592ab080662fa111ce23c6f82fd4ba8218e6695164d07571eb8a9ff0f8be54b2f8922e68e9dee1c6880d931cdb9ef08ea39d9309cbace004aea21665d730f43993325cebd1f7b362ce86b3003b8f5a824b22f6fe2b4af99373d35e021ef634501c361104d319916bfcdf567c708a89765bff4f01bbb8710077bb209bf6b49b6a89fbe7cb5345f03d681e5a82384d241dbbb53082285a306aa6d3cc8c92724b98fd32d5ac210956cf6fab63857873424114d8c777e260e8b6d903337867773fef08ff6de6155a0732c862ca7d1ac0d6948e88e4262c740ceef6628ca625c562b8ed7c957566c07d3b17cf80d015fae1a49fa0172d4d86566b6e7369e4cf4570e278a7fb0ee3677a9ad60073b53c4c061b692ee2dfb007508ca71b1beb64d51c24c5a4b4eef3448a4c44f12078413296782f8a8b67905bc7a38c2d7ac434ab508db46b90b1344703481d3445ba8b2eb536dd61aa54d7fc1f2b7799ec9cbc08242ab63c9edec9f842fa5fc2c52dca0a50684829866a90a84e956d88f80288c7c87ce7b07ba696261599f9cf793de4ea4b1bbae4a03818e0c2a87f20457dee4ee20a2a32d17489824a237f3f08156cfaed81f42aba482c58e8d75dfdadbc6b9b34c25d4acee49fa0ff7d6b86a3b08a08f0f7f643d669e8496e3ff607ea38102f9b90e86f5a813c1ccaba3e5a0c92aab9fb26b72876d23c6d740c741397fc5b6f119224cb7f26302ec4f20c1d60828a31cf1edbf3e60635c025c3b038eec82b1e6c0e487650ff79a288252ae5519d90ed3f4731cb90eebdc0fd50ae2c4f9ae4f9188decbe3510a3962c6249593ff3dc72cecd73bdd0be9adc0560a1ae439a57044d8d2c292f26b1b0460f488f6fa1d668ef28f13d1142ce048253da3c2b57e8bc50f57f1418f6710a3e336f410d147f9e313be4be6a70a428638d063ded5cf944de675d8f1e67fe8368d3a90c2e4cd44d062f12146a3b9bb016a8ef01f5a666eaecdb069006e11742dd89d03a27620bc912f66e09dd6f72fd1a4e1240a612a58218a226e955fd9c738698e852ac0616de92e0c39edc0f1f5b2e83a23934dad87fabf83fe607070f1c8fb9f8ca90556531bb94aca661e8954b3fc3c4a0db2a3bdb8447afadb25fff973f4a8dc807b4e05a8eb60455ce46ede57ade47db3b989ad643d75c414c6040660211559b1b423787140745d9a3841558d169a19eaabc17a4d436a90c57754f21755b3fccc8774d52b72c0383bb26906384c5b80f445b6ad3e9cdf4b87054c0465d00dfa2551bb42cf223d6764f5e7837e547887f80bcbb898956db2c11330804bd8922eb1610c61e8d1d00559496e03e803756716cb9452ffe442662b4ebfb77f9c2ea60346827993e348846924189908c3ef1a27d581315a8c5107a2f95da8c1b066df226e09be3009f53a22e3fc8159f8f5c4d21edd8388a7eac29579db64330818b3d1d2fbc7cf644f00f59f8f1452c45c223b68bd58894e02c3190a9a39d657040154446730427a838dcc2e1ef1012381b929e5bd32dd73a43244596664f4c7031f6c52bd8c4b4f68f7ec9dcc403336a41cfda546ab6ae52bee74536c4e04151ca6bbc62edd7775631ee6188ba14e252b24920c37dd4d01ba1b54ba791f3783af4fb44f2012a07225e071028e23c812bfb201038d5633fcb5ce0e2337eaac4f5537a6b4201036ccf69642bc69049dc34f756726fec9620b771854ba03847e9387e844fd9dd4f833749b98af5e3b3b8b02d2308ce15c29beef079ec9b87c234ca3d30c0357613ebebed0fe2256e293f16986148c9026f07022a2dfa37e74737535083260e94f951787fb081e7193928ef9016e0048b6a1fbd4b892070e2da25dcaecc9e41c773e87a5c8e22e43679b63e3f6ce7207bcc84bf85199541cfdc394018f4edcc5c320567a40bcac7c076748b94f1cd3578ebf139025e50e4fd1a6b769665b500fe87c6ab3d72ca55a76cfbe309c51a22b6363fbb8bd6d3dda5f5e30f2f15672637668fbd76a5eddc9d160dccb274e102d51e859726660c15758800efe452d6695414728cf73c47560b4403355e5829b4b84f0b91ffb526b8165d5cd034a8adc10eb3d037ff28e61384c92e57bec679314906ef754a911bc978dbf211d9698e24ae865df1a0144ed820cecddae7ab9ff18e0d93cf493b47a6193ac36a4ac821e1b5690bd60f549879a1448dc9904d46322282236bdafe7674c9154b032c927fe0618347f08904b8cc0c67c48af20b8a7e3b6ca180c429ba92cae456a0b7d9355395b7efac7d06fba716ee3bcaf3d7b62caf0a909825e4d545b7069f8f8aa124c96802a8584235bc2e70aa17bd42d1287d2cbeb3b1935345bf404f131109909c61d7bfdf6445ad821d5fa27360d511db2beb6c24d6b5f574285efa801fd0ea294282776b1f8d839f8b245093ff4284e34cd0b919bf0cc8b3145ab8154de12fa890f2595641382c092a80f39dd3dd003dcd7443cbb8d73634bb1420a1e9d7c457c5b97cd0bb7f05442e9b1fce14340e5a56f785e82286fd0ee231848b0a163da02dd6880707f00209c91830ca24663d604a2bed4291782c1cb717a801cab5bf89947522ea0f5d2e8622df5f990de0e2ce621add13e3a808829f325a0065b20e047c1690f3001d48f5d11e5d818916ab02dc1144e8c7edef1ec9668c963cd8822ca13543cf24a7a6efe8c8c400969a4276e8ea1c113cb83b05d06da808820ddf680fc4df6494060154899fd7df4bce2cd03be707bce4cb0f35802ed8888a09b1806cc173a292631380b6e398b585fec04ef8001178b2dfaadb60a86af9b5b5336e8e87dd904aa89e2e4ef29ae960c576217ec579ffd2bec2ebec7dd596e83940db1d10fd37d0a359e19898df82f0ffe93fb58d45e6b911a4fff2fad83b6e57f6899a1c00cf32d3c88d90b760222685f9c7ac2d925ee4b2b7dab705476429117b927d73e5321c0395339fe9b45bed2e8fe55504b0b4bd4655b49f4bbcaa76808649c6149736e8bf0cd96999a3e80f3d1e5769dec51c17511c819b69beae5ec11a1606d92125f1e272f19cd2b6e0875f3994d0fdddb61fde5b9923226ddbf5a88f45245e453505a0bfac6deaa82662628e90c463b56d0b9fcf274114da5bda31c7756ccba82dcf18ba9efb4d9f5a3ad66ebe01b11445bcc845aef6a79c9a505f481c1b40c0b241162589abb47b0a972722c2a30021a4a0f69ec747ea0a14ee8576fafd44cc608056fe4a2b47d68dc84ca04970303ea3af1572727c8773bc0efb40eb2e6b83f8246027ae887f84c4682408e20167fc57c802f5c42f4353c80f3767fd966a3412b8dffe1ac0ba802eb8407dc2ad92d3824ed0146e686acd39cc0541206408c93ab2d455d35b44ea8dd3425b742f3115de0371e1e382686c164acc77e6ef1fd35cd2309009d216af4437b116bbab733d94ef9151a606d22b365f1421ee11d314caa6b0ca0d980f828bec755e09410752be9c04ecf14135d0fb002b82c596f516a90f174e5aeae321ea956f09057f681a0285abef092fdc236ec04c7a8a7a5e906f7ba2970e969f0d1dd60825b5223089afea53cc7a3c46bb227dddc8231ec4fec0eb3337a94ced31f1afc94040d96c0b7478db00a37477757dedd91844c7dcc513fa6398aae00ca6fb93e3ccbf0561adb57df91932cf7daecc6720d4672d48f97ab2a7e2e8e2895d06363a360cc6f4c1d6a38a8926271908e9854a860bd068b6b87305a12be13210d440095c6920b0404022542028722556db752410a05d91b08bd59e3ba43efd5510e463b292425734da7bbe8e6e0a381d0387d5d7fdda726694dac22c82db9edd7f46fb1f8b5bc49a1931c1857c473cf15a68248e3881d2c30dd8418de48719dcd9c5cb533f205ddb97c944a3a76c9caba2997e81b146c01e6b6c8610cd352272257f78c4f5c96dddf92ccca1fdb88a51b0938da35de534e8669fc574527cae0fb04d520bf3743422045411ef95f8954c64f006a06645e602ef45e2db6fa095932068afbf64095868154981d8cd7a2031e29b0a3bd9121f1107a89d6cf198bf816a5efb3e88ec7e4de19aaba4959338d236c2102a6f0289c2cb122ab0b08e796e9a5d918da0b05ea298ee139a47c7d5e7b02d879c76002a3107e48649654da6cbdfaff8f7c401b103ef7b69847afea894f5a3389b967b0531b6c62cf7638eac6e0409b64b18cf157aceffe89927ab0cf50dda62c6463d2a116017cc9f262df3fd1d79307987bd8c92abe9edf2803007ce412e1bc24525054b170a272ac0d639715d6223d8154a6b551986defa9fb861d12d45bc4fadd7e5d52b37192bfed615445d25b3ca1cee69a78aa98aaa78d0183a497ddf0bfdf7822e675acbce75dd6c17834d151efebe14817ab5aa00531af1c5bbeb29585fe77237fcb63a576c65273b72f04f1e996306a80f77c54f0504cc46ab2a921ed1fcf0ea6f948c44f446c5cced1f2d3a87cb72d2a01d04baebca569e898d39fa68891a6a2c576fbaba6f49f7e3f857f8c6692fa6809e32b568ad6918ae234cd03e8e94189a1037ceae9f749ee90e17d2749feeee2215974e20d61a2c11bc499d6858dd8d3ee4cb54314be82857b080feae2a1e84c7a8c1337424ae5c641b6f31ee29175802bf667e9f2df3062ae2971195af79277f9aed770b59cb15c2128cbbc5100075c87ca0e5b870dc4f2519ad794a790973510a3071dca8a22868589309333df93642186930744b7a3f4b10b16a691f883ebe78a40f415e6e3c3fad5b69788895c2b8f51b0d5fa6d2781979cd3b27bf223c72e758b9f51ac9bae35351c10796fd0a910d81b812b4a597347191a512359eec5139948c70b909bc18f01fefcfa729b54b5bdd73f90fc1565965c5b99855e18f7c0a9809484421af6a8036d97505e99ec4578ad19d81ef321aaa2e13d0277a3e451d17580d8273b8ea4df057da31082e2a898829e4ac8f9e753f03c64e677ec45eb9d04bf6642de408d7bc7f5951a6ea554ca8dfc3f34b4da8f473ee71d6c493fec648a0d54ba42753f80af13102cf751c1cc142874c457893bb987d4816d3eac4778c375cf0b946a75adf014d401ee1b1b68c0faad0a3f9d5a333bace06b66e1fe7ef5abb24fd17eaf424b5b0ce8c30caaa2795cfcf5b4c7be0a19378c5b8a17ca6bd5c0f737de4101c52737efc07b3f424f0ce3bc1e17ef37aee0f8d3f50f500a4ae2b60fe83b763afb91e8be9b1ee7c2db9bcd838a42fd367f6345cb85d2d07f4ac2bcc1a17e2f80576e2d4a46aba7c1f31eca3d7014d91e2ff528db6df69b97a12dac1edcc1f96e160fc5f536b298227573b3f6bc7aafb1eb20c4a93b2653c00b469e2239869291cd41b2c05cf30623229be4c0910a2e0b09481015331a810c51022139b5ba8e355900f5730d186718e5d4c4694f14004e39c920dc2fad8fe1ab06f1fd088a54684662647dc1eeec3c3057b056f1987f4cacc2c337120c3a9ee5cc0873a8e9d256c3b0673b12e51b4ad1fecae92eb88c19a66bdecdbaaa18e2eaae6ef23388563ece65a4032ee0cfde75469dbb5184f93a4d3d4e0afad3ac11cd6a94c252dd0e0886dc23c090361eaae8fe593635e315460055c7983a3c60290fb5a3f8805a39d751f01407c1ee1a601e33f04b78e99c9a459804cc2723f16997b30019366869b0af2bc794645a78b5c693fe865bce89e3bb30c0c9d7a41b5cfc7246cdf84ab956a6bab7d73b4301004e59b35771af6e24b68a139cf1bef110c00d1ee59d88a5ecda52b607bb68a2ee6060b02b69f3d015f66b8f349e28aca348a92b32a8138e5a5bfb2599be935d261c3723e12af5a393d917a51054b0b61af238a81e002ca831431abd523be4f5ed123c4e003bd5cc3ad0d89ffc715366e48112aa3552f0ea3044ea4a259e5280dc76fcfcd1552591a7724934975e7ed11663f489d3d20222d4e7d26b3b11428db4fa4c0ca1f37e719c9269c03b98308432685555d962a760a03b5f4125f5ec51556464d513c78cec110df14e372f00819269f51bb2f00f51f42aa2d5fc9affb57d4d5bbd80b25060e87dbe37795d70a5f137782d6398fab6e3e17ff0fb6384311094004c6e3486086036e325467876a4b6c5c5d1333ef221549d493721ee2ed4d42695fedcf20bf2f587af7a22fd0c698f9b09e3e9df7dc9c261ad9a8e868d9c4ca6237b6c1faed30a6ff7a8c9c878941c74c863191b32ffe6893133fa260ddadfc19638e5ccbf0fad24e98e78fc198726de7ac75f5c0a8cdb8956a4533a15b6ba523e473312d8c93d49b48eb8ebae6e0fd323e97de1a050e86c2701991537ca926ec410e41f8e449b6a8abb08e2deaaaa473debd3fecb0751a9562ff2758b22e889e708be4223cbfbea8d6cb1399a24ab986a326a43526d805d34c77b7fbf4b88e72b015afa586cc4de48a0e8f29b959e61262cdab22f304f2d77421cd22a1e1ac3dbe5e950a9ffa767f9de97d82fbf8f6bb98f5ba40fe1bd674a058faa9870213c9dc83f09313c6fd08dbb02265f133ab7c486c99bfc39c8f9bc21ad032e32541f350602b39a63379b051e1971630535c0d505fcd3e0798422fda0e5ebc43c616ad570514e91cf92ea8331a38fbb396494ee83eb7d89e32bdcd53a297690c6cc36aa8d375489e1d443ab5490674ec4280046f10062500ca2ef7cde639684d8bf83fb65a53377b0d4aff6b364ba03f0f0ada55b7c2f2cb43510d25991de6f952c9288e56c050ca473ee1f899ad6ac1b45931b971a47a7974438a52d3a722618c8a6f87f67aa851233f064430cdc33dbfc133c8f30267b256a93b8801e33bb52353246473743069a382ea64e29cb23920ba93b073d4be90e1a64d9acdfd97698b7fb817273a54a4907b4de64a09765d3a10b9b6899358f151dcc4c50b80b35036829b3b6b1dcb950387d0c00215c84d1505ea0741cc25f89f1689d88c5eea74e67a80fff1f36d0d6f5b5ae1cf3db0559b513dccb67dfe488571b0904c94e1d8676a54dd11605e3046e962d166f89111e8aa5cba7a7a94897248a43638ae08cf22c43d93fab1d6913560a17b1b2e5675786b63e7526cd7204d45b0641aed96ca87bb4555c622fc6ce844a078c5054cf3c3499a7e8f50cf1bbbcee79cc7792b12e0f404729fc1aae8b001b98002d2445601c162afcf6521ab5a11b372d77d4ce3fa5f69a79cb7cc3d55f8c2a8f902a170bcdd612a23dd990fcc5ee03f8dee66802ae615c037f97838acb8d2e402790285aba635c0fff414dce581e0678f13d7703167047112a5f1b5cf0254a3ed4278cb15e0e0f8fb10bbb0967f6fcade8ba69665e4d3eae95aeed3591e6fa9d19331299de468e853034bcae86330a5a4feced5167cabd197ba21ede0bdc8b42848b5b1d6cb008c1d14e40e4fcc947dbdceb23b0030c85623deded1d2e4ed3974345986c020e4da648968ee354b5b9b2274e17dcff0338d31a7761ef2a665ccad0f5cce363dd7ed6693fba93fb0f6ecb53ef21282ed7efb650f2b87be094d1011e526605c3369460d5df2c9b12bd6e728c401dfd253e28ffe01177643c97d1a1908e355cc22dd7246bfab54093a3de1de920cb0878835df6c73f85b5db058a9f9a668070e6e14445da202a90a77fdd658ceb08cdd6d2eb95f11a9ff052ff1569bcaddd5de5fcdf676a52e824708d588788f777dda322b4a973345f32d69f02e8b83883af8718da8a0b1ed71db19333953dd27e4b122d70fabd6b6109dbbbf45d461adb99061e61ee5c87309a9734303f5cc27955f72040b2956b2635a7dbc8184b9f4e3bfbd8fd5883a9158a7ac405f4f6afa2a4d654345ff7926b5266dad7be7d1cb27c5b5468bb8f71bb5d6fecdd6aa7304dd035d0d7e7789fea082afc80bf35d457419b0157802467cf820efdf500d2339888c24688c84a8451446383e8a7a078e1a6efacf89313f26e2ae848635726117136d8e20897892c7c1552a7c4b52c509e7467a34adede7aaff5b6f9d04d4176cae1b857caba6cab296843eabff5c0e92ab8cb909004e587d2ae3dd62c8d18020d41e47a8ee192708edcec84a886d390603ba3e2d265fba4681845e5393851e514350fefabeb9c099d43c12918eaa5a151d938ad44386095b210f41356ed4e99b343d447293c15c8095a658733719bed4fddd59983a9261953332a19d585d99a8f3520d1b86748b729bbe745c48b4a9abb9e6b74170b50ac5e86b627727dc78fe09074f8c294c9d3d28b1081bfa1de3279a5a099eb4ed2fe019df59c47a79ce6d5c595e6cc4f4aab7384137130a854fefedc34e788c459fa232373261850aa20d182fbd70573e413157b3a7636716a1db8600cdc1d46430dd6376d0167efd007955a04417d351f26575388984a003e781d6287e3658fbd175bfcda1fb7c238df0237509b6afe6f8d63bf04f62a6b9aed9f8797cd0d6e85d7c65284c762f1d86b71bc6f00ded72cf7a2b7f99c8c349cddbb12aa0d6e2b36fc50593d570489b9fd6e23bfad4431d91f5079c7bf122207e2d9d47cdcfaf8807c6858ab20fcb9ee7707cdc845f43f0630852e02332c93cfb77131f632ed91a491c6f7e78ca433e9db3dd7dca0ba42cd42247874bb43310bd10d32b1d5a8f9be9d429faaf5953ae30996f3ae8230a9e5a959d41f36f3748d0f8020654a0ef5fef6709952ac666fcd5bc8c2d811495b3b7c823f159e1531413cad77eb105d3ea25ad4ffed56bfaebfed20ddd7827692be98ce5ee4ac71430e8d386900dcc59f5f813f69c42dc08e0dd212a74678afc1cee15a5f86f4480422a50a17e32b2f73dc3f2c7eae8484e03d15fd86436aa9baa10d0838b34b94273c416526d790969ed90809c9a9e780dae766a74247331611db0e529ccd74c85ba072728fd4bcbd329a87b7f203d71aff340daa0896cdcc0b906891e95411b86485add2a0739e57510fc0c4b5099e1268471d6361a71b85b2d8d31165a2a2fa455b500e2d3a1c34fd3aaceac73e6095ea54cec47d3900797af0826bb44ee98ca84d472da574d4d9cd330861f00d87783a2fca51e908c506d6c7dae7beed85184cadbeeb7fc33616fe2aa7b6c576551f4541bd8a324ade2a67e6473803c709b6b70fa4617c11d445ae44f433e51b9bbe29e7a486e0a16627d6ace447f9cbb268acb8822f202be1fd93292ee93d884069da96d77db7c7694bbde292cda48d416c11eb53967ce35ea5ce3ce42dea1caf000c00175024763f92c4ed29a1304958f6610e2a482610f4f9f0495fae4803c8794d2c4cec1278136d491913d39f0a0b63991c9758eb93f8478d5e0e80ca3c95eda158ee58a65996a788dbc41912c578b68f4b36a4c03c68bdc14aecc7013a1fd7cc0ed9caa0d66ae2fda6f7a9a3d3c1e2b739d6ba184d40273e0e53808cee3eb9708e2a90f6e7df553a86952c7c1ca5d1142741fe65b98d70a559212bbaf045559bf296fe369ad4829309124fda3a344115eeeab63ef608f7c7c8613720fa7aa6015745620a982b028215328a9b237c2eb11864658e0a814a5b96e6e4a8cf38ed24aad88f84f11f2b7b02e21aca760289c601b71275fb42a9a65c1cc4c4e4f766b4a12571a9d5b3adb790eb5be79894663905b33447b8970f6e0c16b4404bfb6ba9e06698758f85ec690ab617bbe8bf788a61af7998d0dac5e3e5922f443a904a0e0812fc44216e015ae38709cea845aa03d8b09e92e4e4710099985b0b6d0cf0dd81efce57559a5387c633ce2a91788269bff73d10a76b6096f6a4360052cea6b639ea377f6675858f3312c80bf0a7b2ce14e27669afdd279dc39f0c2c26a2d1361e0d6f031214db0911b089dd9aeaede12b274b55d94bce4fd85793c43f84c433b3815525092df1976fe3019ade6cc2033ad0c1194c553f0b1d62234bec2f2055b641741491a21770600665bce371a4a24dc22e20b16b245a969e196b5004851d7155ea4a62794a997f5d220d1f490bd6b5c47974fca98562064c7866217881a4111038633c609856e46ec80614a22fa3b5209a4a68ddb94f66830ec49316926f880744d0f0a2e71c66d88021a5d7a2a96d47a085a1115707e6ba82b34959ae5327e9c04600b7243c190c9d2392cc234382ad0569b7c9e97eace435a608ef86d12c085c23b706e500b60b5c609be7bbbf2c42022e7dc003eb30c12cee35df2fa0e8681d2558cb0d3078c1617527312c00379df6156a22db59ec783e6db6b8b9cbdeea388b5e85ee950af85016c431aab0c722ac7e34fe29224a8b4b99753830ccae054a57cb309e9ad9f0b897c8a68f1099545fc9561dc9554be3e50076311f3dfb97508b26ab5a47d79acf55120713e28e50697c3c5d6be1c6f5e38dc685f3e8e91c6bff2bf664fe939011a5e8470302806214860453f14f3278e0ec561963c8938730c63b1c2b4cf7d123e0e0f358339106db564518216c1c9188b52be7289cc1dad4a505210a753215b317faf64ed1de1432650262c93b180ebe301a5cffbfdc090260cf88b8ccb87c94a7560111b84a3625f7ecb18c956a8946c941655c0d394ce8bed82428c2fa7a65e9a4743c310087409f3e64ceac84f3f7a31c508dba5459c6fb42170e3e99630b3d312936996a1a4408c8949bbb023f56048b5085a1b1b0b82c448bd4943bc974c6c04eab1b52ca2a9c93a5a8cacaf8fc0521663f1ca213beb96f40acaa8d385842c4518e7618ee571d13b4a2fb9b82f34aaeeea7d4c788c27201ab3b26523abb36c1768d78189e6ba158036fe7f15dcf2bc8652e434d4c9904a29139af06f4602ad2672c203543fe8305b8ab9862840cdcb9ee21c2848e3e018e79b9f7693a4d62e10b7b4a52e91171fa7121d2ca722f6d503394404f5b1604b9d0c55e2564176a9dabf70c93010c208b4120eae8f539dde476939a0208cea9896643548efcd254b760ac99c782557505191bbe682810083125770b13bda7e85c6e2383fb68da411a1cc7e08ea8696325945b8bb30dca82e5942780aa66025ecb5298424272803795bb78ab0d2ce626e9537f73e25a8b6aa2c9354401d8aa19268399f0caf9dbacb126602414682fcbba846f40b5ada409c09a2fd8ad1d36a3bc8ef5653469bbbf291c5f00cfaadb9ebddfa6e7176f5a8af70c56a50aa9731fd5131ecac35ccce5dcebab2df1b8c9673292eeaed6531e32ca4d889e5fd70dd2e5e5772cf1c7440fca39841356139c68abf19f0dd649eeff655e01ce2d0e1f576e2ed3699cfcb0278c8006fbf2ed74f204b8637893d1e4e6bd12f125dafa6c879f609b09e186100baff31bf739444e293d2d3061997183d659269b9f064b29ec0a9797d8e0dd928aaa990a67c2f45fe436cea5898036b65accd7a346d141a5fdc680faf6283c66993143af317ff878412da374e9036c3cc35df020b630f094da36f27eceb09caea3d3f21ff60505e86985ad7d0b32e0f351f38e58f37696cea261d740daf328fd568a4e2db05eb9a8f70d21a9ac7db82e1c13ae1c9dca292b7c624f8fd623b634a709b1686df5d03f7c9a2357859112b81d197a07dcdea2b85463a0b04501f0588fab8451e157a6fa9a3f7d60829f43d74e3e1592397d11b79f51792f7967d0d84f0d07de8a70f6ea49ec5461cb8389fbe6318a66e60b260b741f202e435e267b21359fa84db2229dfbacb0a9c10df218ac82894cef95c896b782d965909469cc3404d91c893cc1d327d321efedd414ae0f5388a4364572889967dd6c55ee594b5c027234f8000edcbf42a87501035040ec8b18439715ef1c2494b01bd20414734704d9f09c94149b458883334cadf1e8164f0c360a83a45a7ce733399a1539886b22002773111a3e20ba22713cc464deb0821158ca2e9d1201b4d3d7dc99badc945006f9afb03a28d07463a3dde016b669f68aa274fb0e77d12f01b2c31bc2a7004d4458c770216d13a08a87d6c143298d1507f7007fae2b7a179518949644198528eca7a2a347b0653b468ca957c828aa1f1ac29bdb247de5d7fc12cd68a60fb9d6f45d6d9a8eb2dbf7698757c60a90bcca8631f0fcc75da2027013f60a8e8a97423fd1011d7470d3c923204b07e1bd816fa8fa323c481ef032a782b2e395225dbcf687972c495c5900eff19ae06f686775c408499fab09bd74037d69ac4deec5a4b3a32746763544092c238f903bb99e9622547d35d2689c6ed9b1d191a81ba562b454009c38757201aeb6b904c48f0fbdb31667a004a4d93ddf02fc72fcd6f5fdbbad86290f67673ae4083af68d2fffe5fcd7393e7ac0b3f974107b6c8b45305a13a5e1597b1db5430f0460029494506d0ec6c6ae2b250940132b2b419a83dc94e67c85d0d6043bc8b0d7891f27dbde481262fc5c6803d30a6d4ca87e98431e3c1c67d08a2c21ad9c432d776c217f653bd0ef6a381c6035e5a03430271be5153f99cb1122c82be491501fe8af1f17ee41a314347cf899436076eccc1aaef8da750a5527994530c744e0112e87c4f5c410f65e24e54883d3237702f0921120c43c7dc13ec17e84950c06c5478ca1bae29ef880e121c87d5823038dce73223d389ddd638614e4ecc3ee42d0d1b5e361e8290b0b68287198c4ce14985798c8b3681f4f93ae9141df3126e4b490f7dc738402e4ebb71ebd64a70a9e4af3ce1dc7c18514b1e52e4125b90ab4caff114d92899dfd24922a08241c160df2f6f9afd34adb8bce9e03387d29c7280fc3692f27ef4d5bd50782e46f7874cf354a62ff5a5d10f875265e604b2d6bc6fc9d45da650980fae79a02c81dfcc09a86f1ad9e9d19067deb012bdb15817f712684ab6f9f141b899193224f23eb0fb169bf48d8bd0ae080d89abc797ea175fc72dd7443b5a857dbf3825278256b555205acb80bee4ce08df4ee21a86b84dace2d03ee7be06a9d0bdf1708f242b5fd1405b698228cfc329dd7e3644ae678143ec391c7e3f63ddf7f7122e27a681e3d3788233d63380d04986b1048ea44bd8b13a4d16da7730b4e662aa5cc65bc7e44d250a3971e34a4b2da1aab6b99b0a9c366751b92db0a9ebac3c460e3b4a6834269f69cd28cd77535a81f4a5b6244c3dd0cc31f35f4a1515f7d150530f8be634a25646e1e9b67f63b13af37a3704fd1ca17cf08b06d38d198080563820714d583dc295b0a03275280a2f045f46122217702c5e059561ef1ab0facb11bd3eb2d3b36b733655ff4f9531b540b025d216e3a961d9d0213b4388b267d3d2631bc8bfa53a78780a3bf38b3b5981ed8f1466fcf09e04b169434f6d53587c2b1370cb0e323108b205e7cf34022f998aaea85c8a6b190e18e55b477a3a26efc63549970a139762019b9d384a8eb25998247e6bf097d0eab000629a8680f6d4348af9fc6c1a89b80097a2b9fed20cd04a5d0e735876b21cce9085ce8e1bc043cc6ed140a0773b3ba5edc724786a08ded0b0dfcc0c852216e73ad6e253074ce70a41a2a47cf1be2a8287558649c556fdc1521bca9963b2a08fde42ba5e05f90d564b28e64a435a538f0ffcc9377405ce8163b2cf81bc9e746232a89c1850161f39e6c3698e488426008035797c04f8be6c5dace78c453d94b81ba13e08c64bba982f885d70fa1874cb9707fbfb1be4afd474404eee700bcb06a8edff65d4f0750c97a43e329347d6aa1442e9247a593fb44167356e22002c1037a545027170b992bdaa40181cba93f95b6660a2c9d9defef43b62ccc42958a962b23bcc03bc8910f7d8dd89c87e7e3048f63460bc1994ed758c99bb324ad42f91c2121f146267873303862942e046609a6dc6a6828e31462fecdb33ec980620a107c58c7922a0555f8b4020f45375930357cefaa42d1f0993d09fab47ae03710920f2bb2f731b6a2363fb946d0877d5bc11ac8cab04cbae084489db108e8c171d032f9181efc740af06192419bd3847919ece1a9580dc94a416a652899a94e7988e0bde35c8162d92a72e45585e9a2f330239c7ca5eeda206955266227537d4f419b393e36a878ba34c86e1648875479e3de6c26e2209e51dd434ed6f603b10ce2c0857e2358973f796fb2539ad18d53f6d324def2b7dfaf4352c62bf0f54200ba761a424bf01936362a3421ed897e62f9c633b11e97817ce688375e87c9f51c73f5f3b0b495d15404f69923c5d19f413405ec4ed95ccedb7d574c8924d4c198666a0713ee2eb1720afc8147956ed37f83ecc8417e7d83c974db28ff0c3e8f55d482a7873ec3a9d49ba92dc93fcb5fa3cf7302f1aba841036a6a5da777a17d73a49de77f1e2da190fb685342fb3e8c12c2b2dafa01c6baf28143f2c26092bec6803bba2453dc45f12b14114692228b158f08b0b1fb01cf07ee35658f00c0c0d006f64e3f47c4596e390fdc3b24ebb9990b2764ebca12dafb8533da4479986a833a94619318c578e1d324ab1b754b28aa51adca11c3aa0d87730e3f9f67351a93d1d69e2301ddfe8f1a165be6139f8adf215825053643b566c59994f6f232b63f0c59af1f2b35c59c1f0a64cd9d2de416d0d63fbb06bf611223cd79f0bb0dd97ceab786c2d74727b984b43aba96be6ecc4e7ecf1c69bc45a41d3bd4fd3d9ba731f4f68cca917b133550ffe2b1bd2fb4285e58fc8c66feb050bd8282c958c1a605f09f64977e94e705be76b5655c589f067b0af129a17420926396d35471d804912b23785aff40a0678211271d8c93c926e342de06199dca626687bb65c8ae866f3ea3c3726f16d60889790b423e29581ba6171bb1645b2ff421f641874dff7e954772af8ad96020898e0c0e0ee3f55219adf92146acc5743d3029836fe15545ecd30534222119574e59da5d231e2d0e20e57cd01e61f8425b61f893d09608a643e372d501a37e2208c67b8e9a004e2442d9ce048d59740c6087500c343e3870622b71eadc6d5bb85283a1aa5b855bb402bd27eb919a162ca1a70fd9d14cde7ffc8a39050e8e3d362c52107d2bea2411f0b041f3c40fd2a9222dad6605b3a3dd7d4330897f857832e3e117d4f4b3cfe88a4e4c8b15a4a9dfcfba5795af10224aab2d42cff2e23e8a5b10c8fa188f7ebe827932f1382a6628a1a94b2b03537b0c4cd1624e946361f273af651e162a2e7f40831200622586de81f8e59cf9d8a9d171e40ea3e9a41e51fc90b3106760c81863887e67cfb348a3759630e94a10772d8d7d6b0ed72961e0f60c8684616245b7744ebd531586f221d5f9a989cd816516f180f6c5264b831c7b8d91353f93dafb55d1c7031dac523a2f55c3099908233d75fe881c957aae739da1c70856547567c3fdb841340666d1fda32b663d5e732d5addc507f1278a0c3cc9209eb0da44de4acf23b0f061c065c12a2c6d99e4219b62736a6398e616ed9d3a19a73aa1cde6762dac4ff968e6be93c026fe12b2e29eb11315d58ea9712d75d01b94df72201765404e9c4ec8175e8c04ae5bc55916e0bba425d10d270cf4b4ab8512607aeaad271ce0c298ea3bf83029e559b78cf6347df357e3fe2913da9b4dde6999247880ac96823cb0af3397fc2467655cc9c5bfe6004f55121f459743fa409092766bcd72fc971ac1abb5b36e477b82fbc2da1e9e131544238a45746da3c9f7892488d60ddcb16073bac6e1335aaa2e5f881120687d64b01428c54089a417bc645a01c0dec22c050056f10ce4adeb141a79a43e724c1681177b8d276ca021e868885a7ef7e723499d4ab7d184ec81a336f5a53251bc5ca1304f58a922e938291d2b256c601611e64a9c33f66d166684e4af6ca82879392d3bcb21ecf34de7602ed9bb793d166e278053a36f69e8e7a9896b1ecb3e02d7efa454126cf93e2305b41e9a4e9c49823e65720e4c69999ccaa934ce636f3b3012841186dbff4064be696939d257318aec0601fe09e166074a47027f146d4244b893a984c8450880350d2ac6346a1593672c462547e1f379dba37ba148a77d068aab432b6d25f1bf5f61147316f4730673dedda5d53289336ef47e6c1985fe9797a372c8ca159079aea518f1d18cb69f1824ab902f78fe7a8e82367aa24659f40a18618eed97e7b6f0a0941f096ad5af494d391af892115d0a32e0ebdcf994ff32667ebea2277e2182a55d4881fd6022399a72f98736a4bc9c38a274316ed0e60aaef5031e4e44833163e1bae646467e3db2ba684db8c740a2407ca4bc0ce2fd89d2028c2fd4e19a2ede0bfe0bc3b1f1b7a1005d126a1f0853993812ce905b3f5d3b2b8f91cefb79eb2bcec998eaca7985392895d76310ea7a43d065f8782eb6ca7bfd75c0611e9edf842257bf7e31543859addf15df8f969b8f8cc3ab5620ac23e46560c36fd2c463323af628b5caede60e13ab82775b3c12cc1592ed4bb64318df24792bd8c96e09d79ed6ff7c33573da6450e76fd40a2e39510ca598795a31f1370df3dbb95f47aa8be9f4bb8dbfbc86e2838eb42a535bc9142da346665f3d8c996b0e444730922c619d49672a03af227147bffb2a67d5c9b0650c8844926b2fe6828b09059fd7cdf248174bf62d791b4d243acd6375dfb3a14d5750645be2b8976210417dc9b9e62291284245d042bb7cfa4e26cb15de6514dc943fc2cce5d3252d4b2f114835d998cca8b1c3e18c70284215f7f16acc60b731664fcb7214659cc4b25e39aafd1d35e567d5392c8aa4fa7730fd521781abf96591f3b597bd59a8c27808907d07980f00026ca1eed48c190cac554f3dee4329683607049bcc39101c9dd39b0854bf6ac7b2f2bb3a52df2d58fa2e9856db3c36a85a09bd44e773124ba8203fc3cf4e82f7d571903e7030b6365bd1d2d30d99b498dde04736d95c80e27abee98d7e1e34dde85aefd42debff06b15e68dff4af0a7434f11e19b10886170901f120a877d51e5bd74a89f6c282a0e3085e6e8fdefa552bca36ad05c6f14b5c162b9980932afa67207187bdd0c7f180c6a96e85f10b40c5e076e6ee212164a3a35bdb6a6a04c2588e08b6d5692a429a62cf639aee444953f9fd0120428f631524d73de6fc1295a6760e24a7d21d1882a7b6e3d758a7e15f7a29a9d307789abedd4d1fec5469b605d336b91636b52c688ab7d0e2a7e12d3b58d8ba2073d0ae48eacda86ec6469f7ccd4a73278f51d08e848e8f35d9c5f527bdf2c5bdc3380ca296598923394d1033cfd2da9a3942d2620af6bc314cf07d47d84ea7d28154f48088da7a175ab0bd368a3abcf68f5197f7c6fb6675ec0962104d463051e0109f6ade18a99540a2ab906fc89c2d2d898b194acfb46454d673cdd54f232ffe3f828fd1711b16d0db83a554f046d0da97273e04f6ec0760f5e5804e4dfe54ea430fd0621e2302969e7fea542e4aefb37923c535cb3c27ace473a33a4934536dc40e8e187cad086957a88a8b452bc5673c0c90f98d94fccc8a7ad707d07d7f102b3f4fb192857f7d599bf53190939a281136a84954749604efad2a0b6101c932e507741fbdbf5c5731e0b223d21f855299d790649231fc0cbbd131c44091b45ba7f9679781e15989f450b646d3d8f630aa66eeff0cf4b2ac9c31267a1d554ce9c92a29d05a35567ccfc790a9fdbab5848f7097456d438b5795a3c854aa0d9d0ad53e3de807f7bb309dcfd89c0ca120078f9c3f16b8dc031d7989399708779e0082df7c65dc8d14583c31622a30cf958de3892231e5a4db3943cc9623c89e8fe53193c47a731ffb1a1d9b5138137e4daa6e68a918a8f0bc53b8535213b665b397b4755524613849a658215e2fd5bc43a03d7eba78081a56bd0e19377886d63ec5453e5c17804a6de73b96465e40237e1a0fd9c1567a34007c2b78e27cdd1b12e346c0bf58ed08498d01e1919dacf29436b3d0d93da18af466a322f9586a51e62c7688b9d5ab13fd71639796d5f6c524f04734f1f3aec8c0162c3dc96f9a3d5beec4c9f03ea3bd4d73626667bc3fc80377d4aa16a4e86ea2c728a8f3012b06c747b30332ce0ed6d7b3600a51249670721bc8950ea3af932a9e466c8fe432cc6c8e317dec0b36075a201352ca5d6c14c397218f9257ad7242e2d6e97b9710b7efafa1e19e104c113585a0858428d7b9e5fd94ae0685f10187f427ebdd4b5a1e81e359611908c50181fd13c7c2df9ed6a28b30dfa34a5ccd0e8c779f7897f0525f9c70a734670ee0f5b2886bf93a0248ab07d348c97fd6ecd9e7499d73d2d198fd50d420bab89607fc83ec58ec96a61481e89f5888634fe95b440d3020b29083cacccd86aec51d9bc925c9fedb4368301070af3a50860297fe5d248c01c9f29d82e1046f508ac522062b828a0d397e14d687714d62c5266f31d093c153f30f4dcc63934a74fa98bfcd95b15549c28280884c3ccfa729e294fbc00133060ead08e40d73efb381e2594d45af8e1a619df95ff599585d57b028781d46f002bf4eefc08e3cefa00d0ebbbb87c177d8a53b410a315738414224f25433891c943838d9faaa16fc559eb1d3771af96e50557fd717ccc1b38285bedd0ed7fb871b48a58d9bbf7144faebb9c4bd7abe44f7199085b5792c59ae7331226eff1565b0aaaa9a9de25f6e4c5a32763e4150ce76f445b381d3b70ff1d31a298f2c3353b36922a9779c3949e1069bba9993ff8291ccfcdd9bb9bcb69dbaeabfe4cad97e3aeead214c2aba536218379955fb554a32c2d0bfd08b4968e4d075c775505d840af9d8d4b73179d619a794ce4333d541d060133e3082c016888d6385f494453e3051e2182c9c1a61a2463be1e1749dd7d4185d224a1937d4753f41f53b8226417cf48e21e10356e3085ac00581055dcfb7a5834b5e8339da87ddefd02cbd233fe55bd09fc4abcf963c89e6b1b7f9c0dbe9b7042262e2f413330c5497fe9dc548dce2442aa276b30dc0cd94ebb9d5f79d2bbb99680a0485674545b208ac2d608c1c9973f3fa79d281f310da6bbde311563c88f61a6362081da83fbb46db115a7c2e710e9e43623496acad51410e8dc120ce5d5b4a4737c3593a2dd02b847bb66b37f2e955c0e2d3bec6ef3ebf601b83bb34aeac1cbaa340982e0836f0ad8c57781f3301284ad3e41a5b8b7d864d823bb3bfeed671caa0e3f338a424887a77c78c8fb6ccdfc379a6b91558a5ba2966ac6a33c1b549e4de757abbb6ad0ae2b8525b54c7621c2f388e11ac0d72e401f60d9cd20ee5e8ba102f280f3d618e719a2309ef7a9f7af61231610b91527874a18065c55594d77b14018205fd9c02ae2d9451edd605e8fa743986d19408da77057aa1ea3f7dcf8b77caead82db0c3778cd88ee1d320e901b4a95998eb193e3e35d0e237bc97663855a79c7a2ecc1b63cef68337ba46146e89e575d8dbe1b9492faa76e385e4561f5996ad3f397e46547233f0086887bacee09097514183b5357bbcb4cebb598490d92ae7e59658fdd4301d3f0bd1753f84fbfb8428a21f5c9004f9bdea138e5915f24bf543d71d86c49339e907959befb3aac3411ee5eb08b848d9877322526b8d4b4590aa3555857c5f52e47c9e44dbfb8b21c5ca08a6cd7ae1fd486a61a2d59c805ba974d62fe249a81ea83ed8ff2e875a20102daacc26e3bd47601ab0995242913e897a12cb4725767434b44371824f78e6e9ead3dae5481450020fa9c194f0bd55d5f313750217cca2419c7f4a03eb96283fcc09f690d4775b828deb39480d9125aa48832401ea5f72af859d00d2e04b89a6ebc889cc43a69409c5bb55b2605daadb372fe44b4ad630883499906a36d8efdd4c81aa471464f032a91d969570f99af47ec4867c06fde8e91c8241549fbfdec0590fc9e1de1eb31bcbaa1c92f4e1ad92062d765d5817328e39cc2b637382f0d393d7f5c3535d57409746b174d5e4fceec1e64397da0a3db7e660d58e0ece4cdd5a8c7a3216109a224788971866a9fb91b3e007a4ccdd11ced15b2951c188cbbc023c96317ba10c08b13b0f34e2a0cc376b44e6fbcebcd144eafe04da7beb555fc5294c42a37b078edc08ab97dcdc6755209edd82d2f63083ddd5d82a68b695c22b114e998d108bbb6d55a32a6447e10e4c128f78f5e6ccc95bcf73935d3182e8961b0e87589e1a37da02438f1ab9935cbcbd294495c4bcc022a80a99afc402a3f5aa1da029ebf6245f6d0616b661345a83f81ef21c01ecead1eee53c0c730f21381c744c4358680d6d476e86216a231dc7e60265c96de7e1c2a582ba2548e8028c184ab96a5b5f652860746cfd8f5409544305287d0a9a16c6288d74dbaff22b770e541aa3e2c1b66f6f0db6e6962dbc5dc59cc323f8a80f09e210475fc72f3b16524c1b7fa425efe22eed332cfe9b43ee109fec380dee2d687c28f1c385f592e0d66c87eae662cc97607f0c1d7291172dfb20ffda467bfe040f0c5283641acb8f8da138565f635f233d589a626428aaebcb471a510f6afbdac0196bc3ab12a561aea2ff551a6c6385386a31617474ae28ee7051b5ab033fdcaba33704afc1f35e7c382a3625d950019e95c29341af49a4494edb0f1195b4fe1e196c068a85f43e1291ff0c3b074496d927b6646318d8fb9bef4deca91b6a396370c79daccd74e9fab04f65baf5c39dfbd17fdca9da4a39e291ce5dacc977e8f2335e65b9d5cf99dbddf9dca59a7a3162f1865f9cc9f6c9f2b28f6a79d5cb1fdbd97ff8b5facf01a2619b0fcc74ad94e9a37a9e879b5c98320bf0fc0b4e65eddf164b70e8b74a102e2b8b838341a9697a5251ca23213c5107e7c1f56802134ef33c903ce05117542c678dd23c7bc15930a122689e4830b2c4bb6b7a3ea522e73016dcbcf98dfda9779cdecb53f647fd7eb30e414c60a1720e4d704968478f01ffa4581efbefba50b1c18f0a4363648159e6ac646a03531ff3f471dce84a6ac272a5ab83fd108f6269e26bf703f471ea41dd0ea9c062908e77d052a5dadeb0d0c077737051102c4a100e3a4ce0f8d58aa83b8c6aecb404d22a92c4a59e06aa8bb0a16545647ba682978f8dc8998bb21b4fa63fb244baa4e590ad98cd3b8fdac2e5e196ed1438cff232a1c8bcb3940b5061e242b428397ed643d208ef6225b06f75e9ec0c474f3145427671399af4c41489bb010c543b86bb77d4fd7d3818bcaabafedaf52a1900c5f38fa3b48bb47979945f13a5d7a54a4a95cee395c4b3b374c1f4049828da1c64ac60440c4ef7bf7567997f4981d1811dc6ffc15177b4ff5fd4def84428e255646f4934b6ceebdde26bac206345c6abe71715a660332a6dc9780bcfa1318df20b499b51577c50e5e24cbb44a202a17857897903a524ea8947eec405922a885008dbbd15354ce5e3a8300a9bcb334a7c145214f81a6a7fbd02515be0c7731077d60de89a3a6ed0989211447591d1dc478abc4b8de864374d130744370a4f95957ea2194f3ce00ade664c98d2454c3bc6ecd94a14e55d49d58df9a045d461daf89587fcb9eb9f2d7e144c3484d0a9c3e8c6bf8b0ae33af45200db5f7b904a8d188713226ceaa62a0fa6537084e0129339175f7e26e1a092b4e170aa60509e5161c97df6511a8901ebca0ba6ea66293e4c55a09b46741211777e1d489770e04aeeb8e576469c395cc8c0eb887f726319bae29d74840cd0f3f983505f00af5e432d253a9b157f105ff4d540f34f100981bc5bbf6fa9f0895e45adf76d40930945a7a313f082349c0ad3f8dda9c34be3fee78d12454f9ec555873707432c32ea6623e856dd53bf800c92dc3df6e4a415ab204a09ae7bd24b64e4263c0d398029cd7268ea1d5628d73a02f05dc939d9db9e21534e8bfabe52edfa6be4dc5ec3a6512faaa557a3de9ecf47264b7ea85a38e409486ef6aaf6ed52e6e8d17579f410e531f66981b1fdfa354edbec30a8c7a07e941bda58d7efb9c526f5020b35218b069a8038c737ccd6596b9374241e1c48e72899ff26fe3a1ae9ffa49b1d7e3dac2fd73b237a2b28ba8bcd0a9d1500555d1e485a555c5bf61983593e6a9002ca66f42fb19ef86d6daffa4c0db8d401f602e76fba979dc0ba77c04a8b6ac59a967cb55d41abaa9f7d6b42be836add0e82c1a5a1bb224717f913f2d77ad57de7f90f194a5b88da35005c67a6ed16b74068931783add5a00a1d3e081cd715180882950d39d789ac162ca896e7b7179bb716b9d73c426d86c54c407eead4eeef0ae022e5a3fa7739cf1fa57325faca57413f26100d2d178844da54418c2d78501e4b6e15b67f77d3edd3f0f08a3d568525dc3e65436bcc5a5cbcd49857ad4198ac19037e522085b438671b2bb54e2da853b840771c6a129c2b286cbd607c5e94bd7954b51d7bb6129e6a3b7621a096e0f88533dda806d519b0f06df753ba1e6ac35a02a9570deded0a592351dcea5e33cfa80493748b74251b8ed92732de464c74f8ef83d0ad3508c9cb320bcf0fb8a3cc67568433c32f16227671d05d93c6fb7ff7024fd0b4984d238bf6e58f88d4922aa9ff3c20b04d5026696045eb7b3214be7b159cf44247ae743bd3fdbddbd4d69be9d9eb20c609a7514d9072a297eaacbfd62aeef112f9667dfd099e79b7381407e0f702d239457efee053f89731965483b7dd5a4696c2624d0dcdd1d1ed0764becade0092d91570aba7fda3503f9cba8e5cf2ef7ce5ad478db4cda0225b0174e5e8d7abf16b58f7e7242c416421956c8f23f3141f44ed09cb3face2acf422cfdc1c098626047abc6736872b5111cd002325f5f88ce5a6de7fecc55c819cdbc6d6b9f5686f063a895346b1d255ecce17f445273eda65abfe39a4ffd2e45274861272229da87bd0f91e2c33582c6b7e423822b005cc9ce82cfa66a297012ad980cdd9a2a095a28bd718cd6214b5697b9ca4230042ef157dab6da4b33b5c43407a7d79266a0703c0b195d724760e06077f28f9a7b017f4e5303721a6aa736c9edcc2c67f0aaae24cfb022a8c7320dfe2d123d8fb2ff740cb41481966abd55a3181f2f8624d699232bb5c0c21ca670b55d21af8ca41e26c2b5a889f85652a6706785731d530691aadcd9b112b8b1a7e1001404750d8b3a787560c151b363c75509c063ac55bac8a8231e6bcd125c82989036fe2c4d27b3acf2c72397830b44fdb4961aaf611af7d882c6138adb27b0ede3e64e03ee7950ec28983530374ba270e789f6fc10dc149bbe98ae2dcaf4b277c7a8483bca20442df3975521628ff68311d6bd1ba1676297fad85f601f684ca2f848202aeaccae8f61533759846183064b14da21dfc98f232278c876c7d21b4126e6f384e82ce437a80217d815957f08ed553cd39712657aac90f143bddf168ad25c5593502c1960ef1c94108e81942ea63914008ac0943d4b26c9d9533051dc846ec3a823a3a91f0253f2efab36737cba64136c1c939f5e5724d7a635070dade38142abffe0cbe245a76a23205ce38eabb3c261ccc0de020046ff18116f4a05699a472db280f5d7a63022a4708d80e2c10ff71584d350abc60bb80179c61550f3c2a8666befa078cf2a1713e796a667615eadde4f033239c38025f0439cad22e2bd14c242578f2d789cdb963c547a2fcadbad2425e2486e86f53396f56c05fe670f5acc7ffedc8929a3a219aa258ac20804991a733c394f3db6face0dbc3b5b0a4cd277fa60394ff3dcfebf920e7fd6110035a41c800b9c44a8150f1f500960f0838017118ff787e1e8f6c2856a901518ba1bc08d3047abce5546c20c29792fd701f23f69dd30929a19a013ac59d22b66f0390262e1347b6506006ccc5a0ac3a5f8a4ff82d008e94c1f10ecc9a9b0225accd1fa52055eeb6d10615ff701710ce16f089141d85c335a48aea28569f3630e5beca569027bfa5805ab809dbba53f8e47bc1ec18c091c00fd754d0bc1d82dbef8d8b0bfee642682fd66152f0256034687619f1d5a9b2b07f3b89863778113f31752b3fc1052d100530e110c4e272b4bd785dfe94c733db9a0c5c2dde42484e3087f6263f615961dc052bf3e92cd5a5b9f0c78943a37ce318081c2e6bc4ee5f33ff2cac3d3ea6647ca2a9d0ed9832747293d5367741354434eaee14e803078b5e35a765be3268a6b3ba23573bd13c4ee7543a10bc875995b9bd1beaffb036e033b4e9787c0090de9c3a401170e1dd05d39d1932eab976fab19cfa043eefc773bffaf864cbff2f46a9a24ff2bb313938496718da20763864503c1999fcd75793474d9b713b9926c12522e4494989f575f85f19cce9de41bfb971fdeab7443a2034daa567343f686e93b0d46b469670db8611424552e93272a7fea33199e0f7cda952216f2829977c60a1485b610c7942745e2eb72e0ab781c67b6391ccc20b618299ad397b040cf6258bfe5faaa177e31a239cf53d75c784772c9a0ca863fdcc8614ff4dfe847d77b4bd95abaf0d9fdcc280f87d25bef9029de596c507d6e4467ae7080621b0d4bcbc1fae7c2b4494eda19b7aaed14dc1e2504fdd1806f483baa56c3edd69211b8e626e0e00f8908433fcc84b82ddb5d9354d9eb90324ca3267e5e6eebb575783c0bc8289d96e898cad899aa46ab0d6042351d3b42149d0148370c7262f316bd5558c1f26d6a08d0cad510ee8a544e6b689b8dc28291c21a7d1dc36358c472cc244b3719695c323ee71a621e7b5ca6f1d348ecf320b419d115d7f4a8400e1a22ec8c13abe9d4aff0eb22b1cd64003ab37114157d88ba901507cd3cb34844a8644d7055887b56559d204ff751893ed4d4884832a875e9af3561408fd68eb88bdc73da9300a0b5330aec525c61dd03c3eeb037e4c17df009b1734178e8407284f3d7783783c24ce9c08ceaef633eb6630b661bf8fd6fc7d2d4e5ae206356b4a5064070d1c18afba8318500095879e9e8f5a215619be089f66396d152de7be62e4a3ddc08c257406a20869d5dc5b8e39477d524a86a69373d4a221815a228f212c81e5097bcdeb24ac942fd07a1de11efa619a99388c921d72654a7d5034efde0dd4d69667037a8ebf2e51298bcf9a4cb3e218cbaeaee74247ec274de0416d043b156695c87814762cdda88cc14382a89402bf997d17e9069a29a23cfbb7676824d88922a650c5cb68e7f98b3e695048ed5fa72a0b694649eae9487ab33970d0d3f24821ba7a983c5691f595658f8001699ada026d4f8871feb120454360e613ea2c3e612e9a084cac1ea3b94db0373cfb8018e3116c3f493547f5338cd17b29434cf4c7a7a1695fe7229ae459c1aa7dfc541033523ce5ba4845f397e4f375e5dd197c5119d76e4aba2f3431720776088532ef1a10231baef9252c41b485078c5dd9e0f29e30f00d36f13054d530d154aa6af99d4782220b87ded643c4ad0917cdad21cea635c80fe5f9640a9e7184e211a09e2ae57837dd8714516f57df01a0b1b4c9d07451b15d9c8d683ee71d6ea81d66d38ecbf0494f66aca5c8c11854dd59f6e42e3d6633afcb6b1757742dfa846b7496b1aecfafeb1c80f0fef9868120f9da6d3df27fcf3d15c23b32191b322fca9f8c04895c9898697fe44656285f31142c13b075bd5a7be7fbd54462c448b85d394a999d54f87249bc3bde6943fc12dca96046f0dcd79a6e2d8c921863a52883b2245d27dbf3e7b139175be3eb2a11c7b8d731e9875c16645c516a09178b03fff7ff8ea95b97722122091f9d3743ed2178f219119d610b0b48f7f5f2158b0472b3f60ecc58d77be215f256d68e18907ac8553152e71cbce29993eede9160aba511a22de168eede01010a718522204c7ac3d4afd3da7b8fe33191d5636d2a3997b94a1e07433faa6be59d294014a0ae2b0f49758ba90c243a3927d922ea8c5ab766a9834c49f5e22093c7781f89f6cc3a5b71f7069d2f93e71fbb2e81a36059003a9c579f7f9abc599b46d6d4cf4aabba9e19927d716bc6639d5773b2094b6393662019f0d3b8f9487a445bce92e552d123cde78f0cbde0a14d30e80f931a469e80b576edcad175c7aa711fd994929adc91e2cc9230449b53595944e9a8f7beac0f1b415749427eff62711fd34e760999e9e07e88970c6dc388c492c6d724c04f18afb5dc9d1f1ee40440f861678b20cd2c3713f2cff272f7315195116747e1595f67fbf4595c40e765d81d113c526d357d831c40d6c2463d50859d90cf6f33d1770f291404bb4447fbf17c8dd9d6ebcc65f10751517f9a95239a49cc99d08960ce6df9943ae5b19434c9b4799c3320ea3c87fa36babc54b4ce11d839847b13e985835726a89f3bb1a5a41fa57d33a818bad6bd85c80a4d5a1c7970e7bf3464f61b4435407d2b719a5fafe0d6751d49724a24789758b263fd7c8678ecabef563054776e6c83aa0d438244a9b31fe431c22603aa9f3c97855915c7411e2d65fbe2d2f81bbf968434fe1fbb2246bd029031dec2acb7b21403507ca57275193a80bed0fb1caa4dee49d632a9a868e4dc7f86242599f638333c060ddd82b28e852c962edbf6c9280683c5322af1cd1b7057e548cf3c026950daaa01660a6b2e665979afed492e726ef9319e109a34777c3604da0b67985830d819a703f58e4c171204304c37962df421420eceb42088c85ede5536138d944955e5daaf3c573e90c1c7d591ae333800eaf1c5078178f1a0d938eb33342860b9e112c294547c0b54c206fb4deebdb7dc5b4ab9a54c49066509890974095664f8de134a86df3d4fa9542a957213a8a14051821da118e4ee6600e4f79586162b7c10054fc9864617484a3b591459cb17d14a1496d218af9feee84ce4ab208dc49e43f38ce53edf4d3ecaa981b5be73ed06ebe76b3ab4e429dfba4ce4bb12a791df65a75376ca4e2957e238d200fe3418625c3f5716b9bb7ee06bcd862c957396a259aa53a9799aa779ca30f6e3b8161bcbea27e4a0be1b328afc91809f350bfa6a4591ecfb306e4a6e62fd32b51e895e7537f2e752a5f3d2643bb751391f02ec9302a549a6919f14283899e551f961ce9741e4fba74c359de32429a5bc6dea9c56d239adc4d4fd26ee9ece51d24bdc518da2d9632fafd8ce8ee2e291bc05497834d88d149890e54b326cbf8baa90cb08373abc2a411a0bd10f9348e55725eb78557a34eee0950cba92dd71a79ed27943352647a9b56fc4cef546c4df9e52504f8e4af96365262f97448ebfbd8ff81b1671ff4a3eacb758c4611fcac1fca44041e2ba335f6f15457e68655590089c2da24f4574ce4704a49908ec54cbff016560146f64f211fc5088a6a8f4f81377e24f9cd475e758539125fbf2cb159442bd68790ae6c59c4f65e389fc4c4fb0d75170068bf6d8cd6c148fd45bb8c9499d7220f00794b7c523791498e313351b3c4b31d8ebb0899324860d98b2fb9538a97177a1eb8c99d20ae7e6ac31621666f5736e04307744f21098fdbba9b80cd438dca954cfd98e27f62fe8c07d67cb383aa3f888ca9fbe5996f7499182834c45b9bd5d8e71c358a552a9544b7e52502b6b0bb38ae47c36c14a2cdda3c8ba6fe553c8b3e63d2778ec76146c5323e1497e9a0d9d555d340c1e8d5f8eea1c47754e6347d5f8ac223dd52999aa21a915100a6b6dc15110d5dcd79f55a069f5f967442740ad822e3aad3b89be897981a1bcc8d7e5e8bc5ba6f74991e244beb4d0339d60add5e64fcdddaf1fd259fb39e7d4ee25b95ead6ecc30a3b250bf905e2b47414397e24b4781f990f68dbb50adb8933f2d97611856f9f5ab90506ef931bf47da51446729fba794f2278f8f50ed3cf3511e457ec8a4ed60244b5c44943b36470813eb6bbd345bd6ef688d3b23b509b60b220b09e5fe97d7ac1a8387e38919b795f4cb5328f3a263bbce7956a0a2870b6180416b3abc584df361ffe58a3c8a75459e831d0bb3da9963b9a25c2fcc9c26a5b69a2b6ed5999b57969a477f22bfb7be691637d9eb30d8cbaddb38110b5fc909fb07e57e703db4a767caee878364e9cf98f155348ab328168247803185aa44aabe9660b09e5d0cebf23c5ceef40bb1be618a6274ce96820429d9efc65990ae66f4f817358ef22ae03b14ed3b959a91824911e91d845a8acc827f6a9c58b566669798acef959160a51431ec3bb7c28a3f90c00ca7c7ca51cd77fa94c6eb26140ff2d37aa0a2d0f935b06e9c839228274464cf1a196601712dcfc3e11119be8f91214c411988e3505490667b88ad78136791e14ab30fe515fbb2a37a1586dc97d2903d4d07f9f4af1b4462517df95d8b2ac6e1e5daa35eb8933f82ced773970d2c32a534d37ad01477bdb77073091b59bc7ed357630151ea3df1f6cd529aa5b42fec96a999459f177a7b0ae7745b5b86e33d62d1306ce7a89aaea941712895477147d19215348b2e688eb7c810d60d912fd8ae577e8247e32828b372d20f0fe39132f046617834d8afa0cb20555c08656520fba3172e22f24c2ec66f98b1db4e2c27e4ce7152e73ad93bd54b2485d47588782a553191eb87fbf9a1134b1c5b72ff2a869964f46a5250595e1f6d91d29e2adb1ce5d22bb7a2579e4517193a18b673d477bd7a3a5ea5c11e3a9487e3085ec5c3e1511ce5511c09e30ad44d49de208e4513e3f0f27cf98daf1e52e422ff4ecd2528b55a6479352d7b6fd5843b86042a6479b3a73d550e16b590a7c2b0a8b19295ed1c35630e72f77a3a074a4131c99ef20bfd722fd027450a10b2147914e7f111fcee82ed15a4f9b1b241f67394a3508e7294a31c155fc5ae0ca65ceb2878aad54e678d3cfb62f0c6c6af3ebb865fb94a59af1d356f041feb99c247aa1eb35d23eb583e9affc94752d8885beb9c25292b6580409924a38b1ad1e44f8ab78317042536ea98323aa515ed7da57ea55a5fe6b7b1afcf416dc5b6acf62e525c60c24bf0add8f1069441f149e4813447dce7a5b8a024e7970c3fa6a838cd917a93e2020f32cde362159b38e9a5ac5c71e2f0c749b36e9b962de8ee3c2cc6b0447c11d44e7c0483f4121f615a0e8ddbe4a3263eea263e824fc5c301a7f828e5a320340f4907d2807e898f60eb645a0f26a0afeda388e39279bb5ed2c37a82ed6702e232fc36e964d8dd447c04e1773106e1699e6892f04776c76e0bf7cd8f257ca18cdc354f17b9833e720a920ab20a4f471595b4e2a48cce9736b955122223ff388b0c79a105bd42a6e8142f83de3e8b05dd4845131b71a778723a5a72d22ca3535ab161a60f48944054c62b3a9512c211bc79a63857821c2f979fd6034e61af3172bc597e1a0f4cecf3f0da851c2f969fc68328147be6a7f510c2a4568a5c266f46851c25287350262f96ad78a9459bc8bb652b5e2bf7ad91a7935363d805a2d17245f65b73a521a3131886c523701cf75d14421403fc42472d5001c250152741ebb80bd5ec8bfa5d7ff1b5f2505f0798c5eba2f16059188797ad8f3daccee91b9f63d17ac48792b7cb04641f7ee1cdf392d1eb19ebc9ad655fc447d089472a586813db37446414f873b73cfd5a3452e1a39314b653cde323f8a369d80f0deb41efb12b687e6cb9c4474fc83fde08be3bd15108395ac825d81c27d185c29f0967343d1c393dc87d6796328aed3a2785451936c87daddc9af5a0786b6477cb652a5a726618369fe0454c47e9b5869433e0d47a8a74f9de0eecab5ce2efb8769f75422189a3c94751272ee9accf5e6788956b3481ecb7e51cbfaca3dde6f1512ad22046f1702cb1228e268b410fc24536295a5c8153b9a7777beb5e4ab8bb619ab3d76ed719c6825c61b66594a06a6264bfcd92fb3e2cc8a842f62bf3d37a788da8a3f37448f174c4299e0e0b074d9c441f6adb13b1c2884221c3975f64f8d613b2175d340f11fa4536b1ab8a329af7a2a9775027a2175a5c118f1085004db693a994933aeaf8e88a261e1e504e0d051ce089b41b6895dea84bb36b15f0529b60d3f84d74c10a470b19462454f8915e98badddd3dcbe00ffc813ff0a78608091e4dd32332944234d1a006fda4c08338058f759161bbd7939373a86643e7e6699ee631994c2693e9a2353519d2eb46730d5051a71276c2e9a3393f5f8f243f42ede9bbeecd6ef4d1e4e68567f6f4d1c0cf7077e1399fd6fbd81d4d31240166ba162c7d28b03726123e34d858c2868d19949861861a486ad4109d40248a49222686860968d0081d0985609080817929c1cb4bcf9891e1c3e1e2d2528696161632b0b080c60002d932ace5c8e0b84d0cdba68da169d94f96d530d48a8101c32e31ae8b5ea1748631a7fc421010fa070163ccf041f0744008337c21fa83f8c0d3f14108793a5c7c041bb37123d382c9d9024ded5214261985a94d1d45f46e09b5800fbd684805a8851948632de9565acbda69498a61d745e975516bca8626930d9ef541ef5822fc470b695e093e7fab998610facccccc4c1434702c3f52e13de675513a616ad254eaca68c1cce58909727723bf517f75d8d71b3d12fc362d815c58d3d3611ba620178fd44c98e4d84d64f83f78890894190232c176302553bde3552e8680344d8327033f0890e695de0f6cd34cbc1284190b850529f210d407f82f35848534442861ed1bc3b6a94d6d6a539be20d75991e3c08c4102c101f7523215244034eea191f401a086f207670d283b940b80c90209c74855e8d4702fd1030d91ff4482def8f3d92cbfbc3479af1fedbdb31a4dfaf0a3c1cdef306a13708203eeaab7b887ee99f718dbc51123dea6fb99d82d7497cd40feaaf40ff907e0df4fbd0b6b9f64b1f0727f5137112c5c16d7024727f76bb5ea2eb268a6820400471595a8f187d88951d4fbc838ffa25cefaf5efd010d7cc38a973a7bca044f6b66d7a71ba84477777777777777777777777f7e7310a0e127092bf0f4e8a11872c4cb02477a15417a2609d381c3aade857cbf13e2850b420cf5b33bd31393a012dd0bbc744a996e879b8bc45fa085094e1a724678e126d7b798b4829f1cef654b4f02949bc33c3045196e7de3a86ddb427a362fdcc7a5a8addbecb52ee249beb73779e26aa08973cc4ca5bce9dd91643e3d778bb9877f96c9a9cb4bdb51eca745a7066ba7e3e14b2a85b3931bffdcc8937e69f7643ccbb4cd33f254e723c022bfb74b95dfc18cbeac71f785172c4425e145135a27e36ca32db4096eb68847ced31503fb3ac77e7ee96ed76b51ca38a86ffb7117af9075d58b8deb02b898f3b1a4e307806ee280661dc85b09b36ec39fe425e943cebad9135f3bb9a196a886a9c58b2ddee9b91bb346ffd560ca5b1a70b7e8044aa88cd034e39a522369d4515786cb623abd24cf902b41b2492a7caf668cdcdadba5dd8f2fe58f6ed5a596c94a58187bf2d0021c9090c4e4af26d6ca080a7b4d3d25696c576332db22d322a367c66e23896afcfdf7bcf25f7202e2b216f57e679635a70d7b92556195b3ec69616ff968f6fdd20feb19d6b16cc592d6fdd96962b5df0162db7362bb647efa992b71b7f905fdf02f22b7ed002f52994a1cfc321edb70fb51e44140a145dc83126db2ba2744ebad1d9523ea14a157c4ca7927c1b0d0aaad24e57818a56f5b695d6ed6e4480da0f5d92cd71157bb65d2c5bb77e0eb1e2e3e89d3c974e3a699e393e7372bac78af342a2093d251b181d27d96358a6bde30ccbb41206c5278553b28139dd9476bcbea6d137ebd4ea3c6d2597dfddb800a85092d839956c604c3ca59d37827b44fb2c46617d325596f595204dfda8da9e876f5164cd1b542091b3db28edeec42bb2ac1ebb39e63a68d237cb96df6bfbd6b229fbc572855905e9a08914c258420c38aa927c9b9813fc9476361d0c21c32ec334bbe93f0a659ae6c633e5a40d779db77f79770fd2bfbdc71cd8edbbc9b369393c4d07a8d9f0f2560f2f6f0db1b68f77fbc9e3a3694dab7bbcbd6069950bab55a05f7ebea5f5c004c997e6139781fff2f38afa69e0f37b663e52fba11f142876325366edb5d934a30534291533675a61afdc4d9b51172aae4cc58b566b8cc14f9e3d84d3103c3a61fbe52dd2514832464f494e2ab9888d7c9bd6c20a9c92c43bf34dc1c929bf2e6eb8cc2753fda88ffd0ff957125dda11f55ba03e26ff7a23ea63465c2fbb64c48e8febe577f1a7f10ff5b1c7407d0c6340fe8583883b364ba960bc90d465b26222d96bdf65a638c4cab3c84ef6f58b68f28b605f8164bf158be2bf5291faa2887fe8d28332af34797ce4788895caf364bfbbae70e1b242ff5c5098279969a2ed9f297217553307267791e7fa89aa99334d5327c7edcac361031b714f6b6293a9276d62378e9b56a39a58bc61da24ab02a58158e28bc91542ad4797e123ebddb6788358e07cd71c33f9b949453ab32edc7de6a89944fdf58d94448d4518905fdf8796e1223b8d7dc8afb888868d94b6485396131fe9e09b99742c133699541167a9ccd47263b2df27839bcc72593293118e907d2611de8e0cd5399e0efaa11f3b572a3b7b68a83e29e5393959159781afe3240b7b8e7b132b4e61fda67f3253ff6c1974df155b0821fbd5320804ba0f0a145e448fd74f0b4be4019d5cfc2584ddc572196a8b3ca7d049e3e404fdfbedd9eecb65eecadb55caec8a8fe08f8fb2d57ce2a326b6cb52f3e4a313b54c502d0bc3b332ae643fdc5792053d0fcf564f07c7054e480995cc208ecbc0781a0e174a84b4234ed918272656e6aee49e87cfe95a984bbaa7a7a77b42f95940596ae350b1e5af1f4813552ed7cbe5789e6616f86506ee269416dc96662605c8e4fe06e402e4ee2d368aa56b8c7925b981220fddba87729a561f66552cad0916ed889e31e609260343f395adafd57fd9878b45ad9d16b59ed239efbc2fcf13a48994da50e85d70f7a35154cd807057c36d956eb47dbac7420269321394892a1832593834d4a9c8ddc880059ef3858e6d9fee716bbeced3722a4eda420c19eee89fce01df7a6ba50a9ddf56aeb74d5078916bbc30b76754b29e948f32538eaa2d33a9b6a8cac9a95cf64a7d447efdee460c7c761e142565e4da5985d91699bcafd4d1ca669f87471cd895ca27b3e224d01b515f1a91a5ba90d684a64486da111966636498a253b059e83230b266d274a6f6158b1a8b7cd0fe651ff2ad9f271f715c6feedccbf394f3c469ae1015778992edcdaa64292803553dd96e38f38953d8b85249613bcfb172204dd402e651155590669e3e149a511585d0341e8ac9dd3c4d3c4ff3276757324aad6d9cad1e0e6823ce74321313fbaa6d32fa070a6128f92915b1795bc0e254badee697a84ab2c9884a883c50a60b3a852c0b6064f8f106d7cf02b237a2bef646c8cfbebb7eea6bff437ef6d109cbf3e6940c3f8b4c8b6c8b8c4a2a95bd7c23b4af6f44f652fbfa3fb2973f4fd99d27ecfbb58bca4ed8c65d662508fd6e88b5517b2bcc9ebb3be474f8be1042f8e4d619e98658b9b31f7ffbbebfd18ee60d673e3e020213761b83691323c325b9cb52a5898234f30469242e521ffee499534a934a864a42574c906613830920641338c9db184c4b72b4819da69c2c65bbeb87670a4abe90ba29bdd28577fabb10c7839b7e204d537b6936749ea78703ce20cc2c32fcd8332e59de07850547f2d378b059a2204da3fc0887813781722550ab95af7ce52b5f59514627978d3432393084cfee1da8f565d449eecf3ffa9c735a4fb844d7e69c530bc90f5918398c35eca2edbbbfae48fbeee5156dd886faf4e9bf3caf48c336607ffdf52f3f4dc35937c4c2be7b117ca2b72e9695181f6ad6c0a38fbc3efcfab278b3afb4561a8fddce318fcd20aaf1341001240789bf7dfcf8f06a2cbf7dbc2c407280794dc4bdcb6fd6da7f0f4816711806774080e4edb7876f9f07b4b7b34f9fe59f468166c1432cd936b08fc11e6a5f9f96c3f691e52116711faf88fb68350d8b382eb4f82cb7b3ffea73f5b7db6ddb6b2f3f6a39d48f38487d0e07b1f1f1ed1d626d7888956778cdc6bfa7e176318b1e6a3a740e3670370446dcd5c0d14722fc33e63118f3580ca643a73ddc3e6a3c401e3a0d8331b83322633f3fde585bd321622d6fb89b3f04661ab83392314ce3278da74103774360c69eaac062ef5de74dc7d27280b8bfd6dfb0ac3dec80f4007fc39d914bcb017ea50fb59bdd2ddeee737c79c8b1bc0bccb7d09687f91936cf78980fdd907d32148fa0b386836c5fdf351dfaebb796438db13392b7afded5d7344dbb75e3fefaed7636b93e87bbf79d915c9b07acb71f33e5f7f47640a63f1e0e9f08089461049d630724c3b79a603bc3dbf1c8ddfbd678e8dcfd3393bb3626dc0b4aadcd619f06335043c8a13b84104208df218410c29a9a9a9a9a9a9a9a9a9a9a1a26d42ca1068b9a29354aa8b9a2c68a1a9e9a24d448a941424d949a2a6a8e5003a5065503819a07d438a0a60131c22763120bdf1f7d3251c651c42accb4efde65c6f3f0d802db85b60f419a978fff4eb21fffc6c849efe3d730e3a416ebaf08ac1cc4e561fe5d1158d986cbd3b82e2effb41e2c2e6fe306b10f137a1a5f616ef735bea3303030efad874533fcb3e45baf5fdedc7da6f1efd5a0f1221a1f83bb50a60173edd3b8f643b77b19ccb543ac3cf2510cddf0517c975b838fe2b75c96ab00aff151b4f8e30a2c87add3f8840d69d3da88fdbc1df6aef578f86b60310616cac0f65f5fdf7bdf505a99be5f944eeb4573ca0f4189811439c62b442830f822b6d4e4a882c2c418595ad449f1638cee9203b569232c5073e9f0e5c777e993f8b95bf4e9bb45c43cc46a525f0e1bbdb01449297e7c24f8d65bb13950df0dbfc1e4d240b62aed7687310ab99165ad35deee860df1b1af309bd6e3e9c7304a7f401a0a69e31ee8c75921a5d412c3ca8f140e70c26959a31f60e90717f4fb6bc8d1c26ea7816ce12e0ab9912f0db84c8be2e31f4eb04dde05fa27ee97a38c031670188d6295a2be1b9d2567709373376a9f9c4c233f284a52b9be03d8d083eff99832f4f14e48f621b23f2a429e4f7e3a58727c388547e3aa27139f6621c6dfc2f33072743290c8f19d0ab7b0f5155a104208ad98d903db3d3e8ad7cfef9febfbfdf2dcefd78f8f5654ec15af87108fc033fc9fd67a78cc3dc4af270296c1ba336599dcec0801dfdf664708f8a21c84c07c611dfc2116e9d0107737bc3c8410f08b2d24b9c932cef470dc537c141b0913cf6f7cd4abbe3253468e56e04a62613b68c59bf8288ee2c3539de96c3dcd0a5115a3ac0b9f608882de65eed66352212e22662133d91ffa802e7ce2f054b78728d18c9934e6d47951f21ce5199a4fc37d5066860b0c67a790e793afef138fbdfe898fa2eb6422dc853cc669845e66b8c058cea1bfd639bbdd8b723b20f9b5db7d86d693ee7df1a8747fd790aeeff87cb2ebc425397e41e565ca0c1dea823b6a2d54c1cd55106459178e262658f83c20bcfed61d62c127d94c0736f1234e9a935a8ebb8c326e1a7716dece0fd260f45b4223164b03c2b1627882f0b5f7ef66b2e3aebf5e3f8284890aefd31e6ad6c3eb7fdd20aefd402106e8574ca1ccf5d8d7e7e14ff3817d85da5f57d3b03b9225c41ed8ae7d9ce4e82a785d0b58d80e9ee6141be39227f3720e52943c99972d782ff4b98d6115a8721284104315f4813e50d5d1d824c7873aae43ed8f666ab2045c26fbec5d2284c119cc743ecbbe713793fd85bb1a6825e3e12326485cc799c8d17a5c86931c7713625899374958f20a6b851425da7d79bbf7a966dc4a5fa114f615273dec2a2b3eb20ff3be7292164734beab01f604c0c67703107d77738d6fc9fe45e7f0f79cce11bf83c9feb677c053e788ef427838e2772cd9ddb5dfdeba41e05f5fb5ebdb7595c96a6fc547b1c7c5e56df4e4f8335c8885378a5fe3c22ef428bee84231de287ecc8565f8283e8d1b6f84101f7e31e3e37bcecbc787a7def13e04bfc8f125c25ef9380962fbf3afe7019d3e99f9d7ed86b0a0ae338ce3d5c4f15ad982e9e01672fc19b76371813e45c43c33a9f5d85eb3cfc3dd8a9320166246e5a4ede3fb4adbb64ba9b683914c359b197fc742cc640bf7159c69740beee3f795fa118a1c7bc9adb84c7cb8033895609f155294d0effcbabf377182dd09761d1fc5ec3a2fc720a04c067de20da4a93f5373856db92c1774a18fd6c3ea9eeff88d04d28c88401a0c772f155370d4a819141cd53cee6642a31fc249fef16b2844e9106b1487f051fcfe81ddfee5eea9b6d79e87439ff89e0f16e224ede3c71fc2e97c1eae0db1f2866de89ce1078910f9803d0fd95feff9693accbf34bfa1796b68a12a7f637e1123250c56f13058a8c2d0c747715a615fa9833e318544ee3e3f7c850c54a1fc5efb2ac7e7e2147b278fc51efa306139c9f18b787c224eeacc9b895027c911fbb412cd863845e5a3f83195a34f5ef978175a26fe036a4833061809e06d6cb973959458e3db340da49b7d09d978018c0c30436af88018df2aa3833e397eafe047687993771d1515ab2739fef39f2839fe8d888358a96a038d58364e2180835a49f6d1608fec3c9cc497a82fc0ffc8ce3b400f4260862fc42a427d37bac6e921d89aa722128490326a1a00c42381fefd06de8eef1c50e3febd05de8e1b9d0366dbbfefe1ed183d093c12fdf720b0a386ce015dbeabd931c3804792ffba03e4f73948d61720579897ffde0144e780ef43e7d07097e11086b93e3c99aea177f8e81c3f66d4d0f31450d33920d4e18187037e4700209d03a6806001596ef301071d351a4e65b807143081060a2cb1041b3c2881c50c3b2099524387132841348124ae88c9c10456d0c0e1084fe80624926043103d1e0e2448208a4b04ca50454b890c4760c96380c2e3a1200081073cc0010e68400376ecd0a183010ca8a9a1a1219116b08087430139013101d95f88a703011001d9ff034fc701fc00d95fc8d331f370f4f7ccc3ee672286c8fe3e1a092a2078a30fc2492fc790e15b60c8f07f3c31e4ee85e181a7438887a37708e91cf0cbc8f0c5c8f06940010d011dcd3d6f6e70e4cd0d170e4fefb89a7839e0b7e0e1805764f86ec5ca79b502245bff871c1fc91eb217e1b043344593164d746697e2544c931cf1f1b190b0b7b770524771ae241447521c9a24c37fed1507ce0602c4f4691a650848a64f152f3841eea6cfcdbcc1f921f33b5148d8ceddb47838caca692b2727c30700cec3419ba03811457122c589f0afebbaaecb27fac8191a4400c9413053c6209b6aa46da053df29c24663a41ba55ba43446ca691c0b28463116508ce3364ab148290b22c5226d22d24dc3228d1487524a69139b86458a4329a51bdd366eeb4d53018d9b0a304a29a51ce5284769d428a554d3b418638c1ad5a216351550ba511a23a55bdc348c324129a594d22522a594524aa9a66954a31aa5946a28e0b06da31b6d4a29a594524a29a571db28a574098d6a34464a69dca268a31cc6dd6de3b6ad63a494464a69e694d278b585636c25924424b6ffd2340dd3b0ee16757bc78009efb6714a8500437d37bacb67c71b24203d73385ff61b4bbf468bcbfeba491673792d0915cb24b5a6d47cd8b8ae2926521084950605550994d31e614b1b256eecb8484b01e78acaa7b463b325419540db53e931e2963bb91fe0923d4853bbc9a9043e259b0120b97106b6933854f693e92b372837963b34ca3ab32aefcb35248627bc58196155fa900c7d274ff2c98e96c3fc10eeb017f9bfcee5458e89b8c1330ed2b93c566f7859562e8064d93fc4ca98485611962d30a02c34c05264f812a7a3945d85153d5934aa012606262694b51ce68b74a0f12e4fe35f9659965d918f5aa4e222bd85121cb92915b1b9714252aaf105c02f62b329d12981de66aa4af58d94a20c6c2771ba9998d99fa35d2fdf272aa150483ea994c7668923934827a40be40b1e8e18286cf6d6e3ccc7baa671998068c448231482c19d34cd596d60a2fd94252ecfeb9f681c665d5eae46f5e9c5eb7966d64bd6c30e9ef540443e2a4061073f251bed073e256d89d4a1d4da50a821112814d6063bb2093d9dfca2c6183bc6ee9e8d8a54b20df40dda2e7d9d919ec243bfe3db3cd6371527b9c57c7afb8caff636151f4df9414f79798b4d4ef3b75a53f18921b522f695bbcd83dd46b9dc39674cdb94bbdf6450c9d40626d95b8dea294e9ae1f25d47699e4e3595ac2f07864c314ac5e54a25336c930cbfa5938c61da43533e8a4a6c0aaa405483916e1d84134de153949d9393635d2d594bb44a48419e77e6a6518b780a4cd08555a9888d00563ca51dee8bd8d01fe094b2b7190092d24e3fd913c2c2224112e1491f6448b23e630aecea89977f32895c22230f50b98b3c40bd4e2ac944a675df8ded24b462573e52f589526b4f12c74922ebf294c2395fae759973269139383e8a73c6731cee9afbe862b9d09338dd0c3cc4ea933ff111ec27128752ce719ff20f01a69862552a62a35921d530b674d2061aa469c13f5830be7ec0d793bf88315e31c618238dd12160dd7ee232f044539615dd843d28fb7d555cb1843c6fc7469d6060af1cdc92bddbdd92d2822a7ff1cdc7d25035a14a0555d2c26816ca5e23592abba45d918fecb5d7325c24860a3fa752119b598253297b1b1a4ca59d9831d99e874b9c2a9d784678a7206428a1b081939d36c223c917f46f577bf9028f4a64f8da76b57f9aafa0ccc3e15045539936e1e9a0f274340ee502b5c20d14fa24717cc2d544926ffa14236d898383d3281f8d60e9c5db424614f2bc974c22737c2471248ecce1c286b278af388758994986917ca94f4f5c467a94d39a716aebf57cfd24cec98668d63a8e00c3154ca58c6637db9112c75f4f4f4f9fa00c7c4aad15d1187932f0ef0d1230f26670031388ec005511aa9e0c7cebc753bd159c817dfa5006563efd8a450cbb9c00a92bd815a9f8e7e0b907c74c320cadb80c6ca8a2a9a6299892a62c75b20f8923716412f81225a7388d8c54025fd544e6482719ca2819aa3a9aca2927bd2a9ee5ab2271b2c491381247e2489c13465972c3185a433f1c33d74d7e008046dc261aa1520818d477a38bb63bf30c6631b33299bd4ae793cf7af1c1e7af1fe5b6ce26d3f7cbe5dad5335863b532995169b710d07c6dae91f6b5b94b74ca2f8581c6574f06be23e1372547c26fac54f11174c1b076edcc69bcafdcabe0ccc0d1a4f2f1914fdb40710c13286466fad3b026649d934aefeb7aa2b6655df22f4c67148f3798682e91d5da82e975f998eb024f908a1bfa3f1acdccf86a460f171c7960bbf6f18110c61dd84bbbc1b3c65d110424259fa803fb34140a054676e5e110030c617838560f87116ce7a9559ab5d6230444dcf0728fbee1e56ea2d33af2ba9eb828952814aac370301ee97a09997078c4b3bca2176d29236aceeb09f9374a745a107fed5ab766f282fc72b8f3dbf985e1f69bf97d3d81cdf6c132bf5c922c2f28d79af9ddcac8f2da5cb3ccaf963bcb2def95eb96f9adb9e58dc9956b79b77ce5aea096b7255796cceff469c9fccadc57de9aab4be6d7ca2d2f97eb8c4c5e2cd7974c5e975c6132bf9ebb86bad2c81c4a1227595e965c631eb769590c68eb8c881c8c5c69e673844644678add089652acb176a789f8faa723cbb0bb326cc26a6fe16438caaac683bffc965a0fdaf2d69fb788fa9896437514ca474ae0cac90a9bf3bab09b1b1fea83ba9e3674b835ca87b60f95abd58afa8c5f8945e876d7569026e2f6696935948977257dda29b596497c79bfabf85f71195ca5218da3fce64673db92f6c0490f9cc43cc97d6bf60bbbbed75bdb122973c7230f9159faea7a02662dc0c97daf383f6a3d2666129fde962bb92fcd0eb51e5162d1f5fd128b2e8cc37bd77a5c943ed63d28f61518534ed93d139f524a1d2564e6f22b17f6958f9ccc9e5813ed4e2f4b0b7c78a03f64081fc1ff89d947b644f94d69f58860bb7823ab84c2822938f9450993e0f84862f72bfee3ab78936f6ee28d8c37b2642f39eda9abd03e34c3b06ff9cc7ebbfb8f931c5bf1fd2b767de5a32b9693d8af5cb8beff482925867de53fbef22bd753ff196265f92dc5ca95ff5c7e139f581ab8b7e273ef233e8745eec37aeeade7b8dfde07e75f04f41ccbb3e0222cbfbd91d2951d74b123050756a456a54ab2cdb212f9e63f9caf566d8db0bfbd5f8e8a7c5d2bf7cadf08fb2b1f8e98807bed4db0bdd5deb18feded2b027a96dfb6e7ae0693ecf8e0dee222efca0aaed0e021bc198275245108f68666958426378f99f275e311256b952fec31dc6153f255440e57fdeb8d6405ccccf85bd971036a6ab0ec7a22abf54a80076a071c78eaab73091fdef94dbedeca17d6c00fbf89377ee3a4e747327cf52ff7a9188b1127c79cd984cf7561f61ba7bca8948db6353d0b150dc80000000083140000200c088543c231893cd1c4d13d14800b7c9a4a7a5a2389b32446420a21838c3104104200008c00cc8cd036003ccd339e44376cfe93b1696bb9f185f35d84a122067b431d90f316cebbbeb8e00aee87f289f4107256d3c717fe4c12d6bd95e4401e406181b650fcbc7d385ab8abc9a84daa8844c906521914db6cb4a212ab820ac27e8f69b2931df038a4b1957de18007d6d17cc939f524fef4f9f7b85346c7857d4eaa006d2506cb1db6f970140b5f1d15016e2d40c9994f3d56f4135b4dfab95348ac4d4e76d4028717483f1da0171f74e8bdef4e4a36d071d228a9b812d1036f16fb812a56ae230215a89efeca9df189d16e6a328aea29a7536b5bff7fcc2f0900c9d44dd4ac479bd93cd48eb8e1386746559c4efdf803db2acf618f0549c236d64836105fdd66a18f6a66555a905445632fd98473f27183ab736e3b8454fd9743141c095ebe5084b8955551c79c47dbc3989b46e2dd97fe9e22ba6f2cb9e421da6ff186472bf47ac7631eb54295f57e00242295a7d1262eeb36deba32ddc51c8dec194b4b4716290ab851fe54097ace2bc75d7eb14d0b959a03cb8df0efb95087ac45278a965b1270a0bb5e1474091a7df740e0c0845e7495b80741dffbfe99982d26e40ad40815db4cf40bd37beffd9d8cbc7403d33b592f477a43c4a0ef41fff140bb526cec1399d43273f54c98c2c79f4c44de71ef663fe8f78ff311236e3281defb8b11ff2d0698fec0de913537600e48c4a087951e110840838eaae7da0c7f2f3e4a2fc035b4854569c37acfa26f3a4cfbcee368bb0cea984d48913eeb5981621274c98fc536c47e786a06b745fbde0d45fa152e65faf4b59319c56a9442de5be1c6f37f7f295f1357647a04f4d647c64d3f30fa2cd6fbfdde97e969eb9343a5681fac08cc2034c7be68a5e0369a474aec489ea831c17123fb015e729295c344319b8c3e4cc55e97815658ea43e34dc42ac47b40978a81825da2dbef87edddbb1ec3521259bf596713990c569e70b6f4fe8e08879d4a102036c08ad29e508a75fde87ce6d2c46ae259fed0e83305f498dba3e78b0ffa1e4baa6acf237a722c56bd6cb14ffe7bd7940555961b6a4ac544e0f313bd44a7c0efae162ff859aa69f82ad08b12884e07ce672c69f62e9252df0afed05fc48d416146514ed2fbe2f67c23261f681238636078ef82a949499c086b19a0382c27c06aeff2c50a19b590668ceecc1daf4686d825525c29318a058f9c07237012c8dcfcbd17944bc936d2487d71343ce8c383ccbc0da7dd9090c7daaf3be4e30ea0482512b9feece54ca234252d395b14796037c437497e37d9cac3c8654d6d39002e1b0c98b9bc6ce8fe72239662d01065feffa011868eb2b7e62812a8d3dbe1ff33a93f6a50d682f605d93c1ac4abf9251682f43abc81c4b924553435628f99d88fc07ae2ccd23459c5de7d3d025a38eaf513d6dc71e28099e871086f50d66aba88ad14b981c3ff96ac03c14bdfe6093fb6a1e743c90e1b1ed28a8d4705e89a324186516eeb0c3457306b5cb3e16b692d21eb56523997929b7d12acdd4861a84eb6b59872a4456a7d349d2b8c8e8f932fc659516cf5d94ba449674191ae2c791234b06ddaa415930c32da730a4936a9dec303aebdac5817cf391cfcbcf5be946d4e21df79f4547ffa583da146992a2c8c260bfb5edc37db08a348f4732637ed26e68f1cd5fe0e3ec62fcbe8ac1bdad808fabddabfee36d2e85f3ce0e6735a5c3787a8a731cc2b0ea52dba27b2671965689306345d910fe238b7c37ac13304e32dc793259abc9a041173bc20bd7f8bf7232834788dc35142706fb032cceda17fcad6c7ff8e5d79080b8d7910337f7dd6312fbba12e2376d830c20e7f9809a508e6c15fce33e04fd3707f66eb47bcedcf889f4ade24155b2bc73f9f8cfdc378dd9fe218acd2b16db4561fdbb5b653b41e665709410e65ab8403f875996e92b342da9b6242044000542ba9cf9250a692ba1d25ad62e5be310288603048ee2cc10ca61a8def575bc48f6fbbcf16f30bf00a079a935e32d881235d9d00508ca4aa4d9d0601a63495e09c31c634dcb08fc3f0b391192af02d7fb827496786b81038289c779b40e27d21fd8b63bb6e41a57aabacfb7ffd75b45d030d140daba2b04df9ced59c9aa2d69ebd35891110e98e9f7414d7fc2e2767bd3c649be9a80b22339152a002f7fe5893d6b63bc434e8dc438f0211cc93807d84ef561062ab9360b309e08857b8b778b4068e28d4377322fb8ba76107d8dfd2c3985d7fbc3595c6df9a4fa715db281000d663b6292853f1153d8345ceb1827a563d5cef4f9026e706cf1a2b37b0edbbfecd81f6e9d550ca96c9d5afd3504f1e06659466fd7dd943c2c504e61e17414f770770cf0d4ae753db809ffe5329065bd61dbe3620234460c4149d4561d86944549a7a8042244703b2299009ff5bda715b26c97a9b9d1ae8d2c3948b1e9ccd58bc6297739bda1a0e12de2386aca1f4159be399620ac63cd7cd33594183183bcb044c7f340ae25a900ad7d6ff29db9febeb109228d0ab877cb3cab531074b85f01d527a684b9e13fa06782db297bcf3853dffbd1cb1ad0c3eec7d92ac7b1bb2a881e272735db164a02e21177ee70ef0fa69c346a6698018c2413cc4e0cb2f6e551f3c7491897f4c403091b00c7585ecfd9bd319cbc756c50314c3546ff95d886343c35478a113149e9b2c45305d0954120fb43384d92cc66a69468989417e8aaa1cb35df0e53db1c0b67e6a28432ba8ccfa4cc4d2edcf35a3ad601cb04d63a895d360b9e12398752a8dd3a35f82d23de854ae72639aab82a6b981b5fc841a2981149cecfeb7386d29b5412c6ed622dbb71e0b5d3376eb46b31f1c5b25722cf550faf62c4dae797d98b16091f88211a51da83bc41e297e2a543f06de8dcf843b9f8a179c565e9c019b49288c12c116f7e062d66c28d487e104637ce490cdc8e0ae32c6dd94e451eb513a4342a91f066c74e54dc29871889e10ccf3d4586d7ce03759cfe7ad8181a17c928fed7ca2f6574942a41d1cd4726fbb437e428af5e07c56b24f1a4cd0a9df9b4e2dc4c323d4cfa1ce0e2f22b104cb64fae488c8082a3f48fce74433f9f5286cea0eb2e3e93986cb9083ad7588ec2f4698d2a01b1b2c1e826e8401bff79d6361f79564218c860b831bd24e49e5d022347d47d97cb205be3f0a4863f579fd68d38f541c779a53728c759b3b8ff8d5cf3dd0949084125afb52887c12e90e1178785ad5a992818afed3a0c5a4b1cdb8ffae106c01dfb2e41327909af3579c504c5fd768a580a55bff2283fb8b764c445981e3314008b8850b2381211ade9a706080af22d89714eb91ac5fdd6096d593723b20a7f5379b0ed19e1da59e4463318e8685ae29ff3777730e31eac47c144db08defa42527533c6d0f1f398a844b59f43e648d46dc9ae71ccad8cea7bbd97ada29f77be776adde08a27875eb58dd47668ca06aec93ebd7e6579f689b76d74387786b8fbb8cff1d3ecd3f791ef44033515430f120d4a6e8c20dcc49617023fa6bafda88fdde899454ac81ec595568ed7025a0ff42478091606e1baac923e585f9616920fa8068962bf062877bc0422dbe074c458b1ee510a0f72c069e5b922843af2e573d9e55076c1958cc4fce9331b8e3d0e01ab97f11d793bfc96162cd58b5c45b1a1c8227437d8ab137c9ed96243decabed41915bb3ba32dfa15c03bf0eb4017bf9f7fe172892dd7e886092d4a1f8f173bbf34dce5aa4dbb3b1eab087d65a08980ec3c128512570857e59d3ff9e945bc7a060d6fc4232ce742f193518658ca2192acd53cf3b943c593b6cd09306cd599eea16dd03c9a34aed1e91cf0c83b31bdde9d4dd36ebeeb46fa91882ef63e06ff64b5d139d80b2816948cbda8dd4ed46052db4cc5a0d0157d9887685576ed07918c606301fbc0df194624324917ae76fb6b41a7ee758ad50ccf083a37e430459800c5b4856cb61a407ad05a14bf15d350336f235dc3a50dc61cd4134aca17310f2f85cfb5b2cb3963cad3877ac0dfbdb9ac7e472bc346db870756380e261b1ad1b532e650ff63b3ed83b9279131388159c59723730731c91f68cbde9ae3f0cf2e1aa4201a0e645766b002ac0050125d57dffd4266cf2789fe8e49d85d70fa87885c702b7ffe24cf1c9ea019c8bd5b74fc33588ca57b252782195e3e5aa49fac7159e53815c7f193e9285333bef84bfed6eb2027a06a94715f4010188cd0114f62d30c68801fbce16162695a84e5f294e056195e831adf5c1999aa0045c838a38ba534d8db63e37c22a52f6f764c5dc67742d69ead752ba1aa50e843d6084c02a96696285598d05a10290d51a7844fa7a69fdc364c6abda685906ca2b1e4ca5390b5e465fdf0484518f46a36f342854bd7e4b9361004f3340c4d340ac1ec0124011e19ada2cb6091293d348134e2862606c505301186d19f7f4c4c0794fee2dea013a4ac8ab3f7a1b56f70502e7c91898d942054a54de71381daa2dba2fa24a42d5e1b42f60f563216347e1d48d486e5490386f25b759819ccc14c7c98a635d0ea969ebf0ba54c547699b06e576dc79797f6bd47e021755e478301cea1533ca41573180307f1f91008cfd5a9bd555078b6cf29cfd295536aaa06af710a7deb3ca86c0f65c86ad57950dabe21269c58f602e4f1c7463940d45a6e336f55de524025500b15b7d02d42b29f4d835bac3741adc71ec657f89b2f28a513ada57a0748767c499b259591a89d35f3630a1c31243e8c21088dadd5c457eacd75ea4ba7cf96dbd7364e361224ac4bf3fbbaac86544d46783d6783562bf3b5bb4ebfe4b34f079f00a82b5f5ba7bc91876259431b749b449556f114c928fd9e018ae6ae3e2032390a030fe1bc603345976958e99cedc8d627e0e53946ed80c63cd215a09f7e1d1330b5d03c0204ed329fa632b76e60da11e8816fb45f686faba2ba6b5c6339145702ea7b7dfe0181249f6a05891e3567348fd0a26afbf681611da04b1c7da1f7030126f6be3c45b91ee423183ce21f02f353e788128839515a5b4abe1020976e24ae1e1df5c64116a6d527a52e6db34f13058e8f61f4fb80805f8547add7eb02b1b7fc195fd8cd917441b99d523d3b44bf434809b0512fcae7650d68cb2e1c315d322e9638c5bd83fa4d9e551ef7f4902763828c63343fd0adfa10b1fc58b183e6d90374d6109a57fa6c5be87bbc7f38dab83bce2e5a59b67046dff7dac578e1a662546ef292e7b7107e693ce76d62c85dfe20b7f19b5c02ad5b03e87a1aa793d4f62d941c41df8752bc8d1792c46f5e82b59cbb35bccba28764af7d921805f30968d9b7fe1b621ef4429768aa0d690293567ddaa4d6f3c07dbaa927f8236d30da85b9c21ee0c38348bbf6c8c307696c4e285c1135918239de7aa1700554d89b1536aa8dfe811a54cad10e4d6720c9fb465dbf98e7ffb83f90fb5668f01a4649a3be32b19f07322f4fd86f561c6f2e2ccd60c382da2c2104a51a1781d29c496397371815078aad86fadcbfb7ca03251c6fd781e0b04e9b378faadea59c39750a3c17556c87455bf0852dd12f3341443b2621a2419ee6b31870263c8d72e63d45d32e65b8535965bf67210ac3fc80383082a927e0dfe142e83781c76fdf3bdad0e12f5c391fb334aba28899e7334df562835ad01b91d56eccb4cb4ea4808e953904c17ded6800f56787d03fb6f8cea1fa3787f35e2f38109e8098358dce72a12da1750932ec22456cdb3dc9e19fd0ff45d26ba4d8fd9169c6a1494900fb96e3233e6c95550aca4ff55963b8fc2f58a2c651ad0ccebc3b5f1ef072bcb532f03ab6503e15f931f2d639f0688136a5fadf0c0d455233430d4ca7340ca4fa74d2d7c7ff041808db2097ff88f721ba9bed06008ca83fe77cc1dc0572342064306a6441e0b055fe69a723c3d9309a0a61f940f7a6fb1cba8c21450dfe4ad67d22807c586cd963773d8d07523d914e409b92dc5740ea4b35b2a0e351874d148aaace14bdd5c43565e5848886382b034283c54de1206c11764881d585b9d4e0a1025799882489e46d03e2c855793e603023c56d175345a201355228ba5103a53b2a0de3c2e0b941c7374ddb48b60843938ec17353dced8f24ce598eb77693f4d6174047d18c45fb7387606051481f0f982a5c6de17ccd6434f47f314e9c01f586b287bdb796ddd457628b42ac2a2ba0b2ec1ce7463b1c1b950384e6c38e961142f8c3fd870b1840c0281268ac8b8d0e719a9c76dda6a60ee37a44522bc662c603f442908bb39cb242ac4a6a06ef5316408546085a70d97208158e973186d00e008cb1c4745a26275b5d4188260becf1dd0b6168e1d9d15dd1e8c6c0160b196f5960fbe0c874734c4380af4be1236b19edc12c8fb743ed6da680450c0cc0a20cc72438004d2a0c1b10220e6720474b44bf73a67df3d5c75df692c1974bcd96ee7774169a49af090ec3690a226e885e1558dc752d9b60e8c8165e0051db42688ed2ba0987855d4154b83e05b03005a52cbca1bf26f9d93389bf1977ecee4e710c6a53376202c65289962528d64e5ae2f7610be0c05eaa9765a51cd74956edac0ff366aaa79d82c567587044c431da21e91e85675813be1f1b26b8b20de42c73fff97f0b36c04c61309ab9b00310ec18db1366cfb64d30fd374189eed4a52f1b5ba18d470860a08fb17ff82c3dbc0e489c8f191cbbaa43c319911c1bbb8c8f2c0a47eb5cf6f95b2ce85f647a7e02a220ca2e1726222455d832d01f646cd5623e23f4e575a4b75a3d752094909dd1c7e41d26a8a86abe86df644d9a820a226fcf7622ffa4922087c486164abd0ad5802ae82c5d7dc924f9f7dee2c58db75d4f50a54eba7a8f8cc9c56742ba9cc87b9c7eddc660587aad1ae40e828c330fcd9f70484f466d7c6e99681d1dab0f3a98a3c7b6a29cf2125024df55e1a78916833146007828c750cadd945c78b863ede58299fd92e2045cf8a2dd265aa0292a4f35168bbb0ceb6532468cd3f8f62b4bde565338bcff29ea38d6b2fb48dc5720fae89a17287f5e1d7131c07b578d25f91c9ecca39589dae3d86c75de3f78fe8937532144c339db88e5c3103c1dc74838c96739e607ea0132b659eacf7b8115f0edda0cff6fe60fabcd809efc4bcba1b3f798c19e8c6ce30d0c794260f9fbe72a562cef7db99d019a3a98f60b468e8f8b400adcf21ca4d1a1d5d960802bdc69d8afe9f2fe229abf9d0007975bf29f8508685ba669d7ac04f7ffa3c0afc645013f13be828ff7ed0a27513c907b04f71f120f7fb8952668f8c0e14930f851cd488912f739f5e25e4e0273ea2222809ba5b292b954b0e57508f68c200a46e47bd269a302a1c17de04a01ede1e117c304b82365cf6cef65eff5680a4ed602c1349d776811e510c2b119f61ff75076691f3d1f1fbe6d60daeb79744bcce3347e6c1774a3f085b1c23326a215ed00cf0f1bb73212ae440768b2a6c4004db7a521776108d896abad5003128d4dba0a372c064ee5872d0087543dbbea639942bcf079b9c6d9e9407b7dd91c608af3c8aec639de6d921e2a8a1a0354a9d46bf8d9922df0014db38e61621926484368f8bbc32882a2419b579990537c6f61fbf79198930332856cd9c72faad89c14154dec46d9fc32888cb0801f6d1ebe290799711a0684477fadf285f4a24547d09145f796af0bf49a92f282fa28e1b74980630e642f096b22c49dc7ea638eeee0070c3f8b89b632492281dc87fdcf61aca332aa7d0216840d40e8011b2245ed9897be02e44eac9babd4c0a25a7b279ec3032ff28055485e8e38f1d73562a4f15463bc08a3c11c6d585dcca06ebf331b84235fe57c904f77a415d2b51f9a8507ea29d2cafaa133a393a1af1f0b84c68cdab8ecf65dcd6ca1ec6f300bfb17aa2d231d49783318ccaa358fdcc999d2f209aa7e961e357da8ff228ef8573b17985d72ff11e4cf12c45d2a852dbd82d7ec3d067781003aadce88166f556568a0cc7e819c729020ac132a3a871efbf1805bc0783e1e972c87409cd6ccbb7169d99b78b51913750359eae21a683cd0b167bd681c740aaf19e980ac9e30197f8ec031e287b1542fb2095517644200d41486d95f609a45316454fd6d125d354b5d3337f9b0a04b6bd1c95cede2ba89df5a6e5608f1100e7dc1daecc88e0333e6e0835e0614fb9aaa061c8b6e0ef4f31fcc69555b4997fb7786bed247434dd1600ad2a6f5c8892401c817dbd8736d2342b06008a14db4912e4da57369f0ebfffef2e0476bf78c28d279ffe621d52320bce587bbbb0ea90ce87fc2637af27fe2d335ffc709ce7004d5f5feeabcbd92e8c1488656fe931b6f9132c8f08fb90c9463a0762b0b052db9c466f86da18ad3146e93269c4f68475a580a1d39e2a2e620a43b1b3d43e1a4b0e5588427b693f021da306d6bf4c96000cf1a8849c51737b00e12c6eff1c6e0185f20e57c62ea7511aebc8eec177742885cb73d259a2ca38362c163752d73804d43b6c2d516d2d749c21f7c77e6d05018f44b16003e6c91f8748dbf9b42f380cb1935816ae8603ff020e9b42b0db0cafda1752c62e78d4018fff863602e61a1224e46027002321d11155a736ad12dd0306e700101e0d12c070cf1c24aaa9a8ad9755fa6043718acaa97ef94758a12b7c0749987bd0efb474e8d45e975aa158b9da3dd0677f67be08755f3c0b312c00bca523b664a3f7e6b39897d91700e6346f62f75378799e8ba92df9825b6ac6349fed0c16e5b00cf28a3b9f1a51ba86357981513a4312216fcbdd36749c911cc7b88e9fd51104ce49e22a1c07ae0e0f42c10af7abe62cd599c06e54d260e47237556ee6a3f348f11fa45a2a0a7b1f64c04e0bfb18c3b90880ebe1e1efdce6cc8ce190b3170cdc9e98e1a006869dc026512d8099508bc6c6b88ae638a326b4bcdd744fe3480571224dcfc24b2b71c74ab39af936fce911038627d70f2954b31f6249ee65a7161010a949e363184d9e14bad704b52404fdca547a8ed2c6463442c2bd0ac49b758198b28ad4e77510d2e67c02e9395569fa509af76bb4344a636cc1ec85bcfc5cc354c2ead4566783a93a6b30f59d779b0ad6510d0319dec22bf33e270a546964f4d99f960619482f6c264cf1e9013b714ccff56429f0051a81a8b7dd60dae9184a1bd06ddd687eb418204b42a7d480378c5fa67028b6c3e46090cfa49d10316a538b7e1117883f8b0efc385078f74d15db9dba776103787bb3298c1704cdafd395eb10a5b7cb10bfeabae4ff75d2278a92134477dc6e16265ff9f2333cfb6312b056fbc497a0cde112bc16d14661d4c482c286b1c5a8ff9480f13bb30cdff0135dbac28787efdaf8ae52e629defad8d07310dd77b277f5475547643e4010507b2033b2336fa4ffebacc7e1174857abb83fd24acc77edc0fc000dc069bff59d2be3faffd78a5f7b36018db21530dc89299c1f18795654bf0c1e1832b46e2ba9d5ef44e5daf8f2ee1c34672b817f1538cf29132c48485f30a285942a28b99e7aa930e9cce8dc07dc98630598ee4ecea9eabb78cec48b279cf994ed48e009a88ea5bb4849ebb7255d69a7c564f654e0cf1155ca56d5c13356bd15da30a90340125cd445eca24d80cd96eabbc195cdafd33f4e6db7facfb16c978701a702aa920f370e22efb4221bde84575f162990b4aecedcecf2704df8edc1f3ebf40c6440b6bdf0861a712356ef5edfe896e3a4eed6bb9c8a82f74cb5ef943c1127c5bd94612ddfbc45664969aaf49575d0b79018f965269fb4dd41f258339afd85f61a47a8cc34dd58fbdd98f06569071c5f542c607d9475bced1a13447dcb62f34f86dc779475f2c6a40c6e270fcb53eb2599f6ebd357a6605e4bd3f481fd580ddc23a347c5f47fe769f805252f6ada3f94894e6a49bad7c9345ae76963469bafe77e103b12e09a9b95a7a70fd7a448c7c273b38e936bcccaa488a0a8bff8a4d14e079842f1b4e409354120b60dcd5258d4026d5597493a9e3c749dcf07c97ecb5f2b1837e6c55981b01dba1ef94e0de74b0407db4b9c271c5e73687cc69dde3f583159bf3ecbbd3ef719a7d43f3bf2616e9a6b203fff8060fdf41c8279d33ab6af9a450b8864246ab14550e7743931192a797c7f824cefcfd56fcbbc2a943163c8207a9eeda528a0de8ee84e14acb87488092d3a7d9eb324048ac038d6c4c490c5a36dedd253673bcb1fae77aa17d1f250682c0a0081a105299058094466c4c5903b12f434a13e0c74c7d754180592c84299216f878dde9fbeecbeff0e02281c9b39f0143d9e9044df8d9c1cf061404039d562afa6bb76b82ac4122f91a2075286a82a96722b39fefc072991e41c8ce81f2a91c5cc6236acb122bff5a976065cefbbcc9fa44811128093af2588b1b1a0964f3ce93713f07ce3abccb8a81819416c8f72aebc1cd90246e25a54f3796141e438e82fc879b51bebe8c4c929131124912426484e4e4e9d902e0129017112fa64f2c494c9086a117f8718e4ccdbbf1d2c427d46c1ae5f340a51c5eab35bf0f88eeadf87d80efa2bf2b94dc0b4278a12609bfccda130102b11eb9f23778f5856bcb695cd23b9cd0616c4ed90e5ea52309a754a7b7acb8e232632dff354e580626d8047670f527fbb2609de011a1610f03025a5b77d7810115d8c119fc44ed7f2ed22d290836130deeb9dc9ea3ac04305406408df843a60d62f700df9a2e2af59f276f2341217757397567d4f602233a3394f26951b8a269263f2194ab7cc0094e18014fb42b170dc77288b55fe130deaa40f04bd115ff5b17038d8490a4110d1930774264774e2e2469a5993ed3f83b529cfbf6a8d1fa54375ba54c8b1a787e6204d33323bc3c153106b0ea3306def039169999e484d9fc1e496a1b759ec562aae3ac1621b1aa374e98db06cf523c9605db9e5d8108697cbb88a511aab0cd7a7e65b9738f43261c8d11117a75d87812216ee38053779a5fd4b9886e40e2474151b7f542cbc1a80872db3c72c1840a76bbb2c3e4aafcf1d49e77052157f18f4606dd3b59241a21c97ce189f20f3d076810d84a9ad20f2f5002eb05561207b7d64172fb5a8370ced07fb7b318762c6a5504bf7f7a2f4293835f0f782ccf23def52ac6a06a21ead4a6eb174f0050a50d0b804200a252e978be4f901f71a562f12c32527102e0d8d40687571696aa9ed4b552019f23b18b46e246820b1a25bb226dadc4c3b12b8f1d1787bd1bcdfa026826d022baa6b4c29d04b8c57cb52fd3a501aec16446962fe40d670e9407fd48154d5ef034a15c5534362ffcf4982e4df6e127367dfd791a62fb3f6b1de09daf2d3ca6153940f74c878479cb32549da4cf89b11d57de736e56fee340a1f81b7e0e00f677880d4cc501d0ee0ef721971c54507ef47a51765cfdc1912162c38bb7a40ae97a9b8eb6322c71d60506475a1eabf97465e9d3e1334e6adfc010e10343ea2c0b3efcad4316e7a3cdfc8691b1c567c5d2aa27f716dc37ea1760c3389ef794e3dc09bb5c477e2e88daf29a696d8cb202673fb1e1a8167b5c4553108820157c1a5e94dc9ed0c2e3c3f098927c4c823baec71d37d31342dd18e07733bdc6bba65f0270b4cd01616cd134fe72d54359ae7cde68b17061bedd20883b952a9596a4e47bc9eae86cc3eae4841b944c321a0335a740181af93bf0f82d38baeff3ea1a776702f8981b56efc91c7e9fe8db72f4386e2858d0849fa1d8ba07106221a472cb4fb5daffcba325aa831803cc9077ca543ae7f272778dd002631d0ec7bc01f87a8e7ec50062f6c03a455065a365e4d6fa3edeb76fa0137113a3a704249520ff478e61e4922ff7896155e17b9df1ebe1c9d8b89c9d8ccb94d8d48f0b7331809d943958b9ae922e8edd9eaccf06c64130cb07221840f86ec613fcc0375339916c6ba80528755774493987a75cfd6a3a3c008050f396a944064947cd4b2818946c39015bbcbde550ce58c251ec047c6a997b809a1c6cf688dc34e34de1435669da7ab6b64481c4e31209bda25d84bbbd3e895d0e48961307cc92dd36a82b476f25bc4de53b87a2c7ec41a99013137a8b17c6b8667838145b5fcf4d95f81933f06355787ba303101f0307ce80446546a7a71858d617d1c7122a740d81a47c84d40ba74c4d7e277e074d363db62d99910c0fed9f1dcdbc46eec12bf73c8e4d65ecc385c0bdbd1bab22000a54a0bbc191fb6f60930079e08b6715b1fc56444e0e71c4ccb7c5dde2d1adf4c79dcfac45ea7447d8408a7fb9d75410e17cb4323850c286db3abcc54515cdb9934e4eda07a1ff0db321558cd4264993664bdc8306564b9796235ba981ba712d1c2716add38c2ae7a980a68d05e0ff74587f351a61f67e69afb365f1238d8b51c43ffefa3700a02bc27e42444671c77457674b4e6458464a05aa6ff610ca19fd6c0e588c020ee5f3c89a5b393ba5dc4892c23634aa327da7e7b666873430dc54df7b07ca921ea750ee1b3b23dc43eaef258610103688a705976c527f2d98229e4689d41940b51731b37b56e00a4ce8091a3eafb465cace88595a46ae0c2a3c645c0abb97bdc196cece27970a6e462e85d1c1bf5c8028cfe090cc6e807d672a8e862b029e9b611c1a345ed75be9ac6238ff87d42fd5fac810252099b86d90bfac57d59972173f6c9a2c46dfcd09855a92fffa1b2fcc16ddeacf3074aa6094c3d31d653d887d03c46b363319f042b8484c60a4c2410af400551612c220f240afa6be3e198613c01f6268dc0bd60a2a165dbcbde174438bc873e52bb2f4fa8b88f2b2ee31e7771273cc4db7ac7527ae08d04733056623ff9b437e2040615a5b714a30a70012105bc6d946e20218db21a84640eb9e63907ca9711535e0765f793fb0104fe8440c0fdb2e9c0fc0836b981d318160eb0a5ede666774d46bd2bd25dd4eba29dde4b3a0dc6adf5f31837f9e8e10c87b913f0c5daee3596845b9913bd2e1231c4c65321c5592700a4339e9e2f93d37c9a3801892eb6818546ad41f9fd33cf7cefd088a8c3115010de1a886c70c6bb50eedc0f79ec8514c42148e301ffb12a40a0a24d4fa657edc6d7accbbb7d6de092f99cc1498e93eca25e868d6e5a7b34592c08a426523488aeb3bd1594785e406be34cdf05e09645fc5ed8f9dbcd0fc367d839298f4cc4e4cd465243aa2f364a3307296a3fca6fcf8d23027f7511eefe95b654c7f6f82c3097134502c3321b7bb174d1dfd0548077265eba9710e9a8cea3bf3b06e23b3a79442f727457fcfdd1a93ecf3916daa89239e6d037a432cc92a6b3d8b10b6762280a7b196316bb28683b58213ec77242bd71d79efc48f8d4b56a40e0a9c95c293d70d4157025dc98268f0990ce69c31034a95f627f4c0f586f43455c0cc101f0e1ce81adcd2aacb46c0682f72622aa6367e5ac6d14db9aedf6451db5061e9a88ad3876019865940e72516182ec7d165ce9dc7ecf0c735ff6283330beb2b9f278cd52cc9d3c3aebc88892c4a524ef19bfb708d6c1002b0a64103e9a55205522daa781893abd3db3fcca50b96b42819666f4081ec5aaf96d98f771b554f5e1aa070a8640c4a7f800e906c9213da6362e28bd2039249290bfab91937d0d95b9b7c9104154aedec7889d055928836dd1cbea24d4aa5b452f470505e7a3dfa2316d9ba74895d650965ef6cbb8b3112cc73d64c2b6012114c6d19739cc532604d10bd998774a8827c4dc9d8b1e337faa0fbabf880af7cfa2f418efbd49b5512cc553403e4b39139e8984be5d3bd29586172ab836303d77848c5d17670ce18c7e9671f1289b6edc7ff46cc59a993cbf012a668f43ced10d50c2059e76a9e2ea26cf89d0b5b1a8184cc87771f2c17941998494ca7c269cce3fafa499a627cc90149780344ce5fe0a01ca3f218c0160aad4f15289c854a55a2ba89106f804027001d35c33e0f8d939a0b28ab58e979d7e80b9c63b344e170c20cbf7edbb9c4e68583f6652cf416851c0b30a1f93a2b1d3fb61122310124e8a704c23b8b9e740c1a10400368650a82ee2ac27007bbdb7aa8d5ebaa85299aa8695c4598c9cd1529520d7dbb56114f1a2500e7b2c8be8f63dfd5e4a654ca4e04071ce00c88d20461f8e952fa4a5eec59bfdeb609f8b07a24adc69bddeb0fad35a6143409ae3eaa1b640e0c4100beda89fe85ca61d8084c5de9f08bd37fb3ec910d1c62e5579c9a09a4624c2bdd024a34305c537160ab0e852dd82073372dca967c10e90a6c3b215d89837cb874cbc1a5412c9c1c80874032a1abdc32e64ab1eca9e44faf15a24068f231a6dc17087d532a189d76d3bbe997e2d20ee247431eda14fbfb74a49e903e7534c4e12acaecd7f0f7708e6f15c8c73882211f856465e132a417b5d39dd4b3c740bb22c66af32a8e9af5e8c51df246a543e406b1d45a1a2d0710aeeabc48a2bfe47c886cbe525b84ea54d74be738d2d630760906585b83ea965abdca1f7bbcb091c85e534641a54caceea9d23ccb8099f5ff36a057a753fbffcc3c14dc2ce4e1c0aed1df3c85032f6cd36012e9c95d67617f7fcd03d7c453bd65ba95477373fe25f9751ebb4b9f48b47240333e409c8458b83d8cb7b8f3ba75cbd2a648a114ef2716085c4cd6d4fc11bfb5260a1fb1f8d1466da8f9c99808a15b85e404eb5a385547e6e465a825dd3487534d1d036d485c98f1c450d2a43e50918d0b2b0f1de9171bf8a664fbfa7fe985f50841e2eef54b770af423d76ae174b071076cf4c80a69fbbdb6fa0994b102dbd54fa59793bd38386976b67bef6881fb34fba2774cdab9d176e81192ce1a1ddcaf3c6c466e5fc67f9a6dedf94c4527b54cda930bc92d7876da83cfffe25e76b38f80240190c9ff34e5d222fab137d564d481f300496e3165122b71fc5d33769c5b974a6917845bfa8432db69676d5b9efc3a07e3268a90484d477d0a64e912b6f4280d706d0bd4387bfef1b002226f8b96362d2fa61fd53fd8213bbc90c381ef3c1a448e48e68d9beef1f6f5f4317906b5655816547a24760980275c13f4f1b4269dd3389bae0eab6468b34e15f0ed304946a7b6b04625898fd7cc61e88fab48032949d468f1f00e1a8d153e852443422e80c80ed014197bd616b742801286cf0f8ddb1820dc29f77870feb0747280a20fa1505e4f1cbed3d3f121eedcdd20f08ed7b93ddd50c34db5b69124bb16e487acb21296768517285f868ea8609b9d8d69a0d04a628713690a6bb844c02066248f691d110ed6a1b3c0719eaa7bfb27c789811aedd40b62442bd81ba108333512ba2322b4123ce44dfd4482403be8f81b42ff589e9ae9d5c3b271a3e0cc2566ff785f7b6582cdaddf13fb5497242765cf1111ec64888263b4337575fec529c505e718256cf72dcf32713818cada4013a4e00f4ebb2770ff08f1e49e110685a2a384c5a8138daa6c120d23811f7c4c70b17d84bd73c90a1c7f8e3295789b50a98858b12b169f167afc5f65eba7dcd180b9067f8d7996fbf8f91d8069bafcb6f688108b2825ba006254f3cc08ad5ee37a234967188ee32b54d7445ee44f8f7ffeae52020005a41b424e6fb2686ff07d1b95f8be6fb4d04ce27a2b97c17cbffb1b87c7e240a0872fca87df1092ebf4aae339ac0ffb0d8777b0879cfd5c6019f396083fb7e97c3bdffd67a0a86f8264dd82fd5806db4a7cbd7d6bdc032359f72614d09dcda6540618c35815fa6286e6491593c1be70dfc8fd2053b665150657182a99b4530ddf57db54684866fe4d4cd831ba406b501d3755bf21a00c80dbbab7b045ffa3263b2634169e7fb4a31678d02cc3de86880e7b9ed424cd5c84419e2b2d37254014b6adaab5913933670b0f73e4dd60a41f4015c9b7d532a1020db7ab58c8f54f6c870313e240a03bf127993e1826317644447da13146f08152ba821e7655f2948acd6930db1f3db4fff6c4dcd5fc49e5f6af8aa3139a24397a1d88a382ab4b97d4ef161c690de6e880cf2f0d00814cb4147c3ccd9a7df71f4aac935c49354ba3a470058afbf3ce3ff6f1710b8dcf4fb009df985bed642b289deb4af0bfb0fa839d65d38c04488b6c1d80a7907c83b001deb822ca4991c5076c05ed7956c75f661a91fc83e175c7b61befd04486ff5dec1dede70077ccc7b8afc8c753710cd0d95db8bf4a635d0590353a57743891876eb68c86c050a4f9f18ec2774190fe69504947d69b2da2d3eb00a220fa7d22999ff4de4645d9a95810b70aa1b6432969d89220456789c0d5df0c88f1f0c00cb8195688804f1d8dac4b5b432c08da7ca20d02c15970932d427a430e56a3ae0e361ad363c939c83544dc4d81d5c6da75cb1a37de90aaffb04713fe272da13416f781747a1bfc0b4458a91fad61cd5e691277ed43590c2d85e5237a10a6defcab358596cc5a8ff2cf0c34e178dbc87e6b151d377b995389654e46a9f30416602f203656d1041b73588f2b0badad51a294498b988a10230bb1445fe8befec3630aa2b82948cf75a2544cf26bf6d4323dfc57408ffb348e8a75c4f88ab3382b159a401cbf9b75890a5885272bdd371166e6bdb87c8ec902ae9093d426b881164bb05050fc7f4528e4adfc3563bfdabf9ce06f98906ce5325f5d2ccb69bf8016b987fe005c1b9fc3f82bb484d9313efb1156929a76855dda7671a2398d242ee37e8e3cccf7afbdb7cbac16416f3b9e819ee1c8664b7d2138edf95f2b8617ccd907ed91df5fa8dac8e0849f65a30da6fdf6c0d66c8967d8dbb451596b46250420fb3db986f79626f06ca9db5bd6e00a4a360caa15ab82044471f84402811910e39c2b35e4b4d25704b41342134a6512a108e0fb1cc393a580bc588876694f31d81d3b7c0424a8315b9e21470f9b8ed3019c5c977ca6ed4730e6788a2d04e6dcf05a050a62b4240f413364775c8d5cff3e95127f21cd8139d83d91b5609cad26da358ed9fe0cfa27e4a551f31d0429778d2b7cce994e10c3be6757db1229ddfb73bcc944a1b29e7f440d794c947422ae1530019b7ae89455c9020e714ec28bdbe8269805558ce5981c007c343c386368e23edf9934b39cab36f537ed973fcf483f9351ee965326bf41c7b0e61598a6cce5f71a8c6d4a6715a41d8ea9703fd09a085e0637748f3737247435b9da365c803a9a70ee24326567ef99546ba05a8b3eb2f6eb4b7c87191f26af7c818199110d41cd3bd1d59ce473df490be7bf1cf23f50f8b5e4ea3eadcc0522e46d04abd17e61f352ac85c00057c187e83b2244e7360728e8af64fb1aaafc8dc3c5bb8239f4f3d62c87d8dd8718bd159fa4df278ce06412c60a8f8edf3893cbff7dc4248c3f96fc9e99d0b3fe660059b1105e06de2b9686b2c0907b1c9af430cad2dbb0000df0ed6f3a7cfe4eaf7d521cc21f6f9f5f1c75f512c1e39b369ae1ecd9f24d3d5b386a762c84affc0a20a23f4796996345a7aee421530aa8cdad5d76d0c94ec440e72c394ca63573f441e3027a8f975de433d91cd2f999cda41210a2c3c83f3dba0353880668760415584fcccda66495647319e3971de999d32fd3a54429c416ae977b2a84b50b46863f4ea5f015e0f6c736c58f14e410bd627b4a75bcd6507f40023cf8cb6ec356b572bc0ec48dbec19a5f2b92e46940403126f08d287581e9c82169af17386f62aeb6f06a7d41184e4d70bf3fa3da3c957319eadb3683453ed17f9e64b22859d2e3fff3cf29c9ab75cf7c20076bf76b732ac23cb0950e9f9d2d76d450110f82f012dc34721ff9b52e2a389e553907f42a43e5a3a697fc9c20566f0a0312da9212205db8b22329215f5f6d85eafc440a7927e4c3219dcdd3c1f64d712fce05091a6a1e3b1a7c6ceede99fbe9dcb8b99ee4bd52b66e7a6eac25ccc3b7702fc7f76b0f7a380dfcb93ad77e9cf782d20c5a30b2e754e7d83e7a3d29ab2d6a544d389283483fe2051a8e6303f87a23f4e985b9e345e640aad55fa425e6663195de50f35a44bdcb4b2f3d209b9f476c4b2ab814e52387cebcff9dcddbf0643246f567d224c35500a90c60977498629e2626a4314ead7cb06f0f97d8aeba6e4f4808688ffb79dc1690e1522035f66a9d982058c9512434192b0d4cc82c46f338c52860dc1ff71d276b8377f23232a93beed9474ba72d2f148cb0ddd4d98be00fa982e78f5985968d296a7ed23cca7385707b7182185fd19212bcd00813ddaf5c2051278a628172ba9664a1a2d44ced4d08ca984bf8d19462f461dcaa4d7b298728b5113ef04897fa3ef20d8b17bf0b698f434a3448e0f4bbf022c0bd9e4a3e7df7448a7ceb050e3c62494872c788f5026777764acb483ee53482dfed679e0f34fc10afc476ff873815002bddf437f16a60c36dca59abdd818bc3d9894b8b02eb9b63df92bc66791d4eb5de60056736538232a8ece7d6b3968bd3e0dd909af2778c720fc885ea19069306c6589a61d33189d81db1d4028074649e9c2abee0aa7a451eb0dc343df8e8c089333cb42b6116400db897fefab1f7fb1ad4b2680415e49191ba9e7717b17fac3d66149f94551a2fbcb2c07fffaff0183832f4546d23916c9338f506cff4ac869b200f1b50fc73029e0ac86aab6ff9c361293ddb521ca494c72f36d2272ec81924c355421be6d2e24cd6f32de801c58400d99507481c761e2265de0ab08566cf52303bffd481332a7864433d34dba6d895d4edcd7da9cabb9e1e5044badb6169c856020e293483e533ed1830f118a45a256b36bd8b20612cb019feb9d059f9827b5169b02a7a3491c9d62262580646efaff0b473ebd396c4fce35abf6a6a24c89068cba5d5c804646181a92c869bdc3c842a3438fc5c330509808e4daf78e38ac3c5c7985bb96506f2c28035e93f4ab455807d1138237c0a96ea18660291ceded44d933d0d250e3e3afca4290e6bcd81d597f61bde0e1a4a8a7cbc62d24a660461d9c4132d5ffd56ca5fb01b43e4848d22c120929930b1c07028919fd4fe45399a8343b2000cbc4d1a87e2189ba93530eb14d2789be094e765317150eb2aba4720af5b668d2dee029476bbea3656aa04ef5a8b3e6555d1fa00aa318980068ee11b07cb317a5aff69083e1cf7142a7694673ebc07857435959018454a8e78a5d6ef1ff1b1332cbf2f212ee534f39fd10d0f721c13c50b2dd21fa28a64065796a26ba43c995f80b109ad4ad9c8329480752254569f8d367b21fff95b13fbfc1c602dc128a3fb86879eace9b2a1f496552fb55f18bef0a08c032a718ead2e15641788251cd029f1fceb1057c6edd727d30fbf296d460de99241374322b5fcaf2103d931f4c4695da783b70b664ba0844b2f4184b5e2ee8c0a825f30c109130d0744377bd9d9cc12dc9b6a000d48caa829103eaa81f2fb806478c347b8aebe86306403a8612fb92c6015aafc43475dc4620013b82eb5319308c35e4ec69945ab234d66652d15e139c29549a0e3a1bdc06581dc749e0136f029cbee4df2192ed3c9c263bd6420f88b703ab6e7e5973b2c11f6567d448db82f95d4ce66e0a565e4772fd4db9d38a8696a0a072196b7c254792ad7b41e8f6700a07155d320b99ceefeb973a0f4d89e5d251533824c7487ff8bcb4fb849c558e1cb060f0b721047e465f293ee77f70a35a32f1699b7a3e66a7e7814a318cab4f23dbfd569f41f8f4b01198e8b6032f2b12607493a4e129737f16fbbd10410055c156adc0a7ee12d70a20b0e39c22fe72e320a9e04baadfff763f5b437ba61b427de658d5cebc1749620208e1d8a137aed9bebf7eee7374b214118d7c9397d8c18b3ffd2d01fc6b98129618ee7c6c1b0c4b417f43af676a9f8a846876e4b797feb09f8e75d063000da9c85f4b8a67f5358b574db53dbebb8c86b0c0e7a7c1d3ce2c40f6523ab1f24c4d68dd83addc08130236306d63ff065667e6ffa028664432928404bf3816c72411fe445910d4f92755ba795759906e530fdc289e04650c7627e387feb44321db94217442d44c48976f0a71fe7fb0273776bb338722ad8424ae3b2055ffedac52215003849bed2dda3e29affcfea18a68934784e0140c3736ff9eb81f265f5b41ae3e456691b8cc9e564007920390db6d747486bccb76a51f279ce660a958bef316a93af6eb656cc7b0effbe444f32192a9bf3671631ce147435c51093320e15d73f40a3ec49523a7997da7b16982a0cb976e489c27cc473bed0118bffa599ede84bef5b720dd166d0715c2536715d55db9673fe473191b22b93bcd122867f7f30296ee473ea1ea6150cc76f153537424e030cd1cc7604c0ee06a900bca4b6f01638882d248ef57c366ae4fc0d0037d320c46e4ef377943bd5af5a32f2b2202467f78832087b9f7e7626d3e7e7a6ad1632ccf1c297a85b7ebbfc5c51eb49094b0610602ee993bbf01453c9e339aa3a984365d142f8aa6fd0745bf98d548796227d62cdf7b0375131d99d05ff1a0d0ce2b239ca82d62748a6fad066620b5584ee048c8f1231a819de46605d255b846f46a48b10349fdb760ee7a5a5a4365d4dbe75316a7b26108e60c1b71f55bd7f791fe39cbc8928664202b7534c42f62defbebdddebb2c4a9d04a92895d63259ccb59f646cab415eb10683e161181e924367b003d2f9b32565d0c4620669256f9718148716b3a5785c2cc87c83f4e7fe7300e5297a3095c94ca1376844e719617ce1c2bed056e9ec0efa74be4a7287f0563d30fd3a3f83bb88f4577d491843ba27fa33c515191e35dccc517eb81ea2f5734b4e592508cb173619f3c71bf5caa19fe63d83f412b3ad1464b803b2d491a8f535932f04b92f04944bb13c658f303221496995ede7421af48e4d0ea5af3a27ea9f2c833776bdc7fba947b67116cfd36e89a3e43966871e8727988d02029c75c3871673b690cc9edb9b0e9325f39dbecba4d540c6989533952e33072ceba8fda0301c928edc35cf6960fcaf437270513db81824884a5df49bed47241d69b554d50ffe4b22827caa3d59985e09b93926eef220ef77bae53484c3135c3497390e8212a12415f52420b3695bc7e658fa01f982225e8acbe95eb7557e5509e309f845ae1c3b255d44c804e3f4f397593666139426947fbc61be9fe63412a9953c2c833ad6d7a2dd15196979c26f52db9826cfa4ce527f25ef5668650de2a7093ef2ca4e209160ca5024df330b7fb80185b7e875ef454d60f5b62044f0769d0fea0c2bc10c6849059a3d770a1db61829d24fc95f6b284ed413f0e945284fe3871367a6356846591d417f03547809d64d47b3429c9a2bc2d23f33352e4f4fdce1e8ab4c6a7c905c9eae0b462f7a0c6f1a82f7cd84a969086b3fa3784dbb8f7c4fcefd39f906a33c6f0549bebd0d7f803e5c478d8e2f1d14ef0a2047db9895b79d015ab6a46530b188161950e59f3791d462dbbd6aa128686b7cdf1d18490c1c8d67ecf27a8b0b2335c6089ae922d2c6ad56462237a43a271d87b175ba11b26d358dc8b911bccac5a509fec708668fe8893162f98040815329b8c89750ee3a61bd985ac732c7fd234c72969b54edba6646a04e3641ff7dd68595d9f9f7a4614cc78720e7f406d9349de2f2b800898b786864b16487d61dc01d3795cbde6c50dc927dd34215014e45a81099edd893df5612ae40bb966c7ea9c0b9a00d63c7f620d5691c6585d818cb45561afd93bfe1830a232e48c5ae2854fc88f87c81d4095a760d43660ddde71d9a1a4d43f0c930c0d40f83b5cf20c343638337bf40b2c47a6a15ef5babd318b545290e81793dc08d91e9fb7b0fb7e4f05de8a0fdbc73bef516106dd4242286c6f57068b3eb3fce3ad10c189ecae651da20134f7fee8dcd66216911d43ced74f9e4bcdcf265cf2e5fdb95294e7f59e199bf90c34e3c246d0f3209f8d432603e1df0ab997b5b1ad8f9916fcac8d4014841664f68f6b31ab87613a182028d1b00902db38bce743be0396892a13cffa66fb2bb16770d0db896932100fdc8714608039608937af8e8dd323d845d6a38eb31eabdc5c74430b68966eb150bb95e2656a57b0394a8ac5274703371530a495efb6c681ff0012a9a9418f8c86c94820b5b3d7296f82a32d0152a2d2dce870114d0570054e52cadfd0bab9062c1ddd071463b25c482b052eb0fc4654b236009c25b3bbc405358c6c1093c6aa30eea98a9dd91384d7c09c729d6df9fe7c62e9e56e4f031bf8dc3975465cee9084c0c00fec0ff153be1ca452899e77436b91298e4b2f566af5d42400605838c8e5256b38f5e1eb15927e24e2b76d5b3476856a415f225f098bf5eec62034f6a5da5605bcc51e89eac28451d9b4275f3699f2929696a3e3fb867b15239c2787fc4d749d327504ce465189a6fe2e1d9d0f04a402ac37322bb1dbd5c80c7ffdf6348596a608bd7c7894730f0aeed02f712809806aacea0022d90f0c1d168a700129807407522580284c9f84e6022e0d0cb706386fa36f00e7ed4ab0458c1daad6a8e28f8b202b4e122f8e69e38a6a582e74c400022cb17427776c015c3f3289a83214a4152444f7bf9c97b4c4f9d4f00ef2945561e63ef1980dc951429522e47387392b851fc72d7c6992ffb8328fb115065d44ef783dcac29931fafe9fe1af77114fadf6c34fdcfdb475498536574ca29faf8ea03799a7536bd5b1c8b1d9b05648b30656ff865af760be1b0b476fffd0712ae6f97823d8489e06f6c0c8773f0b6e5dbf2db19ced551a66f3e42b5103914fa76e88b2427e2147f4193f050c04165af84b0c75d64810b5500a4e94cfbab4946e8968005c3cf061cc981722f80dd212905c4d4ad0ce61bcb3db883b8a9ca7b53075253d6a51e60c8407a05b8acdc05360603fc2525787c67601d97beba3b1bb3dc47f0dd65a81ec06c85e52eeecf9c40921ed855e158dcac4bd45e2373ab0bb3f958291614fe14921a091e5bb0304f3ab26e71b7c20a94fe4880a56df88a10ac0b80b6af9a7fba309e1b0b0106c45495fa2762d0700d9f0f25a7eadc6637740fb1c38fabc3b9f3e06584e532f0b07a850d7e96845a4b3001c84fdc7eaa0398eaeb80c572da7d57487d6e33c13f9d40df4f290361aace91fa7fab802179e5c01be9daa9a4a6988f01dea733147f0705430406f92f4deec7add7c1740cb45f0efaf60e6c4c7abc7305b9c42bb2a34f3c23b6c064d11414d6c7008503dee21bb588a7d43be687b5eb3785d74062dd8f1dfa95a94d95268849c986577b5e14a5cefb98663b0dbeb5385c1e73c968609aee1910eb5d086386ab8816e527fe3d8fe849767fd6fa4ef7c4fe5efa8ea277f2335c9e458b52e3d54bf9af8096b32c59128edfa34f0251e09707f078a8cae72e898989e78c76631f7604a67c449068c5068b5a5656770f96a89d6f2c84486d5ab9db8f84d55f5adf8e94869852369e31c1173b274b26bc4f503bdde954627ebfc8119823e5107db6065bcc2ffd3a493e600c4acf9b2c518f710f4bff091a2f9b984a7bd23abe6d760189afecc35457bbc91925418513e00d839f4497fc8ee68a5f6f26c292b49797e81806d2d65930a6c7fbe43d903f4e41527888ed9f2ae907b1fc6c73e06fd3b949fa4292d41b4bc2100f5a66be2b9e93f18f2bb81005a92086079c0cca575dd349080d7eef1171a3949423776508b829861c6fc362c038e4ee0e19ec3a51795272832b67ddb7abc7ce3f8e1e9ba2b88822d08c4cbdfb2c85cecf40d73051ee41b269dbed0687e829e473adc84fe23ae9f5040e8fc721df800cee6c9998b000224d4240f147689d163992056f4c279efcc2270216eb3bfda13c6269f34008188d131a259a07ea21f6d60929648ee34283d9f928e9e2e0e746160751ea7ff18ad1719c36cdbd529bbc4fc5643b46f5700fa10ea7504eaad609ee60471f0cbb99f4c8ce8efc7d15239067a63327f3ae65116937b6af6717dcd5240ccc53dc64d21484da624cc09c0c017881a89321b6665d4a982796e7a279c6b304e0f949c7d6689319e5ba9a8442618392a4b79717dafc68e2ad2b6912c916c52e28622c1afb5ad0f8f53ab571bd3be5f1512f174ac41fdb44f3d62ac89600490bb9fd05122ac261e4adfe3159ec2ef404d79867a8cd57802a94f90f4f92652eac4ca7c9c938d477a839c327f570f99968361b8a4d8f828c49fe326b44d043faca0fae9bfeebf478bbd745106df49945e279dbd8bd47e8558369a237df743baaf39d0b980d4ac788e8059fe3b569168f0ecd7b9db4d85f7c2d8ae1e2c3e58b0fef5ad87e81d94d16a85ac2dacf5fcc2a1d082dc1217499102cc1171807e597e194d8e14485ee5d6c1a4d8eeb3726b6f3caa6e0d3854b4ed312dd2ed2d52bc6a43e85b7d3361bc9df48a938a46773265034acf8f952345f00b52b29c662f5a13128eebd6805395060c6ed826621db58e918405858328c7487fe7d0fdb3453907561f2870d47df2437921ec9db09177b2932a07d5ce932665352a372bf0045db11484cb75ef290bed09e3b71dabe889673714377895ed7382eb7a181c8f0c15393f9c5a359f52cef640f4360f32d34577090e963967a577330867379cd73a3b4a0cb96032f4880b7f00933393b2838a8406bc97857a75d73f18091dab1908bc4d79373a9a572a9a4c2423256f90653fa524d61df329553cee0802c459c99935970a989d272c57bd33692610be740c403fe42992da0ecb430ac0e86c8687d16cb86247e3873d26591a4d09ff0df3bee41844ae913741e62d0b023ba1d407f78e645d72185fea4829d179b484238d06c2e6add271ee9edf91dca417253dc1949efb803fe4dacf7e9afb5763757d191c13177107e9a99275d54740867631076e8d034016c051754c1a924abb7c597f87d76f4fce1361b5ac696e6c89a0c221a2c30b0ce93b9c94431fb640f83888d4ef7e8b098c0322466695681d15a0df00648212b5f3dab8e4b44a051062c5dc610da1bfd1d055f8d58e67318f3b8fd6e62c0646a525205c0255136743c50d023ba9ff2e335dc575a35bc4961af2df8c25c4c32447c7732d91b83aaae488e660e199d99818ef1f3da36ef1f9d47f740a86a6cb03ab0c2fc2fd8c2e5a75efc54a1c81d28bfed16ec5522d3a7d3de50ec0a0503051c2d388e8396b40d03dfdeea89367df224f1b6d70a47239b509a9df1d3a5809be132062ce78ce234ee38580aa26d1083e5a33a686df53020064b5b7650bec50245670df7cf8556fd548d6968820ff49970b55fec15198112573940a94bea216a11b1b7fbe879f2db1b863122cdce1c0281e9465520bd3429153a2614715e4c47a388d52badc61183e3c33a82409beb4ab5cb5d76ea96b1073026e7781ad66a60eafa882bdd703f54ba1ccace59a56717ad85995df5ba05caf28f83da06047a7e3f7e69e00dfcfce042d9fa83b80466401401498bd9f043007a67f7352f2d3c5bd4103dba31210665c3bc5c7f30dbc8ec504f18518e32ccb42248d287c6fbff1f0c90bf74c885c010604fa3bd8c25fe73d22637bd8b76ce5d20160eb8e9a50660d4c0fd890f96319a59d06bd421225df2f9150ae0aa21a59dd3e955380b9bc6c27738e68135cbda45189e96bf501d7af34c142286986b11106c7857b5ecf6124f4442f12bf903af12608028c7b9c23a462912348ddb7c459168054a9732ebc764cd6858e01b1171c8d09a39288cdf6b7f93a7855b38f9f6626502c2cb22d76457d5021383c0d1b333e44e9ac7afe0660b35ffb6557fa669b85d79bea38097de9b006ad1fb5a2f4421eff01275b1b7c227bf0d015e5a3369957374430ed15329ce8259cd8909a207cd6e7850181dad38ae6cd445183a23c9683da5c156a30f06da1e6dea9c9806be8635324e9348dd035c59cca86462d8834eb51187238ba481291ce4d58fb928c1b792b7e39744009780fcdc64485330e9032249f053549847fbd488fbfbe3a3e31a08e114c733451c79732daf555d980a6bd29f642cb2feb39bd05a8f06f6ca159c2f3d76c20ccec2d3a0f748f62558519b3c4b03cba54c863f6d46fe232d04473a5f801086459f3e2054a179f54e8739fb62922c605fa1171e45419e12dc0e0af35fc8573d7377d6a40c75c3016fbd998a1cd33646a0d86d63657cca719bb03491f133346c68ef81992c3d6f44da4ec4456c28c13dd8e0e40d4dac0ae1299b2c01f05e07a8641535e4cb209a001932944c15d5f2e71b359f2d48dfb8e1cb9f1e8a2a03db63b283d486d1b50e4a0b28688b7a3905a75845187ed77a1ca86fc45036747cdd3b3c4713802777fd2d61dedb6e555d5ae04d7ddd247f349cf15610b6378c466b7b7d58151978969b9bf7f3f920ed061d937f67b698f153baadf14076a9b43a283b4b6d65950bd9ae10133265bd5728a150b2a01691cf1b2bad265326eaef3a30b5c1d03c1b5bf24a1975eba43896af339bed66f64ada3b0d3e84e0a5a48a2b667de6f416c50533fc62c5ca596ab089797dfd443baf813a809dc1826739cf033ce78565c49606c4f460af7b28281c52002aa27850cfd823e2b0c6343c7c2e8a43d23131495a18aadc7bdb97a7bf83db2646cc9bb723a91285644d8196d90d0c2d4cee2ff34486dc0a1ef9680f1d1c81a0e09609b1e9e299d352fcba8dee446e577b58e9f2c6b4c584028bbf24c0ced266ee22c297a0c4c803e4664764be4c122abefea9c43e44839014ef02aab5f5d6dbfa945b8882c9d48686d911a01921588f55706d212530b486b338888330c7c38f02905895ec28b07396541c220e0b07ed4b24121300a9e15bba552b9e81c7ab52dac8b7c7c2b8543712bd9b0feb349b88374da7b7e0b07b56bbfe38603fd0bf84803346f1e00094fcce3cde0a1c587aa1641707540b96bddf36f99983a1f47821258bc2076fee51bc52f6cab3045ed3728a381da3d1ee381c330166abff9a909857d3ea82defd9fea00a7e4f18884d3d54300c84ec22ce8da95fdfe2ac15fb1dd98910480b10da43ec50263e6839135e4a44d6e05cad1b702be8ab402af1f57bd71a7bd511863f4a5b7dcc3dc55f5062acff56ca0c301c80259781df271052612b3f652edf61ed21509ae5b29040403090b485adfc5f1c8461341a9a0172e30ad51146838d2e82c43b002038081ad96f01c6b6d8780927b13fe66d0506af4db574a06ca6ab4e8f9bdaab46f5b317613de4b4779bb349cf88309afc5b8a10922e3d7f98ddb7c3373d55c0f02dc029f21f64589eb00c3142cf3a3f4a79346823522fc7f1dd60f1ec190a7b29b6df0d2fc060b71453acf5aac895aa51f47c217d4a3e68c3259a629057a2eb6901e80b52d856731cb1399cd03b04c31c0f20df220bbfc9a35a7bc747bf70108b0bc2dc47b00911441b152f855ea04f657bbbc3886917acf3e1bdc92d37dd17f9e1285f49d16a8350e62d18564cc5c36dd4d8c4120bf64cf139d28471d79b60fda8250c467aa981abb1db5891b84869d9f20a2c39e311f7830d30986917571be5922871a27f8254c58725771a26057ff2d80849b953f8504b074fbeaa92e88634e95e223b560f41ccf3209dc914d6ecf1c7ad93003b93f7cf2885d2eb02121c80fe0165fe9b8a888afce6b5f1cbcd8e3e29738d396988f3721fa85b596f8c0084ba8361bf4fba6d882efafc68011e46cda23533310347d7bf14ff86197a27c653ae20c1ebfc69fd49f1493be4655597330be4b9b7567947f0a27002a0f323b1118ff056ea270bf8133b7c8e08590a68861184ef387365ab54102ab08b9f2272fef4e0fec0b1669befb7df861c7e05308b92ac68b719119fd0a623b29173486319559631f80ab3c0c49dec0d43cfa046b1b023c262c7a466e66927c9d17ff20840a4b2ed62e2b796478faa707a349160d87c79ec21c325c4dcafb110b511f1f08d0bdcfa53ad819ba556b05e6b2bebce6b7ae4682fb0f52f41645fb872d51716561a234aa385a0e563cf87d82775ed1fa7e9c547bd17118a29637100f9dd54471faeab5aec45e204405efc9b7a255cfe8d46e2f0246e5739b5552e2391859e1106ebf113041cdb3a866d0806e6c9df8a189ac93131bf5fd70f9d533dbf4277954649898463ee4c8c94448d6ef4031ecc51d851a687fed924c1e65c79490ea211d91a6e8e2ba550e440a60e23ab99f469c00b75976a3a549fab5472bac0ad4e4142f768b06daeca4463bc9c1ac0750002bcbb894023769d605d23a558821172fc9419ddd793890f16e1b14ffe0d7b6bf6997cd1832d17add1be43de3b8c3b3214852fe0144d143d4f50b28b20d8120e433202d786adcd1ec8a9e1529d4fe4ce15f436710ea89864609b88da1c2e96a652c3757ac5485a15a76eed712651221cc455003acaef17ec1dd8550ab92e05b465846f8be517965dd1311010d6e6ddc350d7eddd74c55731f3d2be41c4ac614b23f0394647276312a5c3faecb1a02fee00cc320b92c1ca1068371e047d0e1427f8535acacf7ed7f729848b42a108adf7dd8d36c8953620b5e8e4890d817887fb62246adf7688fc4ea703b20295442ef69991c65ae30b4ea003d1c5fdda3fb24a919fff9cf47d873a3bca55f5c02d6e899e9eb3679871ef449a873a568b9a8e8ceb69f9521ed5e539c260946c1ae03454da2111baddae5435f6d69a7446b50e1676640411186c53c769418ad860be657f4a3c30be02f119419189f6ca55c0d8245f01619b236213898a32a7d03a765c789fc0bb005412459e2f2e5cfec7e71666e0c937d093930406d3c6024f9f4bf17caa5a8b873ba55029841925459c27b7a961e39e6bf19236d8496447e9fa3ac0e6458dd030130db20d3571b210c7d70038398b9ae64b70c01e28938ea462df76345080da0496c1bbf6f18420fdc28ef92dd303cf2a907a6603c70526c26df94bba6151d5e3acc50e47a1ce5e0879fd58217e3fac622b3019f2764f0692d8f1313ff4bf939846a28f20a08ab05cee01b508ef05bf82cb481893dee0dbd3b67c1f8c5484b55b06e8acfe4ef3b5da4bc19c6be23e1ba5b6ed4d3cd30d95dc173fa557153445cfac238e98f86d700ea419391e6b92885967c250885fe0828824184bb035fc4ddba43a85391f5fc5800737bb27c9f4aaecf4219cf0ef0a05fb733e14fe709733ded55b148da4de409ff9246de41401ae65b767500cecba0f8e884574f886acd40d180561f98311d927c0cb04ac006d434163252f786e233c8269a1fdc604db526d7f1c1c11fc409c7611a5bdf001f7179b0a6c4d99a5cae2d74a8c57bc131f3f38c59d4266deca18b166968601283e55c06472ee1539f175bb948f6488e3743b17c80afe36cc1ded9eaf0905047d9c3e0d759a04d4226aa67fa4fe030480c6f8861644f42b2ae537a33bbc8a064bc71a11af53456c52edde271e4b2cd9c5c2a1ad88c09b649b19afc7806af37ee3b8ce7160770f5d4dbb1f2a4e191021738a97740f9d159a42479a2fd9c74f0e32e002b438c6969047780ac42222a0d01ed6133d4452c6a45424dae0a1d7065fe81b1735a2582d8e3bc2aa8b3ba996f6b10e2549bc10b003df2f18c4be24b841801decd1c39cd2274c328b479e6c8d7587a59356a844280600f879c11e2a17812089a5f05fe5d2635a5b37b32eeefc935bd3538e37c8c4ad427d04d1c1e87f2a727bc4657036d47bcd8e3f2bac75c237e5712c665d491012c8c16b4667ac282fd98793527f99849f8ce39da8d318005fdb48bee99e4a8f17c7be68b8905178fead3a933481d82be5c661f5db84a9659cfca20b804b8f03c689616d327db6143b60703f66e39d4ecad9c26980e3f6f853f9102a05e2b3202a55ca902c9063a464eb8fdcaeaefc27f3d63c38017c97364531b36cc4c94746de87cbfd5aecf9cdbea9a463b8aa94d2dfa282a2c517ddf2bc3304b9f4790223039429f1f6028b1a8aa164513feb5169cd052a15949330d5395c6ab1fcaccb12a8cc1dfb29c71709ca121c46469ca58aa07552b25b92775127c28dd5590a1b4344c574b8433eb03c710bb3c472c908bf919417e53cf97f881158e89106fa716b86c6a54b38c36e7f9f138bc919fa58b7a2b4c05136e6b3c73905ca124227146d2b1c6400f34db1fbc0698917350c439869199f381c1d1ed623f606982020d539e07d56d5546910637c221fe56768d839cf7397a6c6799cd370d5d1d5b0e4386de47cd529cdf1bffe8a2d3714080b3097d4b25d991436c7066b7cc8cc9d91efbddeca831214dd7bbee7810411585ca7d8071c02525b4ec751410b5d09063ecf64be2a952df960e1bf7082ed66ce7c8d41140e65d2fd50acf3fc76712767845fc12deaa9bcba099bfaa1b187e8770f7e5bc8453531280e13f9e32c747ea8c3c3a981c8440319e43b82fb043658c29694a67042651af4d83963737e9c234a70d7cf1482ac26656c09ac694aa2ad7e3c521ec4b4b02b5e47e300e58e4917e26bf153791c3249ad661dc9923983425cb4e0f6f3be720aaf1491825459f80c7b92128a3ec1845328c9b448f515f4a24dffd7b03e037ddd2cc40d1dd1b48945a0df8744d345a889750311c87da649ea41dbeaad23febe7d0b534ebc59cf9b5205b03429c54e9a065b06c2e90ed5a97bdc5311c6ecf2ec5dadb4dc65f0f5c89c9b6598333d5574b48c6e5f05f3c7f0221d46f6b761eafd3cb817463451eb69d92c4af4089fef5cfbf6bd94091dff91fecab8af28ef5888844f1757364f257d0bc91aa134c5e91c50d5a05a755e22668dcb14d5e081c9c4536c71d520fc8f58963aee458ed990240ee0daea1e981d53b72aea001cc6059508e342da08e31de5d5ef648d99a9f3262a7ec233b4a30b20c833781a0525cb00598619f8c26851d793408b60d49331b611d357fd904aa22ff4a9b2db422da2e6b2a938313f5604441c0f0d8cbdb61656933a5b5e670232a3d57024de169432168c523aa44fad23f3af57b5a309a16b253c9f8c10daf107e7c2a2bdded148d167daf9c23ba74bb384ba49fb44520344781299a9deb3e1186f72331aa4308472cef7b81ce226d6a2c7cf4f7ce79bf4d27ca84fdb1e2c745ddcfd40cd830369e268b39708fc93d954b81f3768a30a0267c67038cdcfd56a5485714a3656b764f450a6719d225464d5abf8b3c521208da4f0841f4359460de5658fa330ee0cb198d3e493ae53a59bad55a0c932fdf5d53b261c2044969942f2c3c4f91be1d0d733bc786ef2025dc772d06e8e4bd498b8bd744c46fcd991228825c3a46d131fa0c0e2dbba0394b42cb242e1796398f6d8a62a3aa3b0d4d047085ba93bbb4ec4a05a2b01a405c08b8005640f19a8b934030b01806aec01ff072f633a7efc70d787152e1a2f36612d9a9e4fcef6ef081cd6a0cb3d12619f8a8d3254e3d80138bd1fb0995bd2a75d769f563a03607d18268148e6534e19174d6471f58e293e0b2e83c964efc5ec1f8dfd4586f3a02583949bd1068fb76e0f9c93ffa4b7675f8d1dd444e06a838f06e6a4ea8cd7304b5c39e302456d512d3aff5b1c9656e563be692cb0c9a52e5a8e50e46046d7068bd0b74132ea1e87d418335a6b696ccf2a09b580ab32840d93f476e15abaf2c5a31e95fd3ac16871bc421efb159736c7be4f510195b1f93ae8c5876013a799ecd660a4f3f95e29b1ad93b1b04c52846ca772afa985dba33a0690eb0883f63b9ef4812bd813218ae789b31a8d2f5fc913d180c1c4888949ccf0b731a1300449aedd762f2f79902946782dbce2d06d7677cead836d2a8e4eb25ea65126ada74ed693e662044a76419e2a7ec7cda37ad3423e8445589ccbdba84106b3d73311faca3e1237ec65bc36f22f303fac2295939c001612b9dcca736111c571edd2a1f18c9f4aa8b5825606e6d629a2a2249a5ac10adca9e19ecc1c147e36ec8b4b2da13cf42c26781b2d64ec7d8b3291e10c54fdf7131dc0e691144eb97aa9b6051279128b58f0c178fa593d98893fdc95441a31da079e8cd0bf5c96077ef9a1aae3b6c0ee21e37ca5162a8a65adc0468b49cd587f8b5a0c0e3415d3432a89097497ce434d1a0c7d8b570bcee06c4fa444c9feec42952819caf032084a0055a2b0e59e2393d3fba785a54f123ec7649d401d97bf7f62adda79aec21930c72b4b8e41ae7833a54a8710652ce9b9e2ae9de05dc01a691d69ab603d3e30e15d9073134fcae3ae52d20a91e860dc14f5c8b05098a48b6d5c211ef03807989be6e9fee89292e35f8c5a998f44666f844aa8b043fe2d97e9eb0aa8d07a1739d5da995909ba9ac2b35884b29ddf5ae7233bef6656b53d1cf96e653631242f7cb2cbf859e87c7839e183681ec0d2bb31f3b0404cd2768b8263ad6605a3824eeeae20478c9c419a454292745d3211aa636608143a68fc9a68b46cb7fce783720cd7afe8a36a0eb526e915793bdd9b68a81aa7b7e8329626ab3584f0bb074eb7185cf7ec7e3357c1ccc6b00fbc63c58216daae0cfd4677a316160954f3e31acf53e9276f7997df05b5756d04aeadf84491bdcd2046e9d1e70ba315598c659f9cace75df23d3986345061e834e12a95c063608a8ded2d3c0c87272bb91f34bfa501b4e268faa183b25295a3e1f62141e3f90b180b179f3d76902bc51dad8e7baa5b55f9d9ea0d4979699cf9d5ef5abdd1fcb17156e4261cc606ddf68a6d7303a72b9d5cadb660646faae715d21ebe1673e76f1f6b1cd9b180f12a02c6ca124e42133c8cc60527ab9f4ac0a7701e8cecab0f15e33ccf20dc91f51bb231e03db4276c8a24ef5ce8981907e84fe68a7460c6772adeeb6e4df30d98b6d3e8baf0872fde191986ad04e7b2ec45b866ed4903fb9d8e602d10dc7bbfb8fd7a741609e3522522ce24f8f4bec47ab1b8ff49d9b46d1641427f67c8551d3316ce58e5e2b71d3ad6f0af13a20cd17dc7c6ff4240461ce83fd7e80cf907e33730487321b2cb42298cd61ac6337253f21b5ca9228fe61b66e640138d9c6bf3c162d57c459217acfe216a11f128fa7d948e7a64de75c7d8b795bf26f21943a86148b56cad5657ace33cb4ccd2915d1d9664a67db022b6a365add824845cd9ea4624f10fb8ff0e5c6e250d6fc930ab60c7e98829210440e04a14e6c91675bf2bed4a06049cfb6243557b739989be15eee60296704d6a35b0790772274e86ae1876459ef65508dbe458582c449bbcf134e71a06b1d65626698e1858a961728bb6c52fa044ad43e4dc0acc012ae907c362d94a402ff267ec4d0ba483f2ad2892b5649e6fc7150ae81f0294eef585851d31da8931111be2e1a2b6b9126e616f8d385221653430b8c1b932442d10ab2d3b2b14c6b1b2e8331d744170b4a56208d1e6bed1c4c707e6527ea9d649253d6a41590f73ec88c380a8b55c5d080e2f4188b359ea898f6d8c42e62efaacf47af92269bd83486911ebc85922c387cffd19a1a502c3016d47cca1a52b892e39d846793ca7a445f433d70d8ba397fddee219d0639946d1bb4baa7d3b228e1d8375242bb4272cd9058ce73e90dbee8dc5b44b44d50f9d3305b2632f1aea0f7c2c5f16c36c81c2245a211484648408fb5716952c201a9426c8719e42f9248cf20e0e18ca5aae915570cad7134c486cdf7f5fd0fe7b4ae764042dc4e74c65bd6a5b3ae065e42a6a656334d070a0e8cdc48450f059d6c9dc332b490a36b37410b99ed6128e110886ca117de89674619e39470a8df8e3a2efa24333cf7d3c835206bc2a86bc91084f49733a1729afaae53753549e011135f357e2fd8f8aaf12ef2ca703a392ecabe7d9143d084f84b4fecddb9383b0ffcbb1af16aa3f91425e5a75c455ac3f2cc182da5621a905dc4c577abfc3f04fded9f2fcda65dd38de9d213247456a4f15b85d421fcf38e5e7b442b31083c0abee49b102061bcf6435d4c0c78a4b925b2e0b823b7a8cc55e7a1ba2de1b81e23320af5df553beaed6aef681cd8298ecfaaa49aa62b9caeeed161631e0ff1aa1de22b00949905ea3483de92213938f986a157bff4f4acc77f04d76671752b1bf7fab93adaa9cac135c01be12e342a391b32489cf74281b31077d3fde77d9fcfb27cd76a08abb3f44c5201bf6aeed4bf35e1be6e3c4d66431f0c66fd5ab289c3c256eb6fad60462655b1443842762602a6eb0cd4a0f2efe078b0fec19747a6c2cdceab4b565161c0a1624ffb05efde10f1af88ef62cc2cbc3b7237502e80968002b275050110b54bb676b88db50ef7f402c2837ea8ec1ad6b213afe592cc78c640a2829794b50f965ff6f809d1ab27105068362d71905fc29dc0042d4fca4e4ceb95642b3153ac832c9fa041b38427f0b1f14b7fb4a27161b926e0543758ae3e698acc80e504781b53264d63ca98ae2a9ce48e2ed0f1861259bf93d613102eed490a79b861605fe9b1b30e4e89eb3da097210103330a7d0a277fc5a3c52b47bc0a65d32baa53af4a461650800e1cc3420d998b45dceb62af6f8dd73bc14bfd62b2a087a1fef3c8ab72a7e328375506f2d5dac92c2baf87c5a84155351f58a5ad00a26b4a4b7e8f723ede2e5d9de078c34658807ef47ff8cdfd4399567db167bc52aba6f9518c4ab929a0896a9c636ad5e262ebdf91c8059e55ad24e326a7517dc1114dc00135ab02618be264e1f202575d6aa87ffa66f94505c64c0da0202cb4b031ee212d7fab423d81a0f0582062910f6805a07e8a223ea4e3074e0b6a7b514112209e5e3b7e084a933396d29b275d0983dbb31ee3c05bc419ba0a51f8503fd0a055a05dfa73a14861bc678499719d2e80ba7e2005a5cbfb351232f3227ebf2172932678ea2d4e6d2888113824d3ab21c80b3f9d09770af641d78ffa39b20488aa822ac9b492c5060d0fd6e40e023263bae6f08a2805a74f4a415b6cbf7f9895b6bdc5cd904b43c7bf17d6918d58ddf9720dc30cab80f82aac80d0fdc31984b5a92a9bf9c249ec334423e6899a9a1ac31d55d6a812a44bd00ad7c3a162764ceb89b189a01e341f791944b26b9e1abaf0456373a9ab051e8c923b42a49b968da46d61358a9a107e8310ac535418e797274fcbd8f3213ddea69192c8dc7e36afab5cf5025959083335feb10901d4bd04cab567bc58309a15a70db999e931f3ff5b89c924ef4da125a95cacb05dcf1e8977ea2ea64cacb0671ba55528f38139eded8c010f60d90510e09a932a08f6aaa87230241718ac554b9747e506ff8d1606fce2f7364b0891145ad99b5b067d0b8a0bbf0baf51948c5f944bafcded24b33ccea44779fc45a03cd63c86e0c02f7a1e25cd03ebe8da5232cbabe4d26bf5043f8f1df06bd8d6e5939791f1a3e4ee4539e523d7dd4041113d8f1d1ee58b107d8ae6417ad1c3174fca7187fc22e54ebf7f3be44eeb1d38485f8a3d255d1399905224fff4101d9968adb5d630340c0d618ced458630c6cb6b744bc9ddab64191f399aeec6c9097e1e3a45e027691e2c3aeab07cf745b090bef43c7690a17990bef494eb6ea43ccb1791f22c9ac7101c2caff23cba4ff92254bea479b0bcca0e4f7a2fbaba67792fee90b3b62fd9bbdbb7bfee72ccdc6b76a33ef0cbf6e63f5703fb6dd3d04df6dfe67f6d81b8494a0c8b31bacb4f7e04cf389a28258d941bad01de3efe77da55592cfb2ac80acbeec5fc5e0cb316db1ee6b24bc098fa197673d5f7a5271aa2be3782381a0ca49d708c18863de66830fc7293bba00b24aa2b78e26462aa2613f01464360163b64056405c2e17e6e288e87f71fd2faedb0487d22057250f398cae3e3f0502e3b3337197803318e6e19130b22534e3bd7b2343c403ca7b79c317980b3382b900b0511f184574e29f930d7bc52d432412c99021fa1e281e72175150fef33850fef3f13f3cf080b2c5ecf7d66f641a3d36b95cae6bf1c8be6755f7de9b23fbfb9f23f37aec8db381652d09c6306ffbf8da7bf674c82cc3ccaeac2aa25e443d5faedd1dc21831381acffe66d763dc61078ec61dc35c4687f37383cd8226795590496843ed0689da6f32c06254ad54aa0b640658d45499d5982b63f9182f68cbbfab8bbd04ea835e02f43f4f57d817511ff445d0ffd0ffd0ff3c8ffaa0b73286c7e7290fd0d7f77087e91bf5411a4a18a9e5ebb55af9c9bbaafa5432c13f92d64218871ffc90a03b631965acf98d1acbc97ebe1cf3edd56c247c6745b6c67282600f73f97c01e91123064723316c9ae88a06a132c0d8d31594f12d372d0bc1c03580805b15250623ce979be28c01863b3e66231016d34211ecfbf3a07fb1311794211f0e017f1e64e15d6d9b48815c26dbb32a22f68c0efbfaa0ffe40ed3dd8dcfd3c701fabc567387d1dc6138aaae1982691cf5b1ae81b2064a0ce46a8467ef415695133b174f2777947447c4edb647ee6051cbeecdae11b77bf4ab27cf7ca56ca09d7d596a2406bc85165390e21381dea90fec9f21bcce92a2f8b67449d7bd9fd52f39dbc875dd1611ba739b583971716c14b1098cf1bc56d89b2fcc88c7f8c902a92a9c10a18f2f8f8ce46681f8e90271d38d1c8dccc15e93fac01866c323c040c89e2e1863473cc92e88bae3d71db54c222b8541fd32d7f6e6c6719b76b3fb7a8560bc20be20bbaf395f73d22074459ba032b0d6dad7b2ebdc36add02e1ec118fa1e8cfd62067bcc1567308dbdfcb1575ca2e72b27ce4c2da00cf933ea9c2d9fbae084d5ef6630bbd80685683595c5b07855580ab0544c41932e3e147dfa49cc2a086185a27a089602787da4fc743f68928fb158180b63b56c9e3d6077ac47340a83b0568e3d0582b7c71eba1642eb8e9bea65c918ec995c1e79755c1246e6b4e475c99bd3232b177ee2fefee759ba5bfff32c4fbffe8ecec6fdd06b6fbff3f7ac8af49dbb3abf6f654ce9aff63017dc717bcc950b26a0875c24ed1d53e280c9b7a3137abe0db728f2f570856f6b75d332298a6f6b15cb7509af6f87722753f287f6f2f145d31660fa9f073d7e9ca54aaa3eef4955175fe2807217f50e1ca0c7ff008892373592056a818644c98a31c618fd6910a08c56477002ba82516cf9550bc12fa4aec49f2f1973a22bae2adaae268f842969cbeaf2642261f4ec013dfe9aa3b3c303ca188f84c1196322616ac67a6cfc1485d48f5ebfeef8c9ea9e0f75e5bc587b272ef153d470a37cd355272707f4a914f4a914e3b0137e7959f917eceb113755e803773527f49e5d1efb1f6e92f7dab8e9a6beb74f99c0defdf6fd6eeaaaa0ccbdb92d19037a6932bd6f3f63b5d2e268f4dde3187df7f1bbaefb1a951fb160fc2c8f033fcbc76761397996af51797c448cbfc3f7407d7217757c10e877d035f5415f43fff33d50908b0fca9725df9bbbba2a09b3696f32fd8f4632661a5361292efe6fd9935bd3ff5f4a4949293d48d79c7ce96b543ee57ba048b9f3077d0fd44a5ef9cfe358f9909ef435543be16ac4edf29f67b8b6fc5090ed261e76b67c94d7962f2367cb17e96cf9249c2d7f457ee9de9b5d79786ce2ccede161c2b36df6ca8c0c51a20c513232447d7681a1eb2bebbae3dad9f24605c76f4e72e7ef392ab973bd03c7e7412e5de32d5de5107f88a29a96ed186d0f3b41512191680bf08f7c47c2f82b43ed6cf9dd7defe981c2b9bb7a070efca37f0044f948d7388ffeb6fc1ea8f71eac87dc8728d07bce43b716b7eb01bbb7affb460165362d64f4f2c2ebe1ab77c4ab1292f21df6f6412c1ede41f43bf0082b7dd63d14d2bd10fc367b1607255b1d1c4fc91647c2c83fc92aad1419533f86fe2b05ffca933ee53b8dbd248cac5f4ac694349692303b688c89849155b59231228df5a4e45a3f2813f707c40265302cc0185a8c009ec02eb1527be4285b958479719b6cf91fd6c51183135bc026b68cb9fe286c490f86f1c81888c2b961a15cebda7ad1158785fee727501f04fa5cd696cf6af13017e692319385b930174bc68cdeb246235dbf0c543f160b3b02e6a2195bf28231e4af608c149eaf7805f6eaa7051c2547a6580310b05882925f53279609ab8226f951c4791530c48c602e18ae86dd1af581efde9efac0d9f6305784c28d7793411c35015f61857502eb004ab13d7b95d0151556b531ba04f66eaa7e6e8abac37ec4846f7b23267cdbde20ee2c8b65eeda2bc6f99ae2b581d8485c10fe9a0a8b9a1430f6996bafd19f2fe7cb4f999e3659be40ee4a856bea630176974a4ed75569d7c5a12bc05efd2e16e3f5183fa3c3cbb74c409900bc7c0b04ca00e0e55b17c01998976f6100654c2fdfaea04c0e2fdf3601677078f9560636089481f1f2ed0ce0cc8b976f6b0065f4cbb72c28935fbe7502ceb8c8b43c01651e0770e6450894b981329c0ee0ccc60328a30d8133f7e5db28a08c7d578c31c688610630408db863e8100000c09872c0e106182f747609955a5c3e6b0070410080c3300cc3b0d762ec00fde325b1475c10de04d7b64f57d8cd365e29a59452bac90f20a5d47e8331a3fb00b82074c8ad3d12beb71f409665d9a611201240455580dd3719c40f07ca400b6362286b08ee3b57b90988ab6288cb74b5691ac46acf8ef4897a84810ce60bcab83b0d1a43d88b61d75a9555cdcc7034f746cc4e968510423833ad5d69abfa4141fa7e54cbeecc46972ce17919800b0289b8efeb903b7b0370d666088808604119dfd4074671342f1f06ab7a790b04ca401db8735c2d9c9bd50b4d0176d12d28c01ef6c25c9e31168cc1b23d8cb5e577cff245949ef434bc7457dd559142bff23d502cb973fdf4478f83fee8fd47ba66886b1cf557740de8ebd77c9e7e0f9437c17665556ec25eaaf97acfa46255ae2d5f3442790c04e78f6dce96cfc4c4b3a57d79a31daca3bdb67761b0c279b5e5531f38b4774c23900b7b47dc27c0588e2b85b1f730d7ae1ff6b2d8cb7e5af6c12c3f4168daf13dccdf06102dbca08c5da285033607dc6ae3d8dfaa63bc2b391a618cfd55ddd505e226a93960a33eb06f0f7badfcb1bba2f96aea452c0110abb2ac959f5cdbec52bb7293ca4dd2aa80d81510765b7d5912467a4cfd248cdc445e692e71d327632e10bff25e9509f0e479b98996a0011bf5815db687bd84b8cfd1607e95c0f6fd6515f8377431c105b20b6d978026f95810736b9113c232b1049421b5d7e686bd2361b75d02c6d05ea31be601dfd867fa08b931dd054137f674635a879be463c05e557ccc66ab832d9dd8f2b126eebdf7462236ec08d8cbc75c50c6886356c0999a13655c200e235f83c0e652c050e6fa0d62b1972fc09e9531d8cbb331633c6e7a612f6c899ba43fc6b3bddc34c683bda61dcd5702b025d8cb4ffed9fb2700c6602fcceb4729a51688c5ec6fafd1b72b375dd505725598be7234baf7eaabc2f25d61faae80d42f09386eefaa3c6684929f80d1d6b255950067ef59959faebe017663b9e6480678f2152c566e47581399e021c3879a9f84544207455f4e00f9f9f57b94896f1896a5a86291a405dbf3dd9a8c7489c5eea5e98808813ed3257e12e9e97256b5c16952869dc30555f2a23c5d7d1cdbd347c9f44ff27c2e83de9ffb9a940f85728dae99cf7d0dfdd05b19037a1e54f31882e3e4f1f340f9ed53dea7e671f2f8415dd537b6a72f81ede9fc1a944fd112c03f75cdc983b8875c44c910758281ed61af23bb9a8ba21caa3faa4d9332602cbc8d58e6ac6fc7803d471744fd2e081b6d44b7ba735774610fb17bc4737230ede1148c81285959e6c78b651956c44d527a016351db58ceb612dba68b2588f471cca7dbcf8f1a07e59e8ebab8d3c52ebee4ce0e0b2355b1690bc296afa28a8ddefe00bf68e545dae74019edb191cab34038e33d5186b5d4f5f210be3c842f5ffe7c0c63b6b75bc610c69f668b650e555434758d322d92a9919ea8e9152df2e44ea923e91e08535d76a8151ed562d32b3c7f1707459407636fcec5e5a38bc7e851bb7b128791b7c2a8d9cba4e468ee470b55b227718f02fbf35a1665efb7e85946bff2fe9103226e9552cc1e8c6d5fb248a4273d49c5638c31c68ff6b247f42eafb964d7711dafc7d6547e6bd93729ef88bbb559f468a5477bebeeee12068c8169aee3279797ef496ccf0a47e3d22363e8aaa7476a74c55ab156720a1046be16760b29862d6bc42d77e29628d8c1300cc3e8a6e1987f963dd798abc0d8de64adb8965925a31515d147cbacef58ec4214d6de7d9b9f7df34703d1966b0a1bfd640ced1132ad1870cd909a94ff39e79fe898a21a03d28b3943fcb11130e8b93ff910ca7bb067cee78161786cba6688b76d9b4e62fbd8da58c7d5909b9bd50d6d75357c3b1018433ecd53d70c11f24d9d847f12460b61823daabf211ac0b0ef8288ef4c60a810996c8fdff3cf863fa63b1b1bf3cd45ef1c8de8afc0a3d72217816c7b630fdb7b95cfbe872341b78a16409461e5112d4779c714325fd2220e237358a44ecb09d7719374773f61188b0561b08f3baee3495cc793f8c9a3c6c2d1c4283ddff162ce917d048b556a7bde92229af3daf241a8930c5124d48a68054b4318b0a6bd29fdb38fda43c2a3378f4c1d8a5d0cf36c1e71d32993f1b5cff1f9f822b83f2a59939b0d6d66d753f9f8a2c7449f0f744c83b28bad803815d147cb2ec6a101ca44d7c102e4028ca1efb3c74d5580a74906ecfd09f0346f004d2c37ad019e6815d024fd445b3e6f004fbe066892dfe3a693bc01cdfe1a83175628cf1088b8b13b277551aa43776092266c969f2815d0740378a245346dcd1bd6af9c2561fc858901d7f768cbeace46ec1c27c97622190ef4226ef256cbf5fcecc5b4cf7ef7ab3499f66a7676b36b0f4c45b4b2b3bd1c9fbfaf65d1bb49078bf63e1afe88f45763a9bbc8d64e9865e766c71d232acbce1e8d46ef913ed34878cb482af19839e1963b7e62d152490b8b9e2ccb03b760c025161687c51372b606b920a09b72d458aa90c20581846fcbd158968d8585ab95449213d3a4eecead69f9e2050bc606654cacb4c8fd2a608cfade64b55830e29cb50d180b18aca13eadd80d11071c88e0256c81480e396cde11b18bedd910c036022ed9f13b1b51095decf81ad011df88a8842eb68ef81a804bb66b1f7e307911fb193d549808f3f197708520b4058013bef11b72c37683264d9ba926e9a1710cd8fd3dea1d379d017bb3c7fb7d5fa646948984b97af67c7eda71537d977f79e8ee2ba2cc95388c7cda7ad15efdb1e5bb686feab468afda78a64e7b547bcfa257b447b9d07287a6624de0a8dd7b58a6387b58acca9a132739e2466e17787aa04c1a60cc64f5f428710b039bd978b1f939cf57b51dfc6652defc7ddb05ecd196f7d82c3f15d1ca8a8afe664f8f0eda86afc52b03abf7def768cbd2d6c544558455ed842ff6b16a3308408f9b248c2610c6c06a0660eca873b8969f9b4c32d3206e8a3a7034924561adda9bc2ebb1eb47da72efe9b13d2c1ac40a7b291539703497b6608c2fc894fce1a79e26f2b3f19377a18cfda64d0fcdb1ac4c7b73e7e40923d859fe041192d9078b2455d859deb6ec2272d904e110d5b86d8eecfc2ca48245a04fc66d23cdd2b9a222fa64d66e3bc4fad68198ee3b6c5187043370ea6ad196bbebf97d92b668e502f6b75c60d7def409c221ca6d7345e5333d94610baabec26d2a1f3ab5cc569f3d73ce29c36385a63d8d502a6aa642a055f0f0041d37c927e8f8697e103f8ff9a0f728931d2698dcc1ef519ef9a097c0d412e0f46445d4966be214aaa0c2854a62a6a0851a926d7308d8933bce01d1f202cebe2322143a79c8f94acfccf193eb0c8c760efbf137237ed2286d9d2a4bf750b63cfcbca679dd7257757763e3be08fa53f3984f9fd33c86e0984f63846ebad9d331b2ef25ed8d485a7eb43777e48ad6617b9365330c3749ac66b865d0d38cdf4df2e76b47ee481bb9493795134e7351286aefd6289568f8444587d0c5aa95af9dd58ec39e19afc95377e6ccc9c13e73dce4faf03492e326f9a352e79fb79147534480b0e6419f7b90e63184c7fced216aeaae52dd55fa32369a214a46bc273c8fccc01e8b2435d89eedd6b03c75dce49c102fbbde14900873295eb7cf5f2db3411c735504da3e9a45572b8b638e9f0bb63680cdc78e0176d1568bfb6db2e80dc4b415a10e096640806d6657cd235367baa611374922e63f00a2e6837ede0cc1417ffb1aeeb1aed99e7ecd101c280ffa1aacbbf8f8e79fbc83740dbd311f7f11f4431f7afa287ae2c8938cbf08d0638d8bc01fd23cb6c7af6d9cc4f2c64d3d84defbe1e43d68240645c61cf1d37d9096d3c836cdf81ed66c4295d09684c99130922e69b5461e6d3d6db1a4475b2cba43bfd92377a0cc1458520bb9c5961f841d4a054bc650214418f9b40941c062cba746b8d1b4256fe82a65d639670f9d02d8aaa69db0dd62bb4600ca33a24a6280594fff0755c8e2055528010f1950d425e90e652263ec53fa54890739ec7d88e8390de9394717c47db8a37dbac44df563338d49b03fdc1e5db2c44f9847796c00624ce180f03f2247fdfb704b96b4232974f6e9733f7567757763fef638e8733f7f7bdc84297c56588eba36da6a75366e0e4d77f135dcde647ed96e7209564839ae59b48497921d35164cd86cf9c4bc7193b45d606579b305f6e627e5ce4e6ba7b5d32a3259fed415bf50166c20c1fc5c856191840794e6a833f310a83302252becd195f7d4e904d441912aa0cc18361570c69944192d2883bd8e8e8e34b225a5ae160603da922c968c994e48d664499664b55aad56abb52377e48edcc9267726f1a54b273e131d1652e73d345a93f01e31f3d4141a7c9748c0f5e17b8fedc5272aac9a42e12698e3861ecf10232ac6273c53e890093e563b7e8c30505dc04f9009364c76b4892e1f42e265c25783edc51f1ee4d9913aa4994f400943d2a280a191cddd88280948d71abac9d780e1e3b894475eb2ca5aa59431ca18bfea196e32696ffa0f5f9feaf7e669be57fa71d6fafe839b5cd3a0afd54cc30737790d7dc9d1501ffc14f7c39dc39a81a5e237226efa7864cb9ff1307ad85ec4d97eca88780c443909b0176f2214a32cdaa217810c588090e587181d1c067e037cc79b3c177401581338a6745ce1185552069ac723b8e23cc274b19e882c3fe11b44d6138e3901672a4f9461b77c1590959b4c9409bca22bcac26f62f23c3af51ba1782657e74fbf0bfde87ba03cecc5c3d3e2f22d2edfb27af94f9e4b1cc6ab5868aecd0d9fb0b0f44041411189bee603fa607f104e4d8dfb926dec481fbbc798a46b8c889a3ce9e6c6924fbe637951ee50581ee55de3107da76bbacf47e5b52e47154b5c4555177158e24d64c556c489ac2c4bc99f57c9a08f279f6b1cf83b5d133fe7ba1b2c2c9f6779d738ba07e91ad077ef38529e857ecabbc6a1f29daea99009101e7f7bf9d74e72f738cb780d9f749d0c19cf22e379b07cf710a5f926ca5d7efc108592bbacbb1b28cff245881e6b1ef845cfc2f2280f51385bd64da79ff41095923badbb1b2c8fbf88d293348f942fa56828614acf23eb236217796a0165a026371be45fcadc8f77c76c473a9fd8f23dd08e2c6dff478db2f0ff8eb9ff039c4eb237d6980e11f88335e97113b62d90cd00ecae1c9d9d170fc6c44ff04ba956ac1b9cd6b751617b9a76243fc862a768344d001c75b7e9ae86dc70635b6751e0bb21921f18b1a9d26b500643243f20b221921f3c61537e82cfc514f08e39c2c0680ad8a980fd35df1cc2185e24eb1819b945dc14a194927e72d6038cb2e3fe68ffc94168ef5f798e98dfc7c44662fbb8236763656fdafbc067084dd7253c2c0f6f980dc15c405b7ba04cfc620605861ba43bfc613ca89184911bbaa4f063c71628f1c486da73db9562a3747b719f5be4b66e0bc6a836f7e2d0098a886a81be5254e812fa5a19b190405aa925b3c9becc47f6cd22b315dfa6c0a6e86685229b65432441506d0d0a00432441f8f6cc8648a640c2d6441b7da5b44a1f94f1db82327e250f94713a808dbea08c8b40d4a6e20cd5f5f338435755545f95ae688c2e292929f4da95d5b1edfb3c788c6ddf7bb36dcba6cdd86b3c60358675d38c43d81f0ee3fa527aa7ca36ab98ad596452516d46a3d9aa5f1d41f5b16191e8a37d6c0a73182404d475ee2090f6de26ca9ae61be444daebb1458f84731abf8e6d8bb216dde4f9e31a8e75a73d7eed5dc7b6457adbb6ed6341b9d33e6fdcb6711cc76db9d3b46e65b6585c9b45ba8ea39958b57a5231ab7051b5115d36e097cc02592d71d3667f68fae3362505c6393addbbf6acffb4225d532f1cf7e7bdfa55ae87edb906f4d85bf690d8daf61c0d29d2f5d3b1ed8fae291eed21d4344d7bfe9cb6d97bfeda6b9e2b4f7dd5255e5f51571e3ff9286ebaf2d457fdfce4ff04d609c24bd36eced521913edcf61ab671f653da40b9e5462b3dc67873ae4e7df717a2eace467dfa54e7a05f73dcaf55cb23393916b3abdd61df6d0fb7f6f3afeea4ce9649dc2475320d89a42d1ae58e54227732edb3e2fa4ea98402ae3a08659091b129aab2a14e8b87cecc999ab91a16caf88b17d0e3018e4e2d56e9bc56fb216e6faee206420ea50680b1816ec8387b83c9c4d16c6fe26830ba8232d6b33ddfbea9ab1a6d81b5d892bea6b0257dc926b88fae80b3256b86d49cfce843ff6f716a285b554a0595f100439416c5ca8a32b83e94475ff8432f433ae5799c7c47ff332bcdcee326e7c14882b024c68ac21fdfaa408ff23c4e74571fa242dfdd87a893e701d25dd51d11a1871b07e8517477b5fc64eaa3fa0349d6ca4daf1d2c993a33fe6cd5bff3efc7fbf1de39b54b8be05b846a321c0da5a719677dc558afc0bfa3b5b2471680a389488240058cf17332f8c435a0c7c6b2a7e7ce17bd677fd8d4d5f647d4764a78bb5c5fa25c97e840f674a24ea475a6f891a976b6da3d36ed70841ef40f086990eeb163f640e0c5af4f2bb0a3575b21dc2ac12d81a804a0effed657a76f48d7efea57c5d90761e45bab3fafbd977d998d9b647d7daf0d39ed84a94ddde06097cd91319567346a619d9d5d5f7549e5a92f9bc2d9f6870d7271fce4cd15113f65311025eb2ba2be561efc6a49ecdbf206d89b375014d1f4e37b97eaec9302aeef65df8b20ea77128748960318750967b305b2ca9ea077c32edcd4c6f90ad11f34d5659f7b8cda4627b34ffa4512042453c62c25bd94be64cc7daddc9e9e1e99430e1ccd156901ca481a8000703434fb16fa823276fbfbd7973fc16dd9276196804da8b296046f9fbdbbc7641f76822ef1f2d105937cf8c107ee3d0cc3300ec3300ce3300cb345ea5705a0e15eee2df7f92bf73687cdf9566badcd597bf6eb6bb6567b008ea656194edf9b7dd9f77ddf67002441d081caaffc49cde853502c8eca4a28e504251463c4a1053c280c2c40c2b48007b50303779c10d2a914ec4985f49017efc5168e467f89a379618760949457f99ad1afbcbd61f9d04b3fc95695592b392557204a2543548abdc18ddf08a9198223f4288f22e44b42450c3ba8b823615a372a62d8c9c969a17ce8bd9883a2797692983ba821f993a82a60a186780a6608f7ab140e62500635fcf83e14440df9124793bfe368b8875cdd3159381abf30fe859b82b8e945863b6354c0d775a78073d898df390cddb9b63fdcb4b128e0548c59070d4c38cd0e7fece5e509bb3c0da72135b9025a41c5f79dec174b5c0a180fb77e6f7e7e286f403205159cbbdc755b3adf967e61b5ce7a972c10175c7a792961d275657d5b7efacc4f0e5adcdf1657e270f61c3fc2e5e0e0f35948ea51cf157171fab65a586723c87c705cf6918a906ef691f093f46db9e9baf07b17639777791afe92b1c7a2cccb4b76c9b708e95f32e95df42de2263957aeb9492f49f9ba2ee96d5c979f4873a52fd6f75ecc618ee3388ee3b8ab3df7321c0db7552d5e50867bbdb28731b24fc9b2ac46de5be6485906a4db3e192e9532dc9f2ec38d331147fa546e841ed4b98eef48189b7a0267b5d65a6badaf88b76cd33695af0f1c4d96f5c035a0c7d57ec2f9cba6204c04ede81d7112029be1c62a76c2d5a8fbbe47ff501803c63fe16ad020e6f67aecfb27dc0947737faea00c0cbde6abbe22bd08d8ee920b00ed6ae10565965c2daeb6c30e1c0d0d77db727d4ae5a6fa8d529fbead4bc5ad82c6d88232d69dcb6e80bdfacde9f293c52a1357f616c69c7c365db35544d7d76f4b29d5d3355bf30430862525afbc07c3c3f66c0ad6f70ab03d9b62c911c2d41fe5fa2bb9be4adef55372add08a4d9f8627c135632b376d3e700de8b1296ba73cfdeb8558600c08e38f92fd4fb267373c661aca9debfa559bd86def467f5d36609659840d58657bf775a3f3d08362289bf23b21b3414f652263402119533f1b9457e251287a88bf8705c154124b7d5f9c2d04ccf45064c66cb53ef9499b439e1141e0ed7fab80d708f15e01af0e0ba0c9cec0be207ecdc28924d81814015a26b610a08c5d018c1167ec8f2843fe0d900471c16cd1bb635e4c870d94671187911f63b656b63761132a2756f56bb9ea0bf4a1473285143b04dadbbd998fccc6b311c019fac3e92aced8134019298031680cb67ccda67c560c933d75c6976ac0ec8a95823236ee2698f4cce870465ab129d55031ac0ad8a32f50ce6c1c46be00b81a76671f8c41a18ccd9cc09e4dbd5e2f398b582bdcd675b9c92201ced0579421650cc806b137d66504ca7c9e66410940ec13160a22b6658be8e05636e0bcbdec7387717ebc1e3b82b29d2b1b84e5a627dc42e13044b86c24ce58244019520959f86cdf74ea0c55a3b673ce195b27b7d56a2580561f953a0bdff76cca4f91c74fb44e025c36c47034b3c86d9d300e3aab0186ff7d1f09502e0368a7db42b129d7e1be422f961728df02dcfb9291e168b497e168667553a4d9d32ccf56bcb98929d55c59954dd91f36657ff8c93f521a3f4c97fda1b24060450092299e40d9d18b3401b11370a4031a1eddbfbe5ef55564655944accab399c625ccc085bd7113a6044f578b06b3f6549ecaa4f64cd76cd52ffb683c80f60357437402036c91cb6680f167ff79fb4d80a20c9bdbb1052748b2ed0f202b20b89d05e1c24d36355b5750b26bfde215f60edf291960b8b9c7b26f895413aa6c957dd90a019247d3ee2bfbe214d9fac92ea61c0d0d4773ef7ddd96087bcfd80f37e58c5cf8269541d408dbf80abdf62df29231f60410462eb1e5bfeaeb755dadd46503feec1803ecd914cadf88a2ef2b0d62d8728b547642cab005ac6106d55a8ceb121f609e17141e93c55cff91115c84c8e8091be4b65ad6d6979bea1287f964cc6c322ac396cf456b34fae198cd921d73d7974d05c197e7bedc543f50a64be88b0df8647bf4d5c4650346d91e7dd91f56955a616fb6b67c14aec67dd1fb6ab55a2d9b823295886d15d9d66573eecba6523ad8b755135120dde1872890b41246ee9b08233f7eb46771587385648a1a6c6fae5ab7d5daf72563b26fd39a7e31a0beb24fc6542d6af6d557f6d5576653299bb2299bb2299b4ac9581bbee89193a03d621272c3a40f1cf890548b7246772e32190f582140190fe07d653c30daf7e64019688ab5dab8290d530d30869667931eab670f8cc1a2c0ae1f638c58d5392414d6c2f0138e6fb3ef5a63e46a8dd1e26052f7345cbefce412058a5ac5ae7b019a9cc79978019e9c0c5a444dcf3f9f7e0dfded35b8e5245eb620020b359fe624f410ece91578a45117948994a7562dd3566b940c597ab445ee01910809237fd312d09934240cd4093d5e792d7b74c626fd0a299f6c2c432c9e50865d25dd6e0e1b3ef4130f3d3bd83b7435e2c61e66d1c3c4aebf22a58432744f5f624f3f818f6014c5b067dc428b3de314ac15f80a386750a1192163ece3b4dc8443029a8834e8e840c98489dd2ae5b29fcfc13702096c6ea4ed73d4c72211d8e45410663ea7632be2608f3d9d1c0dc5a6f77b8b2b882c3f11f1d3dca0c4b248830be863f7e7d39c8d50c387db402b1d556e8aaafbd146c81822acd4d1889031510a08339f0a6bc59e7f85ce2642c64094c5c1d2607f8684996f6770372c121db42030e2af1ab822ee5b5dd303757527e43e44d98f351195751035c2fed89b24cc6c459c8b061c7190883830c6fc9a2391201804faf6602f5a2b676c9f49cc1e53aac4408330d24085006ccfce2d0d4eb88132747bf52db6bb164e43c24861a9c0566cbfa23b91ffe1b06c258c9b1c8b4abefecb4d6ad8c1ec342273aa96ae34e4c818f934a474499774c59d7aff863a8edf38147ee35044f1d46fa8f6959b8278f6315f39cb4d3babed494fb6a292b863b7275bf79dc5bd7d5a61ddd9812ffbb2d4be751cbfc154388eebd3ac1dc7a17093c72f3584b8721c6bc44dbe55e97293bfa73cf58230d8d3d7b01c5f71272a71932bd9f11356699d55fa8de3f8a9beb755af00cc420d4dc42fb6648cf6ae69f7c737db75c4d95e025117704cc5afa70210c6df5aec3cd8b335c754fc6af5fa3e1a61d896a3cd6ffa889b9cd2c752f1fb68cd9e5329e87d7bcf8234f6c916d76f43f9fbb6fd889f3ce8eaea6323c0707b7e83b53cc230320188cb6b941c8efb99ae89a88b3249184f31810928b6e7a9d853b348c309b6177bb6b7b6bb0b87fca96b224a3e0d87a29b81f2c109d871fca2017b163d29d81e747d7e632dc6a3d17b26181e658f9984f788d80d3c1a84e1653ee512a90595755bfae2d134ba44a35cd025f4e55be9451302d2a4963b5188fb13d65e933c50c67ede933cbb060e1f9dd500931eff8eec8b710225b5d73e9fcfcd9e79cb262a947cd9837f7234dc157086e200ca103de971b0846d7acf26e126cab0458022ca188255c229bf67a9a0ad2843da9695c2eec0b3539c3eef591f6c4a24ca803c781a4e6fe20c2d126598f4cd964fa1883373851367a82bcaa046a20c1967684e94217380c2856384c8d658c01897889f609138438f44197186ea44193814d937bce7411c463e75c5199ac4489ca13b51061650865e01c6c889335449942161bce7fa3ddf7aca2ce0233b5b27ce3461cba7c2968fc391fd842dff069dfbb90a49b6fc9cb3a049628ecfe7974faf40951cd9f26178fe7cf47bdcbf48d99ff891abc17dd61eba5c9bf4120787086b93de7da0daa48f3a4880f06dd247d5d6b08ddb31a7b85844018f20059441c2f641bc49d83771e61689327600652e11608cc90378ba4580a6ac3d1d5bf4221414149493939393502814c21863100804fa7c3e1f8ee3b86ddb364dd3b42ccbb27bafb53298c58800652a566568a55b54846eaec6dc22d2dc224c83aed2ebf7ac875fbc37caefbd362346e3381aad5aad3d8b5f7b78f4427ba3cfda7b9b4acdf0810302ba8680566c4d5b1a2cfaf8d0b5a3d8a4d7b4168e7b4dfb7ca77d34ae45772d9fbfe55db410caf2d36734f2f0fe681fed71df69ba72136571efd115f79c0fb86f798802e1ecd2e7ac711cf71da73ddfda8ce34019a5f734caa22b1a447b8faeb4ef3465f949eb388ee34aaf69afd394ae6890164efb7c38adbe84f01f6c92149b84649358b0494f84c9864888bc0ee0970a7880941d023440ca8402fd90f20145929a1602fa9cedf29da37a6c4ff311bb400dc9df6ef9ee35d9f25acd5d109fd7fef39aae3c41949efb2135e4081fb6f6a0f73e4f7acad5f87ce7c3e63a1b2eff7997ff700f80282586941e340333d59f23897d7339ee52b65b833430cce20aadedd914cce20a387b6e24553c01ef07072d724068efddf030fe452e7d0e393f28db805e8921471c60eb10c10efde797ecc5ad1f46e6408ffd62a3bdf7dfbd1236949f864b8e0170975e8b5bce396818df92bb9296a9e14329f1a8215ef71d03e03ec237f706d85997b2a7fd8be7b2a7fdc3c8395efe86a7213fc38d434b863b87977c43f65afe658372cb775f23f529e5f4ddbd46bdb8ab15589bcbc20aaaddf29d0bc764bfecfebc3608b6ced6a0045a5e8316c0300b25ae0d7705b612ae3d800d5d4aa0602321a293b2bde4ba04a57b4d8b9b0a47c3e5cf7759cb1e080ec0cdcd69d6c636a6da75d72b7c9b6eca64cf3d5f5b6ea9b37dbb6bc71db7060b80611656c0d970973c6c776f4ba5c7be85bb51faca0951b7f625ee46e9292704ddda77dc0d21e6d69ec4dd28bde484905b7b16ee46e99d1322f4a2a4fde56ec42e50a092f6ba7ff996e7381b2effd11b37840836f71a1744f72d4f436a3947f72d9fb594ed93b952f79fdc3d97bdbab92ffd68452505e524f41ef7240ddb9f9156572a55a133654a14e927be23ee4fe8c58b5762841af279f1f917ce864bc60d0182cdfde56cb47cf796ab018220f2e741b0ff85c8ff792d7f9ecbde68735fca5ecd2e7d28d7f8498fa6bd3071e1697995763a1d520e8b6bb4c5d64ac45189372991258a2b94a83a89a950fcb05777d71359b46732faf0ac702f956d2745d341c9725e9cbcb8d0f5e2430f412fb48d8d4dca0714e87dc8367ca894096bf27d281fa09eeffb50298b02bd8d8d8f17263e10f01aa1406fe30376e1fa3e254c28d02be1030aa46d94c02896b7514205357a1b254aa895b75142a3547640a1bc8d123228d02bd103eae43bed714f7a6db481b21216057a0d946d7c882cdacf1855d30a7d95394a9118c5edf77da813cd6648f7a12e50200d210f1e74d9a06077dad3fe85b3e1f21e69735f391b2dda53ee06eca28b2eda0077865b88ffacbd0aecd79d8d961cdab73cdc79d37266b736a9f44861fd68fa086cb7bc4b8fed91de457bdabb3c498b02f67a6ced49af9172e57179b88770798e86bb641d7597b407e46e794d7bd86e2171cf9172dc2f5cd680dc1f8d84ef162d5184f0a1736b5c5c4167fb6773488840b12107c4e7933dee35ad758cf6368938b13dfa7219e10d405003dd314444b535b9e12cb78b9a6cdf92d3a48091fc608badd10de7b82707447c0192add1493d5249218c8f97c4866ed27416054ed910c90f926c8fbee8f624cfe422506201aa2672a148164bd42421022b709cf6f0833e8f3f1ffb430b81737c1e6e12297b2d4ffa52f6bad71e73dc3b49df206e5a7579663b07c40fbbeb74c7e9abba404836667649df1f296d637d6daea66d13376d21214d04fe91fa91fa616be0876b73bf6b733f23b6cd35e969d2e326a981926ae3d7b206bc09ae8db9e0e17193e45e730e08ed6d90959f82c81e37b97e34d9376ce8fa91646bb86e93abd17d9edfe48688b103f7ecc0cbeedecb80d7223552cef1f22412e985f4189370f75d57fac9716001da97748eee35ace16700dcdde4117a88726e08b9c4c61b90aacd7d4bce80546d4e7780dbda4fae08ac0d281e217d5d5d74e100dc0335bf1e37edaef4dadd30aec6ccee1e7240fcb035237ed858cb266e3a81e101c0cbb74c02f0f8d32115e34bba46dcdc0e2fbdfbc4f6e0120f72417a0f96a1c5b3a968137f4420dbb3a9ac6bc43d83c5c38d007006d0eac145809c934ecc8e0f2fdfbefc5423ee02401999cfef894aff1e0c4f07af87edd994f7030eef412339bc078f98de834994c8645b808cf990319c8cdd9c32c6726ce598cab1940032f6f1906bcf8c5c6564acc90e196382c5c8980e190b40c672320693b19e1c8ee060e4861f60f4a07578182f72ce2f40b4f8c325dab4342179b5cb4b7620c1491267238614b667c4d6b4ef6c381876f748ccdd69b82bc775df8197cdbdf695b3416dd0c52669211d04200ae551be86dee043a17c9733f0507b1a5eca39ba2f9534add3bed469dd973aee394e6fc09a418a4dd29e7f61731fb90568cf692f0063a8626b5a48e82357448dd5353d4c8000144ae823c701089c7c484300a2421a8acf08f60efff611b2c908b690d06bce710f351e0913b921deb9079c7ce46e84744d12ab23f8200c1faa6648e97940f1f90ef8c6ef75c0b70e0d085bfb1c58480a062af4dd9fe8ca236170ce005cb2b52765efe55bbe94b5ec69af43aa76e9bbace3032840b24bda8b3b0352b573943e6ec83100015d6c6e977407b8cde1ece928a9b6a763dbdc77afe3875d8adc0d8de36888f01151a1e772dc5ae45ca4122f30d1c56ed165d8f2231337c9974cca333b7240fcb0493f6c92ee5c34c68371b15b8498d9a5255b622f37751adb7153aa80a8f42d7446490c199a1111000000006314000028100c8643c2f188502a68baf814000d7b944e7e6020cab324c8414821838c3104440440404460344c13c55a42bd0296b0b00087b2baf44f41ef5ea97d0ff4fd9b0a1d78efb4594b97c698f4ed937bb224fd94e108889131753d70a3d2e94da8d147471b24ab84c21985861f8955790bc72eee92f08321459ea78106f64212450d2a18188dfe58c249403d13a14abdabd2f75b3fa14cd6bf0b528f23bac3b1bbc7907893d2b67c88a45c0510fde8a3c9c3ceed86a3fffb85f6925d7ab622e605f9b75c98281bfd29a0722ff87fbf31b27802f00e2e5111aafd24d57eb7932f9fc875a6c79322f4e42d7b32c80526ba840371793aa85f3f4aa7f0b46525604098d0a502a0c7c0c2131b1206235320dec01d8ba4a7cc8318665fceb32a46a262268cd31d44aaca93e9ad22b3a3ae6d24437eb1971758ead6910444a0592f11c2dec95402e03b5d3c29bf03bca9c8e174f7f2c2985ef6394a449dabe42f489d542d35d1e450804e7de33a5715ec28910cf44999440285813e9db00f4a7a80c6343407dd22fa6b926aca2b03b929a087bbc8f63443888916b0c7aec4001d7baf2324e000e7547b4c47b8046ada2f7002ac66c3cfeb28c0b6b2d719893e61e70cc1e1ce9e83bc421d858fd140e2a70bd283d174f034bf6183800d00c4f13c0e890d3dbc19ff989c7f87554b224c69aef1a1e794e2499b8d697c3bb9b331ed8f4e8812ef1ed8361e46f95b6cbaae03b037c796cf19399c227e38a0246db34b52acd96f7b94a9685d1a143dc400da6bc42836a21cd44c842998bca36b8d7ee368bd5e7dde1472bce6a84a0b0e072f501c18b6dbdbaa95a7a4315ed95d0e5a01d417d2934c598b4e849f36062d967e3713c2646e7563e67b2003179091ffafc88acbc2c9e774c5d87ca24fc6fc6d6d44a801abd0448569c16c5aa73fddb49c5ab9bb2cf607a4f5b18c5e470ceac462d8550c89166b286e4ed550946cd3cd1a05f12bf6c980beaa3bce36521d7a02d036138c12a6df8dbd53ff255270131ed5fb1a5ba26575cba5bc77c16672f7b0c5be9f94068085afc595e478233c1e14f5d4dd8304587c39ef995592f9f1e10ca9a88f6583fdcc8cf9cea35124cfb94da22726ac621d2340f10da78d9554e2c82fb4194203c2e31b3cb23b2e97365eaa65ea36d3180c8047bb8d94693d662fd0afb07ac2c12bbe831bfeafeb9c68edc2a7e1e769c99cdabce0f430ad7c80b3118398636ec1c65de52008dd24e2610093f3ddeeef75162caeb0a6504ae2e0c52e0c99d4d5a0a1b5602fe643289cc401508115ce74051ed5a727e97dcb6fd3d754c6ed667743b83bf2335ba08cfde43eba7b9bd7f9b4c2ac67783c2559558a253ef8c7428ecb92019db6147a0bb38a4858f65b777550f7d495e06003f37a95855b9b6b6b885cc0237084aa540d5617cea0be31013d4dfe41a2fe72d0ea080d50eb566e3ad8ac65f1b27affac61c0b10e7e2301918db4bb5321863e7e09e09c05cca3d795bcc0ba25556ec94146c711e37271ae4fd79d62bff3246bafd64d73c66154bac1c6e61a7183010f5eba0040f51256c26eb908333420f89be6533c6b5e50694aa1e38521c12f021509be093ff2b21133d386e0d42df3cd6fc648c2159c7c2d91cc427ec6f0fee7374849b0886cefcfb6e007da0dca531d201d548590b55d8eb09dbd8e975f6b8fedad0bd7ce5336d04727292f426f6f4c412832657c853eb65c5b8e83825dac287fbb5f580b26f5a46ab12440963045f43d569b916081fc4a388da6584fad7ab2070d9f04d4783cef1b8955932ac7ae1e1abe483845d339152e2823682a01d1191fc9a377831ac20777d870cc938d79551c42325d14d113fe47a6bfd261e8209548cf65d2f3e15cc1e3a2974cfd35c41eb597e272f89d9a863f9c1368fa0b30f72268abed1258e4d47639921998545c5f78445421df9ba7d23953668881b1030f91a6296f41eb064c5d105a704f0b36ef45d269706d3cf53e2463ddbbcc6d9a84b92835fcbd041bd1dd484222706fbc838b406560bf83e2370496de75ce721b39c43d819017270781a36e46eee4ce1420af02dd68e5c14eca8f415fa0b220edf23f6a2d36957e4a275949d889ff7d0b61dcbadb6b16c64c405eb3ab996e4196f7032f9ec231f6b13c5ef5f37205b038e404bb9c48921ff2c241e8c8a48d0b79f8423b2df86fd27675fee91b85ba0bd6786e0486a3e80f051a3bbfeece5d8944b80dd0184d8caf316721871a3369906810b92b876e0be637e569164241c2d3792a3d18e4512dbd4aca7788285ef380268ee87ce554398e84f8ec6c1f12622a69d8941ac3a1fe5289a2a789164967b3aa2bb9acfc0c960d7dc070878791d6534268302f5c3399aecb98ad46b5878df74f1a723157d05ba114fd366dd216d8498ef2b21be672820b271c1d4180feb1c3766d3a244c99b880c1c9f6bc6f2efa941790867d6f80552cb68268131b205fc16d6f43739b711ef46500566d0c6eef0549c9984f818539b67ee39d1da5e8a5c07dd0cd024279490fb0fc669beae5a95aa94c2882a3aa534b47145e0b35678333ef422ed47f6f400b7e6bda64d3c9a0c4a7740ed516256f5cccf7ac70c17b0459d7af10b10d03b02a703b25e84d631d212e88d347d8006bc40654c2b81dde979867d4f0b15f21432df058b76b75ed78d336bfc236fbfa5b8ad8e9ed7a879d20ba6437789cbebcf2faafe89bfe5b7b1588949ec1a2c11d92e764af520b7e97d1e2737bb0af75ba789bfc3023964b71cca203fe8478307c465354e6b9093cd249324b4c1cab0604a4031eebc5b5a001ca1601f77486f10e414b5e06277d7437d8e6b9ee8c7eff04718ca76b3212a5111d3c1bc678dce947ea075b1e6eb5692993b0bdcf29f01b274a3d9eec288e5ada27e528783e0b98368648d2aae1d479e70665df16e8781deeacd13f890ec57f30c678f54f6cc0895b07145821d1bb7725cecb878bd2f7ea25105fbb187d99759a7b405e04abe534eb870dd51b54336854be47a1a2660fc7cafefbf3c5dded4c008eab5024c2975e0e95d334a643b6b3a672a13019f0ef8b928ca8b8f5672848c2ece5329d9d44a2ec083db0d83db8174066d3a7d77966473f9c5b01d924bc94965e1f92ffeba13cf49070f57728ff53a8a2a18fb5f02e9fbc3baef2164d6a185076d0253fa14dacb244f5255569b1261173928709afeeb027f7b71a382672668057c92438feee38f262b47d39eda9631e864cb03c12edc30ccb9cfc8302654932ea72f65df3299b34c0f9fb1554e879d84262cef7839c0fd08904ab42d7d0725448822704a25dbce923d805d06d97c0911721947e7d7a348e5010b52b987a9e6742aca16b0c95ea8ec32a8ff73e3602f2ced5b927e99541bebcf063411c8bb26e51a2db16e59c39f0b6504108961225e80f44aaacbb6d5ac8b1f3088408191329240dd18d8e9ebcfd3aaff8dbdcba7552257f7726c6a536309eb8a88107918bed50e3fd1e00396c4fd17fb700cc790bbef6b80782375ba79c971b3872de1e45fcd8b93d7384d093c3308a1804ed87a60f43d6b16302fb252113cd681f995ac333158ca960dd219281be31c25bee65b136446b978a6c36f482de5f2ce7d658200d55e6a08aeb9b4135e681e4ef2e8052ac3f4e54c5229f768a24a70f96539c194ddf511457d43038399e73475b86942973678759cb2515a3af91dea801385e198921f07b3761222fd5dffbb87a85273a6c2a5eedc8155da56416d0e606e539617fd6ee62d84e889ee2137726739d6fd69bcd77cdb7579b21ddb11446c487f57d1eec2a85f849692188d1d15e2c52c6309e8f73d6649e3c656cf82c8e8163ec16bf03ea1a82fc59871af15aff80f3051d96146c21d3c6df76e282b73c18de1868ab2a91db069a3aa8d02324b61dea329108dc120eaa84f00b9ff141a8909eeabd6b2d5cbde2d0d4a8cb02552ee30a7c5d74fbb00b62434bdbb1cc928abf82f7f6ea6712219c978dcb4afb59d3405e9ccf9e8d92d42772bdb19fd5a5ff6e4c09543b1ed179ed40b37ac2c4a2d03d87b0b03bdc7ef6126a7c5dd4c90e2f166c755df7180237f67a0d50229d590ea0ee2e4876cf243f29e1e1f21f125e272f32c27bf916fe581382f981fbf14f97eb40585732b3ae4f2dfdc67594ccaed8b789cc1ffcd21bc28438b726038918483fcae99ef4032546f21a83a9a4d15210471e227752b8482af58508bb9084ba34f256edaa0b09deec8fb01f39cf8688eec80c60ff2da94c063cb5dcd9a80eda0e8cf12346492fc84424b16f0fc4d842b2b66f9c92986e2e6324b6246a62956d6a666fb8d1a295ffe6990ecc5464d1b11515be315c99e1262a344d39022f8a8d5c95bb8cdeda099a66d53cce751b9e40142e8f2a6f2297a74a6d73784dcab584c134b169d74a5615cd05362251cca8162d935d68810376e27dc04339fc3921c6212f8bc43e486fc7f2b971dff51201ac4601013a437a62bd00197d0db02e199115ad583d4ba001f33c87bb661bfd2d73a46f84efc41f28e0cb3beb739d38685babf6620e90c614b02f36b79a39756bba126e449f019cc158902766a0f13803ed4733d07830a3c6e3340352045c4b786474acf6114354950ceaddef38403f71802d768cc54ca94bd001b31ef70806878337b49f1dfaa861cf888a67189832c56f67fcfa2cbf99e237e67e65b6df4dd442affc86e107317f249a2552cc11e95344eac922c11c91c6137f2543ea364412534855c2d26d0be4192d4fe266075ff0f6e208c23edc40ec9f7869661a47ce340fd40d91a63ef7810e7408e04544653ef68d7b53c98e44c09ee41927f146c8c2ed7e63732d4dafbbc28580100714d8cf73a1395820dbc7638139b020d89f78195d08dbda5b878ec55cc985713a58c88bd19cdea9f8f5f245e20434fa139ee338130d3d4660b63df72eecc0c0a08c0d9947bba9383bb219da4f05e85146c141f520ac3fb999e23f141f2c4ff930fcd6cfa9a8bd7b1254a599a3c7b9e6ae50cc1a14306813bdbbe24491400446c5749bd89ea86481389e6da8be809a05b4b0123bad1c20d6deb957405e508535cda0b710bbdbf61f08a5769727e1a43fe7ef27a7a22c13c46ce1c3e18f0f28da2c1b1c8671c13e2d880b1e301f994541f0f3aded5c005e58c7abf62b08a3bcbf83244b3a56a2e52ebe2ebe8abfec88cbfd2da806cc5de270336ef4cb92834c83aadbda9b2c058d0442444c213e1a7c1fc8b3eab136b556cd4f083a2150b7fdb3034dcc6bb425728e6bf5e4a499d6122f4991b9c3805615be54b1307478c7c4366dd1eee22b4647cfd602b805eeb07c1aa31fe1c2982a0efada82e57f9cf7b89dac6cff24f567cc05df61329f0b2d3c8a9073e8db227910b9033c73172994eab9885c8e742c5911a59b78b5a868cc36ba28ce0182a8441f6a024b1cb1f718e674ddae8985477659fbbae10ac3000e282a73c355b60a6b29c7201698b68c7ac5589c4d9ffb57544437ed757c3d4d334f13966dd9f0f535bd12fc2c130488bd8a01cc4b45a4d78328550118587a7af0251229a4f38ec0530136ca41309b9e5c571b8e2f55e513eeb2969d53b2e836485846daaadc032eb6fa7414112493fd6c4fbc2ed494ccaea6b52fdc8caaa6047720b8b6305f7242fcbf3df69b8ce63222f508a7619bd4deeec2c56c829978c1208690636f187b872affd23c2578a7fe35328e1e70317b1a98cfb38d7c1e1f097316b50ef60c21a6895ea3ceb8dc099a05320d23b2486c75ca5edaf10a28b40f53885125151ba9fb781fa1f5fb1be9d181347e1d1acbb1cc01aa54c916eecb245ef2957cdbdc6f544f3ed5351ba4c86b95cc53f483b9a70f82d2412e4a1aac73bc518879bfe98ac0708a9d637bd82fe0f946906f2f88da8d1b0c0f222490c38f0e934de4fed5d983cc6ddd94cf7923cd57de72fdffade9a04e92f51be4bac6f58e33fda26ad2bbf26efebbeb84e1455eef8abf83b8db54c7ec7d6e5cd79d674e1a213fc2d2fb3b5877ddd3db9fa03ef018ad93e28a3257ec240e0abd291d74004dea2f3f75fafec95b0f1ecce8589227f57fca64be8313596c540506ce70a7c28183579c62975daaeff05031e6841c933df187f014e6f05ad5b7482d439c8e08e343fad957214e16d5165fc876a0d0831bc51c0d3f03cf339d24f71defa756211a94e733fc4ac86e49e6f7f56de323517b03f8425dd2eed586033f4b59fa74a4ec6251e2dbda71ca3ef7b1e7b931a2babaedaa14a3ad0574abb8ad7d947eba36776e77a7335e6376a7c85c6c05cb728737e2958b741f1afee10784f791a0578baf653237ff8df762f53dc09ef25e88aa324d3ac40bdb96478dda1357909c2c6517cc3a25940551c56a90a389e31d9fbcb1f6ae0bdfb6a2009ccbb6dff65edf2bd8fdfb2170c6043513253ca0cecc12b13d25052f1850b46a07e2095a7d20ccbbd77f024428300b99bdc844cf0c26a34718104789b98940b80a831946bf6b8fbf205c702419c452c1149a0e6d7bb7bd14b33f4040ebb22398467d6889fed0152e5003edf4ec6fc4812abcdeaa56b7a316648069f1227278123927402f4d69e53fa2e02c351473ca5c1aa08d5a36864c612b47393d39ac8491052adaac782c2bb21987ef66b31ac049e9265b57466222678f672b6feb047edd18809dd44ab237dc9ae51fb263c825679f6e6864d1d25ac6ce8aa32739ce130b368984896f0a5ba0e4100ad559e5c98d7b7d4db90660b6f449af6b79cb5625c772169dee2075bc0cb0490ed22e79e1bf7c058621aa171b1a81a3b3da36df5b8b15d9d3ae4c305bc93fcb43e3c9b5343aab577ad469a0941800b9e62db6ba1afc70426fd6cb9a01f4caa4331cf5cc6316053d8d95b6878101f5b53ebde8dd438fb75980d0510f744aeefb0cfc181f2baacd591a9dc3ae9c85550df670c7acd629409152c643ef1ab9bf56c7efd814af7e69314030a7eb34d57739e5fc0a89f706c4cd59bb933019b683ead60dadaec8aea4c17ecbefcc1a452509f1edee434755f0f678153d86daac1df63e67f53e3072ae4e809358527b960d1c4eb42bca90e9f95c1a57f4e68b37843fa2af8ba9969f67e8ca260589c918bafae30e45c84f2af843f2b4429402aaff753b162995a8dcb6a3ab21442f55275298ddd3ce192746ab61afa06fb3455149748201fc815848ad51cde23019e26da9a8a12481943c17a1e9e35365c6ff0395411b78d12b70c9fae733350c77b8620d772be6daf120e1cf4ddcb0e0b45454744cbb945d575289d1839de9c2718f9ff6b7d160b4bd4e149a9795d2c5d86ca3fd7992d375b92d1ee58b462072064422b4e5133c497385260886aac4504e96870f0f1e52526adc99ed9f305f88cdce2202051f5bb8af6a61f84fe3753abd88e19fe94570a5cc42f43a51f332ede748f1d8a7fef6af70f9f66e6bbd347b8a64db88a961883dd09fda9806ac2f98889cccf73023ef03873f255546021de4951642615e2bab5f80cf7581ffe6465ded0a40f066213aab3731ea0b3ca96144794d5c99285106d56aad6b6dc4e3cf081325c9b5d32517704ef19595f622396d00baca3e918c0613b2d594ed90c782d2fc51d455291cbc555ab92915f51353168f375a6aff2170d7be1ccb3283a150b29f5b4be9b1a20856d2766da3518fa01c0b38b3edec0e3b5cac8d267ab21df1bce45234366c09700659dc526177bf62c9de0cc6bd7708546d371000ed0d4e0eb0241a69769416d0401c00654b300af17c27d4726def5992ee801d0c572f7ba6c2ce371f9a246a240974af383d6012e30d368f9e56eadaf84f526b0c54fb687be7fb327eab82923cf1ae86a687282d6785b45c2af2dce0aabcded6287fd57cd83506a7a91c06864a7070d85fe11589d1e90e98be0044fa325cdcb3a1fef061faf22c5ca3f837166bb4d81a709539ffe71070d984c4172404ab593d635c39a6c34377414c0421161cb28c854c6b2c25b9c3041d6a342eb66d98f23de03aa3aca389ea39af94214956666a9f189cce16cc151be8ea8c3e2cc5c130c60d2da465c0760d27d9957f5bed604d798b4a152174415ca87f8d63f375324d967a01cb392447511e50ee7ddf9eabc5e00de5d32530f7ddc950d7f89963dcdb07181be0398e57d4d3e010bb851e7e04817f215e150bf528bb21c448a47cf94f554868ce59d37a602ff3ebaad55fac4db07aa6ab56fdd9190ed678d2bc89e17934588eb9866eb87167d96e11b68f6bfac30a616c0f4c4c23675337df9c34467cae91c90015e95d3c23a30e99134bee7a6743bc80834280ac89013c50e31b19c2abbce5359a7d5dc2db9b4155f521d43226f48001f5e1463480c874f11e305b59effb34bd57a1ade4ed6d514129b70d29bea372da6c21ef3aabc5057dfba4cf3af3d968b4271ef2b4cec880964b9179e989b70cf084174faef8fb51db3f6aa1585124751d4498355f6a5a4feebbb4c783fa2a686734ba4a8838ca2c56ab6dd8e4bff0d1ce125e2e9ed92a778ba4d8463b2e80a54234ef3de90055a172177d04f2022452f01099eba3fb754f84c6e12f61c1f4780a815e9dd0ca813747ee098dd604c7896dacd8f9a1d9f479cf2499f69ca428e8e7fc5dea00ae214a1e514173e294de5c08e5e9b654940c7a9f0a01c7cdcc4bafe4cfa5e892708d88a34fddff5a3f9d46c18bd3d55d2cd359714f1e56eae64c7162e12b44bb777603b6cc99d48fe2579930d4c4190ac8c2e9247371b50d5eb2223fd1bde1b86396c437cb45a464918e342d1d91ae748f4ca9133a49245c240f33a51b59ca426944f6e6da53c2339e6cae870323bffd85f923e78e04783c348258c2261047ed587bd2661c936b4af5c6e24daa6d4bb719cd06fcc4979c869e24121822da3e38a42205a7a6ec089ed51637401e96ded16c7ba69e6630a0e74a6a0ee6b5eac270631a872533a740bc6d7f49a8947024594a69b01fc13666972d749d3fbeed8db42cf84f361d7f10dccd6c7b92cae63c10d9da83904dd25cfa19bff9fcf2383e7d3f57197036ad59104c489bc0a8b9900a423a419bdbf013dd0569933a4603b61efc38ee420ccf3257176f5effdc1c97687e479dc710cb35d3bc5a51e48a5141d38c808cb5ca956a4486658032946eade9fbb5ca1ae582427dcc950139116843c6ed67a68b39b7fa0421ab12f41ae886afc4fe9b1466bd23cf8596653b42d355d6c1865d88aa97c58f9630eeba8e906ad5aee1cb22caf3f3ffe47403ba2367e6e8e358c7a9a6d49666dd7964f36fa9e6a51c2bb483069996552c2419d2cac45a68907d38325dd3b8a6c30a1e9c75a949cc53f726270c287e8aba361927c93105b7fbc1bc2ad617c353dc09233498b2005ea1506b87a527c7dced0900346f8e3e455314bbe9a115b03824569ba96f164effcaae08d51654af98d20300b5ddf7c1d11d98050b5d677b7336128dadd9f504379328f66d23c30ed175c4976e1fc9789c4586579e39b4dfcec0814fd624a2a29e7c27d3848df72de18126b9ee75d28d3b548f6dbd78ce5e8c1144d20b0f358ed5a2a9a7ce13a0051d532fae539c2c9c9f7f4f3f28854018be273e6842c0117d576a05a1a34769b2c57014b1bcf60c90a99b454d4388ace5957a2f5ef8f4522fbbe783cc3e0bec31655fc686e8cc8d80fca97298e54251c4b3e5485ea98889b57f20d22a3c5576617ccebb2e6fa152002a83e650493a6a3212090871a00a5f8c5787e1c18140938ca32e14a29228ad801bfd4f9f359cc1e54fb8a9548a164a460e0a27954e4a053f1f9ca4e4153ad694ef69059e53daed800c8829958f78b2b40fcb7f1b3484e46d9a86494e8df8ed0ec33725f63c0b2afc0fc41a69733840ce0dd6a89f60e852050d71b7101ba759c74940bea6c43705bfc6c2baf6bd7120bd7fc77dbcba5712ee50c931f48dbbf1f73348c1515078b69b649b980b192547f8ff4eb9d61fae331a3d8fd5c7e2d50cd1ed64b1ad6ba1753c1792008b67273b499459bbe045b467f622e012f1e16ecb92cc7915b13ee428fa46262b136ef845142a02fa8c44edd966cfe6dc30f39d680962b15c7a86e3b5122a665070a2530082c54219b038e636d5f787d40c23db41cff3b40343d04561acccd44d99e85d86804e9b7ab77747f75cf8ff0355c9e58e58925ca4c941fdab90c7daae405be3f5f5c385d27f156b1bd6ee37a745dd3f2874e1566e351acc2b2bb7705bf0484c33a7476941bba236910921af260ca0c889572a3c508357bc244b762960a521847048ec3c725c0b7d4de5a814370272912f49831893dc2943fb8d38359611ec236e5aad599f03218ddd217547a193181576292782a3d91d5ee4331f6a2fbc1a20d79545f4433a2d5545cb389e1f68588a88ba1c07da439f78d92ef97a08bf5531c3d069c2c8c34e2c754d999dcc9091bd814fe3dc40dce68d5cbbd42f198e98e680b08c3f0c93e3c33bf070135a383e90c2bec60476fbc06667fda1e208782192100c399c097fa8dd9e2e215e2098953e4250deef717bdbabd49b17272d4064474216f58f4fbbd2288dd053fc0410593b6dc7287c26db9f3b6049c135467711423e0200adac1b01885a14933e069bdb6991166840787c9cf8624ecb6e8bef9bfa3f69f8f82899ddc1607a1b34fe9e041193293454d8137e9c527bcd932b120ecda00094f1fb7784d33c0eb1b71f322173539ab849e389a3ff674fb492ee68a37c8737b959555d112e139e83bd77bdb0fc1caa60c6d664fe624d25a18afd01097103e0a6b2c864f0e36f4adc0be425c744a18d187b3b564d5f16e64d634ca72cb0957559e3cce0c3b476ad13c0196e90a1c3f6164b24870bb2edd2f665bc0e1fc33e397eca5a70397626af7724e840ac25b787825515a30614e7cce2e2a68aadbbeb281e8d9830f75a7343906c92f16782eb2d9a3b4e1a103221c21300f20fb5a8d04f64030afdc4d011030a44a84db8cf8cc2a2bca75901cacae90508b10f996b9ac4d889b66ebdb724fd7fb77e2277fee247d837d104dabc1592d0ceb5b9c3f37c56e65c4f9cacb01551a8c700c8ab33c2f752e04cb9811783f5f3d43a5e4a45ed9aa5c82486c39cca9bc3d070f10137450c049c98d8300cfa883b5244127d4cec7bc5314845534d25a2081c2b3412d32ec56a923e2f4542a4cd0efa4de3ff71dba0c5e45cd2fc48c7c373573a15216f2a456dab4095088f01c2dc90794325277b928315be06f18fd40d245bcd446014344d75e7aa9d48bcf24820a5284471f2c5e641606e59fe10319c0dc19e66bdbc664aac3fee97fd2e8615c55866ad44e7208b80b0bc6dd96c567df9b345c9b37b9e082a80cd080a61963f6ff787d435898c06edbab3d030f685375060d8ab084f124b044823b15efdc922d2b75d09bc53781cb5712a2e4d0c105965151b6dd0e43f90e71c6ca1e7ff7b720602a0fc95c91b0853ff5ce756ad827e4d451bd4346f3be0545014aa9d051e08997ce8045b6f9a6e85027b0bbe8c32946ada42d72eefae5702323cf6ddade989ab8b10c3c1f937c15d1e0ce2e44700c5b6f975ec9e02085ba2ec44f7d23797c5fc54cc325a2a0b6b402106562706552db60d9ecda1c0549b4460a50064bbdef8f6e6567603ed3a8e2997ab84da3104db48b4e651337e0aae7a2e194694736385dac0565f9702b56ea631aee0014fe5251ccd9e5a6b58a8fc7845bbe75b7b1b3b642ec2647f0b15e202158baab97ab251d79ecd45e4bb25b4215954b9e36fe05754f8b0ee32b7c8cba9ba7a7955eeef45fd250b6a3ea928d49fbcfb5d2dedbcbdfcf3a1d963f82b96ca4f7fe9a5b8077b7952f99bb40b8901003e28caf437f8e4c5e4750a6515bf42370ba1757ea3d98eceb0bf982a2bb728db3b7a910dd83b53a6fe561b1a28009f053ed53ab7cf6f7f815746221770c3df05803545e028ba88e6acd67f04fa16d9f3517d074f6b7eee33398b7c1cf9b1cee7e988cfeba3211e45b44b5a346c7ba45dff17ccb1b78bef5d11399d38886472b1930689528514b6d721bd8b986920977a26ba6f0ced159b456456170026608e5ef9a26fd44651299ac43b7e1adb0b61c3091ecce180a5575b01ed5d27dac0123c3ff550351268198f9dc63df54e4a4044b9201f31ffd9e8d6aa56a1ed193ac29cd733e4e129aada4ae668c2f1ee9a7e8cc15f3c329b9d367dfeb39cdff32dec18aafbb541ecfbae6fcd215218d40c3091f2ddc8452017d206dd0c37fe1af15049b0cb76baaedfe8dc398283272cf4339119f228b63a89a344bc920f529ae9b12c0813fb49cd348add4b20cbe3061d2b00b39c33f0fb28ab590a8fff95682ebbbeb3b8d4e23e33350a8726478415f146a467f1cc6f6a33f488b89444ada89b789b2c29671c02b6b980428f4815dfc435ada2e66483e1039a9a9b0ba7d719ebe21ab6cc4436ec1b4924a0d7bb28f82e501d02186daa1e3871de92e7f312e520a34fdd4ef8dbce8e2bcd51e2a25f9a9fdf7fa7eac0d02c3ee17bfbada77ad23d6db212cc8e49499facbd50574390fa95605b480b599943e60570630c0040d91b5f4669eaa8a2b155acf51956795aa72257664802f5192a4b61661667e405d0f5c7ca552e9b1301c9915a30d0a3e73037c235b42817cd083c64464a8fd5bde921295d906d8845c736b73a31c559c5543ed705f7a6aa6c30a130017a88a530f7fbe53851afa3c54c9c3c02b5c315930b3f453f53b866e8fb3b9695b9099618da12bf1da1a69396b22cf3c5c07d204a5e0c3007bfb56a8a38b82228bde4a261c805cc191623c7cee01a96ee1538363b7f44de2af6a16ff2f00a8d464b26493210da4e42d8e0b80337948b9c722bdef702ebbf1d76bf0c157425074d99e00f40d5a896aec270bf9bef0c493f62f19121fab1a74f00574629cb856ed28c61754b77e0baa02790ebb0020d80dcf5fb1daf2c16d64af0e759d600744dc1177f8c67d4499bb5d37414242bb7d3664989096d42190bb5e9e88092bcaf21aafd13f038f5e348030a15cb2b76b60b055f782a7e9bf8a9efd530bb45324a12be7fc01165f812d21d65f33c536f44a3171182adf179e35dcd30e91a3b390235efdb92e6c9850eec7287fa4403f77eec1374365ab7cc9d63fd293ab362702ddf000012e6f9021a44b294c2a28d50462389c82c6227c9aa1eb548ff4fbc9a9612973f6071f5182f4964ec328a19c938f87d0b3928f1728979df0bd18845c6359ad0d18712d0f5e765c217b129e4fc4285433465c7b7a2bcc19694b76a8c99941b028fcf6c1f4932003280393dfd613ce094703fff3c75a130d4c4f124a9733fdc5a8735228c5d7dbb4bd5a69354c486a4e1e87358b1d04cf8e1d19549e40225c4b6e10b86765bbe2ab5a83b458db1e01f58f649f18f54d5a3421cd317b59a078670be3007485461fda7e29a6b179ced188119aeb0ebea391f680e41071e5c15200aecc08690ff1a63eaeec19908117be8bf0097180c7f790fdf8aacf01f7a99e59f2ee262045e643e696b8cb7a30c573bff85b199a10a8647c129946e62301a57c31e45f4040f362c45d889dd555e436422eca5ada4fc8da51011ebf7b3ab6bb456ec1e87a1d4c456baa80471185a36118653e224a992c96b61f84235412aee4586d0384316e7df63f06547e056dffb1e017e9f7f18275998ef5fe59396c802d14bcd719dbe828d3f495b6795f750a744f5f370db416f16fde92174209d2402d8fdf7ee329339d34d54ad579f70bcd507f1bc2714c889a3d2af43617cc5d99624de8b113968ec239e9751709a07fd5810309019cbaf9c65d04ffc6e0c2921350714680bd16d458c520be5ff2a055b4a2654849a48690f4455e012ccae26eebc20ad3fbb066c833dbed513ba912b018d048c073018712e68e8638005f5d47fa8df43319be2fd576fecc38c003ea4510d55d52dc1826c363fb020ca9ef47abafa240c3d9a13e0428290090f2c106e768d1b0a4c4a88e50f6cab69c8f2ada8489f7509ca9e91aeb1305066cd1709a2115e056995c59c71d274eeb02ca4616cc8035b49d2cebd42f5ad28e247970b305430d995cc74d6832cd007f40c88c74bd616620333383cad31e2833344e82af58e7b31bdd14ec652e9de6ca922a326ca647abefff1813124006eda1ae412e6b097bc171bce585144cca1a03a299a3372f7469d5bce26722406eb0276387dbf0274befbaf2825e7cceb2f4d2bdd68a0e228cca25cc2c835522f94b070eff0a87d1c3123bd3a800be1ebcdf408bf8c3b6a632323049a2880a83ae238eb87f3c895684e27774785170ea60c15bd4eaa78cf8511cd9ab38572c5230993fb12c5e20ede8330cf12ec686d509d02a7f8deaa98229b2c62db4d603763d22a3d19a57d34c0e8c0ff5e6856d24c106a914cc49b56a53a591126c16cf3474c8e2122f1e43902a3145dd6a3334d3b3e9d862293cd38d763eafba342e6c234320cf044a909dd46c4809c0a6b54ef3c530f2ed22740ba978c1b8087b4752c400129bced424efa5ede972fba72f7a242d2bca7111d1904c8e6ba9a02504e16de0792db45fe5b3b814b0bef9130e6e4061eb07c6378c0b090e13bef64e415a6ddc3bc47c89d9edde6baaabd3765ab3d94dd71192deded61421f3347996061dc0bbb6a9780b2cc5f524d117ed1c45f0bd2a81d51e8b359703d2011aa1f62a2e765c19a5815b70422010952ff94d69c6461e4ac78974ddd237b17385758855cf14f45f6f232b1e4abadae9cb6f3b8784329c71d7bf4d458b05b8bb8b8165e9749a532df00b588c43a09f6e6ceef668385a6176763ead4faf291b40838b9e260484c2962851e334676118698115d7b5611531aab867781d3222aa88e858a1024025f8bc0cb4da2c49308c47ce13ec5637f146a42021b3da762121a7f74a48e958e3e2e524a2a59e82fe2a7afd18570a27a263a0628caab0d3d9c14a8741c16a58ccdaee9e491bc4944e0e0243eeb8e0b28a0eb4c2fe270b2e6e939714035c94700be9b38d15d6f3626c7743688b659fa9a9ae608df912a7f338adcc4714bb8c1b9d75acca8b5842a3fbaffb6f1505ae54b1c6958fb06b327468813d4e8ca2b5a99a2ec0b4695c7ae38816c850a329da89ff32f2411d7e19c85d8ed47da295ad52f0af949747a4bbafbc82c586440a99e9fdae41c697e1edcbf8bc9870cee4628c5722c46ece4655aac8479d077cdd1110864bf7518454abcedf59138e7e9708eaa655a0783a74e895b69b7e514fa6dd462490b1ad9dea68b065a411ed6ade81a36c26b41c966618823c03f727b63ddd2a44824853e8a4e51d4fc6147b382c93b86ebd8c34e00afe055506ccc639f7ca17c2ad95d53f17acce4c85ae4ca34213333bf24571d0b57637b208dc0306075d721eaeafd1f32485b9482b52d9ef53cf20ac3c3af4a0909f0e22169118c842758caa8138c246c65f2738408949b962e6ea957deed77f94cd2b131d64436a7e80ceb3a99ac7354eaff568e8716e5c0f4ae13431c62290f91bed42a6f4dd848ed9fc931f84b9aef685a491447edb694ecce23c6d52e94f77b82a20677a5f8902226f7547eb7df923961dad5003e2f647caed8382847218a7a9503912d0ad25f9e5d04b1a7c8aa5ddca1a8c8f84fbe7ef8e61a6a2b00d95363c13f286d21a21b5becfd59b5e836c630385331049a1c3774f231731be5c7312da402259dc7f776dc72595e20d672a755b538eb34947f1ce29c5f9d47173bd584b1201df46077085ee03bce73c7d76615b2ae701111b6bb909fb607bcf602dc5c7e544bc656f6183fa1af5539c07bab87644e6298b0ac06befeca7090ae6ea6b582cd7595b23c18bdb94ff9754b98d923c9060f5062ed5d929b0523a87526ccf27c55633e9ffbb3664bf88e83420b4ba87986e71d3fe49d92242a8abf8a2f0c3044fd1bff06009b1f5868d8f7f3e9a7162330784e832b0f78cc7e945b5731c023dac5aadde0b4cd6ce899f8ae279bc6003c44d83e85f6ab61a8768c8246cf316aac57c47990b9233746d666e79dcd5d358240c1d9b804fbb99a4da7afd55e8b57da9f9df8041057e03f2001264abe6b52b3d93402b1342447e10e06a349ec8975b6163e608551af2c94e9ba99511797e39bbd6f792589e330a9d559768d830c2983bee85c9ca4c58ad7ca828d5d82e128f6a517991b38bd7fbc4c824c4fa628ce9c729640c1324d9acec64da4685d707269a0ce9d170f5c14e81663e189ffc657f3c57c3be5af9438d83d341a7727bd5f19c6ebd53c3c0c46730adc8ca99cc7d86947890bb55fd0a4a06910c7838a5d18c851852150ae7354f8362bec5b413b4cec108816c8a0b0eb594b49b99cafa930a4113f5f9d22f01e7b9e130b03cad53061149c4314f65e036de5d790c9128a89d78042ee350399e19d218d374c691f068329257c99187e378257d6e3ceaa65409ab70cd24cc946bb71b742387d1de255d2720272a257f7684debdc19269102556227165dfc153e734904f530548029992d00e99bbd9ad8982e16a41bd416c816eb41404025de82ae51475ebc95e214ee023278f171a0034d44b3aa5cf2a1de9df25a0a0d9b84752083aad63e41d86eb50eb1c4116907be23afcfb849cb6fb938abe1eee9298665a5a997411f7d857ce3f00ea9d8055e38d81edfa9de9e107ae0d86a214504724d1743aba5ab67cdbc2eb13305a82ef6caa4ee4d3efe89d66ff3a2eae509e654a5092d98e2d643fa2b5d0c3f937aaae34b82636c1fd6ad22b94a12f12f7c89169eafbbf5bb0612a09c71877db657764fb90fd0d5b7aaa7f2eb9bc9efe4b3ffd2f89ae56b6804329007bae2dc4de50ed5c1737ac040e61f8f3248c5d10c77148d8d50e61edbedc6da276456de5f25c89ad019a00eb2533dcb1c2ab5ad47e6d1c75c9ec140c89e09a6811159958205b6c5406780f50172763cb575a6d7d79b52f241a008b912dc8a535d81d290992bb26d822580356fa11d39a524d4eb2126701a0062b1e9603023cb52ab6569e22e2d5c1f50a409cc4c60130803b9b18d6e2637a6f1d80b06c75071e5b20030106efcd4320b3e7735c37709bc8b19035358074590cb45e5cef33c92c059b15805730ec868b0f4850ef3559f32f37d3f3224db3354fbb8e9f1a3263e29b8ec780df78752db03bf2192ab93c680eb158d221b28326150e641605ddf94f882fb892acae41b0efcd90a450b6c6fc1985b293759af35380fdcbcc946d980edbbc5c77c25da7d52793efdb4ca7b70ed4247a7f99dfd1ad31ea2682bfe82624ee55f48e04c8db36513b1d0093215408a16573cdd740778b00942ed8e3bf97e89e8b4c0420e22135ee9e611cbe69349eec6d70d5f556d0d4b21c15eb9acc1107b34180f8740a528b8ce8bf1c2a1248643f324dfd214ba3ccab919a0439cf174868659746cd9282f016f3485429a9e64f43f44a0e168113b9d7b4213c420bc504efc64b1b15dea314c065add3096915413f83367cc78288ab946bc1ccb4cce93df21d1a6a56f4e0cccdfd901a72bd62f35390570999dd117c4acd789649d0bb2ef4f95ddf882ddd4395858798f517b0fa20d27885fa81cb64f5c32f8e437b09dbfc30642e1883cac7b9fbaedac59a4e474799cc30025e2a3fbc10c9ef041151a94bd6b32ae79c04d513f551a173cb5e6446494f0d55914a929bf7386deaa7334a2400e1bdc1a4786c85143e1cafadee6bda1857f3be62ab9009969d7dc1c54881589ac64f181d68e3eb4b26b7f8e49e26cacd4d692abe3496fbe4fcb241e045ce61064e40c7d128823f5c61b849eb9c3a8e76815b604ba492a2efa1f3266ed9b5bb894c3ef46ffbc5866d58c9dfa94604004b5b8ee44d64d80b6d249b706000e40364343074e2abda74df6f115075f766cf6f4432d0f24f939385b00b6050de5738e091e1664496e3d1a6e15d8e410c35b5ad3b253bfd2eb64314a7c5ac9d61c9c2dc287a9965f8338317beed7a5d163d9053bf9054d941628677b31e23352955d648f8b69017bddaa3cd5a46d0262fdd16d4e5abd4871de57bf47db5aff3fceae1f19ffef420c9a877a6b038fec498b425d7deb3664bf85431d23fb9f159ace552841b9db3562a7b292c8bd30d349f1c5bb2a623a3c3d075905b1a0e515b42a0d31093c77b660ca0fb3425a16e9d5c6622a2d7003602691b50c7d2158d05a6893cd4f0da358afd6bf3b75d901032c8c22abab95696c39e142b01abfdc6b5c1f3bb4de5608554ffc5a06f2752cd5c3a7899e27d65e40a5fdc3ee565da7486a46c0878375ba8539947f4f42adf2cc20d4ef8c39d1458449c3b67955a7ebea29790f7aa0f6f049be95702883995bc3d445a871e84dad606550ede3dd9a6eb5bb973f05e3a93800693c8249ed19b6fbe295424965383a0d6d7c23cca1e6ddf80052e38faf646916f6f2ca95b8a9568530ccd0277e3c75b362305e99d717184143720e79653bf0f8c6a3a1b319e6c4586102af16e05909108176143803575db3ff6025d68fe0a47ce1d6a343c1790ad3eeaeb4d6f3fb090c9ea3c82f1d679873478c9c65b8c8bdc9f851d023425a535dc6a3577b9ef7d9227ada95da0dd67e4c812ae4a3eac6f6d61c98778bd7ef076af2275da14644c001df4b62ca7b8c5c80a9c524c71a6b6b8f4954dd5f0a5b79b0360761625364aa6c4b1f50597c34729b7bb7b03027b406045998ae72e549d1de3bd9dcd71f02547fd76b66fa77249df1e3598a69784e7abbdea04af5cd600be482ca3ce7324dd2318687087505e88348606404ea2a3048b9bff8fae93a9a08d44e51763ab8f54cdcbffe612b905b6a165ab87b140da451ab00f5b0571f799156d5e4f140b7f2d879fb8b7a44c0e073b2d7cc7b2e3f222473db09242eec5bf256d9064461dcb65096cc306cecb5a7f3aa88fc78e3da752f37b2800581013f95d8536760460a0c73bd2cacc0c041a9564bfaed1870369a8911d1bd68c5665418de562489ec4d7d5f9c9eb899af23f4d122b52c29538e6fb5e4c4717c46b921d47b4e9c2d927529eac2a160641074b8e059b8f8d82725dccd482ba52900f5a195a2ac0eaae52a17b1384018d2e84517714560f73c659449ecd83b3982c9714b2505d220d9b2e9940891a7d4f984d1b0a12440f81b00b2ccf3ac5485746840f9eaabafb61ddc71731f6e8289610936dd03673184405e817182128606986f5fd65b6c056d6fb29763675dfcf3d2728fe0094781660270f0765e147483d8ee0ef2209f80a3be784a2c88540180479c40add3fde6eb40ccfed117ff45a7a8b3bbb348a4cbb88cd9badb603325c7706092f6b561cfdfaa709d29132335bd18c6879771e5c35a9518665b387abedea6b97eb029505eec2f3b4eb803f4a5999ba7c39ae17b1e8b06f59e318ba7a79f55bf67f3e3af2f8fdfb3ac213868d9e9a17ca23060ff74cbdaa7405cef254b390679cc2d0d604547309538584f44da099d26643cdcb87ee9eb0afcedef5556031bfb6d74c0b28861e378cf3526e31ef288c7ee03758089a15f355e821b349c3505e150c42eb9fa2f70e39d7a3319f0bb04af88c897922159fb9e7994751dff0128e7173e1b377ee315dd6c1be66e3926dd65787332e091d3bd504e7c3356aa5cb454718dd563e5563da3db0cd68c59630a5d630c12cc509bce7c1af3f246c19d741eb2a80c1753e75d6b1233b7b1cde9ff6cd4b8b40b5e72f0eece39141881e581727b4b40667b4d345957c8f7622e2e00d9c8aaeb587342321e5180edc8bf26c075e73a306c3a4d5971100431961a6ace5af9974e17ec9748f02afd8c1f929aa859199466fecb8b13c54e278e4bac6ccdee05d799c24aea4fb43c5bf5d3ad02c0bf438909f6dafa620ccbd9685347b3a5c8540b011b41035428939f942f9336a32cc7969c3801aa9f37f0d52644333464be27d3ca30744e39812546ba9104f0c10af42ca6020fdf3b83e693335f5af7b4f8a6ac40433fb2a3f4338bafca7c0aa2cca5652f342fdf0f501a6f5c41874ac3317c8a3ab6d2cb56836c0d313eec741354b4e99ba6466e256431afd4f30bfacf87c19798d7da7ed40bfa9f3f963eb016482fe28322a5143ad000e130d4b5f1e025bd2b195ecb4254be15d5d1653e96087e4c89227976506842d09f15287b96690e480ce86b74224de30226332f9ac6c52e7cf77c351eb283119b066c52b0a9be35461e74bc0e29371bb31c9cee4f4b92832370e6ef4249329a61e025266f7a80580545f44548909ddd6fb8f9c87ac70e5645e7abf909402bcd00e430ba553d043b2acea9da0aaab53445023a50e5576c8253b83bb6565a40bd48decc621000b39c2d598108c6921e01b9b7a24d2763911cf1ee2ab12961d36b4058deecb716d1d05eed2edb7d4dccfa74dee2d6be215dbb5e289640ffac397d973da08ed7f852e5f1a598daaec6c7d3284e870966da0a3a2f07d64df4f28875d00c9fb9fc458ecd8cde9dda8beb643bccaaa5f7652566cb1cef85a1f735d0af2b0c7b665fe6ac9108a6dd50314656d19633855580f26f4e95d690c52604c5a8aed2a107da48d59e430558d0d3909f195009addad3f354e7e4de3bdf047abfeba9ebae816637f7bc4660ad69e6ef07ebd2b151d36521171d23dc32f34a7b4b8f5f3982e84572f9d2fb2dd2dd5a516f92047f8f19cd52c1e7f7e7536c203b42b1e3d097bdbf88efe0ca1ffd4512236ee0000e4ed0a15469f0d0319e192a36a59f85ef447c49b7b25f89a50d2098d4d0c9a55ea56c65d2189462ca653da83971d4d8af6332d1bae6e9c7f740b1c686eeb07e5cfd34cc98dfc1927cd13b048d2aa7c14c6bed4d4e84a88df5af94642bb81072797e2e7af2b1cbb27a77422dd053ebf23a05a302f36bea31678b40efb0008415c60f79aab18d5bc3486565769c146d53abd071940b5d22461a52ca5b86885475c93e295e72c0f991f4b94f29e0489a8c5316f2c2dd83cf9ab9ea83daf28a815bae465445480765e1501efa63b70d7788d661f44d1ab30b037034612e43d5891803951c929948cf39da80d2165e07a1e86bb2950c7dc2587236e97d9e845ca3c75bf65f4d1eafe81e689e93dfdd89f76ff6cac203934986c361a022e375739d40506868616823f3b52db4df8a6a809757326c129e2e220a90220c5da501c08047828e8512a8ebbb9519db59fe60006d68a438672aeaf00f60c4c89b6e3c61be237911f3eba0164e0ea0c7777fb9396ac5758050035cbfb988f8ce6077f3517f4f6637619bb72232970d3721687be3e6655da437c483ec2c3424d8069bfbead0bfd6cf4747ac7670864391b3a2d945e426d945e14e85a83c2ca5b756afa8b0b06e5c9fd651737bcc442472148bce74f4f502f65c8938010f426000b762c3b6f4f53cdebdbfdceb8d5de6c471a58d73a56e42b09c51caaa5f0f08a4170c26667ea42e124b1bf9fbe1856366313af06f16ba74521d0306bf8ebf413b211c69443a2245d38f9d739597766685f35a0992ed6a3f0608cacdd0968ae8080fe6c03f8570f82dfab36b23180ea729305328abff8debf7d711d42dc971e670a416beaf31a81d9e5194da096dcec79ad30a64b22ad2ee1716ff7166ec018da65e28befb573182d60baa98524ce9e721f0fe092aaa032c4e7072e5854f974c854d8b848e034598a56a22c61b0257366f1b68438c59fba2a6186f38f358a14f0740f51beb1b9400155ea42bc069b4dc7d7926921a180e57598c64fde6bc537710e432a44b75c879c5953be9d2bfb6c37b5b2e125cc4391072c4640fd4c352191cbcd46a56c8012720c931c8997332dd1f11da2aa61dd75e4540817225654a7d7be244735bc78b4212103ae7020232cc7e8512add35046ac3d542a58e2f62b858787673913c933e1c385c5a47aaa5b74335dd0b18361ff45d5e4b9a6071d299b5fd8ee70a94fc7ec4fe0486fb22dcee688b40c3986c004eae0f4521a283bd9395ac4781091b640d62f0814e38b121e550a8f1ec2542c37e758639d8a52e74b81f8ea134ed1b04585af06174d9a3c6e7fb5e36cb841ec6ae6096dc5364455484357265addb31c696c2e4fd6924aae44b9d1d617c996c73fc69f7e280cbc81fe2d50ff08a0909b3a11c2816f3771e7e69dcfb349a47a2cbf04c919cd17b4af4f36be91414490949da53f304d3b2baeb9673c7952464ac05cb99b065183c287cfc12860a92eb07e17523b3bd46b350f284c42a687b94e93a85ab71d13f74ee807a010d79fa7677f6c214b4d4ca20a0410a17dfb2324f8f3abb0ba8be6d3abd1060be782f212b9b00539fdd92b56722aee46cd9e03b90288b6cabb707106faf9daae43364b917c217356a72da2744b066e81e72028fef9338b9d00f28241380d8edd0035152d13f22167868a2ba973abe2bf022a830507e2d7179bf5dfea6e871845077c818ba9f85dbe3ba569a0b8510cad71f085fbe3c20a50ea59a90b423f6d405d8064feb983c781ece0d415beac3c2bd5a07b44c8722974905210147bb24a22de91d7c0193d63a66904f5ccb3478ccf91d181ec0470fcf15b06eebcfe704a931e30d123e3f866d3cae2f5ec3962c6f1ade9f624d8fd8c23a4da17137a997f4d393b001d3411544672051bdf7326d0355dfe50e6c2af19fa63f25854de5f54919ac748fb84235a660668654c44612a23b22cabc3ac9cd6e558637367d5d3ecdad6c7b4a610577a6bfc52842e11718879d7de23ca9064ac322c1905b4fac2d6eadea5c84ccfc9c57ef71210742aa01ee1bf1083d03fb8031ead544ff6a255f917c75af931b1b62aa7123452ba04a6c9f127c6d2834d0d1ea6da791d51aa0bb9daffb677918b54c94316aef362a3ff6b6e64924f5a003bee5f5d205207df300ca1e6c8126999034e221d96feaa97681418b533c45445a4501b39bb58240bb6c29c222c9bca500e0f3cdc00483798e83c635026bff57010636876dbc28939519f649098dcdc1cb35be9121d5e52e2a1608a168ab3da4dda786fe12bf6670d8f192d93c80ce1c3484bf3e82101533ab3457a492db1c5612b2bd18beb18902125e058be6a00c869d0789031eafdf9a3e66b69de2887ecfb61dd1f95ae27e657a332bd16d47198e6c5a0a1185664127afd4afd268ce09444ec83f450d374549300f6507639a1812104403c1dd8581c3785e91d9d6edd09715f58dfd4e5ea7b16b0536f1a29c3e42e62223b7f0e5e3a2dfe43f89887d6c90874c5327f2a0855029192f7f28cd1fdd849c914dba354508013b85eb454599119ffa057510ea099a0aaebfec2fd999b17d7e80956ab3d59505e28e58139f08835d5555e70a9e2ff8bbd1f093088523a2a4577fb6b3deb1cd76c0f14bd5bc02fd2b9031d462d71b2af0047113bb84c50791ac0beb3d3a598c3d1b2c2c1387683ea630ec61e8ed90fa0b5770dcf66756ff6a66068824821663ce74ffee859af47e9bc59b6590b6b619bebe2a71bec46f295d05e0f7f958eb739f5d783fcd3b34a27449b3967bfe1e6ba5a5f5e04c8b4630d2406c823805e5b652c9fdc92be256ac9ab6507b67651a53e02fc1da296833d2f2b0183c98112a145337c032f5e13dc48b271218e546cdc5e58301e88a66871c5ce3d46380af87f387f6aec18a5f7bb47d7502a077e30c4de7fb2ffa6ee684f3e47121bfb4eb3c601d1f3c69b76ba32918c108294a57b7f6a448ea65eb4f8e4cde478db550926171a748009aeb802dbd00ad93e44b04d15c981a99c06c1a2708ac66897307992f82212c63b9a0f048f74605511d702c0d624cbfc381ab9457492558f3df48476af5af822bde1c10756e52f392c1cf6fd6c971d017411321d55ae0d4fd68d63a89fb81010e65c05fe82a422f8c1a6a2ca22a7bfaf28550f3746e08aa5de94e7a799b2d975d2c080dd786ef72a1a2e2b2b3f4faa8029cbb271d9a9f59f542eb83068eb2eb240b94ebdf70e498c18025e5d94eb660e0c2d73de50d48775a9a7ac683ff512617dab6ca6ea136f6bf4eeb7c3ee2cb8904728a9f7d140893a7e9ebc7afe0251d3724d32bce545219a82c72eec39c90b6c67bf3bf8b907176af27c9bb242e5d040912986e1f37654507c2ee23eb353d0d4eff556656b06224d6f9b54e2cabaab5307514cbad8e06d5e7198eff662608121b4c2560366a4a5d1a915f6febe94b0fa2b08162a8f987a4b4bcecf6da1b5405fa6edb25fdc5eefffc62ac1264778a03ca5f1256440c92c3a7b37122f95600c381019ac0395308ab0b23cbc98eb701e1a52fe11a43f0abcbe639ba9a0c186e18c2c3d47c099067daa8a2448fbdf8d2d0727c8a52949c4a7022707253efbb397437021a6d5d1540c7df2dc5ca4157a604dfdd4daa88db34034e21cfae1fe7bf5b598d9da49b02911bee2c6ead56cb0b01854707b370dac985c6235c4f7105ebde43df9f18e87ba57151e197f7d711b484e74156a6ce05381c4181491d9ddbe6394622bd69536eb7fa3f703121c8a098e912a934995baa6250fe084ffdbcfe602221102a68ec0d84a028fe1fead321f5bc719cfc0f62f1991346418bbabb775f0d1f0102ac2593cba723837fb0a64455cce5324958ac3a17568394b312b7519a92cc8bc3430eae5c260df2717b60efe36313d978fcdeaf857f055f2db5dd08284886a20965cf5485af4819fcbde598b9fbb10255fbe00d6c3ec92c81147d9965139a57a6519dbe5d597efd275090d787102e3bc2851bb5a2492660c43572c8d3c7196ec1630de6409aa61c3e002133208b37de9951c9bf74ea0338ac96014b44c37ab12aebb2a9c95d6ba66888bb146472d4ac5e9618ff95d3ab48786584c1abc0a20e3f35daed72252adaa5aff2bc49ef07ab0348d429991529f8772868651c33b334933c2d3b0cac73f04ee1f38c7e1a83a30544f758f8bfbc702e079e3e9efe5dfaa8378942b89b3693fe8678b922c979cd6cbd52506b67b80166677901fe882b9e4c0cbda53169174725672bba56433123ec9564f0adc901def8582b5f19d7e8b1085746d254d1dfa762b0ee29b046cc690f01465caf8736c2c20c7ca23830426887ca8ab3fb2e605470ca74e51e9976589a9eb4a888f7a9a78c592c458f291ea637e97a74e8db1e2d07fbd3e6845626167b64d84c69b23d769104e2a9d5d6a5138a128f76dead64bab508fdbec4ba8d04a33b89143276267edbb3eae141867152c8b83d949024713ba86111a0aacdae7ab47fcf780cc924cfc9f669ce277cc1e3b067441b89bc637834126fcea62f86f1379a00e396ea02c8d734881958ba089d5674db5cf17b8949309435abf6ad0d9d2a4fc43d440713dd42866667d462e8e6075ad5e0dbd21a848ce4d991da2ebbb1b9490ae675d47595a89576b6e182db8069f759b96b2b5c229202cccae4a7d2d267f8f822ff0219c1e5eed6b5003d354a3f8af06217758b9c771bd9e239da9a94083c648ffb8e973d4e3be7188131253987af1ed592c6d14596f594f2eb6823d78c91c537a99bfee3eee5aa097e5fda0172fde38e5060827ab5cce46c2882f23db0b81b3f162b0458d89d05cd0a5f83107f20e15aa20131590dc85768df4ef77b546f7b60fb0bba7a34df79dc8adcfafb54b7d2fe952543636a7eb788651da8ac00d48cc14ad5425e22bb2b5fa6a8217352f39ac8988d7fee72b238e74b00d0b2d38a4225f2c5aa7479ef2d5d4231ee8e137c5953127d140ff53007c8cf65be5e78ecfdd55a68f5b624a3a292bd34f08f87f8a7a952d4e15fe1d62d89d18686d7d2a1fb247d6c689042f7dfd4b4c0b8832a12cd94b2c0a4d88e0b332e23d9b19aef3b6c423fd2b7845ca1d56c8d5c9cca32f6b9e8e020658f177705e5984d0e0fb0deaccd319a0821669087a41d82ca480b1ceb3278542563519de85604cca3ba1f27474f66b85c9b1a4cfea516099187477ebba698ceec95c1b7b1dbe44a6ccc8f9117721c808640169acd8cd6201a4a3c6d19b1602d848140c379c64215c3d5285bf244581e78c9033ccce979463e909028c3655bf537bf561eaf0ff9aee78ebb7a04b92f5a2ad653dcdf684c6261b3044e05bca6450117d2ca458dce14dbf28bb039aacf0fa34392d7817a8164c4681ce190039ab05010a68950dc5b27a83a25691241a41965fc730b8e6cce248c67c2193334ab07cb143bf2650d4ab51a7bb6f458aca5970cfdb37f34ea567775c1364e622a6b4978b895cf30e6730cba34b7ec4ab0c79a44bed56b5b169b1b0122ffa51d24f38e12f4d8c2bca74f857829f8166e08ece411766cd459cce1b00cff48634a9833e46d336732d723caa1404a27990953ec34a8efb89a98aa2b2c0d9cec0405fef8a57a98ada27236ca0f4ed4bccfb21a6137f0d245807c0da6f1f690c650fa781693feb353fe34bd9c8bf9f29c75fa4237b1014e125e1d02382ecfae4f7188f7c29055ab6b7661d7817014570fad92c20ff836597af983f7923cbb7fa55a361ba4a0369713a4ede72d2b830dae90f191e8eb52a490e955c51fbeacc8bb5f1e31176b8a37139a9cc8c8e217b2549d03ed3cb6b9b4f0a0daaabcb3a3a16bab973dde772c197be00c14ccc2edc255124e6880c41a66ce7c99c54008eef58bb17bbb1a1b6e52957f8bc2bfbddc10629a15ec56b909bf48d090d5ec497560b7374b7221133aa775f33889113903210a2fb585066f04a9de85f7108f95920d850062d1415f660243b931a23fb7ab08d45ce8bdafa246e986bf43d248e7a4db7c68b133b18017ed623d5e4f51c26862d44da54ba3385081bb92eec334ec0600cd796bc6a4b4670a92e7c7e2b3609f3894a8ab84c93624d2afdb1f4ebf075c3dabc2d2ab29d036fdd97f406038f80549302551a70c7a500f968ec6705e493825e45322d9c361122c1818c599ea417536d21088e7990728536ca0bc782c201c66dfe90f24109b74d94a89a343945bf529d2bcd42ffa05346686ddc2440c933911653322b69cc80872ffce3b0cc0812c2b79afdc134900e7970ab771e81ff1e8c39ef8222ed6c236c3c65d01fc5da4cef5899f194e48e263741094c27b1017bf25e651de78f227ef600da832ba6d318b5caada369254777743f3001b0201ec32396522d7a08bb5087fa2e8b2093e2fb60904dcf0e3c96d19b584838e1fa5697333cbea43953d13e9e08ac1c58f5bda335d0e7ad417c4877e5a58c8661d191a6cfe3b12ab0ea086bd775b8de43ca1ee2443333ce82bc66adb153b54450c1caf60186aef20297a08225863487ae3f42d3550bec2d14606c4a77cf1dc0fc3d36c560d6d8e8de5fa11a63a1abf35916b27773186e0714e9486d9b9c4c9aa60f6dc79e3ed2029e1a53ac143302c12d592b34782cb5f9c5e87a3bebad90b154610928d0fd066d50122db61006ddc3c983859d41b0f6de638a1067137cc1eecf1ff68a92f6a9272072887447793561e8489df1efa54cd2a3d31836d95066254d677b54838131bdaef0ac93ac773d2edaf0da1a2d4f7693f7b4a13016c28c3dd8e58fead1b20a9ec71dcd344b444e57cdad077092878a43d62485ed53b051ff7e4d687c44b0554bdf2e7d3ee9b482fda2d8bed41048ca54caa81c23df8293cc1b2b34d141e7578cf9c75a574a2e59ab76699b66bbf814cc42ca24ea2a4b11956fd83b7a06ce5882a90f05158aef1b3fe1280db2a23c2dee07b66cc5b13f76fa28a6e3741d2353f479712792f8dbf434d1f7303120d652c8a21c97268ec9060a17a35a38946de49b27d05c09a8c232e8c3918a727cc4557c0d289ee0d8dac1b128d6288290cfe7dab09460538a380ce503352ebeb9802f604affccc085b1438845839a15e0765c8267672d2b596013e20241c7b220611de362eb475f9c03cfcae4828edf76e8c5f8898179068692270ec784aeddb17eb41eac5e727249e98b720ef628d6ef02062746e249dd6bd4bcf2e8ecea51992821186f913e25c4f6bb46828384391e40799749ae1c21a9453bf780f8abef462f0d5f292c109bcebf92e7c0c9e095a43767fb7c3eb3ec54d91bb43c169cd03707b8f08ee7f5ea99e0b598fabf42076bcbabccf521644480607a45f440d765aedf4ead48eae247f509bfc70163b5c62a263c9fd618433a9aa3d230069636a6a9aeb68009563f86390d5e0214197a2edd4cba29c74277cb8ac8544f624de270570947cbee92ea9f5ae15102d9fce625dd026ec3453c140fa22f3296d23832eec1824fded3803a7efcf0c5efe9f8d8e3e738b6598fe882f83ffcbb94e71d5ba791877c125709e97791e271c2f31a2a1bfaf3e6e2a6e459e88ec6eb59a00ecb32850ee2058228fb5ceb740ff69ec4b87fc677ada9f9e7aa6b3b7b75640a15865be18fc67ad86989f692ce21cbbdcc600d5824f44f37b68bb9b71cbbd869c781c5446d6d96a90f085fe233292d1a81c343daafee08cc41233a4b18eb2c7a497b886d0b71851542416f705f156309840e6373d3f031506f1a435560d4a69f7ab2fab06166ef0f2ab8655c7f209bfc11c2418111be52bc5cc1970c34648139c1b68c86213d7a661b4a318c7d20baf40c3be1727b45c7be63e4cd58fa968d0e447d37122d778f4d5ddca31015b1b38b9846e834763c5f9877956d49ccda21495b0c2667d496f68f4da7e8657407e09303828afabf1eb4416938c1786c2af1559561103b86a82ed495c1a0eb8aa2da79fd12104a637b071f4c5dae4d01e871c74615c360def942dd84d186fe53dae8ab3ff8e1ddb731cc910008472ac1b0a63ef4fe5e827c9e7c3e5a302cf066bf67b1342821c5f40c7d479b1e2aa33336bc73c3f1c93029b20c8ef76c86cdcdd8daf2ad8dbb405c3a3d537ca0236551ce366688b5758a978bfe511023a4c6a7718c6b987214810c1c096a9bc75023679df7ddb7e58471338e3b065a43e9c4b917c0f12cd1ec661a6005508631ccaf1abeb93cf1b78c5790c29a00dad338b8000d59ab473df73729af20e5910c65d9b67c8e8f23fe3c04ef4a100e5dd07c7b6c594a4f252cf82332f94e11d955824b911517f4d254d7e0545cb03116a5becd0468b7a0b559046132afe1d83a22594a49e654b47c9e9db9916437db8552fe5f8a50b00256ca676d08e6df7f2d0d4dcb864a899cfe90ed78639f9abfacce9f3c5b14b9fa658a608cafe2ae44fbb5fbfd58e34de05642a28ef5c72a59750685e4c45925c4d5d489a5ebe0f7f2c3171824947541ef67709b18b5deb96255725c1bdebf9db0d17644f96a41a9caf651d5d92f6a080d07c4345b4df5249bdabb726d0fedd0764e52b688d9e139f4df2d87ec29f6176bcfd846a76f3e40c95f09a80e3c8cfa83eca76bf5ba7f913483eb8bcd456cba1c87120e038c0540345e2f5325128d765b30d99ed1b6d26560fa7ec5092c80051b1d1e4cf3d046a1a543650981042097b96754b61e9d390cad64412dfb2730136b0e9229fccc5ccd028f966dd1ee8edc9e94049e44857ea597aa8fd4889aac44115530d13c944a554d907a17873268b59efc11d993b24afb746c14a8a53dd129e2cd5e21aa66d9e1340b6494d54d0b11490c074e5a8cf1af45d63e94d9718759ed8dfdbc3bb30f138d758f9479bd5fa6d5b8ffec371b112a24a6a4467511bb797722b0ed6074fac8b25b549d8e7e3037b353eae6a906fca268a59e8e13fca5e2d3b247fff426ff2115ad91381020e1ca311cef08c750a92600ead4de1394386999424fc7706d4066e748a8f3dcf2f4325c3a059a4aaf420fc40e32e78920ab359a43c097ae09ddd0604c9745d6ec488bb4ea9a5f2af125fa43d1112fdb050afa71b207249f8ddd0deed9a2280fee381d1af0a64886828bbd25f7cede885dedd594d93696b1174fee8e503464c400aa7b0037db26a04aa08556156567c79036590711a81b13ad89a63f81e1b7b80e05aa97394346c4d4914ee8ce80798d3845add5d3b9201a99d2e61843519fbb587ba55c059057c05ab4d0867a7e28e36e6b40db20f55921410415c8550e8049a6b6124eb6bae506e2c1b722ce21edbfe9d9a908dba6fd3bf4fea8d63fc0a90cf3c95bc329de194c8d9bc3c2524b3d5c089dbe7614efe305f4235c8521b21db5449382ea4924fc63290d547501a065c68014c2a9a6aed8418d82846e573637a5b75addc61f0ee733c921d02c6f43e796475c023ea42d37b9fd280bf3f9e766aeba22955be5cc0e399ef5d4cc0fb0b4e77688b7ccd92b0974dba9a6dfd48b678b62882866a08747ae74873d1af67878e1cd274e7dc1a20a43d8962120e98c60db0789723c6115d519aea820ef71ebf90edcc430ab677ec3b06132a0ce3e8ca1380fda60ed6bb7d38dbcb6d9e581d5519d438369f07e418f8a82cfc56b31fd13f8be6018ddf9b3aa6634eaa6f27fd62c0e7a25a4560f11beeacce9003427e9872ea0aa708031f8ec3fa1ea47a75d574255664a062650f5e43df11c1412190bced4edb24255139538e2674dc5dcb500f2b51c506a070c548deb2097634649a0aa54b35351606042717c4f0c9456ca553b3c2db12d98e00f68f708dbc7878caad21ffff4dab736674b7fd03996929622646a20d57e6c8500907c5f6c45285ae63aa6315be301cadc3c69db3ba6ddcae8a8cf3740c797f8f9614e6735bd6cfc2a601127510b9b8dd9f1ca20f36d04873aafb761d13e21c2889901bda7c4c9d781ef1ce88d87f10ed2bb29bc8deab15df8205eb2e72ce05643a77779fe885264ed30b17daa7fb3ae491ba2114c48e73b2cc162324acdcb9d4db25e86995ebdd84e626b2e5dfc3432117b44afe6612c30023f93b6b2ed81a09bbee0940977cdd17286b645da5ed0896a94e28dfde071e3c513f4f1464aaeccb2b046b4760e2f450bbe1f69cb9fb887da5df88626ef9f71cc07b57709182d72a37f936e979361776bc0e880bfc2172a99790e06315e3680efb00f8cc3f3e8018d27399ec789ff33538f7fc88013c9c350690937c6d486d1c55375b984dd87e83c32f74e94bc7cd4e2e356d0dd30fa2b756de19a979a08b3e9a5742e9054efe061443c4932339be783f33846d10ac6640a5646cba5d7f5c97a6ae7f4a58083170f29ec3f393f0bc060a9cd4a2419ca8e7a37cb23ebeb7a17ac9c7271dbe35b2cd0c6c7e90f9562f90e236290a54b7f9a175700576c4cc1b2326198a7e06468d902fd3bcc2bcbf32693701456458c8e2b91cc5db19ec83fdce328c29a9b4142170c431906adff311c506cfeeb26a71d6b32f7e4c0bb37a1e610f26ab36916aaf158eabbe8a38ce3d95ff80f97928be21e81b4757094294f3e3c46d5288885c7fc978d783a16179e945a2a6eda76635902b11efe8f902a94b5214444c509cf790e2d9b791b635733f14d1a9c353cc0ad991ae24eaed10010672efea08db6b52d65a388b9947717e006da3e45a88570536e38dc6074ac019937373c6b6ed830389150a1ad38e9565ec3f3ca98bb05137f98fdc3452837a6a6a5fc1b89bdf855dbb32c168ecb91715e3313a241b188560e6daa241bd13702dd898c30ba326104b08fae7eab8ce390c263a91fc6c3b9ecc18db018c41fe4284ab9e9b9859bee138c60b40129c5aa965e6a4861d7ac7000b90aa3274c8d1eb79220d19e75939d773949907af1af3e0dfb62aa6b515239e5e6121b8565bb0497b6a89ca948a86b8882c238bdb5741b945e604fa45512537019578ddcb7df64d01bea59e4962d6f4e47668afcfdf8ed771e083bac1ac05bb14bee3261e88ee12316d64b11ad2c7ed5c75288640a5f70d577da7a15e8b62a3c8d3a4514d180e1d6769778b734a61e06f6c00dafe9ef2e85babe0911a5f2c4e0d297194dd78d281c41af7acdd00a19d912ab224db1a347e6f3566404933a6076241c67829971b500d13d38e1c0e5a85833ac49229b570e6de0e8c49bfef6c1df55e4a00785735896019f9430c3f2b064cff00d3cb19a1f6558942548b1a42d65946eaf0a7aac6b7da4a37ef54f533af6746aa324b4f2de26bda9d9c2091ace0c4c5560a7fd1f0656367d8a757e02248e89047178fe76297564f46728187846503595de61c3591d8a1e8cbd3aa57ce07891f1d07f44781131df6b83c3546aad808104fd9e7e7f0686f1848e2d32710d7f3818d4c70b091ad77d73c270bc4e756254d8b787de48955c211dbadce5d76ba422d0da25da26b25b1cd06724bb2bb693947519d584e15faad4b39b287fd917621aa72f92515bc4c977bc75a28d3fedf0a489d0cc03b79283d727b3322971d11b8737a560702558e0e03e05338fc922bd0b3d483728f2c2714840ab990327b6c9f65604b9f1e4c115f92e57ff134e61e47f424960200befe667efc0e9c2ec88cb4bd970acb8da5aaf21daebc17a2b87f5773cbb013c4a4b1a9b711ecb5e7b1f63b5afec477a1aefd8bc88b4428d66d4d400a640b6fe9433aab3909c1be8903d0a5167642313603d5019cdc014c33bb711f3310620580ad8584eeb651353a29c6535e795d80fcab43bc80e71452af65c0bb1d032668320a896759f95ece1e0b52fbf011e3f7a01116a9a3d455a91511324a7bb02faa86ed5672879838fb155528cd2b51dff22f7af7b4fde9b02ce4f46c0183f20eec85ff519342a24204f2393e5afba98d0064b27de40a009195ee1b38a0660003eb711fc66f09d9a25cfba456284aa8d69c29d0c9a7c39e6979dbf7d14c5f3ff3063b728d49514c9150b9f333367db672b86fd8deac5bb71f4a0bfabca6e455fddc154572bf6e270bbae7b4e1fa25d3081771526ad937a41bda67385f03f99700011b1aad623ebe54ff4d4bc1663a6c26a66c1ded3d9313ae8fbd272678e0261d28bd8645da7440f4a47825c03c8dc55c15cca26f52ef790fff5080b7f75ab4d2506dda97e9e2bb236ece174a4027def5ed5f3b20cc601818ad85d0b496925d0d325b8668294401e2257578d3259e8f33360b0cbd1f44ecd0daa156815f17d3070df6c5154fbde8aad03d5276dabc88b7a5516feb14e57082cdf8f1ed8d29f667db17fccd733d6e4ca37421705cbf658881630d4d68777cea06dcaa29ed65dbb47531fb968589e7798cae3c5a5ef921b7979ae6b6e57ce9479623f30e56880ccb32ed6c350c0c4e9e760f442879d8ecb662a431a5b29cde4dd4dfd7e098f86b6e9420bd32a23c0ad9e781c4dd3ef37cb3d944b640b8b6e2cf09bcfab2023fadaf71ce6578f85aa8f5823e1368bf0e292f3e4290b50db6174d898a575eda03027a7b5726421d84e53e833b9737ba1bab8745576b57c2451ea8a015c7c406d4097edae16dac1b4099f1afffe767b3cc54c22e909440604ec1a731f7209328f07d3bc0add5aba56500b3bb2124f5fc195976a60f4ff74c55f7c1ab6ef1e743000bf196f2f979dfa4d426a453cb2ecd981a9938125ec4efc9d01e9abf208e71801fc352b70cfe059a274bea21b0d910015be13ff8fb62bd85efa8639326269033e366d2f01593be1298f04d6bd406c63d6e1048fc604bc13e5d37916be87d08880e672c3902ee9416a030b9be6926854317cf47ec170a26702ea290093be18767587c8aad208801437f05648d3be4a58dab9b428682d6b4af204011b3457ffc19af78eca6de716e2e457c18e0f42eb99a0835a4c2993b69522070b6371f04af5ff7b07d2db8716a809fcd6a7a0c4153b110e9f7f98518eff327952dad178754e4dd8d5cf1f49938872f258e66b6d07d5e18698fb8427ea4eb0ce11cf5e0c991da64c375bde6eb0d4be2bcc0ead9ee674a519a86e6c62d94fa542e4826b422c1c1b5dee294e71d01407b0aca9f3790169089a42b8f1ef6633c780eeebc7ea5dbe64a1370c6418f1ac0b9eaf484bc318871a86a2468c019f285fe64430b6d21d01ac41dc50b81a079b30182ed651e181ef7524cff7661d981d543b2e55861ceb2c19d163ddae3ed50e55b18d0f04b09c3b37d791cfa7967ca5120a933c8a549d71dc5605a80d8bb100703558d2b6b397d1df110b7969beef2c0ccdbd8afe39ff28ac827b44617807a9a216a11f212419b41705102debde121a23a6c4d0c150bf691895a43f81d857751765cb74f97b3055ccb32df6b6560deaa62c670711ff4182284d214b8c6cf59b94d48c0cf2c5dd9cc1229381f52c9d8f6ad5ff4f445d53e23090cce78f49dc455650c9202001e0cfe4c675395c782000605210913232733e7f37f48f43ecc51dbb2f4adaefa9bd4267b5acdd97811f67f88c7b258a052c27e3087b645de8031972cb25766fae81e89278190f3a7374d4e74c8543a340d86b004632d8d274747a569aa29ede9aea7f0c5857aeae0d97fb4da8a6acc80b3c3e85b3534d4c3d09d508504f29cff0c50f05cc8ac25615da7dc0b765228c3fb0f20e3e2951694db7bf59e98569b2978042a906863496d2006a5c30e62e083c8ecd147fd6f57cf77addd60e757b82c2c48b251641704b4df9d48e78a3a7aee509d0d69e5ff9ea3fd5201e38e6d70cc27859447c8ce58000e05639683fcab3bee9f3176571dd05f6ace2d6f48cf883578411d69e6f146089291630fe48e9767b3e163c1f12013d02fcf395f9841466274b8f6cf02fa858e50f98078099f1989610bb4e3419809075e712a5dd4fe8a4915b8c32140b67c3a899bd76647d397235096314ff031def931592e1a08ee8df4cfe0fac67b323136d33b48130440241fe134609eaf80bdcc1d5393658a55676a6b51caf651da64b3d286572d3f7cbb81e99ee46f3beaf68c2ee70203c8fbf5e8dac165c81d7e541b80b9a9d0bcac2106bff5f02695e77d7094410c61d27a5c13a1d7815c02e594a346a5e7c746b897c5060b822564f8408b960e89f2b67881cb360e4ee2b0a4ecd554d045e3622651c17114d573ea70590018fea522b740b4c8058784820552d11fb6e2c8610588055d9cf6778988fe8193c10ebc36b5a5f0bb11a773018c5f5c89fd3bedbadb33336e7c44faa15805627937ed826dd9bb4ad90317f8c5d722ecc3f00e1ab8a3e4fa469a6cad5cf569fc82118571c52d372ca49a46f28c28a458193391a609e431bdfbabaefc4e16e147b46b4bc0eb5716a41b23d4fea4298542df8b82654378cddce00a4ece3905f709da5ed24f132ea2db5a3ac2773e174ae088ee1f5000eaea6cda2436a7794818e0f508ea10ffff79143f22d8b4add662bac32080c45797744b552cbd3818b9de2b1065abd7b87da16a032d334d7b2c63f8c9c9dbb0223b044de2d57933a04428978c724d9affd348a15067b1854f26bace62fd36f06d94cb9cdaddcbf897c8b0796d7450e840a298579a9738960f98a7a4da79b82660a0d2fb41b4bf156645bd29dd63c061d32e84e448d92e8c80e7f55f58b6882712a3b6011e478b1a1a01069c15a855b8cb20aa610953a15551704cfde633f7819513724320b40d12c25caab27c04d58ad60eb82db40b1b68611460b7d2f2b33857d0a078f50213a2ae6f8d47207d8233120da6520f9950ee0c4a1de5bbe53405c1393f84b151474018ac710eab8c369117fd27ae88b92052ba4afa52b091c36c516680522eefa8f2609be6d9f4d9031927024c38c8dff37d59a171637542f584188773e651e525dadbeb022742a2d1d9f8c99678493bf177509962538d82e13d6b876a41747bc2410415d37a2311e5cf8d69ea7d306d61e42c5e1e5307535c60deef26c96d143c95deefbe3284d16ab2a01e8da2131d0805be683decffa61854f6ec26b56787b2fe82af58e6784807e26cb3da3b8546d6361ac15039a8a918607f6051cbd6cc12c479538c2bec5293cdd78ef0918dfb57b11abd1fcd6442e89c21e86cee1fef2b2608acdb997fd7a55ea3cfd0562d84f81b5de073d7949e12b017eb4364fce814c36bac703a2dac34a9fb16222b974f32b200ce95a05839007f44f299930de0bc7b5b4bb086e64718891b5beb670b351f9b025960cb0b8213ccaee4680b2b26a76ea593f7d8d40a7541ef2e8e5cad5a8b475f09c136b394cdd7275f134eeefb3e7071c8179310bf5f619507c2bc001feada1bb76d2a7939af7320967113ef004574620d6b4f4f218190d8a7f8cf8d77a02575246e3ae188df87756af35caee677ccb1a43473f0d4c6e9fbf9fa9644085e3a51a371809a3923ac6727627030189e575d67294d09df7fdd76b6d813adb62beacf02f5fa562a3f6f28808f887d019c3c22c536ce4c93f3d5583c2315f5ffb1bde524d95eeb3d212bb21e221561238c15e2b8a998c52b37b734bba666a4e4b143d8ebb068e52aaea0c6c8ce10f673ff70bd26e3022b480366653fae30adbdf2e6d993294be12515b6f5c46c39427ff64d5fb51b16f62470721fc148d5a14d20d256eb8e301b06be092bd98c68cb0b3226567152575f06f00b46477c34eeb3108b58352e2988625632d5ddb1aa1849ea45a3235f952a954dc256fc8cf8d261e35eba97cc7e3d424510f90c6a54a435a857a30029b40ff61231442787ea06e1a32da8a702b663952dbe539679cb5e9acb1b4aa0282835e8c5fe213ecb3a200648df2e47b279f9bc20e36923812577afb1c1ce545160c5b8491ef672b112ac3524725b2a42f8031d3374bfe10d1cb5a98a259af9960574b8a1552a5b8ab4bbe2215bbc92b9828e31dda244a1f9612912bfc5d3993a6cd319fe730ead1dc2896b106f729ca2498e49ea3cf4972bdefa6dd6cc22029aa722ba5980413c8d3a758b5cce065162e5e92090fa10cbb83353ef679e1283c4c97d17c7d8cc64bbebef96e690f9028c7e521bd3f986c8c42f28d03fa1bee138eb2cbe407182abb62d3a3ed82841a98219cef8440e0db758a1c846a20a3e25c2dd6259f10a0c4f3cdb5172b35211b886ad77a9160f3a0db63239c1ea46cd2de2538b2d5f500171951f98fdf1a1165720d224c15318bb500e82dd4d154ae93237b73a0f1340453f5dd92ed44b4d01b65511f61f00f7f9f680b01c8e2532218d6eb3230d62ceca410f5e3d33adf8cfc580df82b1452ec45af1e6d57cda38ddbdf8a1d0903e3b610f0a7704964be01d13b0aaf168a3df9926292725ffae354552948a9c5cfeb09acaa1184112280c218bc263a243ca3511c81d659249455e97fc04c79821587fc0c5720f8f7a1c51d856bab14c98a7495a8ea36a248f6474065455419a1bdbc90a5f4369fb29ff4f20622b323076c311356f7a12c8bae0ff07606ab877aec686b6b6df90ea55ce80b8bb4b0e7875f4705d2ccb787a3267a67c4491fa20007cebc99490dc27eceda28482fbf0b074bad44821929505dbebe30abc4f11d74076d1038199c9bba7b58a96aa19ba2acffc730fd4237518f12a18d337f51c691f6d5776c9a286e7a8169eda0097df99ccd0fc05d84fccf3a20302eaaed37f03b53e528de00dca260bd9985a489bedb6aec0c192285d9ed17d04206d552c1d21f1d3fd691a6b162c5ca42822a346d25e08d022481e50a4992c068b46389111af9be2e33003b9638edab32f25e2a06c5a24e0d73d39b8f7116349384cab024a1e1408879f06e6288c11c41194fa87d308751f16d4dcc47001f2a65338307cb7aedbaa1933f8f41e8fb55abfa6af15f32105860059563c5f5e77ee979a03ea1c00dd697ee824a38b269ea8e088988147d5f4689b02cf9372b75dc0fcb7c7a4a89c6427867f9c980b4a6cc68e20455c821ca61b16fadb45e94fad66c09904ef5ea5051a29fe2b2283e92c23b06d30da16a292cd6ade44a80492fd7143c436a2c61894fe06b6fd6888c0b0393a2397b49d8f29b389d19796a64262a81992da1608cea688e3e01a6b8c4ea9765e4b2e8bc7c1882ea6830d637bd27b5a4b114d32d3112eab1d65fe34adda8be4112a84e9e555dbd32ca66998e3fcdc6fc5cd604a7f48b7feb41bd40d97202905cd18ae2de0075c0982c8e020d940001e430b4e303ba4863a7552020914d07a5cc1724f830df3198aa783b2b7a4e603e7ec08fa34b73e20318b4fb904603f18ab607a3280007009a287d19d01f1e4ad507163724c1ffef06237b4f2472333042c79f0ed24b7a93bdb7dc524a99a40cce0a910a340a75d6c25103e6532d1dba1a80e415902bcb27c0f50810ff8897e11fe04942295f2f9f0aa58bffd263af20eaaa8f45f26ef168f520e5ddf2e1e5ddfaa16b97770b08cebbb5e357f98745711f0ba4564721ba63f2f88f2cf27c80d309edd900778cdeadda2aa527c546105f1fb76a34d602c402aaaf02883f9991f9921f9e64eecc1d1aad56db922669b3198dbd5ca6917cd55f8de31095422a2b088878a4efa90ed065546191eaf0531de07e19692e2e2eb99502a2f216a90e70e5f70b9057698ef87d05015cd92ce3919499b5c5e5f5027a65171517162e2997d185c761f8ebbb38d17d7d972129235db4c47e4ba22e643992afead243632d2c2e58a8accc0094ba25089611e8a865c6320220efb93367d248266f5993341779cb1fb1bc25118b1c62195d98ac581bcb08cbdb8f5ae4ad42f3216f95a21ef25621e2216f957187bc9da8c7a8c2c3a288c59050ab66c37b546646351a8b1f9a368376b0988d34c567b76a3e3d3c2c765ab556ad556bd55ab556ad556bd55ab556ad558bc9bb456b056915a1b58416145a52b4b64080dfad2298bc5b412d14b45cd08a41eb86aead1dfc6e01bde4dddad1f5f30f8f495906e2ca3b0711f3ce423c1f7dde2d9dec2313e51ce41c59081909bae6287ee71ef98930cc7905baeefc3bdb10a26b38341215e99016d684421e2f63e88296df610c5c7e87375ebfc31de8fa3f780983421e5d5fee0f83fe333c1b5e0e6113bfc39dcbf33adc6d10b742dc1ef9d5b935ec8f072a5a31c50ebfbf043cfcfe15f4f0fb6150f43428f2b157a38b67c5145e7edb12c0fcb62b88f96d61e0e2b13470f10859d143d75f41b41a8d56d8989da15b8ddc6ac4ab7135ce56f0d044209422f8f01b65092d7ea34001f61b450a1108650b284541ba3e4a0d8f499913369ed0283856238ace6af4c1828f177cc8e0a3069f37f81ca9f0b132aac8c1caa822c7caa842082ba30a24ac8c2aa258198f4e8c684cca808286f45e8d7b35fa3cc17263092c37a0c072430a961b5b60b91186bd1a6b2ab51317a8d44e62a0523bb971b20395dac90f56631021ac237da2b383552465a48abc1a5d4d90ae1c5808201254513c6b0aab710a1973b541baeae31620005451b8dab01a5d6d389232f3a5ec25112c2f5dbc04c0bfbcbcbcbca878710cae171415151515b9785c3c2e1e178f48023108e24c9c89337126ce442011480412815670b07285159f159f159f159f159f9571655c1957c6952754dc20596eb0dc60b9c17283e5864a4da5a65253a9a9d4747d9713a4eb0d3226654d6842139ad084164bc4d50608e42d8a9c428f06a0d55b0ee199967a773da4ccf479808f037c90f06940e7c380ce670179773d31f2ee6cac46e9aab57272d0b56b22af3a14ac461e05e4cdd1747d6e87c7a42c0179733c109037d7e388bcad0fbdebec0079db1f06c8db02b13a825025b02bd8160696067ad7198acb01cae2c04434266545b49ad16cf4a1eb286fa47ed71dd41fa0769d3d5ec28adedd38a4779df9e8fa9b108f49d976a4b10eae819dd0d546905aabb621618ba2e4f736055df7868593566df342015a35207a57ba63ebf1f9d11b100dda76b61aafa0bb055d7fdf30e87acf70d9a0eb5f391020ef15bd115d1c1e93321d77c7e5e1dec37df813bbce58dea0ebb653e87a4bc0fa7d57a0eb5f1818c132da10a2ebdb9168d7d9aebbce769d591e2ea374d5dfd605f9b78d41ebb7bd91f2dbee40d7fdf60703c87b85a7ceeaacce746ac81c32d64293aefa2c7eb750f90d8095df328adf755644de2b7ab55aad562b140a8542a13a4f84a5773776e36ed12d37c89894d1e4ed1191b7c81079b360e4dd1222ef9623c8989409206f4f96b788ce9bf522ef5600f26e098205002c40b0ccb0c8b05c41c6a4ec0797d185cb18731959f26eb9f26ed12d69901526b598774bebf366a1e42da2770bcdd3bb8546eb531e7488d21eda437b680feda13da28b85f6f04819b97d5654df817cee18d57c2689469f49211727287348fef84144a4b7a4adc87bd6d0e91144c87442ca1021b54b8cf3384c5c42ca28215ffee3e87248c8850b0fdfb30128a50ccb2139441f06d402c80720b1a887cc43de21bb7862324c7ec92fe32bbbe4964c7b58b22b8bb985b69255328bec32a6e456ce7989f057489acf50549cb08cac15cb68f20a1a29b56a25247876024da811e391591ae9383c5d6ce032be8c2db48fe4751cee38ece279416dd76ed7a250a8eddaed5a140ab55dbb5d8b42a1b66bb76b51a891c6ba2d6f5c3b0e776337a64450291154c7e16eec460ca2465d4fa0e9544153ee38dcaad5d947f2eaacceea2ca6ebacdaa0556bd55a35966ed55ab556ad55d3f515f40a7a05751c7e05bd825e41af205d5946969165ec38cc32b28c2c23cba8abcf3ace673ef399cf7c563fef3d1b80b5c3ab71091a1367e2ecdaedda4f9c91c49927ce56635d8d4b54497319757d97d16574195dc6169aaedf426ba1b5d05a68f5694ffd97f1657c195d3c2e1e178f8bc7065b2c2a2a2aaa01385f04128144201148570caa5220095717e7892a0592707551c2cc9070fa33f34e1cb6a1f020b87c9303ffcecbb820b8ed49f7712a0f78382106d83e8e2d811794c0a3eebcacfb9b1cf5716a134360821b64dccb9b1cf471bc0e3a984209322e7b3ea09c73ceb751e999a514bd4a114b5104a59892a24a8aeefe362a1c78db7b9b7c19b3be0cfa32eccbb8bf01cf34b5fc66c8bc654c1a2b3dbbaff9efb8af3939e1f0d7a854b82695aaf46b4090daaf219164acc87bd358e9ed6b66d897b1226f3964c814477ad75417e5cfa0b1d2f56daea644acd836b08dda66192bf2de4c6c52689a699068cf7b1b32e448d7a4b8283fc5c5293f879b74089445ab09ad2a4a6bad4ff3ce4a465ffe5b15d5fece4ab6a21777a4129842bdfc93cdd28b3b520905be7c95e5367a7147021f672465378fa3177725d2cb0755d88dfb1e27f51ebd98f43823dfb1f28dc9d7a7afba8f33f2d484e2c719f96b37ce333d4eeabf9c6f7656f6e9c5dddfe07ca62f812892c719b96f37cefb4ca791c749bdc8dfe0e0b71be77d2691c749fde96f70bab71be7fd0d0eeabfbfc121f9d3e3a4def43738a7a7f76f70ea778f33f298244cf1ea2de6a7c2f716fe2221f616f351e189b7f03f85246f311f0c55dec25bcc2f85296fe1ff85a910f416dec25b788bf938dcc2f716b385bf0d53bc458b16fe38acc99dc1ab5f10abdf59c93ef06f4c7065df4b9c4d0ad9976f4c50927dbf4322035f3e68c1bf21f92fefac64dfcb7f0b7ef906e71b790f1479f927289c1c36539bfefb9d958ca6485f12791c4e85da288862fd0d0e47ed7b2f3f65c2dab6f9381f6ae46f70524f4b2f1f345181da3e91c7019f757283b3fdf638dcd3974f8242c54af538a52ff91b1cfba53741272b2959a9b2ea6f704a5fca39f0e3d8df5e7662f23738202be7c0f9bef43726e864ab4c8215aa927cb3b39291e41b9c912f9152f671c0e7fe0667e447728e5389c43d0ef8a9bfc1f11ef53738225ffa1b9cef53f771c027fd0d8e48ce31f309ea945360ce61caefe2fc5206bf9ce22de693fc71bcf7728e2eab5c9c7f83c3e15c738e9b716cce91c333e971487396363478f33dd145ca4c2d7f1ab1ebcf90429ac64aef6dc5902143b40c8fdb5e86fd99e2b099e594afe939b5f5c461ddddb0ca611cd779f23531e92b810edb4c20ea4472d8cd336c505aa4d3a9eb7a043bcce61936292d2300da33094997d4aa5535cfb021d1324cdab34949af68b8f6b7b99a35c346a56550edf9c406d42ae46bfe8c1528f2355f7e4e37eb8c3aa594522428dda2064274a91ed3b93947fd97f66db5b58814175da49fe23e051174dc209e4cd92ef451ea46447ad7d6de3b8162f49ee23b8bf7955779ffac5de13e47763a3dfe1827bcf22b7f83fff4393216e2e38fc1e2b9171fbf8aeb7364dff72a1fe37b95bfaf926f72dc1c43e55df986755f455dfe393295bf61dd3c2386eb593e0152a6d3f23a2d1964c937372ccf925d3947f67d8e8c7b29e37eabb82c65388b61ce0cf76b94b7a1cdd527392b2aa194b1087364f23b4109a98d93d01a01dcdee4690fb541d233e316803b1576f2fe76e63093f7cfdb45a3bc57493010fc5a3f182731b4cbcc157c1b32e1a24dfe855787cdf7bc49a2df1029ffefc9ef869e16ec6cfd0cf37fb8b3def2ff0bdacaa18dd5312e4efbf453c2cd44d6f33f4b18286fb3ac02b8491a65869c7e415142f049e19e0fba68936a0486f58834b900de70eaeab0fbf2855f28f09b4228b81a5a1ceef2fc874a1870be496871b888a33753b85f9bfe1fe54f5e156ed7aaf72ce93302fcfc2fdc04df9477d6ea744a697d39751ff5de0cef9b948c80ef462fbf02a83e673a3309bbfac1d8de02cd1eea32d91f17dde4b7fd21c2e4778eb626ae4de1eb2ddc37da66eaedc3bcf1e78d4194bc4115f94415eeaa494fbf02d83781a769525a954c7296f2559237489237389245320a3c59d0089b7dc290de944be1ae66d0fef41be2c76155ca5a2beda1b14a445dfe98e86b17240c0c32c6059b046d0619fbdebf1205d1d897e320eb1a7449cf904a713e36d91df37dba1bb9e85d0166961386f474e6a2cb6ffba1d1dabe750268df7f4a89e5ec38fcef413cc6656ac3ab118de1fc84f67713809bf68cf608a0f4c71804552adf62adb5de0fa2b16a240655a3203b33a23d4e77e4900d7e687f6a83e2d0beab11ad518d1c568f3c2665b26a4463462a10fca13150ba2ccd5516511f50d7fc63717c306cb645b03fdaeb91c3be125d396ed9457e3044da6337eb7eab8b29c48af1c1457f4a7b680f25022bd1ac19610c822ad5349a427ac758212d5b385b8ec8cca1389e73b118062f0596bcfa3265835a8756b928b30cab7c4d0d80320a24f8e84d92efff824a1ad3c931df6696ecb1031fad92811fca0905162e6472659c5ee87aa3a70f1afc1ada5c943d027857e0a3f79cbde5bcef8fa0b1b9e538835c87ef781a9b33f155e0660670cb7156edbd33073658f7edd4993baceb3be09e334c72d15fbee10b6e690e80986a2ece67812efabb1ce7cc1e615dd2b4fca1278c567a6390045aaab632805368723a3cf165ca86911863511469383134c22b2317f71452ab050942a36d20450edb2368f0c20fbd2ada276898c30df4ea0791c336c882384ca157442ed65dbfe0041d7ab5e71646b004bd1a5dac7f00efbbc721975d3084238dbfcb3fbf213ca0b9bc6f347e1187295a7e9e0cc0bd1a571408e0d4ab1117ad6a2b235d1f1544d22a105c44fa0112a57ca85c94128631ce279447be56237555ac57802b7e05c9133f9c298f7c7979e7ec1bfd3d29dc379a1444fb4cef1cedfd74ac1f17ebe6cf7ac2078a093ccbe45936583d2ed6ed594e3c8bc7c55a7a568d67edb85875469e353309598238cbe8b0915c0345122c3e1c36730d8b0f172bcb0f8795720dcb0f172b0b10876db98605888b3589dcaa51570d1412f896970eb3b9068a087c0d1449b8b0b4d015118885aac4849f70d82eb1fffae183fafaac1fe962ebebb370d838f9970f176bcfe6848a7ff570b1f2a46aa0fc8b878b75678890ac230721bae6e55f3b5c9c396cfb90214fe8d03530ff0a32920e83618212cfc3efe0c3612f74f0e17bf896203f1c8602fb16df220488c354b8f8d8b71c05994364fe8777d171518809889f79971a7702ff6237093ccc2dd94c0d45043e667b3964c810235db36da6862289972ebabef440842b2133218b4cb80a12b2b8085740421658b86a11b2fc08573e42161e42967187b0851603f3b27a05ada05ebac84b4fe516c742556262d11af245e430bab3e2399a4715f12203f894119f5d46bc925d324b6671f1b88c2e2fa38b13f8a485f6ca5bd43ff49ccd765412ab48caccb97a19262fc35fc648e9656cf6ae5e26267903f13456da7f868c157be669acf4c8cff841a654cadbc5cf88cd803d8d95be3fa37b192bf26eb15d6bbbccc3cd3448f4eb3dfa11b1f2325e5e06cbcb70bd0c9497a1e2659cb4b8acacbcbce4dd030b4bde3eb85c79c73c8d954641c9fbe567b0fc0c98a7b1d2d4d5e3629d41dfe5848bf5e46dae76f98868a12779efe0926990e8957f317a397a11e2b057de5bcbbb745e6a0e03e2f5f55f82386c268b473487fdf0c3091087c9c8bc28a4c8612e5cbc7451c5d77ff9e1b058de72c8cc8b415e881c068b7dfd171f0e6b91817811888b556c09451f2fa3c37800c08b45410edbaee9d777ed903252f3f02e1d0e5b09e2c5275cac400eeb61e5a58b3de070980f0178d1868bf5c761313e3ce1b09797179d70b1fa388c85e55d361c0693615eace1ea71d896435c2f5d847d7d97130edb35312fea04205c09225c11e262a52befe271d80e353bbc3873b1084575f27251a9b15095985c358a508a54149d14bd8a5c7291c30020ea701810e20e87cd883c1c2623fa50d5177b883f7e88444994e42df668f941e451e2e225ee78c55e2e2c58fc1675b05065d1870844634a64e9aed05d437c89bb60bcc95d427ce72e22be25aff88822ac850f3ce42dae8c0edb61c587c362f2d75ff9e13098bc02c4612fd9f4f5578438cce5ebaf0469f9fa2b478e63c508e692371449b4e4bd1264e5a5c32660ca7b05086591c0d358e92eef951f2ed6a7b1d22d6f7ae930576ec91b8a083c8d9566a1ca1b0a259e894d0aadfabde2c345555ee97e65a43125b2cf26902575c924a0df943718812ca9ebc57739892ca94b00bf92556a3e3d567c567c567c56fc8a0d951a8bc86113c86153bf831a045bb5f9d247fca59bac1ed5aa955ed2d86cd5babcc5cee715d4f960908527a744502f7dcad236e7ebbbaf2d3e4e9ec5abbee4abcbab40f9ead5bcc21a97b0a60b6b5ac29ab06625ac6111d6a8c29a92b04645e8da7be8399ba938f957e812d2e8b4cb77e10c1a2bfd0aa2bbd7b784af5acbd3b04508353a7916e10c1a27fae448772c5e15b218c2ac241c828ecb107674f7d4c64ab310d236d72735eaae68a66d48bae489922ef1519bcdb40d4a97fc605d42a4bb97a19acd66da46a5811c3683c6892e1952d336550749d110a399b6e9b4eaeb0c1aa05601d1ddcb5871349b691b50ab70d0705df2a387450fdd7da5d1695596420834dde53a9bd96f0024efbd27f5a63d411c56b34b7ea3a980b0285af941895a7cb88caf213dbaee4f5e0e1932c591c36a72976990e8925781e2d2f55d214af72ac218173bf11576efd27d4b285da4ddaf84d24516ddab7c0339ba1b020e8d75571362a4847c755f5f15765f12764f85280fd5b34a2c16eb356b45b35e15bac857f725a1e862f7b4e7ebf843aa14173aa57be9eaf2664202d1295dbe80eb9dd3915e7e0338a9fc6a06208b75d4ca5b7c15b7ca5bfc91bc415cdaae296fd155422352c2bdba82aecf0a378d62b3669b0524f16fd488b38deb6e7723cdd45e660de0f4247fa2357e501ea98dc8fb0790b7aa88ec58af58b1e3af0285c81beb507c957e41127a3400410d021ebacb3bc786ee9e0b374e107d84b638c74787dde1e9f1d1f84763cc8253d3dc7b3a4518bf748cf3ee7ed7190d02b85d46169791c65e41b995025efbdb65a4dd8e59116e59f4e18ed19bf618b5f80a7b977187cf3c7cab874ff1e1c1ef7ae0af0c78c57ce75345fe01df3be025122fbd6f40e784ae0ba811c4092136ecd113baee4ef4d8c01dfeeebddfc21a04d8f79e86f801f63d26448d27f5a93db4e6a1a3c10ef5b03a4b3031021cc51ca44b0ad1243fd455dfab1bd55a6b35fab9f7496ad0cfbcc598fb386f17f7858bf7c1dae330d457afb586c38e9c47d770d896f596ab517d94785475741c2635fd60a0723572f1e8f4245daeaadf5ff23b85a642af304179360889f69f09537f9b289e3376a8768f7a1cd6e09fb36a640476472fdcd2444e6819a031c5fa26a108a4585f15ce9270ee442148fdb1435b104deb8c62cabd7f21fe3aab3317eb9e9ae4fd2b026bfc24db438984db04558f1ce61903a2919d75dc0703850a31f73df7e1882751e35c756a05bf7ed56102ac46f54803790917a39883de92b623ab97d61c8685843f7744d3a642babea409955c7c6ea4a2aefa18834e7afb5573f804e2df5e5ebddd280b7a4b5a350a72b17e9d0555dfe1f56b90ca07d8a3f2d0f5bd529d23036414860c81625689645e6631c08a808541598ea60278711b6eb891bb51086ede0703c70174da78bb8f08bad37d09f0befb12e0fd12d4e5406817d29d0f060e42656eb500ee6a54ab94e29e137ba569cff56514c02dd7a751006faeef356b6b1f86f1c0f328aeb3fa0b3cb903589fe5ef71005dfecc47b888848b2e738dfc182e7adef529a5f4a54a455ffe0b47c24a17a532c6114848295fe41889048d7cc7584e17528a1208d15b55e78dc19c249952e5fb07a34201044f53ccefe26f4700453008d46f308b2ece17f1446590ba26c8bd74518635e093f00d40a909a04afdc6b191bfff3436925f640caa4839fa3b81e1bed1e07bb8278c937cd2cb37e56830bc31f1306148ff82ee148ddf4b398cf4f3799833529348ffc120e5162075427b93f48529176756cd7711d70753b47f05e7cf1e7a620c0750ba58e553d78605704b212984a1476f501f2125919e27dfb04085119461d2403780febbb6618373ced86c1c11e308176790233d3b3dff0887c5f8eac3c02362789e100e937a0b63b80b4f1909fbf70f42c242ff989c49c2370fda3f46ce28e1bb45fbbbe40c0526ccfcd66739b3440f12b6e2fd5d5848988af757214329931f9601294eb93bed54fb934818138f9230d5fb9b24ac64c6031346c250ef3fe5cccd8499ef225ff31122a1db00457ecb31868bf345321249cc99394b293167a60e05e6ccdc01979833b3c66ccd67c26193c7332061f305367366f6b03c3067a60d37d2f36fe6ccf4f9913c9f98303a7366feeccc998963c2cc5fcd522779fb049a302f90b049043975b8d83367e60e1b73660a4d189ff9608d1d3d3c9c09d9c6d4e1b039e44490b0290529ee9833739c30f377cc99e983093ce6cc24e2020f3d7f3e3167e68f9f39338b70cc990964c200cd199a0933ffc713db07600afd7328a79e3fe67cf943cf0f3f749d15282a06500484a6a6fee9b74f17790f45fe14ee1c7da21a1401f37687b1fd4dff829ac2edbac6f4f54fe1c6d1a69fb4132170744dfd21ea833fa5206146c8390e79bfcadbb5c97c5538a790e2fc9270c261ae418af3a78fc905eee74fa23923270cf7f3691ce6d99b90e21cc9db35e953d3c7f799e6d77f21f2f3276d6aff39b548defea7dffee0694af1f42f4ea6bc43a04d3fc1f7b6537e2184c34093102ece2f85db4ba0ab76839e73a0cda83386c33020791c8184ad5a7e4e9d4a1eb21c18903cb410530abd1022c607ace7eb89433b9ef30467e65c3a72c3933f86ae4f7c4af79294d2049e4cd9773cf94d7aadfdd899ddb13c50b0b5c6fdf87c4f227d29d0a23289440a55b70939b0e10ca89cca368328b83cb74783f3673f974ff9270683aae71e8c61ad54f9c6883142312a1014baef71a18c8911c57f1508623c7f7e7e7cfe90dcdd4ba49329347fb00b30857a4947444a547f7a4e157a3e4039aabed66ede1814c91b54a950590473ad59211ac3180455aa7f9fa191a848079d3225a2a3fbf8f8f8f8f8f8f84c8d6770ef6d61f75c280367a6533f7fa8eb4ea039f4cd9f5a6dd26a6d7b29859c6d410e6d381b792aac5ad22d3cbdf75b38896a3d3eced3737fb66334bb5f379fd6ad90d0468584509f0029dba6d09c41a7bce790bedfdd9368c8778ce688f4fda7313a82348649cf71df85395074bccf43747fd322eaa33d9227bd0efed26fdf2740cabecc4afdf639b2cc4a6d1f8394fa1b924cfa548e51faedb77c83b31bc984aa1017659d91be27eac2b5e630a9022d900dc23d7713121212da3caaefb55bb86fa180ad51476974ac334a34d2b1ea28f994901d92fbee88bc1ca9238d79d90a955c914cf24ca1c9f3f0f0f0d8a1517b5588c6aa500daa40f72b0fc5f8f4a72bc4613364cc217ae46598ea30d3227fbfd61c368d527f0a89903af59e4828f5482853e1d41d1ec109b448884730d34242a970ea91b0d231a434eaba9fa244d475fffe5694aab3f0fefd6694f8366929f55bca0a09cd28f90d4c2d62858458239fa2d599c3547fbfea38ace4efd71d2256deb4a6efa646fa620c82a7973476b242345647eaba8f31087adeafc223bcaca353faed754c1e8f8c3ce97364797bd2c7d89e54ca22c811a3349263e01b932c82528eacf45d9823f5259ed768ccfb4bf2f7678d465d6e44632425dd7b1fa37bcff45da6b318dd93e49bd277d98da8ebb246fe638d90482feb58c71a4481a8501defbdf7e5a640a437fdf63a3adf974ed4c79015b24242425286bf12253a653a521c0ebbef348c4150a5fa1745ee77cc765185cc191209f4fd0a072973f5ed1145105dd3b71ee9fb4e73a399a63bba04a2c293e9ef2f4163a5bfef81b94363dbdf9f3df77df4164aaf81f5a58ef7dd6f49c36f7a1d1dd26f256c6ba651c859fedb4b190e598e9f01f5711641a62f02fcf5278e2d64390e592e648bee7379feb878eff4b400d6f1e2dcc9fdf0c3933074520f63e48bbacd58d6d849465f9ef40b7727d8eb1ee3e2c50b62bc3d97f7fd4a6daee1165e02506b696a0d4359f57d9a7196e10b172948ad0d3cf93265bb90d328c0fa96343f94f7dea9821acf9da104937098cca140a59fcb5984b984090529b4d7fb78fb09e4b0d9a367108fcd9d71ee7098a4020976b49bdc8168f7cdfa945eb24950c0459785208d49f008c42eba10bd57f0640a25b9e853091a9bb2df13684f1d2a1aab08f9f367ced153bb164025a48c943e9bd0fe33e4dbb7435a6a044c9912d4e55f33b8f1acd5e959e03e67fb1877db9ecb37dddfdcccc22f65b2a663a48cbfd08b1d248c468af4a5a0a9e82261b8f47b45cb6721675228a184dd2795c899939584d9cf73e6a78884712f5fe2d49c114235675e9ccc19171366cab0c817fd4fa5e989a6727a2946bee60b21c320c7c0e30034128817b2a0e9bf983372c26cc9057905cd22650c205f3f2416d24083069a33d0d068cc4053061a32d000a119038d1868c240534403069a2fd07881e6074d1768b840b3051a221a2dd06481060b343e68ae4063051a2968469a03d01880a60034048891325e656da3a4a331855e4a1f04af143fc64556bd5db4bf0b159a784219788cc1f33ce9424a59a5fccb85524a29a77451becb6c735d48088a1e7ace5e86544a39238247e9cf27c9779e149f41d65700c2b8efc9ebb01313f025b899bcfb07037c0fbfa4bf997efb609868b43d820208bef018930d83a0ca480aa1bc7f3002d3c7aa2cab07d5d64a29a535949a527b376a652da8ad95526a2da536db5a73d44a37f1d6ea30fa574711c93f18fec1b0b5febdf7de7befbd9789147d4932a52de73a5a0e9942ce48394858f772a64e98364898f7f2a5fcb9063983278cff4c0369c24c34c89a4d11a80117dd8fb86c0387ca7df865aee1dea240ab40fbefb00352f4f7ea304ba0fda97f9d730453d2a1246568c897db4c187f3dc50db9dfc29da3b7d780c3b8fcb43e57b73047df50d6197516dd3ad0eab09d4383fcabc39cce49034fa6ec985b49b76eb5da30c55dfed508fc53ca18a73f3ce9304a6d0d81766a2bb5344b17a7145e7ef5f974fecdf43bc09c74da392718ec86b98ec3dee6912ee9b35da9e2cec4e10b026defdd609c56846b0ba4e8c3d8d4811e2334047627ee64024e9210bad9ed6edb76b76debb6d3457ddfe6d44bf841d34682e7c91c21b1251f0c6afa60d83799c0d2b7c5aa95a94d453109fc94c907a34e18f7d3b672b65a29d6506aab6d7dd9ff3e18b7d6cdc423a936938a6b35d956b37eaaf358f3a32972966668dad1d0f44ab1ca7975b5f66d08e6b5db0c05c5745aeddd30d779a4afd4c925fc10334dd774efc9044aea25fbd614134369131405d405dadf2b99400e3ce1d9c9db4ed4a5e50e5aee1f8ee0b6992cd23312ca130989389a090d491fc6de5784a7b6cd6ed78a78f66e15a6faaddf51ff7c4ae9dc07e37e25a1252425245ad18928049ecab3219d92d65abaffc2ef774451892ae4c6f9519f7476a7745ab56f5ff516436314052e108ac1d06cc675f63d132ef8687f4fcee95e2db6b6eb3ed3a9c6f8a05d6ab51a1b6adbad52dcf0bed177cb92e4b98862f715e1a0cd5aca2bb18c711113a369f5ba9f5ff2ba98b301d7e45893445e8be952feddfaf7f2b76bf1e4535ed48deb40299cd2c5a1a67ba9fbafe6bcb8df3e18f8a5c33a9c6bae77afea83c17939057a8dfb86704db3b09da8e8fd8a48a526ec5a2964ed7b249ff55acd6bd687e4252e586b2b9e9c5d55c044beaa8905341d91621da93949b15a9216b08fb1a72e17bd0bff837fc796fbaf94da14f0687f6f3aadf662aee36acc4727a9640231fd481e78da408a5ae9981a5304aadeebba0f867dbb8553bab0beef9d501725624552f6e5a7ba11aea8c8c320474848a289908b18eaf2ef4a3134e661902e7f3f031b5c0e242f72121b02b15ecefeec2c4f690e43434352ca5cee250a9598743237abed466dbd76b3db76b10f13ff09103c5cf830677e20b23e7dd08554fae0bed28d86d856eaf3aa9470963773b35b817dfa11e19a56c7aa6ce5cc571ff887f6f7ff39e3524818ff200ec49f66b7f65227f222a779cdc7d1e917ee46aa175f4b2bddf60783ce2fd99fd6ceb61358775827a5102d65904f4ae9434b07c263d8077ae2311a90ba8a30cd07ff8040aaa01712874639c33b72a847d3a88bc6fcc7850b9a4a05fa8f1c9a73ce39e79c9346633e84691b0dc4a04af5a24887627668acee5097ffcececece0efda13f54cea19fa19fa19f21366070eeecececcc1d95d779dc6ff966997db04363f587d2a11dcfab1c86b82114d05c508b81f6dfd4c8de98f5a83f345655e010ad4375a8caa10ed5a17a86ca06edb6894aab34eda70ce0ad626c81e67d34d8e9b4dabbc1406f235dea437da80fe92b51ea438c8bfe312fa8cb9ff441e1c20501bc8fa62b99c21469c4cd7634405d74ba976ce8e2a27726d062123d51a9b6ee9fe4b08a3d05ca1af70dc142d3a73e35206c1e8afe4ea91376a747f28ea0310d50973fee467fac011aa337a4cb7f07d2e807b408da371f9f8dfed85c69a63e4200492eba8fbdf6a794d9fcab82174e004bec922ffc9401ed3fa989c6a6ef4b1406b4ff94aefa9786557b944443aabd4aa2dccddad2f7a64b77eb7447acbe095e96833efe6dbbdbd7ef0038dbfc167a59006b75d12938e1c043536aad957ea521c618fc7ebfaef5a4ab8ca952400c03d0fd4506f30abd5543584dca4bd0fb5ede2b2e97e91768979682c1edde94942ab18f27533607a4fdbd15d01829f689a798b709d1d8297b0f75f983189b40b0a452e5eff15181dea31a42c094a9c2299b52f0f7232dfd8484531fb8e3b0ee77e85d9dd0eeef430ec3ef16631054a9fe456d471ae366a31d6db5d4de991377e622877f72595692af00dc77a60f50b9993fb8bd6a13faada6fd69dea2de84a61436a1d926640270fede8428a51c10e79c0f4fa6e4d85e76ba23b11040faee9120e5ee9120aa91349d23cb91b90e75f077a14ef792ba3c1a7a528032a491b6a1fabe9449b983cd9132bc55dab76b1c5d750ffafe942efb5de64e19b02eae035877a1946d384fd9c2bed34929955f89cb341c4f5b7fc35eb72c83ea9bebdf6ba390d54b91a0740d574851c2ec11bd556450e46bce9ca84c7a77de484d4ec9571579493121827a895c0075724161e004b69c32009a58400d984a2e938cd22796667ca4956f03244f8564e3752c3c0e745c4a4783c32dae0378cbd803db0db70f5cfb17047685f64a7f56154a952f2a0297affa5e9ddf7dd58994b1ef8ea369bd1bf5816a9331fa977ebd59d28d5a4a33a97a9823d52a39c9712a95898974f97b1d494a99694bf66b8ecdd4fa47ab715fab8b340587f7d69be773e166e285cf4aabb2a602e300d6b943d3d89f13b2b196357d378fdeed5e5993b5a26a6f7892c672dc2dcce151d20d91d8c921c385aeb1a11abfa8736445702f634e6d73c870a16de80e53572d3f22ac6f9c5d35b61fc355698c9aa76c51aba6384f3d6d0e1a4745ccb06f83f594affa1fa5b474ff664bab0dcf24313839e9f297a70cb82a074a193ae7e0c9940dd67adf6d48da4a6a2bdea4586f5c072492c324f5e69c73ce39e794211329da921c269d446952522359035fefb8386b689f3a4d90d2453dd08474f9a300c76056c160aa450ea4e537040b1c0e04040450fe76a05a74e349189023a55cf439bfd65a2b89037f5379ccfef62a17371dfb267899cd396a872b576bae5ee516ca94c3304002559544d255ba88df561278d261568ab53a6c7740fbcf29c5faf4650d81c35ccb1c3aa711bcdc0265f5445056efc4ebccc984f1df767ad5f24587c99f52864ad1bb53bb0a3d7fbf3c08ed17ffc99c0102d4be91fc81c0404cf99a786e37bc165056cf65a73813728ee3388ee338c66c78248c5ff8e3900992a40199342a6d5230a69eada9e48731a5f8de7a246550b8bea4a39d55a38bf1bd76568dee4b9c69b8c63e1de37bef538c9f55047d7f7a3f9c5946684cfaa949ef754e52290f5aa3426a4fb5b1559e99ce15eb1be9ca841452edcc0e8923c66f875cb4237e9cedd8834aedbde3a733aa5e82c66a0f3b847a3b3a6cce9589eaab4125930aac223485a5f0034f2523d70e0dd91e1c67e2aa92919408c909ccddbfa0339c9a0bb7e4116e2534dd6f871cd6a3e48edcd415b924f774c18bbadd9db7065dfab71add5b83260e5d4b7c8c04e58d4195ea5f66239ae7cfe67124f9615caad306c1a01f0c9ced0e5275a2a34be4df72ad516b549e25babc71299b545f02bf9c2dfeeef3cf1e2eac01a2eca8d42bd756510f3a45230200104000e3140030381c1088c562d1601a867124eb0014001079a4506e6a2129629253c81840002160000000000c000000203100eeb29872b23493f8b32ced966237f01a1781e19044480a3396c0f645f6d83f9ae0161cd91681a1d1544eeb20af2229b087a3b72308ecc9e87aaa08ee689dd9730e7fe43f0fb8356067a9628cb61098a84358bb861ab0e7ff00e08c01db5dc265d65e085e2966070035c4cd189887d0aa308d65241efc859e903606936719989610bb07a3a21c752188c1d5437de14ff16c57c62562087e34df16647fcb804d37fa8741641eb82aad5ffe56263d30bba1d138e7e7f76fafcadd66daf0ef50b0487d943e68ee51d26cdd3beff5712a30953fe454df9d6f434cfc3f7c023437e0212815b528a98e86384146a05e7ccc37852d2492de921db10e43e4f7bdd669b3e7227586794e32f8c5f59649bb9048101ee62b8cfdcdacbce9287c003d7a18ac0df76010a7d108ebff330261f906515d1be2e61fdec261a5bf979f5801cd0495e9dd1b9648ddc33a97763bc7ad06e5b7bb2602db77df84b19d760e7ec2cc9c4367a942abed7673167abf7d976695af44b20740a02e4e852a3db7190cbc185ec1333f7c2193986b5b3ce550a2733f885fcef1dbc35b5e46c2d88c14a2443272afecd47a8e8a3422ec4ac8b203fe2a5a03b3f63ba364eb63a3faa0fdc2c74ae0af228fffee6a9aee909c9ab785ffe8b46afdbe42c6f14b4a03f3627dde143bba625b54d6beecfe9dc8db578aa4d697bc1352d768062a6479367d8955b76a1e8335478865f5a2bb22ea4e01ec81d45b935ea63177ff051def7d84d68f56fc0c162101fbab6e2e1af115c02cb1e34b0e29066c025b17fa1bda389ef687bf1902f9db862413ef5e96e3d1d3a50ec1eed7f5659ceb86048530b487b6ecf7a80f528b39f3f86e48d5182b6d9967e81c70f420406930b04536b4c6ec6a794cd4148dc2ffc081790ebfcf90b12ddf1bc3547b78350bedf32d8231c8d61bd788fa043f74bb13299a21f166cfcce8d88f6f433583fe9ec7b14219acffaa1dda44b2358f0b250412c1328ff6a7309017a28ae762801efe98ea4b89483cdfbb2c465cb4dfbde2986ed2006343186e290ab024fc9ee0c662d8c4cae74206fbfd7cbc129882c281b0707a80721f117c5c36098a2bb53c0f71a7a4a751cffc8859428f80be4a43d717241004499ddf11aa0f8b01a5ae14bba0043e1028d3750dcfe6227e1bd61704216a6de3bb2793ff044e0f2ea4dae3274ec655f40a4e4834af27f3e1af6081d8df0e6de63a0f69f5b13e26f14e7ed356ed189ac3ce6609c5a7a6cc047e21806724326d8242f365412daa8706c5d028188184fdb35f03f39b41265b85ca37241ef414d85ff3b1e0562301913555602d0587d20d623f03ca857325f2052d1cec1448464a631c448344dbe1835e191499bd22d31e0048ed12db11803cf13344daabb54fa0e9dd3c9368e4f46283c2286d59887ffd5ff67ac0df325ee01ad462c5023efe764cdc634cd9e466efe90162d8a4a41d04e90183923aa10cdc5900fedeba7094d08c4aac80c5de79505482fb2a0326e752be337ce0ce25bf4edbe891edae56951d7d4b212522d791e72d9276e4e2a727d0cf049af649a7bb1c999a2d770125d4dd7991938195dc2b8719295d3e3aa1c9b61212cf355448e78f2bcb9b2e9fa4c42a562b1649a768429aca43c76dbdb9e3df08166efa29fe6cd0c2472e90bf82e5ed216a4174ea665a7a84804467ceddc9030e84279de962ae14ee653bf4476e07a6b47fa2f33bf0b76ab1a648ff9db6e979a24b561ed4dc0a1c673c838a80d41ba75402fb21b69e44688ae98817a905c5431623794b664383c26685ff4ac11f7cad85a77d6f76e82e0baef1f5508a2736577c5f44fa20ae4a6009c1d250a26d1241fa92ff055faea9da53df048d8eba9f71c5c1338265b93c5c18dcbf9c5864ae6459a0e6956f8fb3e6705be7de0020d63189ebdc2d6d2578e0d1844448cf91ba2835b032ecb469470511ea71834dacf4054d48ae693f064a24253ee866e8fbaea4209aa43709db8a2e4f9ef7434fe4d50f8e7430700cfb53aac17a652ff0698441355e998e5cecec474037a6cde3ceb821b0df8cdf700fc8b9608a836fbb5c33383c9d9c680c8009c1210b914d2f98577abc9ea658d1c1ab25934a256b33f54e0c78ef5cb49b86f654d63aa2aa0cb3fb8f4c00d92974a38ba01eb344a0c4176d6686c2999fec3361834a66dbd965018fd9775738b710facde63171518d1e7e4f2df0294c54b60efc763c4aca53e71002146dd4adc528b7e78e9b5da54a8064861d2b3475504720d3ac479c8b8a7a01c47336a79d39f4c8e52b8c990da8eb784b3c61373d2f22e21f49b3ab6c0d0c302e3f00ff3676d2a7b3f8f016f178e66fe2d111535d4a0fdbda5fa705e9a101dbecefce01726d1045ac14bc720bef32850159956081025a618243f2ffeaaca7a2568dd50eb4632b508da3021fb020a083846d1c4bcfca28e8e722b603a08d87b8c1880e5614ea74064775094c4c5c4efb9cddc36062f60960d88605d295fba936f61fcfe941b3041ee2a4e813500d65f68a26fa74c8afbe8317890604b2dcce51b1fad86856e4dab732d08c0d54f0f62d756c0ee454a4683fbf4fcfdc104f8e20c23a0bbccbb4803aa20b7b99498a1dee6d2d14d525070dde8cc8211d9cc79c39f134b365313b7059334e2c8365eedce8cefd364a488e4c76eefeede95a619a387bbdca3049eef0914ab2a9444bdfc5563e8b93f0df1f85652d0451d3392aefaae5cfe2b9d978eb494be10961694595f9a7a667d66e6adba1f7201567260fda135f71dac0663b550f00cd241ad3d48ef21c79532fb4d4a44a76cba58c950a2a8ead866f3454477e69555789a6fc8d61ebc639f002fb1d4ea7d2088477a5a20b9751189f835001f022e4619ac5dbc0bb34574e11b05b1e65d7a7dda36551c53aff5ddda7c5a34f8c509914e51fc693658c14fffd2af255b069969b5c3b650022206d241700d12ce312e5a0688ffd8d5859d67c8d79ec5167f02a7d642d3db1297f7a5714d7090ad0bcd8fe64ba79c8bf50c9e6710d812e073aeca35dc44e31880fa5c53f7ce07849141883ae28620ee513c752cb78834277e6308934e76029b59e524f1ea689d1ec45ead8be99e9133ad8624bbb6c911ccbc6fac06c941d2732975f12a09719919427ed145c0e04d1f70ee8dc54f77d50a1d45ef2d903ede1e2086ae202dc4ce03e1454e6df87c9385653c536dae154c3cccaa10d0ec01c10ff6c6f50975a17047bfe3e7503aa3adea7bf8083751f4c2787977557d4d0725bb9a1b700fc2dabf53e9bc65d42d4638c2e9619372a46d0b1977cb00fe54984cc2ae8db1a12eeb0f5a40805af76a8ad7282b316a1a72efa949db25757851e1c5103b4820dc6fb57f95ea2abfbb28e1432aa85a817ab89b8ffd8949475bd745ddc4f3fd4e33a7de6eb1cbc8f92f4208419b8daf782767ff0d06add6c33f1ac107fe0df5c555c8b314d9d3efd227c05698eb87d48ae004b725fafd137722e1b5c7bdfa584feb0a6067c8badda671e48db06faccbb62a1f6901a7654bb57a567c12fa6d6d086229065db97b99388d2cdc4a75d465fd6b7f69a5a70c5b79d5f250ed2a49e73583e0b427faa93a71ad7b05941df2ec90ec902f5d88841a4e4885f870651c261a37b06613a005152976924a5b7daec0eada8464826c1da8203f80c40e80c3906379703f9f2ac14fed7b49c86721f9795243d1c4856e031a75d4896390ecc7fde3a24f37916709c16ca532b08625b67fa980d7071bd301e72f3cc903b65f2b6f914067f107b94f2bd6105c88d2f57e2354375d9948eb6bcd18ce703a6a0f4fc5d6b9170dbedd18a73b008dde1158fddd050c5afd5bc13661b4ecbe97592f23b198f95816fcb2cac6c2843d2b29a08db7efcfd5b450e7925dfdbe36842c33f2f8e48d2ac3f9e130fadc6aad552bacae74bee3e2f2471535a1e806f4f443fa1f68fa941a3cf4add3bea2b40fabd49e5880f2dd7cb911cea15125fb90e677ac907c2982fef99f0977857fd4f117e6540b57aa7c37e022ed04bc520674d31233d79b023bc5e6e8698254bfdd1fa5b64fb9596596a90ec1a1bedadadafefeda3a904a5ad4a165b490a48c2fccf7b220ad24ea25d5fa1ff65830bb136f11ceefbcf0d2ae83e388eb9b169f0da285d4457e8ec5bd1dd5d2f8cc0f6b1500295698a54b2a7e25fb1aafa26a0a9e8e3d39db421a3fb9df4337d9e83312ecb1d3de9fda8aea9102f2673974e5fd1d0075e1f07c2927147707601eb8d86fda14dcab53f00e749a44631faf58256add3197e19c0f2c03ebd922f81903752fd970805f39dbc06f38c60727f756538489532b6568566b54a1ebbdc42221120e4219c8e45cae5da6179cff669e57a83acdfbd2871d176a985bef5d0ce355d9f79caa41033413c76076e23954e7c5cb830dd85b82360bcbc2635864b82e94771e7aaec64a88369fa6a9aaab98bd6ad14958c6803179a8a4f38b57293cfaa9526238317947ceb6b425c11139ffab16f3eae35a0266b1f5c300f9b4fdc6a304ca6de1e66a7d6ff9f86f6ab0768533eb0a042fb4368af6b943db363177ccd0e7e1dabff3dd66195599d422658747a883b110bea08cd4e37b98e48131d51c7b86dfc1272b5e515c9cfb8420b4659b5a785647eacc5a96c0d44478de39c75e439e46fda85a461c8af89c60c76c67afd2c7d62c3430b4b1f399d9293cc9e3c9cadf17fc4cd4713a676eb1ab4ab246c436b10ed5e449db0983afdfe79ccddaec66088ba037e730027b57d0866d2f383af39265d541a80a961d420125a3c051a5d2ef1f94473f10c9c86c2d19ab060360bf5521f3511a15f6c489b39a63a02efa13049a15f88dc6b8c9e4d7b6a6ec478e3de7e223d2d08f321ea1f466230e20b1011ae9fc5b182aaf6fb8fb1939442795684bef53cdd6e2fd7834246184c0a53ce9721f29498cea5c30d33957bb21cd45183669c119cb60765ba32f6e73cf7c3d5fe31fb5dc6b1b3c11217c72212bc13bda88b47f917a9846651b5fbee23d6f13599faf8c189b257618e4da277790013921d26f91eecdc8966b3d406f6b3b31ff1cd121c186f4a1f48f0c1bc532f81f4997410dc1ae963eceeca34e0d387a2e85fb89c1b29e8bddc4de6e1cc3c6b80371c28885132f0796058aca99708ebb797ba5aed3492d72d4401e67eea4a5390f59736b79991327eea1d0b7a585adb0a37ef4891cf363ee299a7e542bff7a16fec68c671ed57107722d803e18295d8159e769f94da2a9461067b60e420f044b33c7d2923bb5f5256581bbe362aa33a53847c91f4c46601870a09281d46c94c040eea3aff418bb3f8b8df7a30902e21c7045eca7b86217251453970492942a5a364279c562a1078e120b5e33b2b0c98d6540a6f91585e182a93fe489e28daf7dc5d856e34f1eab8dfa084ad5a1703c0456d2d47c2bc6115941bca498a0fc9d2a6cc0d9b4a695da813bcc00a90a1dc8aa2552f0c5a4a53ded85bb4e7ac4e65555c0b31d142e6a96195db651becdf0bf74a00144e4d5b9f2539c02caf95cb725964e92ee642be0f1db26107d2e343117aaba241eb2889c9d4c738eb5cc951b585dd4dc5250b79836daa53faf3fd1de1dbac46f3a0ec3d16c7df76e746fe1e6e042dd99e5307668248765e52f37a264b162064d4644cf0aa543e4a2a8a041a730edb83d6c590b3103002dc47e943a275aaf329fdb61f1fa16ddf8be5040a281feef1624802b3f090bb4a1d5fa64eeb45d35c120a8eca3ae5fa99b75aa4baec6225bdafc36c26417f82e49c82a962eb135e8b7fee681a6962a0cecdad36648c8cd2dd02e129f8f3b0f9a3dd38b9c7b6619b7b4128c5f273af6bed340237f0457a57848570287208483f103ee5e59911d257d83a7a1e955e1417b1c84a3fb70c6181c35b86bbf77d36fa5ded2a3b4f3def4af3231675ff0037802e67a6860ae789499c0553575866e208c1a02aae19bc18d1d75bc106e5d1c221fae4312d9383a2ca0931dc63afdd2127c0592346e4e814285e2f6225fc87609799498211a1d6c80e6e4c2590f6631a390d26dc95d8da527f67eaa5bf9916534c8c2ef77344b6cfc39e8d8948c658e378d5f84d49ba3232bed215f1a874afa3c5801118e55b1889d27984d4f233c2aca2678b66292bfc950ad660c5aad2336467f8ec117807bca75418f727e409054ba8b71703e6208c0f75cc7743f2663ed0c4498f47be549037e9eb6b41f5a4527f6e98d360afe13d8bebc3ba7846c8b5ea3de4476bc26f3df62bf20573da4d48024fda5b54de5a9868ddcdb76055e5dfca0a59cacba5a31aec6f4a964872b61ab3c21f1baadccec8ab0365450eea66a15d8ad6410d24f49c7fd74a819dd1547928dbf42620a1a8595b65362edcf5478059f543c2e861681be988dd1a40e9b0a50a165a47464d3b5a0b20e407c3448333234607979057948297c5aadaa58c8d3ffe4b9c7a44ffcd636091ea5ac149764c346017bf4cd9ad2d924866d20b856c72eb1fc6455935d751bfa1358a992cc2c3460b56c0c9865ace41aae97cc1ee7c3c433c4db748bacfbd36f70d4e2a243d759fd7a2046cfa3be1ef1841a550fa450be244106f4b38b6b74139b23e775ca05acbe4444b245675831af73208fb16447d12df2a8a753cf034db9df9ac9fe2b570494305610d5e59c35e24ea8d1e770e6560e1ad6aa49db3e8297dce0d09025d2a1206e515e092fdc64afef846a7bd49881096d52e85a6af50b9312562275bff656efae0533b3a131ab98c97bb0aed51d12855a1bc2b3d537ac11ecc8baf39bad1979b84cd8e6e41805354a59d3f206b12f010e0b00df7562a6bb45b747d12bc2663d45895531a67c371947d4bebaa0dbf1f35d497b7e53671009704509c58a7ee929ce19d0920294357d62567451a61e42b50d9be77990f246b3baefa8744d261160e7f15ea8c63ada1fee6b4df2f3f645d6a88ca9ac0b88ebfa2415a53369c8ff34dfd690ee5afe73515e1ae999a52e52d5137a0081b5ce45360b8a5f960a2cac58c2bae3fe5ddea3a9e81d29c93ccbb58b186f1ac4d0d3f5cace41708712b4a7d1667d1a45b886905834a39ed602ba02c7a8685447a7df046b4433721a8c442ee1c03693264222085245abd4a175b0b54608fb323c3831ce71690f141d0aa9eb9720bf5cb4838c7cb3178ebd2e6a4dd96543e62eb54479f7823f5482592560a72375d4ecc3855434829a2b393e71dbaf64e5b2e84746ad5c3aea496d71609cd9da2fb40e783d14e34e11f0dc181973578900165d295fce623d279b53c27ebd28719afc1c5a4a328780c5d807adfbf8899981c6494095eb08eafcaab1b6ae91d7f6ac14ce7cbbbb0389823b532072e33bdb72a9e33aa45beff692d145246606cb286da1ed65c6776404f5ca267380a6919b28fe7dc76f26b43b7b5d870486ab983c049dab55c33db8bbf8276c573117f3538828893eb320ba5daeae65b7d749bcc7908c53c1c7046bf844a6c2316825bf8ea5a9735f81b22f6e354752e4e5a67140669b33fdceda0aed8a8eb59db3353133f59c927efb2fd7dccfc03703cabd5eb6a0af6c685df8f7db2af33d3b437c1653bd7be23949d9fb48b38005eabaf936a668e9c2208a807e9866f6ee268ba6bd89645d545246c297e86bb1efae04789215538a509b424608519bb5d90919bd29e3802ce198ba47e463898709e8d80f608e92e561421951baa53c24f72d39f262e87f65cec40c440c9668e944deb882ec7b9d992855b07989416786ff48ea4947e460b161deb391f98539f9b6ca483c639fc0a6dd551b863e6ba30c28610425c331430721b0423b40305546051513e6df845b7a3a74641d1232d63fab254372bfa82e8fb2e0f96a3e3b57cc7f7c0936aeafb251e8eefdcbeb77c17b11f033df0756a47c4c15706268dfa1e66150ca91ee4f04135aead23e0138adc47383aae3126852d54634bebf0d44901165b3817cbe0d271ae432c9bf7bdf25b573fceb101aa7eeddf04e3f6159afc41aa187cd22ef54ee4aeec8fab41e8408eb4a8256681916faf6658cc5178039bf477176152e5bca407fbd63cda868d98fc25ae647e54e2ef4e4a166cfa3ab70025561b0e4fe8e2d3d0fbfd1125ea191a11940e6c28989df889eef9632f5832be34212523a595fed78ca1871f4b2956e238b4cdb9b32c6607e28c62f113f6275b73339cb817909041cb8cb37d8162fc5a4e2e5862743e851fc541720cea047da37c7c5bab942e7ef046235f8f39a7414d826778669211a4f2f878c5d02c9de7b43fc45ac19997cfdcc98006be27e8d1758e7b99a26f8e94c414b684e7c351a3c777f5c7a6deb0a3d9ab5a0a1149d6ded46d9d67863c9d84e0457bf641bdfd64a075a2abe6fef3d6515ff98fda43cf18eeaa12a271be4d67a7b2de274226219f3b10ed3ad7c7814a97921b358b5f6c000ad9af7e80333b4e89e25084318b2a9136d5b0c9d77f669fcd0959ac7d402f94af5db8bd2489dc9e68f047bad36a52ed9fecd904304cba8c191ec5f3ad9ccd93437fcda608597ec6e7e253bd67797e1b5bbb99237abed91f5597bf86382758dc00f9e4a0d7836f960e0c5a9293b399ef42efa3b1cc3b5ed43844adc488237de6844cfd805722c5c364455e24808364dc725fe7d49bfb83339b8baf12ac1dceb6c49094002a4aa86cc6e8bd6a588d5efd0bcf8aaf5838565d24c085ca64a524005cda624619ebe353ad0148af9af48e9607f5e2a4ac7418a17ea835894985e0c6a8ce8dfcd1da8aef14a211df2c4e4ffde768e2170c1c43479ff6f40e0fdc0c8822e4ffb2c485433a31a4984f6e9ec6a03c1d3a228764bdcd5b080cb5dd3d7f52e5ca804c6e7e80619f2588da99f9a10ef7246298cbeb08d8ba92f47c26f09dfce0c67884694ea4b43d0c945a0a2a8477aa6880068668094c6d61f3185f84ec1d69ddb1878897d07a41c06e88911ead4d576dbe9d458955c8b91670947b3e2f914dd6daa1f48506dca5c9665fcf9f58610402318ad491afb38bb85ab4dc3585002fcfe769928567ba255f1f6631449d7e82954d0328a4fad22d834c334a988a9ff5be599a0727bf43b71dc65b49a2da59db78d390d9f70434410fe374fbbc5da89d6337cbe7c3c816a7d7478e053096dac554c1c57d42aada3bd8e5226e76c0dd4871665e9c847ff87adc90d50ccae10a8325e79b007acf5d2a6635ef656038f046b726026172d36b57e84818024465fd8b7040a75ebc1016689e368a13d5eabaf23ed8f7e4041f7fee8010d7d676c949da550d6167e261d83ef43121a9cb1a4472bc1db8164d35557e4a6f75eee7d2413fe05053cc7cb478f923012b3c8066986d2900477e704e04bd3efca5437b231c0d63c7c296d617025898b699ae5c134db013832c41e99bd753db00bfec46f8c309c78485ab86455edf2106a75cbd462216b148d1182c651fb4faea53fb6c90c91c72edaebe6f010f2a7db33f4057dcff91e15f24085173add3bcbdf596deb706ce3ac9254891c761db8246cbe6a1b187914a12e15a0cdff6e10bec7a0d7daa499a574baf072eb0fcba1635872e6ee8f765dda6aee2a0926ed839706caf47cd0a510bb92ead2357a5317497b48a5c4911bd77a5e3b509e518d306dcbaee8ccb5a521b449d2d062a97fb2069b6ccf8f4a36cba38dda118a8e66e5837dcd8ff6160d7e38347fb3f00d44b273410aa1115cf36c421eb02fbdebb25d4f1487cf69420eebe6eb84ae768846a807c0aaf226eed1b07101ee062d331def68e10b9db07be090d64f344b75c51a55647d71d8faa888ef4c9515c71140bd4b7b2270a2142a85e48b575d94fa47b762718b4d89997b885aa47557afee56389e20da06f1349e37127c86beba539611f8614b6d37ce3de8f27f7ed4eeac1c8f366a269d2595a2cdd1b37f818947976286c38f14ff22f1424e5b74022af924c7375bf5020fa63fd3b3cd4ffc16a2f2ec8849c55c24bc880b655d3fe99708b63a46bc89e2c6da1c0faf8f9455f32460dfcb28c554910194824f339de2e73ee83641469ce5ca5e0eabc1b33e32802857ede80706b50a97da1146815b7cf5a35622ba187d769937a00435368f0df5d77871c51a0a04f1cde0dbf05d0efae7af64d770a14b63dd083aa693e78284ec0cda4e059be948ebd9da0ab0a62b476b13a86eeffef485884a5ba2f14522c38fb5f1a0a6305f347ca029ed656b386c2d0006fc707c207836b281480f50a3ca5306058c43822f11e1d7dbf05c63a03de4d1f4dac9070dd394c50cb35498d7f5824b8c3d904e56ee7e87507db7b3f0b58f463b42c5cedec09bb38d84756fc5e3605fe23347060416343a1ff0cff062132414e7f399b5f2b1b361400bb02fbc36dbc4f7363f9a4701e1b3ccfaa6a236815fdd67328335cb30d0532d0829394edf13eac0776671ac0cefddddffdb1fffddfbfdc84085a857dbaa24df72b47554af886c0cbfb1383c6c59c321e279657bdc08a156a4fd6fe11985599e75eeb888adece1adf5481f7e09bffe53fdf6f761b0ab2ef0a7f256d08e94d625328887c2ff3818e5ebc8852724aeea64156780ff446ee610fddd917a568892bbc442ea8113381016e7d800ac95da6278342f769df5a08490aa6b5fc7664e022e724abc4987d7a23d07546807a4b21e553a2d80e374c68e96c1f3eabb19459f0b768ca7adda2caf47c021c087f8f8cc18dd4bddc80a56dcfadba350ab463ed7b54cab57b59ad3442e7b5d6331a3219e94c15ed4e740a3b13658d2a2a5594c08d76e54bbac5c821703d029128c3914c97c328f414063b03e4d4c725ed968d2d92ce1f05343fd6b79ed6893477dadd0845b9aa29574777cf36a601ce3181b5aeec3664caeb44925201c6c5f3809716c0eadba3352ae3d3d817fa54adf698034518551c9f4d4d821644c2dfccd78beaee1d65da405f4d9cfe975b55eca020adfa16f676080c0356db05d86926b2245901a1002028e75383aaaa56508a841ced932190036f6a9862d42a24100a928037835308df628aa035b275b563f306c93b3420c9c248175daa6829190fb68c900d65f4962a5bae8c873f0cd4b98cde7a33cc950ac906dd0482971dd7588f6191a8c5a5452bda63e8d648e111d4328d09f558fc05a8f7d733874a9d5ea14d28c1b3cb38e193efd5ea8a5ff222a7d9c08633243c47baea5780a864475aa4e5169118d15d954738536fb828cca939112385ba99f3127a4554b19f6ce96b1a60e0ca046253c6e3a8ea2aba58e8ef93e2baa3f6268516fb1f94c798fff65952d2cd3e76e45c14a079cb885d14cc734b6334e455863e4b77302ea013d98c2d539a1ad80eb1880a361e112901470812d3f7d794ad14c07f73f9adc128f9f8f560be788ac543efd04b82480a054729ace0e3f0ebd4e6cd01c849e1642c63b552b75218dc85e7efb3aac58364abd1d2e9ebfb8db42c0373424414f246fa9699a2a5b1cbb0ce57fa5bbaba07ac3797c2ab07f0461855758b185d59a91c52384b2b8529e2d17f7c140023b139f19482dbc37686de4be8e2b98e2fbce4c20d07cc2679dc2c85a8153c139ee57b9d4c9caac2b582175388aea3ff47bc35f55ee2431f9942d92460c548e5c87f7d64be4a550d09139bf3f639804dd65f06f6a46b4d4c822af144da5dd81c5454d8aa85ced3029586b536cc337214a660fa7a19b283e3090c53e03de8dc87ac523c620aa63129e7878e49def714c14bee63275739a5e012fb8ef79da14a49489ff5011b1fd1d2b0c1556f64961f63ce9f9bbee26eae119f82e1714bcfbf9ce38514a33f2372447e36bed311ff2a7a0f32ea2541e7c39422e31194df63ba1ebb4137bf29dc3a4e6400c9eb251f0b92e12f1f36d859cf2e45888dbf49d4a5c8bd48cb732e5138e7fd64cb8e9a75b34fa2f82776a17dbd6aa1385b856e02961a76e0ee302140a8941e4c0386121d86893b656bb2d94df8a537a3d8537e5c673c340da60216c34b74143eaee5b0601c4b226896437c7b39747462088d04fd0a80b5c9bb67513dcffb126385d63e3eb3ad98ccc3d018f9dd2bc9a26f1182a0f1ce7151d112c0b8386a8dcc56d492d0dff7fe2b7b82b7f5f3be279b9c126c9e7d03878d261027a53059d90639c3ad7ac2aabee9d543f45c149d05c6c775a6000d278c57306f8d225d073da7db2af68b86c788d7b07e12236555c940e1a7cdf94b000554e1aeb41dab56702a8f8e4fef6c489e6c57925c513a0387feff46e6229cdec98e49ce9cd09055c54e7e8cb92f628ee3efa7b2fe3cf853b63dc64902816737faf4501302ecd66c6d8ef527a0e7048ef4abb49f079de96a06dae64590e8a10a9278d1a31baa2ad66a387474b615fd39dc0325e4c3973a45c48e9b87424604fe939413c8b905eb2a0fb3c416cb6e8e6da356729578584253ca7a98e2626c546bcd2fb8227181aed8890fbbb21e9a60f2ac83b48aeb2aa5ada0d8ff122b6b0d8c6237bcb67d9cc9aaccdf78d81fe1e0d4b723c0c77859d34756c3a4dd71cc172b5b780171fe5a8d3e2dd62c11ea9faa41b47ba040d637f28eeb40541ac5d2cd4de7ebc13ab1ee568387500ec71a478dcaaa11f58b0ad5da66324c4c6a7edfbdea4e33f57226df01a73ef69acd8dfc2280ad5441e2a9551d62f8bbd44a45d242198c483d357920bf997f204b51842c5b3112d9fd0b605ea4babee9d5deac57a4535a634eae8292ae20e086cbfdb491487f6be8dd9392047313b75fade3520410708c85da3c7eb8c610fe75dd099867f2dcd4c16d2104ee83873e5ba483e23014c31e7702de5a01fa35a4cae614da1c01bf88aff4f84e474a58a548a378f681b3f26ee19880f9503d07b41877f955e2a6229fd7a3b7bff10884f6800050c49aeefd9faae71d965716f07dff12602dfe0fc37daddc544066c588a2a6ffd66a9922b907e246c58b4d803901d7b4b9906b192d536f961865358a4a4a77841333bf8b932e63509643dfa4e3025c398b93ffae4d018c9ae084098b93463ef9aa20ae53940518eaa8fe55e309a04180703852d0a1cbdbdf778f62a4f1b34b0553cee4c7fc0497f2626840860f8d1b80e0166b39c103029542de9a3e67087e7df42d19718b71679e38287acdf7d1e8410b026db4ea79eb5149979995495ea7957eacdc0fce599b78bfa1b75eb27863587b58d13359b372a89efa4df76c6d5e830e44f75d240ff590d6e873047494eaa14a3862ab2d3b9d610c72eafe1a9b4bce45f537bd6479d62e50d8f457533d7c65e6563b95e6a255454786d2dab46e3f84bffa4a5de73253b47efbcf6c959f662fd1a525d0692f009c9118d97fb92d8310f037d32aee6a94a128584610099af91bda2d12b50433125f36c9d6dc20518de7d9fff24cbdd4e3c9ab70c16eb8d38170a7fba8929213e91c71e7b3d3abfc22d6a80ca9f221555e2aaba8609595a0b9168d54ac1203e56b628ae6352b0d2da79d9efa8bfb6ab9b3455f4f01ff56d6ebe05dab476c5732515c84e64bd5fef8862d1a8ee64a2c711df3786508f5522c2b17e987e20cfd42093270003c01e92f7060af077df6eb2d13ae9f4adf5551012ec4c25ec9ec9434b58269c06c576dd6ce55993fce6b107ac9bf0b7535e958082ceb11797db41b1280869cef96a8ace6be2bcc884c5ab8a8a15719c106a7bd7b22acfe9e65fd1b28125010c211bac7e889048d1871abe925de1d6a4cde210cca8d10a21a8741a909ac86f2d45ef98e634bba5c0abb6ad009da8ec6d09f1b9b6870c6ae3f4d60e615b2e2a054c7c2752399366ade36c8dcf896e32683fe4e54ecee588254fa8b03c58e9828b8ab4333c8e05360c2c8aefc003011ea2042d94db7750cc017ebe2a786457f59816332792c8f4d2bdaae3980269849c4b22e17cdacd72530d2ed69dd506b11868b29662b224ac00096e674043714b066882430f779765a309dd2fa804bfc4abf3d271584d7ebd3e54fed7b84aa3149039398dbaa324b5092da997639c8a2d2bc09b5238c9f700343a4036c1ea94366e83ecede3b2bbf6cdd14702a7e687824a528fb7b1fe0ea5cbf588848b3852040ac5caa53f91242f7a575148f4e6130e203ab5440f2f1699ef781dd207be514a0a87238df283b80b264bb317bf0af6709b2e88285f080469f58bd04e25a76acb217894956d939fa8214034e6929fa36647ed8be55f5468084294ddf28bc3fc464017106f6b08dc97ca9224847d7cff64f2262cf9423c4fc16a79d822a3f2dc89fcb3dcf0969ad78aa4688371b2176e42ea9008064984bc865922d47088073b015df021e1fa36c4317587a99d47812e1fdd64f993aa15f7d7ac79c814b6855f68dec99f08b1c79eaa408b9b5e34471d05ecc253724a758521a50d85b720da3e5d04edffd40d33f4ab3982454e64777c0e14e2c249d06bf7f74534a8497ea3000ab3659444d6511de3748d1780725c2437f3b4e13b4f316796ae3fc2bdddbad37b985d2ebe49775cac6ccebfc2cb2d58425669922ddd5cb308fe46f3c26b00a3436cde0301256ee336be90150111936a4659298ac4f8cc60d7c0f72b04fbba6337bd15a0b46443b97c6e5617b0a3582eb0ab730228ddca36fccd68f15a5456fd47f22ae4f169e5bdc46db910a1194d6c821355fa421dcbcc15ad4d5fac2f561bbbdf82ee787fdb858e3aa5d996144cf2ad11c8fe8470514bc215ae90bbd1a0aad694b53c1d6eeb66e9542d391a8a3444c9e1b75b2c8c339faec74074619a9f58411e7c4b00c370651efab781984f0184990ef0cf732a0e178c35739905293553018a7819569b7d73092fe370da4c76c24cf81981d394e60b975d89471c25e8c0886b544f9a19647cfff548cb532acee50fb0cdd36b1db869f631a85722bde27c128ef1d1abad08ad24c223244cf90403bc6512bfc0206df4f1a3b66703778b925c7f65bbd1a89bc0d73b451a1f701ad31f86e5c84be5e5695fbb9ea626e8c91eba15931a39079030a6c0e8ab5977402f5b77c968431f92cf674e47e8ecbf7746afad70237757eb87c528ff2b4057240c046a7cb2683f1fdc37da9dae017d5e0ad334a1e12767cf886130ad052498847200c538e415b085df6f7141b854262b656fe82e77ce44ad6b07e0abea2f524806a9c792413ea9a5b79e8a7649883c9e8bb79bb793e86d502005783397937eea53e3054fad38efacd5096ec14859c804079b146f25861abf256275fb8838a6e264685f4054bb066159987339f0eae4db45cfa9fa94c6732b3cdd4f390d90cea98ec9104f3da847bce9018c014f064e19152f4d445cb2ef077076e24633544f897d20ec415ac5f5671df0115459097dc4439dfcdf0326f8bd9c35abf3386c75b1c23ec43ed8d7e34bf8542e01645a3deec15722240f143229bd4edb02b6599392f4f731e722de09c09262d1015d88523c15e4d28482c5a08d0a803ff384d9293d9b9915f0eb17b8a8ef12905ad675c34f54d4a1e52ccf74ee19c50722e83c0a83c5e718b8eb5e44cac4c245054658d7d7d84455eace982bca6055f18a9f7dcc92d4cdb0e96ad770f1c1244b6afa99ded3e226ff8e691f26740b73b4986316a12505acf48b54838a3bc785340ae46b9caa4709935d3e0022efd15dd7a85a5682ef6932b62e9ceb28d03d95f1c04e219ca4dae772d163dba95379f72c30a5d9c57cbf3a2ec35874f2280f0f630c306fcf1225622a886340bd85a72c50dd9cdaadc3579875bd7f4982e09c647b9fd5c8c37d853e4ad965fc071a30ad7a2936c607fa8c6c79a690281770084bb0492d7919fdfe8481af4f5e1b1c3e627dccfcce7606e14bacc98defb17608762a1512912ce5fdfac16f50a08c5ae68b58700016e94401b4795771540ddd478ee33364f95f7576b9ce0ade99c2f33c64ada1fb6f1290012ba83edc41c1ea0e87e310d1b5d38c1312866e06d10016f5adb1a7c84285b39f775e64afe72ea706d1767e3905b3b1a12af4d9b5a0ba6f04cb6fecce9f89b1bd68ce7239d5eb3c546c991567fad3af6d639eb369ad844ecca2539a2b603f4d43370ce28054997ed2edde732257b411cf815e2504410c94cde531dedce298b62c83b1c576f696cfe396c522a5b21a00caa8f10b4d3680f630d2a8ec8e762d29000303b9e1a3a6c1bcdcd6b87424b85b7a10698c720f13abd539b637b1948de56ec35a9c1252145bab772616ea3cd2d2b93acb47de0c731c3255e34cbdaa71c2e16ff7bec3685b9d35ba93cbdc9e34a02237760c8abcab11983252dbd459770562c752f4024baca2fb07f31d8ecce166245bbc41afa94a7e305b49639c5c10b453fbbf38c040347fd28a82e2f86c85594812f59c53d44f7045766bdb0863eea29e674fb28066f19a223c031489365c147a33ffda1801cb3cc75cfadd90e786d678762951e35062acd0c9d5912703f6a3dddd6b85983a17a89f49f7b2d2f73dd8f832873e0b6f56bba74cb265bc2ae6570fb4a7b17eaa5715c4f1169b0745d2c2f184ebbef7a1771cda2f9b5769f0331714fb7fb735a0ae612b0089eed9427050a698780114059742bd874e11947666131b39c3c347b8ebb31f7acfc6cf5d0b25a8f934bd925597931190771ba6989644424935d8e176236b9a292ed240c6ad36233303eb1cea32ba654f969894c2a8d7dbd72d9524142619b456997ee76d3b4021068fb8343db63b7c33745726f60fc1ced0d41f20d7c4b13ca9d94dbb0025c39d29c46e79c473a87cdd9aa2abe7c91e39626f8b44a88c32573e0d33d070b6d9ca38c49021ab4953a8381839f7f6fcbb871d473e9fcf63be57534188b38a57d028c4cca8a6aac6eed42c563fc6536fc1b49312b9f361eebcd9c371aaa361df70866c1d0c89c1b0d2763272f26f4e95097d78cf04d6d5b3faeea2b6ea73b20537fc85a7cbac2c528903af8df1b634ca91762143875f906011e88c8e5b17e5370d471d56a2ae936a8142970991f1c11721183dda0775dd10674ff5deb7876182838f893ec52c8c377a0436000e2112910497a50e92a46eaf6562ab6335e5283a7944003f3413703a40fa67f48fe1b779f65b6ea28e83897689d72800bdf6bc2820e3181aa62f8bcbbec707076b0bb30d938215641ff45f51e955b21477c4ad4fdddc13300ea4e0b81c4af2f52bc333d6cb2a1ce57b434a0062f6f7ceb79f7c027ac99770ddc798ce511ca9f24deb9750984ee5ab669428b6739c10e6a3cf3a106735c6869f453d35a0514f4f1750e0d4a947b730871825164c7885e8c01fda8b7ba3db4ed3c80f7873281971d02a9d77e7ebffa42f48b4bc57c0004d5698dc631cc8afc1ef7216e4e8968e4b6762b3c52c32a958a6e1f09847c9afe188cb07dd50f8b57f4300ffd67c1edbd5f1dc51a95d846e416f31452b253f50f9299d4ce786be3ba9e871750a89279eb9ddf1b28a4be28d5b331d2be64a9943122119098a0870937730d1a697c1f3b2126aedb2d67e5d24fc8640ab609b3454822a7a679f994df9b3c39319ad9254204ad1992126c94d92fdb37eef008b7d368912008709ca0295959ba736fcaa751f76c26a7d978f7390c018a2a58e72f5e7523b877488f500620de38fc47a5c6400ad0d4116958abf020fa891a5cb60ffcea4ebb7e658545d07c537223f869510989752a1176a791e56e5db9d65575372c91b86fc7f6893a47f4607b8eca60bcc613495c6de5ba0c0395d90a5badfd55def6ffdf86e2a9fcbbd63cb1ec08876b3770ff57f763c79929625aad5c0e891f44eced0a4f86b2537cac5b855be6c61d953a55b555fceb3876fe58a42da67ca3bc7f9def661a9acb1ef9efd1a14a9c6080d0258dffbd9e50086c75f4dfd365698c7a69239ab4abe94f67f891040c81794f8d21a4deaa91c783d1c6a59f0c2bbc63b7c49dbf2e4f7b96fddeb923cd52c6b3a1b325bc981ab20f28d260c27e569a660d2a349d3a51f9e1ffaa333020d898cd8f6e5b62bdc15c77ca0371563dc81de5c31a6cb42d8c91614376acef49609b6aebc2b7a6dde3ff1e28464422833753bc88f662dc453483a63f56fcdcf1636f3320ae9b31283d44cc2f3d90e1f408ce67c334958b2189ace19b2629026da961f4aa7c45e898901382d784de093e117427cc85e033216f029f083913e640f09cd03be16704ae093920784de09de0134177c25c083e93a6c92f1d93392f18dd50cfbbccfd197f1c8e2312a0b3827631f27a433a61fb69f09558de469ccb0ba9731ad3db6cf7edf1cf8d98817352bdbde5c99993f8f86d903ce2bdc1a0696592209a671fff1556329543809fd67ea718e0ae2153250e290d574e05b4209345f553346f500d801f3e91148a75d8a1fcf6ce7e5fd8840b546b1387a3077841535e8c772538045b283727f7cece0a0082526e08d2b84aec320f6afad8cb5e6cbe7993fbd91b7de198cbabc4fdf4bf12395ac75059b066e2986e134c4a1105f7e4e0b3247f3c4e34ccf62e869c58ed82cb4d88e0138a50cae82add8cd92e5a0ff61bf838b0356c84085eeb81d466cac41a1e08ef33b5e42f9509d780e0f3f3e75f0ca1497a7371ca62dfba4495c9a8d85d8acf84298cbda35b6bfffb7d3f54f540636cae05b1a2d725973ba056c75c7d906b19462e9429f03dff880836534e61ea4918ec64f214feeede1ac739bdf65e5a4fc4d6fa56848acf03a410e5b771d842620b0ee694203e8cc0690f1b94913f3e8bb83403641e916809c95610687b28ca095843fee6b41d2bfd12cfa00675eb2162a4ba66362eeabd13f20f339f1b60f15c809490a4ea417daf84a53378c8ff24e0ff52bb23836fac8cbc185fa30af925f6b4aa352542a078831915900f0c956b47da2983760e8d45eeae1fa110982f0c69040c9ff533ff61bdf4299100e8fa234a8ef83396a88e7e589e56ab55f30b72bca8e7b8ce875b85ad658532e8fecfc4691111d8a755eea8e59d53032235886cd113a8a7ffdf6e760d1aec9ba03dfe33e47ecc1687ad4b93b9743be74f703417f6be50ad4f92e4fa6e433cee9b06ccb0ae8696e2218da4f773c0851feeef19dcda0b38c5c0d20b246820cacd7aa30476bc30ffc7843cf61a0a8bc74af7c572ecf50f48884898fe950cc4626c06c93b239d2c1b05f390b6d16c04e80687f65555b662b0cafcb18fb5e9ec66b15b71f0e30a3279967ad79d670cefb6fbb8a8833518d067363f1c954174849516c9dfcc04c668e4eaa16dcb9b5abc602dd2a9eaeb7ab4894924c9169af69139043f3317c679483e68ce475d66a4eae3c18d04e00a53a87decf55cdfacf000eb7781f4b85899c87aff477701efb6fa044f590cf46068a50f068186ea65f5eb7904877b4e2fff7bd903321aade4f6039e98bb7d70747703c11c723c049569f293ea2aa033fafa8fb68bd77ce7a9d6cab1fc6b5411c94846466bb1f8cd98451692078df498f76b046f0f7cad48a5274655a8179aae0cd70b51dd09732a6641b075c5180eb98a157768d388f0b73df7932fdb1f25d044950850b920505f1b123bc518ba4c1cc62d9bcef3e407ecc55113f0434d653ebe36c1cecc7e9dffbe7936c12e928164a44aa1c18fc2918b20a14f747b9782c236e80d831ad6bb0e4af2a5ff5bace809bc701f1ef4f0c1ef1659ebe9eb2187354abc835de29bab6902d0bce8ed852340b14464ea6493727159e809b1cad452a76c2a49efce1cc535932b8d34e177478d469e8632fb1e9a7fe61963787bdca820aab1f00de76407e6656280443e508d0e6e4ecafea59e2082fc16d90c7ad134da3cac468ae4aec867f9e2a321f448fe46daae30fa3984076f9e10ac0c08f21981fd98f7f31882b97e620b50226256fe0f0292c7553cb459de4ede1d6f62cf073304d7c34bdc7f7f5537f115f3e2964815f2e68a8048fda1d31f66cb73937b18cb0399591fd6edda92c5b630b460a66444f9a81ea182e12b07563b75558b971676f511a0e168ea2a8b11e60eb75cde13024b3d735a9d684091d23b054a23dcdf4c647e998203c07e4eed213ee6541d6da7a78a7305f48039b6653801bc65ce1503a423d8f64f25aa0331a665b79082d25f39903b79488713eb2143fe64aeecb7d2ebf2d089379fbf4789f556cf64417ac6cae36075f1f78cd5c51eaf2bf310f66a34d1977b82248757b88298bfc112d16c74538981ba18fcc548154f2ec9ebca2e44593f34a3d075a61ac6b99e554d3f24420a3c87eafee1fc8dedbdbb0b17a93258ac3b31ec10f88e07fe5c772e037bd8919e48b942f89c2d8868d722db71ea82b8486534ba611cecbfc04ff4b49ed6362252103c9ee5d8fba98827b1de59d60d2d1aca466523da8aaf51aab181d8a82369f478f2e858d7f747f5f14c5d2d2b7cbf6476aafe7dd71cd83778ea5c6acfa5a06097e54dd327f6d5e35ffd1fad049a4f2a040f7af21214ac3209d18cc9d20de7a1c1986ffea85c663e03329cd2b3bc16bcbf398b0f3f199d3f8c37bc16a220e31b3413f46f5198b58934d4bab5a970a153cd8eb02f14960313919990b2bfc684102075149eff1c5e00d2cd3ffe1ba2bbbd86a7c4255599c1e369095e95fbeea4cf9e75631bb3e610bd9351ec8eadd0b9554c686bbdca8960a5dad647433083578165675e08593bfc7298b1228a2bade1ad8efd05699f8906284a7397beb97e96ee071f3ab39fc3bfe1909dead8137c8ff5c214f65b118ca5860d506ee50f9161e3c79593b23593714b04553ea9317aa0aec3fb978ba10ce2ad5821243f664385e74616c7d351c7c028a4f66384b2ca05e7f2dd234c09e312f67a9d0938683c611b1ca510c023cbde8cb131029a324019ec01c48ac2dcf12f823cacd6ca317c943b6a4126051e5eb7ff4282ba77e0d7c980010fbc1d8ee22aa1dee40c48e23b63a36c64abb8e11212903536bd8a34d5dd1e20a7213be51db4c1fd914bdf438d625eb7ba3164f189762430388a4b22e27f10cab5aa1c4608297cbf82ca2cbf7f037c507ff528afb7d577cc4c74148bd86364ec4683f131c6da1c3f009fa6cae93860a3981a5ba3dbd83ad4a93bfa26984036f281e8bd0dd9f10d0d75e91e0b91eb119bda50080614f410b5ae484039b9dbd18f18b68ee13af40e5d37e2d5de2cfb5894ef562e493c9c7b1c227a2a6541b5af2c10893ed49df72de0b189f1e0c023237964931654b21144788433e374d6f2da86912bf690a8e9599f6fad83b64b24aa8ce2fa4c53d3fa4b3ee54f5ace0bccd09b022999dc475d8fdcab31599f9d54c00110f971945368c7c9ad26dde664c60d768d83a267f9a6d865b57e75fb8d4896dbebd083ce4b0763414b242a058d529ed630feff44e5bb0ed27c2b8f2d64919cd91871164b66ff8be5183fd978f8c01efd5c1eb70d007a04e0c4003e08e06802a0e1d70752be2a081f2dbb974f4db94f9a732f2f2105bd696fa05898407eeec7facabe6458273063277d1637c83fc052970fbd9fc8c57ee542e1377f4ca484aaecb38cc92d8bf30d3b517b99e8973847a63ae51d16b2c1a4423aa56cdff5dbd5b25c108de4266e3c50ad53e848960d63e5d4711e6fb3227a6778dbcd0ebcb7cdd28417855063b81ebeabbbbbd6d8d0a1a70f03e05447d2f6ffd80d972e5ba9a991bdc494a5175f229f5f3453c9397649aca84090463cab559bd34705b3397623bbdcf03cb2ad991a297a5fe103f04a9af05d7bf1cdbb05487f3229d58275e49af017d3733e9889519143be42e6d71ba79c02e02027c14e13413b19662a727b112d9b82a50754c87f1d7a49a869d073486b8ed4c4b7b8c252c449d65010b2d7040a2f24211792262508550801649304eec221956dfc19d17a7cd0af5fc1379927205c20dece1acf28709f88f22b10c1e81393daf815c23cbd30de9c1df0d7927353e84eb283718ac6becd7d71b6598a7022a4c1fb48bf8d930e2d950b89daaee7944bb6f6e946f8ea1976fbcd0ac7e8b7a91e70ff30ec34ddd26c1dbb7de6b6636d7eb19566475c1830ab3ed7531fb45ec3996792995ab59341841695b8faec89012d006436a6755ec61e0e660bdd42d538e3926149b794482f8d23f539874dfe8f2ee00f101d25fbd7afc1d0e3e40b9bd24b8a20941f4d63e18cb7b19d1cb791ac072523bf3ee04fd67a5641ec68fa3685de2f0867eb65ea14b97e05338497aad2c150563c7d2462f1598069c1d995b8697bea5be8837c24f03fc9862f73b237c926d23372d3b2e43fdbf9d84040732854bf884a623c3a251b5667736e040085a4066c844d7a0f1f91818fb4c3c7c791e27ae3e3727661eab5f74cd474594811d858fdc4e11a5c1d61c7410132f6fd9e0211e5ab0f5273fe69b0ef28e87de62542ba32c7c29999a6f1e110a3630ae14c0bd17282324e9e38398bd5efd3267421c12577afbc0d123496d86ff46dc042e1069b373b93115f10e25f48ab8845054186fcb454d37054f2a3aa0b85b06c0ff7a7b02ebad3c93dfc1273663acf5bbac29013aac3405733967dbdf4ccfe5bdfb53dc734ec8074c6b7b51a8cee3163e0683ab46552791ca6154ee373f815700408d7ed0e9caff9b2972e75c6b1cb7baf418d37468b5736be2ea79dfcbe830fd850adea98f10573a02fb0a03cde074cdabae6b837f80b26e8b5ec1bd73f27718a32bf1507895ee2ce23e467986deea177fe31d58f0e87eb117d30363cadebbb4dc3f1567deb45caebe72e9df536e4499551ca4f22779da40fafa4af5c59225a0e3b54ed90c44d4770e7205147dbb2aea0fce0be142a3955b97367d0eb3c26f608e7645b542f0393e49381dfce0edc83c91fe7466fae3a44830591ab3a995b66d2feb7e5fac9f8d2153481682223db93106638924d54a21e8874459f933f07c0e8add631faa01d66d4cc63087d4e6025702b41a814a2920af80daaa85a574566f66b85021d064d5beb9ddcba5cc484e769bd73ea6452e33a5de0926c29e5b9f09c59ffeb5982b4bae53449c6afb167aa1246492a3ca07addc2134fe8adbfc8af503ac7b9c5c7d15a0a396ee016b999d421367318e04fd44d875d1cb5e2d122618aa7ed3432303c2df4d436eeb4362d449effe0a37e44f1b9dbe08660ee155f71bf8dffecda221d9e2d7c98e8d0b0222666ea9ce409d66055a771f4f2191d698191affe3299eee8fa8729c88fb4c77b125e17aa92ca61b261828473cc7ce54cc0e9c61bad240b40b03d415ceac0dcc4719d42a32650cc44045bb0b056972da1795000e7b84aede284e9f5ab5e743f6ff6535eb9c9db42f26fb431e046b2d76a29292738ecb50845067a4144a1c2feb804b31fc13c3e2fdf59cc908309cee28f1c4c691677e4e06256fba75b9bf8775b9c38564dbc8c789537669f28f1a28fc30ee7a0fae679fc5e68605b0a6ccc963bbf7743d776b0d0b7453725f84ace5cd067f343c7b2792099e1b2c58a0db0c0f140665745658e640041c04f8fd3c27643af7a27a67234bcfe3f68831e57e3ddba9ccb9e13ce3a436604f11618cc4519179992030d6ce21cee2d2f07c5ed61712898ca38446643594dcc1218100b4466c9c6cbaf85f5d57deb3e4bdce5527718b0b574cba379695f9eeacbb72c056208b6c9961ef3ae528d46399d5622ff4a8bb8e925916fd3a7823a217a9dae710e8b046697be10eccd28648763f5bf08b272bf403b91f54981a0b0a721237ed1edb13bb1ba384d66905052736ec7909b4857ba8068d51c5d072f5a13f75df3f504e3cb2f5cd2561c5c4cd2e77ffdad883dcc2690987eb6ad0d1c236fa201f2d2a0cbae23ec30e7f7bafd8654b5c807658983747d0f2cdfd9499246b3e5d88bff909b356db5d26db6b5847e515abd1b2e44f6e3ec7826189c0655864f1dfe2bac7c174dfd7b1a69c53662b3ce71ef38df4695a96744749fc003cefb4fd292fb5a317752060081fa55a59857c9365f12b2ee94d34e04e5e6059477a94ac7a8f36d8c316785d9d8effbcad4fbd6e9b835fc61ffc2cac7a5c485391cc2a5ab414823ff2c55c74ab590ae379b327a6d0b3bd7acbf6b92899944d3e053447550be00a269f38c719a9bf34efe7bc76552627dddf760443ee5d347576235d53ba87ef91d84c3347774157e02d558d8c8e1a4aa0b014a175c638a8c8c8c10690847ca557e5274e49502ce7a35f24d1bbbf81f8a69b217438a9928a4d46932c8d55a7c0165f6d56cc949a315972852a429fc4a9055b8910520ce035531330931306ef3311b3ea31f10d807456516439f8d6d0c96189137ce813aac4a6933aad14fb1f2db6bed2bbcd85e5577a8a5e721c7a4783e137dae208619ce182ec5dcce170047c8f16a2cc04cd3719a8ea9404eee8585e9ddb18030ef809702bfad3c42ccaf8e7dc22ed790d681d7c56b94418f69a4db0fa44248d6288c90a3d4fdb91b5c7c2ba427a6a5a199e5e2c7faa2498a4b0c602a7f4a40b114496345881e03254f1aa3b86ae1d19e63ddd375a08a41d37fae81f483f877188d1c7646543e3445382777ab3a80c6330acf1f67fe0420bbe50ce014f1d1a49a1ff8a5b47d41767614ff1602c3c5e5c036e287a0e4270a567a02d13d51a14763de15cbdfe6d1b15b817610ac6e58e6b7f4c4329e55564597578ca578166f9507ce5f105c66603112eb1238569a0036dbdb805b136df9606a39983f3ada8ec8917211d3a0d655b249d300b6d2b2c588020b2b1f5256dc6cbad0437525b586b483d91502e0e26c9dc504d1276d53941c5dcf89e3d9000e508798140ed8e25edd18914e20cfd9754f1de478d6a0da66d75a45dc268a9e5e68a4c0c4f553ba18b0a84338f3c094816fdca9a12558a97fcedcf167219e0c568035b8b3627de43a3e2a6a64d721e0ce2d648de2a6e5d599d15bf855d75b8e79f964487137f6f0289a0075d7177880342ba1e59e9598408a4caea0fce52cfee346353e038a8399952d60f4a0df28d11a33c175f96f567cfcd6bfd9efcdb3a6e744c4058477e06eae3630daccca1f29da428dacc008ee677aaf9a619ab11bd3c38a69e7260bac9b3b1252275b29c564bf27a88d5d6d96e557529ee6948247a9d3e961cc0d41ac32a288cf10504c4ee501d3380bb69b445294c5495cd163073a1ca8ecf6aabd8c35ca04165ec47b188c12b46c53cde3c611f6b65b822e49f3414899b1ab2450414472257a3d9a63e3d6e44a5213e5967ebc87826a1988c958c4af2902a7f5ac8add8fcddab3332c9ce83df4f0964fe6e302e08b96b9de4839cad584de7a41de60a657f082a6b1a85eb6425d39ced45b935408bba2a509aeecfd56b02181b3fcd1e5dadb724d395a1c0df63d99718b4f6c5d8e68d020ce18b365ba4f1d1ac123d3e6cb8e61b4c09763900a4a6ac2a4cb3554ddd9885a6a137c2bdc44aee55718059d2389786fdb577eb448d923b542272d8b0801b60ad9845424b7e2039d68b2fd3c32352ea0bb44cf4bdcc80ee7f4ac04eb85c9c748222cebd157fc225804266229a06d1905502dfc35bfc01a0c6397c001553b0857c86c2753e816a611bd266efb337155f8362ce8db53354b35cc1bc071f1d648959d6ebca23a791aa0d2383c7b269d081a8e58f4f3c18b708870a922659a1f6380b5325a39597350c36d8de85a71b8c385eed01f22e64ddc29ea6e175c7b2191cb756f5cb31719a40651617b87ad60d462fae9b7a21a572acb4bb22341333620b25b8142dc676f9053fe1821dfe9960016c3dd688492336f96f1aff0a506011fdeb7a24a23ab44ddb90660bd32b2825b0fd539b802e0b7902cf5ec95b31e3e454387394d4302ffd1dd443da4c7e06c0c0ef2e7855b96a7873ae9a4ebcdae5be1a9630c3fe2d62e055999c6a000375cc25f1a93d8c91bd0ff163d5c20c51babbf9088b6cebc3783f5c97a6195d7a2aa2005b17cdf982fb9e3ab78badd2121a33899bb10df2f41be4ffc9bec3053fd1cadf9823ea3bd6620b86c144ad52bb25d2217dbaaaa42346263b7d9152e5ff5e01dd38d240a659f542027b8d26d793c75ab4f25154483a06ef583e124764469d028de91f6cb52153447984c22c74b1c2c965eb272a5a991673c77b1ba4176de619b3d77de70b33348923e5b313ff2e0e1cf3a71fe29787ed80c3466b0cf21152aaf3a250a2ba318a9ddc9fc1e56075c0ffe1107382a139a51e18536829ec14e32b0896049be0fb91bdf900ff08d11b78dc83546c9d466405940ebe1ef68fc26ea9bf9b0ba25e11aa5dc037836bd2c1a1b0db8113e17097c8b418124fd8bfb8132af17617ddd1175d032902a55b4fba02b5c9932fab30c4cad93712dcf09e40f9dda6268e3eccd5a5ff92e66f160095fe40121eb5c5671fc21b6ed9227fe5a546fa35e4b04e0306b3258397f61fdfe4c4a9bd3de45f1871824a6123acf1441056f2c579d216029dcb2995d07673e11a2a7233953370efeae3eea9a125fc477b59414a743c316dcc64af3d8628522355c3c5e5920887a83dccae0ec8b4bc29362019648cb47cbcacb38a6617a89d5c42178aada22fabb6e8909293d7efb732a5ace81b501e8181da2c337bb584c9fd26d3437dcccdf87f2cab6fae96d2dd36a9939933f2b3245d3455fcc75f5b45049efc857eb731b0aa778bf5e1aaa17c18f8a4de21be240d779aa86a5214d1582a84662488f358fda5fd8f64a38112bc1579ce87352e97aebccd2587018c2392d13f0902156e76ac179699f9fb4632eda4d02d33164d3b4059c5b5c22179c2397b2a2ac403857898c117e3cf90aa9176502e8b58258f2521f8a5867f1faa18f177159e88eec7969276f34d78acd1ad643cb8ccc0efcd63583ddaef2c259c1cf1eee94b964e6f7d6b9bc6c299593ec1af6e8344383ce590de97e77bc2ceff9cf92751b37f0c2618e23389c03fe555ac60854018e07628885b85c36f112983d3a1259f83419d80364423270b94f064c608b5bf1834f3b365b87e321452811dded5ed69aff353fb82e948e9b48cc0ff3fa36c1e97e9e9a00dce20fc8bc24a722aa825ab6fa0f3b078df6c8cb9dee071b1a3fd1585a2592839f07b4f03df98b49a2227a420ba891fa7ab1b1d84a30200c58e409680e77383fe78f0ce3610cf1ac81af27a204f8ac7161e026661dd8c924f7dcf717e5b524edb58b8a500866ba28416d29aefbc42cd6a7f71b94cf7489737013f52b0df491cd9e6e6e70a7b9967cf785d3f2a67de824fcae9852e60167ff4e18f0ac2de17f8d16100c51aac4f03686597c0958dac8917617ea5fd2eb48ae576a1dc68f1a33e887cc0017f6026a0283599afa6eea17a8c9d2977db909a25f796f122c144b381601a0204aab1c9b1cb8de251dd400a22cfb1f06824a5faa322e48c0792dc7ff0197aaa4c71b0094d4d29730ee00d4b38cb702389ae5b81ac0a09e4ba9bc75fe15af12a6f59f54657cc6bf81da722815095bf24f9f641cc1dfe88df58cfb07aae2566a09bbcf9fb2328e961fa769b76029a55e63bc95a5e800f1842fb5d1c18b8eb994f2969eaeec1593b20f1a1d77fbd23282eb68830e1b7a7ce4ead73657d27c5d9f2d2c7b295685b98e1cdd55211bda326885ad8e6563953711fde9f038e4bdcfa2803f497436325fc73eaf342f21977ed7692c20a9985a2990091f60e501373dc2f0cc7cfb622f60e3a6ef9f388fc5bd1c9eadbd3cc194483d88cd5e87451d82502f0dc970e3adaf96067df8daebade80b4def281830aa5fb3a2dca807bdeae5154a1108e3f03ba137448db5e10ce218db706e35f4a6e85a582f35a07aa3e676deec1029b0910151a4911b142555f4a613507b4322eea563e3bdd9f56d7af9da5e48c45e5795e75eaccc00e093cdbb5ff70c216910f0860f792f891a6bb0b3d4205c9f6668beb1a924d7e7e39e041e2684fdc6ff60a609d767208d3c80192b3bef3a79b425833165654cba3e27f6cb1066af34e03c4277897985306b8ca58a1d08ef0d1e7da95beadbdb96baee6b0a0061968cb6849db10d92ea85125e5087f4fe9f0d8357c883a0cfd33db6b407e65ae85a9c5ac695a378a74f356a328b49a20a4500b0ba960b127c28416e0367405009a50d1fc38afbbb263f1566be45a76feca5357c2bfbc5222d7e40bd08a2b7eb2a725b66d3d329d423fe40ea11e43a91484f2e08d875f41de8a3a7cc1cc47b07d20df7d1d93c4e0d05f49f7a7586ef06c4629b51cda0b918f204a5dfea55258681d881a3ee8a5d23a5b0392c55009376610e4f5cb0e7e01ab47a8d02f5904fd77fdf2f8e358b639f52cd3555fd0b55234f9b182c9166c69c7440f7627444bd88e2a16ba7fa3aa1d799db29d47050a3385398a6fd896fdf0f492232c8b9836a0b69871ed92f575e28bcc0da90ba40daf517104eb074dbeef5caa9323a4792d75954c2e14a9dee5ca15960eaa6672d8ccf167551038bdbfb5fa86a03898ee21aa6e5778be5e93e4ac0a072ca35508f0b0ded42d75d8f00aee4b4a68ab5bbfcae66754ff5f4054074fa315830e639a0c5881be573c46174e09a23cfda31364c02b80a506e401dad884e112f010395951a87c55b1bc724650840f07fa4dd049fcdece97756bed28fd04daf4eecd9eaac678f31df5662d7056032f18d66d529a6abe489c24acfe16e1ff118f2a2350d9365ead7929894556e8b5d110ab29c987e614661d430474dfce1d0098257bde0856c6587b614c742d0fd540655293fb59e3aaf3ded6eb7f723d92afa9b074bb074ac23428ad4a752e53b51f829b7f610cb4a596b6b970f465da3acfb507ccbc9403b44749a54da441486c9f597d5af0050fbe301366de7e148eaeb469eea388d2b5faf60a854c75802b02db96dd6489a992ed94c13a86429bf2c7e0b51d10bc9877b35746f3fd3128ab35169240075f922ba514a07f05975a7030f0e8426588fc6d771943956845ca63fee73ba0653c8707cb597daf626a01f76f4e10e5f5d6e573c1217f20b2886f23e47d15ae321f42e21efad6f277bc11c53c91c0f06fa85fc995b48af1dccd1da0468b555dfc335d59e9bc8567ef91c6ed66fa7f5c3a1aefcdb2b73e7c6e8a7a19a03649461df810d975157eb8e2195735e0b81a67177be9274a844b64c1cf47280be4be57168d20500b84fc3577092a0a06b097bf88bc18cce8d19f937e05be5d1e9ea794a050f37acc1b50910b263636f68b70cedd9fa6b841329d6fcb61ca9872128622b6620efdb41a1e78bef713accdd30dc2ba9439ed36477236e86961bf89885b4dc6f43abf898d54877336f343fb6a0b123b563b9ea9e627b0bf924ae2cbe51154eb422718d599d48a7f8628b9969f1032d6ed1a0cfb59769a6a6e649a2975bf51822ac3e24ad57cf7d62b7be755363615796b391144cd9825d6aad485e2dc2f680b4376466040ff2001bb8acffdefaa82d7d81ccab99154622ee30c0fa73bb39dd0745e6e8d1f52085f189d2159c4b7653343ed4376b8ff281b993d1c7f9b8dea67314f2b7464032612bcd899280fc40b97b2184e2467aceaf8aaf1f55caf7a37466ab7d8ae500ca3ce16301ccb75b468c4a1f2d96572ead6fd9c4e9a36de87ae7a475d09c34c497f67c4d841197c12c8b8d95c006286df5ae1e7c1b076f405da9468a18745ef616e5c999ab3224a0471703e565771e01076a5459c88e34cf6f19e53b2937bcbf71d178d2bb0d095c5c3663397c0d8ec5ef867b244e24deb655026dacc1914cef74c086dc01b21e6d146e2df4426817c4d829555184bf61bf9414913572bbb31df8027fed1d3ba8beee7a2476e26661a93bfddf51fec33630dfd27ac69972809360d69b855750b034810c6f86da3f28eb6dff69ebe19ccf41dbbd5bc4e484a98c3f374fda89e68d6b42fc65b178d6a7a3af992ff339d1cc6bd0281ea0f756e60196908b1594a12fd98d4aa649b12e015c7e04aa5283a554201e594d07e939187ad2ed8095cbb24a04be01b183e19a3d4f61ed867fe86d2231ac5280f373d6bb9f4a4510c0530394c5d971830e0c4dd916bd9d81f91887d20ea9386c1a9a701b69216def6e5bee2d654a49066e0a4b0a100a177e8e89797b7bb777cb181b065f0c0c9b3967d5d143def83de4f52c7b9b66414dc3309eed35ab15bf8e966d0bd4ff93db5623b3dfdfe9f3c3be7e3de08d339e80a680c2ffe86594a52ea0f0b126bcae8462f4d8770f7f9eda6b940a38edbb1a594d05f4a40c7a41e9a56c2a204b42013df9f23bc86be49095d794aca49ba86e120a51bdf2a54824fa21977446541720e510f97208bc21026f7e9aa5bd947275a56875a5a6699a267f3acfd56a5f14e412d71ed79e36dbd3e69c734e4dd3e6a437a7875c25bfa540e30f5df91d07580345577e3b81377de5bcc3952e822b1d0557beb01fccc371326183315fe692a76ee7d45e6c24df4e98821c482dfafd8d36c0e12f5b52a03189788fc8d68df1dbca561442332436f391adcc07bbf0ed10861b8221fa31cbb517278ab6173fba8072e68a24d88680fc8fc05184ff0dd415c226862692317bb8ad9ab59a308a686f7233ab45b4ca7108817afc2b181e67c0c78d31b359d025c622f0478bd5e836becb7414eaa32fa594b25911c62c58010453b46cd27186103666c00f025d36e20747113384e02364ddd12afed882d8dcf220409b08a7bb3b13604003ee2c3071820d72ccd81022cf3927f79c7376cb5116b3ce3af99d9472520abdadfc4fc594e8459fd554b44170af05b1bde8450f2fec9a244f5cd750f8dccd879d73f5eb2153a998ea872e2526b3166c28182a5df810a515e56bcb360ee33af97abd5e587845e99f61ce9e650ed44ab67e7d63e1e5bd5636af1896d2d3c70254f57b610c41f015b53a1770bbc4b2b9914a98a9e336510945d279ea76e2ce9086728a820baafadb09b086d2a602356529ced3e50455ba1dcc455dae98655a8a0ab34ab672a2b48b9ec10c9358f4234c488262a1a46e0792dc47ce75d07b847de4e688a40195383a5fa6518c0f01184000e04c7512684fdc7e67c1ede714dcfe00c01b1fc18a711c488b15031b2700e02ab8fd1fcd852878e127f0bc85b2d198f50f9a538c713bc928693c8b3146abe22bceec2877d8f993da3f2c2f19bd15dd1b8b97bb426148c4b9cf6e47ebfeb32b18319e8c89c5d451706e287412d7144a5cedca66c649c44bda44b593743b1aa78d481d6905cb9c362bae449f4b748a8ec2b4c2edcfb6b024baa6aba1d04994c42acc764d2d736e7351374b1273798aa2344e8ee358d2ac7bc9bd949ccd5a9b6de820fa0e25e9fe41234ba51bd3a4281c775974b5ab63ec246d07ca1d393781c199b508b3eacea33b1a9408fd1f1d0d2d0d8b776298dca688c3e4c689bee505b582e242b9ed35794571324dd6ed64eeee283468930cb7a710cd6ece4c3437aec3ba917cbd5e58788d44a448f22dc6457721ba8b565262d67cb81dd303ac991b26554c11b5b94b7cdbaf7e456e357441eb30dcfed966e07e3517985c14185cfa6512bd4a22138bb4666942fa0fa5a5fb8f76ff9956b8ff58b6ff5eb69147e994f4d2bff9a08ab12b20cd97bafd22ee4f4209d41d59aebdb69dfdf86e2f3beebdb3df866d5cfd71379feed89c536212933b24e650d01836638c11633ad0a1337696ee9333d82feca54f114417ace2a5a11450096c828201592a2f0200c439009c812c948732770664017184700159a727e2e5c277611c1b30909582c168cf4faa802c1a07887343c91cdc00592436401c1c409c06a602e214b1040d5c060990819f80acf8f0990510878d1871410a200efbf83009200e1f39520246c2344680330d9f9b802ceee1b30920ab63c6e916d334102118a783341344c09b4e019c7171b96c3809900e02a5b8cc82e22246503e2e4786c05284254505d7f90c211e81c57e4e0754337711233e47860067fabb494452c488c8884f86640847da49bfa11b6a39dcfed288d40c757a5e5c2b5c2eae94abc5c5e242b95a8cd32f6e01619c56228104619c066a2618a797304d0ae04d8701cef4cc4957d88fa23e65bff73c961e54cf8b71dcc7e7a58471fc4803318e23b14b18c7c3006f5c0970a683829a09932218a785a0d0926e220123ecc3478cb00f233902d5c2e2e2107a290bad0ed9c2c2f22e28d4a75a5832d44ac745f931ca2ffb2efbc97333f7611c771d611c4fe23f4cd3eff239e24a80376e0538d38fe352381a9e04b59c0e413e305402214ddcfe7e179d81f2bb155c8ce3af248ce34a9886711cc8a5601c5fc234fd59663fee37e9ca92dc95c7c09d5607f7f3fdc53891887c29619c58c4ba92dbef408c138dac2c01c2928e08e3482346e211a09701c12722e10e37b2b23c28e1f6a76474b8fd279494d88a554a940de52b5d1df1b997f543e24ef9de418c138d6c4c1827fa30619c788469ba9b304e44128d0067a2113b4423b73ffa7090c8e7361ca04705f4e270fb477e440dd708f0c6cf006790308e33611a384056153dd4d9cfe9e06b88476eff96558efb8d7b9fefdf55ce7e3b5ff6a2201df14b57becb99bdc681ac4e38235d7a74a5dc9cc13d6619b6995864741f32b5b9f1a65519cfb3e9a058b9aadfe370801c6ee362585608a19afc1cb163bb90697a260167469928d36a4c7b7d4411ee11841c0acc7b70fba50be1f64724dcfe1d0e84eb3c4802de780ee08c13619afe231ec50ff6b2bafb6793e77a8577721d47bb6e27cbdca543755cb7b38d3a8884315294d90c576d8f711bc6d88c9f9f1fcc9f68736618916e275ab743873d4b97af14176c319ded88997362589665590685b249b10823046ac1285b136d13fb4d56da9e9436289ba8d9273409be936b5647ab848c50c4310a4cca1875b8c8c588c9182336b58945202226658c11fb6cb6c4e24cc46426b1e8401b63304c27a76f0d00bdb6a13606d6f2fd846285d30e145315502e602a496142a244a950c200254d81f2208da440cac0a8fb1925d17151e834c06d50e07a6ca2276c1b106949444a68d3091a0766d684b9448631c12366d32c79e57b9406881d90b100ee233a01da037046c680371cdfe18ccc7e8ba22993ad3418919aa48cbf165606802ca007ab00836f0a0067280bfbb15c185c357efff8653f2edb609c0dce7b1b1ecba68d8dcd006cfc89cdc49e666183f006b2acb8f04341950b4b91249a73f3e8439b56200ef43a6b715754e5842373edc7b2e2f6f3c4eac773b1fef81d9bf2792ed3eb72a1a1a1a18c94d5b43c84138038ab15152c95870f817ef80f80ac9487df807e1b2f5ca885184c035926160afc9d02409c18a6e9af81381ed3f47b5f002e7cd8f706b2a800ae4c0f2c26144aeb0bc439314d8b1ed5520fd0aace7e6a2c5f7f46b35c2e26fff38bfd09d6d8c03e4296f6d84fc88a79ec3958d3f2d833c4918fd96f474c4e7b33e68cf6ba875a3fbef5b796dae2b59ac4f79897c5e6a2ca8bfdd6711997c35d1b2e0b2652a4bdbe98e5213ec45df6eca27a4bce456d77d1f22d2a1771d50de04cbf641b0c619a18cb44c0c0435c54785bd48fa9500441e9d86751959857fb1c3c36006b580450d5cf3d2e0258c32c803d2c80355c056ed2aa2a54ce036c123459d1ac56d7d86f179887f17edce4e5e1ffe7f7e56d8301deffe721cdca52d9ccb02e089f58646f0c62728eb25ae1fdfad1247c1de46331dc7e97faf11b6e7f8ae5675763fe019a85444cce8cd92ddf2df6478c4e14a91a2c8f3d669188b9d146d8daaf60d8c458c1b089e1a8159514a97d8c27f3319e4c3da1984a145e520e4671154cd3ffa2a7db8d0738d39b8d221c010ac82141c43db8fd3980c0838b0778c339e02afaa318c2e6c4b0696f36fa607bf8150d21fa17ccb2abf1611f8db8d963dd103ec487bdfc7af81559ac1ba287903666f6f308a15bf7690f7ea7c0e7487b10be57447634d8aaecab54ef451eada3c1affa1c7717cfb2c6ae86763d9ed58d333fd0ac0010655e709d1dadecf797c6fe6067ec4bc6fa603feab9d0e1bdcabeca7b95e7795e4e7f2a296d5c7fb992558579d9f7f058fd7e5cd5c3eee319723f169fd91dababf29ec57b9efd78aeca7a5eb53dd4efc7d065f12eea67e3b280ef47badb696181a0311fa3045ffb9b0cfe2804faf5f5cfc6fd58fc8ed595d73eec6a9caefd9c5eddfafff22f0fbb9dfa396d6dac9ec5cb8ac4ea7e366efc19ed8ed56551e7b5ff395dab8eb7291add85f9eec23c8cbdc0eaea7879679b8a7f84ab60b449dc988f92c355f0932002ead87015fc0c100175e8a3581f3e70b80afe0c57c1e771eaaf5982b4b301645a7e79ae2f6fa25fa27689acbebc5866d21ef419d022438a0c2132a4881683d9096996ccb9188435dee32a0829f41e48b21f2ab35dfd7a60b50776b38f2da43d08df8966b955425e7f8809919be698679e45db03bb99dda673aa72d0117aba1f07bd1c89cd951feb37e346e8fcde85d255f2339b7ba4599845c2e6c6871c39461b1d161bc588b7ca3f0dc4b6527f746b0a1f9d2830d4e7dccc264503fbd18fec377aec79523688e0d199cfa3332d0771157c8e2d6f646390f620e90b947ee9e1ca5ffe8a1e63ca73958f71f55b5d54cd4ab5f4b4a6d8a66ccc2702eacc6700eb942c0bd19916f2e8981ee53f16b222e3f34ff9946f35900e324a75a69aea1eeaa0fca6f5c0ee6987cd65ab529f68afa73de8447bb0a73df8de73b270a2aea9d20a2bfc28dbcfdf5b36a02708a43d284f95af57e8baa47aca3aa8c75bcd020251de1dfd1d8d460fa36b4a3f1a8d46af753ba3528d4eb40a3e853fddc76bfce53eeef3a16093f6e0504a109353ec0102fdfc051f4e083ffe007e57b9487bf0359420fa978bf019a8e0407f65ddb1ca9ef9152b03f11058be12f2be9abf1dab6e07e3caae0ca70a4070e96c2cfa8237dc85402c9aad9434ffc4e79f1dabbbc3d5de4f7c7e0fc28cb8f7d73ea7bd7edd8f5c2b36a154e82afbf1a04e0a82c4f1b31fd594fc9103b5073f8303f587f7f397025c49b3d822b1baaf76a0f8614fb2a9f8a34deb76b2995928e6679dfdb1d289c23780ddcef6c02e67fda5c37603d8c56c0fec8ab41830646c5657d2aa971b60660267c6bc882b69157ce86a16d4f1577b10b6bfa00a3e9cf0bd070eb9d08b5c88fac13c1c79e20f9e9b058620a534800fb991be0d57c5df9a204f281fb7beee11426a1d98fa05ab1f0975a835d938ea9e1e696d603d5d83d6c10ffa05376afd73637684db7055cb79b82abe5671b82afeecfa25939c9ef452278a200a358d5c36fdd26c4fdb1c8462bb87da7f51d57e4e4a51a87f9deef11aa82364089297d7c4a0c924cb3fec8acf3d5e3327a5b2877b4c4f492413ed9edb6353a37f52cb6bfce31f61c36b32ed23177b50d36bb697f23794cab77bbc86835c157f4e4a7ba240a936300b04c8f6fd4044af3dec52233bfaee797438dbbd7ddbd4e84bdfbdc9ded09e7bcefa10bd6653a3d79ef39a1a7d8f4a7fa3fb92f511c5a8fb91bdc171ef5047444ad9f07eaac3d1ca1ce43ef2918fbc5fe5780df66f0348f6d8a87e2b79a385603f2f24ae2ed243ba07c361a37b7cf2b43ca9e0fbc3daa2da7322f4fbdb198ace09fd03524a2965665112d6c8e84ed868acc91ecbaa1042a0f1617377d30103c3fd500fc5f50154147481aceca10bfdb4eb2925388222c882cee23e868fd8c1e3080f3eb93231ae0b2de1e3881dd9e5bf9b11cd82378893fe83b92e3770741fc33845b880371080330ce486c8358b030247308d73094a7692bcebcf1c04cef83b15f4831c64643faec1bd01b7d98f8bf84f195cff6e010c96e0155c7f1dfdd80da7e00891b3e0fa6bf6498e20337be624a2bf11cdc2eca9bd873718c73e9a112edc8ff2471650f87c4ad24a1aa80a6a3f97cb9019daef29d6aff6d83690927ec80f2b7d3550ff10a190eda684b6ebf217d960cc87f54422f066a80804f8af8fd04368244e8210e3bf16028bffda074f9806e7bfeec1855de4c26f1c401caf82691c8a0be50cec1e999b67a1ae8942430370f1f09949b35a3c7c0603c469244cc362b8f07909bcb10f9f93344b716be03f842902c46920d57f7c840b9f91c09b9787cf431a08160b69d68a6f964b3f611a0fe5e1fbe89a280018f07bf4129d0188e342201c6e4e0f1f477f302800369a957af8379ad5f2f08780388e045ee1c21702deb0fc0a467f3e5cf82a88138bc8340bf5f057cd5a79ec61567af8311ebc51e96c0860dd897f0c8b630fc03455cc70d58cfce14532f643ddd8ef79209145bc867bfc877cf801581b8b64d65815fbb014fc72153761b5806879dec310806de248fa03601d00968998158db72bc98f4b0ac9272d29249bc82a5c2820ae24366da47d8e308dff0caf91f407fbd119fba1642c0f66a2a79db00ff6a3d7815ef4f4135739e3b8134ce34d18c755f6a33e4e48e1bd5eed9289eef11a4752c45f0a09f1d01126ae23e92b5b8ce35e805eb8fe489050afa20a254618c787868cf8308e3b71e2738471fcc99323d1d540d1e58471bc4993ebef644e2718c785849c904c98f8c41efc1d89bfdc85c445ae1eaccbe5ea895a5149b5b098524e2b5c501ee6e5371675f1b0db69613feb6460d7450b51ab8a18dbb23ec4388ec49d308e6c2169396942adb20dd0f36721e520f340f3c93ab4e0d0047823d90067bc8aeb71405d217eb710deb810386337d18be2e5d99e4c33578dadfdb6af3ffab83dff68fb6a65c0d8dec8beabc9cbe56cb8fef165854b4ba8d54231a54826b20893eb8f9d9a44a120212116d44a85ed8dec279d5c7f9768801890226cd50067fc55ac237124b4e7edae180ce3326497cb404ce3cf1e2fdf6c8e4488ba801865bf5fb12aa591a76c8bfddabfbfe52a59c4554f1e85721511ba6e9f54fe531dbd2c62aaa1d4f4df74217352a11636dab8decd4ad7cc01fd5cc9c7dd4fbaa097de77c09f5beacb4a52b2291a3657f4365764392924eaad37515657edb94bfe90b8c77ed3aafc912eed3fe9ba32495731a9b335d7d5a8b339d755d7699d0de3baca3ad445a3f939bd6a1d2c85362ed0540d920e7e7ae18597def9f4ba90ae9fb7b632e0e5e777a106c2e7c7ffe466bff91b5b1df3a74dd180b16a4f0ac12baa9f1cbada633fbf874cd1e0d6cdec695ed8511cd0cf95b892661181371d5db0194dd654c10a2090c38c36f8022f813663d79b9980e90226b39f31a3bd4e8971f9ab5159c1585cfe1b3d5c565dc6f12e34c706d494c3f498fdda882ed9af8b609c1d398c202d1972c2c4a58680f3a043599aa094feabc035fd3639996655e07637baa5434bdd52ed973de9371127d3ac0f03b0ab91dd0f03d7043316d48a4aca09258667ba26fbf18b1eeb82e02f7d890475328f643d8cf3d17e30cf28722c68183c3184065b6f2f2f2f435e86746f2ed75bb4da7319a4d53ff209a01f297a49cb09d944ca70e1725ddafe71711908f48b4f6e7c12abf016cdc9216a68ccc66b70b48d4d8ca26eebb8ae8bd16b32cb89a44d66977842234739c479a447276c424d9824f971f11022fc046c2d0167806ec0b059c1194877383803234fb3afe0035decdc735ce53fabfc71278ce6a3e46ad03f834d66b360848017c672afd56f52ac7e281ced49ee6127a37b2e071c28e949ef9fd34520b1c291a3bbbd49bf712723e65dc85c17dfe34486615501fe31ded660d5e10f6faa867fbfdb0df4edd13eda1237d278cc4291baf1d37af6180c12253e47da8791c0d42f76b7dc80df68374d42ce62bceecc445619887f07f1db2fb397cf4cccce1aab307ab8fb0fbfb1288e22802c71e2f4f1e575f4f3dd69c9c1f22e2a8fd2919969402e9d5822f6da671f354b039389345296687b4466f9d2a3b89c5852261517138e1c397c33551cede58040398a6839bdd6a265a7d7b4966ea705fb220693612d99d5d1d2623f9e1c87d1a1b5642d2f2f967d3cc7654a99d5e17f7aed79a3a165d8778d3c14102dccaaf6b005e66772dcaff43016b657ba99665b5aeae94d33f5b3714b2f533f1eb7f4388ae87e78ee07eef4db9671b0d332aeec41f4c3bc06e3d3550ac8e2971eb6577ab13ae29f76523e4678bf1ef19ebef4b162dd4e8aadc1f774fa9cdeb1a1b23e787454acd35649927b7aff2544eec9c97571b98929a4e026a640c28d3228373185916b80cb4d7ca1c9e5d151b9ea8b9f7543f8e3982fb23e787466b459674365f29a6200cdcf4fd5d854d587ea3d20fa173f6b8a01a29f38443fad075ebcc8c628bb21fc4f9fe3a6a7a9d355256bd39e2c9daa4d4704d451f1f030fdc737686e887e5a1f2f5e64a7abd8aeba214c1fabcd0def7b789adaf260c7001dd1cbf8c04d7c21c9cdeacbdd5894f3a0f2ac7dc9c5a5e55b52a7a73cba5340539ac54c258561d8375398bde1afd98fc7e5cf7ae6a58c32bf6572caa4626cf9987a94a7f58b974525d5b2725a5959597171f9951517179795df562a1246927da908c4be553ecbde4b3c4a2fd1bf7e8e8cc1bcc09430aba3d4d128d98cab635ff21879b00603636934ed67be2b6675780d151a375a033cd7f967a5f9ae1f8f07d058b8691c56b3bf3fdc9847dc0fe5358bd95255f995fa3fd40fc745f999faf1b828ff5cb7236381a03efcd609c1737db03da0caf3c3d48fc785792ce53dfb0dfb58fbbd660ad0beedc70f980f5d05f391865fed733af3940a1f905955f447d1ac0eee6aa8fccbb3e5cff1970ac3f68379ed515454545e7ed3eb988dd35574c05825fc7e4bdc78b555b5990235fdb732bdc388d75ffeaa59b1db89b14e2d5ed36bf0456d79dfc3ab2a083c1b85e97ba84af8a684be14893a1926530fd60329ff94db1ba217bd4e4e2f217aafdf9c2ff2fe8f6d0b93c9f4f2b76f7e7c4d40f8f73b9b7a481791492847ab84dff8ac2eb261dd4e77e4ff16e2951b13d29e7cafddd39eec9e2bb3cc2ad1377be92f65b43b622e9679e6e2e36ccfc5731744ccbbb02cbe454c65f11b8bfaf0b2b0b589b417746160b2557b18100614e3aa3decb9ee8040d731eb9fd332fa53aa5d7931bda05e56bcbcbcd86f87ccad1f874c41ab24d29efcfa398dad9850d8afc0b6c831cce9ee76fc73bc56be29d96355060cba439a888c4939e170957c4ce6e2882f57d8cf5facc37ed87507b1e5961368d0f5ce71ed616a4c7bf2b3fab5dd01832e5befdb932cca47da8311d87c9b420a8c5c3885143ca1b2f212f529a96779d8ac2f5e960cf8b8f58515a0bddb544c61df98a561a33decbf33cb18f6dc93befb5d521e95f293835d8d97f7a100b729ed9f6b4a7b8c868df660de467bda630f63257fd8a3cce0bbe25fec977ed3b20e012b3e6bbb29a1fc91c68a6fab63c5675687cb778fbe1ddb4bb93cf7ded520b958d85eca7e3dfc6bb1b13d16fba6e76e08d4106e535029cd31855350f6f340a7fcc65d8db631dacff43dfca6a4d895377d4a5d596124cd5a41a2f2ee296ffa2d45bea9760a68cac34e46cae7f4a642b21a29fe8645057847c35f431942bb19a752a38fe855097eed635783f41a738c16de50f884253871e1138c50e4a22e37c1448abb492eb28df69aa3f61874ed4f1f3b1a365a7bee617cee3f1e1595cf71954afa94afc7e51ea57e3e2e677aa26481a0f4318c44f2d104dadd4bdc8ffb1e7d4924d2e734b3fde2750ec2db37d077647570dfbd8fc8d37559d639b90eefc75de5be7b3413685cb5c747da93dbca6b5c57be6cebe2f922cb4868957c299f7d5c2533b9042ae573abad7c1c12e847bb4c0718c9816570baf7ff709ed88c860dc66c39da67bf6d0da7a027d8a52ce5231389b2e72046b098a5c23d4e3cd135d00b3b98689d7e9196e168d6c7458a68fffe94e6d2acafbd946683e8ab01e9a0f8c455b9fdbf82d11fa36b601786b87eaa656ea35991de7ef6c7ba9dad77726249f4fe3ab2d7fecbbca3a1d9537b7c6a8fb76a441f6173b4d7da7b73cdf2cf692866f6fe5d0dcdc656f5671683720a8a39460496f206de97b16b62abd56a0dd1790a6b9e76af4eb0b57777378e19421c208627f303673411fafdc7348bfe0d32c284bf01a195e567f5417ffe0c991d361da43dd8adfa63450d6368f958791f3f4e646042109ded7fc00401054574583e7543e6727479af3b646e4b8f134388f81c690fbeda834ada833432ab532a1b8d6a847390031db8fba226a0635a0cb8c75b2f9e3d86fd6884611846bda6f418f6d37b603495a43455a85382ab3bdb73db4bfc054db6b399cfbb2acb5e1eabdfcb6fdcfde05ebd5547180c8bc622d0cf7d7a32131469b90abecfbc3efce8b39a65ef199d5e53faeca17fa9fa74cae362ef15ab3a7334fa1c1f55162f22bdb73c4844426d0b08e64130985ed22c20782345decfbad19fffa216fe6c3ad01fbdf8585f3cbfc0303b03fad74366a48f95b4bad2769fe35efd62906fde91a87eee850b3b2b03dad3d3d3d383ba3e3e3eee13dde7155de842d267cee4c25f595f4223534f9506a12da427239148596da0977d25af666540a42cb3d6fe2683e0084b39ad297fd3d39fb5f4f31960b2f44b76d23a5d9561d9edb2d173b7337ad96549547e6351140c14ec8240bdcc6f328f7aae284f233dd78f2fe9797422d3bf319f5a1f51f8fb48f197acdb1bf3e953eb837ec9faa09608a8b372157c1b57c1e9aaec7974329469a3e01eea986af03bb367f6db81caf19cee74909e5e5265ef590979bf1cd71fc56457293f4af9d8a67cffd8785197593cc36ec606e1c3b3e8aef60f11a8fdaf5db693a0aeab593fd007fb2c7e8bdd8e5b20283b37b77d9f017df1f2c5431b2feac7f7c58b971fab8e1dab0b535bd6fea1eed4da3ef5f948b3987d9a2591bce81ef2d6ef4e46fdcaecf92033f383bfe03a0fa59a1ee583675f93a2febdeb2fbf6375ab127c6b8b8f79d8d158dd98e7ca63756354dc065f43ae0b3fb698e81a0e810f64c2134f3471a0cf872ef49e29e0e633e4e47e11c8851e74a1734fb3e0bb13cd325de83ecd8aef5d103225e77aca7bed81dd53ac5087f2bf10bacc9cf3889eed3733c48be787321fede703b456078f461feb678346477a6c4e4a51a8ffcfebec67c3c6c51e7b8e32017cb91fd94d099576c7aa8545f1bf7897bf651c577fb6a9ecf9bfd52a95bdccace4f7ec59fc8671b2c6e78a00ee47f2a3f56ff1b1a3c17db43ab81f591da88f9fd51dab4fda1dabcbd9887a16ef5d0dfb280b676c0fbf2fde3fda4f26b5817a49b7a8bd0638d31f539b0d4cd3cfa2dada4edaebafb59fb8aaff2b4cf59715d67b20048050ab6b2dfb1c77a9f3fd89af9724116f4abfbe76c3d743dea2f573a0cf9f74f57321b785be18e48bed8344c74c4e09db47270a1f721e8f3c9aec1fdd293f98a701700125d0f6588bdc6fdeed705c6421aa5dd415b93f14fdfc51f51f8d2c10941b71dca96e4ae86f59b7c3592068e4629669a89bbd569140ddcca1c0de3b4cdad8516652c68979d6a239b9d8acd82c724e349a1306cc12b2b0685a9489716ec7306600544d63614149c79cc4f0063ebb9c5a9e9abe7b6c2cc440c6c65e1b0400c5866efff62ce2e0f9737355ca60fe435df81a2dd97464e8c5591b26da39eb18e08d0c783538c3a43926cd7242fd9d8b0f8708f306fa4df9f2e306fa4d6cc54f1ca25f14e24e2c9736d02fced41336b45c9884c68031653cd4cb55a8872f31c691a89a6132ca0f7ba16a57999446c598ffaddcac83352e02a86a54cbc7355093087a08ed2119879270a6768dbd346dde2962f969b2a18a4c814635d0ad3b09c534d02f8e50d0d0ac18177a42ade82625867df5956e8779a565688c631da4e1f7a01514602045c95b1dc45bdde3ad1632c455aef9435f28a0efee214141bd6432a14d504e1e56e101593161c34e5cf8044a89cbe5aa7e2a39f29da88f42f4a3584ff710af991ee6d3412d77790df6c27cbae5f259e1e3e273fbb117bb5296b2587e15fba1825ee8f29fecd0ea9aecb55982f5780df4ce7e1e17c4414c50b3d96f2c258941f02663ac6510bc8941887e07e0412a55906c1f03ac61d634ff272c81488649d3a41485faf7485f40199dba2952a850d95a946bb5b07442f05c86dc1a1ae2b12504e4127ae8366e2ba233a026a528d4bfe7ad561e6406166e07e27814624f9018b105e3c9ed98884db9b978747671cc0db0c6bf4f0350f97f15ba78df2ae4a1c79b636ce1a2f0ffe893285ffd1e1499d0be73cea07f0f62a1d5d7b897817ed3857b12e343a2cc8338be913f3719f0b680335e3d88214d7c02e36486332bb8d8351ee4aa8e64a05f7ce11c668ee139661cc6f1efe7621085ed598c69f83766c6f1db1fc54093881e346918e0c68283cd8ab9302882817a106461ebc3bcac7049b5b0a05698555a8cb0e6993f984762379cd03416168c572c2c9a1667ac342ea1b27dee26b9377d2bca1d04fac55c7682089a5cefb20a82f8e06e10935eb891016f4cbb9c2647e3cb0b39d6be9847f7c94d97f912db471d31ec0a5b9c400ca08b325913eca024d39a30d4448ea009570002f98720288101130c050a2f842bed731b7641b470d7f9e2f5163e11e87ec7a4855fed216fbb8412c2aca1e59bd33c18cb283618f359813e5db54069c20e823026c4e0094eb2cf9e8a2477fefc91f48db73490b89b1816fbc725c3f970a18a9e46d1ef14388d24e2cb99bc220e860afeb83c38e3a3efb66c4447922f751f20d0d3c8878580d0798c4b76a2325e8e9e648c4bb6753bcc18e5c9d1938c71c9b872f4245159e4bc34dcfe6f85e2e84988f4e23f1b55953a3a3a3a5be4e0aa3d4ce74575d1936a5f4db48948a4ca17de9b9f5b276a354bc8654b03c7bbc96661d1b499d16c62316e5a868944bcba1c7399f94f4caa1b57a337c7a56ca76e6734e2cb26794715426823c4e2b2fd442fbff47086f4dd227da34e7643f91cdf6af6a42abf543f9ec2edac2201935c941fa1bc8c374341e130ae5b90a6e10dec7f2cc44d2e0fb1930b9b89a9e4e3253dfcc74c520f3bf8023909ffb0141532f1f11331ff4125bcf21f044a09824c5cfe8355702b9b27940b0c9b1810aa4188063d21280a17fea0800517d296814f12aec185496e70a11017f6a1913b5c38d4531c116373ed57733f940b7dd870158e11b64657c319fa2d0b7e296de5cb2579258bcadfad274c180d1da47bbad541580d6760215ba3bf8494043d81c99325435120433f4cada3d1d3d77e43b930952ffd19bd60aabcda0f7f7d0929097a0293274b86a2408647c1e56f16bc6400d44c3cbc5baa4628a4aa5f28f4a75e6a37fad26f28a5ca3755f98e8874b6ca5b22d2de4bf5619f245c0376b9a0c043a20fc9430f5c56540e05c5024139be2e9c75a9f2a2702b38881066c2c81d2e7f0fc9430faa70a9f0a66af4bb7128dbb652f9729b5d692f8889103be18527dc3374790a6e41f4a11a3cf4a358aae85b3614910855f96e36228be267897184fb00e2b292cb2dc5500d1e60c0bb52e1ddb01a1d53a924d28bfef41b4ab773b2405092a8d409c17349f29e6cf41bb1baec5d94cbd94fd44ad28ad1ff793297b4ba24d24352cc25bd10e9bf7849dc25917e988644b2dff65b57a37728f5f42d9b9294df52ba9d140b04bd9d775a75d03b55d2a3ac2ee9bb05e39248492ee9635cd2f7e0130367b61fd578f96ece952afd1612e53baa7c491536ca16b95195d7542fe94b1542ef9b97f4b4f2cf2591588824b151a9dbe19ee76f557b118d5991803f37d332793b28e2775d740b6b18aaf84990d443627e304f470a9c61005b84fd93da6c11de863ccc324c18aa02ab993adfa4a2e77e34deef04a18b0a183a684282a21585f420211732e1892661b8dc0418c07067348b9b00831437be10cd2addd89db450cce7e9767e81668f7d4aa6a44d2d80dfff066c1bd055f70645b92a7e81663625b1ec8980f119c03ad9b34e667d444104d40162e3aaf8a82c7cbb7fdbf02702eaf8338075fa59a7ffb3812f8f82e5bf46a9a49c70503afadfe8c2ff68a9e3a0cad55a5cee8a1778d342626666e654aabb99b939954aa552dcc2825a514939a1984a9434eab8ad328de60299e67ba9312d8cb1c1052fed8fbf91600c8cf69c5ddd6ad7e41cb625035ed2c712d0ed33bb8239bca63f0055fe412f088ab65b2e9eec7276519b666def39777ecc5146517491b419fdac7e5f573db02b3fab3643a0f1218c6661560979b1f75fd96cdb539bcab2d943ca889f01036c00bb9bed815d99d9c6b018a38b661986b1c4a290eb50689acd89df4090d035300c2eff6602c9f50ed24f5cff0c8b339af5d97cab8b610f27c574c4872e91b7fbb38bfb01baded86758b6c5fe9ed19ee7b4e7dcda5aef792eec5bb5ac6883892efac1202d069e898cc8c1915decfaf73c97ad4046f03a51d00f01290fddf248290af5ef61d47e3cd786843dd46920adf214f698ed6ec1d66210b321cabdd68237dcf517f897e0ba0f92ebbfbd7fdd1a7dd741bc6664bd07863d57e9649c0fc1e5a000852a68f7e3b41a5147b4a9ede37fd97bb7b3719ca28f07e81c2da759076816e4562b6b390b719efec13c987cd9811176acb425501df1e79c7366d902721c734de4a2054ca8da6c8e8b5e9b33a317a52981f27b08366d09f4b759b9f658208b057af2452f7a14bcc15e2412d9af878c3da053c6fcf87603f1e54fae59f3a5c86e5825c9d91e0ade6c1b77f539ec49a48afd6c962b7af923d102e073d6ef267a51cd5eabd94cc54f65e0f685575302ed6c00f1cc3d0edb7b5152ece18beaabb067ec639a85411bd39e0bd1decb762ab029b411b894c0dcddbdbb80da61d49d50c8e7dac3ef8e7c2af0f34feaee653cf7cbec8761d6bb2032adeae087175e8869dfd9b62f6d841a1027535001930ba7d0844b6edf712cacbd713da7bbee90b9b557f23f8e9e5090ebd1979463f30fa97fa8446d9784412b15d1000000006314000028100c87c362d17838a2898a6c0f14800f7ea44c746a1f094a10530819630c21404000000000000022811369793ecd94382fccc545f925b450f3c508d09ae4f2e47d3e4717ed9d085884ca43301cdc690dfe1f99a5985000f9e6984e78b1604ec9df7e4cbec4f99ebe3f225f8b463300081a4b1d571252e76b64b0da5e664710a0518e9948669c25ae1af486dba049267cada98b3117b95ff2945f73c0ae65d42c569d22978de56356fcd74b744972a74051ed94e3c48835c44febd4a2e69c8629091aea7b93ee35c73e16e01c2108b303ff88283d288a3d05589b6eed3ef1c82a6f5e92e71f928eed57bfcad22d0ba1a2e755fd73c1dff516140d703ba2cb26f533c6798ff1c67609cecfe77a4f635cd590775365bff4c5ce4bc5fcb5d388e08d3b303be65fd22529d66e4503935113bd23e0a1e576c7c4aa95e5b3dd8ce701eaab95ace7187326f5020fa814e63222d0975025f5a13a1313c8238875cecb139da87d49e06f3a84d80e1e93dbe581bdb7ede9a7164560be7c2747e5eeeaa89c2593266f416ab1da59c2269455971f076040db3507be310c097959e4cc9939c23e177f3669496fe8d27ff217530c35f4059e37a7f53af81bdd09c84e0789f0f4cdf927fb54e9fcc407e6e52572757d54646e366ca49419543a5456d7e77d852cb307c60a1ed1f5042b3ca1df36743f23b7019e3173abb3b583a0b9f89321abbe80081bd793ad9fbe712bb345c60e53fb51cda5f81819bace60dc55cf9e28830496f8bd9557f3a209a2a8b3c79828c3a196add5ecb275d19bdc48d64d8a8e1f2e41563b23462d3e0cf7fba01374c3daa3024e32fec1c89298573ed34f5087283d6014004a1ca9abe4b9ebcdfb843e88aac556df60212da96aa3209ea3795898ee2c95a697a15411f3225613f157efd56fdfb6575ced0c7262bf61b2efc962162c1ee4ad44691b8fa03573041c176e2f2701115f9b1ace7b71122c4fce5e1f10416af446707aa84f5df2380148926f99c3adda178f22837621f621fdd979404b2d9fdeda820fc80b2e504450a1757419dcce2ba08b35832c88de16ee023972d1650df8f8dbcef97f21982d72d96b3b2105bd8a6b2e160e6c98411576f2b107a92e6fd2015c10b0b5e7d568974bd49b19ab65c7cef8c48938924548f454b98561584c151b179d1caf0b3939126837531116e3a6cb9ae170f9440492c6316dca27a38875190917424c94a2389fc462161dfce596d8e3e900632b5826cdef49c0e0451c2714cc6b6905bdc885c0398838f06733513f9845ce32ac9cb3d99e1f90ac059d3f62d5a5c3c27dd4b4e54523589c40b9849713550ac5c95920aa7750fc84305f54b5b5f858fed8885e02df56ccc640a83dda7a654f5150e4d875f4e705ace8ed4a012905d1eb85084c1590661583743d8cc09a4371e60483354c2b9861fe84f3e3f0bb1a61bab4c9fb6813b28c7ec543e1a2dfb39a391d012f19f12a5fe78a427a3c451557ecf71bbc810eabeea54539cad27dc1c3766e29b7cf291f3006164ce401cde8fbb2f8acec50b80b8285454b4e2acf73bf506a81ed81c280750dec419c2bf1d91f64b6bffda2d516dd9fc13c997ffa955d678f6da1476c2b51f0449887c0a32c9a8882fa09d9621ad80c05a59cc454b167a4a616dd8ebcf9ace4ff84ad3a50a653a1c9e8911c28d11eb7a636d9be30b9abde3aaf0fca7b64e7f61c6c5477bb9165af7bc99055dd2c4805b2d75ab1a74a0c5aa761d3c34e605da14dbe7404851bf6d2544af0f42ca45c3a5b56f8b23f6213d4c02f58d42865e8d14c588b211f9a43323a19a099cdc8dadc602fd10d1d219339dd8225410f11fe5f448db9ee4af9c693249cbc169a4075e7b5c32630315cbed4c204f40ec6e3dd7bc30cdfb8eb42d5129f1e4091f5d8e7ba84d1458ee89493ce8a6c8e53a404fc4db9cf9df9e75be4ca11b08c53ccdf2f098f986c84332179d188a1df6d2b0fee9ae3d156c015fdb64432a6720f3822033aa96d0099f8a71b5ae0608e79cea8c3d2dc57ee7a6878729058578220dd292e235a432f15933cd8fb467a2563141ba5ae978add6ededad08b58bd35fb7f9396ed85df2352c827fe6f12050053acf235f22b3070cdd81fe678dbe48c3fedf87f6fba69a6ec02a082dbecd49c72c6d02d244f3fcd11bb5de0ec074457abb03ecf17cf0b8fa7c8b20b34710106b90f46f4911a16a23e5e0edde042f0013ede6fabdfdad2a09c22755da2e8e7a063d005ca72328aecc8d050c8c80e64306182156fbcfd9f003d96a8c939578b1b2057e52f1effc4a7eeb4e60a2ad26f1be3958ed2a96f4d62534fba4c9efa8df40ea6f0b7b64a1723bb2fd1e0181ba7b2c6b7995d9569266dde9915d7c3f0b0ce4482c7090cd4a4a97f85d81fea1d2b5bdd9023ab08d59bfab7effa0efb7800932ce881e401ce156c22128829fbb104a7a3af504f47b3997178287aa3d9577118226fc734fc42689ff0c655108143e5e2ed03a560a613964ad7f25e185ed3e58a4253996e7c0ea7ac47ea85e82e1f1619a319793c866a80c43cd3a5598604cc0be9502a6a1e5693d598356c668cd02433257b0b4943af09106486b0b3f198a3e0b719e2c56b1801488250e011010ecc419c5bea81cd60ca3186de9632ac5c665c62e62c33e23c0e7b0d61517082527df5a688a007f31fd931f412b41eae929cbb5408de1b5f0ecdd364b8bddaf29bb361e58dcdb3311f46e19bb29b065ca52091b6867e827e6508f46e4427e275b1c008ee8e53a0f69d8c1d825812e6c937ef08d344285f153d074dd521c452d424633e313c75dba9dfd3dc223ba747c5ca2fa770e5d0e47b5f37279f2b940dbd4956a8f4899f5820ef3c07b10029287ccc86bca780a1c5819b61ff21c4e583c8061ec9cbe6f7118eef5c65c4265339a3912a96e275308f68aac8bffa2a3f363ec2c9d9325c908091db46ff2ac94e130285167285a2fd76b7d1740da6a661b8e2157282f3e468ac8238d551c16d054905b21dd615b5b6fcb3e93bbabbc4fb6ac171699ebfa3089fa4c3cb4e34897bfb171e5fac638b3a03890d5f39ec93e8d922f199f6c260862fb525149b6413ef14ae11208e80b6d9b62037d7002f4d005b7fd5989ed4e76d48c5951aebf2fd5d88b5d934daadab66bcabc06b16b2179b003cf454008e4f8df908438159f900e5d126bd0d3ca416a87cff12bcd851049a9480ae8d6c871dfe5e0fd39387e89a6b2090fb283c33809ad0cc4d5dccc004874e5a663e2c37ff81318fb40d47700024c16f43068dda553083c37ff01f727880dea988e8c613c389fe432e589c730b68c426ae061425e1873309a8c4091940ba408670cfc6fe909f66b4af62d032a27345c318e2279a046f831e1e4199194df12823cf7253fe84204fcec8b8e345df5f3904800f6e2691098867def874eeaddbc4c6823af4dee819c11e1cda8f199714c7cee8da8c95de9fbd4c540ce7e00af3e9bb8edf8ce0552e7a494b39f40fb193e336fd49ada63ffa71f4772562d76da22efd65fed295d0be5a0a9b6172082154e7a5d349e3f059b453f351d3c93275d0ac2093bb5e628bab598fb5ef4d3726aa02b2f34804ea5b42cfbb5a6bfa6f1405c452eca6835d6672587d7972677389cf7d4864e6e7b31016a4d74e61ba360b7b74aef111acafde6f1f5f63da90d3617be70da193d68a54beb41e06c08f8a733315066f4e8d889eee8f71d148712a390875d142c743099ef6d4a3188ea915a9849c46f4a358740ea5727eb5a6cec2c124fe3f9f1357cbc5194ad835c1c6bad0d4eaf82b673c86f8490202719d496adcdaab2cb59f5b3377a42d33e72ef8540681bcba3c07e6500cfda8d13ca0fbcfa948e3af5cae12edee7b5dafef579bbac7c67960c8f9fc0fb6450c7369e82850acf792ad10e3ce1456c6d0c03db95e96f3eedb4f5f5f43220848bff454441955ed90cc87304fec87c9a067e803f5c66a93bceaf1ab5f6d8e0f1b04113c571254b25918867f14b6a7931b50a17fcc84eff429ad32e4e7086142ebafd51a1450eafa3e35fe515e4fb9e28da699a013bd5ab35651380bded176d9804b7fa7985074f2567422b9fff5f22ee0d685603937c246607eea774b2f530673409d8eeb7572c54cb638f5ee1f116008994f796225f95cbaf2047cd2ef4b46ac3d1fd63474cd8dde9c467fa9fa1a676fe17a7eb8d91790a46de891a4115ce56f7f5361f55d8024198032f926892c4fa8d718eccc81dc3636f8c16ce6ebfb00f3f606fdd2b071f378f83178ab3e4e565b5c8fad647a2baf8c97085790b800d10e70c140696a1289b978d9925112990a23a4e43f06c286a21291510de0054274ed954cb825a6ff25d27828265c4f7afe0fb9c165e396e8152ed0220a5db9d0685505b5c771cc5ff762ebf9128d1c42883ed194395bb8b2e467c542acc9ac7d242e352d08a4259dd41510160defa9e27083eba302d8b4f0148a3be9f000e86eedd216d54a669324b1c4059941d3c496314fbc85cb03a57d215e89860ff7c4d2fcd3ff1479ba07dd6896c0259eac3766981697d2c3e9179dec1aca6847d15c28edcc55d232faa471a301e90ec414f5e55c98ec0a2619f2193616961432dd2be6c57657f8f6609632a751ed729cc6a5e3f44c5034650ce00d1fe6488b8ec8dfaac9cc896fa596048400b30bec59d0f2e4548f9cb69a099344a82d62aedd68839b0f8d820801dd6eb7e90a2a4e278e6f9f1e49df564f044922f04b438fd58a96e236c6d34a792c3213dc88f4fe9b4539404b6a54983363cd4af57022f02c4462ec5a70d6bccf134b24ded902f19d4d7938ec771056920bbc0c15e9baf3d91c332bb23ba056540bb160dfb1eec656078e0322dc4d81d688986acc1ead2d52fee72180ea2ea688d20b201033721560510762413da782024b1bdf13e93e7d073788fcfc91924dc2b32eb2050778a81f1d1ab14ff06ae11ef4d60dc4046a4620a1f7037ccbdfe55ee5fc2c2e4a891c06ba658819fc7a89c526794223b6d7e326f27f229f4d02dbfcff01f2425d261cf215caa66ccfa55c8bf27b94a8c6f76c0e2791bf2da9fc25864c679123250225f2cc394b961f35f22afaa82338d124ec6598693143d2ef0bd49294e69d1fb34a227f37e8193db6fbc231204f4adc4654086324867f3e87413131aadfd97941475240af46480ade131bf5f7a1c38d1e091ede33605d17af446175e8492912ce84ead52eb3298cf3bcbc728fb106452fc9f6ab937361e966e22eec21afffd45a919b8182beb0008eb2511eda22fb01baf522c10a885d91a330ad1b15c4ff0a37c330ec78cd83be02bc20ad220e7c6843b03a50418cc1a8efcd7d5aee2fa66d35cb3bf95d172a71c01b8144806f6cd44d8cc9dda2a6a53b44df5e8ed642c45d90e90cbc217c57ae0f72d0401d576dcccc22687444588a8e8d1dd9c40544a4996569b19156292562bdca53522a2dcc56b7903fa93889631ec7a1a17c4e656a52bdbd18cc9d3dc8b1c7ec59efa73ddbec4aefb52d7e7ef260273b74556152ae9972519748dad12c10201a2c5c3ad2153f7e07c6b9b8a4b07975daaf54a479c55873507c297566ae69b3435a16ac2093c642268599a7cbae9976ca01408449ad3409eeaf9c6bfc855f2fab9b73fae3a81d1d5af5c6a1e3018155e92d58e574e5abd9f9df47679656c504afab25d0fee8bb361e7d1ac2027232c8d01e4356819850185e503fcb3e5739a38dc9a892d36950d9803ff270e3e5ecd14c9731ae370d3691572bf329911c3101f7da5f0ecfde175b89595a3a329b22e40ec336b10e1ef8426c5187ac135ac091974564a2de34ab2f31f9b3772a3b4a70f27cf6cc2c1f38003885df90d7932faa9ddc3948bad8effcbb6ccd88dba14aab3b943e63bfd7ce86b53400e60c0a675c7420d6ce1987917ad1c3748293dc11e14eb8e095519188c98055cebc711380ab9d8e1a5b482b0e6bd0186f7cd32dc4a592ab3f1843f441f3605a60782cfa1e5165128b121f56e3768cf9dab03e7ba0515a916c77e56bef9a54bb0c98e741e3115fbb87586c890fd7b827580329750a93433077f70808014763f8f4a3d85727040f5ed8aa45bfb969c35cf16f4607ce893904e272e2e95098c8cfcf06b0f982d5036f07de2143177cabc40c6e50528497f64ccae916ffa4c877f241a3b6fbb1098c93b806e8a5cafad2004bf63125524c0142bad097045895997c5b55f4bc1407c7f7c9806bdb01d26702113ef2f92d3cdab46395a50e46d072c8a803f7146e707bbfcdc67709bfbef0ccb6f5a8a5847d2128e8458f109c397904fd6b78643acc40cd2cabf41dc5d8089c81ed32930d37fcf07a27a0a1690a60087a19e3744c21395312a979bf5158997c2683c5cd56fb1084c6435c646b8a83695e08120892195337c07de71006a5e1201853e7e7a320db6ff2acad2f57604978a0845a6ecfc279e36ea67c2338b793a961f6561381efd9f3228394cd21123e91995c85fab9811d0be5848a1bec8459b140d43b616a02d0624116f34ad9c3e2c4153bd9f417e2277ab5c351ccdea4826944edc99e718a553dd77faebf5da5a64a30a97ab6a41871f593a1679a335e30fd43d3f3ad1ebb3d7e9c7b632ec69d3ef3aa6898ff813acdf4970f15ed4d5c86f2b5b40883696e71de20add5bb6f108b3e3d45b4f7eb71d3a0cb2f774e1e5dbff97a4c1bbbec353a25ea4b3822a4ab4ff3e27255fe9711de83b07a2b2c26bce283cb207f707f1a4dfc2114d401260a1273bd92b0419534d692a933ce145687a04ae1ca30f4be7f83c206ad8d0af67366ec5f93233de587a8e9a2837439266769328d4565191206ce9b27ddde42cb13a258db51bd2e9c496e49f7b7be231cc16cb0c254a675ab41fd4a53b080ecd28e3eb0bc6cd4520c4e635a058b85c728834544f7765263195c89a5572beeafc21abbb19ea6e120e50509425db36a50958d56a6b5a8d23c8aa06dd12f7417448099624961c6fa3943fe9a41cfbf727148ced470c1dc7eb69c88c30a7760b2fb003da0719b54aebcd07ac4404b25ca6dbe0673cfda7ce1467001bdb2f1c35440d1f427da361813835a3f4ac0874aa312ecacb229c08c3ddb33526d8805038bc4cb9f3298f1cbe110cd4c6ef95acef8a98a124f87bd2287a77501e90dcf641400ba5c5c5f64584b264402e0cab7803a311f8b8f37b6af95c965768290ae853e5bd124088130ce284ae6b06c9ef5d1de08e0d649d34ac1f20bfdb12b676ccaad244e84956388ef76ac85b87d6b70c11b1f13187e5180a0ee9084d3939105e58d5a3822572ce0b5255c5250503590df718c70880b800bb01dead73d97419ea95064cef5981452137ee151c2ec4c3385cf05d14538296e12ed7464fc0efe51960d3abb0f0f21c1c34dcef2528e5af97f1bbc39d48db6aa48e999619d463df6ef7b58e86e41c87d914988546ad219bce7952fce2f9112232b4e3cb9865b509351cc319380a3034af3e597091514290533f8c2012be4f772ed6908815a9ea6f8e2b5469b9e6254cc9fb2dcb537e178c9f01638cf269589a4f93be48115248238564210828d0fc1b10a4e77ab20b0c27a9cf28f78de8449405e40108a625678f2b523dd3ac0a5c83feec77d8d4772eece06f3bfd489bb51e4e548239ea5efb3cdc03d2a6166c5639c0a07425747d5e678a69a7baa2484853d04afea98c4343711b8826ef31cd8177efe95b6dfb1616132f59dda4636d6f279e106d548e84517faba90c15fdb95dbe877073d601e4404fa4ea5fa2aef1ecf8c6f88a803c8918377f32e528e8d7fb197ffd06ec1b7455545535846321f7ad805a2df67ec6e457c4d4fa76507dc6d5b17729de5160b49a2cf91f23d6929755c70b01d5ef0859126bae81f60ed24985eb904009d614ea1f39678135df83d793f0308f0e348227c15608a523b70feef3b3ebd9fdd8f2183d82149b0e2828f13ec9f2aa5801098366d13d5ef16dea71820a82b597b986ff9f61a8901ee8f4c847bf6e481181ad91b12aaa4472f10789b003c449cd78d075a13e2929ab7b5967c32a5a8c198f3c4d6f8bcb918998a25311ada6f5e398a8d1f91f37eefc29aa5cc4ad72176d2a9e0b41121200074fb24a70ec2786315159ae05e729933e872fb3d2ad5eea14e54cd291b98399858ac444227c78d108b4839c93d1348f10a264873c0819f448aa4be607b100cbd81cb68f66031d71b870a67d4a98ba092f70d7ccda4c303e10aba13222145d680278dbf54a1e496dad03c2c6ef7bc48f75fd402e6c412e4e49f8eb14ec582f966f4155c5c2296d0d5bb63e6c99e256249eddf17fe64ffd4a72db84bbce61da00a158cce2873c1d1500b47a3d349d76ba24f7a057f25b9339480efe10693fb723218584470a4bf0c0b4d5508b4e1d6d6c1c2aba68dadcbbce04fb8e58be5fee0d3b190ffc60e8240e8f2230da3057419e279550b018d55cd48e4bab37adb83681dc6289b87a5a421c2e66241dfeb12c985f0cf3143ccd47e9d7f31f6e86d7b7194e16bbf3c992885528b78befb9867100f714cd52d9d53a555b93c7b49aa302d853bbb8cfedec77b2c21c5831717e9c0c466df242c187c58f20cb84380a5544160c0b03bb4e91025862344876d5e24d7c77e1412c50eed5ff271559195a6890ed79720e5c513154640b20f8b902360c2e5d8dcb9bb5d75997784c9a7ac0fc7af1d03130714d1f46a50e4011781b23330c85d4851b072c2ff2bdce1a32bf0ada8d97dac47ecdcf2a59a253636efe7765856a043d05326471db909bbe9256a1d376926ed3c9f8f128055d4b26616d98fb4b9079281c6a875b285faf5eee4d38c1706d3488293b863da0bedeaa57e44514e45be55ed82bf74e7cf6e539992a1b20bfbd8cf1540354604a2bd0158d9c0b46e81b9062c39a122abfc66e7a8be347e004ba0e9091ad983eeafbcb441c90492dcf6d0eb435e6bce3146117f8f12331fba5709f3c047b8ba539ba6ede166642b90c44ef2a153fd084efe563fd2bceabae318557ba9b56fbfcf6c352354fc5b6c1b59f508c82d262d39685d390285509eb9efeccb90c86e35b82b2bb9546b442c207f6cbe2ace9a167982d591500d855e7504135b13668f184f807615a090174ce53a888fc9e2af2bed6b57c30c5cbbfa89e22f98401df8daadb075ee5effd3625d3f19bf36e12a04f3ef8a38e4bd905b60b9fcd24d7103caccba1aee820d2100f9a8ed24c360029a5cb5965cd72d3461f712da778fc3fca99ec78e99107ce02be6402701f9f3a41de75cfd197cb79bd8bc61b45f6fdaae711eb55660fb7585647e6004fd663ca6595de449f41a036b54e30f1adf0ff2c3b71ab4893b0bcf1f74e488c254f02c0bf28e03f9ca42fe599d7d4b464cf1631110d18f90ae87fd5b47df8795e95de4985e52c409474f219c06dd144230b503b0e78525c67eb811fc8837c0a06ddb8f4d6f281347d614428daec45b86d3a94cd4a0614689fc730a8c82c545290c1e24f56a51b2770560a8e1f91bf5d542981ab39ce0b7608a3f4bce4939844901bc55de8da99b29809275b3e64d00f3dc26f0e7dffbd79c3a0c9b2c504a40345fdab72d62201edbab7ffb6c74e167e44e8902f4a18397311358b5e76502105b0b27004848b7be4947d20b7bd0ac0e6a02ac25dc3250cd9f19615992017ec06def56b048d02ee23c6c2f190bf2ea2d2e0ceedcf216de9135d738c2fd9421a1cf237f9a82f3550ff115e0fbb383b0fc49e892c121cd1ab3c2896cb8519de34c5e9017fa791381bb54153d005b512279332b1621fdca0482f8aff5ed34a1f740953ec73bfe46ca467ab097eb7f55097283e5e558a9096d50647bf2a46a48529694321e48d6601f6ccec2409ca07aca96184a7d153e02f940366826f2a22e42671283a0efe2e128bb2daa44a0415019909d9b39ac57419c5c8c9e5b6e649f2aeb9d3d1e18bb6d19108f50379e3865f2cb08116195e369f90f00409f1267ae3ac3504f57ce0c1b9a73e44ebcf810d12c6c4c8d51f30d7cf68ae6ce47632991475f0372f776e5e07dbf0db8e8dd19b1ddb9355a6595edf96015a57346673a453cde7a605fd668fe3298d89f6c28a2b3d623f30bb464cf423d615cb6c8ddc1e3cb86fc9de8067b31d781fde5fa0b862219624e011e03e9ccfef17bc7a9aebb17729ddffea2138a906fc5a4a4ed04452019608069c406ef5aa5673c3be6baa8cfc5ebe5ca71cd544bd8e5e8dc1fd6d85866e57e3d327ceb5093415a22fb53a65d055fd626c0a8bdb99ffbbdef2613aea760670de281bb94110a641710b208891b752194f1827bdeda59901b2d2384d68872fd5af323b91a399a24d9b439f427982bc81a1c4052604fe1718d83153d4086fcbb792efdf66ded1d1633992acdb5bdaeea8aaeb55fa1b6c367c6843ee3dffd1044ce279b26371966f7eb8e2a3f8532dd42f0d9baf96088a71d514ec8a82d460a3d1e2266d37663b3262304ecb0f4654dba35961be38bc6b476c3993b01a91d416fd2ee22c4de34b6d440a9cf2c7d05cd4664463a22bfef7058500b23160d1ac130be9ef02a2d002dfec59bbffe7ed9f2b9f3e7ab07f3c45e3fa0af94fb5a5b22d54d2b99daa8f8ec405f81c4d025993f6cf80994adda083fb929c1031dcc57a75ed239a8eb277ccf52bea987d6c8837bf9ea1d2ea4e2a1833536f2aa1fd9faf6786c17072758934f20697f569f927c47f7670abf028d0efe1c4dab0101f0fd57ff0d3c24f1114fa7a9a836faa78638c5434ecec8bfc7a81c1c7645d4f18fd93f008e1f3736fdd13613f8c80e0022576c6d726a1fe4f6f345cfee6f33bbab5fd03ad6ebd7dfac4d5917c23ec57edb95ec46c2ec0c546e5759b54bc43875cc3f5e20668eef13a3be25f6e0646fd16b4154ea092378587a9c94a36241f0f737f19dc9e3c39722a6405c04f212f8104be4ff1e3a628926f9b9fa444342196238896767098088caa20574c9bf5e6539842647ff9e0c3099469e8e5f1a05850e1a66cde6df4be65929eb74789cd614e39ce6a3ce9a879541e8469aa1db87309600be08ec995c0eaa744da6d1d4e91748c5a51c7cb4dbfbc712992510073f7c4a09ca0e8ed14ac5a170425a1eb156bb62440608449c8a50273a53db121a3b9be1091776e74d84d148514888e0c264cd404c9f82d42a8514e63211c469f34c61c040c0c6d5490f8955b0f758446e802c7cc367332cdd43fa841ef09aff4d0dc675cd6ffe12784fccc0dc607b9dfbb19b371998e0255af4c694e9ac5dcc15a5eeed23cc3fa219c339e52cd2cf9cd674770937f4c67d85b345563d00541ddda000448a2583a365f6ebe6d378115b049744c0fbae1ee6a25bcc9fe936384603da903a8ea5e695dc68836350c6d17fe6dad6682655e53d0e0da33d89bd955bc2a03eeb398e7e6033e1c58052a2e5c37cf6b22a27d61d3072274cfc584366e2af7605a4d0b2d01b13d0cfbead9e3153da229da4a140efe725ff731cb209c8431c93d6db608523617c1f0f2e82a600a34b68e87c98e37b58cd0fe764ef6c2ee131767e5648ae31944bafeaed0e80e63921ff2c19cadd926f50d9c35600953b653fcc5ccae988eac2e91a95a189be2434b6034b3de9216bbb8ed90b5d602565eaa14da7f2922bb9d5b954fed55d2b056dca20fdcccc49888d6393d528f79444dd2ad1875a34459e41ea415e0d2b3607399898b0d25df5a14f2024c4043f0eff3f2f0891bc4bed6820593642550bb6071acc9dcd6c15fa43504bb758ec217eb1f95348dd55f46687e62115ec16079e3020feb80a3b2b0ace7f096f819f8b56f273aed474e5ec4fd26ab77b18dfdf98a403b8bb76414bc90b1ba5badef35bb4f32fe6f25c7747550a3acdb2e07b049d3a96a7aef2e0dceae60dd645dbbabdf62a053278862eb40b14eac6e940805ffd6abf05168e3db283c29957ae24ec04c1d2b68e882c926bf36663305a27788cc0d4e1bafb372c1d03743bd9614d45843ac7df1d14d357f155b3177907477c73d16f67be394a742cb1ef97aa82950d2c2e9895b7da1a1ecd27c4d0eec02e9f899341a8ff3e38171758616fb630581be5e143d50e5fb271fe9e09ab6107c238555390810dab5db3e8968066e9717f28761593bdfd90846584f8b624a3d5d4d97a9843f1351fb34a4c2bd75ac96446cfbab244bc6b45eb515b64eb7308d60af51330eea4ddf030d0bdd124b65a9843615aaa8eb9773585228a62691a383943d59de4b4b869c0a3e9c11852bcd8170dc4633a801d3525e38a725d85ce527353fce23db0dfab582bd3751c65ec88cb0c789a86473c56d43d3e673b9240cd267079845f10bbe58f1b2bd50aaec0d0451d648971d644b6f616057d78a10da6be7121e55e85bb0465498672d440ddef1341914c27401d5668be0bef405e926cc1c4c0b808112ade9a81ff85fa05bfa5cdb1b2d19313d9eafcbe9456e075838d0ce8db5877c1526a23d441d97d136ec34f565e480033d9d92766f7607877f5328f32d4962f7d85efd484ae64f651483df1b34fb9c06f305719d042cace019ca37c7b31d46385b6904ffedfe6757198187736f49c61436603f8e3dfe0447d6cbc38d90aa540bc4442440d983e625a780df75b0ef6e2223c5c0b27995154afc0b4f0c50cc4d6c1cf8ac58ddbc0c7674e539ceba5d93a07d2dfd31434d1ee3b1a420df6734ecc4b23ea3d2c1587ed01173280625480070f5857d23fd8bb1b0f3910885e7a10cf936fe937a815969f6ba61bb5c067cd435f398fecae8cf9165723aa1b24f4a56c6c4801ba1015477c8a0766970c01c6f12106c90dbf4d6a063cfe36b09e5d340c31ae625dcdb84848d32ec4f0326b23d7bc161a20cf45c35dd1564b3951f1c0f1a2918be9fc291572bb9df784851c34d1c18213b09806ac6b12179f68e629f796f3662bc69bfaf6bc89e711af5f30fcc919aa7bfeb7cdff3a31f7689580cf3fa8a26d39b6fbca7f1e6fc33eab169cb7222cf4bcf7bdc7b8ebb18d6e1c6002066e3350ecf596697673f22dae61b36fee97da80fccb1acb21948f36ef35581d222ed49fe4082d752dd2a59965647d84f3fe4404a50180a37eb5032500ba9d51ca687c50b51c20724b00981240bce35f58d48648513428f1dad060c07e1a6703db2d16816d61d404df6683868b1b849215c59562139d10f6bf392e3992d2e3cb66fd3b599a444d66b462e24270dec41705a86586fac5f9b98de4a70560b70a16ce88cfe00ce08481754341b013faa7a4bd1d409f979d7f3e402a9715dcd2b33254ded0bd4206886daaaba2e0c2755a58c66d5bc62b8099694722f8097ebe6e2f997066da12e7e25f60a1f59a8b47149def40a7d6f53fd73fab03374f8df6b28e5214a95dcf60f076ae76ac16874fd8fbc3eb5097679eb7e47b07c0267dafc20d317d7cc7684dea14978b0df106ba70c9f403bcea7c41a4bdc6042980ab3185bd938a0adad2be42d709e6d4242c7f1101afb912f98a52ec8c399e5ec144f3d4a55f4a52d8279b3865660506177f03a82a34eb15b0d9454b7f712fc7aa8e7a169fb15993244849deed05416210ea34779ed0cd2baa1e842ba2333300c837c5d6d1eb7dcc3f2a1454e812a54dcbf1d715bf2d9b6c12fa0d29aebbf21d7288cd10388d7c5464fb44421ab455e5113074094ad73e4738b5039ee4a6792aef941e39410fcd321e081c45891dc4440c6cf034e6de5d7beef20373aa15d286728865744c39619c13d774eab5c65f72432dac7cfd20bb25b18e61a6185f0af21e37b376b5deb012a2fd27e8bef9ca8a3952c73b63358c5bd8963f77e95425cfd9b61ae7f3fbf21195e1c1df15d9afdece404cf8bdf015b28c29c4a97f8b3f6d7397050ba904411962460a3af340f23b7f96cb091bfdeff8139a08e7b6532c50dfef37401ffd86fbd605a0e0abe06d91dcc50c90f1e0d5a760442e94618ba7377cb7095d6431b8a62e758f1c8e2971bc7ee987cc3a635097aa95b68f67e14e2a18720ce6d5dc0f4dce2efc9e41beb2aabe984cea10df28a9f4de0b7fdc49bc03328a0bb2bb8055ff1250260569fe1cba9dc4f52ba53980be0e47f4e8757bf4858fd4a806f3aa2d6823955ececd0aed11522f7801f6e202176d559dee427c2020eae141e144b0edf0ab1d68652f8c6892aab11eb700132d6e4a1b8a96fe0f6fa2de58b4c69dda68a5025366630d4df509972b89f247e93992853e65db2f5c6a4f3fcd98ec6d50ea7f3a70438dd55297861a59a3e391219ffeccb991a1e9a1cbf1997ab457f02da2e2d2133fc5d57c5fee154e7353f02b32bb3d97dfc883d4c88f14eb471e3536b0cf9893503407c48322195cd4e04b4d1456f9f0cdd03252371c621e94b0fce87c542274e5851743c5c64f60fad4ee7a6149af8fbecb8aea9c9de1a37a8d4b8bef75860f56ef3372d5c34b329474866fe4677c714b0bf01125f2825b97cd83ee0fd594a3194baa5529a781bd6bae8b6a66456a1ce9a3e248913b261eb0ed61b1587282ba55aae4a762ff78ac9b09d2e94cc81efadb128b0819b159875f3d3c21c37691632aeb7cc2cd00dfdb0290ef23f8c568fd96c4bae987efa969015a28b215c3904e9a184db30e273336ebb1d8b4c39785923c83a5557179ebd6cba482787b7a51bb0e6f293337ca34a86a76ca5312c3fc1f98ad8384a1fe0aa07daff55f2f7dc75b9ba133b466b7e8eb8362f6a6d25456aef0b9c173b678c2b7b20c762172d0e2f4f4bd32777817fe44325b2b2a751f183930d1760b092bdb52d5897eecfd10dd358115290a0c6d05c23cb8518d21bcda454ceb650d8562e5257b542175657854ff4ea78604be907da7351d087a89d38054e0bbb907f0fc4d14369d5d17afa0c803ba895701d170935a9c4aca8949d70a6103dac6eda28646a96f1996e930cb4b0c2ee188a57981fe90116b868780468c6e849f8502752fe11d51a01708c0d48867590672b874a6ab912fa49dfc71fb3542df889b4297ed7b7cef2da17fe598302d4cfba01cc154df3b7938b404240f049ed7eb641b250d3df524edf564b0e93a4a3a6432e83db4a75d7e43b429e0c377dcdeb3056e39f935ebc86875cf48f7f55757dffb1e08941f6bc7a4cc50fb3001fce6d583d3424180b764a81406b86b7b81b2419e8db3704ec2f0e986ecac96db0f881809ace78a5f43fe4d2d174a499529746d2d071524388bc989b4a389b451716ca2e1243e5ec884d26eb55764b5299d41e56c9f40747d2c18c5eab9308a822071b15e5d24e774547a1a160850eb8fbd585007225867f789037b204f883a7d9b6925c1004fb2551cd10d8d39a6d99be931fd8ea26582b9b9a0c3f6142b472780609d5ffd9d916cfc8c364d5d09a2a535f6a369c4e17a47f87ed4a0a4b95f5ea8aaa09a217d980a2a1a06db7072ec53502db1f51e4d0e2902aff96d030cf072786290884daa2b05852723fa5211c7c01ab7ba1843e8948aea390fe2c45e9e6b1e749abdceacb5571d4bc4650e2958d225e2b81c7d61f6ad8df63d3419545075ccc78ef08d1ac7baa471176aa812c4c5f092b63efab73e629a0036fca7949a699f6d1e3e37fd440b9b81caaf7c0730a19ccaf5d2bb4cc913148d6b291820122326df519ea94e8bc3e1bfd3e2de0a6ccfcbcd73c3350c300e343632e380658103e54e870d239bde1af0da03d8d189c2184a0a3a7dc60737b2c7b55d7ed58b12b87169d50c1f7194a07542e912938d1c3a8dcfb61d2bf8ca24cd1d29b4d81aa10b8794aca247a211a920edbc2331be6285a3da4784f9c40132699acfc4b4dd934a090bce03adb580353db99997f9e6f650a7afc3a00d9f0e604469801125fce2f00bce91522bfcba035fe804881689f07f879343d21ebeacf5646c369601c7840495b36185bdd1db802e6b9493dc9e5cd47e8a91f9cc53ae952298fe4602eac75fc126cdd5234817e3eb4db15f6c43e3ceb7a9d8b3228f3e72a2c7b670ad883d2146c365ded3cdded98e8dde4adf9f92c044643eb1b05fd5dcd3508030ae5d6b9f5255b3bb7f85647a81049267bbb3b46b66d696c3634c24dafd232e921a4c59250c613ac724fed075461e5c50049301699d8e2bc44786993d2f8ee5e06e9db41b8122a55aaf6603cc2235f6ef01728ac3a470d14b5c09ad9015281ea94f2c6c537ec0eac98cfd20badf0d0a45441459d3ac8fa3f888afe4c15cf2ff2cf817212adc8a7e74468426960b119422daa1d7211c45487fa6f7ab0164d3b5808046526f71748ca9b65ccffdc9bef648968f2c1bcef452ce1b8f639560fdbf680235bc68450c75d7f8fcb3e7c2c32418765079ff7a09ee09d12b1a2a9ef8eb66e1ac45d315c24d54d71fccac46e3f7307ab043126cb1177151938ff673991885773393d887d858c64a034116b8584f4b0a8f2c709c99b0e3e633b95ba8620695afb129b039b30aae0f388e22e2f59c5ad201da0793812ed0b8c8351bd03e1db2901ab02808f31fc1a9608915f886ce14bb889fa71315d70db2a997b2196d46ce902ba00e0b297bcc416c729b1f46fbd6ea3c5387097c4ef1208b5b2263cbf3262fa9a66099944c25d1396df41d07cded88447efcdc9718cc75e6b56ff7c2174878c1dc450eb542b19542cec1afe8ba751ec2fc838e17d33f035d2bd466af838776cc3d98a4994d238e6bb853bb2e99085677d565110ae1b8ece118948d0c93d93b35a4881652475eed32ccdc43b3f9e8bbbfa20ce833d222d7237f70571ff4c75be51f204f8f794f225f4168f6d91cdfa28bbd868ceccccca1848ec9480e6f1c53386c04531cab52ccc00ebbb1d5294456a5bc80580a95d166f4345d9b7b7786524d587c2b34c9602c1e4d0803e6c47087c0d3407124ff29baeee6e26d7dc70f0a82de1ceb08e982b10d204ab6a7317f91b988a94c8cdf4dd0801d88aac3d1d29d9dff3453f0b39bbfb6b6e0f8f82d2ba904fe8508bd24cc555994cb2b7379fea3c5c24f426a81be0d684f379aa38f6ad9f2fe03dc87286ac9b18e4c8796c4b099448a597c46632604f2945ee78e362cfa28a0498f836ea139d6adefe8a6cb085eed24be3ad401ef2176acb4dc26c4b94769903611946bdcdea6694d43e7606a3cefebe7e5978c5931394412f6989b657ecfa9d41c49e00080f30bf1b26d16d83697598b88c92d462726f9740a99883606cb899fe1fdf23998f573f023ecfe4602c1b56b71a4d84591f566f3a0ae916d79f4b849a1712fa660d798977af758b22efb4d0cc094fb82b47049114580e71d50d09331c26f9e0baa4e9c202bd6f525c980a368db1358e7ef8fdea962c83bb6ef053c384e06fbb5678f09bc47192807065709994614a4b17598744a8ea96f469da1d2b580bf05b26a3de6cff713a8fb9e766cec9857c5b88529edde8639ceeb262353c8c448830b2917602569c1f52cc661cd99afc295c350486ce62f55e3067f2d85cca82058861b1f85a57cd78baa89ae7dd9ce9fd5a8b9dbf0dae001563d817cf5b3cabb1691d0e570021488f8f55ce9b272d3fb829b4c49fdc25f84707aa757a44d878dad558f53541ecdb2ed97b59d2306092bb1f3ff21aa7ec6e16d0bd02f38e016254913f57333324c1e96d4896691e85c80a850e1e8f0f57d0b9ed2220df824ac59bc203ef941b90e42e05d9aeebdc32d87ea2df8bbb5d09c451e1f7cc4f5d6b3ea67c11c2add7ad5ae1ef8787490959b55e4859e46d87b5a82009591bc5d95f48af546924800ee1b9f9901c20d43cdb0b30b80665cc158bcf405fbd7867e30626e827908753e19c4390c0d572c0e54d69992f5d0c04ab1abea1b582428350e2499881aaf0d4603339f29c0ba27de3d4f18fd22e3e2c7433026b76a152151c71b6b662930ae261d2d879b1c888c966b5a4f58425327467ef36fd0ff3e0cd30a1c3a77db1320280719d404dd9d46768d9bd95336ab006c3936b7663714f1dbbed71a876c4a0504dca297e87ca7ac7b131d1b6565e271965226c57283ffef5f7bc9891791988cafef47d4467b3d24ca6b39668bd937205e610a8d216134f0d107f6293f6d21aba09860cb9229a3637f837a9f4beb8304e289cc3005baed40b5eccb4c2e6b4c01bd4bf8fbfb92b2ce824a21110f43324318bc05ad820f92127ccd45740572ac9cde2fdcbd6cb31b086dbf73ca8e41acb3241c6e9e7712830938a1c717d2bb1bbc5aa2d463141aad8a664264146b2a11fb86930f56da7b90a2c6c12e4c3224a0da91652517d0160e457f8340d297920b4dc2befc7b457f4077fd750495894b63199b18d4766e3b81fa7f127400ad3a9fb30e7310ad963c04d331eeb6d314c5f390a5e811209bbb16b5ab70a5fbc0543596f8dcc8be80b75f35cd15ad26591484bbd8c4a29f96343d1704d22825d70f92a9c986559f580a50787495be7988d61b4ab216f0e802cc1ffddd8a639647cc166269e089fe0c4e64e219ffa940689995508ab740e2121d15add26be997838a9187339446fb0e92a5125e1fda84510e29d2181a698156d1213169ce914a76309839191e765e1d7b1e8d892b9fe87f025627b971e1802171ee42762d015b17d4f045a801352d178b685d1a7a8bfa83471068192faadf7a329b0dbeada67b58de7ba18f40db7d6c8df6029875f37777ca5ea54a0ea0768b4e39bd0e7436f88519f601eb05fcca07baa2785b7b9c4e0c3c090dc50eb48595791834ae808a0c4e59fffe892f34f6629ef4567012d025abc73d2e7b825c9ac3f3cf1cc95ba47c279acc51fe01e7c20a44436345ee84e55f16d7655b0e3621ec7abb98407191acc881fac30e27eda5590cc563333588830da2fdba2163dd6ea8894efaa81b5dde6f655f15959cc8b76fb153854190538ca3bcce56c521d38b4dadcd17ac72e8df928d26dd8390b23487b018e39405323a252384f952cd9769ca8ffb299eaac174f78e033b728a24813a78585372dfa0e21ab6647134a309fab856ba3933b452e8cbcf381c3bdb331cca2ad309bb6fc369b91085d1753ed87e673e243a8d5e4ee22b9fca669142500994499f4b5e25dbcad159ce0ad92cd91a6ac9d27adf750f0e64a93ba6f32470b7951b331228d546ccff0888b54860cbed671c6caedb5b24961c45929203b1c769521d730e5a1918e0ba18ceccc3b1c025968518037a9983ea4a0993340c8dcf8af70842d15b57e1643f6a7d184f4d06a6ea6b62c2a470768250bbd4f48df6a80c024c721cbc3db85464191357f9e431a1046e85222b6374cb7a2e0a994e1a7ff28eac598c9a57ddddd084dd8914736cb5290e7b3e0a548f803967e28990856508438d717bc7f232789c6d0b46d7c03112b0418a5b68444f4cc2897d589216a177654e069bea384d9480ce24c1d0a511443341087472e6eeb99c0aaa9882160b858866c25b13df36addc8c3996d930cf8df66cbf2eede29f1607f1fe91a89bd481aa40363e8137c6f6453207ab3e7bd6307e0dbeca988714940bf83a0da223b1ab6724b5cabc2cf870e567fdc0b01bac8c34a1ebb340e6bdb006de105733d9fe3307c0b324493de1bde42c6d47b7aac0281943b05c50de4a402df1d6f0d818282dee601955538c66d246599e1d0aa0f72d4ab31271ce5f04e36f58bfe25c44440741fd243aafcddcb4e284be8bc9cc7923f058be2472f53008d20a238dd678d06d23962966d17e56ed34bc145068a556da3f323b925e21802bc2c3bdc6f160d5320212090a4a22d83d3a5ffe2d59f6a3a1fea9805b269dc8b64eba18d2dbb53f0d24a38110ffe90c411e295daa23cce73b46baaf98197626dd95a1f4cee63b41369f98f088f5db91892fccbd506fad51ee55fd5c25d3dc491b83d8f3986bd472236106f1d9810055fc77d0ace103e9850ff0873c2a358f3ee0e9aee7d55ed2646621741f580fef6376fd6982fa7cf4aff038fed55630ddda816e7442b89438a3769bd1158b8890d61213d360d56a8e6a46ed52951ce5871ebb88d8827edea1c29e45f5be9e9dcabfb11a86589806233e4fdcb2b0bfc445ce3c7eb5e7d881b3db72d33a92a95bf9cbf1af7c1a8a9eba759c0f8333dc7b6a90e8c58c92fc9896dac267f491697ca7e7d7b2fb00c01164af0bef13397b45a269b88072a3c6a220a524652197c2a64a44741235f42d79e9d3375cfd3a377c2f947da4ec45daf5329dbaca94b1a9af487debe795315e6b24e1157c801e9c83c5f3b40fa58abf5a13f6664550c4d16ee233f9e2df56190e242442521494872e59923afa586bd5de35f4cfa27428b113d7765903bdb0245b3aa144a50f4c0b5fdc4593f1765a9e818748ec545a628b9064f52fdffffb059db4d0442cf618a8c662f02d1b32ad7d44d3276041a6e480088ca3857fd906f3200452e4c19468359623080b799e524e8d378d46330e6b59bb96c59b5a9b8c68998baac6d4b88f99585b7f47254a9fdb885e204b4f21d8d601636399983404d5d24e58e6dfec057f36c657d6e1024dbd04b80d9d6d727b45d0d7df0840cf490760226fae942899d288b605896f5cfa563a8fe320a6a5b5a5b49ba4b212664cdf827d12ded9118d91027b37de40f3bb87961ba0ddeb79d7d0c0b675811d63af39810e90e0de1f5ebea5063698018d102e9df66369a173298308629da69a781b3f704c67ff1a0882822b22d496383a39dafb76ef19de78898ba50e5f5c35ee56dbfe816ed0535a477f43b3aaac2ed6ad3d6be6d172c07a818014e803c24af45a740bc5d55c1976651033a631aefde3905ffbdbd40e8557518001abf5e2969a16331d138f04a9179033bf07ba7b8124e765bf2129a42d0a0c7131c47f23841f0a7510d5145069d6fd1e2c2c6bc0aedc0d374ad59bba1d48d0ad11f635447de852e9e4a5fe2f016eb321e0950eb120e4af1f99998d54d71c8e43cd789a386f4b4c8f5760ff565f1f130b6151c14df135651c3546325b57727d5608e47ccfcad50642a48a39c81084d1e33f180a3acdc6dcf42395d20bf9cf79ab5755fb505004dc66dbbd4f4612d58fd5004ad00dcab537cb6a8579e77495ccf1c39034a4be361bbd593093585e74e590f49c2c343be390c09607626b89e62bea7009a0ae64f2951f560ab25f59b86bfceafd73f5f0bae2978e45003b4034f1da566aca68230d7b4b600253da1d3abe88ce7deab0654c6ef2b35eaab52cb0c89edbf14b44abde80a7ae12752df4f8671792406db67f6ff170194ef51856f03b40d59c0be5e04005753cba848dcfbd61abb7e39f600be717987489823ce45b9a2feb282292adc7f9991ae2f174e50235eb5e2dbe0935fc709646fdb6eaf8ecbaf04007a2281011d7c3f19e66f864994ee8015e31f94c8fa34ebb26a46df0f80a373e1f8d214bd060b62b9c8324fb42e7e4ce10253591b0b119c7489cb108a0e2a6b8e5ed716dbc73e5f5e7c31d8d14e1db554be484b89e401ee755c4fb640d205983996a2dfacdd4db54cfe2f75b6b8151fffb62405c7c8145534691938f3ae01612285985796c55ed726c05e9665026015bc2e4b2ef58ba247543c19559bb9ce7a5881bfb271b70d463ee171dc8b645fd50287e25b9c5ac58bddb3c940dcfebcf2745d7144a04acaaaa8e629edd75399f9a57571563f9f2fbbc16a8dc751a8969db2d4f8ab5d337422aa203faaf8abdc12d4b6977af68d6ec9ed74ad86de2495be5b0e542aa038eb6e0cf08e05dd44da0c2c69269af061d7b03d4d5f61a3050832f9c93fb70efd28f1b28dea3522e1b3d056ae576729bd0c5a4be46bc7c937bf73e592889da5dccc91c01697a008e96a274222dd3c4550eed30f831abeca8a9c02b873a21715f1178ecabdff7fe43ebfbb3cb02a3962faecd0689a704d286570079cdd00df0f8f3a4ec7f0988238acf0d649df7f9eb264d1edf4c6c9b1f35aeb79f06370321833200a1e5bbbba6fad91ef48dff429e06d40425969f292cf6203753df4187fe21ca6a715f221fade6e42fa7bcdf08137831dbac50256ece3cf9be3407401686c9cc7692c67cf10bff1f11be69acf63b0e6644310e13972542e722fc93b2691ecad8db123cd19aabb502b52ed5fc937f40038b4c2b76e4934b553835f5a058ea04a5b7b547b79367cc8e9d06bacf159a93b2cdde044a28bf5bc1978088da3971bc72172238e01c2e51c85b6b2f518f26247a11c9df71417fc71dc818366aa2f77f774cfdce68da643ba1011850a4ef4659b08ddbc0b558a978181861b55e247b062d6deeba6c1ffbe741ae1eecd1d3e984ce1bca6ce146395c63fc08f6463088acd506ae86ac9f135ab09493267f71378605986c2ae9bf5500569ead032acd991089e633c8e9bc95d04dc89557aa449cef6b5d062ee9f0b4388da3661eeda6299e6b4b44f2ba1cefc6267d5b8790283f8bedf906ed4e4ed8cbb154307bd6edfc6d57e6c286b270fccda5f2f631d857486b92c4c6835b508c230fc77e1f0b45e6491b223a60d70de3fff46fe222e3de386ee3eff4d1b2711048d8f27c394736c3d554057fcf20ff37420082219e115f682c435d67b9edff5cf21ce29282b77ff599f4c778cd8f418b442dd795fb960dd00e2d239fe796b9cea8bd70c0114633224bca35d3672600f7ff9487378fe955bd58ba4ff5d8b06b8807a70640b6bb7d3580543c0340052a32e02eefccb63a9edef5986d3fc1594ca61061d2bf5bf49e0da98e71445fa56abd5933d5feb9001255ea0110808425b38c4da308018c15eb6d5fc3dee6195207d7091e13f1d9e317f91721db2abde3b3e70557f247230cc2049e8fb57cf49def526beb0a26eb9967b03074045b1469844896532a94f0d693247a2b1af48606bde725a1fdd6485e289fce530443efb4909cfc18ff35295fd222e5915e0b1a7da503882ecd3e106f7cae5f6ffa644a0c180a007ac07cd5fce01369de2c31b80f9422f1f2c28b421e532e0223bd863b47bb070a6bd7ff563ee347c07e6ec0063daa8533ec92dbc426094301177296ab7156c21014ed82e7646e3982dd7c38edf0c1964bdc67b928f09664f02b363c40197aefd850f0cd72536288d878f5192846c35b1dcdbc10df60c426123880ecaedfc13f62897146758449782f8006dded1e8d50e41beabeb2e9f49861ef42e4a88add6ccf40374f39db52238eabc9a0a6728689ebec204b4fd44212b98265e7dc62aec4edb8a9a1e6a493614383ffb9893dc8cfa22cc363490502c331d9119e3f13b3b42db09b27a570d61e3830bf037a5c354ecc6fd4f3edcd962d36d76226c5508898b2ee56efb56af71037a78417f027c553543d31e8e5ca5e0d586fb15e5a8705cafaa2b4332af8762493d887bc664a64f67e6fb9ff72e61b3f81062f791c92875b5344e1d08a995943b213984fe5f86584ef2fc1d252233b2eff89831171ab181e7b3dfca1a104787462228ce888cc0167d02e3b034fb0106f507fd88e358c6e8caa943f6ed3c0372cc00caa50d17a3e8578cd43978546b3d804aff3d33544471323837e632bd5154cffdc0c30fd3c1e0a70b8b6f8abe34494defab2a466e6047ed64971cf0045650f7013d257932cf866f0f3f6f1593707d71b8f0b864de5c00610744430d3b7eac1a336a8af8e44137454a47ac19be66a7a1c3de1acca4307642cf93876e1c24c44f358504615a0b10bd8b13c0f008ef42031dc0d9ecd716089cd0048130ebbfd049b35ea7974c03179e4f6d3440d2b3651c5fe04efbc0472ac36fe44b1f8dc1ef86436ebac9990f1cd3d9cb2da5ad39c16bcf3e9b65bac6a40d949dd462ccba1e2bf59d8041497c949b878489eb414a5ee46b05a94d588065a74a5d5c07b6ab06236b483a6bd04dcaab2ca20fee3dee4edb83cf878e21c12d31037341e782692a7655a1b551ba8123e473372b2ac5a4cc76ed7b35e4b53195f6ab0f0dca9596ac18294b2d642b162bbb705915c009199abe6882e20d5eb7a8c88a477e96f4d521410db2b5aacb56a3693910b794f89d0ba297ca6f665fc8891a90321c82e1ab443cd7058313c51699408dae2f42ee1b6ee466a14751e9da4708e51289a9dbc9924a374af339c340f327e881b7b51a6d195cacfde2b6263821c63a5403cf7fab16b9413d38c21e96a11aa6075068064b08ff039ab263a4608f264dfb6b39b7cb441c637ab86e44a0390bee5a0bc306ca50b8c992ea0cc402e302e1e89f47e366cced203b08293cd794aae7d90d445bfea1da8d58163e2435afa58c868a0203e8d98df4e98ebca233ef3a21792ae4e29bcc92a7a351ce6cbac1040f8cc5366852498bbad8996cb5589f80c0cdd9bdfaaecb30c57883e9f99812ff309669e9e15ab210e568dd0c756186dbbcda8794a27ad5cafc49b1dc6d87c52c97cdb2cfce5c737700caf8b12060a9bb1ce0222dc5f8d750e436546cf11fb65bb5b4e6ffa9ddca70836ee25158a1fce5bbcfa77446efa43bef377067cc6e98d12ed98d88c7e2220e298ae1d82fd6d8e15343060ca77a82042baf8b261a32db68041c1c6be94b761153f6af7e7821ecf4fbcec2d9672a28edab5acc1d2a6da22e98a80399fe2c0dcc804b823c4854e9a731dd9e4dbddde9c43f5f8b9abcafb9394759216d8fd901959145665d5bcee48272149105c898be2e7f179d2e6bfb9dd1bc31abf970c15ef9a8dd2edc72fbe2240f2ff7a337b867144b66e6626e49a8406bf8ca39e93248df80f9a343acb85f4b040ff5747e1c055f5c6977d441106b8b3260e2018a2b5e675a6cc41d2e3a74473e6f66251530714ab403c9512329f30b6e4a7170407190d52644b9cb280c9c320e448737c75ab0ab1502acf296216430cdb272397b7be92e1de0e189ab5e040e8bced41429345aac96b13cff54e3c3bf22243c7010e2dbbd7fc0fad0e5fb35b2324934a0c6b6bf6c9cdb0430bf48aff06f03a0068c0d0c66ee8d16256e33306b96e3f1b44abc6c7b918762bd4dc628d4c6ac314657b6097eaa047d692fe550fcdeb9710a87df7511d05f29a498f42d6bd7f4b9544d7ae26cfb505fd4ba2c1a17bf4aa99141e7fa9bff97b250811875e0a6739a900c40746372c6f78ab14edbabc8edfc4e8810dfa342078591ad00b3145f71095d06606e419311ff8fb1f31a464f06c771e9a254e2f9894b057d0294b178cd0985c6fe881b0a0c0a1a37738fafd4175931aabadb190bec8383e81b457d6534fa7c0a40be09d83e181aaf67540c4f82e2992d550ba1c56f33e6a3c92a25370f5769209bb50dfda4329aee67d20928ae235160d4e0bf0b2e4f4472f1bee58a640d4e3027073ff5787e4b84e51ce0017ded3e57355b72a03559cbbe0da7c9dbbc861f0c954ce15273c12b4ba7b77eb86d4c6fa92b4700f46ca428c196def04016e60c029938772ea26682f3e4601f5b4f336a618027422a99b092fabf70190bc4f66ce0bed08b280b9d74115d7dd3519cd572606a96c424ff1a8b873764aa05ef296c4b52c6fdf2b776a27aa10ba4d2a54acbc209bf1ccdc8e31c860daad21e82febb260a4456f27e30e3a8ac6e82b1baed7ee4ed77e28a071b55f1fa5f079e13fc1c3316797b26226e5ec865f3dda0f144f1f904547e4e5ada5d73bad00857634e1c02230fcd455414d5c59a08421f4b5f144f858052cdf84db26ca9d144183632faef7f84d422a68272547c25d83e303922f092c411ba9d28f64e5f47178d959fd7b11fa6ef8c6f937c62049252396b8213bedd4d3b28a57a4705eee740c8c901646bffa65203937c2bb2579fe08a06f0d47be48dc6114a1043ad772efaf3326e0bff35b97f37ebc4894bc65cdf61a5420e3dbe18d0653c0b1a0d71d45fb62f3d6426148514f1e70b5204cc4bc543bbe2ac17cc5749be82effa1be92a7b0a8ac4676e3c4c5334c15fdd7e52a8a214975605d3fd3d57f58bb1e51e3448f48f5c2c9cc3fbfd760c892d07775802cc91b3fb82e3f2ee00e5dd64e87cee3ddce77703564edb8f8e3621d86d83cde49721cd4566ff17a71c98d8fd70990a97a38dc70dfb6783d74e835044088538beff752fac8b6f8f341d27de321622d12730d446a4320c7b5df86be2a2011b7d5dbe225eb974168822dbeb92d3e5e1f8cdb66babbe7163f1df4a3833e70a80b4e6080ed27c45225398ef102904311ea0060f12c99e55e8ccbe9be9960b8f8e4bd169f38d31485bda591a6cf1d1c8cf4b4023435175c65b4b362ec191c88abc5afd5167fffd0e2efe2d55408ce78e85db4038af89dc0afd2e1736fa6be864e844794e7dc46fa5f00703758d773cb2f8077117ef7947fcb7d573c93cd950f1cbd268517750823f468c53bcdbc6b43544b0ef309dd5bdb726327728fd9b09f6401ea54ffc6bfe812c56474c17d6b14a62f7018948652241b60498cc7141faad3edf9bffafdbc142f31687de8376089e9980201bd38571668b33f276b1dc8690b5aaea3d7f14bbdb79bf4ca04eb5598de26dcd0c4f7ae2ca0175e4a13bda77c330f7485028aa1ca744dee1093c6eeef0f519af66ed1b351ebfce782137b9ad962e56c63a955db5e9a6651ce1a94837b3300f3599b0f0f114d389cf11417cb09ced9867bb79698abfbb6da3236db29fee6b2231c22d0f16eab5adabdb7b6d91b79c551b88fa4e011213981941a3db3ece1be3afb305fdbf1ec1caad40e4d73ec8aa93032ee54c5b464eeda7842c343a315bfae31444cc76eafd828f53a711382de3d74e191c9a18271e0ee98383a00b6af4b9ba1eaa938b2849075db0702935a62dfdad350c893ba6f810360b725dfefd4a0559a835e066576375ddc9c2fc19af72e79a43556ed2562541a1248d90f3fd1c8ed6d8130e99083b724fcbbc490bd3733970dd1dcff9680c2ae5cb2bd4bd7ea330432ea1bf6bc64016aada1568f51bb9d570808fe1915c62fc9a0a5ce6ba9ad73306185a24b80b0d6414c036ef47ccfb77bb61a0c0105f6b09a7176692f0977264ded9f0774881c60e5bba54a41128a99635c77bf2aac9fd10c2908d9e4626544cd00318d64e422034f3aad1999239e02a7c04b884cbbba7bf331fcbb915bb0867bfb890afe6401687da2f1d081a18b699dc1a27c2d5ae425214caff65c1b36f3a295624faf859f92ed47a5d83d7069aaf4705c168e625e7902b84e0c5f5e4272e885a79925bd069d27f06a8a3b2890c12cff9130b89f6d624b6b60a2bdc9c49a48801232251abfe584144e789659b1777ac06beb02771fb54e4d8b8a2e159c36d5f0553b1bbd8e57473b4e9114bc162dd0f39a9b07f4755eeb4f3f2d39042b9e793234a45a30dbbb9a67a56e63300a9655f6316ca480ca782e9f1be44c1a9035d0ae4c3463ae5f7726a02b66340bd0c54e9b1697e0914364e9fc73c4a14d6f13c5980997305e3557b1f86a89ab8bb80dcaf66045ce375ba005d9d54e80adda61a0f77f12533375f2ee0af7d284b936cb298e1f26de299526d4776898e3c98d9ffa47e70b6a8c08918f1d71af250724e69fac88d8068bb32825ee89ce73c1875b6c7df7bdc2d47ece3896a3740e6dfef60f25faf04f1335a939104ee45cb260b302637188aee095d398d32c3fc90b1c53749593661d212930cd739073d519bbe9d584766f3d0e26f0c074c2c4581b27708e3897cd37c87949357476cd9274ea2bc91ca71a92380d818d11dade30913b3dd653b61e5fa32c576a718863e1e52d227b07f06503974d89c1fab75bb973cfdc4d0d3474822d6828ec0accfd9ee453002dc15f9ab4e6f7bf13c67253472b69330d71bcf136a320f40aacbd11d22104aab35750c5ca7a1e101f02e0b7eab625464f9d810865b0f833885862b9d682843239c7247c082d3092e5a1ad105e9d2ceb6b47724d53c61c1a1cc4a2721154a0e8cf41a8c011a989b5623a93bc5ab1c95e72abd0486a279aea06460979c345098d9d0172c21a1dd109ba5cf125ca86a0a6926a646bd36bc2a6e078a8f3d85b07322aee846a7f7cc63a4dd9408816e7590df5774a23e21de9b21e6986f4be04e57b1aeb4b1a9bf5a214dd9d7546d4825843fcce09c8765189a9b34bf622b7ae7a41660f337832620abc8d05f52c4e3f857989382c7c6e0246e406da6b06a5bfde6b2d6525907da457717dda980124aaf4da10cd21d5cc855467643cf92e92421301ed35c98685cd014ae615d63acc497c7f2f21b74d848591df82a6b391a26bab64f9aecd9ec06b94a998008a5c0043d77f402906a4cd578bb51563b80643a67c069fd418cf275858821f0a5b80589b42322a15e13bbf6722bf30031b0a0b53988d950f552918726c451ac86c265611c206d0d24491487a2c81b3585a2a5a2447c72cebe950039260ce3a932e6912f3604943ec2bd31c6b01378ba356a3d729547980e124a01ad5328553d61bbea522d00d596c24b03c6101653b8263f7fad107f2c2985fa4463c618c28377390536be242ea594b8e53272fa69c4cfd2608e4deaa6fb8fb68c8c5cb7030f2b4504a9f1b4b6560b0e063ef42d847fd0cd5a360ee736a334d293bae93c143b22d0de152625eb71420ffc1429274259028d0ab110b14301c21d861a874688992df84959eb9f2953eb2356853d1a62509eec87cb562d9a2bcdd6f92e2d62b1fcd9dafea89d999307a7de924232ed5e7f09fc2e916b481d98390678cccd2c26e23a8c220e4bcf5f1a682d126b482f92d54cf180f97095bc11c4e37be7dbf6fcf7b8061c70f611438a8d2241476cbdb375d3b5df033cf7bc30bf424e1f33eabf160923011eba2133b934589f9f94bae83a98953c1696ed363ebe46981575b224e0e58be09f6c1af9a3ba7080ff800379653e19c1e2ce584bf023f0637663daed4e81ba56c13cbfd4c0c1d0658b95864e6e21638d95d2df3fc56384086bfc4ffc18e8ccecaa393af4dfbab868d9b59cd7804e6a922d71f0de87354ea3786a749a3b3ed4c9909b5c12a7c6892e0051565656db9fb7885a9b43b01fa89a83a619130314731cdde243a9d2e8c0e7ee760e68b212b1efdf979a6666e490283f2ede5b7b7a0938039cb6dd7c02bb0a863439430b56cbdec201f4eb861b7a980d023224391f315aa8f983cdf12fa38de5ebd23bb099bda0e1352599e4fc547a3c83d017d7ef519a0e9295fde4421035882f691b4684e103b6c2891417d600a230604b5f4fd4d43c82e4ec5054f585cd1d3cbb6b3735e441e8c00df4009373200b4702e33cd9ba8e51dd1f233b69c43bdccdb0d491411a7fd6444b0aab44052598e9b393306ff13d007626a0971f64a663393f1cee648978d91681722fd9a5a666b09729e5a96f0ce9833745ba278481fd5f213a0feb5ea6ad7f244644e8576a8e4612d800f42e6f52cbf2d8e4cf5046e2fc9560202c3de6153c5aeeb0da53e9415a75b196b5c5e23d3a87eed068413d96729cb91fff991a66c1b33d6974de60c647b1df9e2f6c9fb24e83b0b65f56f64897fdb391bb7707a6d7e053de05e2bfa417df6f15fb6b4ef9f845e302e164fd3787b5b59e923528df18ee4f412eacf6a6785e9702c7ed03f491682b92f092be6ce665bbe622fae87bd61452ea39afd5bbda223dffd5074ae1c2e25be41eb6f987028c6c25b02ff20e1e5d885cc48e29d7c4c5b815c0a4cc1c1f665424f584093a327d9dee806c17e3871100f67aa88fe98fab62be38042cd193c48b34234eb5e4e4db13e027a1712c8413dbd2ed85d37f3e3b6126e68b7212f2e4f015497b59b634103f02adba78b3505c2597c2a28e279647d168a6c67acb776f2da81aa136eb4a40c67b03b4e0314c160b3cf90bc3ba92b551e38e83c906d0cf2aeac0c340da49e50382adfffe70ca85a76932e0dcfd0355134a258c5d880bb907a1075321228cecd8bcb0ed65553baaf918c5d1c772069bba4e2e872964084c2baccd94516e70d1fd4f058cb77779090f5a3f14c78c76266d5a129739d23084397814d34381711c381c5814b1594c9016d4dce550f88b1193cc4d0ce85e85b57c9b9ea851f27d03e02d24b53c78606041bb04c894eec826fb2861f7e0c1bffe617c07b19760f91a79268360446518a488496de46e5600017637a7ba0a1b7c22ee6ec564233997cc557c71c0ac354b8c29bce114ae00f42e962bde70b34a2ab0dca4c8b720754d81d32074b4077a0389a6ac890249ceca76249b30d2b0ec209940f0ee4f8cd0114b12d5c72d36bc300ae2b9ef4d384b6969fa0a06f4047caffe01311b56e3a964f58efe7523cbd282bf42efde9899d320ff72b4e90bbb20c27b7e4e807210121c68b38d941880db7326f47c040fcc193fbf9bc0a9b2595ca38b3039512a3c5ec9dec3ee7843ac1495c56da0d624cf8d1d74c8268277e097eabc8a88d52a26a0e512481b639a1be1c7ad75eb6432e66050e30881e456ab83717921968c48028ae26a4a8edb90096f012279b8df92038cbf543c4e2e49f23fe5e5f66d4c8e1f62f7172cd44654e6a68a6c13753380b8746216d20251ab671562da5e673b280d9cca283110e18326647a63870ad39d35fe905ac5f4021031e5d0387b9360a7f043ca2bc95509757d1b4d40db5d1b35ae163bfaa6620f429cb9cfa2f5ff05f88504f534c1a923b58d879f79c2edadd088e18455c7e9eb9a68f30ce728f7aeb869f9336f0fd37c4e6f9a617e758244268e451bb58200f095949bab72119158c636bebb945dbebbe356b76c58fd6a82ca264d92b58d880cab081151913a05cceeb2044d825fb9888e9c3b0f824c29cdd82e160ac44ad713e0b5b51864794fc91673f439a8d16b64b2afbcf9d9c1d79dac2b0a925830560587026bb148bea1b4440e610cab55b3e56d406f7fa5230ef69db2dd4e7d6b0bc900f2e3fc701c232c34c4176472fc658b357cd3dd01e420b0a409a23207931fdd8d95539fd4040beaa4820433936c79571f67cba4a9d27834f2cd9cff980d76d2e0e5e94c51c0465ab7e1e0e1b6749de211d2ae4cdc0fed1c9689d0283da15b91235510ee4b6fc86a051884b56389ebda57d31e80287f766027dff1873b87b2c149421331b19208a8b0bc3292f2353d7ee6b584c84509ef851e51561bae28b129402f5510a44485de57d886c4f3f50906495fee82a802a1330622a62b42371a17dc0759adfd613bddb832d5419c5611f64dd820b04010f315063b39f9dd9c172c8e0ca6671d7679d70824af9704ddf0fe9b417182140c83db6e6a8bfb3ba1dc746081a9e4c1a3a5eea79fc887f6b9ae346493169545a6926843159a96f6f99d51c8508b51c38210bcfaae6dad095b7722952b57b5d6594e1ca1fd2148d602e953a93ab9be09d593e4c65c2f1593b4f2c1f1c2e2b1261217ed5b55d2691efc56ab7d3caa9cb6a401342f9c794122e74447065fe56691f8ed19ad543892818961d73d195860884202e00763758d2ebb7d2679e723798637b5cbe03835cbe198a9a8f94f0c48a9d516e9e7a85bd4af90ac813bfa161954f0c4794d7b795534ccccfb8e9d11adcb6e817eabf0873b4891d65553aa313c62ee5fac30124d4144539755db08a464df99d66ce2b587dad5eb636c8572195153ad51d0db640f960956cbdb262363afd2aad34402854e53f82a2331c6a9c256f85fa402b574c69859f7bd845144b2f486771832ab31f7dc3343fdb5c46621115473a22910d800dd8c9a7e7c4c5e6c9acf9458eec087f9c5b6393515073f6252e60cc0c0cc5dc4970fc99e4e401a00cb7dfa6e726eae9254e7a5fa29e1ae1f4a74ffc264bbb5a0bcd2050c0efa5591708f3dd1940e5fab7892a66ff85676a84ee6faa4b086d53bc19aa70a2c66588747770007e590a5301970b0b2e95b48aae8ecf036dc5296f30488f6accdc2db0def24325aeb3a7221c5050e0c33ea49c30903e4f1d447dbe7aed87c68657cc53e55329237ad18d4abf2b0e2b2bde6cce7a5356b693d056fc6af0f10826b2ab3983f1982176e3e7e56e99e7bc922e29adb260857253174ece4186eea27fe0174a1ac167fb79876817ae351e789463fb4572c68f4eb999c6bae6312598b3d7d4de82e2099d2e45b1997e19537d1948eb0edda7cff7253025818c49067f231992afce00af173fbfe2cf007fbdcd5873d367ec623f192a59faa40a362f033cdcf3497fe3191cf0f8adc60f466c2a1fc1c225459a372b46e6500c69120dc8c5cd4af1296be9417101fe245ceb379ba35dc339c349ea5a1197de9c14c69da5d4e19e1b2014ec4b0c5cc26fecc15cf062f7bdd69737a59754e144eb1126d562b3bd02291ebb7523cff42bf1d142d8663a19c31317285c2f06969f291dc70269f555fd5d38d51fc2b2ccdc4ddb0a7407170bd8736ec3c305fa72cd9e1460e711a521960abd45c9e9c0cfabc193f420e78723638993b726629fe274637d12198e0147207a872d926fe637fc9afcc437ecd4482e0406aa8b2db1ab33aca9823f6f38cf0a7f5f92db2ce6dd6dfea5556f9242c52392767a15e0ca34c7306054b298be8256d8dbbb3b1493c287fc2740b550322cb985c5b0fd61c1b6c52abf4790c01f3da64e21e8dd01fdcc63c65cb9e26d7b440a6ea055b1ca0ea6778084e88708a6d6f4a6ec4890a63cf716dc25688301b0d08dc187cb39ec97beab16502c7515f919def5ccea56d35c80b14c14850baeed5e2acc66634b3df871031c419453997a1ef1d21d8b42412b208d430f420117e075892519bea38fc2ba00bb9f102f5e8a89146c0b2c54a11b67b145cf24f40829d84cdbebf7842e0605a96095197aa2d5833448e3fd4c9a337092590bbb209aa656e014103e40c3be7df957e8c45a75b7a2c4efa26bdc3d8033c77f1637ec14858d167cc7444141aeded504b745fe55591a95641ec4367d52e73b82c35caa606c8d8557bcd4b732aa52e75fe9923093e3c1b758ee95101a40077e25ba9300f86822fba56ed12500c2d016081215e87ac4fcb4d135fa68313be0b0291407a9c0b218dfa9cf070f1d44855a6957be40a2beb2997a8fb831f8bd4af42616b1573977ac43f321f5dfc8ffc2d2f92fa2c7ca5d480c00b6ea1f15317bcff3851ca699214c7c0809c4a96aeb8dacf7acfb95079112f75b68db516c930a00a9600bee7b0a4cbd64fd8307099224a084cecbe9808760df9e824c59b974ff435ee5474a0f26e38319b6901c934f5f2363e4d77b52fb071e063b4d17a0faac9b0756dd554baeed319219e78b9fa72782c4245171d0009326d79cde7f2326aa5ef57e9e246866bb3d51867e38019499a742204d259ba963fc58ff3339ba1b2f8f2201b4ba5d5e55456e2b270eabe158377821e85d1e48697826e254762f058d3c6982af29b041f050a7c06ba5cbe6a3f30ddc978584dd9382599ee33ed9d65cf5a6dfb5139e273d73ec8b208e1954f494d566c2e0ae7654ca3149ebe088a9077e8b6e7d8fa758deff8b0dfb6d3f62865eee05b75b2a3c79e91b5a7a4a54785fd00cef198f073333305382b9d1bc96820174a0db5d4b43ceed8388c4fd1af8a0ca1583566a3131bd2ce7b7966233c916573ba1eb0ec8b1018669a6ab5205845e868a7292083ff06a183328a935813d3d4498b64a5e2e670a66e5170a0c05f89507bbd195e5fc9009e0b62c7200c7a080e518196219879fc94f40af428c1190a4f57c415aca730189e1da0fc3e12241094a09080cee1511a96e90682c39f488171dfe9abb161574dfd65a2be73537794135cf02808c0209b65e1f1c0fe13ed20d61addaf3002325bcc27767cc706025ea11a9aa3418c03dbc299c159d05711a63d49b1a4d576c14b373e7e34a73f3bd7452150054e4895d42bcfc6a926d743c8f97cfa13ca3abee4524751660c1eb3232ab4fb474a77f20e99c8a134c8f1f3f3122136e3f1135b4ad83f9a92d28b9a99ad92e043fc01d5fb44219f42c3e55a413451fc72a5cf72284d22730b76a3fc1d2e861b8372a4c0cfe7ec9c586ae0433c627403a9823c582a8ef2fa1946ca60b87e555ded56b2739959d7509e6052551439cc6d19461fc1988c2e37951fc00791f55e5bd0a65d8997193a0e497c2a758042bcaa5a845c73ba919d1a09d1fcb7953e2fe7dee8a92669d5b9f543460d4e9bd64fea0e0a7ed07d8d4d9382a2d01f0ba9cef3dc678c66579f930205a54827925c908b66d656a79175fa6ee1df9eee4f41a243b1527eb04f1a837fa800e5827a21ad22a892e89656f256f9ae76383406237ff760a8b458f8f078d4d44d86ebcb62662c1203c395df37b1120ec399f31d34caf711907d20b45f7e903a0b32c902653b4a08f994c545e85a1191faa60a85af2c0c944c2d5c76b3b40936245206e33057fbd31398c6f49f3ee29286d827923b79c534217a1130b6eeda7cda0116bb6ae1633a956fd3a195c77932fbfce7614107d6284ade4afb35308e6484d349dfeaa44a33f7f1f92925a723d401b07d2e63905b069ab72962727735918322a28de61fabfda0f8d5d08b01a01603349f23da5103d27337855b466ac5393212e3797e45e9422368acfa5a3275311ab0fdbe39d936461570b0d6609ebcb0c6a83bea277a438f186e3df9c663d1dfb91f47079a6c96a80e1c937dcdc7432929e2e3a699156a0b0a6bf14cb919b381b952cfaf33bb229ad7877c2b928ac3ba7107211f3889aa1338b2840849970c3f4bd2e0e8e7587633eaa4a6f738ff7b45478c9183e0421fd9d91eff848af4ccf8fa373d71abfa30313c6748b488b5848161692aee183ee2ffe77d1fd8d7be4476fd980b4a70677a5cb807e0847d99a48a86c5e4c81f14667bb14c9ee807fe6ad9c79cab10e40b9aee9421bedcc8dfd75bbf51140c1bb015aef9ad716f7108e04896c76ecfdf3f1e41bf44ab7203dc07225bdc3b7e0e979ac8cc77ae73b2bf7d30441978763493bf4090b3d680229e77d05fc6c513ba75f38ef3cc6354f5e0f80399f895823a32ff140dd1c03663e429f8d976f314fad09f94e151b0ea97ec919b0140144bbaf7201885007fa9d33eed75d51234cbf77f623383f3836811da2af1eeb6e9d259458994fe0233022a139ec74612f0a64da61e2be3d81ea85382b4258bd1d13c560882cd77239e712dae3c5c203f5f54c29bb13125808a8f0146c71caaaff7e49bf250ed408d0f74beccc86b288232f05b7cb6faf9ff0635956a78281e50bc1bb749b1eb69f57e616cbba72ffbfad755155ba455aa41f810996c2b168bf6b2a566986e6788f995abc9bfda185d7fe270d689153cc0cfcfb427b1ad95fe17d06acd8312c84bac753705a82fd4ce443d255db0a235938b05cc0b37e2f9c53c4f5a0db4b34e3d6470e72fab5e3626b0d812cba3dd48c5a2c82a26a6999fc38b33cf23b57ecb3b1aadf5f8a08f1ebff0979605bb3d6fd06c357c0f7032b3f00594e38b7e98654069499d98077f0be0c161f778af89582ca0a33c0dcbb40a8802726af4076185e93f5d7414ac8a946bf8e13e069afa08b40122696907d96cf986eb8748ba6ee4040a24b1e27a1034624a39019c9efc2422d42e69e5d36195ff0274d7f30392537bea061ff99f2b723c8a575fe0aede3fe964c5980d742e0800637114a844cf310356515b23c5186144aa9c3d24a4ed2eac6d7ea9cdecb18b141cc1caa10f00cddc4c9d604da858ff016efd1a7b474e48593063ce1d1cf497d99cf72d8e64856f027fd1ac52052abd4363acc7dc340a9b8d76f127f1fe93be8d5f716e9e762caba6cc2bb1be715c28cff770b7b6f77860751692fb8b18227dbc4cdb488f24dc00f002a3f8010fa01683f2ea0c5306256e401416edef87ee58882f27317a4e4a2b2cfe18a0f3ba16ae6703ec7bd679c986ce7c694cfc3edeb15d3f1cce413e6b6f0b8a3f48ca4edeafa80f052b58fb531b25d28bc296ce3f8fca465dfb31776f2bfba4575e36299248459d49371f33a79acb0a8d25b8f4ff7b5a5d1614a5a719460b49c898cbbae04c6b5ca38d0a5996826cfab9b9d9fb9bb396c9b94c39592b26eba00e97f2c69cb78ea73c3c6934306eb3044d14f690263c4c60453cad40faaecb1be8540c25c91e88b7df84c4f27581364fb66578e95da780745d16379e3f21c8b40d5955f815506205ca85b904bc9bdbaae5d8adccdfb7f5c440ced8edc58fb51ccf8919fe474651b2016407d99f1139f692d180b10561ddaa24bd07f131b3c5ccaedfc1c2c65948c9b6ab98b94eb36c0404e2d985851cf2ef9187cb2c726d2421f989e765b920ac03c1b82c7826493a7687d8cc31ec27704244b3b08da3779bd030a7e60449f123c6baf658701ec390b86b5df188f2f6240f1e2874255001a6479caff15f21f3fc062a83214450070d678b51b593d8bf4a4bc560f2c401cfad393666c9d23a7c71fa7c08bf1c6275a82eaae8ce5f8afe067822b8198c2862d02e582390fd46b01c2985776db13455f9b5e94060147228afe4d90f42440b0aca65b451861f2318335b91fb9e2e0ac7eb37187391e3325116fd3474b4315aab1b14b3ab19fdbd40e856a2542bd66afd8520c0050d4ab6879e35bf97ae69f131f9ad7b4d011945c9fe9879e6ce03d6fa4a5548b62f77a55b985673865d896e663043d211b60f9b74475ff25a2de086f60e327bb7d2fbc125d6631ce08bfa84863cb0a698c308f0cd465ed89e847a517068d85dd904849adbdc2c8bfa3b6206e4e79446b32e509f563c1f012a890a82103866850a89ec76a779d97b431afe25f87d4a78d5a46aa8fae40f05885f54e6c7f064ea1f4ac8768f7cb14559b0ea443a83721f17d0d3d9a793ff5d496f92d9acba1b4af0bf5673d5ad02d9cdd88f3c37cf438c47cc4750046c9aaef3d7a945bab7e59dfd1851c0955c86690dbd949cd6d502670d28ccfc8e51f3ec99a7818fbfe9bc844d246f1d0cc6347400f782fec0c046d3193cb2fc6fe17b9b04c3f275223ee5a6da09fa8a47936d3e17ad4f1153bd5b6ebfeae88d77418612c1e7745624049cd2d52865dfa96f6e281231f0cd7c771817404191be5017df85451b5d25bdfda5e0c9592fa3dae9fd13eed34cc4ff03982c7f239480fbc1a8fb71aa49b5cdce09695fb290a6f23167799b1f8cc4f9fba4d01f405762b41060e234615caeee9ea3acc205a0d2549dfc499864dfd32512d3526e6425157af098c1389e1013add6663bd02aecc8eef01d432036a3f9a7154209e15a7036dbcef26fc11789c17f7731401a8f476605c3c3fd349829a30a7e4b4c227c9cb047b26a5d4b05a072044c8f579f176529c6d599c0b100efce912fc7f277f057eae61131112d2f6de7bcb2da59449ca0907d906ec06b469d3a6dda53aebacb3d64a49d1b9cad98e7acbf4c9bfb966997780393bd4795db76d9ea78352c9719d17ca24a5234f47ad225177b5181a558d9524a97025cd49f18ca911b513b778953133655b16aa32d79c33d51652966524539d9444fa481dce7865e883cc9a864249da61f932577a9a57b0a2c94993a718c825442ae414720a6ba74c526712fbf28a02470f1450e08802c9ea080fcf4a229146dae58edca9e1522591844abaa0d0f8f04103c549a8a3632b8845f3e0116353674e4e0b0e1c2d2c25155cb5aae38ac694634c2c2515a4f4ebfab59c5d3733fdce56f0cedc747a8dd27b02508469b6fb1d333563b2f0d62ce5d9fafdcedbb6dd697b8b79a5d91aab188b8366eb2d99dc6ec1ecfabd60566b9db566d7ef056b76fd82d9cfcad29659ed96d01486795e4ba7a56118c61fad55b488f27962d075cf8916cb12e8e37cc7c639f574743966f79973dfc2aa8e4146c4a01814832614fa47fc5cf2fc9047244f4cbaa238098ac5a01804b44af205753803dc8a69efeed94c72ff4c89e48b351874de3beb9db5de7c2ba594d29ad9ccd6ccd6cc56aa6999adb666b6524da334b335b355cb6ca5d35a2036b3956694d24aadad34ab34b333bbd3564a69adda46b9ce0b897066271685bc8ea39b562fa5b56a1be53a2f24c2999d5814f23a8e6e5abd95524a29a594524a29a594524a29a594525a9d524a6bcda8a579a5a5526a6b4629a594526b2ba595d26a69b5b5d25a2ba5b45279a33a9d2e7dc63a1c831c7285c8cb43075ce401074d6f01db7513829b1a6712051604e424f63181c99ffe96549d1d6a35c9f0968c5cbd25936bf59cbed951a2830b8e564ccaabe3b6096f64bc7ad83630377fe3372f5edd7b00d4eb8c4b16386d1b1a972c005b3efa253f0b3f006ee365b834f2303ee301e032cf83d3a7e1335f73ea779464359ce681841ee466957332de86c3bc34b282dfc16764397210c0e3eb56d70e2f57e0327e000ef3371c7c1cffefc1631e87cbbc009cbe8dfbaffce56f6a37f33060e0d6cde14b222ee3a50a1ce6250a7cc6cb1dff97453ce6650a5ce6e5099cbe6cc2fd577ce6c1cb924e38479fb2a40a5210659195974e8802a0451bd265131205a14481b7dc21f23e1494278835eb66fef3132758e82bba61a82b1a96b9a723bbddccfb1a66fe450d33ef32f331b20e3f8f7438f32d33cfe2792b6ccf9bdef4bec0ad9b539f84873f0297f192098779257cc623e1e00ff17f211ef3d2e5322f02a71fc4fd97f0973781cffc4aa6298107c19904ce659fd94a69123f826f1220715b32215d2f83840894182264091398c0ae281144c63f4f8712324fb3d7720948f036d2909ec48f0009117c90abddcc89ba99473dc121e82f5b41ea66de74e4f3fe5ab83f33cc7c2977117e112ee38f70980781cff896836f84ff77c063fe87cb3c10a74f84b3bcfbcc9372ea77288b7334eb240bc8ef28f1f101cf3ce05cf6b3f53e3cf3e19917e19c8ba7a308d006f651848fccc5471147fc004168c4033942882b1b41f3077c14d1f20011bf13230f4484b858447807fcd4edf01a7019bf0187f91e3ee339e0177819b7c0bf57e0639c024fdd3f03fef21870f0639ef9918e8ea77e27752f2c68a6ba5f33d5be5aa95461e8fe7d18df9bfa96325f39f03549875174d8be81f72912b2a8c7bc4f11158b7a7d75565d2e980be69aab954a1586ee41ae2057d0bdaf1e1f7bbccc4962d48004ba30cc44c61833f07162e063d4f9188fac8ca8e44e188643f99ea83451517997abcafc05fcdf021ef31570fa14f0d44f56f6e1c799c7198b58934e831aa04409a377da4807b58d76ae6136775758c4a1b95130130fa6942973536ddb35ec74f22cf3934a37f3a2fc85990fcdbc0786956ee6bbcc45f842b88c9780c33c0f9ff11170f01fe0ff0ef0988780cb7c104e7f02eedf007ff91d3ef35cd6e17d18c0802186a8f762fc7dee61386feec5f8fbdcc3b0073684674ee3139071ea9c0f4133840f11a3dcd8b248c92520f3424420888f0d011e1ffb011fbb011f7bc733e081623bf9624c68b2966ee6b72d627433af655a86f013e0327e010ef307f0198f0007df07ffd7e131af0097f91ca79fdddf00fef22c4ffd8e12207e709a2f80cffccd5c02fe07cf7ef0cc81700ec6d301046803ff00c40f19cc0fd90214f032918674207e480002720ee0838e8fd1005f00d6ef442a88e8b8589e5bbad44b16ccfba4bc5f210ff9eb8aa0eac2be5aa95461e82e9241221914f47db8ba464d3a1483a4118658d39ee3a76b1240062cf20286bef2577d29908224e75a0620001c1f258d964c967e03a787d5cddbb48d963b40b270b342cebb99b798caf02e94f1363cfcce35deb3f7a1600000f031f200a3a21163a3e5e14b982efc9ab38f15ec68be614d3307d3cdfccca99ff9ae79ea847a4d6f3b78bbce6aa55285a1fbf761fc7db8ab42f6bc255d319e6621a39b799969da535fa3e8547bf8b5f6d41cd428c294a723cc644f8a4c37f331533184ddccc7641dde2786a7bec3318e0bae4efa2306c5a01874e7bd187f9f7b18628f3156966ebe5c388e7edb42cbf87d28ec66fc3e99877e47c9c8431e1f087692dbcc396ef4d7a38b44a2971859f8a78f755146fa2037872cc845d2c78c5f66966ef459697af63bd34b3d3b623189730c630c837df7cc9bfe89c562b1d87cc56c8436f082adda13be5a61131cbbf8a38566b342a3b75ab8d47c3b8f0fe47a909b459efd8e92e89d6bbf43e4650e7368226411917360291939779f8e3abe8fe7212ca211bdf3b228232bc6f8f3d5e11434732f337b37f2992e7a9feab42ec9ed40f8878adc8e6b0fae4870e5298271141c8463302630182ccaeba77bafd5eb65236bd4b1273179830cf2c69d319e0e0cda782b6944e7a4ec58d47ec4da7e461f93f1fb5417bdcff4d03bf9019a2f18911f3f5e950ab143a4903a44662d1ca850284d9b746a1a0a8542691a0df548696d9a2b6c5da2599b65999cb7b329e7b556ce3bf3f42cb3f3ca79b3d039d3cd51a571d3efe5ec9c26db695fcb6cb9d35b2e136cddbe127f96d3a64bbbb41b43270ab598ae9b4c2651cba98b4cea33f3e964c62693099baaa99aaaa99a41336806cd1f2a55d85152bad5e7c95b599e36e2987c3afee6cdc8a7cb90913744219f4ed336de0d77b3ddc41b279fee3d00db3d4c91ad7b3097de47fb585a8cdd2cd248b24823fa95553f933ed61dd44ddae6143bf92946dd3392ba86fa529154ebe292d3a0c59051541ab46d5b4b4ba668e89e051602fde4fea25bf1aee4a70fc271a6cfb2fd2a3575acfb76724b4d22ad7c36bf271048109c4f6e72eb9ca33c1da10d9f9eb3a6d772c9bbf7d9eacd2770ebba47e558e97d3e97ef93f2d19414fae518ee2613f30492467be8e74e87ed5e9b7266838a25cc29baee4b45b62e30299b9ce34a3f3b6f1f592520251ffd8e92eb23e7e4cf785d7e9f9c8be1e9389d3e99471f59b134227d34dff721f9c9642a8d4820b779a3bca3e4e424f9f5cfcf4fc7bae4537df4d8bac83aa982758a9f58b7b76aa6da572b952a0cdd79787854fda3ea9fd047954aa552e1e1e1e1e1e1e199f1491f89c2081472e74818461a4aee18c7c3c3c353fa99491f59f7f404ca64629e60a78891239d6a4d289af4748591bbc79933bdad345322ccce22de58efa1071e7848a54edefa983a75ed2c4eae69273f790b95e5d39744dbf60553e8e48121a5cba5f7d178342e4a7fbd7b2e9f1e899b4d5eebebc5f3e279f1bc785e3c2f9e17cf6bdedc8bf1f7b987a14a153bb9897bf174984c2fae1965254314f2b84da3b198e904d20e65f7db16282d97dea7d632dc4cfa1d259d93ae93689630b774a59c58d4bd0ff5d21d853c6e45b2954656959963e9bacfb27c1faaaaab954a1586eeaaa0ca13547982eacba77aff34999567feac96a85e6112eff9a2e0a0cab3aaaf8682792285e576adc66c4c46ac99a290b7694d6ac06595baee6d5ea2c50b677a1a3a6193e964a5e96beebe9abe63b1a69bb41659441a3473ee53c47d2cd87de7d2fba464296e33b78e5b054a6e8a24b7c35640aa9f7089bf3e15cfe70a9a4962df718835eda26f39bc8d50c7e64e2c16937509758a4eb59f2a11624d7b95e2256f98bc9d337de73a0479e3348529f474984e72663a86faaa1f599d8f8dc574a5f7c95cbe0f75d2c7410eae56c762325704890d23775390a7bbc116cd9cd65585ccde4680032ed2d0e46b1a0a95ca660beca63132de78a5f235fb1eaa563d641e521f2b8d4fa050f0e69b5fdcc3a7dd6fdba46849654f5ae534d9ebd40bdc61eb736a977a811f9b9ed64bab8daf6c09aaeeb9efeb2f8bd917bfafb32ccbb22f7e5f675ffcfafbfa935994d917bfaf3329a594d917bfaf65f6c5afbfef4b85622ca8866ac74cb598a2ada62cbb5966b3eca3c9becc5b3b6429d79a4c38259a52b42e59a1ea5ed35028ee350d85dae20df6f0c684342a6ba93642611cc2b49b157718876637b78a3b8c43b6e20e8772df8e8e5061b85a4d0ab4029e6e0303a8e715479c736ebd7be35a3aa66d623a942d9d92b1181326ab55186fc2215dee709c60ab138136f014cdd0f45c7a3e74ae719a736f449735cd63deb4a8c58cda498f642eed95d6affb66a594525abfee9bb47e7debd9dda4f3bab4f806c361bd2df7badc967b5d6ecb75e90d0b4382b4ba6cadb4db6bbe79fd5697ab7354cadb61cd32ed32b5d6facc3924132287c8d9465061f8a1509aa6a26923548ac88442691a49cb46dbc59cd6896e739da7634eb989449a8642a93a6e43a134ed662294885e6df3b08f90d9c3395245410650501faa67480a2a3246d350a8147a9a265a8a38248a44677a699e6ffb0099db5186af48db3aae9311a7f3dc3797965eea5956927444a5b4d4affb262df5eb9b68a5da383cf2f03aad25d3a9eb15297acb0cb72a19311128c23c54699f335312f67306c7e2e9b03643a9c21934aa96d58c2a2881422545c5948393292cc89cd7cd27c92073a16efe28d317e12073a26e3ecef447afcce18ebe28cf173d2173a35015b0cc91bcdc5ca99bdf65fa5c15b1cc99baf95ca63faae20c993b75f3b74cbfab228ccca574f3b54cdf2b923915fa5b0c32f775f3b34c9fbb41e650dd7ceb83ccadd02f2921732cddc80a996be9e6cf31642e46d75f64ce85722fdd7ccf94f3e81f6a0db9797e44411e3265e582cbb2a7d9d7614bd992d4a9a42da6ceda2ccb325b77d01271549d125fe7196e53db7047646ef654d5b85d95b425e2cc25df87634a7aec305ecf47e8fc642aa9a4d2e572b96231966987d48968c520ead38990aed3a36d6ea6ed04cb9c23e248a75378421768d0b48215f0742e5e61a26e83a7c768038218522266aa026d5c8ba680f21ce0d6bf1904d4659299440a21da502762489d4ad74c5127a24d8ce1139295c44c51fbb24cdc0e41de4c26d3bee48d76653ad9000bb2020a997a94374c929065122be0964c526bbd96566badb5b6d64a3d1d96c9bca14c444a2910d95d70451c974cfd6ace2303a2434a8d509ebc632d92b6d1e9108a88739d26a1dea24732ed116be815997a04b26e7b449ceab4651d01d62fc81273d721edfcd29b3d7e6ceb762f4542a9eb74383d1aa8e8e8d16dc05b928e761b883762648f88639d7acebc096f16236fd01a441ad4a9cb035b329972e0066ae0972914b186ba7c51af2eea340ed1c64a4fc488e3f940c564edf5616d8f0e6d8d7a020caa3a4ca26dbc438b73ddba8fde3153d6ad8d35d63b532260cf4e8ebb2d2d5be721e7ba6f09bda9f396a9e3b688e312cda086f806696f17d6eded74c056909a37e79cdbde6ed6ea4c1108c64fa3411c4a3ab21068ead0baf72d53ee40ab69ff7272e0edd06e20ee5014a0f081285a41e47ae61dda988893b97519f1068da461ddfa6dbdb43e4b236f2c1169e8bc78606b87bbb5a96d34d0631c00f9ba6559cb23034d106bac338185684517cebc7dd23860961b73b4f6b443eb37663af326b29c649b59eb31c66ed20b92b27bdadbdbdbdbdbdb3bd6b18ee998a42489b86d00d55b8ea315a3c988389e4b9791373aed613218601efdc839fb94656dcdcd46dd9225c2ef53c1cf5c8ce00d7d1f07e3385874cf6ba82f455c721a6e8c4c7a22d29e25ff844bfcf57dc1ade4f8404c0e24c80d8233c9398e337d16638c4c48a28e35f393a783cbaa461ad518b547e5487a9f149f3f5352e697adf03aee1b4a47e9d064ca4fe83ce282620a2440704551246a5fca5d60521efd8e8d9615252b3e90e8416e26693fabe6f13b87aec0cea134ac452d7eacd1c7de6c1b29d9ba46517bbcea5df5fadae247ce245d999d8dc511233b1d4643e927dde456d7646d788431cea1266950436ee7b61bc64eaa4adb9508948371300ec6c16a3716e28d8c9c73ce89be600a81e1e46557d76517175c13ce1ab994684ef238f21ab5182574a94676360cc684098ba4fd166919586e1efd8e12527c20263fb9e969d63cba6824cd45eb5e46d2884e7aedf4416eb6f4f4318bb2bc33f212f73e232f7dbf64d06b954425a5743971c55c5be7b966aa6dc416fdb9b0cc362cac5846ac891efa2e3ab7ddccd65c6aed2d4c0b979ae303e93cc8cd9b8fb2ec7a35ebae635176abcc59461bd6576874e6d16bdf99f43ed34b5f4b1eafc9757e564b54af3089bbc7908cbc2fbec22c2c82a30a84cc358c933493de07168a3c2ffa0b584cbe1fc5d6274e7a5c0d6b217688dc8e7882137c6fbb04b8230ed031e627108e3f39aebe98a36918384a19866f85e7f476823d47c10847720be728c8800a3f3b5801145c8a4213463623aafb987398430ec3e7babcf4cbc29cc31c76a0dd2cefed95151269eb2cb39890c601b7ebe897524619250da7654db4b65088e5fe9264d923633cae55145550e8c4631f130c933fb079b15b1150a8fbd934397a18261d18e07ccd25db656dd95316f731f2b0451bd17bbee64dd7caa29f43bfa304bbe7d9ef749e39e74dd67dec4d5c9692787fbebaee58140abe7e23a52c8eba67ba86fae252671a6e0c91b6042a5a5a3245034b5e319ddc7e13ce5232f2f84048d783e02c728ee3489fd9eaa4a7a49fd9d41d0adde89e6ae599e97d3aed89bcf80af5223c65177ba4d7f2fd1a6ba28b4ea6f7e9c0ecc6481a3d8a3e4902cbfdafefcbd40a513737539e57740a4a0e23b7f791224672d39dd19798745d6052b3ba791fc8c88368bf53c459993731fa897df49daf47e7509e8e08dac03862948fe6a6ed399a306f346f9746f42cc618a31d65d1fb5891879c7ac77e7a7a7a7a9a257a9fccb7efa0f8b35aa95411e31edc837be62bc68eb823ee887f00dd18a39d4be83e02c5c813b9d3240c2ca05cd1d19b5091bb6fff748c1a2b248a388445a79e5051857cc54b8afbbaaffbba2f29eeebbeeeebbe5ef125c57dddd77dddd77dddd77ddd9714f7755ff7755f52dc8823f39daf3b5f77be5a2551c6efd3755f30854e1e0c0c295dc6efc305ab1a2a9a3046b4e5d6b49911439b9814128d889bd9cc8949cca923040572809855de1022ce883645c470d2a8721c4785132ba287a4a1d3847b994316d58122a224b9f47c0879cb47e63c47db90c096295b1fa3c7602be49bcb1f594e4066a2ced3912013404814c84430f29c4ee41972f9a11c9e4f370017025b604b7ae7edf9209d1b928bb82e7dabd4d3a139f51070410a1a40d6961235cb61c1d91d8f3739276830d7cdec34afc6202c450f70f0046602a700bfe007e8081203643c84d8517708513f27c78e7973ef113f52c04474432693dcbc027023d7fa2328b28274388f64f5098c2bf823d6dc1cc18308eeba1f1e0f22d8cbad1834bb4339624dd732b7e24f38399f5b563d47c499371cf8439b59c4d5d533db5cd0d4a6035767a6a6bbf6841ee02722ac07113ade5e7120c4ef9801d699373e53d3ef954cc8ef893cf14c419ed663cee41439a6a61bc076d3caccba5cd2d58168a3335d03f16c49572582bb1cad7421c12d8f517a941ea583cd7361c0c5b61122466746bbd695640247ff5823b3eeee39b35967fb056f0c2728b1483569fde89973b75eed3698e199927ea91b709c138c1ddad6f4f6a1cad1fb636cb075b52670944e4a5d8aa4872a1094edb31bc4225b5fcee85c4bd931cb0e63ac6102962d8f32c6ac0a6ec5634cab5db97691a5ca1f16b01ec1d67d75a37af51eaaf7c4ea2b0e168a41514c3e229148a3d1c89768277964999e65a5542a994c265f827ac923abf3f897c5557ce559aad72f6019a5c3b0ba8bc79041b97a908cb2127156bc7a8eb963de805e5d67de9cbc86a1fbf72d39430caba3b0a7784b15ab4b271d56ff9c5b797979f97f5fa2fda503dd1dc683003d067418d09768778f2dceb2e2311e5929cfb202b23420c5613c8893c79c1ce6e44b504f59f1d3ebcc5475f077cc54f5ff1c33553d45e5fe22cf10bd4e276d1363f87918ba7f1fc6b5575cc018a04cb2d2b292a359563cc75cf9cd51df4a65f3a1e23ccfe3a473d2395fa2ddf3c80a3d4bf4148f2cd1b34490a501223f7910214f0197981ef213b884121ed34391c549cf0789a3c3eab87af7d53553a9fae8ab93be7ae8bdaf1e5fe66f56afd57bf0bca9fee55abde28facedb50bae624dcd400c5615e01853c122fa0ad9bc2a32ea0d4ecf404a29a54d7d76a519047281502203a1dd128ee20869fcc64a3f3a06cd0b411e71a8ffe4f8a24d763d9e22ce6d3d665d7dc61c92c62a9434da03bbd5ed5b7b77777777b7777bb777f71972cc90d3458e931c2e72b6c829434e931c2d72c89093454e2c670c3962c809430e163960c8f9428e177298e47421870b395bc8b922470b3959c8c1420e2c8701390bc851400e10112782ddb8eb80f0a49a4f30b6942da96927c0d4638db4c1d36fdb68606be0ed7639a3f0c8905bb8fae75c148d543efc695aff08f22362116314689b16eef12308eddc872a735ebb70dedc1b06f18921d3b8456b080db28d38d7a7cb27224e8a8a4fb9c40131a42e7a564c512b3275958f26ef1e08125fd67c302408ad214dc8163b9792929292f29db9daa5bccc9cc7c3096c010083ad0564abead474eec3e761e630e220f1a5e28dc9a7e3c822f41071b2f6128ae9a68f02e7822a25a85e68248186cb0e48d82146cd929a169a23d0b0cc186166458722e8804a4d91fa4222842a3386302345460a99938c970c538c10624a30418021814ac0d103e1b1ffc0452f3e7809b9f4c0c58b912446d7e2d3c2b1f080655bd9c18a868a02753f1d7c994a0e546c0a0e52b27589e4247b4e378838266ab241c429cd520d220ea949d9ba8422e28c620d7549aa9e0fa36cbdd6c81a10b9c7659279132397b40d129aac699a8b1edc4101cf4798c0079c8ff891a5ed7ca87ac8e7d1214744db10116629473fa4df2742a707c77a843c04ce177c33306a9a4b0f9448b4c03624cd53334295399fae53b98ef3d97c6e9a04797437c2b84b7d47dbdc0c9c2d1f3649219ddd14a028cc000dd205862642c4300bef826fc18b584426110b556428c458215a61d3c5e9adf84357384a246f7998a384e500b1c2315ddea05185f2460d1eae8a9c0e112726a00580dc4e82428e59c8ed34f2060f558d21660d9918b64b4f01a2dc1a62041f72751944ae2e87f8cea2ef18b64f21b9862c573bce1992116bdaa9e7838c5c9d471a72f71788e1742ff2f4bb459ebe239a214f9f518b8cb32a438e8143cc0bcc1b605c403780313ecab7781b9ce5850d2f2b2e60b8a0624089f1b5aca14585450d2c292b695839a18250a60f0d5f49e50b15528a1729a3d39313369dc1242a99a114227541f2464e461de60273a22d445ba80c21cd6be2dd4e8b2ee3c8c0d93c63165bae2e44dbd4dcde8a312d57bf40c4b9f4e6ea168838d9cc72f50a441cdbd5291071aa0b913df57ca8b93af5508c35ed3f73addd7648a8b1173368432cd23b3da6c3d8c5664f167025244ee4d64783f6cd67ea900747ec317a61064ee4f618d3607031e2ac1079c9f4432dc82e50e418403fc8dc6c49426681c24aa6bf01692173b69b8fcaf43da030642eebe67f2a4066c829dc76028243e6b86ebe29d3dfaa2092b9ae9b5fcaf4b52a02a008a8344d5b07ad6388040001002000b3150000200c0a8703a2915844ce145dab0714000e659c4476704013c8c22808511432082162080104c00001909199996d500073f409935c99e536a9fa8cefcb07f707a57c4fe448afb7588ab9f2004f7694d049e90b755a0e4e2332a7c7f2da706271cb056cb34e8a37ffaebf7c48a384f185b71afa9a9541e058fe5229a802472aa81c2490c32d68c52066bc6615c70fbd53f0467194b7bf0a59e617ce201765ad132181fd2ce51ceeb0e6e9c5bb92f306c9bbcb6d4996aadbd3873bd97c0a43a6fad24506786ef68387a15b6c8609ce53f9f0df467038f4c372b822e9468634ecd6324fe7966fa5400cf9cb86011575ce9dd1f32f14c5104531d9bca2000439b73dda20c00b8ff0c40ca0a6ae1f687d19de54b2996a8bc1645e51e98bad06d015907e149eab3b4cd7fe32289f8eef4ed70f445b0eba48a61cd2727585b0bea0e940e79a0ed184cb51dec652be7fc874202a66b0599d726b63753fa4959548cec05d32c0f5237ea1f06972f0477e4174b429db4a3f46807ccfe9a3343ba840fdf663d854f8ed94a73cc80655f7ba8230ff6b4e4b2840eac01f68c0c3969ab7df48b4e293cc32b122f2a0d49d6cc61a24be8ec5fe14eea2bb0ec7ca377afbacb56dcc4cf24d7b3979b157186aab0cead2f1a7068edfa196251b1c6364ce98ef6f9c2d2fea8a5e2b9b92c696d0b523fac9a641d1b5100e38f0890b68909711d22adbc8289ade4a06ac00db296498baf6c3e574ff26e1021eaa1ff09f049c109a835c7e9bdaf76b2b6185aaabbd39cbf99166dbe6a0abbb5befb40ccfccd17d37065353f498a22a6d0ea594333c38f2f6d670488e8095a72f3fee9cc314c1c75d8e8ebe69a173d05d90ba66cdfecdf45f4434d633c28a462a20246e4fcb6a9fe9b9a625cd9337e385e676ee07552f8c87b4375c5615ed9d511cc30b6a9f231b3742a02a1b0dbc7843f023c3a6e9266f641939319d97fda83dbf65dcdeeb5aa59e3e4891aecc9c3cc4426adf738c07f4a9f598c7dc95d42b89ca3ab4e81babab9e55689ae4e83303c7aac23d02bab928dd6e003b15356c2d64883b9d8ad317f74625f7f54963e9f107261e856e713e9473f94f92a92477a1e799b94001c519163d122abb3d837d7ea8714ba06c41eb0a6ed745952670c745722c55c2f4c91fc281abb310bbcc8216e92b61f80b5d6b3031b621ee92a4c5a65c3dceb121469de66b9928aa29a9c05225703c8b0a5dc43eedc788a680b8ce5a22bbb446cb82f4c3526c4e13eaca755a327c557c6adb0c1f13eb32dc4e55bb9362877aa181d3e05ec6f9cf06cb07aa408f4d1928811364ba7dfe75e9e948e0074e6360320752f3908eb99ff09fbaadec91569c4be9c45ae8206423c6b8b9bddc980a6cb8466a93c3e0994117dd56e97313c4330c2954d0c4e60e213ade23517d356d7b6e69c277530eccb4037e14d5cbbcd151eb156c1e5df3e72ae532dd09d75054e3f706f130cf522284488adb728c0a0d26353e96377b4df60bd5d47477209f05e1b221d5fcc9f411996173b9e7e7680b50907e542b1bdb126bfd738a4216da2f0c45d50de8c957ed2227c30558fd03b73229b936dd30c5f1d3e39e6da0c492864544208a5844b5946699935f9992bc8aab712ae16e25e858f63186960a72ef57d6a234904611427b59dd73384b610891e64ad835fa936babe80f69d414f8f77847e6d687970b04cfd1fea6c1ca99a097bf62863613199cdd1fb22c60cbcf7bdf8fbf2fbaa6cd40427fa949af871555ef50904242ad4564eec59e142e8086ab00399d20b9df6cccaca9347218e2363757331bfe955e4392bca3cc194515a2553e42bd2beb129310f172e642e81472a12289abc61ebef123664867ac233ac46314fd1e214e4539458f39149211546e02acb83b500797ca2aebf0718768e66d34e7ae971372b6a2b032e2a3b496fa16d280b0d638da989588328fbdb80e38f4dd0fb9ce0b3a167c7154e688d27a7069a89d00ea4bbb5a7068fe0ba8f1f66016af2ff0bec6d6fc2405b39a7e25693956d1ec1e9d08008a5da829c5f64012403cb4c91face1d6849c95d7c4b3dea94113ac58f9f21bc569347771af49d2cb2f20d3993d55fb3a08313051d3accde6b0d48c527d09ea8bee5bb092ada5f5af0392fb460fb193bd48a55b89436925f3bbdcd76d6128a0bbe122f8897126f678097ae8ee33de04e7b74d47695796ef090d83db65c50f7d0e52dce379d34a6cb5674cd486557d6af46fc91725c48dff50ef52d91e762585e202dd66d04b4f2972f0aa6c649aa9ea5c067d2896b4ef13a99c57c6856326fc438b52e2ba6edb88cbaaedec8041605c1027d9a2ac638135d497286273d3e348f1cb678570db62306d0f32cbb6389863a3ec79063c9e2e69fea14215344452dee32d21a6e4330bb3dee2ef6b397c52691deee71f3ed072651083e390a15d1a101629841d67255a1005cf78f11dd4ddf4cd21ab4e8f13fa5be1ac8137054fec6b3e2f66b1739a7585ad0d6f2a09269328ce454373107ff44691a3da4f6b04d660f4f106c59bb223da94e425665cf75c95887d2b1c9cf3f9ddbe00c72c6218c8458b594c61f58b7bcadeb52d088e714fa9d904d03567fdaee49003e77b9230252fbb803f72157b07e4e95442da05ffa75cb565f7897381726cf5f934f36a8d850d0366b16163cdb8c4d3d23bcf4bc01fc2dee291f150c7c6be962fd0a2d01d22e815dbd18981d8f3385893c109a8641c6df61d7ecd85d894b5fec5bd2fe80b1bdc2b5c34de90ebea13ace1b4f2fcd05f41b1bbcacc1f22ea1f15c1b1ca4fdcf6d1d958ace058a9e4c4c63468738a3bb3b11ea5723129b16c993e437a2c428f9d00d725e53d40eff754330075edea86dfbac627ef0889e01a8576b5ab3741787fbabf60263786b8b0ab2e80bb8331a5ed4df6c1fbde9564d57dc178320288ff4d59f08537d72a8160be78248ea46515b3aa2ea96f75836dbeb7e2e540efbd10ad50cfc20bbc0ba28a80de461c754771c73b08b9a9b6730f2656c392b59f77404eb2fb9583032da417941167767519d324f848f0acebf2b2563e60a6f40712255ebade83b1b4a8c9ea2cbd77ac698636c6955f1bd781ca6fa2c30be0b479a7f3f0e4b90b975e91d68ce04c217ba5d6d52293f04add5cc9eb404bb8f6867b239074c440024f26d6617547c0a198fbffa49512894048a397340925f165816b537dc61135743c0a7fa74da6e84434bfac36ec04a0ead1e573c7bf9066649e12efd35aacba5874931af0b0fe2e3a2745fd00fadc5c84d7454cd2c00f35cd2ae5b062f3248e22c0d11f544aefc4041cc244522927b1288d50a5abd70a1d412b5d7b9e9708ad3c15ab10d315ca5dba1092d6658c4cc301b7995aba0bbd686f0d292f0a9f80dacf0b73a4d7cb88c2bf6f0ea68b81ca18d57b1cae938df09462197aff2be1a392ea743269beaf37cd6e47980aab22c3b2729a8e18602c7203a9d7b2bf2c307d4d58ea40875dbfa6e5b9918b3a723a14d200fc87c894be7ad80c75f9a7b39d91ed31f09dac8ab5fa14f4fa2656c55a3e0afa3d9315626d9f42fd9ec92af1b66f516fcf64457ccbb7a0df63a22ad6ea5bd0ef3359156fbba16c28bba1f211c7659c4ccda7c065edfcf44cfd5aed5a848c6b91dd7096c20486c4c6af48a449c17dc07a3c6866563858e451c0a935fccc2625445b2babdd61352c7fd455c101210a9de6da8a6891e880e91f42f80a9bfbc693f6a9da489b703eb2bd6ebccaef9967a364c56e30474d8d84f62fdd2f7b60da41b76a05958e48ab24bd2296761526046860d4561c45f6c8d965820eb4cd7c09f45c4ad9e509006a843979325eaeb6f2a592acbc76f11f6ca0efc5c551ba3aafd692a8bdfb88f3d706d9004151417d3abcfc9fe69822f1b5a12d71ac35fb3cf297a8213590cc1fb7c00168921ada954b7645815ba99def2ec471e7a78f9478f9d2ecc3f0aa56441cae3c06625ddb55b3ad5e78ad0ab50b8d978222facd7f1be77efc589936351c72b730c002c715526da04472b1e9aa772401a2130b021bd566c02ac93ee36c109d7045bfbe70dcce15dd845609f8f37547b645c36bc639c9fadecfe257cb576a58fb9da8ae6863c39155a890bbd0e8a229f1998fa7f2708dbbb9ce66c471e5688efb361a8b1344daa2e4263c4fdf6c6e5276e0343c715a049be36278505a4c63bbf44ed7bee7f31b88fce46cf2e68dd624979d30ea9f35937c5a261898b9f8d4f94a5344610d32b412eba96c6475106bb6bb2dd9f1098fdc642b5c2549b4f0161a7a89ed7432673a8815d39d26edf80cc76e362bbed0095a780309ad88773a33731d85956dee06a3e03ed905ce6ec1046eb1074632e578949a4498681aa846376ce50b73f2907a7bc3936d88b7ad332c29a3c6a16d89fc4fa6ffdd555d38c641f4cd88f6f934ba701923220aad225981d90e45f7d7d6003da89b8f87c67a3ebd89750f2b80433ad108006975d4a39500a5b56239d08f335fad7a8435139274db9a1c813c719487f7f756fe4b104ef2af37fcdca14e3b1be6af021f6193f1065e530e0b925da26f787b197651aeb3400dfe3d2e1e40828a2e1cef169758f33d864958ec17cea44a224b09b822011b95c44c09eda952754694aa8631c2671c44c55dde73ac12c427443baed6bbb2d3656346115776fad7be77667bda610a7d285fd8e741826e3fc078e9bc6c215aa2d9669fec77e18aaf81ea25bd11723ce0b1c294b8a61f107c91e5841e1d3bfcd8032e910c343a5e239d292f54165bd9eefd9b5060838c3e311814fa65492128483a305784d293d56a4a9914e8e2c1ef21f413fcdbd96b9bb8f763816e5249b4a60cdcaa3eea9f032919bbf818ead7da2cab19dd1042bd1df13eabccc99ab7e5578f19d6aa886a3e21d107bc92b95d2a992d61fd529967bf7993c9513eeefc6845acbc29739e9d5bb69bcd267f5ce3797fa5e836d1541f89e2e0bcf0b84148e2da37cdbd30e5c0182b4052032d84ade71b27ab0260f581cf5b9d0d9733b758baa6e152b975dd88fcec93178bdb2976fb31565c33cee572ab8b659aafba81730035878a9e15c22bd192216f54e47e47a530239f507e62a223879edb038156a06fc793b6adf6a20822aa20b0e9ea632e4ddca2f83eab6bb18a89d64fbada1f76a5b28fdd4bb422f467ab0f5042885f40b499a4d156652e97fd4f0819295296ae2d15942caa28c6f63a6e359d75bd52a18eee830f575fd31b540e69e54789ac367f414969450866a8fbfaafec87141d813a7c6d57f1c77718ed8d5cc6e05102d1cd4c3930db263b00c7ac4c772e6250e8271650818b7b2fc89971852cb9184dc46c951ebaf31079b6a8db57f480829215d78d55e17a26d422b819de6387061d363421304421a4587b689db2c4332d8749cc8f8859692b2ed11a53b5e3826f3ef20da859882b2de9d84335c3482fb2c20da859882b2de9d84335c3482fb2c20da859882b2de9d84335c3482fb2c20da859882b2de9d843acce937bc35806322d4bb9eb23ce8b83d4712163326de96b5a395ea223b6f7e841d2d6018312ed191d9fbb7189a2de1bab80c9b02dcf56d8c97345b4e78f67ae6773da22745387b532c03266ba3735ea5cee8a597936e1cc252353d68a458d3beecf41f241cc6eb4d1cf0dd6f291453a4457a19b97b4767a2447c3125b13870c82798845c6724c1fb121eb52ba8c8551b431e3b6ad3976c40cfceea6595af8f942947574059e4969de7e2d6d84e60ad1cb837032c78236f5eb1dc07523198b76f1c7b28f409d2d102be467514dae5bdb13d39a2955bfe622eb7cfbe3ba2d71b125318bba838c818be506f5c5f2107bccc750d37e5703ff05624cc5215a9eea234169c59a04ef7cb7b80854f0e507360ff462dc387f2056ac97b793a7f88a75e8f7c22d0fbce86bb213b7b5f8e410cf017e77bdbe97976dc8feb53ffbc628ce55b3495c973afedf7ff7e25ec8f6f9787141a288f60bed1e3dd09437fb3b6af740e5334eecdc3155e697af933b1c28ee00ae23a0028e96351f43c23d075cc089e4c05c98b52a2a7cb4cf7730e12674800244770b0a55d962cc8785776f3ac613f8de3a19458373133fa1d649bdd40663601d666412a7650a3b26078cac1afe0bb8e89c56155396fc73903d1544b3d4c6be54d120e707616a5711c8440b345f64ac61385ba180bd1331c10c65236c111fa0a4d63d29afe2304521eae05e716ec112490b108be7a964a8ef75af0537afdcdf9c07ba8d0f257795730d8508b7395fa2062a8a1bd02357ce1422bec0fb50dcf294578015888a79ed785be358505c28f4a13ee927095d59a2cc323fac75ce25e7759ffde1728a530824eae66edc1fce6c2456a67b58e4f8f843dcceecfbdd723d3a21f9f72240ac8923391e32a1b1e200e2e79c281a7edef5dcc0331782257494038f5ddcc6534eab3e222eaa5d828786cfe8c4969e240e6cc9ae231310aa2f8c3702bf94a46c2463aa67ca9956f022320c32759b8f9051fc400da0eb575ef96b521d7fa9db2e0638fa4c66f4afa4a485d41153a04066f82bba2960cc9192aea686e4f7c4f4c909917a5bcdc1b166d48a1d8acfa5f4433e412d35843318152098b057822bd60dcfc002cae0103b498f8d2f0310fadbcc061f2f975073482a44ab021062ba8dad287c1fa777cb8c4484803896c6e12ec0ff153dd01e2d74d897bd6ad24d07dc59974fe13d670769b9bc8684c994a334e5b3b0740440945d09800623f484c8582c33a6759554bfd724f10fc6db5861b48f5bf053449a7d121100e132d2bcbd12d08163fabde40a58dfef92a383fbe093395adc9312c78750a561f70b7e2c9a3766c0d9bc46a1a2f47680747b19dfa2fe2828c425312a1f6783c61604442b11512c4a5f01f1170bf67523fa7122a54e1dc37c168501d6cbd554c7a85851247f70a8b8656ad20c492a647dff6a3ddf910c338d37ef625e659bbfbb3bfa9705e4a676db57f0259ca6a7b90ee019561fb0d8edb75126705811607250743681fcd2203f1d6e929500c9acc2f245cc79db0c9b20156c982d5540771a7348892d10a5a9490a3889d0d9ccf969dca643930a5bd0fe22a6a96e9c2ed16f8c0cc3a20dd1930e5ba316cfdfc6129e33421f20ee45981d9538cbf9c1ccdc71ad0976a99b4bfd4957ae451713c72016d8acbd893a61f57982eb43c65c16653b9f0922e50ee811322807252a9fd8cc0cbb34091ddbc8ca1d706a9463e2eda6e15840a65dca4abd045bb7a4f77b443228843482e0390eec11e0c5be3a7d8db17946b6e77ba1116cf0812e2b012aa6c8eec1232a3d169168665043421430a91f4c077dac0913dd06a329ef68090e3bd07f3ec214d1796ab045ba2a77fec945a897d409faa50b61854d85b8cf7f4a69226037e8802f41b513fd8de6a1b6a3359924cde5a2cb91d4b0683118ee0cc986bb44e8b210a949c4490e27f0ff43d4e8aaa2fa18a9f37a098f0f3123b509c032313d133d91b3bf43d85be98c9d01b9a5060e914e0d491475cbc5d69c97025226f595532588bd89d8c33544de1a47b6c517241b8498d59c942db34c9a0924a35ed4f5883ca33c36ef611ef214b0b097f3b284c1a21f87c52bcdb6a64580e37d65afa98bb50df1e230f0ade273539e3eb5a655de7702ae0d736b787842e6c7d5dc3e03e2843a5655d188d55db1447a46fc26ec9888e5427a9b7a1d08ac2cdf8af9dfa1757020c034751c97f0ab46dfc831bdd2ea1b82af7ec4d065baa1a6053bb1097b82f63e1562b970604e1c48529137b2240faa84f7ef3b5e3425927589b6b04ba05d7e78100ab7caeac7cab09a9ccd9aa43a448f8c8cd81136b02cc2404e0d0aff0cc5533662546be07233d3401efca3435932ccd9bbbb970f1dfee558199138e2c81de903fb5432a7d67b36cacb9c471529d79969738e6255b6c6564cce1117b1f959a52971d98c09092d057470dc42a2ac119ae8c98414a12fb11daa22ed2117c8189a71c24570ea438a1342bde824171681eb6a174a108d684da5b49071399fb9727938fcf7b0bafc65bb0675a1ad1236c6eac6ca21c089f232052866e27b90f4078d43cc497a8dc0a935f6395a30fbb39ef8dc62b4122684f6de1e157a1c75416ff7665c216c1ca6ca97268d7c47396940d7659b4275f08b74b3989da2858ad14f2232e63048fb05c51e34b22cc36510c02fa968a405547388964bedf6aa9a2f47e4cc6730048937b333453508839eb59581ce91c0215ab878efc947e7524d68e34c0525cc69bd5102a056f59c21e628579300d3307da633b9fea016a50c1d39d8262b555059d11a205f122b2d01dd898da67fe5fd31349e62d7d350217006ede09c89a1e4997547f8e34c2a0f681fbcfeeb0499a86d627522f963784ca1391575f588bd4d0638ead8fdb591a10b55098d45079d0c51c19c70be04aadad040a0f1f183502ea6823ebe4ae2265c6279589baf10e0686182341710e991bb223145406a6c81f2474fc5f1cb5650d40b9c3007787fb11cff4c8676ffd07b2c02ace94004c363f900d26cb6fd9e06cd0362ba5f7d5bf8abfd783062693a32ccb9c0a5e5b879065f8c38ce3b4830e8d624ac1b3e12fc3d3c76600dfe517a5a7e01a3d8e58b39da4ba8382082bb207bc08e8a03fa60f8ad6adf6e520a147d8a1b386a9a4a8b6c636b54d41e45fc209b20384e45e9b6147f066faea55bed970383ec656fab475c1d08ca1cdba76455e1e326dad92dc281078ad2ef28eb1399a775257fc29fde1b84a67ab9e3c90750abb1268398a9380ff6430335683453119cd3b8b1e3f06d2e14e328c5f8c76dce517a8e348665dcee6a6b885e72a21e112cfc071ff8c495ac0b310801ba86ee15b10d817e2dd2720399080a5c24ab1e1b23b8fbd47efdd5759ecc2a0047282040a69c61044bddd8aa64095eecace0bf937da2c323a8f2ab5b442c10c45a1a0fbc07e972327b4ee978687f25f07402927309bde6cf14ed25b6a1279092e414f16202733013cd8f81e2504bd698fd7f879f495401edec6a2376c3f857e766b4eeb496dfe53d30a445c7b8b77c5c7964e666e0c39e320d61b42c023033bacc0026044a48ce005e6d7f04d84cc83ff9f78a31cfa86c184ea67c118c9c8de126f2b4839fe53c2a164095c5b93f818eda05b689987f52da52d1a3b4e8f30ac3ac8579d9a5cd6ba8591af8259f5860b7c87be519f90aaa1056df6c4cc2b7a3328628fec2c7f00761c1f20608de1377b5276161f196d64e1d8bd60c50f5258555f35529bd001bd926a781d95cfa9a426920fa92e288787b55cb0ff040897ea007038c7b51bb0308d6ddebfa8a76a79b4d0f0280ddf1f819318143ccf016e57b86f59a3482fa1d18f13476c893a6d970006009b223482e54e382500981fd9fba04b8bd40538867d28b8763cf9a975b0597d32f899c8b2aa79e4619f0ecd6e9ff069ad11066f88764b6b55a645d019b447917eb874a0cc8f45fbaa663e7c14ef6a3d2c412e1828c8a62d75bacd8a600e7ebb8b28984efd1d9fc1f887c313953f39a45d822c98dbdff32fb666860c14e42803a8b8e968b68593a833bf5f925e741349f8be0cbe6e738b654901502c1357636433eaa043ba3aa88a57010d69511353a439ae03207d3bb4c8ad2ebcb28b118909f9d8096ce9db1b8829cb21ba590e8f20fce124fc84b4947e2896d75024835ea0496f5ed86d4f2e79f00b865f27e4bc41c1bb4e99d5dd21810391b858da4bb20c723db0cc30da5d29a5f2200713e3fb0bf4a12814cf81eccc409da6644905609778db8033815034f89eece86e3d3cc93bd1ba43a93b2afd49596e5f5a269c61c73180b167799522ef947db2b61e87f81c9c530fda7e209e0abf2c3a32f988ec120f5febd77ac7fb964fbc1affb36812fd6adf00fc4f1b7e2e49a03a3da41aafdbaad10e3a3f824749732d59e4ab4e222dcb18684f8f5e702a9aa9cd0915372a4cb0cb308340cc26523971ce83bf940c0f27ec5331f51977952f8cafe42770908615f0972e8dfc509ec087dedf54e8c28a36ac54ac2ea225d3ca59c31782d42c4b00e27065e9ad8c6c96c62d776bdb827cd9d3cc104842c6226c0490fbe126613109e2cbe027001e8c3ad56052fdebcc2c6746c9d5ccdeb94a5a81f3803f05ba64f0ab5dbdb1a8f75d1a5e5324364d74ca92a3f63b5afaa4a6ca9f18027ca5f4d00f02fc728baad6beb9deca87807ceffaf752f0c7a2685b16baa0984fdc818565284308ed39196fc8da37bb3ab2b66cdb7849aec01c9583184f520afdf32a4e7934d757e034da4799c2c129e5e3138ddf22e20c88a469bec605ea4b7f692fba24affe54bb9a4ff8f13027d2ccdabbf8139099b5d8d8b9d4b00756b148662b33c0fe49f241af7667f3485f70029929362c7eee0b0c2cb3cbb8e1eb60e00a09529b45baffb8fa5e701b0d3b82e642876f98acd6b9925f4d8b7f28969cdde226482a33f8ec71bd18131bdd4213d70b43fb8b1a4e6a0df0a1fad11e7d77747aa1e68bdcde952e57c48cdf9abce79ec74c26c98c509f39eff5941e07676befd4545cc0ed245fbb126516cb11af5dd79227459ef4f8801c8f9d8cae7df70986fadebe34b121d67aa0c70f2823936e20ba692538e2a4a6323483eba2918e16ae19f114a2add6162d6be8d6071a08f996bd56891c10979fa08dd20539a61ec8cc0c120dbed510dcacae3a2875851ef1441167aa02eb3472d7a74cb6e5a923e3a9719d922f035ce387afe1030ba745386f4a2be82f5e5d74f4b7651447f04f81a4534544f8670655996fd084cf83f9fad1edeb40c9eaa4bf1a608c071bc4c53bb8daae687b7fbf46f20b0d9392dc567f22e536f992f99f03e736288858b2e98cd189c23f7d4b9fde10092b38911aa6732bf301f919838311e5de408aae69d4f0845748a99368bd0fea3bd6c10e248a72fe5333a3de9bb28dece5fb617c53e12e55710c99683d4dfa8f4a62f43b5e03caa4e1a9dfa1c513284e6ca0bb29a281c267899eb303a9eaee70148e7803716b6894c741513e556a1dea8852a9e477e66d332cbb17a2c1417aa4f4631916e631b98432c145fa0d81a085b120bd8219e5dbecf81d7d14dd461e67ab5789fecb7132fc075dee61e852171af92b2b8316973901e3e00e03288139834977a316986127ef923938e23e049619e993425350ce4af242397f80074406fdceab37dca55298c461f57d0243fc2894447d7f30650d8865c2ad4946b3a312c73b2d33c2032598c78d8756810b61c490f22140c6ef358df01caa59d033bbfe7cb9c6535b89c38a74597aea7f23b0b28a1bc0fc1da2fa561986d418f5f1357cdf93b9c08f0c29a2bd79fbd7817312f314ce3e924f41bebf7ff035d27b17e2c824a3063f776e682a27a349afd3fa5337d4b89323605494a6f514632054aac831d572e99f3110fc1c67948ce318048f0074e816c805c2679e6652c9f0a808d9ea69ad9f6380ea61289a1b5f3602515aa7fc14a6940e234ac86983c82860c97a96a786c2a8cd91bc8a5ce32ff92254afc952a74a63bbd9619d38783d095635792d5bab36783923ce3350f93f3879f415170b1e1bcaa1aede6f9c981f816315a11e0828e8e273d8c8b1d297d0fcd98f4999f5f3a512fb1cbcd3f54760b66274a6f6033c0f52f8179489ab0b99b1cc709e7350ad3827f77481dd66c7b018d4701464d3cef2638b8511b918c38ce8885c45369c2e98b05253e1a33273a0864d269ad3dd7fc97c16f8f6145f52b2bfd12fae09104ad0cdce4a7064c6df6911f01808791c101958ac0c5ec6dcff2fd9eb23070d89b6ed3f1356595270a5a406a1ab8ad0c796077004f5da5e1888b354c4009b33a78e92311405a0b2ee13b8ac842579de130328a0b9863b7b8ee1b331326ccc6f6f594404827cc9d7a033cdfc8934892b3c2ee79055e9abe5dfadc3b7580c634e255b64f186636562c690ec039084f0b823e342c583d9fdbb08a7dc744ad652d5a9e3210590f15c822be06abc4ef881fe142df39fc620f7fb113b954674e7947b939f8a6155f1181c8e79fa925ba6c60e9d5cfdaf2870fa241466e2422190fe5364fa3eef9bcf46fe0a975226a49461f97ddb47a43d2df906aefe1eb0947ec3938377a441d743af2ee5b8f2d1d5f4fe9506093b60e7e643ed2267a48e2813055d839bb50c645610df6c6db271e20319e47f4e9e3a0ce35c643e3cb2c1fb0e83dc169d2bf62afc7a9d62779b4c25d4e9e273cb8081586e16e2d61b72d869f9353b47d691fb6a4d00d02bbec22cefc8461cccc20001727547b9c709a0693771393eff03d8b7a57210cdebe58414f51b12dd3850db0b1f428664e0a1a9547682719f28126e4b53b0d47da6ea0c9abde17d92cf0f31c76da3b083af1c4489e23fc7629ba3054dc6c3a185867a4d7a90620341948f46cc442c586939ea4af6955b0541527f5822ac9f1dd462b9d7e25ec27cd0240c33bd359c9c1279b3476c9bd70668596625e2678121bfa2526cc4bc31bd63678dc4c639d6dbbd5b61af6ff60e9575c127e27d8c32c1bd8a438da12194430131cea2db0954596af286ec6e809724ac03e14570e33718f25242070fccbcd310f0a5e46d857af0c87cb80b49e479fa0e7c39d31a95772b9567dc5e510d49682eff36865ca8b5db8db6e20c49dfe5c316d6b1d2d90bc7deb73155724a2a1660a98d4595c3954bb855c37da9eaa0d89accf2ce00aab47341cb5786f04bca18d3ab00311cdbc8cab88e2abb8942bec5280c508bc7f460a349887e0993c340dc64e84bc13706b7a41be8e520b3b3185609e5d3f6432d661557430aa1d0da0e2a6b11d512afc39556d132017ca89763979272dd895caef45fba3458a2fe8a139e19f3ab46f7847acfff406bb060186a0c4c7bee217a6c64ad872b439e3ec0a074344d585451caa13732b1ac49367279cff057c61b0ada0c85a71861790c31dd68e35cd4af06953e96a152725105c2b8e826e645fa600abde65bcf76af19c0be4d180f2afc3145a873b6310fffb1dcf4181edd025b0cf95346f3429e2afdec0b9e8ced7851b611a520071780c1e605348814360500e9190003b744de921022c019b912e9205394ce8c2b3388dccc857d0cb6ac9889a9e2af40fe70652a7d793bf96f5adf32a83977b1a1659ee0ab1c6d383d0fbe8dc7fbb83071c65e53eaea867876b8080ad263a077befd94bbce67d436b961310a7131205e59f527e1a9094423fd02d309e0ef8c470ae3cd7078093793a6d91b814800d5ad74bbb0caf3c3c3fb1e98050c53d99e11adf7a771a1924257382689208e0dbe7374707ff12328d9b67b2b4fc5a10d901a5bd22adf79d44d8226b9e9cb4cb5973544a81a55e16db63b8b5e1768e3de95cc75a7d65e5d3c92a526e5334d691d20095901ef235b86543dbfa1061de20b4a5b84a82b99ff841b45812b399753f0fb11d027aaea5521ed64a36aaf1970f2a56a739484302211b1d2ea3d21cf62973ab093c179572a8e6a75e92b269b4f6320db65e42e41dd77915bd101f824e0b392a7aa0dde103c6401a8bdc66a37879a7f99deff3e59cb0e19a639edb5cf8903cfe2e0b90f4004855918fb2838da81b95d563fb7452bfeaf2ae476f1558d808a844f3538f6aa654fdb5f7536e2c28eaf4d2abe24b01f33980c47d11c2196c876e02aae9bd20dbcc1216c6e5c98150ebf1d028efc016637dd5f9c7161bdb06498f622047bdd8303100683d3862d9beca6f84d0da4be41ab084a61f06c61c0d2b0d5b720574629c2bb710d11501d399c3d16ebc312d704037f396f449d11c7a3a409346fe84d087eb84e061af797ae6f3c00dff4cf7f7f49d0103e02730c6b7d8d414897b0bd92cbbb2a7bfac41b657fa09121db0ea3439007c3742319b7c8c2d296035e342c4425448405b08f2a3a6b0073f99cd9580a67504ee3cea81d917dd6f11525f676e92f9018806db761906bc0d643a864253b927f5998a69d0c4efedd9df5ba4c1390493bbc3e3c3078e9ead38a9b149b593354e7dd7863c417f63a4a9bcd41c2638b63c6d86c40ad9ebd5ecf6f7ed1fcde5893b8bf4aeccb23275a00e8ab79682a5fa93a72c68d7deeaf6dff81218355a9a0ce27931e68e68cf9cd34c4a8fc8c5d7fe832875605b819be957a428d8735ea341f6c2da4cc618e79ddd5e92fb7dc97031f9c8d6fe3245f4d75007831d8d763865ab13345f69909c1ca2b5f4188aff8e40512c8a853a2b396c24067a257ae2321ff3c1eece771d1fda090ef927d3b86068dfb9720ab9a423092233fe5b85185a8245046962ec2ec03f4ca82207c389a032fffe7d505d634236929452db796ea1e57810a126a48f07a89fd53b533870cd587a3c554f2c699732e2ebb10eb7731594406c117bf715e340d820be48f07f5f548585cd7e075cd158578e881930f6e49e14adfcdb16ecace0301f96a844d21a2a7cef399381100db3e33b1fc03b5137bd62b400df1b1a16b7248cd9886bb1085680d198ca01901416294f8f5e05fc8e87196ba3539f70cf27a938421dab4b92c2d3006331e0974a59faa6df70f9d90bff7bdc42703be5ad8cc95e50d2c667945daf1021c18b7b90852ba5d36b6345d1f5c90428d0d6ac54d1c2f15c4a8a3288c93da47228bbf61fe866a15ae419c9ca810d0200fb8bddcbfbdc624c139440c193ce4b663abcad816356318c451fd22389508db04f841590fb4023b8e5200dbe98126cc3cacf86955d9426697e7b221655cbcf1c1820e1addcc872ef7b88902cffaa8a26c9f239906fe0ab188624507502e7252c0cb1aa623400c6a52f45938d601a768a183474b89e558619027f8aa501b39144b27210f17a184d6b989340a225db53aa55ade6954651ac63e8adbe660c836a618c336e74270a273aaa36b12221dfe2e058988ea732513d39bbfb462981f4963ab49c0973629be1021824de0b2172e6db3ffe1c44c31e9c7631d108c7d9b01cdcc723256352cdbf2c63b7defbe8fe6e9cd3fcfc13d900b801574c49b8a7fa095a4413ea2a14be1265f2586a72f34e4dfbc37c57ce56a3dbed6717633c78a92afcdb1d26792219006138d0c4d77492a81cb73c336b120512625f0ebff073f8d709c1d0dad9c8f39ccee93536278300c64d17d9dc40009159b30d0d122caebba9660933ae5e303cafbed88dd8df2f2995f250520e02799a5167406786b0b9184ee379000414123629b8381c0ecf7a52265e95b559c11826b93f87a1b03e8fa0dfcd716a2616343ccff13c05434e59b1069d723e24da427ffc3dfcd6ca5258b67b6c5a1a886ce20f5a7b4a46b44f765b5cfce6030bb7ea5c3f03041cc0000c99f77c4a0aa08ff42265ad1fde1c43ba02b37186b4d2d8a438a32ee50f21cc39b2f53092d806343a9ea7e7c2012b3867ba5fce9ce4b950b28a0c09c2f47d691a436ae20ffa66170622d0fc4f285c970a82eb55b9cd07d9b8ee0bae610f8b4943a4297f8404a1cbc6437336433759c7431fe1e05b44094bd9ece3a8c4342ec4d567212fc97991bfec939cf507b7c64d43c42830f6c13b9058474d6662ceda546c020831db5be243406d1656a143f4f53e464b100f7d8449e909e4bb97f13a63243758b70b79907287c31c7e5b19c034bb8525369ea3dd2b93f5cb9427b1058fe7505c600a191ae3c293b72d965950285a5b064121aa36bc51f3a9a9c98e7e88d0109cf5545ceb66c9e9b547e9e73f63261f69fc8165c7f7f6ef9f4c3a94cd4099c4575a9f30c822bfd3769a8cb209291d4714a1c0e7299a043f7c84894f45570acdfcf60c8e2a97414a97869b7b24dcda952fc86bffee2e29d3939c030d39652021288c4bcc70f338284940cc9073fbcbfac6637dd530f7363f2482ae42d5e0003be338d060e38d83adc32578ec48027d61bb7830a273046cce369126bacb0ea7ee1655720c6f1a24b12a26063519de2060d887adede9c8cb2fb49f0bf27f04e48c432fb74b8d81ea9371cbdbc5cc6476d97aef3278f6ba74b9eacf0e2880906fb4bc0c31769806452d3ba10cf5574807fe76149fc2665e2394e6ca366ddc0f9c52ad1f2cfdbc5b4120a76682a7159a51b18ddf9df23d06da3eb3309fcf722592e3ad4ff219e3619a56c1825a491c2d0626a548d54df84836e0662d5829136202753b33c0d06ba68249773930ec207083a17cc1c5bcbfccc71c51f27004b4489431393de6e8878accd113f378fd32dbf3a8d2d4a80698aa4105248c8107a7741f1860262adb5fe67fec2d097f807604291ca17f9109fa6d2bbf42087e4fdd42b45e3245264df14cdbe8b3147c2a490fc83c285f3278a9ec6b3fc74e742ec050a616d052b557804f74cee7b8c6e694e175a3fced4cb0355f3507be37ab728ca28d072fd7a0e11cfe25ca7d94dd37f03b31d8d8387b3cadbb0bc6223d6002f42d2d7acd05f43f26efa222bf1ca3f8c51a7298140e27f89852ab2ae68bed3b7028813a51f464096a09e4904d17218d72d18f37c4305f6f90502e8aa3738084ba4019449e6830fd42a90da352b4d1fbfc525b9246605bc0658ede10edf7c9e9db50462ed24ec9c265003a44831a7f1e9f560c295006a221a50894c71f564a696323bf45c9369e37f390e2e25022bdfb5a36f813de18ce63978708f457efbf5fdf3ba19fef9ff95806b1229638429f0c12bab470ec260fe87b4fba1271ab202368293faf934db40935af9535d622e09c5ce0366fe215ca9cbcfc88c59fe564619d899d9c0f2f912753e08a2735601f6f82e13ba438181e273017878eba58017812ccb2175d4a3d4fe9c9b9e1e430c87662655bbae338efd21259cdac8445049b1610442759bb0cbe04aefb9418dc092e1c056088b46cb0739eb5e43f8a0e81951d8ab14b5017f25864d4239d6821a3eb4c1e714492abf707aeb38de4d859d0db49b2c555824c49c6e24ceb59ecda4dc935df214336406286de186896a7d14828bd350e637ac4e556d90a11b0af187721ee37ffb1ff62e7355f94e0a4f4c3c20cd46b00b7a556ad42f89e10b2ab4afe16541c3fbcca28d9ee7d41a222ec96a04a2c18683b0517b3c96af577cbfc59a0a1bd8bec1fe36806426e039f5c7ce10dd18fd168d635d507cabf6e7a0c2830923125852288cc70c4cca9215810eb9880df835ce4c8157e1ee336ae8e06b6ef6c8976c5b42784f2ad006ce85aaafc11f76571175176415a6e93cb89e9eb7d4a7fcd59ee14e4541053401d475d2eb02126f974a6e242b15988b97efca2a5f80d97baa6c004cb2aa7698a6916ad1707b38f817c110e401ebcfd3ee824ba0b5f210ebde0fc0bf3e24fa5d8633c3d19495e8819fef8504365e8b403a85b333ea7deb4a15b05b538ca76a9b9ab396059aa025cbec0fe772545225e8c18805ae80947ff3503a834adc38401c8164c17457f08794824534f6c27722411448a185a034c83e6864f4ae1dd900d955fe11a65114eae987795a0f6f184c7cf4843584f8cb741a11f2c01021b7ad68a4ad86b896514d575809160566e4637783145a555481626f065d7fd6721bbe01dedf68df699f6f0d5e45b11bf87d268573298666f6bd1cc0e3851fcbf661674ccd4d39fd50869a3055daca70cb1a254e94a3cfb4d5a2446447950ace7209dd0cb28d9f0557574b535df913c71633ad2685cd2b44827787ecf635c751bbc72bdd7af77e27a0f738e289f92959c3996ebf351512a8b769ffc730e26b5f9feef3b289209a6ba97a26c59a944f6d9668df4c18ef5cdc06d95c42e715180f9ecae9ec3e6f352aa9b17bae40bb98cbf241062a08af2e52236f8ee9a7d886090449f787800d9f9ffec62beb528e9c23df5ff7a437dfab143c92f711eef780695c775431cc8541d5ffe5c12b7c2858ef265f75be7ceb00da7afdc02ce196cd6f12a6beb58b45a2e6ab163d1d28ac08f4451f797bc1669d6cecd03422c85ca42854b10d5dc2f672c4ed9a79648e0938e686e26b9e2079e074d20ae6b4402314cecc322004fa95c2b760ac7c4bf2733fe98828255ef08139b8b60bddbf6f50a4b0f33f38b79a51b52f9fcab6713fdd1aacaf5a7946872a30fbfa85545abeb58d460b06b8a3d9c13f1910a6815855b26e534cc7527ea4df45ad215386b97c317e6b009b0c5310a294505fa4b4bfa58a29ccce44b66077e9053e1f1e9cc51def0a8b1d08a8947ded87467926c366c0566efba195bbbd9c3c78cbf8cb7ed3246e600b432f6dab77da28ccd258e428b8c3b955ea63c95c1eebd28cfb67e6322f78da8a68c726e4fa056072ebac17d617d984858096ee9c0b65f60607a0c8bc4da8e490a00ac21030129d832c4186cf5e2bc74670be484a5918ab9c2d4b7ef59be56d7e9c9bb3586f908a31f471b6cf0f25b6821844db4a8ba5d37a08c15be9efde9025958161fb0912a33db7cfdb398fd1c9e43a4b5d4bde3cc8756b34762e9c2f9398be11fe3c732afffdad4b02fef5270090e9b1b9dedb24035f71ac314ba6e7a95ce8c25b69efe5021319fcb018cd9418b86e8ac92ae53746b46c6231903f31e2b41fc4f956a9c50f09394dd25b33502b17790553c70114f4675b3bb5259f80176d53176354753749248e718d71e27277431b34ad7a476436e154276ad7c30d68274c9edc3e3b3e03c4d13bed13d67d03e74c68dba87cb8f5eb454509df39cfe1f7fc649791a9cb8ca80618ca31bd48cb4120375739086e7467acf611b2dc273799e76ac25322ad95c7e377906366745f2f7029ff3ab89ee1bdfe8c6c0a091438b0ee2b1a036f94e2b44ac38002487609c2a40aeedee773d13f23ba75edb2bb7a0714fcb43db5816b86e86c01e182f06227e7b466c90605bc16e30d9cccc56fde5f7e12ef8102a872f59b69f20367ace18002040fcf7aa5a994240576ee576b06a6e64b81e3c9af7014ef0be55c73ad4856574ef12df6237a10a7ee6baede4d8842cc193d32031976f98c6b0b2b6c168774db93bea2387d027689de6f3f5a43fc0b2c375bad15db1e7f40c5f035b39ef30583e2f316b4a36ccd4f778fb07b67d5db4899974fbba30fb165693c794ad06efd3bd60bd659ed243ec019efda2639fce65fb6fd12c6630511e3700ad02fe2dc06a063d879f4558ce24245be7f04c76c9a5b6330935ccfcdc02483fd963bac9a40c6c5ba1590aedc76e26da0c4fc31f3b661b83b719c02891b857463cfc7fdcfcb173a3015acc147bf0f6032c33ebbbd4cc486e0ee852f29b4c760c42d4a8a86221f8c98efe7bb60050adb37156c57ad3beca76b532013c13ecac155cfb36712186d72452948371c58fedd31cbf723c891e9adcc3e423b066c3c0fc22f6f25802da0ee6516002c1951465e02f081ba898a2b57fdc616f2aec31bf735943b1ca2f8bd5906b82f23a056e9e73f65b791191d2fddac16bdecce4a71ff935d3aeee32dc1eb34735c4b6e8b6b47acc848ab67a8b37a0db136b855f5e11864555b142b84abaec21a42732b8064129929ae7f98ab05da522b30a9e2935084905f312387a68d3cb16a695c4443c4f42432887fddcefdffa3f462616fd1a8e055e459ec42170fc7a48a60a72a44ea15bdbbcaa1ab7cc571aa1a3c283154e39cbec70b2b501b6e298bd483f6808af5effe24c350eedd02a92bc590dcffa35e1b6412aa4b1745751a37bbdd9e674401b9ff8612ae38c120dd39b4718b72dcb3725e43bd1c48d969591630940a6e4ed6e3b82dd7ebc64d2ec39f8819fa8f114b58b1b99473275bd10137f96c820e20a221edba552c91f2c5c531345722a29daf73660349c8973f93112a28d6b0ec24d502e337b5e7fa707d2ed4f9364cccc5ee888c55d704dabd95f18595905757625c12ef92e5b8808fcb9d34d24dd0477a382f65c4a2dcad349943375c182ecd148772c91c0a443e5dae6268d8e3091d84e22df4290382ddd4556cee942a644e6d6d44d6fa524e6326b9bfd1180a67b14ffb4c0e780d453ce09cb62ee54d2c38b18b3aa5a4055cae2a52c1dac70ea22e684d9c6e9b786a238ee9908675e7462988f04d367085bc26a7c332c30cdaff0264839366b6caf436f48ae217abfb99df497c5252dcb5fa2f57b537abd859432bc1681a1824451157ebe17b3669649a08bb658cd63a2632358cda4b96fd8a9c06fcaa1ea26976a1e6aaf7611d025de114cd4c081a6fabf32101070c11a553e7fa251253c7bf2c35fa7bd9857d21f17600eeabbf319199f40618ec63d55474e282d5a0635923daf1a3f58e14c2362566758e96d65a228ed9272c9e57b0bd8febf6f3b24d447114c4ea36b09b39915332e62d3e67e8fd2e28c9150ab887766daff31169a24611f8993fc963fd6becd74c90986b5dc2df6bd4c600c9558b529aa901b4b9c00812680dff4a09f66e0d51582655e51be618f291aa071da57dffa3188656a328961305904dee2164ea32665d4ed39495f3870700be3337a9ca18ef7ce5b129f3c712b7b70e9fb5555129a475cadc27a951b19fd129337865dd435eae964b1d146815bddd387a778fa6c016d310c31318352bb1c12ce111241f071cd72b2ee97a75fa40278c360e99441dfd862848a9fe9f2df514dcb86dc6a909f91f2f76e826047e2449c9040f75ca382bd2994501871e0847cab0bef06e1fb67e3c453ee2d2cb96844eead2d443bc5d4dff4158bf5035902573eb5bbe6e007039fde1561354ccacac6a641377511a675c9a1c7f64a4ff69d12758c23785e17b9f534eab8ff3114351db935d99040ca09a4287172bee32a67dc747b952405e68e3dc30be49291efcfe70c18a2512c2ed17cf73ee37b0e4dd34a3219c55a639e74d7178821afe9d032ae0c848b8a4734b03aa8064abac8dfe92bb55b9f79549697a0896f3c9fbab19ff058de4548140148aff400a966ce4d4412371b5cd102302d00571dd484e6d685724477e1e5e39855b15b4dbe00d0ce3cd13566d227888bef377e51fc5def23a1ecad8195ae724c1234cc98376e55563fc2d554f51f0e51795e66a31d843af63c497817c707ceb73f10b9ae21c77013cf8795a6179a5ec269a90895bb1ce73012b27549953c89fa5130e3c61cfd28fa588b825a217b88311431dedc437a8ea058d8d28a68fd0ef0b5ceed32dbb4e251756890cbca3ef3eb134e6d724a6c93d705812382f6a762d3057a5f1d1608e5ca1f2ddd5f133d6054ec34e2d91a10c41f0306ec22e9a7a7d84c0678a2879e5f30cab9e4efb964f7a31a64183d1bd134fc3f2c53c238a624a2b639f1bbcc2318e166933e2d45d9f26eacb07b1eb511e46ea312a38a26b750bd7ab9af4fa8734e5158b82448073656f5c35687abe1e99c4b406f1fae834feae003753d018eb91dc11bf5499d7d5607f47fc6c248b74e2c71f058b85e8ca28fd122f464c877133e95edc51719fa0591504d66657b093c0dcc424a76cc7d82f891def234adeb186c78010d1d26a7749592342489fda373d798be48f839d07be196db46848cc77365047f0d057cdc75c5e14aaea448a42dd35852176879537d62763c943998de0823a2586a0aee4ef89ef147db4730839955624d711d149b4cdc40b1a33b9fb1f40c9b0c2cac036ab96c58d2237880430f962bc3708e79a7c7a237d7b8cafd508c13bcfdcf42db3ff762f62b91bb6874409f18e84cea27bde77b82f91dd0c13e50964149cb96f2c4494910f4f9acdbd3b663c403843d26ba0e31b3825dc80fbe2dc80a01b5ee03c3f7ca2ffaa8c4c055b1f3ff978a597683933bd43221149d67ed0dd435fda4fa9f0bf91e7f64cfc52bfb4f15c9351dafebf4fa5266fffcbcb06b1ab77f4a41754d5eb6bd3336b10a95a038f71c07124f534bb5cf751cd0fde53e9d23c20c207ac01a9a394f9b6d50e1c6d39ed37f3eadd5606002184361daaab6eb47dc051402a09ada14f317c1826fe7a42c3e1a8d67452a3e60a641c0aef700734d6cb15244605fe75f9c461010a597e2f80f3240f2826aac2cbfc4b5979cfc9a65a9ef2feccbd632767cbb8828b6fd15ec25170f49ffb31f2a9a71e2d786c952fb592a59a7ae9f3c0bad32458be56ccedb04b565f40c9b434c199b57f6b2293b7edcf613b6ccbf56b3e6cb982d307e2b0d354aac3a631239ec22cf1ac6de9a78876e5371262dd374f55c932d88310bbc6e3e3e5cbb99a040461c0a1d38ae89d1c3982c18bb626398d61c3953e943949f808ffccb56aa5a0cba441034227410f474cf818c07eb82f7b816208fae590ebac2a274133827130697fad5f0a5c42d60493353882af5b8164b66421e2256060cc7c917ae40ab7e4890e68a7e9ec16b98e0918a045e6f23d5f88ec605034296e0c21db42e4df6746cba89e8c0365faa0461bb8bcfe20df141b32ccb8252685e914cd8931cbc2239423c032642a79b4a092e3b0a724d0531461fe6f42486d897328721d2fc634a1843bb84501c6ddb79236605ec719a71ed7d6a618664aa4c6f92f92a0bb34dc37a408081cd1b89f0e49c0dd1cb7e258dde88ed4b4c628fae940c460106a14b05386e9dcad466175af23b30b7ac8cebf5bee5cf14b182bd407d02fe39c072719f056387db808e0408d65d64fd3a0bb27ae75a1fa40e067b6064ae983a63a3109a95e34ad8e02fcdb6ec3eca6fb98a959f1990a4777323b56d86942ad28956ac5c206930a716d0d75c43038940eeb3765d64b971a09c9b478bf1d21a829619cae32b07a8831cdeb2b90efa5e168d73a6480f5c64068f5563e5bf5527aa88ce1f3929a60b275f5d09396134e37b3cddf7199e13a33e52192ce9bafb67aa5a3ce91538d8e51ca98902818b9b127fb0f7e7f6c20d4f8c83152be24e315cded1324a4bb8dd80023231b739cd9177aeaef7ddb3d5a8cc4838c0e5dba3ae8701cb4b940ddb17079b8105ccb822aaf3700501bed07ba37e1788864032d60385a8600b128562aed8fd2a3da3c78f6dd8b12035a131984629881dfc2c8590fc14bcd8c523ca17e0536078a1cd1861d9cb9dc0da5873ec4a8e6b99013eada3840f8dba2bec43bea14f4c3f8865314c949010f91b7cbe2cdd3deabc7a567a2ef54bd214c9dc0ed2b4b110311d3775e4f8492222bc392d7d3841aed413e33af0282e9124f951811548c0757dcc9f8539a57e5daa9f4d062dfa4af5430ab86d40f337d0f4ccfed0b7c33742dea24b324b9f59e520086c2892829d408195e843d3b3e977b698f9a2c06772dd9299a1643334c9876baddb19aad55e23bf5d6e07df563e23cb13cfac23dbced27a0c290f93992510b3ada5135b37420cfd0102309f9953c08b5a5016922189f8191b5107d1bca10c2cd69113d6d3c5d914597f092a586b151486bfe1dc32beabe9cf08e7b5e72e019f6020c07ab3c1bf607f84215a6649b971fcfdbd3e7a12465510bcc7cc32bcba621dfeede3285374420f9c28a4d4ad87367f8419dcd4ba3011b9ed4a08803875290239800da9e1553be3380ac3c572628d62c6536c9db2815a51060f6f96b5af2e0e3b95a50a72134cfb8732e761110fe1c4c671c855a7616ad2805c3118a47f3d05385228668fdd892f901098ef4a028bdfef9bb6e548d54f6bb1b04ea06bd1fdd42b0a46c65d1f1afe15875e21985d4f3e284d4043b193948329495a41abfe1cb125cd6c52bd80011a64f4776239e8058679d624adcac36d9206ab04d8ff56e8ea41d4df1bac626568129bb227a77713037cdfc75dde0add939828cbe48b51fe609714a8398d3444ac521f396724ac985242c8778af53a515343ee88c086abd2e6babbb6c23daab629c42fb600bd72864c51ba16a56ba2703d0ad7467d0a932b62e156b5b9dead4d610f55db14f28b2590be1c5026945d43b1eb28ba8e52d7d1beb2509f988af1c5df52887efa3d1354843f3e7ce3c717bf6521faedb7e2961228277153a8fcd3c77478aa00fd4cc1f6b64203ba1b9751594d38b419b0f6fa17172c2297d5f7e1f1e5d42d8260392a3b516a4ccda13d9a80d4fb7373e886e957c120e7ff635293d9bf8f6803589f206fe6566879ad1e08ac98bf8d08a56a6788114c224daffa2dc3509f9ba4d94725eb0069bf0733486d41a4a8bbb943fdbfdd18c7127a6d8c5a3bd41b9346e347b269c84a223554a4dc61fc67d418cf64ebb931b8c10e25c7600129271c44795b8602422daf5252716b0f331d77916e74dddcbd109e2d6a87be3a851b866bb72d803fe4c6113d49b2f0c8bf12c10d4b15552a8167a329c2c5289a187a6a4d26fc20b1ccce41ae3328089ab70fdbd2c74863a4d8ae03b777a3df20c757d5c5417c9810bbe047f6d5ace767d293f02329d57d2ccd63d8aeff6bf0eb22703025bbaed067189592bf423ae252277a83d1244be66579937d7ae20fc4252c3af31b060983eb52ea6b2af42bc3794a1fc1c6848e0ddeb62e5a41dfad6819d55b54222a70a7e84805461af4cbe96f971630565b1dd18a0e1672e29d91321bde2ba6912663c69a7bddbbd793f623102b3490557f34013eba90a13df4a2e0e54633b2e6c8fa301ebdbbd8136640638327f83834a447fe7fb0a52214ebff47efe31851dc796c5c8c748de1f76874938156238dd8c687c3d82d0bc30a9d5aea9675477917097a0c56d358ccb18057a1a739a1479b931a13bd7dac4602b3b204529d0de689d054c19cf456d91fa59ded7d39e9c47c8001765e4ec624879ac4d16539499ce92594ff42f0b237a5171e5dff80411063bc4117a7b36482920237e1230856b1baf32f8c0e9d938e65607567fe86b6702ae8cfab55fc9d8f4468eebe6848b53633809ff034b614de1f43ccc66b2d30393691f65df498af64ef99703bdc6fbb981ca4fb6cb9d29eefa70b3fbf0eeb6a31bf8114788540fd6ba56e8de2f35729716860690ef693a13761b5406255c6ac01faa3fbc03372112bdacd536f6a5b3d9a6726c353947817a0ef211049e390f4c038a33484612f578bfd0a208121440d63d0d7055dc08b32d290475024ea02beb86b8fa9d679a4de615a9cece97b2c2b71c5432188ed6661b418a03091bc488af156ea82872fc393504de1b93ede9cc5e1e01b31080c77fbab370ac36c200d7b1cde912ebd917aff011d16204cb63b5988b630fe9ed04de9dd5f7d1aa4d8b470bd8c190f9308c1b806f1fae8e8579329afd8832d3ea16286db5722f808c655f31702ad9dcac5e985f9a3b144d3d4f3f14ac5e77eb8a4efc39224ebbb10451171181ef7aa1a47ea7afaa9997377e9a1beffc88c96aceed3cf4931c5a31dbc952906ceecc82bd86c20e0bc4f9957ec592b2353ae88739b9c139dbcb54165362e5e3da2498477808df84272f1dec009a4b42315c19b889edc9dea4fbd78a4c9220c053300e7932961195c9e3ac786b8953a50e7dcea69e4ebfaeaf022703798db3548c41f102d237d43177884bb83ded7cee261a12affd4684b051e24c362d61ab1d7f007f6d8fdc51a2ffa08f9cbc1b95dfab3fab61d6fac952a66ccde1e7424a403fa2dae875b4a50d8f5b5448865516f5f85ed574ca1fbeac8205bb2c322db8228bc5cc37ca83f086bc54b6046247a54af799926b4486654d07115db8c493d004c0120c032f775680b6c02730c415520f13a42613e1ac86b2fe2b633f34adda2f0293ef41a75854e259de4f73c2df6dfebb04886f6d7b0ccee865ab6029b6831c176d127a18f4be2d582d4a843d0319d6f40cfb7c72e0b20c59cd8234d4d0a9d917f60952bdd4e552681adc425244ce5102058f656dc82d42c9fd5758d3020ada8f9868de99515b6a969ba12fa7ab782029f8e6b9fa3c01dc17f4267e034b3ecda1b3c6390d8aedb83e669da15ebc495dbc50f84766ec9eba9f2e51e66ac87b04da0eeb37c4508d45254b075290ba6cc798c196912c401f14038daf6c3b080b78b29a63caf0c30705ecb86a0f10d387ab7911b9877322ba4036f5a90310aee66e319584e7ae2b879db988a2a340bce656e6bfa8da80e8ab97c4f94631933cc2929b970817c2fe08a345e37f50bb8d9d6e90234abbd974e4c339e1abd96757929fca7e66e634a36b1e0d3303a1ad8e8fa6383b6f28301b23e752a0f12e2dba3e26829b01d8180b772e2f2be62442e91b19d198bcc954c3a01bbbfeba098e643f253135873992fb3dddb9ebb4525a4af04d4a155475c34b8d1316a6d57015b0449f02385453a460b7956827d3b22d5b8021159102330c9354fbbea1f8a4d13ad77740603c0682c7455812a2d37364e38279ba81d94163bfc5ad3e08898f0d16ec4daa9668ab9c8d75be56f4852de0456509a5053d5a8e5e5572d141d1c25567051087dd6559bd752c03ad6a663a0a4b1b5462d015cf761f149a14cd589a1a6e4a0162dd5b012ac265a34e5a7ad1f95c660b39cfe64151e49db00823cf9341441f7037a54b7c948ca753865fd61b5e50d11479122ab65f6b3daceb48ae8975aa1e940027f9468a49a4f54c83f563968be6215d0f03f39506b37cd1ac9960fbbbcf606c71e0a3ae697729a7d2f212f6bb992fac34ade9b324dbc75ba440168116225d3dbd9bf5be5a4e07ba89f3e806a16ec5ff7ab786d51be56fa1d9de4aef2efef2f20d86250e8a080a0e76c03cdf1083d1f4dc260ef718904c25c26b0e4716816c85513e595546e19d15e95066ede120b13f36d37db45474c7cf53d49c7ef900c8fe7e346d00b854e7836107e8278c3295e01d9fc146e03b0be1837aa8c38db71e12fdca6f6311f8b1c23a6afa3e8226c7357408c4de60e1d6eda6237cdeea7c4e431ffdb7355a1c7a9a71ec4d1bc121c99050eebc42f0f593098156d3ae5eefe343d1fdbbb795d3985865133c9960814768fead20c2935cc69a0b572fbd2a17c3c137caee86c603dc020040604a1792c7b2bbd36eca455bfe4e8037b7a1e7e2f564759edffffdb6f3fe9a5262242b6dc3bb20ea60e720ff632bb84685c8da2aca35c495158d810f422e8b717d1d77efffff30a39e59beeddc55fae4feae598f1f0ce781da253a767f1a73b338cdff01b6aa41cf51c7e7ab95eab77e7afeba2f638b93caffbbc77fde48ed94b37fdba8ec3e9304e9f3c5cbc625e8f894feefd4518e230ebeed261495d2445852ff00804489ed7957217b82ab1150739ddd7ecf20e90f2f0baf41230734afd85bddf4b6f47ca2ffc92f210bfe0f02bc8a9e220a79c82ad166fb887c34bcfe18e56ae71eaf130edc001cb166fc023fe854714b65aac818f3f3d21601cc64f6f6918a739ebe9d21362e2d38481c7986b9e5ea757f1883f84e6d314f128934f583c7e4b8be2109d12f138f310333e277e3d5d7c836811d8d347797af81938f2e497e961f87af27a678c40f28b635e8e19f5557ae385bdcf5beb752fab2f7edd9992b9c866547c825f663c9cf1e27af7257c3d3de966dc5aaf3b02c9975503c65fa47444d095f1c5637c5e4c81994ff04b7df8f678981e7e7a3beac357efd9afea82e203055fd78506aeb5de31bc7e72d567f7de5d947397069022507ca0e05b447772c393b7f48c1797f1933b26914394bb74d885c344e4b1f41738c829879714555fbaccc99d7946784d9771c7965c7a8c3b02c9a507d1298c2709ca50e48479392ef6c1fed7af231498d9f4eabd9edc11483ee9607ccefa09c4f5179fe7c417d5454a781dc69545a4600e4b8a7a818b40c15abe70098f414e79bee402bf78379dee614fe6133cca585e8e93c964baf55aba2ca377d3abf4aed9c96c7ae9f50eb132564da5cbe2036bfd609da553a594ccde2d9146f7349be83ebd244eaad02b13ac54856eff61b7ff2e8c7a39bcd9dd63c2797a1cc3e1f020ec837ebb4b5fbbf696721492ebbbbb9dbb5ad77987e9ee6117eedabb6ccbf0102b635b26d3494cabf680c4a294ca36f0a88126cb2469f8c9a33849900523696072c3ca245b24c932491a78f228e6ee52b68e366bf4db65e87617ee1b872976f168280ce11fdfbd1f5e0c088f41b450d4b54ec9dccc232263da2dec988561bf6e87c232f36908566a9d750d8fb5de9310ececb6ac2cb33076ed9da2740c72fd84522b7725dd9a58c7b2d3895d582588e4c95385ca74a64595aff24e20661bf2256d58d286d5202a73b0a4b461f56cd0943958d6256f489965421fdaeb5db6835ea9a433cbbaec1bd8de5d26b7acff91e170e2509eeb7038b32cab19088792e330cc1179987aec923b876132e90d41a4e2ec599665b2627bf1f6e2298ace4ef65ca9b4d8d310ab9d93f5815d7b11d7b75b37f4a19dbbcb76efe18fedde6596c9b5c799c3d087f6fa1fdb41d75ebf81eda0cb64ee3f2a0ebfd7779751fd00e1f0c3d76338d04138a6feba5479b8bb0bf68e3bf6c62e57fd7519554b2b40aa886c00bbf60d5ca10fecda5dae6fef3bdb90390c73c48543550c73645480acb5e224b2cf190e1b415154cbf0913e4561f1eba3f4c1f085654ea669e7857ae55afa6ea96fe5172ffebea58feea874bb67346d36b33b6a51747b6d8bdfada4fb7d74fba25b2a95be2a3e12e9235dabc5ab74e96526acb5ee5cdc0a09b589f20d87508d832ee9ca09e7f6642d8d5f62b6a771478d12890e4304fa5cd1ed927a9734f49e5da9541a55111e472f953e105fe3471f7fc8a3f7d02b5645a553f5a3abdc1dae0ed7c69514a57543b00c9e7be5ae4462471f917e1d7cb6f7c76a16131ec53cb2601aee5c581838c42878ae402b7c53f07112a25126241b8984944a07712d95b24c34fa446fe9ce4a5fe9bba22f7b49f465df95596612a60096bfffa069d69e4eefa157aed2a9d1b9cbebdc5fdcebfb7e793abe0f873be6bf7f5826635e8ed185d095b945a3ae1b118b7c899312f9fa5c699ab5ab9f55fd69d4f54b9b363b9144977654c1995bb4bdc62e92af568248bece4257468dfa7e5d7e07b16df1134578259a2b512d7593baa545e3e8fdef96aece0b908c46ffde77f4d2258dba24fad72761995b68e9ca2cf3d75af4a9340426b9cba6be974e67145791f5ec8e7a74bb678a2ebd1c2299f92abaa316499fd7b658ba23d2cd641e8d46fdbef4beb14bcf6e7f74bfd7abcbc2d12f9d7cfd64d24bd9bf2bbd1ca41dadc5dc21fbe8a32b33f51ebae8862e4734dac65bac7d9b0c769246271bf74a8a2a7dfe5c164ff01fbe8dcba8c2c6a10f1ab771171ab7012366d1693476a1711bb781614e51a2d3c0322a528bea2b6e2d427754c922f08eddd817694172f81c8d4a1f95f06847233c8e32e9b2532412e975960e82a58f978e363a9314ca687449675019528e4678eccbeb51f3081ff3749c1cd4cf7afa202f47cf1fbac2c3abb78937e4c0036639852e6aa002605ffa77ed59e8ca5cddfbd0430048177d1f9146fd69317188fef590540f530a8ffd894cffbe8f46a3d1088f26dca4503f84c739fafae25074fbd2e7ea3a85355097140721466f3cee18ddeb317a97febd97e052f7684b3fb9e3cc27df3c1da6377ee987ce793dba3cbaa9f4f93343468cabda974ab654face523d1da5bf7ca6775e8f2e973e57a7f0bbbd0b3c7e2c1846c964ed4fae7d2fd19d994422912ebd1d57265d648dee68e5d1bbf45e52c2b2c5d1785591f12843bd1ea2f777fb4aeadc1f8d3ea44b63e7d04777bc74721dfde071741bb25e89c451cea3dbebcf4aea8dc711263df4d1c7e7112695b010a487ded26d59aa17b2b87bc9dce17bf1d44539bef827f78485aef0f0fb9ff3018fef018f22001e002c84aef080e78aa2ae03008f2a2a781477c092ea804f36f0e8a396233c92dea4b728650463341a8df048c2a5873e3af9e8d213611ea19fe071e6d25b7a7461a43c745b8bb943e3f0e4df318e0a0e7854115178149f6be0f1a78778b4f9274c037bfdeff4cb8881af6fc7b72ab1a18fa37f074378c8954f1f47b89964f09ca7e3f497918b57af47974f67b92c991e8ff018fe3ba749d4e830525e5c29c5d151ae25c5111e433ce4844709c8e4be0bf02078cfcb01d6933b7309cb27a305f2e855ce1efdca7daf511e5d2b9f5c99c799c17fb7a32efd2bfdfb2ebdd35b5acaebf68dc7121e1dfc38e41a875c9974c23d40d225c238221c1e5c06dfd2a63b7fe6162d5e97085f243c6ad777e98cfedd5a5b7adff1338f4a4c32098ffdefe0a5a7a32f1a5d99dc43ae0ce2d662eef03d74c76692ed05fdbb3d9d92397b6b3171c89c753a597a3f53526ffe6c6fa1dd1d358ee5ba76614960f7ca2183151312957606234d7a7aa5450e928081c9748183194b87931266b2a543890a39d0c01666ac007a092b4b07b9c446122578419b41b0f2325baa54957d2d61fbdddddd33034972744052a4a0035224e1e6c49a38f04029a516f8010d9d550a1c2cc1a440c1118a40b1651fe5aa85ae482c5b5612227821bfafad032d2d3c5a6c84b4d12ddd0afad74ad5b34e4a0649007bbdd6cb05d6050e66b29c87e954f7be115bee101eb5dc5e3886479b531cdedac76ecfce71d786aabddcbdeb806d3ac1868e71d888109e3fd3a77e9c12bb4d64af298ba7cf0c820d855edfdcbb472b5bce881e5682f49046f5615aec5780ae6cd9fb40e80a78d1bbbe3b37aa648e3be96abd929d3b78b54671b7bd029ebbe8da4671975d0f5edb280c85c2f068431687c72032c9f484a8bf5e3f2983be070d5891673dafde903bf6ca3dc41d0c391cfa00330ebcf6137d3b78a9023b07b4108a6a5017c29dbdd6bf3b9eaa0c1439486765d7b837aa7d6407b01ed92c2daa14b1a3ca1146e4979ec15a1254e6b26a176af7c5d2d8ea81aab47869d7e40a66b55054f7252d8acda850953c2755d9b26559d664d2f3d93399b4dc20563ee410f286c4b9b1b1ae84b454d070cbd2ac306e9f5c91aa2f8f1a8c1a3bac644bbbac8cbb12bb84703384960db1b3b3337dae325429436e44b0aff24466b3af61ec5aeb06f6c2320c4fc0ba364dd37e2253da2d3dc91bdc35ed55a3d4bbdc0d81009d7b67eedd7cf7daafff0104cda06747cc36640f4b8aaa97c3306c876025ed4faa51ab8875dbb52d16acb4221367c7a688130e681101da0f7225440079c4f18f3e0ce121f7905b87dc976d23778d24a48d2963a23c9c3921e5be1c81b2f9b1e61ebddcb7e6476cbbd5456ccd123422903714f0a9c4c4318490d208c64f26d23f5112f3432a0093614bfa01df17b4a0c563ff395eb28bfe3b8a6e674d8581c7cef52978ecf91728773e71e71129cebbb8730673ba408af30ac0f373090474ea45f4efdd4bd80b02ec9408cf0ce2b16f3f7e16077147989c6515ac360e3002c8a669f6e22aa31e131c687e4e0bb23aea71bf3460c12cbd2a327d6d28d80fc3c94112c589c8ee9d08ed1d07a6ea4888fd47764f7b77eddd63b27b1fad193a6a7425e6540b31ec23bbf722b27b4568476c76ad09d6c747c3a12b19b6dc33cc8921e86ab53371f8e45682d5a12b5245b1d9063b734bb7f49c9606bbc16ee48d2dd36b1a86fd002b42a6a396312b506c09992221539f4cb11fc94465d2b4a8033b52241710ba6299cc292705599836699172980e56c588f5bc40a2e869a093036c95293d767361fa437db09bbccd6419a3652cabb362265b9f299835796a79a640a6fa0c52b4de3ef4eb3330e99938b2ec0c57cbed4357a61524ca3aa8625bbadbe7dfaf257cbebfa56f264e8b6468d229500c12c7cc228b2b39556193748ee8a68fe2e963df9c7c6c1c7943cba34c1e851fe1d9236d58bda4c56ed23f2d5e26682b5bcda4c5948b3bd7a19665fd74fcdaddedf572af295996a5a4a43c8614ceee6e1b273a273af718d2b7872a4d7bf71ff815c7948e4bc78f3149af768f81d1d5a7dcee5bca332ff4b13dfb8fed19f718182938e6e72e51340dff8a62b6c27919158cfbc3b802a4aa050686613996515daa52ace323f352f56262194f2f47e8637bf71fdb3bee31af38a6c31a579ffd47cdde3da6fe47f7141c937529d7fe23e5bf8f81f194ffb8c738e6bfc7bcd047f694ffc89e8263625e3cfb0fed17c7a45c83f17fd438d58ba71cc685b59417d7c50d79ccbbf8bc8b9f6e783dfbe92757fbc97f643f5d33793d261ebd5f0f895880e4c9d6942a9a6ca15cbbf2b2baeb3a22cb134b42cf4c46b9a3d52141cfa1491b138f4154eaa4f2089ab152bd1ede97f90b254409a292c3f0e05b7af4f08eecc1d0f5b1eee2ca1645a492e97433739ec8d6c431c59085a8e4559c925828b2450669c3b24eae549d46526527ce87e7cd07ec35c5206d58f7ee6ce29319b123ea1c89e5e9f09136ac89c4fa4563294de29299543319a98971750223a87bcf78b7fbe9d1dddba2531ea640670fb481b00fd60379f7ba534f47d7e197d0373c775accbee171266931fbe82dcdd333a1b94577d7ca3da473e8ede908fd08da8694ddde34f347a795d866f6b945a7be67a067afdbbb4b8199bb6f37c8f6ed289707cdddbd1bc47b78c4f6ee86df6ee7103f40b608b68b5b9f604fe6c9091ed23a4ea7d0670e952eb3e9ede530611f6ce9f62653e95789f4cbd34122e170e6117e091df499a453a1d0435e0e10169664d05fb6cb5c4b9dcc28edc0d06f06fad6b7ee8e56ee1ebaa39543377939641360a66f6122b27d089d0357593b3c3c6e0785aeb58e843c5e422f793940ef25ddb3d0b33793d0b72ed4751b0e7964d04378e6d8ecdf9d50b4981d74e72a09b6a6b2b9458b59f6a6a12b93266b9a9c7dfe64cfb2e3e03881615acac34d68363645ba2debdba4e99412d9e576ab0950bf5de3bebd6b0270b748b8cc530c03235254f61345659f5885a2b223a100a93a420152d55c665daaeac7532682a282a0a8ecd8952a2cecb9ecfa044251d9b30a5054f670fb0db75bef5726580c87dd85c30e874360ffa1ba5e71b8bd6f9dc37deb3fe6e9287fa6ca7a865fdae7d2618a96b9a98df5e9613ccc1dfa96bc73cad325324d724dd992878f3216a54b589d9232d8ec95eca1b2a7070bac6b915e456258854ad9648b2549b65092e7adac939e8eeef6d5b216c446d80f197b0f8d6118a61244f2d8abedd8fa962682ae9cc0113d51cba2d613ac5c9265f64ccf4c18e6098159a5cba84c57a12ba185c322ae8bee427a09c31cb14ec22c2ed745176198ed978c6ace697942585862ad450c5f57d86f6294bbbdd80dc242574a254cb1964518c41215b2577b055ded5da722207932bda58d897d4cf2a88e5858b6d8dbb6f55429639c57aca0568dbba583e3ae7378ec8c3f7f71787bfd985527580e0fe9adbb78581573dbe4669d73627cedd6f16504b755af3b776d482f61e591256f3dd06d67c3a3557bd45c310f738779ced3115ece39b7cfcdcbb1d115235c5c37c285ed7eebb7ab4c1cd636f62b0f1387f6ba7dec3ce912b98e8ddfd25bed6ddb5229dfb0f5611eb3fe1ad69f9787b943c5e177131a995eebc4e38eedb3c7f6fa8ab93947ba44e61e729e8efa895fe6f137af07e661ee70225d638665d4181f7bc89c0ccdd351ff92e171663506d6aa775949729df7faeecc96657d3b6ac69887b9c385e73d0c6c5d95b983f717973bca053d0cb13c3975812dee39a1276c2a8d40bcda8674777fa36c1c724d1eda3b3cce5c7bc8b0cbefdae561eeb0e1b0bb75ee14c396878963deba66650e743d1dda5fb61e5db6246a7b4747db47962cc58d8789439be738eed3cbc1757762356f9fb5eb789838ac9e1f8774ae9c4555aeedd93d0ef7c8eae97d8b329a9ed21c32fdc4639d9d755d75dbeabcc6c9e499611eeed843b6acd325644f4d62cab4cd5c444181b668374502a574cad0e6a49df61c5accb22a3fbacaa8d55a5fbaf67ef7ba6e9fc05a3990dea750e822d34b0fe151b3274d16ba62c2f38696f0bcd1eebcf442afb5e6a873e6d11ae9a81f65707210c9932d3107d9b3451d7aa7c013714b462682aecc1b8aeab7088ff6a6864422914804ded0e70dc55614763bd7d273a5bd2fb5833ced9d86c77aea5d1a44f250acd2e20f8d9abf326f06f4f566a7d34380cc98c41493b407a5d86ab1a760e5087dd07727a25ff1b6bd7607ffa33ef4ee60056fca12714161b75ba427e43ce109354f98c9f303595aa1a44956b2e433fd8425457dd8c3270c737a885b28eadae5692d6aa72b271c7a1a0e3d130ebf98f0fb3eec627a886176b809c3f0f093a6bd6201800740a545ed989703040ac00d3500dcd3c3ff30fd38e6378931210823a100a93a8c099f70a85dd3b08be9c730a79b308ce9618b084b150fe34908d14b3f5d1995e986a0837ec2304740d8e5f410c300e0a7c3ec70d36554b68930d49e43fb0f1519950a117f78a922e20fffe30f71cc1197d3c3c7987e1c82fecba87e84e7e13ce098d3431c8230122ee18f61422c294aaa5afa520500dc425120157c44bb54edd0b245fb166a2fe9a62b55de1dd2b974ba5235cae4129016adefda7300604ba0c48a2c6eb2b44289923cca9f26f464952cad68424eae5287955628319279c8d28a26f858a1244996562879228ff2a7f372d498716716d229f116ea3372780e367e830ec7e106d0ed41da41f7c41e74cbeb91720d87a26b1fadd10a450789f0497497168a1279df14819e7247d149a58340b731e3a819d74e6e35af8786c3efda53eedddef0bbe8f6c32fbe1717612fae4f04d2e127b82ab1160f69fcba75a00b7ae61d4007900e6f697b477b10f68e2fbd1d3a1c845f74f8875f6c1cf49606e1219d75c0568b39dcc3e390ce364e2a1d642307ed340ebae138600b751a9f9e10a8cfb8f484d0f03833ea33503340d7ec356f863de81a9ea1a1f01803d26680b45b0f8f34666833b0781aa77181cc1022a4c6356dc669bcceb842685c203366bca56b0d1ccfdba1e1ef7b950ca8717bed625e0fed1e1e652ce8226f87f62fc6357b318fc796ed312f470dd01d61b2d4c451f418d7aec52f35feddf27894fe9d7a3b6afce452e38e32b98605d5a8f1961e4578084dac1a77fc2e01990cbaadb20893f7132ea285a2bcb75094b53c6a2ba8b3f7bb4866edcab8e5e11376992011265d6ae390ce354e7a8d2bb3ad816bbcc62d9dc6bd3ee3ca2ce38e4332e931ee08934907d2a96b45aa30f6c1de8b8774d67e04d5405de9dac5646041789c1904aa80c5234cf63c4fe4e1d087c914fef41813961425c23f4e31213e457927dca2d25c842e782bcac56ebb943db9f5721c21178002c3073d78177a10872efd100eb5d35d4c3f499509879a875d7ed34d1826049dfe23f4138e89393d8425fd11c6981e62d571a8e18338e6884be8e06342f0e1431c13c220962a199548e479deb5938b4e4e2ec243aceca5e051484eb161e8233cf81f2106f10f79141494bfb897637a395e1c8628bf78ca1d6d4ed1aebd38ca2bca8b176f694d035d7b06d2ae5d11d63e219d7a714b66209d42b9f5202feecc1a5d018f82728df372a084b785a2403aa2838e89b04a8b43109114758a0261d922e88eda499f1e10da6db64674cabbf5aa69a0bd76f0b6dc962d92aedd718825ba43da0506e23be92d7d728910822d95166065edd689e8d4c9ad1be179279d68597a9a868758b974472b6b37ddd01eb4a6bb9c6ebabd09c31cb1d8c574d074188b658b5a0bd52e0974bd92e94a55e9f72e4424ba409ab0a5eb08d2a2a5617b10a87467f62c1ebf832ad68580b4687d7483b468f10009625da4696f7b6ab50fabb4b8dd6369717b3706d15a94d625034a62b69544cb64dd0dab9e2c9160061f12ec18612709b2b024c3f8680951b54407dd219d45b2678abeefc32011d65ecabe39bf0b0a0bfa4be9a27b9fa0d797efa2bf94febdfb64f26bca4a193c5aa3b7f4371abb169af261d147a3d1ad4aece84d47e3ffbdfb3e3e7758a545504b3f31e71d254f49243a8c2d7d0f5d845d4824dc4251df774d8ecf53643a4559bfa8b020d11646a47700d1077aa59d0c2afa304b061d84a776d3ad27efeec9b54e7daff36a2d7e4f394e2dddd21552e8a72ba3933cd31f7647b95485c27738f461efe23f4247c131a487ee02c71c71213df498d3eda5cafe748afafe9d64ef37123d88e451697184595a1cbda553ee287bf208a76817d9fccdef4374aafb95c9ed692d7ed3cbf1950ec2a39541afdf059d745ffc7451eee2da8737f43a534e0de05dfc6af27678f3267c18afb4c3a32117494f87e922117e11fdde845f4687717c671b32e7ed181dc6a767ba77671bb209df99db932d8aaeccdefd2fbd1c1707d1a2f5dbd2a2f72a3d111e61b2c8345a9de9ca9cf2d195d913e1219d61986060961412e97472b13614724015a72b09d60807bc7881829204eb625dba20404880f0f3db10445e1ce5d31b8208e9277b17df40e8e1a917fab0777197d00bd2378072ba1d7d3e1bb5d0d33d458d1e5e4b512317575214e88e56feb0d12b4803e1d1ca5f0bfd6efdbcdb4b77f4cefd04bc088fb2278bb620829347ffee2879f277ad53f31574b51667e921e821d32d5d094b780822a7931e8270e8c33ef423a5c39c7008baa4a8938b7de8210c43c2e1ed655476fea242527b92c9a28f6e10c923125d2dcb306e72ca56ed0e2683aaa52b32af58d8d0eda8d1151919950c618b555aeb948cf65deea0bb0de97cc1640ecb21ade17087d56d285320c1526a593ab153d629cb6bca56c08269914ecbfa852d3c67521e16599895593f484bcba6d3c9554eee35ddd205afb4582e1deb796f6991b68db68bb04ceb0aea74743473a65316f6783a3c8934019ec32c3f6cd7755d3fd0d0d5d7aca1a8ee179d351b1ec573160e82b2646b05027dc3e3fb0289e24334883c3fbd0e539a23d871faf8501f4a59b2d5619ba91299febb6397bb5b77bb4aa7701096dc7d3bfd6588b63b754abba3f4363c1a315ae3ccdd65a7e6b90f913724932ecf9fbce4f6baae296cf7b179789ae73c968230eeaecc571e9b671cd2db1d7265cb3a592358eba3bddea9ebba3a5bd62ad324a6cc67919808816874a5bb2df4f2ae0539e559df54d8f917975e8ff92bfb8b8ac7aed293cbf2c3104b870c1932b24fd3a7e9d3f4f9ca7939c41a4374aac6adcff88c1b8e83f77aef97e78da730bba769d6eef03cef3778dec9e76f78f2f0f5c58bf004ef009281b4500ff33ccfbb9e777937dcf366fcba0107ef86191e0e38d4a851a3460d31fcac130f71baf48038b98823c393937be1bd2bbe5631ab350b33d10bf18bf813f12df485f77272ef5488cdbbf4bc5a31af86f8c5fbc9c9a7b7c3fbc96b7677d44fcfbb6278773c09b3cf0b247bcf6e8f8a658bdee7aff09e845e78c724f2c9102d7a27338be25ba8784d8f71471924b974ec7632baae935e7d967161e779b34778d9a287c75376ee6a1475852dd65adf42b35a47b73b78418e43415180547138e6c810ddb7ee28184646354448e3dbc30b8f3213bc230c333a8763b8930e033ee6880b77d263502efa76c3ebdb854f75ccfc03e51d8e697cc48574ee14c7888ef283fb866348e7704b7b77d4b255410c23a38239721d7cf7d11dbdc33032aa11c7755c8715b1bdd33cecb2bdd328ca1362def4165a3fbd1ca56b17b3705e0e136e69b105fce8755e21d8c79927cabbbbd0b8ae7718e6483d8ce81593de618da2aef09d27c47c863d0b2f4b384449a464214296ffa1535a96b40794c494d12c981754cbb29e25c5b4f94bb69801ebd86ad1c26e6158b32c1b051ad61ae5e9af5b1fe9a53cbdfc0badd91ce9e5af8ff216feb3ac5bca1ba37529af7629e50d9a4729650a09dac39a99696f87f472482b63825493e70ff5baaeebbaaeebbab0672d2d4e962d589965be98580f872edd287421912ea31a5d46d55d5ab0219dc9375c7a396e50821db57c21c1d95b68df1187571c7e611d6aa4c0b89f91611e2dd2e23475781c1ce884bca109a00a529cbff18ea7ab824c812990a276b3550a72f8cc70286a6af9d2c26a94091bcacb2a73689d16eeb832fd95a99d160e5803dad00c584d6a46642875a2c579708916419b2c581b46388ed3e84d8b13bb92daf415d6dab1723a653f6f3d61e1c81b333e6fd140de20c0e7ad1a4c1c05f8bce584bc1163dbb6ce3b5cca1ddef1685a96ade40d1c9a21d1309108c330025ca4fdb3a12b600d7d7d155d99eb8cdb7966b046c6abbd14495328620080070000e0221e62d027a48df91822141b03ac91f14a803b73016e13a15b3813a5f2a972918a0a01680e084073ac2fd85132f971ba5c65ca236d18b1a7a17d3b40cc8cddc3e100ee1d87a87b9751793874ef322a19d5d643453c6a34f0682f8cad078a01dcd16a5485859385cd743a35e7674351389d42f97ce644a7627cbef8fc8b6737f2068dcf672f9037c0cf673098387e9037ec2d1cea3371604ce46783614a35ed08f014c3984c1cdd0d8e0cdc57a5713bcf9cdd7c36287714e38e96e0a43effd9ac7c7a5ea7563e761e3f1b4bb39036e62d8d2b738c6be9605a3798e2bcbd560da48df9ec26009fef6e7af80cc0ad007cd47af80fb709172eb09c281fae651f7cf8e64314c0114f76435113ac195551038f2a62ce60e0f1178fa79c1d8fd6763c2cb2775ad4f1b4ec787aec781a4792efca7ce38e5916001ec1235d30d264a56219db8ab1797cb86353d1c34582e6d1c219ad1e20716537635b9147c964ecb1a9d8e12271e5d1c2d1a15736eed83939873b6645808139f263828107543c043a09873b5e18745d57089dc99fa27357741dbc5eaf0ba94739f6f684007f3da3b7c7f0855fb263b5b91da1f5ebd242ebda0d2dbce35776d075f0550a40275fafd965c61deb71e130fbb5491b63056c6cd8353cc6cce4eb967519d92f2f8899e9395c95580c07a13331327a2dbb5986fb319ee1177a0d5f77c4f0b34b2c5124b65abcf0f8e12134d763f5b35e97c763b49e69bf2eebfdac5e59bd8e65978647eccaae2154081011d86b7217e1c8e6b867f5d91589b26ccbb4ab6978ccac2dcbdddd5b8bb24c746e87885af7857b765a4574265727583a23e37d293073c52f1e0fbc233bb723cbce5d021d33a3ddec6e5dd5211ae967640ee6278fa0531c84ce642e3b88cb22eee2cfb8a3057e32e832b020dd5e8e18f393ced4bf649f191f931eb67d4d90e2bc761a0df9bad62d3cd299cb0322eba1fd275fdb2b9df9761a0d5f13e41639fbfcc952dac06310d0a5b4711d54f10b86616c8c99c923e8180f9941d9755dd9753d2557ecc2b0acb3803163451b68400966d4dbd13900191f74c3d56acdeef5da4ab0d91339cbb96eca751a18d7c8c40c95a164313299bd93e42ca33319d39e25167fa43d74498b53061eb51878b428783ca1f078b1060a1e6f65ff7eddacc60c19316acc9011c3c596bd85e23bc7189afce1b17ff235c6d0e4b734eda14b7ac5821cc7358fe4de3a74a5bba1a879ee9da4537d8e3bbe336333b9bba12bd447e251b3273c5e04bb1b8c0945cd6bd69e7e713ebb49391efb2767e7ac577bb1cf46c64191ac3bd767e051bb2e038ff6ba8ef1f8eb289f8dfd6cfecb8466d6806cc01b118ecca12879001220a12899ab0b498508926c3d0d45befebd3d20686e0c45bef0981dd3467b9277bc38624cf2bc77bca3f626bca7dc91c341fa27bfd0ae092ee1049be5d0664837033f917012bd06286a42a71ab019168281b4483360c38f9289901aa9fa76443a74e54ac3cfcd8c0d9215a833823c600fe89327f89347d18c8826cfcb9a95084916e5e4494538a29b3c9f6557f69addf1dbe978c6ade702b2f57c3b740587153a58a9268d0f166c9619c14027e48d068d8038e01189a3e3a1e1479796a08a24f8a81a0bfb9c6118bb4cdf138af5b18148046a824e16392ae9c9e3ec668a4478d44018c40d052b6fa0e42957be1d8a62427b410ec015a8c4caec3d64d30420f5dba12b40987c3b74c5c2a1a8794db35686e043e0bd8bbe0bd6481b930412354f83fc823c0f3291e76911d175052ba42ffaf8ed84a083ff90600222590059eae0cce43abb4dcbb0cba27d11beac60679ede0e8b25209385f465b2e8e0fd41f24ec2e1777f780f6198068c018b2ef4cc809715accce0fd9571062be505dec2196120943443a24f89c9053e5db0660bfbf1b41aec28998035793edcd117bd71b863b464724b63d089d1d52e88031ac1011e911d0f057190e76b779327be7a6cf611acb9b0ad07c89cc9f3e155053b43172f74099d741286b9927043851955085f54b0dc11b69c9b9e9a93060ebbc6ec26a49b5563d3e5e8b4e0073a38559cb21b17efa11c5633455022054bd068e8c2ec00852866541e8e55cf08666c6a9a88c2494d9335d494618928689d4f16ac28831ad4a0b35901e43393841b2bcc80052b6c56ace186cb59e960eb990183156bb8b9342e745d05128e00052e6853ac5cf09ce933c56aa6268703d8755d2ed0ac2cafd80113a79a997305106a76aed0411211dde1a16fe92b76c0846504a4e3822952b0c2ae1d1f2319e5b21b9082a088f6d01d2a96d87ca838810640115d69610cde9402163c9a851b63173573478a13acb40e18d9e1e978e63f259daa1b16b62b6c3d60cdb72381c825d89cc0c22cabb91d277ab4e06676b8b085cd56631dcfd6d3296d666626cb25d89c20a74079fe9a82ed6200036963bebb993bcc03399d2696a32c77b800c5056d286abe31c093458b3374ec5aefaea7c5da17bb77439f9e85c14b0ad63a564d3349fad234adad9e2aaaa0d1dd2861036320f928610350683db3b0a00d5d197d1edce914f8795049a7449f07793a453f0f66d129495748efeee2f3e08aae9c7cda7f200f88eb9b76d0894e81487296c0c9f3600d38a58a5b451184d0ce2a8a9b1bba696d7d4391a8be8b9b8344f54fee0f12d53fc9c85d4a923b4d5a52ecb785031ae9d4e43e1f84c7974703b838206fe390bcd54b0f082b577c044cde36fcf1b438ad6398f7966e22741dc3e0128d9abf9eed1d411c10c908ea70608d149a76595c9fd84a2c57b21b89bae2dbc9dffcb779c4ccd831aa93b3d31970a4aac36e9a923b5cd8c9b38a5e11adc0229d92549c40499e974ee4521e419b9c368211be9047100998244ff026cf37d6dd04e99495e7fc6c3a35ff15e914d6299ae72f2c2c12d6f8ed5cf8db91378008e99494f2ba562d56585194ccb7c50a3a1425f30816e9b02b8179b5cbd51566b2f47470d88e9b3720428080359f4d9e076f3a356637600db8046824cf7f369d1a25939b4e8d5b4f660448908e47d3eecc72becb42eca10976ec78f27cc7d329ecf35d16df677d3b795a38797e7e5bd2a9e7d9935d64d0411eb79e3cb31b2cbb9938191e2d2479aef25c406dc93eea15b086a2e6339ab3679f1287f6ec56a7ba4e61cf6e3b85c9c87d5be8653981ed39c11aba02a451f3b32b58b3bd5ebb480cb19797a34e4bee90ddcb0a2223778ae21f5ac6c42fa4194964359b3ce08211566086d9ddb4d3e8ca255197a49d172ea964e36a0ea35e09027b1019f680d09c3aeb98f41254721472cb5513260d5de953d31a1c69a369d0bf680e26ce2551d728814ca714b5cbcaf42d9db2b04705a6838d6aaff44a4db31693787ca618b765f219eb34d41603689ab5a7d32f8a74d6d0aea5a65372083baa88e387a02bb3e6c2187358c5933bb497c8fd59a389d6a76b6460e7148344f5d1907ba731e0c3d1cc0455ca903766772b9d1ff2dcc9973779ae598633481bf38787278ff30c659038bac8d49953c7468cdc38337a75af67d8bc2c0c7bdfe0d0221347afacfef0aa48ee242df66ae2e82a66929befd3ba0a224956e606645731714c0cc81dfa63ebe42b660834206df4a78c1de56a5ad8fc014b3fc3a30a0dc4f9829585291eed9c5564b3aec1081b68724549d640848787a7fbab97b4809077ec214b1b3ce7fcae9c780a620e44905e0ff644810f995e3a382758e7cc9ca1094e1ca2894320180a85422111888fa06d68430e61cb0c3ba852c6687397c7cf31d8798903fb785d9dafcfbf2011eef8f2f52f5f4d5c807e88959b98097fa82c4cd359da29a83565658b13fb35c20061bd56ec17f62a6f1316bbf4ac83b0bdf28e32234cbe0860318c6c1faec3d82721db87efb27d6821a4102079b55f977bdfeda14b6faf54d5ab93f4432420633dcfec9b26afcb4c5e12873cb0472d9a2bfce4af5a92025d95d8d1ea21ade33a7ea19f3073b42c3ca4f3c4d79c6cf0c9198e132d4a4d3bc9a316059da6a94ed8ee594224cb2ca380244f12440127ef902709787eb2128dca9e8146991c029dba8742dfba83ded7750f5d994c98d0286183ecddbd5d9b516d9f4c9858ef1361619aa9c2ded812418403055061a7992aadf38098b9699ce852b2cf17cf4837bdbba194dd664eb9339f4c5db75dd6949d3c330b170fdd947bba2e8e809185d8f00be70911c22fd57614f83e04e5206c3d214078dc7efae99f2784073a0824933b1747b947c0c82fe165feee113072787b5fb64b0fc66bca6631ded2ab242d664a38af4728e4f500bdc3e3b86109c8e4efde41af9b7727cabb574f08108f1be71d74d077d06d9e9d16b397d0edb77d5bb5816d264b7a2ccb5ad195ee414141c190e090be91be3559f23df4ca75287744e134941e94db4c5050b8253d4cacb5d9872fd23b2f4713f4a65b5e0fd2373c925e69dcf27a6cd4ebb17dc323084b4026a31c14ba32341efa841843b7b73d501e7a4b838e82c7109e4b66c8c042936c1ffa912e04c44680b0c348fc98efffc031fd8963e6adc74c7cc47b4cdfc247ba836e5fbd2b3d213e1e28fff0cb76944b0f7c4b779ef79f47e91e7ed95e7af796ee6adcce91f9e4f2f84b18bc3cee5142a33bca648cdfd2348e793968601f6c0c1a317e73db081ed23aacc59f19e390c7fd7f7123c9b2ad573e33339381950f5c45bffdcacd037ae8ada4533b15dbb6631bf667af7f68863c7b2493044b9ae44982254bb249822550e4933c49b0e42687baee77fcbfd0bdadfbe6f5d824209343cf3c21bc87defd7df3db38a0cbecb5ebfe2bf3f60de43db4e1be699caebb56680b61de8e6fc7f7101e3d3c97e09964fa5054f6e353f50c45cd1f17b506766c1a264afcd4f02c91c446a78b746a9c4b72f62ccbe6b34f2673bb7545f74587cc300ee3d4f321558d65fb304e1e4f88d086674f8b1d7ee9be6d07757884f1109e4996740a06165d49c89e7229d0f9e42f2e05a60e5de9d075ba2a9a26fb435886beb9e81efaf6d05fb67b53a7c5ec3d636fddeed87d9339f4d72b06d16050cd0567ae2cecccb6e8952fe72392dbb22ccbca9058394832242ca1242df64cee7f3974452392adfad90f0b8b8a8a28fea7ee1c2b2727b795b3d2d9c9dddd19128aea904e68d562bfd56037cf8754d54b2b842351fdc64238b91f5a7588634251dc4fee7333b586aeccd66c4dadb476adb54e11684c22d71a263a48b295edc9cd933b43a2a32f30587a508db4d107d15054ab34ccf55054bf4134b9ad24561a2ca73331b7fa820db1cb0c490645a7ae37bdcd9d455aecd13a918c8495c7cccac982206d64f3669717ecc8ad90e4d659e59b89d3053b72abdce7569d0af964194393c130551315fb65d0d7bee8f551ecf765889da258c46fb12fdfd2f9542443924cfbade24295324679063b6a795e5445454543170c23df97518da77c9ad25e66b0a34a9e4358434815952c7bb28c41e915a14bcb8871ed1a86e1ae5d4615e3322a199751f5eb2afb8095e10ceb02517a763ae79c9bcf0f8db53e6e3e4cc81ba03c7da541b03c642905133f5b4e070a90659e9719bccca3f6d399e4e6e29bcfc421b3a63391606be6359b4e59175d50b438572d622fb626db0b8c72d1af17d871f39136f2c65504e5a24f4f4767ec57159ddac14679ec171316058becf671cb5981b52e9218a646ac1d30f8e44abb2dcf2b532ff4814fe33f6a5c3cbd3383405a7741377517afe98489d0618277d05dea4faf18e8de5d40d8e58481e00a50d4d4647793fce96e3a774fd7aef7165abbbbbc1c4368072fc50a902a0d13a9b31e5fd06b683fdd7a1ad7bb784fa713455d8d09a7904e8a7dd46b77a92e268c85059d3b8d8b1f4516161fdd396c7ac5c27a3f1dbfc64716efa7e75adf993a5307aa20503575a0b7d08e8606546f01104d077aad55c334add2ce61221c20804a3b4dabb89b6eccc94df72ecc1197fb138621c28102a8bcd34cd5e91787148666aabc87f45acc1197131cd29fc4dc777739b9e9179f6098d3b9c378dd5ba8376d261bb204647213a102a4aa3b8c5ca92c60ba055452d56113a635a72b55e2ad71f1cdb921c513070747f4cd521d7903fb0cdd0a999e7417d7ad6c59367966121e2912367b478a736b84b421a31083187c5430da6192e09e04b5e159a9387c24e471651955b8f96c4d80d81965727617322eb0aff66e3ed95b3adbd9329a4578bcd030919029c5f0057e6bc20023e48dec14bf6b3a75a1418a97cdf59379c0621b924e917048ba304db2fa6e40d29ddbb4709644083a79d47e406b65335e81d02e18c440ded06260250cacbc13680e212725cc6479dd60c0c281d59171610aa0829f1d5597640bc98039851194c832673a385064dad128b84b2ab234c2143ec815eb3a0d9817d213c11de4fdb2a120efde63b883681476e472ae1bed52fb68438a7d7007bd08ee205c84760ff74ffb5c3eb63387254569ddbdf1bab970ae1bba523f7fd15f4a297639f9c530a79f9cdc846554148fdb4cb6b9198d1d2f9b303bb96176d0b930fbe9dc4dff517fc231daeb4d38e6888bf68ac318d0391c5a9f99b5eedc69916767ee8c2e1b796de230e31e03d20efa0feed505f45a2b6e109ef36732c142c3dce9c7bb30dab52721230c53b83073045c58011355f7846ddb36d12dd75d18ef9d0545cf0e565127b2966573641db0e36573d9746acc768adc5c46307850649bd0709396a06d9fb904eb53dfddfa2460d400074755773a356a3ada4f9e3fd74da7644da826a45ae9e415d2b16be07bfbbc904818e9bab9924c17a58f5a7631daecc245fbfccc4bcbc26d8335181b0b1fb1a58f6d6351f3e155e4baf90e77ed31debbae8822dab3143055b55e1877ed2e1c76f1707758d3a1a8c9e550054c958641dc3e2d5213588b65fb8c9f8874ede4f96fa4353467bc5e90494d54dcd2b25ea91265b37f5a14e7a8d5649babc874a25363fbd4684bb44fa744b40d2010885ec18ed94ea6d3a378cbb1382b059c65b59f6d46e679d9c81b5f9e9aa64357381c66f7b41dbaa2e130c3a1f61f9ca7bdd3ce5daaa676dd64970d6deeb2f1f184489f55969771a52ac6952a4a9fc7cb26cb281d727de4726cf6790e89e6e5b01712561e82c3e580566659fb6021322c442e21032de172accbe6c2c933bb3f9da25874badb4f8b5b93cd07a36f1f1f1f1e4d68a7776bd22b3edabd8a346acabcf974cac25b935e9197cd68a483b3e4b2b9989039f0f1691f202e9bd12551f397cd88c2f4a713ec33f7838f5c11b825701fe151d3b2d3f8cd0845b25b560c36269129bde5e5c8bc4ee3384db3f73a0edb68d7e613ca728a244c84e85cad9da20854d02d677b02cbb1e3657300f0a3d73abb24b2753760b71f0c6f3e67b0f4e3e6035e994757f7b4d84cb8cbe6e4e1ee051a4703abd122f632498f9565f486f434a396c6cd648ea6995c5808668255967766a4ea1f8a9a3e2dcead498bf3e0e8d6867ba245335899392416e672ca60b1d3edd8cd76324a965324792283d6278864924578fb697156e9514c817e096df6d11d438b7760781c9d3e3bbdcc2d34bbd647438e48c91290c90fb03e3388c960c7cd47d4c4e92d8dad2167cb2815ad68177dce17ecd9477fc19e5de4435b9b1e76fae6437bf3e9d4d6a4d2d0d5763af55df0ce6c812531ab64aad55094e57620552958d3d16ab81d6c2f400cf24e4c2008f2765a943d990641574e99deb3d015efd474b71c8a328114e7654aabb9619de2ef974e6b3b5bd8ef3a7e3413c854d60429ce4e653b2dce124ec12ff078c2b70932455f7c5efba12b2eacbcf9d0952024ca22a15c520b87afddd5bc1c1af8da503d2abd214c3b46bf6355624d8701dd8461bc772bdac31e1b43cf8288b0cc7de329e4317af6eca34f2fc7088be885b52a9abbdc13cde5b4388ff9d89c1b94483e241f9f700797e9b99c3dc32f8da4a1c8df142b2c98b438bd30451223594221cb29a4a8224f218513594e21459129a24043aeb4a3d40b9d7a394a6f2c2c8784ae68f530da435a314c7d87438ac321384c3355dc6576b9140314ca60821010e14001541c0e29cd548514ff88d1cefd4777ef1e8ea9ef2e55db132dce905eaa38241445b18fa9e272541b922da7c5519e5a36b928fc402b8245429e276e09797e23835cd17474d490e7e98df6b39d5a4b643487e6d8d3952db09a132d4e5249dba935883cb216a869d69e4effc8e58c2a96a6d32210a45bda4e0f2cbda45a1597a6d3a91156ab976334ca865c0580004bb6b0f693e9bb99110de9e35623841d59e83391a2e85bdaf280b070f611e999d5a4c5202c213d47713d873b550d86d34de830cd454351b30dd65a3244899d79cbc170369f29a480626644ec78d9584c7c5072cb282d5d8d884e8bb38a1667e91a4da742f8850845148a5c882e822112e131084b0e5d9bc93460431fb5198d488bf33ff345e8e230acb5d6de051ec56cedb51aba7282e7b51dc9e4844d18047a6007829fb2b399479ace2863a30437c1e9d095ccdad3afe9643b339d227d5e23d21609238d48241289748e256b3f74654382c7837814291e554493c5e68c72bcbfc335a26949d6291e25131f53b5f964c08e5ccee472e48dec33c352daa0590f12338f5ccef693b39e4e8d961379ee28e914889be03e9ff16459501c4432c94dd85f364b989c7ebcd024cf6ce7a26992e7923c3f663f79fea2a9f9a1d70c6d6231e99417ac259d1a43ec325b99cb91375e321c81ec94033b99cb81bc2197f4aac5499be45e49b9e5f8f870333db06ac661ee099b7139988f1db99c3c3f6b95a7653991d9744aae32e83a194e96336648f25ce5d93359e6f1b2d974e68747adbb9890a879efbe80ae7434c8f373bc7290e7d46e985daab4792becc8e5e4704f742a87ae5c9a66ed6563b39c228a2de4f1b2699d16e7b9db3bf352abd1b41cba22555bced8ef1eedb3a7c55ed2a275d95c451a35371f9b1fed67cbc1b69c3cbff9cccd47489f61a63160bb97544d264b82ca68495cdc54410daadc81e6ccc846d2627712222da2c0ded0155a43e94d1476a435d426494da7fa72e696a6c980951fe9cc0fcda951c1306b4e1517d0193a43677a66d7e7459136b013f6ccbaf01d6912c3665b18beaebc165d420919b002039645a5070bf7d0e2ecb1314b8b5a967954c973c552c915151545ded0e80a7665d33a49298af3190604ca69642ddc4d39409580012894b87a3ac19a010b6500c2a571180f2c771ed8639c0eb2cbc2e3c93af705e4ed6dfdc2fdf13a87552eb145eb2fd77b780eacc6d2e2250691d13db520327286352b1bb375ecd949766a0bd67ae7d5a6534dd770e8a26952c6487b665633d86ea640f23333c50f443083cc3ae2d5ac808a14dce088b5e5c05b4981021cdc48b1441539d8b40002e88160c8ce50269c600426c010f280c04911c56acedab5d2ab860a4868423b49067a201832dd24a9820a292441b3020a30784e97da892a9230056d28c000043d100cadae15073a1d16e860a545135c5029a258f54ded5a29e8a689191ed05e757ba0b3aee8810b400f044337ccd50f8c683d3e40c34a8566460359fe8a1eb8e002c10768ecb781acda371c985942eb34d3e5b4d8421a6654f5bf9da4c52b8f14e3a99293926c106242c580d702aa84ec3ab399615553f1486dba36c8aa820635447a90600422d3522418c1083dc8aaa1cda316bb2c67fa46da58b935236a28b252e59b9beeee3bb19e3672450ab6c89665f5d4ae95ce9a9c2563a8b473689aa6733a25a9300191ac00ab5984042ed0b941c19c7d53bb561a85cf8c1553d80ecabe200a8944a0080c85425fc8ec069a5a34a9b5d2183d9576b7164dc0539d1b07bccff32c69555384105491e3d364deb3dfea7260cb961451ace60ef263afb68a4579ec9b6fd53557e45ca18225562b234620ca60007a2018da667a5c5064a60b30c8ac190df48d0f156aae988942cf4902cdb268f081be6ff37c727e90f30329be0d4403ab63d030e89bd9b33aad240a534a5fe4746966a70b6cb8d9f1020a7af68d119d923b60a042967740a76ee60e74206dc8cf9cfea463df801e0886ac9bd9d6cd0af248715642e883216fe6ccd5910ce629d800481bf23c481bf22a73073a83474bb57ad28112ba68d90eac6c5146d5f4dbab556bb582094a5c3b562c618b22a13c529a9b1b16f858c1041fd4b9a2b89b901e8f76c286c92441b0add3a27c4da7245da2a753634bf95e75aa939cee34d228f94e8db3d654adb73ae5a1e0b4092ce8e3bc31020a81508cbc5a144bb648ebdd0eba6310943cbfe19b16e5a45e0eafab7816c9615fbf4b89509ad1da4b6794d899298ffa69f36d1f9e36b3488b14644f69bc940d22bd1c13f7041192a5925cdf3788ecc969f13ba8f387431ea0d3534c81066114cfcb317324921645139c21953c59f29493f451ae4eeee99aaeac72e2f9ee75e65c3a73def46a04e2d14a0f5b7c101ec58a4795122661babaa174e674a3598bc7d387c76f78456758f2a5e4894e7935a7531d9259b7bac91e2a7b2896712993189913879bdbbce68592a1e45904e7d0a294d3465e8916e59c44e4ec912879cb0c5bc8e3ecc9f246a2e4a5111abd5c4d11524a6728911d99ada8127295a52c1286acb382551ee913b4e7aa53a34a07ae63a8d48cd305b29a854cd18c040000018313003030140a0945e3e1703822e9c9680f14000c99b050725c9da6398c19848c01400080000008000000808601b1f22658e064e1f5fbf64a2946ae0857bb00e1275a7a420e05b46098c9d3d7c5afa94d043c5b7d68e587d14fcf8dd3e5e82905ff65a6a20f9d2f539c6c634d9b3db603056ba9c08ccb3e32658c7df1143d7fcd191138a75d8d0df2ab44428845432d275a9094d9212f4bca8848e220298332ddff92ad8cfd1e69cdea5247a77dec687b861d64fa579e45769e75d1036d425771c90c9b243d6c8721b81419c218205a88e1f0521b71d833c4bcf8b09391a5d9ebd7261012901a6783071e1dc71bc9de7955fa8ab4c509483e9b124169b66d26bcdb33478dfcaaf80db12eceeeb38f253fbdbf2f62a97053c6960d2e8d334c67921db525556baf6808f03762bd458cc38a181651b51166f44c3b718e3568d5d11d9a835fc8ffc1c154907d38e3497a9e115a95d7a9adc3a657ef9c88cf913a10f76d87f7123f088f7c527857521c9e75343532250695696874f1f41bc588f394eab8bbf83b1620fdbb3707869ff6cf52a001ef88d9059ab0e871551e2c6dcea1bcee948e4fd164d745856f3e3062866189135773759eb6918019924bf1284dfe2ec4485b93aee11a77cf0022af5450bffeeee6ea9cbd19efdfb52cbfd336bc029ef71e28a8145e83736a09e854b74c69d45c013060a88399a2fe1cc1b90300349d885e9165bcd2da6bcb8464c42da6ce8e60671145814efb938299f2618029ba5fde20751ce8d1ad45481702edc26bfdcb6ae4acc7f741ea0627cf44a761fb70ed1c70cb97326fb7fe2084f4cb9033938e40c27a9e8e264afbac85669557203dd8e6e5c02018800bc735235b25b9c7265fd03506e8b2e7449dc692dfd4ba52152a71839192d24b74e81715732ad85cd36129c583ee4bb521b17409b7a7debd3439d0a2b7116c80c2d352948534906d158e0210156108411462e0b23ad1e63d9ec3aa9d3a4507b6e01fad498c15513f92483af75e8028306898b908f39a5a621ff3910860f3c5e622f3307b7cba14741332b31154542c244d336c6aa65586d74defb7ebb27e764bd3fd5320f2e9254324a7649c276f6006dd483d7c9664013b997820510b1e6ad2e79194842202d96d4dc6c01a3e85b69685d93a91faad91e5ebbc839f9e284e3cedbbcb736400b7b8966a97ffbff15d5c45c03e7e59bb4fbae2d0182085b463b974754bc7062f193d383fd4ab834d4b0257101e1a44b813657483f3de9a6989178ced04ddb5ccd60b6809ef5685456e044c33adf7910ef099dd354637fc1dccc6907f353c216b505c99149e82fc2623f027d0b70988bdbb77d83bb09c7985c12a46d783a1428fd5ad13b7475b614533a7527951c3d016d3618522067523a6519125c89ed5b4f0140e274f2897fc0f886e92df711eaacc93801fa5f5b1fcc104e7ddd7a70c374f0b08fdaf072800bc01cb4238cc5c157c915f59821312b61baae91b8320361e9b89fe62f2c23d0d8edf54dc5ab98afd603f46184ab89b1d037c73058e80715aaada830aedc04e67289d8250621dcb759870f644ecbaf923b59a6c64a071c60bf5e42a638153af40026907bf173e6349f03cc4fc089b53028547ed9621ccbfecd5bb5ba1f13f089344e7bb21ea7036639b41ebbcc5be737a8487742f1e213655b2781d7cf658a48075e8dd30a31c8369825d574be2316c4bfb83bcb77f0c912f22deb5a123facebe4aed347e914ec84b2f81db791a5fed40c4980a30e748019e308c226abeaae7e2840e19af62b3a6d8ff92bc17c72bb45ce82581ab19ae6ade8473e06dabb1204aac121af9006cec93fdd5a700af492d79b8493c3ea75b8ccaa22baf7955c2f2c85063d05b1269226c7118f02c8ce1c148594b30005e44b14aa9692564e9593093d9dc4ebd039e003c6ecd593993f39d1434af67b88de48674d8a433458f000242b8abbe34ba05afcde560c2d81b1b148cab836ff7486bae2bb38cd94d988c2d2c2709a29464df381963a0bc1038656530373aea159eab93248acd728813f43f7f3dea304153ed1960ce246d18c3c95aa6a9d0a7c98fad985833d4bf8c4c1c54a4eb043e549d6d102bc0dfefc4f7bc28818c74641581c3a27a502312bf88f3d82027eecdb3b4f5a81f7c050620e46ab71f6be1c1fb8e3869450ebdfac49976967cb96d41ce479743ac8773ade5a79cf9358fbbd12619c504f660721464743a6607f1f5c450b34bb3c830cb5f3faf1d3070053378698a518a8b9474e91ea4fa62b31e6bb329c6d9bf2a3931444da8bbb4eb30801721e912056fdd6cb353b17280db1e7ef70b51766bdc51a59c8e5811e839a58692748b6319c75d9cbf19f57c9a4a9686350149a20ca1857fafcfdc3d4daeb44dce1109dc4aa2921a260bf90869e2029c722153f9f688c3869a3e15b4b711f653a211025411494ffae2fb35eb0933d1677b283c7fb890b339cce9571657727d908ff99f146afd7e57c487cdca041c852fdd49d6e84ee67cc056cc8a23fec98361ced24ca795709a0fdf19093971d984311dd5fa0bc3bebaecc0a0d8f7560db9840b98e3ef4056865290ac99704d1d8073f2993a06abd012b148104481f10c28699325485a573ae2fbdfa1a8c8d0cd5b62e9cf6ac0160e71a77368fe5c0e0c7e5abe9b7bf3ac7c338252ef1392ee1172f5aca9fec7dbd407dd87b228b273cad03d2510a78e8da12f7bf636629c321ef714b2518070a253d81650a0abcdc28911a42675b9b5efcbe35afe90245c8b9111e6075c4269cf0f908bd3c5b4d36a22727abc5cc851c39f1d8694e7d2d7d5003124f32df9026da25791713f7ca444600d2bd2be1e39a2d8f360286e39526e88da59f6203359df8463e435b3d6d511954c1fb6dbb57df70ee0e9568fc057a3cf9a2020e7c2863162b7a95966af891a4580a20599577aac796d08adfd6605f7a8418a9d9536950ecf90d1fdec3ecdebd2b5587d3e27f1fc5d2baa9fcfb84cacd7ec5c2198a5941156fc1bae73e620de2db81569e47bfd2b456f9460f8133484ccb52fda067e25600d91b3ff063fda4426133da847c3b2bea0c159922a6e81a541b5a2367444ccada60425cab25d25d9b3db6c9a9c3bc3d59bd35e2aa51f941d2c4e9e9206d02d10d200faaeebda68797b16a269b00a31fd551af55d00123cde4bfe876af0472139b2ce96e9d4cf99b4140017f5c73c72f9acb08e90156d5c5d5076cee918d70081b08f7dd071cc6c93fe3286abbaaf6a34c6033bb0f5443cabeb4b539264d7ac26d7c1fa6c7e7f4a611dd7e974c5b1ef92755100a17056c59fba1426cce344f312da68906ff0e9684d26b0f31a94d6fe7e1a3e0d0a87e2a51db7ae212c8669d39612738c9da22358fcbb7ff4d80e91299bb9803fd081ec0141a7f126b1cd976727d8aecaa12f0f443692a83d4e721ed3a7ae5dea78104b4b82a99c4dbd4a9eedb846cc14140600f3a01b67915f471c1be58dc6a4b5cee8c9f431f452ad4e7c7bfacf78fa1feeb36aa7ac79bf9db301dfd4c2731ed8c51a4924ab6b414c68877fec29f98b8e92b02762072128264c27c40a8316c0a67c10d5f9ff0c84c06ef66746c0b9b48d30803beac99a6408bf6a0e91622d0d1f3b3baa39d60534490a2a58b2020c33cbfe3399122d557bf487ea9f057e3256564f847cf7679dbeaa63a12b9e1a6dd0a0490f2921a49864777c842b0cd555dac5866e593cf366cd4c157b96d4d670437162bde00e5ddc8e04573a9f83b20bf7e39e530f13257ec9b8d16521b9b596ce27a6eeb061a50c7c5f49267c1c142d06f0451bc966af247d28413131e526d42ff365f2d8d2815605938f59d86bef17f9e48993f488369835bfcac30e5cda8c4683aa4d1f41f0f41a430d5d2626015dba789d8f70f099c9697684798b6a16afe141ee180022654651ef055d8f4190de9411f22bbc65798363cb3c9ebfa4fde77d4c2ce2e3d13fa478c1a635d05ae7031368b18085d328ce1e6ec5280f40b9ee134a1cd77affdfa437e8348e71dd9042c03947f065b7b84a144c5ad679e626a8791bd655dcfaa5d0112b427661cc5feda366d40f31add1f31ef4e95bafd807c2af78ce2ade886fa8dce05c33b8e80ae153202fa92f413bb3f5dc3fce683017756be8edd3f711c76568f7f56ae00c19c68b9eebd692a389b31d9a942f183772f3de6e4faaf8de862265df646fe92c47604f148cccb22d3755c6d2d832b5bec90a596d8693fa09e367b28a7506d6e32f5f059663a8fc861bef1393c96ad6959e9d1229ff99ae588f0c0df56e45c93dac4cd3886ff5a812920ee629cad0cb648fb710a583b4e04a8e67a10aab1c8cd307096e12d276a3e0e6fe4c3de0076a4d7cccfab723518315dcb1202e343285ce2501caa4f9a055cb8e417ff065a1b0ecf34c2222f8b34b2ae8537861be9a2958aa484dd92970d5eb5d0c7206344411c8c1b4674c2bbf21eb08343f3ec564f3f9ffc4e71017294b5bce7372a90d3697c8625b2b08a04b182603470378cf06cc20f668f9b10f64387364af38ff35444901d1473970ccaa2c9b2745cbfde34c313b273ffb4987f9f35095a4b7ff4f847da322f49c8630333faec39edde505a5002edce4f5f84a6c808022c28f532c56acc760a7dbe38550e64bf570cf522a563b0a5d9048012bb0fd4ccddf1f6082887b62471f8c6cfb049e97306b2a3f12eec796a2fee03196b413ccc03e599b1b1aaa9ff3b28d65a7e26841193a4521f0922a02f550f139639b8a60b8e22f85fce0fc93ac5356c89a5f0cc8088c2fbfb0602c01d08418ee134a0d348878044d238eab07192e026179e670759ad82417c186f21d604e8435b9838759b4b4a3fd0b1ac3fa4a383e8d1169683fb6ad2a866d1762d25dad4b0eabdb358e6ee4ccadf35c785d16791966106c033dd07a21428d450760efe11e91fe7df858da218dec520aeeda9b69444a131fdcf7cd14e15966544050ead492ccb759426e3b32fc030163fbbe1ff97564b45895670574fd080c968e80c840988724f93a00b468c0296c3447e2e52e82b3fb2a6d4af001a8075d0ddef9ea7ceed2da8eec042c29783c4c545f0485700b056d187afa60675e2e3fbb1e4d673e203b283f0e78b8fb2fa371450150955ce617139180a56b8f86af89a7ae323962c101b8d8cb67c0aff2f1cad4ccff4aade36818291e31058b40622eac6c4b3a1b9dc8d75d10c79615597d5778f1ae155e53e9e3e04425840d43ff931f3069867b3d352152f90d35de5cb7ae86eaed1743fbe2b481efc92cf9c85b30824700619fb4cf0391f1edc0f0ad50b48c44a3c3e5b638abd9aa5501a36e2b30a4c3a9d15ea1f4f92920ca702146394220559e41e004222ff20a7e893ff0e3ac3ba8937dd560c57962db520df2bc958326939cc50f341c823b78a8b36041a4e19ec7655e932b1718c5dbba8c288104a6e8203adcabb46d1669ed6b31a646165390bcc2a2a695280fbee7614fb0195921a3ea9497cb9dedc1407a208734f05714f5fadda821348650998df231689f6f627b07523379f22dcdb8ff0ffe896d173422553542cc1891ba89c61be105b40571ae46e7175c1bc144697d41b52b82757d20c3e92cebb4229a87eb5b06050ad6f0ec0bac4c1d121044571ce927722bbb232dd6282c2d94a075d81a03a6f13e2a5456dc45eb927cdface74da61308152dba12bebc521697d9e3c14f77f060de0526900f8e96cf910c8096e1e617d018b6404d2cec076e5a17e37650f49d4ca24e0a7fea0f1ed8eb5315ea669c961d02aa9345fcd8ba7648213eda434606bc143562c7730ba52edf27a00418d70511f2248d0a4462227120bbbc826297e21524f6d7860f592be4255a78728e43bfcd99523f653ad24d9c8944c48c928ee5fa41afde6c7c711961f9210255fa6fd023d7dcfe87751bb65b3bea1192e822b44cb2e4d97fb338fe93fa02622816e3f960f2f42f0d5e66605f4b0640fe816330606381ccf2db05ea6e0a36a53a4fdcba89c541d4250c78fd122678a944251f83fa1b5ba078a34f552c8a72b9ea54981a454ec3f9dd572d1fbc60f93b4b43a760c2d67849a1cac22fa424b86cf8123e36ebd1f3591ccdb11fb34d6879fee7719793120b150d1e8c87ce3d2a7e2c3fb7f63164c9a0792c1407b97d04f0f99e6d23b49f50d5cbaaed46b563b8dcc84fb906f9d4ef6687c4cde8242243a2f7ee47aa192dc50d475135b1d6b2eebd36505110b83f58003110812bd759e822343944852fa0e0b5815387c9387e8e04f0586a9c68c180ce4982074ab43c6ce180553c3771c4d9591d2ba3a521ad3bab0288c6a8e9251fad1fa40fdd06e0048a6ff57317c632afe064cb910671f5d5ba2fcbfcd23ddbdf61bec193c9a364e08c74985ab4a3fddbff05d4ed5de0e9a1402e1187634559f8328f0e85344fd25ecc2f8129c7f91deb950d2e584ae45d74a8005317434dc0c632688af91b7a02ec2a088a5bc1b37c630ef5985c54e0977755ef00471ba66937e8290c9074739db50e849283a308a44beafd58586dec35ca9f523248b214fa18bbfa3e5d9cb8eeeeede2e28d2244eb447889d7d9b9708701241546c984a5ad4d6b82045d0d5c7ee996358a68dcf326ebfbce7c523e3413e3cf5528a3197054a1ffc9abd1f582dec4e535664e69bb76fd8b8a9ee9094d3d3a9fa39c798294d3665b5cf541407540e8b6377ad776e1ebe0a2cd0e098bcdb389e062b708970e73b83b70eecbe5a9a907de67a6c80561b03b85c45b745c49ab0ef2deb05d88d65e5acb18d30975bf90eceb8e1bbdcb70a9e50e580bf09f877fca5bfa397a2cb3f02c10da5de02cc8a031a9bea82929f3e7d59d36511ba4e06110c7020dec47926ea41597c3eb70a80d57bc460967b44b71373921b0609d1ed47848a8401ec5b1b30daa38df81cdd31b3696e09de64d0d19fca007ebd68067f3df40411c8c9f1d24fe9d041ad8dff78c8a4e90cf057d204e4c47aae86fc2cff0a8ae1c54c0f3a91123fbb469288c590595a0483ea1d6140bb4ddefc93708a24bd7133a7ae01a99ae54321969004bb416a4cf8bf5d244bb000507d6c557b7dca9c620881dd605b9cce9de62c18c71aa80d5ad1f4a16b64ff63ceff74ee4ef5554b009f4bc5721cad2f8bd2c5c8708e884c2552266f21468f391541361243f058a2254cee28dae6cdc7c5da31ab656048ddcd4694f589e9283e3011c3d5ce1b0260815c00e72c05415dbce0c7882ddc835dd8ff9ccfbdb5c6784d074efbd93ca1e326e5686dbab88c1bd8c6533a339e7059ab9c9a0c8a02456ce1a9b0642f208c25561bfe62d10b8d63de2b75bb1e5bc4c8776db13dd356a3c25120032a6e073de8b159b6e8dd17ea53932ddafe98188385065b7002f4845d9d1cc55cef6e572335d4cc02787e80513040eb2399979cb3a0460bf8be49275972a9b7fd872247309b9e545c7b3503420db515090a66c4a49d642690ca1badb82bec36e53cdaa6b829c953f10571090984c6c2263342e5bde3f0441ab45b5183d0f3edc3ebfb1fcdf0f879597bb26fadfb2edbb1ee151f4be085a1394813ca96ce41db0a431ab6f82da16baa520b182fccf628f1197fceab91e8b1cd3b4ea311dcc2c367e32ce1688796654d6cf5a56a7bd3aa5609b298b3636f2ea3fc80088c4acdb12347002849fa4f703956283a1248b78655e78abbee47e67ad260cae9ee07e0b72e75f2e3ba99ca199e11e936366042dcf4e4265daeb4d0b626c1909fff5ecd3df535c3c0e94df72aa64257e2652a7d00f55c8d6f8df453c763c952ed3c8535cc05d57cd23bde9ed7724da45fc1c309df9ba185f0009ac4ad4feb521f1478533672da6f505415bc2073a952abd746ceb779d0be8862d71103ab2b62e3bcea83faed259a206614592dc8586dae2209f2bc15ed1b98c39f2f5615256d1c0ad2d47d9173eec16c06d72b20f2cb9803e221b5b5b0d9a517e89f26478217a1868d93914d6bcd1bbb2f3d4ca547b9c9512f52a31b3b2cbf6fbffa0ed624549af8cdc4db089583a41ae8c6ae67b553fe764c0ad9d0121d636514bc52543d62136ce38a04b8bc43d0a38031a208a5e1329c3a11bc650632707987e8f581cc9735dffa865001da90cb8583c86b77c51e4fc5ee0ad7f43ea13842f7615ac79c1033ecd76aa54d16f94743d0185c5a6ab50e92a9cd306975f190dcd2439242f3d3b389dd73ac94ef4980db374f1fab50e1701fbef1086a9bfa46d9e57e558f43bf3a155506f9c07dd6aacfa425c734076ae358cf3dc2c52eb801ee22ddec6e75d274bb4a38505e956603088f1ce4d883d1c5c50fcf004efb88785866ed36df1a51dedc2901a5459226a77fbd7d23fd721eecb975304e5dbddcbdd80fd2a1ea42d2c51c9777a98b9d7e4c08dab92692d946ba3933964084c0e21e010d3bcc345d9abc6046ae9535e215a1a3e31df26c70ae14ad3202f0e264cf827c5e167fcd721f785746131c38ec1ba664c286fda09a0fd79d098177a9421b83b9ac3f994095d6fc9552d3e03e236209455a4ef89061aa4c3d492ac16752fb23d0209ae6c1875c607b6164531d775d70292f4db7fbbd5dd2a73b5cc79cc36504a82f0204c1e709f7e58be5f052e756b3fff41d9da84e96b1ba29f8e40770b973175cf0157626d450dac843e778d13563066d0e4176a441791d074dc73eb78180ed0c0b1cbd96f6a702ace3f4298ec87d624c569d7c7828ccc70c8589e459c2c2f4d09165e03d243c1ae6d63e447bfd3fa99eefe2aa3f491d624ca1f4cfcb406edab54346381be0f60339af5c1d8d92e92305e61935b61bb91da9f0259f880fe549e7c6284f7a1b87438e38f31466aafa006cf48cca58007c8814395475ff6eeed78b7e03402b6a568ee2f991a7c2a2797b2340779b251c19ef73fc9b90f8663d4e6cdb85e7e6d659e8285b4385c7a90ba487a6975f06a0cdfd7974797dc8efd32fcb195158c45979f0d2927b164c472b68b88566ec30f3d2320adaa11368b2b98e8c3133b662933c1ae5a92368b7425083881f4c3d22194f1d73263ccb0139c63880bc855e238997c9ebd41b8533a098469cb00b458ef255432d43ed79268a6bbdda0337bf7522c6611b1d55c0f84005f929eb74f1ef1a0ff9b59f074dea840cd74884a037100acbfd8ebd0c0941ce063bafa24b7991beacf068f1eebbbf9a746b4acdb635ebf95abb1414c84e0ba7bd97416df570baa4dbea261e5844f58e80f0ac9b85c38490a84d1c19f0263c621fa810c6498176683d8525612a886e57277057a96d92fefb4f456c44593ff6b7eed05012a7d6149a367c581a78dde1e178842ced24a44e7c266eb844f7393d8cfe3ca793ebf6633029a62dac7a5644cc2f790a538d80fba3dd062a4ec9bc5c3837f7a999eaa702a3fad5cfe37f660ba033b7f4372aa7b05ef9d7eac36fa24fc400b7dd0cc4de4c181c7f0c3abeba1163bd15ab12ece12cc7184a94dea8ea107972722f837358fe94cc8714337dc0d9bc1ab7b6f7a60284fba10385faf829b71a3a4378f8f687efbb4e0d274bd713e816e127afc959f12988af74632ef5df237e80eee34bf8e6dc2c5268413dd3e9d2ee05ffeadbee7265f89c8bac026c55bfff15892fc54d04cece27b3ce5d12babae9d2af9ae24b343720b1a9754336e0e5e0495909b0b08f03b8082b7a737125835fdf12df44f3fed81f4166039dd19a887ddb815a281d052bf08f57585f5cfb985eaff190fe57703df2b371bea7a05a3275d4a927109a21e62f27845bc688d3bba7288c4c1430f2a6536b1b023eb64e460b63b3245c0bfc6f6a33810315f0e46f04f9d900e80126386108436d7403c65e0069640cae4f2a7147b5d7f89aef2c769f94a34900f904ad576655738154d6794ad2d1cb6b931f0213e42981c2e0cca78bbd5bc81e78807f47b3709880ca0d8249f5e88ca43bbb4470e78c6a6e829788e4f321cd1ef4cd5f58462b272c6c20ca1041ec6582532679cac7e7ea7ece294237899c9a58f3cb4bd208d9a3cb399cbe23620bfd4d3b72591ff913cb003d3eb509b34fea24274c5afdb36282a564f87e179e890dbe5516d011d17daf54f6770494eecb1cb9b61a498b9adfe76234685f91de55b1d5045f4cb723b94c88c1bb51ebb6f608f62831740641d14a9c7d30e8e8f32b24b1605e314dde74ba5e3326ec6f4706623977d3132c0d8d02719bb2fb0e97ea3f9a60e1a7b7125843a30707e5d14d36d126ecfead17d9262a54c999e2775c908c63dc4ee3f098de8ae1c25c9843325756955ac9a89731421c6d838d84b0935de02e54fa1d793813fea6c412ac81ca85327d5f327af3778bf0352f37872cab9ef237f8672427dfc6c42ea871c2c071a9f022670081f73aa0d0385563925479966ea5211b41c328f3898b5ed868de5719625e5d861fd7176f029dddcdfd761f2398dcb1bb4b969fb987cc9ecc405d28f2aa389aed09f681feda37be666385ebebfc30b80565b2a58ef7ebf59d99f8a6e4e77e964c5bc9e1b3b91e88c77dbc61ba82816e6982b9cc039d06307d70ca1cffb99bd2e643b2b15f5d7163e051f6cc41c4cba799970b4a03fd3e3a197104b45c1da4b12a89b27b9034ad34b5c763b80bcf21b1423e4a2f8416a67b1ca702852725ec25429ab0555be31a56027f5525f6d9c1921f0ba0e9bdd018a18b0a893c58ddbbf9c24a9a75652417f716f53affe62a44684cbeb565d5fe8b93b1b9ac7391f65991b955e3e35d9ed2f41f867802afa2fea2b2171a562f97a432f8c7e350c13e380cd8dec569c0b3262ef616d89e1f886f3d9f5e2a58485282f9240e62909e8040c3a418d08224d847ba224f80bf9a1ef50b148f0467f4d487ad5bb010e7cc3e6ee3bcb45b9bac1e4db9296a997704f5c4a9eaa9c7fbd01d6cf9aaec460cd6b326d014ad993d5b3507ca5ba1778d21a10035639df350557835a6afe44192aebd0de0f8b4d8d7ba998bcaffbd099d30caa770d8fa4c0e72fbbb27c6c15e5512754b33db1fb845b82409c43fda60cd9a5719e85989e7902d45ca908cef306b39cd124b74a5a978474e6735dbcc3bf47c10a52eabe2ee258828bbacd061bfc9d0c97c2639f0d7cc2e52b087faea3f3c7e9e5835b3d24b6fce2251242b5bf75cfc9ca03568498e22e94fd30303e902fb92b2267496225f856e738a1115792bb7f112cec570a4df63ac4444d8b07533290cfd8ae1d7627ef0e64e2071f5a301901cbdcf427da0b40324c4652601b949b3f1195548575f8135249ed2800c3ee33e003637f5b0440f4229369688e18c09c5094d1d00f43e94fdbefbbff69212ab63d16d747305d9d4ec9a883f704c3ba89e99c212d0ebd7b0989593745c44cc9f87eefbeb64c29e567aa7e4d4b6784ba2dbcc15ab42e0e2289f444f94ca20bf7b7b3402406858363a7190d4a8a95945e970e0cf3979852414a958d58dbae7bf6be1cb4bd1438398d1d79727e81889ed8896de150d16df42825d8b9d986ccc6874b24cffc5f9bfa7657f96e4def37f8863e441c2e850350ae7238d47b6a3948584f9ca6a4aea699d8f4034ed97d6d7666bd60cd3f351f51e9252a696cf6819d0268aa61faa63e91f195a6b74ed3d3ee8c0fd16908a011f71be6c4d1acdb42cddbb0fdd2ed791d615328d49c4fa0d6df5c8c8e648d08db8990395c6de42cc177218d2143c2586487f9d0476f866cd75be0a0b470dd2383acfe0ec16174451ae4d8458f30099fed51d05658e031fe2f417ae8d972a8d722fc8decdf6129d4d5512ccecd086dcf717bfcbfb9277414e6967a486cf362d26044a12368103505007116588aa514b223c86ec817ef3acc477173296d07508a6ae56190272e9f0d60ab890c01909ab430200975da3099a5e0c3c0e00fd44224428a8d1c8e05ff7cd18e1cecd19178a1ad3b6eb6b3e74f3e52bc835cfdc22f629edf436d24c1fd7aebc462a111a92e203321e902bd25b4586f4de397757c6e6122e0c86b9bbbc54efb78d60d189d311cc12147fbe00488138a5683d8df9347bd70cda10a2788fea420952c168d0791bdc8734e53005df12c1f023817f1d4ab92e2bdac7e0477c698fb39181826973bcc42deb06a3babc9d841229b2800775d366828b0ce2fc2ef03bc6c3718cf05befcf698bf46ea82cb7923c6c499cce86a781e59dbe450bc5eaa71fcd6f6917ea1e8dca6b935a96614cca25b4fc263b01a3ab45b33a0c56e313a3c8c1b7ef5538acdb0ff22716b7a62ca5fa8286085f76eb0f29e51f19e029ec60600d7dfcb68ac192558d2630f04a05bb43ae40a872b9284e592997e4174988bee2e9067c65e857174b2f30b25fcbe36c5460b5d08788884755de4041e249e0c3e0ae2a0e8201b65f0632475fec6748df09106e7552edd396ee8c27e83bd507de2f11d46c0011add916024fdedb77f4cdc5499fb5080ee7b9a0e6f30907c6e4b70922df67a62ed5c6f7811aaa6a59b365140d7dcd536337b29fe9244568dd9d821af4cd9ff4171f8b07a8efdcf79c7f4472b98a3cee2ba8060f37e5859f4e0c25827500a670498a7ebe53040ef3c42bec4a11e38ba46a201903f3346e97315a82d410900f69198a0ab7e2d789fbcff1ccde061542d0a80ad61126021ad73a73e7e7382f8020eca2355bfe61990d7f36ab617198a362d9ccf72b3c234304a27925cf2c0c7f3acad930992ae97c0fb0758f6f289064d21ea3b05a90bfdd52fad2f71a6955bb1f3dcde9d4d84e3c693127a54ee9e9e95626af5289ac54519035d0ef17a913c451599726cbeb1593ecfa6bd2dd3a5652bd3cd9430a4a94b5bae91caddc9fd4e0732480caf0fa55affc739dad65c73f5037903882626c1950c863164305f6581e0043bfbe6fb4ca8420fc11082207dcb37d22b80a3a76bc725a4df97213613f1e40300c65d4ad1f758f52370609c5ee236d6129423ab02bcf42b98de1e9c13affb88c4bdc9765269835687b1daa1e7c419be03bc1bc8022a0fe40f4f9777144ca24f770e7ad2e3dd5ea59a51d630d8aa84521796b1ffa01eefb48e5ab22b3068ac9154c64ebc697a6e015997e46e5593416b7a56f9a55ea9d2446baae857e52e8915a1dd6d047e552e5ab993a57ac473ec93b231fbe4e7af29b232554f02b919de0926d9c40b6550e07b0bad51884c4f62a317bb4f00f1eb949e4c6644477610bc6c5fbed1ea0283eed2a59e62230de25f592683a5e4ccb8cb3ed3210817f610c1438ae0d1c3062550b0bc1a849c1dabb3903d4e10de1fcfb8dfac91ca03b6e44e1688863215af529737c93d8f8d4b36c69cc8c589a8beeecc4d693faed8c99f3af89e4aaa2e4435855497734535b00f32a873f548259a634bc373676c8278ac367449b88318771da9ed00d84a1f2882989e08d75953b123fe12f2f16d48fbd979320fa682c914b24e35de17a1d9ac16c35b209e3de8925e661e9e2f89053e6313c6366f4cb9942e8c515e050af2df3c3325b75f1eb88c800edd7f8db95486ba4a33f15be65cd54aed85d1aa14daa98d122c3014644e160d48cc073eb8e247e19628e3d0a97842624b62767ea1a1151f14050871d00a1ddd9c2afa1f6859e66276faa9cd19163594e32dd5a3882d2d5b2151e4889d07285a84d529fbc986acd5e9ad512ced28c1b34efd2b4805de0553ae9610c94c0fd362533ffb6f7a97192244483a5d477d883cf5444e775453a190db7ab302286c1e09f0cf22c22b39b986c508ef5142cb253fbd5816dae12f7b10ac0f6851969379131306cc3d48a4858b3a8352e76bcbda99a17816ffe0fcd27349d2a3c47e4d90c5188a9dc94b09269e11c3064609befa063a36f116caee97b6279bef74ebafd7b1f17b10ca6c4e538a23339e9e42e602f7936a4684520d734c1b242a3a0593313e827dc4823c4e99fd350e4134151984134a777466e5f3b5f2b7bbcee07a9245bcef65518934f1d0208332298bba08955598d9a99cd0561fcc1953a996e15b469ec6b3128e35256030e695be4aac2624c41006e14e41b5586a9f71e8746721d0120cf307f17677794c86bd1f7cfe11bbf255a275e5126d8fd49954bd714067000cc7888796f918d7e6e421d4b049189617db8234eadc5e3e188d3e60ec98bf9ac7c032b8bbb0d23d11616e19114375d65e505aa3901f7848c0710fb1aaad27d404dfe9dae2c55816af9f5008d0c9e5870246206010705b228c184f32ac09e149f3fc10e76e863a10a602a5d9374327affa2d908484560ddae7334ed29e2b9a4804f90aa99bbc99a0076e6a488687eda317fc451f3b94203d6d7ae44f756f608552a96168720c2098c8b616c6e2771de5007a822c72ecbed5adcbeec6d5e2bdb8d192597e1b89160a99dc030f67ba175e7f71f83d8f7e2be4ec45279e2d63f2e277eded8f9a0aad8450402b0fb21ffacf52ba5a2cd31f0e0adb140b12348b6730d94c2938bf3bcc95b94739a8dbe2604d8c94e2404f872e7d191f2076ac95fa59477052fb6dfb24e9b10380c15b26029a80cd2e7d86e2d93524c1225d4d1b4fc7f58658dae0b6c176a25552152a67da78fb2403097fd6828044c17cca2e0e3018360b2381d59c8a7dd4235ede099b6d7b1a1f33b8c0d2230d2d2404bfd7cf6be1ae9f9fb78e962f0820074ab1ee0bc4de411b6ee7e7d0408b3a031d605475d31a68bb7767906102eb71e650eae800ecee5afc9bf218e85776e0e66bcf32e3033617d15ec27715001e69881cd2147acec816a26aed079b8f4e9b49ec87fb71bb8d1eb5765d369cb1ab52d235b3b4112ae11177cd3922a0c1aadaa02d74f4fc8f599914a14fa3a0a7a222f5bdbd2744e9868a7fc8cac18ba8661061042b1e40140ce839e4f6371fb7dc99d673b76aa00faa5655e9d9cc36a414967511a2cbb35dad850875e4d3219409f943d855f0dd663be58f13abdae7f428d6a82b227bb9541566de4e7dfe05f0c61394f573b7fd5e6118223cec7a5ad43bbbcb94544c14bacb762bd2248275ed84af09680323c013318ef480daa178cee47e5427aa01181221e9594f969d55b657cb00f96fdbe7aa1a2eb51d9f2dc50d8456e377167d8f45cefd6a79d671cf0df39d11562b87ab1c9dbc053c448bd59bef4a6a95026a8a19d96fb6e38b64c032521f2469018b142ff4e2ca9c6a6d036d59129848296a2716272314c91220dc6296f28fc56adb240002711c5e3055b22a1146aeaa8f003d5367c9e10c88adfad05a9151d25241156051e85016410e495a3235756eaa52eee62a47a88100101fd1015e1067e7370eef441da5ca4e90fcbc47c8163d89ee489f5e56bf55b6c18fa05d35d7ff768ddcb4a612db2d756c69c5676e21cba059c2bce2a0482e584d82708d41e4596ad9a3196b54476932ba6f1f8a427ffd909dcc6e0209da0919d2fb39b85b35e02fb74022b76ffdf504923589b9d8cd8c17f57cd173d3bb527ad4544fd096aacda12e52447d412a8feeb42cea0e8a1beab68101ebd14746f05aaea8e2a5430d28557a1bba1b48369e2605740943ec939c04902a0eb606eb572be212f448dee7378616ab62bacb29958c8e21596ad4a5317ef87288a16cbcb30aa0a13359cb7d576fd0db00b65de7425512a7f2cd34741b15682060b89ff3b658b3b3c3f165a1f8117874d1f3887fc9d8201889b2d04f0326adb162382eac513f1d3af52190acb345acd9a2fe430c633cc8ee6ad0cff807357ec4ef1e6f39f0d3e1784487977f2bfeb9f7403d593ad989145e560b7e6a4a38e7386618e6b384d39d52374c6a27bc472825cbf87f73715f41b1002998b6c93f0b5affabd81bc5751e9a04682f005ee813aa45b2a18c633c5ca17a8388ac0367289350c8f985ae1a8e2cd7eb21d57e2d9ea7896ecac0352a833df808e0a46e3368294338b4f0705af045f893b84671756986219d046a48421450ef3bf279682823288d0e4c9c156c32d9022f9491e4234270d786263d0d20498e279630b5a9676facfaa4e88c6b8c2c37b7ef7bd1dca3e7e28a73f05373dd0b57e15ba31f89ded4f9ae33cccb5caacbf6f4affe4ffe2dc550240a3610ad2b17d0651b56104c0b4a24c35abdd8e61e6b15493c7788c8506ea2dbff41dd7a3e17158ee3d481006cd2a21a86079733aefe7b1ec4b5c023a1716ad5d5adf8251ad8abc96d98f5032b306e7579090530301e03e428fde9524a4100cd586583c08221a84f5cba19d4e46c253e0170b0f9d7758124e893154d34d4b5908c450ef837b58b6678c244a2b25a2fbd586637f9e85ab57bc1d52f9ef645e1e3299e29576e34886817b2602b14543aa0d4c81acdafdddf3d585e6b591fbeac5d10f59668313b21a7ee3a81f530677ca63a5ae6236211e7058a1dad51e53c88e57ef22bdc87eea02d9b184fe4ab10e33ea54c5243afd8b5590df2dda8412836ffc82396832eeaf37f05c9588d681da4ba0f2175c6399829e986e3f97cfa793b5ff6eb756c2fedd58637524d8fa037e3709fd67b140246115519ca6eb540aaed1b8753c62632d210582442909d6fa67640b90cd65e7b2e9b7365b39832d7792ee105f277390e669a3ef787623ced8561db332b1834742ede85cb76bd52842b5fd0a9bc9b2b41a89a15d048f0240433514ac07aa32aa07b8e76dd7803170e1d853ac19a5e54e315ece288a2d4eb682a8cf25647f6e8a2ee7c90d789ea6ba5db35075a380dd86e1db10e8194ca5efb780a70fa2fa5ec6b6bd27e13d5f7a966f8b1a05e56d6a15abbf6709f4e0a08c27e3970b15070992dca7684532b5f6d36fe8e4438fc3564da940167686e4cd075a85685684d3048ad97ac4e793c37e83a1acb074dc66fb9d42f981b972cd1796254e956530e1cff852d974e81b747527a1af436992569a80403631db734ee1b5b0a5769ab9019e13e04eef4449e3552fc86f2773cc83215a02c731333975fc4d521eef8b42717b2e8065becadf66aa3e86efa9e5b5f1c198cd5af14ccce5a9534f995dc937b04cace66332855101015bcc6c306060869baf3b4d27c10b438335877903bc34443b059f11e8525a4d50eda6657f76ca7acea604d4a98a1f61cf5a1d26b184542ba695ca6d426ea80adede8483ca8c88f67da02c851e5f4c492cec8e1e1e5d79d4880aab1a11633cc74c003810cea4a1aec00322c78a38c5e31c73ad3bcd77b9ad2973985e8c038694e5db7ee8c4efac59959e38ef22811170fe8e34bf7201fb4682f470831d21809a05e8f00770ae8ba65f31ebafe3270a1148520c775b5d816a92f7d426da3584294ff78181a775ca546426549ccf943ac28bd913d4f4770fc626e1b483ec005227222525997e620d04835822d61244a55248b5fa94b38032093add297b238ec59cd63b43080e1d9a662d4552dce56575cc9fa64f36be57aff7f3b8346ff94de41103a37a75282da339a30e3b65eb5ed180ff263925d9f62ab16ad34aff06873caf423560af342d41bd7815552564acd23b73b450fd724d300f674d34bb5b7b38a82f6ae58a2d514bfaad803a2227a00060a03ac9c6da5eec5e967c140207494de3fa1fe034130d0bd5102274bdb55121cde17cf5784b107a3dad187d040aa901284adc80fa6bcc42b90e46a40e6cad376fd9069bc65a177f081ffdb4e3d607a1168f230cd77ae17673ee8375af04fb439be5dd06336d8fec76886d6e51cb1249ca3732ba96b53a1223b268e7baa5d3813e8e5b1a258e97369fab27a7c80ceef905e6457a18efbe4b4baaffedf80bf01ac5a0ed0cf4c9e583e7ab21caae40d8ae835e87f7e545b6a6a899c355a3ac08df4bc8a281504b03edacde8ed08f57e370f87fceeee0d6459cc3a966a175d0e5ff2406f0efd1b7ecd6ea956565c7a313de4d1a3172f40eecd869dea9fc6ccac851c5b63b96d7e03f1a0ff1a90e5a51adb1ba7973073e8c55445a1f2933567ee1d74e3fa6401e7cc1a452aa54708fff66fc0a674d54c6d1496d2d3c0cb6c4ca56efeb98fd173f362a6d6e2c83a797de90de070b3ff4286957b784968bbb1dfc7212fce56cb64a65ecd6e64869bf733e51b5907b0588604ca2141446094153ef0602f680bd32116d822e66fcb7aa3f10762ffffea4eb5562b54f7f24b84fc01f33a53a1c80b0a470485685ac5ce2265537ebb589585db394a77ced82dab1bccf064f46e59cceb8fe2435f4cce7bff98ff95252f66c85bb67e653320c1fadc8a34015dc95f5b8ccb769f43832b0f39c3915d7d5c1d792db22c50f9b86f3c4a5795ded92ce19a7368c7d9fc00976b7037404fb3e0b9fa2e8fbd43c3a17d6b03e7d5833d927f5a10b4798b48623643d8bb4d64904480093376f294a0837532239b3847662ff9e01839ad4afcbe68ba09ab994d85473317c139ffb570e1aee62aaf89385c62dc78c09bf585d72ea2c5b6c5278eba2d7e4ff44a8ac3ac011995ab25c8efab5b2b5e3515cce1b94f0541c1fca322c77f11305151c989ec15a90b34bbf99be710a7c3b191a838d4bc7afe381d8fa13c8661889e753985d27312c26cd228c5cf9fb44ec45e17a8445c39fffc579326844acf7156e7b69be6c2e456e69c2bfb5baf6a0b40072f7dd52ca3c0228f301f3344bf4b0794e2f1e4ba748f9c829c8ed2310352a76e370b0a9d2a877fb8a23af2dd4a892a442e7e1f4bb52c4039813faeba644debf285922625c8ff5333849907d702b1e218c92bb16e6798e4870a7b9a0537e448b3b550a54fa0e56fbf51f930ad1cbc48bd35a3dfedc0746a040ae7857cd3d326b06720547800c8eed87622a92cf57d2f337a9d089b0636c3648bdc881b4b32c5e9a657337587f886ae1636ba64d0cbda7a9ebac73524cee4e8d1b5e3eb5a12ae1b3a5ad7e741b9fb33b964e3eebac93afedc8e3587a5fa03c8f52f70a81e70b5a22f31730eda980b5b62c26b0ce1622fb0a43d2fe4ca41ca1a2f0931062fa7bdfd8a1fe19866991329c07a5518743bf2cabeadc00565b84713adb780aff41637058bf57583c983ea2e6084ea628fc3272e16633f6df617e9c336a4159bd5c0987b67583dd36ab14aceeb8a46383e1619473dec2ce84da94f087e70ac034283ba85a612ff150647688018e681ff2630a023a654650ca3dccc441cdcbde98a7582a22c3005831119a09d602ee9ae7ff0371751640c6bb6d284c386aae293c3ffd0ae61063f36f0ddbc8486da036fb59158007ee0f54b4ca0f322035f1291ae2beddeb16d7dff08032fe5a7e6f0530532d9a7d6988632a00c9203d67b01946873696b60e691136e9eca5669477e848f17904d8a96b0716d28f83c3e344ca34c040412af4bdcc5a31854a0214b9bb30a023144bbbdf35c7afc70382f381995bda6b8bd9dd134c7ca18352f4e29ebc38f8348448c2c9bf059a8fa16f8872a15e8da3d475438fe379821b92f21373864e09b676ace298e93684175e30bf076d18e4d20e244dff98ade4b28cf523f97dd5409c5d0f2584c79249b3950bf1e7d36112829d3753b261c66984198202dd4f578758c5d4a6016a9713133f736c76acb39e942622f1e3896a2112fd42ee3e194bd9c8a10a6c38c3a1641bcf2412126d85c148354495fa746162c038ed88720f1e970946dd0428dd6304c4d994309bda34a62f0face96299046dbd737a62acabf3c9ba4d8865c9a7e2e63b63fa7fff5f632bdfc8677036d775826d119f67751fa59e4e6195806ecff37e8a999861836d442bc4feeb171a545acbe5cb43007cd0549daa8dab5cf13d0ccfd9164c2a566849daff7fa3327a8fa363c81549c6f46d76de3e27dec5b64669b9b8933b00f967dcc11d51c885086103b923d09cedeea4ac5cafb0fd66e860cf782b7371ba0de1f808a3ed06c375163394732006216f783c25c771b6c25c78946b2fabad14ad601ba9b221c90ca4f4ce0846b2feb97b597db12f7319f149cd4ff03caee651facdde194a8cccd5073dee372c5d817ad37aadbdfcc41233487e9c5541bd9eb64828a0708d4d0b500d35f669db136abfa16d958cd23c3069ed62688603ab044b53866736b66c07852210323262cc7d97c43287ab5d39f4d200cdc6814221f264c4543fa4884ab1a2623fb9aa2b51fbe019ac230f10d036756e415d2e43f26fdbbb21209655f8442f517e88d3fac2720c2e9896b5d4f696199adc4294ef3c3a39b1e05ffdcdb2240f5007dcef9f25302959efb5ef52417ab256940262b7687acc925da8185657197a29127f037a492279fd7bc29760f6e6ee95f12763da413e5df033e5f7485e5c3ad8b34214db5ccb4e324749bc9e0eb1c0b1df0543d061aea5c072798bdc9614b456439e1eed324d4f95b46b8e2bf9bb0349cb07db98ccf3bf23b53d6cbcab37caab512ca8d41a76fe64d36236a9f70b2198e6c7953809890c2376a9621e1ac3adb9e71d13eaf9751724a1f4a99ed0a833d19967c889d69cf135056ad1cb19a86357a881e9a4698e47c0f3387acc08d60e33aaf676c34fb738d56c58d061403d81f6f58ec0a4dc38a723f0a86ebd7a393cfb4f9206da12c1be37eb6221469e35b5e960e957b690aecdcd0077992e2ee2c1cc3ad170c73e4c5dd2beb0dd65222ae6456ec425105de7ce59182da7b236540c7396923aabd68de81d400977ef74c952c01fdae7c10b6fb83172272c9c709d8599ea1ad185c7dbbeb32306c4eaeb5e0601f05ff8a8eff2baed68a9acd4949cfc3b4809bced389c9ed9f318090412577de71a677956d7648af93242bf7723bf26281a96ae53e67447569f12d11b8eedb4c3dec592b81e2dd66f983e5baae43ed30a19ccf5b4d337c75f6783160003b1cfcf5f5b65821808e8d3a5e863719fdec655ba2f0a2490e8d35ff94fa807e298e3cde41c0ae4ee2faf6a796b7fb4db6afdb8b8df05cf4627154082b2a8ef19b74c07de69439473251db3b0110135e001b01e1b2801c9a6d1cb560163c77d2c716eb80c47cbff8d811e9932f1edde50b7918375c1ed298d3a32ab2fea7a334aaca7870a4912c0d96cc6d3c0a81bbf73f7ed3f0bd5df514ee0995aa983cb7e1be1d55b4ac03ead81fb60506330aaac9ef9af857a3d5ee3df4d42dce8b784d8cef24932436d0511f91e0680a8e119e8e072178a08b98775a97cb5ba1b9b2a9bd1179b94632e34dfd969d621d25ef675227f92d4ae49741b09b74064401b00f1330dfc1c44a7dd4b729c57710251cf5847c464f7f8034f01ebc1a148c15c08d11d5a08c73ab1d0a3d076f65d4876c74aaf02ddc3084b0b2423fb88691f58210c05bf20f8b21b8daef09e2de48dd84aa623c5722b94260dc89e10b175cefdec728b6a4b68f8ce06d0da8e581571b16b2c64b553cfa695df9410daaf6b23d0739f6b8c4ea49891833841fd651ca5aa427cbd0f097ae3626ba7cc4415722943b1adf5ce940638f201057d39b0f8aab69621ccd7533e17b68755699f2e94970ffdb8403c382ccdd6b4e68ada1578c311f397153711e8f7db4f2130a5bab6674df9f40dae760d38e7e109b88f3bf6b99222d8003191ca6ad3305a266d7b3a1645b8533f4e6b17f9d46bd2005c0da8ed2e3d1312804c080ba307f598755b4f484ff55ad3484eb5728f2a97e557b406f910dadfb5f6b4414ec1acbf1040cd4be9afb6bf6d618ab946be61b0d731fae2cfca1c8d4d6989f58c53187f315fdfbe9b936f397b6a4da17d4625acb676377b9fb876f6a5d972c178e41468eb61e4f95d1abd5fc1974fde4b05da3d53a5e1a62686af43dd12ea1f85c984aa48769c38947c0527ceea3b128aea13ca19dc8c931dae2d45720a2b7849114c868905ff9753d7654637a846a53b16978c102b3eb5e1ded87947ba83d2e4caddb9eb7e24a7a6c3359a70927843d80f016bdc16af376a4c46252ce1f952a176cb1566de75fa983760de6d38b32dac3e29f843a8ae9cb263d183b19ea9c54a00fe1ec82e0777379e017e660d34f8068b8eb0ea7e6d2bd780f660d9ce33b428aa46f4a2ceb3000e780f3f9d6330b2189dc1772395174bc7609f34a7f3398e7b141e8322b8825fc4045866777918027c90af687630a28e8d522566d9fd695282968308d15fe3b49ea5a926cc2a547c788cb0546e7f97e09acde48b14de411353c83850ddf490eaf11874da8d93815b817a263961b062b0441917135d6e0db578eb9e3bb2417b645e9c135d41701ba8f4cc2baf3ef5e6a78b61e6da175ec62de259f510d974ff60a8fcf2fbb0a8adbe1c0c30923ca00c47b00e0e05e1eddb730e7d76b8a8b4429c10a56d428961c5b15f15e04b7d1dd8301d46e329f21efeb8a81482d91084950444534635c8fc9c2f62da5ac5a2d0287e962978ff3b78ff919269859f7abde00825b4ba0c10c064d1fd9292cb8cd44fc2c85f0b8cbc5670b9702999e2128ec6bd726d7b9edb51be6541ca4c48cb01d52ef1f541a4725c79619fb09da72c553bcfbc0e7eed98732c7fdf6c746281c2ab624b8b0cde88d15365ecc0f2dc2fd0318c4202b597a59648a4ec9e81f29eae6eb7c3b9266ce8001e3219ccc342941fd0a2f5fa5876dc9119f62278941dd32bfee3d727328f7854560553a6848976bf79281799ba77c0a0c17b502aa778ba4449f6b3f8ac7741b28586242f0d06e50b7643210313f5134d1adea931112ef369117686f0c077c308d49136b3ec2dc49869a7c076ecadd8d947df840f1c7309d9ea348dd2c38a2e163f44caf3723f828a25788cba5bf548f2d08f9e32e5f95009a539b9c7b6e268461c188cd81495882458761fc3fb908c21c3250b1529bb2155444670d1eac553d0a127e5e4c2c32e5f3af79ef3d9954648d16fe14c0aa9543515a567e795a4113ed463381d64a32937ce9d681a470615ae249a783032d634b0aee2aaaedeae3c5391764066cbdc1c54b87e7cdc6c559a39137f72c092d8222b5fad3b044b829428d8e07092126930ed502798d53bc426e2d0318a6e279b047ec4f7ddfc5c99a3da30352c37c942d8478453cee105cc6a39525f530d0ad61741e6e04a16e7453646d160257a50929a6860c9a0931cd34e4095761e6dcabfce1d5bacc0d65e5e030fc2f8a28cdb5088e84900c03a7c8d8870699b7be9a01a12299ebfaf616c9719fa695aaa65ceeed29986b8b23ea21572262b6d98318127a685e8b1b86c4aa27ed24dc071f82f70804e7f9bcb23062a7ac0bb2c6540282a0dcc9b62039e4f3637cef85ab4d70e58e8f638de47dbb52470d53c93befa5ca5790183f039db2be09fd5c97165d969f53557fc43ba10e7759cc112c560aae29594305c5a7bef0b629a2c0cc139dbb111af147dea9fe92be5a1f22e1027b61a4b1f08ce7306da0beeb884ebc549bf1bafbfa5179ef655c42de09fea15d5aea903499926157651d460a31bf3ee05095a1febfd7dc16441ad8df1c485fd615566515a32a2b065a087c154557a2525475657446d977432961e63dcb8ec1421c3186f38739e7a3b7d3803db3d76899c883d65f1ab579c7f6262fa80ded78c4608e781eece6e4cbcd3c56d5b29f86eab1d4d9108c11c436be968a05c711698d723e13e969fe5d726cb385151d627880daafbf1510b8102ec32fb59d19a9b8bd8f7925a0860a0863ec1e51220e7ac37a66a5bc522dbafd273700ad40f7da48768f6a3e6ad26577204a03b10c69fa99fcf4341c5598ed4fccea5ca6495841c011e07f7271b532f73796ce3c048daebf1c93163aa7df0ca0ab8d6e19104302a9da723bc798eb18f4a25cc4f79313a261d334f4669418fcb6759683b3978c2a94cea0184ad754336b7bd22d552bd6f243ec36d615317cbb3256776ebb1aa5b2832235343951989ee5c05c3f6fd8e16ae1103919364c0311801f63bf2649e46d180236752dc6caa299b6b262747c6863cc61de453558d54e08243164d1585aad2d20647e66eed946f46dd62f075da245e8cf5680b05b749aa442bfd60321fd9c7fedccf68b01673725332d7789e2e5658126f851810ea0f293b8eaaf82ea604ba0c1fc3c4b90afe44f3ed0da36f929c2820873ec1263c8ae098c496c0e33ac386d2bb05c22ac8f9d6db530f459300ce57ff6ae344dd9baeb6d9c39acaa355fc5be5d8617132467cceae19e6fadf119fb903e97cd05915b30471fd2b3e335c9b9188f269e97fbfb1c108891c228e6847d7fe0c593334889ed37c9b8a3d902bf3ac62f67963fcb7f96acdd393e742cf76b62c8e928ab503ed983ac6b1119e02e75084e97692f5fc0b8fc01a65a0cea46c73caff4aaec2e80a99683284fa41f8c4595bc9912a6de9c1783a79519dcc7d9bb0ce86f03e0674d511e684bf59492f457cb81090e79288fd9db1c25084b34ca7e37bddabe82d10632a11931bacb67a99e7c34040792c3a3266f5fb114c6f0491052aee9560bfda58161912684eb75719c30c09580a771f06f62021e2a19c73cf801c27565561822dc2a9db1f107a0eda7c72a9b045011537f60c77209863a0253a2883a877c323dae1fabd5ea62c416a81fad3f612005ad822d34aa5f5ea6a3d4a55cfdc0ab481f189f5b18523c669d53a5910886f924f69e53456c6a43feb503382c6de8b31c30f851203e99f41025f5df61e4deb2e42112c29d9f05d9a75901332b5217ad0aa811b079b501da24226e05cb51173b1314c71893b2fbd040d0784de7495ed9fe712df0746f8a632ada1cf2129b791dc0aeddb06d1af805f9872f9f1f64bac0bb3df60cc720f2a0dcc588060908982992f3d624d1860583278482043b05231439cebdad8501ca268f0c998de1986812143ec9596892539e446e4b3deb4e99f33a48e0e28afa3042d63f7afb6dd22dd0773bd78cdc6419df5fe47ed3fa24e1d819921f0a2cf836d444a01bee9362c60cb1d06676d4403e333f8ef10600daaf0dabb43a4d9a832e0fd88350d3181da54d6aca746f10f33dceb8e252cd2dd9f48ae97c303e51726f960f5ba5203de9efa62a5a87f5bd55d1e0b2b6348c510659e0b2b23f9d3442584480fd6e96d703947655129433cadafcc10bbe085f11b16ec1b6594a42b25c27c2af19bf35b50cb4fae51268fa3ee003f75b320e67c62e7d047fe2bc1c4ce6cb7400dbe115921ee0b4738ff1839dd07027fea178d3e2d54ee65fcb1c4718ec6cfeb4b9542208f2558102be8ea1e9205782a01bbaefefe7a2a1e1f1842c2b5cf3dbf398ab3c2adf16fa8dfb1f660d717c22df4e16ba8fcb1323be422bcf78a2fed6c485d19349e72679e61897c757e8208e7d7341c4d617b32b1c2601ace239b03b4cc6c34ba749457ea0db22967d2afbbd720848cb2a7ba95ba66c46b3355354ba3c89b762660b3046f3d06e9e3db7d6f1499a9eab812928a43587a6b23d3e175f3683dc0c91a95c0184512a960487c962aebbc52011b88b2fb4d819e0897f3654de0be0e2042e981c967fe9e594bfe3310c7dcab9f248d20fb8aac1e20e162162f4a071d3f5edc52610669d1685cd5338a68c73e82bc796897ca1c237e373aa18318bb3ff05f0b593c4e500601267865d165e724b4a0670537999a3409d29f93bed0e6cd4f46d650498aaec32e77ca879f4e22f751a1a24576b92612333cd88eea11d70698d583abe57a97316f422f2e727bc1387808db7427c628d611814de7bfbd95221bd2490013ad117b515f13cfb370a7931243c89391086c2d23a0fa0c4f909d291f0e07ce739d821ceb158077de361346d75c3299b41969e8450b546bf568031ba6451986332079052034f5f190c13cf3ba7bebb7678f40f66c56e5ed6c7962cf93f43f2677a4f1b97d2fa8dddbbcbb65f76a0f02d9fb2a6710de1588a3850de530f1b98683f121a7be4080c1fff60f0b0c630d8baa9ee046246bc1c3778c636f438a0e0296a9a7bdeff78261480cd14028c2fcac68adb1bcaa6bee40d45dba5fc283d7197964fb5df2ce4bde699d0747a84e666f0b8c575f76a69002258440ae66e1b2772ca652a4d54948ab5cfa666c4432907d15a3d613e6397661ca57472beb36aa13b1f16c511310be05a957f09597a905b73c25bc7b1e3d0c49249855c2636d90709445647b41b9139dddacf0b3cbea8af18f5ee4d0b6f524b316a9b6078459d9ba89d9a9e82112e25e281c3766be273042770fd0c11e8db1b0d74ae06bafd5c945c3d43480f59f3a61d7048391102032bd6dc9e4abf1e8a9ebda8b1ab23ffdb64e6a2fafa83d6762ed4c27bee514f8689f6c954da962bbb67ed27c82b726d7a1613d55e997448971b5fd96075e7046857908b70faa99f08927dfe3c6628c87049ad3e5117890b74febbf805e127de54a14bc764d053d4539d6faad0bbd6f2dbde4e6580e2442bc80f66a5627f5c785bac65c73f2874d59d4ddc8283b71de9a140c69a430724088a8e685cbf899dd89e700632d6fb77fc1c69b76a7feffcd7f89fa221ac06523b4381a76309c589f50c7dd2607dac88fb4ed00c742ed4fbf1dd5ae966f80fb57cf72882ae08a514869d66a6267d203b6c27dc0f87177b6195fa2fe5fc8755144fa0b58719370ea835eb331d3b35392bfa36dc091ae393f22475b1cc10fdbab18216a2141820b14f32c2ada545ffd3120c8c2d64dadd63400093a06bfbc63c52fb6d78ba92538974094484f4a3c629843ad38f6eb87f54ba407473c62b7d3ca5359a71805a07f229f6dd87124ded687d03332ababb1b6d6f40d9e7c3aa86eddeea7a30c15e49700cf6c013bba5681dd7d83e4a879577e1c686247752f2dd16135aa50c24a7b145876c0c76850c7f30860857a406c013b26dc16a859dd61f9d10123825ce14af821a5ce181ad20c8a1ac3b83759198a14bbff2cf2a7cd11a73937e382422da6f902246a4abfe7e490eca48bfcfbd7ae36c967a9d4628fc3578719792565e291cf3d6fed92e824e00be8fca075b40860631d1c53f17c316c8cd120a676c12bf67c0afbe6fa813fc6431419d4e1202d84768f540dce44783205fee06a0f23e162784ad72fb10f8fa03899b1f68405822cfb03e1588f9dd14e14b5960e5c7ad7c750fe467e35102a801faffe1d91e9c001acbca9a02988d3d20dc5317c3c21260032cce3e8ff67503eb4ff31e96f418c7980bf385fb863caa55fdb19bd141ad2411ddb1cae266f641e00d73a9d1af0cf9d84c014dcd6c02e22122c49dd0745459b8e663dd76d976e65bce84d14c664ca18f145ff52d5e50249e4ed54421c65a7f5106f366e4b341d286e9fe4d5028d9f5bfa1f89cdd5856e80abe1fd90654ac4ddb54378a64363897252321e2a9d06199e9f58d4d68c9636260747ca4c64ee3a87f96562c7518618c7294ae7d46688004102fbb6b200ae6625573398553d0e881f02143b2232814856c142e11361ed78b5db9e369047e56e06aad5412a98d00d37e23a2b1386243831b3b9f1ba706d29bd7052e231593b2c3519b16d007b854b85136f7a09a3d8db14625da5d5fae983c9b8994c31eb633f9650e56e50ef94e6850ab51d5b72221b658bdc8a256ec647109369de5e092cbc2e47178cf792394563d2bbcfd3a1496f20a54626e61aa88c93955be1e7702efba78c3e3360d8a3431ee3238d872493fb597b54e03be5355c661b2fc270d8007e8230fc27e27476260e87ebdefbe2ab96eb290b1092bc7e46945d10ae25b3e2fab166be36e4fe652d03340457074af4a48b7f0c65463581145d956323833d140c067c4a65820e3e892427f14f8e2b10b82113afaa9fe6e398895d1813e4212fd4430996303eaaae5e2947d3b2791b12ab3be276d7543b6c51d64586cb813c08abb089d8ea31f813df86485f1593ccbe5c40952078a326a36f183c7d86956bca16c714ebff9a8567bdb5e318fb45eee30d7522dae2c41d1a14abf32f074ab57b53593832be03ac0b3447791da77af0dd105f4595c662aac2f439cc8c5c49c19f7df423d405a8dd2f07034432fc34e22a790bc0fd37a3a3d03b7d3acebb342fbfe6ebdfbcf195be8e6ae74b037a10deaa04ee09865f0c0b210070cd13d561c3d25ecfc62ad1b07fd3135a522bb4983b4354b3eb6d17ed947a1d54db768cba980fddeaad0eadd4d99ff160ac383ecf01828f866bcb4129c9d38cfd2be05396d4318df2edb01d2735a2d6086a6ef433325fd4c0f97d5933b1044ac8de4e1dd0f958780c514d26ca945a960404fa9f21546da0037cc776375c362552369c787d4ca4e57e7af55f9066e6250511fcf0e4af62ce73c764c2312b6cec77e557fa4b47393e0732ae339d816f9bfdfdce560e73ff2a4fffbd0b03fdb44077bde0b9a06e4331a5eb974ccce85060310568237ba2d0b38c09b9d74302673456563b16aa19c74e0418e55aabad088d0e246b30e6b42d3342a2846fa7429bbd806caf0b657ea36539bc3672ee3753707502c573977db4862b7e79734203d29a2507699bb103707fd212362711755090aae4e4ca3ccbf791b886176d010ab705c475a423e74e1b1b880568443b6360ef3765d4a668e8fa034486a22bbcbb505f8454d313428119cb21241812f24d7f425115999ea03afee46fa6184337a1123d1999808af2322d157db96e4e20e597187ce90991ed10e0d29615a13554ac9b0958c958f778307412faf58468b547e365a34dac0c379843d2a9c4f968ffe692373dbcbc6eeaa5d72efcc56fc8930ff5ad2d8e856d1902583fc36c62b7bb6166b5fbd39a85357babdd5ffd6204bd2389e5884602fad395b5ef2d6c456d5c0fb5c1d546d010371627cb8627e2befa23087ee67590556ad55b5bdb9378d205c49cb187e6da22bc1802729496209da84fd14bb7f95d304b535d880de125ac3a808f6fca330342d553d0d948419afa4c8fe694a7b793a626f6398e9aa9ac32d2163e0932847ec3498676fa7e9e6d18e70a4277558acb063df0c5ab7a2b2dbc3d3f52cc57f467d300c9a1070c9bfb652778231b344f4ebe03a8a3cf9c1b3da53c310ca9eb6198026e9c95771c01874627bfd0d9cc8f3c9c27a762e7469d4e9e3dc09a2344660b4b9a5e7b958ce44978e19bd22900951c3b159b00a59ba3fe5a32db81895321e8e952ca42fa1c1e19c9ba92f79073bcbef552039146ebcc812fd5a0e52e0c93f88691c6eb838154cb453ec65e0b9801658f741f73b13b7ca49ba611f00bd64633014bf10324dec9e7e860a1169011ef7821591d126dffe28a7063d44c1628586eaa790de12643628a0abe6e02e29aac2205385470711e1e722f26c242b80a7084c7ad54507b5d2abef39304dc6627dd37053390a7a11a415e9cd1972d60ac579cc66910b2c7010d5d176f1efd73daa30cbd6f6752b67106b65d7e837d4b87a3b7655309b43f5e7a17fdbcb48fe2c28d91d728cea857a8a6f4729707c299b3b12c567fffe02a7920e475ff18fd4317524bf75104ea63f09193dcdce48c269ebd24a9ebe11a6631e91e010ba95e73dc319c737c36263494e701790a4f8fd7ed28392331b907fdc63000105f1832f47a20b6fa89f0584a7871b7c619f0e2c62a26fd4678ca57c93620f9bf778065fb0a3db23e5d9b70ee12a9fcc2634b38b81c06491976ce850c35f2685a950b08ca3458f4d3269c0b5f3a993cccb69fffb70ca46fbba86d91f78a5f4dfbfe2a11f514830f4511a59a99079ec01c7fa69956dc20c667b477985f88051985734336798721b70f892efd89baea0175c9389ffab74f2b1dcc8f071a3398114acec3b016ec5418d39d87bf5c5dd8159445832904a4465d71e94851abec84d0664eb7c65ad79db4292ab75028380f0dce9ede7946ac7a0efeaeda9b0a3dd12ce239482053b3fe28018923157091d2d5944639a4f8d6942d41b3b4b1ff4f7b7c489264448a9a2384ab8badb038ad62cfec8a5e6afbd88e47c5537ead8b1826129e3ba32981513cdc144c0742f2cad48f7529c593ccbdf1e3f6787dab167e1031fa18c6d5b86665a355e280ee55004218a6e3eae666ee0edc53d76326f00b7d501f8506aded5169beea6423289d4937189540c6184480ffd3c13ab3526ddb70a49c2a56b210d40c212703dab5f641ea85c355ab080c2f545d8d26ce7311aa2555805c0358312f03783599d2e32287591cf8d6fbb19a499e8c02f506cce5d86e099669c13102a227fe1d002715458b34f7d774f3da0c4120ff08fc45ad8480e638977cfa11e8896ca1cb119788360022c54b6579184c97685ad48bd821d3796e0085035b58139923b586484f0402308c2f110296e1e1705b103fbcf3aac2c2d92ea6f04fe1617205a6345afb1a7c307764f54a8a6922032e3aac05319fd0ee6e13affc4ca98f4a63a3a1bfd5cfec530ee1e41fbd9fcae7873b840fb0dd2cded521681681b3327f7febc3bb50e60da7b08467729e7f334657fa134eec02375c9efe81ac4bdecac30bbff609ca56622f2d2b18a0f1ed1565b9c230467889cc90af7030bef42ca4f57d0d25894f13aea4e8063e282a4ddfb71ee715439a14ae4d5c3cbc72cc49e41b1240a7c2e2b2884b5f8d027c43f3053f958d6c124f7ba4ed12e17a2a43140d1c361b95906f9ed6df0a5b4f0af7e7c6415cb66de519588c0fa631d361b4a6a1a8bccfefcd6c3c688a3a641a62c26962d65c9de2bfe5eef4510f156ca7e2a159aa6ad580cfb2303244afb14b56264fb06b7ee680324edf166149e699bb7880a81d2ed6149c6689d38d915b0673cc458993358380c446859060f12ce645bc378d44629538d638792b7f85ae2f8d78ab3439d0044de9321cc0a4068761c8776ea518379961c6bd11d1572d0fccc7fb5217ae1a66184cc0f5cd87b7bb033a852549a74cc9b081622058810c005365fc6a7fc23c98feb9f4f25c45471f7133ac479102717a85d1b3c23d22cfda58225d92f8e073e9af5eb764ac075b42aa85d686eb0b7e652dd7c1ab2076c39f0c340c51e76a6d7a33ee7912181f86b5f4ed58fc504c9596ddd9061904f8da888c31562329ad26a5bc19f1c7a10b9f0668a164703b691d047913581b4b5170e27d61ed8bc94be2b94b73bb5f4262f0505d627d8d668f28869cb2c479f83e9e8c1900159f81b3f13e416855c4a1c90391292b1a5154360003d4ac90767844a065f8f6b3f12cabfc8ad33589185413df213eed2aeb19474a857110afeb8a8a7a0166204e9024a4690be0cf837febd5d8c90f6852cef5ddddcc079be3cce31db63e49c5448ad7cd8cc372f77f79fd22f7b65bbd92b77a35b252d8b52fe63e1bbb99fcf00a94916ee7ff2ee294df0ed5d18d19e30f6ed438ac9d22dea1a3d44ca0df1268abbc1ee2d3de8c61df6b64b476d72545af2f2a95c3d5d70029d46f30505d10a5911a09aa073e765e9673b92fde656148e223e37a66f4f2b77210dc640742e003cef942ba346bd679d77e0bbc826787c8fa1d7dc5c244625489aeb62e9813a962141e76c18473bd55963e6c94ef0b1c8132f0d98688dcc3b9178d6ea90d9f75105c6f0c6ec7e7c465124644e969bc3fc9c6fa257219f673e2be05d12630c2170390bfbc97cf32cac376446cfae7847d35fdc42ef55479b4a37212a64d86ee0449037372aabd59b39d81d976be7ed13b256a869b7620b744ef0f91a3281b5e251d9607ff4cc796b583e6e6e2bde61a8c3cd87c57f959bf5b05a3bc57c8a0d3127c99736e1e680d55de44117fd8b603b57a109f6ad7078bfd61a7621340f9034c068ea2dde176d24ef5aa91f8904ff5dd129d757558ad744433c3cd5a8497f5de6b011bd4e75ada8c6511443380328fac28f5057a6cf2ff243e1850ae2f97f277c0415bf5d944e3f277c222a788c0106443b1649086d5931a459e76820ef906b446402dddc858ddbc581d16339572c2d43f388c906354d2d95f1f1ea16ec818bc5649ef4fa351d4f4f5d2a96e76b2846e21f72e9c844d92b12f0001cbd2adc5c53c6748133b37e3b76ea0d8861779967fee31aaea46e2d60301e61adc5189d62148f58d20e170d415877f5f55afd5b4bee93656fe9922cf295861f7dd5bab0cc9b8eb80af639748e00fd8b96ae533c406d406ea66acb9f7c356770119091d3b2a625d71b7ae6d8bde6e8033030462a64d7bf43899edce141410ba17dfc685a96c80a05a890b70c4ed1c89ef7274de128a5de4f82f4a93e91433737005c544a84371a0e09b7ccbe85c65ecacf98933ba32dc0c6f1d28aa892684667143123c4915653f49fd12f4abbd81dcf178bdc8ad084e4178b31104875ca4e5e272a86dd133be08f9e4f23d4bb29680f664980e597fe14ecf218eff5441b38c213b4105d9ef6d4ab0253c0e44a5da05d188a4ce7997ee260c3064a536478d2cdcac8a24166b8252227cc34cece939a6b4fee63cf42fd0c2857f32d388cdeda61dcc827d7da4d6595bb22632122d575124089c43a1aa39879360f441e42cda710e95a002ac41df2c1c6a660c8c9b361961893aa9e74f9b014bff91175b6f42246aabd616ec696caeb0f001786b6815d55d65003968b56f6ecf16002fa60891f6fca422627b87e66387d58b14e56ae7f08e5ce8826ce91df21b829b11b78175a4c9caba227008068e411ee91185db6a42e0f5da83b5a6912fcf75483ba4b26d8f368825456168aaefd1d13bdafacea8f869e8852ee7c464e85ba6f657c34995e61c896855dde70e9d31451b323d1033d410b727b0fc07ab67c24c666a9071830d36060ddeffe11d5920f44a338f309160993aecd3c7e2693dd64b4b7197774d58c4f6d0a64d35569185ade982bc225befe6444a973a4bff92ce29d69a712a57e72cfd2e018294b9923c1b8b66624fc184a3a1202f925b41f7ed32b03b52a347c1604e6017d9dd8815affbf0bf13319db83a159964b230722d7e9108defe642c16db70546297217dcc5a56f4421f461d4a76e12215a2284ff4ab84f8d8dbf72fd48fcf5ea2443abad334434dd0131d182ea0a250700fe24978faf814502b5bf7f018f282877cae327e967eafdab700d00829494daee3c33768f1fd531735b9eaadd6cd7d83bf39fd0553e7479b3c12c137cde119b4bd3c375b2fd0ad1d37d0a68d1feffad24edff3f16ec795668d740f0167d7f3c2adfdd824f7aa948e4c3d0d35bc722fdc9eb4a80823a9845ea7c2158c4c0795fe5df199cfaedf43126333131f68e3d6434b51cc809e48e51548c452a785bc9049c6464f5c3ce18f1017718fc640ea5ba202af40dd392c6e0f4d87c1ee41221105bba0b7e5f620ab4349ec0943f5a6ba10a8abfee24dbb28f98d28337f9977e6a568b413c99e5acf1df3354f67a45caffb867d67511e19f794dd6bd01858f49a4468e7e01f9e8ee3c44dc6c820252306090027d02d37f51404e8e9c9f8102d2f74f30f2290ac81d6ce4b365f16138838f3a49be6ad6814f40ba43dd2589d90752c0581c3637d0a5755f276d28362891721cddb424b82b97dac906126795b1b822f86b371066d869b5907cd32d858e3acdd3cb8d6b708c8318d98ed147100e43009bd09bf37b441afec8010029fe2db819135d87c490decb7608ae94b5bc0d4d2a997788a3c670e2fe1d9253b4bdcc4d7b908fe9ac8e96b81fa2234555c928c136c230522f07157315825d930361b8094d5bdaa1daec3a4c24971d81e0ab3f2d9902c976bfa26498aedf601d3a0139b45e9f2951df9c007d3eb4a144f9a0d933282a2f02d0c8659dc9a96efa6b0c3a5710f6f7abc196c5fd28d6fd8d06f08d29644a9b83d1f15715f85a18ecef448c24e581366be468f0f4a6a7afebadfb2a12b4ea5fcea594b4d5def326a219fbef6860c7d6d226724ce16f33139a02ffd4ae11cd607afa9e387f44ce583c0504e75a2eacbc5b1e5ed65e5ae5b0594ab1b9c188a17e084557b77f89cf759a8cdf3387990a8a8030f8f5d5163e3754063890546a8b6044117a1cce5dbd06a890b637d1613a779ebb93c22233a2c65c2bb5b639e6360cfe2c7fb578f402578d884ba040b6313960da74e1225e066ba09ea71fd248c56e52bc90640502c47481adc5e926437ecc5481b90d82557a19c7bb408f7aa75b58d946c519cb2ef5785fc6010c404d83248f4cccfe55e101dd6bb1385d051f522b6f7bcc2f01262938930b7577c84b45188e9601958a833da8789b12fe89e89d739d1fc7de51b9c5575fb2510430ad71287aa9486486371863b93371904f776ea0ce934a8eb601cc35670b261166e64bcfa252ead82e7cb9c37ebe5048b56d140ec2f9ccd9777fed6fc1abeac0d935db41d71c3fd0137f60b3db5a14d41b9ef57c73c1421899c409bd8ac8dd0e2cedf6bcc5a3f7398151300ce80613fcab72cf3bf504a8bc5d47ab0f0633566f69dfdef42715cc961add703b6361348e4bf2edb76c09fea012b90672e1765894155d918a0f5b543ab232e84249f337f2c12b9c46289de301a250e769dc94ac45af68a8fb5090616fd5e2ab44942ad1b5ea3c2d027c19dcc3f89c97e98084df6a0bd2c29ea4b0dd08a04061efe29bc89bb99573f86a227987f72f0483e1e323b7935da46eb0b94def35cb88db263283f4416e12e54b8fc7a50849f930c6c00f0c6a6debdc6cc1bf97df9153fa8bb466d05d74f6de7da0c614437866e2db96fdd866c2cc2ea30d0eabb3dab63f56933c529e1d41e15b9164cd7f6588ffed361052919f8ccc1eff340037e96e884485cd0a59ad3a52d491cfa5fc2ed8a8b998ffaf26a2066db44cba16b4df64ea009647d02e0992150360712d71a8c59ec3a8f19c8feb4193c06548a571d421b5a9576b0c112720cd1ee11120f946fe06cdb03a442371a5491458bc11d3edf1245c4a45c70bafb441dc68951c964bf6b0f7a26551afde414e04ecd509f6c246e3162187a479992245f070c58eb16c7a0bf76037f645581560d33065aa7882b285a8b617f99f0a25573abb031eebcce4868a00aab4a4a80a3efd3d4640f315a99cab6442828b8ba3b9ed81a19da77196b57d1ba05e16582ccc358dfb84fb197c9ee84867aefdfc9692f9dae05472e693f7ed3584ecf3bf1cfde04e237fc0fa7a6b2a039830b5a0fbcf759d36a97b1a0374f631eb5af12c468d1511d007d73469401b6aa7cee1fb4be73060568169dae7504002141d165ab28bea4101146ba9d6d68ef0f1735b3bd7ed5cbe51cedc1d0d90b0d47810f1bf928cdbea603530f212b1980e5633118e40bc2e2914604c3eb4957e1580ae3e0b0a7a423fa1e885b169d5225340098aacdfd19d583f04f8d5caab78f716351ab12e95564b89dc9f5d7da503d56112f741e9b2936ccc651f2e33652a2de837ebf39c56431c4b66a15aba4b58d8eec0420f2e3daaa1e1f30b1321653416a06c70d035e751d205cdabadd0e85279ddfd4d6f322d848e8a7c6910a48a8dc8a90259a73a3aacae80025afda1e11e4cb260382f355c69548a9e96491c34a203d355900b0c42e25dc6438030f284216c497f56d7b2caf27d163800838d07ec904d638825f24264ca269a38e8c2edaad596484b2cdac5d3c539a85b7afcb1c75133227642f3f2a4c2adac31b7074da701501b2102486fbd050840dd78f73cf79395120a4451df4775d63a0e11d44be2e490d71881a6b6407fd7e1d893531137780d235d04a1e1c242c004e4f9b8e66bb42729c5a28673f38ef6fc90f6889034585aadb1419fee76ee006b9710a91b51248d5e5f26358e27d9c04574e9aa94847148dda4d3a1785209f1f49f93a69a9c06853b0afbb83632f157227fa5caf42bc26b8ec89df32cd24c8ea97313a9d82f65fda9f836fe87a7a9d4c91b915e2fc3043151e1af58e6e6fd30a8908e06ae493febe98a6f76badb57f847658e304e78eeffe3b3838119d8d5826f4bdb68557ac8f30a3650584ae08bb3be59f4f7b4c2612458d2ff95d80c159e74a7314ec44a8d2a5ebad70d53c9f5f1768c0a68f8794a45d6a6d4702b24340246228adb4e2c62f68fb81710ff562dd7c3eca88f62c2ca0f1c8cc9c8bd53589404ca72bd22808d722400bff77b12ff03073ec4cd947aa09fa0c888f666cc602f4696cf385490bfd8e082d8f88a24752fd7156811a921c8c6651b74d20a5c24d2c6579d33e5f55e02bc1c7d198bd40c8f4bf0b53ef92e6765a03a0a2b0b97d8858f84def685320344f0fae48bbefb4c84320d39a62af74771dc3ffa8103f0715a2d7027ece5b399ca232e971b602d5354d093c472411c8e90dfb1b681910c4fc3bd9a386fbf5f405d487a179f976cde7120dc493b3dc5093030bb8a4387a0dc149dbd8434b830cba41e7c427b26814466146e4d288711ef230a2c3324d1861d80d2e3875f18c7349224c81816b9b265cbfc3cd9754875d75f4119789b9c91932b2bfaf20d4983d5ae3f490308536b29a1ee5fb18528fe897f9216dd716a7bfe1991914967cbc5e807d5cbe72db089038d904e3f93423ff29102b391b5c5e0e1b908df194da35cf4dba4d450d4e32c811314bd52753db14290573a7de5eb0cd34a76f686e07863e02453b437e0347f43fa6236d1ccb9365c360e85c2e2ae5aa8ffe248077458231be5f8f340e4cbd06c933336907ec9812ebf0674c48f35a083fe5603fa1defb69f4be0e95ac882f8fd4efadac12696bbcd3fc85d3ccbe1168ab3e5995aa002539c496093955fdfbcdd5c52c8164bca045cbb05c18169abddae64c5390809a9e13f0bc15da6ac155accddbe2dc40610d00ba164aa0cbb8c7f150b1758116dca7f1a53d17425a2858bbfbcdc8fc0e2b9a151d8a2c19545d9469bb18e7af4deb8143a61d960fc982738be7dfa62e96015e2a5e064b8363db068cd37442d9462026c32cfff31db9a432c49f422636c6ae2bcf66d20c222869515193e3397164785074c45a77ec247908475588127b6164fcce4b5f943bfd6d6e9cf565e0b72e439d35c8ae6fd7ffaf532efec728ac05bc5f6dcfbe786a5aa8bdccfcad1b1e32d2d9ef0e341b7c7a106d9efece63c61c1fdf14c5d3b4173e03024596c777fce6d07ecea9cfef4016c38c76ab574cdaa71075d57787628011d207943394e57ae7c252b0a46f8faa28e6ee6ba8db991aff48cd67bb19cfbf1f1994a045c87cfa5b0173d53be09ce805935e652dce0c5c9965521186d3254bcbf4e2e05457741b4bf5c59c819edc605b2bb9b571bd5ef45283cdd86ff0c71d41723354dcfc232bb63a2b7e34a4d85e205cba91b57144cf0ddc470034dfb2ff622da2d2201585fcac083bf47361dde2e59a6e24cef541cc72d185455e3e2e926eea1d4ec79b14345b7006a10ca01fae6a8d9346dd42aca001f67c0005b607d0d3ce18a10407d34d08b7d49167038c1c66b98a93803b6c76229ce1f5050191014dfb3834cbf143ca5a45820395f2f54a4d440527d153f214a9d293946895cb904e7212df8c27b13335f70053c4c7bc90ca493e9891670c098391b699067bc64a77a6c7da80e5e507d0d81a36604b148be0fdfa27a7d4434028cc9c04017ef313f53f63ac9a66d04bf078d582595f22c90100d62e944d152739cc14be8344600b772305828fea47bc67214dd70c41eff646e280e0eda2239d70490f96e1b7f7469c6b5c8bafb6c30682739357ed5b12dffdd6576743b57eb65bdcbec42435cfbebcd76b8be856fab16d006b1ca15b13b83d171e02058812960a3373434d871b82d23179c781fba90595612d7d86222b1ba93fb106576825cdcabe06e468d190c41a602377d1f14adc1e1124932548ed2da013a379d9330f680d78c11f1bdccf642db3f9a5b72a8dd40e1ec41323146e6e55fcd185e7a3acaa676a1a8a91c253d078af75a4b3edfdf5b114b6a15893162c545dafabc0e85d32cab75271c5fe2e565228ba89c668b62240316340a54ba68d79b82812e9bb557b98b6c48ae72c1eef7636615a3229a9d18a3469a419b551224544cac90b56d400646ce2e0f4ef90094efb07a95f16124ae12a1f63be88153362dd4996d928432d0b293ac16977aeee0179f5c072e7e78bcffb25604231f5e2a5d1cf71a9eb1ca31d5f3bcebb7429b6563c39875414dd1410bb3b838abb9721591152a07384daa3c66f13b7936fd671590526cc81b8deb8952ea773d690f41e347e451556d7a19decd99c014c809736419e26e9ec17ea38c0d17224e3d8a6db0c38bfc03a8a758436611fd37c92383e2beaffe3b42d8d1b520826f16bd876509a2b678e2faafce9c9ce8b6b91a164d8e92bff689690f89ed2ec13482638a44f9a0cc19261632ec2db0697767b8a0c7c4b62dcf30a43bc188dffd4b8d5a3d75b9456a9b1d0abbccb11518a0f431db15d7c755f1dd27a70d4769e7f4a05a6d916e142e8c2e9c840b5af10211f2cfb6575387558718fa4d3331c4e0750b91231deba41cad74f0b1f53ee43d3d9749201a126448f76f844a841836fb9f12a3cd9e64fd37f875e72c5de2de22b9230563a772d446a4a12502c75f992e411b8b96eadbf1e89199c736a2d35e7adbb0af0021c330cf8ae6904edeaf0a8edf0c0286bfcde92b9b13ee63c537d872af2e6425fed9219a7fc6d16050ed0b664e48fde28fed7141f9cc3e129467845310cb8778e047e07294681c27817270bd2cc63520ea833c83aa514928407a7657563a4f868c20b94a91cece6122a89afa3f04c41844b2a0a3638bc99a35458f48c009570c04e09c391d849d33afa888f555d4d1b5eefc6f61e4f0921d532bf5d7b087f78a9b66339848e49217992ee3448363b6dabcc1ef96dfcd010f626b96a1be8190b133d97992ae5c0e984dbcda6cb680d4612c03e8c23fe5f4fef36b40ddf021976dc5d91601136a73adc52af0ec54867148330f09ff40adfe1b449204477eb91bfb3e6a10614aaceaadde2dc6218312566ebff88a4343cac6bf46bbe26675a473b260b21ad30d950e802f7f727a010d6bfd02a0f13f96d30d2a7fa272773ed459ae60e6b93818ddc26d275d3b1e440f78aa69164e6a4e09407a9a5bd4f31148feec7d2b29a8bfd753b96b495983355c86bd1d8018cd850020af0d84211102140ae8b9e2f25ab3be50ede6cc4522841bd6a2d83fe87f1e7244d4ae96a8790ea0440ada3a10bcb701f86b491d65cb41ca0c49f319031aad60e0a108db16b688408ad4e120468612e3b2c919d5846ce4dd6d187cd12870589f4c9522fe1d12a4342308c6cc67b2d458715b5dccce0af6fc198ec69650c5807473a7622c6da4dc807667b5379d578eecc812779986040baf2b2960b3132c3b3bee1a3963c2e8a74850839e8a4b80e07a6c99726a8dbb9aea25ca8827f27c62ae2201a8e47c648215ee0fd2f9839b95c9bf6f14232b1df7ddecbcfdf41c68e2bc15830e85007fd58a315fdb36558d1921a30e019af94d507d06e19789726e782009c76fa9c4c3684cc4ba9d363431bcbcc4dc2df926229cefcf663c196b251989bb179d88504e1d6769de10d7cc5d3e2bedaaca724492a8f530b83c1f03bab552a1ba492d8fc7ad336bdc275b56061f28d8e76534a82b20bfaf4f2634a253094aab006dedad6a2016696e752308e1641576a479622ee7d14b069790a651327ecf392b33aafee26f383c21c24ed922712bbf60cf6fdd7de4be5caace503da6243f5f56654ec44f0001c78ee895d1390b6ef69865dd7b09eae15171642e2a6dd090686212513f66c0ce9afd82a0c26f2976ea8e78b785f0254e8dfb840a7c33aea23073f78c29c3677a82cead5c0b72b8c7a0f529d03631fcc0b0ee9361f24c6cf8ce0f37967ade0d3a974d1cf7a72eba8ad46093cb2aeef50e3a0cf24d59dd900db322731c9a151ff48fd241efcdf61c1c66c8ad0e3f1a7f7447212c87459912d72b34a31da0178c4d67cf3f5d8eaf1b7943cbd5f5516decaebf6e36469ffb06295217dc92b6f2a968f784b683c99c55b4f6dccae1ef6f9bcc3058fb7bb55aab3533b59335b80ba1f30a3de9b1366f31576cea6dbb1e4bcb7c110b0f187fd26fdf8af8aeb5ae26d2518cc7fd943db9fb49cd5afd77e0733632ca1204b653979819f3d6b2cfd39ec5ecc7e92adb69f3a5315defa4238dbf34c959323187275629b2397d01a32bf35a14d14975f2f74a7f49e45ea879626e4f2aac5f3cc1b2e19f43e871fe221ea05fac10e675245e9bfbbaa1e26663c107da92bb6426399e7f543126edd7842607ec598f7a8cbf9c1c102203284bd9bdc410e0c8484f6e2ff76160dddef4672518411ae6591e7d200f067694c3d7e8c76f02f62f996f6f2781e4092d6e5f0d214b0e3578aa5d539d4915b361d94f33d9aff6d6141b06d876cde44e2c244d7cf95ebd10b3661d741766e92e4a4dadea25d58aef80825281707fb86910a817bc35d594aef9d4389f3f0ea30d3d50391748e623fd6498b87a6c57c2eff8eef24d2f2434dea3f4a3c77cc19fad403de7143f8087971f6391fea68da802bc113cabb6d6d4a183bb614f68cd77a6c49ed5f8c7404aabf56216b40597dceef9edd5d072ce2fd3e04b1592bf1e6526052d3e9eeea1a91f49dc7ed3efe032b6c261821767641cebab7111a20df063416dfe751b5fd9f091b4db611e874dd4fc1ddb68968532480c3db78e1c402fccffd77c4da20e324828c6011b66fc566c3c61534736e0d18ec9c8132e48029ff1054e5fa89a1587b16de3f4ee09fb9112b04fef1064735f5f4e20ca6c0270446b76c9a9cf5605e4cbd40fc00135a2cbc60dc9203b569b90cd4a83dd3c06c390d3259d807655ebc166dbb5303d8685717978e47e66c910f62d3e544c997dcb0b5a286b54b9f1c7c62630a200489c980024221da352ad86b3617557562b87c675103a4f4c59e3a3906057eb28b19a0d4bfd35aea14ea6dbc4a621371baf4c1059e547d235932cd91d0004b77a2bf5cf50cc97608e2dcf23111b64f096a6ea646f9b6e8b8051309f4b5b919be147aa5e4966172f651ef6bd3c5fed4ee64c77ee24056f1575436a4f3b566a410b0c40bf95ba0734da28351b7ae42108da18885a8ac6a1bce7d06e8220ba0da1676b1c434c1b2c6c242a031ba880dc80d03fb07679160acb05f3b844a150ebc2c0d006e78e7c08f969794468e0ca23b9d3500152592321c14ddd47f1c3e13e09c9940cdc9c46b9c723dc0bb1dea7133a03a3dc36d9dc0377edd508ba870eeb9f50b8128e8c62e50ff51d42af463c1a0c2306edf307e73f0dadc2abc1cc106fc1ffe71a178ea96d749ae44ef28980815d0abe1c9273f92e980cbfb7e7bf06c068c7ec9cec820c8bcde4387877a1935116d154b61c6355b0684f045de89254cac952e8544c74a11820dfee15b45783f5138fe2c81ac524d4094d99ad8a64a7535ca867375a747c71171a5bb2af024a30286ad7f5c9265384828d84400288f4ba00c393df8391c03e78b0aa34e37d7fa3e3e040279c54736ea381035a4c7a4c6db1201a5efa43630c018d55d88c7b93854ef2b09b6a5df1c803afcdaf7fad8b5820a92b52d29156bd39f0a6e165c65d75fec144653b33ceed4f55d9d689e5d6461d5cbbbfb65d261907d735867e2d5defee3a74a3c5c05d66e059e66d1a0159f0203d123f83dc3b42e360eb6d40512ea0ed0bc4ddbe731f2b7c22994a2d6fef5889909691690a1d8e6083187b399b3df06873640d896dd81506b45c1a5c1ed42bf382ab1b2018425d74ff804b9814d423295eeb030c19e68e441d273aab1b55141708c2aabd35e95033ff8a07d8285fca67c0a7b38f2e17af3df0b2e959b8968ececcbc6300889d6e6d8522930e0aa34d83646928d15883ea3a786c431430170840f54a35ae97b9acfc208b148dceb4be9eebc061867b24fa790251c8af98726b1a769a0ddc142a3b7ae9f9d0cb309f18a902cec7e3088a266fa0060b22fa10a4148d190f24d981c881280a2a84cbb684842ff93f23684e9095a49ed1124536764a5b0d43e3ccacf01a1730c131388b80ca6624cdd954a3f41f65992324b3d4d8e4cfa487e1b12e043c2a140580d1f0581476d7161a8c3e57b2940cd8491dcf4ce260ca3d792f156c0c5daa53bae8826e6491220eecf5ef1668413222d1883876627e1b1be22cf80b8590648d5bf73d20c06a9498c474dccc1f456d43099a605149b44553c520f327a87e6efb02ef638804a347ae332fa5b399155d42ed3efc0fdc86948850370822e3a75f9ef02bc7f5aed070af9034259de6f705a673a32fcda94e1c43c16566e048ac6a60afcc57c0d5e85777d8e7f5d786ae9f27ea3a69fe4dbcaae8d7ce22ab6157e09aae3a3e79f0b5893c846f623eb0f7a4560f55ad90a6f57a4b9b45eeada021aeb4f51bfe5bba74d2bc9853eb0714af9d34fb7643993e94132fd48e823e699aba6f4133ae44a7d812f96cb7b5cb18d7693965961034732bf20e33b1c64e0d349716ffaa2cc3bd35a184448682809c0ad5a59beff2500cd6130aebd9c50d605c02d951887f3ca7f4f7b3337e28d75c284ea97d6cf7e35f8de4323d65e225b565ede46b13040396b3bf5ff3a8f0a37a789da46a8ec9805d1979a13de1dc27f200b40e864d2223b85fb36404ac9d4468851b20780e011d89724a68b9334172951681f6babeed28b2bca347e13c5696f8339f0da07834c549495a14ccefb93386f6c495fdc366859fa1858a809a91b9018e86e2e3bc9c0707a0d7d6824286c7cdf7495af6f886589e74c9eab65a8309b731fce3d666806833439eacdb38434e21e054255e275392cce6b146c382db831a37fabd400de8a90c88df2415e0ae62f067e763238171837ef6318cb14a717e2c867833b63607b736fc725d91c00496966bdf63c0b835669a925a24e13e7d70fe50166ac59ef28aaa9ed5b47a109e479199a30c72c2afc09661f31c7b130798bc7171b94fdcf80292e02b292a56c60d3009452b03ad7d13380c456b8412397e2cbe090c2eecdd56e3109273157ca8433bb2e763ba638febd385304ec83f15bb88a3f23e20a27b13c1cb4c67f84d7d9aca501cc0d821ac753018e9cfe9dd46c49dff51b7dd5377fd109de25da42ccd8270ecfd04cadb8fc059305c554d07998424b5b2e5392c632e9420370ddd1427aa722a1dda14164aea8d24d734aafe821cc866b250f5387518821d8e8d40cdff3ba8efba4008ad7eb12154ce5fa788985c94772d359b865a48db7bef2db79452a62403d40b040cbd0b1fcafb1dd6e839ffbcc8631dd328be19fd08eb0c9111b1487f3b1669f4e843c75ee4b15a895891d5ca8858248c6a9e7625348fe3384b6787e53127aaf0c91513c5786a8fb23bcfed4e70b6e4c6dc31f718e3733dc5c446466fe3fe1969e97214eee449a7cb2524a377d3df77bc239d36aa2f79212f7ca1c18e514e8fe551ee97f57d4a261286e59083fda61c8360e02437116e2887be97b813cb9683fd3057759e4c26aee17aee01e656ee0f7dc8fb26535cc9c4571d9343ae8ab9e5126efdf8d38b9c78917f87fe24942dc9933beb2e8a794cb6da9db490dc6187ed6a1eb4d611ec429ab7c6ed047bec06b78bb450fb80f55ba897f8f7cf3ab3bb901c0ae5501fd131e95db8a263b387648cf6e4e822c8b6e305e99d1944ee78750255e0620c2dc38dcf51a22b310a47fefc897550fe91857960d1db41df2b0cd7bd2dccbdb3e0b274c379efa3bf7e12a39fb15817097167ec487d9a1972a595701887684673ebd8acf8864e17224fef409e6e449e63d8b66f864c4d1a1cbe1eac47338a15c995bf504ab763fe13b329310e25167bfd83d3da7b3b56d49349decfcf1ce13ed2ae1fe6acb3ced2c752ac631f59fe73444393e7a83e77bfce1d8bc53a46e9dfef8676241209e374ef611d24a4d7e1be7b12f66a4e90564e27710ee499bbced29fe0ab93ccef256610976795d145f4c88f8f8b67ceef984ccd6c06a6911f593b95a618317be2fb1c9dd37a6cbffd0596edbfa7936783c6eed64661103927883c3f3a11384b82db71b505973a21404793832e22e81fca50fd00dc06acf0d2c0789adba31bf770d09f02b0ac6538e88dfb69c2d8853c43cb214dcede6ab57a589f9b0a3f48019225bc30042a9860f5471bdf4101577567ff20769858d79ab8d96fb5bf982ffc4230370ef5bbd1e146071707bbcb32ecd165fab29bb837ae727f1c620e63100e373d2d2172c55f24e664c40d2f7671b08322134450424371101ad21222c730dcf7ded17c7bc259bb23667f448e258ac454ccf606e7e36b18c7c18e78c7cdcd0e57c5fa5f20c20a2bc488e8103e6242d9935bb96b2bf7f7a3338e284494e37f6114c2712cdc1df8e689abbaf13325dd23ec23373836c6d8de8d2894258e6f23630ba64c884239f4560efb487e72432f0a798a66513791a7a2b79ab85be1423d33045c8cf1917d4e8b33b4b215523b9b72f33db88a067514b19b40fa18c37e3d28575c78e5a7e03006715893137be37e512fc3374e3b8a4cbb09997615994626322d327ddf7bb6fb4099a2f569cabfba8ff43b16cea8a4b061996ab85f125b4bc2f8e5fab41e605dbf289dd57a0f7d4abf87529e6ef5e07d375d3b195894a250a6433e529ef49cf79cde0d996f121f298f81cea4a7291835ffbee9e9cf902b7ffa3738ae4a79faf441ca02536b5ff4ad4552fa6e1c0b11b23df74234d4c4a88951137fe947bfc34272df8df8a7b80bcd24453c705f5f07f71535ff434d8ce2a1bee975d857f9faa637bdcd6915953799262aa57ea8948fac5a55623cf893eb030aeea17bae508e9e0dac8304c7fe56b14e7ded7590945e677bee75b4efdec6fda73f3ba495eb87242a51c22747cf06121cfffa40e4dbd751ef17db65edbdd947df25579175846edfbd7d2142b48c76904cd15613654a294c28d37ec914fdcccb709b2594652c4c90cd902bd92c2b57281cfbfe71f32cfa4fceaac76ddf0e6bfb7658440e66363771232bb25038fe16856a7cf26248a40882107a5a2dd6cb540685fbc490934c9bc85b397beb42dcb089624c91044bba7a4a2b381fdaffb0397bcfd4a32f69d64c1c84b98aca6fdc430ecaa198db7e0fb96afb59bb337904a765aa9fc887a273b5661d95013b5038240f77904cc92761140ec7611da3d1c7c5f6703c1cefb9f7700c5b28cbee2050a66a874f32559b48a65038d187b2fcf83b2c0f922b5495a82a5115f3d0decb06cae11d7ded751f0d43b4545617c271c75aadecaf562b6f189563f3df302aef64d913e974a282a1a19a659552fe58ef882441881437d63edc778eb26b197aa153d08d2f2230479e0af4924472e824f472222227aa3cb6c5e3204793b85fbf663d475c990f7ddb53c393b5d5f6f054dbf3d9210ed256f6dffcb5b7436a13db63791cf41efad8f638e85e899eb8a18dddd0f2581e3bc45796e59ec1207ba6829f8c043d406423c8fe9548ba80e55f81e46a663cd9b30d64af65c82ef485ec155687625528d757f6aeb15fbd907df264ffec47aeae4b288b997e5cd98f2bfbb9a54ce8e2d68b270937ec8abaa22d494bae48478e1c219160a51415d20b2657db0b872a2a17dffbca24d846aadfd6ca51deeb726d2d9972a9dcdb7a59fb72695654220d5f98f6dbe758b85bd0f67250c346bc0f37efeb481d063284fcee75b2ef304a47977d87917ca4e9f11059726e1756b70bd32ecced5066dd965cdd975451c9e16dbd5af71eb16df725575b128f4c58f2ca9b92ec7f99b0bd64917b8fb81c944edc98c3ebca4e3a225752881e3992fdbba2ec2f89241187b7579cf1b73c72b51921a6fc9b907d8be26e4cf84b0fdc70f2f0b4e5e1e1e1f9e19342addc5228891cc68460b26239ba98d94b122e0ee03601029e4cdf730bc7841b3fa45fbf5e938d53da975fa87dfd78c8d75ea353bef6e1c41a8e3d04bd0e3ac51ff10cf7a7913123cb701693fd2bb6140f71633ad2e88ff9ac0ad77e9cd5331cba64ff2bbf635cf59962cb49393b877eef397118c45bc66efcb07d9eb8f1ab1172f6617c651efd9ef574dafdcaf4336bef3d9dfe2747bf183f7a392020f3a01fbea07162291f0c21ad34f4d80c70960f32159fd6c4dc449e5836916d7ce485522cfb8684edd5f143c2e8b5bde46a048498f277c9d4159c8a3bb16faf48233e4fe65a4556074e640fb7fb1363f8871b1374fba6a7e873a3270efa4b9494db6b4bb2c5b627beea20bc3625ae8a4a20814806b431d95ebebd36a2ec9b93ec72d20cc855e1e84976efb2674972e955ab94938e9eb82ab41f6940f074ba239f510f8a8766c5b778e4235723259e0a47269753d08f7cb2ff2848ae464f401a1a1f3d1905f9e8c928c8474f46413e7a426af9ea8232b673530e474f3c1c3df9981c8e9e647f6e48a65c87b32c2e25617ffb1dda731cc7bda63dc0fe861fa03d87ed6bef2384c57b2f04e539ff8cf329220d52f60fca2e947d7bd293621d697bd2931e48f7a323ae0a494545720584f4db93befbf0b6b27ff7a37f40f7231ce503b6f7ee3752cc49b14dc3f12cd641d218877b0deba06020286f9fc34046cfbd0e0b0c04090ecadb07427aed3d0ce481b078ef7758d90b09cee8b7d72161d2b3c0a87eefbb0deba06014253d8ef6248ca26f7fc3288a7de090fe87114621610a224470030fb080090b87f3c180c8c20124432c0a305401832c24c142c13a34f826c668ec472b581dd6b1c129efc3f88a42acc8e2fc4b4172c59586802001a2fde8c39250765c8269618968f4014182439249dcb0f472151024389d05d23de9bd5f47f7a41f7d8d79b018d541deeb2061546356577451f675786ff1ebe81ae3a0e8642891155e98fd6044a8c6b13ffafed1e84923ebe346a37868d6e8eda374d8273de9edcb0f33209f3f93888ae1c6583df32ca67434a9fca6fd8659e185c94c3f2c019d4831b942954c1855c23c342b03ca5e340c17a8de4fb9595653503a2c10d25bd2db114f06546fb8efefb632c77d73664073d2cf80322432a2163f591257c5a0172c792dc99ebd865ec024ffc060881c664d26edd2cb55e185e524ae52c917e6aa9044128a33429186cd7e4943d96fecc3e66b7bff092457da9f8626d18c5da019d2f7dd1f99f2d2ab44e4aa7eff5212bdbab0d2ab64844863fe19604554c49490fd969ac8fef387de1ffb35eb0239bd42d96f50f6d994d20b93ab0c48ae48f6dab7f1f979e67a4842422421211229f613fb717243eefe6c5f06f4150135f656be970b4cb8f0cab46b3afb7ab358f56e32a2cf47c7f0a73307714675efd7d9dde54a69e9e9d7a3132a5525d9ff2e99437932a15fb8214704877b0187fbc8f20f9b751067fcb9debabb631d8540f2fc914037e48e4ce9e1e8c6b40b37e48a64e77cbafe5039b4726d656ed49162a1bda458f6eb30b9ba3d76625876d2cfc85a2e7bc90c2876513742b4dfbe943befb0b8c7f19ec33a48fa1be374a3f0f6642124ecbd9011ce6232c5759ff78d7e8745c483f75df7232c94e90c05657f06502e5cfa38621e191167fcb5dfba41f13ba8bd753bf42141bf848958438176c2496c6285f71028533ab49327b95b64ff95b8b291326651e5bd3f17497145aa29bd67c7380ec6b038ecce1088297f7f272a1eedc7cd8835a24d04fdef57e3bb2182b18ba0bff7d908fadbc8d529a6fc630c6f503e19612b16e039dd67d503577b1e393ca2831a8e2feca172d84cbf47968190f48a3c3fed55f7c54df6bceed3defb7ce89ef35efb72ba2e7bef5e7a239cec38ec11857cb01f33e79f636dd7e1eefdf37038bf10c82b73cfcdaecbdedffe1c810f9ac39ed47194893588ef8c260d47d4aeaea2b5e58e4823d670b07e657243dbad5850f3b49cfad7ff11440ef5757095fdfa39628d0c1c228dec4454836aad359f64d4ea60aeaa5c3f32e91e1364aeca53896a2c87b528b7609ca6e192109703972494515054d7da2d24bdc66929cfa96e55a2699aa6613ac441cf7cb29e1c6643b2dfe4d1b679ef60deba1b87de673d1e11079d267737ae420ed620073b0c37cc7ab2222a7fc28d339f9eac47ae9ae571083791d89eab9dfd4af64befc2a9ee687bc1e1cc2fb4c7419fdb4f8ed2aeb1d68df2d021b5883b73981579cf55c4552eef0fb3bdf73b6ccfc37b1ff73ef37170f46544660eb39e3c33222dbe1f9eb7cfb29e11f631f3ca73ddc17cdb8dfa85215071850cf3b1786e76301f0eef39dac17ca7971e8eea841158a8227b1f3d05d42f10614515b2f79ac2cf671bf9f2fd905b509527c855a3f7af4aaa905cd1ff7781438b7a5c795afe5379912e9a1161c1d1b9f2c4192337f3c1594f95c10d25514f9024928f436b512db8a33c9ef2ef5cddc360e972fdbfe42b89b5f79e4eff204893ad66ed6bcfd9ceda8fde08dbb771d4bb7c2d6f23511f49ab3ca17cf9e81c569e493479542a0fcdce4f2ebdf46cdcb71fe951be19f68842f962128e4e43e3ced9c894ab62f6ca2353fe2e3b905d1a91fdbd89135785def2ca235794272621924397eb7e48f33f37cd521e1cdecae35e27bd653b1cde3e727f8871ad16f73af489e881bb91297f1d22fc25579527a6fc3d2687ed025d61bbeec9e9cf876598fefc8ae9ac3cd9a5cc4e73c7298c09589e0b594af3fbe9d7578833f3b97601f31ced5a1e857a976f794ef36cb4e01a2eaa0585fabefde5a9b783dc61a55bbe2fe65e791743b27c98e7a2019a30c9f2fb0c4ab264f1edd960793cdf45fcae9144f1259ee2fcfb2d4d2489ba463681c1e1e92588c8624924573256ca7ebe6cd2352b3f6170784919f52f388b29d4f7272388fafaa1fed422a350b2499e31509ec326ea4a31118c3251d5f2f2714b6ecba35a3c4f879ddcf2a596b7f19647bd0d97a7aff2852adfcfadac7cffc795fe55fe491f83b2b2e2ade0b0e5298a2b755ccba31ed5228bb8aac5cf972e57c1fc7c7904ca37519396078af9fefbaf730b4a0503131be65b7c3fc702a6615aa4b487c3b30b2aa733fd1c526ecc61203a5352e95f56da09ea67cb4f975d7fffd1c3f1dfdf73dfb7870395d3193f10d3c5bf3c2aa7738b0762e69c8e6598cf21651898f7e7bc1d56de0506a233c661ffe9376f07f9301808540e98077dd23fe671fa1f9d57b892772495e8a85fc27c92070ece2339e5e5eb583bf9bac8c1f92e5f3ff196cf8548ee76d3552ca5dca6efef389f441467e6d72a2e8b67f96e48e9da6b22b93aadccb77170d252e7e0f65d8834723a969bc8554d7290df2a407456791b1953be2e973e1f59fed12bede7087bdd66319ed64e5490b9e392c50ab888c39b9c1302213329e62ca77bef8b4ffa7ce8bc2f279c391c7d7cdb3d0676728731b0e1cf9efbd1798b5ef7361ebf99bd2fc77e971366a00c66b822c7c7c04e8e18031cee61850c2144068225c7df708c60a8e19c888d74403e1112137165cabf032b2c2274b616b8a007282841119c70b1748808427f3e8b884bc48d44508caf4cc58f2c2288b032157feeb4944b78d9c42ce3f21d2ac76751892afb711455d9472ffb08f6bbcca8b8ba941f56ff1baac8a81cc620f99bb499298731c8cb610c92de7531e0a28c1c79180942c342e24fbfec55b7f20042e6fa3ed0e772e863c0bb812b0e67106f87f9f4738210328410ad8c819ddc58e250266b2f41d339399b1b7c75656ade0fa31255f731c63f4595ac7d43c798747a49878e31b5dffea6634c06c4997943d7f4d03170e81a0a5c1d1810695ce0a66b7a3cfd120e3dcfbf37deee89c10de350eee1039eb7f9da7c9f753e057cb8c0fcf93dbae6c78c66c8f36924aa4fbfbac3abe390befd90be7cea63e61d107095ecec3492455c24c16ed24829fef1430bb92d25c561c5207e0727156ab55a47b0e6ff8c346254c5a884ab95e75b1bd53db174a4c95c7b0a88b96ee08748238db446eefe766d9d08629cc10de36b474b9536f4e44449ecad91cda7f9daef037f1936bbb5dd10b77f62a7eff2a9d00d0dfd76b7c1336864e4409241336376fb10824b93ddd44177e63036e9115fd30c2e9363947e83c7ecd8261bc3dd9115dd7e8f4e135791e533b2cb18b862c6d977cf460fb7b40a71c376ddd9b23c925e71b7cf46891e4fc55c3f1b257cec053ba043c40c99920f24571de0a16179afd33d11a70e7858c7340414b8c00521b06008285844581d226266e2ab76bd942892434f12fa12971f85889a90c37675bf7d684ff1084988a1091367d841132558dd8733b6c822c2c58f105c519c0105423882d561243d020f34c9610cb261c31df85841e2d0113310b1c40a269c01094b0749d823f04013af21e698a3b4dfbc9d24cb77975c8d701fe129f9edb21d0f90c8f2db7586dbcf75377d4e7a3664cfd6b88f4133c01109e534a374692ef6dcd5d8bd1e9d8dec63a41fbf1e9dc6d9dca8efdd572c89784aca9e589b20d29ad64629b1bfccd0f2773fa225573d039eeec916b71f91476ed8ae235c25e74bd40e08b44bb65a9974c9af87fece9a6e8c91d93459419469c8f1082840227331b3e2921a0c3588153ba1c25bd9799eab524ee1d61863fc29dcb08762adb2ce1eea250e762685eb1fdfc6ad96435f91231323a38fbdc49d740bb96ae2251dabe24a981c825d8951713a2886a218718e6cd984fe7e391467fab328b81324723a0a394182960327228855487ec10a39742121a158491d73ef781ac5fcc540eec7dc8f79202a3ffac8e2ae4ad4a1f2320f3e9017aff23a402032a4fba38ff4a3d7e1e22f46c55719fd7d9cd1df8f1827e655b00e8c8f799dfba3df617130ee8d795454f9fb382a7f5fbcca478c03ca3cf83b2c18df0e2b7a3830fec67ca8f82e50f1499f7a4ee6c50e4b86860fc0cbfc8b0f15bffe7c0efc54c01758b670524ffaf8f190c2a8f891f5e2493f3f1c0060547c00bc0b98136ce0240cae568b25f3a9948cccb7c34aa97cccab7c0c0d347c3bac00803f7af047608f503a9a357a204870520f7e64014961d4fcfb301ec4a88975c0f8fb30b08e0e12d40d8c674064c1c03a6a9109b2b0821504b55a3cce82f1415af74f12890ff4200949b002061e62f4315f9429952fcad40e2be6db61dd0fa56384e2a159311f59f7471504ae98cf635ed4b13a51373c7288b4c372f1edb06813cd8a00f86864aaff0514c06a52b9d20a20283cc6d27f9e1cdabcd7dec2249338bd2f07fb1aaafbf9dedbcfc8e8b50fa57dcc960987b9efbe1cbc9f6f3fd473fe7d72480e65ef7d465a738815a44bc18b8584fbd9a382c095bb973039e431f7a2940ffd069b17d02bea80430cf2951c85807c3cc618c39da19430be1739e804e3e81946e5903df7dc6718d58d806e1c1442751ff3f675df0e086c30e77088427dccdd87a7477df84667ee63de1ef5f5f05120c276d0d3ee6d1fcea4d0228e7dd1bd1bf1a977236af98e482eee88e4e29246efa8cdc55db0c77efbec091deba21e7dbf84492b5abe5f36913157399145ae7ae22afcfdb3e5aaeffba790fffe3964f64c229106ccf6f50e8f1209e5b76fe6d21796fe83a5bc8bd7623e3c65cdc5db181c53919b3da31c8540f2c62287640a66854b22d9e49331fcc927b335854c9e39e49b30df241267b297956f59f9d11759b3e60dcb22262cd8638e0527dcd085b2907ff685b3045a0ee5500fd98b6f52c19289a75826138a0b510a05108ae866c28502a80b5e85eb54dce6e61439de0f73a807415ccd9dad20abc8dd3131b8e7fdb4e0b262ac289e82ee0be874e4badcc75a7f241e4c06374805818b85643e12eded7421b96aeb421c4c93439a1735e1da0f7de8862d8784108219722887a684c9a1292e8ff9f143399431ca871eda8dce993734d4d9e7317722c5f5fad1ddb9ef07071bec48dd85a6d0742aeefce945ae1a05b18ae8df598b2b1e62aa5fd34a13dfc499a69998a6caed0948d024379c7470507e8cce4de71b77ed6dbec1216b5d0d870edf8c29ffec93a0e3d7c95207575de084c38dabac3db190a0729874ce39cdb084118e10e481581efd8db5c432bfec39b9d2418283f2a64f7920dd9bb00e06e27d0a8e32557f6efdd29730ca76b6e2e0d69391ed3a588af9d2b3f895b84af98b2f0974957dd04b6effe21e27d217929ebbd696ac2dd9d3e94bcf9d3ed0df410fbff4fe316ea3b4f2b1f84ea73c318ffb238e7a398c4aef43f7299ff7f30b4f56ae8020c14979d3034179959f296ffaf91105c5f4290f4405eb48790f033191524a5fd879c46512ee71ca236c84e7bd07dc8d434d7c59a61b5c10c9ad1fbec9c1fe1867ee74705a9cd357e4383be936d3ccf02a92538ac00397524a49a594524a492595734e30663e67e93b8f49e7941dd2f707df412929069f5ad959d2efb2ccb620a7ccb27c574204630ea5eac60b8a08c6dc38ab727e80cbdef288fb56892208c9f6e9db6d14e2640f7764b2c788439cecd542713bfb99b7008b63b4f19b1e763d64864299cc7ef4ce6f1ce1f076383c7d94c9f1632a7ef41e90cd2eca14b6fe4d0ac50d67805316417b6e7edbfc8e5f23876da426a77c80cd667d9b4a71a4520a8173c0f5dc46342943036eff9cee2e458c307218710f077bb8ca074d36527f277601e7e7dbf915532ca48819167d9e14d6fc1eae3265ff1e992687262134e786b1894efd934cedb022188afca0053ff881b55aac9390229c953d8f0d3c36b07490e0ccd7d921877490e0644fb10e0e13eb04cd0fe3500c03079830a2052a68508512c09d122819020b586084211d7c6146f6d6ac41086030c40b86c01252c40c6b3e4f0aab7ef474b4b8e20ad6f41eae8291fdeb5ce5f832c2c4dba185989867b2e6532ca4881aacf93c93455139b629b27c1f3459e21c523612c6b7f16ee52f762c53018781db3f1d8c7fb91bfdb273b09eae102453a650373a572148da1fc70eae8ca9fd018ea809931a30a1194b92c80802a241c206323fed02fb8898f619f2c4a55bb193132b4c444c94f43402c7e5e0b25cf9383a9fb81813da68a31092c618e8cc5391a8ae2bbf5ab9b23fb69fab2f1a99c92c9338ac9526d757572486a848787de1faaa400ebaf6ed851b56a029861bd6b0eb0ba8027505aaaf1fb9721f1f5adf355c815e2db8a1f51c02c932fb4f576bd65a6b059a3f27fb173cd1bce5dcca1bfa111bb8fbb0e0a67254420845b973e8f351d406193912579d2b2a2104a2ec5508851dc9218df7730329725883becde68fab423f921d15270f5cd5d93c7faadb9ff29bd9d2a016b9bdd38dc3134b96282184a11c9508c291b8bd7c5765767bfcdbf7a65d077dce251ca9ba38e83ad9beec1ed72237ec62cdbaae45aef66f3dd2b7f7def624f9236ef4db08879d3d6c1ddcde66def6d2d6e73efbfdf09c750e5a1d626ef927896f47f976d4560a50b84008142e274100929f6343eed0c499a68933f4e5673d1d3a4f6c25b531cf187f414a0e9eb8122988c9c08a1c7fc6141b7d65eafe87cdde873337a9c35b73ef8732f767cf8d649d3efa3c8fb25269444ba54779d273b694475f0977cc24aec33e7edc18a19368e6965ceebbe3b6ed8bb9404c96d5181612390ad23b2e2b18b8e8ab8da5c40b6239bca1297e94a1840b621c497565b483eee5789149aa3be372f3092642444de6cbf99287fcf9f443afcba19c39a41c561cb6b700f94074f61dda0dd44ddcf832ecfe7e4a298e39a46cb72bdcf8f1955139a40cebffe83c351cce8c43dbdf8c71c677505406a24cb98ffd5c8cedb5ee7c323456fa1edfbb27cee92c1f88ce12f320c978e7d0ef5846223165f2dc9e67c8932339fbfac4276b5f9ff0e4acb31f768eae05c82c47cdfe7e21cd529399cc642665c755fb6839963a6c9fd947f2fcc9d36bcd4c19a5f535ad14b598eadcbd835a89130dc1a636dfe7c76ac48d9e7974afe3ba0fdda788ab6657ddedcfd05d236f01feb6dadae3aace6e5597a4baddc81b993a2f877f66323d57ebf7a3b325793b7c39c38e446ca294eee7caf9587bef749f2011dc95975f4370e507451ad9cf7a51eaaf7c1504977e67f9fef224ede3e064f15cafcc9e594f94d2ad59663bd46ac7737b7afc3399be535036cf460aaee1a2d4cfbf791c9c3c431c9c3dddad259f19cf1057f5b82ada40c135dc9b659911ee7964ffa3ebc7c37e315b6a375acabeb05dd0471c9c47e449b11152115f9170f4948fcf938fcf1f79b3b3f395b2388c49f26c6ce3cc7c42e3b56dadf6335a71866bbb5067f4658811b4926498dc23681d9187829e00e5ed2b199c641ab98d2003100f47ea975fb7afefd9d89edbb62abbba55afebeae6390ffa32ae0a7f74b62fd37dd85de9f671db1793eb17bfbfed3dafcb5b487aed39d26fef927f9cf2e87fcccc7d51b64f88b27dab795f7ff4c538337aeee3bcd26f5ffcfa79f7bbcf760ef66b8ff21deee42f7d21ed48d8071033c738a37dc459e7fce07d587ffb5e40fded3d6f7bfbda6f3cfa6b98a3bfe24aedc7ffd12d23a37d61fd48c3c7f631ce7861f7de53cf86d779ddc748e3c7ccdb8757f464ddbaefc5e4ee8bef7d1c0ebb1c3999ad7ef3a839ea67df5e0e7402d1b9e324f5e887f322640cecb4b2ff9cb5ba67a366b279d01bf4fd777268933dce44540e1bb2bf0dfe94f615797e611021f2f45ce78c5f4edf700f2d0f47dd708cca61438e6f43be22ba47a21f1cc9a4f932ec119f481c17305fe29c30ec119f80d50977c6f824f74f1c7645c460834c438e4c88a195b9faa14bccc33d1b54ce0f27e631dfdfc3f1a3ed91fbc3f38dff715d65bb73f8fbc48e1bf37828d095164a29ad95c6b8d02efa2a53bd7c84f997175cc38579816918fc8edae1f42ecf825f7076397d8c0b69a5e5f494d2a72e255489a5547a71a128ca42e93fcacbd8e929cbbf0b8579147d0b03f319ccb3c0c0d03fc1508a726241bdbc5013eae561545e5e5e9ee5f4527a7998f0fbfa2cbe90c5f773a7d3f7c7a57cdff72f56be8ff4bd309d4ede09872f5f61525e3a0ee6615e300f9693cbd39747345193587ff2c5273ffa995c5c5cfe4f2e2ed7e5555a74ad97a29e9e9eb23cfd76e2aa164f619e7ed3e74cdf87b10b17979847bd8b8bcbe9635cb0b860203a3f0efbebbbbc0be651fffe8779b0fc8fce27ef484aa1a3962ed444e99f3e9616309fb73e17225554e8d72ac226f2d39f4e1f76f9f4d74f2a7f3a9d3e3a389f3b7df604f7f4f3a387c3baa0509ea57fe54fa7530e2adfb57c377c38a0d4138b4a8a6783859e287daea394524a2965c1e26d64f8295fd8a17c3eb2bbbd873b6ec354abd4569ad5d309b8181363fc4ae987b607cdc9c1ada3277178937764fa8dd33d68b2a63dfdb8865ded2fd0454aa96b7fb5ef64525d1bd288fdbcc6371e831b7e96408ec1b1936d9c7e3bb93fc6553ee7a474e650264f1957d5a74dbf1c64a6cfd52f46507e94d1ee52ca7070d23838bf76e086f7ba2ac32e59176968240d4c7265e0624c2885727f146221b151cc20965de418059223329da1c59c751bfe393226cc4094bd7baf111d8c4fa290cc3d2172c398ec446e38738ff864462cfbe060fb38682376e10a55e4b65747c7c6ee208c334b2607b90f6df71e85ae304488e849fedcbd017cccc093bbf7b8840f90a824b85cac23b85504d71fe5fb5d89afeef7b7c3fadd3f1a7143f9f2ce9deb3823f76dbcf6a07c287d8ab82a6614441a453ac3dd87d2d5715cd7b5cb55edbd24c78bacba285fe323a7afc89c0f6e97b74310cff4b9761cc6f8d0befbecfbd139e33a6f872f77582211eb917cd96e44fac81509bbb5f77a5050509ce9af22b8a6af21b861248add778bcc9db898e9ab20b8de770ee54bf6cb245b2ff97ac8845b8907451adef98fa4bf4df980b039479ea195b5ef3494fbb508b5cf47e7574679ae9bb861fb68de2e577dfb384829c5df29a311d73bde7d77df3e455e76da57aa436ed83e2e44ee974546dfdaf7b74bd3702833109d3b8cca21afb8227746eef3f0fe47731f0fffeeb92c877f9743ca0bf0ef723a7b1d45ee1e2275afc455dd7b7f8add4be2dec67d705513f90e8ab5e4e2a03b71d231b4e7ba4bf95ac8dee8e0200c18dafbd041ad24d2f0912b0f6ae9e3030b1cde13cbf62adf134ae403d430f322a6fc3d28c884c3ebbef2b9e370e7a7db010157d50fdcb003f19565526454646464566464522f2323f32f3c1b32372480956d1060c3016ad4d030c08c95aa06190520c00068620840e33c52294565a559b4d72b05e59905e5c5ebbc56abd4a2c5e7f9e57ea55b22b9f846312a26150f068ccf734c37c37262e1021080cff3cc06beb8bc683478066de602bba8a91794d229610000464e7d9eb9982ec78b3c1da47276e0e7d93f23f869f8a68333987bc994b5291f992af2923eeec3b98e80d199cf9f862e028bbe8b5ebc7c19003c07a333e801f81a856b04000fe37dcc4c1ffc669e2e5f7130d811d80f0c28a7acb8d76b0a79cd212f2259aafc8a73b9602e22576c89ab5678e02bae954449962cbedaaccf75e5501ec912f5f2bd89afdcc60d1ffa9304c8772257bdac9cf5a10b853e946d92f811be9208f8d06d906df8d07970800f1d09577d2f658d0f9da786860b26be922f03c8191f76932c9dc4bcfc06f29594f172b6ba48967d44017ee62528800f9b27c687dda2f93016ada62b934ce292f99229fac2dff352cb295d45c38a4af930e62bfb4bae36978dd70daf04c0e44ab32c1cda9b71786d7078a29ab5160138b4d7061cde03605b0387f6d6e0f0d2b006c0a1bd33707857af4c5fc2e42a83b5e42a73c9553da97078ba35601918762a000e4f970038bc0368591a1cda1b03875700d895e9cf975c55d784c91585d1d3e9def93a85a75b9a30eb6ab95a30180703404ad7ea5a42ba56ce5eafd72bd37fa1a259cd730ae7e25c9c8b7365fa312bdcc6711ce782c5eb583ecf2b9f676e83c160b04c1fa34823975c6dafd7e67a6daed7e67abd5e2fa55bf28cfa3c6fdaa66ddab66ddbb74841d15c72a5699aa6699aa6695a8b4fc5f47d9e5b7c9e2d4cae34cd6a56b39aa669302e565858975c596badb5d65a6b5f62584e319f67179fe70c2657d66636b399b5d6bacca05a50d9cbf5ca5cafccf57abdc01797073fcf339fe70a93abac2553f4adbdb705cb5a592b6b65ad4cbfe5450b98165f5f2fd7abba5ed5f57abd5e993e8b7fffbd8d3b85c9556dc160b0daaaaddaaa34b858e177f1d45aeaa22fd7ebdad3a5bfe2dde82cf34d29dcf9a1fb703057bd78fa9c15aef28fe16099befb486b7d5e78a6e1f31c00faa92f3ac8c1f02fd290effe5cd6537a464720003e1af345075d7cd141fc454f7d5f74f03f982f7aea85be0b6df9a2a7584e94c517518464faa54b1a15c9f48823f435243e25993e17804ed2afe2caae2747173b2d82f48e6c0104512b57239d7d695fda97d97bf69ebd67cf6d1de75fe842ac71f9dd92b10abba1c7dc0bb1aef12a8790ebd7285cf95aa6793bd81cf2adf42f442f43ae72032fb93e8ecedd6e27514f7d6be5bd2a2a79684a285c5a7d6a6cd6d850fdb0fa6499f6762bca9b1663645a967d76e3b80cc7571683583aaeac8c59f7fed50fdcd063de85d8b9be24e22a7faed65aab5d92439b65ccfd73270ed6af4fb81efeecbb25b9da2de9c453d5a397611973b0fe7bcc9dd8aff5b9cde6fc9069d631e551d6acd5232f3c39f913214824eeee10ccf1e7ec2ccb32d9dd3dc31afd4b5c49e3aacb754fdb1fc6980ed23b2de9129c1024373ae774006411423049b80450c3124794d02eba311ec02e0183221929f8401359c91013bedd2667d27eeba634d2e7f075f0647afa9dfa7457a76b723f457c6d12ffae29abd32514e874d3e93e8dd146c618e59b6ab8fdb423b64ddcfef8435c8cd1b8e73ec619a7d3bdb43fc3340e4a29e50f3a83c6c10f69f2bbbb7f0b69e767f8923e195fc43266349e4143033a48235731d25c17e9feb2da808b315c1f20d69c4204c4922945156b5c62c49aef18f4c31639fe4bacb10688aafbf109d02ad2c74496ee744b610072b875311d83b288351d4a93628da963d08f27978fe9934ba6d466d5b3ea9d554719952ea9bfc5145ab48091020ccc4b152f2f2e301717541450a81628b4b4b03c8185e5c4e4745a71c2ca0a0b2a58b05069828a8a69c8644a99222505450a149412134aa5bbe45ed21248a4911246232f0acfeb84ba8e8382e3b6246c9bf684a65925d6664e64b9dffb3df7f7bf77ddefed5ebb06ecba46e6760d8da96b64dc4cbf6b66c8744d0d9aae691f19f449601ec964ea435f3232fd195dd33c9e6b744d0fa13d365dd344e8f3542764fa234ca312327d4adfd2e844a64fe313997ed62a8820fdeec31141ba3121d3d79290e98d3843a46b6ee8182a884c7c2a0e631332557d8b29b468d102460a3030302f55bcbcbcb8c05c5c5c505140a1502d506869696179020b0bcb89c9e9745a71c2caca0a0b2a58b060a1d204151515d390c9644a9922252505450a14149412134aa5d25d72ef252d8144228d94301a8dbc283ccfeb84baaee3a0e0386e4bc2b66dda139aa65925d6dacc892ccb6a13b556ca04cd9d9d66fa71ce99e9e38834a49432d3bf1169b8bb67fa36228dbec1c6a2accd0f3abe1afde8407f8ed0bf81d2c824abd16bfff69d917f531002656c6eb0014f278b4323e1da4c2537cf97d65e163932c1c49122d02238d5f5d18d367c0c8d0c9abf77c698458b333aa7a4795526eee7f9b2b9585801275d3af9de367a19e14c8e4f8058730510698835a66b3ab9f80ae561e4203a86d4000022a7ba3b20d083833c4441e8c8ff6128047bec80004ed735356ed7d898bae6862034106928a0cbd2516a74cd8f8e21ff871bbac60705e0203f898d8a837050ca16fa61442681939d08ca1108b2fc2e22cbffc10359beec0df07840a41124cec897bf433e11593e4b1ebdfc205cd5231cfad30ffdddc7cc38aedab0f6cd08deb8aa2d95321ca49846c65535e886b128cb20e42ac61863518c45ae20be63a7b6039f33ec97b35bc678d722383ab56a3fd3f04bef7b70a7895a6965d883a6cf30e79cf3946575bdb23fd0cf9176f9744ff374abe807a21e867098612b28532de949d22b531497aee06aaeb5aac2f973ce206e46589e7115ce38e78713c728bb8570d1555e239355d62fda2cebf2a43486767e3f7cce482bea4667191920f68ffe0e86377e3b66652be0624c11ae0cb24277e8047b223046936daa2892a998c3192380596208a25a052bae2b0944b69fd648bf7be3d4f5ccc51897765eb551bf1e5d8e377adde286728520c9e6db6fdaafd86edb677f7bdf70a56fe5675fb4b2855cafaa3a69cf2e4b3c3d8084274143725402094d647254020944c81c693543a6fac6d529ee884a441ad10859350a0960872060434d0fab1c9f26fe4d5cc5d045769ec81255b7f41e9e544c29353da4636435dd636b9a487d079a71a3868d8341b0c03a1d43a5d53180da849b481171a63fa58196e0b57433abd32a42487cd27291c3069a73ce39e79c73ce39e79c73ce39e79c73ce397da840b85f86a7bda75303b57f3b04baa687f4d035dd4301c731c66813c499c64bc8fda4af8b10c1fed1f7b9c1b097c8fd5d3fd143ba899eae39423641a4d14478243a46bf92dc3f95e869e184dc9f75ede168d102860a18989726bcbcb80cb9b8a0a640a15aa468696161020bcb69c9e9b4b2849515164a60c142250a15159390c99402454a0a4a1250504a4f944a57c9bd242748a45113a391c784e775415dc72181e3b625b64d5342d36c126bb32364594da2d6dc7146529a3bcec8398b10694829891069b8f710228d8e33f2fb33ef0690ab9088341cff0024fbd5404e5c540edb5ba00579fbe8e5409142fdc10d1ba881e44ac5c52fecb4ef22617f54fb220b2807b7624ab570fd25f7dde000bbf6edbbe30b743848cf869c59fba8598c921fb3bfb46028c18c1abe6a246a386e202ac5ad3698eedd0d8498ea378265c27603c599ee6e20da400de4e3237d7c24008e70ff3bdd13e0a28c9e5123ca5027b7a9a79cd4b3d1a33f9d24b94714a271066c5cbdce460f1a1b8d332fc6196bc2d156db68b8ce06c91b79366468489e8d4aef94f7de7bbdef8da691ddb26dab1b9ddb2637dfb6deb6b8b5c882f595fc18339ac98e337a3bcc6ca4624b92ef2f439d9104e2d9206f23aba510b81893b9b867d3a52995d83b535c81a40fa5f7f33bd6906cece2aacacf4ea05ccd00852099dbe723e787cda3fcf5f8c141cf1bf6414ad17186e3e66fd3a9ec3c2375fb78c49930cef8fbd03138dc6307de0f3f78c419ff0ac418fea303c4d502e20cb9c261875c405c45204620faeff06e74f60107df7cefa379f40161b337bfe3319ffb0ec7e97936365cc39ddbcc81a7477d4aadb56847dc86a7a4d9e2d0c5551788393da5b5527c81983cf174d037cd0aaebb70e37b56a9ab3a82ed720ec131953ebb8eaa9050abe20a5dd032ce8e1b1ce0b48d34fa6607176efc300ad533dcd04a39dd83ea4aa7ed639486d2300e4fb5e8d5cecfa2dc877284e5fecc8ae9eea37d340f7115acd8a854cd35954d2d959a190800000203140000301810888442915840a2cac2660f14000b91b44e80581a87418e42c82042880108c00c0000000000008100d4f86809cdb9c19dc18b7f741d5c040042f2f363a5c89e3e2b9582dfc74a13bb4f9526661f9542c1eb532589d5e74a13b3cf4aade0f5a992c4ea73a589d5506fe1a2d18d290e20efbcae6f46af4321fbd250c84c439e728c716fd7bfcde323f29dd7fde3a2c3921e3edd8f8642665943defdfeb25954c41c377e5ed7ee2c48b5397e858a647cec5fb07b212f7a7e5ef70e1750569b75ff73df829c0a73d0f3795d5ab760586ddebd1ffa0be82dc48ede9fd7b5cf82539ba94acb22bffda9d7aca97b1f7bcd2212ec6e7c7a5ddb2c206926be75375ae8fe3ee83e6c331139bd2bc87bb4e43d900af87a462e7dc0d7019f6b81f75a502f3590e28fe0a278a71f8a5adbb2e140681e809e2134cb113678d52ed0e97f935f48e9b853fc6967ebd5f6de541ae418f4021d3036534c4b552b4afebf90e3c74c708fd0cbab9766c0f44e68a6f3af153ed00976f2a5f3fab786ec0f3428635b07f88617e87122878bf35cd37fd29f909c1451e995dda8f18304662aae89aaf95b5e9c527dfe5d3e8dd16b68c083bd4ef7661f8f74dcda19438660801b29c19e97656b050c93071aa7629e7cd14a6c0e3e4a0e977288a1c66f9f65415b50382ececb3641cbda2dfeaca6c38352e16b036edc3bb7db883228b3881c9e1eeb4ad131b2f42476cff0be1d31999331a313407b38b58da66a3a4b3d8b8dee70cdccbc0737b76b812f4fc4597994e58b4b3ee7672a82f9fb5520a44e3cf5bc7983f42bc5ebd1240f0f54b4f3c2f8a259ae86f74f84032d521e9b0551e4fa0de9586cbd7376e783e4c7a4411cbbee1dfbaddd5e699c511ab74ccc4142e1af2cf51a1f822bd395816b4dd63f69c81b5cf48dd10f42e794ef5f93bcfb04333f5fafc6bd7c008331e43590556fce2ed3987181266a34549eb5fcc88a6e9e4b531421828243395ab53f87bff0411978a0ab3f158ff6f13d0596da04b04b8d0850feda3f804377fac1d73208f7aab3d98675f220b004078f47e17623238e03e860960009881f0a774cd39900ef841c9922f311592eed74cd61dea6b8495e0fe15d6bb4bb56a147067b1eda77c88280d2f47eb420fccaf3cfaa47d6c81e77d32747d1dee1df3f6fffcc9cafb566965b28b591b0344b4b7ea71804dfb56c2d72ef89eb76ff780c55ee664aca62c69e0a0a1370c9b907fee25727e75d554907b58b49750be3d2fd009ea77efae2e59f7a1a00f2f5fc43376585860073747371fff94eed76ec6d2b2c302011b8592fb13600235d6bbee6a77eadaf98c61e6f31a5d6b91539540abc084184ac952a00aad6aae97e3f103918f3ee2de0d4825866a7aec4013d19e4f0b8d0a27c604ee07766450fa516afe210814df00f5962dab0f55233f3b55968423f1fba20e424473a79b811b372b89b9407747dde6a2f987ee22acb3c76addc614d49c8f22adc704697d239608e55afd2cb8b2b3c606f1259bd05d7014060994e4039eabcd236deaddca17a69c8722ad890860cea3c22a79e37d5e3ad951daa2b874cae02db18d8435b27e11cf75eeb3bef57fed0fd74643ba780a3807a26f4c3481278eb595360ac3370868be33f2bd8019758d306c3a9c4f31d11b4154fcd0a7e9d2fb39b7313ded106f8d8aea6fbf940ef784cbbbf203671a4931c5fcd2e6803e1fb14ec4c2d7f5ad921afe3bd10223076c1d9b94179edbf1918735b11f0bb16106028fa19076a526d7554d924d76152dcba34b591eabae422c0cab3dd083e367badad59fbabce4e83f2f40dd2710f3e6144ca706d5cfdd5ae99bab212ae9d7aab614e0c0eeabca8921aee94880ee9c2785cd5fc27dd5172553dbf871dfdaf0f7cdf65440c3b7ab22b304d7ae9299024811a932f493e7fecfcb18955eed8e2f5aab5636ccdd6b944a9ef2c32dc69dce64986a0760e8cb0a3f35a3469e535b1c60b9ccc13f6352201987c549a0f24e60b2193ecb5cb30a04783fda6ce539fc04b2ba62aaaf0c31e35a468b34f8b987e2af3f71a7bee50e127e188c61044e5478ba2c20ce8a1e8699c1f2a5cfcd6c2a6571138069e401f7ccb2ef25f2e4c8ffa204605ec1afa0024e95a8b949cc0569072346d1b792f99c2a071b9efc3fe9012d9df1a355b7f2f5f10762355c2e7f31ab3ab9aaa86e03e48898693be5ec619600e0016baafa97ee239685db068efebc6a1273614dbde2605af343acf0e0b3825f7df622f54e561aa459222f39aae5b0c04ee3320a55484d2e79f9fc1c3b67862c0eef998fb1c2f5711f22297c27a1b127af7eab6bf2af5d5624709aa27a9a1cb8d6968e0cda160c6e174626b2329ae17742447b5166154eb5523d48dafa8ff6aee8802c90107a3c9c460aa20d58915e6b1a170f68a9770cb55e20139024f57cf9f61447a5d3e4cd2af4ee7be897206f78817e08b4a64a88ec346be4d0f2b4c32b5f4b8b08423c56428c85fdb1589dc7959bbe82b45558a62eb87fb4589cb673c05a4bcb11b8fb2e2628d189db44087363bdc2458037fafa11b2742d8dfa85fa77741bd5e2c0d028df146c176cec657faef9e889651cccb04d7d0bf0beff3475267a1918c7975585154290e84c6bc9255f2e2448aa844dbe4d829b0e8c6018b776ae1483dc8576e43f7cb469e6eeee85ead558b43a6f5ce3d04df581ae01225c53d9acb0d2c7992d528a12cc2fab17de3054ae662274d961e6dfaacd2c0e5e3ed7f77aeccf87ae297a1c5493a43225319ac0d00adfe25d815c687ea43830825a6c2b5bf0a84d77addd257e5ae543a7e4d480b6b951ac02d49d4712b36dd6d9fdf22d09763a7e1b9c2f8effeca1447a2c5737cb1fdc86eb06399223191b48152d061baaa1cc75c0d9b97af811f686771de1802b83ace1c6b542be9362b171cc5ed205b4130b442fd5d8eec9421bfcaa44195ca61d1b022f1fe1d00ded2af89c88a974d44d15247a0b5f7a669bbc5afc4b118bbe88184a82e58fa300c647daf465d02f01747d95b955f389f717dcb3537d8ece9115057104b34510cec1b9a7970677e8c317aa796dd1c6712aa919fc15f26c8cb4750e7178aa34816abf18d37a5e3778aac37add9667f71f64f5d2f31874cac1f9d6b8fdf625b53da4111ffa2c327130fa94b1fa11385bfc3d70b0fd91931748140fcad576a8ed4fba5edf7bf3268a98b86890b5023bcc3dfd29144ee67b603e9817e8a68fa2317d67421acff86b23892bf4f027f6828565256c8b4fd3aa52df42dd90f416fe860329de4426bf51001fe2ce43d65897aec2b9937d642d4b982aafc611e9599621e25efce89b078f4cf900ab9d56d3b1086b4f34722d7d0142ed31a55cb7ef27ac241319cc2b65abe2fd636fceb67825d2d53dcb3c8abfd4f11d1ca486e9b564740687cb8148d20e4c88c36e22777f8842f8037a8a47f349f369c1e41b70c39f8563aa28a80de08bd6c5d764016b37e9eae835450c6d52e07fb1a8dee2a6478f9f02f0fa2c48b63bcbe3d104641f35b992932f321ae1897f720608b9763bb2de0c4c846beef993f1f29dbb3fd62298b9248ee39111b0dc3a4f514978973cbcbd6246a84a4d2d00ec2968f40fe838991f681c434feafd938fa0421abb7108dae05065db771e1618af3ebcd294242183cce02f496cfe64ec7f765bee03dceeb42989de0d5cd54c10091b865fe00468df56f48a386b7c35d110a410f4ff96a5a7ee4c2caf0105b36b11daceedaa84e8d43a1321a1d1b5af2c68403b463eec6b561609c60e92300ce6140d83cefe13b328ea023e520cd892f73c4013617d798ad5247450eb8d9a58e4428afbc76734607a0aaa59686e56f4f20b005d92a5d48891efcbda41999bcad5f2d897e79b21790dc7e5198176fd915f78c657d2e4a9a8134ef36b9283e2893474749767c9b15d8d2194ad76a4b0271278098f97b3a9832a54c2ea6237e78ef3813eb090abef1663cfeeb81834ab0ff9cfeab1f4be4e63fc0bb37b2b67c07257777a671e4ab1d22aa317b68e7809acc1e5084c72540c62c7a9f7c8dd2430ea3fe3e6e62f26fd48b8f1c8e8410b351fbd4e6e0ed4258efe8ea15ad4a4606932ae232200df9455ea637b94d132a8f0f0b6e1d48efc62f939ed2dfbe795d2444ee37c7612dd6e1de47cf490b1c1930995d6a443cfa2f4db58b6da82acf3f1d4cfc66de7ff2a7bb71ecf7592e729b7deb7ffdb9f94027fbc84a8d3986b68365b8f758eeab3c2e3221d6fbaddf3b4dd7f57dd7f74da7f57abff57ba7e9babeeffabee9b45eefb77eef345dd7f75ddf379dd6ebfdd6ef9da6ebfabeebfba6d37abddffabdd3745ddf777ddf745af5f21f8319c16b056fbfb6f182d7c6b0998a1d88047fcbadd5688a3fc2b3c47ece4194760adc03d746ce14a72f140cde192cf9ee7a3354635fbd6075fbfba035e21143f272ddeb5d2f3314ebef867826204a6c7ad90c63bb23cec9ccdeaa4740e083451f2525cb19cfdf316732fef708c83bb374beed7f9f40cdb9fa9fdb27ca378e74251dc67f9b82cbb207ecf230ec3fe4da1eb5d7d651c00e96fe14997fdc8981efbfc9db3a282e7b5aa77e82ab2d43909f6b3e6cfda2a7d6e180f20fd0f26f892f1d9fc2b496660a0da5998a2cde6c8f87fc455bd0e632eab5c2265fb6e8a3a6dc3501ce09750627655f230c5d15c6b1105fefe060ee40db779989463402cc167c16911f82d83b31289fe5782805c530248e42b8844a22b49485902810069070082102521e01d2200c888024050961001540610414a7282c83a50c424e83401e4a4350388521112ea510311d6122241a8082140c448890848b42141003620091460128400511280ac3480acb6248168fb86ad396e2b4eaf7efa353df31392b586100a10e25982b119fdefa9b38fe610f0cef747484d365a57064c9c2cff5c1022ae024503214b32560cb9c7fbd8c145e77f159663128e67c8a436b2600080416a89e1402b746b3620e46be228c26c740819549fc3796e124139b526144fffd89c81ee885044d321eed526f95c871991df9630cdac5f34f5cc3d47187f153f364653f72e9dbdcbcdda6d3f5f2de5d3f658fa0a1f616298fc95bfe7c535fe90d12e9f80158003a0aaf3a0f55a805affbcf92a1774ecf955536fcaaecea63199c1903a33fea34d0b1c50389940df15218d270b576e40baeb2b7faada71c09a9dfcd6fb91199372a3dddb9e52cc24bfaedeaf5b90f21289f3303d79c316c85aa9b6e6d131026e1f72ab045b891ae47c1defc059b4d9e49164c8b0a844ff091c2933283f576ef95a5f91f13d21074863b3ee0c6d6829f84134be75781026431b56ece598bf0924e5064448b08fd0aed4e65e46440ff7a257071d6bf5780527c5c7d4f493b32d8ba9d27fe1892d5bbcfde5ca41cbc28ab8b6c86d350434eeed150bc2b13b45dea37376dfb7a21402537c1e0ab7b0caef09f86811dbd15cb12501490edcb8bffafd3b3f4ab5b221c7ff61e596d688a0990255e329fda55ff0ecf6f9538f1fe6b2e3f428ab4de4ad97a3a08da6ba2260a5c65ecf09fc61733dcf3dfdc07c1afd187116a38e2d1719eee6a2db0229123d6449c5174d70decbf2e597d3a61d3f9e00e14fbfe6bdb69e0fa8f353024811e3677a7e1b32d6d9ab617eac24d3fedda471082d843bb4f74f64aab30840fa4f2e43f35c50d95cc42dd49e4e11cb2a3fa9b3c98ec7477fdc12a7391f430715ad191a131e9ab16ceadf51558efd36039ebdf246e04022aaed54c9af3dd13670d18d7cd5c3e9a9370db65e817f257dbc0575867bd454c62fd592aaa0e496988b1b8c38021617a5abf488302c76f235cd2d4339bad3a1e6e2c8786e47045987251a21675ff12b7f18ac32f3cf92b6f7e1da36777822946403d7a616d5c0d912e1d38d7009ca3c07d9e47683aca1b857ce6a180c4e110e250b5b2438158830fd97bc855471ff850582c0af94648a110a6e7f554e82454b0dc9b0bd9a23468f68cc3d5a2a6d95b22dd4f9674a8896ca005cc5e0cbb3856a83ecc91febc72d582349b49ec8cba7be5a83451721891260d69f9684d19d5f68206c74da7171ac488cb8d785be2c60ed3afb739292e5284ae8149fba743b240d535bf631be42086430fd190254e30dcfa67b43b077e800d001ecafe55b7c1811f217b5b16bd79c87db3e79d4484df877a6e486706465cea107ec4bd2be885c0da8eb2bccf803f2204f57a6ca28743864f3d58d15548dab0d0180873e01b6027d5cc705be686c275d2b7f4f39c722be1a943374c976ba133ee69687f27c4391d5216349f47e508fcd01f4f219dcd27096377a69e50845d5d999d926f0a3815912328d97fcd08e328dbce34a489428459910656b4d8203017c85cb5333d4990f31deff7746e3f1a8d17b70b15f96443814ae1763451384449bca276b8a11e251327af8c361dde09074a1d36a1b13b5db43ab3efedfddc31eb3d0ac5656197f61c3f5ebb9b91a7130e3556022bc4dc0c29041b358b1d2eaa6be4feedadeeaababbfb8c3b7f872bebd6964748a2f371b2d2da4d085aae6accc012ca34727ac8c37fa08851fd838be14433dd88e7b70dda95bdbac5906283ed647eaf07276f6c99201f511dd26d1fa12e39b8e5fabe21dc021562044fce7bf03c22d2265559c2c9382b43a4a1a0c0d2961ee33186751b78dd1e32230111741bdb78a4f877eb65e6aa99dbfcf12cb69153af1626157052ad1cf8be137ad086949153807e689fc67695cc12b1caa031ab8c2484c15b7cad422f01da93c96bef07e34358878aea5724d42f6947cd0c67a97fbf163fa593e5f8f8397e566c2e4d1782e632a2c367da69b99d973822a1740e988e631661e2f39c6d2ed33c48cb9221c902d8d28d860d7db230539fbc0ba9449b5defc35a2fc2120377e6a665228f90862ccb4fad14aacb34ee5d69a95d6d0bb7093f1e8d5f0fd463d661c606240e6289b3ab5cd132d60111441fe98c5e8533c9d7ef5b4642a7d8db7fdd0fa059efc0cfc449c2a61ae3bbb10507fd0d884bbdf8735b60cc03b56e8217e173a0a235ed0e5135d71a071efa19586b90d19235d4c731b1c7625edb137b4a71ad2b43276b939d6c1135e1a260f622da357c8463d89aa43a6a0c72354a5de5b62559c40f2d6e074627011ade74c514654684eceeaa037c28d941df83a845f311e1304ef3bd4d5d42d44379f709e52ad814845dc9168915f1e6bae3316b69c028d7da126d14635a7999a079b998968f27ba098dabcb7d22f6c5954c04ffbf8191c8d604ad0f072b2231f6a2d61961f85a8ddcf3429d98ebe26f6b3427827eb07a78657e794c8cc71ba9bbd7100d3745aebf39a39a8b2cb8004992a6d73c80ceaf0f88866eb4a773132891ccf7d436584d4e628b640a86ab8886bc1c56508de37daf45a5850da693a522308b20f0cab04e188cbdfc0f2397d7eac38cc36de62cea3c7a663f0942059d28928b4908e6d8534b521d51004c0981072921bc2480991c25048eabf8b581128240b5d38b2d2dc9ba72264b5bed2b4758070d83aadd19391057e6f2a07533aa1293a68d06567a0dede05a4dadb5747bcae745ad76fc27dd904d5f29d10e09bbdfd94bad73e7fb13828b9229494a4a6d5587e97d2d47dcb83db8f365e3b086cd173b449550a117363f8e40a098f727faa2171dd18b9ee88b5ef4442ffaa2131dd1898ee88a4ef445277aa2133dd18bbee8894e74fdb4b4136b3968fa2304d4682814cf353856b4ae8dd7fb7f069ffda4963438a153d9a8e679ef68433a8e2f09e140ae59f5459e679b378f78ec70e725bbd33c92a3db82e54ba2898339bc2eb17e8648ce19e4199ebe3bc185a11373377b2d98ff3e4b0aeb388e4874cecb78ed13f6215a9fc3f10cfbfcfd1b0ec7a29f01c3b7579877659b97fdca90909c548b855eba5a02ae6d39dfb8923d8e45dd7dfcc6ab27f0dc96ccec968a912c30094c48b82292718f49bfef4bc9756f33f202960ebda0a66d367a90d7c733d2af2193a7984ccbcf6a458654a258080e216c240b713008e18269168a43188bc4c35c1c46b8008d87a230ce2231181f07516e406350388cb2c90cc6e1609413d2191482e16c2287733880e286540e8d60888dcca13c1ea038109d83a440597c42501aec7ca74b221aa0c3cf91593fce5a53b50fd50901eef6e2599b6d6517c66a2703b6ef411872ac50daf935110e1e43e16eca1f09687822520571c2cd5045a814a0dad602183082e38c81e4b493a1daff2e6b41af05d064a5463dc3b823554efee4f3b660ba73b7e9e0b39e578e65d0be2d1192d9b7cf9757d81c11f6167fe8b9b88fe957981b64c2fd48ce5a1db42c378b940b9a52ab19472d106bcd93076b1a7ae49bbde104084958d5ecfa08d3c77312dc42aa4ccd932ea0fe4f8f70b6d825d32fdb3b4a450b0cb89b668dd17870b9aa0e7312c24eb0e36f7508403c6fa9a19cb550300cc92d37b0352021bd592d839d8aef4136dc69cfbf5446e47124f64b45658abaa1cfaa01c789670f44e5649715c549b886df35820224c5f2268033cffe352d949e1de93402cad52117712493605df8d5e986a30cd6b3582e7ece007cd00726060cbe9fde4d86318c5c43cbcf0eef5403402a9e3469467236a64a189262066e4657c6f4de477378ea6dfd180b9382954d6493a66d17f9923022cd21a933e2b2d46bda0de4b64c09b1139f6ff30ea18c60e23dd7563416291eee329f5808fad9b31aa90e0407e54609c452428a7c1cdcd288b55429902f1e1b0096b0ec1e88844bf4c3ae85677dd9eeea73a0ee312acfd7df6c9d6683739ec2e072e33a0fabc66bff0d5b0eb21e74c91ca900444867f2a8ddb8fd9d400b797dd91df476a147f77a951d6c545e13d48e049a2bcdc82448023027c126993db173108a0194d33a65579c45a8caa28d17ce6d5e0e2aebaf2ea5f408d884091ecd1c221e88dc2bfa3c6e5c9ad6b787085630d26bb710c015c6da65d98e859cf56f692cac6309fa6a0df4a2e736dd9ad45b4b128767aead779a02cc1428ecf2c88236f46366c1b9f472a8f005519de5abd5ddb7fb3bac19f2cf311ec9a507e4a649b6e00b19aa0cd93c1307c2d4e1ede0be737d53fd78bb8c53aa9c8c983078758435fd5f51ad0b254a7419593ff6069ef8a49373c8a8ad757cbc15d2bea0295290d20fae3bed73cf7d9e1d93f756c15f4b172873e763dfe4acdc3923117294acb6233d3fc92a4f07f252c959f8b148a17b4bf9b8a5777bf2d22d2cb202dac308537dc56c6e834f78e1bdb1af897bd8c6b2468a7c778a33dd821f78e69eb8bc2387d3584f61706dc0262aba9a4e2486efa8d243c3105ae69d3d7381f65c53d9c5887c26fc632d16b4b6f86e05dd551b4da4d82ba4cb87858ae0a8adc049a3ddc28d67b1182162c8b6df0375a02045f5caf24bdbb5a2a3a28caa0ead2a2dfa2e35593178c8cd47103110304f5dc709bd724f09fa7142ff91f8056589a2f06e32948f69b8ff861c8a681c2e669bdbdf82a1068dc75c8b694fd7f998d24ba7911939c4379d1fabcb15ebe098b0c17bc8df2b14b0b354b86446cb7b348e9abb22a8cfd330a7b838d4b255cc361d805dfb3a5de6a51efcee6b28984156742bc02e1fb97328eaa1e1d9416bdab9888c5a0e6055c3d3347a582054e8b5187619a0f318c10efe9cdff10f39059896a10e3d7c867339a34cda6895f01a0932c24a0aa2500e9b112bd0d2d07cac87e7465b7a56d0a0f8cd89ee717e5d885401b018680c909c96b93a133ce8e5817a9d65cac7b9025bea2fed2eaa7cbb91d3de6e51c73c6c809fb9438c0b38fab40c514d172ca8cdd2f6a80f685b877034d5e9ed9ed32e2131c4791eb730fdff87a5bf32161a1b694f3c0a6cdff2077f0651aab570b7a8ea94fb0e7d8a7d80a8f3ab231fa71236b1b2414a91373a21fa28e85eff7db36a1993766544d0b9aec52db34d0338f236cbba5dfa63e52d9f259204d7fb1eb8295af87699ee58454dc250b73c226c3b96a6fb2b6df678000fbe652ead9b3ca929670072afab95a22dbcfd0b138cbd224d0688a821582dd450b026a8bf70d19351ba2ad504d8f2e6efd4c303f75497116b3181cb705993989b25a59a10541c939ed2fd88b64c89895d7337246509460dcbc49ed2b05ea4a315b0553d5ec5ccd8600ae87678d44a56380ebc0a7066de60d4dbeeee4a8049a26c59636737a5b2cb8e2d37b3e2e5a26093cca10cc77ff2f57ad43e90069a50fd3e9fc061ae3fce5aee5d64dd5f49c6291807bb387415f020dbffb663721b0caf788e457c969a288f25cbfcf2b27c002d74a6984756b08141f3c8e2a0a59d5fca7287f4abf8038899560ea3f9bf97b844e797ed37c5df6fcedbc2d1d517ce3a82ff9a03bbc9d2478e42c58e624ca6f5d9626c38269c81a80665b3ece9b8ca04cf7bd7eb698457202e5d8cbcd7587714ae6a82892c8b7e703e6af03761d9e2dd8f9e99566bca1d9f98d8c3f0b391a21851e415cc5e0ee24612093341c7d764744cdfdcbb793a29c3393057d7c65709ebe0e60403bcae021bc8a28984207ec362dc2a23b1a079ec6f5f27c7dd534ae0815bc5b467c06ace192d3e9f40e27a55c894648457ab9d339a9a447aa3eae5f485dcb7a2615e0b51904424a0f6ed60caf56c20643f54d06a60df71ceaf2a0e486642da5151b92e211f4fa34eba7c7aafc0af386e4817134a9ac4f711065770841c7399dcd5753519e54b5bf8dcfaaf2d020357022985a98055d562aa6f9e374168f8bb724eb9a1964690064cbe550556409ad689297610b84931d8dd18eb7e94ce318e56ac4af9ef35efe6e0a2219393e2a1aa661685441f2ac0ba1819789793852958e0d802e591d18ace981e75a80c7094019be7dd44463815a3720e66f2b1184d0ba3e1287ad5e5ce443c907798e82edd55b09291a50ada59b86dbc33c2336fa76b047b94a8589bd8c406259cb62cf80a9b811dac9a69589e308133ff79a468eb99d102660601bd1c57c894668f68c581587329a841f1357cf4d19097112e2025b05327c55a786d0f8e3b01e217a960ea15ae28fc22bc44af4c8053f44c70c27e6d559f7987105cdc9f7b22f69f4281e340c1d61b8e744d7f6dacf13ed09116fabb570bac2306595da35350b4b6693e1d3e7c9e3552e01bba7fd8223c370982e2a1afb0a94d786e4c79a00975e1d24cc4c951b1659e73431f7cac03ae0310326e92ef1b2a3ca805c61b74aadafb6815a2c7026ee8774d375532a77cdb3dc1e48b46b0a9445bd21be37d34c348225aa098adc20adf11f82a05cf73de1c404e08db1626dc895d426e6faeb378e6100d0074804232f9b699e9ea161a7195e4b03a99286a4973935100bc9109117387becdf9f4b12b62040a83c1b3d54c98497105e1466e6fec609c99f997d860d420979775c92d238b2e75d9c7fe645701f63bcdd578ad069202d13bbde7d23be4e0345344b3219f40839f9a554dc221858ef2383e0bef71839f9225ab16de0a33c84bf3df528e1dfd7322b188a676ad96f5aae5b66b8dfefb1ec86a3b61533c3393a81d7e6fb458e239d50b2d7545c63f58631e888fbdd3e8492ac989dc56e363624ab779f3ea78122f13baa80592e5cd8770d232d1d9e9ce6e66ff28f442456053fae13f42c70573fa72bc45a02232d062051bfa9472417a881c83b814db348ef3cf8c4a5babb326eee1c78f72b4f7ec98f84085276bb8c75b4384744bc1948ff44111bb0e7db2f22b6d0b455411bb33a400285a344e61e6a4f5bb21f73eda24425a8baafd7d786e7e3a884d3791ab6b41c1aa1f3af629086a90373cc724a08d9190822145c18bba678c90922471ebb0bf70fc3b2f4f948bbe50c338bd3ba979ef4a0a26e3de61bdee5577d85024d3beb6b2f35207c814c190ad99e0b2e579cfe54013278fe8876c58ae6a49ec6160cad2ab695ed1250e37bf9a4c59d297b09a93e9e54473077a09eb6df8bcbf2744715e1569b8bc26d5c665017cf9eabaf6e1d5f2f60378e6b75f8fee40351b7fb1b8ced3b252b69f1e8602552b96790c28cdd33fbdd7f16af183cc2394b96ab669c37597116e682b34d9b6f2d10200732f88c72c4c038f0054d2a526fafe97d4f6c9e85290e84f5de46ef77231e4c88ec96aa440ba25299dc7d9fb0b8275b41f03124ba9945bbf3acfe8b63be5c11d4f28616d5d9b7e3272eccaaa916cec1507f6406e6a5482950f38d1477878e1a005b56483b4e55f6ffefb063d8e43a0edffbb251872341fa0d1badd20d916173ce6fa0dd7d8067a4a01cce8ae9c84dd7bdc60acc49e090d2b20c3b5ee0d79b3132705b1dcc7d2f6e051b5ccc9a910cb95b9d1887a37b371ef10e199de1d454bd3553e9568135f75aee496535dc6278c50a9ddf66712ca3d378a334d666493bc2214ad72b1a84779d6b6714918c538e4ad22539ea32d41f79761c63a79fd6104c747d2c387c383ac1d1ef0571deb5e23176177d44e2996e9d463b4475d17ca8843b13901477a2c2b610a805332e68cdac888ddfd29862ca188511b4cc531e6bcc41f052ae9c4e4d18f5240a3fb51dc8667af1d271332d9d654ed975dfbaeaff7d1bc76fd2de5bc60a7509949ccffc8ce813e93cb4afda7afc05285663da0c6cace181ab32f3f38206e7d34be07f942d367ab161a2d7bee6899f363cbbebc1352b65cab2e69f170a3560bc6ab078cc9dbd49ec5a65011e97c40729a7576713f9c5c08c422141cb5a153384df90fde45457bc71bfdd273e311854a2e397a44cf2e683b2a3e80e494af2ddd374eaf0fd98a4d7d0515032270eef9c119d04e13d3ee37527cc489f8cf51aca80787c6570a900a36ffc5a09e40d240fb10cf135551d6d9e94cdaeb0bc586a6dcdd42ef91994c8ee6bcaf3386edc55616d7b7dfad93c3bd6518fd7688ad604be83cd802147ffa0b025041592c8959c30e224692a91774204edd1e0731fcd4772f598d02c143c963cdc23b226467532671b88944f7dd60d3b3d4b23b844a3d1d6cad1a8bd7951ccb1e62637cc139f3505d4234262c8353313c99d24487621b8c35505c799d1b68f51a99d46970cc52cebc8d7669dc707045bf8a53fc418bb42b660a6aca1b69fba2fc2302be82dbdbae0025181c40c818103c6810c680985e9cf524a3fb0099a36cb3c61cadc29834e22d1ad143e5228b47cd800801088accc9a348ee1e80df322f7365bec779957b7576b879b0e95926527dce7e86fb19ef0e76b68866d2b8c321cd565a3805925666d44c2616aa1302e1f2c90e9ff630fd19fbd43bb3e6a13cd76b30097ec7091b4f0bedb19055ecfa370ab2d3b910feb4e61aca66d9b51e7e0357ad7153d12cdf09f1622a5d3ffb2aad463612a2f2e529e944fe0dc6c411225a246ace447a21731acbb860d68c82675f39d4c215c1775ba1b54c0793797ec128c4d3363fde1745782c1777b68d7c193b68c00bb085aa57f1ad8ace2cec8ab217c6011f40d1e1ce6c97b5168a993d7174b977ef1527836c390efddfec48a712347e3a2c64ecaf66e42c1ca1671debdb79b16e7b0dd59a56935b6fda3c71ec9da1a075614ddc6c5b54cec01d5aeddaabfb31f59af91d5218602b56614e315f245a04d043cf9d2901a1458a6566679ce2360c0295370ba989b1161ee8625caf874254f238c2e721539f4966a629cf492fb7f20b2d363cba09b7afe39c08507c6f8431a419513677ad466f1f6b11e74c1faea26b53587151deb00b9815ad9c5a0eaa58d4d7a1201da39e87f92d2f0242892a14baffc2f3fc459eb19d16219eb04507b8cd717b4dfe114a4937c68a80e822b1b2b2147d440f9bb799e3edb41c3c88a6c196250bb6b8faeacb1991e951b21935993011a572b3f0716d14a8bc3caa850ecb86d2a23c4a11b19fc292205442a951a9439d5c57acfc30e4383538ccc91142e6dd7318b2d31e5446df8bea3b858b1702e7df82afed08f90e2d3a17bec0f638e54ead686ab2cb905fbf280258b4312fc7cdbebc199b2786637fe684b049e02251642431aa4187eab5d348594d2f4cce7cfe3c15311055b5a31a3a7f5fb5bdb0f62cb4405608f9134a246dc9d9c62a04122a5e994b72d1194b02f5bf9d3ff502922a495ea088e7da1bc4b8f2d600758792c8571c7ff7ac7d520828552f5c6ae9955b0a3930790aec1293a8211e3d1ca36b4fc3f9567220907e630a32d6676422ae966ecb98651cf4228f825c0b4483f9c42b8caef7d1f0e6c395d7d8abfd9deb47d20644dac26f02ae2ec70e1e0a9b29399128db5bc6c2925908c54a74fc9d15187ca6ca3a3d74159aa623b168efea0b558c7b15cfdb98110211f61e781da34562a647138189fce194115c26d82a7a2eb5df91d9021148ed7c62698413d9423cbbd3934a92859031530b12d2ec4cd590426f044663aca908dcdb604397c042810898eff2e18b55076e72641de7b643926cc5bf6f2a4d462e9871e7dfb04d53b4d3f0151c2ebbff907dadc6a47d6648f59e38a65da3986b6f4f27f496565c0751425232a41431ab1de3cbf56cc05c19cc61e81bd802436c03b1ee04d07454485ec148fddcbda7238b59fc6a27f55bb32624cf1bf10c399339f694f8e71cc68c165be5e5f6ec88e9cbe3322b1b2c985d1ce2659a0073280713eb11ddd98701f4f3f23fb874722c35d210f621a20456453add791cb84bca7b34e99d93c9e80dd83ed3f12bcb39f31680e80941d60c76829a70234dc7af7574941edfae26ed2544c652aa3b4f9e68a8cd14bae8341629d459f77792928724f39765543f444b929aa33038b0d271fdf6a515aea24b3ac6035421644340f85af7067cb444b88d86f7c19bdf50da4452f374183bf9f294d773ede0dc3fe993e41eab0599f106a12de84390817d3d16e0b79d91c811de61aa1f006156306181fea6830b88529f3644a98757bd1666164cf7ddb3fad61dce48c271d293c40318a3da20eb993632df273c75759e9cf3848f271ab4b4d5c5affc0b28b75e6a23e8c8e58c479da39f8b9deb48269fd82b9c6cb1e8b3c249982f8b2356dcd0c546c0b14621a4059bf6c609e108601f132fe3bda99c08cb1081a049162b30087fd1de6c6479e609e15801ba8e4db2395745349a0634f5ea806c19c27c8d780e9e18a2ab203fb5b0ecc72edc6158927d5eacb4423a347f03ae5793daab2becb34bc40637a94b97d55f814bcc7103d03ff60dea16abe372c1a84cac78375d83a6b8255f0e88afa42ef68f80431d531ad8b1a921bae00c3740c4aec5b619accfbb2db6d502d7aa7de10496fc33526e8301eade693110b9e4e8ccb399d9e1c88c240cf0c421738f68dabef3ffbf3e5dfc00c16f3f87c46042429b16343c21e2e2f525c83b4c1c5b3f547c2ea5e59cfcff00d58be0f3f23141b7601929e174989b4a71643ba30bcfee1faa2244c2e9592e2a72e9ce0da2192960a7171e7294d9d4b5c994cf004b9f290823e157279e8f99081db4de02e67c30614585a8e2edcf810c055ff430984d0203657de832b89c5a524a5c85e2ce799e8e655bc0315b41a072b94fedc83a1d1789a08071721e41a751abfbf5f9c501bf42220842cd329d6cacca4b2db6b8eed08823630e21b6275b7869a156618106ae3ca35e5c37d9da67d02f7acaff7d065ffc5129e6ff61d4916b37e1de58913642c0b411342d3c6ac5647b20e9c30e7965c4da03ed81e2a52da3b8902722e30b591ed1dab440f208286e550b1a920095c8de2fc4f6523fb210c966db96a57dddd68704d493652777b699fad44397543fb90c399c16e35f5d788df82f871d3eb657336af10b8caaa1d1e67a079f5a24559d6a15ed498a54f2d9e0d7b1e2866d7264b59e3230f7fe725061fc6cbcb9a3add9d6489f9fa7e7e2ddfd6cb43b334f0df0e21021cd1db988f8d93cb6c5980c4dd0dc67238ef7eb33186fcea3981f662daa4ffe566a46c57d8f087e0c0175b9fa9387cd7dee6ad3a70cc0377597aa2ec13303f26089afeebb553516551167488a43b7196b2e46f97f25ea9edfc856f6797bc82aeefbd9d684fcdca1920123311b3f43ee77014fe7f8ee94f513dc9f8d04ebf78448f5fb6c9aa4279c7afd036272ffc3fabc7aacf5d9d8c44013d7fdf62da770634fed3469d96119496fcf99414edcc2d93f1b1d3424df76bb7a689fbb1aea3fe529ed3207de79cbc0c2003112d38fda5f474585446630b4206243bee76f6fb5255e8c3af2a453b3f60a8378c49660cf4dc0787b2402e4e96c2c2343a318c7780952e20c964a458468d53e1427f031ba7feb2261220db76c2fed4e72175694c775b135d2bdc331acca18d852b992e01120dae99020a2718a2d417d8827a7793e127b2c5ad3b9361678bfbe547dee0994227ed6236420066e3d63f9307dad5eca28cdd126598e68529dea245457ccc260cdbf7781b4a988ac2bfd4045ee9c5d85386f0a157e5dd859a1d54865348ce344b7d6aad2a98b6c8d5656641dff73bb91a96506d38f943aa61501c581adb3bac8aefd03af972df6fb636ea53ee88daeea72fff15ae90386830920d65e23ad230863c332d58e1ae3ff211e44fb5be1c637d61b22d92eb19ee75c0080802db33eb0e2475c5090e35a7b5b2d3e2062c3d5a0a51dc3fafcbaab406576c17bdac8579a2bc09669d5ea628048eeb626a7519c2498e44db3111398fd70ef79b30699b4dd87a58a54b845f32acb101b6a4ab5fd226eb318a3b3569652397f2b91b9fc34e20061b4057f0d963fe3b798b23cf553d834ac57b2273c67640ab0363d8cb160857acb3b0f07b90c59a6046379d7f215f5515f55ff11c9964050653c880b82c5aa10e4dff565a5b4cd7d9dd8b1c3e0bafabf4a32d6bb7e001129a85abd7f10665c675f8bab6b84469baa4df4579bd64d120f4bb1ab85d1ab32c77ab564eb93d13cd09784a4c555af87c0136524c3ef83dd9f4c97334fec4e062a904b43e3786815c02ba8701dbe4bff0db56d6a34cda220b5372324e2d8b54a3451c9d0d78f32c785bb2c6084bc2f1dc868ad666470301a26f477879c8c678567cc2500492416220afd4fed50eca3eb061934dc555be4b6eddb4c4c6bb82d7a6a436d4bea9fc228ce167f4eff8780a12a9cc36db4271125fd948f7fad72e6e731e09c19035e5cca8d96fc65b98f2de5feae0861af14bec76889465c9b687e0d8acc2fedeccd1d259db6ad81b511719b22cf2215e74189e77879d3526434f1b33bdafae8cb25c2d34efc17eb22360acae9fb8c4140dbf40eed73164e2572e73080e077ac4473df95931f0eb0a7234db515814d9eae1ba4ec19b9707b117bdc7fc30ce08fa23087d9602a1ab1604540b1754f510b8b6ce0a04ce1906617aea7aa29ca796e597e420a334310ab7870463e889abd16b59ccdb8c281d96ed7ad440850f24bb9103dc5f4c68accf0926e2f203c058179af5125479b4899866923d575eec2afd3e66a9cfd717cbdd8bd6d197ac6b61c1c44e30ab3e4b1b2d30784b02dad0b2eb526638b2bb782c318623110b84ad4476ee3f6b6cc2e96fbfc52ed2e06a1aece7e0c8362bb4876f8154d6bf97891a73c045b1144a87994fd0b91c34716f61546074b57f78c830d21855396522d4de2cc4a7eab3057da98464af672d8efb82ed9ece0eb6adc3e957ce1d729d89ceb11f17d4a314052c5f58e83aaae0799f6a95553685cf5b56e0a98fc3e6b70bdfd8ec34681bc9410003baaee4855d43bcb6a13d1bfb9d32ef75a5cb36d183827f64c3046a0f7eb73558c2f722a5669c5187d49ef8640a379ccd025e17991db2f012487061a66b3df33d773858006d002858175b8e0e283c5d3162dab22d4bf6f73d8b1b88d6b282a2d1c0f26ec3ca6130e2811422b83f3b8b69941bb253ccfe6d48b443e225623985c6e96635fdc26ff66c3717efaf6f4c9257e916367a213ae79dcda424f99c3dd70140121c81aa0fda13628f338b80ea82078c7f2121cd01744c3271f27868fedfc3542ed69033ae6a0d8d2c066ce6321e771564e906a56e01a61f8f19460076ac4fae5b6d4313f15f13e6770d575bfc01dd710d046e13f082213df2dcc1e089268ad4c68608ed93ca66ef2ce8c621af37bde3b85101fb2ca90d9721ff33839e9d885c1c85b127b4480ee7969883b85a4c51c725a0ce5d66a4d7f87aa68a8112e75353b1c8b1ba90d6d9a0481814162e173a6e74ea3ee85b812d55f99d72a717aa17a149f760cbb0e5ef6cf253691effb1cd00acbf098c16000bdde9014fea2296784156baaa89fddf149850a0d01a763d3b787ac3abed4367c0ad3e393e3b32e35e1423a3bf8d75fc6ceadbf743eab266e97363907e608ba3b2192810e78c0d9a1b8fc3bd57c6fe52aa682754928ff0ce7bb97f6f970b93e3fc6ef0b5e7fe5ba745883740aa083d850123a2f490f993841fda537605201ff99f2d28e8452690072b756fd5d092a62d00636a3602fb709f78c3461a66b0423d567940e9bbffa7c37da5fb3bcd815c669de99926f8ce89fada9a6e8ada8de12428c8b3a451881fe34a331058e5cad6bcd256abc8ec04ac3d4f4d1bd176b50fd84a973fd9e265a4b0d0eea6f0853712781cae0f9e25771947a2cabcb8b4324b1f8f66716f4fc6c250dd2946a0c8ab34c04e3c44b5b7a95160d241e7bb8aee15b6c40099be5fee1f0bcc6c1b9259420e1dda8e9755546d053b945f730123da8e7818845bc4ff280c0ac4f27e65ace8216070daaa328255a75d052c0c3e07d4a7d06d4940bc2df56f50c5ba63fcc3553f1c810821e5e4edfb97fe43045e121ccb3fe864359c0cce8da213421f527161d60c1c4c617c71bf93e3c0bc5c359c72a2e28f264b68f5e6f49e9c402aed35e690c8e0f9ba21c0527d7ebf08609c068c0f5ac0dd90c26f3a1a4efd9049900153f71a054a57947aae6dfb259e74dabbf13a85f8e97db8b8e33518225fa178fa0bd3f820e74a0a356c9bcfe043de834a4fa2a206cb2e0434382262612943b3d3c735786c381c80dd013003ab91d8ad4aa41778e33d790e6c30a234dbd82ffc71d770f04c16242717b8eea3799fc9ef7b4b9ad7420ee4307ad0f04a0e3547cae0ead28ebd7fcb8ec1eea6b1ddaa3714a99358987ec8a22e6d5ea942122b02707b20e0f0928f240b59a503a613b22fb9035cbc97c075e863d6ad4b8b8643ad3a34f55dc766c67963faf65cc3869ba07e9c72577d5d3470080a01b95ce6c75d039a5c758c3c5787b53d425b16a7dea0dc027a49fef1db4aafaca0644b089dfbc3643e67917efc7a3f312174a4e97112dfa7369e29f45bf6bd4a48b892290e67e640d56a06f01a255e7cb39d5c7fbead7602bd7369042aba3b1edca5f0022a7140d60f100eff6e5498d48f027d4e42449076fa16577576700be68b12aac5b14f62aa041f1203e1a012aa1111ab168a8434c0355ab8913c5c1fb767d86442b63ef944dab15666b6c10a769791ea15e2fe0be8b4b2523cdccd5acdf809fb90a075fc775335a3ec04051e9092598d526bd5f1083b026ae94d8a20d30385536be577f29bc64e382a1d1d3c60042fda10aff837192113181783b84e8aa7b548166eef71bf2fe15ff31244c966ef2018b58041496d48aef2d89ba37076d64ce14dc88295a8f1150a23347cde322043e66ca32aa452229dfb882f0cd4fe8da58ebef8a209928c4801e3a79db006ff67079f69231f2053058a1bd05227aaa02847b4f602c2d7210b8533eab3e728958e9a04fb33adbd0f3a07e135cb0b79e04443ae70a19f2a255777957056330d974738a600152a0ae9d98e880e8ccb2d1ee48de42c20d6d969fdc5c9de86f4bba8bf096e61de68916c6ed9c0b4504160ca70aa0754d2619471c0712d402139a8b5685e57244a3534729cbc12e1f660f15a9022c0c294b2789d9ecb1944c7f18a503dae4ea42cc8e8c5f9472dee86b833033758ba06d682cea50f56c7caba0937c977950ea74ee849da0184ae9e9ceb15129dfdb81d423d971f9e616b16f6dfea417a89b65b43c51265e16ba672ea98ddb720d7e41da2c48420591ca3663ccc5285b403d71ff8011ad6c76bc279ce6eaef11c48cf782c3f36773a547c3a860e5546d087481f30114248c747422737a2da1116c60d2138bb91131a4bbd2d1d1fb8fcf345de41b5d5a790ae6d54de66c315ce8e2c6060501abb2337c865264d2d3385878e79170eb5604f150df08093c790f01fea56b231663c2faccf0b81a8e38098299a5c85b96e486725a1d041b33e921d8a0413e658791dbd722e96e5c15dc4fa47cc461ff758cfadae5eb516efe8e5351ebad416ffe443699c0817715230c221e128cd5dba0aab82f84f95fc0a209f900c3a4c5c537997dae6084db461f6b27c488c31ffa4429699229648ca28bee4b41029e0449c435983a18a788a7fd2019a644a5ef2711fb2b1ccadd224b0e28fb94bcfc5f6d12389a5e407442ef5f21f5a06656aee46b668f49188d01d20426a49397861636c6e20879f6c69dd5a79f8873956a582c3bcd5101a652c17cb0f960bb314b1683580765e3aba3383dc02185a1dfb99851ba46fd401d0e45811611c1061e81ef815a84918f9f121fa68605c2f9796ace1b9015420bdf1619544d505fe2b4873d451d28f49e8fb9185eea034fed8a94ada3d2c05d0b6e5061e360520d726a3da58a6dc926071399b19fb25a9db998bf715b28e8497d12859bc6eb69d789b2e38426505d739a97e98ddff1eba16c9b40120be616b0c6579616027a785556b205a8bd66f2768950d1182f7591952b422cc67a7c4feeffca24458e19b701ac85e485485d369c96f83d6801a5355ad3d43fba29b50657cacb8f2d843e75f5146243af83e5f9ea07b08b5022f14ffdc707db605a09cc42343b75b3fa291dc51381c10b80b217a09b694e43b5889a24794a4a5e7007e97aafb6179fe2fc8bb8b6a287f2dbb8bae9e4c73e602961ea664424ca41dc5e8b1dbe1019a6c3faa86562dd30feccdf4bc304511decc56551322ee0511dedf577dbd5281c0f89a1f15a063b3295ff2ebf988834b7c14032861544fe5d1ef96389461c8927301ab77f5c8e1a635b6ce67a9cccd1a8dc015f02c6698cd9ab98b9bb5949d60aa02299fb474d9d52b9009785867f7744b8073624d0ce78a1be5c1a0802ee27f8558c9c327dd3e5d20b2a5d7ff298c2b9e790179db3b3d38e14b42cbff74b1f8bb42b151de8a1fa1761c8184cf345e54efbaa4182b5ede6f98e9f715f5d9d8513bf2b9dd7385de7d8854427ec5608c7a83ec0653f78f3f990ba98007c244292141037853cad4df4538a8d53cfeaac32994a26f40c0d8850e73dc479a46be3b3e6d5939804f8fadc658ef2eaed81311d69e490bfa8f7a22a33db287164dac46d84e2470c631324e3ac2f2d72c0d7c4c5100ce993459512d6550b2c22a37ada4331a8f4236804857426ae3f84827e831b3f7bb9b4453ce651cfe7332ec1d59394bc921c7c1c739657c382fc58ecfa51ba1ff58ab8eaa18a4287b27d74bd4f472f9f62aa54f2f9c9836cb757d930a4dd9b563d1963d31f652fbf054d504dc38e1db186bd7dadead3e2fa81f25e8d450540556dbc8eb5953767f4a0581209d7f2a9e76407f069886516329e2ac8b61666b1bf56cc8c4703a5e604050711a7800ad42fd4a713c3267fa7ebf7a76cced83be060b1b6414665899cb3f36fa4d1b4d0b0c30b8d4cffc552679e999bca6ee28e1cc881c6e352a31bde95deb466c263f64e0bdcb8469532110927065aa1c420eaf14116a6ab1aad564d84b69a18041185e2f6965d8b74b5cd9b696762807c17e275fe08cfa8134d58816f4eef8304fb217688e5386813999eaf7bfeb6b74a0662a8f390a384d03198f2e351bb4a49ff78e0aceb1da433f78a587d058522b5b3c0a6375253b8d289f617585743fd8577eecd52213c78424d37f215c7ca2bd9db17e0add8ff009b4a7a3f0928d04b7a282375acd2fa00b813c64670189aa272d1118d914706e0a11459d432c996f4114aa48aa0187adddc622a4d7495b0306492d5dd5c26163e93959cd3e40fb1d9bb5f40916b437091ba455e4226a5fd4011116e28be5108372cc6c322d3307aae9e3f0d901616dd3d256062a0696f85a9a950f11dfd0a1093312895fbf7525fdff41704ce787f2504da380b04bf40a76092fb510bf9b83ccbe5718a18c545ce5e8baaa40855552e696c8fd2a1958bd38a92e19f27740d4a58c310369ff0443949c50f247956a43aecc8015ecef7610ea3e440f6363edaa70db7ac4a67dc8a39ecf4d79c119d183cd246b6e9cb5601be623b0c72145ca072aa929425394c68c33ecbf81161fe956a0645b42aa457d840c815a7e8874dfdbb463210f086834a5acb01b4c99234d43b11436d30592c49b881dfc0e51c522414262646b81096e9dca25a9ec59601a1639392e0721b326dfd41a18be22747e336086e439b75bd77ee0d83f8eeea6f669cb9b3312d4d5754403c37693ac3a5168408dc37a3526a32b0b89928e4630753be7e3a77878ec44c2c1e2e95842081ccae654378a7f9bc0f8c356d69a75b9770fa9cadc5070d7693663bcc83537e79a41a9563faff02b6d4c35cefeb2004f4b5bb713672c884201e8b9e66cebdf86143eeeba01ce0db19319237b9e0cf9b74648cba30e6710f93ba6e927db4b15dd087eab10ca9d1d25bafc7fc275fbf1ffa9e152404f7294c3b073178d57e299669ce1be2b98b9c0fcce7b931359136014e901821759c6f0d3ebb9bc9817b5d899e93bfdf2c4a6fd2e379617dcdb29c17f2a40e3c1d147d1caa56561a4f323d06f4b6e31a97ecde505b875018360446597088f5b832498b3b48c939de105d7874e83696af518a705fcf043d082f1aac79c79e03d9af21ac23adb2217aac5f4854a044013cb838a96c2955f0d3dc1e857eeafe07059960059a9d5a952ce07dad0411219258bf570f2181f415c8a77810e65da0c8dd413c5d32f48983706a3cf4557d22981c681059c208958d73785b12cd2b0b663ef5a7e2a650fe77b11dcbe227409a00db6cae8d101b59f45a210214a08c0d05dac1e1b33e99857ce56649a4cb59ca5fdfdf4e91e085292c43e52ee706cc0cf1f29f22dac4b413f633a5c4553bcab9eddbf4cae9a4583157b510f3882406afd1f3bc79c518c02a9c5c0dd43805db0ab3f5933007036820f0555cc8b603067d3f7020e3c8f9e0a9f0441cbb06388360ab396be926d8c38131a4072172d1719220c90e2cd81dea436d053cfe15a0ed34bd00e2d341d610369dbed34bda580d9bb2c893ee0d176974d51ed6153c41ac5620da0583b988bae6d28ff14d4eea8142861840b7b12032d362850ef8369bdbd219f9bfd9d113568f6d69d17a75e2c3adafc986ec1f25629d8ed4e52d5beedf7153134cd31bc80b72706df814c4fac15af89988d25864d2431c7a8013abb45cd3e638af4921881d89b75462b49feff23e84200d485313aaa3ccfda97ebcdac9280f7056e411a3900e3de2826f96a902d60cc2219aa45efd781decaf30f600e39cb770e87e7bd65cdf3408089eef05ce40184b819cb239b5efb6560758e994c393d5365b6587f6a9205380019bc7637880110808a1f8504ff0b0c4d7a4545df3f3fdaadcbc641d473a32847abd8f08df9bbbcde513f5045eae3b9db6879b8231e6b0ba93ca3d3844c7108c71b2df3032f03faf231de2dcb309b17f30b874d3a9700ad2ebdbfc8551f92fc2a0624054b76e882ae42ab6bdfd4bb4963dd373182713cc54091a2207b05f2a225d9ff2690d44fd5966f2220c701f23477176852575c098aaec9b0d5a3594be87bf4622b0857483812b2077904d288172e89fcfc1e49d560e857c42d2ade41615f6209e9e20374f24ae28443e26ccc80a2ee8be233e5811f123ea9a25cd40d949532bc39d8e09fcaf98a7ec4e792055518734761d8dd64efe650f7b8f755b9cc2c86550e5a1930af0ebf907445b01d744314237741054a3deba50ab26158a386b58ca923e468aaecd42fa21c4c3b5c96fe61cffd072fa942e60f3c16af2d7c77033139f742f6d5be73e5ed0a23160a083ffd6f24fdd68438623ce3c528381a1d930b4262a6b7f4016b3f44b47e9dc10854dc0e6e258662c414943cfb7a1e56e7a1886e8d3a899d1388da3fcefa92894ade7460b2d15014f524716e2fee763238b0a034ab71480e80d5b2027d40bc45cdb0350c5d8472fa8f3c56659e8136589e4195b6867b6ccc9753ab119286aedafb6212b784e8c06a81c4c0d183d406011f2dca2cc26322b2466e6fab36427a0b15503bae2099a598a3f0535affe8b02253645bfe0b9f5b25c7af77b75f4749281eb4bce5c80c74714a388b56efbbc411eea79b3aed349bc10dac0c5f4d3d0e9b0765285c9f6602c291c1cbb052546818fd633d5db338251472d83ec803c7bdc74d3f2a8433b8c1c6857f091d640a27152e7a849f00165d591ce40dfac10069ec06b64548f81aee42ce8d4c0113275a69967c99770e36147295fcb6faf313a7f656b316277ac3162ad64ed4bf6ba7d7bf11186fb8f6560f62bbdb4e93d312624603c22085c8c895e519a47ac2df2329bb6d59b2d5c338382b4fcd80a90aa8e0c7a5eb086991aa3a281e1b46deea09b6863576244ffb2388e7507744e57338e48a608b56b307f4eca96466621638f8adcea44292eb5198a949fdf68d0e92a32c94d2e4e326c5c29f06980e0361a5bdf74f494683b493258f777f875e9c739e1bf3b816a998d26f5b3342e1832b19c955708c955d2372457db33e0874d185188bc944cd483837153b83147c0635ca32008edbb39c0b86e4f0a5e2fd93a38c1c06f8fa6880e95c8a9d76d0eaa52e0ecfa702c378787390f469c5a2ef41b3d3ba41ebe2e4c6d0bff97d3c8df2deef41d91913dc3efcd8f518c9f0e2e17f0330cf9ac01a7119619fae66a191d2f1d273d8946d59a9e6639c7842ee068d85d842d7d6281721136ac47644d87173806a4db5e40c02477d9da2ccb781996ee97592d7e1acdc592a79b0ea30a3918b2419038346ada7032a916df1aeabffd0fdc6cf81cefe4fa5f67e37141c74b5ab430f336e69825cd0639cd631bd67e44e7c047ee3cc3c06b569f6b14a2588c41a6348464368a3657ff9c8be4efc8846c6fe7ae1988dc7f6334d1815e8103522090ed0b5eb8e82573cb208d6b74e9574fe25a143efe7d4c069abdc585fcb4167c6cc6c02a728e8641417bd1e3534441b85080b3088a16c18016622f3a3930f6795dbb4f8a6fcdee4d99e98afbf1be4347e909576b453f42ba7841c03015efd1a82cf26bfff03f65e564e008dfd0b87ff5feca481e2accb6ce2f649b4d08bb81413841eee6fc612beb7e58a9e8bd9fc20c74a03a24a02c69ded3fb2900eee60fc939fcdea8434f3debb06f24bf210ce1935487199644ac82583a8aab5b16b8bfdecd10222b5dfe0ee60e2c04ac89e3e87f91e29cf2266140ce58df27df9fef19beeb3a8aa81d25bb7d146cc4e5b83c151d3aef0a85c98d990db5fb23e825b841a9614135b0f4be74a3943d3ba5c3f32ad6ed626acf4274a053000eb408d4fbc45df8c28b551ee5b42faa23bdaefacf38fee682f707af22a3712e3200224ab498848ca9d3be71af69908a3e4fd646957fdbb01c0abe4c5217a5855df7f9fe58e5847b979aa5067a4dd8dea2d4e766d15631a3f2b6006147b124ffef06899eb917bfea639b3a0083af00c127ee833d587e52dff1040b266ad29503691003d69906e1ecd1ce3c859fdb9637c43d341b84f080209c61c514a7c0153c7bdc2f7a0728c8bad0d60d45b4ad17c3d1ccae2939c6727add0ab305d46f05d32072b73bb7176996891b070e0264f3dc616911fddd6a0eca02c64eba09457b1f1964d743c7e9bb464876c784a45405d8011ffb24ee0527b618bd2b581be1e7f90cf8e0acd89aab3a51f847bd0e2c19184b9da906ac03eaa66dd311dde4792409704b04525ece2fb6ec63fbcf675a317b325db788ad400e900416ccbe2fdfba0ef7bced9734a03925c935ae37254284bd6ccfcf8dbb47c0b731adac76f1834c0e14c9b52597803fc63e486288480e2bf9c736d81020b34086666c8ea73f72bb42beb132d0da8573d439b1df1c865c5118647a9efcaf8eb19e8c9b15dac9694066843f0cfc788de424361ac2baf758cc48be2064afbd89a804ac70b911b37e660e0fb9f59b2a3bcdd4ec37ec2d54c15681903ab1b015a047eaef8f6dd7aca86166638923821d55db07bea49b46b664768dfd2ef7c141490b6376130e07e0ff0b1617ef17f48107d55b85e009abd473b017c0b6c7d1820eb026825c33ea540e9c6a50c25b01a15bedb832c74a0785946ed96986de407d839f90e5d705b56585ecdcd5addd795b4b1888e192399e4c7e21aa5a301a947ce80d3bea8846d484010e6791c5cabccddb2fb02b76c878f632d3e0813614486a8e3cc559b2531a734cbecf064c8117e4d2fb59322daa1a3100ab1e00735f5e54cac1a5c87e0c21e3888c2ec42ca7d70f16ff5456eebc51e6605f2f3b6e8531397a8b9971fb0573f6cca601c745f55f5355fb41ef24078505c697a3601d035405592347c68d4b8a9b6ae3c4819972790426f68d22914e555f4d9eb2fa8950abff57b32e7ff4b4f6049ce1924f988f56648d68cc16a325747372820a8f22d2032ab503a6fd0f264e8fc7aac8e3b3bff8040034f629dbbbc14b7c28b57ee75b334d9340499f027144f20f3bada00c611132231927c970a8712c45ce58686d92415d8320f7fca1c3cbc9fec990853d14dd4d5767d8f3be182d97d1d5ba4e3d756e2362a257febaccdcbd93f8f93d304ca7bfd702f172261d652b8dd02d86d28add3bd4ce2b33e51d0a5e1717292f722bafd2f1d4736571fa530039e5b147744b397484ea52f344e0be4c0841604977cb2930a9794c06a989d759dd19dd7e4b9d33430378d276bafd9b42eb8aabd82ea4f50973756bd1265bf5be20b05e415a877c933320cefb36784c5ffe5a35e0896a2affa53ad32bd333ec72030297277083d897bd5749a0599980765569717680d0355f4967dac3fa851a74e81265bfca0e65b84557aaccbba890a8b9842f564f629a6a21da6ff8b077b7c0153ff1573c76ca14d42340d90f7d2fc431efd6624d9f685946af61f60a742b341f6eeb8012afce712eb3a5330e5bc33516fa457ed402270d743d041114bcc6deec90d25bcdbe859b0b6a67e4c00713a536e7199d3b3da3d5925a4a144c18f9a752ea78277a8074370bf6cee483243de118a2c63dbc94e457078f04686a470f6d1d65eb32e91f197d06962f7ba1b64099dd3a605bdb9812b3fed9cd810ddd55b094a131804f0fea3ddfedd23127212a8da1842896d5971dac6f769b6b4099f670188c751bc48698bcdde1936b1da89bf519dfc97746432c8bf642aafa16961839928a8642f1b8e5731a367a3c13cc2272f1454f874add52dacec6464c15719610b700b3d073c4f13b5dff63b0ada57697eef08c14f90b0341f01401d0582742a143bf1d7a313d17c07dfb23582f7b17524d6f77935ee59e1bb381e9f3e613809c61ed27bc85afd7fa68feeaed0ebd13514f348f5a34a776583647fa7c57d3a742b5c6d80cdddcf1e0b599e710be69616cdaca45b29e622f8e87f4000efdd60e89d8845d2822664cc587b31e8a3477394a3f08515d7deede20b92bdb9a3148c2134ef37d2b238e2494d85a5ddd1c638b723867757da9099e1b975c91cc65f549d92893e9d7196296012f2f54a540dd42638ec3a1e98978b6ceb980a3e69a5e4c8a726394058d5fdd5f1a47da73139d5770a363e87169c6cf172fc0b5198c34aaf8c8728e7c6aec180c13029f0b44f9c902fa582da0c9f0215d26be8ff32ada735c1216e4da68d0760e5c32525df38ac1904b4e9393e25894f527f876dff00197b6bc27158e2eb32518591def2dbdd0c52b86b577ca87813561cfeddcc6d02298b0ce00827e12e1c2c8518a442bb6166cd227c7d08c1b4c80339b469908278cc4621015e04be450410f136b94809f6f8249481c7297827c98d62abaedf3db7c641de281f5d27b85b0591918d640f2b15742928974fea3f2d480a9896a6f21c14b185d447fb6a3e2ffbfa8a3888b4f1225ff2d5a11f2f337b6a3024dfaeb1f40e881ef771cf5b660836707a4a63a4a00d9e871513c30dce7c685df28e573e957c756dd618893f34b55e4674ae23d50cb8cbe44147dc9cd9cc7a22b068c079b4ff8148a9b9a651a0c1c5b937583eb6a88f1c8684caba7879a96cf08b465ab83061a3d15ff728ad2998b4b65bf6563407a460ea74a039ba749526c5a7a68f1da166c8fd14082dd69ede9b8c3291f29abe9d2a2a65b59cb8a6373859364fbf7fadef7a1081ec71121332dd77af822b6973944f65cda84d5adb09a58a7c12e1f8ab3a228ebb641962542f1af07de28bdcba436f38106d650f335e66f3ab4a7c330d51982dd8ddde9cac1e912134366480b0aa34d0936ae77cf10d5cce6b1c9b89f5e072bd12d6578000603a0694f0cd34be64ec382065613d971832c70c4df1894a078a710d53b7b9f6c3f650723f7f0bd6e6b7bf3433512e385f47138ef41ae65f8034f317cee337f896e49bbca1dc5388ff999f094a535900677bc1edb5e9d6b383a686bc1c6d6684fd7c047c1eeca1afe7f38604a02e9499b34ba957a1fab7bc2926deaaad037c0bc39dc375f2d4a87be9e56f2525fdf7e2b3de7d352cc3c9177b4526a87ffd91df93d2ff47ca381870baf4c0063e652782ed52f22fd3a4b99cdea40124577f389b1f2aff5f3ac8d04acfeb25a0c28c48a8ad26999e438dc1e70ec91856bf6ecdcd9db37a6bba723323557c75b33894c2e0c0d06120a38667e786939962759e1908ec66c5ba71a21e92a2a3259582ad7a1e808dc3bc41ccb8316096402100063c6bbfb71550bb93359fe66311ea3be7b30691020426af7f89be86fe2c1eedba32e52c073b0662a1bcf08013901406c253f1e180533db61066364926d2669653cabeb1ed370b8d6eae2f562f705a4907ab72d9c810962c225f5d27d32af0c105fe7483a0a849607559f47a62f139b0a219f1b8633861e45da692d8c3e2c26770971279b12bf1ed29f7b528b54716cad930e26c8928abe89ba40bb65cebf3f3672a45e1d48c28267688ba4c6e43908f85109ad3191de5c57cee189a6a8859535229fc7720bb8746cc50611f2754c0b2d4412ed3b4d993d6c7d9f99fa2202e336451bf4c0ff8d79d09ad608e89147b5e3f525855f19d3e618210653e419ae54f6c51ea888715988c0b975837e5e173ded4d9ec519eb3eb756a090715fe51644972313367c0475b5edd597d5d813d0b59bfb87be1c70de62323240dc09d2357d6006d7e0d915712f86def5c948e94b0686795e4e65b470500726f0904cd63f955d8f35b53e7e12515712db2381bb2844ef77e3415a256825534d7541e0b7d6521ec8f6661d30e50dfbc3d57d6d3b1a490577cdeb09f3f33dd9fcf489df00dc6de30e870d1eeb139a1065a9122594a74a5e5d625e20a3a2bf75cdb5a78b5dd72fd7933cb85c8fa7854373616195dc96beeea259d8c9761b5271142e1c6461439c966e0cfe78be267c98b1ef4ccd8528ade97bfb1e036b42d8f6efa697313007ea286912ce76a6599401ed573f9a5dabbb908374aecc880984569931e5f2653b6628c74bc33ca574cedbc48259bac312839ab5f278d85f18b408d4a985be12c02385c4b2f57b02f265682903aa5236421d9b0731269c53e821775e0109b77c4cdc17f27c2645686c4c3520d3bcb4de3119cf540236de90bdd8ff519c5e042d9794ce0ce530704d5796ba31b742b5e9f20493f5f012938a47fbd694e58889843a83f327d029218b5a75e126e8e7bfffcd1ba210dc0422e46c4d0f1fd24f9c58505253a0720cecc9e258ed74aaf25960067bf42ff079721211ba163af0ad8850d881ad006e39fc288368e93b091457a0d88be3fec8c7854226c202fa03ae74f7bfe135df76682b17efb1a0780fe1bf4f263fdb543b7c0bfe7a14be6f48bd9a8f53b7ad4d6b56a90b22f07b32fb089592fd8402576705bfefb28c4c46628b4f46ed242987c8eda6ecefb1905dce3b404c321c0f8be6835c3bb57840f32dee48957456dd744eb2e0cd9f9ace2d6089d4af90f5108ba5ff7fed01e25a48b4c20b41c2983c99b43914618620c7f56b57832aea21d81be9280240471458539bc3151d454d7bf6f7b74c780be25962317ce9ad6648fc35b8b052cad74e33a216931f3483d14e14c797b8d77fff28dcffe6189e65af3458fa60308c6d85038fda5fc1ba4901dd552922f8b73020aeba6f21108de66140b17a504362be997f850e468a62bb1fb9fbbf1f68956701437c377fa9c38613af2846044ab2a81988eeff68542b2e479274df3b1afd25a8b7a2daef2ede0d304191bd4763b34e00cc384c48f3d41ee4569092f784895b24209b77ce6836ff5b38951e6db6ba61938a0415befe9e19a600f33fb3650877543402e56046e7bd7851adc8eaa79c3e530224744873d530cbbd16037a5ed95a37877fba42fb8a211919c1abbf8aa77e068234d45d5c137cae90e5bdc523e7808f2f6acf3b68407c161da5e0e202336920f4eef9687daf17e85abf2ad9f6a29f18742bc3a0d476efe345f0152608cb1613e54fa2cd9f9549f7703593e1646a3361bb0745fea622e4c4394d9d46ccaef0ec92d5723d5886d7321a0e4e651e6638c7a72dbaf490a3ac1586b5c50dc394e891d3a34c47e95f4157bf5d9b6c0c798fe3929b70cf6e60844000fb4abb8be8aa20611beeb1950c92d9a9a525317b38b578178be607ef7816cfebcfc1c1332ad415db6e8f8ac642f6963219dd78327f5922f6f15faf8de6451ef51282956c9e12e716e00e86f08bd50c994c7ae89726eb22d9ba018b2bcf50b343e8af8fb2d92d24bd13d614b1958a2898f43400d153bd569ed1c6257066a788798f0ba2575c09c2d64f39c9e7203fc1ffdb6037408b9b469502f113cd0c1f2af122a3d92c661fa6267c69e1827215453e07b7f6c2fa9d6a3e620b2b18eae64f61e663febf753faadcc184be440066d6124dccd93761b00f8dda760b83dfa53271dd2846e1974119d1097ce4b53b803f011b5efb3d4cd8c0a286f47c04c7a8a6c677ea87841ab669c032ec2f1b0abe09d3398c7ed8b2d2b7c02a0c7ecbbdd8e8c11a06cebe638c5038db382262957e4981acccb74483bde8a8f084fb1056db7a37fb16fa72ff3872baedb334224de0f837ccb1b2323c3a8c9bca3957453d1c97d7bc0f5f5db74ee3f73248aacb5b3a6373ae30c3bf03f983b5bce6fa782ea3b84bcce620dc3957c32a90841a7740313e1861a64e1cab1038a03bb281aa45bc0aae2d001e7547542c8683b19e552f1925613923ffd1dd0458c9733aa25c6bdd611e4e5f4903529fd6b1c7976a1990773a739ed4d17d37ab37d7651bf00797f7b5f2cebb292e602128adc77e49b3d9fd1ad0bcf0fc6c613d9555dcd51fa13bcda678c5cce8d558b5aa076651bde2aee231512ca0e073f3cef52d3999aeff416ba7935bb8446ffe366cd6e1e5f24b853a7269b92866f979627ac50365070fad59e185f2deb9f38247fd4f34dc70086c0183ac72467e6c38cde0725b37573eeac400b423679beb335e95f18d90b445561777c3bda784e2a181d1daed8b3b1bde9e4293224e91926d7cc65b871571faca5564b8989ed17c8f053f61839a22948fc2dbad1f1031bfb8444dc50bb5004a8f453f526eb2dc9b39b31d4b9bf465009dd20a021ad98be222bc7e237d332b0715a5423dd7810cc5cf56b8de857de58f3e9641fa0712e97908c976a885655904fa094dff1d255c98fc702450095032d5e5a45dfee6f7bfcf354715f4423b80e5b2f094a1673fd7cb2ecf4b5217ac750d3ef3f515ffef232bd5851e16e66624fe06b020a97aaebe5fca5573850013acb63fba985abbc328c0d5384570c1c16ba8366977c43adb913a433411056d76b47cb42ee1c57fe8d7a5090f20eb62fa8524ac5b53195b8e7f185d256ccd41210b2b093f7b30b850748c0db3f8bba0868ed53dbbd36aea02a83ece3135ec08db3b15de27e5c775a40cafd1526cb85f721c805932065af6e82d599c50aa1160bd3bd960ae8e05089ffbda61174fcba3bc25557ea07084e38c51ae8b936044d5aebcc7a7c8a1845840220a07c70e9511adc03b0361c5f9985b7310e298ab7670240df35b9da2b2b5192ada5faed96551b03a41970b406984a4cae92541c08a6881ae93474931aa9d6f56f8eb74cad1747da6dca448673e74fa921789a01ef4621fc844996bc61509a9b41ebb641e6bdba38b81a0218f5bf8e89a3c77c89a096e6c4df2a6678d74ee3501d03ccc95d81a27745249188f59d376b465ab899d1eaf0f97ad3a9698e8b1a0dc1f57ef5c6a7b50e9d2bbfe0816e5ea62af3d256b7936ef94f5b0da22f76e98fc9e31226cb94edf6209ae7c947a3972704b5e2eb5d42b1097f0e514e16205e05a3692cf100a1c5d8ea13df951e895a16a25394ea6d7e11a70abff73fb3c56aedc15d0738f6987c938c4dddb104fd410f80571c5b8cd1345217e25e62e5768f43a224a275618db496afde21e694a08639e68054967a8d481f231961eeb7a202506d012a14891ffb2da2972b2e9b3887521554ec5da0cb1fc656d2a256ab9ed7ce1e0ef3b3d97a37469aca5fc96c62f37d4c7c6fc448ac4b908301f3a8a7f0a787e589d76315303490a5c28934ee0b27fded6164a003323afd61f5bb9258312ec24232b64be18decf5e9aa872b56a99c9cd8e520f4b26054ce8dbc803273124a5b3fc142d6d333e121e3d81a1735645288cc4ae4d21adefd55482329855e2b490e824b657fd11b3f5544d9e7bca6cab08641ef89c68a988202589c9607dc115c8e90ac1515a30de7d8188cd93fb30667cbcc1aed1eebb43e694562c410fe22f1d1779f5f0995785f8a6f416ff1413df470873396919fb3a4b9c0e23183967051e89e84615cefb885dfa14cd305c7e4451bf0524a20ea3560a90a82b4c4855e2c4041b14595b594d4a5909217dc7371ad8864d15d6e9836051084a84f8c2c451f2b95b83ff86e43fa30e6bca216ee03225549f2a9f2927bdada00492f6febd9ccf0ce0c21ac07e7fb9d7c65f0e03d5123d324431350360a6e9c4234d2b5ab8e001689f26d2de68798a9c2631813b954000624fe437301e8e4c807443020a8f8e2c40c6377cff26b070f871fbc2fd0951c3d53240361ac00943742efcac00ae27f0352b5ab51e2803301c794a293bcd12bbed21ca752cea0c465ab495bb085e32cc6debb15183b45b946d9eac60df3f70650e2d9d7bb796619a43300d5e72a9ee3bc9a57ed35efa813bcaee79c55c805e14c91a6282f27006f46fec3b483e661f0fd91a4a28eca2e55ec8d13c9827fcc11bc84b18e6c2528d1003d91a89fe0624253f66f3c6380a971faa46edbe95e5ada00c24aab0460be0ab13b68a1917fa851b5fbb978133ec6a94774087d17d25da1f300b5d93db654cec17d5b77302dfeda975a8e3444a49e58759c6979a82e6b543f9048493562f3416005e3ea1e6be01554da47a088e29c63a57a13e54a4881b76ae663447ef4a99dcdbd669f77730ff23bdb9c0c2d7680fe3419d5244eabb37cc2b33b5f3b617433394d79a45f76f8029045e0c55ae7d43ad5917f8c61b939cf49702ac3d9e6b570eb5dc3c83b65cb60edb5a81591b0f9fa1f852770c07a128282f195126b39e55630291322cc103fb4a79abeb43e76e529ffc45630331c224bf9bbcf761a056acf72a8c51d1e60c337d0a606844c504ecdda83f5bfe7ac73dfc8996d41d527fa802a6e6a34aa379fb912a2c26395809990d7e3a0e86e37e27689744471e2864349c4eead2fbf5cd1344940dd4ab657b180d377a69e533b8a66ec71148e4c7ebb441c754b841c78dbdd782301050d54038f2786a4815b0cbcb123414bfdcdac763218441716aa248f10861e3922014822d256188a1ca0e6eaf000858b9605b48ca0d1dc5a51a0d308ac73119aae96b05bf91e50f3611b986bcf0ae205e165958aeeb9a3bceda74138b1ee1309b08d0fd073e0c8a8a6bf157eb753eba896c49b719f0fbd5bf88033d569e704b732176542b2654e3f43412f4bfc3438477783a9a4c090147e30303411649dc1ee19bee748e3cfc0eb8aabd32d379fd6a62104f9e0211e60bc118f94ae45b9f67855ab2cf999c93dff55ea5688f48cdd82832d452ec853eeecbbeec12d4c425c7b954600856634265f0d9ebfd90552e898f451b402c2258d7a908c90cd84123785b22e377a21a209806fa34279d55c89c60f20b49cfba09598e44a5e54fbb8e03bd306b5d541c8aac86d4c898602c6eddb3e01241b19e94350a97276771b2c18bc9449a4fdf3ffff7e0ce5721e96e1e29549766aa16b925bd6c933eee22d685ac17c70de5f4bcea9d24290ffbc4e5b21e9cd6800775bfdf8b116eaa8cb58622f3d8bce192856a7726439161cece91099cb47fd758f09a1a264917486a7c78b79844ae08c0982cb079f7f69858506a6cad1daee475a0ca521bed96a6690a9826662fbbc6577a1d6a70ae58d493c2224d65a8c91887dade41f025e550169d5f1ef3a1e489de7ff17be3e5b7de8659d2616d8caf9ed2522eb4b7d035aba497f415b2728a0c3fee728104b49de7a9cedf1d1a4179e2095d2b46554f7d77ca7816c3240bfad43d7e3d07c385152a5c245d10e32220629d45c51024e439b3a8b8b8d53fa2549d244ef2544fbcbefd5f407d845dc598454e80946db9053f44e40574eff5ebef94f32ffbf78d586afe2c0068a1f7ccc1782aafef044a3b7cbe619b1727229687e972d5741774b641c1b74e77c62d172dbb373894759b66c9b7a382d88bb6f934219d1f0093efc50f7a99f6c029de8475637907698b88388d66bc9fe4650adea520b7f0365cb8da139c285a19a80bebca9951e599591598325f4950e7a653d8165569094bf71aa04035fae93b36602573cbedc28dbb77deb4bbab86644344d83d8621cc376b0c34811f87c879038aefc75d31b2f9f0e7cd68434cf396a6e5ccfa212af4748a83e436f67986169b1bf202be2818260d29133a3ab7711662bf9f10e8aa9ba1b52f4f1b46d55190b33a5e43b5eabf18fe991b4f9030f8590f599c8025a86c370bcd7c07260a23eb213b0b1f0bf963f185591e19b801caca4e68ceca4357c5320427ca25475b47328ec446434dc3330f92b7abe03b16f9258151d0c119e942110c500fb32fc75187e37c6b8e37c8ed1260617cd56f28232ab598667a18933ee4a435c1e786344eb670ecaba47a3503940c440441e025635852c4e56bee99416586db3501fc9ed8a90b8ec433a21c034ede7ddb399803bdcc9ff1a04a4d54fc637818e348cc812224f81dbd04824f6a2e27f85c467fc6baad0bf98b0dfd84affcd2ee3ad50cf0f120c9c4e4449ee217782bc30887ec2b5691c812d94400ea54b6abfe434a8f4353e3c6ba894d20ff02717801bb9d7ec6b8e1a765fc4a852343e49b037a343b7e22ac7240adf8f1ce190639048ba23563743ceee7fbaf8c462dece247482f28557019139056d97ecb735c99a77dd82eb2373439d017659082773c0715ab2f6a5c90228d1dd65fc0561ccd167b286b871c8d98e12c5bed8c98819ba83c493de1163cb235039011d7144152a8e2c6919555a653404cb45bc285599218c561c0a846cee3e4b4cf949eca608c68de0b0593ca8058bb2d2149f4e0cae8674bacbf12e207307b8cd96dc38aa21df7eb5d0136be36eccf544ff78b5d604673f2fc2c1b1b96f5cb40b1edd5352af07adb5d1c4eeed624f5bccf8fdf9da7670fa1cae42f29b9233c3b37690b8c09309a25ca8e14068722cefa559a963615e097e3c2b1414d352587d3a5c228f5113b2852649a1c1f32be491f58c836c2b5675a0884cd521f5b620d73bd69ec5d75f57cf44534d2e8f208e8b43ad314856403c6bf790207f0c2fb0806f0e7d6c4ae66efc83d4f9b5026ab92add4164a6400c9426be963978bb23076423b4c2d2e8332acd2651ea580710c1dee3eea8cd3ff411fd16d3a4e6b232820cb96f0d5e1ac61e9e7bb046e381c77668653aa5f81cabd2b7394ddb0635c8b4701e2f3104cc62ee10073a25ff2210afd06e4443a3e9ef16e0fd7ec6d08a7b91b2cf4304075a584739d9b3951ad6fb25fc92e489e47431c7e8988476d6bae806c68ee88f6dce86b1dc49e3abfcd21527ce936586c401e9a24533e41e8f03c1d5e2b79ac45b413ff14487f16c53afed0a4b6a2b6dc66ba5b01df628e207f7c83f26c7cfd34cb50cd58b32fb8a1f25c67eeebdc553933a435579e44a0a1eb8a19fbaa06f586b0fe1373011dfbaa4dd61da65536a989a718a3968726361262a9f7263f7b3a249846fc0a057c815c91af5f40d3d7b977f8b62a56b18422d1aafa78251fa192abb19f76560dc542c7908b923f00ebe90930485b232300123023b18d07b87e47ea66f8f5ffc8fb80cd9b01eea4b59ef5fc86cb1b51d342818b8a3730021fb216abda702081a7c333d5bfb35752be82d5758db8b86e122523c0e19c008eebdace33f223bdd45f010a5105351a0021d6556c93456cde0b6b1b37bbaca115d20f60d9bd47c3dfe3ecd3522449efadae143af0ea7fb1715362f441336fb7c3e0b6089ae3c75d90244159361d3a29b7b77540b3a1b8fc74e82a3e4381fe172bb7e6f499f58889534703b55e3e81f268ed8d96d401c124d76e3f67b8adaa8de0cb465ba18107ae7c4e38f5e5b51a6f09f665ca3104e008bc8bc181ed48b47e08d1e1a4fb22f938bb7bdf138a137eef5b4d9a9b491e6b0ac1ec0200b2590851ba4906b0db52e942d4b3c29e04ed7812dd1a0f908ade97de82a5db97199b1bd146e159ffe0f357f77121ecb8d7b0698e69bda8be20cf482e4a50adf31a777f613a047926291c6ee2460666fe11afabb704c90adda726122cc316fbf1163355c2162a1e4b9e1a52084d3e5dc563912f84deb80822966ba0c010afa95f0347812b858050e8bac06aa544641cc8358d7a4817c8405c9014b1e38c858a58c045b176c0c4fc361e41f0b0104a818f8bd5999874a52adf9b80406913a67ba54eef6fb0f25528622913f12ddb3241a6c1bb2b27173143b8fedf0a71132472110057ccd98b62d677f662a14735d4e5ee4b5c7acb99bfc82aa1e65accd2df3f2adf3429efbc85a44f0575e36df768ff6a14138bd5ccce4fb1a0126d3297b06e60e172ce4cb205251c4dd996d7485d067a396fdac5d6bb8ccb74f27c6444c92741b0e6b54ebf4d82bb030313babd705c2738ee64681d28ddb1c33ad2d8804484fc7d9046adceaae0f4c7e59b52ce13ce632f24ecd57278f2236e51c55b1d1cb6ec0573d00b01d495c34aac415ea4d15b6157362b58ea0e8e421ea5a62c461f197d21fa6cbc4226cbedb912daa30e55ae6b67f7da804c3bf92c20291c1a3331853c9b4449c6cf69a33bf7187a65003b79eaaa6f023fcce10727373256a39a2d8b021bc8c97e478d03dc2be6eb9af4376528d277713a3b834e82319da9efff73602ee048887cc840137f3b3eb77722d2dce38372bb53c0d69ebaffd72055b86f8e66c7cfc9281cd18dd728a99053f42bd8957e0a73b87df35aa60a9da14fc46d6ea0b8ebf058194b9eff2e0b8fcf4ed168d26ee365ae0597c44f7d1815903d34fe1f5ec1bcb6a2f542a647d5323692d6bb872fc1561beea57efbbce007f063b89cde4cc5bfc3406b08b40cd2300073840d7b6348374c956379cbd3c45fc8740987d0b690345b9e3e7d19e17e94008ea431897c1055f3b42eeab8bf716896762345f882baec81f85fae5534cee8e8d8c32b3a1bda06e0c6e09530de6b084906c2243db977218224a49e841b542a10e74a61b7183030d99af91369c5435802b3413a228e332b461e7388b3bb87aadaceca1346d40677821760d0633a600febd776d06058f8443321b329727a6bee83900ab956600d4c92232e9fd3b65380509a75f682468c5fa0112e30f43636e403d529ea62d47161ce15657a0a5ddbe2a5b0ed0c6295d5e67524d325b9c1fa25d435edb6204357dddf9d87b69229dc6b9987ba92ce60363f250d8c639964e8fbf988aaee336d800f6b4f89708fca48b5b912fa0670bbe5ac6635212f3fced124bb218cb4f2a16332db2e5e5b1b5954985fb1a778b63cba65aee648a9a299fcaa06e52abac1f83cada06038bdcc01bd50508a4b23472b4b83b8a8bda49c270d0254f904d335a864b9f4290a40da3a79094998d11ec289488ec36523e905f794a290c1aadc6e5abb0d5bc58cd465d58d6b8a9eae00ad86d795f793c7f44f37562a12331d925447dd70f5db52fb43989776d1a2ba2126dd8b57f888a614ebdf77bc73aabefa7e2a34fdaee4f02056b27114da37d6f80b0439fb6300d7667f38d6316e338c4e74b2390d9d4f7fccabcc32efd1cd61eb7866cd21c52aa34f02c22c067a64d73876b3bb8f835a266859492ce18de15b930f6bee23001081104a3bad1665063282cf0bf6798e8e952a4bb0326cfa1ccb2f673af61b9dc60bab7b95853633d4ad40d2b0d32def0e184c3138cf3632e160416c9ab8270ce6d90b9bc411c525b2d1c7bba9641c7e8dc77ace0c3df7126b5dd4be031611ec621b9fbd61a371f9a7fee1a3c848abec35d47e421d9955d452cf1939c84abe2597945c9c5ddfa3ec53dadeaf9c719feae37e4f1088fe0465dbde9c268211fedc8a371e27c55d4ec1a4a52ac4a27ae8bc5456eb35228b701798c75dea1539b57dbb1d35eddf155c9fe0890b7cff8f479238caa0fa63238738a8d37f3ccd3ceba935e83079f1cbd916be95dcdc74ccab0f8101f1b91aab607af032d0f4676cf382a19dd5b9fee08f19c0918a9b9164fcb9611aeb4b7180d1602f5affbef6682036b15a70bf020c3863e635694fc8fce6536078e4bd2f71079c30b9b7d9071a27ff1d245143c1c499757e326d5be2018165371371769447ea431ae0a265555e6f0f41cbe2e68274661811b969705907bcdfa88f48c2418e89fdad8fc0d4a12f3ec5c1e7361ae82218bf83cac6e961b61c7e135d9b6448e855f6cfc8e298fbbc9f2ca41ec32ea7be2acc9f15a7bf6f89bb7ed31244d57db13ced61e00404bea4021f4019c4f2e94cd80b4fa0832063d971334e1d53f7a6d8c7c30d843d875e51f60d4664a2f4e2182150a3669d40f88f139132becd8e5908fcb32dcdc02a556be84bc07b6cf0adbc05c61bc4a50171a823137e927e413f9b74f0ab49fd5c0e0addc1cb54043f78a0d7e86fb9cc193c5bad4bdcc6d5481cada1fece1b6cbcdaa01b2b2e53a1a2b30ed032767e3e1879d97328360408f937d6fc59e3df27b6c3290f8fe9841236a7a0443c8e5f62e3b4a87076f8e5a95c08b03b33fad9ce3c0bd6ebdf974e81308be994cd77bdde5e6ed55a178fbf436a945cd5a9be604d294aba0b4835e6112cb8ed4bc6e5bd276bbfaf044b68be8f7f802a24f7e5189e9a5d788e128016ed4210ac14e025ee85eeea5e326519ec78c187106d515b5a07aa32b8e60cf4cbace8b50fae787f832d6e292dbfbf194e24b694025abae14aace351a0fcff4cdc5939fc4790a1cb94dc99e02a36ab5e81294b59f815eee411f7464c96fe971d63cc18a97d863fe88767a2e29d817b5a422ce268e6e026ef37dc4f7ffe2ea299cf3fb750740d7ebb8bd511b82b06a8eeaae4da2dba7a3419904275f476a73469bfda95d630716f5514aeb482f0b4d6b7342d2612c0b058c61700b57e48db269eb635a48b81ecbc0146c292827e22e9ef38a36fb22c85f2e16b83ce22d41a170bfeefb29b460b6da58a581c19a8016de8a55bff98e338d5228279314a31372c78d1fc46b89f157aed20759a6497492d40b88363d7bc67dcd5b981ae2611f1068c3bfaf3bb139a5ec1b421bbd258c8f1b48c59a44e4e2eee965da657b49ac04771348690e23745ccc128e8d1d8435f8b4912914f816075b75ef8ef42d76dfc14b5183d22cd7b397f98097aff8551652f2ed344e949ece593a0cdfcac39208bc88db785fe2e90d22045463d33281008e605e9e07fa21ad1d5691003714ce9fb4f283fd664f7b39215ebb80cce368cc52dcd379ef2725c8d80027d9a513e39f0bd26f5c0dffb4d5cd03a871df30b979a6882a79e40442ecdcb39f47351ec613b00067696df2b6836c7bb7ff2e5a9848c53710742f190aeb675e0f4b667a0ca72250c4ed5a971629116c05921f5373afd2cade9041af68997bd3cb9ecd350d7c86191e2862c94b1ab6342c3b8fdd569af981b2098b0d0a5413e82032dfb10a8e0219c6b05be6e441c0e57205a594d3ac9eb74da2d1d245a3b252522bf0c46f29dbc54a5ea3979c5a12ff145d49647648d553400a9de026a04807682a54a6daf5b8aea125ceb631c029e93c76cffbc1726e457335bd51ad9268d10b2c92664cbbd03100e6e0eed0df7e62840d20859f3f63b2ea6cc7c0bded1af108718fe001264c65610437921448e3082812a535a01f7431ce24ba625a6f5e2f29f18fcb850010c542093022a521083022014c03471d2a47582179ce0c5042e30818b145348c162d20226ab12b0a0042a12ac8004a911fc8ca065890a96b0449182285050a0008ad3134d9e007d4ee06312810944500a811421f840c0040424252550e27d80041fe83c30020f701d58d281da1345cfc601c901b981243289e4913cd209e984d480d4806ca209dc449a4431020c3021a594524a29a594524a29a594524a29a594524ad9440ce515508403366004cc6cbde4235be06642ba1ce6e6c639ad2b775e5a319c0fe58deef37203d1860c419cc103335d3a96a75abdbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb15c0f256aa942dc201d9882654766220775c2081c1163247a868438c0e101b60729c68d1cac00bd6f0820117a8c1e50253a481c5440baeac9660011a544aace00c290bfc98a1c5880aacb024918232a0904001194e459a8c013ce20447a60a98400c250a4811866f024cc0402252822ade10127ca1cb23f0022781255da8464461b445000a2e50083cb105ed013e5ac0ed802c0bdc0d98590041b4c1800e226221da58c0fc72b4c4ae2b22ce90c769dc6233121560579c82135df2a0ad89ae8f148982a8c19ee7dd2247e0aebb355ac0d563d9b351edc60438a280e1b888810b173230909189a1222606060806a6e5a4d57a79c1cb8b8b0b5c5c5853b058ab16ac562a16a854a915a4522d3f2d2d2c2a606141a500853aa1e074029b80a0e9042653c904a5d227c5f7919890485e093caf2341d77123e0b8baa4d62d8a6da350d0299fc0dacc3211441b73ce10441bdd20984a70e4ad19ea4845c2cd1b5228421aa878946653f268dacd669665d915a6a6b536b5ee764087546b9ad1be994993f1e66ead3bdad992525ac2a19aacb9d1287d98651ac8a2b1469bedb1de8cb262d4342debc15a937624cb7aab6babd5aae5d2e2d2ed1227888af582abb3dc242812e9ab9b7f6023588fb87490741608f3e262b2dd3d5b84c5325db3259b8f10e1d2258bc43ac1dc04e3bdb8b8b8b058b70790c5bad9a5e5dd728fd4b890ae91b67f7bbbb412cb74ea8eeace02b26ef716d0c67665b0949f43acdd4ca4c6237d2c1797ee2c52cb3fd28ae5e2c262adae9396db0110bca9b7bce511d6f25c83c1ab5067798e44aa9b2475e30593b0dc24a552e9269b415cbaa447ec7d3793fa07e634cdb4841d50d158744025e62d301dcce9a4c15c7b8733bba93d49cd74cdd79a29a96837e7e41f589b3f5e5a5a5467e96ec6c19aa6ba3c7af9eab3f5d96a9d355dadcbdc8bb145b6bf5f43fe18db5d0d85bafc7c98eea1ec2f63b3bc82e75b36fe269bb7ff9ecd19fef5400ba31d06e6f9cbc1f5c703e676d7c9eafddd2331060bd2ee5160c346667f3ab4b778e00c6b30444368d2ead15d7ba73d0752300c8e44c8c110f6bc2891d8d6c086366c81bb174902095662c3ddadf1fb54aaaebbf908dc9d1edb86e5a8c7b671b9cc63dbb8f81fdb26f5967e0ba6e5da53f537832e40991b7397989b59a86b67e95898c57a01616eae2aed2b1bdba5ddfc0377178539b9850e180da67b7735ee45e8730efe9470c14e562f15a14f6248f7ef43ba5ba4757a8dd36e11fadc30e760fa5c11faeeadeb64753bb07a9222568fb01c573689dc893a804f227d5633c911d3b57a8e47542415f9335df35268bae6e78fb87cf5d5e7cb591e6149544fddf497475812d655cf52e8e526593d4aa369b3bae07479aa9ba44e9777120af523e71c9171b0f63d626e07c738a374f377b573df36ee51b3ddbb9b27d67c6c5a0f2524ae976a3b472812c9c203afe6a6871e72ce4370ba2413c7293a4f8c3cc46fe0b01875985f8f8967921f31ea10a704f17c8ecd6092ad032b58927a6b123003a74b46ed120172783ebbd9931421b31b341fe73c92471a4967191be4d5a8b771cfb66b1b57a58f219f2718aa150459acd76499349215c52fcb31c509232b38cb02d7ef48c1f59514a30d7900c419f314079edf2251673d24969744744684acf323427bbd576b23a9716bf44db421f1c481bb877ce7d8b4eccbb1f500ca2fc1c7f2892dace0222c8770760e08676782eba170a2070bc9be41c916f004d7d3ec24cf54a35fda7f63fa88f857ed0ccededae5d158bb12114082e5351df4353333d84391327bedd6782b12b5998b71c6470495dd4704f7ec9a96d5e86738cb7b379269ef3e22a49611d1cfee795512218f231fc1f2aa2f077733129cbd90d76e1159d32f798b489cdd081c0048118c2feb49010f7e396896c9996d52fb7c64afcf6ab4919d346e06cb3b84bed67aad5f45321edd1f72e729045e9c919d3d6f59bda4919170d43426a62b93b1ec4ccc98bc3103ca2c86749bc95cf4ac307dee1dfa2cafccc430d2c497f6e5689a69f6485a99c15996ad50019cd74e1fcbb2ec880d7d53136c7ae9d507cf788f8bcf66b5b934a474d3e7d7a36f7a7f3c4a3705e14521fd6c09cece65e7fa250d28c1a5f749128a26b4c0a46f5298e07a52b4511febcd24cc71dccd750877eef21ee9eb11a16882077f44f0e09ea1b867a89b61307773639c596dc424d2f693bcfc5d0ef95e923dfaa5d38fc7d7a34f7af6f1f84819e7c5a400e1d6bab3a995b2ffab81e7f1f63ab35aba19e6db3e16d734e675b7da4cead1718c7ad59a519774b59eaf2a51c484bb83a02d32abcd3416c3821a512b3b4a984c2104a5480a95ad4a7f5662ada7fb7a683c1dce9b6e6ee99198e36600666de7fbe144efc0e871fa8b34bacfc7114caa3d1a935ebf4aaab7479f74b312ddd7c38423ce3e1ffdcdbb4524ee3a193b2bf1d06b97b8b392a777601b382ca8d28de4d15abb8eb4d9d600ae766eb10576026f37d77b2452b543eab7c01c129cb7f7f46bf3d19fd562edd3f103aeb7c80fb8defb744422cced602e084984b95b4412e17a4dc2b49e7e49d913a6ed683cfdea999574a491f43c99c06b1a1c89c418ee72f722a487fd1a82bae9de2b5993e9dd3f9b4d5fe9740ba0f745894da5abc4c44614f976446cba31d2e4d245b1bccbc11263985119758b906efa2494d5cb598f5f8e8ab9d798b70ef3987b2d9b35dc3a771905604ee6e2f4ea30f6055ea50e63556fd9fce3852b427a2e5d89898de072342ac23d734f0209e66e1227979b338ccaa8973e3f138b8b8bcd30cbfabcc0391a15211d8542dd244e45e21618bc4e7a5c60d94da55be4bb4eb2db81ec492ad8c9a2e94a123a21b780057137c9cd74f5934898249aae1b24d10298259190e9ea385d47e8b36737a232f169b3dd24f4c6395d44ab231a12393b127891467dcee69c74b3dd39ed5bbcb92f5faf65af959eab4d6f67b066e3b691b21be5d73353085e9cc9da0ea6c70264d5a094dab09e235117c26c3d57959372ce2cab4a28b75abd72f513004a6aa79d6b43135cdfddb713e90576e775ab174862c9fa552f29f66b923a2fde93c976da45816afcd03099a1cf30f4598cf431075f90e85f7c3c5e60231dd2935cf50683446accb241db2b8b756fdc9cc89a3095fe535b3c18a4f964d695050aea39816693a6fc00c5645d0909094d2d7a5ae959656631a9208bda453fad80bb719e5884521e856505949e55607a59546bceec0b12386da4902cba22045ed1ae78b2a8283b65447565b7ac09a6af02d37b4f30bd060a99ac7aeb8501aeaf6d93ed3ceb97e9f532de984092067dada0c5d434252bc2f43923ca7890331d54709b4f30fd3f1e5cb603d482aaeda37b5f254252c865b228e35e5c5c70a81347c201ae64510d9a6b93f5a482a39427d00ccc04ca766eb7ddeeeeeeeeeeeeeefe7274b6d32f99692304045d4e855c6ebb3cb35e50197db9f40b426651322942f4a84b9f815d116995edb40a26673bd94ec7b409f44333037344cb0d6ac7049a4ffa95ed1cb163da643ceda2a7a76fb7687bb66d7587744b44aa9b6beaa26e77f2763a6f75ef3232e6f3d17d75f3cc0e223e554c915afc58d1464a84a4cc2b5993d497a3c6cf0789e324ce02ccdffbfd1ab7cbf5609ad192a9d692a94422c1b4ee10d4e9667708e775f6fbf6d5c0b1792f90076bd161674d2ccb135462015f6addbadab5bbdb6e1ecb469806566eaebeea562f62c2ab6f13a86b0541d66b9833a17ed5e76c65b5dbfa78707975eef52f9f8ffa7995e873f76693b6d5738df978d4bbaa8fd106775b4a64b83bbef62bd70ee74bb6d321bd174e1a825900fb1f929dbe659842c13467449915983ed60ab26e0e677610f1a9628ad4e2c78a36522224655ec99a441b8db7bf7c39b6faf9e8c0ea1d898cf5f1780ca7cd049a2eba955832968dedcac04fa0139007b45d16f0dd3d53a9d4d2f2469d8cc828dec12baf90ba09796525b5e890c62bb97bdaa799b848d3765f59efd582dcaa631dd2af6c4bc976e827107dd6443de54eefe2723ad567ae3e663b99c84cb6136d444ccf653cfd9238e66c88fbe9e3c15dd35173e5b8d861e9f3c1d57b3262bfc0eec6780e7c7790ab1d72597b32485cc6d361d6aeecab4c49085216a543faf539fb7874bd59879408434658068e4418ea01ce3e1de059eed1afefb54dddd4aad6ed1e575fc484ebbdeaa7cf47f70dfc7c9c5eaf127d54ab47cb10d48d487c7acb1d029ee51a91780a94ad36eb907aa79740fd02ef11261b3f9b7bc0813ba601d3ce4887f90677d6b469531a33a995a2b6836a034041f2e9178b4cf56aba642d2d86bad86cbd819be9667821e9c5d7251c4c3460eb148372c1625b6e48cda862ac66b064b8842f38b45ec0748ccbc5fc8c2939c6ea7325812daee768c595193ede9b615daecb70b5cb75ef0652d62f97499261298c2f070e38d07b194986a5c7619b343434342ea7a1a1a1a1f9a4a1a1a1a189390d0d0d0d8d8bd3d0d0d0d0d8d3d0004123001a18cd0da7a1c13438343fd0cc9c86c6079a00d0e0a089711a9a1b343668004033e33434373436342f1a19a7a1e181a6064d0f343435343ad0ec40139e0687d3703439d0d0a0a1f1683e1a130d0d0d4d3f710618c0edd6502f80f139ec8964cba80c645b01048e90c666c774cd1c3b3212802daf94bd032fbb7c423665ec394b5afc66bf60084f30007024421084b0673a621ec6e34c6e22dcb261d8d8e18e24caac288aa2c32395d2afbc030f58f42bb7325763d4af4c23e770e43dbabcc6635efda5450ac7916d212974c4ea2f97d7c8c1c60e73380d1aafb1b1c39ab778f8e13bc0ae430bcb69acdc393d5ef2d03c5ef6cc78bc54c23daae41226a18c178f3c48a07ee51de4937e651d8ec323cc5f1ef3ebb9c6e9e32594160d8c9554fae7a7881a367658e3f46563872f1d74f80e3b9c071e0400448e7376068e001c0708d6e377c43c7e08178f7706cd6f7040bff20b8ccc11338f37d2afacba2997ce3d3ea75f3976f8fd3d5819f3913e3f40ceaa4c56c6c2d8d8214cf812c4696cec90e6336cec70860f3821663de6d13ede7c439e79ece133db1cc6e3cdc30c80cb78b4f1178f371ee351c75d8f3b8ec3a3937a1e8fd249f7781e5612752895c89e1b56f274d8b761e54e0f616d2c101df67bb038375c6bedfb2eba6e3eedc3767324e9e6999ff64108efe61a2dd43e08e183108fef27ed434e06db1e5f7ba77770b03d45c7b0fdc236930ee365d85e02c3f6b4dd4374a35f36dea49baebab9050037ff6e8679dd3c63f31a3787ad9b695c6eae51e3a99b71ec489e7ead2e95f4aba57ac7bc2f85fa65cffacbcd2d2f3097b91986879b675c7c879b431d6ea6b9afb9b9c60da771f34d0e37e3c059eebc78781f887eed701dde1fa25f35efffe8178de3f0fe11fd92f19e7173cbcdac206e86713dc7cd33310ec4cde18b0be0661ad8cd3560fc874804de8c234710d70184007e000f3bbeb9051fe76616ce7db819c68707e0e699001cc7cd218e9f6ea641dd5c0337cbcd37b85b6ec681fbd5b650034d57bc0e96071f9f616910f11816871e876165d82536bc8385116387dba071aa430e1841c4c061879b5dae436b083a638801bcc6c70e35349ef958ddf091d271b30edfc1071035291f3e62e870736a5bdd252abd4bd46c95ba0e03d0e1661e5e33001d6ace13e472b3cbb301b46e6e7d35801b36ce1394ba59c775e0e166205ef31d687cc61043cce061881d86e06187f304d1b839f51943ac86a0598ef310c477780e420891034f900084800981030d2172b819e63384b821e120c410a72122071ad84d44b00040840adf3ce339108143040dec66d355448044c49871b36a63dd25eacd5da2deb0549f31c48c9b699c66881934e7097ab9f9e53743c0dc0c73d61037094f10006ece13a4ba197f068d9b714ef31c4c1587c720c5a091038d1cce1364ba597512eb3184209904701ab0e770978511a3875a2b0ee709fac187ea8ae1551cee12600f3eb86208f1173d5ca51e32363d0270738cbb7ae0e8f1a247a987cd798262dc2cb3d52af31842c4b81987bfb84b9062f004b9b8d9c56d84f8cd7f0f42d8f4709e20999b03f01838dc8ce32feef2e12e514b55c693711c2a8cbb70709d2728e6e698cb946e96b9e795ce1324e3e61f8e038c9b7db8eba10d6fb899c76bccdc7cc38e1adcc3f030609c2788c7cd33df71c36bd4d8719e20ee2eb1dd2ce330eaa75d62c34ec259b193eedecc75df0bc6c38e6576f3ebb89bbfbfbad7798260dc8cda666ebe7fdd25ea0d37bf2acb5d8204e3e6d3e75d8204e3de7cc359eaebe699d7b84b8038094fd08b27087533ea30583e1fde2536ece4b4e32e51bf7ab9d35d82849d6c32ee12a4f03c41f666fbbbdd7ccfdd25409c842788e309026f062fe3379f1e1e67ea082207100280619c1f7c08008e1bf6751bb6c601605fbfb1356e635fd7c9f61e6c8d1bcf8395f11d6c781d2c8cd7d8791a56c673b0e1675818a7b1f33858192e1b2ac1f1312c8c1b3b7c61e78d9fb1addf605d7eedead6a67edbba0beb7219bb7a6b0a1cff625d6eec9065574d70bccaa66eecb0c57698c552293471042b18653724f45c51037cb2538a268ac280414b3f0084232d6053a973b2dd1c09dbee5927ddcd69d876ce3aa93767c2b6cb13446f03e1789fe0d83b443f1c911a9dc1859b9b1bafa3d0822bbe029e710c780e21ab80e04ff762b4f9485cf76cc2dcb768e39d738139014c9cafb6f7511569b4bdde8d9bd2a88a3ce2b622571e4923d0a677669fec0efba30a9936a10070fa553f836ac9e81ac0d821ab43f9ece015105f37e201e2eba6c368a3f4b95383bdd7533d811c0e3821d3a6de7a4fb3e5a9e7644fdd1ced2df7b6a0c01c42e28c79d0e66390e34ef7240e4ea66fa6b64848bcc52f879038e30998a5d10f787e36f7d9d9c8c4ddd3e1fcc9fe106d6cd6c894b8abc46d2b8f5adb4aa39b6e92461dce7708c05ac5e3364e4887531ef5ab7e4a0cda6c44c3f5a6a36c108d4f9ffd3a9d9e616f3b67731198bb0236f00aa16600fbb96e614d572f65dd8861d758bd691f4ac192109e3f6cd1eae1cd007b8fd1abe0b73a8cfd351b612cf79818a39276731e422452c114e030cc8d68987bcc0e8e3967293031cc63cc20060c19c07811f462e6c9cc0d31b8e1c2e05a7b174e5cc8bc4026c605313053c0b45ad07a61c18b8b4be92b15ac542950a550906a69d2c272021614ea7432dd5402538904a56f041f6909c98bc2eba0e8b827b81a67cc7f3153e973d1bd7e3bfd27861988210c3208031882c050e549952fc4e00b5e808117ba404517a88ccbf8c705275cd8c20bb6a0051768218b29b2c8420bb280051660e10a2bb8c2f65921da40a2a482cf0a369028a5e0abc24785680389120a3e2ad840a2d4e4c3e29b42b48144e904df146c205132c177c5278568038992149f14e28c1a851244010a2480c21346f004294ba438210a2734018a2630e10926441b48947c62b169f31dc1b8b9c29011c3f3a519cc400632080a7af224063180010ca8a0e225274e5ef00217b8608a295ad00216b060052bd85e52414905a51494525042410905a526a526a513944e503241c90425294a52d4d7974a502a41890425129446501a4169496949298a521425284a50949e283d51f2c9e1bae838fbfaedf4251114a12482520888500a410904432881a0a4c48a9292d2078450fa40c903412879a0d40120943a20f312077e50e24069033e286da094a407a524251e28259e92133c283951d2c00e4a1a2835a1835213dd639c01e330fe6d91832dda808336b0e1066cd0a20a2dd6608335a8a1066a48030dd21067cc87ffd0300334c8e00c41667862250665800119e28c791b453e2ae28cf96f0c71c651c4e1c4bdfdfc0734e3d25c1737571c6eaec19a8c9b6fb0f61d4d1beb8af1e2e6189cf9f54c9b99cffb0cda99ab1d3131ccbdf9ebb9f9ebf9ca662478e5a2a48a5145556f23f02f3066fb8ebe2b2eec6785dec59589d15adb496f69df957ed1f967af96a61aea9d7d56e87db9fc5c1e3fd63f2b57be2bf63bea707e47785ee2efe8b3d22ff0f3df15edcb41c17bf20b82f4948e54cbb682203df5d349f764ab65f3718b9ef49637492d9bd2917a4b9ba4bf581e72678747248a4cc02a8b84c4299b33241aa3ce62919018754f7dd3cdb554bf8a27890a8e0800bf27ed9ac7e95c3fd2fd803a9c3f2232016724d8bbad6edbc047b55216739b5c18c6ade453f229fde0e9032b09c1b8d830a59cf1351937d39dbb176f668136f79d0d4153269fbb6ea6c32c6ad788b0f0d6751d97b368397b39d361c67ddbb6307ec68df4afd6f77362df9c7ebd156ca92cdc457007a4dbc723c678efde8ddad6d236f559e6ca70cba90c401a04c667351a15dd534a29a5ec98ddfa8268148de816603fb6e6b74758db3e7d10f9edea6c97a75727685e87d22dc01677da0742816c97dfb4fac9554ddb2cb573ce1989a048528c9466f4bae20ce38cbe6ced5401ed3d65c7a60c7e98c8804b020eb0b22c7f81994a9543e54992646246958bc44c4c9bd8ef6843b391cdb765f9669dbcdbfe59d54bb63b68e54ff67b8b05cf99faa817dc5791ee624d5f59d45356256964a065986524a07f80e84501bcc4195c5d7e2fd721da7039eb08600c42b681854cd70eb86f74e13e186dacde3fc51ba9f759a28d96f75ba20d96f753f106eafd55b4717a9ff5186f98dec230b89f63707333f885ea9e8b9558c8b4b94074f53bd03a2466c2a5255841d58d2b522ce277d8457e6843e4a6f7690372e0bcf7e2ccf9636e821a8f792ae790795bdee7b9eedcf3bc121277a79ff4b25f4ed4d489d3711d63539c6ca75bbb1a6c699bd8dadc6cf01d41a3b1c3d9526a124b69856cc699d9002b884423101001085800e10a66c1910840c8c2a4550574a8c134ed42e44eb4d1f2c4a5d066078ec0f9ef0a78025884103280b2043bfdfad14ec497012407a2cd77ed460542b4b9dd00f19581186a4c74783333105fdcb533d12fefa59b43215b46650ceb37c120e28c7a6b1770adb5d65a6b3fdf78aff566efe361faf66aaa75d61a5c774c1b21f537dbb4891772baf99ce679ef3a1218e466bac09b20ba73f7ec4bb6b343a84422391bb7ae7b8cdd77449bd885375dfd7623ba6d3eeab7bf3b6787d477d9f78327c9fcf7247d1202e63fef08e893aea7c446b56d9ea0e8ee0ebb6d24acfb3bfad5b9e225fdea705f5aa169578761876d443353f31999a3156ea870a1609f631370248d962ff2321ee106109246cb5cf3e2d905e3d9c6085d32eee2f946e63912b96c68e374b13c8685615fb8c85b7abd57b2351d522dc0d271fa06078eecabeecbcd8d8148750b0b2a74b99986bc21a3f0c81b3226a5b07aa56a39c5a75690a5817ca84f6e201af88abe77ea579cb1a9df605b7e2dcbad45fd96be81bab25c9e3f57cf34b00b6bdff9081cf3be8c1293226f48a32ba20d198638a3bba514dc317706e6e6daeacee5e6873470f7d5cd34b0bc0da406305f52e92e6a2bba7b101b07b26710c3be0c039785349255b821a753f046ef74694fff09bc544a6cca6d83de01764142d2f48b02d108cb1a6594d14833c2f4cedcace7fbd96c2a5475ca41cf4cb4d13ddeeb2cc59249bf72889be0cca261fdc829668c528a19251328888800cb27e20784f0004c944eb0a1a7cf80e30762386324831131dc18bfc08451f4028e318b9c2bd8e79805295021c626e018675cc528841b2cd64732fdd3e6f458336d58507780bc51a36f6e88ccdc1df2060eec08792347a4f1811d1dfe001224ce18029ebfe1064c882e79297846b17e0298391fad0c516814487fbb3912d6d5073167c5c80e718cb782536e7e40b6f76dc9212239b4a2dc7c39b9dc932fa7efe49252a15eeebd9c5c4e2915cae59fcbe9e5e5e5e5e5e5c5c525c646cc62d598aaa95027d63d96f697bf68355555a853ea3195c562b1585996620398bacb5d2ebf1c2ea9d4e59723f5025f4ea718019c51ae00eb6d9d2e613912d697745a79a282e5abc74dadd53dedd33dacb3ee4d52db9694dd04198ba1810329a9b12e5dfa0a9076451cd7835ecad2238e39324351490b79a57aac8f4888372da464d1af48b1d8e9e6e9f027ea7ded05f08d3a8d618bca05416fea05aa66bd1662af6ea4cdb6f59eba97b29e9110d8e2913aebacd4b60650859aa067439ca34a88b54b8953f5a9d72f47aa91e06d0da08a5bf2e453704dd400aabc50996053cb5f6e6ef9cb8beaaad32f87aae2d2391160f98b20da485db22e84974dfee089ba1909469ddaacbd5cfac89de8a2f78ee8696c524a63cda956fac7fe72a054ac53db728d1ee1cd67db623c589602f207abbe45fc62651455c7e0f4692cf5e56079963b32cf914acb7324f2a2d0ba167127243da3fa22399f3843569fdad3e17c01d843e9a4b6c6bc5a98bb703e44387b469ed16d26528b4e3a22e6deb2b91ee6deb435a651eacd3c1ff3dadd9b762da0e189f2622cf7b63c5b8bd218779c86d2e1508751ba07f9f662dd90d70d75d8099d4eb6aba21b4a5da66e37d409a14e3773477356eb191d4d993c007900dae038841f2860cd5229533a4cd26d3d2f864428c662b473f6315e91e73d522d86e5bd8c66d9a7c3bb7789484d55f44acbd173da65b1ded3ca2d387fb87ac025dee07a5211156f704a4af1c5dd2055d9e24bbb517b5e936630f94c8562391d616a857621522c482a854e01d32bb0cc740a0643a421e916240d49ad1069c88ba1875e01cb4b0d80da14b0d583e5f434c618d08577ef94fe46d60a82a97bbaac9bcf55c10d590e8a908fcc51d326c2b8ebc558d72bba02b69ebda2d455dd0a5ee6de635e5bb6351f31e711d1479cbd212c352831f3cb1153b18b264cae93fe6c26de504c2daa45cd691c373325475448a943129c5a1d027ad2a1fc8b04a469d98606903ed7a28f07c5b3b528b356109976ed6e6700338d71114f1e802f1ca3000501c7ef678a9faea2c3580a47247841891685880a281aed214debd12ccb3da3cd0c201271457d341f1f9e0d1c1694270e62b927493dc86f56c0af88aad0821961dc0fe680ca00d27b9307600d8e519e44c1f2f3413f3f1db289da8a16011ac6f94cd7cff60430a3b149e7d47c9e543135da451d8554ba67e4fd44a5d01813c098117e40859b26f0ae9076f0bc3c4205733f945218ce12913fb8a5a51ed52b2df5a8e59a15ed57608ae8683c3fafa74923daa7a3e5333d7900724c381f1af38aa8c4a8149ac511eeb825f56dbd2855fe7851a070d6831244ea2ff762fd5a5d9ef3913f78f57a6f55440650e2d571fa07d79e9e1e96cbbc5b0360f686ea07e20b0af99222be7ea64d3784d8f940763988a17cf5c0e934443b7709f3dc98d5f2dcd8a50573d663bc11238d98b7bca17e65d9095d6f88d28871668ccd1d0f721784ce0858be6591d870ae3db992a0a200cbb33c4abf285069a5f5bb47e44f4afe60ee7a5052b7a5746c08f58aa96c8dd2a144dd5a7454adf4eb51fb8a62e0046907cb7b728a511066cef93c487fa63ff399eb6c2775424cb09c363a33ef4bd8ccfb3adc0f9617011b02fa33b7a74c97ec29b2635b0f18a35f8b00db671ea44f82f1e2f24b40dad366fb18c0f90db7e8613cc2323d9af98b07211dc6d5e993fee2ea0401e9999b130464e6a4d9332361db0cbfdd49b1b8d24697461482b0d331e97971187308e88aa13c232c4690eda4abb35dc715450957f00bcc21816ddbf61c97fc8220829ebbf6b6394140647c8b21e36640d3250f545db6556f0b01a4f781b8b69b13542f10d2fbe6ecf48f6ccf7aa6ab7e5e71dd56bd480021ddf50244d874dd9c697463dc20a03ea92763325d7248ab9e3b7dabde1ef4dc6915b89ebb344fa32b5a3d24e62e31775b3d86703fdd8849aeebb4b46b31ae4ec778df4500528c0fe58c0996415c7d7118923b4e1f99b9939d704e99545e1c06929ef97633794f0d303082bd380cf9026b37cbda22404fc1f2e604650db482dc48420d7eb0c59dec1ce9cf1c0926dd6cca3d2780f42f0ee3399b3263b32bd3250fc36646f6850dedce84820a9e30811de9d1602d20d10c45f8c2067660338f615bf42f5af4b608d0df1e84f417bf226b42df16bd2d7ab51e9fec8ad683aa487879615ba9479836d44a5d4da84329a4b3bdd5fad1ef2381759f74b59fe9924de5e5089ccf34d6b7a515c5b49f2614a92a35aad7b4291d62d1219dc25d1ad3c4706374ca74c9be34365d4fe8ba8eb62817a350e183e5b79d4d49db74126258f42b4601aa8225a557b094d7cecd9646a5c317ce1d14ac51a11a35c2925aef9e512a823c41da3770589fa78f82e80a26cf125f9d90d10ca69084332021095bd0028c9e8b36f10a34b842062f580313b6d00518fd29de8855a8826919307db6c29d50bf2cc7a47bf801399c964400534b4cd9b5210fe61e51bf5257abc1372e621c27868d2fec8c25d9cdb676535fadac37e40d41394ed7239696d38d9c57e666d6df42633d2d6ebab8c84f3573f9386f06efccbd771e67a63249099687b1b908fc7273fd9478a85f2b28add5cb2ab542ad4e2b6fc5ad6056b568b5cab1aa45d3a6f6b46e0c989b6f60fce5a650272fc6e57c60dcfa62e6b248b76f8bc6484ada25ef15919660f9150bac29022b77d250a41e367846cfac22ef9e6891110dab58d6495f19cb4e315981eae40168c2f2892b3e78f2002461f9c49529bc18a968da29a594529abac6a1f04ba3469952c9740a962f9b0dc05a747aee29eef591d6538e63e22305e41e29e5be7d3ab817995bd8235688073bb0791a4481f9168f4b64e2af07d511f111a7c0c4e20b4b763065b9c42cd76ee6ae932490600a7498454ac1f29452cd12893596f2863c282f90b4c3d3e25da9528562d1a1fc8152c1f2140b7af30ca67f81da519af5625ed15d90ea0986f362fdba5e9117457bf9b45eacc317fa197ba95f8e39e9690c64fd5e9476c9a754f7622e6abdc155a8e6bff80b3b634976b31d673d9d2bd28abc222f4a27345da02e73636e0b4c8bf3795873436f0a6573b442657311783e65f331f58afa1545c2702dce8563715c2a4e20da86f3c1e917c7f96c4bb03c16525a37d318b8ba1964b1fe107582a56cfebc9bcf1240fa4c632d38e62e4e4fdd7b81419c9e1aeaf0fde5a0b74291587e8a239ca00a1cd580e3114c00843d4f23c54f47eaa7c76aa474a8458c95989b5aed51bde57a563af4b4503d9374783dd3a62fb999937afa251f61b268d3d72b9ac143b4a3aebdeea8aca705ea9985493ca86b979f0feda821f4d33bf769351fdeb93b833a6751a41ed28e12321b80d91bc2f232ed05af688b0256e9175d62c383084ada15f1ca837979395741d6c39b7a444f61ea51ebe6ea7233c87a7873834fc7999c4f8eb18c74b27f4ccd22456ffdad543a944efa384ddae917ea9d100fa9074fafc56a5759275ef6ae58e957cbbd2b58bb9ccf3c02983b231041c9c9463ce355e997e655415dce47f597734c60303db7e382690bd39cc22e9e4b986e98f260da82e99187e987e93379c32b9234e4e91130a5371399d1ec90934559cee7a4e3749ce676e40d1e798353528fe40d521549e308d146f5409c51246fd41eae47dea037461aabcbc71d8e07cb5b8fb0bdabf760f95b1a8518cabbb0b40a329497b1540b91c2587ae401794e09ebf2a42a2e97af3df5ac4f4e09968f2ea7b70a96da692cd3d77b46a7e7ce89a0c57946f37a462f364bfcf23ece3c650f671a43e14c63d905671a43223b714bfa452f0566381f8e49bfe2970385fab67f9b4abb9eea6a5534a30ea56784533ed0b7b4e8e57cb84903504915f29d107df7e5a043fd6af1a0b44d8451c143d325bddb423de2d3e56b947eb10cd529589ec556a1288099c6a28d1396a752a28d7e42f496800596f790106d68ac7a4ec0f25b18c05c872a5187252b47568e342a655e1aeb905b32ffc27dc83ce53c6fce4fe9d78cf3da14291d4a2aa55ff4da9743d3bccb310901e7d32f3aa55f544abf4838d398bc671431bd2cd2ae685a685728132c3ba12a862a943a346d3ca3e9921fc2925b32ad57a543b979472f59f38c5ee0196139630c53db9c0fe7336d3aa1da09f954a1963b29b6f98001cc9d5007a55fd98886ab681ffab6e8df097543fdd26e8bbea396b6a552da15f3649cf309305720bad39467275eafa8a3746aa09d4546f0c191d4684f53259e510f8d7d94c6a6468d34cfc833f28c80645360ad201be9db6dd54718903ee9e6b4a80f93e9923e31ae4046fa335d3f28d07465536011d6a2427468baa47c37a1f650a1ee5c19c080b3578ba24bbe7a11d6d51e4ebe5a4ad46191124059345d5e91e615c96f5540d2118e371cd9b28ed201213c1f5f44b4517afc02e26b62c19262c5cd4dec9b191a1c59113a3cefdefc744cef9bb8f64b8828d210c3888588428b18462c441452da158588a249bba2955761650162014e519f8055b0a0b4105158d1ae888588224a871183fface9b55f4774389300a7cd94b358576a8de9380db64fbbe6677816e96656fb74896e74a31bddb62e9a36b582208bf577110ddc4b403b81e28cf924e23ca29e899fc5aa150459ac7f8661a681bb28ce986f26edd3e1fc7cc4995d17e1c9832715782ec9bd04ed66379e24290d3ba68d771c1c890456bb24487448cc3da7bb2dfa0803b2bdde9c785bf4d618a3d9fcf1e2e3cc5c72053899d43bbf00e6e93327930ddf608f4ab4f132e9a5cf89d355e7add395058137d3d554f4f44101eecf25fdea7ef51c81464822266af7dd5b8174f766bafa95896823022102e166f66b05c19bdfdcdce09b20288eb70330b681a64b7b8c8d71fbfed1b67fdac434930e25a66f7261ec6f5b9b6bb0fdefdcd1e2ca15d2ff308b39cc10fd8bdf0063865210733117e63931979936303707e62e5c5c3b2777fc286a6d977984c5d898bb781098cb5c1d99c3dcc5d50902227398ebe404017171999b13242323738fdccb1c097671636e4e109018997b1373eb74c19a0a9704b445b8dec7dc7086f6f6f906675e1b441fc366fb4518679b8985d96e97e1bed8442ba5bd4d046528e2b4943d36ce76acc3db21dbe680223a6c02c23ce6918abcd203e3beb8b9cedc1bee767bf9c7fcafd106e6e6040181798c8b983b9139120cf3fbdfccdd8e156538775124d2de451cd7337da0d87b74facc9e222653ae1445e9d9337b66cee9f12ba9584be939ee5a1371b68736007e373df71013d3a5351654380e80dd3b8af761219f004a2a53366e76940ebf3b77b42b54805d54ab00258e32ca59ca483077b7338011cf39670fa704f03b4e5751d2e113c0e9c305f0db2e123a620feeaa9894cea25ff62fde1340fb9c617b1b8b0e63daa51350be753b8b0eb5dbf811c1dd96d2a1b6e9e8d8ec993e1d6a37bdca505147e9d777edadbdadd4aad94c9936b38703609653a660d1afd2b52cfab5ba766934bfb9a496011c8a3a413a60497482b80b0373273b474e974ca60ba60119bb73e47423a66b684802c51ce6590ec5dcef30f7d209b2e7ca153f3dcb9e26c0dc9ae9fade3ded13615bf36879762f7e947ee7c0cf668dc58b8b65d92b9d2d32a261954dd9aed5a3b59de51e655b32f65610e75ec4591905095dc0e282f274cf640f7ee76c660273ff6ccec1dc379b99c05bdeae9189a7927669079f3043933b7b60c08526a4c7af47f6ef386d8519f0ecc04ab6d52363800a269d8b623f2ba5a001ec1877bb488a0124ddd9335ddaf60490d324153965f64c265766cf54329b606dca15202de4148945db44d8c4e20b4b9ac0ddadb1c386d2a1b6693d0454f4a45f4b005970448216b0c0f4164d893116096dda11898476af35c42229a4f80ca1a41011933a94f25227c019e7ecf1e24cec10099ec7995a36e79c73d2a9cd6cce8e8137bbbb3b3ee25aa3122eb83eecd790eedcc368358d7641bbc4f261943772dd6b176dce8ad0e778eee26ab7eb243bbd6f577ccbd8f1399c59153c1d5cd605c71656cc3f70774ff7ce956c91d23392ee276b048b069c899dc916c919ce60c9969e04125cba497491d459d3712636d922dc4b5d7793f8ba936e8c61f66e91ee3ad16e07b227895566138c199499949dc6b3e14c5776731522e27873b076b7188039fdc29936759b5a789cde6000e648941d476e976699764dee4c2d5c6ba9d51d12933aec4b9d00b399556f76671cb86950f4819fd9d963964d2139914f0441075af829c21a8e224dceb257d6b8dfddfdb6465acaeecea491ce56b0ad00ec471a453043165911a2c05191e185f44b7ec7bcf9dee0dce07887b2a5bc59cbee4dbfe63358674768c2159c591a152ffa02b7eea20de9decdd2da06aab69fc8d7db4f84b4fa1a6db2d79be56da1db401d6ab189bac8e6dc9cefa5e7984e32dd9cef5cc81d7ccebccef7ecdda37fb7990e250b7c666ddc8380e7b8eb908080e7cefdf413c771dc3d22040906efcd7469d7c2ee614791f6fde0f9beefca9e6bc4745d71699aa9d5a6db6ad24ddf837ca57fdff7dd2372e848b0e94a26d3a53dc2be1b760f12c87545f6799e24d9bf27993765ff0e64964a2791a41593e99f6d6db700b08f2b5930bab67f364692d5883ad4b4d6b4298898f44bebb0f6b6a2b94f07888b1c813deff674dca6f54ebfeab537cf95ae561ea100ccb24816d1c7a20e632700fb1deb8f8917dba6f68bd2fa11d1d9d52c77b3cd48728e91c6f1d64dca2ac0d6ae24033835222c9c65fd0ebb6b166fa2abff8e714478c4177d10f1c6113fc41b4660f1555fca34373008129137e48f9cc288f49134b20d1c2f77660b4a027d8747f674184ea027b249bf66943c27164bfb24d0c4420e20292464027f12b212e849b4a6fe9cd4ccc253ca27fd022f0558183cdd1e40f024af13d3e5778fb04a2c9c33239df0d99a704e2738560073bcf203042c849f19e040f640eea0890df0fcbc8422da90328833269429382626b701659fcf89460e78114214d0dbe64dc1440b9cc12647904203403ad4e694213ad436524b310198a7c43acca0802e7078b381ff1e04fc77e50d220f1ebc3adfe58db059faf7d676f04860f4511e3c10b93d27750904bc04efc5fcd04ca683d78e6a29cc9eedb2fb29e66669d4dd584cde1dafaf80b5ee02d63429cc9d3c7b5c8ed39e8b954445294944847afd7698c6f29f9fb973337d382a142b5d79bfebc99f1ff9c3d253a8602358ff68ef1fad81b0566f33699ff6d9ee5d96b411c6454dced2f621419390983ea6c8767a0faea884a9ce3acf0dbf2d56f5177bc34f9675167b4f5b3fba8b0416f18a00ac7707c27a77738238fbee3abfcac557e72e90fb99cfdc9c1bae8e7df77b755a67b5ec6da1dee2deb59ef3db42712a55ebf2dd55addbe2cebabcbc8e0b17ab15eb2b795bdc538f30d2fbdf6d71b7f53d887ce941bea7e4b7ea18172b89a68bc54a937669e5d10e98ea21a962a4545d7e751ed63b966ac5eaaa0ccc715ac6569b6b5a6e3d4bdbd6f15a7dcc514f4262ae48cc45dd6f97dae514966bd7de3bf2c7742dd53df207c64adcb1ee30f6477779785a7e3acfcb597e80e06dd183a78307723ad8025e6775d34f3f5d47f596d30b84e5e5eab0defde46283b67f5647eaa4e4cd61dd567d8b1ebccc59dd56bd3f78becbb7a82988bc3add49076ffa7775828074b74549d751a9fa2d0f42ea7b9bfc0ea6b62122aca55ee2e1315dbee53c3ce0bfada7afb4d12965b5cb58aca9e0748b8db0132cb5fde0e1311d3ccfe92d9f25655f0124ac7469238c645bdbbfd656b21deb29d6646d6bd16b00e3bdeb80ef1ec4fb77754cf74ebf1601c07717f2c304126161fa4ab57bd4a26e04e64eed665b9e027f7a10d353f774c14798064ba59e53b7b7d8086339c99ede6253a552aa747582809c4eba0ecbbf6f3aa7934a2496d36dd57e90ef06215d6e28222cfcc3ea90e475be9b6e8bde54336dc0cebbe9ea907474be778f30eddee9f2e6c89f9ed3077f633ac9961ebf1cad1fe00b1061e0839c7ebade4db755dfff5ebaad0a449276f46b7b0b1d69115aa9c2ca224ae14221a118e553104d9bb6d22eed5ac7e614474d8c965051c2d2ae8524aa425a6c930294403f4cc03a6dc230945674184e9b664274699742cd15b4ee827659742551879af6ad0460fca4c22191472a128de610029f5813e92684de64ba345d673b683ad501bf6d07e3742180de74412a123ccb794c271da78b9836f4b6e6e991c02ecbb70361f9f6f98d747a734c275d1deeda73c0b35ced3addb3238199acce76d341ab830ac285d0b35cc876f045d407a167791023c06f07af43cff292d4018bd8aec372daaa9700f42c470045c0763008c876d34f56871e7c1604d2dbaa070f3e08e9e0bf7737c5a39a19ad112de8dbb373b7556f8b00dbb303a1d74e693a8c2f225e0942cc4e2f44fb7679946dda37eddb75b2b7122cdf4afa95abce76ed52c276b2d323203bbd08d0bedd985d934758462a3833e25de307cf767f4c97c4b17df38f7718c38d04608e44f1c7b49117122f8fa3654866f59e78598481361a0d3b340aa2da431178b0c48a2bb2f05a9a6eecb0a594f2e64c4a2b785b08c0c96d4568c195f858830846a4d3e7ab98d2a4084723e07884136881bda803680281138c601ba90a389300665aad5175dfaf164c67f064624504dd0ea0a8eea926a54f96704cfaa52212adc0aaab54da0ccad94c245a81a7cda77bf7b86bf67473b422cf7a897857d921f3a7d3bd69558782391ff594de5371a7579b338023c7c40860e67c3c8f093e55dce0b8e9ed925269272001043db038042600610a6c0954a868a2f286421a5658b516909ced48609a94af3955efc5095abcdc2c07f386a20de943960047521f1551a1a42b695529fda14d6d48b1fe78c812e0f9f911114fa71327903234e99cda8c517e8a80acbcf49c1ae57cfad5025b3a945c132c515a1474b260240b859a199e7944bd3861562740f989e51784c4d408ec214780f3912ee0c9a37111b9857671aa30450f62b06d0b608e44ad1e97483605b77a689f9f18471ce9e329f6a86df1884e5a404ca4c723c1f10ba2d3daf1a3b5dd9c6c4a51a4dca49a6df5d05a274dfb806c428aa0f32a15a5828df872fc3862bae499882850f674a88472d267890fd6cefd3091dacde00f8c9399a30ea5951616d55fe08b2c8315522f2f2faaa79e52bdbca452a9542af5926900ec4105cdcb4beea94f956a3601aaea099565533551a73ab32ccb2855bd095075d3cbcba57c81ac7b2f70758f63c2f974c831d1561e279b0a977a7d39f65e77c0973959de57462d1ef3abaf2e8dd5ca629d8ea945422aa1adf06ab5d274d05f1a7b79a6311b2aa55d558c904507048a850eb4eab303be3cc1dcc5f0e315713f68f8a12c16ebe5e5d2e39a4c9cbda22ec457eda11f88e1b6c5d62f1dd32b9aae9813e2abc6208615a8437925d5a7f690aa90aaf42bd71e2ab88b30ee3506f1950550bfe81562284f63dc9c02d58a26d5a8d42cfaf568050c1aa5db16fd4985f9034425ce688389474a01e446106dbca2186d3cc1f938e1e5473583a777425eac5fac2b6b641dc542b158bfa59b59a498eb7267db185d31b2badc4942b58290d8e511b324d013a08372d29f598ab92a8a420393ef2f9f46bf1819a0588969b5a7a787d60a8234165d5abd6d04b28efa74d2e72cb784fb4c9d5ece87a3026af5fde9e072f4505dbbeadacd5025862146b162443dda6c47a1504884d8c8875b3c549758755b28245848562114afd0a8a42c9695516c95221a080000005314002030140c874482d170389ee8d25e0f14000e8fae5a72589c67490e43c818440880210004000002000004002a29ce684c2c2bdcbdcbd0b54a4c046b846fd89d38a01887ecc336108c9f8c2b3a3050b1d980a6282b8ed16664f6f61b482cc44746a92c6995ab47314e12b2459eee7e91418b43267cffe8295197e21a3e2cd66d930e2a936e9bb2aff0d463c85f854da32feb2443ca5a2a4a82143e116212c0897efe1214738f08927107e82d83050ae6b085b46222e66e4aa573d0da390c5fd177058bebba493cef43c21d54fb49fc08dd0dce42e8e1b674c4daee102054874bdf0cfea3c3c3e18fd5779ac1fb4e2e203e3140e227adad0bbf0bda21dc0c6c7b023c4bcbb060dbb7bb20dd3497d20283a783541fe3331e53e462443c8391d40617a914b303840762cdd230172f79dfcb11fce283be51259d9b4fc4afee2aa52cad2e8396ad330d07d407eae6b65a2df1f9e446489e7812f50b45346350a96eccc3c91281cf672438ba89c67c58a660e8d9a5a192d195f239f44030a74677dc138d63624bfc37e29fd397e7d24043e8aff89ab9de9dbd3e39e7fb7b5454decb64b9ac661ad18de9a0f2afcb5534809865ee6e68764de409d060acaa20fc904d778be472f43832bbc27488aa04bd1087e054e39ef4d5fb7b6e7c3f82e8c6d7312a729c280a157d3aa76d0e27438e70d9cfa24448ee1edc7b3e4ed365747ce135b68374dad19b89f2f8fafb8a43b752fdc067033df94b990fbb5c3c24a1fed4b0c9f1798699d6caae5d4da1225db0eeb4608596fd717a8669f331cbd430174465ea24e81d7556c754cbe55c1504028bac1d6e232d3f2264651e46e55dfa3bc1a36053c16dfddfdf25d2c6bfc31c4cb085a1e4590c82f739fb3efb91c3f94bf10c0f14b8f8313b875878c5138b9800fa7b1519944fd2e1d85747f2520c1b5a1f34926200cd89b7506e473f8982f20620c6dbef8e84b6b2ecbd78451e9ff24c5f8bca3750f385b26b19f4824ef96ba9de07f6546d785383d84b0574f154760fc58da88e50f4e090ce1b19ed9113bd3fbc138be68f2605c31c95bdd49ce5e5cf748d8628c9a576b650df566e6247470358b1e37b3a0804c67bc86ac0ca0ec8ba48e3bc68608e142edb8d5e30592261c583e535bae7ef12f4b12a60bf0b706616cba0f3e755b65233ebb914e54b9646252b3ce204f73ebee22ddcb819c3ff989030b32f094cdd41c82649499223ab35a08e1b05d6ddf73a63b5f260dafbe565de804f325e8aaf3f96ee42873905fd6e77c63303ed5026782d48b019d555abd956497fbcf773a272a89e4a69b2106ec9bb2434fb182b32929e311d565fcb59bcc7dd7035100346cc91f9d0d0099490c06df6403a430c1b1a4e569d9bf99f29a9e8aa99c2385ec703eed99e5d050a7d4e5aba2221840779900e15a028e992657866be12a4359da85fa109a5db2f09792c2838324bcac25c69e312406293de836010a4432d18d1031e0353dc6a5de1c20c0c9091935100e28222ceab3328fa16915a8f159ae502781c1ae5bce98416bb21bb0fe2fc3115e1a0d6897691b97927853a3aadaf81274091c7c1bbb11bb6b2410c51c26b29dbc15e17cc02b7d80ec146083f171f1d5189e37b1e05eb0c51e8839ce620b62810fadba413826027d32b85958f6c04a5590e39bb0ca9d0053486cbdaf24772b6140f978fbc8ed0a22dcd70fb478bb356033ee9981db69e4eaceb96ab099ffd2ecf3ce71961b083e0a6ba792056f1a9a738dfed51485a02bcda4be7682584a81d868a0c42b2e1b5c144a177bf4a323baa0493577014e5ec2333bb0e63161c8552230ef702aa641147b980e590571c85a88a7bf5ac14d8ae2a0858104b1ded677f41b028dccbb5c05afc764cadac30ba66fd5abe306a2370d5b03ab90f27fb19ab03ff6a3f8c7d047bf7844806226767a667e7f0ff51b10a0d514f2c8c755ff0a292e8a6432c926f08c2100129e6fa7246fe51e513d4d7cf267aca99303dbfb0ca29091a0fdf642d5c4f4a63c28348d5d426cb6988cef097d6e257239892a3f2d513170e68d68d68cc4a4c15f5e0521ba4a3640a2d9871793179da4f4fc4bbb84107cdd0120ab63dd7e3a647b9615f710a464a59e4673f04b34ad3c77a88ca48575342f654043cec99291ec6ca37c189495d494ae76848937d4cd396cc42c1beb9fbee56ecf67ca4a9fd2158caa1815707b98960f3504d2e2cda0dfea8e3f74b6fd302cb1f78274ec201b1c5249683d9825beb62e1fc2fbd9dbeb3001663c2c2aa16706f6381d5b4af356e5c149ede6566fa2d57d669a512f2495c7cb75562eeae6cc81941060996751c7938c20e1637b29b8761cd15dd6704cdc2061b405a2c01b103d27a98eace63a6a04df74b51ccede13e0c50eedd6f7ebe04b4c63b2a578abaa28b562fc71eefdf365442cbbe578c187e43acdd37520ac74406a594d7e2b7c9a9cebe5166b2eb8d4fe21b90026acdb5f091ba68733b719208660c6149f24d2851e9ab6f33e53a266fa3f0a512c68b1b3c0f8802c3bed1fc464fa619cae346d261d90f28c6d33e8976fdbfb1929deaa682cd1071a105db49eed5877c3080412e38de2090764dc4d762680cc56df4d46f899b717b3bb960b8e84e5a55944b8f9d818081ff5bb087b9bdeead9facf31466469e849f0bf1408c1a3a7bae597844cbce2806eda1e780e3952bd7b827068c9e49402bb48cce8118b50ace07ee47abd6cb3c2b5b2b3ce2713483820da47efd9c217fd1ed153b255c391d78db8d363c6df17d8e5ca556ae614690d08111b026996857793512687e4f0308c2939441ef9f3a395662e5db487d7f7f9e4d78375b45deccb45437a9cd1878f52abbc1a3ec8cc92189466a660faa65ca09a4055cb345393a1b3027537160d01e1c9972b125823138c6701fcb96b068d3d90ad139827f6c917d08a748a52432763f99d4ad5cce57b1f213c88e22a6720bfe2a271ef65c6ec51889efbc8373295beecc013784a13763bd0e9f0da1682fb2c4619baf1321240fa80553590995fd8b8f1015ff006cf69c8b324a08120eed63130eeb2b0b2d58a8ac093e0a2180f70cf05d15f896aa56fdd7a37b6bb82ef317554c812494d6e559d478efdaa509e1731a03d008b6a40919dabc4833a8d5d9db019417eed37482784529abc9431be68cd01e20514c108922c6ebc77b1a2a370e483dfdc78134bc66b73c53d694316dc4c5bca11284ef5f1f23faa1cb6ebc33bb21292a762c6a8f3a23f1309a8e1fa6ab6acfe967d072a929f269e88333cd02a4a8a16ca80a835a9304dd8756279a752acfe1072ee7a512a4283eae00b9c88ba25694416b73e31eb0ec6f6b891a65a45c2ea46042737c679bad32d3b718843e0ad2c4ced83922cf5f31d10dee8a082762294bce7fc8984a9c67279bdab8c4e703aefff0ac2c39e1f0d719aed92440b038f9431ab5432a91226b959f1468596791f8dc64800478484aa2394cf0d3034500f04c1f2c7a0dd2cd66d9e35dd05151111f183fdd1af77a180eb9d6427d2f14be39a158d829c6be6dbaf14d53d46ed45be6275204843971e795568d036f9362210775ad7f600b0b00f3371209d443bb86bc293b1e93de82c693f99a337b457b70a916373afc3725fec9263b7c95ee505fc5c0cc9a35e60ad97e52323a91e31012e5442c25e5ff6ad50a7c0857cc0d61b1719d5c8cdab72336c9d88c1bf7a8189ef8d8d8653c6ead8efd2fcf6c1a9631df6c54b48961bf328bb716a20f8c2cdac0e61216598898054dabf697677f5576b2b2a466b351889b83ea4a7c07d6e7304fdefb5073aa2416eb90eff97f904c2ad802731678227e8812eef9fb8b8a90cfabceb2601e6f05b5c84d70385e60378fb45cc8666594488b1373399873c10b4856b4983f0dd78ae187b83b43abe6bc9c07b665f945ed11e89a7075b00120b04b26711100db158fa8764feda7990baeb81a7819b19ae6db913006e49e06e45d889afde72ab942d1ea76d94d832b08dc94051e3c46b0b5b38d364041f2ad1dbb2200e4ed87ec316fb45b40406429cdc23dc5cc346a86fd1eda116e86090217581f2f390752286e1bc9a5ded8d3851e9b83333e2fc7c6b53f90cc1c24a87ce919dadb9be4fdf51e171252ca236abee82bd96840f5282cce78f0a7c85fdb5710105f3dc38043287ae5b468d507a2a7bcfb69c161579e17e219ecb021c07d3be1ecd1347236330036169796eedf72b6426014890ba71d3a2f564ee5f5aec92b1bc77fea39c21ac1a3986f15d57cb2a4b34e7c45cab781dd119eb5cb0cb74dcb47de0a9c7cd83345531e7e59b27ac990a4e287110427be21259aefd21be5d205e1d401180843b25eb2719822e08edb43ed912343cf73f2fd8afdd6553b773173fe34bd7bcb4dfd22ce82961b3b8bca8ebabbc018929e32d5f3de43ea584c6f3b97af853a0203da987ef92f6d2ad63cf9031d74a06d4a8efbaf1b255a382aa4856780e6051890270c2b9cb509da8b79bace1763272d2c74141338517b59d0210802cf34c2b6b361b0ae8ca573aa9b8fe0935e7019dd410c0995b1f4e268caca915b3433f9c3a1bffdfe53784846b1d0d60dbd599d19877deb4714d41eaf1c51853f11a71c45e510f43c2a7c4fc18c1dc78e8662365475513ae7cabe156f457f0a6f6ce60d6e860298e6dcc0301f2b16f3dc08b9d4cbcaac1a9be790548875196ab60cd59a2b4d8fea1365bf476e694fd11d83c0e84540c7d4ed10be3f0d9d300efabd73eb8cac14d73a22ba0f7e1c3f26dd260e98f04f5b639800b52e200dcfcd79b96b3acd6b348d915389d03ad91090943c79257e8c9e89bbe7b73717ab0c07fd9ae40053b6d8287a42be72ba89c08f82c1aa187b3ccc78edff9ccaf0725dc85ef28d6a586e6b04b939822bc58d0a05e98fcd6c70f94acb0365acca9b3b403fc1eff64290e08babf587c89fa6d3dcf25fda088ea27294b2e0b926e9259e9514b840cb05bf5a7e4337b18ce6f2d08fc80dbd93f23af5d260e4cbda3a2dbf52568e468ff19dcd93bbf17e81f68e12eac9b97343a31cf94401d4cb8b6425fc5066eeac3207c68d320c417480b4df0985420c2c6e20fac172d6c46b0def34bde3684a9f6b809bcaa590af8a53139ae73b0ef40702320842cc53d0b17838a123c555cfeef0445156e144a5cd4d164cab1e89d772e2114bfa5556089fa7b498406a1d9602152adae1cda188b4fe6e3a4f81b04dc8af53a4b1b686d8b5b95e5f2d3e3579948757b1dbeee3684dcd1b4222476d824d919a1b90874fbd035c8d29a6f823f48c8b029182cee42fde706c1133ba611078fdf6d2c8444a7eea6031d3415dacf7e61d26b9ba2adf50130f708b21d03f685e02b6291f023dace918e2e2e28e258b55aa2187f5ebbb26156fda136e092ea75d094f02399d7c51ad96470ee4c71c1f0cd4b5c7bfbb49a38aa0ebe8c616a0b2f6c2fad5c4af65b00a34c060d576665750b3b7d6460723eb343dc2a5af48b1a40dcfd604c0a58b6ff24860b2d9ff8787728c69ec3d45587fda7cac8cc6d65cbe4d315e1cd82a3cf02432bfb829d69a1f8490ee86f2c5392d94de7a7d27b04ef87fd8077ce5388812427e4cfc3cdca996d4e4951621adbb9c91ee2771b71f043e4081a94167c66a34a74d329a219f64e08157dd239f71ca2137408ef95b7a139882354be556f1bd6ff595349d6b885446af38130fe155b6c3f2bdff85bb57a26809dcec3ec1710825aaa40f01212f3a038eedacc6a00dee04331477e4526cf2ecc6a45128fd670a436e0284e899affd098bab51ed23e1872d8e90698301978d2257647ce60c51de5f81e0a5867b16eb4c9f9ea41333fdf05fc46f95ddd6d79f7d4744194fce65cde29ebe54b60deb748a11bd210fd2e914c09542af3c15e7309c531c698bbebec054fde03748b0a60107503824f7a0d5445afa513311cbf97bf77d62622e855e33272b811573c6d44b2724f88ecd46027c5d4ef3b391385c527544fb1d2b836cf9313421b7f1a1f792b0676e16146b84302bda8ef6b71e92eae0dc7e2f894174c38216b86f464b8d2cf24d176144891e23f1c3c931706385d1b90f01384e4ea2edb549b238cecb375daf26820931474aa8e8d3c22b2e0bf4503a831d995bead98ac5dad8595ffa090a6a089e5f8e1ebe5000e2b74cd086f916bccfc5b7aaf494be4d22c78583d1f3c4af7d1359f7076564a151ae390569d0e49b79b7ed6534c51c2b794678e745aea14f1d6afead290b68f8556f447a1ab562121e7c21a6088dd3a1db043588894e0a6de972d23630345227c7cd8f954e7e1d0bfddcdb443de1f509329f0a46e102d51586f9fb6a67e8af3ab648bc848548e0340404c2ae4bbbbeea36466cd0e7b7cf3d25ad162304cec5a40ad0de5c72b3f4284043fc7898f230eae6f33e742245558ffa5fdf426951c88702faeb58d470a4ee8fd248e7d14dc3c9314dce3d59c5ff7174a40504c95ddad1a5763e5c00cf364298c16d0ed8e07aa78b51c847084a8f6cc407f036c81c0fe1ac437157afca0b1fd14d9237cd86f82752d7ecb4ff22f2ec94bfe4b04561ee5f668018c2da21ff16908d86a4a5d78ed14a346ecaa1eab8683607be34dbdc240cb1701d69099ac22b44ee6d9d2b3b177764b388bdd25f10099021b518346f25b51f0677b28e8b9b88e97420c4a7c47fa3640dd92debd3b3596e1473b863d82a004515e4045a414cb727086dcfe9adb2378772d57e93abbe50e860b220401f98b9208cb10b2d87c645feda72397aa506150dd0a9260b26b8493a838837b8f0eaf4a6348d9af8138266ec167061e04aed9820d92ad03a3e00e0bb39da2e098e96892da1633baa62a9317fe2402430ea3415df84d24f4922e95cdc7a7419d84120003f9b882a097a9e1d169f5d5f95eeff92fbc66bdd821159ae50f2bacb5be0959587e04a7cbd13adcf55053d523e73eae259d736d46119a895eef37b160ccad179f481a0df71d3c6bf6829f7ed4431eb80f9ae75f6c9ebe48b3cf70c0a5e33914841c401d0942c472c63ce33075bc2176e418887c573a9ef63ecdc1615fada96b19b19120ab01d3060e5a1a773ede37b7ceaffe9aa2562adb11a83eb567c3ff8d825206e2f002c3f61d59719c4bf3ec11fdf0e38fcec09d0f273c09514895ce7f2cffd2f38d01da1a8d6c2ee5f43fec3a293ac8d73a4508821b0085345f8e086d7cd8d381a6b95e3a871844cfbc5e7c11dbf500eb195953943a5bd1a117c0ee9a0bfd79d5595c7cab28bb999534859505e31c419925d3708cbce2ce7592ded60df1e215f6ba50e69d79a29dc50f339c55936df78ab2a383f9c4a76f8ab9b8385e3ecc9bd97cbd0ee9e432d3d8007f541f83ce71e1dda7780f20cd5776b30c31668c6c5925a697b532710f19980dbc871f4e6e3c57ab943d89ef2279bbc7291d892b7dc489528e251b179ffa9acdf4a68548d0614399c453dda118ad51534bd2117941928c3097a73b434f5c8ec947220152efe2f6d3ced8760ee276dc2f900158a87a0e39bc97dbf9a13e4de1f9c78e22b8bd48eb6b39bcb9c91d1ac30c229fe181ed84b9b12bafcc2b5afe46c32b63282b349d2e29b34a0d3a80c246994bac8bb1d6e2caa469aa378b582a88c9188f70a9c437e277abc2410b93e47bf94e68269eef1a5b7bbd23f58473d8b84196c5e33987f19e9c3ba6a8da969e9ab6596e8f58e62b86fcd2615279ee16cd8b8343c37469562c55306f7b09af42c1be71e26ec43784f6c9a322e312aaa5003b6ec4d2153b63be0347c29f1e400bd7c180c24ee87138a4abac01008befd7044c082b778187073b5815a7fd8af143973b3a81478fbf934b4e20df79601780faa2c262f54f2aa7dd804730385b21f1ccea5d815f45c21fc40aff380c24e5c0dd999deb9d63ca0282ab567747fa02e8c2f87eef4e64393f9aa7b7ea715428be1f6c36a0561263cd636fa79e9c1929a3fb368c755b95d561faa572e9c04e630c282fba29f1f2ae799ddc4272477899047b003daf522935154cb9ad9afee7f4a5fca201cea43b34f240e605027632c62dec6cbec85e1fec98ff00637427a801fc75cdf2e4b6e40768287e314db5c31397412045371c3104d29dc3484fbbc7696902d79dee9e0bd6e74201ebafe6967ccddd108e5351fac07311d5afebc664d55406487e87b876490f7d2f7f2636c042471c47f09c09f5bbc4157db03cd62d6ff4a708cb3f715d11ba17436b8c2e0f824e1cb13c09aed6f10b8815423038b234d07736341598e3b09efe1eb4fc450ac2fcd6919388478538e0d39bac3c3cd710d6385c402e6309077fb2368e8f6fa0f489bff3c00bf41312e4e800c92f2e8a127eb0265405c6031b10445aeb983e8b0f110b09fdf4d099aa686ba30f77f9c836764bcb58b124fbd3fa1fb8a49cec1b4ab068c805a496a1de0e17d9de8743a3ceabd5359a24efa9cd45e9bece224ada522d97f50924995e4c22bcf74f1ff1c6913f281215ba945e183226cbb723c88e15342020316d9dde570cdded88e6761c4669161d2e9eb84cf4da2c13e6190a52b4c9b350a1a2d7396b1c51a99a5e0fb880b2d650f095aa86776e8b66802dbb9721de57ea0896e95bbd5f71b146ecbe84bb87b674dd01e3c6de1e3419345ec03ad6048f1be217c76c92ffa63941ed47f880899198b70e85c9d8673002c1ca25a8fbbbc7bb8393077fd99f734ea54de112e2d2ab71459d30cbd293b5ed7c86ce5b60a359828af863d7e470c88e64aac3050c6bfd26c30d3ceee67c0dce9d158926cb587367f8d84a64f7edd2cc916e6adf21dcdf723d70a64e83b91bf2bd4b5b538be8f9ef804d3b3164c02a50b141b75d174acb40e803eebeb7083e7e933a7f8c59472da5930e0f168ef97fe85168347a61f661972233060c4168b5cac92212222884ed959cb0b09078d29e9d4d42b4e3f760c252d342983db05201d363153373dec42e198f4aa5fb55822db28e2a3e8fbfa526c99a6dd3702fc7b7cdb5698d383a907f892f33f8be55948af427283a3de5c9b93fc447d7766a670d4db3f67dee7e8da74001fb3965a40d5b90cbf9a331c0f0a243aa2c37da15f68202aa421bdeeb4ff53328347993d2fcb18486daa24929122a8fe2860333738b21c5085c160aad9c800e8cce5090a382e045d6def53a126ec738cbc938c3acdd4661d03ee695e1ff3daf73ef714d0cb8015dad72c89ae0359ed273c0a221b27381ee39a2415b69465655280af5102a47206421bfc52a8c61f826e39822d42a30460caf91e322d0e180a9da448e64d2e4911167f92f95c4b247da13e53123eeeeb936b1fa03cf0e11f8c0caaeab64e05956cd7fedcfa7671f6a63e7fecf2d31d4d2ab9c7d84211492b744aa881f4f152af4237014c9e92d2ed44786d90309d7d84e83ce58b9f12ae983143d4abbf66a551aaf90f72262537d6b28346101c2af40538b9bfc4ace267f8889a918542eae2ae072a1e235aec52449f39afe1acfeb6d2b263304b0fc5d490a18c0f8314699fb7d34d77806d8f1966ff0755061e7c022fdfa08b3c755c9d73e38080c2c7b3db1c3bf2e0b5d0efebc193d9958f52332ecfff07cbb8678ecbc1979eb0ca0aa30cfcd566f67cfbf8e37eba58d7d6ce7cfc83d0bfc937b6cd02e134290cffd28116939053b8ee48d2655057262ed9c323121a661ee17bde5ab870c7e48499551d7b0df108aa270e41984552e005ee81c410bd7abb28c0ec6392154b55f841a14c1cc4d7fbe7697d76369a54034b85275c7973a27c7843646a56bd469f9093a064b1a1ca86787aa7834f8ea1c18cc67046319a4be4c4e35f2b0e157506f67dcfcf22812c52c927f4aefa6187e7b313cecb47466d800fa4ff7442380b042eed38a9581d49b45736385173c311810a1d05a11743987737eb2cc19f6a6d632559bff578d1cc0510f29bd252738618f938247379ed329705294999a33dcc85e88d670cefa7f95b52c064c15348cd93c45d326de87c0498eaefaf2fd3561822ab75d4a2f5652f5955b51e5e77d255eeb5e58dcc6589505632efa778a5041bca1c1254c8c0c753fb58a93a6889d536ce6fa13f14d353521264ac68f9c0fb298dc8d636c807c3c25da695317fd4e8e69f05f122f5997ed56e0aef872bf835bc2578ca7461749862f36aa71b345f485dcc9f3c4dbe3ea37d96431ee5b9b0206c05c2c093e90918eb89ff91340f24ea748ce4f1f4d5fcbee2f66d8b67db15b07538a885cebed5f1e729f0c8fafccc44b4f12b35b9b241e0676581190aa4c111782870eec822453eb457fc58c0b40a4ff3c66ee27b8936d2e1aa836b40f1a7758e84c46d39bf9cd5b7d41f53364e6774d2d0acfbe3fd342a88daa6a7739ee1d00ec434ef93480f4fa349ab0768d7f9e76b1373fd3baf4833e652ea1f3e3f8ba7eaee41085f0b2bb013abf44bf918c4cf70f0772ecb6284de9d0cdb65592411bbe949cd6a4eeb1c94e4b2b2897f7560cabe5fa715f25942c21897076c6ad69bc20ed7253cbe82dc8bf85b74725c084a0d8b1f97d3acf0ef3a41d18e53b3eac0cab7f1d978330f908aef54168133c76a09c30ed0dd0e52135cb5b0d2717fdc66c35853d001a5f7fefd8675489d2dccb3958d585b34ace768e55a6e985d9dd1879cd2b57ff301a43c88d3e265d623fb384f652426977fb5300934d93c7c7394f16cb11fba8279dc7e25961382f19b6da5900c28d25ed83c73320e5c83ac449d048c231005c2cfc4e48873fd74b950bede79570cdf08caf71100ef9c560d95ebd7d937f563dcc09541d104bd51707a85eb301424f9af0d7c7a847ed3c77c3ccb5c402fc9f07c0dd65360e1306e0de4701614f1740e2b76d23d557b88309b76d909d50c5ef5bfcc686895686d115bc6a2b611fcb5fd4ae02bd1b1076f48236ae3eea06517a9644fc17430a1b6e1413231d2a979872f1a9a1c3ee23e5e1696a8839367ebb3d23cfa22d40a9b51662ccf622f8345acb2c08f51c9b558ec2818ca373e0792669b8c8ede0ccd07c97df29029a5689e5def80e6c840bf41efe7ce653a2b08c178386f6d041b41d3d90237b23137e0805852d1304d879f69bff4b03a0e50fdba4cbc4d5ddd670667083ac34248d61965e35d1e00addadf9456672723aac2c0ce5f475f7b16038e81dffd8adce49b6ad95087cb843b76c89f3c18de6d40f6494ce32157fbd24858e90fc3e0663ef02a87b425f0ed1e7aad7713a3f6464f441334163b565080888e4f11380eb5fd20409b0b03ce9e3d9ed8bc91f99da4862e5613ab94727834154e507e0c93e92e2ed8d8128be0ca4191c9fce213db3e6cbd24896e02263f52efa18181bc855698874c34acf06cca5b76797574335500a4b26083a17b917fd842dd93591210beae41048c7ecce2dab1552f63fc2c3672342cf1ad1fd8bb55b99f99978f766533d1694da6c1c242b35735c243653c5c6bfa1c014b6651f6114963dd1a32c89c182cd8901d36584d14f8bdb18bcd16a6849c6a1fb04963cc05069797b6aa5594ec209ad62c0494960a0e4ed7d9c25cdfad519a5d43a8add575d3a310e1049434735dba40b3c1e702839fc61bb8fb666b4a0316bd52e22ac7222bc4da3873172565f8073470f0c2b98466bdd8af4220b6f35c0ba0918e2d948341e901742fb69510003c00af6b29cdb2d3e5074c5c952ca5a776ab14060c081d9e2ba72ee3fa986bce48d7a36453741ba3da19348bfcc8983ee232bbc0f52b956bc1839580d8de142b104e32149e99007d25b1ac38ccd54932a0d9ee9c5f672b21a48083dfa69f4b0d882d743e389dfe2e3c332123b8ccbab1637d89628f0edb4e9f6213e09fe1b015356e5a87c10fc461c4c873fb790dd6d215b25c07a51f8348f12db9b2a6662c1016161831e4130e855d9400c7b73a64a5e7c273ef22316a1d8d254aafbc009cc01f4ec458b2283db1339924df393ce487bc792243802c4bd6b72b6ce147672cd5fbc929d2b2a62a53f8a9ec920bba84950566c111698018d41e771d26941df4f07f98db9f252be9ba3757ac050066f8c4facb96e6a1439429d35d087329e1c9203be5886e48f1ea9187af54ee86d6e4498afd7bbc7b0a494dcc8913a26e0ad75fac45dda933994cb3a0d7c46bb020ed7db8602d398543a7fdf246df932957d7f5de9b29b6963828cb890ef86c384537f7a95fd329884045e652f2f4d63418cf938a68ec311f44f166d061f703e256d102e8a4f22d4f9d4e0178e1962b7dd54cf0cafcd82769e399c3b47bdf3135412d20018caeb34fc1f11f4df7eff0de13a3504dabfd0660cdc0479eb72b7a96b8a58306b8dc649222b2b425175e64c851598e09ed0f9c8598da06004fc67bd9669d7c7b6ea2e83f096c873927b6281a2d506f01a646c039f81c8b9165880e7b3ce0f844b08b0f90f7048fa7c0444aa2eecc6aa083253713b523571e982d1d837e4d3c5aebc558c3937910eb148296f38f54a94f21dd3c4f7bfa77252bd9671f4a9dd44f60c6f1a272c76d4a5ef997a31245a8145a1d3bfdd6b221d569124d3a4bf72e490f03e455f6e10d6b40181f3371af32e6e86c652c62c1e85b7e62d59fdb8cae14fd7ad6f792803192409d0b2d606d3a7fe617d027b131da3e25e7c2b61b777fed03dd846e9a0d8f3289c08ea011c0a290ad5551792db6415aab8291bf52d17cb76284085141e57c04674a64154d642db27c40664ef2c548471e4be61166297ad0fee20769aea67ba180079e9e06f7facbdeb5a1f7dadd00059134e87ef407270ad3ca5b005dbdc1c6339bfff810fdd994494f281867b0b7c0e2df5b1857acc237bf7dda74c69a01cc7123ccfcef9842357e7fcc3ee2a2bc6468422403a008125ca375f19aceb2a485c2273af518bbe52cc371d4a30f45b6aee175b687a072e4b28f1887e85df55ba2805a3c502d2744eed162959a2a917d6c0c1e31dc9e1c2d38bd893688c233c8f49440825c6cd950749291426c7d02d64a0b7e424a3c853894fd6c2263dc4c52f521ff7022df4df3d3f8f0ae65ddf022c8b5e9290868aa7eecd7ba3a4783ac0f852669950a259a9ebd64861289252448d29b66e2654f905221e3bc04dfc598341799a43097fc06b7938946fe6e7ed2539cdf40efd270f8022564043e2a84db7d42030b0b6dfc8eae0fa4cecd62332da775e2cba8dcb40cba5eba63cf17e43acad0bd146ef074f7500e9ed54faa81b1ab7a5c73a2874237a940f7776571cf3f1d1d8379026fb6fd523f2c3f0bdb8a244b1eb6133a15033c9ef6903195ae43b9b21011c149618be51e42e6096e23dc2d7b3c0d9d1b48d0361fb308fe2b34d8e579eec0f92394095014cda4a1c7e915edea5631d5d43bc114afe566a1dd20069449c2f01b5a0f282593863ae38d2e6a768a795270e8eb6b36d4ba02953e490f2ec62324c90dea9dcf4e58e744fd2ebfa1b3d5d139af486db84d0cb63bb2a10f44be276072e5b3a1cf7e7a9d45267dd44ca825499b50fca8ec1493bfed9ac545495baa7362304baa7149ed5e3fa73bd4ae5c1f985076b7a2804e217fba94dcf5e92e5b82e201d0937af85040913d2f0292f9e313bec8c1efdc427af7a4df77ce8913645af0bc59578b8080778829326ffb59f699937a793a92ac3638c1a3582942324c6039a2eb801cf0612cbe648aa1e98c776fe3fc48e6bdc77f7af28dd3225717677deaa3e4e72d874d5105f3297fe91120dc12c4b853f6ab9988325e0215048c9ff35f94d094ac7359cdbe365d8e85176a3d03fd51149573f75116c90d76bbf429e53e49616e21d9885fb9d7215a10e372c7e9eede565d697240b479e3fad1cc3f8bcbe9f5f0849a2e6c5fe755cc9a3b800f5aa932525d6b21f5417316d6b9823eaaddab1b872df66f2c8e026aecfdf5ae55e4b4b3f027ba2aa6f4f93a99e5c24c6e33d371fd2bb6666f132e34c824d9cb3cfe3f603609331b44703c9a0e6538bed0cf375ab8b46353fd99fd70a29849ebb6b5b1abef299ad338cba43e6e4bd3550a14d0fba7c5415d78277d736bbeb4f466273e41901559e8b616704a7fb82ba01a9031fc21883b50573aa2e94392387f03a334ec6fc6c6dee61c1516bd87d098fc5da391c8ab052d1fee5b77b22e1905eb6c90ad4cbd896401375ce21fd5b6bd244c1d73620ea0ff798be29802c0544fa09f2d79910b44ae0affa231f408275c498020a0dc376f86f5f74afd70ebc119487ecb131b5b75cacb3c91dec0cfbcf15ee4bff09f01f49419b0ec1f080ba90b141720a3c80ccb2ec0ba54476d0ceb7c218b676882d457a916c36d9f941ba66aeaed7e6525b07dc1e3b046972242ef49cd1043ef15d1cceec7a0a53b6ccfcfe3f0af264a712b599525347fc822745ed0d434da549bc09a2e1ae96ca0de957d5df2ba0b53264c6c2e12c7363c61a3145360b590fd165bed2d873e0f5ee3244011f3e2040010df0f233846cb41879e1b0065c2dcf737461e1a361adccaa95b3ccfe063629f74307f01522aaccc3d74cf791cb0f2c5b01aa66c0f785aa109396687cf2d1b0cbc3486a69cd1792d8fe78de1b89821014e3fd3dfc335a1f2708ba2ae8a64ce447e8a67ec239067968acbefa10110436bf87270e736251395a0a307a7661b8bd72f66bd913433492caaa740d4895934ccbb83ccd3411d344df974da429b17d88757114db9303ae6fdbd6f53b04c00bf20b0a57f56588f4549a0867e70c489bea9a00d9f5f555dd2a3aaf04035599738a9934c852f1b5ee7326048dfefa8b4e212d04d107d8e6ab5c6f1e7c8b22a9eb676b22195f1fc415ab512ded002f454e161d8135dc378e249b756ad8ad8c3df5735ef4a674800ecf14077fe3e027a486df88400f9a8cfcdc2c1e1174e9a0ff45e7fbf9317eeed2dc2b40a3f537d8515b93b3d00a373cd8a8e3cf2df822b0f2abe9f11078566c2881f95146c9f6546178e67dca1d1c4745230a4cc8c3f68936f60d89f3aaca1d840bf718a0fb2bebcc0103a53ca65046af65626f5081064206520bf12527e2de38b162433877abc94657d08a588021dd619ba7dcc61a49112dd644d4e70b742c972951fecc70388919fdda86d83a0d667f9a841b816044c7046f71c385da17a74a123df487716a65f3ba80dd7463c718d1fab53d279499c43a9f37edbd15f00783f1d6c56d1bdb71e4a6b5bfc5c420abe174f38df5083908a1f4f74b0b146171b0681b19b1757517f49afe936794cdd32c647f882b53fa0c221159e07995720e1dc997af123bd929840c26bb8ee0274dad663c27a9c3793ccbcc8970acf735932e9551475b3b7d86f9114eafd76bb2bd242d538134ad27c8e3e4838c716b0ec76852be101892985b61c1d041ad58abbaed38a33a01a3d2641da4854a41658052c88f0f604d30aefaa8491b23c1f2859e93ea2585e730893db8fec8548cd1e27beedeb825405915ca2d60057db34995437ab7431d44e03d9abc013271bf07c3f6f3577397516cc706f23bf94c4a775415eb3486da4ec74d2412019bbddc772bc3c0ad1419f74e99ae7cf4a80e2b04a6d516ba89b06fc9b915c57c2f91d37ed7bf875107cfa5e51a2c76b13b28c24931098780110e2224b19f8df5901fe313e079a7b06d79a136883f4f9d4a73534fb71d726a9f3bef71603f071d6d439e9a64f24025aa9587f661b76ab42864296085f521880cd810aed9f0d650b10c953b78132798266a19a7268e86d7f24c8a65ae114c727e62afda3c72f503029182dfb9718550c308627400349d8002b2b99d8836072b1946ea85df86572e712bd80a9d605c1f51438df2a8391cd02defca6e2304ce6087c36c1af94c67c75fe53002c91eea4a508988f01258b7c75b6c8241a5bbc61ee89b4b963d3c1758ade8326583daf0b1de3ad4d33f4c6a8b0b1fcf5ac28cadc519d9d058255f372eb0d77824ee02d6ec5395a3e9c342b410f9ea6b44fdc8ea467580bad7a8658533c82e3335a8a04abf0ae591c21302b8e7a335ecf9dc39d7c3dc3848cc661e3a2435af89162630acdb576284f684296bec0b526cd505713315d73e8a82f270bcb0dd9920e2dfa59fb64c1dacd6540ce6af528bf692efc380c53354a9d753eab1ecef6b2c696930cbdd7d4e100d4725e94288b46b459bde245a9a102ef1487c1308a54c2f48b92522d5d856e8c02921d189ce26e990b9fda5e9662315a0e007f2195a38872ef1c94a2a9c374be0f27c4c5a75e94a8a586cc49587c0d815c32ae8550942eefeeff14d1cf7d121953cb9a43f1067f6541acf0b5998f765eb4d12399515403952d1c70835158882f3d9acb81c2703d8a8fca468153595f3b76db6b40512f40c03e803afd0a1bf1138dacd178895ead3bb0fa7c93eeb79478f361a1a8154e865c13e1495e23f971103957b223145a24d6c0b28796604406f2c1d8947606a14e8d10b1c9fd68707e8a84abb51a8b65592fc8d2a94178343d5a464400c14edc60e6c4c19e3fd466b1c24c7f34d3354db59f5b0b21b034087ac08a1fc474c9a93829e9d003e0313ac4b0052c8c8aade7834906f94f8610f00de822f1c4d71df7f86c447c7d8a6fdb46c5de738705754ac1af3e5c309574052d04d1c1a69ebc971b0ed05cd8cec97a47a87f8f70914a06df2a002af91a26dd83a36cd562d28b7084cf2f009995bc6c386619c6a9e5d915b53a0dfff7bcc43fd8aa5fb9e7c7488362fc081e697b9cb9e3bf7c4d6c84e663ea1c3b5eeb9853d99a1ef83877d017c064dda720c8d33680755393ec115d316e2b18da96c4bc9ab1df5f70cedc969a17e2155a450a470437079b57159f6a1cc8a13b4af811e07bcedbf40bc410ce6139cd704571a25d5dc3d628e96e1df21b5be0a30815a27fd17d43d3f09d5f6610e6008a331bba7a4a70c64aa9f3b4d455ec119015fe874b958596f1012f4ae4fdc80f5b58e03c979184b2823d46cb9fc0ec74a914967f52b6565964aeec99369c79d376214e650f7c57738012ed1321f027a4dcdaf28f0032ef29fd358c864836c3143d0eaed27fdfb7031da8225feb95a658bd42a32a0bf655e2d309ab091ae92b50420b53e80a9ffc275d4032432070dab398cc57ec8d0f947dec97214618733712bf9c63d10f02513507ca4655b78711630820d76cbb3dc95e5d8f0b4164b5950fa06590d895aa6808d4107009dd88abef092cd9395154267c42fe9f5e69c31511bd5cb7d32e098ae1436bca578bb1d8f1050450d4a524f3439a1cd3056b4da4d4dacea61b95953962aafae2c6a16a4b25c1aaa2f2ca692684eb4c8457dd43763e515bc241bf3384f887ebee92e3432cca1f8ae55d91e01127df8728b83580ecb02f969b982919413f7d94f37cc1f2270a995f103848ae9b5b3a9c18aa2793eedcfabeaac8f8168775ec111542b5aabfa5ffb01aa8b35a74d4a56c186b9fdb95bc933afdb225ebbc7f785e36f610ba9b6e4331c69a5f35c5e8000a6f88e67ebb4769d7379847bbda2296ac285d8060b3e6798b4574e7393daa345f47538a5d487b71196f0176ef468c0b8b38416ddc5e1380b00b058577cc45fa022f51c7f8ec7561cad7ddedb91b2be08c3e4b501e2d871b57d30284d06bb2a1eef1063b55a0804de02634cf9dd9b4f737e609812e8257421f736f2c162995dcbcd590c7b99f8103808cc7a807f7b99c4a551fedc4f09df87036f0946b10d72854f7afe55ac49d0cf037992873f41a831fb86f630c9828f7d49b1963dc487110b773ab936dd56fbe9499a97bd9fc1c04a22ccd6174490e88166f2177db86fc6c6375db71f77f2d88f0012f0d9b6380e6323abdcdb502629f997bb980ab0ce901fbcfe238889a0580d711715adb065c09e934f818c342ebcaa8f4a1de00c54f72086beb8c742e40b714c58e611dcf145018087ea556ff41d506046304225dc12773e5a901a4c486215aeb9bd84cfcdc833016ea66198a7eaf2def8355007f5d59ebd0f04fa02363d17d5fa0ace698a5665f8b77e63e7ccbe5611525032ca80bea9e1d6f141c5c64207031c13212ce333908cc15077ad31e06a0a9b660102cba0d4008f844c49a018ce88d09b4953ee286129826b6c1b57000e0586d9b0025db9672527653d90a4553a6d45b8b4543ab08d3e4f17e019118f2a1bd3f52a0e4e54fff3082539910efe20245d5e5e8104e69a8b171b50dca0275a786f81a70ff0507636039d094e77161c4077e29f0361285296fa3f32e5d992c2f453e0af374781c2808a05f6162bb24902ba7b3af4005da29073c11bb0c5d0e058c08727655345674bc0e3b0340fcf5f9e6b2dbbfba723028d1bc9e82fd1a86a56f3e894f3ca50331d669f2442235750c69caedf8446fe87980c28852476c166c8cb730c906970a563469a762f35420e20f25a8fa3a2e1fdb57ef51771e274a683c7d8c68f71bd05a2c4b0ae20e23d0b708baf237eaac4b4510ef1da278adc971ddafbd108b47a8bad29a4aed56d349dbbac01be60da2d7dc14d111b21a2973b16740ff9bb2ccd2b14a0c9b6ee37bb522cc153bf9980e541ed42b5022a9e7a9d0079702005075f48ad0ecd58805520ebf3129943eae1596490278f827e23dba5bd769f98311aa34408e6b7dec9d51141251b8bd3e294f0ff6bb8a4c62a23dc09bb7a977f7f192c9ad85510c2601f331563da175b31e8523da266baa31c3f2103866cd390ecc7745d98deec3709ae4aee52759af0fb53df5b8c861578b09091737aa0ad4dfbbadd34771147386e68b7ae19067602ef257d42c640815796315c51ee02db2dd8136f0882ffbb492babc0f1c887a675a95f2c8a570e6157085c40d98d9c706a5aa303456999862e71b29e9d744cbfd21c4e449a4116e16979e18e8d16140c13d013337f4547781d85e1e68efd9abe1c8cbe9645a91b6b3c757a5637afbe4a2867731feca9657f213300cd555f9b9232c54aa927bb2c7ccc9402c38fa7fcda5f6ddb6a1306edb511be01fef63d6b7b5ca7483e64670e818485eaf1d3ade97e6116715aeb538c833322c6c65f9f59da6b8d7f3db5a25d983f7180830ccf3083075854966ab6be5e4d6f2f9610712ddf09ea5c480182dae40b573bb00ed22113983249866bfe0acb9d62b66b4e51300481cc83a7168724f63f70660ff0e60462b679a8fdde22c00a5624774bcff528b9b8b6a1ad1cff3f4ce95e68fc4a056136a69a8eb4970c32401e6989607f0926f4c3897eadf51449466710f4674d9a902b1bf7c8accaed7458e882e48232ff5cea8c5121758772c7528ac527e01755819a9a2608e0b89a6301623463fdef01a0ed1c49e2145ad7dd761d905b9dbba080b433c6e2ba4d896add57db282ff82b40e65de2c2adb4075a85bd1eaaf4c072941b01a3f17fec94de55fde554c1c36004bb66d241566d1cca106a166456ec84e2a01016335a7dd33226ac8b35be1d06a27db32f6cb09f11fb93f1a579edf5c08d15eca1f32bc548ea2c1cea4a479ce806b240bf33372b6af634b25eb668f5f44108dbdbb2abd2e76536bf17454a4ba464953a43ef607251224d9acc1f7382ea584feb14be52098d14f2ba4c8ecb2f1fc28b6c77f055fcf36d44cd460ab10cbb39a6320607089376ad5de7fee458dec240c7bca80c1456bbf736dbc4c2dbed18251e1a8976b605e960f34e25bb54af509be9b25cbc52f0923c4a9f72ba1bad24141acc6a71569edf50904b8ce417a83e26c69bdd06b4112060e07f6f1019149fa66b4724649ac094174479d93b0012dcbccb10725411a38cd6eeee6a14a862853965ed0998ee04d95c9ad3ba729cedece2449abbd225403b511dc1ec0f3d0e888eb286c3cddae7da0c3d64072ee72fb77017bd24afaa57b1b9cb4bb2197e1538cfe938f6bc994fb3937bb5efec2feb0d284995e89a884791b9419f107fe36b832aafbd7210bb6051c0290e2c580093c5fe422ac7e03af30ca23be1b140807aea111d96f1104d4fd528749c00572020303422f8101c318489cb5d9ceaf8024a7032c0b3054f37f720a3e9e06d928e69c15891279472a00680391f2c9955c3cf09216a4a3003497b41c75c23f3beb123d3c299f7655d6e4395274719df3988e5acd2a4e4167f22c20ba08244b4e1c0cd9e131e567d4c4c8320be2dcd0c70284d6a312b393eebde68209502fd57a8609210b3a2cf7d53c1314ea1f55e3e1641b2720523236ffcce40f446c5ca8cf3a62533169b030a98c4828e31077994d58676e2a4fef33f70cdc2ad84bcea217f45de145f63b3169ea6a53575ebd5b497d8882c06956927abacc44f9407c16fe6d87085d6e257538c47de483305f2e65677717523eb8e282384cd805938f3159d8925701bc05f2d035100e1cdbb1754af18155224c285b183a4846b1f5df11342954b81b508f4001ff02109c78ab59b1fc77357cced815d4a3ce405e2c6e677b837dc42081acbcd6c386ccb59cb0836b25100cb92034088e2e47945ea513abcaab83d97f18137ba7e91e22ed39e2cba22944c08d11b4470e4b94a5b83004bea9be6fd0a062eaef239b050118107ed9f1de4b50742bc346809d10686c47604bd0bdebd17116af98700f241c2509901a55ec9eb325ded0c78e02c1af677a9961f82d31c30921ec52acc24d84d095c6db5c6c804fdf559206af510ba082a18b2300a1b64a8a9e8d13d0773c918713d89f334bf4b2a89f8a2e2fcd836955cce02939a1f74ef03aa40dd427249ac6adc7d8c018a1879a6564f05095c1cf8aa8281c152da2daae5fe9959e4f483e8487162c82eb3a5e7071482be461b7558350a361ecb044921d6f3a7003176d1d10d21daa8cb7e1e5ef4646a10cfae2689dbb2c090894ae2b9b0bb2c460d1a831e67f22e4a6ea7b06b8af78fe4679318e9f16b9f928586f77c108f371682192361f158e4fdf51aafb91e69ac960182b34b2b9025d6619daaa4d395d3f043ba5e31e42296b716ba081f9eaef110e31715c311d7e3db03615cb03c7bdb129b0f4da5dc6c24a058d8569731c84f7b62893e5d67b07c811c2eee542e6575517363661e1e818a23ce878963b219bd698983ab69b903ea940c31f5001892a0233e879769fb116d5152d85acc1347db307de2e4f8d2b04ad86cc9b7445b4843dbdeeebe48269428ac6490e5cf2070366e2b28d9c95cbfcd07b434c615ae7302e92482f05e1b0bc922ad78ce5e566fe8463634bcdfef7458d60e533dd8177c5aea9929bd18d9e77d1e93e635397a28c56898d8717b5da6738944236772c52403422edb03407552bc82a048fe759e48e516e4c9823b30a7d95825049330c7909c01cec7ac9b5c2c7997818078cbd7f309109c809011894e811708deabe5be46d0d77f28b5fa74dfcb65860405b32ca8fc5697f4271b058e1d9942243869868ed1a88d23f31b680bc4487e532c591e0255d2aa37d6829036448b4d42ccd80913a19122b4bf10dd81a7c8a695bc80a4b684c56b688cc48759edc5a78c8c93358c9aed39449fbd49d91d942f4e9e8422c0ad40eb8de662eb7ed78b132ba2a69e0aa7934aa11c4e702b27a653c11c2b23ad3bf140e6c9007534823fc980ab40cae8b8e616aa56ec588796483ddf0e48fb9049f9a6e2b08ff9b36bde18e7a9caedaf491497558d10e2d1c6a973b42472cc9df96b4aa9686ab8cfab1a432458e1d50aad683097d60862986b3ea0c2e9aea2e5b29ccf8be778a7e348e2928de33392607b325cd1ac0202e2abbaa3c1df2a60c0c47444167a8a8df3b08367c835b1a3342f8ad7ff0c8073e9c0e2d6bbcf024412fb847f152417e7c7ce9e7c7282ccfd7243a6513392ddd553ba87458e78e025888f951dfdd0f9a8ec215212fa56d453ea54063f4b34f928f7ffa079237d968a7fa5449604e9e924cd689982fa4a650ad87f1a4bcd320c8f3f2ee0f2d94fb1770f1310ca825b61bc707c70c871a01fd5c5ad5f66b074890afba294b37936614f4688fe5ee092984b88eb89feb9785e872b1021a29fe40134c332d0579465d331b7904c2d6ee68dffb3d4a10a7563746d8ab63396ef124f2268297c4ccd6cc23b12bc347357e5aa6f2e99d32da63ac362019606b8bac27b024f7357fd0105c0636ffd7452a8f78a004afae07bfe398c06d80d4933aba751bc0d39be26e0432b425badbc0b166a90910075a8e9d6cc08e236473c9cb4be21514599a2b503f6b0fdf55e76b8ea2aa149a1a4f8c0e6cf07659077530309781385a70ef340133ed91b2446df6c0a2b2c073b804a6d4ddc55bc742482a3a26fca2f9f883f95f4371a2520477d4643bc2ec409914ce86dd080550865fc481e7aa5ebb6b008937950b5289ee576f98719b666c585db8f0ec9feaf746b63ab3d76d9b2845103b78402a89c49858fbc80d0bd1639774cf2907f4208f1c87566ad17199d74e5554d2d37743129cb5474fb5e76a3e3725685d79c19d7d7786370b5f16536a67a70b624278e9e239d4f49a9d00c82f195915f6c0287d3677c1c8745c8c4ecfe4edc1e3a650faad0126ff2e2a635570d0b2c0b3949a285842274d670fc46b4ba2f1eede9dfa68236edbd91d5c96a95f951b368c01fae83f461dee0b1b30a7c89f2ba08242f28abf3badc84df45d11f654d9671db2a74d01d38b30ee00eb757776911b09e964b5d21d91c4a1ee99109e0d409021220dac7e12a97619346331913a015ebc5aa9b7d6a9783160043d0a54c96a64b13e21c30a328239e6f2a4cc8f597e6ea6a61f1b7e5c401c751ca731522ea20d2cd3b52b190a237237091dc3e1382a1570e3a6b4ac71589b41da86074153e0f4d89f75af92defc0823652af8845efac02a2861ed4413f5612646072a09db749a83a9e8d6852cc8c7a073cd738bd775f8c3abcca9ce04558cc487ba083bfc20bdf9c993aa4e7c2305d75f628e1c42e4be99c0c3f9b09ddee53b86e9e584532f36c5419bfba393c33b03234bf8a9b13f81d4f73bcacebab82fb9d97984170299d0e09498f7951277837ad37b8908bccf76038bee0d342eed9389216c5c9edb03cb3bad7209ae78cec6e375ec81f0e52857e33aa2d09b244cc26f1cdb2b172d18dbb51feeec4ec563a28e34113dbb9c184979ed9d48fd1db559754ca43fa2c845870da0dccbb643205d88754ec4ca4a46929cb28cf161a3e95cee47deef0cc4f03c36558862bf8762f1a09885a66d6d0660a668a12c8f0f021035c343178f3a70537142064b135c1347e8e5082463f4bbb63969425a40a7cc8ff97b4e0a7266464771c1fde074a628579cbaac2aa94b45dd0bc4ef7a89ae048545b40ad0937b214bc0262181dfa96a995d0ade8f72b2c55e67485caf33cc6cb954f5f3759e50b6f8e327c3aa18bd20fe06d903e068df38983146fad00d47dda7391d218c84498b31d0ef34862c82366bc7ef070ce55a0ec4c1e93d7cc8858048745f4f8bd1eb2f65513d2ff5a3d030f8e5474e75c8d2e90b6ae026a61dfa82177d3ed5191d54dd721c2c63a7bc6f328372f000087978fb0cf2666bce720c4373bdd5a09d808fd3b88ded9ca778052aac0aea465e7f54e3f746ab6dfdb4a570eea432a861866cc8245db4d86340b6e505723eeacdfb0cdec705c0d30bcc19c096b1f4069a69f720cfc32f581cd5a64f27d58a6e60683c2b0bdd725b8a2c1200a1a972aa2ecc4ab78e3be98ca0c01f10988a03bb9f15b4665e0c2dc2bf286cc3f3cf9e274d2bfbfda119d7af793b1b65f325be60430480dcfaeca6dbcd1e52da70af18620669216cc3172d8a213aba1f250f3bebbd4da4b4c079b73819e4bbfb565d830b8a2ddc155e2c6b5b7fde3a35e7946410ad91371d0a8e9b871953e0113f97fdf15487f01ecc563794a14379d2d8e75db4f5aafd1a2717811062cb9baefcf1ad9baef056ea0f7bb49b8d80f2ea3f7be17f937ee2719a33621088b73520b7d1dbfd460e7106089db5aadc0fb3a7dd5241bb2304f31cc0bdeefeac803498710f9791fadc1eefab3df01e78a6f0f90b1b9849bb9f60e6faceed5c73cb4c0a03966a93aefd59dad1e7db6475d5a480326be8eb5de51389741438b1dca67110b1d5a2e14f62751c2c79ffdd6a23ae8aff2c9398441c086f2bab16673d644753e1809ebfdd94a1a9c94a9cb53075c284395b25ebce0daa7f754b32d9c7904aa09f8c1d5b1e8a14207a955fabe1fb7c35014fa5201001f882669ed41acc21ff459e9de2a690a4d5304e25b1e508b1398db86422aa8a7796dd4697649457863284e328263ac60a4ae8f273af81e20e55c5d5852241d7269ed3f24af2703fc7b295c51e6dfc0586332110a06ec0716225d90a9148d4f36857fb533444a5574c4243437dbe501993e7732b92fd00288a71c841884605ddec36f21c63f78fec4cb547143b229b73858f2a445fb05f694bd65995b1327d06dedff2d5fdf120f396bcf80b1f1755d743a61c4870aa1e4934ebadc116a9cf2861eceb8b6557bdccc77f30d564b4ec9c2c3b9cf777e5587148937dad175354301335dc08cda94e3a1461e76024de663b696f3785cd09799d4f7d635133851b64f603a40dfb8d434bde1e832b190b83a55ce37f3d05a85df5a931a7ca91ac96e5071d509dc6df181cee1360b11a468c6607c4c6a7ed3278fb744d666a47aaf4ccaa6168bf20d74b89ff458735ec56e61953726ac4c1ee19b17ddefa1b9e3980e3e7cc9dd99bbd2f8e4da750f7dffcd8f7d221455b7a22a3814e5bf29e7187c9d3ddcf4b992a484088e8edb49e756a48358d015ec80a2980e5832ce80c6cf7c2b95221117da9b0fb53222bb5993e3b34a68358bbd7ddf8c690af615644c4c1f9ca89e4d9ad4f717100ff6b3f1c81dcc31d0d9144857a206fc7430ef932659fc8451e1b063c4f44af8bbc241a7703904c6cfc45c879f3a228eb1d4b528754b65fd64b5a2e990848ab7cfb32d806016f8dcb06d9c4d1662f4b7836dab563b4d86c8d64c7a53d6d85d2dc6dd840eb54cd41421c9e61b6d8edf3a27e0eeac9663cd61c6cabdff01f3c10dde0e7f54942c04dad6a18b13c0426a0d4e307f3ab1f8a22532a90544124e01ca677222f28071aa69d85f832bbf8dc9d5002e6e396420445f55cd24190d6144e2f4a759aa66136e40d94cd7257cd289fd963f30b2a23883f2756edec0581d4ffdbbce349c03599dc29500e1accee82c609160a6ab74e706ab0295541f73aa4ca05603f0aaeb05ab06e2036fbf2b48c22ec2e57cb4e3e0c0cf12690f08ec385a80d3e410ae410ece187c73fc3d99b14de06164dcc6363305e518812850cb65c7c697fbf7b4316458f03b7016ccc09c3ac25e6bc7e95fb55167cf13f8ca2bbcccfc500f8dd7d5e613413a8d2e5e8a3c8631d823e8bb645d31c7b832fd2b693d5f5c6d4f9a9298d376f2ac31e75bd39c91a4162223ff080528dfc0fb064e319c142031cb97bb2a4b71e8b4f19d8b71c7de17cba729bf0ba3973f9c86583fe55f3c4bb872f2014b377f52c2df98cb8639a15767ea26ee4e33e517a838f4f07ec0fb2b0d1de5ff02f9f13540f74e883f2f88688b818dfef2d675a70410fc327cd441c439a4908086f30c5419eb4c73a44ef6639fbb75c133fa0dc4c96eb4106eb901e353cbf3304802dd67c0b6637e46e48d4f666a22f9f6765bd66f34a997f1cdf58ad41d19f0cc9721b813aa398f978e156d12310461c5cf395a6bd0bc1d90e611b34e0510a3dc331d13b907047a2cc9c6c3697ccb3dd88587d27520f57f7fb0443747c17a7f83e18ddd3162c300a34e4c2aba2f84509c9ad792344240a5f5c3d89a7824ec25658890e31a55d5416dbcea1399374835a7cfbeb91da0bdad1038d8a03dfeddc725c810d33df62d722b510f9f7c2f3cd083b1b6fb0c5465e453ad84a0a6318dd52989366f89b8c502e0e5c98325ab45479dbc1e0c8910894ae7889512ecf62abbbd6bd5c1b2453bb78f5e4bf67af1073310776bb362e847987f2cbb1c7904f7149a65cb181118ab0b3915462eca3127e7c48c5d7e6b01c7bf0e89c9f98f9936bec6a9c9fd872b5134a0385080012d9da8f88fb78324752d843c9fd9469ab8a146f9c7f91e7c5487ad998b1d3710a23b662e98c9cb2052737f14996ac21a9369d442137e190d214ee7a278ada847e2515e915a2ec54aa3a69f475e64a99130608f14137c504cd21ecd54cb3346ec2e0a4f75554f981a43dbec22830f5bf14342dd66919b5e0d66d73ac7998787ddb62d79be7f1cc6a72ed8df27ae6b5b8fec6783cc392dc7cace5c93146743e26b4799e74719a67206d4461a933be5ad1cf85b02ce024215d7759dbdf50dfb5b5ded15fb8c6213861f1436633d8aef883889b4def602c413d3f884b3aba021714d8bd940e5e5260e179bf1925f1afff307caff92c619a95e4fc7f01cffc16c92840a1c727fc0228c0323962c736262c1c22f9afafd077e4ffddc2ee75049cb2de27f50b4a4348c9cb537a99bb9d8b2e7aaf11f35e29ccb5caa2fb3235ffaa145b56a5632190f9c0e02dad0cc3378fdb6954ccd9d11146c3519d8685fdd989b1444cba03f7eac5bab40f1435951983d8f48e0a7c76515c91dec4b6fb38c438eace495bd7c903f8a5e58c84fe41045c129344a3f93fa524f9f788247b14db0ace15c12cbbf8b864b6d2f788904077580d041113ca8a6bdc143ade85b6afd1b171bc23803f35b96dd9c0a36eb017e7b280eb7bc68ac9a824e2b9640035dcec40f94f2d63f2c953e98fb6427cb3a7c1bef5e54a2655f200b2ff69a44d387af5842300c26979877279b2563695917dfa757799694bfac8fc8158146c52799ed71ad4f2fd8685e969633952d1160f66b4a5044ca6dfe108414a006a7876b9a1e3fe574685376095513db3ff006c0d3cdfc12e04e0c89dc84de64d76362bf81b93d85957b08215f9cc807b9bf9848d96851659428e154880407ab652a0407d8d2f68747b509c17fea73bdefb55eb67ee7f88b1950ff713985bcebcb9b6d0cb10a85ba9e5ec5c486d1da9144f000c30ed624efe0a6a20dcf09f7ab3a69576f19bf688394099b62b9824e65eea8c12230a92207fc9db40335db96b68186b7902dcf26f052f3b8261615074cc32254c2482c1d9222145da4b84e7788bae9c895ce53dad24e2f22f7a9db7c14c54615848f7b8aa1d7152d41293a9fe700dedebebad3e3b58e2e67624db3dc5a42bd5599e6d3637cc5814f97077eeb2a682ad2a3be033831bb3cc0e595545cc54b01e438977d7910739729eb214480597883996b3cc6d2b47324239787b567442e8d96d5d1fc8640d3bc3f2668a58d623cd0f87849e7300ba24bc8658fc37149e3d726466b136115f0fa790c451d34e78b1111fac20395242832bc33825b0675cf356b19c823e0762a5fb94d4db2ce1e8a9cc93382b2060a4fc34cd2b7868c80da5889729e6a7bb0897e11dd0c16bf03186910c0ee15c24a58f9c5a578b5150155e0650cf7a5cc9de7b4091ea9ebade4c797648e587ea09267b9079151772a9c364aca866683cdd1c182dd05613681b3ee28126f70134ed2fd1b604ca35f7cb08f2d77e7ffb68a89b6748efbf9d13ec7a6164a580e681b8fe3c33a9356199f33a94a4b2bd4bf5c3e2acbda3dc769eb286e33d91de4d74d95d2b7402b42d2b1def0c08a657487c7105c6b582f51cde10bf88054aa03953e1072f53f359ae5ef91e170d7e2636aeca8a64c1cb0fdc0d7ada183dc6637609fb161a355206e9f405f0515e7b0e8632f08f22893600b96acc13d7e1c5e784bf37188e0963bf0c25321e409d8d51d96aed4dbd1e3424951089d2af46c85e1c840f01da251807b404078db58649abd4e1ad2d2a67597b5135905a0d9b4de2067126bc804e4962f869e50b252b859132a165f287836a36ced8b08b060f282822ddac7d98819abb47bf80f4e48453a975e29e3a634a57074187afbb1d601ad5440b59d99f652290033be1e4a758532844a494e14eb461c51d4470edd563fcc103b1ab5d267cbaac8f3c37b1c67e341c248ed7c12f35f63c5560922705c71608bdb53a1d23ad9470fbfaeebf252cae4cf35097004c28c14432ed77e544e59a4876ee5dfe28f7d048018742214beb25e5dc970fbf82b1e8848032449b8effed408b6031011d334d0f568fb0bfbc9d64e5ca404d3e0dd7603ab29e2aa7942fe6c6afe0b6ecec00d2e56f6f593e06b5c2d44cd345bb5d4caa0a664825c3c3b62a395935576d653b96b8fd34efbbd331ff3e9122da01073acde1fa809c4dd467c191283ebeb565c2ad94d135ba7320e1828ea59534cf0de4c8c0839c93241e73bf5a5d92f4f4d7961e259be73af759fe830393828b6c52cf9dd7d315939d85e80b7d8269bc85147f9fbb1e5236aa82aec66d9016a040972b264850d6960a57e6bb06e6cecb5f7320a5029e5804f088c897180e08c46661e72b85f89e53a42ae890a94551f4298016252ccec590c269e0595803989efc13ea56f79c1abb77fac1f2bfc8384c77952fac08ed2adc424edfd014f4d679c65fa2a59fb612f00e61c4800e5e1c59a8e245c444ed7f40a5e65abdb691b106243916d126495b9e04a05b9a00e8c410524b513d59e39feb8ca4b40bb02237dce7da788ddb7a824d4dce4d85c151f8429a3af97560c02a3ae38471e1cf780dc29d230fae4482f9c2310a3645db94f8a4845dbc02b1589758ee904d0cc7fab724df8f3082c3609ae5bee639758ac875cd3a3d09f0e8ddaebf9360180c5d4fcd9c1c005ba645c946b9d25e8eb64d3328a6939a2e259d7145023b36e3acea992c4e62e92a903908a718eee56c4a05ddd0a2d2c5e87f23acd735b3347ee6582564e38deba28cfbd644b938018a04412b9f12933b92888ab78390a2b9e001d67e68af37d8ebdfac60bfd7a89ca502e65cd563d9a08cd52462c6639d7a5292ecc586d1cac614272b96b95f03fb54a0a45e85e3443fa4aada514051443eeae9ac6ce931d083327c9abe7f1fbfdcad2361bf81cdcb03bfca08d66825935440940de1c90b0b542f04813e795053ae9cce4fb762aacbacae722255b8640fd4b0212ff0cbba099149df5587f3912fc2951e09b4af8aa2861dd15f05eae62e573d30ade3be1a490ac64298ffe559da59af055239afd1dc500d44b8ae7c88b9b8971e745d79ba0fbdd544b935dcc326b5e03a5504021b90599a6da8dd3306d12e474410ed3361daab0196393d1eae0814ea3c16d27f0c09028f39e9231d4596c112ffd8276f56d6243d08a34e77911b6c284545b6affc55b91bdfcb6648ee38b406b4214502f9ac43a2eb209b72aae913df1dbaa67c4cdfefef70d641e7fba3781bdb5aaf950bc9be9b3cbd46410b59e1b806006e2ac493534b5e6f47ed944992836f99872b28254c99c830c0448ffb986bcfbc4fb961ca8131a262d76a5dc9581ee8aa21c7d4ae28b2c432fa3381f858fb1b17707fd487dd157286b6e3a5cfb38db22fddb8f0bfe1584fdff753824c79812c08809d4b05ad85c3f806366531fc1a9b196c2b3126b3c3f9a09cf3a2ca83936c7a23fc40fab855647eeb7dad35c7882a81d50db8f654556e35a241bb7f6a46da4f783dd94e7a381ded9ee0062ca0dfb0fe27ec6a0d1c1d0d7d2d4dd7c11c4c4fb77298ae1197425b2d5572181c1a8b36c3e6b6d7adfb72193219aa9d514f93c950d9f0a88df477d6116e07dd67d5d8d8da05ddeb9654a7af194cf0d20a800706e983e554c5329f9239d22455b00067a175e52f4ad3a78d660570f5ad24b084dd18040f513e0e153849d7dddf0560e4aa0be870b18a77ea2f13e8f1b8c577864220b5897e5644be05f758df1d911fdb29983bdc442482c09e26bec3b02f63972dc072f925a201b8581424a54378718ced1f3efd667210cea45a2014ce3207ab97ad330a0841c83cecd523c259ccf5fe0cd1fb6d04dc4d726ffaa7ecb2dec670d669c9f4d3e00c92be6d63ef155cf973ae2e1da13c7a38c52c948345e9971adfd4194452ad0d73cdce609f1b65c06d7d35a3689579ecfb07198953255e54de0f865a40d28bc36e09dc824f2ce6870f4870bd72aa70d6206f87a43b8671d3e0be13b0416830f960e3e7ce64b51bec1564adb2647ddd078cc6606ec8a409862826b7f3cf4aacbb751a33dfeea5625a023bfd70bc18c5efb4216c4c467bd8bdb8bedcbd0b99cb3cc6d0998103909c6a3bdd4080116d8a91b1ddd9256c84b5d3e55ff5cb03456aff09945a0d67fcafc7f21190600fcdb2b3cea46a1a7572216c6639b22b91096f0f8ac93f0002450634aae6c1f6e3e9cd761642b66d3e6b2b42e603fae2c7b8f45c64d70fe3073e7344c1473eaa281f1cc6aec7687a2071a6758ef49de7c86d38e1affa6b6038924ed024f99f20547c1869c20f79be324873cc16318af505e50b18be8478606b4431a23a356e0ff3e11c002e953d23c17fccd501c668a048c9433252999409cbe64267713db1be8f3abe214608fedb6a9107dee1d6ee76be7682aecec7dd701f01989403d54a038c15e47443ff560f336656808ce39e2d134b86415aa4acd3aaa8759fa34d39eb893c9e96dbb842a65a596f862cda6e37b22c72a126bc15f8008b11c59a63d935ba42a770d50552d74d1cf3c2517f1489332b11ce622ad51d98c4de30ef734508fac554bd8a38b8182aa297405aa48eacb38422c3447a306387cb7027aeccd2fe125070c3d5163ab6efe53e348ca3e8939bc89cee4f9b7815815acc19d3496547de935d05415ca76649373fa7c60fec015441063a4cab9a8a0415f12865d39a13857642e21543c71817be8aa617cce820c5b8ef27aafbdb6ed75813eb3135fa3e23ff841c8d93b44db30c27d6b15b436900233d10656b57be4a4a9da94683f4ee68dd050d0d8e036498759129b302ec22ce23a82782b5e8ba061b112fccebaaddc9b595ba376fb04c5ff72fa07b71c05b4f739b3d179e4b08c16f285a8e13078dd828456c39d4268bfe7a3367453f653637253c39971657d42d7f989448efe8e916b778fa4fcb335755024640253957f2e6a11465bea044bb709432e88e584e3bbeaa76c162ab3aae620fc0246f3a1eb2080ab1d6110e8b08b08b7da660e76d4e695e611ae7450fd0343852745d8ed98f49cda2facef0c93a731e303383ca6bf3c23c0a1859a3e4a21e5589aba8324b3c9fc68f8d136f5b99d00cd5b942362b5a5a0fc2a2bb012f53b1a60b20c2ab3c7a32172b5c13d08004105df9c91301f2423880bcf0cf674a4f402468f954df0bed366945d2ab1068bcb87e6f01f80d4a3c31285a00ad0187f54fa38027ad36f67261c9b31eea6bd3d057767e9de680c0060f829a8454a55736c3d19e345c584358e33137f8f940a1537b93dae31cd0fcf1db9f659a335811976f9497e6e55ece71c3c8199ba26e569a0f1fd61b9816513b999ee70e868dcca5716ded3e16d4f91110f66ea03dc9245c96bb4d06bdd21b06cbe05b6b124cebf51a30bce561a86e2c17f42d61f8d2e7d6762fc658c74ad98bebad1f5ad2c8ad7b2f2c910b651e139bd86e5de29285fff890e628b3dc8940629fdc3ad5a6d1ab3c080758cc457ea331101b806a415d453f3725742b5385bb7fa2a7079a119378af58630e126426208497156d4bb8e1bb5e904190e42075958276cb7e4cebb5114a710ffdaf776bf064394dea09a748c975025c6869524079d729768be9b9ca2fe17f2dc8cb2c838e4a5a721fc62f103c9baa80ebb5f51f776ae90426fdaed58a8b6e7675a98983e7f1da7e8bf9013101d2a9ab6840827d5521e4c1ad8af7501e0bdaba2cc83ed8caef0b856d963ffd65784ee26ba07b7da289812ae678227a50862fff04a467b5ea3074fac4eb24f47d43ef9c4de994b9a373c231e88922ca32ce2db4692834c2a26198d0010cbcdf3c2786d79fc336da82c4345f39bf3a91e4e914c48870ad9277aa255e514f6f89f506200a6f2ce77fd6c0c1dfa93c7c9e2116977bbb7e31b99697a04203c544809b760dca1925ec6905e155b55de34d69a41ee9932322fc10041253a0ab0cb4c11d44b1c012e52bd755493d6f9a9fddc03b8301fe7b20e859a27ab6008f9f46a3e0440a5ef18759e0b343389bc52517ff2ce5345f26506ffa552479b473eba0cdfab71d32e496ee3917ce3ae92b083cda9b3ee9bce05847725452c46eaef88e7241adc3a644c3a1adf1950f08e755264606658cf68f8e3827683e23e51c1c5b1c9fc948f7db52b26c5ac1d4bfe88e74e236835c45c1c1cd795f0089f772049c1b410350415e66bd398c68dcbb5d00d1cd7c315d40bfcdbcac5c809ecdbc105c806ccdbc780be8bed518b4048c4d4d0311b9e83885b4246f7cf29b915a8cf3f674a84f8e06a15d6ea147ec6e4967ecdf405fac6f455fecdd48c7d8be81be58df8aaed8ba95aeb1be0d9dd8edc6dccc0dd5fd495acde1ce71dc25c4d2de72fcfd9e9a255a8517efb1e065d9006c9aa7c8cc3296c5e1a17b7fc82d50fe5d8f1bcb1921ba98166985c32afeb004bdf48ce8caf0b39ecc72b89179b032d55bdf7c45d3c567a5c4e3996570dfd676b3864af15621dfd86c134e8a21d83c88a8e14aa219fb249e0500a7c1b1bd319db17d0b5db1be1d5db175537a63f916ba627d3bba62eb46bac6fe067462f956f4e6c6dcd00de6d2635b1aa2a01b72945726afaa08b68dac1053d06fd45b42c84522466ade88c706ca8d350aba43bcdb6cc8f60d77cbf747475e3296774ecedb7d4652985838dc6361afeb02a973cb6f7c7a9a6176457190097fd01cb29b4c541e70e5d40f650af32600432bcc1596014ede954a6fc99e7c364dc6b940f0c0e0b75d83ece687f97079dfc1c984fe86a003022efb03b9790ca3f4697fe780db519e7360b8a31fe3bd49dd8b359616c7b433c1e34ae18c16a08fe856ae3319fd711e90b8c7e0a7a027406cef7d5ed6205edd64b71cead95b0f97cc9de1d1a51057f3a6e50f05021f724e2f145c81d3f7aa718cd695d672c2233ec1d5d39fbec896d38285e611cda1e08858a5cac24520a82546405170a2b9547913eb5183a1d9eef0fe94b3825eec336c9627814f38136eeb95a946de20ee8fc45245fe40e2cc339d41db826cc875b16c5a406f28d699d63f63c6c8c45c2f9f64f4ec8525a3dff862cbc699a0f7e07015082178ede2f748650f282f7e4f28c91cfd4280fe98dade85a74662c0a89e3fdb759868f683e44ad15a5555e942c94462acfc0d46c0a432e557d6df282dd2ecf1b8b8403ee4cf16f0fee04c5afe327f6b2c50166fdcab0384c2628cc0abfaa8df3f532db239cc82f350d15c3286e808ae31c74a4cc65f2aa81b27b9452f017d0d9217b1ff560bb63b586ccf17d43c70e2fd2669da58e1611eb8a97e21f983b5231ea4a1ce7e08edaecf0a68ea47e66e3378794deb47bac503c011febc3b925ea62c6431dd0d13a8810ccf690aa5e042efdbd057e86f2f972733a35029ed0ca0274b067cb40414f406e117e07d8b22ccad25c598b74dd95480f21c495b849f9f65af78632bb7dfbc9b76f2cfcff6bdeb7a32603f23401f346a1964df1181347e697bd6a5924d400b7613d621f0b2374f203450b9c48114c6a905767a8ac06b66b7c6c7b4172be398ad36edd5bb808e20862a4a6334a8d4d8a8a1e9119e51c787467aa251f592f90a920ba9dbc5844e86c5cc66b5fc8a0bde3a522608598a88a052a444a09664c2cd0537d5540f45c03b26e8a99b627b55d3210019fff95c75454c342f5cf273c8fdd5e15f9a57b95b465272d581908512a9ed6db6e2de732a8593c038c4f001cedc163e3e2a9b945000af9260c7009278dd79864d9a76898786b2c9496939243103bb18a053431b1a4534f6f8612078a80e0a04e8664b2a7417432f09f2a5c1c889b249e859d971bb8c15c3d6ef368ca739f1d9b0e00673c34f01ee2fca9f1190e22dde84ba14158d76fdf19db854fd4c20cb60c0046e1a51f0c4b58aedd36a8468d7543e469e88cc342c57a6d5d42196c688274e5c85c5c8b29fcb127aeea7aad2f73265950fee1d44597608e2ec45451eebfc61bc7603b99f28528bd7ca9a25ec4359bca2e6ddd249d871c4892d6bcf39e06b950a967082764c4a0d98036115a731bc839f9213186147303cf8aca73ce26844917d5ba4826083e5e8c997f593cdf9cdf51eca4c3d6688bb2c94618347fe874d96df80c976943fcaf5d235f0a8e670c79c329147ad7f9f3f52bb27f303183b2fcd0a3b278c21166033745b0c0fb0c5021890c0800025c7b846c874ba3bd4cde8370575be1eaa8c86d2374e2ea291b8316c42331a9802050ae21489a318ad81048d61e20b2a869607f0831eeb67a2f7b5fe50152edce96fbd581273ff820627124322268516b8d6970893410e102846136fef8f44741fd5d2cc8ea40b92e11c921c704e7b8431d3a1dd2c6fb05b25fd96bd7dc068ad1d99fcdb1b6260a53242f9bc5ea38e875be93c9dbb2b5ad83d82924b3a3536d45a6da66ad535e62811c6f49f7cc560141dfe30c70c5aaaaeaa31c91e0a923104db6b9823f8435f0d6e8b5aa87629b6629c74ba34ece6203182e1e727870ec756909ee92d100f4c2ba3a47d641a601d6ddc860e7d31a0284898b2a580bd8b05321376bd39e289468467c1c9d8e594be28891f0085608c26fcbddf62e69793f56713fce70c7aabc9fcf36113b974a925b44a2c4d5fc147a310f0c34ee3032583a8afe00abb4a8752b5ab6ff393461bc6e51b570d2b40fd58f5cf69efd13b71874af4d805b2faf79c129aa161aadc4794c3f5f4f257e175f32010b7d6368370eab6adea4ffc5db14ce1300bfc856cf36a905c10b6f2c5dd22883802b5656496c4bac38d91792f1d1565e7c61e1a5f2b846e3389ecaf31571119f7cfb09b2fedcf29503dd5488e04ca067dd25992d502da1541c6bdff59ce3cbc76b7065c7495d233820f784c742e1b76e70cd13b19dab1b39564e2cd5e2c84a9c6051784d4fd935e5ed404b22c96e3e196b7b3cc94d1dae28ebdc1682664e19eb0c6580dfba8e66c131173a165d0671888fb5cec3aed3d38efcd925fad1eb8a3bc06173aa62f5b4f036c814445724cf38b75421528c64708fd03cc52f13991eb4dd2a68103f58198d63306d2a0b6ec00af40c74ff99c3760bc06beae178a91a55b9c96efc1afedd3ed77a24cd88f02b92aa29279683f4ce564d119bc186d82e06870537c0e506b200d0c10c6415aee58e8cbde429efc5d7239dbfe1daf3b6f642e7afc4cb38fc0cfa6f40604a50b64e8355fc8f72bd9dc1a8d1963c1a8b975ff915e0664f3e7e8b9f90b414aa13e63baf10c188ca0b7652c28f74b2f9f6c30c7a7a05222be1ef9582ceb1780e79454da2986e850e82a9a10df530a06dddf25381694da5a128b0ddc0a1ce3b487d4bff0a0a87b3c4dcb1a754c3e78bb1b80204d0e8e9b499374249a2de82065d17508374ffa096ad1761c79d719d0e304c9d9b375712846a59ae218115173e7796d969333a61495e1efd9669011d9a8938c6d82a13990a370bf9d34c8da9926868eb8e3894821a076ecd8b3d6bf9c28d0f388c2cd8160b0acf525ce1bc1186a48c85a96ba1830af9564b5c5a51a2a24fc58dfa87cdb28aa78a9aab01ee0b2666842dec5d5653099db951749073738703e952d8695d52337b8f1bcc35520506f761a9c2483640ef916a2a969553389ed7feb8d2abc0ccd88dae7243be52953b68f320a4107a342061b695b80f7964b3f9e03184b90b11155ab1c4580aa65d44621a4edcc9a33cf630a01c43400c0bdd2e31a98cf03972de13355c20eddce33f5c84c2c4beb27b05f638fb85d085a23f906d4d53969ffca52d170485aa38ee115782c52912592b4999788d45ed6d3b2235df482008eecafe30bd28a4e9473c10be1f3710727bcbb4ac34f3ce737c0c14169d40db7e848aa0844dd01de115733a793e164ba4d40a23cdff3c997b6782b13cb2ee696f8c0a6f0be470a000ded20f98b905a07bb0d7eaf885f4e13d3009b21168f544a9430b22f18fdcc9823d4f90d0c1d98ed6eebf7d813801de2bbf66fe69d8ab8c31a536b9321386f42d084f306808b30de21075ea154d3a1e3cd6339cd4a4103bd40be7500d2e5dce77b237b039f1fd37582535ee85f75c9fe118668197187f9d3e9f7c35c764ce6ccbd59f7d7c51be92064aef028fe63a1a8442e57fb6cec19ff32a680389d113a0ce40ebfbc3ce910c6aeb0de101a5ebb315ed55cdea3f9016ed3c357302afc5419cf6b9b731828c2a2d53c4365bd56961a94f4798fe7bd0ecb3c5484a21e7034116c371fe317b7b75d57bcca67c7fe5ad442288c48655c41e58bd318fbadddce160bed1175e61bbee686d5de3f26fc126ed3960f393308ae525c132532122be862976e5c0790ca7af39475ba0f5281a1f4eb242d6313572c922ba6a2a469d78282f58cc65aa262c33592d8b571d6d487409b33e9eae2fc774d197dc4d7ad0a74b1b16ad17981730114b70a4ab5b0243fcccaff2f12b63bb666273f6ee10f6d7cca8ff247cc1575f1fda014af2ce5b4fe81b1523d85cbe39a9455d12defa2e0a0e8429c995b6f986e037906b1f35bbdc6358838911d2a8013b86ee18c26b86cba7284867710118fa7c3942f06115369e86046ce6fcf2603f0994364ccdc1a01f3a3da23a1e0b830395c14cd05beacf4f91d7ef3dcfef3e238200fbefc09fc24e7c66b4bab739eba2549494b71f0e2e5fe9b3701d292a8c53e9c603dafa6ff194ae734146a5254f3b5995571dca67e428a41afce4ee32271321683538ca4289d5a4268731b3ae6aee7e54e1b0d85f6ebb17ae25c85f2d7c872852f12364ce929631eb8698bf7ca884888abd4637dbed327898e589d187c0ec94654a984159595c7ff4a9e1e1b244f18d7b5c8f504599ac2cb5b7677a415a53a95dd117d31f798dc415fa6bb46a84f9d0a1daf6bf2c7194bcfb00ca180a95c018bf69d0db2c2eb69d394cc811a014e63a38ae23f338a97f160df0a5033d51c06c7282259771541c2a15a4c490db11ea475c804833c8d720c4901e260546eb12c1c86eb17df02ac50e71656b77079419b6263f601766f2b69eb08d21cbd2f34276eef3274b2b7a4a5fdbc2034b2263cc539b0165521b7d5cd68edbd15a2abb7133659f445987021b891e2d0ac1866a8d9c1377c91707f23b7b70afeb0ab438475883bdde820c717a25515f97045996732d8cf824b99ed6351ce3e83d261aa0ab200d6ebd277c50b2751e2c778a2db8a22ac62fb84a430ebf0821df0da8a3945e9ab6eea835eca92bca6d9c9448047263dd535be190ac2a8b2ce8c2099c9e03db70ea1eec2391b8ed3b82205d3bb2581cab675527bf231596210290ff258185e25a0cff3db700571ce35417120d6c25ea6491b6776e959adb71c83ba39cf778713ce5ec802635977fe7b41724e75b8ef8bdccb689624843c9368a1e38c0be9a087b1c76a195a0baedd68c84a8586a6e9c023a12dc4a04bb333a5f7fd13835ec23409a09e78128b1a713e485d273f8f69e31f3e6bb879a8d72df5b00b719e30dd9c117ce7279c0ddb8abd12c717deccf20f8a8468c4c7c6a120fb843b9eace9276015809212e2c3e48d892951664c1f7abcc853f16c013bd252034b1c25d5f1330be253f14dc66eeb6dea15a157c0b8aa4ef51a7f19edda3d29dd09694b0c93b0f3276389694b407b1ea64da547d9791ea2d0e322f4be680cf1904ed86ee66c5f1db11201a301807573e5abafed22e1cb5d131a3492f783e4cfeffba66b69135bcfbd2181ada34c5437eb6d5ee1107d9582804ae87c13d056de61933302b357f5f67c579b11cce638fa4e9f121aa63e7c3f5679a08569adf019923003f4ac9e84fdcd8dfc1facd3470bd01b5ea29914a97bfb477e97f05597cef3214a52cf514fa0f6ec7a7f311bc063a078569076996d4bf3c44682105250714fa3b7ee2fdf7729db288e853158f07d9ca1c224e0c2fcf77ed7db05814fe2ffde4f078c5b4dbd95f7878d3e6472cda544c57703bd09da89c6af0ea0c2ab0ab74b4be8bf6fa8434058699baeedb65631b1474b834e8764902a4d7f936d890a5684e208248c05ad99ebc07ec78186ae9f8a9f898e7103bbf22b75996ea697a41b0afd41a4096d671bb4fe5e1e8f4ac9893b3165d9e12c13ff9296c5dc7b73e8c33207d76a251d8f188547f36a27c05fd85ef314e4f6fd8032af430ec67667bc31bb732579da616780b8f0ce5733559a76f6de10b26d05d1e40a2eb6edbd0ab9c6f5e51f841b581aa067aa7a31ca5639e4d73604097903d0156f997779375fa1f131940279116f9f2afa4966d816d7e39b616c631ca9b83061bfc9b9dc47144f1dd45186d7d57b8fa600fa30a71a5ef6f1c20ca4eb41dbafcad56b0d6218f14a232823a4f875d9b2dddd0871be9f235941a6aea9fc9adca2e391c6e86c7d3204db6cf91b34c4b42ffc1f046242bef685a2e59c82b7f02138ab2b1eb4a07089a1af6d576048235138714e25feffa511fe613a4a8ba2c6b038a82a12884e8d7e0ca34d0ce6d822e57c76e8816469534dded8fa683aafd411ea2ee009c63e04af895f55af97781597653b45db3bb8945e1c2a02c8b76de9913eb25cd030e0a847647ec1948ff59f6104b5e1588babe1d9b52903e4a496b85233677cf5b91db9104845a4727c6abfd585d0ddce6022262781f2ae85cf44e65f9c2491ea52cae68912eb2c56541572b42884fc9add83d056b3017361ba24f611a2fa921837a72fa470536754119c4db45c89c52e14597f4ca026cf1f78dbe128dab5acd562f827e20362bdcc64d73641a9a6255e8481e463ea7c8faf9808b368146c1f305e14ed3598e1dc8cc5ab4e51e903667d7ee98b0ea345c7900b9f0d173271602c9dd6fe66bd2c2873f9ca363ceae416cb339d78d8489d4d090de393b0a4f6b45133310a0c76f394eb17c5439c5eec916945da11fbc6a21f0f219a294cafd12344e4b0207c489eaf1734cfbd14468997790cc60e59ea04d7a9c0d350e2c2f1fe5573201bf95d39bb0be9b899aedc607d6815e64339577c98c329910237520b46d0f25f1c1258bde78e8f47fddc827af84737b4407e366a504c9ff9b59c96ba0f2221a821a937019b2f04c04551f9306a601e41a679c87aa012cf48edac7784d17d94c7568d859dcde332ec729101520d07ee3740341c7085200079029ee486a7d6a1764ef317681277175bfd5b63f3ebd5da5050dc5a7162c9c11a4083cf409114ce0140112845dfc5db094a1fe59b3c9afcbd436a8f10595432213c2c4f15c0be9f2779b7ed27c50bc83f1375c443ca719a29dd4de49d6b38e81fe8bb81d43d414717c35155225cd3d75ebdb3834871d6c33a43bf9a095a4fd1c7cae75dd43cfdc1c898d09f4bf6702a201a0744fe7356b1a31b0efee76c18505e01f15fbef80b927f0e5c0137fc000c1f0b2ffaba081f318fdfd4fb73861871b408ffdbff92c43c08aab75129f47ccdda42e4e0740d06420c2122117f1375155818dd813460591eab90532a0ed39338857e433b1dde2b5a12589cff15c17f5bbd892c7108c3632d8168715b8b1a8d832038c41dad12ac02ebb355c22bc13cb84a1f66dbc3e45ed7bba95ab9be54c59a94997c03349473a177a5169a48befca6a3f1bebdb64e01e04f7ec808c2f1688a5be18e134b1840ef8651112d9d82dd06f849c8f3a1e0f97b45940f601450e17edc6f9a7724d24f0cc1175760217d7973b50708d4910504c01ce0075991eab9144207e7780d2eeded3fd2d858c558656d3b1d58f8da2f7c1eddc3308889d5341b8d663e30837f5bc9aae412fe0b5e4096dacc5fffed5938b3d42f0b46a16b30ea1531c1e2bfb64c77f4a4916ed42627f448f47b8733fb4f0ac29692568b331ca1e45ce83e4a8c8de501483287c6bd9daef48d60211024dc86fb9dc0570d27543d78ed1068d400b8d6ffb5cf2e12848b1a922971a759ee430efe80719d2abc131fd858449a448e4986059216623a4f446958032dae09f5606f96ca0bb05aed19c7626ef4b6a149fdc4e2806f65116d0324aa2c2db50421431bfed64b336ed62868fef6bde0190c81d0d69e96bf290d37215be296c030e7201b6729529e105ee599c2b993fa908f5e961002045b8ef51912ab325154b0bda723c3617c01cc71ce52f9098c6d20e8d8dab0f859dff6a06315504b9d2bdbd4228c5054d4fedd2c82d2ac84ef7d767490f606828c04f3c370da75a99f8227d38cc7515bb63e293117dda13193c7e658126101e2f7372d535e10d289c1d161383eea5190118357522540200cbf42eadea0c68d8ed5b7bacf645f16708fe23dafe834741d3ddba77b1583f7674604cd9e3bee646675db86c1e2a0959f683b0bb599179f82712daeef00633e86c4bcf477a4709f3fea8a38677da4e5b8ff14292f9cc3cdc120b0d48ef3571807926b856ae5aec708e7684df8917ac491a42aa185df99ad81a78d0c28a552f9c2c12b9c6714cfef945ca373d4a2a5b53bd6b5ee45c1773c9600c4a4e3f7a4149a287da2ad119be1d6fb06661ac5edc77fe2e4827ca8d5722463993b279c2d3af26327635f8ae3f5df28f3a5390823905153f06e9aea9b9d0d801493f7087a732cc7e242246c820ea69787f5ced7322722e2e1cb936eaef2a15dc6f87dc4ba6316d21337b1cd8a6c9e729b8009d778aad7a90a99347891595965a587340c7b136d19087ecc29343635518856540c1b5ee49a41ccbb7acb37b34f97660292d5132dfda09ad4bc16212b9f25db82110a03dc0dc0ea8eec11228961b0623e6c7abf5e0fcc66ef0ffb8615543dff68a25066f5d7ac8323117a66333952a5fdf28f2dcd15b9a747b0a0cc6a53895e07bcea1317698dc3e09bb07c30cdb4b93b54bd440598000e2e1208a34653362084a9d8cf07f1a70990fbac83da9dc27403120c7822141489ff4b0edba5272e65cd9c0cd14268ca9b03dc19a0293c3e7bc0639d42351a7499dcd36051fafa0def165b487dbb38c6550f9e118589e54cba9488fc23e620ded72aa1fdcb1f553cb6f125a3e91775dc015d258b6b52832106ff8d799765382e07d28aa123b602ccc9f8d74a68db11fd190896d970d36aa886b007055ed74ddec80b79ae80a22ffec73618d426c359b9a0e87ac9c2ff32f38026f3bafb3395028cb9c8685ed4c99117d9fc58149cd4f642187aa6a8bf15a37dac43048bd0b786f661ec29112d4014d8d29f38814fccdd21e67dc3073c54422acdb2d10b810f44604148052b578a2ca1c8c68ca31356b18366d10e791e31cb480c32068c021ceec90d63505ed513b246664c06991198d9441c8c8ab1be3db17a0d12e699a982e92dc83a958b8397d533f528d01c48e5da31ec2e01eb24a451fee7592e8cdd4a1041e4d3d4a31db5a69c6a858e37e2a5a63b1b082b2185f3ef4f97caa4955be030c32129cc935b9bf8874b3dafa4ded0cb217cf88c5f1124366e183e3682590e01b2dfea4516f99e306ec41a3663937973a38e530733f4f17bd56eb41c4706b5967271c8932e83bd1cbe970fb085ea9b5bde20ef58397237188a1a3c51abee98b76c4394f72d10dfbc46ba78c559a68f5c06a5e0f31a63ebb705502e5b7ba38b933c80ce08d528bd73ee033bbd96141cfab275ba6e5d183622c66dfe06cb2a4c6f05f82117b5056912132cb3932dfce8d6d8814f2024acb89316d95b309aa6c5b9ad06c4e596e2c593ac042930e0065174d4a88e38a844a72df5370c821eaab76fd3d9f88a4ccc2ce38ee08b8e5921866c55f00e2b21643461b360003fcb8401273bc873a9acf59fe2f4fee6415ea83d1f055050159d7c41e925e6b636f10beeb9e0a6a81d11ebe406f272e57d54deb7cce19c100673131d65fda2c257f1fa32e6b4336319e6012f5b04687ced9662d17845e3cdcb4101f4e162d6cc239f61878c7e75f6f71d1c3b7e509287b4bd360737fae388210391022a9164bb6df57f9ee25694b0bd34c77d3844924e0944fe2888588c0c7cad75794c28ba39d1a0d7986c2fb2e167717cbe82c30f62ec7e72632fe3f27d48a39fe2b1fc0a47bfc4b13d490dbd8de4f6908c3f8be2f3948c21f5ea4074220d41f751ae680da0947f9e3c49a208534e3f24d1316242b2fdf1297a82a25ce1dbe518e164f538897414474b50dba20a6aa689dadbaf30d2e49b1e72398fb11319c10b9bbfacea12bf1d05c452923581407a9f3b3ba902530e488d01aa91631fcb5d772883b0b865c2f1d4465ae2abfa1b84f28e7ad8c9339f1ee0fedf0078e3e37de07652b43b7d706e8e2e26094e913bfc34f7b9b1effa616e6462dfed43dcc58c3c264c37ab57ad9ffb12c66babd577fc0363ff357aad6f6f89f166bfe94ccde7d4fa6fddaaedef50624cf3b157ed98b1472105758d1925e6485533bac6f5ddaf233d02c47b054ea384fd0e53201c15750e423c51012b9cf1a21d2e78ca0c1bb0305904a819d83cf1c1062c209d1d197e0a9c90723fd040488e5ec89afef87ebcd0b4ba9ed4e6f515db93d6d6551c52b2a2ad76cafd9e7dbfffddbda59452063c0f620fa60e19b63a55a92f4f52daf5e7ba4659d55256e866a1c4f07255aed092a55259eaea5cb14e55cacaad562c15ca629da4dcb85a45ac14e51ca198a4daa85a452c74544bad2a7465aed4d12a4db14e152b2752ad4e169fc9908d9e5ca57ad84ab02757a8aa472dbb34c93245bc072dbb58ea4836c4e394642203bc117f803fe211204a7d39800ff204f8027c11b0d797315fa67cb9bf04f200f8003c112f0058cd8b5f420144c7d77ca9e3cbd897b02f7f781c9fe381f81d3f9321137ffc1041fc8f1e1fc4973dbee4f136efe36f5e889fc9900dc1cb1fbc0c82973d78d9e3c50fe27ffc105fc34b1dbc8cf112c64bd8833ef63abee65fbc8ce1650a2f372ff78b3ee563fef528bc64f152c54bd5b31ee54f7859c2cb122f475ffa923fe971aad4ae7f03e345c0d9f51fb16b5dff01d0aedf0894b5eb3740aeeb3fd9fbdcb5fde84659374a1166d75f80b4eb2780d9f50f60eb0f52ebdbfcf4cd8da26e2e00b5eb27e2ecfa03c0cfae1f48daf50360bf1ab33f65f3736f9454b4f710fb85f8b5ebffb1b77ab3d5ae3f88bd531fe9e77a6c949acde7ba7e1efb77ec5ad7af63ef1c10b9ae3fb6798e6d6e74a3e0d868d7ff030adaf5ffa86558094e49265abbcea1a2daf59b37d09f7c6976ad9246b9ae7fed7a6de55aa029ea8a89669888c5998a2d4e50ca9aebfa4f78c9c26ca92d6a2939166b76d9324cb7d016e6a862b2504bd0ae5bb59512959345ca026dd5565615166976e95a0b6d61aa982c5416672b6d91b2b2e0292a4a653569e5485aa02b266845e54c4c12d554039d62ce246525394d2dcc100b9544c56451e32c50916cd57e65257992450a82916b51595217b5951c0cb5256d9d2ece17288c3465415d982f5c6a0b4bcdb5be3861a02d3596d3957b61c2405b6a2ca72bf7c274a92d2c35d7fae28491ba5216d485f90286da92b64e17e70b1446ae4565495dd45654ce8e92dbe7ae3d8ab2f21a8abacd4fdfe47b45495ffd73e7b8b95194af3dc9fbf0e4afa35114f122a897dd284d9ee6c9ad86454cbed394a8bfc1775a1621791b3ecc64c89e3f8d273f67fa99d2f43566f89ea19e6a0a8cc9579c92ac087f191ab91acfc5bcc83867ac6a4e94ab9554a9b4eb3f998196c8807de94595a1da3126ca0cd68cd8ab382a23ddbc8c3167a4e50cb3e4312e234df192a73350192f2a8ccb4067ac5c95f19293519b919b51e3b99755c639439d71ca50614cbea2d4bafe1b35c348f89b38cc09a3c6385fcc975427c33887a9e55e509735860a73aa31ce17f325cd6518eaa516a396ebfa73303598dc0beab2c650711966c25f4e983506eaa2c65861d218668c54e492ca3061d218668cd42595f172c2ac31501735c60a83bed462d4b24be7629cac252e6809466dd4728a584cd05a922bb9d446304e518b095a4fb9923a723945304cd07aca85d4918b54e462729c92ec64c529c94a7221f545ba72c18231533354d37992a182f84a72aeb91acfa96ab9192b5765ac2828f9a2f2f1c91893f4e48c748649ca48398a7a314d4e923a9ea19774ab262b69cc855ed05de339526e8441432fb5aef75b59e94998b56b1e03ed3ae6adece4c9186bd7a33a7af2e544712b1b711226e526253286194372f1648c743c9161fac0857810a64bcaaaa57226f5948256722468ea349d5ad2d64982aa6a2617e60946ea4a495a50154b0de5c57972ad2e95e394642c1f3718a88ae39464291f694b8de39464261f392c670ac729c94e6f65cf7da82fcc15f781669776e5bafe206c1906e2e435c93b23efc9e2a115f2d26ed01bdb0fda4d8dc54d7afbc0f22608330833c37ed03c9cb438909336f771d2eab45869e1bf38c577317bd78dd92a83d8f9179cb439e2bbe0a44d43efe264ac4505b4ebf781665839de547f7a1fb80c3bf153ba623d889f6ee4d07de3bc61fac811a17c88ebf7a19ee30d2d3d6dacfcc67aa3662387769df222d3c68d34e64bb91b6a6d7dbd49daf52f21bda1d2d468561be98bf7d4c68d94e6ec680ca7c9f59a8ddc0d942685d39834693f6dac37d61bb51b391ab4df386fa0ec9bd9be3177103bd9a5ff072dc3cad5af5e7cf15b70f24f7ffa154e9ec20f9f052747d0835e85d3bafe9b9c0c5bf1d5aa7476ad767daed4930445904ebb7e9962cc4b2df13276c2d4533d1fb6c6c0cc520cfa4a47bc8c99d9a5612f3326554f313918fa5a4d31b5170acbc16a2f9298172c07abbd7231e72b2607435f6b4ced055b6356981983be522be4f418f584a9b0f3f55263521396be4c98f94a6350d81ab3c2d0d70b8d89c9adc05ac06aad57cef5aaf1d84963ceaeffa6766333c129c962b135edfa4132eba9ff06cdb0d2ebbfb965581a4369982aeb3f66d75f2b7d2ca571e6ba7ed189964adea484a466a2b1ee2fcdd45213d4a762b99347d1404dfe4486bf894c4e464df1329643f192067ac24b19d38497329ccba825bc8c95346a258db59cd95c262d63298d9346ee44e132680ca561d250674c169789c5561aa9ccaae2326749668dd5622b8d54e694a9cd983194864943a591934167ce584ae3a4416325c9a433b5989589662c6765e18c066a659fd3b4b21529a3dad4b24bebc8e4bafe1b33c3ca207632ccecda87d44cbb7ef486a6766de34ccfaedff4c1f421b561a633e85953735dbfea836ae39c497d386b9837b35c2d6703edfa6b688d15f561ad81d6587d4067561fd6995c8d5a8d9c0dd4879a8dda8c5ac3875c0d528d7434433ea46fc304cda022733c433ea86fe304cda4a27354430df9907b1b35d08c5aa3562357f2a1f628889cc991b88cf4640dd4ca4251fcb0c65a927d42ff419f5bd98a97ffab277d3889ac0cc477d066d6aeff378f74f3b86d1ee8c798513a73a1141597109aa21bb5f1c67a4a57a78df5063a32bb7e90ba845a6823d7b5e846dab5eccf34273e1ada50451ca7242b9d9ebca1763d72bbaa91384e49164a579c924ce44be03a561b69c9c32b79a4eff296c7ed6178c9033dbd8c92872dbb74106a8681380f7506275f647012e436bb62703206c3c9f185933675e1e4098614aaa09361fa2d4e4966a2a733d7c2c96b827e4cbb6ec25aebfa4326982ae83fbcc4a19aa8ecccb170f2d240ff9f7ff4f4ab1ce84f67e9416bfaf9919738d21fd69acc94bde0e43d3fa1177d488a5af862f9c9954b3021cacad1289ac99091788963c4cb1fd29197b255c4cb4ec265215ee21079f9839a5dfa435efe606697fe0f2f7bcec465282f71a0bcfc21c7cb1f4e5ef61297b9e0e49ddd73045d78430abe70c5a9beb942736a7e411ca6280207e46007335d57b5339d83ce1426094c2cac68ee9fb44d5057e609bd5480c0033ed04111f020b332d0937609b94f8de4074be8008a1764c10d322bfb98529c3e38f1861d54c1090f684166653f6b42aa426b82131d0081085420b3b2d5b9a220410922c0011172249059d989d33a69a7389950cb37900313823085327441666520ee636697a076fd3bd20ceb817371d2e2722d4eda9c4e0b4e5a1dbbae70d2ae3b681956e29464331932f1f7a0ca8aacfe5970f205047232760aff14fa990c5948095ede5865457aa870d2e6f4a8e5dfab7d524175ac1956f638b34b7f8f9b2dbb40df83965dfa5f72dea698932750ac8f53d099e2ecfa6d7656ff1949a31eb3d29b484a4cfe9f89b759330895522971af9085ac175f7f0ff33e57e25e217b949dc27ff5fa6d74446e53051b2ad82821d29fb26dc2c0b70d186cbe6023069b31d890c1c60a3657b0c1824d166ca8b029838d196caab039830d1a6cd260b3051b2dd870c1a60b363639ffe153c8e9fa7146d24ac19482adebe7717aff62e8231a8d7f7afd3c6a20d2974c242526ab07cdf2e904950a559f4293cdee0ac4fa259838c9507e09264619ff25980065fbfff5f330334c897cc5154b30f1224be1354f68c96a9c6061f42fc1c4cb6aa4b030fa6b521ca35f3fdf355ab030faf7aea1c2c2e8ff5d93050ba31f65d76cc1c2e867ed1a2e5818fdab5dd3050ba35fb56ba06061f4a7764d142c8c7ed4ae918285d17fb26ba66061f49f76cd141646bfc9aef18285d15fb26bbe6061f493ec1a305818fda65d13060ba3bfb46bc46061f49376cd182c8cfed1aea98285d13fee1a2a5818fda25d63050ba33fb46bae6061f48bbb060b1606e6fb705b0be3f9cfb61606fceb82d1a666e835e9e95b2f380a2969a1f0845ad77f5930fed95528ac5dbf55698c8c7050463c8d5bd085d0aa902f8f5bdfb76df670d05afbf17b3339a36ffb7adbae699db44f04f71cdaffbc5fae4b8cefbf4f75fd7a8f5534a37502126e2d272001c50fc22a0bea766ec26e6f9748d8b7a28d715db4edc8105ac105a59f2209b81ed3ed1449a8750dfadec33bcf7fe2cdf79d87087e22587b3ecff3405ef775a0f73a1f60b74311e4bdd769de819cfc3ea28ecf77bafb72741f28fc6f7fc4fb207975faf720b833f73f0c7a2bde90388949dcc110748780481068d384b77b9248266ff7bdbe1f4fddf7bcfce8a346ffd7bdd775a4f711759440efd12feade436202bf1bd0f7754fc2bb37794a1edc440fbbddf5ebf50b8260bf20cf7b2389dfd975e9deb3b5eda310c6fcc523e2e1f78160286a10e8014391db78f487a0e6a9f03b1afe7d3704d4b5e7454feaee91e29357043af40bf174fd341e91c8c92b82de694e56c048ff1ef49ee785fb7a3ddcb7835dd71f08eecc87660868086808e813e62e8448b6f11e1481d7718d5bda653f9c6be453a23df1bddd9bbcfbeddf6dbbb5b6bb3a187f68c59b0b022fec6e151d37d1679ddd20b82ed7de2a726e81d63cc44fd985df138afef37a6bd8e83f1f72327cb108a21f3dfe19f8d562798989b78a711c41af370992a01e66310788875c1841b2457a2beaf86c233dcc9dc42f08ae8bf834f9f39e930abfc4c77f4170676c17c5ef56d14fb88555ad0c0bfd8baf5f872115e3e7456e3fcc1f11c6d6095ff126dc1ab7f4c723e600f198f103fad47cf0122cd8057e19f03460bb0db894308ab4e088cf626540da08685bdb126adcd29794e16d12066b6dc22d8c9718419d4706a18d8d24d871c70f8218bf1410da9e49ad8558999dbb6801af5b99246eae5b00d4efe36b760adce8f7b169f66b9afd3e7ee1218416a3422aec5b6b04df21c2f0bb91f4e105dd14325c21958521de258ec1084460cac2708fbe2b471ecf7fdff77d445efac561151dbf172f7f42856fff798b5f1f5f21ad1af3c897942767f4d53f7e79bec57ffc3f94ffbeef47bb0c7ff4a1b871daa9e37d317f5abb64fdea471be7fe406705a9ccc587773f317a713f818f8061a3ef1edf461b4f815ddd87f7dba8db11708e0e46f1591b8aef57bb5c3deb5d6c28b0b9ff7ef7aeff3690d1abf6bf6be399b9c26f37d52e553ffa4cdbca5b0bc336ebea7e85df1d3d7c6287bf9def92df37c72709c6d3777f7740df85e1e254786ef1169bc5c653601508e29338475c115f45fc8d5f80b2ef4e7665d7c987012a8a0d05cdb0d2e63dedc337949c0cf33cd397d8e2425f7e78896d997669f8b62305ad874dbcb405c13410e5966122bb7372737009267d892faee318c63ad98567178781d6ddc92e9c83efed0178e796e01bb6e54b33819826cab36bb3b8bf3a227c6f1f8cc56b774c1e3c33c1b899c84fc4101743acee66fa52c4854a78c8d6f19b9474392c5e76decda677328ec4750ee9cb6c0bd13a7e12cfa66f59a7cbc139227e8249ba9d939cd3dd4ebcd989a6e99cd3ddbc99d67a966f368deb76744e76e19decd1ba0ee7ddb42de3446c6223e95b48e724ab68261ead0493e0ced671b783f5ec0455c2553bd9a54aadcc9bc96a362b4f9d8e556b76619c920ce5a1793b2b4f37439d803adfac6be1016927342f07b4b540dca7333e7e70a7e3677db62f6784ebf8474f07cc013f5ce9b9e0dfcdc381df67fb723e9a9703da405c8b7f3aa0ce37eb3c33d0430377bc1d8fad9bd13efc488814f2f0239e221e0f5fadd985417e04043d0ff2954e76e123df2bf1f9234542ff1df15e89cff322de7bbfd259ed645888e3679919f671fcac5986797cb566d84a27c3c21d30b4e13af672723a26e190f6c9f9806e1d7b701d93425cc7e1ccf4b9916c1e9d9ccfcec9c76682c3db87a602312fc3db47e74303cd3eb3f0f3b181689e9d1017ce3e209b27d4c92e1cd23e39a09b071786b60fce83ca31096d384f4e08677223d109699f9cd04dd421b191703d9cedd83af6ec80681d7f1815de4c3e3aa60fed33f3661d9725f8a0f27b18cfba6598c755e6c741189c04413e824e9dcacc9b75b32d273670c7dbe966202de599e9cc3a1dd0f6e998401c2d844b6e1d7f3baceffb6c9e872b3911b12a15327db8efbb79df49896833856e330f8413e59c88b790ed24b47302d211ddc49c102da4238666219c3813d1441d712794237a6ea28eb813ca113d3731340be1c4998826e68468211dd08e48bc856ca11d908ee826da4237d10c8413e5e89ce04a6ca6db279a7939a95bc7209d8ec5db67f376523a2a9b09b4f3e57834922743b38e55215cc72c11ad6371d6b127e23a2e5b90a24ec7249c14773a669990a11c14273db78e5d3c4e496632b2e5742c22e13a7ed1ceade347dd3afe919483eb58e551763a6e41c29d463aa5198b1f8da3ad85eb5d8c5aef1ab5f8d6785bf916249a08e78297a31d172f47b4162fc75b0b5e9256b808579270e548a71ccdca91051f6dd985372f4939a351858f3be58813ed906ea3143eca19d9c61c118973922dbbb048639166a8918d64cc21897444249bc9280735ba91e048a49b092eb543a2d3f138eb5894d3b189ce8f663fda3a1e691d93701d9bb0c69d8e53a111ad6315c987751b6fab9a8795ebf8491167a5d9855734d248b24e1b8a2da3fc09c5d6f1b36819569a9ce2833a1de33c371b0a3e8ad6b1c8a4d3b128e706bec84b928e0957bad96ce0ac635bc7efd9e918c475fc391d3f8a97a41d13cda453ca21b9b16a1966f224a69b4882ebd824a7e33729ed744ca2d371c966ca2129ed90e89468a61bc9aca443822bcd4c36d30ec8cb128e44740be97c661e130eb489b750ce87b4e3a1813aa2698794f3c17966a04d34dd3a2691cc3a3621c179bea4d331ad63d15bd947f264c9d6b1897bbe9cc9907da61c1391af504f42ebd8c35739271fbe22d121017f87fe43ebf83d3a1dffade3f74a723a2eb9752c8af8caf4a49d8e3fa7e3ffd2d671e84b5bc78febd8847a5cc725b48e4b743a3ecd3a36b9758c6295ec749cd3f1c9973a1d3fade36d32ebf84d701ddb3a6691ec746cf2bc34c165177e145e9e6cd9857756fcb4935df855bc2c99a5785982e2a5c9092f4f3afc64c2cb138e9725345e96e894a71237b999ec88787912795962cb2efc215e9ad878c9a734d1294fb7b264e4253790af4a3b2539349d1bcec466b29363d3b9814f9e66385ac98e49ce89f63d79d229c929c0831e9ec8010d9820b3320f0b37bb4c84a00b57ec5cb1059995853e9ca59ae060a0c082325cc18414322b13593927db10ee8082191d4e60b2763ac63b788218ced0021248817523d9c14fb26e1dff06c68b6d56817e555bd13c8fbb156d455bd1ba6acdb0d27bfcaa9d0f2fe2e1aa9c3d5cc1637a781190ab547006f2221f57e1bec7bf3a3f5e4495f37811954e76619c635166b6053fca4c03a3d69b02fa35305ae0eb14b866af80919e44c72bf0f762602455a6ade32f32de2755268aca3272713c23ba63c01dc2b4eb938dd593a79c9315adb5d65a99dbedd5c0984406c60ce858ff714a329237fd4c86cc64e2e5f824a62f89de14fa3c10b50cb33270f4b22d474cc3d293565fe24b3021caa00072fa117f420de7e4e8d09176fda25bd71f42bbfe8fadebff5ad72fd2bafe9030f638c9534ec734196fdb71e432ecf4fa71e8e05833ecf3fa71ec64d8bffe1c6686ad5e7f8e5986995e7f0e34c3665e7f0e5c8689af5f62a8276d6a737c78d2e2689eb4b91b4f5a1d1a4fdad5bc33f29e97465a2972fdc8a8faf1c868fcd11f498d52474aa9d2115291928a1721913ec54b243ee2353f4aa05463336573a52ff59f285feaaf515f5fea47734064d362f4e66e366970ed5ebcbee0f3a648e0dc63f31e81d5f1aeb7f623bb74ba5394bba6d452238a9a62a2a35d633e25973a6f3a5e35e69ab1145e716ddca3cc91fdfafd244651789123483cec612f3b8282f2e4cd719c922c85c78eb062be088bd58fb09ef5e43d53353ec68b1c49f122a914bfb17144a57ad21e49bd12a07f05a0f4b1524a10293878f0f852004f04014a25524a101fd38397b17ff5f85459e38f9413f811bfa921c38b1c19bd126339932143821781f19b5c76e909f022a31fc948c0ecfa87d4ba7e2169d7df6387d012a926e646a11209edfa1ba09f01a3505a3a49e816d791aa76fd0aa875fd0948f51f31ca85d412290d99a35c7685d6b5949652528e940b91cc500148662847805cd7ef6397d0aedf6693d4202435748e560184ceae9f88d18a53928d295dce8dd4ae7f1c5fc7d9354ce73526976b29bcec4c9d739d7a6aad6a73ecd68ca6bc0e5e76a74ef3dae5728acee933c5cc69ac47b7765debfa636a97ea55d7bc33ab1daa73faf4cc1f3c7735adea6ecd41a8269a3b6b31b933cdab8996bab5a6ea7852e7f4993db3e6c90eade147c20f9fec521dfcc8678df123ff4feada5b198c1f59ad9ecc2a3f72e265001ea7244bbb46ada8d78979a2e2480d6176fd0238394f72a91c1067d79f76fd38beac75fd6bd73c52a99a3a80e78176fd66d72a13480aedfa51b902bc102729ea0c002f556699424b548e972705e0a8b34ca56a28f5041d004799a9d4893a09c24fd6949a3251e8c97992cb2e9d4a512baa76629ea89e4e4c27f7e237b923af7f1da97925407fa4ace1376a76e923445e09102fa2c4bd4206057e2b3ba26300b147e227f014f824be0231188e2f853cf9433e022f019810cfe3cb063c03de01ff8087c02b005f0211e201f0a5105f16f105f8203f802f837c29802f89f812017fc427e015f00bf8990cd9007819849702e02511bc24e25f2f800ff203f800f012082f01c04b217829c4831e000fe403f037bcf4c14b1b5ef2e0258f87ede02510bcccc14b1cbcc4f1b11f7859c3cb9ad7f1c313e13739d9b5353052e0769b1cdba21f0363056a5d7f1268d74f0124ccae7f022baa4acd85fed82db366a7983af68a2a81080c11b263aba0ae5a8b35e5dc2b2904d2aeff0167d7ef8006d4ba7e06dc6c15d7d922b7536a2b03d82a0bd8ad550102d82dd204b44853d2d75e3911909276fd47aca81c40457519e1325b1860ab5dbf103b0505ed955a0156767e0022d7758abebed4af4fd0a35da76bd75f037a351dbc04739e14054d2f37fb5e28a8bfa6034d57afb6c3cc301ddff9e3cb1a10d591f3981e68f3d5bed5033de757fbd6eff45210fd721ef3533fd3433db520403306cc953ce9878e39921703aa250f3a4abd95e4a580b592a736523fd34b41d4638ebeef0cc24b8929794e02709c926c04fa46d00ba49afa5fa0f473aefa3fb510453fab2767a21f350ccf8f67fda461787e3ceb27f5e4c234343fe847fdd43c6a88a29f15947e4e7035c31a08a47ecc1c78e61a19baf0810ecc810e39d4aca56a133310c207ec60822b64764d4f34cdb5e14401167670a65a43d5d15a043574400e63b80111ce9c8542fa021d0ca1054b70832cb4d630f3a0c411b8a00537c852267e408727e8309391726198c210963881178c202399378260eb001d38b00659a896a2d65a4e35d1f464ade54ed893a9daeb49941af324ca4c79f2048d3d995a63fc463561fc0697425ffc26978be1373aa8147e93737279c08413290a76cc9ada75daf5d935da75adebb5eb5cd768d7e9e932d55ad768d76ad7b9aed7aed3af0e6b7081157978e209d9d9751556a84558022a4b6361ee543f267886351d2628fd9ce08aae2f105aebda030bd39ad0ecf1513f688a2707e33825598c973c7e264316c493a15ac3714a321d5646c2f16478f6e03825d98bf7203f31bcfce167326442bc958d9f206e4a27d4e45c01f020925ad2714a4d6a312540be445a4db91a1c27f5071ac41980af514d2b0e1e3bbed46f9296d488781ca51c89c9e3e6b4fa30516d4a50013c8fd24a72def0f2549aa865095a96564e7296a75c699296d44a392238c94935414bce921a006e5a53931293b402e1a6dc09353949561200b8494de142f01288c729c962e2c81c6ba0704dbb8e89b598714d194f1e5faa75fd68d73d445447aeebb77958aed66388ffe1d3ae7f5445ab8fef015a45e70f40886a8e31c521baf91f44536402c14b512dc7b414e54ad1e42273085e8a6939aaa215b472d129a2636e3441392eaa89b5711d4f508d8b50713486ab28cdae93702d3945233334d6c4148496d444b5d02a9ea0d11cd544b9102ae6509e1cd555f5a4e82441eb7e524cf95bd9ae11d5128ef27a724cad8cc595c8575c418a726f652a4e8a4cd98fc729c94626b9921049ed87077d693249acb5eb129504c5f1a411359dacd72ec9a5395e75d65e67d75fa202f1af5ad75f73aa0561d28324b7e36b46a829fdc1cb53ad34314b92728472535a9eceb284441dd5b8093d992524e9e8e4a69ac99a5d5a2541476e3a4d72252989e8076e328790c51ea724734161d4ceae412b8be902e334bbfe31b796a0bccb09c35cbbfe1217ea0bb3eb6f59735d3fcb45fa02c60acbbd625ca02fd2182f61ac654bae64514b17287f91ba982d2b4bce45ca5fa82e270c93c585ca5fe45c6a678b8b1afe62456ba70ece628a264ba49e98e44ad29a59729e8ca8c95aa292a025696d749a25b99292954435a1a35ac98f5b76e91aff81669736553f6cd9a5733f6ad9a5f90fda083d394bd0d22992ac2035952b21ada554ac9598a953655a4baaa882d09449aa2aa9b1484cb1943be552246e552313955582929c3a764ae39559d9f340330cc516f338255948955badacf43c7342a1df6bd7b9540dc50ce5562b4b75a29c6986995daf54562d8476fd6bd7bf79a95a732c5485c2e316b96eafd0ede372560924c2707f1b944138030d85077b617cf09661de6b286cb679082b6b65d7e396bdb6ecb29fabf09e97dae72dceca64d947c57b1a9c73ce39e79c87a8849f9d65a10af9421322cb3e1cbc716124433554432af0cbbe67dffcf127662fb332f008d865772a7fe6e06d0b16db9b6db16fdf86a975d9b7d93eb61615b3a7516410e6ef1e6feb79def356f481d28578dee296c62fb8d5b29f6e9331cfe3f15812ec981c12ebf6af1110e726845685d46acf367fe8f597b198c3e2afeb4823da8ad7f7e6bb7d3fcc209dea5eafbdab75fc9efebb49db3ddefd77d3d160bdf58a5b5accb153fac1372203527af0cb1b5fc29e17862016f205357afdfdb7be2d647c4fd34428cf87848cdffd284ced3083beefd39f0eb3684385513ff9d2c9d4773f7a3d1ab7eda991047af94ff69de2e6689a87871ca5e2a0ed230281fb0c5037b6f8a55d82bec4096d603365228722fc12073445126e321087c2f338621b96b0c9404f1136f703c8d799c427532813efbe7b52afa2cfc44df4ef1b4d2488e4fb38796fc2eee9f7441daff7fe45af213187f6669819866f223ec63cf933643cf972f7f8f8e6e2ad9819325e5ffebd678addcc701277fd314e62936732994c8fb5365971e669b0c9b3c9d0c01863ac7f86dbe8ff3689cfd7bfb5acb776b56a8fa74c3f7ea76922d5b7bccbc3f8f85e73b2e67b7df3bdc73badc9b1fbd7266f7ffd47d4e1bde642f4cf7c28de80faf75ef79af6c2c55b0ccba8d46883f4c17b21b886f73927b2c1553ef0165e8db1abf550efceb46fbff7feedf74d5a0477465b317e166fbad7de8f44f013c11df799ff36a9d73e7edfcca7f1f8a947bdb5271bcebcc749ede3feccf89a865fb1cfcf5a95cc8c5c3f0dceb6d3cbf08fd3b0a1ec1616c175b94f93635be561bbfbd7cbe25b86e1d5c5dfe616274fe4cbe0e44bcee3e40b275b9a93cfb2f9a3f0cf7bec99c60fdf5cbcc50a0bd3c86df09bf0d96285c5e38d49705d3e9e4ac13717ff9ccb3138f902c3c997960b275bdfc2c967c9a94428cdff0527c76ee282bf4ede6218be65577e9353c7df7a52f7eebb8e41a20efc423e4e5e51bc0175fcf8965dfcc43939e6f4fbef5b7012ccdfaf7072c4aafe3d0b95adc29c0421314797b2afd753f6eddef7755defeeebbaa76012dc99ab6979c869c8891c72ea23bf399742bdb6b09c66577ed009d63cfc5ef4a46ae4fc4634a619661a7d1ebdc747227d7325ff2c4e8ebde44d602ff9abd79bb9707652d3be2d3222e29804d7059fe10b7ed97e4970676cbfa0f525c551fc845f2432386ab55e4ca71ba92ad1345295f3af34434cdb76d30f203330ccca342db721e7702b57d16ab558ba06b5e8432df23c31deae75a8e056b6bdbd5e6914411c89ec02b7e7066388448391f8b5e5bce65cd6436e0386e57215d98a9e1faf787dfc12f1d013e25b19e843af121237386657d6b44f5f5ba769a8c706b8d006a9100b6cc0af929e82548de73f768a1a4c5183938f6db52151224104675bf2e7dc293cb8198ca45d4b2488805cd372fa059a665b6d48684d734327af6ded5a7d81838d681c0ce650030e145a359abef035f620c119b8956fec73f25c70dcdfbf9dd26418088e29088ea32789db11606177965df967277b87bb83b1c56265c057e9f9ed77bf7beff77ddf11e014361d747b87e056fe9bf5b63be835184f7afed2ca0cc130f0f31fb1801fbbeffb7060584d969f06bff4898f167667b9cb210ec29b0333f4ef2428db0cbb2dd083105259c75340ba2e0f89e51077f4efbd4dc658fae7bf3d24d64135be07317e7dd7f33cef411ec32d9a1a34b8f5d1803bf67dffb1612463b14c835fb68335d8815f1ffc027d1e31183e2406518f1f7cc79884ee570ee38e1fb1910e47623ad6effd19a1fdafc5076d8b5bf60566c2aeab630da311d5b7fa1dd530e62baec0b9dde70835ac8c106e80e0389e4e3e806fdf7e2cbfcc88bda847fc00d28306c7cb0cada3c08f7f80e0389e4edfc3fc7d6097bd1c1a6d8be8f14dbfffd2ef8f71b447881ebfe52d4e9e348805bfeeb3e097e866ec227e53d1786f22ce22e6f801c413be460f086e89384913e2de8b3611cff38345fc2041fe5e947fd1090eb156a8d18871901f18374113c19db92fa89d003f0efd6874c2767740032b737f605bf07b4dd0b0fd4df228dbf4ac5dfad526bd6a9b7c6a9f1eb58f805db8c70eee0ccd75f9017ec1239b88df9b1323d9ead88690e8f7f1b74235e38de2f389e2e22e15970ab6859fb4ef136e0bbf879f05bf2e17227aef710f9a172cfabb45a1178578ebcb3458bc4d20af143afecffe6e9e0efc1e7f107c2f78bf1c35ac4c3e8d264cd291a67081d0b86b7defbdf7de7b633bf0eb7e8f36e4b7b7cb3ae36ec51c9705b7ee7d15fcfa7ee980858eefdb7b47bbc2207462a6d1604547e9d70468a0a2db91fdfe6ed082e0e964df447e78df6edcad359db0f737bfcd26dcd9fce56ec643d775fdf8446403719f0237ecdf2bbcd836e4b761e8645fa4bf4f62677e943c69d2ef8fecc7be4c7f3fdb909d01f2594fbf6fefb785e0ff76d09421c5f1235bf500b60137024430805b40b2e8f30711dd6bcd10071cf8753b0ce6ae5f6e814e654f26d3743f1354610927e46f653a9d46e4a7db3795904461f817f7d88e1e180cbd15abd162c1de9bee8ccae9cee050bd0a895dd896ef58057ff8f1d82d84018714cf86474159030a8ba506d6aae3fcabdea5419542430a7506d449152727339c4cca6052428612921c89690ca692184aa430904660188d5f18455e1085ba10127122880ba0700be1470b1f0f151e300be08785cfbb42c77fbbdf815f5d7e20badefd8d95d13b74ef3e88dc714beede07b62dbdfb1e56e67e986dd679bda207bc6ecbee13a1c5af1bb32df743ddbad78a2c3decb08755b8ee38ce19ebdb696bb585617b4db875bf2f58107e8d240be8c91808bfbaeef3f2426f1fd4710f0852049093c813eaef89d187df9e510476e5bf620e110ff222823effb8af6d899efef271db227e18e2ddf5108342db635b6205fa077a9cf507da160ff65ca07f2ff8957f0606faf61eec1f17e27db687bf7cff799fd7791e0775ff7dfe19d833f119b8f5f8f527d505f5a77355bccf39e79cefcd37df7bef054f378779e8e4a86b90f1070359936ddd2ee79cf38e588d19395b296a6627a24d5d839a53a004e1390821a7ebbaaeebbaeec9516badb5d6cf444c9673ce39e7672226cb9ee7799ee73d133199e7710b5a8b311762d38bf318aed6f75e7defbd1ef8d28acd50821afe149bd1f1ef88d560397515d6a13b05ca14bc9585aff1845b587565dfee36602f0e69db72651acb2cf8fa8e3114c27b33c6d9d2606f5b7db5bed97beffb5a41bafe6ccffeecea1efcbc56d7adaeb5ce1ca7258302e3155c90d9ad37aab4c813a94a01b9a511255c712f06727f882b03b36b9fbade59679caac946baeed24c048d9fa08417051494a19320085c47fcf7d6c21490bf1ce7fee550d8c7b91786d9f10fc1adb727308c54d8c7816160c619db56ab769bc04e74fc570ff845b6c09d16cba502bb5a6d385571c10082e3783afd9f64ab15eb6a47c548def5ae566413b770fefb1828f12b7324feee075061f456105a951fb8956f50d1f38b956201446e6737064e2710e448608048d72f063612b865f78fda880406f0cb1ef1002a8cf67948c568c2e1dafce4e904829cc42adcc20f628db1c6af0d6a6bea526416efde0e8f1fc8c9aef3b8d7e59b6fd6fce535e66f8d1804c72a2c01840efc265fc81fbdfb7b3feb70c4ddcbcb053dfd85c1f33aadc9180efc2241b1fbb80a4b984127f4deaa9063f729c1885f8360f7be0b417cafd7751cc4adad91307660d759dcb21ac3ac4c47a13badbbeef3be268cf941ddeae3bd5ad021dea0c6ad9cf508f660cc2dec61531f62a5e81adf35ac2a9c83cb99020c3870166d4498e63e6661c14196bde4f91df8a5aad1597786469f11a35fb2e545578981313ed942953a8244452ab921c9935f97c0f798d37c7bc70bc6efc79d41e23909e4ce1029c28823eecc35ef120f4091c0991fd346f7053856e6c6a0964d5b4a042448a5a0bdc4e03b554da03ac6ff852e7aa3b0dd997bbb2e3cd801ead6443cc549dc4b7fd3d4a3b05626d2f826296abca8786993467a2994d3433c07795ff5aa2d24944faac0ad306cc10ab695ff268193b847716f47f87c890bc11f7a121f45d1b3e8f6e57c40dc1bda2cb815923e3b099d77648cefbd525829d6d3480862146190aefbabd5edb5197431881cedbdafc121adc76fa4bb790c5767e67efeab4dd7e53e982fc637eb0faf8e51eb0cca99e3d309043f0e72db6d3dead78842f518a09f71c7acc64b0dfccae30c1a1c34b8955b5ab411d1e056febb71e0961575782ffaccf468d1afaadf9739f94ba67e5c17927e49fd86fafdfa0d12f6abef4c11d7c5ca18c1c921adbe03d3e0e8f10348903b33a40823ac4c123f9aa23fe6252ab00884ee272f76c82c092b734130e6465584275bf7f043d9a5676dd39b3c6a63db1afdb7c90d7421f847af8f3e9b7789eb72676a5c1710589918b66576675ec2930b3ac1a0137c6dd6a16b5b4627e4f81530d273bf2608f42793927d55705bf949f685816de537e52fc5b84b88a1cfff127e26f1257ae82fbf7d9447bc855b391c4711199224f204077e5d2e81d68efc04f857c46979adfe71160e0271ab6532118f5061d77c5a9926ac8c95c92ce8f98fc8b07c3ac0bef20a76f7f97efe7cdabbc11e7ed75b882b7bc9aedca59d4ec7840b03b30b9b3daff4dca59d176e87854e7652e8f9f389ab306aadb5d69dd5f7de7baf8ed95f456502f5eeed779dbda28fabb5d657ebb36b0d6610cc16ecd68f0cb5ae3dad3b6343896ebd6e5f084de89d0475ebf9aecb857dae4bff0704a22e27555a31ae4b3f088efac422597dc6855d53df9992874fa23a1903f424e9d3c9185d7f1ad4f6b55aea8f063f6eeac7da76faf082ee14b745bfaaaa6a3147ce61a84156fc3819a4b7fa057f0704c7f144be1681d01dbc435afdfbec24740753f752f182bbd3f5b004fd1dbf2a6e7de9f8e1f04868554814b5e3500ad309127a67612741b0b6e774d69d6e536b6d273373a6eda5bdb0b993274138996518aae324d8e91727b32c902741e8f851b30c4b81e0a849d4ace34fa19d44052144a5d08e3f35cb3014145b6a969aa56628b6d4ace367e5328cb57a14f3b433ae3a20388ea7934ec7af430b02fd158140e992b8acd3cad29cce0a9c34d2c3b7e1877fc51c21a7c94f04871ba4bfef96305a9995e10fa119263ab3ebdeef72f414a233c3acfe2efd6458e78db50cfbc433c33aaea9c01ebf7f1f7466d83dfbfd4e092339aeb57e7f5cf12bfffdd18a4f0dbf9cc0b03d04b71e805b7754ad8ec8038a4e2e3afbfd111cd5d37dd77d0f646224750e1261d739474652e77412da7282738d5c9c6b447fee0e1e4295aea5b25b5aeb6c33c638636cbb1db8e68dc16dc13dc105010e1270048e06922075a7bfdb0ff1bd9e0ecfd330700cc36865f4dbd1b6dca7c1a0755dd7088e19e32b789f0d4dfeca85c9ac2b3f8d75c96f8475c92f02d818e2d5f1db0bd39c070c9cbb1a689dff71cee0b557877db0f58431b7ec6e81fb5570eb5a8f87b738086a30dfabcfd00ab1d6a54a75fb279f13897d796f49714615badaceece8d67467c0eb823ffcd39d01bdeace8cffe09d31851f02dd99d3e7454ee23ede991dd7053f8893f8cea8ae0b7e6eba1fc3f4e13b5e74fc58ccb1b12dfcaa3ba3725daccc8a6dd92d6cebb648181dbf17d3f1db58f2491afd5fef1af66d2bcf88b15857b6ae5acf3ab43522deae056bf83f8004f971eab975ba32964e5af5889c73fe18b6c1d803bf3e77403fbe31fce0df4edb7b2d6e5df07a1ff8795dd7719a1f3beee9745bb1203ae7df2105148420b721b42a6497769cf514993bb11e01cdf9966a554bf17af83aee6ef79e4fbdb532fbc9fc1ddec12d2bf8de14d8c12f9c71cf8fd71cdebd53eebd1cefdc9d14beade3f7b7779cc5b6e06f814f8c78074cc3f8fd56d75786bda0b775bc7a5809b95ee5bfcff52aaff2ae7fed54fed51b91bdec540e5f2356a94865202faffabc857879d577b592f5aadcd1ba5a47eb6a18875b194647eb8ed0f17747403b5a57d33ba9dd99201c4e231850783890d7bf5eb54bd8bf7c08ee540d363bf82d2d48bcf4960f5f638e28c4934fd927f9c3fcfc7b12894e247721fcf39360d73ec20ff5a2ff3859fa8e678e6f42907811d2fd0d73cabd49fdc7532ffd7bcf7739e79c3d44789fdaa4e74f39160161e881ac6893f2d7136f3e9edaf9ef4eed4ffd6db5ba4f6d9e1262f5aa276245448a933f7ef4cff3adefc41de28edb517f53bcaf1379a03ef52108ea82c0d743bdc785a03ec58588ef0d79e928f14f5e8dc835ef346e654e9678c7fffb9093976f12a77f1fe60f3bd186bc9f17d03ddf893e7c90bcfb32e76491fe7df7ded6e1156d3c6ef30dbf4ef8671e7ef88b22e54f6c96839f92f297ffdd278fdae48f8ef2c41c271f8eb9d5c10c537dce1f7a2cded3e171f2e69d8e39a7effe8ac7fea567d47b46ba877f0f376d3fde41544158fcc4b990934f39e1294f9359a03c3b77fe3438f44027fb7a5ede8f125fef64d88727a2522af5aceda51e05c5f3fe531f637b3cf530271c859327d4e62d6e819bf258b4013fe5af58733fe5438f086f1371c994af8091ee3d0fad98f27ceaefab36eb571be54710d6abdeb38560dd1d0465f5a107c477ca09a9dfc5ef4de2f414d613a1e22c2256a7d77cc88b2bf3d3dbcef7ed467a4a0ae9bf8db3f6d3b736f9a39f48dff2b925831ce820c635dc726207d8347112174e9e7014fbefff87e216be45416234b33cfe5b07bd7365b6a3dd18186ff129b3c5b3b4780f6ff199b7b0d954d7e6aea7c92e2b7b6d2b63d930768b6d65aebdf25614abc831c4aa997fdf5b29865855c7d353d4cc2656dd79dd87ea81867352a309b730a893f808583576a793bd49bdcce8c420859575fbbf6c339ae2390adc92c2f8f194c7abe7728faf7cca266dba750e6eed5fd1ea15c228beed3f057e656e81aeeb1cadee2f8b2fca407df7e1f7cd20e275d7835a2f3e6e3dea397fce39d83939f2d5733ee3c9971ef364acf3c7287ee1d8cc9c04491025fcd1bd5f1991a954bf7a20aa5ffdf7abd5b37889f2ab2f597977267eb5be318319c6fa8f9329a6dea98ddd937a470fb8859f863d9bcf787923b298988ff140623ec67f1f8397507c1cc88c7fe125cacff892f5316f4466c5900b23ca4e7d1f24bbf01b91b176eae34900617d8c1f490c616534d9859f024358d9ff105686f23178193322c36b86c11ebf9e045f3e060c2be7ad0c05c66d7e719b53dcc36ff8aa6d659dccdb435efab7da5616b3ad6cc6b632ad879cf2f809d59fec9414bd7a2d3e814d111f4f5cb55f3647819ec3c856ff3b9579ea87ea87b032d5137165ab076417d6312253fdea51ad8d755636cedd60ecde762e01bcf2f8b18e487a0ffaf066b05b1103b8857fb5af995df83ea1faabea5c321ee7eccef765700af9eaa1d3197507c22f40a7c8c11226e0f7d5608ce217ea412f232486f108a8c4881f77ec8551f7d47edc73cabe4ddc13b7f09f5f97c2a88c8d6fd995ee27569fd7e115d474b0d77db41798d0be0f3b51ab7d5f466521df198f031d3f8e02bf3cfc09d563dcf18a33f1b2d58adb2e632f01c5177ab9db9c276c1d7faee197ed5805e8cb4641553b7e53045943f185ec44c75e874dfc4231a8e34e621174fcb69c3bafd6e528d08bda4f463bc6ab95d156860e5666c7ca68dc2abdb8499e50954038cfbae84bf84523afebf4c7c99554a8da7887032389d7cdb1153b5d1146cfaf3cbe9180247c10376eef4976ee2f2b1748ffba6edf23e0560e0f48ff1efcc06865aa5bd771b00a2309eaf95bf96f0f61e99ebffb8997d3777a974f04bdc6f145d28b620ed27bf6ed396792a58fff6d90674780a5a7b89095f74e7fdf53e99e2a058451ef79aff1eb7b4fdb524e320b95effbb69e02b7b84aa7233fcb6b15bf509cbc1df530acefbf8fb161b6cdae16181fea53a9ad73700ba3a6781accda306976e14fb10b6f8181f229dfc249b0a7a4a4bcc66518cac7e0acadda167328beb7b2c79fcad364d4be9d659345f48e93a8e7af8252c9793d45ea1f0ad5afde4867f1ab6617fe944d41d1bd953d374fc41c298c66158c9ebccd29cfffdb283e4405ef88b6fd787f0b6e73d95aaa6db34b95395885d105c62ffe58f5e4af9e3cb1def35c63577e149eb1cbc42e52c5ccc1b9c52d969ef95d796fafbc67ef94cdc2c5264121c8db2b7ff7ca29bf708c5adc3ae1243b8a91c46bcae46d2f5997c02fd2e3c733fc323d26e96ab80adc3a7deac3eeaf8ecefeeefefe7d3911dcbdccbfffbeeffbeeb777ce397fcff97f3bbca020f8953fe58bb833dda7a4e8b89eb4b957ebfb541d17893761fe90a863e53b9cbf2fe2ced8fee5fce5c89dde61a1b27feb1d162a1f869e204564295a8cb8331e169e398ce76fc59b160e836f32a7ddf3ec90dff74ec6eef1702e847b9ef4fcd7d1f00bc6e3ef5e805f2d2a24d84f3e6f233cbfbf7bbca26af20729e2cee4f778ce2411bcb2f2215187cb672e243f7fd1c588ebd2edef7648c548ee4f215d76d77d2fc46b7ddd639b5df6a3bed6e631635e7b9877d73d9eec31e2ba6c9effee22606cd7b7ecd6b36cfeabadfa0c4af91b8619b49279909d95ca0e0ac726eb05a79dbc1177e6ee9c3dcff3bccd8574ffbd67f3bdc788eb92796ae5eff3d5056fc18db833f9eff31d529192f22a221f6ff1a17803fa50ef6a6d9d9fbf1177c6cbdf222525e559628e94957dfbcabebdeb7aee5650a116c6db89a0856116aff2d9e342be4ff9cc39ff2bdea4fcf778cd308d43ed94c7ab15b8cdc911f51e9ed3bd77ce60ca7b720a37826fd2e6529b8cf5d4873887ab0862c49db1dd24ede1056d8cf2f851223fa55038685da9c7d6a69e1c55dc5a174d4eedf1efc93e997ec455609895e5701576f87c3ee183fe7b92c756a88184f4e136953899cd54e6a9cc81b81d5bb16fffd630e2b7629136c0618a5907ed5ccb4ee08e9677f0a561fc642b7480d7afa375a81cc6fc990b495d1d2db401b770c618cdf757dca2e116c6df0be97e77288ad71d8f75e1ff76f08a476c057ee5dfe96ab8851fafb44e6a8deb4c8d5fe077105f2bf06b9e4dbc76229cce084adf108821b47f71684ff7de7befbd3fe3b29c54186665d9eedbf5bd5b772be26baffddb82d0bae834bfb62fcd808c73ce3a05a18519532f8cfa368147a39db2197ff4e38fc60f81701a638b7b2187585c1781c04f8afe4bc148c62e152f1f2b05c61e0bf640908c59fbafb708876258433ff67cb7adcc8a20cd4fe01bc6d09363688ffeb3c956f738a9e2d956bc1979cae67b1cdc081c8540a68ff5f8b5a3365932f427fcc2f8deab4110349d7427923b18026d96d162ac5eb4db4b40a1bf26f49f0fc3ab8591a6c33dd1bde6299bd07ffef3211a3c7e568c1737e1c562dde668dc6ae1d60d5fc04de2074922d90385781e043fe424067af89f5028140a859c5003bf77a3b0afff456f5f34f2db84a809ebba2fe2a4d69b2656c346d4b107de17fe0f5b7e6fb1fb31fcaa81e3daee5f27b080ebe4789bf8dceb0491dc3da1677b38d83dbc3f14b8575c71c5151ac8f56f06fdebdebf6c4c8251f327baf7380b86757f4dd8755b9d65c4ad9b83ac3b19eb9eb747d36b6e3a7d3c250496754fdeaef9898f761cc758e6e4d87758b5df580a5a9100bf24706b39e77862f64f741ce7d64a479002cd0a64c879fe6ed2aa18a4ff93c2083e687f76ddcffd1edc3556b5aae77957679eb1c656601afc2a8dffffff3f5a1b7a1d66b1f46386dd19099a84a0bfb40cc3a309274f259cfc56ebe505a3b13bf3c03779482f02c1f11bef97b6eda03f7d89e3da1e4612a39d83ef111d915df841701cdf7bc2f8293d5ec3886f248ed173ec7ec4d16ec74bc33c5f1af69cbacf5bfbf984f825639d7cf2259784fe36dab1131d7f07ca1cc425375422b42aa458ebf6435c76d907c11b0ee4c178ea20112c2c543378b332f94f57b04be8d6b6d80fd50cf3ba605df6bd38d87c5be17b382b933919da7e5d307e4fe276af0b1666659e4e7a38357871b0ffdde1ed7bdde6d4e6d0c9502df56b82342cd13ddde6d4d6d0c950c5b4db1146127b3e542f0bc6b73f022195c51bb460f43eecd704697041274375d4fd9a200d2bc8a00d6261ec509006d6401b888234d006a25d87cb5cdbf76c12048414fd16aa1ecec3650f9739793ddc4d98ca57db4811e115497de17b6f65f6945d76e4b905fadb8511c3c0c23c1c0beccb7a63e8f6bd2f5818a665977d7966e8f62f6e048f904315a72ea1849a5df66f6a868144b02efb4bc045a1db27c3b0d4a8f48ad592ab1a323522020000000400c314000030141289c38201793cce1255950f14000b6eaa6e8a681fa9418ce490428600000000000000000000000032ec720470b7137d5d8c75e917e5ad8b014f11a0888006d6b0fd902ca6fc669e269a43d9d8c52f45efd85978e0afedbb60cd90bb8991526b463b1793b06190637e9642b90d3f3ee1121d5949eec9e9259b732924cf8479c63f444a641d043c9bdaa2b81760f6bde517044ccac9823d8f0327bc1c3c5388e9f14ebe98082b9f8e49f291515ac471dd7f62a1325f198d9cb35db7cfb8a704547f2c0f9b3e9e631fe2902e3d0e23431d5c7e021db345ecf337fbccf614c54f61580fd14f266a1d82534d025a57f150b6d97ebd891fa86f64eb1c0b268652611b6658acbe2703b724ee7c46fda45d7d02cf6a59028e55aa012b8ef58458eff93090f1b0d2e464a9886f177fddbff5ce6910d5075923ac5e44c51c0b84422ac19d6f9dc02b1fad02f6d958060682a01770877952c9aaccff77974c1790747f3938c24cdcffe8f062e7dd430aebe32c8937443225aa42d9fc491460eb04903f00f825808f1a802303000ffa50bd5e12179f9f22481268d58a09bad034ad80db1f190c865dcd6377be16374558623ccbb08780e06ea612ae8aaf7996083e068b8de580f26510900c1466fdb7d40ba05bd641d7563df4f35c6adbc6983b19b4e52d1cef2bb0cc877c4cdeebe8ffd13bcd0100f076ce2d68ef23940bdc308c13456eae214622dccab854e8322fb4cde37e20d5cad9b39784bde49797ac3b5a720a15bfbf90e1fccad6b3397fec6d793f5c9b29404d64169381961d6ae81bb3df886f5e11d23dd5b8f8b79064c02216cb28d5b0a85c8d1c1c38dc533c4f95fc205390506cd6b2a995d7d7e181a8ce185f1908ace607491261cffd8118fe477aedea4757938ebf36a93f61653eafab39d7be67d2d09a5f5d261c3d741475bebe55543aa266335b16658c8c4f521e56bdf6cbec1052f44456210a04c17aca651895c8258a1291dc668ae2dfc6d6865fea183e6e7afae968f0d819e48f71420521d2f241460d6fdd3c3045a020c094caa4674b5d36050fee92f6faf79a4ce36373d643378180dbad93d3b098bee7a63794daa5606110d804c7c5127187ac102f7d8b47fb1ceb3545a8c7a8d395dc2fe0bfcb90d3af05fdfd2b1388b82cf22581089a4069d5ff48722094d42afcab1999f26ae8eb7516722f27ba7f47833c4882ac079dbdd3540928d583ebdd4ce8ddad7ab9a3088c66dff30083d601e33b6f8acdb974e25c32f5740c9cb0af796344b79b8a8ebec18e77d091d4bb1b8fe0161d65952436812385e0a211f4d8c56dfc5f2536ddbd4a761963e5ff8ab585252b8acb7595d26934b7e6427ab0756a8de1a85051eca5c6e98b2dbbc6e63c8fc2a880dc4a4b509053caf1e59ff5fb6d878617006cc8970b7f970ae0e3c8648937a212106c73c3779812451db8f7a113546b4e9e51bb5a071511d0b6a5870ba804fcde38dd74b00059f498dddaf20d52bdef4b00001a670927f308a75719632926e9b644c6f2a408694994031126f5fde553d908419869ba430376bdf06eeca6d46b6190048c0466d448b9303d86600eb1ab97e15409239c509ff899cd7abcd80ef856db80cb88bf1f00d9773d35957e6792f16d886b92fa05929564148e3496548e49aa25f6c6bb0194e51e4f9328c5ed257b1920553511098b2c708d3648a1f039193dfb2e2372fa73bb1075010843cc3c530f47e893427fe921257237ea6f4546608581685faf834bbc3d4c7c32622127ef4f8dfbc6dd4b1a82ae3b9a27d473502c71b9135491b0eb5528fbf43bf62ce46afa136f16a5381d95461e7e583d9d2e48ec2b149fffe40b9996408fd46910fc2a0f4e9039d0d6fca9b8d7171f42f4494e80151ea2e8cba52827ffc73f301e1c30035e6b2e43e78225d8c396a943ef052d19b376376e01efe1b0854a7467f393467812ee522a2911c54a483df8f7a9f9406b398b50755fb48210276247ff78c3db95bcbfccf1d4444de261a9f9d305a47863da9f55020579380a8186d1fd7c6bcdbd68eba2d764337aa6161d47b9e73a6fc1d97026abd0270b5c727e54dd06df747f22e221235af668a246d5bd05a93d0d4521647327e5731cd08b9bf94a40696e1142310cd9c22b3e9768b5b2efa795970f3d0eb3e547c869f8f38cf9fee68b2cffcd8bcd35a5c567e2a84345aafcdf495cacd434efa8dae771136a0f7ed1cff0bce55f2fc5c8b75532d6ae6f7fac16aa4cb0eeb048ea6b37c0cd8804565f72a3759867d5a781642b81a9be5c0a6cf4d52c20909871bd638e1dc82e09dbe30bba2cb15a062567a2288530813df8e31f155c8cbc9b454482bb48abdadfb5c2d4bd2a347de0fdc0cafe2a97c29e4cd969f8f5bba6be9eec6d5d1e480feff0f71eee74ba9d155783169be61330ab9a3614124ef5da08708fab3bc9dbc98b2b17461a2288fc365e6833e8c7b90cbca995bc4ea6221c71086a032d60afc1910cb56bc2b4a9e0f1f143b9289603e4df57580c2a4a9226657aa912ec43cfc01597a93c1de8a8ec3b58390fdc378cc40edad18bf3bd07e992d40e8d2a6bc0ff6c4d5d38cedfdbd925b1c55ad1c5519fbe85c1dd09be479b485c84342ddb476ec6ce6c22283b3cd6335e87de74fadc5a37fed7dd7317bc432d86f34aa42b421edf68d25499da076a55c372af445763e0bcc767c9e4d377ea22afb03f86490382030a96a1490b6db86c44b7fc05d204008840f3b8b62a20ba7451f91b2b534c73c7e24a359ff8deb0378048dfb98766e325849c89ef7fee039ddb87093e8912794ff9b17e37e3c5a005be591c97937f73952a38f96cc62b464417af6e1da3bf781a0bb256e555377ac4e2e146c0562eaf6f08cd7aa947296ef7ae7e889aa2ccb1fc6e394798f6dc0331a975dae684859af67a52cf4aba54f014e011575a314f195c7434f6895e12995f68d5738c46ba9ddf370a277e334d82c9c2286ce464a49b8b7735b384824e5ce360efb6a2d70940e698a76c0695930cd3dfe9df9aae19d69f548f2ef9eb6834fe961c1fd73d06f4d601bad924e39f50168e59e0a07a2babd590388cbeff8c5886eb700490680356e82fba97eb0fb0a49aa66ddeb09ce80e7eea12b73559400cfa98083871de2c28f4242b9187c0b65ddffbcb946882b7f1f742b7e7c43eac094c93983796a6eebccb63a1c9e7ae64207780bbe8aa166001db9e9bad20a2581786e02b84e7e7a013f3971890cf73d10fbf1b01e16ff7854dc69adcff2e305e9c397d57be80f66c17682077573f5cdd0a3f88b9d0e20f82bbe67f324efa82fd6e6f96aea1cc5bbaf809ae68db8efffc993c54c9e75b1a0c86f231aa6cd7e88b21093a8e340a190316329f46c8d353e7a5f0f710f43285fbacc73c1b7c054e221270399f2fb387eb7cfcef775b9e5414c97063a44f896a639d83ed528db043c3afe710c04559ed4ad41eff1d535fb974fc9d6cd65ac8de87676b28a5d2b7b9d029b54011b6f46bcedb7654f13abbb2e83e236c40ae6e2f27e6ebfef8890fc33a4588a6501b1cc56835bd39e0333de26b0be7a0d1f156a6ee7234e30abee3c495bab63cf439c55db88c1e249ac2a84c57d57c94900c37ddee5b05d9588490cf1d6ab009db16870b7841b46a2876710d4636a5267e267d81f18b5811bb2d5200d28b4c6c9db60aa0caa8570da2ca0d7b144225d5e35116e57ed454a9c63e04c729cca8ba2acc0f91ce0a02a4606dc421b0fbc01fb1efd76eca5adbd52f8c7c56a34043713e5e28a77decc40b24b16c960158240fe79385bd63ea8e8b269f5d4df28b8690910df7dbb81ce4e98e98d992e08f951b811a654e4aa27ae277e0b5685f6d7a5f1cbd760403a944848f9f518793300acb6a98271aad4e1a53238c0b1f49be2baad54f2eb76080c691941f7475d3375af9dcc10c42dbd031afb06a6959f9eb592f316c8c115503170d3799579ff1e1f89c83ec560d5bc685b126e9a30e6248ce1ae1cbdd523bf8eec8d1dc7517ea01aa70371f00fb3fffa8906fe3ba755a0c7597547529882782c9bcc397dde774081d2762ce54babd8239aa82aed859fc336993d5a722b98c6a6be36481638b23d221992a412fdce41a594eb6bfc01211b9211ad2ac6c9c71bce0e7fcd061ca9e1dff38ccaa6214eea4d4b958f66d327f74b2ceb89bf80da265443207362e63122210d047ae4c67db87f2f71d412f957e87051f655a7bd43318fe6ce39f0de3481efdf92768ad5bb684e4698d22928d5dc4c27674be637a233ea2bd0fd78ae4ca398731c1210cc3e9c1b7ca8f47893a1bdd2049ff69797bcc56f5aa0dd5a940b4aa48d0cbae477c4dd3c82ba565d62b3a1a91c20f620bca0e1cfffb08551c40ab80b2afaff849134164e9d822674309165e222e05da656af53cd28bcd2a4289fdad1e5f21539cc09dbdc5da11127b7d164567bd06b6c8d4792e18e83c439b58c2e88d91bf8c7960ab5b721f13ba9176e6139f63bfeb8d6bbc760b1d6ee680a3fff693c10b50f1e6ab1b7af9c50da1f7c43063afa71a8587901b713370f902c0c6bebf3a57929cbd0ac6da8020f1a262efb13e44321af06f6349d18829294757b366deb8aadd572a068d6395ec591f691f6c79df9d1d8cd4f92fa4fa23fa09c5ddb81cf6c6f32ca79a4a1cf3aa61d1939aa2b443f35d294e10b1e37abdff042f7db55fd7cacdf7fd77e825a65efd13b773b71b85a01a5e60b9750e4c2d034d662dfcf24de6dc67178b9944011255fa50b83da163fcc06581b9b7f1ef532d128cc3f5546e4a4387c86382696830a7871691ce03ba9eec39d7dad61d562764a5dae8385a61914a421688c9339d99c31de6de44b640985642004e5996fa9328f18c7eaef36ca607ed4fee881282eeeb89c7a445cb9a374d1abe264a822bb499f262751e1e625daa904dad9f3a83b0f6564471c799176a5286671cca61c5f2d4ba61cd2fbfb6b9891bdde5c0a40f679db576e63d2b9b121979515e7256722da18808bf0f9e7c9bacd9e55abdeeb7864f301a46b97879b910a948ca152367db7b996b2afd80e4b4a3a0523bce5ed5f0bfe17ff45e2c0079152d51b9b502856e9ea75286c977b6ba7864c83fc2e8accfd09cca9b03e259aa21029c7c7dc9bd8e0610fed04bbc74a2284e567104d7d15bcfd4671705a7bf52bb910dbb39454b3c6dd29d5ee3ac5297c76f75f1fd7fb38a8cad47f21071b877c34a7df7598c689cdcda9b6ffb38c702d3d37ec388d62b6c6e40eebcf2c80d4104e75ccadf3fe57534cb04a534c73c49caf9215b5c6e2e84252f5eaa3408250f9c60fba69d347cc7a694790fb2ef7fb605e50cd7f8ea036cfc214c069028faaa1073301a1c41039962bf243835b9bea12561eb985f12c234d54637c20bcf6f1342e650ae177237a337003634484b07be41ae1f48058e35c6d3e9f6d3f6274dcb7be9d2d941a775098174062dbc694218555ce2bef2d0ca9e3f14c92253a2ee32cca37106b3d230404b6c5c5b48169e838dd8687dc5c30c891ac8c7f3740269e29247b16f71504bbacf25bce3dad7f00807e83b0a733c829998e3975bc0412d0a65d8bce21ea7128ad54fd83467992da552549df27a623e928bd4820a86e396a2d4407e1a7969b09eb69ee7150c8177d0365d2a8e1faf4ce04de45df6630241ec3b105f06d060ecbcc102cbe7512bc6e8850ec7bfae0b606f00ff35022606d10a700859be6012ea205e0b569cf31b47c607bc3a73fd980c005e8e59c5920c4cf26b9f3940f2016d5f2be7a05182eaa807bf87d5a97249c30e374a3cab45355f3cdc03a4c12fba4983ae3f07df8af63e0588e875be4290af5522036c8864ee56fadfd4ca9249e5d249522c54cf35eb1eaabda9ffbdd26e3466a08a9b1b80cc726ae49ffe31fc0ad731567ef69c2647ef3555e9784c5b857db3d453141a974966678ca4254da0322e208b2052738ee841faa485ae13424d8c15e2d58c2c20db1cccecb8f655108bd045f4ba5b32970340a962898586bf95565cfe339653871917d5546fbdbe2858816352de2f5ff2788a075108823db4e3ca30a7da43b1f70c788be97a3ae631982b62a0527fd67cd2ac12e5ec4a15a9d854c4fdce22ef38cc881dbe555dc6cd47813f9c3fbe484d379ff0ae4ef65ab8e36335da905199aa34c371c843d397e1918177a98d7b308c90667334176041dd0a2e0973d4eb3640d36dc011c1656696f40e244354ebecc28bd55c684a57ec6ecd9d12b930095a83629fd7c2ade1d6471637c00a4e89da22104fa9db88f348b75822e4442073bad523c66be86222258f334aab5b674c64929ce0e4b8095244009edbd2c0d1013a154bc01e39c521d6cfec2935eae4d8c805991454bd8367964bfc489828cc87c9398e14c4d0086bb1e7a8aaa9e7efb03ec1c34feeba48ce9daf01d09060acfda6d7a527a01c1b510c8ecef3e2eec3458c8142e5e2520515214f69aab70ad2c664ea47513c67f56aad77c2279e4646b458bdbd8e378fe79575d3348d758c131a8b9f40fcca209433a17ddbb6849b820df83ccaad776218db10924678cc93ce4593a3876941f0e525bed5ee20b874cd15456876ddf2affa3136abd588a5bd17c20175be778c4d979a900522fe7fa92a3d751d59a18d25b592ab89fdd03311eca8ae2df1f8cd96e04d2ca9649b08f91b5e183d218674809e7b1049f983f69021c7f83019d16a6bbbf16fce7cd945e2aaed1be0de85c14113a79d0641e1640c9ed9fb28eacee4f3d0f29c25ae12b39bdd57b03458593d042d5c8a347933a89166d65b4e1029f58775cddb33edc12f44d053786c20581d023e48e1d74161f795d29a9a156505c7a4223b9cba25af32bb2b61afe766268d39ea441b15f345fa47ce9ca8a9aee1e190605c50108133334059019a0ff41077eb404205ee3db10538fbcc7f2dda8aef7bd22d0d4206637c604ca22284805e34f9db4ffb4388380ac070f9f8e9d443886fe1f903638d4255722d9d9c2fcc95e821635ed582e0206ba2f5c8dded914b2729542450f3535d97b5382c7ab9db712f8a68424425f4c51238e9dfb00e5603bb498b34167c49131abeeb5a02b327d214752fe650425a429719b3288908e32d590e115527941388e9421f724896d30848cc1c72071bb8fdd1103de5af215e2fcf21d6128cfa0b694fa8ccd761b01334b322796c8fe471a5f2282d6bbc144a3d8e407350c3cfae8f850f23b1d46389a2b9004d3c49aa056911b9cc26482db79c33c2b7652e1ba17bf737982b330ae446b797487e75b781d9d2c4f9a8a5ee3806df37bed7670d981e5f708bc04e4754b7fa55e0346549983c26ec812058433136ffbc199039e18217fd9b6bbc516a9c38f218d6671ea1f3c3a2d8dcf0278f779c7194bdd2784d6b683ef44d0a14a4d5f36c31e74f8237ad4b2040e216c581d55c4d328e23214e608e18ba06ace7155019555cde677807fea39645642b3c57ad7278f77d6f88acbcdd891fd1093ac92b66446b0c586c8c25e697e35490850ee6bafd2e2637a8d057868aac72636c974fc80688b0821be77063524a23dc58323aef6db73a0d0accb1440faeb32444fc8b6301e9f0ebcf53708ab05906125a58faa1ac166d72be273717d9d760bf553de33ac9a1371133ff68531b75e49294c707b5cdb0627273f63eb21d91c4a9c9fed9dc06fe9a247d3835e7dbb45cab5363bc490736d3e27e6a6ef3a98db33765b50153288188a3c9250a2b69d77ea8ebc6b81661cc63e6f9fd60aabe6de554d3e3acd8d687df7e5c43efc9314f95cc78d90551eb7bb6c8ab96aa8ddb8c39e37f6d607dd4f8e671ec02a64f558d9a5f14e267a1502a1de5d41195bc70356b8ec84556b4a6c0ec1a16230ad48a805b10650ed82b2f644951b578575cba360e3a4c01205145640ace798b1407ae62f4ec2acfd2209b21f0daeef15e819e1c71a337a4598629e93852eabc50fbf94de4f0926624af5c5f8859f94a31934288c8d446f324af4c82f27c2697040eefc103b82f6792106a82977519e52cfa25a0c24a51ad090f6fd099ccdd77f398baee6ff1f97db293a20bbbe801e3285f4b27e968aab0e639d1bb376cbdb53a80116e744c7eec37fa73972304b12c5f0a4491051c9697d7732de38890dd9de096d2ec248ad2554d4c821e0581ba400277d574eb1e8641f9c38679d8fa78164c417facc4aad18ee29131a31d55f635e0677d8bcd7de7640690e8dbf7eccd8423e4ba53cdac17dcba8494916cc3b9e0f29c96173a1cd7dfc64ea0d1d00ec42980888078f46d43a8b4637f122a6ce166a40427689bf438652811dae12a5e1e15d32c0d34c796babc3ea7740f0fc7bbafb8527f84e3bf0ce743fb56c4e7b02de5ff1b22b46d949744ab87c7b92a1778f3a5a9317819ffe463a1b32e7c5a0b78ed3d348d768314497a1097af268b588465ec7a3f93109d5d55e1f69d74417f28fac561be75cbe46929af8067dd353c9e89a3e265d0dbd9677738de701d819dc12fe2155377547dc425d4485cd55bb6af1121035b80a54b0942f2c9a7324bcd714a3814209e5ba8953c88e22be33e1f37ddd8ed5a2b126b17e0554458cfa3e0dd869a4a7b38ddcf9b6ec93a100a8fb8e67a1fcfc020bba7914f0410737420f0498a39948ff1437250d1e8a81cd4fec782a5137ac9ea416346f04e1997deec0cadb3d93c83fd43dfe122098a5400224b0fe3eb2810d1ce67410e592d2a9abf22a818d5128366e1bb1f6ee8d388b70777308108648be3d0d8d58164b1d6be83c5d9cf6506a43679a2259aa6c1e2529db8de18c58b3707550e17d650d720435d86ae43ee46aea7c16179aa531dbd20e8e2af6365b0f3acc3bfcd21ed43a8c5589745cb979b384c59910c51c15d2b5436755e73dfc2291f3b2cea5b9e3346e42ed58b0a2509238bb5586b929104bcc0b21f26a849f8e07b6562f68108d1337fb3d9c34c2bf10fd545132e581b2c3eb36ad6d3274c2e167621bdf55afbe842f20823317cab2ad13992c8be7f46eb446c5083d8de4f2eb4baea60d6ec347e2e0dd2444af982d457726f2de080d23acc1331e310c17c468158a65299444cb2203d466338097212711fbdea7f54fce7340ba391a57a07c676d8493c2892ed6a18ea45b525219b8b646c791c761f52f4a6310d5aa311f8f846032aaae5836ef58c3daab73a3d1553d4f91e2cb87cf370b1a971407b7cda473c2b07f59234f29aa22131525e0e086fc21d520a4cf61b00a030d3e951aa98f72bd473f9874aa25e7a252b488618774856420004e1970174a723e41ea64b5a0f5de510df4d8fd9e5eb352d8c8116a3cd0c54183eb6b67021fcd4bad9135b00df91a1d8d8d00b79c95447af94c921ad4bd3b74091f26537ca4fb1540c51fe24c819b98ee248d107ad416167cf53c0f30c1d4b013e98172bf3eb18d361bbe9ba911ec9be1c3f093040343aa804584b215843c985d1e4d0757c710996f5e874c0d47a0deef56ebbe2c9c93cd51dbeacd6b9f7e7cc2aee8f22ebc70db492252506fbe903a3299f4f840455d238ef71d59dcee4951e283a44a1b2174c21d189ffae11fd9cea96328d95ba91b8e9fab36d8351261866f888b65d69c8662d84c4fdcce0faed3cd12857ddabdbd9be07058c49c655fc951810ff78d24e7f962bcfb88a044911de43e95194d55ce182d94068b765da1293369a9c271dd72887762e31ef34ce265579d8e8a8329805523f95bfcb85d52ea102b6e6fa354c6b3c0263ec698c5bf9247d2e0d602bf00be18179a704b9595080cd05f7cb4ccb85314efcb0a4efdca6a6a208ba68b41aa96939b72ac77e5e2386d84f58f66c63f871cfaf3ee6a7bc439179234c64746c179f74b895ec21a85b4b3a748237132e6036980741c5a3e47cb17dfce8d4a83b098591c128b3cc15daccb59bfc00c9898332d7a78e96a8a74d102f414952b28fa2753bc4ffeb02f8f86c1d8f481021be59a91c211c2ff2c23c8ce5e9268eada2698be933369d390038810861a28b9d98c20893afaf05623f44874d2f4d4f973566a42ec67c3728ade60ea7cc600ca698c686e4fe5074f1f43fb29d9d2d447515214414c164af9809cd6e9b7ba4ebf7d5b85dde6156617c2576477e5d31b982bc47d5033e824a97f48e0ab0d360f681340f302a94b0c91545882dee22e55272fd55aa5477e600012472f4c816830236239c8ab99c2825905d9104e5f8ff2f1797156c42747f0081eeedc324d78687b2517c2874c121d71625af17451b554d41b94d0d34b8a22910573b7824cb36c6fea749395cf394dc2164d3d9d178acc97c5c32c157b8faaa2b58891fc8d5d0e1275cff0db97d317590a767870c483f8ec44df153a62d872e81e66a2fe8e7c6b6e407218042864139c1c302e40fd05c299c12af58c9c043379e01c11bade01a5cbc2ab26266bd5c704a6bc78e43d94b2b8f364fd8b07d0687bc3a180ec180f33421b1deda42ad201fe7ccdb8fa495aa379b9c3c52ba648741de563732457fb0e1435f163aa2b3d854141c2628675c03328a3ac169fe7ca720d6125ee7b161c8b232c776db7140dc1a7053620375ee2b5d985bcb5be5728e587bb754b9a31f0606bf74077b1eaa7ee7e39c84bbbd312d79e364c280d6871ba2d8c8329856f7d1ee5bc48a1d29b00b7f473fa8382618cd9272985a8b6ba5166410a32e56759642bd472d5ee53abe25b674191bf574e191279f9ad8a6c7cc475fde80a4b1dcedd965203fb67605fe66ddb970f75b014be35b99614b8f2dbdfc92c3401b087030cdda1e743cbf2b258944a66a71c874f18182484436fc30d9749cd1585ee7a610bf722a4318c8a6455f16d051d983cc1545b2b2810a4fd4e82e8e884d61198f0422960d3a50f334ab2eff62b4098fb33455c86072bba43f6c9fc0843b11aeacbe9b5d452c410e8e3b052199483bc3cc9064951c2365107c16c0a323ad643c687f62f30f8f01391ffede67b9ca93d59e87cd9fee748765800dce0011a33f5a17c062e2f531367f697ed05d5d152fffe143d65b0de11f5222818d4b91ada36d41b89207c20707fbe924a889f5b984d38fcf86a29ce19c7a0863060fb32dca4cb31d3666a266307c217436f1ffcfc48099e3ee91068442123bc7f684ec50253433b868a50d562346a5ebf6937a681bf09a246b095169d4d217e430ea176a4d8743e60fc2b8d81f709cf8461b40f66fc3e546d5d81d277c7c21abdc5b396c5dec3b92c42270664c23cf14757815e22831e39bdfec1375daf981a9aacafafc417c52c5599c2c59156e59960c230c5f8938a7999008c745f7ab06b681589f038b3ef1dcfecd293c9c0c862ffe81fe7607889f654ee003f1a5fd001d8912f3859a35fa27ee7b008a9dacb2da08758f19809a1d594167bb003b14f31af9e7ff242c4047a1b74e64f170987c574f849678cd429a42c632590b330231acf7e49357c453168458245fd0401690da5d02138fcd33bcec201d1949b0af4b34e58c711686b24eda9d1d7789ad4c5be2d4d759ead97ec24008ba38658e9ceb171afe5317c718b70225144bd908331b319ca7a8fac3406ae4404b7d210e8db9a4054e29f212eeeb1dee648e15a93a11130ff4a5ff4987c470f9c8c2be8922c784c6f2c77a00af579caf732e6aa8cfbe738e313decd5987ab06b48ffe0edab3f890c363c15adf279ad0d80a8a0c1df4618586bb715f33d6858cc9083140033bece0ba4a692ef090794b51f9e30e06049a4da5faccd4ce7b23bcc5cca66e3122c779e0a0e3220e98e1b759dfcf4003acfe43b5a838ccca554a08110a61a273889cb886eb4f624d22a00067929272495a0da830b30224d1a65e2801322292f5b2112dc0d2f519547e00c4bedd7689d19227e912e35546506bbb8f40ff9d3d0a4d17795c2c732ccbae63b4a32b0e39f1bfa2a33b6c9a00b5fb6d6ccc86102cfee1837560957a9b39645656c7782660a51aecb0310f00e5450828691ab9a85d012fb584d8c87a27394dbc2ecd711f167786a475b1f8b92ec6fcc4fc6adf4f2675a6f9186a648b3c53a4f33dc476da29bad63c522e06bcb9b085a24b531ab511dbb204e61c0b1cb65668916a78e00a5c6e9e95b30c315304e60135b5cf1b3a20f7db10fef59180cb065dfb497e4b01a90ab795a795affef515abcfae959b3a0d9db760d6a8dd7e85d3f778920f564d98bf7165518672965ee5a04a720e724ac3d273dd5945db7c8b695852bc263302695947784905872931980560264b08ea92f59bd61566dd44e3df27d5c671383b73941d96ae67e1ba73d20a4ea3552ed8058b9ca01a08cd5d8465e042a893eaaa4128d7d9f190afa95d8f3ee11e788682e90ee86ea158bad8d1f4fc167833ad4d64c4936d451ae833a64c7c8499b667964fdf817a1035a61d456c96f1a19bcc2fc575546282575ed21375bce89300e016f8834f83db636f6a4ce009a6367ee50bb3253a2c3d017dd445e1756091d2e1e5955d7c00b2b35ae63f7f8a515802173c6c4aa9f93b577a2d4ce4ae6462a6f979a31fa4216f5ba52f95a91373eae4e8c3a61e4e7f98559ee46af952add69a556ebb3528e639f28430a898d8b341ec8889a889042d3ebc68ebce299e8e8f4bfe6ea717d2883aefce2b90d7745a79e01dd7cf9e5f04ca1abbc7d6a19236ddf53a76ea774274b902952ab6cd65761e0da5ebb81ad22023d5652b4d3e09cfe0bd7799f685be123412781dde41d3aa018d2a0005c75d4aafb3188e26fb24d37fc3ee83467da7ae817a59fd9769790b512220d6473c69c554d0e590a3f0936a5f245c21043cedb698b5b59fa1e452f32a64888b858b908c24b9ab3e16dde5a7f79dee27a7e24dae69149db60fa6b4a9e7801ab4183016ccb4c594a26e5e1bb35b1f1fb122b71b30ec5ee0bcf2089659d0bf283a258ab3f4db818d8790ae59d48b1c2b0d13bac55e60b42f71cbd7cbf90a472ff7fa938550592dfe1aea023fc1f13f5ec156d4e5bd0a0bb90eaac1aa0ff06192a2110a6c2b29b56235df4d76d675da73cbb0b7a8c574e143a2ac51a67d326b59fadb46952ad3a8dd784fbd68bf367c23ec1a468976c5eb7b041c9f3b5c60ed6b1dd202d2a342e43fea3ae0ebbac0a02b51fac9f724444e79383e0940bf5cf4efd316188d505135b6652e156bcdf261f983e8f85cc8b7005432d1519afe2909ee3b044375e54085a45ec69a7c0c64cf56d404b92a963d9bad9f0d43ecbb1b0e1f18e6d4898f18860729072c8e21ef6200efe90ef0e9c4feac053eaec4a54b86feba05dd6d2e12e532e6294f4eebdf6b7cb2ea051b22eaa53831040a4cdb2f027d1089c678a7bf279f9567b424c03fc8b5717f8fd564231f800c228ef2f74430ecfd53792196a0b01c6be289ce2101cc14612d8180bdc5d9ce74084f9b56b30b7f0a95abdcba13e634f142521e973399b687e6dc6cc8540f43b71436bbc6ce92f75f6f8c06ff2434cc6dc9e37f26669712a16a0a3534f2c19bbc79301f3e3109444bb397a4631cf1d2a11f71dfa95561fe551f804899076f01b3357b67f4d8b8463579f668918ab5256351d3b954f13e8ec52d43a5df2e7165e3abab1cd0ad569e86f2afdd61ff8e50bd5d8a7966a6345b8a3db31fba35e00703e40ec4503a8e075a518bbd5e7c0de992a00040a8e9bad1cbc32dc4e45f7a59aa833fc248ae1ed42773d76bb807ec04d6192fca7ed0c0ca6145ddef852f8b27ecd29ac12b844b54e1c457432511c4ea864455a3d217fba57ae10865cd9485eab14f3642f8c99422245313c8ac84d40b35564e4354e7e3b2a889fdbba57193b3de15da6ceebe1161c922d5e39d88206739df50cb13d041eea5127ed6ddd723ea1e19eed17eb31222b857f3e560f6fc8fd1f065acbe82bc815f8417f179ea02a9672e6d28ae1382b380ab117f9ad74410802dec0dbb2636b4f048414a4437a65c3dc581c028c7eadbc6827c23734e0c4590bae83ac78a70e2acf1852982be5b48108d2c6b248f74634266564761f54eb96af6766931120779ba417215b4dc5a697156d7b0b67a2373ed67786e6aa5efe094c4b479eae660f890b54b5426e1d429d53ff4d4f08f33182d7544bf4aa51ebf95f1656239d935d64528d818f2ce8c7931d2c6d5a1419eb40908280e26b1c1682a12f4a12a47c016f481216208e48d377a2a6977651165b4afb2bf8109e799a6fe215c25949555b0f93dcb9a7353e02b0b84a48003b4f5092421ea873687913174559c2b33770b2dcbb4539314e708eb15ab2bd6e3a3a004cb5e1df1f9923b62a05516443352aa0e9dc19d127ac770acd79ff4c107df308713f185e1031166e1922132f1311c9640d22a4f8cf44024d7d71dd6b696ee67a87b1f83b0ca571083aba58c99c3cec4f8098603eecba0f7f60516ee7de063066483bb25cffe9ca9f4b29662e92beab57dba31ad57fc551349257402c666af2b1fb609973f3741fea8475636897dc91ead32cbddad2854683042bece476c826ee47a164a07009bf8e984a4d97b1b90113f332c7c9e8f9756922af08d732ed1904fc6cc20880aeaa45c04f1d2085add7af8b0f4aab56273d10a89374ba5cf66d1c4ac208b007c69b1669d0df7559a9d0041012718eada070912798fb0eba5fed04ad81a56dbc3bd82f63719d0ee31fe2b84e447d178931deb1ddb651d7ce0eb3278ced9b1e81486c1a261e0c41f5c3b770ae3156b271d3793d4782b218979df0acea79151077b8cc7109c08ae71647aa76894120e17f7ddc9e303276b94a85e65b9eeef8db22fd70879756f7eade516422408b06c15dddb325856028f109559cba4a03e62fe0bac8531681027ed64a54bc8f2b4bd1c5795e4e97e5e8f87880a6905bc0c200bb7d20ed92fdb5414e6d130f59fce69a5859206a952af46053dd0321d030cb141dc420216dbf286d1b09d541b4aa4d234df2d5921da189090237ce41848b7f44a30d733681c9ff9e924e7d719946778494c035726959e33b887743fa4036bd06cef525fe1381df1452b07488ee675993420e264e97dd247fe04a84535a10ed4bfe19d7c9f5b26adecad55446ba015babe57f547286efbf1e7d20c47de3377f37e633027939b34350c2ceeee2ff4a30a36de135c427c21b64219a10e055c8c99ca07f498b7f9e1cb8de9d4cbaa7b4214d6a804e5c0fbbf01711b2a95063b0743f0c65cd98485a36a51ea2e3dfe2e7525207f66ca859924699bf4b098d8e1441a142f48a87a0aa8f89821ff5eb06adc1f9ef67f46de1734b94d9b085da28c0c89742c5b4b2aff8581dac8d6ea4dc805ee32817208db55c5b0bb114e9a98436bd4df06193e964b94a8c6d25edfa957a30f231345f65ab3bb6be9f2af45e7631b445575728e476071b4780f6aa637892df6c9251e5dc56d43b7393b12f2b5b10856563bbbeb2f811549ec1a9ee8a4922a4a49daeadea5877693a7a8cf86b180fb7be1f28f5b4ec52e44ccd35dba5ed0cee8f694534896dcafd4ddcf96f241e4e82dffaa68c1a45e7f240b702f4f0f6277559c1ea70ff00b41e705b5c2399dbf0bb263630d55909f6a77197a2f00fe90b439e9b598b6b81aadecc1f665172103017244bc6d526da742f37dbd2984f106009a7f09eb194b15f7b393dd0b202adae50642c1804f2a5f662204e066beea25a0b1409efe6214a09a2090d2f0c453611f74d5aada564df3542e3ef38466b0a57f9a912b9c70c95889c54aeae1c0b270647707ec2c16a02257a16127005afb8052c9a800579a5a1c3e8b557f092f8c82eb2a1bb6caacfdb38056a35c84825c73ccb8117b2583cf08f02d48b148388f43cbb612c4c308c9efbd0d4a73fe91c5114eec159d4e5224b329c589d5e0d3858fdf29cb5605d60835ee5fa14110a08b08b683496fd665b18d24a121f49fd6dd08a5efbd776b4a204f41309d5ab4725db8d9b9a376daeba551da46e204f690ea49fd9e2a5e4430c2f7b933452e73a414cbca477533e953e71e19b2e7e11b443949272933a624ec7ae96fae4cd19d4de2e5e61b50dba79f915847863e3f3efb0b8ed3dcaf38c3985de80aaaf0c11df9bf1ce11ab71356d1c31806977b58300441f59521179be208cb4136a203e44742c7afd91055b9cde22fba91d19dbb3493bc8a76a82edf46429df79601752cc07e610ce5301dd27ca10bb5ce4c82f8d04d307629832d20fece249d968779ce0e0835851741223221348c225f49068e57d84d1820a4ea0691c64a4be1a856f404979d506e5915872562659b236410f4f48cfcf1e22858239087f0ff67b2e504f0d8f5744b0cfccb9bd18b9009fe0095edc893b49366315bc69f6c004a4bd9a163d9f86501b81c676fd5ebc54fc75405153c0736f3b2a33d341060a17e6d03eea54599711f8129d4e4f6469de9b3890446c44cf495b716fbbc0cbc0336457063b47b44d9fee87da931685e248ed53b0d347cb410f69a891e37cd055929653f6c988ecf764562455aa9988e9bf28ee0ec2e28b5285d43fc769251d421f2b730295c05f564263fb90a31214b4b067a74076693b5b1208866a73e61812c181a7b6315f287904f5622e9eea30ccd084f6c8827a9549b9992aa243b9ab564f1529a44c5d40d012691dc6a71485a392cdf50bf93070aed3e0e032c095bde09b818859784ea221ddff51f8bda07a573beb6e220195c13cac5835ce5b138593b1a7feb4be2e6ee85abddb0539f4d9bde2a8230b8a5ff6ef503160206047aa9a337a7da0cca8e5760a71e3d2da07b6f21f8e861ba624e9420d28ffb33cb97803b64d5a928c8724578e18f36fc1300bfccca896ab6a16bdafa122f77eb55ec773e68a2a033ef3a081c29db4c0db7b3947cec9fdc133093761cbbc9aa035f4e29139235175c8eb750b2a7c8453adc16503b9e236c4c32e38c9d207765c2f6dbe66c796c1351304e371b0bf6b4357e1f95470eb6a347403c851ebdb57aef0c7b725e453d036e3fc7992a8421495233e0b7b2d7a769492718ea1a5f0006b74cc6b0de499d7f0dac00dea4db835aad4d7f4e05171879bedc8de0d00a83c578e5bbc5aeff0ad2e279c8f3d4ccf884f5bf0e9906c09ffafc5f965bfa7b4e109344719ed4b4429ccc7d21d990a0010ce96ac04b59a92c0ba34a8523d38aa970f95002ba4d20aa734b2f8a6504aabb7b7001ca9d3348c79d73a927ab0fe5fc14a3594b352d1f420ed152afcc210c1323fbe5a5cb0518151a7b12b55d687c3a4842afd18b24f2f85529cfe184270297eee7e59165ef3394255d1ea6437c7bb873fe626dcccccf28e5dcc046ad8969354eaa26ce6a7b75db325051c905e95231128a82e3df63e05271ae33fc4a20b0130e9222657faa9f8f315a6aa2cc08609a08a5f98f770c9af103b6cfc929ae1b609edf2d0c5480a10a9db26589e9c68d153b5fa0307bf5d0a9de09a6f86aae266aa52560b41270219b69268f72077e6819c0553c0088f4221ffe0fb2ad4e553e56be20f7016eae07ca96d75e84ea84d3bca3ca1f3e3a2e94a1b9ba8678c2c857b856153bc9708bf759b32a17378a74e1494aa588a4895f5f9d50615a99582daa5237d563185b17f8aeb47fba222473ebfb6fe233aba885caa50f79e56e21f3fc93091ff6819101eca6630f9eede2f76fb33a3e6d8375a12c469fd18fe13d29664a930eec468dbc23bdf0221b91b1a7160a14b8b8b091ff75001df474d18c1f39a56220e79b32b8562a2429db37f0f01a8ae8dee514da1f938feec302dcb93467b63737206f24808788ec4fe49853698d88d82d1b5f78dd78395aa7a9ec00be7c8d4660db45c1d069207208cbfcf8798d5638b289cc1bd5426cfd6dae55e2396d2aa215507a14927b7a17e288e2bebe9d0016ddc56d93ffb1d7d10e583b8021a3a98db06642969d60996ec61e72e7d5f50bec3583f7aef7e9cb9cef8b65d556cf68c71ef0518d8ece17cb5ab55312bbab55a81a100856ae8244aa08e2d1bbb975366cf1bdf6676bd5bee3e36657c58ed9323094b7583edd7148561a5af9f9a4465c14fad3f8ea7ac87d8a194992eeeab6ec78358dbfb12787c6842ae6191f113e8a317751b10316c62465870f0cea6b0f11706e49653a45ccb8613a0ce3f20c74417ea2421bd8bbd56ad5f8291d6c817c246bacb280814956aaaf4a5eca4a7e2f0827e63ac7ebb3bc2c57aaa9d0d09dbd245fb5039d030c6723e0a18105a16ed339324eff02c6460f43a7a8976797dd310c51f39c72c66dcf4a93480f18de1027a69fc3dab77fe679c4f3a560af9696a79a0affb4965fdc6ead69ff0ae2abc8dfac67cc30aaba20516374ca41d74c09e5802d45765b76b7e176d0cbb3106537b0afe4f4925c9ef4a7223fb2abfa883329158b13848363c8b0c8b6d0dac185689faca3cb12d0dc63b79d44c2d05d43489371e255bbb7cbfffa2505922f774b7098a4daf4d6dfdf265811998dd14566f498991935a98efb408142ac5f2227574428f3254bc94e2a949f8dc2ac2ad0fc148c0bc665294fbc0298de0d70391b010d778bd3cec08ca4c159f97d90a6c2802179bb2a90f0e80f0f80ecbe8b08489da4ebbc1b8c294be026a6d6c7b0d215603946e5e9c9c1afb2e4288273ebc2db6453935efe3d9c4ce8df84360c3db52aaafea5a50adf59453ab0066c7753046b5b2d41b02f95d9fe37c5d513ef1c7a1d4bea61081deca6b2a9fb64174bed2fc667c1c8a867f10c90d7d308a0d7f28080dff20140dff20921bfe60941bfa40201afa41201bf6812034f4c12836f4834834f4c34034e443516ee843416ad807b16cd887b1d0d08703bb114a1cf7911bb7689ebbdaab0cfc26b244acb86b7b5248210ce37e3ec5bf1bbc803dfa02590c8c4f6556d4b33b3f30fb275e9d5176aaebb0b6e17fd1925933c11b754e877c54dd1a39091c1d84aa7b31dccfefa7d1a2d43d3c7fed92542362c74658aedab8642f15dfbaaee7afd572fec619cf2c0fbe2650fd79425e960c02c622eec69dfb2f0ecba2661ff28afca61a4bccfe6647a7390fe5021123e22fd91ec776b4cea6e2550129679094c9876b4ea9914b17dd638f4b3bb23e50ca0c584ace5e26443dc3ff6ec326badc38a32abd724f37cddde4a6c2ebcc8fd0de217d4be17050f65d5e1a0400a5147be5cd97de6afb72d33c72133ed8483c21616170e9cfe868e6049adce4a20b8f9a3a785b74f305a93b06a326a076424a7b810452fcd45b6cbcd077d086b2f2ce2493306b39f102c8ad1546151b75d1ea05934a1e2c28b60a33e58ae4893ac6827b21247556ee2e0f06a46c545502b5da32bcdfaf625002c411815cb575ff72339f23d32876d01201da0635a24c6b03397f19738f50486dbba45b7326076d48c64204ba95d22a822e55d4db4b7218661c72b33f64c54a35dc0d0478da964ca867dba4070ffd5eb65268f46248e7468391927b6bb5b204bc0404d014ddf7b3def7be2205e1504b55aace50ae255cc35da33e95f03ee2275b54b7354b48073647f36c738d2c9b56371b2fe8441c0a8d1bc7e375eea8154111ba7d5426879ce74838827ce92cff80d1be8e42c8ee724a79e3f99988b43eb035171072cf2df5318bff906c88c44a8d4dae4b9558252ad1ec08b08694da28a3c303304edb6e572171b3c5aed8da6861deb09f62ee9a443b484e51411f520611a9f626d60c633926052f2afa7157ace09e3c23270bc3dbcf30b47b02349699060730041e039627d9d613eecbda311ffc66a22922c16287fe7ba46f2558dc5494269841fd2a4ce792e4cdc21e534996392c5d12a1d140b04eb9a48a1af3d2708d9623f4e3561310b084afae0180d834c75a524716aeb9e6bd5701d79565b1ae636abae10851862fef3941b84dda26130b9add4bbaeb12aa6e4b0154f8145b72125330d62844fbb2b62dd25cdc8c1a1f932bfc22acc6c2acea08e051a310973d60b84c4b96d122e2abdc94f919ff15ac0fa212b19dab1b862ced80d3720c0bc077d30ea62c2d5a0534656ac8edd53187162e406582dd72572a9febc6d114ee00c884606bc49c5d1f9e92600c39a06a57257a1ab89228c4ecaa65515a95ba6a1580f3ac2b6496b5cea2b481511656cdc265bf6920f2443a867deabb172e7a14775ee27142cb0c5367277ecb9d2b256c480f4100f7e3f47be49ce1134a2bd20b7d8f456948aa20969961572d6b80e51bff33d8facb140ec0a4bdaee1a2211f3fcb4e0e2d37d3400c312c7aae8e2087d94b1f48cf0f8ccd4cbee7f935f5242f18b0f5f23572a175faf6b8aa92ed40c279ba07d017ca4e9b86592230369a60ad7673cd3f442c1923e25d8be6a3c0c4ea7259d85611741a30079171d17f236203ae7eb9e80adb26caacf490b3c2b1e84bd9da7d73455670c3e488f87d62ecce11109f98f003f9e0a86185d84480e4fcf59a89bad7f983d54b114f449cca34f77160b670204f1213141914bf151fd8b468654aac5ec24284d9104011f41b3c1a2091e59ce3c6e343bbb8d6fbad0575089e955ddeb414fcbb43129c7c7d7fd30a07ccd483185e16861836b30924fbd3c02c524745c586481abdd6d6c2698456fe90772898e447c2895e9be506da4825d353d60258407a975ffb20fbe54103b4670e31bda152824714ca4b3f3c00aeee97fe4e58af7de9dde671645e432f22f4fea505b305cf5aa19a0a282bf1f3ae63892b0ad32771022dc823bdf04a3e4678ce4eeace4b031bf381839f4454411bf632d3417bf8aeaec7ce444a94da5f23bc9a627aff8accdb27324b73b618573e837a36bf3ff89632e4e6384a07a2b74f32f443998073ee8b32fa1bb5f77184580c78bae5ecba21fef3407911381d44e40c0e59c93a41863074e7f7c0d6d5f5b94d67d0490ff1c5921d3564e49d95a382494935c13afeec87b2df8395b8adb959a8253d9929f7352dcfc7165a1f309d3a9179a086d6a963004cabfe009067041fb46c76142a22a8e1d8d95ef74200e4bf2d1bb170cdb1737ff3cc2b353d0e7f41ab33022c3c83d05b3deef311284ab45501f42e7460936e0db82ad8828168deb714720649b42f08f8de072d7defd00db722467d04b7aeea051cc77628ccf8876c5af8a1cfc364f8cf1e930709352fbbba0be25c481f8330ac595479e3f8dfd9099935772faa7cd6f4ee8af2de750cb9caac29598cce68e39d8643546ad548f38725436412eb8fff6e6e0d778e0bfd7418a78036fe14034db08bd2535e546576d5dfa3d6eef5c86239a0d25b52b3456a55a89024d08a90ae18f2ee30bc02ffb28c7a471c7cdc7d27229563ee75464b08a7a1909cc35f6daf78fc994772f6e0ee29757341ad0512c6315f5b2186dbeaf9747aecbf1cd8d404e2e672ec8635810c98f1088384b0a472b67e224acdaea9b49aabcf931705387c9ee4ee11a4d218600c270f5647a311086fe1acb29cc7224fe85d3a681c889d0292d770bd4b412d95428136480e13b7d72aecd51460569273aeeeb8b1323ce59493fe9daa295276344288064f13227973e14fbf0e8d445ee7d800077c75d9a101a1c990831dd9fd25a9c0533f79c5451b8a27065bf2de01ab678aa5a4a2a07ef2d7690233c0a2366fd74ca8cddbb31917df8717fbbc9ddbd1ef179b35080ad23f6bfb0e8a8336e3e6d31926864e176912eef9628d18a28beb15699296be0be759f6dd202e7ac30d598e301d43242385e2a1a1bd589484bcff9c8adca257d30650084a3930d8f8373536eb6d2fa4a9dfa9912d385fff943f272af4c53a2eb0092cef14224ec7b013911ba8518702043db55a694a624298693b3fd8af29e454bb3fbcd412308bdb1ab18bf45f652f68a3751014291e2ace6bfeac59b41ce6402fdc84df476de325099e759178a5ef24aa003fdbe1428a6d70287b27d86f0b5a675f3b5965741337f2e38586da0842cc3be80f2db213d74ec42464a20fd9c88d7dc4502c220ea66db0fe437090330c22c63e1da1a90f5335587e3592af5664d39f284e11951b4a448a8a05b2284efa3ced41196b56354e8fef75baaa1dc4feb85ef08dcdc2028f1daee1f20d6ab997541f51c8bb4aeea7af580064b55f90e61139d57e28d393096ef7e11a5098948a03098c6453438a3a3d856750b3fe26e9a1ff72e9d72c7d44866bd10001284d55c81d3ced0a88e7f2e732af02d2bb684930ca86a11b86158cbdf2a8a93a59b3579820f9a150c58422500ce9f23e29256bf798f6392689a7476e07b5d5c444d03fd526808cbbd6de81a2366ac156e0ea2cd99d7aef1096d862d6164d343c6f7e95a305e006762f3ccee4b125b1ad654197812c4a82e212aa751629a6aed799450f439b422ba6e79394b5ac906b8af5474bc340dcbd6cd053f6caaf2dec5998651e94fc5d17a2274fbff46febcce2a01331b0570b3b9f285b8ff44ad2b995355d9f4831c7246bdce3cb38cc28b472de81dff7681d33592fa2e488aafa29ca76ea5095738a51f44766a10fe88d28c73acebdf99857f670e774bb6d25bc4d9bf7102801ef841f6be2e8d55e193538551ec608d91b35a27ebbc0b91d3e4ddcc87bbae116c1f1d5b83dd89f71e921c1196ac27616cdcd7af66857153d6e2f72de5554d1133839e8362dad44618c28436a3ffbd3add4fdc03f9d20129370f82c4319594e6c97233a2baee337b07b9587637273123c018a31979cf540f4a00baf5b9c0ec8053dd8da9944ebd4c364d206718247cdb8f75d2a25273947a70a84e7080f7f6682a33e394fc7f44dc890e20b65e289e1052b9ad729ca6fc45c1d273f00197012351f7cc98684655a687e6bb4a4f0dd93e0fde1682a3402378bcb4fcfa0ff4f683e6f2f8c6420e47110d1bb7384f498d6c5422ed2bb8090be903d924b325704b0dc076b62a9f502be7b09efe9fcbe51b1b00ce4a4358a24cf22b5064aa16280e7b4bd6584c5d50acc44745e5926f59d2214f42cb6d4d29ed43d1d3e499b0dcbfe1432b84328488dcd6babeb07177fc4d84a8d6b550a7d7d9b80f0bbe22f15187226936e80f22ed4630dc2450831786bce25211e2fa53e9f890e578fc99b93bdcd19699569759a8a251398db1066dab0b77f32942f4571983d40cc53da89fcedc9cc96c4629fca07a0a99252d38fb99a8ed560328916fbfe05ac4681b465ba6bf58929b55612f1cddd2a0e9240caa66a5d8ceb93f5034c67028f16f3fa3d23b5bf94f7c160d15933fffc6777d7bb8f4499caf6249510b614361227668ad7f061655fa5345267de19672da03f8104af2d5018f79f6730a20605cc95c00b818519442d898b9319c512031f45a425689da58f9fb4630792bc8d177a101550e20f116206836df37950c505d309388411d2981d5526d50b233216d623a20f3f75031aaeccd0f8341db3b14350b74d893456dd5f9dd0786034f58f388dbc07ca020a1b268617e3bf6ca1a59bfd91dfd8fd3870c3c7eec990e685a3743683918daf8182addfca6dccdb36731e66f984ac2b52583bb4d869149d84c58c78b250bc545fb27e8d8240353af8e4e199219ce994ea29a4a08d120e94e8bece397837dfe2a3529fe18e6a9f9584dd430279ad74a10a6b3b21509c71cd7a9b1fd38e4b32ed4b325e6f0188682ea71d843dc5a800f4aa84594e05fdeed70e326ac818a3f8d527a83d3c1bd0200d9dceafe1270664d6a0454f4c54dda80e788faf26034cf21e06b7f79f63c650c48ce827c889f96bbee514dfa38a7c0ff6aeefd1c09d3389d5d20c24e0e5e54fd9d8a7e6172a03cb0fdfa3764b0b4931c18928889c0664a1b600d6140a88546dd5bfe3ef7207ee9017a30dff15697742d5c9f0bcd5a2f7c418a02bdab56d10e348756618d7138ea6315ec8b77123999ae323308a61f2afd992f14236811b23fe68a1f5ce7cd9e444a97fb408cff8d94186c6824ca6d32969505aaceca44551f19d643af90dfb8fdece03d7e6b0d5c168991bc9e0be24a3d2e4a729c07623991551830f51f715842f267da79bf1eb06354462048ecf92b99c0d3903309146cf5f96799f698ac43a4fc42b351728f1e392696f7bf258b46aacdaa0f20f2566988506f2771b0e46542eceb7513e71893aceb63844891bd20b7d548e661be2b18c405851166ba2da33e5325b38b7bf20b573c7ecdc5f4c756f43bde2af095d67d5791fdd796d75d53dcd5e19824f1ede99014b7587057ae7872afd7c83aa758cf23cdd43c4f30a7f184d85f2d06bcefd3760238a453124f61b6b7efc2d58373badc2ce154480ba23a0159c102b58801b33fcad594f24db101cea731090c4eba98d9c1403743f2ad002b7657dece030042c522c25bc0f6a3f3ef5c197a5ae3e1eae9d370f110771e8c3bd06f50999d1dc8ee0d0833c233cb499ff980ed0ccd0c0786576b96bff7327d1f31b708cab9678db5a1777a9e4c4218261a29f0e4742a638c08b707732a1457fefc1b2234fc30e198897115b49c8e3a2cd297e5c51fc62e096712a501314bfae8fb86c0529eaec7423dff122e0431d55eb426761080630550977a51c6632029958aa0ac19fe0bb9294c145d2f0ccaf321891650e81bdb86533d6c179cbea1697ad187762574956e1aa25c22ada59c7eb9e1c17579c3c1e6bf97938bec30cc1b0a9142874a67677ccb99d95cf77d084099c344f2304029883e4cfdf957e78908a39a24b791649e0d67a99650aa70ea7634b637d910e099ed8ec1224b845bbac6559285a4813cb52544f68bc500eec64632e29b3d69b309779b1f06cc3bab454957de959bf9a1cfcb9a99b6ef9abffaac91e1465c8242d900b9045681bc619e359b7b6a1a464802aa3d45db4dd6295aa572cc15a805156b603941f21a9ef7f48d74870066882435755b6f8ff6da834c0659817f747b6b604cb6227256c160f8eb2bd9739fa9c647286ba110c9cf6a44b32fcd372d8a27f6d5380b5c9469dc7e675cbc1085fa26cfe1c6be2a85f8f459599c1cc795f4f021938fb81294826935f981a4bad708791cc0ff209c9165eb341403224c1bc94a48ca44c50f610c4d8367988a3e1351d237ef484d4d3a2d662b47a8a3b8b12d6e995abf8b7cc8378f06787e01cd16c4f19d9aa36aa166e9019b3a22efeb80735c0800b1c9842fa9b89bd0ca3fe230a3c9795d267e89d182118399d61995e50e718017db27b881aedb48de8dac34c9ceaad8a034078a2b12fd3a49aae9ed8689daf82efaacb4766c488a44a7e39d0a127a23f633d7ab27eb8c21ddc208b8a9ca1c8e8c5339330146b4093645a14bd2a75ac5106d050e0a3d82092be84ce054e94967e68fd1267d0b126cdd8f63e394d26daf4b9542ae00204539be26bee170214c8cb9cee0771be02e92774dccc592bb5f79292e492803ef192f687243271473648b1a91d0ae9ebb1a4d0612195d37c71fbe0ac073c28f9c2f8cdc0bbd27e942fbe8b4b50ebf04972eefa3e566e9606180dba43efdecd82e688b87f42c29de0165b300c14231c29b1addb5b6bc8d53814e9a2972c2a4d68f2412752908a64c2a5dac34f9be09721b7608a412fdba2f3a424066f4cc639dcd9687926cc35fc80e977de25b146b8c06240d9cf22d7ad4e155c1182abfab40b30f020cc3c4abd3021127e78f159358d740fee7640ae2b2297615a25bdf02a92370c9b6096a9601c0ea247a73f02231b08a43b3068ce5b81ee6877e0ff0925d2a5740ca76040ea98fef6b8a5c537298e1361ea38f0a5cb597b41dd023b62cc87a986dd9a9fec1eb72ba411d7f8e9ad2f3028b15305620883f346faeb2bb3fdd311279048a8cc19fb914021301ed0b6ac7b92dcfe7652b3e53cde1779de57c10d885416d5a340fd2a55783baccbdda8a42c6a00f663d9f76f23fc4139c0e78f390104504088710a59f977256f51f7b2673e8aa9c067473b0b591d4de12145f427a7e50ff3db8a32b2c79b044fdb5f9af62fb36094085a238562815f940d59c58500d449328b3d07abb522a2a94f6898c66aad5c4cde89a88258dfc7ee69d63c2564f5d7f824e6080183d4d63dd62439dc3eb57a1fdf138f983488dde612ddecb7d4fd03baaedace8c1ce1767de4fafe4e474aab5aafaf45e9d4cdf8d345bfe446b8f089e89f72c65f469cc1ecd3bece6e44e2de38cbdec058a052323c5031b41fb93ec058a2ebc0977def61eea7bed1c72f5443326ef5cde55dd5118ea71d5fc29bf8475c50845b5dc811a8bce89b02dcc00efb5406903db06e35b1724aadbd7063ed0cfbee5bda257892fd5d319260d1d8560e4c4165f4074b87f97a84d0fa013552b5c1b3fd42187062f37421742ad555784c00dd7e80d6e4a256afa22e9f94db9baa2bd0f3c877d1a2dfc663190c1423877515b2813421ec317377f40ce8e79918153987d5c17fcf0bb9a6896a77e27b1f1e820b1a8640d3a6dd5155c5f82c1d1a0d433f5b6c1e9c2c6c8cc32223fe3d63ed8aa45775d4599007a93327f0d54f6a1ecc7d5369b0bbc1fed69957953f3eda44626291089b8054faa47cb0b9186f9a21f5714c414c0ffbe8830f6036cf402abd96d795d945cd9534aae93e416b591a7cd7a860d5998d96a30b80f417c222c27ac5f21d0bfad5167787eb0ead0e02251617f3c32f34f41ccb9494f93587d7b85a8e57384d033d42680c485f2f1d658bc51c33c630010ff9e04b8b0d654aeb0b0e2a4d4b90e3cd3833375d521d6355b330ee0ebcda0d17e52855228531816853397d95380dc0ce15b844a202fcaabca781b71c6550b1459e9878515e5582acb6266ac7c8ed3ea1ab09754a9c9b15927b62d6ded18b00949efe784046a6c4c9bba91527bad434b65a625c333d3973050f993530490c1defa602ccee64879eda322891c84ca3e29de996ec432444bc5abae8bafea9af2b1967c91487f6684630ec5be576361a3fefeda417660fe979ce45fcef3f561649c3abaad2f366f76d63dbe888eb1c92713b1abbd3501a74e7885eae69c48f76f31da3c33e8b2642bbf0931d88fa212c2002c8b923aa91451263cf94d679e1c5cd5c2cf92ed2e47e331cc6a39936dceb8f28984d4329a200e632e82f2a78287ab44165f2f167f6851f66432165016c02bb7adb0d62a8c688b7c4642babc416aaf88ade509e8112a781457572d5f8a5ae4ed4d6fdeee11c446d07a8572926d45b7e9dff2b39da5dfdf23219b151a002cb87cb52a2dd809ef086ef633e4e38dd342a7df290166f353336021fa74d3fb74a696f858f2c6bfba4a562a9940f42b25494757e2e0c7ec6fff5d96a61e0a0ecd99b49317754762ff8e77eda551178b843e64d39da0f6b4941938ca9e490c778836522d2101aa9fe3b4e2f21b4da7d173c17f087448986f007e389c83fcd354edbde082b44d1614d53bc8751f319bf0fb973e8199159236947b96f87d7b953cf7aa920fe57749ac687c595c2bd3dc2bab965df29ef9723f00b87380d5e892b2a1970d1d613b746ac95cc696a8130e06cc10aaa32b47afa61ad3fa87ccfc42b0209377197d0f378df73bc7667f1758216649034893455b4b09418ab4d4a3f21c9318a1b3c5cde89251f937f84b115ab1812a4ea23ca4e3058563004bd507948dfda3c7fb35972130f57ff739747092a474aaec7f2c76d1ff76a04f24c5c575d954b6f6885d670578ca5bc8de0d3ec1f2919605e0f0ae0b30354fd677913a8cf0b4c34aa0346ffa91289844665b2d4866751a3bea744bcb77f02f29da6be6e77569e90e83a1d0ff70136f927353da20e388ac0330156cecc76370effa37aacb09de2547faaac05cfd4d04aa5b69fa5e61bcb1b5a74596c4b4451d170273f5ccc57ebff43961237ae15538c3e255228aa726f7c472a3f0db77bb8cf56bdd2e8b8bda7088c0d2e41070e8a884feba0dc33f63901ee8be31a6eaff429349ea4f054275de07abf7e87c3edcc459a128588ca9bc8ca65ca8e978408f751a2dc53344b02302bd906ee9bc27652fe0463637879bb0fb59528c19f81eadc2e1f6a78598a5b3d29c779b79bd1dea213381144638eed4514c6c2fd3e296de817c6c6b3b16cad987cd2b1d9e20219fbc455b3a8b32bd896ace8541c2c4dd5890a99582a89c494dd418aca4ea1009fabf90b8e29f208a03a1412f63944599cffe18f0523140189f2f6b711aeed2bac6556e938d41b33e2a700a728e6458384af47557ac5d252e931059ef82ae31644966c54b2b064a00cacfc34cca7d32722562000fd690297302ccce4ab28de075ab0033674b7dbc1243aeecd3ef965da5e18a1aaf42076c005e3935ef719f3603c4340fe166468120188f5731d250e405fa947018bb87a2cc25c2f0a36a4bb328277d3c19572aeca20a402270f251780ac9c3da2577c3b8214838e36321f7268cc4b1eb5411675c7505e189e598326526d97714f606bd2f7a913b15346f43e72c929eeda91876ead417f9bd15b6982208ade84aeecec05807212e6abb0effdf38abfefc4966d475a0f2566579636bf30752d2bc1a7802e23ad0218d4b637fa34d0123e41cd8787f1f9fd50960d8a53e129c6f4f181e76c75c7eccdc7a9ed01158f395d8b45bb52b8760ab48570536782daada55812a250124b81b83243d76b882ccc32e815fbaff9cf2881d0160097f5057bee9e0caecb1df60ac44087f90f5dc29278b87e6f85680c6226fbc870a452f92a8eee0745ae12281ac9fc6d10c0d8c1841cf86cac87df5d42d616adfa47a4b2971d28d465af00775bc193f806291b4952d60c0e581f3276db3c298fd89552e3b187b19c086b02c11d4d797ce6003f0bfe66dde2dca3102c4d1879217670b97cc9f2015a7ece1ea22b2ecccf846f736b3c290058b1f898b9030a1c736b34d452dbe3aa93ff3d25c15b310eb48ef7a52422c03759daf0a8069ed843e1df0cd34e83cd5ae05763d879cd3bed9a14c096cfff2888a884a30ec5eec8edfd859c0cdad155b642e1d856fdf67871da6cea7c02c136b0ac0864e86d9b56b7802c196ff06d591636cb11690b70a0a1502650c6cd607ab7efea5f2c4975476157257d92407937fe5dc308f7cd116124bd1c89a96afdf0307b75dee9c573a24b34ac0b83255b2f8d3a96249a4ce4282bf565dfcf3ac14fc2c6f3349a25a84bbb4ebdb1b64d43b17f8dafb3b4b54b94a344b0ee10dd9ef5d6a1bb7acaf16cbddce1c1c30952b0298e459fbd88c9113a872278e8ebc1ef9d454662890c52e554e4f0fe089ce0290600234a08ed94a82732c004d418cc23aeb691518c8e4bfe244f7bad1eb49596d9176511837214f25fdd3707a035a57c513c7940b240bb993401a6b209894903d02179515ce933fe387a32d531aced1a7b664a62efb7034062a0cfae08dc9a1b614d9c12c38a8112f005bcf3fa43609c9f34830ab6ad2a887de282cb74e33b90ee71a850cd8f38c8631029cf0a35d3f23bd79bd9ec988d2fbd780906a8f5a527eae3f27ac187ec92e8cc98b0f17cca9068df4b1a2893ab88ca67fcc9f20b2858180b93770ce16f39a071034fd2d8d91d29aa035dbd3e8bb96a5a2a8c6a9ae512fd31364084f150837b22f94db871567276ba110f46bc0beedc233ee6b72c096a598323cfba860a24962c90b79122acc8fc50342d0df400fc251640beb162e62d6f0aa181aa003d95f3bf4fd5402302f0b85bc179c4e8d4bc3de0e0e73eda37f392017565e1207881d237c419e56031f7e0c2637abd070d16221fbe28d7e51022fe4ec82086317c87e3bb2c30b037550fc9f730ab715d432ec013a10c1e17f98b50643b140e4728bb1b0fa073824899156309fdf079c1814d19b3a36af7bc5855a05f2573f7bc6881288fd297dc3b14c87d528d6a46d0f8df556a48ba589795b4368fa8a509f4857d53410e04f7d22627266c848773fe8d7698ba03675bcef04223e2f6dac8da1a01655db0da817e8927c00f431379449daf78882304f3ccedc55538988d043e90de0074ab893e32bc781de9f1700b8474c5aedc3b981997cf5a7f8693b4fd6a8999b85c92c552f9f3c8a0f894ce26259e1f40ddcadde301d77c793ee02ef9486584630b66064277ad6ee9fc9a5d40cd579e0c45ef476cd2614652da2956330612bec4e77aef8ade5c25b176be7a21cbaced3874aafd8951e10724bdad62d5e8c9f420d4f6452318287cd132d90c5067a6490378c9c669be9fad64762d9e5d307acb87eb56e42be3a8a3f2370053926171ca24191b988da56d497ffae0250c6f848ff257f57188afb5220642d4feee8d826b6ef5c7cf9a05e24bce7122ab3e34302568a228ed1d142ea60b8f2c9fad5f8dcae13b4e29384149bfe832ad28b9926f53d62e5d6b9918eaefc6d86344dd5a7618aebd55abc5776e6ae8bb9539d97d5fd69318ef7a539a518f15f47b5b62e1d1073ba4a59da88379824c7ad86b1833811c7dfb82208ddb214073df8dccc4e73e19989c00abefbaf334e6b1e0787f9a0c369d06fb35122fea622b59225cbaea2bd857a6e10d22abc265d1340e52ed99dbf795dc1f43bca51edd82f2b60bc3135120177dfdef1f9ffd81f2266ba854e202d35836ad282860865d1fdeb73ef0d4c15558bef99d3dae66c2e8b76bab41b7973604b6d6440c5ce058eb746ceb6fa5d00ffd59f4b6f0bd0f412cc7ba7dad5edf4c84a09bd1bdef369a2e2927371ea7b1baed15bd4ed1cd8460ff5fb2a0ce54777e199bf648dabf62ab840cd6e357c1f213954006f5a79efd6e4a0092cac05a732836406bb92c3098c4805e7ede6d6d68d9c209a73265c6e1f44b2caf0648f875b0c1821d2394ab081633e333f163e903b9e14324ba8c0b5883a9c0e891e4389aae61c5293aa043dc318a0e650436968f717153841658aa2272b67f0d6fbfe531315c86bdf28d48d17c5aef1555d262225ed9c76c20da7992bd90d37689fa102bbbda5b13112d8ab457484e5181b4b2d5840480d7da87259940132a44f05f848291042e34d7f4ba5e8de4bb5214ad814787984eb23a43f38eeae71e50836740809e6ecb527241192f6b4e20610ef90be1dc918abd40f1806cd34067a37f5b54d5097469531d2eb051d24ea0edae8b021700081f95e613f5830bb37c115f0965e014d6357d074b7b5ea475a260b9a1c02c757d4ee7e0d3e0d3fa93761ae3717e4f7d47e92f9474e4872131e333a9b210d0fde64d2d2ff1ec2a28422b05dd268888000fb82217687a8a8f64a28b54bebcbe80e59147134c2b493ad4021dab18f32ca9907a2f5769329c06b6bf67280a17351fb696ac71a86c732a942f42e1648c00752abac29820dc0fce96ebffdd1834832440385f40d6bc107342183cb510b3330ed9def39239c2cb0ea4c05db39bdf88372a2d8aa4b47405058349813ee807448d542b411849d3dba7d8a2cf342f1405f7e353bc7803c6100bb8a6b975a6e407f0012b9aca60e457f0704bffb38d468a9e807288ef433442ea67e0324c91bb42285f463949334fa917f9c06fc4b400a945207243f307bb3a1856f2fedc027f8371ee131ca8a888dcb303bc9f55d9a5e077a457c8a9d563e8b05f931949a9643afc6414452f6d9dbdad44dd26f9b1494b965087bf3bb0bc4f169a473540cc5b7382ee97ad9061c098beead292996228accb257ad06f699d5eced853465b881e0d2a458025ef862a3a26572d1fd7edbf219d6888e722097aeb6b0e4278e166af5a5ff36fa9d157cc5a9f705c6a43ed152c7374890ea84b6773ab2b3f15f518b0f3bdfc0615c1afee7d33d7f8531dabe1065a76b3b946f65e1c8bd1942f01a2d252de1e6a99939979d4f8a7cc04363362b3f51162fdca1e7b3a09a7acbb2659f2936df42215267a300f9e5e6c8a0b833feb170d68e3b766d09236eba6e8be18357026cdcb8425fc1527bb7c6a866478924bf4b26cc6f429224d80e13f17e0f31af80e61ac2e65cd14b188910db2c2712fef9829642b8c81a689ff70990c62b6592069397235c50428499f6e8ac906b70153f2fca4d6704039c80492834fbf6623ee03f420efec7b2e42d09e9e48810c9756e7226b06f514eda5da22e0f97645baf857f6d480b2662410c4e53ad8c29f12faaa505227892232a44f5cfa48de7106b43dc6017d0f765c3f47d24ad2014da82127d4948cbc9483957af900872a576d6d2a543cfd67c5f69da79fe6e49d7018335f48db2fc0b7c09b33390d960a4afac2bad31cd631a6a898105dc4a18f51b35aaa529f381e292adf3c5ebdcb1efa2bb9d26bdcfbd44e1ceba6720d4aa954acbc1221dcb448aabd730eba5c3dca72f6263d0a89cdf8566e667d8e164421d903ae09444e2092312e6f45c90f377d942834c4c35d9858d576daa834041a978700dab41ce6dea0f64f7bddd13beff918104985fd23545ce72d31fcc18801b5330943933390a70b575c96e0f30b09b6ab45ce8bb55aa74f4273e8540d18018bc4aa6295f78e72b6734b7af41da10d9da7124300c8d011d0ab0fe96b99f8dc968615a4104fb725ec8a6aa3909dae87f193a01a893c72b27717df48d2933a39100921d1f6b52d1f2713c98f4edc504622bee3491fea6d227829a6113dc15340fe22fb13c4ab520e0960d590f08bfe15d09b8ae826f731421f012c061d19373a67010512b809178c29a29915a0f313e31b2a8c9f45a6b2c8042471f84d0434d07f25693c2917ba29ad4221552b05529a206cf92407c5cca44f5fdc8466036540e750281f6306f7f6a44007148697dd8db0fa15c89abc4249794e40f1f14e2a0655e865edd5e750690309ae8e8e039e206c70ef7f0345bdbd116ee87377799d06577030f5390890327b14d692224dca5683be9b7c6553731ecfa7f3e910e53cf498a5ded5d544ca47acc02b72df74a0dbbba9226df4f3155b4b530073d1c5385250ef544b682a828db236b6ee685efb9f34c2de48900c389a1094717e9c1005825112cdc869c0ec43ef56561dcd03d1b1c8973f760ab027124033c62b4f195afc1e6b9874362d0cce3f0abfcfc2467c86273e3e64f00a09002004803be1922fab88f638c30030f3b1d8821db5ea9a8402ab5b5802f825ad451fd43548c0446ff4c12a9831beb31883bb72c335e7e2bbbae69e2f35580af8156735d435a74572e32d6674b0baa6bea522151808a15e89b44a2ce4261909d035959113276e9d2e0e03f57f699214e9fdf09455e2fbe0f57713a73741372819d664883f0e8b99876bcf252ed584509b000b7b464d26c5a1dbc3b4390215bd346490f0a4ecbd03cdf19c9d97d09e9b7c4d2240cd959653d6bd528e56fd7cfb06452f0248a6c61a0f1fc6a202a4b9f7c5f8ab9fcf5baf99f072b1446f3f4392d82f41473505602194037cb468593acfd32e268054c0a6bcb3c4781d4fcaf68aeaa115ef2cb1c59456874245c31037e97bbf11cc2df5faf5a8f8621a2a5564f42f9fb3630d199a5ef4115607be9727c71f0fcf004342c3f97c39c295022e162d48786372466de43b282eb4ce5fbb022d122d91a7c3de9b6135ff71d990cc2406dd73326ca2914f301824ef8bcc15e944834e3ac484885400efe03889930cb91700a239c9e4f0ee08bf24dcd34cbd60096defab444e798d40b996051eb1af7d99be465a93fab985127e0b2aed395d55076c0da3b34f06d5e23b9ab3469386b3f92cc0ab8014fef392db37ad4ef071cf3247f34a04e73f149f1fa1304619abdbb03984b8741767ef43e42564f108b27ba3c88daf09cbe5d37923195805dec39afb688fc9c442beeec5eadd931c59b1f81e071fe50ffc192389c110c8c17d2378b1373ef5a9f75a62699cfb6846a764803d4159cccd4d8ffb3304c16363781fe9d2af93026e3e3f214358c8047c0d890167b0442a5b8332c1d4cbefcfe06890465397eea41703c6cbd43bfcfa02b13e4b8e230b7c61c01e1b46ac74bd85d87c47ee650d40d59da02b5c594a1a4e2b30f799438a2e4ff06e086048b8e56ebb69ce3b4d9d9b39cb70cf2bf204663d406f30bf0e01e7c1a47949de059822b8a129f0357e2294e9bd9d25ae87182292fbbb18a71850f8397578b8046782d49c8f84a12d3f6419d5e74881686aff47869ebf0cd216f55633858d2e471869a358b49a756081ae89d35c1ed146f67d9f59880eecff71e22617e079ceb191665e961c958945dd24b451541027dfe909c582186edb4840ff40c93d42578e8a37642776759c9542646d4fc09a1727abeaab849362ac6a762d2ebaf2be5d925552b96013604a09324ab557085f17cc2f43334831f3898cb2a3b92f0bdcce045001ec02d50e10f7b9edff35356fdc2f4f1ab8827d37c06c890886db787d262019f1cb6d5ef5e91b1086c78149113e9175db1792b1de375fc23e08642f383cd9772bec840b745beefd8740f6bf5e318b84b123ebf0744fa64e76b1833b04bc3d3ced9f4e9a8552e9846e303c03174153bee7298f3a6c21105e27d2fe33e06201c787578a5bd84a0bf8a35d19f287bc120ec6eaaee09540dd9aa55a10d5a176a7a105e400330baf0f4d683071b3665e78da59f179f194df9579f84128af0ff2b6671467d2d16d7ae16ed17f166a04953817c9417524ee069d08199f100a8884894e10ee9f44d001ae7a05f10b44c97e739f8b4a6ae0f84fba0b982b0f067eee1d40b1f91ed72f89c743637cd7f382deb0b159fa2ad4a5f763f72d3325fff23468c187b6c41e2ea28a5073c271828768524f835327f35637b4f38c9edbdab74f99ee7178af90d4c9c9ed6ba569621b6bf06cb5c7e5e172a6ac8a16b3fa31533925bb50b3f82a6dcdf993150cde7c60402250238c20f85622447dfab607fc4fec492ae0606f4a02a6d31dd8dc39d566994e9e67b1ac4dbfec6337e1113e48e0cec3b11f8120fb0162a28f07289e56340cc1a1a0ac5f70cd0ca4d02db242a0b787e304ee97ac0bec795b2ac5c0cb3a45f87781759fd53185f85d24ae5ab834c365b26689dc61026c9a69603073057fe572e1f3b7ee7062c61ee31a067d0e61b626fe45efeada61a20da446627e6a4aee58503a9774a97aca696ca8369c12163ec95cd55a2842ccbf2b8196c0b84b8188fd122171fc685e6a09b075b01994e46aa952532f8b27c0725a0d8d311d5b7976c145d546697de3e821ff4fac1c10ecb34a2793d600e42a557258106e41e370b0b434f368eb5f52150b2fdc4e2ac689ce2a94296bc6ac5d8f7b3a5472d8262db3e381a95c673499bdb974399abb28d4e51c710997eb30336b8037eb08ab9508d040522bc1b04858c5ee277e4e6bc87ea459055ebf37f1ad76d5d14ac2891359255c0ff6e52366eef936e2e6572cabbae992b619e4545cbff42a563c4b82ba256f5acd7b1a22ab8da4e3eeb176cffa75b6867a6b55b73aea585fbd6ad43929b9c92147f9e42543963d4c2fef8a52378a2a048a2950669a2e0d72500fb41c81cf4bea617960ddc41ebf3e1121dcc262498c2cbadc02409e0d878300bc766a7e6eaffadc142a979de5d1e796fe48558ddcb9b55ac8033b1d9c725752479fbd105380e2be80466d13025a2ebf500aa81b10c400d49788adeb0913eb70897c23710cac62223d92ac71389f7c1f2e609078926b272ca43cf168b2b9a7d41ea90043ac1a8cf262ed2733ac6585666753e60ee46e54852f393360876f37192148922eb41b976ddea4e6e179252a444dd5343c9f20939655112c0eefd9f521e8ce200e4858727a74428f38e4ca8761eeaa964f1f632d065b8bfb2a37f8ac5b9e908637ef32724a51f3d05a66f11b8700810cca088bee9e8d1f743f48dcdeb61105c0e8401aacb678ce79de6f02e42108810f24e05eac56b4c4a3629937df7fa558726bf5ecfcd4d7642eb9e2b860758d26b963c12edfabc4486e485f3d357184cd41f1a715cd53e241db90f3224130ea09ca584f513111a0a4b9146c9652cc596f857aa78c846d00ebb76995f07101ef80cb3abe3f6f84d448cf9780e2163e83ee6936233cffaf41ef4ce547faea1bed9da4fc55d22359da4fa2be86841ad43159daa79c26494f0fc1d7bb81c357f29e1abde3a3bd92898efa32301b3566a1f735ef4c2d3fda2ae86cdb6d1ee9b4495302561d4dd1a48beb78535507fa184e54f88f7fc412bea7a0d7a75c56ba1a0e9a1832606e078972853bc89d2dc7ed1b250b194a50d19569e56e639dd51ab7cbdaba48c6dd72804b138690de92bb5e11cd42e78fe0d50f94565e1ce960ba64b443df3722d4c034c5eb0401621229a5f7a883781d50761b0b34f0a4c90cb083b31d801e19ea23007647e7d7b89312b2a60d8fe70a4623f90cd37dedaa3a356b48c74a2d5614ab43b5150066d321f56fd6e6a0767580de69d2c1503dfcb91f924f74d0ba32ccf777376562f0805f7188652170899f9135f3ddd4d0d198794b743a3ca1c72214a2557841aacfc22d235d72d6fe686743eb20df34ecf7170f070de46b89f7bb0eb6e11af0c09027b2491c9b8a841cf95785f21c0a1cec9776e2af504034dd1b84239f03ef0103e6c8a4c65ce713c81986bae570b022d6911f716b0ae51c38eae445fbadeb5435864752bfb426ebb5a7f2dc123c81300f1af64d4d30cd7a1f095217830c99f30d3201d911497b03e00cffcc73e7f8b5d31a60078d2803021410b7577fe5c67847e59d424140ec97e81f100f0ca356ea4bd2f0da7c873571226545e160f980632f2315732533c38311899c6ec51149f032720cf65d3c3d523c09a87aca025ac2fe2ed7eb4f5de208781b244b60d6857ee7e84550caad44db178e474690d3d3fdce785c0d615dbd49dd575b017f013d41cfb87018e3b64af125bd0aa75f84bccd3840fca0faab06f5293d0b68fcb5992e16053dbe050eb3fce49d17de8f7603b1bb46651380c8a7dc63f522d9230837fc374e73b7b07053d4bc1776eaa9d0da333770c26c7820abfeb98cf72de61d0740381a8c9bdffdf903c711377caec4cbf8902b3c8b736d9081344f483d0b955461496e053bf2176f8c445a9410c9d4f8b81b88257aca126001087a0c5af80d18a8a6b2a6504aa94d535a69a43575e9d273ac5f446abcb2c2b13a59b48ad5812cc1539193e4e88c4a9a468f44e5a523b3ec4411619948ec25c421ef1b6ed4ff586284013c68bcc9424b1fb1119a4785d1d956f55690ab56dcee88aef11129ca7b8264e08cc8c779a496674e84342e7993691a7e3f3c7971566e5b8403e8dacb3381f6c126fcb4bafccc64a163fbcf7ce019ac2c0fde3ac4a78414f9f4edd6fe6fbecfa27f7a4ad1eb0210c6493be9f69f47849454455edf81c82572e89bdffcf3a34fbef2cb8f7ef2cf1f1ffac9974fdc4c5ae2e5c5013ca8c13f7e1f9532e8ef0ba9cef66d329afe1402fab08ae1d752303d1afa1623456ae667d48757c3b65c112ddf451912da1198c2bc67c571483e163cce60adbbfe721c946308514a35ef4fa8ad890753e5bb4850516d34ede881e3bafa7498db1e958e1618585a210317cc09905d55c374de1d0d090462cc80f781b0b42e6ddd6ed36f6e0591f57efc9975e4437cbd340b11ef389288842e605f225831e02029368a04d43554248d43ded022231df62f22be2615928e27bdcd2c72bc69d6aed2c9d2ea549bf133421a03d9a4b4be484c9aa64895f2d7e80788b049295c35a501a4bc0ec274a419b2502079455a2d630d916348adba6b3ece8d44cd942363971a0c34b7bc9eee66477c5a94424e3cf944221727506a7f7239f236b16e493a13be119c3aea0bdbeb5af00dc6dace228d382dd90395a820b9ab13e819117357d1dd28c1432b6e97c5cf1421441f028f6ce193e7ae2b69ebd2628ecfcadd9a918550e6d83a0e6255648e0a26ed13296a5b86516da0b4089fdbb7c08c0d9ff94655a436ce4419b6aa4e34a049de1527545acdc7e49ec8c98fb8da502697046004de7a97ae7977733c3dfa05a32011ee80d9ccbb7fae664e455c9aac9b650a6f7d9ab02b33f83abc71c4e05acceead028e45578bf491e850a666585cdf57f1d753e3589c1193eb0c93e18d6612e72aa66e2b0f7caf51e8d2b7837a8c95d1c3b674528d75bd1e7c55b9c2b91475ee28132eb095a89a864cc1c392920dea91a522df318748fabb8a6f959cbd917f15382cee8eb505b71593b3ab0549ecc33dd816ed8ba670709d33ddaedec0daaae34ac7061d6237464ad4f351a796b48185f7f2d8e1ae629e852aea383e26ea1e035d6c2599f25229d09b70a29992d593f064575c62a71709bbea7f85ec3912d45fec086a051e4134c879f28f6445c649925b792c109c1aa82755fd933a8bcdb4db4f1cadaaa347604a78190a7914291e21bf839ebb20e6c1e06652b00dc6e8af1ed6808167ac78cc1671f65ed8c88d3c8a344dc63dd3b36f86eec76c557a53a134bf79a6dd2a1991d533c99d018cbb43fa83e5a02ae8a9d21670d3400e0cd3fda624cdafa680c5a1b27f652abcc9c1d24d106cd07fc9dbe8cb49e208a869a2dd0642c8b939be557876b3556fbf0fea71b2abdc9cf24c0bc0225dc870bc5489cd44683b5ab06cb0a6f6c1b690c15a03fcfb3fad5830815a80aa8651beea4f096a2bd7fd2cdb79c1c108ac267e21d073116ddbbf993413ba2713e541c3512d1f8f27fe6449d4b64930c441510aa2dd4028732c09610eef252cc33548c72e079c13e90ef0e0f40e984ca2016bfd23febb3a99cc9c9c2ed745434277508ced598c5209c74f30fe4134a752c5b2845e2f46c7b74c1a5977a959473cd3f700ca46803088fc36783c961a2d548267a0cab78d5512b10862a838454b0c11a856322aa622c96f119983c4a192d65468db2a0e2a2e69ba33e05dddf17ef8c50b9a933d386df438dd37ceb05cbd5adf49cf07e14014c952c6d18e0a69b5620b05a11776e3c821edfbc449d1505e5f4739cb0f5b0e43c45e664c881e59cf7c10e3b06d5dff9c5f2e6af5728833bd218543ae7bb7c3ec119ae300ee316b3ee038fd206ed274509d501fe6ed8a73d7986c7f7c4627398ec9c15c1fec56977b0899865dbe68fb1c30249b434b28bd1e97fa47179fc2bc9bbe5f6d9862c52f3ee2664c11ccb245b049709dd370be7c49200e906a319e8f2ccc0a5adedc2b66039883429fb3757c713cdc98ed3a58602260c56ae7e3ebc4c6fc72db33081e122a41bb20255cc700b97cd66f8e86c84a3d221e7971a91ea8bdbae719cee548c78180e25fcb55c0a10ceeb82fa4b01d95cd782a38ec0d187ddda295c4ceca1bd16e84ab98c0f472717621e3a56130cff320caf50f864f04238f120952804ac52c1224892941e71faec2e87c08765361c935fda95921189c4629891decac8ba7f978d08b79ee5698c9c8bf2b2d5bb558bad62dc717d455768999f976e0298ed5ad3b2b196e1f5c8f760a4d7af484200b545e625745b9886b30010e37203cea131a8888f5c5834b6517807015d631ac0b586fa84e2568b9ba507f98dbcd93eba80d85e00a4349ef0bd4307398f685903de90cdbea86aa55f11cba2036a70793afe42433bd324fcd425d7295632387b7aff220e5a9da3caf35f34ce69bb9e4f4c2e7f3a16a9e486b30af20a39a5600e9b89c534bd8b3e89a40451f69a473937cd40b9961999491cff9ec3677c1a0123974bc02d1f19808892b48fe6a62ac332c357becd7274dfac9b02d563ad7a67c8967344dc52357ed0734879cfcfdb7aba400a6e1f2f048b7787bffc29f90aacd1bdebb1880abe507908cb179effa304e77fa451afecc447478e0f433360eb6cbae769455cc4722c95f4a2188e9a30cab9001b1443e9946ccd17aeb3622485bad00c0315f16ad4069c4f4a3e53aa1fd2f94931552f0040681e2d0c27329df00d189aaafcdceb280baae2eb817b35be7d746a4d39991a242698ad07ed60404fef31dc2dfb9f15061bff6bc66a1bee84110d68d197a215546b79181b37a711379f85332cf1a646cccf70d5d11ed7efbae36655a7ce2e452daf10dc9057189811c635b69ce7f6a9c00e2d8a542ccec523c7352960afb2fa3c09449b1e675aa0af8b082e8c5075b00bd3f169e6c7c20458cb196c4084c7682240cd5e5d9c154571c8d678f93ca353530a21e585634cf88131e942f0e755a2c9929c0561916046947112821a5e4aa210381b6f3ab3a7545658f93e2befa6de03534e861f7f9b8c7ce30aae87bb0f89051b9825c280381bf5b36ceebfc37a1010c96a07d6007e0c2e694a0de9e0a561607124d2eb61223fda5aaba095f0ca97f9bdd8eebc603f0d8e61ce9195e347e29b2faf9ba31f950b1f27b8e94882d3c17874b9d7d6e009b4dff60b8244bdce336dd8bced8533dcefc45e2042b1caa80f6af80f7d5aa629935d54d7d4f6fbc822b1ce1795a88aedbbf2f6fceb0df490868a71ac7644901007688d7123c100bc70a4e4ce54c4a2906a7187781209f551b2bb0d94f3361c17b0b81584cca12c2bb2d47aa6ad04eda4c592580496341754a4b19718acc4e7b1697b2cb0328210d533ffadbb591a79a8e184dd12e0ef8987edbc8df424b3ea585764a71a7b86d9da5ceea0dc9ca95ba9f2424ed093dec0c33704fb41de15d66a9fe28cb22ee16f40518b394911f37b634878c2962263dc9fb6657ee4dfed52c75e0e62cd66c7b0459317eb8f7e6c9b15f637aa1fbce1f8fc8dc532c8f382ba0d508cf632b6cd5e5d8c2c146d0a6313ae720720ff00a2de6da17220da1e2a4307afb7ba1890faa699de33b910261e55f96ba2521376e5f751d70240a7fab9cc8c75315398e22000acf48283e22d611547093e4325f110c421f89db9578fcdf784e56f392af435e46986053f2fdae71995323fd26278750d95110e925e39b21f5d97292a4c7d38e78483cdd71801b6b394692c586752fe2fad8cd87dd3750336c4dfd97a57b608ed7ba3645b4f7492b74c4dc4d26455d3d48c1780a803c36c2468646541c46d83c22e32699a7bf56fad76666fa5ffffbbffff7ffe49f8ba33574ddd1e3e1279bd6733105a1a45690d1474ca82ba76b264d82bcfa77581a675e9a58dded2da5c8a1467eea6d982dc1a094d82c5c63631b07d80db09185fc7dcbc2778039aea464561d02c38ca24d7b08cbd1a451b502899b0bf53408ea6e520238f83a2ba66683ccc7a9cace48b7e05d8fdd43afac7934b00308d89fa8615c0254744daf9c1560d538e0c2c8dc843111dc063fe0a768bb6c2a92af8277a3de611b8a6ae74b95d29db45216bcc661e5787dc317dd9813b67df97b95b6b5d095992a9c0058a7f399212b69934073112034433093d045b77971eb3d5860d503d663e525995bc2069e1f2cc572b97a24d44dc3d75c88642ae7cc957af56accd53a42794b07763f7947d68da6295a0a8634eaf6b8bc9e3cbf009047358d6254fd56d37aaa780d4b3b43fd69036e39b10cb3362b991d487dd71763adc4f5b41b9e0be7876a75045bed83f02f698b21880f3d5174eaed0c542d3460f4db6e0a6b247b34e800b07625955669f600a1193236d78394bfc48fcb7b65b714ac3d3d2086d6cf6b916df5da8f0f1c7386ad0131504b8d2d7eb9be48372897abe38470246e3622432a8634f34e873bf146c4ea97e9b0b942a1332e752f5fb03d6ff8d1c217a591b6f5ed51b0c1cddb6540bd16c6d625291d706e17cacc2f60bf0e7ed9556393cb2bb23949e4a5bd007a6e9d2e5d4f5086f849c10992d44a2664ecb593a9d3f80322f03aa723aeb31c488b1a9acb8524376fb0ea48c0593c86b1462f18b20a739bb49cf2cddc137779d3432ae2d99e435e67e8d72bf4fb2c6999b0ed10bea0f85a7815c4c950fa3fe5534936776dba1eddd9e859238e01f728fa4664b0d713e34da41e0e5950a0094831b5114b1a6356ad5c6dd2584ac4adc592fd0a0986e8651a4cf1e4f52cbc95522847092a83fddbda316ced80d2a71523ac3305ce6944ae0d57209a554d3a45ea707acb04073e4a7134e0f82703126eefc3050f46f0e6862b0ec45af403c39034aca20fc838ca4d71e9c787a414498635d32622529865c97888003922b117f3d7217b33336b89344296d84d08d95bee1d2d0d740ddb0d3b7e6953bf2347478e1d38e4c1b9f5544a56e193b9d5b77672b2f2f8cd6c5d996b2e8f1bbab24d8535ca7095534f3dca9cd416c4ddf41c1caebaebc0e1e73d070e6b109f710f875506f72867629c0b027f453c601a1c7e3e70ab47d6dd1173ca94dcc2340d9ff6397bb25e6f3824db6737b4679d364887e41ae33e38dac5b0c7c048b023f1c1b9992c1c1e57a67386eb175ac2a14ba65fa93cce1915cb63c782c9f4f49557644596ef7103e001271a8cf9747b4f367773c262bce3b1f3718dc0e41db7afefe3a2b5c397c3bd75b913cb2785e5ab20a7db7aaaf28a43d5378c61727dc53bf5f3a2e85baf9805332f8b7e5a6badb593d52c6ebee59d585220ea5bab75fa8a59f4f5addb6f9745cffa36b3b9ca308b6222da8910c958e3daad2ceb22799b3ae6ca51d866f16df839e69d2bf3ce9570fbc4f6391e3b1f2b9f7867e514efa43e796036cc039357304ddd0353f5f46d6339b1b064afd4669faf18b375e28ce270ab409f944f8a9d52be229b816fb5c0b75acf58a7cfb24e487df551df6a8ebbd9ab247d25d33b4ee5b4d261d467c8b8b15fe64be9e5937885c3aa825538fc4e38b58259703d0b751daf77277bebb4fb01bed522e2c362655988c2a8539addb0d518913c6f310c63587cb30b42514d61c0be2dd66c3de7b423823566e17089dcbaf76e4c359cfabe210f4ccec08a3da09bee2b33d7bae0736ee8a3247bd7714322d9dbf0c745eff80e189c2649c80cde5a8c03b3283e1f2639f44e41f037ed01f58bc8bb1b5065e20b37f06e4bea49d6d6b036f421c96e3b6963d55726b93ec94dfa56bbfac8a40ce9356830e9d2fca66ddc50661b7ffda6a36499db3081147bc3285439ace331f3d42de9da13b9d3b67d797979e98ec84503ba0eaefe75442d33cdbb1362f3863329a33a0de99494916eff75395612b9d30322bae20743f9e678c50f5e909f64d3b3a16c7a7620986499dbb8e5b8d7f775393cae3b1e57f6ee75391ec94991cbab71439f5ce39674ed696ee89369fefa48b832699074afcba1218a31914aa94ca4c8e176d9e56c2b28df935c611e6244302faaf5fb56ab1f045d2e9a79a994a9df366babc5a4c09c342831260d72e00b3f229664f9e46a51b79994b1f444b126d2f822164f38915f72c4e2045172cbae59544164a6aabb4141a7c57d432499056f4136386ade83651fc4238e36e342600f022b21e3d86760259a109171ec4ac4b86625b731e9d70e1ccabc316970c77ddceeb81b131f770bdab141e193753c673e7465cb430819c7f0905ce271651d3a706c30078735f3f01e3d7af4b8363cc45c63732bb91d167b4b705ccf099bcba3c78eebe89e03873039c76db444b463184993792431aee189896848645cbb6c967741b29be6cd511bcc712ee7c8715567b939d771439a75dcd221166bf53867e810b752d1a1e3f2b8e97a39d7db7179f4b81d8fdb1135e843fac0373e9abb27fdb24f968080cca643606693cdeecd1e76445d16de926b1f7a404e98eecefcccdd937999bb272cb8235ad22feb2df180a2f8a207e439d111f54b87cb7759d8fecc2cfbcef34100a11dc32c1bc4b16b9865310b8818d72e448c6bda6318408802e8048187cc97ef33c0d5b90588df6a06fe7cf96e7118a10811c4f7f527e3b2b2cfb88cc7b8ac0cb3b20ba11dbb10323ee3b2320c8476ec3a323ee3ae395380d384514888877108e7b0391e16e0bae64b8e0b91e341dc1c8f9103b3316c9c33413cc73f6764e0cf971c3cae20ee8c9be331721ccb716baf5774bdec91f5bd33cdf337ed716184cb2bf2a4c4fc8959df23942c85b275b14c1df3e5fb4793bf9b58b2ef8dc3f8247fe7f04aa5852dcef18f47e73e898a7e75cf39e7ece7b8ed9be3929c909c90a6b0d65a6b65d73cae4c72d2af1c97274dd1ef7272e01b1d8f991867451a31ae8532b56b65e7d91cffa4c898d1dd2a2beebbf765d98c9f53f98c2be3c669adf464ce81c3ec7def7ae190effbbec7effbbb9c4fa343dc4ae5eb722ce6e1ced3cb3acd78b036b7353638eccd5a6bb35a9b66dbe72400ff58eae9ed8f7ada9bc7ad545a5e677abd9994617dd2ad32c993eb7800f10def6ca7b7406452665602d4016c16888f2a01306a0038070e81c8707d92edb66ddbbc44aeba7d4ba54d9582d52f1eceeaf7347dbd616592598ff18b2c11b5d5cafa7796ee471ba44fe910b75269799d89e24ccab0b025000e000eeb00300e06223bc9f25ed10d0eeb0f38fc7cc0e12a7c0f383ce8b2c1a18ba6c62ba293879bedc7a96ecc5fd1c782dab68c55ff110df9274400476defed3663e11ffd0cdf742539913ff8d0030eaf33bd6f26652a69080eab1001c420385ce51c80e0f0cb39fcc061cd39e4e0a3078f1d39f73ad3b300cc67b91faa34cb7ad60921fa8858700030ca070e6b0f1c7e3c70b8da81c3e7601d3874e5f02bca81431a69d3f52c9c65b7cb9936cb5858eac5320bcba989ab7143996b3c9336d4ae3e228ce5f6a1a5ff8874e478e30d872b6ea5625d26bbc37214cb550f7bb25caf128262e98024b75269799de99f8e2fc7f761d44d938ae68c85b2c34d5107d4030e573870781b1c82353874f14072225938ac190e3f950d8707415707842f00ee591cba669763dbb29e7d4e22d9fed4e55815e681c93244b2eaa621f399cd6e0e674d37ac99e5ac1bced39bba9c6e90058737aec21b10de96ac387a2b1396539f1cd42dcbadb7ab4e0031f7bb75bbc275b33e94b75b9964db9365169c49197ad50d2bead29c5ed253a95bd233691333e93437665b9964aed56a3dce190eab60aee87459bfaf88686e98a87eabd50904531c508a034add95cfdc7edd8f8bd455544b32ea5cc4e2044a32ea16f549e9d7b41f0b045d2e3a94e5b972bfa2fee6797c5cd0a1f9b55aad56773bb6b3fc666e2ae72eeb072af55e9de5b27ea88ebaeaa8db144ea56ecc2af7e3a25f49642b2bf8c6675557e6ac27cbf6190c1ed4439f8c9a317fdd983925436a8c15f5953da7e4723f95fba95c927e6d38092c6f97e77efaa5a46f58b7ed76c33d188ffa237ea80d5a0b65ce70f1c5d2b0dfc1e2f006e681c936beb91ebb20362e731b31d7b831d3b8e1ea735d7999bb2d69f0d721e6c2dc300a0120073a1446a10d68ce2469d2720c1c6749bfc0cbdb11476f14d8b31b8536e7b64d7a85ad93c890aa81ef33e4b295173c769bc0e88aeb6fe6fb78a7e5f6d6b6707585a3d5e3c0eb0098bc3d8481d982e68b7caddfb75ad92dc8be2a29aa5f11fd8ae85744bfa2f911d1c4a3270d62587cd9b187ab180f3f190f6b9ef13a03c77e91613bdb11b53aa27e99db5b7e332bf7e27dc396b37cbba81bca8cba9476a39f93e2fa5a2b0e33dcd33894db0d7b45438b7b5af5dac96d4a940c3137d5b75227c4e6fa753c56be7dfbe997add5da17e9578eddbc2ea7e22d4983d2e2edd2dbedf543489b8e5be4b0f56d759b7d0b590f598f9d901587c366ddec3e249d853912e64257de6217a4862ddcd334d3cf7a8b431ff5f6d60e81a70d1fcabcf2afe3c1dde21d8fc3444819ba9db471ffb67f38a4996e24ca6d1b6549a06cedc572965d99bbbb1fbb8c62fbbe434899ed3753e5ceafeee9acabfa0aebdb43fbb9cd8a599f0f57562c26a285aab7cf1eaed8d3c6add3872b9815a48589903292e6cd7e3b4bc87aeb210bf774667de5aaaffca4c23d4dea78d4efb070ab9e0869535b9888962e67da9b652cdbbeb53e53d9f96059bcc2faf656ab55ebdc9e9df5f6616122a4ccf6951bd26bb79f24ad1bb3aacbd9b69f06252a659fe111940665942dc9a88b7e85a31e9811befa1ad63c221a3d71b943b07438609d2771546d942c3f8232da624434caa2673e7ca3b8f8e3a25fe47fb95b29fddadec22192dcfa765db9d62fd77a2d762b2b2b5fc121cdd6d2a139f311b160140bfb88eca53db5cfecfbb55facdbd30e48cc2c3cbf222bb9ee9f94337ca4c71c7e45a48f0b235c5fd12765c3acbdd548b71d1785765a2fbd820e59eeceacdd24d8350ebb4dfadac5c071342494fbbc3d9d494db6dbd7d702c312c9d562daf2ed32a0084cb6af19f842fb166b532f6ecc306ecc1e8ceb71415bf6f6556bfb30c9f349b69b8d4fb0fd4d5b4f4abf5ee050e6173fb152ac15160b8bf5d82f1e98fce2dbf58aa8f071f19bee536a85a5edb3d76b1fabfdcd7c11fa04e5ec6ded8b5ae471e192b756de5079db4e7bc6039adbb72e67f380b69f0587dfba31bc3d886bf109caf5d67e454bf8eccda46f5dd2140d56cc43a202939c34283d496f6f4d9c96b5d77a6b6dbd3c3437fdc3942953b02ee7649fb247d94bd4edebbb0b92ba55f9c4a10a53a2faf9faed76bbf6f5b2e6abc5acbe7d48eb65f56b631f43ecb77786a5ed53fb943d6a7e85f4c9fa88ebce87c52c7a3b2f8bb63ea441facb56ac37cc5e6a16b6597c15ffabb769bd5ddf78fbc7c2728a77563e27eee9ccf20daface0b8c23d33a75e3f71a882a90af7cc8c7a455994ddb669fb33b3281c2a916d900eb2615c6d7d67fb9ba644fdb2383c6db738ac1353227b7a22dd624a3add6eefec84d84f1cfa6c38945ce7c39efe66966eb7fb6394b7675dcec9274492e77c76b33efd209d7e763e4ea73e863438e7e994e1d30de9b7ed93ce0d6f979e4cb3ce984f149f7ebaa4db1bb3a974e9d0153d13713e7ce3f35e3ddcd3d9bece2949681ce9f66243f82ab6f6864772c83deb82c81fa8addee863ed376c23d0b9c33bdca7ed2e679b33c3b2cb02b42675d4b12e48ea74efa76dfbcca561c6282c85ba20a77bbf99a71abfb9d869dc984b3f601f300ff708997ba821730f37bc711bf2ed446f9145155364efa8a3000a143891bdab1c0549b6c83576f8aac831c722f46028c722f480c916a05841122c9ee022871d6506f7fabc18313ea3f38ee3ca1cfbe5e1d027c75881a9944aa55a15cd40a150a5ab6e4fe7179253515151a9549e7753571bf4707ce1453123d5ed287d7595bb7a8d1ba5129b1a1e88d8d79d711917fc8dab721b5736909399cbd4b8eb71eea0434cc70262c65fd79981e37c5d07c471bea82ee33676a9a3ae0a87ae21d9bbaaa36e0893b98c7aea86372492bd4bd43d3d75bb7b77bb546283c35a83c38f071cae32ead40561a9dcbb8a1316cb8ac9f452170485593f541efa64cfc35f7cf17e1a1cd61a186806872b14bed70551b987e5d04dabbceb80a0546e3ad70551798d984b375d29b45d1e981c4322f9846383afeb8373e3c66c43c6f5c1a1716396457326e2ec80c3ea92c1e14a071cd61818a2a1d4efa17e55291c22c9a93f759bba2192bcd3d359f5d465270475952988e9a89bb6a5dbddc66e75d555f9ea0a51a9bc92a7b242fde4b2b37a885fbaea86ab43c027e39f6ef87297c72ec72bc997ae1ccae25379cc2af7ae729b2ba9a85c45e52a55f4cbc349b494aa2e47856f7c9eca7b07c4277b5bc7c3bb774dbfe9906532fda99bce423d66d60fd4bd7b3889ce3b2eef8e0200de591ddf7477567f71db1d0fd4e9dd9950d7156350afa7eb8a31de4db7f6cb74d4b90e48cc261cca5cc2b55fa57bb71d90984bd87bec76e0104956ddc348b2ca5577495d75bbc72e2787dff42a07dcd3f9c5ffee862fb8a733becb1359c8eec56b97e3a9fc74d48d1975d44b5766ae5fa5a3aeba21cdaaae33759de926130a75951bd2ac82c22594ca55b72ad5bb0b9244e71dd54f2595bbbaeaae5eba31a3c2d45729dcd3ab1b0578eb5d7cf0cab885a9d8c6b45ade6ab55ebbda60ab33ea2dc7a113b24446dd4eeec5c59f7165dcbb2f0ede19efee07fe8bcfb8499a1cc665dc244d5c6eb16e8797baf7623c758fba31ae75406246e1da608cd77e79bfcf3a20317bf89e763b62e07b171c70cbbd07bad289137cad8752c9ea5686ab2de7fad57a4bf6c4d7a11e7db2c735d8e2935b3eea6a832d312ebb969608059552159145582c2fefad6f386c51e904508372f3c0e79dc603e3c9fb17bdd76e1bb99d4c569c2b3fe85242f485edc4c99cd124cb0a0e577915a1d4247c3f45a40aa7bcef9e4eac89ab53097b3be67f7cafa477df8d79e5791f79af1e0e49980726db77389ebba19cf3a31baec255a684eb998823bb25a64f8cd1008460a34bd84ef27c114ce25823837497236f4752446aabb4dfa70cbe1ded586daec9177e5f51bdf69b36d27304c94fbf6abfb2ef1f9532723b624e99f26938933212cb291a7422a9904ee41456526147526072464c665246e2ec928a910c3e99c36f14836f74f9a1562d97eda1cce11173ca14990dc79b2f5e11849f1c7e5700414a9eeff9e6cca44c762983fd07cd92a881e68c74626486bde47be80a69e6b36ababc74325138acd2848db2fce150e6911152275d3499ec76629224a02ccb60d01ae9eb1b7159a68d9e3deb1147e77b3b1d5db35ad643f38669abfb61a7188a7e2b3ac2b24ccb300ca3d2479b930c1485e27a86eb174a1f310fce792422d76bd666386b5c0fa9abfa7a957bbaa65b71e859eff66890dabeac1f133082a7d6f97224b53d85e7c6619d39633a8d4fbe138ed274e76d52c35ab9df4c4b04ceda69b703e7fa1efdf24e0f84f643307b482c30a74cc16912fe9053a664233f266004e6d94eba4f6ebc9a2fd4fb3cafc9f612b89a029829bef1b9f24d932ecd12ed1d67299532e1b3867d84b3764c8294a3950a1ae911da942953a664d815929d3617ef4ef6982b8e80cc3df25eda68efe93ca2af179c2e07a99d5d0ed6526611e85cb1e56896f940fbc6cc194cbb204173f8dc2efd82a1d7464f9a5273cfb448924dcfb470028a29b2e999e9991659984eb33ffb47ea725ab2af15e4cf580f695eadde3e6064d9bf91e9937b768cbbc6611fb141ec1af6a2541ab54e7108c334c2b1c1d6697516a60daef04fdfb3874bd04f2ca3d997fdf4dafda898e2f0f49e996fb2ac65669d716f611273359de35afeddf048fe644ecbe8b3de1845eab3e530aee19d96732da36f6a2d13ab959ebe56d45fbcde2464e6dedd0fd3b973b73e26a769aff788108cf3e8bdc755233984c1c178e8d3d2728bc830fe02c629fbba9c92b7799989625876ccd3b073378a09c2a037517aa230ba2e07857fc86cea6e3bda60a87dd25c31aae1eeac1f5cf6991dc334b6bb61f79d79d2eb65fd98af8f397641e62bde217d628a3da3efbafa49616057906c74eed206616017d7e598304d8330aeabc1aebbb5d935327ad7f92069ae2e48766e94fdb0468cde90b7aba48eecca26a65045d6ee8b8ce26ecc5ae9f5fbcebc647d57e61efd6abd4fff0ee32da8bff8fd913cbd7727447b865935ac2cecf3d84da5cf7f3f7dcfbc1fc9f319f6ec1a0bc33e341c1ec9d85726ead59b2aa86ba8d74f4caff2897750d7f0ce3f7b669e983608e314ffa6df1bd2dc721c1b84d1f2179836d882c3d5f7fd74c3252ced7e84f519fd4e5f76fabecabeec75f59e99bf160e7df2875b5f7daeeecd6db57adc64ed81ef7b8fefb1dba1a3c1d6ce6212b159baa63d63ddbbe191ecc91c567629cd2ae79dc35818de61b170e893b393b7f3a3c4b1b08c63cd5b5f5118dec97e947cf808356cde23b91ebb4228c6aec6b1506739877b72683a0af7ccac615766d62d9de5863cd9f4951b1ec9a6dff46b855b4777392af8c6a7cab21f21b3527824fba44e3476b663decbbcaba5be54ec8460130e4d1fdea92fa15e6fe893335c83947eba61cfe470f89dbbe9f4eed427d1d97b56325d5783a7a5d2279ecf4e69e9729f4974f6708824679c8b4604dfe8a16b6463661a5bb36cf2205d2346b7efae91d1ed2dc6713789ced95dfa35ead7ec99c53bacecac0cfb9853a6e4eddb4d23d9baf3917dc361a4d80d2beedb25729532d9473d32d7faadeae3ec6f35a29debe39c522d11993e9bcf64aecfb0766c1bc137df9326c183f33cd619fb3c4dd71336ba6c587346e68c7c7d461aece9c147f3c9a17e491f480618e9e99988b36db4e32415d1d2edf56d343d0dcaef7b77777f978766bb468668d0fb917efdf5020c6190b4e45ec96dca6d55d9241f7ab94b5289dc40d31c31d2a01cf118fda691481bc9c406628d34c1264d529a20d6c8aded10fd7a7155a8b3eee92c77f595abbd3a9942ca481b1e29138358b38018232f8ba8943e1c7ca806b70fd1af51de2ea466a922534a88d2085206a15f8d77be6b975f008f7c11294bf27bdfef3a9f6cd9d3af0d1b4163e4c8ac34384d583f322368b2868768ad1a943a4348203d1a94e16f74d416dc4543bd25a48fa67930b0af4f368dadcf87ca226c74094d4eb26c25b1c8488f94a26758829014054926a21420b94442217fb2fcac360888cbe126c514595eca230d1699211e91461a94b26e59d0265b97f89b692db427564e64198bb8d68212c518861cb6161df8e6b5fb71f1156db936f161390edd204a0ee9504645bf9a4aa14454c6e569146c2849938c4a0e469eb37be6e030e73cce62bc635c25c7c1301d9a2f510871caa29739b356c97184d8b66db445837204f46db1bbbb2c6836ca1a4aec72b2ecdd4d29cbb35501bee2a234c3fd9bb98243eeabdba622b7ce17876ec044e332540fcd1df8c2add22baa2dc04dd24445b5e281c92aabc74ee5198beab1cb51d99b1b20bb8cfbe00871597d217e1fc465f583b8f6193af7c1893123852b0b08ec324e04bb0c8d888c1b0023b997f1be2c2082b8762242fc7e5e1610313ee344627c0646d2a48f84356f80fbe0c478632233ae8391b026468288ce0d80912031c00d8057f3455e6700112789ce93e8e08333ae86eb8d2288cf20de377c0ad71837e2ccb8112788eb8323c4f5c1a1977bb51b67353caf4fc65617e2fae0d4eb9367d473b727cbb500ef55012ec6834f7596d79fae52f9c0178e88580a70993d39852f1c4121f2803aa22dc8035f4887fe7b19b431c1e41439a44fdad65a6badd5765b1c454316880607cd9cb5dacb9a48d0bc05b1efc7eca36fbf63312b9b9895e11ff2c9cf4fce7a0b6a509e8915c2afa899f8eab770debe6f91a059d226f56fbd8ddd9cb79f77c7e21e9aeb7b68aed7ab944a49d233369cd02cfa15876ea0247f45211d92b48b2cbf6abfa27e79457d8e75a3a341f9af8b2c853aa27eb17ef44e7d3fb27eb49e3d7beb5c00ca377214dac2936ca3cc1764debede692997095165f7a3758bed6fe67c4512e34b643b28c10f4e137bacdb51db47ebf676d67ab9335faf75406844b4cbc048a21a4cb0851f1c24d865bc751977890a03150ce1c8781232b75a8f719790451818c291819bb48edd25240db6f8c169e272edb28470000da23cf183a3cd2ea7f50a44c489f3c55222fa64ce6c41d90f46448ba8941f25401813cc094605269425d17c290115957ea2489979e21863aab51e504724f38c427bdfafa823f2806c946003211c2025a51f2939cae84983151b62813865ca942946beda43bb2cfa4566b823fa8abe2e3c27fa45d22198e900985cf10ecdc2cada812fa443ff0624b3e001d92fdb0dd3a1feaee8c0177e45a59f7e85a32eb2bc7c4949bf4eb7f9bae8170d4b49b27c67310e3bd9d8e0d3d613488fd35fb7a330ca0130b9f1ce89c5963ed2b99e91717a7a5afbd53a95815724279755731215fd6ae11d3b1e65d82aca07e5c96a4888068c4471beb4762513fdd26f2536e82141b982952c816c22b606e24b7f052f8174827586061b7f736c14bedf1b5f689cf149a63c64fa3bf418431f6fcc1bd047a3d09115db07bef0f99fb57e1f8d51ca564335821433083b7c11c3b4e6a4904ff412e44f8de8126b621e1f23d6bc3c5e46acc9e1f133620d001e0fc617cce3616262cda866ab116bb8c7db8835dde36fc41ad2cb7b7c4dacf91e6f136b4a8fc7116b4c8fef21e65883aa493d3e47ac513d5e477ca93cbe47ac593dde47ac59797c00620dcbe37f4421b1a6f5f821b1a6e5f140c49a178f1f407cc178bc10b1e68f2f40acb98fd78935f8f106882f1c1e8f8058e3f27822624d8cc72720d6c878cd783c03620df8f806c41a1d1e5f84913963e3ae5965b4011231eb02127e8d937dc894363c52a6ffd1c0e1e7c2610d9a33b1795cef7ef875e1c248c8ae71630c3ec85109509200204b106420039927d6d86a6315faac9613456583cc757992ef0036be035e822584c4d9e1126707ac84c3b171251427c90ec740c5a9f1ec4a1cd911a1383630062ce0e1ecf0c6e970891a57c61d5c975d0e8d5bcacd8e6ab7cd75394376b88b060e7db2ccb1ef7063dcc12563636eebb0459e5730753ea290103a0ae519c4c55c899a3137661800dcf98218d3cfe14e17c498fecb9d506821f767fc90655821f7635421f75db4c87d1c9ee43e8e42ee5f28e4fe9f90fb309890fb2f5ab0c8fdd612729f8584dc5f19cafdd511725f8508b9af1a42eea78490fba81b63ccc907251ee4dec1c4c114f306b9cfd920f7ed9c41ee6f4d724b1163c22983dc57753e7ec8f336f49941fdea779d902894279e410df68d0dce1ff20cda8ee16d14696bd8488c59c397ddc6891d109f1c8155ee5965fa22e6ccc489f476399326c1c0719a6016f03ebb03f8640c07ab1866e6b0b2032b89808630ece0471b0a1a8193299ac67a639bc14f433184841174413524688089ac0b2cb081841f26f279ca6e39713f21a334fb620ca51a86611886a1c16aabd5f76559760dcfcf0cbf0952d27e6c7052f9c6304c7edd45f8668665ddd8934c7bfa204f8d3e46edb16515cf37e73967647c919f8ff966c944d67d70f41a676876ab5dedded7786235ceb6010e1066f6f4400f20437a5441a3848927e2108e1e40461a9327d2e5e2894f262962119530e361444234429643362f1729e3f543fc90651482b42942b300e992650803c346963f267d744b1a61441f69ce937ed344748628b200cd84c32ee1b0a7b64518ac8d2e87c725595eaeeae04d7dc6455dc65d3dc65db9cb3d1d872b8feff77bb5ffb21cc68b1be38babd4d251d3f32d2d160b964a70f0cd7f8da5928622be7c5f8df2e7fa3ea70a0e9b494381829356934407cdac626edadc808c1e6b8c4f9e640ddb403508bac87ed325dac71b9194507180303d1a6c200d76031932d28e0c011241ad8eb4a6408664999661d60f2c8999a5cb0af5558e3a01256de8abcca8f308bfba00e9177a89ea579c733aa1a5b49496f206678efc91294639316459b692a3a6496c66339ae4eb32116c30ec21774b14822aacc95d638b353ac01021f78d0a0a8931fd7e61b58f5d48ac9999778a2ffa1c66afd90e66f9a097d8a55a9753aba536c3e0a51cc5288681445d072c6d8eeec8d31cd2dc9385e6ec54de24da07fdf9c9130233cb63594accf23173f699b39a252793e82cdf5d109294c1e80ef60c3b3d123287a4dca79d0f0cf388397b468a35f27d92b4c964cc26093b3e626689678ce998e11d7a897960dae09c6f9851209238333ebecc394ba4d0483ec2c8277dbafb0cb67ba6691b866d383cfb9661c75a0b867b1a6f13070d6333c3322dcb321c70f8e838c89f693b6e6277499bd1280b35cd86364443da8c702869743ceceb6374d14cfb9c98fb69fb965b8aad6fc53531778d5e8eae859366f7a61672b8a74799f4383a8291490fffc82ef147f4dc33efdbb1952c73499bec5896d9dbf1d09ee19dec38d0903267419d86b4c9be69f23134799718b8e3a17d47e2506ada3c37b10b0e6de4ed231c96b6ec62d9cb6aae347b38601a5266b33f0eebc5a41fbba44cf6edcedf4c18d7f417177bc9ce8cf56e7d78b2f0cd7ce96bab1515ac6a14aea34afa348f9ba4cfd14955e3bc8f2e0dd267e46aa53dbbb73decc16c646cf492b67d87c35edee8e8a15c927b74ed1fa6216d368fc674c292481886654d661d0e7bbabb69d8ca139527c5b3e3f00fed1687725ed95d1bd3903259fd4254f712d2e7a4ad7460a3cc673d2219249dcc29e40f03e40f86846f0e91e09c21e12176e5a9ca82cff45006bdfa15537dd2c355aea5d7cb9fa08eb34f4d27542a15cb0a8b7cea2af2ab954bb3ecc1b20aa62165524388f42bf5791aa9d4552915111934674a285c7fc22629314d83b384e5cfe7e120334b8ce367f439eaa018332f697033919039944144b4cb55e9047a9a7e21c9f21313d959b360ffc59a97669b06070883f56c128d31f57582156bd3a5c10904f7b84bac91508480a21c2982a70b1db35bf175ba0644cab429a552297d078831fdbe1c1dc9b2c78d7422a4c33be8156100116983e3003aa6128cc43b45560f88605f7593904ac4244a1860daa224ef5744bfbe33b04152208a11600f6c46a17d6a46801faab484f4c1661dfa29a2bb5ddddddddd587777f78ef6eca6bbbbbbbbbbbbbbb5cbabb5d69d757763ddad69984f4a6a21b01787ec924991e6c53db2a8e26b4be5f893a703e9744dd7359a3ac49a9a18236d68ecd480d0e0a836be2c4f440a9722e5303ec13bfded2e4d7e64b7d65e3599c92c69832e970deab5f606fba48839e7148a55fc871ccf437c451b171a996803ee903f18293357ae95f8eabc6863c314e95da4cd901eb12687d34d2e25f00c9d3d522706970d3bb740c466338494996d80c18635dcb47e50c30f2c1fd2e0034b0f68e86105071738563667b051a931438d8a8732f090a229a241cd9061e6f41ac3cb74430c374a36c260e3ab01861a1e8d2fd020ede0851d3a57141727d30519ab031774d862b6103382d902a602400b00d072c8420ed90b165e725f078c3172079867ccc87d22628d0c19b98f805813e343c41a1797dcd77904e5a86a19d6061d36e8ac41478a8e1a74d2a083061d2e74cea063069d32e814e99041670c3a62d009830e1874bea0e3059d283a5dd0e182ce1674b6d0d1824e1674b0a0034527013a44e8204067086e34534430c5400d5350f1d1f040a4012438a1f9cfcf4f056cdeefd78f87a13240810d85a18a56821b867af023a35403901a9458377429cb26d21086d94d8e9053241663628c89580bed0994e8934da44128875cee34f42067593691061c583acab289344891570dcacb65d9441a82f22ad3b20c88e626a4a840ab3146d9441a7e7acbb209347011b50ca3b365ad47b03c623e424eb132462a7a0ad9041480f2aa4189637736c82b9a638ce972624c3ffe5ede1a63fa2c3abe38640328668e43365041de7a3281fe64bae508a37bce9e2c8752494667e46ace4c282e107c5c35d65af6e2a78ad9d7326c428974e84567733636a1cc19c944bfd02ba93ef8649124aaf5fb56a1dce20b5d2ebaea17fa285932c32e89fa4533bdcce2a799e8991627520b2752641aca3064da493295cfb03987fa45c3ef49bf42a92417f58b153337afe81797690e671699e6706a916994d89c45f1859e4e2aa32889444a864c2a3e797a54bfe67f243783b8c565971141b35b1aa16409946fdaf6101946849491a7458050ff90ab9732cb244de42737325d5edb3a29af86bde381c9a48faec90e8f7e33f10e760993a503607216c264798dbed6ef5b4959957cb1a8d6ef5badac69748b61f16defdf943e4f9ed465c74a37bc77c32f771d468272db0d39eca38bbd5e0d571c446a6d04f6f56173f6e8e1b7dd78637c892fd8fb863d58770ebe7eccb1a99635c57ec8ba2550ee787b8ab567541e4fefc5ee74baa563a7b57d5039f661d357d714c5ea2aab77a756b91630a2727a9b2ebb9c049cae76d335dd9e7e69dbd3607fdeef48bfe6510f97c82a2324f864563df4c933cbf376ca023f988eba5128f9704cf2e7e7f47e4f125f8ec2f4d35bf6a0e438a69f8ec56e8805e606862f8c45f4abaf10f2e07e9104c49ae88a0dcefaa8d3afeca4f9ae67b6f90a93e7bbcb6124680ec1af412e6bd95d499f8f6658b0f4d125eca29cba775347a152a5542a6553b76dab781eeade453d75556e5f9f97fa0cca9328dfb445b9a48c77951bcabc4ad19032de55cf29e10f873e332807259f80226fb74f4c91b7eddf0dbd7fb7de95397a385aad564b4b8b7d7df75e2a82927091f155df228b8c8f6f63b423eef5fda31c7278749938bcbca4522eb28ad4f5ae1c2a9954a9542ae55d55734af5d42d0a85427957e94cf0a1f04d7ba94ba39d28d954aa766b442b75b996519763dd0e8c2f33ae628afce2aaab000a1538915ffc452a954aa5b2aee574d56aa5b25aa9685d4d9d8b0d9652f76eea86de5197dd8e2894baf72c954afd58b7c3f4d4eade557485b97f763b5e3c8555bf99aa1797f9c5431fad0b0280f7f018439ad015823b7ca83f4ad46f7c5128dbad8b1d8f1bbf6914709182242970227b4fa5008a146491822dace4b46e478dcffc7467eedd6dab79cd6bbf6c6ebd5b1bb4b90a927081430337508332e6991d3be48e1d3b7620f1d9b16347efd8a144d48163731d36973652e834c3a374151cc264952a523045f67e026f935ad22f1abdc4433d45e337b7346e2fb90d44e36103358ddf34ea2b5d10995338945208f5d3512bde6ddca0f7b276ac6e8fe345837a38e3a01231e771c6735c08f039e0738057e2f5198f38b639f0b2743cc77d70665c960ecc0262c6c1eb38889134d1818980cf8191c8387824afcfc8e101e7c6f96283c367cf1b9251381c2273caa5ea3a1c1ba4313de4b28a0f5fdd984d5775c32fd71ce71e21f30fbfe99a07f2b1cb9150f0e8cc17ac88127c91280bedd8b3678f44424241d9633b892fd925930683e295504021a38c18964f886217a184023af1115ffa52c88d851e31a62f451635d82f8afd23a9b6861c1b0d12194214a403189855bfb611953d67acb4d746bfb8b2f085b5e76bd30846f008245cd6a426805c624de71ba16da46d9bd64086d02871d9c021e42a42c74d0f233d48800c71d988311e26c6e8b81102e2808bcb2abeb6d13fd4ea933218499b31d676d9e8178d1f0a05ce4e82cb10306893b7ecceb83256848c5df3e105236d6cc42bb0c370020c182f9af0e2450b135a5a5a44ad160b0b168b65092c2c2b4a5859595db15aa9a8a8a854aa542a8542a14ea793c9642a954a9f47eaba8e73fde0f2c1d5830b87cbc655e3e2c145e39a71bd5c375c365c2e57111e1cd86dd0106d1185aea89cfc2171c0156b3aff24616288223d96dce80032d2e66834e510456e747477374d8cd9818d2ed6a592e38cafa697770161da958a362b52b46969937369d57ea8d131ec9b0bd52006d3208661ff32b692d8b1954c043190629fd85b32628d0e2ed206e6c6612401068c1756bc78d182849696d650abc53a028bc5620416969522acacacaa58ad5488a0a2a21a824a95120208fe00fa00f600e2006dc01a1e409a991778c3065803a401ee00ba409909ea30c19809c24c3003b34c1ed461800dec30ae212d68b0cf4cd239bf7ecd6352cc39a59c524a29a79452ca255c6006425d30030cba2b5ac044d60533a8400afa186d308aa58cac34d2ec4d3f1c9150750183054926fdf35da1848a2c72c75c210c32361a6c9a1508f62b4a0ed8e852bff0d518200c780c03c106673c0e907e30b9a5d86827c597534a40ebc1174f697f464459846a05191bfb15bb6b9c893818fe2490c5a4c491842328796145089258914591ca254a4a295ff87d0d76ed781bd560e355afe2df37081ab28db46dd37e92303144911e4b6e7400e1113a426488ce4f1226862872a3e3fb56ab1f74715fad448604694d6c74b1d5a55fa3eea5c2e0565fc956298369cf68af5a478e758b43ada44d112d69c3d3f988b431b2613ff624620c56441fb3c9d839ec3c166337b24d2082d8e59d1141ec230c4b22d6c8e891d82710711c691cf27022f43f84fe85d07fabc5fa81c562f1818565a5879595158ed54ac546454555a352a57848a5503428d469e67432bd4ca6d28d52e9b3f17d5e0dcf23d12091ba1dfac78ec964ec980e193b1693b16330193b06808c1dcb2163c75e32764a33f619b166ce99b1cb8835dd31628dbc0bf6fa0f1902c66503ea01e6c2e123ba602419f45d7ded4a2821a35074a19933da95a0ae39a344fde64b63338ea67c5148bac076d7af8e54f08538e275e6cc3c2b3b3664ce548ca4871c8736944fe21ef8068b2fc491693c3d8e7ec943a98150656d1f5d320165498f9123404150488144fe8c34494529975ca0b8b8fa81343874a05645185081e83962a488ab42338b027da2438c15570c35b58289161f179a58a182252008ce479750c618a348d93186c705cbecc2d106adf8e4a7155f64408345c8ee221aeccf2231a66fa3697688363735723f260769a303e6156d7ac4c87d182d690384b411d1a28d8e94e95843c42667bcf9c11784dc37491a0ce997aaf8866290fbde152dc87d52bfe3fab6bff5475206b99fd920cb1d5491fb3a7de98121fa13879d85e8a5927ed170ee98c7728ce0ccb1e3318bc41afabe02e28c8c2ff3a351a9b442718c3113873c2e799ec66c723750126be8c336e549815c52821b2a90bf3caf2af7b593a3d7cbf3a65c9049995e120f6e97e735396128db8ca397cbf3b238610ad96a1cbd36cf6b720217d9568ede0d03d98e380a826cb7793915646b397a351964cb71b4e4836c3b8e5e2ccf4b5242b6a479392a64eb71f44e2db2fd387a3bf78d4414f042b6258e5611646be2e83de57947b9ed299e50a4d02777b97da69c56488ed3b299d1637777777737109a39449733bb2348efa2ef9e3c69046996e12390e4d9b327fe1aeccac57c418c1a1924098bd9e3260d5f7c1885e4c907319054c73cc57d2cbb5cad7ac81e373a1a943a6e7adce8086d5c112fe54908a6c7eff5615934c1de4599f290bd05954cb00c6af0ff8e0376655083f426182fc9a0ef489a1029bd845b68bed02399df91cc9790f44d387be9f6ab85b582027b0bba5dcbb077d09c2942f26c11ae0371f81932680e38c6290987f5b3385cbde0f0f7609401250696412e18071cd25c10c60b1c2d38677a8b169a4e64fa160e5d93894ccf82437026c9f42b1cbebbc8f42a9cc2617391698701735842c15d6d280dd22758122df982e8bf2d826a90169405c92850aec4b1a6bb9a2fef27ad450fa19f109b09f1c59dbe97d056c85777fa3e4224427c7941513095889a4831dd7a69130945880112ca9c6921c4177a2464ca844c9fd1168a31b4088a7594142365df8d383042b28a212982a0a058ceaa90b4994fcca0216933a1903257489bc944cad00b41816519a541faa04ca9c4a1120a14fdda32bd84b205cdb2bc7d3e412514d2a683a40c9536128a94a17fa2a1c8340b31c66e97e699a71452c854c8548a3e4204e94942993ed377bd844ccff51332bdd5a29bd0419d849c8558d3469050a44d5741af844c1f742d1c068c2cc078f1020b2f5a5aa0b4b45a5768b1585660b1b054816565458b95d58a0a2b159529a8a8545250a5524f5228541450a713144e26d3134ca55216a5ef73c2e7794df048242690ba8ea8e3382c386b9760b74d09db6874c5a8d624544db342cb3224647984658a0d6179f43e82468d30e72c4277e7d1bb0a1963b4cfce76721a46caf2f69b664083b44883f43bc04e33ecc22ee885e96489f6914b4c4e7b1183695a32b130849f45442d72d2e5b3df9ce1e60c87c1f9828be0e6f7751863fa32e7fa70ca58b3cdbc5d9b47f794b51badc8a20b39bba3dc5d8ed47184cc348aafc74d835db0b648e88304e20c3877624dacd9de7740ac19bd6f44ac794084407c65ef17216932907bca3775c498fe7673624c7f74775c1e31a60f66a11c31a6bb9c9bb9812f8c516a8d12638c4be61a94d54945c3d730f864183e59bbe0854f2ed148f0fa32f984cf05a2e0cb1e1b873e337f7b63472c91317ab50ff184af088675b8185d9d0667acf9ac70c207542a0be4a8619739ec0cf7742e0233a0c1337c35d90c385fe6e7a90162cc3c38670e205fe667197ef8429e310b793e74615867488f0635127c32ab82b54d7bb5c2220c89612d3b36468a314676b7c18a256ab0c209269cf8a1d90d77b0efe09d1bcca10d4aee39247188848a1cca25990e518ab3cbcb338732ad54fb9e143167b0531cf2cca12d7cf489932220260e16ce27f567beb49605218c4539d496cca1fa6559ece6103dc546cca10dca9cb4c8de27720c2513970d2be5e4283727a593e36a0deb68b471f19bcb5a8eeb3897c7853c914a2d09a38fea0d5d72bd9433b738eece4c3a27efdd66249949def5688c60c7c92c513262d6bec87d2b855e99e387845ae7fc9c1886496c5e4e19f19438d347148a744e81d24b29a5947162d89cef0c63944aac0d1487b5b39eb4660f7ba6edc6ba251234f7cc4cce2ed42423dc843e3ea39714a31cc53e3b2114939476929a9d3495e8624df6ce4b70b1267b3fe239b5a08124562419eabe94524a292fcf0ac8da2a854fbb6dee33c6cf397b3e5e9e958e06258e06eb0d7d72fdebc3917323e39c1393d1cb348234b1665e725fc9c686cc9922bc2ca3d822e60c122e7691c9f812e3e5f6798be897aeb3a3d9ddcb4d10489979ee7de7e3b5378b5cdf8ee2fb46d6fc5c92e750bee9785b49835e8e5dd01bf2e0339734d85d570be8cc2aa6509e453a5348680a508e273644c1e6ec1bf173a6a390e99170658a8ff0f27cf8fecd8c3766205826e41a927417330c1d3fc9e5fb82913b8b8c8b97110952ae88f1caa8915c340bd74a1e5c6991fbad9e699c5ed52b68ee26c490456e946b091b5d26d844b9c119651649a0f09a9359346f9fe4d06392e743cd498e5194648abdc1ccf612be9053b271b149d98a628c7d325f7ecc3c8772b81501317128f682e6cb0cc217d63cb99f1f1c53cf25d8cb913852e6ecb14f200cdf4c2e9442486fed167b4fe78e7431eb61240cc35aadd62375b75d628374af5c2b9940a47348507c22a14829d204c1d609b199fba8e3d1f2a620984b6a97c33d9b453e5fa8b6b5fd9c29d262b1dc7a279deb7088e3ec1bce27480781b4f14e7aec970ac65fe0b0735752adde6a55554e559ea97cde83e1bdf048dcbd7ba41f24ccf26e8fbd71283b726f1cfae0deefc64efa0492367d12c6e692702ec9d85b5a6e7dbd58ec222b1b5ace6a1d0fee3ba4cbbd88b6da300cb3dcb57328dbbe58eebaaeab7d77279094a9bf99bf27d55b42dad24a1aac6fe13e0bbe9933265c64f6aa8435cc4dee27e459adb8b7cab769adc5cddde36e556e71d84cacf00faf31cb7b3d57498fdd8bcc19f9d32ff4743571f87d9b4cd233ef572c9dc8547549232e93421eae99e041fa4e6749ff9ca1a9db1d0594bb9f98c81d0e79b8dc27d9d168c435d7751c77bb77f79bb6dc04c13657ab55c8b3923f3f613391bb9dc88d6bf78d87cbde1b0bd9defda6bd22dbeb5cd2bd5a12d71c867158440eb95713c51fe9dc0d5799eb1b723d62f64e225d1ea4639f9d0f92876d143ed60f1209d7ee6e3cabbce109022953df376c2672fdcdac9f20903675c9a8d225a60f375b2eb05146d656cf6dd29beb47f6b27c8c8ed16ec708c718838d2c0eeb27b7ddec3c376798869499efd390367206652b399f919c34b095fb28a5b46e613dadd7a8dc0046e9d757d8b0670afd4444282358fded8106e2e1e416b5ca0ddc5032814969022bb30ddbbb3966a797d927cf6e478603e093b3378d1bdaf88deda34979851c414c078232d5012b924259b4f0842685282b254891434caea835d67ec51e7168b58a12adc9a8e46b97a9433daa189a01000000006314002030140c078442b17040268aa26a0f14800d92cc52682a0ec31ca51842c6104344040400004000100001003365b650e71b0492875a601cf92ed9876425e72a97a04357a48951bd7df588c24e2b06c40ad9034da6319d715c3924537b1e5d9945af470f8a801067b9ea6498adf836de548ec8254d20d512102df82c4d182d58a3da3353b9dca90bf876259c0bd9acd6b1d9885c9ea13a9e3d12592e2247b5da0c8df5a1a1b0e24074f9bb0a77f3f367fa590b6a54c00a5bc3dd4ac94320b59de4ed8ae091ebfc0040fefb8dc1c3ff66c05d8d51577f02ae824e61bffbac1eee1e77ef16fd6adb68d850be8f1460cf3550f105c11bb3102a020efc0a95a7cd04f55d85167a670cd7674f19b81dd462452e760f51437961798f655b0d6a58e28a8fef5a971fdffb8de54a8b95b3271925b0943ba3bc50edbf9d56bba9137eea853878aea392ec7908ebe0d2cf0fd69a5ef4e22d99785b6b0755fc8e72381c15bf6779f065d7232cd44523f2be7160469806b2910a385ace244d2d131c5cd7d61b3550e1ef558a0b48dba7b02013c91df6a147d40b82ee4df830769afa169588a3aa8ffb3e2d217e6648635bf887ca9d420719884a117fc2936a9b7936a2ffbeed82361ca53628420fbf5d614a054537dcbf19e248cc3b1844de8165a5345df083de0640ae061914711fe6a4408ee5ad061f4d306857946dcc70a94421c0e148b9e8a3faf02bb141c3178399712a8e342c24de1d2fafc0a41a55ad2878a68af03bf50df225def21b1874e69f7caed79860cc5a7798fe0375c69954b678250b895de5f2b08419998de07e5c6173118debc96bd632b2ac0ed564285dc6229cbd6ccc72e9170d9ea0c680182b25041090c484212d2a89666e341868ea691687a2d01cf8717c362268a638edd79696788ccb1b891b68b40068648e78941323f857877074037702e838506ba471b0a3a1c220ad28fe052162bf7c93bb5ffdf91d5fedfb5edfffc5ce572f9e8e171fbeefb920b332e173264a18204b6d65368693b38755a86c65b6c719c2eb543a499cfe21dbca44c603079589bb13f7cfdd3371cff48ef99d069f3562017931a5304ae1ca6d2a030a120616365d341bc551f16690a2e42b47039bfac51945bd14ae7012c25a6403b2130132d836a7ca63a0e42b71c205eb67a9ea5310f225612094751125330118bb82f606d02e1d13943b719695d45e7799707c91b7fa076ef8bf2e090f03d9a413f2c0a8e02a9ebc012880e36a6744c98fd52ed9f6b6c873e1e44a7e7e8a4976958ba91d6d521a3b9196442b1ad92704361f2452881a3e82da6da36250a226fbc2f8beb8a575a6acfb0ddcbf2f764b637c4f369109c13dff8d5a2c6f8465172e308d85a43ae2d5bcc0f46139f8b759f3a4e5bf9813f0c8477b126443b994fe046a03fe1fc703d44700645871ae7b8faefb884c225cdc59147f263f1fc318f614142b1082bbabea5caf4d61ab2750a5c2aa2ba610b8d151411055c195023a0ad41669082e68ae11406d8a7fcf3503bef7c62fbfa0696a99700035b5f40f8036b5e438949b5aaa030aa796108622a796fd1925e0cedffa3bb55869e0699e758729fb2e82c1a7d66cd785e66d3d3050ad7d1570502d19a66291e61a18143abd77c4c1d139dcda34c45d00c0a12167da7e93d866bf02698ebfa2db28a60251c02009ce0c3daa0d759e7d828059989e92b0e47ca50b47b3e4cf03ac57b1379a8e44c0404257fef9ca67bacab75c78138ceaeab5945992bf2c59e65f0fad6c863ee07257afbe4d1e8faf1fa2426ed739f0494b6c2235b9354a9e99610e093da7f71eb2ee438ba3c393132ed352248190751304c6ae98c1de4766eaa5344fc07751cabd916313b2851a76f1cdd6e06907e0ee1d15694fc03ad94bf5682c452985062af3e09926760b74c76d1e93d14edb6c67cdcff27769e8eca07864cdbf6d6e03648da0a38cd0c171f407a8199f1ebc113130fff33e4ad46b84bec347b2f4e943db027f31d9e314ebdafd1e176d60e626560b0dd326812eb8f2c2b56e94c02c0da27d046955fbd38b074920ebe09b28eae4e3b04405458285fce5888f4f20f0f82087a016a071e5f405c021cbce1b02286ef8f06301830877e0295b6e8e2ba52819fc5d80fd7424e72807fefd0b1548655cbcacdcea1c559fc62b77cf3a07c371936b3b5d13c7b31e1ebc2150f8354ee4dcb400f3c0c77ef8bdc00a7da1bb5b6af90a4fe7718982cbf9bd182acff38ba1a0a7883814560881becd701ab6acb54872db099c07c5a2b7062cb2eda687239c6127e738619a53a7baed6537abf891429558c4ba0438439d83ead77765125b6d3f147025c17338e324456cc90e13774a0a2e0d70851be08c76c4595883c0faac461023e63fb4492bc63554c6aaa3a2ddab8bd8e398cfe590f1b33490ac0b995598816cc90404b2b7a1641b20c84e99a72eb1a8372942ef5aaacc9d4e112187bc629f57c703216c1081dd5da744edbc3abcc29d8da02d49a320b21973910cb786c1e913e663390a5c1f110d92cc218c95a9303e6b93b98c0572238c43e604cab61fb7695662da38ada6a805395585903979d92787f3045dac7bef5bef104e7cb3738f53f53a77a0c74c59cbe08dbee84ac171538eea9ef5f5fe683184cd60470b216dbcd256e1285fc3326a2b679116d06f326a66bba467682d2a9a94a4dc510872a42b6b529354c396685be600910d613bdad48c9fd751945826069ce34b25508deddbd4044522055dd9b01c9b79a417845e3a9636db8e9d708e431a0610bdff44523ca9e2c027f9d2d47ab41f6e1e773987245bb3eb61e1911708235e5525c35a7286140cae24cc7755b6ecd3aab5d2d555c8da9484c7f612bda0475c94774b4a865180c185f06c7f39289d18950c5a230f9fab5dff533b809867909ae1e3d2182aac233e8290dbf6d6825eca087eb6dd3ef64d106a3d6e65475b23cc65468b23c84d977d0e98b4d564f3a1d54717d18333235e69acec8a70e2da034b3fb54b89d77b75ac2eb9ab360e207d2f88eb72862adb8350765cf7dd3d1750a83a240483d9773eeac16cbefbd38359d3a2c82d2195eb358a56c308f5e49358907eb04708c316f52ac2f148ac12c27cf15fc130bcd1d9201e1c6ccc30ce3a59e4739372ae4b783388614ff766323b27382465561979a0ca6c5366d22db3b1ea295d662b42ab8e99edf5ff29339b89541584cd4b989f09328e261e73ec7387daf08cbbd01a15e8064e0183adaec38a445824d5eea4fa82c2a960324026d5e78bdbd1b00dbff8c6d39971cb996085046f545636ecdd2ca7b0736f1ddb70040ab20d5919dfb39274d63c504efe0b05b12bdb3bda13ac10683282b2a9f82030bf9186659f7d7bd08a1cbbef37e53f4d39eeb928f2fd6b162bbac5ed3a3b8bb309da95eee2a63406e220d007203b1e20b32cd9ded708fcd891d414cb1d691ca9804be9b971c3b467eb83f92422205404428de9ce4cbdfd4c7430a3d60c2b64b997a2aa9febadff660ec5f07a17a282c76eaa33388ef9d6b855befe0a95a01d70398404737fc77897f745af485f29da989c57192da1cf0059441238860c90ae3510ff81de98303af6dd0c7fe9b0c182336380bc9018207726055e268b18045ae631367e5a5540cbf8bc17fba6cbc03eabc193eed03742785a6e707ee6ce84fd0264d11fd8d90fe95322b482e6156c805582b02640965bdf73553466f101dc0b544f0990b1dbe85a1b85dc3fe6293595d7915a8718e82a17133eea290473cfe0a092b75e96cf16563f70bb9711fdfcc5dde48bed5923d9326825a60ba5394041ce5144ef6c5dd4f27050cb22a2816ec7d609088a2292c49f5f532ce0bb59abb072e421211a5526fd4bca437bafbc909f9b0e4a15b2d18c82c257291cafcd3eb997abbdef29a614616ada88408085edfd3272e0f6c02018cbec97f37c5f87e1e4f0e8d90ff2ad74dc0974cc1a100ee03d28d0016588e2c40c0a2839d89276e2ba18b8e2043fa64677679d0c355fe93d0a3ac7c3648613fdec8c6e212e79017c164e065053a1fd9f3509b83a901b8f73240169fef7b2e4d8ef3ab25f3ed2ec1c0ef8b68a8bd5d8508e7bb7218cd114c22591733062f4ff62701c748646abaa6e60cb039acaa26eeb9b3c58d2b790bea73ed91b5ebd8ede96b036deff146e7a53edc6867ca2df9cbb719260cef8adb401f6ee5189e3e34c0578cfb122074800dbb05c484c94bd85179bbebff2a0f092f3f1e4301bd9a20b30a6be29088e75267a7e186ccea0e81cc7261626188a9daf49372a857220cf7d756cd1b2acd87c486ff5897a4ba4919b0350111da4214dd31a58c607a3c2223decde3b274d516c02fefc530e597767878332332c4d412ff517a740c9024a475de10bf397cb365587d477e33af4bffe27ba6bfbeb6c98a3216505b8b2c9b89d75ef57897e2c72c6218b9bd8a3630abad55a3de14c3efb7e0a7f0e326eef0edcebe7da843eb4e3a712149dfe5fbe2df9af7c14abccf68aa110494dcc221c0b42e5c6ce9d2651a602ec1bde01713ccb166ba18aa1e522adde1673fa77019792cf97411ec67dd624b935c0863a668911f98e89e67eaa30e9939124e6da918289ccba2e481cf4cf32ea031095c2a9ed095b098c2361adb9c32bd3f6f810721ed0958b53d44c113a998aa075c3f7a9d331441446a19b89605169d495779c0387182798e643a2e2e5c70b42e7fae333b0cd7be9beefa148986882f1935b8ef9d5a62898235b8c07b3f2a259e392e6e418aa850671f5cc94ae7ac3d382a3d470c11e5c70893a283b1c08a2deffa27dff6d132bec7c91a470f3c3abd9c56c08b02a7dc89171901bfe2f4a9cd8905ad533744450eeb1714ec923f0bfcd4c1092a741ad2d47ad9b688c8685a922ef851204bd89448fc0a874f289a0ff3fd55dbcf0b1226f7a3887750dca044bcfe662444125bd2834401ecfef04e4b83640527282ca86524aef164a008e25cbb09c9005a1aa025332ec698fbc30fd3d8babb4cc753703df9e7c3b8ae9185424c482016548ab14dffe8f45bf5d13676f753055aba914fdcbb12399d23d2f773de8ce4ac6eb8ffbf8120ea21e6121d89a87b5a9026193554d5be5870819fea94779b724556d1acb7a702fd75b3b7a5fc3ec12eaed5f59044d0939d41c64b032a9963b2eaba6f0afc1d2303a1db4b99af46fd69c29708dae71817940fb9c3a2634a974675ed8def0b841679b5e9c62398c00caa393c5403094a2e8502dd997b70a16cacb040098c369e85a0cbc1f6f5ba1916b8d6d394c1bbe1a73ea4f82afc21bd7a9bf13b1a5137f2429c5cf00a2139f92f20cc05687f77c438e496a930bf2cf5ac4122e183fc2d6188513f1f657c2d2af2e811f2bc11f455b4bf04bcccff012ead24910ab8ee094b6c7849817eb21971ac07c55950c67a1aaa6c747ed931c77e3bc343a523293eed502124834b4ef1e7338073857d5a86c11ef7740e110c72686321eced34055eb7d6c8c92ad10077f1ba8460513cfc644d116984da1b422306d4402c6d957d980cdb3f2e00db235e94a7e3d402731b9c92588a09266d5b89b51ec9b2a69afa19e4f50d391834599bf7502b62f55737b96db3dd2238ed4c60b50dc1d3a340ede1102eeec47d58abbaddd20d11bc3fbdb4a9b600789768822d5018a6242d879a6f6e4ea4021bd7cfa67680a3d39a5b3904d3f24e2165c5ad1e92b52f94adc5ac3aa2dee87bde1ea8128851d7fd4be83524969b3fe2cde6a572f2a0961fece5436960cd6e461caf24357d421901d3ca4ab2ed413a42138c62b79200e079b782707a265f51ced076962b207e90b7efed3e2be1eeecd5065b910fe61e531ce03234e72a3281c88d240183d6128b851ba0174b8446e3e974e632ba8645e8446b62a165e5ea04bad3a559daf2833d8b33c784fa8b84466b7e2207a0c4946f8f133df4d2038563d9720b46a92a88729c909f553051bf42acc72da90e658d91874c2ea966767fffc995decf8f3517c0b16edc0e9ebbec9b46e6431f2b27ae343df506c64ba0c4bbd6e933736efe3520809f2f2e62046853b197ddfbd5f512e1452c2c3ac53d2bc5704a43beb73099cffef58b4fd47dc4a5e3aaf7487612ad9936fd166aba2296cb1ae0c00ac70a930306bc22d02d17049fd184302053d2b00913efc29030492e8294119e826870409e98cb81b84212536891480bcccd424219ec05780a078c69c0182860b58ac1ccecc608940344681e3f98528fcee94bb5dc48bc7c6022ad8b65a8454ce1d5c724b818cdb3d0420c2c174ba45bbf55629cfe2048eaeda6643aeaae0ced30adb02b0a69981fb18a4b3cbc8bf0ee796fbad9f1310ec8ba149e1484860dbcc98d3d5b86a11782ac812e8ea36ed92c7887bc6ab1b707595eeeade5987751516526908ddbf0912f7142702d82bd5bc8dd52262eb9775a0d1b86daeaf344c95e0371d097a103591c3be908816d5ce7d290639bd7971734eddf00c760fbf64330eac77f20cb385daaf621e73ea3d9f4484a8cd68d21f782876e6c4cf7f30d4d796e147ce8169ee785e215f325203078c4b3a2672d68f8cb1c09c10a1046c9fa2bb39a86b105c77b10a6f1ea79a0730180852163c277a00b7a41845d6ef95fbb55cc251735b8a3ef1adbd0bc161f1bf97211ee277c54071bf4e76e82da649c94b755d842ebe06fecd01cbc77672dbfd4fb22741918c5a8d70d093a9dda47839ac05e5c5997037f0ae05b0831f52d9deecb72c9a1ba72cb394a185cf2aea7b70204e162b263a61e79e78336ab0116de3b8ef9ed520db89e5de34c540379e206091b0d1683f718417522bbd4db26ae23bd0a67b6b5fc0c8fd8d29861f510a6589fe3f400306dc47fc21f4e990b89ed90d34811b283090ee84822661c1a86e5fa492652cf401f0796e6ba220153450b4341684b2172b3a327310f7305e26fa9abecf8506f38f9d3c166e2763f3e490adef224261ed9f0809a0371676efef3b1e1a52d81572b10ce0fdc7414558d14f662f8ea5f1efb3ed422a6ce63985b4b629a5a126a3a7b2bb49b451c3990d9127c3a2cd131666fb1216a43985a8d2bf0f47122598b312f58e1c9d229868aa1b8102e415f990e3a51e2a362743eca333cd58f9a5d6547ae84833d7a15b80056311b07e2fd0456598010d980a6808d3ae3981cdb78507c7de076e2c0466cb99c3cf265256ae92399a8c70bcd56e583171e9c66f396bc1e5a20a82881d37d1107210b67475984f2dd82902656bdb1bcb4e1094179354ed32d02876a60ae7396df4311be2fcea28f8db035c4c96cfdbd7c134a0ce6f5f906805f7197eaee80e20291a31cffb442aa7f214661397a08b1a8e8ccd1e290de22681c1d1358b90d4520a4ff21c3d3936d5493f07f0f173873b4c6fbd3d5617fdffbe215cfde4938cf29f9c14a724990780ae9d9e05e440f7c14d0a047b5f7e7543fe1d9c77cf8aeeea57e80cc26570e4c3efe7d47758354dee958a1686c46b8da7bf78d00d12a928bd9029c80547e82fea4c5090b557a28459834de884c90e8444f312f682d545bf1d4b2a6d28a36a83d83d0788de4990436aaceb6f1503e85b5665a1bf88ac8c44972c13308251fcd319d5d2d3c055d6ba95f24097e8ee4010e3f1734851ca981ce674c7cee01d6df5c5c162168803a8e9b42c5306ab2e231c56f820d269db99f68832b93e0090a816ae41a743697205b09c0f168079615652b23eb6192e481c924153b9adf3b3436531db26566908131eff7561d7beaf115666b03375b0ccf2d584c26423320b886359abe27f6a20561d1fd38183c01d4625512869ca9da4a08d9a326bfea20304fe0e0063c9925313ac4acf5ba2077d5974a0463a883848accb9870f2d3045e07415966e840896b0de49535811aa103a57a5e0c0e3a10f32f8909d08170afb4a8613b142fb7c848dcca7f0ed4791c297af61704f739b01f3e18ef3d0766748950f1a4cd0358cb9b1a66af00a83bf3078d6d2768dd472e9d1b5bc68473208b7973a0758ead8265736019c19e75204f601a8880a12f46cd81b8948d62ab6fcb8b093902efc075b2987b83f17c37e2dc88927c87c9496735edcca6abd30fad607f295f7b7246f210a28df3ff49567e6a4c7a882acf76d91af214c250f4ed9828702cc23b2ca3919f7cbf9b256cd51a67c507375741830ce2315e471de30c8f0cad0bea8cd81dc3a135ba2be6eef873c2f1d7beb40e5f9cec53e945f411e76b5ff676e96be0c311e14aa6f0eb8a2f9aa80759f710b070c8dfc3e38b0f0973b2e44332afda1ede52ec1ed2c2057d18e0844c0afd47feb24c051ae10e41c1679476dba202195978fc6ec1404c2ec9efab2472884aca6c17ca17eafe3fdd5694963879e610337ae4f7225f747b3d8e506f1d2796cf0c8288fc0d611dfc27b12224afea61166c2b00847850dad24b02e82924c406a614001a0fbe6e4053e94df23a7eb16a59c482e1755a570b92d1479b2441dea16524241a0138e763391ca2b9d334f8b4eada742629ab01d0252e4c7c4bd21eada800d0864abb31cad0eaa75c459f7d91c2ea27ad7ef296c81393cc6ad1bdaf666328c97ec47481d388242e61f212b83edd7724a78ca4fc4d37d7c58a39fd7a463b4fd9d4b4dd086bdc2b92b5c139ba9f193641b528e220156b7712637f2f38700f8ed16780e07a48c53256cc0ae0c512ddefaca9207b7a6ad9619898bfdca8702fe9a4d8ee35a9e246a8435c239f65695e68150ed70ca83b2e7828f19c93ff609a0d6344d3e75b385f15633b4c97c969fe5e953ba3d75681459855992a8e3c46145920762dbc298dfc17428cd9bc67a3385040116af3a874a249cbc4c1bf8ca12f88778b49c4d947015ff83f6044fce5b6ae1c93b4ae5f729bce41fe61cfbfb359a77fb0af2c25a6ac2c8e56c37e720c8b68b1321ce16479a200794dc68e8c9594e10ae0dcf3004f8be294090f232c17ae6066ec17d1e4aa983517941763c546d7073fc2efed67bb194196bdb4b35b4ba3d879954c54ca65ff9d8603604392ee491b1146cbc20e58541d7bea9ec24d46f34cba10bf3aaf5922fcf2a2d23d05578411e62a3c192c111298f218286fbc824ba04d0425b5cdf557b816c1938e481470b13ca04706561f742c8bfb91dbdf83b0c7d625f0d08d386eb07897c596ac918e1ba50a91676e4f950c4b92713be5fec93cd7b41d0fd339e24e1c035ac3aedf862ca9780fa44b0b43a0b205b25cb7c6dce685e85c82a936d07c135c38ed631713a4ea2b168d49789c08577018ff4ad6e7a733b5a31dbcc5e7dc704dbee3dbfd456320ddfd094cbd4350f146007211262e5235f18c0412edfff101e1d2516e751e0d0536a661d670a7391d0c3d561cf252d3a21427539c38f9369aceb2e51c0d09f155b8ae265a2f6988947252ccca2b707fe4a4d71e9110abb0bbdfb074ae4ab549aba8b4f0e8b6dd515bb1926cd7854d2c59ed397ac5b15d5ae906067fdd2bf98904895d5c6cc9ed6a5e09f728e3c15f115869eb560d88e4da1b4c7ce24c8ae03e379998564aaa57f8af338ab85e10459c948063b50eef27cdb9718d90dab2b2ecb00f3ffdc59bfbe7c667f6e775011dc4fa7b7319c5ad84f86074d723ffa4949eb5f8a891b5c3ef4f9d125fb2b4332bba5ede444ba8ff33d742f5fffd4fb6f6d76639c3f961f19cbc0ac4ab84566995e02171e0630c37ab688710726ed114a15901372ac92afd0d0f21245816bb77ca9644cc07f3202edae73e00b16ead9ee97ab911615b7b6a15aa3c8fb56c2842058fccdbb0ddaa03c3b5692ba3bc1f61ab72e59317ceb16adb1f8b38be9aa257626d3c30fe1f6db6cad193ae437e35389c1c552793c8084bebf517640dadfc6e8f0eddcfbe9c4c20364422a118a2b33ff5e454dbac022f8609de102f5e453624ff83935494b7e3abcc20b4c3ee669e28cc51eb784e11e32fcadf9a46fa29333fe4d66d2f6e291dbde645371ec96aec26d066943ec07481dca10a8fe6352d9d1555c44f6616cc93a0f6e93bbe398756231acfcc49fd5e3834540a8e187e0e8c91907254017b01821e4345097eef5aa1befb26a0d7968cbe1e74779c53239788be00fc335e7f9f528f4a2ce50142e191259266b0b64ca26422b4d9294cb7d162528b9af89fdcee1ff101224fca2ff25e3687f5800292c9e77de2e2fbc3097b45b0e3e4f0edfd11b14d9668245e1cdec3069d2fb1ff6843477191838c6348a00042170c45da6b5ad403eea6f8cd50bca83dfc81ec872928a7ad1ec1250b0c60d82ea4d7a59e1eda0e9b160109aa8daa34bbf43fb5a1f025118b4c4af83e9b22425b942672131e7ad5ef90e5b2fb6683335bce2013854534ce10108b88f3429054a40d2616e2a23c0a55440658d4d043f9cd38e744c9779368e608c711adbcd49aae11de5329ea318562e8bb27edb0b066d4f2d5a268670677bc22991810c675e50e25e01db11e00980abde1df20d8512c8763400a00c87fe347973caa1d775107fd65bed451a69bfb6c331364ae7679ea537791acafce0b211ba884e07036812bcc460d9595bef9862756e007116df9edfdf42024aa1346a966135c8f7fedbfd170a9906f8d476e0f7027d69d366ebe362eeb022a1e3bb234805cffe92409a4304d4e31f5e3d4def2c5b807e31d6173a680bf936ceb2fa035f50ac03f3b6b104af32a767d28d2df75e24a1e779427ad52bd242cfa3786ac40c1eb9007b5bb566bbd1c355e25aeca7a8831c11f06f5e5471f0919a5446f561e2c940df688f178261aa07509d9863bbd40da4d9b48e66e941e37170d51b18c3c40db97ba50d92fe681aee8f4f70e21c2dbeeb97beb4197bd4e0188a753d98d50c37d6d1f18799354b40e22219b71b7a958ebadd0cd46ed4163c3e8f9cecc66a09f0b3b0718b6a4ec8b3bb662c5719790ee993537262dffda40a2eefd08761bfee20429a3f5b259c557de2359d870d8c1a29b494b99dad1ec7cf7f04db15803c1cf08525533a7d27c6d00066001dc37d58bd3f1bf9b3ebd312fc3b8a78cbf3b26d0cf8ddc3b69ac5784541cef07c066a10cc73e62a1512c1a58a8920847cf2a873a5830fc3409b5f4dc69fcf48f503778804cc7185bafed9024a288bd21f0572c5ecc426868709698e89d5ff4f03a3a875ebff411abe73ca5707c8eb35e654dc75ff2d405aab2df44a58f400a4ddb53a8846cc1025a56c5a09fb9e473ec60b37ecc354654512f4844ac8b109d13ddfbedf087e8f5c6ad9322434d4c387ef31687533d0cde638e42749947703a2156fc08924d4b4fee00c91e9850c2e2f12613f8d38bc14fc462e19e137b49a5995cfe16a2e4a5b9326032945cdb97159ba653a38580de8717ac5621659cf5cf0283409c4b2966212769384951b85d96ad540a9320561c3df240e88ad133cbf903bdae6e2d0e9d0d6fd39b1239f029c7de1e14786a033519171fe0230854fecda4530495a9f870587f3f45cffe30e1c0157d731c8880afddd93c0e50873b2410dbe01e28adced53e95d8eea1f6acfcd3a2dd07990451f12a6ea44e051820775a8328571b0a502625ca6ee5de01858457a000a49c9075a2d4262be45c3ca232ad4579abe0c1ab092d7edb138dac02e54051a2cb6e911a967161e141800139a1fa483d74f5eafded417c176b55198c89f4b81f7ab373c0bf370eb6da4d7d2cb88627a6fc01410b9f01b4acc77edcb1b2308fea769a0afca1edfc0e5c551b45eb8e742b99b03be859926181761ec9365e204c52dac4cd2ea42e1ea9cdf4b2e3c79cd1566ce637863481d0943705c45e361ebe7b8c8cddd997b89a1b57e08a96944e5253c61d68490f8509a979ac4dafd088ceeb1192129c1d2de70bd57b23b67e11faf920b7c6713d73ef91819e26a0fb37f50b4f480e6f4c193df08be8337595327987beddce43fa0614fa250a926732d0dd8f4d01492e50f84d5bae76e63536f00a410d531a039add91bbb2d4c981c18461d76535b94b4f1552dbb5ce1302e66bbd5e2ebbc536fcea5044c72cc2a4108e65beff47fffcc16b74ef83d744b3035dbd5ec852d19d13e3dbed0abcdf285331e681798250d2500f16f80e09d10b413374b8743ce4cddf102abd8483f8380efe32fadec09e522dbdb37a8b43c34ec94c040a939f33b14eb725f70b61dbc386a888dfc796774ac42e2a97cad21f1b24a804f6c638683b3f85f113af8eeafcbcd3fac15f551c872715b152409dcb3f5fab543a556dcddcb38d22e458a4e48ebc1b281ea7d0c6b7f713930305bcdb2b03dedc15c4dae26753c00897c2c89b9e2cfb9e8f35c6d54fb2591ab80e9949902e97ff6b1c66b1e84a48881c7d7084334baf6c12bbc3b3da76bfbcc3caaa5f25dc0c9ebcb92208874ae8b872c223e989b84d230e755b6c9c095acd157693fc9925f6c9490b4cbb0301385c525329be29a8dd9b3b9d52049813c546c7b20c60a762c4053014bda1b40a81892d2a40b7f85dc0b79ca0a6d546c7e81bce7356ba2c2adfdaa8d9f78561615515c3a017da42e29715d654565936b3397b42006a656d902e7bded1b94f8b9ecb31f284af407d700fcb75fd75f54736444f5994bd97237dd5e450302d72667f542d7a2c2ecdf86d295cbb1bb7dc26faee081c6250610f49a10b2564a4a7a9fd667a9467f168065d4770d7d7e9844b8874a6aabcc01e1a8636b97548760c8b91fae9730cabc13aaca28eeba0afa46531ca57ff43460e4ddc17228dab32e9bda4cce9e4c5b4d43a093640bfd252284f6888c07254040e44789e390306961e6a2cbc42c9606055340bf552bf474a054d7064f49f3d00cbaa05a0c037a01174a1ef9b4c593b8c9e83da04fff61b49a527f97596b0e428009bd07fb124566de02dc69cd572c42ffb7d395cf94b2c5fcdb3f4b7092277aeacbf964f215d37e1409b193ed042693ddb4733e2db3e772646e8ddb0a3920372a807c85efa367c3f93af109e76afb99b0ee007dd62b31b3ea80530d355759e6ffa09a550055bacc70a04e041adf1311c614130304d085652550ade8bf3d30da0e01f63abc00f23ef3719af20ca3f4c814aabd0a1418956e56ed4b34a691e3adecf50ff542f1b1a66908a738b5176f6587ab9222507cfdcd61d2eebdd4abe3ca4a32ddfb276881b1a2dfba3a482cb4599bc6c1dfd60f9190daacf95227863dcff0f6ffdd4b2ec0f3d5ee63b675259f9780b4716f46660a541ae2327533e0819f97efa33646e7662bde61ee04fa2d3aace1d717cd1240e9dab0594771d29109c51ea8ac740db769e3f834f78a9ea94505d8b8e1aead27b6567faeca295a103243907d2f283ce0bce0c991e7d822cab5fa39451d1c49069f3e5f36db652a132203879eaecaa63db246175bd1de39f5d77571dfe560ad9417a646ec2a9a05da4e3c396e9e91d0cd4bd89e82f250d4545240d9c26693835f20843a1e43515696c8cbe1579bf135a0d06d07d768d44a7e4a5f148df3ec90c64732cf281bb142588c8dc3db7ce9d829dbc6bc1bf4525c7669bf62ae2e10ff0bab6f125ecc5c23206c9310a8911918d8804c79e71240e1684281764dc31e7ff4e6cc13b79cb8b50b6899426f7d7213b412ada5ef410646f1aef393f154427ecb3ce4239e97f6454f2db69a506069e0ddd63c93ba97b98126c27701affb1587f2b38096957322776e9a12cb5380db3bbed199529f07bfbdbb9548e3005ae9b9b3a95932e308751f2ee5f412faab8dcc806d1c0c64c5a858fc8ef94ffdae8303d22312083e9970342031700cb44dd2358b87b782b6017df65c0dc1739f4d816f913c55d772103140b5eb5923879fecd293e23fa38fe6c3a502619516d2a6925971a39c98d12706b7094bb778216911131fde41efb82155097cc193e366b76b5455144729c6b334e9db5cec01a60a71d4fadaf0d53c20f8be25e0d35a4756672525f9044792ca69863622bebcb3b38451f22a11c415fc90f218868d2a511e96ac2edbd4a5c0e693e636255a163cc0864c7bfa0addda6b97cf0622d39f1f84010c68c8dc3c7da24249fc78779624c94f1da11b111341f8d0f6a8d9b2559c8a99cf191336dc39a2452e3cbf50aef92511551febfa530b21c402d4d8f8aac7e51e61ad0b30dd45eba16ae32c4cc81c2cd7bae23ea7594f36ce4d3c8edfa12eee4907f227df17456bd490874af05242f704f0905cb79ccb48729f27b0d7a8fd57217fab398222e90a785611a93f9022f5200d420d0a94a4f76763751e49e56b540d16f3cb33884ebc489087c9112567928e19bf939c5732d12eb40941519c6084a5890c6ceea4dcf46a7b70484189504f62814667caa355e422b83e948fd1355d9c48f8a46242721720234277a21023bc24f021a90aba9147407ca7b806ac0dd25f1c54b02adb65a3e02744d247681a0f866cbd3f4d01755424511ada248d5b1c6e9e291aa8396a63bf717bd5dea44312e057fbc92e3f5c7107fce7880d8fe694e67f1231217d31b7d67a63d8e8f9c157fa024f2e3550423f1e833e15a9f984d125602f92f7274448f851db74a0315ab618b04aa8a7c446bb6eeef84d0b155cfdc7ceb1bef1d008ad18f01d9af128fe07f1916758d4acf452e4c79b5601189ec9023537a0c07c0554927186f66e5c3e0d86933e57fc6cee0a88d7a54e6b3ba78efd09e158ef6ebc4d10a6f87300808dfd8a96cbafecb905d11d19deda7b2c971a26acd7c7ddab25e43c7cc6ba0be8850a7fc06087fac2e6064a6db45f4403401f9bd9e78e4818ebadd57f684de445627d8aea382ee276edffa84f1ebb19c80458426f4d34494267851a926c551bf4d8531e5cbb9736ecddb1256b9617de71e2dbc4b319eb852e598f81ef7a73b99593344ed1b772561beb088d105042b2b8f094e1ea442b02731a4cd079b5c5a12baa0a531d49505ddec5081344810c17ee5b1ed5242e86c1022254a3850f5596cc021219585804dea54446d794ccb045512f880d2a82e65e8f9685563a19847b7625f1bf1934ae50b8b04f380c4e838db17b01c402f947e14e572124015037f8ed9000278e9cfcc52db0740042775aac3d0bc9c582886ee080ddd5d0b49bf44b6030c9e629c4cea410d0ea695db03472e32502708cbe5ae4120951142d42ad4044e5ac3534c4075e44a90f9c50d4977284619f02461d7a9a11d5fda8c890bc7c178f545bab9e8916390621a9f06d9d238d61c84dba060e3d211ed6570bf0848abb1fd3284cd928fc496d3475221e6a06ac4e45aa16c04d3d844fb716b11377c58afc08884e4c07b40239f3fe9f933adf9cdc80ae0c98fc3c4a7a092afcae990b9e2224064890928f6db793d80c70df19b0094c09e03d53661bedf58d612a017fa3b50104c408c8bf220942ebbe35f26182958a1ab20821031db7be18e3e279fa1c353f703005eaa3f5edc2032076c3df0cf1537705d635a932083690b87110c5b7176782d7333832f34cf68bd5dbb24f389089f0d8450a93265211ada0b9adc814d1fbbce01004746255dea55d0ce3cfcd8c16bc3883464a9aab2442a9f672062aab201a8472376f6b21ee5c18e77343af09a768066bfc00f4b8cb704f07828651a98098c001f4cf049187d64df732d190deef5541dca75812d99c043c28fabf6b337757bef040afb9268b1762ee73906c82754a36a39a75b76876d487af5cb67e117f000fa1a5b3c558516c19f3cd455b697a706c62e548bf4273a6bcd0969ab0a431b185bc5fa7dc084bc5fe3bedeae449a29429401fd4de73573d804e1237d0dfa4863ac7831d542cb500ef8b7115b49889875ae890568008daa4ad543339ef418151c1355b5527e831ee931b1ed90dae43eb542b73692463e74f11c10c27998886733578182d5a753d3353d534860346e9200c21e717d85222f533f94f49460533afe4274772f90c5c6bc801aca6efc6f7b89fba35b55a47593376f9e8ea3a079cb3ca887b47d11952a03fb9dc48cd53a93886dafce0933b6683bb53818a0f7c30487949bda753160ae8c2b0ce0c5f4ea2dca00ce97442f33754e91d1ce64fc34e7d3bb03c9cf57809db3aec7be2fb37caa4b79ec788a13d4d29cf0618aab8d0fdaa43ac07b511af75e238894e29427b8b7079ad4a2035b6073c27f2a436099cd7fc2a0ea107e918a64d96096ce783631f856c08aa4f80b7637be636ca2dd9b4873be8fef78b236877346ad70b3ee5445ebe9d8762a6c37540f8b4874266116d55c03caa953e103bde00570c1e0355dbf97e995e895f309d1efaf797c3b65ddfc535d46b98655a3c52bb56f9ca392d9d2e29018c0619b26d3fc3fa5b0e853710ef3bf197e19ab202d426903daac416e0d1a68c4c128ae7180e0509c48277797c5c42038cad60402851d1228bea78782c637af7abb18532d9bc6eeb974d9cb673a2a28968f7d6463063f5d8ff3d4b3723857cf61889554cd140053bcbe6758ad7ba5b2726a5f5b828148bf542792ee51466116f9cbb825795075eb3918bf3cea95f5fa26270cb453ccc6247d726dc53b05d131bcaf0cd96b550715eda5db8ee1a83553b84ff94edfb07c602283698c116dccf6851408f5a0e60b108bc84722002875ff1e7040242834adebbfbe33dd67c495af516c690a5420b22391fa0062ea1148bee1fc14ebe74a99e15588743bfbbad349d46ac2ef0a3d9b091ed324f97ec2a5b07cbd793d1dd1b1cbfd99c5ec5ea190815b4af3a99900162cdff33d407d5529d4b163e7026d541f8748a0776856789a3270dd3e142d73beac0edff106acb9bb1d4d946d6fcf68f203472647a45751841fed0a50bf6e8dff43c1df5e2becbb0b23337819b4a12c689f3b5ece9e6b51733324c7cd3f824a66a5a3b49165e6e627ccab358166341b88119b67079de53ff22cde7605019151f3cec06c342372552ed2aa97f8d8843603c201b6ec0e6ffcfb2cbf8d4841f4917d81c39dd6a45932f2d3a3ccbec33f357fab927a708ef90a93477c568631ea59d542d90ba9161c6fb8616b41bd59c358d0d6296b742c061a3e332c337069447801c4cc08249074521e299fc781b62b807aba5f2ab46188091c94fd0c87d457818b388b36fadbab9ef89b5675a0eb6063b2d5bff44b722978b45f7d93492619e38ae0ea8be07b2b1ff3039ae5d43fbb3931135e179524ad5ab638b50bdd783dfd9d9bcdd797c5c6b88a76e2411c15aefc651501096c13827d338f069eba39919b47bfc87ea3cd4a325e18fda8f8a720ef7dbfa3d6fb90741480f7a029337e55f167d4eb8ecab97356522899d52987720484f7e89a373755b5ddcaaf0423821101c42f8a94e1bd2f414c7ed9fc4ed4ad4264d40529089fca6d8a1bce83aa7eefdfb5f04d5d39adc7cd0b8919da29c980ff179cb082952990bf35fc83e31a99de12b0eb83107c4f4ad11e8f9ec3c42a702c4d4d78d2353d808fdadd3d2336dd0443ad0239cebd418d12540b2fd6842eaf555e580b66524ec93f363103463c15227037934bee66d538e83fd05ff597d65d15a57870fac81d4addcec433b21f9b6d109dd0ab9f7237a307608fe062a00a591adbc092b8315fe414606574fbbe4b88ff372e9b42fafc4c0fa3784abba1d49caef5f1e425f2a2764e7bf008256d769ed0f12b02cacbb494f7bf9ce322e10d6d85dc0b681a0b4a71230a5968472ccdc8b5b97d5e5c63a6e6109b723cbc9de56314d2c9e7ae24a98414b1fbd0aeb6dedb6bd123d7c087f5de1e19b3ca45b6fdead5eecb650b0a1156804febf5de16bff0d32a4c2e5e724df03e67d61a8d23999365031a530dc830e1446e448723ac3cd0d66d0500ca3778971560cbbf2f06eebbca5fedd349f40e2d6e628448190d0bbdc2436a5641c3be08167dc80d67389c38e6c600cd630fbf8a6f69d4e465c388755419ad8c32b4eb643559f26dea9c16097d54c8b174d061752bd48f78991454c0f4c1406088f754301df559031eafd6577d36c4063bcadd5dc49161f16990f4e61913a93bb6adc220385150611b63701ddf61e425d6771e973d0e452bc6d3d9ddf93f5cac126f8742ad1fa8a2af5e53b14971dc9231d160f6914bfba1b5c3bc604b4cc4b344ac67e114919e60fdbcb7150387ef6deccae807be8177b7fa9c7ffa7782fa057bb942859445bfe423078da7b748824954df04d1afdf69e7ee98e445a9b55124ac357d7b2224805e0d9ca746c60afa4ec52ac8e5a14839da422331733b5cdb8143957a95947f8ba20cffcb5e1f7f4634015533c2f8dcdfb27a2f06820d6f4a822712508023220c21fba7143ffe18559d04a1fe06e0469905a062896ab8b5853b0ae24f4b20742d3d94f54e3a1b0b055b0bb17be953459d034800b0aa54bea1aed58c7e4521e2e81b9f5112d359308dfbca13067ea14e1d67609c15feef8a905a421a02819b0a9ac749acdd1086eca775f7fe805467572adfd2d7d99b5f3dc67b7e548c5bafde1656c679458ca923aa1f02bd8b9d1806d499763f306ea0826a298870f46f5ae6f9718e724b21bfa9c007b8a716e05f3f6c428858939e444e4b1c480a8c698b66dc0b106232d0143959f0dabd41048622bb75ef7697845598ba27dca648c6896649b0495d452eaa60be14f9033a9af7d05c0e69d4d28b45635e850fbdea24847cd8f69e7b4ca4909814a0068fa1b528fc200214ac8200e450e512aaa94aa16c0dc85f8e82ccedaed56dd2d4041bca731c45a40bc29c905e05f4f542985e401123823009dc2ab5f4518a58a9532805990417f7ba6135c8c92f60f0ac5edd60cbedfe89d684c7c03deabbfe1240d42c7b0d4a206d79784a028916b3e96b743e93e5139c37d0ffe105a7d4f3f010a4ed091004c71f28226e66fc1f6b0939a0287563ae54d29581639af78365edb428064e7889274d97ee9a4091f36b3592f1e233f0766948a7346959f402349c19b6d95179233056e8c88770cf179f2f6b910374f0fa62475f0006fd125cfc7981a8a1d9548cf5b948055ceed7cdbf2064db122d3eb06ebe82f22f58e3a0807c3910942046255004337b90a562243aa62e464a52cb6c1003a2123c0157e575e16d9d9b0cd9d1792281e24a9eac213c1624e0196de143554526729df55e80cbe20fd02e924ad9d1ba600daa3b651ef7c983d55d79445ade3ce5337d962cc017367b49be453196d79efbb87b6bb737e58b5ed60f6198c0c40a3ebcfd0dcdb26f23e73f85a5136042dd268881a5cc4e0326fe53e1f6de6bf9a961835e123b4cdf2abd689885b070d5e6d8f741f4e831ff4b4cc5976aeda840f11f34443fa4436531041cfcab9c8612bd471a86161e2a1c520abc334ce14159118d818d8c3a06a80aef1cd051a0b648437041738d006ac37b822924683ba230b0f05941201dec2f90876ccc9d0e929051ac381e649c4f0257060d27183526d2fcf560ff505cbb50d5b7e0025eeba2486d3f85c9f605fbfebb92e52be8d8251287685c11f8457311c141a487c86e223844e28ac62d2287283ca23a447712c14714a708eea27944e310dd216297283ca270457116c9471407454aafaca9a0b1225946b1c23ad12d1b7d694b0e6daea24fd3a00f4155107a3b5b9b20850e978a8aa556f8c053a1d01bf093828463348db1467ad3ebe64a89482684a4da11eb08c0448d905fb0e5fad19752d0cab662320de2226d2e9a2a7c2a64465f0168e4358fbc1b80b63bb617f01b16c0ff798a32765c15c02062da90ef938ae7ef89913963af7d4d14755d9f0d952844bca22f4c286789599b8795d48c29ac1bc0de8c25034d936983bbe3afb1c1520c2fdf58f95bd987f9525fe936d062674213172cb23c22a10b9acf276d8f712f7a53777195edd7ccaca17942f29edfbe253fa867d62c45d1c5aea531a5285942e8eb7486f98f1ece3716892f7cdc4b8f9ae174e2a251342317d4f454c295744f09eb0e663bee95554f9ee374f0367b8ca7b391d654cff4da42ccb23edee4ab39804bb983885a0acec980e898506f219c26678e1292166857ee310d33d9196052fd63cc31d1cedb747e8c3e066a25a022a2ad37ea55d372a28293c6066ea4e80e62d6adb4e1e5b2742edede755ad54db5f701c6fe183c1c05ebda5987ebfb880ca5879bf20920d1fed70b3d9f098b9617e34f395f15d7f30df9ec2e83ad0044c4174aba587fcd5b51e873dad017724c1dcd174217accfb0a74334a6ff8da3d2dcf7f18c26dfc15c33696b062ed19755637d1e785e6c58ade8f415df7e54a5f13fb9a0897892b08981e10e31f37fe826a655b519b71c5dfaf5cfe95dce2be0344037c10a1ed4eb1f1fd5f047eb12a8d17961720c36298db6238f76a8ffef853f009045b8349a2131425127924f0ff8a00ac9741738ff926d933cc1f759ebcb89c97a82439ca440b2e90c7fac987c4d0c3dd2092634217bba490f5ba471a0470979260939f44858a35f568eb649a31702f8d5c4e97b565a9664e5930a94718985b20a4b5f049d2d0be402952af7c6a69ef73326dc75120cc24d92327b0f06e81fd3eb18577d30b0f8df8ed1dc2bdf57773d60e4fdd0cc02b64c71dd180444332a6f690dccec72425ac45b8cf2c1962baca93d83aa2f7e30201a5e4305a34594bf2150f6a42cf1bfbb457437217982e7b195e83b84327e1b0ef4e98ac47927780020588bfe807a60138e6912c5ce8f87e9113fcba52de6c084cb36ab1f4603115e8f80acac1425fdb95f2f6bddf9e0340887769d9f5f0f1ce6ebf12054e615d0337821447734c0364070325a01f0da625af2c68c1524a8b2e0d4fa79adc76ee1359f8a94c1f13e4cf76d8acdf2ec4f9cb36ef61c5d003c7eadd7d171a3f5bed8714635ace763cedeb5fc7a6c868135e4a92161c3ffb945412f33039e807b3871a19789844e07e743395154647ad20fc0fe9ef5a0fa377802187fce28b684216e485f21b487c5597e6b4924b954bd7ee8e54774d95ce757239b7e79d5c1e12249b9611f568acbadd2d3cb27df2e645b291f2a1f7d036e69fddd94866d67f6df8f4be40617ff3aa815ee1ba4706e1416c0f8021386217b15b6d11483b97834c7f690bda6726dc69187519b054f78e0d69e29d633c90d83e4bef283b069778373ec525c1e706f04a9c084e646c1707a302d4608251e264aebfa0f3d92921bee7f0bd9811c1afc2d1331c27dde1cfbc8e8d2f71c3d4096c474c6eddb0eae729ba8f171400bd35ae90dc8e50b19c0bacb2ca8543dd1b68c08356b318b4e2f7f0b3eaf6e6d2bdfe26862c31aedb144b12ccf208c45a2b1c9946162bec6aaa4c272c601b4d16f4f5bbc65f458c403e7fecf939bce153fdaa2615b8626758885d19dd5d48d66139903eb35bb1a28590fe44e7dbacc27b78484a76a082014fae8e793abdc27bed6af845099e8040c99620c8522b8df45ebbdffb57499d136d10f6c5e1250f5facba95a2391dd854b55619d4da50d77add24deafd8c4a7bc212be77a70df34e6736898b07402fb11ca75fa1c9a6a2d6a36bb2ca0d541f1e7caba33aebb02419cfc5529e781349fc7649d4417bd2e4e1748063cb7d8b1d0c7c136de3b7f77ab5696674404b41e20ef1e60446ad7582f33f8519f2c43a4250dcd59d4521108c2616c857224852dbf00964dae237645567bbaa38cfe981c84f3fb9c5fbbe4b042eda4a502469e0ffbb0199c20a9c66020426c29dd3ea0cf3799bcf84104b54b6fe8241f7f76724e260e45728f6583168691578701362544108f249a5a5ed120c8a6175ed17d4ae309120c34fda13a02c62bf9e215071c88adba0f1288703f08b2fffddf582f1f73f90b08c5a9eb00bc3662d64f92df3bf82a28b9b0dc6289e300c10baf6000e336f65fc135aed417fac555b2366fa79b96b94bfcd23da3f0dd92ce0630ae8f498c623dd4df1a03546f2f48cc8734b3a54d054512c8e360ec513ddc5d01af46d45c256eaadf9fe10ec869d6032b98916dbe9347a40665edb38005663e65b34235a3fcd75b70726162b4cde42c8c6f71a289e7592825f1c8c66be33aca9ffb6338d0a9b686c3273bbe0578940114af8c0b5f6844f51029deb442d5d79a5e053fe7d466d030f89293e8d0a87af1fb0ff55affb30feef736af9c67747ed5cfeaf627d4da4b7a62e96d12e34b97a7cdc2472d8f332b18a643ddd2b7a636b921bd4e0c19e703c9c2b4e5699c676f15c2205db5580f3a944663029c119871319df2fea00ad996c6866b9133a76c1d13b765cec2d0c6b284df32f5cc2b4f169e0c1aee6a5c11a7193b5105a7302f45f575b0f144a2250f28f4377f25163f9c393211806c604bfe3d88a7982b108a127a09819769d177ae084b77112d5c3bbe6ab252390275e17829078d720ae1820fa510ca4e1cf585e4354547ad3860be59c15f2a87c8f51ac50e72da0cf063108677d37dcc13dc4def9e09d23f739dec78b2b78d5aa52b1d865c908711ad889edc4c320a9783330aa449399b0f80622168060cc1ad91e798c0dba62284381b7d9c42baef9f255772d0a33510834f151cc5cdb8a372df29543fd73d35f20c087e1393713df29d7ac653c434121c7898a1a9ce39eca4b13ec39ba1c7519fe7c43ae014f202f8807edb85a5deb23a7ba5b0e2ade83065003e94c5b800646a3ff386c82d6d67e0629d5ab95408f4775b3858d58461af1c9a315cc033ac7228bc1ba8758a059412a522b9837eb258fa7b59adcff4bdf0eaecf33248d48ef15aa2f403a48b7da94197620e66012b8df99020e7cacaf894086c5f2db66c4535dcada5f0db686370729d10d79301517f94ba5f67c5b221b7d5b52789bf18171c952abfad27dbee01bc73e1fb18020fbbec72eaa28a58344f99e3658c0fd0204af61ecf328a8e484a522071c176e85946444bd79d234b293de8cbd975b46f44d1516841181c17dcb89ee1cab026794d53f918e51b3a05536c2129173e0c1546028c10514e7c99ede8712f9a6051dfa9de83cee3208b22636104ce1fc36e25b01131bc117ea221b17589527ecf2e1c98789867057c2716bd870244665c2ce81bdb090395a0c110a46bfadf071060be612c04de2cbb6fabc16ade4ffdccaa4e3999d3a60a4e2d0cbf00f59dbd1704603d08af3cb7f10b721fc887d1033f10ccd72139796edbfb220ddee71606337d2f20c96062d6f4185ba1f87ab048221baec06b20e5d6272ee89806eeb5bce83b71647c5f0df00a9fc9faa2cb7dabb0e52c34a8c7042559bc6c905476571138a9b4fdc076fad9aa0e3006b3767420d9ca0d1a104743bbf8a8e1d01528afee9b376c58674dfd73305ad893b020928064fdcbcb504a716bf10afb7cc66e89c9a97b0d5234063e7cbbc89878bb004c658a5e3ce05a15ab6a08e5d93228570ade8a1e7f26c557b1d9d44b2bbe2443ff152b080aa6aac73c7031f15fc9038d4ed48407a83588e7cf05b7197e86461d65101f14cf029e2158135bd0e73098fa042764afa71650f697e3c48966d93030bc812f3c4555682978c997926b1c25f703dfbf013ec4b234963285457db6eb38f54759568c556b0d2fe2391130f8131e6602eea28975aad3f693efcbd363916b6cc762e3514d6b03b66b7281e3d83c3766e225b9b634ebebc0d6d694e4befdf67e5ad2c136d13620c2bfab18a2120b82e3e399b760a5d1dd61b39ba18566ec75e916fca8c3817a84440978e637fa1c6335ad8e83eb2e1a3816f399e2691fbc00d6db1f3b5e7481046afb26c5c4283257546dd55fa31e55e20cc54bfe27c92a62af84aa0d0197e7f705edd4b25866576d2b8968224f70ff7de651bb5ff65e6a688f43f089ca3c6c08f1fb8b8b09b4a05cf29a4182997f9ba7b07464c987ad1a0c0997211a9d4d93698eb3a7ec275e25d1a193cb27893a745294067e65542f88d8737bcc5521201fd2203a148e7a06801bef6c88520f7fc2c82ba693bd59ff8c5248e1c6e1ca6c07133177dcefa1816c25c7dbc1d21c87e41005be4348b74bad5d073e8ba375192d146c03693bcc19b6084ee03ab0d3d635b0e12e1e6fb4a51cc1cf9af0390212fe5a31f5ff3beae39180c4d93696391b09f19f45f52dd62e6f65046c416996d69dcc81b6025ea2ccc8591c0550027d006aaadb8dd8a7933985594fbd6a20c54bb4eb21e6b4421eca1d27e002a843b5d0b78ba5c969184efff3c1b1c9f8a45c93dc7ace640805fa8807a45917f1754e2734268ea744b313f53f4c3d63eae27f5380f6c404d10eff369079c6035f48eb2085d368f50a2304f8eec2f7b9367373421b8c0e79cf0fec2c0d04063417158a18c63632a7a867364d241652dadf2909af7df4d7b4df267c28a73c3700921c0b53d6a31974ddadb828a3c86eee3f3c358e349ca1e2ade1e69191a14a46e8467b8bdeeca4d86dae880a492001054514c9bd2a6230a71f740f8032a26a591199d6a86017c244d45e1f6447c90becaf4a9b764e9b70db561b89e87530ddb936da886e22090056f79624cfec92a74ba1ac3111839afef0abf6328e8c71368692f7a6246df23634b780c3087e48e3c2e296e397db54f6fa19297f813c48ad952360ec4b69ead86a3dcf473b4b6135143c137bff059ce8f572519ddc5da6416e7b892f1743ea11ecd51536a5042ab85ab09c18ef18d7809000691cdb3f79e7c96201fe7915dc00dcce5e3cedecf3f21a999603b731723461e8fcf9b5b15c3b58a1b980502bb60242315dac018f1533d4d5404ea9ac47d83f3a23e2d518318dfdb97af046fc24e0d0d26c8d3f08d3e5e3f49e4b4face4866c8f30ef1198e1ba9cf7581ff911d720a548d3120ddcd2d02c520334c33d289843747218d52177a2fb9bb8bae9ceb79468adf3a41a2ff498d452a8342ed99c40624994544989a3c51eb9781c72164398f13b011848127f48563a126962c19f15dba7c861af0e78cb5c10d7fac6770c10faf37beca3557fc39f0dbcfca42cb845cfa203d4fabc6b47518343086f81977df3fcd338ba6f60e3d0dc12b43de21afc371677357771e84f62390dec63739024742229c1683d4a4940299a5f1a869018d1ea5554b9b53ba2ec4baa8e596e36dc7496c522a9cb18698b9baf0a9951f8da1b21aca33a91a93fe7187a11c93342f7d187f6b4cc764595eba2ce19a989ebebf51da15493f3e2b8b39667e395b56bcadbc07b3ab09645912160e55fc56094c88b1f7d253b3e16a8d7a10d11ce4b5de3a6c06f05b3bcd01da52e8453c7f16460cd7236c1f85ea6ff9076198d7c34120258f6137700fe1c3234ac19e998fc4f9876738035cb1587a98265f79c98ac108685a439ee183891cc0510a392c360f0d09af299ea3b730f514b7965c72ba75d143db946c73728a042cd4c6619ad0a820f46e04992ba0b4d3a1b0ec65b4667e5e30d061c13bf8d5db3a6d06a3dbdc911bd0d8d6faa13d3260292a9c8f37444214dde245ca72e395ad56ffd4d57213871b0d756db5b8b6f830651c53afb4a88b50bfa19df39bbc31a2ccba125781d44302ceb3cfdf371d7c2e58dc5f63cea8c32a7bc57304a5120ba23325b8c12d921ab8fa24f3fd7c3debc5ec3ab5d22fd2526dd3bec2edf505d7938594384d5f806bf216a9001e1c54614d8cd21c67bfbeb787f3a94a1af044fc4ee8f7453a417a2ada04e3f55c245f8682b9a274250ba998ae652e9305cd9251f214f84c034027239073ab28e9089661bbe988bfe04e31fbafcd81d44728001bf586f3a8abc71beec1f65243de9c6588e984e4bfc91be005ee830105107493be3e0f5a7ee4e52e7d5ca233d9667d288aefab33f874838ad46565d53ae58507eb2158d85118fe3b6a9ba66d29dbbdcc45083bc30180146b1f3f4769fb35154110d88f87be2f578bc6bfc5145207bb33f44b464e8a0f1dbb80cdbc3cdac5d48d9f00c01c26a61800cb7a3a69487111e415929ae2269d41e2f958387221b25ec6dfa3568ecb8ea5cc944a1cce134c4e7db5a3b843cb50dbb328846ed6881fd33be5a223eb61730ae4ccc33d1f5b9fdb3733c1ee6e3edae1abf8c2dcd244368b159c6df55edd262fa00eaf72c4a36c5834bd9a038c8dd156be81cb68d7e52ed057f507c8ecb9423c3f8ddf12cd1dcad01adb7a068fedf195e2dae431e539c584c7f5a1d5dcb5bf15a7e558c797e444d2f61116cb08bb2b972c8fad231b584c13c2c1cef4d1a2c72475249056a08ba4130b011c52b303de95cc5d8af813b7b99c4a0ea94956b42d1568b7cd15172597c43e9266b18e9a25b4f4233dab01fe65c49d5f54bf90a44369792c388291b1423287a511173555b70a87d555227ccd2b33853b0485be7667992f5bcc6f08de0041caf1f5390474e7fa9b8dd18cc2ee2319ef297848493546c4e3bfb1c1bda9a88687438a50a152b8b1f0d050146900bb546361597d7c384ecb79f031e8dbe8ec881fe79e77e24c9cfdab1a69b8e8e298e848a658e271a76dfe55bf41a7eb148981e53c623ae8e04d6462eeacbe6747f89d747020032b112433b772ee69454581a583f04e1e8d030abcb0b5fefb6beab4871dd8d6b32d9d5451b294c479d8064ef7024200a1403f925e88bb372c3d49b122db903ee0aaee65d2d79c1e740f1f4c3a2ea7dea173a5476590a9978e7c7a7c77e5aebbe0b97e0633735b72abd1323212c43b98e402b6f4bccd7221c22655b6a943d91ea3f64c2515ea74a86ccf2da314336bdd4f15ba8aabe7f3538c30f0a1c0bf3e0b075b72b1b5c9569b567a7dda89f3f5a91ae7bb08cd6baab1d427770dfbca1f1be4285e40df3ffd2bf969bc6f2c8a0756e6b741cb0edd4058a66598ad95b115b6f2a7830deef7b69be9ba1ce2dd5c33037dff3adc27b38437e07ebefa084d322d90bc2af4b2357905529135f825e0259adef138a15b80cc609fb27157605cb2cfaa37b9c93f68b9a89612be7df60d9fc688c021116b3f1661971985c80f2d2f7ffed42492bef4a342027244069bca511868aa9be3c12fc821f2198f21663706b0c5aa891260f0a8956f552c2152e5cc52d2d40328e15777ea1ff352007925ca6ab866812e606cbb410ccd4a3b156947348ba0a689af534c8fbc56f40bc468a4f28faf4e28c39ee54f3772646896da4203f00125df641f11274e83923e449e67fea8f63fdb7502c70369703d3c439f4883dfcd696631ed57a2293af04b543dccbe4c150dea88b5e3471d5c6d04ff4126459fa01c5ad16ed5188984fd480fe8dffb453e1306e025754ad12f4e07de9f7b041bb4f296e154f499705ad39dd1183e3c859fdeaea3cf9f7ea20d3212d0034b8bb533abf24ca8725c9a11304f1495bd1cf84038df39810b0777ae1edc933f79a83ef405b1d4390eff2a2ede0301238d558df4c14908bb711a6031365a8f53490b3a1de189b508c8e170eda74cfde5726e05382c49201aff691ffcd7e0ae4834c2b6d71f993e186375f9c66e053631e1ae904aecf5480c4bc911c40b5f7e884485dc1a08834fe0221f14066e72aeadceadc5129da460428d7f85b1a41f5a537e91f4e21aea7be7c13b31712ebd6bce49b0b6954e3fcee6181566fde94482df157616504f2b08ba50ff5416ee960254122c6e67318709ba14b9c2dc176c4028b507398e2f2fcbe8cdcc40a7cabf977bcc136690f033d2c92a94a6626a0528ee056f590b8aae64d254dcec434c70af4c7d835a8352b6e54c6f9e5565ea5b5bd44f7c03eef0d694827f3cfecc84a35862cb00d9481e950f939fc55a0ff9ffb555ae5ee3089d1c3f3db4f48327283912adcbb0c4f4b31febc6f4983d7feb4886c17b95f13868ae5b56b482972dc317191fc42e32e4af2de0edc1bbb45c415dc4f091e99ac4fedb4c804e566b9d11e0ea56a1148b56219834cc79c0ac08598a9b56ddb5cfc0c79a4970e32cd8b4f5b95591c1e39d3263989e40ed23a4b76b9833de8e369d936c9349653d29997992e9901c0293844088df7fecf5eb725318c59a3da102b09299aebb18f524630ca1575d8f54f1381c806af475c6be11b02ef6dc3d7f98fe367254a2fecd3a53a8744d4536ce0a745f90cd096cd4a9250525750a196cd6ca707b2e92cf0791d29ae918a1a3e5b4ba9bcdefb716823515998270b6836f894c872d8d58e223b786a4d1691f62686996ff86f841e367f4437593a56775e7903c71956b4e8bb883096c2bd0eb192bc6e81a96e241ffc6d6ea95de35c886a9b980d4587172355e17366fbc9124f66bf27015f6744699d4b7024081ba1e4d3460cfed903fbe8d7f0ae7c92738b39daa695ad069c23b45c3e507245c8e060c282cd6822ed245656df475ee02d5dca0135bd21f84fb328cb727f4cf4821de403fa678ef91b14ae25e0bea04fb6721f85cdd4bc7d9dc85c36b2c6f20c372896d4879947a51ccc85781569ebb2a74e5c4e6cbb420f68f9c0635daec4c1228c43ab033cfe3c0703ee2e6d19c0b14c2e4a1b28ce5b39207111d0a6f06723190c1f9a7a4283dd200a05f6465317cda28e093b6f25942d84be4f4265ac14859b77e9541d36b5348233c02d0d868aa428bbac4c9d25e5e098575fcdf423775d159a08543a0dd04f44333411524669fe1a66b7e27eadeab32911379e4f0da018a95b16d1d7e737a2e08db6377e38709942d2b9b964027537f221be268fe630442d155ad843e2491911377a482f2f95652f3c4855b796e738b44e250465565a047c57ffeb9b25085402f170fb163bef8f3001ade4199a9cd7e77ef020dc83012e65e62bfc5ed8bd17b0739df4893b63f7cf17663b9753b71967074ffbe762aa67cde44d192a9835df4e33b788386b0b3a295a0c0b9f59b25176a9e029df38e304f995f2f39a15447d0169044ea497d03018180fc7325c8fbf6c2d06df649efde89497c9e51e524a228a940c65f9d2056f510a4391cccfffbd52421396d4bc0cb1784c6294848561428885a5863488493352bc3b1beb104a933da86078d17e3903c0b25e47d71f01bac042576a0d942f51a4ea0c0e294effa417badf029f0ee25d4b827416d616b505de7642d89aa9ebedfa13cd88b8292466c430f709c3f1ea7d0165b5cfdeef885d2232c00ae5705d5b464a7c59e819b7b3cb66f433e2150de8593c4df528234db0f7d4a508f98f47be728e0855a1a9c20d9a4d2b42feb021228fb459d44726b5ea04cb1debd41826c612a1fd0823010ea80259f21080ee3c8071ebba7a12fd04099f13d6dba5a7d98a7377c8695b6e9dbc24c69e80a461f616631e634f9e9a083912f25010a450517118949ff81fdf06919dcc15bab6d9b6ec40a0f76bea70586d41a961b3ab2905ff3cff74359e834712dfe83ff7ed4d1b35a7c0d5db19f84350df8271ea97da7ba76ccbe64209e71fd8c30ccc51f083e41a34768cc8e951263fe79dfbe92cbc1f503aa863dfcfb560f8c2eac946b00b40409df1861b2509de9d215546c0ec1d723c0b84ab7a6eb12c603cf22051a4d22ffb57c7abb40e1139eafb7e5e4609162e1f5a1f2a66566b2023aba0df8ffbc81b8a2c922c3f29240d32d1cf75d3615e46cbb9f399abf3ea61c058968ddfcb1b0bd615e7772344e66d407430b7593e9d961ddd6ece3dc76c70b17dd4782ab641d166ea6cdfc6ce4470fa0465e80000d82ff6894c0ee63edb0af497599ea356cdc319e75d2a65f4fb6cd96d4071a3774b7f8ba86d4cd76e9134c1a9a08355beb53d246373299c41d1e308f7b77f7a582b9b611da5243d0b6e6d0b2c2902ce8b971a00ab93777e889027ab3d38d0573bdfe01e29fb2410a59ebc281adced19ecac4c460777c3907c29892b86952c4c0f5c011353fe2618ae4706c27565f99ba173f4a117244af9cf50b0fb1d73837c78dd8a9d22adea13f28809ff6c520ae625127bc451a8203eafea48e7b62c8754ee0c9878de78ed4ad89d4fda854df2b377b21724540868ddf617d2dcf9dcf23f224a1be8b744c8f9de640162ed8b22dccfa74ad17104012ed5e32d615977c62e7ceea6409c8f51c3ecf2f3b17eea2bd3b49f80e7877b75d8c8be42d67d8045ade0afbe83808b11ae5f2995203071169e927223f045251f57cb727d91da719a31ec89e6b6e798316ecab1d9a2763690971af6dbcf2ee01f14c8cc50bf5a0500245d448bf9e4af819bc3bcd0aa460fc7dd06e42fe272b79d224ce6d3e9c1d2524991e194b1f54d782fa24bbf14d67874c5703e55249dab2533bc62f673541fa572e67b31ef671ae9a6bce62a510335e54d8396a383db3442da0b971d9148e10e20e0529147c2fa06654df9511e44c22ee1fe0458f092a531ccc16de9973b2160a0aacbb1b1df491c95164f079455bc0c278aee42e25c5300f041c7c1aaa954a32afb83c5bf41675beb61ba65ab1a4bd79c80a5c6f3a3e17bd60a77b7e32648b6508ecb7ce9464dee3703d34087bfc6164235626717c4e1463669d56f8ef5ed93885dd2152fe4589cc4ab9d934eb63dfe8b2c36a8a81bc38ba58515bd16caf99fb3150363445c79d05d7527c751ed3c1d6b542a2f89ec15432bab0bd7d3c3aea9c1124fb14b4aa466bd3ad02e97ab8770865ee5736c713975bf8c94403a3f898830decdaf423377a194bfa33686f1a2b040a808daf5ec7f006ec9b300aba0601d08438b10a189918f3e895b9df4fc9fabbf9963a667fca7e6b2a947246cc073842d6651e669c65349a0dbdf5397551af454cc3e90cd2c541d2f7e3d966c2a805b8bf4692184d2442da8c2a3ca4e6e8d84ee9ce684aebd420db3aac0a3e394e16c450a4c7754d8a433d17b849f8478a99409523015a5ed41e3cc4050f9fee364d33d1c6c1860739f7ca828c8737b49b599790299c59fedacd060bc15d6797001f7b07059751b95123b3a3be8f9f3a93fdd88498f44bd348a80831d18c6789b2f411c268b606ea401692e9fd9b00267e3f578d935c557000eaf8e24b9109c5fdf054ee17abe5718d1c518488cb51d39038a6a0ba094936477b2ce62dd104bc6e0353f9daead396de54a6cbfed8a70dee9c66366d433fc5ea57aa36c585eff84488893da03cb29e27c804cacb4e1f252ca65521c7432627fbc3b728aed93026ae29f3ba43845f168d913957ae4c4df67b79838fe309ab8982ec5b2112526fc5ca93347785ec61e917a26b94459836517aed8fa4f9046740f6ca5e49596c115b3cb74d04d5df01bbb592e6ea2f1bb630cdb4ba63e3c6defa78603f3529148f07850705c13bc7142ed1a153a444abaa9b98686234003b1292e63f074f79e8b338034933af876eb38445e1f415f5da51385c2c4664664e00cba08d4bf525957f0bf58953d519053b12e3c977963870e9ab0d9ac1bf739af68720b3453ea8ae814caa1c6d520359a1be8346cad0df0dcbb332e6f16ce74a1aa67423585ab481a87105599807131916b9f896cbd73d18a00400d11c7d52674d7fa54fcc692b0ae2149d0970226c989737be0d96c2171e4052ca0c2da47fd3c2ac00ac1485b3465d89f5c283d63e154f0e2a2718da27f8298aa9c2edb705f08b92e6830ae5170f81834e5cc804551fccfe96957cd8cedfdb556e860e95958acac3343490f421c175c660f54fc26f6d379b3b7445f779bf2a9e52a62c077387f79183bc80f1efa9a23c562084efc0bfee64730832908d1a86d01cdc186510e4e13c93f2438483b240e56a034b2ae88746974f9cbbcee918c5430a2d241cf7a3af5c6460f6fb5ff5bc7d07328491b03021fbe69cfe8ef57171bd379ce454838d187b2f3c4d67e70940493af23f291bc4e8dba39173f41ae7af0b2025d1e597a810f7c44e445ff0b86e71cca621900df90139a630d26fa66a7539ceacff37ca164f3b7d400b3a361ef638249d3e53fb1fe6a3eb28dffa692f2742e997dfc1bfa96286a40750e2150a3348b387369104f8b55062de0663da687e6ea00ebdf3d01dd4bbdf2350edadacd32fc501d3e61bf57ba4d6553d1ec4baa6ed5f747e0f1f822b81c21ef612b99cf28ec338080298fa22550b08c304eb812f08af636fcd61c9b47b1f211d62218b01d0bbeacaddf029f1650817eebea6aa71ded36732743fdc9b9455b32ddd95b9c24f934e2db8e70b02054fa8329b9714165dab44716d818694e7c8fb9832539fb39ea318f349abd871d9c016c3c624e1bfaeb76368e36b4013291884522c6b6a44a673e95bdf6c20443af2ef5b809e8af7c5a16ae83d43ec5942c0dd10778ab1dab619dd1920a6749febd4f2e9d47d23e7cb713b46cf43e3749ef1ae8604d314c62de418038f828df534e85a2ee99b0759e954ca3ba83f29e38773c7dcb0fdc9f8c1c5bf6b14419e40426af5df1ca030b30becd0fdbc1d886ddf315fa39cb6a020b921bf7613d653cc0c96a54858481c1f700896b2c82216c132ee48789243bb0db5d079402d5eefddcd03b5b092719d86845504138e3c94e4380f5d6e76cc9e5a3732a99e6d4e9d5e82c129ae37a53d7edfc9dba1e31a67a0787c31be1f85dc4b457f0a03ca94419c44e73e47409a7c92d4c4992205730c48e2b8591670c755203853b8e16289e3d5c14fd9c079b639a2d97b75b042113a684e4a9c441a10cd648c7d82d5251278ffb86f3e3f82ffd0b17a3f045f9d85193300fc385789270dbf24043b08ffa1c3c0864d0a9d03069bd44492a9e6ad5c9d01240c8bfddd5979e88b68e6fdf0391d206319cd9009c52ed38b1b0bd207559bf218c81a51c1746aa94d6215cc3b51bf56c700f10ace0f4c3ad356a74f015e98c647b2c37a42d1051cde86b69fe2ac69e6075c802aac3cfc59038c9134942e820e624fdfabc46c8d66ccf0383a933361a3df246d1a4ad635a8f8d73723ad8ce8c50cfca2ae6d4a8fdc3aaa58a31a2b2064f54e56e32e5924725f241c6f345d7da6a118445025d919c8755f94a4c9b15cec6ca451626a022f014777ce22b232d9ea39741d029d5cde0a325900de9f75c2426a95eeaa12fe9bb67c68f35967cb51c0e9e52443b59feaa26e0d6cc4efb37ef7ac3c1f7a2c9653cc7f6fa6a307af4b05d5c60df12f31cf871b06c90cc2e754c826843dcc56be8a18595e54815f362fe698d2197da4dc67276a1453f3a751ed31735ad445b6395170b41e6c938465fe0bcf6f910824dd0cba058fb2328c4d58240a517eecd229d024bdc28139c2ea9d708f75d61260517d0b55682e6466eba8ee63b29d31dbcc40e43d7d41aa9953c2d7f5c41d8f8932669672ac83e7cc578ea351a43993280b5c9bc76f749e59de44618b73e3417516b14622cf2d4091cf9bb1474c96dd132a71943b1474468435cf3820d7735f10f27a5248b7238914197eb3bb05e84f34b97fc4645596eae2810fa6d117e59932fa4c0195ffb001b8eef418147cb1563e975ddf5518eea6bc5c5cfc88f199b8a8bc3fa584ec6b539cb3c18a80b3e48801073e6817ba4f08359f47f4870c80da456c8449472038aac1d1c8fa9e75f7e88dce014405212dbd708b839cae6cf692b9deac21660659e1e0f724e207907a67b09d0c40cd293ec431048240273ace4c67dc4d7136eca26c1aa8e8b0f233f660c41bbd0cc6635983515d48467dc8f8a69946f739242370997f1debb22f0b96cf3d04312b1deab493bdff3f96cbfda742ea60b43589682ad1673bfb4ca8a34920f7fd32f8dbe89fbb6ff2637e53d6765598476a4b0e5fea29e577e37dc4ee147ce443ca5bb91be9955c8036edb6a746b5333f023c12032c6d5d4087f1901f5e7d06cf495021b7097c9ad2d069620a220e5629a7eb7995a300bd868818f88ff4dcabce9720bbb637bb3508761d1761dcedc62fd5fcc4e993457bc8cf45c846663a8d2518e36447c7612271bbf2fa9cfadaed29226d21e27e24b3036291c1858222d3ac82dda865818e0cb4e209fcccf69f3ff05b21176ab98963f7f5a41a1e93f90a00b0b5611db934906d6d25327667eaa035d7ac53189c6f946f4fb46118ff43e9016d9621dd4470e7f03e154f82719d526a3011c3d9635d48ee35c182cf2c824d3e0248d97f745012193e9cfb5c64f76732dc154461dd008417bd708f1edf00f4ded48b3f9d6214b5a360a36cd5dd406cea17521d175627c0357be954f77169d8bddf6e5b22e2163977950e39f5801181a8c826de921136a50dd13cdba2e8fb4d09c58f6cd8e5530ac54c8b2ae38505942babad0b7669e82fc5f7c16b35568c780fb92c50e305a6b53ebff2454a757bf04ae6c8d24ee8dfd3a00208d48944d78366c957c5dae370f48338f4ca98255e11cd1c76492a24d8d524ecfc1d5aac190269611e42c71c05326f3998f40f6656941ca636fcc30093823f840ace4808475f8eee51a25840233c991f7cc12f6e2441c310a384cb9f941eaf1bea106e4792c28bd8001d952201a735e27774bcb41daa1453592904879b834e7809c0104d5fcacf3f290a10f9053f53f46a145381f073c38fb1c0a54a72e0d01f40d9e3a3618326f5365567df1a472a165348a7c67d65baf16e5035853ee467421d51c417fa2c0e2a83e17ae90c599ca5b3a1f2142b016fe3cc4df60a1147b2309c115bcf100262cb2b7b72842a27a71f0c380ec2b47c000ea95b6f85d08709bc173f012188b4679a393214b446b8637b350836108f598133958a16a83cb28e6eed8922b6cb2bf9e1c8a020e3dc6eb21d58e0f4a02bfaf67f41b17e290df3fb30b6a7956dbd347a2d8a182e7b6c28f99fb342248d6dc8602ce5870884f70440b0420868a83a3da46f57c0be970b496e168a60b40dd76e1fd59b50a1b6324d0e98f69dfd25307b21683503515ef7233bdb31188742ed137e9c43203ab9ac84b79a27f1f7873818f56aa05b8b9f72123cc26e647057695fa1f27a99af637ece91bcd06baa0badf35245477b9e85603d92e33a0e9676f97c7498d421afa5a02962d288de7558a92b834dc11c2829038f087c5e9944b897813d5b646b215c7c5c460e9a280340b948a25983b11ef338f974f082f1883a84b24a06e14217ad681635def4dde61a8d8b9ca813dc79e9c9caed339517fc804c71b6d9738364bb830fa0238dd784fc7e21f2708769fd2aea8711304791483190235cc83e401329da1f3f5b385d62b70ca715fe9e37268c4dc9315ace0aa6d412760e6c5ab78d22439a6e2dee1929b52ca907840b96ff075496e3c8681641e26bdc75af83bd3b6240a0b6983fb135fc3cfde4858848b710d151800ac01f57d8f63b5e39c1a926ba4ee045e8d88e25c632a750ab995689edc3cf07dd9cf863f0878a6b1f309664888382eee724c9923cf108c3bd6544b5956f09f117153027a00ea16ccd18f47800706e025ef2e95e0e6d2c77a0711b2ee56be56665d9fbb1d9def9df685c5649bb0af489611b4f3cfbd46c431477a8dbadbbec047a6edd8a1f6a3794c40ed869ad7526483428086c28cf6eb09cc74af516e74f768795bfd5459c68d0d81aafb78cdcaed0fc38468754d643f4dad5e93ba18fb78842a797bc21cfe0b0b6baae54a760327197cd27ca577dd49f4b6a022c6176dc4cecdd30bc69840954144d60313903a014b7628f7578a4a0cb5b484f099d0c0f261f6da0ad77816c4f730f086e18a6d393555de4e16f3d6d4ef28cb5db8ba2142093b4e6230979590d5871283bc08a269f03e2483b28181bbb38391ae79c7c1b373c076be83a8305aadc04ae4041c1295f103d1d82ebf471b87338418a24154e3c5e691b91577ed6941019897de203448c386fd73f238498c38961ee99b3e6d3bca6b05e261ab96cc86c6111443a6ac613da9097e2af10843036025ed3d69c0264515439904cf6cd6c72513b10abd423a0fcf6baf3656256b026264ef8fd2fcbe89ddb4ca222e606c4f58a95fed53f0919b08abea190efbd45e824ef984120b57075ae86b458268d3117470ccc4b0b7793661c09438ac95b5e0894ba9367b1d0be21a0b1901d6de13cc642b207e24dc7b0f13bd2c5e9cdda88f19067c7f5e0053d1c0e3ddc59ca89b5c36cbd3b857a2b668cd9374fc041634f32e809b398b2ffea855955bdecefa4e49ca0e7991b6c80e0ced0a3f0e0fb1edc31e1db84f486d5f9e68dec964b502963605e907268feeba53ac3086bc4dc772e6df67325af9af640a4c9a645ca7adf73674fc1e244b86993e1d7a7ec6aea755958820d1792637d2d4d4964c94c9f96abb391d249f64439887c8a8cfe00f2d1092370f66ed2c3b32a61f6f44fcfb1288678851447b5c299085fe724b3bea29c3e793ffbeab94bca9a2ddcdcfa98c79ed510431fbd973956177befa952af2c393f646dcb5539e14e434a3eb37eff5f106e8970a8469f8de041ff7d8c2056a68522a4d3ab55b7ca2c0ca0a89d63044eb43a9011ac0cfbd4b48660b0fd77ff74d4c58a393323e44ad46f26e06d4624db628863dd3a62f743f4a041ac22f1cc264da4033cc1a312c00a0a3db7b71bb42759b80e2ddfa3ed5b30964973e86e964d3e6a7944e35cde5af51f1e137bfce85ff48eff06b412253dd6f6602aded5d2ba73a07ceebb486330c97b07dd9eb39fec92daa137153fc917a64480d96837b734bd99f9db201e348749aedd70d25e3b39e9098463c6885b98c9bd6c46b01909a29a2283c3591665e66e749e864ef708535f209895d8b0689c197df802873bcd3521e216be6aafbb6c185872d1ecdeb12718957ea738c85f24df2382888babd5c1cbd4f4b2a97d6305d4164f05d03bba51ff4fd7edfc81ba1a04efcfd2fb50e32501a71615d104860abfb52dd8e5c938937d5821cd8cb6703f659f5792a46f14876b2549bd4122a3526a310b331c08327d86a65de00cbfa23eec4db79040f7ac5837816b0066c41c8c37a520382953e3ddcfcbe581c475c9116b0b863a919e80e8f736210c8ee6109ab0c374b2aef63475ef8a2dc10c94b2c700315e32126f1d83302028096457f00233d884f23534a8e06355eca6b278f420057c3770913d8cafdef2c7a3a4b8b175ef9bc8e96bab46636ef78933cc73a9f2638748d60f8e34bd77808966ecf540a9712ed3a20793d4ae1b64e38947446b5b159e7e6ee7d05a4de9fd7478f9a2533379e5d304e073b349e1e666932a83efaa6793f227f058baf992b274004dda099949e9dd5e2f98dfb88363c7716d756bfc26c30749f997cd854c7ea1d12d060c61d4e08dce5c8415214e6811a01794a1b47f722564da63109f7b8fd1cd8e8c673d577cfa62b256fa28c6872fc1998ffadb544e8a3b36bd756453ed34d204c55478cb2f353e38999477a98e76f3b64dff8544dd886e619754bbb6417c51103d1b88fa48e3f65efd4725c9cd036e3b8414b7cf33d911313a489094154d3a022062eac5fd29494cd5a14e8edbf18adb678fbf055e4e9f553265ea1064375aa630809f818f34801d4751a57bf577d0be74e23f356243a8b268557dc07ad50c94b52c52e3f0ae1588f9542149f5ef31c42b5858055926c2126b867276b8e764522c9014e9a20edd730b970a6358871e29c9acd3fea002cf0f506dfd528c23700bd31679b59042f58c27d8835c56c193260bfdbe0ee8f6b5e8989726bd027a77c6be5f1d76519d362bf1014bc50cc7c7a9927ad9ac677c0aad075b2c5a13a5cb0b5a36f8791238ff4e10e692b21c00cb92b8054d43d81da3790dddc8253af9318848d8b0f2a26f2af2474dc652f25939d853939afc6f47c41003001bdc15e682a601c8f6d94dc04564730bd3779fa19ae6013852931938946324cad3a8d7a3014aafeee8a4621f2c8907a7adcf8baf4f1ded93461561a3b9f38169e6a71e62223219b77e9f2361294b5275083748057ffc11eadd2c0e8adb2f26e97b882653213e830dfe2b44c1caf0adf29558a3c77b088b92aea3fb0d3bf4c228f9b64f6fe80038629362666eb7a90e6aa34a42a47bbf371a672da2ba23bce02285ac585dd6fa0a6990c3ff1ae13ca3da086ca9e923f52eabefed75bddabe2154ac649b523889c4cf7dd2b179d67f018a2045e9add1004fe0993bfc47254a1765c7fb4172b3813d0accfdeec0e91755105a961df011c82aa55ec85cc7a7eca7ae20531c31cd3c96c8da586458cb74aa4c0b4eba53f3dc93b6b1caada4d52c73e7d392720705fed0c1fce2bfc35a4fd9b49df319fefb897388231c7cb81bcc3549d8d9f59b2d8219b81af0639b2b2341779bc5fad1511da6d3bd59c51f80d155dd3c92ccac6edac4e866359426fbe5d1b1ad2954db892802e9f29e3a61064544ed012ef6c4cc5977896254c29de315e684be58e32813a36874a33f1e6d5bd0021fd570955d2c19acb8d2ee0ed91dc3ba518f99a4148d3269908f02c62f9eab8eef5331ae5845c208c0cd95c7928214149300e386178a7eb3d9ab63a8e1de13925de4d1c360d109a04161879af9ba5f1fed8914606c4ff42e442f252ea6e6cc9f16aa935202914ab28b21f87dfabeb71fd7638bf43dee0c1d72118758fb39bba53e06dfeacbe87a62c9862f53bf33193daa1c50656c2edf438759ea0ab9719805073843a13b50d8b563416d621ac9e6614033e596d23d7ff383c1be04ff52b73b563fb6f89decff1c41ec63c170ce0e4ad3287d2506bf28a5157c289721e387703f7c8ce54d1663d2b91f32369db0af53361631a8f228f04ee1429266f8f1acaad6b194c600751a0e2cb864c1ea698aa8a80656166159cada4cd1dfdb7139a8c7ec9ac72b66d1da9990724e151ef0359c014c7f84ac2325334002653f423dc8d8ce7fe4fe554f648a14a6bdb661424edc57945f1a4ac12b5e12bb04bd99b2ca50e1253f750d4b669e59a9dabd8eb5b8b17192f6f3344fe4828cd6c4ab62cf4664c48a99602af26586659e9278c6311995592d3df58e55bf1da52259931ec9d86986a020566fdc2717a878f3bbe99f2510e9ebdeeaf4162030666c199d48833daffb74622292c651555d0d571637fcee18ff0018b515b3140813723e343aa40c8bc2d573eba1b307514795309c02a6ee91f581a22f7a4461e6fb10925dad001e499fcbd60377110d33021c2056b339607c56bf426ea6e19545aff0dd3a8428e089b6005cbe320bfe0f31d4554d1fff5f8a06409dfd82f26dc60c3df0721d8c924e65a8b02585e78bfcce4b1c0dd1383d65609a910282a3b1b3e46ced96856650e8417c0f25240f38bf2476670a4cc661aeaa5a4cefacaa17ed67e37a08912b347df03ca07f6c0836d62b189f0113fdf0a688c92e1f9ed0027e29134c6a6b9a4e395539a8baf14dd6ada2e158dafe63a44c67e0d8ff993c98ac47a02ad9c658d9d24086fcdf37dfabd0261bacc07cb1b702abd03447fab6260556832e3c4a6bc21ee4615d352b4ce53193186b71823c43b448d22d3dd2c490cd964c31103b03ac1862267401487f5b7f85565661aebafcb06896b3add0e5409a2c234d38e0d4828b9a1bfb8a21f041274ee2c28502565205562d413a766571777899a4f7ed320ae490680fd7953448baf6e08102572134ece7d6ff289d34555cd5787ae2ac90a258429317fb5fbca40616473da246be1f421a31ff8c5064c571b50f7d016e7e91b7f016dc11370831ab4195a73c46a633924217569b15dbcdba8947f04250d4eb878ab0b0cabcf5ca886a45b4de206a66eb0f2ceb9508b7e68607e61162fd0ee0cbf3aeee7f9e616efb8b5e23a6a989f0ee4004f1dc107589894ecf2a2a76ec235c95a34650f08d47310a582bcab3989e4dcc71f45c054063f94da5971321547136751789e65ad95f4e3cfa4d12d16eaec1404099f6fe34c971dd2d80e5c137236549b72d3df852e00b1c4b04dcd0e11aea513d1a97687e00b04b4c91d1958e15f6af408c2717ccdd77ca7da389114c3100dd99872e479fcc3889f9d58131e70e753fbaf2e39660a761fb388793c2551a880aa1f484a4d8887da8483649aa617aaa30b0e2fe4f1ea17160bc0158a226ac25d633ea10208478a8ccb7f350b2f72b9af646e8b6c9f71ea04101d366f74e9442797a22ee39bcb46059415dab2ecd09fc6770ebb9d01a48fa9d435959ec04f26a516dfc534f394f2e9a803d6566ecd16d793da6a82ca73a6f04c7e644786ef266ddac21d5e55012b4d5b701eae85e99ad1da43cd468304413241b7a6a6a3c86d79d3adcc04faa89c0a2febe477a1f77da73e7a46dbe5886a96da74f8a6836295f4af3b878ae427fe9d51d1d706f5955c6a1f89f4d41638b8ee7e37c020bb957efc98268f6ac56bcd9205200ca146bc62c0d619a574dbc9d6eb2c07feb5ea076aea89185e6b2d708b07628eb1f5581dafdcacc254a65ea1f3a115814e0e8f105d034961a60391cbacd1628c3456d5e9167e217a9aac080355fddcc19814498478075c77342ee53e7b6b6ef4fee1f74904a7f551ab176de546bd1286f08b008c88e1e9f7e834dac837638135f30afee2faf109f51e53d6927eda29529ed623d2c55b46c78f8cc30e2fa891d491ede8081f9698f33d1e60b69f04628ac888928740d2cc07fd12bfdf88d5dffd63d0671827bd1a465b2d1cb9add66df0f2f65ed2171551057bc6b6682660d62f6ddabc3dcbf4a99adbc05057e2b44ef0c55305c554d079984a47ad9721dbbf5463851f55da93132e76a599a0e7663557fd9b909d151feb3c00ec6a8cff1f9ee1800d8a0a97ee7daf0c77998956950afdec3dcc8cb45d4d45287751312d2f6de7b4bb9a59429c9f50ce70cd30c23377929cc690abb26cfbccce36e6baee4a54e4ebde49a973add140432d77c02f4c24cfb689edd0449de07e28be6d169c497f842e1cf8b3cc88a29a2a67ef0c5b9e622afa9d93c8b5d745aa3679a2846db71b03085bd5888908fce429ca45fa0187256908819807c8c51c80c547011a9220bff31928f5316e0db7d98a834729a5cb139f48db92458246e40201804dcc8c0b6b2375ad519f801ce2ebac8cb40b3b46f183b12bd42c28e9ca2c095c8a9a3a00c922371a355edf207b6ba4c06f8b7cab0a388045b28fc92f5d8a321893c0734cb47b2ff91b80e6c1cd09280190e22be076c6008249edb1da081cefb664ce18352e8d1c0d31b1940628b3076abb217172b10172cd0c14d0e91233b4c840c421c062144a6303423d76ec4943e9d263581cea10a945165e0ab604bc316ae9185bde37c6553e15656549e519a675e3f9b3190d53c230247463ffb4de31436b8e2dbb63914796b2eeab8aed60b1dc2200fe8609bf842721814e652ee574f5665de0fd517ab3208feb9065bf2af3a73a528c813599a4fa71e58d4215cd5d8c20d50556b6c2154638ba0eee1230ffbcf57814691c7035eeb7bb60832b520480a10f76a41cfe66a8191d1887f74a71a56d0a7d52241cb40d62a2f0fcfab5725bdaa2f2816ad21054e0d297222ea5346441d708b2de24da58a8091e522d183e343d41a795441471bd9d24ed68164c8b1c1a4dbe6e915a595e39e0af92a7b6238f4f6c8831f6d7e600b4ffff02ada50f1740550459d6150a4c58a2f9147ee3c85f2155d0069b4b9d5264a20ad9241802c03797a65bd3208656f0aaffa8e56b9280a15833c8dae1b6d5a45494f3ddaa8b01a4003229005fe977d75862f0da08110c8025faa7c0cf2f3ec51c8a9238f07220bbbd4a9429e8686553d351af55398c58e234f5df6b82cd22f2897ecd12b58050d823c953992a726ba76bce13516bce0475ce713d56754a7f5ce34d80f6af1f0b5a7fc9206704693e0a96f504218d924fa98780768afa72eca789e76de8ee635aa8fa7343273f4817524eab86d24eab80dc3b06e3d8437e24b2a55442af3e8342c92d3b04837955d258c20798c006445f7c8429da6e4d9c8429de4a1228bb79ea248373581522be5242fdd1f1d4809b55a0f5926ff2cc99339b257d57be20bb3504e759e7a4e64893e4f9d71846caa889a123f39e9f94d8e2aa2a6c6c4495e73e225f752d5514ec3327926935737a1ae8e932b7d220bf592eb30b94ec3da4a1ec953a5aa8e9ea7242fb911242fe9f851af11253795aecc892c9446933cc82a499f5ec27eba3422e69fc48936b5b31c4a8bd1e6a9d718c463930108445556ae0ff5b2d32e86da3cf51d4f6b3889574fb69efa50ab687c88b51eca27604b8c2df34aadeff194c2204fbd0a81403188d3fc3b89eab671b055a2add63ada388e73d1fde4739c6fb48be188d8bc76dcd671ae710e5b35e2ba5a21c7ddaf6f5569f03517bd48d6e872ce61dcc3ce46f5edc2b48a23049825e1033df54e62e3eb469e5651ef3858f61844bd566b51413a413a3435019297bc74216b2379232801c94daec374531328b9c94d7704261d24375d084016e9aa220b7b64e11f94729507b250a71d4fb5daa66dda46f2685892ba164f8bb48a72449ece7ccdb2cc93e03e731b7b5a455d3e01652c61250de08c2df38a533d490318837ae6c927600bd5aec4812dd46fc417c983c853aab2b9e89338540a168b3cf1a57f220bf55a6de4f941b9abe84febb44eeb0c0d0df5d49115a13aafd4b91ecd6f50af15d551afdcfd549f1dc15297383247ea0091afed7e27ea371c89f842c3a2ee815e654e5d47afb24b9d6da00c3e7d049a45b5f8003960beadac0c5461fe55e88cad2cb347a31b85fa2cc46a540f885661355a8579bd40b4aa0a5b57ec980351a357527ea786980b64c19c0664e96837c7cfe523b518e7d5dfae852d98d36819cc69c41712ec2356decc756819661ffbb1c4fc0fc6d7dbfdd76ef84f3efcaf428a35192caa5598d36b5b85795604dbfe59e8132395030ac65bad56ebc582f0c5c6082533d7caf08a1274a1dbbda5b0d14a65f84ba41c32f049cf0165ce3824d82911d3f907f8a34f24367a77d4b993d9e17d5c27e0a943809eb029811005c261fdd07ce36ee4d4fb007fb3d6929172908dce41ad8a19072712db2e1e3f238f9f625b8cb0a1d1953db0650b6c28be482a3eaad3bda05adcc548a17130be54664d0d055a4b07f7000c38c061e960e2848765e24c4821bc58d53713d742c02fbc86f25f812b91c395c442e55ee63a20194c10831d960e266810cbc49988485a2c9357ef87e66d05db375006fcaccdf05983e1b3d642e61d0328a00e7eb4153da495d044f8cc3122ade3e3336f20dd39bd4a710e7ff3aca43a11219f4118e4b31e9f5d4aa9cf92073b4f66590659ac1b2893079fa98ec482f220330250bbb49a7e4179e6ed8a3146d4639d4cfdbeed822d593b01598ed8122950ce9d974451c3032ff0b45825d7662f4250f0d15b29be94b04a4abce4eaa825ce04e90917eb8756a9d68232503e73ad06cae8cf32edc8674254270d9f01411b02d202101580acb831e433d74e005f34167ca6c5007e1a1428255822c0aafdf84cd381d6a240802b0d051a0aa8d6a234f8cc33da8a2c9953afd6dfda8b1e0498850d45968cdbe17e7a453d734e08fc92fd703b3ca35b591b3ee37684aa086ac267198784cf621c8a2fccca9cb6b2987953c8248ed6ee8e31d656c5a634c6ec27bed0882c99d76aadec6921cb3d7c24f316b2d551dc85fa6896cc81d80471fd47857c86256915cace671a8fa6e38e42d9ac3d56286c5fda8a171bc2863ea35a4bcbbc566bb556c944623fd933c5887bd88a2c4d85fd644f89275f6d804cf67ce6996fdb76a5e83c6b57ab325f59d34b09f94ac8d1652158eaa3579c67be755cbb7ab5c367d447ab3c1367f39957282cddb954a7555911ec47bb4fc5fbe630b98dd1cde19bf4466e6a0e764248df7ce4e19037c5b9f49be26e0db8b9c9e3e72e861bdd4ffa12fc233fa9b854f193c740adea292949c3963df4cd845b59066a55e6265f10690f7dcb9c7fb8d553f2848f6993e1973e2fe36050b05fbb5a9fa53c4329f151bb224be6594a968d32df4e3c19f823ef202b85c9b57116eac266e95ae09b7890d52eea190ecd1cc6ac7419005726cfbc01bc3a79e610802b92677e447c29f1cc2500b39307709ec9c08f06cfe81b6641192d03d89279e626af6700559989e4a776b90d8600230a21bc80a283e08287ab3c01235583172934708182035b3237dd4f053503d89279e97ea91319a498c400b6a094dcc096ccb7130c4e4c2f302939514272c19693758169d402d85212b180f45fbb76c096cc396f19f04a2b0154659e79dff00cad0563649e398433b414c018998feed775361cb77de69067684dc018997fda7fedd23e5b016cc9fc1b7dc6c37eedea1524e2d382cfbc6f7a653df3e6c133ba65331f7119109b79b3b55be65427a33a9f798f927c68e4352f02296a5106fccfbf15d5853284607eb8925d1c1c50d37073b503d9aa289db2742e42e77d137b228929bb3dade0e1822ff98f7b99e02196cdcc9762b28dd18a0dae6c1fe067f7b01c2bfff3f8525550bd629644b070c3b3577aee6c5427e29382676f3ead5158be7245da5cd1f35f2d6273050fc4808544880cfd573f9f290c7d7b6d29f449302779e81612e939f2dc43223d5a383d24d24305d01b827c741a38e8fcbc10aa7408313f3ef5da31f812310299236e91c446b7fe2a417da63e842db20b82e6e516632fd14fabd3e87a73c4a7777a1ce2d2508e4d1071020f08e7cc5c72d589d3ab536df38dcbb2cd334e34f22c1b6dd4362c4112b4221a2f6b37ef9a4e3781a3d16924455c06bbe4642a91daf6e8c27c7b74ee4a58ef47b18740d81c5e3d2f9e97ebd57a023c24c20422f03a5fd82a2a3defab3a345fa1f7499e415d5e08a3cff410528318754dd35cabeeceb9e6fecd60ddc96c236a424934a3265a424f948a2885797abf12c96464b2aa0c7512b9a594a2a89b9ca8932cbd9ff5128cd2c90495a2f282f2b0c38aa783773def3a8c0b03f3d4c5e5a94af57989a94449764445ddfdb83b337fbb1f0dca6e3545a610f23d3c2432058f29767c011e1279fdfc36da20e6fec99fe997fe419d187982a4d20d2f9126d224ad94f27e9c672f3f912e50b5f67e7e3f950bf56f13137d4da0973fa6fbcdfbb1cf4f1f9397bcb67772085f56dcc4513db88abbca932c3c7810b2ece0ad783a78d79bc1b8e5c1b81fcc0b17f7735149dd4f9582723f9726b7e47ef664ba2552d7b2f3d115dd99f9b2c35cbb33d84b7a3f1a1c9b744d8b996711073b758c5e8c63609708eee7c5380604f2d688c084200f80874498e0fa260c3d3bf190c814465e464f35dc4a1e5317955cc4990f6e7a2683751fcd8b4ade27bfe450f20c2e8946a492733a2f822f346c2599bce434aabda6fbcd1ecc514a109650489c8ff892bc5472e92579527293fba14aeee7a7fba95e96dc54badf0cf69c8bdcde0fe625f59187710c51c779554bb5d78b710c7ab18b710c13a646d878801e9a7e9c3a00131be6fba6846897dece5648a58a900e3f0234ace834acd8dab0605330052f8c1360567466c51a599907590d91c4890acc238785390d8b9dc3696719fcc73278da0d315d47ab42608350a893131b8683ad9e842c12deabb97a7cc082673858ea714dab5a41d1064116f63ae390b479763dbf6093a6a7503c52a81b443f4a9672aa0e7bdd01c25e83f4cbea5577ec44149d73080b9a49b09a5e79cff648afa8b3dba05e4da73f3b723a9c0f9c56ddb4ca75c41d8582ad75359cd01fd96173c247b857afa6b3bbe46e38ae48abf8a755cc09e15ead623a2fbbb43758e65ecf7ee27ddc9138143921eb1f37f4cc5f67f3752ec81949f1c715f93822afb9220b2784e379967324c443f185abd6beb89f6baef832879a856ab52af7b3a814cdf5ec8eba1f4ad39a6556795d5e6c5fd51d95bd5a67af3cd86b4eedd1abce316f0ecd24ad62926f2b5bd32abe4089cfd4bc41f44fe99c8bbb797144fae5c587e3d12be8838617e7e399c3e17662cba70c73f88fe3c9f1392283ff38219c8cf6c53d8098788967e222c6148feed28547159f2987e1f37e2f5cdedabad5e686f4483d7ad351de2e3d9453efbb6103c567eac4356f7ae3532717e56af7bbe1d44fdce4d46934ca61f70046dd9959721ba3bb983d5127739ecc395327d451ded73920e5a894b7f749a7d746cae9c59172d4c99d999fba52c5471e3b21acab5ce87726be0b1857beb833f1533cc55ddc8f3fc5a36f93fa3c19e2a371ca194fee277d26fe6cc5586d4c6ca4575b7133d1c13a1bf396582f29f193136fefbb41c4f4938bedc0d23bbdc4e4937a26de09ca1559d8e70b188e790ac521cc3c146481f18273451757854bdd14ce65429d7889772784f512e7cec68997f8d67d72727252e2f4c6ac1cf54afcc47ffa89f731f125da9d995f72e2a3989237b11e3d387293f7ddf891ac5d4ce91ac092bc92ea121bb5d80e463e33dfda9147cffaec62ece5703c4ee4713743363a619947ab70a660bfdafae650ad61cef139d42b3887e819b640398f757ce850b1042274a39ce60de05b182b6584fc6155973fac7a75302b35813a82cceb4d51c8a2d1b033a27a7675a4788727b2f00e8c32be7c982590c74191853957ac2dd96271ce33a7f3ec064b6a3dd4818607267a4eb661c24b48118e7b5a052191564120cdd35eef645f1012a1b03db75f51b0fc6ad58d08238c30c62aece48285effc9a817dedf08b85400cc3207cb50a5eeaf1ab55427a88f4eb0544488c31f22b46b1c1185664d3ab4fd412b57cbe5d54d3439d24ee10ed800e57be93abc7cc73d1a3905df2b80ee56955bf6810cac397be6c7ac4c8aecfa3af56f17f94e7a379ea31531efad2828d43c3a1dff0e221d84283f40bb3b68ec31b207bc663a5939c70d94496add55458bedfe6236ab5be492b801e2905249b1e8a3d3dd4aa4e125b552727becc1e1e9e942d58b1d535ad6a4de91fe5b169a01e8232a2cf1e9a249bd6779d1e8686ffb6aa63f31b0ab05b2b13ecd740938bb085640bb550afe4e58f524ad943f2e47aa8438c22317c31d67080169187e62447bdab0dd0ae7911a70d70a30a0bbffa31e2b8e2f53e1ffd68e41b7b30db62f48c9b8bec23cfeee8833ded34620d071401b5602323e791876a954aab3abbdeaa88c3ee8ddc477707d8c237bb91bd15d8428f6037df580bd99a58b09f6c499b2b6d5ab2256d60a7440cf451c4e171a40a5f6081166c800f87dce008dfcd6363cb3cf8d926399f2348ae396b01656801ca30793b4582fd7aa779323f6d99679e8d9a6707663dc409420f8708f1711f0e1162f3356cc017c6c27eec037bb848d323581863580bb0a5655781926b13205d1d4c861d16c9b5546d555b29700e61748d6a70a4ec26c84d4d4f0d1b5906a3e3a3df6fe6233f03f1d12190125607cff778cc3f185ae4db6160b4db3bf40836eb189d999999999977b2ac77648b853cbfa030ff98c84fee3fd8132425de344b3b8751ca9467a77af126ba184288dde88aae881379c49b76d9824180ace991aeaef34516a4e8990a84ec236666865e12b167839db50ea105707a156ffbc8bfe8a42b5d12c7756fb44adeb4aa8f2843f4a44be2689a338ebd49c49ed79c1ec16e99a7e9f4b85e367147320f4f6baedbb624cde202270a7d4a4cc9d9933c64503e72089defc869348d18bb20468ef2cd85a77d7732dabbf098d3ab538491e30b87e1db0b2fe6449c17fe451c1ead6a7f31734eb0b9572eeec7efc25df8e69b0b2fb6ba875cf8d7439fc469b47431c9bf697d831d74f6ecfdbc1b1fdd61dc883333ffc51522ba083e7e33670a993928de2827b367be5a05fd9baf8f37151d3ecd933c5661dd004f26c832ddaf96a8904a55a7f441a18f972bf152de671f45891c718b2dbc2f0928b4459cf8325bb1056d894f9b5e991a753a399d72224bfb09ce96c9bfd9faae6955cf1c94fba14e7e72e228af5f2af18d3af1453af53e722713ef0785303b8d68f2f84bf0e7a309f22467ef8342847cab5735fd62e111f088f8438aa591b3f588c383d983b8498c62dc116da8b09da476dbf49ab0ac9a269c05b9001ff48201da8fd042f56d88909696f31ffcd17117cac6e250974e6f8afd8487a5e38487455d7ab3a274c1ebd945c1ff5036b21ce1f0087819fee470cecc61490f4216e88418ecbceaa1136e6e9c10839c874e80019296874e80c1903f02cae06fa7007c71e1c1f901149e20821490b0dab913827e6d95854e8081126ac417e95830225df1833f9f7449178f6f9737475840f2f8f68d1ec17ed2f551c7155f2c008d7c7b94ae2378ec1775be9993337bf8803f9369444c70532fc77edc4243cdb7738d3dadf08e1fd29b7056f51566eaf1d4aa56abda00edbc06ab0408c42d9e70b08db1cf31d8e8fc8d052b53d323738bdab6aa567df52db5c2b635439e9765561d5e7ab1296333d444d3a1a469ae70d8600c8bf5f4eaa33ad8eb75e4db3121bef2838f3421aa4377da00ed5b477106331c39025bda6934ccb4603f5a0632c096f63806d8d24e77a80ef5417718de5410fc7c63d0f34f32d8ea8a2fd2a94e0c8aacc8ea7e9d202fa85bc7a5f3a23a544713a22ce098fbe8a8fe1876e9ec3d9dc9958cfcf5534a3b9319bbf7c9cffccb3ccbb2cc968019638f4319a99c4a9cf9ccede6188639c68e03e30b332f094eb20d7c05e13cd7d81ededa68b11564518519fe8bd7daba85e61c233ddec2338f1e8dadcab25039ee31ffea7175ba9cf1ae6c248205175035d8a2a0b544376801f78426e07c8cd5b35cb0fcec56081c867cac5f7bc55597491a830a88c84b3682c4876f6f234680d808d07be596730b2828b6c156940a03b50f0dc210286e62500cfad81e3b768cbe818d9d10a2e2a307a5f01ba7e1898fde8cdf7a0d26f8e81de0b798862a7cf400f09b6c7df478f86deee0376cc847efe437cab1c74ea8418b8f5e0fbf552ec847cf7f8395665013ad418b8dd71087e6827cf4e014bfc1c830b21348e4f0d183d14ed3dc2ed882e09f16d26db3507e70a857d08a3300f140b3b826080b351cc203080bf1fccac32151dcfc366227d8b0f26148788891709295668f48a04f1435af7a38048a269ab049b0a26727d8a0c5f30d8282c8f7f07008143d7e83d98f058243a0d8f1ed58902692e45f3c1cc2438b1fc2830850037dcb20dfde47b09df852636605abc48c7d2c09478031da3748000b87f0e8f12a0f87f0b0f9ec426fc32837e9a475d659b399cd4c9bdadcb629634f4c341deb64e685b025b27f18cf9c4d58ec75319e20d8787af804261c8190b92bed4e0642d5c76eb382a51eb94e46c66527436fb759c1fa941162229909bd22e9235d4ce6b193899e6557a808f6eba0cfaa60271c6cf53906dbce18cf84180f6469bf5907c517c8caee57638b0add33eb2becc738b107de8f99311e32588f3ef145f3e8b08384d888bc1c44053bd9938939320f42e3b88bc9c19f79048af89879cc8cf30c14c79086a126814d77db74106c69ec85f1b42a46c17e34cf1e68d5bc826d23df9a69ef200a638cf1425a57301e20a13ee24d6786ce5e122b1dbd1d548df490500735923f12db603f8c27e8fbc376b09d5ea51803d2ab20fde2adaf83309f1732d86a9a7096f4e9346ab401ac3003906faf61a11566e8f1edf2877e8b9e3c62f3ec441986befd876727ca30055b1a4da3b716e217a800498f872d5aa5f8052a48f2ddf1095fe02102ba9931acd0048b6db124d3bc136cc13c4adb2a4c9b3266977aacc29a775b59d9aa8e1709284306626e7b0565b8802ded982321efa7f2cd44d3cc28a3b0e20a3b3360c90a40acb0020e82e0d76cf4920340233e44e148b4a2074993c10a1c08492b6a10c454ad8081101986281079038f095a316cfb940128c894b107b6b17072ccf90876d4ab391df32a4fcf5e3cb0d05b48abbc2683e59ed7cb16b12971f2224aceafcf5ceb89f114b13823bf6227bd52cd54a2f7f58a3116519d46bf62e42b7ce42e7c642a3e0af11075cd5375994a34e2d8c51a25e7bcea2846ed146386a2de16638c31c61863cc34ea62d747ecb20db76ec4381a8d363eb9f5ad2377144de728c43fc06f9d469fbc94f4084056e6f36a0e95b03ebdde1f39220059a55b53c3b9c86b6e4ade2232876f84e6d16b7ca1f707c9e34d49cf9c86f5b97c1489a4ebe05ce4f21ad1e9d8bc731a16763f15aaf391dbf862f291d7f8a2f928a8783fedb611c8ac1c46fd581f148c75c941b1c146c1093274e1f97e1008528f9d5f950d9673e69c334362b9b541f82c6764d903720ef7e855bc2f162284716aa86ab01f2154b9b8c5d8256fe0953791a519c7e59238f246e248d7d04483a54163a04071ea5020d8235d43d2255d4ce160a98e1a6cbe9dfa80f24481b07d2af49df9749a549665d708e9f3eaa82e5d0775cc6958f0faf4aa99d9a727f644223ebd8af7469f1b7b5ad5b1a7c76722b11c89449fd8035bdaa3405e502a629e4f2a3ac5b0abe347bc4648a757c78bea809105a33c342c9dc8022fcd812ded32f0e90d604b3b6441d6bc942581284edfad888d3dffc51eb91359a460d9630f9d341d2b10d57f2a20bdf20101f0c59e8200b33687bfad2c644f65d9e1cd1c7ae6d5a1bb5c3cbde216fca0f30e03d9e9558c9175725c7e60fe4e9ebfecf939125c410a679c38065c5567662c54cc2e8ea1e2af5dc8d7392786aa572b76f9d08adddccddddccddddccddddccddddccddddccddddccddddccddddccddddccddddccddddccddddccddddccddddccddddc37c5aaac4b372676b852ba816a29af4559692d8a4b1edc3eae2ebc94e7ddf899f9725b591deb2e69d0e2db7fd8dea69c4487e99317cede92e4f27e2aee3c9dbd93c9b7b66132bd54c94b7cb2894d6ce2924989c9694493c969f409e5a71bbddb7c4e473949f16d722c4fa554c96b35994c3755bad1a5c94fde578a9ef48dbb06a0fce4b0abc18f72d395dea1dc7471a0fc7471a0f8f4d264944471cc632704e9ca56c5fba9dc99f827439c78bc1f9f4c97d1e4b234c467f2e9f29ef0946e92ec306ddb25c2e8ccce46bca4cd4924b7d1eb88a0c93a1bd1494e23b2c8ba09254505e510bea4dcc44f0ea10b0f05a18d27d6a24426eb249293a4b4d6da8f4432d9afe4233791302fdd99f924ccd9da6bbdcd8573cad1cd6524b683ee84d87cfacc64c7be2496989f6a80c617c7a76af04d3580e635a7e98dab7374eaf182607e7653110775e9129955b225765da2b09f7589ec32a5b55e628269308a9202e9ca91392fcd923d7ce8329f6fef3667a11e8cd3ab1d9e7d6b999212b3c176bc9c76b01b2dbe319d6f2c0886f31c99690eb6037361369850f4b230d8767d8d83d9604234a757ddd4c737dda1449efad02235487d7d0bf9f6daf3f3b4e71b87be807c3448771b47d36263d80ed76c9f3798cbe5c2e156a4734edb344ec491aee9c29943432d6f7aeb3feac2725c980d5d61664fbbd285c3e3db69cd6743777c6337dfbe06cc467a9c93f96c6d32871d203da0f87988868755f0088281a92124d483040601449250174c128c14c138916ede5e0389e953686747cddfd474c2ab270970c559802afe69553b0301090591859f5ed98001caeaadc14e10dd0f12b101d3f5c0706ba86129359cf87200c8d23e45ce0e8c50867908681818a1ce08ccb77885ad50bb92b95b6d838a2c45a08cc09c5e1dccc22e4c849190d5ddfab68171b19c222d44f17ad8f3b00a28823e280d3b4730ce1c0bf6833d5ec411f145feb03a256fa078d89b6fde01930421f9ee6955abba20e2f33d02b6b473149a0250d5de35e2a573884040403a3a3aadc33adf35b8e6cc7340b33010b7dd60326fa96a3306e29eae7241f5a86a0fec81a1c1403035a2ac31812a5094b33bc2066358203d5e2e2e69b8f9f61f680051845bd1bb33623a7675a4608df10afbc12e021559da5d1559220dd8e3f3f302925e807171114af2ed3f7cfc716258868a5d35bf7609f6abd3f909566a9e149453984fc75c7a29cca167b9ec7e5254dfb87e5c5de24b06595a7edeb73b6ce99691c506f673a9b1ba489f6c888dcbcfb7ff60d32c1e2c815c2e280342f6ccfbc17369954cc24a619deec07e6df32387bda3717a053d08c4c67ebd86131811c37f2e2bcc9b420167784f19f08c9517f04aba00ce50ad00aeaa0fed457e54ff55db3cbcd3406c45a1a20d7602bb0344f26c112725e59fea5d60625d751efd7a9ee7a5bc140fc5839145c505f479939b9878d1d53b88ae780303ba50e136f8c2c5850ab79d68198c252525dca5a038bc9fb5a90b210b44b9b6e49345be1b7f82dee7cf377e66bec9c4dbe34d66f2f99ba8dec405e64d1c887e8942347ad55128bec49c9df812bb8477502e1ce7c417a9dd92b813774e6da365f7b327f743b9898b4de7225d9c6cd5aa6526263b91a5dda414efc9bb8357fac81de77c73e9427dc9f59f2cf2ed33f34d979de449616f8aafcb0fcdd2ce3ed665e4558f6b9bc86d2eb573691b1bfd4f2aee1740bb0f1c85ac6c718c7614cf902eedb64dab00b608f10cd9e219718763f00cdee118cd335c38860a32875108f6cba89e5ddee073f0edd9fdda6b17b83714df2e5b06df1e776ab00303024019dd02d8d2bd8363b4f3f8e69d1e7cd0030c1e7ac0c38b1d78b0838b159d15151da4d021757770533c1d7828dec351307200e3e4050e5e98b8b8818b12951c9553ca0629534a14292514285048281e287bf2c4c9c8a40626a2121a9474279c13679a81692bc9a0a4916240caec8dad23188ce877bfe09bbdbb9df8666f9b76712e803236b9b500cad0e2b3370b3ab3616f1b1bb56d24906422d25426984684b1986093ce709a21c8b31366f0f1027876e2881c7e83dc2d9222ba34c25e17b6e647df269c55db00b6239fc0852676052bc326393b8c7cfb600a79067deff014c66fef9b2044faa5048847af60162d00f238dfdd42beb97d7c3b85cc9d8d187dec17756e5ad5edeaa1c8d259186cfb375da4df01f2c59eeff813e4bb1529f4dad5aaee9ce7bec1c2f4769714d3a5d7ac8d39db35ad6a16b2aec8c2d268b88d1359e660bff9d33fad56cdd46206cd8e1a152cb442a8e6db39c76a14b1043b6573f5385b81e8d5578f4841698d1f409e824b5c39fd6946cc081b5cd9669c5316b999327a6066e5bfba4328622d2d0e76632ece485bd29e50f6ec6250334a29a594524a29a594524a196594524a29a58c51c618298db1639452c628a58c514a29a594524a29a594524a29a5447932f153be6d8c527177e11dbbbb18158f9af74225c62ec685c72e06c56327d3df2f5426b7b2ad394d71dac5a4a0a0788c51452546cd51506472f016ed61bfb29a778a771793e2ddb56f5986e2591783e259c7ad2c8a6b2e5ceb64b07fa1f24225052505e5858fba1815df2cb7b223b75d0c8c8dc4d9ce7d2b61b32463a9542a959a4ba54dcbb08a61149b12c322d618c61806310ec3308c71523c147bf2e1a3ab78b055ee8d6074eab2eb639d8ff1e4c45152549fde3d39e96a6a8b73cd21cec55c8f6ff4f31afc5ac3a321d6192569d517ec371a7a8e39f1ea8d92340bfb76e28d86507cba6df5cab65a656d5c2971e505f34fc5872f297d3026b83af90785c01e8b53e30ceb8363f0273f7e95fb78fa186ff413db3af14643dacd686894c4dac4178bb279c6892ff6e58367d8227d59bb3e9ebb0b22be74bb135feccf4fe55c36a808cfb0431c8383ec902dc20200e7c1bb8be9c13786b14539788bee2e86c505e0b18b891100a7d1524e1e3c763152b23cca6717b3b2ed18d6c588a407511f149204f441f9463991d32e46e4b443f9566bed62a8d72e076f91f1e05927b369dab6715cd7753154e5a22e86c503e0a32ec607875d0c8b8f3a00f846c226494612894422359348f094d58d6e1bb64db96d71eb6de36d83db06439463012f5df3cd8be1274f000ebd1637793eb88917002f7900f0128fc5ada7f291d783bbc783c3f0a8bff044eec26b57f1509ef2a4a778dc575b718867d8241ce36707ef9f1f4121eff9575b02f05a3ccec7e388b48a3d001e07008f63f13895c70569157b0f1ea7d32a761e3cae07f5b81c1e1c0eca7575f0eb3bdc159be4fde5ed1bd8fe9110e53c862a2af24d72c32842c51f09f18f90d0a0bcab83a7045fcfc5b95046497ad501d67979e2ecb675720d60e58994acc3fa911202c5a3c7db01d6f911cae55ac53c12ea4640246f64a455277704d42a76f6d14fafbe38d2a2573edbf08529e5e6061f3ea6b4b1270b5b6a72e8f5a326a5f24187ffea0ed59cbd49a139d4ed3cfbd7010942296d1eb45d7e70e9d65c5a1ceccabf1687f6f865cb133ada1912c427689ed00ee21e4652cc0a74623953ca122124348078cde9757d7137295b115b6b9aa5b6a0b0d3c5e14c201f46826a38a0674ecf0ab1f0d3f1d2ed69a748a78a30a255ffd51def635f42987e9ccf4c32f429d4bf39348738577dd8e383c87f5c0ef57870377368e3e9c56f99f8b3b6361e2deea659d86104b29f0db241f648afd893b48ae58d435f1c2a010539c2023f73a857136b75470474c902db42ad62973891d3dec77e9dce33e7822dcc0d4516f630d84f73c521d7c7b97e28be348be9b3f78eff6acbc7b3cfa156ca070fcda5b97a9542a9a064dbcca1d75e5e0c0acb0925f98feb513dce653fce2551393e76589c295b295fb13c5c6aae5e69383fbf3dd8e383234fdbe36e70348e3f1b829d0fddf55f5b3d3d58f2662008796fc096306c2dbb611b7a7cc0c301f54021849e32684e2925e78a2c3813cbb1d3656d7973a855f37a3e93b4985eac35875ac573086bf50abee612ba292330af5eaf8e997fec1e462fe3f48a31aeccc260a52f55ab302cc7426717f3f0ca6654e3201ce65d63a1bbec72cea916d8d5af7ea55245e8f861c4c8456e9d8625ba3a443e72cc998785748e2541f20f019f84f69c63ce417c04ca901ee4d5f318c5b84816b78efc31c612a5414784bae85da7c1cd4b5ebba6756c8c7a4769e7c9aa693b5006f6d8b316bf614630fff80853603a59c88d5f8328bfad2cdfd002080c066357c42084ec8ae91c76e6b38bc94871e4d5c8827d0968104b24ba2914cb230bd652c89c721ac62f1aadc25a856941b09fea3167b883ed50771899edc256d1cd03f1858380f9148fb98d0730cce6b11dd882d11dcb7c5344af34af731704fcf003ef580ca38e3910bda21709170c620878acbbecd32a8c715a853977d9d52accb5282c7415e63ef42ac5dd20f85d5a853974d13cf8b40af6abd4a7083bd8055930c732dec176daa746131f3a3847f4052ccc6208360f5d08432f80875908a147083ca9204f6b0021f2dcca0248904779980510d703f1f1dc7a1e1a42d07fa421fc3cb75efee8811b0c2ccc82083e9ee4fa01d0d79c24dfad2c6c00f4300b1b6cf0080bb3b081d0cbd6cf1fd43c001e66f1e3e78168f1ed22af0e573e95d6539721dde0b4aa8afc23b95cbdca482476eaa9577c49098a2cd46bb516857257a95c5c522f235ad5f0743a9d4e27af3101dce2d56a028675ba4d44d6c9e1107ab21802771038b909609c1ca533a2c44f258eea628aa89185fa3605c84a4178d20d41bf7d3be986a80eef17827ff87383451e07fbd7cff78345fe63ff48ae207038c05bfff94772918c3c7568ea6c546f2f7532edeca9572a48aff8d66815bca99d5691801afaa4043d75d24fabe8cf6f2840bd62a79ef24dcb0e517c6c67c4c94bae8e1fd64f170562a4223cbaa893993ef294a0eb81eab246af463789eaf676a0ba74eaa42e0605a857d2a98b3a229804b7068a0fca0f0a50afe05605cb28469e3a8aab566b5128f746715d4849b655da9517866a591021c8f717bf6601841e3f808759fc40e837d8c5307bf0a369c732efc381b9a8b3817943194ba0be2302ce58c23efb0cead9e1c71d1175e49ba77532edd5515cbdaa77a65382b28e884a82ef9b837ef1b10ab3d9d8f68fe41a39df19fef68e8826c1b7935c34c9c3ff483723cf9e5a45eb461deb64f8b71efb9170361bebd5a724c14fdb7af8d4358f46aba8935cbddaaecb4dafb2fb030927be945c98c8427d656900e1f2435761dbab6f446cbbb6dd6c55b0d5b138fa018646af484ea9939cedca6a266056c91649583a46c03ab99645143cdf5e39f3206ca1f9ea27afa6e447e64d54d6c969c49307591cbb98ecc64e08f86ad9e87c26fec86327331ae5a02ff225e28b3c7642c8aff7a341b58abaf554ba21e816dff986821f4b306f5bf5321f7936aa67f70adbfc8de071d82046f038446e6f8e1bffc178d14c0e18df4c2f315f34f291c32e73f652d91da27d891fdd5aabd6f1a5e4d43792677a928b445eddb0b01fcd571c4270e6d96867a7114d1e0e21f8494ef2da11d1deee1b1516368b15b63d6e51b0edda1afef3c05be72ea66f6cbbe699b3c8b794ad884d094122b9c835278d5c132dd13f724d9b5d8ce81ac0b6b744bff5cea1e3edfd22842d1c5f7ee7556fa5557cd32a1575aa6a81fdd8d5ab6f7376ea7cd32b1c1be3645bf558d3b6ad6a355ba117874a6b932e5eb08d462cab7f5cc5413d620ea973a4de276dcc5422fa27f5761a63fc9a88e873ca29e59472ca780628633a14f9d69c0cf8d23fd516fe632fd468f15ef8e8239f9efd9ed3eb7ceb3cd2731793a3f3e95bd72b7b539a5bff36d9abd24d693708cd3b2f398e8d76329a774e3b19972739ed7c73cd6907bfcb3cf9b5b3215ff3f8dde6d99679a6f9a675dbd67997a10f9953da0541ba10b66c4ebb18ede2c89cdb2a27f2e89bf8a9c4b7d993279c71ca13d197e31bb668ee991c763232a8f010c6601c5ae7f1a39cf32af24c24e224e7b1881db065b2661eb77159456d52246fd4893dba1cd2a797bdec17733e23b99c9d57ab945fbd9edd3580a6fba34eaffa9bf973d869afe6c5f15bcc22b64928a50368d8293b36a7f73796dd8e357187c9fbe28d87837d34badff4b0eee7dbd0878e18e760e803bd10b6e068c772f011a38edd0fc31843b56594ad1877db78b951f65f5ff5cda5b79191cb1227b9f446d22be99da46647af6e7a25a402955ce45f0795b8f5170e93a3a4fcf8399aefdc048532b90985f293cfd43f912714ca9ea04efc64b227a81394c94f27d664724f266b4dd696b8bd9fbd4accd43fb9cb17b9f49367ade8644f4e2a119d6c8977b2d6492791355d921589ac485472d1fd445ef26da63e49923c91482389483e2a692451c92389443e6a91537b47a22b45d4b5fb6933f54772e4b136f2ee1aa06df1ebc8a956036e4e65b68b79dfaf5dc3b139e6389afb205cbc3ae4193c89e8d6d7e99acfd4aff27b8bd3e98c0ea019b9e61ee1d3fa23af9a8f86a84e4557bba856f5104daf8acc696382fd509dccc937c97117440be9c9c16f618b74126c91be2dc18a9cbaf416d22b1c22d75cca70ce57f7d63c6ad4459e7ccd8b31beec1a40d3b0854a979d8da889b4cbf2dbbb5eef15b74f6ff4a82bdd27842ddcfd38add3ee27728ec3441aa7619cc8e3308de3449ae6ec1ca661dd9dd89d1b779580b0e5c39ce367436cf1b3cd87d87c72de3d003ee6c387797f36b5ebecb3facc3e7e56ebcc6acdea74f94961077f637a9588b0857da67edb90dfb7a10fccc4164f31873e700e185fc23cb8000b2360e1083688cda8e648852578cae627829d95106762104c05ebb00e108e481d08b158e480471cc1959565d20ceb5ff69bc8bf51b7e2fc2b7d260ffd3b4171f1f0c54fff1c93414d5e0763442f792348327d74eb418e3132f9e8a22ee5e2638b763f7a56bdff3c1fbc6faf017018300000e3c50b96172e5ca85ca8a8f4a0924af1904ad9e1a373fda803eae4e33d31f9c81fbde4f411c6c9f4f185a9f4d14589f49163ca8e3ea67c74fe8822ea3ea23aeee309b77d34d9b48f251f9d3f72fd68fafab1f4d1f9237f1cc98fcea218bb6ed8c2d4eb17d168cadf5dcc742863faf418b6b0c72e666e92618ba4904ea3bf8b599791e604496a6118c74d979773e95b470476bf7ef7e99c9c129377a6b9e88e5d19a79cd89cd3ddab7fde5777a7d11c06045d784695734431ec87c7201b1ebb5f121e010880b98ba4d88d6c7a9ca778a39213caabcf89d11b7bfca7e2584a752ce5828894fbf5d731e7b14ab97e28a2ec46bc1b0eead3237b9ccef44606bde4d34bb1732e9dc6d6f99c44449f98bb6031477ed539d734cce7c531dd3179bde404e019d3b9ab0356dd8bd375b89f7cce6b9d3e728ac57bbf929feeddef87e77cbbd8888b3e94524aa95f02700cceb14e06730dc60b17f72b79ce8b76e49b882300cf98929375524a29e52e0ee95877d14b4428a8932bfa4a4a9e235dea7d767150e7b05a6badf74bc283dd109ce87ef5a6322f29f9d7f42f09ef39ff92f05ee49d7f3f8c36c85251a850fd833e15f3ee7e3ff4709b949a07338f9fcaf98e651e7c6c524aa9f77208fe01bae598689a5344fd20c3e2064817b0a8e1c1444f904215ae2c0057b4c1475e216413afc0232433fd2088e90f1e8e43cf134820a4b042cc639c12bbac04e89fc39f95e62e6c2b1b21f486f7a32c0c76ac03ee0a15bc362bde90822b6c825c51f3837a7be7d025be8c1cc23cf415d8836215e9d181e8916721cbe6228f46bbdfe83cce83e168f40ab6777732f67378c07e764f0868d5846997156c595165f153f8e90b80aa09d32bff399dadf8e943152ed0092b284301b065fae79205182cc05c01e607c60a305580a1024c119829c04801260b181f182c60ae80b10286084c1460aa80a182e3b8ada70693c154180a83c1cc295f300b8051004c02601000333d85613048cc00311d01f0f573a4a7883dd11ea1e0a4c347ef648abf1f3dd4cf7b586c21e4ad168cd68e1750b8f8e89984a0f2d113b586fc5639e9a55a5348f9e88d80507c5a684091a0e6e4a32772fdd671d23389a284043e387df4444a3091200abf91b8aed499ba36fc762a95c004bf9570d2139970d1eb5e6e27a21efc862a01cf6f28b60457fc96c2492ffbe87525d8c26f294e7ab50465f84d85931e758349cd6f2f6af01b0c1fbf3927bdf8d123f1fce671b244c56f9743c9c26f3a70d25bf1a949c16f2b5087eb398c172e5676803e2640f23491b1216c31f80f65851c72ae40da015aa1d4adad91565a2bcb97f17e15c685fe000353595d6d20e3d4d162f0223db4e20d53fc67df8a37a4c00670ee40d4bc3a7c59c61c1dd68113f3f933f2a7650ed5abb671354eb782848680a094cef5ca37e879adea9eeac3fcf31d51bd82392c78bf19f9f2a2accbc25a2d3b64b1bdca2981fd5a272767470d3f393d80b85f1cd1792be2ec2badeae8f0238c915ba91fe7704eaf3eefb1c3c981c66edbaa08a14f8fd1c2c8920a827f1b829ddc4fb4ab81471a31407b05b21242586bad1e0c0eea55f5ceb2cce7cb03aaf576ac19a854ec15c64d8e32452310000000025314000030140e8884a2b1502c1e8ac35e0f14000c91ba5074581da7498e29640c21840000000000000000a0098c0481c8e3466392ea1855164a12e800ea61d91f3b2e4f2363e88be3b18b3982309a6bd44871f50340839a38f40c174577e4591ba05eea0dab2c4b9d5fe34e83756d14ecff47937f7498ca4e01396d8b2feab67155e83c979b5c58c9c36ac2c6c7e8514d65d596432d5b6c52a20f047f7d089ce99b3ea7b1cba16b7fc6a5fda0840ce8d43bcf97daf36c55d040ae59c904026cf9de042861ed731a5611162bc0b6204c69e87cca70df5b71de856a899ef0eac1cf9fa2f5727ad2bddef080a1f3ac11c59509be7a980924ee728d5d7c732256ae230c7039f5c623eef716c9b5ab5fcda20499bc74a38785bab2df40bed93c6fe2b64050784c84d97f9c13775d64403c2a6af04c3e505bb3f23fbf55e2759e1901201dc5181f167c1e1f4644c77a5aebded1508c39750a3468d486e579e88c43c03f83ecf3c2c734683e34609e43004954113ee27ab808501bca5ac7cf1f23302a8b0f3b245c1ded5c8596e61faf457b96180f0b0c863dc572cae258a7a8abc404e9d1bbb9e2fa816cbf5b6979d3c90709035aa9b3533baef5fe52504196638ec9924957a47c4a859245503e510a14c981d7ce534e1fd9acae1da06ac2cdc4f6a71a91662d8d08678d21eb52fbe47aeedb0374264940f1a683cd13f480f3c70c3c80fcecd0e280fd35b1f361dc6cc60cd8eaa91587a824ab057cdbb13990979597c35827125de1b05e630cfd7d9a163915c7ca5c3c10f781d1ceb927448b670d829b211e10f94111b842bc58ee68f3d8eaca646344470750fa40ea4a960fac38361cfac06e54f3a631d56d02f524e06f419adcf8cbb83247a8ae6dddea93bc55e35abb23a375762c7d2516db7a231f11e04a449dfecb8536e17244e126d32267d189d833fb3db1af5f79a3a77c3490a81c52346f13b7deb544fa89ed42134c321d48932a623839568408f0fb98868c27194b3bed9ad6ae3db95f8b5c7a5ed3af7a1d14cb73affdd65c5b72a7092fb87653f06eaeb3d7ceb4fce23520cf1157bc73ffd5286ba9cfa6c479995e56403a4017e4fbe1c8b56260b17631a2a724a67a182f56a36a5ffae2604dbcd75ca86743789b7b6f168fed5e9cf2b1489091e4fe0182bbd827c73c9a8e990b9571b44768dd53c085e205169da5dc4a091eb76ef2ce479cf25b7ff780adb0320bd063a85acab982a263ce23b4e6c29b2533eeb271588a665dfb79ae54ee6436b9e7fce781ac574d03d1551d292cdbc7466807b952980331856f521c1899d4d6808d73d31b7f91a86d896e72b1ac51c5f5103341d3d5a3ff5e070c18a50a01926d60b3fa7da3386e3b548ce99b245f97c859b4fa14f761f0c97c374a63e444c2bc154064427fe609872aadb8fd8130fd30c283a8e5db647b08f0a92808f3714726503f28880b530bc44e89278f43f977b8b708ab6810cc93649ae960dd2aed99aedb40edf0a8def695bc77910508df90cc186af1c7a20314ef0bd6654936e505931138ba176b4452bda99dbeb105a03f58879fb63f518bab7b2ff091dc33ffee1379c32c1694ee0e38b70afbbc35afde6fc5905d207ef083a8664665085fd2306968475e45d7ba07e763044caea868bb90c424459a5302ceef4411330fcb3805596cd4ecc89f5ba98d5f3d06f35970cb45cf7b6a2fd06b9e60f13867ee90080df541f4c0e1c43a041cd9d9e6d47ad3674eddaa0c71eac0d186f23a189cd1d39cd1cf33ee2f587bedc34c08336a2ca7ca3e7f6fcd258980423e3aa1475b67747bba21af7649868e988114415d844906b62814599a5415d3986125fd748c30f6cdc6d9b7b7cfda7418b586dbd16c8b812884850ca3b1df383dee1d6824125ac5e19f0d78684a45275fee063d53fe4a314b0da02acd5913f979c6aafcefde030eea78335d70f53c15da5085943b6faf2bbea1c0e739e6a251800fbf103eedf751005e2350ee4b01706e54ecca74c87ca1a0ec3d0741be312ac8aa5ac7566c6dcc67a4f10ea401d061c6fd4526d4eb060756959bfada6ea3fb9a877420eddd1ac87589919dfbcff3167d8d32adbf8a1eb1960f03d26784dfdf1afef9eaa3404da23d758176cedd5d726163452b9918da98c395cf126cc7566014a5c3f4c80fdf15cead1d8ce048c192ff0d1bc36c9bae1113df1f2300ac7780dff248b50c874de4964db76f772f96580021804d980bf8f9d021a6c72053719950ce13e4e1590e423b911325deaa16abf99adae2f9543f3e21d239caf2c43ebd9b4988d5470d50ae2248ac3d0b90e7d8d50b45b3eed868211ad3445be3bfc7ba981ba187e6344b321376291a9f9166356eb6cc28055afdf6028a94f7b7aaf09fc266f823090386f90c6677ce8e02b92ce576b96c2fdc1ab65ba4d3c97453d4bbc8ce464f99023df5b4291d9c2124f1f5f096ebeb67925a26b7d51cb2ed59a5efe867d4a909a377a762af20e66041da91a2c63650fbb30f723cc874ec178c7cb4de12e974390177bf0327b247a703c44434f74478d9b27c6093cb8671277d140379f97e7b0cec9a4bed6a351efccd979cc9543919552563969bbf2e886c352b752edf9f468d058f21925eeb524163975ba0b4ad30730bdfb937f5580524f101d91460f037155488641ba52f6ef817e6a8a3b30e8bb14a5e960c9d76b321648882184f8e3ce32a27641eb72018041e79460221800d597101746afa813661824023a203eb187b6b91f55016c4c1455cc0e75142d65acedbbaba322dd2dc1a74328bbc816f723c27a94bf8c382e0dd5d993aea5b62beacdf60ec6fe968e84d5daa953f44415cfd781b2bf9a0c87952cc551d62cc55100adc3784fba44a8acc38e403da096c18b219d657d21a80d42f71b6245bd6891b820fab2c6dcfbc750ebff81324e953a73bf68213712b873390802133e17bed61a17856341d5b1a1baca7c3ba2fbe78822a51391147d925733b2f6fefd640e4c4ba892846846278023d113f43d151d1272db3bcbb35bb66a723e89e358cb4479dc66d9dacd3a22b24ab667ac6baab5d4ab58ace752fe346af6b672216f9f63f60b8c382b8de23e094f6440292bdbd83ebb53b271c87929380dd9f5841e068c996fb4a589a06e245bd71d0c8f0de96388e72f3378ac8232cb596f21445ed1e24481845b100baa0a3daca040c6c7fd95b0cf2a781823c2b14bac905201dc0f26bb7db3972f7cf71784128c55cd588f0ad638429833a5ee22f8af3d06e1aa8f5371198ec087d011902520e278800c73a1cc343eaf82a5b1fc11a86f54b56b309d44c429245684717196409886e3fa8a4e52f187ecda9cf035e6c34466111a22e47fdf15f578d4dce4b581ec4280c07b8436535b963f61e4ddde4db7acc047348dcf296528edb5ac22b736f980bccc35a79b7de3feeb49e89cec3424c890634da06054a66e8abc52a6f8bfde7b40ddd100f9b3c919b4a72ee69cd5773143b2438097130b2e035dd03574845f7e78e011fe15afd31f76f634e7e02898d2569ef817522d03bbf7b4ed8fae71d0096b065bf84ba7f5d4d8277d7d8eed4d48b7a276a3ec60669a50d45bd036a8c1aaaf33815461d4b3f6b54bae2ef37442a4ef032ad408ff548fee3b17e01b7396b5148445282a9e641dba879af0747bc1e962eb7a8c1c861becbfa9fee4c88231342c0c9cb76dc2c3ff5070b770f409d3db3c5d88408c20144f4c712c3b9e5a352f2b61ab2757936afb9b75f24c8518b34f5075066263007c33b6299f62b6b724046e31afff624fa1f052c70ce434495cd2b55897b14143728204e3535f08036404451490b2546429d697864d4c25be9580d54f7c72de6df742faf190d3f33c78df281d8a55d09cf2b0962a1a95bfcb3b704fb2e133261d7e5ef847414b09a3149233073354c5b2768037c097e6fe42167d47fe9ff1dc40b08a85f599a16b2f13c79252490c2c838447853aa14698cac26b499ba098f18564d4aa1dcc96e0e3095af3db33f939d9dacbfb55edf74c7e4c43db0aa626eae99d9a0f06c031a450b3cb96c2602087313db718f8895e33ed0db75b0d9db01f742dda4b889cc7a6031864cbd11832380fc9c6c0f7e525fc3227ea2d025bc76b6865d88130becdcc7122568f81a398fe4403c83751f7dd6df24dd2b88e90f5bddb69b179ff85481778648ab113e084793cac6073f7c3b665680c4a749450b8e919d635e86b212f48c3f79c5d4586309f204712406e8088a9b821de1d31cd988c00d5b8af675463a7d4ea737807b023e0474cfbe02771116364f1d9a07a6e8d580c8765dfd5fe19f4919b1d54576bd9c65dc0ea4600549bd53fa5a72111d81be46aa205d04c23bbf818665e9e3ef77df980a73b51bb223b8d9f91ddab7cb1da93e377b909b640457b46f562b47b2c70ebfd78bbdfb2574aeaba6a3c5e266fa0aac82028a721bcf3ce188868ab997d43fc078e4e19617b63fdc88cf511b1543a270dd3d6b79f538ef50b27725f3c508f905c9872c63a5d937cd55dfff1ee29d2ddee295bdb965b7b3db604b1a2ce940a5443b966d12952005fb1278c5bebbcf8d8276076f84058f4894396cf2a14155cf91aab3c435ae75583905f118c6811b45e388651388217688c5cf4d6abb4f9539daaaaa7cd075dbd5ff21f6781dfb9e7772ba1702f6c7c75615ecc22910acccba6d094b31ed666cecb92115920e6753e025712bde5d96d50c786df3561ca41d974bc72888a0ac5838c9af6f27eb7a4b32d78067ec461cb7fa3d754ef1b5dc165d35460cbccb9dd250d85c564a90d712fbcf49aeb4cb856ed872c336b7de42156f0233143ddac57811c70f2303a64994720d0a3c9ee8afa57f6e8903ba7bc3ab76cdf4acaaaf7f51c88f999d6c51d7436aa4f89285c82d9be2be1d8e3f1779549445bcd3d2834cfb293247381de543939df52978eec91af2a4511964d30f7315b4f1ccd466ccfad78c621918f0404a9c884f47df40136fc88f0215b09f769115d4693269c8b44648da58e93a6f65f4ebc6c6994d69028dd858c2427e618f1a5cc34799bffd0ff6b1793aec6981cde289a5be13e2c3bf32ee77e08fe14ce54c0a04cdd10eed418690f2790dae58a65b92348e3c7ecb8c1088691273e174e86cb0b740afd935e5188f0c211c627ffb429e0388e0ebfe5410c37fcd33263758aee4d0448eb7426a0da90041253f5adc97781e86ff9a89ff76ccf1498c4345eaffe328e969c31909504d0c80e213b120594386ec3a415209c825fd56991440afc3f8e4d4d3d4f586488038f2484b4631d368deb1e4f5210230aa2d3a99d23d5196b449bf8a699feadef8fe3b6cee154c4a53c04c85842261a7ae8914e4970ffdaec74a6fee999b7b45f9e8fdd94a32f70ac333f76ab0c50133b131b57bfa8e3bf61ace5002a506549e0118d9ac88e2a2b90371585c88375a2ee1e7ef7cad57c7c15d9556335c11c495c25b331b4a31e420c084a4f6addd461ceb5e71f75d763b8ab2408e84a04aeb2ccfd754dd2bd36cc90d8f363a1cbe6a514b6fed3c2280eb5fcc0d58a64c63efd8dc0501f83ed46f8946cdb2346aecb52e23b0980fcfe8f2d5309a18d5b168968b5441a1f869963b7332bb573320bf844de54d35e72677d0aa020c2a925a26a037e5ab39acd9f88bfbfc56a6616bb518529459923dc657f1cd24103ca4a286864c40eda5914632bee2bece42454a700a311400962f566d90ee89b6f8cb3277ade49bf169cd0ef7c45386d8625b40ffd279668ed55f269601a9b1ec8644ca34d98ad8b2777c250a6516be5d7609c8510c4c4cb610e7de804558a20acaa1d956595dc054a754f8eae18fa69576b10ae204ef9c166a150bbae08b80ddb88c6885af1289bba24a47000818ab12f259008b3bcdf84e0d77417e516375f3438f5804d4a20817fe3050251b34a500a12d7309db5e8d6fbb9287af20f72b5fe925eb7108d42a57590806451675f33be5a9046a6a24dc64d8d83398c30216bb2696c61c3cd830859b8cd87009901168de5b5784b4ac04fbeb5301a2b5a869724f9243c1b16fdf24b133528f2b2efc5320b9693993b07eb25b1ba1262e385a0f3448caf39a1d7765397a39c170aa1b2ea76be256832fde94cf5685aae4bc8b26c849e66b06af50622c5a4754373c976c257b5779c7721f6ec21ab746f7780bae9c2aed49195005f7e2d877fdf35aa6789421b3c1bfffcaaccf48dcb7100fe29a3d8b103420caebfb3d0a2bcd5a855377fb8d48e9a482b44a14cad885a2e9a12ff6a7abe18a24f30dbf915df3505a254d0f521d01bd64808281c99d17b028300941251e6a958557ad12bd3453d437818ad6aab93055cc78f114777d8aaeac4b83e825574b8977b54a028515cc06b2d7dec3e3d11219196deefcedd393f49c4ee8eefef7c5442dc2c70e145026201b00ea095f63eeb34bc3c0b8f109366ddd129c29e6de3fa2a6790574af62e5411a23990aae74f62ac55f81ae34931ee10bb92946970de8a4c77c9961cee1452f22fbf07845a879d4bad15b3bd5bd25a198f54dbffd7f310d774941571bc72cb9b27a4a56c8f57b74b062c7d54c884dea2179695e99e2ee615d8e9943121a7e230b8c0005388b6b50bced569b66b7e37280babb0cece3731ff471e45b321d9f321a3b8c045756c6a0a4ef00513123c5363a32aea7bf6db857d91e9c359ef1a523ca91e27edfd6a1092e9cf648968d5e81682cc027adc9fa53ed48467db3d62affcde213752876735fb830126482786070c846b399303206ca1975eadecc6bd2b277295221f1622b0c546e0b236c652d7202c788e48f78e569c0b6f1f3b66a4600790159036ef95a3ee29238389a2def9ca64be89d90a30ce190647458767368997c5b6992fc39f72add703db44ceca4e500434cd9fb6fbc87bfc5fb6ddd7ae9c772c1d951df2750f353c5ea2b81cb0d4857fd5ac77c917bed9041f99b487d91ed3d590ce40514f70dcd1be902f6d8662401eb049affa6e259c66246e1e51172ffb5ce69c1d16379831929959325c96f20006c7f57c8b3dfb4fbe99da6759ce2792ac7b4cfa6ba9bf274fa8329f7535d4de93ac5fb74aea99fa6779beeedd4bf07d8cd43d5eeb88dfd4965d7efd10d61380ce5438f4c7da9f29a743c3535e70582df51e5a84e6b1455be8dcdea4295ad7b457d2251f31ab2c9c44c23afaa371da4b19386966b669fcaabf5b22e06ac1730d8ee2b484b01967d869a57c98628f73ae077c4d3005f6ac82d18dee597ee3d443131b1815b21ec82b63c939c066c190bce14b01f4e8b4bf77415499eee0f2b5a9eeeff5db08bdb79badf132a4bf743b53cdd47d408889fee514687eff0743f72b342f974ef9a96eeffa5918f10fbdfc97dad21f69123f75121f6761cb8ef1c626f05b4eebffd115cdd9742ec9b9c12b0f43a90107b1d8f9ecab18bd5bafdb31cf9adaa960abd4a9a2cd9a4c3fe5fccfef5f589a631556d09b46904411fdaea816690c7876f9b04f686a946ffa33ff213227dad5ec55e7a233149788bb04b5ceaeec1fe3c34003e62d10af732600b67b4bbafcef4ef08d1bf493b10fce892949abdc3a8fd322e84abd30af03aac7024470e5002832507f25a8b3102aac2952b02900d7fee79351fa93cd0f8e0bcbb2c5f408b8ad71ab1c50350fd0df7475189873b7bc4e4d05e56aabbc837781dcc58d572f7faa42325ac35098f2bfc2b9681b48687c37de1146820dbf8cb4ec3962eb22fc0794c0ec44944520e493c759f68f7b1c71624d0becbdee798f1724d382913e64028c0a4558f53b9257c2fc4eb441c0f10d5290a7dc26ffbbf9f2e902dd6b6910d7c0d7158f5a536e6500f233f19d3ec9a619161b343fc93db3633f940117549a053562c8d5e12ee07835d690df186d3094879fa26e0e1b055ac9ac1819f5db6d155b75de8af12a79e1b43ffec9e1303e88b56b2c1fbe3ad5cccaf3b570697cfe80518ce375ca55dbcd3cc3eb48921ba6c160182756eff34c0675c3338a5c9a784269c05912f710297e97acc26f20a134cd19be1894de4e1f67a5b77d7a1c3eab69b9042820482f2175bbfdb2b02cef95d645dd313ce45ac0300e0486b7e045b54c02bd54719dc53e13e3124ffed09edc98a87a6bd4f2fa930580696da5cb0ed5d34e40862ebed61b5d53c3bb7baad92b2324f94cdfdd6856fb5337e406c85abc0e6b44e59ee4a2dd2a834d77eb2664803cef152c63a760b17af5f41b04d823d6039006e840387e887082286e38f4c510808410fcc5828eb2743da37efa139de86ff8871682854563f0c611eca8cb085d6bdea565eebf9db8f18707327a698c132e8451a1b0b54cec4cce4c158e8c24f86720424b841803787f7ae22bd07c8bc1dae106d2b2d41e18420ad59a4e5dde55c24f92de8a848039cfa32ff8ed84d502b16c0998135870ff15e83af28e45c05c47aeab41f3e7593cb40724c983421947842a382578aa62789cd0618087734364140704cf0b50d10791f72c49ca0826a10292c0bc06988a172c72278274d791a4f4cada1dd8c3775406609afb01b813e56c2670b1618d9963b2883b7d4e0bba817c9f1d60f49511a0177d68ec413e670fb8f800a1c53997d6f99597be180d85d871d344299212c13414c02a0228c02427b290da62333f5400a402c66585ebe4f7e97ec0f4621ff3a5522dfaef21dd688d24784d655ffd7a205f540df07f8dc5940e891ccbff7493a7410b31584bf429f67926d22fa0ec3a50f48588911888ee4b46fc7aba02cd6d08296340b6a63235faa10429b3a6d528982fc2e3d896138663578d88efff75f7ebff4d10b77b3780ad190b4115444de69ae74a6b5dabfb50006b5b1c34d19c616f398da4dc0193500e895f815f9511977f3715ab7f69da4e0bc7e9f68fba8d6f4a2b96a8fc6093b7c3da6a97571a85dc523017240677ec5f92291a3b932f278d461817858d597124b891f7c753b1ce97695ea4304e5459ac76a06b71717666c6efb605a5c8ab694a827ad2d6835ab01d7a385e6412538689522dd4494956f65eba09c94d96e517fefdc0a1a8251ec387f199574c5c77050df4100e83f53d9cb4cff22aad2135509c9b4d656fefb061b03951efb30283cc7a7f38b11d94cfce12c242f15243026f8c89db50c28fbda6adac19d514d804e0efd0c87729601539ebce55dc5981509573d64be8c93f723a2e8430e621511e10be4ee0a433e65efc90149a6630c56d4d567f8150138d86e53ae5576fa4a81e1e74e1020328c42589ab20a8e0e61ec891cd671d05d7a4adbd52a9a9f3aaebfcb0f526ae93fb8c30737d1846ab4144e5a329f366343b9d7b968530584ecd9b7926d3ab322b07fe306422c87f1fcfb634261e0fcd0ce6a06704369455a0862334d5c3254a7094b89d99e9a0b3432c78d044136ab184ebe0c48291af08c0813278dff918c05550a643287c555f9ba72eda0cc8fcad5c388d9c875708df3d4d90fad233b19952005fe16fe25f9a141f92bb9dbef2ce8f68de1080abc6944cb9b8d8b2ca9cf265bbe54ebeb36da294dba6d07e120c22a62b50a0f3755b400e98c1c278fcf3fd07398765f25606caf5908dd69a247e37901742f9a29013dedeea0d59156724b6b7ba6c5f73fbacfb290f9fb1e3af660fcd9bf366826e164a5a3577ec8662e9f51fabf8cfa8f31b38613db74114980deab7e2465d865ed92902d7133498bf4ee89d4d5d9a98fe22f323fecdf7416d317ecdf7b81be1fc7832e8dfaedc34223bd64488ba832210a972fb37f83fa9f40fc171144bde9af5fc691111d9f10685a2f0f62256aa0e7b63f21be8b0ccb6697b811750ff5f51f44ce07bf29d59a1021ec08e917f6d058a9bfa082bbb60d5ef4d5c90b15c76ce1c676bc846b95f5ed5896a4a2013f28b3ddabbad20be18e9edcfd09d2131b61da182b714273608a8af49a5a0aa98b753eb5add05f7df30139ab970cd145b0f2ca0d3974fe49c7e446af86d6ac42bc5eb9d4f7a17d52114cab81d95488fd52b900ab075f589bb9189676d8aa0f092a5f417ee8bc49680c6dec12e8faa1becafcc781a5d570e542b086daf760adaefd0ecb1217538805abb4b82290773108a9cc357f7ea82d227df4d51691281dd2d426d63bde8b4943b6bf9e7332198533fba08d586c45e03fd2b8b7ab0c0ef9d34b2c9222cee4d09b419c45941f10782bd7e415fcf124dccaf7bc656f1c01b6b22d2fd11b4fc0ed4ccb5bf8c690603bdff314fe91ee3f5515d0dc4394323d22659a49bbdf0988597a03ca778553dddaafcee89ac4e14d6e28f534d624cff74da44950e5088600102843169d27937784cf9766c1f4b99682bb8b8d60aa827c8915cccebf1b4570149a7f5fca78694494f44c428e8e89c92734f3eb94d8ebf95bc5ec836d003ea66318007124105693c02d19d8b2305ccda6f8a8db357f49409ed112c6a4602fb3fcc14d8fdacffcd1fd9d273c38a1681b374fd358243a95f57aeac4b1d60434b37042413fc426da633a1a0438607ad5bbff25681c9d938a99b9e688a5a2fc2e3dde5201800ad2454d4d45c3169b64b7386c24e04969caf3803f5ce5737283974d8c6989cb048e574e46baf698e495bc626784117629618cdbc3558baf069deebac428716f93db6e5ed1ec5b3ca5ccf5acb28e6387dec06af92200c8b954f10829b1754fdecea7c457267607798acb883a8372df2011b8ab86572c06c004d4e5cd1343080790519ee22b6c9d454f39a2dc8e68090fe22b466d2cecfd9e720bc7a1b3923c461e8b83207401b3b29d4f70ac2e7a27d6d89397607d3b2d383697bb26d8ac70ed9c1ae115c6ba86567c2d20e9577c8ab042ada3074f4330f072825bd2007577c72be035553985ed6cdc4f9a01e837f1b599176eedd97157c68baf157555502546ed5f851299bcf29079259f7b858e4e7b6b168d53ee433bee888048071f7f2638ca5d2fda0246ddfa607a8ec4be3b1b9971aaa179555272ca2b2146d144410a25a6bb5d4cdf8b8160f9025053b7d95c00939c72ff741c8ed4b5758c2a8899819af6d510e2a43b396ce50c6104bdbbc2d3d021f9190b2a5a3c36f519733c3c638e266639ab2d60b2540c11462ea9211f684d13ee67c5ea2720684b0b1a5320060b3e87184b9e37ff803173903b679fb7e1bb8df48e6051ae2417875cb7abb8558260f1c4cdc86c1eed2edcd36d6baab4c90202a87c2d622a93060a82258cd3cbf48a708eeb7c5aa60492e52bf78000ea57bc51d6600aba91935eef5b0bfed8d59249ccc05881d35c6760598196ad36614477a089a5eef288fd1ac63c3344c691b58ea4500432598db1c921f278e0ac6d514eaae0f0a0697bc295d90d43bd1b229b23447fc29811e11ae3ad8b954d217507082dede83856dd2342d3445529f446e3918f2351ec11ffbe4b1071364210ae46acb6cc78fe1eed16f5f7c3255b1cc9a09eba283e483b45cacaed2977d01a0d306e0fd66ea4acec73ad77336a3dfb5b24d567abdc5a03adc0d80ec23f304ce58c9c47e8e4c88835a44c7758dca4da1c56a9f5763c9177dc35ee4cfdf526a47994f40820a13a26658518d3dd4859df049f62ca10a86c1ca9a91a74f493d97c1b18ad8ffd5208ec6024b3a5c2647ff1a7dc1cef3fc2cb57195f111664a1898c629ffc4b4238d82a710157425ff53fd4fea4950430c553f988009882f2d1cba29da4ccd91f90333dc6a358b1a96df8dd1407a668bff0c39733de1c600d263ac98088d3a51163f15b5f0d50d4ed98633e22d685f2991c07498fc4a3221095a23f478c3dcb1fc975c055323f087b8434daf0e25a45d04eb9889f5596042454bd1559d65f77735e8378b1d77bd5e8491565af3d40d45df0b09a825be58465b8991e324ad4624c7b5944101655c3a2777180b4893c43da40d432ccd1f266410b3b706af451e77df4511ddf2d10719c1cff7b829f72393b845d5177bf0c09957aeb48684ad7b1d91363d05b4b5c96e0fc89dcb887e87e5d71359f742282abaa8ddf535b5c493a02894a582058f1fc6caee38f69361893d15ae30847a9f1b85cb493b80e5d66a668cee8abccb4a4d18a342a4bdf44f630fdc9c2e31ad87406e11f40cd42017e10c02a2908aaa2ea26d8234526dc2ae912a8d630e50e43a4646a45a62bb20d36bdb692445764770852fb370568f1ef2cce60b5042925c905bc10d0825a61d3f06370c715ecd948e65ba6205ba22dc6a43d309c00fb7adb636785abea00b53e6200f08ca4859dbd68a3cc67f7ed4eedc6b71e83c1fdee2db1bd91064867c8931dfe20023d10d1dcf9f18bb2c5d7771d4a0f828718c10a5a2c42dfca95e6c4aa20362a6888f9bd3f84137578c8c7912b15df7b0d00d52f2436414f104d7d44ccbf39f5c3223dad92ac3cc2a32bd223435b3929ee99e7147fb243c0c6d4244f1c160f38974de1d847bf5e8506d9b6bd2ae6e2c2c1908eda761bdf5ce2201221d252ea8fa59726da2be612220ba6917871157a7fb0913e99038c7826825da15b4d0381c86db5f042968b3fa4ec65b7dc1bd129cfd1ca238e230f2c504121cba631c0518741a54e1f156c1067ae8d1f50048980453d8e42b99d16e8dfe7506d3034aaf115ed92f9c2d6f0d058fb092688c062e189a2d9578a7d770240da9e1a998968ee3bd71f834945397c687262478364db8e764faadf13c427631277c6a301cc914574812a062a9dfd938de8a796131cea623d859d937b72d4b919d27c3a25c7dc8251e56917acb4f09533b1f5815bad3975b5c6fc252009101be2f37f0d979352a17be068497b6d55f42d63f0bf8b3213ce7914d7e781fb16586c88c2a7dda38688bec101946da6be714fe79d6e89a3cdaff0f9bd123d88d31a9bc4d08922067148610f8863e58172c57741531a40f7c9b190eb0a4a7c07c7662c0ab005d13e8e573ab1fe5517bc516f5e3fe0585a157ee1c29483d2461a0aade94a0fdca69c7d1d520606d4e6c85f8db427a34e2ea58fb8632404abd673f38612fc667397f437de810174979427137530a40874db87856deb57db04d50fe4640ec08239cb988bcf39dbf7a660c0d659a99c6014e339026e060bb44ffc79ecc1ba1ce0270868a9164a0ed906416a2151fc90410b498acdd9c33aa57b912809395f964b843b36432207061cf80ad1d022db55c57285e0c4fd5b963c8b0417fe16b6d8203ac9002fb9bdae5c9681834afa25fbc70ee5dfa55703fc7e7a0844e63cd30a9bd1dad17fc400a097e74ce7e2a365122175be320a8dcc48a65f9803019ae2b51e7e7fc6c244d9c67f35f6dfd9f55e42f7158445b498777cf66899fcb880ef9354032ce5999e351229800db2c42fe88822c4ea110b90be5f2a220355c6370f5b610c5384db3c15ce4dd2bbd1079cd6a55592b4624c2eb64572bab2134683ed5055f842b9a1b56d56ff4b6068cdc736415c977c2316dcb1d28088623c4d8a80debfce6e0336f426746649e55e64673e9a218d568b764c2d8d491389dc82ebc11cacc82d121d76613587c2197d78e08b66c8c88d780af3f399495655da81cac4e8132043aa91ea284fd861cc9224f41067a1e1bb2c5fedc2bc60c43720970630acc8c04a48f018b1b93a93cd2e4623838e38d9761d763901277b514378d68b718f58514d7807808000ffe53223a169555ed97e8805007791d826ec30f84684fba902143dedffd343d51456d234a3ecdc73fdacf77505390f5d0c6a1a542a7ed3b367df7bcbbffc1e224250f6efb8586edd38b7aaeddfb1afb22e94afafb9512720059fc39079dc53e90eb95f42139c165cbd6c0b6a81885ead99f0001811dd228d0f058a76b31ad16f39bdec866fd00e80aa34616288d8217c6ff8c47f1a30baebab0f304344a0bbbef615f45db7101d51fd56aea2f8244ad67a51fc8f3368b0dfa8320d992da39a0cb10d14e9b9efe804195c07a46217a82c0fcaab60e21c0c496c65d29129e10f711a08a37c155d9ce065a0c8242ba3a29638afba14e37a61d936e4ff2d0a10da2f54eafa439772280055c18d4cd3337086a57a9473447bccc2c85a2785a6b410c41770a13498d0efda9d3b9ddfe1203dcc147fc1bfe9ee4ea840a1b69f94baaab2569bda21dd9ce1bb325fe5ee10f0738ba0c9b20c0b3fa59a69f3f25df4d4737d95141fa5e141ce6c31ddcaa5322bdcff7c741076899169e6669b0156ee2160bb6afb8042b74b962dd696ca596651195c02912d2a7cd1d418f72c455dbb9b60bc0bd7403a4bfae08c5c8388388d929664401d7406cef2b5603696bd92a05403e6548b54ca8cb16d07a783955bb35559bb2b8829c7e9079de91a1dd4320313da99245343845392a665de46516a7d4b851d8419991aa5f93cc60c8c58eeff19295c4a2f5be1387bdeb9373b12a3009f5b142eb42e06e6e3ce6c0d64cffe1cf416c1286b417e64582b276d21dc5f7d10b89cf513119c8dec97d23c9e397286eb7fc50493943e2181c062ef400659e9d21b3ed110dc70df9e0a6e1c2aa86372f1a2c759ca031a1985155ebc37f742ab5ca0c0c57605bfd2b3d9482a52fb0cb579d29022663f88fa15d179809c8313af3ebe5b5fb4e31edbe11f8b206f6b86652756fcffffff4b608ae1e92f212cdf4d9394a1ae0dab8ffb489e1cd83f31a5fef95a14cdaff5257ad923643f679ef53c403b1fa024fb785a77059b0e46e95e6a4dd0a9b605b2a42debee312266d42f8369ac8d2f2996171295e3f8d504b0d207f5d4f43a06d3479b2789d75c4093de311b5de30e863406e0e1538d09a23cccb1b0da22bd448ba08a4e468b7d8c90ab5524f9268da6e4d9182747ba5e2cca4a239d43589c58681019cec4ea9a7d1a3df20714e8892d66835413addac669ce69c91fe92a4113d8007bde96bbc8c07396a14858002097a44af30769907d953c29e72fda7c8985c4123141ca3ca57ae78492eedf6e0e0f7943a3283e7350daa044f91a9a8e44f6a943a02c24d0f8b3d8c1b592a52659405416278d74a477b9b0f0f061953c1e3d79cc6056afd89d74cf51d2c26e354b4da3a9d4435c214803d1296c702a8a64a5c9fbae39f38ad0a731680c69bc3ab44654c8797ff7d09c9faaf7a44a26c93f3e241b59ae4077c46da95d8ef529b970178bf17d1a920cc56bc249cb23d018e1f061029daf43e6620bdf5cd2121ebe98c2615900f69ac29d4ad50e444c230bcec9cffa214a7dd13d7e4660ffd778735194f93fa993c34b7c65b84362310d54285a7ed3bb66965816cb9d41bddca622f1842c8e315b2fd8f92f77ad46cb82f09f06fa2ba3e5827eec70a6e9fcac038b799fadf0653dc3f5e7008a4625f4fc77e2a7924d8dd2639646c5c803ca0206d30e7923284d39b375126df3d5399a7b9745f0a477860461770247f083861d4ea0650d6eecf3d29205d229b303ba6fbe2d9dd109b64566f7d97e6b1f726e2038c5c170b481d0994e51415c2b7ab1c5bda0f67d3dd3f8e78686288b3398b66c1572858ad41a5b1bc165ee0b5fa7de0da33778a2f97d418e8f6d96d361bbd5fad293e8d7682f5aa31ee733f0d80c704218e9987b4a7da02fea67aa6237a45de57f14518b3bb6f8752127b72e9af8fc0e254f2ab0f8dd27445670c839de87e5d334cab5fa1ba98ea0c52ad216825f300e28fbc0037727af6dc143d3e1baeb3cc2840253b6753be786a079ca4a5ce54ac637968e7a83078847fa86ac405ec160af12f676f48d7b4384ec0a7da3edd8dbf25363daad6709c44248a801dcb1a1d48a878444098056c810b08fabcf1173fde9d913e1875b417dd42c2693f5f801b827ccccde1d8f5dd98baa6078c1ace00fdbd2c098a4f880c4a81b1b9ba76fab373ecc72339aab8b06f0991151c2d4f6f991af6d094032be5c3342592d18f7ccca3da3cdf006d2cc46dd002043e0858cdfacd7b6703f99e7936142c5c7cf9d7c8cd0029ec70a84ceea54fcb5c46ce6d9670ca98cffba522a366505ec3e82ca1e078a08966efd5a240e72ea150f62a67ccb751382bd85fd19a220ae197b2a64c47a7f5c909d3fd95254b63dd0c7d7275f72346acfbcff5926f12240b0e9a606999a8bef4989975573c658b2e55b9c5d5bb9568ccb66e38d7561e1431ba812cd5695865fe373cf868371bbe4671b931c3f5af3a57dc08c0af61d4b16dff543105a3c54920ababc16440869514a70e252c00cb67493de00c86daff1ced8a1154511fa2e9702c09219afe7b25dbab23031edc25a80e7159c21c0d1829f0614d727a3234d8fd77714012224e9e53454ac55e8e277fa373d83992f80cec0e42eeb598b323ceebb1b029e06140a6c6fbfab88f53fcd0e80427b12388fb0835f1ca0fef4360fe609a08e58381c8f90615b375049bd000a6aadd27fea2667c94a35bccb22c8c9f9d1c1cf07c5c10a4677aa991538370f6119c36d9ccbd224c89c096f169d2fa266090f6c3bb71b81c53554faea23ece6f39d1bc482c7250e7c3249b9e4a1f6d7ad4c18d956818cac00aaaa0bad9f3fafa526affdaf6e3f9ba61d5f8d898e6dc81f394b93dc1000495b387c0980a322cd28aa303c89011096b4213576a21269b3522e68299578381d20a227484bdccc0d404765a4f9ff2cfa53f596b8a75df7f1f0747e353a60772a6e7a5c22b101cd913930e3f980a8b2dae641223a9a7b11a036d79a4eb966b91826039af303fa88201eba37132a377251a7c84c620babb5f34739ab9776fa303c277c6dfe9084406212083f1c515acf06446c0c7188be9bb893bfeca02b297978672ebfe44b9328fd7a57ee22efa728a8c3fca20508c8f9291de1ddbe537c3d54ef33cab82a580169a45bd38fea2aa2a39432115b7fe78cc759e10844f2482d1553a08ac9249df3327df1551e4d10faccdb0b069403e3df964ebb210439d63fdfd30cfa76445b172b281b4499b3fde0e317a9188f4ad3540932858ccc1439ea715d9f3b3c61a2362ecdf8261ceff58e4ab620123488eb8983350890858691e8943da82e892900f9a80613a64ffb8c286c2faede06d143b1338db451decef954c488ce56f7a0f02a7a0b3e701ced1584125f9b1b3421714a418461133ff8fa079b1d597c19456de2cf5174fbd863d476b0393b5fa1be49d07f88dda03f98b9d2ea8150bae2101f6e9a8a8f05cad0857421dc06a55476f3fcc3bbc3cadbacd089c2332b34bf823ac37f7673230aca7f5821d1a0160e84103417c44c781eafd3387b9c1731048552907c98079f210857ae78b3890e0b5f401a99c9b6febd4db62b5a74189d316a5d9160ea822848afad02600548c3adbc6f072f7bba7f73425b4b3b0202bf7301fbe68710268d95861eb1b635a3271872e6fdad19279a2d787c74731f02b63f52a53516689542ebd1b653c89672e6cc801937308ea38fbf290873e151cfeeadc71e23d96cd5342bae1ad066db0bec60d43159c898156c6617507e0d65587ea86b0bdd6d558e8575d16f02a9ee517d6736cc7f953946bc2c5ea0d55fcee509abd3c74b0b758f5c4f961b13f185f653c3bcdd5734f736389690524fbe95de0294250b8adcb2be20e6829dcddece546ed615c1c96df790e76013a33aec1a8b45ad6f38c7ab4b7e93d15e5e9a7850c1349d8e85d9a2903ffbc43a8eb3d99e2900f91ad678b6ab3dc1fd37ae9ebaa26b77a9cc88ba9849345b0946b48c7010cae240b3fd1b403363204cfc5f60ad8a6e6a9b7ce463e87e95267f863b9b5382924b9e83c83a18698d23afd6d84fd43887cc776ffcfc77e8ab9ffc31d8538cea124ca32a814e178f0d925ff89da6814994eeb5706637ab9c60dea3024596f04adacf7e529e847ce5cd068cd9dffb687499e90b64afdd04013809a9b16fb7555f4806a6298b3a441b36f8ebc854f33d1de9535fa28ada83b4bca47ff96cc731b1303419ed11e78ef815c128723a42916dcf61a2a85c3ff72287828b4920f7bc04710c19efd74b041485d1613873e4818b226e574e751561614cdda88d1044a393cc97e5918ae9bf7ffc54638e2617a7a614ac2ed69c68a345a8cd444441e456d6686b5b6299719f7b4fd54be74e74bebf95e0fcd5b631c0a7173956947426caf8165c07c29b61bf2aae48cfd88a00cef5f6f5c304e62bc4b19f8bad6599dc820263cfe96685448c5f1305050cd10cbe472476164151225f62412b24d28307118512ff31d5bb088cca765d4627c997bdc98678a29ae78e4cfe29fcfdc5adc40a318feef7d7b8b642aff3a2b4b2748e2442808588791155675e143c3dac7d3629a7a502d9f81ab578fffa883e47adf729ed4f9b61b6124f99aa17e74040afa0da07624ffeea6f4b08478cf672d46484177bcfdbfbe0ea8ee317889ccc5e6d0954616778a1b60d98e3f495d60a204648dfabef3338f28371d1aa01c7ad7b9747bfb5a954ed506ada512d9b666eb17af99cedf6868bfded8a415ce7baf38931a398ad7d7b353e7816f01d832d8fad16be8f52f12bab85388fa40b342830c6e0a5f0e2ea9933ffd9e30e5935777cdf48d00e07ee5fc6b543120fb6643a740fe185c466133a9ea092913ced7046fe5b6c1848ccd7773ba705856813865f7deed2525a97d9f8a0121f2eb687d9d20da681c80abc21910516c5f670d8b2b60c2bd7d30f03dc5d74d912d86d8b6a80a58f9c84290da603730a3e45b0cbc4b08b2f084ae47109f3602759c8d9d6e3133e7fae97d16f387d4f90cd73ce05da0e12e3afe442b52c2a2b4f22d36192c20b5a49428f41ba0f516c5c16c27bace6e9d32dbe37b2a37605af051f35be2a384828629f28da88cb33e369a25d9f5f7a852d998321e36985e4ac02690d5c88eab459a0e3871ed36384c3cf1c02a52e82f4fbb783aa391b9a255dc93b4a838d0cf0438fb75c8efa99760bfffaf5cb383ea3d8bb63c0c8d8463efca6b9be3ff4beecee62304f43fd91e4fd935a87c1371f7da045a24c28251952e8c6c49607dded5588172a7b80d302d5d85dc737a0a8b6959974dbcfe0e57db052d4ea5eb01ffcfc158ed0cab1289164a6f1efc1340bedcdd259c16e2aa2fa9ca815a744674fa6e5233de7dc5a35cfe89fb4ef56a7848982cf05327747d8357602956ab288282724c269a7a36c7529a9169d8caeeb174dab47e1cb60b1cc59a53fe31a241e2a0d5d0b2ae5d0620d5f98de215857bc5746e2e7156f7811386f03e70dfdf976ad5bac2e9cc0eca38619dc695d764c6df2323ad4807bf63551e5180f9355be93916b25477198485665d1a39e1af56a526f06e3a1883c8680ab19763c85a65df8bfc87e9e2152f5630d6fb86104b2a51451287ecc5055431454cd40196975217bdfa80a67d91a6e3aa80a46e4e58868b58e2ffda5720c5f593e60b005ec9adaf2c04df404aa4abb1ec007f4237495de7d98c1bb1e2ad5f288cf241433011acefb4c68202d50edf66b4fcfd9d7eb3242384603792aff12ac9cc34e0028610710ccdab770608511058d8bc30080a13fcf49dca12b6b366190fb85c0190c4fc1f5e5c4b1a417cc7e362c43a9e7ba026e882d323baef90a7e7ddea0079cf737aa1e1cad21fa9ed4897a90805517f2d684432ae4bb4231db814802d49e5952e7c3acdd04135836ac4c5712056cd5e681c4bef466fa2168c3fb0de2d13e5f5f10ff44e5cf6915308b378ab5490d9000218a04342b9e23fb0df7a23d4dc7cc98e18b98da527bb76a826af91f20d1e3f3085fe0844cf07dddaf1b878d0bc014c50e490e1806ed7d5606ec82f6802d74d965caee9fc79527864d6037dd55e433be81acc3f08782d2d7b17f1732fa53dbdd93560b1c8802450fa4a0b9fba826498666626fbd19c8d042021b6095724b1c6037ad03e781b2c8c8e181533669eef1766b99d66c96226800f95d57eedba16933d10fc2c08a5d3fd2d533a4cdb9442c3759aede696f571a0cc909fa0589ac278de9a3a3ea0976496f98cd990eab8c18ee15dbd3a4e6216c3359a650433b9328a5efafa1c8c954e7b765033aa0828efb7a9849069ec9cffcebb44467b3acfd54daf81e68f379069e4e39328cfd61adc3595dc2ce19fd05b53e87fdf3c99a8e57629c4a23d7e09d79f0c18e671311967092a1b63e6979a8f3a0e4f82348b4ee13494b473bc476fca39cc02ebac92a82aeb7e94c8b87d478952399ad3822fd6916f54c080d4b5c9504d3489e70f4943cad793813878c8bc77473663da93ea610fa00ff55558859687302cbe048a48dd67d456c78a23f2a26ded3c4b2197980e2f7c59b837c4b2a47e657ea5804d2144eaf904e3b61b682287ba9e8dde5657f126bab7dbd96dad317ecfcfc37c65a1e793c374cabc61a419b2f808b2bd688a0d889576bda4d40c6db080be05c5050c6d5e9a4abfb584631b5198add921f787830eaf30c8363ed3e48cc4f3cc669445162a10bd6e3465507a28b5d3aa7d5581366df608ebc7e86a32b506530a26357d664533545ad4bf1242b2fccbe015cc7857598cf4e9620aa3cbe6d770956ba3d1dd271cd8e54090df69fc4ebedebcf2869662fafbf8363d58d358c336bdd8fec0e209983b5d0c5ce0a1f7a99cc520e7a40a4f750ce54291b633d1b5e7bac9532451c54f49992eb3a53e8ff32487e73b232e24189cd0c219c0089fd2839c67f625e020cc9ed9d5cb42dae5a3663598f1aefd0904917cac8c288ab056255eab11cfbc276cda787732c650840cf0852878cab151a4e25ddc43630ad52a84630ce7749275e064fe516e5b141cdf9b01a790d68ac7b68036f14852581e8f9ca86814b5a5d13db08e68b6060d589e36d91c8cea0361cddca416acd1b717f5a83a80b34e4d054451c24a1b62c8d8265d7fc61e4a15a96d14efb7d6a321be9a674f9656e4126ef6ccd982601e1bdc91c533491672dd0ea90b0939ccd96ddea502e71d5e07f4347e73c2811d9ea502a3a745eb5674e335b3c6bd035d1b161c0b8083047d69b5fea312ded572aa79992ddabfef4917261d3abc6625adfff71db0d3c39b12407fe6da1624b000390b13a8dd007e491b43d05d1836778cc8a91f2397a8ed15f689ecd35988c81d8d2718816235804c95204440af269e091a069c741806a018cf3077f8275b585b80a9fddb4e6012c5716dd97ed072c1ec3247b34d57b131ab84d08705949707028ce814c609f0462b9caff0832a93c534485edc1157a0fbc853c64d767a9ec8026cc4280e60404f78e2470b932e9c07a13a21eff03cd75fad73b022c0da49a0360c2042edf70d989201db6aa21f1f95f131bfe63fba2a9a9d2446c2f5b96a91dc4e9299c41b3b1fda011dbedf25a40ba9a4a970faffac31a4afd403d2b9c992e9e3b798996e9f03046ef30297c84b02e9b8fd57552ab8653a823c56a8244c9549dbbceb53bb9fab21b60a88dbd7c1d6d3032e18a73bbfeb5ea6e361581a8030c651926f10fecc91de8a144e82049007fec441824e636aa36448c07e619f146dfcfb262ac590566419e8062ddb1251b31180c2085df7115bc051c626685809b42eda01de37b72f3d901bb7330e394f1d31d84f4350b63dd7d61ec1c83e734e5faf2596f62ae00d96edfd699fdb6a121794eb0898ff3a02afaf5de56c21e87aa2e3d3244e9565bbbd79da574185a6aebc4a2dfc068a9287e5b4a47988987e1dca434494922e0c4a77a86d3fd786b717d4ae16cad535320ce794388acb27fc9e4fbe66f07bee2f5a00dd2194ce40ad33d8f2ea5361d994e36cecef97859390defd3e91c0da8493fd4c71447d544ee491998322a35a814a8583b7b1bf8aca560d157465e99d6d7c90ec15185491c43f3349cb564fa95bc160f1f34756b8bc9525a57a2c563c265fb6ff011b0103c0945f93156dc2817ef57d0bdf98c71ab44318b521ae71327d34680f0972c7e230441ad119c7f62cfe26efd68cb2a138202b6ec10f41c673f06154174c485e8ec4a1a331b448eaa45e5b65c50e999351a4bd5e63033db6b152488deb6a8ce7db637c68e94f14256952c227e6c3f415781c71064cc02008140a13774eea34bad8768417ce86407f66202a60e9c445961f4777573101cae86b636b7809b34dadadf800ceaecb62a58354bb0600b4a2d3b2fe22b9bf7b9d5b936fe7b14792d53bbf1275d795fbb587356c89661ca29021ae4d8b4b9ee2ae9f77177f37fa31f40693f9080525199f8a49fa9ab719f2d90660dbbe9d26c93d48acae54f9593d5368c22b6a117e88366b496bf264a7a6c6af613146a00cdd6c1bfacff2db6da18d3cdac881adc22763365a22dba3cf45a372deae9aa6cd86b5ff6410d9e8b4f171c45b0360ba3d06094b72b6d85344134c4fec52b59a0229e7903070a0a8d3cc0164584a958396e6397565f83f9024767c58b4cb2d2242437d93c124b151f203788e8f015e362cafcfce44436c3c56d064c00d72c15072ee45ba8b3cd79462c27d4416aaf651d5d5516f14a9a9eb1dda1b88016c8a40214047410adfc72ec6db000295d3f09514c316aadc475c9cd032959e76579c045ed9523cb6cdae459af81ef408b65432e35295dd963d6cc6c094aa8ce0fed1f53b78727d914341b4c7537cdc483194debf2c6073d1454ea750ee3ce39b39757af8ed54df8e1ae65348cd6942e1b68ca5b9c592af95c903ccbdcfeab4c612867e8cabe6603d2a52e032fce987ab491572dca356ecb71c1feafa608981a0009162d997a515e6136e2bb23cdc59c1cf9614ceb515d7d278c50b6e21365faa7b8cc03c39361e72000b6cc7afa9390fa8c7dfc7f4800e4a945ba6c07415a3900dfc7e06d5c56a63f214b59f39b24f301994ca6972c6f23c32e65ee5dffe3992f4e2663e0f31e0ad876dbda97b1f97a441adc58ec39c859c73f9b447c0773361211c381e369a1961592582187c74ac3305e2552a616f816e6b69a9966f5c74210f42d5ba88251dafc665116ba804cb22b89bb4e443c89b0cb5b306c071b23d70f908f19a640c9bb72c3b0ca07f78c039ddd649c2cd584156519160a45f7a0e5c5c9537224ba93782d53115eff1d51f88eddb255905abf78c1a47b9be37fc5b706621c8b0e6bc2450891e981e25e4f2cefa4d869a0cc84a488a2ddc2f9f31aec7550bdb68f04f1c32d59f1c707cb5c8ec7e13666ca554b4511b270ec630f51885ed574f96adb30b59950eac4bc464ad6d26f53d736ca02e1829e2efa1638df9b01fe5131b7320e90cb25c331ff881ca1204e0f0afa63f89ec746535dcdc8be77b0910e67e410e067c11cf70ec591e789315dfe9604e9cdc2a1e79d124f11c7854ef700f7743209c3a2c4987684b9af5419819abeb04a1eb28e8a148b3763aa800f5949168a8220113520850a574f9f0557a97437929a1c7a21679aed31a161405b7f444c8a5dc4c91626d8173a79d85d1979dcd5cb464e0ea4957ba6d6a54b215782dc1531b18a6a81bc0bf1436cc4ba41e56304ba86cc29c9cca55e19a80cf71aa5539225f2bb0e5f834a93c4e93ecadfea3a504cf472f48f49cf47fd8195c3b63521d3f3cbda25bbca368d15d129a64fdb44a96071cedaa6bdb0e6fbed9da397c5f0625d2e2d4bd29256a4961f51425f2b4f08a14626ae22e633855654effd34343c61ee3682eacbf54be07a74cb75f72cbda84420aaa52b3cce890e0eee1b71edba9ac9fb9a0e2649a62b6f4b7bda4fb771a3b447069069506303b0181540cc0b75da9cf15bc0a11d7f7431917cccdbe5387fc557e4417aa03c87cacda002ee220200bae3433292858ab10a7ada4d9765c2ccc633e6446404bc8e9cb2f7e0e0e3b9bc99c003fbd18b830f4b513c5165b769b565bde9e43451726e7a2d17137a9ee53e50fe56cff246740f425a6137bfc237b539334d3f0b5fb680571a54c03e4d9432f045277153cd8509aeefb9eb2307cd6157197534df5e623c9d264e30041c04ee21764a7dd8c6f2d16c7176c80cd640127e15a912a5eee5f0424ba935e7971a7c5070f0a5185012289813c0801b1f428106e20194449f9eea24834ac4fa77925d9ae84a81e4850bc939a7ab69abba80170e3a2cbddfd8930848bb1e271cbd8094af65f2c2b4d0cf96a52c04dab465138eeb65ccde5cb247ba03b340e4d34a7d76e60cdac595b57add5dbb3b621e0cb1eb86cbcb8660bd6fcec3e84075dc569a9407af5c32d4048dd05e66e50fbb9b9dba076f6133988fd2c6b8809b7f236f0c7ea977e28f2e2420c9841c94cfd03f16c759b84460c358e41821ac2c3a96e4edc9451f7db5a8fe95aec423a2a86068ba0a7db179b4de5f8cb9508c8acc4db6e8f3b6a881735cd9151ea448e501a31b711cfde02121e1a57d393c5da5b9ae2884699fa482d21b274fe6968c02813b92527d40c6dd7ce90170fd620a49121776b35c25a45664061c979cb829c5c70c76793f276c4781f00989f3bcb43864bb13e10ce8818e9805220ecaef35210d8eb4183df6df2d6190bb7b292a32ea24f3e79184a74f6fbd29da8c8ae222163af4e358e7d1d0f299fbe33cfe8b88a954671e834be3697150f6d0cb3498262a9ef4b7d0c2212dda64845264ac9046e3110a91efd0dec92f87591489fb1b0c5a048c1438a5fabf21609578c5dfd61fd17f624154c536ee9448a00ac79da15cc9d25c5ce68943e74bff203f87e0819ec40be58fece5415ad4639ddbaa2a5bfc172f569b7555da4c4338b47d2347ce5ae19d44d243e1800f1f884941e8975178bd9d0d1d1adf8b4f89885da9578a46e0596d041312d921e1b1a44c5730cd638edd5ceb5154573460548a9d92690ab8578cf4d729931a0b056b4d16cacb673a02fcd2c8763b8929c5c080116896a0d44177d3f00d0d69c9d0a30f8dde4730539c292aa8630a8d312a9a5ad8c818343673bcab3191d6c033204882a0a50718eee5540f990b29b351b5e1766763bcd412da84eec756578bab80652bdf982e6a1a4dc6a8aa0e41157ed68ea8aa31ce880988d5070894aea362bc5a0d7320023ec2c32e39de4434b19d42d68085baf65de65a3824172ce8f32d131a80a133e55d9005e41cd21ba7559f35061f5f1512ba1ff8ed1cec1e8a0cc02700605567bc8b3adf5a44dba821d3ee52c888402f767cd779546f28fc88411972678e3b3a464048488d71bbaab05a7bc74701f2d2c35e119ea0ac212243bab2c5d24ad12ac42552c08de47ff9f97021132dfad65b970b588f2238e78484757810c04f56832354143b84e2cb32bce78d5bf02a3a7e3351c4193ae933d885a569e8f72993b8b57d4607ac2036ccfd6b2469c797532ca60d51559988e10fdc284e42272ea9f23c2da98221234c57ec9009d7f104ee81029db9726c0165fe2703993c9132f990b6bc2abfe8f5575df19dce15ddf25210737295728e214265c534206a43de5cf731340a3c14bac3b6ff52c508b21fe67129741f4679e2c89d9cf7ec1519c480249395f5ac683cf79e7855ab4c781d6bea91a9553782a915113f5c534e2a622d3e1a60571c9a5a8a59560d5dc26277f8465003121935d74cf03dfa9509333bbab7b314bc0a9dfbaee4ca00c6113fc0443f6fdc38987ffbe0d22349f749b8b03402fc7af0ce42ad419c156f1b304ee895f22ee879388ac0cb289656fceaf36a017cb58fdb6d4d50796fb8411558c4e672334bf9cb28a6cda6cc604f8213b8b2c1c65c90407e400d7cfa47cbe2e3980cc8a9aeca7a23f356651ef0344c5a79a882191af114b5dbe384c26e042cb7905bee51fcc7cc6d7bc8fa494ab19664fed46151f83c6eb732817b04710a746b40e61a77c9067092e9e065ab292aacb03d48d650935fab43fa80261b29a2039a2cfc42e6292704c8c5a5dcaff806985a3706446f40772bb030d149d08ae41066ec96785222cd4bee86b16428d8287d9f1e4d8eb4568380ab665b379a58545a5dffa52fd2c39e016e1919fd268d25e2cb0206236253300beee38965ebfc6f340ba75df89bb1ad5856ec15cb7cec82b2109860b6c6d08eea85dd9ee37c10aa0be037c009a1ccfa68a3a90eb5983b27bbae261f408ec80dd722b19e5ed3a967c59d37ab54106a29b7c84b45530a04e0d0ac6ecb390fa146d1419a65a0d754e62eea2628036c0209d0c537976632b7c8cbbb0057246c95aa6c48fa5b8f6af5f6d9f8f839492263f3a15031770a6ee74063426efa6f39f04d4a9b61713be8617d29a0ed290a2922a1fb1d28fe0ff794c9b77c4b5d9903cd6ebaf5d9cb7aacd37e0a88ca9936db6534a1a11f320b46676d2d1f63e1549faaae4a2a4812c35e5c247188951729e882d4ea73ea22a9fb25213bc7eeeb0caff25020c9106a8e6d5dda05374c70dce0f643e84cff0377a3fcb354f920d6d0844321f1a4dc2dd0d2d2ea6aedc3c6be55ba311de31d813a182b40d6311940abb59f9686f90260bae6409374b56ecb7ff60a42a4a24c2b8de19f4a385a30c185fa0a26a90bb91cbdaa90f110d76cb3080ca6b981c9921f18e6855419c73fba4aa3710ce40a004d9e06ab99126c1492b115b79a8677c8781d9525fc5394b20e9e3d698dc691d8cadb0cf1a3da57116148ad3679e9458e391bbf8b3fd48e9299dbc929910a25b3d932f424ced4c6103d63e3f406fb0827515c92d120a5a4accb5376256ff7357767e60cf9403c72478fe01df02e5467f7bb906804162d42f9653783e9d69205a4fd3d455150ca29ad2ff89b313780521f790988aa047974af682a8b849dbb1b38a99b0b8b3ee86c0864557c2af5ee2b0fb88b8aaca5f273a7bc5f80029354c61918f76ad890e301e0aaab0e67af2bbdd958dd5b25338ebaaaec6b250f94917e31f44961b541e69d8571b05a5d1d1382cbf5f07a1284f85e64f9e2a3a5c547a766ef389126544bd0dd011696ab206d4a76fa0ddbc53020e4c7176d0d62adc1a4fd3957083c83ebafed1fb415fe16d7867ee0a20cae874f3b8d889019a7d767328f35e3668c4164c11ecbb8fe90edbd65dc8ee5e3795bda8ca9c4c451699087cb50b3dbe9413bff6b255d1a821d91c9cd05876cea6d21c04accd333bd43d2bf1594564991ffcd8c88a167f14a0610dd4f1d2124e19a09516f45ecf621f77dcd4d8dc83e1d86e981bf14d7e71b52417dad4acde68025a84900192830389b167d9b3fd3b6ea56b6a5769b605a1e1e152574480b5f7713b2bc8c570e88965743f92e6e082a661b35776d027de887b0d523c17c3dbac3eacbf42e7ab373465edf4dde61d68ec7f9c8a085b7ad9387acc085396144070298821ca79f70b3691baf09bdd92114b053ed8c6df623861d7334406efcbd6653b9a2fe17061a01b60a61f1dad5ffb8b152cb1d357c7d9f1e92f9e956afc386c9da5777bd4a3d8ed484e11ca0c14a681498ca42d04cbcb1c61bf2af0b2422c2ea1e80c466548c3ef4cae9d8722d50c3c3491f65daf55bd135e964ed1a63eb979b46b64d84a46a5fe3be21668a064de88847e0de9ddc52ed589a0a6b57ca4adcc86816495c32963a3acac3d5b4da1a5574f225a35f8e87d481b873f63310fd8c4b9b5a2d73699ad95f6d2063c7767769cef52fb2c09c6609ab6a1646810231d7b06b7d67ca652a823ab12801978b44bc4a6c5a890cc5f51dc806c5eda3d2096c9915c9a2e64a14c5a6a741de6c0a76fb1b78b78699d020b689b38e98b0f208aca84e828a27084bc73966e219df5a601554a6aa4ea00a2ea8aa0da5c24aaadb04ee9d4c0410b072604cb9a662deea2ca97f115732ca79e535083eca84c3f62a5fc33aaa0c71dcdc809cd3b914c4ca7069441c3dc437cfde6215360e72c8c63aa8c1fb7fce813138b7a2f673ba55447622af2c5e3594d641a4011781853ea12b919658eb34b22b3b01bd4ce0c560c8420037876664d61586708cf67e7ac284ccfaa03ca63faa74796f78c5ad1fe540fa3ca7a1af455f2d7e3f6d1f6d7b9647592f48a1934f214d51585652236f520a4f11c1c286e754c2a6d9c2ba2771b2f9a1270df11951190e44ef642b5b06b040a473a73590a710fc7a82610a167cb4835d69c11541fc4717eb4e52ab705a51cc352a4852a8125e2d7a52160970d20c70562d999b7e76d4da56cb45ee17b1fa6f4c86966ec0c74597163b97f004aa85207cfd43bb32e475d712f99352892952806b5a08d234f1c9fa92212cfd4066ee9689bea60bece8d7fc882e1a4cc818134cb7271537316b1543798b64606e3a6c7515501dc5cb89e865dc6f646b706ca3460f319597eff4a523a8cadd6012ff37a2c2371f44985dd1855163d94659523d48313ccbce6618255b1fb149f5e6dd9b3296e125d5a7c640200e96eedb072b84b9e2c5e8b32aeb307e8ba48067627874e0de73e246abdba1297d4d61f623076dfa92e73e285e60046ba5aa588b8d7705ca9ec8a126264f931c281a594337400d06adc6792636661ac088d65bfc0e12e77616700701379af5ec883e3a37f200828ee5025c5c87c803ddcc39f38b2e1b5afbf9756a3ca8ae69dc30a83fb2b711ac38af17f2e479eec7ba9fcd6b4c4264c516ea09dc588908b3d447f052d3f25171474a00e1c5db0cc0fa7dc7b6f50735349b1b904f674038491d1ffd4b59ab6b13809df649e61a6a44e2f305f4634080f7016d938b93adc52f7ed5f643463280a20352a87ebe6e08962f7f0d2e706cbb940b822392e7ff94bc2ad2b477c0a4460aa0a5bda7afbd316ce54db12cb10a9655bc280b6c74876af21b28c701f670eaad482250408a949786a538fdd177c383d8dc86d0432b03d92db76640144df479d4acdd8d798774d78a773dd67786cdf5fa9a41c104c94eaa50d05d44efe13509ac7422c8e87a43741e7d0b62dc6430b8d9bd48929d6ddfa529ad3733c287d2da0faf2127afaa53529d0d0cd0032e4de4b51c14d0abbc16c139a5d122518df4b8ad1af50b47e71917f6a13af1102a5730d528ecb4875401862f44c5a2ed3ccfb9a61df4f459429628e724321704f2e67ccec07231e7f493e42a670268283e793b8110fac4e40b7f53446ae0897aae058f1a0ac7f48aa6a5d0c305126c81b8459427045837f3a3d61526bdb0024a5bcbd9e0a381c72501ee178876dee81f90e1581040329c4503d2447b0c4014790102b84d326681b9d6786fc878eccea565c13a40bae72e2f461ada6a40c57320e07eb31da129dd69848cc746bf7f1ab363d4c463c32ff128d1ecc6dd5461cf1b0ff086f13a527a7cd11151eef286666db94d6a9f833ee5f31d721dfb25ffd5cab2d9202b47942307c8ec3db1c27fb4dbf4599d5027aa8ee488150bf6989fa070baac64c4fc89d0fc39604e8806dd27d07dc577bdcc7f2774f8ebe39ac2a6a8dda950718406f77bb1b3ee208ad0c1ee3d52b8afb9eee24226bde55189f5f54e27e2841903515221f3a27b86842ab97540ce636fa89fd0b98f058535165623645eafd2e04ee758bc57f89aa9bcd4d16683a38027f8de5c8d85e1ffd5bed42786575058a742cfe94b52d279c6840168ce1bab9b714f25d1f2efee636f194271d9b1bc486b36f1afc7f6bbca29640714812acc9b06b72f995ff0e6318f4c16dfe6071c96d056adc1f04bf84ecd1fba2885688787d7f1aec6a97e91533362696cca348a099df132298443104bf8d2fc9d8904ea80352857665c909b886a7e405fc92bed9e9798c1c0b18f5bc0d185060ce06ffce11608f5a8850dba3238b962d9a003491e2b561b814f5ea60d8beb34ce587c7336dcde7b2e7ab5290ff17882b50f15af5410db5ae19088c1ace856f4a68cdf9d8f84e16b5fa5dd69c1568348a0f623e6a3380ddc3a7864b4aa0230aaef5716a73cea4ce1bd0224c25ef18e701cc808d71c5c5646edbc47a5d97989d18e6db1c4b9925575dd4a1b7eab5a381a013250c195cc749399fd4277ae9ec4977efb67210e6119d67009f7e370e408c350a2586a89b0c04b4e7af35cc1f10cdae3e9bf0afb8582bf013f35f4caef7bbd68a55dc701406801c95718d583107a936fb2208e29ec968a7d74d12cf65bab294b78aa53cef04fd0f8b5a740df988ebb9109efab9f2231658c83091cdac474120b8368f8f0c2df2c4493f1748fc2907af91013d97d8435ec23f0c6bade0698e6fa65ba02a75e090012190b2674544937324002bdd57536925dc03f901a2d30d258eca3688ffe15208e8322f9877624e31aded9dfd8149d34624ed34a1625b88a2799534268135a05e0bfdaf06520d519a8a46497ff45b800ed82a77f631ad4786a2896c9e6d2c99efe00741ae682469b71cd383e69457cdc0adadfdf2810dc56acd4894068cafd45fe7abb37a2974aae4156b45bdd400ab6e521090f65355ef6375e5ace7467817b89bcb0cff8adc5020cafc0e2b4750bcfb24bb63421171d8657763ac0fc030274abf00c1024fb664e161305c8cf8a662439d016dec82356447a50998e81583752b3ea7e34fe2ad3b95540d008a15035aac1f711c4c40568e76e0ef90620b1894c563847ff37c75370725c8a251b3d911a68a9a08447530d1b36b8a16ead2da35da4405a580b42e781fb14de9c833e8b1b46217daa97ffa6604767d441f8a4a07bf10b2c81511d5bdd671715d493c59e4483e68b42234001e3740e9fc4a8b5c96e49a6f787929cd35c33b834f462f48a0682a700fc94bf13a7156490cf51063667d4676e6ac7f005d30a5a861c4cdaccbc59d0aa32c325109f4dada85eb1a0c6c19edd726cac9af66607d21c6b97778ef12c0dc9a29559f0a10ac5d4c580acc969f10a8ca1334d56df5b7dcc5e3d332926432847c319d042767d6c294d2c676fe431044e455f04a554dbc5a8d6a4bff7c164f9ea15dcc8f7dff4aa5c34462c208e2e84dc9b482b253c128702a73ebeb64b550aec45ead161430b7cdc055e04060414afb5ac0cf88e94836583f77f191022294f47626e030e5cc847aeb85428b7626c04b57a372873f14f1b723cfe34d9543fca1372a17111db3981cd0552defc50f5850cc0af5a18016768e002b6538bd1850099c729b379c47d363c801c2c6e8af46a326718e26603c928dc6dc0162f25022cdd72b82681ea8dd2b8147ed55a7d3f20cc5bacadc4249a805bd422eaaa8589a0cfa5e0321155218cbd64e29ac9bda47884a0eab4459524fd533a68554c645ca8ab60787ac935ec325366d92b6b57128f79a3212bbe370e07e5d87d2080e78ec9edc76d4ce6f97d67f43f1a9214894e7135a3304ae17fc5d8ec48e305e94f6cf9052150501c0380dede13ed1f644ab21d2d51144068a68afbc1279db9ab454e41b01838556b054a58e3e40794a9e57ecd21de940a7e2d1eda3fe86cd6e666bd654a2b955cac18c8d2dcb1628fd132e89eee4319ca03c3e86de021b63ab83a074f52e56b63d601c6516a918803496ec2eda53e57d02cf306bc63cfe749c38d49ff3cdc84a86d5992d03936ec2232b2d0ceaa483efb6c5a4b2be9bdc1767d3f76974409caa309b1b4e7dfa23d21b28af598a90cd280ed8a5b03479caadfb10613abcc531c56294a2428a51f25e36d5f9d4c13d920f571f63a2a7aaf427d7ad93e2d2f570a958ab43d024676dfeb584d8016cc636aea9b5d5c2bdc280054c19913fbd04d69512706e29525751852bc813d34f2fa8a6d3debc81e3d6893a07bdecb964ef029a99df7274ba3e8cbc8de7d57d92ef3b0b5b31442160a3a69718f306b856d2a674f5d615e9c8900120941d016679784b2f233263932ec1c91f9466ed6590826e8c0a8c8df5ff4f05fb2d549e3ed973afa92ec9a780f8d2664b5e431f10c68350a64c4a2d2bea03a1eeb4285e2ab18aba1e60b45bc43ea230be2a0eb50b9f2a7572c9c85b0d5480eec0f23e5b4cb370153f461aae85a0a830a0b82f4b1d264025cd9032d43a6064b72297b2f67b1191a8e04fb159613ba8381828268a275863fa19f3ae8c35ef00a4faab600ab7cea034ead7bc6bf032ff02e9db355f1fe1a6633ba9cbf522df590907e31dd58818de402500fdb0313f5a1ca540132c364948d89be8dbd27f3ed56a70bc73270096c6fc16c233cdd1b9dd12cedd24223f9747b5152e71bceadb4d87a9087be5460740e6656c56fa67002564ab6ff2460526c9e28ed7af36fa750f08b65c622ef600a90dbbe290bb650e568fcec65b9cb6295f880dfb621b65d4534e7779f061ad09e0ec7a50798e5b846bb0c26a4305453637c7d6226e2564e825bd95823883100a8a42376b7a6f0c1be7e999c0dbf0a6a994170e254c4a8da751b0b4dd79015dc5aab3ea4a023fe82f5768bde4028568054047284d588128ad41d6411ef7866c348f31ea03859231a007f58e774a37a8e2184fd13f113b31e7cf8cbc23fdd1226cd1f0b67f216150bc7fb683e411db28227d9d388ebbc31d3cc4c8cebaa0e57197c106ef10278617f28e3f79ccdcd7e668740b07f44a1275c1e186cc74fe53768fc5440b43c407f9548689968895f00aee887c84ba201675246d0ee1a45f8977282e2de010d3c8081f5ff1f6f87d99d01feebdf7c41d591f806217a6d4435ddecc9216b5394a31cf2273d7c36a1170c03f97773afa71e1747a2c53499e82e4ae5c05ec548b250c4ab2d476ad7a6d4fa74978316983ba262ea0b68631b8091c2f91f5d3cd35202285cd13926318a7228aac483a2e5270249ac28c20c324cf790c3eae8eb4f183c26a4289631300ce4b1962282fdfb2013246b242b820fa761bdf9e66d1de53800cd75fd8d8233dd4e511e26b94ad253a5ed9ea4eb20e8c10e03f63ba9e42c3840a7a0122a431a366dc803d48f4673ee76c1993d460df21316cc4987faedc5c9289e4ad7525f0cb6dbdd8fb7a84c3a0b6723478ee68c67d4c8bc7d7489d364ed89b902997bebc124d4b2915a66c60d7f4d75d27199a4f2aa38355f581b1e3b6958e2dfc2fc20b014ac2b9d927f1c294efc71382abe03693fe6f3b1df25490ae60d40a77fa2645868818fe5befe8c2e7065d95f6dff4ed96ca2c33a0aba4d76048ad1e1642c628f7d4c5cd65962d5d48f0002719a52232adf24209e1566ee74cc3b435f3abd95046267c65bbc694107900b8c1da4e829ce1eed0f090ee5c37ff683453df99304f2bd4c6fe617b99cee29eadefab543a09597006ee59d9680c4553175c2d6c265ddb293c29445bf42cd14b0c84b7bf2d6b641ebd2ef6889e66914394412b637c9c6c581bb8267a18523acb99acc5f0760a7338a4faa3fb5d99367481dc0df6ad4e6b2a5358f0ac18db2aba45397d1ef8508352bc8d8a0af58832b1731a67708f4fd42694e674405077a7119c7a565cb3d54042ed9d1fc6143252bd355af74665ad96639da11754dbb8c2ef468280b454a2fe15fe659efa1d9cb6d5cb306d0110fea2eb849b8b6bf9a0e20924e0461dba0c7f3fc90ebb4891a5c2cdc6ad27288d7e7b961515c83526486187ba6e4ec1fe6073315a8659e3a88f88964178e98a0532fd03a31c47a968fc6d8fc1fb1fcf16499a498f0f89ff15255c5581818b71e206d60a7b7a23d8782f8e685ddc8d75d2e6c73e72606b8c96123388909eb37ab895c749e5a2b7f638c157eedf248ffe9c00e57c0aba43faa3fa29905a5ca02d131879543378845ced23207d15cafe4767c4bba4fe0c7677f106cc4c72afe509dbc25b6314e366273054c5d079a8b2c75638915669f215890de28af7fd0a8b4924c13d850b214a4ff552454072b2de9023740938cf45f89b44a8b9e5e5d2d263a4a5eda0d25e69bb2a8721376d24ad2323c1ab9ddad4982d08ae28415cda3ed4b83bfd309a031e1741e3ca0266b34f6fbd8bb52eb9837240d41238b4a5b892a3eff01b6becfd4a1e73a7c1df139a64b9c15445f2b29785b2540383fc611e11a1b3a6603019f707f06332df718719a0c5241e40002c1eb22d7c463387b678e4a982a3093167e712a2ce3b79ea04c31d8b4cd0f73f0399707cc6ba1e1783dac02bb156b83e55368486e78ad1239d186751d30ad6109196d761477dc0f6174868aecc1a96db2b34f710e9b7802e9c430c0b4497ecd85387496edf889cce1040edb4426d055d749c4cb61d5610524a155de15638f1628bc0be15a9b50eaff445d8eea1cc899cbc311e4da8349643e147acfa46e35e05b9d791834e14b4b22840f6b84ba1285ff2ee1271d770a2187e640a66195e7784252e9160233a65a467d7235bd473804c02491a2774a38584aa58d01ea2be13af2593f6bdc3349bcdb2f0b5acc1d334155458a870b73d7565d3170ca3198e8b9260607bd7c833e2c6b63bd422b4608572a7e462465eaab6a730a8146474cc3f88452c5f5322159a28662b571bd934716baab418f4e6f261423615de4c1147955acd621ba71a4acd16499942ac0a56c214760f97e567fcb894e51c480468906fba2250fe907400fadb4bc4709d603fba78d74e5ae00977bad39ae002ad07c3be9d7a42a2f4c28175fbcafb445c26e5c36ef08b6612b1bec441fd5f94325e0b39d58fa2b2e6c15b12a8580762fd8c90408d72383cb251727619e4267a33cb952fdc1c85515a70ba1efb393ad6ba1f727cf55d438ec717199811a5ad65c855b4ef7fc564ae54bb239e71cbafeae34925c44869b51e606aadcbb32b4c8a5889068a0cf43f7705ce6bb14ec2a440e58a953be1dd49b48b2d5a7df22e661748a2072f49bc5d68dfa2bf56d8e081f536e98752ccb2c103f5859d319fa1201b562b9a89bb1df872ce295f14ff33f8e4a6604b7ff6424e2eab18680eb629a296212b8b33421c32ecfcca0c0cbd5ab027a8331a7ecd77ed098e49cd0c58464f7704e4cce7f4863a6ebf1227b1ff2aee64e8948b4c6a0b91ac50fdc0b368c6377add74ed330dd23eac326562b2513aa0768312023a3e780e2cded864e1b946ec8888257349a292db960b0b64fc29849c8d9731eb188865ca3caf1d8c1259245288e523591cc5a5b940306dc552fbc22d547ab5a60412f608492a966285383f7d8bb80f7c8f9d91658617043eef92c177ec12c5ed5cab7d05013396bea9bea311d2c93e4f70c6214ea4c2e43c0c283577f51047c05dda9e871af1c0ab27f30ce11172fa910b979e8813601c098e1d62f793b9e29b12544aa8dd673a24f005b86e3f2a13fec7ffcc9d798630f1da5f85096ebae6faecceef65b5d2fe72c5f4b131360546edb74257d3adbc8d78d39a9edc8c279fa9f5aff97425d8cccea8ee2b7d08d8f657785e7bcac7d55ae15a9fa964f840452046f4ad271aa8d2c74ba4cc71b52ef54a2025fc270f53d6aaa358e866879d2ff713f0550268e85800bd17415c25bbc86eb1e365690ec57ebbb87b52798dbd7eb0232606ed34b780ece0751abd5e7c689c070e1e56a7065d81fd7cfc677d4ef71bec37eeec11e97e9dc9f492bc1765e54b7505264a64e25aae7fcdaa425c85adc3479ff99f58ebc085955c9c7898b7629b0f5c7b675c72b798fb9e3ed382cdaf18dd53074829393d212844f9b79b79d4d0f626e3458aced18f845a89e4cff511a3a1790bed93222faa74188a9c2ae9c05ceee219f359b2bfa0d7f3f582048aa10ecdef927da7de50e0f75dc4fa88e01e43c3b1ce6e1d26aed92b5171fe10e2010af3c3d13a2a4e540edf600410b44b7b3b9d84d461aae73e0e45c5ae7836537cc299447ec99df08518d8d268a4e12be484596f82db80bc0b0dc4fc6c3d6105b8650142e3bd1ec48896c8ba0417c43d1a758b5ca1eb692fadf2c3e3c4810e5ee3794dc75902f4a2ebae9c1b6168a6e6f15bf1f584e4474ff2e8fc8c9d711df37d68e0c8ca2890bd04f05076de6d18b7c19e23bf6ee0fd51b180d25a1cad629faa4e332aeb4970de81f480464dea99f74648062f68cf66bd654f7f73697056f19460dabc0e85c574fc4854f3925bd06351f188b3a235159de1db9e751e8552aed79c325a393a944b2dc282e073c1106a70e5473ab4153490eb6b3901e511a98a4790abe7663a831eeff41bc12bc587aef450b9b466d069e229c16e123a8490760b1d75b19c2787a089f35c4766321223de1d18829398784b615b564ce4710a2dbe70cf415015def490ad281eb83da0e975ec27bdacfd3dafc903d98bac152b66033074db122ace127540e7bb25e8d2583c6f144bf443ec143ffd717f9acd91cd58f9ada879690b44262c482bff355a7f3846f3b02ad26df9b0e8cac427f668a0d26e62c00c8d64ab428c25e8698a994f315d333b8cbaf638c43c2721fce830931f50cdd1bd4b17a18a294d64de4e6ba3c612d3ab3173d2b308a05c827da75489e14397d3a82fcc4503c5f8abb6ce7c49720857d866d18d81716d9ee83a1163fe762649155faa15bde2e577332898c14f8921174652d73196ad8649671066f1fdd16c8ee3141434858e636b7a2df9763457adcd42d7e11621713679363116b6e643e22e5371da7c5b091143038c7b9d7626c3c84ff96f56f58b0440108ee1bf9042b2f30aa3ad3b00ea137c42ca584d7fd92f670432dd9629ce572ff18a8cf75b77960de49a91f7456c65dcc8ed7f8029556bcef560d52ce2a77a73dd635dc7570a7b76ea72850458f43faedc04473f016e9dacb38de709f54bf31284c56a8024a4316c95efc19f6b1d8bfa5af41baec30e998ee9b8996e2238886cac6c06dae504dded397d752f7c9f642d2c8ae6133777ace8fbf6b8dc0d6510fc1f86c11c63cdfb0e34976930340c212b82b14ae2b620d83d73612ba07facf771d94869635c08ce6e8bd352b6ccb1c51d00c344b05c2b8b2c45291bcd5109dc64f2990c5cea4a163bd95983240a4c1de35648ca95cb7ec1f93afa580171c7a522f5285162f271c0faed431199c5400945e3fb5e22cdb4a373ca3f7bb994b83726028f80167ce6646d0a3abf6d95ad34cbdb784b83b99922af34c93a37d21691fe9c7c76d062b65c9391868be3af9417ab71fbad996fcb8ea630eecdf47cd8a26be06f4a7b4ca5952c699ba2bdec065a844e77f7212ec6356fb68851b0676f70d558ea6351a381f7365dc8bd38da8f7708bb8444446d1788e450b4fd743173e4a62081c30e1a86162a2af1ce490be4e1978e0f13794fa6cb04c38711f2f760981d850c89f40920390eae630b87d85947f1ce61fc42f55af46db53cd166d61f4a073b38c308f5f80e64e8e8a470701d7900863bb4e9f532aad3064731a93e1e52971ab1e8f8154e75678c224afcaa4696e3ab23377031be1822a0ca607a21d2c92a355bce836b00d50bfb2baea59f5d519a7fae9d4afce9ba8c0ddef7be5296d55bc89076ea4cee4b1dd6acefa9307137f1d552ee11931e41dcc3fe75dc2071a680d1b14c90448618a322dcca4bd35a8d501dd622482a949fa85e9d52548e92539b34c2a854ac7f7c087c240b400a8ec20829875ce2f6631ff4f22fc899d9d9e40b765bf280305179b6a388e8e5439b8cb828c0038bbcb2770c06d560190935c324dc13a0860a1d70d9c8b120352d30cf78f251cec9176b19ba8f2b48f64b28da7c81cb62f936f47fdaf64b1bb4df1d5f40e90d181df3c2f238a7aad3a7893654235731d542c03cc0ef3e4062837b70dcc51d6eac8ad0b9554b3b6318dbc0c7699abb11370e180cca89d12b2eeac826c1b478961095af47db14b01c9c4b35fbfa54049667a2420a8ff4ae51d6b8ff8b61ba68b770b61db611a8bf7932bd6f8c64769027b75ae1436867de110324f93ac74446b3ca92ff8c4300c14d3d74c0552b3c0fdef7153bb2ce0be98e0772ee9a99f6faf9399aed2d2a1ce94f9ec3615fa2c76a9324c31099377a18a89a49154e28aa903d60a2f7b342664464caa5693bc9a3129ab5954899325a490a6893ffd1c6ec6be36a43f8b8648c0d04ca1abe32b3b19eb1ac3b92e50a9e79a23b107623f0e57ada07b11662eb038ca0d2fe0d5a67415490fc1290baf1a00605e8b334d5d9c466649bbfe5d23d63f91cbed698425a936357fabdda1e07c5644cdb8a26ec77e8793a27c369c53641d46dc8246106977e5b030575187f061e0c444752c88568c187b54af983d8ff34d7ebd2350b8c4f2eaa23c0e027e9435964a9be1271aa001ff770f54569733800255cbf5f40be0b4a451dddb7ece5e2ba72cba1caa252648c55d45298d4db90c249d40c9040627db05b8130e97b353408516b52d94a615f4001ef0b9daa5a28ac6b19534caa783e1da3b7673200586c3e233d961968581a061992da38efd44ce595a7fbe40527ecab7568d337959fc6c1793c3d586c5865c06ae5c0f7589e26cebb0eb4780d352cc1b68994b1edec7154852b3d5ee8698d2d51f428e04958f4b2ab891fe7f3a11cd08a0056e132204175867a54667274917f68137a00f2e894284b90cd3733a21fff422e1549c2a1085068f3d171932f2cfdbcaa020b1f7eb7d7948e52c8da356122db898dce524f27ccd9aeae6aa398725b52427ccd60c42f78ea567cdb26ef14d2955cdb77a1bddbd3951bfcac4a3364f08e06e090cd811800565e66e16009a899905601c409f0561e191ce511d2f9c4bbb6c06140b3b1fd283c19627400a0248f6a8031e9098d8d56f0995bd06f56c085000b7dd6b9a218f8b7fa78e27ed9baded37fbabe536d55c4e9f92c6f638b520c5d8d1585acdcd8488221e62881ae534af20c9d541932994935cb8755f7c9a3264e694fef1c4e140885d1744ab2127229c3c8d90ff0c3d5294e872b272c43dcbc188ddd7d9c2e9c7822ff78c693997159cb4e4cb06a8525681e8e8c57a7316146ed7169507b61e6e3260eee38afefd58db85096d3e379798a6b74561bb7dcf044c53d00ba1fb319dc7f47a41af1cd7edb45b599ed6ac8261a5d5d88ee820f345347bbe0f3637401e282a6742233d00e39e0ba2d0223b47e16441f4dc1d9df6752f80db1bac228b7307abb739e8d67f2c2a4dfc935510817b974c841fe946d7ee483131bf06ff6f091cfd738c6bcff5e6f02883389289bca3a19c1fdcbe196acb830665f8bb623dc1dbbc70a1dda5955b76de2b4ae80b2d496f718bdb6d64660904376639babba3f2c87255b21e08712889bb9c89f03b65c5068d290cd0f775961d2fc9dd7ece9f1f145be66f62ae13acc964b9d8ed9dfc8a88250c3bca57e19ba7022f61329702d38d776f169cb47760e776fcfc9b13d1bea4fbfbfcc167206a0df8b25d5817a809ab7162ad95ed666f2e0b9d4e43bcdd05f1ae153a1dca49b577276120a05559a90e3d46589cb974721d05d37cc2dec0f33c4a43370c1c962d36a40a604ab27a33c81f244a9464e27642c474d4b5d13ac1470bd68edbf3228f5558fa14bcc13f17cf52bf14379a9c21d6374d14c39604539c6bcd68e9f82e0f604489bcb923adf602db9fd21b55a13b70067135ef96fba271b4f6a4efafbb506f83c9310bfe34479a035b1101662f39dd4f074eca719d3f0a259f3b19e564fd73208401581ae065f8aef4e878a105faa2dd6d28fadad9dbf038dac079591e5a53c78e2dc8dd3ec744fad3023cfa4b1c68435ff1d1c523219b7f8278dfa753b451b75a19956588ef3b306117995bf653b87f14f494056eddc51414581048076d73021347620446c8046bd52b8d91092230fb598c80049ff0037e9a783cb750fa9a6cacd50a9f3fcb3e6cb0593348ed11170b0ed65519d0d63b59bc28896014a13d658544d211f0d0210791babb899a88089152a6df12e012741434f3fd81cc1e5ca4cef0fcd548c08f89f9fb3aff333d24fc73f6b2f375748ff1b5764c9b799d77ed681c98963f0c10c8eff99dff860004169a863e5de79f3a670f3622cc0452b0a15abcb35cbf420ff9efe8ccae56df45ea1227d4e2873f6b31ef6f89624bce169c2d375b6cb66cb95ab40821440f3de490430d355c2b5660566a32ec5a7959a1d177ca9d6265d5b63a1da6e1607fab2ce5099839e72ccb335926c7985aa5f5e8e8c8642ed7f7655dfe3c01f37eceb9ccad2ce69dbfc7af29ee536cd7aa47b1bd6c1d8a568b09d3ead07e69f556d9ee5f5c0a07737bdbff52297b70510b7eafa3e3faaa1c990cd37016f955392e4cc359e357e56c9856ab72608fa774840953c56eb34298aeaad92fdde3dba51dffb4b4e321fc731fd45cf01ba93d3a1b5f2b8ef4e96bc5832e4fcbe607a57fa680a90e0de9f138680ce1a2291e20be813cc81fbf92d79096596ab50719fbaa9cedd26a55ce06a778c264c1be2a677f5aadcad959ab5931af13bbecfc6a1beeacab6af675fd50368ad18e7ffc3dbfe39f16f9e0973f6b19baaea1a1314fc054dd0b9023d1f6158855e2ef06a50484081df06def228105ec9b2e12b041890739a6f905a2741f47d3bcb9f9a7d18686f2cfc518638cf1c37054c3fa285fdd1b1651fabdf76affbe7174b94c5326bbb9d1c1507411a2ca6776114289717b17218e1885d022c40fafed5d84c801c87df0f441cbce2f9267f9e2f9edd6690b8bb0ca62ddd5bf1def1d4f5b7e156b870fcec0ff36086221f943ad02f1afc2fb7ee7dd58e3c503289dc9ccaf8e6a9720a8d8dff74d1e45ccf62e4138b1af770922894d6eef128406b67b972088b83ff02e41f8b0d591cafe80e86ddfb2f30f522c99dee5871fb8eca0ed5d7e60401036ecb1b7c12f63f9bf5225a1c8cfd9f6b291e2935b36f843008165df7d371056b66fdfa5b7e6bd0266889d3f0cbfb5a364c214ff6bfdcb26fef8e2cb363e987549e6777df93b7226f707aa51764b438d2d47baa05aea1d98e698e6523698bfaa8aed5b255bf713a2144bbf31324cd3389f5f07ba9f3fed0e74713900f33e366b28a17e045f45d676dce28f37287fa198c54ffc3be2ff4250632af77a171f7a6839927b171f7000536eefe283951e15eceddc7a5a360aff281b5959917ff3add3aaf5383f9e56e3e7bc785a59851f9bfd775a7daff3bd8d694e9c979d392f73c63ee69cbd79eafccc696535a3ad1ef6565d186065c76023a316fb18846ab1b772e105ac5aec7574cc5b99efc24ccb7c4ccfbcd51417721ee75db8f929399ae67174cdbf10034eede65f88a1a776f331aca8dde0de7e6975dc2f2bcf3f56fe029530a816fb18722da65fa022d662ff420c3a6ab18fe1a8e6c48994d4d3d3d29212254a4a4182ecd87174343444a3fddfdc98e638facf75ff017b22d93acdfce33f7efef10f4fda3974947f6058f96ac4ba5f0c0cdfe83265373aaef26d5a7ff3e3a98e8ff3e2a98a3ff3e1a9860f7ececf706fc768ce9b979d382f73e28f3973de3c673f73aab29f799b539dd1b187bdda85872a3bf62adb44dcf8d926391b7f139a8d5f9d62b1625e357f2a47cb3cd633afae53387ff353af5f7134cddfe89a679b90fbf56c9315fbf54d66f64bdbfc8e6c73965f73924f337ef83127f8e679b7ec977695ad22632f966d82b363df04b6635aabaf87e1c071744483c6d01010108dd6d3f3afa37373239399a6cb358edfe7b4ebba4c8189b76c57dbb0758e2ef394dde8609a3fce6d95a0054aecfbf9b144b1ef438156e1fbb7ce928bf92d3db3896799c496fdf576f826950d2a60886db4bdcb0e60f60e5f36cff62e3b24b1ad6cf0fd9249728dfc72bcefda81cb1fbf2586230ce4df5a79be847cbd1deaf692fa051db527b9357ed81ac5565832618ebac51b8b1808fe14fedd0af87d10e8828316980d3de42e567a631729bd8f8b0e5e4045954b43af86fdfb5e0933c5f6fb9f23dd7dffbf58063ffcfbb9a767dffc3df8e1af7252b136f698eddcd9e6b3b3f60d94393ba57301e3807da343db6091f9b231ca1869b860b882cc9e0dca845cfc4d8c4aded4c8e8c4c057c72f833fba60830f820f7a0a36f8a02fb1c107c107411c31a0d8e0bbc02fdd69ad115cbfef14c5332b7cdd32bfc77f41118722332c323f57266f8c5cfbbc316730b30c9f3df8a7c86cb94050e7dab9f5325cb4336f72ebbfdbba2ed0b55ddfcbef09c49780a98efb6218f8a10b17057d3a0b633d3377e0f133a2b4017267ca15a67fa5f7a821978dff137779c93066cc75662bb98aeb499dab609a2ba633954cc58ab8c3fde59c3311170c182270919af3870517c9f6d7c3c65fc65e9fa9e42af8f311d8c8b9642e41d84244b6827b5c82e065ab59cd5f4dcdb1971fe14a602e45e022978b88165bd5c94a488840e3e4deb8ae8fcdfe32605f1c36be05d8f8ca807be043183fd9569dcbcdbe4464a34c458a7b03137163f4c09130063c285309daea252287081c226e88b02122dfd749f3f994bdb4daee97eb853f0c381210ee8d3bc58d81bfe64e716f602d37480da2fd05736fe02986fec6c40183bf94d1d4b0f1e7183c06ce1c9841115eb4382104971e92d85906206c7ce6ed3a53218b60d6c4420c4688ec49927c1a8dc1e41e15e4ab188c0ccb9ed45704268d3cbf979d5f09e6d50383c164a35bf35c45cc39bc74a6428549e222f2e3d7ebc9930cb198e4672ad90813f17af2cbd7792a9d485eaf3a97d7974abefd7afcd24a48adf46ade2ffd39cd9d46fe94d57ebdf0968d89c0340c236257315fa4ce56329559ae828df210bd5e0f87da4b290817709a6fd546022610fef30ac202fcc76b98b3fd3a432098e187ae9f791cf3dbf532e318639a4a3737a1120cf6302ed9c445e1c31e045d54c0f17718bede15fbfc2f3d8b69d7bfca264c97ebc9f233958ca9642a39dcfe0212c2b20e1437e0b2ef951b6cd9ead1c69ffbe7a7010d15d1f89b1898ad576f74683a7e24215152043444039b4043262ec2316d621afed00322f02e473a373a9fafec333f9d95f568aaae991dca1f77d7982e96e17b4f192261aa2db8fdc7cf3a5b31fd3f3d1bcdd1b3792faeb5de5f42fc67e2fd99f8e2e562aae6be43f87ef75e5ade02e69c7b33217afc5edffb2b8397085114c552244952d4acf8aa488aa290d6287ef8e2870fe23ce503491e98e0d8229f244f0684a50882df47ea05944f824f9220093e487ee27f425bfcabc750155f84123ff0f30016c52c8ae2288aa366c75747f14512a0cad7917bfc8119be52f6114810a7c1046e50628f333688cf82f816b518e6e523fcf292ad1fb51647918c628fb8683461dfd6dda0044aef29c91ed898e14f80eb5daf8e0c88e2c5a401975ec0eb5d7f5f417c7ff70a113eec36ef5008d682b530000b064af8e0051c2481a587ebf18b88a33d5c364c811d6a367c35d4543cfbfb0f03f9cbbbfe6e7d99c18ffc2bb216bac829ccefb3e70c8264ebf68056184bc49f03cad1f4ef2bc10ffcef6ef035a4e5badb75603a988b90c11494de2392594c47f27d3ff03525829f075d77c11e4ff20126fe3c82ffb55ae33732a0f4978f1287a1de578a5d2593f1deb2abc25b96b7fc5c96e5971fc2c80fbf5c820a09064ce94ac4777d09bed4f812366c1b1896816519d90b881f31b3f9965e6f97331d61a4e8edf043ad7ebdde2ef59a446f97df925b752ebded7a3fa2d7db32e587614ffe60bb07edc0232ec2f93effcf7cd9c227bfcc9181a1ab6c91e5bb5ebdef6a95adf2c65eb6508f53194f65297adb45446f977988de2ef55406d3db2e9d45c5acc57e072e63ef2fa5982e1b605e9a56cdcb86bc71e18c393166de02bdd571fc46b57ca877392e2acbf274392efa2ef9e5bbeea986b39024ef2e7fd4dc4bb6ee78ef15c37b2f782f46025359d82fd75ff2c7af24714a2af3960f5361efb0f2615f3e14ec4718795de5cb067bf13395593ef9196673d94298ced96529035f49ae1735ec5bb0715c8e8baebb7051e90abffc962bf4d25f6aa9d53be2a2fbf95e51e2cb4baba55a962d2d7e2886e0e7c23a4568b95ce70b58bd5e4f0318185b28dc9a4b4719df6bb5f1d6cad27f3cadbebf226be38f638641fac01c4323384ad060023728418309dc501b7f077681de83707cf22f59eaa91b667faad20372f9790fc0ef2fc903d3b7d7f0dfcf5e1bcf197e5cbbb512bf7ef80c7ef80776f8f7f54368870f865ac4ad22fb1bba641466fe6bfb42112831ef15257a1be7fc7d1f1e2f04ca29598c780dbf0b56bd5e0debd90fbcb3f0e373caad4dc9d29afbef0c77a4eb5a6ddfbd9ce3e8a3a531edc5df91bdc53bdc9141d7fbbe7f3e71cd5f403e9dc5c506395c77b92389a5fb630f63e2a96209b961f607e6ac7eb31ffef975ecfcdf09e5f9736cffac67b61c26cc7ec2092fdb67b83091c4576e97d9feafbe8bed4235ca576d8c32b6d370c1d81ea4b6d8feceb3fd26667b6c3be9f8c7fbc4c62f23b4559a3be1c2fc184d66abb4fdfaebfa26fe839f3c59a7e16f9d319c863f9b400c5bf43471a91a9b86b5ef8769a1074a77c74f428f0b4cfc9e1dc9a34aefb9d99ebdd56a8d1f86de0ab58f373fde5c83cf281d178d2614fe5d958e8bc2107f9ec3100cf5977128b728c0f4c7650a86788902e482802d670568709962038d145b84a4c8ae0f160824d1338d6eafb7c4145696d0811378045abe2542f0c3121b50e26e400626fe9c5de90539881e50c234ec036f3180d98307e11ef6bdc0874d3c4240d62b6f113fc8e11ae11f86aa1ec571bc46942e4a23dcebf57a35d4d40fe3d18ce9d33358447931203261fafbbb97282e07be2935ffd4cfc8b97c3e629a07395208553a2e72c7f80341509bb5d11d041f630c6630e730e78cbfbbc5f4f77d91307d3baef95754645eac7b877e874a70f9d939dfc7ee3d99fce10e4183300c43ecf7b73897bbdd8bbef055511c0abf3b44e3fbbebfe7cd433470d1f7e2b7c4050a105251cef2df2b23f8f28967f62ff18b88eff1c5f36e2058081e6df8c5c72feaeb1f661a3e1feebeb1c27bbf94fe2ed956c1c7ae7f90db3d289ffedddb433ec9285a2d9c5be7a8bbd9600b7465b9c611a9756dbc90c81badf3dbe18bccf93575f70ac45db0c367b1b61882f9554474c116473c8e62f82181b5cefca30acc2f67f2e523839b3c713c087f3e736e0cfcaef34fcf3054dac6fe228770fcc6aba5cebe9e7d3323b3c1f72264111441f59ebe4d5205a6ea5b4e1da6edd89757d7629a4e0ad39e1c697cacc636997ff093a67806e9b123dca356c2b1ddfa4fabb19dcd074b10f6b7d703616108ea23a9fc835f876938469eeb7d92c2e4f27d48743748302d6b250fea623ec1fede978f2cd76731efabe675851bc9bf3c89e38ba76dfcbe501c7bc0fe158b91b946970c88c6e148af1f5e8456ce3868c6d1f5fa71b7b90353bd3d255877b3f3a944a96766ff12739148f00ffe1b0fc2ad1d20c1463ec5916e0dcd8d237d1e74c5fc1a62ba5a67deae738a4b67c99ff3b02fc7970f182cf421cba78d0eccd294b9b9654ce93a71ad75b677dfb0a4e861840b1ea6fc72c6f53a8d28df7552d1512b6f300d9f5e6b9d7897279903d3f7a55981ec236d9aa0719138ae7c9251b47eb807813f3a171d30b1c70f7f7c15f95ebd1bd46a8d6bc445e5ccd52249a5d0055359d8e297decaf81b4f988ad5802d7e3ec907ec327ffef1ebf50ab0dbd1668f5a6d723758e4d31fa65d9cadee15c66a7d3d40284b51b64fd90e4f753c49214c35e65d9866b6f4b8b404d3c457098469e5c3c67fbdbf8038a68d27ec67340e4c135fb74ed89679d52c63afba14970b8983f9fd8769e1c3b6bf80981fe28f9d2bdeeae5a2e21d7302f13d3eecef9767f8b09306a695dfcaaef2946d7f85e5f9bd7fc05cc0f62d4e4860df23ccefd5cb65471342944d985ec5f62d4d68d93a40bc8a2d04dce197276c975e76c025fe6bfbcb484b0a07bc70f1614a95206aee3f0e04f63020af7d6908c011fbd210002d5bbd5c60a6fb4f09d5fa11ee98dab2b5bee566f92f10069a65eb5f65eb61a15996af6f95b0982e85840ff3f1d23df0abf5e5895fe559eefb7ab5ce29d8597e2efcfa21db65794edddd3aef06cc97fe7199b84e887fb6b698eac885090f71b49826be134c93ed2e1ee4fa3209086efc4ae2d25f9ee326af131e247a40145fea7bd1f110197451a034955c927caf893904cf57720b40a1e44339e39f85ef35f0f30f65a3515b85fa06d3f2cda795681208d33106b3170b4c71bd6c470abbecfbe3eecb65280f0d958ee3e27f892ed8428bf21b407748e6b16a32daaa05f14b4de667f4e3ef818bca373f049fbc2f57427526602f8387f07d6928f3bf3cbe3ef2c4b1a3c7102430f09c0a77d40e367e5568970e66273e7db97039a299785c62098cdf1f0f0117ed886dd0c174e0bef84af0c3706b5966e22751123e187e94fb62141b7462830f869f8d6e0d8c22fefdfbe2a7705fd429e00fef9f400994e23e96724206911f37614a395278a5dc2b1bd451b244697db8c17b430bd451c4ff202392fba29e8d3f947fc0c79a72c503420003831434e8412d7c8c5f7c235efb01b38218e4500110d4c02f57206a2b33ff808ff50ff8ea90f9f1e0d53fa5f24ffe11a998aa4be1048746c86c5f828827481e54a0077c2ffe0f7fdff7dd7b73ce39875f88f7ed82c3141b9426a65d5915a66afe78b178f3f9e756c0bc176bd51cef6b146fde8177e0120cffc346e187a70cffdcef7231d5252e00c3c64f1b3ada02e68f0116d072ff6cf1d74fb207d37f1cff03da3da8243514f9977c9c948b901f92b76cc78dc129f25ef23159de1ddef0439aed2ffc9937c6807c41f0f187e1c5e10ecf0ce62f04c110fc464ccbd802e5eb655eef3a65f6ccc91817a6c13e24dff5b137310df6b2dddaef3a65e70da67d98067bd726a67dff3a6576cb833e328711d3605fbec3b4e777bd3fe83a6776798efe85e0e9bab801e5f7b20dfe7dfdf0b11c3fff7d1a1098227ebf8e047bfcdf08be3f869d53fec47ebd8bc48e491293f862922433f611c12f610f7eb072748d5f6e95aecfd522e2dff7e583e7a7817ce9fafc5d2e5d029579e48187f1fbf02d91302f96ed1e1482b02b12a0f47b034bb1ba0219d0ab59b5de4a7c2b240340a266657e94d85b5de11cd4604f055bcdc0bfc2512bdf6b56505cd0ab5de958a98512b8b806fc83dcc44704786f08895093f95274b54e2b6f414de6cbd1d53aad72d464ac786a325f92aed6c943c509970b96457eebf4da4d52d6486d85556b7d29132373eed4627ad94a0df6b1b3e750d460da0a0b494c02357205376a2fd7e872b9465027b9512b93d8d4c214c2b7c2aa89dfa9532bef4b496cc1a1a8911f9e3b35f16c215ba991ef79452d0621f0ab045c6bfd9571a9899f61005113350cadbfb5f0e4a991a755f8570e454d7c7f2571d55a9fa4ac5961d55ae33882df3782ff9ddfc64afb669c24628c6749886ae1cb6a33b5fc4ae232b861aec89a0b370ce84158486b7b9e7dfa874dbed936bbbcae1b3ddeabfc85a50ca5339997061886d8ea786980a1864b030c426cfc3a227ca0e1051bf6a5e1052a5b1d63f7beb35337ccf6f17dce2d5df5535722102c8efe82a9561b7f0f58822f03b91bbc1bfcf086d9d70778f7cd49e0b7a59ce1ed2fdbbe4f17014cff1b25f81a82953fbf7ee42fef50fec80f157b1aa6802963a1689e37e6542f90d7bfb47b50cc4fdd307b66cb51df7cf3848afdcc16fbfb2794eb6742f2bb3e43c53ea696f9cbd3c4af1f6591acde58ec7760d709955f4084b63f7e15b96f0ab96f6af53e8bb5b35ffcbaafffded4b93c635eaf2f63ff9531fa7bd97262fec63cb163bef4ef62987a64c7e07f8941f276e595fc2fe6cd0f5f3c5d7c927c1dfbbe9270b08cd853f7892dbee357928e7d77897719f3ad3ecaffde3cd5bbcd98fc02e24ffc08daa2683eec77e09853353ff6aaf9aff71d3bd5f0c7879daf779d22d44cc80dffee523cef0b88d00e6d405eecfb650c6f7f25dd2260c16e6b03250d2e800153250854dc2b4100e34301a514ad1a044105b992041c080205c67daf04218bb8ef952038200858f60da6b9075d24b6b880cc2959c2fc34473233cee3b7bf9b7364f6ec226ecf7db1f18f5987f26eff4aa08d41156b63dd9ba4f4f793895cc3a6ecc674dd1747a64afbb614718411c6b1f7cfc6f765c4ab1002100cd0010d7610c214356fc5b830ed1b31ed6adf528405b667193ecf25fe1c1004eff8819fb1cb4715dc190a51043f84fabefcb0eb2221c33fd8c434ec17c3c0cf185f1c4a53cbbef1203104bf8cefbdf2850be6c0fbcbcf9c2959dba0868b2fb6c1941ec8ec7be58b171dca2d30a012dbf7ca0e80f85ce069950509f89f06bfec624e79cd710df5eec8d96ab778df9abf2e2edab95762e0c47629bb05f7d5e008cca28c1d704731eb35c516dfff07a6f2b59797b0b7ca12fe2bc95ffc12e6fa5a612cc734147ed88742f2ebf41a3e7d5b09f9fe7bf7d1c59fca61f44cc8f7f9472c9c57c0047ef08fd8f7ca0cb46c756cbd0ca0a8610653f6bd0205145b1d633e6623ab31ff64c735fc15be92c0311b5961d54677bd2699e20fc3d7ae1cd74842ea31ffbc8ab4b409a58af855047c2851835a8faf21bebf21bed58cc4bdd244158f2959f3fe68963a50cc748179a04701f70a1332e42041ce0466b0d070822940807d41c14c075c15c0d12167df2b267061cff6bdd2e5cbe6e2e50f6619bbd9f74a1722bc0696858224f6bd820222b6d1be5750d0db65ecfe631a3eba1f04054eec1ba76d75dc47a67a14e408877ab4d557813676b17bb0f7e00d74f1c1853c057caf9525c6189f5e234f176261a8e8f56a309835ab927c18be9a55f8307c35f0cbd67f3fb6728b1cf3f86ee486a98539df1dd85f25dc303550bb13a9f7ca123eecf195741f4fb93550bbcbc7f7b99fbeb3df31096bf5dbf763e25e1901979cbf9cb59f78bb5eb8e88e9896bffd8abd6c666fdf775d1de864dd7c396b2b176239bb7e0c4b2ca67b56d656597c9ecad7be1c9fb6cad2e2a97c4d27878eb6ca52f354be6693c3465b596561f1f95d46ffd5d87aab2c303e474b5b596571f139426d9525c66bab2cb6fbf3f7adb2d87cfe6e9fb7ca723f8bcd457bed1aadcebec5cbb4b0f916bf7d5eb5d5bc8ff6d169f1aa8d8538bbda16f33fef7bb77875f662c642db58b478add5acfc2d9e852e499886a1d5ac580b3364e1a2458bd68dd142e6e267587ca8b3f8bc7e58498a5fa8a3b3ccbee6559d85f63c2f9de547abe3d05fadda684ffb88fe6a30dfd6dfeba367b3bf4ffb18ef7a1f9af6f9998fb6f9fcd5aafaf331dee7e755dbfdd9a5bd3a0b7a18400fe36730b40dc6fbbc54229d25e6dc125b3fa4b3be57633e8656b3c2f07fb49aa5937fa6d52c9b2c199d2546d3b4aaa36741da467b1eadc63ced7d1e48ab77bf5eafe77918e247ded0dee767afd668b5e669cf33e3f9198fb6cd64de962523f33c3fd33e5f3ecfc7647ac6f33efff3ea8c47db78fe85a6fdcce6f33f5abddbc6e67d9ea6679ee74dd9f3bc3af379dacf68da467b1f9ed71f10472071434de7799ea66f78689e8747ab59383cefa377b272566816ef42ab59e7b378d5e6f32cb49af5efe3a3559bcfb7d06a56cffb68efd17916fad37a3c75fe6d5ee5d12b647674749699fe1c9bc779ddd8e82c35ba87464616cec8e82c319a66be6219f6d2595c1aa80c497d85ab7040118ca8b57496511f812fb8c088236aa1ce02eaacb3604de3f5e519191b9451a4a8a0852d3b6b005411020d54c1fac37a14721f8a699b82624eddcd62edfc50cc1f581bdbae36d6a6ec66856202c1da3a98e60fc5f47d4f28a66fac7c7107729ed9621e937ff31f7d689b79fc331be98a89f91ceebcb4eaa2792cf3331bce9333333f13eafccecdaf78fcca71cd7e46e6f531382d1a9acf0f848b68c29d1b1c63e3793d0e8dec67b6163fa367aed1f539395acd2ac371c7e66f6a62bfe2b1cc17a3559b8ef9590e0e8dac05788a5fbe58f0bc7a467d357ef82fd8efbcf937dfaa899533fcb7c5e3576d33322e683f321ee7c99f91b6fbe4c7d02c847a827c625ee898d79fff7191d66ad6177ecccebf6eded58abdcd935acd12f555f93a2ffe8ac75a3d59e0530709fdec555b8ca1c7f9fbb32b037feb7f7c682f5cc090019a216a619bf97b43ad43a4afbedf7999f16f3e06f635ff8abdf9aef26dbe25bece63ad66b198ad98b5f87fd5e682f6393fb3fd3c8eec698658c4e811f2097aa161fc09f4b6993f8b4ead6601e9ab1d7d03435f7d7ff3425f8db01e9385cd6b954747a6551bcf9ffa69665ef6b3435be182458b9e9ff9bc4de6679fb37cf4d58d96f5e8abef6b58e8abf163ff72896f7ecb46cb72b48a633343be6acb99bd4ce667f4cda9f33b6f7b7dccc73ccfe71a6de21af7c11d7df57d4c475f8d5fbe4b7c98cd8c5655f2673699a799d5e4d83c8e566f8a70b49a75a3af62daf5d26a968dbefabeacd15730eda2d1aa4cabb6d7933fa3d52c1bf93197eb633e977a7469352ba6af3e350ba6af465dfe6b7cad6695fa4ad41fae71c56fe9ac515f85ff89fa2ad48e6bd4c01fae817dcb7795b172be02b16ecccc014a1e70e022d53696aebbb3b2be5af12b5cda3696644bab369cf2c959ebc59f89da26be8b460ca6f32b7ed42aa9d5594bdb5a2f97586a17cddbc497cdfccc766731385afdb23e7da5f33a3635bfe25ba56c66241ff67a3dcebbb46a6b3dd9ba799bf836343fb3dd9799b97b9653f33a5f6a15e765fe8a27b5aabedee7467c1b1a198bef99d1b697898965989ee2791bf93bafda623fbe3a857333f3b09fc91ef63398b6c5bc4ccecfde46f336efa3d52c505fd5f4b0305fe75d5ad567f82b785e3cf93bb31cb0a5d5198ef83736349f4cdb5c333231cfe2635ab595ad2f5ba318fb594cdb665e80facafc9af07562c05ff12eadaa311f23f631412ff42d5184f1403fd2e8553693df46fb17e5bf5eb54db9789beb7d5eb54de9b7917fbe6a9b99e5d8bccccf64b44de6657f37deaa8dc5f7bc6de7796268d57cf363b42a14147ecdc7b40a04037c9d8769f5856eefa6e9acacaff2aff89756672eb42df640ef7a1fbdf6e8f66e16fac5c3f852ab334dfec9b373b53a9b69dbcdc1b9b1d1b6d7df1f9f4626f3cd681548ab30747bf70b6dd67cfa6a85d67969f5e76db17f01fb588bb7b978daeb613defa39f05f9ae576de293af4e9daa4de6c557a772ded67a9c5767b6f1651ff3339a8ff9598cb6c5fc8c6ab3f99b175acdfad157e1872e74560bf3615af5e9d1595ff32fadb2d03a6b85bed2d1372eadce4e6d733d8b2f9fa7d4ebceecdf76be7e52abb31c6d2bdff5adc7b9d1eddd367af63b2f6a754633be6c9d89c1f99c97d1aa8de7c5576de3df8c34afda665e16f3af9fc9fceb672f6d7b7d8c8556b56eef3e75d687ef9ae9ac15e6975acdc1d1593afaaa46cbb44a63a3f99d1fb53a938989bd665e3683bdccab53366f233fe755dbcde3fcccd69ac5bceb672e6d73fd8b67c5dbcae7791ead66add0575adda1d1593aa16c4667d5e82b539b325a9dc568dbf8e2b73ef6d2eddd2efd7a9a8769d516f3e3ab36d9bb7e06fbf267b6d6cf7cf9b352db622f33d3331b6d13dfe6c927f58aa3dbbb6f6a1ebfab86e6a5b34c7d156ad7a855975667af1f7f6613dff5e3cf466d23bf94e9194cdb60337a9589b5de367eccc76835cbd457f9730bd423ae71ff7b989ebdb46dfcd68bef5a4bddde4d3efe2f8bcad7c01f7556a8afbec739407df5fda71dd7b88f6bdc10bce0d5bd3134461061c31ef7b82d20c41e77f8652cfff83d545bfea8a7eeae723df8a0f8e5da4ef16ca8bb414d0ab94fec3bc562ed768a67878fb5efabf76736f0f1833fc31ff6eedf0fcf2a705ff202197feaeef0c5b305d57adcdbe15935c5b35b53b72aefd66d616dd739c5b355ac291eacad8373809fff26cc0183bdd54b67113fbf8973c0aec6cfef02000a3270011a8c5086b0802d19a0f2b5d75b659902401521d040957d3f0b7bbfccf1d25659d8fbdfbb3ecb5414292a688103fb6a280dc5bcfbfcbef11c4f53768369f9b5ced8db57abdfbeefbf235f128b04d8b23f9b5fe2ee59b19f797755fcd69995c84c68c145a286fa420d958bc8477c3f3404ba3454162ce6d57acf72fd288313d31aad90244992e4672da4b8e2bf2998f631f1efdb463b15aa2b71be63da4c12b3cf32adfa11be65e7338d66a12384293694ce6728867e3e7b0183695f4fcce67b1e4f81695f4ecefbfc6cf62d1e438169dfce8a77f1b80598f6e91081e7698f99f077fd3f96a2e67cfdf9f88b4e097bfdd8cb0e8b30603694dade9d157b168f3b006643a97988bbb3ccc75c9e766617672ea2c5998ff039b3123d676682853e4fe739bf15a76b76ca726cce1e4c33758ee952c3f48e7ee9af8a171a2f322f335eb0971badd2302ec510ccb71c47d304cac183becf3660daf7598b995b908718c76f081cadd2be2bc5fe5e88dccbbddccb13c05438d268622ee568de642f71305be24f8524d8d22b663539e28ab3b3e2bf094192546dc09f6257f47abd1dfe14cd4fc97e6ae6a7647e2ae6a7c69fc23f053eeb5bf61a6a75eaaed8ca8aabac988a8c8c56f1144cfb7ed52aee61daf72b15f8573098f6adf8a744adde2930ed1b4556e4b2b19ee209a35e2930ed137555cd0e35ae4109594b43b1427fb3d6df16d4e89aff1e6bc14539fa3231042ed2d13a42e0221c99bf4af8808b76f477a36f0d47c89c3787f3f67086273863a3af952d36e0a21c700de3df2956f04d95156f4505fceff1149e6f712f878a7fdd0513fef7770adc9f3c678f2198f6f928c5d0f7ede8ac781ad9672d66f915f19d5a1d9f47ff17c5ddd1eaa8a355f38646abef5aa57dead4adcad93c42ace86127875bc3b5728bf878b49ae5d2ea1502d3be15df5ab1a3d5dbc3cecfece868f5e6a0f3323a353434afde1a687455cd96e9ab05d3be8ff96b65082613c3e5bfcf5acceff1f77db32fe7c3f96e3e9baf55f31fcd7fdfcc7f32ffc5fcf77d355acd72d1687508a67d340fd2c8b4da03d33ed98fb219ad56e5ec99176764627462971df36a1bee185d55b3bf0f7f28a62feca55d1a2cf5f77ddfe7d7ca17e1e607660e76f63283ecc57f3eff5bc52f157cba076519b8d152901b7d56fce7fbb18639c27627c176175f4a29661cccac97bdecef69f7fd2bc07d2e2c92986d99513f2bfbc339e7cfc79207b90739719d8a29a2b8dbb97c123724906311ffe0279f868bb0232d79107e75e8f6c048f165b7b4ea4e7049c2b71c8d5a1df1030d7d5720d698851c90f755bd0535afcb77158ae65d0915e78f50638f43b579c7b49ccfd13470918d86b2f96b44182a86b0f3e3c045371aea064743e1e49c1fc234cfd150392648c0ce2f0df59241c566601aea1a1126cc10b6cce79cd70aa6f590dfe6a4396bce58cdeb87b0d1dd927f728ee857abcec59770d18ad785bbc5e7c715818a0dc5c2c5e7d7edd03e7fabf3f3f9ad66af0bf70b55bcaf0b378cef31bfd43cdf3aff45878a795db87dfe7bd78530ce17e7cfd9ea302dbf8b138769f95b9c4b3ca779066914159b1a317fa870c7a52c15aa64be60f102057736cdb5b995f7d452ed26291125cc9f238af8d122c44f0f3f35b8bb23d1e9501e3b5eaea5d2f18ee0d295d71e81baf186b8fb084fda9c2ec79463d1f4070b754b9f783cdd5a548acdf54857a51d2fc7b2b92826aa233a1e4f69bbbb0d964d575e128f88bb1fad292e57c55b95d016ede1ee3a7639f489c7ae88bbe758d35d2ec9dd47c0a52b9553ae69c7e301754399743af4078fc89ab6bc24bc2436529d0f96274524d531a1ba1c5a85ee4c68794fac14ba3b7282d38eb79ed0843784c74392aebcdb115cdab2546bbb3301a9455fc60caa6f6fa8148e774b71cf6bffc70a6bbadbe59a3c50bba3e2f1d0a16d9394c823e17628cba62b0eb76f2dd303e16cbb148ad73e10ce86db51f156155ec8098f69974a1579241cba8b8ae2dd3eadcaa5b7d4c8af804379ba27a8d403e1724cd2f58198b46c8a53e18570bb947d166d7243d91dbab6cf0349edd9dfefee3fdc6ca164888c8c8407c88418203de204092edd39e58ef04052335bece0eea2cb6a237027bcda2e952ad2a209190fd3713b2a9e91262991276bdab6bc212d94cc16b416372d4c303e5fdc7dbcb8fb24e1eea60f113ee46ef5bcf6595ceab4439f6e52bc4fa976b976c7bb3daf7d5c9a5bdba7e2a1f0ad8b1d9bf2706ceea9fda75beea9c90339a1baa647824b59aaa7e2a1c084852b664f0f54f2e7ee3d44e889813b136f6d5922a121211941bb9c6e4da39edcdd0437596871972134244454e5a356c40892234bd7af0f178723c1e88db7d793d2237beebd9ee39ee79ec7d07319647027bde5ee54dc05d0f356af27a52743cfbd27805e0b61c28409e3ee9ee27837a40b84791ee1deded275e5ddbee5ed3e5dd167db27a75cdae4d3a85cbba35abf29f7b8b4bda5524ed26773ffe91392bfb1c464e53159faa736d7e471e9139bdbe59abec6ae426c9b8bcae9a2d2967da273db95f7c43e8fd73e52caae6955ba3ebb0a3db1e8538c18698bae2dcb44c542dd783aa62054873e49c5d8e5d0a75b0c36c5f16e4f2cfa8484d4ae3c29292a96491a85ae4d6715c7368e9886beeffbbe9c31dee55a36c5fdd3ad45a3521eee7f68697a5ba978acc9430277a77193878815eea3cc88c333e5d2c06d107d8e5f57aadb8b15482092468bf251dcdda80609e4ee34dc7dc6e70e8304c03fd003e0d955687dba45a551313c052eec2ac4ae294e97a3628ad14635b9cff0d3dd65acc0e2feff9fb23ab429a55adb0772e10249d703e588dd8a28ff167d5c0a75cbed50a9962a69e5adab8f26bc75e5d51e6969e99148a0a5a5476a9b52dd3fb9f4d33e39e5d6ffb629d5d196dc3dbbb962e67273456ca708ee8ee3e60e14ee238c90fba577dae56e391dfbf323e078dae376a953cac4ae42688be298b89fe02ec4dd5d8ade928b51a27f2e3a1873458f5db0e6c2ee28e333f25cc3b742c4e3087ef95ec77e4bf8745c176f808efdde9b71907bc58befcd21147cf115718d917bc32b3abe2fa18cc39046fefd30feacdcef5e4cde1fe0db72f07e38a7f7aaf85e3c9a8067f8e2f0c31707f8de10df12aecdbd198f1e00b308bb35f7d28cf962b921be176726177f648b0676dd1ce3057bb20f8c3fa27c142bba43943760ff1c37e07e99f681f866070d7063701dbb699a7efd7e175f1ddc11bfb8178318e77b67dc1877bc2e8c310e795c17187ff80e65a112676c715f3239180117c438f7bbf93a56c24fdecf712ef45fba03c87e7ae03a789190c0f986f713efeb661b301e91f23dca17e3efb1ab45bbe0bde2d0a72366e862321cf145ba18b32087b785bf5c75356e92836eabc477142fde8157e09dbc933dfb8ddd10e3fbfaccfc611c8cf10defd7745b3db704f1052fcc68864908cb16be4ca34bc4b7843bde9bf1fd6e90bb836d601d5c621183375f7c7189c5ef6630dbb8f9d26eebbaeebd37ee0a4c66f18edfc5f722dd1bd660d9fdf005bf6b039737e31537678c3ffc5d1b18df1c4cded61d3f7cef45ba3b9814f3fdc6efde6bf437d624c3006fbeadfbdddc560ba95461b6e2b2f82ec62116d36bd20c9541eec517df7b835c742977f71cee6ec4dd696eeeec30c1882b850942fe4860f0850b121e6210c51114064325c0c08b2b9d2bf02230e89216398bd081080fbc224450550a127858e1831fa8ce908df326c6110c604118a1af9e221ec85b84de22d4f01266871a58aaf0202f445801e4c5070cb4e4001e0c2c432f603cd00e567879d70a2c36328e6566055f02aff87f2eb86777dc2e6dd1674d1c13e014a16342db5d6e958a91e278b7dc8e2a9c42fa8ca0f723be724b14715a2298338d0b8914227aa485e478f4b9642e1105579b5ff9353ae142027a210c8bad0fe8b573f4801e99c485fb806052308d1968c277431c1de88d30a4478c0bf823bf213f4df4fc850b224949c15f4e0e42410f86d20b34b1da0b19889400f4705a27b86409e8fdb0d98d2c0984de52014cb1955f20d417431529e317938978a4046101ad172998328241000c97e08e18d1c627245561881666401af9836cb184bf17a28d162ec0039016bacc10634a110238a2575235e1e0c24b46ec5aa087532485146d84e408cb4636207987fc214ab1b173640c32f3f1836c05711dc1e1d8d2333fa02252b431f30ac9d28766c1013d720cb28249861e984df08625842478237cb17594542d176390901471603c622b3e222d1b994e9217238d88911652c851489cf19a616453125d9f980322e5a296eb73f13bc496487e314021dfd18e0bcef209d60cb5c65bb661436f246b5a4652acf46e4963a47d3d5f4f0844ef05eceb01c20057b47a3e9d1851de69a12714e3e6a61cf46510009a8502f0764a3c81c003b86c19020240f42000ac284e58a8a6f4b6c4c29214942431e188d2101282201dcda0b5f061f11f121fd091c347e7e0885848a04496034af0a1036987c65586471481812c3e64f5c0001eb0e86002cd050e09604a61073a60c2a361865c538e1ba4e8c3152b462d1538f1830f48368a6c6425398a3a330b5460498a2b428404db0f1f3b10208600c878a9a101083c0008ac13921815ddc8be2e5c7c9024c708452d3154c00e3bcc5084488e1b2e5c97087808580818cc27c5eb007fc13000bddc15e026700a5a28703181bbe0223054566fcfb803eabc70b00da6b9b298195006c75cf383e11224716b1cf177f3bda1bbe7bc62799637d0fb06d0fb86842f684ecc2829310de881a04b6cb102291f0f449f8dab87204201f4be21ad1a52e7c6855e0b852f85bca26c43d7f8633c0ac97cf46204bd91889e6c899496511ec094fcd281eb891e18a607ba7252d073b54113e8b56e6058bc01c6006ba04253e220a085af4a2f769a9f8362628c3731615a00618c47228e1ccb38c636077d43749c21190ad1cb6598f3019544f97eae0f88fc01c2105108734232545d3297ac6553d28828e422b410e6e4215a0093e8f9a85fd433f1d9f9905cb130e6bb3928f3f8945e3422164f104d30146332124803bb6199c1cf9573c659cc636e913a5f164d1065624a648c188a378b1f8d2fc677479ceca557d26a04d18309212526fc66638f16be275ad04cdec35451031538d1854b0892a0723a12a68a2b567cd4748c60c4dbed4007315c98b1515421852244c29480035b786618b201013b12f044134b80c0080b40202b86500b26310e40d5cec0ae3fe081142d4001131fa000d6150b4b5250528408901f3c2b6c6a8650440620f080ab284c7674783b9e18ec89174c45bd7a61aa08021096a8605313d3040890e0801116a840046620400c4c5840e18422446c4b9400091268c086202c58c1122500c1078cd880037a90e1051778204513283062034548604a2fc5d97cc4bca49801144f84e00319c080961fae0c20c59d60f3f113f35aa20421d001872b53521c0b24d87ef8b881047b7d3e03289628810890c80006b444e0071a08306505126c23dc4032a241f42313f379981940f102118400890f64000311f881862b0418c094185080c90a4b74c410a282084384c4602ed8d1b152450625270c2d6000323c7192c5491307066f85c9557c45008980873006f101817fc059570626ca4357a80cc2401946fe1a9ebb8375c49c8c836f409b5bd39a9191c9e6177bc1cc97cc8553ea9031ad710cc51c8620986f14d5ae5dd1969d91c2ddc9907b6acab0bb90903993c4d2d237f1fee7d9b47dc244fb4f713976977b36f76dee6f3c59d1157dba3dfa2d6ff76ceedb274ca19b331770f7d1cd9908983332ec403177aadc1de6e6ce933963c48e00dcbd7473a6e72b080909a9d0c4fbf496d3b1bff29a70bbf453a71dbababb7653068cbb9b6eca7c71b761e3c886918d221b356cd0b031c3860c1b4436868c8e8a8e6a1cd1389a7124e388e868e8c886d19191915191510d231a46338c641811190d19d9283a2a322a2a2aaa5144a36846918c22a2a2a1221b358e6a18d528aa51a3068d1a336ac8a8415463a8860d1a47348c6814d1a84183068d193464d020a23144c3c68ca31946338a66d4984163c68c19326610cd189a6143c6910c231945326ac8a02163860c193288640cc9b04174446444544454838806d10c2219444444434436868e868c868a866a0cd1189a31246388686868e8d95c4bc5f4cfe6d2a7f691dc9d28860a777f37635ab06357215687eed6b4dde57cdcbde986a228bab4b4b4c4840913262cb0c0020b2bacb0c20a4b962c59a2820a2aa890420a29a480020a28a0a044891225279c70c2094992244962820926988004091224478e1c3962c488112325945042094a4a4a4a458a142942840811224949494943860c1922448810212490400209b62041820401020408901f3f7efcf0e1c3878f1e3d7af4e0c183078f5aad56db7bef1d3b76ecd0a143878e1c3972e41861841146c08103078e1b376edc40424242b261c3868da3a3a323232323a3a2a2a2a21a356ad4a04183068d193366cc902143860ca2a1a1a1a1183162c4101212120a0a0a0a02020202820103068c172f5ebcf8f9f9f9a1d16834172e5cb868d1a2450b1f1f1f9f9e9e9e1e162c58b0d05aebf33ccfff7f1e1e1e9e152b56acd8d9d9d9d1d1d1d199cd66b39c9c9c1c9c9b9b9b1b1b1b1b9b9a9a9a1a1a1a1a1a994c269b9999999191919189898989314dd38cc56231180c067bbd5e2f97cbe52acbb22449926cb55aad711c475114c5300c431004c1effbbe9c73c61863261c130b4b5858924212244990281151223224486dc78e1dee38a65eafd75b62a1d7636149afd7eba5a0a4d75392a4d74b82a4d7ebf58c28f57a4a447abd5e6f0809bd1e09416ab55e6fc70e58ab2cc956f8729537067b65b215035d2529c25e2edc8ac13e9c8ee73c773fc14df100cee276543ca66fe27d4bc57b16b7e3dd52160909fbb87b0a6e8a38dcbde5ee50a2726ddaa2b81869550edd8141417e497077266ec60c71779bbbf30062f96ce0ee2cb8195671775cbab452f578189f46e590a42dda23adcaa14496d85508973ac935c56853b6a989f7c2fdaeb838b705841df4b8bb05ae938ef3fcc55d9817062c1eabedb0e1003d7777f00730d87177a3ed2d9ca0513f028edfe5a21e0997ea7268138bb2abd00ebdb1ee3e73f722eeae829b5f0f77b7e1ee2470e1ee1d70f7256e660ab83bbb0aa5ec8a4ac5b041244443682888b7e3ad4fb71833641cdd521b4c381b366414dd6e29515014ef26c444f5d4e69c9eac2d9b734ad7183ca715bd09c5d8e5aaa062a451bca718bcd73ddaa2b87f62d1a7a7d66997a6ed93da108f8ec714f5e448cba24370391d5ab5b3b93be9ee1970f7243ec353e2ee2d95d42ef7bbdcb3503baaa7db37f17e4d99a2a876a88eeaa6436fbf4b9f9a7c139eae694dab8acc9041341443280808c68b1f9a8b163e3d617c041c37906c1c1915d5a0a1234c98303974684ec6cd0bc64758537697b361e3e625c2dd656ede1e76a9ee717ccaf4381d15ef89fd9f6773b47792e276b94fab7851e9ca440a6dc2ded2aa973b187369f440994dee5ee3e655727615c2f1a262b4514de9cabbc5905134d45483c8065153d3ad69469a36a137a6229448860d1a46339a8e64d830326a621aaa91da308a716b59aa3506bb0ab5514d8e81b8fb8d9bee83bbc770f7ebeebef2d635fd1dfab874b752b5e9fa3b5eae45db5d1a95eaa4a272dfe6d0b57da75dae6dd1a895d7f4a8bb0bb97b90bb037dee0ec3dd67dcef127717e2a66f6157a15b5ac5a409bac6b8ad6c8c1b4fa743633c59d19529a77377d01d0fb9bb8e9b6e1a114014a56fe9f5b6672332e0508eeea6ebc45fc31fea1efefbb9a6945ec3d87596e57fe794ef71e96a9d30e8a8e52761d051bb5e1bcf29e353f929addbd2bdfcad6fe9292e44b9ca4fea5e7ef2493d0586976bd4bdfcf8f1e75709f93179ba5cdf22bfc4e7f85f794e89d2fa3bea285990b4fe7e14f271e9ae99f83a3654feac27f87dcbfefe95428e72953fd43dfc3bb0ab7552b9b5d68f27955b1b9f3ca7c0a0a3d6fa129faebf67f9f9e56356c2f7ae4f214f198f78cd45e22864787a8d6c9da3f8b716668b1a2aeb09feac271ff852c20fbe66257c8f1f49fefba1d2f757e01702814f2adf142a9f8601632a180afc0fbf7cdc7d7526a104c2c2c2ba9757fae7cf82447cf2ada650f91a686575853fffd5fdefaf5a3fbec3f035505b5db53495afddabf047ed420cd457e1dd95dea33ef8f907fc5205e08fd908c3f0fd7d7c4ea192654ac78682e1d359a6746c18b24ce9d8f9a7ae9232cbada87c0db402b3e0abef3a29abee97395a51b24c89a0e31c2d1d25cbd4f7a25ec7324a1650c5fab48f275bc5b3c70fd7513c334835a5de1f41b94ee5f79ffabe53fdd6a9fcf7a75c7c156b8bdad933636dac62dd2c176b6381f7c65042e5f72859f28e1cc5718d5da962eda9bbb1b6bf6c4afce5b94ee1ff7e2a3f15cf9e52b136a89dc5dabf23e3136b636d7fdd24657e7c5ab980ff7b2ab7f602fe4fbbe053a8dc5a7e17b07ab54f4771e1d6f07b6d47ceb7764fdfb2af32d6c5484af1cb75ca7f8a7c166be70fc92ce547715c83fcc253fdf006b7e31c2e1dc5718def1dd7b85a25758bf7dfa9a4f0cb5f81f80e4b2e26f8ba5628e26f8d677b3788a328ef8c66cfa6eece4fb3c95d8aa7ef4ce257985f406e7689afa9bbfd66bf9824491287d87118e2105f1c8621c61f088661ce39e70fcc37ccecdde3af3eee7af5d4ddf747bcaf06c87d8164177ef9b81c20bf7c75dc9f8fb20973e66580cc3cf9e6dfd3f707fb66ced9fd99876afdeb65ced9fd32e663e6c33ebf80901f7361ec5814b1882f1645d1f5b097ef9bf7eb5596df3abf5d86df26c5bcc9d7e9e5bb023a14e003c761a16141da587c80250b16285e121ea4f030c5c38a303a0a7053440f3be45065072bdd12a2213becd86168a68a9b1d68e60e5f74f062ea90840e3ed8e0c5a3c0c10d6cf0a50639e0724092438f1c72e8c941867e2ae4e269bf90d32ec773daf18058b4e979ec0bfd3ca13d2e65732c13fa4dbc5dee575eae0a7d4a999e95d2a54f36d4e0ee51d8900377c7c10d37dcfd063724b9bb0d721081baf174b51ba0b8fb971bb2b87b0d72b04ed0a427160d52ab621593e4428b23ef9221de03e58898dbed61030dd30633f419292ad83022000c025a70937810c004028ef01e284720008bbbfb0d96ee78df24ddb5298bd3f1565e13fbd42a2d29e176289aae3f699b5b6945961e6849a949bafb252241381d0f89c8c378251d13dae67ec7fb27ba747d76c7cb3db54ed0a4a5dbca6bdaa53dd61d2fc79ac004a7e3e9a8d026f6dbdca7b7dceed3da0bb56c4ef73ba9dc930b18494b4a4b9f030929470e1b0e1ecfa28f04070e27bc5a8e5a53112223459e3019f1110489cd07525aeb41c4e646c821e3b64ba9744d4ebbdcd36d87ae4c2bef977e84a4a8bea592fa95f73f4b321ec7d3fea9c9b3e92e17b5a66d8afb259c8ef7c4a6eb53bbf444d7ded235877b5cbaf252265efb441ff4494f94442bb2847ebb4ba9a6529689eac80be556544775cb3d61739f7b242fc41a4977bff23e7d82fe2e073b83ea83fe6789486989e6b4d3e59e9a7cbae3e19e0d92a1545ba2fd8c0f4aa372abd2d2032dfd243dd2129bb4447b56c607c9505a4a9dd0a85cba4afdd2129152d252da1444fb5d6ea92643e9613c91d2c3f8a487f1b567c1e285562a29d4694575bf44e34718e17f683964cca0c28184d4c4639242c9b14b3cf6977068ba22212d3d9aab7a5cfa42bb5c2a25458573da3d61fa1deff64c60bcd0eab4a24fb71d2ff7299b6bb2a64f6d9117c2a55539b449daa443591ddab2e8ad4dd9342ab74a7dbba37a564dd7677769cb32a12bef9b726dae29c5edd014b7f27e977bb2439376298e975b5329de03e17229cbd3f1f8a62240491e894ddbdc7ac2bf78f691581c9a1af917cf3a41a3943e5d9568451e89c70be19e58f489c9d2bf78a196c73382ded2166dd95b130fb7a20fd4e35fa0bd4023c38116535c30c5003d18316535a7c8047001014811c019830b6298400c3d2a3c30a904808a9019801104800d400e0c5c60880243d20b4378a187179404f0840044208425559a5411526594e10132a820839100869093020ff488b1a2850724985688acdc1948304301cc1996cc1044801b10c00802b440002404900d200503e821862031c406e064004c0388a9b2832a4358196186020ba8e2802b364c2b4e58c9625a9192f9800d01e8c04a09365e030c6a98a18623660180e0c2cd022c718002ac508020546a4043181a80a0a1061a7234ccaec4e08a952b3c2306b0c9ca2703f49091db0036dcdd5d10020753f8a0b9bbb7d0c2121f37a44421a587981f6ae829d19b6283287a347a9f89d5e38a0a1f40dc5b5e125c0a25a743736d6e67db27fc9a4abd8c19cf52e9a43eb7b63b345d53283996e953164dd7db2ec7ba884adb1cafbda14d4cbcc7e9d2275c9a6b5a53a9177a72ca3dfd93b64d5729f4796d9118b61dfabbdcb3ecbf108b93a27a202127a1f4819a78543c226c941334e9013004a505ee4e03276812007c004011779f01bb9da04900f0e2ee33609da049564e585959b1707728a2687797419428778fc12dc7a235258a802204941caa407122b5e43d508e80a204e5080a0d8a0c8a8b0a299e7c319f38e13d508eb0319f28e1ee9e7b4a999e34edd25dae5d53a96773b6175a4a773c224b3bdea7513cd649daa2406c9b5bd3a73675e2b5ff64e5b5b7b4ea713bde2d65593697e6341315ab3fadcab5e84e28a5d2a155ffe8128bde3e65caed72bfe3e55a5ed4eb7237f49fe852a89c8ea6431f5d9fdadff17e87de9e45df29c7f44fd6b4eadbd4e9792ddb5415822a05540d7177183c10af69675ba58ae0b8a5499aec2633eeeee527078e5b9ae4816866132f4da8b8fb13312c7e7042c3dd5fb0e3e5da2aa02a1def8172041514b2a31f50152184494565a6e7022a274f5448f0eda5800a874905e43d508ea032ef8c942a77a19fa51f23484848965674e535ed6c4dbb9cd04fd00d28e8d925232e943c8c57d2a647784dbbdcd207b52b2af52cfabb140a057a8243d355d7647b2129de2a25f583b6688f07c2d9909090d070dcd2242c13152bf4b3f4248562c2ee7268bbe3dd90909a8ad09e0d3a92b6b9b5c9d28fd2cfd20f11adc8d23f69734e6eb45f42aaf5e00505e174bc5f523af2305e8956e4a749baa33deb82dde53e2a6d73ff7443d31e4becb7a853ba3a39a1ff64c7a6ba148743d3754785e3dd8274e88e976b73381cfa4b4a82702bfab47444e8079706a5b71dba5bd32a9e13ed83968c2c35f9a0ff5f773c56a7435f68e9c7c8c378254b4b4b9fa64d423f3429746db2a312faa1b5a993d00f8d45426ad2a5473ed5e5a4a27837de6e6969e99158544725c5930ae2b5542a1a953635e5a47ee5352da56913132768d4d2b72c2feadb3575daf174cfdb21d9f1d8dce661a306d10c21a3346d4ad3a6a50f5a73693a43c691d0510f5b9374d724ddade8fa3f6c8e7da24377e8b3e98a524db1bfcb45d19ea54007be868c194243ffe28d3c8ca7514443c8e891a05634eae9b64b6b6c5aa54bd9a8dd9ade76bc1bcb94fb346d124a8f7c8e1c48703415c19103070fa1a51f2529d1032dfd18a115597a1c9aae4ff44847a4a8a0783c5d10af7d2913d6b4a9a5e231a1dfc44b7168d43bed7229d3b33924a7745d4a99d07f21962aea532774e5b5ec2fc978187f2495e2fd1a94ee8afc2879187fe461bc115a111d5513cba6b71b15fb4db95f5a7ab6cd45f978a1ff1d4f8aead9dca74f6dcaf29e9a2c2d7dd00b2d15496f2bef07121292a5a82596ea9fe87428d50e8d7a5caa7b923eb57fe3966bcaad6992175a7a6251dd91251d6e873ee156f497703b9435c23eb1a86ec7cbed728fdba1ac0bb4457be0f68dc7b2e89ab6bafd4c54acd0121315bbf44d3c262af6858458262af659174f742c152f77cbe9d0a867733b54a7e3ad413bde8e456fbb1c9b034a99fe896ef72d6f87e4034911222fb4a65254ece3d23565c2246ae535fdac3c1dfaa2e5ed5ed052a61d4fa7436fbfb4f42c152f5795ae52b8b46a7da47697463d4195d067d15f53dc2e651f1d6109074b2c5842c2c409b405136d01da01740226132a984c261c321286a02ac0e5704538f3b6c20d07d30d98ae30ed68526a7ad134a64c98a914f3d6835b0ee9515ae2605080053a3013833032928613059c823455c0e9074e3b7852329f663c6521e08c0c8478a281d3019caa3c7171227fdc6c82018e024f31c48019420f006e54e005aa0aa61a23e702337723f7ba162e483a0413ea092816985042402900ca06757349e4a0a843507b50af66789082eea8894a1356540ca28c88aa8a72e988a06342470053a7c39432794f983c0898bc26bc295e91a81d268f86379a3b16e844b0d482b99b61676347236593f261ae33533d98ba80393535c5640ac7d4cd4c0c5698ca5259a498d6a575896cc739e3c310dbc4eac8720cb102611dc12ac3aa6342c508132526472930b9c1b1e0858521762cdccce0a25aa1b7c2510b5cb0f828c092a325a30e2a605141ca4710297c49818b04dcdd53b841e18b8f2deeee2828f1a164082536f878c2dd5d899ff0c5470d4ee861791f3e58f2c3ea74e8eb74b926b46f53365d7fe57d9bb2b8340add41b1e8b36813de5393f686ae6dba02b52a2c79a147ff09d3ef5f61890a4b5e28874ae170282e4dd72674852540404c54ac0a4b5e88d7feef726854146f45736b8b4aa5eb03e1d220262af6f79b4662b83b10374bf802c5ab3252849127ee3823464ec04475e4080d97e270db3c829a4718b0ee4c308f3c71e4c8cc1332eeb8d48889e4dd71a94e97136222b9392e5dd154c7c344e283b7e911278ed082a5041b666c0c29814acf49094f4b4434a0a4841e384a002ae1a604b30407236be14a5f94bcccbc80082526dc7dd7a448cb23c26e26aa23b8340a25d2f2883c69a5a27cf048d31f3c224fa06eb9f6c82eadca0121a14d9d5614c90fd60813d591d605236f4da1fc13a64f71b9aa5c2b1595b62dfabfa35a6392a6308900b9a72d93945dd39657c5a4bdeda89a521c931d9aea6e3268516cfa3fb4262911daeb50aaf6863e5bf53f34a1a85ccba6cf43426a2aa2c48328bdedd096ddd9929ab8fb0d379370c8d0c4984908489a22d4b23927e9b3bc6779bb74c7fb964553ddb7e8afbca6b4094fa7433fea772b2f8ae9a3a8a272bb5cd4efd0a7f65936d57d0a85b66cdaf2aa703b1e13afea9fa0522d2fc90bade8a74cdfb254492fd4a44bd96f579e148f17623f6d5fe8c98d0d4ad76f79bb1d7afb1762713baaa67f72a2e2edd24fabd0a71b9bb6bcaa6fe235f1fe714b46961e7d5cdaee52365da57e9773caadbc5f859c76bcb5c9b3ff6bda36a1bfbed32e875b51a774fd1c2e5d957e88fb0dd5499924547177a7dd2e354950a26d794984b83bdaa23d5836ddb5426cf88f7697e66eb9a6262a766763e2dee6a298a88e4899b0a6bb1d951153480bad29a4019eb6282e87dba13c703d8420e1dea44b8f085981d75a962ac9148203c7ed78b527a8923984746fc21b3204072ec5a5e9cd898f28aaa89c1334c91c7263d39697e4c90e4de2f1900c79c15922e69020d29697848724d531a13b1348e841c210cd24414682cb46c514362f314ca68861409213b622b4d87ab0e560b3626b754b4a6c437ad86800d9de7663fba890e24b102f419c308328e1be4ba39cd0f5498a09bbe3a569958e7763c2ae424c391d12924e874aad28131c0e4dd9154d75b7964da9a6d295892ebdedd05b9ae2724cda1d15ef764399b429cbe27469ae89499bb24e382a9589548e894e978362a26299e07028d32e65a26299b439aaa928266dcaa62dd52d7592a62c4f77d3a12c4f8ab74a3149ab78ab9414cae670eedec2933ca9052c58816c088d8f0adc9d706f22058e821100e96122e90426e832a3072cb82c51021228213bead1231041089200c18c0a6e3891f8c0111ee8400c169ee7c0162336a0811bf01491010c5c80882b2c2b2c9054010a6881c1ce042410812120301325099d0764112208205430fbc1872c073420068b8b9c1e18b0001eb074c149c249ae0019d9909b2410d82425ed90a483113549380b4d0eeeee3824c06f9019b120b3210901eeee0730c00f33351480862b5666547045668624020ca0ca02626488818a396306330030bce0ee3ec505186252927a582d98335a9894a41ed655d42b8a1500a03c1941005c4e929a5451993565cbae535232314c7177d2799ee43b8fd2cdb080a79504a57a6ec62a067f726a4addcd1947dc3de9e6d8b133cd402d00755f7267c282afe0ee3e438883bec455f0141c0525337a247912136620253912777cc4dddd8d9833884a50c245dc7d4650927bd210779fd1c2497077f720eeee407ecc78771feedee3e3e14ebb1c14da1e71dae576b924a71caba3c2a54fb723a991276daedda5389b0ebde5565ecbe682b04fd6b48a7763733d7838aa23a8146e87ae4052a6a834894dd3b6cd4545f178e8d05b6ef7744b91e872b71d158f47caa24f4ab956479594de76a80eadb1e92d87dbd9a4724fac5414dab24c68ad35e188bbdfb8e399bb0bf199aa23a6fec6ed1ffdb40a7d7af6966377b9b57592be0e8d5a7944ee95019e6e2440047eaf7438bad17bc0d3bd6201114841a4e02fd68f1336bafcf870b10260c3911028f074b1a848e248c704546e6f004a4639341157ca0837454b1d70e2b660e3440d2c2788b82e9c4e6860298214774ace86195b921cdd178820858c2736f037005f9e280c03c62b803d04d17f903b00175e8674c8d871ad54608cc1c2095bae01624a4257af246e029a7a413a4479b9587a1004a8881c1c5d1fa8f002a305302e57024e28bd20c2112b77033c00f322274ac9258108b6fcd868d2bb4f54f185a604cb970b04137c70d144025e708c0682b438c0114ee019296cf1a1c00a88c04b0c20d5c30498273cc30b1f584c010b8249606389c5ccefc83828f8a065c838ca554670394bc0b1946d70c48997fa41e5a382e2886706a521408d64cb8a07a4e004f80318f80e0952bf519ce47054e88e17954b9950a61dba3ab9fb9501073c3f2b88230877bf3e2ce007a5990c2461e4ee57070d2a14b112830e45b8fbed40c63a01094c407972771c00163205c8c04704237077fc831cb02001213e70430edc1d0ff1a1630632b8902108ee8e6966e0a20304d8508409dc1d4c8001c05c2690aad8e1ee178a1f5cb1a20201323072f78cc39278c3d308d427dc9dc68d271594e278bba054873e49b93b26d2218948777722afed1db714c7e3b1c212201596bc904e973679167d20a75dae65d75cd337f16c2f84cbe18478bb273a1d55d3df9e4d71dfc4fb37637071c7a56daa938ae2f13087503087724c130970692b45b5ae69bbb33ddd5ab41623891844f8e0ee1ec30677f7185452a71d6a44a8655327272af6db27a75cd4a7524f5a16fdf4a9055a61890a4b3e7d6aa3a89c56f4a9fdb4e51179a118d7dd517053c807f7234d52224236cc9035984255dcddc11a66582084356dd3287445a5988e888464080d05dd9ad620192914aa63f20982e2facd78b6424d87bc3029a0604b07b23c61f24902c1082e20824c8f49025cf851a54bcdb7a407480890d34208bee8800a0b90c0012f058c3980094908c2141f7039410f3880350510478ee8a1811e7860ab5460821b65046ef00413eb53841cb094c8266003113a5000d1860661057684494194295a54608143ae073b2ab21bc278f1c9b941ee08580b22e0c40044c801a9624b0c088aecc00a220414a899519e033a9d83192fc8bde000b32337a83f889257e87dc0ca0932381460c98b025ca0022b59349e95f108021de05971ab020510f8c19727168004013b5aa51680b8c1888966024544761051edc88193471f62d08014d070f464a475a56887b3f7c20f4f648803930858292001a2459c0acac107b09ea9116c40edf9316286268484300117e00d24a071c3e9e2091db64c11e304266c4066e30421543b206086c409125dce060bf8c08d560e3fd0c129002368c9e203092190882209282bf0d0001f0a08a20312c4e60fe001480e31107372683284510042e0eaa283119f5b0c5507191338708109948001080baafaa349cba809110acc0becb440831baee0845eb0c310b09890011676135b64b8082a2103389a50e00a8743012ee5b68005705b18f2196e0bd9c17bef2b08300481e1452b7c0d6d1eefb4cbed9c7247de089bb6ed7e25408eb870e5cf841c0a0d0d11f1a4561e8fd7a5edce16e3223f13727833944384aea88ec7a3ed0e3d52ba44992119d1e6815de31113f04cf89990c3d65049b400378164b8fb959b30b478cf0b48bce70520ef79e1f39e2945b8d00a4b5a9e8e05c2ed72502a2c7921367d62511dfb698bde723a292a1c2e6d732c4f2ac5b5bbb42a7d36f784e4855a9e8efd9f5bae29774ba5d820dc2e07457bdc0efd252629bb944a49a14fbf84dbe5a0967e9756e59c9a788f4bdb952795aecffb1dfa6ceed3357d42f2309ab83b113761fcbc604206d70119dc063cbdedd2a6a6222f8a305f08f1a20777772bee5e829b3f6cdc5b3637e4c90a4bda9465a2c2929c4e4a0a6d9212792129a1f57769caf42cfaf46dcafe13f4db5dbaae543cfe8709c705a782a8048c9226a220269d4268648404000000d31340303820140c46a3e178400e2451760314000b8cba5074489d894912a59031861842000c0018001800009a0634006fc019b1dc45e9feceeeb80f7da4d53866f22edf73cc32103a1d43870b1677e3f2cb5cf7655a796bf01b1ed00b00fa4327fe579bf2e5797f4c536d2d7eeaf66360b8d8fdd6f6eb71ce9863c9809923dfd413eb7f9f399597f17859593c9419f462d7fc2d7b6c45ae2c0466f474a7e4b4fef2c6ca0908153dadfd0fbdb0591ad4bf8b9e2e7a2df5c6e96149afde81f1c8102bdfca50d3a745513e426522aaefadf164f7b7030bd82f5650ba00a3f827e30a8d7787ab1095352a4a406e8d98b76aab2ad36645519797b9e41f28c5d229925c715e16cec31c1161ef347fbefbaa8ab79c5a4d43f8aa8e75aca8f314d844bec9bf69d0bb4b615f7522586d6f5d33bff9427ec28ef0f4cc2781ffa7af40140fe33104e359bba1d5685803b51362436ef1cd21c8b5633d3b64626b7a6760a1286cd4fa214d686fc23167d41c6d7688f4e67919b1df5fe50f6701943f8ed1f37071b51973b7da9d118fbb362c42e4fa7b93f95da8d3e67be79747abd1ecdeece7fea5fc38a842a4664b1b86ef885a55485a2c708ad96716071c0aacb2c903459e2397cab94098a4dd94f8df284cde0cb154f4665d14c3bf6a111ec964a20c4786e697bb969f6228d418c6eb4e4e5ccba4ea1d6f2eac2cb0e0d7088515083734f9ca6590e0eec60cc9fef4213a86da800ea839849e768095ddbcf22e8a1117a277855118049b5b00844bbe366e4cb9f36f968c836f1873692ed5803bd48463e863982851bb92a7c8005134144f5e1f8f5ee3f34cf08ea8ea081f9481f6f8bc55ef90b5b2e8abb46435081ffd215fbd9fcc7635abac9d37ef1738da852847eb0b2354d7961080be11e7430c142c818e0624ba56ba462a24afc425f1065c6174ae8acb61bc2aba3453f8bb20ad3386d4320fe09fdfc3359bf9888ce5c873b82a0d19d9f989cd12736ff737b8c9dd14cbbfa15ab130f1fa12e02e12247eb6c8038c12acfb5a84ae52312c67f12474843739ce8a88cf952a2691d950723fa3c4c9cd8a2e82d1be2a02921e75cabd8edddc26e30b892256f86c5c3f65b230c74f60a3380f3df3059d6ae66cb1b5231915c34826c02670beee894ecbe887df252811e4d37051c1195abf115dc28620c45ddc73d4e074aaf5a606d568c6d922b12de2bb4a5c530fa13c1dc3029031019aec64432a829b75f723f8a50f7694d702c8e35e2d5b06eb12b915a7dc310db5fb9dd0949a828b7553c9a68adeeebad0e562a23ea04ba7608e0170c273becc63bb6376e128410e60ddce880d43214b866f126e310ee3cdd2c3f75b3301b6ac759157ca1004a6a369a0f8c8ae3c554b90f4a0b4a165f0da47410007e3f9db09808a032cc1b3538d6427f9641872c100dca758b3ce1489d152247e482496cbafbfff745ac48efebe4bc2f77db75892f81bc3b0688cc26a48258d69d5ea5979a136f49b5f7a6fc221adc206724ad792aa4e1df652860f34a16da8efa2cc9e1b05e3de609b63eb364461c72e507bd4cd676b899e7b131271049ea0daa560bc3448b74cfc297975b571e985195041ed3cbe64c800e4dab69960bbcdeb1a7bd6f76789578147ddfd04f2a69e1f0da931e5708940bbfc2bba5191426c595b022cf285675a5af0742a9326dc842ac7e4bfb0c707576823917786f63769bd98e4bfc66caa533f7a4ecb6430ba76dcf9963a10421d072d1eb0cfc7242869a89a9d1f7cb37375b4b378757d6eeea550973a6611f85d1c9a3f3bc511d48a968126c884083cfe9601f7043fd680c4b69ffb9bfaa84e1a31542e3ce9e08d1984217dd7bd16b3ed7fdb66be4fb9a1ea54fec0cd3548a6ac5780328f29b95a36be643e159cbdadce50c5c93b03ecfb1a9e39baa312c31a2f5c5950b1af201a301ea58926871e9b5046e6405a7af549ad2f02e097555690a2adbb2c13befadf23e2e43ef4bd9dbf7d0345546f00ef69774213a29ac0fa47890d1a9150f3e1afa7b289712a25ce65d2d584f4f2708f3d52209036f10e352d6f4c529883fd87b0b0259a1c55002817447a1b04bddfe3e76e5f7903efeb59edef68255e69a75d50bef58eb49c4d37e80dd987bbe57b3f7399f9b4d2c4abea38271bdb1187c6e212c343e5fe747ab843ac9c64df56a4cfce30221adecd2e96371d4786b84686a75b1c637bfbab69ec54bebca11438f3239f45ac9a9ab8c64bfb1177bd347776de36da16af15df7394961dfb46fa8dfddff169327782b4d985ba31bce73d28cbdd4e349eccb3d6814f8e8eb1dd9890aecad76fc2e42be2e39458ef6decf9de95367c35926272bbe6e6794dc1bf95370f602b835e7e0cee1be19533316eefaf6bc1f80ad7bbb0660f85cfca46d01cb29d8eb0790e165a9ebf3aad53897237f3145b9d2337f72e6a143dfa0dc8a15cf8af27eb6c04f727ca6e76fc99f46d2497c2abf1a5d363ecf7ad30e52df13858de5206ef81fe7d5b9e5f87e4f91440ff227f3f0b238f4fd91fc2783f06ef032efebe5f36676712e166178c6cab3eee8edaf12e33978700ea8542df6d32b9a07f1e32d788fa9665f6039f0f0758b969c613894846cfe62b294e9dd639a6b417fe8ef7ceb6d976d69a8f58faf2f91e40d5db262cf52391b3fb746982782dc2571a3444e6fd7fa7b927c34f1708e28aa75c27909cd9d23f7af457791ebefd82ddc67c367452659ac5ca993c5a13473d9650a83eace716ebf844bcea07cc6ffbf145ab6b0ec5c498d4dd2628ae7e9e13852f65093cb96daa35974accfab00a77692b30fed60856952788ab39f98c6460bceb673195aa60cfa1b1942aa1070400f1c1fb0d1e4c8827193651a9ce8ce0fd61dc8bd6d4569b9403d2af44a88b27bc510718200828be9be2e8889d3b22f794c68d5eec4c123bc493dd856402fcd98cd136f9ec8c5f64ff475c6681a003ba7ea06f6662a9f78789026f1d7a10a6abb3b18f083c0a803447245f19c4775ebe5ff2653cc54bf1e1633b869f2238cd4aef7d21e067f2e6db512977924330c6b430fed39c4fd9f5ed5ca86188d6697f4601763eb61b3caf379f4baf9b90af159b5f688719e1f2a6ec17bbb35c54649b2f44066465f2dc7e0e312726b8764b1a05af01efe9f10a914fac6c10b49615e1facd12a2a182744a26a74223c1d3c44134218eef5c9c54daf91392d8abb543d4293fb7901564657b819a401140b09a4ead2cd90e9fcea6643494258d74c3d09a5b6e8cb41c5aa36e576125e48f64901e0001450a1a465bdafa9ff384d3dd9e37847df3cb72be6d8cfb16e3bfdad70479bf28cffec396bf8342390495c68c5b89e74fe2e38524bed35008ca0523f0b05c79ae7c751bd56c77f6b4820c205df4923c36813bda1ef68facb71d76aeaff4e0a12b4a537872e05886ef0fdc21787ed3942680f20e11bc8051f5cacca4f929457794f6e56a8b6b15e8ee5e878fd87cc965b288b0a498172b70f690966ac6ff8da1d2031eb80ba11fcaef451fcb2a7be6af6e922b325f092dd443a3c8238510f44687d5b3cf7c817f3e1c764cbcef2e1a4b50a3e2bbde160e33525bdd1a251c9bad0d1c20cb28f0a8d80f103aa9ad6b2f3c28fe27cd9704f7e408f08c81768d5b85741340b8ea8e9d510b0eea4d55bc9c4dddbd4ce2b12371f79d1016c107d08a81d5093accf92860ef1650e6dd505d5eba04f936bc86f1c04ac1982b98e13488c1141ff8714e26668b12b6939bb29c6c569a97bd0af8d5747c29ecc438724ecb092cbd91bc47626c9d821a06b9d36619c0841374514950c447c9f3f592355a42826ebaf5cd6b5cc9cd2f1a0f3c30dce214ae40094f4e26ab0ba9c7c9f9bc5d81a47395448ff498beb683958a9d23bc48e6c511228e172528bebca95e585841c7d3bc5b8282fa93d6f9ca0e8f69c8fd4dd6dc9862d50d00ad300fefde0b47eee347781032d4efead853678e711c7da2b541029e8a4902b51ac955fa165d7bca5fb67f742cefa0d9aca03d62d49a758f54d79fda15ab1bb7e60dad189b415ab95acafd09e9677ba4ae072e7dfc7839b2f5b353543d6a58174d49ebe8ffc25b683327835d7206f06878b20197ceb2e6e957004b72695b6ff31094094a816c59f8daebf7a31596f572bc0f40a6ffc8c0903d42145ecc56e7309b9e8ecaa0d0ddc2fba83e1a32f157ca18e6d10358a34157f3f7b50636b44aab40c123f2283792873576f1fe66a2cea012859980a4dd653a735fd0f3a08e533a956dcd54767eeddc7a7460176ab916a8caa530147246e5746805927f66e91c78d8c065e227bc9e4a9ba5e6a8406525a3cab2d971dd319ebd894381be04384891728a7bf23c23945d4483d03a5e9dd3d9de24a3f448c391c372b558ae04b3c5ba9d34d591c64b049a6dd9276cabc0f8f8fa853e4ddc7b620a13f319fd9508893f693f1b389cc41cbb895c8c4dbac4b1b97ec171011fe817ee5b7ec0eade6628a6814f55db400741d64b49db95268e10d3bcbd302362c80476ad5a46fc83513ad36215d830fab5c56a2de10dbd3860dc67deea255691cff0488bfc1ac6ec5f93704d845edd521db48d61de21652551e65cc225fcb21f05e0f327c9c43a3beffa28cd5864a2dde8b53260e51fe4269c189ebc65ddb37789c6854284edf812874f1eadc61550799bbb545f1e398a259a9a7251ab68b78c0532416c0b098042ee9c550be97f4c739bee93fc8fd6212aefea0821b2c2ffe1aeb1c27859753d1dff065e89b9402a841bf458da383fe9dd0fa15f7b2136d017f76e754bbc1f850c3f5c91ad465162fa304ce7287e4e21defda5b8fb5c931580b1b9c98a1a4fe393073a2d0e48c90f3dc1564f96bd155cf30958b60ff7129e13a666a93d9b69f9dc9defcd7b5f606121e80bab740a4e55175c59863d47126e7031def04d9f420221eadc45296965a2ccb2dad3c5dcecee2c1176d7744e5fc598dbb657dd1ce0767b761982fc1578fbe9b26d14f86ced76eb84c8a105ca302aad791d363964b2db364fbe5ed8271a29662b780bfc9cb167631f7f4166416986ee785057347c1f09ffd42a9a989acbd8bd78ee13f39ec5f1c6d9ecd45fb5542dabfa340e0d0d1df0da774f3c68f08252b2c1ce1af5d7db9e57d99df519606819e8c1c462a57c3e99bc7241a3c5600d7ffcccfbbc648418d7cdeb99099cd6e1318a3c3f9723f4829576d63fbfe96aed31b099e615a1fca6d175339e23888524476e4ed17eafccf50a1b61a98a2c67c4ca97857f11def685c5bc0d9daf466a4cbe1f232d995633a7d3b57a15eb6b2c7f1ae6e39291ad85bbcdbf9627b29ec9d983493b2c73d3daa8e703d67dead058e5d26cd633acd758cf77d88ece573b33f4fe3df978deae6b29e91a38c638a37e29f50fa83c02489e29780bcaddc1410cbd8f34f3f42d86f313e0e12c7dd4d30174029d6bae3704a339235f34656b80ff8106f21f7ef450ac9e0055dedefc9375af4f7aab2e07fcabd8b11dc25b2243ca0ff680943e8b40ec1a3e69ec54f8acfc0f42d1bcfdfe734317c4f669df377c5c5fed8168111139d67e78cf4e7e8b9d35847352e4f505cbb7839ee2cd2d303733feaedbb91ef6734efdb25d7cea2302610cac758fb3ca8fcf659936e7309ef0156fcdcbd8e5d2608f08d3feedf10c85c97bd432fd7b1b7fff71b05d803a86c01ff30b24be4daff305d0ef6e4c6eff6ab75d8305fff3d68075c7c2d685383f603e5ba14606c803ac73ba808536e47be87c61c8bcd7fa3128e63dae6cfaa72ee5a37bf7ac53c6cf2f6d40bc3772a743c045009bf82d424a7c0d9a2089530c300487a89e7ab141953e881c76b83166b61dd4595ae88d0c8940aa647022fac82f274d90df00f148fbf4fa83f086c7c66432b65b903eb58b09ce9c81d52ff9903ec767dd6d620339dc53609001d0b1551b68cb9bf6f6c5727fd9ec8fb6b8545da61ebf24edb14e1d1305e90e497102b4147ddf07bbe5dc015e50b699241b8ceb4c366d7e4db117670871b3706185c4f5bc3ab79bdefa663c3801b1039de9b4260b82dbf2ff360c4aa83b3cda8e4cefd1495ce7af20aff516daa2b75ff94f50dd8ed45907c1dad229e1665cb4d3e5a3eb2cac33cc6b66dc9f5e89f2fcfba6a00f27be427aa1e6d5086cbfba8745df2a2f3aca670f715683a68bd80e6fb5cd012d34ef2dc8e5c9b781c3434d17000e3e1fdd6f15768bf8702581e08566cb830873c1d803473d81c0610ba5df1853d33b0e9bd0650e008378919a5542a65666f6338d37dda77fdc20fa7340b7ebd588dab7358e9476303e71b532a065f166c00807009262c9ebf243bc17e65637b779dacc45d962a4e35ce2cebd0d4a56a28415e80a1047287314257a8dd8be78de4f3faa5689dfd73e4ed5e7aa25708ca4b7d76e7b27aad142c6d3450cc4226ab280f28421f3270f8bab085cc9aa4abddc21a50297d839b8e23cc48ece5ec21cff383372e4d7bd0b7cedaedbeb3e304d7f8614fc9d1a1956b369ed13685916e4b7d4df5df1169675468c8764fa8ebf823022c9fd7401847ccbeb749354db4386fdd83da27ab06c7779274a21160d1145c19256e36e97bff3dd77551620787b7b4c76b3b6f24b50f760addc699f7cffd5f9e88148943a8fe42aa03b690e4a97d5cf55354210fb555f6e7a53c2bfdd0961a12664184d4d8457b919adb5252f8ab9b60b40f8fadb74bdc6cf2071f96c13c6af83eb45945f07fc99689501d2f1ab4b3953b734deb686e57bb93000f1e6f4085cf3e3fc8a68f8f5ffa9d7bdc448107891c303e5a9a2e027f46a30ff5b7831e01dc4fd1f277bf4fb157fb75f4c18e07b0d555c371feddf388b2a73f7735616c2a1958d0b1911d5c8601056cbc0f74db43019149e876604eed0c4a6c943c700671f90fb4b5a7a2ca83729ae614d74c91af94044c67b17cb8643266c031a2a17091b04c22f45be000be14e020bb7dea12d38a123c3c3a070ba1e57d40184d07ecdca9fa0598e5a97950bec286face5108a46232e38b80ec1ed572215a5098d780791cd97238d6a49cd3693debd0eb128886018c0da4d972112958bcd04ba84c029efd6c116466ceae4671a16a2b4a252a67c69b71c25551e37bbf8429325528ee2d98818f543cb1294b2c2947bb77d314ca1d43edab80a2288f35f929a4bd046e93778a6ff30c25298da39b851ae3877902bee584f5083c57a4c3c13b9682f85a727b39094d2bd2c74cec5437b2a8856f7a2860651b43cbe1b87df695a82324a8934f345bbc528ad6ce6ee6bc946624f94e5725b5bf30c25ba482f4b48381b90953bae4020e25ff11d8c06a3685db8004505f38558bbfd223a7f3b48cd18ff4c7207353a0d4d68863829002aba719015195584f0486d808184c52bf00ce24e024b8e8b2a10439c71f6035537ffa32211242f92bfa321eb069bf3b1d34ed982d71cd9f1328392bf61c0a13dcba896aff2a6d1ba9227a2d425f23f28a0cdf1dea157a85d6f2de8182444bf1ab663184365f5f2d182a0748700c69d5eab23efe981844f081250ffd5ffa0dc5160e9469a3b938b584846644e69a4c81b8ae862e7f3d5460f3238782d3a3081513f245dff0632a7c8c85d89f0b2ac1745d7e9bf8e25f853219dd08464b1585f7197c8d82fca9279271a7ebf95e8908c4ee175e7f89d8fbda2cb6a09f2f748a7d255f63f3cd639c097c1f03af3458af99a4e8e555c5a813fe15c43e2bb77867533a3740772939d4a48ec732ee9dbbd87eebe94d9cd3e61df12c8f1688c8de1c5b3e6163898c236aacc1218138c1f2e4c559dbfb0ed2cb356fd029e8f994bf41bbedd3dfa32568679594f7eaf29465769add06b69dd3c868e016ebef6bfcb5b630ede4f85349a57bdf3883379f272c8987ac3eede37b679c7c79974ef190f5f76843637231fd93d0fa78d3f67bea7da4e6ac6e1cc91889c00bbfa2b7b656dffab77116db0937efbcdaa390005daf2655ae17134aa4733d59847afa389ec0eb8da75f9893fcacc77c2efa3540a06e88b08b6dfc4ea7be14ac9f1c16e18072358f081c994229f192615b677c9f852c0744fa5723b1ae3efbcda47517e55b5b33c33d09990c877a29e74b1b3e1c0fdb9d3b1b99ea4afaa90b9919e34d09f0cada365e547d561993fa350987ab605bfaf81fd9518d974c580630b3e8791b3893bbcb20adeddfff8d73c5dbffaa0f77dd9b9b5d1bb8b36f825b0f67aeeb7c7b74269756586e1be4ec0f37996af03c67300d0736dbc51486863510b7995fe8018f9ca17a40a29fd8de4f70247df044b028040f7ad6bbdea147cc3d6d2be8814dc1c9351e940eadec816fe38bedb3b3d7f34d1ffb1fa7939df7267a6984d6d97ce8f6bc7d1f6f2d278dd577f11099ce77da2746d20af01bb02d0b2c2e5ff5ad7a32e89b5bac0b2a03e6cb5d50146acfe55e85ab43dc0586c5797cd82e2f0dffd074635832c56696e6894267f5f9db1a68a5e328061c287d80398d8bec7946693f21af619e9e22ba6844edbfc0971834105820ba0ef272c16aa6506b78262e8d27bc2b600fa5db9b7de3d3848e8a89d2259eb58e40f335e7c32d0068ee5bf3f01942f7b6d37b2fa5c74788581ee3de0fe12ea9f5d0ce05695c0c12c00bf35ecec08ce3941caf47254f546cde83e5c6e4860cecd2687d76547d886fd2efd3f33c52da1f58c24d05f054ed05ee7b788c43eb5dc56109309355e4e97ce3c92b390a7f18d8b36f7cba6daf42d8ef03353313304f6c0b69d83ff89e091374ad48c77c537ecb43883fd191bed323be287a3e4980171d7d93e1829eb6c60bf973202b8c2bebe01b63d1f29a78f43b2385205dc73e8c993633367002e9b5ea179b1b4a7da7b521c146a4f98d224e159e4ffd8576f5474f80bddf107ccbd2e50fdc3a23cf75320f827497789ff70dd5dbff3bc0172650c1a347b10d5ed8044afb5678be8d5a1d815b1c0093d11870dd6a7277d48d5300b88c01a757d27d4b83d0ba0ea2519dd132aa69a35b0ee02267db0684b3ef926d5853f247bfb7824ee2083ffd603bf49ccde3302609e3303f3e1fff6301fc2d783bb920bd67b7d7f8677fa6741e6cefce1302c06e4722c9f8f01bf380a66737fa5df38a9fa0e8b3f8e7eddfe29a9b5cfd70ee0ba18fc5d82bfe318fc1d14895eb5826ec43e6cec1867ac41eccb62c3ba620f3e36e2156b402cca67ecad710b00464f077afcbaf14c4f5c3791e867a2178f5b16e8f9a9dd2e11a5392731b7859d9e8f6c5752d8381a4920361ca23786f0c87b91a01e9cb57919edc8bdf03298b582e828aa55152937785df9a2b9b566e8921604333a9b658e00162c748436f6cdaf36f3991b2df6ecfda5173d1505c717f434dc75d0be3e9e3905ff4f26c16486f3a28c8144c12195f74dea47b43742ffa257cf42bce74fa61b1192b5f76fec5ec35025caf46b4db74d3d8001d2c2ec2e963edde5e895277f63dcbe0f51f928f4b326bfbb0b4f55882d55c9370695f93e9768a59a97e61461cabe6ce588c7cacaaba66d878678c0e713fa278b451c455d3dd9e0c4e9794cfbc5c8afb664d3362ea923ddff3f93921f1a0c0637e5a9ca6691e6dc26e9dd4b2efae75263a7b13ddfa60de23df6570a0a8af1a8b01f71da49a2c6e03bc12be83e91cb1e0cb8cb3b0b176c9e3b74580976a300011b506fad18d5af746d20da7e435991f47e9f177676c459a930fb57a57f8923d12556ad2c9570079c2602084b1f74c6770295f03763135d99cab2201e1dfc444264e77cb9f4a6f89f1424732ef8c683f12497f0d711833dc82a4a44a7891fcafa7f8fdcadd055ed246b2d8391a556a076447dc0083b1406d2e40690ce281a24186706140f48d79e124ec382f81eb50b95dc05e78fb753c889af55375d9468cc01fae63d8b6e2f23e5387149f047e6536fb0e3311f8fc99dea5a6ef22b10388aeab985929eb28deb1e2b7973daa250390df0663dca8c4706425352df7fee47b92c01001539a73bd57e82bac7e6a7fe683cbe827fa751704f025aaf1aa83268dc8a10e960bdb1977ad1677a443b7a99aa6ccd054f3eea5f72528ca45fb8c18b9754717383c0745551fa14536548ffba5e43ee02ad478ba1b4ad68ac5677b289dfc604c079f26854258ae62926609ce24f743da93b19933fc81e4601b9671e8ec012f354d911add7ade5da6200323718d26883348c1cdb98d85b4e0ebc2e48e3e8bdc645f906b918a5dd2c9b7984b8f71a16c24774b313cbcbcded63c013517ed4f3dbd620b8a2e11843a1fd8b7f1520c288f5422226e22142d1c5539a5ea3a1760ee99a58391c4547a34c9bc7e4496f4cd4cc72e983991848f9c176c6f12f73c59a57964358ed0e738a44d73380e0a5ef011968fe660b28e4fd1e48f8656a96724988d83ff0262ebad51c4995976a77d0c800c7e696c0452c646b56e2cd9c2b458755788c4ff7672a3f01e1a0107c0dcff131cb3666e0ea5dd8fa71df8b0945824a78dbc45bd90243048cb4ead5a3136d6088d8b8ab5eb35c4e3a81537574c7b39f3f9268110cdd6cc5f8fc1ffd2614bb0ada559279e0e1b223673112cbe6921c6fb56c8763e7c012ac026cbb03a06ab4f8fa7d56b651b46e84568380fca4126312658a90a6eed0cbe3c79a5781c1d85816b59ac55be06ec1dfb2a67a2c719cff02237c9ded0bbb151c245f1dfa6e255320a846300d496e561e8633e290ed815268cb98f0eb6a188da66183649f653186a779059bfb80c47a7e738defa1804a58c8f25e6ec22ce0349017b6f302206f0f1c57f17c022b341e826f02747bf7bb8d4a27c4ec41a9e04e07668d4ccbb955cc7cf59ffa2c3b52f98ae2ba44502ec631f000ae0bebd91e382d68a60c240f824b31436dd710fc2193f3f945192618b15c7518a89b6d3b5833254216f4fa2d8326fdbcc5073b4f1a84afe4f24e9e5a6e8ea02a23cca54cccfaf4d55405dfb17c3985cc4463d5319a95ec708ef129d87361e02a929e888f7d083a3cf79bf032ce597f84e6e02b86f8b4af7ffcbd75cc436b844e7a86f7fd9943c7370b740f50bf7878e7fbad5808772f524e616513b38d95ec7d2044d14d22f049abffb52fa4a0bf944731b300e2820a3011210b614477c647098d38bcc9b37fb9207a8b3fa67c9013a49326d3249cf66e3445635797776a9bf22fb0c98023abd4cbf190a0a12c7db33e04c6759c59c8615479263e1c7c8077c855169bccc6c1c1ce72526d0a6ff066d445746b46c27361613127a6feb822cfeb30912bb0fcb972c17390edfd36dfd7a4b13c009460267a3e1ce9eb7b0db656d70d71693aa1d6843c54bb6f0afbb3e751936f909dfb185b50f84123272116d4adfd984b3e0b9b77d7b296a732c446e1f77101d0fd8f7c4bd72ee4e292ea13cc8c8dde3cbf768600de0a38821e9efc55b444edada4b9b8fc9661eac6a70afd4576ac297f902ecb2667bbd03441e8940cfd98e89b14ab4b514c68877a087960fd882d12947c6ea92882832cb8c00020c42017d4370789edab1ad21777161b58fc3f9e69002405c7ec036edceeb32e3534f67e9d87603e1f82c70fa3d274dae219a7ab99a71704c8397bbeadc4c87fc65201d55dd60aeec84dc0ddc98faefdfcf3630e830474a1914a36d65cc8bea3c247bf1c352cbe43803e6d53c69f29bd2fef9b60d8d8b42cb09e6906cc832d5976ffc843558f675f92550bc192822d37e9abb377648ef042358e7df91dfbeb266d6a99a9a7ba3889ad5a92c8748264be42942d744db8b07ed1520b4948d6a6874fb9a4033d4d089ea3835e06a696c8e0548b4ae25f58ded7bcfc653f621e802d5637f5cac0e8420bcf59e22c2ec322622f3d84365f76df111225aba86170bd557d68901cdd4c1430c7b262ac0c8f1d97d5353ab5374e2ee6e8ca905a0b08373330ac0d3a458881b5e58d19dddff1aac6b4b9a722c50c0f15648ad8df1139c763aa514cfb95521c974b9bf6aaa8b7b19d4fb52ebef71760f4abcf26893c5d50fbc48af23f7de4a6b1b5641e378e60a038f5771a02379342bf93855ff1eab12af3119b3f37d0eaf5e3dd39f1976f1a3f376dc5442ff6fb581072915fc5a8c331d15fcd8ac9be8b4080abd99ece38d7bad33b162b2220690c097e8fdde931862d31d1ec2668e6b67b38ba023a60888edf7a577fd281ba17846852238330fd56168a7c04869bd2ddc39e9c23ca2d74454225e51f464d7e79b5460cd02f386e1dd4080ce358830f16e1163137257bfe7067e40fd028b6a197582ea21fab4ac0c6d0b894fbdb39743db6ca75b97ce42c55d3131e117eccb3d50046c8af4d69cdaf61ed36237178c694dea8ad2f695ecfbba0832a8b894bad6e877630fd13421c38d2350bafdde02a0ae300804b7c5044711b50406322366fc98ea897e2e282d13720ea4719ba95d4fda90331794453ccc43cf48a389911c8cb4b309802d0ff1a3ddf70464c1614306a5a4be0b4d98ca24911c225d87cd6c840cd163b1826ead0f0344448e3489cfc36594ac1104c3f430c621b9d666976f1b4a42a67b5a2e34fdfa3f9b0be5cec6f997c62f9a9769473dd8e1cc58f341b2ea56e1e6492fe1db432df8778f9726e7bd30c169763e45f615e240816f4773fac28085b9f5620c32880c434273c583bdacada2ce4d02082a9639b57648dec37cd8b2a613e6ccddbdc0ae2d25e1ad3113f12a7ac42842fec54e1645062fb6e76e10a4ec0158f204ceafd691c5fdd8a71995b7afcd7f1b2996f97717c3df46f0a22a55c0c2be9957f1f46e2062a133626bddb29ab4f1fe2a0dcd07ebd87416eac7364ca3af2579ab79db689154ced592abb9e865c90f1feae9ec989aef8e9b200cb5cc85fa37841f8384fc679ef2b0fd5ab36f2583038e764421665bbacf88fb37ae5d0b6b14ba353370296c023b4331441ba97fb27cdaab47c38619265ababa2e00d24f761dd25b7b9f1f6d3b1a21308357687ec45659c94bf9c0cf45d9d5ecb9be5b7d79d53107bef90638c8c1a6306b8186ddfc9bf014bee9684a21d5ac6acb3a4c7c4b4801c3fa8bd8a5cf0122b383776e1211673bc89f620e58f18c4f64905a4a457f20421243541bdf4e351953cc1000a23b722518ce22fa414fffd33e9463bba18508c329107b9c8f21fd4f81363351619387d3c5d553772c817d89647243d3d86238028532c5c96003d63ee78385dc4110b13460ae418f05472f5f680bc084c748cf08bb43b6468195d169fcf590438accc4b08a1c0807f059788bac37bd95a228a079bb3e280f8e70fd515fa4ba08502e3cf278418158a2f3f315fdeaf1c26422bd904ef8555c2724051405b9369bffaf4425bede88a4c1ceb16fd1baee17f84a831cf2ecc3f605c65b20228e243cb4a5481565d0f6eef3529b4830fee8eb39842f8b340d3c1ab2657076c7f233eae47be55a8367bcfdfd8b99d9e2d04fb69f926e40fff3805d8df9758d4a3caad84155df1946bec1f9bf30268829b12bfdacd7943861f3072661b84026e168c971bdd5129190e2213c298dbec05bf821085ca1c70fea33cb047ac29a0f1522172f2f7ba90a5a52f8dc0554c69ade9c27f6e1d50c1dce507226653cd6fb6e2fadb7c22b49ef721dc773aa57d166ba395039798d9b9bd3d92adcdb71a7dc1a2a1485bef5f1c37211f29b6b96d42fa4b490d3c002167a0679ea4162bd000b358be6498122e2a3446144dc6125ab0b0ab55dd8b3536a89edb8f7bcf0f30da645780ef004ad1d6de21ba02e89b2e80ff26678cc62d7a69428f6da570b50a3cf526c2d5335e0284eeb8068a07437afc1b6f5dad142108831bf5be7fe8c87c2c6a2ad54ab2222049185bc4f566f9e07399d6bb4eb26e51c12c470e878512778563cb2318fb7f72a00c091df46927bdc3ffa110afd21f2f549248674523a6a169bde734c3e50e0be027c2ed5701fbb39d52b6f1fbdd30cb8e40cf26006536109d68c080a67bb1074fa067377b7d334b4d4dd955bf2ca0a22f0b458eb8c5806ec7d190bf55922049f2fffda7fff25ffedf7a27ba7088882ed2a4d81c53110a6b582e97275718c0e6c8692a41a8692ea586f339089132f62f548029d5b6ccd59beb2e139d72f713560e9deca8fa1f6342e846e6e4a534898fcc8e8310368d5585d267bc83ba3678fc3f8c8da784afa1203b2b9448de2173a0c9d54afe817eaa25f0c537db006a02400c948e901be9198ec3dfca2a0d2c2d36c3467d1211e8d19ea90217deb07b574803e065a00584b88103570a31b3689ebc850e35741550fa895ace49fa03827311e8851c0fe847783a7cef19196f41e23b7185908b25624675e15919ccdadcdce18d11539fba5acde1ac0e4171bde55f8b1136e4ea95e42d16fca5e4c5e61462b346b2f89f3e38cc444f4724595decce37b827ba222477512ac4b9e8a2fb8c3feb26596dc0528a2af60483f6d40b21e723d1eb958f9d7f883901443354e441d3ccd886756f6ee359d163942479a7d289d76f38789e7db66a19a9eff8d77db735f0ebfde737daa224cc0cbb2757733d018bf0beb020a63b8f39acea45d1ddd02e140a3002b823d13cd4486d7b5488d0dd26d160899e2be0323ec1107ec893b3e9cf085b82b8dc0d89a2fd578ae7298357fb7524cb0439c15e405d3b6560c960176a45046d3120dd475c07948ccabed21444294f61dc42b53a609ab86007af69d5c191bc6fa74d3612860bd3e52068b70f515571eb67c8330622148d02921dcdae402faf7c34171761d9198d3c07ab1a269e62c64b450d4f8495a77baa99279af7441f947f71d7dc537dd8a4a79b7ba249792a9e5db4d10998d5e5a49163d5084606d23bd711f717943ad6363b57c478e38882decfb3fc7347cf0e2fed1184035a5f14c749d0b4150c1f55b5c8c5b4e98a9e0cf6f744c33fd39d9e79f321c0f278d182001d7c95b89922785ceed50e8c5906181bf823090018942bccc11b357a8c9dd0df99b2288ffd58e26903134f2c8982982b64001c302ad97c15dc5054c5b6d4236de00ded62a07618ee006263441caa6dd728cfb41ca342fe96f73352607b6865ebd33c930c3190b68b838a436a935e16668261e9bff47352150b3c821597494770df9bc7c058e7cfef682ea0241fd5d07a7e780bfb0f75055a32565046098b56f5a55888f39a1ca842c13042dc5686e88baa63272db4c09d8966244963b0476fd44162fc673c91ea1f70fa0cd0eb5899ae435b0a16a9a99dce9b5b0c0c0b30a00ab1f17cb6254ceb54001099dacd805279d17dc720b6e337ae737e61d11762bd80b407d91f7ee3411df589de0bfd9d759db4bafac825dab407eef6f37d365434784355bcd01c3ad9ed6f5450410493e0169e09229848cd6f7105de8da10bb105be9a09245064c60c06de5826348c4ff8a60787eec6127c5195f6b2e813c90bdcd76c5cead596bb8fe29bceed7188aab3273f5c54692b14b81b658af0e95eadf471313a4daa19021ec550a673a82156cf3b5f3bfb8c300a57ad04f2ea8240d31f9fe307ecb3641a6087815028120eae1483d328717f17546164b6752906b84e04b14982171005c0213538970e8678d25c6adf38926abb36dbb49c5fe52aed9fbfd32ce0e62668b5fd95fc9cb9b2327c5b578fc59f3f2371c022867bd7322da92a1d9f57a3ec08eea3da441cff12146f574df91431a607d853f411dce34eddf4ad016c0a3765dc1952515d5d1464ec79c2867e250402515e7c9deb451b166ab99d869f973bb4c8143cba1f4ec0423e5aa070a18990351cf28e6d57016ac3a716de6bceaf82ef6d0fc54f0716ae46050acabc3f8a23a14b66b2e9ad718e95c0651bfe3fd44ef491fe3ab063b56fb27caddca3ee0ee5688638c2f4e70104b1013e92bfd9fd6627df75e1d8e532ba21abcf0c822040c35708de713e375cb2c54ffded69bb8b8fddff6a5e5fddff48de1a0658f6f3be54e1cdd7a70de836cd032c1e4f3a3ba99e971e81bcc05abc3429a26c6ca7422e501fd6561bed67ab055bade55bf4f2f794186e28ff0fc52225af92440f9e8eea589de86501459e56cfb0dbc009c01058b549594701b12dc181efc46dc5fac0990faf0c53fb90e26da2caedef0f1dfc9ecf91085c2e9921184d5e08e8566a9caea61f823fd2997bfb74db18137ad07fd999a4678b7cfa675c629176cf9f79025783181110b68c023ade3837a41326888d48301d82183eb132c0cb08e820807e95b199034e340b8d204698632a3c143e1e2bfebd499d19144c5f7dc71c1bdf839f3b4f42b849858ffc7c1649fae785a592674816cc008a5ad505149b72b6f97bcf7382a4a66e801a437d58e558584281a4d5eb847e3d9d43d6410a780113553072625f0939c38c40f6c2a16f3489c048c9e0ca13a9deae52c88ce7617053401fc45d1b4de18ceb329628e5f4fbb08c12496b6aeb768139bc3229c44bbdecc974df5d6398b1a0fe617bfd87d777c18d22f89d6cf7e94ec49fc5d1a7d0961710ae8133c405ca2e034bb790b0152ae64d911936ea586c9a62a22c48b65be059c49abfeeeff627270dd14e981b5e252589d0eb5bfcea60fb06401a786a0b49569ad78806ef2da744038fefb4705f604d49502044a44cf927bad16adc41a27d5d85cbaa7cdf02f4e0bfbbda282ff0afbb28d1747d9ac5640bce82c22c43111b7865ede3126bd769c5ecc8efad590df504ae378dd9a07ae2ce473e26b1c937be5605be476b52b33698986b83428e57de7024fc3b7a6da5d83ba8506ce2bcd54ee1e49a4a195df532f2d68223928037c166abba5e9ce641d0cb7f258849dcf1789804bda0b3c3ea845e76ba54f9e96373b336a5182532a089d4571ac7fdeb81570e434afc1fb5383f94dd9f713f1df8df6787226d8c31a83b661c3b15b97c3dcb296b7c50d40b77dc3a6655a3ebcf1f551e35b3e68d5cdc93901706a36aedcdd41a7425a404488ce381ed389e139eb30b6b3d9617e8e58c85e33c723aca95b1f652749b4c80900428564b034c97c2f81a1354a65ddd14ff464b108d68dda371353afe74eeacd08d0bf9836910dc20b5bbe881ce8419c833b409cf4a8b0b2888e77e25434999f7b197df73069bbe21abb89f688f578af31728828139a17deb4c9610205c5f2df2bbeee3bec81e384ad735bb23072508768730b9dbd21f45a892b677ebeb43a0b1754a8ce8d75e2d820c39cc547918cd83af1a3abef74c91d2f2852e5526fb136b4ec058d8c4ee7c6502b9f9abc342fe91ed12d1f41739b69f3c2ff6e37860e86ac62dcfc02d1ebb050527c9922647322903d4e3cdd91c9b418ab262a58587ff5ddbc01636e7a3642ca8b58ae4853ae72e2a317f2b147a0c6c0d073df6f85e65b515f209dc3b1360a5422adb4b294552e85fd278df8d30944a551e2c1b4d82d632428f4f12925d4ff21e909e643447310966e03b50414921413243d464a57339a4d8dbd23cf7e43824e889005841ea4295f8237326aa1f346da99067dabfd629d1d1c596bdfcfdf765ef1d8ca644f7bc035405d8148612befb2a377c77a355b25554a6cb5c157cd44c664a692e428e87094b38377e27fb0855a7eebd1b0db25405ffb03ba26e0a5f9a6cb4fcfe234993273cfead42cb945005eb105ba3a39d7dbb113749c6b41f39c410ee03fcdbf71da1181f32f8807d56cfe502f76d90e61917a522e13514e2551fe5f3cc9cb2a6357ab9cf892d597ef27a2cf4342445e9a3c61ddf53f09c29a4b2fcf204de7311edabffacee36c991bf42148c1a54fa5336dab518f7164dce818ef80d308185db65646b5e082f02ba2db1b6c7b0c1be6a43e0482768c1e3ccc82cbc272ac24ae13b99bae50e8e393d0d91f738ceabe85026ce840558eb674f6db4bbcca123fc9bcc69c297b2a9348587d111d1a6ef1cfe894ce519a76d84958b784c0e0fe632368aea8f689282e00191874e9f3ca3d8eddf55c4cefb9a374e3699773957c5114cfc0aa4bc9097043f8053553ae30298a0a97e751fd8273bca2e2aa87fd97e47973932ce06577191be898be80815e5a401f35fbf6aa53e2dd1d9074ac57c9c2876a570bad728e842462d9f80992b050f2963aef36d4fffd538a346399c8aed4b94a8e561d448f18cd3589c4868191feedc7394ff3b60ec49653f2544543413f56de26b632ce70a0a1315c8e17a34862dffc8e026fd160a1832f96acf206bd3a6385c2fb811ce3ff8833de7a2a9f285d24fc049f60f6cdbe9a513020350918a8b538c1e8e1d7da4dd13bf348229e6a8108dda2211c458cbea16635831a2bbaa604821ed86e808e4806c6dd381a8cc9cab4c6784b5ed34f72d36f0da9974c547811750500e5eacf4f2996eec896e08a44a8459c0c000e7ef7ae7e4dac5adb41c92dbb6b21a0f2577e5329dc1d1446c177787797c6496cc4e7e8d7a901e82eff0fe810773caddc63c688e650b43bb656c7ddc207e91cf1d30904eb1e73e57198b035b43b401006b5ff1837a0c8c44483cce671bd245484eeb9084cbf5460add0811b8ec5f9aae06752cad7480a6fb49b069c1e835d7b12c1f3ff400d1b99fa0457b7f4fc1ceffb16e43ee08b5f2ae94dfcf36a4d3d48569752f11e4424e5060ff6fa6cbeef595fd792bfa06f2236c094863bf1ca7a196703531b5dc6ef3081dbd070fa683ee38bd1e3e679642734d075ab59b9186153dcc4b7bd48852981b44914d5664acd37ccfd8b884d40bb5ae09df699956a60aa8216983415814f992c47f54b2db783d20332a0d5a7ef3a124497786c73e24b5276e713be978f84f117aa91bdef31ab173bf3bb835f23ec510cd0f555b9ef24168bc966a7ad81f1177cba7df75f1c4b3bbe082daea2c8ece67899c911b36538265213f565bc8935b54e80c6abfb27c68d5077faef39ba947d069f018596d08d43a3d4c4931025161735b49087485327b44aabd441c7858afda368ee258a3dfe0cce68388f8c29e53c7765f2e95af5a18388f186f7d17321e47f56b92558e67e9493ec897a505e406d59864772d576abb43238e0667941c3de80752aa66c537015e185eeae7be6da7f9768fa09a2f50d0d1efed0b786bc2f8d57087156b5ec62a1f133490582f9bff6b1a15333fc91902e4402b38dbdcb44150e20b2648f5c5a521bbccefa56df5d675c5efe749e4d987409d69438b67c68fd82b6d4b0700852d9164c3a2de50143f870cb277b8e936c41626cd10c99a479ba692b6ddc041870778240909edfffee006e476514533b1a77b6830dc3899def710870768549fa576c2446b2d405131bf79b1ef489d8241416947b31c09b9056af87ba946a3b5702381c97e9bf3f5991d03b816bc55c000a2c8680c2c2b552a72fb1343b3281c86c1eac143119059ea44e850a499162ba052c64dd5a00194fe68b5ad1f230345a55c89bc94a5328ef23aacd0089fab09fbf67164fa095d760ee1a4d4cca785cb1ffd8c07faf0ae0e4a6c75f72015a28bd4041d02495f762b61c3cc21c857ddef37d80b596fcc44a13755de623ecc0006b9048e72112c85435e0a8268fcd30763477af84c8aa559ea1da6799f4e802a069c9d4cefe71105ddae674d7a9d252b2be81dddf4233c448f9dbf6d9a4fb634b9e99f80fabbc925836d4f5c1dbb35f848eec4bf5917b1a3d688279244dade55cd600c25d26ab12b52932a245e22afd8498d3a06ff0f2b01f58f555005d503a0a4d94983c1734874c053cd92e4d328887c49e2ca084cb425cb8e1d3e28b26b540eb8422b12fb5fe31042a9e4c882d0f38aa43f05e0c03653488e41184f5e8ebd50e891397588eebde6a57613b47fd4bda2ce7d71b5eeadb2bf28ccd12d27405ad59d719f32d3798213763b04c520852c81d10d74495465cc8ce0cc47ee22e56937c6162fe74e88137f78d0ee5d2d8c94b42bda382c041b022e9798cddbebac6bfe6779086bdbb5a61894f59322e3c7f1b654995bf18f2790dd4ad7532a7ed054f8c7951e8f207ad83ad8f4a759f98c91f5593b265685c83e1c4ba7cacb7cba5b7074a9f2091bd8befae93f01798bca058f486ec1590ff2be484217e5f5aea02cb52b4afa0076dedb88d42c8b7a9f6b54a6061f10f21a3425d1d2aba9938a3e89c4f8faf36d6c87d3ac15b22f3c45a81f46990980aa1c95850213a2cbff258dc9178c3e8158b015c068c0085737dfcb9474367cb3c60c263d391a7c70a7f1922467693e4d97815ac0234572ef9aa45bb0862da1e52f590179d533954e9b18be3205faa26ad7719357bba08beeee98918aca0fbf6b2473867d40d7f5905c7994304b294107de0b430dad009b5b6f3ef96b5d9351ff3d734a27627db5dc70d335e80ce359ef010f4983f70858d07b98d8bc2098a2429a6b1889a6aca382fa992565e2d4e1261d7be4cdbbf2b02e48ce9ba8252d2abe59a569b5260b229bcfeb365c783c347c7ec03d78c5196a62650c4d0f04ff45a98374d12cb88c6fcf676f4c89f7a221bba68662542bcbe887d2aabd31544b58f8263b29275ad592dce4b81b3296ca8f664ecd33fbd6e229062f3a4841915ac5025cd06578be4a98f143c96ed68297e80049c824a6c804c7ccebf1c82fbee9374e1aae4e3f0419cf639f0b33dd6b3001fab801e224a911a16782427db47d2fe40588167e84d56ec5b42a61c53bd94aa8bec1ab8d95c9d6cee3a161061136a8a09bedc237e6c60fc9e0fd6cf0e326e30b67766975058235147947e8d52ad36d7b49ee3082607b454aa3352163a98c04278a49ce099fc2e1252758bccff6bb211953c868b85342a62200a1188740ba5cd55a83978a4cfb22300f1f935102da5c50d86ad840e96361fbc818c86b023751306ee3e18a1014a0665f7b1361aa29b6102fc0cc69008e000de76e4455e19c176d30b2d951646c5c6a3bdaa963e227d9c748b2421bf292eea5dffc05192aeeb188fe6214b0aa3b5f638ac9e377a030635d3c85d6c479b9dd487292f1a95ba0e4ac5409bb62c999ab5ae10d0808a3f005d50dee426c87d681111910b9707edbebf362ad92618a2e5ace9398b9842010bd1b71d9b34b4525666800c5e39a8d38e998bd5596acac3034d92462971158e1661e069ba0af0ab18eab22441a8f470a64d5baf09f4d026de577321bea241a880af4f09f8174cb06d0d04cf726ae29323226dd2ba4dadad9dce6200afb55aa686e701af8457ff05976510e41ab5c72936bd77b602373ba830a84f1351425345f4de9933622f14f5a63e109a1c38bdefdb53a0a35ed7e1523dcbe6b6e5ed132cf6b953a9a23bc1efb4fc0e362843c28912c78b0694d8b7c0e76f002a88b400490badfc9b604381e34e45b70d89a9be6b2ea0bb6b1f00fa88bc16804aa1dba14fc6a673ca99da4d9a07a884887f48f6ec2175fcf9b5924a556d14a22e20c4a3ec8687f862dba05ea0c8b66bc03cee48bf8fab7ece4711481463548c42983cebb30ba481dcc8f59ea1a36887a4d4f2c30112a5bd1c137108c33e5b661677184a47bc922be1d56d30a3e3c8320e90e6288ca098f7c32d9659896831129f4d850fda691adc43977fcab5243fbc75d7577da0127eec7d95f55ddbe576237ecf056c5885b398277a0a2f26d84e838afc2b81ced9a8beb63953c0ded439aca39ac86f5d765ea4c063bad06f33eeca3555114d6a4f9aa636372d51d220ff514883fd4aed2619605699e2591e0a3c9720e9310c7474de53d57ea4002f23dd29a4c8743914d899693b4b52cfc44223832b198d60ba713834bbd703231b9ac5e66356bf3521340a6b61676b124a5327e74842495c6d8c4682cb158b27b61d30b9bbdb8d98b65bc7a1108ad21c9c27e65a601ab72431324cb9bd6bd9e035757812e80325483c76539bcbd030453c5accbcfe09f1dea83d3f2304bedffe71d32c9538deaeff07918e3463156310008e4b95621eb833821a2646ee081c4bf356334895cef40a883791a0beb2da62cd6b267966c81e1bd458adcb5186bed1bd337a75c0688a8e7cfc580909af95dde0ce6c1e443aae5b0f79d1b0091403a81a36aac181b5fc1491d4d8c082f6b266df0b04c6f6bbaf24d9d94aa119722bee648306c50775e9db8f0e8f496b6d215981920a5d14a3166baa3b824be6d9d9bd82a8dc138d1e8c6ad29d611b7ca9f3c209bfa90477c885a687ed2f4e077b700f80f6d58088110682d40599a98dd40eb67d49f304814103a1ede1395bc0e826635403cede6fb2643801b8decf50d1d1966eaa8230b2a5591fecb6efae2af552e9ea028d2458894bf3c9c065b0982a240a03cd11078e298419ab5f895d3e60c6eeff51a42a2e43a1d8c76582f8e7f68eb8482f4bb5cf233a294cc65b97c98f8bbcdd650df5489c8adfb7a2223bb855f44ce3c8bbc3ba734352e61817aeb7003e0a9ce061526c5fe5ddcbd2a019a0c1cca3b283c260682417f61500382a988234df128b226b1d182f0076d7636a705dbe4c8754b70d841930ee209259fccb1590de606bd1b5abd1c9a54a2cf4f99cb1ef57736c0ad75fc8138fcf0c1df60f4c1804274e9214ba185cf9e75f4af5749981133a7eabf17813bac132bbf8a6a2e8de3ea8178483d05ed2a5c0c2a44257432175d143107bb058a32cd6cee38b91e3ada26f425825afcf0ac89273e7d3cdf58ebb486453bbef13cbafa400f70e95b13cc3e5fedb4a8e2f23aa497c553c4760cd6346daa2034a2f0efbead63c0a29a1a616379f98cddcf2f22dd171d765a9ab2150646c4873f6870f48b207e1b8d9a4972bce906878cf68045f4b967b1ef313ba41df17824083bf180b08287115d91360fc7ca13d118adfa00ab109bef7bb36231d8aa374e108b497a67cac432556f9c4a0c2ef5cac9c4e6522f9c4c4c2eab97594d5d2968aac832078caab5b5723621df8f42c7134022fb4b48f1b537f55b8804e3d78e00c996e722dc24a675b82dd5e86ffb5bb909f3a55dda2bf7b4f07d1164604c876cf992f07abff37a6c64efe5a1b672e98225635b2b621409cebd9a071d049fdd5355408050f07fea71a6615409809c3dd1631aab7d7d601f51e09de7368d4034ed171ed025b155b6b93f6bfc6c1134c22652126dfcc1a4e023b27a99c94bb97b21db8bdbbdb8d9cbcd5edeea856d2f6df5f2662f377a79ab1736e5257d3548cb525e444e954ea27f287116bcae72fa31037c899655411df727ed7ef0d0065457566fb2ec85633d036d0182fe5079cdfee26430ecbbcf96854a373fac7c077b82c7046a03cc4206f9873da270e34875c6b921a3ade04396a6df4f37fa298bfd75bfcd7a35e7eb38919200938f8466cba3c6d9e505939f63908ab67db23f547207fb69213ed911e246c849a16a6b32175e07e8a9143a8f39418394ac46b80f2183452d34c2caa0329c38ed9b124aeeb90dc9dfd9085bf49b1ceb5728d280eaccd6a46b6fcf17447caf8636f39ec3d519fb48c94417fa1e264050f484a56c88872ad8e7d484032d659c1bf9eb15bf652665c9d987483a0d94064dab14f54619f2a92502f3d7a036b5b9777f44198c82058aa6fdb193ba58d1e59ed7c0ac6f515661ac4168503c10b8182de180a5e9ebdc98f3daac48268d5a54e5ddf6870070b8b985f858b1b4f79b6975091136f230ebb1c590868886b1da2f1e23f751444cdde08be7b27fd251e35512abaa4a3b2da555204cb78690c69fbe138e53d10d748800c195a6b3d128a1f51fa0380f278fc3c62b43589e8b466ae568b3745bbf33fc78aba5081d7284af8a7b4fa175f785d9a93d608a4be40d3e7621e70993f3d3706ee24f38d5870108441e26a337e1ffc95caa26363846128fec8ecf94ae949aac21a19ac411ea64befd6440b6e1bf904c9b1eec50e51f7152801a048e616a98cdd065df6588a447146444edfb6fb8c0983bec19e10c41a6893b68db7146f8f8c387f963e37b6fce96117201855d5f67802a8f0b77d549757747aacb52451ad327b7e7fe7d479f365337970472bbf74c7267b8ea0e89f07e58cdf3707069d97699a6bd6b4fd6df4e01dff6989ee3d503f722f1b15526f790bd834302dffd0e26a03437c836af55c3828d834628f194927813c49f98d463f98549d315f5be79c2ec26ad79a0b497060e2c116f6824d4401f1e9fd69760dc9870a3d58c96d88de20207928145e08203af9174f6c910800bb4a272f8ce553046165a3cc600b895c66b815d4ab402c3e975062e8c23d07ede3b7185ef4776a41d7eacc6a8abeb967dda1e7bbb7f2e38e950ecaeae73f30824a5ced6e1c1f6b974a7cca2af161d3f9adc7f4e21c8519581a4f92565df7b1914d465137c9855a327214ae447a8bd97483de21455a93f439123a1894313b3c193e7e2e8bd16e5bbc161c67af37c540df882c2c9e149845c5bcfe1a997146c1eb70afa5f89bb58fa6a5b3ecf7551bfd4f96123b76e4127eb0e74473151f0cf85e1df21fe91b03b518b382b7e16a157e1017430c1ce0e2382d44a4d09a47d7e64cf73d2c75c7198e4bd5390a4c321cee499c4f2e2d6b077b317512a988b3a352aaa3294ffc378e0b2c883e981231da9732bc0396072622aba9a644d656f36b67e626e223bd4a63ad889e0db89eb40a1d4965c27844467fdd364c099c2c1ccadaeb9d9a45d6a2dde87c07a580b4d412140eec32e8384b226b92107b0e677e29f4f82e4c5a863e15ce65bbc89f7efe4286e7fcf69c6e1cc91d8326cddf31d6c40e7cdc5360124e95893f31196c9a4618e0666d36de68d42a2abed21babbc0dd4b420c52f4e78e9ac5d07de64bc669180780c5d8f458fefc1c601e4739b31f0c334eb2140fd513c773d3b4c51ddc0158452eb67b51ff08f4adc004008668fd5f67a9ff0b58eec9bf341daf25f224096e89be0c43a7c3e2a3f5c720d4f198d3090ce510b64c8fa47a7714a5624091c5da309f071d586d1b723e5c30dba6a92ccb020ddaa44e14b52869782a40018f629f5f82596156f8753a190b107434a90422751442d40ff16b200d3955e1f08472cb17e5ecfaf2b6fb744a24818c6527ee7c0868d4e6a5f30948ed68cc70630674227108e8e95d9bc242261171485a5e3e3093fd1a06687292ca312a31c4078ade6fa05588a0deee1c00e14de1de520d472213c8002fc6023e2818776947f9e1a29399f6704e21a1403e4fe4be93f6baf1f2d7acfa17b0e6e2a5a1f9397090c44c42791adb5ca02fe42e0b3753e104a3aef2e31d4a6e3eea1972690087752041423fa35bf7dd5a4e9acb359b650b9f7a196acb6e68b9b9075ba344fa37bf63c9218dd809e90f17050203610a3e3cf1122122961f8c65d25d65754c56e1ddef1e060da4211ea25dd887df2b54b624e732a52f563f69c539019c5acd59a672a20c4f0463b2536db173a68a1675145f9acba3e104daa6de7c40812e6fb384d9dd6e4e09f0214f3cd33f6a69168bdaf6b3ecff109070dcda5467a070f5e4f719d89b7692cdf6e4a3576eac1a50be4ebca088a42693d04da4a423d46d73e96c0825e6df75ae1253283a2faf02566f09809bd7cf5ccb81331fd457d9435ac210a441191711bb4e403d73e334378c1c65b70ca3a756f7134eb8a0a70dc8d6652e177a68d92a2d13531cb718ace10c9554c344feeaaafeb628f4d1f0acf9a093ad9f9229f791131f3500881fceb5a5c6d30f3bb47f883a09d4cc3e21acc1867df547e7fcf37e629869540981b864e2360f9ca98c819c17b1702e7da2faedf52d439ff01fb39f54660894042940c07522b76cff5cf87e213a947ae9aa2dddc18c40a8397e26efeb5e4b60227e2f790b698b4c1e0fbcf0a711fb10fb2435af61ad71d04a3aa9301bbb9fa8f462ff754cc7b5d11e67f51041ef0fa3826eb4f3896d58151a61d5595cf89846acf4cd42bdb388c3d0b1dafd47196469b1e4f6330d0fe3e9647ff952d38506647362f50e75c77eb274f0933880b485bf79dd7a7e5faabcc9c370af64b9d72814c1a80a7f2dd23d54fe99c137882eb40a8809a4eef3c52cc52013d4a48f47e1d8167ed19dc7cedde2a4091f675b54359835b43fe51bb782e1720526246025999fb147f0a7d97d68f998e6a10965af9fe06b390a6c06221eda6af44631fec61a0dd64b63173b4e52daa5883b418fb8e4195adee34d7f817ea0132ad21e438d71b5c1ec57fa100f85348df30701c2f9b9917734889030c2be67a81133f1950e3f124cf84f97e63134d48597120480dc7b99ec3df18d3051ef5d636901d3405f76636559d6f4255dc09bb525e6e79fa1260ed28a5ea831f64fbc36f751b6c34ee56f18291188dcfca9c6392eeb06c9447044135a931e678b4ded4996893715c9b2b41ca3b9353ffe62585fe596dfab32a7160e52685d905b4482a48468225c74269534c34e05632ec52baee849b3bb69530e7158fa77e794ee4422425e84c3952b50b612ecbf4cde5da4f25a0d58495cef9846d543b1945355e6c75fdb08cae51a7593e5e18459afc34c76e303b4322800dc031e5aa795cbdbd2b39db3c49cedb432919b190d3eaf41b94c083a185e5f4c81c869b01f2bb0b5e23ba2b054a3355dde9179bc8174e8a21662911d2af53161e3d989479486070447bc77094c0ff24fdafd01d8b7945929a997d271a2b3ba9efd53b73bc0351f071c66224d2ba0d694c91d3910b2866a321690a08e7af574d76e56d5fcef780b9fd3296de2f1b1241b28d02502cacd70f89ada27925e81ca45889d475261b0e62c7ac727eeb0f51c830ee0630a82dcdb15a7c6584ebedb2e692bc507bb4be98d98de81c9ae6c6fecf99752842e4fd911d993a7762b60f592ec905900046649bdab52cb745b8d69d45b191ccd3ee70d808944b8d1457348f535a50f66353f868adf1ae99db9d3fff31a8c501f73f2731430ed6a0996f4ea52d534e6195105b8f39ba21de2f9ceffe9e3864bd36014c31a3ed759bada7f5fac5971bab9062318ec979f1d7f3016ea96a53bf5a074a730204a357caf999e2dc812c69cd409fc64778acdd58043be5d47e30f217c49d291c140dc1f155e82fb0fa8f77eee64207645a67456b96aa0294567ddac0794e88d92c40366d268594c5133d94060368f11dc6366f746bb61186b2582f500ffa7ff13ba2475d6d1688a99ac87a742e9dfaa6ac48e2b56b2fdfc678ee91b2552b01360727b112d4071f44edbfb5b24d3c9adba8844cf1d64fb2a7e9d10508cf3c14b3684dfb1aebbe64b47d80811242faabf63a3f4e887950938d5843f5aa2d51056eedd3d9117741a19def14c953fff4d8f01fa7dd5db0a2881302109dfe9e44f899581c31b364468d111852de04fb9d1e5d2e7d4bca77627e6dc97537c5569d579f57da19bdeb417765322a43be06163fc9d12aac0ef5c23b544d8881f27bc45b0c0c35b876bc2ee1a19b265fe8622e4d6a1ef2b96fbab4c63dace3409ce969885ac48fd8c785214a4efb9b64664e8f20ecd9498fa0a4f0a82450ab2dc4bb942fc9afd3ffa179341a2a2cc994e18a16465fabb88364bd8ef28e10e13e2c3d157075436427819de31f24c373b0e705ed6a2d38ab3a8aad10d53e5265161f194111ccece25212b883148bb7fb2c8cc46544ccd3de1d9a569cf84349e8c7fbb7cf24138e181c25e7bc85b8f054d4bb7b7aab58840a0d284d14b8d0d20a092900417e46f02c0b8de6dc3103a2c3cc3b048198ca6077d91b3666883833008dcd1827bc98989ca214ca91467c55ac4dd9e606c576e6b8a8836df49c6b0b9290de50807b3bc00eb8920c6766259847b551cc80f7a05b6a232c2f50fccdcc7008968834e88747717a2b4e1e1a35c2f0094d9887e00330533726e68b82cf4c12fdc8b246d3cd2b9426999b84469ed73f255898a9926a5c5a97d22a84d23af449cc8645bf4ea0f8e42dd40d33a85b97af2d13197530f8c7b19533f9cc1629bc0904312db71c43556727fdd7b1a2d2df2315508c165f0827310c530e231db9976d0063900d4ab038381708c263869b653c825fa731cb794856ff1bed312ed6751a5b01a85b9af82a63bf1b3d027002addf19e67113e62e9711476422662276a6f869abb635d41780a27034febbc7aa943eaa18eacbf3aa4deeab8ea03d571abbf40d509e056ea2842305134be244d64dbdad8360258a092d0f60853613bde8ac35f40c2cf14e9e324b1eccf07b76130bbb35996b25c5f60050cdde6a51209eb4b9e9a4916e52841c6f895119cb91004541281c831ffdd88dba27223a3771b733c3f36dec4e2321313205da388391fdf1c613e4c105a94b2b5ca56c12e4ed0161a525487c0d16cae2aa7251c1232512dc1d4f9dd129e617093a2c897cf8c70647e9abe6bc927a8672e464c33b3340d34d7c04ddf41c4efe6ffe0e6fad0ccf3d4b3096bf3b22ac25dcef0a9de3bc120b23d971a144521e13f98dc65f07dcd8407e9d988dcc03769fb2691e5273eb2c20f4b457b096214f785b97151c04e94a5d2502ac089032f889e5b5c7c5701037934e579a13ddf0802418934ceaf5f3e5406c73781a7465accab42255ec399b886a567c270c5ba9ba664979023be0fe8cd846cf78f83226b738387fda714e4408398d30a9358458683be9e1877a7227ef3a2820011622554c9920840df590517cfcb361ae2dcb9684ec8c9adef07b458aa88d8c1472257c190886b2ceb43fe86b567da4f97ca3aeb4239ff4b37f209e7c55b2792ea0d88f975b2ce550d4eb49d377e55b3ed39bc6d0a880b5188aca222d41d608ae5d65ec2c53ded4d6401a5385cabfe0e035e1fcf3665e21cb4effc6ebc4e21eb05fc3d72b3e570d5fffb40ceac029f03d8bccffbab0bfdd2c5294bd6280721bacdab59729427f4a7c67ea681d286a07ff24ddf2833e9836dcd1c6f39d7305f136e532d4507232f1bbd296128577198c22c082ae08b2884028af9504bad3522a2601a865ae06482d3970dd844636e5af151a4d88330f53c3282712d6caba3d3d0614ab599a8098b96d8447048058605005d2026f2dfc56134b26dcb64d7696b86746102edc4a8b1ab13ca7f33f92b7ad46379092f5d877401b343a4eb505738d429575da25ce4f1fdfefdd05297654229bb540742f50b9a27727c08654a2215a3629a135dc6738b8a01c6168ece30451bf07947e562e9411c21a3579fcdbceb7dfaee8d959a65a58c1fe2d13651649a7ce1c108fc0482a652dadc165010849d91aadfe5419ef77c23e74114cd544f327f5e6a9a396885b0e316ec97401bb711b6680b21abb1365e079bf1386c4a348115fea05591684bc4c9e3a20742e7a387d76619e0f5d7a9f093e71121bb42d0962896ab0cd6f69bef72d5f332ffcc2e2e6653baab753897f2781411d5bbbe97624e401433f5107b508fc00a5e2a2bc92fa0da83f66d99554f5fea367262a1b4460cb4274cc50f81a9a4cc3eca9ae64ad889cdda4facf4d2a50491b44219d922104808c9db9a55ab8a0da8bf872169ed2372d01243ccc247a5a89d02c7d5087b9b58a6eb1443c7a6cf7e688e90c9d7c1c71886291ef0c90b6a7235f5833f301524ab23a009b37daf49f02789fe4fd3884d33841f63f352620c5a6a43041de0271bf4f9de64268ba1b83df857c0e58965fd94769f536d7cea634c5f24d5efa2f0ca9069b747c918123804d84ecc6d033e855c1af4fd049b13990443ae98c473aef1d8bec7d4a1facb4b0753ed64722be41e1d4c9c32054d534e8e4ea6e8a5c173b4061aef60781ff3280a107ef1bad6ae48f37e276a9fd2a9c6ed314b9701c8ef51076f472fa5238591eb3816a9c7e53b22cd61b573320446d19849dadc06859b2cf05994ebfb04507ce60afdcbe5e62327895cf10cf775e269f15f60905dc1d96f0e9a27b264be3e374f7fcbfb0416f38b7d439f8f68ac5cfef880e137477bf8e92756fc09230feeff11585cb6b99b738177d16036055b3e0c43f3fa05bcf16b7964d4d6d1d5cd578f2b66e5d0f4db371768476eaffcccc0dd162ff7ad2ee949c4d14e6e2f7e690d968a59bc874732d5dcd66291fc596d9eeaf46aa7081c2b83cf468254696f2f86b9911e5876b5f2ca378b8312a8ffc900d88be1953bc4d22969e79438e24e1ed049710c875c4aef2bf8e867beb655987c42147eaecd180e6a62caeaa18484f7d5d16861b150176ac7054f74baf6d6ee1eb3fbd90eaa4cfd5b02b5de85c3dc1331db21dbfaa9b6bc6f4cbae871b5493da7d0af8a88d458d8177bf8ce3204e4acb2a174b5d16425f4b85b19292bfd822d98bb4ed7136a3fcf3fb7e07c36fb1128f50d960443aa00e2107ba4b98686ad9c2e7cc3594e1689f485e6d7419bfca3f7c635d72cc8843f52c43ef642086af0833e3519bdb5a0ae453a710ad07521a9090344eb2e48bf5128eb8d9b62bc961cdcffd53f1610dcbe63ef33c95da22904070236c14002d68a08995090ae9cd04a0cebace405aa8e8823e5c3f70beb332fcc501a5804a991ebe40ae1bdd942b57fb38a5df5f56701441e9789b9d956de68735680fe93db0c633bca670a7c9276f818ef0dd17f80af1ef4bd3b88464b941003c3633821f41c1f8299799718bee0e307b80f6b83e708d30930a4487f1b2ec1981bb501b11405f22e629d650fb9b8860ba8a24dfa528e4f797665371b4a95a91e6a9fc0707def20d6c2de81b33fb04197eb529e6a908a2eb5281bf96110dec6b4d111da5236d708370a872c808972b50781d06f8bf3992a642cd500eb68f121ac59b753c8c160db352bc1891f40e68b929278476c814bd01b9621218338a72de9cce59a70d54e50bc1cb6c9cd551abb28f36ee21d6ac2180271c49e734388afa6ea2b9087882e7a4d8a17982978c7f873a52af3f43359388df38f7dfdf76187dab72625ed5569750e914e86f597bf6ce88197fe6bce4c17365e36404d83990011104273b1e47c2a40ca87bdfaf99c181a633caacd575f702caf0a80222136345004b0f2af54b19e40dbb962b4aff1b22997801b7165e3aadd3ceabc313a74022231c231f710a8892d907d9fc2dc8be72cc382d2af8c27a613946cbd8419794f67b83bf36e99cad255930894223304c73979167048962b3c02c4ec49f2dab05d883b1870557feeb3b555d6e40466670acbd27cd58bf7479ab3e9ac52721ea8b8d57fb402f12412ef1d836602a089f3e538ed0334354249171be09404e9e4ab0879bd10612c89960d3ad0ad07327cffb85d888ca4cd21aa6c21349bc25ab0405ec1bfb5524d05c8b0317c9366a40145ceb21790b15ed02f338fe06f2c547bfeec1c618fb5b97afed1bef1d31ff76afb092bb0c6d443477234bcb59477e8180d6b3c92ad1f4bbc52bbb35b39297f355ae69ad3d2b6198fc0906ff80f3dfeeb8951b1c6222d8eaeb8b69669e78dbe18a416a69d7ed81dd3d02b5db17ab64c150b3384e5c088fb8671631787d5a8b11c66f102186c6236eddcacb4b430d12769b435d1f36a7f42d2bc27b258d56a22241316d48b3524ffb8e2d5d8ad4c6e365afa544bd866568feed73e3d9f6cb5cf60907f6ea5792d889d64d07a3770659b1a6ce84f95f49b4e68d64634efe8a5db1cad9251adcf8df3db29b49e3e4a82ffccc15dda793177cfb856561e0664491cd87974a1375183ece631c79888b4909c31ee642c2209ce0803f7f0d49bdc25ceb4f08408505040a68058406cfba8345fc8877f4152c492ddeddb82506fb48c466438adc9857da3247bd3f434e6efb87801552f01b6b1c4229e8416feb8fb439ed7207a3a8e94a6e543611336064f438305ba73553e3885824ab2723ab1fed9949057a74ebcc06851ef1b984e7b9a6547c985f3cbaffa24ab9245bc8cb2c9a472a032163c6a8b8b54bd7862a1f49e6e9735cb39007ff490d548d0206fe9c767b607c3371237837473401253a5566a1f809c12c4bd6b6e6fd22bc4a60e71eee8f18361678ffc45dcd48fd28cc5457349416ad1dfd14fdfef21b10a2333c5ea45f68751d8f875c391178a0a94905c47d22046c9e292a58f88fd242f99d8f9a0161a640f99280faa820eed1bb93242d56fb6a6941b1aa21a5f792a1d3cda62464150c31653ad31fc185dd30550175a9d35c18538d6943f881413d24cf99d48ac057123cdf9356194885fa6098fac414fc1e652ed3e81bfaa98f0ba2e43aed916e10f35a2215d4b8fa484a0c7c7e63739e01fa18a752c31a6545b8c9b2fc708d4cd994d52bd8715c73cadcceb7d5c811aef5522222611747f762cd16960f4d58d66e43752669cab0076ef164aee60e639e1667041ae69f6a1b8c5fadd777a7e4c2e2b59aa0b2d744944c2b40a26da61de5b82525169479ede6409eb4930c7586d43143a5869787d3f877306d8005b44c9cfa0513128b0d0fa52fb5d944d176866d630d30433a245e79653b8bfcc934d472231f0cc548ae88d9894280d891dc65bec2bd4d13a230a12a31ff040a22721e97792366874fc0376eb08c210e320111de44c9d40aa677f5ed085ad9bfa8c61047136d00d18b8679d105d6f7f6e8a39434c4d74b73e9a5c08bbc8dcf62bbb3c4d7fd1a70257501afd83078c8f9a7986da133c80390ecfd767908ee2f2ca4b9e5e436114060a8b6dbacb5ea5a2ecb1e090b9910912a566f8ed165e4c77437889803d53831a137581d88de2463e7ee461ab77a69459bcd619d9d0183a46a81dc3c02e405dacdfc4fd52b35853530998e21071c256142d037f0e6bf35576719b8881909578f8ad55b7bd5cf0180e39a5e11674e77690b703cf7d766b182186b040a7209c2fff22e41ea1b7d8f9efeebc0d8d80d3695b881c609fcf1b6bb76aeec4df9ae0de91ad21e71c784a56f806793ac789db987c48b4a5a025b6c003f203c267a09cb39f67c939e6c9650c7afa83b810ad45878fd6728c21dafcf58e56c9ec6db91cd35f901ddae0e407e7b160ba0ae3399f9bd40c97c5cf753246439ce689b806d798d78eec3b8032e48c246978966dbb82467375320cfb4aebb3cfbf1119ee8177aeee198591aa20a5a5548da2c780f1b1946a3e239b27514f06d46e4150b535cf1a02f01c0803207e37cf37746b26a028fac7e6bb413150bb22e7ec0b39c3494b805029a0725225d4936e7cc6040f6b5a18d8ca499649369803dd1dbbf1dd23b6bfc92d6361f06b4b250ecd6978ec7b6e688cec96624b340de3124dc1f085dee6425cd22672d0ba5286037175925ecc741ecaa0fd39055a3fe6febdfebb9f9868917dd8a1fe46ed5dd8588568f504697635d025e98a04b848cb5709f15a9409e51bc01b45fd614818590b0c7aa559f5a39c3b1ac103e773bf95f765e461e4eda5d0e66a487a19e4c9fa31a0c6e24450dc63080682c91f28acffd3df0225a638da77bdeb5af0f44c8061ea47818a2e41aacf683d694b7900f767391f48eb650d63742dc82ebad5a252a4ba3db5c4182de91229df834618184fed7598978e50f9c6ac8b66f50b49f33c0c7367a793f9103aa505c3c66c2854084bde79b88c47b3b0a1001418e7dd7da6e2782bb022cec6cf76c239452df63db93b08fd2de620664072812723b540cc2c0c0f6e79fda2ea81cc77e9437dfa1343e1e8365815061c56d544d9e9f3d6c94fced3157ba7b239cff27f3d4a15b436b49c716f80c0e975dd2e0d22265b8d05756c0fcb2d99ea2e3d08b3dce9a54c89580b6e7c1414f1be5967558a6fc7ffc3153be50fd7827ab92812ab08d7a0fc76ac00bd4063c95b147a2b07999bd7ca42bcc552fe3eba08d912ed37cbea05b958163c3043756f360abbd6811744efe0fe9e4b8c38d9ccb0861f8acd764c047c68e334bca26a376dbab42d47998e652422835d0ce5e4a77c04b152d167902fd2908b0a987715526cee1fb629f8f2dca328b95387018c7ce72f0573b386c9fb484d0cc9b07c650fe5589af442270a7f05e654c743cb69f5063b91d416c3a09bdb17eff67230180f3c254e5eacba63d1659121f8b20a24e799c8f79eb126803fecf7b04c972e7f61e8b967ed1660904c165a4ad29ef1172a3faa05d2a7bf5f0445e739eb768c4a8036c7da814b0f0cb0fa5992a4b6afb0c75bfa82a415bf782478913694ad714ca7561c725d05c57735e78d4881601a880523f49ce3bd650a9ea44c6f9006451b9de5202b3655175c164b75b526f78b6dc25e7ddc29c6541228101699b84caa64d3a8eaac18d06e22c31d2a1556137e3b276148b39d16ea54436f724014a9a00e528a76c0138826a3932044e1e8255db5f0594b3a20d32d5ec5189aa73ed7cdf03419efa02ec1e5487bcc5c74df2287d4567095b201b62b9290b925f7ffd41380d72fd7b82d448e81f334e0bb76d4d7cbaf10180274b3591cf9db0c695fa5585aec8ef8f2da738a8d2a15b11882196d04358bd90d2a4c4fcce27445b0b7d212a62094527471450fd63db3fe166b25cda334678d3792b7cae91b4bbc437bd1b2d325dc0fdf95e722f0d67deb3b975f78353b6346d32648b8fdd79ccd911008657f3a61afd8c27096da8fd8654ace57ccea7d7b0df5f9f578df04e86d607b466956524ca6bf0c42716e5db57d0f74f17ac65db090305090048718a56bfc8ac2f14497087823335ddb5e273114d8a9b37d9ea4685011dbc8bc2ef7a827205a35f3f0e2fb58a98debbde8f07aee5b9ef32213254e75ed75dc3b336296facccefa451727a6cee4c907f47f6e5c63552599a708b7f0d9829828d4c671828e4111f3a7ffb88ee10ac09385c5401d0b1ad63481465bfc542a5ced26fdc35f280d26106e6c4c7dd61a03bee87318aaa1a88285ed79cd45d01a4e25f2ea6463cdf100c4cb890e3a97c462316b0f6302e2d69a0b5b90b4111c33c7861810f654116262d6ee0bad22fa2545d23536feceda512410349e8067ada707e44f1222e3730eb0638a59199ec559faa226667900ba7c976435ed3631cd707343ec1d0aa6bc61aa5eb1ccc2e6c9bc4fc50895d50de7087e49719714c3b0564243ccf3b908fce12ab35542ccdca679d7467a1283e389f2db9c000f81df7bc143bcb136f7b4a3d893059481f67f9328ad328d5bbc1a96e71b90b123c8933e9f4f17389e88300c475a113da8cf6c58377a9a6c33374a58b864bbe60a5bc52ee512f411dcc43bace26c359d293eadb184f6149c0b451fe4f4e085a3467a39b9db1234077d513b12129053b923c51364594bce9d5b7a09d5ea8ce2bdc2b708d0a30756ed242ce7472ff000685404a6d937499a24db605415ea64734acd082f3ece4a6b8109e093a5a20a683843a86863fb24acf7d09d236bca637c8cb4c2ff31095005e465fbc12860d1850f019b7c4c8a82f82a5213cc201fd39b6d091a3739ccd54e71bc92a35b520c8487a1532c25ef3b070174e566b6314d1903833584ce3a6ebe4c25ea5b6aa5cbed820370e5ac91b6a4ed8600646690a2147b6350d65ae3183c1b667972cb78c145a3f2e44a1ce5e4c9e4857a1e16bc947e1ae68f843d9d7d83a9daaa122fa5642679e11bb176ea463a0572e2d6142fa98c7b34b6bdb4dd7199ed926d349482e485c4c5096818ca88069a3940c1ae42b3cf28e71ab89290b24c0de1d31102ba0b7dca351265470e7950b271717627723910063ece264f6ff0466784c1573b093e4b7900345ab7a450ee406e67a5d2cd8ce9643778c0b68207444e056ab76bcd5010180e6d3a55c57dd5cef5ae9a84716e2fee7a6bfb9107299126766b4f5c1eafabe84b8345435bda7d8becd00835927637396bf9974d516caa6da7c82e2ec079e959ca088310a5d0626ba5b2c1394852aa0c940c030db76a5b6b3da5a478382d51ad2fefafc679dce5d7ffcb5535146b42b99db3940ec9af3fe21cd6763e4d5a55aabd7d95767e12eb4ddf8cf59398b4b934d15eb545a921f9fa3e14aaaba258f554c55fe6c224917cd3be942d377e9f8887ec6b33597d568b5967feedfeacb72ad55ac38c6dc589b99c9458c339ef2accbbbb6bf1d5f9f29835e692568178f8668db93c5f2b03d5d72ab316be35b5beac3197e76b65f2b424b6fb46e26cea5bc591d86afd2ff7aa6dc7544351ac79f3f0b5d87e398661784b5357fb3b6be13f2b935da2daccf6577b23aaeb996f15b763aae1efac556b68a52a2f97954895aa4ca8f4d5c279cc3a975abd6dfbddce5aa5d5ba2808f60cb3acef7fd5490df768b1922eb5be5cd6d65ede9757eb9ee6adc7bbbd8a7b9b868d2aceac79578ceadd9fe2bdb5da8ab33ecdb4dcf8b1f59d1f558bcc7c46d568f8cb1c0e57444584c3550daa2956930625565c58feb82b55cecca729b271430f1b251b447ad878800d2ee83ce999c3c61c32e6c430c7839e3913ccd101441b1db4c1c4461b74b6e85c1d9d15f668f1bf61e60ddd1b3ddc08c28d9d1b60cf9838e6e30d3533f7e9894389384e8823080e2de0e0010e10e048d203878f9e3a6ad499a14eda5307a98e8eb1058c213136c3180c74d2f0155c9c790618cdd1438e1666397639189019210bc1dda1f84c16e463334f22471bd3fe9943ce0e91998e2e74a8a083e822f96ca78dbb9736b773c5019fedf87698cc76e81d11cc7678e57e673cdba1c65d9bb903ac660734e161060f333c3e98f100727f12a30718313b202b812507f808c287f5910002089821b0658600d10c81097a3831ebb1a58706b303cc4840b49a25d0e40345c72c01256609ac90008fc7077d14041e92279ced1063c6038099021dcc14609af1d499f138c10383bbe7f27ead19036c30f0c48c8173c640d36c01b1d9026616206101273305ca502006f088ee6960b4e7ce6d6d773d2ff4a0b31e0b7a0e98cd3c98cd0e98cdce9865319b91e0eebedc8f1d10899e2a66a0159048ee673c2098fd7062f6e38419f89bfd38428701b974c4cf3bdff7339f2a663e339fdf1b45663e4bb31f332012cc7804c0a3356be0ccac013c6b4082199031664072980121674094cc1ce8c1069c0786660f60003673a08799030498398044f3990311ac01b6469a336b3459a3670db1313135625e6249623e62ae064d8d1e3576d25093469934c6a481248d1d34c4c284780f1a69d0e8a11185c6121a363772bee494919345ce767797e323a7c719bd332a8d823866ac41630616334c33b0ccf03163a78c2c6524953104169626cc140ba30ae3117b4346982c6454210309193b639419e3ca1855c6f81143ec979b1e2dad15698fc84ff73d3315eb34b5f3534fdba5fc447ede4ffece4f69795aa59ca97c3e261ebe5a5f271ebefbda288ff353d3ce4f3b3ff1befca49d9f8c767edaaff16b9c9fce37cd2aa92deb54b3bd1a7973f8dade48abfa9771adfbf57e5d95243152a577250fa34e36fe6bdef1cf292a274f95876fadd96d49bbdf67232fadf2aabdf577b6d24af58b31ee5f34e1ee233af5c517e44b7d310686046ef460106527bfb3151876bce7e37fd20306118e79dec300091870e5fcdd97bacbc3a81306607167c00de4932403cc3080014e86f9824b962fb64c51ca175f0c057df1f345902f76c0c6c4dcddc1d8807d79816501db025b021b0a02ab600f80f180ed8c79e1c51b9f216cbc5033e6ee6fec6e93bbbbd1e53f5c5f5d985d885d44f574d1c47fb8beba083aaf263f6bb42755dd8f8270315af5907d6d494c35fdacfabf8cb36a591a556d5adf697f7b973557e562c8ddc3b8d8c2c508ee4ea746e36201ee3e061773dc7d8e9b1feede86bbcbdc3871f7302e82b8a8fec3f5c5850f173b62fec3f5b5c5135b8cc9f1258b305cb6c022eb32a39092f5a4f80fd7d7164b5b3471df22c87fb8beb6f8f9e5de9dc216c5b9b735f9494cbd9d695a5f12933e7f97c454f1d54a554b93a451ad09d1a0ea8dbcb9337c9d2d8909cd5a7657f1259f44cb11dfd292bf759dd41b79b5b6c6d7f26cfd9dcd7c9ab9f1d43fe2fcf423ce987cdf99776569c75dbed5302d79f892671e478b96e58fb5b76f68d1d26a29d52bb4b8e2842b92d86079aeb45acf460c9b2a57b08105c6c201366fd8880c1082050feeee6ca0d820b1297277e7915ffe32ce1a2d165960f10316682840480146d854f94f01630a3843016214f0fb9e2c36c822812c7ce4f66b053c90c5571657b29892dbafafd8b1c2cb8a31565c991560cb8aa42ade54b1464c155d4c29553455f15305cfd81aaf3561d6705953ae215a13e4ee4e851c2ada5091c6cf6b6e29fdd4ce4f4c3b3f95bf6f2f8adefa6e29edfca43f27edfcf49bfc9c2e72e63ecbea2a4e0a4a4a4aa922313d816aba01096d6fc5ffbffdba5a14e544748ef87afd88b3cc9b0fdf76a7d60e6a07957798c987922fb583d2e5d6b7cc1a6d79a4aba8d16df75494b8a5b4b7fe499bf98c1a6fa943a392f6eb1c0e7451c50f2b61dc79ba22fafcd4962f75948ef61cb3efc9e791f7d4e5d85cb1c3809380269913c923fe9a963d7c6b9069b7f6dd9d6ed3c9aed6b08629b6be9a33550d494bbecfe224a629fccbb74ed53448a2a4d9695848a3264d9c347100818206c51228a040f10114380428b44091431a1b14f8f3542508c84311697c9e4ae0d99266e7e9cbd88c8c239e107bfa21ec89374f51b8d982cd9b27d43c99f1c4d7d39c27bc7e8c90c31365a08cb6f5e9eb54c93f33e6dd5ac1b5a5e569ff49eb1377f9cff097cb9af3aefb8b87af0534314113b926ba9a80a109314d7835e1a65cc01729020e587054a07ad3e6ab4984219244788248043648e068d9e03cf57cfdecd0e02733914de02475f721375dc374d443b489f646d417eaf16e6c799757ed9f634d75766f5b5f571fd5f87d19e7b1d45d8db53daa618df6b86ebbcdffacdc530d9fccbefa5a576b6b567c4b94cc3e1eef9edb96cfe77abdedee49f3b3aabebfbc549540421386a68bbbafe13b9fcadd27f01e25a2b8bb9859a59540dd5d0df2cfab3f490916dc3d8d33efd13a59024a09377a94c0c2ddd1786d8f489c8f96d8ee0e06d21243b8bb9c93296bcc4d68ba4cffe1fa3a72342456131a2224687efc87eb0b8d0f1a9eb124c29250e335264c125c92b8924415f7244affe1fa4a020b8c62d6725bbf2ea76d596b5bbf4e9ff947ab59d89ea451c56d6cef69b530d34fd570dff196a6ef5a7df1d7f3b51e1b3dce245a8e5b5f6d799be9a9e4c468ea26052aca2e93d81a61c6082cee7ec619e53d4634c0ddc7f052c24b05af0cdcdd8c234c38a2c8110b78811d51c6ddcb28221adfca08d308d108a21d462031e28749eaee5e8458116f8a40332be28bcf500445602962aba788a650eb2f496c6da54541f81c4e1fe1e1ecb37547a9a1eeed13ddd533efccffacf35620202aa82720a09ab71d7136f59ff9b7f51defb6bebc514b625b96b6d45dadb3a94bb7e9fb2a8ae76be54a5a5dd5d7eaab8788b9f7132f46ab28e26c56d59087efeb9bf72efbf268a2d65afbe5cea6ce4d35cc1aad6e8a88c395a54512af4c74772b7e2da5d346a9165860410dcffbbd33575b115f1e5f77fe366d591a9d79dc95af1fe75acb7cd6d7ca3a8b737937466bc615d7544f11c5abf2faeed4997d29b6352d6db58624b636b2d6d798a9863b6311e7cbe346732d6d36eb117cab1ef238d79ad3b617fe763e546b9b79b52cafc55757dbeb52a92cad4f575b7fd5f6bfbdf518f3aedda7dd36bdf5ebb0ad3ba61ade8de6fabfed25dfe7bb75b77bab7d28ce855a3fb6b9b43beffaf9c467dee17cb12d4b5bb7ad29b6990c3fbcb49a7bbf3a668b3154c614f910f683063f18717707620c881d80b01ae303100dfc80e6872f3f301940088cb120a204b1e300411c60ca010e207300322a90416280360c10c6005c0cd0448620b4b8bb97b1657c081184104641881144983265e02843451921cef4100187881584d0410894082666d830f3c54c01cc7099c160882986706188a2a32867de072f3e944e6d7a18eb414dd390bbf790d483cd29ccdd9d87323c7871828387fdb480bbbb182f31598a6a34a2f1ad427c79dbdaf7d5ad4bf2cfc7e7e519d5f075364fd4c4d767b79ec453b0aeb07ce76fa31ade73d44fd69faaa1589b82758545fbddee92bf6b67a6d5fc5443df9977e79b35a7e716535dded5d7559dda5f39052b1dcffb38bf2f4fd55097d6446f9a2cb389de6cddba5cf346c9707faaab53b0aeb06aaa9b82d5abdbbebec2aa46150c1b773f9f2cf3d2b63f15264b1812c200911fc609a91c8ec294012507a81c14d0930301dc7798b2c3013a0c91d301811daefbcea7fafd931a3067c0740183a56b9360a4808902d3044c10981f77771cc67010c321cc6bb44abe4dd4b6a6e59bfacf8c2bf9296d575b79f86ad92fab2dd5d5681bcd370b4adc259392876fc6d5a63fadb62bac1a9a68d51625abdef7cc95fcde685fa3767c9d51b541480d6a481b347057b2418b0d3dfcf0a22865a6691ebe76d43abb2d5987e06b7b4f6a7877fba2ba2ca91a9eb61c9face93e5f8893a1245a0b4932343575e5cc95f2ca0456c4dc6575088d1a4a323575858dbb8c822b6bb8cb26d025999081bb4c829eb64b2664719711999960c65d1681b6a2c6cb7fb8beac1461858c982efec3f5758295aead9eff707d59916225caca9295212b342bd54a8fff707d95f04609b312662594f055c2992426db46cdd252d5b0b6b79e34ad8f56c52797ecf7aa2dcca5aff6f6eb70cda3f8ab3b9126f6f6ffcea72fb6bdf1b5beac79df72bced1eef96557f2ec7bbf51daf291615511169d1d2ea78cdbcab7512df67f1f8a6367204156fadd1447187b3ae241ac297bbd3e94555d1208430aa40b9fb1c2347aa321559050777a7937798e9497bf2cc2a6d9b4610e385d90848b3117c888000115e842655da709741506d02a8b90b208abb0c00381c1511d1f856021080bbec01779709c0080164e1ee637401c05de64057cf5dd6405701ba16e02e038244829310bacb7cecb6494c5e634208b3e42b042e3e4bda08214b085542206721cc42080189cf9220646fb8d87091e9f212c3e585878b0bd7152e91c92865898b680c17922546b86c5c41a2c8b87cb8764ab04a7f90b0f337617c7011c8dca849bd7c70457899303817522fb3344b4a52910bcbf2ee8c6a38a5f4c4282a1765a4b454f316aab72024a190fd5ed543367e1fcee7d5d2f95e6b23dd4779adabf19b5b5fb5a895c3e1467d7d385cbe39538b5597a51d6955ac4de5b01dc529a43f377e12bff964d5b7522121213d9947b1a6d8e27cb7fd7b52d56afb7b52553d246424cc20eb6a638a32aa222956fdbaaae2445e2e7342f5f75849125ad54cbb9c3e14a2f1ad6e05aa43191c0999c47ac3198aa8d3cf124526284c39a14ae41655812a92234361d04d14ab18259ee8af6edd9d0ed568cdbb7e940a0484530a6d595e2842a7f5e97434a8baafefb3ac532d8b66a58f2f8dcf075f0bbe2b5f02a557f9f399b1c4170797780afbf8d8c0388058d8dd7d86b16404f018b809dc43269231c86fd22490a3c82ee49b87cc0a4c730a13cbcc343aa14090539633105a30c780a0040291539f609c509c66cedfe986bb7b16cf38d200a32148e30c9df5264bcd4c4794b5b3929cb276a884e9a45019c345475249a262cb6133dd00ae972b3a1a6ed2b5e9727077bf3b613a217a6f663d353a04b8bb5f619df93c95a660d9ce7c9e7f85554351ac2149be696df90aab86f58673c55075f743bed4ae03df6df7df3fedb638f96446da89d985b1db42eb203f5220daf9ec787eecc53ece833d1b35eff563c2bc97dfbd543edf039c9fde679fc637339526ff9fa4b694de9791707edac1f31db91f5d14b8fbcc7bdaf65ea335effa647ea26deb4364c118c6dd713535b5effead62269c69bf87d3a5d5a5d539979ea8b67f6addf3c99cb6656973bd715b5dae2cef4e3fcff672fbb5cee5f6ebdcdf73e7f4d6ddfd69e67afbfe7259a7f5fdb9edae7e5090effc84199bcfc37787f8c73fed03d6c9ccbe35c1ce60c758297aa2e2d81eb32815acdf3027ea07514e1402e244392182cda26a981b137d84816952e587143e3aa12c071db072f722ee3aff91d5c4756f9b4f9ad6e9ffa43ad267f8dbf2ae96c545fecfad2ba271de1a3d75b7d4ddb2088a79b72d14dff286de9028c92919daba0909dd9204dd848c0419b9a5e5eef12e2ea2cb9c771113dd1a3dc371f6419a9c95bb07c97e8c76e4e1fb8118ee76ba562160b0414e9d5296762c4262f476bbbb447d45d27d4f6b7e50c18f2508809a079019f74cf1d9942577190f9d7f5435d4595726fbf5109d8b6a1bbf9692dd3609873b3febb43e1c8edc3a676a5fded8f6a2aed25cbd71f7d4e74393b07e6025d9af5f0a2b04f7df94c60ac2b1ca70f249d208cd992b32627e2c60cc972b2e59aeaaec2bf20aeb2a6a7cab4abeb599b7a771ee20ccddc33c00e2ee64b8bbec0d9b59076a661d7891a49156f691366fd3fea64492b4a2f838efd7b73f4d9f58496cf7ebdbd3cfc31bdbbdf55ad7f4b3cebc33ed6fcafaae98ee2a302b1e5641565758bd6025cea264994501214a0451ccb8bb4b69204a19b328474811a578309372c24cca28a58a999420d2e4a822d3a400962ab381aaa8aaa1a65ad54305d6744b4345c6dd9daa4b9352ade1eb2875cac7dde74c21b97bd81496bb0c2c22f2fd664acf8d9588c6b79ae2911ac33120f6a6015252524b8ace27edff1e871c107190e3a00a0907419c4aa829adaf7efc4f7abcbb9433d59723ae0a77399ffa969e5bff886dadbfff9e3befea2e9bb9cb7adc650cb8cb16709729e02ee371972520f3e12e43c0dd7bc87ab8bbd5e41aaa2976ce5369c26d7d5b3fef26a18192c16555a156fd139d2265018052231b825a0a6d940ea7d4a27a55c9f3496c43859cc49cd0709ac1ddf597234673fbb5ede170e6ed6992b467fa5939df3d2baedafae969e7a75a77bfaaf7a759234ae2336ff2ccbb9d25edcfd69c31aac9d737cbfa9e7c79d2c41331967c2c51b0a4b464c5521526059894306931c5c0a486098e0d701b8c1b6c6d40800d7cd800890d9ed8a08a0d16b0c11a50744001821200284d33283f282d40113305143750c4ba3cd1f266012c41ba886ce1cca327e2d413296fa6448128242d5169024660c150084f82de58a1bd51e1497de181273d647acc9ef89a3972de80c5794306d89b31276de0f4580307481a3814a0017272060e133262725f7017275ae098e09e3149069d6feaabc9c7d7f67a3b354deb23a5ac8db24555f27512537eb29d99fcdae44b9327664dce3082c088c868cb2808a337473d28382a8f64981d9d39caa20b9016202c465d545b52f44c117a526811a5a0418a0f515224b124c5154da41863488a3a415328d084364504eeee396c5092230699187728dc8f701e5c18008845ce4d671317d1be7b9a32210e709791d1a08bbb8cc7f956e39b5359e3f790425df1973a3493f6448d78e15b8d6afcf875ee8df544730735d4e8b6a7354d8b92f9348180fea8867aa6418d688d16511077d90e266361fec3f5c5c48d0740dffdbc9b549944b9fb9c191311dc653b4b43b82733263326e00e3277775c131bbf2f3be17054bf8c4371bfcee57016ebf9399cc5cfb21b87fb6d49b38abc4962dd659a1089ad2e2d86d2b4ca24d6d7a5ba94676defb5ed9995eb96165b26f2b3b216beb81fb3253e2cf960096d8903434e0c6919c20dfde09a704cee9ec1980cb8447125d5698cf2745939a76fb55d6155a31a4ec11a52a35512f3b06eb49db6f34dfb67898dc8ef69dbbbc232b2e5e41b0182fc2334235d541de972648819120d8ecc215f5721d1b9fb0c49113f962082040e4f42e4ee49ae2431e3ee4849e0f8ce4f4a28d0364a49074a505032537284184f32081207926984348265842ac9c88f111f233b4a88bd7973031ba13468e0581222232446480b96ae99d02e693da29499d0d290ed47e8811ea11e423e274e1058501a34416278f82ce84b5097202c657d8ceed3ea13a3f57bbbdcfb96d5e2e73191d8dadfe3dfe3acf17bb5bdcb35bcd510088bbbc39901957197e9d8e911101cee32dfed72993312112b77590e222cb8cb64441660e37197796fc4a86dba3d71770f7c662bc3760396cf6c4aee1e4717500f48048a02224202f403e403c433567be3468dff707dcd6a5e65c274a969a9ed5ad3ac4654b3798da687e0aa1aea9dd5e967d5f379bff1b5bfb3b9f7a3aae1cdbd1f0fe7d2569bfe5daea675b236cb56db9f3b2a5bf7102c2ad510ad7fd652c7d005c6f938b5bf94c4992a4a0dcbd2e84f747ced421718150ad4896e74b7f1cde6b615e7fba77552c3b47cf4a4d262bd89e2fb2ef9fbd57dbff7abfd4933ad530db7edfd2ab9cbd5a886998a0ed5a554ad6ddc7d4e055a15089909b922e44a088f0ac8d47e672b9a10312135b8fb1c6da3905fea2cd5d6b669664195103888fc9c30fb09b2400b778763f663c6ec4789a20bd20b82ac0e576dfdbfdc740119771f638601d50563ee1e86011018a8e0ee61351a066fdcbd4e6d88cdddc750f393c67fb8bed4f8f811c5584543260a30be6899d5520baf4d44fec3f5557fa29841567dea8eff707dcd280853e3454217055eb2502065c7191434a12068823951b411a7cd0469264033019909becc26d0d2359b2069cd04b6d904416612cc5173801c30ffe1fa7209ceb8bb6b994940c65d822ffec3f525010c1260a9993591f63a7b357e6d7b5353b5eaab459c47db9f3c5b75698b7e672b29a98c829099d8c41aed539bd337c456b7dfaeb562a41a5a8daf95c74faab58656562179fb9db14d14eb67dd1257d53049e47d69afeeb6d18c4f74df5e0b575b139ab2b5b4bad4964f8af5b6bb95a986b9adad938deac87b9e76bcddd2322daba8cfcffbb544ab9a15cd4aabe65df37e2b71bfd54e28148384aa063549d4bedf3729092914c98aaf586f64d5b7d6d77bef1a46c57ae62a9659e33c16a1d5745fadbb47dc9fdaea5e8d9654c35da0cf17e8830608e407101d90a2d2def3b775326fe90449caabac96055750e08f2ff730d4357c7d7fb73ff3a8ab2dcbfeafea284850151c737b2a95a545fa8d503f2cf02cfb3f96fc47963b2806826fdc8068ce80a017900b086eb9e32a2e3df3b6a43dd267580487d3385f0dcee0b8697dbe630dd893c6dd73b95cae486a9664f6a5fb96769fd969a3f9b63bb5f0bded4e2d292752563d6d979c485985b95c13c8c012b0a7c90f2a7d2875dbfa19c95d96c45d86c45d768481315eee76336fb9cbbd564eebc7be4c627bde6eb75c2e33e0ce81830aa0f1fd59e3ddb914d5e9b2b4656edb37ffcc9979ebadb7ee563e4d8d665f8a33b61bbf8fc436976ee5d30cf35388efa9abceffde3e411f687cb8f1f1460241928009482590134021010324f0048fccdd01e0200fcd08e4a10279b2409e1178ba803c409c0163c97889f98283133ebae060850f2d388081a56b0b87301387367a6078f810c1009102c6021f5160882c65d064c84710182b7dcf9ada521d55486e8c663da4880ee4f1e600a903941cc00278400eeefe8083071871c015ee7e81830788f500801b386278a821a3ca171904f0da52860c1bc690f103901c385e646e643abaf0d8810589b3ce6e34df210eeef028813b47dcc90777a8347070070670878dbbd1fbecf847e00e05d20deee06067472ccc0d1b5087d798305c401d57aae8e889a08ea82643a08e201dd5fe6c6acb33ef703e7726ea2e33023a16779910e861dc651794e5f59d0f7a1ceeb220500681bbec27b5e5278132d35d660128ebc15da6e3c71b625b3fde5863ba8ba037252101fd01ef718f232c8e3771b089c3ab4c9838b4c481258ead376ab8cbb54e92bbac4891511d01b87b58521d1bdc3dacce11ee3e46ba65b33a7522a8c35367476c0cccdb8ca519e3221bcb3256c57fb8beb2bbfb98586fb6df61eb2b6d3651f1ec8df6777a747e94dd3649fcff1d0e4725ee8cb2c66bfe46fcbc5b5eb23e4a66ecc34284547dd312e714dbb2b4f83aa9359dd5f7a3d06ab8efd6ffb9f38d265a535da6426214f3aec6775bb156d510dda1bb2ff369fe381a85bedcfb555bc34a3e92ad5feaa0d21243d550679d45214e4c62aae9c628797362bda569e8d22842434d9ac3bfb75e0d518d5b1a74d2e8e17516f3a1061a35aef8ae2d473133625bd0983313bb91a7fdad91ae11aed1c37dce541b6eb481431b546c8cb10166c686c8068f359058a306ccbb5a5b8ccec1618e1aeeeef907182ccca993c60a690cc00d316e7ce046921b3be89041e70577aff21f6c60d1e972438b148d2a6834a13114c78d1c2e72b0c81992d3e38cb133bcce187346903378cc30238b19661099f163864f1965cab852c6d6e7e3aa336f7ba248528f96f6a760d9cedbdbfbb4e66e97eb799398aa1ea2abe4d5915757f399663e8b48a2f1ada660691b8ae693475e61edac7585658dea7e3d056bcbfaaeb0eaeff115560d6d0da052d5802ceefefba70694f99dad1a90469c1f77328e529c77ff3d8b83450c308e179318555e25060cee2ec613ee3ec62b4046046330e1e43d22e3c8c906fc34c0a7013d3c0c3971c270c3c6ddc3f02a1386982f6168c112c62eb1c2484212c64f1841c2f00983278c9d31313871dab83b1a3867e0888113068e17385c5ef7e4b6bdda78b7f959ba5a5b6a7fdf332fd599846f6fdf1ffe115f5d446bfd17df0ac6c55d4624cb6eccb4659dc0ceb8cb42302bdc7d0da42f78b8cb6e525f6ce02eb37d91c6172eb8cb886c5927301e8c1e777ff3494fde29305cc8025605ac2746f90fd717d812d810180dac82f580f99c385eb8f1c20b325e7cd1e245152ff6cc0bd27fb8bebca0aa1bc9286b26354d23afaeea217babd417cd4635d4657a5adfcd3e4d5edd99379a6da98e898eaabd2eb54eb45a74ab67d1ad9ad697544372dbbac5e82e03da2204770fdb628cbb0ce877b6da028c0b07dc65b51a1754dc3d8c0b30eeb2215c74e1ee73b878c3ddc97053dd3dcc8d07ee329a9b1edc9d0ebe50c87b546d454cd5e6260a77d910f21e118d6fd585af0b00b87bd8ac8b12dc3d4cf6b385cf170fb6e0199b7d4980d81bffe1fac241d4420b2dd2ecd881868c1661bc645eb2684132a10596164d5a10b9d10289163fa14c8b205af0cc6ee8a1c58e58989b2f5632365ffec3f5f5c54a9b366dcc2fa6ac27a54d509bdaa6e74b96bbfbac4d8f591673482351ac5ab41bcd46556733c4d9feeeb9d3acd3a3f4dcd78e4695bc3a5c95376a74d34eb5de6a787547e12e57a78a546f0898be8c949fa89eaaa09072494c473929464eb7c8cf77b799715049505434f2ea2c8a6423b7d5dabc54234aa238d1bc3b45739a73eff72779ad79cdbbab45738ab1d5d9d2b244c9abb317d5e58dc35d697b9fea6aa682736f448f8e68505a7fcf4d3e79454dde23b1e2449d4d9d75e69faeda1a12121252ed5643f2354e7cad7cde6a6854a3423d44a82c6d2d8a06552f892dad4639d5f39ed7faae2d4d4d9e79fc27ff44b73d6b4234a8fdfa4bf414b7acaffc3db6dfbbeda6cecffd883346cffde7a82fe9a486279a9ddc6a78f5b5bf248aa7f8ba291463a35a0b6b4747265a71debab4479c6ab4aa1f3db748ab9a876fceba6a546f557c2ddbb3599bb5e9ffcebc3baa44aa9393c668dd915757f33e5fa347f526850645de6a68c7d3beaee969f1d5d59a53e5e59206a5f36fa72302b5e64483aa6159da9dcdaad19a5a339bd52250c7cbcb4db71aad4aa9b69a53b5d53479f197b47a5471e943a9e1996f95c4f9ea5cfddecebcea2b73362b79753df2ea5e4ad4d5fff1aa8dbcba4ca59e7967135fdfacba657de1ad8a392a2828a99c90797b15dfbcab513d40109936c8a021b3854cd3ec007acb12e185889d992fcc5c61068b190ecc1c0d71c6104c0c31c31078082465ea943953464c19ad3238218450238417218604b126882c41641004040760e2005a5118914584084640112154041c688a208bc0000175105006013c04e084683ae3c6193167d0331410c1c60815723ae73500afd28bf45ac008228ce082d103607521b184440247387144d7114bbcd4f022c22b0c12542081c411ee4ae830534217002578a09102cd15341aa0014a024e124f242180242e40828d3b13182cf1c2123e25d4905f5a4bb441e40bc8126498088309324b0431e16302ca571727a63831d4449d268c6842875913574dccbec2be6e908206351e442126e002287080620a1409a449a38634594a9c91c6812794780284272070a28999135b8c351cac712a8ea082052aa050e1638a28a6e8610a2a53205953ba63540a312986a8c28d145ba48022c58f143cd460a1060535486a74cca20013c513146a44314bc01609c021013c28c0a8e2842a84d6acb1668735f9ea0ce0c6005f062803c406226906046df643d40ff5871e63be8ce932c67d38e303191f7a7ce8d103961ecc1e441ed2f0d085071e1e767608b303d60e543a78e91046072f3970c9a14a0e5bf697767e8a22ed517edaf9293f91398abc47647edaf9c9777650e23c92f038f265697ba3ef30e26e3d0dbedff7eeeaeb33ff2a939c061ad4d262a1f07de74b38d39fcfe732f1cd672e9fcfa5afd625ab257d8bca77b8080a0a12aa4535d4a1bb4f8ad29f75cf3dc583ea47969e9da3343aa5bf44a5b213d2fe92de684ead497e6f44b356dd196bf21e4d1d6d5dbaff8e59ffdd18cdbedf4c3e51fc332389a51d956af8351c6f98bce34579278affc77c3e570d486a28a106386a58c206231b5ab061071b5ac30f19a4061eb2c818d9444318595a1a886840a20256181e5ec880c28ba03aba6ab49cbe61fa59b90a7ef65c1206ddf02f9fba9eb63da819dea4fb8ed6b4236fa33e5d92d0889130e8a6236f7fcf2ddb33343dd98f52a760d96ccf049f68aebb3c05cbfa7824aabbc2aa6159e693c915560c5d31cc8961ccf95ab92cb3940c0ab8fbc6277a24c312194a702319a098e101f2b794f47aa29418a29662188a2128869e187ac4e00d08d2658e9c2e7142a3d7ffbcbacd2771d60d7152c3d2faf46bdd287ca2bafaa7add1aca97976e31f939878f7cfd7cabaea6d23af1ef2828fbb0c83173c70975d804ff4e8851adc653f247e73ea0534ee320b60e0c100bacb8490381fbdc03326f6c605b0362eb8e0e5429930fec3f535c5052e6871a1cb0513749b0be4fe14bd5bbedc65156c59272e39dc9d0e970adc7d0caf31fec3f5b5a5cb01dfea6d6932db3234db4263aa366d13ed6f64bad6d4cfe391a7fd9d7957374ade1cf93851ac36518bba24a1f4b477bcbbc76fb3751bd515b2584188156c98f3c48c4ed50a4b332d5b4b931f649c2b98a1850716c2b0f0d3726341c702102d0910ab3363c18b3775ee0b30a70071be14004b010aa0821c77f7337ea0e9c0dd43a412dd9d5a14ebdf6bf3a1e379472c7e4e5bd1664408a84691f6b7c65714cae5b415712dc569699afadcfacf8ded0fcda9ddba96a53dcdd712d3ad3da239cddba239ad3ba630c599445f9b957c4c622424276569915edb231c4eac3c9ceaaaa6957757ee98525c5ebbcb67997bbf6db110f92c0514a8a40004052f14a8a08023c01b028cf9c1000c86f041852459bec8924296a214e210208b004358c06658c260316196429a2e3a26dcfd84a0135c3700136cbaa2d3c21da731a835b4e7454fb36efd6466ad5adf70aa86da8ef6457147abbd319b4f430669f8a1810777a753031435985043931a7cd0b1018c0d1cd8d054c31aee32285fdcf8a2c317a81bba6e68e2ee61373ce12eab15118d6f056603303d709002c4410c0e3d1c88e0c00382e100cc05d3e5ee7472b8ca01022cc268092315660686e101a68dbb6c031caefcacf3ccb837ea1c6ac8018d1c84709731b9bb8cc8cee5940e40dc654bafb347d54632d1401d82dc653b34f85c711a78bc8c797933c5cb072f5cbc5c61d245e6a589c807e7817bb1815e8278e1219279d999416c86363f4a509a41cb0c5d5b336cf92c2132976cf1197ae00c5270be197ac8304706b0a8363d19d29c91a14c0563bc8032ec1b40194a5006ac32a2cec73fa85cfa5945b9f0fc5d6facb69a882fadee92cc5bff14ee4fc9d2c4a5196add3de6f6d6d732aab66063010b16ba58a0b5b0d4c291635b9a5b2e68e18b166c68018bcb0439167a805ae46871a3c58b16514b90797b3a4792e788b26f15cbf26689f5cce2ff2a93de984d25cf0105e79aea52fb5b80c7ebf3b52e467bdb2251f28191b33766f37514893b975362dde5205300c23dfc9dd5f61c912841ebee5626efbb7bac65697ff687912841abbeb9d421be454a3be6d7d9a32c6cdc7ff6247bfbfe3ecb6e4de2cfe5723f9e7977743e8ffca6ffd446e9336f8baf2f3fe9298babb43d95f4eecf286d4f25f24df396487ae39ba3b43d95f4973a7b3e2e512dcca4b3babc6d3520a05a755de1cc195f6400a3480a4c291cb917d1553ea5eda9e4e5efa003160f39ee1e828303e8e21e926fd60fb189e60eb4095d26c0608297097406f03300a3018c5b4c60985c7a4c5f44a63252989288628ac28425262cc89ad62d69d6ec6d5be29c75cdba5a21b2525a09b3b2c3952857807cadd055a617c46b85282b4802f086155b931c419a306085a74904ee5b7ac8ddf81ae96d4b3bea4fb7724892b68b4c5702bae22041c992d003090b20614c8cd49707ba746989a008960886bac00890b6bacc08a0b8cef1f03dbd8223cc097325df775feb960fa58e10648471041546d861042a7ca4d478a2c431c28e941d63524011c4728461941ad66d978cb67ddd3eedf7f663b00a972a07a8f2441531aa782102902a6fdc4460727f14842773e36bf5b8812178b9910a544d3be6c8329b7694f1086b29ad0a397fefd709a9da5e3de45f9bb6fc24b624b7347d76ebb972e0e2aaeeb22752210080cb09779913aa8ddfe7630ac1480851ee32252e979382a56bd0f80fd7579aa66957bae5ee60daf31faeaf548acffeb9f5ff98967fbe4f8f77eb8c79f692f5f6a4edcc36b1d6b0865344f1aae229a27825daab55efebf6b64386805a3b40f40d348cbb87815a47dc3d4cab032d2b5a56689971f7b05fcddde914a5a47da9df96bb2c694b08b875c02f88df09eede067a05dd28e9830b6b025122137e9e2c00e51903c3816993668f21b2c370d955acd84d9b88c916ae3b75421511fdac5478da5f96be67ddb66ed4ac69694bedef16217f6bfbab1aeded9a56aa1508a8b4632e8180ca9cf5cd7f66a71aa6e52e977b9c712eef76d19f799cda5b8f73af4bad2fef545777bb328b22be0262275c7115580910840b40b38e694a81a651ce5b3252eec161803000100400c20e840f7c737c6010f84c5f93081070771f82ad512d7a5bf9639e12cffbd8f6a878a9a24245561613f9525962646d2973b87b0943f9a40440a945de5ca8746d5121b1a850355149a282848a8dca0377ce95736b6fabd78338be95280a0dd50bc4dd0ed59d76bfae4243e7eff24fd51ed11b5e167719524f5b1ec803793ea4fb4d3fab9265eea17b44cfaddfa886ba665d7d3babda72dbf37d2856aa3bd91be0bb9ec85de600b8bb729721118d6fb573398582604d28125f281a67a45d0eeeb2a32f4d940a87a3d2e5b5fb93a048a6e7199395704426f6c67fb8c8352412a418f20ba9c57fb8be40b203b209df72b7cbb8c7b7c4f9e6bbeeb8d7595d502e28a7c40a87d352356fa77aa685c739a99e69c10639758a122d1c4ef3ae0f87d32da19bc2e78bbb879a87afcedbfee5bd2e87b3783549a48ae2e35f16cda22194647a2834310877a7038a7440510b7759117d9340eb8275e22e33d2e943d14560a570f739ba24771f0349a773773244514c027b240045501483f82cf142dc1153f3460e6c0d1a30f70588959c96ae9cd993e23f5c5fb9a65c520e89ff707d790e05779d7ed6f9363187e2f9a45871244ea70f656ffd93586de20e8a643a33558da6c99b4b3f0b87d3e943c1e1a8c45a438d6fd5b4f4b3d2ab0a3c98e38197074bc00ebe80584d5844b0725c39e1c16e8df76007ece08aab11ae92b052ac53a79f95dbaf3b68d20112295f52b848c9e2eef98964b232ca4fe9432175fa50f21379878051c8b8cb88e8b28cd200775913a628315db444c10246d9f21fae2f5b8baabad26a489659574dde12e7d75a5f8b9257ffa987f446ab5443717775d51260d57697d5ac36a84a03aceac2ddc3402b6c95c55d16002347509a9515ee4e678c2a920aac4a5ad240d54f958f13cf92aa1d2a312a37241851b101a9ba5061f11faeaf2122a2587f8fe5d535b53efcfb8a656947adaddea34dd1a35a54961609872b1adf2abcfa352a5a89775b5f6f3c51b3e6fd533fded30c71a2bde603a1274ed479bc4ed9cc5bdbd1c98d9317280d9ec878f2f2b4c1271ef0e98804a810a0b4c0a80fa27ca0d4409d10d5256a0b280504e4400c0ec27020721085039fa82bc028324e5514b8e2ee4eb626350aace0ee4d5ebc34d9dcddc15c811cc8af46b582fddaa8566054b79eac40578daa438160f778683ea2826201be5140281a9050723e6783386ed86ca0e6cbdd3738b301990dbe6025adffe4e5330a33914f62a5b2b4e68d2a4b8b247be2470a68dcc33d55c35ab5d12aee79f8f7dbe52a64bf16522b6f4962dff97b671d4d14bfd4fb020119d5a51f70c9c793324b3c2c49b9cb7698f62f6de1ee614b70b87b18c87473773a4c1fb8cb8a88fe0917a22333258c4faeec27259313482affe1faf242e2846822c2a57982e4c98fff707d3df1198ac3c91c772771fc87ebcb891a9f259a6897f319159e76c7447efa59afafafc8d71cb9f5ebc254574b3bdea0a020a17cfb9dd5b6dcb6b775f8c91fcff379bc7bf248cbabe9ae4651494f46524f903e40f2394ac09109471a18a961340609e592c36b8bd6162349514933a42b90b47061e2820393745c788cb651d2569331504b5713374dc66809e2ee8e739eca994aeba220288101f0d2b133814c87e7a893830eb84010ee2e41489ef677deab754ff349dd87faa69fb5cbbb2cd6686125528d1c11f1479d6fbeeef6bebb950889b5cc3dabed69d6f4901233ddb42af6b45d12ab0d5b9289174c08c084ca5da601d1134894c35db684488cbb8c0824a2e32e6312051635a001121a90a00649dc653826078b50f891c41960911377d912264898fc30e9819303864b830647260cce4b16ffe1fac275b93b4eca120e09ce07b7b344cc967725ffd459a79f45ab3a033077d9103884359480bb2c031fb6229c779f94419b34196c918024831e9881940c767e90a0432d9effbfdbdd9aea6af6e1aacac3d729b5e6b589af7b8d9a7f0e41735ab5fe9a28d27cd6568db6bedc89af555abbd5db1bdbd3a2bc9efe73576dc53f6b4ed5a2b01645ab6929d6debed6c9ad27d69b1824d6b4d4595d5ad6bc4fb1669badbad45d7ccb4fb1510502d2fa8d80802aeec913d3939451941a56f2f1cf9abaa6e52ed7d7f6483cf31ead93f7897597c52deb24e6f3b9f42dffaca248ea7b7b1f15d10eaaa7ed52595aa4b0268ab4aa6be4dfada2d2fe196adb8bd238a37aabb85d2e496cf768b77eaae2c4dc2ed75d89cbdbc6efd322170652c0da941a05342c6855401a14d0023522c09a0c43d81842c51033205004361f908814445000892881406f008101816c4d852b346091a737c0500c184a01430798b8e55b92ad0c9b17a02d8bed83a01d45cc2812a74814e01128f00810d088194662301282420a1022414827b40018840030880630680a18b4007864ec880ee0912d10491a10c90848a640235b8c0420091930491698040045dc14b1022c920238840477efc0c121340cde80182000c4604c123934263422b42117acb9c0e41993f38326819f26a00213801674b1a0a78090903442a296801574a920ea0958812b100556310a7c509bcc51800a055d140c810ae82bacb44cb7de4ca9a660e5de4c772ebdc2aa61ba954f8bf2aece67f525b7525d596e95f6cf2b2c0b068972772330881741c280122c413202253872f720294801831005b105e1012318032310f312c11bf75df953f929ddca67d4ceb82a2a3f91b82a97437321f9e7454118edaef2f0cdbb8e183df1fbea73dd0a426083a0474e6685cba28000850009022556a6240bcadd8bce53e9c7f3f1f5ddfe342bae9e79b77b00eb01121ec8e2fb7287effde933c4e1701b35379a7b1bdf92b4afed977f668d5967fe810d8469200e0794001d78033e90e3cf0784001f680304c0120429e84810029d3e140e78571786351a0f5ffc660eaeb0a844f187eb6b14b399110000003311002030281a8f462332b178505e1f14800456aa44924e66998973418a9041c48001000180011000000400c0328afc13e3c29490f178697758cb33ae7949e34b3cae6344cb2e7b16f97f5f0f56d2d9c43462c374e1d436b8202c3687a9bc2b4cfdecb2e90c04109aa196dcee6d5b47c4fb3c372f6d71fa18765298a19da968d23b22c899fb871bc0516f11a79fcb4f7573220f3184c3e1808d47406f4aebdf609aa572834f8a7c362f9ec672689c3b9f97295e3803b422380b1ef2c7bbc3e6d537e380e163c467eab090150845b3136c9fcfbe49d1f4dffa0f60c706eb1257ff1824c98b63bf63d3bfb87ae2fe62df8293f70b87633a6b2cfb564cc7dd79367ca0ec15eddd81ac7bf76d63228efc41a78e1ada7f3f9745287e9e6deb9e3c2da25fbe4561adca9ae475362278243cf533221f07c6655ca7aee8aadd32f4813a6b9ce5e091acf12120f42420d64113340edc5fa4724233d3e42627d7e00d17527b211a51e6e4e53c92540db49c6c5cd4a3d5d8fd91688d68b04d691ceab792fa7dbb2cfce2ea15dd18e2fd50bd3f7419b23ddb8f12c0e63a5a1e19769fec782f3fcac149828d47a782db66479c61f962407b7487f22f8e9e84ba6b23676538508ecdf860cf4665a4c76b178965a4c1f440e88c4b001db174ecc5ab9b9576dde93000bdaf73497b3a75a49595c98cbfcf21cb527ef4429ad0ee1fff629d2c9363ba9af6e51ce447a9fb78c005f2e93eb0500f274ea55b59070c0a1079719351f280168e36239c90e62df47c0bc4819ccf47238185c0acd8c80189091f3737edbc9b5e9f4afb3c3b85b78adfee90edf6c0e04fd6418e7e270a73e2e9445bd893b80bae02d6ce38615169bbc85d7c6620a485cc02daf70623c8ee0850c719df6d66dd492bd6f3104e2b9a086e20c8f3626817bab475b7432ce40aa6fbd7edf35701319b089e82f2e2accb7d70cbcbfbd6c202b972335b42199e0b09920cd2accd27d3fbfd61fda8ce9ae7473c5b2e7e95554198b93ace874fdf971e38773b36890e7bcd5013cc0680e80399416fea73cff0abbeccac7ebf5b0556558357277c65ecf9dd0f02630c3cea7c64cd56aa0d23d98d3e48158d3538b931b8415cc3e9010e4792948ce1b5299afc8892711a7f999bf5fb960d3486c6734ad1ebf5f7936f27dd4b14f7cab61c5fc21be49596195b5dc8eded7b0847fc73218b96579cda054db826a8c4c78e94820f55e93527a7f9fc6b4c4d362150ad5f5ec3d1edcd3fd2951609bae9bfb9dc9c088cdb14ab34884eef6a6c9b791aedb69d4bc1f19a467223c83e9794bc6a2a310a9a18dff791f99f3b6908e1fe3d4be92d73f7a5bf6eba135615952b73a2ba80f071d02c2929f47f765edd80448e2567224673872442bf1c7c6c329e901cd12c22584500ece8a52cdb61586f78f3a34a03655d31b420d546d95524706ef3e846830355e601a8108bce09f32de0780851cf9668ba01f4defd9407c7c598a1de15988f249469347cc4d556a1ef0581d4f1f320c1f839ad4bce738f88ff0643375466dd74b6d893f6f225546f27170ab771ec234ce78fd02e5a75187b39d18ea7dc1da7cbce9848585da9fec6dd316d2134fcad64394647273cad9b545e51dbeca0feec274514f69134fa3af04fcad0b850ffe8462f5bc652a00e0696e2e7f4128ff565c190dcdf9f244eb96e2a46ece69818b2862266ffe8508158a2ab01e75e83ecf44f6e9b94441ca8a0e9994ee138840b7802bbc91511cfb9aef036c70b7d15836c76d009365f9c5ffea4253d751317f1f019265e1866777de0edda0ace07ccaf84fdf50c2d70f9c94c22cb5f822d0dd8ab18385487ee40f3dc43e8dac266383de3dda7e15000a736760fac161c19d3bf4cd6de38439a26a11b5864ba30ad79aaae169da5f7e883cad413b70f6771e002443e60a38b062ece5430a0f79051794d887b023382cefae8375b71074e9a8fc376d0965a08e21f1fdebe7cf6efc6625f8bafdc85d9212dfbf2e1aada1ac76178892c69e02811d799ad05f8553c605630232c690f4c71f30c14cec8704fb1a6479d1d19e8e6fce6d34d10442d0c01b23a4a8c9caabbe409ae82a555ee35d61a174cc7e8db255fd3df1f0105b99fff282dfaaf81ce490ddaa5ff33cca9e4458c03b13d39895bbfdf4e732a201a5b094acfea77bf86c05a12cf25f1f4ddf5487c407624b1da24d3c0b80f093e423fe87d4be586a2d17a2aeeefb17ab9de1e81205beca6377f7b7d61366f483e218a72c99667705847df4762b4823c6fe46ef61e44a993ffe267aea7f361f629f1b2e2e6b129187d3f8deecdb8724bcfa5778d01330e54335b4f5a6e67c2449b38a81ebe4eeb291e4b2498d35aef92f856800fd49424e5d5725021681e0d998e9ea1177b601ff09d579f8394bf462a8c3afb3b7e94073a0be055486f40e40765f975ac75b2ff0c5caf4237802b99d16f31404cfd1a757bc07e7f5a541626fe66fb17ac1fb3e74f921af64593a196cad2dd286316a932d71505c9ad8ced484e4f87db68f943ca5a0c607094b77e08cf0ef106fdb50cfd64fff0837ea42e68d552ef7d0fa56df1ba2c39eef79b505c8c8192d9752cfc51417bf46977cfa170c7201d5d61167f28f9b6bc42c02f74297e76d1fc60a5314e8ad0d012c22b6be1943a5d5ae7ad0e8b413ed8d4a43bc9523c2c3863324373ad6830e3cff3571c5a54990b3c64240285cdc8ed51f7b37c78132377e0ff67713295546f1c7441ea91528e183023ba129b4f372da76a878feb3fe8324726c502996fd9bda81c4be6c14502e457b51e62f15ceeb86500d21e916e547a9ca01f17f55ddef1fec56d6f3352e2c65b7536091ff489dbb8003e20f07f891d37bdf9e74f38368fcfb23f6b3f3c3df37235f911c45ea8780d62b488ccf5c26cd9555d30a8e3be5571d828e5d5012390ebd50b9a756d7501a4f4605284e344aae815da124997e8674cfa6c2bdd4f40dd57c716cf5f028bdbb4c4d953b7239dd5666d25cdb5acafe32a762bf55e5b35f5eda7f7c69dbb53726374aade99c7025be8f4150ab690ccaef6ffc55cca9dd211ee30054d6c50077d8d65f1ac8431b38c5a6d82536d81e7cfd9860be906d0bc68b4884b2ac63b7deb2f6bb32da0e08bc649a2011a5d57b6bc69995bf540f58a410a1563dce2217d67b21aca312ee4b26db023dad7dda026b12f6bf503efed6fa4e346d6d536f748b168f8ca41ff5eb90d02e2a32047642f7aeed3c260dff48f47f6e908cfa68fafa9ba768fb1c24bd244bf172ab29e1f6b1574c42e2b66f7c30760e9f70bdc07e62902b4878ffb2b69285f45274fd08437e377f07500fa370bf763a782a38e365e9cb4ae6817fbfe00f5c83311cfc19637548338de7cf7393152264dee6a2830fdfea391b6d45b3162d36fc56aa5368e5ca47d58f7d5f5fc7147c2b3edb864b7bea6843dd13ebc850fc3d507a77e4d29a0b4fe613054c675aeaaf50e43da25901a6ec03997d3948e2059c23636238f5a28957a14bde15d8d608efaa9b36fdc40a80882bce2e8a401296d836332dc974c65f992fe94714fd8b79a0682757634c889c595bcf5307d760762c4d1f36e5f34916ad63f34c6788e807a918acefb436c67944e2f80627f111bfc9096308b3d46c2a917c897264564b884a7b49f7541de7e7c0b7cd97e2a6071701cb9a1d046346801995aa30fd28132c6f4508363c082d9206863b7a9d18db7bd4a3bc2cb13e5c2bcd025728c2da693ffc9d5decbec551ad538c6ba022d41dc3d201ad66ede80e1755e38d297780bed6c71fa24e074c9b6f2af5df8362d24c19f11e5a7826c54e32c4f07f3ec2a67dd9884f3fb37d88bcc9c8571b19de1f89dfbd6f16fd9d97678fdbf65721265828a011e921d9b997af61e22730af92fe8ecf5ca3861a44c21c83c36f49ce8901b68928ccd7a4f46c754c46adeccf98c29762359ecb6055eb16493f3b4068e6b1432b59b9cc25613894b2c35fedca68f290f12a3e7658013b6ca3ea6cd968fbd0e7eecd3e7f4efddadbcd87422d2013ca4517fcd642d70f031c197ec5f829afb81be4918908cd07531fe362cd9390a65ad9a947875c2571dd7e45f7a9fda11b469ade01a8a44f3f16ab22aa3772ed6766fb3d5400ff05c45ffe0926754f34c6c2dff95ecaeb7f56333f0bfd238c4b6ca29b1bafe60c59938d822f23c0edeb3b657c378dd203173c45949bb7037893a10a4615ee2c99d6b366f5aec11b4bcae2860ee898c6bf2fe224e09bc8e8cf2965d0e7e2fe877a2d9055bc9a1ed879a31fe7d89621687d7b76fc9da3b05b4b589ee9edb0f3f83a7c3a322049c74bfe8aaa3fde07b42bd8225638ee78ee8bb59cc6cd4839411677202e6e5f6b5fb90c83ff0e5331404f5c79fed54442917a08e4c272781c20a43885bb91f0aa8c263abc55250a71fe082438905c1591a9f0573677619124963f4d9c35f71f37d74d05c4c8062fbc72be40cfb71fc54b73cbe3b9e62580d272b9404724f13dbbea323ecc13c0e9e8a21dd9ed991ed10524eb0ae5042ac9a0e9ad0780a5cfe906e39c87f4ce3411e6d36c3002905f7c7534df07a25926436f48582e8178274f6342e5103a5ebf09f006db60467b2288e3211d93b39cc70d74164a93eed7a619adb9ae4deae4434173e3c239cc3251435a8d627687e29d0cb6a573eb158172ae63c3f37c3b30bd5b1fa98e950a82e0754de28d90fff1c2b87b0af8ab9bf21927ca04cac2f0a5dd18cd1495af5b4a683cb3d6f6e4773b0de5a3140f7f0324cd77036e1048823b4b02f78eb98ab5bd648a4017ecef6d4aa360e2486fe4be99280083af2f7b6ca6d0918ed3e0e950beb5c34face26f5fd9478c62943ef9e818bf9efdfd9d71db4134218e19b12fa5dbeec511812db99b22e4384c432da8972e71e716c5d2896d433bb9935f211833cf76d6a4053cd8259de9161126e344b7e1f7002e43eb33ad7b7bb6a331604832c1edcfd331dd4725679dcd1d91a989550dd3f566019ea899c30fed7950511141403111bbc7361e51a3d7114f6bbb8025d2e83993031a2ad18f88bf718eafc5f04789d456e026b4daef896a558a5c60898c9a0bb14016501867038158d9ed9a2598b8a5a63c284b30d0be2280e149cf346635306a127ecdbe7697a72b18cc89ce6c5d00f20c77193fdaaf8fa8217f122d18121e374159ffb2ef88131c441a378c5776e26dc6fa231bb31cc11682bc2fd31fc75e8f4377c1164e79f029fe4ae5b964f91cbea1db333b9ebf00ba2635e98226ea004901e488d77fcf7f957cadd27aaa317bf47b02f315cfbfb177c27ce11177321d132324ac04bc32ded3b8e1bbb6a7aa8516c312834e6bd8375a4abe153ea9ae156cd80b818bd0564f86c1a4d8d3ed59afdddd0197eaf39c152a77dd0fed116d87d7b8de97c87439123081930de4421c80d682afeaf2ab119869efb52cc473202486d18327cdca4564a9bbd814ebf54d4c24abc322b182a44fea15524ba3c40232a70cdcaeda85db1330b8f34b2a42cb4b8faa05a204b25e79fc9dda57532579225001172243917a01848c982fef49ae3d4680a3e959daa46ddaab7b9b0f7fd5f3c70af32cdc963a3a5b8faaaeb3d283df80f4700d170c76015d2911954ede18c444cb9b136df4b3602a5e482b4f26680cacc28d7ef4695fde06eacca3b6b41975fe08394d27da3f16a33d872e3d591e6b50bbd73123da797737e6a2e84d656d4eb3463b61f981f35e2115e3eb5f47dcedbece41ee0d7d57683095dc70cc297b683778e29d800aa599e97ac2b42ca22eff6eb66cfa1ddd19724576ccd6d9f798cdb76d91c16e01cb8805ec4cc4c77f2b01f8b8f982bf7e2dc8be00bc2b64b805bfde88e7cbc6f9b7096d9e00de045a2d2f19627f06f30ab5dbaa9298c8249605429e628eb32f1f28b2b8f5386584cc11ad147db10e1c882a91aee110a7a2b45218ef721a60351d4aa7573d25b10d7eb3f518cb5a92fb2a5c27216f4161ef0d125c48671931aaae97e98ee5265cf6bb7db43f0445045edccf09849a8b55efcc4bf44b5b81187b6481e97b9d68a2b8ca7daf7bb2d49cf5027bd8fadf1fcbd64d8eede63c528fc34e314cdef21df1ef45cfa1ef29cf7a1d1b4a20d9386b45e8176ff954d5496e4fd7034c9df7c1fd01a3d89cbf90118577a6dff6817213bcf9f5c7dd873dd1127cec8f7883711f8d643437f474cb80669eb195fe793b705ebd0778c6fe6af5afc8fadf8f66ae865861e745e5c5bf8a38ef97b0a8efa7b201f998b971ced441c8c33e090a2b8d072514159af9ab180203cca618de1670bc246821d9ebb0aacc5dd77f52e97fcaa1e633b61e3955a30e10fb608a742f82cce1330360a4584d27d551912eb642389a30e39efff6d397e1cd01326dc193ae2305ef013fbf281dc9c94f6493d5317c6d9783d8829e22367b7dd08d208d9bf12709b5e134b3053992daa9cbbf1a0750d0789f4eac8267617890625a2dc4ed9086659899533e3d1b5b4284a8d29736edc1623f58ae8b166114eb68cd02e67a250b0b8ec00a860851a738066e80eea7f7e592eb4c25308b67bb389848696116907c79e15c5241543bc0120956202300ee301ba018662cbdbb54d729bd160484e24b98f9833a6b9bdea6ac6b53b3bd4831dc4c45a4d389a0ac9fc2bbef2f45a689ee89c8687a68a2757f71c87844f12056420fb62e57e86d7dbce56401d18306f764339eb59203123481bc7879ed2bd408aee6630f9f001f40930c36cf4d921cae6841029e3c3176dc6e46808f39e92baadff09517cafdeb12bf8d2f28e9ad2ca5535a0d788bb2f84918c73f36e99f19f3b7c775d9f9c16470e99181496a2f89009f77ad2fd2929be51c28710e0820e6c44ca623debc0b65aefccede0babd564bb33e49c0706f73eba3fb3c355a8972e77225077b702cfbbbf05971a6bde6179cb6d61106e79184c59ffaf36e0d00e030371228ba577407ced563a02f3e3ad899fd1bfa3a668b889ed2224e5451577fd3a1b7a06b17cca6dfb3d318584d67635fce59c90cc2cd962294332c6997441b9e04c20af8dfd2c90bede2e989d963b87a428d89940e2877bd205bfcbeda9bc3b85835718388f6f4473e2b17342554f71cb9de7a2ca4c2aef1682697d40f2d3a33943e59e15b9b9520ec2cc752f81b29244bda0ce5c0c292e176b1cbd12076aefd0bfd56f1505e6244d9b9e030f1a33044726e4cc98f78d085ce99c88d9cbc26dc55836b1956306a4b07eb77862d6ccb6c43a25043e8c852a034eb3b3a29a76d2d7a25233e19e0fbf21612d961648f7921000321036f106fde15417c12535dbb08bb0aec30b8d2afc269ad2b5d4744815e25d43f274268c0eb3745fb6e23b81974e713c51278a300ac7b6a9b0cb595d87feb308780b92f0e67090b8e971c9a1b8fadc6a234f99d7a30e1c5f9591ded6545fd7ef8199ce639b3416142b70d04f38ec8dd59f646768366e9f723ae794ffcee3133e682b1efd37d29e78296cde3e8aee26d5ac157a604cf9829f8dccf85e01f6376286160fa702891b9fcc5b890c4f1e8b6837f73199ac966516b191a50b0e295b05c102347e8cecb58f5ef7d439a1e06d939c4d3e8faee8946132b854de52863d73cd51958989c597d21db4a63ebedc5b1b272d5c3ca366c0869f4c90445e3d50d99235d82511f1396658043110d84e66834f2c41b2801fdccfca6b274d012c2d8b521b8678dcbc1980f2e35d718388473e417d2ab900a7b50f462f4c4db97e41d7d0e514ed686d7ee7f2d60d8420b8301025600f6dd7ebcacbb37b463175c1118179527d4d12cacacffb6506ecf34b4cbd63c976835a9a29c3e18f4303c873a11e15a67c97a34e312040c4aa9f68122b443b7e9177a5b968f76094d3e807366d7ab7e6ec02e0478c7cb3ffbfa2f78eebca09ec147d873821ce38c9cb4c089217ffd168dfb07a30ded7cbb171e5a9717e8ed86de5fada799de3bb44feec4efcb55a16d9f0ff7e68f72ee4623651b53c5b7b114920fbd16aa6641aa0af1c3c982765a0a58f753218e09412589815afc1630cf9970229da6ec79a689725ed639aaa0335e9c9035851d894b23d9e5eb94def40655ba78deb73c02d1684defc6c4223db41ed3ded034525be4904b333a264e805778d56f29e43c3e81b91d934e8fd58f820e12c6d4b5d6c7d8d1bb1233b45d2b1e20ab6d8eac3dfcb4f72e760b937198a33ba3059a0fcb6234274583b9360182e84829ebf74b69025a68b162203372ae838983149db03da4a1c3d8d43c03a903aeacdd6be91ddb0c233806d8f4c1d88c69d4c189c13df994160fab356ad1fe42b96a9d1dec08a97fefb12453a07ea8a2c11afdb829ede372ef1739677c24859ad93d9e607075a501265eaf2071aa29ebe879d78ec6b5d9a084d5b6ba8c96ada975199aa744ef76d7637c44b5795923dbaf73223c83ea6cf9e0ef844fbdffd92fb685206b605f05b4aafdede77e66250cd85cf2de2480e81e1bb4a4d364e94499dcb3bd7ed5b734760b7d76dde82fd391416d857731a76a6bab4f6739f5d2fa992945fca5653bad955ab6851b7f9f7d3b22380f886802bd61c81f75781c3acaf1c3d04c537317f0069521db34fe4e3346f894ceac601f379dbf75e8fb41bb71d373f44f5c687324f0cb33ce07299e6f5ccd54b7d14d2b177e8e662a269f99f32a3f5576c7c69580a2ce6f816f1b4dc7fbdce12cbc3b29a6477d0185be2e25bc39bef02d071c90df2d24649b154bfc6f81141944b419a871123b75351275e91dcc789a05f6963a98116e07055f3dd1def6a1e89a3a8c74dad240cd7028a6c0d93d649018f863dd65645592bd14b610c682fac7a7af323ba887c762b33e82f5a1c42fbbc565f300ba0477e8cdce14927a6bc794c00b5c84e9404976f888d675cfdac89134af4ac684fc99721f7cc7500b2bf098b25ae9850ef04844ca0de665aebbc91f5a719a2cd288efa9507ac2a6c64e8f9e070c21be403ee6ad3199e2c5db724ab94e9e53dd3125cb1d40fc36c16d6c976cd7383e7ee08f9ae31426f1905971a020b56344867d984c1938e2a4127936e434a32e30a235296a5cdcf0a149ba338394e1f6e9354beca03f5c7a1d37bbffa66eec9dd573d63acc0c10d35b8bce82faf32b1723a730d9d1c0a1f7a777a2868eeceae1e17a3f7e1177f999f30f688b4c276661723cb4c8625aa1c993737316af06c45b05112e19ccce15f1835488243973959a4d9ec6e9b24da6806023ee71f2019fbea1a4ddfcf746540c6eeb2e8da02b10800948b758579e1592f8185af6b03ea322ffa391178c69782abd31274199c336c80d4f2ec61b7e6f200210a2b39fe019aebd845f348eb094a1cf9e67f05cf29ae055efb1b158b8ae3e0aeafccb77b9bc5ded6a2abdb7f8f83782744837c2ecf413e4f7f16973c939630eb1fe45907ce7d746a1ef6ce990d59d93de05c6deff073571b2f05ba27f017329c18c80ca29abcc566a918d0bc6537543b04032b2c1d8ae239e843ef51a022fd71ae6732cf4cb375e60debf358e6fee7c70121775e8545d10d8011c7136431fa352203a39a1f1e7b4c2bfa9e47f9ce555093f0bd1dba5910fd207217680b3f0e78b75bbcdfaa37023d5c7f32ccc5b3f26ce1199d0091aecc9d78dffec0633543b8c949280ed6a1f053bf0a41c8051cab299be08eb3910048b41608ca4e60bc1c23df676aac926eb7d3505fbf2ce355f0e7063853d88262dcd16a78b6537d821ac04e5cf569cd9d8adf19ecc379f819a73b3f81ad288552e137dcb8eba5f645392b234a89434266890be0c5cb212b7bceda3ecd02bd6b7dbc723f834dd5dfa3916695ff42081ee30fc790a89ab49f39df7a756f44f4b35a652a85b217584802c1df7d0b6478d6c63ba81c14f2e1ad94fb3f7d9024c167e8952f312466d526adc3d8a90c1f70f2647ffb1a483d9cbab8653cfcc32304b046d31ae125dc8bb0f9899abb09260d54e2d4f51b48aecb567a6afc6dd06391387fc6765c5d147235fafed385840227ae8c4037ce6908da0e5fb3153be71e5d64bf138213b1db69ef388be726625aef76396064df3c5094b753910f8c2b3bfb738e6fa7052680e1cc10765738f36ec0ee423cac5fc6c157749ff53ba520dfb3c210872813676fbb0a4443ada814b3a0980114ab7ffc87c67ad6d15dc5460e009132491d76e408059408ac4df614084ab6f3fcc4ddd8ecf848dbff631c8bd203d343ab7aa1e36bbaf6d3d7af2966e2577788295973c242f190c3e9356b3ca313af0328096a8c81ce143b6efee9f121a3c3450ea90688fc2de3b5b2c1c7b60dbf7fb4b2e8f12dfed5a7dd12f38e91b438379e90252d8d6f13741e40e46c6ec71bd72ddd77fa383dd8b291bbe198a3dd3dc57a62b50030f2fb333eb8cd0b3d3f59c2d38145bfa711976d9933548782bc84e13698ce5ba9d692e01c469536f68fd8ee29483be4543d0d146b3f75ceaff3f26ef71ace418e7c065b65df6e725f702d803fdfcccb0628f74f1430c5a98d773add8df9d20bb6100e27936365e6a8a89cbf263ce6f03f6ed69e3cb919730230f62fe160c32f82002839bb2d22d56ee0685ae191df57e97afb974796335f6e7fab4c7fb97bc05ee19fb62e4164e0d6fb029e707ef797e5eee3a5c207debfc550bc2ad21963fd9dac300f69fa02caffc64e31036acb8c9a1795ed3e67e22eccf6c97d9503ddad7ba98e1b3e616ad74c9487197bb95b17b848cf9bb86857738b0b7a436d3654c76d865d2379db2ed2fe0dbf792f3582f9b901570ebe4ffceed4d618c9fddfcf2ff1f9a1cfde6b9cce29ec1dee6f4d7e6f0d71c7947bdf3b6f6eed3febf00e9dfe9d8fc0e9973f5b7137d3de2db277effb2c1d1840fc95bd80ad1b6d70dd80d8ecb819116af3f2ce64eb846fdbc6bf75fa366682e3c572dfce7f6729badee8b56ca2211b8d8f507add957570c0368582f096af0c0bca808701a5add1a7ee2dfa09962311bdf441bda7c51b6e3ec8c2f207da38e5c44d46952f408bbac936d64d89c69eb59f39287f948deb4a15dabafa3b4a926d232e7ba384ff8a177e8b96df6d999edbfa8e099f1661942f17db55183dd6d529e6155533c14da8c07cf29ecd05f1a67a700f6c92b0c91851324549347cc659f47aa8a107df53ee41b48daf30c22859dbce69afaa25cd89b52e8d0f6e6e10ac8f3703605837a56172c0cdae57bcdffda831edbf6950d25b248b57fc8301a1e385306818248465f63c516ed9a6949dd932c6975502b50761be21e0ce7134a503994f1008aff8ad05fcbcedc3789cce01ec6759b4f8f6b77a25b7dedd171b3fe71e847c73791d9200aa8e03ef9a408053e86dd5be9c38969281bd727e4655ab259b600ed16cd77ed2a907f6472bc52f548790379b3522835dd02d13b5bca8c498aa66a566938e31efbcdc1ef5bcfff4d67aeef619d25cae286f23bc5bfa76a8eb73264a09729c19131200da2a63d0337350ba6b9d9cbfbf1b486fdc595d5024ee181ccc301bb2e363b96c60aba4f678aa238495e1d9c47686361c5306673da8abc3aa2bed7bc418221a4ec618f73f114a87fdc3cecb509f473e93b16d9e6dcd424e7d21ec7040b99eb81b7cee86e0adcdfdb5be4cd85c4d853ada3bdc52d205607edc108422d306ff418140e00278bf918df4fc7fab3670be22d5a5f43a25f72298d5628f5cae720e38769d62b84f43a24824962b97566a3d8cae163de370d702673b77cdc526e583c69bae7cdb96eddd72c1ca6e9e1628d07e4d1d3f2e7b93984ddbda9dd1e5fb1b196423a65376ae21ad0598df389893862ac8ec15d5ea5c67b06e454766a545b2423bd20198c5c33c5deda91878f841e2a9d9489cd0c2db7154bebd17317f500451886ee1ef1ef0ff37fc119296c9dce9ce452d83aaaa70d175e0cead2ab2d84d8d3eb21fb28b3b339a64fef2b5fee8b762c0ceeef758f34b834f406493175a94a887e755d87e3289954f07b0be09ece718fc86a8889fa068bc42b6f20d6f473aeae3545a803b2eb4a96bb27c1c67fcbe8374f2aa89118f74dff81b846a3b7f686fe6f26b4323a1e8d0c3fad57a105d3124573c6b9a0bdbb18e1bbafad3be8139321c4c7a05877e0b38a0286ba1ec500f88cff94dad1484f74d214b11b7841c02d33ef1500c9a6807423bada29566ef42f4d5700a1d9758866403bcba9f7564b504a83af4a5a87f1c12a166b3f7edf5f086742a206276094f11a6dd09e4dec5921edc172ffafb73f9cb9110b0e58e0e7c4d13c082c3af00e54580c98d51cf58e85d720b39fab0aac7a073d3ac855c0e42d9820ab8e347a240642fe90c51e3ecc03e5378415e79107594ba9be87d7c849b3d115c84c86d1b10fb0f4057d41fcc02411bc348bf53f79404cfec4e98309dd5ce8dc9837e65288c3d9c05451473028c8675d945fe9c840801990206bd2f1e16fa09c572db8709935dfcabf3268dcc04172448060634ab32c4431e6ed5f252f9708d08aa6eb58eaf6ea71dff8346b80199ba6d009e01ab87876eafcbf8066ff6f0f49cfb9bcc402ba27efef103a6ef3579aec992835357c897e7330bbbed32dfed6f4886668ceeaf159731ec34dd9916cd0141ba41a72760be31c4a92bfd0bb4b1717f2bd0ac12cfd5f01fbc3f9b5ed73c7639fe6d9bee24b5e70847f9ae057ed0918fafb6bbf2824e1b31ca2443c963fe70c480982c31b8ea90f83d3970f5c4872087f313ecadee08729ecc04916af225f7dadb72375c85777b2e39c54a9dbdc42f18721e1255cb65d1aceb1d5dad3ff99f17f14f78864f6be5c2ee94dad2c6e1b8441ea4aa09bb4aeb95bbeaca0d97ba24022e6c914e05d55facfa079dac12f9dcfeff16d90d2de61f467b1e2f6e4bf903b4fb4bf0ac3df67afa53bfc01fbf94103fe89bdbc6b1fad703c852e838ba69b174087d10a7f0963884adee04c3ee25f8bf69aae44aef63c2a53b59a107baba1f85a5d8e49f480829da61b92a985cdc1c07c48b074504a883727cd1a9df2debb6746440b28eca45fd9ec94c83fe629b0cae6d234f0f45242b66c09d3329bc792dd7617129968b8b901329b81d789d4c0a7a37a66fcfbd201062808abb7cd410ebf507dfda27b4e16a05b28b6ecdb8daa7e98c251cc50df3cfcba6ebf24a9fb47588f8679c4dbb84a9ca1f8a1399cfb04f970154bb7e01a6bdacdc2b6ee27697e5830e1f5fbf50a930e353ceac86e10d1c7059f0fad06a8cead7f6387bd3a2a76dd615085f1c71e517fb9ed145ba6c4c926a4b4ef9f17d1e6cbf4c4ab2a2e31c373b8c1da1f3f2cb9798e442f7ee912dedbbbf02a9213b63cf6559973802a9a544bf3062213b5ada97e3a59875fc479dfde5765d9253509cf26c3c34d0a66c21ed5bf3eb695e3e8f97f76688c78ed6e82bbf879f4b09622bd490c1ab1cefad57fe0facb3fabb63c4f5cff84702069ab7a0238f6f6db3eb34feaacc70a33c44e646d4adfa9d3563c27e175e8cd12e67d02763121248e3caadbdfded2d69daf1ada704734b569207a537d6bd978ebed8f6f99510ef37ca6bb3f982159a757c2cecd7ae6e6efbbea923a6af840c605a6b3faaae538d57680678a3b99fbfc0578e15dafd69dbe5cbed5e0619d071dee67840b04b6a6aeb76946be11a55834746f4cbc1dd6c322ce39aaea7143758728caace7574f724b8f0f3f5f052a486e986fd4fdf8ebb03fc68237fc02eb3dda8f05d22fae6caebce19e99bee1bfde9934c91d6bd8343bd47395f6a755c44bd45f2af8469979367968bf88e857f7ed5f52c11485078a3fb2dc86521f2fcbec12202118df974a112d43ceb4876650a41a3dc196b2f603abafa4834a00b3e2af856e051dbd6adbeeef018cfc23508784bd900a6fdf50ca3fb0646e2b905895960673c53609629e2a7bcd61ff5fa574207ed38bf51d2855d6ac884c0aa8ff63f80985bb8a8a3de702a455c907b2c480829378a829df27e362e48abed5856822896e30c12e526f5f3bcc83d05d3fc9a83ed81e110222949cb9e07561c1d20f73be55c06f3dfa2c1f6c77d2e13508c9aa59913b37f0d46af84f9618ff9cc09bacad78894a8ee01beb98e49229c2b7f7cbc53f6186a83793612f5631596998fafa3e070a253c5287b7606442db75d28c912c0f6e32403790dba3a789f4292a1bf4d410b0aa3a539837e18e72e5e73d8d79ef2a854ea098100052da828bc42bbdbad952a79e8a2180ca5c00b5bb92d4417fb51496baa94fcca94d692d0c82633ead0889b257da536467ad43b4709b4198dd940bf465e9c242db5ccf6121a456f0179df48a4d657b564edd9a61d17ccd0c44c2ede95a2612f086a47dc2447aaff602a2aaeacfa8c87a3b4551f6e32bcd15490d2c1e5af545c9443f7b39178d72ab45aafd8b1bc83df1a5fe0c1d84882365e327fab2f479b34d9698b61cf588dc6089226d48c12096d20604a1d72f65fb8a3185ba9ce6fc299092d8d99b0b8039a46e071076d181081da1a93c5a187563aa6fc15b6dd3252a5440db89f80b6aa14d6c7551f6d3ee943c1b9d914ab1576e2d99e62c6810c7bb27de60006e8ec3a03586516438f88a019aa12e2adb2e6141508f3b55e847056380b935d3484095a9e3ef03144dce5adcc731e12c7a11fb38faa32e6fe2a33d44fac0618f2f4e0a1b28b2f9e62c71bc6f0e38f906c8f7ac13d5a9cb9e0b428ac1c3bd75e5e2fbfe8ff93b84cee9a89921daaf86fd7bc8f98288dcfe80e774f2787afe032aee040a9f676808fa7ace3b2aee7df27e00185aabdeaf877f2b71047a705aa3431cf19d19c3beffe1ee2bea2fa1087672d6d71fbc0d00efdc4cfa1e0ad6fc92fa599fbce9e0b602e80bfeb3409ddb5a7ff4497d89d6eb766eb03d8a5e3eac0de21c273ab249831ed525428bfcb1c00b48b9059bfd36287cec90798e13f9f70983c16bca875ffc983c28fd2212750b0efe9087d9e98f56f6759b8d2b00fb0bccd07a53e143f7297905476f6cb6ddedf25ff16c8b7b687cc79dc3bf428647c6f0483ed2c8fb3b78c1bb7a8dda5734faa1a21823160d76cbcdda8959c5f4ea686e739f03c4b798c29a3004ed0c563abfebb26828d39e7a639fade2db6da3220cc68a65ad843f87528183ee5222c47a709e8a56dd6d819344781f88e598519ffc03d1f293c1bfe32caa7bef32556cd46ceb6e850b27c8f5cf72689274c52146fa66963b706a9a3f59745ccd7e16c65f412c161cb822280425a1629daf42ee50fdb98f2e4886ba908b9d6f9b512bebfe630a138333651c2752ab8c8236505ea09aca461d8ea895bb2fc2cc8c216d17e482a87c21df93add3fb3b9863e163b384eecc64e374737ce825b05bce204ec5a2c687a8284be78524ded0275567e87e5ded9abdae68122cbc4d84ad301eaaaa2c532d0c7987f9194fe103af1e216137e0a37b1d5a056c0d673e019215bacb9d5867deb0e672c39444c2841e526d9a38b3a79529a90f7875fb8f1b47f895393d20bf37124e23fa26f2e88f700f5fbdb5da673a32e67e5b0c3a3103b6cdfa4027fc0cec2e716a3a6f12788dedadb8e898e5f2420c4d76edef352edcd5f62f843fb3dcbbbca9d769d62f6d2e48eab7b9cb032f1f7cc34fd4e52cb2c87cdc3e7aff51ee147e7ce1839e592629a8f110b865269ae9e2dc1e4b0db98307ca5e803af3dd77d6fa210dce74719ce459fdc9445fac454f3f7f196fcb8cb9ce5ad848a36fbbf04bfe5758d148f439ec41c5992df06d57aa9e2b6db3959143c73f255a7efabbf7bd868cae64f1ee24e9171f0be2d17ed5677d1e2a677ab0061cdb4a747defbd77e9712f26a76c4b9cf8df3b1d7c46fbcaeaf023a5adee459e0b916844d45873c7137815382f291779563579938941e4b54861775a0e97268df651ac8cd62c20100f4f282e6da7dee88abd285ca1043446e249abe00afbc569f400575c061a84a64007d928d337d386e9aae097bfc807e31493576cfe8e0b1eb675e9b615c32fc14d6345970d55c9cd0fce1bea999825b2670082b7df6384f715652bc3204744837d8b93b3ed9b6e34a7c4dbed5bfc8bc10d1ef81aaf25fd331f61993c8163e48092fd5d1968b6b66af3c34712228e61411d442507fa29151b53ed9f9bf8917b2c8ba7c9929da9c8fb06f92929f662db31fbf65f93c7a4d46d3e31e65cb1d47d9f1c4e0341962bf987f0fc6601b0ddb1890eb7b1d714f5e6d44ecd5afeb1abc79752966d27316f6d43c837392874f0df732233f5c03ebdcd16218a9641f0696d5c026599a60fcfb95dc5dd21b14248f440849f77603ce3a6aac58a91277757d42b0cc1d700dd3376a3d3b8e6bbed20f874d4078ae222740086b2dfddd52b1c66f0478d5d499e1bb589f56ae147bd3c828f24689313b6498b07cc58c0782abe01b8a40cd4f922951e315ecec262803bb2e6cd351f654d53511e8883c53b6970914bd72fc0b98c61ba3997723c00033e669759f03dba73defe5344e6a728da1a582a5d1e71e341188750f84310190745e4aa0f97ec54a2c1d614de4a0bf5eaa11d81e93ea2745ce8660411c723c1fe897f2ec9fb737dc793188b99c871222c2ce2cbfa0fcbf336b8794e393cb07358c79f5852918d17c45fad94de7a2d7fa2990bbeaf8b4059fd72f3fb3f6cccc5f325851865ea5bc3ce7b07bdf6321fc177b321130a55dc7531123e962be709b7e0e40904d7cef147b09dd023e3137e5913c224cea8e1ff3e6e1ff871b6fc61a657872271ddfad5ed7d68533b234633169bb02b7a893fe3554f19a025bebde87a9a6535ec8d9a87bee84b4d615183dc9ca90c90e6de2ab26a33e38d494de36686d35aa067862c0fb001c39a960c570ab4371aa2648fd4510d99a2c83177f646d0099d7ef9cdc3addaad9e2ee4c47f1658fa10f1ad869f0a9df4a58e78ffee657edd39cced688c6da0fd31e007ffa91d727b19dacece1f06ee7e9c68f071f80b472664e22bc0748f192c3beb5e1bb6afb9e232e0397370833db4645787a226248b39e9debf124b88a322a64fe2b2853ed2cb9f857f7afabdfde111d8aa81b9792a987fca28bb2620d312362c6a397f5de3e4c26f309a6ecee1ef9e3fff102c07dc997279d4947ca2b81078a01cbf7bd784e9bee4a6ac31c1a51ea320df7ba3c45e0433aa276367dd1d6cfe5b94713d50e3936de896a77f10c9d8e5207be7201af70b8be65fd011a3eb1c30b89647be491e99e38d7aedcee7624aa92f51ae702456afc1dc09d12833a8bb848f782e42691c44b9ab044b92e0985a461440af6b03fc482d1c3418b5a650b853287e9aa34bb8830719c89856516db5b084f267500a52a3140ee29e668655cd18008ecdc0e44ad55c990200c9c7e31194c4aee3f7063933a158edaf3424c0ee55844d6a6ce1820b69c65309f2f1e3c27e5230de2e9988f3baf7cc44117eb6132537fa3ed3a8b65b08dde6a479acae020be684b2c00f1d9c0801620fbcf67e476c1192e508f3198ceb50b44ed04041518141bfea07332fb44d1403a94246ad2f7300084a3a3dfce4aa26d462368e58729150ac2a84a87a641bbe97cc711baabd01005b5caa75283144143794aea5a85a4cb931a5136edaabe05579260245cf5ae527aa54593f878a1e1317724c837e0583050b6a244ef83b612a339f6e381a7460e2ac84aee6ffc7689d4c5c864b19c7416746a5a9a8405d4404e3a53446003f9a8ca24e066930bf47107542f4128a31c77003695691bf865c01f1bee6f516c465a8546a1bd5753ed06991e21f0c03d4b0bd3b0f6ee92e4bb6beea6f1ec55b0a3a639fb578d62a7276a111599072cfaad7ac06d19823c23126cc55865ac6ca59c320be76cd1423a1d0d363bb37947b7bc29bf8de4a12e06d823febc94ad7d94f132f27f5aa05910bfe545070e51389c3f7bd7cb42e7164b92026026701271b9034beef4d2756aeda8a96a141a34436bb431c0b8b3c1643e9ac531876c2410e301e63953a58affc0cd35553cd063c1767a1e4854f71da5964e20eca13b858da25cc948fcb240e5cb89643288d75a49e0b6276edf7642ae94e87429006daf007d1e472d0932d2fa5002a02fa53c5ff3a06a08ae826199d8a4e420d52a7c9b7e43efe89905c5456625aebe2a8a979d15912f580dc6e26ca9ffc19aae322d3b3517d43d8a6773292bb82b078449b5ff2cf82bf7dc85a394ff57947d0ef4f4d32ac0664a1292b93c38d5722e4fb54c8a035290d34b3b6e5d520672b58f1e507f3e5bb4464bfe8362ed243646b51cc3cbde745df6b447c8c97355ef10d5c916674f5291a876ad156850cba057a0b2cf32da33e40c9a4748368e229b5ef036482211e9435e811f2d11362c6155a3b9381c0854f13ff0886cf48b73c0a6083dd26cb49e7d5eb1b3aa8e0d3e484bba8dab92128d29b8130325853792d0d7160e0587ad7342aa39452e310113491ebf4e4c897c99f7a095ec850a6b143a648633ab58c5c085b789085aa15e5abd1579a5588c66a511b4c11dcb1483c9582aa137f3fa603808c588dd8c77359a850da2bfb03c747c3943f777f410e8cce4f8b7f369ae57bce167faeb9fbb81e49233cbe983a88a1e41b5eaccde31bbcf9b6a7f55d15055e79085565e4916b3809ad3049d0ecf9c05f181568c32662f483b26da4df7bcccd5c67997ce6d0035b9b82ac1212356fc6816d19f442534d7296990328659090181c2473183d8ff03e1484cf135d229451597309e731d25c82c1cce8e75206ab304e1e2c6a0461b592f210e6cada333dde1c7ff76e27fc60d817086158388a421bb4ea3fa84c6ca059c620742c8c09d68cbfd189662daafdd7da497a5dae45e2de23b5c4838b52bf9ad367e87c6141f907033e747372fb7823c8b3aff332f3b04d104cbac1a91e35272ea40445782dd310ab2f1112a4d70c74cccbf43e840346e84734212252c465217e1bb1931e7468b956227e778ec75f7f1c51fe120a2648e4f04b9d4cf00a32e503e59fd3e4fa3a87775c4bca69f32a1fbcee6cf17b26df018d1e4137b27619cf5068ea580a1b13643aa1e620f8ded0b76b1c75c64222c73711c806223539c8b34dad9fe7d0b4b5c746a582e3f83c6a2ca8850bb4694eed682a5af05f2fa412bf2b6ea287a1aef710efdc5df0f81cf564d88d1d1a1821de123af7151a760abe0081c8c53971fb238ec8d4ed7fdda8490f67abf6fd508350810be3e12fc7f4af618979c951c5cef8c2541822f3e929494d6c9e54e886ec455c40f509b739e29dd074681ebd5065b26002132d0bc5f4f70e89386fc347952d82a1f0d7c9d6663b4a7a9a013d338133eeec1ac02b026be7df1f1dadc4cb016f021bb2d8887033acc4724d70529165389630a15e179ca8dacb2250b43f4a2f87ce1e9eb8d25dd57528efe798b1cbbdfe5a5674bd29d09c5ff7c4f07ccaa21df7c6727143f3fa8f49a5a9043706a3e8ce9110a4d1e68a7775f884bb6d4b5fd8e9bf7ce22b8d25961526a35be8aa3b61b70b925a1d9dac884fdbbd7121b86646a2709cfa0534e43ee1b457ca3e14d2249e48f5d96704b4ede44441218ab09c029629466924aecda092a69adc2d53f37c13e0747874fae395261bd6b666f6f72497942bb9cc6c3632b75b69bf0867f8bb8e34eccd564d3c95eaed52c6bb08ead328131b9bc99d32aa23011af2aaa41e86f181ddff23be0a8b572f7fcaed5254db0b24c3c6dbcbd36e4dd02be988505e0a62ac802a33d8519bd70464205dd84f5b3c1315fc10560e13efa5868e78e39022176ad80d0e4ca4901587459224b4d1e5d08316763681f80543500601746c5581dcf22ba799a21b9a0c0217a06fb7b922f80c7523b648aa40f65210d44b0198a1acbef3b80b559a12d806f5bf56743431985a8b2f4af821947493db11d652a6e147ebb68223873050bb3375990e467e0a01f1b6c37d92050f8aa68dcecaf1d6070006dbc1f663f259a70b6af5c1e5bd30bcbecbb372066c0fc4d065c366e53c121dbef5ee2a846561fe2d7c0bf61bba53bec086e4ce3fefada6bfe9da8be7af0bd5806ffb75845b13c7710c445ddc439ddfeb6a268c8f744487cba1b1659e3fe2c6c86b1c3715a6f9f8c6fdd01436a2e3da3029f65ee8d2afae8de639d73f7699be6a7dd8005879ff02f5246dd0e020789c3d5bce894389b68f65ceccb855a6050a66a2cc4742798ecd7bacb801a376350fb66b875a8e9b8720a8acbbd6ab01b917e020447e84ab2feaf04c2e67804bebf7d3a99cbcb4af17b74e07a3610b352c454ef0f441d2caabd368f6934e113540d3e7f90615ae889a25c98df5d776434f127703e47e06e0fda2bdfffcb7eabc72b57b8a9b5ee52cfac2436fb30ab2631af5efdae86ea8f7658b66667e1059a8e3997d20f624ab9996f661c298033a4ab447c93b4ff1ed9e7fe7facca74cbf4f6c835becb8a98a35d93ca9c087ecdad811b8d03eb5c945fc274a61c7193b3e6957dcb8d1676d7bd4ffaca96f6b50fd0aad3fa6d558d22d9e620cc937193ce33aa5cd5e9a91ee6739f19af43aaf9ea6f457606a0ea85a40347340373b9ce2312e5e9e418f490413543cbf47cd27de97fbb164eced61d86edf0cc50bf912096626cc2ec4ef27c8b067799c19e68df42fc0f3e34e47112227d9531cf015bfdeb6e2297257a7ebf0c6f74d7c8ff0221efb854ccf67f9d42e6d60d42f30c5c1914f803ffb22091b20788aa9fe83f2d7f4e2b98acbc35c3fe00d9086ba74830191fdf7cb8b87347a017bdb72e6bc7d38ecefb458583c398e7081f6f78f235f15f93ec59efa840eabc9a578df44071a048c8efe6123f79dc28354107e258264b38da1c76cbf3fc570e573e9ee6d5c7f473e8773dd75da3fae34be6b3b75b6d5f50d6fbea6823a3afdf18e35ea3f8f40ddd988cfd76f6f43f73860a6e31efb37212bc02137871b260c68f029a0a08c1dfc78ac84ffa62c978590eff15b709ccea7e51199ca68d8f51227c872572f3b0f3a206e44a5dabda91ece390ffcdabed39c9a804de6accb5bf2e50b3ca6c7869282b0dbaead0d3fef5ec08360cfc3e4eaca0bad717f25dcb920a5cbc61e949fb9e7ce3882e6ab3281cc76ae1c9035ba3378742396eb20a1066a4061a69eefb9d5e1b4a7c4059942a13479020578e49e31f588414f54c002d70db1b574f1100188cea350cd5433d1826157b33fc22cd65fb7bf9f4d016f6108c990946ed619c8fe56ae6533f0b1d9aaa7b1e10ddecaa5fe54d94a25d86d7855b31087aad40d2cb167cb8cedeca4e33fe3c37c4f0af1ee900e616f8f4a3fc7c802a41585a2b69893d8d413966811cb51a4c85b85e945beded958bc8a1974020827f310dfce74ef39181e67a4e11f136629bb6569f19c05b764e3d8a534f4e2e65fa67e0ae75069730ea4aea6171220b5dcda15072dbd8778934de4877efd5d1a1cd066a41c3e293ad7c1d88d38bf42cfa2b139ae53ba755fd42b2ce5fe5d8a11d917141f82d8935de7b96aa6a7815066c28fcbd29db61e939affe5cb931cf64c159846e6b1ecc79b21b5164991058874eb1f6158405757cedfe9c1fa9a4f13d8f7fb5813660df42111d0281c6c65d28fa9e508991db8d22275e6d25777d119a6f572ce5aa0709c853e42ad3d9941367837583298923e1944dcfa79dd51a51c6ee5a43a2ff2e4d8bf35395ec1605e9e6eedce63f6b853d40b9729439f473d46c743f6cb1caa2a87d4d3274a1f7b9b85e2d7ffc50445271fba085b815616268517f8fe188364ec1727f870167e0aece7d2398d37f3ad1f801cc5f7e4ee8a04df6b4c9b5e54356b6740fe5898c9cee8246643ca2356b9234261d7c38a6afb19c473af0b7fde1dee351f77f8a08896a87ed23a98ad592fddc2386c661feab02a374ba2be1a122bcef4270ac4cf0be3dc0c728515d1a977b73e010b964af39fd7bf2370b0ccf3381264f64ad747a5b749aac2816e4e5cf3bb85e5b06cf27bdaa90ca81b03dbdfd289601ea1cb858219691f16ee3bfbdc55f3792273295db3360e6289c74e6c21ed223ac13fba77553002f687c39149ac481c0f03ae29859d62e015c654422b87a8c8c532434322c08ab1bcc91bb5ade5588042931a1b15fcbe609c14421df00c5ea5e3833dec87b1756ee4f85a47aa3d869a7315dbb4671ff27ea7fe46e53b8449ffa6dbdb02ffa5d3ee107d685d4ebb48b9d7fbe5b4f62586330baf3d3e2aa00d13f60baac9e474d4ec7046f35e5b5740619fcfe0abf8730b96ec53ad7377e2c5a37023519cac82d86e8ff6ed7a5b24fe2f64c844e06b773997d3d88a67ae989d32c24980308b6597bca36516f244db51b8c8c6dc08d6d72069f74332e300e9fefe1f5170cec8f85eff9697fa7ade7334934fef5e2db8cad04dbecd17179636dadf867961fb7fd6ef1fc3980a621898e89200f69ba33eba2f3a718817905b18c8abfd45a7dbbd3d59b31c4659f6e16232f0d414e844c56b460faa51e0c3765e6e41c7e5915e3da38f5389d2dbbce27e421ca583b1c2c53a804085a82101d483d8b602dc720d6354e3fc9811a8dd439e8ab99a1e345ee416d121e7d619c81f4b6b5667273cf158fb17f580124afcbb1de198d6a141ae5fa41b4e4c5652d846d72276362959f94d00145d8c50f9e83f961383b79924cc4e31aa30d05fc062b61bf53c4c9bbf505f418b6b11cc661fdaa45dca66786832fe4be79e26cd1d8497f2f40c98479a1e39ba6b42e06cc40c9c64b3933527d6d78c99694edc00e3ab349e19a298971a123b8a28107b59fdea5e722cc090ab84d9bce27b27d1ad7bef1bc0324c1ff618cc5a3dbe1f1525bf9131237830b643c30d25dafa62fd662a2bbeed82e868fcbd1abbec0cfba4aabc11f93c2421727aa9be1a7d495dcdba9cfdda891eafc9f03b52187c38c5588b810c58f1048c02c37f66ace8df883487e847b116a1ebbe2461383b973da95e77e3974aa8aaec73031fb9ccbbfc278d4136e83e7082d24c9b500ccee394b824747a755a4b7d64cfe0b7c89e1f6fbc2b5e5edf0fa35319cd743b126845a394cfa4440beb3df377a762d5238aa5a46df14a5f23c6779d94c2d5748f21867293311187229dfedb91e78031f6812634bd5733f8b0a2368a9b875c9be95a79c9c72603610309d80f71ba0d812f4dea22c5f02d00ac43e4326f6893c5459279fba62da48aa391f8e13b1072040e9db2f3596c29a86ac6c172f6072cbdd2143a221424edef22c3c7bdcef1ef1f6d4825b11a0690411dc32e2956b9009a4cd82a5c43ae019d8d5ae74ba540b3270962ed9fe169d08ba41b69194b447fecbc3e96f2962ba62c20e8a38e8ad3627a907089cca1c70b3df9e130ce185337573b1198547582dff1e1ef72c373eb1797feab098b5d894b3c3c22a462492ec0590e8bb0deadbbb696aaef12522ab08f2bb2acfcfa0af2fdbe5ed84c15158c2444c88646ad0e5628d9f7587f8b44cf04f66b69ba05bab597a71a9d30fc40242310ae16875738eacd18e346d0c145f9418779a70db893cb3e24f20fc67dbf8719e94b43598cd19cbfbaf9df8ccf98102b97fa6f0c536e4462331db5e16d7b11dfc91b67be33eefef5a8b61984e7e0fc6c08d27b6970fb5be3a86e218beb0426519527aeb891dee24cc344e3249593e852efa5d6cdf39ae04741d27ba5bd811e11b396015f6e827413d4a2fa2bc82856b12e19a7cf9fa445165321f3778c3205f280679938dd6ad0471391b1f59cdab5e13257346110ba5eed32c5c1c00cb259970dbd117c4dffc0fbc8b1f8572d2ea14a1854426e20ce4f020cfb0e2beccec09753fcc9769c89a65fb0baddf6017a9a109e49cad1fa21e56094cb42610ec8effbd9991e81cf93f029ecff9e817ce8f85dc27c7bff0a4b016bdd7d9f9e9f13fd0af3bc7c9002c1e8534341c153946f42d7d771bbdf6f54ad0b46e747c000022ec3a9b35dfa0cf8a7a178fc74d3d83ff32b3d5575b781bf758db7f6178b08afb2289eb67fb5cec61dbc1abe8c2e1d5fde11ea3e83c94672fb2914239db04509548e6a8f7abd5db700e694efca84742c9c2918cca95958f86a85fe6bc59e1e564b435a4c90d0e6e92667fc9aabbba74d83f93b3b0d0d3504c4b6d31e3fde7ad370042c6f40608428a158221e61505362615fea4c34c5e5aa3f89e0bec16c87f7e14b5804008ed9b77b51a38f88d8fe69b3bb78fc1d0b88febb3ac026308c0900b13162ef3ca60916f9a1176c8b0c27faa907d19edc7b95633c2ddd00aaa051c78844c4f8eeade50ba60885a9a51f07074b4bb54542ece013335ee3fe161182181edb6571a9f8cfa596499c56769600a9298365dfd5afea5d3498f4649caef173c14b04fcde692cf1d89e03b56972cac55b134df190ba90279a5ddce9a4f2c463b18c636e073aa992c46ec01c697c6e4e96a19e1a5175a75962f0921fb4758969f4f6bd22386c1ea9af321786e50668e2c5925520c271fb920a2d1017eee32b5c0e86b0650228d75672a1d46f8ce660e49948ba45b25a6a4e33b95e0a769c6609184b0b3ecbe93564194a158e85a3cdc05707b077f85abeb24b7e90b8bb949351a02c0b5f5079ce9a0a2066c101e90e437c592d6587439fd0e610dd028ad3d47522613c1e2bdef23b8dbf6d5ddec8cf3ceca498f00d3584ae854d76e28cbefb4dd0f7ec79ccbabd15c54bd2f1cc90f8a5ad8fdd7a6dca1850d46cfee7092b4d29669dff55fbae1393c8ae680a343d003794cf9a20f26436ea2d8f285766f25b892a27946f04fdc2d15b8ac627fca47db72abd21841fd22dcfa9e99335cc28388bdd78dd6ed5b0af672ded97760b3669ec84884d0ba90b740e21dcb05821fda883f6982113f8c1cd812b3623fd1e393af0e868f0830bc3f8fe03cc44c8ee2c0ccab9672ff6ca536ef97202ae8fb0b8d29fa7af41b6cb81c27a9147b3ed6009e879e50d64a4886945f3b2624abbfe5551f5803506857a5e6e1e7617441929a8ea5ef00df00c471e5c6ba2bb34635e8f55801159ae985c8c5f43e47fd6f8ac143d2893de591644fcac99335faea3c6947c6fb77b209eb2dda997b8dbb3c303e0d911859a44d296e931c3ce2ef2a0919271c86670a3d0cd128133bec32f83971a0da3cd74f72f82436b94e5232c520334a2eb6d4c899f99ae5a2730fd6168d25d769a9985a76be60d0bf7329c48a8281b29e1c5bf8be2c2421dda0d01a3e127a0200a094bd28ed3f2de53c92185852de6eb2e747c0969dab21e91beb1cff2874a5df557b4d9a6e7e2bb65920cbc7c7307204228889e0109d01da458bbdd5fd305c2b35b7165330d9868fea1f14f3b246578dff79fdcdaddf21ee6ad1cc25b341bebafe5427b2e45a16296dddac66d73433f5392977ed3423e83c9d09060c35656bb84677132a7eeb350b692f318b4113cac7618607fee8b9f62a6f59ab1f406a6c512bf688e497c1c4ffe39e4698b00fa822b65818d25a93d30203e5ae3db420429d010cf706b885f87e9975211aa1753086f3595583cbba575770792d8de73c9fff229e19cc3f19fa86ec5d9f05d09eee3bcdec88aa53a5daf23977a14cf813facbd4b34d6101cfd12399813a7f3b83046d1b3853041d76fa5b8bd6acffc1396209b356689226c9b76abab9b3a407856fe20c4fc940359f3e61d9eeb3dfd49f1e2c0d308c211112939cd519e1817a3a307d873bc2a0014fa2983cdda6e50e3cd241811172faaa6f28d8dc6da066362a85c1524b15fc9c6446317b77960b3bce06865fa4623e708a96c6f1b4679783e99ceafa27e360467f12fb9f3195bee42ba8a205d02d92311ef33d863acb9c86c0364bb587ce8661ffc14ab00674df0be7d7fcd43ba7b56f3c6efed2d664d6c33b696ed59f9bb14d6b69e25fc91a9734229db04d82772b8cac05b3ed692b4f2bc12b85308860bc09d93e6fc071832ddc2fdda757fa2622e28fd095d0efb2bce5de4a727176075b73d395057062f2a7f91b3b5e3da8659f3c2196763d1c01644d8ec1e2c236ebbdf8274cf5a7f89960ff1167be1bdd01139cd5988fc9792db88aabd0eb982ab783bc27d5c26f9075f72c8f4013a587f1c07ccae6046d43b058eabd546cd47d3397e5f489d11ea7c270f85ea4da4a2fc28da36a1725f1f1be61d55efa3f479c5672b16bbf1896776b443dfe335c604f66e28e278404529620c2d0198da02d047b7b743942fab0ed3ac435f08b9a5f92d12074b6487b20441047e6db13bd5cf3c6fca0d583f913479c5f1e928287f639dc57003370a1cc48918cbdd4284ed2f6e01589af90ec09b7714aa3ddc35e65b3b5f0a6f9c7d917ed8c489d5de43fb92877be88c41905c4fb8ef229faae69fd0c46f5e98e35c31d53665761a7fa9905eeaf57971df83f34bb3a5e6ef5f7802e4c4c6bc344fb397a76085544905c75bdff4a81ef4ee0771f066471a4f34f36013ee32e8fcf9ff598ff492ae3ee375d85a9220d8320c5bef37187e50a26ef42ccded279e99b751b861cd3085b976117d107c6fb35aac7fbcd3befa7ca2dc5f231272ae94c3553b86979e5ced40965ed1f188480b1b3bae85c0c75a642f93d9d2592ae1bb1e1ad457870bcf5ad38b5a0688e148bd2b5d0237b824e3df3efc396806abb26cb5cd51286cac31ee607880bcf8a8328f29bc92b0cd8d631eb6f3053feea2dce1a14b4f677a9e2e448dde718ee64fda5daba10b1f690c8586e8a783d2c26b7f9fff838f4171affe85e4289c8255b66b16bcba7bd18b77c04673e81bf9bfc5ad1af4085ad2eddbd93396183793d57cd94b98f802cd036171f5407a914e8372aaa322f2fdee5ebcfcf3607bf7d07c1d60574284be693a5da1109bcabe84469dbc6078cc4189bb0be64355e779637caf308f061b8c855e8ba1ac1bbda150a4135bc75338e2a6abc6d776a8e3c5957acc6bb0bc22fda319d47ee805ff47f9ec5064a4b74c169bf45b0e0a815a360bd5e249ec214dc405041b1f562b816c5253704b494fcb40d65361efdf37e0d98477d2b82b01cf76c83f84abdce9d8fe299d34621ac26faa0704feccc15f673ff57bb8437350e7cb1cf4af5aefb8a410f37be3157f222033704e17b723a151c3e42c692d7918058fb3b5fa9535abaf99af351b8a2aa58f35c202b7284bfaaaaa153fa1331ea0c6582c696010732f1609c4a053652d8f7bafffc9bee2d22695f7ebedd486dc07f9cd947b972b0f1437da0f1c85f21c21da6d7126a5475a9f765b0894fd5c351f7eeda7a50dbe78fb5493fa457ec1e31f3dde4fc8fc9d358dba90a31ec8c4ada508fa97b95d9fa23fb060ba34868fb2c3e9e531c3b7ff85a1218d73da4024641ce37405a4d4fc107e7d806ccefc49689844edaa0f7e1c2e6096ac4296815f9213e423adea4848dd5e032757f02aa11d429697e9ae4998faca77e16294448c948f27237e828bb09f5be71f10d51d5883410bce0f0d79b2c3305fe38b90f58de5de2b16846c113ca8644ec8a5caad3b839bccd1685089871d139fa74bf6f31f5c7caed9bf9927b2d1ae7ac68daf9590630a3e55543b4db3855ee95f619c0bec39d204c42e7783107a3d2fa35a2c4b4e861bf24a969837b80182159488e30727fb521e44dbe9f7e8a022a8a0e197a8ab4d9f10a03135deaa77564eae5df51173a61b15a3013f84edd97887cfbeee54bed46d3db932a7e7d91ff9ca9af9d159b03852ba12df6a1b2feb0af1346ea8e5e2e8c8ea09a639c9d73f43b4ef3453788cd1732a693cf04ecdd8ee85d54c89b9c2275b75033b6b019d1ddcceedeb11ee73c4da355fa963a35400fc68f7b55ad7fb2275b7c2929cdcee98c9dcf7fc009e4acd0fb1e45b36fd69436e746025a5dde3fb749c05dfdfef340ccdebc9754e62f644734bcd7791b24c6d8eacae6ea85d1cfde2623bc9645a726b839054b7689d7fcc5e666b47d460e2f9fb11febfd7abd3f7af872a07eabf9b5be02f0033801e94765b447068e20593e293e0f162e5b0ee56657743db804e8e10ead60e82ce2270a2be5abd3e2f6b7e8fb7fd5c02de5720e05253f9974392ee2ee53fcd39aa274b98bf43b47ae8381a3033d1fe84fe8f0192ff4ece9b83a011a85b093582a1f6914fa3a506077289733bd1086c83a950eb629d78b898481485a45391ca4b396ff76a5cbc49a3909f265cda232b8994dfe8649d386016e03d87b592ae06b609ee4c17cd8249756bb5f10f0ceb1dbdf114a8f7e94f0fee1086d73b1cdf9cd2654459c1eeb249f7b1532ea3c17799001edf25ef762b3e0ccd7a53597f7606300c4afdbd729affc0db140330e80d3325cfb0bafe1378bc74b958c67e5465aeac264058a8e34c0fcddd6bd580e64a33ecf0909c16dacba48ac5a3aad04a2768b9139d1523e4b023a48c52d4220294488b386bae5a851b5c29cbe86da01441ab427b261b14476e2125979e33c92395c3e6921b437e145ce4040e01673371a7e118af50251270fbd059dd99fea849936705bdd163f363da876c31f57db79c557fda549eed794f3a49f6aa812714ef7ae50f4ab78a624be684edcc4419556b7260234859209504b8ef325518926aa14d04c5be2152641ec7b0da021f690d29ec7a9cefda25254ca916fb534f6f02755cd97b55e067f1a4e26324981d32f3671629b77834114a6ae3c90027402b6738e8084c0a0e4cf9f651733d406d670ddb8e0fb9c3dce0edcc59bc7112b2c9563a31a213f5892def04bda00854b5fabd0e487a03504a4a144bb25f69d5efb17e918d03f54ce8890b08708b177efd29e42a1c7d9b6847f332b80c9fe144ae1889687a0ebedc240810a463a5a25569891fb4374c160c1cc3fad499786105835f29d000ffc10613df5f3177247c2d1acc14b0be54ac2635643e46c45f6e6bed45b3247ea5bf2565e6a2af34789c643a3988a87cf5d0e9399d4eef54e5619518ba029ed6795767cf86e554fde78c265dbee40b7bd6fab7e95e044c9a71da60c88b41f71c99633b32b16650cac1a3a7ebad4cd29fa2deae8ef3374e05989d756247c6b42f6d33c1960cc28e76cc3603982db0727bb51211b0c302e2b55f9fa4ef58709bbb6fbef91ceb9856c6a7d2de4fbadb424dd255cbf57f9dd4dc27e5517cbff261da90f95c06a8ea85fe156064dc1e6fc7c2f157f03107889d713e8220bfcc838315bdf1aa36837d1a77003140b2cafb5d597e00297b14b428e0dd877fd4f31f7b82adf3f79613aa42a9b6bc804531fd717f4c384264816abce8ec00184e58df9558574e185397dbfb82fa47904e738da4a470fec5211682c07a43408b7feb1dd3b0c955311790f519f40ae02fcf2dc357d0e846a9b65c79bba07379b64649ea284328db3f5fbb93c17c865fcc0757f63d0345bbd3d537dccb01370d6e75f4074a7b29e9afb5c2e66dfea0205f2a86a945f2ec378a349ffb138b561b02c662cb8df85441be728991b50acd22fb96327751fa68844b0fd3f878b92fab51e737617d548ff929cfba5936f1ec99568e9e9d3d1f5c618f86380ac5f480fef1ef5d0416c70364ff451acad77f9ff62aaf6df4895ed899c02a172e162312dbb8b40225ee7db0cf3577bddb2fe02c9c213ef2068665ffc02686c09f65a7fa3af48747c4b60fbdf7d00494968d16b127e34901f9cb8479a400e575ba1c95970aec830f94e77de339764ff622b2663ed6d851b4d54c587d658d8b1e4b3d6043be9e2a1f749b3763a1b00370066aad17b4da06f96f4c94d7f32facc10fc4e1fe0f5d2f7454de2533e4e126ec3c1e20233746f95b02aad361b5fec1ad61a5f9d68c3deaa108ce9a5a57f7432b539147cbde711ae24132e809f8056afff21eea57fb9b3d67b930fb6f8a3c6feb1a53f13b9feb10c9a1b64d714e15b139d1064f7d27af9711208ce06aa8218ff985781e453a86eca6f37f246c1b6adefe6416a4e3bf460ca3d561e2be0f0ced8cb5177c82e173f5f1e134d0351670d96f891fab0dd5d01f2ad7f85f315ed0350a702df08d584a43b3d4f3db2f5b277f22b9e44cb33fab04645b42aa927809bf6f655f49c87461da4b8b34d443cedd9702863749abec5b01f13d969dabc3248e7e108a7edec44d08a7b92c89266daeb14c3160647063128d747416044972cf1eeb1a46bd74d05e508a9979d3aae238eccdf0d8458efee3580c8d7f84085c00812d13465327f8a4c099f1f2788603835669856b52f7cadf2e0dce2890575c9c269bc8423d9f98bd192b3f92c2e7ee6eed98ff8eacf0186e7f03282e8298ede7a4addc786348dca651df84ec527d5962ca2d459c564f8cdb73c2245d65899176d81619d5430ab4ffcc1915ffc187c19dff322cd6940b7fa4669a95fd0f975613a4eeba1dd41405d5fb20e7cf74f9fa440f8de493322addeae7a03fd2212c4adcc794f8b27f582947dc4810468f027f653fda3376a9224c3f380c71ee978f148e6a9d52161c8b3a4d9afebfa531d255b06b327f08315ae0f52d00a2d5f287a0c66503275f047c0a4cb2306ee0505de019183df0f836d3604d30b91f408c80cc5464ae722f34ae6f0e356946472c947d13ee92e23ed773cd26fde42de731693bcf3aaa17f9a9f7f71f983c6e5fc72b3262756d3d7bed01d0e42c5fe71b5d024efd2e6660aa27382221865eb5faec4d65e3a1f7b0fe0dbd7b68a879527d486a0fd3b8fe1b4dc1d3ce8ff2e0ee7b29e7a69fbeb900ec2b803cad3dbe4cc8a02d1c08a7c7a13ead7bf78fcb60857cf792fc3f08d1214b1f0f7719aace7fd35dc4744dd9c51a290ecf6009304f1e002debeeaea43c660d9c8c1b9f0eda7c013136f59e4ca11c949c0980ce75694873dc7a9f09a7019985323fc7f9d5b4de0e0f1eec679344c7cc2b4937641e65e38395dfe1f6a3ffe81a6fe5399fe3ab5c14d8be5fc8c4e99def01f11eb54d1bc44d7fec9b0515ddc85f87d87e650a979f48bfbfcf7972a80e690723734ec4213ed57d48dd547d3e5ff38249d4741f9a9f7a2f1ec56161fffcf9ecfc36747a34bf167407e621cf81dfe08b81c33fe4a80d0108e9649b115f4dfe6a37ac75972c70d75630e3f19cd2b34e458b3d9bccf4ae6a63c3df229a460d6256173c4bd3887a7c8fefc48b932ab0e546caa4366f859fc695669023862320d6caf2977fc474c0a8f0a5340dd0967fb36b95be650d8c245a9d384d04ec36f0275141c8b0cf070d5121dbd20794dc1e9fddf4c506a4efc494814d0c5413edb47db3fc75d034e03ff867150f76717f86e8d473f8a1e4e8d4d32e4d76e0871abe8b125fc644e287bc43e39e23ba2376cddffe32d22ef8d316102c98a145a425c4d9aa31491bacad4b626d9fc5b75434f4ffd7f869d830d4fa068c8dcf0f8215b2bf2e9ecefb0bcf23a5658e83b59feae2522561d5eb38485cd5683d71fb3e940a29e2ec2bcf5d083edf743eb3f0fd2907140ffa7427c9684d0bc7dac4e9d4fafd893fbd80980198ad941bf17c0435ea4d7a5fe6a502b68577ca81b3d7ce24891ee3fefe0c4726c238c3afd4ae1edef9aba2f289e46f413ade1ce365877a5574fdb444a26e7c387ad6e9d78189df1a6e660d6fec2c4dab1af832643a5a5229957fa7b0ea4614355552596f695bb3d9fd31cc62088c2498c96a2a4b37d297fddf9a37cf92e625647e6edbd94f94da65c7511fa18e26c2a5e530e3117a0c4c8baff9c9a52acb30267a7b0dfc9d8fafe9f2e536a0489e2481d661a2eb517018d2de16c550e3519f2da625e92741b5afda38c24f4e6481d36a302a681f7e6d7176bd29b61f3c5fc480a17a61c33f89a0625c3a5ebd1e03c9629f847b5d1531a146630a67430340983402c46e447b9f33557f16a9408b1a71562e2b660d6b6c3b0dc8ff71617fb966c5b33213c4775a3224c93a8d23170fd1d889537fa6da9f93fa75f1a6cf3b07e81ccd0523594ec5a3e84c5a3ce53cc635e8186731af27310882e8b40e73c2fdd8a218c44aec1f89cbd230a3a952db19c0861a81b86f1336642e6075865d7f4229b9b272710a607727403d90554b49864010ed6928a51d485df9e3e7e6bd3db900c047431b502cd09b672d4a8561c09db20c6a981be9bfebaa0b74d671a87a01314f0b8ace515da5dfc06772d9d4b2d5b6a9b6001cba9f85cbf8e7013299fabcf8628882363e75cb3d9b4db505689d1e13083536d9be32409a9a19247767cbb9fe5029fb0f774d572002dac1cf5813fcad7def88ae2b69ed0efdb48f6b32a5ab44a8671e2ee027dbe843987983b0c107372fb01b011d8786e50afef0325ce1d4c8826a0c363ac82ec09f7b4d79718646ebc21b69998b07676529557214178057e79b553d6574456efba2a994c206de902ab7697f86ac072e402e105da019ee3593e0bcde78e39008ae3dbfb86d6806822a38190eddfe6872941c1bdbf3f2d5b4a358b1e8bfe268294319d7bdd4b3362a8701ad20860762702d81f745e1ff96e31040a1d5288341e4d91c6e7055fe7386a7553abd72b96c295f000e3402f45191435f883ef9f011436e385ee317e89201e3ff4073d46684311f4d3df464215efe384b13fe909e6e34c5ee675f30ad25a37bfb1eb711d873ff5b8e8a4d2447fb13a587be6e40ff8dd936c2cce2e6038f846995c1769d89e19fa5665c19d43d2ab07c1e3e2f0b13e3a2cf8c3000286f5cfd9ae418a4414c0c41421f5142c7f780005a1a2031fa7dde1e7eee553745f62e89b0a1bc4b4a72f7f4286edae8869cf3c307369531eaa7e73b279e26373de451fdb96af7cf6f232683c267a2415d1d0e35038f5daa19cba5a0b73cac6ac12a92f04b1141d69d3de36d6846f21e1ec79aecc35114226e2b65d2443b8b744da95e68bc5d14a7d572ad50f133e8ceaa5505213ef4c2abcf3303286e9cb719904c0f6807ab800beb143abde8d108475dfd49be6c107496c9304cc9c3431fb7dac6a5b64a9a744ddfdd0c1ffc1e55c86935cdb3540acefc685cdb13e49acd09b5465f23b525d23fe4e5e3af7a8f06c62f6f5a5f3746453c4e3d1620e24b23877befd12c85e45bb355a577c584644ea0e88e33163c3ebeff9a195a8f3859741b7d16c27bd64ec07c7366572410d0343ae798a739a819f8a185caf421a83fe0484f752c160a1c18e849f4ac82010a6fdfe9da3198dff14962817935fb4a6a167e00306f0926a552d80fe54de0b3a8ae264046c0d8b2c382eebe9106ee63077885c960f5420e9570bb1ed799c324b8c63dcb315d18d95412d1558fddf5392bfd9dad2e7c973a3b61ccdf114e99c428ce5f8a4a3072d4eb26f6270b48de7be8631f843c8a21922055672beb393d1b1cd84799dd0764c3b80db58cf97ae501b2834081a11c6ac74abed1940c311dabd66c280916c5255f7d8739a2b62aea47616667287c7003ec25d4aa6f6db79d10148211e6c31bcbe1ecdbdfc777efc6acec525823b8cc626fc54625cb7985fc8987e706624909126e220f657dae52bde220343b92597aed4c87124f97198ff096c5ace4196f456c13ff2f9bfa2038594160433c145a101b709fc0796f85fd75875916998bf499745270eb734536b03ca2ff0af04c6aba46c88e0575ae33de17acd5d16385377ba3f47dc1079401d9a9b0452ac461035884944fc0ae2714798a939c04ac08bdfb9138490b422582c3eb37260e1109a7b24ee625845eff01955b98e4c61fd8f54b0a7211ff0d7a1b17d60714888b0798732c091115d13c0832a4424e878675e1cb203ec15482f7ddda48ada4854f6edbd9d3f890897cc8da90809c4c51504265664aa2f4901f1378fbbcd0abce68fe09f0d3b1bc812173e5e9ff1edb34392571e9d69847294e39ee62688b00f0a4597754df6b7171de3ca7086e99a947bac578879a66c20f721fea3162f64472a6ff59614893d38008fad45ce9b2fb6a272743271c7693256442cc4ab84d43fa361a336e4431fb310287f5cd3a7f0b7bb58249012ad18103d0dd749c6c3e40b17b9cd84414a4f1f0feaf508468eea6d96fbcbb7acc00a2d028828152bdad66766e2b803112db121bf48d5de4b22c631903183551c900312b40c0b8084957c78cfa970f367b0996921cb76fd1675ebd38413994d50ae9393c52c2b844c9f115d79a174fc00ba0200006da72bf64e075a9ec6581c50110e435f7710d2dc01d30434cabcdd3b133d93e215afacd943bef5d3e0d630505b3a48c4edbc3e5d3543afe6288c770a81afeafceb551f23f0ca098e82fa154b4597801fab9447abf6636a2938122f0004fc11479fa4ec4448599d8d5cddc976fbdda3ba67ccd426ec58e67986d40aedc87a6d1aa6ff1b9ded3caa5698f65992e63f63f38890904cf782f9e4f69c7eb0c2a612089ea13b6bba951712874b91f8c79567db7d5de4381e2f9c03b93d710cf982b6d0c634ce498672c4af32711186180144114f187cd075ad9c41f29946fbe16fbdfbead29e143020c82053a38b974370ed5363153dde2c238f8ef1e1c0beae076a0670e4104469b530177ae9f45226e94ab56317a51e0ac94133b18e8d81a98a37639521a8716d20fc9b8459a2cdfbd7548150f5d6ad7fc7ca4bf0de6a32a71c71271e636f299edf2de0ab7f9c7796e0638a5706348bb85186eca9d7d286b5e0b08c64f9ed00cb2eac478d8624d5af5ab1af91bbfdfb27863ee4cfbdf36dda881a2e0c1b2a2516bb348a1cd57d4097d913b1ce3009d875429efb963186f3e983f79896e6ed5d80b702d454654fae8df291473af19b0d4686e5fde27ebdf92928543b8b849459e62835520c2458a206457c07d405c437ce8dd3a95cc20c238d4ed1ecbdd8de542ccd6b52a07e767d0e5853e025bd86425ed30638a58097d326f2bd49b9113ee6b99d898197c18d9eebd89814b9b4303237205a45e4dea7c1e4cf960c63c176f6e2229ad0a9701f122393c5f21bf0ad26520836e68882367e3b0576ff919f3a8d9b0e78e41926695111cc3521ee2b3cc54f104256999bf836394a79915844bce04ffd4d1c70c1c18e05d2175b928444fd9055af830e98627493b308339830799629d5d063269d97813776f8c0f9d26ed5b58b7ad1964c3570135936286144ac3ea18632d5187bc1b24120bade9131f35a10e0698412b413ac455eae25e26eba635c69b6cfc4b196dbe7536aafa5cb3c808d1e2ca83957792057ff766e3f3761ac3ad2b66d6a89ece4ce7c5db481032ff235c73b19af8fd5d57d4067cbda2d22e74293aa98d5f3f495403da40ea6504ab64e38d01815a7de597c997049f05a90ac5c75e820059dbda65d83f4a636236848cb181d705d215e3e85404b743176b6fc387955327a6f2ce6c4e5451b4b6f4b4104c2418fd9178a210708983b39e886a6e423f96e20029e050fb788087f27e4c6c7a998a9583aea5b5fb869c2c7f030647451f68d4aa1938c351716070118f10de231836d9858a27070db28c8bc608e6b3bd270165f318c221845aad273389c28da12d5a5e941c4189d5b2f42d96d1b7b686d242a12ecef86b5fa0a459e4a503ab73f47c96e0131af208f332d1280fd004794e333e70c2e846d96b57e44ea9b0a82b354f0f350e496011986068a9bd7ab1904d6ba332cd0086a7ab74837a129227dd9749c043b50470a6bfe90205554fc917604b11271657542aab349217461862c7e197aded9b246bb0a243dfce27b5a5c561d1affdc1f8ad9a2dcead2b4156adbcac0e758d5ca2db8e8b4737afa7277bb50736d201b30cefcd83ab0213cc8ca1005ae068cb6872a3333f4a26da0fea68f96c981b7acc15fbfedf2c138ee5f27e647872bcb451661e401fd46c7166faabdafa57ce2f22a8c3ae57dc443d6ce892a89a7dc775675efcb523e2a5fc949a61e0ada8518dfe0b5837e5cb8de67a0eec3f40fd318202f557382f37d9ff37ae13fc2f3257ef55d63f8b9bca8ffcba92bf0001d5b95f05a15ff8fcf57db807d53d58c7702671792cd816892fe2be356edc888423f96291b82d572748e51012ae62a2078ff9246ba4c7c86de27643ef171791cba2679562303fc7f9f1e843ecb8ba2cfcb676eac10e33dd04f7432672f3c601d97cf0be0f73fac3f0e63c88763b8852f5dd02d3a7b53fedbee3e9fd007e9404946811998b3bb62ad420ed626e9e054d60fedf76b5789b8a4fd9bd231056ee8432286712a7d134459c1e9e9d5036512b8276b247e088f832fc3335dd51e23fa039c8a7c1fc329ffe210a6d1d828184c77472fcb494009cd6f33fe41c834bd5dbba69ff22c05b0edfcf93f57327fcb48316dae08445780d97fe5a9fe19bf662065744bcc071985383f85d52d2889c63d8478198bc9a7b09503a97bbe2a709747fe9918973169ced5b936da64a2cba9f2011eaa32322de2a7817ceb221c05e9189587f920b8ebb5f1d3576fe56fa579453d78e8e8e8b8c198feac99995c1f0badf2da076194ade71ebae14fe0bc0d4f8969f965ccf7303d7d1bd9afc2d1c246b24e41ee249fd8e4c62ff265d38276564a275203cfbf85bc273cd7436cf98983701c3ba785ddd2ea76456cc1b946a803f08108d04665bac77eddf63c7898e21a3dd13503db1bd75ecec6208e64188fa2ac1fea25af54522e885548e0960ef0099377274ffa47d0db464f64f26566d26347fce3b5933f45aead0e520c66206055e2cb00301489746f04f927f3d75cb4f8d19f9815d9d1a7633cfe7d4cd10340ad4389f6feb84ed33dc52105e0bca7df38c768e84b7647d8b623647c35546dde6b0a70b43f31496e351933b649b009fb55e5f590fc827b8b34bc5e5e58d17793eb277b89ff543a659aaf90c3d1bfd0e3338fcfe6eeebe9648dc4c49648100afd1f011a7e7e198f308782d82fef62af70bb17ff6329bd2fff3c9796c96abb7faba5fb7ddc57b56ee96cb9e220f690bfb3b3f83efe6cbe2b3b18956fb05c3ee7cfe0d9036a437cd17c37133d5d54975e1aebbcd1011ccedce7b3f68edd1fde175b543f178f6fb875eaf4ee9331659581982b4d0c129147d374f0d12ef0a839a4f53f17cd4969ce021ba2993e7e5e1c0300e8787223a6e8fdb5e8085b1bd89ecd38140babc088870c34e6afcbbb7705d19aec971aac42c4dfc2a2d08578818511bbeda5df9242ea065ac980c0f65a2c3db7f4de53f6f39c8f13eef90d850c3a55424623c397aa149b2027e61687cb515e736c6108d93e5012f51942d05db36ae5a47eb1a18fbb20b6ff99927d429ff9e12cad10f2fa89a509cedeaef36b37608ed0d5ed268c5bbe009d6efe05d71555d4da875ea50e22fab01266f0c571ce6070bb62d7a875fb7f2669735fa089b220e6abedab25c35379289eb8cee8383f39f68e4face8b5f407d48931e211da6f2d6d8bc4b4bb5160bf3d0357c381b839ef5be56c2f2273ddb09efdb40b8db441930e3b965403856f4f7d4fa4c0c7e50ee78ab8c51f88fe80f857b377850e2136ef1f415e794c1dd1b6980f11b65421721c8e4f5f0d174168780e07fa1e19599edfb0a87b5d3ce581e95de72e033e89c15b13de4bf997faf8dbfbd99b8efd20720f76c43561e6cc6eecf4331c9508e46840714707f147b506fb8adf643f5d798f8e034c2e5a9fff7d0470d6e409ca3cfe7407f008aa1cfe11716e131eaf9dab0be350317d7e0302772f7b3bff8aceaca689311d0a1baefe1916f9bbe29d2fe5576eec37d7d36717fc47b8fab217dcf3976a4e2277b9afc61962c17954f975b0eda2561132da95d96e78e70dd4c2daee75eacf17de332543d10bb4da84a5e4272992c82477ca1a872d3ecb4d9044836b9be0c5dbe5537671f2301f6e6a43b4638bf6fa8323452080788fbf7a724cb0e5bf516a8f36c7488cfc06aac6206c26f5d9aa78f85a8b0c029d03cab97a620136ddef61c933cd569067d10febfe8ad5e38c18e63e10db7829201aee3e1830ac403950ec0f864d7b060f2ff590ea6fedb090cc7af180ffa59c43a92edcc82b78d8d4c8316267e9d086a90b5b2c19dec20f5f5311624a931dd7c1b9a3aebb07394bd0f494936f23f49e6e04eb3b9a08fde8c6d8312157fb6fa3f6174efc5f5dd9af621a8f0739e8adab402c3d19e05e7f2341dea5bf76d7ebcf7394a2c4000e33c71d7a715c13431122fdff9aa10b1b0658226918cf83c53f52dc10c981a4c4b2dc53353eca71f1dd6cf070ca43cc4fbb624243cad494da65bd82a50c3e875c4749830c1a3423c22416a814ffb249eebe8a0d95ca467fb3c05771e402b0c16ac0abb536b3077239713c2204381f82beb4cffbcc7471b10f58120a48ebe2e6848b10946fa1feecf94563fb8d6f7e55f04cee35bec47b65aeb92293ae839663d149b201d144383038221a4037df42d193387a5d5e1c90671d12ef78151c69b896e65252e7258a764a2b83c09edd605bafa185f5a07616674a08110e203118b4910becb4412d1fbc1f9be657a0ca0bee1c9869fe7c832168f74e88b8b172308a97d19802e84bfff5905096a9afc93a4a6a3be3423daa76d80077e7450d8689a906e5eb561cda9ea4915862b9b84be44e9170121af2372b83c84926c95521842f795bcdba300aa8565dccc3d1a75c237252b6a492b9e033377e5c32b9d11d3378fb9db2a7013ac398755252f86015bec4c5686cef39739bde3dd6d5a48e20ea49167dcc1f9b5e37122ae671335c7b548a30fa329ebdc2138f6b2cbd47ca81a01243de893b475be10009bee816d3ae3e6935957a41a54194ebfe2aacf81479fd81315b96d488d68ca858a3e736def5874c63505507d69b2238236ff24783a608cd9d83b205c3d17420e1e7154df0fff0580b560d196622f0ac23e5be21c4c9e1bf3df05973100edcb7a0a0d7804de2cb4b21e7e37eb55b03f070def979d0b260f3cfae161cd099d337f2ef26fc18bfcd1a276b371848039d8ef8a9820adcda4497aad3ea2c6ade69cc68a6045a49138816cccea1141e2fa663dc6c5de131424ff5131f8c68be65e4818e0b36705cf321af5e5636e328a575a44d70fedc08d506da6b1ccf810ff361036e09bdedef38d615900eafc27c3d81ed408ee0d52b9aca2262da1e35bb227023323db8deb997e6b30025a6f8514688c99de80985d33f9402cfa54868674d795108c2b4902bffe2c57ca2877dbc91e7c36f78dc90e467dccc9ca94c677081a69a4ed22c07da152f224292bbe6114a5e9a021b1bfe32646d51f663904a55c177430eb01f4eb6f0c58ab9a94e4b95b29aff9629bc4159f9bfcf9c3d1ea4ea98e11f31288a4ebd2e2c291f68ada39173a65642c40a0cb485de151ab3ba16f6daf0f5644bdd929755fbee2d1ca774172fa5e2f631475acee26d7788251aae648537d6426da2192f1cdff25e479b984018328eede1f78f0dab473dbd8aa026017354b1aeb8f9feaa6ae7ba826d141829a9910cdd10372bf8d4af66465ef31763023977d1cd9456effe370dac29194cbcdc9dd3b83ef55fe2dfc71e4e7f352fc9b3ca0e76fc0c9ff3a301e7d06fd48a93bfba03ce1e69984c9c947f10bf1e3a0f29383bbdfbb0cdb2365dfd6634a674cea9c9758c67515156a4f0b63416b02fbe229ec691cbfb47a2489a64e408f396203d2efda3f383a4670ac0741faaba1469d1cd1dee3f3ee1195a5029dd8c173618081be6f67e62972bec6958cb6f55141adb4e4752a237f55b776644e79e70a24c39ac04a1960eb0bc5cc130c28331562f487bde9ccb885141fcaf7b3ec7e8d875116381187d38f95449c30e2071b7fad4d3f8a2ff17c9f233cffb97523fdf3934bf7fdebb94ac52fef2601b7cf184377f003395887d7fc597f3918b1cf3cff1b047f9d946b70f2ccea601ebc241d9073d19d75293519c4ff1b993927ebfd617dd87f834f152ced621c6702419acfdae5a77d98bd7559e130b009063b8623593b1ecf7f21b5ede7ec6e0d6a504be010f7f09d252a91b81a887682443fdd0c2704b27634a6decf2158aca5a326c0153bead0a7734174be364e98b5523b717a4847928c084dbc0d1f0797ce7dc4858363bf4a76259c5a2749d2b313e39c9ab868880edfa2d7ab052d4aa737f2b13efc635b3fc2355f39597b92cd693056880d9bdbe382e08c7941177927223224f50a1609728386f5631f57ba7a1f130af3938e058db20510275d0789f207529f1ada7111456c1e771ab2a373364efd36ec39b5f1c1bd17fa99597e157f75272bb4396ad45a7395b0b674c9a711da47b93c5284ff2f7268bd445761dd4d164c767a6c8020489bfece30c5ebde15f4613ffa80f1c934bfd8b97ab9a3716ee022248f568a0e88a5f74681843c14dda25ec11bab25a23d2ebfd37d318cf1ac8015bb3a639bc5ab94dad193f7f1775a528acd8c625fbaaf580a879b7e326b5701aae65604c2193fd5890925abcc413c83ab51af4e5b74ad154844429ccb38895e0a398111f6d395452852b9ba205439087c6be598a48fb03c8dc7f4b600c66f06d015bcbe9791a661efa0c4e3a8e24ce0e463ea37109b5ab4a6d25354ef4df0e7bd7ceddb4fd9fb8d78ad1c09a4e3441324117b362db683b0367b0cf98cfe2ac0e07c1e5293d5cf300f6311af6907c6fe2f302f24edd344f4fe112b27afd9fe90317b583f33b73cff2b000d17cd29c6fac790f3d0cd24bae52bd69d5b6a7f54f6d9e3ad48271d8e19c506107b44f4c8881d6257841d43206a5b7562cc66e004b98bb324cbd60d7d47515e0409760fb893ac9dc41ccc2564b029921b40658b6dd0ada6bd0208a30de951bf66073503d82b19317fd4f4dd96a1e616084e2eefbb660997a8120b9ee1d51ad20c330dc73f8cea1f15ec2ac20ee66bf55998d5ef6575a19bb5e2787c121306e528ed50a4da6d9936d3265598265143bff2b142d21d56780691ddbb80b1c3df4f5ced417c6edcc1cae597cda09e63e4d3aafa9f6645f76ca8f4221dd6b8435b9c516d7439fd4910add203cc1c93719404a2b928e71065e0a6cd0e5f5b13d5baeeb16af245919d747514d1df257e01de14ea70e815b8f01d22d2c04f71d13819079aa763868446fd6a308b2ec7d17265101dee2fc9e826ef91bc6bed9288cf30f288c299cf4c8c1091e8155bf1cc9d845b9a697232be3cc2739854142f2a1c4f6a1c3ac148df402401a47ee6d1fd61e0c56e05a9cb0ba9e98c61436d53f97fa959fd63d7bebf4ecd8fd29d9fee1fba1b96bd37b0700e0f3c7c1ab8df71ea4a2848039efdc05dae170d81aea224918840b6b89ead3ba80125f730cefa584820eb8eaa985dea5502d7a1f0391c367e44d55540696560ad0ebf21178aeefe79b79eb2cc25ce9e24e2ef5d4c4fd41115dc1ee9035a7bb8caee1448cf3d3cec36976e250450377df31fd032194bf245349ec0061f2ca2a56b4875cb0ea306ad2fc22c377cc4de63912f8897a8105801a97f0bcb24aee0f732762b223f8cd85f33e7216f1e78c0b8436b04f96b4e9129d023e718547e66af5024f17dda0a8641e94d83ffc08af302eb1dca75a23813d6e8df42b8fba0b72263c73b0e3503f7c5ef5733fe18d805ac46e47f9f683a146181df1c4d7f4aa670f898afb328303cc16a3aef3abc3a6a669137cb3fe9a02aa959e486663667389ed957380afba0e37dc092bda1b770a74cb57beab159ae944a260b8da54c83b6f61bfeb21be69497a89fd4dcc6957cdffb985a0c2de8010cee9b5132e09d5eb405c6ccd9ce2023cbccc0cb0a7390ac491ad1493ce857bb03860573c38ce26ff184a543fbc3760e5d853bfa5b886f3c808d94a9733771772121b714cadda2a3f8ce23052b9e6b4c6da7f0b2ba3fc0fe80d657f8c2c1374c33fd9ee6f931b3665f600b70dd779dbcc83bfbbc90005c666f109e340dbbfaf971b267f2375078c810b5cff9e7134b693f988657c75c7e71d00c0e1fe2af99432bc07046edfc8d4ae0e997d943184fcff5a562de0c70ea763bfb744770fed0668c02ec922c1b20ee7eb95510cf6137b31b4c8d9f2e4efef42db4f6017318a04ca1fcb1f26ec014df42eaba24cff007b55d27d67887869b9ba4f04c55ae2f178d39624cc3a504cf5a213f09fd68f6fd9bab56439d4365436a243f90e933bef30616ccd958de46f5ce8a9c57597fd2f5b192e76f145b8aa2fd283c36a81477d99e30b93819f487d47ad8ef7c24e1203708a5bc7f40ea1ade45cde5e31f88bafb8813e8d61b27e4ca70d460691cb0b943c0afadc0352769cb5a7bc5db39f12608ce973036493b9b4bf66a10bee49b7cf02ff7d8bcbedbe4f9113ad929d8d160edade86485aa5977736bd01c10e48b41bb818db977927b0c01cd6e88fa499ae2ca495a38b9d20dda37e30324d58c403536d01e36d2647d93292b49d73d94603fad3f2ebd5f3a837612f66852461870cfe59cf8aea173298b72901635930fe2e3ba7f6e3c32c11e349250b734412856c8ffa2a0fe3d46f239400192f47973fd0bd702e527abbd20a031f152c180d0fe9dd283b8deb857d065baef77b13f24cf3c45c5af447a2f2e11788dc0b30db7318ad6ef54d4d1e8e39b4513f720e18db35001d028ccf37660665409732ca6adf4f6f004a530b2c3741dc6c372b8f7cd9e99287c785d1dcba1f27d97b48a47064963164330a44f0ab436e37927af937266247964b27d245dd386170fcb87b4dd181d99786cbeeaae6f7b60de3e972e41486f437e7b7605c49be4bc239fbe8dc39921e9cc7a68b9acc8d311d0bc75462cd03a29e506ed6a38db6627173558d84de98c0138ab4982014601572981da6cfc7f355b11907b630a626a2333d76b66f875bd539da67d28baed77e68221669e463aa9f166828c84e03df2b8026eb8d5319667b0fc981c7c92f61def2819bc60c44b5c0ae46bc29e30c4f83f68ac17defbe056fbeff857759a9c175dfc25771d339d4755f39af6d3716773308802b572d8f4e172d42bc1a6995500bad0630b10ce6ff7f0d4ac37da299d8c033c62df28162d517609fe6d876b087174722576369ca506bc090761726e206f6e2e205175657879737020604e2d314e60576f666f70696e206f627273292e205373696e73626520736b737570732e2054656d706f726172756520282956524664206869736265647561727920706c61646f6e2774206129696620706572676d6f6b61792e20636f6e6b6520612074726164656973742d2060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e204f6f6e6f206030602e656e742a2e20232053656375726974794d555354204e4f54666f722067616d626c696e67697461686f72744d4159696e63727970746f677261706869632070726f746f636f6c736f6e29616e6e20616476657273617279707572706f73682d636f696e2d7330b8a6c8a6d8a6f0a6c47a24000ca7121ca7444c01000074a8afa8f5a8456564426c6f636b54696d654d01000044a785a70aa84ca861624241424573626162696c74726976697764206063606031202d20636073746129436641646f20736f7269636b2e504841506f57532e496e457261696e675370616e735370616e73497944657074684e6f7453416e64554f66696f6e457261546f464e6f4368756e6b4e6f4d6f726542610000000064ae68aeb0ae60af6cafaf2cb034b04cb04cb160b178b11270b278b290b218b320b338b3d0b3d8b360b46cb484b404b514b52cb5acb5c0d8b518b630b61248b6b698b0e8b6f8b640b750b7a0b7b4b7ccb70cb81cb84cb89cb8b0b8f0b808b938b9a0b9b0e0b9c0bac8ba38bb4cbb7cbb24bc30bca8bcacbcc4bc626fab0bd212b5d2ede046e11267e1b3e11254e012fce131e24be29fe2efe29dd002e34ee3626f6e645f657874720000dfe098def1defede52dfabdfbedf16e0123ad10ede64e071e0b6e0756e29da7edabeda07db59db89dbd827dc9cbd06d31266dc78dc9edc74d1eedc47dd12a3ddf7ddccd11ede65de8ede5f65afce15d61260d6add6c0d3d6eed643d794d7d1d712005e0000009ad18cc62fd871d879d8c2d8ecd8f2d843d966d9bad9d0c1e6d90000000002d607d684d565bd2cc9bed5e2d5126e3a0a63bfa9d3edd3d2c541d48dd4cdd480d203d510d531d5636368696c6c000000d4d249d35ed367d389d37365745f7061796552d266cd8ad29dc1d012e5d0d7d114d25f78d044cdaad012656ed043d01cd07363616c0000003dd059fbe7cf6e6f5f65726173000000bbcf9acf75cd65775f651fcf72cfaacf120012cfc1cef4cefbce00006a0a87cdcacd05ce33ce94ce125f03cd5f64656665727265645fcba5cbeeccadcbd3cb00cc41cc56cc84ccb9ccd3cc93cb0ac74ec7a1c7ebc71238c88ec812acc8ecf1431338c97fc987c9a9c9dac924ca6fcab3cae9ca3dcb726545c5127dc5f5c52ac64fc69cc6dcc6795fc51627c5edc139c259c29dc2efc240c391c3b9c3cec306c415c43dc459c4a5c41273748bbfe33bc079c09dc0ddc031c167c11200696b692cbdf1bd43be69bebdbeeebe44bf6e66656c7465726173682e20416e645b6045726160436c61416e6920623a204d73656e796f7570616f6e733c543a3a4c617369633e3a3a536c6c6b65722f74657373607074792060606e6f6c656674206265796f652045446561702e2049535370616e44422d53746173682c202c20202c204c53203e2030292c202c202c20732c20732c3a20202a20536060656475636e65772d20606572615f5f646269732e2020206c6572616e62792020202060526f6f2d20453130202d3e2037203d2033202d4f2845294572612c2020436c656172205045726120532c204572614572613e5f7533323e20522d20544c297265204c6e2d6441585f554e4c4f434b494e475f4348554e4b53733a2043612c69742e202d202c205b5d3a2050617960696f72732c204d6178506572602c7761607261605b5f657261202d3b5f6572615d2e63616e2c6e6f61744f2829204e2028292d202044643a204f284e294328696e6729616420283861642835202833206174285061206465616461706565647320686572652e65726120543a3a503a657261696c6c55552075553d616e643a20655f33323e206e657773656c79524572616c79642c6e756d5f5f2856746f20286e6f6e2d6429754e6f6e6572615363616c65687320666163746f725b605d2e2e3a20202852652d292e202d66496e786974436165644e65774f6c643a3a2044736961647360692773284e63206174616374413a3a4c494d495420284d41585f4e4f4d494e4154494f4e534273706e4e4e20733a707265666e79696e67606f75726d667265657361746f20646f616e7473576e65605d6e682e20605f6c6f6f70602e6973202d536565205b60642c63607260204b696c6c205d73206965206b696c6c207363656e6172696f2072626f20656e64736161543a3a63793a3a28296973206e656c7920752873656520636f2c5d28554c627574706c6f6961202861626f766520606029757365722829206b2e6561666f72696f6e6c736f206e65204442532c3a3c3e6170706560667265655f75706b55736172696e2079686174776f696b65205b606f7265426d61785f54207570206f662e7360604d6f6454776f602c2060295f5f66616c6c732062656c6f77205f6961732064757300c8eed4eee4ee1cef2cef3cef44efc47a24005c6cfb8b7484ef828c129cac007c02b4efe0f0778c12f808f00110f020f0016d8c28f044545cf0f0f0f0a1f0c47a2400b0c0e0f0f8f008f18b8928f1f112f1188c8c9cf12af404f23c8c12172cf2123cf2088c1254f2127484f24f8c94a4b4f2bcf200c4d4f2dcf2eff808f320f334f344f35df384f394f39cf3a6f3c4f3d4f358a9f4f30cf41cf400452c3cf46ba91244f45c6c78a974f497f412bcf4cc01dcf4f4f50cf524f534f54c5cf54e010000130313360313840313dc2a04ea000000e90213002aea000000990213eb000000c501131b02136e02ec00000085013c543e4f010000340150010000fb001351010000aa00ec000000510013c1ff12d8ff3100134572610aff40ff96ffec0000002afe76fecefe4578706f73757265520100000cfefb1204fcbcfd12520100002efc54fcaafce1fc28fd65fd5101000068fbec000000defa20fb7261530100006afa95fa28010000e8f923fa466f7263696e6754010000d3f950657262550100005cf99af96528010000dcf8213e56010000abf865633c282c5701000001f84af87cf828ec00000094f7e5f7ec0000003cf7f77061580100009cf6ebf64561726c69ec0000005df650f511f6590100007cf53ccc13aff57469736f2076362e302e30626173696e2073796e635b603a3a6e6577606569657374612c2e7361202073706173732e2041626573742d61666f723a20605b696e675f3b205d60666f726572736173687472616172797064697374726962724d6f6360484953544f52595f444550544860302e456e27792e606572612062756c6b6e2e204973206920205b5d2065787020626928606f776e75727320756e6429692f6f662e72727372282920605b202d204574617273632e666572666163653a3a617420657261206f6e74686573696f72206e6b6579732877616e6e61626529724b616c6c202829202222696e666f2022666f72636b2e204974277320612056656365792772652065617368616c202877206e666f757220746573746e65746e696e6962492e652e2e652e2060203e500505130578051398a005b4c405ec050c061c063c064c5c0665725a010000720813001c696e675b010000390844656665725c0100007107b10713e007132b085d010000910613cf06132907135e0100006406137873242062792c746f20302c7465726f6e666f7270651c0a280a580a13600ab72614680a780a139cac0ac40ae40aecf4000b100b180b134572611a0e700ea10e0000db0d13003f0000007c0d13c50d134f6c6444697363110d580d1300ef0c131d0c13520c13a60ce60b13000000630b13ba0b134b0000200b1320412e205c5b2c686420776f727468656d69747669617974616b656b61736f64735465743b692d3b695c5b5f500f13640f6c7f0f134100900f55416464532000b38c8810a0ab8ca8a68cb010e09fe8888c6311132c111011f0102e204465742d821317cc1313dc13ea1313fa1321170014aeec6564081420574c6f636b7220733a7365a1145b656e64281716e4141372612ef0151300279115d915db15541513751592b8746f6520282c20697392b8696e67207c163a2041280000f28a83041d016c30150174e900dc1813dce45baaec4daaf43caafc2b04191f0c1912aa14061cf4a924daa92cc8343ca5a9448fa94c827e54815c67aa64471c130019000000291cff1bdd1baa1b13851b135c1b1329121b13f31ad21a8f1a5e1a311ae219bc196c19696f6e7761736f6d65686f77206363697349732e70615f1d1312cc1c136c79642e2041656467652e203d3d2d20311c1e13008a0000007602696478203c2043415041434954597a3e2030003d28040072633d3d20647374a5060000059603658821a1046e65775f6c6566745f6c656e203c3dd5046f6c642b88053e3d89b905494a796d5f696478207b5c6e202020204c6566744f72523a4c6566742869647829203d3e3d2c2c5c6e7d1b056e0000602270227822909822acb422c8d022dc477d13e4ec2213f8566705244c6971756964000000d323130032b523447a23134b656570416c005623232344656164232042204120762f6c616c206f73657565667265657a6566726565416e6454696d65440c080000005f015f5f315f2d5061726d616e79325e3388265701ea2613003d5e2d2d322e3163742e7273736869662062697473616c7a65726f838a5f6b6565705f616c69760000882734757276652e7273642e666f726b2e737562614e6f74496e557365724e6fd02828f028f82804290c1429202930298229c82946726565648e29136f7a656e382913204166726f7a656e494477686f5c5d70202824d42aec2a00357c2bac2b13244c2c3224dc2c242d24cc2d1232d23413f934133135135131137c92702f5b33b42fc82f7433cc33fb33a8301345345f3498341321321347329f3213f532133933ed2f4330133591137e3000311376319531d331542e13ae2e052f13212f134d2f972f132046696e6f6e312f20282968656c696d627572732872652d296e6f2d6f7066603a72733a29467265416e6e4f72652d60207573c780d03513f4351304362c290c36136c361323010000883613736572762e00533713e43613696e74726f64756363656e736166652e6e61646a7573001c3924392c39343944646c39ec27783980889098a4ac39c039e0456e646f776564006c3c447573744c6f7374e83b383cc03b1353657400008d3b453bfd3a55640000b33a52ad3af8394c3a833a636f6e6466726f6d2c5f735c5d28746f29646665657365746672655c5d6275746e7574206c6f7320683d983d136b27703eb83e483f903f5827c03f53425c42b44413ea44132c45744513b94513e645132c46137846ab4605471318476c4713004b000000b747ec474448139648d448f64847497e49a044a844136f429442dc421e436443a443d14322443844474461447a4413000000003f938041d441df412f421318406c40137c40ab40dc4016412e4175746865205b60605d616b2e20393925796f753a2e2e68746d6c232e202d20436b6935312e34316573742028696e2061292023456173202c2e202d2e64657374543a3a2060467265652e7374697373752860546f74616c4960296e6577686e2869732060726f6f74603a2032372e35364b693a2033352e31312c6077686f667265656e65775f7246652760606f44736372692c657220536c6c6e7852605f63616e5f60627520202d60543a3a4f6e3a3a6f6e5f6e6577606d6f60543a3a44757374616c7564606077616e20202037332e362c20282c312d6d656d6f72796e6f204442656dd2394b4b134b13684b80904ba84b13c4d44be4f428010000164d3e60010000ab4c13c64c4c6f636b3e61010000344c13624c1344010c4c137632416e796f2c206672656569746f724d134d2b8c4d206f70656e2e4d617854696d6557726f6e674e6f496e5369676965734f75744f664f72646572546f6f4665774e6f650000344f404f584f4f13704f904fa0b04fd8e04ff44e6577c0502951aa50c850fb505450fc4f204120742c3c62792420525052ab24d052531324d0544855138c246856c8568d5b0363135863a863131860e963186429625f64dc6213b15fc05fef62f9e15fb1e4d15b275ceb5f665cb25c025d20587658c758105d675dbc5d3b60836013ca6021617761af619859cc591c5ac4616e5a13405e765e0d62b55e015f2549629262c95b5a59f25d8e59dd5a525f815f9ea75b9857ee57e3583b599e5ac05a005b465b2c206f6e2d672d20606f746865725f73732028292d206020284f28532960722c2c5320202e63604d617874682620686f66492f4f3a74656d2c205b4352433e5b75383b2033325d616f66202d20312c20706c7573607346606f6f2d206066696c6c6c6f675360612020697473206c202b2a3e6d61785f6f7567686e556974616031604f6b696c6c2c66602d202b205a202b5a5a782d6c656028696620605f2d20506c7573204920612d73742e204f285a432e4e6f6e650205023d6574651384651361068c6513c47a2400b473643e6528ec9466a066b066e066f000671867c47a240028671338676201000019681375689068dc68f20000007b67d067630100004067756e69206034202b6f6628282c4964298e6993692e72732c79696e672e697661206d61783b2071656478697465696e007c0789069565646f616c20323b5f202d20313b9f0000a2acb8696e672e72736c856c6c13a06c4e657874466565706c69640154206d346d446d4c6d576d13806d904279746546656565010000db6d4665655665633c436f656601000098706f6c796e6f6d6565696f6e7065722d2e6d0000f81f2201004d36013901c701cdd6dfe8f1fa0302ae6f92a6016261736536342d302e31312e30646563493a3020746f203820696e6e6f01673628a0702e28a82928b01eb84128c077714d713071fd70c8702f6e6461726377746900674e2473584e2c474e34363c244e440f4e4cfc4d545c6473f14d6c73e34d74d07cc14d84774e8c7b764f762776fc75d0758c75481075747c7430f273bd73947313416e64657277614e6f4f206974206e2774206265207765726f66657743616e7920286d6f72652932206f722e002a770f77ec76247c74616e64616c6f6e654261640000003c770000005477a34a7477696e736963008c770000a4777300c05f7300d8775ff45f000c7828785f00000060785f7368697084780000009c706f63685f00b8000000d0780000e47800f8000000107971756572795f696e666f000024796665655f7960797665737465646665727665737465647961696d746565646b69747469657379725f6e616d65645f697474792121214e6f6973206b69747479666c2027746f2766726f6d4b4172726179746f736c6c727261794c6f77696e673b20712e652e640c1d000000fb7a1b424e6f7461626c655a65726f4e6f7445467269656e64734d61784e6f744e6f746c61795042615374696c6c496e50617374fe7e13007e546f2e4167656e6461a07f13007f000000357a72004576656e74546f7069637353757065724f66537562734f664a75736865643b303b2072656a69675f7475726e6e808d736e7473566f74696e67794f66000000eb81b3816572656475636942794b696e64556e6465724344617461536574497882726400798354836f723a3a6d61702f6c6174653a6b65796f6c75ec84f8842885e034344a36854af16965735f00197d60897c89957c8c00207dc47a24009cac89bc2f7dc47a2400cc9f7cdc89c47a2400f0c1008ab010b41b20844d30408a4868f816010000040401642c20753634166900000000348b8b102670888b94a48ba86564724e65774c4f70656e7300000000b88cc88ce08cf08c13003f8d958ddb8df88c66756c6c7963616e756e29a179a48e79248f88799c8fcc8f73799094909395c295c99413e3941a96389677961345947494889318955595137b45936e93a291e7912792649213a693f5931c9167918692a492f1922d20602d20602d206066643a20342c20342c203e33335b5d60323218972897ec0000003097b497c4974d696e5601010000cc97137260602e99c099c899dc99ecfc99149a249a349a449a54649a749a0b9c49c09b13004b000000f59a4f9ba69b079b6564b49a6564007c9a636573735c5d72657363755c5b6c6f736375666f72206c64792c7365001b7ad09d009e0e7a689e98ff009f489fee7938a013e079e8a0d2b0a1c450a268a2b508a3a579b0a3eab1eeb61340a485a41317b760b7a0b7c5b7b678aabab501b6131eb650b67eb6c5b69bb5aeb5f1b11348b294b2e6b215b35eb393b3dfb326b44bb49ab4d4b4eeb439b5a8b174b5133da81398afd3af1ab063b091b0d6b016b154b1c7accfb142ad8cada6f0ad0dae42ae86ae139baee4ae13f9ab38ac7facedae2800ad6faf137faabcaa07ab4eab139aabe5ab27ad58a89da8b7a8ffa8dfa63da91379a9bda9dea92daa5daa55a5aca5f1a51333a67ca6a2a620a71359a771a7bba709a808a4cba411a562696c60542d2d4f6279737375726060206f6642792e20286060202b206060202a20235f6f665f6629614666726561642f2c20434f284664462041732c602e206056565622226c7965643a65732c20776120796f75292c562922222d20606c6f73206d627365726d612e686c6f675646202b206c6f6746202b20562920626254202076292e7353202062746f2020207061732d2e73692e753136524f4f5422222261202b2031302c303030957e1328b9b913b9b98cc8b9d8b9a07ef8b908baf90000000cbb6965737982ba9cbae1ba20ba1344ba732e20412e2046736930bc44bc54bc74bc8898bc127eb0bcc0bcc8bcd8e8bc00310100009abf2fc06a010000e6be40bf6b010000a3be3101000020bd67bdb4bdfe48be98be696c796161726762616463686f6f746f4974746f202b2054202a5460000030c13cc14cc154c15c64c170c18806c2e2c1440000bbc1d3c190c17461736b736b2c5461736b41646472657373383e3e207768656e2c2040c3a0c300000000f17bf0c320c4e37b70c4e8d77b38c5c5c9a0c500c6b57b28a02cc90ec71cc744c74cc78ec9beabc97bc9cfc9e3c930c956c933c84fc89fc813b6c818c8d9c89fc7e6c709c75ec789c7c8c6edc62061605d2e69633a3a3e3e69747920416c79605d2e203d32342e3931202b20322e3930372c202d7573313030676f6f333032392e36202b202e31353933356e322e322e3836322e323932363200827f54cbb0cbc0cb7cc8cbf40014cc640a734f6c010000c1ccec00000081cc5bcc4e4c206f6e14d0137300007648000000182a8a0bd113450100002e01011576286f7229360159015e010061002ccb01000601cd01cd01ce0139cff30100f301f5f518020019220244455a02465b02476547664894d013782263656c6c6d61702fcf7df0d1f8d13e7d00d2a1d24ad208d2626520636c6f62626572d984d4f57d8c027e94d49c1c7ea4d4257eace37db433bc58c441cc6e7ed44adc79e48aec627ef4d4afd78bd756d72bd7f8d6d0d6a4d66cd638d60dd6c6d596d55bd51bd5fcd4205369732062726f6d657454466f66736d617800000000cc5cd864d8ad7e6cd874d888d817d9f7d8cdd852654e6f43000090d8206974697061636144d9fa2f7469705454697073736d016e010000c00100554e4b4e4f574e697376456e636c61766551756f7453575f48415244454e494e475f4e4545444544434f4e46494755524154494f4e47524f55505f4f55545f4f465f4441544561647669736f7279494473494e54454c2d53412d3030333334426f647900e601006fe701e9eaeb0100ec0100f132313933383139414e445f5068616c6157496e21212157696e646f774e6f657261696dd804416363756d46697265325365656473526f756e6453746174734c61737469747973654d616368696e6568616c617375646f75646f6970795f642d000000e6ddbcdd3ddd27656e74756e7265613a205f5f49506f5753756494de9ca4dedede9ca45375641bdf4b6579d2de73446f6e655c5b7375646f6a75737420737769743b2041207375646f746f6f6bdf18e068e080e0b0e000e108e1e16870e1a0e173afe399e2b2e2cae27375646f5f756e65645faae4fde349e476e4003ee313005d9be31375646f5f6173f8e14ce2132041757468656e74656b6565282977686f63616c6c7341496420282944422e6e657753756420746f792e18e51328e513017001000030e51360c1544f70656e4e6f7446555469704b6e6f776e546f6f426967507265e6cce6fce6e7a0e7e750e858e8e854e984e94cea58eae0ecea617765736f6df5f305f6b1f613acf104f21bf256f213e1f614f739f7d7f35f746946f1fbf350f488f4dcf42df5dcec13005900000035ed41f57af5b1d5f57469705f6e65770000000051f16ff17ceed1ee54efa8ef74f2c9f2f9f23bf37ef3b7f34feeeeee46efdeef37f08ded44f0fdeb3dec1389f0e1f016f133f17eec96ecc6ededed18ee4ceb9debdbeb2d746970696054697020206054606060543a3a54697070657273602e6e606974732d207475706c6062604f285454742e6054605469702c20607469703a206061607469705f746970676976656469616e2043742c7469706c79636c746970696e20604f70656e54697069742020692e652d31686173683e6e65773b2773736f6e666f722c6465207469703b62205554462d382d55524c637265644e657752202b20522c5429603a204f2852296066526020527469702d60604960546970314476656e706f7274526f6620272718f854f864f89dd97c8cf8f900000046f99ff9eef9ec0000009cf8eef82053686174612e202c65626c686973546970734d6170646028297428fbfb13fb4cfbc47a2400607078fb8cfb9cb8c8e45469704324010000e1fc546970734665657101000095fc2301000060fc030100001efc32010000fcfb6970676f656d61696e736173206163686965766510fe20fe13fe343cfe6068fe747c888eff00004aff03ffd1fe000090fe7069705f5c5d486173686f6f70656e5c5d654e6f744d546f6f416e6369746174654d527869736163496e707574426164644d65737361676553636d5374617368546f566572696675624b657942616449644d696e496e666f484261644941534f75744365b405c005f00514fc051414061c06142c065c6406740614000000d4dc06e80607480714600790a607bb07cc07e407f81008200850086070a00814b80814d0e0f020093009900914ac0914c809707573685f636f6d6d616e64b50b4c7365747c0b146f75663f0b505b0bfe0a1400000000cb0a1400000000dfe50aee0a8d0a14830a000000007d6163696e746f705f746f5f74114b73796e635f6d780a5f6f66666c696f78746164645f666952597669727475616c5f7461736b737265770a120a280a6164645f6d726500e009ea09f309fe095f62795f7261776d725f6d65726973765f70726f645f69646973765f73766e73736d73676964706d6e746572645f726177696e675f6365727420552e7533323e7261746f6e652e00201830181440181814055868708024db88987bdca01814bccc18dadbe418fc0c191419181928f4db304071dc48195893dc709fdc78889019a019b01901b819c819d819e019ec19fc19041a17141a241ae4db172c1a3ca9db13c47a240044bc544fdc13641a1484941ab0c0c81ac47a2400dcec86dcf4041b0c1b1f1b301b40481b14591b64743f7c8c1b5fdc9c1bacc0d01be01b14f21b001c101c181cc47a240030401c58681c8039db90a0cfdba8b843ec0000000a2270010000f62104010000e021c32114720100004621146c21147301000010211446697228010000c82014280100007e2014ea0000006d2070010000502070010000334fea000000082014ea000000c31f140045000000506f776572811f14280100005d1f1428010000381f147374010000750100001c1f4e657874626f6f6cf8000000de1eeb000000ba1e45786974696e6744656c746175010000621e14760100001c1e14004600000077ea000000c61d144b6579690100005c1d141d56656343010000481dea565461736bea000000071dea000000c01c1420696e2060286e6f77202d202c2d205d605d60202020696d72656b656b6579296861736974792c606963616c733b737461747365737365646964202046697265732028313630352d4949632e7328296c6f7332206d6563616e28506f433320342865643a6e666f2028492c202c202c2029202020c025d025f0202614382648602668267c8c9426a0b026bc000000e4ec26f8102722273038274827545c27748c9427a027b0b8c4d4dce427042820282828344450287050757368546f54c62914556eb2294f61291400510000005f476f744373416464656464462914001b372953746f707065644e65774d2f295f4d697373212973657400a528fb28997828142c2c2c5d4169737472652c6963652e205d646573745d5f6b65792c20736571676f64616464722c5f722c2077696e1f780113010000cc7c247100906990f886e5002b147d087410a8183c2c192c14002cb82b6d2b14004b000000202b14796573746968772f20626900f401db01c901b801ac019a840177016b5e4e01382a01037cf684e98cdc94cb009cbd00a4ab00ac9eb490bc308400cc6f00d46000dc53e445ec3200f41dfc0c0431000c31f0ff14d8ff1cc1ff242c3f342a34150534f033d633b2339875331f33bb32140d33a7328c327b326c325c323c3214243210c8319931763154313431656466662d2020556e277372616e4d52454e434c415645207073696e6379606f612030313030704e6fba00b3d4d9deb834c034535f725fcc35e1353a5f5f50414c4c45545f56455253494f4e5f5f3a2d7269646765e29c85696d5f0000002b3714b236c902000a37286b6579297820617420756c6c727565616c7365496d4b7c3514820000003d0000e237f837536b694e00cf3820736562657261727345756e7469636573536c6f7450657869654e6578745068617365547269706c654469645365746c734c656e4b655672664d4c6174656e657373534e6f77686173654473636f72657345497373737265647449642d2f000000f03bf83b183c3a205d3a20202820293a203c7374723e6465d43ce83cf0f83c003d00000000083d141c013ec03d416c6c476f6f64008b3d14536f6d6500733d243d142041652c6f5c5b5c5d6e6f6173794964606964496836383e683e2d4046405040bb3e0b3f144b3f6e3f149a3fe93f0040142023203c4b202b20454b602028735f6c656e2920455f2e657373604f284b4b452f456f602c2c202065697623205f49417070503e3a3aa037104220420000000089377842429c42a44214c242c47a2400d4e442f4024314432b447244147b4414c4441145574514814514cf451a463e43010000f74314646578417574ec0000009b4314d74349643c543e753332002443140045000000694314616f6660603a3a4e6b6579617920616b41776566617567686c796d696464202c206e6563657373616760746360602e00000e47e846626162656162653a2e72733a2e000000bd476166672e7273001735dc4854490000000008355c49a4acf4f134fc492cf34bfb8e4b0a4ca44b14854b234b14ab4ab84a4a504a146d6e20617262697472696452654973746f616f6d6970696174656c6973746564292e3a3a49736974747869645f6964753634444d004d1401000000644d7484c47a2400944a0164040155433cec4d303cf4124efc4d2e204e6f6e6b65792e696f6e496361737573697a61726974686d65746963000000dc4e14005b0000012d3050576578706f6e656e74203e3d2031e13c3d205055424c49435f4558504f4e454e545f4d41585f56414c5545e23c057901df0400c20472696e2f626967696e74ed04f10400ef9e0100982f8a4291443771cffbc0b5a5dbb5e95bc25639f111f159a4823f92d55e1cab98aa07d8015b8312be853124c37d0c55745dbe72feb1de80a706dc9b74f19bc1c1699be48647beefc69dc10fcca10c246f2ce92daa84744adca9b05cda88f97652513e986dc631a8c82703b0c77f59bff30be0c64791a7d55163ca0667292914850ab72738211b2efc6d2c4d130d385354730a65bb0a6a762ec9c281852c7292a1e8bfa24b661aa8708b4bc2a3516cc719e892d1240699d685350ef470a06a1016c1a419086c371e4c774827b5bcb034b30c1c394aaad84e4fca9c5bf36f2e68ee828f746f63a5781478c8840802c78cfaffbe90eb6c50a4f7a3f9bef27871c6ae28d7982f8a42cd65ef23914437712f3b4deccffbc0b5bcdb8981a5dbb5e938b548f35bc2563919d005b6f111f1599b4f19afa4823f9218816ddad55e1cab420203a398aa07d8be6f7045015b83128cb2e44ebe853124e2b4ffd5c37d0c556f897bf2745dbe72b196163bfeb1de803512c725a706dc9b942669cf74f19bc1d24af19ec1699be4e3254f388647beefb5d58c8bc69dc10f659cac77cca10c2475022b596f2ce92d83e4a66eaa84744ad4fb41bddca9b05cb5531183da88f976abdf66ee52513e981032b42d6dc631a83f21fb98c82703b0e40eefbec77f59bfc28fa83df30be0c625a70a934791a7d56f8203e05163ca06706e0e0a67292914fc2fd246850ab72726c9265c38211b2eed2ac45afc6d2c4ddfb3959d130d3853de63af8b54730a65a8b2773cbb0a6a76e6aeed472ec9c2813b358214852c72926403f14ca1e8bfa2013042bc4b661aa89197f8d0708b4bc230be5406a3516cc71852efd619e892d110a96555240699d62a20715785350ef4b8d1bb3270a06a10c8d0d2b816c1a41953ab4151086c371e99eb8edf4c774827a8489be1b5bcb034635ac9c5b30c1c39cb8a41e34aaad84e73e363774fca9c5ba3b8b2d6f36f2e68fcb2ef5dee828f74602f17436f63a57872abf0a11478c884ec39641a0802c78c281e6323faffbe90e9bd82deeb6c50a41579c6b2f7a3f9be2b5372e3f27871c69c6126eace3e27ca07c2c021c7b886d11eebe0cdd67ddaea78d16eee7f4f7df5ba6f1772aa67f006a698c8a2c57d630aae0df9be04983f111b471c13350b711b847d0423f577db289324c7407babca32bcbec9150abe9e3c4c0d109cc4671d43b6423ecbbed4c54c2a7e65fc9c297f59ecfad63aab6fcb5f1758474a8c19446c556e4269746c5aea0000b857140050543031300d0609608648016503040201050004200018581400704102050004300078581400905103050004406d3d2b2031315055790082407c240106d858fc00007b7c7e807273612f7065007a010000504b435331616c677b010000696e666f5f7c300000005273615f616c677d0100006d696e5f626974737e017f0181010000445414005c561400000800006484640c6d6964203ce3056e5f203e3d204e5f4d494e5f42495453000014573c007273612f69634c6974657228292e616c6c287c26627c2062203d3d203029004f010000000067e6096a85ae67bb72f36e3c3af54fa57f520e518c68059babd9831f19cde0080000008201000083019e05c15d9dbbcb07d57c362a299a6217dd70305a01599139590ef7d8ec2f15310bc0ff6726336711155868874ab48ea78ff9640d2e0cdba44ffabe1d48b547308000008401000085010008c9bcf367e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b40032e72735348413531325f3235365348413153484133383450006e756d5f3c3d5100610067696b54aa424abcb8c86f00006c696df4f89817f8165b81f259d928ce2ddbfc9b02070b87ce9562a055acbbdcf97e66be79b8d410fb8fd0479c195485a648b417fda808110efcfba45d65c4a32677da3a48f936e0bc13f10186b0996f8345c831b529529df8854f344910c35892018a30f972e6b88475fdb96c1b23c23499a9006556f3372ae637e30f14e82d630f7b8f38e4ef40b269d5a8cbb79a61dcbd848be828515c0a25a7b4559320071a4dde8b2fd662aca63a7da8dc40680dab1b2788f726c4c9a6dda9dbd4d6e3e5362622acd8bcf9c4caeddd2be99ce330037e9b413d0e7aeaf265f398a3eab45d6e64f0bd5cda647208282608a5b5e7fd13b8d013a8db541a866d8d17a3605925ba40caeb6abecc27fc0d115fc314e7574c979697e0bd9a559f8a17ad0953f6c7f0e284d4ac379c4fc62a26cc050f8e5f37a488d8ade9613b7671093864fdd9a7b0218933cccb08a05d8917ecbb9178c1e50b984956ac5ac6706b24f45e1e41a958f8e74a771bc653c9c9741d30a8d6f9dfe2b12d3765b3b7d756dd4302195e6beb32a084d9a85a40198fdfeddecd580e61c6fb75b0518674c305d2d1c78b2875d9c27387f281ed03db52cbb5291fa91f52da061a3a47afcd65eb128275890a888d2e90b00a0e087ee2f8bcad449ef7853c6f94e53111f45f09e35a465a96ea437d4f4d92d7586ba2f69fdc04c5a5d396d82baf40eaef6dcc28c22e8483a6726ca872281e58344a2d4aa0fae4668776b979ae9898eb21cfea07e8fe20a4507767db4ceafdde77eb569ef699b1cff6c0954aa0f4d1ceae3da9d2eab097e96851639406ab11426c5b383861657574276de8d7ebcf6af079494f44ff5cef93d243a497a7a04e2b7a9bc0e554c870b5639726500cf6011a13861c5a3b0843b3935d9437c09be885d559be25ef0a34817110f87102d49a1d3033e32c33fa934f5612dd4c4abf2b358c9981cf8b3dbd679c03b1712e3b1b4a1f3eda9d25189cd534f5485307b41e323fccca4eddda9cdc29fff5efdfb82ae424918759050130021bd1386b4d10a22f677d2b536ba73b42482688fcec701d1880ddd55b336945b665d85d296810de02143745f5d70cca69e27295e0843d3c2683daed66b0a921ab8dd6b4099b2748920234cb97ce324ae5ff1279882adec03fffb1a2de1ba71a5ddeaa34f27b6f01732987ee3d446d997ec015f64b140e572f52b7beb02f13708e27bfa8e32b4fedda551cbe9022e540ab26a7aff330c2833f00d7f87ea8aca1d4e8986c7d4ace9da6dbe7227de8b5a3e6b081f2fde9d9ec11909fb1cbd728cf8a2e815d06c7124dc482640e0e3f0639a0c561df1e866e100eacfd82c92659c476dc6c32ce60a41921b4e669d2cb651cb66380c23653692b155308d6decf209ac8048569dcf65b246a828a0d1048635efd6e3b42d048ba338bad246af126513f8b704abdc242cf22e0a5d60b0d7fe55af94611ec0b0b3013ce841054fed2e377c027e69dfda6ff971696231bd0639deeade78a499e0015cfa2337455e4061556275d6f8086f198c3b979747af25e3482f91df6b7ff6083eb9d0dcb34e8070f6d988b71819901db5b60498c6b05e9e1013bb44db14fe8fa6bc223fe96ec938da78106d2f8e42d2d97023df37fd8e9c731fe0cb15949351cb0dc105e215ac4fd027449bf5041ab4dd162af5eb2832464f5352247ab672913aa01dbd0ee50198a089810b0c58cbd06fc806f8b30862f5c555e428b9b6bf5e9502c6be508c4064b5bdeda270f04d00ac6807ad50b43561fa01aeb2470be4ced5ea6702fe77fad6be6260fc3c51c3f30381cfbc803fab0ab5e9d0447d88794dcc54c344dc58c34c674aa54ad6761ad75937af7c74d22ec99d4022bce700ca19ec5bd469026790d9e55096972a8eca93f0e0dc9ffc39b451fb54b50df689bc38e40bb797a4445d09e7a904cb596b6d9ec28d533994021b5653406bc0d525c404543bc6e65fd8118f26699f9e536312541cfee6359b4f80818238713cb7e4a5e116652d0daece814f525ea1234f4b5a47093049a9c94122a0553b664675bbbaff3c3542ad62f51b081308b42edd6af413f8f75745d34fcb13ec1f1e298140e1e811d88ef0247d630f93dd7bb8ce86e9330f277d6601c67c7b38ebecb7770d93053c99678b3a19b6e26080a40b686782af48e9530f539771b5328ebba4d9dab7400c858ce0b7c5c7e8844eab9e44ccc91c9daf2373c3a70ba7d111afde49805ebfbb59edf3125ec2df3a14dad8d2f3b9bdcdee05bd490c65048babcdee3dac9df6c215a122025befbe84b1bfb2126669f3d3b467e30f71ab077b31ce31d0a977ce222c6d72286dd06431143356c298cd730d45e47f29899b49624a3d1a22843c1fa986b97593bff4a2d23092a6ee44442806ff1f61de3c4629957d626ce5c6ec2536c2ad9334edffc06d2137e3f20829bbddaced1411d15f7159e36657ce2ac1553245df51a31147a2b35b06345c82d2754f7ca7644a01883902fc3a5322296b7a94f5f5760e4a53f641ba4f2f535ef604647cb2021086fc87b4924c1d786cb079ca0448b9d9709170f5df886b92c284bca0026404b7e5a47e90b4bf40e5fab74bec65a5db4dbcd3fb093a6d65bc15387b8194135e4986974a702c6c87d4fe28586c401bc2022d13cc58e332c43e8d772ca3576619c5b2c306fe7d9ba4870d561c0cf4ed7e6780f595e1d3d619d480996641b0918cc56bf4307a5c1fb68d47934b3f2b7668aeede874abfdb0c5725f339324e758366533c09985d0c5d697a19d033ee23a049ea04d30ecdb30fa3bde586fb7306e8b9d9914669e29f2f951c1d66000833f070d5829c8557ff6ae9a17110bde6e3f5370e92f42a0067410ce9933928a2a5b63c9a3758aac0406fe794a3bbe0c959eba64af0dc7fc44c4b5fa32bf3b1ccc48529738fd873ae2638036a053d486b188b88806ef897a7a4b43851899080fb21ab8041206e44172e7ef77cc6322d953b3f96e04c7221831ac9d937b7d2e64254724fbef46185c944e56c87b9a6709ddf1724baf25cc4b817a29def20272257b14a9dc35d782b865fcd6c4dd8af2deb554371ce345f4ce65d99d89e844f5552abf8e0dcd515a87c497ae8513cc25cdd5e68a89973ab06c7cd05297ad1c0663cc1d09ac830c0cee861061314bc8d9caeefba4f61842f362d727ab155c3a1fba37a779e7e2802fe12da306847b6c29807297a3e9441fd3a006d14232adb94c0295b5df29af7bc008d98210644cd6da78de3453b05f4cededf62732560e32f5529cd39ac50a1ef544705b3f5d9953a423cafc6d98f49eded2fbc8155a167a65acdc840fb5cf3e6b0939a742beb31d83f8af99a2484d850ed2f8ddf98cf6db266bb064927bf998ca2cacc45e734d124bb6d769659accb974f922cddce06fa654a5897b838da807988cc8de3e5cbea52114b743ebe1a1966e692ce586a596c4fb4f74516f48437c37712a29b75948c6ff4db596e7f304a6c215ed88c7919799a73ce42a0098364cea64e0f30bc5f1744ad34c5b887fd8c01c62db63ce7951a717e64dda8a4e9741e695e3037453c1095da3af13d73f5da9b41780757c2756a1ae24969321f3408c84bbf63e64de14eb41738e12c52885a01508548b6dfba6ec06918da4cca9cc5a267416dd0ce8a0efab45477a2631184578ba437c5bc6c0b354e1e8dfab820307c964b22829d664e863ee930192526e2998c82a6d24180de958f8501d7f9be6ad47438aa48e09059dfca8d947ed54753ae2cbacbd2f12ebdef5491df25bcb124328ad2d597e5f63725a491e4ab777c3d8a8a327015fa0bacf54c22fb37ec02828fb4c789166cc750444162793734b89db2a5af6057ac041f057a50126b6fef33c11f5c0d76b4ffc40e610b10ca47ec375108ddb07b84b8257297165a4815d94406165bb1544b963478081435113329dea0157d7e8b37c2157ce73960fc27818ec452168e44056205b2fb0aefaf7e527b3f3d9442b487f78deb47e99349c58bddc9e29cc74b3e486bad30ccd3a4e0ed4eb04db3af3086359062d42a3cae08958fbee9c5898d2727d8228a378b107684f40fba753949f613b93d82292b8be0efbffc781cce6028738047d8241675850704a4e206ccc8e42b28f5786889cad4d96c8c4414093e90dab6f91c6568d41cc65ffdb4f76dda07f25a4b479251982ae63356c90269a2a855a90de83c731deac51dbc7346c578451e20e0f81e3ecefcb98d8b4d5a487ddfbad22b5a43f55c041cb8fa8d25ef99e6712109c566899fb4d3bb331c1acf645094541244d9150d07e4efe9bb37fc85c6bfceba0048437741b8737b13f534723e46690bb36ed5407971d0998513acaa8a2b9d7c41211c270de75c6e1312b675e69decf2fcd0a129a697c1392d2119d5f37040a5621464f26796303707e9b2caa3b5bc507fd7ed8069b31c3337cac7065c24e8deba90a7e9db845f73c08057cc8cafc015be2fe206da317dd7063de49b796449158982a3a7a1539fa630b4880cd65cadab5b850ab3a9cf4622450940a7ea0447395e63695f5f15c17334e10ee2e86098dd91103174836d28b1f080bd85e6ee4fa6c51e873068c08847f0d1ff4ff0d1876f65db66dfdbc22e23d467187840935ab428398824ace6d342041cb389be01d304fdc134eeab73ba571832c53d4487b4ee1c7fd536411730f746bd54591b7be985464109638d9b046b5e2accff8ad0bcabf3138d2ab47e555bde141c1c70546b5dea19f2d16607402a96c2d8b87fb2073c8db0f4b1f6cc4c54f43af7b0403de85759b94c48b4a069249136720827a6bc90543a5426de458fdb83f6b1aafba8740f74b8d73b59a4ea15031e41b349c0d35edb15ff7e71d47a330f01e12ec9d928819677fabf24a81a09d3e49f2894ddab32cd5bad5e33a3d3987c6ff80e6f8f2f221cd33261162e46b8148d1161e9266f9eac6d2edae1b915793dcd9ce3562189f532305fb54783c1cb860f34c49295d57cd79387ea31985d155a047126b34a9171f36174f62f09ccb34798b3a66e980cf51fee2e5442a40aaedcddcbc0be968b23bac08ed6b2b2d7ba9876283d45673e2c6b716d6a2038aa256a35740086f11ddb9a07ee1e8c1cec79c4aaeb254e4cf09a9846a4f6f9c5ece0375f4c5cbee3af2a41c28db5a69dba1686fd2bc79d4c8731e35de6f720e62e30187b46f083ec47e493ec164d67b0258e7726961397e4506a18589da30458caa7c2e8d040fb620e1531465e99bd37d56560b985a46a8bf9975885d86b0ba7af90829738f0f645c280f9a5eadc07dc4e024180b17fa66e7e9d8684d72446991c3928a519082e2c293e5d5ff6519fa4356b4b6ca92e3451718704ae589943020a91e12e6932c14a5407948c07b4dda394f175b662244d063c58bd1ffa685e9a53954740d5859beb699131e0f3a5572870d978657288c66f7aaec8cd0100ea1a4338d8dc1670a7a119e24b4f492c560d8831b0f4556eed67d730ce25f92aba365e077fba39f3a58392962a2442b5e91f5c661e4cbf0ea7fa58ea1182d249a54e14f5f2c76b6cd8a60d03a898a56b4e862dbd6d02106af8355bb663fc23ec7a7340714a4b7e302c82846f5d4b20975959583edcba4d180a57120f028f20ecafbe2d5f2f19095d2bbb5a361619c41399fa586be916edc0bf340f45f9cad589499828b345d249fa7e08d05143f10481287414553ac7e4cf6aa3e0d2e0a2925bbc03da0446725a47fa86a563601d8454618d1ae06da3e79c164c74d66225e6983654c7a1f90419e859069cf5673807d5200ed7c42a11ed4dbe280981332b282fde9bf847690276d371699a39bb955e65280146c78413168ba38b7ded9a9ca97537318111c7bfee5b080968363ff239662fefa0bc7194f98b5d31b56475c05e4e97fd998a9fc376d48f94531a64e436fc784c69f51cd56fe063d53f4913ea5694aac985b0274216b84ebe1a1b4b42d226f779c5c227abae4f910e17423864f51ca407f5a291c190b2bbbfa71e58360324a2fdd2abdcdcf30e1ecd1014abf791336be5b629212599bee15f596821d1eade3ed46b70429784c49068ed2510780384ec00cf4f63f2a1b6d6dfda1698b88a4ed2cd29917aa4585884893e9c453d506f1324f6ae54e644a0d0f6f209efdc6f94fbc5b88402b44b54f2cf8a8e93b020aafc99924d34338177c5c946a7f1331eb6b3f357207d3ae31030d0f120d30623ffed248d61edc8a93a1bd17d25600606318ff0d81f3610a4cfcfcb18ccf4d10e0ad29dd7de307feeb7c1ceb3dcc1b7851195995ec3d3fec633a6d79518adaffcf447885af24890f343dd26d0cda9983d515fac610680a272f87a8a873b9abe7f5dd4d625b1f4759250469e8dbd9fdf294bd8272aeb7628cd559e011c86dc61daff39911762882d6e605a779ce94f4c0b52e2fc49e4b282805c1068f7a28ce5dfdf8aaf1a676eea3f7a840a6be0cab1a0f26c293a5049f050e6f0af3418da726b8ea2a617d9194bec5809deed024143aee521e1c0e4f213a14b3e13b2b3df99b49502847ef67fdc36a1e9b3b9afcee8043c6826a362ce27b8020546636a082c42795cce34d5f6484b7a6d8b8c117421cf3ba389b7c22527f41909019a6876500a08692fcac781fb5a6f9be147e0444ad2a38feaaf17c4de2c4d24b88768993f01691c0f1c0fb53dc68f6f461b59d5b86fd4353b8e8ee904517bb7baab28dd1e008495b9accfdf9f24dd9c6c7a6a6001ea8da93e8a1852d6cf003782c24b49d4b7cdb3a7f769e3bfcfb012738c90f42a321f13e28cde96d14abe31eac5d80720255166b95e6528636c8a1c662bbfdd8aaf00977471dbbcdff3c86ae280868120256b8396d0af4e032af5859b027ce649678958f450340e2f725ea1fcbcdaa374a665b10f7ed416c56ca06c567419aee300a4d60beb2ea72034531ff874487ee90d30074dbf077f2116015131457ebeea2a46e297d3cea85e07028825edf33f9901e3e3d1fe3f99f61c72993d3155e31e5996d1e54b1a8fe9eebda25cd253b0f01f90c7605477c40fa6be303c118a55eab08429b55532f07c074549087be48485fa61dad81873a99af1494ca5fd556d3911a457ea93ea7b76c5e47b251bb036f54f74b4bea733589d2801ac45cda8748c997aaa17e057015405644b756854fdcd8d0bc4e0c938070090175a9ca31b2a5d3c57d21bc8a49cf761660f27dd9f8b9b0fb818fc9673ded4f9e2345a99794228b230c03c79a1f85e4278c04ab0af95c3fbc3e9f299729aa9a3ef0d0aa6b80487cc131b1face3740b944edcbcc44fb795f38c7f34db62081e1d8817edfe3960d4bd97b189289b1104a27eee53ccfcded47db929ad5cac7797cdaa5585eaf7e433c5966059eb450f8ebb263a4b4abb25b9d9a2431a2f24b62f9a42dfefc56b250a6f9365da338ed466f5bc7bc0ee348cba696ac93cd0086d9f106f7db2ccf2f8140c383adc139164e8c0e6758009dd40b77584c2e16fe17344fdf798b33b92d659c3efe6900b2ef741e41cf2f875ed39974c5a1117fa8947c2ba50a4c66b04c3cba69f9bfa17d6af6298130306c773b5ce60a3950f2c9e6130b19b880e68f4e71a0238cc439df9394b34e61cd167023c0a13af1c9b35c186fbeb2789c4029a6d7d344844c7311eff8926b10c8787b65a566d082fc9ce6e7f981c4d5253a3617fea606a65727b43f75e85cfc831bfb1677cd46658ef75b3dcf783d9b81d18d24565da8a20dc774b82ea7f89bd35491b0573665d0c68e57cf0789ea77868ab1567b9491111eb8f4b99d5b94671655d94d625ece76d9c3048813ba1b12c019dcc4707c4d4a20f7e03835ebbe114956b1536b95d5689b42caf6cdec62fa1e23b7560a55c02357f03f43e20c834bd4833717f8c33780e87be10a6f3cc9897c982ecc8424e376460933647940ac4bc54cc442149a5413378073ab3a8a792fbe0e54ed77175eaed0d3b1b2a52873274860cdbca51d236b270afe1a2ab23f86abc8970ab7537f78c01091496ad422c6aa7f77bb18dac7ffa8c826a73b9bcd809fabc07d152be264ef7823e9e954688ba14135d5954d95a773d4d81fb949d37ec347ebf1ce3ce6d1c3bc4018a440fd8d44ee10bef4901fa6bcf2bae47b9269c586bc0144ad68f8679b4081da0c1cdefebb145fd58dbfd4e46b54e6aeaf6197691b609eaeaf9b42a680072c08a4ab22e54ca12c031b18b6f72618cf1a43374b0545a5b92c9e5390ec6bc2e790779b7c1cc3dfc5a51e284ce306d96489a17a023f92d3dfc3d26d4548d202a124e16ae7fcfd60a7627e189e13c8595620de330eb8ff7a007afdf62c4127689daee332242dea2a4c0ac32007c853069eb358d4f5aa60f8224754548770fbd49aa6aa7e79a0ad6b27dc06cdce7c2a11f8ac33387d9797936ab48a725dace1cc167177a363f92529191195e04c2dfafa2f34416b12c1f108118efeedf17759a9ae03aa816ffbd4b4be7bd90c3c0936739ab0b42f942e01dcf5670fbec59e8fab883df826cd3ce6260bcbc895d8389f3e1443f573c37f84375b1f67e6d102d71ca0d194bf7bb802d9b95a021c5bca9fe570ca1efdf86894335c30e45cd1f54046ef65af25a03475522938bc8f3e3f291b9d3004568a2a50291d50556e725d1fa2b0e99608393068b30c59a724f313e472887b4b940e51ef7a85447c5f50c62edb1ef3fd47d4588e3ab602e0c9ac90b02d553e42b6aa0fa4d4c0f6698eb3e22990010445fe81c1311948acda7a020cd26dd3aaf090652b89c6d87a8b96c42a9dbb8e36335dc368388416959542192192b89e6f23959d314857d027be813f1adb84656d57025ebabd668a59d2bac1ae9f14b1124d6c5dea65980c6a3f5fe4a76e5911649f47b8e70e21c374b4225c16fbea5068fc317e06ffde9263016eeb2626cada00d43e52366b915fae39af4580f0d67cc4cd9431cd65d250f25cb1a803daf33dbe5329999675850436d621e9bc82d0c753ade784d1ed59aeff568b223e416125a943e00141619d44fd3f08c01ee1d1cd4779fb1ebb9993c4b0d315f0d75c493bafd7fbfa3ee9ca91cf0022be4bfc7b65ed8fae935f09d8a11f307ffd8f0d1ce98d04047ddede2142194d2c1ddbacc8ec340c4a5a358e803d6368143a126b5e23c8c6ec1be5e820d9ef6b9a4be58b6ff20fd4641a352c0c755988b8d58670363f4e7e230eb7c1de5fe50cf4bd4a44eb84ff4ba26f9792ddcee59b5cd632ba30d186342a5ebb191cace51b8e4df26aed772d4a9bf05bfdf84530bdb5275b3a7849db624e99d677528900c18b3579fdba666afeb23d4e50e057d993b0c5233d4cbbe43f5ffc648faf3c3290f7dcc1909e824fd5e39a61dd5d390942fe67dfaca9cfd7be07051af1d1f59c842f36228680c28cac2220b6b87a47bad896d9311abaa657d8e6dfd147bcbf52ffa1a19d0778fc8097595b499b37624ea307fecca7a63ff4bef80983e107bb67bffdae911635f9a38153b4cc931b2d4f75eca007a0b8061030ac69a1ddda1b4b70fef3f906cdafa10a246fb149f1d1eff9850c0dd17fd32b1a56253fe0dd6401beeb3062054e7c6374d08f8c81fd84111730958ad78271ec8f2b9965c44ceccc4f3e2a6efcbb9e65b89722a51eee97d8cb7323c75c894772397a45b27e27a5480bb730c2628ee9638fc2ee371df13f54918eef7a447055581b574c0df6982f0507de30c2bc7a7f2ee76d0bc9f8edcfd74cbe2a4c45c00cbab4186bed22261e3a9dead0beb362706df627a24d29d1cd72eaad3a8e30ad19cd9e01b14cb35f2359a00267435ab969429dcdabed7d466754438841f79dd2e6b4290234f1c6306790def340733ade6c51ad0a54d0a98160902e1c47ed611c7825cb68a870b666fc4d987058708c3c66f4c589b030294b888d46241492685a0e57aa4bd5de9b4842b2f73c1afa3b85fc2226f779f283632903e16673d685fbfa4a43b4f68503eec7a765d17fc54cf2dfd9bf8f0340faf4ca83fad3f2618e6dffc0ea23fa5d2d0e77218f70c738a717c64caf0b27b40ccb67cbcd10c6ba8b1ae2f53691c8f797013bf84fbc116085de07c1a8c56007a00a300264f67a5380d9ec6ec9ee05922180bda57db700b580470253bf4edb3333f41f9219d298ff0e95ebd297df8cf4b7192c6d6823d263bfbd15a811bb8ab74de4aa54d2fd387ea3e0b9116c42f589d3535454fe182777059c01690e968b9538e8b739e42f9f63fcee3f154d91ecb082bf73169bb6fd34558135736596e5585534370e6e4307bdb88eb59a595c60d7470da358d870ab1c9bb130135998463989861ce9b2f4697d2cad4041b97f10b581eb010cd3d7fee4d0e330429680430cc513c006220bebcb9cc2dd78e55d5a08256909010c6b155c6e1748ad4738542e5619dc48b18624af05dff9f8519c49359df01a6846ecb11f22aacb90f9ed21e45e3ac234414937cb43730d1a602d9d1b92bf7245206f1382099d7f9a3715c5f42c364b1df107c2c117b158c4166cba7d2b7c70592829781fb346c6da21cf2dccb5f4f04f815b05f1d3a4e45a1aed3c18830aa6fdc3c3bf8d5f82d5b654a7413e8046d081e8cab521ba241f32a3f6bd340a157de188a4f3a5a467a1168489ed8979d64dae1e9d57a44272f59e855890d4840225c469316dbd04d1dcc131a1173ed91f33744b04cbb6669d316536a996f6de172cd0530983924997bd78ebf5d06cad77d0441aed346ac25d114dc104b61ca0adfd7cdf864d9c6173430f0102ab2eb22ad21eb1abd65b097c887af809fb477e3820a7d1987a4f00028d2cd66fc58f985d863273e467fcaf71e679299b70875c9fb610cb8262b06de941a313adfd70f5d0edbacefbf17196410c9dfcd837c74fe0bc497e55831ec63bbc13ef5c667057c12fdfd857903ed327f56bda5038770c60e1e29ed24ed9a28dee15fb2f22e86d9f3da123c60e90377da4315ffd50e2d3db89cc5749ef9c7ea109424ddb29de3765f6bada17408dbe090d77f73d5338c2e9468093e09a0be1b63833d19d63cc6c918ef5761cca36d2fb296081da7637474722cb4bac97f9ba14b6616d402f6753370502a6830f82fa277994d71173fa79cf1e0d0906217d311f3e7398f6cfab418b0f6043e5557ef697734c1e61e2bf564242b7a4e659795a7efef91376cf2d5c0d7f058219e7383002926bf2f9e50385af38e7cfd9f2e76a71f48a30390f053901bddfc1207667d32bef3572832e7fcc4e366e57281c23825209c02a4ebcfc9439a98266e17c3b1a41f4c83477bee09ee4e1fd3ef9ac143dc78480b277d87eb294bd0c98ceda84d37508c7804701b4ffc3d399218cf7e74ad139ab8ab686e1e77a3fe6ed475d8bea6866572a43c1a6e345121c2efd768a8392bfd860bfd797650990a39529821576045f619735b3469c85104fb10235f6d5f824c8c69fb0f90647dc6209a80c186e2f8f3a5bf5e6a3e9654cc6c093d1404fa2719066bb7227e91d98049999e80c172f94634568d52639cf21ccefede3f08c7eab40045ed14f1f7433a90381bf908f4da194139d32aa75d6f6bb208274ade53fd773f3589e80aa631c9ed364023effe6888c5e6f46d56072dce583426e7efa3df8d4e0bab9e4b29ebb60da890e691cf2fe9762c448196bd7bb250e05e6b93e2d94511f2878df154979f8b3c759bea6b37475dc26d6e54144a05366f3e0e34600f4625d6129859704b840fc8c2649ca73a48d4ab2361cfb402a771b873b5b1d391b895b418e7d4f4680d16ca8653758ea211ce23a392d6fcd5e1cf002d65b29ff1d389f9fdf3b5f44c7406f69c9d7547c213c500c35db8453c0ef3d0ed6368adcfa3b6575bc1fc73b9f7cb47810822d85a85f598ceab0520740c0b28a66e930d06d63f495ab2c64287a28f48577495a2f1447828dc21392150e69a94af0b477bc256bead58a5be735045cab3317d449948ebc5db4ec8cd58c716d60ed4c26359d7b8f28ddcc8bbe86bbe3c13f10ff552f693b8bb0c87167add603abd1061d5678d6d6214573fb225224724fc57c089be5b17044e0f0525e4f3bf693d3f81bb6590c789897f78bd0133753e08958234b394a43f59cc703c6b15e0924eeee44070a73cc71746e90dd1e75cdb4a84c6755cbc4304106273d9c863b3c7688663af999cd26e575e7556b7cb5583901aa254242f2ed27a0527ff444b073835a7807d62252287772f356e556e6c4665d748b649f3bef34df0b41df3c5631f2d8a9f7fd9fa087386aad543d30b742f92c548d67b6e943cf577434c6a23441881da2c758b0de5052681e8dbfc7c68f0b177c95dc9e620444396d997381631cf5d0572b6b03104a491769702919f96b1e1640c552292324ee9dc1d37ef1cd277fb9b665b03a926fa27ebc9c31fc1c7606fc1de08ce07eab78f80e79c9e54a7f802c637dd3333ad1b526ced447768762e3b03fd8e98862a11254c1178dea6cae842d7bf94dd7f43c2f65ce98aedc87ffebce194f2e445be7314955ca794f20ff3fb8931acb4173310a3c21c8a6d864c8ff1200eead0d281aefc4389f573719f52e80fe7be373d368388fdb4f78ed0c957688d8b9ab6d7764144d1ef3b64545346f32d9d8b2a5e684ceba016c7c944c923164d80be17898883f554782f95edd51b602b9634ec966bbf96f903ad4487feb9f1dde079b03df50fadd4e2a70ddda4d0aa4f85478985366b0d282d29abe8dbb001a99d8a29470ee6d001b363b0a6e0c56b7164aee761dc046faf611a4f83e1e7273f709afceba6c931309b88807c4fa2422fb1454648f466bd50fd8f213071f00a7e3fdbae5a78db1624abc3bdf51795570d891eeb35b2fb539fc4d06c92f323bc500df2eb5ab0aa82efa49d6e5428057fb438900a4435d385c1a2257b1a7e18a87b8751189a3049b29aa3b3d8e7bcef270578dda57c5cc266f80a3725966cee6a6e07683ad9394ab8557267920e96b7679738ca8fe1160800b679b2834dc30f058c7048173541bc1970ce23cf81cd9f695d3981190465297c82b28fb675ef146398c92e9cc91b8b7b2a2006f5cba201729d489924a58305862586dfe4789a84b753c069e4e3f9ddd244c5d22847254da4e0522cbee12db2e45d077d60ac12ea314e333b31537e52bcfe8ee7de31045033b6be62e70f015a076a95c9d0a5679edf9bb02b9d8efd4ae9175a8d2e7636267f90d2ca166f92274ce20e0e96a521462694341f384a90d99f42fbd2c26e2cf4d917896f60471a03ac0bbdb38a7ab372aa7cc903735dd6dd87eff1f782061ebd8fff4f0901b2bed6e3348ddee57eab53585b1ad893397eb916de3d493255c7625d92b78df4c35f29c079757982099f9bf22e530711337a33429be8957d3824ffafa014c7f46bf97e530aa65b87d94d946c49f87f3197be345c9e6a4e35ec52e92940c6025dae60183c577578b095ad7c15df62c1841238eef670a43b69852ee629b630ccb3029a979c89502b9275c7caecf21d4b451670985ab1e72019b736d251e644b59e3b642e18b626a59ca250c155dd68932e4c3fe2954d5c8f7ad7ab5a68ac10258c26d40596b32eeaf442a557c744277f2298b8e4b9252317f08793d3d5c456323d0663771419792cd46ef46c8816fbff170a178353ec6783f4e28ded24c8de03ca93fc9261d49932e77e20a221742f73602b7baaae565ef44f48228c9627ffacf0d606b3e8081806a3dafc80f16fa96199f61eeaf322ccb885ea22408d6ca2613706ad4d25fcf0afc2f054d6167d365e39dceac8bcf8c485f639552b91aa7c67ee401ff5b43ea0c20da01145ea039d25c973c635b02498c49052362e2f0a53db0d343998a39315028b52f1d19e6c1d0853f220ca7c3cb6545e830a15e4538dfb2df3d84287b3eae93ddc70cd820b4de2d0ad0abcd46068f222a956fcef025f76299349202ed3756e7f1ffecb8b0e7fc796a1578bb3b7497d3217f056d006a6695a10bf23ee8445877400e0c32ffe1639bfe9b6bd9b4f1de7fde41d56a87d1c7b8095f6329acc97d2c6c31c94183e8b85b74b57bf5d84ec35ea461401b0e86e9ddb128b77e8479336aacd7601b90454c173b9ecaa5c2955b17a2ffcd0da1fc68058b849e3a6ecd35f9c6eab4705f6d2c644590ac13ecda02895f57242fcdeedc9dbf0a9868c4b0b60341d5182f335d5ccb5d04b2383aeae0d2ab1b12b764398ca96cf807af3f6e5a17feff635a8294ab92c727123ccf3cd11013face9d0e15b3f7d58267e02a1ffb7110397b2741d1e07c228f7c16c60e2f0c79dae99dc350dc6f510b8cf3bb7e014f1578bcf7b5c280445988aa634f9e69315c4b7d1754f2e72ecb93707020b56f9c609f394a050ee8e77831e0fa954b5a19a86b66dc88944f0816abaea8996fd0ce1df22e286a2b73dc627d6a6b0990581b414d9bc2d288cc35e272ef1ecdf7c15292181bb659b88312218bc93855265fd08ad404c0b66788ae951e9b2131942220f3f1adb82c56bbca4362d80201ca5ec20e6c5f1e7851c83dca115116c456ea0df1ffc44458b0d35207a9fb1a86eb0035b95b96f11e44de6704b7faf22e702268f28417ce7e3aab40ade951df8d529decedd13aeb26cdc8f57c59cb279517ceb59b98098706cdc4b7c9e13c5dcc243fb5309c5592beebaea3d6fc7c0366742ba8ebdae3fe3c90678533d77565b08e7812b80679dfc76a087a094f791d895716aba37510b7677253a8e15be1ae8d7f0778ee6deff871bbe1744df7e8cf5f48ba5eeaaf52c20f50231167e6e424cdfd025d6eff8d43ce2671ac9a8a804a9e9820c0b6a83d78b1a44582812cc5f9c4e2e9f00b71663a9c27da8742f284f573cae2c95b0ca64fe6130bc4a869053db53d77194e69930fba3d6914dd23e451efb13990759b67d21fe580b734d036bdf8c539296531cc6a093d547f0b10ff2b080d65e62a9bb9acf5d913bb3f549ed2a215f6ccb48d7abe3076d69ad5eb6588fc3ebd5af5437d60425d4755d7bad13e0b537f4755610ec7cbaf4bb2fc7c621534f9c46f17543bfa6795c7b19dbafdcbd7f6b97c85cbfab6061c30571683fbda989d7227bf402f7060b3df632d718f9d51c78c779d17ffed25be4dfa36a5ba392f591d4a419d4bb6976234e040da62821bcacd023bd9ef9f3a68044b531b9ee3440f99c1fb33b203b80c7d128171c38e554a946b949bfccc9bfaf2ba67f5c0cb25959f771f28dbc8a309a740203fe8972d5dca8958edee12de512733aa0bde550bbadcef5c5b49c6a267eaee046fc6f388baa3b7c1ebaefc03d4fed84cc7728e8a3fab256a80b97ea9e94ba4ef8bc60735d35eaabe941c1c464f33d1698aba79925d57a0cd8959d8afd0c03b1df737d2d3e71dabf47da7703a333fde78a68e2b259b35309100217fba97d0adbf9266fcbf2f8b8b0b7c5ac846ebe802c8b9a33fc59238ff209f32d32a7e66bdb6ea12e2ac185487131e1405f0957fa122f5b7fdb7f019574219dfef622362d05cbe4c7c382fc9f56ea1a464cbd180f7fbfdd04a16349666a330fc1a8820cddf1958712fe18c17804cdd4315c5e71b671cb1c50908b2772efc0a2ec7c73dfd6154fa98447c516c5a55bb7f24e6c260ca6052fd17c0095f73b8eb6d1509bfdd8ddcbb7fe767378e7472d27ff3f4026d5184f2afd03d0d87691b7098dfc2a328de0ba5f59186780cb82eed7b9dcb86a05d38122a8e37dfe23b4c8dd83903f58a78ff2fc5f19e27613cc206d7ff781a021a0af90ede0a9911d51fd52c113cbaf7f16f24e07d1dbfa0bd559061723c9cb662659bdf6ef56a2c117eec1855cc7523a024069f1da9685ccf7d4168a69bd8df4472692a8cc759d40095ebeeab41a4560659876d5685cb97f4b3d2b8eea607cad7a2f0dcfd0b4d3f5a0f8ea1f34c51589e874b93a6d6e9823714dd5a448dc82b96aa222a48fa49f5b7e00e9f4f9959bd8c26032a06789fd672d75b752082222dd0587c6d42bd5e097892a3edaac83f01dc31b79970e338e8e4bdd3bcd770a5717719980555b7f51ba55d6e1bae1dc7b232500b379d25b62395d6c71d5c0f14c599de264419c5b7490298b4691815b8e5d62f74a9f98f6fc34ba71cad2481c59f381b0aa8dd8befadddd3fa03636cc6c0e3b2c5e04899b21778dd364f6f532e7046116961704f8ef384e21228177642da3114684f94c9781ef4a8d0332b6d81c7d8a0b4afceab8c7ee157e49f09c322323f11a9fcbd0437c01a16d9d5a472b6486ee9a09995079f46257fe6a824ded788ee4f77b1b53d0742244599a8cd8c49d91c78a926f29c8eea5af3fbe816f8c4a9c10cd40eb067ae9aff7552bac824d1ad66f3451f5d6acc3ec9a412429b4388355e0732bb9acb5076bcea268d749de6a9a351f5a96b0b2732feb2f96c0427f11891382e9c26a44e316f224628f2abb15863e1870cf34b4a794bbd8a8d4cac35e76827238eda859275bb2f12e370e42a1e3dc82e32c74206497ad8c27be49f63865bd544a8e58559e1a5936572e21d9eca93ece0de4fa54fd36d2d3f48f402db715e80cb5059a4b32a15a5871a1e285f6be9902bf8462bc062a69e8f0ad96d554c8337aaa7efbbaaefdc6a3a32374d6eb88f813f80ce976fb257f246ddf7aeeb48f7a521dfcaede01189e7871683f149d6841f59edd106c05f7e84a4b1877e0344b14013e1f817c4b869a7ca3375ddd9de8c5c41d15913da1acffa9c857942f1d225ee7e03406b4fbdcd3b3ce2071788ac46f1d7e4095a273d5939048984ceb94c2feb76ec4307b271c53ef83041260e38de1ef8c47e31c8215f1a0b832f3d355210bbbe11532329f4f13ef908b96c84129379c011cafd16178715db2b975ea912b158e1fdf4c9a7e2fb56686db3d5fd76df36ed8fc2135ad5ab038d30834188c2141163755e35d099849e44c200e212488c9201fe29bf3c64adf6e208599664e37405f0956393d864653c2d6fffa21a789cff90f1f8fba535e14b15dec3f28fefe32bc82be118577af39cf036e8408986eca655f8ee6680e55af743712b07062fa52ddfb0d4af5dad60f777935c7ebfcdbe7d849d23b41fa3c944f0a57e70c1dd4758bcef9367c9053e083895b5ebd5c98a38bf9bd85fbcf9546ef4bb115e170d48f834c4a793715ebcb74150379df259591cd48f669123fecf4c8194f9c7e7052fab0cef56dc8e9d36bad8dfafa6080f411bdccd655a8ccf5f58cfedbd9e91b00cb64b451f43bc23e2a724c4fa00bf90923df19f9c7a7fe5b5d0de6bba9e2b03f3986471a4198167f6ad0915b92d177cb727ed65b9278c76acdc3e17c17e412102775029009e765c258151b645ef59049a9427df33be450ef173ea41245508bd11ee6d2492a741b789968b9c4211fcdf2e1e8411f4b2dcf3aba57d85f4a950d855f2887be5ccd11347ba1d845998521c772ba511d2d4b5f32bba613f0d181937193dcc5bce4dc1a07d7d4493d9d2559208b2949e21f3b5508c3f0b12f5d2d2250891d3d3833a77cb8a31414d50dd93dc3667e7672a8186682d2c1dfc2665bffe054d57254eb4954cfd812daaefc2787e907747b261722699518388e17d09b861138208886afaf97c558afd983b599abf8bfbd44d5d2db385eec980ef7b5ae7b42843517dc7a2e055a2f0f73091b6921e4369392768bf00da75cd2b0d68b612e05052521987a703a75ad76ca7976552ac0a9673c1e76843b9441e8ff9e280b2c9979e80f9dfb0c331e5d5e38d70e532c4862dc95f8b453a86218c2f081a9071c2919f656d31bf800124ee41759583f8882d2cf60830c6b9e19128b4539aeab283f75b5ef753b2334e967b6b7812a0b68b069240be33be8c569d0b3cd3bb2adaaacfb5509c8199413b0918d8c650f1e9db28e514a22ac815a5a5b48a683954acadbe8b43156a1cede377b9b11cf3e80b48d76a7a875e3edf542c8e39e3c00d869c1eb100201213aae170f46c16a23ea9e0dab4465f4fc65cbf7a6db0e632fd5d0260d37e1135c14d983bc410c1ae268535c00da50ea5b3e883ba99f485715214d6add9a20e1108dbfa9bc35632a4ac7e9c1e452c00fc5f55858c7823752dc0b89f13468360454583e72d5c13b02ff12d329f5fbbaef14e268766374f8d9b1ab87d09ae51209ee2686ce138f166d15887a16b66e474eb63bb8aaf08b330a77445ca560ef3dc365c9991b29b723bd3a6a57642d5c893a39b3bc409c2ef130595b79165e5124d9323ec8e1e88e8d1003657266e32303c29a31ee4a402e327b5eb17a7e993dafce73a8577d3487255ced5c506f795056ed825f91b2bf0b19a84652220fb0ddaed9bb279041e0d508e15a66f91d1c8a750fc5f2d05c22055775eda1e21e796a7627213da181320904bd1dd702ed504846e7977b48879fad5d14833cf58a911db3aff83ca2373ac2c99e9e470f58602c3cc4bfd90fc61b6a61f3aae87c82799e276f9bc83e3daca503c3b99a580d9aab4110147e72c6374ab693e66ca3204c0537aaa3c576dba33843c05907d6a68761efa4a452635e852ccdf8c65d38486f4e460187bb0f7f6a2ef5f5e90f34881d7cbcd171d6a8a9938542c302f6a6f3426bcb071a5f6af21a46203656f69c48aa22ef63a068afd8be6711733263a62444b781cba03e1a9f919a00a794bf563e1d7636a00cf220137020b2c3f7b863020848f9305253d3a098d70ae566addb54867e01c20523383b399a25d9408affca9f9d1f5d7b6a6f5d9a9acccbf943d116665c3a707fdd4e4549984da7b6af5a647820f8eafdcd7db120cc8b2ca0a6deb7059a3ffd17f50a42c727077114e7cada1742eb44a1ea55b08125a01b56a3f9046bc9cd5dddfed4e9edc1cb677dda2dc861969cf6e1cac026c091e8bc2299c2523955682ae40178b85fd91c29316101bf302d04c14f38893b73137994b842b832e68a89f9d459d42f34131c1c0e165149cad1f1bc82b7bf0350daa92a5efc9e808817a8bfa9d0924676b645f8c44bf051b710fc40dcef3c78b17fc5a7c46405ec763aff55b0e354d2c3b9cb2d0987df67bea2ca6e8e691f202a585d5b865264f385c9f5bff929dfe9be7ba280a845bbfa5578a32b1313b64ee98e6bd431a80e59bdda149767eff16be4b5a8a649fea4f2f44a0d1a1ff2d30015b295547e87d14501227a84d664860c7c31386a826a13455fe0875f44152c7220bc0b3fb8f67ab4e6e6e0142fdf6382c9fc4e952145a9236a36348a3e615fc76c7cde60d88b72e5dc091baac86ce9f755f206653515f30b11001c3be5e3ceb462e3b4372f12dfa5891f1f405e0d85d444d7bcab15cd919bb8f2a01c5e2b3a44a6cca5f3cfcaecc2da027851866b5f9f3df5ae12bcf35709e01809a58c3631f147f25f913e30ad37077a360ffd41f2112eeb6bd3d4cfd40f5c339782726f73334558ef0b32224976388bf16ea2f736a504fa6d8c3c7e89c1f7d184125715e97fce884d29a1b636023c300b4032336d33a732b516ea72d86903ad084684d82372e1d69bab4369fe5551d896c661c1c25f57a0cfbf8c19aef73c15262b97f2c2467a8294592103e7a27bfe0efe59be222495308b26e6d5e8e5b0af5013eb3ad61f0b78aa7c145a0db98990083c18225af38cb6896e051eb9323f942b47809f37886f0c398a253ef416d486f36faddd574cc4ab531424b821aafa729e72ac3ffb987fce448110d8476d641a2f3b17a67e7e828d74f97fdc14490ce7fee7f2aa1aaa6d14075f3d3e717c41c4c5e1b8fc0f6f4cef5aacfdc1798ed22f1bda999ac28e8fbff0efb23648bcdf1cc14b3505071e98c4fc5eb971cc84d6efc62cf40aa37f739ab095361f51bcebc32c7504c3ee6aad6f97315afd3a2b54de3a887668ae4470892161b9f683ba5ba2ffe8f3c9d62bdc29af4c8543816c9c3c80448bfd36bf1c5ca5c9c53458f5247a6731de8d2f6397087651365622b227d4f2ecc245617987fb90f9efb684d05f0d739b8c709c9f0e0917fead02edd7ab53b4d9864ccd5069c0209843c41289d2cc25e4ca22c6d96d5d6031ceb5f9d6a927823e1e4720c633ae540cf7091af33f3b34a5b31531af7e2b2c4523a1ebb4e3edcd4ca18f6ef979f7a6373ef5e745c5af4a198837441fa77883343d93aba6c0ce2ce3063d60caec7dae66b1aa378734611752c186815a99cac2a3899b321273e78a8cba8014543b54d083eacb83c04a2230487cbd124b72a801377d2ab2e9e911469607c9edb2d89e33044b382b2745dca0b9e20839d7d9e75774dd640e473c82c39092b285f80e78c71d314e99986936728a60ed16ee14e2aaf890ea6c17a26f7d76356b0a557f1c42baab20871cb74e71fd27d36b7c60be3174225998d561485c1205870b3d952cb1a26d79383fcfa39e28bd6527551c07c47175cbc2e25f79ef06518cdc7b23a7087d3b8463433799f1dd801c9e6eb2adcd65d7537b287cad05a489c9be408a123b4f6da65051d494817fd8763b9739eb98b1bb7baf66bb579a517b6dc1ff669b90ee5204c1f65f0f9c983a52f33b6bc19ede07e52a89f78fe201a5595219c804d0d3b651d29a950895b3c83d6ede72822af0f2a2f2a6b43983c969558379a5e2761d60657a0bf6b98c3b9081b24fb80ec6486f0189b232dd03f5d841a456490f29b627d84ff46e5b5de7f1661d68988384bb1386566044e13963ab0cf93a3b2a388eb90b852dd13332510b27e3654277ae7104650603a5a54a72624eda7cd91532407b1839c359d3620ae9cae66faa3493778e83a8dd21bc2aac9a5521c87afda11b8d34ae5f82699de190cc4f5834fa16a4de15473043a8430207d4159c5fd4f5a50f010413bd84d2a312ee68ce191ef2abfc01e2465bb007ba5cdc51c7f7b4076a9dee46ba57838700b93ded701f4f95242bb471ed6909a096919fc6be51c5b4f55148633c44a06d8df2d6e6db0b0eeb2357e1830f23c07fc57fa16009258e7e0bb16a60b4c9de2511ab1d31acaec6f5e4e908b29a95ab316d5764ee7d28d6342ce3f17f265aa0534ebd7879bb9fc711e2b0ff2eace13fe99f542928b504f881bbf2d6bf504dbd63fb2786734bbd732373be87a4e1947ef82184ce884262757d53e51a5a250eecb244c8ffb5b947f16f18a9f6f7609d65e127270095ac34af66d4cfd24d92c8b54a51e985743836c8611d60432a2cbc83b5755e9a09eb796636353311bcbbc5884b0328b34dc9097c00c091870d9db42aa3afdaa0ac60252a94e3026996af66bacb0b5f36c57130f880151b34207b8764144e031c941d10bae1db8f7e6f9c64d4d264f57f269049c5135b984b95ad4df171716257eb9264e5a81aac3354b19fc7e281717c433a4aceb37c5e170d5b1381c28f2de99c5dca6355011358426f69933f70f8fc2ef53478a861ce31ad657130c1459e2498ba804c95e4c189aceca32c48c8b3e3611ce664cc30d45a91c75192eaec7cacbe3fc21a6e5fad9e5cb8a8c583a07c31bc135c5060a0a2be37b8b80da6efef8af2097ddde30c0f08c184fa07df02869818e3ac6dd9e0dc41287982d2d0f8df3c33ee4df891008508b6235385ea3566899c6e9aed3f2c9674cc1b963942c13ca25bfe32045e2ded9a43760652c21d3c10da4d10879844efa53adb22f1610d6b69f0095b7626c565a17aba538632cc6e3ed9e063a33ef8bc1c459d3afb3572b56d625e6d2d2e5f2218be2c2a858bf6bd380360d49ace6ea24d59e6fae909e93d3dc729bae706a8b061f4613d1c2d0e61ccbf46b57a635a0bd163478ff969dcde291191e6118555d9e9f7a4196ab18e8d488e40d2536f1e626e191aea3c50fdb54b8e442cb52c5a947bbcc7429377d41a3431b1e173f28e147b3be88b27d55445dab62a088f0ae2ba66905a398a75ea579b6974ed5b6457afeba7bbcfbfe0b90a65286012604a3116d9e6e39e3894ea295e3330656ce0f447582f18103335f66f6a7ac13814a18ca3fad2152b05bf5db5242d631b71718af8c0ff7606cd4ee4591c48521a1498982efbfb828040ec1e61862170c0164dadbf2c50635c5bb087521be00af73cb7dd1cdcc6222926bf4f24c69894b784186c9b5d1ddf7f7d0c11855e7ee96a5b8c17db1885cc54bb4416be4a2c162b2f1d838e321ce2024ef0494c651640905595757de5b7533a32c614f2d4696eed370f36d1d14e5ed16d94f321156a2b926cd468ba6e00b1a840149455943fb5c9c693ea7e62311741eecb9c96e403476765839ae2acb2b2b19718faac58f53a02f1cb87c9ef690c74f542bc59e1bb5d569ffc4282e332f4ce3b86296471ec0b79d3656a5a19f04f2818aa0f0931016bef837b1d8d9680448673788bb861bdf33d16976b02f39b5011b6c16ac5a6e970d6844c64875fff069fd5151628bfab632368613a7c1773582c680d0922560b83ff68f9ecee0d46ff9c8cc692ac92695b3b125fff345dc85a95c526669bd4f3aff880fa3e44251816eb48f14d204365a0ab8e9c0b1a2df44784468072c6dabbb0a9311d59eee0c88c308465a09dc34752a99417baf9cb361746d06a79821b3805f0741d105840d3124193defa2502a1aefe10c3189b541fd3dcc7d4acac79537a8d36b847778e44737ab5a68259bf1b26e209ba750992bd6db4ac38764e43cbbd45d54bd26763311054e95a1f22090d55af8108055ee964caee0732f1fc33ff80c13b12231339d0254f2be8dc6c925db5dc6fe42a5b8171c9b849feb468c91255f255875b2899b9185186262e1e8f7463887dc637f6626eb1e0f754c4e30d261923da2580ca277e384d7a3986ea30bad4288ec2a6b91b93abd7dc49fc6ef5945a0341d549632047017eac5e2684811c17325e16c0cba022bc68dac637d3343d4ceb78baa4059cf178e2dd9dd299b0ea83fddffe53016f26c6f0e7f951504d822f0e0e6799c49f2b1f23aad341409f853f01350dd032a58a25201ba9b79c2e55e8dac6e6e523ed5a55bf7184d3000da477ee3b3bf75434de8dd1d852f9a8238fd2403f3a832699c3edbd06aabce53f8f1edfcf4608c292869a0e237c3159fc02dfed4086f6fc1d308052ad16268c1b4e6b60a3c9077836e6ca6ec112a40483141a28002ff9c4fdcb9540124ca1db03e7ecbba22f3f021f2bf61a204159baac0949fc754125b80115b8440c6fe07413aff69198c3fdc48e1b5f4eeff76c75135197c25fcf7b06fef898c703e5a0dc8387d8c2cae5cac62d63a278916ab0298742b8b8515185a0ff7f93fae5912f5414f9245b4c6d4ac25c72a47dfbcfd519da98cbdb3da8558dcafea19f414e8ab3bf1f1a53813586dab19f9e59e34dfc3491212ac550502a6092d20d81da6c4a64a9c30539c0265990839a08467ac5e020cf16ded9218b299490387683aa5e110ba29267afe80f269342c7b6896585291b482248ae34146cfae8fa78380dc34a20f8dde921477e094b94f6ddd69b964bafe88e4e76044cbd2515995b741e4396b7f895b0e9306575c45f3db72334bfebb5070103a95f1e7a321731733aa604afcae134c1b7cf3f4a0babdac996ce1abf633781075c78d34449b83acdecfa2cc978cd8ababba56392e7e15fb8e80feedf03f8bc90f07bd8c3a21ae7e4a205bf7fbff70e2b0f22b544a3574ed0a7b19b636e5710cf78163c1ae1a9952aa753139f8ce42096ef080e7d2bf8c51ad8c83f26a9a18d1846ec96e30836fff4f05cc9c4f8514c7c0b801a3e056e73745e39498c3ddcbafd02727965e362c328e4fc4f38b5e1c923c8e3989e3886b75c48ce25aede591c3f087fec89a24845b567757c4a0db37f7104180664d76284be68b641c9af4cfca026a62d9b50d153fb70947bd531858d1f1d664b31d6f10f2529dd317f349e5846d38200084d5c9a44d20b08f10c83aab29f21f228dbe553d48b8868fe588e248b5ff3d2cf4f326f4bd4ea12703bbad57df93246e696c22927b309f115e83fb24a99c29bc83e731f83ff9f7c17538ae40dd0a3e9b3254778e7f8b989e6a9d412ee7929cd27413252bb821474db5f140fc038de47773bac3e2bd74146e3e9bb69056ea75eb636b047e3137018d94e39e7722c49b6afd3d0f3fe028eb72ff496133ff6020b2b95bd6085a200aa1c065307feaa945ba4d32d2c6304c38f0669784c4b4bcfed434110f3cf4aa25456b89757c817d735e75378ddfa1ede555353cb698e93141aa3e3ba2229a0b58f7a77c24ad10fe7d973a800a404e98e33de8977ca729d7fc9e244ee5623c9141aa0a11359dc4f7db326db06fb411963e98aa254689b866392f7add84a9c84e909c4c128cca02bbf2522fe14df4828ebf82eaa99e6cca9630f408e533ea49f665c7f2f0b3caf98bb69082fb55abe0789176e61bb58b86fa78c1c828b6a7be5a0cc78b3e74a45bc55246b562448b497013af9e1c1e4f78413c0524123c3a70f97e9a934eb03afe61ee1dd1486ccf3727bccd3545ea16bbad8557e5c4e0ec430d25a2ba22b706899aca225112afa1c8c933709c2dbb2cad059eb08338bd0a667a8443288ca2d844a44000000000082003311002030241a8d46e301995c3219eb0114000449a28040a5c83495a7729a524a194310111900190001306d0067c2d4e72db853deed66337879cb36e5b462f91fb148f717ef7a3d3826d6d840d8438332c06874f2fc34e139496a3036354ddfbd33c7f61b050c2fc2bcc7f6f9b0a792d46fe45fcebec3e4db19aaa0369d0f0a17330109f20bc620f97fa66934cb91b8c0177c24acd802c0b1139c7e861aaa7f667a9709f8f31acf208711fdcedc08f55ceadf90796c16256b1327e4b938a830dd17cdef7951d2711766f5956f4756dbe6f14da39ac7f95a5e26ce292fa7f6ed2890197c64da824e53368bffc60d593362b1c3013b784a4880fb0591ad5c10c76bc9f0dafbfd07d2b63933bb2636cfa6e2172bd6b872aa791ebe974e41a7779e79f09a2d3272994d8ade8758baac6ec953bdd923cc4826f5379e4f1a838214d4313c8512e2d281e687243f96bed1b0df19fa73a2b29479f851818d4efef540401217f80007b0250ebeea70370be3d991b78bef07b81b10fd0b695a1f8d582698b7aef727c69e940fb2de229b184efb5700b890195c33cbe37d645e7bc27becdcf17ec5387254cebff2e7346016668cf4f3cebe47e1f0db784b7ef0c4814d0587aa40e8fd99eecb42f9819b87be7b3e6d12001af6d283a48ba214eea4cdd5ff8f889a55d2d84539a6ac4045366643882bdd98a0a7c795e7729c1af91462ce0ec80177be173689b19ccdb0f0ae4aebd80855134693a79247144df023b347b4c353eb5fdbbedbd303f7e36bc7ae85fbc8686eb8eaee6aac3f90f19e01516dbfb89b3a608243cfeda8be3d8f03d56d45248abf5f5a23363920c648c650a34c65640a2f31d4614c8cf306780d8b6d6cd208ed5d4aada591f297a635b4a45a886bdacea6430029aa97814761d837c88eef931bf573b26d07a8e366e2bfc0c8d91f1f9adc545a9abffdab35e9961d2b9cecc51415892f8ae6648f7603d2dda01b3572a55d1a5a24c7d0b27da3aafaf788c12083ab19f092e3e5322ee3d67cb1cbb099426f8db7f5487db135afedde3d3c028c43e58970bd8ffb5da66df79ef02b0ffce338cbd837126bb06603eef66fcbc9800f272534cba1cfa3bc02fc60043fecb7ce7833a8bc7986deef479ef8c0318d135bb91e0edf833f6c11110ebdc01b0f0efd16de9c577c8f749df720bd6f4952cf51580a367d9f57a5450c261258cd0a85fc978803293b54b6e41b96f9ab12dd0bcdeb0d7422a69379f2e127f95407f6d21924c40ab60365b345dbd4919497627aaefbeb1962774c715cf41621755e8c7ddf17b4da3b20aed6a9cf528711a27b972e1a092d5fc18d43df4a17db23c1b728210d48eb11b62fd3366728393d98f916b52cbbcdfbdd4089a461b094ceeb934f42c0638373410dc4766b7aa1a699a129f2a17ac50e04f622d5165b7bb6cd85d4c98f2f153f25335b53a53ff5e28c015323a628150a900bb0e69564afd1d1a00d420216d32094a88d17b02e5f0984e3e559d8cac8ac2100401c0e06870f61aefeede14e82c30e8971298ce9f0ad2c7522e708822f7317277574d81ccb734a1f5d6efc5c6f9f871604eae932c04398922507a804d2b179595e0ce84bbef56461f0a2777be639109a64782a4a3af1ffcec2e368fc582cd5e8a71e067ab6d152a703e8b99206de483461f160943d82a8fcd90c079c46f0944fe6086f0b5ec71d3da037bbc6f862285c337d636fd8785f66c585ac0e26bd7fe9d6017135558b71eab6af8d242b9773fa46e18c83dcc077add83d4e3a969904a3dfdbe23ffdeea7c3ff34a0a5fb9dfc6ffc294ac008f67f623f9f3f9cfc7fccf25cba24ec01c225c625471860935e72168ef1d0a20fb213cac6cc0c23e3136163c91d1c3d16d16b4e4aa90d72918f376ca541782eab453d1e25f62b587f3e92bd6661e8beef009080a4b40f500417640032d3c162b04af2bce68b5c305f5278d470437c2d8c46a1ee32991532f675370fe4ade31ee8cd7fd3d267f9ddd4335a56909380649bf3918b5903793978f05482e187ffbb0f86fbf4a7d2b862de2d33fb2e1c7fef4f6765b14348dab8c7f234ff5359f950249743c317ad907e19abf0b0b09e707dbc3a81bf055827f067c4eff81c323805d09b7941a186f914c448832e0664f9d5570d37207b72c2cfe0553573c2714ff8c5e9f90510b370b071936176fabc938c4fd9e02cf665565677edff1408cf777c57a19d3f3579d0d7f6a143c2fc043e7bd4b7b3004e468afd6e82772780f70868d74e66b3e46e00fe9fd3b57d278cba49ee634f88ff1eba2f42616d2495170b2e9e7eb0cd71661013cf57e773f3e598d3eb7597b81cd0ec93c557021dc8ede8740a026eb1be8af7b846d1121aa5c5820198c25e683c00f58cf3877c2117f42f10649be3f3d88cec8196cbacbdc3239f953341725148783bc695d3b7f85b95bf9c16ed42e81342fd3b16b1237a5898deaebc87b97121aca83d1b61ba64015c0cf22ee90dc441024bd0573bfbe51b85954aa7fc267b35b2f4e50dc74187121470f712776c67d1c03a5f81bef8c3997c91d0119712c92e22baf8d34b86b7accbb88ad1de5c59a62337e30fc08d20e34d5450adcfafa98905afd9d948147f9b214f788dba91c31fafeb8a828e10870bb66e3c83b5383889574d4dd8776dc55692f1e1b30921325897aa1209301bfd7fb263b3a4f2e264e5d8beabc91281f05b22d9280f63ae6ba0e16614d264889a06bd79f0d7143e699ca76a28340aba8768df4ed772c767448c6f86eae736d3ad5bdefbd61111b68689f1c087fd6a8475a35d00810f7e5e3306c26ee1a85ba7e1194c96367770ceb99d9e5debbf191f96fa5a07a29f0de85f723b53da92c6de4bd3b7ce7063022d72ab5233d504597e45a669b49bc984cc7c86a0c50c333872bfc353fa292d2343816f0a52ecce228e7722a3fc7d755d49762a75bfb785cceae3645321daa3b6fa4569515ac792be11c2c4af7390f400b21f2b7d0f00bed97d0ceddc08e27c4b5e6946d43c4a71d38db820afc513bdc5549b7ce23cc6e0047af97274dd3770aae7ef449889c873ea7d85d96dbb80b017bb184b4a8cb4f03e6072a964a2db2137ae19f8f797c30f8e38ea22be273d0e7acf5e7d2680c1fc905cf632f1817dca59a2292912664a95af8d8dd0df89613d0432f9b3802a8ab3547252e61d746d9c666188ffefbd99f0813970b7744ec60cd08df790ed0e199ee16fb57414588d1908df7b9054fe5a7d1b91173f678175d34f25f6a2248b301b4f9032e18cb0ffb3ce0e7fb3a8717f1bbd9a4032292e884c110e5de48ed7cae3ce2c638d735fd15c04b3c6ef3723f04e2f521b7ef10987d5d36ce16a97d1fa8b56dbf58da2cf7203cbb00722c2d6dd526abe58c5ad7ead763f437829ce0da9fe0b8f1ecacf0ca2e76dabfb846e164d6be5f7d5c260dd4c5cf9fe3052d3fbaecb86a21f31810de13fd4e333f07dbe4f27f3b619372deda62821040f65c28b3c6ee1dff43469257cb453ffb95ff65c2fffaf66bc5199a1a1bf90ec25a73cf9cb17b0cdcbe942f3fd228e55d065f87039f489d24a684c7af164f97371ae368cd9918bba585e8701f7a3b6c87391e9b99715cf69511c58a4c017ace8e42556c8975b2af4204bdffd3a58f6393d26f5877ef50092d43323c434fe9d1973fd316f6f60a76492559af8585ddfeb3bc508abfd966b2b3385c8e35fec33a67951cf5fc0e3ee4d6874e4089c286ec07f96edb198a56ed609c38747a6d60748f24387c4f544edd7e841cd2f87fbc7e39b0784f3bfa56e12ac667e124a604c78313e4880857946da2286c5574f7324c84f3070ec0fc6caef92d11be3c6e388103f83e87aeeb160c12c040d4ba7062582527ecd2033b2ed448531aa20bd9df98a6f1286bc87acac31bebb7ac4c85cffe8f0bc2388b373434f003f7bbfbf28ec4e87bc1bd7ee7bec4f287fb794e9ae5190959596eee22a3292d6f1e029899cbe101e1879a659bb926c08ccdf3c8cfb12c5aefab4900108e0a0f3ac9cd38267968f45baa075089cbb7bb8c8ba79ab43d8fc0c74d9a5588fd957dcba2f6461f6f760819e6277f42c85a2565fc3fea4dcf8062a28150d5eff9f5fad1ec347b55cd26da8a97932ef44e98385cc3d003b4ba45701e9408c8219a9323022a51b83a52c4dc9a3de21409ec5cd4badf371ba660ae5887a8ab6fce9f5c0feb2152d7cbbe98febcaa166ccdc37ad60b32bbcc3753150edf3388e03fad9e3bd8d9f283982eb387935cfc9a968eb87978c96456c0b9e4bc4ad8e56ed09e025efcfb5b2f27ebe00fd70c0f269760e9d2ffa66bb05bce01984b8be9efce1d3a7c3c08fd111766feb80886ac3bffbeaebb97accd41b143d192df5400b7db0822fe32dd4bff639d16bee03d27f1a95398d477e27e6890bfd8f43b332f384d94d7af2a6b796e1c87bced9cfae18c7ebeffbbe11f2ff7c211bb7f90a543ead2a70bb741d378823712e45ed8ef1d7051eff1ec81a197795676111dbccd3eea4c69fd756debe6c38e060d13525c7058ad1e784e3a5156413b87cba7d8258f54e953f08337e213ff0349c0e492447cc8ea6e48d9bff51723aa422c7f99525e86602f606793d6c2a0807403804c4b48bcdd9e3374c9729d116539baa29dd9126461e61414e133562c39ab9b66c1b7363057492a24375111c997cec4ba0882540a212b8e89050066f1898f6ff473b2289f8771ef8dbb3f77eb03c5cc5a02e03afb9d6b7bea184d821e0260cb6e2baeadf83450ca4605d81f51fd0cef18e350f7c4d2e596dcdb51348c31a9c6dee1b34d01f1dafe116553c9a12c76e5a8e99ef059544b90516db95eb245fe0c8b7eee8bf0dc3f0faaaea82da24213ca06969739d569c982130fed2a490d620476073ac604873246ec8c9c695f227e6a2213b8e19e01724fe4e2696da9f78185f5db1ae51b8afc35d80f7dd974827e237d2c6c0c658d23630c546a09eec3b9d664ca0916ea25a06e37345d4ec654781a0b0dd7ee5ba5d0327f660b394e3efecdb5b11d39115f30378d5c152a69e8f27bbc2f471d0e30e01312d07ce2381001bff339166a48486b29aa3e9513eb47ab52b91b99cbff060baa524d2897bab4b565810f61661d2a782abf08c01fa7a2c2ca0a34616952c4a7f1b1ee3b07e44789b3df7e66ace24fa507b4c6386911ba412ddde76e02e5042e3b142f8d68b08f7678d03c9039c7e66d082c677bc83c69cf2fb676d26c037ee7b6fcb592e47fc323f18f26a8fb3d19cea680284ddcaefada1af60d027c2fc96256fc4bfef7ffc360ff3d0dcb38bf58976dd2dfa2db1f1a71fb3f46e9bbd21ad600da3f8f9eee132ff710cb2fb6c7de13dcd97f8d7f97bbbcccf12fc99626b723ef01b650d703c4e7e5fe9dfb78d99bc7d60a4263a3df351b271b10a8ec73469f0e6b32eb21b5f266a3511fee063e21e18ba1d3e6844dc19e06607714e8da65c7fc642763a042b2cd62418c9fbafe17cc3b4b295e6dfcc7ae31a74a851f419745270467b778d225f6efde3fc3cd07e07a0cffbd41e59670f39d3d23eca2dd8bf97c39ff2119a8491d72a4f7c2edd0780fc819e9e0a7a33b1adb8957fa599349adeeacb0ba0a9ff6c1cf91c44f391ae5e21d79a7b146a39c7df9fec77dafdd8b271e2b5eb1fe717e430a15823267974e525aad844a108c698203700605f5b8e33677eec4115eaa8a45e78637cbeca7c1437a9b171bd159bfb1bab9e827a6a0586fbbe336e2e83a7425cacc0082c92cd475b6dbb56e90de908f9279df0fefbb8f63806336b215720139cd1bcf2051ad1092d19312afa6dcccb938ccb298e9ac9c105e89bf833b854346a2742ab6107106022be163bbc677100f1fea24df7d819d0912a311efa7fac75b24f1a11a3e303ad95b3e738c62568835fbcef88bc9fe0c578cfd569810c0bf2671a5ba5f9640676ea60a632f9f3aa114898665c9a22f0d68fa99bb5ba92c6fcc941da77aa812c7fcc539870c7d5709ff3c07ba360da7a6139dd2c518dc07e7c6a82f444bc106221133f0bc6558b9d7aefa07d009e2ab249d35dd3cb7e5d33e33413986f4c3792d3a3c26cb0bcc7dc3958d0faa8daf5e96fa5cca558a6ebdb6519e002d10576956af89211024ae7025cec2d0121275cbff13ed6795df0af9c127b2f1b491c62baa532dd325acd70ca03610385d072927a13574a439a9fada8afb02b648b6babd421411adeb71e6175857fe98cde2af43131b2d6aa1ccfa56f5355670958f0181af21ef0f62962c5a6bfbc9f23140e3bea37daf098a98720bca5e80559a173f434b932956c8a885a3119631c3d6090a5cfff2052f68275d467f302a596296d92fa1ca7bb9d143e033e02eedce94d3428788d32f1596e78d85d809eba6bf86033c645cb655ab12d9ff0f321c59d7378ef614e97d866e6f0840bb7b767f2451b60b21933c5e337aa674300c2c6a35b872a484f4bc733e1591d786f1cf0ee06798fe01e2c0c4ffc85c9735764fb54f8ab2bdd81e62f95bced94af7df9e7e9a73888032153e0507cf2faff0d3fad3f4f6abfd0ee83a2d2375c836be207c313ffd07dc79bb262611c437900b5575e72a978943563c18f3922cf1bf3b99f1b8f97d93c22d84cfdf920bceb5d7abfbdf10bc9ed09876a7c0d0be0dbdb0d5e8640350da33f3e2ef3dbd6f1214d76f576ccf9abd46ab5f4d69f9e089849e3307a2f745f747e60d5951ea9e0f3e63846658613bd4972cab177e3a117d5814a3097d5e5847b5105e209e24b1458d06d85fc2e6e659a0f47af14bc744cc9bc7d82a28c91a6b94949ed960a5017964fa5dc88d878d9decc9b4722280e26c5befc0373213dda71b0df9cd914e8aa26b87312488fa564849a6d56483317f81a3aa63aae3a379636231a5d7e9d5a50eb8d56e75bbc21da373d5c02476225f9025080a1f6b3c1be8c3b202c917e1a982e3194e0890e00dc01c211f1c0129d3da2dc4a351a3dc67b6756f708e1edd1109129607f482388ce4696c16a891fc16dbaa10a2abea34f4e01e1c33316c9fbbacc45a2dae6bbceae87cefb78c38f665c6454b7b61893396be7595b23e520a66008b6baf537f3ec3823e2a040e7792f88fd5e99da28e0b799a1b8660da03a6f0f700f2dbfcd7d4560cf5b03d8cbbb89f70338016ef9fd663459f535796a7d3442a151d77c07852ec797fed7bc7e8c71356c15f14ce9dcf71f4d9f38c27db6a279670eb710773b72b34491682142f1eff837ebd8b90dd37e7d35ec1d946cdeb4438c5605e69f41f02060cbe722160f3d2962c9bb0aa7876db7fa44a46bfe3b1bc777699b40ff75c36e339edda7ec98bfb55ee677fcb35cf22d7a106f778082416d9592d921f7d70ec92d8fd2e4adf3cced37f8d9e826475d5ada2cfd4da19e99a36de51ff19d018d6a78080e68edb9dabce91c763bed7cf26bcaa5e1b9da92f04477c59c5626b1f9e2a061b86a3df9f282fdf23ebb764a3cdda1e0a4f6db87a4f802f94e1a9d54cb1709519e0576e6bd781ec7c11b66b88b0d8e0c9437f0294c9bdbccb610631f1829bc64516b8cd99f5f7fa4befa5d21cd433e623003375e826292be693868cb986834ff400b53de749f36de7f86c1f33235b34dc982edf7dcae5b758cb6917b4322bba2855f3b5056cf2a77a2640bff4cbba00ad9e0cf9f1dc8a3df63caf88c4e2a3cd2f174d7251ae40bce60e4671972fe05e1104cf1a89c3ff060e4e288533e1234f3c2dbc442abf06a911e89f33f0dade76ecd500f7c3d63e60a578de3f129175f13e4e341490abe7cb76fd874029ae139a6f71cd692e65343bc31b6aa13d312dd02e3b6bdea413a7e85918b81684bd802d7f7255840d0eb41e8d971aa634b08a51ec46560b81bd6f4278b18f10af36ff683fe571bb24ad4e2cdce6cf3be21d02baaacc2594d6e9cf259bbf19292e7d4ffc0626b06f35c3cf737fda7f8e84fcfca4777606204e821b601bf5b9251234304fc88f4dc1b443d5009e71348e4700736756e74302c7047a37b7a87635c91cbe16b9cdcf591dfbc762679d922d5313de796a6efc255a9954fd74c0556852b6d823bc7ff174b081d89103cce94cbcaa59d12809551db193c3034317229d3de5ec5c920d9284581efc236e005985f1c9e9ff8ed93c77037ebda49b12caf0f954d810560fab757962f797fbde3fb685fe7fafb385b640cff582e784c109ca9234f055524b2542696fc0088fbfff83d917c028404331168fbce9140bf6a9fb0de8944274df15e82019c7ae2dd9e823f034ca4829fdb48d7b633135fc203a05c548556f0b39a2d635a1eb08113cccfd9e38ea2af5df8dbfae983945dd1c965ec237756ad3679cd542c5e89892c8eab73a02625cf75da284cff286283303cab0d57cb70d7a6d96f637975f031aa672b0fab11f5e748bcbba2f29048e3985cb48aa41ed2da9d188ac361bbac4eaa213bf863f27af02d9ad75b1780cb0031a0c29d1c4fc94bc3283326349a5c00f1a552880898c86084363bbf56c985df72369a2bd9dc356008d3feab4457055bffbe18b15754123cb5fc92639c45c682f4e937bdbfc1df161e6c4928cfb6c156127e73b6b88cc49c4daa81c0eb2f7187776436cec8dde960958b25bd9246851b14f615f3310152c97438e494b914075d0d18ee5b05b56c0c1f430f935e005aa237b5546899ed3f538f4bb59eecc9557e0667c1893aeab89f03eef1e44b4bff5df58f40277d123e44287ce2e2f36703f352fad9dd3f0d6f54a5ff1a39e0cae1c30b9e938e5ff16c1a28fadadf93b673ae933ed5f5af92f02f80cd3af9f57b6731e79fc6f007dcf8847aedd4bfb1c03c8673d30e3857be5db2783a46a09cf3e0ade37ff7b80685ed82f21a9b3b72ba6e158fa6f8b4c7a955c1178c7139aa1b8595bdbab102f89123274ebca5191f17b31e51e945e49ce35e1e857f72b4e038804e7775dd2f228c5060efc8ef0681a1674bf8fd42bfe11da9ae11b727675c1a8fb9fd7be4b9061c9685e365a4f86931e5e1307b340006b1f07d0f7e2ee533719595f703fec189da51e971c313d688aec77114d2f5c198ac1378b2aa9d59493cd8fa54d48f12de1ecc7ff521684749197688369170ee428b4ffacc46b0a6fe3ecbe520f796145ecfcbff99dce7e98d03b99760ea02ecc098136fa221c58f852bdc6eca7dfd9d7d9ea28f4b6c4698963b9c018909f1769a58e3e26b842d47794e1996e07b2dcf29bc9a94dc10cfacfab309d730d4ea7d953e67339699e3090b4574dd0cb07e75c002898ba5e79ed5e37f7d85f750db71594de299d944bf3ded02a130c0baa9c68b247bc951044561c6b99385ff798c5c011c1922415c6954d8cdd232291729890b2dd9a169d9e6c8629da5c8a88720b8120b800a7267e7ac6251f8825e5fa4a704d68d08145390c10b94d3a55c3fab840c5d4a79854e09a3b9506d05792e5db8de5ba64b6bdddc2d9b91c0e3f982ded97f93f1800b741aa02bbd0f98ef62bc39abdfcc2f33147f39856421318cabe4a04fbe45474b2ba79ebf4324b33973f42aab962d35ceebbeea6639d5e8d39d8cec5a16015d6bdc5003e51ccd0a8f66aad520fbb8db1d0bc62798d3623e31fcabb6a4e89d3dd6d23cdadf11ed4dee5e1843fe483e3348b2973187c3372378d160e741f809f1126c7af2e7c76afd06e5be765177a715075728fde53511956a2af74c714e3df8ff7ad2b232f1c3ccea097af740413fa41359cde3753aaf04b63c7ff07d26eaa3a5e0950594dfcf7d18039dcb629693b10ccbce01c4c368e7f4e93c56cd7ed55a1b9f1572e7fb52a474df5b18731adba83da328a4a71cef0f1c69cf32f4ffb3b05b0363a781bb2b430ce62a7139caf406cf4b4d08224f3ff4d0d7e8d177ace70c1e8d852578bfa9678e479ebd036071a523f489846ca529efcb3d3d48762652bd2e7de4e042b1b110b0214a626105775c7b566112577019839232bf3e0f0ca5ff5d7bd341a39780a7d03728a27b871aa71f0ef35f7d0e2f5cb44715d09198bae99de78810c62c5772e5bc04f96be5851c2b1065f14853e1b7ca78e3a8c9da02f2574d51089e94712021b9542d9db7a1a667ec17599bcc86d7b1e9fc0278ab7fcff78bf5e41a0d047d841c505afd7cdc0bfd9abb5c757eb2e4bad3edce5657329c3cff3d556ed68f7dddc557ce5a54d399f0c203921fab3d7f78ff5562af1b87a5b78450b874b3c41ac60b6e14c335ab0f4cfee296f7b33f7bdaec72759a37e9c4408a56d5864cdea2b44c2d85000408e500663576045006e1032c3454327fe8baa3bbc6e423be69f2c956cb15c156f33469513d7517d69a5b3380c63289545041e86691399490a7e2132747f7e0ac1ce17aa5409066c619b0a5a8e8983b6a7668832e30cfc46b90ce0b83720aaf3b6f8f31753baa108d503fe63631aea5b9bb117e65417713fe8b699fdccb3d8d2541b3d76f0e87c99074034ca10a8489885a99fad3fef2d635649f3e050502c646e407448f675256aa98d3fcd68dea98b432b2a97e4b62ed35946d886774960bc4b906b60a9016ab9e1d1f97d3c789b77bf54576d4bb19327668c69f3ee63ed0dee641ff51c8fbe53d13bfa8a90f51792e4c7714c6be8f8f9f0676375f7906b4a348fbb8f1ddf3c74027e336c02868327989d298cda0709ff7c3b673a61f5cf9d6e0fca8607bec1ee133cc3fc07ddebea084c9ca187327fefdad4b7fe6ad0a8c7dac2b9b662f5801c43beb02612703d044e17ce5ed9b2fa3a1540bc3685edc148305745384ec92bd7f2946a7ae013f39b71c3dc4bdd9d8fa598f2879debd9fd48bb9c35f8951664ebe9e73d9cac7b6849092181d3a793292a3b8497d17de620026b2cb66eec9d8c580c353a95d176418b7cc8896e37439caf63579ff829b5c7bfae535980d000ed9781f400e33fff80cf08f5df2f88d3c9f65a204a1321b4dc2e1b17e8f08ba897d48c9ecd8c6b56f90c028c6b1e6249ee60b926beb3948ed3707955bf1a0f771d4b89789589c53e5f557036ea8039dfb1ba3a94f963f6cfa1627006d7d2cb156e0b9b9f518da0d33e50730513fd9c359642a1d673783c0f5b8f4511c257f536b5d8ea91598368fe27b18465458bde5d065ea93aa3040a183cddc423ed9f80879e563ba3d16ac476d259bb2b33f4cc2383796f8d359c0aaada40d275a3be9330ed84aaba5c98a7645251e950f9e7277010fcf00343b7b6c24cd6e8844197eec7d897b7d063065361042d06153bb33adc24f628e342045ad3076020c2f0e0d5a4f44d88bb9aad963f9b955bfe7eeb8a71a57fc3cc216ce847e1fb0df74ad48b78d03334bbb6f5f711c4f4711f32cac015cc519d8bf5d9673c0604503f2b3c4d64cd40df37f0b5f1a6674a659ba5b6a5f0716c239f29be87df7e5673e51525ae82121c786c5932a232734da2d8cee70f4d09769db9e3c4d7f8aa51f9abb9e64fa1c7a3e994c5bc3683f5d3949bf56b89ca545224c116fc92809c10d68bbc300c7f3be7994a53afa4dfb31e94d67f8035a2131a10986354d734c753eaf05228113609ab93e3ac3b9d0e9c1d98d7b11839c1e2a5310fdd702ec3462a628c3589850dbe778a2ed4dd03c91dcd46f64314b499b8e84583f1c8139ca3b0330bf3a93d6835337ce071e43984f08384c41cf38b106e6fda9a2ba7c56414be1f602b3cb2ef3983747ed17e592ef110ed6f3bc6238a1460d3045fdbeb7cca0d5af2fb06b4adf64eedc2c746ed1aebf370b61f110fa238c06db7667a4769a2f01a06e8a7d47cbcbe6a23a36adde79383ee78d28d1fb844c47b07d89db6503ebcb9d912e5f37e1d3862356d57b1c6dc153f533e7715408f0c5ef11559ee26a9f0af0b3f9f51b47e581f888ba96878230e5996659228ad3f55a88dd5e2de2b410e9db1eae283b11b7eddc72767411c6e6e0d9b888bf2679c0bf0382e0b8fa7ae3acf90ccbcffaeef31169392f6716c880bf231170d45506c053f982597b87d97787bcb80cf54f5b9b416605a8bbf7b8b85fa9babc6175e4f7eed2b22cf90dc20beda567f5e07760f9d8657abb405cb80e680f76bbdc2415c59ebd74b3ef8e5edf4c08130ec34a4760f1d315617d704815ee1a8d7c0da2c1b0d773fdc35f828ae3b90e93578a26ffaa6e0a7ab68a999435130c888eb2ba6a73867715cd1d32039a781922d2bfa799aa1f3a8ad96202a43b490444e83f021e9138c50938699093f6649c4bd86e02901824ad9c642b9566256d0e16d3a68f864245ff90c0d74c2a3063171371bfea721bee596b86a3d163fe7b30b28e81469d8cfaeb1fc5ce5b878e97e767c58dafaae0f887b3c1636380552fd219c43bc1f4c1e35775565d1d6d5afb0957e3dd7d6e51761e13cffefa3061d15d1c36488858b86f272f470cdad2075caae8e3225015a71da6d9a8b89a522e35be998041e2c6d44fc8a984a542e35a3c8045da4d0a561a92de91894ec6b32f781a36fd4876248c336f45c890c5a7d9de11e2de9d3cf77c1310b8be94202b26ae6ba76056c4e9c6a2dcbaa93abcdee32b5b78fd45fd9d3c8a92ecb002dee48d613e4b1c71ea23d717ed494bd1cf3df39a89fc303d2bcc45feaf1d3627a282c8bfb54ff6d730ec34e3e8f23bee9679ad56be8d0362c736b0169615e246b5e1b35dcbed107f24574a9cb63509c5daf4071d77bb89c2c58be99cedb9a845a3911debb239255efc38934d70935d3be0c5a5d3209c91435fbe72e0f903c43d3254d7351cf9b73002055781e5e71ed880de53ecaa5866b0097cc566e831d918e4e8e56d779205c5360ac83db4e91ed50a38af8d8053d605d4cf7684a77f9ac2b4e1ebde0170231afc62809f4ade0f0e81952258a2d511d3f6f05100bb638bb2cfaba3441ebbf6e535b959a27ce51c7418c879079e4dd6f89737de97459215b9858da27fd9470a8289ae4561ca1b0bbcc2d6ec3d7da2184f851b0af06e4cad5a4db5784425874357cc43db6d14f0ef66a7212a05c32a3b2618c52df69a216980f7b1be66881c04aeeaf6783dfb24f7eee43e4bbf876eeed0d9c4f81357f1ab65eddc45414c80e8646c6f1afea416f435aa272a5493968722ff8e9d339e17f32742cc0b992beca2edb77c0a90d878c3d029af8d224d815fa9684453bbde6846463ae6ab6c34113ece4f3c9e2d3c46bcfada3e28eb14712dc93a81bddf86ed3035a59881c5f120810278f07ef32a25f5a1f1a3b91854285ae7d46763b0223663939fa150bbc80f35b26a24edf9b64807408a319200c4f7fa54821e17170bc887061a7c22f13e149f0296cde463b448de728c201590f147eba77c81b90436b58832bfbfa2f3cf751147f75f7888f5dd954316223b1874a79951179748fbe891d71b9fc1d20855b63caa00670fc2eed2a0ef3abe3ab1ba8053d66af06500e692287b7fb13c9819f604bb730e7b3e61813185a1e4a50088cbacec7513bcc7533b13e06b34ff416027e3796b31266d277940f5cd6b25027eec56a5c088d4bb35c3278fefeae51d50a78b4764b2289b1bf2c87aa14b855cb537bdfdda282ec714dbca23531aed0dd6ad0689761690e908f15d4eda956c742b1c4aec0a7b2086ebc7c9d1e4754cafce446694739ad64a117b1c3c2d858af9edd9f3a34bf290ecc604942496e4058572f03ae580e5577543224e97ddaab004ada360be15f8c5273cf894d9313df13c1b511586fcd1e7d1b46f4f6cce562336c1e3c291db77eeeff799ed377ba1a979b44521a86d07a42d4ff60b025eaccbe720b9725e3ecc1a6da1af9ae004c04df572c1d3416babf5d401923381d0249c205a0870d92645345665c41da27e1343022d30b1db95655daa0ea0ea96a22283930ecba8ceb096f76be08a5590a3cdc7c26ae631759f3ae3a6b8f313e1abaa168666d8749e87585b9c07f549dfb815296c37ce693daa5dec5f8469577e0fb02c3426548571c16edcab0f32d6bf85266a10e504e74828e122e0a00f282f45bfd5332290fcc7a61e5ad00038c64531471462e0393c2900569f1c9b231499bc19b4dd019642018740275bca9c21a846c1486749a991f03476bd92c2c256b6a04ca570f5123dc3194eb08c4b4d02b092025bcb74ec55621cba368470fa9ab6a9ee3afaa18cac5d4bc312fa020faa63b2a0fc490d06dedf93e90d2f485acba612a5923761f63ea7fc4f62ee626d239e3dbb1a90a980301661a7ca63873159be22ecf358e8cdaeeb08734c6424d0514587d1e63c215e0cfa2d950f690c0131b06e21797d8e493c1aa24313c484097c667bf9e433f86537cbd8c83b517f92b0b3398eacb44bf37f078f26adb7aff5f3a7e31cf6d40cae867f2add234a8bccfe461e1f7e96a5d1fcd80e53d034c161a02394f3c609774237061dad2fe07485fbb46a6b716d44b5360c56b657286629c1ba5856cab899cfc681f181b80d299deb13fc4daa6bc7fdd0023fb31871fb26cd1743f84ff5ac39191e98fefb6eb28bc0476cb4865caece93a87a86e9ec12368fe7924d67d687b4fb10cebd487c118ad9299dcf5199577d84229bc0490487958e24fe3023c294aac7ece1f97050245c41bac029ede2e6600ff4fc37cebc1157373dbce1d8edb69c2c51cfa0fd189265f57c04654f2c55eed7998cf805e60b22bf5316b348ef38439c01412687c2764db781efb4f2ffd0306eccf260ed36a6f771358ee299f5c11fd437aaa7fa5cfc203d6effc564b8f5358cdcf3a5b806f6f7ccbf6a42deac0ab6d9c5df8bcbda1b7de65f59c0ddfb04bfcdffb811e09d1ffdde4de5de9d5a16fff332f86dfc3d416abc19443cfcb2dc759dfbd898dcf75195bbffeffc5bd4cfb898b2986eb3d7c7c9d82947fcb71d2d2090dc0023095aecf09813167e76df935b0994ca870915d1258f78b81c5a65e7398157cdabadf5b47431abb52d8c1ef0611897fdb166b5d2469ec36ebfd98346f6fc35361969bd092795eeb77d1bccab878fe0dd92e6340f9e48495174e1561608aafa237b485e00f69e63df905435608c777e1f17aadd67d0669b3855cae43eedbbef29e91c183e31cb4bd71cf6fc431bff9c16af4ff3034dcc45f88f65b2b6191c1aa55df655eab3efcc07e35332afd0867583e0991ef90e655175b98d715398ce1d4679735ad0313f48802fed26d42f83fb03241c355d7f9057243166f94b379c331ed33dad9005ec20195238dbaa7e10369c81113c07ea1d60b57755c66b38f703b2584dfda4087f74a57cff646476a98169926d1bbb0ecb8a8b37ec9cb2f9edf9aa523f427b48b8145231358cf829474425dfa8d4a3a19adc0f24b38d3ad06f1d45dc7746f6bac4f1e40a730a7cf482d50af4121dff437815f4ab7eecb6ed45d204f7f2eaaf55a8c367e32cd526d9af4ed3c51a125b71abe1b06b58e6bf51ea618b9e7d0b07d6a81765128739c05fd6ae31a0c18ef6022679082fb8c0615ae14af2e090253378d57122c2f47ad31f593737b7870bb12996a22029f403a329ec7d5539bdc4ab1baf17e43e02bc3f592f287df01e9bf72f4605dc87688fafce6376ab7ef4f957787a6c92fc342fa263c5c33913a5d0b8b3b237e12dbe7df63201ad9506ed534550cfed4bfa7432d0b6ebdca3001845910e542059eb113b019ab1f50f56e7e938566c6000b5c8f6935ac4af17d23d4c266c4c81ad7ff429ba7b5cec54fd5ff2b936bae4be67e0b3e4bb046cb1ce41b47c8ba91c8af0b8cd3b3371c2ee7562dd3879e37eff31da9f1591036d7758a053214e5cb84e245de7d473e6b3b4d7484b20d7268a47c8e72b3c1f83cff163715f93bcbf786be0508b186293d1b17d7b0f6981d08691238b5e6f6265ee0acf7eca19b540e4293e0ea4bf9139d7d7a69cbe07f277532f47bdcb75d0beb02db8e9eb1dd74f04546dde50c41c628c571d42d3b9b09ac0141b8df7fc21e9889d8c481c71401530667ca4fa607620b49e01b05a96115f1396431d693cf71f17ea87980524a87eece6e2a5f0c1fdbce7785250faafb4af55dcdfff17eba8b1de7daa0639d901ea265cd38d9572332321cf2b82bf5ff439f917cfd7c34501e46d9bb2417b0b9ce2618fa0b3d97737b7f3590e7daa5c81d76f0e9d4ae5399cdd2dfed5f7261cc9b2ec7f2fd30df2eddbbcf90b06eec0b7f1c57b84bdef76d52d1cd24ff8d9cdabeecf0e6f9d59f749ccee8f6fbfb7f33c7229b383d788dae62e50ce2bc83050c25c1a056398f90136aa014954af420cbe73864d124192d6d713119c99ca1a6b08bc26d6fc16db4eeb83c3863ee63a752b9019f2e115c9232f83d8be86f58f4814081f8e808075bc4ffa7fc8e85aedcd3b6434fdff6cb3efa277a21a335fb05dd087f6e32bc50d7ac822c33adfbaa7fd724c15dfdd507ec170e6fb679b7997bfdfda6b376d3cb0d410891a921d1adfd77ed206690645377efd34a19ce1fac58ffdcaf89b9c8d943e5e87367a2962be4407194013bca4f576bf7089b894353adf7c01c7a3fc9f14b3cd1ea5b14e6d2d18b77e079f05caa838876e5201c2fc3abe36994a94a868e552398a4bcf455a9160d411f2535c0b2aac558dd597088535904bcb7136094e049cd181be903b74fd34d086f4b93a0d7b72a87b7bf094bdb7ae70eb9a2028de39c4ce6b729ea846f547409335facbfc14427554d2ad6db8378cbc8c67ff159af7ed345f6d52462b7a57688b9f5bf2de11abd7ba6acb5f27b8a7a35b7ed5b8f1258d346feb78aec50f01980326c81f68bc3902b551df902a053b6f74b101c4f1766ffbd58271621f4733f04ce42439bf5976c029d899a3bb0734b32ec873b742377a7fb934695a2c0ca81b75cfbde6f2db8b6ebc69f0a9004b1f958e85dd92d0df706971c24204c078f9cdd4fc9501444c53b27e6983c3df88fd1b528ba54aa39e55d8bde3a8f9322259444ed39027d70389f388c7e9126f6dba800e44f0ed08448861c8a79863df96aa0fc06c23be81b2bd9936903c0da69f219059f697209354b956dbf226ef39d594dfa781828a2bea4f2eaaa97f707813804f51289d737c9d64f36d590df17c263f295b78e28ca51fd6a60b1f98a1a5fd4697590e8afd7987ba5495781931035356b424c89883fe02acfff2156b06ce812bb9b6e0d9efa58c041b83fa3b30bceca520fcd379bb9bf7d506e2d0a8b2ce92c4cfd36c6cd9744273f246631422f029437bc946d8a311f7c400852d611f8352299338cf3d4915638b4ece99ad8cc87d0f0cb2ecbcf7f4167ceadca1a506992196f9687fdfe37ebb2105eacc5a78fc392c7d1a1a9a47059e7c0124e959e91f9e6a21ada03f5ed45740aa7d7712d874ef1ba2f8de2c7665cce2199e4a49924209bdd36fa7e07e821bdd6212ed86e5b41f45105470d645a55aa64534cc42dc6c88d8890e892ac061bd25697dd3c995053188fb7bfd1d2bfa30e9fcadbd6721cb27d2bdb2cd1f1e8475466ba6c58774c5aaa01af213f519141c78a05bf61f5ccc1522e264c84e6202fb3cf06d69a36cc8c2c990e1c657f2b43d98454061d973025bef7295e0ac6176fb75bf866e1f842fdad0e3021249b42f9376b97312a2df636a8b5f0780e2aa25721b802c1ac2330e0329426297f18f95ab7af49e919da965f435396aee636f8585c9f5853f0083ebc6e8ee28da34929a47f1e17013ef38a6d0eb79b6d0fb53b863c13bb6b4cf228adff2a34e4a0fd9fd25ab77d4bad576d3586ad60c06eba06ea773539ebc96691b758b7813368276809ea2daa347b43e484b7b3d7799cd2c29a6c483facf52b2be0ad28954c8d3a2c00af786d078447f67bd2152928f96df58873f4b298a375ce8be53eb4c580d35f3d75e728d3ee38c0154dcfe98e2544f4602d6a2678de1cf85a34599f236de653fb2f201b201e55c0e86ff672f22728c8ac4066cb765a57108891edce7caf9fa63eadeed95e79329413a2560e5985e85bdb5bcbdf471f9c57e696bc248dcea0611c523cbf5d277f352ae6638e318e34ff5faf374a7fde592528e2155c6d99a36eebe07bfdc1243ceee149c3dd15517639e332653de5088603d14bb97e3a8f686ef50bfd03f21515ef7adfc427fdd162af0f39193c710bc9df94af8fbf5487e1147b4219fd9ae3fef8d6faebfc95ddce320184187b261130e48967be0f170a0ab2fc383e689b5753ef12dcc8f406292a90b531b6ef4066399823fbca3adc06b4d4daa373efa7568d9cf70b612867b7dc0ae253cc14abeb5fa50f2daf26b4ffda27b8e72bebc9e06e6a56bbd7c579a6cc3f38d90622e31fe2aacc486887aa94e0ace4c478a95743992b40baa6a44e9b578bd852858a0897f98696462fd89fcd24a67b79c7bfb474b004e6d6d1b705c3b35b599e77e52fd1b64eb1d4cc4f22bb7fdd7c64a6d17ac2f756e8487f9be89b523bde4ca6760add734317b53c8db58cc796b6a074c5d861849fd34bd0f6947677db74dcb17b2e18294ff5267c8350f6db9c7eb80ec3bfd791d9d8643fbde8be45b46af9f94bfc16d80ff480e27e119dd2c85b3f8e7b44061c8bdcc0a44bfdd2c1b6e3e77a0fadf302fb932a05b3d1af9ddbb27a8104ffa1f8d8f6a0e9e3859b3a0e7635c17e69d0953874dea6660805c44709cf9f3f34bd36624cf78b74a4d44031e24f411c5ab2d0c76070da50c7e958dc2b7e814706da53403c9a5b2da970a94a743d2f82571414ff422161ae5a959ebaae1a04ea7be431d9f58718293845f3faa7d2e7a989014a960463e7c30c1c08ef8c926fc83cc0de3a16f8f00661514408b15c1a7886db0af66a97d04f7529b185e16a71b9f088d020f43aed59062a14d777497d4c22e4fd7c042214604865136e8222b44f419c817295d54ebf8921cf119522747c0585480c92af44e54569623efb94f4918b26c076d8df6a3188193b87df9a91096ad6fc27a85cfe6fedd21a2051ad629f4fa49a5f94d45222596f41476beb7bade6ec015136fcdc6f4da862a2ca34bd49500ed92de6450a5af9d56b2928a3179d06c6ed17793e43131bf67e90e7f57774874471c5d05c4290b0757567c6f6badbe8361b8fdf758f71618eef70f686fb54f72fb62de8ddd7dbb33eb1b8d9efefbe6b876e91ba8ce0830e4c320deef446bcc31ee55dc4c1218ca40dcd750de9f4d7a393d8253f0ebaa395aefd50233091a4d969ee80f03371dabdd3f9c01b7bf805fdc087f4c420eb4200c0a2c36c3d9eb0ae81efe1a1edc9531380cbdb11976d4cf8ba2bbe993bdcb0bf505fb5d608ac79d2f13504564a3ccd991c33c6400a608fdb7d827c9817504cf7f1c26cd564c2d171431419171289e667ce0bce01462635a2053e0b96cdd2c3e4eaa00da06fa198cbfc663ceb52ca6a4e1be4ec0801efa88115f5fb0147b2e1b4d531e326037e79a4faf1bb640e8e8d6b944401d01fd0d07af6b4f8fc4e8132b7fc285f0bbf3e1573fac593097d2ab8156d1959f53b973722f42f420c33927b4d14d9eb6434b65289b915298b886f149551049f7bcacd05e3362ffc207980b620cead9da472449fe67c6640d310c8a4ead853958e13e9ad70e34be1e3b7ed11431afb4ef346841ad3a42b883e2e4488ad21e38131658995a6db469c4e8604f7a98aecb7e4dedbfc2b90f4b1fe5e8bd798f31024079b8c5418541fa00848a699b574117a053e2cd66a3f6d4e3ab086616da7c1e386286f6542c472a1b6d5ef1219ecc96905b2f06814a60e147efd2c61d1a6305dfd2becbc8edbc5913ba0844d2a7bd9ba7e3280d6ddfa08eb40a332a50eb98c5bd7e85d3b1d5b58dbe839650770337c0bf842e47ad182a207caac0d971a6382d0715b1adb6a4f1047a4b39693d52bc618cf5a9d1be1b56fec26de58eeccea8d100d1bb8efe08e021b81adef28bcc7719d42d3e5c3bf2f5bfcdd175528f29e4b37c366e53b520134607b88341b81f60d3b7b50f480564ce5d1177de512e0363bd011b8d57e20599f4d22387347f19930859f012ef324cded58ebace7bc9f0e7a703609974f5b445b51cca3ab7b2933990f89c7e664376597af200c78326e8630a16cc00e621668a619083c5984cf54b55d25198e6c0a753513becb464a4127cde651a1d12b3eb9867edd44f093e80a16ad3462cdd82cf24380981dab316fd7a82278ace5d12aba434973e6a7d10576814f9cf4d6ab83a723a4254b174290bba9ef3ba59f528e204aa958de14be865ddfdecb0b3bccb20e46cfbef05431c15388cd2c0606e35c62e231bdb22dccb5f5498405ca06c7400a864159ef0b31ce5e967b75bf434469ce9feb4bd7f84a1d8ef0521bacaf0a5e5655e18d0919363707e15fbb5394721b7b4620b489dc3451b873344acf4a4c21096994c52383358fd6df17e9822454a2cf86ec0c793a96640b1b8d62aae3d33e24f626c24ff71654f4b28be55fa4b795f9c11beb39acb64c059b59ba8d8fc1f556eef72be315349de4ce8a4a1b2fb27f0847ff883a85bbc74541bad7a89c8b7a2d9c5df26f8dcc08af676badf7aaf8b898760d6a91cb0cfc5c2debcff10771ed5467aaf2272e0fe1d736472b6606121ebca0b913f44b961ea770a36277fa6fd245a4ed28ae3ebc322576082cc142ed62e2fd9358b5eef0bf893309e2bccb74a2e51cdc0cb2530e2305a25bc48c66f43f35a9eb8d8ffab86ce9dbd13d33d7b43dfad61dc9c58df79fc03305da2fe663cbc2f68613e7780ec75e0ea6c3fb5352be2db152dfe48549f56b04d7bf9690c86834eec69197bee5a326c8c67ff7fc4f98ff674c742326bf425f0de39b191ec8862654f27db0bd73226805f4c169948c0acfe668e7d1c34f303c9f5855afcad01dea101bc17f4f8111c00bad142e90015f75fc930d90d83605daf465976be2cff68480c3268d8c25abfd9993018b674a107b04404cf4469b0fdd4002e838b66291d877abf1eee87c8b7827e8b1515a7c2338a83d7e34e4783ca5e3fefc620eb0a88a061eda7aefc18ee07eb7ecc00431ebeaaaf01e78ec8bc6cb83599271dee117090ff0daff0d763bfd936db77bcfec4dbedb141fb250c6692a36b3f3a5d2aa233ae591e84923808160574a2cc4ae8b32f8d624abaca6d23cf0ca6a9985641db3b8524d4be6a22165534c9f5aac70cda3e7d90af401bc6a3a47d1c97417f1df0e0349ac6d552f29fec8d77e37f5a12bef119ed2b39bc551c9c4bea1dc93a86909d81d1a0c4c5ab14509affe2fe697bcca3075a74d09f7bc6fb04dd005a017d942c0970b54d7ee1ca33f7b8a2398d96511c0c03dd3b00cc7431ffc99fde589949e1df9745d3300243a21b981584b0ed7d59d46e91262db9c65426a4d72a4548f07aec75f9904e0bef0f2bf2729d4476a77bf74e6b3d8bbbc24a5f753b0e27b1c7e125e91f570d7ab1d0c5243d9f142ee5f2cf8b5ed08385e68893fc6da09a1ab646e42cb23f3e5873c6d85797e1b2fc7b312e3f2d08e29d21ccaee229f6a41b47c31973ca05702a9a31a77a1cb013c304d12be4466f9adfc3f25949bb23fd53bc7b1239654ce4fb09862fec63aae5f71f5ba803c48a48cde2c32e474946585d9b4ceb8160d8784f232dd0cda355eafbcd90258641b1361e97215c56f99d988afe585d99ad07383b4a0e47e0ecf60e271acfccd4029dc8092022defebee04214ff21885d48889e881026b30b05aa448afc4a122325263e17e8cc8e22aca48ae86ecca8b55a13dfdf432cdb83befaa9cfe30bf75398c71d70f1635d3259cfc81cb22c190e63d4c71686d027ed1a046785cd6d8dcaca7f8165066bc5ec331768a5959f47bd6fc92a2bafda88aaf37ba90008b8cf07c81ba4549a46dd77d4a22e9890944ebb339ece7d395649b46a9376068e2ddee5f0024b8adaf5cdfd8c6d65f9b42555542fc461781e42321266ffe8d8935fb1249b13c2d5136aaa03046245a31bde05d07cd748a0224c8b74fc541ec6a1ba06a4c618ea465b51b8645d7944ff71647be7fdf0232cd1dfc60e83bff4919e2d1d3ed977750f331be9e2191e300a2db17f5e0cb6c41cfb720826abac2e72a635b79ebb7337f4babd50bf1536463889faa6d40a303e20c7be1bfd201cfd75e6a2e6eb4c9abb0532bb1800002ca3b10910c12754ab54605da78c91c6057fb098f475294fffe973be274fb2d042221a10af302c8645de1fc4a88e9c038cf0fb3b17ac62cc7c207080c32183f907fd87bef84bcddeb3bafa830203d09696a7992304ad8b2ffcd43c958d90c579d608abaa32c9453b99683b2d18ab291a0594330d5a2ad97c1dd2c2e2670d2e110308265f607db7b4efc65d585469ca84049092bc24b5d0d08c953978f931888c0927efe3bc69662fecf39dab67a4d09bde81f1ac4724950750c88ef75aff2fe6ee71deaac3362ec2df099ebcda36734225781c92eed98eeb6a0edcf91ec9f881d73de2da3ef2dbdaee43bb6d4e12fb9ed18b71ff331456a9ba4c5872c449be43c23358fa91172ea0b7d2ce86829e02fa6ae8db40f404ad514f2ee07f1cb83f050556da73707b0fa08ed0ef1160f8bae9f00d33516753ed0e04f01423c30bcc7b8f05fb023f83cb19da3e8d11d39e88ac11b298d0f8bddbccab09e0071ee2bf719322ee840f47ae2dea403e94ddc6b994fbf934c100a7c96f88ee947f5262492ea5fdb080d3eec23a7272f948f5d1b8a1af4e3e118e06d13ee860f13844afce55d4d1834036eb4793d319e972fad0b27a75679d0672aebe0a03097445a178ee4c2ac71994ef5c3f85364c3d93761b4696b33ae636788d2879d1a04d883b02eddc34675ccee51d41850c21206b0a2a7dd9f8c10232f86bb655d064d9d8aa8da0b19cd2bc486ab6f657903b2a43c706d5d057e9c74d032b8396fb6206251443002cd811df2d70c3edad49d5c2491d5bf501037d838179070a321cce1f00813ef8f1748dfb9d7381e43cbf0b3e4b9d7c4aed4369f7e155e0e5b91b8c33ff32b0792e93d33da7abb37999584f066f0dcf19493c2f4d13647166465027cfde333e01b849e4dbeb3bd8f44bbd96dc4f67d191c1e457dbfd6d1f3203f20fd20ec6e01e54cb43e370f80fcf2a84a4b1b9fff27f6833e33cdadc178debbef9a132f692fab0d0fd56ed4aead86b1f22eebc2fb95ea9e1333d43051de7a959f05507c224f89966e07b4caf78e9415a95c3528f12a5eca7174c06f75620655a261fd5bb0dcf3800a7847463a4196c138080321e378171234ab9de4fdef6b241c67cbbe637ffb3d193a727e9314c5df55bf2fbb3cee3a77dc279a8e88b61b80cf5bcb6d77c8a6b046aa7da9b2fe96ea3155111760e419bc0e257c0b285399bfffa0a227dcca8f8efbd2bad7358c21b19473037032de19a8f3144333aa7ed502fa1870911106a6d0f8a24ced5f21c209e1a6e4ed72239c38cef5a92c82810a3943c35531c7addcd2e3a96817c88bcfc5ea5847dd503838a09b3261fe1c25a74e619a47bbd152d43fe7b4ef3653566ea5ea5abd611198b271ff49649c1ae478f75f0770835bcc029207aee86872513a93f1df2a4d1570716bcd03c738c342921a9d29e8f485a6566340caa15a0e43d8d3907017844e096c816b32c9d0823e07c632da4693835ca711a93635b8606377c8293bb5df50b713096a052463c1235eb627ec60c9ff892d230add56a3ebaaf52c70fda360b0c85ab1a596f85193c32b822bb79a12cfab625c9ae4c995d246815e2216b37c5ce56c0fc3d9ce38907848e24e125d1ba0451da8f71369044d248c5788cf21c7e8e23f0033209c074fc5ee48e796623c46d76a689f3d119f43e793e1974eaf6b51e1aa61e8b6571a5b1236dba70bdad2f6c2a13cf9e659c1239c9ef7cca25aeb25dd991fde1687cb48f69777172b0cfbbfdc9909d2ef237e21304d604809877928e8eb303a725d54b2975019f13ad8c5970b054d851f35081157a9272ca22b44dd568ecb2f7a03df2456a313c796e18049d39e7af829b53027e0dc1cd53bcabafd19372d0ba1e3278ef794c7840f7ac4777be10c46797587e6aec0cc3d5c6926d5b27a798adc9c37fd3d09806133e70eb7b8fa04dfb34958b9871902f6fdb1c4aff73daeba9f2ed00037874bc505de5617f48e38375e9dab56b403f62cdec79b22707c6ea9775c7decdfff728c2ef03e0fb02fcf106fea86f840f7306728550154a8d2edaad42bb60fcf5933d8e3db6f6bce3187f73b7b1cb00e6340c39b742ea83ebfe1af9e13a01f00fc638934727a80a6d63abff4213be1a6a9bec2d12ce4ca6fb9008490ebe23c8d26a4a711bf61f15f251d86d75a6050f48d58aec84ada6e63de33184a621affd7bce6f2b250ce23397c2d3c7b8ce072343ebcfff456523f21ba463527226d96f370e36f7651d3ff0798d683045ae1395db1758a110d1945358f1912d2736139462774fd82e2a8d1c3fc169ba74954f8d4d0e0753e8eaf3f80c824dcf42f3526e0e2377e11ebb9a5d0a2513bf1e59e8504363f4b24db3228b2c2c2bb924f98f5ed83ca983d6d9f916358ffbdfe9ad4472b08ac91f69396a82e5fe1071b253458d8b09371ac8019c913e24c83ae86048563854a89868dc022c22189ce6d6b4e3e71e324ccdea5555214655b7a8922b3662d2939a08143d2adcff0a610b34aac9038ef96d276760840d867beb7b69389cc35b43a6c13ca97243ccae11146df2a04c65f9b93ef8843589bbfba861f1a226131b00547d6d4106970cccd47a89ff80fda920a60ade9053a98d41a4039dd96643329c05989d3535d9dc43ed4b9abc911b531c9b0ce48041c7621901e0f52a13afd307ccae253138522856025b48f6288355b7467d08f975ce4979760692c536e74f0a79752a88627ab4bca0680c5919df7842bc83368b7d98f8efb178b04c4c31d62f1f26971303008d30ba726bd8e4b24b8875d51df7b396cc68a3288dc95b1fec2aa278f1517f0f3868fff91266eee7e752ff462fbd3045c83fb542a31cfbc0e5431e15f12fccc7f28c5645f07584fc7d62633dafcfbb6a8ea5c91df3e92f76a2c6e589b94f0034bff94401480f38ff2d0e750f69d11ef5036020565a64bd39b493595bf9479dd421302b023105d92bd2393e907da174fcaf50c6d77db4b3b1a973d5366ab9b5f0af82b4e132d1627090afa992efbb6375c6ee3e06b26cf8b9f8429073b46a4a50b6bf46ddd3d6831204435cfdcad23bf9b0dd32093c39eb5c1343aa3bff505afe4ad16138deed94be8878d7d0d8bcba56426d0d4b2dfdd0724788a0c0835889bfe66446235b936f4c30ed3ef9eb0381202f4a800d9d1941e43d387e67ef62359b4679b9b19a71a3e3cc727fcc24558f26fba0331b7b27c915a054d7984f4709a8f106958aadf4b7fa13485dd0fc5642a123acdf1864c6fd2de4c4c45940b61b04a9074fa1bb756d401868a9cf369708caec1bb6060f0f246a3e5b167c08e0b61a3bf41983bcf01c2d5da14a2032d64526d08e8008d7431687c2bb301ee3c7622e3b211164ddfd9ddec14919820d9288ef04ac32a97a94041fbcbad5262880a453b62f5d6c7e6949d322220d9b8f0d9cb00de55a24d81426a957e07b983c69b2e3af4c02eb4c1dad402149da8ceb3ffc431d9d5ea2fc85542530488d01b1c35e83d51d1a04d14b6ef6dc8c781b21e46f6f08b612db304560fde4acfd14fd17d4976af7e625dd7f3f70622bf3512f8f21af1d2a668bfb9df8604da2d0c73f9021dbf91c5f8f78a755adba41dc8bfe33d4f3a6ff55e64dd0ff51c7ca3efbab256505efe5d7509234e36ec7ee3bde17b8bf4de28f73e181b5b5ddd77160ee13be3304c023c47e690b5c11f24c971ce7de795e4e3368a49fc9d4b4d7a2fffd40e2f73e2b8ee1289f8344421be5b9469c728f95d819489a2d8312db0f8a977a27a25472938ab9a519dbb497f06f3fbe1a134b09d05bf6bdb603160815178b8b0dd6526bb86b21270cc9c79e251d5752bb944dbfeb7a1bcab6d5599320f9104141c913fb80a78458ee2aa4dc9cc0ce612cac3c0c9db93ecc965e9f63d3ba5fdca44c554f4231af4ffd7f1663d8e0a2cc373dc09e47c78eec53e7eb578a4b3cb6de33eceb00e8c3637e7f643d8f691a63fa85c4bc073855cbcfff3d8ab45270adec5b799c5377dcf59be0e2173d1545e43ad6a900dcd1815cd1c907e7601b6e9d8f9b4fd4b5e279d84b3cd4a8c2ac85523147990074e11dd191cbb773d3fb8e228ae4171eeced64705c443db02f4b8e25b5cc9bd1ab43d6e86875a510c656d2573f40d7cb954d1509af8032945cc83cb8fa983458f328b0bffc9a1442b0c88eb73eb4eb21446088e02547c713fd07e49f1bc91f44e66488cbbf5dfc6ad3381f9c5720519d2cae546e8da69ee3a3990796db627346e2f386cc00f669ffb55031fcc8f035f1df13d11a67ff3a8a8e0f2b808da9345d9f0fc95138e8ef39f46488ff42a78448905efb91178ee769f3df953f5ffdfb2114ddc74e793cfcddd308bbb1a0a370b9ba227f3bfd4bb23c63252b1aabffd6311180b2654214190b2ee9723671cfe25eaf57e50ae3dfe07c1962915a2b008186c4bbd719e8d4075c99f153fcc5a7a23cea95d412290ea02f84b461d18943aeb490d10107c207dd594ba337c7dd20e7f5d9942d0cbee37a7d50593d1b284342e3da86c9187c93d1bf025d0ee156d4c5a702abff8f13f633c59c93a2665f45dfdc2ad330ebb9cd360e3fac282dd49f5b40c4f7f212b9dc144f7e227cc0f8a06a38e1beb339f56d0ef26986609afefcb1db5f7b0fe2201fb1a45a9c34343c0cbad726367219d22ec8017f35d6316ff31c2bff28cae7d12253280db6ae8dff0e03836b282d498c522256acdd684256ecfb04bbaa3752b03fddd53dc3c8d1aba5f2b19d8ebd50609ba2c33c07db7b8283720578afc6ddfecf8d9171ef2b017700b8767e743c39ab49a06c0a2e49b2c9f476a0801e4f3887c5f5570f0d40efbfca9d33df0ca2cfc51ef506c65b23db7bdfecdef7c482b871d15beab303df13f71cc4fdb3abea8cb4f7eb0e9e485b87dd9ee6ca78c12eaf79b813b4398af3d777bcba79b380df9269acee98662e03dcbff38b95ddf1bc2d22d36c466a0775b9076a8d9c86b143953ee37765f0f3327cec349561415063fbb658085e6356aca11e18d7976a6b8b47b1c50fd36983712dc4db13eea1251c81a1380c92f6865a4cd70e4f87cef4748b66242ce88a615c0b3de88fd87c503ff2e8e72021a998f4e7e0bc7eb509493f3cc91bf706e3cf1f0d24fd014d343c77e94c0895ed2e92510fea8acf90a3eec8e1d3797dba841f8fc65db695c03aa1b998d3f57eda08e562b23ac0ff724e6d19db328af3bfa5d55fdb307993c0d538faeb49f9c9f2ec07a02ef602c97c472bb44fc053b73c56196810ca6349071c2db7efaaa74b005e56af28b69fa72c05f8356cd7603fb7eea603193ec7a6fc5d4b93c1c0c0282b4a68bd18fcd39544df45ec9fc2b60266f837d53c7b02bab6e51fc9acb49a0901701114a12992051538dde8a130f1dcfe83c1835ae7563d6d1bd395a72924ae609114167b67ec2e38b032ab80145479bf492797317912b68de062b4050e5fdb5ffd833527d4791efab3508a44907bcd5eabc8eceed6e313ed814dc3695c9dd850cb5e14998759ea2b315fe0c238c963987967c0c9ab57660acca05ee4e9fa0f72b1bff4a862ee300af58dc80c11e7f69ae59459e914dce5d5f030824b15298ad9f3825f8d5b2b43e1282c90dc00aa363d71c20477b609c0e636691a3c8bf1944c0cd68d3e7a3a64a02ff9e1209c246764a76a664d474d0a0c1dfe25f1f342f6b469a34406b1d8eb37ed2d6e9268233d3eec6d3a5c9496d4b0de14a502fc8804d6f5517fa9f51858f53f82aa0a17b92d11aabd8c039719c32d9a717a6b9918b39d4a09546343e0b364ed16b849108d66d9bfff846e5683030386adc987b15b43507675b5fa1d28967c78960f6410f0c2cde74057ba24fcbc128b26022cd554db29d39bf5c5a92ca25d16bc16516f5d92eeb230c0d11e7784c3bc075fac9aabbe3f71b9afa957f9506ad02e514ce4dd59d0ddd317f52c62db0ad70d13f64629543675a0940edde26105bef14c686241ad8af852dbf66b97c08b90a282225e2c4ac0ad776d9152264bedb5e5a68fab6940b6a30fa0ca4fd45144436dd70c05a9184b13dff7260e0d7e7f6d5451a83ddfc0a193becbc87a8e9a6cf5ca09dabff678babb06aa9c34b09e52e1124342bdef8e039d86fef597f00c661c0460b1b8d34a031b67c03eb2ebed3d4a8e9ef2b19b72e91f6c73c9c47e7118d1e457a6d83c2b102d4534625032c9b46958dc788c32360391fbfc22c03efd0dfa9f0e59583995b583514317d0b7bf9da731148ea69a092e9bfdfb0787ccd94fa8c311605118cebd4b2919e6b551d26dd7600b3c6229458bc170ec94a8cd17dec18d09437279f82a637f32abd3937d084557a42b653b6ec90909457d5b4a4cd12e97d561103d225c94a3c524456223a3437c4ab593258c0dad434f278c24f9b20d9dd35697a4127921719474fcdcd948908e906d2b1425ac52c3b2b0517507a9c9de525e003f12db6515c38786f1876e629f71ea19ad74d078badbe51172358bc770b6b9d8e80f5fee81a826dec1dd2b81f42a1e7225d3cc4c6814d3ca265945ef80a1461211705237b8226e96ddfc263c5da44d9c041dba1bb1fa3fe8b42cd2136ecf17a51685e3f7f1e1d1062c3d8301b80a958a0ef207a4cfa4b21be0b40563e92245f68b03a6b158242917f8f3215f705ffca38a6715b996e951fc8eabb33346593d974b247a4da3ba6b4b255a34399b36500a11a842b2b8844894a02b7957d8573c8fd28d997c4f82126230034848f5d4d85b8f4a83bcbb4be3c11c459793097ad2e6b92e5a59f556a4689e6b363624c7b533f396ee38f2f63ab3b7c9feb26ded87bf9e0a9385bdcc969f1d8d6943185dcd62a573c41eb6a347ebc8b0aefe9a29688988e6129f62d23f7a0b1c37b0950a008dfc297562f213878ccdd95c6943861e9465afae10526fe7e1b286911cf1e230449d70d619043c0085d9de90ca4a5678babb45c7494840d09589fb08c67ad106ef69e41c4d569a96daf037dd31e87daeba6666d875ae3f9bffa023e19843f8ca5e8197ad90d31d907cfa7a4bd010334b2db54c11f1f33dc118357f8f339a81f5d1859dbdd7089d7185cda420362a670bc13e750e7b3c672b50f90926452b78af50a51e3aed9fddd2e354fbd75cb44a27c81b62b8fad2db72e3583eba109c0b961b1c13e0f805e6e33a3d8a86842ead61f0fce29cd47f6fe79087a3c53fab7bf3d170d2ceed69dcf8f2b7c540ff973b5e6966743d428d750e5c83091900e7b9dadead47f39b9faae7d48de4a7fd5c15dcf8f355b947cc98adb9589b73d93a072b952b265c999674762fd6c5b944be948cd96bb347b85f1b3f496183f3cd6d8a8a69f20f20dd1591f18018c5664f1ae5b6639276287a7b1abbcca458e4ca2b19ce7336928df238ab97f429df4aa58fa182501a991d78a7699b00745fa87794012d8cf1a50e194b3537288dd98a472b8f382ec7c1b8d932630c7d0023c8d76ef0ec4acdc32d69901a048a953132ddb8bf809b754c8c00dd529ebe19a838c69bcba0b226c5a26b2d322031a8487b7610abe0ab4f873c5ceacee813903cd4bc70664ac468a915b336fb83c362bf1b020e9afe07265746ddcc53306f3148c46e0a1fef60e58485abfbab741c284bc9ab7a5f11817d8ffe88c31d610f1ae3f8c0bf91e1f904eef8f67b91def76e63e08f20e7716504404108027f428f86d0064d1ddb94a1f563788d60d2a6f655ef93945967e01f8f1d7ce9ee3dcaf366acbeda810797009c1aa06f2b2f538f38351adea1b461e89fadc10fcf292f02df9c6f35d12550c338546be0a19b283da89cd03c18a008f14467c9cf23ca2d02014329c15d5be69476e12cbef2b23a30872eedb3c247b0b8e6bab77ec4bbf59796ef9283277b5cb37fbe361b5386f17e99fba333c867174807911108fd9e3d970f7a89aaf2b7463a94fc9b348e77a44acab5fcf33825b689cc58444e26d8928dbbfdf72c41d5d758f0ea3d8c4b6f510b08e1b39022d6efe9f501c9b0741523b6237f9b838b642310813b765ab93fd105dce6ae8619805cd26bbafb12e75d8ab08a6e4061ec68586d752d0b3f340a2c898a58ec90b121e1ebbd5f18e2ad6fdc948370fa891f29f8629ade898f1ec09a85ebfd35270a4b988af04220229e14b05bce873ad15ac158238bc03431142eebbc9b9d45a238e47ab395530dad247464ef4b5de65f404cd5bc0cc9729b4b2c349fd6596ac159d2252af49f0707d82bba42c0dff737c235ad28ec831f55e3b7f93afb2350faadaad5882879c7694fe3a00c4217975111597152699f8c7fb9862130322f57626181e4544346f35ec222d43c441c5b9d162f1becd90001d0236c199c5ea845822b5f599b7e9e17694f8120ec9e209133edc3b423c81d988fe1f3028f1da796efdbcefcfc598c74f76f8f802789a96d2fa55a9f0faa0bb27e4f2cdaeac504470abd9e3b29f85902bbaa0685920612c6f82d7f1e9fa7fd6458798ee069c32b4e8d8b315a3651c0677867358dd99bbea9b0eb0fd0906833260472cffcd6500b09018d743bdbe6f30504b502c822e61f224ef24e3aa747d7229b64b6e5cb64ac3c568365dec0b63615b8a96d6919e6e7ee8ad96cd5160aaf71fdd8b89a3e633515b151bab0207afb7d042b8320b68c2c2789da11bf9f9eef7f2e935915b0703ed73833058666dc1f9d3ca607e7289659f138ef5126a79a48ed4597bae2036ac92d3ff10a41024e2b0db9ed52a6ed13ee59da7a51fa47eed0fad0e1c1c8049bfdf803024871fef94d8bd6d54e48500720b7c0533995c6829adc33ccaa6041dd271554273e82a083522d35119c6d0a92c1eae2c348228897109904f500019f323b6a2c93b0f1a1e09f5e7904af3c30e97191bb3e267d172d3abc7444711b6681940b3ba78fc6cf4e2a0395261b5a9e9eb80a8198ff80822de0f9ad5e0dcc822e4272db7c8a689a4160c356c67d4506fef5b86b95f8c1bd50c77b462422f2cb2670a6782f2fec8fb7cdcd15191bbf3003ea4ea1cb838d733d5e2934822c8edb1668ba0db26fba8ddaeeb87c3f590ae445a8bf70d10e4b9827b6a074fa76c9695be8b993e46ec59307657b009752cbafbe51227d76cd114cad136e1b2e617a6fbb0c9bb667aa990087b7cf4b8da69f1dbcdd14c22be26550aa02c8fa83acbe89a34e6ee5af87b7a6d43738d183a5c9adcb8095bba4b4ebd24328962ca11fa5b19d47e1ca7284b5720ba52bd3e17da02e582385958c8111097722fb4c975de331b0c8b314c8e4a383833f035f1bb231c5664b342461bc25dd2ccab8b78853bb84652cdae9921835d104fd5964b323aba0392b3b1668b044c907dd9f248cc4f6109b2043e6245595484db7131b0d128c421cfd95f7472e4280c390cc3a0e1d110c781d0fafdc1db396f86da27ef2ab42e060cc7591d1e119922da324d79a459e08f7fbf5534a049ec1de86da825146ee061a4a8c9e6e1612cb280a3be28f2070fd739018a6c553c4a4f5f30747c53149ba8b2e1535abbafc95b35307996dcefa5106d8cf5e394c0526f450ff62941ecd2a01ed641add4f5a92b75c8f5055064c4c4340a3ce41c49d029cc5c9ae08a921219c9b7abc998c312834936dd38360c95d8a9f5249b6d45d9b843b5adeb957294e4a943162de1e367c4d15da9fa987031a5edb75eb462f0e7de1619306a5214dfc3db6c142df2d377d6e7e35061b4b326c8b2fc7cf6af9c6a5e403ae717775c3f083c41db3c2cfc331468f44eac7ad10d8a0f369e22ac072ae65b098c4e3ab0ef9b86926a32feb6c60005fdf39671263424ede6cf69a3fe6f9b4c84d727275fa77ff1c5403e4eb6fc243d05b7ab62317d2d267b0b49cf4cbdcaf7c6da6696ae5d72e9693fbe6dbb55abc7bc17355f0aca6924180ef9ef912bc344f9053e4c5e44d65d3c57a1ba06fc8a001d14d6cd30c4fc3cf9021f31d2e77e031a12e69f4a02b0b8ffc1300f0109612618b233c1bae9e157c9713bde02f9a918acf8a19ccc79911581f6338b8f71dd0e929d774d17a76f1e88a0d706819c8e7f40c30c320cb1945f389c0a75ee05627773501411a4b4d6070f3874bed068e7edc51bedd3404bb8204cc165d6e36f49b0e473303ce707e9487810ab14b9872a0a95d425d4b54ddfd0898c9bdafe54128d5a91cd5a78ce1a17d255b9d5a999a43cf63c7f23a873c741c2bd93aa97f587cbe9baec62e376078b3ce20a6d53e0183a5ee9beaeead2b02f0c418a70427b73e48dca3c51554472cb54dc5683670f4c29431507910243b9d04bc102ae3bab18d424739fecad497d9da531f9bc0ae9c730c6b6c80c96eeabcfbe3a4714238d6039e93b3e08f76132518dd342003fcd50e39d47b3205a5b586ce68c5e93eacd9ca9519e5b8dcfaab6222675954c8c90886285e2c67e70b7a8683db593c2ccc75e0d7bf5734d928cf4f06e601e281b4cfa0944131075be8b9b73643a165e8ac1fbb36903383080568080656903276936f08ce06d36f0a08fb6a2d6e4dc7bfc882762c86ed076b2503cec4a3229d56378e5c2b4e40e4159e6db2dc524674b2fbb07504fb71963b189e914623304560f9c28a8733178be91588431e21d2bb69bf6f24c423d1cc34744ca01ec500b2e423a718734b7e43adbdc506afa125a95afacf38518f065950a480a469a58208ab76ad0a644e5b47d43a873325e6173bc998bf0f25eb32499d04bd56970d4f6cd26a1810e11bcdb46a5a7aaeea9f7ae9abb9a83c3154fb3f90777d97ad0b601940b77de2c84180f9efc7f645439dc0aae9de82ea66953be5502047b0d9acc564987abc6180ae020519bca7d4371f2bb60fede123dc4a5fc2e6c2300f726bd19d25fdde5f3f54b06972a6fb1709ca58c53e801e999fc4a44e7e006fb0e993929005c3ece5983e519a160a342e5042087a58a00fad9fd230fa0fca238574004ee93f8164097de6f6d9de2e5db5ddbc5305ab04f491abba57e2ce48a87ce8899135d4ffafd166774e106937d4fe09f7a7d460068efa2e56089835138c725aa725c0fa0dea3de797e940f014c97ef0785d129b4a4b70a7d3e4d57881179036871ce0a1e993a05f0fd6c8a6ea14b81fcb2ea790f46246e7bf01d9af8085f1a3f7b8fdc7ae96c6786a264857f2d804b982aeea21af607498be053b17ab78f9ba25d16263904150223ecceca452893ffccf0942edf2006ae34aceb4be0bc8b5632fb4110b7d65523d7f52ea84ceb027ec254b7bfa2f7819f2ab0ed02f4ab81dfb088f07891f38231390b89244ea66ca60db4911acdb60fd783c49a18cb867767fa5d233d425957a00544a4302411db36c4a80cc483f604d48ca5040c503ecb0e83a098700b51071c40320552e7d309cfe4b57b38778c806ad6d1105bf8fc0deb37ba4a35730750bef82833420094d88e688c77f3c3afa37dc53822665b4bd79974d28b6113d4695b24935d6d8233825e2cfd1bd59d0f188e70b43ff5671a97f98606dee007977461e43fdf8b0b13f597748640ea9f679ab05ddb6643feec0a12763e08f20b4d9b9630558ee92b9eaef26eb15f54f2afe32cc01a913afffa355fdaa4927674cca59bd4b899d8dee815f72d732b8bdf8bff5a6626762836fcf9d6b3e092dd7de0aecb98d2516ce7dbf5955fbe61bdf1712f95d7e2b31bae743647228ee7d8dcd990f2eb53bb8cc08d8b173f2ddd7cf489d08d4227dd9fdf69f82d588ce987e12706daf5fcc88757fd3ff5cc4c0f1e2c9c45917bcc78599d7e7bb51a5b76aed0c6db9a469712f1bd06df35663b20539a0bda73fa6a9f02f3095c12d155ad976e98fe70dd58f0d836df1ba3cca3e7a9a70c2ba746fdc9db19e98bd4aa76c99b897719a72eafd05a94b110bf636f57e313ee3d203ab3a3a2a5e6be6885c8141e3290564b7d84faddf273838b27fabb92a0c7f62e93696bea81758574238953a783fa3c139426332413cd87597f9146ef3e5b4cfd17c72bb91f95afe8c3eaa86311518b94ef3b91bd89bc20ae7489d8302d62ccc1ad57f5032237b82da0a3d9ea156346d125f76dad106a359bea26062327f0a2c31c8ced32af8b662ddeeeed3c23b462af158adda6c717811af4e5eb19ba700ae9dde37a8e9d9fafa5f53f2376bd61f4af08e7abd87bea4f5974a785d156d944fd19712dc77bb4798dc3ad288f6a34b480bbc9af5b188bc19b70273909f27a319a357885c9bfe9b92ee9005cf583e39071fb0e6c559f57eee371edcd550991c514f47b4199cbee79115e76fcc7ed79f7b3d1f9313786d12459c8398bff12c1bdf05eee2c4bd6f7d1f684977a5f811ee7db66d7a7c0fa1174ffe3108cba0fa2de8f778c76482ec9439acdc050f28ffc6ce7a72b18ee9df1ace474bc2b87e10b0eecd8426bf0aa866f19212a0372f1c9935504abfa3e1bbb1a1fcb3405c83e439893205c6a0dd2ff91c3d837b6f655f0496732d98d5865a375a7da9fcb3f47537342ff25f1e853ac4bc42f87f5e3fdda2d45cd8f745c1d204d8f3e7abe5665a82ea7d454728405d11ccdf8ff171f167b19b05a0ebc1bb927e6ee38218b0e18a7def4966c07d5a81fe78f04c4937830bcfc2d6dd697cfbcd3de6d88115464f814ff57d2f95ed592efb23cecd26587cb952f99f105aec2021e9f847d363bd760311fe7ba863cd2f27cf6729bf80c677f7321fb1f5202538835f00beef703af2b54657eff4ae8710ec5ee316dcc2f5d9849fc13cb7dbdd4abc2c97ddc6e3abdcecdc8f0a56f705e3e7871394f6722d9cfa7f26cd1b7e01ff4406d8ca57d3db2f642e3567c23d377f8aba88f3ddd7f2b0a726e7968f777b1ec6b75179b66aef7ffe394e639a6d6747f7be07dc0288dfc9a1c5aae3a3d2de8aef787ca51cb1cff7ed0cd92bae77bdda8c4a3a77b4d52070f50740f1a8b831946e012f03660b3d68ad962c7a17a4e5023d7554f6e7b090ed0fdf851e0e3e774e9c6e4b83bb272a4e9409abaa3a0d04c0b94a7b08a1b112c2d60de0dd2df8a618d01f2cc145ae652e0a0741041290dacc74a2a52bd7d99ee1369fc526c50f2664d57b99f009d21bca53b32dee24cb60efbefa8398f2b479a1da64e0aaf92b84056d54ae79ad4641b26f49ad12e0733b873ef42ecda6bd8a41fa9c0ffd609ddff870237af788822f98aef7a85a8f5ad182dc0dbb733d8aa3e0e48dc7c256fabba10644858e06767dfdcfbb04db5a08896506564465d71b8b48fecc2e642ae9206da7e3f379d51bfcd9be60ca6e48c1f9ed8a43a9f36dc00f0ba6a4caaf27f509b528b06cc65538fe7c38a13f54ca6c0cf01762c539af353137581f88f70fb6497f1d191faeb6612b30ac0781bbd38de1bb63ec59ae8c502f4c123dcd8e619198fd3ced2330e5eca36d6c99e293a2a47fdd5c6ffacb9ea40d808496a978cee718dae13b2d6336fd7edd1aef12cdb4e3a1112b4a3275e6451c9acf7dc62553830bb49a088642f6e9f6012aca0b786e61cd55dc8f5b51333ca1711e19b20a8a59af49a4e26221a235e7e53a83e188549c38ba1cc58de1c109c59091a8ad4a871570ed4f39af5aa4fadfda605761fdd73a914308c23fe7bdf986387c7c9d5596502a166318ff2d25a373577c8399863ed172aabac5993f8b0d161e797e6e8962a511fd266feb8f9a323f2871f08a80d5572d2160f972103a59293fe2917713c09a3bf26e55cb0b93a12f425d903bc36aa2801ad1c25d264180fb365b51c0130e7a54cb4618a00e544c2ef91f0282f313048419caa137c75213b6b1d55916e8eccd55dd74a7f8ca6d32ee2cfcfe172714133cac83b28751b8d352cf88cc34d3f25b1a49eacfe6dcb59656fddef54995468ae1fa7301ecb44c87912558334aaa7d31d12861fd290318c5b1d076b477a3ea17c0055a9891a55ec7766d88157a068b1b41e27e045fbedc81a0303a2f01224375097ee17518679bff5b9ebb83958671050ae98e09bbd7136189999ffc0575a2fed1ab71f711e2cb89fd45be1658618b1e16cd2b107fb158479312aa543fc50ce5ed0854c0f71345640273e9ecf5070736a75f1fd9292f605b5e87316b73d3231104ff7977d8c6f002868193a34c688f81c92b9146d128919fabf01024b9ec4d37bba557ab07a4786b767e1b3484bcdcb6f8a021218058719c2a7296c103932971eda0c9a77130bb9ef68e013c15caeb801dae8654a4702465e9febcdd05000010bd200f181ce7785b6e5f62ae372a980c0da4b69a30e518dc576cdd2b9e682abf70500be24912592851a6006fe11f673a703e4cfda281409b9dca22af097a62001c23c92f7499ec9c82b4260593ea6bc16c9a4959b0022b83d45bc4101f54d7693e94b1144d341f4c7b51542a40c5aedb3e589629bda70b20197320996a0154b016d136b388c17c7e489486814772b5dc5c847786628f20c6fed7b4b38f271dfd8fc5eb2d26583dbda4801f86d1bb5c12547c992d9e0e2eb6db4e7034a5f54d9253ac18534f6f78910ea07b62de1adee02120ae9deeff4b8e9ad0e1e603d0a93f67c0415ac16dfcfb3bf20bc586f47ea0c098336fd376d46d1601bc98037233d7e180fb5d469e9f411c72b17ca53837f5220cb7784a8511fd4b92526c56df435a3884ad29a6286d6db16216b25bf2e15d88817a6e004069372e50b7b8fe5519aa6ddf2df17555a839122a6bc121ae4cc399dcb45c56af37e259d5299b2cfa25b23228c8891e6727d860863855e8ff2a7bbdc2dcf8fa32573960aa1beea7bf97a7c3bc8555cf376ee30b8aba1f1a514caf5156b2ca456a8a2d377c886972b2ab33685da9d40f4023ffab6b5c94f769ea297e5a749e17c520831fa52b4ba4e4c20a6c93de5ac2072670433b32c4d811d84553c0e74ad94d3c3ce9f9693fdfc6463b0e49cbabaea00df847bf17a270f96fee3ec416e625ae1c0b9bb01fae68db33fa5f3bf1fdba9be3ffaae5b5d3b51e10b3ddc5ba3aa631164acfe034390997a40c1203eb961c7a605a72679814556a9d190548728bcf21de68f9f8ef707fdcecd1ea2f061ff241e15fe4ddb85211eb8947b497b67cb0fd415bd9fb63a80367cb7047bcf2d799ec69d5e38131c437a3f816dcd09a4d961ebdcd70de68eb5ed949a91950451e8f3d274da48ef4f333d653fe4516cd3bd3ff48af63fe48eef48f8ee6b76d2ef3e67f3f1bcf4d9676ed261b6abed9d85ff9f8921aad98834bdbe36c64dbceb9264da95906118949106910de323db45e33919d5b7b3ef8dce6a4688788403dd2063d8a57169dd9db410b6487a2bef56a3c7761f7ca63a1417baa6dcc10da09789a9a18ac45e29e0b6f1eed402e7b21fce1c1bc50db7a19a72ee8ba8204ac3014df7beb789afb98720115edffc115ba67d61bb1a3fa6df229a3b37a1bcc29a59e71d184379a0ba259eeaafa55654a2f18df3d35375c47e5a705287f0d5c06478e1d77d45ee353ac529b93f8a9fbf38afa2bd03ba5cbfc34f007c65aa9106d952417ca8021af88cf214ee61db51ef8b7036c388b87c41a8ba41900849ba6c4666e1f9fb946bf2e651c709b5d1743b1077b7b996f55714187cde827897b40cf6793be35b24b821ed9bcdcb05651dc91cc20f84bafc2ded8b0cb90da0ad46d01271119ed5de63f4c9da20f7c451d3dd66d098e1de100cd6b1b79063c99f1a741e48855ac1f1673490b06721df53b492d72f4a4e8ea6326f174afe2e4e173998469df5d9063fcdbafa79070b4c67be51fd69ab0b76dd75ae0aa4fc674fa22a12d6fbad3f4541102810820911097d2c83f8e626b8f64925681526573cb33bcc2231c1514cc40f9c8f3ccf2aaeb50733d0168c7a9609b556c5241237e3b7a6d0bd3ff2120a555a22f11178eca47eec248e4ec2b165030451a83292008ffd9803ab2b3ed3be8c81d5b7f3bd86b8b6e2ecfb6703ebdad75e4aaba1d564b44efc5004ccc969ea30d9e0dcedc9dd698995528b3ff34c234c525c5faf21a73310fcfe4214ddb8c5eeb8d5beeae95002a9cc463f3ba6b0149d5e9f9b2dc90dd55197c8da92197c30553e4ddbac8e4c3024b4b6834d418e385b625b9cf5b61646a2ad24d30dc036e545dc2b3598fbe7e7bb6a0c549c5aa2cddd7e01fd01eeee8ad50767c89425d7c89cf5127b43678fde7affb368466120e11705eeb3a459a287e9a222552da8ef541787b517ed0524319512f6cc07670b6e14d959f214b2ad01bb281e6c43ab720e68478a0b8650cf906d3cc0b515756b1f5b58a66854c5aa7683f007445e073dc5670900cb5b0a77fa43f823b5a1918568d0b8280999ad85d1524912d4547780a875a3b1d695a9938d8fbbaa392ad087d3e894e87869c83d5f4054fb0b52010527f0efbee2948c9fac9f48d8f454f2280c37c15fb1969b8378f3d71640a94fff86a160a6e1573803acc25d1deab35bcbcec34a0a35260f22ea2b71b8ea723ea4a0501dfa7374eacb6e830a0c28781cb8e27bf8c66887e8afdbbd1f22de422be33642cefbada5d1b281f497dede8dff4a67ba2bef92ac8ebc740b028feb260f7a31e38ca660936701d1618ca9ec3f8cd7bf0156061b9795095a5706d79499f6a5c99c2863a12299f33dacc31659fb4e84f2e1c56197a80bcb0266637f2d160f09f8a5299ac1ff6ed0b7db2aeba0778294a9f43d7a71be10d2f91ece5b16fb7713e07926c89915ff4c7649e0721c92358d7de85fe7e2e63c9bc8576d1b4895d82e3ab91583c9654b33634d9574e27428c6a1fa3786ce0bcded222f4693fa4bd607b05ef716838cbfcdf2e23d626f80eecd7c72cd6d6c43dac638fa158d1f7b529f272f4369de0e2b2a0efda138e366e4467b6eba7a63ea348d2782d72589428c800fc3837a5e3d6b298f2c021832306dfdf6006b2a234f3e55af2b3cb9e56da15deee95b895fdd217ec537586c896314ceecaf2f4d0b1d93f1c31a2ea2047f7541c6251d599f7cb0d013d1a1deb349743aeae8f6f3de3e5071cbf53548c5d9413301a9b870cf9009915a1a7d53567e728dcb14b4f61a553775c6de26251a18285d197ca00de9ea98f808648576f7cc12fb91daaeb1e2bdb9534eebbb394a4c14ec5ecc0dce0ed177159a8bdde5a719197c8ad6f9f7ce01c1cd39471609fde8b4c0c821e4efadfe14cd334ddb69dcc398a216578710032043a54e58714cfc79b04c90edc2a33d505e46888f48bded0914abd04350f60b1209e6cdf21589bdf221587c82bca72870869d5def990ac02f9ea76babea2f99763121b3c6bf7394349b426afd0fd6e4a53dd4ae6170d59fa2c6b65cc0a269d29109b39b207db732800c3a0e406915393d158e8345fc55b0fe530de62f111da8d6bc1fbe18f9a34fbcee27f9f94722ea2b574d4389f7dadecb85622175f0c7525f5b6d2169cf327b6a2c452843f9bc58189d39241e46a9d090b7f15973d6061ada6ed1cde61fa73498ee3914bdc9e4a20497cdda8bb9bbcffdc6fef4e34e09ab7d86c1f250cbd4c44b6ea99ad936a361b3e4239d6a7331ec611943b6eb82bc0c2bad59178062fd322edc94f6852fa2aca6d00cc1261c20aaf59f1470d64eab2a4520fd9c18033c5a66ca74266fa287086c4ea31134748042714a0476d585b4d715a70947b04c5f561bb18313a90fb1ce0fd934685eab4177958c2a51260d486ceb8be79fdde72714bd243b7aaff4cc031e79a39ac650548abbb988129c079d7404ffd8949661446969ae0ec1f41fcea3150d4a56ab5de0b4c31985c08a7ea73f7cb6d94905499fc325a0c7d018d6a7d2b6c3bb5384896970b13fd5e9caf6c2f2a04fa9edc6fac77bd76eee01ea7c84f0344ec3c9faf2dd588ebc41e2fae4a7c88ef020dff9b6f148b54ae2d52839d8b078d7b90da00bc52b1dd20a415feeaefab19b47f4def0ff629cb34d11df26573dbe2f911fdd06ba4bea7dbab5554071d11fb27b32b08a20c555e9faed83df10c9ff80055f8591a23c800760a870c15c235e4e2766e7ee708c5650a535ce2c9ffad60d440fba27e64c7cc4ea59885d8da6f9a27a306274524506945628150d46afcbfd31b613b7a45312332d21aaa68d330d7a1d60bd383aad349e5efd673c8526e06688995e016916d5d01b7e1d54cef2b115128cca1a07ae2565c5ba96f785a0abe9c7755ed2ffadd4b2d6ed4599937e6e56fe6d36ff60a65dc36fa91d663b57f29b227ccea7e58954a770d4a15f0026db3f1dd2683014bb4eb6beafa3e6765df2e9517d27a26ef3fa111bb1575906d5e48a0b7c93c70014af50b337b8a685e5e9d7ec03c5977e887667fe15ea06f10ab7eca1b340d0e4521f3a5eccc7869c8999b232cd66eeb41a2c052fcfb29663bd36190b86a6e2a5587ad8325b229cee8a8f650229e89ad5b9e0a434d099108b1a78cf89ba587504f6c68413cf34e0b4f213de07cf15ccae99c98d0d33a96f93e805772805193e19902eac883e6facfba753f47eb4ee4177c2fe8515e21c7e42f3a6246cf212fc86c6b3ea9ec35f0632e64f0ac9cc27b4c75687782e22b9de522531f0fe47b53eb2b400ae4e7643f146c7956876ee7557ce3581067c31bb68020fd892384317879d74dcf0a13503e50f08922b4e9b8ca57bce2d99faa8a397ccad23094458c042bee9b2ee784b8b0a73d277166185322783e82c49b1063ff53276c2eed72d2f3abf54368a5823a81de340c12f13df22b3c90193f2d59b78ed0d0e92fe12809747688cb9dec475b0cce33d2ae8863db5917d238ab0e1a1b58d85668d328a20a1734d2ddcf3ddc48330d2a74e083aca910c0fdaa763c8476d29cea786b4410c82d2b20f90c191fdaf1e18fa64406ed974c63941907923a59045560963aba3f771b4fa9c8d9b332b64c0e68a48b54eed9aba48271f8c8efe8b51161cbffeb480b39c95d5603840ab06afc973226ba6a26143a72a1dde83d337a5a1187b799e5828bd6e5ffcede4085c0c5f115c1ef52c802dcc6296c5ff5fa6723ba4985cbdcf8358aa2caccd8ae4e7fca42e81a8e3a59e6e4c857ec91a2b56d1bac5c177281fc540a7cfd295f4b5a8ac2ff223822e86947ee5f3820c0e63f41381946092814058933c458012b9a8b97a0ebc87640bcc6a2fc66f03ed927271db1abf22431cf90f92c388c08cfdea635d40f0c91341d6c00f3e2ea49c90469d3829bcddf886c6a01f867f25c23f1ba9ea2517f36aaf5297600b713731e57934b79f3f0324904c8b9b1d63f5c323e0a9f126956bf073d20fb7c0fc62be8b45ba482392d1867fe08aee46d017b3817428cc8389c3324fdb9764f0a2c3132ebd024a306b2ae8371beeaefad5504e7e80bd3099309e036e03cca0ce5b915168d7efd0eb258da98dd37b4918cc858202537c6346d7c94fe58ae7496c8d9b00a66ce6ac612d28923d25f81d9718df9011c07da82275ccd814841b69f513281d13ec123ce9bb0769c47501dd1731c4fc015e5755f4237511a5454c204258b5551b670c0c24215aa06d82a5deb4d0b5632e29dd31059d4e303bfbedb01b19d0b2de79c7b877618836951ae0e94a14c48d73f75944190e4942e1ce768ecf7b56ba43f0a215a215e1824e90e895a414dc8046b8542772174f49219d25177ef7f231b48c6a373225aac4ca1f67163178c693f4927d3ed6cc870b7c5a915292d6af3ecca7f797037d7114e969cb8e7b164f6ec832978203e9c185ba049a839c5903601d15e3bf41411f4545392e64895586856d17422be06db9161f1f8e6d3bb259be7cb178176eaddbfb828d6e3807cd612d42255f9f920ed9cb22561e56721da038d12b767917fa56e06cfed833c93d2023d88fda04af4233c7e15fc8d6025158fb7b729b25cbb279352ef01ddecf63958e920ec1ed39dd5f702daae510a037984d7c092001fdd2cd980d0c72166ab18684c8fb1383d2b86fb93df6749705d74c16a234ce6aa7a9e48fb6fb3bcf88903b073b771ebf546cba1733e6980c974e4fab658c04c27d46b7000ef1fb2b3e8a6bb6fe5531877fb7e6bfe8e803bbfa991130a74a3176b13478d94d27b1694f3e97529ab7ae2281c4cf5bc30f98dc7e79a4d30def018035e5ec61b22fe3b16e0e13b289a5ebb55be793a6d364f429a8940286dc42f24fbe51673e6e4b198a9501e7f8fbc8e16e6a9f3d2c6bcf7759a019e16bf59310fd4bf777978c36ebf395ae3c78f6e6cd03aaab9f8dfe678b40c24626e8ba3710bd2c001f8b67c1eba7ee473ce957d2748dbe7b30bdb1a13b2763a26799992249df7b2470c12f85a6c19377728cde6369e0a5be560efda3c2e03e184135cb3422af368deb8de464ccccd8394a83dc9965ff51d97c54e618389213eac6d125f6b48d697acc9d94aa5edc541977647222d2ab23a95a444506c392cdc8adbe375f814aaa9825dcfa64984a0cbfe28a51cbe1d100d189d4e490a0bac542541703efeaeb2d92d46319fd11d37e8a8a6569c3bd52d83b5a12512d4d1262546e030276cca6d1b4af0bbcd781a9da296f57529336dbd5fa651088cb569f8f0bfa5c6b0abcbc3091bb9b81bb3cfa09c9449e103168bc1725c6ffc44e3de403a4c54b96e8df7ecaa727d8e3aa440a6ed633c27f2a584890f250624db024ff75b1886cf93f50a1ceaaaee1e7a4f365ef1bcf285611a3c8a921eccca6d3a2e885da67e06aa43d9f39f867e4b5090c388d269aaa08492bc2eeb55671db63e61c0ba8c8427c51342fe096cd3f01b1c93299d28d9556689fa4a2ec8b527e51af672db8512f3089f73eba707435263bf0daeb0ae1771c4d80f3ca608ba6098ff66ebd5c5dd875a51c75516e67407f362367dbaf4404eb9df058baef2bc54ca42310c1d864aecf016a571b8156c15156b1ce4024653ca8bd525fc616025a1e608713aa693433c4e0683a12612df66d7fc7b95887e7ec1beb59101b2ab1c04022daeda5f9df8b803949e945849744ef32f1aea2c5f207b7173ee33d16931c8583a7ed1201a8b6132ffc75a2250ca81b9fc752d49d3156dfafa0f928bd9e5697d5fc3981c54f60bab6bf3ff859367f7d4f6ca98fee21826bf0c3514edb8fbce9228e3d6986263b2bd1e08081e02beedbc96619798246f35552b8707c05e0fbe2e46757175efff0af8ddd5869162aa93aec8dd8206c08ef382218e6eae00e960ff498d31b2336306668188a9318828beebc3dc0870aaf6fdd84fedc14d617ddd27ec976e4663cf9844812f5a7cf6d6682be775c0bdab85b5aea58ea68bdb7217309e6ffdc0d2281d38ab4e4d2541ffaa308260d756358435515f5ccad55b7764e716ddda36dd2d183ae46a56310d56e92a2874f08c76ce4b8dd00ea96147c7a2385be28fa2234c1e821a8e3fc7151d274368d6512efebd2fb3a1cda278abc6774ae8e16ef8be939799eb6f2e5d7e6da4b2ba123e15b8bff6cf7be14aef8fed88d20ecf37d3e0e3bb6d149a11393379217b417ae178c2b5ddf45492c95107eb18577a2e093c40bf0742841509e0d11e534fe0a0ece80000b612b8de76c8d0b90661208c68fe01cc5c14ebb7a8bdb5cef283851d01dc0b2032762e51df534dba41bab2b4ba04d8b3705a3968d8e9849ad88435b5d1165296631d3722d8359539f5aaaa4c4bd273ee5140bdc7e40a475c1191bd2f65eae4617743d0013b9a0418cdaf27dd3d2e1dfae252dd4414560ee22498a3cc475f9bb318a5d98e7560da3541c4cb5a6fc458cd4a7cd3240569a55f33d7f129f7a297f102fc2eaf484dd9f6e5469ddc0542fc67c23d3194cec6888273236f1d6622b6b6f87b52da6f91cbff3d49d4d279db080c0a375f80d2e1ddd6d59127908d5391bcdf232830befcf7a83ff13b68b22455f9f9330b80c018011802bc5d91f3417dc67cb0a6779c9c7b6b247ee8a8338fff169d3343b3709422dbdcef307d2059c4e5e26be355265fd04f584c24a8ba958e8679baaa4d3f197aba0fb2dd35326154bde47a1a5620f87d88f33291169acd0b634429029971c0bbf8e500b133a25a59961a16529442c446549917c36f6842ac838704610429fce6a52c9e9859c8f5f23904e9c7bd9a3fce0584f4740b7901a7248a4b30bb6ea628a9b12b76c61d5d1a1177a3930599ca85235613c961899ce4f972a37a48b538e424f585174795d6fc329fb6aeca87d9c21faecfd0a3e24630c91437d38249db48fb9803dcf71152e48c3054db7e358c70f2ec0542c29ceacb0b96ec213c2b7abae3633e65d2cf68aef296b172d37695c19259430cb30cb4d0cc89d3cd87493d486a26583068fb8a1b494ba1cbc9acc9388370b93557f66ab4e810814392fe2d5d997c6ba66c29a3e6b36fb1ff9862ee0b31d695dcae1f895072b84fd2bbe7ced22544cef0d92666b7d82b038d37e504e901823f9e0335f9e8b3520b756c8f31bf281e53ea938ef5b351ed0c41053fd1c1e82b5acf46a6bb02c1a450461fa0bd295446e4d727e4111de5e1787e7ab420a92777cb8ec5580522bede20c0ebdc39eded15c6c0771c2d32cca597c3b8e9387d531827477332652da4099024c072bb32e5c34b78eac1d5a775d472b0c7d40bf6c35889bcdec27e8272d593f3e24c4d3fdbe722dd069970a230d995c068c012a2550818a7a1165c6015d124b796216046b7a81630efb1ddf7e8cb3503e86ceba90bb34bd689d396756823cff41aa6e902744af8ebb1ee906e1676864b69337155e25d144dbfb44212d1bb11fcc2fadbe38aa56189d337965e606b0a641863e59723d8a420db493026890b9b7b36bf4b960ae9131431fccb80938de00d8a415e66f4cca967edd431f11db5185d1037fa55b061772b47076437499272a9e81f83089ae77ce5f78f0de74ff5471f2fb366d316f9dcdfd544a42c1c0c6f90ae0ef23e419ff156d28aa74dd3a6ed43e294f4ef250d5e8f77341972c991657f5482c54d2c8d41ebeebd8e7ff131152af6072ff6f121ee227dc6b987551ae02337f1f1b555fefae2d38db08cc85f3ff94b4b0b9666ba1cb42d8fc6469c5db6c6d7557e716b7da4d223aaf6d0b3045d7a578e679a4d551739c10339e9b0a701db34acaf308e2a289efd44d0611a9116cc40480e29b1cc067d9218e2db5b29599d66a1b3193335619007cb42aab788711a6b747764a4e5f4c9b72d465f64c9a92a1d8365ed6444029a245dd0817207148b4fb512da94f2fb8dbb23204d8be0805f592c5c6b7d528673ff2b23fb100ec847ac85ca08940b548bd1dd81c491d83c125e461dd5dc1e58b48ed9f2dcb4781bc22c6a8150261b1737152b9b4c250fe6f9f1f2c66a75d3bed3bf158260db44d6046887b52e679d6e48db6e0f15852e4d133221b6aea21969c3122f3bf78c7fc5337182d02da8bdc74d8320e3d02bdcb864d2edc4284d3bdd1e11c024464b14c31730f0e6e3078f34603271aa57ceebdf351d42f8c999708496944dda73b6ddff1f6b12dbea82b14d951fb9a07db0b88f30db28c76913d7575afb9a6624afe2008776a9b2c8ddd9248fca0f7eb12a759ab360e3c8f1955e10b91dcf5fca47f673dcd80a04e0d2b3a75c645e1940964b4bb9c1a674869cc4669fc9e7852ba66a8442eea9227fb2057f74b1d48575c642a2639db78afa2f7d25b41ee765882c6a26640fd1c3330e8779a7c03b42e353da451f727d76a301f9ecae06a987985530ab82988f21bb7ea26c8bc521bf99a2b4e1c3c53bf475250bd387d9bc653f481d3a9b1e7600db89924c1b0c69b44e3ae694d8af2b27ae3943c9043840b0caf8b1347e9cea42405669baeb2b7a40f7698a5e2d5d396271af48f75c4db736b349e8eb7dc5a33ecacf7daadf28574345fa4a239a5e8359fb2b33dbfdc5b57d836035721b2557dc3e3b63ee12bce9a9be20a9133b7b1aaec93598f5def3467be60c15683ed591caee35101cb78f81ec1402877769aa37cbb98e2e1f2e7b5872d56776b7cf7457b6d81519a4eb0ca59902b6cbd7f451de68093febfd18348db81d66ac5a11059d03224b0f38ddb3e8c7b4670fc0a79daa6284a2161099e7ce107c6fad12f29c52cffb64787b32f4303a2567eb72a6a0785d691045090fcb9833b30a2aaf56fd092f53bda675de0f301f2d8552b5e9479b35501b4eac2d9525cfa3392be1988bb5ffce30b04c7c4ca305e13df0f383534afc75a00c4c5e0496feba017231522d8f6e8c04a5e303bd6eeddfd57b4ff211ba51412392fdb827f53060cc996af53b703ea99059e5b3f4c3619777ad9c6aa2cbf8dead4291e862f24b590b6f8d21f3d1a19c9333b7c78253ffec9270d67d590f906ac88664c75c27fe176d15db17c77c34566c3c81ef75ad2bbb51be00799f5f365317ee029cd70c5d987a94310050c44a7991b48e19f94fe1baab16446032a5bde50db3ffe8ebb5f458f848f925a280d2c951cc2946bad90a8330e6032e12e0dd401d5b22bfb428c0caf32c256ea34e95670eb1fc4fdfaa7b2900e36b4c534a4d41bb9889617524f72fedc65c46c816a0beb0c7365c76cc5f8a12c64b34539cf35dd57d06f218f0667eaae4f8000a961a66c586764aa3cdcc041525d21c6cc64a9d61cdb25afcd9137a4a426c88ed1842398b48f11e667fdacb474fc7d55d9a026d0808cf686949e774181e87b7d4c8dfe2742724510b3600669c5763a3170fe060204498dfd8d7abedef226b0121894979d0a15c3584b9a70d60937485e468773b11e9594c2d24b1420f7a96b7a82777e50a6b2009f5423b5705a57480a263edc2c8b0d7cf0d47c7e88513ddf4201d8615abd5bc8062460f05e5c5acafc484d3591a1acc04b8b639d42165bb9887890c6db20b6779b539419f8232d2a1a29ba936a6024693782f4e8a911db7491b0dca514c2a2d4b90464b0281f28a04b838dd5fcc7ed0a330dc17c98cc1a611b5eb0fd1a778b6f701b74aa536799836f558970e5570b0096432b8fad3432b5f010cc21378973429b25fac444f0f28b6ab8330f35b344d43fee1834d4c77075ba9597a7fcd2d2c1bb3d307163dce48df084cac97f82aa51c251b088dfb76d1d51fbd6020d7cf13f5c282455677ee404abeafe2c58ae0da88eda829571784f3f9b1771b48291d8fd9c25c6f2a7b71535baffb30964174b060fbf481647c2c9057fa763f54e2a01307778e28d250ec3e085cc9d79c1ede28f82cb50f79751bf7ea953c83ed4837c5bdee432bb5e3d329c73d90bffb460053395a63835e1d169282c74d8e9734d6547c29b1fc93ad4aa957b9ccfd9b6df7ae792070523b785a4206c1c8825fb9c4453aa432b9ddc6e002a2b3d3521cd8f28bc08349f5bb57be2eee73dda0c93c51b9dcd33ee27843dbcbe84fefcee19d8ed1d4384610e127cb20ef77cf871e95a54007b50cbe36fa51f75388966630cc4532e01e56fc6b383bd922fbeccb39049180488ed939a0d0e35edc61d5deadac5fb74eb3ee4c7ce5a649231cc2f44acfd13af6d8e9941a311c8cdb58058cdceb05ff3cb2f2ca452cc59e85565c5e57f73d648c0af7398ebecff07dd0c11332cfbee5c6f2079dc8b622de40be779ad811b2ee669dcf521e858d2404da0fae9d7119c09904954736e52303336285810f956a0f09ea3c16b0f8d46410e1f77cd2c51e2267c76ed6a369ae03174b985452d75aa07baad0fdc463f0d0c7eec839e8049757c7039b7eea4d52a4f8e99954afb2c57a704ab4cd678f37b084f101ca5e0d329df6f698029ab6f22654ef794d24c978dda354ca3ac36b05fe3393976376037b3d6bef2690e3475b05cf6129afd79e2d6886302dc970018c99ac775d762cb85845f41ecfc311854946f4fdbe237d3936d85b34f4e8efaff5f3d86287c70e88fb051dcc8be8076f8ca180c237aa75085a822bb69a78f39405c1c58cf82e6fa2ef5116e010f29d77b93e50ad8f0a8ce207a35d108398aa8a78db2cfb303563771fe1156a2e4aee3ee966794205589a0b124509f90a30319844d777fd6e9b20ce41e02f4eb943a4bcc92d14071df0a076278dfb6ba80df16d74de1dcb5df5923e10f1abf7085411d416b3d22512cc2c7fe134cc716df68a4d243e235d14eaa971c6027d9ecfa72c2d0d85ff3ee14e0cb6e1bbe253a869f978388a85c3bb6f960b0fa1b8ee82b28bd44bff9a536d36f452e02b4f8edf34b9f4dceb189d31913bad94293c3ada9301dcd1919a6625544fdbf6ed320d5e6366c8bee7cf1c83782404c453d6f92801c1eef1b027bad45024e5d0c995a0a0301f83d2fcc914d98b37802b182881abb36666025ed424148f070cdc2adc86220ad8b1fb6a36ce3dd676482782c5ab057a97c4e5f7081483ab94dff867d9edf0535c96c09143d6d5a5ca02bfa2825bea39933dffe8bc285dacac7d893ed51825e688b80704d5ddac3708320f9982fe81a20fe7fbbc8f5ba92c8df57dc1ea8a31292ddae38b61dd037d1d20ab0b5c60508303a6727d393fc0af682a6cfc78c9d46ecd28d960c1ecc493567b001e0be500dd9111ea258bb53168718b1061663551b6794f85d80954f4ceca7d6db6506cf772ccf36d1018bdd386df2077480104a3b3077fa9932e0ebc405119b0745b057d7d0e269359d9d3f6329bd72b90263141114e2e27db6723cc7c0416d7ba5350dee2c77cc9e18df3d3f33b110581c5e4b13360f4b5b561eb0ddbb0349cd3a2541c9d4906fa8d7cff1a12d74909241a7f43548ee1bd32a3981b6b940e189f713ead54b5f1023eadbc82c8f2a27cdf0a31ef63c0edab633847d2d7a40f39f1d758b44bae6bc30c846cb4ec66266ee73a9a83798b2f3367c810636baf605534020a27afdebe4e196ad189c65bdb1b72f07eefa177980960f1a00c167d15924bb8aa8d21466268ee3483f9302df72b5b2bba25f74fa894b2fd7fc8c4c927307ed15eeb42a96008ecb4543baec399d5bf914adfd31ac614a2d1e89b71d4748fb3fcff39dda5e02c5c13ac7b6a2d57a721661ffb69d4ac75804e3f62cc980b8af21dc1b97862a74045c51e391eca2f4ea206b55ea93b2b69c3b07e32ef952bd4788afa5b5c4be7eb0c31a6a81ca2493c99130ff60804da6e061166fe59e2ab804370d1ee50d7a022b75d7d564a322c6561c6c28c9acdaf573f242a16917be3cb7662cb6da797aa530c006552c274e35e10e3688cb662df4a4a52e568f49c5b5f6f0f4b8e4af7b7c1ec3751e2560d7c152d9fe5c7f618046dc17845b791018dc1ae80f8d1beeba5cac859cf906ed73812da93f3a71d2b11939cce85aeb99665fcbd21ae77d1214aff47c506919bef0632174769514f1529e7905362f4cd66321e814548f46f34d2db076b6de1993950f033259292656206f535bda859f42ec071a89c371dd0ca404172b7500dc1918d175e3d33a604c795d1fe7c19427b9a89729a0b55c0cc1cef3f0c67adcb96c2477d21a77e5c2a77025f99713699ae16fc28f3175062030645644da78961f32b7c61066d05d7f60d1150acb4beed4f213baf53e2441b2d413806b872aa8eb75e0a74169d01d1e87738d408f5e33a0935dc6b49fea4c7efeb0f9644970aa3fb9659678b93306735f7b874062479e83071fb95a8125b1b3f1d44b2488362a52f054fb766615cb609c448bc2c10803eefc4f9e83cf8f9cf6fee52e3cd328e332e25bda807eb4c81f27369ed416a84fc7e208021f818c44c410570662147602cf86ede7ae53ad22fdc11eaa998ae38c995c2b84510770284994f1e8423076ef5a55db140cd0df8f34f1da8eb2c971b880414c1d3926594722c0d2e0d1406c7b5af844fa94e4a305e2d52f5d86b341a06ecb90ce03013abf744615edf1b10b16b86efd49da3f6f02e693d3f6ff4de58af540a358951c84a5d18e6d46f4c8851782c693fc1dc4ddad029986c785b4d1a8c78b70323194ec8a7fe7417bb56a49b9344d729a83385926515f1e335ad4bd6212fdbc28f5b2ee3563ac498ac0dd899f1cccdf50739415fc6727a67fa5ac53b36c0da80a684c8b0b827816b511ee7f8d032b95d627af8696545b0eda45bec6bcdc10626c98a18e443f60d5ea6820425acddf83a948ef9bec579a1b41d3cc33b5a356157d043c46e8160b3f055487cb8c9a9a21812309a4f05b666e396a16f0f998d58f3e9c9b2a789a0281ea99ad439afd27f713b0f9601b17cc4cc7f4fa2fb33d5073d820321ed8d281701c06c5219fbd42a682a91a3e1e3adea53d7f7f93ef41e661abe1fed033f0b26d6d0aaae4948870ce2bec4f7f40f65318ccee3f9bdbf78d474e89cb3c4b1de4f4bc036d24ba5bd4dbcdf845bc232c9ad965324e7bffb81187030618baf3871c9b2fad9da750e0db9107ef2bc11f00982bcfa7c657fa1b33e95e53bce5b7d8747f8b02adecebb7c166640a72b4b86499ec3623b8b70b082d75f5f86d6807385f2004c872b4da59794228b78f16a09c47171bc7f71e714cdf22a421a11f52a411f77bbaebe34759fa5acc8c545342f43b2b3b7680b807e00f143ee1bbf684466f77a63497b1ac85d95d0a2ae0d01fe613b04f465fbbdf8efddc86dc0296eb4f5597b9dddc91e9c4516c5099b5c8c749f7aa224f8ced0d74f3116ae95747762eab1a6fb9c219b08a5b42359fad8f6ae14d59c33d53beb710fa44ef4d3865710bcd043b7cd05a01b15cfc29f24d0fa39b9d0868e50c4927dcb2275c8daa74e2a3fb2ad16484f625c57788bf0efd8d2d222eb2c8973459318306e85be810c3c1f2b07f68b67a5aefac93127d3528d1511b4d7c48940482ff59c4924de90163207b3d28b46aa46bf5a9f9c6ff16b8737e40eba33f84f481209fa955aa9e3badc164da4ff5941f249343440e1cd2a58e5300017693c73e4adc1d6127b24077c72562607e7da3844791cffbfed49a61423e4c6abedf5c0f34f928f3c72d66ce54b1121c58a266590fdd5e1354794751bb6457afa2cb34600587caede5c8572dd8409affd03d9ac7e7b747de1748d3a6b7651ffab5b7facdb69e17284f901e6b20c8d929bbc806a731f0f0a169e89ab366bf011bbea2c68a3ce25f793e7b9f53b59d1b34d7131f52747abca454b483eb4e334919604c8a2f372dbe4828c185407425b9f3d72a413ccf68b838859775ced7e1c48e19b714316cd7a60f3d7277d30894a4bf7cb888fb5c118ed46c41c2ec6019fb5e00f80726a858d961d76951d76e39172c7962b30258125c7eb3dd3c0583ab755ef99999e38f3287683f896e361abb555461a5c9cd2055bd3aad8021f0f6e012a05be0a48552f9cf2e577dc830b38313d40936526fe731020dba11abc7321b40acd39b84243433c72ea84ccaeafcc2327dd1eb280da4c769a63c9a027373f8f539501c9c7444b906442d5bc8c1940ae8fbaee3423e6fa5c00d2396c9aeaceffa2987d827c0e9acdfcccecff087fa503c881a9a8884ce2735f417b7254a8645725b09bc13a1d9b24f1c0eaab879772f472d165ae9e4eab009d71fe0b15ae1ab5076d14de3f78f9c72813d868a56111e34a88d57e75814cce697b7d0a8c3b2df5a6d0847e619b05f734891434b8022ff9804086a841cff306b766bb0f8f20cdca4bea6d5c30b58e8820307382f87eedfa6333c97c17ced39ec4deb0b22240fe9ec24ff8d14dcce80b82d63be9aad8bea21dda8a19dfc930d61382f0b3b335f27b9eb8de9e290f34e0b76f1262c9b97a282447afb7f91894898e5929e0e21962cf34813009c89db099d111183dcdcf425a23843f59f0e80e2e1787fb603d4101e3c225bf80b183eab0769d92391c72ce950f530e5b942bba40896743a16b8a762e85501744ca1e3f3219bfe86705ab271da8afe1116a3ec3c6071b1ad5dd3d3ea23249b076be32a558a1296d49399943182643ab6e1449c79b313d26b78880bfbbfdf3cde4f6fc424bf45bc02259f82b59657f4c0074bc957d1e607f8f76b9aa3a25ac2ebaf34639deeff0cc8dc3d8cb84d55993006fe1d91dcf4f3cd056f14d0d41dceade4a1fc0bfb8dae35a700a7366ee738277a0572f5818f763482c428f6eb3efb91970913b27b2d8a14ec47c4cc083feb7db4e91c507ae9194977b89e61c6085e4846d24fb09ac2024530026003d8ed9c794d71d24532a551c321dfa21c2234549725548cc7be7d4162f6432d75b8744a2437542ed61c0a10a71ad9503752a2c2ed2379d08d22fd25d2b36ae420da7ad39cbfe18a6c2c92fa1b249a6d0de7c6f1ba14bc2bc53eae17115009e4384433725aa5312efed7016dd5b1e109e4074908ec16d300b00fdab6f48ca61c73712ad0cb967f67762d0f3075ca99d662989cbb2e71a24ec89b10d1101e34038e588e7b0f30aed89285b3497a18197fa2a6c0dac15379f81eb8ebcafbbf82e674e614081384ccfaf0452789351b9b00c13ab0e2ee63f13804607d816bbdbf0109cec1fd58fd69187ed68ba5af312dfe1084929f666ae35c6e92979c0233b94f2c175ae64eafe4b4dfcfd450068c662222f05116b6af97e1f99c55ead93c8b67633e60b37c0ae0276e1fccffd7a6d821e3551e663f6cd10cf7284d99c731e46f23d06cb92c6020df0c91ff0ea7ea5c55ebdaada1a08b0ee9435ecc0d93eb3fc485eb7822ad6f3c11855fdb3635b2723f15085fd60abfbecc4f4d5928bf928d5d3d4765b7ddaced290042e5ab0543b05542509bc84d98e831a99e65d4385506d49646b230912027deeb30851220e474864ada703ff6313417a1a8f36a34a9b39d8ec135235752371f330af51ca048fd829c6b52cc073611e350e291c92a7fb09122e2287f7cd092e338ce3da5c78701a6d41594d34fb4a353303a90d6a7ee50b99d51478a17b1159fceece9e9793c8738f27081044348d1979103d6ff7738bcda2b21b4b37902a04ef854fd77b2889907eb51e801d6678593daf00ed8c1d65ab98754ff0286c0db60db640c24c8f87aeda7eeee922b0d4cbc0b9ffb1669426c49f58e794f641cf22097e7dceeb98fd8c08be1b30c561b7482085312d2db1171407fd63c332be23da6496458bef58748f7dd4d848b5969d67df2a933be60ef1539c2d0eca722b01ce565ed1b8c2cbbf13e5b1f247938eac71d5d18a8690e290495b5a68f9ebef981916e5d54531e8e78542427d9c4c3cf669155424951507f55268c7bdf2e7fd56c02897f5203d5f8100c925366feaf615a4f54246f1d43c24ecde93cbc72dbf255fe8d56d73071959a8bf6af44941f54581f761163a99b9be19f988b682df467e91c9f502a613767eec9b9c39d46830c904919667d95aa67bd12492652fa318cffbce5510475acffb91561b4c06b1ee549e68c7e8a4c22be3986c348ec3793b4351050f8991556e3716c9cf717a34874b05cf149cffdd2491cc1a85356f111ecc69cc553ae1f030f10bd22d56dc49cce8270543c31cd258f0bd59d9964dea2c5f07712b12921f9312a6f0ef10958244ef017e08c511c1b703136cfff641487ba1ee70537495955affd0997e5e5025b9be39a20caa50cf7bbf9bf024c0da5f4336c64b6ad0a94c4f4f01d50fb6ecb6c81eb53f431dbde755f0d93bf2607b6da5ee94219da6bd20f17d91ba254774e4ae1270ee68d99a269d58b45296f76ff4497a52052a64b51b39f970e01ff04abd1b603e827b195d6dea562c629d9e605cfd1ca9c3e69454022ec4c748c6ca3ddb6657d5fbd9fe85640d94bb6180130c022fdf0a0d37803b9356deaf152961997b407cb69463e7d5f5cfe4ef9494eae4a75838aff584810a3ffdb8ec86fd2f3742deb2647902cce15ec8387e0cab861a2e950a60e1db6832409759c228e01ca038296ccba800fc52bcffbad7e4a8ed0b1a35297cf6c96f4964c9b9ee7ecc2267f1c62397f7042c02c30d3db8d508c57a92e4b53b7cf1f1cd1915af013c20a5d7724dad91f1ef0f468e93641f8483006853eb791de08041fe04b20df3b1ec4a5c4140973337214972e8c2f268580ff612060283c823d6cbea0a95f62d2aafb27f597ba6cb0d868a3ff05ed97489eeac41f1a4f807ee3416f27cebfaab96653d769f3f455169ccd75d0803740df15c069657b6601ad0b257d891266bde2da98d622734fae536b1a36c61238c8de8685054fda079d17425417ca186737bece575566a9b605d8cc5ebd6663790905a005b3422959a58ac507c2e3bce5aabe6cf40cacc4479eadb20b6c82ec68add34fec0c8d66bbfb9abf0bf258d89d5edc930a7003ebdd711565322e1f1ad5500cf881fbc518235f2a5f6f7bf18fd66939809687331c17924a6aa8914f8c09c7a3a42ee78c629bd6142de1fe72c4796e89c25412e1116ea76e7021d241905ddb326c9f4980bad57f1d40e730e7c72b40efb0f918de0b240b81be6ff54bf7cf90ba67f33d7940e093b7b6e1fe87879ed6f297ea636f7a7267bdcfdb887d384dfaab1d5663a15603374e7f18c89ef0e5d81948215f91769a6f8ed77bcdeedf10ecb539ecf1cb4467f818feda27755fe9c49834909bebeb8f1c6a4b9a1a2fe60f2da585319f1d63a5295e631961ec98e8e710414c0324335d54ab49977c616c64136f9ad9eff427e3ba1e2df1986d35a4172c18d2ac46a5c61675ff5dfb3cfe4af663cdaa84c4e47b6ec26970c6f6f39c442625b4b5fe12bdb7d68b067b35d48ece30107839e3b2d91812d6f94cf133dcfa31a6977037430ea7f9f02c5e1dc1376fa9810fcfeccf810d9c0aa849e14065e6413d50a50522c047e9a9e05aaecd3a55bfcd88a3d4b7b897059c220d978e583ee96df06dfa283d9b49474da94ec0e4d4b72728e3971ff3ea8eec9dcb8334a9dcb00c90c5faafa86a15806b7ff79829a8fc87b7c4aa10f666095aab081551f9fd33949f7768be0778c2d1a5181ede5df21cdcde5f05e6f11ea460f1999bfefa592fbe5a372217fc79b216e1f9ec70b31d5788550d5b713cd59877690c217ed4dd0c2ca9c8f3352e0f5ee94c662c239acb2d1fc620a02a858e7dd5c9390bb44204012d40acce137f4b55e541b66a23ed722bc9826222382c2142ef3d932aaa1f2bf0726942f46cc838dacc25bba330dde7d3c1410eee8d50a4ba4ac1a403cea65f280995508bfa56c1088d06d17d2951e82cf7f840240fed2c96e26fb9c381b54b027c1ab7ce2e89845aff8eeafe787ae41c327f1a51602ea926231a86cc71f7ad6ac67934f336a5b197ef805ef40d4b9398a89ef52ce183ba42cfcc3f7d42be680dbc0faab4f74e9cad12fe57432febb2f64eba492213ff48b13bf3c3e328327a6d6879abf181f8024960a16c21889a274e93e9c0d66cd5bb550dc635cdd10fc39de0f0ed20f962a5b9d4935eb71acdf86b3f54ac14740363fdc7da510b62ff4bb669751126cd0ee53b79a34df76de2f0dd1bdec3d92163043c76bbd3b409cf6478b2b320044ab6476b2b8b97ef934ed3245503dd6ed3bcea100c0236b17c448517a4792f29feba0a4f94f244178393794172cb6cf2f0f0f607ee37301633ef7a51c2c8c2aa1b9cacc2fa82b7b9b4f84b567a38015e7b39897283641d83c2da33630a8bd7ee96edfe6716f131dd6f20ef32e283af4d0e3dc2578c46fe8581fc39d4f5b1fc93f7a6452c2542eea50c333cdb09023ff9e89738ca31ef78e13dbeaf65b08bdbee00ed5b34ab57cfaac42554d2ba4b76b561fca3cffb1bdf0d20f3ae0d0639f0b6b3297494c7627990bf18088e3170ef07eff1e25021a8bd3f375a5ce6fa059955849470d584b8f0cb0c564cc3ab24f46b61caa40c53b298790ffac643907e7f557d4176afe4bd864aa7e0a18bb66a75e88758f621a412370c7ec9c02df89e91675407ace814663b0ae96e6dc420914af7c700bf813ba84a717d5baf039c445fbaaa3ce066b6b3f7bbe888abe08e2162d3988ab650461e1a00ee1944ae62348b91ee7dbe43882c04e1952b9a2a6b8c1fea5cb513db64cc755b5c1f4bec73458e23b34ae58a7773feee5b8319f02f820fc6808c23fc80cd916a417c4ea5ff1b64c61ea83b0fdb1f705eea169336da352aff076e32743e9101f0a5fe02acdaa14d79f6a51767b5b7df240fef9d7abe41dda8d08435eefebc08c50f468bd036fd5d46f9d9bc8ccffe61a713d0801a34e13e5a35cd593d7ee83ec55ce5feaf940d3664115cf4b550649591c8b7a99e98155dcff2a4e422fce5e176a408f11ee0f12b727e4622e7464c7891c1c16872220b135fa67667781bc282ccd5e0cffea919ad0e14164288d42f3a726cf5e9637780cd27060e8b7adf54c7866f19290be952361206129d4905760f14b8efc72c0d31af3dad882abbcf50c1cfd0aebe012f4c89179affac055bbbb754c596282687282ec30050ef66d3ead3d76cabd3d0094d254a328348f0ecf7cfa07e37cac4d293d6784cf5fb4b90fcc9ed4af83c7bccfe60963bac407e8ae62aabca722c29f47ae2f734eacd975705c5724ea09e65d22fe76b2678d2a04e4d9e89fc05cca56393ea2ea2e6aa287e20283d77b1d439671f362fde10cee259d529021a8e75f961cef3dfb91bf82ee97e6a9876dd609414f7501948406eb36e7484b14da96e3d2246e2372a3d9d0d7761ec8e71f755c87ea12d2baed9c3c1eddcf2fb02472e779bb5eaaa2999b2b9eb43acd123e89288518912f9cdd1996bffc075c6ef142408d63923d2bb3b24a2e22dba4b87443da18f647815d8e8bebf90da410004f4278d9d06c860d8f2878d6d75c0c6863882d20941d2e03d31f3a32bbba7299a95bad910fc0bd5294d5144ae27135d1b0e158b51cac2db3ef4fbb383a5a1793a6456db6607c9ba6ea727241c639fce7888df46a9e0b37d0a688fbf14ff1259c777d1354317a5f2992fb390d56133b99b1190c98c14e4864922a118e398a17099c1ed93beb9795546193cb21075593a1942dbe10f7657a1d1d3ccb3a1ec89fdfdf1f1e82f8ec93897d5bc4b4f4a3c2afc7050c77c55a8ef2dcb935b6518252e0c1687850bb55a654833ef6d46db0330387af6f5decd83a0e0590aad8a2a50414523a460984d43bdbe1be57b891cf1e9a2625658a1b37abb783661bcc39a52c09852b4599cc71c43b00661024f7099e2268e58043319e5d7435b52ea26db570d31211248096388f5d2846f995f42f49bb1303c7d62703d196659d41a0ff01c2037f372dacddc8693aa23ffcf9d39353ca687fe8850f1e9570412428765ca115579fecba1a9ddfca283f8bd29a14dd7b8698e710b07138354229e6898c231cb6db5000e71ef2e67a1f14d64227f732ba5958a0d686987143b0a4b63472c346afb38d9166b91f79731fd482559db0ca4e402078557ba15a429a6e42c4f4f791fd7e20cc3ec18bb8c71e9eb61d22ee8112785af0546d418a8e42e023cb8b09ab4d27b964e3d9227d40d8025e86e4c1c124f928910a304c19954eb7959179e5b57d3df95832c25d5de473f87b298739f8bf7c24c068b1ad314187d566671630fb83d0ae50a45f627bbb768744f6215a17518e5b86a2b5fbf044021ad25e586504c93d4704810a727f14a2a6372ff801ffe81af20fccea2de81a68e2c201fbde25fc6d9bc1b1ac244b5dcad3dd913978527dafdfda0af593e1ab1ab7cdbd8a8a61800e2135d329f755b55af72c30c1339f335bba96186d6c3bdbf7bbe328a3f3d4309da9036885d2ffd69206dac98956df0f783e894a812b25b7411bbf8bc962875b70644d9949960afeb54c98bca0501b83c73b8f29b58fd85f1e87ef955eb18468199d659e528078b7b3106f47aee9e66de874a8b4740b68b2a5c5bf50deefa8bee49a4f3e8b8683e128877e4d67d0de1d3f9516b30b0e7732c449498e285ded01823baa99917fb988521a9f1fbefc2fde97dd417e9dee8c26723a4a176c54292037d073a6ab01bcec292c66890c6db72f4d646d56b42991b1ccdc4c67c448f659e90885c8327d9896d3064203e066e853f5319ea95e8786735ce6b8af51c9e8fe0bb5ec940ed9bfbf1a2de31988bf4cb79eadff27171f01bfd1bb7ee66c57c8ec9192c061b9f295f726310271700124050cd40aec0aed38f656862082c346366a1e5a4958feeb6e87be81bfbf5bf776a6984e17e34a6bb2817189726a2d979132289589c6a0d942a0bfc67a8c7f2b920d35bb939b03e909033f4d974d56d19abcaca086e86ad30a3e7c7c81d42dbe9fa6b3301299f2ff5cdfab10a72a1b998c7ceb6a2463a3c71fe2c905c0b0f515f8e5d1d64821b302492d4b6b026398792d8d440ed7fd9812865a98e44f210483c40afec764240d643a56bf4da0356506bcd36450a0d75c631faee3e9273e45e04c1a28f347f0d5e8302f9eaffc5c7346f6773e916502e400f5e59e98101eb9c5dcca6921b74ba5ec1a485b6932b6f53725eaed384f62da05791772ca71d720a20565b1372288c2486e25a543b2eefaff000308a1ba6dead35e4d7de84f2819fe0ec876298c2705ced5b6e41f87f6c192ec7597b1a2644faa40f2d43edc9337298e51968328a04e226ca6839549e97669fbe0fc957e119ff341067e42365c7b47c178e3ebec6909d65155e062263fa922421bff99ea18659b5a16938f7d48b7275616421dc5f7bdbef92f5330dda9ae433bfb508655169f2e62b597ae003d194b591110fb7ff44765b8bedc1d3811e0a10f2e97b5a29a9b6c7de2756238a024163b6d4767b28ee7a6da5b209d0f3d52bed2714c8d1cd909afbe7c46db126636f5715f7ea3c6ae80cfa012710c4165635ec595dc3c80c8a1a209fc234e2d9beb73c22f420c1a2e2e8075b1d4500d41e5ff40f038360f57cfc4270465abe53784caa9c8f220ae2b10136673894810afa534d6cc61c950373d064892338e4500676da03f3971f02511f2a1428769dc90de72769ab374325341874ad0bd52b260511f0e93b619bf7dc9bc4cd14558fbe8530a558242e4660e078dcd7e4899dda87d49b24befce90efcd4822cd73f1994088c9044f2b4f828cc94bbdc8914a2bfd5b175614367bdfd4f3e38f65c10c954301b58b005f2ea756fef1f275f2f56e862cbeb2578afe5faa9ca1678568d32a301ed0a57d7ae5befe5fbe214b5573fea1767435d6ec5a9d3912b4c7bc7506951aa79b9e96ebd2db9a2c805ebc7267132e42b7ef4710bec94433cc0e9c0f377d52e66669ce47f52620134256db93144b2018c745a778f1a4cd249d94a5c7abcda5f00022ed6c9dc0b6b1951db0adb6d40990f6dd23cb361d33b2270d24cfa6e9e58cac163d0353813614bc5de3eda6a683642d9d166bd76ea0797bf12270e1a42a3b18ae4ef90129d5ae0eb359d55db97fb29c8f7fac997c376ebcf0bad63afa1eacdd9c89c59176b2d55370d7279c59737bacbeea7b360e696d90f3f7f36e5b48eb728c446f9fe54fc477fd0211fbeb2e3283d349ccfa9f9c62e6386b3d4e6003cf2c800f446c2250d7bc06030ae4fbe5dafa4e94115479621b01886a93cd022075b6460a0ff0e2b263e85f3a246744e06fb3588300667d93edc2ad8e1e63ffcab905179fa26da39bc7b591f1f8ee2ee72127eceddcf3b4ad83389830da4adaedfeb2d071df93ef5b6f22c3071774ce3332c1bccf5cd78b0766f9188645e8fb080a8a14bcce2bb50492a08471468336904e3a6ec4f7afa4ed3bc3de086f9cb3823a9f537c1e8cb02f22aa65371c7c3164ddc54a5d6b90293d65c131f9dfa63a7c1a8239fdca21cf0511046ac9fee1f154972382da3612cc8244f901157b39bb2052dcd34eef26cdc279187dd6f071b725474651d373cb5189c64f4230d6210916fb9114deea75355f2d91e00299acb1ec577676bbc2bd1e21f66d7e4b0d97c5cfa4f48bd8eee7a4e439be4ecb277e76c44cf999c81556a454ae32495acfb4a2d90663b7a7fc13f1e4b1d886572d752fdcfbd33146f47ce412291ca8f8c386362830d03d8c3733ce2fa71e6e90483788b8d0aec9c77f80b0e2b60c786b50fe1a26ffcc14dd1cfe58450fe2066803dafa62c63a42b24db711a00c2d96c32bf3e638c6e87df5bf67dd336e0561f493c33fb9b3fb2eee143ecf8ed750bf57de414e7d310930715e16ccc03940ad370fe8c20c470c47740af154ce36d03e9e8b735ab9af1cdfd8f1a591169851612297c562a61ad364f61e47dcab3fd045f0976ec2e36607992acf674790fb09bd9d86987959ec16307fd5bcb9b90db99679925ff9e70b6b8397a57785563aef075e7c1b8c3dac72d324b54b3611befa83471faec68297949e7422ff57e4cf51156419af0d063c52224a30058268a67933643c6eb1e0e97eba853a8ca152c6efa5b2f754b3477473499dc0981ce7ce8f837098f59824db01f31af9ce146c658a82bf4b88a17073f0de954ac06279dc8af1809838982180d92cced5f4ef1fdacd6c1de349b0c9550e5a233685abf917446281474a4b1799d705dcc9b0fc6fc28bd4f06cb9476888933f3a3adcacb66bd440ddde77d7764b1313aa543485393f6f81baad2cc9c5eee4379664e59124e3b6448340ea92517eaeb5a17c4f9c49baa8e4134be5dfd51c06e89e14857d62a3a24f808ded652084ea83fbab91af112de597ffcfa9128e834669d03e0e3d2a132e5d28734eedf621cb72569e616d10f359ff56729ea3cfc066c02a0ec36918b98fab3c2bb3134d6545b61cdef036c7fe897442e407ae55b446ed5d8fb5db08e7732de6fd9d8d93abb66d1a3e4de87a41f9290bb72209acbd31753f90a8201526529f74283073ce86ce5305b191560f140524c02daa727dd60dfd0a25fa0bcf0aad90cec021cef461003dc2029e2b96a1915c7b267dc80ff9c0090d5285ebd079054bf932ed99e17510179910933061c103c364ac786bd3f7a5510e805eca56f1e901ac93761000aa03b90d04e4df040dd5c9bae89bb8ee13bea81f1d9152b9d0a2520524f0588a8b253702a5630e6987fd25921b8aa4fee458742451ace3040fb46bc67f2435eea36ff568b9ccacc16d40812aa1d54b43c7eb47938d6ae05c00998e323b9759ade82cf3787e01ded1e408aea8a2b101949142dab6318ca8af2b998a0dbf4b3b844c745da64c743e8f34c6c243776c0c9a73eaf6bf7716048198f4aaca58baeb6e3b1778c662eacf7b2c387debc5699a53f57c2335cdafdcade9676a0f1ce0277fdf534342e677daa590010fed14f9d5907de8295dbf53c9dab0259507a5be71a49f530748b8744e8b6af58bdb96c0fb5101c5485a91131c209f8f24eaa656c681b83a12e657da08d95654805b961706dbcf4e042af1552c65f33ac4806bb1a28eef1f7a555e6afb9f8e90cec28b875ae72d5643606bed9410c0b93731bc7ea02c18f8f04cb1d1c928aebef46ec8bee9e6f27e781ed4994b25ad3feb3429053325b216fd8133431807c3a618b83f625700f94bf426ee05826f269e729c30e0e429d10402510da686a2a94703e9b398b76e76046193294ae352a630ae20be526361d402262c3e6c86ad8b946451c3d984c4b495338da1764ada21430cde15090f3bc4992b8a47ad2206d330f2a3f61cd2849e0c9f2c6df9dc6e539d362d781825817877ae178acb9d2bc9d6b909de2aaf04019e7b20c28e2486d60e4b5dec1a88aeb09777835193a06793ddbd6a5665fdf0ce5428e35aa70922087b2f80df64ca41c646d6138b7d7b3dfff998ecde3260594ec8c81187a1289d26b9d111d843223022f79520191f9e6158ace0d5c8926e8f52c3e1144d837f764e7fd57e834220a90902f7e0703aba1dae3d7f790f2855d0b4082e3399ead916785cc987fe3faddffce1cff2a16e8d46e27a3799b4191db0b4d0cac7bb0d7e22fd8fb0ae2a0f13febf9c7c93cc6f055104279743fa1f8f698ad0d46a28c4f501d8bb756c1d6624370d22fefd246c546a761122fdde205ed690bb65489c6456c5242081ba2f26754043cdee60326cf95fd9f92d3ca117bc26b024da1d5b1a4ad5890a0b730483ba32a6801114748ffdf7cb371f02a7c5c557ab48140299dbbb860affe6fb6cb6d5c6d8fee9670ff918dfe804f521a6f2da3f29a29e72833afdad9b0e3c84343b1b2b3a451364f5ccc5f8697e9fefffd279b7a5c82158e33bbd323dab5864c6638383a71bb27f0a712a4d2a8cd6115536c6aaa5ca05d239ff918f2df87765bd71151517468325e4277d4432d5754b6587ef3c1463194eb0d41e810ec12ee7faa8af77c66fce9c7419a0f3b72882c75e84635aed2c39fe78a631ba41e21d4a1fe781c8971539ab4532eb7104036b41be59dbd7f60808b0f40c94649fd88eec9909cb5a7b252ce7b8fc0f4d47cbfd2266a11a05a3e3c700fcefb3590e9a56f8598750a9b98abb3c29fcced07cff6cb355405fb357bdf563992e3400181aa5a4e2edfb67552640bcbe5d82693ec318be46c52cec98b70d1ea591b50c2c0866b09a5961503b25ce65e27cf53fff223722bd19381834ee0ecad0b345077e25aba94444a841a4712371d34406c1bf84f1f69e287b18c2e15a23ce1e21f4d7af7b19e4b3ff133dc306f77a7bd556be7c3a717bf953965973dc88045b8a0263605f83e0f703f040fd4e243bd5ec12c309146db74eb1495416e61fe4fea58b6959e8b48801160b4d85ef77fc580fbdbc11fcce15afdc820a2d33041de01af674d421cfbbe3f43bd80c2d6f2da259af065ce8aa22435a164890e22b5e42b1effb41af9a666c0dd7c6a8fd65c2f1e94b6b47cfbdb6f1b3456d2dbf0246c8710d4ff4bb9ef37a54ebc0b443eda381c659727754f73bfb87e1fd22baeb63f59c2b74d66746834c5148c4ee8a85815453379d8a42682641500c82e33c286607c4b87401de44024d8b32e414d3c11fae1e6070b3c05a12bc3468133e32a94240aab5a7ede30e988dbc9a2a75b0c374217950f08e8465feda8eac4882bf2815b0566808780672096740ad72a492648d7fc04af95a1aaf2de666399c2a5556fe8cd7ff0db46cf5f5ceef325f1d51deea57cec7548ac686055be7b8ac814559943f1fb4844f372f83c5234f5d385570e8e29cc1e38f288c7291acf5740660f8560117205e2fc993f11a494d31a4c3446fd19f0923f9719aac13fc88f2b5c3af7ba37fd131e5b55eb609b311925f1ebd42261d9680d5cb85411be997f8e450f6385bdc8c67d986fa120b6e0ae536438b7e3354050c502be89542f1fb6c2505549c5a67794e23320c79863360e44923a69f52eddc55021598797d4a4b8f0c10cbf694cda7fb5d1763a4fad35332fc7b1c3e7fc4a9ed7e571589ec22e4db0b5884dda838c3271a5fe548aea47684ab1f454092a7bf7e4b8590b5853ed8638c845228e4d72226c112d87eadcf23ca0ff63591f8e960b2df28bf2f1f55f5478f7d4cd13b9d5619319d71670c9e81b5a3a992609e80079d9194803d8483f2cacbfd240ea3d4d304c218618d09a52fbbec2c0fd776f86a0bca78ee708c36d53d3942bfee596b898c9ba442e35abd73ed5b44a989dea9676846e142e0aa78565d382960e94e939fbb9c09edb7e8cad69b072358e1b307975d2a7b3fdbc1a2cb85d93c5f65be5b0d74fc8d2571cf6f522189174578c8084d2771e0254bfbef8d840d567fbe6aa62cdd3c7b170644bc52d6f83414bea53001afe0cd2bbe7e370eaea01f11b31f6d25e8b68f06e6f4c193c6131d24252d48906ea4da4e4794be21f9401151aed5bf08d7fdad261796ace7268169ab2af20c706775bd4ae8a5fa2bc0ae5b3b6da28b91ea105168be770f3b8785261143f2910b59f799897062a435d9de2e8ea25e8d12252dc8cb8d85ccd6b5c9d0944c59f8481848df2e8c42deed229abce3f5afdf6e964f90078f39649dd3dadae18212e5a87a2d799d5d331ab63576b5df8c70a14d0ba39d5f75f124ea33eb992003423c13b212e3d03672a90f55990786655f270928825c131f58a513f1d97fc40233403f3191778a839027f623c327ff0c2ec2969eaa5b28211fe9ae1d46bf04785e07ecb6f8cb43676cd5a1442fded0193a1c03bee0bd6f141b6ee86884a785d309198124dabf8c344067ef396d66da2c1db618d405477cb3191125c6f2eef6765f7b897cc02022e8dd6802822ed6db016ff9c30e7632d49ede82605efbe3c21b0b246ae39563cbe11cd1e96576013d1e1e874aa7522b20b4dc09b2038f3a4abc3ad79069be8b6ebc3e3f338848df5c0415874ae5afe111f851e48974c5b075bd3a60b0058b39fb407ffef430bb9d17d6ac15b6f5277cda1be8dc2d9e88fb40db4581f8101d540f02f30cd3a95528f7d8dcb7c03ed42983cba12bbb0b757a324a763bcaabff5af0d06d435458cf02130ab65c9691c7b494e9a493b32f5b60a20bc9650a9793726c860b53b08fa1c0e733b1684851d38a995297fa050f8fa9e435efef5aa8b3e205605b1f6df43852278ae8c778ee09e800e7546cb3d6039e5b1ec2e15e1130b57a5bc90c2555d1d552cbeb32fc785b516d660f59569c0bf23c234c5ffdf1a4daa0fa811cd663c3522dd98925437533c719520cfe19444458126a72859fd1910abb5b0124e6c3be983c9bd23746b19eedb5582b2339bf9413cfae7b4b4bb8973524162d95f4868bf4bb6dd8307fac5eb6b492ca733d49133a7b8ebeafb47d49b3126394194d271c9a56c83c825fdea97bb5b551968ee77566363e20d9a0eb2c37b4d28ec3758a480a44abc6b65d80b788c1776d8aa8f041decf42f086fec2d409702b3fa2861be9101ea4c6cb912391986983b4787be58ba2acdd6c30198babcf72413750861235032a893651d6be7a0682647aa172849daea1fb79dcabbbfd94b3151a05d3b06bcddaa20a5d7049c16bf23899b5c2ea57b140f11f29307602e64e3749ac0415a975d8ec8679943555a05c2fc5380864f4e2b9dc382ab3b6c2c578fccab59ec76c8eed658cd03f709e24d19d3e93d7917f4c51c11cbdedd122fe5ea8c07856e6057aff7823c14239a916388a20ca4f021341e73aa5eee7537422e2ffacbdc9e7c87cdbce5e276514b6b83fdb0b59a50f27949e72c5c069d870c530ecf6b8cb5d115716139c7414d4f8a8c3c248c8ae7b61b48fe78c32adfc4b47161b79b84ea2d47dc9b76bc03990ed28bd97dacc0df66482578ddade455ba28fdb43aad8681cfe7d0c032f1ef106f364a6434c5565373256d92afd8349d88fb824103b748aca39cfa575b914fa773e6f0637673683a35a0d7c239b6ccd3f82e0dd2444b5168f19725dc6d14b3e43d145436dbba32b9ce9ddf2a4294da491e60c8d155acec4963a3a43d26ed24b59ee05d394d347122b43f6ae4482635a9a0323806a62278bdf32cd56c550439f4bee08b14ca27ef37fd594848bdd39ed7c14876420b356aa94def8f57948bbf6182a9677b2817baf4a07dcb25bb8b5eb9f8fa2c210f6cb6aa8323c096aabf27474dc3d7bb5c2dedb370e005a17d4d6ebda480cf643913da0f704f8d3e93653db086a354e6b5f8a1509455608502f14fb16fc367a1fdc04f8bc58afae326b4e582740e75fb89da5adf4103ab7027ef226938e81a2c5858624298e781d20f401aeecea83ba7e98f0d815916e6f4417a79eb07d2b7415c227e3332764f8a6c56721fd797ed12fc1adb236f75d456d42ee9c46b47ea5d9a494bc4f56b8b0ecc7f5caf73dc6d3f8b1da6fa53e1cefba28f51b5dd4c1ccae16e172a1c191a1053cd1840cad0070ad813d1dd21c890e83648469e2910139f075911a3ad48a6797ae999c4d6ab16ba2a7fa9f0a55d8856f1b750baf3f8f32441836c455b568938d3b145d77be1c3186639fa3aa5cf63ce4a42a065d8a21d1ef766cb026490771123ba3dbef1ec01e5ec6395ecc7972a4088ebe8c605438f040c5209e78cbfd5ad0717627dc9b2bfc98cc915fec481ef8de40bc95760aec2398900d58dd64466d194eda01a2e87269b52355694e36d4fc0d05890d9a55c371dce852806ec4b4a7a6062be3415653597f085c8ddbce908b52d6ade1f87ba867f4ac946b991ac379060ba95e30bb28fce541348c64b1f2b9e2b558886e16b2bde592a30542f62a9d0cdd377c1bdc94998f10b9a6d8ac42fb82ff6d309b9c4119fe3838a71dd4a8e5efc5944f28e5ee38e43afcc54ea9ba836ee68c9ee240dcb2ac394d885195c309e7b04f68ae840b3da273e254f11c68781ec01cf7717c7eeed4728043841a084467bf3d8beb6a00b4614676fc877fe69c65ebf9c829683b9122ca456950ea08d94f30b3fc47660bf39f5e2225e85405dc32830a53351d96816513415db3db7a0ed14240255ae237f22a6e133b3993d39f2e325ae03f4a4c5701798c0147f1a1aede7e45dcdb7875b10aefd9403ca9417652d4f8419a85944fa49a01e1a52582f37701c2de9d9ec27c46a6d57a56c12eeb75a6c91758dea423f7cc7a5636ecf5ca8f4c175eb47102f14b6d25e617df1c311354d0eb504008a16256eba55d157afe511bb3b9a7da388f3d6fa2f1bd0a11f4074f4592e2fd8a8027b7c8fd8dd91e3707e456179df09f716caca347f3cc29e9397bd3e6a4f23624f4efed903aa4e8228cd0157491b06128776a6d53fc76a18bb96efb3c8df2bfd179123527d0e961cbe6428cfe7119a44a89d882dc43e00d2528b32bbe0845eee3167f51b91701c7780f429654b67bf76d9a11fb2a99d0b7b51c4d305c65c7fdfd1de72d7e422e0d07b951beb048a3c179deb01c6b984bdc30b7cdc262818947b1b407a0ece37a0d8d15f274baff53d8f462eb3679d67166eea32fc7977de564cdfee10f727cc05849c3476026d41e13ca68a6b980ab917529d9a32c01e3b1010c2be2c1f8cdbc446a68767bd3d36ccb4c01fe924f64c0bf2550154286daeaedeedf09d2d7ae0691fe79afac2a1507a5820f54c5377c11b01bd7717d5d0389250e0de684ec6755273e5077f9f8db62ffa31f018e7e9d9f9821173f7e26763eb660116e36a2d8827108fee2c78b6f413a97e3c71e0053a4dbc63196905783a170dfa39150d272690c75e6183572de057ebe662d699e2702352f269cd8971da1dd692ad5dbc631fd718b48e9778d7644659188abfe482edf16b06fdda3f88dd15106f2f521422f9287d758fd0852aba529cce7daf84bd5ed6ec0fece753f6eb12debd0a61a7658a71db839c590ae3302919890168919fc74ed326e5ab4fefb57b22846c78457b2be9f3da344b3397383a447f1fac264b59e6eea733f0a80de37504025e613ec412fa0e02afa6cc93fe3d7aa9635e5b796010358a59d599233595580d6cb38c4ee9bf1a12593b07fe54aaa6b6e8b1d78cb6fafabb3652d41686fcc3b8d2f431503ec08af49ef3314dc275dbb1a024210b300bc7161409dd54f8866436ecbd602295779ca0bf69a1f0f980f072fb5e20ccf2461e2c56b9e9a479188522f9c1a5d93ef4af612012425934727be134b5d02f6993544de220af704238abd194d94c1588301776c4ac7abce4cc9dc77411e7c1e8c0887ac36dfb0a68bd49eab6259f817adba859a781bff9d9855c77a178abe2a92e215d5e90e726be9cc67d5297bcbaaf49eece454698a1bf1f01455a38c9af558cc3f1f87952115abb47f260f37a08e3c9c411b65cac15e96f18ff875d19a8942a1bd3e6248adddc1c50016557dce52e556c7d5d4465ca46c22dc9ae148640e1cd02bb95e483fb27ec57ac5a7b127dcb3287358a897ef00a3550ce36307deb30739b97842129b3e9517ee214e0549622f0a1feb0eb72f21e091048925920a52c70d70b2a42b4c3fb23085598bdde07a4511f849637e282c8ac28603c1a5d5c72cafb3959e72678ba3a4c2692777ab100aa92454b72ec1a66764adcf962ba0c1a2b6557e3823e7d28503d3e4c8505184dbd031a121cf80d3de3414487dfb77b001af983822acbd7a723d27099b6cdad89fbe94a7880169ae546af669e6593d3841cca4db085e71c12766a2b1b5d45c8d999dbf2bcfc5226ee1f3307f1e84d81735a26c6e3054ca672789ed5e098bcf65440f3580404240cf42aba6856fb54f0c9e8e5e9a7fd38c0be71ab30c6bfeb0c45efe54983106dfacfaad8c50073ce934971b8d7894588c3d2eb956e9dd3c01c2e25ef6e7d0612c9393ae76f0f3391ac8989683052455d43de2c977cf788bb6cd1d5b3153cb797eb552640baaa885ef5cbfb88acd00d0cb536c9f9c914d9973a0d7b783c6103208af9abb7c67472c9fa0111398c4cc813f925e73683038f4978b73f75951fb7c665970fe5470afa8640efe06ad4ce612714d6007251470b77a0360a586326343e580136bde3f11d7712be078a29f1a53f2d923aca944fe2b37d3426465694f01d29f0ae3854ebbf649efa61961ebb64782dc55248f3bd7895d0f058a31c712ef796c8852d2f65e81b2db15ef5125ad9530b2eedb1dba119b85d967ac4e389d820fa85690fb7c3e96380cebe80c81b9941ba7d11bc2b7542b68a2e7c0e321e436849a899beafe6e53eebe54e2f7bd577bdea6645b75b4276fc940cf37d5f0e390d11a186ffc02292d2e400cca4f342e6e932764730027ccc2029f776d84ec3c45fd0782b800e7515ead1a1c3faf6dd7ce76469e429edccb4b4fd7d9388c45ebcc4afc6f4b848a5d19506504ad10761d81c785567354648d59b334d1e543c86e35c6831d7b8c421423eee076a16b61802812ee955440bfa39ee2127da3e36e0c130da649714c259b78120858074c9141644ce37bad1665fc034cfe94a98d590c9a08b1d0dfcb536406f51df9a28120d9effe3fe52f9cc5e491d8c1ec291907ac671bcd5d8f616451280be7a2020d604ac1020f56687b2a06eac3fcfa83baaf6310ebd49074993dfaadf1145a8c48757c4427339c631c7919eeb689d68aeb90558fb7cfca54ccd024d2f70f4d3bfca709fb59c79c453c3d973094a34e8ec5e3817e03d1f14241b7c8b022eb77ff15432f00d526e8de658bbc99198d5d4550e72ae016abe8a4537dfc6d31b93af471f982586e463ac7135e1188b387d31275d63f7ba838ddbc169b6e6c19cf8dc4b593af0edfd4cecc748bd6c66204917e59ddce7142758ce111cd9930c9f2b4ca9d14dd3ba608fe3db37edb16548cee278b21e06de365804ff538df8201222bdf50ea8827ed56b00964cfdadb831a0a6b0a30fc9f4d518de9a1e928a83ae4ebf957f4ce75833397df30785b88e29e1c56d16140c030a0eba3f64173660be67f4af9fe0274ec5d033e939b7858f0a1ab5c048f4d6ebeb83e21926eebe62ff0e7fd10c839219159020b024e32fbdd1a081fafc537971e98d74ff42a94b95ce1d23f213377c83cf203838f6e7551c0afc85a865f3b610cfc7f00c1dedc5524394ee3cd3cd4c0cce824dbbbba2bef3765e0c19bce8bcc1d47c86fd8a0db43faecd7ea5c80c0766ca99bf3de43f937bc930eaee37e6020982d62b1074f8f3a8e2fbe4de02a1c33c4a3c115386ad1d787e8c2c52a0e61414f411dcec9ec5d9603518d955347319a47c1837a5b9b284057087f2c297cd070d423c1bafbfff9bf9bf3e546cd541318d0d4842da3e0efc7ebb5fcb19a347b0d01d7a8b87d85024a71e676881db12d7a62cfba2931c8e803e37ad55eefb7ba86e5b3140ae2ac36b777b7688e444ca40ddc87a2d7eb7627ff5c9c61d4244dd6d188a84c677114a0d3d2bf10799f1230553c06738994152cb24b8c36ea8485d26c90719dc58649b16203ab2fc8f8cc44d94179d537665d3b0ba0084d11a045d4121af5a33e40db4de34cba1215ad55df3286ee042048b192456cae8881fd169601796891193d7219a301ff395a2730dc99719fc228efe7d7e7af42cd6c7867b5ef45538fcafa3ea2168ab1981fd4bb686de646fc8ac143a61527700dd5698fec318223a0b9284c4a8af3da539d84f8abdfa2428b13dca7b318e69d8a6379fcae986b9b3fb107392a5eceee0778798d15b0d11aa790bf08efa1e67543ea660ae8445cfcccd2b7b94164a838e564c456a96de8d76f3a0a86f16877d30e8d821dd553c5a76159afc6605799bbd77fa67560f3852160e7b2104dbd325c1602e852ddd45c2602399da8e77c027a645e836b70db12d390ca777a60dfb7e798b50637947f43b436c362dc376d97d9b99191727683ca0fdb9dc2ef821d84f4c4d97d5099689a6978fa02182ab3f0c9e0bf7eba8e6eddde233949a5a457f2187684d83903ec0a7d2382def8ff0999152a094f8d5961b819690cb9346fdbcbe1f3f23f2c3914a2a12791e1a45984075cb8a33aa51ffe829fab59bd74802efb9e29399ee3f718c17e870ea0535d5d0acfc3a71bf5f1e9d2a7f457d25b2c90e117efe01b74999dea9b0c8379cecb80634edae2aca66a0009059fa33d45cd352e6b36567619547e31273996bdff2f23ae911013def1d410725d8a540a58b04416cdab98aa32e50410ae4cdb6a30a9058a55a60eda715b1b8aff9a166fe8b88e0138f9f379fd2ac295912c7ab804ea6b40a0b059710de4dc23eb9966ffec64417db48237db809ede7ff1b1bfca9fa7dacdf67fecfd6ea63819f22e7274d3b45aa69ba904e9cb7ae4d01a6181e7bb9a0b0d7fac1844871a846ef13bad14e7a32151b31f5543ef8ab238117d7c437792f1c088fcb28c94e1f4b93c1d3e1ff0e74ffe59f45a894954ce111856868a383633c1870b4e39eb19ff83efa3abcb7881a4135d04a1a435d3cd7c689de1081d71b4ddc7cdcbacdc8b39dd551990afb1707ef13e0652e5adf5114d345ab4d63d224c02dc3e814e9bda516f8126d6ab4a29607a002230fdccbb7f1b616597e8046667092857a3676b1d1d8e274623a8deaf44849e905a52e748c9dc471d0f0b9497f614bbec48f140d6c053165ec792b04ccfcc45cd86dcee6fc99c498e28c5bd9222effaec5083cbe7ed818b9b9ede28e8bd9dfe47f208dcad6f5d72b7b6125b12238c345694360d0b458ed81bb05da9b82fba8d09e28f806968af6f9f6401d4a17cae7d57dadd8b2de3392918023cb7d95f2cb131bd1f20d416b70ab80278bbbe4f755e31404edc3a06fe034b06fb801c54cfe8730e434aea313c62a5e3983fe037d5ce0019e5c5e2a8d064a8615fd345e8f184588ce685d00f864621b5f3463cf127d91e338f810715a5200e28f3bc96e6754848b00dd2a3a0e924a9668fd43fc466e489c5d6791a0220c1a1be371ef8c725b92d73ba02c8a1ceae4aebe18548874de28bcde1a1744e1ad1e3f5451686b6a3d2737fbc447b9c0a2b024b1d83b8876780631ff01e0a1ec01e8fe5f6373e81a0e2d11706400f32fa71da63b12947582be9e8be0dfe571532238a50e9ccae569088935e5fc36129bd7d26cb9877bd74eda1ae05758cbb1a475eaf0dd251686da7f999be5c6899fa8d7e99d65c0107e070101583463fb42c0abc3b7df9b47c1b350ebb7882fa96430814fd113108b6888e96b9404cf1a58efb1d9aeb1d1d913c131e8184114339380f3865b9b40794ac9dc5e8ab832d0881d7048cb43d0a4c0b26654aabce987198e0a3c0349503884013f2fc1623b2fd93e4744d1f29a0d6d6a47057c8e8e7c915f9d91e4436e062c4a70adfde2c31720e4d7d4632cea1701dda4d0dfc813a1840e217f15a561df1dd24c6304a95c2d7a940db838cdca3458c495fd595c19ae12dae73ce52bd1c94860106ab01a1558ecd602fb641ef14b301c38c42effcf6fbb808514a0bd28c1509edb0ee62256d7cb048da591f689ecbb5d19d3783214906cc886e16e9ef4695f1d736df61ee8af910625d6b760d8a696f6e247fe72872c47ae86d7cc2450083caafc8726b8ac8594817fbdb970c30220acd9e0486c2d348db688754cc7789f59eccd2682b84c7e8044d74888cc3b98fa2583f39c05b089193299d14b6907c5c420e0b5a1ec5a31ea53a5784c8372ec3320ea8ad4b3d4dbea58b21d038d96a217165b01958acf24024c8f2fd748f535daad57658b56806741a037291fd2d6058206f8ce4fb1f969eb5c4abc2597577ef57896436a9e84c9be08c171505547524bd7322323b885a1f64df2f4d111ba44a85b3d0befaa944c3017f83b2ae17329b9bb821641cf30b21011dba2233c6dd349215469c69a2fc2accdc545a8f4ac6a5ae3faf81dfbf43e7a1bc7cec1709ab4e6e81575f29eefc98e46352dc0701a1e5058c527b50a076eaa93d199fdf4fb444c0bbfac74319379ddfd69cda4c80cb0379e701b8b898197713a12fff3c09f62dcb6b742354ac2c022468ec2a0a6fcdb86d969dc77076c51af22721968075a5087ae77564ee75f129c918d44fafd636c4be21ec34d202fb2d6b401b6deb95e8bc3da2deb207efb938e5ef57f102b6e7d3d693068f2f8eba9d685694b863794d6439f5be87f51dc274f7bf1703966bdc0027674746ce009e44fb9dbb4a07646ef8bd582c9ce4d84575a8bb6d4d981caf898607d82a9bc616c0b7f28660e6ce0f653ab68d1f36e20efda4beb32fcaa38455890b4b3796404a63cc510cdba0e6b6c53ce37f36866483857f25285d4de6b097d36fd14b18aea1ae2bbdc07e87b2fd372cd25449748eaa2182a3966904e76d64ed025ea6194966d0bc6d6fae01f2f2c3a1b66fb71bfdfef5f5b2bbc52e10f919791393110474aef8ae0ee7ab27625fd3c83add63da1fc5fa629a07f47097fc17a97107bd301f32cb97eba3aeb639bf6a46aef10625b51644a1458187dfdf87a2043713e9c51585391634a5b6be3322851cca1b05ed1d893e065c3539f83ac1f64e23f781de501d71cff8c990f5bf2134c821fed71e5501aa2ec3d2178387358152d4d3f24996f1187857d908e076d9868ced9514e2600292ab4a95fdfe8eb434dedc285544031dabe5ecd75ab06985f7034b0170d84378b14494ac62e0b6463ce974f2beab633c2c3b16f22d9a8dd23b8e4e84b71c838a587dae801dac0cab13eed3e616f02e948e2c2ebab6b47fef1bb7dd55081d500bd053f4eba26011247d066b1b50dfdf23f9350a18417df3f57f74c6a413c49c80c6a95595799c5884bc50d4bdfa7d6ca2bbc99b407eb1e6c979e7de23e40c03fe1934b06660df8f1d4860421ce4e2afc59c6189510c2c604fde6e510830e0640ba56a63722c224c7c6c6010d028eef2b27014cd8694af67b4de4bb7cfaace52f449a3e962c07e3632f7851793df6f005bfc8ccb6c882a8d33218bedf91a3bd882549ceeb1945ea05b74d8f61a1e0572b0c87b1dc1e7508e5cd7de5248c779cf7f793d68d46aa9352f19aa6290fc1eab8c8293d2c4fdcd0bd593f00080c91722808e5da8b11935ed6d77b2671b1bb05c31ff7b62fe0d73e7f955eea8325f28fc5eb9d1690fea6b8ed6c98024dd6f7b0865bbeb553c9916f546a465ac9e18de1d84546dc231ebf3020f8681c9c75fcba200fd17ccf0a069893b4b5e295cff74fa30bdeae4bb147ed3edd3a77710f13b8ad5314c88aebf3873e3a3ba727bddd91dfe91537f7ed32bb546c926f9eed66e2814bcbcb6dbc1f07bdf12a6e693e7d01b9e1335275eaad7883a1ac8fdb6f4826833bd872db067b2eb4bbbbc0525e8eb3e341011550207eff5ed6ef0b12cc9c495d4c75b06b920356875104612d555bd4fb204a771ec4fd9420206f9a421bd921d235c167398a69091a6ed1048c5032ebf8d4f669aab558687fc384d54a9dd388c4d0cd0fded7ba177aff8a615076991459d3ce556553605ee2f174900ad6ede524f0db0f09499e018596b5e384ddf68d31904d2addc5acb970e725b8163acf6837999af2e7626bee6275a8d18922749e5aa76d6c0f025fd2056bee9e24b02bc4d1be18c44f58179bb87f3cdf444a9d9d3d09275f114ea136ea8ddf54f35c352e118eee7ca48718db11023deb4dc936533e8ee0b2ad4ff0ebcc6dafe5e4641906ef8f6fa35db0b90bcbd8717ce385023273c59068f4dbbb54568150be09aa6332cae33d95de427c91a8051d6bfcaf7b12d0f59a036fe7db1a271925cc7d9f8a37935a93fe3bca2d7b7d6d7b2f22bfa98aad2fe119c53d03c601ed8c7792d2a8cae285b15720caff941aca79ac6d24056c8f2e4e1265b3b3eaccf71fc0bb800c00951a2cfdf6baef4abcb632ae0cf7eecabcc1a195a0fde72e3e8219b604e314fd3f8d408c4637b2763f194be29dbe07cbacc0bd0256923b65988e8656feb8cbd96fa789a0008aa0c89c6859b8fd59493ffae4101484b4f32324f8fb6ff3cd68be8f314538876ab2c197fcf6f033a5de0597c154198ffc98114ffd70e61330cc16bd9d633c8711a2ed33b9e1c353e95a9e5254bda08d3cc59d80ecc875437f81251d77af037146431b1a98188a3c3ccb026c38450c92e7d6286003fa81b0ff56a3455b2e6f7583ccb82a06749764a9b0b583977c8ecf76087ae01fdafcedcc178d40e602dfd32f596fa8512a1cf0b445e947c69ad471822f3c903c8d6b4db7c7f7d11714c51937331761c0b75d0fbe13edcf075d4db73db3829888f606f9ed844ab4b2c59996733bc4f69496301d71faa75f65c625d1217de7cf55f5182076df39ce86f04801f4ccbc956be071a22e25b0a9732e0b7186f85c2ca2896536bb057ca342a6dc184e173bfc5e23de0857fc709b54634cd46d657df668c68b06af14d9cef517bc1ff7d19d4156484c8260e8fc6b8efd6e66c4fe3c1209a90e98dbb559db42f167da9f846110642e4c2d4dea77468863aa8205f6ce8f26161e1929401cabf4d53ccd33c81574712eae02db34e9671ad06c4cf2853dcd33812d66dd421d86a6c2faab69e99c2456c47e333cbaf04c2fbe8e3df53289b411a34ce6436092ed379831a50148a6602363c7a885f4276bace5f31407c01d43f324027e4e15589e6686a56c2eb39eac7d4e43169a03a06ef42c1bdb3faa5c99eae859f5f65e256ff9609815e0792c32bf5b27e4b67fda974404b5e9cabcb4048ba9db2a52f5cce66a938646455668d1c980f02370a8fe2a8e90cd88729e652cd458af6c3cf894a0376861a63345e57167b3703ebece7f229675dff2e084c91ddc7b8573231f381fbbe09837fb898a26ea9fdb7edde30c655ccc2e1a5ed1bec0bb83ff0bd6f2d00e4593268a6be3ea9a070df713495d7c8922815cfb6245e436e01b298f5ac3ed640b4857595452714b7c4eaaa3e0ba0933423fc3997b2fb6750566a36ac234f4f6a776062cbf487ca4896e4bb871411ee60b948d6e83f57c09c8f21c82418bb429c8d4cf6902c8a5ac2d341be21dab48a1d6b7dbfbe6957cf2ff2a900f009b63c64ac57cd9b82fe5e4b144805db36bef7a92b1239752e291773c7fca34695bd9a9c77c77a32eb35948c519091438ca065852365f3bb2c0348e7d694c5328c38cd2f8d852cac217d006d2c1dcba0db6a0ee31a1854a3da080f7dd3fd072baaa7cc2c27e2c75e095f2ba12bc58ff775330f744f7e9e582d90880bc113c92a555060df59ef863773d1bb0cfc697c36fcf595612c294a10917173f17f5d847cf280a04f8b98667a4b8f5ba8631b5884927c2041824d49528ee4299bd9d48fb387125660a3d03b048bb2e642a331bdda47e72565fc923723a9c02790618ab22a35df81f56d8bc5b2892b3af5d7105a0410f4818e88eb3f059bbc743b20eaed65e25be659d4341b0b30f13cc49b1481da7a00c8f0892763921c87c45eb70dffa7e4d0286a9f5d9b0941e5ca627ab7155c99264b59039a91073ed18865e03b2549e9b6922b2e96ba0a2ae49b220716d67faf17c889139cea25885535669ab2967350c308c59e64fcb0bc06d6073a3369742c5cfe7b2db94d661347e62209ae123a6cabf53bcf92798c162e768bedcd19c70ea54903f7d6b3d39c96805a05a74c319eaf56625a58c93f7a4613dfd3cb45d417228f123978cddeda909d17b7268528351607cd290c288bfe6a17a861063f9ec8e16fd000e6c183759ada56e6e129f2e05ea368b9e1937037d901c6c2a0f8e0e682eb0a02888eba6a00d8c0b8d04d6a7e61f4c9f60d86c0e7d8ecaf4a143fa65b37ea985ad21d9b91a1011336937af2f1cccca5f4daf3efc51c7ab9dc4c9624f4671d3f4e9f12940afdc222222ca0c818dc83f9263416e13427fb3fe6cb9cea84e954ec52f1a60f3ccbaf6883720f2344330d56eb1979fc00b3a659982a843241a93fadadcec44ba0d07d4a8e38b81cbcf96f76af82377d1cbda51c86248b7d28c681d343228311b36ff4c6edd64c4354726d3849fbd78327705cfac7386e31a9110171817485c6e4799cf8282650c4e3c06a800b71f2aaa3f3028a2d0fb3d48a29d235fd6f4af58895bf5b5e49897ff7d0e0d46878a407749cecfd87b511cc24cec19a05943dbfde7e2933a93e395baab08ce19662d5501221a361a821dd54ccf61d46f8a49f89c5794054718e10ac77daec4029e3ccd2c209195af05be86d9e72db30e8aa9e910a5b54c8ece3058b927180bb40fab1bef06fa5e8ad3eac9f34eb13cb0435a959d430955eabf5e1946a561905c589b1f68c969ccfcf4b0506168c33211688a77a32a8472db2d3066dce8628e532709d6abf6849a9296d76e6ec519dd07f2baaee2d1e7d27535fac960f71849fed8675b0d626539cf0f583be759c3ce2d21e04792f92a23f5e0d0def4acf5556ceb4d4b4da47d6f40e7b2257b80f80da44331d669e3458799021093af3df3ea06033b720a763ea8448b5c0b51bb1f544bdff9dd7137f86f4a0a5e33760822d1c726a3c211ff75f3a1fec9ca695acb001caa29b9fb375d09de562b87d71c6c6033b98568a55a4b1ffd4c7c6ec9257d57f8869e83afe60fc45a0588473218bb621db52c7077ea44ce1105055ab9c63c2d6f8d7d9c2a70a0e1df1419932c5a8688627c3df27b98c3823b7c295874b52f59a9954d8f472255270775fe320b47b2254992537e83ca86d0e4fcc8ef91365011c651cf7353c74a355abd53ee288f5af851099d4702b068b6a502af0941acd25ae1c1314700a2f76827d698439a29c5c1eaa4d3b41df56feae2deff2211444112ea6548e36e1e977ba941d18a999006e2ff7dc6c83b8ce2704e50922a5af59c39453aaecbe01b6aece684b01d7ca6df2310e2f45ad09a793afc4806acb4d00db90cd45b466ec9a80330f488b78093ae2f0657b292b2538689160e20dcb06e85033c5d0c7779fbf584ac2cf3b6a731162343cc4e0c48c3063bede1c17d9aa929872cd04274fd3db7b6b3da05ffd8e66cc151cca303d9fb01132b2272366387b05224e989b3d35716147f1746905bc7aee950f34648b44495ed32f85292d6ee6b9544e5e543b65e1bcc75b1b778affd9adc95b6ee12582fa70057d75aa74712c6100d19d6b83df949df087dee1a46cc1a2efaae3c55462be2ed0aaa69c660499573c4d67474f07b155e24db7802ab7b1996e4d48eedca7a770c101ba83b52da4427c8c7861587848a9f7be41f561481f90a276fa0c6f1db47699805e310e211efd96a32baa6b9ab864c6d22f37d3980ee94c5da84514a900d1b1787638d8f149547c4ef9acde727c0094cd12151db5b172b0998bc6c4adf1e17c2ae25e68ed79dc6c88ada66e6f0fe010359610c47555967c90cec96274dfc771bb20fa7fe62a8f2f33e854a8474041cc79acf52dc499222cf0c541fa4f404fcd2886ca385d06855a964455d8df34f2796abb368eafbd95a4def39528d4f59c0db5e02ac959bd9b0da80f7121986c48b87b209b86e7421ca11318ebed2fdc8a384da1999dc26956a6766d1e29e8123df57eb23434f18a5885ce626b9bef2f91bf9be0ae18db8a93b64555122680ca0714e9557990ed62c9f09acf5f9f15329fbcfdc806fb2a393f692a7e7c8792ffaf96bcbdb75fdfaf9d65bca0f10340f9fe6179b55e68eac97c70c2a6afae7f5d86be74cb1dff28b0f05874a1caffeb8b9ac06a6a03d7bede674800d9e19aaacdf58674f086876451d8036b8b4890437af08286636ad75d6ebda029c101204593f3dd218ab8351c6bb50da1e59d3278a1defaab67405760b986fff916ee7460418bff5d566c00b666fba39ed2a06daec7da1cc13432a35cc0498bb81ef0e3294e6170f316096fe7632a01dd63aaca742ac7cfbb868aad2ffb140595e0425903f606e8045256c6b721476198df79f878c61a28386d2955a7681cd688d3aa1823c75cb8ffb761b6fa0be88a478ce59441017ec95f6ef9d2ed1d1d1c7b28e05203dc558383cc51cdd6c6b0414f654368806124b692eb332026455c1e3b7ebc4675a7295f030d1a141e4e1bc6133f220c8b6c46874b0839cb051070799c34593bf8aad0971d6911fd6ef475d94f9f9d502981dad0066aba0e8ada38ad2e85e53da3863c5e13becccfc996afa06975eb77144afa1ddfaefe8f2d9c79bf6e41573d4e9c3ac633fe32150c2f729c3d43141d19d82c3a70ddb4e4ea0697ec65b6c7e3a5ed4e889183cf5e74ad71b5b60904d05ba855011b59b1f8ebe101b23d1e0e0fa5f22ba8eeaf65ed5e688173d22ed44328e83ec6bb91d087ff986f9a09b8afed7725b22c232c6e7eb4539ffac066ea7c8044f6c82bd13b654d18c016452dd06ee9f812828e4b5147536fd35696b0b76855870de65038862d8b118912a49b4560490664a37e0da3bd3fc46d8354a6eb445b03e845b15eec385f6efd73c021d47d4af8325b59ab818d9ea6449e80e0e0845b98d313adefd343cb434293fec009617e551143ae2215fa72ed1c79fad0a2651a72a6dfbeea640a90de8ecc9242a85b671029d3189a51e147711024dd6bc542efac75ff8bd3bce7c93c4e4731a218a6266bbfdd4a250c1e61779935334717157063eb565629c1b7924ce9ea87ec53c6adb415143b00ede64b564a0db5dcf2df482839648d8160f6f0b5f601f73de629fa42d5fa8be959bcf0f6ecaf53fb97bea9d438e94afbe481f837c3fd19d43b92d18c092bc2dfa2c91074d16a24f5902e67191f78a1b928aa979eec175624b631f39ef0e5318b673e88b66dda1f8033fd73de5c314b61b77cee23b77c4a2155fedbde15dc954a099e909c81fb71b1b9cd59a25183e81bb06d7a18ca90e4d9382d7f9d008230e7f8f3ec634a0b6712c25a0518db2dadde083104f0e81c8e827f826bc49499b979b84d13ab587a350a8de35c16f7973bd9145a74c1c98910678c74941bc5bcdd334bf8c26ed8c1d90262815edaaf98531ba12428c82871d05a4da7c126f96a0b947ae2b0bbfb66746a1982c9551f90507d6301f0b646454e25b98f2ddb33c1a14864ceb9af3844e6eaf9917a18c89e8329535f72313dc883c2bcbf600fd09677291da8dcec1be67984b03c381ec9de790f191adbff4486ad2634bc0bd9345f019804de8b33890049a26fe2262b612f10fda48c245045c86a9b8cb828df118044527b91714af1d42a315794e63df5764d86331c1b9c8806976fc81cc8440bebc9daddbe5e1e70fc518220ed30f77699bbc6c483f2a758fa24f209082529a76212d26821215293798fba71002d8bfd1d5f17b072c8039b70a5f118c1cc9d07000844559416f173484e0169cacd7e921e00228f748d89d73784b0c235dab9779867f035cf91bf4fb76557942bc8a2d65f04f2d913933d53b1392a0f7ab5078fac9aae7d057efc6bb00bd14d502ea6f0bb752863cb6327423afba2ed542619dd37e7ed35d1fea921ac7e2e4c1a9c7f19e910fe8e0020602edae94666eb80065a7b9b28916c22581cf7126c4b13f3289b6c8d7ec22a6a3b75572d360a179bf97c0be845d68bed223269bc9b3d1d972e2ed2917f6fa380808985f3339403e26de8c57faf734a6c2cdc96e29ad4630d2b7d918bfa0278a63fc25abf7a310a66059e61e02a9ff2235111bc86733a49f5d7f1e0656e304296233e1380025e4538b5b827b45751302b3005788bcbbcade614e0b6993755e0ddda86b340fd443276ade2bd5e21a397e40a0a0e503e121f836c1d22cbc81947f450b9b69d0aaf04acf95eefce08a52f55ac88f52f6268613535fb7c89878c72f17529e998228c337ad685f32e34c394334c4718006de08c9b720da44205ea2c711d73a3a45787ce074737f5c1c450da7c043edcb82002947655b8c53fa737811ecba7ff0dad6cf014143ebf4210241760c92b8da96b910af7a2750228fbff98ff3f02c443846d42b5f3887a99be3f9af36f89d770f4c1b8f1563d76c0fa2ad59299e594fd09694da6051d622f613628abe47f4ec4bbb72a2de82853c5cc327de58a720536afc8fec5d3c2618b4e04fe68c891692a000e45530500d1f4469d9bdcf358805dc5f71f325731913a3f4225ea8c9716c5b8de7881bcf46f8db6bf8359fb6b6ba24601c0f9bd495223286aaef403d3c9462b1ba716646ab53692a6e62611300016ca00f7014099d5ad329cef677eba12d076bb70b45cd94f617222cc2769fafba282f075178769d258f1361f876198177de093d0f7ce29dee23f1317fe783fdb1c2199a8d34121f030b38eb41912ac7c83ba2a4f16dc281d877463072c97519266507c83c2061c820b9ec79e4a34d0f7950856c03bf425e712c5fe59ec83223e88ea10a2e69db8cb358b2612f52e6da802043a7ac7a2fb1c13dceec98d14e9495be2b41d6db302d68e92e587e57fa0f1ed6bd5bc2e4913b10335d30a069f8ea30d0455df11e8abc6711d3f7a5571cf14f7a1ef2d0e29f245e05a548bd84bb59a3bda07510c44d957a62e91412fc7bb537a0343d65e3c3e31b6432411d2b2571dcce90c2835af30435a1eca3f164c9ecdb4cb122dee623215ee3a22f94908af4bdd6ffb574096b6ffbffaca8e83657c37a4c11d8be2bd289e7dd656f2787c467122459b10a23d7cbef5349cc3f3cadee673962c3904500c110086a80259fd06f4d0d7637d74b46b3a34d5ed49b0332535ae83c1e47f60690d0a1cf32f71a69711f8b286550f9af40860f155a693ad747316eee27259d6717c6f1aec3dbc4708097cfc43937772bd03d95a482e8a747ca5d055fc706daa782c30f09a5885193c0e401af380a16a76e529aa1f9f8815032cfc0a805da85ec87eb90db0f808a532dd527aca5aff7a5b8692417b43a4a0763c90f4d7297445c2f1a59f564895dc9c7572383feecc8663507d5de8899acc4f590d0f6b83c9c0fa94d082703b94ed31b49bc5c2d1be276771fd067d1a2fd6feb79326190b9f3bbd02d27fae8c582b6264ae41c4f2759331966d5f8e34d05446b8b2fd8421cae94d6a72fdf0c4832616671fc83c56e2b92997feb2db9304ac7a653d202822d1d81f943605e6a2446bc6a4c7cca0deb5565d60800427760864969b3cc615059e1a83be54c9214b6d50de7e1162b7f0951e06ba2d9e78efaf862deba22432de29ccc15daf00f0a853606fd651da47348a793d5ffa7acf220c7f3a2033252c04425ac0e6f5a78d68ff9d3df7611d3c4fc5133dc10bd520543172386c6d7aa675f0965b2912c76739cdbc31e49aca685a3ffe558928fd4f8845be02ab4ebda14566adcf84bb12cdcc30670b0524652890bf4c2ce9f0304bed28d44e261df9791f239f2fb3d4e81ebd305f470f87a8f3986837de8715ab821423886e312c6d1e284e2c6065c08175ef1110497ef3d508f7c31634dccd6280f7e5dd9e111cc8ad8cf43651af4af04ed5fc02ce32e4d3f7ba4f0362a6c7fb7f3cf19f1ee4961464237718d22d24743008808c327f65a0c7be9897f60090f24b4bfb1ec06c0d74012e226058d40d77d931afddebb5f79f00ab18401822b10c07a6ad5978468d4c702b3f8ad84d3ba8ae9fb59fea05fd8babb6e2dfa2615d21dd388c5eeb6a14a56771a44641adec929e0b64515b4caed0acb384db83f935f070bb2e11d843d230c14e794de87bd0aa7707c871dec0d8d52d8f655cef7a937f53caee7c5cc295beeced49a36aa99514968c80bae39f6ecd54c549b1c0b1a7f44cb0792be163e3ecf90f75a9591d7a2f50e12dfb6d4c1ebf74442d420b069a140fe7f4eda3c5d19d26285acf7262b62afb356369417f9b2c083b26629412fdc19e6cb9ec6866dfd7055cd6398818def0a41b89377c2f6b06be487eadfd77fcb7c52c242dd4101cc528770dc3905159f5be2512f6d2a37239fecfae72a1b90d70d2b9b5e9e9b28cb64c80d35e0de3b571242c4813d6f06f3e027928283405463141af308b6468950c35fb11f61b3570849e4eb33ddb06114182936a378dcf9e615cc96c9f34c63526de62f714d89fbcbac0ad1c0b41883e2de2cf0ce41291a92d3553e79e0fa5c8e0f967dc717ab85367575eac7dce87baeeecdcd727397ed13e16ee174bff27a8bfb418ab19a90d2bb9a97eb5d5deb1d21c6d7029727fd0c409bc82c82609e473d53bb86d5ec998019566c6f58bad638fad7824b12a625904873a34dae81ac2fe48c254f7bdb152609279b29352aebb327aca56e07447547fe6d848b876879c5fa276fb2c1cc5469a4f2d46c2e2c84113c316351016ca6b71dbec93f898073f3c3e47d9f8024e92d792be059e86461be13bbd535c357854c7da14b3263afe22a45f06f05541b74e750d052d359543bcbfb45a7c2fa9fd295b22fa759ac8cb94d2429963084d1ed1e7a9d87967291cb84c83a81d74cfd73edbbd9ad7365ae35d442aea1339c2d595bb781a4d7961ec3a08827285064a1ba7b5309271f18b386a706c8c582a9275c46c4b2c8496001bbbbfae58f461971fe1a77ef00764d9f6561a77ed25afb60c0a02548dee37e31f2e02179745a5b0eda5d94aba6db2a8b93189eed17b1362eace17308a84f57f4b15215e10eaeaa1767de80e9f3e277dc797817bfbe9cdbf2bded232be1bd248bbe0a1ea5f9b0f2a2caf13712315973c3186c64503584664ef92ece98e3a0a51b06ba18ededa7e2a4c6fb69dc7fb2bfb9f32b67b5dbc7533d21b3964efd556852a281bd693ef0245f56ac291c42f98cd5aafaf5292144a85e2cf608fd7533b9ae5255afc839ebb4b5d3f86a36e6596605bb510bc00c1fb181fa015f2920fadfa53977d89f0bd954bd675343151020e8fcf0bfca6bd4e8956c05e5fcf26ae9f774399e202de4e1ee07ad39751029dc6cf72571550315fb22e03eb45ae6e2a3c5aa8e5f9a6dcee2dac20d7bfb2f1de3091b8910a938a0de7ccf9d94c11df3f690a1b8a87812610fe02cb1149ea96fb456bffb0a353ee3abd5268b34ebb5f24eb7e445d133f8889116a6b54f95b76164addb1cce5c3fdb17c2d58ca8fcae26819e0d4fea8089088d158f2db75e1db0eb8f75fcfbed6e00e09c1bfb987c2fb9bbf85062131d0579fb358902b43210ac98f17da3103d88a27516f6ba6d3e9dc6d5340c05bf7e1f9c17be5b35db259d73a8c78e69cf347f5aa05dd9cf5540499fee9ce76e2540850ee0ff3f0fc220863b54868302bc51faaeef0024f12f2c9b23bab632e1881faf71cd530ebfb6a015e5eebbd704d949bf80f0971eaae036bdb8d64f65d2b25af4c5bdf001cb527c2703661d20ff98bf29bfc36836683e7a3e3d0135e07d99fc6ec75d9e7bbdb4d61816c60286cacf176387c888bb6919ba8f24dbacdba655e9d545c132ef6291c042d4de16c43f90c6be2316eaee7d0ac88618985859a9ad087afc194318b777af7d9f7b5aabd639e8496380264e8981d72267935ac2e744fd8faa93da03ad3ea1c8a6aacbfc2b1a4494604c57b02a1a71d207b53af00d4b84dc8fd453b14c10c27137d71bb96e683d202266d28ca996aec04a8ece61152c44ce8b2b9bb07a0b563e9a8bdd5443cf1713e930aaa0f20f659f6c0c1f51421547902cec3dc2fd431071257e6f6e245ecbcf31b938ba5e4f85df6ad83aaa132b1d059850b8b0317e18488a91b622d0c841df603909508d3e8dc567fb632156373aca188135468a2cbce7eeb9f52392bf72451c75086a8a0ca377cfb33c5e2f3e9a9214e91a68172c1dfab3886cc70b33c187c80fcba00afe81b4ad2e9de2c8d6bd06fcf1c5642569d6372afa95b1dac753e9dc73abd9ceedfce3c2986c173407eae0d78cd4bcd0b158f603bb423aca4ace42a073db6d9657ed255fd925738da671404c6f927768d0063c58fa9f8c921f743e4d906c00df8a7d9ab6a103d1dcb7abc266eba8baf2f52ed5ebcd2a7b461709485cbd00a2e017b479e739b2c89f041f162758d6b87a9d1827b10a0c1dcd0e9260ffdfbfdc95b635bd2a64132ee2c24acad7a26c01c22c76cf4591e44c61664abc0ede41ec7cd4fc31f4cb86469b00b4efd96c4d107089882448304c4b4a7cee93a1cf4b2b47eddab327d5571520b1b4106b8ff5e0fbe84c8835a8f01913d2d0bb53362c5bc5d8519ef11799903a4dd2b3a4a03b18885321ef27057c22addff24adfa8db59aa152dcb73494df95e2bd5ee627c46b1f987e44e5b427e26572e26201a06ce1cc5411657ef5e05c3a150e16893e22073abbba97e23fa4e027f2a8635f3fd3fcfcfe366e6668cdb305618b92d9c9d616cbe77cae28d3c05d8d2a5daa0512c03e1d830e5918d03a45bba9ffab8829cf7ebaf86a6f6fbde19580f4c4995f5eb655e1e0dad2780b4ebb4a6c4a97a5b807390f055819fbd661cb68620e935396e337177380bf89f2a228c8a0cda51f973f2c3b388592480018d9e1d62e46ad781fce99b06c22822401f884bd50f83ac03dfd90d99fa6c15000439d2a70f3d0bf27e83d64bc1c1bec0f394f09d9f0d39fc4c0e70be4bcc0b019bdaecae8606be122f0a2966fa080f0cbc6e3756f2c17372a897a99127717ec9e65953123c0fb10828deeaf461ea9de1697501a6d25bbacbfb3eee18552d511bbcb6611109277dd1d5e7b344ea721cd89b0fabef865504dae80ffe2258a2915df80bdcb5fb666cc15977c930732cdda6d4bb38f48345b227b286d61f5c924b3de96827435e9474b947679c994e01a80ff4b2c6c72fc08bbc75ec3e6a982a4a11e69019645a27a7bebf6b1d12e823fc227f2c304014e6f59f56a65f003e920bdfc917718cc70952e4d2ca19b5edfe7b05fa15e0ab406c1e71869846a99e03624c244e829edfcfa984593605ef38f22ce7d2996b0e555858a970966717ffe9d77392cea92d2b6963de7f700861ab3ee378e05c71019fc4d7de5180ef97691252a5794e51236865a834931a5cfdf37ed5082b9d788e4a2084c46360de8e047b123ccc12cbd0f3a61b703515333cef7165996b90593d1b7e0bf3c33dcdb047b17a3326780cc1fed6f6d3aea24665a256998f20dddd11b562beb114106f1d706678a147f614d318a3d3fccf5a9d73a7b6c0dfb78aa7bee24a072f6745b03b2efd292ce30fe606886852021b7bbbe78094a07e17c5df241e30cff96739d6e1fe18bee3fecb15100be45f1aa064e6e264da0cd67c8fcef6c82c03a83b911cb519c603d66092fbbc92a1319f8e51d894c3972227eb3ab4676ef482fc5ecae0464a0d1ffaa5c306aec38e6fdb19d00ecc237943a4228443c21a1858316d962ed0a724d73430c648687d8056c53d5f06ddb2593484b13efa91feedd84fdc5083ac8432bbc6818de27d800e14b7f2b72dfa1ba730b65bd249aa3b12fde0959a8c842d33eee3776dbc6c43e1228435708a463e9d7c994155b5d0f101fe14ef5864f1ba72fa2e653772701ea02c081175f2a1168da5015089a0ed532fc856ac185f90036e5a986519952f8fe56e1f3d29288b49ad05d5d91d01874ce41f4a253b862c3837ed6656f0eff566bd6ff91c96c458bd8a84282e630f0eaafa14566ac404ca516a7e8d2423fe1845973ba32f5c6b4bc83b168f800627e9e5c7655f0934cf28e17b32aa850b1321c1ecfff6711938259acc0abccddbdab18938b869caab4d864cf7486515e103d043a2b9ccb1f692b84ee072624dbd52bbd5fea4b83d159c89947acd3de6b073f23f27ec61ff034922ebd31fa6e859ec1ab57a9ff5e3bcd9be0959634327070bfb758284fe1db8be0dce415cdf36157894a0dbf8ccf06ffd58025bc3c8839fdf3d39de4043e820d558788737b0d019e4058ec0d817426f07fc91381c70ce3b8271c7beb6b157153bc90917ae2167bc1160cc6928e3a919993d52fdf2a35c86e21800a7311c700d6552c5b8b797b559303f899334aa2a1da2d9a95e4804b6468b4b9e6a75edee88ed48c15c6033ad5f7b72267deb1b952cd82e1249d0adcd223a8e627a00189c7c317ec3f9e9bb7de1a28a11474a0aeecf02b7b2e31b72546edfa8b68d3dd8e7bda55796cdb8e6d31724f5cb185b8597be52392a848cad5341d1726f93ab42de3d4b1f0d7d32afb85eb95ef0f2e8787d97e2322ae89a48fded15a666a1b975c661f8b5f3a69fcc4a6392d307b4d8daad901ba42f72ff30a6fafc23798f5714d28e2b9460ab7cf8568472534ef8635bdcdf1a8a28965b6d56a2b21283c25fbed006c61b2242a7b7f1d4c1325e0424e599262304fb826cbb8691fe8b708665b3e135c52ddb7567c738473c6b2c63c37d2bb7425e2d43d16db2c7727e14af29543263510104ce69b817a44b401dc816567749573df136989642c0c804c25e7c6baf5666894f10f2f18eba3625f5323788c7fa8f5b5643b91f8b766a773d50a1081730ca0e970418bd2c9a97098bab8afc6d5d91d057d8f069d99085b326ec1ca520f1295eb7b34727f40eedde55ea0e3de6d2114aac358e36a4681164151053afdb7e58edad3bcc7e45072ce5807c6a311204be0b7887b9bb82ab1ce450df3f22af95f43e6efc33f4efa98d1ab32a0d176c2d617fa6d5bf03ffaeeeca7585ba5174f4d57b971bf99bc4062e057a4358f4136051fe772eedc0fc167ada3583927d76d9b783b89409bc43b00d75e05d03f79228b5ee1ae735c8ca05ecae2b8b70c87a37ae61b04eeb0a7c69c50adecdbba04a94426e2bca9d726af1c707b408b3cc3a7f8714e1bcc525497480ed8367cbfffa7a00ca5893cc5ad00ef46dcfcc551f95fc992c73807127548e69257925b70c1599edf247d4d863024cc497821f8e26af1caa0962c90e43161ed37162a83bd6c3fda8aa106bb11ae76c6923b7f07b8ae351eccaf1e2e23e0fdcc370b7d6d8a6cff17f38bb95fe79430a4d4f51d1df429f9783b315f03d2b90ce65d598bb78284c387855d7e8ad106582e2f5d974d6fd4f09263e81a4953103ce3164399e104f742ee1f03ef5461397611dc3baa81d79501b2297a1c5f3a4faf6ec773970b81afc39e9bc44ab5212e9fd84b4b44fb6a002f93bf6e221806af4e33ed0b0d46db6437ab88130dd94e13ceb4d3d71f9002357669d8ebedf732099483afcf544963e65daf87958660bfa703178ba382e5025fc2fe7a2d05a046ef7d8ab6a20c5dfacce28f0b74bf064bb296a7f392de7c48a0fe99050a3a2d65c6336e559c75eb70ad7f6654f385b8075aed2c43608274422685ce28b88e859f94624c046ecf6738a63b45409337a76ed72f386025fe389211dc919f466066d62cffb7e5e1a7a5034fed37e8d57d9ab152daad27d35a3e2a6bd9c6548ace4bf0227ae5d7e865d24e3545e9a91d6065330ffa82b40626459f2f79aa5d435c34c0fcc47d49d777affbe58a3ef1de4d9310abba4f217e8bb88825bf5b43c514c1eb51e135baac4f64ca61da511aef2c147f8d4c6dbad30bf95c3e931a55def9cff5cfcb3f0cc246d8e3e44a40010ab47881faef2e8592464148d9a4d5a6968b25b8dbcc649896bd0aea136298d96a19124a4327c428e67ffdb0d5ffe20d3beac4e99febe5ce67781ecc5c54476f9b1c4bb60c87202f3adc1ff85c7d0dbc158cfb781b13f1da002531ffe77134c75e00c7ddf75d8ebbf61cabb0e0a779e8db6066863b20a377167124edf894c63241173f4b70b5fd19b77eefb4415fc82136b89320e11a888a1caac2449fa419acee59b4a8cd3522aecbb165fea6f77a11bba909275cdc3b6f403f0a4c7ac84e40869116dda8e291f6412c57ed43a31d48fa73204dfdc3baaf0d93b0a29077d4e47babbbac6b3403b490b8e1b9b7e37d391b468e331c42ae5fe8412b72815e95f10226b54b31a6863022190a014ea25fa6eb279a15a6c46ec470e3443b288cbbd03b7b6e8744d85e47031cf1d3f06bf311ee2f44dd41225e357d2a5de14584cded815e38bc4dcc6bc87fbb9c60b3685f9cdcc890610ee29816aa1a9108c388ba7b97dc174080ff34dfa3ace507864e5b96df3ee496dfd14972b2b6d6bdd15e12b16ddf8cd67bd3fb4305b2605e44d15f71c70bcf5d0bb0657a28528b5fc613e722f97cdcbfbe7ab44a8c8a45faa5c90ff51043b6dbf94cb60ce0495b87be89c114ef7b9ab5869fc9649227829f70100d96583150f18328f6aafaff03493de54d8e464b06698abed228cdf0278016a34bfb29f97f56e1db8cf1fb5e9d2e8a1cf233a325e752a20b24d1cb0d20aa6247130a9e283f8eb1b7e1de122b28c31eac413e84466b904bbcbd17706cfdaa199ec082b8ac108ff311ae81c87f9823e1b92a2e8089239ffa4646d58e5839a72ba6255a37123e1f722384517793a1f8d8531380345dc46cf8ae980a9c1caa7df3e85d00796f4e310797a39235e0e966e2e1df599b540f5cae9ab6fbe8ccb9728665af059b867aa999a35a6ba675e811c4ae9ebf0f68accaad791cb6ef6a47d820b56aabbde87165a2ed003313e6be321f175cee05c1bafd799929208402b04c33d474a55a88a1e5968d43d649b672e9e4b85c9c57fd5bb4468f87a73d9fd927884d6dac359a222f60fe1abf474e5ff2e91cf8642f6aad4c3507ec60d2070eb33227043c3c74086685413906f388365e5c4ec426111804296f7890ee640dcfff7151849aa300e6610705fa385c02e45c3bfb9b9e29ff01e443634e4b7a589609e5ce2ebbb365c432f14172fc7016393a6880336b5ccfccea94869a4265a882037b7d47d6e530e916d3ab66db29214168ca6d783d3b35a0aee0bc39f52b4c2c87b385e2010990d02424f9f4d022711c39596141dda91fed373b6fc8c8e4af04ce077bd03599de06b4f30889dfa2745e090618c4f449964d412eabe35691df6fb5d23fb2e3ef00b5c3adaa521537af336ab05f8e6a9425494ba8568c66671b2c3c44cbba7ff3a915db1581a0b062fd88824eb3419fece1323f9265c774107e86690f16ca3f41c60505cd580edd6fe79b70682bc219d76e4ce09c16a5112a256e6cfd8849e6b98a0d676279655b559838e2caeccc8f68c87887adc111aba9b43018bc813c2ec2c45ad9b6a59edb12cbcd958ef2c8d0f3faa079193361c4f3894024b6fcba8df3474b5e44b7431fa21efa6c1292fbd53ce8bbc498da9f72dc21aebafadc8c2d580036c3c4bc9fc0b2bae17c179fed6aedb31335c7325846647597561bd48b1f796dd973547bd56d2103fcd3bce3d848a27e4912f93d4c5d4d016138932567936ca30f631d956d808e2bf2579e71ada644d5adf34f3c1641c16ac98f3df807fda6fe834a09f24701d324430ada6e186bec8e6b54592028c4855f2d31c52f99d2456c80afed1b655bb3e89828333447548d2ce13b525607ba792a6eaef857b003f2b58084558873aa1128113bb7412f02da4d5cb76d402fc55296248fa0e5b23e2f45c75d84ccccc437257a1d19cae3cf1e25a99a5ed9e1b59adec796a3df34f640bde425c55ba0b889b5e036a0a651a2004fb3740aa66fdfe80f33d593568783710b56acf5083a157d67f54d0c28da877cf774675de524f410eafa15caa21fb5aa925f0517f6a4050f13b8355c1021651f94a950e82bb7cadfcc2b62044f2dcad7e9419bd28c5a9660a4d283e8c8535b6945d25cd256b2ee312d7060d9e59fefe086e0ae07888d7cd13ec8b60f0dc338817258ba94d985d87d6c0326a3f79bcb3267cd9348535a5ec7e16c6a45179a68e7cdafca3155a1193769ce65b4a577ef7e5a0bd2b146c9a684a9e7d5f353c5a5bf87c8b071797e63197e4154234bbdf4298bf469214dedf43c530074ea09f4349ff9fb54b2cbd3eab621975a81ca6fceb78bcc072b9fdfd5dd1978403ad71038026b74da5c4f1753fc6d6d349d06c8769757b31285b9e908df039b194a5105e9f1f98f5aa55c3e29646bc06c9b01dd48fd30335abb64855005b438a6bb0f21bede0a005ff9b7a743c68e2bc87314b605086913ff5f076f0ddf5ccf2a7dda2bcb841bf635fe615c88a09956f1ffc88a79fcbf9cb3c9af91a26cbf292d0f956b5088721693cfd1d5b2a0d5692490e4adc31f89de63fad4b0e8abdbad78cdffe4affcbf7823349d761cd711d056033706111f3ee2efb1710350fde91340dc44899b81fb3a5253f0860c3afba070e6b8310b26df59f69b0a25cb9de0572527ef597ed0a3b57d15b2dc13cd6b13690895c3058a5b3dadb9fc459584e5117fb5c99cfb0c278ef6b0e68165526df0fef353f5b819445537fff492b004d1520757bdfba5ef7651c4c4ec20441497e9b232bd056a39395dca70ac2c1d479cc042f9889dc18c8ac20f5644d858396376a372ade15e7348453f50a87b2f0d46e89c728d8d2e40b8b384f67010126e0e1b9bdeb0005380d87b632be2da4ca84f89724168de0c19a8c31941ef7d3bc4d98ab7386f1ed0b3a874de23841c85dc69cce70de932ff5b174f2087515f4f6c6715180a2e75342bff58e168afd3cb08892e0e5423fb94e1c9fa666c537c2e1dc88a96db0a8ab4aa735a4ea269c714fd8e9e1704717234a6f04a6bac2b97d979ab575c4d18d3aaa867d345a13524c797f9d45d50b235edc1284f1171834d3a2d7916ce2a25f626363fe788cc3935aea1efb00504d1f685f6873bc6cee47468242a31145308e1ba3daf932f857e27632518da1fbbc427278600468adbed0d390c690ed832077cdc60a957d5cb081d9f3d123e1cbcdb7c1f18f8b33c6d6ad089ea6fd9c7030839ee7608a4e8d821d525e50d05bff1cbb35d94a2618e62406bfee78a9ef43ef223a10108ded1d32bc9c358272df73faf1531d6541b434db25ff4625cc78143da22973c4275a25a40c6e559e60e280eb0d7881cd417b539d02cb8cdd50838855e8f7e5f9f22dcb40f20d492038dd13e422272812f658a6926962a9b447c67c14f58c81f78dbc15849efad29f3e46e30cbfc6188bd207585fe050c4983d42f57a5f41334360030bea0bc1eb355918ed394613b6bc00701cf0223391006c9ac8286136e378335c938812459d4441377fae456d9d42d9aaa7531caa89ab2abcbb1c92e2966ddd258bcfc15c000f6b25c26c109140403dea16bf0fd9a7ff1c08c8820ab6b2f98bbdb6da10107670d965c2c816e9a145aa680753431394292cb56f874665348115059c56938d6d5c2d6d977df11c1650f581f99e9002c19ba1135c30e9273eea7c3ff0f238e126cfb92ed9e3bbb6bb58728042c9e123e77d41c60e1ca5410306f014a6fc98e50a08c64780acc1fba49717c24ee96778ca3c8480718727e7c36e32889a934954897ab7cb3e8d8f1cbb0a506a25c7761fb5fd420ee9810c6736265e4786930bc2145e0704b855d40fc886e5eab6851db42eae1acf42d9f17feddeed40aec46c2acf541bc1754131eddbe95fedc315a90deac57ca9647a867a3f0a162f98f5f813f46a365c55b39c26495e53776b302385a3922f513740012341add8bc60640ddbb9a3655d5cf9fdfc756fd27b6d5b8b0ad3864c867b351ba8f2e9e4922fd9d74c5c9f56c98b40287267265f3827916e8990b444736c0294d9188a7f447a786d3274f0a7640e744e80d02c044227ecfde3d724b8836db23e0797d33335f0eb4e3a0fd240ef9fe2b0fef7d50071e2a3c3a742acc87e48ac416a399a0c6f5cc23316c6c2e73b476f9f4ee312158e4a82b211cf718189765db0436e15477d04cdb7503c731286a5219117613397f083bd350333591675f415ad6eb60c7cabcfc38131a963f905390d96ceb97632a1842b2f4a8133aebf4f2a89cef08feca50796ecb3b3a3f1b8118bc8eab4eb7c8ad20d7947e667bd675a5493a111dd3b4c6e8478a06cc773f4b887f923cfd51fa2833c6f058a00d7a4ea28bf70e452f21a7a9814c5e6415e6ce0bd51997823ffeb29e69a5ac7930b88dbe5aadef4172db8109b8a4f048a72d21428159bd5e32ccb67d9717e177cb3c9ae5d900a8044e2d4c9d9952a0a4163490d6d8a28923a2100acc6826dafd4575e0a8328f4bfe6060af0d9f4ea9aa751a6cfcc9e9ab3df921c7bee50bc7a363b29131968af35d991f7b719144e753277bafc7b0ba3ceac4879a2ac79b7a1ccc9291333a0287914f87978b6394133ce508f412209b835e277ed48fb0ddf904c65fdd639abd0485bc5cf3849b23624110097e06eff72ed1cfcc56d4e6b7e802b448f01a13cf1b674bbf3d2dc1e5b8c240861d2e4b1c757f9b2287cbec1283cd57e4920a68a7fb5f2e291f553f4b5b3d4fab46be72d6073a419244185deb475456dbaed79504b139f8d60d6cba355f585ef58947b40bf014020fb202229de0b970b9e61e62949edce0108d3fbeb2a0d4bb73cf9d85282546a0c8a3d1f5eef9efec0f917c6aa7068f5916fde4eb5c2830979ebe1a7048d0437c8d32055719acc2b9239cb19883a33783b24527498a8cd07c6005c6459e36fe8c0f386f708b7cc0be11a879a5494f01f3aee9b116a0b2b898bf3f4f55a466e2f588087cc25fd39e9fdb203cd5c4fb5be350897dea89f4ccb5c12793125a1e4a5a8110f63ae6293f94c23abb8943ea2ec522b9f61480ce08fc9fa2ef4482330d0459eb449e6e74b4bacd1cfd6ef08d9a3220a89740c0f610521a9673ebe43cc49f4352fa906f1452465506e10c02649b99a02d1eb57ab38d291a6483750d2b3cc72d25efa6b8deab8ed10fe38be8dc28c124bccf0497fe6a295d198e41eb1667b8ca2b9681f424187236664937da5b51e717e2e6480554050023d75c09dca98384a7aee130f9dd2689f7c14b69ca00d2cdcfa46371c4522a6ca2d836abd94b732efacb8d001bdc95b6326b96d436f054a1feffaf9a536bd48ef90490c49bce6ed2f7f0408b4b869c7be2d3235db0c08a94c7361bc7a69228bbefdfb3510d15acd64341cc7ca280f6eb1746bec009603e9448de56ab1a6ccb9130514ac05c7b47890a6ef4703bcd14d0cbad280116e3fcce2ca9f4da4fed3dc70d04254cfe8c60b450f238ca4c207538a8497c089da21c9f216fc80cea45a57bec52ea604fd870b84a04a523086fa8b8846077db601c58324583d02c0b57587272f1dedb67e54938bc10b450d24810cbbebb6050238f227d1efed4fbf56aedb994dbe3514904c67b66d99548ef32fd0f2edf4595f0ea631879fd739439bb68cb55e14d984b16d46e07e46906fe8c1a4b4632a7ead77dbee1f0697fbefe3c78e8bbe98afca293c480ff4ba71ffda5466b970469643e2ccaae21d65afdfc665e45dff13040b3001a221a240636149ddfb871d01959f6ae29858e52ef0b0fe81e35ef1de00f98808e5c80dea875d077f928879d8428f45bae9415f3edff4672ec9add42800d9d06bcadadd7b98362886cc45549d8eb582d4746677ce2815268eac78d5854ac34758decac7f0ee60645234c4bd6e3eb365aae63f361bcef70994c39c8a91198a5ae68af7b4474842a82cf3cad324aaabb6354537d780cce3e21e9aa7798889a63673b32f1b619315ad15728791cf428934d790305c67cd056a47e8e450c63dc9d2d159475004d554cc8000ecdcf7379601879d72ff5671db2e7411cba0c0e9f93edca024a7ae44cb87a044717d2e168b6b27dfeaa81af632fc99a66da26fb01814ae2a32897eda3c04baa28b6b017d8f16ed8dce7a895800c298d4bdb7d5db04d2bd52dda89319567f8f88a01a0a88b5126687dba8afc174cab9cd727b9253e8260937e0c98df1e8ab8846c60b98bedff6f737f628dcdf438f33de1c0e0e460daeb50c057bada445ee06e71c68373e0f0898e6c89ad04a0cb219548fdea38afda77fc73b98c63744a165f46b9dc3bfd2d37ad0bf958081ecc2005f46aa31c638085203164be9697acc88b1c7efa613da3ebc38644638d07c2b094b046f6a5e01d84c80979283294e6c33668670d3f40a7c4b2a310b33c6d11bf434943f1b4a88248cfef2d099901c60aca2b9e02867c2f1c247d3b4615808470dd53155fefc81622d1ff1c26f3f05690cd6e90beb8cc95ad4fc074642f0ef9c55fb0a6c448abb9d6d04c6c9d5887a42a91e5f772e101c4ac08dc7306ea90c2095079fd7b0d7d4db6e80c9299b8d30e0a2bc123bded94348732be7df3d116866acd781c932d93de38f8ab227b8b24fc2e328dba86793436a11268c9ebe61ee0b7d3d3a520240cfe290d44759b319205754c22ab3e698303e0e15cc6e803469d8a6ad3b50b4033b1368dd8a600767376724a384159ba57e52c3cbf9d7986bd19622f4585c6d9bf58105353c97f222b811bbc284e6f748f6c472069f82a80b9c6f02cd76cf96b9f7817bb77eb6ec817b1d692c941ff459fb5022072693deccb95fc87862e524fd8677102e1c91020aee32264bff524938fd66ec1c3ec939a7d6a57d9a4ad0bd0d46e66e882c27171a04d7a48359ed7bad2577b78dc506d7a20a938901735155bd40cdb91122ea031a484b1ef2e7a3919418a3c9ebc03a4cf795b66d30d89cf22fc5b755983d5c460ec75882d0721fedde7623f4708b622ce900dc1873f0dbe8d7288c2284c6715928a0a1d4917d92bc699b27e66db0e18b164fad9a3694259d75cd9f9bedfca8c963f927fc0536a5f929c80e7b1609993b2b750cab83800f05848ee9c7f6bb2086fe618f901ffe8801080dd2027a88b87870d0d0e6bd08b7612f03af0d1c7d2e53883025fa7dd498ec22bb10d5dab451833988af6d7b4e65aec67e187495b2c51cc9ba441c989890f67bb7c832cca869f7bf30694d548ae1db25ae0e8d596c18881e85b03953e05a9071c7e3a440fbdf2e752e3fbf7f626e06d767d099de7744799b794768e8e08ee40a26a030efd796a6c951bb6a1852cb3e0161b66e981ef884dc500bbbfea78af33c0d3cfd3698c04d82946ef05881933150b5d850c4496d7c496a73705af7a3e71d03b584920c7a0f93dd69707a4df2613c374d69673556929333d3f5a14d088c5facd53ac661c5337d760af8c2470747f76cdd2cf8faaababadcd676cd1cfc0b59ed2388023b52a2f5add0e1f223f22971b3449c612ef487cc64237b9edd5b3964e4ce4b00cec6199aad6284b57fe25bfedb4e74ce6a219375da0a338aa5c47dbc7f044567fa72da68267285a423aea1e9c2a66140bb00cfbe64e893d6e4b2f41fe76a6f686af39f1d6f1038c893e50a82944879313e8fdbf05c89bab36f64ea8523256e4fae194374990c389c4fdfd328d412ca31d42f1522830b4c785a7f025bce40460836822a034e3c61df56a71da06f4beaea353c989b59071450d09ebef6f1c74eda458bde0fdac274358ed2ff07f3eea493a40b4acf4fa67f3b74afd505fdd463dc60763a57e6079a0cfab082d3a1cdb0a52cb206548cd9d3ca7c1ab787a476a04d1becfbb13f3944b1f6257c37e100f4366fab833797fafcfd4837515b58d7e29eacd09fcaf2a9d658ded35fe59486dc45543cd60fed18cce35b2a69abe00335b4abcb3f494b4e68bdfceedf27659b365c1ff4ae40326265d62bb443c3525bc3cbfc29e07b907f71fc7e8f01e528159909445cd5eb83a976761c5b188588929ba8f5be25e93dd87e0c6d9c58fc43cf233191df7f2976b60e14d26d431cb5182719011e04ac4b2622eb61de4c8985b55980c186528261daaa3c00906462fad035dae4772a878fba8801d1d2d354b83c13d6d20ab602447f18f0a1f551fe3a616c13ea3ceec327b9550b67ab9fc34ee2b80814f94db48b1c8a4063c25243e33cfc1b56bab7aa8c3ae2a731f6a20c4a8f59f114333310784f0271d4e2cde0d179581e2cfa5c5715a2dcb2aca26928d49fa418e4aff313acdfe40a13b81dc1256a918c1c44ba52056ed8ad14bf5c1f0c282c3224a2c13c84af5adb25ddc6f1e220e9715894e94264ddca6cab060cf4316d2615310c1c04de918f3e5a43fdb03066853737bd77ffcf05d080d6576bb10ba7eddf4a6aea3511c0eeac676ebc755f65bdf1277f4e6e0532ba8394a4f0af22ec37b3d1cc4032a0988b7d7c1e15aed89aac8983a81b457d81982b7c7521ababf12638e04ce645b8be7b7a20515c8066809dfc0dfd587fa47b2967fbe22c23d039f45be491e5e11e26c6d4228db46f83b50789eeb170ac971dc0b12c3def70835ac830dff0587d5c3f9155552d7ca19d76b6e2cc1192dc5b4b625e51b2306614d8e63c7ddd2ec97dbcf76026ab33225dd4cbe0d900ec7ab3f5382653c7ff1d8156b7da4a8ec56307e2be24421d294f93bd9474da821615faeb4792df78b82cb2401bdbdfb9dd8852fef5f0d76c012a33167918b2b113b25e2f2c09fa1cb13e2bd21774020f5dd1f6000ef235c5c32e09824d6eee528960ef7d845b28cb35c297d4c06d33d3f9943169cc098cbd3591823ee9161d896da7c4a7f3e3874187da6fdbd811615254a16834b548970909c0dd272836f8e71d91149be9fde1771545950225ceb394536300601e7e7de39f6827a2b3035982ff3c0bfc1eadc4455ec81fba497d8a1b24c6cc0e9ed0748f134579c6d09a4f2018d82e46b5d67c3543c68de8ba61388f1f528a26aec8c7a43788b78391600b68738754d340cff470b49dd1fb8fc9a453de02808083f0bd39894f72225e4526813ce2efd7c56b36578679c7a18c57d6241b23ebe7ab905835c7a26f25477f552d476c878b9ebff364f5d8ef8ced332ec53aa376ed3ef6f8fa0ebc11520bd387e8c607094024d7871e1390bbe8cb3e9adfe7aca54aa43b5660efe1b0940728444794c50de2c99bd49efc8ce9b8cae779b11f62917d20bc24b5d55547b437fcc1901d315834fa5ff52906ca7b43e594169a82c331e5269b8bdcecc7288fe0f7b089f6723d892c6ec60303f453d72d13338f3427434da199c9b723330fc345c4cd6abb400c8ebd707f0c2fa4480fb6b055488eb04f63a284f6a4ba911dcf10de015aed8327c4cd4e04e1278cf92ab730a067b647846e6af9f881a2ad8758bfcf35f60981812f97ed0a0ab750ebfdbe66ba46b688e1ff13b3d966f626f7d197c0bcbdbf2ff27394eb3489163f5b28b25702fc6fffce603a34c85024756111ed74744c495512c3b0fb36ea72d2e3759e02d5c47d17c251385b261a27d5b9c31cd96c55748034ea07dfd0cd9517b9ee406ae5c0165a023cca0c5ed0270bb73dbc330e263db7569fc84567bc4781561fd19aed2d27a58aab706bd45286f85d4486f0bdf1a7ce68a5d72c85bccf40f45d571059f16b20d613d48d4943227b142d9674b876872d3b6fb1cc13c1ea7a29a231803a039a0e0c9fe0fa241b299699a8ce98f5e33b0838ed2c42ac710075d2a855a536ad2fa40b4553082cfec1bfcec8a7b3fe0fde289b4245e16b75d2cac1e470da4e08c7c20ee0eac66b53a0f6081125392e1e8fa97218977232390a12c67fec8ae9c945d533d034fcfeee4db6f56aad57cd4d35f1f8a0a1c06c86f89c50f9624721c24565b0e7f92c70bf5b3201ebd394acf3e133126aeb084f4f7caff73c55d7a889145690cd8be75fc4366e5588d875f5c8b1f7a3b3c299ce6c18ee3264adc5f87c1ba937cacf785127004212a4205fe426351143fa6bc36d919efe720f853808215075ecd1dcfde0bf999fdd49cb9792d0d182a1ef9331977fd5cd6eaeb8b860a39055b61fc6d30fd4da03334e38632ddd1aa3e039c047e1ff7bc78562b19354efb45feb7843148cee754efe8c01488ecec4d3c2c6a3c46854f4de2e4f4b75cb8a883b79cba653b83c2ca082ef04bb886761fd327562916aa054773994a8f7b4e4f443e9960fb4f4a86cfde1b6fdb7c6c27af51aa447751198a6bf1bd98ce74b85d464deb36b70fd2987aaed1596d1272e0c9267f0a06459356a2e2af987a45cde25a91ff6f51d660f16f4adceeb497c1f5afde341f00edd5b57d759c0f3515b4f8e4ac1014bf55131f5dc9fc5d9f4cfe31f246da02375be36fa5a97d28c6a2f2771d9026fdae62baad096141b0ab53f125487e6ed941438d702edd4b2cfdaf2671009b354acb45ec58ba2d40a214aae2c052d6f5dce96000d9b5fe0dc17245a94ecd48dcdcbb1ea44e2038ae36ac0b789f780998c03e329e0bfbfaa624998adbc5b23c2f95a1ac89287b22bac85f97ceaa826a6942e890f1b4a4ba260dc226685a2214314d3669c6d6f770349d875c7af63616bd0c4bf47cf41f1b763ccb60d16700c53825b477b1ab158725357d276f46cb0d7fb545647e0ae521d22bc0006e068bc728dd870ad3c47bd494c2d096ab8cc62e556b20c1c9fb6e1e4ab0fcc9e066da64017e2e5448edf4f16e311e3b946485d70925b421eb00c22906f259b9df45c2e6be46b084254455820d5848a931509080a29dd162419ca24e2e3f103a356666d91e11c871a92a2eebe1dcb1649ed6bccc2d1f8472f823095aa68c3a974c22713e9088dec0f87d8ecca0d225c143ae526246c934e20512c3dba8fbf1737814e7516de89a833015e48fde51c6516f545d91a4bd35c99b4ab879e0fa65069d562518aad869dc2123675f00efe7f6d633d388c1346bf1b177f9ee6e3a80b19a80be7d8908870b43d68abc3aac8972f4202dfcdb93f69aeb8b1b98765d2818270352009be943c1bbe2f42a1a655db1f0ab7e89ba5e203ee9806d6f42cd707f2b722eab0e33dcf59049e5ffff390df1349100d8da5f6b464f69720a165c8075727c908c25d2c65faaa35a3195ea4800064c7f4a6407cb98aa4631c20c675f2be843b8a5af7e617021d722efe7e27b08b03ebe8343c345ea319a9e3c63781bbdacb3c69a49bfd2f92f7534f804112c47dba691ddbe0683a93cd739bbc8673f76d0f75186d8f32c74a33eb527730427665373516bad2bdb62709788c5e169509b4c9b0df744ea02242650d62d6fb14afc51718c282cdb86214301d87e7573b53fdb34c0bea8f2f29ac9f552c94c1f01303c59b4acb25deda9d41509bd9af3b1e0a064d15f023d55c6aeb352c9f8e2f417772a43a2bbe7e0bc18af77d7251b938316409dbbb2171c02745451caf97e827e54994d179b4fba6eeca0ea129cb76818847212249297f77e67bb8cf2830104980f59ae19ceedbf984f9792be601b41c60ea4b612137eb0b80928a37bd431d5e324177f48a217c3d6f2893fb93447d764154be97df1eee2e05df5d870d7b79a2ce923053069085e4cc67dfa4ce671f2716f41e0706357daf546fde9db6f6b3562cff4d079ab4bededb8dda49f1677470173d5f91fb3a2fabbc96ffa94d4570fe020441b331b789fcfada243d811b1d4e4d1ef7a0c79dddfcd57ffb69a8eb5619df093bbe66a3e65179035f99804adabd952f769d9ed48e78c029f2316b5f814ece844067cafbd91a28a5cd52d147bbbb763a47bbaf63188b7fedf173b4f5e96748faf99bd97258f143cadeca4bb8953b01dc7996f978d72fbcbf62e00fdb0790fb611b4734217cf42f5eede7ba3931d8cbe1e3f8c0782a3a77ba2190e4a0633d975b998367453d84792421a1e877733f142f0885e31f89a2b732d978bd24faadbf40af4d4e1fd253faec2a5a2bbbce4fe80a340873b4cbaba5381304c2a066e47274f3cd32e42afedbc88e7be14541895a23a83f19849ba348b373da3c8c4f2a8a1ed93708175d338523d3c015cf729507b888019f917929c55a44687305c392d88bf76e351647df2703db162b3e3ab89b232fdaab3c11f3b00b2fbbddadf045c313a65818a414e1d5b8ef203db179cbb96eb4c2a3662c4a566c89771047a878fde146e7ea4b5afb7fd5e29c4268e25a927bd00fab1ea8e4ea98f027632d20909a94551a562174d191922620f9dce08e2b5c7c0f3e8eef20a9d61f7e98a30f90eca2cc1258f79083372e24b29fea86fde7e627115c1b97e85a2084749a44fca916be350358c7a086634408556cf921a60abe0b29039772e64995ff32fa64898f8f264636a2cb636cb2724a86eedceb3dc0389d874b8f46f978040936f3c5fe963fb3cffae60bc98484df6daf7ab0b0afed4b29a6467e2d462695ae29adf0d72bc9d9503acbc6c25dd240d9e2366563aa95d19e3ca018281a02ba4f4860f000ae027fd606af930728e4cbd10851239e7af94d175f0efe30bcc6fd28f0c24a6e366b1519c91091bb4efac1c79970a7e19f69ef30c40cd5be616a6adc5c3b86ef9a708704aa051d3607a7826cce96a1039320b5bc82dc641fe685dc6e4e740c68000e12acaba02115648fab1e8a5a561502ec6d7cb1bd9f1d3c33e197ccd3c8797ad9cb5263a334b1d68e0b8038536a50831ff00e4f308145195f87cccc3d31badb00260d9f116c71e5563b722191c6a3e2956163228f17c8e432554777f13d28b00f8bbdec487c10032d9f7edf90a8608c2ee0619be372c219d1647379209d927f690993b5aac4de543ff48bba8d1ab907f0f5cfa86e775fa9953dd92bab7113f2149e506a4e93299313249ee48536cac24c8e5c2e08337f98ebeb15c7d1593d6efddb66e37cba1b7a7e7664fe02f532a5350b51090eb8e46280877c1112e9a814ad2e7d2c26ba7779a5e0e07a2e41af662e229fd477d14a03d64a50dc87863afccddcf33d58a8abee5abbaa8fd92131134a5494622e50ae916e17213f96a34c8e5b6b2e9d684c52bf31c0a1d456fdaf8aac238dcbb755769a2d4fb5e36a9dd656ad8328f008c03e1fab7e2059d92307f0920d5bcb2a2a19f1ef2bd2bec459d33c902bab04cb64358cceb06186133882acd0d6c61dcbd08609889b751e1053075bd38746a7f3fee267ccc639b1712f2e6490d2378d75e49d0a44c6936f80abc70d1a05a5f07f9b595b6487fa867528db17de1f13f33b1dcbbf3e3492eb81320035889645ee8a7b86b7313bc6faf4a3cd1f83b91a643e19cdcb1843d24bf287f6e5bbd8a1091ebff2d83dda321105eec6ddcc2e3ff1dc7beb6ad17930392ec912d2b5439e05d5890f1dedfa60bfea8121a82ab8e83f6f355528783881d89b424337f03c246bc12d9dbadbdca9cf3aef0d23835635d15f819e9e28bd3a96537beb1acf956645509487a28d612551d7543a72a0e56f776330d4c751fa23905e035409deab2e0bd31453ab15049ef49b45bd5c488c13b9ed77f2aa524f33cc8212eb48e27d948e96965a51f0aab186d7fc652a994d3a1f25de2d80cf60fa191e9f90d02f5d4bf37b22cf0352bfd897314894fbdc0c01df82ee83c632d5fb4b1bcbcb79e45bc5bb2a224dccd1a80bbf971b946a6f75110f742500d929726bc65562371d75bb378f4f1831ddeb6fac77e5d20c93015b0616120031cfc4504b795cb379040c2619aa9cdbcf648f40e5f4244dbd1957f2aa882365afdfe79723d409715702f60e62d6221d90c93a12e9a4d49a22bca2cb4227e5b36e6ca2652df88e5dbe8d5c252d52f6e21e4d09a43bc513d1b95bdc236b900af92ef306dc5e0ee5f55683b4b48060f3e87a4c78951f30f9a662786d1db40445ca7027d17bdc25b317378e29a99d915bc724232e3d6f01caf4b63309883fd52bf7b2be560f99b05048d1d87236606c981ccd9f76218553937456ab16c01b0cc1de0209d71280b98113534a080540ddcd947d445fbff870e7e7544b1a617e61aa70be66b19df20d807eb261fce6099aee0fe4258a32bf1aaabd09a53497da01b070d0c432d729c17ac9bca1d66260a33f6b523715f5a45804915083d6959940bb4080236c143087820f1f246dfb4c9de0e7786234fc7d042a5db310d82d1d240fc95908dbdb5d5a0118d4022c75be003dcf972cb3f8a70efd646ab0ceea4dea01e2c70dfb409917a50dc968bcc4ecf42b23b91c7e9487324302c4c955131b51c80e58bc1a2ba753c1191593cef9e32b2ed27372e55518e9dc503c203ffad12bba960c9f5d10cf15a468c5ef10b3f8f1b159647c6032e9d2c66ee8f89465716a6da656fe1c84aa8a847e710ade6af1e07ba58dfd0d6e00a39f5a5a8697b07ad2f60d3ff3c71079f7b86ee8f5c5ecd58fe0a97573aeab4cbc18e2f7835d7c3cd8390b54273c8fcad1a8095cd42330664f3d920b16cece95c8c97f8ff70b8b213345790320e9d1d6d8f0131688c4f15baef502e9297f5a325e3dcbb237c5f744d02b6d395a8e40b6582bddc6cc60c8212a77f76dc999f645c49b11f7e1c79277a94cc3a6ba58571498c56e60f51a9b6f53d1c1874bfe53cf3a06575feb278407eb1e1da117c1b517d3f740a10f34f15c3a270a414bef7359ac187cd52c78bdb4d9ceb8e84f938f7ffec382c2f73f3df7bf55d08179a971b21a0585cf4dc7c8376973c91cd558a6b1030481b981b02b9cc388efc5df49e89411500d6376a876644cb46358da491033202b151660512c7090f8033e67d2dfa234b7b702503f342e7119455b43030f6469efe855d006ef1adf913281206918755181f63b77f7f93268de825a940ce44bec41d6e2b6602db249388419aca4869cae2b644bfd406687ec66d2ed2e7ad5517aedd33cf3504b2eedd923a430ba86adaa3c26f4631053bf809d6dd58b1063f8d63af374b5d70744c2cdfc39841a6d0f142e9d2dbf4e5b6b83b51deef994a552d2967599146a80e2127662b74741dc7d0c0fc54a0b31c5c2553f558f29ca714f87d862da3753f8131dc82ebed8ace7102453d1ffd420cc823b2b448be95fc190160fb42e925649e10c87e91effb577ed705d32aeefb2ba65ddbf1371c46fde89593dbe2082a3030a0094d6b30feb1d5d3b958b46031ce5aaaa1cddbdf1e8bc2dd771e98a7e8b0dae249e136f4c05c4e6f2608c2cf040672bc1688e147fc4365c041140297314863e64e63ec17315418289dcc94c19a813411c2a7a4f3650407228ec6d5b48670b9a2ca0160bd50b0d50fe184edbd16d1144afaae16375bd9834979a2f0072caecd80021bac6fa609e6f5fcbed3ebbc473d3314cdefa26d427313abe6af3e58c9dc1ff63eb7e6ed5480ad0f85e02509cda23b974be892c65cbda22bcea5e667270b4f4eaa959797d7d8334d02f8991b0159611e1b14f98ae7a6cc1a746d6b4f8d69bf60ab17312652f8b884d067b381620795734e8fa13192c961e5bf6c6e1408349d2999d467b06d88af19c0080a09168664301d7f9e974b31820443b36afd0bd63eb7cd6b6c2f2a07d41a321379fc14713a9952c532efcf5a4ac9030c9a56b0619fdaa4ff4a893e3201bf6db264299fbf69b25968c0295a290723407fbb685b4f7d48ad164213504e60c6ca5ec6b6dc362b4c496f86557746e0b336b3302ca4e5d929e0ec28755994aead89618255f932f51bfa4d97c503addea75e21bb2b0ddc409645842060bee8c431e2b1b574ca545bdf5f26c905df6f68daa77ed5531e56b6101790c5f22337c97b67f3bf0e95ef0a74b9f9ed1c3ed4f45312d28bbbece5fcb95cf1d124d9bce22f6dd9b0d7b762ea0cb2f900856947120420522b6de12de34278dd43f250193f0b9c38b456b3a743c64f909eb37c43d31b7bd12a268038454e72fad21e1eebb57b659f009122b3e5b2c9879aecdc6b654da62ff9e2dca36a111d7cd130c8df0cff08dc3f4b703ff6f7e4b6470c8d74c7b5e483b496ebeb3a4cc0eb603e403d7a12ed3c48249ba70c1216720f0e717f5b8080b0bf84728f696bb896bd724bdb11ec9e5adee8964163ee8a68f0a757511bdab4e6a1043d8dbceacdd2813d214525850df94018bf9557f5a62b55d066cabf754e75f11addb6849086ddbda0433022103acb3038464cc057420d29ccb01049166f49883260567f2409c7ce1bc1471414bd5720eff89847becb9db78fa63f668617c483a67ab2f251f930aba29725a420f4d1918a5985d823bd3b1ffa2ece3a21435c49def1856004f00c08ae75167c258ae6ed862fef1ff2b83d8a33e3cc27ae73d3242ba8164b299c2ada9fa6ef7adf4f3d26004a14eb72e4ab8b8cbd56716095bd644dbca55ae38c0e1c4bbe27b7ef75c5130e9427be095cec52c4069cd4b0188de7385217f5c2f36d5489d77a5d3536a0f96964a6720a1098b21835652c8ad04a54f717a0cf29d1af10fdf47b3dd63b0d1425cdced3268002bd7e8060697c7c0e92c0eabaf74cbf9aaa83639a6fdf6bda5b46b57c2be7fabe284f0485a7a1faf83d2553ebeda1fa545ac56392fcaedb57babe5ab7a3713ab65436bf828311b04908f1fcd0b6dc6657943def9bdc1e66279626da614453cb19c3dcb95ee0fbbfb04ad1a345cc9a3705f69a05e7b7222f93faa9ccc8786e87ec3079933b800f79e55546f02ab55211cd17ddd190cb719486b7d0c7fec6c2d102521c34b27d2c29c5d211ba98f9087e64890efb78cb02ab3ff7f45f16119faeb60a29b14dcbc2c9d1d7884115f69eee54d708245c74fe66b35bd60aa8b54b3876179aefca0ca215d1eccd2a15a89a57c9847bafd68fc70f07fc8abe383872f6e9505787b2fa65f0b3c09014316c95e4c6d931e94e760353e83ab8d397532d56cd8928e09fd5c1bb4966852480196cb7a5d64c84dffb123e8360033f6e0f3dee70f8ba9e87dd5ac543996c719430f738a5c62aa141b0c896561d4c327add115c9aa9c304bbe76e01f88004cc0cd08e8d5f1b748ff61d132b5772d51993da1e6ab029beafa47a3071fe53174bd9c92d0d7c930dd03f4272b90232c1e3027f87857bb79f9af71590f8398cc54c9ea18bd67115e95443c360e6d6f264ee7f5d65326a87f5f34591ffd885b228daec98c9b666571d0c65376f8d10da7fbac95bd09f36cf5da9e0459eac11450f74df131713a291c8f6a7a5dcf37720fa7af31e0d01fb3652b7505475a16bfe80016f8bf09e10673a56ff137b2ded3d4d08e14d6df8be6257edc7a70f6a66c088cf324cb80135d16f76f2bb75d01774d65682cb2cde485e720d6cba42e425e5f386d15e40c6bc914bd6ecbd3290593a69a6ed509f29377132912acd21c90596b3b7ad53058bd5aa9d645ad2f5bd8f796b00d16fb4ebee1fff2148b9057c07f9ab58dc725a36c4eeaecf5cf4cdaf74c550d9c3c7a292bb79a09b58211d68a00d9f87f898811fd693de142f43c83c965a7a0d0eb7767c7f49466443465f3ac8498d603e8a3992ecb3e567c3485f5ea25eab8ada1010d8c4904e4a34291daec1e4380bbb02080daa5b17e93bbdf10ccb7b5b185949be10e2a2c65a8ebd19fab12daa08df4ea9c03e7c1af7c669a688c8eea57377da5597cc6de41b386b9324f299ff18cd74192394b39345b67f6de7ac5805344c0fa5a728c41a1e7cc27cf59cc519f94495a4045ec0f38a102594599ffa4c88b11c3a7b2fc161d695fcd530eb7722af539e02fc4040017cc1446c4690ed8e166852a54c7e83615576a1b58ec2b66cb6c8cfae15fad075c73230f7e2e6300b5d65cdbf88d4b8e2ed2d8aa9bedd81c1983eb093ef008337a7eee968a38b679f27e98791ccca350d93f62b9d2025e669a02f6eb40d5dc330f9f3d0168eca3838e5fe3fb08baa3a434d2d8ad7c87768706a066a6a85a5035a086da3245975d6f405f090fdaec59c25776a7690910448331e1c17c4bd40bf046db490f08e935ed1fa5bf0e7e2d94f97ac3fdb68124618f92f79884232919ae3964113da2973093c33cc5fd4213f95cd605ad263780c79ce247f390f27359098d57aa080293512e774b8db5f8304bde82bbf89685dd9ca29e4df60b380a18c8669f59bfdea65b667f42167b225718b9e8eb2c798c3959ea73a7cb367a1467634bfc79e6847ca8bed47f9711ab6a7b3588dc20a24bc597cdd348bce977a1f0f6091c22085e9fc4ca7d7a2ad298c1fc68a20a5e23008c73d5b9f0d884ace7f7727ce52a183e3904e3b48b4cc048a704914bae80db105e212df4a843ea57c288801e076697d9640a552b1b2d395dfe802cde4e8e1e2c9bf43ef8c7da791a446f597aa340d3e72338291003fcb7b54c7cdf9c6dba512652b9df04b45ea5bf795b8b343313c2a1c3b3f8084222b554e684a510a0fb2c9020de896daede031ec44cd8555c9f77ca04119c3b0c009140d6d6780b33dbcecd3290c6a69fa9c498974b9c9cb82956fc97a408d9dcd9477bfadb123691ab751f1b4641acebf891cfb7976ee756d7bd2728cd3c81331b98f55599d892318753fbbd3a7c6d5042065da9d0d5f412fa8885756076cf7ce8cd138ba68acad47cadf01874a50d0fa4278d369394c45d8cc5afd65e1855303448233781bab98d50b41e4402dd0995fa4ee659fd9c489b94fc9e4d5edeceeb49feee9eeac48e1ad5ff03138d74cdd615ecbf14339cbd1af15002cddc8ca0451ac81552ee83aca6fbae9845ffe63dada8a9e8433e651c834e8fa30cfa101ba000900cffc14d2c97d76394640645e21e39ed697e19ad1bca501fdcbd72fa5976b2d560ea3ac1109658cd9064f7e8b17d7916b687e47d7443552d9063cfc4876aa5d202a5e4461f9f827603aa782fdcd27047281be2142329337dee5796bce6b5975e97bcd82270b113968e63d3f6531406abc35978389281b8a48de9df70b07a4ad4b5e3b345b48e08d9d72d50ee2fa2c1c43e1028372bafb124a12594ca4c1d1d7f7e0436f67573090fff02d95c55c8eb6e15fc9eea1f86a5b280c708e18d3b88aaee870876cdb435ea67a6c5039a402ae905f07373dbbee9a789ce51591102a3afebc5fd88d62826854eda459421f3189a0b7feed3c8602612314df52e3f4cae70d30f44babbab27d848a8e17fe2630d3cbc0d4a34ca853e5cd095968cdbb3f30be44bbfba2617538f1c696b90dd104fcbe0bb9abccfdbecde4b32d23e8f9fdd1876810392585da96ccedf99b00d3234009c5fcb7928c94458732c33d51d6b59f41731249311a27651306d5ad4878ba81007bb9ac0f4ccd645e488b83fa51baf58412eb14cbf1ef849ebdfea6528c577ffc84f23211459f60c718e86c2b601e7b8d0a54a6c8c92609befbade24199e17f0597d525926a6e41004af97b0060eef50f2a2a8e7163b91e55b80530a1f6c909b0dbf0cf2305cfd3aa39065011403ddcfadd3596d8aa704898c0bd77b8dc54d4d83f68f7a1d45fc7df93f1ba9686da1b07f3a36e6aa39429666785bfc4c482fcb3ae761b03bf6999e8d36fe90bbd86d74c3d27a7eee865e414c4269dd558772300fcf2b7cb8fb6d2d9972d5e5b119bc2a257d3f370fbe725f2c456f37367d2fe31a6acef30736b20b86aa813a00f53bf5e89bba370a3594923067c349358fd0dea608858525c94c35bbc662d1a48f019be6bbf80987f38fcc4679db4eb63e616ff81100c7432a37baa044673af079d9c32f0ca830eb8d789d4e101fe9432f0e299fa8500b4005cef2077172fa80f2210fec95fc268f30ac5fb7975b9b64c29a41b938c970ff1d9277baf949e0db8120994309841267b77c3941f04107e61977cea5b4f55485c01d7205f1a946203e0a2bad924d509d1f9a0d09a0e712ac6f3daf199a6033a92ae2ee16045c6f27fe70308e1a5da021cc528e16d3148a362a85d28facdcb23bc3821b30480903871725808b758002726d14173961b7cf0f49dd29929eb90a4901d34905d513d51f4955cc9ce3b152970270687ca996e56f880fb1c621dd68c4474573adb3ae377fb3ad943f56cfece584c94b5664d28703147e756b0d7b78a95943222b2bc6657c591ca17c77f9b1cec71c0457143bebfbebaf23506291759be279a58bbee88f19b029cce716de012ab073313d261c849a9b6c6c354d897d066694a09989ef89bdd48479190cf28b93c9c88e69acb45f3b7e1deaca8b62d7245b772b6074302bd3aa04c4e22b21e11f0ba4206ee122eaa5f692511cb7973d21595875e2cd238ec4b564ba2de08d628e132bf21c602c454c834e7bf86bca2c0696c1675110d1198e8fb49d04b7bbebbaa6b850cac124918743d941b72d49e9751821f899e22be614142cdd31fd3b6c923a324d49c4ad230d816321cac5c80dceaae954d8383de4e224c873d1498d98ec1db384aae7e16e5910857034a937fee6e1c27c5b50aa9eae238ea7857e8f726c13e2759dc884981eb81c9928df4a565c0245ef14a37c820bb66312923cdff5bc89d35c639bfbffa6281e54a587bf70357a0c4febd37e4067d23908b58efdef7ed5ddeea6636c6b735cab13b287f9d742a871da73d5f6a3af7e23d881ce9e2658006e1d92c7573011fedc52345ddc8fa55e1a7355068a7fa8a92875108dfb5523a0c81839db1db6d50d80fc7f3d5cb6d9564b5fcfddd0c8371316ea6c9e737717f7650f8ffd4a06486335efab93d5667613b39e20a2e3fdd247d80ed5f9d5e5fddc2e16458e6e680590b5a728a3df55f27015e37a1ceef0d6d21f15583f8cdf0cbce440ed41cf5d63a5c022e8d5cf122f0e3e836c67be6500529eeb9e994508e566904b318aa964734ce86e8052e60928aed87bba2fc6a97e52ffa7eb0cb43eac830189da41d2f84ddf18b655d44b5fae28c3c111ca37f0362f567e7ae64e0281355dfc62693bda40af99b79ebf8c4ea458270e44e1fa41734c351b27a3a477a4bd558852a9bc42e5ae41c89e7f5fa932069a1cab21cfb1b334cca7ce0e21538f391a12c79c612552b19baf71ae8446e8ba1706198fc4204f13a602e81079504e6dcf0e466b9bb097bda3ace954dc5b40ec64c60f5f05cf58de423d66ee8b521a221c2b52add5905a57b0dd49352aecf58b9e4ae264b6404aa6a282b30c072e509fb429f29f219d51b784399404927a81b6ef4177d3e9876ecc7fb88680ea07305c179cb2e50f312042deade05b088bc6554930cd1dae025db28869a0caedd5115df7a20fdac296f88c5b39b5a949d671e032ea110d169c3f59e0c92ea3c14a20b7c655a7a2c281cd9ff4d45531228c9fd7b3abdf5c2af101327d6a6f6fd56b9485add5726a57cc17cdf85e361a191cdb0c62a640459290721b5fa367f062e37d09073fe66148ad8c236291d30361d3b76ac13e02c4d103b781cbe94453715b55018632e8890c52832bf7885fa7eb702d21620ce9a72c5161424a9447eb6a91ece9024a5bca0f3060e1b74e0a8c6bd69684624c4cca383d55cd8ae292273d6e4392e33e778755d484d2460aa65d4f40dc36ab65cd64a07b4b1580aae52db60030f8490970c2f36a41375de8009e791b20e2cd7f13265824e226765c1e1c7f0569501dea31e4168d8aef09a477e9764bda55fd7292538667a2262414088c91c9dd7a3399f85ed24cba29480a602f9a36cb7814f462eb861f2fb6f0c80da75e6c8c0444c34ac450e93b5b26346223a1a977849c5acb83a240028ffd8de45cc1e88eee159a28692304f659327287d3e11bedce0a4c6cedd851a4d1f5c9ee18104b83903e6599d9da406a7081b2df73747f9e358bc985a2aed98791cb51f9407a6ccea1e9a665ea2d8c3024dd4e05b28c555d96a0cc5fe8f7072c44b9ff392720ee32ef410256a91ec5c974a0306511af00d133e1814cf67c92b5f9ddb8fe2eb53f065f30645c42967863dd5b648953a59aef33a704bd7581cf3b02f7d876628d1ca31097e0b0b6b1f7421a1f5fb3f7722f94ac3a9c8f456807eaf3c661db4ea75fcb9e405223f96573514016a1c8f27dbc0acf1b77d2f36781acd14ff6c3c61f97e3f3136c2edd743b4ba4186693a66ba910a96335c2094547f62c64a3142a902ab46691e01fe692874c5ce55bbf3c82f59baf9839e2eaace638ae1b265c2ed8ed8ee3e221cd7bbc19510f2efffe587d6b8f79355102dd792c82c63f3fc9be24a7321127220ecb328a6a5b731fcb5a9f9bcb2db60115a7918329bfb035e2c3033c95ebdb695d49dc9d9d2f1d02ca4429bf373f334ac8bb4631d055fb1fee5a898f2879ffb6846e24c018b0a8fc9928f3bbf2d805aae57fd08ce697f15fb241c3b60a765a3f9890a5c3fec2b6f60370d1bb4058057e6808129c78ca302daab46772b42e6736ebeced71eca35a23ae179d31eac4be2076a449d30baadf4f636e443ac8f6fe8af66a1f4dbd613a9d41ccc7702740b933411a0422c593a71bda975aaefb47b1eacd59beb68e83399cc9558e8e2b3ca05a21ddecf0493d0da7155b2d2fa7da5f5f61f7c87e9c568c7b0a9cbbe0609b98e247a9968d2da18d5410ec98f5ede65d27b6cf7754759c445f110bfa27c6056669d4a46b2cad86f7e749325077ad1dce10ea2f94a40e60d138a67956bce19f8df44bd3212b6fe8964d2863f0210c3a2efff01a8cfcd86d3af3b0ca4ccfd7437cbaba95da0804be71bad964908ddabf8833df6c34b3ac6373d8742a26a37ff851cd86868962d79ee560eb19f3264bd7e26ae9f254f4ba59bea54e44ff31a4b32ca5b481165717c4827905aa86c799dcc542adab2fa0bda01e2f2e07c51c1e86c3c3ae8b6de9e6e017d1d860bef7190c318a42b403119c25163516a0e94ac653f1c44871fb1c15a87e2541609e02aa5129d2e1de838012feebb526e3fd52de4d7c663ad5f9ff3178d41af19622734b3fb5f986949e665b6234f2438efb7f0078048a4ae21ff170903cd911a8266b7fd9b65e0844725cae74484dbf921bc8e1a32d77f24bc786bf91e345ae80645bc08d72a0b67b45e6e2901d6132431574f1bba766a9a548153a266487483a0d4334ecce2762467a489407179188eb2a30b7f498018374ca60e78797b347f7e34252b8b5268ecede603e148e231c1cacfc4badbe8015650fac064219b6cc3219e9c0b9c52f425715629017796e4b7cb095f4fb76c86032ebd6a9e663301caa0722148a47fa1633b6853354d65da1d2feb7be5893d5bb60fa832654d151c7d6abeaf6b9d280054007d6831893853bbcdc3f09f14db777826552cc6e260618dced363481f80a1140f79f0ecf2519e89d158589bab2e32b45a42b35b007c6066b3e3c9846ad107dd56519851bb791323cb19cf79ec46f1e0d64aeac5fff928537110ab5d6f2cf148636bb10307d3ff1abeecf32d06a7b2da10e493680a44bfbfda4f39ac3cd0f9199d4434bad1e50a04e4386da8c45d1b5be97d085cd87017b330f5ce1323159b3763a8b50792c8017149bc04b6c4d45898961f857dca77a9c473a66c3c6bb6a44d6231060b479a60057f18fffa004b1c965671cb632c48ac6a1c776325ba54458c8ca916456e23865e9c0768fb432a08737d4e7f12d3dfd77cc411444668beda33678285ae5fa1199feefdc2dd787de950ccb9ae5a392e8c361dc6830f29799bdecbafb7bf625c0c0ed2911f42ca047818e09e70de614d63f4349fa0c38a47bf88097b5576e3f634dc7ef74b7dbce4f6b574556f52e71a9610bcccb2f352f7c8cf3d8f794106e796c777c0a0a27172134abdc9e97d4d9da971edf25a355f74b988e286632024676e5f0c632688fed492191ec31658d09ef0870c6bf461ea18e00c76860e52db18b294ab388e7a15a37c428692e5ed9a90b0a878986fbde754498efb0df3241ddc2d3f0d34a5db4be0b4c05d6738c6f3d148b4eac10dd8b7d70e517da01fa0e4270852c93dae18b099bffec6fcc7f5c6f31e43eb55b6af56ff71e39125449b5e650975a20e103272ecd6289a04b488439fc7b1d742b8bdfa9b72da9cfe219dd382e3ebf35f411b51ea90a78e6d50029d67c88f29ed99c0bcc21f970f5358cb1eaa70b0ef58f0e45d82c438fd82a5316c5b73f7ec35c4f27b6c4eece2088701a899f5800b89369e54c8fe81c619a1b9546c1e33119844f18323f9a133350e0a8644b15cd39d3ef0ffd8f07044709a998a93b5b646d81f41ab134860096e0cbfd617b816de89723f950966524fba8445a4f88b1dfad4c071222fc42fb42f600bd67cb54af1a63d1757a93f55ef63222cf3b6e8500eb45df06e64c751e9256af2f19b085dda0ada7a9e80eb1e01bb5ce5dbee277a060f1b9bb4b7ed337c7f2cee2d5b31739045207f9b4a2903cb075cc96ead250516a8ac60c7fe239240e5a51a189457f50a9fcbd465771ef8da12eb6618975c3e93d9cae1c836df8f8bdc2a9391e2538849525fe3f22295ea169130c71cd7822225a0d0b65e8923d51ebce3bde76e6acd8456118a5bfae0b0c28c013e1713923528632791be3c81dc44cecf30dfe4553099d0b39a14c5151e5fc79daa70999b6cf922c93d2d7b3c2147627be9674e16ed140399ec0afee639b208388d4423199463c4414de9767812fa216b18bca3b53c28bfe4e4eff98fa35fd7bf6034104907012fc3a6e48eec51184b33346f50080cec8e275d265bba9dfe07e04957a1e7e7c012cb25394993b1624cbc165b1f9ada19d80e40a2e4660a739f8f31ab6c65a460396b0c9070bfdc3cc4ed3a1751b7e6f5a96a307338383d82a4b40e82793d39a1d1bada7fb30a03270f08c6fe282f65359ef225d3dfa7750ae37bf60de239d1fa57def00685c1e8a5b0a5f4293c03c7c60923702b8f2407f9090ec9b032495ce9480c9651440c49d7d487b6b153de24f5be4f40bc284e6a76471a9e1c96669fced9183a55834934eadf803bf6ca04c769c81b7257781887f9b30eb2ca80b9697c69a8c10a9be9607efa1d66b5655d842e072317b66153988022582ae3713fbf1bbf534c0e2151081e78b48426e9eb1cbd7dfaa4ec32c5dc001cde622d127e4faecc557369e6cbc3bde936a26b73a1dd7b4291ed3d9d826a8018f75343943cefe5dbff2c121f1e2067f160f239fe2a7fc41c4e0a48adc7ba8812866ff201caa41a1af190a8ffb49c4385ca49d4695dab010bda9c56ac8ceed07749413c473dfc1617c4df881647bfb6544f1b3bcd146c6c9457cc1fc44ca0045cb109eb63cf38e26cf2d48890b9c2d2e4d565e2bf09e9702b81ece42adb59d3b343995c3d4e0061bc1704389e916a57d9fc8fc0670747032ca29c9499c26b29e35f7e7ffee060e7c1da5d39a3d3932345e740e96e703800de0c854131bacfdf231670f016176d03549a878a4f51d68a2b8b6708d2cb0e33750d30771aa986f65134f2ce58e0c1aa54644de511f220c0c996b3086e79268d90453fa5aa4da252f5fe1d52c5f919845a60299b74307f3264fc08e87546974c8edaf0f598291d707c705a6dab22e8417bdf3cf1c8049419c3478916444dd909d6ad7a5d44604ff3a1d629c3de1c9cc017df699a484244d8926ecf63d40ce5258a94f38794c29d1a3e8c624ca9384867cfdce67591221cde8f8681b08c29c7831b3b193ec1a7a78c07517ee351257137ed3f7105879b092036f43b86229da017dbecb9f85da0c03a95b8f678eee9f0d5b62f49ed8ebff10f1e9d88ce9ed9b90d04fdace182c89e4362948bcfd9982e67174257a423d92d5c0d67a3bfbe56771b65bc90de5cd7f50531543f7979ef06acdb23ce95cb489a4a165ebe18c64feaecf7742dd257b4de1d2799edb573c0b023c0baa6129680c9a36706c9da15c947e49c93d4fdd891775a8bbf8e2ad437ffd3bbc8187266c026ec8c3c0898ce2a0f7506e7212a4554b55510ab4ab446ddaf199e791140dd5f6ef732f89ab5195238eda0b527760c989642dc55e853ce5148ed0dc69947886b4a1cc262a6fd3aac05cffc7743e32278de2c15372dcd798c40e684ed758d2343d11169adee6e256af96b3a90bbc82cd2a64ee2ba057a592c08c05f6bf3988dd33cabe0387badf21615dcb131f97dde77811680cf2f5b506d2a90fc1aade826d20ad73fb8f40374ae4167c88823dbd11ffb2e8dc2cbf227d3c6ddc0ca6290bac2388b660abb248ff7d9737bfd39456755448153cd1cd7d954e736305b333b4729cacd0a03dcf11ff088e21153ca53745110625567be697a09e6f03bd7362d4a838fcab286435a59d801db48814a699dfaf598c2c63ae844cd3103a9e791f60fc4d037cf1d2e36cd4f5c05e03651366bc825c332d9b04fb6164b9cd98ff268e8eba9d44cecad4227ca4bd93711fae5409a1089e840048e8e34104083c14633ad3bbfab2b1935da99eafe40da96e677ea33982362567ed712a56c0a8389865e6c409577ad6594ee2bc197a5460d83b9567f6453d73d33dc7b600bd05ff1059ec24463041cec5ba2e110e20a25c6ad17c3915a9d6bc81cb9aeff2dbf6ea572a1b3d5c34a3bf8fac59f115d7adec00164f0fac2a409f9ff31bd6d0de49a79ddf628478f0d10e2941a0980aba371ec224aac8c8a463967ed0aa579d7f9e2d2058f191404cdb7e099f8cbb3020c366889703923b2fcf3aa3beeca733181c93f186acc8ef477b0aa500f9fd839fc79db77ae417bb050e83a70c74b91a743a98f17b278e774526215cbb911ebab9ec2ecce8fd7e11b80e10490b88b92b0cbf2343efd853e3f94d9b83fc4cecc2df7d5f98e8223a4280e1795a797f975514c1d00df706fce1583cedceef1f0e5bedfa8c2666a95a6e230e74bc37959e48371b713523126ccdca9b59d35fc9cd0fbd01c2d4b96e326595bb4e30955d0296d943c443181abacc5f504a96c33066250503f0b71b71632616c6c87e5c5a0af73120c15f3bdaed33a47053e883e0aa22133ba9e56946bede6e577623e7223271175dd91372be7d8a3289b824cdfd49fb13088ac91209c47283a5eab0931fda0aabc2d74301b1363ed3dce32849261740cb5567c5d52bbda07c5fc7af7fd38505eddec96325aca9eabc4ffc65f863f4be5dc2b9d20145abc65b3428e252790ba77e1b79467db8b22921ae300a781c8199826a715e8d2e702b203cc9de5dbceff8cae269fbea3ea1cec2495c1455e73ccead77c1628ac363b2ddf512680ef604cd367a3d72c5a1b2877e9e8de032b5806228774e611a035541579566d0762e16affb43a2d88baebac16be6574e45b35edd0df7b584c008a658ced69c72aafcdcdd28d3d052a229486ba3a35c823896d44dfe868d1e088ba0106a2ed84b77c14d15d7a53ea970dca1fba8ff699ca6701685b4b879278c996650e49a479b9eb88f186eb8958c84a87e197b7ebb3cf187724da1d0e0b0aa984c519fcc5988f797e547480346529de514dc5f70358ffce87bf87e4994beee0aca7f9cd0f2b95c155b9e604ad3a4e3781097538c1c86e1c15f58d5b363521b587b68fd4a1bd39ce0ce26b13031f619d06e0bd9531222cdae9a71f276baac084fb2097c2a5e127d1c4ca643b5620d8e27535a18a3ae17df5b29c0a45dec0a4a46f18e2cd1d560422230f66580583301631e2ea46fff6db9d5317b8fbe50742e129768b1dae36c60830881634b196d4d62534c37a2c61d53ccc74c284863d62f411a9d90a4db4e5824d4dcda9efaa42e3840ea7922a60f6b80f54d6ae50fbaf52f5f6d2e54f320a4fc897990f26ffdb90fb6265bf679266d664bca56788ac2a81faa03a4e3d1468442215b19d9602c4ef958318379f59132ce8b3b47ad79f7d56e4fa5552440df0f3562c25496131cc5b31fe078dd7e8c9d5e3071550bb4901b455beb95ba5939928bda09d7ef83c622352563b61acfc0858faefbd3cdb21e93208886f07b0161c9b0037f42ddd210afd6b4f0acbc097cbf4f55da5b066190f18ea78119e10b37ad8617e706b0a99d112f24bc8f7a069b0f6122438ec192214517f13a10e7c42317ce44eb6db7e6c448032c9e8cf318cf55c83501b0e21e29ce1e1968f05201b435421f8765df23f06556bbff86990da882049c6317edda3828a55edff606f0797e9466207453662dd27544530b209579d2147961e2ea8418d38c9278b6f9e120cae12c09096a0cfe53925c31a02d9ad57c4774ae259a2b404d831473311e50030b9d1dca4261ef683cb941dd5470a54ae7f29b63fe5f01e420691f7c3288f1ed3ae71301caf4ad36a9baa474c548377dec9d13e3d44ca7ed8cb58994dab10dbe7b49800aee49fe45809dcad873401f63205782f26cae9e56489e00f6b3f5a636eedf5fb24d2aa13a350a8e7cb4ced6333b8434c5af12670e5a5d97934ef0eca08973bc255bc4cd56a477e1a9ca05faed418748cb277643241a45dd2298eb1fa8948d0960cfdf433ec4f31425fd2eb4fb9b776a9a4a61ad3b8b4d9dc4f5349f5d45d9bb7ff980a13952c0a63093d4f35fa9a3285dc52cfb8983918efdcfb1aae8115ae797ec59ec8c37d6ed8879f9df81535a864c9cafc3078058f1bab9825a8e351969f8e5a6d0568636bc537335700d45795ad74c258c0cfb638c441187d507a4920d5a24bfc93f66d59f54f7fb304fd03bdc6b3ccd5335cb774fe5cece92317173a9bb0971ce9ed0966b7afe814120acf13eeb4bc9759a23beed442bd778e0e55580078de10d48d5f231267fa6c8b159e18bd714b82332cb75355440a51598d0f8036e1e8b8cd0c6ebf478bdb1323ccc904792269ef6a90033ff0810ec828bb5f121fe959b297bad8a9568604ecac5447f17b73ba45f6e66c5e95581f22fe2a4767f280b51954b968e65c8e284ae8077b82f4a7d9b735cce2c4889b345129c62b1470c1744fc64db453d475700957e196587e6cc9d8876121325a7beedfea06f0d8c4624540e113ff4aa0f10a58025a7b942ff68604797218a96a489414ca56cb1af7f9baa638e0e676faf0f0e14d6b5e46d4ff6622d7e0573b105904be4883c1447640886610d1a551b5e6c19bbf53cf2b7078ec1bc7b4451cbc64e8dd84a2ed102901c72f19ff6177b2116e29c4da47d9c147abb1cb75bbe0377d3efcfde1f76196712fa8700f9880f9ad9aa80428ed8f7f2d0d218ebdc09560d8693833dcdce61ff52412d6c999819bc81e4b5730aeda2d299d2a7dee58a174dc30f073bd9bae8423bd5c4f7289be0e5cc5910574d299b7b308e5cb4dbd08d879d73b8026d6bb56250a76fc79c215390c3953d3e47333ee5d2167b0b9a00efd40a0bc52d3154963c980edbf3850fd469ba3f81516113ca8314801e4ac2497ede7c2eca3467b6f474080b2068d3ffb4e15d26bcfb3bf4f851199ac50ed773172bdc1630cd73f3b611b85ffb60c25f9db2e01ba6e9aac5e9b380bdb15f4faf9de3f7c09e32327da2541963c47b5b2394775fb1bf28228006495df0dae7bce6b31f2651fdfae68bd13f486a5a5c2c18a2b55f1474af4cf2048e887ac3ed772bfcde824bb0b6d3f1d1a1576e4fadfd542e47e84b8b4ad2f92e26ed817466e3f66f6bc03f43abe7e6201c041d945961d638fbde0e67afb11e358619c6dd20b0a639a2d921e71d0eda5f0abec24c696dc84c60387efe3eac82ca8a50a0c71cc95c725fcd28b0af1cf2a4d32b7168a31af405e50bf4b83398701bf936dc302ba6346bb7cbf37af12b811eece7b790a766e63d224f7653a704fd7ff927d05404f926958944b1098ab6d4376cfc86c4b5e5cede46ad0988075ffd4905017f60fbc327d648027aef4a69c6678eeb54b25d07f13d40f8d32097ffb08c84bcee93dc27ee0e7926e03a386b1e9a0aaea25a26a2d28929e4512d234671b61cbab17601f78dfc00f25cba5c75bb55692e43948b88a2199150e4dceb394c944a41c70fc12721af0392fd3c8490c43dcb03fb5564fb17e65da8e5f95549161fbf4b4eb990a2f1b0576138fa7e369dff8226f10a07b3f6b99d23023b7b7afaab7d3365d0010836c73881e48aba4d986ef6b944cc488570ccacee8d9fd31dec508fdfef7cad11a13865beb6219df6f199511dea2cb4e419b37a625a75e2239069747e795854ee951e6f4a99d2606db8040df50951ff3e638530694261b66afcb8edff2f38e4a6a15d644d4d1f03a9386e1257485a1076b43442d3f44315b15ce3ac5e4bcd12d82c663cc4f72132764cadeeb24f1352fa5946bbc8f12d52cf3ffd1b49920286fd7b890e2b587d19b4133825fb20938930acc8e453f6e87fe0b22ece90e437aad13e7e000558727b68c44a9c77aec6de8c70c5898a1c383fe218f88f8fb72ea84a67eabdcf8ea07197bccaf77f8aa6e311b5ae1e781cdce2474cf50c4db22941041742e4169da66346b6b6a8408da9a33f04aee536c6d09d4e70074f29f2f25574aac258b394011e4e11fb24b44746591f8fa0031a4996c4f7199b33c0881ac8479d8c5c9163b2664cb5d7f5475af5f79a7cf48f274d1ea4d9eaa339e61492dd24cc928b06c6c8cc64018231614ca8afde539f11f3c8c6f0ad16105a18a5286368d0a7662f688783e017465da8370651f12f8c1cb250398307425e9c09b21d48e4ba65613be6fdfcdd3ccf20c7d14ec35a12013c082eee62a6215a7061f810a171dfaa9305d67d21f104c25371aeaab1475b10a32722cb4c261b4fa51888a11ca03993bb175ace2693da13ff748afb8a181a120dfa697b2849c215aaa430c3abd6fa6a08758ad32c4723d627e483f67846cc94feeb37dc7622475c27fb85e952646eb8dde16956ad7f5faa25d0a7231c05f396aad59c741bf88122305349b69c82a969c44ecc3e7144eab953878536bc8eb4a6ffa641b3db3464217fdb971e5fcff037d33b61ba632d687962bdff6ece96da3f499196562c8bdcda95ef0d09fe20f620db4de77142e211b40d133a14f4c4e788cba4098e24647d059c3bd3db83a5ae5575f5304201838f73044eeec99a8b58c9af57f01dea52db92ccb02efb1ed1d734d8bd2c3ecf01d2cc1a3c3e92a28a7128509b660660b459c291f6bb2d872ee4cbc1ffd220172e390a19b9c4de141e40d3eb6710214218e5010210375c6b32729b6be7f42d440f7d433dd2dd10ea3d1adb7ba9f9b7a20784067502997c346065218d128711b3c2f0f4a54e5b5568be388e3e50010e6d80181b7f4d8a220a08edc84f1dacb29c5bae556964ed48e203388a740460f74335f6c6c26f560c917e23e29d7d258d1a3ffb9206461f592f9f0a4db6d2ef801e2803d719e28818e1a130bfd42afa18891ec40bc867a43a84167da5b945c1c0724e5efd76af937bf9f8986d2d851e4be404a60aeaad1f2cfa8005f12eb9db5d2634b422a666caed3ea480b5b2d69b49f54d1396e6da79eb6c85f131892f98831ce16b4a0cde6a96789169d8fdb8d8399c704eea2fcd6bf0e1a355934db0fd5e9d4e34fb665a4739d15c40fc8e791426d7be228a8f4843167a2016ecfaeb12c916f792cf7397fe773ef05670c3d265f7a3887deb333c5f535ee75013f51d9b980020da806b5d73c633bca5f60bd5f4cfc400d1e26e44045152779a3feb847f3bbdf4720b033d0fa1d955556d45a90a72f36b69aac187b59419b18757e52b221777b17b0d5fe5a84426824aaed596a25de23c057ea10fa0f21fd36f5aed49ba114a44900721c5a6b735588433ad2ef57312abd705cd62225c39eaf91de321a7408bb36646e6dcaa219ccc9319b41b4d08e89446b58b86284c3072031275c56a4841d2a7104db141aa47322735c3c282f4394105dd0d5fa418dfcb2dd0a1d9cd6faa23bd638daf2d7b6c96a8f92d09398a0731620f4c6ce02c5307e4fa64136f6dfc1ddf7964fb0f207a940ad392541ea36491450c30d24d7225de69c8c7cd979097692cf40235480437e03c3542f067625b4602464bc257f87e593af2b9a6e776fd73649f5957f1eb0f189542d49bfb02e93c39158eced1fd4d0c07d7ac407b1959926a54f9335a5f5bc9b1e141a8393a4c7a1bf133c0c769e275ad5ad5e0e4c953ad063c1c881320fd490f17eaae4f351d3d89d28d7b4b65c21010d62c6fdb081c8b24825ea9e09c6e68bc64d854106fee73c72ee7ebdcc4b3498ef2fb97c8d6767d0e1f3ea3329c69864bbd4f3df9bd2b091598feffaa9311c4d0d31486aae62f8f54d0a59f6a4dbae5f71465e18f242cdbc85fa916bac48a8f398390808c6242fad9fa4b5a1410c8f713d321e4b083cd8a23d4cf2ab42cf9e65cc3c961fc81a76f2f0bbcc843f94f0aec7585779ae49f2edb69933844d55fdbd7b044bea7141164d594ed008677547ebf034ef8b47944e079d85f3cfd56715ba199a0f824a8534f5d4d50eb9c8915c553010c1594e118385da2eb036d51b28ea340fc3bbd7f5987743a5869552e7d825e8dad252fde560196307596e1ae3020f3f3b3ce6e3619050039a51407b29bfa362a5d62cbedc9d0759dad4ec3ac3273eb912ab49012479f00d3eb2fae596b00f8db482f3b095d89d5ad93ff6358fc4849844eb8041fb41f213a0ea9f985e5411e01bf4b6581f325e3d7c43707066c288564d7b6cc47cbb894447cb232be06f4abb5a3ef8c25ae88230559cbc79932a0f949dfd217f2c0e0c708422ae2c9d42a72a84a7c6cb35c7e7518f9dba778023b8b4f082b758eb42070e1c00f94203eb4b5fa43e34b5cbecaf419f3d35e59c69a7a994c987959795cac7b498b45fbc6f53b0c91a608a771f34a4f18ce1b3aa9e753c1389210b632252b1af74f2231ddaf4932a11d082c26ce35600db9c008a341ea2ed89be7e4c1f8c58da78e7b173180bc763e601a7288ecb6e06952f65fa43151483d35f5ab38f041fa45c6a30062914e838e78c01d698b25218e12111954dd5d6837a8a824534254112295a53f3c8768fd2eed838d0e94f30e21f89deb8cc7d89da6c1ec31d0fcc21be7ea4a364b43262fa12fb5e7b7f8c48fbea37c95d630a7ee221e98d63ac632d821ed6ce869c487436bfdc3a4eb3e52c1d5e52754a1d2d0d59a651d4b800eaafd300c2fa14faba55e9fab336e8708842681ca2660f08e24cc4a47d6c5f051f891d1be373921bcaf0ae93dff03e0f8d31fd025b5626fae1292ead2b7142f591c07f8ff5d8b4b7d4e615e8891baf5ccd5965bf33b6876bb8da5e5bc853b35ed18fdfbb577e34a6064530d95bf5d759818df3559ad709b1498ea9ac65b30190e26aa59728154a2216ba392d67a76e38b5e8e432fa90c24aa1c667bc5d73c7eac0b2648125fa2d5fcd455e61ff427a962124fe88c5dcd6dcaa42270a45ea14e294e61d04a1c8ac0b5163f658344f0044f2288f100b8840fa9925017aa57bc8941d95e6138c546ec424a4d2bf021a3a977a6af4cde14aad924705fff9d98e76743dbf3b55a46f335526313dc49ee7e98fedaaf7a8afa6b40cabf6ef2650844697fd73f913af57bc13e982d6fc071976a4c1489000bac48925a14efc1d7f70b248dddfebdb71bcf28f7372a74dffd3dbec972d0e028fab8bd41bf5407c694a3f3fc90843de8b2452c761b3f990efe7bce77f8afa477f94a08b166b43342a4a0a8f895c6213525386b2500ad2f70b1d2b8f79af0ca99c6c14f101b6dd871fc69123cff0ed67c1fcd0fe776810f1f059117a315f75b6b6364130caa64b975ff85106e937cb1c87f258a1e65b91715b0c1f51f076047c95e57ad62d794bd41d4b09581794cb3bac845c1c4c1ae163f4d24d77443a699fc5beb95c7f9bf993b08b021310937743c33320c4294cac1425f0b40e70b3adf4b6336946887d3bcbe2b51f46f9a2854813a5f8b5be2e06c3465ed3ea8752db0045675ec3c82f51532a6980db0e0149c282df41bcd4ea359408773820b8210b860f6d91eb769c628bc8f5908299d9b006ded6e0d1510e9f76c7a86d5a231e56018038f3dbba72f907d81ff3b05bcf4ec2af2dd818ef8f337ce4a12a2ae555e1938a3d38569ba4e03a1d908d8ee5be6d97ce1fe692c39d464693bc60074bee4c4cf39bb371c21b604463dc7c24d6a4e0a9ae77fec904a72ec7f168c95c9dcab0b05b675a13d3044efc0c28ee765a3938edcc68efbc74cb3ab102cfeafff1f2bcf4f572be7c5dae88f5539e8930f311374e20a98355f9ef2c192fb4b92104fc386edd17be2f5759247c1cde2154c4392a78729b2f8f1ca047a0601d05b81a6a9e3fcba84046135711952d71e6a15ecba505560f08ff5f0a9a2e8d22611caaca0e78b4496dcccc73f42c75e34fcdb2db8eb0856a6dc0526ad358b1598bea121cf1c886f9748d3a46461e4c8ca3c203e51e3d6887f18538ae6ecffde880726f47a90a62dbfdebc8b60298d3e7601009b4de5d21f3555da2765e4a19c82a5c57be480021f0d9ae6f9a2e395e4c9cfc07b57edf214c8d4accb9e37d0693536c99da9354de920f2e16b45b383b6a612505a420d18e7b1722cfee82d9603073783946361d21c9d010cecca2332b8dd769a4a2b7d944658d0081a5408d0b2a5519e9abd73542ca6625bf46405078c67fc8770bf11e1702f05c5b28d5c90bcd392ed892418827b86bfd666f2fab593d4e919a41b7f69e2a682a42b55d139cb8d1fcad8bcfa969e8a46d4478e39c8c5a86b5d2278389422dbf315f3fdeeb3bf351c0039ec1467edb31b11542b7f3055601f0eb4b1f1dbd5cca012bfadb8eeb9562c7bd42cd801051056a8886664491f7777e5067d7777a59ed53b7f904d4ad834a857870dcc07955f3691bc788337183bc946de171738ab2fcfad536e00644745a6738fd43fcf8375e672ea09e2341fcde7331de369c89a1d56be64eac9e7e275162e1ead4805c8341a5f9d626bf928489c84cea147f28ee7797299b4cc07b69960011cded6c2c43a86a6ba198b20d4e4172fdd2ce1aef89a14d731e4ee1a76e44d60e0dac429eef701ac1055a5bf4e0984b11975c5c68f82bfcd712ca1fb8f70512bad0e5e55f77fef2a366af3e5e5e503082c1c801ed95e226e60021ebb430d0aa0d559dd49aa414bd5950a1b3145384372196855785ea6094f0a1ba50110621635c75c6049abfcea3479a0aa840ec0efccec6cbea952bf2a3d3ef276929b945707cf36a7e388fce5eda22c528665b7362af976facf949535ab21287fa188f283ccee3a1b927901440011c4f8a440e966c453a35bd53573499b48778f960f14fc38bb7d6d348d0fc902167cc848d2ee5ff7e051da34e9e0074138d65077e49cd65c95a76e8e51d0a67d9c2f1cd3cf171727acc7923850f8c2e7ab9086d9552586bb53ab1fbdda6478681ff1dec96c9e5b1010e91a69653e53913d28fd641414c09ce70696afd1647ec9f1a7e55f8938b6d00240cd4f51138879bd291e25d599b63f794fe73836cebb28ee364c4d801fb6a8577ae3bd6986614a5536cb21a6b00e5e9406d1ae915ed52dfb75412e2b630c52e16c1da5f0a0d365c70510d18ff6f70d0998ffd15d9bff160ea5f6bdbd759995f29d1b98884f8a78b9150333540536ac8bd2f2e09bdca5cf902d23a69a18d6434527beab18d93f8b0d58df39bf03d9cea5986ed6cfe146845311c7c8abd12663a88ea3fef7da3e16a3b22407ea32c431a6adbe4df64c82639761fbd61c3a5f0d30b41fae4b9e541e7a3981f0fd8633e4bbb0ed17843725b4df30d1ba3c8c907a872bf4edc18dde28c708bc9b6fc13a512f3f66c91127abe432efaac24dcd0991e97c559cb0809dca9a3d04c51ed6c7be516577e1bce249291db61554acdc16069a5f9ada513fbcd1a2d3c87c6af84197376287d861a8fe4657dfceb83d9becc977bda697ebe362499bcd895f7ca4b2d0effd27a95f055b9739c25d71978714ab9107c6bc7c5872c136b9053714df066e1ca72b73131c0ec6b1cad8032b2244d8c316e90b4cf224ab84108f6fdda6cd27d0933859994ff643c2c75763413642a8b19f8209d7eb039f3af79f0edd7c783ac320281115d5d2a04f5c8e4a379fddf97b520dd8b5a573f72b25250040a0288232f6dfc44e6bc0fc11900e34bbd883583b43925e12df0e90e0e4f080e2487c8006e3e35c0c26678387c798f2bef437bc300b44aaf6c5588f0560f8074d0c649fc428dc57f58946fc6cc40c1b3eae406b2b7e0f49116d1354b10de2eba589481e36c2bdc3ad323ade8ec880a0c7c8f406a5c7c5e66532f677e1c8f729b2ca145c2f3f5d3a17fc076c9ee9d2bd1198ff5baa156bc2c3e19cf51b97417027dccfeeec938dc74a226092b8213831144dec2e01b3fe60f5108f038361205cf9fc4d2148375c3caf90ab1bc48c3b8850f7be7d25ca868c48047fe1d40e32fe67c258d05fa28f4f56e033a6ad2a76f6a127511fb10a04bae9bcfbbf162dbc208a359675c7d2943643a6297c3989090019346c3b3b5be6416bbdffcc8241d7d24cab62a0003bdcba08a1db8eb7f26ecc3a60446fa6c443bb2d823c96d96bfb9842ac0a64c54a76dca12cb5b62ee3c47d3510e2bdf3387c0e26d2a00aab7ba4436cc753af6e6bbb6432de7449e83a9b90f34311e593ea43d2b54986d872d68bf75d70638560a2214f42635f66883fe7a0ddbac8e95ea3511d286979b047ed9eef223f3842c9e7ce0961cda47e95231a873d4e670a69f7d8944dc0ee5bbbdba72fa09a919de393d0dc7e0c9decf6b03367fc6b4c618dbce00cbcf7420b2c84c9e8e1cd76d7f1d43a7e4052654ec72e55e6b78fad456612390bc15f85c4549bad4ee51716deaf594ef9d7f0b36b9dd49c80614d3ad39af360fa9d6e951c02a113d86f2baf96b018956a559153f0a374058001fc60e3abada1d5d2393d980ee7b06b120d3b55a09e6ce1785a6bd4c85c25def9b399a4f716aac19f70ccfd141a1f67e5727f53acbdbfbd2608878e512a29ebd86c1c546ab21c8ad649c9694a075b4a4d5ea79bb7d6f12d85dca7aaff522b7a230c3d82afebda5a0acc805798bd2f97b75adabb117dea52f0bcdab94b487cb9492721d99bfdf9a40c610f7accbf8a401e4aed8f89f9d61d8dad6ff97c39cd8b98a5e60641083ea9d49e4a68e11cbbd710f5c2408b2940b0d902d6957297b4a44405a657d8591aabb7e2b3429f1504dc20f947e0300eaaf84924754c5a3eb20bda123f7cb39dacc492ed3ae6919e7a514dc4236a1bc72e025f379181061b343e4004798d5c1a95767d63e48c2e50bebd8e96972b6d5bbe41648829c194e18ab55ba1ac4a929e4b40a99d46a5fc6be1f72c248c6a88a4f47f399b248ea9e4344231f9cd8d7c15406eefb922880b61f5a2b7f4970857ebcd1ce35974695137ad98b513b40dfc95cbcf131b642ff3f8d80366a825947ca07b7a78bd754b0db3a921b617579d8894a5db91af8a1550a1f787e42854840dd553a3496c0f66e39f1bc1bb6aa3c0fd75ce7085b4125f6b2c94dc135eac0bc9df42edd7fd55ba9db3d0ad200320ea964cc8493aeac768f0bba595141a8dbb618467ea1b75e96f02abee5d08afbea7b29f56e2f7232a1f10bdb55c7c3eb8f2de70fbb7979c912c306eac602821807e08b4386f7716159436c54ab8f3dead578df9d7374db88633636cd2588dcb631feb9e56131aa307098ad17d78ce138869b548fbc94a45770eb651203a82f4c69567692bc9520427b0b16e26870f8acb49691e085f267a1028245f6a7ff4eb9e267b5d6c042d8267411c11ebdaed2cbb75dedda68e8b0176969a078baec415c6755baf5b0fe373eec97c78bda8bbe28b81cf0c84dbba10dd274c8d2ce2c78657cb20379783b1d794487104db686103078d32d132a371982bb91412c3fdc67ca2f89344a7b490279523349bc30e182bf52eed118d2e48cc90749c7c318b2795c7f3e3c8fc30909f2e345098f955cb9b2b92359ee931272337df375e78b92a5ceeafd9a332a401fa1fdd2a7a21af11c188ef2a2a722b2c68e1f04ac4e15fb96fb1a5778656cdd01f7d104604aa8186fef3b0b02292f8bb53a17c3cb375cfdf9e04dde2692888e61c96ef3b8e17e57e96d163c2d1444266fb7a013c4cc26e2da70435e2ad9cdf45bf412f264bdd19c413288686959fa39a1096be564bebb0f059ec11b67a72fa062a81509d11594420b3deb414b169042f2ee4e19a9a685523549fbbc734fc1cf095033e13413f9028efbc2229af26c88e2c59537e304b3af0123642d5ce1f5cdc6d075c5f765b04b7bcb80e524c7483df321fd9078dcb6b0a675ce258f9976eb3594096a6e3392c7762c3d54d1a0d0737a6b5e97076fb03ef62fce210115717fa210eb168f24bc62755f8de4d5ed9389c6ae60b1106f0f58d1dd1cd72ae03cce928444cac11b441f80d093e0926739c1f9cb130d6d4657b4eb2cbfe4baf156da71d425db4b0943a437e3cfddbb22f0ca843842ae175401df1b204a970a5608bd3f6798d36037806042903ffdc9592baf234af195218d6a13f814ee53da1161ff8658aaf15f72a300b5103adbf401ef449a8cb305fc2836718bdf7f2aac4dfc44388882551fa2d11d7d164eb5d1b9f8ac60739c6747a73e8017caf6930a51473aff0a18a07c97cdf794debbd4e41de8b8f32522a0821a8330dec9a79aac55867c2f2effb48cbf6621cc14e5ff239ba63616f502bdb018f5d58fd0d0ad4814886cba3f3b84f4d8a3ebfb51fc7f2ac5cbba4862ad3f07580166a3019b680c5274cb23155fab0ab8c5beadaf813fed1ff8e9bfd6ffaedf830524c9daf3b5f34db2d71080bfc4304fb5b5ccf94bcae61448efc305d1543fed420df46be06a04a74b7eebe3fadf80e46bfd96e7d2538f491e66dabb6a01ebbe95f87aa283bf18f5d1296ded05f010855e2edc0ad5d46ca95976aabb6d0d31edb29fc9b0af17e57351f3d24c786372618e7f13ebb5356db380083cc41b9e98d8a1fa9d76743bb5fe92cdc2b43b9b99d877df113d96353ac5cc0c115feb4c4c113803c29811eefbbb5092906f1d80ddfc5e6d7740bd651fbf7b4abe7001eb0b1f46868413cc4dff4496c5fc9d34520f6cced3262098a957389a321d8ab9561345b1c0ff2ab47c332ed1605b5dc59bea6a29c49696e5756f4d9a6f98c10bd9024c0c1af7069fdc485b3befd2becc77b3b6af7ee621b784bf97194d7364cf577dbf519f7877ca29e88124e7fef353fd59bd7336dc486819de628060c9546a7a6b23af096c4e2295571af2cb432bc44ddde3fb8ac5309f87f0698a7b1508e29e6a93838e3668cbabf48bfa7088e8f0fa16eb7e7e7ba88fdf68e7dfcb32c74492c9ae205687c20f0cbc5199a4c68c9bcc58e8e2dab253345640d22aba53551bad206b1bf070941f87d2f6931f9c26ef0f35fd019a60fcf41c5fc58d2a407bc03f5524a8e5343791199c9002477e1702319bab537d7ddcd07cfaef6d6139758c513b692ffec0c0bee4a469e3929427a91f72bb854ca380fccdb37c8aed06780393c549c11737537a1c1e0063449f670e58d702d73f21a6de963729913e8a69e49936b57e1e91c8ecdb796a1cd1f17f0eda8c749d348c3d61f4b86499d5f418116fcbee20defdc83548cff476e67d3dfea00c477c25488fc83c72cfd5b09888aeb062b96da2312a52fc46a98968968cd4b5789cb9ec1de62a72d98d66268c8fab2cda987e0c6da7e121fcd85a48126b49081831b1930cb74c614a49f934027e37036a867d3bb4e6d528b282ca6e9a835b59faef3ef000117433fec7e39b3f424d6afcffbe98a2656847bbf59691266ebddf27a83f25acdd8fc73d1abe8feb4495086c82e8dee36d7573db09fe269449fb093d0c46a93ce8583277d0e0c6b91aa9c973b3d271e55f63cd782462d045100a04526b87edc95902a9d58a50c0ef2743318bd316453bca443793626797ae4828c02b9609b81427613e341ccdb84561f0690a3dbe0ed709a26da8ae49f6471bd9b696275e6118f0ca16ec413750b4908d51879196ed285f2395fc72256a440f436a3741a45bc12afbdd1cb740df70254abe1c85de135602d2f56e0b38c599f369acc8ee5339ab102d2acfaae162f2cc4e55127de288b77d833cd12f8527881af1e24e91b108ba85ac0543fbcc6d40c749ea8db0d9e9cf7b9502d956407b69e571602b6c50a0b75ab1b8ba3e7c513ba8613dc7e5add086a4434c6e4fc95b057d714b5e6a8dd381afb5ca1e3bcc75b1776392de1fe1d017d587c373b91c0de6ac87e36bb1b8d4d8159128d474d96991e7f3d5299714b4d3b0259a8aa38fb15ecca9e8f64051523d2f5a45abb47ab3aea7ea766efa66e095e493f1898a9090d63c0ac444d9ab7aa436b9ffbb159d90785acce307747560bcf8d0ee098ffff5379d537846991f89c93fb062a60d7fd522cf1e1337b3f34912c9a177c1ace6ba6aaa231328b9d473e196d511f66829d469212d3bc052815d4a373f7166e7a479498f5c1565bb0edfbc3366e7285799c88214880872dcee74c9e562a7d292ee8ab474798a580ca09019f8268eda8bdc0a8c9fc58367641824d3652371db8a9e4d14cd7f56d4ced3f9db7a7afaa7b244cabadf63821b6d6088d7be413a78856719808066f3ed36c0dab28db944194311f0243e7efc0143fdf5ce60c2a8f1df13135ae0ba41eadf3e58bd4d7199812b7fca27de72a307421128b6b9f11609e2b20eba64abd3a5d54e5e0f220fc6b585572cb36b21e3a00023d08ceac0be722a23d479fd220fc3f0c15a753294bbc891442555aa5d8171b47164c700166f870438464c1809de3ac0e3eb8468ccaf5f165ce18d9213348b2b4d65ff535c1c5d789cc8124c5d53056e05f2096a862db664cccfd37a4ba501192fa1470b39d841e89228ddf9aef5e907c31ea99573c722bd874b9fe37ac7b7a6449c99edb76272879903742028cd22eca2753d95b6b0dce573c91f5744cb85a56a0f9d18330d2853ed06bd7a7a03589320148e02efd4c066fe13bdf31dddef4e4efdfc75df5bc362f98d138edf72cd6aa307245a304b42c910a0649c64e8980bc6a6d586a43acdef08cefcf68c4a62d1ae3f4c70779f547c5d393469c504a82ba7a574940b507e81a8c66964a119508bac4f879538438fa8e597a2e647ac1e0511a10daee419f52503c395a2103a04edb964fe1fbb80f3aede4d786baa7d8bf5424f0468aec496bc662aa0c75099e2253e726aabe0e9176373f29165ac79f0c5df32c4691498246245923dd0860149f71e4a21a03ccc4a74439fc9bfd187ea43965332aa1c47ba6e188386e8940dfad8b177a0adc311f0e0301fbf799dd0d6df8aaa7cc95c6f8749c06b46370051ef482dadcd4d4930f741f5c8fa64bc7087651f35b8a03bff3a1ee9e4b1a66c41d6893f316865950507683396f8d94b6e37f1135fe68d37a5785be9fa47eade970428cb4764b9e8995e1d8f2467e56d43bad7209f0b41c778650c61a1bb53cb170b4c836fc9ae3d19a299c7424b183a0f27bce5e7572873b62100b0a3f4a954703a7e377316d0b00f0abb8bb99a2bb1cecc99a5c10e5d5a500fe2ad98fab7d255b0d096b4938a7ae42948531e1a641b27aed3bdc27f44b2df451e58c1538a9047589dfa7af8239a2a52f281b4392f55e9148c8cf2a7b569c85ea2d63f943aa936db0e39e54ed68a28a9748a7d17fbac9e567c2f735f1bc7b90c4428f545f59adabf36f1f4a68a50a7992b642791322cf61c58b5155f81cf77f2465e366dedb5bf418c0f798946a226a3bae7c4fd7ff2c77707301c823b93af25431a5004eb70f9e0c02e2c8528686a56d9e58b13dc40344d25bbad94d8d72e13ed01837b1e76467df9fe44b0e9677fa8060373f1db9262d6c5838b2cf6580ecb0902c56f14db363d2bb3fc8b235f1492eda4ec8c5577efced6d07ea75e56e825497a50f5bbe36987f3b1eb07ef2779b7446fea122e83421ceed5299c8a530e281ee17b32a3626a78da411e9e7d9117a75d4f1bb3a483938b68791fb277bf6a5dcc94d33c3524836030cf98fb112936cca8622294ff7ee563be09b05935ea0245b0b65fa2e262601430a52e327d4e344cf28390fb2d1e3c9e903cb8978914a5029b3feab4a9d33ecfa84e0919598ec8725c8af386a13f23be64a5dbed0d9dd1ef6f959662ea48bd40bd37c5edf99e386eb2ad2f36b3b22e40784b8461f1c3a0aa79b5244a5669ccf2ce0f735a064d5f9cfa747c4e80db6d636c49a2e6eb47efdee7626291fb1fa36a8aac7e8959eb2f02c612325869354a6ae7c5e1de2c6cdd5b609ee6b6c2e75a2166252fee1eafb5f77fd85072d1c151d278aeb47f18b554f5cb8445c8060de65d8c65962b86c9b5caa82ff57df5cc5a2407d48e1944c7bdc38c24a83b17f95590426fb054e0cb51703b132fc6b84c5d4054eb5d30a7bb9a1a20677460fc533552edc32bbd31808e29b43c96a810df6384b883e99be3d86e5403f0e81c949332abe45bda4f14034ae1073ab39aee5af097619284eb5bade43b7c1a3d1e20f121d3cb823753150bc7c48b13d97f262ae659c81ab90e490716ea3d5509438ddf9fc991d69a6bf260906ac025e118618138034b3804947d768172880cdcdb8f7871a502995a240daf53c0681a8e5b8b913e58f9a9173dd37f8fdc31fc69336653f68c07b6c3dd1a6b709f256abe6b460cd2dd995adec1898ef77caa3db4ac59e13378f1cc2166f4dcaabb6898eab4297bdfb2f7c9df3b7201e0dfcf91dfe81207cdeebc9c3831bc266c59e50eae712f6d3c9248e94b0370434a4182f0073287edf25f403da09996ae416a4312c427ad28db6f659ea0dc18dfe9fda77190146c8748a411d1a7b86124a166877ed528bda6426dbf28fd956bed0b6475277f742628dddc346222f04d5585357ce9db01b87af04dae61d721ec30964bf0a3c93104e1ef70e1ec39850d61c3d359f2f9596129d47f80e2d725f11d7f78dc265d6d01605be840e6504d0cd03710f52bceb8415469fdb57067ea25bb595ba7d808f4dd45409490995570010a90e7df978d120b05c1485965f66cc117b0f91e0663889fe450d4098a5353311bc61c9c316e4ba0ed7c8f86a6e2def7589668094a5ade404c21b37cc683481baaab96dc622da19d2d465457d9cc592eeccf0b37ae510d16003f6a9e81ee0eb53bd30fd71160916fad7376e835641e8239374461a2d75447fec595f071b7446ea4a582891de1e4c434856918bacbe1d4418f6a37111cf799a0ab9f73687d5e8a9a618d710c72b2ac02d636cc7ee70b2a83c4d81a34fd26212abcd0d9ec887c0d6b37bbc381c65159f793441e3520c1929810392ac129e8f44371dfbe54fd4b5758f197ad9ad9d41de253e53b31f8cc48e28bcfc86e7e685e32066c24c017f9f54c7889e1800033a9da54b066d867b71d8b68b0839aee1d5a2ad54e0d420206a4f255c75ae59c5c1547f0513e5829c01337e01f57bc6f60c9cff8c1b29d51e69667fe9f1f6b99faa472424b83db0effa680fcf50cd1844333e8cdce7b51bcfc8c6fb35c3dc5e7dcd0f226950496e263a34aa046ff4bf0f1833ff66c48391a7d648eedca2ee89dc681b61ed6b8081f72596238aadf41f45b5ddf2ff6eb28ae30a4d9c6378f7b6d15fb925a9b7f50bfc2e0e463577dd5d8ef40e34983b85ec13d8f3c979fc079f95702f0f80bfe140682a01464f6d977f1f439673443a363d336a865c2fd70e641102f861d5698b44c7789e203ebd572ec5145fd71b46fa893723fa09c4dd6faa6a7e254b2638b8c9451e7bb370880d8ef6b537dbef5cd49dea219387bdc22e94c3a115114f4258796d3298a41e09ac0936b08d9fd50e7efc9c4331f4963d86edae1cdfae6ba3305a36e9060d6b49b342625c546cae4a2e654664cf7bdf67631480e55c97d7caf34ebac234658599b42805317630ad3b060c6593981edf308aa15eaf88562f5b99e5a05e91ceb31eeb8997bdaf6a0d99acb2dea9d3c70404a1902a2c13300117ad851813326d740a5c68e19d2baaf0e6ae3e8601c19b9ed51d4e33d957c6c87b87922975ee254df27bd05101d0155cf59a8527e170d01046c0cce7274ffef95306d0a94ac83fdfbe3303fba6dd824a058c7b14a02690968d57b7c07edc756e9dad9aa077117c7456b82e60c5957aa054a569a25daa9577ab79ad1f0a6fc5d1b163fdd99aaffe28fbd68a4815a3b74abd78c0465c0e956144345dbab61de3ff52f2290d74eb6261abca6e2e08ec75aa6bd6135ab6be87801b522ea4739b5281dd93a04c84964d3f5b5c3bcf7b4b0495e627c6a9303915b475d43eb5281861ab975aa3aa1620043b38be88b1e0dc92d72d51bdd113d6f6961c09b9356178d750cc78c8f8dcf086fb197284cb2cbadf5613675c9abd0554cdb2729e32370bc875a541e736fe0a62a3d2c9ba8882dc31a9db474fffb20216d045c0d6aaa4baeea9c34b0ce71799f97de806eb666a8225621b1cdc5efb980ca3b54b34ee5431b0bac8d8d63f4f313bd09f607bfd2fb779443b5a97d19872bbc1752e131575e5791a815a95ce867340745c1bd3adf49194fe87023baf6f3d6f47682cd1720bc1ec4d3b7f7dc8c4d5eda09e6eca33b76951ebc35cf0f61911e6b1f4559e58b521dab52023b924795be1e4d6390ee494f2e84ab360f1bfe000d90f7c62cc8f457fccf68e2d8b19a85a4e66fb226edba04a97b366b308ac181a2fdc34107c1aabf5599729c7d178c53250fd34c873f3465c79d57664a3235b36685e0ee996224e1580f7e7c442188960134cd8d92056a15906b084067365d7baf0908f09372588325653942b5c9e4b85ea197bb7b25738650c45dd65f321bbfd453eb986481d1dbbb2ac7b9a7252bfb7ae78882b781b68c061a8418d36ce4d31e4488d2f3f55da5af8f3c0d3d36d2b5ab20b7a115fe73ca543694780369ef6cd7641f4491b03e5d7f74744936441c7cad6f74b959f941a6c154bf4705af5c3a991f32f7e8c70b24672c016770b6918ffc2f21e106fbd12c86db29a989d6da715dcb34c4e71dabd102a7f254d8af3716bdc762296414bd1ac15e1dfbdcb47fbc5274cb9aac30c72c1eb90540930dd034560b531b1ee94b3d5b53c2e8461c20b687da5f466be714084f2da97702cd0565a04b6fbef05023bc6dd938d8da54e7bfd99f5640fb023c8f9a824da105f2267a91af2a4657a18442a15edfba0fa86020a30ef9b3c306acb10ce3792fc8d5c876f22135d568619f4a36177f74a9cbd09ea7c85a959445810a0a22add101948cb6310202f36fbdbaa3d6c88832fa40e22b2563047f5712d453dc556db36e007bd32f730d54e1a5a0c8178ec956f0792645531559c0323baa961ca4830af2b3496ab5837c482f3e0de214ef11c2a0b84ceba57eb309b94e601f9f9ccff8df47a28b1c3ddd93ff56dff9ea24dade41b4ec5b0b26778899644ef6b9902bdd356b185e92fda246839aba5b430fe3acfcf69e807736b34a99ed299f29d4601e3360479536b2373794189da4510d044b428e2ddd6df88fc5b4aab8889bf60d403549d976537c882221cd8259bee37dbfa3144185bb6b6b604a671bdd6e3ad9fff7e5f9bf513c4230d27e448cb0fdace71a924f069015c07b1979dcd737da87622965bd1a19d92560fc061ada6958fdf5b5b71cb3b62bb7988d107e373d8ccfbb8f1234b1c8c9af93dc9e871a2754fcae3c1b3234b042db02ad96bb02cdf506eb29df8c687e8490a6424cf248905b710ccab9c75ab67a82f9ec37464792a96c3954b5fee48339d9f6c115d00d16b68b3e7cb5da6e446ad94e45fafea58d3751fd7ad1286d68ed58c5089f7b4d06c33c3f2ecfca5877a6ded513b83c042c7d6f6fbc3352c66c5ac6c893c20af2a590b561e1c5176c10f93348ecec1378e29447e1f324e9248acad275f4997d1ad018e899914e18b0826aab3f88c90bd0e0aef8b54294834af326b58a1bd25c5e05f144deb3b1c6fa6b4209f05d13692bcbf9ac1c78ce00462b24229d7f18e9eac8850ac1914c7ffc23f14bf403a2c1bffc008bc95bd389cc858947acbcdfda99e68d0a2a44e50e286402ec90e6813e8ae5e9614dddd639a17febb01abc84e9238527a72c21c31cbceb01c2b2a2848e07bbacfb520f3a4c7e4aa83a83606cd15f7d554e25aabbcc75f67d799908ebf5d69d6c2c11065cacac3da3bf75a1f83dbb01a65b0428ba5393f9288d53f0322f5c875615b740e2a484feaaebf85ce4103a78ebd287e3885840b59f8e6494dac350306253773dd902b02b972e9ef78559d0cea84903f883c60e693ece985e5b7f95b002b6275243854e9bd360d9895baf388835ff317bbbb1ac4600e321b8d6dd908386787ad12dda0115f5247743fe751662847a53056fa0f8669d084e24a5236501112a595182b8a1538c93ff2b2c7d78d081b83a7f733098e42db0e962cae125b5d324e0fc7e45a65da335389dfc5692db3ea1d9d2434f8e6a32cea9f9481159473107b3d8b277f70ffbc790b76030f0add51a72647645fa7cacd304aad08094cc95b1fc0662b3dd5ef4b23d6ed93764d82505e0d8a9c579293616d7237e0ce44f6ea3514784665e6345c707677a699f694603a4398370e80da7a8b48d420a85e7ac569aac3cf478d74434024486e8d777b885f494245a1db6615d1841c5a2e74b869769fff2b9a2ed3801ab80b97128546c3a1ce7930e90cd1d5591835ba8782a33433e89198596b94eb75824f05f41caa7da7fd4dc45c8922cdaa6ee4924bf2da534e4ec03e37f547042b9419d69355a54b323bbf321558dbaf7c9260f902918d4ad29d6f32fa6e8fd5acf6f9f79bbdb8b0dbbf53186b4b2b75f17a6ee94a9ab50e2eab0438136d89b405717ff0becc4922efa309568ae6fcb0b86fab09df5343f8000ae71b829ae690872a3b2e32e04537916e158457a344911e246590b6d6a3518cb855399bb9a9ef1081f8cba23dea60bc427a1dcc88ef9e1816f176b7109ef5633552010a9f23ced8e683df7d63259ca569ec2303fef6503846030e5f5eba8355899257f2085a153c458d0c2d50fd3209e75da5a3210d423de542904955dae9eb9e1a4e61f0405a7bd87a49c90be3d7b5f963a05922b86eae98fea25f5067e037cb9ce1fb67ff503d760cffd68652f3f4099a141603bf123ea9b485ed39f9183271c135e19ec4d1a13878d7146663148fd6f4a6e472906112f006cac97e6bbabcb9d2fb1721597920083a49a444970fd4eaf0ea2248a8d7fff22519dcb26c9b27858b069a485a56843a0acae36361a5a155391788b9cc2f7c3dc8414cb6af34d1dc4416ade20fcd409edfcb74b9f05aa34455619fb17c43f26f08ac06ffe16fed7d099e79bd2a72331477cdc609cf4c8aff6daebe57095880a6a2510e34ef15f7b5de6f7bcd29198d8d0cf566c2d38951a85d9ea3e922a8fac2feb553815ff969a115d85a2de624f1068af36c8ba4da28671abb7a1811279f422d4c1522ca1167874c1242317a8b32a3b0e06f44b6ad3a9abba8bb36c9946de5673f672f26e7af59e48a1fa0f6060da4ea4beacdbfc05e467d54f153d8ba420896883339c4c8f175788dbca64d5374e9bbb8cd4abb0a4e5e229d68200bcb2c74464e04dbcb52b1033b8aa2a6dbd6a77575fd02f6d2319ca9903e599a34c85107054079bf38b491c69fd6aa651de4d0c5d352c46cdedb5bad4458ab5bec7bc368eb50cffeb2d8e9659fbee36e1e671119ce811901da52b36839574d14722b296d378290a7e14788959f80f270d831dd45fb0b8f5bf754c0c41b42efbf01be71b663ba70c7b6ba627498d82dd774d3f66df6ae1a212e1474800dfd2a1ae77547e6c23fbd9981235f900fedc81acf26720ff7858d494102451ae18e684385cd1a9236f8baf919c6c109d3916bebc42a3678a5f9e684681c1ad49858414fccf249c60fb880cfc5ffbb39a22b85f6ef44609ca85c89157cf8878e9928e32fffe90cb94ed9c3fe195a97b093248a04f7a6cb376cd77945e5689a0aadc4097d17b715d9cc04cc4b75283bce60f7dc7f68a6f235e4c69ab8f1cf968ae746778ca5807d925fa0098c907954a9f9185154120d80b94ad62dbd15e5d95c5b16bd714d0d646273a270f5ce61bf2a3095c59a33dda5235b2803ce944f0e83af83ea870d4a339f8382a308fc9da8e41580b8cf965eda743f7eb894de18d640f80ae3750b6ee27e24b2fa5f30771a4a7fc694aa7f66960ce15aaf22d7b9245aeee189d424ed127f31abd091ccfbf3e2e31977349d09dffcca400cc893398989d1f3b134ae51c5baeede84b2817013db01282c3458b633915e68677afe384b8d0844c9919f58b49ed4f721e8ce4914ee50db0a7441bd3de55e6c7b643c24114679bd8d01c1f65b49affb1de868da02f0d0f839c62c20e2cc1dbc2d4d82ea749c94cf7ee4f7657d1394d34f6e70f4d5fc2e8a4b5ec783f501571de33c6cf98088ad468f3cbf2ee8a4167dfcec1449cfa43e731be4df6815fb3c1e46d3c3ddec370989f9b95da3196f0d3862020da3c49f13923b238032519e32aa5497959f814d7246fda18b1ba65c0155275e433d945ecba88fcd64705cb9df1d2397e270e87129804a6bf3ade4df03a318ef2b05fcb428a18d3f1c063ffd5aa65539e2f4cc63b249f280501a22c53d0dd97f1e17ff72a47fe8f67f5d37caca26bac6beca95de76165281836ee189286a13f133b819cf707c552b9aa961a55d7b3ae12a47b576ddc729c78d07a02216189218556e3303a3e425a466649a8695ecd1401827d454ddfed25e25faeaca82c8e05c54576e4ecebb682cf6e140d7822b883a167c6a09d6a3bfcceebaba244568a46fd6ac5d4a8f154f935c60c751e691c14ba15299a5486b67c58fc8944280ea855c6419e459358a1261fad0056edabd18f9f0f44e1f095102e04b673f0a8e66039eb42b2e0fd6d87e54150bba49c46e8ad798537342a6f69cbde0236a0f063f06da74d9427b83b3207b157af42bdc3b5a635f8780387e6fcf2438a882e2e2e6d66fd523ac791afa799da7448cc34e4d0d6c796009ef2f418a0ce5527467ab3a77711e512538fd224ea7a8770cfa66709fec0714a6b8c8a59d2727014d11a83c815567db73231bf9e34c6180d76d1a836c3f2cff50536795f3df8adde65a668a0cfb7d525dc3085c0698389794da1f74f4f223df227aa268428477853a835e4613b0c42e47285caec842ccdf7a719b189a9673c9b96ad88154ed7eb9bb9847985b4042b42eaaa0a630581e0cace07ad98443c6e2301fb14a6ddfaa03b9e29abc6bffd8b883ceb703773476ff0533471d8c997da7a0bf4a8a14ab98f6280e5cf583d25e7869c41ef1036c4f48ece6c61482d0f850d648139a198e3bddd308bd7f78b254df704920253f27faafc9dec8cd4b60ed605322db1cb13223394fcad6d1eaf493dd1f06dda5c10419167e00aacb7d4a0ce655722b911869700a78304d698903eb3a853c52135513b0f65dc9d2c65c0b682116247ff968e5972117b958dc08c23cc58fff13e1a0a479996b83ce15ab66c4a7a5ea1a1d4e3bb5d8ed9fa777454b1f85abf256f7da3b184cc7276efb6158c0a3c73816e36c1fac8363218c6d001d25e521cc2be039ef21981bcf07fab65e671fa2a66f83d8343d1214a5c4c6d54c45501ae1a4150bf668937d0f6efed822284637f24d78ffeaececd8511642f679fe9206ea525740c66101073d438670c7ffdc87037665aea2ac2e7662d18ee868591532e1556189d8dc5ab2f0512727a72bfcd24890be7a164257e1dec523092a0fec71464ad3bba8b99674fcd5a8df2d752cc4d0f74a7bb4a807416b7faa0d94d96f7592cf68934c8ca31cbfcbbf122a169d4e61dc1aec2c5bde70cf6a0ab649f986a833166cddb9e05728e65b1b5e22ed7ffeec627b309a98078def214f58a8c1c74aeb287a44445220149db6ffb316b0be436e7af482d5353dc6014dee56d275df35a94478b3588efb2e9772131f1556e60224fef26f1a96efc8aa2c26cbf698cde028aa4404bca858b2c851c3b4247d8706670ffb4ec2f0e7814d600695328e68d37c5576fa38e05cdaf46849afdd5a8d63501ddd3b223a5d81cb49b61396fe1811eb3f4bb65c295232fc3ba7d4d435c37c4ee1d959bde46d1caecd27c73fc86678d986f7aae3a12f0201ab28a047f0fe70ab325a7b825568c2eb279d089959e45088ef333c4e867e72e5157451ae25d91cc0635ccac26adc492a2715b93de6ea5ddbd8e8685f3842258b7abd151bbe5f2ad4e0ba706888120ffa7ab4f55d779b0fedf74fe01b7f5fcdc014657c4c0b620a94f433e77650f214b172f552ddc5d498b284f672cbd9a5600c1053f17af30bbb4105bdde10d584121fb8359bb1b3975678d95def74a8ab50dc8f1d134f519b32aa535212f0366ebb94a15c9baa6c757b44d524136e1895a7dbefc32f794da5b1f69fce4691046fc758f84f25769437107003fdfdb1125e94f22ef5c5a8a6595813cb9513c81a265d5ad4fef52f887129c3f5441f1987c3b85f779726b07ad94ec7059e2c974cc0d97d075fa338b03b98e83cfdbb00a47736066f6d6f3ce59afd6c8398ef41bbc3fd05e296969318ca29661f8a517afb883b0347cd6b9bd59f2cbe0db36e664c6fb00d9fba9283cc6b2ddeb49cdee0371eeb0125c6f230792b7a50c518921843067c4639c06fc50f0a89cf317247acc925c8a928ef346f36bd085c7b7dffaeda7f495212ba3bea5d2cd1b62fab7d6dddad2049f82834c863321ae80b322e73e2003361c42ac786eb60a0fb83d9f61fa0c78399c4f720c747da2c58e8328a803efac37a779b064085d82d37110469b2177a8432b2ebcad4f15c2a5eb05fe27e4277fa6449e74b7e83ebfc7245ebf0f898b6018e2b0f07764c3d03dcef479a83069c902f46bbf3c9eb7371d6ff61003ad452029eeb0f7b25b2ac3f0c213924cff90a00b63c5cec74271d935612b55332cd2aed879b0fb0e0b5689bf2e455bbf0591405da78e67d04aa6fb8c931f0db2c063df3bbe6d7d198f625cd76a801a44d85da8a837e6e42d3665e672cfd9ec973fea59a82743180d49bdd36f474ce87d89849d6fd37e078e7b7876b3a9803942d90c215841d6338b22bae3fc8dd7d1116012ccc3383f1a149ff70c317b15000da591368afef9429e126af151a561561cbae68534a3b3ffd0bdba260d532c8c2d07c4e4eec8ed27716c6ae6b27003a2336e66fb461acfb1e24a3a1b7a30769fd631b0c108600436f2d3a47c289f720764a86a7ae9a12f7ab7dbae15493607ff96fddca688c75453788840f96bf3059c4346576a60238bbf42a1423367e46f46570f10deb35fdedfa072b0c2c14cefc667574ddf4fcdb79ba3e0ec98287e22ab3e464f6fba6b0a6a299d671ec65695830f9d82ebe7938c21a824e9c4a973f33fa8b68919043332fba2cd488a71bb67b0fafadf4ced3e21fc0575867d7cd4977c75ef99911b0cea8cf867e1964c01a4f47e417c197820213cf01ff55d1f00b395a2730b417fd1769d489a26bfe2d5007b8bce3ebe1f8e5743d7194ff21f6323062736e5530d02485147b5d216794c4fb3bb8b047b668b4455ff434a6459fd0e80bcd33d927ba239201d06d11f22ea4bed8112911e6e29225c043385934070eb8b99e62f8c62d1fae921da07265e90cce4bf9b790f152dcd00f68c982243973146c93115af0ddf9798ecf41fb985264d8eee143b25164f833905c790f022d50b28418315bf2aadf39a8c9cc528b6023af59183a0a81d27301d851817c16e8ca7fe3ecdb67fe67800a908bbf90dfceaa8b2ae34024ab7f35babecc88f0ee5abdd26287b009bc2750e490b7c39a8750a2e3671cdef46b79bce346581b0008567129f710d0a9ba03a03c8ba6d42c7e337af94f6ce0330e743cb87d18c2546c44fad5537d21a60d4c68270bf6e57752198362c2ed84d762208065fa741618430e4a3cc6aee5be6a1b7f945f39b10940b4133f4c3279d52ef8738db3b8bf3e79f58cd2a49c3fa09818fbcadb7af1fabace8070b0cecad9002c7ae5ef14024f5ec7a532fa5035bda2ec63ff767019afada69f501755bfd758d79721433e8292de62b2d79e97689d10100235a5ff5e2d9033659c0cf587ca1fab917b11addd352b6ff91381c7dc98a7c3c946fa40976f4d82d55c7c944fb77b7a7f7ab9cecb2a3de19fc3cbfcb59d517b4015b6180524d66ada522853309531f3891f0708ce36c73f40031d3651fa21530545862e7ef6c8e1a3dabdd04650e6ca582751e3ccbaff81a178bc6765a8ea3c4b25787bded670331198e61fc6a8a9984ebfb9d1faf6bc82a0ed92556d3cdec860b494af75066c2a86694eabb62bf679589dc12f2b288a5308cd1648a457e8ea094d9426ccd6ee22317daf5d4f6d73f15f6de7b75fd733cefad1dbe91d993d440495c45595c39a7a2a67d1d971c651629a34c9feafd0bd820bc21d8648b57174a6d1f65bc6641cc77805beaad004284f6f37e44707482e53a97e47e6413525be6643da6f6fde8f0ec919486e352ca695d76aa81cb455ddb19d02fb1827fb1bda2af3cfe36abfddca703c1e7173577776da7512ba3a4a49d10e77a5367d087aef3d24592e06f6ddbe5431c53fa34aa94994ee1ce03a5f3e849ecf3555e55ac85573207baa58a56631b95d1aa2d7220b4504da2c014172bb5eecb88e3ad66b6d9d2d137531926048a6b8eab5e224c45d22e816f6da7c394e353a9efa1638dbc4c106ed6fa51133d8a81f15bb99348dd466740aae6ce89bb50c0f4f0c808c9c03cea1d18d1d3a2b9bda5fd5162a6d5390324230581fedb23b2e6ea4d4bb8454e79b60ad49968c1b5e4d09ec785838f48ef109f22713aefcad2f1bbacc69e62e488bb4b1bcabedcd2f53579c59dc61dc11986ef20d1e3073953e81514468429ba5500a258bcd1aae64468930ca6b017cc9d2b4ed7b7968f439c7d2b67e1056f0e718b78334b941c6591f50734376aaa80fd04eb3e190b140c7240e429b977701f642e0d43ef509489633b76706bef5f9d4345e25915fd9b946ca52e0f7e540a74d1286eb0b6c36325e4750f9326fed21dc8396ac95bf07c97520da19a6b0e0ce7c0eda9367858e1078b46ca46235ee9364c1608853a2e8003e334a0d8207b821e76c3e39eb37b5a79f6574e9e5a1ed5cad4e09539d6c069103be37f5a4c192c1d04e88f78ac3a9647485ebb7ac4891d58654c0e9c8714aae182363ec9b32538ba5ba42735f59a414255a7e2740cb13aff814141c380c678ff5e61d32476a3c41f6e252fdf74c5c886eddbb2202e38b276f39053f0db0ab7eec7ddbc86d9af5690057dc3d56bb20c2ba0a63858ffc3049c6a3dcd3a03ebc95e03ff2a734967e29a8b9c3a8cb4929de3c34594edd1bec017f00ded0ef687a292d1371b47c88e9d33e97edca74da5f0bee8c7dbd8147ee67e4bd32d79ba06a2ea2ee91e8dc6075169e2e5781d210de05517160cc43025ef7fa09c71be5ee67755d73eeb0cfd2a95af547fd8d38ef09e68a2ef5c459d78763d2a013460f562d026243432d136587b4e0991ce5aa2fae6dbddf6d1f0c540c39977586fefac1dff5e482d601e71222f49d1bb41c3f913241a8eda1ed149e4494f2ab60de55a410d8050eb027cf55759dcfb3660750ecbc8d5f3d912fd5cec99225d9bd1056dad9c56901c9a9c27c65398bb86850fbe1f53e17616a2f1a5ac3a9719dc16bc52a3016ce704ccf8183b074c65674dd6d2179aa3398154b26a2267270f6a59c942d73d83262c743731e4540ae8f88ed0b814b9f0add138474d7c4e500cffb3f122c9cc3ad70acb03cb9aa086170be18218d1a25279292bc526ee4d30340bd62783d49caa72ecf8d0f10fc72edfbe6eeec178d9f852638e3f750f380af2738b82725cdfa07066aca49fa8d78006e30eebb67d32b132729e378926621e13bde0f1bead30b2732cb533977bd549a485ffd370c9bbd4c66548d5bb8d7a6098ec7697940d5f9da8c1af00f2a0ce02f2ac117d15af7fad45d360ff56a0b854dd3a89f4baef08ff4ed8d36d08217ffb178973a6b5548f22c81ea55893b2a5de2e82a19e2dd9f5de29318b00ee9995477a30c0d70ac25b9d37ff2b20d03a8d13c3eb4ab90d746c0bde33df84652e647332b86ebaf1b03f645f074d0f6c13873f4ed7c8cd05b190fa6da3bb50ea9d073c274c6252920d183a44e2f0f052e8e949ba8ef573c3286b3e52ebd0a3d18c5b5749a30697b27c07cef99d4d3d61841cc0907b2fff21e81282f0853170ff438e8f5beb8a2cedb54bd2390654338f6ea5fd56e7a32fdb059cd50d2261ec208bcdf9494efb2ab755f124e5151d101e641a4bd7711f1dc80c34ee376f28ae823308f0381481f51e14f886048b8e4a96a7eff1d75f35253f835d91e1fe2a44656fa20ab566837f09502b30e22372bb7f250b74833d2edd2555532c65f71cb61327276747f9737f793ad49202543b2f66f9384f68b645f94e51d41c4dd967fa45ade9aa2b4f816e1d9e4b4077f9a5a283904acf88a2578bcf6377dfe20c58b1ac33fcb49c70921a5c2905bf9dee88d3bd7622618cb4fd3136c37d4f60eedceca026d18fa14d5e4d8f9bf98f63d0d68c924b371118f2d0d640c21435a2fc9741c6a530e5ce750972b2ab17ac1aed77771c42983c80af1b1a4a1f0d2a270ae46a3cbd540b0af635d9581b7a23541d54ab51e5dd9481cb8be5d975de03757cd9258d2b5b45dcbdd5fdda22c43e3750f286c4d8bac658b02dbedb14da9a0f42e06d8aa028aeddc502f5523dad90c2b15e1df844c1c55b3504180bce28a73daddd4701d093acf74433ecb9e3cc42fd9154a83f89b4cfa0512bf7a8cc87439bc3515574d8c1162e0394aaab34821d15a80325e0227b94c044b8058a9a3ceca67fbd8e10e4253843b036e8ce51acc8e8faed44ca45086693faf045efbc087bdb6147a255eca826932e87e9cce719e6cf3275616c7eab3bcb5a9424563d17b081b3f105e31a59440df12013f31da87211cb8d1912fffed061079a3e5f7bd278f673cd4000960d97a76359f911bd044e8f4b3aed90387c978bdc43cdf33bebd94430b263fdb2f5e7419cb6c9e4b910054800c59818b71d3f8a802ec45c6b1998744ea865084ca57c107f021cb0f1bb29382bf921062660c70a23408aaf51dafbf5ccd6fc3b5112e8717cbe3bba27d48fcb0f01e9e429874cd53b45aa943983649d3f58ba2f87af08f82c53f0c5142b47af2f26616146560f6619be51a7b9e40a5eee9596e472b6f481a24fda7840bde25fabd39aed6e0c6f5a7e9daa8b242c8bf56fcf4c0c6e0ba4ddf6ed31e06497f25c8462e4a2c668162680080652010458859432db01a7b15fcd70d0fe8ff8e5a2d87699e3a4f972a04dc0834ae66af9d29e027e4c2673ca573ba0461c267e47cf7ff4fcfad9bb9a63810f385786d6284c708aed0c4e02fb5922a00d1541a9223116accf0ae8676a05145ea74f9c8a4b69a4c925ff2ca96504b9a6797177fc8469816f803da7513bf28755009eb35a20de833d27c527c3f55a3591ec9a428ef6482cc1ac0e1fcf42dbc2c1ef125e3284edf4734259696becb3f1a5226d89f568b971651e72d58d654ba7b02c0c6828a85e99944a38d237226ead38e501398582e1586c6f63ceecad13f864b28db00ed188ba98493236d0f2379cbcb9d746ddb0c3e7b43d3e8ad90b4216744964c8f79c1883a0da1e0258d204a27d3f728d1122746d60ddf71c1b603628ff6dd4ce0934bb9f7882bcf936f53c4de1e58ed7413c3c4502105826808608430df5388771a170d6c127bcd762942b9662f3a945c41d101e9df0187038f3417e5312e12051c91568a3b30f9b6bf4cf65388346aa71428e851001f3ed0ec2086edb2a62ffc08a5751f8d7bb5bca011f5fe1671df5ea0c6b8a81509d7d2f9b2b2d17f3f5dda111f77100848de2053b3eeada6cfa77f187585b8aceddba3847d647a76a4703bc9fdcb4e1ee894e0a5f51b97a4ecf7467d28b50e594d2194ad9f825dd87802c75f6c04d29b047155229e08fd79645dc17b84b5131d7b3c0de842e5fcd48a3ffac4997c6a18157e084de2367115094c95698d803d2e7e00bc2eeda1048e535ea7d66df857d65323e342de9e832b1d6987a8eae785481fa219f35c30d73d22fcfbd9fe31ce0b5e50b6ba02083c2318c78154462a28548363eaea6769685a7708198feba092c4091bfb8fae0892ba30e2a694be0163591dca4bd000c1237f1274e0109606b9f35429d098670e532ec6ca80640eb61a6db8d586f79cbd21cbdf69408913473f7f2878e4819d4622162432dc944b6ef3e6bf7c4beb92fd8462ed047f204bff672217cbcceb1324d68edc15b122e3054e3744600ab190f4c2e3cbbe8f446d6c3e3e531aadfb4f5cf9a0ec3ab68543e996d5c91fd1e878553b322b1ecf70996279a8f98dd506b5d9255b9eef9d9b4eb89ade274c78a5771b8f033b92ec56b10be9aab0b62ada28d6673ec4d1d58aef56ff5bd5cfb4074a025be1e0e3acc90b6d1db49e0976a66b95f539a24f6f9e53557166c2b0396da2cdb3d3afd2300cd83d426d3917709d06c8df35b394879942cd898904a11bca21a447750ed8c50da725784663f67b4af5e097e11b8db43d7e52e92ec4f3680970e2bea333493aa5b16371c85a9b7c9b12917105d981b2033112da725512f32542909300a546e11fde0928ab8e55e040985ac9779776ba016a555310d639d899e547e70aa487672bcc6f10ac19482b6e2ab135c69d01cf09702dbf983e889630dee12e4d485ea8b4b9d816155978a25958ad3388ae6bb6eb65b7349886afd62aed932087c3fd780225eff088e38d4a25750256d211c55129f061db35ecd2361c5dd046e4baa9543f8ee76232dd6616b1d0b283996596d7e7987489c17736cb2d8406443e134a48a094554760dc96511aa39e7cd606eaf2d65b427f46e071e373461488ee3567d5cfe66ba2f1ac14da808a182a56c9684c3d4964d6cbb3c43ad407e3bc9edb66b92722deda28ec0f26d2cdcaf279f93c2e1f982983c98aa04a355ccecca1818ccf93551d6223fe02136ca2754699847e1b51926b4e15a114eaf8b4f5017fe7dd26d525aca87643e629bdf3f9ce21ace8a31e382293e2ac2bca2ff029c4a7faf89c0371aa564243df05f953c18ecd23512039b50cf723637d2336ba90b23228533c089d3a048a2474818a1e47615fb2222db1eed956f01c9df683c9140afda15ffa5f749fdd8abb9a7c7181a617f5d1a82ecebd5f4be6bfa464279e9c97b633d015bb5f9d71e641e88af3a2530f13aac35f8873b7004eb261e0f7f2039f89e5d5e8447821e5f3ce5a940243ede91f3238f9c40b4d72ab44c47191b7f4e98231a0c797d5749070ed99385118ffba4ee253e82b7578e3e8510f62ee9ac410216cd4e9895825383acc0c8db384cc1830c7896ac5d2c8ac3b167e750a439f7d59867a62153636154d73d809c2e7b371534b112b45dfbb5680c774ea30bbefff5fcd8f62bc3d43df98544663f15745333d166511ea7a1b970da4e2b27442cb34538e20236c7b3ff97c86c69f7d39f84cd8268cae7ab3b326a526baf0347a4e668a9042de3081a4141adaf8e2a6b9a394b34700982dc3f8d4ab1e29be1c2254aed7bb7bd98ed46f74a4f3534dccfe782de49ceeee1406b77978cda6559b004043f72960ebe5985f63e3391d43df05ac02da4abdeb64dba6a90d02d9b043f2cd1204e85884be263e811e205c6bd285ec5c8cce88df0d0eda6f22e0fe30e9c848a477afc23b2e0e0fc60ca9f37601d511a8d28d15e9a60067a84b825e1386d20c1faaf3a2c8338ca190ae468ce394503e2b4795624345c262c581759aa1e807550d28e2d98be37a21813235aa58289f47cc8039032fc1bdc68d62670e45d4d4580376a9727d24c0ff2cc0512609b4f47f27e36b4d6d0db5ebcf2165a70e73ff0078db01e8248a8287ca156f8c35fcbee01a30ff0bd512516a93dd271b12605ba2876d7e7e9d36790e8d5c198dc9ac6f4169dd513eee283cc5bde2038dc8f5b325d6bbd42d5e82f1450b175dca110839c53c4f91b06d1661b60fad73821149d55b933250378f27329d287ad9812b0979cb9b60f70fb5f3d8f28b9b4110ab09b019d64205d1c613b5b829151f28ab5bc8e8fc5225a87ad2e19b40bd79e2176facd120ede0cc8599084afb8be50cec792016bcf549463dcdb2ef5f6355fc3741ff6a305495d49228a24834cfdbbc76a13b1c3b5899b3ef7ea611d7a8638247bd91c08c107b7fff3a6b55c07ffdbd3845387d2a5d3029320ea313e0229a299fad1d4e9502b292a4a478ad94d80ef656b1d72c85d0dd345f0b545d28fcf168992c3e5b141537d5c284577ecff155013d1a88c22bbd548d2106d8213736386eae4cb67ea42c07f5512a03fb337a926275ff7e3258b22a36c432d16188ec4585acabdec8e4b9bf525d3b9104856d69f9521ac46c028a8c85f8d776bb349f01a07f088dda4f1947b0e5c7bb7c5ccaefa57b14cd51ac2f69d2e5db6e209d6ed2622579d8ceabb2267c06b24314ab43585ff412c8fe0d8d1d56e847156b44bbd89d7ca2c6c972be86782f43526ef8d2ba7a7d5b6af4d23530b9ce32c0d3d35b7474d9e7f66fb9160954e80dc7e4d471b3666084e4a3872d718da1200ed6ba31e6d9bf3b6c6c95209ae2db50623c0865432cf562b582112d2bc727476bdf4fcceb28b68639a6b8f7b8db85082434c4bf7a97b898d246e01c0a8ee0456aa1f1d5aed9e6f588f8482de0db866a8ca41c309dc5fa55499f2b88fd5a74637e324a405b8ce342857c4789f3440f118284116bb88fe704cb7cb7752b27b575efbd31ec029c49c5e5f503d79a05aef8d816d274feee23edbbd5f44a193b4a28ef4d16763794dd5e280311062f780ee9eda36f77b4492df128bf05b295ac3116ec3bbc5ca1bd04e76cd2f418d56facd622c7919c33e1a052cf8a8255319bfea73ee1864ba9a85f95e706270115825e0b8e8db4af0e107e8bc591634ebb61a7f474e49d01705cdf7a2d48c6eb09dd954ab281c549474e629aa7208fbcb1e0403b04f847d3ebf766265be0296cba519533b9961602b514c81a43eb6bb5ef1f5abc2d641823a22a4ecb4540ca45422167c3e4928d6ee3cba80ef7d89ec97f07b81cf5f1ef2e87a596be3fe4c9d8d587b7f38564f1dc5b962202d90ce9b2c228ea6228989d3c5a2dd18e14f659143e7be112e67e136dc23c32d10c55f7ccebffabbb60d2bd6e945cafbbcb49d2a38024a1355350a55da8ec3b2380001e759292c4b52275c8e9fb5066ce88d8968b8e36e0f8d8f342f21490371415dd41fbf266c2964f33bcb7b68d6fe4099c5ab279e81f2dee7e393b278b53f21e895d4051202288f110bf37991c7f47c79a5f0114a83578cda915fc389f31dc0a2288d33b6e10c7a7c18c55dabc3b16b087539666f5ce3cf6e55196849a1fa5726f40ee283b309cefb0cba99fad6c2fe3eff65193bf5e05349c641559741b509fc39cad01897fa283c660798072483463eb235169d8dc710c293f275374220746cdb38da16c8e0d35cd60b91befdf721bee1e1a048affd9154e7fa7ffcd2ec343d3e64180396de829cf3f4519b299bbea338531c5d88362765d168c1abb5c93eaff007c94329850a0bb6d1178f853858fbb9632304a8afc4b99a0d554b56e14f518e17d4061b514de2d5d8a7eca13a015dedeb751b6b10d3eb62bdd2928376232486a3bc3a732e80d6d509b8ea6d82f9b5a14748446ca38d9118e2538adc1dbf0acaee66616e5e9d889e9838ab1341e115e687ccd7af37626e2a39d301372ee4a293ac72452fb48e74cc43b7590e2400084a511fda94297d77c680968aa3d36d5e64f8219d5a50929d4fd2e114f496ab2c9531ebe9d79361003dbf235732f2174d4c95ef3450c6883955ef24af3e8b7be2c5c5089aa06e8e10ebb213fcbfe1fd88e2db24e876dda0b87a9311f8bf4e317cb46bdb864b978b1a85f16b454ac5dab53928684af4ce2d3cfde1ea8d86a49811494da565dbdad936f7bb47214b0285078dcd7d34f89bdd1e19ef5b5606c3ee25865d3bd95643e825a71f5366d3712eabe32f29235496b8aace2627309e8a9d7276e7ec43b1ba0e3ecd418d95d98313695cbd9a3de1ea388e344bb02f2bf3488936626d5508267b6e2837fa185cdbab2b83f4570142ab08ababe93ea12195dea11af315f36ac73d9247aed30e7ce0bef63e00316385f6ac7f49e6896dcabf41317b853974b6178f7a18666a3da04e5ce86dacba37a902ee6b172ece5181cbe94ce3eadf0232ff7ff8e0035a58216117c7134e1e2ecca4147cfedb3c6025ce7a350a6e72aa3790e474ed818801c1f9330e20885607ff5a0be0e9f739b506c1de11a0697fdd5d0688138e40134d1723b3922c73fe2332a9d1652c24b45aa5722f42dd6106148f1dabac41694bac23b6e9591e20c5ac345b683db851377a42157383086a9ba91e6b47e5214e3b5fe9b218b47b57c83c67dd86bc54a78faa4c793c325a79ddc4f1b2d557151fcd15b07cd43d9c90d74e8149c1908e41984c899d224ceaebe8f160ff38f9e113bbee1803a54d2168edb6c5e27f03d6fb2b37296e57a046c60c1a122217d7a30aa398bda3d58aad7888a04f490b18bdf954584d54951708514a7c10d41bb3829e5150c0f5b68fc1312be1f02838d3b3ea07a0ff1a945e6289d56b971026942fcbc1f4037d44b4f73ada5592d6ab33d3c6a6b941f12d1a010d2183ba87edb3b332d64daa1409be7a747e341be70bb9661e34b63c2770a9e157c72979d39d94171e22316de18e66467fb8380e7ca58908ca1b73785eb94bd890a71e40c2e660c26594ca46d13bc08cd9504004877336f0ea71050a805c2a8f0922c735bf47f2800a75c3f1fa4a99873b4cf76ae1f3ea71cd1307378ddde747d0c84cb006e82a54e9e2b2ebe48de35a13aa41a2f6ac6feea05c60fefa871ab57197b2ac78d9a8475cbb29c224a45839f47937864338d2a9f3f65115bba0e7292dbabba478f19ad3ab79ae211a107859f2cdadbaa45240d1b3fb7285ac87a4578823a0ba1f03c123f50860996d113a2ccb0e3331a578fd50a2e8c997a07d2eaf27cbe921a7d69d8060f3e73f9ddc577321e8f45d974efc8757c64bb1ad1247c90973647d7b83e6521ce9a5daa1310e0fbf289ab617b7fcb7fb4ee41d3f3e3be5a1a1d7be165fcf977448c44a835248b1d4698a0d0ac8b0f40c9299c91239c67b20874dd5eb49952247a6df5e905ed4af01203afb7c57de49012ac5a3662478d0540981904879c668a45cf70d46c2fc8791e61b25b621862978825cbd5fcabf3140b6de51df4f4a1397593041522d44e4631afe20493bb0aa061404eac15916ffe0e9becbff5fa26a4841bf44f23612e287e94d91b7fa40baa172fb8ac23fac8911825a069e6b1771bfc5e07497a4dcece5e9ca6aab8c1229e34872fcfaac163b925dfd22a77960cc4b8cd1eb7a0fdf45cc5ebd92523f02fe7e3310d9f1f6c4455aca99de7299c003b4662bb9dc39812c58b7ca0f954bf63e72168b42fcff18e778409d3db48c180454af231a7f0f144cb18a35f3c2c8fc6d91569579289a0040a29eec37fa38a030bb19f87eb281d72cd0cf6834ca45c4c87e5665062579f5685c57cb40fc10e35e62be2a9eb866df4d78f1a03683c1e046b9e766ef1d905eee12a35b658a3231aca4de77bf74b5528e3c6c24df9356f1c82c461febbd40d9dd45821c5d4886dde26c9609c609fc33483b747eb4a86389098a29ba7501694c70a2c956c2b76bcdef9a01072ad085de7b09369b9973a7db97e169ab7cc67d6fb86715f80cd27e1bbbd1e3f05ec36fbe31d514d3548d42df78c34b9ab5890d558643cbd12ae914f884d2deb5a719f7a0975864a00ccd419b1d3f0b67036a14ed3883522d7b58150a5d922e1227a76efe2b456bad2215fc12e73e02c45c220de34e1aba5a4be3ef2a84546a933e95840454104d9e6394d108ce40099a20cfcf9891a69dc9f9b97b05e4601633c8476a9a9e07d3d87bc50d700fbf771de4e57b2ce82602d9a8fbd0632c26bd93d525b9ba46b7a48ffb841f29213b1102a1f7d7d7a0b4a17fb395422296571938b96229eadc7d51c48e38ed460a6622c274eb6375dab0e4b140ac600de3b053546b9ab3535e0528f2a01c10d64e35749eb231c0073ec54ea3e6ea34243de23c7482a3e76cedd0766475f7048b600ea23356398f13bb047ad561edf52fe95c888971580a703ba0d036b66a2eef052bb29f644cb0bd13117c9092e58d44bcea79a8cc21043d802859d4108baf633029b025ea6dbede6850b36afdcfaad776dd936318372a7c8f69dac11c0afcdea03baa01e792eb7f7476ef5a73cf0584f207c4e6585295c73f8586ba2fefc98911874a3f781c664aa010cd4906d09557c9ef086ecd111258d5662c07cdac189386eb7103aa4993fe7d48c1e5c17489699c5084ef0f1cbc9015ce84bb2a87ecbc61afb92a6c53761ff54b8fdc8c23c23705ee3f6432572ece8d6d841b618c54e68bf715f31d789771c6ab3cbe7a85378aed74f64c8b69878bb7e0dd219be9285ed466389e4d5e457ed04c1509682f8829efea972303ce3b794608a60fdf8cec2517a7a887964c1013fe39dd5c4fb371a828cb87c3a2d7fff35dcce68dde1223643c21c986c62d7e9fc003e19d1764f9844af48682e64c96fdb48fabaec76ec69eac749ee9057985a8f5a7789fb8afbc496fff9eed7c40ae4e4fd91627614a1271ea93d17bcad291a774ab4156cb8cdbe7f66d8bf60013f7c386b6fe794bb8d9409984fedf8962588fe5c9052f2fd9c7d58ec0511daf02184f4360e3fc2b2bcb6fbb42cfe12c274ba08ea39e215c2a8ba69666283bb58d4afe6cc52628be5c826ad08e0ccb49a2749c7bcda4fe3cfec22a3ff4600b04787ea634380af06cb45b507860cac631602fca1ea508b059a6907d3492a310aac5612fd9513bb0ef69005b7ada0e5a5fa8634fcf7e8262bcac097c3648626988c6965a01b06209f2564b8518c3fd4541865f68c52891c239257de0f0f9fb6fbf6b492c7f7aa23402ffb43bd3fab213e71a9469e7421b7e56dd86e877a867c62d17d18110b030c6f366465adee5f40d7f091c370ff8eeab7b27b2d4dcc259009d193a0764443485e5a6a88c1bbb60fff078a1c58339e800c85cf6ed5e2dab894462c7923ad27010dba41801fbcde12d0a71a4849f30c5f0136742a2f8176dd26eaf46a736d0d2a3bbd75a432323155bbedb5693bb6e8ab7042fc1294aae6e21cece7f8b359905fa276d33b31a45ec391f21ea78aa1162bf75923908e2c36366798a4f998987614a46209f16cf9f0f3eac34a0f014990e288c8bdbd52b4163c277d560ebbbec65aa7870f298f74199815a63e5f539005a083a3c16418d5f13d97ca1007065d147c55a05e110fef7b48bac578e950db00e63a54f0a993b65c94bd723cb2e91f2fcf8142425eb1712c76864036a4489a21f4925e05ef235099c9e577b6341b7718dc6ec49304e53cf15333b1c90ecdc49781cf0ec84d7ce05426bfb642d6bde7d56080820673046fdc61e842ac8d8ed2a38cc228de95d9381e36c35cd04323893c919e5384d9b9dc1f3bd673bf5aabb0c8558d06c5706caea1057c6748f652034bf300e9684d9e38f6427ebfbc1316ee5d1923e9929a3ceef35bc4e8494bbd8e4263d77b1cc20ff49451c08a84946c6c075f6e58877955b9b1d520eaa15058c0ac19b0629d301cf175e6148395cd937ee4bdc1c43a47e2e4a9ee3052c45016b0945b0f34955daf03fc178bd1a50ec37b5535080caf78a02847e2d6a83b5e1b87fd6e90662436a4305a40de635b2cfe442c0aa2562e8256c2315e2d0373962a22b7b635674ebe679c179ad42f62f204e636ee19303bf495da831a497e603d622c79a170cf8e5414134a1e91ecec01cd4e01d403f619085632019d419bd5edcafb564a2ed5336dfddb6c91858687b5263285702252a2ec88cdea6393e5e67b2c7916f37f77f71c239e9f94704af703dbdc187cd00f8863bf3dbeed8fd2d71a341208b155513ec427d224dfec3c9ef3a7c8f9a2b2039e49cf6525bffc9205a6de2e62edcb34ba553f99f939ad515effad3ed9a85055bbbdb2762fe166bdb8b164af26e09ad07a7bab8b4ca3e2102d252ca05de499e00070ec933bc6ccef978412e3b52a13c838325ebd4e8adb065b88126ba52e7bfb0356a88a81d82bd155006ab3fc2f45f6188d515276179144869e461af097eb4cd4deb8f1b66e953d1554a830004415c3086005c11c8d46a53061efa0246586881e363b69de41039f364f87b8f07260759c6a2cfda29dd1570251d1301f22b81865fbea79d6d951d01048f309f0ec4b8f1c44311a53fa72da99559ff4a1756e420f4d0a8995b3581f8614ad75e1db35c4a21dbefe8d7ed1813fa989d5fe71039dc323bc58ba1a3a2f1ba1842bc2f57ac0a4e6e4be552e756f7dd9fe5e9c21986de121ab14de086a4e7c3a3d02997163507e1ddb786f3a32e92d26585e8065cce5dac953898f33e275b7be7fd69192577db0e68497b6b61859ec4e321181bab87cd221aeb08e77c6d8301d3ccc58d0a1e59ad7d5e29eda5741b5d333ef1b0a4fbd04e6e31b9340a52f137ac541a9ce999efa216b09acd596e8e98ed094e1cc66a165690102ea4232cba8e8959d8d291799a8dea49d82778e1254937e10e8e2094337c8b93d14370b2be3a000dad212ff6eb8b2cfff35e0740640e91cc0b72963792abb6c671f8b04b58208ecced968f4dab48ddca5d6f8bb9654988730d69f6477bda0f5d6c92ca6b8e8be16075e455229292303c474bb5e887b4286dcc72a23524409b17b2bc3da30661ad5da591cc8b01636ea39a0e4c53eb8bef1a5a5a39f5a05df11c8f8a5776bf6edb6d8ff9bc2f25be8023976048ac71759151013bbbea69cf285392afbc1b88fdabf432a87fb808a2d9979a7038e67823c9e017782cdd66e2c6269676cbe71e298482202393dc7afa5f58ef0b5de3958e0ca3b39bfac100f12a5387e2b6083d130d3fb1da4f7a725a7f87569233a8218c481e20dd0f02aaf84bb8c85fcdd3e99bf388ddcb95055ffed822c6e609d76b5ca1594d9cad58268158d3a6d07c29c12f978be461db73a6cd0595fb77da39fc89555a48dd06285f98aab2754b1e0df6e5e1044ae2101077277ce002ffa12da9a529b363112f97f8b0ab9d1cc461ec32178e7c19ed0c4ba02f6c2141c1888df8b94ecfa113ec01d17481a79ad78f58a7f646bb1b791a4bd9e5c6009b635a62a6f7ea7f2eb031c25d76c676d8f36d4ff00287bb6cbefdac3a5792a2a3a98509fe28b7979203d6a94ef6f91aa04c9ac9d2671a9bef7ed8fb69801879e87211f2500916d0676040c1c74641b4b3f1a8cc5e86d85129a91cbc7c06f825e95d2a4a45343deb85685a703a643e5503fbe2b708feb011ef627182585e8b96a977d7d1549dde4e53255504a7ec2dc5636c37f366094c2e887ab8d245aeca036df7d600d2957e07acc3fc11f44d4423cc1654a50a3564bc326eac930c52ec3dcfdef24d1acda74a963d64986556b4a04669647aa8b7bb65d424846aaacd19a410681aeb7b4a31fe35be581ff6a2127da40b295d53fd8d6990d795310b4148cafb691a463995f18fccc29444df7b9a9fcb64e2b7b2523d9387f4937a2b1b5122bd87b694af483dc77325469226d7bd743812a2f70d5c95edf440dcf76d8e85aa69743f92c95abdb0fa94b74e6c6e05dd6b06a456fec70ed643d0d729bd74c9efa94dea56f1b4125df5c3775855bde1703123c37550a9f53f43441c1bbf9c78f7325a6ca5be82236a43e7fb999bcd8dd92a1360d25143805d9871b0b84e06fc50f5a1f40966a4be94821c78e48dc6a7322cb4ad2b8628846607faeb9bbf6b6fba8959d440b26210b5fe9e3db67882a055a89a2a0dc7b3569aa78c3d660dfa057ad037510fb9decb69e3c6b469873a4f69a16eea6e48b6353ef92bb62cdbd6b9847570c4f2d98e34151e705f1c056c0f32f244f4de3d46748d5a43cb7f04fd3658bba6d866ac1c84fdeb89801cbcaadea1e828c293c2500ff9d4a662494ad1cc646d8a7c54e626a87a6ec249bac47cfb95069c31938f5b8b78e3fc7cab337ffd2eb3f24e1f1e5512381b7b5461af11c46bb68c5588bf7b79b42a22f64ece4a2976bbcf2f216d26e92af8503dd7e7bed2e7c59e90eabd10823796a8d001f1354ac4dd9d5b9484c2d0a8dd5b48946affd00f624f36221f12e2652aa983ff1019cbc453f9d8837e2bd0f2a82329fd603fabf1c0081fa75a239824e43f0b44276f00b16cad35eaba512892ed5595cc050d0a489933d6c9c71447dc778031ade2af5005270ba27ce6d70ba758712305113b84325d3f1e20598e56d0b93f894296597d7899907df63ec805ba5f29eb4584a0bee310ce6c2a328f90c75c4fbdd69465e2d12ed141bbb28bd753f4f7b3ffa7812af0d5f0e6dec722e8e3ecacc598301c550097abf6a6aeb59e89e61b434cccebe82e90fa313b0a7d091ed6a0ea64db656d79aea2591f51bd8ff5e40a7661a499efd28f6e96ce0b63d9d17c8785b5ba0608b6d896c777dbf1ec44dc73dd6c604849805fb9be25b964bc2391dbf3ed138ccba8469463aa301684678c6c783f33673cc278a79e2e79185c168a5c5ba6195afb94d46ca6cc403e4ebaefd940329b254f6d44174daeea681bfbce48477f0f59b12ceaf4490506a0c49969c2788780d8fd29ccdf7aa40f357e337faae78d917e1eeb8e113eb4e276f2527f4de193a403f3571b14694bbda1cf6341fec577793f4565d26aaa9dc45b5f3fe5ef0b6da49fc45d59dfc1532f4bea415adf29fcfdb9580d560ac45918b1c10e80c0f4174b0ce09db9639775fb818cfb3248d303102aa718cd4c7b950d8dd1294decc3661a446270ce72db0123fb4c71115821f2be16cae74b752bbd0376a452aff61a86844b48c7fb324d2ce777d45963c708c5e572cf59670a2a656869fea379aca0f54ff836143fd94cb8670421abada711cefe07ca9b14bc7c8a6abea1441fb5d8ea58be88dc7f6892caeb464d7dc6009ff4ebbb8e197b69a0d66ccd71c1fb3770af0cc1941b78da4744e94d38773b167cd4a37273b71901b1115ea744efd7dd9fafcef6ab90d29567ccec60799aa5c48192837141f54ebbb9f3e2dfe97ac620630cb3ad5c3a179db84e38f874eb3d66950d1e224ecdc3c6170af1fc67b265f69e2265c2e8b3ee2aca1fe15a033409cd9f26bac7be4616d9305b9631d2ef50b0f9adfb699a3ec2c6d9ffa40ff68df5ff91eaf331e0553168e8240a675eb9ec72bfd82b65664e99be30a9a3654b3bfbdc520169fa05a630666fb6fbc222732b183f08ec444864092c4cdd52f2ad0baf2a5341c8ca75586dbf45c40282dc401042d8c2807820fd0c86c1f0d116e954dc0f08932d560ab1a7927c16f34eaee14db23ed719182b81f5132059d93f76cc70927d2c268f7e68ff0ded853493ec2e69d053e4bdb946f79b4fa12cbdca6e25e22f9f86c74c39d5b78530d6b099f4c099e53ae69baf58113eea7579d6b1828ba729d65525faa2aaf39a022f6e7509d0e5ebdb74259b5d6392e50e45b6872bf0f058169041a6f38f75297650dde3ce8fc66aaaac409fed4f0e596e72c186d052eccf77d78f59dc8b33741749a6769a2564988b82adb5ec867888c9f28dd901e3b4c4cca73ed3652f21f852bfb554a97ed8c6733689b70267ea243932a53c8f6ee990fc992ed6dd5ce50d002547171d8a1b715ec1642bb38320aca6240c3b40a516fee04db8814d1abee4e74da9a734f2adce6dd3615daf64d30c82c58f301cabb400a842687f8b3cabf65ca17ad5a6342358711bf73751b4eaf14da452a6ef81836595383b4a0e117775498d246a0cab7db1c9ec5feaf766a89ece9762c5e739151663654ef9255c3f1c80893a113e89580b391a0ebbb9114a32081f95666b0e883925a8607f24314e1ee8ec144eaefb353d3c903cdbd8afe94f9268b4be17d32718ec9211cc887bf4421c211c6904c20ea46d6719093fe98dbb165cdf758795d3fcd3bd044cba24078d23816aae181f2c883e2648b4f1feb493d888ac550dd8ce25d647da67372c1b0ac7afe7558d0e60d4daf125fab54723d28ab239691d0ea717ba0395e48399d0498a90a1d37e6c29baf261f67575b0170d687d6f4c3d18c01c6bea06cae4693037907e79db785b026adce21c37a09d9159e832c43769bcf64a5c74fff02474b7994521c551e8ce05509aa8a8b59210f2e21e2a94197b8cac25da28980acd2020d4d7673986780791a400906eae5ad78feeb7f7e46057573978cdc4fd827e99c39eb7f71872fd3f4fa58220ccd90ea041081a282aed3f057bcee6b2ddef6465eb0d8564f900b1f4b6a9f4ecdae7543dc6c997cade83ccae3d94708567d470964db308ad57a8d5813a77542aa3add9e844bf8fc854b4bd7acd1e3952d73e38849b64c7e08b8db446efbcd81099b2e9696b1d263c704cb8def38d9a9267a2d70bc4e450653917a51fe969f6948026eb976a54da79174e38f64ee19f1c7a533f9d1d7d5789c5771913a554f22252f943cc18cb71b5ce0e4be1f5b397b380ef0edfa262b605b345f2475c344353c6d3d703b1c3a64b2991cc1d4b22075c38236785e46a2190c00b8392fb9939d55fb49f51f4bdfec97a7f273a2127b806b53167bb94a4397fbfd790d382fddb1b08475be9cc1db74b82bc3cf287ad200e84ca09f566b42e9b919532cd2955832b2892dd7163725f1c9e8ad57afb583b686279f3cd3be2d1294aefb168d659bce7f645ec8d3416dcda056c68385cadc16f0329fec523def3f4de99bfd7bd9f0012f08274d1ab40b8a66316dbf8654ec2ba0dfc7311ad5bb6202a2bbff0f697540d4a3ca4a5d9eb7069689aa677a3a9f730ca7f539531b0a587f5d21d7862fd9795fd4cfa3a82aec71dbe8e1b5c50300a3150a3e2fda818be69d231bd78f7db9dc9b668459e0ba63f10d1b7d9534c9427d378102fbefe1f4f1b5e90818e3e76e7dad3e0514067da362affa2bff7f39523a573a61dd08e1002b9209fcfac2f57abc4a08d113095bc0d68a682c486bf0ef474c62f50f4969e2857b8c338352355c07c568e7d7175b38ea62e0c60d78a5c581c58847414268bba52e59f4b6a44c60046fcc3761ffb1dcd4ab9128dedc0f49e676d311c798ca1df6f211fdd6f1900b4d3c624d9a8ceeb4f80aa829de592c62619d1b990929bdd88f2b31eb1b8041c88ee3cc30edbc0935e574407338f3b95bf1acb65392bd8997ab9288dd1c829f6060b33cb8da35768a4374fd7b67ac9f7f640738bb5a8813f31579b121b2d902383192d8a3db5d2a5bef649f7d3802ea3351d0f915771b6aedd9767f88c7863b0943b4a1cdd770723b3debe69084cc6d773bcfe2a3d78cb78abe95b3e643d58695ac7c0beef72e7f53785a85876ab2d76bcf27502ecc192d284c46e5f39f7d7fa1d34de032be3d0c0c3766a1697dfbb49aed1d703085e8ef749bb48bd552c581838fbe83532e2dd2814838c9747397f3e4cbd067f673271b7a6ef807a7ec95b14ba0f5b793a9146914479f56d522b35f1a34e64af81ec0ad4eee1c9cb37268a03df9d5b12f4bfcb4f6888058cef591e8d78215c1f12db51a8b081c0469ccbd633a13b81cf0e6035e5133877cd0e9320e1eb15397e59c2299578d0ec2b7f73b4b7a7f2dae0695a7d21d68691665733cc6853453238743f9de0d41d193710e46341c182497c6310b4ecde73a54da7774bc65a4737fbf61883370a5caaba25e3d283fdb82a5ada870eb971e3b398b1c6f7511258562554a00d5320ac5fffdc575b87d8a273fe19a01c15d8a0f7395ad31afc28814626a3b9e8e51f7aa767c31825cc2c18ac033bb2ebb73b7f5bd57134c244f1bd4c8bc6b080660bb351d10900dc4c0d2aa66e0129a63fe59dceff8f6a9f3b2e6020f035c1805999a8128633592e67531c4aac8c7009a4229453f349e812f5fb85d4eee1289a9f2713548e67216d4c45b5689d6b825436ae271b4bfa72d4054b65857f90b78e88da69699eaf7de3eb9844503fb6e6d35e0b27d18d86055d16237dc2c33292ecb7af48c97d2e2c81f0088c0ca21f76808329b6de84edcf600a285768d16cea9f222c0686f67d423613824d7f25c586cc6abfa1a6e8e8636250be38bb15af36f5d8316bdff11cdeb4ae7d923ca873dc8aeb826aadb72fab40dfe4ab1da22691b8c9e84de2b4820bc3d60ce4cb8aa0bebd8875ee61178ea4552afdce90ba85e265e23cf98c27caee2d4e926456993a0ebbcb445cd448dd39cfb703bda111d08ef1ca91935d4652d333eb99dc1a22f3269c423d69f2075e9685f8b4fa16a55c860e169c9bcd451dccf532b019ee657cc5043702a47295ff87e243375e4ac58c4d22e24bae7610d377f23d0ef9fac747dc97d3e4220bc03db08fdb65d9e6052f038dcbdc183195bdbddb50674c6910c00c738e6c803b5839e21bd45201615e5a32f196a110dedf5941546cddc614493b579d5162f67c315ee7fa23a72ccb3da3316113922ba1956f6d8b8dd28e8455e2b6b7cf3f64926dd3e46f101ec09a7c37243b1818cd7d2098d7da5717aad5f762d96e232cd0561abd45fcef76a79d66a9d130def1fb8d873a92292373e51814f34cb856aeb83472af5295881ff6efa116ef5a0b638a4ce35546d9e0dc84b82ae6813170bd2b2c51617077c6e89a3c3f1faae6c1470d299cac3b3176b845b9ad09fd08099f1e4df750860f0fdf0e1d5351b2f2dded2bb82048162663b442c11fb222a38d80c5c3261736bf830b46b804ca0b395bb3e9325185a1634a9d2b2b68c472695fd3035deb6ea2e55c835a07e914046fe3236297651b32ba00716a905af23ad680ea66109aa93d0004aef35991555e767c5905c46781479cf4606dfdb0ebf7b0a06a8e86dcaf50436f70672f20c4c831b428cfffa21d62c87a6660d137eb7a59a509bcbc51354e73f59598b0ff65f137f6bfbb7c2600b4bcd870202df178f878bb2b9070e17d40379739e3a31974cb997dc8d274b51b56176236b36a9742699f9185beaf9857ee9e67e7bb41ae351a6249b9c2fb3998634b21f64afcdf0356c4f257d8ea6f03e9602890fe8034a10275d929a415dd22ae21401b6b4b1758cc155ab545d7d555bf2845320dbf16bdb86eb74d8f191521ca42eda493930c410683d55e0aaa9f05d7c31f731a98c2837651a2bcf92c4cc19bb871dfb1f44f4049364ebe95c4166c9671796669653eb97c97e66f3266f33d79b0d68756514d6be3f469e9a5116c5d811c51950a56251a0c76b12d15032a5d7f20acbb94487a644742f3a55b1c774ad9dfe46b24870d6fc1d90550d8cfbcf086597de87aadff58179806f000cf05e5e5ac36ee6bba3fb3c32986ec936f0df5fa15abf9d87a8badfd57a7a6cfea10b3722c89726956b9adb483e8233877f20adefa35181de4d3e6159c3521f00e5a0461ae27b4ab5c39d6efb8bd5d423ef0cee7ec80b58cc836a1353b950d47e93a57a5322d0a421b563b2610bc21794410ac30a0aa432bc647fcf024622400062350293b390b2636726211f5a14010582b730678fc651d8d315d1b25db6f7ccbba36cab13c93a2b8a1d066385503a98de708bb37cbcb6728aecefd3dbb0addd1c2d4168c183a29c66c95b7273734377b417995aa63c17e2cbf48b0eaef1b3e24a8da782d97c874fb959187d81625d80834c2b53547c87823b1ab8e69663fb391b5ab021a0467361c90ced9568a3c91bed0d965a4a50d4bf60b5aafee593100a74e274f82a443e96c571a1663110e2b308521c9c73083391e78d71a65060daf64b4fb10f3f69699ed1a267d3dbed18d39e73ec7c5074e32a441630c764c7e84765bbe6d1ad4df33d13a6ff11da2d24616d7724520ec46cd8d91a69cfa32097d6e051fe534662ffb7c6c1d7c392135b5e4709a8d498d37ba1ae5c004a2d183ca44f06e70278d24e0e285770697fd650a342b3960deb5fbe44e3a4197d13d8a2f17af43c327db5174a69565d18fb0d168c6eb3b348f8ac1062536a01c00045e1c588196a81173236687fd872611bd2f08aac4f620098bde24bca7e116ed6b1a00b1ba299be4a8efb1903d3a655ca561a2ee9a143d87a2d0fda93b3e753a33ddc30f9a8a2d9495179bde1dab057e338a7f07aeb5c4cc47a1a09292ff66a1237a785b6f3ba4c705832bea55b5fe5dad2512b4547663347a5f7c020fe50c9ccb4cd43900900d148019c649e8afd3c245006ba3c79dd39d7c432366e5ea43e032dd7489f639be772d37402ee655787efe229b5aabdc36748492e9c9b8f18252bd54b52c003d2792c8bc04609c7fe5398c04f3a0ede1dfa36734be0cd27dd085147c89a6b64ec6d4df8d822592ee462a7731f8c3f44cd5d235f0232f4deceb77a8123fda023ac7bf0ddbeb45e2e4c3a3bd3370887b549112cf5acc11983592a708e998cd6abb593a682bbed10277273a1c516f91ff06dea3978b87502fed241ca7492e1031c0a205c60bca766c5a1b4da201ea57ad4e4ecabcf29ce833fb459f1c2f1d8692010e986ec240a9fcd72f27a94258b9b57a052760caf5025ec7aa87f6e556bb1e9d06b693f20e97b2b729515ab036f83415a074ed5e3ed31c0ab0a6c41e088d97c9bc1a6a897ac3efbde980431ecc602b3b45c3cf0cb91a0df9143621c4043555b89909b31d9e169f5d92acd8cecf83b3bf7a3b6403b996164672bc33309ad5e00dd6985969cec491eed3ffeb9a850af4c8a00f305f775c4f6725b04ae1bdd590f327174727f2cdd51faae8f793ae85c8cc6b9f581b22aa6a6c387507aabb2c8d9f5c41ca881744b8ae76fa50fb8344d61a0db9e140035e7ca78bc3614ed7fc743868c2ac721aff2e796d9e726eeec732d010337f9291d318c95bfb0d78803c247465f9276e724ae2fc58cbb6e5d0bea1edf84860346c74fd581859ea6d89c52e14c2e2fb33f0c340924d493c215426ace4f5a3a01c169e6748411a1d3e1e1f0da3a904f29ce79fa1b2e340787666293ae9e3af0c30fe936f5558b8e7c6308a966984a546ac5956945e5a08aceaed6e2da740646be4a9058cc60d45de156064121bb6f22b4d6a7468c717a136d0a1643dbe80ffd435dcb5b4b86a4e449d578753f0c96d326fe3dfe3219946c5b6c46d978f9f48586310ef33d1cb68f9ba02c5f3cbbe452be3ebc37e326e6ad6af570f2b272c0d69dbc4ab662cae76f93d5bd0da9293d101a2600aca61dae2a748dc6607b1ea9d758d594f545347cd6928fe2ba479e8177e5311d79309d79a193af0e30402ef7acb615e209a4431b3b883cb4ae32f624a37ee5dc65492c0b7b6148563e2393351da0f74a0083143628b263201935d5b119ef5d105fcd644222fac3d471a8bea3f26540dc9ed423cb2b47ccad84c1562f9226bc08ae52e6158b5ae9950e9d9041c2c050dc46616b92fa893b144c4b64fe801d247c2afab542975e02359b5aa386604ae41bb65502e7247ee5724573ad5ead5bb90fa80ed822d6bf70d2901f0a8e6eed3eb076dc9f3ba207eccc20dd0c832a478e406ba139d748b79f16a41a3e9b77f44049cd6d39db4811d914de8fc79342c7bbda77f642c54e78c9e9a7678055b1bb139fc9f0ae7bebc6822215d374737e5384944a68012078425dc9488e9f728e9824812c2be3206aff7bb5ffc37270f601a7f7825e8d30f3229f5d3558e80934ccd8c12ca52c4f73531de2cf470c36e678393a4ff37b9bf9d4d01abebb4b78ca995808a6e84207c40a94ea30f8eaeb9292325856900947c9fe441bc8a7b2799fd77c1aa92ffb5cffd8f459f37a33173a442939afdda730323b7a9f2bbeb7352af5add8c0daf0c1e99271bd041a509ff29d7b153b65ffa024d31973c16383c0ac1d33ea792a605b968e469bef9cf0978539a49c905aa5a41826b003d860de8d35b3e5af52207fdae2041ed7ffce2e2e45c31a63b816b80d4982ccdc42fe3939a627a3f9ce5d9bb1402af4fe108eb308daa1339be3432fd479a9058f65b4f193107239425ce24fff6a00434e5b81487b55a605a8dde4d5bf0bc9af71e996409b171770f27e5740f67b1b36104bb148748156966d0ce71e3b156135f287a68093fa8a4a361d82a0c42d431591f207a58ff8785a4684674a2c357791556a861e7f7431c309216b96f5319584ef7e1eb5b3eb2f523a49e655b5a51c6e018d84c808226c15b0636bdee514d36909d2379d8bc5359c9fd01cdb27f5b5011722d97da68458653f2fa37855fc13bad9e746523e87b6f2325c1d861c93b0a36a7aee6e7b39d74cee29ab6d2f80ca2bb87b0434b6198c1989f371c65d0dcf0772488348b131c4a4c1194e13ba998e88a75e389674d1dd7d32a9f8898a91465f02c183b2ee20ab94bfb3a7aaadd17fa794305ca3c331709ef138b1cd18815c8b3e4887351b43f0d01dbe22cc0bb7b36770dc3e222c91080b35c287468551aed9a52e185a9760eaf9dda32921f056f3d9f8f6198495f63596e6cd60b8876ea1f822ece3d4570db4b48ec92c26d7db597c89e112b87486f123677b712473215fd9bf40a4d9ce6816bf0740a21eefeaca53620133ead427bd783db33093ead83cd3c427b69ef8a6197c0c9bc15337a8ab806a8831a1c61e900a998bba1a12c911490c4b3bffd96b91bf17efce985771e6e24cb24fd13b1d599c639868498d2f255fe45be97d73bf150af9c11463bea4208937a32b11512eb5a011530bab432f99e8fcf6277b96ec5f4913f206af4ecf9b685f89d9d643a6b5e941014cffdf9a12d3d9a54a982f14d3e9477a1f38f7ecf6e10ec0cc815e12ec8ff1d4a4428839f8519662bfc39ad825eccb74eb3e43f91b7c6756053677d2950fabd98fac5a0b9f545bd9cdb68f4a784740af9ce1518306aa240fa303757c5e555a579fb7578505246297086c2fb432aadee90d0ce0257a3d26e3c83060b06b9b628c5266156fa4bb2884bec38a97a9814a2d821e47945d8266fb6948efc01a5e9df36f730288a007c1628c63ba2655b0d3454c33ea51c3a1895135d1d76e046fa9691e124bd2df86c4fa0624abe499027ff186bb7a3ffc5b2fdac6cd8f82225d7f0436332fa9866b2e9818f6713c0520c6f80ef6f6e46cb1de30a85eea081c0367cb0ba3c673eeafb2a33d504cc5204f2f48e7d0d0cfa2c44627a13bc1791f147da24d2c9f610dfd0673327efcea25567164632ab2cd12088b49469fd1ad3b160354103a274ac652763bbf54956d1552118dec73aa2ea96e72c254844e8d7113601be7fd840325c59863bc90f2cfbc5565896d994b28143bd93f800c645997209ffdeedb34efa45eeb69e183b2c5e913ab3ec4cb1aea31e8ebdbbd1ffb61033e1d63435d70c707b35506244b81ce6b512f117cf4957256658a64a20108c5c282bc79b1ce40ff04c5dabc3b46b60cebf64f46c82c449687b35e278b8cb1180b164a57c6d2faa50b1bffa56515b287d5231b4a36b628f8f64e787210b8e822ed808d651de0dc16f2d92ba925145d297f4c6da12c87e318bb0abb4a61bf6e87377d84de92bfc53afef1aee268180066373c7e8020d5188ffe03f5d6d3c1ecd386e6b9245aabb4ef1c98baa5ee4477f96bd0e5569525b45a7991f66b8385aa98630d06359b4d13f1bcdff223444edece326207d59a176764de8e7fe1aaf9b1ea5546daec2c7a80bc4cd1f7242bccf52e68029cbcf7fddfc2c88f8eb5df9e9cca966f544d0a4d6198facaacb6bec348e404a902df7ab51f4a964b6c49d077c85aa8beb255f3d076a2a13a2188e8404e19745a01af085af81f0e547ecb40432014ecbc1ce985356f4bc35ab71bb7b8781058aeb3c46f728568892ff8d1fa0fd354022bc5f1adcecbefe101dee3fac0f86cd7d1a4a5b0972f7f7beec0604f7978d7323edbc801f3eeec694a6dfa9ef6744d95b9cdf0c2ac5516c7fcd0eb949f00947ecac5cd98cd85377e38cb354b20bdddd24a624f604a54f7ac74b58ce70d06b971bebe48d6654d4cf8ccd0da202d9ecef02839a4a878db406756dd67d4343408d69854d91a26e9c5e54580f44ce7b538be11269e039e052f30667a1b78df1be95466d6cf00012aa28c15301c8ab9630e9160a0ef2efe9acf178467b717a1093fb5eb6411d4c79b9ad0c594fff743178d66632c1ed52d102d4c4c1bbf63a7c92468f55cf07cbd3d78496f40b2ce33f1e78c602e269e55f462843f343fa1d3a8d2a6f8d45e9e48dfc15c9077f283e07814b96484b76e323b0fd4cf3c8d53a6c9ba753aa61725b74750d6d0f461b35bae013fb4ba6e2bde613f5bcff7e6275bece429cad1ac8e12b7381ef6887c33e8e69777c07e5ef8009b788034a103f48c34bed5a172edfa99e3d3d9559605e69e99143c51b670c6941b608c90ff7735128e7f8937ebfb019ef23cd87acbcf2a297c4bc0ed5c74a481e37ef905eea441bb6aec21495c9c85b71323f6551852b9f3672b1f3e670951d24d1e3775ffbb83665ff0138266cf2adfacd15443ea5fc4dd8bd1fbf3f9e989c382a21880cab9ac7d46df1d742c49329ace3fe28803b4b963b1655571fe64aa36b06a5757dc50893e0d8b097d26d8432807fe3190f5756647ffe1a600ffbb808e7c948e8e0290b243c3bf026726c16d6a167fd00102fe3b2c9e6c4fffe8a85077781e77e609d1d45ef001c213a95e0bc07d8a5e079aa1b989ad7e10e740e7de39c8f9fb0bf3ed24b6feeb4aa93057da07598e5bf25561bdff425ad0285128ad247c12513709e2a4b190ecd54d55210281f7b6547758e65ad8336009a7e57c8805c944d566f34a632e4bffbbc99af2bfe477329d7a0a87beceaa2a37ccdd03f0ba1c6a83e3338ebdd9a34052d8dbaf650a901ae6702796f53e52141036d5d04e7ba1f188ab88ad8e7e45975e92f7cb36024dda5c2d97155e1df946932dba80673710d2e65c878294f806934cbf75475d89a88033cb1f03a6bfb470a854bdad2557c6ee1df791e36728067c45c6da589015dee2ef2b4b720cdf6d061c882f9c06a2f8da3b1b0cdd15bf51940401c6de8a1030c5011f25f3ac87f2fa255092e56ce65b81b526bd9d64b31ed1c6f327040472ef8c5ed65a1b0c67bc4aab44d00de913b775478e39275ccfeb6936bb80ecd001d7f105364bd917f05af96051f0ee07417d2e1d849b73fe17413791115f0a96f6d140ab1671831eb532ae538a388ca1148eb04219e9fe9a230858695394d216897ed92ac00e4831dc9f694c16b0b8faef24cced7ecce55c862636414738faad4f8cb57ebe97d123630a9c00d42fc73e9e71a89efcdfd821574b6766f22e75478d3335f56c0e008e17536f88d6cc0a840edf77b885d5500a14e62af83099cffb8edabfa40b0e0293dfd6a11b55078ba16333bf86dbcf16d7f480e244db0956792ff1f1f860f41aba2faf6575c549eea6115ed79da811507493cc0a838673e06b9f229457d1f79e172c317b2e02ac19ec63276d3c15ecba030cc314826ec253ed717fc4521f755dffca4aa0c44d49c881cdf2fd72294bc55ee66015611865b4f57b0e4b57d23a214737ca61f1346521b045d52498ea166b14abb2a3925060d8ec5a5bf50abd3992a98e7871d79905829ff704545191aa019e6584abeef9f8770c3be6f8088af9b641964139519de6496a0995fe9846787ca7b85f7bdd9ae99e374cd90f8b8e539c907d01fcacfbfeab25e71982cf7fbb81f03630f11fe256ff401d865620112ff1a203c789a1c70e9424c91afcbf6b4b6c7cf1ff653814dbf173b1b1c077ae18c3f5b3bc9ccdb8c50e543fcdcdf9b4373a015380624db73bb53c807539ad088c39e501ea78b43788fedb5536fb5fd750f0c5b992c6e7f873f51eb3c53feca617260c8df20cb233069d1f568ce6e12c20dce92f4c8b26e40dd57255c96e273f84bfcf73283520168b139e5a1a2ab780f0cfec7b61e51ba6f3c3172eba262d6620a184618a9c55dd1669ddb277251a1f2209af8b1f0c381b546fb3c7c855722d962279e5adcf061a3e86dc9f2cd8e86b8643a83b69ab92708ceff563b13f57bfe5b564fbc63fd46d8d360e7ce02f112d4e5600e81835c28121e1c2c012e065482cc2118b42ebe088566ee6026e0335c90d75113994dda31b056a9e30470e312e73325d2aba7ac0c9922db2b3147e4b63f7184a782bfcb2486321980e7007de277e8c3da058173c2df5c6764e4be66819a7bc8c3bfbb01e0208de47b44c8d69f733781b734219905fd0bce1c5770d3cabd8b7842ccf466c13eb7eeb53ee8d94c3c25a1c330fed71ee58e4a2d75106477a589bf6ebd7565bbc50584ec658c6becd85b5bff7bae5d7fc3e36b6d7f2c9caccf6c2439809b15358d93d1244baf4e7c7f501160bcd36f5c1fccd34f5123b2bd8b7d00c66c833e142f7fc6b31dfa5887cab13f781d786ed980c1820dd9c7d07ae2b8a751e1b16479f65a41371832a474a9e9b393a8ad2a9569f6023871cdb33d18ce28b243e3738ceefcf9fbb8f146b5d1fe1df934fd037edd1ec64ea9a93bb0564898b1ff1c94aa8f947ddbc6c39ede4003f98aece2b2b5099719e14b037ae1e981d7ad4356738e8f7adfa8ee13adbed74447a51ba1ae7369d4aa31db7ab3844f673bf113290ee6f88046a98674ed7cf5bd683f06f6493e416f6764023e174d4dceb15e1a93e297bd46f90162ea89b5035951f68edbcc2f892184a98b90a389a488e4ab4960560a6d26ea0737fbd63c130e37a3a3d72d3bac76be5099f0beb7ce0efef8e39506a5089be7fece40752709fa6c7a3304c03ef3542b82f6f76b235148048d12c7a8fd36d30574f05b80d8cedd437304f6d320c62336390b5e06155cf2ad333dea9de9103d79157e5dfceb14def8c500703dfe556b0f10c2b4ec4e4ad72c9b518eecdcd0ff52a314116c6d6782927ce2ddc458f744bbd17f2f14d636884e2dbb71db5a7c25546a94d095d1eca61a4827c2096a18835dca2db47726d9f414e03d9373fc318d8d877f05ae84380cbaf30a7a74b97f8490d814bfbf242ea15dfaca561b103fe5ffe810f68ff952a331290ed23422f4251ce986bb4d96224a2b8741eb3c14f5bc267aa7990ed6f64017c72bc51e44e515ecb14544e31a2cd4e9096570cf2c4745b5ace79ae92290b26985d8020931dcc8a857b71fab301e16c6b9cc0ac2b83fcce750ee6a8664b52de9f49de04204414522850f500471b0451058d987fea61d53a8556f2bc028410dddba6dd10225678c2b23b93ff985f5407a9a39cf18e6d955524f2f4949656f477c2287857d9e0e0a1138ec4f0077fe27761876c83d0ec7d550077a7e9f3176485d4fb3691fd78ae60b7d33461245cdef09ca675ea42c181d2ba11e975b8a02546f1de6f30a7d50a0723e9232f97ad2a2a76b83cd469ac4020bb78534c49036a45fc971a2c2770b5fd84d97d5111cf53b9e8c8e9781204de639f1a0a7ad5df86fab48984d55c9e5423684f8522e712f4e269e147276ebc1e5b23e7a9aba74a131b5700420f088f5937a531f160e34619b833fbb7e2578f9a1ef94f35a8971065fe208669200dca0b3d9b08486e49e31b372b9e88a5882906534abd1bf826fa460ce98571e5b3271f4fa1343f73476de1aa249fa8b5b8418bae7dc1a20b27985252fe229b54ee8840372a6b8ace8cf0544bee16be0d92282c417cae7ed9d80eadb15e044b36158ed241e69ab29c5916bb7496f963f0f3d9402d05a47639c9d900d52cc0f7b190cdc4a56e3a27e3d7ddc153c423ff74790f8b354b7234933fb4f39aa1550a8aeaa913b54369957bebbf1a2682dd5af1f5afe44ff9d4b09189238c8488e0e809bb793463b075bf03384070bf224a2c83bfeb07b000e80ea20534550041ecb804139e0ab25ff517e0b531e6303f9c2e6ae08e0698f9312b49dad78d6dbe650e6df2609b112a543e4877da189d3722232c570c17b60ccac4702cd571f0551affdaa5f7bc0de0125a3a99f4b0935bbd338e1d067ce70d8d4da9825a907225ac02b2b3837e9777e323c419f94299c02366263fc8db75a4819094ed17e1420ea32862ff676f7102f4a18d268ec6952d25aefe7336836c235f6b1a65a8b8c9d0b2e4660e7c65f2c3bca73bdda22001631880118cc4319e3ad4afbca4b8196f0acdb2c1ce694f374790983e9890036c87356400e31e8cde42b51a43b814e85df8766aac13ba04db3e132c30117cf486743141ba503de1eaf329536aa846974575616c45c3c395f4c054e3e04056a1b0c80cda078eface8bdddbab6ea0e6a62b022c59c7649497bc63d83375f423b1a1c085d9155e505e99280ae8585312a978a1debc747f096a29a1962c246ebc78f7eb8e202ee0ce154515866a2d3df4679cab4967ad164793682f599f2b79b8a087f9a87be7679bef0cdcbe758fca13b2a296cfa6d61fbd6395dd100a9d72b60ba05f761d0570b18d49d6779fc3bf41249bdbd37f8374e7ce98a4c8bf54e363f68f6a6f5ed5a9aca6ef2bfbd824ba0c632a381fc7d0e883451d676e70715406b4064646a24f15bbca54a7ba2b975694890eca1832dd2bb08e71ab7b751aedc438130a0026ac094e1f02e459bfa2f79ad9eae3036fedfd4a5d2b41e0b7bf46fbdcd559a4c149b58674bc97cda3ecb58f46a289a798eabe6c178d9881d57dfdd0c2f51952f561345d2bd74e43d62106751341c36908770355132e0de65f590167a48fc07c36706b223966d49ecff18c18da2682c09d8f6cbfdbc2dd20a76d4566e3502efae8563f39dbd1dbf09f5135fd5f068ffbdc68ac92d27b02e7742a0262ba01c1146f7117244ad695c873657903218aa27ba4eaf4a55430df8f3ab0eab21039bc3b5367602ea5358b7228878c77ffff68f2d670975692ef6ea7c3b0a2edbdeff6e9500073560e114861c3f7390968bb8712de28f1caa562e4458285904ae72ef153b9d79b88501c7cb63f46e232c44dc6bd96fd9130a075920c81e9614bd34da80a2941b90fefb26f4d856ae467f1d22f6e89a253fe84290bcfe522fad275d920f2a468c20444a8b4b81c24ea4ee4c7b6f7e3e7f9efdf72eff245e0adff3e43c233bfe696b47a4560937517fa652cb5681b4726ffafb74ce6a834dd109d8f9f720f67bf14de60dfdd81dff5743b0a737d3fb5345fcf6cee5e360048f234df4841b6573048afeb667e65f479a763f86d1d00fb6a7baa1fdddacc3a657bfcd1911c14ec5e3bd7745c6a0219c6ba6412394e98028c0416a72a897e8b4678b8dc31c6864d15934ff0a16fee145d826c7c58c07073d0227ae7cf3b5e681cc9d5004021bc481771d0290fd12b4ad9e114a48398643f96248e9e601ab4bb1837405ee116b4300a315f43c8548e579ed0205ab1f053a5c1b10320ce56a8f6673765fa12e5a0d2b8c0a4c9aed589e47d8c85abae6026bcf2dda1044460c4599490b86c3bbad61d3095244e9deea5be43ccd33f397e57d2c396290c5983634758617f498f04886bded2624d549ee9507c176e6b013203e1f725f68ccea1700f39e18ce3eb6d61ba094e956f8c0fefb76abb34b21f7bb499fb10ce91631cc730dc0d4ea4d112b8f60d3d7bce8d23e3dd5ef5bbd779b5317ef082940dd40c0009c2715b4357842d7d3e06ccb3e05b2ce3d1145d803144d8025ec55ae84637a42dbbd2e393eb04193db92baa22bbf4190a25966ed5fc22e0cf75836983496a572489fd7e4ad50a900963582d2c2e71c5d789516f48b8e0aa7c40e26af4c11dc0daa291ba1ce979879e29d3372233866c7363853093de3c73ff6dc51d422fe44b379424ccc77b5539e5a80ae0ff83b4f796f49e2fa9f9e9234d44b3de7c418177b64712c116a46ff1cc95eedf3b5c64fd8bf44e26d243bfa5ec15813aa18d78bfa37d74be8df06f4a52f3b44c8a3a065932700e48deb7d1bf0116cba881a2f17d1808673e18cffd9fc3ccf5dd54cadd7a5a7f33f3ca59a8023aae6bb25ccbd8e1a64e545758879cd7258ac786647e65b3cd886f88c72c300faad86af263b565cd21317e9e067bc9d4e2fb7fed2e569b4fa6c89beb82f7499bcaa8f681f4ef55cc509fde46b789456184b3286a8e82049b35501193e39862fd83063d090652dd81a5f84857a184cdb8c2f8a4cc1857138ed7145e0f46fc12ea7a1013fe4960d6c088c79b0a6965ae5d6dd17313a01cfab706fbbb91b5c41f3ecc23e764ba199f34640b792c32dd390d66a71ea0bef159a33a1265715155fd0dc2f6afbfe28e9eabc764c0177c5ec8409dbd6602646fdf60ed46e8d97a7fdcb9d3386f0d97af8bd213a7b448e0072d5f088a61ab35c1db6da8de000bddbf0d9de2fe7bb0ce3e5e5ae48b2855a0610565c4305a18256e65de81c17d503ecc647676e0bf8b8adb49fee238213cabc7d00790b9aa70c6bdf78bc00b32676e1acc5b76be2c9ac121271577702ef2aa73adcbb1ce1183932876be33fc7c43b346b9edd4df44e5888c60d2ce2c521f040636b507dc6a4b211cfc484575efba39ebbddf6a41a53b3eb523b8a9390b16b99a955deb95f3ca6c898b6408681462ef0ac3fa14600dcbdeea33d8bb756cfdc6bb71ef9ad6ce9174a2945567a1cfe9272ee7de24503118184f23049b0ab772b706d8e08eb1d0a6491143cac6f11254d8647f04be3ec26fc10c67058ff30e94d56f1edb55a9d6927f5fe5cf1a1a41cb6374d4eb6552c01a844a8043cfa3d68599d18f3d34c2763c0f92658f69f0a8dd36bbedbe4e68d50484587496fb06878c6e619452610c5ed5d2bce054ce199a9d90f2e644a48c8a71e56caa5eda7af85a3437c7aa4e51d246a38be7a6b7ffaaf0eb009aceaeee2a5427991cc2ce7d6dfe48e1f3cef576e45c647a51f4a610fe1681a85c356c4161ed37e1bf62b2f625f80324a73549a094d11a8c5a0a6bf174ddbfbf591651840fcb7d026cbb278f6158561e5aefc0722a266689755e6fb66e7f95928b5c400978862d4e4f85475c7ba4eaa016fae51dd09951e7906b176bbbf71c209aab06fb1c19f03bb3053b62a339d9092a31ca917a7067ad9d52f4a8171716f2f0b1559d2051afcca896eb77a2544f1e26fe17ce860da02ac5ee1344f7155009cd258484e0baba0241a204f7c477dd9484abb60ea6a55b5c53310d52a7aca1da0cacf5d4fd00b3785d2d4b9934602d2446c411b98c6b28613c6455170ecf8ada213d085e832b727b4d4c017f24d6af626907449fde1665033fd69a2ab170dc99d21b3bfbdd9f232c503595dac6606e3b3757605c8f8f9a6912777394128b4c7332cd07fc9a67c5efd86eec18acc4c3130b72469e2373e45842926720353167ab1216a7035fc0b95d124ac18f9c9a91e9c4bd8de578be0b95bb0759aae59687c24bb901aa3065da4224da915764e362b5859447db60a415350d8c26f03eace8a9f14abb12762f3b06accb81c7683a3807610d7f7a054af18c9ba216ffa20b106c86758120b04cc93adf9cf1853021bf78ff0de1c149b0df220639db930f7cf6b81cab6946ef354a924de339989db414a9067d99483a45ec375842fd6af4435d282b9494ac21ad9b1343ec7fe1f5a52f23ff818b6fa48db43825fbdcf53792ca1830da9ab0049c304ab77002facbcfe3e87aebd320a031a871c2331dba875af656249ff77cd3b27ac65620982e71651ad84ce1e74ab1dee8dff51a28095d1859807e0e599465f06f77aa44074257ab9348fbbbffaaf3d8860785b97ab6534cbf763a58bf7b1f1fdbb3c396d01d79c9e5e548aea372ad5e109d793262032d0fb70d14db7c7550cfdf9f5a9e1e0d5f105b134872b16b6f627d3f054b20ae8e9b247d88f2ef2ad4b2579719838ec184e63cdc76c717b940a646886bae1e786e5c400a28fa238b996bc9e7ed536bdb6d1ac6a2a06a39685f2ea16de2587df12b47c8b4c5b10912368efd2a09ae958aa0f2968509f110682ab1ccc7ce23ad785aa6ce618564dc14dfbd8a863749f82d468d0aa69059f384c0bc49079ae86db3884a24506aa04f55a27b26afd8212f43bd5cfe7c6a3fcb24d5364ae2739b131b34e3ed0029a3148c4298a707a2ed1111e4b3d3b2efd608101ec2468dfeb2b3b9bf37300aeaedc0c507399f1f384035eddd9c4304d41da8dfab74b090d184e30bae8c2f3f2fa58c00b54bfb0078715b900f1209cb4fb5dc26796e95edb18d79405aa25bdc650331079fb7511b6702d84ca53d6a23a61b9086c1bce7df6224967e628a770608802cde63c0c37db3ffcdae0c8b086a41763000194f95e3a5defefb110ecc5c4a544034a47f2183516622f4748893d282aaf314b09607907334b8df506e71114a049d52c4102a37dc32af9213ae16f1c80261dadb8009084cabd820aaadad10287f442c61687f208aa1c8ae0a5c76f7225cf470b2bece9ad6039a3c7053b921f25f9b01a385005ba3ed9a70fcf5f1a745596a3c5a0d91a2a49004efc5a529663883add81b6ebb02714e8ce50bbe6f8ea94016e3585a7203fe40efa54778f6264bfd4d5e58ca13e7296dd9bf481a56630718a8e8cb25b1bf56ced8a442d51ef6ee810bfbbb9bb9fd05a483766a304d6f829130f9167922882ab585c5d0546d3093acdb6cf7e115264d7f74085c23180bbee46da25c2109b2cbfcfa9aa2bbe9d882c08de0fd204c17cabe6a5add00689ca4d437eacb46560868c44c94badaf07d92036b10a7edc236b1f7c243e7656c28e3902668fe440140456b19eaa5d402009adda39c66b5db2378c45994575500dd89b9d1ffd8a125abb6ad78e0ebc649e477968a106aabb04ff464acd1bf5a49def916417d74129d2e9e7ab617ae4b93b13390ebaf26ac24e10b1e27c592a83a8f4f386af24d8b3ffcd3b5104bb58546e073b69808838253c1bca5a28e0a1e2bf510022768479f5d6c9dfed819ebd119d1076c46d1bddfb1629f0b4e6ec99107a74ee6317802b7712ad5fb0dfdbdcfec7fe8ec49eb6ad9a1e960ce4b68f9d69f2e284a9a2f0353c9bbb56704b6cd10ab70b27e553b2e0336c9a46dc999d93bf284fea9373b6b9f532317b77e7449d0817f8d394cc181479a22e3abe64f16b656ca931885f52068ebf81b92e3ed118c77d21be21d935c0435180154a7a5ab6a6dedee789d134cf8cd4244e031cfb52add63f1abef0a1b3dfdc1604c304c26013d1adeb5ba36c3c0a0ae94731db3221817717ac5933c9bbc29e9076b33ec6935b541873b1a2d285c4d1d92ed33e4b2d7751ba0875c1ef9a45c297b34817e7f5b6cc71447e7a11e374358122ee432069fc8f41ab7636763060a306a1df3706d40939ef3265309ad2c0b8bdc12a9b805e75bb9d324616d6ef9b58c57531f6e6a3df7aa2cb7d34fea19502e695bbe6fc81dd19ea905c109214e5e1f326a5359196086f0e62b6589e1180dcb0e446909a438c15d517327451a312cdee2e4cbaaa2d1d496f80077714146764601391574c9c53d7531bd38ec548d0ebdee1d165be9c930510aa24c15ac70a86ab8c67dadd5a2ed5b16650d6395d91f081a969d03e7d4000c6667b4e334f49f1d48809516e093cb2982d9302b67acb9fb04c62efd49ba0c0a49a1ab3662669d85c549ee759a7c960120a021de8a7e3fa191a027993b02ab7c5890707ae68f04d71797bdc77d8bff79be2695cf28a57d607281ac620243d8152196705d39914430f9b76e7622639f1760d96d1e71e6c69f8cff86dd1e6c552fc47c1702bb622f1813516b86b131a4bc0259096398a13e097848cce271ee205c96cd65c5a9e5a11699604eb484d8295aaca79348b4a20a41768ad52307b3729e795fd263276c2a082815e38c835655472985c7a37c38b4685958ed5d98d6c3dd3bc33322559194b117df378945799eb13af26cc0e6e84fcef9c82255dfaa80a6d852644a63e34020651ecc7f1fe4a4d7c061bfaf85c1aca1ae0496c45d3dc0e5f834305418c31375a99fbe50123896579d9fdf703f2c61d6e6a6b498437a1ac3bf98234fd6ebf79b5836d54976ad89a5fb09e3eb998982b072a9b12a9d27c1dd34dd236ac8921a5a38be88691fbf0b458511b768d581aae7b7ed6bd3dabfa5648cc9dd2400dbcbbe61738870f7de5609e28c75c99373bf6985153d26b00355bdc05f8f912ee6358a1ff53e585fa6f9654ed2babde63a8c33f015914827377b5b5b3585d2e70827cb7a857a9766ee759caff5650279145321ce367c1e916d1c6cbbecb8c140d260365e54bea89aeeddbb6f617d9393feb8de2ff8a98bb9dd6ae2a262c5b8c12e14b3c38fdb3024e605738e54d4478b8b3528a8dbe57cc050f3b4844cdc3cb1d54431c48cc0efa30889a37d0e76df29b23d48e026e12ce105b40c07bc30abd197208562d59d8b8b460d82045678e01eae222211908a7f80b8b2cc776726d802f38caa45ada69e7ee00cc2a0584c4e87b7c82f37bbeee59a5e843b26b7291d21a075da72406d7711dfa01c6459b5205e5ee3e5f920070ce6f8013bea7a4170a33ab5acb2abdb6f77162e8edf8c3011a02997e1acf73d6d3595d153a7c8a878af3a3701e5f63343a0340e7a31611a63b7b835a3621c729bb11e9cacbaf4469625267dd3baf86a9d01b12c8360ec47c51d137ea79e72f8a8ad71580ace881bfc1456dbb7264426f9c026c2c4ea05a77194bac35c632922a6cf2687f8b63a182018e287769f9521d386c5d7899151042b5762b9d3010a965826520d038041a6a9bc1acceabf31613937f379bfb0e7098854c83df1e02f9273a531a723e81010714a711b3b6f2362013e90d24b22ed4461e70097b92790f92583bed843d3b05b9d2b8ee470f8a046113364056c7a4c18618a813657cfb9e842815738cdd0f7ed33d4ae01d5b083f4ee23c683e599f2934da77334e3b7416322f74b6d66481f1149e84e67dbafb8132e7aa8c173f7bec63eeb569009037da044f0c05868649bfac730afb6460e46afe5199b4d9ac1a7fbbe10ce1d23cd7e8dd53b2adf4b71496a0222f4ef8e7ca1cff336acd7f88f51fe7c64ce462a7e668faf69597d632ede873c047812463baf1ebb377a118f33f6b2463f5d3001c3ed376072d0d2fa7b4f6ce3fc2002ece181d380e08cbae361029c1d587cf602bdf3c0568d96cdc2fa321b229c6e4c290edb46d5287e610cfe55316da92907fe09666bdc24d8707b24a16365e2efe17851f9a3badbfa50ee29e6beaa2b83b1c5cd6bbdee1afaa77e1d85428863352767ad26a79e0b224c11c5302eeb1264004236dd3bb79ed09bc8359c2d2cfa82862dce308c04e1e47defb508946a1fa95f9a8f3817770e5f1ce6fc79d6db0a411457dad3861719ec4434e31c09d941f5c9fda8d0d31016882a5785c77bae50aef9b9dad357473dbf574b612a5b08575aa3f56d0cd97debb7b35aae5c476c2b4fa17bfb417a4fdff69a3edf5637366983f617050c2eb34dc9bf00c8a17486a487ee440eb86db169b1f758541a37ee74fff0eb200e7bc16afb02e79fc8e3a9b6a746d980488a11aac8e83b8b95614abbff0704a3ae5f3c4ad3c5adf8b241e3882893e3b8423844ec0802983a1da8e1619934a52e43235b3aa301229b538dacd3b99ba5fdb3e773046f5829adaa959311892f8dc2cb97776757058a3e0442029329256d90f8dceab42e799e285323f11c9eaa68ec8995c9528de2d1a783d208c0902ed7f2bea9931f3d60c2e01615ff1f88d92851a9942db7439ce825645e9eb5124a13405295c7230b0a613fea3761c82b286391b88d3a11d4fb8666b1a2c623e6619e0dd10f0b941630652a16530b0d6a14dd186deb29983c28013fd55506e1f3e68e5cfcd4280f3f9a684e8c95c4f76ec149567c21c201657035d564154247c99590430e378505a4143334379c8df0b4f751fe48e8e0e79dd0fbbdc47ee3cbbe0f54307b4e92e499f11efdf1e191dc2419605dde4ca7544d3966975fce238837ae146294346444e8f8d6679c4beb5456892ecb73ba5dd4f712ec67ccbc28e9750e345d9b4769477f510e210909e53b78ba1b40a128951b7d469b756d4493208bccf3ebf0b85250a4a55621619deeaf1dcd90f245b5104d1086ba0760722353197a8185304a8a6ea623a3a850839bae05efa03af69b75b873772c5a529c11c8fdfaa882baa3fcc88d2399e9714317deeecc453037e142dd1fca40d2af03ce35ab807e6288eab70ad8b1140e9124eaf9040eca79fde33d92b7603e8392d48e0cb880934891bfd2816e16a6011886655a88ad5eef4443d3bdff8f00616b9fed752fa0bb4180db4cea89c9671d070e074fe64cf7842cef16e260e29a101fac06b730a4f280bd452550bd5174c436026d0e2e2fa8f6970c9ffe1988160ab3f14bdb0ff0cd58b2fc16f493ae5a71d745b84078dcc6619984031651a1257596b59fb04a084d82245897c417d58e0d640c1885c6d593bb55a742c8fe87a1977569ac14c70ebde25ec2ec37685e47dc876febe09b960ffdd6a06131ab72f7152656d629f6518157968279f7ea6cbe4d6f93b39d4214b6097f8178d4a23260636167602fa541c877d66f25773d1b0c5657c7fcfe184f3aee72386bb51e98434b6ed471dda0e76383bbdf762104c232b3160eeda6ebac9357ab1a5844d426abd7e4582ef86573a9f76a004f76e582be96a616754a47b7a893304281e0d950da2b6017e7086178b63c90e016392cce026ca5d1189f9750cd486a35c31ec4287f3c0100417c44228dfddc9b546a8c8dc710e1e8cfd4f62d79b75b7ad9b6031eb8d3ece01a4b2e9f677fc5d0eb993a4de3d669fb74b9a47ff3b60b4f4a49d9839e2e10e7203dcdd868c352fa033cdffefee6aaa1a2865fc792806ed032203b168ee5d7b7d9814dceb13fa6ca3758abf0b1e727d7adcc7f3b8c805d3e708ce409374e70cd91b14ca43aa3fe5d6fc884d309d7dbdc6c42b381f606b05fb4475e83c96a7050509907ef2a62578733bf85fa5e741c29416a9c51e3c3184633c1037605682592e75248e85ed01c56244bc994664fbfa65439aff53319cbd23d9a94315b098bf4697a7d54b0b15a00f8e96b28c2630fbae164651ca1a05b428e04ea7573420cc41df31c46ea6a061b3e2f4a43cd6bf47773a07b4f9517c7d671926c3b6b72a12ca4377d6713035a997be2bf9d336494806ea2799d3e84aa3478a3cd477e619c9e752435e0f350f380511092b33ea38e8bc51c29b51dcf9cadc56a2de8407aa7b25afc489c200b1bf4b4d884a051a8ca0b59c3f5dc9d16b5b3b806bf84e6539717e88a85723198078de071b40fc716f2fb139de3b2836790e4849aa83d2bd19cee8f99e00f73757cbbb7fe0620a37aeadca4246298a27e201dd37483b146fb3774fd683b5c87b081df682edb770b535e73c94f3cd2f124344c696fec44aeffe1f47220b2cfb248d3058339301bb04d1fd69949fd57c53680e050084813c0632a7e49d9745ab03409cb1e326f39ff9db517a1041ef60537630f35a76070a29b154bb813fef08be70248808fc35078a8f9f9fc969c6ffc95e22b263119713421a38bb1cdddc1c4f1fc0476b0529328c0716876fe70840b5abe9fa4d70749839b21de3ca15f630a301a1545146ba1a47a9fb30495d8e18004e6878314d1db8fb57ba6b08d229fed35e0902b435dd56f673aa362428306fe70784d95ef1d5dfad8a3c6e3bbde49c65a2fbf3c2b4de9ed3ff2e1580d4a447e34a23e5d462c3c5a20c07735cf3c16abb6535c672baa78bab4fdfcf440d462f3e38ef65669cb8e13c609c71f7d8c409fd355e9a5086fc906df90eacd3a824deca3236ea8bfb0a0dc155af36c9e0f23969269a9fa86caac5635b37b1635c73382787eecbcf514424425f4f20f7d4c303c7202fc2870f9168ce6a7675146095f14e8eaf47ed066e70590466c649c90c9d5bcdfebc0fc0afa0ed791b7cd989e372fa020ac3a2a4ffe7e7aa0925fc9e16739d55017a60189149d5c4f603dc4a5c57fd3500e048cad1ad7434a18a949ccdeef3dbc70ad1dc260970cbe78148279d77a5f9f69c0ac9ed5f633c87b25d5f5f2fc1efc726412ca52989149525d07f504c2e9383a78bbaf91ef675281fbfcdfbef849ec082194db2b1f6299ca1acbb21ca6bce11eafb49735da411b2bfde35ade2d3550797452f7fa336bec151a02244ded8ca7a341cf0663a3253e0d39f8ad7eb8e30116ff834901ca480f269664f1ddfb048d694956c90be2f467b75ebfcc8ff19198363b36c64aa16d0e7fa47c804d3c79fff60980d453a6e519ebcd4e46c676319a4dcafa738dda9cd87a1c63be1c017dd49588b98615793c8b4c0174cf7e40083b8eb4d89535486c65da0d410df6cba41c5d47ae41f840993c53a15cf847ee5ec213383b278e271e565093f8c152bb67e7b37c71144ba27b284e857f00df3bbd59386fbce4842d7a2e66af3ae5afef91f7842e7f1750552169246e65b50086950095fb5fc41cfc94938005c586c4ba26b60d6f5cbc6383f89bd7e8f1f1448136d72c2564870d0d9e6296d700d447c9d2932ff032dea5ec80f4040499bffd1f762cc9ade7687489bcae074034df3744a0e7da6e372fd2b7b9fd612a5ce2d7c600b3ae9d683eb8c316e87c9c10ed93e33a09e53a0fb1959680d1e94b8b63b3ef819507bfe219373b3359d76515f65d37ddae0514240fa845be7d2a04e5601cf21285f8696bad093405330a3522ea212445a13430e8f8d07d47c0c70eb5427ab75363b296db00abc90830e576c7ee088476ab5b0b732f63c823edc7cfec21d358307659b9fa6a64e530ec61d143b4cec72d7dfc09a68e69b92dafdbc89db2fd9ccc92138abdd9d9790707e4836100d4093bd3693f86d67234ad01c32a1eca42f45d407f8406ecde1b3ff3b4c69c7d2829794dc36d4ba9c458db630c97bc9142c4e9f553cd6bcdbe57243b522bab87fe6c5e7dee657a416f634230e477761c8a09c6d1fc7494c4d9e0a3e9ff5e675f5d5e77eeef3d9d7ee32e797017da0d602bebb9c0a31fa76dd4a07c9663e12769cda62443e843fb1b7ebfa500b32b80b4748558a517941157cba85b7b5478de00a634b7a007c939d76705d6bdce5f90719b2a369de8049db24a56371e90168b84fe424ca962ba81acbc6319c93f79429f3ee183ac123b62b0355aa400ac48a42420ad9d22a9734f2a3d5647466fb2d586e3b4a39e1e0b140069e03309fd56723332e8575e0135de9160b0e34919b34485c9b80a42f4fed6206561bdab3df0662ab9924d938be71b22a9bf211412900be64fc4dfa60ba3a997400948f1afea426ed443542239ad0c5f530588ddcf46b6cbef2a6bb7af87f5b312d4ed2665e8758c21e0cec2114592816a48bee7a4d8075988c798b79bf08e637a2491c18bd8a64f1a726e56388ba6b09100ef32e8c791708e56a3a50a00e2905485b8889595b8368093869f4e5112f5e0f17a645f3928175df2275c7074da13771294563baf0809da3be7123aba9fc8ddcbaeb2bc696f55d0aa415ed2fffe1d2e8cf447e63d19fa11d6bd646996b587694a678683b58261dd9c55c15337b604e7ca11cb74b2bbdeb64cf685fc9983288dc10a59596b5a65c473650411693c9700d7592cb62fac6a28cd99d21e8fbac7de0a08781fc8fd905097540db313be6b778d2f8d69cb953b88ba855a2bf41d1de9a9a5b929b7adb8c84fd4e712d1e0ccdcc4eeabbf12c842cbc661bea3b6783709adb0d89ca318801352b40b63c42688bd843afb882fe5501470bfe8a68ebc8ca75c0c112830e0fc9d5d2c703e022291ca696d3de31928ac40d280b748a73d206e39cdaf7ff1c5361828c49f0baba62adb32cb366bef8a2a645b7815d6b8af1c5cdf18c0f6815f06c903e41922e0e51ad2581821cbab39e1c95c57b072a3598a6f53ad41c9a22eef0a2bd0fd4c6ad497ffca6b8bda80b48d805b941c1bfeaf63bc5d24ea32e4fdc087964119586ca259530a5768d541823d174ff691924deaf75e74b0dde5bc9dc9773611dfdf5adb31ecaea12789fb98e28e6a3f309f24ac81a2e552cb9030faa9860a4ff9a687fdecdf8a89fa5d3f6013fdde65f55fbdb604fc7dbd6ac1a4a2716cc56f3af0e5115a997d14e22d0b8ac01e9ea9ef0f505c5592ed221b123ce8cc72bb5d311f9539cfefa6974db7504cb22919e4612d85810fce284cb7e63db0980a5d880262cd2a45f82a5f56bbab238a88774feabe660914d3bd6061cccc17018e7a572e4f8308b6e81dfb22329b606bf3e4a1f2f9ec84d616a7cb7396d7088deebbe1e7da69802d48b938919ae02769512da980f6bb853bd8ef7c27347fad02d221741a010f526ac26c2ce0cff121cfe95ead8d988628c72f4fe255b7f1da09bb554f149c292ceb3eb8bb893f2e6dd9eef5b15c6ca27124fbd971727257fdc5d6fb32b00530487cfb214227180b397c7a3d81a4c8157485fc0a3cf1c6ad5045d8c3958ed51cf6f578941157f235537aa770a68667dfa2418c3de3f2aa92ac3b2405535880f0b9f4626940d6ed2d1050471eaffc8ea3424c2045dcbd44ea62caf671f08d4ed0257b78dec446ca08d2de244a2ecabd859b9c84a76c13f0fd955bae9abd375f6d6cfc841a1549888fcf7a35bc54ad22bbef83bc9bb15ce79d81bb42148714b108b11142d25fd7bfb35f1912b7b9cc48a71bb50af27fe365552caa96170bc028a5b86ebe09df2cea4a97a6744815f42c0d99001f1ac69369be37394b88c2b02fb0163714043e66fb26240dc65a9bdbb88dd7554b1be8803b9acd1a4965fda321f980513f2294b9874913704cb72f3897d361a46aba0b2fc4e2ce3eca2ed7c4c199476a00e0a1a00d5621e5c8fd68228b159bb20533c7a92263e24f2c68e87b2a4bf3f7533313678047645c52bb10ff5ae53495cbe26a917fe7bfd7730199681a64ca2cbc05abbb5e1da671801823f07eac06019f86f314724a9b0a1feda4a7f74a917607530f4344a8a91ac59973daa8a01569a55ca6fccbebe77a617a3ca7c4996aaddd571b60a336a6dcfdbd90cce003efe825c45840929e458df6f479fddc79b66e49bb43f1c529c69b3aae0ea9e25174fe1fa7797dd0be3111eefc762a308e825567bb799c2e70e45dde8dcba51b81e45edabe0558433ca247d8a7143d3e55e920e5d6257aacec0c2ee52d2fe8f642ce88a5a7a454cbbf05c1c2107dd646f7570276bd621ccefce56aeb6bb66bd9d7f2d3a7908bcc913309d2faf6223220bab3b4db07f41c1c32a02bd9e63dad56624824e7baa101c037a3eeaaa273654be6b530ded74faf2e9f1552076f283dd90ab7ec2cf97e02c68aeaca6d2ce3291df717cc63a4d4daf4573d7de244d52c2f5b7fa74a0f7b2013b7b88000a012dff7cfe905cf5b6315c7c92c6f75ccfe4944fae5468524cb2c421bc5fa42d6728b41786c2e0cdc7350cb652fbd52eac7d384079e70fee78a59eb082d2b611ccf6c26624bda2c4b570668816e97acc6accae8360e5be1cc5f7a63e89a39c5d7e881a29e9000dd1996b9ff561da4db6465faea883e2d9f3e15e2e581b7ebaa6bf09292957c5b9cf6d50552625da55d04360a34ae17da161591735f6a738c20fef480fdfc5b8c21e646e215fa2b633ec63884125b40e2bb1dc17a1f70fda83a5b2455b6590747792822f1c58521ef318669df4f9a233686abda103ea923ef7f377b31ff926efc784816dce59c43a46344085cb99b3c578728f4330940c3bf219778f35fe1383b1a552b29964c58a96121f2d7f3c225ed6ad9c3701f2b75e275d326ab4662236bc1d65fe2b417e21f6b3f60b8b74ba97ef1a9b0aafbef16a0dd9faebed3deece7d1e04fb55a44ac1540916a19de5d9be5a4e1277fcbfa18b19a20c86cfa49a40ea79a04a3561183c2d20204b73885b0fa9e855b5ba02065145eb037704d9112f8f855dbab0c007c10345689fd21d4206aaa5862628be7c62f250c09931597b1233f5243a4b9a676d80f88740b9e888bdd207575a1b929f5841008869595a8f6983c8c83388d4d9b384ad38489cb797fe1a13d966c7ea90c70475875334fca405e091dba206742ecb8792a7158a234ab9a6412adffa836ab9cf97d51b0f16c6c297e4fcd3e372650722f34e9fbeecbce343b339271228227e0ab14f400ad4b3bc613d23ffc44b52c063a04f1cd68bd4623dc7a83a53034dbfb2909cd32b0b73bd9e9e2097eb2ed8a2ec61852a36a6f2adb563d156266c88d4a6b850bb2a2f3185c1367926c5b2c143a78b70a0ea201a374de9455824439a35626ac67d2c1d2e0155819b6ccc886991f1458f957dadace83c7913c258a829b15497b709fd3fe3021fd709e1e6421af04d0b96d720b9dedb191e1cd807871163936156330a7365dce1d0c3612b1d845aaa19af8c11a68bbf4032acda89378a6e6e50c4a7321bca8fa35be296d570baf86bdc037a28907d7f4f4ab8fc81b896d081368a0470e173b778e3635a56682d29229ef170973b44c7258ff3c2badd6f72a06c51daa53ac8c6509898c31134faa862a6a953255e94039ef50f146e0303b8c5fddc2a5e1e4d849e2713f31bc3796150c2ea5df7cdb2fe9c0d450af2366887b299eeb7a9ba1b3cf69ae6ff860dbb3db646b986fab1740f98b574ed627a9919c039bc7c33f1e4a11bea18cba6e2d0d3837740448e2d75efe652f1bebad971baffc8286b3f42d220266795f6464b88cbf51ce80c8c24a95e04540b2d26c99028ff779197aa1a4cc024f99b344c64208173d9af75d92e17e12de96cbc8f2b3a13431d797b477dd5479ecb869f2d4d463a416e1041c64167f7a16fecd274b379732ae4e42c880f3a77a2015600b820e930c244cae27797b4204a1b144e52c15220caf1a3bc6b6facc71e5446e5120a834ea0f2c1e92481a5329b1fb9860803d5f52137a75cc8126751cd3f9729c212dd084338df512cbf3be715cfe5fc11d55042271fe29b3b2e55f17557a24b3effe8c52de1b98b52110dd0a811ef912f9623bc8a96d0b4dec4190cf5fc241c30373c277a2b828a0fbdb6aca797d59a39d197023e3f7f6931e066ef3e4c69e4917722daf18e05b02a5a20bef0b205c878a92b7d44b6dee52580fe8fe6bec0d8143879054aab5b7fa52225ac8c3695dbc825874b5735fc6db0cadf04782be052d6fdf58d2dd4ed1d40a5bcb69e55465b4f6557f3de18b924b8613b988f4aff18250d732349a4553044a50e38f42e6fa47d5f5c9d3d8171e4db39bc12b5b0453fa94b79c648521a7692122c83b0100dc6c51fad5f0834709fd68eba95a3d0185eaccef5c430ed5d18af5caae398b8fafe2f4f1a50879674a15b1b3ca18209c28dccd015e5605b1d0f1dd9a078cfd92ee408479954b79a6fee073fb68ee4a97301c2d85f396c76fd555f4237bbfd93a9fbd74202c34bff09fb5a45c461bfa06b57aa00799b4cb49c56b150c30c720234d3d066250ee81d13c13dda7dac46f6781ed4e31affd2b8dedfeb5118ba7c782cd27607cd7d11da2d9c0b858f7d787a9451e83998d99ab6593eb3202e593488cd34d4f6c9b25e745070274fec375893dd6b30b0fe8ba4d22c7367692995c4a46e0e7b08c33257ecac816d88c03f400225988256b40721666da4333d76b9efac5100647412e6847814468d20a8f9737a092462b0a529f4cc0c141cab7950466cd1742779ebdafe0ed74a9c5c57d127c4007cba535cf29ce520b97fb645f0c19731d4c985f5375fec019237b95616a635541d8d88bad4f1606160c5a8bff8b7066e8913c7058dd9b6883bb60d27dbefa1fdeab937d8e7e11acf120f9cc93969ca8c1ed97550486dd6c1c4b3d8cfe97b3df2094b931b181366d6e01fecc08dd339ff8702a313be00a993eb4e1528a3e52006e6a2ac4e0aae27ad6a6af4a194bb26e62f11082c34741468d47afd57dcd28c7ee23915a2cac5552193a070f8acec4393ce365cf721f98b168db8c1066c1689b482be66b17c4ed94c13363245093b8cb8fac0143de7e78f7c2f99a309ffcf512ae845fd56e9c573a642ee89395ab5f5d9562c8ea6dc181d9b42ee5cc8a11f97428c86c77c7b8cd5dcd5008120214e6216e3c575bbf00addbe45c78b337a2905daece4ca1bef3041cae08e8c0d0ed0c96af661a83815bd67353e3bf391b6cda45f908b9044c334651d95f14670ed06f375d5f9797d9a91f6a595f655523490a98166287984eb2259f3eefcd0cdc1cf6536b327de6e96baf00a695611529b9c4cd8764d96f7254ba4dbce7e9ec7879ab7214cd9f7a89124717e18b6163349b6b687d1f19a8ecb49906a80540ba1d8aaf4c649202a4914d1d2c7d115cabe329dd3ab29ee6b30d16036f04f74e5d10673279ed99318ffd25df2904989f671bec88b6ee35199d88f695ec7c2a70c2ecece42903824983b68a26180c70072fb0d02777be86564bd8d08d58bc007738df855327941783ec608b629b31d71f1a923840864b17a494313d61920567d85f94bdbd5af073a1e4a27a8dd5b9518c3ba28d2cd853bb2ced26faadcdf48ce8702eaa2ff550d71d13114b5f460af549542ce6fe75451ba6761892e62462a36f2a116f3cffabbee3c3aa379142c8082530217476bf7cb83f81ad800094240f7e3857b1b8d16e44b1b9ef16ee931785c25542bfa508f303bb5bcdbe044608642dc2b327ef3128b6f15b10342311eec8e20994e1820ec70c767b6237b74a396b22af23c86cdc798f77aa0a4f44575dc6f5d32ad4bb0103347468cdfc8b3b067820146c82b1339508467d1a8913edbf14b4851b10c1f3624697903e47d0107cf9d93973739bbb19967d05ae6c960ebe2380694f662e7f6d0309ef26207b1a1b715eb8b215acf0508dc7672dda37a50935bdd5fd7de901badf7b60b5bb2b8b512da3389b7ed569be8ae09360b65c15b5a99a10cd46863ed809ba1ef8c67473d5d6567a4137ac399cd7d729bbd99d2ec77196f8be1acb99839d9e666e89c449b87631c7863833ac1c6ae6b3ef01552c4f0e5d9a8914e0cf5ac12fb8c75eb80c4b0addec70c0ab9b7d21dd236cb0c2802e549f2fed31d40fad11da0d3e98387c42ece7fa6857e0c2fca03877906818ffd83a269b45e50615e1acae2f978249102fbe73c7c439320e2ae833a87bdfb78785b6a954521cd8ffe3907dbbe2758a2cc797e46ac9cea1c38d3a815192cb290e9be304bb73e487ccb1450872ed8938a48ff07d2db5ad5cd933ed99c9ad4806a148ea66a6140ed9e6b827a8b2b3dcaa444c4180f2d0973c21f9d3132fcb80fad00ac8406ed1d38e31a54c204d563a968134da8e7f3cf9b52e57e263c49608a32eddbd6e8350805e26458b2440ecc507ce43e95f0a5909ecae1841fb9d103309a22b63c245e14409624c37ba86e05395355fa0c9809c87d2d011ca820192dd9e2698e470f9b9fa25122427fbb363087c963e9d62fc5553c7a0218e6e5f8c7d6920f143e170b88a4bf42122fbf9b77b05bf90f7dc08f54c61c713fbdc886e6508e732394a36fa447b7e4afb9b8a1b65b07f6aacbb0f2aa1952bd1b8b89dfbb6e32ab53ea11b42e16bd851e1cca116dec0adb4c0fac574185754c6e981292ead5442b84aa08d7d5184a178e6d75e9d817481e6922c2c0a07640ffd1c208f529dfa8b94b7328f97215ebd080d77afa3b0bbaae9e6a9944e77f089e1dd83faf1cb3bf7dc78cad3d584c9d1c94484aaf45bbfde6c3f2668360c92b640e738a49b57494860b79e9c41afd7be0feb829ab651e8d99ca1f704009b300ec8c86d33303f8ad3e9296c9c5e70b63f221cf255da52063bded9e88e44d4342a1f7e3c3b2f6503d3d5e4af928fe2bd18cc8e4f5ceafe79251d636d395ea344ccbd7da854d9ded8496b21274c34349d22facb8e00aa883ed59c98b162ba7e1a2598b5f7e2f018ef5e54dc1705902970e8bad52f2cc8dbbdac1803792ed3e83dfe37412a364daedc65b2cfa5c2d4d22908cd8e904104774c58c77176c919293dcb2460936cc51fe2057679d1d92db02e5927b021c2a6b313da2ee5520b46396fc2a5c9aedfbd3467e3e17c0d2981df899f243af56368c3874f8a1fc4a6fd5a787b9ab4ea872dcfe4a875d856793b9790e15b3c5d620084384bc105d4a22681f0902d0a3f6407583a57f8fee43d0c339189acd8a8b5f2d0b7fadc88bbfaec791f1658ec3de5711b5d41c2a4afea718cf07152d9a5bbeee80b518305f052048db10a8be20ada7a24038cf1ef767e71a26e4e4b77bfd930b64525dc284d65a46e2e849c32475143aec1a33bf32ed48ebbcff9fa20f2b3f6ec7c815fa2bf978e9f52bc6ccf2f2b588776831283b872dcbdc24f2baadbf4c7eeb72b9d03b8eabf70d424ee956bf2084310b61757a783ef24ccbfbaa52586a60a13c5def072d0a1b2b04c856ab94c2bb51e893d3b63281b91a79486479445658834cb4f87ca270e8feede1b8d00ebbd5010cbe2d4e768efc621385e9be402004bf4282c2b76656da837ccb8a366d1a051924945d3412fd12dc0a4139deaa726f0189cbe79716b2d6351c3495638f0fcb807ec8f06f65a1536ceed4efd7d9b646227536de7fd879c224742cfb67e1cc95e4930ff4f5eac5647894e892aaf4e3148f12b20846d2f50c490eebcb114c30b8d52699693e3030a868208101b1b469f44a38ede7fb4a3b09f508846517835e781d633f1ff4315babf3a5b63886d5bc3cdbb54df3d9d33d0cd50fe3562def984c6312f15bc41afc4fc7a131fa66842cbb7273cedfb8bdaaecc2d565a9861c25dde4feb410b933a5bcea48cada85d645a4099e68c3f4e379162ff2c155a117593a7e182ed61f5d07f4e4fb3ec3bb3f266a5ad00478bc5c003fcba008d778ca472b4a7de4f12f899560626da6070da176f7ec95f97f0da96ecaac5e5ccdf59929e9d011390e8882d056114dcacd30e4175f74c7cded274d7d42ec53021ce4a8fc1cd68bb70db5eb23245183b169f94b236262a26236091b2e1cacab1cc49f99b4799bef50d56ba3accc71f6400f9ce6070f4220a688d1e8543f14b4631751b91416e9ebb4b68873a024ee660e972ec4d9062e7c122c2966dd0f9d9ce5aa3ad9226023e06b8530aeadf48f6ca2affaadcbdab83e77a40278c14a15656d7fb3acf98c0bcbdfb77e0be39f3a8694fd1f166f11a6ff20c48c020ae53b149b07c0fbe82e976dd77fc1a8ed95cfe999846c8fc6259c46cce60ddee3ea4778c7509b96fce7a786d334687421d36ff0c258dd430322436789776993fd214d4a0557f8217962596790cda8929e627dcd0b71d9dc08449ed5504327589f34397112dc833c13198f684771f7f06f639b4f3303b4dc141a2ca47ecf9d6d9ed9dd51e9f8290a466689a6d10aa64a5e8946289c13ddf96b16802cc0b91fa973a6a55f819d3036757f841c7b416ef9c9331baba8adddab1fab393479d1e0b3d3cecfd1c09b5fd0405ad2ad29b40f7da6f9f7f6193bb241593b59d613ac20b4929e024f86e96b02744a772572549edc330163582fc570de7d72d66815bb9239af22950c170be7af5ae12b7d139ec029eece80df6accc6748d26564765b5cc7d87db7aeacd3505c28d772dc407ce3fa91b23778146a7a3a5e883d7122973a280df778e8cf706abdbd3fed3f5641645a9c7297cfd8fe6238d121b88834bd34c0797728c688490fa4a5022ddb62749b7d3841665183e2ce83285fb710f4fc7c16a00bda7f1a9536a800211d44b98356e0c04dd925afe8b8e17bdc061eaa59db083329e68bcfc91ac0a973c13a685179b0d0643499e4e5a0c5ada8b39a94fbd3a430e03da5c2a5d5ce94df1bbfd9ce7d6c0bacccae19b45494b61b6ed4f1d638fcc41a3645c46f272ba897b792dbce9d36bcb15c8e08324d3133f736254a69f04db126ae202fa1030f1142ffc0535445171a2c432da8a748db1c5af5bfc5170aa315ec34407d46c4abd1e2cfe685171bf53bedda93464811ebf3dab7d6feaea1dd68497aba7a1766a9e701fb0b994a505a94bff190608c2962b204fc26269b9fca2173bc5bf976b51877f498a7c119a53258e7b5b6d3ef30475943bb67adfb39b8b759dc4bb51ecb5a55291ea001ff1dd59a7016562fad6cee65aa30075df72bf1b28c3c61a8d3afa17647209df41434f290e95e99b6145ae48da46cc5e87eff5721c7fb32b648ac2dbe8b9c2d2ce5187c906836eebd0d6b6054caf04e2b97adc4f02706cf326fce714bf4c5787743d8b50caaf34f282503a8a6a5746c4c374066513dce1e84f8ce8eaa4949cacccb607a3d8f9fb2add72a86fdb4d1679d5737492f30c6d8433cf1a4e665a82716bc0182fba339304026c3e2e9f402c4b9c9547ad9a2c682ff445d995391a9f9119d3ddbec50d98d33cb79f6201745cb3ca17fb75916c9b9a47a9694dfb92bc247cf6b7fafd673cb5531913531994d60d4f40b3874df2bd17791470d5ef86793e7d7e37b0421d856015abd3480af4e7757c857520e86c23497c8066b57001efecb42d374185b05a4ddf535a0f3b231105043ed3f30d60273860b9020e791be008da1f223b7556bf5ea377433844dd717233f96e7ed72cf2cd44e0d37b84942b69c8ec04acbd47e793791f3edcdf1053a82e94e555a19e4b622ee051ce2854fa9a3ef31d1bc458be0b51b4e9b688e6c8f7f2bb32b503cda1cee63f0a2c0be19117e2dca180017d09385985fba58398747a571e03c041acc37e411990d7dcd51256577b78e878720030a5db155e6f852f6647a15aaafe6f4f2c47aec894557cfefb057aa3e47f60fa9d2e21647b238a5ad9c9eb2a16f1e7577974b105fc4a6bd82fec8fd3488b8f45fb15cf7ca411e3c06d403963c0ca63f0fa732775c4b21f371608b98961490828d2232120fcfd1a60af8ec7e72db43e3f3bf86dc7e91f6ccf42cbbaf996d316c5846edfc52dc2e0b1255309a0346ddfcf852675b81d57036a532e4f98277c110e3d4ab4d204d5a1198791b5be4a1818a6e9546d35ea625eb2acbe16509089ac8a8229fac8b75c58cbe8019bcd42008e8e97acbd84955e4a45104f45b6756fccfd7d9092d1c99fb53ea70687493adc5b6d280971cec1341edde26542e8876a2b5a4028f5d6781f6f565f1b8bcad612079d5245e60a23223a42563e7904ade20689924a6ffb4bdb4d6e25e993eadcaf6eeda85697d65ca79047f274d89b98e3f062ea4036ecdfb3d9db42b28395c22aeaf96face97f52ab58bfff4fa21b60d5a1563935cb9bf30287af49ad2d5b67e42725a67327fe02dc40113640edc0e8ac2c4e70c055620704e6b868afb5a050694f540c7159f7143bf464c3a2862c33be5e19279654a42fa44d9918fc5f88bbc9c2d51a33043ff6a99b2fad4245cd53b09d41610e22aa5f8179a8c0ea22ba511cd4bf60fa696e2be6e69c634c32d05abba2b81be2c499a73218bb09be7172a4dd548d23ffe456165ec1dc88059549b24eb56707c4288f5b9a71c57f22c51272586ad60eac0b77825644d661d656c4baf27db33c4aa6f09927f90543f904ab54c01313fc110544f3006d6d79af6b7e1d8dad7cdc4db9d68386bd1f69484c81abf0603a6bb854bcb3c6e28cb3aeb35218f66509fc24e63e92c26f8b86ef55abef2216796ece720e1adc22dff6cf76fb5160c6add05453ccb416abea8a19ec68abfd7455c3bc0c79226423bcf657a358390ad43e95600ebf9de1469055ad26085579faf0b34f18e225bc4de777bbe59468bc60746a3c55c0216790efc56faf2a3137ecf0c1fc8403d5e88e691a05bcf21b9043aeb0c0395571b0b13ab49f73287e6b6c63e793a1e7590b4cb8d690ff4dabe61d33be4a2d2622883c043722c11d771666d4ba99c26c2cd3a96509a1d55f12e922f822b4a7daf58c509d6444216ea71cd029d2ac741abaddd9caeadd76eb7c06356bf93ef045c4330e8c1753117270b9bbe3908dec80356d55e377554d8d2708551785ea168f8eee163c46cc621e896a8afe6318b8fcb39a2ffa8eb4565b3913c9916c6a8400c599e2434829cd219cef5333ac7e70c9f1dfb9dde11743cc740f6400db4fd190f1ed33016319014c492054216d1303c8a0066119f5a4ca3470a06d875138746deea3e3e5b46af1cdad892219634a2b163c6702344e7d77875255d9ae5bf1283ff9da3f86bf50b2c1d2b339c15aad28f8d6fa39ef061edaf9d5406b3f54d387283d34debe055c296c7c3e48f6464f6f697ee81408f07e02b199c1725a94109f394758aebc0ba493098a85aabc8cfe897361f60ae0e288f04b862659a489f2f574968029c070ed81cc7809f6c0c0f8ef909faa4fdd7dff19e025984eb3767eb1759d904e1b76e6b917a15a7b909027761b218dc93b5ec76575852cbf0fb781887012b95f03150c6424eccf100d36f4ebbeb922b0514745ae08dcb2f50c267e68a49b3dfe1228c24dd1909a7f5fdfb205431c03432e82f0275680d6a46d982e55358185564aef359cdfea9d4c6c2848934035662325e298e13b2d3d68ba946b40c2f92711b37612433efb1ee04a8c931343b7d5ddc8396dc2eecbc8dd0d28464b86dff1c784ed65222a638336cb0a81aa608378b836178f3217a9fa6cd7814b2bf45890c9c3b6c5759d718f0ac5b5fdaf64040fa81baa5a4af190a849ef09a3707f7bf1de9f009f54d727a8ce9df95e817c75ea12e9d4d426df01487a371a6b9742f75a202700903cc09c6408b178c5834c18e70f46247a00b2da39037cfa8723dea7ec37f3cf280effd91033abae873a7fa98e3abd3796c8303fc2d5b08afa095fb976361af360568b561cb16c78bdef39f8a32b6cb75b95f3afd9e4f32f897d0acac46bd69c06d6e9ab3b5fff86d78c616faf79d43c73e678d7715bce79797f86dc451ba4688b2b7a09e48dc552ac40ab21146cc4890f8493a0d93af62309c2331b44d54412837c1086c189ea9c224490923e304b9d361da0fcb3968678354bdcbc17b84d003586e209b96e29c33e4c0cb0c41f12359f7e1cda5851c04cf8e26b6ed42b40da7224d028cb8834a2563a69fb64dc039dd3b0cdece146defb7a9b974feb6e6b1a996c2056c965ef19c12b7213d44c3e750b0e7344ebd3887127505063cdc24ff75d1e0c57419f7e192aa50cfa2f96a4694555b88822e9d78e69b991cc83429dc1daac6eb6d7c620a503eafe9a7df9a6411d45ba4217e7bfc630f541853c52876d53fac0c65f4696a5e2a3bb0ab5aef0a7bb85cba7283d7c108b54b9cb96f6a36b49b1ad1863c83def72857ac55cffbb407748277880ae8e8ffce06e4a7a72d56cfb772691b0d93440854dc97eb0ad78f8c9c2e628d1d631abcc0fcae99860b57dd93f78452b22f301042ca2147e024b7de324f746b2382751c40f74e39414367cd71be9fcaec22eae8289383379adff4c17ebfa7c9c40c4d57654ed68a4f255f88d5e5f84a636b18ceb177a356fc4eca80dd541187038847197a088cab83b823ae752bd7246c68640813f61c640b91d1a02622c93fba0b06f5ee969cb1714eb06f1991d50a6f7ff25987e33d584d143d884e4e57fc2a1e626a9061100e7e138b07f9e8cef517e3a0643acf7715c4afd14bb6808e2f04f86d611fd7fd8265598c46f685b8e58441909f62244623d5b5fdc3741fe230f2e6bdd96bc85af93d732f5281d3db8f6bfbc96df9320fb0b560036c8e464f870b3853a4f91ca0b45cc56dfa5cf4b60378d3b5fb0783f204e26f056cf610617f848c7961d1bc9ffb7ba469afbce4e403e71e48990b3e8832a966a603789be7c4e53ed1e64f79396bb3f4c6b1b993e8d3fbeee60bb13717c84d579ab8d098a2bb9f4a2a0b8d3886655be6bbafe3fd7c0c81392bb9168cd8b9356e3c4552913c526f214faa1581c12b0b9d3c504d1e9a6cab056d0903d6a1991a000db1d093877c78521ea2c03fd7c4d819a39c808cedf55e34b1993adbc314bc7f7065a41eb249471409a9c7448365ca453281976fcd24a324537ef84cf5e4791377b51b5623c615234c9ebd71250bb3c87921331250707e51afb5980c8d6a781b9f9c710b29310c5e51d5bc0f4c10905a80433173e351d34891fe2f9d5138c398bdc0c807a2992c6e9b23d549483e0c898bdbf434a10da0b15e57a6bc4d4140ba8caac9e95fc469e6a5b7f1014558cd2e157a0ace86cbfe633a4cb4d02d7f623cde600cb8c2bb7a4e95b0918ff76bd7017177fe1aadb76349d48e8b704ebe6605f94b285c37d0a9085730ac3b18f09e0502520fb280f9aef65f5e44596c9c3df22a9ddcecf73f4778cc93bbd8dc6723f2084af1aace71ae1bc79f8081c502c4298a21aafe38b95c2666cb6e5b87a22a00c715be919cf979f505d52c5a230cad968a945c7f801ddce229090dab7f45cabe1f445e60a7744e83d6f761415ea77ce6c6c13abff45edcc03f25c60f9bf89355c52b46d818c657248685deb03c9593cbbd79c798b69c08295d231234b58f7f503f4b7e6b35e08353331e7fbc8a264698a439016459cdbe45929fc15e7eada499eaa9388dd7c98e594701cd0108cecbac5ce15bdc9625f26b0a477633b3f80ae3ed8fb70a007028e4d41396ed5df3a8fc4e2d92cc98ba78ace3e1e87da8c6eaccff657bef2d593ee2b0f1258a13abb36ddee9388baa79a891d14cdfd9cf8ab99720817782549b32054cb186762759e5af49bf6a2d4b5028ddd5de0c52911a085d2a67f07cc55643245db04ce977b010e99daa237ebdf0eec886288ce18d2a3133cb25b3103dcf4d1b809eab200dd8d97ad9410060efb7f76ca34c86233dc1484fe7bed2f017e1198c5e26d0af2cfc4b6602a33631bc611004f435e56313d0baaf7e8e514c6664d0b89acae01a1e68ece42f28a7f3fee03bff23db4fca11b875ad02c4c9f202992be4059bc83cf1a34fcf57dfdd0234e38dcaba2f88f877842f2521f42eb47a6be5dcaa78f7cced3c1bb8ba4f015f08373e3f63e20b7cc044a82b6e0c053f98c614da1d36f83918e5a105e9dc513979380bef92997531aca46928d599b6a14d717ad8aada3c0d5ef4e7bbffd20bbeb683d43a5bbb7b6846b90d782ccc0db1172cd2d7676fca4376e3085e242ee8a38635e4e90b0816f3a2cff23861fbc5e0b5f8f246daa20af6521c54078a493ca5ed53181bb8c1a7b048ec0a332af6278d815fc8b33dceff18426a98d2e278c7ef93b7b58647a368a3c35106b07665fbbee491093cac0444e523775b8c98f23f8b1935c01d8bad26eb7580180fc71350dc34ba48274bc264d5ff16b52f9e6a97049f45a91fa72089daa30663ee8c92d169b9d5888b7b008e926eafa88da31f5b94f58f35de5982b6458c7bbce94c851a822b475b3e3581215e1e0fab5f9f11a1ead33e43a9838df71efc1faad5c2d70742d0158dace1620971e93f001f9f19a2d85e8b2cd088a97e0aaff2e01f4432ea968b62fd0953b90bbc613bc237b685c5396202528d17b5db30e1760559da0f5d8bbf6cff3b57f00094cc283d229e129bbdaec6047c658e642c869438b44feca7539dc550bb177943cf515a2fba2a51edb8a73d451abff2a1e5335c743e2120eca06d0418c538414a2566b6e7b77418cc45a3b027833a2172fec59b94d6600ab00318b5d9f7571d3b5b7e972eb7d38d3e3ad580794fb6267f469515435fce2f98cb7ecb79d50ea1b4a81273f57fd9a9bf8f0d16904bf55081834214b2ef80e5127e187fbac345c0590eb8ac6de0cb2a1b0d39fe95b5573e01f064cb586e800fe203a6db14dcac852741dac593beec2a6f407c2c9995c4021797b2788d3a8f53f778e2fa5f8be35748d8442733eaf5cf7003a8e3187bd06c8af5bc61cf531e645cf4657f41e55c44ce16f38242e37fc9342efa8a19d357e27b7c3bf9ee6982c8f2f06ec689940adcc42362ceafec8a65081e8aa4a6006e4c323a0abdcc4ec235df87ff67762e93da861c041da6478565774e56c3526524988a0e2d08dabdaac7818207047d55a568496bb096d0e28c1bcecf38aa4bf056fe9ad2c094e068d862c41c118564fbcc4d8cac469cf490f7ba1c5623f37d1cdf3c47ee2e4c4ea1a28cf087359ed296fd89fcd25a6ff64db09bf7d9a0233de1e91a3cd27eac92995f9172ff93989d09806a29ec31e7f71367995a0feaec23d91d1905d9e3665f19f7c593ad4140ab04e2b46da261989f5868cb4a7078e9800b064b405dea2c990b203228c5ea10c95cbfa5450ac68acbb90ecceb99303295561c8e95dff106f090532be0cf427ee4f47b97254d06be1ad2cc7f79bcb01607155482bc312ba6ab76ab06c4494d5fe5641b08d3ad50be65e0071de1c314754e6093b4118704e2208cfc91343969a321b35d7b97a31a3c4abd4bb800e0852029a1f0281b18c5a04d39d35afdf0ec673bfaa0fdf2b8876fb19abbf5c1fa5ffa52d1b65892decadd8f8512badce9758a256a41c45f81b222deda7bdd36dae44f12b32793ec7e8f0926980242aaba0797b4aae278f2de5e08b9fad4de398ee6eee45b86451642f7648088d5ce79c050aa39abc9da2d0713516b95975629f262a748b4cc0976b06a91be14f6d55e0d74167328908a06ba953d601834b21107b84238cbf0621f955e21d629c48246058a84e102e8efdb1a9fa2666083ef6ab5e2eb806212693ec0002a98024eb50091de5085fed226d54115e84c6a3e1551ffd5572c038266c40cd6b8f10f046c7d3b6fa8d43cebcd0255e16fc6f1a4eed35dbf37ec576a741e639c749d3e5db24d1b81465131727cf52634cfabcf9699ca6dd9485e0119e7bf922c25dd85c5feba1ff5fa1f87c0a7500683b2530763f5effa03bda7ddd7d247617e093a3353ded4636875a4861751f7239762cb8566540e47c14141cc6f1a5facbc23afa57a3242bde3ad71bcd3083013c640b5d5f2a19ad451d72d5aed78f1a55ad7a70bd1972d6ecb287fd6c4f6a1206f3e9623e626aab1ab4ec42fb9ccc635901c69daba10199179333f08fcd3c63305726eec15059ebe714b46cdfa3f7fff2d77c019465768fdae877846599eb4a63371cb2e1a4a228838cd53700e6d8e1f1e2905845841e310c03ceec569045a029c8611e27e917e0c13b70f600ddb0a16257c76c673f59cf77bb839ec7eca867b388ee6fe4272d126ff6fac8b8d88a296e0f1497e3725f905752b6f1a6148769b4192ea18a52982d3a255b1bfc940bd965c2e9bd5d153fc00c3539a35bf5a3045ec87d0233fdea394cbb9c19022fcc2f010094d5a577df61619104d9a22646685fc06d8d204066f3f5406e2d3f60b0733f9bde007d8bc827288cf15dac2bc45b296102efd46de30dc706ec6e90afd65d1d4b6d8899e1f8e1a845ca51b78acf9ee2a5654cb58da95648637eae4bbc6528f1ea56b9e9122c505a56b8fb7660689bc1aaa47954e1809196cf4470a7e6df071ca20438b8f5e2adca6a06ef26bc5137ee5e7145f6e6a998e567d2f5d68589308c16c8071d5ed6d08781266fde2158ea885b75a1856b7f9fb88028c6d55d34ac72f95401bb2058c5863061cc6be54112a2e717d85a5fc34d8d48178a8c693b2659a66c1eea0f1b91b578776cc639709f08dd2d158c888512d2c2ccb852439653f42010326e9620ea8cc14f9f269fe259398de1dd6c47f566c1293464bdc9bd6a521ec8cd91f542c9f52b7e60f44d9f9f07c7808e8a900c224af81e3ebd1b30675afe2d9c2d55573ce3391fe70b20f0b9228550ed5447d36f65ff6572a1a0713e97634abcffa09fd4c3e1d49b51095aeb1f077fcf0b5cfda365a1ad9433e1e859c03e04e1c6cc88f1e4dbbf0753604894cfe12f0a415c04db9b64078290b16f2dd0793ee51f371f5f6a8c1cc1425e83d4ca53cad1a212714449fb7baa46a155802e23727ed25f14a0cc79e63d9ce44302c5ecc722bf74b8ceb09c70f075b64b0ccc0ce7e5a018c07b8ef46ff180df939cbd1674b1d87b7bc18581550b0657b81f5311220ce80d40536fcca641da33cd894ca4668a2073f82d70a96ea3b64008e5f165a53b478e22e1acb164ce74666c8c0499b952b46089cc85af591d8234ce50e3379d002d5d118248b01eb6efb95fe7056f22e93d1bfcbf81189d3bb0daaa04240c9a6509aade983c7cfe599478c11f683908037ccb698626ce0d459d6e9ec41c6fd853188c3d2700eac20001d1162eaf887f7f1f4e9714dbbaef51a2254c17c826d08aaa31556c19e35eba1b753640fe9b055bcb8ce641cc8f42bf4f3fe3709181e3a7166e61008a7406f5e4b084baeaf28a3ec7c37d7c7493a9ccf57391b9fd3e2a1821adbc7d1228b860017cc35274675f27106656dc10f233d00234771f1298a3766a8961679b2c30672e7860e7eb0736a2f18d8411e58c2c8e4c1891809f93401bcf01dd7fb908e5894f6d4adde65f349220b06ebdb0b677e1d95b5312da0576e9aaabf7779e0b7fcc654b9e883112d610fa20bf0d32937cbb19fdf5fc0d837bcc6c9904fb11e3bc98a3cad8a0a4c5b0678a4a4bbcf19c1f507873a93dba2b2e3a17672fc1a8479a779f3130a35338586e33d17c0941b56c3baa1200510114d344860993deaa668ec195ef77ee04b36ba7fa8ffe4a34a0f3dd68d2b98d2c55c719dea253653cb9ed7060703737f5b7bbc9ce5bf9694d372d75b7dbf42ab70b187c1020a791e334b8b74650fcc1eed3a3e62380a9bba9ca003436e9e22285413f35beb4540f7ef1968e7c434612a5d37705b4786fabab459721deaf35a8f0f1d5bd6c78be962abbad0eb4b4d5c0647c674b7ce36bf88bdcb4456e80bc0b2265faa0c217d3c26aab13d35eb38e8ef5ea3a4a8d070f10a79499fc6db18c71bbca68bd690971c584f3891b13f31ffecefc364143e143cc72d4f557c9b974dc4fa6b8a5c667a552538f9e9ca2f7165c485d837de927ded7562919b8d6f745dd8a2914a3bf312633204eba1d07a2248de9c5b499f1f03035bd4712832735548812441a896c08dcf7aa4444b745e32db8e76710ff035005da60584810755fefb0ae592e4512d74e73c606ec228b0d52903ecd12e551aef2b3758f6fde8c8dedcbc0dbb67ba99f4f95bbd95d18db395cf68b37048f14f6265414824fbb1730db4b0f66d98bbb435bb67ee8042614db88815e546b41be2def6d96cd75f74769b62088654141989be62039256328897fa6ca511fdf874de0cc0d23603fd4a345ae359b2bd10b594651e61ced720c577c9e70c39db32a84d4be7177950233b57f1844042fc42d825bde5c9feaa0a9999292b441fe2576bedca3ce3761fd53e7164409b505e464d8baf7a01f4226fb31b1736e341ce75d6004b245e8d6d4493fd0af2adcb0a66b4ccb86b544879458abc94a2b6d11bb9869b4676786fb6a5023e61da3b2a36ec2e713d6cede6eba90e65d2a2a8b4a7e37542a194ec501d6a8bf3de1c8823a803570613f7d15cbc62ed5f469190f908ee74bf8ea77bdbcc0807764b50fc213f4620e818e1325b97e8fc27e57d8419bfa80dd32fac981ab04531367fee763f84afcbe14a3e71febf380f4441a09fb0808c5ce94ec13c170a97dd0b699facf4ae0f0008697cd77a5c6d3630209ec3142459eadc05fbac8dff010e8d81ce22e90419fe43b9c1784f19c4ccbf09f5bdc89e8a4891602644e7e0ba5f503eb29a09a9bfb0ef6f9751f40e691b01006e56f8ccf056962d708a54f75258e8057b982c14b467158a510f46fb541a3169502b3b88caaf287a7999eba06f979c605e32cda2b6db99364d35e558ee89a3eaf969fc9a9f3a2275858f6c71eb3458d5015848c855e2237904a45d1473232d1c7704c462cd077a4c93114defc203f4652ccd0449efba7454dda3ecb6aa97397d21c622b2fe0bb7383c680ec70b1d652407b8f8005258c9d106d579adcea288b03c5ad52b99c0b870c20ff3b02cb8e084151406e1f51dea0dec888afe166390c7f8ff2db74283e5b10060575557334c755c06724206d9898219c4a91d08d2dfbc90e5584d452cdf5ddef0f5e56364641ddf912ffdd8e6c4937863ab092c2c6ede84de7f2b8dcb504d1dc3b97bb0275dd3610600f660e3950ca22e8116b645f915eda8ee503c4ba3167cbc9a08f709a4416441eb8f61e7144fd8638f9b6e642e8bd807ce275df25be392e02a26c1fdd6f11f2404600cc028fc1cf7ddf906284d651649813d0d9a43692c0e5cb08f72329ba97e5d0794fdf582bd687a0809af9143c9d25afcbbe560549570ac53562ca461f998e452534c2bc883316c045a63ee102313b41acd4a5dcc306f3fb58691623c2018357f606f8a24a7d196ab4f01e94ba02a8babc4c3d96ac44959f6d13fcfed83dde128c1b13d06bd2993a8db625ac10cb530678a67d5a040d2a49ab4c7248696b5c79b631a39ef866b9fdd1579ed2991dcaf547d4d4035a466bf6f5feed603916f2e867db0c37d3dcef847034a7162692d9de649bbdb49e8a32f73b3948d4f82c87bf0a327a74938b7a8e8d4f3f9f58806f80e03fbb49d4211938c659af05713356ad02e6054d07744d573db014849be1cf8247c4f6d80dbf3652dda115d54f04ad80eeadd44b4d1a74c1052fa8732373ddb46b0d94031297a99280a738f48d6abb3ea2f381cc890aa4fdc4a344963a8777fd0757e79c6a32ec9d97db9fdc5d4e63f06d67dd836f4b4c4216660f38da7d03ce0ab640c543644a967fb036ae02190e3f91faba101a8f5f52e55d558599866e32a0d562a4e3141df340e7d46a4124c377c14544d62810517be2894840c7f4d6a68f47f8a25491ad99a4ad687295a736a2f91479da8fadae820e32bee4746134380626f0743b7033c9c305fcef6df7c6a67d1fabd2a19ce7fb67fd2ce3154d873cfbe40f7092212f8e236f24cc084470297b790a996e6cc1da913f1a0683bee1d9d493871b813931da40c02cb3a59f5956350f9817fc1f69891125a3f9c1ed7ca440a35cf7869f7b239fe01d353596bd2aad31ea132b20a0cb1b1835c53cfec004007021458a867318c8eb841111d5f4374ea105b52fc5a548b7d7914228d25f6f3212c6534003535985f97c7cdcb0fa425102a1f055534919287e17cf1c4b8f511c786ad3dd9cefe30ee69dffc8c1f60135556ae3bb75d72998c2acae13f935627034b19aa379c2ae834a6416cfd1c9decbea782d85b8563118df131643ebfae029f7d0ee518d3bec892e5d7342ae1fc6b35250ab3b76e27a05075bedccee8b180f0be8186d690dcd9ea0d6d4171c8ef74d294be4b2ca432fff1968a05940d50eb205adbf28de6e505bc50796d4ce9a491a509ab051f3316b05573c85469d5866b8b9369f6fb16b754bb55e35d22b5a556d9cc9b90014a877a0df2ac369e53644f2961fb90957df11423d3b99a6a06711f4621608298b1e14d9bfe6c6be0fa5d88855191bd3b36b4411a1a9e77a681c9c3e972e37ae52cb1c35820dfeeb716be5ecd8cccf871fb40d59a4218763b92de4d0e60db482f9249c8961db655ffee0f237b908b7391130c00d85141e24be25468240bdff143db7dfa18861c71f98726876d3ef829879a213228d6bf19c4d47e07e47fa640ab13089a4bacd5e41826ee45fa9d13fabe77b984c0d70c2bba897c1e054df2af5c61d815638d9afe5778fbade2a9391efb94ba49f091c285090b47338b56fc02475aac144c93e0ae69f558fd106d81d2d5fc0c1794c8a833c7ab67cc4bd64920890de04eed239fba0ee6470de91cb0b14cab6e430c42c589d6a26320bd7463896186206daef9170bfc1ebc6f3966641b72da51282ced4b27562c1378b47ea247ce2e33d781209cf37857d7b3bfcdaf499bb1b793150bb32d5facb67a2c37952ec27b23e0ac484ff7e912b096460eeb84925bfd35579855d0270ebd6f19c12aa5dca11987ade5942a8f69e9eb877f2a54a7c4b0b427dc2c7e7337d6f0f5005492d68557f87fc9e69714870c150425bac986c24149dc8b53f624688c62a2b0fec69905eb01fe7563a5d976602b8c8a8c3c3a6fe7d40e27e61c0161237f8efc40e50cc6ca1bdc39113cbb80f6592053c393605a0abe8c5d342a76b1beed50bebfee15f4ba36598b742f93bf5da75436aae02ea6ff7728006ba2534ed64ac0127b311db342c1bac4a6c8631b8cce0852a60f26b0a4e0ef96c5b034983f868f1a5914a0a9675837f302008ce57488fc0a96572ffaa98b8e2f82faf181ded36fea8eebf05494888fa46f7065fe3d9c7d36e36f5434dbeaa4e0505874a525bc3f0365f13f46b520c65b2c45fd52dc5a9c3305d1aba755d0743ead0d9b478c0b6b8f107671c03023894f3a9c3dc0f1eb4924d504a01b8843e889249b4d2aefb63938a99a8d5fbe960eadab3f90b4bbd2aa6afc5202f7fcd466d7caeb88b05c8dd6f036b019676d1f34bbeb938cca8df1099e79702d538190c2162fb070abd0db30434ca04880d7bd357e7edca2491ac1cb150db65eb311687f35fc58877637c9279e5be645b2110812bf6dbc50a748e097d747c940ca5a5bd788ee748bcb6210c44fcc191867e78b1d7ca8bd403091c6cf639452f6810712af00a336c558111f535c5c18efd293209ef3706a458eb01edb0ab5feec393924e893ffeebfde1e23b34f6c15f4405b6857ddb7b9032af90da48f387c0c33bd1de3eb7a14ad053f83767fe177f85b49364a701501c7d66f9dca155551aafd6c4885bf9aae3b2b0d157a6de7f395c0aff0adf6fa079de32fd87f42cb55cce4fc59f6aee6a732d753c6f7b2048e79c7e1bfcc7a46fe3d7c1302d378435f5d91219febdc52b1d3628e0d728cb65559bea9e8763119b79822d068bd975f03aa26d6c3f4e057fa55832a8e22d8dfa5c7d1d4f19c9a34d65894bbb12109f9a22a55a19bb7165b171390d87bf1b63ecbdaf96e2278f53243c776a31541f1457fe8367a2b0bbd14a87f9252549b949a7cbcf6b91adac88d6010e4d3f4b2cc611cca7c79e9e5e6061bc5c47533acacbab1277fb824b6aa2f0680cadfefe1ffdbb7cb532d33b8caf432bad5525b10ebcc9917be2b7a21c8bd3a2079f5ce766113ab4116b06f5fd06e55f2e415e93f24623453c00d89cf57f8c602c96662b358a03020ed91f81d4f832f53a2968f927e16d3ffdbeb748aab02d187d54b0f0dd44da4ee0b894c970d653dac73fdadbb42f58d80b685c2845638cded63a036797b7c40def28087dee82b2168cbb6882c169279e791241c8b2cfe6dc7419b79ed9ea03febe8f3391161cb7bf6240ddd98da71010c483ffa242da62b1298de0433107f870f23ca624f8bc5d1c3b22bc1ee79dc3085011d32125cc53621b4a5fdbde5dbc86f78fbc09a5a686650027baf46c7e809ee8cca2fef249996dad7a1199c0c1f928222900044cfcfc7993de48497c79cbdeaa7785b0dc0fb9a1dcdb3f6f86731f0984348c21511979136490bf2dbeb3f13d36ae8b84750fdf3b7e05a60963645beaf9206fe7f7931462496ce334564ed0ef0a6ea18ec78b3c4acdbec3d5343ae38fcabb44cc85221312484e82d28338168d5c6f45c01aaeeb2a8785a6318fdf4753355a52f74991055089c066cec7d9916ff626e1cbea875e0808f4df75be58dd8141da5492ed9e7837d8ed8335087666ac102dd217bbbe7ef5011aea1518a0dbe072af256b0ccb5a4607bbe7f323deaa3e6d4830158c7a69ba8ddaf7619b0f4c4c973eea0822967756444055b67beaa1791ec47f78f0a5f24e39dd55a033be357de0eb08804a067498688848a320793d3eb65b9afa5309cdeb7b6a47d611189169113ef10fb0abf28d503fa2b097731c0ddbe8df004928e3b9d0c9cd296641fd852fef8e5c2b312497d11e4fa73c77089d1c275f38cbed033a0022f620e623429096bf75e79222dc6b268dce1e48b3d7fde1774c0a976a06e4096d3e10e2931fb3d9a7c6fd8365ee6d0df73f95289fb3fa3cd3ff23a21af12d3b809818bfe55fd89e8f0c1322c901673d8fbb692b34717996311d630e477e99054e7995c0c60d2c63e6a329cd936d4b7c9f6f0b633f34432dfc3ec3d91714a8cba8fb999a6d770aec80d49d390f2a9dc694d4276e1802b4df6e79375d2bb1f761480f82171c50d89b50306079cb5be4157332f9e9dc912d33ec8176c268849b18e535be7f04e01d1731a3c1b5a78d6051a4dc13edebc5656b624fa3898e9c67e2439fbbf54dfc713e854ffdf6516b242f0bbcaee0e80efd0a19b6c428f590a38004d0fcfd225c1e02f36d425daa9663e26539b060a13d1cbc4016a3ac64d46e07c8bbac35cd94ad861bc122042c86d70aa9fee465747165fd3a91058cfa3d61dee2f8c6c206640209e187c5cba8a6f85335cad696171d9b58e0b33f50aecb429787ec45da69647b3ca4a2bbe35d3679e2464f25acecd555e6d54eae7898bf25617756a7cecf63da6abd942dc9f52edc942a6c1e6d8563729edd04e36041539f069618c94340bc830a2baac70d8ea428b6f8385b1ef58d238c634276c6bd5dab7ed5185225afd39b4f000e08b251c540ba4ff7e014789d2612d6b385e364f8954a70da2dc2c758eeda2069d1bbcdeb6f105c978465bd700f0fa68830573b17e915a3fa7616bffd735cfcef7362dd8cc4e0149050cc2f2f21d382df32488440b69dc0af3f85eab659ff4c93c649c81826361ff57306f139af3952002584205ae4daccad429ffd88f24e2396644f724e0144ad0bcc9b2bf735c52210274aeec75546a7003029027344889a82cef7174a81621b63b76f5b98793f05963993d3fa801c127c0dec12391e27f70ded6018bb0286a59f169b26715b4fa7d0cfcd6313e4dbb54f2006f2636f572a937cb9cdc60291ea582a7f04c10fb665d0d5b71b8f9cde51787a737d0ec70e149c02e063282cafb1384c243b9b45cbd0fb57194f4aa753ea902c6915bd88a83a0b891e4162642fc876033c5db1677b4e05194efaa172ea9765a4d163f589d39641437fbb21f118c5e0bd0ec7617d7858a672aebebc934bba542bd7bb9e2ef40b153d6b39cf71c2b88ccf5ff256af5b5c11f6c5ebb693ccba5223608a537333829063bd7cd9774bc9b0d0312afc8ac39f52ee438826840d6984e5d28b095e87d5f845c6a4269a4bc2fc38b1cadf25b90a6d40ff9a87ecd62aa8b78a0bdda5395fb2b9e5d56adcb9956e608e3b1e663777b9e9a738161bdfa482231339bcd8604194cfd67be01713ce8f0d435d5e73abba56e251168ad6ab62604ef6d95aea8877c6c08d34e9d8c3472bc2b8517812e5c605042787f347f9b34470b84d7d1e5bfa7f5305dcb7b490b79e34007ef74758e98273adb947569541bb200598367a1206fe8073cbe71337a1a8b8a65df4c7f3877c3ef6bd5ffedd514a9d710193464b77360990d0ec1df7319d1beb119acf2aba45d784f0b2f40fdee4b03b955f12790a998a84a133375252b2d5e84740de869a96bc7146a7794207e09e1a05119256d392ded5f74c282b5d00ac0d72a4e6710475f5f3c275285e63ecc5c0cad929306aa13a3f96cd60d9669d2572305c11c62f717a9f5028d15070c743340124d0cea121c8236cf597d778dd3fb3d090d6185b3cf54274361dc66abcbfe2f1e0fa8b059b9276bd8c83913b47438b995054cbbf2b579178db38dedf4dfb7bbaa80bc055dfb9f9b48476cd084fe3794dd719412a2d9252282f755a7293d0c6733b330aa2980a66e27117fbb42b36b904e7dcd0477ee39615395adeff18c5a4543f4d12eec29c251a89f3f10dce4779703b2cf9a4206b21bf199a24963ad7e7590227d453cc550657b8ea388659aae538e293dbc5c7bcfbb57e5d814cc92fc69578b13a57f66ed20cf6b450b68e0e678bdc198d86f4c368efd485ba3518f1bbfc6c6c4d296179b0547ee029f8beced87fc387c3a9eddd118ee74f99978825b60daee3c8e77f2df1d7f7a06c00b37eaed980258532c206769c7443f99290ad23dd223b4db6b42b195b1bc03751e54df0348db5eb16aed1ddfc8894c52b919c502ce72ad99bbc5a90823e1ddbd4f9999c059d971b6b8ee39642ce2525d838f2fb8a17132f13ad0c73b11058769ba2fdac66cc9178f1aa7c3665cffa72b9ad00dbe7f61fa2c3aeec07ad8729466c8c18202937192281d01458e30dc572f411a3c000c8ce0a8cfd9337a578252c8d1ebce44225b0c071837fb5c18b691373d6ffeb84a8b1769791c071b56bae01c017590f71dc4b02ddd226c4b5367af0b2d4b34ef40c00c203a60ee4a3d92ff1074570b874d515ea4e94308a515aa26c4b529a586cc1cdc594387eab58af0f4e9fa38c4d4f6d59b6de0496cf79b7516e72c65813987687704ed349a226578db8f76a5ac3df87d377874a8bf0a4d9fc93497201de066591451d2bfa1435c2d3d262a9702dcdeedae5ecd7cc9ddca99632b82d15c3d4f96410bbef6f9d2fdca4c1fb241a7dcb4227a9769f6731428ed1d95a22e7b363f1d466c6f32308f66d34eca4f0da8cf99c5a66466a31a65f10cb366febe029dae92df60453b5373d05345d3d390c9ff7543e25e05571ceeb33aeb2d7bfe08f7f57c867f07eb2c57a41a9320cec78edcd68e154f2fb0300c05ce44e43843db3c701fc559a02389e6f5879612087c3e9e04830d1373f748480500764e361bcb9407825af391c257b8906498577245094db66447ca284a2705346608ec832562a37b232a6aac9db7b79d0872822217c38104123e9c423656ffb0c0be83af640f751269a83d98ef966fe3afb4f1b52a34c8cb0982be59ba283ad9dba3213a7f8941c3428746457b27b5a1a8973ef7869aba7032e300b121057832f8aa9ee824064db30840e3fbb562e0d85eeb2be350c21db0abe4a6853661156d17c8d5988d631dc8bea4f7a8c0feb1e57a0dc300f404489137053be7ca9ea4fa7b171196d6af1dbe212a7e1369a5abe1b73a521f2c139645634cacd8383f29a527995f4cf2354ddaa6a6599d3a2a5f7b6d2fab87c5d6486810e8c7fd2484c5777cdcdff184ec94ed2c66382b4fb189d3107938149c414ea75f22ef58aad5f7a3dc4af1d9097c612c5ddad99caf85fc41516a1c9a3ba263108a764d529feaa703e25432c748f284afe8e146879b14b355ca4c36a5fa6598bc443ba068e435daa47db518066f5b4cf9a55635f2466e1e285f7b2248eff826e06bdfd633d9712842a4e14ef7d41b2d53157879e49b928385d6a37c2d89ea1cfad0d064f17adee416fb2f10a3ecb2dcf15cf82121546d901badd193107f91fb8cc87b290e074fb09dcfbacd19b03c0abbed136d26eb65d63a4384bee0b9a7a3953f16f168106fdd75c2d963cecbd0157843f3bfb32308b88215ffaa43452b6487a04184b5724065ae1341f7b111a10094213808156ea6c44546c30328819186976621314f93502a8e7e70caeaad45be9ff746b36e1418a32dda288e52c4ebe4fb5d3f11a98a3a877626de83be3ef976511c2c0326248e87114aeb47e810e30415dc2374aec3b856da3e39c832ae2c536da70976dd50a01a609f57fabdf4650e9a90d9baa5f13380375a76dd924291a197c75dfcf2938f43fbc0be8365ac2304503d627ccc599d8658d3df1f965ebf2244d3e2d8e561737405de50b8bd15551d93b83d0e8414796c93b473ce19d4eec82fbeeff4671db564c1efb11b54a04b5c3ae09e51771c32fe229c326a6f8c91762ad62ed6b0e9827401ba028e4175f187c62418cf762363ab9b7957da7dc32c741a46da3ee733f48e7a1e83752a516336c22ca75278d72273b28c67c1eb1505b6ec2752d7cb9139a9e09c75c30aa3ae405011f3799ceb36a0cb893029b14dfce264419b1ad8e53041243c68c686d97d0e7db69c91017cb2cdcfb1f54033e8f7a83eb4ad9c264d885a1d3b4f858a338429af502514514ef8593205291ce96e989c3fdbf0bbdca41cd0606d34c3f3cb6adf9c4149eeb8bf01fa7baf26dc28c4abdaf7ef5a7f0626183c75383073c4040fd6c1ba20cf9127f1f583eaee6febf24148284b6d60fdb1e75eff2d93f5ba5eb47463c8a10d975d7318ae6947c6907c4ac2c64c37ec93d0e20c88b36e89cd140ffb344cdd901095f48eb955c08cbf3ab5b1b4a7cfdafe49d070171cfd401f73e686cfbb6b66003a11544dffb04e161cc3f08a50d510449bd71264456bb8868cbcbb254139a3a954f87828b0e719b9bdd81f32749bc3740e293a8a2a34db4487c7091525f3f79df0fad9dab50bd41296938c560fc20befdb0ce0beb7daec4811a270f5ee5c5633ac8fd6f7710cbae008a707d9eed853ae92ac67c3ea5070193b4ea350f8a1319f96090ed4a009ac6d2990572ea677c62f6c56cdce490223dbd667f642fbc5e9c655408d696e9561e8f0cb160e8c13e379636652079cf27e28520dfcedbf768036e96cf5c0721a42d8ba5d381701d1660c9799aa7a55150d00d067d9ceb284ffcfa67d2053eff2e6c2af12c3d9f844478fe2a4a8eeb2abb41474305618837ec8ffe831a4a5be1efc085ec57ee39a09fc947b3109a7a0c85093e11ced1200ef5be75e9fac3bfb94da94ad5277864e4ce207f40615f591882a241df9031c2b74deff5efaba34128ab769e24d45c94de79bc8258b5f2cd78dd95abde1ad0b2e6cc526e6234e5274460d56ba29fafdbb1bad51b0b56bb64f7fd0a1412137406691d75842d9f6eed80bcbfbb342de50b83e4c1ceaf151273cc2e7d5510fb7451a655c012802717891c61ec3e35e7d423063f0638496512d40d977a531edef19597c690f227618ad27e26b04a597619d8c1d0468dac979e77227edcb34d7bfa1c2278546ac4cb903ed53a668b352e0c66e0ac5256ab2e58a18348628c8efdedd5dc8d78d16e98fad6b20296ff928fe2cc06902c7810609da34ded34e41e443950989ba4cfc6129c5ffe85bb03f073e1da508ac288932dd267bf782b7b537bc885cfe120df7e0f04f2e98af3c41d29b0e7276c7a75b6d9789ddb57de489e4ab1ffa29a40107d37f6b7f85f11ca7227d5d7808f2d959285ef6600fe94f7e078e37b1c771f7e93c6899a351e02ec806d51e29d940c2a9240cb10c51763b4a066839005d10e63c8fa4515c499ac80c7ae2f6f5e0edae0450c5c1597a81444eac9253a058466d0c5f9f12f7a3ec2a70bc7d98ac51a7f1fa802812ddcfe4a985674cfca3e1f543ea271805d43cd948df9e062f3f115f88116f29e53f473f124fd2bfad8adc671432cdaa0dc9c56fe2435eb064d505e47f9c886ce1e5525ad0c6da109c712a3037baeb33980770c69f97bac29fcc10884bbb5662cea8920dac504ea2acc5e86af974174f6323f959dd61710db93348c38ed2e9c1064cffb78ba29e875461cf2572f8b09ad747fb3f23e2d4873933d043db0371a06eeb05daf7c37433e672cfd92568618c0d7ee8f26d43ba7336983f431ab5118b62ecbfb029a022aea746111fdae0ad74d2d77ee5243b6445538cf25d5d1f5d6a2a2fcb59dadcee127d0232163d6f973fa3523960ae6e7f5d0fc3423d6727e3517214af66c4c9e91d0778e3508bc3778b66e5b8bcba086a0afcdf5dccfc78a988519781003f4996f20d6f87ea93fa3baaa6d6cb80d4613a8b3de5680acfa6531207e153946f1819e0d7e9f50a96edba0d2b895a090f0bfc35f1612fd3badf1935f64a8e6c4b60e341a8e145509eda4d26a7e9cadb9208043bd955ca11cf24693c4309e1e260e5f185c328e35b8c4182d5fb6f9973d9b7834bd11aa5485613d3b90f62e81b21577c974c0fc054cfca2dde36bd308260d894710c314e3029e58a24e7ef3372daf00bc2d711c1edc5506496a1ffb5b144c2d04757e4e978bb330adf58c7936be6b13e39a8f89041dcdff23577b79bd18b961732017e36490950ac84d793bffb0793faa9a6f51a6d4f5543a000355ed9bcfdbebdc73238112c3c747077bf75330b8f3596b4c93c5558109b1b8115029799b59da3356cb506944040324b8fab9841b1e8bd8486be4514fc9b06593d7a5800a95cd808a7c3e5043972551e542e37699334a24bae9430baa653f0d3783e500742201402dcce114e7f91d5b102506e0c2a99799507aca71f0e166feeaa1b739e02ccd4418c619efb07ceffc94d9201acdeed2e4a48cdd083f319686d590a30ded01ec9e598684406c78b7d45213116f579bd2c05e6b3284d31110a828e89564d2a43da0d3d5c20d2a5b3d6360aae74b65aca471f1a3f46d300de7283229392bfe12e5eef85b7cd9bae9bf8d0357a55ac7f5548229760bc5063614dbb32df9fb968439755cc80cbee87d0d2dbb752c863e6eb39f8f808bca8622871ba279eff5540679a5f166ae1b811a6f090ae5ddff361d2be124d68bdf021fad57809bfed0440517a2a2f68baf344274741c73b6618953f42eea8766a948de055dd2782da43d57d5331c9d50656c84cfcc14d40b90929f2ac7ea25edaa9ed800b51e3a8fb9a8731fd0a90587bdd72c683c58d1b603fd1027eda96f55bf02bc08e7b9f40d600028dec1ac8f0e30fb55c794bc679c846ad79e6c3b94f1a7402a8856ca1848b0841fdf326215a36f87cb4246b6cb6a0f4edc8508bac798d3e5e9a53218351d39efc86a212842837baeeddc7642c2b08fabe32d140bb6c569cdb59edfac12e960127ce0789525335e4a4d01d9105ef509e67411dae486ceab55374909c4e292f5d468c1008277c7e1993f257b64593363fe6c708e63060bd5bb44cb83a3883e9df6e7877bd36de15753f93993246e1329524d1bab1f40e6cf144b267d9b539fd8bc1468e45fecf063a52f43a50e6529fdac6d48b5c1f8cecf2f5a1ac1aa16936cd652b22afdd45e81721d76ea390900e30b0b8dc1c20c08ced7854ba26d548ef354972640fbde62c1b19841accccd5fa1f268f84d9016f6b355827b3a63627fe4e3eaaa374d8bdecf313bb7e093bbf0c9244034121097fbe33286f9c3629fa599a580ede5d813164def2f909716a5337b4a7ebc44613897b416fc0c366d805a6abb79ba6560e50827af3154a934d82d3999425884d512bdc80002bb37e41c551b316105dc8db01e79b256666fa503f400fa707a0c136f948d5b94e14969a6070571bfa794976d188457f03a3f925a7f607e03a5f698d6ac309292c3dc0b74917d682334c3aff1d589250dfc64c0380cb053c47284f10ceec88dff9f6482c7791f996eb3283c778c9049a2fc12db54e997d3ec7f5a7717d87b5d537d773a462321bc934d897200ef7f28b14a4f8bd40987a54295fef735f3830235e302855145f79bb1a6e9da39764dfbead8069c3835295d4602a3496e3339777ec90f0eebf0067f9d556c6d32b140906ab7d700c2dc8d7fb34f7981bf55fc9be6afa230e93266089df4a4f65330ed03d7f7e6ad02e9c15c157900cf33cab029de29f6d6b74923c6e02f01b9331043d9b6ab5f19e25e46da436181cffcdff7aff0749c5be7bf0bd9de5f9dc34bc088155ef806fc29dce74adce1f6f3fd9bc3de3935827d5e3c7f578f2e11bc35c412bb56b595135cfea26ffc25948c74b9a20740c9a8a8acdfe396aa63bc316df7ec41516d33b2965e3bd295b9b28b23f5caf797ae785861fba3396afae549532c9aad525f339ef23857b151e9543cc492174a2b619501bb71bf628ad679aec4bd2ab66463fc248930ca1bddde736b7a7c72b21ed2b0660b04966d72f4e9af77562389a5d739f11eee555e9925ea37190bd63d04cf8031995a1999eaa803c585554c49445ecae0c3e6cfc74a54575af9d057f433c107d8464ac9df108d7a04a5e288b70920b7a6c52b4be27ebd4dd61c2ce3ab0a66b78486fd0ce39c9efa49947a2688e6051f1ac3e74b7a7dcedf638afe34480045fc537f44ed54c86c6843546dd603a4b0490683b6a2a86ebe780af14fd86587e587d262b3bdd8f528d78433e40ddbe2f45bcf812e9605d556c330cbb3de283df45835a09d4d341705c8e877f89145710c2a7c0ab65a66906c665bf533f663512d644f2a8ce0dc5e38546714afa23139c980eae08ad55ea96aab489839043e0d34ab87080236a685586da68d40bed6f20f15ccb718eb37725a592371b93a3672beb3887781adce87fa885f12dd463169fcb80a3f1ba4c53a64bda383a25b03a160c15fbaf0cc4d984da504425a8f33f7ffe9c102f63594fa6e67900fd23941408f7be7aa3f6f4845666ff21aca755131ea6c404472f80320457a3c3aac2d1ff4fe534b294ef52eee03e0b3d88192e172d00b2d4b440d9f7c15a36e2d32b33629f94d9b35ec97ba62eaf66d096e428c636a679e6a67de2dc19df1478183d5260cfa9eed298fcfe4aa94cbfa2b1d0d0be0baa74e56b7b6418306085c92953021b976f8f7462bd046d2bdfc4cf1edecc207227b5555c232221513b9ed630caf701f3dbde16ec06496a43d2d717a51d73c99e371ba3fa1dd1836d4b5aa927510a4ea1686d3797d451b7a97ae22927ab28afaccf1aec05a4d2874af77e84e55ebe00912599a1d6703f553604a5762808016391b31ad31861fb73ee18b299dedcbc3859db8a14be56feb00d5fc9e477b7dd8400fa3ca079a6d88b8dac0aba997ad5f35fa42498e9fcb9fc3ffa269ae789b468d30f3da28bdc30b90a536f6fecdd7b60d52460ef879512d8f37c5c7f6f4aa071659251c6aa44eefc054cc8f33f849db49796a2ea58c8475586a3d94c0dbdbf5d926c48f7aca6abda30c22cf38f6955267410a1e69f332f7d19f26793a654151599d0390b490b7ea0983dd67a2561cbd148fb1a287631e2e94bc3a16667ab3203916ab6cc703f5431e9bf2fe4043a01022832bbc62adb69ebb8b152fff59dda9f7b6f008c9c653d389682d785a2d9109b8a9f12228bf301aedc69632a81a6c82ebbe1fc0d20c13dbe3058086af7825378c24f61ad4492a6a2086dd8c45ec35f8946b5bd9802691cea63736cac719f41ec4c911aea258496db9387942067261d5b313c031a854f7bea4e60f597ed8c61d1dbeb9400be3b39608b5a17ab953bf4eedf87ff9fff18934b4c93aa92839324cc5dd46840a637f8a5b196985ea856e07b9a0d0cf5541e947c569f3199db5651866da85f01ff857434ac47e82502d5f2c1628553db8e2e0abe7ff8a58f5b878eef3600cd3836d3a54af5ebd262766ab43c181cd64aa03009bd57cda43f634e81e50f4464420d5227ba43f1e6c9091365aee039bd20b5a73f5a791f24c5741f3bb3d23d695c3ca4edb056bf57b00fd68c931dc5787f733e49d3e58d037ef5686925cdf9a4bc1929a62e9b9dfb58cbaea14ba530728ae10f998c8b51ae040a1d757c9ed0ad03d7ec84f457876dd54fc42dda5b35cca39118b565b81343fe401c84c337ef724d7852c3043d0fa7a948edc2bdc649e2da87820ee96ac7482c35c52a939c32f0693adab8ef798826cb0f8ddb7813d6d04a9d97cdbd235499ee70c86964fb8a108faffc75dc0fdf5c865875bcfc33b94c4d85a6a62901bee6e2ffcd94ffe86310cc4762cce3d4bc36c76f6f80ca0e16533cc70262c86ca044814b49c21b251adb97571b8042a5eabdacb29d40fa003f052f7a3006e9bca1f8a36e49fd34f1f22d4710ba746bcc11e341654399dd4ce65cf798e24f806742497a2eaa6147ca98bd28d24461d8a03cfb6d4d04218e28532994ddec35cb7e31bf8e768a5b6f53050eca2e799692cf4c97173eb72fccb3daa6c8c3bbc88721fff102d4e74875a0a0f2088be828f67ebf593a76b007d413eca1535a9b04f2adf5c3cda68f1590623a2dd09e0dc1a7c45943b077d94287cc6454b8a2a96ec4d11e1214f839cc8ad25fbc78af76eca2063db3a2639c3674ad027cb7a2fa0a0b5edb661fae9c7d0c7309e13e7ec81c3bdf9d9ae3cc4fd683dcdd76872a95544a6a0ac444ba8746bbf0b59f25aa06dcd8238797826d17baf19f943defbd2bb02e7743b3f902f89671d241f4813d4bd2c43bb7cbe0c606efae0f966dfb14777b9bc98069e2121554095709218fdae36b74b32be70692e66325d8b68d997a8741896c8d388437ad4afae9b2fb267686275a2824965947b7998f4e4dbbbb488f6ccbf931f4e51fa741bf9a47d258f470a736ac256612f2c090e938c517b089e4a2b57521582d4ccfb1f45792ca0af4cfadf2f3ff5d404222d8cbd994a3a53c0f0993064f1fb0ab64b29214b8bef6e88433fef3e06e021d3e9a6bd76d23b4bcd2699021a908fed0fcd76eda7e85048c7efcdc63965b7c217e8944655a6ccef864ae36c19a3f99cf2f7c5c9889f127124f6e8519977294b99ccbab52df61b7fb3cf33c3f73a8630514d4e08c575923b56ed5422324a31fed81d3fe2034bf33a1ac5bf00cb3ae2d99cd5e198124efc364d7da7d2f84cbd314f0517b3171a6c1d1510a76ec65c23f0ec5cd6e5f6f5b6d3f3bf252bab9166ed1882a256bea6996df98a04fa2cb089f856bce41f247ba07e1b928d0cea29cc8ebba1fcc88d24f874f6af72234aea202b35082aff5dab36c916eafd6b24e566238e56f5ded37d9ad616fcd8faf8b7be32de5f149e24d404c0a7cb1adeb0cc16a2eaab5f26fe06bdc246221ca7931cf131d756a26b2a5e89680993a684f93adc127ddbacfafe58fa3dc0d82917dcc17dec857c744a9a450b4b191b841abaf2b9e489dd31baafb5738cf9cbab9a8eaf38305241e1e241af5c3ae2abd4262b0e2823e2f68bdb42fe5e7fedc18e5260958994f798ffc6807bcb6fddfcd2cd16561e87589e6d8dda9f7e8386981fed96e294759f104f45f3e09c196237c128e23ad56b86be931af0eee8763d258820b4d36f8d5873f52ab44b2a926d2ced0dad810b3206327e1be3ad293fba8b20413e5396fca54374cc1cde23f40b9c6534e894b21db07b7776894e7df856a7c8e5bb8de06f18c0bddf9b9ef956a2dc9b44a6262ef129cad05f433aa9373420786fa439ed9dd9253dbd59ded5065abb76f502982ef22a3633e1ce38ac7e3bf3ab553008cb49e58123337d5c32e04ffd45a934e4bdba5ae55ac3aff7c741668314b5e7207ff3cd2b4224028933c98ae1863af579df30b9584be8cf8f10865c58517ffdfb2ae4a4301ece006079a41e2f3eeabb1c551e54acd715f977618db5023196031b8e9f0edbda03d8cafd9ed04efd9971a9fb5547a40f75b7cfe9096b422f024244d87e5fadff762bdd1bbeccdddafc9bc3d952e81c6f09c9fc92959cb08e6ad0ed5d1d09668d93c20e188e86f138fa0af9f7dc9115bd673f22fa330be164f0324347ac3f5cbeaae261da936f2059a69e0f27bfeebb3017b10ad186339937206b674e7445a97a7afbdf4be690b1c6186a0f0eb1d484e7d897df134d2e14d258f0ff83b95f6fbdda8da6f16034e8586d8a811158ec743d73a9733fb70ecd40c58d014639338af841dfe6f5e043e0e0d3191e946e9c643608abc1ee15dba239a90fc335af0b01928ef6d208412166d9fe544514e49d69b0b8e33fdceb4ebca13fe5d33c584202869a80054a700c9a9fdbacd9c46642603dfba38361d8f1f07f1ea55a1f6497dd1795ad87320d5b9ba39d45fd69b11a8fa7cf01c92fd8d8bebd9faa32fa4f132e292727556b3ce25e6a871acaeb9ff5375ce04bfba8da5adcf6daac1e71a3969243daa53fcd2eb8960e10562391be34815dad670ece1f5e7bbb1e68b9cfb08f0a4b154fefadfa142a5e9d3eb0169f9f0a3236619288d3286d0c548e8b4264aeeb8a11fc9394b7d5e4c2e66fedad68cce759ffb09351edb9cd73bfb95e2e20dbfb84c96c759022428d4387baff2464e13384b415cf32b514c1c2c065df32592c3091d2c7242c9af5471eeb2c2836641c4dffb938ecde95d356a008b9c4f81e163ecaec7a558fc4f9712069bc9d381524fecbbf3e562d251869ba3769781ce276e6c83345fd4efaa377aa718d284d63cae99f30490d1db6e3617db49dfe8677de0f9067b20508a7ea364a96fc63f39d09466afc6a46b3201d8d138acaefdc70718dbbc0d85d6db30303b23f62e4620544f8f870f87b9ff89855146f4739fd6b19cd6c1b695b7c90e6f23658e36256a961f7891eed66b41faa45d2bd75b0deed98be910c571f841a73146829ab99dcbcbd2c3a8a10c2ddc2c9b82491b5f6b53faf49888ebaa86dbf68678ea90f4ec3d18dc17983c5c56fe3a56f60ae5906f842bfafb85575f868be268fe9ce21d1a074cac4e8ba267895f44694db4a6e70fb43d3cde1624655f92dd8a038c3085cd62fc4c29f2456365c0729c68d1e89a5c4c140c39e68cce910aae53a70053a275302f2b312cc2b19d89571c3f68ee6d0237266c13d888f3e1321b992fc92543cefd3bf6f2d0a1a1bcf8483e43f8e0c10d32d16f0cfb50de0c853a6210eea864ebf0e3d1c0e49cf857619f7b9022fc8d511231fcb3163cc407efcbd3dbb5751fdc4635d58ec8910e502f3f33caeea8946810fff2ebf510547562bac2d0c3b5adf4c81f8aa1d8d777349e5bae329b54eb9fdc14d8eb707461739eac333a0f45441e6b314abd9c644222b472f57b511b074e63a145cc3013621b49cdb9fc999e18a2920cad7df030a0c821860a2fbae0f82d52815a309908d17b0175ef3866bcd0ea81541984d9732fd0efa965fd4ff8f28ceadf30ea216495b66202da74bbdeaa48055806b584a495e91a069b09b3296002f2020cfccd8c45875d05af8b24ff422ad044947224cfac66b8e2c0e0d73e2290827d2bca379885e2f30c6937a06ae7a6cc62712e462f21d74895969f65b9dacb4a6d5a6642935f4adec5667f5c9658a5347833d2fbb82947ac545a8f29b7db67ed126b28f06e2c119777f6b1cd2fc1a3d70b870aa490a524afcbc45c3677dd4f34a954bc7fae7218ff60b76643431992da536107deee58c61d15c99c804e18b7f43e481cb95d9b80db7276e751cb8bd15b0f98cfc563bbe0d821a6c6e25b8d556c1d6d4c1d3a2ef74148570ecd1001cb55bac9da3b529ed632b667960db964ee032894185e577447558c06e33bda30d2a91fcc951358c66513f055d2230e07fe73754267b61161725c8c7d0dfc605e4d03e931c14c836c703205bc0865b46766977fe39ac2ac59c6d2e47aa0251253e4d369450dd9d35afb002d306d576d55fdc79b2f1455b531cc96fb82cf7b9a63cb79ef67d813316beec845c2492a2b2ffa4606c2c0a2a2a29cd551b23623dd22baf896453789c0f511a30701ccc4b816fee8d274df09a9c73e421e1812a9c6eb4be55a917869eecc556d5982a905f628fe5323161e4a94569d8389406505c947c950acfc50469442092db145e3c44a2640988a56f3f90342e01e557dc22e89d0a180e648785d3c8fd0390ebf69b1a3636ee5cb05a9a5c54828e5d30c598d730a221fe265dd825d616ce45b7289a5129863847fb835e0012165fa0033967d8ab6c2fcd23ccd7aae38de6147a80e559560f1202e236a1ad0f5ed549084415087cac8f0ea7f2ba5fc04dcb37d992f96ab6058b92496b797a0c3386192f59345b8ccdf09b9acb140645f0687eb0e009542e891da957fce798849f1e5cbd6bd1d8c50677bf1d92114b12c312a6baa88f0159ce5c9047dae8a7a5643b15dde18e42678d46c091dedd6582c5e7590dc265a43b0ac492e09bd3ff5b716fb2fe42b04e131114a5baf797b013d3b14a2d4842fcbdb4e2f48338abe01d09608af75465a4f54fe81e7cdfd335c3c2a981a0c44faa7b6e30a37338f9a1ed3d89ce0b35a2f03a84f6933d1a19529543707ae326c32220f9c8681f34443a5fbeab6e6a3a499ea3c58398e9db01144aaf2c55736149906ef8797a7cbb69e8268e7fe1155435292c810967a2cc96b5c08acec896313988e452b2ce858877a384471c3a621839a9ed8630f0197f6513e5fa5470b372f74fce61f59d6a8052b6fd23b6252bb4ad6e10679871feed1f61a698a31b3358bfb3d94a27f0bc50c991ff3bc5f8f3ee9922bfb54c9381ff6a2cad2d5d541cffadb3474db27bfe7f4e578a405cdeef5b0caf048b7381a8cf92a2f0d6270c933c62d209865fe67f3d7d40300729a41d535481ae642bce824753d0170ea60b297cb74479f2d2d12695f4f0b4b455104d6f20aad5d168b7518413585372230b0d0b00063124503cecb8e2738e6d096c0e0648038f4dcf85fbe34da48eff63c54a7315f938f9510ef07b722ca27167593c700c38211d0854580a8ed86f136aabd391a4393aedff7b7bd8c4cf37271e019e303b3e4ed179d18ba8bcd4a411e8ab9350872ff47254e17331925bf809065d0b34dabc846b823cc5a9b4009b6c42061168173258aef42e39928056a960f5faa73383afed48239dd2e4f89d476ed851c86404f3afa96746ed0cbb493de6c7ad3de4829867da4f9f6de077f50fb59a9a462dd492687578367726de1d54f20e5baf744d03792c6f06510ffedb64a246c3dcbd1c8110ab16ecd67e52d04a9e7e85f45e711b4a1eb06347bf890b6c33b7919a22bec77aab1c1f983f594cab534bca8de6481fbdf22e763f17b7e52e2dd94182ac3119697ef44e28825ecf1b1554acc7e1d3fa3b2e4d3ab56b1bfe7f88123e0847bea7e6e19e73abc305d508873fccc6f6745783bc90b444ef1890c43aa53bfc0a7d265ae7f93005f1e3854ec33b2b6ed3a8884b70fae9bed4de7f8fba7f6dcfcbe9e5441e480c63f805a9ea9cd5a41bbca2493c204d9cefdad22580b3a437675b16d081fdb4a9668c5e524ecdb1b721f1557925ca6bc81251305d191c31d77dd9ea4d6a4ec47027be89a223352119604fb9dd969878bb3925de747439d7189b647ba4dc7e2e8125dae2176f13625c795c0e8db5b83a8d784486cb187f6fa76b6ea72a07833dba4b0896b2df77baac24d7cf76358a0e1adf7e58bf8fb5880f17482416af70be813cd413ee2af45fbd270087dee0fac99dedbae9027150520b7a80f459da8ee416ab9de3d6e0764fb22f2575c585906e6239a8ad5a128d2ce8ec332914a5cd6d62abf6bf4a7601dceee7cf73ab0d3de77bbbc2bf8e4da3f271d51b4bfa344b77dd8a5dd86bf30bfecce13d93e39857edaaaa73283e1a3265ad8cff2007120651f247605b5820f9168bc360bcd0ec13e044cbac8365f9a34eb7ece41295722e476d0f1b6bc2239f8b143642082d75260964e1b08b1b07598d533c1b8f39f79902d36fda9967babb052e37333d7f27f0be1078f59fc8c54d9c2e1a35e29ca766618d3b40e0024a66bd49f4e37178dd8712db499da0c445b71ac558d61c4e787cb0d50d59868dd6781073a457f8a0d87c59046a9bedfec0a7d2cedcb891a4628aad6db2adcd7f16f2adf2dfb7560b708a1ab615ca4bb8165f5e27aa27424b103658cf03fbc900ce4a9ee4e95c3bb42d26f75a44c98d0188402381f6fd79b52c5af6c61c58bb19498dd2013e417f85234d80cdd43d044cd763a1aec31c42b90855543b680a1fa179beddcf17da22500569231e69edcf11814369dd8a56c0d52c7645be1b4c723be479325019d2e73cd7e0f03fe853ae0242ecf7425fdc407a89b76186d7210bd2ca9db25266024aecd0fed2eaae90f2d5612ab83dfcec78f4e3b0995246215ae1190655fa1a4a11ec507d9ee8321bbfeeb487bb4de694e715fc64c65812b1e01b141a52b0947115c2bb97598c02c7e5a0c2dea7d1708038a781924a7c3200bee88627d6cca6b1fbf74bd24d7f38c51473aedf3ce4c6bde2ff1cb54fd0f29e1c06278c0a259337eb7cc2daa7d378e12a6aa847ee328d52215f438d3faf8908fb0d3f1e4835b36bdfa992a15115d23b08f0de02c42ce5d83ab24ac1be7bb6234aa610f8308b69e61fe0fe13cc5737547558562845280593898393d16bcad65e23792b1283d4909d48a8838465468ab861d6f290ce53a0d61f40fab9f1ae1bd79916a394243503e85eb6c0c6691abcad58a5cb72382b927d81f7a2149aa1288eaa51b8f10fc1c3797c28e56ce58df585aa1b8046a7b6b2483a62236b060f6c6808ff1593bbcd4c57f3592079a447232763c8e194bd28e5f8b04c08567283ecd71936f6d93d91940d9cb718d615c8a028cfeb7acbd6a6be229dbb6509bbd5fb24b9003fcadf12667e9ca23763c0cc606c3f0fe2778f29fe5b5e605e4d57033339175bb3a08f567efe88ad8df2d58b0f1abd0681ac816caf3423b2c42a0446227c6eff5a70bcda7c794f5a348282539e362ef961d99be20c6f11109cebd8a01d4abc8241f3d93256514c29fd6dcf06960bf52c54af3c5b83372dff2f4f910a476e421d006086a5b3db12ce8106c69843eba8c6e9c93cbea55648c7d2a805386be04b1b32b02780cc1e0c3050117abb44d009f9a33b15824233d9b6ff0bf5034e4c508cb05a6e5f09e0831e0325b14991bc8cdeb49c8ffef1ec713e96ae586c595e4557fc7892990db703180ab4268a1828de9d13e967151976bb06b8ea4f6c5a49cee682d7a7590d5914552fc4733d35f7e518a776a48ec26b3605657cd0816e5fbd299b37dc46a2c356be019de0f4744ddd63ef1bbb8012e252df9ab2c973ed8b8213f9b387dc596121f62d9fad72e2527c4b7c5bfad1c7ace0eb19b617990ebd041cc0693bf9bd99fa86234cd30d713fa13c500806f14aedf9cb385b14c6683ac7ed3fcad728e99d1e0c2ed274cbe79e5a53df84f81650ac9e7d605e5863c9264145b0779a43a8b6799805129a2692cc915c3f4c09c61dbc1773926318651b9f00f5e801dc7113f97c14e715192bc413bf310c92fec1d89bd0c38a5f12c6312cc5096a4e6d16380ddfa09020ff2972de05b7a3f7746b453ddedbdacc3c594537d70bbca94e3aa46658d820dd3446e1cd64e91e319a2b3c0502fd897d65d613a57d9237b43e6d566079e74c1a7cdde409218cd2832953cd2ffaf2d66ec00914e4840946d1caed9023c67b5304a3edfb1eb794e63698b6e3bafd06428df905dc80455fe8dc002f4e0737b74ec85c6e5dbefe2654213932d456b007c36b8ce0d92d632c29b6a4d515f9341820e44d2f175d6032daad52aba3437ab4c647163ca232fb62bdba5da11aeee8d5bb8bf1c05a26fad56416a93335b7b6c2d3f319f37dc0f8c92b8db53d9cb7f01aa99b16bda91408de31968d6d1d98bb23e0aff62091a5d786694534370a1137ad9b4442d711985716e2326214931ffdb93887e5941a2e35e4ab280482745a7686ad4925c30fb22d7f194b60b40faee7ee17b3272a33479a611bf98107fa91f65f8941ffef4a71f80cfc8def822adb66b26d4dcba2df198bad494cfeac456e05a76ef7a0a1d2f962ba4cef0ff28cc1a6283aabdbe5c53067873a794c5ef37b410ac1ebe2f4ac3b056e2a35c1825e6bf76bbe071020c281a5effbdd148d0ce7abd190e85d739a4373389c157cf93a744daeb9ec8a4092c3edd71b5a28e8335e81a3ef94c7252f42077326854d0d9d0f7f08abd23256d44ff45f8defd6435569a57bda58724e811d4b9e9c9fe97924a84f99c49736ceb73ff95dcf713b00c9edcdb7f6b8256cdf1a173a92ca345f88b492c2cd2b36ef8c5eaf9ad06d180826df6bab5d3be102d79ad9419dc1f1a4bfa27f8bed340f91b33898bf3c3b58177ffc5b5959e55a413a8d8784813104d61731284c87e17b7f24b80ef3f1c87c8a2f648433dfe813d5ef9150f665da21950ffcb479a7e635e29068f51c98d88a14b056ac6ae3489360f2822baaacb0d01d41df3a70c8f1cec0b8145f2701ae7234a316f9c054a4aae7457ba9491da8748e4ba19a0147119441a009cf088286bd51abc092d7aa0dab350a17bdd14d3ab4a62a91c7e1066e77558e562d8270d87a8a2c019caa6d7f30c7ce6a2e466dbc122d0cbfab25a0c3cce4dfadd13a0c6a84055f7c668bc4703b81db410239de9027124e24989dfcd3f61c0f994798c3af69b9c8f6a673b1936900754da8e77ac71eef35b2d15239abc6254931eab9ed0a67569e0ac0cbca47411681c362b79dab95442b49eee5dc88bf9db42aefa9fffaacb7b8fe2389dec2f77189468a28fd3e708d75c79757ab172ff9c062a38c0d759f8c9aabac649e43269e39cc7d5fa2503c5715ed577b25ade2afd69d74358df3c67ab4425b1c56a355d338112b2816490214176bb51969b836f25d9fe8e81a0420e1534ba444689e8ab4454b4beefc39a47259fa6533f2c58402bb005326ba9960e76a93f4146fca1d22532953d5aeb28f017932599ee00dcc4b68ec6744e647d8826ee4775aab279677c47741a09821e68b1b9796408a1457e957133f44cdf219b56b124c855ed27c8efd75532af1a8d3c6078025ce14b1d14b719430711ed92675d1577763eb7844e1a1214580dea3f23e52473b3cb3602fc8b03ca6cea294f91aaceeb2825ad663d123d97f3fc90af722652ef563d7b9d1c8cfe31e3e55bda4245ca3857fff24837d66d08ed9c685c13259bd8547407061a72bb935eaee03565d2007f3e2f319ef6ae5d16451b5d6677160f52a2674900781018ce8d36e5c23c9b5958822a7851ceb0359cae027c8151dfb20b908d5134ed55bc9f00c66af33192bfcd63befac17808722d8c74a1eab70ea93e10756fd355dd69ad0a83e77f9cd7c94e664565fd690a52c21cfe66416bfb29ad83b75d2c2bbb0233c998fdc9bf0477ed4341f415722075270c64c659041a1ab8b07a1c1b65790a83331cdc69d4e2259c4e82030468bb32921459541fec0ddac38ca3c031270c19a7e55f56a636bfb14fbf4ebb5784f621686c0868871c046676ffb1c7bd895c4da1ba25f240a9374ea3235d9dda49f7cc428bc7f61792832ff491e5f0ed20b1e7761dd4360e13870d51cbe669c86a5b211fa72241b68dae55df1980e0074402d5fc17e3158b1a1038bf805bca3ef9df3703a530874a912ff18664cec3f22fc5c1114f2af4435a33df98c71b6f76844eb098b736c22ec86639e71e389d48b927d7da6ef812ccccc01880eac50ce45a35d847ad4ba4e517e058e66bdbe0a5606f5e9c70fca3a7d9a9d63cdbd15d81f1163264af617ad8035bc9aa9c2c9f70bffe2454fc526d87b6e30f86ef95baedc001d68019d444c6ea445857488ec98fe488407046feaabedae666a659df64500b285761348337182da2d220350172972f0d055fccf97ba55c46bf54486a928cf8024342f943271cad5362e7c03db7f85a6c99f14aa8f67e398b7c6d18cb674d942f77df9d6ce26830b6c618e678fb9089ea61d01c4ba4d66dc03d599468e6d28fcb89fb19ad8b27d2fc83beb11c6f5135d0bdc7a4b32b1089825b62b709cd89226ef0a7d48f23f49925bdf0fdc7c5016eb2744ce35da4eb3ab75adaff1d7718421906e9cc21887b801c0acd40e2ef3c59ebfd1f27e46807a83dd6b548673684f73a1a4478c36ed2492b765402b8988648413196e523ac12ad9d62e8f6aad875a3c89b8f5a61cbdf6d1ae131c3b4dbe12382cceae3334ef4ca924f3ba6614aded111bcb0b34db77f8bcb7e051d545f1826b3672f533ca865c1cf2a6d38b8d5372d19fe5268ac0130acd7fc8f68edc28efbd771b3a3cea697f1608ef57f9838aba7769510a58aaec1fec009bd43bbfc7b066dae5af718b16d1ff4e15eb4e65c0ba938606c6343f3e5086cd7b8785319d794abc9e56557257777f4f66be31d36bbf9af55b5261e2999c15a70e19a899f8d7fc5340d0fc2e88c175e2dcf9132e6fdbcc6f785037d0c7e4906105ce3d7384d81f30b65ce2518ac8e25d73cb250e0c912c317c60be64ef5c83fd519f5b18d5f9e47970db4a818a01b687f3b20de577833f13429c7113da0b4d21547e5ebe9b4a1b24b0bd10b44748163c59398b240021cea8cb00cc7fa2bc761f2ed24ffa08dc6ec68595c7d80216ea56814929f3168cd2dc1dd533d651135c3c8912196839166fbe21ffaffbe5717a5f5a3343a5a05dde1ae6e55f8f66a9f8a79e53651a7e4a676f83a2d33d31cb37e285b2fcb7babff7b3b9142d0af69e207e2a9ec6798f00b5c8b94bb56b0aec832df50830a6ca15ea3c36cbef46d76dc30be0f73c6c4893c71d98096cc0f47fdaeed427cf77aced38b01ead96a7c37e994e62edd5aa9eaf14507ddd89310286481a51719734533914916d4b7b987aa7442dc5a1fab86f781de09a98bba78cddda452b2d888dc05e84b0ddfc284f284f2dda3e64402ce6fdfe6f0ecc11845cfeb67f71446f6a80540affbdec2b9abde429229e3a2d783c182b8e3f467d48f1f1af4a9022e9c10f14d00a360c4c0b5d7e2ad374130e19bf2b76acfede3a5f3e515a437eaa81ed50d834bc2fb1b65decbf81a3406b0131189fd7cc24cb11e8e0ea687942f328e8cda591d7dbb137b7e7443209755cc03ed696349733756425673e57bf7abb572f650b42d7f3343f5c52ff37f651334e04c09b2c4b325da184349b791a2934a06f00e39cc3369ea39e5377357430bc775f6691d8a913e2804bb813088d6ba9facc4f88dd56505a632098cef9f4fcb8edfd173a9cd00b71c5a0209aca9e76efd6606f63abcbae1b42f219748a8b4d542baafd8f8a109d24e0d45c6625b1d728f39d73b2bbce89e3f0756a7765a258ad04abfce9d30ab55f7c72ed5b8cde360a12958d8743955f00001049e4f56dacc0bf573c84c87b9d96effb161f365cf81cfc2ab0807b53d6d4d1a5adea1d1ad845b136807326b21bb85a629bc3439630bab062510f41f20042d745b2708fb2af2df15354504dc25b82ab1d1a28b165b09c6f4c5955d4b8988070c9817a27da317eda15447723f27d9e782226bf48b06b8559c0ba3399394eedee726949f88c1979ec023c172ce5a484493fdfc5ac97f87c8e34f4913924e999f1f6ccc32c9c7a88a0612ebe797bb6964572725f6232a1a4cfbceff3236af7f04b24cba78a0d0df6f413bec193f46f5c28d349edd3d9b3d712127ca2e8e5accac4239bdb4998d9cfd528ef9ccfa5e9df3940b33d848f708b347bac78c206e5c69ba90a1013176726e97119727ed1b1141eee1ce44c045fd06411ea795ffc7d4d393c14d4c464e47f3427f605d79d233a06aac817beb50b1410fc18f34cc094133b8785d49c30cf1df61ecd71edb9738f0b5c666f77e6077182c52ec45a6a674507ed65bea13a82f42f85ec66bde0daf58a0a5414876ebf24e6159dd41cd395c949d0af150d766763cbf6fc78e897720c7e58d6ddaefdf0aa8ae580020a3095d5ff001a27bb68758bf44320514cf79557df4585796b27d05fdebaac54b71190991048feddfc3311b5a29fed5b461dedf0099f45a81490997921e95632e6386c5bd8d999aa12e0ddba64000ebb739cec0570bf128e9caa510a5a125be3b100408eccef3ce2808d606001f05a5c0b5e6f552d0020f115ca22444ea9b80af888444dd2416fd81ffcf6c71daf3bbc2544016007f2d35e83cc1bd8e88e924941e54cc12cc1dcc7d92495470b2ce037767d6617264b88804719e46abcba99b201164e2c7a39a68c47be96548feb09d82cba73155210ac9a0d1f061bba92a405edcf40ae4cf3a310880fe1767b649a515b6c91476298f0e7ee2630d3f2caf4e9c369092b60d4a10d503c196a9078a95b537025d0ffaf523c9acfd455fab47d13954ac614eab9cfce0e787e0160880ad58ee0270bc493647be0cd1a6fa81b80ea30b89f14c454aa0571971e9dfd845b027d8ccb152412dee0038d57668b746966f0ab0371ad4f9cbace7bf11bcd6fa5a3548aec5ababdff576db0589dc40db7f93960de05a760baa58ed274743cbfc4ecab11ab8d34686207944822005c677f5ce504e5e9c11af3b3ff2c2631134e29ddf858e614badda11ac84ade969b65e326a3e3b021c2109add666cb30cc75ee543fc0549d7cef4aff4a716fabdcfd4221c0a0ed0c1f930ab3941cb18e729fac7808869af7533275a29ceee67dedd26d755ce79db278d8ec6265eb8a06fb6b1e53ba891b4a8cffe019fbda44ac9efd502d5f7e28e9a5b6f274b2c9a10fae9fafd6c304b61d2680e55485fc8861366f3c80884481d9eef59fb404de854df7ded6543f0bc368c14dd3e531c7f7bc47f7b67c3066bce0e907b38631dd79029adb0037759a5cefa93f4d52a947c7954747971eed844be0bc2c1f6a1398599c1b5e814a18ffa1b803c7742057575c2f6eed605a26cf1610a5a2a0bc976e15a77951831f772a6d41df1f66e55b968b5593fe8a0e051457d306cd0d018ac3c08a27e0facf22e6da106bcf70442869ca30cf110c0259785fe710b04803cf84ea929fd54a40b715dcceb423b225fd6d2649027408e69dc7cc133e67c061d27db5c7d4ced013164eb84aaf8520ec885e1e3e9672efbf113da969e54a0199de8bc6f7b08945a6dd9dc7708d44494785e4c237e837c08d9f50683bec04214c0ff9ab5578ecb0ff285b3b99bbe1f9362255843a78f397e8dabbbc140aaa740922334c98e88ab1021cd982c8bc1f873571597cec224cb017c939c183fb80bc46610cd18df754cd74791341062d9d10b5ce0e3884fd1e4f948c65846e96fbfdeb44b0cfaf41c41f8441a226b4d159a557558592a55de7659c5ebf374107c3fe694dd6abb8b322f3305c707c30bdf156fa2e1356a32a9e086abc3595d4824bc2d845928d297a3b1939f62e55982a3fb83f791eab97b3692d835f44f2713178c9ba7e8324987b3632ae52fccacb56919cd3f763c2adbd41320826f2970821418eded2ed5a7259993341ee9ee9e729d1f9ae8e3f0a27a653903334e9ec0ad9cb04f872d1f736f162186cc035421836d3a1e7567b30157b2398b0f8a938c39469b9f4a94e7ed6c577e7c308608f07426cf833f19b866a612a22fd2a9c7de1be34e1f0f7bd0387683efd1c96a42ebe903417f234e51343f74c2c2706f2c64c1b70f6c62bbfde928dd56b8b1ad5e6da0b2d364f63bd6eabcf35f5f004d989a57de0bd61a48d4ae7b2268b273868baf4c5d3d712d22e123bff060ba15140f8c272b5df04020c94e3eecdceb1dd6647db220a316e5a4b747e441fbff3abb09c8c5c80e7556608864d25cf32d5cffe7851d48e5f2e33cc5d57cfc1bc5a7450f937052f751c520157c0df625aa0e450c614a4f28f3473a90fd322b9ce37dfd4e2324e8ed689d0f8e8d2d67286241db118e1edfa9eaaca836ba6f779e9e651489c906bc07bc59e34b0b572558435000d85e379b2709e93522aee6d126dfdc864034682283349cf5b1e55d9169005c389365053dbed1c92e92010c06a4fbfc3787ff3ac1ffb79023e765f831872c435d04086443ebcb706020b24623eb168b5b922aff5abe4fbb54ac2adfe3e13fc76faf8e33e2660b1ef42761474c39eab9f22e7f28594e8de8fb5cf36141721146244f9ce5a64d339f7dfec55e5f77b27a2e2baea8578a71cfc470a4cf41f975ddf54707c775512d32257b009a7ced96b27459a993523ad3a646e8f17b97fd5173ae179663ff57c4da531631d7799f6340ef71ca1de2538379eeff813f65f75523faab3d12e6f3faf44ee9db8d5f43b0c801eedf54c284e2d55abc7ca308e6d8101740489177141461e0d88e4ba5ca8ec93246e43b626a2a4d89c35d0704c7d4f39ee9447fd9ad4a4879fb7925d4e58edd06fcf17c94c435c1ad001c5510aa549202aa1089f6fcc152c0e4599b1b947c5c3fc4f5f969de8497fcea87d50a636da533dbfbbd40d30f6e1b6424f62996d6f1ded2d8d4f2840d561d01759c71ef4c3d47818fbe152a9afd70eeee281dbb479084a85eb8646732d906d0ea51c4411b99fc26f9667ecae9848addab9190dbd90b9a6fc2c5d08b1cc407977232f42e30222e5a3d110ec04d57f5ca57a226303580cbd14149b55b2c1b2f0bb7a61745dcc634d862482e88a6be47e7df78aa95d5d657b0da942ce21b0dec9d0d627f67ba5b487007b1960bf3dbbbf1e95922a596494ac24a85ff9a9d77fc58bda1c16a722202aeaa60e05d540524348987de83e1385ac7f7f6578cfd2c0d99e8e5174e955555002f74810efcd22e3de01edf6e23928fc642d7a8b08f5773b0fbf2e6f205f7e5c23f76a180a478bbff81c4fc171c6ce10b7abc86bb370df9ea72cb77628f9896139fc1173388c753b63becc5d99f8f71600e433fb9513eae42261c62eb640121d59012cb3c7a49a2eb9b31403f1cc06307e5eebf481586bb2b8b64c6c96e74e8060f7b002000a7d68e77db2f6a8c6e9d58b734167b0caa1c8f318b308e7d2984789394c6b3e8c512916ef50534811bcb1705a85554b7898ac2d8679a3f181424062b5c710b3720253f770592337b7897037f1623d5b4847fca4c2d1ec75d799ac8899bf8b6d3748fdc401f8fc7a489dd09ed7a05f5dbe5ef6276777678fc74f900ced0e056ebe3e3e20457e8d3c0b37cfebe53c21f51c5c4057fbc94474870ed65bec5aca23264d21fab70e72262ad5b879ababda1d2d9ec75af5a9ab7b8fb76893255372dd9cec2086101eb771d5c2c7c7e080188a0b212d0c70bd84b067e1b33e2bb6dffd3e36fa0b36a4499c6bd2a51a66cf404fb2a8bb0f683863690ea51efc3952e4a559b29c340cb3998b4b200666c550162bc1dc6943b4648e0dfd8b187ea0509b58effc45ad7e70ff46c91b50d586764f65335b77fc6357f45321f721e0e3125ce4a6b7830546b0141b07ec162d6ec461dabdc879b355a42b5ee42bef9525e9c7b0b83b7517f70cfb053af7f7d3ba22706b57c7d117987d72dfc242b1b2b9325656753df912de3043ecf090106e21522aea2f3dda669791db026dbacb4238e7e3eedc573446ab1224e689bb05e132e898a5b7f3944ba69ba67761f25f62a237d6e35d8a67165d21c2cb9099545901b131c4f82d961eafd8cb589a5c838f6e8a3f920c7c855979ecb337684044586fc6a065649a4b0053eba87ea651ba0ca564d307353777117f4508fe07a97e1ae1e7c48036f93da1a3fca9751e6367846c3148ba800c5d9fb2e122cdc273703b51526d72e722cf4815c77bbf86fca65d1ab71f120264984b89ac3b94e2264529396a5b9c41ae16ac4b12f864f28076724ba796589a45606e90220f47911c4745e2130569e5d5c349644cc190581c3ccfc62844b7d78a74890d064cb053c5ca775ebf04046fc297e8a54bc98b97fcd66a935052698c03651936e28e35ae46f04b1c2b9a88456665c8b570bd051d7fe93ac8ef6f5bf48fd45fc347331182a73d5d8f7664be550faf29f118fa2a8b0982bc3e0984120f7d9b242f415160b94e4c77d46439a56fff614400e9c35d9a8095072446107f8c87a4131f3b22e2deb2a09f258fa88a8bedf0871eadee77ef5c77f17b70f4f61154bc5ec28fc97149a37c96a84c9f18cd8e2269a25e2d21bfa4f11ee69eadee2e45c8c767bb1c9629b801b3d18633dcfd63d0841019150d7d61db5819b5863525d4e60c6641478ab1fc515aae6380b15ffd7e01c1a6496de0434247b7234f2d427d8d489524304f8bbd5f2bf2019d36900dcadbab93577ca56cf6b3298916174219ed9d0f852d9ea6c52d9f4ebeef0b4986e75d2e229dc783761ae522495a886d42a5b179707ffb514dc82657fc11b41b101b10ea5f95afb95c1283a8bc0ff498ee76a154a2dfddbe2bd42831b4006036166bafe9a7ec78b4adc183fcafbc92941f943e4b7c7b62993bb7355f74c4f926bc77bdba0eddeb227606d9d822b41c1d85b154cbc572b8840b9ffbf0253704a8aa064ff7d953a64dc7d1df1ddc7208e706e6956d58988aa3d8ae11e71b39be79b834681fe0318b093acf111cae9b831ce70a6e40ecda2efb69c53233f1b8121684ee4f731b83e06e386303a04719d2c3289b47ccbeb11b4205364c134934d98e25592cca94a73d29fef38f3b34d8525604876a7b6dbc334917944f0705d5c37fa80369d34d9bb7c341540eae46d1804967ff27dd7f1703dc73843328a45f25c024739d8a8eedb52ab658865b703beec4fba965642bc1562fae1c00c9adb3da07b6f3be217eab7ec7c469fa7fa293848f3481bfa0fe55411ffd25e24a26406f1bd46d027f0c129bc2fc41f69aae599fcaa16932fc4c8790f9174b8f850d75b8fbf025af1e578225bae25fc0b88ffdf47573a82eeee5e100b8abc66a1e760db02b51bd85b8237798f72000af7359578a3a2a42fbda6f6ee4e5242b2f0ef60098c2e3566c52085f5f63738a0b681b762bbdb4cbfff4fc44f5e75629e38f8cb9db6123ce72e7243d93d686cd4b7d7acdb0674463b0a54ee905904596290f1b32bace482642c73dad0c5bae89365976d6b8b2a2fc1e9d73b58968b9a2518bc6cedaaa4f2c0b90b6c61816dafe453c3303230dc6cbd66085d01946d2a82c73e68131ead9f12212146dbe0d34d6a67ed18d51ba500166bf28ebb19e37ee7a6f9067036e06562977b5f2aa8bf5de1066bc8a1e25cdbca4035eb8cd151b9d359e8d18d4bfdae4dcecbc2fc0f44e9388e130341c29568c9280e43a3a9ef9440bcf4fe6f6e0c49130a66dd67861aa1b2b18adf950cb0e8cf7115093a3c90f408e63c1662979a14761eabb8aac92520acf47d753034a0dfcc4e7da3c4d80f4dcbd76bc565070065b75ad147d8c536abfef50affe1274c880904a79acc950b45e89de00cf2b2e381a01933d19b585671527a698a9df351ad869ff03da13cf0bbe6dd5e5ad9d532d35a81f2379e9e02b63cb9ee091b728ce5e3600d65b1c0f4d49bb85ed3d5847ae39821fc6cb1e0f9368769bbb0dc006eed3b36b6b3ebc1482f1556850b2de8380b8f80096f01b525ce00b2d533edef37c845b5f1d9d8e26a905e6f6deff78f2f0d2a8837263446de5ddeeda01cbc6328a8daebb9ac41ee58ac4f3a4d4c3e9febf5c0d4d5a73d68ff4caeb5ef19a74a474d22c40fd91e924ede1ad19ad565b7e1013149a8667de5a4b90e5b0e7811b83a130c3239d3a3168541ff348f1da4a39ac7f479a52d215fcc58cc9cbd5e9d4ceb34da86f6ed6814bf549a07ec30a710f2cd20f62a2d05858039e92ce9f76636f978b97a1f7b85b5887a9634c257da4af132c054fd5861a913e1cf9d552c38f9894a5cdac74bf5369326a488563a610dd82009f89f8fa720bb7520fa3a3c8d8c887b9c3f8f972b131d3fd936d83b225f4346f5a963e5d635d21d0883f37eee9720f255b14faf15910103dc9efb892361e5079ec5de75b5f960ee1df0d671eebf801c0e47f02e8016af0ed24fda38214341fb914085525ca3314a45c2cce12dfac438b9755f1feab68ac531fc07b1de57628eb2778a9080ec05570f662697c1d48cb44969c890c640ea08e76f63d3650cdbb613c21861e9d10231ae07cc94192780b2c22ad07fb8c41fec12ad7f2932b6e897a2a19106afa1b254c7d0e5aceb859f8b85944c1f58084dd2ca43c87f6a8d185ff091a4eb5c723e8d249f4f92643f9485b366a58fb8982e62fdea00822a4a8a83f278d7ccf00f80346b3051fa93e2964271c8055fc8d534ad5777b6040db592fc30e0cea17348146b16e60eb60aa6be2d84d5197cf1301761596a710bccaf8e45ee97c079a6259d321890df85fab07a8911892ee60a98f6f2c664bcb77477789ec0d79ae91c216d04b6d555c53a5eaf24ce89b9eff3370678f4f57f33994a63ae521b46ab674402c20dc0772f393e5e90fae7f00353b2f2aee7285d0ca6fb7ebeb0520c87bdfacbeb78a6f4c74eb38b22c248fc580160efb0f58d231ff52b807b99a4f60fd65000723aa2d85236913d80db02d3ccf28017c91218bbce86c7301cb5292d161a8e1b86a781ae9811b21272b1edb037fd62744022af1d705c5b55472083fb224900caea79e4f3a7daaabd9f0b5026e9e8fa76c47c76333e39c0bad19884a67bc1a74c8c0c19f680036135a27c6004ea80488f009957db73af822394d7f4bb6126d37be65031ef31eea8a9a8b134186354c9d2e36ac403bcd56eb114b50bb593d1285d65d6f5b87d8d058b3b45e2beeafc318186d30c9b5930eaed52e31ead3999029c4655f182ee0cb1925030ffd2ee004439f09893de328c89dbcad69edd2ac4c2772d4e0d0cfd86456b557e1f6d203e8756b4904935277515078a457d9f0a6fddcebf7a7cec0dc40072741080c17376b25cb8c726762c20e39fb712096f18f497d5cab41a84af9d36d2f4d1346b522e7648ee124ff32b80bd195540ba9175e96fcd4870338ec28b6e63f017eb507d645a3239520f64b813ba7669ba6d487f316745daddab000e952122df23511407935af01c317702373135f2b09d9ec200655f272ca97c15476eefcb89cee030f4c48d4fb372ebef9f74c81c44ede987af25fd11c9fa178b644132a76c641a47f56838aba753920a9a4719ff7903551bd8ce535c740217d184c558f825c20b0e2cb656d6d8c13e59fccd644e645313fb4e7a083c0ca2b6164fc93fd697d7e2fbb7ccad918e28814ec7c71188ea282f2b6bb86060192230ba3b86e234a7a2d2739d3aefe7b6983f9d874cf5a42ea15a7ca7735394f04a05347f6b1c6598068a5e42f43885aa0646f7b9700ed4b35a48372443612c7af437560854603993d90a50c396000da331856ef736503a087675b0671e2bb46fd5956abc23d1bb4d31eda68e7d960aa4421a02e83e543cdd0516ed219a01755e982e3025837a79668e4d7a26f3d0fd11390622c0f91337a14b9b6fd491750923e0cb9c8440ea3bf4e4f517418e5fb8b60fde5f48e30a72bada738dc0e393e388bf309ae5d5df976198442842b42f878764bbeb8383bfe433bda60f1a37cb22e24f82d76f4e7e24f683813fa8bd65132c1d3305de2ede35b9c39b9e58601a9897f62d90c53cfe752d7dac65f891ac3db96e73d021e17ceb8fb5ecb51aef51f55a4fb17ec6ad665e0de6b47a271b4c6c2e9c40b6b809c8e374b4a979c67e1227fec7da8bdfe1437d7127105b64c76d26c06f2538270847eb72ed02d85496380b9fe46ff23f2ca8652c76cfe8f1f36c16092591ff9ef0d510b8027c9cc3cab87c9c4e40551d2f63a7b2bdb94bc20747a009ea60a7e5234dfca2649f495ca3c8a1f6237078c1443bf40d88e04e80efb4a167960e042d50e485d573605068fbfd35b0c990f335a212f5bf38da553c38d043da2aad3c4c5497eb50ec6fc37db7d8aa8688cd856ab059e0c5c444f788d5063dd46e78221dfd9c44b205706df2a68f88ee0d84b0fbbfd3b8cd252b8d50a6453dbdf4053b20ae1b659f21fa4f3af2709ad84f516064d7784da3711248cec9ca5333e10afa61911e9366c48a6044dc75221cf06c05241f75c7cb631bda7dbf516ad8a03f5a9675524a438f0803bfd181737ec6d3eb4378cdf970721979e79712e7d745f7f954b3f672cd38c9078e787c44e8df43103bfcd6405e9a12af340cc5160e61a37bb6c785b1b2d4296c1211d5f0abc428e028e640a06920ddbea5817a575c8fb088805c803566235bd78038367941d109f9ae51dc00867cbba1d88273491cc00c3593faa340df432b0c5d6c6be20d6f4cbb0c283f83cad3f9c902ac07f410b8673391c79b225fef9af56fcb316338f794d4c8d2e40db14ba70ae767da628d2750b8c714f13ebdacfd9ad3d485624bf9762ccb285bf7343991f3f4f5f3e56f172eb5c15f7bde714344c73d32ca14aff7cfaf2589b742692217277581b7f44afbcd1050665a508d7ff5b16c977e9d7fa4a467d8c7e2323d3296ad19f8e208772d6807d4e572bdc80d222c870d9373f7866c4302a567ab88eacd89bc6216f0378758a9207f40e12490e64dc43c66af92ea6d396e9d347f14254d0f0d6bc53c7fb88b6357ee5991e186cb0b91c733579ed5ebce619edbfaf25cb1743eef2a28868f21857dea301a742e0863fb08edb0e94505852a87c1b6b47e817ed76dd102e1e6fecb0d6fa4e279731ab94271005dd4b533115ae192d42805036f0f1ff898f3e8c2c1347d4b3a1317059c3cc4d9d6afae96fd2facc863450f8dc30993d24d3191f1f0ffb913cb8dbe5aeb29411b708b49384ab74f01b99c7966a9ff861143f828e59b685578675a7c6f4d86fd200ae5574e849d6cd2895f04b2fc52b7a44aa66c809a8ed42a955a37c3d13fb420fb4ad09c5cc35ac6a9799277e8b7a4d569f0c365c748b295e119849de7decbef834aaac641b0962bb8d037ada8fee8e5b6e5de3d7011d7419147f42a4bf0b368387558aa859a275dd77b52991d55f285f43b4120064e26c63e2375804bd23bf016aaab705c4614fe865c57b02ed11bc6a4cfa325e8b3493fd2cb143cd812e5f351e0cc1bc73edc5b91e95ef035db0700959a3abaca45aaf133b05a4c29556aa5dae21dc298f163ae59b3008fa4ae45db373779e5096b3ff35b53230e0109de1e9e9322be1ceea5901b92178017478d2253ded9b6ecac916aab1d97d2f727f64d44d4264060bf3e074667990ccf8de79e88bc2bd98c5a27d0f41f7d6747ef623ade71e1f3cbebe8ebf69e74f5c305983f82a390d8c695b9deda02f3a3140924729cbcc7638d8797b79dabfdb2816ee5da90c0306406b6d9209525d5577cb815ef72cee42ee9e44c945f656569efeb17821f9c8c83216d527487f5db479f5553a7034a65c4aa3fc11cacded02dc45b633d1e7cc65f27cf671feb1243f74e7b032b298e58e71cfcd78651e63d96e72fb49938c292c35b497acbaf8c1e797c7fafd9f744bf796b1756fc94ba56709c9e1f497ab93a2b484985ef951cb2862a696c6a9e17ffbff5f143e1398a4f58a2139320c6101215046770ae2a5c20064ffbc33bcda2a8579238b93e79abd64f74ac23338c742eaa7a2c41a175d1f8fe6bba01e0c36114740e986c82311b2576fac759426c633ab3cb34056028d428decdb3835ee029aedd376e79c1b1a1ed57a2667fa0f7a6a6fab7ad55196c7edc86190757526a68f7cf19f507a8550af2b8ee097fe9311cedd44e1703853ba908d04179985c768cb03e803e61808fba55274e14eeceed1039d91190c05ccc0bfdbaa91ba9fe5138ead9d82de32aa51d4de05f36c10d97cea9dedf7a1826f54e8b05cd37894622d4aff14761aea4541480d7efed359bd0d78cf85428630fa05a410cac473735480962420c86f49233d72e6ece95ef5c5380a27853d1850def1e56fc7d8e256d827d2aa2a7a2a632d7ae0bad97ae284b962c907f69e009525320ead487093d2cd817ec206be7f04bf567922418adf4f897d93711bc3201f747ccc9ceb7fd3b61f685b64478c988ab1009fd5e4550a647d0e3cdc98e71b717a462b162686382a5fb120d1d73269221549bfc711a3b1457ba470986298d6e6d73b03b02e206614a460bb3ef103cdedc24a29ddf6598a88e2d8b0e57c43fb04d01edf546fe871a81db527848cb501d62398b83bd545df9063d308db49dc650e400c1a072f58889ae3779a88884bb602ab0ff21ebbe7e0eba28cb4d0c4b065fae3f2bb99f0f67dbff671d3b4569fb392cfda4ee03e341ca647347af17bad1f82041988713bb3eb681d89236effdb0b449b28b6d70c73899bbdb561a06f4034d783fea4fecfa192602724b0b28f1a8ccb8396ef4034748d4d91fbcb9127ea933bee74b01e57245135950ac71b5b3eb98aaac6e2790b478b8ab19bcc1830f4216609930beb37cf1905730df09ce9242365d741c48a22aaaf9e246675b8d2cf36cb761347318cf821d1d2bbf4cd9141b4f46c9a487555a8c5bb096972c061a8e8f3fc8495067790b7f746ff1771124ac58cf76915d3bba1c1db45cef5c696b268756067303eb84ec44d06182037505ddd32318754525fdd77d8eb1869b5ce77846f8f7ac40d6d97fa52dbf2673ca2e697fe9c871d3fd178f4733f04f50384c01da619d28207355188aa78e5462d4d61716e2106f5bcc23e88998f5d2d429e1d0f5e602ec46f9ece41150ef55441a1bd00f1af957e66a553488f98d38e3797880fdf54916f2384fd5dd3ee3559ed8a4849b1efc9bc70b892ff1303339c29807fbcfa0f218673a2709d888a796f261ba1e6196dc2d5dcd47bc6632e19ec0a25d50afb6c4b6a6a6f02d461047e8cb98f289ea805941d7689b9c48d5a6b1ca00230ac1dc1e721ffe494621316094daf8df26604e00905ca13d9d13b7f5975f0a4a3c8f54b9ef6258b6c3dfbbe155214a26d876e63f320fbce3ce4750e2a6dc6a11a3b19e3e284ff6751222185e42512b644eb2fbea89238aa64742d727eda0c5b965ddd435bc0adb51498c462591657d8bf2a248f4781a2e4de9216bc2e90c70f3b46b47ea4c7bc9e737db279aee5cff4a35dbfc3029869c7097d58da76cd1c4b4994e796a2f08d09263e5794b62d107698d3ddcfb8f56b970d5dcb9495fee9569e7755fb6c020f0698ffe69939474d08652ab039787e61d7802e2056bb13e3da2e000eee627452a461e0cc4d23de5f25e25d7ad6832605f6d261c12de6fb8eedd6b9235891af98fcc9a99226ec846834ab89f7820ef3b405bf6a3a0bed8d3c8f5299765e481870cb8e13802f4798c9a173194bb12dd7278de0f7ec6229027fc9d1bc351fc14f1b95822509afc63e6d57b1e841b2c0cf21176926bcb916dfeceac07b5e87ee7110f257d46b15505b4a9876281bcd237adb2969cdab8d654c4ac289da62c67bee6fd5c7abe9e2837218ae67e3ec870c584db538accddacb7bedcd70323e0249beeaea8f2cac3a6006440c33e0e57cef84c914d8d3fc3c36775efadf3aea76bdadd7fd0a9fa3bbef40cb1d4294cbf5810ce922342f271efdb089ec72eda70702c253cd0400af4a4968543a7b69e358c32d7165589c97962da108f215053f0c3423ba412e347d65c5cd9c5077925a6d66487c9f1c8d485f9587883882618aceefd52caabf21b2a06ece1a9656cb1319d958d4b99fcad3034c5552cbce5fafc68bce74f0136c3bb11ceae6e43cca20697fa4b920ca5b3edd76639d52b6b8529059608e644d664bfffd6e70d1616f0c10e1520b65173eadb4a010bb35f1ba2df3962559d65ae01428d275d3d02cf410799d4e454519e74457d05b773c434b4cd75756ec2716e7ac0ceff957300d6216a74e72541b0718da307e857a2b612617b542c735bd3d49bc518f793a0a201954cfd984735b9f819f9835db0f8c0166e792439ccad2c1a9aa32f6542b57426d799b7eeb725c9fa1542a806c7e412f7aeff2402fffd187551acb80420d44e535521d8db188170c039d44cd22f7830fae8fa6d577f49feb99f19a63e52585e038ed0004ac1841df18c13263a6b64bae957044b8f18ff786cae306f9eade4318db2fed54dcd9b834796e9304bcdb1b0e4872a4b84a4361e3ac1969390c1efdbf012342b2dd25fc1545931b7869f4318c4737fff16794366bf5a40670252847481bc9bf1a05d3f3fcba7eb0b28fd956f9faef56199899340010bb535049b20d113a3aa58064738c26c2ae1ef5770228445ca80f3ed2b55640085e804e6727fa8bc0e3d9edfba82ee544bd852578d5326af3fa26b27c623c1722571b728f58a50eeb23fcd7f8391c5e852fc401246e527d5b98ce7d65c36c0c0f65296a1a9bae20d0589d31eca7a3773bdf99c0a41395786dd721657bef2b54cfd326c46ef18b4ae9ecaac22904300c05a5e66c7ab6c6f555e1377c091054ab51979df14e9e18c7b2806b4c098e58afbc2c7fdf3a9966ad0548a3304720b100c49add89cf33f0aa6750ea5ec9b2702041b3daca6fd446d4d17765d20f880bc194374fe1379c171cd649041718cf37b9611d28a52125838ae2939633fa9d1011fd03834cfbf731e9fe48fca7354e4f1f444a47d110eb71906f16a81d06161a34bc38ddc322ed0ca426855e7368c8a1265c69325dd7e9de5791a0311fe3d827088ff9c255a3421cb97c7f88fb93cc073d4f6e1b9c856173348abdfa1624a648629c652064f3091a898e824a8e90040869833872a7bade077b284d44a533e9ba49c036950cccef230c128438adf2e9dc02255b4d76b28a1a4d7b0034428ff39fd7baa624708765cc423de3c30bb4895d7f00a350cff74b27cd5de430dcbc76dd4c3476fc4951773abf456d8216a0c4d6c3a34ad8d10837b6a9e357cd3dbf21654f6f2c484d53700708b35ca65c36ac7dfec2b4c320cf62c175a9a9f1669867d8e4e6d06d09e03ec71837b8a0fa39a7db9cd9685ae50e84a4f0080813e08f2781dca1141fbd0a86461da2d349a2a82a4abc77f3088c7a1b5c01c0111c1104eaf7ca7174f7e7163849a0fb7d65feb7dd40222fa10609ee22459c47e7ddb06c2b929194da5d1a9657df3491ea56a68e77d67ca94fabeb19548e60142c14093badbd07b2926f62885b7b9f910fa6ee3539c8eb3cc7786303708d812ab9818ba786ba501a05968e288f0558778e4f76e5ff75ddea9a9f6f2a9064943f6835ff568475b21887aec1e3d01675d5c0409c677f79f0634c527a134d1e6a481e0355afc503587dda6abb79617323532e8a1f06701e16fbae89db41c30c8c533111e4f80a697f14e3fa9ef430fff47b3592561ce9afe5621342bdfec9f4783423b8202eab57ae7bbd24b642bddbe3a062be3e5215b98178f400e33faccbb879a36e311ba24181318b8136c8eb06942e86d957cfc8fe95b777f7892cc624bc1d777320e53dc03a82a46232ca21201e340da984869d32a8d8a3669d86d0fd99981753ef90f4e9f7a8b0eb1dbd0e3c7d06bd03c975b3f07f162379df07b49dfbc039125b96c7fd4304f4b9c43580825068e32755021b726cd2e90cc2f30c9e48783430efb7a4084555842ce84e4f53734ea26f888d69ab3dc9be016fb508d83663f3ee990c34b904efa4cc9b88544ad77d4016080bf9b0b6b73ab5b48b5ecc234c3c30e7544847c139e8798975a50bc4ddbb7c03a999157ad6c0641accfb85238e4678e7a37e3dcb91d6013e4923ecd5dc997e9a4cb547741857f36d6d06e99367f8f27eced6067303ab4ef3581d0ccac8d78ffcaf5278cfc3797f51585a35ce65118939b6b2e1dc41f05cead3b66263abbc2ab909bf8b5ba13818a08b8b09d9bb42c27070e11700046d801afab7e642dc0aeb1e49600bbb8c47a0605020f3b4e1f0324c0c2e92f71fc98dc51b9ce7cf525eaa1b701f34d9cca7b8a436dc6b2ddfb992f785514750aedeb8a7aeb9360690c4a9bbe06945893b0a9bb2d3ac847df36cd8c946cd4db0b146ea0bc78479aa8cf66f36ea19e3fd2d1309fd5ed699d936e1e784e2e8eb9222d26089dd64d22f4a962b910b865f0ad725d29ba2fe93b6a6f4af07f4c3f462b4782fe8481837364de32ce029a7073c9bb104032fa64a19bd00480d58dd5e94f936e9fd0c000d1bc7477dc3aaaff7c6c86e6d5af4caabcf77a72f8d9ba96012e281e2621383a684ab0f34f957833c92c204fb9b171f33a91ed0ff4150b7fb339a49a3decd0a4abb5c7b35cbb5a2ecc536f2920e446e0fe531416eeb89efd6c43d4ccaefd6ee125103b8fc4f000443125c211d63bd8e40407738ff35807b859e1a392ce676bb906f8d25066dbc62a2e55e440085ab39c0360c777677f7b21e26f53535a6709d84961a96ca9b105451568117a399ef2072fc786f712bd3fb0494faa08989a6c63aee47fc4fec3d441c1d84770604ddb3eff2fd33db04b2783ee54428388431241a20b5ec3d5badd40a60a6d360c9d97e91737a1c828ed8da1e638ddfcc32923f16b8a61a956788e6890219349ad945005c03550f58a5359a2ba9d7eac7c3c96f00dc20ad445b25f8384ad3bc3a7ae422c4ffbb890586a8dddb885e97acf165d991e49500caf4f9d44760ca5b24c1b8bf3c9aac12edd93cb3defd9724dbb4dcad8536f4ae27a4e878688f712eeca27c3ecbb77c0536748e26d1524b7be49f42da08467a3dd7b7312773151b386ca8e0fae6463eb57471846a0c851608fa071bd787ee5425338f4d07669118f0eec2863d2a1314e5577da826c1157665f538a7e3c62a09a09abf7c4975e28ffffe5a6e1e85378a753cba70ebd0a9eab96d4aa296f2ff5a3559d55046219b7e0688a191c5161c35d99f266b7e45d8b815e5c6dfcc1f73dc30dfb3ea736f859e25fd68b8df05cec869c3db36862b26f096d0a5cfbf574da472ca648a907eaff3e3f423531a00e8ddd1ea54216c8317e47285ede89e9507efff451e0647a33a2d8eed3cf1444d135e82d9d9a351d340f1752d47ba89a2c2acea14896efc666a4f88bd15921826849f9c9aed8e5d71fa0685f3399ebfd9ebf6622029232d62a493bd2bf1eefbc137df32c7eb07ddad0c61453dc91b140342a402baee2d3621eddc6ef342cf2e9c1e4477970e824da2f2f20a093c9f524ecbda24209e1090174281c083dd5eacc0a0e004554d58b6ed3faad361d3d74bda9a3a04c79ec4f33db666bc175ff0411b72c164c1beafcb1daded8e7caf8cfde33cc50498088d15389300dd7082bac7edb807fd8f47724c73d0912f2a2708fd4835b45b54842144b0d03c339d57eb4cd2e984dcc0f69d76813e1c2660ca188048cf76a73e90b7bd7404129ec6f3c96ab01d98edb71a810e23900224a3e6ea5465bdd6bd421d4137c64aece489887ef36719ef85dd3cc6822c535ac45ddebba6eb7d9d3a6613fcb6dcc62648f79031f78ffd1974021225bbc3662276148255adb742f1c9c1453093c98ca8e2489ac47716464b34d01a38e861ba92f6d6f25ed35d6b6092eab23df8d05c5beb0e4df26ff9b11bac8e1fd8b0b64589a937c1fc4c0ad323fae4639ddb0bb6693a2353a83edbe4017d9012a2d77d7d797b20b7f487231cfcecdc68701f3f936e92acb85b56c334eed074cd72e152a27a82d1700a73ce54fcea8e381986ee4274348b8587028f4bac67865918629cc21161c71bdc4d1f6819f56b29f8d54f863ae583e5d06dc083b9aeddfb46e312f70a6a27f57f5341960cc14f730d074203654f9acf69096e155def1b193686ff9b57ffd604382d8f76d21d379aaf7c073812931fa79c6c3bee12fda9d2ee52e49646c80f48f08a79d07479a7f018bbe0af97f84e0b04b73be44af5520bd8a7e16354a88f27629ca1e2b74292679ce9d587e869139d8c84f8d5b91f68bca518b20bc9c299fc309822b6055557f56dad97c26f2f590af051feda5d8a59147f943ac6a83cad705da6c8b0fd1530efe511125753202fac0054cf10f8164e684e49129576d8a8a8668f3a4576d0c3a1278a51ffa9e5a3eaaa32ed5532f4f969e86178e36839bc25b7cc86c0d2adb066a788b5443542bd35b3e069945d62c012baec5c47010f19daef0489b4f16a05eddd7dede7b15aa18bf21d60c98ae42fef6eb63f5668fc7af3cfea0a7d575735e6c5f3b055a0807de35ad0a91e13d66bb38891566449f34114b08536ae4e93c18e1327d1a9e47fc6bfa2b3d8ccbe2ac079fbe23f9fb2d63839588da46daea71c00162b9c81574a6602bd62a2fd64050923cde643e321e164bb966d7433698fa169f5b1bff7a965ad3834f5d8380d4f620a0ffdc29db059e2b1ff19af6faca7d49bf1b1bfff67814a37f7ba5bee6dc054e54481bbe1b5261020c94967696030be3b3022778403c2959c712fd10828fc097bd33b0739614ae0d7dfda6b54e074da259667e865cf64e13f4a6fd807f280e11b4f40fbe893199472cef1de40213c374c81d535801521f4417c1e3bd693afb6fe5501fbaa3128b38b87b4da1269bc203acc584f2b77d834a85f0cb94dbe463eb71f7fb449a0efeeaf61a949df3737bbd8c732eb6d883013bc03459cd72b0047e50b5f84122124dac0d70d7fe1f19641350496457591c7d012845c0da1c2506d9c2dcf81109eabe7645340d9090d61a16486a95c0b066d634ebe6ce57145c2c2b0a984404da0281332abb8bd360062eacd813a5e1e39e50b697e323a54482b7d2f12642742ea6f4071027465e3a492420e8ba2652f7909db757fefccd0b355f41fae2de56023ffc4c07c11ff0505543e2133f6c6ba087ebf0a858c23ab16ae4f6f62e49a51ee411d7f656a26ef6413824260703a07fb5d03f6fa0a2328f2a6d0f4c0124ec876cea8009471c8afba08f03d30b58625ca86233ab85a446c9d036746cedd4b6fbcc6ca1192005dacae62ad307212d5f2b03f2f00a71e91d429373ae91636970ac244380340a9449e2f19c75cbfa754e2c12b72d5c138420ceb230d89d9251bd9695720b825e5b6fd1d88e446a84371ee69c7428e285d5cd6e4751e0758063d3ddd7bcbecf84b0ed703515f7d534117584a449d9d4c91ac33d316f668c49516ecb0dae6bdc8dceccbbed1ef923ade53ca26efa8909681f94c8f5bbe76879b47152be92ff63fc72a74dfe4342ed5261605f91b236e8f8d2d5e7ba1e82060d945e32c4758bcdf5285f51478b6663c4f1a24ba2b27d6f825a85e158922268469fa014feb8d2f5cc4331a13738232145d86edf797ffdb8b556d3687812389d6fed91862d468ca7ae462fbd11afc479c8d72bb92483ab62aed9dd84e26f7ded702fb37e3f80ccf3d35e648ffa7de3f95dd6d74733f1e092d3d7f80450a41120510be1692221d3c33cf176854f1a8bf603d9198d9561b6452890ff868bdeee198ceb092331e1a03f4820bffb4adb0983f3c9b8231af41cd3f2833a76fd6123bf2a263fd7474edf8f911ebe7073c58b4208f7f32988f13edcc97a89a13b94928848fa130cf46e24e47505f8820f18414b914e06c8612331129a527301f93a351a464af59b536b581d3d098abb698247af854d33725ed621d2407570287edef5cc6bd668cd51a25684d70e0e46692e5cbc24a1c46d60184c75846a977b1efa71702806b3f44c19d9344fae1778bc5cd52cdde51b487bad840f0c1cfe6a40b3f8e446d36ebcb5b1e3c456ecf425ccab66bf11edcfbca5c93427f1f52ae75fbbe5a0e2d8ee6ffa591f41dc60c785c48ccbcb266b6610ade800650e91a8895b7ea62348120fbf719c7cb5b03d5892c386505dbc1ac8d49a97ea472371eed97b37e7b1e339c7f22f769d4d350dd820e5eff062f71d9448f75c221b6bedf60eb551131f7f3b12e875a617807b1d196e5756bafde0c36d08de0f0997fcce26ec049828d1c8d9f665b0c4f2432d920633c4efc713305c861b88cd879f41e9f08665401cfa6ef77970acd73dc99fcca89801b02f3bc7e6cd8ac15f080bac9a1b8a8136223903770f44127fd35497755cb39d64cd13756bafa760d6936fb489a72e8e96f50dfb8fc5958584b069904b4800331f4e477509ef8687d50fe9f847c6051a2b924510d0c96c03c38b7f531bd49bac7402bfbc035dc2ae13208d7667868ba589f31ffe6b48da25e1ec55f6fb0a5942ed1d5460f178520e4259733ad95069cb0d8ea30397e8bcf0aeb3a92c673a2a8e3d69c2893bafc65fea8af80c855fc9b2ba626befeb08b93d38f313b6943a4c3d4df75882437993f65bdc165f94dbc8dc0638350038dfd4f8942d0af26aba315adf2923cc3862234a7f42c5826a1efcc54403f65e915dba1ceb90b202dd19ad209786bc5229b15bb09bc4e951027c58984af4ebb8f9f05df014b074bd9921fa5ef463b113d2d2661a63f5b1eeb61a049b1e0e8683c4f5b0f4f5fd6e7d912843522de28ba969a4309fd9bfe302acaa083db62a694728cf5c0f3cf5c746907b41c0823b86a4d695d4e008db3ba8e9ed7a006e7091e6eaf6df8897305f655ec1782abc186fd5433ef36449710198f45861fa9fa667ca6e0e8ad81fd547f291ac56c78006dd661a4bc540a7e726aeee9b42641cb8378b517c714b1a1b9e5c7d1b358a5f2137657d50685002c91070ae64e1c9bebaa05a832d15f37e3083f832baae214e2c58e82adedc0fc41ca4c6e3e77c43f8ce7c5765f16f2e5fcf35397d748d1358db211d687dd463be4d0eeb10ee7947d06e25cc6b3d69970cf09a19b2c7428f3719b25b86c4c3757ccf1f5d87fda5328495f84d4ae42ccbc7b11f08b75fa1985d4ea26d11ca362c9ec309a2dbe025fed5bc019de1bf88a865f3ec97b23743adb74222bb1554912297cdc98befd12873db065e4833c8cbdb1e54c6ab23c749bf57f8b71d9a51a284efe42725bfefae50b284eb0caf68e92c938114768c9918a27fc92628817c9ba39bbfd054301391d089327fe79aac5c4384516485bc5e452b9ba4065b89cb698e58651e647b76874f8bfd1b6f5190052a5724fa2063c7643f60b974cfe89fd395d399878a6c3678c15e82866fe73aa0955079c4a5a2390ad70a2b81f43bbdebe1443b3ba317a9dea6126f3c2d5fbaa57cb85ee3057465415d81ff956fdd686b91b496205cd70e4d53cbdc7a78fe77452b45f136ae69218e6e1f39c00de3768bb60cc102114afd7b15634a0fc810e116894b8a76a30f20aa5b6984a54e53b37fdeaf0569d4799bc4a898d1d78b89ecdf5515b22859d97b5699151377ba9b5f556649589ed69b52eb23c6c9c848ba43b8542f1d842883a77aed98f669f34ab41bba83a52946127132f1f6e2647a7eda248b47b8e415274a6ba16969397544e3dadfdfbb644f6b4448bebb8fc74f235904ff67276abda7b1943dc31c99cf881edf4f85b8e878217ee71ea49a8b0a3229dd71a87322ef65308f3a5726d5ce98fd351047a33771df0754c0e08176b28c4c29f5ebfe1ba77b956ba024277a88db3f58f4f7a5c00edfc6359250fb6effd45c5e3c85c13f8d80e4677f7f71431669aab8b29cbd80b6dfa6f92bcb1fab9238e93b0041a30e3043278b90db9879f1fa9ac9a3cdc909aa41d14e8913c74928f827e683588577bb2afa5405db587b265e145de7129a497263683b5f66ac77de741249392336679b4ff6d34924a5c950a0825c0e3118405058ea9ba8fa9938f4845214f415bd52c81661c079ba37f255b5aec44b4d1b801e070d875e790f398092bb0129430ecef82689194ed3b3d206f233a876dd4845d0106c5d0ff1dca08f65275ee7078d5bd95b12763fa101cf8ba5dc9a0983876ffc5843ee8425dc6dfb6c7439f85251594dbd1b0033778ddffce987b5e056084ffc70dcebdfebe53dfecd8370eac5eaccde34f5182a13a3f575e212138c39db217f455200932602521f55cb37729263b2457f7388ed96c4e09d172a0b29a05ac9fe1ce6e35e0cba21227b1a4be8e195282c67a579831ecbccbf144e0052a2e7467e49682da9cfe18f5ea3cc347377271f8be1f3cb993fbc86945cff01a4a96b9270f7917b8c74245f2a249d3c6c45bd6595c300db702f02c741a6b1403c892027205bb68a983aa97246889c5faeef86f10cef7080e5d97b1281d849a2cad845a753c885cc38d87fa8f54c8246056a9446b00598daab1ef7c380692890213e2421b6dc575c23feb60864504ce8bb5da48f4b98afac8e27eb2cd13bdbd1b5d07df11d8c1b800729aebbb0df44f12efa598216ecf44665c9fdfb71a9ed4e9940a452526291e8253d7ea5328a5e73eaecf991053a89026abbcf7ba0153b8ca112af0ac2a62a3755d2b7ef86512b0123b1e4914199a26e1d95bec244b605dc391bf1580aabcccff02dd15e286e929c60cbf068314697647cfbea319a48600106b478c1a9b532d4c709259f21bb4443e285a82f1b1874eaefae1fba880ebfd1e2863a5d1c62180939108109c2f7d4b2c89433513e4438b985fc53c3af7d3896e09b669bc87324c51494ff45384f78504286d9c7a8f247af20532a9dc5daf6428dbb69cf8c75f424b9466387a7d48f9f0ef510ad45e21ebd059603e0487378af1895b36443e44c132ce9ff74ac7764c2d5889d063e2e6e770f6560c643df497da986a46720138e6dfbd8794205dce7175f855e8068ecb70c3c909e22d84fce915a9b256d39732db1fd251507eb02f3110341c084b29007f583cf30ab1b21c1e1152adefb15c66819a7cd847c1c2ae2295abbff0a7ecf07ef4f57ef705c425c81799985255e56a52c2c0fc8e4fec23f10d4302642c9a6f498c68f7b3ead26ec4e816762086450dc13f10014d1a04ccecc59cc7f4d4819fc4fa95ab77f87e5b46169e67e93e3654bd9127fc85d07c15acb833dff9807be9ebe9683d161bc68edb463dba42d6badd1fab07163aceff0cdb893d49e337353ddcb3fb1bdd61afa7bc7fae503c8d7a7843730c109f76f8b531f472d21c387e47d52d2b57cc65bbfe765ed5f03e3a00a654e993f005e066b7fdbe9d7a1d82b5b03eac461378c0846c6dbdd0e3b2a967ed52c6b1ce8af912e778688f419227043cbae89dbf899f58eba99cdd01e90f6481691da3fd4b2a6dde9d60a24d6c1d64f1ade3ea04d88ea23423acdd24205b1905ff8622e1e378560cad141ffc061d194fcefed76a0e6b7f58ce5f0b70ff08a115ed7bcfecf8b875721e1d67ed8e84141642ed2b834cbff800e32b7855ff60d245cb4c2226d0211708a6bd862baf2dd58a84a333ab771b38368953e5c272d7988ff478ed2f208ad78fb9078b8d6906a38443818cd65b374d44f717cd57cf1574528ff89eea82ce1bdf675c049811a12dff5f7428e3574f0967effe8fab2bae085e1bd3d20e89ad88c612b62d3911b329bfee1c4e1f3dd4a7b53f8d5a1abac64f0f4ce762abff210ff5ea22e13971790fe90c50b3c7ab2c427c79c498ae0a1edbdfbaef08a89454d14a0b621d8572fda000a5608e295e72a11b0a8aaeebb4d636db85d2e153b98ff79cb3b7713db394e4e87644d0979f3f2b2cbe5dcd10cbd1d9bfe1a14286e852464b1c12adec87ea7fb339fb094fe269c0afb924838febfd9ab72d961cddeb5194f0326a7e23818d88ccb97b9a1d7727e0475da26126ae053e26ee415fb0c2a04daf94812750524a82f82988592b1fe14df53a5c24c7cce4c5d97dbf390951f617554daac54bc0735ea9e3e88bd1dac066a08c47c70217e5e8772bc4bf8f0322783d86a6872754bacd114b8988af100995214cf369cd618ff6234c0a8b8a7c4b38a1b4022a14937884436b6973e04bda2c13362d88cc28542f89cb3cfdfd9eeb7f739cd3c11421ec4846424d35295ebd0f577380205a544eb31f480e6750b9df7361d04d8bd312eb02550f391db51ff98fb7a848e351d0924c5e8bbc3e484420eff7fd8ecb2417b6503339f0de7d57237437f31ad3d6175c119f5ade5ccf7d4436a17de70881c22cb7b9a4b259d529dca9b5b221c16164b5119e7b0c24d5a8f3a62f5053c43753c9b8ee7c2bb7990ab3c8a5850b94124d62a3694e7e3a2249b207b38c6ca768393f1c8751e915369a7bae6e57c867f90020dc42521aeae48b536965c857c1be8b6c40e3489c6722c79a33e5c57718624559d9c2a2b10bce203c1c21cdf6d793e264ea939f7229d62d6e2bbe2a7dae2d88f3da9665dc3a6388dd4ac8f07c23c44f115ff049219c059753a2610be53727282550512133cff93c20e020562e9506b4575e89d2bd604ffeb5e49bc7a4d68bda7e4d9fa61def525c38d516bced72f124110da56f1d431b6010e6ae47603579f734d402c7fd9a531208da7badcfeadf2f4ab9432c775fa803202daa79f65625026559a372c62c35060619809133a41d637782d1a77ca9a4c5d260b606bf670bcd5040327e41bddc8f6b0f0be825b1ffe5c9fc36b8b698fa1856623518e0104ccb10e9fc2aecd510ef4b1523bf6592cbb36e058cd1406205e9cd9c870f22e376b749eb115ea8f4eea3962724c74414635edfd54c279f133861a7bf2bf223cb4b652c99c53cdde670a39f1bf0058720006017740f5e56763668d28203b4c5f4bf5b0a94d2780068aaff991e63858c786aa9bc3c6e1d6979142e78aaf8e5bd7c3373d4b349167933d6979ba14fdfb3720079c42afeab06df27a9b1617055141032f6a827323bc101720d09b4d124f651b174a1e66720dc2674d60e6112e3c88ce62cf2ef98053a04e4e2883739535edda4e040bd722e04341ab911cb1d25271dc3d2c9bd8ae07c2e953318a2255140deda03bd4553c425fabc54b5a669a3451865d9eda3e1aaf1b5149b9070fa765f2aaeab23ed7a29273a90fe02181d6924940c35a3c70f1053126a353ff9f089a54d2944719d4924430cbb98da93562c93e00e63e2e102fb1ebcea94744ac35cf9c0ae50d86964043a9bb104edccdd237b06c317f98e8e1c88b6c9cbdad384e8e17102e954010782f12cd9423de0aaaaae1a48838432654944edc35d75aaa831bd4f843061bdd49d3a5493243cede2a07c65be3ec572208cfe9ef00eac9715c29acb6a21d57f0f267e610dd66813781c6d923838f9dd3babae78c2d274d83f635bb7eb87f959a909aa1bcdda272653886ec3c09f7d9162fc101602f2a3548627f281a77321aad3ece0bfa07acf0cc7ba652d4141271f9771dfbb586365de23b9a642a2adf181e8bf3a65ee671ef711659d4f988c4d8209a4123460a9cd5ce11ba01b2717f9a9e5c00675a5331c8066ea8a6792bc18497907bd22e76c28b7352df95d0b826ca0f3642e44583461219ec5d666f7f65c1ae93db53c4dd2b43bc88be03c03ee4e54c6f6b1e4a3f30364c4053942a005ac02573b8b17723a3ea937999b9e3c5a78d19d7e34def53208137815c5fe60532cf195fa0e4bffa35e82b74df8c14e6ec187243729bb57c68d9c66b0d48db68bdb53df9029e52918125f6546b101130a8452941398df050f2066582d29f5d01a1800a8be0b458a9408457b01819c3f5602c82dbb8c21f24cd97c0d221f4d44ad514c93dd9ce6893edc757b8768ee90e7ef775d20473749da3ab487e27052fcc90e848549313ab52f961d319f61129509bd403b8ecce56958607f813c0039e8a3c45b1600159ed99655bcdefa3bd9cdbc176483629de6e3ff21019c32d6c18df776ab5ff437e1f94953762f5840c9544ccf44adb2b348087e46dee80d3551eb2f441cfeb6f3313bad310ef83abf7cddc63a9f43175e86aa31b4a03449c5ec58700bbb1dce1b169622dca28961ec26bd5919fda5347086e285c0c45d9a37767c15b28ca5060c18adf4b7ace0d44cafe123d26d666828b32e2af2cdf55547748da5ce208d9963c639f39367e5e6ab64e8afbbff20025e989c54bd186aa9ed663cb59aa625e6d879f38846eb2398c159f334f010048662a2ed94a6c01c796f5428adac1ff45f119c35a372685079f375aebe33f9b69a0490dc74cb67ab7863451f4e1b8e241f64393c8e6b5215960ba0f9c8b85cceff807d6a95075d8b1f834882779e2e24d5f3c9a5d03e30a5aafd9f086702f2097ba4025999c092e546c732e8e1db085246f3dfbab937c62ecb1a32443257d22c1a5ccc7ec86bc6dd1a1a57d97cf45efcf647a7f8af3d7be996db53b168ab49d18c9f3ba8b0b0606058e93d8609200bb856cc5de02775d65bb0fdf53b2a519261b27e52ccd3e499a6cd8d83bafd5e5a7bc729155be6a74d1dbdc278fcb22fcf3cc5816ae7005fd1d0cd96ac3ca9230ba0212f2d421e70c80810d4197c7202b38e1c9b2e53112b813d290f6439a0ffb0d7a6f4997790d07f7923aa0ce472aabfcb17ef20903001e94e0b1ec7dd48b6a7e89454589b41275cb581d042a2365254b5700a91546fef83a8b0372fbb5c2fab84d47d39d9c6accf2fb93bf747d56a986fbbb386c046308d588a9b4d25369ece73511566cff4d000e524bda5e30a6ac86fe9e70afe9aa31d81a5542aea991794ffa7a8a4d3bec67be7caf1808cb3291a2924f54f213d8cb2daa138472d833faca26df6a8e91d0c3f44b3717fa76ffa048ea82f2c92abf1d6b08a7e4f8dd26d6c2b44950897a41a11cde39aa55b59b3995026aaabad2bd55e7bd5f4f9f32deeb2fafe3fbad60ba242a35316cb07b813e4889c2530a781ccea1134bc08596c15e94499c5f59eb1f4a85b662efec4a8b0de97e3bc42ce196b440c70100838ad760866901b687051bb3de68ea580d58b5cb46de6b923229e932eb96e091ed42d15ccc410a76d0790c75ce94486a16cdc1a7a68831f47c82651fac1945dfcb66a08f7376017175fd661da1f0575e614428aea3d2d1db03f6672231960fe7ae7d5c36f97182eb6215c5d797768b96c1010cf7ff0c7c0a3727bad75e51f6e80baacf88b076e25c9abf2a851c553b5755194d870c4cb7ab62a645f7f1e051b5714d115e320c6fc2d84eec7b305efe1e570c380ecbf000745801f90926d4478f29eeba7700958418e1172341307ca13f6c129f9a1ba7a986052ea4a6c2348ff02012557f13b1f1cfce34f61dbea47fcbf01bb3fd3f5fc08cc6db804a27029b251ca23ffa991b2b3b823f2b1614b5dd271f160a5311ded64a7659bcbd808c341562764e61ab4f71fcdecb9a255dc1eea58597656308626cf1736b77742a2911df96a70236dca773fa8794352fc2f8515ccacd3abc1daadc5951c80c8f4a8c7c14758c959ad4b4b4795171019b7133487b602cc2fc3141dc6cab050044a20622219d499500133a5fd59470673ca93a1c13bec400a0375513690ffb6445f0c248303348e3cfebf3080b3752dd1d0d5f3367dfd3d21f9ff67eac93de39d8e93ffb4a809e5ee5d61d75ae99fde3bb72d54ce66232c217d8f1287ecbe239489b0297b05c1ed48bfe5d8fac35c867890eae2da43d7e9861584f028942294435e18c5fe241d69a879b77e0df0281c05511b38efbb78f6e83efc4f72cce6b1f4f962936d1a05769230d47168296eb16090f15d6219633db81a7f907e6b3281a668fdaa8edfa125118d0c8ddd435a7257e6fb618359bdc1d5eaef5f18842adb9df9d6d1cb47cdb3e86345c5c8f7afe24dfa8a450804d92972cf1bf9d4f658b0073bdafc27d8265eba1107c2539b67845c7dba01c9cce70d17331f89587244103bc1c5db7b835ee7b3bb85a7d318a91c6913c3c41884a2908bc3ea86350f73f6a093cc8f87d3abe91354947965305d677e3c888eb115e099f5ca6adf4d31e86ad5c1ac53a8dd70d1b7616de2ea5c4bc3d7cc8cbe6b24585a3283f68e7d25f9e29e47afe3ad04f39d95627b84024bcc71d59cd7b1b3bdb14f796acaf41dcfe9904479a4e4720afa75d002dc561444a65acae986e4212ff92326a9c2e9c057448e86ea1ca0cfd3f2fc4fddfb8e10d5fa3cce91f94619b1cb82c1b0bf3370f8ab88c4dd5b161bba2c9a43cbb868049b686108ed0fdd9511d40e3857abf92ceb34f581607769d5b204c4599215a60ebc8e02c02125321aa7e6e646671572f46f4d503ff7d5698e04e62eddae832af69b9044d68dce05aadce3de46f32d7f00a15b564bae557fd7dfef90bff242e3cf8dbff4af90aba5e2b51c59280c7bb8a756b89f6d767a19127231549ec7db80b6dcfecff74b995a49ac12e0c8f99f5581c5747c165d09d21ed0a81c2f57cdaf6fc7ce507e43fc727b37613a08fce1ae4a2446877bf948a7da327611945455d71e5982f2759042d324c712a3cdaaa90b5881d0f89d94c71be5abb9e9dfc840c7c9d7824417f0fd8ddee55638b77980c3002909ce33be9f52085d34d836c07c568807b1a4e7a5c8f0c318771c562bac2da614ce212071768875c1bca262366dbdc3f6c87f7c172a025840fd419d239e36950bcba386db8d0baa10574938072d44c2159539b49e857210047a4595091438d09b9bdcb84d4fda26d74fc519f77ddcdb4b7fa41f6ccb38a9fa9478edf9364e559eef5e3a39ce4b645118c759d314597b5181cd4366080d0fe149e550aa2db688705f5e78dd3341a619c4d57de3265f7b00ee086e5119cd31c519889571ca937185f14b343dcd1e51e389dab1027acfe95a89d00dc755973248a2d0daf88a1e31f8ce8de4227c5864ad2e4656f0124623a784d19c729c612e162c25cfb59f0c50a898cb38f5715ab2306fa1e0507098cd5460b592d7977515aa9961a52bf851ca116879b24896762275884f2633c32c6cf1a40789dc598a2b1ce05d6ccde6e5690cc445ad462d05aa11020c0afb3408cff32d332b9859f78206fdf5a73130dee7b7c2cdbdecc69dbc8b4ebc3e2f46c3e4246cbbc3de35200874fefc633707e3236dbe853e916ae4a6392bdf7396226121ceb9a7066e2a34a9bf2e02b2b0949fc248077970970ae1e1a5e5f8ce25aef84f6af6cea0497f25586acc03a697f9a98d0dfda8042b6b7d12b290b3bd71febe864eacf4ad45bbb748e4596337b123d5794fc300b61cc229c7659664afa13e37c579af4744bec1ced547ff2142f67a79ca1e404390fcad6d2dc11ecee0441b16a308ddf82813f80304a2ad531d7c420f9f5f547785e55d5e1cdf02eed507809061a72e21787168395e1e84f65450610db67650531281928964c0145e7ce879261b6c8765f89dffc34cf0ec9a9ce3e2c2ba99532d50cd094bb079c2665fa348a414ef1bff3a810615e423b74829e0c2a4e7acacc3c4e2c8bd9b314fa8dece5348a9cc63a0a59904b6b4bb00be0e3c22a51f677ac662f3534738db64329771ac760ccb15f18986f1305cb8aea24703f2bc103485402dfbd079c2373328395a1670d2625bebfa7f5091ff0764b6f9bf999b7587efd8f645475aafe83a7bf829bc0d6ff136461cfc0d7eb1d4ef3da2e5a4e06504a2f3c341f6572ff4418b5a4a209756e92f0ad11d605e9e232f066090e020e8a830a3f950804ef9f3bfb2c57ec663ddd023fe05718adf6804373fa558b0b2b1aa6739e3d01d95b76e408341ce07c14a480c8e1ba450b8e976514a9517289ac5e52882a308977d65b4cfd1eb4e8236579965a962945a5d3336102a2303d0eae5205f838b5dfc57ee9fe1eda7d080cc860b29a337be60b25242d6385ff1869fbd90de08f62e83da85434f2ed3015fa3bc3441f00cb46aeff66a1fe4d11c7f92f8387316fc4825e9b59e720bd07d7b0ac5d5c19785183e3a3171844047a663f0595f67b4e6a11db3e26579fc1e414269e49142bc40cf643c0c659b988147002cc7a00b65b4ae672e5e2df36205c32b507075f9a1455e66c6677f6229b90f5b3ead545a928e88bd68455d419f05af4dbf9275d4968473bfe5ea635803cd1ef0118fec459fa1bdacb1a6885b6e0bc5a4af48b2fa809d549eff48e96b5fc9ed1f2dfbf7cdd3cfc78abe68b7f746ee38f695bbdba7a4cde097c356209b607d5a9a26d0c0675e2ccbd05d578c3ac99820b3171f10a7cb3f9c95a29e28aeb4a704e271ee482fcbaad112a834cf4991a3ae2dfc7f04f94eaa6e8f93bdd15926a6fc98f7eff2b34b1e372c8dd51ed08a80395d05786383fc600ed39f7a76cc2e0e1fba4e964af0c7e48b49b5527cf8c7133e1539f41767078b36a26fef7d6d6773a2f36a67e78ccd2614d780870cd73f439859de21b756f0686cda5605c38c23fda2216c0b3d2379b750097445755c23755bd8285a9c17670b419daa39374b42822528651e17b2844d0fb0a7dd11a4552b8586582ceb80cf45ba6fc939d8d636879b9f0f0ce72d481d1c38b7ee6e88e9e1202d804ab9519f7f44f718cc3b9f1a99b90a0a28d0640ec5e5c8f1e6a5a92cd1e4d368b923345ec98dfbf71bfc75ed40b9023412def3ab8871f032b21c9f0f9ea7b35f19e97bfa1c25a3fa6367f4e45228151da22a76d68378fbdb632cba0b9f8f3b76cb9d89d1b5e8c820c805e410dfd7e87bf7da847390675bd6c2ef883d40683698aa45a0c9172a59ae52531981a540cc4417fc5bfa301f1864e814c0fc3330084efe7f5bdff29f1a9bb0a91896b65bbda76fddbad9acc9990701813a4884c5e7428880dc5ac80c9476864e4f28783de9fc4e12772ae7e8cb4bb94fa1166eeb4ddc7f8e78b629eafcb79d37bd0df12c55ba6aece0f0e83011f7a7110c5e8886b6c3a26747b6d4019f24d3d74eeb6617db185ef8f86552e09d392e86b4f703ec5ddebbbff4b2f02ce4650eb1fc774a2e8b9224f9617f1545c3f883ee4d4c8c2af1439ee3956508921753ef177d6e67fd3e1c81ec2bf39abd58af8e448ab36b47a4aee9794f99155ba46af915a8fd018cdcab06b8383e4a7786086d9ad970ba0ba301a95291133836f7d5a8c88257d3000ecdf0da0faba903ae1560978b96f0bca07f4448eaf82166446ef47942ebf068a5a4ed6e90b7f7f4d5992204b4d5f6eff42c86e07d3c98d61d7eec6d8187c38c4c6ead1b865226b3a824e63a134d7676aa877bdebfec02a8071ba821b0cfcbf9bd619de4c42b31120644db799bc9c152c436980acf697b74d82a4ecdddc044e8cf39fbc9e61511b22261df9544fb941d06b26814bc83cc9b045dffebbc1b760a62ff7363f31a544c66f141c2c4bd49df653915585e24f8c4f9e5f93325a3a3f59785e479cfd8a9a9bda894b112d1ba6c5cb58973cd605705bd9b2d1bd63dc44589d9de49a007144852cd2329baf77481ad30ac221e2038ba31bb06f4b2889a4c707a1b5f6d9279a36fca0c4d415c50b583b652b9f0fbcd56c38ee9165e46bd4726006f12ab041fae50c19f4a823cc8ee898ff76999267ba4524fe45988d30d0f14102a994e1a7a87e6b36749cacc5ee81c809321df9da3a7215fa8da813d4ec976688fa728ae46b0c79c883929a8b16601834423bac6ed2c6d5836e907f62d2e89e3157aa9e3e27c40c9d81b25f0653440376c558b41c49f80934e01678a6ed96e4592248cabf254661a2e1782819660810e0595798967e4f7f93bdf9fd001a81661819aeb7d56912e5720125641a19035f587cfa656b31a18327889c5fe865045e21262f995369f7f29fe64c39f75a6789399940f68cfb29b45d0090940bd7beff7e49c7c740c89ad0a1a72acdc66a8b6d610bdcf2cbfaaf56524b6df228bab5fb6e6788162b254d7a95f04bf170668d5c66b2527993c145ee1ff21593e5d02bc7d8cdfb56be616c945a6eae992c1ba32d8a0ac63fa7c32c1ed16f0ad4fd622dc0644bdbd0180883f1bc7ad4b4fa51fdbb8791d6b0b0bc6bb94381f364ce22c60e7194d934454e316349c5b0abbe365c273d1d530f8961b9e9c2f03a6c528610fdeda61cd53095c5e46848334c9e274f5770db6d0838768e169cd4edea9a4b962794d82d4e5c11a60073af574c68ea6b02e0d98385922e313beb67006b2acf410b115f56558f399ba5465c4aaa5e16e8a2c56521b66dc015b59e9cedb3a83594f7ae1db98455a4178b11a052353c11356503b3aa42893db90cc525c47412f2e81666a3b57430f367aca494f95a4acef0490f262fd7599301f4683a06463532d8bd3e38024678065089edbed9e2c8f26279db12d795f318a3ebd0ee4995b2d4672301f2ef6a425e409b72dd604d53e286af1948c873b6c36bbcd071082bc55e9e8da302ad2cf3e9751cb01c6ac38a2834d1f6d5e48d3c385589135d6caed97167e4eb24d6a74842c34e9f0f1b9016a16943338ecb52b4f707c49019bb9c61829fd2e714e6c49fb5c5be4207ee8eaa14ceb6156f61d74530e28c6b60518b61d4ce9575aece4340cfef1cf8edc4e8e35cde23750cf01860e233e34ab9279227b09e86ec2bc91a71dca76bec5615106477e53fca2bd8674e26dd8ba441c8892c55aa21a4715eecc635ff70c0e7fa26e03c52076f2a354a1457c0c56f8b8c4ae408d949457addb57a8b13c1440f646d1a0086b46479dcc8e2198c2010047e700720e3d871b270b0a5b04481f95f385b163da5c72cb306143e81f3a4b0c9b8f7fe9e6ebb514e0467a4b55659deef3bdfaadcee6852cdf76dd411de318ad04f79dde92b28651f006d69a0eb835ae41316d9d42720aa5e628ed4fc3a204482aa7c4c9732dc7c659551839034251936ca2c6c11a46060a2e589a2a72780b7b3551a3b43992bb914939c6075950903c96f1410ba8f47aabea617d8f62277a6b689e9b8bec6a93c0f2ccace96f0b76b4d8e14bddae0c67430ca2441a3bb8683c31bb8f47fed02550c4d35ade8114186360492cc29a2e190635eed38c8c11bf0dacaed456cbe2aaacdf624f8f2c94dc4474d1587a83dbb95262bbaf15112c6244a30916fc629821beec73b8e6d93b62a5af7e6fbad6a46750fb673ef6d229f31599d8cf23dae2cb520e2cf8b88db62443afa172e59071e428a957c8a483887cc1d092c025e73eeeb54ef213853908d836156b647c3695463696149238362da13b6dca662035708c117f5ea4cb3f98cc3de9cb782dd1c51447c4cad40c1cac22deba8e6c1c84264fe1dc108af5d96a3d568c7a62fcd7f4783072942567654d4597f12affc1c9d9ef0105dc18b4e968f7ea2c9eccf63e6b2a5d9efd7c5c98f42bf15fb441f22a7010f27455c497f276c031a343de05f803efd97b5719d173b8bd8be3e471eef622460c379a0636d1f4e84e22c9debb1a9d2fe9e15f253239fadaace1d417161b41df92d58bb09fe97017270bc6b09138d826b0da2268155e34a10fa990d8e1e883a275d0d4b681a4a5329dac3a2797507b4d1c0b6767f722f3bcd14b9a714586cb25b4dd50ce8f28d6c569f7da41d0405cde8f998fc3672412fb472cb160646f31d7cd71dc44f30d60a39b97367c12e3c15735825c16b458dba45beb902d60d7e3ead942f943d51652cc6d3869753b044d69ab700e83c1f55947314f17f6534266e79601c4fa1c2c71cbb11db00846ac68e1ea48100c3b90e480c117158ed38be5bb6d12b301ad6de3b1906c22f605b56b062c842662a3a9569a48af68599fa61275e74e25372c5ba3d71b430d4b7dac91537d0671305077cf4025d4fb29d709ba05b94e7ab4fc5264116e690db98224c005c406b245a38b01aeb0f1a34fd928c4546256744d7d83d2af0ea33cfeeae8f019da61c3f2624c3af58b84153348bd6590865321581a579735c2c95fbcb34e110a424e6f4d6c3ddc9ff1c7c81bf301848fc5125325987273aa469e1e8ac5f38fe8dabb49dfd898ea444a17d3dbd28b288a1e603ed5e0d61927701d94a806604783abfed2ace4227703c50a571977d76d9421704d55ac2a19ee8ec83ddd068f5e0d233242de02b782c3a37f364972e4369df487147b9e1f472dcdc048ed2fdee2d4612d95e612202e67297b23a99492c12379de396590c82d3f18e4052a5de3e0b418e2b4036cc2204aac3fb4c92f0f47f62c396685c1aea4031b78bcba557a51936ad1e6ea7cc523e74befcba948281549ccc7f8fb305bf530bc5949420b37804ecc20405f7fbda71ec28858eb82e47cc5fb92d5af6809be67a072a3fd67f27590a0836121725e0c475691f5baad77a9d7bf81b7d0dfd61fdab2f8156a75cf1a7c4aeec14f5d6141cd029a24a71e81ede6c02a1a958eacd71013ed5776c50e990692e081ee448d956d60a5685c9f2da5daf05b5a5ecf98145fdf543f9ef4853681f596be16cf79f83c4f36f89721b4548e33d29112169cbbe95a3a9e214b49463d265150d2e66b3fa0519bd57e9187f6642a5c7bb66d52070e5a2a2caaeb176003c9757e21f6cb17f4e63bbe969b2d28d28d776b240b741755818b6595e6171e99bce6526f3a6a5c2742683ab501d7a9c5e171fa15f6d4598a2b1b508ee186446ec4a74702c612c293442af391f613428922a8beddf284f2a9a48bc468b06b5528b970b327bc99a4d2b82b586f4fa0fc698f98052749bb207582b13dcae846d4170e5db6e30fa422f81554953c21361c2a1bcba85c39d59a7f06c5166d81f4809f3a7e550f3716e283cd92cd51e82a9bf92b4ddc1b2ede9fa02b8bc16959276526ff724fe8d734ea5b7b1b41ac79697fca35f865bfa827319ecc418bb03b998777b370c2b40e813e4ac9fb58ebd0874e29b612f7aa6fd8b4ef527c0245029ecf3dede2db91bc8d2ee68396a641980550811bc506397469c1b5b27589edb59bc5177bf18098ce31c796b59b0bab76c6acd27a8edfa83ee806fa11140eb4f4dd0412fe7518606df6137f1c52ace8f67510d89ebf268f4ce81885d1f0ef3963cbe225f6364c6a097658f4c3961f9aa4de196e80b0396b1b3f2b90b2627ddda847eeaefcaba88fd1a974ddcb11a2c51b004b0bec08e3fe5670dec54dab30b858923dda90f2cabef79374b63015448ac69d2e22425e5190258aa298960a41fe45bdabef5a3053a66caa2bc03c2d42b64c22e70de76161d68099c9d5ab97d0ade014d5c9b501a124b9b15505de4c9c148c927a697d903326f92eef7fe9f0bc9a7f93c5f8d215c5d7f0343adfc299c39555b09bd198fb095717053bd404b81a01f6067ed3350c8d3f9c73472775fec04e651820da74fccbcac506d120e4e9f856a895a3285430d71ac16c052f1e33de27407d928df2bf442fa5ac1c8a72e41f336973a7427178bd71307a001ce7264274b436c672d1273fac9ff084c02ea9894333c70fa5284b68210948f3b40325def06e4cd28bef59cb200b442fd2829d7a0b4299dc84636c027cfcf57b85d75721675e1256cf6013219c7e96d92056e9bd6ba31022a8dca189ccd5091044c84a8c422d43ae23e607042027d3d39296cdc4f8ead776ece05e0e8241df844ef7ed8399d4b7ca4db22768d3dbbdb8e3397b5cf9f8bf24052c5b5c34dddee77090f003de592645c2d0f0fe1271588dfbf1bb083f0658f7894b6a31de9daae9558c57d624fd90176a183110a3603843dfa9008e3455bedad0b3a5b9099bd25b0af151beacfc89f087441e1804d133a8f18d583eb54c3c6241c8dacb75f121a267e90fe4ab89f3070dd63d5be443565832a685855f666d5df4bdedd882c86b7359d7fa793acc04a0132fd7a03876877b583f7830c9293fbdecaf3a2c604f0531270f9ba46e73d50fd79931ba6ec0d690d1e7fb1e80800e6a4863e527a64260ca23f3109186358b65c3ca0f60fba22c1926b560956938a65721e4a9aa21696b84e1f3bd6c7777df3aad1ec3ba93c4539d1cf2ee39a9d9dc3cac7dc5b43bf0b0edf2b07bafb5caeb735e54f3cd9aa5727755c449659d6585d52fe4543da2cfc746b9b4bd951b3821bff683ca165b43a8f81792b19188574e38691dd3bd9c5aa9461d008ac22c4f10ebbab2d55109659c0415c4ae2ec62a23e39148764caf4bc73db055d3e0618975c782274871daeaa817115c498cb254ae633196ecd758a5ce7c5240ca8a7d76a02089cbffe5f4f44f2918880857da7638067e26217c23f5862065f57b73f56e7b56c62b4988466bc0c17ce1ce16256a26d3a95c151985a84615143f2c3c372f69f36082a2dd1805a8f665ec5dafab6e4c4c861284f8ab830a4ff800561f4d6f40e9fa9063d05b13ef3ff283e4d30f84a062f4ef6aee26a402c80778300db3929df2a974526f0c7e91d930161feb3ca3cfe4a78ab94bedffba380cbdbb2f02f27ce43b259750b368e44a0419fbe224658b8853e3618a5fef83d23c720c8b8fb19ad2edbb3de634370f5bdf8f322325464b2ef43f5dfa1001ab2716a2cb65c689d3c4ec7ecb2c4ed86447338d43e831eb650d55c1ab6efc4ef5883a3053df2fb61827d98471cf7dd0def86884730dc43c21047d39d6e094cf385c8d14b4d98fca7642fff6d906ea05aa8e16597245f780dc6ea09d7c090762591ec1edf2f5efd5862c014852071bb412116ecad9ba1f614b519683a740f148b8a6ed324ab4c3fe1c4927dc898b68116f426b7d133bee620c90d3eb886a69d3093b1a9d2d7c72e62576b606c3be10f4625bda018d5bcff20cce04c021695777c48c9898952f49e4d3da4036eb3ded9c03fbadf12994953a1d2daeea826b1e6618da26b5e90685725d3245f8f5fa2ee6c2a34670863c6b305fd596e5e0c1d37e767cc154d5e1080022fe7088e366b09ded9a19e09d5bd9bada5ad1e039bb747da7098f06db8fd5851dc4d09dd54efcc3c019dfd6b2d87e5b08987ab2ef14383d1f977ca6227c06d23fc9cb8cd41114104b9a72b7d43f7f15c13adc3110d86dff9e66c4a6b99a54585729a9c9bb5cc4110494ec6bb3e472c3ea44467b5b32456530b19bbb468989708e05ee8a2d6cb12525a07a823d742f88b9a1c0e1ddded073d3b7e220cc5de9e0fe7afd3b597cbb6935d0dfb3b5b91395106f9f7664013d5168ecc93156d4d77f26bddd8f4265e534a6f256d2c2b5191d1e6f7258b9f5eb8621843113f4f735f9430205ae894aa76a285633eec6ad398ef683903843d135d54d5fb45ebbd8f32c581e0779a95c214e16bcbc06916a291b77f59ba0405083e1a29a645f8f225caf753e82cab04c9679f479cfbc418adb13d20b9b5a2079f542fb820688296a4e8ea8607516bd99caf6768d9fba8d8b1eac18293b37486dc71ae213ef69fc64d4e850313dc9d6342a2892764bbda0dbc3a33e46911c2d080e05610124cb6d5dafbb3feba2fd35c40147c8a3f2fc9f1a55ec999f15f39ebd3110aef99e54da1e6d92fd8850a0aae127be4b5b273e6ea281e0908c8aec6005f6bc2bb3f1f3c466e6eebbf0d20cf5ea9bb1cc09dc54ab4d1fc762721832718491571f0e183973daabd19a25248d9a3b824bef2cf1ab48a21547225c23e85db2ce5b6463d09dcf75902f640b127873358c0ffa75ac87b4fa771635dbb2812e330f1c45400d4baadcb709fd0ee3c717e5be9ab641dcd0fca28d7ca5c170e2cb0c21435ec228211535c53ee4149fef6561fe54e0057d30eb75c58de0a8e74a3ad642a42b49cd81b656d28aec9cde9df1cff755e92035a885d9359ed7ce40c172fbe65d743f436bd94ae4c9b207d31722d268aeba534546428a678dfa542c91e806a4baf45f90f1c57fe689514190ceaf993cc43a1f9d9eaec3c590be832dfabe95001abf80577e4304e7677a751f925d9af23150f57655230ae113b61c26adedd2cb1b8c6cce63e22f225d651b9efefc8893344f391304d285a6ef61a254faa96e4ffa929f2f08b8efdf5ebf0ad71f469696b5f65ce39256467e77256ed98dd3ac72df7fd4d6736553a296374f41375be3602451c9100a5eef6811eabfbc3123446ad39ff9c490de8c0580604ea023f924f95c83b16293422eefeed082cd8e3a4a009d24397f021370706742ce50bea2a18b6517e9b0d358927962d4473a3f3b1f03322420c75c2803e4b90233542911d22d967ed5f3966a94f818f9ee00f243260a98be4c83066517bb24923587f91da7dfa9eab1f7753ce08dc9ea20277b5e0abe9f84b06965b282ba9823c4d523a9cf2f0407274ec94d83e0d77846a365cfd1b33058eb6d4dcb2c6fd17027aa4e8f756c016ae6b7748cc6bd1af3cc80f9c3232f2f5b5ae6ae64de05c081eeef6d9a4cebc6dacf6c2757cb2185d95bcccb4d74749773919aa9ad42b7e6ab22833783927176bd13431ae3dd99b6f4ea82e207d0795115d2b7217148fb82b7d2f9c3a2aab2d3cbe71a5da0753eecaa438d3bd565e7c92c573ce35b4c86603f089103ccc99cac613989b8fe2ef487b7b8905e7e13a25154fd21fe5b60f73b61e3a5979f0447701304340cecab1a31a5ce30919e5740f30a603bc912dd2fb2078fbfce357f951b152f30ef4395adeffeac08e5e7af83760bcc4bcccbaa783c310ba6245dd7bccfce9a7c2be60a6d70e1ed09f01250aaa19fa65a561a184dcb0a167c2641f735f19c6736d6a7ca7149023e139daa9a403fe41f663a162aede10ace21db2d2c8db891a14d70600f5a65fb712a5fc142278adb527049d96d7b6953cf460d3e1d40fc21634a46daacb6a71928ec4182f77311286d083c883907052551af1f442d7a2143559df4c3f2fda5415e52bb0b3d5387b39ceb6418cf47c64add0a6fc33dc7c6de9ea2a3d246c113fd4ba3df5c7a5fc01ccd521e59756d7404645f402915466794f78b3cf66cfc46b99256b87ec741a53706d5d0477fe46ef2c97420a78b8a18decd2cad4daec088d5b9010ad9f313bfa207c1b7c06be9773f0fa2b8502594e26c55c77d53c825fb1de7790fbf47099eebd283d67c997ea996452ed3bf7f54cf754eccf2292d68e58e0f66d3af7223416cae3bd90ed5f2b81bc1afc5f972b9736110daf8fdde94f6f8fc67ac4d11c4bdc818446befc1c47db6e1cdb8d6a504c6f6e471276cc31be5fd617b7ad023c292df976a39b2fe082acc238d8779318351ab3d751e26a0f3ecbd12d5323b1eaa76c6f173ce0f8880367307ad88ce33eb1067e692fb9c4a133f13fc53239e5a5a94cd559a249572907ff823a4b65628dba7530db3290a270e54b7360bf1052816cc4a0663f6d4588a7412b3744aa11e4fcd36a8d0bf2c279e390d2798e702fd59b6aaf5e324ead3167f3bb7cd7f07283ff84bf5952505b384a66421f059ada8b743712a891c71378f0256d46ee8314eaeed2c6ef84ecc6f1c02c87d1be07c33a95dc75ca6e820b9258b2f66738e3ae88af357126b8f41cac68f4704d25c9c5a9dc18ff13a0978007e6dc6a6acc9a0a1bccef520b9379527bc098fe2321177f0ff2dfa78e614fc85fe87588007b905f07bf0066c5a804b90bb534781f332e7750411c5ac5a56991bc8dbb303b3f3aef348e771d7abaa549da047a9b7e9096b7d40460955787494a3016d9445bba613633cf5bc774f8139ed33e76ea474dded4dc004f12ae9b3b9e2148aa9bb416dfd9b8e29c622d3494355a3521e50f9146a6bfb5233a2b850d12e47fe2af1e69851dc7b6f8f9871878a8bcc41dea71bdbd7d22a5d64f297cca4d18429760a0432341a554486e0044d84275c3d777135565ca5da4383e17356fa8f5c9bb6c3a01208648084889d184b8c423308fd3438a9eaf8f2ee6c2dcff9e4d969a9c80f3ec450ef1e6d5e812b7ce36cc2d205466da5a0e4f1be931d793d25c59fbf32afd33cfd28e09601e33f6314ca9b33153ca803afa8c80f91b984ba4dd8b0a7a306ae2f674b7348be5cb154ce4f422983203b09384755a57bab376787fe45933409575a958045ede03e7f85312ada71c65e6b600c042345598a9b08d56b87040a0e97e80945b6f59da0565f332d0106536ddb3f4be14847e5e814e687eb1c3b09f1979aba0d953eec34a05b5a1914183b3aaabb855a054baac3aefcfc958f373a9bc9552a31aa50000d7d6b59789acc10bdd6e40fd330a4ed67e2e0bce2e96e7f4059747f39f4928d7bdb29db91af75508f458d8d621893d1926a1a84745ad57e74c4d77d72f31cea37ddf126eb1b875ebdeca4d677633980b56305fab41b867f01a884fb88334c9decc9a01373a1a3dbe88751d4b148b2df6107c5df02e51d43fc1cc2196e9105c5f6d1ffb12d42fb7c3bf419407ad97cd142ef4d8c9c233447a8ffea9b2b3b6d4fd932a57a646ccf3ab8b4c9bc746a8e34edc967443f30cee76b5e58f794d5cbc3a8991cb06059e6400f484834ec30332f8923f388be018dac843ff7f2edf7d01db2724d52fbba43354a7f586bd1d98e1ddc9c002daa92359a075a56b27db28d56f3ced428a677341d8f9d8331bbb7442524813214e7fb956507104b202438501a2bfca2fe1fa66ee8ba17328aa98fb1ed78cfed9f1213546d1c0b451ff1f271c8744971488a831eb5ed8aceee783cb9413a5c25a1df5c508d8c9857d6a665bbe2b99b4b8de82190d0585015e7fecd654149966889b8223bfc3a702c9da707df9979952242f6d6dc7606bf4cf453490254bcb038e361e8bef942bc0a0f325e7c143a380d661f9aca2dbfa108bd2e1ad2578418de481ffbc297db9bbf61d2438a87294e2b3ade7fe638bcb0f1e3a353d39c41a437e6fe228bd93154b56ccfdf24ee3e4d6f08ecc3c8b4f183f58d8c93a115b2226556896f428a7678ad44da6264fcdd131d2cd9d4b6e7f8e7a9b86529d550565ade3de51ba5b7540f6c8e1876e39058da48248d155c8e3e09107ac24ec6e9fc2d40b293ea500f887735b518977796927026e604a9122a5d016f8ce08d72cf4f63dc6366843a946939456b3e2a8b983130373c0e5edd341dd31744175b847c865ef01022a952d9303a9601af9678a0046de5ce4cbc58397cccdf2228c69f6b19023fced69c79e092418e2d11b316727f4ade02a893780874a80e288a0bff351e06cd54de081fa05840f41d301d6d1acc82ef9629c1392a73a68dcf395ce4cf30588923d63e4d86fb4e64a821dcc00d39163d19183c2a4bec0d6d858bf7c4aaf8f523aa6fef313b83d53932b99ffcf36a4605d0176f152624ca0d339413d0d158dd48db119dc309b79631bc4dc160ddb3c3c0755a32bcb85f407784106fff5720ed0ee4dbf5e125120263873ad2ef1290a6776d61f9f2453ac7f0f0b37aed3885be82da0d5b15a2fd08ce4d8c0bc61092f8e270639c4ee561d51a7bbc90b0fb72c61d689b6ceac428b35ab2ff8dd9e1aead391890a4a662761f765b033bf41ba5ae9ddd18bd4e667e1d5f7d171ae86269c84707d2538625ff4aae26ad83ccbc94efcf4cd53d68239c26cbafd9b7ccf9df14fcfb0645842192bd7190cf0979df03413dff28769003507c462f27fffd3c9f02ba88c56ca0aff60b7828f3730bf66b3a92613466b466856f6e2fdc4f0aac7401891eb2dfbc0c2a7298e3138a8b21da208fb1b509c711edf09c00fd0fa5c32a580a5fede435bc777e903e70149e55a31b0020c0e6dae8c62cd6c694c2a4db8087d5b16d70a49c2911c97c52269ee08310209c373df29641795e4fbc0e9cb8680ddcb400724b7fb941929c9750370842082ccdb623b49fccf3e6e8c62c500f618a36d55f53487e17ff5b68fbe940e7e3ae1350d2b69e8488c7064a605a120e3cde1bfa97d3f01e6f75a002f6a9f2e43e0271f1deede02e33495094c5b4ea1cc91292b62329dc05e274615be264b7920d6b539c72db87ae17527dccd1c1b08799b8a2ed5448728b28a338f32a18dc252ebde9f35e8807ceea63ada9201039c2219be7032383c346bda44a048fbb8594933cf314f9c03c2aac147c07c0d608b15de1f558322215a3f81e5c451a05902d45c841dc2a65b1c65ad5d5ed1bab81baa7dd770ac28fad459f4eef125fa9cf52bbb01964c864b5a440ff816ff74b370fff763882cf1a5f457cd83e5889fcea69d0b6d96698c6b04de83a3662f4dbd3e90cbf9f65b2d9f258120b272718b576d43dfa81936d31ab9e7242975188448b8bd68a7ffce62ad5512a4af061f5de13f4f8e34549f31e2692164b8834ddc76f30534f12a2ee3775e781043c49a2b3a4e854183d24ea6917b08d6370350f23d7199db9b1f1b252c099faca3ddfce6322f0923a8cbbc68e01739a235b2faf41092cb1d39d8cf9482ced200e04f4bf8bc1c69436be01b9fc76da948d71cf55bf0a64d3c22c876fbaa27095c972872814bc0e557ce2e90da65e0adb4750cc32ce4063d23a08ffa55c24e41929497fbb633ea612326ff8450eb252a5dd0d2f2a66960abef754e8fa95b98a157bad903aa082914b585f3c8cdceeebebb1493f73f48979dc87802c3a8e8f54b68b49cca4e760639ff5abeed37d15b99ba69323eb65b3619de46b28015706cd99aa795dbc59164e83398966522b651f41c2b6194415471ff829a7d99ecf1f2af503a4b1006f52f34e0fd28cf0e5da1e9017f68dc12ad43cc3de0e57034a8654070d263abdcfed1251e3675d3b8a694953c1cc68ce4569e403a819d61f8f0033d41f2cce48471c41b20fd41903b19fd32927153a929ae3c9db1681e2df865a055fb12ab05ae9e60ff375353b0cc7d18c71f16278ce77686dc532f08bdc846fabc639abf28bd579a00863310735f152041b8151678733103c5021405b69feaa07181184fca0a840c4e80e92f7e01c97e63dd4767c5febb74c074002cda1474e25ca9041499a6ebd42eb57d470038bd979d42ff48307bd501aaa569258fcbcb0ac00867037cf74d623f9734ab5b636ebd6f3a7be36e0ad5551e8b85d81e61b204749137817ec7126d471fcf4ce76b015b70cd0c017ce840c3ff7a731f9fad314ccb4609d6787f89175ed54d52b2c75ce7ad4187275bb60bd5374cd53495498d06b4e494aaec0083818e67917fc5b3245e1ab665400ced75766ac179fd64c6a5c7c45af61e85e02ada6fb8f1827bb9aa285ed790f06ea07b9f41c173f18ca3c18704fe4fe5b88f75dd2bf843d973408fdf29156759defe14fd4c854d506907c741d14f45e4eb510de12111dd9a34231f2d9f6dc440041b90ff3c828eb635674cdd3fda73c0d2bb30708eaf0797167a0e768aaf02cbc1c32626d0ff723f545fd6adf5347ccd33ee91765916c75371da9ae75b56550757576f2a47b92fc49ff50ed53fef4d0a73ccb71f3bcb4f87bbffc56f1dd8aca381d101469692e0cc51e863c90e7cb896b67150eb47ef119eeab8c88e9a318e12b9ff80dbe80cd61b44919ba92c06aef2a70a36bbd05220bce8b93ad5e777ab5a6bf92d52c7a4df8fedd6b59809a9ac1204d7e1e592b99e5bb90acbd9b6925f46401278b38a18e06532667bf3fa7e1d03236ab009dabef87e8c6a1a95818b79f61b2be0449dbfa1e71d18f1b58213d96f47674ee5a7443630a4ae0b1bda929596b077978b526ded296fff243af9bf9d4ceb8a4822eadd8d7de73b0cae6a48f26b122948a85a3241cca8838d629b40d80bfb6ae37f32507c47c875fe502d2b8e542d6d14887439f933434f2688a06cd172eeee3ae34ef6e08bea8a3b093d2e22a9cacdca9d531b35a498b0cc781fba3779bd0e8a6ed12d1cc4bbe6bf0f50ff0ec9c121c1047d5b16d01b329c1d24994f02e053abee185a247634a97cfed36867772827908bee3a82430a030d25c84d0c78c7e1091dff19232297b9c9739d2c4079da2df298f03751f28e8ccf8428b6b05d81d7bf9756f2ef0c88f0b20f74b66e6fc885143ff0095268db58e495b6c479ace6421f1c0602c313572fc131857ecf1be55f96aa060095c29a72715989de5e7e6a7b365f380faa7e5ab04e48f30171f3c3d51093f864e24b94441e5a5905262cfc1ac79fff8f7775fb40a013b91f8d7965880ed3e6c8117aa8fbceea03dea0620303125fb2e43f5ea2c6ac5ce4a9756e9cf6cf2bc0e7db7a3f6855f9494c8582fd0110f32ca026d98619e99559a852bcdc373730674d95b2c10a83f714accede9af92754fcbf987265d7ba924d19313228dd5f3fffd1a219efc2dabc6e558cc65bcc33fa49249dee8e31f5451ce899af05d50bac5829523cd25784c343d7c1e3ccb4703861ac86436ffd76fea34f903b76c1a741ae8a5c04a35739fb9bae8d9505c754e429e9793346df1a62322794fde0a8a4ff93fab526dfa77842e10d045b26faf3deae9936328b821af361181ddcf799d84df49519615fa663c230fc3f65b94bb8e306138eb2fe3ff1817765b964ad19685e54ce739bc043842259c9aace5d56e88902efe5d5a5e16def3dd33b10c8f9d4d55e5397c24124f51d85c98bbfe9709a27664397d40b56eb09013f99348695586c7fec7b1ce65071eb57c2e4c7075a8e247bf2a7d2ae392a457d1bcafffc4a3cdaac8f29c7f22a44f7c079018154fb390498dab7377c35c01bfe11ab58aa7186d1576dda618f925f7d5f14dfacd9e76ca329ff536b38e8deca953a272bbe5b1a954fb1adc23ac5731c035a3184520624836d6c1a7d5306bb9d35a688e66155acf910f9d079624429f52369c0011c92d39cd73a55acbb39a1fcc0a47e96ec6d29bba0df543ad9ae71371cb72e98f1392682791ef3e2305804479d04bd36d307960796c40be82cd1fc683f82d384c6cc15403279d4e5ab2b0a1c80f171b1b4f11fdb6daef56cca9d430e0c4314a6e78f7ee37d9b20544e3808d007ed412888cd212d58901c2acf7962d9ff00703d1a545551ec8aaeeea12b65738883b25ece7dd211480b2a9dc7efa1f2194dee31ccaf8665af5f24a5e3f57355f17f04213e5ab58e898db6b5acf06b4a16f8d94b2289c0dcfb7368c14b6322a78dca3486d9c5e50c10f9734bdf9251901a041ff73f5ad8559076071cc9a93660b7afd88fcc194b3723e7a05a91c38987eb764b6b796defb2f50ccaaf4173d997b32c21a170f142d6355c8764de782f73e217ff0dc52611505f68976ff0295fec2c6ef08a22a66c1c09a8ffe9424bce2f9df2d5693f89e7fd2d5832dc13bd43f66703bc786e557429f47f523ff7967b794176c132ac59ab443eff4a061f25d1896cec9b7256bda9f100c1ded869ebcd339e485e4a8e194dbb69b15a94888e5d2314cb8f7c05fce790b72de55f1f1d5b20e35ac4278440b4462a3060b290b3ba96b31cfaae641ee5fac2150e4450a2cc847e91d4f460df11803ec4cb20ec75660585ad700d805a1d61fa04c0e844efcbe0683db63a715bdf7524e6a5c9a79faf5613a5f4425869b96c1fde3e80a86f84d9e6f6bc068c71f981dfe6866841074847afa7ad2f588a98db765b57dd410c00919c369852d97107be8b74dcd427f4501fd5660feeee02118b5d047f2cc527a57b971ebfe9f8349d8f10b81bb1eb23738d7db8f1566534b468f7dd9bb780e307e7a02a7eb355b7474258de9ea0e7eb510357d90b53052a49561359cc33c86c76517cbf1f837bedcf01c300c9ea6452d55a9d6593eb4b15c005de46cf9cc856885df69f51a3021d1cdf37a1af65016d64e98993b6e2ffd48e7d8f73b1481f78d1e5629a40ecee5b414af582c4fd4f9b2a49bcd2e9f55d304408048360310615360892638d8353f2f413e3dd0d80bfcc2d52463e8910b26c90f72a9e22440776a8c10b5e82a5a62d37ea3e101891adf17b0a16241423af9639a1f89e203f74631fe919154f963eb2100e1d6f1e715da79626a24dc987fd9e9ce8ce58c40063f2e658d08686e9a75feb4a43beaad44b2e401227907fb55ff962ac889166021626158c018b1ba74684c8dddc6cb118b4ef2a0b4600bc5c74726ff5615c25017c14386a3f132a3629dcc8165f6ee8530fcb667cce27d336a4be86a3583735f8956f1cd4c68c61ca2dc5b8858b9006c139cbc38a49c14db3b32de3ad96530d1afd7b54ceff7d1331fcbbe83b8013000611d8c919eb44f02a6f527edfb902c1f7faccffdea82881fe2c28abce51857f663e4c9c8d42d45af4da180ebc5c7cf6553dc0f3b7bb35d10344d5bd1ea846afbe195db937526c7a5b3804a22229ce0cd7c1708a662c49bded8ff64fe7c64f485cebfc47b8e8a262f0829fb5c15b4980b59b58479b94aeff4608c2f5fa2a77bbb7c069b0dcfcc759ad386c12baee5833ec464df252369bc07a2c8eac794dba716b5657668c58ec82d743656bd41ba00ee07af2cddb9fd981545eb8dbc63d0dc48c55d41e213ccff88b77a987dce94d0520bba8e0c3a506554330cedcdbf5518930f63d1cd04980bdbc04455271ce82276437d1cf3fd22d4d2aa8ac338971f41f4f9d38b264d755382df79e75bcc0469495df13dfee714ab1a33aae6a34ec2427d0abf24a25eac4823154de521addcd48fa6f7eaf6d0e3e6dab3d5535731d0bd3d8f0e41d314b6477b41659f41452bfcdb429586930c981753174bb92f930777335070a0cce175e648d13cad963065356349d6576cfc0bf56bd7a53a6da11a5b2bcafd6af43afd4a4dd09bb73eb2b5aa247f75f3d5fdbb58834df637d73f007b91bf32dddd09f6cbee55ba77460c08faaaad166fbca52a32d61bc645e643d2cf781a073e63ffa7f415101c568e093e00de18b737f4acad9cf0e49a7d5af729480749484902fbeb89acd73efca38e85ef72286e89504eb194fc41242c72c77bd6c4150119354511778e6d3d034fdf77bddc24ad9a5b02caffdde18cbd7911b38265036ecffc8d5d43721511b0bfa5362730fef628fa4e72e3c5a62767e6cc660f5ea28cc3a0c565c368f86745b7cd31745d658ecdc15aa9069d18d8f33883fb0385ef1c096fac6cb257cac5b8f82a14fa908f88cd8fd57676c25a9193acbb626913e02101025ad45c9bbe254d62af94d175bde7926bb4adf99dbf666fc3dae08efbc43acb40ce9a8c913022e2c1e0e9c62ecbed3b7b73f8cacde632863872382737dd5e645ac85ad4a08276afd3cb6302195656f378936c02971a053de92c1419664bf819ee1e8ee38df91a2269af6b9247f36357dea377e906144623f669fcfad96650f0b4802c12b791c31046f42354f2f2b8150300cad2443770bb9f680a7917ab31630d33eace0e2fddd93d3c891ebfffcfc810094a8ecfae1049ac0a2810e938fd2ab9159c0cda5930158b7a1c9af32ab79bc4e0af98b2f82a8d15298eb3fb0e25844c44adadf47a046db9dbf93077deb8b9cae85d23110ab8a0f57a84eff29c42daff0ef245a9a8f4c9c05603bb52773ef6a616f8ba9b8f07a0bdd407f896091735914b99d173a183878ace26f63675454b0b0d2c1e7db5fd1576bae4a37a93c60513fe5c116e383a163768936a54b5970051a6c1f8d90dc0f7e0cf58a5dbf9be056f08e85bff4cc01eb59653a0ceb46681c5b40f2a2017817ac16a193d89a2fb971ea1e2f799da732287a0bcd3c29011ebe0bdfc0529c6b86a787cf1e3139ef10c60c2f06bce17873a55da65b33d74d80f0acab7d91e37f135151dc44f59c7157f0409c391b5f420b605c770a386d6f84aa1207ddbfa233d31d2c87de4185a0e8b6d394674d4f8e23bafabf10c2de6ee1ab78d28c9f1fc588b81982cde0ed5cc4b93e318b13d656ace63c72e8d97fbf6dcd6df7f01326cd0a2f51496d4b2f04c8cb57a399a1382354eb4dc2ff842231c9171118408fa4e14acf248b06d06456769c11c3063e4f62730657758e4996b60728b38ab093060da93996459c6a1b7f60e59655a6632ebdf8bbb4e83d8a5fd21eeddef6f080dee979c155544e573289c8499b2ff303179f586a6bfa51857264b8e2ce491f09dca942bf570249ef896fc95f1abbd2a2c54e41469972e71f042b38e3fb5e4f2c2ab8b1f52b6029a10fc5ccff17c4ad891532258c54efc7e2c88bda2528aa3d6cef19a65a91c255011d751b295ce7e74cb5e9e45caeea3fa119d6c107fa08f2e9654ff50286d497659f8cec6b62bd3ff37437595124b402df5e8226778b3cf4a632b05030da2efe8752f1b9eb2b60f0c8b8d6a7a4643e8e561d0712454fa07f110674e9a003775fe4f7e2907babc8cc0ef4b6a1589a69e14860c51f0f45a6c8fc67b38b3c33c2f3f2d8a0c4a905f7568415e97d155ae9e3a4fcfdf14dd5316e0ed03e7442751c18582e86ada7332b96f605669eea0232ee09f29c35835a155c05aa59012aade8f7f9eb5c5148fb473daf4de2acda34d2b942e859ff38f2d2455c6a929520f05ded6510fb9679c6f3f1038ea20e6d4abd04111f81905606077573ab8d22220bc3e3280a9fa2f0e4c985d59c586e6e51d4ed4ae3b081402d5933dc5ecdd26ac193bfd8430e293619e0ca0fcc651147a17b203a242c70b958b9acc89699d08cd810c72d44a442cc9e57988e2c521f15ab7095d8c612a3ba7d24c4abadefc85f2b92b7239d225503ba278f54a96fab86b8f177cb0a60b939633cb6b71ec837ff74a7cbc8d77cb4bbd897550ea06f145cbd9b436eab031861b87d7949beb786f01ecf65d47e34bfe81449f6e26ee76afc6374edd2d165d572947ab2889bef7a07578224154f1e647c6fe7698e1ddb132cbaeadb2c22d18cf3c862d3c70db4982262978f1d0f0c972da032c5080ebd6270a8ffb6016827ec2db65182566f60b7bc9ffc8f9e6dd62804e9a2f890231a29621832323c6d6f56af97edc06fc4ae52800c7eaff67219c5e3fe6e6464fe697a28f7f4c8d650fc6f988ab80ea1db2d1f17e76ea7360b37caf650e1299e59e63b47f3e1b11eb5d1679abf999132c965ef069af6bf0cf7dff81ddaa48b6e2a855d817946670f064a147ea2345aebd77b533e8821ff35a7419495c86275aeefca6b2b331f6ce7cae9b8d51c874cc9f6f1dbcae1d7e06d0f2c81f7c8ab218c3ed57e74a90c3a66b246ff68fed6365ae9ef0c7e03ed1054e203be13c39c7c5a53639f2f69b22634ea9fb81e0251ce10f0287a65f76f6326147e487c3a380ece3ae032620d0c2c5380e2acfdf6b9fc97ecc8734cdae9042804783fd465a4953fb88e691dee370a0800b71cc0c7b67880c23f6734489845f44f7c47517f09337ea7752dcaa51c1c14ad650097e6b782e2a26590e474d281d879c61773c05b27c1a6376811e4b0179367f8b3cf66eb86d63127ff9e42cf31fb617e48b1d69c4def1fbe633d6ab718d1ec12f67f58ffd23ba2eba16e1a46f6245add0d28b4bef6c4906271f3b273c592b9940cdfa2f453cea38b5f9acb0b89f72493e42e45c1edf32d2ffbd320982a55bf0d1c496505395c93aec287f001b38d7ab2c9fbab46549975a9ca2ba80c17bd922cc62b2774d187c6208d31604113d614e998735122f6c1999e76872067b0fcab5cc70152dad6f618f79232598d32d5765b733627ae851c8eea3d461e32417189b8559a01c606b21507313e536185d481085f60f91de8a74f8aae7cf9fe16aaad40545ceb3db20e6a79dfa7bb0db7f0e01b361ffd20e23a6b536ae42b28e72f26f38c5aacf56af45eaed48728c03a7a96f25d8f29bf691b1fa946a82e4fc22860dc8088fdd7e9d7a2389b41685c37ea719ad902aa24c6c9bb44bbdbed2261b51d2517fd87991cb327313b6bb95cf18db963170374efdfcdf56948f2e7594485650b788f67085f228ca3326ae29c674ca35a932ef4fe7209ff57e960ff0fb7fc9c12c0e735f207ee201ef09e307db46663518a2cef1cfe328e58b44ff2ed54e76f435bc4c7b2133dea54c300beba338b246137bd3117869e0d4bc279b8255250086955265796754afe61fb6acf0c1dd3194191f4e9fb82a3571811d2a8cd3651558a83c91863decdfe22c2c787023e27dcbfa139600330aa88ef801aec14696dbc28a296a705e3594d34c00767243ee1ea30e39a39543bb57adcfad530ee308f361a55471c8d9d96e2a8a88bcc438f745d6cfc8d539080999a1664fbdad021f58ddbae06afe20f719cadb098edbf4bfbc3fe1cf153521b62aa780326e9dbe0abb34b61135c00933b5f5ce0635b02dd22f66a718bc44d232a045b43f9e015b3d5be00a5b9fa79591e8c75f58042f463317f3c9ccc6c2b3383a00ed3dcaf16aa16d4d26287f67dc76084dd02c42510a4bd1c1f8c25120636858a53f6db8f86aa68b646477a1ae254fd0eb101da26d9722f22262091e3d8c82791ebd622422b0de990c03a21810a0c4df7ffe0fd83fec9564d48f2b83f8e7688e5670006feebd155917a8bf0d468e76eef5625c45ae0d22f0520d8bc0bc749f304660c754e1a629ffbc9d671b0c5fd930aa9aee7e9c4c3c750d01140195c596d904fb213a727b8ed56713a17203b18a0e1893fac8b36b162669902b27a566649ab217e03339cf5014789651659b897a0353e086ce70e9194b03bbbc23694f86e86083e91bf14749ab66eff05761b6175ea3fc69b845b64783fa11d491b500949f84d0181aa654bc5173f095ef7acb1385cac2268954cddc10d07eef2b6c6202c76dbcd1056e384bf72da3dee8e895fbdf763410fe43ecd1840d1a2f567e6d21e7d8edb26e319990f9427a268ef1048936ee369d8bdba04e2ea4cfa64c57049bb7bf112460dd6a102577d25850d1a5dc1686de87d8c9cdfad7fc30b0a41ab7bc4e309dba281ea9eb0cb9583cf67e74ce8e0c33c1a1a092811e17df436b1ac520e94737ac6a0c65e8fc13821ddf32508f75776ce5e520b4935c4cf9349c16810e2da32c70083700243124ab09dfc605306fbb6fa355597f92b9b8d8fd4370161cd17f9fa3ff4e407da87fbee116f6abd00468a500644e169b05e2fa7477d545f632841e62b2369732142a6ea5457cbfe21f00bcb81edc824f3b473a23df2a9a08e7bb4bd45025f5648a8ea2993aeb637384de6f8b39af7f2ffb1b448860a2c632426046ef642e44681793182a375f87f1736b22a866003263cd355e1c988076d9c03f57b6b7abf9fd55e3b2c5de14165141bb0bcec56cc4985d429b2cfc38d74435c9cfb45c1345f26a9d9de1a7e60200bfc88cd2c7fea873b0699a023eda17599c03aaec3cafdbf04587a5211d05087bbda1dbe69403b6031681dc4b82383848f7fb3d1c28a28882c6e5c572a3af881be455a7eb15a80f586c260821287aca8772c424829ba52296ecc1244c5db07892d809cc181e48b5ebb6d844db568c3eb2945e8c73726fe72ec0a316068a1796f421abd9cf7d6b2ae53909dd581a293b7e645d33e026799a75b10488e9f02c64bd8534971eb21be0c8c2c01f4ccc4cb1494eede7fd580ebb9392be76abb64bb45dabd5ce3ec9027132d09a1e48992eb1ead6e758f28c73dec11d4751edba590ea0bc814f29014b83a6124009d765b56d81bd875d3c15d17f21d136bc5dcd72c9cb650aebd2ab0fc9cb7911e78fc6ca450c001cb29060bc9ce76f2938528e30aed1467ed8deb5491403dbe66ad354c58f704b02b71173ceb01fb48a01d8fe1fe20157ea1c5e9b3f1cc110e122a234892bef43bf1d91d3e789c2b352b77c48416fdcfed3c2ffd017412ab17b3857ede09005b64ba73b9282341bb8d04feecbe3988cb8dc772e67ccb77334ec331f5045758f41528b363acbc13adc3d93e3f5353f83738df2242bcfda52e016f3979c3316fc66826b26edad31ceaa35cacbb84ee13414252501b86ca23c1cbe9e54a08b8d707d6ab635ee6857ca5f17a1ae955a47b3d96e699eeb351ba263499b0c85d7f0933c4d770c22259836380ede466ed0174986697866120e1b9c89d180c203b6bd2fbf4ff5fc8a9d27dc3f895e3840bcf71aa3de4bbffd522a9b960ecb7a34552ce1a4f0825bba14d441c8729d6104d3fad069cb6cbb6cb519cf29b8f709467edc07271440c6bf35a2a6912f552cd324ed56e2c20f9932425b2bf2c4cce4c9e7b19bc703f67ddfb84b0addf175d4d959bad3c8908c5ce56bed6a45d068251637613d570dfc7dcc80bad76ab7f9ab700f5c61396d8ca3e73fa4c17eddb4b33317999665a4399652cbd490d31039426dfaf00ab60c54a503a7d3eee8e198e940133bdfdbfb46e1ac33c0889b3080b372f4237569af7030162b9207cf9828db3df6ca83bc8df5832d26add33eeafecbd2ae377531b6e479b81f9d79b13bbde761198ecaccd0316efdb30d9fe4312e8769f199563d615d9c2bdcd3a4cd871b99d2f43620f285f7b4a97c7e0c244a411eb4e9f26827e75e85dcd6a85e5c64c7b173dcf89eeafbb67c0a9ee8a681d0b4e795012d8b6a180b20550e6d60a46ea6d6adc1bb4847c0ec09f39248cabb2f2d05c6efe52e4cbf0f0b5f7cd882bbbb435b53c70789f674c9dc81a2ca428889f39a5ac528c0455d4b89883488fe2144aa63ea9fe2d8e711278f299a43559f7ef9df674749de0eb04edd80df15d330536a5cd4915c0fe0b5e109b5977b218f112e940a2f6d2dba12fbc4c365ed73f1dac0154ae6dbcc3b4d6633b3f0c650a34ccf0b648ba5d9cb1003730064523fd2693735bf5dc0f179146c1a389cc0ea15d7935e9edfcdec210f87f029e285aace7521e1b933e093338ecde707f7ae87e7ac48bd60b4f1102b90fe11a42c87da6bd5ed55b84a5bb7ff91e14d834e76fa308c2bcec3211123f89dd78dc5e766c00cea3d1b63854b321d000e3ea06bf66257f6a163bbe16d5e28d50fb66b3821af6c87d23eda515610ff32d89d3c62f7803de482e1c2108e7adfbe4e928df8e243017ed1baa8365d6ce96ecfd1838e738cbb6f107243518a8c3421c443c4e63fef03ba09df236ad434ff8716fee3b57a823c0bef2cc7cebf637afccfb29223167b0aea841f52044a7c559b2ad606548866c09d7344935a5121692a55fd2256e0ac0363d2644024c63ae9edeb948c1baa4f02e21cdc41fc51183a45eb1152155722a4b6b0ff38b044a30cdb33b065e064b15ec3f12b285ebce11ab3f958adcb59c120dbf6e3d0059938f48209c5bcdfbeb721965b03bf166cb6e911e81975e87c90af50aba7eaeb596ff87a852632f9e91313c4efd70c89ce83d1bed6ab51d0b8ae5ea1ca7bc8621af24a301b7b127cebd50d0350b4ab9386d8bceb3fd7643721404ed2e73df1cce0959dfdf24b2e005fc37b09277bfbb31377d3f3a389023f25c8261e765064449e40227d5d1ab0eb3b6cfd75af0ca7499ef0848458492b732a06f1066d6861f776bffb3a48b9027045fb250bf4435ae0bcd9f866a9f7e55e077ff1ce993939c2abd6ad9a81a3a237dfdbef4c57f7e859691bee7acd9128aa4fd1ead1fdd9404cf3c94d67b0a1a4c13013d521c79581ce01460104f7eca3fa251378b3fd92dccb4084f2c175f40f7496ceeb3b59c1d8b63a44741c326bf68098e90dc1c9ea8a7a7790aeb8cbbf30fe9ceb3d18c83b976cbadebb32503ec347f49e53abeb51467d953cbdd897b1c15050ca52fdb33aa368b544f8af773d17c6661a8fa6e1771fc2eff284149fed649226edc8899d737b3cd678edfdbd76865e185145fa14bdb07375b47682901b1b37e68f85775aef07a893e2200cab455a24f70c08568a81632c3b28511ea57d635d74570c555d098e7cb2b1f9e47eff07abebcef564066ba458df5a17887bb5c9a0ca7c247dd54d3e0b3027a9236bdd7ade26840de32fbee092dfce912c3655b5aecd080df9c8cbdecd749f2f4cc53bf9b21ee0368d01612a59a00ee9e5d00a0f942307665ed0f62d088cca10a85225af98ae326d310d5af50cb2ddaabae3e13be1e506d43946cb19aab0eaee98d30f123af165e630970c3b147ef1ee052b31e3cdab7b9086f7bffd391783266358770027471ceeb66b1c69ca2da20fba3e87af7d39d29a427dc0426b50ca326a3c39292661dec4dfad6ec2c98f62f9b4d6753f7ebb271dd4bc36c4084ab3a4e9f6f49537a546713bee52add086be14668a01bd9a117931d6c13b7c8afa148bab557630dd6438e1c2b52d94b720fb7d3936be5673575807584c603ec7096c5446db0005e48f90f34db692daf2d8a88f5e3d431b69fa79b9e9a94b78443808eba1a275bf05347ac820b2e79a74fbedd12bd6a61c7600dd504d743bf0c8e6deeb2971f1308e3222cd5fd9090e26877745810b69c60acdb994038cec84566b22736ffe75e9e8752bbb4e01c8d405fa7eada6e8dfd9cd7175a431113f9587a89801f0cc087c87c338d1a137d1cacf2698571cfea836deda7dd8edae5a4aa3be48593336a740a708e2fe8062d25440b4f50c96018e141687de5910548bef88d41c474b82904681dca4fdc2172a6f9f3154fedb796a4545c790b822ac64cbc54113f6190d28710da6ba1c1a98317560d2c98ce924a14c0f71b9e435942aadbf9e404d658726fce56bd3e1e6e221f201ae52169c8aa757970d4185963134567318f42aad09bec6f48c125ada4a5b601a8474ca011029c18a1e2d52edf5b393683f2e08bbff6dff9c4b4d00cec65882ee4c7fa5e69ddc4a2bbe641c665ad3bb76f65ce7a309719e1ec1ffb9e1937839c2d813625d2261a4945069169b49c7b2df4f057ee292d44718656cc7ec71bc99e8347a1a4c55bc80a7730b7daee142f4e060dfc1afc29fa57021286f16772bf0e3504f48c6b63181ce419df2bde6a710f90a744e3f358411f3c8844046808e5f92c21d16409fc27b0ac5355c06e8c0ec8219c2f6a5c23f3a08381126516b90751b820077589948b90fed92de77c9208ca52482e7a7da00125c177097825aba734f3d513ca738779ebb6877d2ae89f47538799ff16388caeb11de31cb5abd0d1e26938977d5063e4b0dfabb9e687c734a554c75e3621bc26c3bea9768e9eae6d6169061f2d265bc7d11cbdb5ce53330b7499f9c6bfa99329c19f1f881f11eab40e0748da690215695fad4a8d29e01401d0157b90f575f959499aadc4c31d683887e129074254458d9f656045f2838d9e821c90c17e5a038b2c02e06d1ba00ec68eedf2db2aa1fd1d8716e22ea02f04c2ee92368e260c19de5f43424d77343561e9cb2fe9fff2642dc82c85fb84da011f51145b58cfc56e5e5769e341d680523f0e5c5ba7df36dac8d41298781c5c2b7fcd5bd31a04b9f693bfdfc4e9398d9fc61ae6c285453fb5c0b3ab8ff3527729bfdb6452571ab12a33b350caa5e129446987916dca5cc01bbde147f1104fc279085899df3a004faeb591275c0fb4c63cc33276d1107d689a9329c9b2a8185720314f46e80bc0c5e48800aedb456fecddf134e75ee19a605de26bc8fe28f0767482d61d5192bc0bea27bd2098f372899325452394a6e9d6114f8330a70ebd96520b6cee49af48cb5662b6d1f693f4730f8716366be0acd894df886df60406d9b06b75a601c4c7c4b64552a0eb433fae3d2bedd8a7b4563496906da4b0d2cf5e0ae104cb4d0735af079d11ef7dfd5adb2c1a631cc8ff17fda6ddabe2313066124f58ffb24ff8d355aad960b65c28573cbdae1de2eb5ae8abf1da99d9dcd9f6cf357bef94598f53845ccd408c170d32b5516a13a52e02877f8c2ce7168327511c86830d8d3869a63a56b44cd696b7d5884319644668acc11af49eb33a91f85f6e58268809714d933e693f14f17b09010bc92dd82694cb505295247c15826b35e827166427ad76a9e87cf2c2584c8721e6890f49bd946f14567cbcf9f38d0decd2c08e853a63e3f522868ff69c7d5c7cdc544ace3043d237f108a0050994d0a92f5a788a065e7744ffc59a5cecd9067a9449e18c6cf903403f5f80ccea20b1e20ce030409e7d9bfcc960e3d413f63c06a51171afcf1da97d709c77590947f3c8732a9b615b5a4074999074c1a462b8d375d6df5cb005d865683b3cc8ced8b6663acc03f16e3684b1fcb7fbdbaba2e32d9f27c74c548ba6e4f09d074ee38b80d4712f6f332214599bbe4a87a7efe06bb69c18d40b3c29d2b18226218f06cc1813d3e03f9af7247f7138ea5c0ae7bfb96049c5874832bc5f5f9d205b9cadac0f57966f55fb07f1e35d3c6be7269dd47afe2326e20b091f9387c01c4b171aadd544c15018c0578f8495a3ae8174af5d869998a8d2795e25ccc9dde539329735a0870934db0a694e6ea4035428f672eac86bff076783628a118b81fff780192272ad27c1858da1f5b684af960d47d4f93658905ae6e50ff0915a986a1fa4c69118be14662e2dca11b8e1491d0d42ba14d09ab46c5beb6c09815d7e60b770e9dfb4f5b8046b6048493f74b654133c0a0578e5f3f9f8c551a00d06ae0c308909419f8b46dc6d437e1b357cb43e789e55d32dd65ef45f38a4809ad0b604b8f87be530ad1ce4e35956e6be9853c5b0e8ae28465b9cb621991f5d84067974468f40c2819060bbfb4d954321ea5fe961591dac7fb95599b8f368316a05c0cc8c72c583c403541d811e742c01b601c9823f4ae43a08f17867881f5f5bf84a21e10fa9b03da7d8f8f4fe107779d78ebc589842bd23ba65d17811ab039a6556e889bcb552a65ca6501d0a55a559516f55fa2b2f5191f44b1ee6e78c88705d2feaf4f68e87e725ce1d99418c6c297149c1487515a659e1d9b8788dc1908c74a01ccb82488102689a90b6f9c0972b2772bb5d5e4a64a1518e62decf28542a57898a50d36d8db643dd9f3323793293d09e2ca0daa5f7844d0262307fab9b2e4533a4d23075144aca6a379a8c4f7eeadfb22395f1211ef2c903383fb780afc92263469a7176c1b54df83a34989812e2376abe1f7c5ea964efcf8e712ebf34276e2184e63136a6f0a83c8adf4b1e0a7d2c319746e30c6ae30c5f119f8a0930f558ab6ad5512a1ce2d5408f8c7b25f34a14529b5797b9816e4e4a0e50f9ca9eab47f0e03d1cd530ffc3db4357e7edaad059888a93d1e9d59b4418088e4687d3f768f31acb5a439616c040844e4d4d2b2980a8ba853ecda9e5f29ec0a446f525ae84daf3f75e0551e0593d0111f259bd80c4c65329f2a939b70f847373b3b3a24642612ec1c13da854ce4ac0beb2ab354e0fc04f88aaef97f5da1cf24ea65d28543dbccd20c3b620526eff460d49a862b95cdd2592c22d7ca45b7b4d14b2be83045ea6dc3761b6dec8744891a2ee27a6357c85a7d62e54ad601f23bc043484cebe956a2f3eebf4c2e9f8b4d3a4ad931cfe541208deb87f478e2fe7f90280fb29a2d1815efbb49cfd266b326cae2d4a9989bf0b821eafe52f4757b848b14757d503df65e4bdcf0100b92d85d5effb7deac92f162b1b4fbc35f6a42867e85acadeded4e5cd75cf7dc9fb1557473320b54618726abf881a36f659733c63d11982c613f43af837f9135493556e2babe20cdfbd9f9ed7527cfeab96207ffc39c23c8aceaca6b0d526016543337483be290a6936182fb5da1a484c27471a04a8e10ae4e97fbbc638f2467657a9a95da522fa229acd47917414f37113b839989cb75899c1683049a1c8b42163ea8e269a7143af13c961db78533a35f7a5a1607453453b2ecf4da5cb5d2c45e0b65bfbb6f25ccf5c01550e29e2d35949c8664910565ebaf7b8624c0b480f1fdb1e49ca4cdcf3596ace0d67bf0ea4ea67004b21b982bc559835f4fccc801c4c8d09804738214e18870316075b6b7de3e93cc7e63b6e3fd9a77939251576842f9866883b23c56b4867df27cf69e2be446d132934b9a920f83715ca7078288a562a8ba87b9d3b89dd50a566c5375a5a347f379d62aa9deacafd981ad4de1f9dba3cb0d384a3a2d00c3e9ec57080a26b0f690c3b2aa9982c2de8601450c8e06bc89560b01406cd7e9dd02d507d4c343d8314365bd832323ae7311934929a9937b9243abf00b41e9046ad3bceae7e8211076a06c9d46dc32f49bd9877dd01c9a0c6fdf55ad2bc93da938b4940fda7d0db7666a4d51f1ec5a3adca7a5729862bd3de1c6439df7b990d8fcd809ca615dcc4a23c4fecd142da468b6c56c918c70440127fa9302be68e98ebcb39c2cb5b96f52ef7e0429e72624fadd362ddf5f8c0bc9eea058f0cad1ae7feef4f6b354dd3254a85ddd39b79e6e9b1785d14313992f825ddc1652e702bce26d76506307a05707dc0dc8867a2d63e5031cfdceb5aea4e97c875035f015cfa53cb6baba4bfa6cd683c3e52c563a602edf28263f33c5a723e77677b47d1a820779332ad20324122b9e32003dcafc3e5bd03d3ffca427d96e0cd60aa1a5d01b17af620baf65f834de507bf0058a443f6437e8ad698575914e2769a8756b5120d605869527b8037bb7fb59933470fda6e451fe89b316156b63064075d5566cae2cd7ce92c4d4b620a4caa9736b75e77e115dfad1173b2cf7950b3534e6eb1ca7c39082dee608afb3d17c2183854f1dc6c4900aee282c769f637efce4fa191fba307674be840794816dc1220bb950206d7f1ed2e9a01fe64899a237d4d8ef098f5d89eaf8e888ed62d0bb2976cd7fcf6f2a0e3c0f6f8165cfb189b2d7ca86bcdce92fd4d46d07313c3e33b1f82156bb22250c12e6c13cebd817532a9ed0fa8257fd56504fae992e66179e042284ed97023cd78d90160c77eda77e205d12db5cb2bccc6908c8f8aa2869810e015aeb66bdfd40b6f44f18e7d72f87275b801dadcfaf6a6e3d2ce9629508e5b96cbb4b0b2599649760bbc8f009710b2d4be46c8b46e2d1e0e182f164f9b5f52ce94388732c2cedf2ef9b46906f08e3f953b2433c57e475a3cab109a058f319c718ec8f41b76bcaf544ec9f5ef1feba9e1484e76353947b8fc418b5b009b6523ae4fc9e34d6c07b04f7d9c0f0823eaf351854eb8a1fd17fe090a83445eee426f87a6553c5532ebe1110c2ddaf0c3b494be88be99b0ebe90f7a78663de39f1ec15c25c4179cfea10979838ee88d56af96b002df626efdf625ab1cadc7aae1236e39e7a89909f7aee699282115e4e97625f23096796eb1d8e10651c6b6889bb9d915bc6b1234a9891debf4f8a6590d7856d7cf36ed4446d63709c5957def799a0e2207db925622e3b7a47f0c7033e42baca680bc2156695434faed30754f2d463c96377bb6685c0fc6087e8abf605af753c602ec5c537b50b5d392dc60675a9ba1e3f0ff9771b0f88849d9d952c2d6b7e6c9ee68f71c76056243be01d39a49761b99269b0d6f2bcd5235c80e0338218013aae447f582633526262b78ac3e1ad1a00835a31f66cc27d1a9dd056d2440a320e93b4ecfa5be1fc219bb16fd07f184f35f8339a69e49441e531f2d0fc21274028d4861e923df8a8f210ffd74db120d95f942900ae9a8c641de6168fc437572c6b15ca05656cc4e98eb360136ae3be5d1ba9463a5f04491132a74d02eb4d35e02c1eda16e013d4f96b82b046cab74f11bb2e937ff3747397080224a65f8742a5ab76edbb6c875fe3485e6346654b9fc6118df54242aa04c93615719db5ca15f37e48be76b3ace6568f124fd74eeca830ba0fc6c2684979e77e63b6a886d32cd7a9a674b2daa3b91afd4ec359d328cda7759241c9e7d044fa62b2b1179184801e68175c58e09f31032de5947b2e34521106dedb4f30f831ee1e15787818e42152a4e43bdb8c445cfcf8ffe15dfcc20888d889062cdbd88c6e17d7fc718f2f630d1007626151a7d4ea345b77be7008e3b01e0c8e771e1c610bc58731368aceadec65453950dedbda20bc9fc7a82e66d45d9f2703112950ca3b1f57140b010d4175a98b2a1df7e7978a63e374090464384d3af1c6cc1aba0769c856e16e6ea2b89d6d0f49a699ff97c4c53e2f55823ba68341c29b0fbb527cc24d5719fcfd81eaad7ddb81223ceab1ad5fe6807ffe3523c6742ba1625af69f3ea576a8f942dab7a21928ada8477b5cabaee1cd3cb2189fef7e2d166617a01b48b31c38d086bd5305c8a8cd79372ad9ca06d998271fc346e358669476c0e7499c86f7f4960339ac90e8b3627a5f5fedae6fd03b320dc17ece096dd2fd8ddb7d855cabeb8b76247f8bb57f6ffd13092f2f49f2ee7449e7061436fd68b07114562fdf34dc9345228be5d45a847ec26469d10e3bd5d10e6bf9c51af31555aef2daa82111581cd38eec0ebc447a106fa601e8d25bb5f9291dfc208e5a2839fea0b1661f4f7f62ccf3834ad36168ec2b0034b809891fa3cbfcfc247f87fdfc67c27c1363348fe16a5a2e5ae20f0320e603bbba747e058ea21d85554741cf874a2fb04231991cde06a85b80e8cb149fa25897bd566b3000c869e6ce1d7ca445bccfd76f3cb28a050a07afe74acc6f5bdace7d0c38dfcac11efe389041fe8dee432cd6a2d0b03c55dcaacaac71cfdec396c0b1597893a7d90cb8e6ed9f5e97253dc104eeaf56fd9366c660652f9c34f1460bed63697b8de9fd286f4c2bf26b693a36e89b008ebfda6a31c180d1ad9a9f119ea76a3b844b1712c0a3f9d174a66b2b492f374c01f9ee083e0eec636266d40363052c93567b49967efec648f588d4221dbd49beb5548cdef6269ca7427b8586b3ac11121c8e4f0da171aa47477ba5942c8363a3c5efae02b5d092f48ffd845ba465ef3e539ef15c72057d68c92de9eadd1da6d19c0985c2a0de5ea4d76328f18ef3576a97eb1468139e7164fa43656adb2779def3eee221a370cf334722f9dcd3659eb97b02dcb8a2b39b91a8675a727d02d53abc4a3bee7e7aa391bac46ee1761eb0dbcf1c5f0a06851e0802f0e45e902742e3bfc82cdfa2ab83460eb42f21c7285cf131082f8feb3d68e2bfe06566bf3e8416fbe3e536e370cde20b31453f106686a5c0af0e8353db381bdb5d04e25cbb2ae9cd5b9296a4d2c140b3d83760f1c765d17f383fc498202b32cfa7b2df516816b9578ca5cf4c3bcfb55363aba3a66ca4c2979793abeda0aa0972cd655bd2462c814c21ccdbb234384210c95fa5373851db49d00a6df3a693635794f10b7a319a361e5ef3ebafbccaa663a4b53e0dd3dd5f4e6dccf8ba2b5d70d6a572ccc64111da79549b40a6704001ca93e24890960ec450e477c94a6cbfc97d825aade9058b8c8e340a41861f2923b79cd8b410f7f5ecf3c495c0a6276ceb515b913b4fa542bd1f59b4f1600ad30dbfcef024bce617a37dfddbdefdf9b7e8dadfe56258dff8a40b3295760aaa3098798dff2258c71a9d7463e85ac2894601f2ae7a4242a1f1fbd1c422c16f21d997071214b2011630b32108726394ff9bcba0b92f4a4dc5004e5d4ebc852ee85f100322ff259c5fb8357e007502c68e5244d7e77e68e652f41f4c871659b787b88320e6927e399830cb14ca6afd7b330b9fe94939d4ab6e0c22b91f44c54f861f5fb112cf9f92e10950d257e369aec6f97de917756b5dc95844324152a2ac3a9e2c5114e461f512e544fda3b15193fe6f54e823d7dc509f865decf565908ffb41bee46567aa9184a0bc7a45cc88b5b943a5ec941d8c0bde7f8426dedf05ddd4e1b1150df15d660666d08fcb9248cd2c93779363af983acd00c944c856230f7f26431a1e47648568c8cd48af27d5167872471104c4e5a622483ebfa9b1f30c25c1f56830b24cbe265de25606270c37e9c602528924960191b76d404ca1359d83e21cff2233060e1a8161edf53d3ef6b4baf227ef899ff491c8b236cad23e3bda12cc074277e75f9bb6a50e22d8272ff1c2d6588170ed11345cd38f1f49682cbaabc90b7ae87f2acde5966b430d6890e838c804dd220a161ade2916218b26fbc5dbf1a32036069978491cac7cd5a4029adda67481cfcdc19cd51a497c134d03aae9eba93477fce5603e10156105391aaa616f3a6a9a97ecd8d0e5e6bea3885ca612e5c69686a9298f695dd4a1ce7992a2ed3f5aaf391d7ba35c83312f8bce90869e45675209b953f64d8c405fb0c69ba1b36efb87558e348b7f008e9d62d1b40e9913e42ffa9abaec0c161ca290cf66587677b3a165d514e266a873aaf39537de92c96d7eb93aef8eee62324febf05d36d76165a97096fe90d907844164d00a70a65391412129b8e3ff3499ae6db65bf31a3a358c0d9ecb24a8953aa88eda014e2a64546d3e6a1bd7fce95cf9e7e06e330074223ead23079be8c836b187085dd9d91c91a07ec702c098534c932e2c8f227ae7da675f86b157b868de6259aec2f299ae68335c1df3792e7d40657fcc0655a9443d2355bc9b1cba04f7e0482b14eba55400a855e24706d3ce106dc40558a1cf8451ad63cd1e9d7b6cf63242688442a834c7fb4633d0c05d8fc87e905be3b6daab58cfaa372ac8a14614a7e672233a392b2c05882919f7472bbe2f2366d5fa45a8544e2a649de297f7f97f36633cf07fbce18a225fa1686c2e6e220fa7eafece66dfd1a3a07ed9f3bc95fc6123c00c70afed08e34a1e7a94fe3d36ae936c9f0a164c984503c5ba8f0aa3735cec75a56ccfee0bfdfeabc9c7c1a43fa303c447b55d9bf2852ed5ce47df08626fadecd9919c18fc9608a11e0782d0655acf394b7bc3370106937dd5d51d23d9155b2611e25aad5a1eb9cf97cc157a8f3747402019862f534055aa3c19ce53a433e4c6891c6ccc72baf43e253c62fe1f87ba35d1196f9a40ff3a8cd92c0c62eb57a90b6200962852522fb71fc1083728a8229d76ac79c3b9b7568192fd807c6188850af70c40633acdc8220371b819d1cae8c8f80730c3b9826050acd5486757bb8ad5e192498a4e58548c5f9010db691c2fcbf310c955ad90347a9e616fdaad8db58c582f87632d74e8e4cff80047c955a65d3502e8c6b1b583899e21937d25c3b528e09ff9771a1574ea757ad63347c4770466be4244fee00f37a7ed0200e5d134cf296c61b0bf2b6de75d1d4888861ef9b01b1695616c9430f4ef3ff805366e5d9f4a1501430980cb942fe8fe9a4fa43a318a163fc27c06de544f62bc52e265a25f924c97744ea665fca84ebf7556ba0b76ff6f8c51fbe7775c1f5be45b05cfc24d57eb93afa255e7e10887ac69725440101c84893dbb10d370d8f5194724d699703ba8d41b78adff4f3b96e50429744a113f16601ede9a40e75a8dcc754056f5d729c9a8e929987ba54bf5724f6218c3f89e92ba17407c5b68ed40be1f670f587a7cfe2d242276350f358dd38f76907d9ba746700038fcda86d0a20e21715db349ea92a30b1c0e3455b0c80c0a14fb622663369e36911873ad9c8cc45d8016dc3d6ef1156f0094809738388688654c41b1fa1ef78645ed4e4e70e041abdf6dbf127458fab7dc20f1cd0e827a79ebe279a2e1d31927987752c39f68622790f014df3cae7d3ad46fd1805155790e69ec404132b3d2aaa47b61196e27efdfdd7b7831dc4bf1bdca16d81a3b59bf9518733054179c3a60f7b92e5f434e09df8a541758e24f26ffb79b27b5602e9b9caedcb052b2813e4428283cb029fdc4510b56acc497b8362106eb8efdfea751055820b6aa6e35e00bf9d0a166ac38fa600d223994959704af7c99e2785a866bea404a057997d211d980596402ceec7e07832e7c8ad109c2dd117b5de307199e3cf5de6719b48d6967d0754bc40bbd74b0a8ba64a07e98c469b8a3abec09758b65c6bd96b70a05ae4ba642f666309e2c52abd63880abeb8e0077b158126883c40ce65c2d6d2471114c75480857635d72b93a985e5eb424fc2590c38a503ced24d80d59c9e0954c23942c92f4b75f89492838f85dae09a66b6c27d65fd0f723e65e13fbd997eda71fa3f35d9ae8a6f5b89908f4173f4746e103c2530406896e4f345e234ec856ffaed6e9c3605fdea4e002022424e2cb7f739fba019a07640ab86484f9cf4b48403e429cc67124d443971d783caa101ea50bad0771b57309f32b98e3835df8ae48d2dee90af2a50c265c752071b8b48180a03d0c2ce95adeb168e88c9dba7c459c1a3b0eff1db00de53dafbe2052263553ad3a6144d6661dc871ac57b5e28622d75fa5d4799d9cb8e3239ad5ebd4c4a81d4e3d948ebce1b4d193360fbd5f0ee80e213724f9baf3b8a0486413328bba89970cea9a944ed9e747e0fb294ccfbf7c6bb52384ae0c9c94a3b41c53a5b7e7024b56eeb16fa06f4ccacd7227e023782413ced1c3c5030760df0b595ca31b77175f404047ddbffbce2c993d58edf054625b1267617ec3fdd1d9aacea41895826489ae85e8140c8eef8c4a0218c2e5808570e59ebe73c9419ffe17e3b35d772493b00ddc336bc3e7ef2dbe957aa783db561cee6726e7472558e5249bd5974f0be622555ac155904aab323be275c2765a6150e0e758ec4203cf1e430ca876ec71cd2a2bc9e2a3653109063b3bbb1a7d6b9e6a2991fe5c6ce7ebcbe205f6f88835cddd2a43e69ac046c8c591927cf6071d38370e8664b82f38c6ee30bc686a0bd0c8dc8f649f264e89fbef5dc541a481049b73ddf57fe8a93e1a04e5f3646260d1edd632a57e9fddcf57f7947c5d784064acb29fbd2863219f3e1513a0e375287cce2acb25c46b9ed0c64b8433d4c6c7e0da931c6ec306f3c0e47ace0faa5d59cf7bc2948a2d256417f2722dc26bc45d6ad5d60724e0dc4a9da828eee537c16b899ad33d724a1321e961bb01b293e23d71d192bb25790befd55817fe3412c3e59b3819895a5e26474a6be3888a75f52e9d5ff34a47a3c274467e579abec85f3cbe706e833bc78f2206a78ebd72271b464c70ef0b9ef0dc5a3895062793f7462f6d3de7968e0f1f256e17faf224ae28491b8de5157199cd1e2007ea9a08482cd97504a9482b273ea5d83f5f31ef94fc4bb264735492ccb8bbd7e1d884285330b2707a7f4a88ab38fbe2fc59b78235440fbc3e114c3f5bb074605f13b67634f02642c0439b66284e551ba879a050e84ef5f8ec66dffb7d5fa6c5889e75dccd9550b88f4012efb3784cfe0cc496a40f3ec87eeb439ff1d7958776c2980cb2d1590db4d6c848492b0bd34482e9014c58b703b7528ce1f787f3c11be063bfe52ba20066589592370e5874efeb0b7f14f9c3512cca9f6fddbeea37acbe2481bede89eb064d57aac4aff3c3156a4a0e02ef787ba114459bc9b90fa7a4178dc463d4073a905487b6b0b73992edba3319cd787a12a486b28885477cb1f3591dca3b1adf796ff93fa2f9b504e5ce352fc5ffa095ecd0e188c2e19132d0d0e72ed70a690e9197379019f2b055b53262b3ae944b31f155bd09cfab4ce4839c1375d01cb74193ad556188a749e7cd2162eb63406946bad32a80748ba90253c9390f7a20a077717ca8e7057819ead25e3c815f48f840aceeed76f229bd6f8b0babc98120215ea8de52d0e0602b19b49a98aa0efa7185261fdafe6875471dbb3e37176c5b1353f12c1a58f187a24028d30ce12403390d5844359fa6e48e93dcbc1e260bbd169932f2f9463fa088eb686d0584d22f73b85a3113c5c6fc667971b03e76dc785483072ea73d867b49e32bb13f5aacd9b2f2e702fbf50b75682aac5164781ee97d2c72da4006358cb0f0ac9fa7eebe93d53231ea3fb138961a98fee44a6ec77def872fb34d9e63b8e0e208615b79fd58666637b0ff60aef12b41d3f9f7825ace07d2c02833c63e9cc588c3bc03b8686a68178f7a634571be2d199982722e5cdbdf1a0f2cd18ef27150a781ea9f227a6b6fcf3fd876a64e5f8bf980cf4825302b5324ac6851e9a9d87c738d827c039167ad939e18c06daa1a31ce4de011d232b1f1da18b2373e5c69d8ef1b3ecd96701dd578f4db1aafcdffab29d20fd8c44a6fe669115c3115a8705520967bba12b4b82d214188d5e43c2564f5ae5e2d8ba3d65e502e8fb7a66b52a61eb3d89c4f6f9bb44549db612505f33e60f4bca17d917ad2bf3ae5bb84b3ac3023155c0abaef0e57cf11f0f95275697a4e64b9ade3f728fba914ef235db70854e0ae674d91d83f53ebe53e03d73ad83a817f5e97e0c44ba9b0762d0ff2b3a9ff32d4d7e6ae0e28ca0c6312a7d65bf67d3268d73b78d0ba3d994e085700bedca2aa3b8779a81bc43c87773b1a207ded63e989da1f083a7e6af2c75487fc3004e576d47cd0a8860be1361638b74d87344be67963eabd29d9813237792292b2e2fc50779406759dd834de7bd56fb98407c68616aaaf8f3fb09a1414f9963ad217a85364cb5a1ca5c3696a8f91f202da30385099d0c693a9e243250ffe13e286a71844340dd4f91e7b4bc3e8b6e5dd9c7d60ba3ca111a4ca04d42b915527e9b8028f8377cf19865d03953e604c614d240ef5346c918e7e77d47e53e192c921d6c8f1c5ac8bb9e5282310f42b0bdf35318a0193452b941291384623edd92438663279808512b4880de1e6c7faa5ba0aaa066ca296c227f37a1a691851d164238c37285e1ef255f4bac78708cb13ebb65f89ad4aa074dd00934cd832ca22b51f824f7481dcab09e77b64496112de05ab49fa82cec8d9672f5206ed243066b64a2f4fe7b17500c660d2428629a3c989ab901a1c3c367f7014442e3d486de69d6b70b0c98eede8b9f99e669061d099342164e111b8ef7fa52791fa3bb1b0c7f7b8da63f287bc4a1b80aa863c8ac5b6628b3d31740fc27f4b6945ad840df17029ae0681898a92577be9ca907dd999e19c86ed4d2f0357d0636138f28e74da2b48973455402929fa5fbf24b5775decd873b46bd9bc792a21b62418831cda2e1a27c711bd194b2070ac73b43b967fe51993881780bf3b6d53753354e59a3fd9e393cc33fd714abba279b8a8b812661de0d9055d3c15662158483b0a554a9c57584d6c57dec6950d1f83e845f28a4b67153cc91e262b1559091af2abdc90d6c4627a98bfb48840e130f917d2614cc7c37f4e95dea8f41ef4fa199cc286f5318b7eb7ac7f5d7ff2cd9b3f722f29b0cac4b162fd42dc1017c640be302374e7605dd20f4a250dd67b9b5d6217b8e5d801d9cd565d55818ecdb4ab22b8d2f719f99f84b01e7ef45566a0d1d37fc2293a008c7372571baae8de730d7c6cd9b7c0fe5a333b203922142276f4cb9db28e350777118cae64acf180fdee6ce63b8fefd1e7341a37c365436e1315000ce2858887a8f1b631b3a232dadad0d23810c5a7592e6596a921461f4b87fd0e4b2da9da1fbcbd5689a03ddc61d9c4e0862261a0605b798bdc42cf0cdfb1a7f9ccc0a7e82aa3a27dc00f01afb62f4b4be6d27d88d5d253677c23892f77d37a9343fcc2a0717ec68e31480625bf6ba0e0c116d5ce72a5bf89f64a9abaf2d743e3c0c3bb820b065581d965862236f16a74b1a007ec8f1e6c92789b612cd235d0aa5ba0574b9fa6c3007a84b23fb501ea548d8d84f6aa96f2ba716dcaab73c9fb4fd51ed4994c91c4bae4cc800fb8862beb99d5a2b4ce17c9abc9623001b586026cfa8eeb901393b7f5452b46a70a293183142bc6541ae2c3dadda704defe91c9a12d6479a60779f2a9c192c22a69bdb860f757fd334380eecda9f41f7175f1e2f256b321eca779654f43241dc1a47eec43944877e8975e50ea081959185b365957c613bf9866fb66af162dec3c5222cc375bd53b013c1fecaba36bffb0698799e2ee0b6fd528cbd0b8b64da3192b1dae3fc4d3a2c04132a5ad4692fb4fe42597c649da2c17c143e1c0a44ba7f724b1f5f8cde9ddc17819bffdecdef896decf3a60b9d146c1f2858914ff53627e7e82e2bba3b24ab16da300a69af2b0da6a686219a6f0fcaf67a943fe9e5567e8977747208ffaede17837dd6f7279505bb4f0fa039e20cab550fff922d48b2c67b0343defea2d49e86458d63c398da52182f1601780f2c02ced095e108efd7ffbe430815792aa3c04b303eccb12c85a13084094dd6b385003777e6a81a4a4ceb03f52f4e1c2241aeb795d11de199e12d264a29790aa765873fad70fd24c1794e950f1b7bc3c3d00e7414c5f38ea5fc4b9e55bdc809f90613b9495b94af0c05bae4f7802fc3a02a56f9369118ba41902ca438c6a16a96c945eddcfb4cde410047ab46018febd3c685da18e49bf7dfa12a96cc9533f30b11087457a71c1e007f62feb4187a2e76c51ef5c43432e9dc936bf54a95f7755842b855343c748a4f0f1c4650460fdfa0f0293ab9c432d6b861f54611349f38781f7b3304e4fb6cd5f3ca95cd35d9022f6945f41827e9740e7be82fc14154c409321a3fb2728800f8b490f123d870341712b2eae792634e311216ef246e7d87c5398ac99fd5db5a1cdf16b82ed777f8c94c7c066ae458080bd13a4b755200bb88f5a9ca8fb5525a5aec7ecf881799ce1472a1baa079219d23dfc576ae231cddd60e5dbf6cdf96f2a6b75ca01869ff4dccc64d4a65489486b7d50c39b5baa0dde4564a3b6650061b26501747b8b138d41ca1facbef28c8cecc5b6a64658a5a01ca51cd8aa71902c1293a71d23e4bc7aafa34d9307d1a66bff8cbcefb13c94ce7b24995e77f6bc465bd0decc2dc3bd4caad46bffd44c4ef0add80241a3df225008a0e6cbe35b74414dad09bfa30c95613173fce9b9cbb49e1b24ea1e22e4d46e262548e39d21e3644ab9dfb1e99dc9e0e77140268e57b0041b6431ba8077a0155c019fbf955af91d4d2633747e06af53309ad76eaa0ab9c5af8a9ebb193ff701dad41e594f447a61e4863db1c48479c0566346bbb5be01fac64f6acc11e767f398ac9c9c90b9146e4d737ad82b1220f300a3d593354b4ba427b00b5286244be4a6815f2224769e20d46b97409a9fc2f6fbdeae18fafece3d685d63f8e52b5798b8730d6e4de621d7cf95513906eed575efc01ab5b2f2b9b4a8c499d5c3449857cbcee7b5068b5b198e5b9cb216c7a1222113def3152fb52f4f3ff0b34ea56e9990823950199c12147bd1f81647ae2402f5a47d59320d322a1206c8879623aa5c4d8311cd739266da074798c57125df92b6b4f08f264b579916f10f3d18d7d7515fb62efd7670d6176bec5990bdf333378595a7f5b7e946667a74f4c4fc3979d307deb8375ba23463f810c173ddd80eaa9f2952d67371fdb461508caa74cd7bec8a12d9ca287b32bf773c83f516b2411f60cee708c2fbc7aff3e87c7072ef42c181efeb01f66a5d1d19e43047f69763c3cd2527dfe2f73b114acba576960c971b81cebf86380ebb76ee280143a13054fd1ed0ab7b134d6f8b5612a79a40c083360ee4e275c44a83a1b4c28d595d280f282d613171afcc795fd75d180dea5308dcb336c92952c90e7268bf38adc0ce9fcb0f9ace6a3f2402275d4b5e2fcd68b8b95df894acfc8cd831018d763d1f3f68d7eecb7a3461724fd6be4e49470f01543ead966c5177481693089577f1854996590ae9b121a237f457567105bbe05735533179d70042aff06d0e913339dc0adbd4122e956d9470e354bc540751044f3e98ff63bae81e5cd34e1f57b2f497600f8f055ff5639c3cb488a2c98cb0cc7b5dc58e23598fe358a4bbbdfa18884e61d89a022bb3b66194c9971b8c1d051c4c4e3b76c7c6486dfb13b9231e240fb8606abc890b40ac8fc3fbeb7e363e4c89418d730cb7979410cc5b2fbc62deb0e57d98c74dc94c6a4847ce2b24b60eb09ac6b6d473e9d84ea56738e26fbb9eb216b2d7cf4cb7328bb7aba6fe816cf81b0dadfd96e41212496e5bbf8ab394a894280e68f28f080fe117de9fce937163b5446b2bff1d838d7482158f7ff08b2688bc15f88307c2f3f013c761ca57e1c623ea61867c052106e888c376d6cb2151ca131b91c2d3e53776df63b43114fe633f33772c737e1db0792dea99d2adda0cb1b0d194961ad3d7539d21ee0d9aa0b3dc50ed7720b19b459a72b1946609d88a112358ba1aefca2295e4e7cca95a2159793a37141bca7b435d31ea850ab70159c8caf1b04f78de702cebda44bb699139aa184c3ab2ee1dcc6ddc7246b56f3dd7b6782432e890ed6adfd2c0478122abf8fd87d774e7f21f6b51bac9118759a0e52c861571e4c9f500f7d4e0f969b9d60483d9f63694bed7a2ce1b31e83350c89e8cec6ad10a2fdbfac15a5abcce82e7c94257518e64d179330de91cfba93c0a270ac23ddf436a4b9af197eff7ee59fec60d407b3e8795828c17b9250a439949a5b612ad9d9e9c030196fb820fabd67d54795c5677c49375c6939507c62d816d943976916ed8ea3fdd7d94954540ebb184c4148b19be83b1dc9263ffeb5b5c95a3bfcefd63e3e6ed6f3fbe2ba1e36838625e988e51d6f0b4cf2b036e359f6faa143400dd290455fdb975105e00b891566042400b733c8ccf67f4e7611afc13ec0ee2c04730a0c25c056cf34441fe51b55bcce73c7ea2bd5a382728fff16ed6800b9ebc60d866575264ce2baf06124c346131ee07f68849bebf3d7e97dad285458d46e52beec564b0c32a9950fb537c5deb580be422729775a3a00020fd5baca01ef563ace7f7c3ef1fadb9322272da314b995c42c34dcd5d9a99f59048977f311716e92b794cd9808a2cdb77472b02e5275f56a0f1ac92aab624cecf5aaf1ab84cfce1457b41e139e8320e397d8bf273130d160137a019baa55ecfa9313c646042651f04fed3aa9c81ea1a24ed27d63f1e6b32de0688ea9425f4b9cf6bf8803d76369e401c61b372246f8494ad9397bd3bda63af1c7bb216992b8c1385278a941a22f93f1eefbe26d7de4ca4550cf1b370243e43459d4b48551c402c26b13a0e873ca9204db704722ec412d36efaef10a791d4b7b2fa999bff41dd280e077ab06d9b1258c74afe1ffbf94952c8182dae06f782034aee2e8f53ace67e1ba9d7557dbf55a43861ab3a2a49ac0e33b743ccfe01f55d0abaaf5a4065b58a2856aa99ac90d865e429337f43136bd65e6b209bf991c7dbd2141a974c31916dde6dffd01254a0852ec5ee022e6b8ff2656ccf6d49e266d773d884d252474bda44ea29906f82221175f11c0c8d5732925a3d8e45cb3f3bfef1078e5573f7dd90543b845d307e40e84dc5de577e67e4236896e02a1d10cfa6a7ab8ab3cb1eb7825e4437e4161fab0b57bf7718f78cdde3ed26dd40e9f6af276beab1a3ed30155eaf34b28aaa9c8a5b16a7bed3eb60d1d013e2377d37017c5d8274082fb82fdcd4b4a451820a6d11954bb80229ae79080146760f901204f221eb75cce69eed4ac29333ae1aed8a43dfc31e3d4d6105e6558e1e81a528cd006511e82771281a8d6426b4a9f30cd632faa41518917446d8987b448d6543d0d128e715426c75281bd5a548266fe1feca80eda0a4f91a55a93f5c75edcd48cc85654ffaa20f7ba9f5af5acf54746ab2660acb903a684cafd003eae3e54b7b1064105cc84a82875df209d6a084fe2ee8eb04135d1a2453a805c7f3b5074d102e085357cb64bca05d67f49527a52916b4d2966b1c05aa4c8b6b52381fe648f00ce022247fccbff45a9affd87882b59044a0120d5c1048d73ed5034e3b33b08a65039f4bfceebd4ef48f39765d0578e91b71780423c249043c52ba970591a55ac32ff7d5b2ffcb05c30b2e6b835ccb4e9137da6e5f9056fff95733b54d9306b27f326b70ceb8500dfbee83c8345bc7d5f96963786807475459508ca4b539886d2a43497c24744b49ae280a828ad80171b3895806f6cd77bb261a50073c85998c47b27f17382aade29e490785120611ae0306bf8c3b6444433dfd95ba0a8e758c6da001d9fd16a184a86b5ae9e3a70af7587f79f727775c9fe0a2f993fec324553702eb1c5a73ff3ece79822f8d29253aaeacc1699516bdb17dc8ec516a9fc67ba6b038b0c707892a9ad862594b1d0ba047f452b8f3750c13f27762f3cea5fd0ca2ff864739526cf3853ac0bf4db1a49cdbd261c45d1cb6ca89bcce88b13b9502bd6e344eb0676f28f07eca04b38266051366468dc483709d71166993c589671d250d381fb7b6e8d82014ea005d0dd9cae24f614e4046c3ba5ee571c5d9c7f04d45fd042f3023429c7ea49a4aedefb61d5a88ebe593ab29bfb6d40840eef2fc4d92e70ff0ed4951afaf5839c353cce825bd3f2687ca4be7047a616c171fdeb49cb5c9206fc3895bbd2015743f4c505bea5427be851b4e4a46d152f777b46e1e981908aa661b24c85b9792b6ba8ef484907799a6946f82a65f1df964875ff4212daf36415a274def9dd51861e676e3486b0b865ecc64a8630871a2700b68ed68831a9df02f9cbb2bdbed2c80351ca915585b47aa73857f3b0ca2ef05772b2ecc46a059ad7c536fd64386456229080b7d963a8a63d4ad0b7c1b0836f70efc75ea1f13075beab1915c0076afe3b4e9ee523dca56b4c6340cc0e1a4c71a2fca87c4c84bc0e31256ebdcf77834a0cde2020d8dd1eb5f91afcdd5139fe3f0e66b957d91a3edaf4230fc3b9aa5da2549f2db2e8c442178c7cf70ce3cb1fd57cb475ea30fc68888f820ce079844d616ae23da1e391bbd569fefc787dd4f247726eda6660f04043481b02983a1428ac1a23cbb0ba53706b6379c69e3f861511da4d20d4fca8337884988c13cb6ee719f8b42282711d9616de18d9dc04bb23cbba2ae5f5d25e3a810dfbf73f32293cd18d3112cacf08d8c8bad8c3ab7e17c3c66c80a094b2d2cc96a24ff6e612c27b53ef4e29930681e05df02ece3956057378db29fd3992349478da5dbb0b6a263a6f92caa097a397760bcbf4ea25047a15033da5e6ba5a6ba4d34f516414bac47ae937e950df9ee8d443b64d5e490117ece6571c6b6ed4e60ca21bb84bf8b416c4f81c25e4eb690d96b2187e327dc1337c63965baffcbe7db6f5976ecba6f7e6f929e5dd361c0c7c35b68c7ec191ba394ca51bec65c985ce85f6e0767bf0af86f5209226deefc28adbfe9720e52fbcfdecd5211237c0d418aed69b74281c90955ccc1ef1916244edff3d80f4c4e3d862dccb92beb2650ce4535427b87f4e288befac1dd74a97ce271e5702712e5a7350c275edd815cc3af38056ea7bae59b8cb9daf774381487b1ee8a0f517eeb36de8bf6c7d2e096dcb9e7305d53263b423de9e13fe5a03a625286d9a0c3c5a13756be7ea6660862932575b5ed9e8a67c352349f6e1282634ed1bc92b44a8cce4b9766f510ed9c8ecec9c1d03e2749f4072ac19f3b0420bf70f67b53955a555dd2c3b22daf7fbebb559632b96eae417e5aee7ea64a4028c998960c981c1cf39abc42f7d07a94e2ea29660990f503bba7289a18182c1fedce6e2bbdcb457dcf6de2a40abdf845ce4f801aeb394d17275671a084f9640ad4cfe69046e9e6326a32237b4d240985f851b26af425d50cf44dbcc8fc9444861cf5af00e4ebd959d9c1ce9caf92124cc2f7c03a99077a19d26dbea4dbc4fad5e7c30f04bf9efcc88c72b414bbc244e3e70aa84d3609d48b2eccc3c8cc7a8431c084420558c6461342f172927050200a322c6e4cffb0936c67238e869be8bb85ba735010672a6d2db30b966f306aef50f9483bdde343336683fff398b43a7f9e73028b8e872a8033f9809d3e31475392e3bf366342a873ed0bc296f186fda48b42d7040eaa92a8a7335b46b6398907344c5924ec7610f8ecb78160549c3bc557e61851f673c2d46d2285825bd7230b9ff2d533b22b69d7fe61feed60d18d427df522caf9bcc3a812e1fc90c3cb785075fc16955f424bd0f3527b0e2e177b3c2a0af13132fc196d6579c1cc8368d5c005f992b1dd3c7f8060dad0b03906d418f06288f93ba9980c24609bb4ada76ed6b90738664c182771f426015288f971e621afe78e95f573bd978388e8d5c088fa4061ac398f344cbf7db985267f307a7216550cd7433822ea13a5e48619aca861700b6a478f8b4dfe05301af62c22f304c9d335ab1b27970f58a2ca14d843e719afba9e8b37d86782ad0210faa6ea9e83fa00d94562228d348940f857bcbfc3b4224ab59828d5a0a3678a6030d828af53adf740a2cba0132fee451458498e30b3b852c6843dcb654c0d49c44d951af8eb1518e9fe41f6cf6b31648a7fcf772b37eefec154f80ec80e42666395910ccc4fd0caf45a17eed47b25f7d4e6d13207bb7d6ea8577af986b2d70ebe116204173c1bc9a0717a21dc76fc5f52abd06b7864115651b3229530bd91139788e6b1aa3959ec4b22326a8c6a210317f34589b33e4fe8496030926971437311adb0ee6fa3531d6901edf1aa691ec91928438d0bd17ddc1ba09dee2adbc42effe93de32189f6409fcb3dbb0e86b5030d5545b60cc92424414e1e83c82d11f58a86bff184e47cbe90416789a65c3d30a16fe41d1a426f4e1b658bb8d81c1f2590ad991ebb19e931fa619d7285f4d461816589dba60341907b472a55863f88042ea8dad3d67d7a5852d0c924086bb9925350c8d538bc2d1f7504a568d63d8c32aaaac5cc9d37a70d7222b4f06e81b598aa727a56b7bfbc4124d33bf3622e17cb3add5159e1e28a7f7924d638c9abdef20ec0db7510d3b7ba5a9e22154fd9247c5e88a9daf275e31193915315a2abc29dbacc3ebdbe260d4fa5c4cc663188587d3bbe98197c57d84ee55ecc6da8bdae4d140b09a6e315a65a2d3ac53fb27ff55374e18eca3db5b7d7ca6682ec9b71c5830c6c7087d0e44a4bb7d12b5fff02d4c6781f46db698c3c11a2b2edfaa2f4027e1fbd612f4b7b8f7f2527c58e8e634eedff3981649148271c83ad01479f9d7dc0ed003eb91c10d93cdb08b004326d6d9704023e1b10fd8fb5088fb91d147a7b581d711fa6a348fb106d992b78d2430ef629711299b5124295ff955ab745ca295aaa4cd02cf9cf046a444290552ee390c7922e9b59503d04550117cbc26d942fc72649da905469478db6368d02a0eb51a5d042b843c63374e26e2de9325a914205100210c5e39d65e71c5d2ff804c26cfa65f2c7a6054937a516ae80196e0c280e1eeeae78374699664e0115765aef10a4949a35c780ff7affdb4c56f1d2298a7cbc8d6a2ad4550b7d4fab40a50dbd4be0391773076c571c0be1541ad72a12d260b90afcbe251e0231437aa556751d8c1c482d434fab37f8e413f91feadbbf25764319e4ca313a201084220ce6be6b1035e5dd129efb971332d7770501e4e87db937ea86584e339232cbc6ab5bfb547ecf36310dc0ce0fea0faf5a632007524a6eacdca79a3892fc898daf5b1ed037a8772d13afeab44b86167e65da5f36524b41f46d915e8185b28157f2b738e6ba64a581fc1415ec0ad1d50f5182703bafd6182769fe0199478e77d999e05355fa68ae26d934fba91ccf0d0e50f1af6f01a589f1dcdf61b89b469f3adf85122621ddb023f546f6789e102031656dc597d8cc9e97fc6427576213834e22bf6cd3cff6d386679e3efe4707a0f24a72a4b90520bd78cf2c2ddb5c9be86fff14165883d299e0ebac62bf7b28bf0001f0b7e4c3fd0c3b361524aeb28a69a812e2a444e237b0999fdae0d80b3b8a5995b86089cea47b5a05229caf289ddcd80223ad2f2181e9dfd60eb271a4ecb03c00d1085e515f17e6089d244436063dd7875d7db5ff5062419b41ae8279c643a68e3387054f6608aeab02f827946f710ac91c66050cf5f1b88162fc23b3e9fcb8fead55ab0c0caaf9811a7b0144acda8015507359106e5bc482978bb55fe88d477eff982089d1a05e6ce0f922ef614aaff9834934d820cecc15cf70aa6b85792cb55b59e9dbeda9c1c74567688e925a5394baa8e4fc53853165b0e7ec0fb5ece0637d30fc5c97608608941eadbe49637216a746a602e2044b05b210baaa05ddf83f3212bf51e671a4040ffb2f6971e4f2785017e5b56ca0e3c14049e1612fe3e9bd0fdf65e9c5b043b280a786213680ed2fa6d13cb7ba435a1c314695dd085802ac40711b2ac7357aab6f1f0b1f4e73e64dca252e51d4b50f9f5ced9de7f80674de0550bee328de9dc86b03f1fdea135d4b8f11d80e258a0ab2754cf7ad646b7cb9724999e7cc23ad076fd78e34c98be584914fa227fea5add876768937ac0918afe608a6e48115b36c0c901ef61b752f8c305f45467276eb3c18ebbbdbccb5e4c505d9e3117527f2c06586bab2e3bc7b9cb86c957e820373c56e3edd4cac38deeed65c44d5a93372e6b34ce4b5d94e3c022d5c61090b69c834a1af8d7f9c72d806df47852f17308bd687564f194aefb00bbb0476e8585cd815819d77092df0db6d75a7493e1689b04c19d8172c093567595774a0f312dc81dbe854b5fd0b2bc53ef433e01f04b1dca644574facc0f13b80c62603ebac68c6c75e0ede9666f2b2c885a9cc76c3df56d44134326d1049872e176b5af7cf797459514a64191f27224597c2b3bedd6c348a16548bf0d178ed28b2be3c8c167942fa245717672361626b9e30491068f9fd97f3d545250fe1bfd791411e43333b4c218cb062c4e7ce664935daa55b046fcccd13099e593ad8e532a348cc6fdf73ae259a05885727580ba3883bfeb177c7277ea29c6403803de6683703e139451e7eda40cf57565bce30f0218de2c7edc37a00426e26b2fcae0776326ec998937ae36ac3913adcf844cc1f74f3a56d8ea401dcefad12012ec11a713d768a92d0c6b3a87fb4d1caca565ee7f9193b043b49784e0fa6b4010075940efd0a317996922e3370d8451207ca27133abf5ad419fa302c5275c90c62a5f15ed8804c79ea4d18d184c848e046ba323b89fe958a8f7da0ce084c619887013285e21ceb692eaf566214a97fd92cc7189c48cb0d8b1e4aa0a0c8fcde3e9784da3de5b423ad13937c6331e1505d55cfd848a340ac195792309407d47e6fcda5f9640f41e83545a3111e2c9c29ad2394933b6531a5942c0b0a5a62ca604cca517e1d716a4d2c80499bc60ddc7b306b262b348021f5dfd7c3eac0b3fc6271fe48227a1f5eb03b5e3163ce44b097fb443f6a8966a16e664711b0c983a66751ef0c0fc0712ed73bf1048e379ace31d81ba505bfff1fa4f1a166984bc63caad148eb957b428df8f5d602e34d06db28e2c0f8e4df063794b25d88f09d692a1b1151106228f0912be2543c12d9db9bc5ca6dbf97764663f210da897e281324c59ad3aeb63c1cd6a81cd64c448196f2e8c7d12342d49edb6714986f0f15c1ff300ab3863341ac3de2fe50d6a506f2e60854d95b813a94fe0f9a0e26a0297d10d93230e2417913aa2613af83ab6b56f50c0ea4134a6acd224c3cd70f40f8f782756d260525aba1ed38f4b4b73303ba7efa172a70746e8778eb16bf601e6a6636cbcdf4244d0dcd62e33b9820fada8baabba278180b596a18a966dbcea90f13850bbeea41f4cf930dcdce3d3ae2f2b6b4744bec4ff2dd73cb2ff670fdfd6af117eccbbb8d4ec6638affeb6430abc3e3600b326081eb4a107c5ac26b117e2308fe9496efcd1a8cd1e32b05f3a1e9286a3272b33b78e8bd533db83ef8db27e84d1e1fca968de208d6295c7ee08d0b5d2aad88421bc72175e5db882d56f192a03132062f699330c3022d889676c52681fffd2ca8cdcf8fdd4e39eee57464b994243de7a26d02113e6c2667ebd0c77cabef71811c897988a7eca6e3ac83b9ebc4b3f4f712d5446f3a3b0842f6176b0e2245df375919289ab61a544d5e2f77e9db398f1b2aa12656fdfcc91e6edb8767e09f2126f67e3a9fe849f2a84f31328ff4919fec3a284a41876bf02f42a68b6b885f4090838e46dac61c1d066d63b6e20f705afd1b879746cafdb0a4ebe0ba534cad76907212314be3ed6382ddf99756e8d4c65e3a5fa5655cd82d1ec454361256b94b4b66ed59e4a884d0e4b1dcf3d2346616633190725baf9f976b52e66978367c1e5a9d144d81428eb826cd59cdd1e4c3ff43dbe5142e25f96dd95dc8dd4390e82164db05c9b943ee82e0b854a0fa0af247340b69fd71807abd792732f8a81ea818a7390a0a476d74c791f06de23271ff4bbc6fec1b13d780ecd7772adda3888b84a349e42533c500c81f9bea9c7353d219aab26ca69f43ab5c6a72bec7438c2133cb4ee59966def4db54c44b24f4c3dfa8e5be55127087264355ad8aea1d48f339b3415adb9fe9f7a4456feead2bbe3937566205709252f614e8ed27e8412cdfbb31f7769308ea8957934f75963734137bd12f95bc972f955d680a4fd03e368988f6bca15a2351205ce4bed37bb23be95f585d994578293b2ccc0f7b0336fee9b87609413984bd16b93ee9495cb1552b11bfb2954f2c79a94585ee633e1e2ef74b2ede9753701b61ac82e2a77adaaa48fe76b67c5e6419b0a1fa6774757df2a77b820b80ea9841ecfe597ab89543bbe192256f64c13e7f90cb1bbeba1590d4ad613f163adeccc174a67e9c8135d14f5d29da297754168569c253a4c3e32236be29cb57bec9bb085d3f9a69ab9d17822a1167e7b83d83cefa0b415ce90b8a680a2f6e99c3654cf10b283e8f8118d1c851e6639fb15cd701012e82b182dfdd22e9138093f3e813abdfbef5c8c4e5e389c0668abcbdae23670eccd58e268b1c9ca08ccc121eb3c21c5fb5c9f14c4a1f46aec1a9511978dc21f6b2d293072c8a792923ec5f30d93486e6ce4d8708c0f316f1417345c6f38b0fddece6d5f2dd9596f04d7d554517156b2072cc9d319e36fbb0bc7d78565069412092142961af9c12389d5480db870e10ad5d123303c4f7624a7dce340cb47b5e4b8f2c8b89eeec3cf998c87461194eda0b4cdbe1afb92bd2681e6a372eff736abb1473c75807ab38a0b01846fc8d31b7fa357b3ba235d3d5b25346b5d591182e068300961b4cb7cddc0f9f5c59388836502cfbd4118bd2b1e8a7f2ab856e287c00df5507ddd4d6d949e75d6ff2abdfe8b7bfccdad3104a793f54791f5474238205fff8621391623b8ccfebee8773dc3eab262932b36a43c7d8a0e30e6637dbf97c65d24dae9632203d45d7c3204803ccf2e1b2c1282382a78fff61222c872fd755124a7d9c039a3a9739bfafaf2c53df07bb85388d196ac51544b420a7cd1b49a9a0633ff9bb45613307ef545c50bb52e02e30aa4599ce9a0ad9b2ed645f4ba49738320981afeb416595061b537376cb7fa55fe794bb229d40633084e039cf14b38dab0d626bec0d3e23f3c3c1a3ff6edc55abdd12ea4a0c3bba05c11f6bce5e47926677908ad8ae80e328c283e297a742344d4d2f39fc353009ec0bb6eb8c0010b6f0b877ec15c0f7319140e67d1f163f0a99bd6e552b9e06ac42dc7f0e80fcad03cf59a4f3a27ae50f2bbb5c9716edab830a29f09e8c104e9a495fe830f622e5a5d658cc183bec9212651b49238464e5f0f133a27ee3ae7f70abf0feb7eeb31918c9e35b0379270943fb9a0c6c3f2dcb61f92c675f4edacce66ba5d25ce6549048dd2659e2faafc2778b8910db1ac06af65dcdcdc6d0939ab00d12e855f21843520607ef32b9e23bc0b31fed430c82440fd1768036d2ea33403d3e4fa45afd584359ee77ad0e0a11f94321c110eb19dec57c706f450fd6fde3fd5cf4b4f32487313c60ecb9ced88b28d4f361ddbc78f069cd49474b771d197a06b914fc6d377baa3bc121106bd9bab68955c9114062345951168822d6f877a783478ef80e8aff525d0681d2697a247562a72fe17d3c4a79c849911e4ab0014cc214742063f9d3c62e2db99509c12a332e82c3d68272ab6ff6db70d8cd81fc5ce8d52632e54eab41b4389a25abab63287f06d72815d927e6ddf5af13451fe0571747e555fd962551da74afdc0b64cfe02226313d0ea283fdedde49adea80388bea3dae383037e90fa6e432068532a75dc17a539bc9014b6715a6b949e17ac45cd8faa50b26eae7780e4ef949c790d5be6801148aa9d403ddcf727686c62322fbf31635decfc009c8107a17e0bb35e8eb88ddba2e432287bcf87db59d603027da72cf484545b950422b5efeb661602cf569ff62e4bdb47fa0ef02c3a8a022bc89383169b79f701db94973768c10fc7867092fb90ce99ed7098fced00dd08865754c17093b2dbd52bb97f7572b6c38ea478f1c20d5d240564c4279f020bdf9a09a102a418cd6c9c67a1fe4b477b75159f01e1d45a0a81a859e1c705ed33f1ef491adc5fbc1b428b2c7c4c8397540c3ab6a6e8a462212de50b1e9caf576fdcc4a0f11004e1979e9e37191c4aa4fc66ab9b389b0de22e965cfe10e6af6a586f15cd55b298b313bfc4eae3a02e476281931d1ca80fccad1990c6d2e0a26e79db88ac057d3c317494e2b3bd43205437798ee2912166071e6444fbe132a7c6602e2d3a633569e39f05ca63b03069e21f88ce884fe7fc3ebaa5fd98ea729e669b568c0ccaf855776bf7a28c4fff6f6a0b2276e3b56e40f7b35d72f85125af8eddbae48a467833c31a425124fd85115179ecc675d1e2f0b6b6d4bb339a1f2024133614433cfb8f612128ee5d950d178ea5628664751435a1eb6e6673bcf7ce567bf49c464a4933ed04b6b1d52fc983075a85ffb02d1843a28f9114204d1e3720ebcdd8a7dfd8796f3ca893b31855d57e0a9706e54ec88b09d02f1d38296818773c7def981517fc7c71c85577dbf8744d6cffff8fe8ad21b7d300ecc550d7a9cf35605a67dd07b6fdf949b79c8cd5d729b19b02d28254e6cd2d4136240b16da9817fef7c0793b1ae4c98dc12ad9975d0b25bbf47871040c5be7e0e49899e4972ef5b15f79dfd30aa587803df32410f84c48de5f1c65a20c37245f8cfd4c4e653d3fd841b6f16d212b86d77764534256e0a5f19b705fdd9513019fa03dc704539b79aa46862433d3d203a03873becb072059dd86aa389f87683f59645be9b54770323a03aa45a4bbe9358dc1638cdd9b622d26459a336db6569e47fcf4bd4564194ada0db79cb62cf9f363d5c6c226e7763335ca5e4d6329ff6c06a463cc25da5e3a7b56d6b8a13f731e234c387ba0460d627e71f0eef080ba3e430d6d34c2adb400c342bacde371874a6f56e34d45da4834f75ab900a139a46af3c77ad248b93b0832049f35942b8b356ae7eb0ce207a964edb2f20d097bbf39d64472936728a559c57759bf49cd70240d74449615da786d804a43f463b571d62083c9085caac1ca9f4035e8df3b33969bfa95e7d3eb1c91b0b1103ca8a9bc74f0f4db460a4701b1397882302d964129645e8562d117a48d16e03463cd13a3aa4d4327b2c3c8dc35ad426d7d2f044a77346b9d77a22eab2941c99499019705847f01c6ded2b7cac939451878439ecefd3a629304c8b472ca723efbdd3745dd4c35138a5a836bbd3ec7ed79c6eeee5e7bfc661413444d1cf8f8c38e212e9760ecad62b4308a9859621aab144133dd8c5fbf372004ba9da35136d73b212ee67667bf9b7ca901bbea9b7308434ceafa2d423fbf43f63ecc3ef385983a28bf1e7612d408c335cd10d96e3957fe4d14e1196d557f1b678358e14539b1462a44f88cc44d4a618aa0a6dd1c72479a299bf37a7bafecabe3254053e1831c83bdb06ae9ae94fdcce8a2e8060ea552babe2bfe64cd3f4fe1b53a1afc2145e185e0e875455afe6380a159b2053259dee1c311b7263fdca3f4e846d65ce1db34fa9373cf8b2ce6c0d1b01723809f4a71bbc6f7a9be9428ac552696c367982328894e43240cb3cdff5f91006dff0e04738b608dfca22d5d059fed556232327f88bbffe26285b110e6b7ec9d0de2e58cde20c71a8e691f4fb51170aab224f0637a7292b57123e90064e163f36c9bb60e4bf283b49b6f72360abe0037d63e1484ed40558ae225251fe5e9539bd79526f3c87184c00719eef13e52611c16bd811d9334e26f1fca92655f05a2ee8864d3e8074dc3d61dde56485959d225814827d98920e00614ad515b2e59f63b86fd263883cce4ff1c3b5826971e90a801a00d02829fffa75820e843c73590a2e6f186ea51d5cc400a41c60ddd7de898a81186ae6227c74e6898a01bf5b0322ed3fc1a7b8478e3d2d32808c7ef2056bcb00ecea3a8d0b69be36e03083109e179f76ebaded41ba935c1608434637b7f7fccdded8dd1366ab6b1390d548775c2d2fefdb13ecb366bd2968f89ebb9f7fc8c45532c647aa612a8cc06956194e76a53caaaaeb88fda569bb5be14c2457c1b909e4d1bb72eea3e68cb9022535ffce9aac8da619d3660443a2b76387971a2a2781e8f0a2899ce67e23efc24702eb2a12ea4ac7c2ed8c7113eae0e8de39ba3dbfdef431ae94655ed857ae3e1e8a8fa6731dc72b32dfe7f70590be1069b806319b73405f084e8f059fb9796e7166abd1abc616fab1680dc0588d223f02f3040fcf767dd035b2a13d39acc838e5338b5a2f7f9cef7984389b9ae5f1058d6d88d51f9d3ed8b4675a1961e89df56bdc6e6132823f8403b4825b6ed95d13c367a8c484d61088fc442db898a5258dfd5240dabc86c2eabeeda4926c827997001cc222840747f3a5214df5e0f0325be728d32d365ed417c602a94dbb30557936d37b5a6add15ecbb7b731fbc5d6a96934701c16b2ffee5f954b86c015e48ef4fda3b52c680acd3f285900716a84c9790742c361a5485a19a9a785cddcace54cd4c9a581a9dd3bb24d6fc3da1c41f5c8d39eeed2702d4d9a21b453efc4f564a570e4c8c605a9ddbf3dddf7642cef4a2871c18e00436819446723db1df9722954eda5282e727145590d36102c28bd5c2f2e61b194770d297649c4eb17ce16460079ec7af556241c572310c56d444b35c82f5556fc60f195fd4cc1b172b022d7445c4b4a4dc1b3e0661876569f59ed99bbbb1dad8e26e0532d47321283c2ec9316e3b82d64ec2be8dfe4897b961de342eda8d4d4156109c0b9e9ef18ab70b42733da505dddc0fb62343fb0e1a675615d87af5cb94d7a7e5b6f2a06d55986037ede9a4773f3a24e72f3c9ce13b0f0785b9f7d19dcaa92a347b291196c1423459cdf17ba65109d2ba631743c8c0cfe54e6e5b51bd848bfa31518dc8fbe94d52fdffbd0368f8cb0f7c537d8faef4747f72a7ee4f05015319a7220fe76773998e6b6f01d4fbc683ecf7eb4a898fb3ff0b45da997b8ee8fadec53798e5dac41c137163b895751bbdafcc6f7126214f351390ac426c41cb281eff2ad5da5419b11cc44ee72746a666e056af9fa896c68c6e19f899e4b72d5496b1ed9a493480a96e19dae1474e472ba2a0bf1fe26fcdccb20b8abf59864290e1586d6abe9ee006b434829d01d14aeac22494c7542e4e008d66da6d3b926e4f3a48170b9da53f1b86ced61eaf1a4288e772f8c2c120b551164cba9bab44b2199836c8f55485882fb1042c3a85ea234b6a6a573b8542c41f66e3ca770ce9b2782edb682683b1bf29f4be1b9d6aeb5f221093b3a1ea3e88966619ca72e393e23c8e9eefdc6e87f71441aeec762a4d150ad80ba0d1a3debfda41ff1bbca0957711c3127549c45b0f2d17529a47e8d05f2c471644bef60f777ca40bd46c458341678101b04aa2cd30c780c337735d995b10317d95e4ade58bee39d7738e8125c6b77a64da1739cc4d27a704aceb0783acbcc7485b5ce892cbfe8b77b46a7d5c48ee9fd8f06c4b591afb676c5c6fdebf8ded935d848877edb6d1e269ddeba4d6cd22786a28864f38f6d3dbd01c6b597a6ad0595067f3c7fb05b946a91f08a911150b0f0b1f8276c045151d0d4c9d81bf778198ed3a1cccefbdc47efe29edb984c545b7a6e54969d30f405a70c16849e1861b272f7103b82c99520d2070f22ffece98f2fe34fd0f8cdfe8ced6314766680d2826c9869e7ed22209790db2ca043b19845566f04ba0f25273e3232605368dd78070dbc573eaa9d3d0d7cd30754c15724d4ab236efcece4d05aaf800b31dfa73cb17f55765e04826a08ed826ddf7dca33e6514755391c3b6da0026b48894fbbb92f3cbab2cd673faa5fe9f57d970ef240f084ba56a4aa229c98a4686ad47cb1e100d7b856ba3d6c041124c9960dd79fef5fe750f5c5a93fac2736363c17c22c8fdc42ea658dfbd0e7ce7a986a5517b6ea3ae082855450a05f6ecdaa99b97e72b27975bad426433a06eea0b2809ab38d8da41016cc2c848c34f87ff973a070eb2849695d20fa43589e177bb1dc082c001421dbd76dde3f4b08f7109ed8adc5926efef89ce53a64648e2dff89401e841c943ee77cb09363fa1840e4805acb34368de1fefc3e53aea129362d36ec547e26a7c576046c0ae9e7915a66058c433ebacb610727ecb0169b8526c8ee3a5e7946c155f0013c45b26667a549bc4587d9732ee599ac140e5b4288604338f72ea2c8d3b9c9ae8ef2f1120fe865648d6f9467a9044c9ad0c1b89555d1fa48a1a0288c07acfdf16d3c8db5a58267f2fc6d4fb550015cdb43d492d27e2e21686aa04b13aa4e4da819463086b91183c5dc00d6ef0527f95420f1bf0d0259892954308597953968697f1b255c640c209c2d37374ac1d0159eee67f0c68eb8c931d7fb8cfae8e33ec69d2719ccfcbf2f84ad970630d09cf6f256626c27d27442a6909bb9d0499d53b9b7e10f50f9d5d0d80dfd1633f927dbfeacf23415e8198b6204856965dc516fb9232b11f954afc817c84bbf1262a55f52e59c4f4697ba9bf7d54b3342bf6fc5f04c4062f61e1f64ca222e0f7c8979b5043c027a65e375e0a6615c88053088090692b5c1e0aa0cc92efe431f97ea17ec9a81e740349aa07f81eeefd86b62da86d9f143adf9742a0b201ae583b53a2b38f4933e9f177581511f81d2aa91e80cce5afac51f9c5b0cf6ca3ed2fce87eb6e8aabc7b1221761bb883a116519920b3c64588a1441fefbb5129ccdf02bbeb5cf1e7548f1b6718e85053fc2c6b7ee0d7d9d50e98ed01ace72049302aaad526c0ad384c259c923ce07bc15c602498f90aebc7d904d381e753191cd470c9b1a99fb95b0697740f36f300cf732253ce0dbb355b4cc65dc2e797c8adaeed1448c604f73e955505a68a3e8317d3bc09dbc3fbf2228de17ee0c7ef222aef53590b7085b2b8150f0087aafc9d98f72472201571818a25cc9d87472ae5db8b3c5a7dc39ba73a0835e817140ca6c92e8d4f9020f2f9750516e5a57952935f650dce349d304b70382ced9f43ad601c19418d977e12a6b4561e14d592517203aaf9537e43a16a9f3c4c5b35c5d3bd7e6b4d26d6b157c71b653b3f1c23808661e519e4e2a1085a28eb5f9ea4c85decd8f10f1203999574877a972a53ba168f9a57d90cbbd61f960e66a986b28a491550027602ccfa56efbd859089fee97af11055c5b8936b8f164c36687b0ee8901d797f5e9c5557a508d105fdec6905e44854f4fe21cce176251bcf67e8acf0c1b8aa33fd62384af66d302442bc6106f6583dd18b497296ff9523e763e4429ec52d7c88ce1dbc795267b640875c9322dc35ca832f18095affc0b2e2e0e65ec55bb306f8a6312e514a976637b70301428582a0c2516284689d033e0b89bd5cfd48a25241eedefa762620c850d37ab90e4dda2474557415a8cb68e082bb86741a1cab05c5a7d0d4b5d38e4fba7371821826fe4bcaad151254729bba583af9d363082d4a9b5460c32d551439af93ead8d36f03be2405ef1bce6b4035e90a52b09456c476058fd92447174e015a28dcf79a6ac8e793b3cae88c966567409db74d1df91352ffe65777ced2d8d1da6f8f768ec2de69389680d1a0ec78fdc284abc0f8c6a7cea5a24bb5bf27d74d93b0c682b9f0d809c72bbf714dd1f7944c481399b0ed26bbeb4b319f0256110dafdc6115685b0f8c5cc45eb67b35cf49cbff0a5df1cebcc851b7dca9698bdd7a623b9dd146dcfc966253e11572a7bbd23c69f7cf279d6433a12db780e3098019da0bc25acb5269a3620ac9a78a5c763859e4aa6d76a4f9e352a0df89221fecfd487ef2b58cbdb984e361ac3929618e9b44689db4ed5b0ce1e166856811ac7af87ae89dfd3f263ee41c188b00a1ca90d894d0402eecfe67c2a2b6ba3be35d8af0314007beb051f0b7798ab546b911e33bf2a845efdf91eb9b789af0a53797d94fdccf64d71e93bf7e40d51d0b907b2ca200ecc01c444d6f656ebfb5dbdd617c2b65ba56950200074db4a38800599a9570201d007ec6d3d8b530a3568122d192b3fc872de79065d01edcff1b3b0dbab967c962f3308c2d5dd97dac537601d1726593fbedd83648829887b087454a6b468203942ebe58996599770a316a6bdbaf37faad7bae3bb0708819994851681928f37fb99d126188b7fdc6f752087c5ecb7344296ac8907d38ec6e241776766c5a3e4678a0b4d51b959fa0787a8691f9365590bd4e57bcc573c8a644094c3a6d8cdc87764cb78316ed7c7391fd33a6734ff4c02f1fad221d5473e0158411459a502f57aceb73e32a9199944ef963a0ffee7c91299e566d115102acb9408cbb83dc10a28d318aedc8f2349df57e5a2c8851b21f815dc5a0d8181929ad00ccc30507e480d46ade40f9d34ae04efa5ab52c4765df74075dfcb714e6e7a97bc5fd82c59679c4537e4ead9418451f09cfd6c17ce1a945e19b067badcad116bbdb7fc36d19194eb732980820192dfbf56126004fdc6951678e58b5ae095d6402018cb73865d0abd47b5cab6ad94347ada7cd45fcf777d57ae03b30287110525ed2bf302c2c5e76ea8cc78861dbd1cedf57a27e712b17554fe4069bb1110e65c0597a778b2db24ffeceb0d4081eb7396eaa9880959a42a6edd27d94b164aaf6dca7c3f22518ab36ab406278f540c4ca5d058755624e49af3d749aa3676939077906e2637aa3bc50e88e47cf801c8b25b41493b804c3770feec7c18d7f63787e722c8e5514f4321c190ff46013528460be14d92976a187c488c9d196656176ef5d9f2ffb2fea76cdeaedede1820aff7147129815f6f2c64168cbac05a9527b40d3f1db450e774236c687b6f94fedf95f071a6c1444f5a058d068b92ed36ef6cd1659db1fd7d2c27a3f5e7635cbaaea09af373dc1c84e72c82112d8445e25cd5e892986a7ed66de6a6e9abd42f2bbd4e76d3e104221f7ec70f2bb1ffff3a93b6550c670e04a9e133b66ab5fb7a20422be368ed50d468c88e29e50422353b312338c102295988415bc01d60b727988d8b78a3b39e1da105971dd34d8666fc34ac1c19eea1136f76cf5996fa6aac999596bb8802dd784c3f4f13f7ecc2475735e83443c6b698a38982186a79a3c7a52b8ebc8420148c23b54b55b0a9431b41218f673de1934a6c3ae175a7fdd6e12d46807dbb72f83f5777448a708261b5e8df7c5547cdb3656f584026ad5a632dce344bc98fa0342de2d3290af75ca1437f08aff9b22e19f02df550cf5e93e0b7e958f4be26731583a9626a749748fc06d51f6992da3a5532569634aff41656b154d1581c02989d684a9d78f7ce9998b5bac6287333001e2c263a7ba8ca699e631a2939d1ceb80cfb40dc2d41fa0ec6c9f6f6c427a2889050ec5abf5350a19397120aa840ca55525ba771cba6881743ae2ef59fafafa56ac1dba5951360f8dad555adbbe2b70ae89539ccf07b83623b70285c36e6f29a46e0aee9b48ef4813c347c3cea2bc7b8c3324b3e3ec553eb7441b54926949afdbb43328c9ee6f802603c3f97939afd4ebc1e3080192fc66f49500e292ba95534f5278f4f86c658ea4eb48f3034f83c4add833b1223e909e4726c469eb4f8a6a5649380576fc532ad32a3713369b6287c4988aaf6615967799da1685bada26793febbad3a50d7b1cfe6298db97c7e42bd74b66c548283c7261afbc6af7c044f01e27bed9f6d2b1a8b01204a7d7c7eb8ceb02715edba4a48c2ec4cac85869a5f6b9f22a5f2f277b40a9270abc04f6dd3da775e0163e66fbe5538da7bc9384138c7760770ed9331bcf796c10d12506f9b8bd8b53cfc9d0609a1d8a63903768d91bdc0788ad75990cd38b0b25210acc07d49f8b0eceecb61f39d8ff78ce57e64ca0e35414d5584a89a3f3bc676d5970bd570f4892ba5f762f30181e02c96eafdbe33a5fbd9b87504cab413f2e553b5a0e353510badbb15c5e4afb8b6fee512c03a5f45a8ef8d39bf852b6689b7baa4a2b7046e8e8a99d9ff6a096567f2dfaed4d68c0d28da08d1dca8a68a00c3217ebb017cf7e9d49bd5df4d3fd13222019b1bfa565b49c9c94adf0f5ae61161afb724b8995db3bc886af17e199d7123c3f12558eb8b1b97b4a006fc241cc252b3d60190141557d8206ec777e58fd50a34fd99cb0cb2cb2e3c8643be30bc8fcb372078dbccc2f9389b4fb58b8c0d86c1b118104be7b25d48a5958a6754063bd1a45b3da33932724dd9c0f8406d67e1edc6eae9b26a990f8361f62c0c9ade2ca5eb162afc297ada3b1ec402eb3583505a0da88f24598edb3f4419ab91f30322b3e0e927d613afa94c19eff528f87189c00369791b6d3c7303c87398f23e0bf1490bdfc422b760cf192f831958c7195346753bef7ffd4f7b810d65cc1926bef6610135345731ff30550bdd95c6c8824c86f691cf368ab8c93811f929f73d7c550d1942d1e05f6e9292512bad11e6b859a24c7d920bc96c39c85027c209cac37d377051b39d59b7e1f073cc303cf24295f210c03c55881d593d945ef63029a5bbcec93c911d3269a1264313542973a7a356d9c6a3f4e83916ff02ef95b38b6c5d9e2e39cbb231652d920a68662e4c852218a71f9ebb35178aca74a4a9c7feca42ce9ec35a64a13e40b772430eec8c8ff50b0cebb25d218f8aa8f3fabe48473ce7915dc16fe7a1472bdafcf1f6465da6bc8012d671a87d04da61b3c53e2d8419916bf6d5b6ce80ea43d31baf57d6400b8adbb4429c7587f438252968f49765515ec956ec9077969b90d910a01f1e26472c5593bb3eb182c133ea285e418958cb126f4f73405cd2c97e2175e68c691f2b94e1430b90cfaa0de2dd40f47af6d1551473f7aa7c1aa84be385b5496eb19f19bd1654f50e068d261dc81d4fd7dc0917eca1b9ea52298ccfafd8512e00999c39de5d6770f6350c6415e5bbf40992b20a75b6183efbada79243a1582ae01968355b01c42b520f23576938a7993e401320920674d78ec10773286451ec6ea046c74b28cebcd6dc23374f1fc425dca55a53b16e0e3a1e7645baaf5fb61e4d492d11f5fd687bef39a029034fc0631d9613b51a28c4de2b690584ecb7a421cd029cf36c4c0cec9e9e38aeed55a9384a13034eca64fb09b8b52181525e0961de7d82ff1f1f61d43542f98b51926935ab870d4a73bdb6d4b7b89516dfd7b575eb46e1c21794d3d20f91fadc744b03c12d07f5a8a906e833a9dc134979272a1c1307b23280ab47381a6a83e6d76aec6adf2adbcdfc8effaba408a961f33b378cc427d8545400aeb14aaf836947ccec2dfb48c23414bf01eff68c05b0ab291765bb69f91eca430180b6ac1ad952a3745c4eaecf3fa88c25d9ef2447b4837c45538d2599328c887c2111995a3e1f54919edd5db8b305bcdfb5428facb489a1e2edf196bd1b96684158f927cdeb721cb62dc6c3ddb976bcfffc56f35830ab43352c000f5549ef73bee2575322316f516669554dee851c6eaa03f4788e70c39da1b0bfbff9d09ec7d5e450b8161651e6c730b55f301592400a0d9a72642f33c4d066ca7b99e60cd245892e942d228774454aa2ec4c5a1d28f0ff8a1c15ed242940d16f24c718b9dba37bf09d089477207e2b37d6ade003aa9611ba51abb7089eb5896c21cc592ea0183a5f75f7d994989be96e0890df403a921788b8fdaf7afa44bcdc8f0b44ba67e3e7ab8311ca769f9f15cf796f9c3c4b0f291706f54a51039026ec559c434dbadb99989351c65369baa7fb821897dfc8cedd94d73ec90d765edf66effc75499f8681e147a0cd61b9062927f5330038e5203f9990470e998ac353aed692097a18dd3c4b64e64a7f87f241f2438da9e0cac9453301c63da16953d9112f26a07570e3507db6397246fc61723be48190bf3deb6a845aadf1551fa89d09cdaa61883dc2fb16a0f194aac5d8ea113a1fff30c12a577c4fa26f373e96a4eeff28c0dc2b25b04abb690f7d5d99c5b1c53d933f2a08e74b42aa62a2fc533e791a282d5f1dd80fb892dc5708548ac3653f77f8db23ab2ac9372673cc95511707a4cf1e763f7cae89b5b19b80b77b41e86bfba42f2a64ae64f6806c07d7b6f4b0de09421eb45062b5a1df2d805eafa7bc9043aa5d805180c337b75ac80b7586c9df767e25f6e1281b478473bc251ff44732e558ceb7a4d0c0aac1fcd0204521b391adb3775c38e9ec1933d09f152b230d8d4ad3994eec4a004936456000dee08b13971b9bef29abff564d8433fcc0034e685a838c6a42dfc85edf1d7d5e636892b409b8241b0d278477cbda517f279882526d36f8adc0c77a332b9b4202a81298f516bc94510f1c4eea1a15b6f39bdae71915da543c036aa4d5513487fae08681058429ca593b931229c747c83b981f55c57415ffd858e57dc8d72886eaefc6a1ccda2354a9267230fb1a9559332e29309801d60a7bb1112663fc74494666c58c71654feac122086c87106efdd373587c7b77cd307558f40cba3ebf61f90b074119ef81fe87b89076bc6cc99a53a180b1e5418e95384784ce0f1adde5d829c78abb56ce43889f7b83c90e9ff57c30ce49b8af9890b48e76b3cb11b646faa0681979741a9becfd7ac76e0d8e16e4220e5ca4bf697df0d0d62a6fa26fdbb80abd723a8c590374518c7fbee329f8ba5506e4ed139515fa8f4ae03b1d1a6729faf267f7ff6362f6d254c15b302ca330fdfbd18c4ebb111b31246b81aaf4dd412f718bc257d07a6bdd9f2e93e5d21d3d8066bf87bff34f4c3b3edced42ff950190bc46ea0e5c7a66e9eebb385de21329d39fcc6bc98f9cba7e2788f186d9f6d277388a6e1c9e781704a054e6b4bc04377c9da7861567e3a0a82eee8b9e98e37817e29ade088c666ca52145791f74d66ddfa30cc31f4fdcd578fc0eb17d25b01811b106a9e175d1837b739b3da946cb442754cc98d8f0ad4165818313820ad2f1b6cfa57dd427f534c1dd86cbb8429cab3e3abfb7120cba820e5116014c37657c1b3775a644afc0599589244c2f0145dce0c04acf53e449b4c081cb701b6dab1ce0b8d7aecdafda0a6f6ecd305c83389c1e2fb126fa68b33ca7affb660ac56522d1f15d6624f76f0e9ec74a67ed59c883c83c43542e949d6387091f94bcd1077cdaad2c7321d1709389a02a2d11b111c810895f86db424be8d33467b411ef427cf75dde57bb6192422c346dd53fbd80c1722ee6cd891cc333cb04a809b38a355b828e3837a1d79ee7e4d498a425b33766b3f6a1e1b663fab66e39dc4d9d1bdeb1faa0f72d525b83d71b513c469a5819db28b945565e461e58e248cab02ce8f4f1d36dfe58b8f4dedaf1d6745756a8cdfdacaa4949578665be6defd31bbc25bbe0dc13cdfc2397057e608bc0d5142ea0a12017174c9429d3a2a690e6fad668cef452d80a23bb9a7ec6b57af1e3a5e0385c46c85e10228757fee4d911cec5d3225e7449549ebeede1531d8aa867608e5dd37f1aacc387371039bf3eb043c5181a6dbc7ce64a9839f7ce38b03acde79276ec6ee54c1f6cd4d8bff177b3662d0d5dcfba0942ae8efcff49ef276e5302a5a1342a7fee3e2429a163e22b7816cf05efd345ff2c779b5c6b3840e103376f7093b7cf61443ba17f24bbd5f692f7efcc3b2299e9888c821b6fd0e25177127c201433a00edf9aa7d91e9f3b4029702d00c286d8a60a5943407bf6410c8f19740e95cbdb449c24a93059b970e3b9da59542c45f8cc3fbe2d1612d460076cbeebe7c71bc1d1d67c1ebe01a478e646ab354d3f60b24163ba6a70f8f136c54e177d87a6b65dc07fa8e655c8c1db4586c04c43567f69cdeac396650e36d5857b74cb9d9e79dc1ec0b014854272937e2e36291ba4f82c22f2265c0f6c040c4c8c4a37546089eddf19f3cc388b3849d07b50867e537fd4c0297f82ac479ac837300dfb7cd6a67ee1a7286ac5589d2b4b457018209eac8bc1c21c17ce839164226d71e64628f5d272b9d1e095ea914442fb6b9d86a08316e9de0abd3eab6797975ca1b75deb46ac443f03c745aad59ab4d7da692670a7024b94d35098680e03b67385d76d22da2ae74df38ed38e5219c739583b228ae892a05514e33d81e5b9c0808577b98d5069b46612f6b07d2cc7cd30b83659b57ed83c11d5727da2034bd465025172c8cbfa3cdf5ca27d7315d3f2407181d497232fd2fd56a5b53a6c91c13529d41d3b534995958efea6dbe481ea334b3386fbd8f2e81ca3f979cc559a9ebf26206279c68df65163b19db661be5353aa4694209c6605ddcfa0e85481fff3a8a449c9685923b6d40cd403f7ebb312b19d6afd14f3291f575ff123d4b6bdae60a4d7885f9da864c60b5c1e1406342f45333e5bf0ac4e0239d1d1928111592f927f8ac9b795a9df144a10c2868af1b092a0986fcb54408e9f694607cce855815b12bbd30797de65080da377fd7206fca121c4a5dab185894035e694a56cd119a6fbbfcfa6381ca3260dbde9e969c66aa6daef9e2d0c1f2b58c4c72d88fcd1ec44bd206625dbe4350cd7bcda09c467a186abf86257ddbf4d139682012ce5acaa165f3c601ab5e52b1669c92b2e90c48bd4b77c477824f05648da114ececf4f760185ef75c2a4f8b15113d2ab4d5f2851a9c6e58244f4d5c4fe5dbefb0314a6b9850b30f979ebb481ec2beffe72bbe53696079546d716e57570a159849b90c84c318a1e901c5df8e3f3d904f5e5ccfa3d84314b3dc5b603bc13584cb16b23c602fb52219f4498e366cc0018b94eaa8622ef5fbf199af2ece8db6cb2924d04c1739539766e26624dfa35bebcea1b5a564494e256fb62ab3371985e3f20e381770b52b023e8179e081011bfbff53b0abcebb5c071b6fa0b01297e4a29b41071be647d7c4d27adbbb57d7581fbec386f34e08f372172f3f33a5e4566f6bcb7a4af15a7c4cc19bcc7125134256c18b17b78903b9e4c22ea77d4fe8a6cc06564bdb7ffccf4d15ae41837ad55d08c15ccfa080508c2af4a3b0388a2fc181468ec6384f13f164121b2ea7a22f9462ed4e9c8d4056b61d302ca5c66487f75fa5812a7135870b8741b89945d1acfeb5ea3cb685c5b6772d1cc5c2bdd203e0e9d3b6cd8d6b49e9b5e8a336602492446e47f08f809aa9df63e2bbad49f7333a7dabefc13c5f6e3edbdb2215c2ce1ee2a3bf62cf9a6b37e34c76d608f887fc6a17352871b97c7181c51bce243034c0c14a0a75d85d817037f9f4c103eb75ced5681e5bbf704237b46c7e1c524935328584c90cdc8588be1ee1de625cb8817f58459c6aa7d270adf3975ced4aaa501739f76cd962a05bc161db846a7defadb75755fde103b968828c68213c898fcc331ef92ef6478fdde8e53afd7a3fd418d6b834cde0a6ca5bfcb43f8cfc8d9ece42e4c700996712b282b0b98a0c7b81806140496e89cb94cf0c31c976dfbc3044699b3b38c80f54ffda069b37f24f4c5abaf2b107fda87510b98d524a53e59d292533932e4fb209d34e6f8e130b1a1d223a56dfcf18a39fc2ceab9830c895631380c3ba355b419135884637ee0bb68991c68c2639d749bd28589ca7b7291ee69597b107347efa32c2cd3ada62b8c2db85a112aeef1c2c73d3bc71ade58786fddf703a409db9233486ab01b42f03447df651590ee161942deba85cdf648a3fe203046621bf3c8ae6ca2ba304c4a28574b188d54b7ceb6dee8bfa36ca3ced17e10160658b4ba969fb46438d5f58e509feaccd4285026e9244b8fdce5e455903c45fafd799662076218115d03131995abcf1dd69e7f08b933cf319e31b66d1a1aa1e488808e9cc701d709c76e4fce171e72981e2c645f016a8400d706d44b589b14d8aaf6649976f8bed3956bc64a83d71b53eabe3bc5abf3281a6ad8928f8aa149cf3d430a78a0ffc02f3c05b416def6270b9a6b33dd513f3900429681151e5c944667c242285d3fd8dfd3cc976cd8806d78a13d90b4f4fa1a622a4bc5451ec67de50e66be8c4f86a5dea5f1b814e8bc9c31909a190a1fa46d7d5bd6747925e9d8bc1cb975038c7b5e13093c9bd48963f52bc9c2bb4b5c2b3a9675935e6ef7b69d70ae21891883fe4ebb174ee1636c734efb9ea1b665b68ea703b54e27035aa05dce85239625e71e29bb8c11a5bd5ddcdf1124ac303f597db8e6ea8acebbd3e2add59c74dd8969ac3f980b5cde2584fe31877f76de903107b561393300e8e28375ecf7dd14b6cf9d8dc12b84108dcfb05d1a6ba8d7ec771c8fc21d66efb8ab1c159e269a3358d9ba8bb6337e76d8e4b88b3da7715a11478a203e53e95ef2a096e31c909a0b4edb5d4ab2b422d9ac5296f4bf466437fe6b1daae7618ca47e8516773a6dfe65b8b97a8e6e52d783911100e3dcbead357bd09979f18cf50c16967ff2a57d9f148be339b96673e9427d28d88fe27a0c6c3e83bfba7cc9fe7a26e64a56e65b7b462bfdb93d108419d6155f81f1beba42e2862c903ddcea527b3493ae96ad365453840413711d7c1d5735bc7a07fc2ddc5391c86977058eb7ae5d2f3f9e8bedc6bab0317115af7110fc40be679505dd0466e4421125880ab2b8701de35844df9bde74b9b8265ddd5b90da42b11ae148eb3a7a10acc4f38020530e08d0908b7b14b216bd2ac286df06aeb6bf70e0601a3f9bdc348ecd075e2e20752052c2534d78321aa4d46859542c6c6f69ff340ce950617aa733872fd1a3ed67094c8bce7294527ac71c2478931f701c063c45196f7ea54e6b07f83214d159b5a7aba163b993cb6e87fd1d673da06ffe87f2e364ecc3d361f278f92e00e4024d24cda5c89198b42cbcd22682fb4212859762b425c00942b49f6fce54484142815d8b4b64cf5076c0f8f254834ca774c9e4f4fdb2f2cbafaa9934d22b7d2434fcda66838ab4acc529451cea3730d25985d2b7d14dbded00e057a1a398a25494c06febfde9f849629a7273234facd6a3cad804325734c4b45e5cb161da484d384ed26cabee199e8818867372265d1bf7af9a063679a6a309038d3017a73b2bcc892752f95e708290851d5a3f1321758aab67d4051bba8ae5d0e006adb070000528c9e5ab40784f594ef89c8e5f4f48a10e93379fe36e57e2225b45bc87fe259b466bbc74319c3151ea7f4a0c3c8215addecbaa524d0e784c73b8a5645c4af86735bea49c74481965287fb82e70c687e4ff063e6da400b05555776118147b96bb14447aba2ce52f23c42858c4502d0cd6bacfd63a449d1b8c5adcbc9c542758afa79bafa55da9dfd5ab1106d8c8eb0f3ffc86d61a10bff86a7b025ab417619100e5f5e451077b295a0ecaca36519663c23a6426c09ef664a9c6127d002a77d9efb05054a9bd67312c7db48c9684d5249a523676f4830764c44c2baec4357b69a049a6dcc6afdb9a470546963ea85c0c99e274d4dca382a93e6d9c85bf29070d9899a93cdacd626a0c2de7471f680d5d1ea9594ee831b9601e2d6c14b58340e3e2b9c3430263debd0e7a26d3db7e151485efb48d49601967351b70cf1302e4fe64e0132618b32d979155c7166a72f115afaed2edca94ec2506eb0f5f0e8219cac6cd0d992a1d41cb41940b1f08358293ef86ec9ef1474da33b02ecd7f091a319bcbd5927767873674653baa17b28308ade9be9dc166411c54ed7eeb36c2abf8818dd33f110eb8c65a37ab294d2b93a66aae5f5c06c5629948a7850abe2b0a313f8eaf8666bcbb962f3d7da811c5694af512b1eb6775b1c2529f4c2dd7bfbdb1cb71c6216793a6df36894b93c63fae54be8837416367f6a59580bea9b8c212022102058506dfa6313151f3fd819d08347fb92a15652bcd536a8fe7312e495fb40b70b884ffaf2223d0442dc740ee153519a49c2f95e7cf9f221836972073444af7ea3a79c98620c7c07a90721a24030a14339fc403563737e885eb7b6381669906488413ba08dedb75093046db1de173a72263f640b77b3274bbef2e208f973216002e5d95107ee9dd41f376c1836dd93d0a39d46720103ea89b832f1aa8af2d72707eef7e8b1df69dbab6119f01a7c3cc284dd5cff67c1d0863de5c62b74f54ddc2e82ff44e37ad8fb4f82c0403a73bc5fbe3737e6147e839d4c1392f78e4a0e2c38767aecb50ffaa3cf4070fc4b25ba9920c23f4a41f840f880f4e17e182ca748d31bd14b84660a0288ec0aa579f6250f757af1b432c50de09f2c658eeb8dbba58ac525a75621ef45398084100c1324b5768bce7b9dd99d54383dd708533414b770d4bf44d3fab08b7791f6bb819e4b64381433696910d2f31768b2a62694940f49034e31b02bc7bb826681db99fd2a0717117ee34904e75b7c4f7f7a4a4dd6d012b59188702063b6895db428d837b6c65af01c228bf09d145a3f36d0bc5200e32ac5afb6fce8106ab462f6ca6a8d210a5dd044fbd0b37b11895354fbbbaa1b5aea52c26a41a0be498f51b531d4ef42518028673acfc647be65285f6ff6f93c5e787fea7cc7def7ea31be4d1f2f3a1be7b957a6b193b31936e72ddc1293082d97eb4c99cd88a09f867e478021f1492e1aecadfa1fe9c1d21db186b14100b47df755bc171a096306e089546b6d08f05ee307f4e1ed872da34136a346f961e208eb99951515c45302c80f2217f5c96c7533512423f8d54ae1864950e4a69428a271103b1afc0088646b915eb8e5389d203bbce25ea1206c05b2974d6bdc8a622de28c65667d4eb0e99c4e845c5b509264cf8cc9a61bee5f38bb071a0e242a73718369bcf46e289918b85fa74aa83adf71a847da56408648f66aca1aee994e109e234f70d4660a28f8c36d233f7a8ee4aed00343e9360b5a39d5f2c020c1c1b86a829def47509acbc7bf16c82b1ea9f537833313df93854b160cf1ca22a652cc053318c962ddfdefd3344d77dcf7e07793ecaba979add217e798426d07cc017d9b8f434cdc451b8c9c0a0cdd7bb99b6b7b048e0e0606edebd4b93fd0029afbc37ffc9487478142f01a3bdf9520a9b4c9b43396d0c56fa5c061bb1a5b9faaf3532da0d3fd3a5d529296f93ce986955f39b95c10c637a92c7c64f6d86b6c46104492f90b4e7af776395cc4f394b20365041cdad05bb953b4a2f4fe8a8af000d2a238070df7be46b8d7d38b94d9a1789c04c1ebdf1e23e9ed51f67f43565b7c4814a3ddbdc0adb4e40176fd0ad7b6bc013c9694c0b13a349cc78c27b68897ad54db2917a2c153748ba9255373d94c136af5e525ec3ec22d74b986d14d4cc64b240373ddf18c0da7fe0e04e8b0d904fcf9c9da626745a08759da9b0c42cc2e3f6a4e61a943fe94a17ce7d4649de442f77042db304de53129905b80f2183060d5bb9180dd2fa0e7ca8ca92e1f1d9f52cb12eddda7b73df64d0df5a800391921bd8132612ae3e9972319fd52f01892b1d0b05338dbfa53d889f519aaf7e80028161bfe3125c688205f21cbc1863a63e0109d6356c35d25ca3502b3563c71dabab74cef68053431e24f4fd9e82b5d9775a1fb8feee3a301db5d007c7bb5a68a81f4870c3f02730f302320f5ed49c45592a6ec7e775f12c4b8f6ee23a01c23afc724f190fac0e46e25f6e71dd347c990267075361510daabae7824cfb870f5d83346db459c925f8510ed91f07dc78ce5740586a57d8f4547ddb0359c8999e1e11806081f3e08da14094bffef7d6189d3203c0479e11cee9d32f5ec5c1e9254dd453e9fd0482b928eee64010b6415263e981b8c82da84203cd0ebb4b04efb02cc8a8118235234db4e9972e0884874e608deeab52b745340f90b02e01d2e8c44bf95075645b57b9417d962970e27932fd38ebe6c697bf87ae5a45a204746093735055594a471cc6f92234af098f1776e2a1be522de6bee3ffc40a345a2376475387afec1dad44e2dcbd0a47940f537bc0c429c354aa19cac88dd686f008bdbdb47109d32080fd8a80a28b9e4dab6948cc6141be65f16aa184d3491c916c85bab721f989c9b48c7829f7cdb7d4b5f19520913fa5244e6cb7837e171b4ff2ea807d054704e111b8c00d69bbde994b53b95bffc23dfc9a9060b04e8c56a52358db97034353764c9567fae75afbc48d778408bcfcd2235ae4a7299978a8eb8ff6cb2d7a2130e7feaa2417a6261b809eaf037fb446fc09170957b329c7f8e6c28222a8633b72877d6ecc8939e50e139f5544448480d592a7a5c934137b11df20716f514156bec9a835234e5dc52f1a1c1155ea9254ec2a513cea8e57ca87ddc582eee6c6211362681aa0bae468571f066a5fdf1baa6e0388ab683e3b5475d76e438118eea99304186e501046bfa2279c7f19c4267aee3c9873c947051b22705d517845bffe8214c764f0fd7f6f005eca58cd6811c6c5abe51a235ad50df1a7b0133c709e7a79b41ec3690df24ac2b29993d9d138eb25e294966bb6a7332a49ec2001629c6ed3055ba02d81b3c601084648b7c6866c3311d9ab1931ef4595c71887c2d3dd0472bd824321f1c4338a736ca0def78e3f4751e4eab695dbfcc82411cbc2520c3e788eec06226ad64da1afa304219ea23b845f8f884f745eab8b09f64db9bcd2302c0bbefc6a63d4aeaba7d6bc46819b921dc5d87ee8e59f69b5836e58acdcef527754104126ac844ad860f5ff9dd3533021c84aa46f7b2828ce6d66ed37e229c6cfad5c8a575399e39bc7a4d165d08dfab25ac40cd6b92ab61e1e83fa3d62ce0afbb7c1f0f608dda906db8fad245b1b096b30c9737a28596a380ee6345bd0a9602985d64e284221b2d3c0d5fc169e89ce24e6a5643b66da737e4ad5e44fea27aabe0480d1262618a3a0ceac43959bfc83c29831be2fe682f7df8f756608ac2a2d22c508c717431f30f5a487e8078150d63e675bd9e09f71f4f8fe37aa2e2942040ea18990c835c41ced36e964a54eb8b8bb0148b14278ae93904cdd9852a6a05029ea26745af82b364286f75693fe0309ace5fa45d2933433682d1b3a1033bad566e82fcf76fdc6186305352a07bef9802bd9a9525c5cc53406cc320b7fd0080b8f7e889e691b77aa04400086fc87b06e236d9eb63cb1417d0b755582913b1ef7569a5666f7cfecc7531dd94aca9c5f3fd38bc57afa4173a6499768609168d8cec60e878da5cf69fd685edad937feaaa29276d6c79d00c1f185b6758e7d69b477039ebc91bd7253d25ba21b0bdab7dc7fa505f26278b5efbc4ab0f668e1194a01b578427d8edaafb8dc62be9b8b0d69589b48e34bad66649a47500289c745854e6222689704c8b7595029d6005f7895b3a3f1edfb8154e87d1fd116345c6f58363317c3398044cb2889b482692611d869731a90120cbe6833161d4bfd56570b880b97902b9bb2605161fdb23cb673af253209a4c7c465f4651ca2feec459330aa66766c587a5fe2e3f15795a248707634de7d0ee64d39896ba2691f7a496ae1feeefda4766c188bdacc36d0ce589a99d343920e3680b0fb26c653b7c92a74b7e1a7edbb7604c47a4d2608a8163693fb0691511effa762086092ad0effe6744e6c11607028b7113369d9110af14187cc4f36d0d83a2a1b87b567cf2284b6229dd2366daebc9a257f53e67b0ae3e1cc68c08af64ed7cc107c3b962cc74b0bc9a6d6ec31d7589fde298842360dde4cb3a489da290087cc08d8160205218be349a79f3d120c5e52657e5df6365a2d512a32ceef8d9148bc96f01d0c92f3aed1933d6c7667a2c16ee2bd00603dff0a79af2dc60c7bbb6f68f49455841d60d234319f9fc02534976acd360b45926cdc4718354013ef02da9dbda61be1eae185479eb72bc5d5c3707e6fa550772eb52a9e8590d567077db9c5b6504fad11943b02a8b53d264eace7f7fb46e8261871fa4cf196241502c5d9258736ba2b2c8c3849bdb042b2123d6e9d9625e46ef71f2a088619a5a429e17323d77cd26835b3fd5487d5764cf0daf39c838d10ff8e578e0a016856e3164740096da9df360ed70178f1172caaafabb8c0bd720f31464277009791bb2a5d0c9de04535ab72374e88780a420034056072db8eaf935677e012b0a8cd507a2d46c7e0ea8c9a2225f27492c2e55430a11f13eed199b2f344d23ab9c8794762e41a70c4724fb251812964bbb81255ed86994c2e4d24074273778dc250a0fc73de19d6ff25078393589a9c535d46492369c8f427921da8571b8070530e0597c5608c1f10d45a85a446596be389683eedbe6488ea5f24ad1795bb202f0eae17c1e295711121cf6da68f163d8015c693d80f4f2dce4e5fc4a7efa4d28bc30150c1ee3d4f653e54bd810b753e9d4e01bad2754a4c895afe47392ba3b6938f22164334769a2931aaf7c31506772e01ad5ccda5ab9ffc4cf2103f420188d59454c078244d32a0f21c9a163e3591381962359286f920a9fc4b454d00bfb400a7759046537cac14d8dd5b40205659a64d2ddd4b53dfef4354b8397f55bf19e6cdb8a1670f3fb361b14a3e28743adfb3d08936eebf59b1771c17170c384d7481c82bad7367045c7889e26b29226e756bea39dae3bd928082deb47f611ae654793ba2a05db69fbc76cb8657716232dbc25290fda5347df1e121584dc5ee105199bf3733563b50a12988e3bb273cae8a7c6f00a0559c73df35cae2ae932c406759d5c96b338493b823db0501209626baa68417fabda2193bfde3d8cd41ea495f86d9c50703c804260a408d969231fb131db79696ad3a315c1b5435757831c5b2f8cbb52fc58cb09126bd987747bd3bfcddab40e1e76b0bd5664a398b97512b7b4e0c50ae1dc23300aba4c9512bbee789524705c3399005ab2df51a10da708867ac3ae89054bb49f86fe4889314faa7b267880b03227fe3d584c1d1f35ac71e6ad2dc0a08323b7456d8a87f57558490ba9133e06a43ff860e20473c0db58a0aa78137e7fabbd4b1fff10a83db2842a770a2b78c1d07d437d64a4bc9dd1324e3d29b41b6601580a1f0e6b00a1ddb455cc81708f31f16f449bda2fc9aa3c31d86c669eb024c493da0f50dfe79b27aa97dec9bc58d5c530e90a21c6b41744b5decded67c9ff9723d17de28f1bfc806508f664c906646d4f863eb355145dc279f37ba9fc11c3a1a4e61c6dc6b576cd4c0585f21cb6d9390f171faff472f17193d09763cf9ccd7972c50b2280ba3606b39bddba8b13f36e36d638eb8e1c6e47a0ba2bcc5252c8c9be07dfa9945e0d7c57317c67b74a27df1faa3dea86fdf9a2209671d430cb086e90942d68b558dd09e1da72748e29ec8f3bbb73aad62658c78b45017a0f16e7c898d4348efa21d487003b1a70f765c430e19aaaa8553b494f7ccf1f00030c3ac841d011905c276388ba8ec0778639d81a8ed549d9b64bf8cb6f2be9047d3d8b7db99a4f0063003e3cb2de1c1901af7586f5dda9b4f583df42c09d628faf32dde15b99e32abc7e3462bb8b7b47b01f642a408c923f4f8642b0544597a4fc257d935dec545db16a93c5ff4965a9b22608ed6dac1bf0b81f70f4a5b61de645c796a1dda6c4d15b32ff0dd795e6087e75de9e74f93aea9e36b3417ee532580c4bc995c467a56d0ca8baa0c500a3738f2620c57f0582a827fa4ee1b4e56d2dd73cfdc19aed6c8df75d07e8440ff3a4cd6c4ee25c55755a86f878bcd7b3b893be29161745bc56239a286295630537a578007753337e95f5d8a988d9de16454b57b34c0601b8353c441be5a2d002e428eb40e8ea1638f47306a2b3872ec05621ebe90f6d39e726b52321ad587f60457517dab121e2180d6c2a0cee297f1bc156bd32eda54fc7a4fc919351bceef5d50caa1cf8428471850a6dea79e1922ebe70a507e20cec91c3585d3f0634a10c59c2330a8c45ae07ce6d233e90bdea6dc2e2a0a0a60f15a3c0bb2508718c2696efc80eaa3c96a5e039c0243bd593deb5a294dffe263f9aba18c7b4b99609650b1877232df3a967219e58abca756be563eea4a8574162181b119d040cd8985d4953c51548ff82cd20d6ac8d19f2ec27a7c2c0feb858e781d35e1e594e7d60631a0bca22fbd84f9dbfa8dce828c88d24a18ae0640d8492899c28c56043c595ec0cefd59206e4f91e7351268de431b08d1cfe5b913c76af784cebd77991c7d964ccd6889e815e56b20ee908ea2020dc1fcdcc7a58309cbc215749be9a3b2706486521a783a10f9afe4b2325eff027b02b42df658bf7fbb8b1d41778dae9990319689739467f5c5ed22d4ce87b74deb76d70b2fbadbf848b1a34928af0d7400116ce77e2458a30ff3bdb32897752b2472b9f256af956d40d79dea6ca38723bb937c4299989e994d7c8f014ed6e3f634cb17240e5a89161ea06d867c483398dee42174e0f1079591bac3dddc6d7cbbda64c729327a3843b19d6d1816de88034a5ec68b65cacfbb99a4da7b4178fdc27b1302fac1457c455aa2ce285b000843d186d5d574d664d8179a4d358f10a8b11f1b38b8d1d8710c38dabc9286c29024a995d8f517de7f58f704983df70ab0a22bcfc759d2bcdb2857ef793f01630a25da0bd388f9de5fe1f1bf2732117f3c3ae292c8701f3d0664a1fffabbb9365b3a7c4690a7159bea81806c9468d5331e7725522076ad22ba41cbfc3c9b7d24409101c74e7e4c293e74adbc0a8159da585d8ed3b4c7ef538ff768f27a5a020e0d633dd05c3efb2db40fb7101a8187dd3443e068f1480e4eeecf1015ab1cd417556e9f72c34b967e0c250a70fc886980f9029cf68b942236bf2976dda3cec52b659cc4305163f52c6f15c281736b33be1a23ef27a01343a4b7c7989f09d3dbc94b19e2467eda34dd8e967744c5bcdda7e555311a261248926b06739413e9d4b8332a9c8995b37c6bda9159dcd4418aa093b49fc7ba45d0e05b7b27a79e9202248499be67895f7489f40ee4d69d04e6752e38d2556ecfdf8481c850467c3fe9b38c13809203526a00f8719470589937b46f04df6b055a55f272d4d69bc8a1f397b8985eb27051b4802fc38f38fa9779fc3c0d0772ba8d08f1bf7c4990e4dcbefdb531137ea4196b57a96e6622ecec242152464724069ccb3cda5bc786406504f0ffbeb854ca6ab9cfe0d1be502dc8f68db4cb25b3f1d3cf834034b1bb3c2875c5168e601acc3467cc38830a1255b5ba24b0878f1b591392e078980c3b4124b2d96744ca8a5bea3cfcc3c2f6705d1a99b5691d8d43b7e3bdb32ddfd1e47aebba1e59c74b35d8d35aab9e086f26fe317a8029c7af957ded1b5997032742293ff065679396c8efaaf8de8da23daef26fdd3f4e1ce21e484776a06d2ef42e210b74b2ce63c9c16a814216e5e8f3bbb19f0d110ad74021c51c03f2f5943c4545e25a6d1b1788fc042db4186f472eddddc4f5000a3ddad4746eb38f776974c4f948412eb5590f13be6970c4fbc18d390916954446b9f8b9c561df1c1c767d2a028aa539f7e2d9dc162fbd63c0e6793cfc3f4f9f1ff971ee24b15b2696596eb568554a8639ccb85d68290fb5865cae7b0393f4759abf96b3222130be058e3b332d7c2f5b8e41710a73ae43d755e66ed6aaeae40ecfaff9310f9b18bcb964e5250e1a4cf789f31ff43922866cd60d521e8ed8d8f9edb2aefd2639f73893d0aaf053ee4f5de26d0feafb1fed204c8c202bb1289ff5cb621b9bc20fbc83d4b33747993996bc417495a6d7cba85b061b632defce24f8419fa2ee91063d9a1b25ca079c8e15f8cddae244ce9aeceac15e391449ba30df5f1c98f5228478b3429367e82bb7cb399160d1ba85ecdf14cf85a49641db383884c7552036eae33f8ee8575cb2b276e52961d4fc99e549ea2380eba1512db71042fe86d97409da178fbeffc22359a128d4c4ba80234bf5d65e74b06a5a5e0609d25b01a13cbb4bd4c4bf385ee4f5c7e4fd1373aff4f29c4f36fd29fc469e4e4f89fbacc1972b2021f28d1059e3d01dd6b7591356c0dd837dd2271390022e49cfce0361b17532eb0c35ffa5fe2cf6a9721c807d373c062a0c92c438d44ec68f580a041c4876b2a5bb09d38191eb2a4f8f0bc199c47253ceb1b24312d0727a5e04b3fff85ff01abc821f7b86342a145382608e4c996c7d47cfff5404e284f826dfb59c2ce06645eb6ff0f3e2f8f80962b602be4ce88da6342a7493b9106479f319a042859eacc27a3b6a988e3469887dd0c480f6f2c7f21017402ed1027d42f4c563ee022d9a2e9d6b884880ace562d78165d8c9fedbeaafdac08d864800903ca198a89664b4d9486690b5ac85a8acb17b82f91f616e3d45d0d1236f45f2f97715292adc8895b3e6aa82e7add0b3d1ed9960f851d69dbd5e71ee050b5a5f451861985f903fcd73d7b6df1ae88b010e86d7f017b66d4f156ad69bbf606292d1332ffaf2456435968f60ee85a877e735de69c81a16d82f257f30fd804c6b7caa7d7809a2e7c6984763de12eb6341b6922d4c67e9212c1d91c39da2848a5e49a87887f865876d8bf4ed4049ce38153fb205f52489bf253ff264812c9772d4af307cc59d54824334b813c6525202ab1882077e0e833525700b3f776ce21e2eff47ab5eb570c77d46308f4528fed2f3f84423f7d559030f3cc733db1ea89c72127b2c5fe43050c2b924656274780dc55ac4199f45393a5849153ab73608c3e53bd70d17fb708de3873cd90dfa55580436f25d1bec66063856a72199750a1fce7b11fb918293bfcbb5608fafc85212a99a6aac10b2f0900670bd98929cfad2c68b73c6e3fb0102f9257ec43faf8a226bec7f5f9a0b0b71ca7189bc9a2fe3efc9fcf843e251a3bc59c7ae590117871289b1990875c08d52d27d7545265db3d0125102917c82ae7fd86e3cbee1980fc22e7c0e8538c93cecdd782103683ddbde86d4df9d79f163c1b922609ef1d6485058c850406a76512907190bd74e7b3cab26327fe603ed493281059ac2da935009678c7e855288fdbaae9afbff0547d3ec9c7b1ca76b40ccbd5724f3d2c4a3bc135e0651bd41b5cc2a6a8ce2792fdb5bbe126dcc9bab206a6a09a339f19b8bb2c716dafd80119474ca6e58718d48a3936fdebfd56a0156debfc40aea216a02f8a7c5afe5091636121d3b0bf8dd508d838163e37ef9ac36b1b6e0c063eec30cd4d7fe862cdee4db3ebc57186353278c644f9a1135185accb7bd7f8a5a678435679c75eccd88a5e77b805eea1ab0e57866853d86baf7f527966720643b81b8bccda62200622c570744c74caa36f8a28f9f099ff3bf087eaf8d7ba9a4611a82b39b7f3b9a4a2459d2c99a96baaa364f2035da94e7796127cb6b736f0dcf853da4d0fa85686743175909ec88452ec6c70c4b6ff802379c4ca5921651a93baecb0dd1891ceec681c6cd7e5e83fb3c6580e811313bca4e0a02052266ce25fcb1f772223fe399865f3e7a03cd7a8646467625adf3d7d846f96c5d4ed99c630e6464ff3cba493205f9d357c72a11e90b37df26dbd58f3113fc16464f8127b5d43bae096346ae28c21df8e469410a5e01d04031dd8a8fe5a94cb38c24d68cc34cadac3b2ce3e2be4e9323fca835d35bf6c001b1ff4f3b666382feada3552a54152fa882572e5b1b1824df396934059091d9e33751eaf1e376141b3a78074674e1a5c38937388f85f685399789d5f04f3fc6ce630d3b4c8f6135a72277b02d4e00150bd9332fa306ba33df53a53994a9d46c6539db23647e7ece03f7c51f9c6f7e98e6e4a2d89cea77c71ff129098e198252085ff1fde2a055c3780bb189771ce7a22af81db7fac814ba811336a1f251a2162debcf9771a9a54e9384267b2b6e3e7a1943be3bf2d6a4fe15ca9f125ffd3a1da92e583105828ef641f5b808d2be4f5b4c86779750992c4b068b1cf8913ac913a523013a5708040401b694b542a5e8a885e529730795e139aed43a00599dc8c5369719af561062b440e1841e495e14c128e7ee6d023f17fa22aa509de97195496a17c47ef65326bbb09be3069869777e941d2927667c46885868774f3eff39aa8a7c0120396d0e9859e80e45f746ccf3e2ac8632b53ff744033a939e14adbd819e90ae6f4f2a3f7e15f13faba5658937a8396040f1b454f3a4859847bf7d01cb1c75917f241a32ccbb7ed79ee7865e10697920ca404a6c8fd75a7fa3f0444a0453c3559564af051989129a6d837028516b0659e5b1effbb31e9167d804f45dad300b618ad3c01dec71b2e3c0f550687871298b4a0a4c8ce08ddec3dc774f697cf54d396a8355faf26e800073dc58b365aab05aaa1821e90ee88a4f42c773555500e67113d7380ddce2e5245c6d6dc158f68ed3ef666323092a108b104a792cba46ce37676f1a75bfdc5f4b309e7c9847f8c1fdf0ac695090d7efef65198794e5e814d748da22a88330ea7c292ea752120b5a9fd45bdf3a864b23618598f118c43fa861b36eca3fa01ad373f5d2ab8f3fdadf1266038ca151abd007a5db7a804a3fccbd181a49751c2df8db27fdf3eeaa90778f9b2471e0997cc056d5be48946e316655e56185433594d42201cf46a8bc5dbe8cd04d1b8d41be218052ae9dc1b93a943fb3fc3b1f8adcc2bf4984ec74ac4b97ef6f378fd37937e5fbf3febb1b5512e3cdc60680b0308084632546ed8ceae05b49e810c6ff8a79ee72b7a5be067f5b09d64bb7002e21bceeaf396815c475c1ec4bb0063852cdb3271534af424fefdc59df467b0e37a1bf2518551af980e98d1896d07623f66ff1ebe55f6e68e610ce7127e1ad38694dc240269774305e7d8bd576a3fe6ec487ae748bd7563c414ad5485227735083f81b510bd0fe396cbca26c6bb363d315e2d1f9ccde97ce1ab689b709dbaf331d294fda1c2ab567ce698fe4a90464ae0aef44199925124b719508b666beebf31b61e47880bcb162c02bd9b62c93775392f9a32750e38b5cb59dd4180d3537cd9abe002b554967719dc5d814188f65a314932cc06728e40961c7a817c77719830d5d8d6d1e5bf639f00ce2af5d1583d7730df91f35d0265dae59532773b92d40948bbd5d1eb36a30a86fbf470d7d022a4553a9050c39439633397ab21a7299a6cec095f52d49bfabbbd4fb50d06035d2c1e91910f7d754b3696b127e2056cfba779faefe84786f1b8257f101f9745350eb7df786fb16498bd41fbe2826b36c8113c2f964f32a6dceae7fc8cb593d5c0513db866dc0839a009f4b05d00ccfa37bf3ef5295fe8ede117c8f48b8abe95e1fc48297104bdf290da807ca408109a6981cfd891944a4a5d108689ba7f608be0b4f2c24ea3762f01b1dd4db21a78e3b20dede6d206502a2d4cb3a1155d0679153445040a57b39af2a8130f79e1e82d863663c7b4fc2813a0108f332aaa8b4e491acbb3211c7324e3748ef57cff933117b817b8b5d948aa51c8c396a8b7c28bd8e6bceea23d2b3392246cdb4e243bdcc94dabb4e3efb701df0283fe078264baf08b2a8544bb780a8fd65e3c7a724c66ee8624f259f33e28eb845b1ed517891dc7edf727ef4bc87328bbbcafe09200f1f32be05b61e69996ddb7cd3c3c06808905f4ed5609fc06ba05493794f98ca81d9d86dd3d624c742e7ac9d53873effe1d710e9fe3c3ea3ceacd98bc87d42a838565690e62554817f94622dd00ba2055acfd8d2e501a94a97dc6a6d20b3a8e52adf08b3f6b840da45f24a38e04e47502b69e6bd48c334f857fcd7192d4e24302b8de306f49a1fb1ed31022403dba64be0289bea9ffd414b3e250b8a58d914c3b5d59a05d5237a60f615b8e2215059164eb33609144aece08f8025967b8ec5f798476fc6cebbe86cc15ba7fff19dbbef1e8a8cf86ed4b1d54a66d01479929913ea2632cc9ea329767ae659a735da70a52f1572d6553911804747e4ee3b7943f9f3adc1eaf57e83d2b34ead8ec76635d33468da86042faa70c13c49ad116312912b6047116fd48285b9e24446100fd000d9dd7606d7f92abe0d04c515db4d3280d2a8916b5877101bbccaa7e59c8a7766649bcc716131a211ab0a84149f7d43eb28a212a8a3bd934fcd1681e4d4476c23a17c3aeb336d31aa1b39234dfd7ecbf554bb1e7f8bcbc7797cc90b19d1d8f6af69ca01fc766d9e1d34811d38ac39bc4fb3ea45b95eb9c0d88feb8a9494b3be2c68c62f72bae33d5617211306f0748dd89aeb89df53b741057952aab9bf6ce23114967c23084b8a2127779b089778ba957af72f6d89eeaf3b948b70e1d75cbb6b89cfa1c72f7ab298b88b3bcbc1369dc8008124c96840c379bfdc7fde35166ae9131e5ae50380661c541ed84d7b21e09f89cec7212e5a812c164fd9ff40005cf5e405c5bac4f59a2c0ad7e12e53a497eccfd32f2c219ce7993b06eb3de5b1e26dd686364b0e0ed2d63056b21cde12d97baa1affb541fb30c881e6a7ff6db3e2560c8fd3fa7817a523381e1bc1d4842532ff93d56c1128832616bebe27fdf76b555872ce1d2051a9909ae9f2a1a7bd2182728fe40231900d1ca94587e167e4551748132c9161f59438d8311ece10d67c4cc94850ee3a2041277b7a476e89807fd9c6023c8fe1da3588efdc110e10b78a01032b428c02b5517a681f3197b4c32bffa767bf99bc5c7934acb90c1ddbd03c3648e47420f3448add32ffe5f713dca8e9951ee05cb304c821065f5e1b1ce1b43538c756ce200af084b8dc24486c651afa26e3a038ad7d06c44ac3af96cbbd28368150d7e1ddc6bfae33a077cb102ca031f02e387a646d3f04c4b1c881aa70e2fb853f603e27787a36f63033124ea10bbc309461a1ab85ca60c16f3a0abc2202ba4d7761bb41c219c9cf72cb32bc0737487a5a9490b3db86722b4a59d4e73c430196b14643eeeae3a8e4c1bdbdde18af6ef5643f3a9c7c6595f640a8bc6f12ea9ff4417a9d26737224b8771a1b1300bc96ae1e46dfe241cac07a8a8ad6390ae80ad8695fe5f3e0d66277cd656832294ac3089dc31469ec70014e040c57460b3a22f9db922a8505927bfdd56d377bf9c25e0bee251615e57a8230d67b3a0ba0ea94de9da82a4bda411a27f92b88d2fd7cc6b55e049b962b355b1390cb93be792d16b6842a494b63522cc8dab4f7a87772266d4bfe119b2d76a0eccb140e2a180bd0848cc56369ea75766621c8ffa8a43a63c0c7210fab4da237c47bfa35aaa5d154ee3e384b241f401421f7fde05993c42693d06d6b0c30d7c66742e29a29b3575ec0c1d0cdafc83b5756e935d83a5391f9beb237253d503fdd4c35e67fad9e85860b4d3c0adacaf5f3b6c2cdc7f99eaeb9559998a1c89162707bc1d6e8cc45bb1faf83043b45f02b3dc22e1312d8d7509dce0ddfe315e8073065a39ddca867d0518e29bd9ed0f422234bbc3b91ae0929101b6aa8ce8aa298664537bbdbd4c9388a9b3176ba91d6228857b21386a816a43b1ced06c7cd191a1e7a45dc583bdcbb3f81cedf765728f8d85be285a7384629fa1999d40d655ade663ff9394d37f0cc2ad8b962a989b3b76e6c21ec6f45ca64c67bf55f980e1a1b1f7b37b21a8c5777ac99c1dab5ad3262c00f047a4697ebb3744e11bf9c5023d780553a38507efcac2411057865dfe505ce865a2ad8245cb9befa5138853a5d7546641a8b75cf55964633af1c23b68c4361d41cedfd5b2a19ef8aa851672a63cbd485b842b1f50351f26f5a7d3e5ba130a2efa7c3a707a92316145f9e0c1acfba9c810894986f500ccb686c0d6b45b2cb308cf01da279abf0517410fd734ff8d6c98e75a95ce26cb07098319ceed343c273d4e69c4eda84a833c9d799cbf8b30747f0fe8b98c4e5f72cc173ca377ea0e8841d7f62587c0183ee170d5517af060d87bdbc8b61db4b414b291ddcc03c80c37f64ff8ef982f5adb884cb1de10222c1f057a8024865db46ecef30e4afa97faf1daec862aa23ea48c6f84a241893fda76d45ac9becb55c5db6ace32535c893a4e61e4bb96b3ef52f24b2060dd35e48905a8c7b9308d8cca766273bda88e7b7e967d8c3c9a66c36ae11a3f5504a37fbf96f137bd37ac7433aa0e0a065a00192483349b222c5e5a106f30f15d9bed6bfe2534d545f510f99120b7e13c3625516207e844c8f32ed0c0713c4521798cd478ce2209cbab907c8a77a7e299cbd5ca581fa9c24e3c9a49feba74fb6a5af8bbf908833b667e62576aebe1d066267a58b6cc11e870da508f8ed7745b54211b8942d755618dc42944398284632bd2f2e6a38d80466b7328032d6a3ff929f8f44cb99d59d7a587098aedbcd6d6d6beebdff5187a68a4833f5bb2dca739ea4a7fa93a8e9986949389bc2634a29808f562a64581ae5df181286d135127307819fff76c51e7bfb36aac466157215f0a2e8f8ba6189151a5c638ade671afc962cbfb12cb8c95aa43495baf4714c6275f7aefc4e4e3d278aab34f49f10c5498fddd2ecafa08c1cb787f9765652cc82c31bb8d06abda126365bc8d9e6e1567c5276882512511f15198540e063a4e7a033f46c691ab8986c05000c3bbac362d9bea30b375c80f25cf6ac5b2d691502b4b363d6e368cd230e7bdcf27ef5522b7662f96ae15bf49b9293f0f1ac47215f479089447f2981ba45e0e31dfbcd0174161fb9850c018bedbf92e0372c9077980a77651ba9dd8baf184d8ca90d0786726001e43d68c8ec4298bbe0ae520a61ca71c89791e6ec287f6b38badb0105c735278117bfbc6082b9d7df9beb1e375eebfdbcff9a0d6240789a7d88f409f5a5ba011e73ce4c8c3f9853c69b5f544386822f4a9a0e24a4860da8c8af1c4295907a58855c891531d92123b23dae8eb78f4973bfddbf68fc4e45bbd6fd7e9419fb9a3cf2e08d86572cb830af425f3e2b6261796225a67dd322647a75c3a33fe4c5bdec6df8fc7fa7a6143f9d0ee77de63018f8902ff067d63684ee18fd17cc92da6407edc64c712a1eed0bac83a4f242981ed591080f58828685901bb39995d50aaf48140e87489bf2e48624413deee70d7f390d088f1a16537b57c50b1c762e9c03bbfbc290670d8c31591cc3aaddb436929d527c26dab2a422849f60f975abc9e0fbdae26f50ed4171ecdee91da2946d8f470922eb79db9a7f76fb8d400a2a5d9e0246d8c23b46d8448572088a2164b2ffd60f5f7371cb5b2c1cf0bbe125892b61173a82a0463c5592220a5ae2ba5de575150de99c00058f96e62d019cff476497f861a2100fdaadf0cd97301f8d92041ae1ad5b00fd0fcef9403a5686f1128d3dc21dbad11a688b372acb49d632673d5969a032d6bb76e2b6c5ecfb3c4a80ad38a915ffa05ff6c0afe235f2b3fe1516b9bd9af9cc77d184d4afd13d44cd21a610d55ab077118836b61cd7d45b646275f0127fac026c07fb63c3165333d550a95f386f60b1b93ede7853d63a2fabbf3542e6e3b748d1473fb8999c52c56ce814c398f764006edd4be1b29105b059faa868a586a9ec3a785d8917a512598d362af1ba6b4d664c2afd6662684f7668354736e20b97868098f4003425bedec9ea92c2637b3d49bc84c9853c50ee7ea4da4b3c576c97cbdceba7b39b443911674d61e9041774cc899e6fbb8a82bd9ef8b314b3958c759756fd77c9786e75afc38789f9a336cafca1e502a74f9b2f5da1a41c50a10e3ff3fc651af2576695c3d909e9cee1a24e743c5b3d5b616896c346fd7a921ceb34623ae106bcaef4a1aa10a0e204b2925ff82441a36ad0b6184eef4b1f1d4860b44f263754a50b8b25f379e0a3bf24e607b000f6bdb931cc66a04bb4dd4003c31c885639654d2a6667ebb60d030f7df3ffd88d75bf6379c03b5d7e05adc170d757a34845b7ecc16d8ef8b66d27c2a3f92d1c9a2068f21ee160a8463a0588b289d03d9eeef05a8b49918aa69f0cf39ad4af2354325bd685f50ba6668ee3adf6bc9405cc5134c100c00496539efa2c6e25519a4b48eae944892f9492b6cf33c1e9647f5af0d73814cff0f80ef411a9595b5d57027abe2e0a7c88c9c5ae60711e2740586a0fd20dc3379c9154179494e5fd506fc69b4fc834f3454f7d2f62369abf0116214a809fe71837bcc63dfc0077a1595c32730af97aad9d259515e65a98426436318901ad4b6440ddb89eb8ec26e3c7946a9c095e227c2b1b55dda79445b87c9486af9c1cb6bc63cfdf3cd72e9a3e4ff729bd72954f7e8416ee93b3159aa81eb8c401a182116f0f44b30c376d2886fa622ca9e082d26eba93a547f047af842680d5d3cd2cc6d8b5706c2549b4c4734600361cdf05322125376809ef673d76543c9fa742ecbfaa954756208a7aa4e2fa0947af05de81dc367ae85810cecb70b19a22735d70fdeb95fc29fbf25ea213477adf6648d88c22756dfe12c00bb3dba712b89b925573a468154485c056f025fdf4d302cc9b87a4fb6885b659bbadadb6e43fc64237131a98904842c007fb026d087c862239559474e2f31a1d54bb1e3480514646048d3b3e51e747520bbff08a9cb1f88d1749777d4fb0c9ffcb0f9e607a7ff457e38cd271f24699c2dfba0cfa9ce39928537fdb69bcea9f19634b69a6f0114a76dd7cda269f0fd5e1fe3f42adda553210bb4302cbc7f82929293c171d25e2da53f5ed4aec22f9028937fcd20fbe0d4afbc1cd7e723b451f655e494d225c03bc64c1f7c4bfb24d75e5e56e4466608d7713edb25bae725bf27e34e329b182c3eb5e73382191bdf2c7e2c9f507e24b54c20e8fed3c90a6903194d51ce4b28b0ce46b95c775ffdbb7a8af33bf895e313de10e29ca17213bf3031a99bb6b3aa36c3380f006891c7363d36fada5383617e14951ef67d4c4c7b52906638139bf635b97ff0cd81a43ecfcf2ab7e433dcecf6b534c245b5bea6f3237ea7ce325d3f9fc6bc3a6a8f7cff1a280dd7a2b3bb2f7096d5fa677b516c1159fd0343907e9cb2d1adbe18bd98491a7520a76658a225e4e6714e2a86b062f41639b1d5368675a1fbfd2dbeefc67f7ddd76b8453e4e1fcad80e4f2ca4badac41e7e980a3610a4a7f7356b791c8c42ce75e52a4b3b111590f81476003fa511a573bc36233d787d59d9eddde65ca5199b3bcd176d7524a87e7d25238eb49b25862a653323210b1d9319ca70677dd626c0977b14ed83c08e8ece4142408263e654ae1bdc41efdccdbe93b7e6005dd743bc5d2593a0d3181ae016a69c79241630fe0b0572252bedc4a95924be4ccd44f187b789c70cd6dd877e066e350485b4599502f4acc5d29fde6acb1fbedc5c3ac8a194bc1cc59e149803f430df5cbbeffc0e30b4452dea1aa5c68488a68d368dd33ba039ccf9a4836f46cc61eba7a2e42af68185cd13d138cad759a503bc8a8b6da32060da9f1f49c23e86710dcc4b4650e264df9e5c1da40d826529d1778c620032af407aef88351184665d79d5dcff77ec6f99b60a5c12459b5d535bb8de48d0c8d5b40eddb18d50235609dceec80d328c164db8f5fc350ae130ba84d1b248b9f605c2615acb09e10ab18fd8044e81a1c5144cef44f4863df42d019f743ce3f501add15961d8ad7be1bceb5289d18170d3582a773a49675b5fbb28d9832c585891256ba48b92141393e7b7cf428cafb4de8c2808283553fe7defcfae485e60b3dbf2519e6e45aa87db0a8e2c232e3fbca294eea97571a0eb34e596be0431cb1be2cb479d7c6f8e3a07d185e427391aa4f83bca03b96d70210f2aacdf5d1002121cde92218d54b8b5f725e8b878a9e8b59d63ecc087ad7be63c55245dc73e8b20257b680add6f15fbd568fc21cb31f33ca11e18d8ecc30d73baa68b68aa6e134c21aa6ecac98a717adbcc0a31124e9978ff44769f14bdc7cebc7af0b76497904411ac29375fb752e175ec1baa470f1b0a8ee44d0253bd29c9116d5d41f3caa497795272cf8768ccc6e3ca13313883520297f0c7891c873eec0a5d904f1c49f2544f3f07d51f9e2ec0aaf868ca4fa0a48ffbc7da6b7be65a643c3b722e6797561febe4998035115900a747515cbeca1ca0ba2e0a4e052bde077a51e9c1351ee1ad942f01b5134fdb6ff72c9f1f95b69aa190762c2db3a8a13bd2b8f6e9e0431f383b8d67f2a21aafd8e7a6f03a22b7c8e5c10ec2ef818a62002edec1f31e0b6d9c0f879e7e2c446583ffb34142f7003bd75e9acbac737d64db2b34e8e11adfb888377c04009bffefcc104cd6d33c07de02c2c2ab36a61d6109541045068926fef5631d51b31cf2c76b0ec5e0ea0d03bb1cbe08cbbdfa2af977230c3d191a7ab958cb2b04d04a9d80901af792625c80666ccd3e108c8ca77645420ba36576cfe10fb68787477de1057937980a99ce5057561f0e61d3599ab22b5e0992b35f9312bae5ddeb00f45450b6c2248ecdc4cbf9fdd50f81e01a6dfa791ec347046b6c5e9dcb762238ad5a060e820a03da2d0e4f2bc16692886616f971bdb00e86781ccb72cd377e903048b98c2ff955197d6060ebbb80bc30b4c2463835c1a0cbb028306ea0390a4040ef87a21d2d3270a371580e2a693920a3f4acf6b5a78e9772579ffd76ce1e6d42f1165ac2a1d02ab67cdadb87ffd572b5caa0f3de95b9bd4404f8ead3bccf508860505aa2a062920b6276538bdf2e1a2f70b3e130e91681773445ab30968d963e98711cb643ab4ea69901d0891e2911af35df1bb33eca48fc278fc5c41f58ea6f9d24ae98f4b85dede03ab68a7200a672e423a0e14382af70632604b3fe88cae6881142f89ecb876b7f6f15af2bfb9b2fcab145df4a7827d6a13e7d95cb27b1ab1d91721da133436a02b8979b3fa1edfc50104b07f3a43231c1dc23bdca2f81b8d3a0fcdf479ce4af984a8965ca0de800f63dd82300d5dfaaf11c6f7dd03efbe2f28ec8c24456e6c35535fffa91de6100fa881e9efe93508beb21ff7d4480b646501e100887a19308498b1b949d84d8e8da644df0bc75e415a510ea041e186e5ace75bd2127dea4d86c7d5dbfe270d4e4394104d6d2f94ae5a9846aa936c2bb81d5cbd845b9d52a73ab715891f72eec8ab5d0762a2fcf2dec62a63403dcab1591201423cd18abca2327e290fd4977d2c78f7573f0fcd167acc358e3f526e1130269965b11f3c44e0769a335996fecd73d75b9e22aa13c46b0f4f916f2eb5132056e7334c78cdfe2e659089efdf7ab683514bf61be5f484e135c5b14b04099b2e315894abdd80fbff6cf2be0b49379d45de1bbab5bb7516f243692cf510b3c51805f258836a07ef9a9218387e42b20843921dc794581223860dd43d081bf98410ae4d4f73c2af8d816cc5cdca3c501ff00771f0716c583f356937b4919f574569255444b528c8e99d304b0f6dbc757d0e2065cd1159772aa61293a0fbc561190ae89bec7984f3b181fede3d5d05df565883e5a1d3959e0a512d7e7cd20780ba4eaeff4e79b4b91edd3ed87526685710419033769ef9aa63d27988a1f22c215912ae2b4cbc2c039976677cda083f5538f3e97ac0d0b11c3f3ccc14438e69809e79f771985bc40a36886d7a2e27d980aa11a9fa9d85031caec4a4abb85a55f41780aacf88c520bce035b41126d408457dd3cae07c415b9e42d24975e4ac9f52c0c1f85f4604c51de51af858eb612996677becef3dbca74569094c8f0bd6716b8008aa15a74a7cf03648e5fbb0e0abe583531a882ade50ee45b049171ca20ce3ed8f66580c4d74e76624a260cc810502c99eb40bb59edade5eeb71d377863c60b48876cbfa75ee51dc6f33031ad7a7da98e415f7e98ce1e79b457150bdc7dbcf6ac35f8599f8edc009031bcf3fed59c1782fe70e81c3d3e4499228f70c368af6f2209b84aa559134c815123a7684264858e6e5ddd70b39fd9fc6d5687b27f2f2d1ba5f79a1ede130cf1c6a8237dd4edaca7dc2f263ff5ea05fd864e6f78c18f0a686a5e0dc373e1830c2b4c77f8f6aed2b915c41ac507f45fefad23863cf7bbe0a439364f0069aa86e0e787afdd8dd65dc35617274d7c816f0fc3b54dc8f581204d7b79e0d556f68b0c9072822abc26ca5b057d9438b891c30b4b2349ada93933155d136cbef226c45020967b977da5ffcf08901ed03d6bf0a466363dbc6d304ca693fa36c6ed0d89836ebd879f155d923176532f128abd7269ed41f9322b59de160d4d18da934021be197fcbf4bd3adeb27d164d4c5dd88ac6a1a801fe3f6ec0d1377abd5b6e1728e186636a2d10ed677be6a73b1ebfa9351c89ae970b0ff50d11ccd74271319e7f336da23ef1296dd49bbc10f48be131ffab3bdfcb1a546fa43e7e823916d81e6dd4dd0bab611e5a4b600011b7f46b559d907650c85b1805b64347f8ba673b290a209ae5f58bddfc3f4d2e191b4cefad6f358bdfc338d01b58bdb13312815e75333251cf22b6e898dcfc9449c56efb3d5a0d8c4feb9077ba4432191c4c85b4d8a4ea733a0e34427845dd2dd8d35daed056a26ade941f49110e7903a3f065de378e9417ac264d132ae3d39131c52277d523b0268d7be167ce6cf9eac8a9895a6fd085e62bbfc8da581642b2d54b799b32fa0adac62afc8d73c0635f44e9a5e5bfefdf61e0a624f05b8dd5a30ec7be55a82ecc5a75fa403e247c505f107faa69303553c9eb7b0cd957b307546d7eca1f86ba05112e715c6e04e428bf67e345471ef7c31f123151d3b74f0ff1655bf1226dc53c50658a5b4e5113f7ae61fdc64d68a1dcc5425c7fd0cea4e94726df60037750b3c763fb4cd3fd72c8c4d0dc094879c0a3c3065d77b26bc57d203167823a601ae22cdb435dc6430da737ba1a37ad74d20a5acfcbab668c464ad047fa18e9a83617bf8bbff41bc5cc25987196565e9fcfa1ab65ea773988665d9971404b887d56421a3eba8e7506d1a189bc453aa480f24932880992a9fe5bc6be08440fabcb0be7d3f05e791e64112c71358c2b691bbd04c1ba47fc7ae84e11c3b587e9fa04a002ce23194572c6a0fe2e717835f695a75791794a0f5dbe416f6cf5ccc6fbd20d8fb1bfa3b6f27e28a40b4ded82af14022b70d6c81d0527e3f0466c1679fac81a9d0cb7ae55e2570bf4bdd499458e61ed93dc9522af81434c250c97dbb0f78c1b0873dbbdde0056934c70a395125147f31f135f633cbfb4be543a526b6bd93bf0280351215c1b2c2bb70d574b98819eb8455a135749c9951a246ec4be9b30e5e7b1ee1df0ba738c4fb8571303503bbb004d73a94d27e576d674149aa196fc0fe3b6b7d09b6fce9f6ffde41deeb14a3aa19cf8fca2da61dfb9d252511b016150dc1654b52fb0c4ae4b59043c5fea67543c5bf1faa26021ba999034eb2d42ffaab006f3c978398817eeeb6d03703ce75c504a6eaec49208dd2a7cf58eb65cd0023e87d7118abf6f24819dad7a65c30a066f81aec0a781ab908bc7829cf9229f9aa18023a4b417a6f7b106d5b07a91e0e5ae4410065da678bb82c506ded5e3d7bff293f1198efe541ccb35358513e4add598e59f2cf1d7172b71a7201688cf292aba9be6cd8ae076e83e37a305456e471687c308697d70df73f37e48e48e2014bdb9c3a6f338f631cce5eeb67e39337193277a2f49ab1ec1d829cf7d514c21d644fd5cd3fe7b973eea8267af277422d5a10a53988eaa35e75f6b4f682f7ac66e088a42d4ef235724932b926618bf2f69d8a54291f8c1c2d43ff1196ef9517c93066a8238b10787ea096312a7ecc5cec1a1e6a52ab791ace1657bd3e15b1f0d421c4127500d7e4683931b4b7108a3cc2c3d61ada8dffb6b861cea5f906937c2da387aac2be8daf1ce0b3ede4210dca6741b7b7c669384d5c7bf4d0ce885437cb6c0e839dcf08ec60ada09f321982814aa81bf6acf4efdcf9d637c1b56e6a73b1135638b08d1bfba84a4aaa08553d88b461bc92e1ec9a94efeba5dc37eb1e138b1c85be98cf3c8441e83c9a18aac4979c6809b7a7e76155da149aa95bf1a109a7d55de6a624b933a214b4267f6b0e4336be98f2178c104b57a295a397c9a07c02883c5b54a2569c9d4e062ebbd5e5089515b0897795984dd0e0b64021f251797566705bce646950c409b0f5c900b2c5560795ac33afebaa8efc3be32fa1461268f64abf2f51dae904c86cd6a955ad304b3c37066e8eb58238fb5f1a7804cc87d353f32f7d57d7d629c4f41fc2b5332c371edc982d127883f3cdc602e89b19d13a466936753d4c714fc4fa9e80d857fe4b7873a78aa89ff4f4b3189a9fa36ab972078249b05598aabe8334498172bec811a46421c0f6af418cd7efc0ce589c9673b0780df010e90ca552188ca7971b8ca14584acdb85d467971e988420f3e644bef419cfb9496f59d907bf28a8a5ca5f312bff242aa9dd71cdd4044710962adb0a355d8b7e6fa4306017a7b58398f9cfc33890c1f2f64591bcb0226abe0d7056dd8ae7b62b428e6c3b8b774dd564461dfec52a85e779919d1b63b2463fe20355b3e48d8089406753bd9a71e08c84f31cf1f5c2ef47522d4950d78f80408c0bd5630827290b1d029fd4a495c97788d67e98c8127862074b37ec1ddd17a61c380a497518460b61c625c5b9bd7231d29892781681bbb8df8d5b68751f7b31352aa9ce31883e0c17aec73b4f3d13e0ded0178d21e3fc64377db4656c400e0fd3356a5cec11daeb6f3c06d4c654cd3c605eaf4116a625ba73db8853a700481bbf27406b45140ce15b8b9bc0f895e27ac68408b7d71d1c7b6fb0395124389c1a0938fb21f730e3bd37702a635509bb7050d82cb41e3ca29acc9534ef9997b60fe1b3d94dc62f464fff820bbf57753c57994274df82396f21bbea7fa2d745c452a669cdf1b49dc1527b4f0ab109239d6656f793c7100e97a6cea5e8962b4032eaf061b982994d292476b4fa168c8e66f3dbd296bb5952bdbfdaacda9a1f9367430b70b532eeb2b2f233af5150fe9e7d83c48939de7a1ae88ac7e806351d292c7529be47ca69dd3093511d7d82a710be2c41b545a1411b75044566e59e530a3109174dab08d24d74b71d55b9ec923a1e2b7291822f5b0c01a320f5b8753d0f97001d299e904707d91e3d6da93f1115191e45668fed2d71b63a1c90655a00d8b20bec9de4df4a80cba7ea0daefc162c3a17d98b8815984564588453a0677a0dde6dca58cac869603d8b6012e7d32589f973ab0d89fbc9dc23002f882744212215058aaf1f00f6129c03cf1721be5929fc31b6d81e24097faa16042841e4587fafb1178880e1f8ae324e353f61067e3fc463c355ee33848efd0df8fec2eea1c718aaf8d87d1aa450b00e6f538bb213d6e3b730d151103df8cb36ffb8c4474d7b5eec676d27fc7749ad146ccff6992351476ba76b467b3367884cc4d387c11aa5a05a7f7a3ba902da86b930e61d57d27c6b1050b8a6e338b97c3a69eb40188d6dafc3361ea59ff8a9efa4e7edc70588cbc470b7c3cb7d41d314e075b827d4da817fbda9946eb81f37df849d0cac24df2d5f675d36758001e354021949f7466e5a5ccd24ac177c8cc62ec70caf68625d27adb5f19bdc0f0849c5361b276a7e289f845432056ae3f264c3ac8863f18e3fa2976c99e614da19cee41d2613cf10acad7368a9a0047cab71c783c41882782a87bb51abe4f747741abe8d856855b38c3ead61c76372812ac77217d5cf9447682262066651d5df87d09d62da6b9cb30e0c017ab6b105beb05be2c5bc5f9e79fc2fd68e6235bb7eca7f9c7bdc772cf36bd2b9e5b77abb22195bd17b6d52c15949315ba5c9ec20ec9d43645f03d1d830bedbcc48b9b13e1443cbb936a422b9f7bb41b997f607f6a3fefdccd6347eab24d4c1d128c2cb39a9220ab0a5ae537d87f0807004e132de607a22b8230af4c64503d8c10bbde67f4dc6a8e56b13a3634a37b2b8f4f106915c8c4bcf8fc56be13635a4638f0b40490925d261cd07e0d1e12de2ccdec24771a5d3779422da693a84e2a049be2fcc2539bc9c38d78cb946fa9cb7c9e195ccc76260bac4d54f9cc79dfc250394b7c77b9b33aa90823d4c8118f258a6fcf6b7468ac42f49e5b85f1b39ff7fdce7fb461682a9fe8e3542cad2015b93c4f4496f2b19089e4c120b29a645389a34ece8bb47c754f0312259758a7efaa7d1371c9edceab404b0020fbafdfe4616392220b8e22a662dd79dc0c306c9430ce3d7efed6fc27164e9c961da42df4051a3b30c8ff36017af2f4363167c88893306f77972be62967bcbbf9193c3e156f59a3c565b4c662da5d7819f9f441bd879ff3f8b4b48cc82dc5334e014eacbcb590844175e67219321020addae19c420cbc66ce3c01a2acb16c73df14f252159e3922bad00c40137eb83cf026e89e85b7f24e3bf369eaf266d91f34c640274049328579f1c075b8c7caa5dd36917268056984e97c8a2ad64b4e960aae4248e9f47e83835978df7aacbd9387cd36e6f40c9cc4b24a280e04fa982d1c2f79da64375d1f6c40207f81eff8bc1a419fb02fc9985b381fd3e5c6806f9adbbd97a956f24c564ad3a13f06d924443e245dadc33a5d88fac13f7a418409c70b9789853aed8626525d101b5a25fbe3983e0c6a8badff72debc9e017873a38d9fcd89777a7c6078f022c4a4c478f7fca14f1b1a7af855de163837f864f78f54cca79187275fe8add1d77b82cd75e50efacf12aacff562ca9d1141e2ec3085a85c70f3e9093146e095b4e88b5a015dff36817bb55b530dac94f84f094881efdfcb7796d62256065fbecb755ec7775fce783a4fd5e6f9d38b5a9a31d64d832b1db17dad90bb723c6638c7fb6a741088a5ef3a433b0238f3fe6f9e72e700deb5fe471e480f318ca6f9b80d9a3ecb96f9d53288ef32b21717baa5d9382341ecdaf66f7481884586f0b4df470ee7d4b3da9f496915f94ed4837f65dd349f2545d6482789aca2f9f7a4904ca49a8e06b2cf747009d1a5fd1c24f2d5bd65a76ac7d9aae4437ed5bfbb56a4f4463b736ef66704852dc2fef77c423033db2e4f7c6e5d42e6df73cd776365ffefeccb1b72662a8cc2a2191072731e0653a0ab15a54f3ed737b60c4ecb37e3d9320c428776ddc459cac2826dde3306203cdc0d583f795855b46ad31f0960ebc0a4b1e649906eb641badb9bf50faa39304af208bd769af2aed62091c44deaead4a6ad50223c197a3605a1b596a7f7aa8b0c529a4a2e388e0f61af1495494c1dd98a0091f5b4462ae1a0e258281437bfbcac68d099e95419a6c47a006e1c711f5c62e55be3fe3c7ccb98842ab14358e7cd36c262cc9c4e38a972c84561c1f19a0307836b9f668cae9809ab5cdc6039f329949b1a6a00aa353f6a04d023582132c57c7a2d1530b209e693bbdcd14c661f03a6810b8f5bc78aa8090e78364771a9a3f74336f5fc727028f7278a002442603011987f5079d472283346c00c6c4dca00b2c19ebff5bd8f0109277be58a4bd45d828f16b0854124a74af77a3af3bc4d5998f4715054949a1f426dc1ce1362b8849f26cb226cb144dbbab2a2181e2473850601dca485126fca32ec21184e5a87b7dd5ee982b58d1810a0a14e90eb143b35a4271f3ed51a924c4e06ef272a20b5b4e82468d0aa2fc2af17874a2a33640bc4b0ac88e59d77c7ca30bad707a8d8167cbde3b5aaa97fca7864be75193e272051a716f71e5bfcde807a5b8b9e2e0558f7efae2a2ebf971719a26c1e146baaf325c3339e64848036da7c462558476822e248e8df94232950870a1cf41fb9ee0f5c027584d808720248bf7f062d8fbc0ece128b30b198e41194c544d20b72fd5935970056df0494e53d44ecf18c080f9b49c79a31087155d1fe39860c6ad72517ac5861436ee96b13ab2380198f04c8bf7e20d23dff2f2a6110adfed16842699b5e20c9ab38b7181fbb4bd271320c4026192a70492c1b38aed8f35dbe3f195892bd32968af0e08cb791a00f73d79533102c1b7e6656bd9982231789f7c5c1ef5ed469501a6e400b7bbd11d48b22eb33cc58f0142b2f1a0e3903ccc37201cfb9861168b1621ee6d0c53e9e7ae630296d6b2a513b9c1f6b8be1d462d9c12647913555fc27a74c10dea7cbf80bd7b66d587a2724ba1a2f927c061b9eeff29aa75611f9c040a57123b63e0274920de525b22a3daf9d1f62e93d43065e5e28bc81055500018cc230474686abde4bffa1f95c0e356700040d10c131a874e4b366cfa52629709c9275e0c885f2ee1a642414c3b4562eb0cab679cae42083fb4408f06a2ce4ba03244caec23d1fe118f242c2d5a2c6fe425b25b2e1bdec5c61a6ddf69c65aa0737408174f72e39bba2c4cb59dc49355aa1ccff34df3028a23e2473a1ff39c82be999308d98d602761fcac7c2fa560a304a1ec5f25ee03a2cf044d5ac3cfe19e5c7a7c60edf85d4b47deb3d765c584233384b4dac6453a556c28177f002063c923876dcf403379244d195b07315479b204b1605151a47547d3726131bbd78d4220fbb758d29e4dc9963e0ac52a634534bd90d0ca92143c9daf5134d67449b1418b5fcc9ac77c9213c58776b0a3c184d74f28e7066e2321833349dde25c4e0152023dd219962a5b3afa9aed44ace0a62dee5bcb7f5eccec81a40ab0a16688e8fba82c4a4262e7e7a932d710fa811f44b7ce420fce32001f86b487061133b2a07e5ca5a82f1e76c0d406f70eb235d73439a248f21fc95bc79c8eec531959d445f604518b6827d89f4bf552c3a8c5d515e004511bedb1c463c0df111b66abefa56c18c9cda470bb7a780dc82f83331ed7d8dd3e3b9a2c079cb3e1cd1e26d66daebce0aa0df3258a94300c9f23d09c0482b1ec0cb76297795ac7aef5044e39b19b5487fc5ae65270679d23901ea5ef08fa79b4b97a8c552b70c32ffe012c5c84c620d7fb306db27d8a0c4ca611e68fd4662bdf16c23a5d393aae86b5f6ec5d6de0b1182787bab9a528c54ce6767b1c030fc2a02b58d52aacb82f0b3db589a2e3924e031f357b887694771510045232d2174c03bb64aa87ab5189e5848995cf378f12de0abca76e11a210a36ca0815d331fd8e53f676623bc0316e554004abd127381a7b3c5b430994b7a6036925573816e6d20b7f12b2ceb9d26c871f47b9ab26783b24d8c591fd565ac87803b91ab8b4c24229ed3a223d4a172b7efe7e7b6a993c7457e58bde352a1a0394a708fa1f617f4472bbfb0081d0386b5dff2fe19b5d0986b4403673e08dc2a3f160b2103ef790943fb2aa863a2e8aa9dc55eb982ef79a85e21844eb0055c6f31a5a84f58e594ab6adc30e5ea3d6ac34cab2ef562bbd403b9cc5816120dc4699f110198f0c1efc875e9dafb9d5820d95c7b423d21d156666884d9181b8706a3b5006578a8fc353c806241424879b8e3e655d0adbc059def4448553607d1c0d80dc32cb82cd49dc722f4083d4f59fc154b95543a3735f74c73b4647539ccebf5886b9c4a0ea021048eff2a209c567365cca7865925f3b1e6a1551bf0a1a26780b43e5753865639b3a71a2abf0f67238d8f6fff18e2c71adcc14a2dcd578f3ff433cd364794fd092f5531d757bccac7a6f1537a81238a9565c220842b55018afb8eba3b8acbe0412f852de810c22190e925d774b02bbbf55458eb0a7ca26c02e68df192d96d01e1a46c3d88bb709faa4696e64e5b849ce451323c6dd74874d77005cafed9858dc5bb8fd6c2c94203fc7e9f43e91639233e02be3120927528a9e767665665700d9d450be9ee7a257e1b980dda2711b9c0a5b05c052c1e4f2c9f32cbfa0533d1ffb32266d26d5608a6818da48496b2684ef22b53e31b1618afe725bd4b29e7b4e7f5317c585daafbad50d28a039209760e1a977c2716b4199d5f37f84c9e2887c54d21f1f0c76ee26904f93a001d23511ef79efe4ac839e1377c1a5f79ed04266d14d8da310b722c8230a5c3c79949a197e1ca49c6012d6401c6bf0a680d092cf789a52fc376b7aacf73f86864f91d3b08fad4e49397e93689c1868170b6e3573835f37f4ab2315d4908c44bfb1f329df8b312449032f565ec51f6143cd9bf501113a286acbcd29402e30641adb6ce28d238e6a4b25deec3c1909207a44f432bc4c41c2055d041962774a666a3199a9b5be4cfe777a908c1b16c2878d402b29fb6ebc3fe209105f30b19f7725487217ca95598780a05624554308e2d170a9f04f8953a165de1ad59dcf5c5ffde1a70a6279a05eb9e4d07744aafd56fbb541f1bcba1e27a4fe6145424f4faa94554188041e9c44177e84ce9fd61ea07df3b1d7afba38c97483e82e0a27d07526c4938d114783dccc4f42b661f7cf9a8d3740f8356782650f35188ac4b702586e1da876fbe0391da3b37ff2b8ec6fb620fc25f83ec35e68e98831906a97bfd59c0abc945989d93a8ecde024de91f819b003d29197e109c65cec7e53d52e8128f088a4a11297e760f7befba445efc47dff84108b218bc3c702d5d76bb8efb2a215142016dafd7e4525bc26eafce2bcf5567711079f5785cd24e33d1083b8fa8468fd74df4065bef26955cee462424d34690922d1bbf9c013f0bf21020cb29f25518eb4b039bf9c5d5c03ea8efaa6f9c8089f5d6cdefcfcac4555e270eae7812430b1ea71849908128ba8b5736d709ae3f52fb038534b8ed74bd2eb43a4d54c5538cf3d1bb7ced654453cd3856410cf7d702ab348f584a141f410f9c11db9eb25531f01358e8b8063f9d5995649c7f4967733165059631cd071db414ff4fffe353d1728e4cdee5396ea95341ab0b6d7865f68d4b651634fe844cd1b47fdc3e68fd610f925f2ed4e37284d32fa18df539c11fe14efe60d284685d88b11309cf67b52d9577dd17e0f7c7e97e4d341f4bd8e6ed016ed8a4133b0eb05cb237e4297a0e3178d2f282e1b601d1a7514a13433fbd3070d402c29700f7204ce029564d8a35ff263a1a781fe127407ab996a0c84bc96a4ebf1eb6d0c20915a6cb29736b4d8cae63884fd1dc953e482ece968bef29c916afa1938a33cb2996d1577840bfcf54e9a839a7cc0725975716a9af79ff262f66ae4c5738636139d0e24e354b592a598d946c87f1027b86dc0e5755e24e8a7502ced5d63b772f99d3896e39a05ee298ff37450f1046342d8e39557ac64d61410a6680e8fe8be14db050680314a36ff13c6502925a1235dbc149365c613e19344dea5b1043ee1a74666752e5f15fdeaeaaac82c78c8eff11c5f32a8d506488181e1489776a0eeed14ff28bdc5e8a8268fb468788fd37013e38efcf90ec479866d2f4362e2ce84affc96abde92cd53fe54a9dedc0387105204ce2eae02a7a0842a44c8af2b0b4e2ac1f7c712aea23c7a0115f52840cb8163327bbd591f906cfea0639e6e426f1dd2579ba2f6197ad84ecca5e9f03a9c284dc0b32c062ba3e3bbaf2db9008b1de3b6b6b6d7aef9b921c9ef4b958e501b50c82f62b5cd1426f4c681b6e30a04a531ccc0ebd7b8b4f7e769e7298c3e2ad15728ec363dcd23136b0c25d9608469a6ca7ee73f25f90d2e702a1c80ec07143f7dc3e5abe6dcb8c365cfe6f701216678f86363849cb962d24e799c8d8c636e22b04e6accdaf6dcf39b0c5820559522a74c7a3926c5a8051c3b3027f109ffb9ba99c385f683e4a2c085ed5c2c5a724c78d8546d7570176b41abf36725171892956530686b9cff6f6da7a630db1727831a8fec1b8d716c0c1a5a114fbf0d140459647c5fb92374316b3ff890bc41c0080727ce858425de6330d14edd9e159944844359b3f337ab483ff0ac8a17868e0bd0e3ce8ccf6de4e78eadb1a37a5249212c8f2e3ec48dd3ed1ccbc093d7ebc2ca2b2e7cb3a77745d7f12720578f50d3017bedffae499b9d3039617b8bb2b2ed9a75f7109c11376a50b1b5e1e033cf3839cae2e279cbf6b3e361cd740cb79c46c7bcda2654e47dd362039fba375d28f31a5059cc671218be13c52aeb9a1f80d089293689a96a030b55d689e89b587d475a7fd8ff45a1f08ec9cf9fa66111bd1842ea4010bd4a2a5aff0e30432ae0674bfb8090105e42add38e83f4ed000eab1e7b756dbeed8f96dc102c0dd77f0d9affe3faf6512f278f21255ee0273c211eeb90cf786c4cf53e21831501ed51865f71a92f81c72bcc98eb9ef0a92a45875637f273205e39c60c9ac158d63ab099cfcf6e000794baa1cd9f3bd9f4af8f20bf1255216b36aed8b10bc5a538dc5cab2c07f8a9a73dc7616ae480eed0d25ab52249a365c8a94f85c32922d4c8befd16e082074f67ec84af58545901cbc23645c5aa73d863641a7fc5451fe2c8ca0b7c1d1286950e23bbd3ff1d87930a958c4cf8760bae2c1719f276c7f4b15708d2e883141e66f3aa7239b1d3dbbed6515b308f2c17ae662ac94907218c4972eb2498952ba7ab39f13daa66a2423fce9406851149850b2afd01971a06ec824a0728470ace58f12bb3fa5b70d53cd807b058b3a65364a59d678b3a53215551da5b709983eac9fafc38c7ad8eb25a2713d579d765383d0d85012da4a08b7a809d5fa443acd207f4bfb690ccb855c3c2d456e18f913481246f84b97a1d0d0501251459ff2309ffbcdb370c3fc0af99958844cba366233c241c0640516d41b9ee0d89d51a37e1d881bc63edd7274e6fc348e0850718ed0746caa9f19d01107917c59f1cf64dcf1fc5c67074f1c29f8680dfaafa1bef29fd9193f51b34e965c5f76e36cf15aaa5d81a3eb02241fdca37aa8b8f71f51784a16b0b62d844aed11d73bb54e8600a8543d56d0c221409b94a537d18b84184010640208ece15dc2e5ca1922a5f91f31e01817b0831c79d4149b14dcd7858f094337a519b9cfb5e17622124c636d5438e9d3436fddb6c62a4866aadcfc027f8c36abcfeb2649f8d81ea572addca6d7961ce414223be6bd7872c90658a09885e96a46e478f3685a86aca63ed63c279a97d7321f198d4a3f8212221f934b873cc6d46c2bb5df96a67dccdc5be5634f15ae6ff7773591f52d7ac640b37d9df2f0c66baad2b06972eac8a1bc1722978fe9f19b394c58c77ec29199ce87dab7dbdbeabd1bc29590d2cc5c6113858be0adf6d14a238f33ad37f06ae91813cac5c13f11638ab274f01a13bacafc19e01bc8987e6347c72ccb513e3a883a94f6b386b7bcc2fe654890d2c6f615273bc0ce6196bf58534f2056e77f54b2f09535379ccb9f73ec096a05a8744b10349bd9f7a1eaa1195d65b498d4537f77acf5cc200548c30537f06534c034c708d6273a32a5e006c60c2629d66b83eeba7c8eb58ed8635f9762847906c6eb62c5b8a8787d721f09642f281de34cc21841cede956e2008afc650520d9881f2f2464600fd2eb8ba2ab81f8d84d57c137d97b746bbdbfbca5fc556565a37f88d2601a226dcb1602a3126ebe1ad14e821c2a2e67920dd7e2defba51eeb3e906188b95beeb99139e38bee29acef659942cd56f5e43bdda8ae44c622a114dfb719e45fe3c1f3386156c15459d722777308c4540a41b61897d081d51a47f7481f0193d55dcc0ca7981b7e20d3ee8512389a6974c97bbc9800ace717d57945aaa4c6e506a490c98be2070064310ff554de1f1c9adec12f4a6a6ba8e0590fdfc133d12a7f970d13dcd7e86bb5967944a5e53e2c98de4fde2c598d643b5f2798976b28f23ee91bbe1b30d3c38cdeed4f6e27b69e50457c12bbb25dbcb2c4b38084dfd415d02a1264c6571befa6a4049aff6facddfc1b244e4aecd2dfd0edae4188dafa0c72d7ac30fd26e319c07e976a9eb6d6bdadf63794405694165011eada2b955e78526d624b01c8e5aa7bb1ef122a288d0270ade912adb89385ee9dd6851438f7ade3033747331794c31612eb812642157f8313dae0f4d88bb530463d01a763af10cbd47230bd0fa3b615f54aa42dbeb9618055b6fabcbe3718381d436e6e87f3fec7f159460c533ef61192c5def918142c72d4f3b3526e060b78cc6b5d2c296c809ce4d68de7e4402cbbff71e307f426277f3e7d654cbd65a42824344559eb3620b860fe82fa838ad5d98cf8bd457d80939527c41075f68e764e78dba497e80e8f8b9b4ee21e3eaa51def4dab23103bed6e69a7481d8817009555e63923f5d52ad3b7c1f5a98acf2a3cb190e85a577e005152435c115e03dc8f5eb03a975bca3c38d937535c99de97dde669e01012f9e8791f89cd5b50029250efdcc44dfbc334298a302e69d9b24f79f438446c72b1c63c1f6b54440fb72595dfabd0d8da03f88a9164a85ff2cab8c9059c0cda63360279ed69b0362f0ec34a076c075a8cfa6fb36ef5c0fab5517ce6b207ad6417524443341f5b8adecab2070114af01304fb2a1e2961b8c86bcb539d6384967a3bb38f2a614b2078c2a673bc345f556a4aad5339f924e29fe6c8d02f63f37a1a88407e9f6131f6226ea32284c41f26b66db10223b2a247c58515f58c8468b446988f527b4ad668a41391b9fbbcc990f9553b84e0af2eb0f263b2cdecf2b7a74462b82ebdfd06095e6084ff7f344e0172ea512b5a20950f9e00b1d9b153a8f4dce35933865864fb2c342a7db1db8f71c1883377718d8dbc32ba8c38afb228dbcf4cace2c5992b4d5620e9ed20ee36ccd1b62a6313300b828ecf03e6db144a1a79b927d3301db9863d32f51f7c73ce4da032ac9860ed477ad842cfec55f55b74996ef02d3eaf0e7b0122ff648362a7342ef6bc7da04eca4249ac2840e974f790a7f8ab1ec57e43853c49e92fb492ef24c45eb10a7543a28bb0e62e7a843cfea73153328e9f1070173cd09a37b171c5f4e0ff421e95f5de73466ba6b821542fb36be869d971a6754eafd475b569c2012446b081f438216428ce0ff335001ef6d7416cf47fadb599598628f48eab6e5d946609ac41bc0b051f07ab613087623a0931d9fe29e50212359dd4aa5cbca4ad835cc37530bbfc1014b91e8d00093af933ef15c2c20076463cb79f7fd264acc6c94bceaeb2ab6dcb5bf2112162c3bf82ce9b7492ab7c7ae61db12a2d13c21b502d36ba670f86d9dddc5e2fdd38b50ebe2f80b599ad3c36d86bf1fda7e0122b5027702f63a46582fc60c36c530fe4ec4ca814aab1af079761bc0e8306c15c6eaede8db37882b9a9b00f51ae9c87635ec000b808ba307103787f06403647e7249728bf367eaf55191dd7f9a65c0e347cfa501168f64ed3da31caefa578c61034477a7b55854c331a16fcb48f6a6869367027f78e243be44680a95fe507dcbb11a8e2a47460492a895b74d221532f09b8a35f901e5c58ce3c3ef1b83bafa5ffccf92b57e0c69868df29762067525451187a1a1689ab1b3758999646277fe4f555cda4554d13b48707aa8e2547625c56e63328dc8289c431069963024fe9e185ba0fceec47f9d4ff1670c9d31b9fc491b2f08178be90c803eb36d6da6c817a808696e6e92d7f354f104e5016a78a4fca223d31286020bfdfb2a66e2e8867f7afa7c8b67291ae89f4f2efc424d6e57711edb62a6595a3c381e2ee8f784b4909c36afa862ae934456980c26a9f7405186ae0b354d71642ffe615298c0cddd945391bfce92aaa663fb9d87b0c272514efc6da64c32cfe63142d3105213fe81b7d779a518906d7d9cb7500f0f0cd659f515ed4e8db0ba52208ee029cadc051f5f428edaab56fb95caa552588eaeced9127c7e54b0a169c80c5778339adf73fba45453a053bee070c91bd0a20ff57f9088f5d2a37fb95791ab3db70dc01b40265baa6aca6ff2457142b61112cc563b85f5ca458ce5a63e4bfeec27ef4df282acc8fb8f1d1ea3fb918e6d504145f64b1ecc9275d2383fa6025977fb5327dbf1fc1e6d950603a68545683c1875a87d491776d599cacbaa0da1ecd44d45937c55396c01deedf19e6f6a5b104274ef37c4e27ed672376f8f967482b1e5dedb707b6d3e57da1595f60305f3d9f5ef5e344775215c46e2335ee039650fa92db44bba05360c42bff63eaff3a3a9b4f939a2ee2f07cc53f5e9d9aed2360ad20c6bd12c48858c4229d09aadc2c8ddde7adfff36a0004a9199005e8f8c937c704126aecba0c86f3a7a4d7c629b6600dda0943ea33d36d98bf57ac0980e3d9cb578d4dc36f9a2476f50c19960230ea40713ef779ada9bfe33c1f26018e9a7e1b6c91e8d0faf93df5fe0bb8ba4f49a904239c864085476c2eca3543e5cce834548eda5f598ccb3f1d6f3da36a2132202eb8c73d72369f0c439b2f201b44cc9069670348981e351a2a4e962c145d98b9f8a317a21083f57f5be46b73ad5a17cbe3fc7d728c16c4914bd3eec5f108b944b9ee67df2e4787e5f1fb0224e933a2167549a8184210df9d65e7ef5569600b5934b238981795308f875e4621ff026ed20a89fc90efc8192a2efcc89be9bc6e1980999cce8794ac94160ebed2c13f657124500780ca3006f85edf01c4ccd1c3b36038929128538534e3383694bb478fd22f79b46552fd20d44a8c9dbacfef8a4b9d156f8522a6ed56d79e4b0aeaa332f854c9c038c47cbc56189b9af13f9495cb6f70e758ae4ed41e49d55329c40e28d5bc6a4d19cfebd04c9534bf0a72e891880466c4bf97b4cd74881f0e5533bddb6effecf3a392176fedfa9d6eee4ec2e9936f79665f331e9971b5fdd142a0e669bc0422db61446a239a4fb0474e76ce7092ac5b9533399a83d9d5722b23709b04da57949cc64b6555c7bb352523376843904b1a83cea4eaf4cbb071629d61c176264140d4c0091a145a3581d778085f87cc0bd930a3267260ca41c7b9e847ceab76b70a821f86029b539381ee5e44eb23ac383345b901e7c8580dd69feba1559be010cb4e9fd096b1cc56b2e4a0c3858b37187577a0c9d6e8d82a1b5bcc1d27e1e2cb28696a439ec10cba3cb8d24c18fa6adf7dbe00bf70e41949e7f242394cbb7b3fd8f80795d92e6c0a5b4e0ae74f0cef5561a33a39e6ed29f025157190471307a3fe6a7f9f6df891a43aa07c35e7e8110eb31c8a887af8c0a89c8677208e9bf58a05d3c07d2aa1349463a7ca05be6c8c3a6ddc8e1d60b3f8e0ef1fefad5168c79b7b9ff8ba15cb3b14f319da3a8a65483242de9cfe2deeec3c414e5aa35ebc124d69367c912cd9fdce19c3f1f18314bfebef021b05a51cbe1ceeb2aafec2ef012434d74752abb4852db16914e6aad7bf7b7771ec77abf8c20739b77052c9a1699b7b60d7f69f6b63696d0307cf9173db5267bf6314b5c76b25d995472c69fc1fc2d6498cbc65d712211e0f02706ff34af9a44cdb445cd708e5c532f38c5f020410cb610d94a18eec616da3aac0e3284b19714765694e582d5457c6cfbfd0207ea42f4e046510e053fec7be358d5791ed9cf3f78f917e2cfd519c49579706f7bfc4dbb17865122daacc3c778d8707dc5bf3f45860ebd7c53529d57480f7951067e31bf12cbd2abcc71fafa4cf7d4f32b8ebb8664dfc026984273c5b9dd72f134a7ed4e8d57b43bae166dc32f059c74d353626df88635bf3dc4028ae296f5f4d0748e6c57df133ea1c4e944373efab3c6c24b1b38effc18ea97f309ee9fe6ffd774181dc4a49a1c040aa395e57f3c1087d745c42b9dbfe6c34a8f6dfe0cf98ce8a03330675d2eb821fa6fc1c9be18c661545a9dc065c4e26dbae24ebcf25cb6285dbf8032b0ccc4e15b1fb2d399818a422b885089d2cb7a364e3f181a3fa7ff064728fd9e689cccce17541a3d800fe55ad4c710ee136e28d6566fa56a933ef137ad88db5793ab65e9419e821c41cae3c7894e2055b72bb97a58bfc323f73de8fc4d363cef61c8f07309f2b6fd625952250a4667eafae6267574a6e3188cf408f0e85ae312ac1fa225513732cb114427d31b61a8d5e0a8762c8d3079880f0785b72a8b3e8903c837e7f6519f71895d1d6d3d4ad656daaacafcd1629347a8c685867d7d6efed395eea2b9fa69a9ef50d7ef92f7ac3f66c56282e37fb55915b1f4fe8a88a6b3a8916dbd4778397a798344cc435f8aebb8130db654aaeb6038f8ec94aeb8553753b005841f5f88eccb4a107685852b5dbe3ef7abbef877c3e86c7e12902daadf66fd504225f97943c1d2d6ff72d80d4a0f4b2d332b23c61bf37c88b754e37cd8cdfa0d11eb170b9e7d3d33f40b35c24743317f038f78c54c7bf8de524eb955b52016025d8e13bd3780e8e00133d6e62ce62e9be9bc46554e1684042c6d7c1ab9c28d85e250e5b38b26dff16d9fcabcdafe06eac95343c549dc56b0dfb17305e89141f25adc9b19d7a192e67fee7a972a38d4ea89ce4e99d9aff9e02d9cf1e5eb3bc4fe07ad10706b707f962a6c772ddbcedd72b58f2698d54e7b585988d490b0ffba77475840c798faf6460b3f419b528ed9da0c4e03edbf30e8fe3eac0c8b7881c2abce86871f82db100f4739e643055ea905d4c32cee86e49012e45b4f0f5e9d8469c20a14c33cad697fe62b33c11c41ef96508a26f8734353c418b46bd4f2a634ef49f1b3a73012f361ed6bb0d4cc9f86337f61bea5a4e2609f8bbbcd8e63ed594d8c87e98b2c3a250786346796a070ea0bbc783b8716cd203e8720f3dd29f01f4d0575c2c4e62961a8040b4e2b3cac1191e1c13e2287031445dca707845c8abb24b047d7a78ad374060e085a8fac6965162d7a599ae177bdd13df73822e287155c44594eec4e2dd9a7125f6a2162381baf4830ba45817f8b7ef2401dcfe3dfcd4729b577ec26b337cedd50118bbbaecfcbb8a43c8234dbfdb662055a5fcdfbc3c2ffe8a1682802ec3086dcd22a8bab4c23d5e70e96dcc6ae9a7a22ea8e60be3e2efbd919acf1c0b9ddddf4123f56926039fb453c82c92ee6c95853399406bb886e64e901ebc261f6273d94a3a1fddf65e56597b214a454faaf8025020021ee06daf8b27422db50516290facd8d0b769d6e1c556266a5efc27b605740d778b99f6785108bedbbcbed6654b0b09a000d456b70c3a1fcb9510366dc77025e550d5af577cbce85d9136b566e0effec46c13d042e98836d72451ea728144eac2a00a55d66bf7a0a093b1051a0f0ea5cf7caf1c4012f485f589abcb0b42c59892deef9499555787dd912ee63e6908ebfa10c7be15a1181fcb4bc36f216c731d788ad0618a7775a8e1e6c96c673bc00179334f70dbbc4afcaa768f4081b1ca706c9df10a9fc94da5ee7461cc1d3e5c3246a42f38bfae254592f4cdaca5d43007ce5f984284e05cfb365846c5ee3d9fb07db7c8169caa4881a99fb5a900fcb8370deb531101e4d39f4a3ae67dfb9f7d76d84c1f1df2c9ef376efe2f37f503b4d568e8fd8a06e114730defe30057d2be427384f72bd4b05693b9d22335b5ff92d94ca9182bbc5894f5096b282dfafec49ca5500bcad6f62dfb754ef576fc068e893f553301a911719418c72946fa526833a03841167f74108ddb8e4005a2fca1f5912061e4a6fd2a85e5df515ebdc40aa262f5a6914c56c2613b13a2805806efad816b1052965f14efc73677593906ab0782e08ba565033f97fcb161ec16664f0d1fdee58d7aa118c183edd68c354854f4793d4b8dc83c7530a6384bdf8e988e2610efbd66e0d9fe719e129a0677c9271e5043d5b4e103fa9c8fcb1abbca827112b2e82e89a5fa9f965058990b643260b9acf8acf65bc4321fb142a299caec3795a15c128ff23789b69f690ac80a006dd1da36b71f9fd0b149f4cd2cb091e3cd57040d6375e69a237ad65474bd712a4120b52a98f77483e379c761da2ecfb395be3b2c5d36d4469b451bc024c7b384059c1be0548c6cd25dc01a3df7df641e886d132b57b07283f87d62e3188dc8e8658736a2cc4b29ddca0b3bf62029956c80a6d78d4c50aaab025a346063e19e15eb49dec35b21ce06bdaf89c340728fbaed296248f6c7c03ff276b2544efa1435a02bf628ff5cfcb6d89b13be5e68d81a21d10c11b33f528bd36e1e11f25a9035327a32dd59ed94f39364f6f5372369370827891f3bc0c0796dfb193a2127a81458ce687970b529d140fbcb6efecd922bbb68f9d07ec1f042556320aca8518d99598532b5d115e61bddb259241a3f63e7b2e3bf83dfd0b4b6e6dcc0882d123bcbcc25700c4dd48c6d8b38a51bc7f9a20afec17dc61fe16ec9d3d7ae6997eb49b6619dd3863a8c90adc3721e86164597e9ae2457b29ad0eb8ee1d22791e3fdeaf67f796ea35f811ae9625454c8e17a2c2159a5f4ee5fe5d4ccb3a95f1b5e19689f2625ab6ec3b45206fd464a3d0809202ec0f5c36fef699062851efd893923bd24da6f856ad4955a375befb0be1d61cf16848c60392a2558fe0ecff17ceff153081998ca3cb4140c877805fe39770349c643a470d0883ad2a9ac8da37effadb08e17555af29708775b6b8c25fcf855a2e5bd66c2174d63c6069cc7701623724edbb5198d197043b8499ead432fb077691cab12e0fe9b900aec132e583f6b167c450fd7fca6831ee4470322cc97feb731e41c1969be3642502ef0e11099a9fdabe135a0b12a80ea210d437537a666f7b47d607cb4295451e46c998bbf3928f67900bafaf8d893c019a732a3cda1fba74875e2053fff196c3fecb9fcdf573b7c9e6a42366c95a48f8115c7db4b6693de783ea5b8b2b172da13f49b3505f619a81208241d544a1285eb44b9fc29206c3765be4ca5b0992201cfb53729943ec1dffdf21cddacc83db87d9c9a041a6353dc0cd03a6d2010592659af8920131075d86a888588449536a7d9ed962f4549814003c23b31fb2bc1f5fceb2c0d1b490567ef5a79fe2aced7417ca471f995443eaafb9014bf18e40a933e463c105586d307b563c611bbe29143a119786927b67450150c7a3529101e821035c381ea5c11e1949b8cb266dfae55e2281918d41715d65776479ddd0a6b06e6de905b0f697251e93df85cf02d18dec32b9d8f9afbb7bdd00ab22aae105bc23346407439c4d7fef9ba5e4b378d08d71fd6e24e972918e21b1657847ef70db45b1891f1546f1a5e105e4dacef26732a4ad2cf87c244b0d3e1f54cab2c28696e3166974048b575cf1f9294d1f4de0be48d1be0cbf9547987bbfbbc6172007caf565521abaed2b66fe91a674bddebe0a8a81530a9c08e39c71dac83b90903bf0c00a7b3b27ce9bda8869732c87016ad0b2e7943c0b7d10e80bd8142fd1f26d0276ae9ef096f51b1a4c8010da77ef55eb492f838b033e83e39456faaf2c806b03791ad1ced4e6a19a68eb18112f001058226a4af7fa7a5353cca58b676c98c7d566bf5ed1dbbe2980ef6b5f02cb54704de57fb089adb4106c2902957675dbfd827aa454851869b6af166d3266ac72ec17c6fd8926ed8e753faa561913ecdebac91e41d7559cdb7586dbc9a084822b6693f584880dcd0a838ee94dfedd1ef492250448891c51c4c4195182d76eef6bd9656e831bee8541b56f0ada525f2b5e12166ba4fc9bcc1cb7b66ee00d82841a30a80ac9dfc80df937521316fb6e22d9493421cca1589cd95ce03193825d280bc0d786ea00f12e196ed957c0ddcafd9cadb26986a9426163ef47f069be49aeab76d5b4ff7a6cecb71b10a980208123a56d96953d8d6a0fc8e400a73318e0d5b214cd4037e03d40cdca8fb7083cca332c5d4bc212ffefaf8961bb7eebcc6bad67898d8a40f3eccae147cecbcda21363fd5735cd4a1d17d8f16fb68fa22ec48c37a61f763b87b7537ce882343e126732184fc0806c04abb0f1e327defddb093115f6330a581a4328e4c053d301d8ad3956a3330af7f62f7069aec59ae9e081dcfdc37380bb0f1344839f785e50c298c638db60784cd19a348800116bc4cacc5470940a312d97b63d3e81dc285d9aaa262e5a87f12d0ed913090abe119c0ec96e3c9c06a21e50a47a6af8315298327b692424b4825ded5a83abe3f2223fad1cb1e72b287428425c41f07131a2cf746bf22103ce39cfba901de460382e2222b9e1b22d338602cf3162eb01e4368ba4ee30955bf840698179b782415eaf10a0f37bf79f779eaf674ce89841753fc189f31fab8370eb4d8fb8d6868b959d26c915afdb50433d9df31e8c6835d07144351b660a8cad93bc8c77b2735727fd2635a75c518ddb5e4449dc9070254fd655f58253459a754be93ea1361f6143773bf862e7fd3c7a9194b41118701250c70daa12662bbafe763ed134ecf73c99890f06530d370ac210e0afd86f10ff64afe3cee315f226648a7947ccb34c217ad552e09b0d282d1745cbf9f85aae5223d4eef973bb673b8b54efd24cb4cf804013b1e5c72546ca7742d3dfa4e4d7c858ce1e44ab27ce9a9091c3ee443f9e60bd37bb7e8f627a79575fa38d621dcbcaee65d65d1cfbc9c38261d9e33347ea7f9784b64142d53b99930bbeb8fdb70f84bef5dbda09fb050f8b21139818c48e7262f70d6ad24e745343903780398ffd19c3b2c39df012e834bdd9ed2928b4d68ff4d91ee9214aedf19582303002acae7e5dbaa881417c8934d49707a3cce44e314ca1491a0e365c4dc335681a5b49dc32db882b417ba3665e7ae0c2a55f0fe1041679fd9d87aa6151ebcf66e1a152329b9cfff9e3bf6efbc5a9fb5f26bc83b40296223e01fca2f89b7ae0a0a49be36f2d5a88ec48f6559bef3a7bbf114a4a339d3dfb4c70ea9c84fbb8420f2fb2e8610a166d03a7199fbc4afbb0f5e11a38dd65db759fff4a6da3e22106b64f03abbf5412a385e3c88c60da7f7bc5f4f8662646dccf2e2363902285179c4235af62296b81698ef141c9ab9e96b3504ea01a48b0fcbb40578f861a59ba90e111f6eb0db8f7fdfa7d7dc66f85b99598e48e37fb37425eb90c9a78947c9d93c88236ad1c1ff87043b0e2159b7eb7fe47d4d26230e2056dc31746e90662ff3a1494ef9843ccf3361dfbccc38db7ae822b1ed82a14e45ae12443323056bf55415e5aa55debf54f6fed753b3f20643308b925746d217f80f3a9b9a3252327f5016873b5d1083fbd9d5e5b96786030c501eb234e11a751a8bf7bbe93f05398b19611958762bcd27f555c7ea9f0feeddc79fe44db83d144ea0dd820eebf54f04c790094603ac7d26e83ea1dba766b5f3e8039e3308016d0fcb87d7b73bb7420d918d804e5760179f1969dfeca4cfb1bd515ff6e085ffbac2acd808a11631fb5dbc76a04626cb04f46db5188ed73b22d04397089c9e5ea3e439aede9abccf54b6b27c06b75f424caef52fdc5ac3f9bd4932597201558a882a581d481ac4963ae7092480733d8cdd743330d7a8a4d1c0689890b4ab2d0430b309beb30cd23ca1c2a4b09f11d489e2f3075604006a5998346e7e69e8b33580108965bcabd09b756edc54708517dae768886665a9945d32b7d159f64fb280c85c3a1e44ef52bdf79e3aef208efc83556ddf21311a356bd8fbfa719fbee7616359d07c9f9a1909cae6b76aead3398ba85bb068322e26c45a04d1ee8a9c6013604cda9afb2c4bd3d4fe48ffc15fe566d387530ce94508cce5e65072bb98250ea520a3364d7528fa9781b326a145c254c4e468b5b7ceb30584bd044740dc1dde2eba3dafbcbf3a41979dd8cd3fa158c2c5155561a6faeda1d954090e1e7ebda0cfe11a394db2f3a82f11e0f6a1fb4a409387524144c3f77d719a16e919f5e6ba24319c7d090863d01f6e602acb1a25ec0a61b5399f308774319986572672ffd68e7c5d9beab4e6b439e49dceac81964d001b7d9d77751f61f751a6ddccef97670d05c7bac62d46bc31a8b9403ba6517195db92b73d24b96778ed1d5721fb6ce1ca71e14abc7031ca0ebfc91ca9a6e707e7119e33554b5bc5dd0739eea4288fdcfc2c0d46dda00d6218dbc7d4cfe308227f517dc352d44db8cbd6eb46d59e8f79712f4c229bd7a7bb8447fa78623f64482e411ee98065edfd931c7deb70d3b74a0f7c2f8092d5e82b3aa8d227576160a78881a0251a45a0a266536e375a42e28eddf7ba3db07f122e187293c9679a5800e2b2c2d6347012c103fa784b57aa4b7712ca96e8f1f16d22eb3863aaab76c4eaead0146bcabc22277ff17e5f7d7440221d345d30d4fc64e2b9d24feb8f7223f196431fdbc8a363c3d7d22034cf93a6f7d2f998ba59d0328982d912b7087c3bac6425cde716fd36a39bacc76b57ecc14c7144e0a1378cd323a492c892575ba909c5c3b9d8267356f8f3b709f261170c510fc1d222aa6bf446d880ca14ce7e3fd4ffbecc3dab974037f224ab095b37dd772276fded458e38292b2ea233325c3b9923867a52d346d942e351c60f3fc4e172c36a4ca027269da3036ea19161e880e0ff9728ab9e4edc7919726c1a17bed8d14d68dd8a69e67b8130e14ad2232304dd398d35b36c67450b6ba89d564acf802a3a809d49cb4bfde1838dcdf21a9994078ce17eb79455c72213e196d10e62660bbcddd86a70452830ec27ebebbe19f068540bdddc0d11bbb0b2e476a03efe0cc12aa99aecbb21a2f80dde5fb60c39d34a724e59b7f16138bb7b2b1fe990b8f4085a607fd82d604d32d593ba80e967f141ecc7696e26a86c44d79247cddd305945597ee48a8bbc5cdfd65b404c8a2c5ad5bf2ee7e3a22b59bcfa2cc10fb4f8e829b3af4ebeb702bd81fb72e4aaad93603d53d9d6dd97bfb9231bbcf745cc0f6323c38b351dc553b3751e5e3a6777f046f0c6b8b357db6f256386e5de35d73d5fc0fc175e04871acef866e32d2215a7a5f0d2dd63147c9d8e364cf829da865eca426ff066766d2ee724a87c1dd869cc20c4fabe53c445ce9cd045e7b5040cb6d3eba167821a923a145ce40ccf751cabed3c73f6f594ace28ea84efd5808c27e355a17586106cc4ea8edbf8d049cffc860042df965b23416d14c3a564dd7c681d19a6d6dc82edc375aeeb41c7fd6ff47558b754cb18058183e15f51c8f5c9ec6c121e72e8602d2267eb5789ef751db4bd8db766dc997be3b36577256607c229d4a15f2faee4db1d568892dddfc5828906ade789ca92a2dcb6ddc6e3b7b55b4833506966948d9d22612ef635b7a4be0189a007d30ae2d81c012af53658da7cf2017c7b51a4d9e7109eea088a27e390bbf26961a996f31a28b7acb3f05c7f579e98d575a2aad01870510ea9de0a5be8a8aa50e699f56706583308d46912ef305a7f7b75c5fe1639c675a13ccd7029d4348992a3d842fe3f5e8f22c08455ca822cccf7fc50d51ee426050524dd9275d92e102dfe4edc74216ad2f22645dbe04d4e6f23a052389a753b1cf06b69c1c6eae7006e66e15ed3edeb53eb5a752577fd7857c6a8a9608e37e220b650a43e020e7e7994685363966a301e7ee34c54dd6b06f51589e7f060b089cfbd6d50d84e4e5a5e930dc24e30c89cdc02c32decc0a7be57a8e6f7b981a56efdd45c955c5b61464d5ffd141b426ed3786af37480fc46d954d7f5bf45d8bc5b32022666c721c2a713ec965873ccc25b9804a0850d2afadb1b3901d634ceb92120e10234a4dfb18e43489759ef03d1ad3e9958cca5c213b418f8069b7ebb1d28f862815a113dfa7cdaeabb9c3cba3674895932abe1c768c8cd4e5e835b67acfd47beaf1f604bb68de6dbe97423a55ed88734570de92a659abc2d466206b6fe465731d239c078afcf79b56b64320f4a36537152231f98b065754de9d427506cc8d9a1fd46d3295480185b99326a69ac374f465159662d166e63742ddd5407392ed9ecdf97e18c5b5b006f2a164b95ff947f78f36916e2209c74411078bb40b018676d05f29406894133752d41c1f15df34db931b705f57bf8d0af26b2d790bbfcbb0d894a9366d917c13c74b6c292cb7c86a2441e5d9b26c860e05fa08769fab72605cd9252e73a946a41f2d52d2ad27128b887e9ee04f0bc5632a316547d8f2da8745ac19c951007079b297fdcb53be9bc4a8adeba7b341dfab9f1d53f355a557d71ff9b5a749d3481de7ee628ac0b9bf6e0adff1c4610e64d73ae15f604730cc613d5ae38f3ce66f144d11995abaaf009856496b8f1ab60c022f9f4e75c1039c930812c9c9e69cd193a7ced39da38a444d29729dab7bf699d80838345d19544f9b91f0e492b88871f5985a7a184385035434fa5b479ae98e2bfbc04a71ea9090552dcc11ca0e34ec6dc1ed47f6106960b493791a8802495f4da6d547ea8fc579dd168f341c6f3d133c46a8de35eeef1f58ffde6ce7ccc148549346223dd465d37dfd9c30d155d1603ab52eb1623a361c0adbffe839a39921040183f26807d0eeae2d25012092c666a99e0c2c500c116eba658807847ec801f015e5bea4a643fba12bb6197fb493ce255d606fd9c08708397921b6b08d95c4c6521af9c4958148920b70f2234718e73442a45c930d5137b4f1f5a05eabdc0dddc1a219079defb2d51a4b35ec53416fd984fc5a439baf221333295b6db0fe579c9d0260e919a1f40ffbe88c68c258ca9a330428d50b22a60dc30f2391c9bcbc9f02a2cb8f74f00fe3e7cf0fc6870fcf17ee37a19abaa771d2e7e7906e52ff55d2b20bf57762ec5784584d83087e41e5a356b4f873bf70919b0a254529ef46e348eae951fba12a1aa87a910891d0eb8cde30f07b9bad73502b9a0206aa5d49dc5d59f142c9c99d84749cc1b31d08af2cad272cbc30ac157bd4dedd806df6b5cf40dc62d6b6c011b63a80b889b5092cf3c6a7458af7839c3b8dd35330f6fee11145fb95156f9a999623b63317aa43e19a5661aac56a3061275dc341e474664a5297ddb94c9ae96e905d5e82a40fd906b3bdabaa58b95e162aaaa4658c66d9a670e4fec1618a3ade036dcbcf70f8c06040740a99f0d39ebf5c5660c7fc7cb0428b112d4ddb0351e8eca9b7dcb0e380ba4016a840c458fd7a7f8f5e1db71fa18cd559d22a769df0983b7d97792202afd0c3fb832b0f73e0d52a7f2ccef29d0f3579214b64061866fcfb6cbae41e0e240f09122bcc64447702653528e41a6ede129237f417966e2548f88833ca51027128335a0aaa8209cc9c8497bf7b94e257debccea9a8ea39338c9304e3fc49f608ee8a3c17ac33d6a066d690d0e7bb57f837803d7b1869a257f0415829a6e4c7c94cef535f43508cc2ebbe0fc5224939c8d8f9af81a008d8906d19ffe2bb2c571b878301d8f266f65cd640b0600eee87f500380036f6b22879fe90ebdeca3e502e382168450d57cc02a837fe8cc570ff8c6d5f4ff96704152bb1a899e037eaa6d52df10d2b354a5f5c5435f5ccc9cbc77c4680fd45a97d38f750e13b74f9944f0695ad21a86942fc1eda29bdd8a511f035ca16fb63f07cc67ce57304e514a245cc1506c84729895a31b905bb05cdf9d4416fca8c9bb8047e38d97c8c3ecac2110db88d3c1ea7341233e44f3b7cd764849d3c53ddd507338b6b38d036a46190be237f0893bfc63ef682d25cf9ef679bba55eba7ab57da2cfabece2416554240ab80028a54e56fbe498c5ab5eff07c9a50d6aa55879f581cd11b34201aefe281f096d0679d0fd6390c2274ca78b5a7c9f9d6e22dd856c19971838c1a67e4df097bc4871fd54bbe035a65cd348dd3ecd45e5d3fedb19b84f6601ed56fb6ea716d4db3b3906eb2cf536bfa6268db98293a8639a8fadfb91211630ef3f25d73e724d95a6ce619d7ee4b21840371287d9409510c4f03ec34b1ad4058c5fb511f1a9364ecd573e4e4515620cdfda6d4e26bcd9deab07f82d45ec95ef06692e635216fa8d47fd4ef22d119f2a27c6f1772e715784247ec60a171314f23b0e9cc5094acc230fb2a47f57dce7d59edad3a374cecd71dc66a4f772c08ff55cfdefb69972bc33e9e0333cedad95a63189495d4349a3d70023b66dcb406884b635eb978c85658cd9904911e32d865ba8b22e4f161a7813ba957362703c956ceb5d82e8ff24ea3f442542746c6be646a95f0849a2dc5d3265bda9746cd1b9d2b6e1da55c0a6da6922ddb3bff59bdc5223eefd47bbf34fe130cdfd2ea4e60f8fb056041fa6f9019d15d5487c16030c7487a47bae23b4754debad016b540a88e38d9287ea8efd445033c11cdace09a3878126823de69c1dfe0ce83b7b75bbf2b063bc6b2626f503e56912c5f63f9a5fbc4650ba7a639bda01a675aebc077be8ce543ea8f9863d267aee563d37410929d842608f1f168314272235760e841cac8823e96832209231dd9f4542f4535a5d5e6c972d6a7644f395bf88a844ef11617b6c1b63f136b3339b52991006ea57a8f04c0070cd9ceef9296f9f248032a0c1ab2f4a6fda93066185124918dfab65cde3d33d24bd8e5313256a885a652d1837931af5e9cea66d34b3f2a37db777f7b083f4e1f24d32cbefaa55d378622f2665869efe0377be28f61dd4fabe8245709b553f7b83f3222aa1b71d7d8c635d043dd070c6983df0bc9d5e539283359e651fbc40e7e4644f6147ea624a38f8678da94fbdc597d8ba2832232cf1a799b2a0b453827039038578bf19b02446f3df2d17e35ec66ada708b6831c1ccf3e5dc1985d77d204db808ff1a6e0df896f9e9821da169d948e7e0b687f1fea93b4d75211bc75d646a72980cd084a932f86bdaf3ddce108579abf7d384dc75501c84e32a235baf83a1c21deb2df68453aaee82d2e4c52c9104115ef3edd9f5c5362af3d47e847848c6986fd7dac68252fdc525107372ae8ec33691bcc71d59a021a4d7687239953342d421b775488de8c5b64cbbaa03e082d31cf8c4a4cffc96257112ce5347b10f8f584cb68dc7d27acf7ab8ad8f54e7ba92832a899ca5833b87c5e70c03e5e39b91cf15e390f0463cff228898c5670d6520b1331aac007d836f6fba2c3ea96cc7bf45ec68f90866ff1e3976c3b8c1a9f4b2528ca5dfb0e98d7c0a2eef5dcbe5e29b80a739081f5cfbf3b3fe249148270dde46588db249643bc02bb750a6b9b1816f5ad550df6ac75cd2a3d302c051d1c390b067f9d26c017b3ad68ac6e4ff506fe08e844fb73da28b4578bd91c0cc399070e72f1e6092c5be1cff3a8aa384f5b666187bba8d0bd8f5e5d644e2d9e36963e3cd1bfdd347f37a97877e244ddc6697fa8415819f34c7e82541066dfcdc98138ae30ab95a431c1b8b42dacf7443536d92e9b4d2ed49f345159234119fc4904c8544d6870d195bf30154fabe97bc56a83e71b276311d9c57c1d26525ab935cbbd6ef63c3ac4e8a4f83301cd6675f10abc37277f3789ec4adaccc0b65961ef2e84c31d7b26c78a7531944a9d46be94671635fa01ba74e6cc0bf70cb11f9b12f3f2e9818d4acc74fcb33bf2ffb015a54cfdd73f0264df7ab1636efc0ddae5f8c181a07e9534f65d383432f433b100f88e1cdc326d9a3c777f316a7c42f50785994033c21c7206fa59c392278939a03029489e80e7631d027cdb46dbbc38a9d06dacb0a40878a13e1c162a113d567e99c2c015e0f95cd0318403e85b6e60d645c466d3fddbf8f9af20877318695c94a37e787bb760e73145752a99c9cc6493c0be5f4c0913cb69ed2a1f1a5fe61ff3ad7d9fdb31c9f8cd3d96ade56c84aab229da580914e0237d94af849ee2682b448ca47f18dd1304b12d2b3ecb8d8a17d5706d77f71a6ba03d4a93b32d526b77651f43f1374db9ee4f156441159d9ca7b9350eee15e8c7afeed1e2875f59ed06b07ca391ee49863378f8dc9892d11fd6bacee5a05b6dbe8587bff211138fc0a255dcfe6ae41bdf5f1398e85066c837cb56c0de7517aadd1394e4e792936bdd1af7b1e13566f561dea72166e142f4e23dbb6e1619f83f79d0ac543ae49f483ea74da1ad6fb0cf68558211e1852e0698f903ea88b1a548198da0ff20cc34a1727f2439853bed329d5a9035843d0e66be12a66759812c901b7a908f6bfd57a326a483c08f208b5d766d288d765b53b414332ad1b42dd19e9fa64f35e7e115a442733018d56adcd052217c13c5776260cd048bcf943f01edd29e013c94930a819505ae8ac8b6de243188fa332046a52137cf0dc7bb3cb319c0b3f579728d7a7825cc57dce3cf68234b18b31617f84ca0c8ac5c066c17b7eb19dc4e0aab8e06b5c77637e6a51925d9dff9603810edc8c65ae1a0522ac3d8cf6f30b1741c846c8eb88a35ad396acc5ebb5c806e35da0e43d5eb1b95922b6a0451f5f80f267128d6b87d08997c99d40261c206eb338fa1209dd5c72574472a36b3927d7f5394ffa00907a0a7bd87012783a32d2f7a065d837590e234a2ed150e1e6e469693ade145e8771ab8d886fe1aadba030e09fdc9585e0eb773e0ced23d3d6331cc73e8f988d39f0cee4e34319413a64a02abedf72e8b8bd4fbe7a250e7af02bec0ad031c9c845d521eff69d4d72a2b6c3bc30a8f0ff28c54bc880c386e657f5e9d810f72649bd43b26b22f30b791c568f19d51dd9690b8902a55cc3df139af96f9c9d84eff70334689b1eb12234634e7f2f3968f41f41f5889dadf5a4840c92ef2ac2f1d796e0e6b8afef8addb5ec5ae7ad52e6ed7ed64602df38e2a5375b7443fab18986a92de844dcad9efe59f8a7ab48ee39f9fef3c8933740653c2aa45a9ddfb9468da7da3d6427418765584eb7e30c967f779ed0843bebc7264e6c88324a697ae6df8be1a94614b01813cb32d900a75acc2209be09896ee54576006d6c4da5a0388fc07ad14a3de42bc77c20e90f930d2126b1a239c3b4286be05b979549650c90f7723f4484c6e1ab358bb0e89fd25b3f1ee82cd92c2de3dc7f46bb23eebdbdf09907b09900403781109bb28ea30e44ec3a4884f0d4b7e414bb75f6c8913776bcf7ee18e9a4156db11cc3453f2a8be55eeecbdb6db9f3b65e5eda4af7c82d6413f36e8c1a9442edd839197a5c7959436acf0a366904e9e990f8ea6510e4d5adbc5bf6cb56f1216dff060dcb302fbd2cc3e4f2b8b6bb7a4efd59a5c8c41e19ec0d972c50d67ab7e83aaaeaf2e604e5998b0562cb9aa2284d400bfa8022ce169bb0ef561db87481b8e9967f5eeceab60c594e0752c24be5b9dd6a48f483463d077d10c601b5f30b1670d4d77e998fe0b741688147b4e590f3b1df6c30abb0a67abf0aa8b6a4b99c8d650fa1e4964e099bbc2ad77f33ed9294277eb62f84622a833503562806e02190adf68f8ad0b95276f309d79c77cb210b320b76386dcad7b57b9e84ff2f676d04db8299fa1c2d5e191640b1cbb6916bb9596d86725fc0d6339d60f545cbf675f3bea0615d4062e13fc7217134b18c737e703f2d6305ab78b0a675ee5fec9410f274fb5549ba0e35505caa4b424b7a294fcbc7100c391afe046f0d18c57210bd7958932828218e21d98fe460a9c55f0603e89f5b3a5553c09291713e9a862875a408cc51dc280d7d0228be57cf451ce104ab4d2174a72de0032df023bd5e5db64e5b3881958eaf5fb31ffc3003d498efc395a9e213d785bf189be5b34807946bbd4b2888968eb6dc07d2dd216f2a54a8e1b0d7584759d4a50a28bd01f1d0a4691d03559e05698113c0ee0aeb0deee20fb878e52bc9b673fb16cd1496c5221de3f3dce33798bc5be118e8bd55d20b43d45fa5f59b9378ce7279aa28160c372f1efc0d3683358192d92c6c4b8ff7041b20c98d33ed5a6e4956b12d8cbe76a4c886250730d154fa2f0950516da53f5d311270ca4f828af4db810c13a2b731c90579dff6c958790accae1a422a2fc6dc5e4898f0819e95e398d6273d56799c8ce75ca4fb0f1dbe8b4079390a973e8e1ac0da39aa1ee6bcde035980ff66c5e464077831d987937b8dad7f344b40d300de2ab350947086402eb384c8fd1cbb81a5a34a245c3200e4b0b59b50535c19e341792b9642cc5678d0804cd62edb08618ac35af00cf32843e228652733edf1453a87c1b489362a99c72971e41008665a9938ce68ca3fcf1966f844a89a00795654d1d4a5252148e84f2b3624d880d1289d1378985b8cf67ead8c5f341c998c08ac6c6beab648fa874c16936be2d9b547e88527876ad3c8213218bdab9663d17177b90cf9f01cc95c0daca3685a309fb0d98e8094ad898b5e4d749429f329f9b1c784a37c93c437e2e8904fb8302499088f7414704e3c34005e72ce7ad0eefc7c413f084b486b2be076e7cda116f775b6910fa1d68e053ca1f64244d3cc3e25ae3f91e66a71409fbc03964dd6ad2439e44e65c693a44a2812a4529c50b46faa2758169755e38c27fc79b6920372b14a4c3cd1aea506f96718d70cf9132e63c13b4fc9124341c5911f656f8b66700c215536f80b13acc6ba95d9de090dc426c1782b4ebb56250fb8a459c18856c25eb2bd20dc8ce96e5560ebe109191699d478f04864e84783b9ca52b8586f859823983c02a72fd35c80adb2da8116eaeb0cda0dd3abe605933d235fc0a403bd440c107180b96c0810a95991cab68b32fafa3fda10b7ac1c412140a8f6e76be9be3648450181b58b960e32ff39f3869111fcb5598d1c58b4df61d4f9a664bf392d10ae2c3d98b34a84c12a0f1f6699aaf9cf3ee1dbcff2669eeab80bcd2f0b86bb8271cee8441474ec33eab08cc32710e8a7d3bacbb20ea38f3bbb8969040a96fda6794a74bf9112ef996d6b8216391359cc500b77f7ed299b55ab0eedd6a19bb64ac0b43722df91b3c60a30df172f948084513bf93b17ae55920c7e6591bb75952a911e818ad01b70c9e1e7a50d449d63abe901623635d73071ed0d57f6284a88d2f2dc6acede2eb65d955e6e21e22c4cbf0fc7a7913eb2599c11601f1939a31f27904f809c0b5378634922cecf316c7b1d109d088b21e43db8dbed8c4c01fc419aeae4ec8f7a4df8a2443d29e10d4b89c7243dba5c13712ed0a5d25280049b482de1faf8a2eda9bc21923b565fa7a75084bca18fa2d2d337c7fe059fffea39c1b823a970fbd33d1c111a48f3d92a3a460f52fa49337d3d87c9059b41d4d6955eb31415ed2bd9432a9396e05707ce3cfce7525724b58512372ab46e4ceee88a743b6a2b0a235f2ddec5cbfcab55ee7ccb46624eff07f13118ef274cbd860de4e741ee6a6e77a0868377062209e9d51aa5881c5907b706063b21080919c6988c4c5df6ef1a24fcfbfe371aa82dd70f534cce382d0ee94204b98bf92c2e3deb29dd46f9f3f76c947de1284e069831895dcb8bc3bb0d7ac58629d6f5816bf6d4c25f7a7bfb21788632bb30058e29122ab8b514d879557ccb001adfee8d0f93c17f081114609087b94e7c44adc2d43da10d6f86696943d5559b91f805e73cd714f8eded93c606ee167d469d62f2481cb78b20f4caf26d105d3c0dcbb92246b969ec3ada23204cc35b1117718a40ab4656d5a8508a0511c56a0c7a9c0535c9ef57d1dfc5b5022c27264bcc3253f059f9272955ae920dbabf74c155b8609a32a9fc7f67b395fd7263cb3d878336f5131217e4f3a95558940ba90da83d06863af191ea909a41fb4eab3cd0564113ce2e33e039560592aea729c310f13467d8e00574927560a1ff6a9d5f677733d1162732c3c2c50db464fd3da8255e14460b4dc8dc666c2d1da88bba8bdc0a03a76151b9516a24530f2615df08acfe4d8ef44c6ae46c67483374012554b0ad16df1ffa0bdfa0c6f36b1e01160132f4a6d5ac06ab289acbb097636be527d452dae02bf431ccefcfffa4b7d6d1e9da497f961c2a275140b2d821450fffbe002d0c32922a9c0d36c61559b4adf2d3dfdfd1f8211bc007488b2c545ca26ff7ed1a6dd362fd7f6e3d6ba9aafd786ffc816d9099cc8fa4b4f1984dd1ac998a425b5fcbe09b27d3a0fbe8c0092324362a5fe9f83078eb4ef927956443cae3cf0523cd13951d2257713fa9b48bbe91dca59c6b6769645b6dc9ca35ec11f8f506d45b04e93077646d9ad3325e5fd80dde0ba4cd8877e47446ea5a235aa73062a4e10f9a4e42612a62fb69d78ba12b03703022919b0a79bf69071201b41f50c28372d14567378db3b71928fe2b686072310185868f7f19745ada397ac3953b3e66eb0c290721419fa1b5bc73635d5fef2513181e8705ec5e0ba61dd4e926f272ff226cfbb823ecbc5ea76db7d7de20688c01da0f5652a57f01c139ed9f341481071b9b928267dac15d9b9758f0dfb8a37d16f94726af9db147e97f6a21294b913e4b160bbf195846961b759a80b53852a1787644814ee1c0e70b2e39eb0fa027164f4e20368a0b848008818e645db172b0f0a61942f697be0ea3ea7c009739b153cb4f4180cff2ffe0592cf8ff62058411ccfdc0d6a4c1ee5867b316b37caf3efeb4dcceb9d0ba9b14a0e831268698882c4252d8fc2066bc534616615b40dc50d870aeddac69de141001b335879e05cf809d994d8ff8d351bb9c60239025bb10250ed6a3909181637c04d2c4ef17d50e0e80525bd7ca48e7a2dfc30bbfd810156e3deacd2134d58b326518ada5ea290235172f7970b1e7aaa5631010da5283b8af95a18ee58cd761a212c23436ed0a25e6f7495f5df2d0af25115706f1b2892cfeb03024a61d246d034e21da4302fb11aeeb28035f3e4962f9ad1eeab109574bf384f7f7038ade299a215f4b7dd1168b012db3ddd8fcba3498502f474de3d96507f0325fb2c249a5dfbf25724de064335893154ab47f5b8f0d0ab28a99ef22b139d58dc4f7f9226c0b633dfe973d9fa99d9487264cf866ab1e06c11fe60a0b6986f63ec3275bd2e03e7a5e02d85681bfcdaddba29695ea0883b937bddd2705cd5012f58667586eae5b4459d2cf032a58ccb4cea4667517e3b4cd3481b970af32027f63bf4adbc86939cf03a33b79e3ef9e11ccd6e3371d4fa6e1da31321cd4ce55f9c2cf4e8f6735bdddb581f5b384204decf5d25d88d87a8d58edaafd656a27c249ca4ef17aee298931111971bda15322e7a63a54e8eddfd5fbbc783b19f0fb6cf7f2d6d0db1a8934f210c3b865515d403c16352c430aef7c31c26bda84e67c07e32a8a17c04d7cb830206f7b2f82a8f1841095a3b0f3b7c4fa757d86bc95290b39ae9ff155d1e06c38d4fd28a6545c0a16fc22959e20b929702b7cef4385814ae63ec5755c51fc293c7dfcb54196022c8050cf4f83de4386caf917cfaf64a96fb2c314e7ce31eaecf8fad9d90a4dfd36246e291e11276c7a901f5f31f36cc902126b0654bc223ba7a48bb4e4ef196ba27ea10e700d49368771fdd2de871dc182bd5a2142204827515129f45cde14c63f75b774b34b4784cdf6d7e3c548533cac156fbe6c778f765b17f0637c678274e52632c7c321ff38e767b2bdf2ea0e3579acbf26135d5428bd0e9360cf4764507a5772dd43230f14e5149388199af1550f2834e92c66425c5a6c7fe14e43f63953203f2575f8313f4b5190a0e94a7e8069e49f66a9dcc20f1ca64dde7cce38c5d14c70ecfba29339b34eb3dac28b018585f986354bf816c253ca92038a41410ab36a753eb0eaa6cf6a42263908f1ad9ab5ac74da4907d14449d3b63b57d08266a0c0c510cc21ab3ed6c39ca0d7a2f7e820d4ca0582c5724aadb8857c5994eecbfd0f3757c06846bb46b9b901341ead3b72dc2cebfe493aa19e9603c65be6a5637e5626386312d40e70ccac338ed9955b3380cdad28fbf8381e1df45dd7cc3c7d1d515fb4c8f6b344a8e6e2cc58ecc276b1c0e25792cc09a14a6cab17f7e18e26a3740c8939398947f207018045960f147d11cd3d31023f903e498cb92455416b63c1e852e0d9bf2be6432d353ba69977148eecbcec49bb23eeeb1df3cf0d0093993028d5900a3d8581f417f84780b8444fe9d9aa259144a855e5bdb9dd411c3ee2426d4727340ef44ec4ac6f238ea39e8b49d2c984dbb264f638e24a6f77148e81f293e53ee41343ddbe85232153e0bd08d4e8b7d9affaf2587f97498e5f3ff996c09518c1dc1353b3a1f579300aa7e8c8bd552c2620c09e5a1317d89350cff90973c3500dbf5ab27ebd4e965e1b928a74b6919c58d19a2282138ed95b730c2f7fa3c90162fdf9f3a648b481445b0cc5129791dca55339e0732c66599dfa812c8664a0a8413d5551541b9f1e06a4d98562b04d35b2c5cd50f0751bcfeec81d18198a6eb01d6574f5018e8b105e27b2bf6f25ae0c1fba64a97b7ddacaee020ae9c6b6d5e70098a06e159d5d3405faca4dda438fa59416f375e328e6f8795a198bb63e76b56d9edbf8c04b55b5a5435c210f8dd9d9326a3b053863694a6a12e880a3bb64b1e6a18907a7c668a797ba234ad5325fe50cb08deec7f4b8dab750660a23d6adde5e5fcbd06f964b991a8179cf4665e144e5a99c92e801b8160aee1d9a81f5659b4fbb434e649d8a0d7b8510c56229f8672486b80ed52037e33844c7c72d59a62e5249ad19b56a4de43a0a5191808adae08e37a05326e8ee214c55c37eb662a250722b343abac52fc676aaefd626d556783225a4185fe563e176d00c0abd39f560503ee4b8b0f8a48bd4d46fcf1efed13a6743ba955c7da19a8362c829cf58fa5358a652e03d74ad8bd13e25a18765e1b0159d63977e96fad523520e5c58abf08f9d57f89e50c46283b01d4f8ee57ff91cf186c09d1981e78a4b57d3d8365a589a97eee8f7917b9f3742abfd00cbaac343abcf32f7ce044c0e4c89537c20e2f850f46f5a13009a5d97a91ff88ffb4d597d848b6e5981b490bbca282a906047b1c5843648c73e390186486f5b404aaa3e5e524e31d384a4e2ded3257cc190de7c8d3f17df5b773dd4510eb3c798deb3462097895b02a438254ed759f587f25b6a0f560abc086b7e29b5037b83e9d0f5b8d703d702505ea99aa2100da8803351b41801a63efdbace4e4bb7874a5361fdc09052f51b8b6d5f46a03be3943560ff619ff546b67a4719b231a7cf8719cb58e1dd8af563c9cb7e37b2492e16ac01efe1e3f31fac3c8aaefe1e53519e1ecabac27a4a112bfd26ee3a77dce8f96a3f7349b7522075064b5a8eb3e3ad5337843028ebfbd035b639fd4dac77e4de8e115c2371d48bbb384dd75144b57c37bb665d32dc3639fda0c01ee26dba318450987a39287af1b605e5f3a8b2bef6145b5949b29dceb0330b4f4d1d5d07febec14dd15c788077757628f4384b5160d8e1b14e3655f23fd5340f956fad61a36dbf58c6dd62fcee3122dfa3948e37460194dc5054d4a13c887627e69920cb69a8aabc7662ad19da6b571de99c77403871a9cc7ab85de73718790e028c5d2683db13c39ab92cdac838207eb5a26ec638fe0c837eecdac7f3dde135e043aa2aaf3db5913776e1777de8449926f60737196ce7ac39a7ee7e7b45417656c923b30943ca2805fbc7bd34641701cbd1a34406fb014ee95eeaf62f179309fb6517bb57681ca61a81360b8f8ae641ed1c2308c5b8ded01ddc85c08ce018c9710058d983441eba2604be0c887b90ccf2dec0fe0d4296b7b03a112233f1928153693da3534f6ee3e2a5cbcf964a664769cdb68fa32fdc957fc75dcfde9501612533e3add6c4761ba9fbb6655bbcd1816403fb271e575ca88e66efe8702c017943b06592ba2ba4806adf632be27c183eaabe11d008ff91fa389cb2cde5482f73e843050103b7caff96d19f10986bdd38a64b944af818bef9efc5e1249137ead5bf6efd4365abfba9b44df9bea4e1e45d00d6e257799eba79964274eca7d1aef858614774f71395690b94e23b6982a2c421e57c7a28b4c24696a0303aa3ee8fd1fd22aff03a796cc98177b4872cc7dc336551cc7c835870c3f8d3ccaea3cf48274874214423fc8995cebbf9823df2e5037f54f3fd640ab0eba571980ba7239f10c531353485ab08a0bd4a589e123c5f9e13980a3f77f7a29061dec96a82e411f06b622b3598ee8231a5af8efb41577e7b49c3f76181ee9a777c0c5f9181817be53c61258f8d91a9ce8350e9e1f7cce93f49d50c0267c1e4cb88402fcc8b15b69a6348b43b6a6aff4a45d0e1fc62fd6397e6a964a052366b6e44a7c86e76153c0e9077ca0349fbc21a64b870ddd8db5f67ede96d416813f3261ffd77e75cb2ffcc23ae88010bb469066eb4f5ce8579b31ba64d0a269aa90c6b1383cb61384484d4b6523d3915e3147c793a9e769aa87036170449bdc727da83d6c62bd87df7b340d1108490e4281bea952e4dbac12139d44d10165d63091f9edf8c52ca2c3d93daa1806e100c5ae0116f54e1878fa0e3a5d55253175d4e9152256751a32074df20aa0dfb1f2c6f9c0a8d92c0f3dae0556c7c2afaf6da38a37541be4eee743299a9a07d69d6942b2e2f691c32ab04a0e9f55421def289d866bd5c2bf45f85cad9a758da8d824f61b7ae34476efa75d113cf58dae6eb7fbc25879e4c5d44942d639afdb22226444a54e56295e94d15982868d606f29031c61d37d1ebc160f745502d0ba31a97a7502ce05057b8a39b3b1e099808dac2cdf69bf4feca08c918ffec0b6136cdde821a6e9f8dc4c4f22ab91930250a687c39ba865b495aaa53da3bddfb3fe2720881cebdeee5749d50d95a337d61cba64d10d57cb6ba164fe4507425d7ce92f208accf2b0d56deeb1b46ca646f0544ee3a593dbf83bdeea303b953b57c754281eef2a8bc92a9288327dccf85205b2034558f45d2de4df612f3bee9a1315a38eee38792c1e5f09a3a151e71959cf3ccb1b0e33029884b97fabd4862ef42e732c1988490df79789f6b201cc14ac94cb52831c162dd8d8c36c5e05d4a03f3b2e5aac595ad3d2d033c87dfcba8ea3704c6593c9980301e72cc1f0cdf2d1b8d2f59da603d99454259bb1003b00eead827b2e980a84beb790a1ff74e01a6e7133f3475c51162ae904498675d3f89a5e1ad15c7913762e222900413247f2b8801e829b4c1c3d80474ac3b6a7e537cc149bd4e22c13a932d6ed18f19adc778f97ea86c1b4e7a977df5b95a1a09c3d5756293329f6bdf0712a05a7e857bb1518859edd024e2c6965db7eac584bdd80a6952686e789b6ba7b53fc38c5e6b071d9794e2d3b9805c20db46e0cdd58f3efd559e020d0a018c49de6caf576f1ad62a3ebf2b44ce20072f317845b934b97e7ae56907ef5190809b158b1684c547760478e33a786fe14575528b19ff850135a76283dfab6baf620bae6c3a26da48ee80ce5e733b6cb18404b626e8bda3d4fb4634cbaf7e428a05ce5e41253c43cf96831ea0b99d61cc96376056f9e05fa3092331445fc01a90b0c2d4d76f90fcfa48721cd837179caa56602b2729c5ab0afc12285c38e52ddd1548347e4b3fd63d5dff23538c4cfc9316a3775b527c03c65315429cc1a40039a9c18e9c152298c99255229da1206b9e6d89611127e17791878aea769fac452daf23142ad6f11321a8929dd11446423936db2fd6ea3223e0d11d3abf8ade6de3a798b5e17dec07d56d4129fcdef2d9c2ec84a9e7753fecf5dc7f965a327aae59f7dd3cfa33947b60c076ddc1574aa81ea78fa5d4c4e66131b990dfbfc8f9200b27f34419b5e55c5301cf9079fd3caae5c3d3ef47ed63fb72d1a338dc238dc7d2026ee8c743b4b8775b40cc6ca27a0df985abe759a79759c5356c667609ffd01e3814165560890f37b4fe2cc592efce0ce2e4b22dbf25cffa443e2c346d2b2563f9cda8121c3a27b2fe6c5bd61f3a9cd85b8a8ebbc7e1e43777a70b79e742babdffdc5902811a2ee9a9f28f13f78d9928dbea54e7708fb53415205e63020dfb7645817d5737fe3e5f97c9ce71b4c36a985bcd3e0ef683ecfc6b7f81cb429af45cc4dea40827cefc755096854a14097973a5502016f290bdf9b228e135edbb3c2f410f0e4502f058fda42824903145f111ae9703c6ff3393231a706888a052af8318991fa8d8d60ac09cc90260fcbb7e88b49519e50834e0d61a376f48c8b34b2c73256f4803ab1a66222c64a9e62ea564b3e8d80f048b1b109f41ca0ca410a945940a15bbba859200959b5b65b0c31c70f01d611e2df096c03e691b420f21b7be35a404e6ef0f351a140f9432c55e75f5c90bb7755a2c47b0bb78f9ae900dbf4be1117ef8a587d179941085f593a58e472ee9cd88cae4f67c73705cf0f9c30734ac9769bc071a7f82bb33e43ad7b6acb98df6920260391ff6a0813ac2ff664b4d5784f26568036874a0373b314fe0cc470d63747c2739e1e5bc12066ab7a512a12050ffb02aed9df90d2e852c74a625842916bc624290f9bd40947bcad37a634ddeff80971fcba21f34b791f15e2cce13981f28444f5c827ecaaccbae9d069fbb51ca3c3bb241eb5ed5ac219b46c71a0ece89756b2a1cb30a72bba2532a4ef851d4e3571ac256b244ba0d81f727ec060d22520f4d7a4696deff33f9af1196aca1ad7484a0057d48b77f71fcb222bf5c8fbb772ffda68702c48056537e48c849a85a0d0d991e733a0c5225969c02450413d52653b677630d0746d57fbd53163e7b66995bde6329fa0982b4c023cf29b6f462fd2c33fcc1a01d29cf5f5a3e2568b8fad0de60b097dc557fefd7338b30b13b77df28b0041f9a38432c7f98866f253e0e79d7f7d58e6b0857fb4018600457dd223d49422cc247a815c5af904fbe31b8aa0fed6d22335e582b9439f94ec2d3c09a086b5f3392682eac5819e346fc0136e2c185c582175a58a4384bffc282e91b120738a7a6a73ebe402b3907bedb58f2f116827aa58dc36ee6712717430921be1db875d77b8e9e7c655784153aed0811fa123456e003a6b55141f7c2ec064ec2476d9e2f225f374021e574c286f86ea940929600aaa2032cf976f203277d98984cb690eb3290d56540b9fa024a97cf73354fe0782626761221aa777228fe13ac1d56307b12983892e76b3afd04e47311f12d34c038d280433ba2be7ef0967ebc434b4bcfc6b6eccf63a1a19864947c11dd95768cb68c9181ba865f2acd07fdcc1f8de7af8ad7bd2354ca35a4cfe81fce105783d6d7ef4c9f4a3bb599c3895384665478b7359ef7df021c894cbf6c441d3e2c3ef9cdc1903c1fe6194141fd9a467727e9299bc53c53791bcb5aaaab98a422f408b46bc2db759c10bf118b7e7683e154386dfb01c01387b729dfb0153d5c54a1e0536375d1064df5095c432fa5bc41c4a1bfdd58f51bc2ecc2931bd25e19334afb53eb4acc0da2b1672ef763d2c6d55f8ace5ae6908171ff55c4566017b92f981455d8ac106424920048c80d2bf7558b4339f60bd26625f0cb4417f5664cdf29523f686c1fda4bf8c08d0670257d7aa55d1d9dc5b5b032a2a7777e2b5802ff07844ad2ed1b29a2a7b99c1b16b30706fc8f2f8c028c44eda598bea0eaa61d0171194c27a269d3dd8169b8768facf60c6244d4b4253539026a2ccce78258847b0610891471fec8cd192b2f8ba35ed7d891252b56a9f7b5daf593e5e03473d6cac2f585e7c769f449c64d46b52cce421a1426bcb3b55de31562c78890f59092c279c89f8b402b495e6c79e5ff650d7bde28b9f1d6ab2e98a495d8247888eec7bc1af04a8a44adcd5717f1bcd6602c23fcbbd8a2382885428e685c17ae666ed9f910cf11425ccb76e99313a52a2dae19d02c4a4e21dc11b6e07ee5d2490a775bbdb23cfa5cd25481a74f1ec811fbb99b8219799b77721f0188cac4a0ff00ad5ec7cf3921bee8bec7e932deb3eeea8a89838f2e0186851a708f6b5f60da46d21194cee599d633f651677c30245afa503fa95ecaf0891a1c8ae92cc1a05bf26fc1ba9cfd2f6585e7321c3cbe07930a389c1dbde21d5a6d4ee9cdebabeaae40f80bd5afab4166606459c21a492eb63f0907f12ba50005deec108555470930b7400ca1b1fee1b08c77cbe50b0aca66e8f905431f1eadb164fef3352b89f1620d78f503a713188e83a8142d5290f8f1bfed5b0c097f282e4abf00e65e20441a8293979689d5c44a945ee2da337b563a8380a650f5e9eb28692d7746c51e09c21eb3d4ca2d502838b2825a2d690c61eb4619fea122a75f73319de8d25b769a596723241bdf0fd097a5db835f55240ae5227cfe79231b0e70359251195bc1d7bf7bb166bc46bd720394e66f8dc4dacdf487d2af0f137212ea35c75e54dee76dac7fdc2d1335f6b516d1cff3749f62819581da313807853d90f7fdab3c84e7d4d4a6581706d44297212d088f2b4e6dcdd1b15c7544285ae6fccbba2c581d61491edc8f908fc811dccd027d61dff8b44549318cdd95a434b4f34db378c30950571eb7cdf60c7f58d85b6585fa3f2321bf10cc09f2b88c459726a1950c81a27fe35cd08f40b9c3958f10e14e10376d8c26c9e565dfff90e6f5a1b87e23ac2e6aa6b59827f7cb28ef433cde3076308032ccf86f8c6668a82b8460eaf6a4aac05a00990dfe267fe63efc0ce6f6e321303abc668dafae3b060bc9663c599925359da31d1f3141c9855b289f48fec78fa78ae5f700301cc076d070541b15b0b65ea07292b271a9b53444372b004584f35a0c904efe28f421d7622865a70000b1b6103b7f85d3eca25c205d1f9e3a3cdf744f4a8c08fa5602c9d43b1133ee0779e02f4ab9e0b24e7abd4cf8bacb185d3f8a36dce5dac200e21ab6bef69b0f8561c6076142af11e5670cc7f840f5548e8ecece5708a4fe3abd8834718d0fede6a9787cfae19796be45434a37fae2530f689940c9d6a9cf8914c2932031c4c48f7056265e55e7b64d28bee2f202b04cf4c6222482a711ba74c6066e56226ab73b1eb7eff50090d27d9112db8fafb3a84246250636039d705b727e922a267ce036577bb17071b173090335e77a620856dfb6a6c6b2980bce779ae686adb5138899f8a37e43ef80215c5a11c3aeaa720193c846e64debf1442a07d029e34913fdfe663eaba81c493c0a3ba6ef20fd74b23155a10301c7d24e98f4a0a2dd8176d7872ac941c66fb86653c08d4f5e7d97477b48d357f0852ba7c1411e0c15bf822ed4f66a545283b1fdc58635a883134b480ceae6b092acc9b1c221e7d788a8125ba27cb25abe76d74c909c5984983e4ce4924da1233135ef485c76ea88f963d5b930177b2f112f4fa4342e25683a74bb31a041bda8d7274017add2160bf7325a7d48f6978e34eb8a64a53e8f5092511d0fa71609fdb62ee4a510d44a49721dc7c64d163c02840e2d46f41e80fca6488a5b14ab31a05a22bd16286210f5b2892803be2985354f636bfc288e2701e4d6af69c6314203a44df4574d112939800b27f5da45174d1c95a7f0275aade42abb21c92fc7f12e59b92726e88a606f692cbb0fb3a8113b08f9f419cb8c2f899b68fd87ae5141588478b945f9518c54a5e03e9f0bf65794aaada6ca61178885462e3058ce4051b999f89749675547b0f98dfbfe4521f9574683f76e9e61eefd95749733301d353e7f59a4fbd752d8f36e513b0a8009b396926405f11dd63e53785c53f88cd81d448b5cbcfeede278f0c5fd67512110909cce446f2606603f4dc94bce921fb1b69d1e9fd6f17578bae2af38bf758590977e1d2c7fcfa20d2637a20bf56f1afdc18e6c8c03cb09bc4b4ebbbb08bd0a03bc50b29eec474674f9566d0f4fd7bbd1a7da4ab497a12f05103b297832bc4eed8bff30b133eba5eeff9025210618cc0d0bf6360128426e06950afd76f6c785b7e9450a4a31620ecb50cda03217018fd64a68bf29cc71cd0c749cae31d9b2ec6297592a4fde17cf7cf50b7c3737c27bcf1642c40fc0ed0973de0d70fa8370fc5cb48dbfde0b3ca207ded2b0cad1309ea90b8c170ada245a8aa11914e4256ebe7fa1e9f9972891555732a2dd4d0a3c1de7bb22b66c8653fb70c8fdb40f80b4ce0c6b22b11acbd8d9097db493bb4cefd30af186d4bf4009713b672018407ed1f5e9e53f7fe1582f27b53b90c2596bd93ee0627dad44af245130260b366b8a3a5d61526a12f1dea22f7bb68b5a7a8866c3aa5368e63ae30f8a53943e0c908281637d46f8391aa53a90825befdd28bf6745bb3f2f491801757c9d01dcb4424e5a625a99137cae20532fb42e6918cd68be42518105a6bab8fffaf4523ea99044faf62761dc5d8a8e0d6b891a0dc874897378fca5698e32c0fc5dbdeb5925a4f1dd3d852523b65e99c238fe9c1ffe7a0f198df06f9064b8dab5f5567dc17dd4fcd6b774b5bf7d116b19905dddb85dbd263b906b2f7104c5a840263023c97b434e14b7305121cd4a37a5708a395a98f2f3998141c74ec8ee602a0a956d701073b57e1c432812c3b078ff64b0008b04a119e48f437ce4850037820d2637328ce9ff762879349bdea76f9443f2031f1d8de097585a86bc6c73be0676515b6d7ee15a2793f4b90c217c3ac6591729358ec3b1edfa30ac7f0a92dcf1f17ad8924aea5c18bda82375b01750e6d66e10167738a10a57f4b2147b1717ca0e2b19b5976344ed8b5767512e17a70b833385cd3717ee8cf8c117a83b9dd33ac78303e83dd605b876472e75159c860603202acee947ca199caaf36e5ac94680ad3d17736303a1fd25df40fc1a16ce896012f0d690ab597725b660f12699e8e0453a19c8b9b4765f26c183d06f5e5fa8168ac33e9d45d91815ee904e192d4491e3b6f89c764d33ed8ae1a8f291b9b0b7ca1bd60c0d1a8b8eb2210e596e7ec1d223093e9d16eac8719fb8a6a92b1dfc8aca440da31c6f02b55a7d4833627d7c64b31f88f496f777ee6c5a9f68e0da9c329cc37388ccc6a8df4c31b0c1cc43955bbe3364695ea1e2ba30f770b667ee414e7e8aecd8afae612ea116a40528d75bfb2946a17ba146159cf875cd8ca54789d8fd293c4f959b6747d973b943bca40a1ffc61bb60beb40e81bb1bed7f5ec13c0e046b449bf0ce9896505c692f58d7b665ef947c69c030e36e3b2ed02faef703ca19d4add89d6aa34e93796595b45ec91ad4dd6d8e4dc59b1327c5aaf8e9ad9d98127cd948c4b6c88d5f5d24cf61ae584a244c219c7e8d20aee29ba89e5f15ff09b065d3e91c8c8076d14c0fa65ecf9044bf6cbe4aa0fd9ad10c84f3f50412f6749d1e6316a689515a3c01b95750e339eed3e0a04853fa145f3b93c3c93ca84aa772f0af4b0de3dbe183a2111db95278e4fbe1789c2a1e7684d6fad766aa40dff5b567a53efc11ce6c2abfbdefacd754b544fae0208a29235c7bc0cf5149cac2aff4094f2c01b85060587845c5aa359a798cb2a69197c7faca0067d78b6a187c78b69e12e70caea99147b8a50b76d68d43c2dba0f2715e1f10ad1be6dd92cfd8cb3b5c233ef52895d537119d8a9d6ce2589432051fcccb6b1ee3f3b751d3a779119c128519f5087d682a6ea95461b0378b3ee89bdf793b3a28d8cf3e0babb1bf6b50e9d6d0d51258f037389573e9990c9012b897cdf4414a53ab4bf3f2b7cdce89170e4a52e9245403b398a2967219d9bafef39592b94fe8c9d49c293374a1fe1a7ef7d7f58242c43f2f4fa411ee5bd7a6cfad8880076f7735f54cf44e99403b57c0d92b1a0a0d0b1e7f604618b3381753a5616a947b3c7cacfc4e86b4410274d5a01f985c2f837c99d3ba5901982f3c40cafba83b5f32d31cc6ee4888ce5c87b391dee4e353d77e1358d254d3efe30bab99f7ad599569847999640982f8815cd126aae6712ca36799a2af99a5bd43dac83c5faa5c9e1b6170fd5bb8ed9f8f5b5a4e46495dbf8ffe0657656ba92dc254c22e4ad693072045212cbd3142d64925e851c733438d542b701a3f406498bfd96d1c672181df81ad2cd7b0da8eecfae40a6e066ddb777e38e976944da2ae6d8009749b151f7e1c413aad4f324cc174411a64e08038a75afd89dbab5d16e03e656b6e94cba231f0cbe5be1f035279afc3e7a112d7b684a9b2919dd0199c0f936c3c388115423fbe4cd942739c20bc88083e5b4c4c99ac4623aa8115e6eb17b80d6187e26688a8892387dd7645d7b7acf8b36e2ace85bdc177ae6a6742e2be09f425155ac8937bdf8ca81cc8688c6c48542de54f6fd2adc14ee333fb049024d649685e6f7048e6d57ca95f034bc9fee0a381a60490eb8ce214af5f6e3d0439ba37df0d5dfb305e7b238e586c11fa1e4af4647b991abfcf8f538dbd41c1acf2656f47ce1bd37d93a86571903c376719bbd228eb789442a48d2f797f7f5be83226b47bfe8e307fb10ded0996c6065c74d7736ab93982f013ad7ca902f707f071531adbadb1116ec45fd52b1b4d755a5707ef8de62ba4afa79cf49599fd503d33dc7ca874dfed8ca0a6c627dba32e2f75bd1a49e9a58bc3de91d7249cda6d575cef620cd526ed2547ba208d4767af8a8f37214d221fb057e44bf901337f4c30eb555c0de0acff2b60c6ebc7a315338358efbd7a510b120c6af43f525acb54e052eb1d7543e8f7959a3dbedf5362ab3aeb567a7253524360dcc11f1fdf7ece95b40641f22df4a4ee9ba05d82557374e31d2cc250a187d3b1a37388c5d228d02cf95fa87276f7bd86998fd8f582906036599899af0d280ff54f3235258fa8222a8eb7e8b2396f01900cf54001e6231bd7f849ec048bb5863ab9224625e41fc811813020de6f3f39c30e33dce7074865b66bf6be379f18ab17f66deb3c59db78df8fd1523a4f95f9302a2bca614b75859f5c365e823251415a40f13a9a362201b681769427a360edaca6ffcb6ba5ace6ef3fc4afb5f121bfe8248e10a384193eb52c7ef21c31dac446a4c1ed6896e8e9cff21cb766c9205aef316703f8cae2127bbcae235f681a04f1787b9430c543ac6de571eca38cb436e6dc2552bd1ce0f89496219677e8a76fc291f326026662793430f327287662faf8486f0230a956c885a5af423af874b89ab5db45e910c1f40bea7d5471b2e453327c58f0ade71a69a95687a07e2902f9648639886cc14b4c2489b656c850e4a8197dc26403705cae8374bda0754a0ba9897fc98c3657134887489b41be8c634011ebf317450d2402438ba721e04b5e74f8f2fe1c37b4d6d2fc34bf02ac975f95e164544675f62738a2f61ec03bb4e11429778eae6e327ed28868cefe748d112148ed10d19c5bc463fe1fd55002c04494a585ce96c71b236d7a09c287ace4bfa0b650132bf7995b3e2bf9d1854867ca5aa8e3e173c14afc1364b05881fa7a4130a3464d1826db409817e8e3ea7a643cdeb1110af304883d22624a8729b480afeda0136b8f0ff70ee06816b356f3985c1d186b9722e68679f6a532415c60bcf50a4e78b9853baacc3c46281f46edc3b07a22428192d5051a8a6e7cac86218a11b3148ba0a44d7968dba907c1715c3f960a0aa6eb97331e5895a1591a2c3433333a165b57654a252fb812bc445f5a71a1015c8708f6a325d8d8e2133fb7e325581cfa93332467bad7cf6e2e6a93225e8ba676efff11262cfb8268ffba2dfea8bfec955f4dec7c9f4c0f407eaa0d63d05131263edc397f5e5154b3be1ecf855caef711caa6ac2dc784b92407c7a4f385c173244a38cfcdc200ef5ce3a2abb202de1d9ad1d2a0992be29c8f7db4d8452bd11892c5e665e711b265dbdcc250bef3240ef546b137526bc932e0228786f859926e3289727a1160a99c5baae0450dbc6491871e84859b0c27b860f307c6f638c0a9d82e8e44d1a9e2f7695d49d2887095e059df0be7834213be8485c4f7c6fa745d46b4837bceab1d2afeb35fb2ba533487ac37209d96d5ba77940a2715f5a38d3de41b70f9e439216945acce7080904460c132ca3b0b52d540ea85f3b2b60496bdf202b672e8f415d8d91fbd0d7e40099758f58206d46c0d1aba6d4eaf06a2c0cb84d21cc0b89631b9d0d17ec501281d8aa1bcf10ace40d8c08e0111c5a9752d73eef422e60ba66bc93a5ae9040b04a178714ba2fb501213b2e45fac97cca75b36d40f94c8ce424f66b32f0741ce7dc45326badbbce91ea2dc51d56390ce524b9b5cdef5f511a2931a2b180ceabe0860040f1602094315592d19904657d8e6d3430072d6451ea99c8ccd06ddcd7e1ec4c65db872e23c0b905b70894181bd3ee87e8afaf93beaeb6e2773c1cd13cd7839999a8ada43c7e202438c703c10dbfe8b3904651e0f7f0ae929610f082ab8de394f6d22e70fc0283882305ad9a644b6854f59efa3f4ef5f141278d974b6955910e727bcf5241b054c3cf8480bd29dfbbaaf70e9ee8a506bf5da34af56bf68aed1deb03a8a4df3c5dc5aa6ccded3dc19c24c5a1089198e789e52fe1dd4ee913f4e4ec433caf6c1a1a193f68c141cd989469ce2450cb4655579ba250282b47d4bbabe2840b23473384bf1f4a01128698217a3f56b062e9c9bc85bae2236d257eaa2be32f23b03b75256b18d38ad9ff0c7a87c1b5a892a20cccfbffd25795c52904e0973c39d0a4d41a81cc2bc1ef2f5d3c65ecf5915c97dcbc901eff7460818d8050df62710f679ff9b4a7938661e2bbd8deb16b30531e78af36a4b224bac3d5c59b19cff23d469c61f8868dcb6b4e5ff112eadb2bb023063b108ea4331ee8073680cf2da28cd1341aa64dd1b2c8e48cee6361a2a60ebf43541fa67072ca716bc0f3bbe715f9ab850102b5da606e03d370171dac27c61308de7fcefc3dd7caea750ba9b2d98f11e515dc2a2b53735f8a941d9d26eef849a17e73e7d8383be6db6e3b6246055d8c84679f29422feb527605a491a6fa84c7b9560161e20627a389558097142da9bdd701d9e0de525daf15b8311e0a85357f060e5345b07cf187012a28471b004146a0d18ddd8112bd738df336f9fe138d2f40f33d00932c7a431897c83b801cb9d3208102cba069db7ebe300308046efd175189bfff883d59232ae6f3ce55bd58ca53b339c7cacaa08b59695c6fcfc6bba92f0031ccfcff8aaefea4392b7313420e21fdab28b56271bdb2e34725318fc9b38d221b6e91f55e0243c5602ddbac3d8231297fee548ff9f11317f05f5afc6cc6385e44a90766cb2806ad16e3fd6a9a96d8ebc9463f05190c9e7bce72b96b0242f0674fc78b71b1883d8614017be14dbbbd71d2f35e960fa36f08fb600273d67d14e2f3df55427aa64e3e710fea3e4e6fb7ce9c44407aa39d5f83fa9f149892f586112f70a150a7347eaea21f70d9eb9fa965fed37071047bfe1567124e1f9c27186a6fe1a2ae29e2a2ee75ae142720b787825bcd25e83683de908033a96d791df7f72dfc34ec99c005271214d930ad570f5b310281b019ed0faf0352b3146c553da7be9a076a45a8746f1f7658b5f257f4c78a1bd86f12aa735423927547c3132e1ebdbb96633cfd345132627a3ee621817201906626b5e193954831332428928f5957824ea0525bae8e0e5384c9773234c44bec6be58bbb2925036ef85cbec6522e56c8e6c617009aacdf19b04bacaf31e2f90984a729a24415ff486b2d88c256e3d43553d4d2718656a1f2932041d4b0932a6b31726a7c45df46ed8818b4ee8382e7721df743413e0228c6d74480c361b6a1ccf9c2a579a9b9c6fbc4afc2795f030af2bc304d1cbac2100c58fd6e5cce0bed98d2f53aa2ff45ed16699973245b776bfa11418dc6bd4acadfb4b15f3eeb2096e74f17a9b3ba95fd25a20b239d4a90dfff55d5fcc2586b9026c47c775a922c4664d445fdbfb858e8722dfba2675ff98941e91283785631e3c904c5eda9a80e3bb50c1eaa61b22fb4295869d0660f25cf31c345a65082729fe0e6dbd9ae744e61bce41f486869e6892e21c3a5c452ae871ffacd5e8d5261d807ddc000e878d9596de8cca33f013ad1a9744a070e9461b8fd4c6aa961571e2e298f0916a4b005157fc038f14951032175e769d850d21021b1cf55cb3c3d526cfbd95f3385899a3eee97f0148212aaa8ee5312c59f40d61e019eb1ecb21d48f54d8e325427872c5f5f1fa9eaebcd3080058c75287368eb573684521b06cb73df4a450dacfd563a285553c7dce91f95dd06a134a0f8a5ec8102d2f0a8dd393787ffe681d2f12c62104b27aedb440a8ccca06ac28732dae51c0e50dc1e099acfa14291cb3312d64f015a3f1cf579cabf94140ad028414890a86e030ee0b5ca6eebe09ac7ea277dd0b5070ac3090ca90d29e3dba9b771b2cf1328077be632e932cba734f4d78539c217a81ca4c0f27d5e24ba5d21d637ae2a18b3457866bffd033694f5cb864eed5676331039d57fdf7fbcfffc8bfc190f0f851755ea009b341a7edcb22484c4cc9c9bcbaf3a89896b443fdfae199c4432df41a56ba8e23ed66efb0b8e7c4883902f00a5c390a115fcf83d320b2f3b80175b1f6474d6e7db5764bf59110e843613eb55cf0e98b3f9b5e90401d5f53a9e6e31630431ce06ee6b767405d12d4ad0325c79222c3c619503443fd4af27cc1caeab70e7526f64d3f991c5717b93411716cb69cbb30f001fa91ee8c570753d407f46703f969d6f111158112aecbce8f53c802cfb3c81fa27646dbaf958577c4f755c560cc7a4367dd658a8d4a4b58ac206d1c59d38dde3e2ccd461f5af24ca8fb8573c0d25f985c5fe3d45e96071c3ef3b24f7c5c58dc1e4445ce76fb19a63ce445625c55508dd2a59e4346fc76c75747ee4735aadec7f1a928c3ce68d144aad01a33378c82eaecba4c7f1b3f85eb1489716223428dcfce70e7cfc8192c1be7bf0e58aef6f587869335cf6486371f119c3a6a3c0cd0aa72dd4072da856ded586fe01209df61ebd30663ff0da38107b6be585d7cc225331b07b03c127d2a4e77655eb9cccacfc11de8a352e8b8f3e62eb6e5dd55b3eb8cef69378e198ad91221e795cd55baa90f11e3888b38838664ff6be1f1f8cd7ad689db4b8590af65a76959f2890cf58bd6a981ce9c997cd2788c172ea07675150296e8a1ac3de16480cf5d835566182db667f80d2ca084ef1527a5b6c9177757c65dc0bfa3cd9721708e43208c5bc2d7b85cb471b791975e6eab532eb0fdbfeb72fb12a4175af115202ae6e04b7d526b316f354ec309c8af7eb4157a010faba9cee59ebd8a2ad56f9c6c1099a203348bd90c70f94d6996b04aa700fadb38688c073c81fa128cafb39b39c700934ad2bcbedcbb3812f2cf5c33d3f5eaa446cc55de267136c6b2c208db3ed5cc7c1a5ad1dc813ae66032c0bc48ec1507cc471f06582c27ec725be1c7bc4d7674bf267de57d627ca1fc8ae25c8f83a6876a516c5ed3a95357ba019e298fcce358e74e846a2f732e338b031237b992df86cdb26ee227ffc825266887e795efc007f92f17295c672f2a9e647af323f9ae3f2509a9a3c72192f8179824f693d6ee11e57add3ae60a7ea7994920561d636ca26f7d36944f56393c816f0cd1c33814fa5f22df92c37b9b8c90db1ae400167fda308cdcd74e3f03bd343f16cdcfb668fc20c95e95f914cfe29fb923e99efef97da1602fc991af97ce56e8fabd90753958abe449fc4d7c1d34229fc4b0ebb0846bfeae62235a02ce3ab64311eac576dbe1bc13d774d9771548402b0d34bc893158786693ffe8dce4a99e4740a93888f1e53afa8111997e03a33305783d7645cad9bfa32fc5e2ea6be5c33efa8d691c444d4291f60a4f7e81f9a92fc9192ea5a96ab05ee1a4269d92db896071c6b0300659818624accae749ea3cd16067c9851ef4fe4d7d1cfb15d3f46fc118983ff20d0670a00063effd34339935d9f510466266392ea8af8800bc0564e80378d83897ef2d602362a08668e9c9231f3b0310d7f75475fe69efcca79e69e33a471d0ea9d21c5409f3feec4fb6ca7586a64c41632679f79a48c9d51e675cb1f6765d873c4259489c47c2c64fcb6d6b825fba2e1da23bdf949985ef1b0f39885ad3c3090423b117df7c45e3ede4a0887778e082c45ba4c1c0955633dd6d4436c27430df638870af71ff5a39ea81619518cedba0690d45f3998402f441b611fab06a68fc9c0efe6fe8660a64ece3b39d753e6554d3af617a8874516bdf6808ce56677c560572cae5b10cde14107f62faac89f63b40b0b8f5f69bb77fb42cfa9bb5ea67e60d7fc3095aaddd85d3e8f8f3d89f23bd00df697922151a3e43ec792c080698b167e5c9911bed8a422c04499bc9a69a536df9767fe174a63f390a5c393ba416af9e43f16b15c54516f5f55797501b1d909dbb418e8983159e5bd4903c637db1c4c8b5c5edc2bcc9d7a87281abe923790b65933b6c3648b8fad06e9f3e9c0460dd0649569b3c3bc832a3604cb41678466fabff0b5eed0b1ff11523a04c30538897ab261374dd09574e177079a8d04c34e587489a952c6999c6e4947524037bce83dc08dd5473850a9166393c24a37b95246981bea9c84521d7568dca7955841f2fd7afdd0170cbbe334ff98445edb2ab620d79ea70eb090df8517f6f4bdb8a57199a2588476bba8b43b1922400cb498e6ecff4818a60191de74905d3129f916085a42685a32da4afd0539ac971fbae4725004430c90e42e4ca43a1466c7d69d2ca732e41eb274dbb19dad90b90e105c90b70b6b683e68594d198ad556bf7f99c5c1e2a84197ac09e773275e57637b318f2c70ff9bd2afc119c84d1def5d30df08876190d27686faf4636328943b175bd4ea00c001b28f4ee35edc7aa25b7e9102b5a40c9937622f91b2ead8ba2557ff26bdf93f077348b2b93b9e0551ab7a4e77bc65c4414384540b4aa9ba6471705461f9421e27f92dc7ea3a1e96d58751dd08736824ed5d771eccf7b2c119d29a80dd5e5cd8eabf60003685f7bc03dbcca930d6f59bd296c5af32101471c68c1321ecfe4a284d1ce473df0f1397af92685711231b1e1462cfe7393fa95b057eaece5ba1a43bc19707fb7519bd1041cf46b591adae5bb7ecec7ecaac889e009664237fa8f82dc8ecc77b0d14eb84ebcc95177dc6d7c9e039db81ad93b377e9b070c97b7ed6b1f80b3d00c06da5912fe488ff67ee4b30bd6209855e0642a1793a5c908271c904b7cfb3158bcbd8cabcd4015157485d8a47a137323a0e49b14643c5f4100c89e803d650d310e595293aedd6a8516bd764e187e9b9c46a137da1695bb20233e36c9d74780d06bb243759911d721c3dfee5567d12c183327da9ce6ddce5210542e203367b163ff4a7a0cfa2fe619f6e6c32cd2e3e48867e075d2243e45d9ec84b9d1304617bf56d371563671c4e1307a8a49aa326eec8f191ccb6d51df82d57beefc61c4d13aad061ba937e39305cf7f7d8e43802f7f801ddc13240231a161e5c49860cefd8d54e6f579f0690323b372445af784b42c7c7d825992c2642cacf1f00e5bfea333cf94e1da208149ed747de6c545590cfe59f6b0caf6031c742111fac0e47c898a9a81ef790cad9f468c9cd507a1f1bf4e4296537e79ee58ec09c06786e0d3a934729ef14ac97b45be287ce31be06206ac67377f83876195c55054f655d2212b9b1ec6ce2ee7c98583761ac8bd75c3adb37e52ddd7059b50f8a890102561de22161a5bdc6c133c93af7ae7740dbcf7e015ea6767646eb074b5c81c9666944fc6a0c106a35f34f51efaf281fb0163a0514d2c28ce93712db5f1a4c9fa5072994f819037d64abd7a68e18cbd790b0f9d11e4e63fbf363bcc01f10b7bd2c77813f089d3fbbd639e22ab326e569a8f97e0bdca243c8eabc086e229b9892a262c74945e23e34e4eb3c0895d215a000230b0a527027a988f3261f24db0d10e0e9c3755f726db3f99fc8c2318fbf792378cd54845083e990d326120b9d8547a4c945c2d1436f5d3125aadbc59a0c821769fc58ea13aa4c50ee64407b2e99baa1f8e887bd49ba2daf7cc70de8cac3570864e20d8ab1922492faabeefc35de83d31b67a49b964227b8d912ca79dcb87b771a619cc9bbc4b897054d58e5628467fb7c8ae3d589ebde36101a3d99a0b10b8670f79ea4b0562b31a5e0c28116a0eba12b1a03ae2640a4af4f76ad336a3b33ecc3127cb7cafc6313075e8b0281b30cf99690cc47eef5a5cc746befcdce4ed13185205d608396959ba91e0fd23b4770fda1f824329e3c4e0cfc7f7217d7a4213fa4572109484cf5c29a9ee7d54f46a8936ae5fe1cfd02148dd9264544cc7b16878626c84895d11f124bfd6b5aefae1d4a8932a0acd86ed12cd3c8f4b5f60349d98d3f79b957f2b16c01ec898dc2928c57cfd15a9668ce68b55269622b7b2d71754f303c77cace7453b75ee072a1d7eb52f238fff5f4c26f6fbcbe268f4bde42dff7321e9087d01cc99f73eaa7b14730bcc421f78be1858c7e58cc9f44e0e0433883c13552655020f198934cd4869a5b8c2b129dc03b6e73d055c8c9942cc49f398e6d2cb4a78b911a4496f5c32604bc72290074aba2a92711a8e87444551355b01d4f83788ce3f43df489656fa385e5f429a9588114b52a3fed1120fbfe36b3fb62efd9cf72b2bd974803dd8b20d7ecadd491fc31725a99456de1421a9e2058869f12c419e768c815d6935f22823cfa9a0e9d5e6a096257e5d65c057791da6f778810c9141673360c3a85b261e95ed2de6d0314008ad1c6f0d6b9ac594ec80a8e8c718b326e3cf85480b2af42e800af7755b834594b427bc51d38287adac76d29f6644865a8ba4a5f36b27771fb071d26d378c002e8dffc80335c9b8ed664ebe60980d51b2010efeec2b268e1b745b4490164b0085d156dc02835caee38e34871bb874395e6855274654a6f21e49343d1c83d04fcd72038ff1a87bd5a409187a39bc44f6634eccf9ca1142e852e0b3c0028b4953e2dbe1d60d5eebe26f42f39f58889c4e153e38bc2bbcc31ce0ce1f73c2a7d4cf854e59b068c2844f75c3317ddf9370893aaa3fc981a1fbe6f248de733c6b3c3c3c0e559dd8487a3abdf16789e434a15ab9e8038b16af0d57e3aaf81947fc9848e8fc98c8ddd734116bb021088db8d3f2b6928be5950898666673ba201fc9246d4d1645986279db59f12c5000ffc4646531f50559ec6d34bfd4927ad43d807e57a47d6b57cc725b18d4dc9d0300d5a6106125d29b6a935f31e4c5d803785f7c233346628cd3d2a0f2d6ee89ff299c172b22f4b67ca55bc84670313e7e58f2504af4f2f4cae701acc3a0ee3ceb6e33c3dd8b048904329a4379666a4698540c9b1ff5dd68b76cac75bf6ce54efb33ab7f34108e14c5c078bb45bc8489380522aaf4c3bee4e909f6990de1af2cf3305ef451a3291683bf5389ed5a7a9cc2a21b41ebbad78367e2f6e944454200601ef3c04870f74058c93617c48ffa689632aab2781b618cd255bc3171f6a3149f1d69ad8346a3a1cf4ba0d94a483bccfd138577777b029eea407111b7785ae05db371735fa6c661b972ba4a4b36e3d148d27017293ffabc6b95730f275a4417b3778a26d14115a36732649ce7bc151fc8cdee4edb1153d073264af031eedad118855255a3df8a9aea9ef5cef552ab67b710cf0ed6dad7e0add8d13c86183024a54f7b04ed198da401c6602478857ce115303021b617a4d3602fb7253a941f4f5680a0c23e66327238a0b6198b3d9d45e35aa5fecfeb163139a4fbf8574052bb4d5a5258e2fc1a43122933630be1372585ea9b9c307a2809fad29b13cbb20a96f926af4e71cc70d0699237b0527743865bb46955a9676e1464fa3cb17eb5a98ec9480c5c1c0c778e4fc13939cea485914ee73745e4ec359ba13827957913c61a8fbb6aedcea6aeedbe880a882639617a5e2c30298c489554fdadb6b4562ee0f210d4be0e09c0edbde5a555cfff276e54206777a75ccb83c60e8b34ea09ddf1774f8d4cc3b0e09fd007f411d8f31b03adf76504091790bd3ed69a685d1d2d5ca65dab20db4aeda686e4d982d14ffcef1144bc320d736593da268b839a770d7f0f2d9a0bff62233efca6d8eeec36f704f85a5c5fa02c8903c1c9dc9a4e7e555761bd42e44eebd3a057fbd56e70f0ccdd6f7f3f835ef20a07c530aa4b460aa0346651a1ab36162f54c0bcfc5264b246486ce31e3fc5816a2f3c85fcaf1a6fd5ee544ac255c964a6ac03c3707f17ac910a4052174f8b47bff5624dfbed8e36739c823062ff8f3a2435922265066df5a237b572ed4fc4e9b2cc17532fb1c44840fe1d379f218b31294e80ae749822b6e26d6c29e04be535087ef6c85cca309283652a445fa88271b1aae561a116cca34d44a66ee3ca4f7b7f25019e93811a139d75876f9fcbfba4116f2a14a8f5f52fe49537e806714422a158f71cd124d3bdbe471aae9cd1bf9a5c0d2e120ad34dc9287d84ec7958d8bdaddd8b762809a9084a079d4df6b68da3380c397e76e2dc0cb79e09412ac3036e72b9123ad7afe06a222cd03decf2a4a844b73332d61128bcb6396524502e7b1d1fd03ec8e1adbe1d1d88cdade6d18de1b7136e9e217c1b1333118988fa54ebc8dbf0b63c7f1872c15cc201dec46677478e830d480a2851c0a686191304560eb6b499a94726820c33d1866c28107f448fbaaed3fc824563af6ffd4d6a5909771d32fa60e892a2ee0081793825ddce62f8c51e83ff50d4d9d96181a7d1feb47dae9319c3f0d5d4c5471bd8d34f686012ab81db99f8ebd6ecca514903bf5e16015fd52ebc3e7577d9668528e36f8301db74a60f580f06950b3078436f20716d139422e006b31ab46fe256b37d7f732783ae12db5ae1a045ee1e48f500c596928e1ebaaa30dfae54626b3e14ea1df19e99cfb03a56a5919195960099ee77d9e11da617ab7d017e33245ebe6adc2ae0000d97e40b3817b56af118f966923ff0fd9f9554e54a840cef684c6aa0b2f929095f61b3d4f1953542427a7da417fbfe17a36ed060bafb2725c587cac67c67835b67a731a162f27c1d5189d2c772851973e3ccc6d23c2cb85303939607f871b2de7be97bb628f1c62e4f6c6251801d21c3f82651d0976ce221bce5bc99a3a4cf8b9af81a4d3d472955b5feaabc2cff3fb1409d5155c31b10341ddb02f0779cdf7d442e69da8f9608fd5c6fda6e1128525dbb858a103ab998c1484e4e23b77bfbec5019d2434241b13db016e4b5618a4fbd8b05984adb235111adccdfd2bbb0213afeb6618c8a3a7ad6b920ffdee77f008cf09175da326bafef08d4656d26e2f3bedad375c20e26fef90862884bba3f3cac84a5e89e8662847fe9af025595a40a9f0ffe007730ae032db27b9629e1077631a382f3971186e247fa9a29a039a2cf7bfdc0a9a2263eb9d976affadb2f5dc8480df9fff8bf28c67ee745c60d1840a2a0c9f70722127d60051cf8f388d8e98514efb08405c640c97bb3eedde3fb01f874ec121b604ce59212051400cee28862eec68da6d559da772405aa75c2497bb7f34e443eb767830800d52f3cfed9ecc6a288ed2552df9dea4ce01e9e98a860683cba11e224d84607d4a317c994486ec8514e3b22d95f8b139fe7ae394d7e3fd37d7444487c35e2283c006ad32b749fedf920f2d293e1f1b738f59b6bd1b5602547d18c061d538f4e82f495900d025b6b0d3882736598796a551259bd96fb878f1c1c21f093746da2b48eda9c6175de1bf14124d902116d6b0a929d7fcfa8f79cc51291644dd5d2d54b7a9c3f57f00e312ec9774d4aca023ecbad15c7310a5215dc188191af7368407b3a0d569d17b24c4f58614ad9b7c600ab06559279e37d3380c5d237f407c3a23046aec8ab0fc9a4c418f861e55c3e9dbfe54655245d3a835d4d737881596bc2f24923aaba51b82361689cb30853eb8010635073adfd54e0270c154b133f942543d74ad1e04c5a9c855ddd3d1dc421c8b141da9fe22da034758098ee73796b8d23e4c7b85c895b24feef856f9b73724bbbfba9404b49894365da7fba09e554e8efabdd5ba2979ec42a7aa3d7f72902b9ec6fbe26a82613bd261b824ad8fd1bb1c8aefab9001295cb36de1256bb63ad6f46ee9a92bd07ea379258648abfb23e7cbea70f9ce56b782ad2f94ad014996fa4503bdd93db5d8bfe00856523d3407cd1ff01179fd80e1ffaef2c12d734e24da8d0c151febfe8f3f9ca5c0e8408f2ecd7cf13af42ff499954131ed011302a4b0e8d8e3ca0f5778e7f97cbdc714ff367f7d58b622b6dbf1547cb74ce6aca7e79e7dc918ddc94ad035f0ad10ab76b0ed269cd9489103e50d074e4f283e17af0959d7b21257a84255be130a27461fb6e87bf348a146fc0035042489b37e221fb49680c06785d2a8cd6cc52a9cd1897bb3491cc8107073d5d2a2a18769690b6d45f109dee7d89d205d938eec1cf5733acdc2b55c95ba83d24271682c1edfc6527cd657fe6267d0e11e94da65f6bbf9ca5db0cf8e32aeca5ee4f6d3d45059811e7d6d4ad9c197fea0537e0e25b60267457fe721bf5597417b10758a15d82e77c848697cd5a9305dfbd620b75f7d5ce5724de7f5499d7983a7a806e7ed0a24c1c42177e5e0a11a3496cf99fa6e2896df35d919cd0e71e855df38f23cda0e4e4ea4d76d988178f071eda968f7c763548749ae76ad54a722bc6e038518d0c01f67e69f2cefa517cd729428f33087660e37333e22ad920d7ffeef134d237602d048dc5567c275f1544cb6c2da417066ada9aea8b2eee25cde06a423c213efcfe7c3365f74644ddd41abae12dc1c020cfc8d27e2233b219b977a0f67bf1ba12333d05f674ef31ea78cda09373eaa58572ef7734a61f0915f19bf19365df0deee030a93b7c9c4f1a6a027e2b78fe70283d0ffcf3d64e50d44f9f67fbfd5de39dbdfcca609d9b850978b2dcfa26ae66c270e4c9c61990538202a7590e92a77e12f71da3cd7a1ed854e94ebcf3f2bd78672a70965bca1ddd087d3752b6dfc17c403eca68e9f98303a532ccd073d710f99ee12c8838c81b3ef7d85313e77d1d2e24b087b0e3c1f1ff06dba5d2d7794fdfcd85ea83fb662e99058691253ee8b1d43d43d74fd6d2775660162dc267d8cc0dd40638c5ae32a8493263fec2f16f7824b349191291b9610ef66ade6764ef308b1e63d05cc0f417dad4214bed4b0540dd11496802ccf1efe42ef9b066f13d70e331afde3b8a258be942d3005a1e41508a43ce5dc02033b889e005c204717a618bb86cb5007812b56490241ee12fc0247200db11ae2576415e51a524bc6fd75272dc7e75a80247f496055795425a020d11d43a7cea92db89b600a6b0bfa33fbcc8fe1fe9c13348cc6da1ded524e56a0f7063ec61b890e173f7af362e6b477b1fef56fd38b153df3b6531abe149b445571ab73b5ed44a90fc145b859feab1f78bc4e6d94ce9b482f398571101dbaf12c74668df880464bc6fc3003a7db76090cad575a0b5e0cdb54289f24fcfd74091e5a4f53f0e0d04f045ba121ad0ab11b7c4e97cb0ab3b501fd25b75af2ff5dc0447607f93ed289d96fc2f167a39b2880a35680e8a0a8bf178c5748b7a55ec6031bbfa4a60b082d21ca72344790bd2b5dec91ac5fa95d8eacab747bb684f22417fb9b49c19ad9e6e2ade9be8f4c6ca1cf2abf2fc99dab98aba1f410d8f9e2e85e218a4a9d2ba562b04023ff30906694f9bb7623ecd2e46401041051329c4c2d00e8357b5e5992d6a2b94ec118e4768100695754296ef40641a104ffd14a45195af6b9887537bcf8adf6f067f43b58ad839d16a447d4313aa2c1e29601fb4ed37b36c84c479aa709c9d0e3f27d328074aa338b32b536c4ca4b28ac4d9adf33de6867e02d9b54bd0e7e724519d7e1b5c95b494019b14631a6cfafd61bbd246b112937ac560c404120a06be44f5cd0dd027edb44b2367c8fa8b631e2c91df9f01be832cf81cda8f02e48e86d64dc4419c46e699ae09e578be925e242011034e45d091cdbe30e63b120fe0acb3e28049afb1fc5f4c583bff4d54e16198bc3d7b55cb41e80c0acd34ea78de72bcba33bbc42b7bf9f35b1dcb60df273facc93d122092c9b66e3ad331e1cbbb96d0ad46eb619ac7da8a9e610e74f31c556fed275cfad0298e8baddd5350f36196278103d304b6d59ea3ea473278531ede583c8bf0cb9ca37f81ce68f28b51abaf495b17871d35ddd713a7291d41398bf6cff81729660c7a3020e99f8aa99b808d3cbd3daa7e626c8d52ab93d4adc797896bf9f40a4cd8fbe93bf8c4edc1377a15ff4772fe2f1a62e16d33e430c65852eab24d6af7aa2bfb4250944622d9301857b5965fa68aec5eb6d8c8fa8d16af76b3bfb2236392547ac200d0f0fdf0e366dcfad8531fa443f672c0e904c2f9df2a5d5e48fefb1b0a0f645cde67de3c7931d2126f1e1b30b5981067a81c33f3d8e3c27c3d10a80a1ea21d92850795e5fd03cb34d561ae806c463a89fb520b6df2fc3fda0f523b7d3907f4925751fd499d6c529eb4be556ddb05bb8b334af30a9170dd9e0b6ae85e17099d7da2adfa74429c86fecae7916ddf31481c92a6065fe75860ffe736cded9b222f954477ff05032d3a73fb082e17744c28fb7dd956d1d74e4aceb2ddeda8cb5bd090ca102d3895c1df345400a814feaaae48df75377abfdf433b67d9726d193148c441932d0917abffc89c46d38dcd54e8b068e67011e305c9872555529bca335e50df3fc49ac87d92e356c3f293cd4655a37b56609023d32900ee93fa75ecc5af588d5317d184974c3fedeb560001b59f15f65a67c1bd1afa6c187766fb374ea93a2e8734b4173e98447810789dfa9d4f90aa01c5902d67376f3d439da97414550397b188429405037072a6818755ac86cce5f899dd09cbeaf8f43484bc0fbdbd636614c105b7fc9a570d41f44f3ba39ff08f14309298ceb95c34dc9a80cd3b36af8118e73b264b392cf547bdbbb9743d07c2ce8d5d2a7886665bd6f438b7d6e8d874675bcbe335dba485a668e254ac79f11ebcd8735723c46427db76fccb42d9059821a20110b83ad802850f5a7df2ad8d7e3fd8c246aa082f1c755167fdd600d90e3b7622b4191b6b32128b1af809261b2e47482aea2fe0439ac0ed76ac62dc3a9f56d0e055356460ab46cb0982ead9f5bcf8e6822ddecb4cae799ad9192c618e494136ac8e627b430056341fde9d5ac9cb74791a8c9e6ad8e4d00caea8ccf12b079cc1c5d0873906067da365a6c1e41607f3d229eb5088d3ab5c3691e77eee37fd9e538b2253eaaad083ab8a19bd9fd9e6260ef81cf6f75c65292706a80473cebbc7ed565a7565b866f3baace51a55eb91a8d7ab737166f4b502cfabe97166b0d7339bfd158979eb05626100159a3a5c917d8a4612c32f07dae00ddb28fa3938dcff676406ece352f807fa7af82ef08434b05b0435ea2f5faf7601efe8783666cb6c223d37c9f955f795ff6e2677c3515751e0ce11e183ea2458cfedd8f8c0d86a06ab4d73d36060470202c1caa048316b715808f63c559c57786718fc9d17f0a46783b5c8c71e68abd2c1a9161d7087e41a0750a52cdc0cef664a7d0c43bdcc9f648d96c1a394c84469091d568ddb6948344a0a810fda1878784666feacdc4e22306f62c7331b1c08ae5bba7d0efff13354287c6f245e51312da2bcb5bda877d2c5eb8e44c028ee4814cf929b78e79b36cc3e780eb6c1ea9b2cb0f273375f6a433065c427063f65e011cf51898447e132550abe70f1274ebf227243edf6f070a1ee97c9a320d1f98c7c8ddc38db2194d7a528f97cedda7655ae31b716313b83f9022f4d384512eee9cc3966b540eae509cb885f90bc0c93090ee789a795487e09c5b7bbfcda16ae1a8ec307fc3a0b45f9544f97a57f99b2b981723811bb52adad15512987a58ec7f8c12fb1b3ad240393a66b475fc27e2fef9af22a73b00914a958d277bbf256d0bb2dacbeecf1204abc90f43643890a3cf098c2e91f624ea60d3d536b1a93605a477605a624c17489fac6ae3d348d34d713f774b457c81a19790c4a3d975b0848e3ebd216251ee9d0f8b27326bc1bf1f207a625cef4ced097ab47d094b2410e1bc79e0160a0daef51a9d79d47567c5601ee611762ff5a4a5f7bbcff6adc3c8c66eb7a84d2897497e9f511d9da024e1857ac3aad8877b14d3d0bc702a44494b5346db1a2afd3f62ed0afe43ec3b063d0fd10e00fd18637f23e6f5a9cc1a8bc968685218852785d5cf195b68795489829c99e5a6405058e9a02356231927813e3e0ffb50bfa82ee464ab5210058c625cae2ab6b4ba8d793b53f8fe015b267ffa7da6dd1059e98a64b905ade3919c02471269671e6a670f5588dc0dc34cbc81b21f681150cc82f1e1ec4e6f5eaf10abb838832b09ef5f04c6b4b9775c6eaeae7112f1626c405f819ca73f6c118ccaeb76866f1fe823a9b6de7147450d7592b6593fb02f62791307865ae9016ada1422d33c7f3e715980662b2e7de8d307d8b526768bd5fd1038d3e89daeb708d0717df663c24d1a9b37f7760bea99691a92070b98aebace49f00e9d96ee24b2530a34e01a007530d50ed832e9db5e593e382238ecf5268c9c0b139abafa02fc3dae30ebfcafca35dd5480eabef2423ffaa82bdd637a05ddc3d7cd485fb8a1e38274b9f01b53c883a0d7c0a3603ec340d02b356d180eeaa1a4a08ade55f2350c3791f2a6706aebb67581b7f49c05f5372aeb98b6ca9c32fb6e98431005d7ceae5d5205ee2002fbc465d758cb2a59b83db6221b2d4b2a4bbdbdf05d908f4e1f58e3b105341b231f880a101b9457062980928a2f3849281e8a3d81d9711e3d900639c2785f29a6b591eb55fcbc8a6e7a4355fd9403aa3a26a16fca638c6f983379bf0ca0de7d48cb175e87d917cc65ab594c8369f15a998f7fc77ceabc3d92d1b0444a2f0cd1e4a0a66c261e5933017942cb1ce5d88b60b9f66ac8001725d2162c22d9f3ed7a991d28bf398648cb37c42ce40aa15f1b9127bc61c7454f6d77eea7ff91618f41448a2c6dc00f49429c290c211a105b92b271677096fa1f023f772bb6ac3d6cc05cfe07cae05dce3c26f60e54e3267a33bb1d23ea5143205e63ea852032a28f97aa92b6b7b2b3bbf363242eb363db0703276b151663d830aa9a596d837cbfca0e8d367b4b15eab7769e2481fc25d6249500d0e285e37ecec3f828a0e642bb58d1f7a8d00bd1d92e376ad4cf6c73b735855a36f2d0a792b9a3db38c19744a6b8e55767f7e00f0668fe20ea1ebbc57818a44a3fb94a4f07dad0237e9c71ad87ce6545842cd531c7e475055a56715238bd908bd19df843dd68175e45443e36c6aaeee6bb38aa2e4064a7bf8d02950ef875b84487389469cd77462c212a606263b285fe37d28fe787897ad95a083b2f20957fe6ff9190e118b1c1cc756d9d0c829047040fdf413f75a5de28b17757ce30ca2129c58bb7573809a979c027c9d78b119fe60d82c97dc99abf8bfb20f5ee6b0d91b5b7ded36ae751799b2042ce6787fbc92a6a46f8b678767d6c1c4c98d658ebd5a226f081ac8636d003b3f8bf729b207b312869ce8e8c85ffbaf5ddb0b58eac0968d1fa85664bdde177c89c73ca67e14a44f126e7b1da60cb7d9b32f59b13fd23ef722c4211a0ad2504533f7057548a9ab8aa19ed631ff063fa9337b73cb4e86b1367f7e0c4f55ff3eb9373b719af0afcc7a0f6244ff425839e5bd66b80c2a4639535e3f69f471e012accc50476521664e6713970abb643b332e1bf21292832bd5862cb1e085278a49ea84459cd77a99a70bae69d724d526974c5cb7cef4aa914cdd1066cd5473b65ade51283c9639f1519058d9a2b5d93207ae02a8094f7bd8a1e81a85ac4e64f5d971c9c05f07bdb0affa435c50dd9f44b6eef76d768a5b814f4b060c4c61b7025a7ae0835f5bd16c90ea671827b2d4903823cd805eef5ff3edde79f4bc6f8c85d08f0e37abcaed6c945077b53fd6c8c8f4ecd617211a349bba39e4fc6aec2dfd772438ef256636693d1988c2fa7dd45e3b8d2e86a5d592b53196adc7ddd5c599302a40adc5b7450b1b96506af761edaa29da9870f5611c01e64c7e9ffbad0e5d68d4c0b8f9f5ebf389e90ebffe3bfae3e23ca35ccbbecad1da93dcc1588fea323fde16ecfd2488b103c057e463135f6c8acb362c47587b5ba4be231ee61c39c53235ecae0be6b0f4e26fbdb3cb099e2528a299c2672ff649b926d8db2085c4f5d5f9515af5b904444fecdd18a477edeea2561c51f930e5a262eb06f5a1835a22868d493c84b68079033f9620dcf81c21a0e6c6120b6eca405ca66e45aa3e52645f869696c7c2d69a11a15dbf01907d7d0d421ec7e7c85db3f725001fa4111f498b9d878fa585e1b149aec34f27612f41745fd86eec7b3d6ec8d4658030cc25638f3cc48092c2bd19252ee8d9c7cf477d4fe1f3cb288fd6f355a3cca0391f8fa469bedf31d7b21a8fcbf8a24a66dadf111d3f68d44d9b7665c0461956a76c4aec50059454789307e4ecb694c36cf1175ae74f2b133f3d38cded76c0ecfa66440626ef1af434c1d40a9dfd1a90bd186141b6dead99552518048eea3b9a9a54b342f887970ab086c64b573d036889ce3276671036a1c514ebe96a33c2ccf57c5c06674ffc4eda248a196743db0b05bc7955b13bc035a82c427ae900e8929154b8631de883faeb541987a694fc90499847e059a4f6ce04a13efe04055c201e1a30adb240997732c1252f5ab5204a3ea6e19d7504bf849c7b4a546636378ae460a5a81c8d9aaedc1750e202dcaa2a86f81d9f41140cc043f04fa9b30b2acafbed464c66bdb0b9e70a4c5fe3cb5867876f7808b687344d5709ab4785516f3a2bd26d294571f4a2e816d23f520dc8ef9e9a363c1f5639627b6f17604ae2acf62aa8e7151c17c42e19f228982f7f182500f35df95853274de80bf535112a33911d44dda72ff8dc1b10358d544eadf79fe81819c2fc9ccd6aae2ad7670a29ebdbf3eca3928029f199e75b7a943f6e9be1b692276c922d6436e6da1f3629d31b017b7633aee1913cb7d7a9ef0beca247b7a9aad2291159df94dcaf7e46d19857be55e9ff11572350b6d115ef0eef0ea3a3377f4882b625cd40a44648b85ba341e956e583e9d24a3bb28524badcfef05ea6323d5955fb6277b879a3e1eadc525ef91c9d7488100f0107f7d85f98ca7431a216e636846b0cbbb30ca7706e4357779def34fe96b8d2aae36f67c661043708d60c5989774db7f03e143ca8ea641519dd99b0be8938dc6e5d44029168498f578c472ec50e81c209dceab3aa50a9e309b957629ef64aa1222fd7812e53d046ca56ff5e0b8074ba2afd2e1a9a478aadaed2af1bc743e223b74af07268dd327e00ddefb2f3bdf781e5819cb764f834f5919b5eae4b552660809344c4d9f9fb25afa8ea58a689820ff6b233ba92681f8752d0016883a662810f80d9467a8103bdc71ca6aef1a1db3d40e96a65331eaa8f573ce22b1fad21d1958881c8fe8ce28d16ba16df0d57596f46f9b84536ba68edc97c0d0d0d42d277754fcf6c0429bd1d3e42bfa4faf562c839de738afb693d9e6a548911cf3b5cc1381887546fbd4e2a29e9b054fc3f4298edb3666d594aba7e7f2e0eea671b89474849b00472943d208fec26929570560d3f3a9ef5ec14d43cb65eecb39c0dab8e1e118ae396d9ded187e543b096af20e460452e83c25fe1b90d2c713585dcbfb3b94a93e412a6732e26e7c1d67500863d08ec68a32faaf9b12d49c6b75aecd169030853058c0a4bc56d7f557e4002eef1096a184e0c7e93da8d6b037d7fdb308cb2cbfe1ffeaabda8e3c315ceca489288b842a806930c7919354182f9d3db34903c90380f961403a063baffea2cf86fe2ece6d851b8e9929c4971402714d043db5ad5ccaaec06e8d5dcdca7cd21192b77c2c22a0a51a0879ec982801ebd74e40c49d6f4984e4541f974f245554ab4e4226bf9dcabd731a64d31b2b8934bdec6fca18506537d158484a09ea4bfe083b4d1dd147a48d32e0b080ebba8198baa2f34f212fdb7f410165480828fadd3eb4d0b6621a10b36503e89da493a1aa530e4b9e0ee4f23ffde6a957e2d67a7711d864adfc42954c736239a9d0abacbbd5766eff13bb5f61e6008a226a646402f3539a9d5531fbe120f8fcd852aa21cdd837e4698fa17f71fb0d49d1d8e1a364cf886d85b3b6f920836fa10e0b68eac049ab7f8d0d06d3896fcc8e0ad74e6e8da42fb40640b283135b902d25bc756ded706902bb39bfc31f6fc1ae5ff3575463ea8b5351616124a59d1b5f842f0c1a9ca8038775019ba26110250b158f74cbe131fbf5981f7d2df6d6a01f522ffc3efa8f733d08092cd51a2f94a881fa55974eef433f8ce22c76eb953473b9795040a75eb3c0cf5f4ce856dc09d8cd3d1b1a77bbaebc6f5d9c7eaca666807fb65e921d5d3fa54f541841b95119df499e174fb5411f28c7be945f026279206e257282545229e9c668b5bc63879df4688fa0be969a39f718ecc3f71089ffa3a894ddf6060c4fa470c5532fee5ae93446466221334556fccd6015a13ca92e7d54d0646f3ed31b0b41c9468ff74d53156e279f176dc3c0894cfcaeb64cf77e68a3bd7473b9b02791aa9cf239058bf7bd9798e64b46715229ddaf5f6e4926e6f2c2372567c3027b1367e5523b5998e988b805ac6f1276c728dd179102cec2c7aeeade713039a10351e74ab6932a3b2744b3f83ffc6f11c2fc0eac79c3fefb8c007ffe1cbf17c9eed81800d2edd0f2bcac3879b033da4ee007f025308c34ae0f358e343c871fb10d797a2ef444d3278149f4cfba74b5b0978da867491d9c8f639653f264631447af0fde4b57b65fef2e3d97c00a8fb9c224386014fc800c4ddd25029600d1aec939f97efa3ccff8b5067aed4ee319714f46bd9810a34a8d541c4fc5ed7210c10a55932571a3d2211573488daf4caa1701df4454a61fceb379d6617c70b6b4ff949cf3d998a58457b23bf208502cd402fea0d70b72c069c9ec26621c5f93b65bac9f6f9d933790a5aafa9c1616384cf54bd89e85333c0f4e8f78f4afcbdab730efc7cf580dc9d41440f20b2df5b8d6b23956bb278e4b9b517b0bbb2394d37927c30fe84cae4075577831c0637bafc2fd49797c20a7d7c0c312ff735f27e951c2792d8c7cfc0aa23bc516f89f592dde651b9360d9922fef3748c776b71a8a207cbcc2d2d1f8f70f8ae22179b17c54f201c59734c9aeddad005b8ca62a83100346d422b79aa9ee02e7b2501b6af76c890b5bfe7e358c4e47ffd4318781b6ae65aeb86daf6f720bc6f24dbbab91cbce28d9818fe1f1eff690df94226e8c732dde9e793c3d6fc6d10a0f99ca38c179ee541b26bd8b65e5ce18fc48b9757c02d18d7658d65f33d3a93b25106d5cff701541c616f51af7815d47bfb5279bc6548c5e835749197b8ff485ef1c7c1660fb5c9a1e11a42a9da36a140026b945f1ba0b9c5bb7d35a47a000f2cc9bffd7d1a185a9d330314595cf74cd0469a1fba086b698fce0ad1c84046942e935e8bd75658590937b29b5922aab99ecaacc714fc404d66768148488e196edef18d8a88cadf66f01be809cbc76fe5805d274652ea082e067db2dfcf9dfbc91c913cf9664b1decb79577b729132ce15650c215496975515021d37688da2583450c932b012bb5b58de7a61da76436f105c2c757a1806d7a7878db834acfb80b2ce30dab1ff5eecb6c828977e582bb42181214e6946913e2a86f3b9c2e3d8967ed6fee70e26812f2a752855df48dcf252ac310f243f7f34bb3491d4a9bcbd78876217b27af27a7e17c2ca31b8d24c84f38145c7a45594977d78f98a2e8e2ddb172790ef055c0cc24fa937be15d3bbea740a24118f66d1c9b4c7e137202fe01c1273e451368a7e734a4919a27eed9abdbe133308a98bd818c192653513ba7525b747cd74e9b31a14bcb5a4a1a3b966225ffbe1c438430ee0f99b8c40f13230c905438c59bf1d4a1efe719ac9d14b0179667d0f00419f34eeebf9845c6fd5a1b6ee9914cd428740dcfa225ce6ce619372afa9dc1e9e00a434e6dd947620ccc0ff0abe0c0da77531823b3f201e13c04afd2981a5abcb7974d61e733d58b55da76ee3c1d2770bb52e397b5be62c0dfc32790bd18841df022ec69d0b394d7ecdff8c0db7c221b103f206d1f5258a3312cc1be67af18104fc1e3977d41d2771bf01704ba7b32962d493b9b9dc666a819c33e2e0adff1b34bc1e300c894a16fd616fe33544d0cc870bfff6572be54e6da14cc879a21d5738f3a6e45b7ac2ca1e0106054da117b9a3d7dd6b8cd2d2bfe50b9e7d45b524ddea2412550fe9a57aa0f5f7d6faddfbf60051813bd999dbff981fbd07b3a7723fa76a8ba2093313fc838e991ee0955f76bdfa1127ea6d65ff272131830b9a6774d860366ffa24f7a01f462b65e66bd2a7f46bcc04ae615b5139f665ba096caef5793253dc3553363eef22ede737c14a6789a8cb8585a601323ebba511a8c2a7c90318464f4da305c4c25d6d3a693ee2d5087da768a1b2a7a1f25cf49ab7b0e90afbd78318be437dcf05161188b7f099fa1d573db4f7e3196795b08d1e57ebdfd80366c8719fcbbacdc40a2021e5c8a7db2561777e9f3461cb18d56a98fe7a1096a56da4d3cc6e0ac9f61196f2519eb2b3aeb38cc622865f7f0d2dd0445d189af4a742a72066e1607edef1647a223db377cd3be8cd16d5c4e2b837a27c7c2087a2fe6f6e8a76d8afbd650e4a0d079097393885ad551088338561ce1d3b85ad69e3108df1bbeb2813fc6235277e54d820352ec559b78c36c2a7afbe246d7d846061bad0fd958d3f564ccff376327546e5af8169431c73f2ca3e2587870efa2f955011a164c97fd8b57876228982fe3996fe4ef856499436d72affa42bc7c46c987f2eee11980cf1bcc65854a91e8fdbf65c722eec6baffcc2f8023a9b9e9960356f544a703208cddb1d3426c84af0d05b01f8bee6d7d6d4a1d03339be931e2e73ea89b4ecb86ef60242ea079dd71a21e136a32bcaed2964ae5f9543edbbe203bd6e7e02a176bf713ba675ba7d6b2c17401498563c756eb38f2cb2a84c677e10fd59423c5388e9f753e236e77b281dce4ff07250bb5525d8897510e41f00c09bf081805617b3f45b6dbb2898ce1e183521d537f6ac3bcf4ce58a226bb566ba394f242dc2a287c4fe8c54c6c71e0bfc54fa26b94627a8ff3a66ab688248a6b97925ceac79216b51d4957f1dd421470df91b23ce537a139ef57f778b6082a134baafa3b071e9d9d65ddbff1c9102bab0d242bd4f8a330ca3accf256f4e0944667a4572a88f78c71aae0f448ac227de4070ff8ff3a2fa5f63a46ac12699fda6dd9eec618277fe93e81a426812176fa0157dd805479762e05b278d38d3f7ee517e0ac270589fd4c99258ef34ba0c8088ee538f192810dbb11dedbb25acaf0d926bc9ae76a15ce7e301ea8beef3e896b9d552cd80b6b01f9029167b12a51a688b9eb2ef9c4bb720f6771c49f8b300a513200c4cba60fc1d8c69a544a37ec5f5c4c6af275e433ba1a1d422f3370b9d96c8640c2dc4a4f2b4309bc368e258c1ccfd2b4e352548a186793f6be68e6be7db5a69fa04846ce38d28eabc45e85521b820b1c7aef9ea77ef7c50f5340ad4748bac93060c3decec15bdcbb2520e6cba92d0f113d5f3114e62044200f8e37a47b6213c5503700996898d888ad74276af09d7d2ecf7a97f884ba42a1594f29738392376cf890b727dd3b2f01321aa1120904c81145c3ae71786f6b5de5b61280934eb900468626a6b542458d6568257ee53d2949ea1010a02b147a9aeb9af7190c47253270da05deaed9a2f28fe941bc242e85304aef42b84475369a3db9c4dc992e345c55db0e4a60973e99062b2fcec75f421ba2f9bdf95108bc4b8ec36d9996242373569e0a0f17c1e10e30a86eae688ae5ba0776289dfb1c4ee5e2f0632ae0b68ca7124144eb0fa9c0429c99d116a9a8fb515c68429e02f4dfd4de23d36e36929131b6121c49ad7e2110315ba176ad3f52e7f08a16d2095c4cd1d1f6f58adc88a87459c000fd2541948e7fcd646ee6379cd8624962492c02641516cee16097ffa8637a77b685d38670e00d8f51243112f3269a0a9c63700d232ee5a57c45a48c8149cadffaa11e7a4eb6922b6f18eb5d71d92804b1163cd2b319f979add5d150e43c65b42ee9df20409475aa5e8c41c7e11b523326e7efcfb381add4de07db0d6e2c9c4e16eedb6804e8a59f277d2d347d1c4d25f03d1880234b842953f734499a6005542dfcecafdbaecb5a8754c25ced7e4f0143e9e840338a487aa6abf8a481ff44c5b4afc6ea113555a01057d2c0914a2c7b30f0ad5c55f7bd9c4291b9d7201424e08339696606d0abbf6fd8c4ead457beaa4c946b36f2a0b183a603bf1766b900af16fcc18c970b0b537b413148c2bfa7e7c19b195805695d146c034b837dc458ae588b66b108eba7140d5db7bf4ce4be2c5107521ca0249f29eba9454a3afb4b19d9a95e023997d66e5738365a2426ef86bb23dd78aa8a7bfd0bc3a8d7a61f509e77ad8328caf4413527ce9e2224afba138813046e91bb0a38e69c5f7b6377fbd204ceaa3f977560e525480cf89fd228382dcb2c4a138bed7cd27e4cea144d68424186cdbede0eba1148a156b2bb8f7b09ea34328a44ec19be9c4c45a85c551d07196a80ce2cb9d499a91592e5bd5280fef8ea6c696d9f0df80bb72c0ab5755f822cbaaac2a244f63af044f1e23c1cd20bac1c6c88ff12cbe54cd97b99f2b8f819d078cb364596260f06af27a9f404418c17b05a1700877c0cf5919a08e9e7f83d0c92873e8285e106ea8ab51c3f1ac5315c9abf314e8b25e1bf8e2f6ad6a6f578cadc6729df2fe65cc068d30b9c074058fd3db471ebb0ec711a19d727e6d58908641cd0bf9442458b9cfad8922dcc1f4e0615b58d9cfad0d0020012114a38f362c9b48501fbad57108ca9ba703b01a511bbddc7c3fdef6dd36a99fbce830fd8e32ed7b93aff9cc669c8d486c58e04ffc92544efbad2b0237546ab3cc98fcee54fcd81b3c13d00794fc41213e92568987757b5064e426f748465f78f5a082fa499766e48cd3aadc35cb2a822b4730cad850695db7b5814743c7c174639b62f58affbaa51dbd0a5a18031739a0fe613e891329f03bbbc00f4d2c7da79b1dcb1785980d430d6bf093fe4fe04844517cb151899a4b3ff61bb0cd70403a789dee62fab63b74cb1a2b7db51d78c170e6ea8b6a34242b14e84be32ab3fa5146eb9946420fb3caa695d61066bf90de260ccefe0cc11e185cad8598cd9a6d42ea220ffe727fd4d6979b53283f573a589b7ef69ae1a38819ac7d819f9d8bf42ac12873a3abbee2f50cef2b15af832f6f41759ffa7ba5fdfa819f536014b7e3bbc4e3086d6aad9a84f77a74d74da9e595646c367a8eac401bbea61c09d5eaf22bf8729e70cfc6b9e06ffe50628fa01be0cd84aa43f32d1642d9d520deafb0d534fd36fc97660fe13b5ed9b51681f5eadd3b6cf66f88b1514257697b1e2ebd76bfe33e1e9202308d3701f83ed2e5a5f4f16d98e7a8b58eb565af94ea84af4ce0c97c5af51ba269e1d936dbab54ed7cba93fd799eeb6d77ab6039fb97a0ffc4cf4c25ff0f04258fda63551d9d63dff2b9fbb133ef5bc4b02da076c001420dee9bf1f8b8ba8a85cb8d8a7b6098f3053ca0a33e8aa0d60eab2f9a71fcc48f3e4fb5cfb38e95b73fc7ca0fb4a8ef5ac958f80c2ce1f293495f6c045d824e8537f1bf91bac750875485444ccc5b3a08df8b6eee61b70b2585c2b91746f048584fc7f45c23e22de6df7c6ac2e2373501b5d3e159f403e51d76110af0571bb651c64d20932b6fb5050fb4b2665ed0de11aa0e48afe4899f35ee78f247d682cf67ee612e82f036f4f041873748e5877de203afd2aeccf622964532f68f7baebdd22db6953c8d9571bf76fc95f8cd7b628a4d03f446fbea26610bbc7e9202b7d27a02a9bc6d79761f8c0e7f78968ac8800d922a39f0cc444c450fccb3659f7a17a837081a74bf8cd80ad022b91ff6aa07a91ff4f8332cae9100c6e97f4e7604b8e694dafa42136a74d0c127263bda15581cd0ecc9a28469b1e6253110e5dae6a88170a48d2cf22c7f8737d6145f0e9a2d46300b3428485c137b7878e9564cbc61d8b84e5a679ae7a55aae7e0f4774cb30006ed3894a1c5b11e42de63ec5ddc2d5f88598c2347c1358c5952aca1a2542e9aa36e17f9b1d6dd0d37552a633a72e7510e7023c6ee367cbbf5076942c73f65d87248997fb8e09a508b3d9cdd8953b5e2b4560e8c69296f870e317bdad94d8ad24c0ac996541fe2bd7e08a9b42acfabbe4d806100f75006173761871c0e3da3cfd908420839eba7035f544ce6a96bdb31f8ed1077e27744388425334aa48d69e4941406195ebbff26fea98f7be77f60bf840e2d6badc2c34fb2a18e0c3c5efbedee36ce5de68eada769a143f5177aef8f93d3d92ab9179ee90ac62d1d6512509db8fed9dfefbd2748b6fcfcd27f42696228e24f50530a45ab0ec135c0b3f3c8da426667820d777f83ea8a14b178ce1dd146e0e7739d6bec8d651bc117f334c9a676ad60ab81484a36a83469c9199f317ba74061db1054eb3a8b6de7f9d715ade9a115a989dd00ddff04cd707329573de25f2e6ebb45ac6754f23ba9948cf9f75dfa458ec397759efc82ab5e38935062e2d3fb69bd2c887aa837572a690eda24e751d9e3973d8ac04d29a40d042bf9b7285bb2003f08024239e8aef514eb646d11db194380ecc508f3489c733c79f736c1b422d1e04131b1338bb644a3c596b6cbbe1378017d2206887f24709be0cec3c665d7cc062d9cfcec7c027e527323f58ca2c2c1cce61d668d5d304eeaca6541df635a86362f1ba909222d51e9e09964bcd64c97fd476d37503063d4f5f3fcb9dc0fd6c8d839125fd21ee6a559af1eac2d6786f0b41563c96fa96e778b9114419ed59fcd685172c3735d8fa136882f0a7b6ee6a55823fa0519d2df38cb2ae75d73a684a9036f94d4e1f2613c1aa3a4cdef69aad2c64e654da899a01bdf44962296dcc9a5fa0742d7df3d1bc2286a1f796f7bd9102650d07d0e0c908ac1755297156d83922aa70ec79c5bff6477b720d4488d704728f3306d0fc99d119a12a6300874a4380d9053fad378814253c21f75bf765ceddf19a6a7da254394feae20b21e94edd62e8266d24d4e0e47f0d4b8e1fcfc5957991abedf6a9fd61c857997338dfba3324920d08f31ae0fd5f0abefc9f591321b38e99ee0826f28e98a659c3a66fcbbff18ed8de5bd1af214fa16d9918ca0147326fb41665760556db1b89421e6342d15ced83e6066a14bf1c7a10514f405250c063002f77db527706399380ec66997e30f4948ed2acbf5c7672bedfc041d35702c126f9ee7ccb8303cefede52c5e9b1476d5b7a1ed99b1b5c0672ae1e6504a51702fbd0a6fb05cc2375ed45db242bdc6c18f7c5cd3c053281fc1f0e036b045e540abe995a77cc022a75e9dedbff0c86ce08924bd486ce79a59e1f5192b003791df8e3be85cf05afdf13797786076205c5ff6df290af355cd994e4e3d493d8803189cb7cfadbda389665e46c4179850e540219b8866185090b682b5bdb609ee066010f713282da269c8e862c6ab5f70014537863e8bf8d269bbc6e23a9e17dda6606077922f34b33be6c911307cc3d5f7ffd648aa41337d5d51177a3b1dd265d914ce8dffe36a07dc376d53ecdab6ad3e3583077d9ea4e67b680847fdf230c65954e68c4d24b44253e255a0551395b6176ad435d735c7b9ebe850593a25c5621a0207543bef31bcf87c92625429cc07d521bc135d5794f5d23c41c4c3817ef74bc30d3ca2fd80d05a2f4b27068f162438a47b017ac78f318bce5c3fbefee002878fef30a1162266519e5d7b929ff01ef9348b0e078ae6ae96c7c03f7704ba5e0ab05e757ceaee9399029df5406b6d4fbbe4092a0e3f40dfa3789e896706e174a6ae06cdb72800f2926fed1561b7d8e57227e7cb4c0e5b2316689b145bd2b74c607b422d5cb3c62b83951387a63da0e9508283f38e5915b85fe43c8344dabedf145fe46647a1d187c3bc15d4902156601a214b164fe9a2f4f9732e32811426a0963c1a8c05d27b64196d074ee8c2c40085de07b3d8b206e59a0465f20a5435482b038db6e673846021f0620bcb657faef5f6f75a000e82b5d3344980fc00f3f822564e79bbb97a9088362705d4d3895fbac792ff1aa72ef9efa13f763d329f09bdcc76bcb2227e95a49d3ce5aaaf0f421c2d2e3bb0636e190ed378b56c19399e3b7c8b683c62cb1d3e8a67ea1df9dda8e00e6349dbfc2bfcbe1396c3560eb8955fdb08aa0494e5e27617d811755437d173a01a4c335ac9d5f3c6e3fcf3b269a0dff8b26abc5c8285accc62e784c8faf231ad1ed45206d4b6f8626e9b40c7fa50966f87868071f9accb907367a5ae9be1233e5ef16928f06f86a59b86b05ccb4876279fdf1da1a77585d61a78d007ba275de9625e028308e551ed1c0bf3d75a6f4a84c806d1e21f8811032fe932f51f1a7d719102d53bb527396285fd6a455e63d996d3563d000010ce923bce25108acc016d1f574fdddb7303d7b8d8467b9f0bde44aa9a3fffdeb92f5fc14bd3ab78d7cd6b81ddd529b99fa1f7ff7aca5a1ae2c0cbc26fda8c4ca168bbba604aa7093710891a9e34a8630bc73e14df37c1e2ef55b922faa4c4b7f5ab07ce3306c95f491efb9c428c8538afb1c6d561a6b6cda6396cdd453e4ab8cfaf249e1e84a45d4a1ebb2c70ec051827dcda0c58c8218f8785afb0c4e83f1b1dd299de64f152e37984f2d31de03b192354076d4985c66ef09d3b373d5d5c7f9397a7b6ec193babcaddfefc4df26f2db68fb43f1652a5f8908bbd6956541f6b3b0f02ff373aecf63e2b1b5501cabbb8243a35cc8dad7d9682671d66c4c4d3194a2dcb69e85dfe4b6404cf529910a23aaf8559d4525c767363b025fd124b1af7f0493148a226ddfb4079dd69742525681c558f7fa127c25f09b9e0e47f1b35c22df6a14b906fc0cb370e3b44712a42d6eb9f1bf704861037d9557b44708113d7c003aef118256c0458a79a2c9da692ca7761757e5c6d803735eb272067ede9b113d785f260846fa346925246bc97e251d90aeb1332478cbe9cb8bbed1b0857700dbe94001d5356b466e1bd6347e4565d8a256cbf7bfdbadd2b85df3ff1093f66a01e856301d1ddc996e761c02f558a37728ff3dbb14a0fea4ebd79e6107cbc8c58498298fd733bf3c6626ba2f2c99663aa6d587ac06f0fa2868abe3732187680c3655e821e1fc695fef2b41d00fb85bd1ff668d995b71fa2d1a92b0e7b738c6ed795000d4c0f7e7dab74f89bd81cc252b376a02c34ab61bee8afb0f36f203eaff062870e920a23e71c688e3cece668fefc20dcb14b4783b9f848802b9d7e2cea25cd0012b3a6a093f6880caf063d68f8d184f29f4a7a91cba6b3d2705f4419d915e14b671e7b14f8a9dae2bb385de583b70af95b064a35b6a86f3fc9ddc09f9f7cbe4c0344a2118be5debcdbf6c7d692d05a73d05435338b30703430e714e167265fb56b20819d0ef51d0eedcaba9cfc9eeb5dc738bd450a2c24533dc92fd1544095877a00ece9f4743f4b2d2fc01fd4052b1340e79fb307a1e581f039d7fcfa616d29ee5b8d56c20f8d26123d7adf7a21aaad411782ed673cc92979942aec708ba1daa7c89293897b374fa855b8ae510caa16970ff44a2cc57498d9584ddb2fb01bb96ec5f961eb8fe6a97da31e63e9d3b8a1d2a720af89a33da9fa4d8cb4bdec728215f098c539aeff5f1aeaa6d55116d1bd063e1775e0eb81bde2ff1d3e96049fab839e7370abdd9b63150df792e84b6b00dc12be78b1333cf4f5d38ef35523d860b2f135f668558cb630a8cf782eef8d59899916f0d98d3cebaabea7d9ccc6780741d7f4332502fdd4e8e1f23e6f861b48034e5b562d3d87bf88bb81befee4f84849ed47997af2f878c2308138c42e41de158363b31929e9a86d92b14d3d6e777eda0e0f6437127eb08464cd24cf7fca2735c96a3f7f0f436fa356f5536df86dd364724cf3496cc496a76fcd53a34937d3fed38000a6c7ce8dcdc1e1ea4e93bec28b53638d52d617d536e5982e0a96b2bf474990cca7d4acbc9c378f9e6dc48eb262a0cb04880c9ba0492c755e209c1327dc675891a4e92ce373494a9a94f1d0ec6a777c8f71cb45844994f15e0e3b51bb82386369e5b1f05eb1185aef5a13008a15a437e6713ef0511e2e4f77fc068d9a7400f097bab61051d7d439701b0e9c986a1388c729b8131d1aa7361b317f1f663a54d1f655840d5a969bdd3f2f66a5ecbcd9e0dc514d0fb806151c442f6c5f3a403fb1bd3232c1b92e1d0e12d1208db8ffe552e89b146207a5fb2044325b969604aa5eadbd22217be1c1b43f90f83d07b68d33fd011d01c11dd4f57803d442e1ed6e242f260aeb2041c514c8ea91ca3599bf72dba002c195508f99f47cb31f8ce9eafe1de68848066735dd4074f796e07b980687fc8694dbd613dbe6737a8f5923be6bed6814becf91e00b697dda1407e34fe7c5f81b2401d5df26fed6e72f75c58dc5b19ff6b97afdf0a0d0fe42271fd043049c23b7d9fe6007492c106f9cf00a42529eda4ee951aec3f460090ee37f4cfd2ac3c92080ab668ee55e80177645c50af690f9157d9aef0baf3739c8cfeddaf6add0033718fb59864d15195084cd8b05e6131775d373ba46a7d78a6071c5fae4cca3d0ba932ff2b1171749ffcadaac20d15f57c1bc45cc08ade4d468bd6bf46f5407238ad3894ce5b3389c2225fca9be6f0102f20615b1597ef993e1c4f30cba8925ae4f4dc527383ee2a83e2f601c65262589c20bfa02504c38eb315a1bd31f78ddda2208b522748baaffc469dfaf4a5cd695c8fd0c35fb7fda34e86745a88697a378f7f7b088c631ee9f945ee4d988632a294aaf78c6e5d91dd78474891c47aba348f6250d2a1ce31621e9548831c262d8721f4c2d3306bba2ba42153f3818d67aca12188ff0d3ce566206ed6cc61ebe326718cfd8bf550b53becac0b61262aa4793d251fdd2d9bbe09a69d636a14932fb2c54564c96378c5b93fd85e752e7b00acd7ef4e1a564f31ccaf3673b2ca1a7f7b9fe8305d26e37fa4562c39473a127db309507352f752d41170044691e5d0ddbdf7fb39950c17d5ccba19c12cfef4dc7072c35e5284b4a0019205033f7ba8e1b2e050aab246fcfb32392a6122834405a96b250c69adb1eed68c0b3d1ff0ebfdbdb6604aeae9409d28d9c4ce45476a1fc18869d19277fe905c6229d1ef6064fe54edada290b17eaf6bd340bf84ebce46dcc6a7bff33ce556960fefdaf312606edbb728d2172535d3d3deca66da10202a9fb519be7150f97893e2e18835f457b689ba372ccb247fca861b0cc62a082a62cb0cba8efbdd0279e5dccd525e672f46a4728747b6b2c17c19f54be9d8a658e4f94d2b05a5761c877c0dcdefe907a59558131e539fab48fa79bfd8a06765724aad2e2aba306bf7a1ec0a5da2d38ab52250986b2ed110e676c63c60476801c1d355f79142fc17dc86785ff59f3846cecf401ae15dbec99bfdce216814dfc48e8638a63eeeb122abef071fd8d4dd98a2b3315adc234df280b9d1ed0800700e18e97876f62217485771b9f8e9b121fc976e042d852e79dc6844a63dfa436142a0e53ed9d4d1466cf04f56dcecc7aea19322f0fd18ede5a1eddb047729eb1383d0e77c531fc54276a2c5cf44f3f599be4b6ae72eea778b1d9248d12a1752091d2ff36e754ce908118ec07ee0d6ebaddc46886ecb4f518497c56a52f870a65c9e6ec63ccb46f44f31a44a5514aa567d1b9755693d2ca39a8f2d77ea971150a28e946bc6a4349adadbb863141deeadeaf4d99fb8ec694bd5df35512f5e4b3d3af5ffd34da1baba2e91a3eeead243ea81e65f84f0ba3df8a426581144c89c5dc82bb9ea3ed32d73f97cbf030f3b57dc927ee623a417216e0169656ff03e77f43c3c93a15d0144208eb046594a8dd11e3b2b1d404e56a53ceb40f3013d9a8f2d65b5bd4d52cc7564af7463dd63d0572a9f4e09b28005fcb023782c7814cf00c7770d42fbcfec5480e9986e54ce354581f617874a1bb62dc14c38279165cd723c7f77e8268dc54ccd7cd354a77d13574e40d8acaaede78d9caf7d4ed24d5ea9b28085829df1f764cbced9c5d8a7ab6251e03cff8ce5c8af0fb9436db6667c5ffcd4ad0a1e04ee37e9a3a3f479d55c8aaacf8adc2230b0e6b7a4946bafc9327bc7a5ca11047d84972c6627cd58c8435f72667ed1555a1a2f846cff0d931b3729b3630ed63a73131219259a92484a4032f9fc45bcd44135c2a4ad790a5127660eaa65b057e2ec54a2c2d1f14cefb6a614b8ea50c6feba1a278fb297af94597284d4d2dbe9315bbca0ae1ccd1690d91115a31a510d3fb44cb4065c282aedfc546444c8104ab082ea94486717d72f36136b8dabac27807a39f8736acd16543fe03c2fd113b5654a1ddda6eeee3656605d1f310a89e13ac1a1da51eac7377ffb8b7dd868eda1d7491e76806e0de6229586c2f0271671c6b7a58bca77509e732b5a5a0687cc00ce9f1664d000eb253d36b36b671c41630fc05202db628251259e2a274234a6a4e30a9de1f07f6f926445ca1603573d9a7e077f7b55b8f5e2471c5e706c6102a9eff5c0bdbcdfc718c6efff36abfefa098880e5f3970701f4be0a9fdb79d71334cc2c3011fb4c63f6302ee9847f14868a6624dec663af7a6fbeceb034f8e6a96a6481d6534cb830cb0daec16b89ffe0e0ec9029f4f392ef00abbc9afe027b78b07c96365a4bbe5806bb3faa0cfcb3e7aab7d8e6297a3fe2f17101fe45bc2c71945b80aa09d59f57f3a17757ac34c0fa9077136805966f5921fadb4a7d3c6481522885f575a0162a2898a066fc45bc059c508b16370065bd17347c931773ed5364435c8ea7d39797a7bea43f4953fe0b4f8eda3d8746413276710560bfb764a784345357ce9a08772296efa257719e196cc3080209f0afb66c5a1eee2afe58cae28ce00ff7f129c1f75801ea6029e0e3c91eeeb474c4040a0d186f0218362341611647af8225d80b74c47250996067b7c929b99a4b8f087001ef84fdd726a0d617c75617296ce855cac3a2b89663bf36f454cfe70ec8ff7b515afc07d398386e00ac8a98514fc10ef51706f49b8a7f61841fe7f931939b8c75aa82a3dc636c3c470c3d973917aabce8650625149df50e40f5ba8ed037c19644663abb4748c55901e1f70e09d572f620472f454db7f47f43960c11be865d9b68751a6fce5667f0fb8172dc988b5f90f496ac6c898d80ee5581ad56b008b5b282798de1e18bae3a9fc42dea32f727e6487713b0222b9e1e7ec0a93fce8cad640f9757176774f9d9b437a0dead33c0f472087bf0fc416a42d87986b44e383a2584f7ccda149987021bf994c99e1f10d09ba555204f6d1635cb10e4e0003ac29fbe0431beeca9f83587ace6bd910ade3ee9e09a105489593d8d987bf2cc08a964e1a947d8adf7381153a5d5924e2df16084ab6f4ee2842940ea679237840ec68b6e322f4941837082a34b2b800f60c2d095258e5ab292bb2603937b998b3f2b767580cf25c5dd486cd69de5fdfd789b7ad836d23cc78a477d68dea5f63b9aab37554b45d7657fcbeaaeb3be39562e0d344807509f2f3716358987c66705e1eb7f91bd6e723c7d06d1973e8c9da2faf6559160742371b7beaa1196e8afcfaca5c36269c8f04e517611c3044b74a1d8c5802cedffd52a446d34b790f2409f4f1654bb201ff83e5e50541109fe7f21ca7aa17290c7d6e5789f4f1007b18b6bde622235229579d83f5c8e7d848e732106cc8bc7d851e55722518dfa3467ce1d4586ad0cea29e5bd5b66be0f0e4e54191e3d6059660f04c3745d08b9885a0652e476559b903cba49f68e4ac5355e9e66d82100b4cd5e6043212b1e0f3be30b538f2756bd5fa71f3478422890cf30a07089b819962e686ffe8b1194dbe6d39b555a50369207a7af4def808f2bc67c34e7f99b1155763de9f7eb8a8b38b0255a4a0c2708a51d3fabfef84128a32f9f534b92bf740dc1077028ea2a6f4e8f9766291095e28d2f678c112b4a9d1d8fc7fc31ed97d39ddebd25f938d3434cc24eb18f3f7df0167318df2a2377c8e2e51fd9a7e6025807c373d6426cb197ff0562acb256c963557d56c1322b65b36db19de113a50e85ad9d22096a684f2688d9cbc979ff229f06d7d7bd9596633a90e19fb3e0004d0d04a2a81e7941f5543080ad6ca164e58df45ed6049073ddf4ca94ff0185dd9b224a00363ad1db61bed2346294dd09bed67b10e6cdfad1b41e22184885ac50d9cb180cb51f55945c3cbfa9a47743c63939208c91f015568266bbc66645bda05f96b754fd18dfc3cb40aee6bc42d39cba33d4f65365cd48d99a7118710de09af8272fe7a83152edc6a9fff2afbe73f13ec5312ea87eacf7e8e690f2c07b5a2305c50aeb088a7ccf3dfcd7e82fe040959cdbd1f23006966063e8b0a36ad38a43d46b87c96ab44e5eb25f34121ed2258b03165506feee198ae9fd9f6068d53db14c6ef4320d849eb18c7394e56a5aa7e35bd3093d15bfff86f57cafbf4fbab28d85077610b5a26441b5ab834a39d28918d35bf453a8226728d3678c4ac2c9c4228e543d7e8f6eac9439adc9ed068ca44145cb3e064692af63af6044f96ce45e0fa8334431b358ac10b0216c6eddf11052273779fa4a2557498874edbbf83c48a307b42f471f58d280d2d496aa9997b9a3ab1e9a0d502e896e45dcdc30dc046e47c7254fb64fe8d7ddb264d0cd0efa05b8633146f75f50e5944e4bb8cce337556e3aec9c45204491dabcc16d8a8ae97c3c3661b1fb189ac571409b83cae4ef44435773cea0394eb9da4f8c89c0c3b3b44e18fb298ba085697acb243e71cf2a5403bd1051eec46de6d39c491d680b0d13a867a4d73ac0d0ff84d5358ab61b33b09f72a12551ae8f8494d59518f3e35e3faaa09ce59e290befa9c041c4f85f9050cbc0f54ea33fbeec9be96e36717e21ad0c48928a5ea155b9879bdccc32d19c850cffcf81d51b74aad0f3d1e449cb5e70401b5272ba5d4102c52cde942c7ae9709cfdd57db37c9d4ea4d707aae69ae20cc5a415b9f0380d4b5881e988d810affdb064422f12556e7cfcadcb16f29a8341b0b0ecd222172ddd8cee94c090d7676c965523df7d9ae8a2c7ebc0e19e6bcaafe6f6fa56e9fe71eff32dea5f0bc276943a5dc9696b80158b369933d79ba10f3da67bb6b042909a7acccaddfb5b91c5b3ecc52c7f0bd520d733d47bd1641e195fbf8a8619fb8e749b12d7c9184aa9b0d1c6d796d51f24e6909b27aa8333cea615c8ca2a0544e83759a08d3599147705a25256ebd63009accae3fa99a887c9315ce70544d3ba501d0feae9fe559fac3b0bcfa51b58d6cb310ccc8427dda37b1d6e2375f9487b5e367657722d82c782ee7bf857f1e3fe61b7b4510c1ebb8349b8a091829a228004941df30187e8bd1fe4bc0c788bbebb87dc2a90f520c91ab93e9692a02b969659a5bab8b0fbb4c0f493ca4f8f0913ffe731f02c3cac07d9b20f358283b40c7d4e51d66067689a328db1aef07c25c0bbb47168ba41c7dc3731df298a09de1c3f95d4ffabe7931cf8378ff41f544e42c0e15e6d4da746acec40a7bfced4bd8fa97abc612e07427b9a870b82a62d7643d8007e0cb70772a5e249549a0e87f9fa6093a291dd4c134bb8554ffa1601ac6e46226a43a3dfe4e736dfcebe3759b9f7b317d678b9885f870a64f4915809a4a4da6611dd98262741bbb3ff19cc5d83f0cb0b11026e1c056ddb0b6b239e61665af25ff0743e9025dddec0210b542e79babe03ac466111cca348baf809b60cedc8cdef2e85bec18e7f56e66f6e61f86217f9c9452f24b087188b9813e6b34799e7024d62a5dc6f3d00d0867e91175084f742f146134a41852ea28020a5a6f389f0f748c06cdf779594efb8686d1bba5262be922f01b582783105ba151401daec8bd41a640e26a6433519e98a9af57e6f0b4cd605feb9527167492df758b4417194b5ab17033c7dd4453c4c2506bf2927584142c62fed91ecf769c42fb8961221a739fe08be0dde23c5a7bc6e8a986525256a1d7605864aafbdbb089c9dbbb26905da6442bb5123f6207c92f509b2781095177306cb60eb9b7c28ef570d56cbb443ef2f29a47dfc9b2cd956bd8179f20330188c5e98f0dcaf8d5af4ea2e7f1922381bc60986a07824287b13d3c877cda1a50eecf00e12bb7ca319227ef6843cf61ae394d18364f75d55e5a65fd2ae2bad452e8f72baed76ebbf9ed619716393679905bade3351aa84e520686fd73e0d59948fece4e82468ac02182ad9b0823074904b4bd1159e1c62757e8430d7eba0d135def685f512a08f34d826f86c9ed97f66c16c8d6f49023a274aafb6c4ee23f7e8cc42b34ac9dabf17eb93a92c01881474e808606fffbaa036962cded96417a1dd70f7fd946019735f50d9fb2dcdc946aa9e003cea8626070baf7ea30b2875ca808adb84adbef399b8cd2866b01514699da6e5f5a8a1743ad76ffb1095fac298e6080ca055f5e0f6727dff19a66abdcdb5123e7f10a52b2996dd12ce94b9115cb4cc15c1307e2fef068a2c962348b7af749225535a3fe80152c62f4e1370b7b388e9791f0c5835d9b09804f4c78ec7178128ea05a58b3090a1fc5feef0a9954f053057ec843e55dc2c9ff40d7259f34f5aee6487d6167ba8856a05a97e2a861211eb5e9b92ba4d15751d1f741615992d7f3b6ffdf5344bc70f4ff098b491189b6a560dd7a1ecc29750c94b930cda78a56baa9ae9efca900dc6b39fd829a65d77133dfd366c084d6b159144dab3389317240649cc352cf30dee7badd059b14123a2a3b9dceca4150db62a9a2ed9b7d5a28ce15a104ecdd046061ea26696e0a4f628756a739e91d910e80e3a61fee6f8a5d47d35c7fc107fa394b8b8c793960749db3a89c9095b4c46c8750f25a521d1d02370620881f351c77de362bf3acfc1257bb0b5f45051e19f51e854e81ec35c016965128c139c95c8427627b3e72a0f981363664e26359819873366a3a95515cf556ed424b89dc040833b89987f7091f50edd25301905486094263d0054f55b3701fe1a45d753969c8686f690f0e932af6b9a3a76da67318a7761138fee06042599d1b33dc4d8a24f40df596c9a6e8f76affddeb7edead46855ad87e53c58c7a2dc2d7c53be09ebe2f915632713a88455114f4acb79be5ce2a810611039502bcec4947dd7e0c77719084e0f0d9de8a8cc70bbacd5260269ef2574293b0fac600a5d66ab5344c5ffdb59ff949e0581ede44e6640290c0f76de1dea83cf6f8a499a884aa6a11ec0d4fb8204238a0fbe5e9b6290f3107478f671088f8af54dfe837dedbc4163b3a4ac85eb64f269d7c248a45c602eb89b5e68bfddcb456763f6a052dd9bd4f4897bad5c8399cd20ac12a6a938db684711805d35bf99918d86b2ff0713de615d88e47dfc18c3d66ffee1bef058120ae5c053809714af06d78100eae57462020c9dc2758d28c3a8567993c51ed08000a80a7b7fb6f3abcfce61f1e8a6b00073c04e96c5642810be0c5d61fe89ae7b518992ef3dda56c067274d9c8d428e42f0bab73be7d5afa04a3f9ac20ecd62cce81c7b141230f6f849104fadcb3f3ddf2c7015dec60d6f9fbda25711d419f6cfddc9eab8311fe4be8f66c2baefa020b5d5943b65b4439b773178f749c8cd64247f928ab143dd3da253d119c5dc0019c234cf4eb36e4a29656f2180d93ed9b6c6f95e7897ce73b560968798c6ade47d4b0dac5fa8701920739c1a7e5166a5517bd2831ef8ff907e43a54ca334cc40a101a9e2138303b40a1db0c830c7e4951a599b411fe08bb6ad9ed3e2ea364982e4e0a54185d2563f325f7783d7375de4976e39fb38a608124e428d0e48534bfe1d7b4c3b65a9bc54ec8739bffbbcbb863d85af0501a0be1a1074fc063cd1022c0008b8f72339fb8aa4ede6a9f4f79e1f3bcf5f8cace90b265bbee5f6ec9ad8d336222dc9dabb5b8a30323b3cd037d6b881c2e87cb29b9db2f8655d7e8b7e8cae7eb5b02c953fe6b9e025f0d35afb3bd262dbcdf53b34c020101535fa46528a5c0114b1810b1383801cd5fac6da7c71d3ef0594f322807d80468a9f0daca3bb59da737020c462b24eedca3e1e17831a92aff7705f6520268caa8fa3c57813e94a37eb94a42d2d6e9928cd0393af6f5d18aa3d22747ce7b080a85b85ff1c916f33d29a6b85b02cd08ade85f5e8badeb98668c3266ea67294a58bcc8cff39197793619530ac346900c2bcbf658e1ffef0845c8a72cee946b4279e0e0a32880ac8fe06a4dc27f1f7b784ce79125776de1f933c83709aacc91f2a975738d4c5ee7a68636cc379c398e5a104c70f6f1c10db21b188877474ab075d34ce49352edc7a7b01b7c55ed36734d75c441b2f1c4f0f5ff7b530d86932f110697229a1ae318940ab0fa940d541683b7bf9cc0119056ad38bc5afa0f3e306a29cf847634b16e1c66edbc141a0ec2e36f2ee174f3e86db365febeadf5faa3741c7964ca2f38b4c6dc51b8141fce023c6aa4e704c9969f2435038e5950df93a80f7d5553b899ffce0b3d35069a58c79241b5e641aa46b945fc2d36e46cec1783401399220cda055e27308ed063d4b5deb40a8068237ed015dc46b38c739396d07519e62a8787222248375509d88ea85bcd1b24b3bc8c5f2a6388839a10e166a69e47bbd4f8bf516dabb05a36d393d06b6e4bf5b21b85ad0181f978d693679d2add9acf9045410def902fca0b9c080467b4550f0aed98d649994ae3f0812007b80ae713b1223836e1a98d9e87da3810dca2e062c88344a027745ab2658b37521f5055ecdae36138d3c91d09d5e710dc24001634a87698ea52f927b5ebabb33a03e64139b256a6ed8c15650017f2b010645102ee56c4e01bd8c9c844cd6551ef5f1745e733b6dbafb082cea7397e012f35a7f2cb3b2c0feff7a70671aaf8f74be93d795520f894e2674f4f4a57f3baf7efc94c3c78cef10588086eee162346b2998a328ced2dcfb4f4a8aac4eab2e6d5697ef804de0618377fe8b50b33aec4f0f275ba889fa23e60320512b84a5614625e3d4085820b01b8ac445513c05c94eaf8432f891ffdf942cdff67191f78433cf0432b4ff384ed5013fdb325ba8a20dd806718435e0b1fb18268e9a4091b612f3789a1db449004f7bbf769d6c5d913cf1a068048d7c3045c37b83a6515b8d8cb80825e2b78a63f3e6c83deb12f95114f0b073fa94712efd63ec88c7b269c59b84ae21e81e2e04b4b33a316207e6dc6af0cb529dca9a2c7411a5257bc1917106a254342fb5f3f2949a8eecfd244028ceda4d0a2ac2faab16b8770b1a869feb414d3982cfcc76c1a31a5db95c380b29365295c83ce971d381553377a7df7cab133f3134e4ceebb3f8c61663e1f6edb7f3a5a10659496c265433a70d5aa887086fbf7ef13117e3d9be9e1af106d19090b14a1dfc4bffa56f65dc15ed3de104014695585341c477b914864efa4becf2b066013696c8b7bf7f720869b9e70503721de6c9db95d2e059750dc4d1d3a83d371c7778c828b8181bdb13c64b34639e15939bd8e12ae55686165bda15581df39a9e7bbea40118fb965f47c30d5c11a8a418b442de2af1a3698a87e4dd6e20f8bddb9757ce89f1f30fa2b0859a702eb56c91d3a95975ddafe4273a8a71e3f873e775188c8f22632c79af5e7888f6a12f54993bf602845f23d7398aad7bf68ec2bf1a6a6e6bdfcb92b9bb2abab23e61c2714470510ac789990677d1ead25511f2ba4e739dc32fb204392c09208e62f5910d33599ee7fa60819bd449b570c8a969856dfb94fd375d92cf5334d82edd6c4bff062646040077c13f9cb17c6a50e93a8d28aae42a903d92ea926e512b9babac8a4e7ae925e7b1cdce720d070417a70b6d4bb529b5d29c7b6c11843d2cec77603a9e15bc724c34285e764cfbba34246ffdaaf1cad6481407b75b1bdc9e9546500d5dde5408d48dce55665d6a184d6a3cca8464c94f41c315232c6f63e029d43f2045380f7b350101a4556c8d9df6bf26354c0d9179b1a282197424c8f3fad7987bb0d948e29d75a38bdb2d41f72b6ada01187aaef4d9a4f338386da37cbe53b153059c91b1891c53c555e63a04a09d7944d0ee508d3277401e882e98b9c55fe5f4880ae62157c62a7672af0f972fb49724bb322977574f4afecfbc9d96f1809f00ace70f1d92dad333a7f8d6cf4038e77f2437f4a8b240573b0d138cabcb4d2e652b99e60f540ba51f70b7ad82f4eb5d0b0c3d099a9fc10803f6a84edfa0bfeaa0f295c97b265481424fd3d6b11ecba3d90d03ff6a7338b4c781c63b9ecb9f65533065bc40f73814c5b17da7ce2d98a2839004b5058684c8b827be6d74efa95eee20dd3f363900bfa60f29d0e9f9732e40ec95946ce12aa28f53e65fcea703e650a9a83a4dc6c9984a1367cb064ff9cd885122c6d796137dba524b233ec40e2590ceea8356357f3626ebc6b48bd3e66835c39dc61b1bd670d5cd046616fc7dc8d20213c8e705900297a760611982707ef2e55671df117464d62aea985ed51e4fe80113836353b50a7d708c83c70d65e2b69fe00cf8ab6e3f7430c436036b03bbaa16fb96f4ab8eadd4f5ef3807ec557c2c9017cf74f7d62e3ce22289b664cc80fc6c5b1461c47419a0b12c956bd51e040b536df2ffc596a056010dd7764265ed9e657102922f6661f037053996891d77313d01a17e6ce00beabe40e4affa7d637e5e5373d86508822751738f50b0a27f7c0df120e3aca93c783ce565731c1c17eaf79313d866a324192cbe30b2c3c0fa06e125a7877480575f2909034ae0d753a911a4fc6ea14cf2a7602c5cd1185578bc06ad0760bd14c87226996f7e63ac0e14006257fa5d744b52346cc658ff390ba9c691050e497dc5207d46cd02ebab3f75b66cc05132d56ae021f0f38d9d06ceb4213d83203d56f1ee8dd4e49d23859137be28b9c102a7fc1b3651d3324788972b1068d1f362499fae6171e84c185b5acbcc2e5afb379644e5d31e4b13688a0b7540850cb1c62e067563fbf467145e3c37f28bb83e6a8958a2cbe5c03460ef2e9c52da919364d014952495c2a14e93da317a94c801dcd7d81a543c0687e3895704bf514cb69a9745bd01849fe7a18046955583561ae3ebc23d8d8f24565773c090da3bd1dd3af36150a8fb3eb191c4e0c6404ffbec456f076112ae6682708cf4bdfbf1a159cc1dc3537bcff6ebeca60dfc4d6763f82ea51f2cfc6e5f41e8ac612844419c7b9962887d7e90e84bd0f7ba940f5e056313fb5629ec1ed85714483f7ee064f29f65a11da551323a18368fcc3a621c56168d998e65d4c721b5c310c0f78099fc736fbd0f9e4b2d8955d80736bb625c30b951395c32446473628d09c49530854429dbc3a2bee38e77776f39060b98be021af556a0105fc3825a9bd313b91bcf192c17fda131617a4244e8890b30da40c9724cacf3121212a48f1663940632e17e8382d05a82569f7728ce655e7b78cd7d56967038e01f909f78450758bb9698b4a8bb4e45a4888133a2cd2eb8e0eb9d546592b11c1abe7623c6a5819a2b966f8a112f5fcf481bde17e254fc74af46296ed881af502da6cd3a1191af33420359fab27a1bf4a16555514ddbcae368dbbfdac6e6a944d08bf05ed1d47fba171a3f7be64a07fa33d96d16efc63bc2c5aa7266c5406a3cc370a149ee6dedac4dfd1e3e835a54c1ca378e1e76e6aa29df2a17417ad460d6c5ab4e3c3ebfb4469e7f5789af299faa61c335e44ff119dcbbcbffc3b7506ff9b25b6e94147b170e81ad6b634f1e566ece910018870002fe2992553d8cdbb469f0d301ef866916573b725261a2bb579ecab010f0572a45a57d32fc89ec2916ee359bac68077752649fa62b1e90f635b311043c7f54767f560ce78f68940a7979e1be4f7e018bff495c02c1e3d565920448781c8e6fdda14b94717cfbfc7a1d98eed59e5f5c3c7cd96ea88b61cb0449a602ef7a48a346a6f50995ee84748a0c5812381554a3d70f5d97ba70ee1a4c8af9c73a3011fb78cadd1468d508a90f3b8c46d985c88ebd100489ba141f9c6e8de94605dcd45198d232dde6859b0707df711dc436435e7950d4a8c10ad2e7981aa50b07c8be2f48de8d9dc1c51e7af39e9dfa5b5ad0416f24919f8fbfd295fc283ef799df207f9419579c8317671cdbf9b59d4b963d5d954a349a5a8c70f8656abccfef41e9e54b6d631e20a7b0c401a4e839c31b1e3857992e2282013e6bb87ba7467a818040e7adfd034f8f09b729a6e5083df3e7be0946d68dcbbfe2c9ac799ba7caafa99b919d9d44eb949312110df5fb1e263073a8f637dbf5f281da2339df341609bbafa194b02d973053d98d535a843fd6ea500df8304f63487d1d2ff0f99d4cf571c019db82528fead390fa41d88fb902c89d49402c9a752b160310c98d4b08ced067c7f976f14f2d9612c42ce6950a32f808a56a5405f40a2f5bf6b0d356f9fcfd1734826313c0b5031f0ece8cea33e7e10830d551bdb82c63e75b9b9dd4430e7c6e9b836e1dd16886652fbe48ffcfa999d729ebdbf35370aefdfc16cad240d95e088c3d43f74134bb50c8395afdf5a7f61df125d1f933fafe1fb4afd589a7827e63d583d356ec00c59c63eb801e81713b632562cf065490d845fa5a700d9ae40fae2a280472f3402d37459484b51994f38ad5f4089bdb7c2b4a4d67267a3c86963e8619eea31539f3e3234a71b4f320ebdf1a71d04fa640bd9eedb3c98d4d572d7b16ee36d12940dbfdb8f2373f0628d48fed546ef2fd1f45b89666a3ed3964af59d876c764e0a1e09a0fdd391593b20fae1f043c186713fa9c1a44466f98fa02c40527802546dd3d2f167a01afa35f06ce23154ee3ab0e17ea23da519b2e93c955db1a9acc40c090b025b674a8ed8eeb5370f85f47fb6a5e38ea0149639bff72f03335d1221e1cbc5d84125bc6f2fc366480b9eb70fbd0e079927f38732a75bf0965cff0d03754662605bc81ed555d3d9957c3fc2a1a3c246fcb3176965eb9801378d138ee2248ade4d2c48af79cf3e9fd5cc51310f1561d78c5103c4de8165224f3194c298f80fd9c5765d1c72cdd08208b6c21b28480b4639e80d69ed5647b3de6d3fd2488c5175a5c699964dd634d26944dbdbdc4b8f967af69a09fefb1241888bbe4e38eeee33147a01420b1d17d69e6b73c420b38974a7c4c08fce3bcfc76f67744bc513299fc6667e394b4d86fbf46db6b5c1630072fbf31ca85204633fcfe3fcca3e883e0fab0e591b8417060f45d7b1a0f0ee959abd1ed787ee49cd49a0d1e01cf5aecbd0968e9766904e2fecf8a5a1ea1ba6f73fecc3d48aa7e6421801e099dd1f2b7ddc07f2aa0a600139d485042d5daa23950e19f3f0c51f05c65c451b533d310f7c61917d30d01d3e7ffa539fe42e2b114b48f92d54cc3ae6b00a8c5fb9b77d6e31176cff69375472edc04987777a80349b07b13dc21ce9052b9aa06bb8ab101ca0591faab13fca01755f40cf3213a5e3205743d4e5b7b2a3f85f811ca9333fca024f54d0c4fbbcb19497ea46a14f4090c74b006e3facf263afc5433bb69350144b21430b956ffe38ef8163401195de200ce848bd0cac7d1b4808416531084dc69043dc994f91edc8291871d726a77b97af792a6f68c9e037e28790a063933b0d79ad2bc292c2f9b0fd2cf5853b6d5019c88b5e2be13fd4e7a5e41c77078b86f7f5a552f1b8a0d01fa9a662849ecb00a47b50407371f784bd4e420a64774016e4bc8613d1f1b529c8d622d6f23c319388b546fa5a0160e622f4cc886651178a7f15b34d5405bbae6756fcc63d0c6d78b7d1f36559e7bf9b73622de03a96fb9dba871d31c327a5d1cef2c4538f2e05eb9ffd56505e2acf7065b5d109a1b3d5ba8ec282a25f125f9dc4ac0637a709f8a58ec7d165f33604b34c4544413281c33cddfd2a5a40cc54512a2fb7a482ab32adfdc77c30ed3145dac054a51aa777b466d5dc9df0ffd3534daca7858c0034ad886b6f68b4a9cbd7f20be805b1ad0eee2b78fa7e134b7184fe843437647b2b43d32f622148c106d79d2f87e5bc9e19ed2420dd9e62d9c828c7c12f3ed74a8825e63f68ece8cf35b387b3520b4530a0fd14a157f53628b9feff3594b44a70acd7faf2334104b2dc2c9f00a9be4555898b8836fa3105b3d93e998fede9df7f7dbc657d86dd77d5f4a55562812d02e8573b2300d3786c8b86385355488d2e9f9be76f0e14ca6f1bc2be66ef3c29790b9b29ddb09700a6c2e55d7a70b3948f00f726f5df0f1fb60672b16127d51a4ec1742fe7513b5e9d83441cca26b509b7129b06a8b141b01fe4c5791671892288771829e2f8637ee5d8690cd49c2da9fa17c0056765386998c0737a076863b6e79c5ad06373e9d550a599d51bc65ac949e29dfcf21a8218468f920729bece44b116f7dd9fb4cd7b0988446b1b6c7e0c3a037fd2c0b7b904c9b43a8766c699d94ffef0e9382797646b2d8ec29d48de8e1286c266481b91b551aa905706706ff043461f7c859647e7eb156b6ed210d7a71a707bc83055353374e9a9387234199d726ce80d73755b95bb762acbba159747122718df768d1cb2aad2583fbe6d46350d26d651f37dc91f2980d66e668b1a35015c76a664b5bb0b61235adcb0fc089ca3e3b41d65ec8213755554a06b3222be1c5ffea5d2c9f82f6a23b53051237a0aef1e3fb501e64a1ccfcf9b24d5f1ea37121c059b65ac8facd7b24d98dc4aa52d48c8a9a944a5022a59f7102c77017af08606a1637a16ee4803f18e008914fc25c96e44068c7be7a59ae4fcddf769b4d83b97bb716d245398b340eaf91f6bc3b2c7ad1773f54b22bb15dec72f842fbb25988f61d82b680177ea417f1952fc8da31131fcb5237d185c418f3d0cc3cfef27e726dda1b60c13eeef7a61457c39e76c9a8e3227b9f864e5173ef6d588dab51409b3d5f156f9c02406ed1f7475a5e40fe82063411a5aa4bb36b560d0da0142b53e2d0b81301f85d2520c365c0665f78086182235ebb6c4f10c7a396f0bc1007b87cb00b5834890fd913e3b46f20d438d7c10b1c70bd2b13fe5931ee1ae1fc346383f5a6afc69569cf8b8534ddb195972570f62b7fe276d009d8f674b766cc14c7d04dbfe85412981be842729bdec4bc79b737d6c669652bf39dd4957303056a0fcd8d34ee898b034e3232c1bc724b68b22b149d7768d1c5af0dfa95066c18a19e8c58a6f753e61a2235dfda11a9cca5e6e313fc5b8d6e38e111bc547b8e7da57de0f14d2d76b4bcc863bb1ddeddafecb98ca974281e2ebd56a08782aac708c6e54df6f20b2a2a2c23e7c398f806c1d9f5cb901d01e9a603cfa73b76903240f19e85a0ffe7dd5d5b47002e8aa04f93de7e779a624516e4eb514166e6d4c122473ad9c87be653547efdf5fbe286928174b1a20937f77e3c53ae579918dac50fffc0aacaf6ad7454d76b1b901587988702faf17fe1fd6c4f515650f9a9488507a31d5f2e9d2b529a05273386d63abc367d82897f56b94b398f119e8a7eab33fad4d4f9ee18adc54e5e815cc5722cf64fdd61e60f7a30fef0d6b6541b8c084115081d64c39bf7dc84e852ba6e9228c08ffd32e29a317d9d9825793cf6dba23a7777e556893b2777fad88b5c654112cd7ca2f30ec3dcebf2c634eab18b32c9adbd87f4f092507bf4b6cf857f149ff1176535f368464bdad5843d91d6dc20125ed7c4aefb3c5d87daad31e5fb1d734f3cc463e7847a899fae55f6f1fa58c095a4390dfddc66b914ae8ac296749a30a503a32f3f1567cfdbce4426f4da29c7efd3c54521bacc31815e00f12501cb06357653c37eec6da1f94bcbd61f09971ce1ce387466ff154824d262df258c4d4f0822a0ff21a866bddb4010fadd0c5f96bcf4aca7d30a48c3af3b2e38a91d96c8f6ade905372dc27318b9feb090a1b27af6035cb210f79ee922674e626aba8cc2634587ef698072a5bea2dde679437d6c6b40e877a27ae7bfcad04ff2edd275e733698103d5d6a1c5a69e8b49380754d0e4dc54b1923e08dc333adf321ad205cd8856b8bb08d65926eb5abd5cd09da8897eb9dbe513962d6fa654504ee772f409acb31b72c5eb3caa6965d6c5e973ec36a0ca5bd135bb5dfe7c44591bb189005e2948563c3bebd37b654bf78e966fa707a41049b6081afbc997ba8ad90cb49cc5ec81e9efd4c7e09cf9eaa5f4ded44d34a9e9855998975dce73f86f17d57db11b8dd56bcd2de2374fe869d1eb187e3426c7d9ec5a649377babb25f743bcc3383f1e9636f93b1a9f284548bf1f0e82bccb372e1b6378cbfabc7a295dbc93895854a2c1c00f96b6b3cc060117712934a23e553408bb5af27f0705b7b70b0ae846cd9edbd11254a02493d52a414b4a52ffb30f36fc739b9df2fec9e1e847b3e578dad694e918282ab22bbaeec9958b992cfb5e241f9c5c6254de066529a981f4ec46097f24b86981c780915366e2f0b9f503944eec572df094cb0d22762aebeec58912fc9ea1d774a998b7ffbaeebedd5dbbd32502a0e48984cfc2c0db7a8cd0c59138b00ae3a707e8f1cf87fbb596b5df3070fb52646f4f9741cda3892031310ec7fa83f8671672254bc7be5e5d46c5591da99fb205b9360e8e625415621eeb13e956679ed55e9b2ecf78b4d9fe6932d7ebb0e894c831463f5ae6e4d65004e8f63188e959b69341075f92cf8d3e44a2f79c7e853b509afa6aff701f09df1ee464cff0be99cf2d71c970ca5bd5911d27d6f490338360a74e59817cd290fdf7478f2319e577a190c18d4f5ecec50e2e7b8fe3c325885d963fc90bd4535419483cc429d48523986b2d37a9d138f167130228a9dac1455116c65bf6f1fb8c0c3aa222b8336fc5edb6b565ce8aa58e64d808329a4876702b991d5eb36c83939d3ea0ea981020ead2cb505c9c16f995b99c65aba3fcf16386ae4b9f1724f029824341f182aa75af9ca402adff33f4baedc173ce9ea1cb0fd6e4b077cf5bd805c8545c98a976485846c7e51e2a8d3adbbb60fd180da97a561907624699457f6e200d1af560798362f93de3e3778ad946d5b80f1a0d8c835b7958d6a72b2825e17c8252e0095cdf302e7a8524d17ff76af62a6100a71ffc9a718ef63de41b892dc360100081176286174718b24ac0733005719a03500f79d46af90939dbcdeb324eacb31e1a8cc14e62bb4e55820c26bdb0f28013041d853c3d0d8424d03c412786e241321ebc909787e394abecc6ef8ef8f0dfb49cc91b2e5c9743c3e40df89cc09165eca65ebe6a64271173f14c5c42ba8c4f0d2c8f4a5ce4588d9d1dae474dcfe2b963b7d4848b6b05b442a384bf0c9d12b90c6daaaddd0214c2a1764a1604610965aa26d0c2b9b00c78933907ae6ad67c6214c9d7a04a04a39b8d1a46e08d6a07d64800638b877db44334118b27073f594eed38518c5c4ea66a5c390c42875140bea246e652b4b33f9f3ecf08a38072f7169b3a40692646ba0f9ad933a5d345c60e477244f40b6b9fa073cbfb21180b52fbe128c357f134a95fcef28f2297e260a465e670831589b7390a0f37122e2072ab1d3822d39d94a1c251398380c2805e5f57f1f2a247f1b3d56a31f20f8312a7bca5d9dd9b4466b1f25c8f4569dbbe500865a00537e3529cd51a2b921975f3333e551656e1b8e94718ed51be2c656de06ebb1a3596059e44f7651a6c5053b3f8b2856d357c8e53e0c21be41ad27b05eb873714d8139ebb3af9a1fbbfe41dfbc5c5694071c3cb0da2b7638c61b1bc1c8dfec76fbd3e716cd2645d3427e7e31e5fc371ed5c4b0d32c37f46df2fd7911721416db9b76a41f24b7d4db9a213496c4222b8016381270858b1bfc33c3cf8fcb692e5f11e2a0bd3bca9b7e6bb0893b2d0cc54e3062b732dda5547e91966f7d4515f5fd0572257a750be49c882e40f7a3b9be38f040ecaf45a5206be49d5e1ef8605f2581be1d854887129b0634df18fb3c5305f6de3970337a522ad97f595f75f7502173bbef460fc7f612b5920e85848b62fa87ba62dde0fc9bbcc255152a64131aa4ea884900a2189f7d5dfc20568c760bcb1d3ded7d191b4743ce7f1f351a6501743b9a169b30e5323187422953ce10938434b3df77a79f589b8ea3cb075ae4f484ab9dc992547f373e77995b4926b8586ccae1e98ecb61f551d94ea525a98629d5ed698a8a250116876df3515d8651daf6eb79c5b348259c2e889b37788176315fc9c8bf8e964548c5f653862950ea9b23be4c6e3b5b26fd19f82d72262c5ffd2d910350ef334b6782452295032ce9226b16ff36ac2afdb4eba79ff5f21970b086db23df2a57046dbb7fb0d439eac88836dbedb0c502fe18a5de2826eaba99af56332943281110fc2e9a7748eada47638551be98cfb590d5e7cfec60f21bb244623b92f0be7e084ad546ad2f888519699244ab30ff14bbf698cd55e94b1c0fe90d2c54e05d944116f2da5d79ef94063dc809654f109a8c575f45fdfa3913db246f3dfd9ae825677fa888ee472bd4f322ad1e42a76beb1d854db198c2883229e85de5f09b6f0cc6d272d8b1fe1f0be3eec5793394a2b79b2c131e46177a7a9f5bd8766d2e71aa6e62297397508abb80e925f7fbac964dbacf0e80242171c44f53a543d8dbebdedec69bef04a95cdb333346bf327ee86131bd3cc42fffba5efe7f79730158e1cf23ef24819caa8cedf63d73e09dcc9ce0feaaf3fc20cd1cb88e5bbdc25f56513f6cea20d48d66d9c7c27e12596c138f133566d67956b3771b9ea6ce0f0b26ffb18f327839730573d164959900b3b7b33a12d99da64e263ba14470f3914d72a428eea2aaddfd491ba3b6114b3b5fb9a27e5fa6b940e7884482ae568a8b56de2a64610b25b14a01388b7857033aff3a2ce5834382751736f06643c033a976894a3545e5a1a7b7f20ef6957a485a49bd791dcda2a08f03fb9e940053d6c3d3a7b0b906a3a6d7f758ac97affd530ab290cbb3988515e0b6392f655decf9a93cfc18760c2b0f15cdc67efc69f7f628c45bf0f09b3d8d6b33a3e54a7ece47ab468e7eccca631d2ed6a9757635f2d3bd12ab2b1439b5fda202f1ffde00754d7135a4908a3b84917e2390acc7b04b378131a3102b8fe3c4c29164d8a3b21cd53a81c37d5c36c63c925a126bafee31360ecd9897c2d2ca19728dfd1491f840a4e1a4228126223bf7e5aa58e70131293fc897b9cfb7a2f5266821196b961f26aca89a14ed4fe814bcf34f6445def155083cc5b41b97132052a6146bc5e5b006859e1c2b1fb7fc7ce8085b8d80fffdd2a3cff2f2e41765e7b2584d2ec0297a90630ef7a9b4af99337e214f4084262f28628c4b5cbd185a74b2fac31fde93121547becee56d0a7f65b9d4dae8e8303830ecd93312770701d61a53c32b68b7b8a0791ff487a79f0e5989d549f444270e4a6ba5134bcd263b8d7c9045974dbbe869eb435839deb9022db651e75fceff4e206ae58ea6d72a28f9acb9f8adbd0756797e9c99d360eeb53c17fef8b53467dcf20827f0a074926ca80f8453eb1a899d1a25a5cce9313c8e99b65aacc361ea7cd1b6b9b2746f38863e5af1fa16151b0ab8cc5b2a03fe1aa7587670014a20174fadafbc4c44460454b552b3e0ccea2b857164568bb84d664c4d866a3426a89713e9f7c7865e13f61afbc821ebfab6003e55fcada335fb9a9601705e026c2180295197475df63f9dfffe6e8f1c8f5af10f556fd4a2f7ec9deca022cd8009af7360f467b9c3235a6c95bac7da2c52482b967c944e2f6697a8fc609db49fe6d7179b8035d34a45cdaf96909fa37141195ab27e94f2749f76631fbef143f21a167c24aa251c21620b4014abfc73f85b89951d91c128c534b7163a8bb7766c72f5971cb5482c7abda023368b48eaffb739a7fab89da550761a236c197b41127e9a2882e07e776bdd3de968b96b4d1212912188abbf5701432c4246e8569a84209440c636441f89f28a2f03708548e0e331eb54e5f4651a1f5a051bd36a55e7bd894d538633f666b54c7b37f67909198741e8ffe85d73f10bd1aefdeaed7faaa64f34ab95ad7545ccb9d0d5856cad5a7f1e800bd98521094ca4a33d0ffb189b58b30d638f760ddbc64d07d7abb9de269e9184030296b756936f2df25778969d920c5043311c4907c6451bf887f4e215787c75e89423fb92b8eddb4d9bc33f674aacadb7f877b37bdeda65f110ba7cc066bd950d0fe1de6de668070c0f5337e512c312c9c36cdde6bea2df2c6573cbb9bfa5ebff4da7b9114bd1e63a0bc5775370996eba71205426f3a1030d348ca5f866bab79cf29a8fd8aae3f882ac8502ec272485437d9462fe92c0f0992d91b1fbf6bf47309d00d859494e36e663a72f6222c05c981c92a4eca80d8b003b013622d3c76d9494dbe1a8cea3829a79bdcd1537cfc9c7fd81fe6a6b51391e1aecc4d3352bc6c2a01d38a82b0b92c9bd2a664a089eea426c3a5773ce2c4af3e74bcf9de837cafca836364c210d26c81581ec076aa1334ce1c9ec1eadcaa2b6cde8b02d4b94006521533eab83effa3bb82cc71e12073975edbc9ae89c6f1840373d7509dc99a770c0137cc1846e99111b5b41caa3f047e8963ecb4427a081dc6fd624de5fe4bf8e80077ab068b395de87266b845ad0dabd389d0f5939a2286fa2b26a94a8d182a26c236339c7aefab828579dff4d0d52e9f14e67f83c0f0e55530b1397a78d82fe81a31bbd327f9e0243b1d2df8e2a0aff1a085840d93e73c6868d165ceac60398b68366b45fff2f624aa40d07a90a6f546860e77f7c569586d6ccc4af0272873bcf6f83c5face3fd5544c186f7ca29ff5b6cabc58df45e75a04b1f924b16a87376f94d53f19788d72427f6e9dbab2044b314746f559e40b2218073d0b617ff3d89cdbf53f6e551151626b780ab3537813d54ee84a11fd0ab904c2b206f88b6777055ab78bc50fca66aeb33f471b279a98765baf176205ddeb8d199c2fd423eec1cd5f79426ee1d612fbb38693a8a45e5f230d706f4e591f62c510273a977c5cb6410eb5d0e14c77db8ad3e43a07829998c53c8a05a405b3bd6bcef5c512fea5809cba90b5766908c9c70967da229321326934293458946e60410e354c6431d6de68611f223e4daf879639b2ddfb8b91fe1f4041f82249a0de88fcefbec301a969d14d354a37f0d0f6cd281845ead23ebb2bad431a0d85a4973bcfef8c24d6d9b0aa95601d006f3a1d8f2bafe739f1b7148d9b009c29157d0dcd7db96296d98da3ed2c46645ba296b174194db7cd9f57a10725d0fed250f31e28834fd5ac6e2b3ffc6b7963fd962d6285c66743feacc274776ec0760ba689989025cc8aa4aff146333d7035fa4c9ffbea3b9f36fa6d58bd4937cad686fb921b025157d31d9cfc82ccca1fce3372ea098c6c73bef3ce4b66230aac782fe307fbaeb1af0d509ac311a116dafd86457c15cfb53ed56fad70420fcfc2fd0ab134994859c3da97e271ed466fedc2e758453f271d6c1d667ba64654c4361b2b0c571644848040fdb1a4ab39949578e3cdaf2bd59bbc8e06da936a8847ff82f0c623a106c58df26df8ba1dd796e507ba6d6137f687bcfe7832fd9979d4d54cc9ebc1d424868dacc5a48aad9cb887d691b3f5a2cf209f2374a6270f11d2ba80e70e36171449c0e21b8b236392f6ccd8414696a8d41bccb6e8c7df5a84ba1593735123dc9ac737d4612c7834475640ff8ce10eb34de532068bad4e7ef0b9438fd20f5c126ba2fbe6ae062f833fcb07a42995421e63efb090a278d1a42a2a48e81314b35cbdfa80e2ff829aca087527b9d33dbc138f58b61785d088dbf5504e1835185740a5d6d68438babc6f8f5df96a4e044a1ac8957c757ede84648278f3acb11071a524fe77094abd822aa3624eedc7dddce827199b719946d0915fbc8f51855596e8980f86dad1eba70460dc182a12764f67a9e036ccdf858bb3dee20627e59da7f93986643230b82f7cdd71cd0122aa63c6827b62d9ded51619c2e4980615ddd10a1b07ce03c58fdf2f16a71f618ce9596edd90bf2b5a5519ce0378db84d36ac66eb3c758a4165f46399c9e36600897f5a45fa10109e88f3dbdf26c22f0abdf0044e33552f7bb065725a025180de443836240bdaf55dfa076295180efecd5d4d90d958386ba95a851da3022b4b7427cea99612b92b6706ae6d3073511cfb5e46b4ace93bd5e41166598fb0397a4fa1605eaec26f4434b36042889d9eddb72706df2db4ccd4e40f598814e36de61bab54b2fad35942ecaae8b89c56a4c34b1ea9ceebc062a51e80a02cb609e5eafd1072f378154a3c60850f76b60bc98aa3a35227501688cf94cb9f59d458a3988b32a4ecaeef4c2c2b6090b2e90211c458f49f697ab12b7a5e7016276646a10e9a6abf9b716e053c05ea729186384a559f0bb9c6de2b23174a421de24ef7844c4b6ae8081486caeba6091bc4c43a47d9aad0dcde0bb7115a380fe9f34f08cfb1c4938c984f0cc4e0fc80bcbf71e6f66899a57a6794fa984e3eb102808365705d41422cd5b2ea59db76f5011bac249d3602be69bdd16d94bfe6626f24ebf09df475ce194b58bc25497ea49cb69c4083154fb3ab2047c7b01ad0311b1d9795c3e567433db1454c58a992a75e368f4525ecfdca627d5f444a2693d6f70bd184d88f0ba7b35434af54ef2c16f4b6e9695b95ba0986cb0b45cadcfd33f3925e801eec05a33091677b745078e43b1ab600dcdeb53d2afd5dd4ca2ff772b4a3b6aff995ef93378d805f32d83644bcdcb71845bd055d3e1d2f69173253e48756e731050f36ac61c0e22daea3cadaa1a3164042dd948ca022ee5f3b0e6abbb23f1f6864bc5b15dd528d00b7aac5169e4ea50ca50980f2817ce6b180b2b106cdc92a8ad40db1e99360b681af6d95e22624f39ca7f056add3972f11e9f0fb711c51fd643c19c78b058793df0579cda44c60c24bcb75a8be91a464d425e4b475da91e07b8685697b10da18caf8697cb090b13535b9c01305eaf46d750e00e7961ac2bbb89fd26f959caa44ee7227934bbac6518d95e04837b7f8562018d15d5c376c5985dd03dd62a704501e618aa5bc6db2efa3341b1454b64ec18f7fe55c9150e3cf14023e39f4a36189352ded56d6215d20478bfcf811767cd0cdc764a1c9a51e0f1c2ae96ec0ff1daee56238978a48c6585dec159c7a6d1616728b611e6832f6e40c6c9eb3ab791a7b8adade06f63908657cb7576369f48bda4fe405fbda5bcf5b0ed2f8cdca32d27c543431c87f7053646d830cfb112129e4cb913ad9c831b50de57bcdbc21ce52fc652da16f88425611c106af9a3c36773a81a3042abaa760d9e9db1ebd07c2865e766df8ef2a204565389f9ba9c9cc6cd40e260b4c1d93e8c3a3a1732268defd3a439d492b2d342e1c06543c27124753e12d5bca711f34b56f79dc4b5f1310245271a31114c32c495e6e00bc21f7ec37a961e32dafada2cf295c61e5ecbffb450b55e20363c77c2ea709edd89e090764e5c7dc7433bf5101e3b5d2b696aabb2c3f1368902df6f7a541a2d6ff1751f4632492dcf19c4848b458403dca7568ea3ce53556903a43d41b288c0cbbd4b786e441a6b675c0161d3a1232bb0fc1883e7f8f01f1544fae974005c22baddd560c5d54e55d51ab90cee589b37a2a123692c7bdb398a7ed1df0b3ab4e8a27bc52443fb6b211c777f43e821202ac5daddd6f5b7d7c5c02b9d1cb4fd19046d254c855ceee84383dabef9d65c14f1d2cd8695a337fc785072104be0a3667d6bb3c8c670fffcb2c7f7ff472c52f3fd167e10cfc8a3f54a044effe9365113ad86ac24ac81f4a5760c86e2c53286ae45379986decfe5b6b1505be30393b7773f0e96ffa2f1e8ae3d1c721ff3a33eff678ff4ff86459db537980d076f4d830f2dafd72a9b705945ed9714e63c59632f4cebb9932c48d0a7733d669ea9ad32f5cc0c2eb1b802d80bb8ae3465e43994525f1cc4b7d580d19d6e4e0028569eeb3911590aa04564aade5b468611cde709efec7fda36e943b081e936c2ac6886450b72615628a210b810faa8a54abe43751139dd137e9f2a06e9fd9b0635ee428fad01bfb921579a40b1969a28c53299df2737cfe1eea520cd39fa35788484bd499115e589144c9209a376acfd1f4dd092c3163845c7ec1240efd720978ce159966139e7ce08c591e28f252feec1cccc98daed1ba2839899e6f5b22d6119a99bc91687efa0f6b54ac1e247750f705fdb7ab7565679e3f02cef5583ee8e98a1655429da20f56e1e1bdd3bf0f222d0426bb182660c26f0fdc2c65dd7ba59f12fe2f361364305bc53268a5652500c2ab718babb87fc5b656395e749cd5cd2374ec7ca03d10243e36a015e2f2cc38dcdc86a31651314746b6946dd28ab780b6e2d841b359de9002cba2edfa8df4a9650758df0fd1a469af8280fb2938f0e62b562cdad412bb87877eeb6a24968debd33c83c49467770692b8109fb2f09b24a110db53dce3e1411ad4d6331cd6ad9f2d35f0d9d71f650cc214674fab3a7c6560fed515f2bf8614d8dbb30858cd78b79862f4db6e5681d84949316378a947afbc82c9dc4c3d4c5587eb357ae72ffcd2c1fa114a51b3637322ed640b5160effa718661c71d0ab372d4751c4b37bfa35515eee0fabc0a0ac362cf05fadef6740d240897f4973b73660e93d4cf1ffc41ca5785242f52f9d06dcc305ff4596581641e4fb2abdac6d3f638e3c101bd183953b5ba91ce20cc35952f6951abaa71ed6d0f0f56e63449dbe9094f73d0cdbd3f76d3941dcb8839ac8cc48349e2351d59958b2b177778e5a51d52a5c62a4695e979d3e925d1b23f2058adba8ae189177f734c4abe509b6dd2886c1a7481bf4826dd41c9c7c7d57d89318619ff2225ac41e5aee7f7fb5e927e8c2b82e8e64473ee3f8878dfd745c5a8b267657f8245651852b1326017d4718e760f185fd6320a712ba722f0a84f29071959d6346458efb75b53d366edce0c331ac37b95448fc1e18374f6fd99cd131c975bff830d6ea3c5dcae5877e78eb741cb39edff852b69820e121fd6038051fcf70bc6ce1e751ec675868c2c227aafea66fbf1e5d50c2d66c327afa75b457037b6b990695fa5abda5be70251b57504f05cf5c81ad704f2dd4442a9ccd42fc309d18b9f8f697c452fae970c0c5363d889fba65c0fefe1ca327bbad3820a7f9b012275ea4974df53585fc5c29b6e9fc9107e188fe56a7e4978c8e645a4df6495fb6b780160f36fd02f589060b859ad20377cba0de9e02a651b74bc3e1c6802707862ed8c4cfec887a783df67465112316ac42ec571a9346e7dc312cce310cadf9857c30254685327bec296eaf0b4c24561b8f3c9967f1304a40482f7703dc939604e4604363d36268c996bee335ff27ba04b1c2417ed660df978b55fb9247122541f6f54c73b476afb2fdde10cf816f5dc4ebf4265ed80482f22ecfc427025269a0d3e0c1c6d4e621219544ac69ed2055eac826114dc2baca642bb4a528cb2cdf3882c954e037125b36fc1fb92503de5828900c1a9630debd3dc399540dac0088e1cc9449bdc17ade5b0d38b3bb9204875038da6b5aee18f80fc2c8135ec9fe36493a7425a2ca1bb8ce91b3dc8458ed3ad0e8efd8986c19a8737698015c4a3a5bf3a63e48d559a96e3cabee77fd7327ea73e0fffe5c306b51f330be73832a8a3d1d055410cda76c5f26c1363b4154aa2d4c12355efe880438383dc4bbab31c961535f7722d88792081ea95cc0c01ccaf58bd6e1d02c28f0d5f9c94df0219f3630caf945836aa3b3ff176c5abeb1e098d259e64f36a9fee8b1619b62c05f294680fd945a0f3eccdd21f6367bd51c698c3a29df86e1f6f0ee42750d608fe8e7bfe6f4df01883d2e9051f1ea54265bada3d9e0caf052cc3fbc35ebfb35f66b96aba138ddf90cbb7fa24845b3ccc3dfd93c4982216812b9d97906a0cdc415d7484ae137890f8f758aa6f185a9f4d40bdae530c00bda3822b25b2250c7b14e1f8c1ed2561e43b8bbd385db154d1acabf38a50d323d4b0ada5970f358358a24f4aa0afd3ed56949a88ed881332d6af1eddbccaf166f08e1bf66ac31cf7c0632a1cec805966d751161e90f84953e16846c442cb010ce79e7520bb039290094aff3445034be6c232eb60a83b521a8d4e150582aecc0506712f5ae4f2589094a138ef3990491a310b2330372d8114dbc2050863e79f332234e6eb7e6d42dd94818ee163df01fe4e9a4d0ae0cb554abd341a6b8ba8e8823d611bd36b6d92b6ef3401c80d8ee02557413fa5f193933c3e58d9305260f0413eeb2cc2a62030b2c94dffa4599144a8250372a4090619d17cbd48e9e77ab82d0785212a16d969d94e2412842ffc52dc7a1734a4d0f29605043b07a3b08f845a5fd47426448b92d6b24c6be5245e31e1a994e8f4866894f6c8c733362ebae8a14266384d6daf749b826b7830c90a746342887b73aaa7db522d90dd976a94b0b752aff1870bd9c5f339d6d9ebdb76b1c6c24fd8c38faed14e71cb87b628957662e250dd5dff7bbe4afa511f4e4486854690ef113114ec751499089f8288eaf08622fa55d8bbb60c8abc18d552ade97aed9991be5404730d0373af9187eaffa63aa624f98f0ec755e4ea9c87713114a9e080636b209b48a30bc003e307faa9971f67f3acf586fc2aa11b0969572d737a92810e3a58acad4b16fd456c9a8461eee79efb450934a0eb7bf7c61d2809230cdafd9bcb309cc5e4bfb7c2d35b8c4aa0d92b64e55e0d577d74b2e4fac0a915961a003ae3bec104192ba4ed86c2e482ca2a72ef7b2e45755ae12379e48f2b06f1bcff1d61b7e23c100984f0e441fb89964e6f5fe10f8531d886692b1048edac92cf79d3e975fc5f789fa5246bc0c554d44bf3d1bbf1cd0ebd53355b6808c239593392ce03fe9454b29bd7c853102eea569f235a43b2e729d6b43655da0f5de153eeefb560f29e32d283820bc557b32f39b3ce948e324f90b0137bf5c476b10f372ac5603c22a0df8a8fd226e955a97eb6743df598c56fd7dbc2a9c31d3d5621846219221b8d2e3c8204f4030304cae54197e88d263d716c432e28aeea318e747c6a858e79c1becd66520c8ede26047e602f43baae33337e93e9be19b721f83fc07d917c147a1c150896239479d722f5742c9ff62ecb7a15a6ddede0cc84c6e11536b7080dacfebac2855787b2a018713756303c870691dc2915416ad7d63f7e40b4c11553089ab7b970d1c9078611d1342a6746545562efdca3b9e03eea5bcb73eb1ec029e58316e7f252d62e532e9e960633908d943bed1d32e80584e908051a92ca144f44fc90de2869c98b5857669fa36e825e1eddb6fce37549ad75a6d8af9dba34d6e422aee40dca9b6b6119a75f3953e908ac6ede91b3872c5d00f6b188e8e6fe611b4b2efd1db306c8664a3be3cb6577be51aa22454f510f40b08bd55203f38a19cf77a4a9f595449c47335c151a66680ca267a49593f427aa66da377b8c4a02622ff372f8e7ae0d19450d6863a6eac61b77c3a68461ae49d3786795663f6742b911c9d0fbd6ab405c471a00e9634eb98cded687ecd442844958d689578a14fe2b261aa63e5c43ae6a5c90843d47965cf1d46da97b00308a4ab765b78f841c2b6f8da23940009e2e8f4235611d9d769447c3fb727ae55e3348781db047523c593228e61584f7918ae0025ba654cc68013517ccdbcb0198813aa95c0c25368612234be31850bfc58f6608a82ad0bb58da3570c9a4ac77c0934c58c2cf3c8e71926dd8b4161487c5374a7db573d0ab1672dd8fccb20be205d11118a9adb3b284d77214eecacfdb279c7a86579be099ba69592c5a93973922cb34ad0da6725bdd40dcc2ded798352f6399a6a57f58b5fa11f86c1ee0350737d8aeaf8ee4f9b407ed1c50d8664528a6d6bee935638e1fb28a6e84dbd67f41ef48499667a0ca4a21dc5a43404a2d19d279400d8b0cf20771ff57a1ffed224c8f906ae4397b43ba30ad0a0002a0e618c9fdacec4b2ec6d1327cd988b90edd1f6fd843e5040c103f60f5347bfc0d8aa1006530fd2a9aed37c0e43ca2cb30935df6242b37f98b94c8b89bd9923e019c0f3c48dea7359b702b28e8e2cfc16ceda7b9aef90e4b6ae87530ba2466cf0297c6db0b7797dd5e0325e8b1330261cb26070dda191c01485d60caeda78f62022b9ae81feb3c8f142167c73ff0c3d60e961c951ac554f7de628a8cdd904a58ab1a88b5789f2bf6979a510c7fa00b5b4ad8c6e2eb66b019c7890920a48837e6d1f4c04d20615f59b8db4a0f3e9c5ee1ef0e15985bccbc97704f4f949e6421f59e7856346aed819e7c4ab92f1af98f8be4545380ecde1e06f2c7b3f7c5e7d77c8248120a78ba3db9423e9cb9e33527ace7758e29a418b47ca0b3e98a150ef2f99658167f77b1252e2b4959f6dd45376baea5ba8ff574e1af29c8a7faa0bbf1c4932bef9abcc58e3e1869849edadbce074b79eaa89bb1210bbdd5c037de4ad521b7702b2dcf217dc4e1c5289691f090b76e9bcb06d20303f725a6c070a42c87d891a44d621570881cd16503e5d79c0811211370857d16f044668d68eaabc32c5d5a7ff6a8ff1ccce690c549ee9bf0ca30a900ed538e5e90a742f340dab4beec5cc13506de1aefcf68bc3edcee9276b0267901dc70600d75eb400c8015da5524650fb0c7d6b1ab6f7a85b5ea235a1d73f9344377b2722efbb4ece6e0c7bf3fab650a11d9fa00cf38bbd8e8740e06894b7333cea4d9739fda0be73a363581121a24262e203f9f66931e3194e50223d6a91ffc40da23f979ec05615dedd9efe29de06b8cdf3e8d1af1681c5ab0be573bb352662bda4a4d87a1aaf771071fcfe2a2a3830c7746b3b668861d6f51a798493de9a496c3ccf98ee9932d520a64598803cffd76cf349550c49f30d1fed256b345b99af2c58b1ba7a740d997e52d11376b59ab6413f8e7694c2fd0da6dbac76a34fe2ad29d33df850a7a3ff0bbc78480e6a89cf7c2539932599b40be87966a575a6379b0fbe19fe458fbeb20ded714031c3f6369e76e6b19142799c1854c9d6f9441b5ba13dad219529bf9ce40321a37eff93d59599ed90bbbb3b51d17c93e577be0d32ae07f717f8e7fc3eb8b19a7a282431fc0ebbb24538265a4b245f1a38a73dc27c1d3a6f00ee6aa442f89edd91f0e5bc11b413497bf912721f6bfea235b9ba145f8808ec05ec0712ae5f16e1582087deb095b342a174dbacb210ba3f02ed891239ac07a92602e1c500a8b88925ac24ab5b3dafc01287e325d60607452c3ee0f4a8dee57cc23d23ad317e5884dbec2898696b721f266784bdc6678a0dceb8278cc9180c8d6b9bef5a85f5ca749a5b9e1ddbac9c89cf19e249160216a35e4a83167a88668a3f8b0f839748dc1ed50935138d8ef06055027ea1ece4b4f857d6f25d9c782453fae46aac393af24029678e189d8275fc9ef31dda10386551bb184b4aa7c42a410436ab4dd9aaebd3a98c7fd49c1e2eb4342b559b55fa60eba06505bd71e91c3b88d1362632207a5efdb05c1ededd6dd33548c3e2ffdb7fc5d90d4d2757210f191f59fec4d526a18c640741ef1fab92f95514bb65443094759b21117345075d6cc65e0e15d8eb3fca8720fef8ab2fd35153f857ce42ec24056d3e4db5ecc917651abbba019e92ed3f8d2eb172e3a2d8e7834c64c6c2d1727eb03c3360abc0b93c05efd5d9e2277644320a913e04d52d7eb9a0b41018c1b12f64af58603efa335cd00ff3a27be5769daecd46c337d032497db9c7dab7cc4f9e944e7e7c1535e1231c146771bfc29ee4e119c63999bfc3e58846b582c1a0c715b888060dadeb96e5a6163733981d0c9f03ac37e314223d7de61e65256431eed516e282a78b2c5622a412632ba7ff4cb9bf4ee345fe6d1451d7ef4aebe6e272b5fe4ba4e0fc36eeb1691bcd50ddae61da793f7b512513a2288bd836cd7f136e789536ea69f1f074a8db0328079a139d08b97d012a7d46cb753478362ee7cf3bae83c7e65485f295e8ca831399b932d52f09a657597d657f2d925499d3d91de90332c1f605f2d8c10e59b9015be3f825c72b079b4bfa812f0e3e58b443b17544856ff5df3d320b8e081ca5333ef60d9e4f0c92f8ea77f505414193714e225082d6a9aa5c987fe6ff6e09930526ea50bf1a057df6d093c40e974cc4c94771d86c766ae7731c7f397552fb75a1a0e574f45128a8112c81f84a02cd79c5fc596d2bd64ad911636626d216a6379c3730de7951a3192ae2f9ab1f371ce59ba5e58533b44ed8bcb314dc24de1726f6f57fa3a0c55771f033b67376b65359cf9ca0d9475bbfb5ed090ac3e2508a87ab9de23b5aab68480ee7934363b1cb831fdc1b95ef235d7286a9101bf9431fa21b2ed9a231209af1ca785ec1cb53db41ba7d3afc4c140d33ec97643f5f3d88816d20928eb846947e3138b4c34e1ea90d6dadc350eecd0fb4bbd4a1a4d3648edf760b05ed9fd488bf2e08dd4462db5e844771e446c9bc28d93450bfed22c1ccc57bd626bd465df1d299fe9e2e6a4e871508084eb1bf5f01569a3973e56ed47e495cdb63b5062c0635e1a11bbed8c2be3e5a220ae8db09d402faa1c9b3062a00fe0c052ffb113104dfd598f2f314a26c3d13f0f276d1a178c1a93d8459043805410337e736a590a547784749d7bad5f5d9bfd72b034d5e01a984aa4e0c74b486f3eeba026941d9a1648f1b3d9d33c132d4d229bf667a4be398fb77e2e0c81f69c9fc692c8a28bc4f6a6d33c483d3fb228a26bbc753050e48e7a81de9513a24ea010f150f2afff072dc0aca640722e0099d66c9dd45ca6179a22c71d8c697dbacd9e9e44917c1709967cb10a5b788acfa7d1c90c0f92fca15fd7c93f43c867bac4fda7affe25eb746b165a0af7dcc9828041abbb565513009604ae2e56f6cddabb23762660bc8ee594733d67c58c79ce8782a7e15daf23c096096741d2465e1af130b04a89328e1f9ab7dbf0a5979cb6187eec2196277506dd2d064c808bc70401674f49fdc9b336f8d6f78e0c958ec877e43389ddd9a10f543c9ce8dee1d5a4508a596b252c3f4622efd2c895db5f632db208eb48c1bcaa31ca25c994881664773eb5c9cd5cf23010b741fd8fff4746f4442207a58189df014be5646341ee7681c825f7ddf413cc89442f33ac0efb95de674042d4c0f7aa6a2ec3800913d4281e33fbfef1218fc6f0305baf48bf7cd0def3b99b7073211a7cab6324c593db8ad8a1e3be52d6ff44ab4c3b3b227a5b1e39682c178d7166c5e8f75e782ab6439ece74dfa720d0e6450ed036faa7f76d959874579805913df9329975f711d870fe541fdbc36a873f4ecf72322323202fd01d743881ad1e0436ba034a14c95a08d027277e8e8d94b9823688fd4f2e460f7c675d179e169c0b78d2ef502624b50ee78c64bf75e6f0f2d98e5d9b7f0793930be63373b38b56408507b3b31a7874160bad5a441970146b17d90ece9704a6adcd67eeffbb65def9a83dcf1b4606556f1c8190d4ea8bfd1a1ee9deff9631fdf6c144b94589c27399829868574292a098f157d654ff3d3ef9871f9e5cf23b6fa6a1cf4e8fd2a6a7b2cf8e5209ec3ae0cde355225154457a782cd8ddd8f3bde14d4b655bbfdf87875bfb9920ab312fb9c4905a7a6e94d67d6144cd6b9e2b18304cd3784db94c6a224d1762d8df9f935f7f3185fd6c6e2581a342421c3911efbd1527e5b40bb25147cc0f5098efcc8a7437e357fc685f3dd4ede5b9edb92505828f5dd6c0561a3992fbb3fd5f9271f2eaedb2ae39b3c55f96767f9f330adcba59654e2198e8caf24f5914a656ff56ce983cda5541e1a3ae3ac4321909bd359a556f03a7a79fabaa2968d811b9adb22a826ff72be14214f09feafba9cc821be16dc7e81b5f19d1c16fd4d3dcd83fa341aa71f9ef7863f9bb6ba45cfd895cc8984ef4e71d63a41c7a4eccf4bdeaa786c0e74458ae8658b0f3a85fc63ef0aff5e3fedaed2b764d144c69abf17f0f5adf232b03f446c757c08608e397909882b6cca3e0f27264b0e585179408565813144bd2c33e1cc224ab3469fedc971cb46bc6e4ae1309cd0465c97ab30698a0b2e796798aab6dba6aae3bbf750c983a57c76492d4121b61c76688a82880eaf6d94e57a88094aa0ea7e1c043113874f6390bb8db0f48a7bcb3e338ffc152cd015200e96ab60a48606fd40a6d9c435a02e74cfe504b720da4899d28b9a059062fc650cadfb61fd653099de1eb569bd284fb92b591027e64eaca0b0ea933af3e86b3b9c0d2965b3ea24f05284eca6a56ad7d5845219a5dd6515fbfb642f4e86a8ce5a0f6eea02b002b80b8d887aa4f1425756f5327d7656b92497556dcd180ffeeaa2cdb35dbd070b6e1b20a6c1bd8f2a75f508088029820b04a9efe77bdbb1d4359e9f2ba8e08806860c6d53b772dead0f3cd671185d66497d88bfc5425ee29f05fcf8db76ca61bc95ee5097354ef9ef8d57203c3df3e61d5c16cd79208bc59b3e129fb351e160385cbd46df6e5cc9362ac55f4e7af9387c835f522e053b41b06eadd32303f54708caf05a4cdf9f7325b8f230ff20c84bbf561cf1d415ab263670d9d36f20737d06439ba47c35174476b098d66be264d5415e2b1830280450cb207bb34484456dbe24200160c4d0b4a0ec5023d7234690dd6ce63527f12ff7c544a330012001583208be4c609d99e3e2ee09592d9bf88909441f03bf841bdc68fe87186bcce80a2a382d85571e9745fc0c66ea3758cd54a2567ef05a203c6f20c3699e3f6251940f281a083007ecdf867e2952eb9bd4d3d94f6bcb3a2f52df1ed28776548939efe36ae077bba37d2a50d4de9ca838780de12271e25a81697be84262330a6fcc0334bc7a274990a43555f4137b72a1da81ef2d0d6b58b25e3a38d28d19bf6a8af962a909d477cd8dcff20587ac5c995ebdc76649eedc559951c058f22af82cb24458f15bddf96cafa035a82f892c28d2bceab47ffc625f52096cca1255e7f7226bbc44b1d63cfee5d51b6b02fad0aa1466954d678b9bad10f4452fc3fc8013a1d3ae0cb2ed6817fc7fe50dc44edb97908baa8ee567d70e0b5abea4f9920f28b5cc0bdc1757795c282873eb28a92e77bbc2a47ba8377b174e0c6787c8e4dda2eeae259e4e4d8fd0a96166cb57af6182bccb7578b64fee57831cabcabc0c771d8c1c0f1a600cd3de0f087f19c9bf28aac71b7e45bb2425003ceceb270590e8a27fd06b38cd6936f41e24e021a706dbd5876049dd3aecd5c177ffd9f3e0651fa4f304705839914fbb32b343e00daefd2a5c14bcf684ef654616732db3a6a55527cd0b7d1281f5db1befdbf597d6342c69bb6b3d86f5cc3e5e7a7aad8311e4337a8b5329e2f07d3f5bd72973db3344a1dfdfd00714decca6b371d240c22ad81787a3a03cae239f85ab030a3066a603902bca69147f5b2868548f71cf3a59bae212ad311c97db5c8a6f8a12bb8073bce4d8f1186724cc4e01e661c6afecf88c4fc881a297e737cb45047b9a18f57aa1ab92bc7926c26cbb9fc0788b62feb00ad387b370376475a485d7d2187b2953bb11c8b02284b0a447b7217de90cf3e81f9285fffce85e51bb3737fb0cb7b9345cb61f855397cf0d3fc3f123df6f610a2fe41a2915fab1467bd54569f4c3c1cc1a69538d15686294a4f5a6b0d230be819666d7f9b5159be915fcb90fe3f54e43bbc6d93e9abb85049159aea70da6e90e1ccd95cee8de4fe7fb8d589cb99a1ad62fc307da2f7ec981a6a89057b2d22d323d49d5dd4381dbf9744f76bde24048212c61710f6647eecf8e0472bf12ef97bdc4aba045d2caf39e7ba592b44cf109fd4b9cecc71cd829b0e8b7fd752789257fe66c5236aabd3270654227c4ec3a2f1057fea3ce740d1cbb245fc6f04f0dbaf72d76131cde743e65feea85648e3ab10ef652951d5ca0a78b1235854f74dc4ee99ba4fc75f29688128082cc745b780083c541b0574cf623916e713335aa9f34317ce9a4abaa3de61bceb18e569f64784c2b39caa051b24f4c555872c3b3a17c815f7904c366356fad3ef92593b31a9cdcb5c45a7157ad20cebecc33bed1c504b9ae7aa7256a3815d4b5119f555fe857b07fd34a6bac1173e1bde85a2d7db362845c69c37f5aefcddea2103fad6f61db52230a1af75629d0d4651042b3a91ac67a247d15999423bdd11df12cd6bf70c89ba43b2e64465791fad716908a0f88c0f0f59e62ba83b1621bedaed1ff880997630b3f91ae49d61f9ded5fbd6501dd1d1cd5be9f0bfaa9787869403fddf8211f0b033285920a7d27e037fa8f2d13146d3277f5e07104a15f892536de28466451a5d579d8df6e9a8adb5fa86e8a714e1ad1aa23883a37983bcb137dcdef8a6857018a63138e51feb9a534d8482664dba1ac84f367f269be004c041089194d0929d9e7782707fed90dacbf5f7dddf4be16315a2a1d77cb0afde3c0eea5d8457ee80e81f1b7d2ddab89f83a8a6acbc65c1f08cfb6374cda2517fa9c0aba009524fcab92d9d10864a5c48a59b4049ec1dcc32265495fb13ffb568639946a7f68d7aeeaa0d561aa37dccba3cca18fa6bc13b5839536cc7863e140e0ea78e87a67cd672a7997ba8e5fb915053a27b2f1dd80f405f801db293dfb95a69a0df3a6ff378743ca1bd58c8abaef3657e04944dddbf0ea0f3de80ab335386aaff41453ff318723569c2744e76482922957e335f3e7b533a623f2a2661d483dba4c55674be5f552b2a0332547458fcfdfc537b987c2181241a79f3aa35db2bd3fc9e20750306729c6f78300ec0ddd3ac7d877cbf0eea5153003cb1a13cb45152fe8ef7b23a2571bf681f3380869b5d3d0ccc50750515b769fd5dfeef86f09bfea65a226b3930c1e9b7c0fc5557b2cdf5ca982ce38306840af64f957397156a34c43cc51104c43df302454447cee4bf4ea01042855e19b827e6bfbff0034d4e03b0b494cf59bc83b88e725acf736520dd24e8ee1fb0783bf99e40f3d4ee31feead12b77e7248b10afd7c3777384e0fa0aa5b0ed86ad58e6be5c0cf1384029b21b3034909df328ff3f57f74de1255ace713903b2f7f75e19d07125f37ae30c01161cbbe06b4f2fca8b4899825a04d1ef0c58253ee274cfda5f1a49f453cccb105fa0a60a659394063d1727c681044bb83586c258a8e98996ec984aa39b155708b8f8c51d1330b0fc1a69b4f8e758c15f7b554336fbb7f584f4d550bb9caf3419978c6c6aecc52fa0d8fc9f566d892362188ae789f8ddfdc5bff4a3c2ebf13cf386ea2a544e246fb8871880d8e4bea53ab15d1ca40d9275da8c41f2ffb4c199be03b403574ec127db08cea92f65b74b4924ff76e5ad74171cfa694fa63400852e448fc708630009f4ffeddcbe8d7de8ed22be51702973a56eaef82c55be98b6955439405f877b45ac45dcdb727335e666b0ac9cfd378ad142684a346b03e14bcc74783610043dfb5f393533bb647b421d67fc28c5070e1b5c0455dfa287a56d135d64769c37a78f3e5ff0436c13600ad83e768e0e1396057563af72f80bf5c95a3548b12c3e0890a35dde9c3c2deaed42c8b5da1080ce73fcfc463ccddef9ab2dbfc353cc30308b5cd454fe42642247da8ffffb7eee3ec4ef4669d2b449628b7387738d3c1170148164fee895b759ddcfe4edd279ed8307c1f1b3c658e5a0373e03bcd0e0d4948630e75a377b5a43c9a3420077318fd352a1f27f0b2b4ac141328de5497f7aa4927c6b7f40dcbed1d45ad3dcf7748b0ba36060e76f1c8d2c1426505db07c3dd6e9500f185a8c8c117c1577ded51ef366192300cd61c53705c75e42aa029d91d78125cfaf45678e30a1771a880c7762a6e8c2fa381aea0eb6fab3a39c9f0085f0a28c557b6296a2e2599ce426c4efa57897d0b057bfb1c9be4c56c0e0d0b8307ee6d6de135a8fe87ee35dc2c64f10c1ec0d2a3f48c8dea7dd1983c0a40a81b4cda5559cd1302dba584336550f932fbf6bea98bac3c4481ca26ff84ba4761efa0f059c6a229c1d8e9f5eaa004845f7c076224fdd209427e4375e88036efbbb588b1a47651681a308f8c45fe760113e776fe886f45c5eae6624ef8fc7737c0a7067971507da8505af41a4ec10da9c2db21741616043ac80515a3fb8867623f9d0564820114121febb92ed071811aeff2114f6874bcf460ad34828ddb72e6b3d920c9212764483db642dc630077ee76b12cfb3420b7c753e806b56623be9373ac8a988bdefd7dc993020227084776837d2498147b62c3ca661d8eb6a148ae4e602fbd35fc65d701acf888915d9f7ad4c77974ac32de40d2889b1a63ac1702a4db85e41810d05a37042b335a398f561c19af0f36d5f5067f2122f5e51db89a12512e30b2c86543299be90fdb3af755c8d152b4d6e42b81f47e8737f125b2b2ce7f11ecb70132f03786ea95620d0a027aa08f9a00d6d02b781990c8aaeed29ab16f08a2a62ab89893f92d8fcaacb06fd97033fde434f370f4771f66156772d2081bec728d6f42181a67e6dc712e86005105bedc60e01c73d878ac3db3248bf2276c0c7a2e22a322ce07bb532fbbb7d27f09ca7ed44851b60f76717737a58e4f53804b1c2a2c6fe22070addb05449f638b8cd6183834f13d7381568bd063c62b02a448d7fe1f28ea5e539a39f256e36a2cadb706d14c7d2d7dfab4ec080899e7c6e5d80986f1b55e7d27c005f33a74efd155fe8c4d01d7d5fccc7218f2b0ba20c281a48bea20c58bf76b8f5c47c4fe679915c46a5065a0dcb096e3d671d3309f36e43334af3ee258797234f97a0a335fa9551bc227f87875811782a0d705802dc04e11d19ed3543eb2afd96776bf7eace89546a9cd1855edae3191572a8631c9499c2290f1ec4a237af62ed18baefe9645d2c250649b0abae33c0b2ccb2716f6d7a81df09b6b75b770efa08968fdcbe904dbdaff47b369e97ec5d8c27d7b5dc396acb2157bc45154ac38a97ed75897ca048cd67e433a338e5822f460d9cedd0f20ff064521f2eee2097eab3674c002cfb7c9abb040df254f4a983cd2ae296d72fb8f8bf57c5821d1a31a06e6dbd130feda830fa3cc0f2532cb053c2093bc354af40a0c60b541b8d7e2ee2c44f91c46b389112746c1e29689fb119ecee235239ba8073d256595e7e165e01c2ccc8a613ef090a2d16cad3e3cc3ccef4725f34898b74958628fb914005e88ac41e0a2b6b65ecee160ee815be63482cef121624786445a8015247a4e44aed7aac9c1c14de7238bfe74bc3707fc2dc2f1b617e417649fc168b7af0afb3baba6f22f30cb315eb889a8c47dece921373454f59c72c38dc53106233eb8888f4656977a13de86c640453200f1acee04a9de0b8bffe2a345174de3ab97548848b9c02a577250bf2498c417794b61d00364b0c53fb1497c3a6c26bd60f1f363b3b832988b663130a8e7ebcfe0a021718f6bf0f63944638b8e4d7e01d77bdc525c0add3bc457e8d917223a27abe96191159f2d941ef4485ce3e1bc9b73936790c0a7ba3a027ff8f028bdb3e2ee872ed8aca7fb4d4e1f5935f37abda8692cede628cafe0822cdad3522e22e6f78e0541e2f91fca8e7a22be3d56b39071861ecdfeb46fcca9878fe2a89725c97b4c2686b5d9e97ba6fe25717295102c1a271219e569a7cb881d3f56b90f4bad3e38e1bcfb510d8511cf00cd34dfc0b21bd62d03dcb44bc632221f66e94cb8adb8212b24439da2ca366e1c2b1f309f23b48864bef0b92983969b22519d80ba87cba614e92559bef335232acb547bac0cc88103d90b5c4cd4cc36b02f1ba9aab2054b84ffa2b6b00b97b903163446ecb7e146dec6463acafba25e06e0c5cce88b811046c02dc2c31dd077281d0ecbf1bb4d3ca8305a9e57a3f9498168edfbc2df2ba387b0ea3349fef3cb3b9e5dd295412deb98c124b58b48f96283ce59a225975f69f87620dd9dbc448130966eba4f533dd010aa1bedb95dbb6fb89486bc9b7c584c21fe720019a39bb4b7ce0ee9008cadbe7d2a7de83dafe119b555f120b395092740be7745b9db1ae0c6715dc194a4070efcab8502472dc7038ff78942ce1d86814968e56d7d70ab8af6e5effadbeb8c0178b29431aac91268dc946fbd9bc97a6547aec29a09d3e750fc1b17457b9c7352f54a01d2d595cd75735a164db129b64a67b55aa410bc31e6eb4069f0ed1a3cd9ba3312ab17a207ccab1c5bb9baa86d7d97dce82d71f35418d7be5d4825301a6f11408fd1cd8310d5631fa6d9b117ced9ba2e98d813fbd13dfa6fff654fa1aa8f1173395e06788578c390477e93d6d887791e91c283aa20925a419eaca9a4e46b78eaa30efc6a5cdd88e7d257edd3c3c7d020347a56c9622ad4c276ab5ea8057185185dd939ff5b9c6b8bc2b8a4d461afcfe849e8e4315eb2703dbd71bd745f4e03db1836e10ef3e6adf9a040be12876ddd6a21ee04ae8b1c42bc36282377ee5ffdb0fad983a085f7dbd22a92ee969c6220bd46f303f1523efd33550ba11144f0c9df1c8b355883b5f9ae29c9cd88208a01b836cd7be43eec7ac52510cae6a9e7762757e214e2aed648d8d4ac13639eb49cda0a8824b35b3076e12d9e1b97c62163cc8084a2ae830c072ed253503c2c2ce5a0d026e6dfb3ad4354636b3d5102c290b13d5fe5548b525d6d536bfe050753e0c3ec7fe6eed50ce6f6f761220e110b734d5b31b50d08b1b4cede0e53b182d03edb312126fe922fe95e5b30dfcbc77cbfe19812ed075e5de6bb3d1a1b8e85ffb5d4e7ec2e5a046a94e2be736062fdeaf0f6b770f13b48f4548c3f26a58ca0d394acd6f28c1aa0461c5f5d29f6f9cc768c6fff44524482febf3240fe45511a1199943dc4dfb344649af4eb6105fd148b7d70f52452d0bcddd265c216e6281c7f3196dd92fe1fa27c8bb8aa42a11d47b7c79b92753705cbc78da46cbfbbbdc380abaa19b2a3fd25b50d21f8f28133181aab0dd69783dcc1caa8d4d68f7817234fe4ada80ff4553ec04ec62819cda5bf6c98893fb4426c8b3feda65990e49899c1498aa508885486ebeebd20a6d923f4051ef237082f805ab4be3a896d47fa2b8d5c1808657148efd632fe6302f2d6c64f84c0425cdc526ff4469bf92a9288dcaf6c0ed17a93eb266aff9fe42b434a429e38497a9a0f51a20d50f2e4898ba6029b261fdfba9c445a43cb8ecbd0100938985e0eb7d81ec710f86d6a512d80a489bb3992bd22c0e911a89ed244810273cfe312dced7f12076dc6a1a2a6f2f8741d9bb60f5ef9af5a887fcd4c1f1c29154f2146d17a423e1f085a98480849baa0c8377db35b446b811018adec5b079338af3e0c142c00f92dea658eb57554d1c68cbde2aa151f494946c87d68a6faa2b973a6de974837fa035f19b9566554acbb45e1ae6960172b5e8610570f4d54a9900a992cdc2602de48dbe4b51d40fd89c88860597db854a4c6268f45d7f45fa7950f8df5167b0a32b767618dbc0f59a02dc535acd49681c30cb65a2783d913febde0505c27c8d6289844d0a14b48fd00454a544d3eb093add65ac64ceabfdcfd8245630c6f94e934ec4ffa2957921dec9d4da2ce83d775f312ffd3a2874ef6d1bbf4954ad4972661b92192df378c9452ddd204dfff7de5c59f29af3e4d03572753ff7c4e869553f766f480761df7196920dba75f21400fb3e64f535713f1b546d8afd35fc8f225e644e8aeb0cf335fe26a5a284ae2664fdddca14f009338aa82aed71e5033d6abc37ddad03505348cef977a6bfbcad2547276b4a07f94ad915f16b44c795dbbca7aef8ce664bf1b7462be10d7b2bdbad9222fbfa2a1a059e6173dcc364b7e52cdf8e5e9f139473e1ffa52922011760c8e3e2b3bcfc579a6e8b8341bfe1fb4185c3f4e06c552fc04af89a279d4e1b9d0f7bb13662645976492825b4a6ccabadd5afedccd208b61cab8432e13a7746ae849f225776b623dd6516419b5929d107e741e34854db968015b05aa5b9f818736a6fdc4501e21531d0a7a27ef7943096aa22cb6207cedd7a5de8bbf7b92a34d54d4f83eceea8b1dc30ba5238ce26bb3608c560f2f5bf2557c12f632f35cbeba8136bdcd64fbe3d4c1a4ef3b42463ca30eaaa2e633275fc7a0fe815d00fc157fccf45921bdb08b63b0572ae8d15aa045c44a7fb8d68a9e6d99ada28e51b472760893fb7fd47a3bcadf39d4755c4d1568377a164859d575e7491df412ccd1413377a14b621030b618f533960cd6cc825c3d7bf151eb331d2c74943b8cf83ce639a97bf77c0d887eeb5e7dde24ab0a76c99171f6cfa6358806c71cfad6585d7a1193c91de8a0111b96836975fd7481b1dcd387704a228917695537de45603050f81e5e5934fb4872ab2776fc15cd3db158a7f1f0a4178fa58e28dd334cdce580ff0274fbd4f1e649538a46dcb9ef16df90c7cad82f3567105791ab3000f3eb038caa101c56cbb8a5f6c936a9fbe1ce1c12350e0b156e6eb30f4b732f47dbbbc8918db168c06ac28972c5199709f8267991d4ce8b824e6851698fc65b1435aed4b9ef107e2867ffb2bd51f7b737087ad37d981d15fa0c85c97ef09deac0120acaa7353f81459feff88b4fc67b41ed61329206d59e572ffec40476736de478b363578e9ab8564597c5389a74c742c9bf557645f7a2fad8d8490e2b132c0865c3b5bc80b8741f0641e6843884ee365acffb6302ef8ed50ffb4a5f2c917ccfa9dd7329563237bbc9aa90ac51fbe3a816dd50171d814efcbd7eac5a496419a381c7466faf6a448e6f0f67590185babbcd2b9a06218d87a8fd62aa3c8e41c33d5f11619c2bf4f15d13faf61b9be9cb55c3ecbd42d9a28349a19fed403e55111804979917432b35f2fae57e4385d6b1f7b68de7d39dc66ed531dd890220f5668c276dc179d4c584e4391d1f3b89db022aecc6f9c50054d4e7afa0c0e26a6335d733d4115f0baf08105fc2de341a3adf9c3209ef6cbae9a02c21a529c2a345aa43221d7dd667b00873fa5232b115ebf58945abeba71a331e034858122deac08e6cbc6e213ea32ca4dd80199564fe65b27a072c85a05fda72f15fa40a63c0fc55f4ea369576dcbeb980aa31db9825f97fe464a14f2f5fe4463db0d7595f4f89329f08d9823e0b05875623ef2035595b8202b225cc02f16e455299433abb8a0724a8e13d2c415b8530e64562a972564cfdf0ffa74f2d633a70c46b00e22d3497a6bea2428fe7b9b554f7cdcaf7457d9e02f007b268e73e7116e1d9b3f8d2b9339925564f68278cde2618ffc309f087bcf6acccf2fa1816a11f9ea56b6bad96888b25e6cf055cf4292f6e2c485b264b067cacdc1c6dba8be2381cb0190effc1a313efbee95a439835af3920543d39ef5f64109c49c015735e6d2e61abf104dd28f8d9d088957595f205695b657286f5d3f0854f232d6a3807c38d1703dfce7a728aad6fb27423d5252b6c8844d6c57cd6243501fa705422b45ab186ecc10e14e952472dda1a75e2c7947e11f1c4dc5ffdfec7f55fe1b78f361394cb1ba7bfda822ffcc32206a89a06e4752da41c0e5e97204f93dad421c9c49c517477171056bf4797dd62a2f1e00aadf4b4831f9f9ae2d70be702a07a59729dcf1f8041156eb92feb437aa5f14c0169599ad62781f25cf8e66cb25926c313a9923b3ca7ef4c754a30f5bd0d1d7480553d343149b4ea1ba72e3a1c1128c929918ed7104e44472a85086f30491b081e861fb81dc8568052aedec2dfda0726e7e48682a6d40324204489a2385c4e18ada503a1b4aea9a3d49bb439074c6d9abc2c652035dcd168ecbfef73ad16fa45b914814c85e9469b524aa8faf31d5b12b2983dc1b093a543b795c5b627effb9e085bb3509bade66ee6bd30bf46cbab3867a309a3fcfebf2172f57eb9ea9e5a9606554b4b847874ee165ead6eada79da90a267653069e0108ba8ee6f6f924fd8483c682d8880272faad4f2e030c4b3f56938d3d033984ca5b4f84dee4fbb1b95a47df692a86c27a2759aa6995cfbe71f7a171f36a82a4571985e42f006607855bbe9310379a17fd93ff6e00fc6b4b2e20ac02a9d3b29e56c49ff851937de33af35b5d2ed7123669d6af3ac4ee97ddbfc06aac277de86a183be8dc972837ea1ba601729c46ae57251e808977a3c7232e3c614b5e5ed18ac97c642e797d216be0303adcea995740778b7b4bd19cba6eada4c3f75e751f46acf10ab577015421393da37f00e0426f36bffc1e3bd53ca4545883028feecf799d06f5af45fb0f6a17f9e085db4b9ff6f192133921ac9b4e483d525932705ea3927379966cfa2cd894c2662212068f1c517b15f40bfcc286c92bc890064c078a5ed6ab472cdfa82a632d9ce9b0ce1f1832e4b916383532b7fcd2eed32468dd302696cf0ffebb6b7cb165b0fc88ff66ad6b4d381520a27dcf6dd2809a497b209454505a44cfd8064efad95cfada9c8cc8b23c0bf9db1275a3f6f5ea851c5e2b2ab0b310c7465a8d21f36ec6aa4d8865d25b2aa2ff6abb26da536773bba304e0cb2a8419c839e3aef18faecdcf75114f77cc26bb823a5925caaf7c5ad8c3cb1acc1fc7dda928af8a2e45c8db2f1ac27e9eaf53df20980e93c7dfa891b645ffdfdd5364b3e2972f6983749cabdebb0f5f718b5946afa5b95afda4a7c5762a8226b0874c2d399aab371255c3d7fe7362f3ce661c079f5cffa5f67ce92b64d81959e44bd223984cb83b778094c88298ae838b6f61c370036ac7a732d4fcf540e013c7579682563ba9fac2a14e568da746d27d8764114b2134f945d20d4519d16b92bc8e53187836dade6f2e83887adebfc78c30a1d24ef1065d3b57c10655f224f785c8cba65a4817057349ff1681bd06a8810108e2e575adf88b0330c4c717c3108914d479f5730f7f223d1d4d6dbb9b623b60854e230e576a37298582e221bb6f82c9dfdf59562eebdb26e746f0870ec02c06a1ed84531db1de03d332f8c3b855fb3be768ba0414f1bb28e90c0ca6ac2260fba1886842e8bfc4282e9f2850743da9fe2589ca2455e67d878cd3226ce09c89f824fea7933444db958ebee607bd602f8d0a0df00531c7553331ce26da9e3cd5b4edf8216cf950a80883f456e4bff813e05c44a57a19487bc2548fb1ad904fe3dc59e3e214e6ab8352a7cd81a11c95ae6e1b70367fcdf96c6e55afa878acfb2e2b77c93119655278e3c6e915c05e4e0fabcf3cfa92ebbd1eddadbafabbf075741dd4d770cbe9a124dc5b86cf01926f96b8501086576f8654105948c5a3bf9575553c592f0a13ef71a281cea01dc7734dbfcbc809bacce0d0fd3fdb5aa3c147715ea121f95309584aade4d17f589c421ad92dbde4908fa391900115f533096ce9b063cf60232e553b306c4ac1727b4dfc46f0ec8584800ad5fbe636d7ad369facc2e5f286fc1ed1e96bd1dd95ef302bb524812c3c98fd9d5467446542b086cf320fdde8566a0f184c1683265f58430daf2e99f42e3f37993d47658f6521634e1f9316ac6947d163d6a48f01b567dbbc9f7805c968e8b14db65f7232eb274ade1363d761501fa3145885eca0c3aeeda58ae613c8520e7cc8c3cbcf99ec08ae4b6bd3f27b637b1034f4c031811136fd8f9c8ffec9e33c31630dd5def9a50ed5fba61ead85a3e310f3fc1107cd64d14fb184fa8cfdb3ac3718e1a09a21067b8c165ee64ae444e325badf6285f5c4f41f84b385a42488ecd10c741918a965472688a078ce9d43110b3d899aabb44ded1fec491facec0b90a47f8fc646ebcedffc10c08c95adddb01fccc6eee0061ac22bed7adcf978312f534be6eb957f034508cb5734c6ce664a45d9487f0b292cdd3dc361ff58ac3951dcd2a2b1a54c3aa450991223f95b38fd7115448c5ad91bfd9a075dee53049b4b2808016d9d85a2f3d5e464d0e2fc221ac52874d2ebc48d0a845e26c1a35a0a9273e0455aaacdecc2e985a0d5017083c96c594f392acffda8382972b20e6f86aaa73e07f5cb147269c70aea61508b6fe445597b5680c7e720f9a86cfd66f6b64cf8998322ac157afcd263d9dabefbf86fd925e74b39ba4db637470a7af9ac0283c08a1f7841612bebc31f187a2976857e968f6f5158f36bcbf60b33a46a419fb8258e7a377a49d097a3849813bb06bf09bfe333e139104d530292aafb539aa9979f5dfc91d85b0f9d394f52fdb112c75eac83cbff23576d79f7ab092c952fe2761dc8304cb12bc11b0fff16aa1a0e4b7c501a8016e4ec55d34d6b532bc1b8814dbd24e7d269ed03c0b88800f126ce0da467f81041bcb5ef5612943226a07aaa9e972b10b20ed4ca394e314a456801bf656284e6331c545dad289ebe5af3d27096ca3461f3da29c765ef660b8ff4620ca0b6a063f69f9ff25062baf8cc596dbda9ab77819ffe609f3ee4df82aa938191b5c49d79d710870416320075f2299c924e1f5b92ecbae9361b188f698c7182d23bb025ab23f7c7074ad44ba4a26eaabe2689158c9c771375e35fd4a9bff268abffdbe4fdb909ca782db4cfede5d59537b6a5cded979708b29176d0a2ae18eedbf6e4e8f874c1527f7a3df1fc2f211455b405019ffcbf6d9bf2c2b2582dccf387992e6927583a04badb98bc40754cfa0a19828880e77a834db5fb93c264952e1752bf4f6ca5c24eea80b430951b24800cee04e90d88ad32ff9a93a61a9dc2f5e9e3719148570119dd0f7096f57cf99c5d2abcec22ba0bf57987d88d49237c91e3d71ae075945b9a63cf1badef086671d226099c60c3f2280e50ee20032ebf839a0905beec91f0b4fc1beb7567cbabfca7b41348a57379aa862eb5bd5c2c22f4883362bcd7a6f21d6466f158c99d4a491deb82c4ee864917d2417d60164b0550e21b659db496058d546c593aca2b0e32a69ad14a23f223bc8be92bf5825eaf5cce4eed4000f105eb69281bca1ff46088790ca8c916f55922ca6965bdb57155225e01adc5f05fe6f0c9d6ecce3e3aee22824c2d402cbd9c8bc6fbc76d75d93159f4c6659c350863287ecd5ce712b657254069e8af76126cfc95f785f89168ccc66989100a8db89ace52c9aa47f479b94ffa1cc4e36105d646c292de82e3e71562793b312dfb6225b994e625cab17485360bd4b2393324d39f1b5b30833e2e2f19c76422fa258ac92594b7507561575db171fe5ce0c6a92cb28318696ae79951bae54153aa287ce03d5dbd5505b43970ff8ec6f626262170d8c76663ef226e31602599db853b94b9cc1cba23878b9d341ad87c41b5cf08bd4172bd7da891ccd6bfee3296563aee34a3f3b3143bad009819fdd260dcdb27f07eedacdfd6c61c7e66e6b3122e2344620d64b32756d42fd492cc518986ee96b7b0372df427dd3e0fb78063a59cc25286e1f281dcbc8798323d01c56df4afdf26347457b437358dc7c1af92ec97900ea462c5a079bdd0f5d386287085c73060145b1fc60ef0834942fae23fb70a1b2a65502e2dcb1edccdd3069bfd19008265f34318e05297583601200000e9100b41a9f33ff3934f192399352c6bcd21aefda0fa441b7d5e319d7700a9f75386fa39966bb65a53b43bf8b6d4c9497b68ece619ae76b0032034361538025a7074b6da36ed3907833fd47d69f73dfe22b9ee06d586270a53e51b801e19b5ade0a1e510e70edd79c044806e4da14c2b157c0a5df93b66d9dc57955bd3008e5e9ed03ccc62521a8201611fce3242a2263c2089637fd6da15c964ea9a88c2806a46de69dbc269621aa096c9fbaab49011b2b20a4dc4ecdcc09ffb5fdfdaafe9c577e1a47ac4c3a4ca702543154a6e41c364ffae3eb38606f4303126b49c13b59bd05d58ce977d93591fcff66d57924f9aa1208e5a1554ab239d2c46474ca79791c97c15013ac370f9edc7d1fd1ed3475f7cc61c6dade9b545a8c66cc3753ca902488c7c0478576f2a808effce87376527ee2270b06c352d9a232908126632212be4909e1ece3e5be93ed5fa146dccf0c7dee896f77cc67d17b3388fde3a598ea35654d22e89ec551ef84ba74f184f758ae14b2ed22e785d91dcb413038e9e1b1e0e060b2440947a73ef25a2675fba4a1b84b321e57b407afec5916e06777dd805835ee95c12642cd2e5a03f8ae41e7551c2d8b474e139328d05be0bd313ff581f7ef9cc395bbc4737d4aebec213f862e6ca8a99cfb952a90e2edbf9b1366ccccc9b989d960d851bb92265e50c7fbf76e1e3f2fe847abcea19d9da25e77fbc18ea48a92958262fe27f82e107db4065b69ab63d8c0c3e8d3efca34fd8c000996b29df6333ba305c96b1c21d2087ae31be4e7e9c307401f0fabbafe1cc32c09e82e84969d9d668415974b6301a95d2c42e18f528132d827b6f3a92a2a33fe33c8b8d9eaaf25bd78cd490beb0489f20269e6c9da97da2612848fc18af3f463676f3235e766bb3579526225c334a3d6f22129a688861e5812307780d73c56d865b564428a207e4d8899dab5e84329b4dd6f0271a58c92dc20f5b2dc33b05c2c25cd5eb44fdd29677d980e7f737a7ba3a3643c03f3e340c4bbfb73ed8d3456ecb30d74fc976fd45d1ade2e83c64cff356ef763288832d4e280d7f3aeac4c760ba4071c9ee69e2d7e3f1ac96aa09c3c8d47a813ad8b197027f91759d32a227320d2022cd72d993146ebe1d986392b9990927a5162bb87f1cc9d5f9de55a683bc4d5695a037be88ce2e3d136890f992ef073e8b128224de07f094265d539673be02274173232ad53918dccd0ebfed5db6e3d9807ce202e6de7cafbb25ae067e8b4b02647b5c6f3b98eff2e8c846756417830452d98a880c0b987033660e9e236508b79fd2849739a93f17697707406e4dfdca783870a7719e432c5b32ede7c117d23d09058d9a2d2303f3f24dc5641519a1986ce5e5e5f335b3af7e1befce70bb5011ef10929bb678edad7a9d9f5ec8b1f484c91a002faa7b892440a0937d3e9be8fcdf9d692cbd07fb25a48733c0155080628813c9d864fde23f5a21da891f8b2ec8f7d53c2b3caa2710d8e1aac734e4c42134415184b89b491238d088ebccc3653af81c658d06507e0fcc23ba57354b643b52f0d238171b085f938930b32adfac2136c9740be399bebabbaf79c9e2fa48e98927bdb60b50915550341ee769dd0dfa75f454d23f8109236519ed6ef604f9e6385461c9b0e704dc9566485763e07be75296f301501357042e4a9fe16c2f8864b8e24c7662d7e8245e454e3006eac580acc9dacef92591f5d007b7ab50799fbcd4cb099e7b93c97f9e107581f349a93db6dd9755b5adff06600e887d6d51c00d50171ad944059bf0dacb702c3538a4390758db970d03f61a70fd48735386b272387bb20a42cd56247c5ea1e53fa104184dba0da4ef191691ed7d037efcb0f5d4472bd8c0fa8470aaf3d917eacf6c3701f8d3513d2cb86fb1ff2c5a41a6cbee038d65980cf7fbce0efa9151957e99f1133854606badd536725564a8e0d1cc2749097a1688ba170018329fc776cc85aab83e505f6e29de549cc7b3df0150ae69546f89db6505bb11862e876cdaf0706167cd04a629459566a962c54d857be68328774a90eb3a705d46bcbeeb08d689b6f5558ef3666d3c6a3073374bc351e242950e1e144b7aa09e927fa5efafe927fb99ceefd1354fd76056d2ad02f5a34d06b07cea89e714a3bf91b69b4c382ae08e364eb9a25f423bb0e4a2089be3816dce362bb5818252401d63b3b7a88b999742d50272159f11f51f602d5db0a5009aafa55af97e59a730e77fbf529461eb5539e81b734a45bda21156bde86d98ff23da2f23b52e4052eaec517ff390474055ab95a6351ec8c948e754356ba730d1186e8eb744a60a2bf34672ba82995b735954bd3c306aca26ae19570f53bed2db5e3d6f0cfdd7e8c0c21746cda40d907859bcffe77927086daeb54d655762656dc1f90586270607265fb741604bf88508cfe37812c118e5ea93c8276665b0592a24172be7d356338bf1e2509731c489f4602adf759054ffc5feb96bbbca9da8494a5f8361a8a1092a461464f9776ce0458d5f16ea1a5742df7b157fb020b4855766cf8f73b62322456cfa4657a4a6121fd19ed825cd18aae932ae08465337b81c454741d476274988e84349be69ba6bad40930140a06a69c945a4e7064faaeb42e08dc4ad91f924ad6c53291fbb699d28b1315d1c8f1e9a3c49a35d3e17ac341546f6b08b9a6e1009fda8f7ee648f339f30f27a8eea9cfeef0475fd655f54900e82710028d1ee0c18e3dad85894fd71055356d9dd939af54d2ad26c54d343a8f3aa2f27e5953db9907ad619e5eb324122f6caede4bfca147b10528a14ac35b23635f92c9ad48d4c5b1bf447db43ad0b8273b6e00cd5226d374d3a3d92a647403fde9ab818114b74f96d00e641860e6b1e8aab04c4dc009eec63c3f281a075a00c2e41735aa70a1f9bed4b1f6fb8e0d38bf0c9d38e578b43276fa89ce17c83d5c10242c0e537b2b7d0331aa0bdd26f4a0bdd4e50bb204b0cb2befe5ed73ea2f630661963f51ba5d40c78017a825c89eff33165069af767e19ea68f43f3b051df9e26523a70c6c2a054ac130fbce2c20981272a14e7d58905f3a633ab745b07b806e732e72ee8a10b14b22440f5ab04fa84669c7f013187e3974889e0df89eb67b1736aec9b4848e2a1d6413b626365df55229e000ae85ece2d2ce9475ea5db84622031ff7858a43509185d40842b90107462e69602589bd42fe2fd877278b04d9dab06e648887bd44e759b59c2e86c040ccf870155fa350407e6efedec6cba24dab71d266f1216a229cc1ae4bde79309a9a77fe7c990cf8a6d3c618f410ca9e11b0e58165bb7d07dc9a9ac92577330ce686142b8b6c3f18a6f8a87f76a99e901a0e50e8deb892969fe2ab739b82e9a6abb8c4ca03224475cd519b519c155db6ab9c782656f388d7b2fe6b1906b08cbb8d81dcdcb642602de30eed1daa6ebed0d5baeafa2fee8a3380201b0788cf8d9c62d7dbc48b5c778f512c959b625b2e17aac12df09124cd3bfa7e71bd5c3f19c1f8bee7393d34d9a3103b8a4deee8557e50818ffc8945f6aa69b27e3a3943273de3a277af11eb637283a149f8cf966f1b77c77aab5a949590d1256091b27e4ef9600d64b981b764594aeb7f9d8c70121c8e1988bd4a17cb847e57ac435a3b70554ec0a85eebac468f4d97cf35fc9ad72d6ccf9d53076d53ebc1460f0cafbd26915e27ced379fd0ad2f60cc563477d4afab7c90ef2138d1303f9f8cb51d59726dfdc92dfa06deb8b1e831a46010ef4fa1689a16f966d4914199bf90fb233af6470e8d4275c7051c2fa85fde565113ffcb85bc06021196fc26a65f2493573ce6cca3a7eb22e3fba9e8aebf4ee364cb55822f4d1ab2556bf2d42d062702be04bfaf6173271c3dd12a82645f7588f796fd1a2266a3b446e9e4d5543ef414c9f5b237f4bbdd4aee8a700e8ac74d609c621bb0b6cc5c24893d5b7046153a3f13d4b5c999f63b1d90d6c89f7a7258a75132c00e6ffb593a494242b7c7208155513adb381af1964cd69288a5a46eba81f8a2cebf41e60a4e68451b9ab7540458a615761c0bd93bb9cf2590f1972a2f1dbe626734ee0e3551bf1a111951e5858214e85177b52d2f7e3fa53629dbdcc005b48b0c49624d63d7252aad637c94e34702fe3cd919e99e9ce83905dc2efdd515966dc49468e5e618db4b97c835d8b0c99650fdac6d21867f0e8755ce1c14b5219ed360da175d169193cbfc757f95ab524f2763db202b21b310ca572141dc9f65df31ddef9026b29af17229b0133757e1e97291aea63e6dd234a60a07b660e52bc382bf18cae4e5f3f83b4295fb619cbef31aa4ca86e56ac27690b29522c2a9c235dc8ffa1c154dcd8540ea5593d11b7e8835d0de2aa2333c17d3165cc8262156c6021cbcf9fda8c8ed55dfbb7b85b677ecdf07227645b015a3cda6723ca0c846aca4a0802f0991de8c1b0788b4b3d87e9fe51f47d2a32f1d8c8dc5ab0ddaf159bec5c1799465c140ca416b2b715e1b42ec576acc35be2b52c2729a1635546156558f7023f5f8d91558f26c895ae4090d2d6d0f8e375d24b458450e9ea4fec9e7ded078333774a4225576881ac262710ed2ddf8123a7623d70efb45fa773a8b70cf6331aaddee452bd808184ba2577c364a8e1ccf5821cdec452066696bea73a02c486c88235edf6de4f72420aded7328f6c1f2776abfb18dd145d3e66d223f3a7ceeeae71cc6afcbebe91b40ca2a6c787422bc36873340876a9e5a870e0e9baefe818b5afb2cc82364e3b13e0a3370d277c8f87ab669c1a48e88af9031779b5865f5f332c3153e740fff954face5cefb02b60174b87ab7d1f1d06be88ed127bd69874376c8440844244b99e8034c8c4e635a259d5de020b2b2965c4f8300907f7e1f4de8caef47310339e1754a0b48c1e8d5d4a902900ba20d6aa8f3c2bb29e34bc68dfe76620ff148d6f8d0ef085d0a761694fa229e404d9df88ee72b9586d57b886aae886a47f855c2ebd9e656c36665c750a6f9a7a0eb82c40d8cca62abb30411fd54a8958ca8ebc05c87c728e29d3bc08399b6d31b00c044c6728713e44d9309dd56150f57259f7cae25be4dcc00e887af1e1c460c48bb13bfca90487c5a7d6c4c6729230e8798a0df85c496b1342fe087207ef0a289c1cee0a72642175eb704c178bafa683112ba8880cf359ce2bda17e8a6419c486a0baf7021c7d7b7f81eae5de653102c00203cafb070f17bce66b3df48ef023a26372f05781a485961342f0444cc37f2c21a888b3e6a631ea12fd793c98df6f40b45f525336838b1d66caa4d3078717ff10d9a96944a1c98093c00cb3179621063947f081b8fd1648cbdd1c66db7f596f5c932843132545e69a39c022da812d8d4b80c5099af277e9759888e4d90bd427c88ff6d67a38553a71d964022389710adda75a2c577a425c1fdbb5e77c2fb2b031644d51a9ce0f4913cd1ba4c98caae44c753d96f4fe06289fcf33cec1e29f39df9d99e789f6f8444fe1ed2fa1a78fed5ef0bdb09f6f104c4e2e2dfec946b838eef03ba01aba31b9b8d8d6d7e2452f9fac3cba3841f8ab02b69543c37aaebec5166caf022380c4da3d1334f2fa0ade60bfd24e59d882750d65b8d53472aa1f9564225b685880f8517518b49643d029e8af6a8c73b9317d4d72e435b75443f631ad7c9b644606f9aee8272165057e310149d34217946d17aded537fa70c73b1a43aa9936bfb71f94312fa6107a2670c2c16da346cb09595789619db41ec404f6c91e57e1da4c4309b4ebd9672e7ea4bda7d637c954f92ec157de65433077e1eea08c00e4f063d7effd612ad33a698bd8f46b5acc25ad9852f1d5263a4245daf0ed1ffd10788b7b5941cca0095376cf418501b666d121f875ffc5e80e6e20cb4eb1363d3e02c4fd1d6f515dc9fca8d2d577eb0b0ba40fab5aca3fc67f9cac488baea3780b5a6df3a192ea0cfd8de21ec55623067cc759467a230a259b80399746a6af03f200fa9b8a15b8b062599eb6414190737c91c72f488c9c1ae16d6a0bbfb78232e3855261a3dd6ee9a9e0eae84defc65a48bd17b189536604a60b8addb9023d93c784eff20f755c09f3f75637b67b8a7240efce76a56a79a9f9b3d248e3f5a7f38e213e43e2a8b6dc8713eaa1d7d60f889ddd07c7b47f52d15422046ed06c12fea2b06fb4c2bd0d290f597397fe352bc6f8337c9d3cf12d6abdd56873aa58d8189498550667d66975d99f4cc08424f6e93c342ef90c893bc8b28e3601243640a47d84d1967b7c6ded62e8cb9821b8523c36e7d1bd5669188a29585d1d3d1794d87c71794e365c03daa99a80696645957c745b385d500e448b9ff57dbbc2357fdc3435dea3ea8dc84eff9f9ef6bf42d230ed6d69e099cc5a18067231379c3d318faeeef762f688e68b45255f69c9b471d03b77fcd12c1619e6dbe435b1d67a274b7acae77dd17e27721713d9e5f1eca4f4816cb45c7d49189774d956069e2384933d7d0d130b21b3baf5e7d76a7a34803ed7034585cc0a254a4ff4309515a88ee450bdeb930cbf7703a27c344252ed9ada9dc86ecb45c238ae70be3f314dc7f6214700c76b848f7de7cdf7b00b24e743afaade2a1a41e142eaedfc949ee38c06404da4e3bb9bcec4c3a62e8cda2dceec08bf3133e2a7e68837844ec3f6ec1b61d3fd76f0fa851d8c34056070dadc58b24b14242df1d1127f79186b89e53558aad6cb4855cd8014d4dd6fcd7dc6d4fefaa8b0fca01ad88a5d497463a19bae35f22e8dd11af13d26bdb54cab53be0b14083289d37aaf9269263e0c0b388a9135228882ec26735a40b3730b3ed0960c5bcf0afcd19f378d4e56566772019a7f3f993d6625dfccccb5e5c40a8d4df90e2c0efcee3a06c6f88d6e461e1f1a79c259a09cc9796b8702a1a2aa17656e3b8ff13a536f00f6205ed3c9fadae9d5edbac241d269b813b9506f21497606f28bd39d0a645729b13fb2df265021a90cd8b3773d9abe5447b6f2cea7dd180c1b2dc65772d380544f0a1aa11c66071da591113821bc426632359e0aa6d4445256eb9c271900f46f69762fe717a273a08ecc535165b4a22002198cf77785f7b63318b1fa912edc848186be1ea3982b22d2ed5399d6ba1293d5192984c2b8be31c3ab6818c1641c783ffa6f2a5927fde0e0809ca6cd0e8fb3ae7ff0afcdf9d909a8ff1fd9107b91b10d65a42214de2a347b71780b84c1d43fc2cbb06ac78078789c7b1dc4267e64f5fda6d517a5ba9e9af1147a8316879a4e251ee2d91665d5039e4c75aa7e7c4a01174b94ae6d5a48ac46a7bafd662ec8831ea0eeda7d682488dfe73a96c72238378319eede7ed398b730d627e79e1ff645365a3e52e5d57eefa70ba6d38790cb2060e7f96f520b7a7b4521b00381c549de78e4f50191edd71177d7f649cf3b43b31d3728418b176fec48a36d5f04e28f83eb0a602e328cd14b00dce4a30975e1bcc7c07a5649266b457eab7b18ddc06077a9e936e52676ee0df6864834934633fcba5c8bde3b7e8558f6477aa1392a4b1b656b96f151731012ad1023f520850c8cf97e1d6476d4551257120819277569581fd9712c256ea235b21c06ecf1e67b4bbf782bf0d5c62f9e0041406b8302f1b1b6241b4045d2c7a62d0cf0d8ad400beaf557fcf13a82ef5537332f1dd256f9dd26ea5aa5bc11bcff1d86b71339c3bb17e0d31189f2e229647befd6853960b6b49ec26ef7774e0615685280013c473bcd470c3489bf218ecb768aee03b44def60e0446140dab7ee86337fd2ad0ddec1c9984d99f947bc268a149222f59b9ab105cde9089b836e3eba279106239a8ef02939b181261226e404e9f907741e665957ea81a2c13fd04d30786c7a0ce28fae6138c3b62a257e4d82986cf77580a40843366072f25a6582e6e2614aba63a415ba5f326f455d43cfaef8b7999e1e616fe43522cd6062bb973eb721548df4f9707159201f09c14b83d562c1b310454d488b1b529166868c395b013bb2f926dbfa918e384b256d09f241e9d8cf5b043319e7abdd13cd95e3203b1c190363c3599d6583de0ab60d1aac94fd2b2569e08b6ccd7ad9c11049027683e0d3eafb0dc883b20a1c2d981c395af8d93eaa33f7ffab3b047b8e6f0f313b5ec3eb176a2eefe5746c85c4875b7ea914edfded5dee5bd4f797419d85001c2589fd981fcefc8fb8b5a1774cbbe5854d8f02dbbcfb2f8be9d6b698f606fb92232464316c92c267b05c13b848eea4e3200c3b432be0194129c7bcbdc0c1e3cc10ac6f1fe3e0bcca11fbd59cd35dbb29f6bdf741458e8e32772fe8448d35d6a73a25fefdaafac58e8acc9576485f9fe804ebb19fcc9a50f0a28506624eee9e259d6ff8b029e6f49f51a5058a23b1bef3919fd37e1198172480c10e743d052dbea67d7195ecaf186081b7f6726714edf799650391fe3bfdfc542edba6a8590d21912d53f8b50764817213bf46c1b3f0fd2d976f1033a6ecd119a217b772d9faf63d9471a6eec77987f89aca52e9ea0bd4194ef31030ef832357a734b183d0d6a701aa7893c2a7df1e865491cd04bbaaf26f4b94c554e16cd158eccbb040fc42253659b97d5f571c84b51c9fd99a5d768458fdbf4b5011da0905e80ee3edc52c2dfd2b346be806be782495295fd3b40f81c7a9685964b245bcba1cdb4e2c96d8202d6e221ee5ee6214a2b46df6a0fac617017bcb72a61cad3594a1d9de92ca4fd62fc0fe5b90e6571fef53c9f9cacd0c2d472f127086ecb48d556049573aa1d36e75439e2f9c4f9862767617b023afbf5b16d5d9ebd098a1741212c09e179c713bdfac1773ececbed221a00bd44b1fd829c602297b2d2afbb6b765bda2aa3d3edb01fdccd820785a88d7dc51579a14982570b256f08340dea2772333e41a69e0c0d44444eb62635ab107ae280956944764bf5d08274084516f0bd94529f172a1ce2bbcdda45db68659fa6e0097ae015325f8ae835ec28d3ab095af9fb02513e3419e3508258eac3de5380902870790bd5b1495b8a4518f8ff65e6e99e492d3d115d2fff86aa6f10a5e914a16fd49fb3249e617ff2aabc9e7f4665d92470043461ea4041b6c7e0ac9826c2a74a37ac6b02dceffcbb8a2b9106eb24583dcd1bed133c46afdc05c3d9bcbf25cdd1773082e9c14b9b0e2318d06101c040fccdc9830c175bfe072454d133bbe3505407a6e46105d86105240e1ed5ae4d27e0ade3e4a37e0f47ef9a2e526963002d10fc0b7bbdbe172c597dd2f12ed0efa0ee3ff573514c450e10390c7608443db1ad7f49a71bb31a49ec262e340c9e86f97a192e27c8b3474040c144c05aefbe08835e7948bd6b2259a3e7c305c8c0004aa06822e7599ef2ec8d051aed10b81328db6347e3c209725fbbee803cd60bf1f95aba340f8bf618289eb6a751878064a044d00c2f1715c296dd194afa171880d0b184f799cbb3d071708f2b1228ff1af783bf83e08d6093e336e868dff6efe5e39bddb7cd3215083b7d52ca07e84c7b8a53e09fbafdeb297b2372748f8ea804724bd991c5f57f46380812ebce121f5aad5a0a497bd1a9f1984ff6895952daae9a9a97e4a1afef994022b107ba411213f370639ff118099d721994db429187e77029dacdd3f70b925ca0b1f82116728a71d21cc21f3ce8db1b1509af4a53900de16b3bfb3e5840d43fa4c3a1f211955fd46ccc031f5b21791e3d31e936529c8455c384b70f28d10ef338c005a7b39e05bed078aa9c1e886fc73c5c868ef16ebf723cdf52d931199f5925afb37a6c18fe32320439bd470ac38f47af964b5073803a8fc3687392aa9f20b8ab09983b6864178dd8a34dd8a65e3ac649661623d7befa25ac660d86628a32830fb3a7c47effcdf8c755304c63cec710ea1d405c5a1261193e930e421b05a8a6b30afedcda12a9f6bec22b7ddc4b36c78f932ed30635f7e8ab7a9d7372a0898c88ecac1e24062b239816a19dacabbf651f5447354c9d22cae881b36ac95c0fe7d22ae478add4125ce22811543c4de2e5d2570a4e26c6cf4fbeb243ae8f8a4f4aa60f9a077a6f4e48c063bd38bf80b8c20bf5195a4121c203641fe02b927afca78ae8c6d5b3ed0d07dee04c04ada5ccf0938592134e582ddae677ef8489fef2ace0768bf9b60f0eef0afcd4041b5857eb7415a7efdd9b89d671731ebe09a008ca13af4b218ca52a3f9f72603b5f3f27e40dc1e2de1738ed319443003c85b53b976aef7a6d2cc8303d3af1c0e3fe762bf0c9308334d1346f6a46eb90a71bd18bb9fea72e8578e5fef9377c57cae32f656e843b2050e723ebc89e887d98fc3e5e7a7a40f097335793b5b8da8656065211342e1b8810ea98a5458b554a53bd0df1d37e6bf14a80b113274dbc470514ad527a63e8833cbc3e62cee2de9d772d7e882b38403905a964df23682f93c5d7198ba58910a0fde61422df8136a1eac7df1a606639f19516e6528c248ef357074316572be70fee552c311ac8e8a592655a2dac55b03bdd235dca4a219593a646e8e685dee2d70410c491ecc9d9b06a509d5482b5891b475cef48ba270e29de4742ef6ebf8347ff227345904693bf3a521e7d5581b55f695290e75837132312e5ca5a70184c63cba617a8a004ab22c65fed0dae8a5013d6b5905850da9d9b0f73f00489eb72dcf8985b664e51b1bb892f9dbb73be1875c926e47f08af9bb75e7d7842bc4dcca7d73df1c497465acec8d443298ec6a090c968e76756488bd90907acd9ea489fd0a05a4d6ea390acff582252477071983f40973bbbc94ad1221e0faf36d5a725afdffbcab64683ac2b2b32a72f43081f5ae72efccd205c52c653887f575e8453f46825c6d5d133d7c99620404714e057adc51cc2923b8dcf94de1d482b6fb680d90e01079d5b04311fbbc08a827898b8ccf09c7bed4a1243f042a5724874e629db792068455ceadde27f428414faaeda2f6408457b0ca9cbbc4bd8f7eb3ae726e634fe940eb6e579ee575690a3778fa5416df518145c448b44eeed94aa8d53c0d62b941b0928e347161d7ce95b4a743345808bbfa8d8ef4da57b41b1fea43a5cc506b94adcc930e334a0218349540b4150b3dd338782a041f79dde40c256866131d4ebc02dac2515d45f6d89d28f6cd73e9304fe6f0c20de431eab2f7c4e761d275885f1b4e665cfd6c3ad99651f6f186cbdfc24f8f9880935b7d2adaafeca3bcc997a1d4e197863a67c44994e6106282d526b5335c691e80d4797b4e8c619a89257c58bed07608b301471228f85cb6c7f1d7653c00aea002df2dff17c933ca3de13e25a63cb5a642be792c0fe815957ad5cc0b52ecf4d7bbb3bacd7846bd0d9021cbb997dd5c0cc7f61d3cff4649cb068be0eba0572f391cbed0d1bcee5399f9588a1ba82f66c56b0ef5da1fbbdbb38179cadfdbf9e91b3d2d59fc6a56e7d51f779d3878e2044a44c536e55a4ebc6ebf4e8c3d6a4f90cd9f918597f4c076cf2df0d4bafa72653dd43c32af2696f2f3c59953a1610fe1e3d905ebe722b9722b0d5870a5c61edc388b905aea40b1dd52bf8257df0c48a4273f2fa4fa809fd31557d9d0b46ee7614dc8486d5a327684881fca6a1ad8dd96bda5f529430293cfa8ff025677d2563c61367b0fbccdd84dfa2f29113566ae7366413105e442cf242d82007351dc8c04e856d029056257d8180b53a28cd8ffb4d82a4fe380bf244cac236bc3987690665a5d35de4d6181b8d54350395c13aedb03db3941a3c02af1a944b074424429df16676c1c293a7ca3ead7fa54315960d4b77113bc6c61d78841bf132fb2e3ba182b6cb2bf7daff684976c603c1c094cdbf2322f25ac04ee9b18480aa23b122afec61977d5c516580d2622977af595e2848ca766b9f60b64c8d24d04b68fd59c1066d67dfaaaa875a8f5e968e7925d418e91713e07428e814aed8e0645e531c989dcc3ee043e5a5bc39cc6f6e99ece0034b53734bc475e5d72df8bbafe31ae2456a6e9b36820196cd48268c3b8bb223eda5e26fea2f9aa278fbc88bf9c65e1997008032c490abdfa3cacfbd83ace41c5c21c1ce655b418e273f26fe286d203e6a852bfc7f03cd4e00554929af09c063ef87dbdf4501618403f31f1a8638a44601dac91a592a015e9c92954b0617f7529ba9e62b1afc75d4b39a969955f0bc5363c1c0938e95d80dcdc68c40b8bd7258c770bfc800b099f3e03274e4a381dfbf87ecbb93ae4756be5d9c7451182b4cf4e1a90c3ada7e85ea7be6f40aa198cb67a830f6a2a7e3077784f1059b76f0f5e96d40dd8d40f4b91d2532c83481297c9570ba740174c6bca954b3c8575c7b51223e945dedec91d6f9480bfb68fb805f2ccc8f13f06ca4827f9332ed8d8ff7d791397ac26bc7773d68be2d6ef0f10be6d8d572adb6352fb66dee8407db84dee3b0ee16cc685fe00ed2699c36482054b9451085cb549605a127379293b41fb37b5fa46600d1877a2d38639175efb4f66320d6faf429e155a33639702ca69e4cbd19edfdcaef123bdb849d9017a57cd223a5a28d028baa50b093f3b7f304d3b8e054bd9a010dbd22a2176bb0db5044397671c979313ea4704287fa70e077e02e3b2dffc37cd3df706544203cfe8f6d5df3aab3c6933521771a53c4314f94e971b71b915da0294e7c715060b81d3e95a3b684848f4193da9a5c54e2f4ec57ff890627f8ce044d5b0b3b9fb37d7974ebe605804983243f1f3a345d72c56f544a772d2a56bb220ffc080bdea8d73cb3d3595e2587550466487f35a6cde1481f230980783303df585217a87e091b8fa4f567a08aa4240a2609bba1006eeccff4fc0ba5bc526faabf4dd4ad1189a3bf424fcdb471b88e9ec57ebce6e5d4ceeb979f51feb625a5bbe6df4a54e1c6ab0a3c7da5d89b4704b9f47b700d985a64d3d160248594ada5a3f7e5c16824e2e1af8e22fa5db83befe911b82cfe5b0f68158491b87705ec22e8f87cf5d18ad9625627afee7b1999853a31748db4b38f2beac825289d85177a58407820c62f0b0692f4e05f2379549a70a68350609f1cc9e92afec129cee1e653c5f378dce6eac6a1f10b8b729b000e39e3e32ad888d8fd19800546af2f0173febdee0e2aad2ac5d6ea5bfb6543a578e5f6e61556de7f1071953e37913079c00ba68094d2ac6c9e391e4a7b359bd1e4e309975da8c3875076dd7e9d276f4bdea4a7c22fa3d5f36bcefa6089fae562fb83f243b76d74c4ca041abe8e0b5d5bff4d3e0935c7cec7edc10ba1ca26e36b7c23f9e393699d41ffc4d66bbdae86ab7c54212bb0998f247b9641e907cc5ed60c18a72679444854cc23ac09b014902f30ed6233f0f9aaf9c73d8e992c681e2b717778adfdc7ea46abdbd80106bf8db61718c8e68a1e9759698eaf79ccc94c68b5a352ad3039a7422458a2895b086b7303ccec249028f4f41fac4fd714ba802e93c417d8606153b18532ee6749b497b6aed4f8c3487cf5b9b1ae87520f5e15f2886b934100ae57c12bec665ca1b56033d79ad2b4954085bb302c85cab96ec0f2f280f8193bf4c6f45224ebee33ebc1a6efe7c07bb47beaab83f7aeda79069e715eb555bb2fd2bc06315ea2cdc3a8262c7963729ec8adf4c59eddd6a95adbb4836712628233179bf670b1868e696b17a9e97912491d73ea81750d68f2af9a482674094e4c213968ff62da773c4e305956a690a1689964abfd5a1d6eb96b31a3c81b8de180c800034a611aff259f8b37c949fd1ea8b0b0820c17fbea12aebb3206a382ca0025065c91a19dc6f1e7fd6cefe8eb42e516a97182d7dad6b7fb76e1ede579eb52eb481e2d2dcb5ecca58300079718394337e541dde8e7a07344ea77681867d5f7f12c4790ac1bb4703e2d054ffabb0b836d801addbffb9ba5039856863c0a3c95fdeb77e1b8446af40c115ec86d762d081d3c86812d4e2a0bc251eaf9248a34dd8a7acb2ef72446a61631b1990fc3445722e6adc78dd7c5bddff7b3629d9344705678e50f2edca83eb31033f552d70afa1ba6b038c24e4e9aaf8de7cd367c126c4b80aee1dfa288e58ee4eefbc9a6280f66e18e5c73bc71dfe72164bb8d6ff43e0fdf08201c432d9b4ea6bb326031d8f1ed50e874564ab4c15a3f91bb947d101c9be248648c3e51c872e8e86869d11fa4d03ab197d71927a1fad7dafa47e3587245d6a555295bb83354e6fa2a6f72b8b7781c7e8c0fb1fc15f9a4d869d52dea30e05ce014c70a9deb2dae127ce7a15cdf64df941ce3e0d7aed84ba53e183457b0cebe9e4ea423423070cea08a78c2b5997dc9f9ac81d050ec93a381570fc4017ddd1c71bce687bc446e4251df433da756858bb92eadeb174727ce5e5a94a96cc90a8f9878a20978694e1d92eca4f80052f01ff7356435140f2a3d57a1e04a6f9deb77b559fdf5a18f74d03938a09374d23d90444106c4bab7edab36e58bb740dc70fa0fdb821058cc697aaa06d46e6e5305526ff99de1a34a690b752996504607f3d0edced0b545b4ff9964283055e6ae277078e4e868b0779c223ff80312e334c3f3b42b5c04cb516d010ae22ae8d0c2d7a39d376d461dfd7b49814a5b9402c3ef9dc4633de563d04d64bd621ee6751bbfad903712711555c57a5fe170506ad455d53a3652f96087eeacc60cd584b77a95ad589a49b47bcce7af3b5ed0008c859e884567bbc26400b85a9685a1785b4b20986a3bfa5a1b2bf68a54a05439c04f468a890cd490161e27ccfa0e84b04b4e3b76faae48c8f6f499dcaf6e37914ca25d04b4079f769c4bee3f3b0baa3c3d379d69f8d2bd6c29b8fad748e5c3c5f6026124ff7c558592c8a39d9998542a7d51b3a50f05c27e64af16125c485677f7f34d65ee1c5bd705ddd0a4fb0a112d3775a083a1ff7da1f653af4a30992fba90097875a529d7e01665ac3d9a44b137d2862cab91856f13ee1e0481caf8af4bf00f58cc2a7e3e2219b9b6af712c121d21606cdf09c2d9bca4408b5362c8fbb7b7b4ea444919fbc39575eccf3f83cd53fe068c50e40034547a3306fab939368a4cf88435014d79044ac7ac5b6239c79a7e584a300c33be27c83bfd136c098650b520beaa4eca1ee172fd1e8fd2ce2a195c2ec7408801ba9d2343cf72f59dfa3b265c98b7703cd77656afbe1a652bbcfd8ea022aa5daa8390994f471fd7605ed6871317bea978b079113daa07f04bf7262f47352bbe99145b0bf232e0ebfb29ee49284bd9cba28787e45b30c8830d9f859ce9b2e97174d0c319571426ab3b50cbd83d9984f1fcd3bbb1a954b383037c5826ab22db9c8b4f2f98bd75449bf06f462b5e1f92860c16d09739f0a53f321d95e2a68a80588e57b2462fce9152b3489100830193d5d7005a1c4a6e294d120ab86315b5dcb50caef8a237badd8dddd2d3a89c43340fefaca2d504283d139dc44f9c871e93c15f3b89380a339e55a2ab9b7475f58979caa2e64e68e10fbdd321469e29113513915f5ae1eceb0ca5a23656e9a3bdd95aa621675e382544b0862533c438cbe8955e666754dc72879e23064e5de6b37c907e16178d7694ade9e190fc69a5ea632532e71e7b8342cc7bc35985ef6422eeea907f435a5681bb76f7f5e1a5d591d8a562e0671adb337a42ece61ab2031494bbf94ad5b2b454751bf4db2187542460c4eb177b99cb98dc3d6af619317f3c9d069386b0236068d905aafb3aad9d0d45868e6c8e810bed1646cf3408bb55d29f79e2d9925e081b6eb29fcd7952597ed5d10b2e8b9420c09021239ce4f4962ebba5ef902c7b384ca6477580c9ccca3fa7d9ca959e3a843011da348d15b49acc1c9f033e0e60ef0d5901ec705b3bb3b4e82128f805f45c49d31a62e56495c1324270a83a4b77130ea64c1ac04adea119d938587762066e476f2d7f711ad212bc1ac853d9a337e3fa3a904994cf91dac3f1a3217241def02ac650365951f10dd623446ce86037496b045a48723f720975cf2b1e4bc3c83fb59909da35ff8d8f7268eb7912a8224d212ec57f4582d6f65bedecd2d7d5c5ae0eaee83022f4a849003ae702b0b0c97d479708a8090dd5b4090a375959c9bd39b9f59b3d8a8912d52de3ca7e63b054841519c256798b4f3954889fffea0c0347735367bd7cbbdc0edf0ddd0a377c13b973447fa04995b2be1b5ca0cb61735c385eee4aca72038194727fc161d63b648319191493b66702007ae76a8bc0947eab5156007eff611c07d17bc8bb8155f2cb916185a291b05cf6ae5dccd865252aaa3a9cd941304fd9cf072c0dc28fe3582d1be3ff13f5e7ffc986902888fedbc7ca85abcc0d96e726e4e04f49716416aff3b902c8c48c14be1bb785f194bb86828913455686f84e4aac6d7ef6ce5ada6c51f2f07aac8544cf3df1ff373689602022a9b69b90d2c4252aa621c5f20e78016b05ca9de11ef9cfd8cc5dddacce28c3654f14b86e92a8358436e4776efbaafd818410de069bc529cdd4738d72cbad7680fa5c82ae45b938878d3f492653a00feab2b9bea8a14e2ebc3c700eaed9d71b6afbec50c0d1f780f10fe244911af023621c084f1cc506be376d80c9213649dfa23ffb886da024d4c050333dd88458230c3d7789855b6ee9a295cc053bce999a7dd3c75546d3832a02b043bf35e23b6cbf28fa4a04cc2e48fe22b8057b6764e95c372de19c8bf54445908c8bd0c5cb77b4dbf16bb558517bf3aa83fa194bc85359b201d3d47a7e0b452ef12abdf58013a6c3f5388bcce93054c2c660e3c07cb5fe87b0e3ce2453ce5dc7d0b9a14070af86b13d428fe422214f618bd038c042d11db957ae0170fb2b6965d4c5a757aeb1fb165841a927df42539085ece5403d7370c7920f269ef5aea1d41367fae1350e3047fdfffccf08c171d321e9a8ac7ac8ac735b4e52300ca003d0d10ddcbf468e82468e59f90b6c1e6060d1f0d3b0cf7d336b5769f2d7817d81e0e53c2de73b0616d13553c513d74cb537f0844e2d4b3bc85248e66efe1eaa6d3ceea1d9756fcc0780ce8f33d5acfaa1a66671077441ddf1b66b0a6ee8ffe85339f1dddbc56bb786231cf2107969e2fc2209082987ad80692289165b15c65abd0d493fa59d7e430cc50065cc60da6b632259e89960262d86621995a92fa194e005ed5df7521d0811aa40eae39beed673abfcc65825d83b0383fda39d56a889a01242565819f82bcd4f22fd059f6739533d44d7d4f4ab4f44355ccb8222a47461326ef578c3302c73690817a9cbcc0e5b878b954cc473d395ae8114fa89cda541cda1e4403aa658a0a4205bc9bb88fc003cfb4c777c8b49e6786deb6d8a5aff9d37de2ef6bca5744ef4cba2f3a5fcbc3cbd4e37054a59750320b588b78f6bbfb3c85bb6622e4e6530b6989b7bbb92e5ce329f1c4b271755c6317a72c7959870d1f8c938afccb12724278384f981f6c00507d969e909ff3c8a255cc46cd33742913035ec1a02c6def998acf91aed833d7965420a0773380f30941e5c2c281c15c3708e8fcec9f69f2d2796a69e44fbf57935467738635971c6793afc58bcc878c701f5da1f6cc7bea1a18702cdc35876f34682a9c26a6de9c8cdcef33545bdce6a2781b14595e5ebeaba9ad7df206af91379ea767f534f23808f067e6db7e4ade812ee7427487b5674bd5b742c0a44232c7366749dca1f0eb65914b3eef69474573c952287364cba9236bb1f7c6a834da69e6c9e4e8a556bb0e0956f82c89d0f2398c6ab63638656c3b35a368abd6e4387eb0d432a923c7052a7b9deb3f8f8fe8639e8f2c39cee0a19ef3d5a94748433d48c5d18209e2566eb540d65ab8c2b92931dd337d21faf4b34e644ec361e14907a5d9a8ab52516e3227d01c15eab6410ec322072309be257acfa8afd0afce2fa2cc06e762b21f5c58abee3271470cc799ac839b21b0b40c65c2fda2594909b9da0cac0c033bb9a3b481b2ad0a61642d0b078ed5b7f724264f7dbab6f34362dee3e26723a02e054f77808eccc370e4e9edbfa1d0c462f2c2303100ee291149b50d5fd9eee091a9ed1a004627958b730faebb0ef00c2a76660831a5e2611e0c65f2b65a21a48468a8fdf9a15049d81ec0478eebbeee68a6ee9fb2b0397596e2dd468388501d218579245c746309957e413d8db8b1b6eacfe8abfab73bcf04c3f55aa1565f1d0e0d2b87e8b8075544497685b2f2ca60677d2e1383520f380ad9eda430afc366ed986b3c5dc6f7417e10328360ce3e0a4de2c557137a3907fa97b5a29ea943e87d011bde9f022a57cefc718efb63acb131e5e3993515087a91cb6d1bb455083e2ec670be4d4bc1d30a901caf32684ae64b3bc911daa9a4081c700a9a19498b7f411639514c0dbf089153c4f3318de700e9bc26b0ef98e253eee6296473daeb2551dacd36ec95623e224b81f9822ac365fc8c7e651f75e441ddbe2adf84dea06f96b6595bb0b8fef3d05915782e85286fc6751e44e3f4417c775f31277a44a33db79052bcc9ed4655ae0b44cf0ab8cb69ffe0d8267d12b866cc7f072eba667c4ef0899de1fc0051dcf15e5b44e661bd9f8fc09dab9512a812d316b7d4a44186f53d506790a3ec1219fc1b4e6f96c3bbd2ce244a2f1d2aca5f556c3ede5938afac925762251d35a33b1c340cb7e2960bd8058b1e7e88fa93390d662cf1dc07339d062d3ca27dc71cc231f9464345553aeb14874a856f4c5d6fb087e21a5a96f9eef443f93b739cf60c09c7f0e77fbaa807800be8b6790860e6459d6256d9c74513a42cae6771a4640e05ac590301f363c763d1ba836b9bd33f1ac8ba435cc4b0b94e3a3aa15be72e94c657d8ebebc15a648fa6fa151dc8f8925dc92d390fa24b10f8992c369ed40fb88004d9483e7f912a327b7778dec1b6ce552f7dc9b434e39d30d419bfd31fccebe9504f16419d56984efc4082cfe8ff45d495320d6cdfb899b6c42af0416888367af958817e41db1d97f8e2ff5ca70417397c0d170015441b88172843f9bd05e7600af96852ba2f051fdf21657d90ca28f040c6c84c247ede8e079469a6bb77d0348c1511feb177e76c127943d037bf26ae4e2d861ea6757aaa3e3dc2304e96bd7b669e1fd82be22b0dd8680046e7340cb9da1b5f6ce614d592afeef61dd28863f0868aca038514cd21483abf28519228facabe56b40ce6e7e23aa5e7e859c0915f10afc14676d6052592cff81e380e28f26dcae38a69b43d9195293dea1646fe9bf26cbe720d5fff1ab313b776770e024ad9d2ff32ae4ef54d3ecf7383932e5873289b335d0f9286fcce65cf603cd1833da1d071ac38d69305ab4fd14d1a3af80802d97fd827d67edfd763895da61212518f6721bf404f6a88ea6f69ab3ffb0bd4e5a237a65a1e55faa7e40a9539c81e4cadfbac5d8a5e27d5a05c48ad6c4e2ad9cd10a21def08bfafc3d041282099b5a9fe10068466d836cf6d2448597ebeb6a035f670898461e61413547265afe98b1864538ed40313c00aa3675185370c44fcf35f6b0fb9e69eb4456a9bdfc35f0b8858f6432ecfb2a3017ab3d85ad6ca93a18415dcec46fbe495645c166ba66d36719b0113323479f6818b58a4595ced4794fbddf0b2f360a8714b6c29ecec655131d795d38355b89b57abff6a6f63af69e384ff58565926779c9e954f817406503c4ae9219a5f90489e6733addd8ba11abf666d4aa32b3ce5cbd12a2c301a5757491b3400c997f83c50ef017d86c8c904a7dcd1d463d5b349a7795835c4725f5e30e44d24161ce9e0e409222799af374b9581287d29e918a336c55f94314dca3d56ee8a0a848201020a2eb01175d9d85d8f071cae33da7af35922d5c974eeb84eea3a873ee910656758c47c6629f44620ad2052919decabc2f2a80a8c7b753581c58f8d2230950e508e8515b0de3342494577f412d2ac1dc6c47c6650f8e94de9e85890d65f5e4dfeb49b6cdb469b154361cd44b6c2ea5e154ee64a2a78fb24aa955a1caf70c0604bb79cc630765eae3a9c3e6715fa41f7db54ff12f91d7e82c7426647e945db77c17ac3258b17ace148a8e1a936df599faf26cbc004a434868a33ff0ab381913e732ae1428a83eaa344c5057454e5caee9689a9509ac765a49fc6c53b252757a2ea75acd61a9d18ef8673691142597eb829c21f9a4a425a6154806e7d2195ee3f210ab7eca6b6fbedae1da3917d31052844f6e5e0a116fb99f0faf43497075b853257cac197d0bdd18b61308ef21e01f321f70172e8fe424584fdeb6db7669c569d04d95dfcb4eb6a2a9d9d5617105737ef61faedaba8fd693e3b77ca279fa5cbbcce6a9beaa4880a18d21d69fc4d11b55607dc3c382a30c651c01b2a1478acc7b3b0d952f387f9b0c1ac8526388bdb7bae1f97f74cb5b2e780cf0bceed1e15abe62eaf60b0c94b5d5d93f981a3d90893f0987ad90a018c000b6220d259a9fddbfd8674542dd98334e067593c2220ea167333996415f34730ff5d864f07ac4b62ff08f838142f60eb26577fc6b2310a36b73555107f69379e5c652b3c2dc9fb4d66d285f8d604d26ce7fc044fb3d2637e0651f340ef1e10180e8ee465bb33e49631ca7ea64ad446f326d85a35400af7db5cf8bf48473f8d1c069405db5be15e3c50ba611966908c47b664a5d1a5ccca0191ca9b34e1037a50e3079827d9b81ca1df0427cc899522da1b62260a4dcb85c5e7ee3efeb184d5f2681e302750fe0cbe863a13b4ac71b20514df1f40abd7c92ad5de60d4dc0286754ef995513caa38088be0f5dcb228132e642c41b01a2e45ecfbe1781e1bcfe9eb348df0312aa868e13575a546a6625c6fa515760c7bdb9bc668ecde06d4baebeb20fa7fe4338377b8a64c7c88c6ed79562047f054e98151b59e037a4f37de3db24102239854eb53513a06be24f07fd0319fdff7f5fedb7b84dfecd133bb7f48b1e0c71d80f93c7abacecb222e55090f367b3a260794e0efa84aec5a5aa5a118da72cfebd85ced4c1f02a85027227f124398b29c6b52ef2ce6c4c62a81999de3022e05a8207269f23d839d8445f583c6fd9a7d29fbc9d8c5642b22115c7ead9db4f011900db2bff93734603095819ad90716f3ff693ed95ce7c28a8ec299f6f1d7c4df3e119375ba73261ece9aa36bfa31d9e1a109a01bea9f87f8aee8dfc6680d2601f97d52ce4596d6e79ddde8f04aaa7c30537b30e33b75ee9bc3f1010dc17daef8fdd68d3a15006690d757c3daff55fde561cdd8f3efebd3443a737014c6f8a32524e0a4d515b3d81837b8371da7606ceef9f48fade70e236ed0c377fcfc80bad51cbd5c43b4ea138a574fa6c5d25ea5eb47e3b75d412b4964fcab63b93018c10af97b2510152f491e54f37a58c01ae25de7a09f31186902b82436c9afb7ea43db3cfeab46c1f5b85abf94d6760ed65b5a8d51cefafe84c72eacb32e4ac71a41b649da090ce348417c7e7432dc5859c6a7bb979296c7c74ce414086d1e9b5b6f5b165145c0358e92a31e29035f3ac11961bdf3917699ade1b80c7db66c2e11e415e7ff0bed8c610658244b4f038bcca045e6eed14d7b06fa756ccf013cda0d19c1d4fa2bc452d042b69b1b53ff415be5ee201adb37f8d5d6026afce5a0b681ed37c8299cdea78a16637989b69a90e7805728ba3f16a040a0f148b0b67dbfd09b35f72b56252b3e57286ae46b8495fa35967512916f5c9261db54520fac953ebc718c5dc514be7871a7a03b7f6886e771a06c652ccf087e625089e3beebdbf6a2544d716657f57824aa43d310d9cc4544d8baee86872181d75f694cd13d07ceda7965ee2de32ee156c09f274ba09675bd6ecc3f29e155f80b44d6083220e72c530bf7e17b73b8bf8cc2ca9f2c06916b73781708bc41240471654a6bd56e12f7189d0e5713a1ccfc714ef1d4abe01ab5162be607b977d9db327e1534af7a573efff3bbf7abd3556e9d9f2d5379c00f2eff60b617ec3a9b2374f1cd2c7caf44ff781acc009772596095645a119634b2445424be92425df524eb6c22ad1d6db32123bb53b634f82431f1026ce90e7a71d1f723cf7b2b0304cc34a6b1dba2c446b94fdba586213715e112d02c6762f99b554244da0950646e81bc2cd3cdf24f5ec53e863bbd9fa6ec040e147525af5a3f55aae976ed28bbe9414dcb25bc52a0d6bd8246914679837b17148380e0f5a1fdb23982251ae53e958ba4685c74c541d650a7c44c4cc5848a8d4abdb69e74424f2cb9c7f43c78a24d61fac81c6a24326f5f666fcd969e6f7e7ec4a8f35358dc008b9eadfd6b1d00d64c3b18268df0ddef795d9b6f916907a9babfcda4c4d454206e18fd372a8614ad7c72d78c2a15501ef24811b87769aaeb31ec1e367d38b6bc65aa8c913c314699f296751cc13fcd44e0d0139e0d9cbc54e5fe8723c58872259064272482722f51b8e4c9b22abc91765056f5c5bb7115d79af6a188f4c4f5d9c85006d4bf5fbc8bc4334f2ab30d0e0d921244a4d27a6b7940023fe43bef67355b9a70a3ed4b520d88d68d604cc2ab388df43ea2b4cbf36789f2c8172d69d4e442ab744e82aa82966b07b716c528480ca598f5de492ad6a1ee090130e926773d6604661088a055be1e7aa9e40308ba6d28bfb4e6675be791e6192a6d583c3b588b88145aa824940c6d43097bd7f82d37b71f998e3dc4d68ef453d78118f23f8e5db4589f7868a9698a32b1eb0f9b37b8e9f68017141198bb40621c8aa41b1db15ad6eea7d1c30a4071090bfafe5103e18892e0ba4f0fc372ac75c7f43b0ea6ab50d979405173cf27d2abd9ab8cdec2dc9e97c2dfc11f61e73ea242cfc2c787b3424cc50223e51de442411d4127fe84b43cae094d7513484194120ed656e065ece549528f28eb451325fcb78fabf5ea2716a14fb9bd04276a147af18a789e6ced1d540f3fe8a85dc98b0da0f8fb29cb03c47af53209bf5bdab203b9844a4f5e0838b46ec0bf17571ab61ab5265c9a3f9a589b962a7975c51ea13e2d49620dd98794c7b4551d8ec17ab881c5bf9ef579e1ae035559a0ad15d3231ba19b16fb869417c3f7b018b442a83678a150690a8ce3bad8251f4268a5319267de7956684e3921218b0fef264e30c9848123af63156fe0fa5555803962b03068ed9d66dac04e79b927df87bb480041056560c602f2fa14bd4068a49c9bab98c94fc22131ab95dbb81ff8e59d6184d1335ca0f832042fed214371a7c286608dee69da058227bff3edb135193e616dd08c67e62ade6770aacd704492b53b318822cc36f61db09274a5b9b0da519149c18fe8865b08a009d5841bd4237ceff5390a993cf50b761a971ae720aaed72bd23601f69bae57f05d2544cc0348f03e95e8682003a8cd1f606c95b6d0e4bf59f1bb9a5e658512fb465a034ae0f49e8ba0cc8cdaf050a14b6db90c98b0d09adb702eda22c11986330fa902cbf9f1379c2b1a78b65955f46b689c85077a44c50f4ab64a100520a050382263c9b99425b9aa95edb41aa74d28cfce49acb065626559a28ca512458678a8d9336eefe0d6ec0d53163769c7e610bf77a9873b24ad45878f9dfc309d19e99579adc27e10fee610900a2e551ec8d03de26a7336190d5003070d0adc863e3676e53974eb4d4d7b7f2a6d7075f7e39708d437e648c8ec4f20f09d3ba2135829c9f5e41c3d412f46ab435c240c04c7989163106c436d2277eeffb5e0d7c1446c707b63b8ca0337eb33a854fa21b36fcf2a10f9914952392e4d39d0d152fbdc890dc447ef4b4dd9542e5d5358fd16f3eb4eedeedd7a015cc8b5649ac2d8f355fbf262a28f412a85199e1ecd2a2101a8bdf7ee5ee0d7545c29df995a80d2aec44605e94fa3c64367eae9938dc09fa8591b89738b7e7a90aa0ca0d7a3069dc6eac46a759abd0eda433657bd2d876a9a0b02c5a5ea796e0abf008b81ee68f0fbd839d4981df29d4624e499d5c21191f490244ffe8bde934edd562565a900ec227f9630bc8ef7ef4ffa9ad93fe7af596805a6a84918b0c077607b253f565dabd136d56805aa8eebb711d44fcecd771160af21112d876cf7902c46e35b5f31ca02d77fd459638b5824fb7e21ecf82925b61073960c528c18236c4ad440d55547adb3444649ea6e1ee204d636726c44bb5f89ac258b6eaada3a3f1d1e6341144646e4a98854a43bdba5f3c2925ef804a7f7d5004e1e817ed804c1a38a4ee536af6f3e9a79ff6992d0a3e608ee48f3b832c389678b0ceb696cc7a62216aad349e6e403aa2f9afa625b87c805126c478db2b9b65c8fa5ca3427901a71cc83d28074aa15415272148d2accee570aba08a0f582d04c9d9ec4dd3b82194462e6567c79f31ac3f7f0252a25d5417098b5b6c41c568b5a05af731d23c44f738ac4e19ef61def005bc0c03bd781e66c07e88e469951b3a4bd762fe60559412716e62c0763ae2f104b13308ad61a1379a9cd3509546174e000cbbd971dba4d21964a8c759e9b100ef494bb4afa59a58f0f0626fdd65c3787feec238808561750f9a015053aa5b0a53a990e3ee5c16e29910f1ac537967f0ccb9c6ae884bcf06026fd98d5fd6a46ee01b4f589e24fd82b072afa3abbdb7acc29b583e0d3913b633f98e60d8b3eab04627ce9469dfc620d59cb2059551234b44fe3d4376f912700e66091d00cef4f7b4515b26d265bf35a66e2894245513d0b5326a2b6876688c6f0b338b32789443df984441444b2642330f316b70fe076566eb4a628ea834baa9d8f1a13ac897c7586768d5fc7b96c5fd5dc488c6af93dfa3db9f3a86d4766fe3a92f6294640e5f45980b0e6891fd0399ed36257c1b1ab60f03fc4a49a33a739d35820e372505db740c0c9abb031642d97cc011a57f63feb2c61916f8942942af038fbcb986d50e1ca2299923b00de85ae103a1a0cf4721ea612ed513b140c62f58916d66b5d6891978b05823f5c82c749fd584c7586379641f4052e06500c13d7e1dd0e4c6e28fa7474ff87394ae7d23823893429ca15b59e31beaebef32dfcbc2b4d7d9a68431ce0934db0d244ff250cc4d3d7831fa16efb10f8c9c4bf8be2fbd423451f0cd603723542159c7c3b14a5708f0461995facd6f0a8181488adcd4fe8fee8659ce428d8daa9af98771174edb36dc1a2957b29ce3f96486423e0a83b620987f5dd62b03d19ff2d0aa83c149157fc429cd22571ea47ef1517dae8ac91a493fa3d5d0ce46932004838f5dc118edd233c7c864b1e7feff9eb05c30e04d67c74d66185001ca050d681f81c81cc6eb4d894cbe4b42bba123aadc85a3dba8a9b310ec4332295ed5959f3365585d454c5a4938f83bb6b0d83f885285f782db9d1dade9681783674dc84e3a0960fb1ac7749d3c9b2bd7b7608015ff95a9b67b6f53d497b6f623117de84df96610a81fc45f506cf35b039c260a05e6066cc7170a2752a8b75948bda4ce23f1ca8f33d3c314b69ff95f6c5f01b9702a7ebfdc301d70a7174abbebbbd11a3471556def053c45865bfc5693b42cdf70cf7e99d730afac87a6d456494ba014ab06fd5b831e9f9c2ccaa6b71cfe6ea06eccf4c65c96d432364d0ae32ef51c57b879fa8366423cadb02ed81da424afcff8782e048321babdfe574583fab87c0c9c2502e40650551d14af4dbf55680743f87ac927bbdb267473210ee779d8d99dcef33d55e761395228f43daac9dda13bcd0e8bcc638fd1a970dd4f3abef86c432a3018630de97b4784514fb2230d47adbba0b961832f8ce9d078facaa852b1f7664a2fc035c22c7a3292d4549f0c724abcb3af1d51334afd7a8f546167875efd5575a7bb593480f288c9ee89343731bc0fc9752159fc982843ff61dad65c37403bcd8d7255319df207fb0876645bdf901351bea3ff03aba7685f978d2d2fb26ae8b0a044cb965d32e2d0c582577907c97b221286a4f78588ea41c58bd9846b166fe91043b992631957e26fc12d883b7ce23eabc0667af2c2bce3a189ef8d0b22ac183838799db657965967d289ce6415f9a3eb8383abd7b75b797fb0e67ffcb3ad8786c8f597b4ac27e13002b5f2bff2d5d20f2d390d18f1d0ef093d7bbcee7c676845c520703a6ad76c87819a22f8e0ed8e635e36b47a1a243dc6a31dad5c2faafdfaddb2df693db1a19523c480e2b97ce5bf8962dada5d31c48547a8a16a61045b2db5cd3b32b0158748b74a0c85a3c18b1e1e481e4acd63d28ffc941a86a9af7e4999af422283be9444280ea3c9bda417d8983780642309c90bbb070695b355d6532ae6709abf73d16cda868bcb2faffe49fb90bcea374384328c53985646fea7ad5a635d0e83f19c959fd0cdd630bfac2c1e26d4b07a055575909a681d6db2cf4e26113c8d866bca4b34b5b7741fd510f06098dc2fe38f4765f343d5823bcc8bafb452749d798b33090abbd8d72923f54848b644da7517fa483efff732cc6b001729ab5cdb47be4fee1c98bb391b5127d88eb5a1dd2aeb2f59d6ccf13eaaf9fa5b192dba18ee82fd20d67c8754c611819cb6fdf3459e7efca1e9a650e3884b8529cb75af35da1679a02416c809173be3986f97e897438b4d679026ea01290177c43b33092ff61ee672206e5e5b0ca7227ef6c07d98eb19e1586389ccd79536b6a49135c08e342f907d5b52b9b7703b800ff5272c6b2b3e814ba0f1f5ed027612ce557420f3a3b55e9bfa90546c7e5ba9bef64df9087a8f96327542027d1f791f7991d1e18fee4c59fce4e1da73259fca8deee3fdaa1e50363ba731373a2ce8173e5a36ed1627fba76d82c559edfff1edfef342e60c3f3e27e22f79799240f08a84ddb0145c8bfc41ea67031e30bd02f813418efea768e978b737575d7de2343ce04c6a90da619cd5cd4d63b6a30531eb62a9929083e82462ce62d0bb1fc6bf67f459534f4dbd1634765c4fcf6c0fee646d303ec7daa573718f5ab5c70759a3b74e53ed958f6b1819fb52a5440b356100c3b1564fbdad643a4e67a8e51cc211d1b2e78ebf71d7e4e63a6d8fe8aeaf9f8d25f99f96c84c907b1288c26236487d6c7a8e6a6efb142af38d787addb3e4eaaf81396e286901b0954f69293c47dc93b54bbf5060b3c0eebf0823cbeef85e724c6250d1c59399704fb9195762d706c4df7e7151a473d8e82d80b96b7a65d8ce5469c0c21f5e0b74d4b7ea29fb2a0d1c65fa6b5c66739007546b708c3440bbb55235f894da942984a251df9f4e0ffa3116e7ada5ed4b9560452c7c8ea04333d7a8d237f26d28ff33b1a51b8d9a032820def6e511daa7749ba49c957d3224e9a3ea406d1462f967762c5320718fa8b352fcaf1d10e291031718dc5c53252f6ea45a58543f8ade00e849d9f9f8daf390f87bd86f5628b2937dbc419de493b486a831b3b5b0ab7647748ac693590ce536706bc72e9e31c1478e994c5e2dea373d1aed56f3708fe8b672f28961a54271e7eb06487aa5e7f657e3f17f29463ad7e9ae4fe96af97e8f62134b3a3e3307eec53db1bcb21bd4c27fd31b11e27e8c8fb7cdd890a8649121b5f5335664c69974b4304fae08de34221e95b5232653c8a2935e603b04f15c7c67fdd42604e26f44e98818810f0bea032e175087f283c37496af30001fe398a9d18a371b00ded5ed4f1f9ef8896122ad75273cb6caf7de3d384290f981ff07db8f6f16f3d5849834b395249c6ea0511c20379b9a370e19c1403f679944f4d5bf7ba7ee51c01c2ae0506884172db30a7413fefcdd4beef2cdaf0b418c5b605a8ba7d27deb0211f283e4c0e49f5bc1dac312f0fc1bec7bc3f6f0eebb4a3a2c2daaaba3a6dd5e8f5634fd530b5f8a3419efd9d6a1eefb7ea90fa3a081af5eadb0c27f92eb1288792e7afd9b8fb3c2b78b13fa89dcaed20882825a9d7ccf24386f0b41a8130a52ee1b5d53ec1ecd67f1d365be6a4f8dffa3eb7566b5ef3885704b0ccf51dfff2efcf360c7951da0b02ad4d2bdac6da1d9a35d55e6e4490377774b47da5968e5ff16502211bbc25f95f605f6e3c5682c4ebfbfe845f90773f09117691db7ad2ec4cdfbbf2bf79df91d7d6fb2226db63ead761dc7d42474ffdad70f2778e70cacb02616a07ad4240f867f8bbe9cbd952ea4b704bb9a8222f4f8cdf2db8bb42b411a0e7c96eff62d0194a99c0e38d30a1e89b97eaadbfebcad3c139d97d0ecbd9a061579702eceba286079151c1a739a8457d4fc387494ebe09d595919da880108e42406992abf82aa11e63774e226b69d4a0584fdf9f08ee5fdfba83c71ee0394f3b8e58a666c3b419dc8fb113c792176270b4069ca43a10c2d1d5febed61921639211fff0f26604599cf5d647a7169f4d7410ef487aad47f6a5cf63c1eb1cdd5f8099debbfc4be80915e0c1aa0241a4877664d3f8e67cbf35111d2af1f4833fc46cc8061ed91636c02348ea8de72b8197b6791fe88850aa6891b494fbcbf442b96a50ffb9584c41c146ca9f6b7cec07b7a5026908851dac651398e252df6d5aa61837516788020a90339a74d75dc15624a1acc609a78f7e98f337a911d14eb7b42c8613bd526857db694e903dfebe015ed297db37c8c49112cc6fbc029ffdb9a64cc8a4febcc1ed4d48fa1102ba36ddfbf50f0d3b8565dd6be822398b7ef8170d8f3a9f71a701c8d68aeaeded9ccdc113ceaccf8e08670b42c208001cf46f6cae3afdc4227e80b66483bf2178715f6508cb6b2066ca6ca3b8ad1338ed85186abd6055ed21f6d23a9c34e1b9ef209ab97fc585d2bff566ebf2a641e607bb4df3668663fe22c2515139914d632df24a574d4e43b42447bba479e90fe82b4e63245fc2df558266b9ae7e90e4b724777fe422f922742f159926abc531b4c2b03f79945f921869142b08bd0be5967c3f26f336f06bff3fd56a39ebd4cdd81d6770eab8ee6edd9323ce788c8669ec8793a5fe627022e5e5fdcb3a588ad0d1fdf4bf3f666ca1b7c91e05f75d51e40210508e3c53e37078c4f41c0b49ac05265afdb71017b94c0eefc5d882c27ce27c2707afcba106f8eccf94b09943f3aa15207988579b6d944e68559452bc2263bf6014656dfa1df0c188fc62f10bc2e79e75c3f9d998ae815d3daea47d468c8010a84412b54616202f599326b2ff8fb854a2a07edccc19122a3ac62350c10b75deb7060a4e260772e6cf422f85ec7727f8482c4107558db1156264bab2c0463cf59a853b4471c5860b00e99d34de9087473634174ae0624f8015822542e6a6fd9a5484e1a40a3131c76a8c072de0fe8249163089cb4aca7a6354983438ee4c1c2992453a3cf67c8dd3e26d4dae4f10a70215e1308b27882fc3930253c817065acd1c195125d23489ae6cb599ca590cbb093354b1b746cc5f87cce01ee7209584b84a247bc707abaf6f6753f76325a73aa713f049ea7ec98d8d1eaad08cd3b210d81b9dd91bbd1fde38ccf6712715c3680dab390553df62d41da0b377a378054694fea557160a5694b35ee154f90f0f38a951a05092bd6c83422e5618354c9827f67571447877c84c8bf97df2925c53121f28864eb8a5eb68c9f322cca0728260216122407d79d3a707c08972e062cc9522102f0e836eb6fd96251d697441ff3a3fce77391def8fe0839f00647454568c2b4cbbd917b1c59bdbd60a2150375c0c931ddd8eea1aadbae24bc629eaf3beedc2861c84eede5c85e72f00926c3f2ca65a980b7d1b0c0dd2bd27563e2924de9ec9713477e07853955c2cf1fd55723279e6eba654b363683a46ae8fc68900d746a3edd84b857ecb405018f0e82dbe55c34542f159314b68e297176194f0863986eab71f091bb52f3ea527dc8bfb01d990bf48a09aad9569e1e11b7e51b71702afff558ac712e31567a76bb16210dc4b4fb035652e7e766502a6c087682af8e9b7e398779d1d718d6abc24fbd2e6fd5ee772f89260e724936611211b8072e42293f706882650d37f4979f023fe44c16f7b1fcb6b901d230ff92b1d370ec8e61c65434edb723ef4d5240e85f264e145cc18ab01c7d6aeb088489e34dce0a2f08a39ae8f7772a69a2ad5c45a44c9b29cc0f4c0ca7ac58adbed3b15152f06428e77946a8433f2820fdc3d197e34614fecb22cab6cbde8414909d5fb5107363a5c46f2d9bf94779516f56c009bb2a0ef565464ffe7116ab61e034880de213ae26840be9f7f8182ba8cfd9a1a6bd34f3281e5172e76a938f6fd608565046423ad33e212e87857e2de00bdf9cd99f5703bf8ad8cc380a75de17a5e0cc042e5f2c992cc3a3d5093f4b694f75ce8e2793dd1f07cb3c0c0c9c4f0f97a44b93cad74766b9171e5e1e8412b3c0f6d0fdf207f38f240dd2e3e279e00360e4d0cc9a6732492274b966ae80bf185e5540bda52948a1984bfec1add39725a5560d36fcd2bd9a90e5fc9b2bc7db1783719e50e762a4369879f2621a10a741b5a7a52a6f7c1fab55ba7a97dee6d21504b71390e39e2f0478c4e78cb99b224b9fc670111f50c60d064c1cea70121ed12456247a44ec72f28ffb3525823dfcaea948dcc91ca5100418cc59a50b660e627dbb3376a832cca3322be9172c6221a5013e3628e631c4d6e2a31185e11a07feed7e2aad4573b92f0e6719728479ba7833eee4fa32ea3b22025c4e19a89e61a9aae0ab4acba12b56cd2c1e00a1004e1caaf5a71d69ee735910331430a3748a067f28de69f217f4847591429b3a8b2c38681fe85c41bfb8a6829a7126f163322ab73f5bc997b21b419b9b104ddfebfcc697e81e76fe1ce89164f5611bcc1bbe482263f7d5b5f7cd117bab75052020b909efac0e6ed57a58f6228d1cba2a7ad39288f132f6f3180181bbee956aaa142768e5bae1051b92240a95288fbe8fba9ae4c42d99ddc9403568925a8dabca822186ae61314dc9fa6f6c5ffcea863cee53ff2dd97b99941d84fcec1dd6fbe6af8f5085559aa1a9c974889577aec7fd6c469f51a537f34e0f075eac7b4bc8cbe5c58e071aae3fa3c2bc0061865c2b71aa3177d3f578f7763441a68d64a1cacdd9b021f3db732a3ce100a7f8bc630027bee55a205cadb79089d048cfb64df2554625a92a39a296b425d42e16941426025b116c37470fcc7aaab055e488eb5ed903d9775857d4cbaef5e2bb3b42b81d6170d9fa499cf5ecc5d653569f54ac557e9234621a9f362f807c6163d7e90865bff242c4802c53774f956a94e16c4199f43666a36c7086aadb159f75737f71931eeca5b4bf1fe5c11672aff0704498f6e2418cd4cecdac3b554188535aeab5315ad6bac2a858f87197d44e079de7a5fdad62a719a2990be3ee918daddeac364e22f503d7a62f2fbed260c54363434d89cd7005b8fbcbf9ce55ab249ed56215bca28721a2cd6fa94db5d4308efb30ebb702f94e892e26c6f8a970ff9237a6a8f7b90d51f7bd28c70002b4308ca8196a1d75cee8b98858a2eab457ab07291a064d7d6dcec1c5f829bffd988c1a4e432a644299beacf3b44578ab5d95bcfc91dc9ec1935136f24e81309e23d7c90d17e50d9be33b6f0c4f0be1100f8c254c2d1e1e753ff9a0f4004541c94d45361bc2b12d67e6a63e30aa734546dcdf58396d37f662f2a396748d7cc711e56040e3a12e381af6b4c540dfea0d5390ac8a88e1d6601aeec54e7aa3c88bea86bf39d78338b2cfaeebfbe115c851edfe7ffbc1b1273c63643b1922245a358fcd55b3d42b0bc4a1373c570092d47ab8abb5f3581e87ac4ddf1f24ad537e438650b61bd49bac0dd7f58ae0f22f2e3eb15fabc5044a3deae0a972212d8a46fdc2cd7304fd066d82289d5dd819f3274dc7f600a94d756f47bb70f0afab63125d522e68fd079f61ee9cf64c120ab15bc76fe3971f20016d9fda5a1c20f6c9037606f3e56b5450dd03ac82332bed2b452fa5e170ca65dda5181a315e35acaa39160f1f61847da2d2a089d042c27f37eec8e4328e5b23bc101dc4535e78ca56b12313c2c2f59cce71f73bfe96ac40f63b5dcfef5cc834f3d83c605dd2da1d3364af3f9f6bd9637e0006dd35a3a48992896db1d9efbc83239e920a44b1c8a86a80d4f19f591653e293d8d7532bbd98907bd2a0487f14827bc434aa861b7074387c46b39c4506b035b6520fdb425401c9629ea0b008981eb01cca0ba9b4e756240a62dd2df0837586b863b7bd577e317c9536e91c0bd37a0a098696b9aa014dad6c406566a54ba3550d5ad588b646235778742f85598da5bc19a581f6aadcaf77199db832f3d478ca508328df737d85aeb58a0bc95d210b780d3d91ed511a04a1afb1fd8a98733a1b2ff5ebc05556260dea28363c8c0f972a02aebdb7d65bd0d44f7946fad647d98a3080cd6dfdcb5121fa8a5c6f61e2620b06a191469cf92f51861870f4d9f7256be22824fa985d4f33e742b16fe4e97c7c2c2fd674d96b01005c9fe0132a35a20c82a13f2bb036069c9fdc7c69b9dde5e6beb2fcf8075f6d6326a4cb00f3a03bd1132790a54451bb9de748402836584185ea57bf7ce5ff41bdc1b10c48c63bd44c244616637420872f4a7ddf35f102b305853697d40a3de652161beee7fef7d7a4c9845430766d44674c61ea19402a4bafae96fa2500e8c911813e615905afc2c9c8e5966caaa3580fb46c59ed4fc69093f307d4879123a78026ebf4e9ceec85dcb14ddab6b99dd910d4590ba54cc2331c5059cd4d08199bd1e6b1b2953a729cb0a1be94d83e9080bf03255d8106408f0a64c09b66814215c6a59821807ac265b2002d4f835db1d9c975dc37a625f5923e713973345d2a5216b81d54ae05f72730b0d27451b63a81d68cff439ba79bd2bfcb5ff6537902216bf75e118ae987c40e21180aa6bfda654c6d96f4e777c37f6a3d18b14ed3bc81d6726a50b5880105e46e0cdfe9e7eccf06b53eabebecced1bc1e40ab25352b2791ada63896c2a508d4f7c25e72a1ed96229d7cfb18212a8bf8da5756e4e7888bce9316de4229f5706901a5fa84d6c979868d41065b05e7e69f81b19cb90f8e084f8b438f77000afd2adf87c3f2a4f814a8de0c4153fb8f080a4847ccdf4a156ea4e53720c225c1b3e7d3a6bc90a3a72fc97cbe905ac885678ec33cbe803342375d5cf5aecf459a8345ccfb3bb1bc7f5f875fbd405adf3a7e23b8b38acd80c935b9d0738af7b1b2935291de0d6edbf2c89c5498baa3c3843c92c4570ef8375ec365d4e541614604834d8b2a8503b8cfd6de715d297055cb51f858b22bb4d846487aa522534039b302b3ff8755dc5ab4103aeebbd209e866d98768fe9f13c6a8b5fa92d54710c8d0add60d9b75c5bb6f19475331b142615459175eda1a330bd5c6e2315283aa7f4d158dc4585ee81b386a8948e92ac85f39f7f5ccb5bf5553726b172cc9b07987c0c3f02f1a3fa90edb096ee8e8dcdd0aaf3dd3566647e1547746fe6145c186b7a82af9ff6af022fca1d2f72c563ae8a4ada80db31cd6b4753796bb99f5355c4cfbe43c998a208e640a7205c9d1636b8b24d60466bf0ee7d1da09b5b49a9a4bea2ca9f0065e41ce21643895d82a732d37dd154e348b36f1b6cb8ce20c5683abf591248e42d5ab00e7b3e9a114423a03a29a7b970ca6e9e32a7dbf39630d0186c95da852b6b6b451f665b7ce1d0bdc1aa49a46a0d5e2ef12ad80bc8ea63bf1564128f44dc0b9416934eae834705b4be8221049695d9f2062364a1623e0d6815b382d1af87f752ce8655cd7c23622ef2616c39b3ccbeb622636278f86c15eb1129d8a97aa58b2740499ca6a2255eccfeb368d734b864b0b7106b7244610556a19821419ab140e3d4e1a7151d85a5577d438a894b9f60f8bd821fab1f95a1cd0db486c61d60867c3193a77ff2363ef54f957d4dbd6ab43c1f69d6f4fd734d8dafbdca2c328a189876dc1a90aaaa8cc7ab92c2ec2320cde0b5fb4fd7f8d8f51308d698954c2897de9a50559caee6989f9568cd95033e460cf7954d6cabebad9043b34ee25ccfa8a77e0e67452279d9ea5ad165fff78ceaf6597a738ea29277809d01477bbc78a7fe582a022575dd6716a16ed12a4879e0ca8767ceb6b8a087022af25d9ea19cf7ae530a5944f48fbbc4bb10567287c69034ea65e848a5039c7891dd0325e3fdda47a478ab5c52491ef9fcec8f23dc9674e72d0485efa59173c8292120e65697cdf859a63d15528a13618c33cdcedd73ce0d3ec26d9bee1ec5f0281c46ebbf02fd601c9afcf383627420b562013a04e79b0de1816a2b25c5a6a2492ed7c09d502d6351a68e6ee1cc31ee359b6972bd89c46c702881b615e8233cd7536df53d5afbf46d3b7873f8660e98433ff72c5736cda3bed69aa66369b9ce87481d0828109bd926bcb912625f02b529a49ff9da99e7e7b5b4bba95ffcace754d154d48c49532d65ae5c94a796283012c70b632abe795de141f730f44f0169816546524f4d87e883ffa515db5d83c65443573e2c5bc1e78b8b5d3ef64eec341e512e9de7f0fa2aea213ad5fa4fda474b90e374d78b2fd9c9f7352e41ce3a5d254c6b1a46c681c5bc8ed93d5579b6203ef6ae5a004cb92ed45f61a39e724e5d2c947d02e9c3f1259c37a09e7025148dffb2855d0c3575c6afd07d31c1aeb3f4a725910306008a52988d873743619cca9b22dc394f72dbea6c56b5340dec0a48ef14d73105b328a47b32ab9ddad1c51a14c1c490606a07b4bec6a0beebe3fa16891d9e60ceb0b2fe5a54b9ebde9c947a46046e05f22b8b995f6f23ae58d526f87b0c26b878f5a9756a14325f541e9b4650fd218b3b05bf0604b9a2a406bc2071b9c76693dbfde15423284f01b709453a7646e07e0cd9a266fa79486fe3f4199028807acb1b1579d5a1971b99e5c89d8ab7707ff184beaf7c4fcb97e46f9dd3cf574609430da1fa67f2d76ccd93caf9f816fa22294c8036ca0e8ea698e48e52da31ade55c6850e2192a52d372f7a86469039f54680bf94ff3fde1c9b789e3e7fa29e1fdcf77b1e748637fa4618ab208440a752a2f7b37d609244893290393de15c7bc4c33098eceb519fe7194089bd0408a17beca086ac76e3ce49ce78395d261e55c2b1716873421f7ae5f7048319e4e9d9fede59ccc45ef8f82afc5b63101544dc23204d2675948e074572791447bd5a7aed9d16068cb715bc408aea5833d8e4a92c94cdb2eb2c89ecb7a976a1853255925df62bd86f114ad1ecb728e39f294032f3941fecf26a8d47745ae8dbe2a95a7c27fd3a678b264b511fcaaf3e8e5240dbe0a7767368c142c2ecd4907ac6d3ea7fabf1802fd6d209683cba75dd4082c768f8f322d42761aa3a0d735f30cb9ccda3fd559965090c266a01f3994d76a5d34cd372da60b73b79991218ba1150a9d314058ee2d48f692e442e02c1be74ef803b3f75e0b24a2d31eaf355643ecfc761ec480fa7053e16ebdb370f28d279d0ad8d583dfa0494b28303947a41b84a45b7745893f41ad561e42db2fdc203f89d5c1a73b177746d2dd03e6480be00e8c510bb9f9c5d3f13c63badccd105199355c931171daf3bd498748a6d8ffa8f72acbed9029d44d26480737b6c07ac181fb3897e0d465be488a5714859cc187b50ef95f429e9e944566d063de7c6c01868d790f9e22509f508209a292badc033177079774557972ce9c3b6607cd065b50f0723a12c3d27a221ffe5b0313d3137ba61cc42529628a235e76b57ecdac046a1d87228b9f1da17283fff910f8de7c0797eb5d6354db401b1e949f9ff972e550e34dd788111af6c7d8772a9d77aa0f2bbe7bd3c924e63b96e93f35cbec3c340942e0d980b9a71d3f39b64a997d66a2f76777bc6ca69cd1d446d376d0c75bf85861ad5b751523a0ab28f6bc77dc1495a207c969eeef208bf5ea4aab5e906373e3c649a2fdb403d0fb89748cc1b88d70a75dd57460003f23de975c1e8b9277e96ab6f485dd0b5923d20d999fca80b95199a911f9ebc3fec1496d8708d532ce80b91f885595d355e5688ea60f3307afa442293b2acc181b6187be5d110a74938e427d177fd3e66082023b1f869636eb3d369cabd0738edd2709c3319b4468bdd63a058a7c2fae30958b1cf47fc787656fb06f8dc2b32abf50103b130b7d7a2af54610d349482decbb6d1639ec0fc5dce0c7d86dc3ea1670c2ad0b0469855b8b05ad42a0992cb87b21546f5ac2c941d6bb8e9d4dd3fe1341381c92ad50b396e137163e23d59d244c87094431801149c473e073b47e9997e6cab49eaabc8be70a7a466a3f415d7d6d06cde9079758cb14d28317db6c23bff8244df19c18e03bca96dec9ef6af401784412cf1e73247209ff0eb173a29224388f3f27dd0baf74e5a394a172631777f8ad47b694b3822099b66e0b519895dcc82229de25c0c42652335d639ca2c6071408a51244fb04c82da98dd4518136666808ac844eff1e917ba29f575b6c4a78a43ef4184b4fb782961c17e7c7aa22dd858860fe383720548cdb01e2adc8ed87b6f90649367c10d2dbe57437c576ff20526149a7f4a81db70b959d475f56263c2f89271a9f75b515d019b5d2311e0eda59f191ef7c149cdefb608bd07f0c9fb23b649922a34a57302878a8b98026bc65d154cc3d4cbcddad5135851f845fc6ceeb59604b3569f0b7b1ce5b7cf441f7be15d18eda5c5bd39b6a04e390e985cf8f6c8ce876c42d6394bed3ee1feb4f39f5b53f1f6da85894ebca8a8b8830b6cd7aedc807dde7a3a7f81d5d25a6b15f4e36671e478a4237e6f434f6cbc03c1dd154904ce0be22cd1a2d8fc949175cf3da9a9244f463567e2e4120d33572483f9c4b9c22aeaa4d92cd832042880cd1044860f4ae2f4aa298ff5a69aa0f9246f4ae239c44c6395a0238d1da2055ed8cccaa29f61c2891f72c2d87ecc8f2365a86de89421ee257d1343745b83445de7c6dd94e76dde13ecca2333b41e87316852b3853a61c7bd0ef56c8766b5dfb33e839b1054cebbea74e739099a466969188939a6b76e2bb79c0c3664a70c511f852e8f88385a1b4553cbdc000b738cfac33084c42e97a2b7cd0efa63ee6783ffd27aa83231d1c5a44e18c8ece7dac8889eef8669f04beb9240f9977193a85630474bf513c4d23f9825261dbcb51e6e899abaace97d5209e857dcfdc296ab5a1739bda5c0d82feae0ab21b2cedebd28e49a84bf47027caa6753f63370a6586a80527e18e7e817adfbe06cfa4dadae9919a57b1a40e4fb07cfb43388d542b1d5f28a31318b33790689142a58735b6aaf92b02bc0c090890f830865d81284b061673cb2f64b7f28b876a6f7f9d8333aad5e69ff9da1e075d1f7e228f01feeef91f1ab25bab3da6340646ef1ba22ab565140135918f23d4f89be26dd89b7b698ec16cf45529e6b27c8478ecf6522be50429af9644c81f841d9a55539ab89354fe7a12f89d5b4b96274c3f70d85def66040accd40d840337821d35983727b53e16e1c2c1ab9c277d03f3a5e70746972a843ffdcb09298351b279312b11faf1b4db496f363fb0cd13da352e8c3465548fe0690e7796b6febe7fde86123eafa786a76a0fff0ecd17e524483178834b5b728a650eb0baaf5d76361f697d08aeae2023e6a1e0fdfc849ce037bc8bae729288148c0c860df4eea6df1565dbd15b0e4819afd34105ea42a2d4e3d49cd0cc00c43ecfc3e39619808e0b10b5d22bfb6623ef538aa9c2426370c65a6c5b1fee0c444a4f64fc4b07af0e500a5e1677e20e7a46aaaedba7a7aeb2965d89beec680e09c83a286aff9e7b1f84125d478bbf98249ee80b503115cb31270051487de1d82f3d23d0de5906af103ec9da0e191833fae9e4bf13b61cba37c50619d6cfe4c76aa5584c134cd5cf81d255dad18f0dbe1394105673288c9a2f82e246cf51ea6af40cfcc814d9d28cc8120594129029b55e5e62625addfdc8e40607e20928632b4e69dc419adfef33cde7ad362584f23ebfb931c42f409b114753bac16a3822e1919560c6b46eea11cf2af73c7f6a60500af53a89cff8e40e7425c9bb4e2dd55e58e6e24b7d412db29435551aae2658e2bdffdab7460948dcfa8ba2e3798be1422163a4056a830ab6fc596d6b76cc57f60f9ea8626c047a22030612902800c8cbe52eaa6227f6b7ab1e556edd5220d7be83663df37748a68059c672ac9a5b8da084e3e8eb8f1c517c9cc3da87342e1245a1b13174e40863170af5c303b919359399bfa726c8e0696ec9031828a0b4068d79bcbda531a968e57054c062a4634c4ba319eb9b4bd6fa7149fc88915a04fd0c696fec34408897e65b0ba17d3a469e2faa3c15a8318e3524d79bb252098953c57cc65ae6df3885c05189f294f5ed7eb6162471076bbb81792034eb59b1cbb82b0d4b52944538d4b59bcb1b9c659db67d2405a582ea5d91b370b50183f85bad11b9b099ec0974dd6a4dfcf683db95439bb1ca58fba92aa65146ec95f7aae019fe7dc0c7b3c7824e6c26f0ce8fce448afd1ffa1b7212db1a26778ad93ab4186c53a4bd4eecff76ede09ea616bd2f04337b0303b5dcabc5034ad66be39d817180149b9a39f85d8093b97f2064847d410d398a228530733ca4fe46b03a27838b534d75ae3bff283a174bfa8255f3ea75b69c749481372f04b486a1d6a15c9d70c6c49bdd37302d489320b95fe434350c4033e0b83a0525429a563c77e1bc51a3e16045e7215ec87cbdfc2e52fc7fcc8fb6341c60e92c81bdf2c548ee4d0888e7944bc62c44bed62820cf1ecce673d073aaca954f0286a4780c6f99b3552242c538640d8372b6c52f3b65c2644c615bee6d314a23180603c9c05f51bdc5c285e13b49d7a3ca1f9bcc72fec37ca416a8598fd68042e928eb24822ef51c4c7314aa320d448849b84635bd49c881cb8e3544ea458e5a1a73a49204ff1aa5a0d19dc5531565d286e7031b2b8081f6fa73a43c293e78403d0c0dc1abcf38fd42968244fa4c6526a8a21525257ca7f1183b476cf5b1398ec0d9f94d9beba23adbd4c0c5b324e1a246edf7727b6920184a089ec0d25f607ad8c9954b36a67f7754e77ed2e3c25711a820d9db63c3a65054fae92c8fbf6aede462c2bf31cf6c8aceb2d8ad8364caa40c478642c5a79a4f47426360b84474b57b88b26a6ca96dc663e0001275febd07190a5d622ac9e3e1adca2f5bed9cb47095e5e7c3f9ddfaec7a53349acc41ee0dc5d64a7002a53f63f4c30c3449587a7f322623fd66a6cab5e260de173a64cf52848cd484f47a36b6a15ec69d0b3bcdc030fa327a9a5c436579a3ad15076f3d32781f19e2d27d303b4a89cb23eb64758f639fb60e3b573b66d92ea8ee693a9eafa378896da0587882bc079a31e87212af77b8b77de481aa9ac1a5c6a6d582703ca136c52446cdbc22a52d5b1e8fb3bc1a70708b85cd2efd1f1b8be2c00db697293d42cabe8ce47f4fa481555f6ff1acbe7663198020aea19560a077c3794503ce9d8990c43037e0949b09788ae01974e5542c54ef30e6fdf94137fd9a4949a31fbf8c3d2155b43c083df720bcf75cf76e9c4965bd76eebf69b30537bc2ffd00fc0ce9496c3d5d099bb1ae2a6a5e1cbbe311e6cc3639b5faa8784d6bd1cc8c016f4d031ce06f2b06c248ff0558a6892f79769d1c17293b433509c139fac5d9df7ab7ab3dc4cb2bfbba8e882c1196ff6ea60be3b4397fff63b246f54421ea2bda1664ca5a1a60f4f72a05eb74d9bf3b2902fb4847d9c26f5f8d8535d3c70b4e18b7069dd3aec75b9f1257318990cbbfcc678e2368b6f8f3c7903d1a79d5fe57170f4141c05ed3b4ead19962aa170d46cc41e9279cdf9624a9ea62331074dd67574aa139c178fa00af01f3beeb96728436f846cdb1122098e9a584e9745e2c44587b4461bd809a0585d95e05ad627a10db4e3e7cd2d43fa686f7158a7ae608dbfb33966b7104dc6b75562c5ce5565d9507eae0c57e5dea8a4809dfd0265087981f6ade34ff9c8f495fc2b0f5e2ef440741086c68dd124a40f4d1c3afb2bc1fcf8ad9b038a0cb5d6b3b13360548f480d1230971d7e7930cb8decf7f27c67c5dde518e46b90afc63a086c554931abe4fc2e7d85e29e36a6c2a1f0e7a08e3fb1461fd86a9869bb2a9a6c35b3b6813fce117437ea9fe27a09a798ec912f422fe2530e65c02380084c36a5c7e53b312902d86218c93da2c1eaf5248cf4a31573bb2305a475838f68bd1cb87a39cbd69b8d3dc306d63a802bd67dec4f59dd9cc588b9e7b510e1d7391c131c1af30dd9cea0cf6fecf73bc9fe94ddf463f054a49acf226de5c77b8f140136e6e2df4b3247b82e3ee0326a658585cb01d5fb38da71315b2c22485488908e67d0e56bd927dbd3edd8b29d8fabdadfd35c0242b9d00e47ec744b1a48e961be7218dae242130e17351f0232df5405216bf9e3fb2a8599146c430bcd8a46a7f8625bd939a228b83ef63828453e1899ff4748dcbbea8f722d1ba6be545a56dae0888a6becbaf9c1ad0f151bb5a5a3b8b7336076000c491b4e22204a6d2d175a5627a971c0da940cc11c0164e5aa2be9991e21aa9343caeddc15d9fd43f752d84623cb57bf7be47d3da4e58424a9dd984b91c84fd865d38d67131644797e2f67bb7017f4f9646733fb7078a75cd94e3650e185ab39e3bfa93076cbc1cba46bf82b50fc61df58375854cf65b5d730e4de3d02b8fbe871f61441c6919197c4f897e633986ad9a13949eff3e32a82dd53e7db44d5c826c7e9effb2a18c0fa15213d79a5495b34c2a31735b07155e5e6b1bd09b958289d6d59728681a881dad6e589a16b984d7b42d07aa1b17d555d72583484fb10ebd432cca610d09047c246751438c701b13205bcdce272cc718ebdeac9f11844911554e8548c8414c8e9ef23edba57a939c7ed718d7f0505bb3bb6413cf44893b17666987bf5725a68f9bd09c2af6e4333193f07489db2fd7c55d518c475cbb7e17d6d389bf566a417fd32c031159ec4bcbda0a9f25acbbd37e09b75f12055524eeda78e3fb8a07b2ecce64da3917690ff4e8aa213650ca36a25cfb433b945a981f0637c54d60e9a41827f718cc5bea49183ce46e2155c5d067d1d18679383c336d65db0b40317fc56e23cbe6ce606d7245f985f84fa65549acef56835904c306bae3ebdbf224e07533ee59a4cb823c21a9186ce6e58062f0656e7472ca866ecb82d51b6f9aba3d5b12c2217eaeeb7b932ee05c36adac6401a234c1c05b20a463bbf56759bff08a2efdae32ac535132354363cdc52d284f54e5a9d5ae34c97c0b2ff5ed949e4c11ef4c5b1145c0afaac06ae90c295394f67d1490ca9a9828cb631c28fbcffc98f33dfb35fe802681ce2bc193d8cbb20e04c8acb60f3c23911d62377d5819f3d18c02edf65171e9f2e48021e9f731b8073e4b3807914aaad59943b8871e66b359befa30f748ce39442567516c5bf107cb15ad9033b9337bdc1ca6d6c1099ede20aa574ee9173b06659f4c2a8011f3fa895596a925e2fd88bc6f2bb0784cc4e5520585875b4e469f7af08f6dccd6392db86038066cee78c77c7c307d878510cf31eae07394a771bb9888c692c53714e9b8f24f2579c009250922b02ec702c43228ad800d9d213ecd45234cc55188f41328f676b62517711aa14816ddd2edaf96841bbb040d57c0a8ac1780634da8c4703e82f2a37f4f4fd5161d68c39f1fd99852ed17a3a29342b15073c1b171f848cb1abb65c06b6b14334a54d70fe3812b4709eaec8b25c0d287d3afc3f8e32eaef30ebaf4a253576e0073afa94d2f84924e266a7ec0795181e63d6881583a967ffaf1e6b944cbaabe3c3353e319e3338b65aaec6fd15518a3248432c447d4d3e415f4e0a83f65820399794faa71205659084ca17371e94c9e65a293b62e326b67d091d10dfc65adbc2ab1a97b06c4a4fd867dd444272fd58dfcf0e24ea00917e730bb42fe42cb4c781272dca2068f11e24297410e7cd8afec5ac9b1142e1f02e08dd89fcee4b5ab503313898339184c3a8fca946dc561844607518b5d623782459060f280a822b09fe00200751444924311254f8b42f4bca896bbc715deda063beb88812220235b6f0b02ca4b2871cc617104619d54abf6a5f5d4312418896bea263ac7fc2a4cec7ac9e9a88f02afe3eade9d7a8e377e410e153143c7b4cb3e1af39f480696e305fa063ae09b343723c0a2bfc7bf0c5d87902e9b6794cc61da478edcdb1af79d576ceac6f4bc2db35c08a70c8b377a453ef945aa633082a4fe8ae26aeeec6d57833752083e587b3c2bbe2072b8d4dfc60973ee8b05c2d7a269bd0dc7fd6f8ca04006330d828af17a863a08e52cbbef689705813adc2bf9f8b01d573983c633733f98888f3cd5e9899a05ed9de08bceeb6fd40b9f891601e891562e06ff042538e6d55eb8ba4a17bd41e68f7af6c4aa9557ae4ab4f6ee8216fa11e41c23ea9137d88c85cc1558ff5f7e71221533a5f3c752ab63fe352500ef7d3fe54371ae0f391685bcf5b300068f2737a0605d65b31f904ceb80304ad7c1e5a032db005b3ef1b210b3b9b89f968e3ab3ed0b7193e877e84cc93cd3d21755c01b8dae0f211eceef78d8275180a4d3bea1cd460256891db5aa0e273c7050ca3282fcac17389cc50d7ee2820710dbd5355fd5c11616616d5d810341efe4e3ca18f87a0981e5741b934eaef40e02185e4ece0a3a090a8f7d11ca7c9c86b487810b9683059cfa754899f7e69ca2c32686424765a9706d75826a0c6f8b93108412fb466af566b99ef28c98d2604d3d486b7347e28d9b5fcc2857fa9f9f870aa3317d8008ba7a851e2eb5c61c2267ff74ddf7beb54cd58e7c4ceef40c3f88e15f53959f8e8bd2e23b3e13b7cd1ec7f73d80268c31a738cca568edf501c69849ac72f55cc80c1836aacc4f2b59672aa8a931bc13f64c90862445206e83ef98fbf51d26fe275cd5e23981f730041d45e1a60fc6ffe9d3d2dbe99f2b99eab53be171e9ee3f56f36e7c8f6c310965d467caec308ebcb3b8ed9df44624eef0b7e2c9ef293d67a844ba91cd40cf2fe1c74e475379f3dc2fe7fa3989d80a9360e57344aa6a03106d4b4965743fe874c26d3ad22ad9b195bc6cb3d9cb190b31e7af3d6aabd40c787875381d26bb69051fae64046747d90f034a8174c45e921fa5dfad829de2c5bd51d159dd4515562ed25d95114b2b34aada780da4970c1fd042a165d0135b3682991d9eac19f1c93cb98e33f4197f6a474c0a22bdcd5a0e0621502d8138ad36fce9ac5f59fcc72f739832f4afab4db3712bae4d0d768d557167db8b0fba26805e810e16c837836e46b9dd0a3d05cfa32729cd04d3915923ad24084509c22d3d47a437227e77df69d9054f9fefa53ec8e4745c9c26ee12fd9744f834a23d6eeb19449640563728eb9c156663ef358cd6f19c5994247960653a21eee805f0ae89782e37aec4ab6d948932b964541809bfe93c54dbbc5fd0216ed04ed1d1411b7c135675b028f8387c5010601d7ef3663a844a7843240a07252b550705033f134c3c2c334a5256e4cc83604b7d20910da362542868f133949aea5233211c93fad04d7bae8139ba172f411991b6a4c9e0ac72c30db0c76c44065c45c61056591cb405f7078c95a60493e068989cae88c94c930e9dd9dda24e2e64951ffe92243be2a471399f1b5325bd8056ce7ae00fb15c3ec0abc0bfea82aa2a0ea84c5f402085a4d5e02441ed02911172c9e81fe33c786275cb601967a2a09ec0f1ff5a7c3da7cce26d18a6134ff875038b1f7313727e793a4db5faab0c6dd0ef952d3b6ffd9888d66cce9954716cca3883afda1680dcef5bb43d1bc5aae68ef170e08ca92af7e335ba2c8c9c22ff8b3f095251728e77e28be811fbe6f8e7fcd1b149a8eeed0e7d25ec13bea18adfc5fccf588a2d9278231fb91c62e81bd66fe12b5a4de79ae7cbb609a58bce36ad79a04ecd7ccb765d60b0109db02ccff9fb559dac611c289880688bf9aa201028a95afc8f047b29952d4f1d56e21b5ec935360f02d516af2fa24243fa9e0d6764c195537d719605dd53d15d92e1ff1783526c09383660640df801c36a19314a1a20cf116dc8046dc8ac679536ff45528b71bebe71fb8a4b1bcbfcf6f8f3b32393cc2fbb9dc44474326fbc11a758d60e1cb5e6729082334ed3040805e2c011d08558d211b57f351c546caf7743dbc1f0f6d7cdde8db6ce6af21038ddd5d5488b8033dc78a5c686275190c6434c6f9eddcb97b8efc2854052f780fd3e2d52808829a306fd1f6231b2d513ac7d6bc7a385e3ea048ddba412f13f4f0a9cdf1632c9a8f76271fbf8628c78ccb2ce013fec24415e577a2576956e20533620b3ee9381bae61c175a6febea9235ab732c7248611293cc035d5e8ccb0e5f7dd5c89e3e43913d64b382e0d1d8ab9f4b2bcc7a1d5dbd1b0cb64fc040de6194a702aeb1c89c42aa227331d5581cfec8ef6b74791d93e3de36f5ceb3238a6ea60798a661dd8006720f61e36400c37ed3192f5c5960c2a1931552bf0703d9c6c1fcc90d208eb6552cb9f8cbbe6ce4a9b2ef5d3b4e2a0aa4ffe66254fe7844ae9ca1856002c97f34da686c953f3a3e9a9a33ec8d67d4724c347bf192441979dfdeebf72e0b7ba1960bc65247ff7bcd56aa3489b21b5aa912b2b0e28597812232750bfaff3c02cc6ba3450675f8006ad74876dc8b8c31ea7ccee4dc4725609e7e9bc67a26d4e1faf77adaa3ef73f0330225161328bca55a016ea5eb95c37e7a72fb2aae667ad4762fa77328a8c52c348fe7269a2a19ec2925826ef7f026ac7ad3063d355f34eabc3434e7321cda65e473e3de9e6d92223d6c880d3d2a517fc3c170fa7cb0fa52b61682dd8e13572a9ad9f9faf3a2b392723fa4466dcbf6c7920ba747d2c546af819a1301fd26b4f605bd52482e24a409a0bf8b512aaacd977c0bbd222670f964029aee9d522aa001dce5fbf9f818853ef7526b5a573b0b9edfc989ce3695b35c6c346187441f74581f5e37fb59a10faef8f4d98ade9d15341a0a65a1fae534f1fd1fddf78396371561fa3a119462b7cca4c9ae246d371f99e87a618c3a94b5212669ea8a0ccd94db792d4ef3a29d55c21a837517917a55ca9e9db187e03cfb57c58b3e1d28e2837ffdf03a28d772b747c294afa8e132f6d16a9afd1dbc312cafe83cfe33bdd6c97568b39e29701d01eb715ba4cf094f5bd7cf158c9ab949b28dc93d256a1b0d23c4a34e000d43ddd6b428d559460a03bae0ab8875e1331c39e8e86985f536c4ac0e394980df737fc0470d18790fd3e11c5abcecdd343c39f43cc4cb38bbb300090fdd5b1953ba1c002f5e5fcfcf7aaa82eecd13da5828bd8acba1b98ec8b33d313fe1e5b79dcb49781f112b31e97bebe949e5f94b2c6f003c143ca411bdadca9ad518d1e129bb880ed6a88e9c7270f331fc1c387b0db4004189624d5cc0ab76b9b3f5f5ba08e8e4d5a0a647bd84fae27418272cf3ee40b1954c33e4bd0726233a0f1a03ab5262a0a9b9193192daaa7993642c92ee66d144a5989b41e5ff0db654d9236cc7a13eb2583c99de28cb20be42e1d8fd32ec4472ffcaba12e3508968397102fa7d2fa6d49d547fce12215b1cc95e7cffc5f7bc5187f23a42642e95642b5af8cd8a4728d60bf949be09de75e0cbe6ad8cedbaa2ed3b865796ca937f1fe7b15c1ea34cc2aa33f55f16617ddd77ea31e78bee7e6637e71af2819cc06c2294e441aac424da8e3b941b5c75ebb00c5af1dd793db2f600d673bf0a63b967857e1dee3ef51c6939c14cb9a2a109ec2bc2f0121c3f12b372c005564c39c578b96b0ea7c94dbaac102699108cd5afa66fd4d13485f013834c511f9e221c5a89fa8ac2d3532e3d27f7934aac9a2e7bf9f72465f39ce6cd3de8ff082e5bca5dc3d6f5e4e649b6c0b55b326d99c309fb7bc60cb0a6365a2e9f170ae81e265917ad762e6d50b0a4af8ff1263df84e89c97e43ede09b671c784631c3d1cd8d3927cee8d974378b1e4111ad98da3c57b3b03038eef3409702b9f72225d4128ccda31f1221219f453ded8c1fed81fb5e8adedad150e50cfd9f21b5296d586abbf0af8b9abfd0aafed85d54c41edc7f75b357803a6d04c80938af2011f9997bb86815482e9eaae18c693380ad18109b9a02844fb6929dee59f41b3f043d9fc50c17bb61a9cc3a29765ba723ccd677966599619b0b62b3f6e1e165e806a007146b48efb567c800afa94c4b5dd180144a5bfa5cb2a1b82d968539bc072d31da93974594217ba7cd26ca757171820a840b6710ee19717dd7d2a51747fb3c9d3aa5ed8d3731ba9331697873daf2771eef7d26f8e70cd593f21591b3685b4fe12e8d8f480b072329f2267b94878d68ab4a7ba354950e3fd152c5484456af22ef3a6d70f6a9c5beb1bf1d373a37e9f466b3eaeb9429e22ee2f3f8e18d3f4a2657b92b899f9e594923cfbb1cddec1c6f288a91d31a4e32ad0fa6e4cd006a3b2d33847203673a20a038a2e14f8ef6721acea3b9b46d95ed6373a8fefcf453c838059042f52f6592f70b1f9d91a8d4bdc0611862f41c09660c443424bae4e609f70a7f160d0d901914db511d2db7fef7bc93839e38697b86752a949a330411932708ba822a743a495e760e43a1117f7cb3249f542784245ac27645f9ab8a77ea675099c391906d8030c2d384f141ecada461fdd6dc3290a100285f6692cf4ee96355de92ca00f43c821bc325a72ec59d785f3d4930be6dfcae3c64250922bdee611976d4aaa4b6cf203fa9ac4f5f42945d1b6235cd389f44c1ba41aaf4f70a2c5d0dcaeffc34c5067c036d92f33a44ba4647ee5ae827bbe373bc06fd96c67014d929774b3598885b36fb5fd8614189dbe399944f890ea657467b63dee518d1e072f05566a198afdd4dc53299218f7398a2e1866b5107008f3112e72fb655815baa544f72bee4dc67fada74f4869055265d06eb399de131149cdabba69d23d4d9487307f00ca0e81124a9e2cf8853f046f66591576d7ed273fdfa3806602e0671e0f03ed81ff025df2f435bd0881b069317e8934c1b43c826a885f0e7c6bbf3ecf54292d10a4e047b393cc052e3674348bb2a250ccfdb5a866a4c98df832972d0bbe28af3e10494978275b43010fc42a9d5ee18da15cc9995deb47cc1b7fd0dc4875ba72793856cf5407e5789e90f3b1760a2ff0039ffabf33e56acc32c208b09fd97e0d4194825548db7c10034a353c651386a2466643f8e191f650367cf64448f66995ab31085ce71a0aad3e4e2a9a2adcc3bffc347f475d9ce4bde7844fe4829a01cf83f6a02d5e9346525c382f301e3ea8fc59fab37045927d259977b19958648bd8076254ebf916d53229f05af7bc5bcce64375c0ea3a6cf51fcaf80906972090e69f737818dd97598659883b878e4c055eb705b1d2599be10856cc1ac9692dd2bd5b3c099088ee8b14b5b34dcd0b1a4e537b1cb641a0c1902249ad55299a6a549b0ebdb0181f6801b84b3231bc7657f5ad33a824aee29a3f7f0f8985b22c7dbbc988045db976534e748853cec90b48877a1a9472b913ee900efacfb02cbbf79a648122300b59f7f46f2a499d8f02788841d8933b078bda9556bb4949a0f887a9d2afc526358bf4b47a778ea2e722117967c45eb0b9f9e7a987c9f93b211755cef260e75479385826ff7450d166ef90b24f0121ca4b2cf4767aa75e787105c28446246ea0aa2ab4ca4f92a767d0a58a1dbb05e2cf5e8147ce4c7ed561cf4d89d28e3e5a13e349af951724e48b903dd4e445b629621d35b730c3fbf1b02dc0681206be4bb981095affc85139cd18dea99b8d1f9d3e3fd5c4283d0bdae68cc1e1706c7bd0f894c23ffa6ed8c071a60049b81a05889e42239d9963165a18eb49b1097d73951e7253540ae2132bd45bddaca4feec26f1c1ef57ef5516a470d7c98c2f819ff1276fd3cf0b1ce28a6ad0d3ee26b0673e0008961c6d28976d68bf3e1821d9a4e929b19a16b02a602794bb2b0799304c69950a4852f4128eb7321733d392be8575a383460c1c0da2b18a0e39d3d0d4ecc8ab330d5b86a1f3380fb8077e64c303c3d80e3370c78d769e9812206c5542878f58ed0c5d13edf90242cb43d9d0d633e9b63d5e7ad526c2154c5c7206eba9a6f8d05703f063423cc0f397938b303369780cc4666bbb909f866a124b6619bbaf94377481874f12fb774396ca5a3bcf13c7777769239b8047dad3f5e5025be912eb1514951b196a29b4c981c067127f9c7a2cce363e22400158c538ea060dce9cf0b54666b914f75cdf548f87f39600e08a6dadff523fb4796d9dec518cce50441ee2380e08744a460d5d9d2e5da971ca2efcfe73205a765b2fb1aa5b027aa81c707f8f75055ed6a3f1cc69c38ad92e6c4dba47cd8f0a7cbc96cb5f638cb5a52819cc4f7db8f711e9048ee9d46bd07c56002cac0c905038ddcda129ce4dcedfe17a93efc36a508978974c309bc8a33532d04de0fde119620f7dafa8853e9c323d74e79841a349142d28c0691cd1aa542690b36e0f0c2d493e422eb2153e999904762e8020e64e7aefc1ebef7d8f371189dade036473878d57f44e3041bc27cc3000d276afd54bd7ed22d25d7d79a9c1ec19daa7911f2fee5ff14cb3df82b83f4d26408ff3f26ef1dd17fe3d6af93176e7261a2ba32ad1fea45549dc9f17d73f78be6fef0caf9045ed9720857b3fbc007b2a94c39051673685691b01909f6569abcc5c30da6e33dd19d0d9e4b892129f8d4a177daaa4f31ac5a3301f916bfedb8367937f6083ebabac9c93116d199e95ee73097c71e21c8c33d8c903495056842f2f440bdc6e97dc24dc923922017849880e843df940d185aadbe658d9a4cf80c0f367aba01d3731373021202db2c58cc894971f83955865ccaae611cc3d5374875471f443d86742e87430e81465558b1cd265ed46abcdea20be7ab1c94ef1d5d2f9e04153f97cc47209f23f84197c4469f6e9c7f60f6546e0402d2de63716dbb767fbf05ed446e7cddf5e89054b82f2a947e8c71b0a125f9d4266c37e8115a49977fc069e6538fe62b20d7c943f22eccce797cec03f79b4c5a1046f7e9dc0240c7e1997e7332d12cec6dfafdf8659f90a201028dc432df7d2dbb234db03352fd50ec22a56efbd9ae74052905d14ad8ff694e0eae18664ccfea7dedcf6edeb68cd834a55337aba3e7e886cb8b3eff59dca4f75e471ad1b8459f2350b0b339f4195d4f0b65cb70da22336ee38c9c282d5bf86a2ca0a67f6a7aee929ad2b24b0d414f7062028c9b603ac4eb5ecca3861a11849a9eec382fc6a202d6c93383938640dac5fe0f22fcbc22d43d5a522ad607f133c89f687d48e113a2aa8bac78fa71c501e529a0a4392ffaa18d39448d452e81d9230bcf69df5a18da55d69c626b41d7bbbd0ee0a0245cc16a13e0600b58a50e9494df99dc1ad48aacc3224b3e9fb0204765abc5ab2dc2658e76a543966eacaa7b46c7851e37747e373a34694322cf05d0594498077366971c9463f5043e3cf5e142a908a0a3f9ba649648df95fec92e247efcda38efc03d5f954ce240cd377f756f8fafdc9053c734c85a206c25a98d34c451ce30d58fa23b28e5523d403998dcb2861ade26766ca5111f405022f1e69c939a56c950404fccbd4625571924c56e1c9699b7be575531e58011d2056729642974cb1cca826f744ae1c554d4f066d9fffa2c2653e5659a006a39cbbe87eef24cb55750e7251bbbdf26c3d505140fc93fd53ae6b992965c1e271189dfe29f338dd802b34a6523ab92f134e268faec27dfcc0564f4154d8cfbbb9ccef8ad1e4517226d948d2f8c7809d3982641251cd6724015d320f4edac2750f9f5c57da9e6144dbd89cd22a56bd9006ef51e714504cbb3121ef3ff071c4cdc71592528d8f2af0f183d2f5b88a059f5947a6af837a4f23bb7b62a4146c68820b54b47d2413574273cb1a7f635998759f9ba94205bba7baade8f69031c0b3e4ae72593374a42309f5beca4eecdbf3eb57ec3dd45efb1713de721784424b32f7a56fcecde8a1922790a7c1316fec4f89c8196241082a058e7e82b1f5af4a08b4f63e99827c6e22c2748a63a5c3b60bd41b08095eb84f869c6dd499d64fd13e52f01ad125016d0ac5ff3f2dc8144c1812e8086ac08d335997ca3d10a28b4bfd1a57da284f487b385a080324fe93be4454ac66a73cfdb3398fc9e6b18ebb5238587cbcaa4532c37d6931f580d66bc32323436392369de5d228eb3c192ded6da139ab55e7e46839afd93ef4431766d18f770173a16ca396806945d2ce797d1e31cc7e410208ab8dc640a06b3c4b8e821cee44de7183dcc14d6cce47e6195448137985cac9700c7b68adf039b3685207a90cf06d78e4430cc77b6b2d56f1170cc1c9182acc456217e6fe9bbea71c8afcf64a78d02611e7fd7f38d60a1ada3d80366723a99dceb2af8ca88fbfb29ecfbea93ab68c0506d5d77a3a2303b594e74abab0d56d007f9faab1ab0be72726b9449c4db60468c4afe21f599c8c17766058491bdec95c07db445271b67716fd208debe931abf1d1c730cfc9d45e7eef53670cc4f2ce2463f59d19d82515b38268519f6adb10bdc8071b551d602d2e5a07fffe070f24421f4b6cf1bc3167864f82873a49a938a442b6eed84b2ed3bc818fcfbdf51a58b355e869f3af326ed39fa97ffb16dbb96c2de03d99af672c35d935aeea988b0bbceefd5c11dc62a06bca7a02c0bd1ae2b6761a50491cfc693caabed1605ded999f5bd71afc211c5c72bfb0745849e04b60bbaba0b9b904a9690059a27904b147e524fa4a795113c0a1af9c4430e7776626cb8d057053cca22d3019b9988b8d23131c809748fae87a791d57b90fd41501d35201e55654faba43ac633e34ed055f7877129f8eb4ee200321f755d8267ede59bbf9f43b650881a1d95ce3ae2a789a7fcddfeefa93674a759270bb6fd42176a29d0e567b05ce0f84d7efdb6a724a2160ed6624bd4b63c819d8d0082016847a5e9cc1d7ce9198c57ffe61abfcbca95833600145fa3e353b5736f52350ac3dd1fd29626bd980ddb825cd5b9cf83035dd5841f83dac2e058b8d534b71eacef1ea01fecec2a2ed2ba7c531620a36252153b0757294885ec3e2df47ec2b876e059a7db9667353cd76c6af76c080290c76a01a3a7a7e184c4c8432c796bc60c719692e203e760fe85f9d87fac936502f036f1e52496ccc47679d1be8b6bab0c4d6198174890cb9286a623a20f2163aa7d63c8bb19766f512b1276685899080f5aab81d2348073c3b37f8b05919cea8f25f1ad54f58e716760f656d0773ab9e5b5bcff763835441ae2ed70f0e6c7ad021aaf0e107b574331a18541adceb5b828549533b97c9465b5167c8ea208967d7561db8c3ca0af9bda79509a2b2c3da988a3b0f6b7ca54c9a48346e691140b3f143bf87c7caf9261b739effe723d30aa0076a3e2cdf0ce6168ee8efe76aa5902ecd91843d6648920989e06af4a44ef6e6b96eb650d1b21a4f4f21a8fb28d6e4a7b56551401298032f98f02c5fad0e4e8d4f94a0684069ec542b255d5d776fb3bc744a0d1c018543ebacf3afc3186ee7855f4c01130db9fd341c597647a452aec1333b908f9aed80be199da9fbd8a8f2129bd294e6cd2fc3f9543cf1f90c2cef9fc9ac035019cea8379498d2229dd07f62bfd7af32c78ec4dc2fd217848378f17d25b61f25e6ceb18e106f976770719ae1ce5cf2f2c2c448ed0ff83b6a5b64d3131735fcf6a4c795cd0282e09110392bd8d7119b28c06bf4a719fd2f1bd063575a72291497b7196c21400d5b908b094c73dc9efa830131afd7e17e80ab43f122929aecdf29939610eff34a12cbe7babc16d54eca6da1eac4206349636e40925bbb9f4e2d1ed61493b997ceae1569ea17e06cddd54582d0ffae22e53c311e4c673f52dd843ac0091b00a237e342f4bddbc697876f6b44ad0e2c375a68964d65f0976d6d6a109f9f9d1195f1370bca061d9d3fa7d079bd617c88ad369466b835d271ab5c0108626fc30b286783382f8f9f3aa1b16179caf2eb5d11aad187a4c2c769a22428ac35a03ba12a843ec5c45af89c23f3a20d39906573c1ff9d3cbc01d5a5f2cd691b1b2a8fc06aa3c2ced59ed27072a234dec6205e8fc5120de67d0adb1c46ee60069024c9172a0466ad5754331a86f1be75b8ed5b06d07bcf9898e67978921bd76ccaec42d07047bba0147f2d8938a84c22add3d248afd995d1484ae55acf5e3ae636cac55eb261e9a2faa82260c555577095cf6a1f7de43916ecff5c788f5b066c13661cddc969d2e89dd4f5ad5241e804846d1b4dac4d6efd3ae3c82b3ec6e5f299ad2a603c5a17d118c331caefccf2576fc02258ddd16260e06f4fb3b4c8404a1723546da6a9340039c1491db2ffd94bec8e3e47e826d08dc578f5409a6ae07f7cd3162e475d5a15465e30e990a291c09cb2cbfa652d686a767e8762576fb202c3764a669cca73c46eeeba58967908283e648754da3b687a23fa75358979e538eb49268ab7fb437407ba2aaa7441c0186b7d11370bd8d38f6fc7df078e3e535a4a554edadee222c7f608d2d7ac30ba860d0a83a1542ffee4b81a2fac15f2532b3ef50cac0a5e30042b0b03bbe6283b333bb05b2b036f6a77d691015218f0d5b53463750bbd8f5696f598809fd4f57e99241b512cb58624cc5c6f233234fb119731bb6ecdecbdbbda86af409252b755426fd39d7fdd82efeff89f066d8baef21afa0bc511e96abde3631991d5ac595aca16f379cc27fec6012129403c05a5bcb9a7c341438b5be075fe6eabec333b5bee574cbaed6faa70e22baf99061046ec6595f6d2bc8be5fa6d516e80f3c9352d43d0348308f24fbedc6a3926504571d694c1c9b58ed10842b0cd8e22f400ed25f46a63c8176bde49a4aeb4e60af2ab294e18a537bb8e61421243faa888f8872f6caa6f31539278c558f95d1891826711a516e1ac31fde41266f6606c2627e9af9f1583e03a7e6477d7ff64f1203fc8ca46f1ffcb3a959469ea4b1a95d027a8b23c2a21b291c0d22792eb8981147af78543ae3a94e3c658e991f68cc3ef73e2f05d0557d79958fbe9458dd915893c097d72ee5b7f7bdb2d8e5ab33d744d1194320ad192cebc5ed494cd0a1caba59ef9ed191d4db92490be150df2fc88e493c75dbc1b73bddb86238062fba2b48549267b67f40f0f0c4d18439c498785bb682a699b6345629f9c7346a47d3f917ca5398c888151bec6ee6a55eddfe73f7a51d417ff51b92ed7418f9f308c6ed20ef42ff62f1f5dd8d9a29332a95ac83fb5bdf1672fcbaa0bb1579f5c27157c8855212aae41e414df3f411fc9f372a00b5d7b392fb712bf7e898acc6bfef335b7562b20601b05aea1a390c7c34db0dd951755b8e9153c814c343dcb9c1659f873e817427fbcbbd5e5f60258ebb950d36a15fa7625e64e78faa92545e225a47c3e2623fad813fa295def7678509b2133df35e1d74c3e342f16ec6e82f02fe02318fce49ea109fb916798d1718e23b870cbb3f266d29be24765781d9c64a7df024384beaa46ea9c13ece304721b9ea0b6101975b8806c09761b2e2a678b8717b79d8afdac7e1510aa4f31f43e42f551cd5be8f836e0e58db80a5650f033e7505a8e75f3025cfcbf8a9f19d179fe15936726c6cb6f980827b59d718fcb93ed3bb957ba519ef5ec5fddf0d184b4365b1f558166d89341323e84915d057ded5d7deffe500e9ece8f5d1455862e13a70516e17a23a7044084990186436850da536d812948bcf8babe4ed016461a7761a28fa9a4946898938a1b6e8893630f26762fecb97bf1740eb3ae51e4220abde167e2cf43c91cfe6be41066025f9c462da274341618c242d9796962ca6fac206790484a4dc8cda5f5cd0121fe5f2b701d21d68c656f4fa7c8b1f747d3c5011bda4990cd66533bddcab93a51057737a81ef5c7b105deff22a1ab2fb82e2ac9be05ca5bc6709675e6d67e3dee2dc712e3b916686b1d5a5844e7999b5bfcd53e0881d0d5c1ca6f1629f10e538995c725bb7088353ba9af7b988d6c43452d873e8ba4f7a506a995ff993e1429ad0d194c2363a0f000a758b19bf80f9825d82f0d8dba561272ae198b24a3ea3785f6c88999fd970c16e0c2409ee77ce6861648b04b6659a8dbfc2fa1275d452de593d4c576ebb789300b0d488a8324a536499763c7e2a7653cedabe958b037e8368b172cc3f1113a7acc4eefdbc39425b43b9f61ac5aec3df76cafb60c48788a4892fb0141dd333fd8f9ceed8ff75d7dd79aa7cb1e0bdbdb45c27997b1b5796c39ed01812d8416bc1efb6a489724cd5e652eaec6afc545114457f28eb2f404a417910073e76f4ff28c3ead86eaf3983a9016a387c8caa85e7a769fa792cc33b17f842e1a9e6e3dce49903d7899da4895e27f10d86c4afefd428480d896b9350abe12dce51dd7375e2b817af854e1d115f17a6f36287071d8022bfb16c2279d42f501d09f73f6953c66219b53cf0d3ef9bc453453465a3a581b1e54b53235a0c876f7876c1815f2e2802b6f051de5d0b9ed4284c5db81c2813a55d853f1688cbdbb4398bdacc3259df320b3338bc59e3770ce32ccfb1d1234065d90e07deaec81304820a297833247b91f272a6ca251e1ab32903273ad7c68bfa9afdac3a491e645c8ec8b9caa22f38de1df886965d6078038e7f7f1778b0ea17df984b67416a63fc5fbd02db8a7c8935403c9f3e47f6011daac1d78e1d7ef7353b74795db705b4d652956f33d542b2d0c06b0994161350b36d9c39e23da900201d42c6f0915c6cb252be9fb56b98b1657b7bfc184dab897a88b0f8783ff5c168955191a77003e979837b3c8bc16bb830cc4654ed59072685da282831627d40e31425810620f25c8704a7f3a4870b892e9a388f499cbd5788ffd618065f83df0d3f4395ebf9ea84da87eb0d20b9d0ce61f404bf3d9760e2d89af3acbb057651ac79bdab3f567b4c577de1dae335ad035ec324201c6d433d9c7cd035a1bb72d7a286d9aba08cbfab4878b71552cdd61f4f31416f8d15253cc1d6fa55abcbc70fff3df2b82ae2af7e3d80adeb1aa3ee27e0a80720f86f08011843ff944d1204bc8084184a5abc246e3b2c37d83eb7b133052d1ae475f78562d6521ddc37926edb294c6d179e21338a638b82f346ab16f04337de7bd89f492901818ba9e9a93a1efec1985a10d8173099bc61977823cdd29647f6fc3b3ee1eddc7a74fd9f616e5af2bf5fbe64e7707e4761d0e3be7d288690c6ba5e7167c2d0f80b5ecbf5c89b27a8444941b1f70530923f1a40d2bfc40c3db129223831cfcb5cbd8d46379cab1697d3a0ae1686219a45d9e4d8bfa343156d5f850652046afbb159eb51a1ee2f1d520a5b07f872e6e4313b54e7495afd15e6b35bd47d2e0fd7f7b384c3457742cfc831eadad28f20e046234c0b15fc827b3678c3577bb5476b61a3b267daba02298d10de93348633e7978945d804c6bb52a47f4ce10bd80899f442d79df53197682e5281901041e3ccadbf0b83c86c30e2e27706eddb150cb48e85f76eecdbb0cfb464b433c09c82cfa3f3326c2fa0e505bacca6657da7e07d33a0e6bd6d7a53f32d2b170e986c0b9f946ed076b6aefc49ef556de34103420c279eb438df745a6aa2531cc4ecaed0f9fc571afd6b9b841406f8f1d10a2bd695116c1fdf069d68b9d7e0ae128c457a47e3d7ee109553775b4e6e8960bb160bee22a27efc56974b2a903468ccd2d175772903781a65798cb2b1cb06944ef28234b07f5b15d2649954bcfca5a2e2e6fc0041c0047299f3cf5e225000d03dec1fc3361537cf4d908f41e2b344d7c631a40ba9a222aee58c0abce32dfea307db1f852f4506eda739e3e27cd659ecb94744cf25ee5b061d34de3b03169815a30b7ab5f734d3db11be53286a68ccdc97a2428e2f2e3e4bab802807b887b01d1a270f27670a415f2a7cfff6bfe2334ca60601bc46ae8d48eaeabfea3ae8b5067a650d20c7f4e9f10dd08891ca6024c3b37c14915f1e0d5810ac11b5123e7529c4248dde9de1b8496f0db2c36ac28d9567e0fbcb44c90d76c8c6b74f46494e2af42c3237a09c4b5aaef81697d070b11b3dbfb92f0f8bf7ea6fe10435d96c87ef3413eb98ddee4cd0a5fc9ddf5015e6d2a957ffdb094e247c91dfcbf8544022b1adf2af9efd880921c92107d7cfba2e1792d4f678e6b8eaeb24d5d052c9fc8a989918dd23d9b1333c435cb45b722f3ece0b66fa9c238ea6cd58e14e35afc069305ac036d3572e8f5dc487a11ff24473030788a349539ba1fe30b1d06945a9014406f2944c3d723f9b5c72b4afbaf5960f8ec849218706b2ff78b03e78e05198eb7e765f8ba85c19af4e881b69c4f205c5378e78b0718d716d7e8859ff461511e6005e78f6ad09fe66c968a7e6474193d92b03dbbd3c668f7792c7000841abbed0bc6b91a13157dd5fdf48a17681afa96046b677d49f3f734ae20ceed7235507bf184df39038290a71fd2f737dab304d44c9995ab292b1a95fc21c91eaeb79fe51cd5d9db4e457f6107a21d6fd583249f6248b47b8e3cf109db739fc25d7873b991f567899e1393a9be35ad95157960f1e3cc5639e0ef75514e1e18cb078f5fb261d665a203cce602f33192c15bdb91fe5399afb620af1faef514e28b3a01a3f3cf173c878a20b34d8f136e75540309b3dd97efd56aefd5b190b7ec79c39cb922d43d26dc04b766be6808682eb1efcd02103adf1c53d29269ec94e37fdf8abce8417e016141d07e37ed673926a4e2dd75914d27029ece79e4c4d227658184b428c204d6eda41722dee04c1f3899aeaf798232770ed6c8df5e3bf71934b1dce9327ce775745a66729c7fda507d6f78715e556804124ef4c68b758673b518e10c1d0eb8e1ca35c3768e5c38b40239860f5702c6e718a5453919b594a24e153fc1abeb5d1472c7ffad60ebd8f46898876dccc524fa8c394d0850287c5b267b0f529ee016c3726e3e6ff6b0999b6ad49ba3f2d61d450da92f55c0ac26001be6cb7352e99bdee98fd547f8e1b0fb1855a4c01c7e95a1155b5d88d97d9998ce2f4e6daa0f42ac7ce50867c9ebec5b3651af2f92502090dc9e9501aca5e82762d99d812453ae5ea4616e166357f2645097e928d20cfd157dd9fdc698292c1950f960694b3ae19e244d304e1ce1fefc262651723df66055e8e95cf2bd03d95f64db1ac9fe760136c5c9a79555169af87977efbf9738c946c2b3ba5d432710fc502e920652b90e05a510111ed0f8990ad5f025407ec2cd51a704fcc605a1ee686c3aef463447e84b75a9c3e9a9ccd89a1ef44d07b9572b8fdd14b9cdb83db9f035d2dab8b4f116ce20b416964e9fb1ebb7b1e92f418bfcd8c2c21f6a111b809daafb151c50234140e637e1367d191c276da9d65be90d25dced6d8a2df0de53396940af05b634ddbf3c3cbbb6234c7acb37d4c8fa20654354dcb00167863bdb81c4c53e4f3e8daa0e5e18eeb3c33c034a2f03b19864a0f720b698a2352d56360677c1db13475943ec5cf7eec7d7827d6a2f0e8fa33ffba90284808bab6eb27b9c4b0c8ddda5a803465556b98e90cc9bbde12af8499e20a9b23837718362f8f4d9977ba4639c2fa8bbe126a0202d93cfd66c3f7aece2fe20aebd878d01e39fe898a4b8322d919111260009a68d74fcacba280c8f71f4720cd77a65e70ee8a792da12c88b8fed1fb01249d2fa4dbed0a4e32ccd65a8b66ebe5d84d1148b0aa1c9711d0025a2347463b33297bcf09c97e9fc0d349186b49a6f2ad2af8591b752583fadaf7474bf758fba5d07d11544cd248de03e7edd524b95b75c53cfe8f27d25b79625f8aab28f3edc3d0794c414e1f42a9f632882fa415b0e3cdad4761e2df7864831a521ff4115a47cae30a1a032bc9dd63e7154bd15a80f438a549eaa643c12c90e6e5d896e08c9cb137395cc5adf3fcc10b1574cf8db0be3267411793708e94e4233a24610755b112c2c56e983f12313e7c539921b67f9a7653b839f50cd8f337789d9f6de122ef89e441ec4e0cf87d03043fcd0cb8133d4fbc73a247905f026d4c28207b89a636f239d69df683725e5f7b5a0a0a73c0135bcfee4df7a022105d2048632b6dd429d61806f60e50b16c18f0875169a49a265b0737b4ecb970752a413f4cb9f21afe8efa4511813c6cc4aa31663c3256f0268dd9848b15befaf6719b5ec38ff87b97c7703ebaa4237142a3d40ec935c97f0601e29080df34934700595dc51ed6e8577df7f61e2a67cc31e08f827c37fec23e95509458ddf5810a35576d33f39d373c1ea4d69cfcdd71b213df96f3fc62e19e7df929ca7fccd7042d4d32b6a1a30b6584516c0663e4469a78715f052e4bc47acf5ffd3a84c2a6623c82edb96206a9e3c1ef8917646b607d6ecc59d58be3aa274125205b473edce58aca5cf6d8d11d99687bb65178e9bad04a08ec444e2fccd72607c1cfdba84006c632b508fb6ef19e3f9167472bd142d5a15f03f3c4a6021c9267cb18dab8657b600cea2260789897e9210125a70286459bcc55159e9f5dfe3c47c285578c3798fee69db963d3c545059967f179a0ca485e365c314bdf043eb435613bd2e30257dc85d02043d3364bff12d4ea6f75074745053aa726c052729a2efae3caac34eac18481991191a714d216419b06d280293189ebb778f24ac5c9cff4dd9eec24fffac66e79d347d48640f6c6d5ea85d796e6600fd6871de7e4f8c7d8c9c3b441eb092e1fd63dd63f086f86f6ed772db34340ef8f2f0ff098c68d1b0591d4f2dd9e5c6bf9c706114bc7b88ca3bece5edd2c6ae87e94a8aeee5818068a87efe2a0bd9ad78d8dd032a84c3551e22892059eedc46eb7d4b1956c2ff5625f39d315c6caf46c352a26aa82466b95544bf3b41fd98cae02cb8ede20cee824dce0420c6c9648525a3f1a3d6cc02534ce39fc4caf1435e6af71822bc3183f788b64f8eb61ecd172b2590438fe6cc9eab5d0b7ed500c962fc17bbab9aa372bde0c6c459f7988dd1d5dad39c2214f7de90b2100faaaae3743cf1552cad90399f5ff8affa6dd9a9c30a0907e6e5d7612f133856809a5b8e3035c1c1df5a1d0a7dd2a9a627b54210b955897ed8ef0524a44cad6588620ff09a732ac820d91a15ad62697f380e02ebf4cafb72017f1cf4753697800ccf1e336a9e6a0da0f9575c0a6b6a6523ba1b04d47bcce88df2186b5f3cac4a61b7c211a895d4768d01e98d101a8fc68ab4a88ad1db0613c68c6d20de4991bb7b9f80a4632cb3a3de60d11f16fac64ed90a4e6a86bafcf99f0785bf665d44b3ace5184d2b86a7121c7c22a088ec8c854052c2ad81cb344c81bd3d215d126ffa494c5c1c0ed0b47e98c828ff1bde8ac44cdbdc21f8d6b52c9a7b4691477497e7fc542cc32bc6843bcba297c0623cf74cd6ffed5ac7d0bff2516752d092c30f76578079e4a04286b5b0be89d839fadf76d227d8127ec8c5ad7a403a4e30e874aa142956dbe5e50b4490a7a201545766b970c6da69b536352de7d248689a6ef0958f488f67a3eb8765330b25b5340ed8e963766d78e2344735147996e835aa3970b8dc0cd9a8e6dbad067af089e18e5a1c2b474f0c0c6ead5495b4eb10e2fb964a3b7e80a2ea971018ea51f68e1f1c151ec8b24c8ebf55469fa94f1f45c0e5ca34446cfdd170dce78d03c7f859fff51943912d0f57ca59ac903fb2fe462fc590aa181f9228f27b6c3296abe4fa0694211e1325204c6e39aad9e8e93725ab42e4d3391f0baa37495102196c515ded0e0c388a2e3e0c9a5d58451ef4b0ec58961b81c57fc4d1ccc7a82999fb5c02338e684b69c201a71c6b050ba385c4a59946d87106c3abb27a75b192aacb49bc8ae693d543c4d74f53be3bf611fb9efbff5b89d4828afd30f0e7f4d80596bd71a317c58c528d5d79280d91b967f3a8663464b827414b65bc4e311bbd61d22aabce64fe162fef32b017e9bf807200bd3d9408215cb7339684ecbaaa806e4ba256f862c7699e40ddab0b988f1f5377cbefd7134cb92eb87e1b06c89aa2bddf224d88621690047fc871aeeb1df73819d4279e1158e2c01e40f59aed7c87ae08e7fd5124b0b4c982e8da8efd4bf5c5f066a537fb7e3b44c5d93fce04a9b12d37d61fb999e4d61202887f7cd1dd6fb42a2f9af1e8ec66de0c7d9dc0e552580b1fe79aa33728d79f6c87862e2758591ec483db9ceb708edf739a702e92edf58e00f329c7aa85330d432903092cfcb03efca8be93e670661fca2a70641a0e351fad1f9027e58225019ffb3d6edab6b5f760f020c7d331f4c8a46e9ac756505ec7b257945ec1ae07faa20013b00b0d606b40bb16db578205916355a43a95e9344847d6612b7bb0491a6af441bb9dfa2f6e60c0c2bdff5c14abeba42ffadd2623bccb05e5ac667f3bb9d4c8c92f47100d5643194fa9c55cd6101e266ce79577e5124b0d9785a538061d98bb13c0e6caf7efd2b68dc62cad18fcfa94afcd750fedc01f30e0023d66bdbaf94d566e4722779a6048e1e279ddb6163696429b16d7a3dd6c635029b6d247db7e99a9bbd434d6d70449216291b4319d78b6c378be6f46fd7686b2dea6ac209a17e34af1bbd09bfbf5f34efce5e1296ee1f67fa1efdd0c188f438abd040078865156c98ccd9a3bc372b5a09250f3a11b32b7acc900942f63087158ae60c8c26c30aa0015208eca408a81c45ba2f9f0f02bc8b246eaea56e06936d1b0d82619deba0245584d816a5a286417e2f6664b0a6fb582e5dd732780ee177280c97966c77a4300e4b311a6474b968d7a45fd143fd69ae55d95232b88eb8ee8e5d17c5e818792d4e0ad490d506376f81a420c66e66fc903cd15bbba4a319eff2e8e3d3482ca5a858d30a5ffb7bf1f7cba42c2ac7b76ef933e2594ceb4c143bf6c88d815d877fbe1d3a200ca857e3c7ca6469be53181b15ae08a2f287ead779aef37953fbba8a9d6b7db0fae80fbe3e566e77a2a92d0aa8b7c7411ea173add9a9d7d0a9a074993001e42ce3073fe5e5dc2f654cfcdf27c65d08c6492e0b4013ef058234e2b16da7580ff6807bf966eb1ffd31407bc57d187445a6881b002cc3c180c1112d628a8e0517e8bd77d50c16d53b4fea9d4aa218ab63f65a1dd2d071b2d0a138ca93d8080444120870172882e092645e50641e0b851df491c59d41a5696614b4ac3404f7e108cfa85e2f2576fda67a1935543d4e64ab7e0153fb82fd8e73c78746e7a2d7c0399aab13f985eb1c880df82c8f507e2aebfc24ce621ec772ee16a4e75887cf31225768c07d57bafb11fa9b3d56e36a883515fe82c47694c46e77c0ee15a8d734cb2efa6d9683bfa55a6452b0d7e9d67a0849aef28d6babe62ed4f09b78b02d1124373ca99219c18260f6617c84cce45782da64dad4811383a99da70539fea80dd40f6f986c7f0e12dabb365e8f7c4fc060b369ad3cac1cff27b634e817926f26db57ce2689eab87fb3b1471065f38eb33f5620980e43546e4f149d1e4aa1365720cf6ba04632e8e218e8b096e81fb3a8c844fb599854b8d01933f5793d4ceb909a4b65e8d6284f9b6bc8969f27facfe702f720fb8ec7264abb3f97f3c381a737c1b3d053045cae8eaf3b240ec4cbc96452005f2e85c32756a7dc89f59591d68f0888938b3ee11a096b397560584171eb7bba44999886199985de5918d7a96f02de355f24b3e469319ef605e835ac9a28a895eec2fc6fb9a3cdac44e834a73cf206b4f52f5b763aa4805c9ae7266c6a57691791dd5e836c8beec5561730875a9300d6af5b3c12c5936929bc622d21f163980dc77e845377c70f247b44221d0416e25574255da7ee5b088334176708ccfdea9d5a715061eefbf1ea7f0489a97179727bd2f013db6fad1f51d8bfa633580e8f2c56217e277dd58eb8a1b83c3462f2970c5f12422cdbedfa7f6a5240961df9b4d968ee16a9d77b26f65f5d145404065f5686c3ed5396ef65d0f74f4d0453d8bc008cf3a66da3283b71dd19da01762323e225d52945b5e8fda3c08f694f5cf21eab189fc45cde8dfbfb5599964aaad9d0ad2f4cd2799cd3e22407b66fc9dbc8f2b8790116b08b4178a4e2eb253e9bb0344a9838ecaae28371ab7c0c6883844f9fdd7a8c6e73fe2c6b9df7feb87a735eef003a934bc3ef33b4817fbc6aa5efb2de67a089bf3c764c2d3b6aee07d4708076f9237ba9b32be3aeac2cef3433c8667217b73f0f2a705226a0723f94332b541f369f072ae24f2bfe2dd46a6a4da6e0864daf110a68ecdd13d3fed20eff3d01f224b0303747c74d355829a731b9ae590c81b3ac8e9a1f4aca08a7d47c353da0dcb41cd08a1f3844c64109aaedc00585e5a4746e74eb0aa7b3ca5ff21abbbde0c111951a95a8028f0cc4763ec354af347279ae1bf3a05cf21dc02b1023ad50aa5aa399386faf0511139cb8219bdbac605d971503a2caece320584a18aee1e426ac9f18c0658dc86d40235ad828a0ff9e694542caf9e825013bed2d95701cef20a5cfe9a9577047ca02e8e7153581d25c476c07acdf15a57d7fedf4c236b3128dce8a6a4e98554d2f404154b64a72610d5bb2b4004d17513d6d3f3143c2236e816766d617a34458e716ec8c30a429e6d497546d875a85715820779b84ee031bfc6bb70dee1845d1c0003301b4adf113652afc8ce89210f9954838333f359a85d96722d8afaafec8b8c17ed8e5a1436e99ba9b727867823841e79d7798c6ba863382e8bbd774f20b5807466e7abc4b451fa666cefd6a2d87bf62224cefe280edaa44255a4e92fd66e3f491d8a8687f2f5222bed098c70a920d2ee36911ad24b39b509efd8bcda5de48df7be38df918e538aecf6f5b77a022c7acc5959b1ef6acee1cc5b083eb78806b3cb1b6a06de3f0428f2fbbe6ea7c7c8bfa57eb350f916968416a4622bee1640c4c8509cdcfc028dab537478ce28d4159a60cd69c56b3ebdb988975effe1a208be7bf3487597c863a0fbec388336295f0a52762aa77578f966327b73273b529d29980b86824c8bbe4ce69bafe8de8ae52b5ee440c141f9c3fbcd8f97a13853db3a530d22174eca35e81c48862102d7689c3d75da7444b23ead36cb802b3d946bcb273816a8526666e7586870335a76822caec4d3e2b58c383734fe3930b9795412ca0904f9aaf23e5f581de9f33367b038fd82e6f3e342920d06d8e26e24ab45d3ffacd5e627c24a569469f9c3f787dcfd4bd55aefaac7af69d940616bb6ee95189508f48f35f552a9f764b09603574137ada8a60e1478cc901964fadba4e25d0106378f302463b781053575eae6db678ab0f00a342f896bc1d0d2955355cb1ff5bfb245b437e9bc011fb12bac9aa7edcc2f041e7c255ccb5639603a50085d64360e7859235ad2ba415121fe0eaaf123bf75d9213b0750a5b7e09a322448060832b94ae4dccdb90152abb6edacd110264d662d4543c2ab01b06437dcb91adfc3301b2e2d320028dc0a8cb4d29e0cc3532bdb48786050fe65f20344ed917f26abdc1078d1cec70f669ae5503ecac0630eee3aa737aea08c662743bbc937f2f16096fbd277b2ba999520cd61abeb215c55e0945bd23283a9dc471b75f6440cb9abb6649c733a41254196a9a44c0b46a4108f67d686482edee8c10ffabab50bd3f1d348c0a6dde527826c96617ae51b31de029670bbf6968c3f425b3284d1d5460a586fe43a81decc58029802a65224e6dea7ef7bb455081f186cd8bd8b962d746edc7f95c85a775d91253fd205a4b57fea4f1113557fc2ace215a191e848fe2f0205de86c36d047379ace228a86b9d0f46fe38b560d30d8fd67c742983e0b75386c6b47f2ea071e2b725cfb99bbea05494e7d97c12bc8fc724f4036dc191e0f7a6f83debd0361055af651aa8bec5e63e71f747eba63a9934ee59e883185c270711a1fd87eb80a63f2f463557d37ed40743770a7f49788461d99656b7858ecbf6acb84c19f24e8014120ee290b9f72d4abb3a5eeb8f82043f3ecf6e020b229cb00a38ff7826c4f77912f33f5dab71f3154b666b6a63d2d82a47fcf839f11a3e85e5dbafbdeb9dee9de5212310264a90b1b5bb6484bd8dfb4247846218308647e8354d3c21511e39b4edb48536d1816c8472a691c088e0549fcc5e275c9ec2ae8aeaab93c666952e2c0d36e02d26db5e628f37cf8ffc5108e3d9a930a80f949b6d3a22858e3970daffad67a1b7383b08557185e92560be0d7c77c6464b41b50094575d329eb33be06afb768c00c001d0839d0723c4075d4d7846d1188cd55894265c74871e49f12197618d1b41f95084f0fe805b70e9c1d10d34355df94879f3747a223a34cd96849ffa9c0d8b4ea5b689b472ccc9d56481f79b22ce87b2c0e0a61de8ead34b292ba34d5b7548e9f520c9688c9e7617b590005e140691c1939651cc47e0c6f57dffee817280881c82aa00a4f79fbb2da41918109a4301611de0981e39b0d64622cdc3a34da7d2f438bba8353c9096959e36097f7b7e62d76c135c764578c0c9bf0be70eba37aeacc87652bbb7a9b0de9972bf496bcec9f6dc4fa131a166976dc5eb91d2aed8ae9cfd0c90300ef0161d0a8a6ccf7e50fa04a8e650063504103a7687e9d697157467eca318772e11bfadc712641a3befe8175561be63321bf2b7eaee8e2b826d47d6865ff27330bc7fedecb3f6ccb0a479bfed526a7edc90bef2bad5c82511db340b84b46a6cafc1ba6ad7b23ff7c0580ecacaeaa1a62e31140d2180189b7fe2eff5223f86081e64878b93926a10524b99511d0c9a35ae6425b5e0586b59560af35f54bf26c3518252aa8b818196a6fa432ef1c0f38b890527ced0640af3e59a9e9be7e0266bb5a753478b9f803a66b12bb9ea4597b960c4c1afe5e83edddd62ad8b12dabab6c921aa8080e0cc2d382c24ff2fc59a5328b5380a53d1adc1bbcda109368b9298a195fb8e872be8f390049817b39976538f5021a6181b6479b8f747123232b14b771da486847aa096ee15036479aceb0f7ac3c824b8dca84a94898cb6906fc1a53f5c85308ceeea1cb7e29d2b88f695f40223ae6d0a655eb83ce5732395f5f3c1676ef1744ef7d62b1d2d45056242753b4401305e0797e407b6da9cc5f50ceed266853c10151b04a08b8e250474482d1c79e1825d4a11261196dcf018875f9367fdcd0c15b43a6d44bcc64ca28c9d7a88146aef8ea430581c7b43b127d3f94569549b1b6f6c2ac9b77aed1642257a3ed7802ce486b7435a77cf38cb80df7b0a5880bbedc0feef2b587c121617bb48827ef76d2557ae9172590b2d33dace42e096c957d97bc2c7e159a065c1d60b341526f3a804f8f0fbf0e2d455d0515ffd35f7804d21ea495fca96045182d6cbdbaea55c2736ea5669619dc3bcdf40e798f04d688332f0e0729125ee4c1704e2c3b1ba64bbb95b555c1886d24300d9bf4c06f907009ac227231be4b9130c71fe7beb1561118d6fdc412941b8d2f7d2e339db9590acbd1117db9179440b975a9776d10fd15c32610ccd8cbd43775d7ca9f8847cf76427f4f21246b28282f6080cbb8ca19129340322bc672c5c8586490e3b98cddeca60463e71082a29b3e453fc5fdafd4e07c8e66472782c6ba66ede9bb91c1496b46cebd3cdc91c2f9ff6b74781fb64e1aea610f480c01da34d9f7385b39433d67cd970120d5941b7e196d0f0933be2fc49147eaa317ecb40da6cd729cee716f31ff24dad02a541d6a72dcd11738a37d5b0b5095e87aded0c4ad1d94dc6d6980c16aa772c97a8334c51bd11218e5f5718e37b12122f680308b4afb970f906f9c8d661edf00d59f2c40279eaa1601def8bbce68081022fd7620040460afab60f1b7b4d7ce6e90f87d223aa6402ca260baea67f14fe7d4716d6451ea0ac83b1770516fffa7295c5c5790a26794b9fce730fab565e6e2ac0b76e703b9b4a8a03152e570f27deb7641295ba949562bd5bfd7e423214028eb9668f153eb625bdb9ac511d1f3f58527f42537e9788dbf3338bd741d3bf95a526b7b41ef69a4c34879471943a37673258fa7caffc69b4744f26ff90286a9bc2c08980f67d3d956d4ad0597e25d15cc90bc96a9e140218666c4d0c9b72d083dad2ff7c6572ce314051fdd382fdc7c7f587240b3b2c2c5d05ec3c1f5c4e9b3a803bf1d1242d9723cc4ebfa2e1df90a167c9b8de5e0e582d219a226ae7502f90457d5aab7276d7de74072f9ac295f7355ce368f469da2a75770d3bec62a0f2c32811820c4d3bbdc53bc49291ee88b5fc7f8a0a14d457c3a12af9979ae6d2f726e5702cc4477898f4260dcd0efd1a300492d6912e32ea74c5d663db0eedadc479528add1c3c1059f38362e0356e1e3f697d881861c509d6320d21dcd8dd32cbe3920c97441d0ab4b2464d3c32ffa92d04a9ab4fa03d4a6e8949ba2e7cf2d048bda7947635fb95eea94983c8e38cae5d0e7e4daadb61c790fe18b53d25faead1464ccd2b5828feb5d758f97740ddacf897a3060ffc714d721da95e714fe88f9a497ad6720856885660486ea7ece5a8a45e710185ef770d53510a503089dc3606defa592fc2181535ba60b4dc828bda3e7b9adadbc84411ab8b36d6a589b5b689e7b704a68f11b0eff550cae499ca5cc8a952a86f06a5e8ed6cfb900aeac11434978c2d73270f3a50c7595aa7dd87e7e496372ee4560b90e95706162103fe27c87107424a4ea99647645700a25eee5dc6f15807e51da1ea9405de7c2437108a7c533da3f0489f1417194fe3228a385d72127fa1eda8f4b01a7d34c8c46ce88605337e0bf391ef0e1194e5b59b565ff665e13cbd8799f60d02881f7d5952c8185d0c9a963f3110002cd972356337072703489014a319428feba9871de8d7cb8376740c550398ca4d9e378008b0161afbb43b135ca28b64d227838f8e3380e9518667b126b97f441ed3e60d178b7ff5ea6ce7300a67f7a2336b1becb5d72e033f54ce2444383c658f8375c66144f94c35bb26cb2e4f3c76c3679b1981d3b82571f72f6d2f4fe8c9645276fcea81377f8cbef9d61a9f63d408ba5b1d2bd07f7656fd086be53bdd065eb83907ac78cb58404d947dc03f7ce3d46e32e683bc2c1fe90d92458989a6ff0036edadcbabba44186d717989656ed07a43f2746557a9191c7d93497fe39fd6a4c0fbe11440ad00427e57c4708538c595a0b1528d99a312afcc7f7216cdc2b6813510af8b4a8a0104bf764a0f7aa1606159532174c75d30f3355e48302b6f3f1b65fdce5af3969162f4710c9075c56e241f3bd0cf3601db4231c8b9840fa7a6a1473db823f8cc525234f59fbe22bd85f32ce4d985382c295e4b1cc26d894def60eb4375b658d0cae1f6ac35920e6bfe4bcac3120d1cb18afdc6dd7c9926276f5f2ae3218f7fa3c931eae4cc48e4a3e34f5a76a63cb37c5812ec126782bfa2513c8b258afeb3abf2ec2b87c267f46b9f0a6cd8ba189ece9b1221d9f7fae059f77a82c9159cf6cd6363cf39a7e3bfd227434152e50c3645f2ae82686e6bccb0a8161ab6db3bfb3d0ceb12fa50934337c3c459ec1178a4644e497d6703c9e901d915051b2fe5a3d95ec9fc3a870b64b317aad70e152a3e1657eb2ef22cbb8aa7eba27ff2c64e13cc658d68f13f7058e0e9ecc0c23da70d639085bfd8583e39b36390e696a2edf7d811668f8fec0127fcf2318b272c761dd7acc1da21e7b07abfe666ebb260dd573bc5c613a191170b22961372d7a9846a46d4165c1f136a6297fd5bec984f88a1db2f9ac7b6be45ad2b24b1e8b0420857bcc4b4a9a48d475fb3c5a9c5feeb5370cbe621552b737cf5720e4375f217f1687d7fdb19b6e1b202a19325e8f0bf570764fa70e9af305f6ee1e0be6d51dd76b12cb2a499296e2c991f01e57e2afdaa6a14f070158394df85f7aae4042c4a91c9fa14930cef8b7b69675361abba3506fd5e38325127ebb02667681733d0bb94a264e2e31b9f83f2ec0a1c0a54bbce475df93aa960dbda7de200c2030f9dcdbc10c848c6e13ab7dd285bad8ab8dccd99b9ef4655b74b8b1ebe974bdedab8b91887ebfa1faf1c6cca7e2357ee69ca5220a2237e0fbf8e144e9f68f35ad738303ded63e84270ff897ba81039dcc73ab2a2e64a46fb8bf632d42b886ee848e468e0f90567216a44af0a5ec64975823a0340a44c61932153ec364bd4bcc81de52e8ecb79d597a273f03832dc50ab01f7d97316dd5866732730996eb2b2e971849ad2dd71af997035d91fb7ea2875a8ddbd48e26fb1d55eb6bcc58272cb963f943fa0221e1ba7b56d57e620c6d2c9b9e8adff3de1e6357c82ed6e518d630a2983f2e02a92955633cd287304c335a109d7159c0edf181f3030de99dfb9a1f4895b25654c6fbd1283a445d5f64668472e015397f1db376182398944368792fa66f1ae0600828b6e95a45dd90925a9a3127c8aa5e951b07d6ab52ec2dd5be289bf5eb76f9502d787d446c9aa383846fbab97d455d9f87ef97f86305f0db3eb24fd60f6897a00e2a1f9d466422406121d78ed82856ff0d7f639f88800bafa325007daead434999fd8ff0b8f03891a527be3fa967e586a378a1dce29169aca99c409e31655a8e864148380b199a3f9c375ef1a64093bb38d3ab92c11ccbc769daab7a443d7a6a93a9f9d2efe73fe5da7edd09b112c5c25f2cca1b166d767b5832cea769da54acd70eaf1412ff38e86d6c8a69a63953eb453b5bf7d40ed577bbd649c84976f2a32b11f37fbd11c699188a3575ab0e01c97a478defd690da4a6b2e6555d9e4d6acd0eb1a376795f464995d830c1ff6dd741fbd15ffb16c442e9102ab3f8aea37ff1552bd74eb8b987a08f89aa5995c44a909510a8393dc131cb6f49bfebc0d0e2876c37fd715e60e8a62a7013bee6a62c106cf00203e4a3752db8df3c94089b3052f61a10ea2b9fdb562138559294cd801e004e292dd39d3b1b7f6fa3a79252d616d70013d39c26432a89c70543f7008bdfeac0fd2c8fd1a2d1b7b6e453b5d0f1adbec0c7765da94872143895d13261d18f8326e7d006cb7476e0bc9f78ae9db4e07b89153a8cbc3a3f5ca0da854393f79c1af136a6c7becf4040e881df6b827f0bdb8918896a76acba843a8b4b958c632ce50e5f714f20c83d83a1d34e02138e75a287c8dc79c5e8809397550d98bd09c35f6eed5a24dab1d0f0163010dd388c2349f2ea36416e35a122ff88a8130b77cec6850b98a74d828a1ac403520f16ac11e4010fdbf9b7861263a5ff2d72a35605d9c117ea91c5a357c1f061520c134bd669205fd2540c9107c45e26af94c1cefd88e9231028b14ea739f09b8fa9571d4b96de9aff7b767f0e0a654c350a2cb7fd357db99d72c4bf721477e3e70f75e059efa1956dd81bbef0633c14006e018b887c576a59599baeaa9dbbbceef4efbe87b530916789636aded81e87911361494af71d71cbf822e0a591930ec4fbb0673543994c1bbcd5c44268ed86f353c160f9c610c3524cfd08fab943fedf16b5f363a44969e691ecb62822a6808d25754d62320a0d7001b550e74ee4eb808ad31331be188f919276f117b68e9050f409b587b6b6bb07a0324189621f14d9fceceff057544135b5ab7025a5b82eb9b922c4a270e73e2f9f8885901721a743c52e6b73731a91743251f2a777c3a39ab6358119ef9fd777c96e6ec32ac3d7fbc47836518e6ee49eaaf920eb4b01aeac919a822b8a6450f786282b193096b97743e7ebee49e616c6a302595a4922ccaa7c75d31fbd5e036817689f26b874e03ebfab451ffae3db5ab375fbf23574bc32d469d9cbadd707421d990fd7139b2a712ad810d391907e3630c786215635088a9288f8cfac9101d811b6193d7c09f6ef57e6d23053462fc1cfe8d97015b249b20a7cfd552e74bf82f74f39080977d8ee5905341b109d63969d80994412bf7ed084e9ac600a489e6e897f6a161a53eddaa0d5cb679035424c632b0fe58278c456f568d2c0e3e7e2bd22723efae13e0c67ed5c5105f1b38e57aa49967e6bf7ea4b7f920faf5b4aa9035e74a0a9a857b2c7aea249581ebbf3b47e459952856947edaef3c44cb58e9fef85b5aaace250e63b9effb5dfde0caf46c1f1659cd21411a084f2eac8f0d245028a81ca344f082d9cce232d0624d645711764ec7823891a2e4d8406626326c0d63b79c1e0b3e412971d42143625ee93264a4fb0873640f4968582defa8753500e7f1133cd7ced8afb9bc2ecec3c2267b075786d2f9785d10c4ade7311642d9a4f361912f76c5bb38c8e5e2dfaafc9b35fa9b3dc4930d5e94d505b79648d16769e039878c2ee6c43c744d820f4bafae8da47bc64f7e53b499800c749400f33f9338879828613a6c7b712e41be6585ab155ae834f872c3928fb1a29100f1b475e61bfa6b4ab062d85639a06f288ec434f6597611f40b9adc39c04dcf935482951fad42195b51d5165f3702bf3afa2ba0e53446ae524892569d6807ed4fe9ef93545f2895b71d0d0ef06280f28e196c34745bdd77cc48858deb9588398f7991386eb50beb1af06a74cc6f11020e3d3f44fe1f9458896eaff250cdda44244f73741f6dfca5c16224eb1f2b4bf88ecbc6111f8b032e26a6065c0615fe0a1c592de8e60f889206aaaff416e3bec52b37bec843cb591486f5db61e3c8cb433e17ec4ac83e5fda4820563bd172a4428b9c112faea6c3a22836f9f3bf2986911e2605a14002c3d42ff0ee764beee7acb5c42430e99c249cee97bbc70d25d1c885ac6cfc776ed499cc2857a46b3b481af44ae5098ebbd9fd75b1d2f216f09ecaef779384c2db4f133f841dec5e3559905ef638b1518d7e08952ddbaf9a89e414eb01eb6bcdb7b2871fb6e21e5cb44cc56e2363ceb809e4afab934cfb9e98568fd198cce1a83a55a9565c7693829af27be3a584c8f77c318b58a5b76e4def2caa10f3e89c40de1176be55094edccd539066cdfbdaf664554117e96b407a418e946ed5921b8cc9fee151625649ebe8d571ef65f75ed043039697daa2ccb43a4ed88814329e830c4c5fc8917e765b428497834e2d8bab822c90a0feb62ef0dcc676418441fe4efc17248a7dcf190c2336d89b9daaaa7d17f7af07ea06f8067e1d4549d709ff8735d94b6ad4e8b87f58af440a44fabb402fa2ffc96092a5f05c9faffff4316085c80c5b602eb4200cc18d9052bee4a27aeeaf2a867b3e259ac51d0b9b3d9cfdaa0b098e4ef0f20e45d7105e74062b8ba95b582bc9a1c2978c1be6877479b821bdad585e7fd75fda607afc447b531c4d4128f35d6bb0d9db343fbb81519dffd33a8dbae5c6c7c8fcaee8c2630886f5665dc5a1ba9b08c0faf4c84db9d1b1f1b44a273377492118796ac5d8a090ebb2ae343abf96b562427cecf64af9e7eb4ba462e51f437608050a0637ab87dd78505ea60aee64045b5d8a6ceea0287d1be0d75ffdbdb847f20023e192fd8578856e1564bf7fc42e8163819a9bbb856ce299598341fb9db9896bed616b63cfd0b2641773dab525522fa704f575d2c88c7577d3fc7572fe47608d32edb32775e24819efc65f820edbc75ebf98f9d7accf6f7baed33f6c57c9b041ad8c590caf596e2ef82cbd4a84d04642378f6a187f160777ae263667c93835c9cf21db16bf82c247e435b0f6df0cb18d5f88548dbc8a94c120ddf04d381c55fbf752b3e2718b64c680cbeebd7db69512320e7a9f413ee88c588f683c5c62b2b883078518c59c4146b77004bdcbccff3e6115fdf5fa01b159a516ef78903656b345151a0e4a8af5da5b385433779676c7343bdd139c3651f29e11421d4a9c2c93e52a97fffbe96b94ed42e802f9304e1d32fa09b7e2f681b993310883a2369d5d14a7747138f164836dc4d39a131807d39dade8dae8a6cdb3c168ba6e1d34067eefe19f37bba3ef895802b68963d5fcf3e1bba57945ce14ad370a4ebf6ba2bc1afedd92baa6dbb20796b4140694d87366ff0d2cd2b2aa9ba552a4ba447bbedccbba66316d531dac0cfcbd6545931d2593dce67362d09f128d84169d033fd14574d29ccf6f66b28b0b85c5318e9467791ed4d090c7055ee8fa0ee3056626b57ceea0ca3d810de0402874d8bb31e939f09ff022a0b9add5734640bf691004b1ba4e07f0613c3185ce0895d5cac26fc20861a740ccd322411d33b178bcc26097c2f5a5159887ee2339a74795152f824f4588730dc340c50cab4feccdc8c4379804b6c082d897035a33b5a5fd9b589af00af0de796d3f49bc9e08b6ce1ab9b8e210127869d14871a5bb25b59e15188878f9b38ad6f82c539ec8cfebcb2149bc029cfdd9d447e64d8ac4d7ab078d275cbc2ccaff057b516a62dca461141625fe1714c21bdfffa68bfc54e1e4c808781c57127c7a3005f070cff673db681d052ed502b4e4c53141d0b1684eee4f338c25c4fbead08de6660f50aa572a6525961a78d796bafd9284a04d3f325f892072c114f45934e34a0052061e9e3e2d7f7922416dfbab3d612e3f81cafd771a7bc3eda87c9ef2d7403be680f42b5d58f1283f1d309f24dca57d351c9a16abf9fc03843f1ae8cdd8055b9c8c180c4ede5af8dbfd4608f16f50c1817843831dfde6a719649248732286ee471cd138a6715633bad929447da5c090a2d497f36bdc36e180559dc9b31aef27a7ff9c58d1d69ffb1bda1db74157fa55a86b0c38bf712e2247302d85d0939ab0af76941597127501f773bdec0bb10d636d9b369306c5d32329febbd4835a9aedaa0ec580ab31fe3219738df6f1edaca3b002440a55293a8fad9b7c660593746c27add8cf8c8ea51d972e84869d1b5b715ccf2cfe7ff14d4712c67c430588a9dfdccd69550874c6dcc0eccb828e9acb16500ba75ab99b89218248b39d60a59a042f5c0763093d30bd8b5650df7909e58ad51d192c9bfb58ce86e10adc2214a9d3c7ce957c4bff412d66d9d53582729f5934af70aa165e7d1c57d9f88a11412087e96ae0500b60ebdc3cfa204f6e7eebd5bd369523cb3626dc2e40548575e0263a2226a9e9727532eb63ee2bbf9a2c3ae49d81d377fad965cf0b36ca071c9a067808dd18eb668b0b75003a059201eedb2c7f575ddc761faa37a0846425d34979905b6e6d3761d8789481fe5f0a7fb71ef53b208c71bcd5d3bc0a2ef794b2c84dd8ba04306382ccf104f1fe734002056d5952934e884410944e12772996f2f56dcd22445934cd1370e42b37bdf26c0a05490731e9f9537b85ad4faaadea22b24ee97dcb62071b5365950c74f063b20ae12180b3e7b7e3c92d53792403ac63128e876f7d4b94fb7ba869658316ca26ac5dded642d15b7df6ce395a95e999364a63cfafa48bcb09abb67b5711b28e94eeea57c120a822a3d2297e7f565e316427ff8b7822cdc56a4a9cfb581fdec928b0fd2b658cc70fd69680cbd7d8add233c31fbad448b6726035805d932a9c2e4af94ee722d3f5613260309d5e595c894c7da553b73dcf38736346d2681ddd2a728c752c8f30e0d962b2ce5f71c14b7bbd256d06d46d253675728fe986c6a72739ffac5ab91866b511372d81a0af4c9a9c5c624927e07c8adb344f315f6ce0851f232aa06b277e6714d797aeab233c2997fa197f3e48f635953f212209c51915af1639c6e5cd6199257c140de7716446657d4eb25434e32e5680ddd9d3e3c233d6652e66b1a7cde9ea51ebfb86bc229ed3efe45b47fbf21a75fe4f1eb207e7928938bca6d6219de35a4f8a0425377665e86b983a941a0c32a5f146d8d32fdfea417346a8e529c507695217fde0ad085e4e3c7dc353262d242b46a6b954e5856c545b31e1fd105c6a3263a25ba7039e1c805356d8a2725ed6773625d5295210f0ed9f55173957d250564e7bece58e5c433eb1cedf2be1bd2e50be18380434a43e34bdc143d2443e175894a6373c54f4dfcc2392a83b2e9c674e1f541c515d6f88fe69d7a63cdc8e4763bd9dd4daf3cf49d1292f720ce71954859a22b616e7fa8e685a669c30c370a8351b8ee2b8fd5b72503462fd414a8d19aa469946bf32827df732f0f7da793ffb0030cb75becde3dca40a87740f569b60815ac3f5569fbd531728b205a76bfa3668070af6bd96f0d3f7cd2a64517b2ced5c9badfee20340b0aba0b7a70cde22c7c1c1c2e1cc09f54c8b8570df9d0799b02dc9689b1b8f710aa16d9c56704dda78baba9f234c79e2f54ad172dbbc4945105cc8fd041327cdf2806e24205cde8e1032e4bb077a430f51e931f925df1bac93394af16ac6fb5c54ef6d00273591969cc3552163b42fd5ee053dda1b534aeac2a3e86653c1d3d0402e49837a9814e85d3a2ad59319100b86b2f8ef23c0ea7ed9ef32ad8501cdcd13046cd29b27c37a2eaabc84b3d2f9c92b9b502b2bde826038ade03feef8243c013c86b66da7e74f243c9bf1498bc2e7e3310f9c20329447ae492ada7c13492355af4c709277af67264a76d8d9e9b43446301b2568b447993436bbaff92ffa12121f51b680288004816517ade6217e65338dd1964b0f7277b74929bfea905e6bdc2d4c5824dbd31d2682ee7b8306142485bc6471a7248d2b926ec2bf3f5c58a58d8621efa4239c9b84f8a2b87af09a65c28e40d974009d8e55bed228e6771d92e2820a4cf61c188d6da659ab930ec37488422a7af930f4bb76219466ab28f51718506f7ef955422b39e4d6fc7e9459b986a04f0626af0dcbfecb03bbd0a8296c27ae99f5220e5920fb56e9ee1e56d2addf1657872358eed3e9f0292555514fda1008e685b79c2b873ed5340d492fd2e6efe65dc76b8488ab0b0dba95047f17d71e613aae13deb422ac62e7cdd70ef7556678ffe329e1f585182ae1f4a9336890cf2b1c6eb7d7e526d3a8318c713a79d7ae14c56a4f52cb5674ec41d6c678f9fe3f12ae33529134fc8f6c907b3595cb2ae1c0c9077ad581d680845cb89c033335f6bd6fab5a3ce5643c0c72dc1107d09b5c9d1e4ffe6d04f4de235fc3feaeaa1da5c5f6ce82677af275fb0286e74eb37011f189de96d8c7478698e7189eb14423f676d6251e1e9b57785ec4a632af20b1dde54be9992c40fb4bd6122fe75c1575e965c9238fb5023921648c9dbd71bdaf368a121b637759b5c3af36b89e831414fbf168ecb20113a9382c62f0b9959ecf1a474927486fea2dbe5b62901bcb518b051e759cab9a67e4e7e4eda4b4dedd5f017c2786c7047feb051e6dc2472ddfee1a59eb337075907945430329048b56a09bbc4441abe1ad97980b2d1c2372647929f5d71a51d6d469024bad6de7119ba71bd1b96e7dfabed80f3b974694c46bd1593dec826e84801accb061e917f286d39e9c9a5a99d04f676385fdcd88e24ec38c2eb33044a53d8c199332ac20e1df5b1a16ef8b821f341ab430a1d7014c4e43e8eac2da1a90d73b3d4da47a7d19a9057fa962ab66a75b9ebd7411a2b68a96c5c8433be1e810c4d4568a9705465d70ec9a74bcbc24a22433f1215bb8e79c17b5639a34e34bc19581bf7c33af6314e983c2194a17d525bf7e7d6e94f72fc52154e261fde4a700fc67b9c173d1695512b808fa00d02fb851dba8d68dba1bfc9957654247257ce3fee17b3b5d47ca5b7717d6955e95c34b8548ef2305b8311cd43e202e3166b214fa1151ec9888c4a5e6822831f04ff7794bab7d9de31f4e67e0419c87fdf2156125642c64dcab5cf6c9bc479e550e681e5cf16225d01f58a91d4e2ea651b52270de8722aefaa472568c0402c87565393b4bbfeab99b04526f81333cb0b0598ea829709bf444269833a95bf2fa936b1e8dda0f3571b0bdfd52421012248284995f3387fdbe50869eaad7302311f8a53156e5fbf26837c6f0d89d25365de06ded8a90a3acc7b89519e7fe28fa580516edd4bc096ab4ca2a5255521f14f3231eb79d9974a6223b4e04c3ace7d39bf5f105045b4a65afa6d4f417edbecd39b8440f7dff67137d2acd84dba0ec8a48a564bce1d2d42792e9c849ee7bf6e8a912280f10e90fa7c93d8352c10f97eb1fcc4dc7a16aba39c9265a4a099b470712cf11f4a5d18b45db7091bb7521c67ae90cddd0ecef8d85d8da9a95c5c28bd28e1efaff765c9e3c98471c0b08b52c95877ec6af1d7aa032e52eba4af574e2c0a02a0eeac688cbc207f3d815d7ca5d6c256e061e9fbc11e6e78608d2057e5904497c360b142d78900851f3cb657b591455f69fcc746c36cf1b0393ad18f215cc5381ab3a0571cb90cb8cb25ed0323190cb8e58d2d9a5b066e161047069248efa919882b7cf70082c97f882602a3ad37af82836516a048fabc95cdb4dec0d65e61f05701fc841da96065115a45d5f0e604a3780c01598140103518e273d9d68fc98756a7631a8ed1ba043bdbe785cb1bb55c9c414d455803b57b556c9c286bd28c3ee9b5698c664e2c6c24ce92868d5fa64a8be656d6308729f57c80e244f6fff97415d359321d10397bfbaab01bcb3847748ef157dfffd7c36f2ab285ddfb8d15860ddd84c66fcf1e9074b290462abdd6f3915de1149ff19d658f56e7bdafecc2313ae402ecb8df91c56b60c7770903cefbfb4f7184b61dbcf8ea28866b5ea61ced88cea823a97f4091c63766d32d0fb6e3e5f4dfde4f56bcac1d6579aa192e8dfb4f3396c8e28be70856cdb62ded8923a49bb91e7a116f8edbdf880dcdd78c6dce3eb3c60928871c957dddc42945570e2b328071ae148256c9175a063e2a85e22f9416fa2f565e42910cf0ae14f76ac2e4975af96f7e7ddc0c4bba20098165fd9d60f2626e17e7a3869bdea88fb9b537c28d568729dd5e5142566df01fe8584ddcaed5697677e8bb16fc224a095b822772a90f644f53121a0d9aa9e96d1fbab754aa94eafbd70cf9dfb217dde846b3c50ff622819368c0757c68e33e477f2b8e0f5e396d66cadf103533cb85b9a087bafa9c3968a9621f3745fd4d724424f73ff9af618d5e639ddecc29599a2df2c9c95128bb8ee6e7494b973d1a867cc983b1972ecf3dcc975dd8cc74ea5e27109fd77b3ad5f85e8198e2e7c9f6b37c893f0770dbd75841a68193564a6544499f4d08c51b8efe4a2c0173ba0d8e75188004e00d934514a721238ad61b760ff5df63aaae9d2e5f9051244ab30e561758cd21950df3f85b9569b3321c473545acdb2f5f651a375ced4d6cefead9355ad750583f0e9f898ce87c600fe140ee9a3cb5da81d0c3e3c2a42e7bba84a0c5732c7d3bd64eae81cf8c3a4bcee7be7f8399ec02d87483f711782bc416ddd1440466f6e3818de4f1f932495ca8d1e83b1085658fa1ebe360894e0cb15cd37b6ad538276bede9ca5f92fd956641f616ccd6119300ef00440e543a15e7a5547a4b5088c12d5619eea56d8a1a79c083f90c1f2965b66d03f0da3e662fac76bfa743a61ef1873ec95bdb9ea107401a22ee768d63a604b562dfe5e950a3d15da1d4ad49e85e8828be018f8ce4d7a94bf90c746d21a431264c47f1fcc18b3acb6f6dc2c2238a222f4558da458e5e77879d9aac50ac75ff0d3433ce49da9a11faaa529baf50e8691bd9ce3f3db8614f6d947c07fe9b37b907adf7893f5e3b5053026467d6454a2d007fef42b811b18bb39c10f8559a0788b7efc12644498589f516599631e588840bc332e38813230a40b3e1cb4bd061a59c76a7ae482190614eefa29afc6f9be01d31e33a225cc787f9e0ba41eaf9cf5f268f7a2fa4aa45c00d89f73a527160ec304a6c37250aa4b10f8bf141a280a8f7b70242e35dbdad271714b3db6a02b2053dd32e21e2a42ae6e02f7c05d778009a4d6f40469b837fc0fe5c46dcc83b4b027b13bd53800344918d24a25b68f89326f70119b5bf6888a9ff2af11e4b0faaba07823d69dec0832aab7b23bd96afdaf4704c4d2fa72c9ecb8a2fe95a4930d635f2bb6910a39d23de2a512032920a3f5e91ab248f227f1baaf766e254ac5996f425f1e7b9c766491f361d4220e73c57aef61a4263b3a4c5c6bb34810316aac44a35be8267f4c63b4c053f4e7a8f3186fa219339724898f8d68c67425d572a897683aa32912b9993784f9a81eb6e6f645c2dc01a11b403d63fa107b8f24b2decf9783c8a7348476f4406ffb8ccd07151bc857d953c00c015a3a1ee1b6f098c5e7aacc6ecba3aefb1ce5dde8a24baf1c373bd55eba1daa608b3cb05bede05ff09a8a55bd0a493264eb7bebbccef76e4749358ff9a78cab4be44b116fbf499c066c9b2b7f52492020fc40e3dcf913333f3b652771afaf5f82027f1bb5c0194721c2fda2aca6e0f111294bc59bd24d6f9c2c3f0f464a40082e30f73153bbe694798f5db0ff2bd502bdfdc93fc82bec9f567b5cdc3144b7ef70c2f29dcfae4525423a1080851a988d6486a55c284b38e9d332efea72e942f4a83c9bae258284a5509690c78843d5376d1ed1ec34a3d9dcb3005a9e1bea8e83474f5ddc6a8b0dda36ec7eb54c7ea8babfcaecbf367e1ace4c3e4306c6d0f385e1862d367744fafa2fe9d58d0d94752c73eeb040cf40491f4c6dc1de637536ed0e426698839a472622bc6ad90cc848585ce0cf6ce7d47cea17eb05ae5f77bc092d7705bdc1facbe69f394d15fa50b5cd43111819061945361510b2c7e0bf379f19715fb62b384dcd4ee94fdc2589294bad66e9d7fd2e63f5c2b123beec27852519644fa0fa8d22dd3852b1c930e3b1cfa928b197dc2f7012511e99211c12437d0e29684261875700da01413b766d898be13261c6f399fb832fbc925d2f8b63af984d86d2added5fe18f8346892d20fc04fffdf7e3f3b3e6e6128b1b21227ecd844810b8e096aae0e389f2645690564125a52b979052ea1d98d24f83243bdde3fa3997c3b5a9d88e985424f496a71a2275ea12f780c935efb575676e3d6f365fa1a082807ea1ade5f20c2374e628dd0bb13ef57b83e9b6aaab5d2faefd400eb6141219e3c1f47daa5c38d28cee854162c68e42f16012a6e59066dec25ff385bcfdf02024052a326d095ec9e314716950d215a4a7d7ef1b200a651be03d6dd3e7959978bdca81fc5311094f8c219f0b4d51c586bc37d1ec323030869b1b57b48cfff23b62ad8250b3804cbedcbb35e46003e6d396b58a69b36f002dc9bf0f9b58d94eeb23389db270c4be9fc36a9ad202df2d04088697a75a2c6a28ae06c83be8dee0e9fc459ede64f94e339b94e056bc35ec90ac51bcd538f2b3366e987d007b7f20e76694dabcbc22a8a1cf540431473010c786d2e2efa1168b6fa5788627fa4cff61a5c3cb9566738b9c9dcd33f3d8fb5feb6b5a329325a65fddeb809baf5f3bd258a5fd208732066a69553e0ff7ecbdd326764b38cb5965132460bef7aafae99d96a0590efa88b5b8489536fb06eab0c47e54b856a842f3478a2dc3bfdd37e8540ac2f38a2e7550d7cda045548f8d0e33f00c8b1677a87176335daa37335bff5620b8ad6a05f0a56094863efa056ec19f39d980ccc2dc9f34f781f695b0dfd881db4fcdc4d619bc3b0545735bedeb6871e05c8a81d33fff64c04f25328163b0d5113ca1a67d4c0cd01692cf477cf1454f7d77ef6e2668a0d68886cd14f98a25035bdc12e9261769b5e225622a6da375a83e9c6acd1da8302b0371201aeaa01784d535b2044026e2755709a96a7a93cd027405b1e8efbdb517a7ff6ef096fa223c44d10b961c93febd52b7253dab8dbc6f35c1cc42f7f4cbdac7eebf53355fc8c66e854d2cb1e2d29c7fa943064e5dd094f9c6697e0d9f698fff566c8e8c87ba9d049216a1a8700949914048d24170097b7d8702568b4426daaa9ceac697dfcc748b2e9a8da7a641e8efe004addc9db9e75a74a180eada705e6637e99fb8dc161e1d34d4cd39e82a4d11e094d5288eaae3000f44282585a949ae7263b859bf42f2b1553823c87e2ba9bd0029f9815b0024bfe6bf51c5441139270c434baeee3847a10252516f6d8f5e5ecd53cb6410af579195f52349799b2a675596da8d69c56e9dec4da26dbafc734ccf48c2a84607b1cffe76f80cf853e6c1465a072cd0390d8b767e5159f08e5554ac2ffa8ed631622f6f33360bc567ff57ad08ef840c9eb70aca5dc5d073a59a09322be2b5d6b52c44dbddf5165e4cdc1a904da7c98f889640bb5e36d40c4922e2b6962fe942ae813b4a2cefba8e199d3136198aacddde37024f086fd7145fdd01404a678514a71e64250ee2532fdac8ef45bfe432c8b73996637573c7296d4e9f4b0c7def3d5eb26ba15c9c885b83fcc8d2ab19692ec0969120691f6a3bdfd50b5b8bcc0cb1594f87c9c9a4ccc6492a0fef349538d706d27bc21b3784d612eb4d763c1ab1c1100017c50093364398a43fe88c5cbc36eae18520353b691e25c145d908f016283845d72653df6cdb083f249b349981a91b8b80b7c941441d7495bcc7788871236b5f40ab3b1487d77c0f59596ac137273f9570654ce95e94775ccf0d4f4c5e290948ee2b7b837024029294a81315e504929fa48ed178852efe512ed674e83212894e9816ef596fee485f335d6adae6c7ceb0e7b074c13067389806aeb11d89c7c4f0ee60a340e015d94a5c65c9b256447480085a957fafcaf4b76742841179ea1e19cf005933929508e392b07e42dd4fa560eb8a062131aeae355189a42e8d04b16f9cdb2a67bf952aa5514b315ec3e7c0d9b8748f9e0df17f979e45ea174bbdaeda3890e69360f52d1fcf01c36e1059a61365e3f5060afacf11381f839d9c122f444b0e5fb31a7403359ece8bbdd2650963158af119ebc717d2f31cca973b80755684435f44ad2a6c2205b5334a1cba7d9650b6f06aa239689e390afbb0501c17dbcb41c211dbce3cb3594969e1ab49df0406a1abc8229b9128419ba90387d16edcadd1ed6fa8c58e8b0138e9b0d37e0950b6cb71448e958430d2dd920eef610177285170d8c10725ef6e4402057b35bf6840bb5754fa1bba6326ba53b531489fc962154975f5d15d7debed60e9fd63046524a36e11e99b52a446961e143350b36f8a9558bcaedb4c43632244249488e329fc23730de337eca64c3c67d659b809209a93db8e4bf313e4ffb00f3b8369f75290e667228b5efc73d55d1807876531d47a9b5d7584e9a045d4b3328417527104ac180af897b8e29e33121b2712a7a75ae3324534c4f301e6d3cde008ca2d73bcd7697694799728b9b7b49449139ee52e47386dc7848c2e81838eea3c012cd382e7bf6c90557d7c4c4b2a23bef4514e4a3becaf58ec23890fd0274744b6023c862faa406dcae990bdd911d619e96d6a0cb61ba9e4359f052bb292d82e9d1d9f52b05638c70ed4e73f51546fe1e6c57b275b5a9ffcdd99b6613837ec8d58c4889a5fca3ba27bf5dc42c069cc401674d63ae5a389223fd2e2a0deaf7041e2f07fb7ee4f0af125f7fc4f5d0e3e6cf82b6fb34e46201d318bc601b6e0436de2baa9e8d022a66d18378d24f52b58e4bb645eb50ad5a19dfecc5b8270d982bd509daf11dd4af5a6538bdffcca52eb184811cb23c6ddec17fa121ff16388f4db6c7efe8c56741460e9da6722a5667792c460da8b7fa3c65f06c70fe42c9a00bb1bd84f5e7bb2516d09e9d4d17185a10d9c65703e94580812c5afaefb333aac483e329fcfac57591f813779d6d118c4791ff45bb3ffa21abd63af594d94b5dfdbe301c68acc6275e7ed77f2dd5ff9702b3051aa7c66c644cfaf4903eaa64901db0e4a42551dcd4a42773f6cb5629c7fe799aadb347a468760df0e0e1c22ff5b2a4212259a980953e1702ebdda9966fe1bd621914300bb80bd04f0f64aed66395d37502c3c07fd39e1e9fb41b5e4b5317ade870f2e72883d4821d4be19c1b9985cd48e91050855fa0e26797d4e546d42be4c10106d5bdec071a91ded386bb3b9100b3a8134e63b31a5a997bb7be9ac2562911f91965199a0e680cbe2f672093f80174f14952a03327befdb99a0f88bf3e0f7f5275176fc1df7be44020e7a3db7e2c57c7bc9b5dca129ff45034d7bb60fec790378a7a45b5d237dc29439dc76a308ec229a2b68114f33b85f1cc30cec3efda40d42a3e96acbeba2cac834bb6c092c85182145dad2f48dc9f7bb5d0b80264b00dacb7273223366729c153446a180efed36a2ce4418c6f9f4a8897219b7f2fe1293f78cb807d8ad86747132d6921a3e28b2afcf7739611266d0d1015e5f9f59c8cc5add7090019d26e0ae5fedc348b22d06f9ca70f6874350945e3dd79ba616e2071041e8f2660eabcd6527186e3e082fdad41a28cf8bfa0e0ae26400d47e74984608d853b676abe8e6ef7a83f69407cdc66170e9d7afe106e7f6a269bf15595726c199467a5bf8203c34801b7ace68c0025f386e7efaf9d443e11d855c12f02e37c79f3f11cede348741d9e03c8b02c170f980f2046049a694c4f6092fbbdfc6230a7b49ee594087a837fe1323d5adf03e386f455c0a9805fd5116db0849a9325c91ffcd90cd7be40873c7097279ce0e82d4e3c8599adae1120e315cb9b2706b723eda296535b12e07129a93c02521b4b0cf6bac76a98c98cc16ded5f92aa342fde1f1259ff15dfe41299a173a067d7c516aa779818d36977f03883d75639a624c2faedb0bbc45e94f2ab7f4618887cc3061b3250dad49ca0e9f03e19cc840b9d591514ae223e4c67417ba228f26b995b34b082eb7c0d25a062e4cb200f9551f1703b182fbdac43817e59650e3e6e6c8231777b92f6218ec61ddc6ea5e91c90f9adf996fc590a776cfa182b38c8b286caddd39c886ea0358a25ddeb60f4386c4a09c9dafbc2e061871a1506bf25f90bdbf27e66061a23ac5901756eacd95015a2c2ad6960b7183d1efc7852bbdc59f5215a5170fe098627dd213898c2710775bebb822dce9846384b2a77e4b18ad9e22591516f9108113adef5e5990a881e79eb404ea60763d17f85a62cee67c5c10000e6adfd9d13e5a13e1436b9c1797c0b645f1daafc15e3a23b4f31457c45f7015d9f84d309063944614e0d3f9c9e3eebbed1bec88e3fd2311f197fc6e78b9ece3a7628f085f8df2ae1908b8ee1edd21aa88f5b47a80d2f444cfb6594d23ae2002eee29ddf00a364d41cbea84410f20ccbd142754d16dd6de6cb365b7e5497828b80b21a0b49839889419fafb74b05bdd36d3cfb4f7a8b639b05ebcb0bc507b8254e42de9a21ed995eae1a6821fb4e5757468e5e60d31f817d04768096bb518487040bba4a0cab73a3a3f26ffc502ce6421755e6043ef7304b78d7349368b03dd392dffd0692dc5e80dfecbe38c0166f1a46e9f18b2355d37b9eff06548faa02215c27614317430e178ad15ff2f248674567afbc5eef79a8499869048c010770ddaff096bb3f5a6eecbf9f97b281c11fdf633d932015e00a08fe9f30bba79f39a9f54d58cf7d930194cab3dbcf66687c3252ce9a17fac3c5ff4a12b9028386c62c0e715ca2aa26f2944af90804f879a36277f048ecc3f9a20a9e2e99b3b76df11e956dc5a4c36227b92da919a6ec5bac16f9036bfa8b356409ac1dc34f3f1884fc4abd465dfd68268d955fe4457b67f62a360208d80db19477dbc850cea8ee61a48c04493e15684fc2677fd4ce6bac45b62d896682b74dc0c4dec48ba617de62c54a51000d12f13e2a1ffef9d993540d2bbcc6306a3bc71d8a0d41058c560fdbc3333933643d17936edd52f7085195b16ebd31cc4ca7ac0f796758ac6f2684d845ffcdd6198511aa6e9b8f673cd66cd2b303accf2262968c057d8aee10919db70ddc2b7a27eb02fbaf3771d08d0a7ef5dd539e62e5b97261e5ce85c9fa42b5b2aaf7d94419d00278d113e08d0b53e761492dbeab9706f4cfd0c78cfbb3f204de9a9c3dd134ace75a4804587f6040487a404d572b7818cff0710a148a984f10c896f821c16782cde409f63b7f9d7478db87ae4050f08e824765e0461f107b233e9dd3c4b53f085fc000411a5243a85825dd90e162733c600400536cd1b1b4976e8895294512c2587792566da8a27a62687909d54df27b8b654c4d2383347a754f5f5a4bffc5dfd5e43025bdf2576bc33319badfeadf90bc009f7adc4e08fba47eae43e1a190c5069958611c9bbc1e9243a56bf06864e68ba112b2792b36ab2cb6ca363622921dd5d1e9352f4e73d1cf8dde3abc3e9eb1d280c09bf8af0387490db176c071111662515be8ffb8310468e621cad779d3a0d683b690fd1b3802348ca7e85c9624fd402c5794966a2f17b6de84243582562ba529265c0a082148b7a2b105d1ce3d4bbb0316373ca6f5c3d5ad6fcaec6f1feb5f8df8e53be4238f79f2d116fd20fd3d24c42dd25ed910eede0b586e815c331faaf05c79c23eae389fef631abf144c5575bf7b53aceebe0c33d9325637a6ddb878c107e17ee3849e38cfe85e6dba814826e1d2736057febd4e1317b9626ae04c7257c5a34086324fe1b40e8737080dee3a2d0bd6e09cfdb413145ad75f1f2a5e20a50eb75783f1b09326da6bfaf02dbe90cd68be81df271b46714a859f9653387221bc2d0fa95771f19662fd2161089e7510ddc9130f270bae6a683a5a16fcbe719465c0ebb63b30ef711b396c5465b042347116ded26d45109f23f170e4163d14ed35b9e4dc629461da6eca74a203579d2254b308de5cc67b64da9fb33f5b58175455fd9340137aabd64fb7126191c09d73a6ffb86b06694ff755dca3e97426449cd8ce8fbadbfa80fc15ea604412dc3c1f14ac77b4d783047951e15b5e73da4596312b9ebbc94f51681766bac4dad4d7c8f06313fd1610162bf0ac0326ccc1ac088d617b83334dc7914cd0b0acef435779e97c6de6bb5b00ba32f11afc35235cc6aad603571b0a711f8161315f73b68a1c9f9707862c6f3d213e41ed60bff12b20f8b35cdbc9a9f6cfd45d47c9c60ec4e8e5cbdea10edc964a35eb2d4d86ef54e7b1f416771aa0f9adb177812a48760e57a9e97a2f16b69a6db57ca9ce0b824924d58ea253be27f002c045d195a02e369252374e9381508264d3bdba1b64dd4918fe0e42139f0d1755456436e608610af0e7226824ad6202b28adecdb7464ef3421e0edee745a7e3e9675a766a3d982977a67f4020103cd57689d0c951d5bbb4370543f4b60ce404e8a1f6bb45bb0b1b28539a9548bb68ef46456646291af9e52902ed12f0486f31ddc964ea688a8abcd37e692e3127efaa693d52ef249dac23bf5b048cf2fe271955ac35c1caa796668e23c842747ea5a3630079260057ba7997b53356b4d387fea45f9b7ae1a9af2a7096a414400810c4e28b7888b1f955a9a4d94294269e3f0998dbd454ed73ecadde5366eafd1fea8a10144e79a555cc8ea14e0b7e9eb020aa63b0dbb0a942049c3ebddd575a82151ef1f211759fcf1e57ccc20b4bf11e349fd4df37fa8cfdb5435e0b33088c10352a8ae446a24275f114c56de13b6ae7ba145e2175be7af0de6d5cd9dd8f2ecd8a646ecaab5383ce6b75d676577776318973fa447e6fafba1b6c9de48afe85d5ea42847d84225c8abe6484b77a90c912cd14542f7b22867a06746f08688e4a3804bbb51fe22031c43d9a43e9e2291dd9e3a756284033bd3eb93dc753cae65ebcecf18749fd961d5ee630709e21de6f12776beb4d4e3451ba352dd9bdbbce11be4a296da2f6f38b3ade05a2941d586f6c3a649dafb59ef2b4dc1599a45eb670fc0992efa65df56e2e30e22b15e4318a723295f1740083a83cdd5f4bddbf5608863982d5218a2e03a002f8c54a37ea067ed52c0102d8c8c43c8a97d2feedae2ae803df099e250ebbeb7085997023fb671c0d4ec914b54ca6f81fa7b1fa3500c5c1349754465d83e4edf2f7eacdb46d6a1a08190a649c0dfd03fec308620995527b8c018606910b47c4bc4e63780e2336f7d38d1e319e867a16ffca6f4d51575579a6b966a179b08b13c64c6c575634dea1de32d11c56799228b9a360e8c378ecf73a42420b329876d92fb3603f1b3e5816a53cb17543fb045019af2c50c8ce5c1ba0acc219cd9b86c25adf07e86e03fc5af0f2f7eb179a0136c3ad0a0cac21d0c4a3e48de182dee863bcedda9d2e4ab22f01d2841a8bf3e8ebc67d72352243414b077b71fdfab4776a50174589ff834dc8529d9dd1f2ad883b6ba2ac8e77b3c47a7e0d276f242390918957b3545d9ccd0e9a6ddbf4d5b0b5477a89ed7c57b16c6f1a2d33d558c6cb29cea439ca0dd7da68febd5def894cb80f93e96c1c2d974671a22e95e9abe10c6b4c9e9c88d83da45a84eec1ba6d5f0a664fd7d1608b06bf0deb9efc8a41f3a82a0f5b7b07aa77d1b86182618ee0cd1ddbc79142dc1cf891103a0cd608a9d6e7be953fdb3131c0ceb9a0cc4179ac0d04e70686b2a8ea10b81f9f795dbfa5b928e24462837c4427c0d5c65586ac3216c86101c4ba3fc575f99514d4c69f89aa51419ed34d4e211aa6588881e65f7da205278da41864a4c70916200580be5b230034c2508cea2db380845042155bf78fd91432fdab21bc0027dea17cad6ef60cc1548c721726d5e6a59b2b37583054b31cc7806f6fb44e0f8ae60fa6a5e322e9b2d7ed7b781001f22bf5abe7bd26c46eb8c41e110820fedca6ea48df5d4930a0614eac0cbc22e922cc69908d1a045089f7c9c381efa0a8eae5ae4485969d76818dff48f97fc0998c6e136cf86666a17529b3f07d610893d073dfe1f63cc8e9a66d5086be1ad3f012eda4e4103e5a9570cc21d4fc3cc00f40d463cb316ba59fba220003bbad91893fd1941a04d2b5f4edd6c0b3f0d60888b688ab459df7b5193ad981a10625d48dc473264ee9b0118f4e5e09aaa28540280f6cb2af284143da8649f5cb1870bbc94d5cc79fdfcdd3cece450f7d9f76cccb4f400c7acaf02bce3c9320b22d2ef2db44a62b5b37f7e950461cb26a1885a403c92e33a4234df6e38883ebb03c13eb02ba90931e46e9be609a6468fb7e222d4ff199758ab8dd03528436c97f2b63c3171d45fb9848459abac212b20331aa9fe936e23b6821136005e56670d96b7cd62aff501ba2b0eb7cdbc4f751ce34cb9d64751881965d5737a9f2885d1ed998a77da0f6cc860bd078fddf4e80d4ddb91be0df8957638e9a99877d767886ccc82dcf26a425b83963d44b1822acf3e8776558dfcf2a31a3f48a9c3dfe4550061fb98956371b7281862458b68bc799d0327ba588f0b41a2754428dd946a966afcbafab368a90f5ce84aac553bcf4672ec9a4f4c7eea9fe22dcc853043de5da16cc28d94257f90951a5e2d54571c6723cf2da2a472a2a2d62de50521fd5d81d4bbaa9e54a0d97a5045ca5e2eb146683ac5d20799259a39ff6a2829e33c46ac8f6498c65a459a04469a176c953dcad1865156fd86272faa50fbbb48960a8c7c28ffe78e2bf09fb2e4c5e4a6afd5066ea77a2508005e5efdb7f6edfcc8bd2a7f94cc4a67d9c811f7a3900f74c8a5a5b7b1b661768784c263842ad77d6574bf9c3985336a8b2036aa49f9f3ae98e1d84847f1ddcb2e6fcfb957c5fdb540d33eaeaa31c3a67fe8ff44661f1121bfe8314892304c33bce30a339402c2b1edbb920fdac22a4d0fd17f7f323d377a7fda4148c101d134cfae7cdb361aef8e40c235c094a36d4511ace125a2daac95fc8e4703fa44d65f2d2aff0380d19799581de9f507f81493591d7c9fce90941fa7fc5be9dfe2cf881b41972de130873c0853528b19c52fa4c44c4bb2b72ebc45a53d2d74fe27bc1860c4c659175c8ca34e03dae080504c051660f68925b15b82c2d5827b2a0352dfb14eb8d796a44292debb561c5cfc4cd1b411aa9b8105ffe538117f846fab1fcf0f02138e965ac5b6f003df71aba406fae6e60b4261a9c2b5430b14c5252c729d8d9ead1ffa805436f6fa0e007a1e4a6fab599091d137c17f7e13ae45264b807f59126e8c60783c1c2468847c674f6fc2ef936821b339e82897df2b23bd57c3e2b346a36078c579e2b9e774e3100aa3ff57504845a30d8c14075a2678bb57182d2be0d45dff752a0f776eebac08fe5d3273a1fca08be126732f8df6ff845f15c23fad0b5589c54cb19ee9c4b1d7d994b1002f677373ddf503b93bf4e767c023f805dee7e8618ad823d1189254baf6c83aae4ac6dd2fb55e2b3ab33c589dc44cbf62b47bf5399b8f0d98b0e6191bebfcb3473ce4b5c5d24d0e518e2ff62dbeafb092c60db34e04cfc5cfa9e53fb54f9035e8176679cbaaf1a33cd2797094c827e604cee32fe4d7f1240a700f5e2fa225d1846e9dbb021b01252366444ab0728eee160e308e4971d1a1009abbe029286b3b35655d22e6021ae3a9dcb00e6ad58d902681d08079888efd274bf3d896247ffa43d2712658dd3f365f848249f15ab946d5768885585c639fe973b1d3d75535875bd34d7d08bc587701b33dae59d7388cf6676554f63c1d089c566c4f0629a7b2153b6b410a580a8f40b1aa4e5e8d298f6d11726752882ac73e03246b2ef56f11fbd6bd50f953cbcdaac5c0ad8be24aa16adc60e2be59604bea5b90e1351a205483ac7121babe5c8b7a1cd76f2cfef643a0e13b8f16b3d2924cb4d8389ae980090905ad8923900163af6bb18d7e229acedf54c1c61eea96aee60b231e5e7cdd805faf334546d11b14def361676338e6aaf47dcb80084f136cc3616c85ccf26254a44adbd211e6af7afa1af4befb5615113806411ec6b38e49a04b6225cf8c72b5f7105c5a86c38a1bfdc126332ac864787f66d6d0e29a2043b3b7f8e6e213769cf53ea8fc312b37f58ccb6bf390dc86796f56bc6af2819c3ac8f1559c95477c7adbff68a3e714606186c20ee082d7db85be6c6eeae4ca7b7c61950706970de155096ad177c27407bc1fffaba8fc910614e7d86a0d257c1c193181d193c57a87c9c12b3d15f566d239e4288d00b319fea44b1053ce4c08274cc7cc6efd6ddc9982d9f9027db0dc6fd683c89c1395dc961bb4eb32938abf95924319dd48e230454b442395ff5376a5d515db89dbb62f8ab393786db8653de10dee702c28119be35659e67a3468afc1f1f7c1502263cd13092e476a235004b2188b422aec6ec5ff7beb4d00f4b4c7b75dd693edf757b7680cefb788a5296ebf98955faca611bf692d28f5a8901b6882dbe30cebcbd1feace50d99d49d2e8c9fdd434c7c9b28a7084fc452e48221677779350c3dfe7477a8bd413202bf46a52e23497d1ca65c7ac8a3b96a919a60bbd1409832ed69a39bddb2c1f87bd19b97ed246651eec188c6e0bb0cf6fd7797d9a7eab2ce8f1f10e7013e0f4f7a08de69bc77dac7df94ac8edf9d55bae302b501359a1a26af900804897168a2cf48891d9d57b9a9ebb0c0eea2ff15b90d03bc9b7c51ee61f999aa7f9510060d96502c159e70214a2d753eda22fef056d1ac4a8c951e2bde3920eaeffa356b4d584ba2816fa9c1a4abb8ce1dd266b9348be7b025b71ffbc440692687cecbd180b651268bf1ae70c9f6e9d0e1ad5c5ba7085284c6451df4666b7692bbc51c2f52702225572ec6c1ee372d30a5686f23ba2b6fab315779f29d3be9f24b8efa0bb8789fc1b95b0e72fc8b74e3c5954c573ac8e5811623cedfca75924466ff3bd13990ebc27640506b7319983e2f672eb8ff5eaea629704dd8340c3a494fe4e0dd6e06a5e8d2bfb727e1ec762a598da7cf314d4c25d6076167c685c48948b5c73ddf997f76b89bfccf60b2e6e4475979070dcd94ca8201e7e1f6afd6458cc0e6f9d4d018b719599fdc1e9584135068e0e77715480ca21ff874b1d98b1ef9e0421b17eaa07e1ae5e17e1f3a5f81caecfde552db8903cd0485556cf9b10373f137fdd9bb2faff173f04d5ae9a2c31688bcc45df5883b08a582c3d11e96369f91ab489b44f7d0888481bf558472a654fe6e5b1e8ef2c07652abe671697f3b9b1a862b6c0c6c7d4da90aa3d4ee66936f41dd8816e8c1f8a25dadc1f86c23e9a6d558ca84f2c1e6ef44afc6335fcf227320b4bdb8354ae2159654b5381dddf894810e13e324790854000022a7efde6b2fe7343978a21a5aa27b836af97cea08409a7d752882aefec8138984912b109bfd2b0e6414b8a5f169e7e7545bc4f8fc503460ccdad03219e56d696313e1182cc7656c70a6a2e3aa4722bd3be507c0d99e5378e7440120f09ecde6f1995f89c11d79fd56a782178f5079f19644d7775db1d5d9dcd0b165ee4056822c25533c659eb0f66a0f5fe6428aaa7a440b301b04091517fa90184af903f63a3f1afa5c36c81deb956c6ba3eaa4dec3a4b64620461f8c95429e97bbdd3024eac3f0b8458e077120a59170f85d4160529364080e8875040ae979e56f2e0f53eb3d04678e617d58b4fe04e6d71e3b0da96b2429fe9b174b7f9b5ce09f7540aec3639420f0f579b51738f63db4b2b3a516ea7cfd6fcbf78ec286a0ec3a5f18624103d5b5956d66866e36a47878e2e0029f5dd3ead38e2a1d7e2f67e690786247be56b61c4e628cb5505e109225c937b4debb932e11bdd9f5c24f9afc01f98dbb206b4f191e99165d9cfa0b2470c809e19b82c00cd6a142b838ca1814a2ac3d78bbda56f080c301be28c1e557626b0609dce5492b9de3246f60202f56ccd5ec8187e6309e2f22882dd131dc29e89ee7f437f488517ae975f63f9e5303b6a9c179a3da01d69820ea4e104f13a8af8ea512fabf11a1a65ec3fb5de98a5f4e4eb2652cb5afe7c9aaa32a205ca15c21d938bd5cb1d899983f982f86245cb971a990935428a263ccef0fe1160c5d72de0a622546866a30acd13033d943518485f17a7e204b84bd0d57c105102310e25a59980a970868b3f8ede165bcb1f56e741f464fa18319e2a2bcf264a0532c80329a407e7179909e3f9d3c3334766f00cdb06cc6793fc23aa9bea6ee8987e41ea29233ebe7c97a7c75e087eb4e539f5d35bde8b1f5dd5dc5caf3573826b857b4b045651f99a8764f5c31c6fcfb7a9acd8982ad35d3b79ccd3f460343044ba782fc176a8166c4d62e056a8d1afb8732df43d87d3c9b65b35d550661b3efed7cb12f62d0edf241f3083534e333b57ae813c42bb0bb8d1cc96f633b2ea832b4b759c7c05196eff58f5696e315404e9aca4431b34a507067d6211f5c00a3064fb3bd04d395a31a7f21c4e3dcebbeb058d97ec8a820f33a2720dc5b9606576ec16a3b2055234654cb360dc611d1fa5af5f1744468800bfd81ba18a77c0c4cca78427539f3724ef59ccbf580ab1e9d42861cc8030fdfb7d9ae4d4900a26b826378fe6ebc9b94f7614f8e13aba2913771d1bf7ca399bb634c75b0a7aa01489bbe16a4f61496ff4dd065bcdbbe4798412ee9f6c1678d021c07576f198f1744fe0cc6b0c6db8bd1627e6c98bd11690a5aa914f780220f6ce71124a821763f3ab95f43fab80cec1de84175cbe53fd35cd3654d26c92efd90394d615b8c4651212f4cbbf31bfec98bfbcc0afb300d087e10b259b2dacf0ecaa5f03652a9172d9e8666e0222fe14658a9d20675f8b550daaa388da97e123a84c261ea64f84995dabd24ce4a02017d41b64d34f56a9b7af280257770dedd285b40bb91478b8641ffe8042d22ce4fe44cc8809321e3982794524e97e366cb4aa25660093f21686f5a2bc7e477b2913e08a7b793333e340db55dde9a9971a3f27f9447811a24803282db99de85cd275f7d3924fd33f60d6696a833a09107e5d740f392f760bf9f2c0aad2b9f2433bde538c72d5d81351f2fa2df8cb7ba0ff4966034a4d62a30bcb03a8a80ccf5a2bc1738808dcf5f20e80ff9710e1c7efac89df394b997cb36c0d1ef1cde77ffa2bc1505ff01bbb7e0506106f66a7675f414c3ab9cb3e0c88191fabcfbed3d96dabbfe4003ce592b20e4beb3c3e733e985d4a13b9ce89b0a77c6a552fd32cba0384531a87188c8d093b42b56997841085608d84f6122187fd8a2c4ae603a894fdc6edcb9a9d491cc705807c6e53bf43530ec41dc5b1fd57c1b6eb03694cc2152e2cdd59ba396ece7137341d0826fb5ecfaf39eb0deea2e1cb9c6cf87095479587e4ea5bda4c2548d03975d6f682de2b73be4724d945410b60198be060b8ae8f5a44142b76a087e2b0db4a7beffee551380328f528513b7a61ce82e2a1c4f627a3f4e751d9f878d4ae55ff9fe744ef6c4081f9f302953e5df04c2b6b6d0b4e2e6f4bbeb1b5706b306df28d48b8ffcb5dfd1c92db8a948aa2973297674e2af7ba960b6ec460bcf0fbaff5961489f2a21ef259a6038f0340d8e8cb5118309eca9fd9fd8109085cdc2e6f73c1c31efdf03bbfcf7988654f8f8807d731f3663521eb5d0b7e1a70edffdb017b0c5e75864dfa7527c4e205a441469d7396be75ff0491fc5ff1b4d0b96c4836d508dadbad8990332f12b3d4472fe08f1bccaf8394f79dbfc3b3a0a061d4e237129e17704d6ba4d7d2eaa15725562c7a1c68ea637ced0cb8197ce562b10d52f08f099c5efb2c7ef6b9b4fa30933509ebb86f77674638a7ce2cdd87c178c0fa1cd3a0cfd9c4455b671c8146db632c7f97a0e7491477f0e5a153d0d2e4c96a6262176433c3285f52cb5f7b621e9f88baab4db1db81bf16d559c4f2c6112bf6806ba717e739029b1c06cdf7de692495992e605bb07fc451770d17bb6bc4594ca4fe84ee83e768161fe6cdbe7b9cb48d9179d06c8a2f77564e9b8598828dae7fb3dc31e8ca5470469cd644daa2f373923cdf1aa5fadf4d6a4abec1da30791aea7ea1fd3f612615af96977b62579b8fc1c5b781e41a540f89acb005cfbb06b9404d6c994cd0c3c93954bc948b76a8f164d0e3d4416ebeba601729de6cc1d11c249fdc2a99603e2663663a0b39148074ac2e3b469501f6415c7ec497d7c0597525825b1cdeeaa33b1628e773b66bbe4b0f3d6e22d6b2bbe68ebbebc9e3183e67b271c873e0e758cef3e11ceb393c9cff1dedcdcd12f5d4ac7cf970df8d068dfe58801513f441ba859465de944b232dd8b91cb5e5c1291f72f9d154fce65ea925d5d2021429ebc3470e3803455cf9c147f6e8b1810a22f814f08aeb08a0ec134dd1e0833330dab5bead37bb0bdb7a5cefcaf24b09f33301ad4d172f05fa78f50a7ee91cc792805e8fa5fff68971c96340e220f2bed162ffdcb2107b1170e06b3c5d4a71ac8013a41ca4d5e707e565023f4e86cb34cd4fc6457c295fb0585521310ce9835806d6efed28d6f38cae11ae435a80de07f41dadf2bbb0f1ed07ae542af28d0e1db30245921e157eb7cb08501e4aeaf4d7426e1d60ef1e89e6c41e696e73347750476a51312e56b8ac74aa7a4f946e5572d80350349d157cd9d87c04d21cd7c96e733d247f52c5a5eedde69a18fd811c9b7a8ff65c7f622710723996779b379d14eee0499026ad58c7b8a547188208d865be9cec7aa0882326b492ef779991dd713100d6ec8c3ba9a531effb00d2afa68582df466219c2a9aa9c6992ebc64e219811ac77094c96fbab0a43710b95fc454fb5785b6a99faf924218e30f6749ce2d68717e027269a353c9910a052c57696649d3dad8da37c4252599f42056ec9ebe855ad7ebd2478efc3dd5b1225bdb357b5784c20d76a6d7df41b8ef38c6f18908c266b599e0de73b16a2a40529f9a6933b3db5012972b822d8df3c56e27e857891892dc89043e9279f61f7c39a5d6edb1ad66533375209b7fac9582f8b14c89fc90d9d77032fc47a117fc7683387969111af2c3665a186273e7c8bea2cf7fa11310c2a310a6a8b79fcd0c45f256625c8b99478f5df29554f38d23ebecc19620eaf2ec4781bcabcc99fc054772f9e56575fb43286680f79971148a20f5bf4d346c0db23d77c95e4218cb1c96b4dc48fde3b79cc7bb528f490074ad69b97220bcca504b75feb2a35c7d17bdf729ef800ff7da513070651d075165c8151388344325916dc242bc68f4cc6d039950acaaf64954526c5189de5a9382a5d2fa777b54f221c0605ab1f1bf197876d8f59377cd680bac9553bf1d3f8fca1afb4c2333065c405fe5f95a5e646237f5a8c4e18e175d390d41433ac4b4d9494e5b39350b937bb312a50d3fafe8567fa32db0a08fc87f292ea3690c1830218ea8afa1b31babac2f39293697834ee8b8e4824070d703027032423116288353d7f09ba9df5e5bcfc3fcb2a24244d6794aa3dfbcb9b0e13a07ce13d2c22ebe7f82a703c6314ecee61f3043d1988e043a92a88596435009ceab5a22bed64820f9f80a7fd8b3325e679328ab63917487969009fef071caf6ebc0a664e6aa271012a76f8f9ba708e77ede1874356cf42ef34378653fff04f7d7f82fdf01c3fa81c3d3910c8e316078d12f953f57ccf94c2c393d28470513fb1bac7c56944e54127198eef0ad21f1782b22fa1ebf00ef961afcff334fd040b7578e67a1aa4342d99f693ba385247922218fd1102bb3fc10b20c4599fe535fda7d320cbe9a86f433c284d35cbf4ab299db0bd914ba5d22cec3be6d5faf4fcfd865c893d03c094fd35cd5cd416bc52a8593442afe1ba475df746806c81a2cfcb58ed13810078af5033405335191897d9c9b2884729a98fed5b22adb74bf47954426da2c8c2795b7296283b26a044841c4cc25980ea0dd165ee1bd6d594ec135327de83e6dc680e59d4cdd24fc10099283dea597b96b60c2afd52d033c32f6576327730ca1b0117abdc1586c5bbe59ff61388274aeb677fcdd0ad649cf90b4bd5f81a6389779e2afcb8a93ac4b0dddebe1e24fdf3c0ff60a21de2a18c026104360eaed8753e2f90cfc6e52c004c41fd401e32ec3a3e20b26a938a98c7bb6f5d802640da417bd3e36e6f8bc34e710ffcbc90c32062f8d8f72b818db157b96ea1675d2fa62bfd2c8650d60f39252bc26f77ab3163d80a7c88cba345a60c46245ea742ddba90219b7e6e0b4047342c446b149a0181532911abc1da92e1c3e12399608d3929cdab7bbcfe553cc5163479982a667501059544d4928df32d54a643b0e02318058c31a3a9c00dd32525590d8f4a6c237937cfd7ac22cd0dc615a3397c26a22aa71e2c26258c30186552281acf3d9a42f26d861fb049741325a549ff8fb026e4081806ca4ce28f4dce85fc25047489a0890fbbd233ff976ba9aae77d65b9dc2079c1a81783a34c2c9a96104d2e20bf02fa4b4cfcc2ab9d44fcaed447786e3f353d45d42a6672034fa0d9435b9414b9cfa0952d83f0243125d923b6b679de61812a303f4500b8bf634757f58f1b98c303bdaac06e5cf2673930284b660784960a88038555a99cd2c92aaad3331dc4830f8349223a791f657d886a82274639267ad11f9e0675ac793cec0236958afbc4964118c37c7b9117391fa23d0e09b761f14c8a1b3dcabe0e0c9387b12f2c335214877d1981f9bebdb82dd87e102b0a41fc76eaa590d3aae41ce30d963c771fed010d98a056b6b4a2fa0052548112f2dc6f405d3eb0f023cb4afc480f79cfbd7ec7124020b8b39171dcc787128842189cdc8eb04deec4b65f8a61554816025aed12e018870b5077438dc46d812f43844452d18ff5200014e6586a5920d018c402b6f3826d76d44158de7eab14eb6ec7a33e792d8b14f856fd0e26b554389aa71ec7a36979d123e3d15287aec1a9c6a92e8cc7764292d925f11bacd9cada8cc8d4055576fe352453e7e0f792f11d63d2ba0a980c9c9bdf292297698da38237db8fef432dce09adf5813accf4667573ed7c16249704abf2ae1d6239181d4d06c2ef55d28195a2b1a8babaa2b620ae344b1ac34ddd5ef613774f962829db3852615b57c0d1ce7e7e806adcf9df6026ca70e3ae119ef8b9a575254d1fe7702301384775d37f78d71ce92a5563c63a09a73ca45cbd1ddb2d914a9e939ab36ccc7e2a1bbb09ab752888523977a2f0eca7386842297fcc621e6ada5388cd7865b3394dbee861cfb61f3fe48619db714fb72e5e2881d303cf161bc9796b5729fc6baaeffb2d1481011c8aab6ae7f1e061fa8dd70c6aad6e31421950f792412ee3c41b656e86979c1e511f938554920fc59e4bd3787d7c50a968915510f7cf866b889eb15bd531d58c2e34d4c973897297dae936521fa31c1444300765099a6a99d558bd8763a5e7af74672545decfed775e4cc2393060b913616fe2c18a4635d112196856b4c21173be4df0d0ecc1c9cc29a9a9ec1080f37fd0824772bbede2bacf8e5f5d029151545bfb2d3292d82f509f9b66de637154030fa3e8374d07d740102418cfa0876f1221d9e83ee7c3d5a8ea6713af199366d8527295b4eabad144a9825e521a50fb8652eca0da51d2fffaa9cb9b4009a44249f964e5815bde81da300b80f36843ecabf2693099f23c88fd927ff73ecf2d65eabe7deda59023f0e14b3824100c86eb017b19f81e9e4483696eed392e4b33da9bfb2f2eb7ed9d5d431593135d912ae5cabe74a628303b1c453b14517319c40a6a48a4433bead14ee074d6d64f8711e955396ce0364674b447590d1d692f3d9a600859499975821c9564eaad45a819c65235290deb98f113f0dc734f0e18639dc2c42957e996a9e7d82289ca6ad9c60178b650b1fb1f1ccff54a6d4663d0af732a2e62ed0915152329f1f3582fd861336e87103b761bc0b598453928297da4cbbf8ae907c0ce60e1ad1abadb7d1c0440fe1eacad8d673129d9eb730db7b3e0ebf8cee79b83c5e7680123908386d05e0ff0d9fb22d1368423d0d5fb3a1872727668e3230bd02a5f68f723d04b9e38bed583207e9324b4159a72a177bf38d40dc2ac4ba7e8124ed0045393174655c76c17b611466e00f356deeef891ddb2858142b14a5e71afea4fbbbc25a00bff93d320948ac8f4b12a7bd3548ae33d0365773d37ca2f7a9cec3df65d2b3130f9df10dd8ef4c5915814f8188847c1fb14e9dc433b75182c3b9ed58fdcb2b4e02db4bfe8a26498c02a010589b007a4a004408a04f7479120959fcb6e52d52fc6eb40603658824f402009d9f7e7a2b5fce790b7e7c2c5a71598b9bc68253f0a4ec4289371b90e05f3bc04a4042cc78c90d77855f9fec698d98eaac4fd1912739870e6166cd2cf039cbc9abe36ed6cccd779fa3f0bf3c1f6bea673938dadf933243ae09c21a3ce7f4e4ccc8c22d5d83b70ebf23ab0426499344fa36375bd29a38fdda0d68eea1374474cbcb21c1036edca24c03935831a3e72cbf07b58b08943080af0b475162ec77331ad65b90f2a6dff3e2b8612aff994eb3562c9b3af5d62a65227d2761dec3824601011ecb67f3ed7b67a493cbe74abe8371c9f9b2ce2091b8d7c7732ebb066ac7f094fcaa90968a321647d3d26f7dcb22a6df6bb1138224acba44e05446d706d7b981fea96219526a3b0da791f1c5508e3cef95e9c752a4ef28dd44b2548367a4f08a8329b1df42656492000adb47f87b8726cb904ff80489ff358a4129ce9e89ff4f975efef19464e76128a3245f4f4773a4bd3b3574ab9d0cfc66d3c0e313ad4c4494a48317d7b8bc9888f7d208a1817a54f838d88a22f0f502094225ce4e96b652f78db57acd96641746c06dba51ae53d0fad60b22c36f3decdd9d9a8b25d2043e30c0ccdb3080910a69a0e1abf250396c89accbcddccea80df96c60b97ca2e5a74ecbe89311c4a53cb47515558c5fd26c3fdb63453d14ca334102838e0b59459c6dafcf65138529e4556dcd5924bce505bcc1ef338e55da6131a37f4a16cbcbeffed18bf3b9fdd8a6d1e1354ff898c72e6d721457a0d9f444b1145b767eb21e63c919b091a650ab3180f79b7acb13fee1ce033ba20911a78668d6718a97f3a09afcd0f62def37082c894d0c4abf444315c9539ffcfa8269c9f628759074a896703ee095781bd42c94a98a52a81d9b8729e6c25f11998e424beb754a590729bf2a1e42b98012b15b02a609fdc387cfd8c5ee7ec7597f24cd8d09dfc08b576312ac91a662b4f3632c40c2a239aa88c5709d5f6cd7a0305f62c968f12ed35cc3e9809fded0321f787bcf08e97025b71ff51c92ac0f27943d690afb1b5c8556b81a16c0b4744f033760d176209f6bb98fddbae9094055af84e96d4c095c2c5757743c5903f5104d37f865d093da2daf7dc6c902c8b29fc784dc460bfeab4bd26b5e71b3528c1d88f7df00421f3e65b64ab48b543c8e4d8d6102da106d982a5cf0b4dc78b3064b74f15b083eaa8595f865921e7b2a0bb763016a5e85093b10799daecd25b710f3d42794ed57ee5d3b20ffda4372ba121c36942557acae42986b843556c8940c30d55a5f4c6be668c8424d9ceacdef44021793c66f71fcffe8d20a1c9264fd26d30bf21a3d90f538fa0ef08900808a592e23825d5651f62b2b7dc9807f461fdcc2b7df0b86521378605b6bda6f5a3c5056b6d5d35e20fb70aeae857ddd674298238d2fb44499fdf6fbcf0fe0e2737ce87ffad44ddd3b6df7a9b76940beb5c318b1e1c6c21626c2b453f5c02ca7e9ddf43e2dad1ef0ad6e55a34b40bd0a1b29c8b95be03dd257de5e78b096f65456cd906e3cb336eb9730dd96bb91e291a50f873e624854d8d9180a3a9e8be7af84afab5debd8dbf65f951fc6f4958b6e4fa4458a9a54b19d19bbc9d8caf545d8a8cad4712a6ed357ebbebce19d9a6e59a22e30f77e14f24dd3e79acc80828fcb7e9092ddc8d8f77e3518b36db16170e0770042df6c39fe16ea64dfccf17cec03c555b57e06a4cafe5f93f5b8601ec26427e71914fc135d45549761a59b412960efafa3507ca635ffa4e9cac7a77d7733e40aa2931076105888119223e9ebc79481d9fe07046069abf3e4d5d08bc2fd5613af9c0722a95ed7c7d9a9d13aa14b41dd3b19ecbbe0d361f955f2b35dd3d2bbccc0821ec7d47de467e18116f32e4ea154750cbe48388cbb9f1468dfa7cf6269e39c4981c847205d6228da7a97882bd08205ca34a9270963f59a32565d9ec669152d84c1559bfa8c6b7e4a6c6b78baf1d5688aff100d4080bab073bca3e193652df9e0eb46b014091222bd2d921c04a4c97cbd95d265eb351be033ff93249c360261f41d5d1d39fb2471dcc173025e33eacecc7bfe5b0e45df07da15dd29509878569a336c702962cf2a4fa91928b4803700da0a58267f1d69bbeeded7951731180c4f976fe57880c7a9dc4fbe73b97a8a6e7c26e2f2d21519756647753f8ebc87f71e4301a115a859ef683178cdf77489ec245c76ab11f337d471f08a7bdf478904abcbcd324e049638256ff1cbc1bae7b418aad664a06cf47c9649a3eaae9c385aefd6b9c288b7dbbf922db6bbdc49f55d19fcc021690118befb882f503e64f3fcc02e2d2c9b4861d4d7cb2415f29fb16d83320c949734a59b36071003ef01144a960cf3785df3b22e3584b3ec2859fb6e449f7418719eb316beb71f4c9be60e8b73544343a777ce20185d87ca5678d229c96969857bac84667578b9a5ebd4bc2f62a8c32db6ca216a340b86d50f4285267ad07e2ea0aec3a1947ada13951d5cfb7574ac341b608e4c34e6a982270f5711598b5fe7ccabdbb67dc61f9441dbb8a69388036ca1eae8fa901f3fd569c76009bf9028a76c291953cae24dbef464a82d24ef04a87f337f7347e0dfac3e14b7584ad0afbc290420c9bba9d9bbefdb23dfc9f7ebc906d23447b4ed1eaf07183c388f08fc34c8c42f58e177b341bbae64f98abef692207237bda2419aecc2741600fb12493aa74fd1af0a5924c3fc1b3e9a737975d968c06b14986d0e1ebf09bf6f83ea3dd0f3dc1e5f72d943d69d00de15923c2005c2946ac282c400b8da66488477dc3534832c6f5dbedb846e90eadce8fe015f2ad59751bee378ec83ff31961cba5a64d27fe13bd1a67fc89868a2772a18bc2bb5413b7ccea69fd29bc91c68757a8f462813b3fcdd7499ed32e532ed4eea02737c592cdb58cfb40d9576bf059ab6f18142be7bebd9fb602a32e673d11100252e06ec809c6c09414a774d71e6316c81fd204e1d288f4711487cdd7121b6ba695f4a528d178d94776e233629b42a5a40ec5fc256a8e5b1da6783900fac45e6460ff3eec4145e8ebe70e63cb3bdae82dc323bdd2abef288422face7f236e379a302e70bd81065bb9184f0ca1e638531a5b26ceff0ea144482b19b5989645b333b9748d16c368c843d9765a56426e82b425f24b03d0e118901c957da5a1886cc55b7afad13f6ef9df0c34b75983bda53e9c9c1a236eea67959b75546c492bb64cdb3ec8a09219290f3bf8b942b38cc3f2b1ba59cce0217e50cc7bf07262d6ba1c08b3c03d660da3466e19da0e7447e76d568f257114f7f260226c7bed1bc658f0687c93d3532f64ded254c776fc5e481ec8d22df6e38b581283626bf7dde1009cdfa9b7c73db27b6cf62ac49fafb02aef53ba330b32ad76429bcd0d5d176f8a26e11b22bb7f438fb989aca9c3c3c02d0afccc1fc62977479c36935c094e51cdfc1e6ec1e054d0d2fd5b74734418d81934366c18f857c13efa2afa9c288066fbd5bbaca3118073904ac4be3ceba00481fe2cc1ae91684a86a700b64852b76eba285e4706b13808d58822df393f756aad38dc5fdbb128277d7d1c3e1740114cf7a7b1f1788fee1e64e2ef6a7f87cc7bec163957508b54d4d925b9ff92653465cb004da24c61065c78a41a6be0aa704699b61370c84e7eccb98cc113917667e0bed81b157de84884df7161324c14d9dabea0b236bf368b4a8c7269017cf544deb8793688fe06de648e984e9a7ad435264446d481aa84fcad9a8a60ab5ec18aab9e461f7a011015963d07496d072da0efaf10bd8ae10bce9bf3605f0b2aafc1e32b85b795d437e409b35f71e76c7b16521239fafc9b3a461ea03e520225c52c6c4c7b64dd579c208491d5382710a20a65d2b83326da75066a752b4c2c6793e856ab49f7433325da8f060596a1c2e875b2b224dc5b24c5953368a0ea3194777192beecb8c49e8fcb55486b47c250feabdf5d974755d292caa7257f5efbabb26126e19b96e37ecf1a02cc2fedaedd3ace02297d54b6331e683e29b8fb5a6a41fe35dce154229e3cfd161fc01b3ad6258d1e4b82fa900cfdb6e64379a1baaaf04bee07117e0bc33cc7429eb18d64c7495a5df22dcf0918bae822274139fa418e4e980bd71a1c341b7ee68c81522a05ea109ad761756aef389c297a5544289b610f5da3283e7e64a5a119fba26da154a848aa454afef6a1f4fac6627ad4df3796fd13a5674a0beaa4cab6b426962ab5ac74e77e3e42ad41624116b3da95a6146788c53e8eb2731020303664626db3073a05efc00a99df19000c5b91c3bfe31d54796d8638f6ec77b42d78cd5bc31d0fb1b4742fa542ffb43c36f1218f594b8f649bd14481f4d754682ad55d356f313355e2ef303e4725d1ddd33f372aa36012220d3e563cf0c2812eb3dc7a679482b2491f23bac18738deb3a00aa92b7644da2d8074f3ddc5fdfa6eaaf80f3d3b4ddfdceeb7c9a5528acc46129e72d840bca802b05e8adfc098f04830dfa7f4e8e3e4909f821ebc7a7a527ea8d76619fa0da210f980c9ed87aa8e442edd73513bc8fe3fe06216ddaf83cb2c7dfb45ce442212e28d4d3731a34ed844313e284179354f3d56c68813845a1c53383297053e07feedf58fec472d99d73aa527bf651f48164b023716a185f5fff0690a2300ddbe6a1b7718bc42259a2de14b14d8307c7771a525de3263ba57f190bd3fae610b702715628c5ea892a30d27d9664dcc94ee2bdf2984537be44fdd1b9614f9d7139ffa5a74275e6ce63004ddf5a9a1b614486357ecaa71962bcbb20b8491ee67c3e4f7af0c39ff90c1d8d9b2ed0d7bee42398b2dd981cb414973ac3e9b452e4f178e19b439f59f978c9f5c39273c588ef34b04f553f9292bfa6a52c3bef6884197699b6fa261ac1d332b156fbef8f0edfd959a2013091b85428e593b6c7b4a8a971929d4ae867dd300c23b5e651cb369eec99ab30c5be863156492f8a957c4539079156dbe0dd68aa3fdfce6d1a432f4bea22f4ab4f8a57822c9bb9dc2698fa422ffc07a145e1044e40c0f1d5b89efacae28df0c8bc85ffec84e2f157318250f4ceb787c35d9cbc918dc2075ba55aab704508ad189ccd5feb1e8f7204ec50efca81bf2479b110efb90797cc1d47bd44b5083a462af23b749f66e11368d4d37175597b3f73daacac86381295cfec012853f9d43ad93c5e306d7e5c79f4d920382f744132e577eb902857721b2338efa2bfcdaa1dc1a87ec2dac828a2543b724a280931fc25dfa46e1de9dfaf5c070b8797c7a99dab5b5d5587d2195a5176af6c477c7e3e8b95e56744c343d340e3d60ac3b9cfbf522357afd5e916fcef78ebc1347cb305b96fd2e21e6e7d3d380671c7db7439e5598195f43687dddefa1f04143a190ae48242438cc477d249aebd57cb116e753a29b75bfc27039691a50a47717d4297cc9801db8034bb055e1e6ab07a68937858e920efff8218c3bad508a5d8672b272dcc9461aa3ee082da889997d83e427d0b22f2cc3fd1e6a16c4836b502ae232c8833c036fd752ba013f3285793b383bb0503d0989319fb750acfa5cd9d854841ac0a3a177867d47239bac8b7bfd7dc2a758180f3c5a282294d96065dfcdd06cfd5be00f35e811ed8ad396511c2b86ef9a51057b24608358e68a59fa090db84aed92a2eef9a974519c7149cafa6d34686986e9bdb13780564467971af545d3d1d3d650ae7a634d042b816772cd7173809b9d726b55595e8ab4c9c99697e1898d219f53660136b96b3d2f307961321db32e87187e63b51aa304d9c0ac861bb8af48b0d869ef0f7c2173a23cf13df83a28896ff827fd96823c0cbe9f89886ab074c75c8db55ea483d45bf6fd3d0897498d1ed5a9ad26a0a744e0becc38ba686246e40ed7eedd7ac063556dbc4ce28767e2e38b62335f9f8f8412a1b62a08e5da6829d43166fedc4f81b30b81bfbc68d3680a216d3223833091c0d07c72c1c387542392eaca97447fef80cf054e2921a0d881c86c28ea725cc10c5d6f455f79cd0c53207701d9912d06e92f1bfb2746513a2dc5cc2213e9d1544f425491a9beba09798d9874a1dc9cc8affb9e0e23f22b23d9258fcb2b8d4d3f238c965f9e6ee21104d5d52aab293f1d16fbc63f3fac9a97f93579def5893aaf0ae60f0b8b3f282f7763a1a87f1f8a12835b8c894ca08e67d592aca7b419227fcb89881eef72d310ab1508aa034b9c0a646aa217068a417dcd3c474d1e41298c343fe588fbdff104ff1a1c4211c34110b43148c3e1e3b22495747d7820ade7d2f632d4fc914a9f0b30adf0eab181d56c75b0d3caaee4be609d5cc55651a1a66d8c6e8e10d9bcb2bacee25652647ba9d529045d4d438a295698ac0745fb63d665748cd955525fec04ec1f6cac95c9ab7c0ebf29cfd4baed0a513844c92f361a33e7316c53387c05ebc9658d2c217f75e6527b7313a54004163fa311784fe893ab35a78d5f6b86e59b54d3c6163e048ba5459d6f01c6b856373961ac661c5f12f4329e6ffb2caff1713abb1d0598a2b3448c2c78fb404b4c0bb5d73afb02477f767e38ca6a6300e9caeac0974ea4a2359692aa3fffc4f5c1738755f7c2485aacc993690b580e07f7f7fc0587a4d4071c7d7983386e6b5bfa4bf90d61d8dd75c5f505228c8da2319836732dee95ae6aae0b7ef4f5658c8b1150c29a0a86df89dc078478e6ea90a7c8271889882c7ca480345ebe88ce28a01124b3fd920bcb7a8f17eabc086ef3c79d9e2a119c2894a9d36456bdb1be2a4775d9e2e6806ef87d4e7642471050285cd392fd6a10adb28561a1a2191fe352de0c8492e0d3f0a3428f245e2a692ca8855c1532613265c84d3e4b8b55675ed7a3c4edc47ae04c2c33179fc7551e28ecee8792b0dfe07254efbdb00b95003d88074b0a12bf68a91f3c753a2e4cd28274e69441ae34ad6a446f7215bf91e9b54d02555353cbbf5e409ecb0f45e0511b80f91a9f776268dd11188e7b29b061278ec514944036543ec9c956d6fa81e717bac6924cd7b9b4cecfafb370da046669e8c49d41044184b391866e095a519c3a5892246b70a8d40de609631650af166d6ef3952e8115dd21d4dd9ab516a6c502cf67291bc96ab566ae07c4cb6f20c1b1bd7b858f4675d3c34bbf180d5f8a72ad5678614bce8f10dfb5a70e12faa7cb9074f3b988748499edb67b0e698caaa064bb72bb814da1bafd08511054c5edde7c82dc971e4453f081943b28648f197ec35760cb750531df00d132c52917082db380c4a1ae81eb7b97775b9a179e206720131b7b81cdb07ac0b579bf788401532517c8d60d6868eb13d6cf4faeddb5942a4867a0b5dbf94734700068331f7d626b7103c05129f30e3333f67efd684b26f1f596190e534d4afeb82be7e7261bc8779071cfc93716dd1ccbdccf2b26c62fa01f94516ae5e4d8ee5cda55efceec0a74cea1f727311165ce74a6a4cf159c07593395aa5bb10d4d9b04b5e3e6c2603a10ca9b116b5d6ead201c5c146b505f7a06ee57233f46e0560968c72527b7767dce81325a0737e790c22511b287c676417dca7244af56adc3bb84ccae8c656d0eef2f2440988019fd6543321b0f6b24aa856a1eead59e0326aad6bc9f74bbb9c3760dc9a39f4db0ecfe39a4b319f82c106a37d5daa4d0c44c060e32754ffd7747850d1c04aba5f56e4f85c2f90f6a26dfd25936ffb4a2e0d9833a1199b661bb6f356fc66b4eaae0d65dc0109db565a9cf264a66f9204e2cf73adb4e6b5d6c0142bc74903b8bc3a3eb25e7477e578dc8921a19fd7eba8c8e7372671e8067f3567a87bd29842def7f367986e840caf9ecbf9a7207369d707a5ee59d53f87e9cb555629ba59b139e5cb7bfdc8411dec9421775cbd54181bd0734363ecd8a60a19c821400a21058dfb489c50b63db84e7e80ff5d5c694b28ad83c9d6789b872e461806584a47df37ebcf027163def63d095e706ddeed970ec5639c663b3a5306d894f30326b2e369df7f42edc82113af83cda0da6ba3b042736e59074c6fbb3747677523185a2943e75d25134b944bafe7574629eccff35a28c68063ae484fa891a6936dd49211395e05f75df74c457b992c0430237a23b388491bade303bd1353e8511d5084df08f1c3bbf9f3445f2006604ffe8bb06ff19ddcb4844ce5955b227b2ed82c81ae4909fb156be2a68e7b19291221801bec1118ad587462400c285b9addf098576d4728aa22bf8e3a96e15e674122724b6b2df9eb70427b329b05b8be69b8706d71abaeda46a713872e64f0ee034d10d7f338a5e1e6f6e415c0b0d2f19a5f662a527161524c2947ed47dcd409853ed7aa3e373e6dc1785f0f8f3ef2b2a9be0c28fcd902f298ad20acb3a8d452f727eab92c7c42e1c9be4d602a5bf7f734143f5c2ffc6c4938de01abff924c727222a528ddf43ecdce2a92307e3df221c5b987edcdc5fbd2773c6e6fad6ebeb4268a12f7307033220b766911378a3c279b2bb05d4d9bd66587cbfccf1aa24967c9327f0c58b26c59b857a1199ebe0fb07718265fedca676cf6318fd388cf1e114e0f5ad1d9606628a5f9e2bb9c61c1ca8159e27a59a25f5285b981671178b728435cbc9266dfcc960824ac231ca0aad66de2d826dd9fc5f4b1c2b6af2cfb2a92b3239d9f5c858220a582832e340a913eba5789284b73a3edb8bb87f8da6186154b62f166d3a7e3d870790586313c9e2499af266d9558eac7c08c0465f9ef7712126fb18057a7883cb288bd0cf0f15cbd9970c5b6cd3afcc6e90feadee750f4ad22dc8cad370b65702c95866c25e83df9240d50ff64c86899842e45e4b9e005d07acc0b8db0bdfa04e7c40048146f824addea77c52be6c2b4df3e114c18cf26f4b6dbc2dbc32223fe56a422c6e82f749a361c09e2f733d75bac8888901baa3436e53776479265d5cf18a6d035b7288efa58272d1c4f32c51685f2e83de98776bd765e4eddb67705f19804fce00480ceab9a8ec33b1e27def555e1341838a0052a652b055563ec425066fa5813cd2e08ba37763ef7a497157922c7cd419bcef6305cc23a88992cc103f65b982d59df02d9964a86bda50f1f35d8fc5164736ccbefd026ac83afed643af992026b7629fe6bfd3a91d9411df8aee469c1a272af5ef5e1b3d260ae943d1aaee3ac59732905f9605af664f24f060eabe473d1b38593ae059c62364afcbdadd736d21f7d646b239cdd22bac7c30be77607eb6d56ba13a0e65141c9dfab208ad90f6f6c252e24d56978f1c33e85f2c394c09214eff4a7382846d2fae39b61e57097768216f9e5cce174fc379dc1aa8748aa93f404be107b33d148b53f1caf9d25714ed35ab23d54fc6b551eda9755118ee50b00b8cb0d665e2586deeed652220f6873a7f77933295779a25dfa7b4a2c686bb4f0ced71eb175567d00f579d7ecbfa2a322f506f98f0b60b0f9b00f2d772f47666b9d769002f9ff04a7f8e4ff12410b3058508873e2d01965333f348a34fb6e8529658fedd2b34931f9b0e9a3a986734d6cc712a23f81702d039cab17149868badab23d9876f443e8118f4cfdc2c3b277bceccf26057f27f36f4f1ed2b286747f129801a54b3f4e98cf7fadedc4e52a83c7a47e3ae199c4ec4ebe8ca3ef2a05c7fb81e0bca57fdc453a495abc33f518e8552ace418b822c1743205bd35737d22a3306491aa1336dbb31f1290ae395c66b0fe52949cdc31833271af332c5563920d1194c80ec2aff8e04eeb29f2e839b1ec732e0880ff487222ec05cc1567285df14b78001a163c52130bb86bcc6913ba174bec88057e1a8fef011fc1cc1da5c9a8b5a5826beefc3efe5ee1dedf966c1cd2530aa69d899a0f6529bcbadd077fd598ca60864d6a2417bee58ddc9d4b09115c5ef74ceccee2b73162e04fce199fba11a5891059ea82518a00365037ae10da8a0dc99efc94ca691c0604018b2d6ca819eb973df1cc88360784c89fa92bd674996c59e0f4f852c53809ccdb2217c10be2f81e5072cfae952d88def797e9db2cfac9bc36d322cb5ae60044da9ac3e4f5e8c95a74e18e419c7d808bd12113a10551484409723de3f8e10fe4f69b14f1fa3d11d3e4edf6e4087975d2f70222adc21ab0d047bd8d8d95bfbe3c1001e6d7065e831e019b742dd911959faacb6e3b1840f41728f371650e0c24755ec725f7ba4437847d684ac26d2cbc03bf7ab25d3304f17754edb7f17450e7213471cf4c58482b835b77aabd929690c07bec7835660d24e745f831087cabcb3475b8fb65dd43c980974aa0d919a04d9dc99b100175ef9d289fadd5cd4d26a96c8a89339364e0aea1a2fae635de38d9a0f85e858da4f4ac89d65872829bbd2e5d29a81daf50d05d33155cdd34d9ce6bcb493adc1857e0e4369730dcb6681d9f8c25e500c1c7697bfee71e37920cbc83bb8da0f0d1d192c3698088d32b26b5a345c79c989cfe47a1a72e50e6ffe56538afff51e83239fba690a3693b29beb8ab2c13c171f28dde655edc8480e00ec85576214df288451fa62ed5913b4f0e4c93e3676eb047196d65b66523476d46f44ee84ac7db45ef0e3c4e64b8033f7157ba5343d6c359eb9bcd4c382df7e3af17ea8cc90d28acba102aef337984ce49b98c1929435bca9a3def080decd80ba8663795029777ba41b09d86561668e6145b9d9b309f27d5d55f7d700a605c68577497d5444c8619c8aefff912708d9c359b90bf8685d084dbaf634c3f7c32360e2430bb1c6a9cd3b6a6bb75702d668b20fac90e5df71672627b13e069d36cb701a7923fe22e2f0ed69d06a81cadda16454408ce27c4571b6e036db2fdcaf80d7f13494ac7aea530cd43aa5c016c98a9b66b7382e613389115f9f27b4e9e192292c2413a7d99e1fad464a4ec6b1f0b85d517f9bad0e1352e4bfddaed3ba687ef5f96d34e12304871528b2dff7ca5671854cf2bf0bb2256ce99c5a50891360396f1055e12a434f1ac2ec2dcf4686ce088912009e1cd51c9f37fcfe6609c518ea92c1ebb1184efcd8942fb003a774179e735fd833702d00dfbf9893270b98b8d4cafed6d00682b9443fd475a3761e2789703dfbf5227886a6ef968db958537f0e2e0e86f18f74e1db588a4ca25ff92d71a3b8d0e1ebfe4352d77429cbf2f1e2228b47534662f5c1ec9e6cf2652dc60de0ad2ff6cc8ba2e9cfae779819de828b0f505a45035861dd1686fa0d8d52552cfd693780751228407f56506589edab0e3a47ec2cd64456f36f063b70c8a03d655f96a9ecf4023ddcf3f9f168e166773773cbcbc2d507a7e4f039ce1dc47f9c973ddc01a5c3fc20e3953ec4001821399cf20c1c75807cb15d1823edb550223bc4fc05949670c5e47c0b26ae82d3a8414d59b56fdc94c359cb756bd67eef6169d3ac4a96672daa190fc315efc663308bc3bc7a9ae6b619c46ba9d8bd885e8afe892f59e789a3bc49c757410f1b8e3a2ec61f5fdc26013bd9c0d61406514271d6ca74f3e686e862ce2d18214bdfb422efbfa578f6788408f9d627c52acbf0ba32a719c0a16a60ee0d6e2e1362817330b516509f2504181b66916b77788f4a0c4e3246924d165b579a245bf887e03c67409c65298fd4c7647587e8a1c16e6a764fd065946ba754198e558a8e0cb201e371e1734293f4b37bd96d4df9093505ca4014f77687285452f7e323f801edcc31a57be8d3e763d2bb9d2ce2df5ff551a6b22a3b94b94e798412f6aeff26531e932fe99d376827b892d2af7032c588342dd4e7b5245f5a3458c08be663462a196c40591a555e974e4a919c6bc1d5364cba2d26f561ffa37067dee6e7a8b5cc305b4f401777ee7cb99371deba24100a13306c73b02a2ccf2973b06e2dd5d3688e56176c0e4fa23a210522c3d7bbc3fa9eee7692896934200832910ef2eaa2528642d732a11e87ace7159be1f27716039e0c14842444f4ddcfff4abf954777ff68a870f49e390351e77778051bcd70ecbacb9b1978abd0e9a38d2c18334565b22a4208ef696fef978245448c1e1349263ed2e978da02c60e3f233b065dbd1b142aeb520de0238cf71d10cbf95424a92237679f7859be7df3c90cf49346ba7492e2928ab6debc5b9d1ce5b4d5c16bbff61e90a909275b81911edb272fc83dc7b8d6d9218d8a5c0ad65576a4aa54fc43004310028abfcf31d57ab90bd51da571cd68b3b3f765ae2b71d145802a80746c41c74e923a3801f96420e94838c1380dcb73fbcba74aa71c4712d58a054d8e67dd5a968788d4dca8f4fa3a38eff87c8e9f03719e0f3e40858bd11f087dc2d0bf9e4c26279f7a808433aa2e1686095dc559688d702efcfe8fe3b7924b46cd06311ba025c872fb3c45e4c97873843499660e6a4a08dd97dac92fae5eeb8bfacfc1646f7f7b750f9c871609e0362960503a086a9048146207b85b2525db809c49971fb84451993a6401f637503d18d06d0488d79a5fb2f09385c91b34a2944542b22e31f9d381b1e696758469cd56df182f55525ee1528d6b1325ec1d52164e60cf1937600a09728e25377c440eb9396610b9aaac8ce62eb7baddb98bde211c887f876b07338787283cc384ae326932a40429702360a7681f94985f16e3856f28951b73cfd1c92aca0f2512e1c2a5e35877de9f2610c875f33aaa0a8c9c949d622fafa32803827abde13dfee681a8efa5b436a8d15fcb24197b36d3550a5124fe636d98bce60837862879d8cad44497b7b9bb42ffa2409f54e854b536f1d60a110308f5ca94337359e7d6b32b83e7e5f380a2ce3c7964622afc55c9d5c8d7d1168f0c60a8ed34ac5395a1f4801ff7067ad31c5e2a8426e36b67134b31df0ef456270148e6fb3df7e351ab0cebb591383ee0acd85f092f54d68d6b4d60834d03ba84c449ec2c2849e86cd1fbd4288750d765ed098b65569184d3a04990d176912b57198eba7fb181479e93627ff836a19fc803a79ff15141bdd5d39573c9d58328879937d2ddd710255751bd7bd0c73d60304cee5517e42d296f5b0ceb482cb93773d26fa06ecb1638718815f67792804e4835f6a32f6eaf09ecbefd4ef7716fe83307b077590113b7f22528e85a82a6b2815908059b52850b24b98f04f5caa188de878b46227308f971e3e53d4955fe33ed33a50e69dc6c763cb991cdca54eca6962552ae2c63fd6ac7340ee57ea0d8e64df74f9894c18c0c777411b5ae65f1ebdd4e0b274e77e193fce50a96c9755def39c0a2b2a23bafa7809305c9761321368db601474d3e5ba0500f41b027d0190dc13f61f6b9238d0340875b407386c8d02b346b0e6e3fbee4ecdde6f969f340b1910825e4f61834b62f59e37cfd93a3d8b25dbc8de2c5b727f9ae87fa0854ec6b9a24ca6f8a7a04500371c81b1376155d451df3daa02b208e38122f64b9bd3d6896b628bc5cf2c19eccbd236ca92c2dc53cad8947da6cf165864a4abd2f4d503311c82ee0361642130611d0ae215b8fe6895502868878af31773e23004aced0d8fed9d78e15eb43d5e930fd969e525c07b8f372971aad70bddc19b2004ef45e0278debb1f54dcd68684d0a785771786d442f79bdfcedad128e95c6400174ac8198efabb00a85be7900dc495510934085f96d54ebf906175f1753ede7d9389d3695bc447c5ca3e93e41437b2f1763259865ecb0b2b5724ceb1f8658f661ed1f7380eed121b4454ff6ae9e766b0a088a380dc07fc7b1ff9b4d84752119e06a0de043a4283b18954083721e8c4298d75efe9c7e4857caec64d21ac5efecc7e8ec72efa2d326cffcc71a93d1c06069b0aef4b26c174317c9030d5f410494490493e388c546820bfbf095597bebc0b9ce58f9355bfec8d777f829a3424caccf498f99a7f1a963690b49786c7160d9da4f96451cfaa22091234b369ca5d1affb87413d22f55760be02f9ff5e9cddd7e625aaedb100e67d0278bd5cb60ae79ce581a0af6c4dc94825e46ea64a4f5de5613ae1ba1a58f33004a73b973a5fee9fe1de61d07b3c90362c19720497462b928777cf92f344cf523d355da58badf95f6641d39428c6364ae062772a234d2eb300ac527c4ea53f2b9692dbb0865ebf264cb65772e9552cce3d583e2ad6adae3d8d17eeabcfecef427161040ea8dd2a0c6bcba91ccbf3115636c5820f703c4f6c5639d7087db441d6c1afbf68bb24c1b33a858fa93698fd12b234b51561524bdf0f1295db04ee99d535f5e9c8866a1d97d49c2a5bfa4e19dea402e683c929451f917c34094f7df0bfbf33fe75ac813be997acc008aa315f4e8feec38a9087a86b5849f6a295a699b979a5a589320f6b5d518d5e23693f511cc752f7de56b711ddbbd9353b61a280cebaac4b9076f80e1bac0896b397671289ead2d56e6e2d0b480e7c9a38cc13f300da323d14a66ba102a5259bec49d12b7aee501366b6b1f93365c4c34cf730745e43776302c67dfb210c16d66cd3df0d189085e9c976f098fb56ae646f72633b385c36bbe8d9199dafaa478f0a4d1b9bb4a76dd8ec9d2cd65244a749c3b9a39d5cd039d84dab840782a7600a72512fe11d106d9b4852fb4baf3b4c7da182f36ed5d57889ccb89e76bcf0f38173acfa9e32b5deae67a9f11c24109780b84aab6d8945930c87e2a5642fb5a708cb238f5a43b35311e9c10d3056e85004d5487e0b9b019c68ebf864a1c95d2bce813313fe513aeb32d6683400401d043d09640ae20b7f77dc9b7746eefbaf2a632c06b76d85c70659678c2dcae8b82e66907865cf628c06fab3c4e56a22a514aabad79cf20449b6ca6e00c7062f55e9f8d78c4772320278e76417c4f641152e5f6673bbfd4100fa61d3e931110c941a892b8cab9c656205ac9ce3cb4180a7c0dca008545cb4ff4e41f4fd62309845298c245a272f3dc4416266fae144bf12eefbd78b06000faa66cf502f793f1ed9403ec30227c349911256ccd1aa94e04ed0e1ffaa40310ff1a36af83c63b347852f030e06940857459ff318d3c36be77bb6284d4e66f0d16a8fab524fbec1b478185a94ad57a1b6817d9125d64862429b20d936ef19402e4844cabfff2285f37c3eec2cd0e80b42f6d0a703d080439bb2d8afd6dc8bd3d210714f3c69bbb214439e87ac4b74bcae2d5c3f41d31378fadce3134f9031e9348094c3b9df3bb5def2f84afc00181dbbb634e4b8928bf9b587b98042dd64d488b12e5da6e856bc6c0033a45f913b76192df10fa21fd21b4692c69ad1c7f889717763145dcd11b4cbb8a5f698b95b6182899c3e00adcb940a60f83d956695e5564e51ee5c9df0d0af1b3da59cee218ccd28d53b373472ca09f3d518d9a36d5d8fe8a0a9e07ed06cfa967b4287580d880025d6d9ec297f656754ef87c6b7f6a6b07a689f1c67580cc6f6f34622f0f384d2b480df590d01c251829a4893d8729aa3efab0354357078ea2e770393ec25cfdf2e0cf841f8af6c12ba4296cb059cd269718a1fec470e9d5c77ac9b2b6977d37d736177a30fbf69f1fbfd7399264c7404a60c4c6497cecc12dbef05912e492c5f51b0045cca930dc8ab319e01fb1dd44e4aa27acc95ed89d712e0c403097e0409219fca66a4b429d88fbd0f47ab30168c7ef1fabb02162e8a90a25d7511d80d474541517b6a216980de09427271dbf49c7aa0ed3cfab6fe4d357a69da11c1134313c896ff1587dfb2dc36a96caf17d1c7197fae95f66427369b2333da02220c608a89ef9e96ae5f4a88e4ced5b8390700214dcb47302e9d8c8069d7cbb75331265384167dd7f2d8117c3c3a8e32403e94117cc0377f193ecd4ec15368d539a57a34cafcacbb0fbc8e4a0ac11ea0b8ae1c697a46c4f90daaf6fa7df7436df11a105799eeb2e4e1a17a9fd408c15984ba866e904e55f9ac54ff0a51d90e3368cd86db5e289ff39904f546f87b26681fc4543e2ebbf352d4554721fd2b5bd953d33bb661ad5a6c6f10b6d128306af8072910eb416bd1c552bea585ddb931d522747022788bb2504a9ccd4ffa5710bac49600d69a066d19cc242b90ec04055e74861a4c2d0e6c9d5f2e798c7567cb280b83823814560493bd9c85b6a34b607adf377b3cd0cc219caf27bf6c54b6b18711456a249c2f2574490543a19d3997a1bb77e6f6ded87bf33ae8fe28d676ecf93341325eb8e5696e2745d82f3e90d0947af60e66a9f0b05c184cff74850876e717a780f8d9d2481531b7d7a3187461f8d51e9650fb2a12432001dc9375dbc103d4e1a20c2ddcdfb282f467e874553c0b4ecc2805349ec7bbd5afa93611eed3982cd3d59744688506300f4323df2d8b52ec133c1ee4b85b72a761b1ebe93b56ea79500065fdaf41c157a130d1439c382cd2f04083985f632b8a3d746b87b44d0268fcb4031f583f221c33c1274e11b20466003c626c43b6863a57d83d4ae7da91981a3bbdd3eaaa999dc1e4bfeaf93f05164f0b6a39e6e080087ac7ca45cf0991422138455d9ac875a6f7900bd8790ad52dd1b4631b611a329b4c7f3b11678788c4396742c3bf99da8cc3322b77ef9ea2cc8b98361251831974abf3db9361c6403ea74c85d736a290e912aa00a13b7b1291ac988c92aa3b89fcb60b51417bbb1bef38811b85052cd4a327605883c0c4d0a890b5ee6dd731b2d01c2d67f6ed313d2c49804baff8efa60223a61380110f1c5450f2d23cc2030d8f15348acaf3d45c4dfc071e95d627742a0af57d82cab0f4428adb35984f499e2a4afba8da1368df1ed57b4a9c6110ad7deef117dde0b22f9c3c444e1c60756641b39f528a2c797b27d00045a47b2b3b3ea02ac33ce0f24ea17bfbbdddfa8021097b88b8b70323b41b2587d40f62b1d539096f4bb690213a4171b992faea650e2146d3fa6975014ebfe9e44556a4af8b3a95d7cfcff32e74893638d8ac3dc53b7a15cae981ed2ba65a0bd609ba9c32acf9ffe41b1627e97beabd77ce17a4420a0e7ada6a79ae93652e180cd8aa50ff2f9c4f96cd145054038e0b0b9b99f3ef5435cb8b3b62295324fe9cea9a6ebbeaad19f84c6520d9a3452acc7372e1f35df0993bd448a53f1f32a32dc6e999990d570cc3b34efd9020123b6795e71a21651fe7aedd1e526854282209609beb5b708f97eff88fc98d3fcda1cd5349ef9b921d4e57546fc6329e6f50db2ae91ac67baa8ef1fcc23d0e5bcc4f24c7b0a7ff199c1ccaaf70ac122a98ec6b8d80f6d8579be29b153ba3b247293afbb131b06ea0e5846d574e861ad91f47c3213713140bd6f7a8bc4334ae0d1045f0a962941660cc5633e53178d9a2cc81e21095f3ee3a07723c6ad584352ce76cef8d1551260ea0d6a2c955d12876f8dfee587417391576bdb3ef7f24f9928410f21f46e3956a0b682a983f431048d02c4d84db48c9cb49c9207b1defc7f90f9cae2828a19214c2f561230a3b7ba43d0dd2199f0c0ca72c160d8178e06356429cb5804c2d677a719fd78a24e7c3769618e5f758e98c7dcb9a4a28737721456a8b8969bd9532ce3b4700d0aa2f1274d830261c241b6fc82d11bfe45012c23509433fa32ba3b4000905f98739e1a5aaf94d244cade53ca168e400e466a83232f95d6c6594d456a31a0cb232b20b70acc23fa5b21ba955e7e3611083ea0bc1996150d4cb5a32df611cb4023be371178c6346f1cad875679f772669a76500eb73f57a271240a80a7272578e7fbcd9dd3634cfb96e070cb526dee9a95788f490b1dbf25f5a59ad5c5e6e92113292bded4628aebac716a8a98d408c6b25a1a7c44bdbf04e9643b9d38b8099ea7d420deec70b1f6cf9f3e9a73c3789196aeead4b3f5a8219158e325edb69318deaccaa9c697e0bbcaf0bd895accb9cee8aaddcb06534aa5e75cd762e61714d44c9805e5ab3cc6a579d85a236698d5ad7e2bcdb31bafeffa8bf2e0e601f51c9287cea71ae673580c98be86fedb7c734c802de84bf583a08eefa5eb3e69764421a675c9517a47ac7a6ff2cc4bdbfa3315561efedde33cbff52002647d8be2a4bae3ca7886b4579560b81bcc37fca4079c5350b4eaf3d266edf9f390caa85325d388b8d480c692dd368b3859273cf2389083aac564a2d0ccc4d2ee671ed73875e2c5c424342178f0dd8f74f10a70db12c208545981f5b144e943c0381b4131c80557504a801f37f7a28fddd536fb10c6153fcc1cd0eeb17caec5a4cf4eadc06ce62c33fd49dbd10393c89e2585e8ed7ce0796b08f1f042e12b520a0855d08f0f0c8952824dfe08ac0cb975c83cb5060c6243f90510710ae39858a57f8758d1e33fbc827e5f381a3a772c64c7cf7a4835efbb86829fa08339eb8f3a6d23ccdf289e8864c822fc243b3ca9fc22531da5c54a0cfefe795c5ca68f1c1a012b8043d5ba4138cfb929409cb11782133f85829c6a2ab61bff111b7f2e17f1243c5e1f362f41ea7d692f8c925bef1921b989e170e16f0f0a29f853427a929ca427f4e760ba7d9f65d9bfac7832b2851f1b200ba7ecba7721d6555c21f2ffc053d2a0c764b145882da8d72878e3e1219a6bf62319e90cd30a08db544cb09f9f9e6258f5da02c7d2a4a4464d9987b55ce83f4c1688f004e865f9ae85e764038c48006877d8f3001937001e9faa670cee717c25df1305b2b26c46f12cebaaadc93cf18dfc44b657fba519521714f92c3bba9725b3d399c6ef13746832419c8e492f7fb5c940295831219424251c6eba359fe32f26c97ca1213a188d8c62970f8d60279b893bc42a0a2cd2225ac8f1ecad4d0508664e169f236c620a8e139805897ce3ada216d03c7600eb9ff7094fd61a29e0591914d746a6dbc7bd60fcf9c72fe11a27c3996deb1498e3e822da19a9876469f51c7efd589b8e34785a91394028d7753a211edff38ae047999c7b7f1c66dbe504e303f3f1339a46df65893f6bbf884e09d2579efa7b784c229361c16708faa3e6e72857fe495255072812cebe73837581b979480a0eec2e40426a7ec72a411a8006875b170a04b774f8cf5f3fc32e4e3fec4b03edecc9e41951119e1393cde2f8f232e814c5e4e9ec052d041b9fa2ca9e1d0bc33800aa18ab8dc2f829ac7c071b6e67c247fd89ba0f1aa1ea313492b1c8c4f1d997e02bcb9a777ae7b9be741ac6adc9ca18b949d176d2aa2c50c7aad22010c463f8a3f7474b009d6abb903353c6c669d3fecf85efc13c77f6f61ec7ba029063919e8e597b636792815928c60e4d10d36da621cace9b5eedea539573d8aafaf053c6925de2b5c88d52541745c70d72876352d3012878e91374f5c155f0a9e11787bc90673f7cdae255e5f4c52eefb57869f999edf928c596e832a40320a66a1784dafb9dbcdd2f7b16da20ef9c272212453a4e10586ea6455dd3c3dddcae1a97c525d00dc0a3eeaac2895067bdbe8e73ac9c51f5926e6cd55c4ac1421628d2af3578805cc5651adbc6be4b798bf3e20accd96161cbd886d792e1a4f88df24e7c7623314547597cdafc7ad5298a1b0bd810def469b9303feae2ad96213cd373d4af762554d49053d3545940fa9f19a182fe8c3e5051cad5f85e69af0d1d9a8983452aace95e6413126457d11dd71015be91694689c9b2af07612087a10a4fd79c1a6e3d3bab030f99c24486aea07f98bdcc80bb711620218ce60f514c8ab244b0946fda33af14ffaec2eb65fe979390e021fda91dbd73768cfd11f33f6984a92d6dd222582721247dabed7f1504515d0c90bf3fee4f91bdfc9869b3f69ea431cf7569dc304618a056cec39a6cd985540e03bef20ed4fe63a608a36c25c0f0d55126eda2da93170b667bd2ebba761b5f99de9c5b50a6d03c2f2f0f6f7b224802b0adc9da574d8dfbb2d00166d646786eafaa92002ebfe64451c2106fefef5d13c36d22b20de0723e0d1f186d30e7f1612810fa823a085f35c108f003457f82b5265200769b84c4010d41d42ab18906b1df095a2f6f39c99a46dd21df07f9fcdfcbe2a9825c54d9881d68e40c5f0d029ba0e3375098b1410f2de40012b266408aeb94a9af0f7fdd4f3c96544999b43b106590b97e79fffab775d5a86cba3739c030da4edcf18d9986a6eff8f36d02bb9172992ccb666d91e057b7ca68f30599028a33287505de35a5f922e25ba53cf3b44d6dce7f01a512b1b7f13ece1f10201fcf4f79cada4172c8daf1c2d6a36a05f15e0964145e9f4f5ef78a5cbd38b03976ab9f0717db5ad0022edeba0cfdba1725ab90dac3f6f4a1f60d584cc054d635481d8ebc41e24d805dd1b344c3a78d97c9cf8b679a8093dfd003ab52906a2b82c63bec7ab562be24a8088031fb4d8b487b250767039e53e10fe1f4e02a3530e07bc78b4c0f5570621d30bc007834dfabbc36793547ecb3ac905d96442396f9ab8ef06b4976f4ea0e21882d8f6815a3ab8fe6435501d74445fda1a92ca9e511eab9f5d3b4cdf638ea86b4d8075a7edd424a23fd65c8bbc32b038cc3ed77630697c27b69f28f7b7fde20ec92c3cd602f9b53494e9ae983922dc246d51cd2c6d763244298308fcd627f7e71db7e6044ca6b340c92407398261bc16aa49fcc58a3b8d4f700d907b80e4155099a8bdd106988edba6d0dbbe2aeb01e66cb1a80338291fc492235f295e07f58aefb5d027bf9ec277329c2f5cbcbbf50e9dc00baa73b1e639689c67d0146fea54b2bddd80ddc13c7350aa1e77920111c4ae8ab6bc474e3333523a620d9c0a1e4eed2a17a9a542176e2499ad6311918d78d4079ea8f742e180b9c3a8bf5e990a7b2c21f6895a2d12524284e27f3deee01964556b272ed08c36a13dabe8e21cc19a0fbd41a0fd7bb863bcf578560bfe9718a4ba7004d099cc73916c14f02122a9d0ba259d3f0d1164c86bda4c1c92d70becc4b54aa7cc26598c1d6b94f11a08450dc277e9153975cdc1e2a0400d5841154cdfdcb16955463e68647253da14cb4601a36d652e6b9cdf86c72fb3fe019d15862001bd4e1f4a27aaac6e81f8dc4ae1ddded573870dd129d2b84c16a39e0ffbfe7d51e6576a949b6e48f845ee7453941a5b76c66ddcf73220f41a13892188fa9510ecd49ecdd60f927833252cfec1bc0fadcef577e4227a2dadf3a59bb28517e52c7b828d7fada654effea590507009ced4d27abca5d9b52f3c3d656be9b5e0385f3971264cf347284769c8caf84886f671c136d8a478d8c23e0373e4fffd5b2810e365a1a593fc1eaee9030ff39e55bebd7ce4b1db37d882b15e7c3d21ddcbec81dc8ba643a84cede47f0a4267356a480c56fdf1d7dbbc0cc49123b1430b27779a2261495778c3aea47543e8ff7f2d7981c2cea9ce3051a3755cfbf3fd0d84c49005d449639205338efb4a3c850ea90182c931eeb6ee2188980385fc87096f26e589929382a9fe4c3e0f5e7edb643bb4aa4b2b3697859c7ba9a7d82499f081484dfd20a1cfa535f0c973d8e8727baaa47db67e64fd3759b7cce76fa513246325cd0b89ff824ece3daab4e81e1c7ef0a660ca74764cd3ba29d1c5c42cd2a65f8575f1d4cda0a075f06a68c54db534f66aa5a110867c04d4c8b3e2737f139e984574f257c3c3cf93d63bd70345756e6cf0a02e5437cfd3aea0d8a9e633815f819d92bf45fccf8ef48105f4f4e1597b2a17428c0dde3be6d84aba18be847b5bc51aab40f81146d58bd4d61b4ad72438ed6261ee79f4a5c05b909f53dae35282508bfddaddea6e81dc06625fe2071826dd0646efa44842adbdba055db857e979da4dee92f635674ca844cac67086c80476aac26d161945e1861cd5f0b8d551b60aca2852ecc18aece6510d73fb7ecca960b2f4c53091025367eefc029164bc897bb307ead1dd6b2c2b40868a6f9f174139565a590fdfffde1f25cef5ccb9d1110265ccc566ffbbe81294b0026ee05db60e6179892f2b88796ab205f311e50cda810bbfeb8b48bdc7f6a644be9f459cb639935b73be1f107bac6861ffc9b553a24a47ed5f25175168706f43db928e5814db552f3a9850f331e5b66591d04beb965a5f97963db946c9f0306548b422271d36d45914f4777effdeb2aa31a4eae4a93afac6095869607b0d3284d4aef0da2dec637eef57b0c52d5616b45630410d2f31f4c86c226908817f0c6d3f45f6f34feab7441f3530ca34d9be9eaaa2914184f70f87b92ca5c460b9e652a36c46f3b60a50a8eb5015318c6f6a760edae25fd4262835a6bec4abf91f133ac28632bf093ad042c37019d5358de7a2460364dc80d88cec6852975784c38588c55a274499c423f4968ddf4be044b8fc6d72d6e3214695eb2216f2c0e5a5ebdffe511cd234ce7c9c73a7035252f3491a132203af5ba66e6db767036a0730b5151cd22fbfd2cf4b8d83926a7c36de17e63248d1e22810f413b7574ca7dc971c21614dcb6506d3c4c0b6546cde6c5ce60b3fc0e689deba4fb4b50696983aa4094c047a579b8ae4749a403ace5cb75f87d739a6aa50cbe93d82448abd748d4457994a7d047ab6e0b30b960cb160582e57a11b6d9493561c67f954493040daa0b017fd45ef58ac2630176d9f8c080d7ee35ae5ae9b8ca8999036e749ee1782fad9240b78d1fee5af8b373323efb639769121b74eecdffc027f29cc157ad6ec442cf205f61a7f1740cc4d8b31cb4bdf39ee0ffed376bb103064f2ad3118d3d082a1ff28b76d03a0034d44989c21b29b8d2aacab10938686cf79cdd3c57f32746fb8c879e4725e1a1d74d0c84d47c9187fecad861b5d161c262dd495185f41678e0b085490f72b97d772a936ef62bf3f4640c5b3500ef7e440d8e7ed80e6cf257ea29505e1b41df55eac8b2e9c038316354af029ef27956e0d9fe7b402694beb49b856d60750d11b4344b8c95ee7778c2363df3073a1b8be732e05f2fee2db0bcd53a96750af172f7fbc462e6fbadf3f6f8463d498098921ddbb1530c3cb94c2464959ea7cc6704f4d77ad84eef01b7a34dd4348fb7d0f0c30b015729639b45a03733fd2d8432328bd5db61d3ce1e69e8df5b6f0efb508200f617d013e0417c1f1ee52620a8d0ce3c1c573809dbaf5e7e3f85ada391d3232b6efad4553faaea6981e7165636e7556e260ebaa756e6f4c7a6c241885aef6375d403b033d4e1c60f564b286d8e0952242d4e38edf27b33a51e760d31c544d5da8927ee2f6e0d4e3f3a9a42ca1f4123966fa33816c8db66e46584ca04679f091b6e19014154a2eaef5ca3c4d172672644d6c78759712f3ec20651240c4880073e67f4b5d43166418b93f135c089424e8050fe71f28ecef4c54a2d585c50266c991450b26146ef7e9b5147d4a0e0dcd5b581285a7bf9623a0e888b5aa4cc04e2d3ed146cc5700d3297f0acde9eaf5a6f94249e3f9527882d0a7c6d70b75b5891c7a5d35d0edac5721cca1607b8c35d7370e73307def0944fe907f250112375eed48a1e1a090b86ffcaaa7a9003ce68d0d26d1b267fba89a6da54db1564a3a3f27845258edda38d3845c9585873c91cf85ced29e3113c747cbb87280390dd2f80790f871d7d3c62f47850ee4a5c53ad9473b9508be8333bfd60e7a6d4026ca2436c76784ecb3c219170880b730389b5089ef38b3272ab7b2ba35b9fa3a105ac89d3171eb9906fa86347ff8886d13c556d6dc24b24c51fb77060c612a52ae79f990f93023834cd9af6b148e7e3239166c870dcae1c2b70649c664637c17531cd517708ee5d5aa15ff9c0f5e4a7d7b7fd5397eab886c1fb926447b7ec90c570822033b4043c8e4b49e0dcfe7b86711b543cb107a444d82c848acb1be98f30af0fc8d83150b1ec27bf49f2ad50e74fb7e7128db1f19d58fffdd3ec1121718f95b8c2deabb95e108199150844ed0dc3f6f1562f0dc4a441c243167a683f61c3f45876c58553385832685832f4a1e5e0650a168f1de9f781eea4853ac0e46a53936b4cbc403de6d02ca6ec624d04d438fc38dde3812d3d4e56501a765f03844d001e466d7441e4e5457939c7b8328b873900238db0b138b685ad3f5ac0b79f225d5a1e984ae97c433e9d94102f17cb040030311457176fe04302b18a2e8ce3d6b597a713d5789e1ea3c1a483894ec11bbbb253b82e23e5db00e3e093737ed4a126f63a6e0a3d07695b5b766e2149a856d2708b00e523582450f62e56e4c16f36505f6524a1d48c99b905c724048634d9a768c576eff76c8029f1366dd92fe0810ef7872b71f0d615c887f4ef12f940b7dc7819a8463eb63d30b1a186a60d4a4937e5da87a5a839a782be884b0012c4f339a309ad6e129d9c5e700cdb2e78107be92201352ceb385f9d790eb5521a36bd9c2deb3a83a081e65f11d25575f90329657d72af6f63a6fc589036bfe61d5bbcb662b0a8aaca45a99b89eaafdace4da6deb9104e4307c776bf09dd3f3160b02031399d48a5aa3de69aad34cb13a2ec0c2c7e0a8f20d11e7900fbcbeffc7a5dbdd81eff40bc588a81702eae734e5ad9b9a61724ef4e6d1a676de9441f7f4d4245b8c06a5e85c5f6e0af523c07c209874e3bc40f1c5b4953b955167155ba198ddab8fb006885052844642bd36c2acfde23e20aaea407a770ed4cdf99686feca665e3aa33d3c793aa26348890fbcd8b62c09dc15f46eeede4034a4a3377dedc760d1e5d1e15fc447c2b455856c249b7ec3f6d08c68133561e19280456c8b0d7fd8561a657662807fb4f130ebad30d05631f186e3a27cd6949c8d4c361ba6e1332b9028170a1884e085585c1513153abb88c08ea47252fe9285c804af3c975bc8947da20b770a61b74eaa19f9ac1a25779d148ed52bacbe851253f6bda165a8e8a3040a4dc85b53937bc63c59c0aa27ef21816513d09972673e0b38c6a0aac92ef30dd8068515716423dcbbcb6a7bcb00a40ca416208928ea41a8cb6386b0592fcee920c7f1e70ca6355e5772ab8b811fd075c40568cafbc75401d121420172299c954262fcfd44ed3f4cdbbd1ceb184afd0fe797f2bc2e6d9604f18daa87ce9c75540649baf829640adcdceb47f324bb5c621e0cc7bd8d6a760cc75dbedbe3e3fb1cd8973210157d7dc90310ca86423877a2078fabda24f0dc2d6de0ee5c01a31bee55e9b44dbb6cecd23806eb1d2007557d9ad7dbe23ae0559a4311e32516f6d65cf080394dc273310ee0d5aed6b684b183e34d004d9da969e16602fc18fb3f6d297066c326d3a1f9e4324c1a9edaa3e9371c78d86eaf7dbe0e83c2be2c975d4c615e80c4a427ddd49c23f751ab1caabfe58b36ebfdd45f61b0931c1288a23857e2f9e8d5f4a212cdc85f532eb78bcfbc40213d512e07bfc5a763b82d2f3083146cea77d5a67f0d43beabf43a184f7c08c856590fb86b70c638dc2407db08a62a90661a8581fe580b7c410a678cb01e314db594cf04fe8a041c971aa24061500807b3286b2fbf040af38f058ef630dc8826bec71eba9664f87899514fdac1bced474a6450201caa537f4f8d086e996f2674018b04787bd8895ffe3fadd0f1c8b7b304c925cdd3d06f036baca985511490bcc724e335751a54279ecf2b5d95fc1363db79e20807dbc0cb8c82b2acf6d7a90f19fdea13f332efcb90d6cff13cade35a9ae39af21199e2c40b5c380170e87fda7a6e0ddd7e7196aa6c46610325da0387bf8e014008f8d039512e0837d89264f82305ddd562c81fc7ecd509c7b22efed012358e661c5ee4a16399a70aac5f6ad1882740cffe8afb9d6ea7c632c62e801f3f81e6969b139e7d5e4473fd7b9ce264c5450fe93e063cc31657f2c3b7fbf34cf157155c085ade4dcaf3f6401f44aeae3bec8737bcd1b4610dc95db5ca340af42c32954461f2a6c2791105121fc843b032b88bbabfe8b84a97dbd94b453c6a797db3afb63c20218f3dc61f8c06a4ca96db4d3575881ecbbeb01d1dbb950dde9c8dcfcbf837a8504235e9998b31b5d3fa4c13fbebecee1cb7d2f6269a803cce8f9974578a23d097b047c6173456440451a9086a8cfd09c309ad737990d51329247412c36d63ef2c17151c8076413f6acb2a94ab62c0a20818c4fda986531c640d2f0d06578f7227338747de5f7ad5d1edaaf9608f0b8c607da4badaab36980d17bef381786b4aae5ac8c02ad6fccffd11b18cf713e97dce7e7e014999f0d6be38cb5787434b6f2bfa95d410ddce9d2362054ccd6d2bd9e932cc2961777d1667153277dc250795e94a9d05226e1973c1324eb21069b925084ce2a10053f06074cf115f8b1c1fd505d4ffa4f390a2aeb98eca17de4b0365f85c46e3354638dc210484958afe4ff6f818c903a600c1f634228146819333314070a97c59762e80051bfb35f69616186f84915017d3fcbb153aaa8a77a90130939388dde2d77658bb0f00897844ab0a1eb3091fbb4e0a2a4d59f4a7c794f321dfd2f6df4803bccca3acbe96e1e1dfad1c66d7d9654e3b2a10a1b4e0d1199ba433c5cb0a6072dbbdda7ce1b6276abb78010c2c1a71f1c674aec25dc85c217781d7f9d2989e598c8df128a4adecefa9aa45e1cb15327ee4d811059e80f13d190e98fd2b704213c8e7dbc0e122b86ec77a7cd8dcaa6b4f4d5c4fa3041e7dc8a6dd56881f1597abe02a65ef56624c51c1f37877d725d154595b1ef81bcd2f920235c66fb32682754940e487e69582947614b9ed85b13fdf5d1c55ef267f6beed9d6dd99b1d7a7e791f116bdcc31ec9ef2a837682c011a7e09e89a4b176543a915575cfa6e0bbeb9da228aaae18d9b29e4537b40c4e2243dab8445dddbde8876c5dea2b8375f1162751efe4b4afe05e7b3f2163457b0c5bc5e49e75b384d74a7cce7e9441825e97c628ccac74ab0a7d596760c9783672557c63b51ad78fc16ba595e4f9893a9e055780b090102aac6ea4bc9ff40cfb9af69fc4fa15c180b6edf3925574c49ed1b07de2eaee9cbcd83974c49283528e3f9d1436d75fc6d160d6456d23e48c88429e8e5fd93a0d0a90d5caf7e5122c9afd1e047b0df704a506c373666657a1bec45815bdaaf31fb74cb67bfd47229280a00efa2dc30d5b137688f65028066fb846e497a2721b1a46ced00e80be2b3e048930b7bea18f9dd08323bebcfd09336cab172a50f1cff41a5bb35b4190b82cfe12c0df4ce6b96f1bef351c1ecaa1d2ee3bf39ecd47a0db1e23e5ae7bd8a7374adcc535ae313ce1b1fa8b96a2752e7eef604a2bc6ec58472b2f3ef24fb176c29a0aba806ada3617290f6f8e11350628dea844c104a05badb1734f094e050cd9aae114533704ae867bcf634ba2e64c92bf018ed02c3107806b469ac8e4bdfe1f25ae003f6d1d7081f0d2cdb26c1436abbd48dd91bc8853265adb9d098457788eac374c0ad133bc888954bd491c9898ec40eb76619f67e1a25c4e2f3ccfc647a3cc8d3a9bd4b0c5fce18fd6e27d2f2925d62b8076f30003f007cae664b93a02f7071a05f2a4ae9f6ef5f7c319ab1ede3752460becca74e22a57f36a81701a494c5d8acf4c2f938c63efe3b9acbda9dd0258f3ba2428c4e9f1a00a2b5950a0eac9b0714dcf7e2ad86b0b94bfd5ee81b950d0d0e200edd0c6beb02a540f141c53d4f0c826cae003a9653a2b10d8d62bc3e6f8554b9fe5cd0e810853b918ac4f5746b8f076d1debd2c7d82cb4e95c878437a936c31838f1be62b391357ca6d54fd116e20033d7f37722b584bd68725f444bd7d33f5d3a25df1ac16d96eb3f4071ae791d716d2ca206af31083ca5048987219dd60b5f293f141720367634874e8bdb37bf12526d08d0d35e6f0b1c701bb5453a55fedec54e14009a0cb35dc9216ac77c7902ebf742199567baed23989f1492042f7431a64dade219ce7de328095264b83c775852605ce9c1ec39530649a59f2b6da27726798fc8c1a90da8a32026da370b980625f56602147de3c18d4add63117a54bcd0a525dff8d614bb62552cbded666c82b0003208c17b8cd77d31540d75855a5ccece93c0c5ca0665524305b88dbca0d445b89b2707088000d907a53c209dc99185f24ea274b1e81eb0d9b4e07c20fab28de3cd670a877a1f97f936c04f7b4971ba9fc328aa26537dac4bc9b8460781d25549ee6c0ee5e212efee22ff8a84ae85189118c96ee6f35cfa0387e9f6aef4eb72cee9b97601754de6bf7b2c6d0eede9e2c47dd4e7d5b8eaf25005613da02acafd202f26ee6a2573f88335cad84af6d5d3f403a3c0ae7b9cd119d2d6442c8376071e7748de15320f4d8486fcdf2bc7eb859a3a85b3ca7aba9e7678ecdb9adee98d41a2c5499e985866ee87ce932c054efceed214faa037ee17f8e08e4c97c921d5205f48136ed346c4d8da133b5d5b30df304678bbc1e5be88d20faa4ef64a5a5b133704ac1aebf43492189c2b01cb418f82ce55a614c9089b6642fe32fe3c1c573e0de9b7f83989aa5d868e2425480330c694e0fbfec9b2d3211d67265e504fb67e86e9d4d46ebb43abaecdee1336e8846261fdcc5b3bafeb558aae03f3347884bed60f8732082edb7248073eeb9c069dacc57a2f9670a0b7f914e90b67d1cce19eedcf56d2becca8783c77e32fd5f62b1db63a20a87ab1714268fd719ed49d3d7d717e213c330b06e34e7960b77c5b75b965d5de931ed9905cbcff6c796ac056a2fd64a0d4748a21e5092468540f0ebefbfbb3a6b706fb936c62c231776d8befe94baa21f78ffe8851aba103e76d4134bdfbb435a4d77094befbc132ecafa9e8ddaef3876a138fe56641dfba98e70faee483f3eaed6beaf5fcb22fedac50b8dbe7490c132c410b7b0b6af61dba6bfb542ffa06812e59d380f7e9d011089985e80f2d7fc96e3a3d1be0b45152f291abed3185d889193804f386436df3c7b3b8b0b37d46b0646dd5abad83fce0ef22d48d25f84c213271ae65ca376b608a1e00dad75daa322af8065254f1f6a1033b352510f751f091df2b427e7318ee8ece03f5977b747e3933be4a57895984a3d7e2dbf5c1099da4a9162c0c40a6e1e383752365a3f735d460a20a375a518f9f45f35fa4ac0fe3afd3fea6148f0d35e2b1a19622e41dae406a022f4d5b18fd127d3013035075759b3865daaf7cd28f2d038e9a4103db941a486b0fe2f75c608b259dfeff43035bf73010820d38d721347dea32292340a4c003b137a5e1eeaebe8787e07c23a2211666fdd14a4aabe27a1f265d27582e5e1e116fca5d7aaa5cd9c714aec96d66eec41546189e6c25f14ed05b95da5136ff5894e253096623084ccb62996ac6000ecb83ad900268290a0d1b68c63ad46660349a38cceda08262d8a8a29545665038ae14cf787528e2ed38568b34285bf0c1a6af41189b473e4dd24b74ef99dbb11ce0b772f6a955df07942d24bad4a3116f1c5320d5cb16db7bfb65adc424c573164a86d0729d50fea10a4451399e832eba3fea7c3a5b3fee476dfbf5e0ca41c98f7eb5571d90d999d32b775052c6fa0e28472a53182bb7648e8dea9bbfe3ef1b7e86f1f99c570c6beca6dc7e9f620d43d4d685c8c97e7660b9c644d5940a5c22522c795a42c200cb8fd3c6aa2df110f2e87ed2ca0ccffde2026c89ec6afa8f067a73af2abf0ae3de8425eefe641773660382cdded14a09c0e5f7f41d11d7b309a4dc94596b238fd8844a7f8a85db534ac9f274185c2e15959ad83288d995bcb3931cf5630a9e4230b1e4896c60c0d35e725a7f2f47647659261abac81e106765bc5c79b011d6eb504c4d805f7f239359dd9f90748d5bcd40f30000494576885d7ea696d66713c9c447761bd358b520eb53d9a279b66fb896caebc69faf68d239e9d6880abf3236cf977cc7e962e98af48e9f17020b6020ebc209395717c33c250cc51493a25a4f850aa5ff9513933a8c5a11aca22e09487c1c77f95a283d2c188d8166cdc0859677b514d2140589e8ae610b2cd7ec7d358275d430e1e7fb86df99b43b99622afb6cd7a45a7c040015f8b7ba7bc60df22b40a45e889f728d2d7278da7417da656e315a297689058b353370b89eda7b374bb3572d39004de3c0e9fb053b4ab9238024d5577f49edae1f99e77e745a9afcbf9f873a49e55f752396086b16645ad593a7967de085466aad3a06069c5bb40dbba5347c2ae4b2d9b2b4f181663f7bf3924c04986dfb3f3126fc333fbb98213da95ea087648f9b2b7451d8f8f14b0641daeeffe430751565f1c9b84c156f2ba7387cb0b90495606af5c6a0953222499dcffa968f6ae7b0058550e59688acd26acc3986929d22c0df0ca4c08f472db0460347e0018c286c9f8c6c2651985c26ce835e2dc1762745c949975eb43b08e24a52b51072c1c1f72a75daa6b82813d8a21acc1554bdcc7d3aaf1c7340044a917d6270efe54fe066c58292438cd2b06de9ad492255fdbeb18ddfb2d3777032f4675861f6a76352faa34fba43c447d470dfd82dbd9501d6aadcc354db99e7a95f567eca62cbccff636934f1b83617cf114c6b62c42514a23a8814026a6d3d8ec22731d5be84c615c7962a6bf4c4ccf50b513333c2f72c27e937c6be7653f79d1381e228038ea927db50922d30c1dc61c02af553c1bf82be35c113789eaffe43911e82ec9e00421222b5d52ae21ac6711e24c0b7ce2b10735584a6866eb936e6042454f8238fa3dbba07e45934e182dace5610a2c4818a6d06f6ebfb915182c66aa74cbad0b5950300bd0ebdbc813dabbd937d2f4b9d47dacea5e7f8600c7f49fa2683aa9155bd6776144908873eee7af2ff98bf18a983610a429f08d26cf3c33f41eac6da2ac4bbdbbcd8ef3ecd10fc617aa316dd49de0a8bcf3523a56ed8b5e1111e4e40e8336c57ee2afe26ca3dbcb77dc68e18445f1bc089d91300a7e94ec1b36838086e17ad2b7280eccd2ad3021b12763b1d048f313dd36eb779b5e0d859fecbd3b7f371fa3c8efcc45ded9dae17d81a04f6337e7c00d07d5b010ce0672cffcb2964b76d15be866887d850ac3a480ef8c23cdbfc514171b34b4c63adb7db5185a4f82d2f3620e200d24f6f47248f6d23e0b8eee21f8908d3fe622d40ca9d09acb61ea801e0b8ac08886289f4448c44ac1c543112b03df90cd4dc2585c714c0bfaed79b26fc77179f644c597e2b557705023ccfa2b27111934e360cd4a3a33ead047eb8b2dc1b645116c124a5b68806f54d5b14d1f16a83772c06c9c4d255a8bfc0bafc6952fbddbec8ba67bd3e578b78af7f0a374c28d009075ba8cebbc3ea9eea20954b6753c38a2523bf1b0ab2c213eb10dc847c223fa71124b4d811cb24b44b70d411ea010bf9ca9c5f7045648b2b2f63d057f157edba8c5351f42d8d94fdeda39e4e844002beca0945134724649c2a8c95dbc02022f5bdbe46d129e8fb16b4fb460ae2340976ddb0251390d2c339747e03bec090bf3ed39543647ef758fab5eb79cfa1b776676923ea593fc2286146dd9553ff15668053ac13dd811979ec8be55e59e9bf1500ee43bd7f374f04eebddcfa41a2dbfdc2e65f74a73b7debdc6bd3d30b46ddd624cd4e22b69004595e96b1df15cf7c6ef691816f7e7919806ff53c403f721a5ebdfda0a667296fdc7a11736d0d99ba4ccdea2e55607e5a649686c436322534978c778c8674ee217db3db30382f052a76ee2ee88bb3c19488da19c885dcfd85145d3d349380c586027b631c9279a516b9c088598089e6f9521b7303d53d3779d7dbe7ec1ee99642ac3c4f273696128a66262630c8ecb62a20edc981f885734b6fa4266bcf98e9400427987970e3a20e0b5b4a6c7cbc2b5c3fff0fc8c692f1f6fc76afad62547c5c68ab0faa49aaf420922faf697dd78062b5d344ca3329cb27bc98dad41e262426b53d33e6aa4209c18839846e02c1ccafcf215e2ca0b7d5077633a7a1a65fcc45380d2817a7f04b32e85ae0d14cc2644eb07ad83025256bf8762c387cfdce47732a5f7482e361471219548a6dae895be955b324bd3338ceb72d8b91faba8f81350311effd53abc987df6bc0d61b1dccda81f868c92e5d17155625ec6fd6b48269f6ffc1a20ce0e3417d1c97e3ceb9211de7e9ce54613856755ff8bde20e6dc10d8e2936cbf56b82b250d1a0e9df29cee220ae4af21eaff190631d9bd4b0ede19ac2b3edbb5223333f268c9216891b2ef816100d124f982b3ecf78937eb5389123f9108884cf1e9482843e5c8dac7935a57a3fb8bc4f6bf45dbc2726772f9f8fa8cdbd0d2675c3d424b214598b3ca8dc0290d5724e621655d1d4338d2b6a542dbc43418bd89b343ce401efb2c8c7952180cd7f1752dd1d9f063de9fd5571fa9dfe8d26301eaf944e1666fd97ae2ae4a41f1b678d21146188a42b7c75478a63cb307bb881e472a8d7afab7e9d0740179ca4f123abb9fa927465fa3086e9a20478041a3cf0df8683ad84e50fa026c4688980d21bd11a2fb9c7d2896db43e6b17b486acb75b507efd455a5f7cedcbaa087db07dc05af861848d31e2e912b08abd145644cb0828cb79c4cb89344bbfe584b90a38e066f4b6a370013ba5a6bfa26d1af410345185558256c1f031735afab4862ffc16dbd1911008fade4ace3a424458585fe897c9f1bb81a4f1d731a7e70fca773e5453b2fb90db2984b00d88cc4ad35af96e357cdc3a694def048eb7bc4c51858cd4fd06736775aafb0919398ab311df3e971061b08fb62104717b61d526f771cd234a1f162a97c4455e202221467be73e43df99b2437effdf191c8f85155dd5de5b0ccce3246ed75dd3f2e8defb51440ea09b07ebc8390b5fb5b2dc89906b5da76067bd878be62d998f41f93aa6ffe8ed0384e13e2a429680813da6a0983eb57595dbf1d0787a0c89858000ac97ef3116a9681b53058bd2fec895815510d3e81179b43074f82d367a6c7ea3431a53f38b9be6f61b73e3f087f9bd4b9d6a4e17b68c858ef892f61449f59c16b66698b1c89b24691041794ffec5b77c30aae4f32f84039efa2be051871654d0d156e2b4c673be159093bc239d3f2015bdf13d69811751c2dd4577f9a570030f5d796c4689aa45c63e8e18aa52dd53d269c5a09b7bf9bf64cf7496a95784dfbbbec9a9239683bda7e053b970b5099f869509c8fa169c51328df90bda621d12e964d562d937a222184aa24fe59c4a62ff934dbda82e8cfa60c94ac79e9b5f8a444c429751c9444b06bf220d20e503a429ff9d8f7123f27d5dc26220aa5c7ba2a77933aa642612fd9cb1c4bda0a804525fde0064a79c5bf6721f93bf636060be6e579176eb2c1076895dfd51c69d0c2554285b412558c3ce8dc13c08814a41f22184348f8f40981b81553f317c5f72820b2c8b1fadea6df2fb7ff8480f85aacc7fda7df6397b67d62ec412c08d4b9ffd86070c0714484a190c9df4aa8bbaf20faed999853addd5c4a81995b95bd82613ae156aaf879e54e8bb107488aace3e106692dcd24deacb0e96076a8aa35e9d5f49219e230fa3bcdc6f880b0a784c2a184e222441a61f51fd6d65a37b82266be0645d51e66ef8fc11c8b6d5e1507e4c5221db0c4bf3b19d59c65e96183207f62b6d7e23711d966ad628f5f733a4505bc1eee29fab8a2ff3539be7dfe7e281ccdd23cbd02968e550d4f89e8310ca6bfac57ec63632f0ca4fb36a2fb7a623bdf99b47fd1bded680c2373e57de058eb9b356874d4f580cdeda494b422f7d7858982dafa2f3df87f0613d4c8ae0076fd8335499811aa954db2432922441853933b341c8b0d7cde9b2e98b6be77952cbd06deef74ce77cf6015e849eb830604fd60b7b100daef2872d7d30a328b7affc1120673725e6ba0b5dcc6be34602687caa3ff01e75b67efdd593159b616399c890714af673c57e1962b6338b2b7390b961bc8c31989a7fc8c3f203b875862a8f6ebe891a6c30f2bf29c24da426146acb2d4e0d6b11d90750e4083a9c989bd33abd1ab1c1b1dde2c3288020dc06974991cb0b1638f333a8a4a7d6e603ded733e6073f0994ac5b4ebc174d22ded6b76761f216d2e89159559d491a72e4a62d08a51d773cf629c149808878700b9ae3970bbbc287b86e5e86ef6063eb894b1145865f59d628403b0799899259d1999097c13525898199f1a095d19741e252160432195970050e18ec7b49230b70b7586e08f7cc2db149b0d3ab01fe66162d914cf32c9afa6e9783f6f0ff871b924ee86abdb31d436e2e4f57bf85d0232548e0b5a779555793effabb5bc8851717d73cfec7ef82cf47b129e2cba8e80dde7011e013f76b43640aea0e5e8962ee222dc4cdfc556d01e49b0a6de19f60a15985c66ce1c218a1b6fde9edd281870a1fbbe9431f4e916adf5f36f0b979bb110cd445933922d7552d0ed43309c6a9619f8c786365ed3fa9345c2501320c8d643cbd670f6cf712f635cdd5d2db01cab39f2be8509042eb0fefe71d19998e22f9bb835b9c5c205ad77bde04136eb134d9c31c91d59797f2966fed0d23302ce33a39ee8fafa324b95942a4a0770c402621467fd3656857907fdf90ea67a6d4b50ce02ce94120307caf8bb1dd468f3cb355f1c623f173136acd2d1edc6d6e63baa6295f97f88b2eae67c81ef878030b058600b913979fc8e2f02c876187e1d64bc68e25910c3fa968cf8db88a98f2526d3e9a871cb4387c36faa8b39798828d1cd7907f8354d3a5fa2b3862c1b73a02d42be3c7c405947374b801156aaed11250cd61966d583a85c75926993ed316debea34cbbc6eb9abbe13b342a71aa8044d9756fba79c8a651057e3e40c9fc4257b3824334b096f4615362d48085d5eca3faa4b0f8286d633ed54924ff53c40c78d6dbda97ec662b347ed1acbcf4d27217bf45ba0a3c4ed3a17c67af1ac9149d962ea00c01bb8e0045b30823d7efe2212f5d3617978e3b3a6cadc2ad58c246c55d685e40eef2c541440d4b36b26d7ede3370430369a1f1e0fc6578108c4b8086c0aea55c9195615a49a777a1e129371036f1d15afc7cbc18c0818af9a4731e01386c898809d97cb0397961799bc3c8a01bc5117bc4afe680e3ccf68026379c53a01a3fd97ae42719152e02441f55d42b13d9be2fc299d2ec605c11817c7ce26e8f77034af20321b594cdc40e0a3b861d19e379412f8bfb82633ab64de59af371d6df3045bd73d90edd46014c2beac5043c4ebf219681418d6eed0a4965d9988f7d9ff36dadf7a3aa1c71075d9f0bcb7d92fb2966d60f6588c42c513e001fd419f95d6dbc7b8a13e683d7cfc9901ed0ee6b165b4746fad995b34a497e21b0bf5409298d9cdebee5f1040a54b16c9b1e8d0f2dd02d46bef5f15c201d35b2b970d0c3cdbf0254225810467c2098b57b962351a7c92924bc27875e9c7b405447ad0e672eb5c339d9efbdc3a30b13daafa4f3f31a2bba9de5ac4496791b0b30bfa2e3202d271c4ff865244b00542972981f508c0bfc38e34add835e814793c708e92c0ce45472c1d27a5185106fab3aff466891d59bbbf059668e72b974e64442bd9a823fc71c69f65b8e6b84036b69b79c9e31204035002723f37d8e9e003178bb34d2c525f642c9d230ff604a2d141a096850a715d7318a8ce680d97f15e45e8e88b126a62a88f27b4a1b0c96b06726b1c03d697fc4b9dbad04fe02aff5890a5055db6b176af9e4a468df30b6ee4e1abf8c55251421909e1255e6692a20a07d3052edd32ef13d69500ce17ea81a0ae17a749f978869ba71a4e3d56aab67de7c215c8cc24313518b69dc976a3a37e78cf4567bdd5eabf689e2a9304e3f9d4eda9fefbe65b94f8ad204e34c3da803c4bf277192525df7c4186c01f4698e28c0a79ae02dc5e2a378a8c5be1e3ba49ed5cf9e49c929ba1d2c57456a8a5b20ec3337724ab280332263adeb170c1da28000191527b92f5c31e8ebace456d11b6c326ec8598866612f48bf8a5f9630f14780d6b0e5ce504f4e9f43347d648820c2dbad57e8db5a080d3b820383fb885862cc35524cf74c8980b1a0b551f93456de34d37bc30bba048b97b346de2c32ef620f6c1c0385a6420a9f173d146da7b5b4ca4053fe3a6380bb83fe56b47207135976c142edb03d86c711d90f5d92bbb0f4a41c29789d62faf930d1dd5ed6b481e8ce8a4230fa3edde87ce2eb1cf2a92e928f78399a0c366edc1efe200685557ca827c9580e33263dedf2437f6d4a357c1179f6361d194efd94e5061c895a9465a0a406772c45dea527e273308837c58eae3320b4db53e123f711c9f1f40becd64a59d61f4142253d9f38cbb44b22547ce5969b2d416ac83ec13a107dc184ec889c9178daa7535803cbe6ae2015c2bd5b3a1155010b3b35bc383d905220c091a59ee2a68a7ee209ca48f7fc0d72562479a589d82f9ef8d288e7f5a61c6d2e01fc6717a2b24673754619d6f0b3cd9692a5c5ca0b5f84fec9e712c2936cdd0e75b1187131c5cc1c285b45e094da5f9fe4feefb744dcec38bde1790808f582641e0b417d1a8f1ba7bb0646565e5f5e7b6e1ccc0d0adddd37baea55fdbbb9914f414298898252004b0bc6dd84b4f1a392f5121926e72b29fb6dc91a77109a9aa6ae0c1572cbc9871efa53d5c944d31f5492b3c9f6b18751361ff3f677070e86a959d01f6069cd5e970eace56c007aef805c030314dd587fb5d5367f2a6acbfcbd6ae301412eb7205ca07db05029392b2ba002403b71ebd49eb0c7f9d27d5a060d6f096f45864041149c88eecaa21b6cff0ca67a4988feaaade72ae184eb0dba4cd635140d6f17b38cfadf5447a3bcac23d235db5fab13289af63314a78796a456213927cbafefe90fa403f726deb3955d34fe63cdb61bf55e0708e33a6e0b6495d55460f32a7a412499c6f96b93a3df5f049d594d6604bb5fdbfe4312fcc5798a41eabaf1fe35542a59c974bf94d9fd97fd61c4719cf7332bc5cc2281b36fb5c625707c41532d8302edefae58eff87c17f8acd398dbcfbcf6928cf3f89dc100b9607ab5550bc12c83319bda698c2da1d8d38bb74aef3e01bdbb05d8c05dcf5192a146d1fc9a919ea51d12a3e58202f9144442fb6abeba4ea64c6bd2aaf81d8aa1b3dcc3052e03290f3cd18e92be04a574b36718f9693f3315e888ed2bf7952a1cefe38edd332bb28116afcee6219209316a17808fcffe3c907c34bdf62b47b58aa0670464a07c5b7f2bbd0e93f0452e77deb5d1c5ad99e17069328138cb67d16c6e9cc7df4b6f0349be22ebd816a4a0a610af353352ab83a240bb63776e1ad6fe7543944feeebfa8408f3846bde36d054cb77de3dd8df053c4a2944d8805a714f8284bb559bdae782774448ce1dcbc5c7dfc3db726a7c4a13867f0fba24ee30362da489d257e293e4a4c2b01b3167b60b8b327007deb8d1d775218cf9fee4277079ccaf517b9b1cfe4879264349cbbdf128e7e86d15d18340c5ac4cb441b397eac668215a730151dcd79c24a9bb571f2712d954b9820505862692a9aad854ad3a9df6b860c4501fd2fa2d0e8f9af0152835bf3ccb60a2bd29a631293acd9b656ac0e12c482bdfff322b862d757188c6dec2d00749ec5571360867bb493cd4e6c972d2ddaa99a88f5fd0a0748bba1926625419707cad3565c8c0dde3eb4d1574643b45205bbb05ea7b501d2010adb1b9aa97b993c0447741755c51e01a95e662d1753ecc301dc8366ecc1106a4040639a04196b99f377088f758ae6c06830a1908223500b1d9b6177429d2328d288c42600edfbe23dce1f180f3dff01187f116540ec8abab3501badbc48c49b01e7d2c42f1d957ba4b357a841a86c0a452243803c631d9608aecb9cbdd1357ebb7d3479c5d3f046f851e3a6d5960174b51481ed8694306984d73d6af9822577fd44428982fedb7a28efca1faa39dc7ff5ae685fa8d45d3a81a4f30a4f9b58c67a7f6869bd27eb667a8503d06708559f99ae0c03a5da8e8b911442e4273936ba75f38930960849b4ee28c6a37aad89189c2cfe8bcbbff3ee37fce5ff5d2662a223b9a7a3ea1a4d51b4d09ec02e30bd4cf984fe0f73af90319d0b0bf61fa1d9d17e35eb01539d9ddad32302e2f2166d33e97d6cf5ab59d1c80ddfae830adec1c45a10113ed2ee5e59fcc757c17db07ade74f299e822e77109cf4f73b43fc12637dd5ae626024cdffc4444f703b624531deffd7a523e5dc7187190e5a9ada07ebc69544aa96e364a51b8ac95183f2c755fbd31253bb3ecb91942684f15d0aac13126cdd45ef680e54453af66e7a2498428eea9e3a70f238b2ca05360f45f932e043321d54919aa6f494a9b2ef6b8769c46e0a1287341c04097e73bb6e16463aa1c3cb2de3a1ede58631e608f86ff810aa31c6575ad8a5b86104348b99b58820db8cb1b788ba3da32ee2f4450b9a61a66a082bea9864edeea4cf7add3df406e74a6dc2e61708f67be42582c8020b6bb0334f428434d92996bc5359b92349e3a5cebc38edae088df8ebaee1b5899f966569037bd6747514f925d07f13c92afe146073a7f534e797c9875206b42a5f600d5f56535fe29b09931ff132f054ecbad3837c2082fe74d1e71ababe7beb3847500b3902c019ead809986e07ef4e184f314c4107d3b2874168c5f168342164b2c92b8cda335f0437bf8db836907287b654ddf569c3f53772b78679b7569c266943199398fa1b987fa6089f6e8e2b604e60516cd93aa2dda2748022c0bb24578c28c52312be8faa20e7cdbb7a57e213da73f95e2326e06db98f0427f57241f1544956273189e7ae46f85fda31241846a1e6df6a23a7568d18b4f0ea14e5c57dcf7816520938fa67d78c972c4a4e2d25831ac5fdfb6bcdc7ef8d61eb95e8beea98ee6a508f22efa2cb4f3a86148d52de11de47f1cf0ca39de7bbd47f61e9b4a8199e5cc192934ade433cbdb6f418a83433476ba1eb41aba42edfaff419f2052a3dc93e569ec0e67bc431a6ea4485c040e54541b13a9c33e3d7fe12c49ae80e79a9fe5df517845943484fa89e3a0888f80b8a663a7f6d58fd1eb40a1ccbdff74552fc032ef79ede4d613ffcd6a839b1f337432766078de0a64b6dc0f3cb89d210fa34ee21c097bd8a520b8fc710a6080745f96a11610b62d940a003e55db2cd4ee176fe69c45b510885aaeccaadeae6445dfc63b4d3a0fff81c3fb84be2d76c792162f4dadf23d70d9cd0a01db1744dfd05a44f93f8d60de8d4d0b064cc82f9c65d56aa0ac70f7c9199a9a6452a4eb9b48c40003ca412a222de3099ff518531ed7c820d4b97b9c81e0182fd8f3d8521f4a4ad2831d08e3d66829d2a471d276d00de58fcb1b67fa1e93ca833ef186f63f63a9662f1623bd3085e6fa521eb1116f3f3e498467d115b625b559318f76f85e026173160e69200cf3f1dc61dd028ba11b21c02a0c79cb29d69ff531894cea0df1da34a5bcc59bf3b18834d62e34a72e49a13aaef0baa2b9f22ffa311e75abdd64cb9edd179eb4bd568ec1a69a3a2fca43384b0d977d8d402ea4aadd317b5fffaca66723aedc2c94c5697488b5e08d47b7121500113cb258c56564a85604f715f70da9410d652ac70cb300b5dc6296f184bd356f1dc1fc3ce31866bebbf89511236ecd75082cf97a95e9d92929fd465cd876235b6fc145f41f819e4b41815c5b28339b4935bd973ca2217dca6a394064d99daea9a8186f8a662c42aae904fbbb460ac437caa92ae5f80b2512eae0c1ef31115c96b33c9d574c197f2c787451e9cd05de1dbc4bd7e6b086383aad4c744513a99f18c7dfffaff357b182b7014561391953a32161254cf805f587fe9ce2218dcf8ebb67c357550a236fe254dfe034b1cb8aafe3357959d3e779946f4f6f328be541ef8459bcbc19a352a4473bab4ef6007d8ba07862c9c17989a86040285a5c667974457c1719d423a504fd14d7b13ed1e10f32f8148787ef796c881243586ac76105489370b25cdda652e7601f7937e4b50fe36ca3b2f3a51fe0d3fc6e7a7d28dd8ad281d473368eae7fdebd0bd38fa4de8b25d5ff55a0f2640f6eed26894d62121656fb0017401f84818d8265f38dae5e40ffc3afaf2a2690fbd20467c266bc8a3c3800dcad36ae91043df51a32ceed3ceb42aa1ce5450fa3a98fd7d5b42823151d8f56f2b9aed502acb81b710a95f46d1eac99c55829d234dfc2cf2d95c40c4a41fbce2327270ff4a6e49d14cc9bb8722249ed95ddbf5014903d8265ee5a658e04e4e191e752afcf1e97c7e70fb24e39414af794095999ea14f70ce65ed14f6d1520e65d3850bc048bda1f3b0c396ffbf430feb902f42d3ce7e70fa051c5cf0bf1f7616e3dc20eddf6e284465199aa0acb180a913c9c1d31773e1e9b3c24e0ce1a6f97aca10572c75911cb5b5990f4639df4e86d217b02d27823bb6d72f175b30112a1e542b1fa9e4ff27e46ccf9fad973bfd7d5b818484d519eaa208711a9da62fecbc286f66ca9052bd07c4db5929f3fbeb58b9f0d59547c63f9ff2d5ffb64f62bd07a9d2b5872e57745bab20777c3be989167c7ff9a1f8e6beadfb4523656470d64dbcb53040ed46fb2958373cc53004462f1a69e7c5d90b249b74e68e19765a2acfe83be2429b0bbec53d1c485a6e105c2711899de9b592438ccab356bf51ca7d7e53f450a679f2d88e5adac099d816c2b07c744a248cadb78b6738f2312b10974be453be8e86fc7fbf859e57e707c95225cc24674511ede7fbd5ffd69ed90fb77277a6ca2f0c72ae789eba6050617d8f8052a1855f3925796c1e7fc9f4fe0a20192d814a2436929de1e355c85d79687358fcb0e4d7b8afb062c94aa410c0fc3f7bde9b58ef7cfb8a532920ba400e5a7968b4f85f56c6ad792685550737fdaf7891abd37f39940f6d56ce6d66fc34d658456fcd8a1b16949d1a611f44f3d48a1db3b4ede955ca4ad707904f6e5840eae07b4dd3a4b78fb87e48fd19d7947bded6053099f3afd47d45f453640b2fa6ad3b8a5efc307171d607557d6a96d22ed69622f1126f836dd8a4d466224dd8fef721130446d98854f498da7b7e7b0a18fce2cbaaaaeaf6fabd1649e690ed62c95540a572dc88e5c8413ff64dc0f822298139fe71a15a7e0a1a06cbc4593e06a2419463b4e390fda432b4e3ab7d5cfb960e30c5a4a70978fc673dccf4479658bd88335c137d2e92a08a6043f8198da196354af1cf9576219c4e37a8b79e42b6618a3438dd790f988059011c8ee36a93359a7ef69f7dd2c9cf159aad3d35a6c32ab72d71567a9636a897088b6af582266b122c87698933f91a9ff4b2efd019405d9b6b85da6ea92561946aeb7f7a6a2fbefc92c948293198cb6cd9409bd566f9c725805449d33cdbdf09afdb3b05ace412d6a8879afe105af8b018869096dea42d53bbf846b3b3605e829a7ad229f54886df6c19af1498169560548081d16317a5d08b5a17223db63dc110d8c7b19b4cc87dd1dd5e64d02f06a190013ce271ceb58113576d757f8763bfe18bd155c28fa5977d13c5179bd51d4a07429ea1e0c6a13781e357f58103f19aa99e73b0b913fcd65ece1c3c62a833dbd545997cbba37e5741bbf06ccd01d575ff3d080770e48ba3455ff35ed03eda9ae1d340257889a7c6b9addb8d444685f5bfb02affebe51e3c0957fcdbb1a02ed5c5fe890ab80ff751f9c5b475ee2a5a9654d4e29278c27a97d4cd8e0a056307fc9fdd9421489fc7ca92083f057ef99e26daec975e7e6133c7b885aa68afd1863b0816fbd0d64eddec9c7a9fb340db7e5a327b7aa5db29633c8e1ba1f3c2d4cfe75d5246c7558fe28f1021710269fae5da786a363b8d65a805b27b5dee53b954aed0ba4834b71a6874b33267cf6056cb41b499e846135242b87a1276939fecf82f38a545cbbb4804ff267b62e70dc48bc7de7e3939a430fdb6c21a94c0dd230c3a3f84b6e6b12028e0722f847957cb9f55cf9fe51d1170b297ac9aa109fd1ba39b81e15bcfc6e07cf07488c437229be19c94f352d51a9f0dc367e3d0ba2e72b108d10d3e283ffa6d6a05c4dc34fcdd1e317199338dcfb3b83f5890aa8d1f000010fa749fc09b9b1e4455cf33fa686831734edb451e8c166ee0b6f9a7ed2d87cfa8d620ae8f6bcbf787469f9d825cfa8944ddeabc7a5c041a3b4d6672b8152fce7f83ce81f195866cb973767bf3834ad3818069a8b3118b803f326248d3445a490b12b9195029691508881959fdcef2e49987161977f003782cc2d7eb64ab27818fce1dc4fd1e1a170a064241cd487a686f7235e6e704cd6bb1bfd8cfc2c8a7f440c3cce4151e6cae05dbf74152e182c0e544f4877e51322105064d16afe28bd5b4ec9a51487ef69c18142d1d79cdd270a790e1c970c442109647cff57584552a9a0505f1b89dae89701adaed2bc1b473c1d20d17cc714804f68622c0adb8d7c3610fbbf17f30a1db0e1391a186276f2a2a4bd65a325106f722622aa0758444e554a60d7817069a1bcd3fc98e5bc8a02872c7e8dd25d16753de5dfcf392df7eecb74d24b4cd59f3d24efc5b8d122e483fd41c583ce7fd6d3fed8966ed525be9d3d4e59cb04eedfacd17424bcc40e11bd4d7a514666353543599cafb5a936d787745608712de53cc8f468a0ffb273e67964f8828daa0c02aff8c7afecea9b8ad446a2fc159900085efc649421ce7eea4f6589c5ae26ab38e4097585604582e77264fbbbc77645f5ec02b9c9a496e887abe403a3645bbb283d879d2f0bcdc0a1bd6068b71246f5164def4102880b77e4524e4ceee94c97e24a0a58bcf8842243b821a59258f3f931fe5373825a3af853912b796f16db8a5e0dedcfaeb2a96f93c1d61d67d98a1c66738a4a9f7219620950a14029be3ed89707863390c0850ce5f5a7b1bf7aed98660a9f6d28bc2e87e887548eb95890bc9d932c7ccd317bcedc30d0782eea1d900b53b936121a9d96f3847e29f70e61678a5f7e897c07c39df2223e5ff2f2a5746102964683712fb42764f71f9e5ef39baa0e318607616e79e3e7ed333efc32b5bcc604a35992e0ff72f4f3b65340778134a7c03de084b35dcc79b66bb875dc4da9f4ce79a1c55fdd41781105c3c6997b8fe84fa27b2efa7f6b075e9399e3a3a2e4808d78feed1433763132b78e5adccce0ba2e9e31aa7a1ba1a57cedd1610eb0d3cd72397d4acf9bdfa8a1ec780259800199e37797b244a1242ddd28eea10b6c7dc23e2dd86eefae3662b5c96c928d9a6fcabbf4faada34144aded16bdc31c9815b89a27aafb5b59c81c42dc27555fe2972015c9a0a4196ff799f07aed2fb9f8cdf67039aa0e1d5b54daef7497d73306e843ee2dc861f83da12d3eeda6643f5e1a1c8776f105d8f2ee0dab86b20110d7a9a7feab549c96136df5768285a4eac3e7caabf69d273f46c666df079d7f92e8d46a565dbaa5ce4f75b0e555de2684cc6a5cb7f31f8c6342d76a83355b7d4f37bdd2ea006dc89cc0b468696990f21ca8f1f59d41c18bb43d4cc6a993d1504a54d0d9b7a3e701fb9e4290d18d2b2969e14f4fd550c8afc353c50bf47187dcba38ee6945620a4e3d6ac75e45347447a4d3dbea2027e43a1ab091c7ec05c0cea58aecedf38e01e79962b1fd5c7a182ac49343aabd50acc486780890722d94ae9c08e9b5cf65515ba3faed2ff9f440529daa07ab8694aeb963496b566199a4cffc07c098d95180dc1e20b2a73828449cfd723a3c27281ddad283d8325a67d7b4c9aca48ddd0921f4af1d645f21711ce58699ac9bad95812d006837074e31bce8774c67e712ecd096c65cbc2886164067d5dc9ea9c70e1ff9d8abb0068d4634edc2ae6d12c22a7016c69ecb1ff8ee770e6445bd8c222ce0b1e3a8e22d57b100d4293871ac642535a44da73c6f6ea6cb0db97082faf6d81e44274587d3da44bfa46cb3c80c30f183fb8351844b72153a535d03a32d6e583ab932c212b423e062d034097a47e859accc9b559839eb39d3363ea27db340328eeae4f08443c9144741dcc7eba2c0f92d8316f84824a2568a761bd0347db872a731a7f3b4936198dfef70d0575cba23d0752810ab4a01ab960042dfb1ba521f76cd25efbffce4e3fd3f6bce41be541c5e83a2c040d0ab25c7ea92facefef7275ac1ee1404e0b3879e9dda20d5be764d44b145387d5bf15c20c78384c272fa399505fdbd0ad6348680c12415c3513fbeab542b80f305c82c3c6c33ca17996b4d5e60f3152edbb2019797cbcfeced13f7e20cb4def7a4d2983e0dfdbc65c42fc0c1363341f5dba8687f1f28f4516edea237bdfb3a1faeb2fbdecb6f44d5156baa83080d729df70e1d675afe726fc6756943ef4bf5d738b273375ee50f8a794da28ddc6d13d367dda6732421ea2af5adcdcb86c2dd050fe62e73450aa02bea5ad0bd02b6864024670401804538ddafdee86a13c8a45502dce12f937ff064290460606c96401dce22d5a7fdf1e7b6e146e20fa5e2a7f9465f9be3d4430599a8dad124d35d16752dee55e814545d9b09aeb0f3c7dd0db2e979ab3291eeec2c47b1cadf035a6ca532e233b443f86123cdebeee7cb49bc47183496e36fed2930e1372b585ad233db31ba1eb560bfe3f2113bb07665a1e5536cb4099d5136414bce650dfab9fc4fdbe5d74034d04db32d5e10b20a213d34e64eda440f5c45440ebfce2ab9717a6d03f892b4a3763d9e8218a5d9648d12ce56a31f526bd06debeb86a04b0522be407f25fb41b18b922cc8b535a9839a77b3cb4c06ed5a622e7d06aa3b74ea9da0487771b3cfb75e7ec37b2c9dc3855a57302a9ffd39364c9ed6142a58cfb4bff0b26da00dc67c086012407ab3e4ce69e0d14781331763fc1e3db0e0219cde1dbc144c7c721447101281ce4f4b2d767c450f45022788d9dc563108df1683210e7a25c98b19868eeae69d7817cad099bdcd7d915f15cb914e10f4ca3999a157039307635167c7d1fcd2d6d420244d81c461b82f31c76428e36c83ad0ce5af193fe73e798bf5a183163b889d86b0fd783d7288c10e5d6ba39f226f67eb6bb9c5af4f502fef4a08f00ff03d0a3710518d9715749f3b0c47bba863e14c5565bf199ffa957d65d2e215c4f4a149969f6bda9a83830b186b92542489b1b662b4db144f680b7a08da9db4ffd141e37b24c6d1b8e8dede7363e0f83259dee52720322cfbc752db45373cd909616b2f21be5568b6f085849ca180ce69e84d675a719caa2dd3a459177b2630d68827ea8f4c74f5ac294181a48ec6b66a0edae4acf098117eb6d3ff4a37a061c3d5b6b4893548ef7d574a4693a4032078521566235b75dc27d731e33d0ebb1712ccde7a75787aabe921fcd94c934b3429bde9cacdd7d217bb086ea3bb8ca57b9daeef9ce7dba5f34586935611e2978eb73588456dda05ab466fdf8680b12ff060d897c9d9d1ba93d37362f83251b8178e81202c0a054363b57dee16c0163573de9e56ab15aa79be1a0a010a87f37182d23c9ebe84c5dfe4174fc314026159e4052ff99b71a585bc651eeb255f24e636e2b19e8628780e3a7938ef9fd18ad8d86975228f962e877b180a34b84ffc8bc3d94a1a02e05688829c6d6af712d963ef5e226cf64e34f3f42a9b2dcaea7320a30916b596f8618de89fff48a5f3d486583097f0e241d5f7291759624712e706a7ae7f6a225ba4d6dc5dd8cbce946b27d99e2ac8d8a728edf9576a4b7e55ba30efe1abba4df9e156a51117c1edc698fcef452e4ae08da6f7b9f7929e941952961ee3a0437c1051d1cc5d4dd8dbe7137f7639ca0d59d8d2a08dc3ad01a4e163985206b3c1cdb1d40b3e90ced78824e795d0c945ab8e79b18c423ddce76b456bfb879252f81bdbabe8e2e7beaa5e61348d1e7e612dce205e75a8a9b81279bc8ea3db7784e1f1c77df20ed7a69751591281aca2442708802e60f7cf3092dfa5010fd965b57490773bdb18e21604d11e7937d08a6bbf1eaebcc7b9d852b7282fd7730c0b6bc7a663ff1e22fbd43e7373aad5d6f6486013e8d4c1b61cdb821e32128998d6bb20f04643410f5eeb7a69241098ff9fa4bb4c3965e4328b65cda8dfca1809987d59609adad32479e87575bd44a55a0eb2dc86db82d38e2d2973024dc35efe260d74311739e034b1eacf5d4e4002a5214963bc52ef99397710dcb4160bcad964dd84945bf9b7a60aa50f45faefab8b266d02757d10ad606a4dde1d197821d4fa0148d8e35afa3bce9201b062f170e05d26ff9d4afe78f7cd9559b537a7c40b6e342ec0977195d78328436fdbe1f152ec022cc7052994d80f5afc748b6aad30fa5e1dad2ebafb4efb2531169658283b4ea8b88b77afce0129614bca218c817db8bc776c736cd00bc006c62130d45dd1b24bd7c178f3359a06a0e7c16dca1090efe83ab2310f73822fec93f4cea5e4334241e345ae6abfc3bf41bc01996100179acdd904f41dcffa90f42fd309796b4b08ba0c8e8304e77a76eb3deba44f909129662fd97c904fb52612410e60d156d619f23c6aaaf1d98fa993eb3602a0b8c1baabef4926a4ce3d49dee097ea2147f74a205f4d48c0738e75f84e8885f92487b37448e00b624aaca0bf7d8e6333c767059eb8546f57288d673d0c94682c7ea6cbd6d87053997a4e5318478dcd2c85fcf9ef9e459493aeb5a7399a9d2158d065648a4fe07dc47cc1ee3406df985f7024a666ad9a3473d1d6a81d831ce3028f5c2f0a0751898bada01c46c7afe38748cb23c0201397e6c6fd38131a99658659b3d3144e6959d964503871a3a89e9781d2932604e26dc77ca9feeb70e593a1cc62215f6df17d172011014ff382d0fab2db00492f30eefa9ef5b65f3f83d2eeedf2f7905e79375a3ed31ab4640eb942120d47884bd8829f8741b140e0d694b75c7c569112b114ee7b8b69490c2239e7f743e209fa23418a76ddab592f331f58ad211a0a3df3b289a8dfc28178752e285911c4ec5d2d9e1ba8fc8c1a9e86bd7f7a0e997e05641505ac133007c1154302eaeccd4786184b67f8fc3f3f56d9cf2c28da44cd7090b1b68943eb7e24488990a8106a2fd4ce9b976684c50885af1162ce16d2c00865f7d4b44213430e8d165db78181b3fd5bea2151e331e41ec3385f4c8baed292c1eb14565066ea1ccc971ddc01e1380317240737543567cfef9eb55b0cb50de325b7c74438c94b8784b12d6dd18be9fc1b9b1069fd4e1b87f3c3a6e51a864b314134cd929089774fafec06785c136fcbd5a6128aa1b41b13751a5f6c6ed84f7f1e52898b65a395c1ad8f6cd64f591bcbbf9c34f6655f668171240884b77264b2fe279be8d754bcd9a753a8aeabb7a2ac37b9e1af7ce6a149581f2c9126bda1946d1dd17dc13fe9bd16be7c76b45e602c13fe2d6ef8fc42aa00bb2cb013890477dfa0ae37721157fe2ce6830a85164be45c7d57f8fe5cbadd77f234e3c92cfc515f27deb268fff0d6c3507e6ee1e0e9c79dba7e4497d52bcded71dd33838801a9a9ee8d242cfeb6fd8a016c9acbfc8f73eba64e2133a8b4d5bcf8e0df35d0c939194dd7bc5fd43560ad0b88acfd8d503de0f47aa29c094493c4e9a8bb0e92836c3ea3f1c64439353cf5af0808861896cca3619a8a3a101c41a7d673ce46b5966383fd0ebe0d34d9de255f55af9ec32fe38502552f3c2972a2e7a11530e038feadd1e98a605bf9ad1881d17c10ea57cda8adb034cd26420739dc0cd70a8a897409ca5c6f355776e67612e17962a4e4dd5a6f8f6a98d45988a685d1311f3b8e9dbb347e1d322f338e0581e7cc5ab3ff33a5ef961cd4fc7f97b4b7244fb6ce29ed37acb9251ebe8d4e7fef5f8bf6bbe2ee171baead86cb1115ce80c8baf220dd0115e9b5166fd1b365ed07f609164d6d2196af5c0e549ee0c73ef4843318008167d248bbb509316f6f370c76fde5393edc6bd4d41a8fd94fe857da0dc2b3139349b0d1b2bf155e780108f7047e3f7b70e06c87af0c47c428215df4078c88029bd8f6d7779783f4d09490b8c2b98d7e49292f02fdb6cce76b79d91a719e494799c7613a7921283b3cc5255333a601aab72d7d719dd425d4bdea08ab7af9e1741d7b0fcb6722bd2fadf9bc973e4269d3d2a75b2f38efa87079dfb68c3429ab1529d5e1d69b5c81aed615c790f2d4edcafb498a69d7263fa0b97f7c4401a4b2749ab80a3d7f9af476ab72ddc89f3abaff3f5c0de0749d11cc27497dd575a796d862574641a915f7f3fb600215cb11c6ecb56fa30734be46965e8c509bc9fb4f81624ff19fadf31fede8f25366edf7bfc2df6f973f66566c464a7c143540a414fe7c827f620ae8f0b5f83beed5f4b0ea7f0e6c4e0b03f1f78c317f62c97da57e7aca4336e58cebccad7a5a10de4274d9055bed8e8bdb8b55f627292dca90faba6c3a7ea71d83601b7c09c39b3c4ff1856b936ae7e9d0d0110dd7770cc29ae590a9053ae62938212ac58e50ef2b67197052d62cdc709c217d2b2b89924f6a6eb34044c88eb6b319b212511dc5a760ee2323363a265e2bf2cf7038b60d3eb8d97179ee0f8aece50921aef1ec65f5d53388ac961d809d5b5c50c4465558ec926572775a429439d817befd14ac23d45f8bd68de971bc2aa7167193c9d51a69fce06ce3774fbf237a5d37c81262a22e2d14928452bcd6c32da4ee9426c0cf48ea75f03f3a748ab65cb627ed2cb69cb31a1077b59c2961de2b0984e9a75a9cdeae7b81289f09e63b959c162502b9095ba5a34b358e532d5b51bce2d7a225454bc04cb468617caf4931e466e59e2fe746a894343f85c2e3e357cad158d1816902cf2afd0cbff6e545a819abf4944d8be079f9b43bad9d2bb63adcb84eb61956db51cf73877d5683e5f0107dd16ba014da16f155592b413e00b2fad64895fa5ebe620e0969f18b79020cc393472140b92a18020a09779e29acb2c7486b950236313435417fff283f9328e7643076d9137b6fdc2b4c2ae832b9a7d25ebe79fe04d0da7890793e822294f919efd2d20167cb3db32797ba10378169ef8b64f9e28721a092de836bdff3f1d4920fa7b2c8acb6b0f4c1b55978300b30c0dcb5cdee73e24a2e29e6ef46c4ae659ac31adf0f23530f022877460316302782dd4b9d74e47634259e24641e76cdc2bc1518679b9ac1a1ad534b24f421c1e0441befa535e96054efcea5b60623387b0897e44e745fa861843773deeb974928a44aa52fca2a7f6f0ed31436b117302d9cd98a1a44d37b50eb47174350a4e3c3141edd0cb724285e4fe868fedf4a30baef8ba765ba262a2460e07d83324c3c3ee37dcd671f2dbfef6e67425738088e0a812dcd76694e48ec0374d40abe4894e491054d7e388747bea04353db71cb6365a6826dba0c4c621d5fa4bf9753f7b02aa26d721b9890148172dee3efed4efe6259ecb286ae734f3411f953bbebedd4430c840defd39cf8f816ea89c6e544e05624f718dc1e3a4448faf2ab2d53a57d93471017dbf95972468489ac4c5f9d186847b0dc9f852c10e21d71da33648c67e41db526546f1330743b0083e068dfb64b6f7aa20eb9840a7d57e6487332a01069df81fc321dcf08e1c644502eb596149985ac8f197caeaed7e08bb1151ced1ab4cd2d3342a32535094bcc338379dd3a6a2579eabd6993aa6d223136c9c8d191774932e0f8887fc2207b43867abc9fa76e230c86a793e6c0fe59aad82bc5c46c0dc2706fed3b64cfedf4d1110753ab922c638be7a1ff226b8a16796aae49a8a1e61d5c3f033c7a5d5c14aee240d077b50a824ab53a251c0cec90802c1c30a26f5e25bfc1123409d990dbca16101a499ca005b6b9289a69b7140d0bc03c6a48e4419f2d841e0c8d2d6c7d97d460b776bca96adfde9733a35db9e77093a1e16caf81138718fbb844e6f2137d2db09d87c1e7210ed0f08da8deec0e7e1fbb8ba4caf4acaa5d636c973191a56de641d3803bfeacf490f2a536e786a091868b233b1fb3ac108cb20beaf99805821a24830a598c51bafdeec6058c7091b3203927296e2c33bd9f5b3cc5d73b828a07526afafa156ee1ab65fb39e01d7573646c5c235b2d854c75490f03ea9bc5d8be7aabfa5cefe8425bf6d40f69de3551ac6d5f2788beb345dffa17ec8714d7acb9be60b23abe27d3e2e3ace2fab332a28f81f0402a51c8b26f1d9e51c73c4804f07788a417ad1d0ad7c4a0e48220000623185ae225ab8dd06d089776ae969ae5fd52cbcf8cc084544ea11da913599caa1a648194c43581eb4883c08c6a8e237232a13943b9c35b3381d2366fa13c643abddd378ab8bc2b6b8a801c021ce3f0f4382ffc62d938c30cad6c37b378780e563c600faa5df94f74f3ce281c9b03bc13808bbfb91a70cad86fbc23748a9c09e9ff6e1b5bf444643c1889ae1f191a3cffce6abfe5716475acd1fd20e05811fcf8c401e068a8518abfa09ae081fc2c9b1fa528ebcbe21d9af9622cc7a25ab877c0282d60592863c4d86560a7594d63d110498ca4f857337d4f2d289e788ddd5b645df2e157569b33ebea1ee683920ee6f7f300bf6caf5fbd8c544cf284cd110fa35b6734cedf33e6d219de0fa76ec23753344046e50fd74ad794fdd1e6a92466631e2f752e222d7e9679c538078abc9b03228619b1464db3d5a0363ea8fb72ef32ae7201bd40f241b677d0f07d284fdcea3a56c46bee1a4c059ddd376ef724f6df5b620b049b431091b76e611cfde1458b816116ebb5cdc41f32a4011abd8145d731d3a8c977d8a04127d894e53beeb1fa058353b0e0e99577671cc4d8cbf9152556dffc3bc883a463e5e5d7f53739e8adcd20de6a54d9361d37b2e2f04bccec588d9dcb1faf245322c95442ce99730223ff08e896cf1b187720a5ec841a8ba7b02abd0f772f6a88e5bf6791da0488f45727b891b19338f7e9c53ef46e5284fd5237140f249da2bffcd8ccdf8416cd8a78890085952412b6d79be550ddbc1b10515116e15c8634dc5c9498f9e7b9aeddb93cfa254d5e1b0abf93cb77811d3c43fc1f00ee04fc14ebb711ab867ab771e1c66c6bf79e2183196cd897028455e0ff0f03161b52ee451b94ef9527407dba4259718d42e97fdf3435c04bf0505268ed8b4c4770f843ccfbea0339a978d5411b05784209119e25c939806c681e6fe4a815dc9f9ba94c9bac4a29d8c3166fa79a6f68a86acda3106f7c6b469ce182898c9a90cf3522f607e709217256c3b508c86b198635759c8695b3e59e7913cb1f555c8c66aedd56f22b3b2f2782b38deda6ecaa5168d48378779077253b3f2c275605947af4b3ba77c4fa2aa02dbdec3c3e415daaf30e52684cb3477b99fc1ae95ed45dd096a7f5384fb21a01e84cb04a9c2336489e35a6f3be5c14d8ef1d56e609dde3dd6d2889dd4887c7bb9638d151013152936e722bfb9f577f22675cf6531512dc7b82efe65d35be3402bf433d6d2aef53e6b43e12af05e4f93c27be0330a11656ddfee7340840e3f39d8e5d85cbc0405537348c3b99e1788e9f27dfd3ce94e64b4d6037494b04617d40ceb20b298144f48ebd1363b53184a5a7377d0e15eeff832e67d811235c78752f23de27200bec54b4d1425868a1dbaa64633124e7d0b5b765556dcaad633f9de8a61262096a52bb933a0f696d48f8ab22b37b88574ed84fed0fbd8053194da95ccc88669e0f6c2045c9f6c01805d44b4deb8ef8da5210d68adf9bde0e32c3b09d9739e1622b111605dced8c5ca4c586822941f323ac02c4e7d37f81619257cbbf91922490169722a84fba4471344c5b6ecc013fb998525113fc3104875c18c0aab5b3d8977e1be30ee0871bf1005605c26e8a215c1d3b3f0ea7d43aed1847c7337fd8ab8e08d2e024597695c7a4ca2365836a6f0e21e3c0f5b3fbd11aa8e4a079798fd02164155120c93608ecfa20c39cd975b89d8ad568002de8cf4fcf6227a6d757f24235ea2051db332a612e00823bd4b598cafb54e94fa697d47a5a9465e100e763d16bb7793867e5ea1b497e47fe748fdd14a0397f3ec8dbddc1f590d29951e2740b6a3bddc015923af1790f5f5e24fce6ca98bcdf2673ebec45101c053d921f83ee32a6f0abd93687676cbc5e67c4bcfff62f885c9c4f780739b42d0cd47553f1016db892addbba18e9654b92d1525d0b1d60ac4ca00bea145603db39a6f869e49ba4d6a256d70a9fe609fe4c5cec34313e726b4923a19110926d1cad2f50bc16fa926d1af91ba8b2278276022dfdfe31fee5b0392276130190d5f0678ab8201040be0819e27a3ba7b2cad1e53f3f26e7631d7f6d68cdba42b3584f5abef528d729ff75b2edfbd695677e91e1591a83cb9879fd3520cc8b207b032f5d40d1e22f1395dfba253600a5ab6d8972a98f164871e183a1fb57a9823cc53a4233d49ebfa53260bba80078ccf5e89b768de0a4ed88e43fe399998b63bcb44fdcd0ce5eff6d7bc61996f4d7fa0927cf9354e91cd49e2fd2f36cc6c56e5a9e405abbf0da98163ef3bffd88f17b05b66acbd4a47fbe29eb91210eafefa5f5de4025a48cc1a6aee64dbc9871e0ccbf771b91dd26487a2b982e825f682868754cc13a9aea30feeb159c4d512a16adb25fbf43f0489a9551b03ffb6c0da0b8231019969bedf8814971372bf43baa992dcb4378c9f0328045d1dacb8ca479194387cf2cd0b14596dea9af87347a1c331a66c6c79884853fd1f2623b2c81ec6f0ba2c2ba86159ff0cdf651201998e90cb8e2e6e9852427b816d6c824b7cfa1629024e59e7bc6236655d6974b6c51faf5955960ba7d69ac9ca55e86a91395945e590984e2ff6c293ba1e2c388adf39104591350d7f293194069b71ef4fe6b663a71908f327ba1cc8221b0f60c3bde6a24128149f4ba03891bf70f6500046c99b0957bd4b3b27f80e70f90b5fe0bebb4bce5da01031d81ee4f5db046440c8469000c352427b326f1ecf064ab3c328892b6323b1057b69e1f5e8e333ef7481ee1dffa366de3c6689d4c5d744d78fbabf24a09cbeefaa22ee12efc8e5e892478fa99d1b2d37c81ef0b21d13ed01effb682955fc1514b20d2c4cb60dced7d8feba17dd9baf453f0293683d79b1632651f11292bb6db684af8f6c083d7c84e72c2dc60a28bc6ef85e139cabb97a54990add30cfa2206c1b9efa476a2d4abff4cb35675aba7bc960dbf9037e540bbef18cb83affcfbcb84d71583d170efcb2310e6d3fcc85b68f75706206e97f04e33390566bb36893f3646791f9b84479f3a44a4c012df78e9782b827608c0628e99d29cf39e76625618290aa8fef31e5a253d1b399348ae80fabea33839bbd7f2d26f1af1cd20837c2fafa21e0b99f3b8b08fa7308cbec3d86c5b27cd42a7e28c51b788d996b147eb69729522e115e41d4d358ced5a7507452da2d3541b1c078e12fa474e04781ebfdc1d3063fcf19ae0eb7c76edd5eb1a5b7f88c5b0924c6feac62e844919e083f15a5c1dbcda29b5b80fc728ca5b380d4400bf22ee44c9fb8fb47586bffdc921a9127959b4632f014e87901ebe75bd7de033272beba5705c612e1c54c3f84d59a6e2c4e6ae4f79fff91be69f08dc236c333bbbe86c848d2a744491eb2ba14661a65ce2ec00a89ecf17849fc8f0926be83203f8d30b184fb0bab44b61da25ed2216eea1a2a75132a0f91ced8fc142565967f82ed01fd204814d1b77ee553bf11db66ab656e93f418d756b357a6bdf9ca1e13cc1b4c962df77fbc81bdc3fbf39771f2b4024f7c64a06ca573636dbf3f1dc2fb2dd40f3950e8960144801a186694e8af8e9a0231025ede1e648c57bda7b153adb133fcef0f42517affdc03059aba28a9acae96ffba6ae20ddc9810b007b88ee4aa3eede62adcbcc23adc824842df737fd47a3fc059ab99eef470c667dc282baa39c373352965560dd4526e36fd47a21b165418bb2a4498582a345546929952567b68b00688a2604d13c58851fe4fede33ed1444bf4c3960061b1e72bd23bb44e49da1f67189e33c4d1c5f64552f0c132f6453bf2549f4574a10aed57011996de2084ac011654f8ded6994c1e7af4f163551a32e5c92513e6de6d484b9453db31e9244e07767ff210ad8d78f5861cc4bb5a180c6c2950f8b971fb64b4de0af060c5cf166e33452b0f63ab781cee3739d5edb1322ba08119c28f9a10b521d5d62c02f7949dd50e5c3098a1b1abb6012b2b89e299d0c239ffdd3df04ee926e60c94baed0f5716130cd7a4ae928b7227c7a7e13fe6f60089f4d0c91148dc06b40f760b26168564e0a3ada6d7ba014266447e06170be38135b594a7d73e746168c3aca1fd9f8fd6376006fcfce58e47bc5092e48329c1bac877e4dc191fe4691110262907ac7e2838d162830b5790a09f4b8241d3fe7db6722485037fbebafb45a90a038877dcc672fb60d3ebbd5b0699a607ce520e7b52bec467864aec5a17178713999ce537123da8a41d4ad42c7143363e974a91af0508158aed92051b8b96c002df1d7a0c73bb4a8518588f0e1f5dff105820eabea7f63675e688ac741833898103b8d5eede9f42dcb25cadeecde3877a294b89427944b5c1bc0a2f21ca465d7f9db8ecd8220d947b687740c3251ee8b87a8dbefd7ed6f46dd348cb931673ee6bb27293c85c27cfc6f314c38a5c5ea767a9bac94733b742153f757546c6538605ec6b133fecd9deb86c81d530a37b57baf198a18f7f30b6ac409e16d43e6ec4449cd95adff7d14960134a00f15703e940d5ef9a496decc4477a3f5db9bfcc01eaf6aa09915440e45ec1aa807e3238a8a24fdf2c08e82183f285204e79b8cb1561beb5c1502eaa88150ac44525d2679a36d88bffb70776a55ed2a1b610b6bfec72076cfa063bac03588823024f6c7d4fadd21da29a4a6c3938b58f70b7d313542743c9d0f44b00fad7e0d45844412c258a2e04aeb7c4de9858db8ea94c4c38067217d0a4dd6cafdf5b806775647935645b036d02d954bc2baeb7fba7065aa9521156360736b0eab3371e82ece0c237e848bf821710bea7bbe05f805550e6e13d8cdf5f4de83136bca228dc9e3a52b9a9e0aadf5770d2dfa7046a7228a5ea30d60ba6ae9a22260999902e59cb871b749459e529208b39cbfce2af9ac52f4d7bfe96f7f08afac856df8f32d3683572508a5a4785b5893e262c855c61d2bd158872ea05a6cccf77a6b7092e5c533193e8b2da89c2606d8a435f021300937755ae8c17b55ad3afa8b36b6752f630eadba93b1fe0519ad19e10502e687b99efde0a9b33390b6c81972ce9057a34e28b73e513e52f884d8ddb044f57eaf12a2632d1eba0a1567fb0fe7047ac6bc5283a80a9a85135d17003288810f20d1cb277db06aedb6be322e70d26fc239338a35bfdc3c5c413bf53d92aae6473fc8e9d5ea38f92ae3b9c73eeb325e16b608071c107df58095807b16b86a59d6cc66416d0ad1a609b4adf14982d9cd48cde199c6b52dc202b773f9a80b385d84c178cb6bedf7425b728301df62840b6b11a55409481b96453e92c61804a98e4599230061b43e749991066f1aefa632b6cd90ae7ed7e7c6a3943e4ecda2d7ecd811e3bb30e9d7762afbbdf04c7a4e68f7a4ee62119ecaef237fd14927feb3a84eac31794d6911284deaa0ff322167bed857944b4eb2b966ed2d16c745a56040837ff644c53e4e6ef72d3bf034117abd004b3e0290c0c32d2fc6263b9d7157296f956ed5510bd2760b2a51ed376f6bb49956c60d1ba70a84da02a71115a8caac5aa927d87c57bcb23d3ebf06486026892a0eb24232f303d365443a7a528ec110d6e09b78091ffcaf241a669e425d8f68274cf8ec97d059f5c30a3b5d4c0d5d9ec47d506f350a127847addfa66db43d6773e40f4d26a29bd5176f5cde9eab0d27727e28d7ffc6e53bc7e1bed256cb60d7a3afee84faaed8b1af61b1eeae7b22ae5c08000adb605ea07bc6ce71e8c5f6088058e9077c1cda01bca7dfcd16b802868158c235450afcd3d909480f9578d58a939dbf2c27fbc38d764d0a9427da92d1a0f36b8812311b33adeb6d2d5a01c98b27f8aa695ff948602b989e74639f9ff4c17bb6d6789dbe7f5bcf65b55028dafcda51d964e7e36702d8f41318fd20f478b07265a7e6b956cccb16bdaf92d62e3402624cd3a84af3f6402252a4494a459f57e0a1668835e71124e18dc8ef884e8c7fb6496332ce60ed7fa786bd4bd1be4af9fac573dd7b1027b8c34a658e74dcbf078f3b37dfa2bf72cb979799325254053c5592338d64d6d648c5fcca9d8171ffb233b96abef6a0e4d5a157e9a7961971cbf44ca751c0e6e32bb3f939b8c06efece8b9b691444dcbab8ab33a00bb930445125bb45d7a2675dff50522c86b932c510022b9cb22cc0d2fcccd5fe0e29fd52e7b4b3d77acd3893456394dbb09d1577458e8f5059f29d8fbf39d946f55af6842f1bdc6a6557482624ba293715f513ff93b61efab68758ec4f3038a8b16bff811399f5fad6ad9dc847354eb44779088b89931a33771f0d8f6a6eb8e0e354f43d981ed89c05b1321631dde3bf30f77941b2dcdc348e7458c2c446b63ff985206eb3c228c34dc219b4c8e45b7e0810aac1dfe842c020209475f0f46cf45a4acd0a5ea0a45d3814af00882259316640438174b8fc96c2ba0fed602dd250e0dacd1da1d7d2514ffa408f9879af01d49232aba1e47d3d47d1956ceef3318071f49be1aae9c9483a49131bbdbc3df0b19518da39734e5c42309eae90516fc376d87be723a6bab7316b9af63c470cdf6f1d15f21a3912aa9ca984a99cd5aca31ad998438e75d17138f84dbf21b9b7d636a90c201a327fec8e2b56fdad8f0afcd40c407ef4ffc8f25fe86e5354df33f809c9ee9fb18b400a6cc94948e3a01cb71cfd67dfb74704da0375923db6e00f9d62090c46f35e3e0aabb8ae3837c03f0e56e08252c583ed1d5ec6c4d8bf64a978de5722052dbc14d5c1a27d3db88b88cff1ec235e9dbf4ebd5d01529b4c9e64811c7ff5536e6aded626e3d3693a5436f4b58a7b11867551b9e331b0aff7b7b738533addbe4d206ea986081590888de9d3af218f4ae7afb43916b290490d78dc09f4030db71028eba9d821811e959ceaec6c0e18752f14e18336735d3b5bac5283cb6e1e7b02f8eb83549bde409f36c17ccc59446eaa231815ddc68e508b5873135210e02a1c5713ff357a109b1f2f04b3f3df4196008340b9fba85b85fe210d94896cfed63fa0756b2cd4427ab0e5e83d930f13fb8f6f8141aae78547c3f2ca2893d542ebe1608128b5c177d1d378e5e9c23f9a7e48930ccc2bb7ab8bf7b5e33d70c8d67f1e6ab47d510350967c71f56871a71756d44065d679ee88cb7d7c5f28e3a2866c055b6d3a6799a9653ee0cf8e898359f79df1eeab227f03af6255afe9d9f2e77c05b24463ad9fc51d4dfaec20df5cbd97f26e3d1df0edfca59aa6d21e74051c1ca649769d6eda4e7a9c8df662aa700cc947dc245080d1c07cc042ac700c189149ec826cf2ccf722f31d0ebc83608b19147f30fd21feb07f9c30fc64b8a12b2f06b7b1f67a97a11f38fa476b18d75c72d592f1f797bffb80dced3e965fb3c074396287f7bf0d4c0beb67a78390427c8af8e00ee9c2181b609c70e765b3fea0d7047c0778cab3746bc377cba8df5f702258b072fc98964626eeb3804c339c0551ef0d60941d93d29cd5c6f774ed6a3fef68213800175d20fa8b1e3ea6cde63f9bcd20e62de7974965392207f0d439dd3703371aaa8eff4fc04d1494756336b0abfd891d304e2c3c5e1e07b8045a6bef8fec2694c0369e7feb0553a4579e18978da44f46f522ff931bc0440939afe6299a0b587f6ef67c929f9f5da4f696e2508f75537cd86cffd551fb819cf08797071dd92c6299d6b41ed25402a12cf732748220bf4c99e8f54ca84f2dc904555255a35642f4a57fa5d4bbb861f9bc57e99033756ac707defeb8446b71b86dbbfd09e549a9b7c79fcb09f9b4531ecf0f20423c25ccd6bc1df7f6fb6a8a565a12c5d144c5e8d3fa6a9f4e48df72548c9c82f48cc1da5601b4fb504be4faa8c945440c17cf3f8579cf478e5be097a896b7ac6c552b27cd886c65f636d001359fa9b19acb534b27928daff5ad78a3a9b272c71c579c03ecb9106cdf094da67d9d3ae64e14185818108f43b9f8d12a802aa1a9426fd9e1a9359c321830320f6000f139961ad12e99d0af370066606d38490865882b596b4c04597a566bfb28a4b9e33a0b5d790eadea1d2c626a77de3bef2b2c1999c000bc8f4be7a37e8ce59760ddf4c31f8b7ea32a3353dc96ff9b9ccd9df9e1d2a1ce81e1384a7a3dbcb22eaa7c9455adb5046f8c2127d31af3e0c1eaa7b951579e338e2896186e86882c4f95dcabfe11f14745d769a19428938db4da28bd03e3b2973b2a6cfd622fbb69653746030e0db7090d39e2547417f894a61135c4f309e148c0a1c589d263143cc4b8143da14c44c0ad94f9226918b9d6161741c93685c7cdb943b4ab9906022f7c3da904f19caa3ab5f02d1400e48976f2024affac09d58d5ce3eb821f66927f4ebd1c398a081bcd80a6bbbced1d711b07879f427838f1c1b39e68a6fb2b09896723b1ac9faff39f42cbedfcc0ca43b7600f0d32121179565bfb4631442b6032033e4dd4194f9b9b388468ede61204044e12f6b366b1b2e068936181f11bd74eefcffc3a71f2360ccbd7a21516e3e8310c079e85fe099bf1a1e215c562e79686758e36d0e932fe72464a5364f860221071fb5db903aa948eabe0722da4dcaa93d9a2076a7512d5ed2c662da82e7d6aadc0fbf59e3304b252d80900f01e0e9bb07fd99d5968e9f024eb6d6320689415d5856fd3b213f9bb4eea6ab7842d3d8aec704de50f1eaba107f7264868313cb27c8b84adcfed7661b3075d74ab4e8e3ee4a5ffaf686f15749f8bad72082bc195784165caf15bc539df9c8775ea9321ce0169ba6c4c0655aace1e0788a13fea18f2a53bffe8ba8106c16fe5e6ff416be4c760bdd1d3644d39257450e3ea944414a2c5c87852fb9d05ff10655ac85d9a524854ba8bbfc1adc4f3419801eb46d7e53ae9225ae54fe2495aeec88a4fdc8e500590958a76341448864c2770995e059283bd9da1ba59c0ab721d7bde022bfc1b2dc9de6914be5ba22e2c4e067d4320fe5d24053d59f0248162cfa37146419e4e70ff146d6e1e25c2be8284276d24fff70396fbc1d57bad95d92fb359f421383561bdbca38f5956e73d7e6fd8b3ab8566117089bafcd4a1dd318c4588b85ee847aa02585b026728b0660275eabac246709157b2fd8ee3417c2fce1b41ab0c0892dbaa237dce68406a354054d8a01691ee22ed1b00baaac081307f0f2a33d8eac8463043606e3a56a2980782ab591c9a8b707cbf6d3e593f394b6f1ce90e2073a3d45a731cede4421e2e0c766579836b045f828611f84bd0332a27138eecc16da6d8359dd0b993785fb33b707fbb9cf37c0f1b3afecad4c40e21ed1c29028ec43086e6a94cb6adabed6669ecb71bcf2e2e39d9c631916046173a7f9028da80b9c7ce51d0021cfa885e76dff978648b6d505fa1e5ceb2a771daad55c81cdaea6f53873753cccd1d18067820618380e924aab13a6487d0e873774c1309393ea9475543c18cb058df1d40a19b6363c6b4bb019368c197bc888d369bb5eb312f9a3a28ffc4b39503bfc3237e679ec2cf76fc97fa90a948e626fac322a7e5e6d72c1d486bace65c58b3e12c5d291e9286cc7ed83ab4b82cdb13e8c145adc3d8fb58f74e074579732434be5db0c3de9790afa81c5a3836cb1d6dd8ee6bd260a4657979ae3955a0c03cf26ac3248bc9a7e5b6a3425a2da987fd98e5c4201402f03e52a889b876db9edeeeb739e29718c0c1d56b923e17974421ab55ba15a1f4421e90066af1dd8a45accf2547ea24ada21f299ad5dfec6b0b5cb13e3a116fdb740a738d23950f883f0e7f43f863513efa8ded1b0d9c8611adc7d8b423b83d41ea95c406c1cca3cb785d78b0092f26cc8711f5c73eee1980fbe0ca32751975a6296ab39320fde3f5ce2655bfc5c7db1ab2fbb30e86e863ca1302e1c17f23c87fefa546af9dd925fafbe1842bd3f784e17ab8e57a29fc63f9f364e67e2debe7dd13b8500894f4f02916f7c098697b455178cf351697694f5b709752d1f5a4e44a7d2f5e2fc57e7631b306600a408deef2900e918c462119ca48c6524c700647b336aa5464bf90d16ebb3f8ae870a74caadf8bcbb4c82f68ee156a0cd15796314b4958fd06f0d87b265f5f55a5ccc073658116f51de5e9a4baf04adb08e6b72ea862780e284dcf079e66cdec6c7d3ebf08059a676aeece9ac79b76507b739b5e5d2e2a78a4735926eb829365c0b6dc92d8becff1c52d4e1f5762044d07a78c0083ff01b087a80ef4f08068a6a08dcbea020b33e14a2e4bf374211c7f554b4cd199208fcd17266fa25cd6ae0841778f33a5db3726195914bcf3aa61d097f5eaafc21fde5fd5bbd3ed4d8a7b0fe1191a275f1f4a34cbafb42577eadfd3b9ca63bcb614fcee547f48af548286c2639fe1e7f5d6c7d99c1a2fec7e97228ff2ceff4cdbfe516ee0fa82f1e9d72b8e47ba7b1e4c28f9cb0fb92aa04d1639b6ef92449b02ebf3bb358ee4c21728cebfbd6c8389903594e9e312cfa5d04de4d9b75b8a26105a4cdd40977d700a810bb9bcd761b472a5e05b72e7cab280b742a2f59b81b0073c29a4acdbf4c4685830aee424feaade13b329dafc266619a7643c914eb9a58a5337294264f9b49d5c96e2cd2f257909eb42ba64a8aa6736c2d5e024feafb6fe5b7c3dbf438b2e94d43a0d28c1ed274cafaba26739d643beca27adca216118ac0c707a852dbe16a98a969feab3bda945c3a959fa9bf01c572e3ab951a38da1e44a95017d050cb2d068950c314aea334203e1eb13d104406cbe97bcd0fda4fa5960fe23bf30395a7bbf6db57bce6deeeb3bd2aa28de6315e46f9ffc30753d8d6f7a7e0fb86447e717646b6dd2cf4e8cad1a36948a12455d97106a729149d1705366c03320902d15fcff0466313eb5a701b00b1108fc59485310351059c01370ca079f1c350232d70b5e36e800db2b94437b8890ccc7c5865c6c48cafc3049ae3420259ada0ac9ce6214917207930ecf6982ed13103803dbc3c75f1e26f9f8317a64f6af7f58f9b5e71244f53001c0ea465ececec93b5729ac5b13f4a2eef331c4255cda21bd7e9ff4af6ba6ee2f5b890ec7e67e64ac84232028a7c526e9abde822c5e53d7faec8234eeff03af3feae55604a1388fe250d25b99c173d490fdd858d7580f3453356cbbae6be108561aaa9f520852d276b380480784229aed626291a92fb367ef645a7122547ad3c4a93b8571f3e77e31a9f2c4b78826c7741d7459de4167131fd84da2797cf2cd1f1cd6fcb088d39d331e959d2e620ca3a3ebc1b2bf6b3f35c4d94505f39cc7f4bff96dac7c6d5eadc73e592996e046bd7965327cd4c64adb789a306a105fbac99f627bbabc6f570746d807fc508e9676d2d0a8f770b77a2bc1021a6228b0e5c9b025ac113e8ef56fd12fbde8b7d000d10218bffdae674e6dafa5630ea7fc752da61237220315e939aa671adaa0332c9e7d8650beeed00b5d913ac9ee75c7f7bee7807399a2a9ec05618c37a6b6c7dbeca008a4420e28d5e5ee08063bf78cd7ce71d3a5bdd3348b8b0c805452a6533f44df7eb6b7533a1390ef0596ad3374277b4cbacf39b3f2cc47dcab2f03c74483f76259cdeafc9bf8bfae23c46e3a9035a5a1e27525a4750a55a82ba358982dfe18302dcac7985a966a0cb4499c642718205a781fcf7fae14fc902b4f57e82b4c369b978acbe8a8c5eedce6ccb6b05585cc0edb0c90918cc05171d4d89437fbda7ade57bc7f8c0e9e99b97e64fa56ceb06bad5e36408bf7172bfdc84b7558dfff565ba1f53a92f5e237f28dbd3b5e06b17005b6283930dbb2c5f3aee9d9b6c19a0c3c9ddd2a3379d052f8f20c111b6c284ed6b6f1caf2cdd242576de6938a95e1a62b4bb25df6eadd64dc5b48bb00e97ff6d8a56dd8c1d6be7d92b5914f6d8c0cfb50554000901a08eadb6dcfb8636b15801b2fa28cb10897c2bebcb4206f812579be033ae1b50b43490e7f44a633661578c10242c169d4c4668f0270011de1147c574df0a991a8232721380df10da527d68109fd08c87c65c8b15e137e11c5e7831e6240d55de4fd80dcdb371809f81d3da1cc84d384be01304cf138914b77fdc509802350ddb17d3a13cc377de7d61e832f72f9fb2173032c3d93db7df0f9c8b2be9624d80effea321831e2315d5fdb29cdf54f0ff4e0bd516f65a400063b343ea3c750138906ad9212104c97c9f653aa5cf45c33305f906d753540dca282921929c5622df648f2f7401c2b3ec42477396e53f99a3fdc4c97f719dca2d1957bfbc130717160795ca32b1a2b1b990499e8a0dc2fa027d0c62802c22639c6fe8b70bbb56ea44890fbbc0dc9860f681de4295d431b4dc756197351ddb53f99697c2e4f8103f7b0ada9b0b06592cf9b0c5665935d162ac02a225a884022707cf28927bdd94ac47f338794b1038bc90b96596534fc3399100ce82f0926980a26c6f2dd31dfd97069e155d30855eca04c7d97021646c0739e7898751f49a1fef8ded0f4afb952bea0bc91580551ef76629f5cbb576df6f9ba2587b4d199e0550cc751b109bbff9d0f9835f619d5197243cb0e986ed568bdb1151849945bb6f9613e0300aba86b2f56c58dda335ea76792d045d218a0267a4c9f6cbff857c607d682e7ce2053c5d9a60cf56ae720163ba917dcc02c5b52a47f977279e8f2d74e96daa55586156081afaf8f3df9052383269f8049473ccd31011873b1d699f2425bc9ed5114a76655a72d9a3c360d74e300b9ba88429584cc57856a6800a8a8f565e80a0c853bcb6102113b65366b81afb080420b7a7b437193bdaea33dd346f35b79cad423b09a38b15ae4ba3eae90bd18ec8e9049bbd7d870adf3868d582e35fde2d2c34c19395c0ea2292758c3a4295dc5020b9997ac9c676d4650a85769cd093f38e86f2f3f496ecaaf231d554b46de68328fe8d56783e3edd897c156a0c18b170aeb8a2f3efc680bec40ca1c0c71b1580c21a8ff6f380240900163591f43c97f6f4f418ebd162c5259fe405c266ba02f94dc7d9eca11f632c7f0ddbb876e61f8d3c407b09c00738ad43906d7edd59c9bbf717162ca769600ec35513537dc29e056700bf24da761c2da42e515bf9412aa7e7e78cdbfe6eeba67d65edd442bcbf0660dae7ac098373843afdb1a99b6e512f0ca2ce8be1d68b7498a0c3c69a85a8d603068b00f11b6e53369d32e64edc9e85935a206210e2382189be8d6c4e99d2d71267c498f068cbb67dd931c3051ea0269348e82d067177bfd37f334161fe7ff7a025ea67644f17096da44333357193b2616185b31276ddc2af3fb24a1964ae443547885ee66e60823c774f2d68a1d939c457eee44cb9f6ef714a1880c749aec848cae86f0d4044763c55d98d80a3b5165bc33fe18f6de6f356998e4983581f8b34c366c9c1d6e6597c3a6f762549deae3b6c34d12cbdce77b786696a79860af62a4ece7d222d7853291d04f9ba3249aebd0f950c3dd6a30b95f66c52dc3599d2666c7728b9cb1a76cda955e742dffbb5d99e0b721bb0e40a612302d68b3d51b767ce6a848aaf8fc1a1a30720ce17dede5b6c9bd3f812d855c810f49235758ab7082a2fbb2c204a61d439c62ba2263c879264b1dedd21d460e4152c4354b5b8a02152c063cceec0bf059379b352bf2ae6a4eb19c5bd6d9bc417b88c45ed21c8cdb132533c869d3c3cd872a6c7ddd6c8e678e30ed94c79c9d6b1ddb0a071cf0e9040c75a7dc6f932d1ce230378ab1a4aee795acd765166f266142b12056398fa26eb26ef242681fc09895431a2b3471387609f85930de5031dc373f05097e3b246d66af05b9d6127dc31eb156c816ded02b77824fd57f199ce11bf6de48043084a0211b0bcbe861f72e9fba4fabe9124c21c9feb986bfea84279b50186f6c896662a3eae7919799ef691c26e93241ce4824e49a25dbf651564dabea4d73b2e4b567fff18a9d2e3a6eefc197c8420c72faff35901b4c0a5e995b4c0ab07c74f68547073f902f0331cc6fd69688c7a4640ffb328344ef858042a2b851b4ddcad1daffb4c6584e3b8338e2da3caf0c8b29549a446be464c0c6ad0acd8fe36c459960d73f53135c1dad962a1ae8a0ea438f4f44c4e7ffd6deba58eb05d7aee485f90a99c1e304ca12e591af8577b4c39bc3fbfb44fbe344c7f5c80202db6ffb30ea9cd7093f1806ec566eeb8a9223e9e3ab1e7ace28e3159219afdead0b43128a83e82aa4402161e989a3128649234652ae1cd8f1c787e5cc93be94dcf9bba590a82746bd4413a9adca8b9da91c96924e427ff90e024f8e664ac60413b71a653eb4ed2d91c485a31087e611b4e459b67c55207070d9e08ce15891c32aa7bc385e2371c09ead92e7b89aad3ccc88d6b977b90875c703c4dad217c664d782ecbf62786e24fe97f6579ebf750399733f9e95a05b4cced576d386d402723de86c092464dc6a14da0569a3390e331d5f0283a66dfb3ef4a3ffe182a1c74a11b3e75e884162faceae04735632ee2fd1d186aa3437bf97a162bd77bbbe35e5fdb4cf29739d321d8b80b91c86e4dfc7d1d3d288cee859690eaf805c8f80cdef617a37d1733db58626328b43b0cba4520bee22ee0d3645b68008cceaad3ac1a222ece76ea0dcbca77f3efbf0cf2318349b329c1ccec59cd875940614dee3be9d7d0ff9b0c341b98e2ba6358fdadb821ba44607d36f7b4cd2734b27e83976998b4ed93eb48f4c921f992f5e9d6f66e6ffd14333dede6ea4538e231b1116bf288b7587e3dec34453b1a4bc53352b663622ce439c15c45d622eb89993199a65aa69aff590b5726ce20392e14bf25d39606f6fb3f35cd7dd9dbc7ca20763031f3485a0275d3ee92e870bb5059d1e26dfd90f8906ca260cd4e1ae806de17a349ae47b296dcc9d04a1b593ede6d22bb3ec0d668f1fe52593a63b0da093cc88c16772d6df9f47b75c6d049e51afd0f41a33c2b42b358b96276d2876d84e401f54321fb30be6d1911b15e2dec12a16353afe8ce55f2099b43edd977e2bc2833218cd8687a89d8044f8fef38a9d650faad0500f9e8423c844926d572f4637a1d5fac7e6c3af01e505657f476f354fd1d50bbedcd798bc7ae6b2a00879fdfd5c4b6b9be00005dc0be6055052fea2708a1b0744c5f1084e2a69f78925c1c2ab8db34f1833d65395a5c303b4e22d3151c515355c7e17b3cac407c30c9dc1162b1eb3fd09bac59655a4f67ac052df0f799decb881a85e45f33882bf0d9005c5478932c77781ff4b5fc9409b79b6c5f54382ff93fed5e7345fc22908d30aa39d7ace6e1151b0e87129d73161fc0904aaf28b7355c8a8323d053dd7790bb3f3c0db6ce8b0f259faca7c1510e47724b31fa5bc36832682c82b67144d88e5ee5859d88ac111535109f09908fe7b2b316415c79d22670329a15aeee3644e844f4018b0fc7c5073d463e1691b07f230724634a1d009dbe8fc394b1940ac422ff9bd3258e390c2c81a7fcf4e4abb998c766942022e08b60f6d75a4482893611051938331cf58fef2592b2362f658b62dde16f7fc4d0153fc936bc2ad5284cf1d33e55678303489cbb2b71e3215cbb36e377c01cbe0c9c568dd20e013d89419dd5425ddafbbeabf1d622af683da7528877740565dbc59e392dbddca62cb500c8f8803eead7a464eaeb7b7b54bfa5972beac3b8dfe0bcc18ad0487b37190933b55df5d85c8007f6f6b721adc27932ebf2e81ec6411ac0bc4853578c3be71f8b63af1af17c48f018e95b07fab1ad5bea399a9f96cfc3b3ff53e03cef6ba5778a3a909a9d57175eafff8ea5cdd3cecbe0a07cbd49238592c242a7ca92106d7f8942a87a37ed17f9c5f0f0f6470660a2ed1e471aa11c527b5d5e6236e5cdeadf9164bbe8d14483401c1fc80e7a0b1adc2dd2328048dd6fb5a22fabb50d6e1574c8df82cdaffc40e0e7e907c3d9a245da263dced7f0bee2cc71f78dc23fca7e1a85cf6a8ef8429c331555f8de50de585890c2aca41c9c1347b32612417468e143de7f6528374d39df2174a40596ca6d948a5e8d9da97b713b93a7488c86a4cdee9170eb38c45d70e439765d03ca8b299681ea785f62a0ac4932f61af298a810aafa4755fca6ae428d56a5648480ef9399fa3583e28218c3ac1dbd33f46b8ed28039170fc8204dcecf710fb7f0073a76aea7ba0e473372af5b69119aa457e1581aa8bfbd04cef0f6f9eeb420f9e5f2ebaf31d70ee689b76a01dfd9572b91d997f1a6ba01d7e4f9f623755117caabbb9d2a37c0d4449d8d59a074fe8f4c28b80b950a13636e47cc6e47d73a92a237c97a02815f6873e1646bc9a661f64f74df0ce1cae2d250cdd23ac7bf6afc08351473446360eae9afd0057a94654834567aa2fdac8d7e47e0909bcd3d30f3e0aa3e6497c8e342fa8fc104426aa4820bfb0a10b06b1649be17d1d4b51457559d2007bc4e7d514c7677697d2820cd9fcfb676c76e1f9581672a523170630753d622096b21f9c14fb64751f4e567359921b24c81d4186349c109a1a5c22ee0f44f871ff2eee7c1bc0624b236055b3240a11e61e526537201c7a4b075c81edc8d4c4e88d8b7b76609bd3f290e34cf549d64743990eb608aa2fa44df517cf46df6f72a48d3d7213438d1ea51aafdcc2ba328da2acad4f8902449879ed75f332e1627a4fcd9047e5ea05d53441b05c36e64bb1b009d713ad07d578aa52473df252f9ec9c8d9f949b9cb6e14d53c3d10b7fb1d44f0ed07807b07a35006e886df2f46c48bb0be02a28a13e4c756d7860272e2d71bed5799908c94b305aa32f9b6ba7213b86ad2655db7c201141febf7d37d4dfaea6f55f23e2a99ea91f8d30b5edf647d462194758a194e7a766ca5eea52bf709f18df5371882f52b00f72626bf56e535302fcc3ce832478dcea5040c269143052c5d4be54f04bd825ed353691fe51c510b10391b3f031e5d7f1a419e6b19975fa4e0735170999524000bbc239334e49d86ed415b322a988e4c85bf35b12d7aaf82a37090131fd556dd075e5f32a8fa6b0ebc17bc1db1fd56928e0ee2822dbcb54a94f43b267f3a473aa2f2c3f5275c0d93f7b03184a413cf1370c49475b53de78ee84a5ba9c5b32eedafbd5d7354dd953c2bd7c73abc6fecc87865b02a34beea0334976066da9690b426c534c5cecb65dc4c6f24af00d3fae951b5c265acea1ca80ce96ff37476678213f196b41847792ddf99838b97fc552b6b7bbc5fa6f25f3f3be8940a7639818ea70fb842536ced6325ef596bbd7831ae0a7b9a76e9f749c81fecd5fe06120c20993fc17f57057faa165d7955ea27efe86cb180eb918f353fe73645a83813177f7acb2970dfe469a073aa7cc28b0ac3aa2850a5cc032a851b321c4fe027b0eb9f1521a821ccb3c98c9b9718bc7c050a28e709b7410249d290c580b8348880e0c76bc4bb73641c9c5103b78edb61e4671531a92c27a40ddcebef9fddaca3e19bdd2a25596bb3ffd11ef25f595ec27c537323785d77b0af9f55d3e0558ca840e67a3564b628c49cfe368dc1c60164bad6cc5d3ee78804d1fc77b07b83421765422d8ee7e5a1d9c81debc3a114f3ff5ff3dca12ff6567739ef3064d9b84aa01e5b9aeec93a8a74156aed6a8cdd9ccbf8117a8ee31042b9d9697a53b07d4d5b767ddd79d949e486dd67549ee84dfb56eba1dfe113cf893b013269defd49dc26b6c4680863a988021c1d4df11d23cb2bd9035e369d57e9d4feb2c332573ba196a92b2c55792f95f6170eb1491ca5e0de4501d83ad1c193bc9c37346835036a64e8118e1181e597d98591a07cc0723e24ece8ae2f99b6d079f7bb339d685a3ba518decf0f803dcf49ade1787eeb982b5e959d0dffb9b001ee6959f123473d01436fb509672cd8d8968318aeaf47ede4a8b65174b2da7b4b9cdc671369c579d24aa7d7e9e99794f715b9c3565cb4ea464cca2d81adecf26d7a3af369888ec8d1e682ca2b2985f2584a4755b174483cab6c5ca576585b6b2596e9dc193ae9ee7c3ee1544051e7f5f7fd03daf4373b8ec3c48cb9384baaa9b00c40dc6628343f4080de80eaf990f2c56c50474af07202828c7e327b44c9e65d63519058b9b9e7b9ee6403ac007e1bf24aeb926e3a35770a7b6176214b1494a6098b0c3ba791a2b513bf3edeccba58108177fd27a06a8276ae3d98b4ff99e7cd60c90d50ef1aa1734a948555cfafbf97f1898d32df04520e520afa6708339a0440c674884e3c68c1ea87d99e369162c5637878e7a683e07d23e0e3a52bc855cc325e0589912cf1ea62856b21ee4862dfd2f03c1d000a099b42c343e5775850cce1db6a6f852c8397a61dad8b2a9218ab921f80523f882d75abdc22fec9621816f728cd5a175dcbdf55703a90893f140cb9f6d4378d8bd8559393261a87311317ae68483bcdb8c254799b4f9ce8847872a75ce7d1513d22f513c44ec99a84a29211811a23894ab4b166500f83f94ce42a7ecd8f3c7621b70615b9e33ffffbbc49c22c5c9acb515d79587081ac18e0a8af3154675d279f8ec23b042e2cb0489cd7f7ae8e221942f7c955c8e86b32065d107cc7ce5a18c764f9eebd220399c5faae5f15e723b25004b076f8473629c91d440d006b219b040ef8c45fbc4935de7dad8847a06d9020b1d6bb7eb6176140e5c174259a6aecf704facca7c915072ee143144ea31af4d9bcda177655be7eceaf6d2125cc8e7e04e4e094dd2769f2804c0eaa40b22d90c041d8aee858a81ffc523a41491b01d705e7f3585b5af0ec4089b3e4120effca6b081121146656268648acefa09832baef49996e36b983147ce7599bed9cf7eeda5ea19602d277dd25f16bdf5a425bf7c550cc0a9bacf270b09bc80834a991f74a15cb80114a91b137330518adbc181d5d5ff95ee3aa492da9b9875bc0e8e4ec47c97a1e45fbfde5d5cac4fd174419d41abd75195b196a4068eea1d2d38dadd38d99b4474a051d84ef50c0cbbda2c2a59a541bbb70e1491a9b7de6be5832a8568043b76fd487cdde5abcaea46295d107bced292e8a6ee0a169ee64e9d64a1a606fad4f61d31ccd5c8e4b6e6f84843a19fffcccc02202520064b0a45a5b468c4699f69b931b99941ad1b98908d6ee893e418425e1e1fcf4bc6ca33018ae9901ec1d7e1430f5e6b1316a45bb91596c21b903e894d6f0a47cfe168fbaddf2e50a7f038df1d04f87320f56404a08b735046930ac13e643be176079c4e3a41e88cf539d8a220fedf5d81d69a51bf96059be1d6fee12933a56e77cb0d77f3ffbea2cdfdc794b15ef91591c7b2a254a64d09030f94cc4eba542f0bb10f5323475001b2218db8d02932a7d499ade015f8459cd6ef10a24d6c9ecd44eff14fc4d12e3f63b9649e5dc5e09883c1ce05ba620c55492fb228d3494901d23a1d17e5e97b2b70bb9813ce1ee179a494877ebf64ecb77e2f7ad300102ded159d38bb7c04018975568db4f1c59c349c820790a7502f8bd3b2edc0cbbc8974c4c0a31e4fedccf8f0b780b64b25171dd6a0d68a53ccb4592acb89e4b610154ba52f21501f418c30c5a349ef7a5aa1730f51f4bc4c43e4835e6260ec02b5f9a12ffa87d0cfb72bc776d1b3689ad248c8b2db0c4d7870cc19fb389011c65ca36bf2d4def88a202730b64135397849f7e65b314fa61db31e684ef3d7a2e9932a46ae52c1bac51f7f5717a948ff1a29c3221d8615f45b37cd10d3ad9468c577abeeab4a731fab7ec3ebb7713e034a8cf2d9479c47a752ad5d4c418823f71d73e3a7188aff74fbd09a8a07fd1cbafc353fe084ca8d9d95f229a93fe2eed638cff581d7f11c31b3dc2a55d90cf3a9e617444f1e58c02037c679d7770c059b55f6e0ad98ebfaf2d8ea639194319b3b685b525d2d4d2549b8cedae0a64bbb902e3962910c9d7c5460940623c5f8d39a43c03a55cbc2726ae6fcd3eed68861ebf6cbb220920249fd3556f95b2fb4398e551c85cc10ab24759f7ed9aba66fa8cea5f023448a5614c969e4f5de335fd2a3ad656be3a2f5b6d4927a8496435c18648bcd9ae6630243b90778caece8d73be4ee18cb3de7a751b0295fee2fe5b410acc9381d5464bc2902eeb8b5f6e4defcc64f5b5f04b70274ca95cd69e35e712933fabd80142b790208953e1ffa10e4e68540c178d6144dd49d7837513a98637fc24f56a4c379fcc8bc7afde5e902a5699b5d473e498a85b396937af0d5a9c2b86d5f9ce0f6ac9e9b5681172ab85e0b5da727d56e5525473d5d9e8294c77648fac8829252271db09f3d0db3fbea1a848167b81da834ffc0bd0ed1935edcd7c44c98c257b019411b175dfb04cf3343e73a40e6a316e875736825ced94bb53027363c664d4d51600d6567983a8f051d13466c382307ee963cf2a6c4491f7698b6d2e09336ef719d7cc4e312ef42a2488bee545e06af068af232bd89d88a58380fc5cec0811c9f1167c44df05fdfb7df2fee907517360c00436b60afe51b001fdd47570e27e6481fee71a58f212a95820ac9e6eb8d408858c43e4d8c88192e1a22db108c5d3a101ea855f17832085f5cf1fafb60709f667067c6031af73105ded943faf0c7946c3235fa6e567d1f67f3d2fb40c4ad7d09fffd70f80ce859f8eef95db187d272eece2addef808ce7de0586543bb7f9e161ee0601904219a13d010e775b271c6ee6ab2a7e3b5a102a75e159dc5609d4b599ff450ca14c0f1f78990b2a3a00a4df89dcf93784c22ef90fc65a7805f56e2fb10ed31703859fc709c89cf1e46dfb2b19a8156b4d687d165dcfdc66facc33741c4ff36cc17e9870631e8bb5462b7eb2fa162d2c2557eafbf435a182205d03d836345639e661ce06b578c2cdc8cf6e41f8c1c1d514b38be4cab9b9ed481c75c5dc0fadb478c1e3acbda3b94b95d9f1b2a7768a12f687314b5a1b06c13051db00759bfbd4c332e5821da6988123117e968990bac38dae4a3c1e0f9d3f5594536b069fcd57fc2cf64cf4e75faf88eef18caa61e06c97903f2d45555fce01cd0736d10be6e956702caa4e254feee8c8f69979eda1ba189ffba41d6f77e684709044fc8095ff1982ce28498851809ee59fae92447729850e4e4a3f6683eac942ea4edbc053489047d4f686bcbf1ca2c6ff5c678bae2f5117397f707793c1e47e10bd7194bd7c97c9d91b8bd846ccdff2b32bb4c300368d1f6c7b6173df7d4b2fc141b83e0384044656b0a7248b21dd911b338224ba22ce9b8084db6653fcd205515a774b47fe91fbb4f35dc89f584a23ad11a8c4666910c2f6239cb41f8aa0023888b81df9538fbdcf8f71c993cb9ffd7c611cfc5f007973b4b201c2358b33ff6f971f540cb7ba082e5fd29c9859b9385e90c5ecb5aab6be51e6ac54b3792c8bf69d5fdd9ce565baa10e24ed3164236c1c4ce9c4c757b46fa004b2ee27e76f34c50b1565cba3648002e4ad05ed7fc7b6427e7accb457932abc9745ed53ebc31d09839a9115546c9010b617db0997e3ea32ba29f1897d9751eb28e7eb686fcc86fb011a34a0d58adaaded5529688858f0d2004bbae85b3ae8087f7712d4e46197347c74f7cae6eb0215bb5e90e305b03d16cd0f9ede1d715f64e80e4b3f758ae2cfcd7d631b7e188cea9369a0b19b2074ed674d7ac98dfb32b63b1d5a39ecaf84e5f4a708318ebebe144163e1e08ce0c0f906f3bb573dc371423c1e4bd7961ebfa956997524c727dca011c549ec548f1db3d3c5efd8ed37b140d242ff15c8b2521195fe15d00fbf4f53b1e9fe45825c7ad2a2afc05160e5545efbdfbe3f00015006285e1c03899057f7bd23187ae82ff97b5d7f15ba71ba82be8c82c1f198428e346fbd1f5a0bad843fff9e8e46b97107964ad0c2fec9fc7c7a5cb0b9e9483cc9afc18513d96853f2231b983fa5473007dc97d786a89d063db9ca981930b725f989a61be8e1fcab5c3b4324786069648349c2d3e317f12a8d925ae2a513cc1dce3fdb66879dffcf8b19ebaba78b5b007819edb6961877bffe4dfbc6456a0b06cf92d48145b825e8a9f0658be2246d9846d094f872ecfd5deecc9c2e0b176b32acd84eda419b8a8b9be1f3f261a6a924c0f256363cbe6e0c5dd7e8740d1d0da947f520d81ae8f65670835c1f0c13b309e034d7413f849a6afc8e6db29ea8fcacef58a0c4fc97b6ec0e793de9fb953d831b783af5a85f672870b6aa5b27efc6040d7153d85387dfa271f7e50e05a9a6378e385da98a47ece477fad5b1b53893c514fe53ce7adb403b535abbb184c7347f72b0254ec0ef611f137002783da6c7c47db991d7a838c1fac89b32cf76486ba771971a947c550a2d3cfda025606cf369bed622785ce3f1708df0e212c9368876f7581fab64e889b06a22b457e718d0d46a1d5ac363130c39f096c81b2261e3be373ef341183dbaaaeafb6d79ef5537bf9edfb61ad4201327db70b23916643cebc10df949d113c4882e494e3432a097fefc3699260a91fbe24f3c886fad9f1d603780f7c9cab6b8be273bb4ac8059a064791f70d588c089e69beda2fc26e74298292c401165b092c18cbda0ea9a8a49ee11ce113b63c058b53519845295078f584026557974c68d87f289f9ae687e6dff9aef5185af059c3ade7d35b522c217f1c0261f561ce67aa8e177e84777750292347a7561cb4fb89c5c554677f525e05e0e67873b165e9a314d980ddfe7e54c99d6f4b6b02b0f5dbe99eda413a80a38eeb874dc1594576e0d3f03a8f4a5bfef9dc3ca12447f42746d6c3e531d2ac390373bae23a58f5f24033954c31aa9e77c4e77ab0545b351aae36cbe343f367d407225c97e0c286e7f70f9aaa9cdbb5ea1e85d596abce6f472cbf43e7285d5621dcca811b3431b596afb869aa4384cbd64a092005b5f283b5ca83eff07a911336196b7f39759454ae1f829a3e277592618316ffff57cc2a4eb9dc9f2060241e42305d3f580365f3871ff000c102a275e5fa6890bc044b76d227421d1d4b20803ed7632d56c0e1f519ad122b8bee6a5e576e12282a30ac028945629974a910abc1a3a22624b5f49b522e0fa729d52d9df628781eb44c4974e39d5d514c13e5f60584ce3225b2544013d5abc745a69704ab8dcf4d5e08dec57ced0b39f25b42f3f986ef6c6a32599718036f381608c9a29a851a037171dad10be9bfac703e2d85cc84573b4368bf84edc52b181ad085db10e4785f54927254ba15a6d108234331acacd132ddd489cd98d7dd1d61ecc0461f7519790a0f8b61a6e8757fc353080a0ad959386986a3ddb9ce4efdd80e8becb105bd845d6bfcc68235c570d2e8a1397ca9afbf34159d145354f9834bbd262c477e8f98b4ffd8d3ca05ea86bfd603726dc4e223bf75511751dca6f96ee7d6776e974aefc125e30171144cbeee860159581259a1c1b819c337c17e6e65e256e152ad0a511155f3609cd8c16a380d859510053499017e9428db56af87f623d17a93608ced3262cabba122c239387c4a1a661f54de5f8895ecb76b1021eaa19327af369826277325d12b33e5f1eb6ed50c2669fced145a6483a11a0234803b0c7198ff7a1fc11e5bc5df87fa4f768eb2d09f9103171b6bc228ec7222579ce20cd1662bcd7e98bc41e5df491c5f88f6d257c220e500c4a578cca3b9bc7a0e6bf7685110b9fe49dc26f0c5f557424b4a275357fb0bd31338ab541b1c5786727dca6c9f4fc75d6bf07124f516fbf200e734f2b07e9f668c83f0e1be6578b0f2a4e4defe6951603c1c723f00e1270e5615ef8df371a6c5ab1777cca3bae6faeb1f9f9da9fbd5eaccb19196aeb022b844209695aef438981470b0970b44d50212ddc5a18c967ebbcecdbc65db3f0bee8222964a35abfba614ae7bcf6f71c63c09503791254642f8524959bd2ff42377ff2658b9d91356df796164052c5f1a7b21d725c202a920705856156c73c0e95905865f8e0918de68905407334bd24b08ed41aa429e934158cb46e31e6743fc0b6b71082ad43d5a8c425504dc9bbfb21334ea8db42fb4758f45f7c9d20e653f184ba619ec6e65f41feaf8c8cf67f758cfb38c146f32a4068f5cbea9e2385a2907a4b313e4f90f91430af05d3fae0c43087fafb4ae07a6fd052fc111aa7ec6022ee27bba7a1ccf9dfb9a0db6ac62bb9f485198482c968d56a03ce606e5998f74d5101f205a99c20b907a80af3f41253d842ffeaf213279934383e355a3745c5a0c5c9456568c94a469a77e6855fa312befd34502ff9a0127c6fc77ce22fc3c642232bf2889f6d3e5618eea37d88988fe16b0e168da52f2938b93e3f4d826e8a2273e3a49bfa15ca62814b4f7e2ea7cfbd639f7d803e53e00610650890cfe9c896b372bab8490c5e896635294131ef46e4ba9002a12e70eaa03caf09ff6d5a763bfd9fabc1abaa249d3b1b1bdcbaca6dac005a35cd620301a27041121a59275372a3b423b6d1d0147b32575647e106df0983d9a5b7f33d415749db5b164b902f2fab063c9abf8c1fff93d599957ad51f0c817e6a81dbfe0c80a1428ea12a9dc206b5ac2935f6a7e1a103e616846d3a2c3dd0442045171e93d9aefa7c6bacf974b6572b969bcc59053b987d04760e9afe88afde11d327804625764b7c27b88f637b8ebdccac4caac4d4dcb9d3c9082d8ce1103b8c3a45199d7da98e7dafd19cadbb1bafb2d0c77aa0b7b6d5bad26cad292482398827615ed5df4f9e1212e1aa0a9b088533a1cb2940cef0c52a8b373f093f4e8dfb72520917740eb83c73db11b40c4a014c484ae5a5415c1961682cccb8bfbe8cee8fb206da12c2090fdb36d865ee558135d5548002fda13ab92dfe33188ccd9a59368cb619c297d189a299c814bd39dfb712b6800656dba438d84b2e2fdcecc8060055187a1525e100bef4bdc53e2e29310cbb4468a6850c7cb97d8740c1097e52d365b3be4fdaab490b6f7f0edc36fe391bf29af51f030fa7bc90868c8da7e6271994fdee430f25afdaf39beb8cb37f99ab1645e2f7021de23f809c964722bdb982a8c3196154c381772015c5d96e31a2ae8d5faa23b9f15cebac1bb71a63a2d7ddf3272d61baab725b152380167718936f438286d08c6b777bc69fc20f49915f6118a24f1586aa8b44b4b2db699cd5ab6a58e1460099a9b2c35de84794f780d30885e65ce3bb19c90292f90549a93018f3a1d71c393ff8e6551cd4fe47d2a72d7099339472e28933a4b020f4ecfe47b0c52cf12d7d8ca1876a27f19cc50e0e04f2088b9f37d8e2a019a262b7811c280b8e090819344075b540caab1d708939d0950af7869025b988854d77bd337f0fb3634ab2118f89243aac40bfad521e7dbdc83c098b9769a741fb54b643fb203c0862c9ad847b6d72c1b039b1bebffbd6cd2d266b570f2bcf42f7f88058eee87e4aad69fa2ee08f40b58353f638efe81322247ae28ed21b64987f4bcef38b84a21fcbd77d1f59f421cdfacc9464e0bc0bdf518a8ba631d75c4053335a468ee2db11e913c363952fcd7288e9c6c8c255de80a317596ae85be451d49860ba64d886a4d3022a2810d78282e4add667fb064dc790169a55eae13dd95417796d4ece41a17d0583729529ec6345227f10991ee483b5450e14c8dff99dbbbe082251eca7024e966d4e183ed41d8fe50f4c7cf2698dd0719f3fb8f6674ca8d577e6297eafb124c2c543f97e5eb48fce050942f803f3a56e2e0fa695fbe192ba97aebf5aabdc6707644f8600f22261bdb25529b19d123ba7e66493450d135e227b3fa03fbca7af118dcf9b45a2de25ad08dfedf6b4ff5c8e0c2c8b0d68d4d3df3dd481733495ceed34e52252ad51e0eb3c36cb862d9bf8b58c4c323c74f21aa188e57d39708a63578492590263e59246c007926227a4f43300e24639fe2549b73ccffb323f2fe5d7735bcc8d8c17de95a3ed89ebaff0b8632269dcc518a461c876e46f15548b325e0c44d048e18c0cefa6a4886a3ceb4982805b28e949e56fc03a2d1ccf02ccdd515d0c9e68b6a8e13925c4f3e57adf881c0de62ce52e763c6986f9f919e2b7af6300be6e78c866eceb76fb04c6fd9f9c097fb5405a749c2ff7f0693c8037c32348c45a2dbb84bd1be4837679de179f381708ff605d8849a94f08013f3fcb64c47817f299159b2a6fb282a4776f6f697847fe574f41ce49f1bed5fa30f05914ac3b8bcf839270d6dd10edccfc629c6354bedc89857eaf34b6a246b19e801cbf3e715786620ee0f6177535326f94649d056053312d557e3696f57532a4f85da67ad0ef8d4215514ecb2b925f3161cdcb099c089dfd1379aa9d09c3e3d059b90e1878a6421b7f703697faa2e73837fc8c005e3c4f7ea6d84757ac0d3c63eca6825918260c6295fd4c5cb4c4ca65c7a3a22b6091378f38356a4e2abc0e15c39fcc019a6350ecd1e958595b958b4facbceaa5ad62ec563cb6a388e608ecb0396c250f1dffe105b96161ef3b9aff3c8b3c2377243d4dd1080ae27957984725f9fc47f493c8ce71144b1f85a85d9987117c482f8e43b83873a84e006b2b9060a129fdde16d4f92c74147bc520f8ecf0d8d0a36d46230c42c4a5cf115cd5cfe3b427ae62ef3a485975d45cb9cf3abd8a04c0f05571bdb552ce727a1665ba7247a9a52dcd748c8e6475289c6d38b8e0767b2129918d12dc564bd488655edd7fa4463bee06bdc7143865c2c8f3af9adde887883c85b67288762872133120bdba2fe447216d15cd35228f33f6b3cf123a887081b236b590be1b68a92871ef5968db6c338806474b433e82fc07f3de1adbb7ac547971ca9837776a460cf04fb3192ce64ae02c44da3b9f71044ebf2e7bf3e2c79622903f0c3d401e99d167a63e4083989154a510b2f8ec8fcb31ac9047a4886ab2058d9b703767abee8a21cfbaaec9f7d9a6395a282015c2e1fffaf2821000df46d9acf6fc9c8bb2f5a1865e9b9db396eeae572a472fe41631de4c165f35c66996b793d83563ce82e90b61026d68dbf5d6d9b435817e6c82d84b81f9fcdbb1d50d9bc8f2e4364461252c461c059b3f2f71b44e08d3f73455a9f1c020c0b7a4d6250fcebca9d5048577c9c2a629dc58c57cfd51af459b638a9f91a0b8779457345abd4e3916d7b269eff1af65325cb2944a42ec348969c011382246ccc740416eba34168e02b69e594b6d051ef8b6fb9e59a35eea3dac5af44ca55c666e51673dde0ae73cd48d48f517af229a7c16c2cac1f06d0809cc214a88437061b3cd55f191230a88e7a44a6977a95d52d208f59ada058bc6cc554d66c5a48a25773db0bba77e92e7a59c3ef6ad656c69fa5271424b84f932c09a8a303167fa388fae0dc66e4f411b5a593f23f7b26f835512a11c9858c41bdae1f3b83e1493750f916e8aba9d3ccfb54e6efcb7784f2b76cb7a30aa6a7a02fe226ee97c5989c3d97af3423c70dac9980d96a05f5f09d799e425a2019a787a8407c275a55a73c10e5029af0e06fa64650f0b6a8a107d0ceb810b40004885f8954d4d2ed64f62cf5904e6946499eb11ed57ff1518ca6d938f3a05b2f5ba833e075507296823a4e7a1fff90d9f3cce6f91f5b7eca748f347afc4a7c93da5574f5b3faf36a11eeb24b8aa6f109731ee2a406a2327f8c6401706f5fc8d944621f9c2b4df1e1b822d3720c4f562057b5f1cbdbf37f25e1541f61283cc52c211a73fc4d02b3d97c186e64c57ce6cecdbb2c580b974a0534c23438526bad7c9a71248f18f82649dfa843e610ed6599cb12a03f0b3633bef884a913f2069ff732ab1cdfad01405c01b590fac45e07086d4098a025c915f992a5798748ccf4938fb9a70ee2391a57a013a48e9ce368098682fb7778db7648e9a52c2da067aeb4c3595ca367d37e9196625352c540e8ef9c2957ffea80832f7cceb1d5a0214cef56e57ed421525b4d877caea4b705de1033495f07dd5c01847abc65b33ddcf5a1bc9acab733ebd91971632c0dd71a9fb758addf4fa139aa2006d20a76f232c4a81f24b22208148343cd396e57273616b10dfa18975ae2a993b2b6a0192bae48bc802896a9c6268b08fa96c53d8351b4a3796d8a78075729cf88bd2ca330e128f2ba41f28644f79d2467a8918817f85f2626404f2f83f774f508d3b4f9194053db52159a0363fbc2ed307ccc2732c970fe276904aa68574ce7df82ca3e1b89ac33e3831ce4bd46719ee9d5dc9659ffc4b7d0eff6c1489cf1da489b815904ab4e880d8a89a32db8c90e2155ac469771e5859548e1f430a6c9f4bc150c853f77db2fedc93ab8ac5f17ec6974fae1dd77076c616d5247c4f8ad218e52661ed9391810ddf3edbc464fd961e58da9bcabb71e9864344fad4934c1c7385d0c05e622487925b8aeb2a293df01393d8d8bf4dd15c9afc22811c6616f0b3a6ea215d1c799c92a61e132a2376841f1260131f372ed47667184ec84787806e8f441227d64269bfc2905fda21353826a49a0a522da906620a39acbfb98c140306256981e2e7e69887039f8c5eca992bfa33be05fc52333907be650c9a442587186354fad2300ba0d50208f240114196d8bbe4b51328ec59cba7581f135b5f101b4ac6a9fe071e0bfd1f706a7dde6357340d8e699b6529ed0c7eac04eb99bc7bf7ff533dbec59e01b65bdd5a848638dae7cb3a0e6296e8ed460b7cfddbefb73a8029e393c291af1e884e85ad0572a40d1d69f53a8de5600560071eb462fcb3567929f1716f717507fcbfab7206fc466b96f476fc6902df70ca20c460c41ec6bf7883e8b43789b6336995efd934b7db051fe0350298bebd283bba77f2753a4d9b4bb0be608dedabf6c4d3ddeb591e10217cc3e8b5e6f3a470ed3e69f4a48a60c8739cd2d44abf4c9b479682df02425b4ed63762af32cf28e29699333222b8fc2404223c9441627ea24ae9862f8b1b7d231f4da449b038ccfc4483358907969c275e25da9b86664063f5956dcd46b3f423348cc5532273047db5984932dce10c39fcfad6bb76cf2e163641a32c2719edb3313621c703027c10ee4ee51be9dbd0062982d2943091e30e752f5d4547c5fbe178d22587774e914513137329b14d9eb3d435769b2bcc92abccd24b75a0dfe0c419c78d127f8d0ac3c22752ea7d639b7684865ba06489f463668873da3b03a9a89240b10bddd77d4f82467fe3c060070428d3d9d906f508731bd0be7cb24e5d054332b622d1afb992031759701a4e1c8f57cd9d4978c1cb59146040539958a703d883d391248768be959f1a200c9cf4c78c85303d9d28a54fbdcdc0892cd2fd061b8246b435d9e3bd5967328c8749ccc0777692f41623a1f5a7732f7b28b46a57d9ba851d263f066c95e1f84344a7ffe3d20bd655df1ed52773dc2da71855856b41666f3058c35d1ec8e0e0bd8bbfb9f32b4363fef4f12e6fe0d95ad918211f6c65323907bcab99ebe0c0a274877d84521c40744e161486306ae7f94617641c1b3a60c6470f72ae3b0005b28ef82a12db0d2daf12a2ceb61234bd8a2e886171a5bb5a292f145aa669302f661054d70c34de3ec3135d30d80f2823ccad0f4f326059b059a00db1e855f9ce1c6cbe7c06a38df4c86dc1d338884386a7ce8ba6c34b0bc273aedf1ecfb6e9195e084e44ada3e8b3ff10c7adad4554e9e245ccb2cf2892a2ea727ad0283938e2a8fd374eb7a5ab6d4e3d7a763232aadbbfa521882adb2283474233f23a038656ee20e9eac2ca380a0bff9dfca46eee25b88d4934807a8a270ed5f945300a07e7d665f9cd930d21cc443af340c554fc2ad241b5ec0fb649c420d53a7de2de1215f42aba43ea2faa7042478686f62d3a60da80bddc5ab0071229a6120c1897a14eccf1e849a59ce674cb2134bbfa36e84195c8bbdaed1c6f452374d51fdf8a40d154f69650bc4ecc0ae370cd201eb492bc0adeb6eed70b4594ebdd68edc02bf400acfb567a00db065e71df26526fd79c976436cfd4dded7c034b824b04005081ca97357a99c00dfe0238c2952ea92f1a9215810ca07a5285950d903930aab8c953be25f58d7e4cba818cc710d539ded23369ca9f5d03402f2b61d3ebf2e734d86c306341f4a0605d00949d6b387bf563310f5bb7295cbfcc426d87ffbb61c2f0e05b6273ca5ea43c02d7182f15c7a20ee350809dbce072c6730cc9315a6e7721ba431b096af92f19526e9c9d9deaca4da44c0791ed5ecf753801181b209acd04b91f2a1efe1bd9c6971057c636399899934c4a41ed5bc73f9fe1c2322b2107179862259b0a32f59198570c3e46b124e397db86317138f675119ffc7b641cdc05d23371e76408e66f42389a61f4327432d9d2688facc5ffccbe46c20dd8bafdf53871d7679228141ce1ca697774a8e05854859116c1025b5922a3c866280c73362823e3d179a59693692d4237b87fc9719a603bc2b2256ccf2a164c045cbbd98f83842003cd07cf5c9d170fb4bb5b87c72e5323dca6c7e34a776220b6cc6df1599fcb27b5aa7bb03dda26e12c7516720376678a871f1309855a9948a6fb9bd415cb20769c6b96d26a49bd75a39718ed62e287b4f3194c8319ad6ff3d0726b71d19d34a4879233e4d177915930602c128499f7e0d573a71a102444fb0af2130cda9f11b18ed7d48a1ad1c2cb1d3fc21100dbae3d58467e0eb55f7b8eef77ae3105caf35924480e397458729616a260e7547d2d3583871f5bc51a2df61cde652bd89ccedf2c45883debb2ec1ddfc7e605f4d9134600afa2c77adf426917e3828635cc864a7220c88183cf21e8816b75eee9ebe9680eef1ac11025674e7621cf85c2c4cd76c3ccbbabdd56c963be10a767bc5793624498c2fd3807f06be5fdb92a5cc6d9844833a4c05c2a44404561f6e62576a4c1bec3b34dbb90d596406f7daec006190553d8ab715a57c69b68c6a5bda5fa8bb22cab88ee8bab1c8ee23d7e5045483a9fad350bf0d88d609faa97ab9ee1852af574cb593bbb30e6f9aeb1bb175b7424edd8e7100428ca0b86bf85aab22717817cda03eb63cfba25b79e7cabfcd05c39039bdbab0f2fc2d6d9fb17f76bf9cd2048049e6333603cf07c6b7d793fd51c1012688151a920e0eb1111ffaac6bb545dfbd5e7b0782178aae735d0ef18076172ee0e7aaf982dcd137629d7c4a9b6c18a47d80c6c7a557ce5f9080fd5fdeefcea00fade34c29c904b3a4f49a27e8b97ebbe6e36b8c9d69ff614443f6e0e731d19b103142001211ff0e6270e47aa781a75bc7a37896a57a8cca41d79d07338b3de56de5bbdbb8302c1ba1f2e6c594c311ecc515c5d523dcf35d795e0f12ec6ac668f2a828ace1c49fa9aa6a20075da24b1a6cd5bfd14c19fa0d7d3112db278650d64f11ab37c08b18954f16f4dfcfc21bb074314b00472fec40fc78aae279653839d6ca5b73b3b0bda970bcd2e123260a34abfc6a20186b8c16c0d57860501929f3601feb9f5bd6456544709fdf5b3e25fbd27883c7b036bf479adcc3da8975e8d9b850391fe186132e40b2b17bbc1303c2def931658290f47d4f2a122d4cec7e3c4148f0f4505f4172156a5a5c282a73202d78ca126ca3751da1b790be91d4eda221b375696124becc88f5972dd8527b369760258c7739d2c9ed9094776902056418045bcd0991ca8493f80c26ce6e4701ff5b80603bc8320b03453959130b0817a052c35a96a5bae6063d1df0a4f748eae030a10e18c8512e0a3f485b8d68b53b66e6de15953ac83ef8b18a7f8a5ebd6d66a7200f98e22395dc1fcdf218c936d3d57b953bb3df1720daedced8a7b6a04142ce7acbb678b9be48a627b0a567ca31fa6ddbb3fd2f031fd9cbd9856e7bcb489bf6ce0763142951fb2de9a943dc091da007af25ce5decde461d0230d8863fb579301ab0c8a4bcb6069a4aa985e100ccb29b9449c418101738c6b580d9af83bc6e69b837bf8e86671ff22c89187029a6e3e4d44e5b6ba5d7df2a16bd8513bcce5dea20b179a590df4503c22cb0a4f0e3701c529e13ea1cb707a7258390273e661babc40a9e912ba6e378b474f50d544b261d688377f22f60d380040bbb345ecd179fbee79804cc1c97a57f74aedd34e133b265cf7d473ac0b326a752637e9319cced11590d784979a7cecb45bddbc9ebf7c9dc5400a3aefc31a694ee7552cd2915a3d6cc4a2607c0367cf353a374bb001e689fd8e2a57b59d0237e06c145e38bfad1ae93bce25a82468884c22e8081df322414721753786310d2ef6848171d88c7dfdbbec68ff8ffae08f8ade525641c3ca1a04c518d6b05844b24b375925f0fe744e77e1ddbd4cadc5d7b03034bc9a2cd488483c604c133b1f493cd4e88037d322eaa9133212a35327c76aa977d0dc9e2223745659eacc5879896582b8654900cdb17a1f9d07b4d0d31e9c0564360301a853f472bb0d4f2684a228807d3b833d0f2f118cfc55582803c9c265de5041d57ba5e6a8951d4329bf293978f1be69271c8ae4dd15b06853f85f30660fb10a44a7ee9a3f6d2930873407abdd49d333ce0b251c269ddeacb3eabc639028aa9f1346033bd40a8a03b8f1f782e8e45561bc66c48aefb4312699ada2a8b782220a1237e4657737d7de6e799d830efbbf4500ca002ed7cbcb13095e14406e40d943b58bb976d56d5596b4afd15427cc88d8848f9ab1419a728d3e4f6cc0436d8f20f08728cb5f780eaefd89a17abbf153d1121c93cf38e2f8f820b22d1e0927e5db2731ff026e6c6eca64a0eacf643d53038303c25597683c37eb11cc4abe61369a09f9426e76643c7d342eb090bbc728e957bf951f932c19fd224da1cd8b1b61433ab262672d21e67bd11bd4c0f88f2aa25fb32fc17ac9738c19feefcc6c1452b1822dcc34ded70612126870c03f81117d37ca9f63e8f934c7a24cb213488337189aa8f7e4ef340cbbd2e4a74bae5d48d5de92a912ef24eb92685945e93e0990f62fa7557adf9ac7d78575d7216c6d01d1c727b9f692991d5218e3ad3390a53d84530c706901693693946299f7c8e6e0bd2d9da41ad3d8b6a13a4fab6a067879087b4d70af213d1b1613b977f417b907d9a52e3a985ab636f3aff9b6493deb1903a909645bf2c807ca4f367eb1d39339797aeb6640cd9424363ed36db70c2afaa13b1a1178a8d9dd01f8518c61059ddd169d4d83caaeba83df56066a51383f7a4dc3e8c73eb0187c4f7fe0bea5aed61951fdb7067e0b7054b6886b1fef9fa34fa0fe623c2b3ff64c26e8e929230c39a38793e403e7954ac1877de66b9ccc4e6bbcecdb4eb1e50dfe4497c7d858791c4eb10bbc7db3e13c2c734dff6819da6b5af99425e60dd5e505587a495c26408a5ab59ee8ade4b8ea8931eb3af761f5e95ad6dee3b7c1096c1ddef99fe79dfea57a9e6a88a8f8f4b90743f4d61d3bd42990f8c357ca01b80619da554b87b3bade370314d967d6f077960bb86ef926a6cec93cddab52f80599d7d5d643890f7588cb65c91b9f6441a25e9e5090f61af98cae1da46bf3d66cca6f1ee426f7e8ee4fcb720f2edda4e111768ec2dbc4c9ce2296d90037c74cdc61be4797a511089626935258b0e2cfa909aaf3c7a5338ecc315ded623b550587524dfa51848e61cec18082c74d1bbfe41a72d8c1803438a47fc8599982ee4ba67b50bef7c24544d6b9e1ab17308d8132e10fef79639ce7792331f78bb74b1600bc34d0fe2857c37f034efdd6130dd69d9e150a691921d84d29c4f994a34a769503eb14af6160f51aabcc536b3eaf8dc319cdefead3a1f9b99d0b915776f943eac7ae7bd117a58f150ae2bf0e5741260a18f2b375a8dfd235d8300a337cb904dc1789dd738f0c3d08b4e8600df3bc7f2c6d0a678ab476cfad2a7036428e651d39bf224f3cfced0da3626e71257844b0bc5bcdb54cb3c3d590dd3f62032e422f0c7344a6493cc9f4d1330b634cc186aecc23a16000061ec8c72f3a5f8c9cab9479b4bad77c09828ae3e0e055c427cecba707be0ae25fb1e77712453f088f9e06e72c8af09e532296e649fdd604a24878780e2d01c916b4e8c4f5a261bde7ece8d12381dc5c1b9b1be29c0efd4aeb4c79ee9769cd7012146bb119e12fe3cf4e4c8a65708778635612cc9914a7b77ec0ff4f0145a238d5607fd1ac6c384cfad7ba2b771c17e05f45c4d5f41b6cfb3ebd61578b61a2f80468571733dd54ccdd248a064e2cd4defac967668a1da6602940a346d7c185cb7e8858e2acaeeeb1a78f4d6200fd57af3087f03ede05a648cd99927caaaa4b25ea19f05ed29afe1daa1357196a99a77a998c08cf138e3164ab6abd4e60ba5d3bdea6335c81f183dd3bf0707cb836be964b551e0ad61b238c8f77138e0c6f9fba90cd2b267ec01d81fe6cf60e6043e193b21153038c74206d2d662041d9d67b27259e88404a9aff30105dcadab752ede1735e95a04ce935183e3deed5ca58881a5603c973394a0db8e86a67d07544764a1e9a081777fe94ad8e3e46cb6bcb9870c4d62bafbdc383af649d78520328a76207e6d9172f5e14a88cae9907ca67aa63f2e987edcfb580bc18c9d8f2b593b2bd7302f1edc5d01b80f2e5eadb46b0349994f94bff17b2a45191fbaf9b790b8468a77eb78df39a0630dc05a5ab35733d32ef7f66ef7928a1cd9e9f8c452b6c1c9d5fdac447419a10653af212be85d71130d29121a0b3add0e8a4cc5413df3cd0d15e20e73c6cd5ac9e31b1e2970f33bf7fa1aef4039dbafc88fd0318fb7d7025db551b087fe598b1d8c01a5df29385a6eb3b0c0e51a89fb3156f8c0104eb220418c9933b86a0f96d81fd34057794c456a088b30f1340adf3940396704925b0b09c7e1b055055925c90b81097482d83908ce5aff38701448dc9a7b25236c97610f39f5dea9c47ad31db8220d52f6e3f2737c44843fdab206d6ed12a7c2a4312b2eb59260e32732ef6dfeb4d98106c074f4a5cee409bf8fd28156a2a25827f24fdc9fa81032747f37d2332c393dd0e34ae292bc6fb01a34377b69564e7a510f4b351fd6ea7e8ffc5f09a67ca7fef92c75f90c18d4eb846c9cdd389963195b1446f8f60395856c39f27d5456759eccea8e421d372f202db6a3007d5e8add557b5be7be400c9b374e4b3c527b88ba2ec3def8a868dafcb502fd6c62d7a58946463210679fd861f02e13c8496a6439cddc2c0d89a67b56b383b5c016b73fc5b89c6edb6d0ddc84e35a1951c01ac66144fb79fed9eccb77ecbaef75a59a2c94884356059ab6950f48d37c43ca71c152c4f69b56c2b20b2c7dd4f973606929a42835664e1e4991004b90bfe3fbcb781cfa34d90e1b7b304afd12ecea0b519c7ba34ff02693a7238c1774c3b65baf61a4adf37675307a45784c6c584f316a824ddab719cd04b32c7d840405578edcee7e2027a79ff899b80c7a1f740964cab19645fe36191e22c739ab45bc2cf0acaf76bfd44368644b5601a1725724b173441ff178000d7be81e059b89e266df500ffd4f95d126a0bf0e3b33a48e03aedef21b6d3eceb0bcb9a9936eac60af2390ed04b1142a9185f3e4de6ee950c769af105f63d44c298d880086406462d1d86331dcc5ff10ff5decb25c73bd74758800a67f3aad33e0b3355331ab8fb4ff6b1f8d1c859ab2565f5e2b2fbfb24cd08e7b2fa39b958c3de4fd135f47ed40aa81308a8ded81b4f6818fcb6e0048630379aa36b2a201712ecdd25f02acfe79d58e42c1d57d629d244a7b054557a080ca1a47515436a9d01f4725d1a50115856c56665e4443976917be9a3f02f61cc326b50b9c42403bbae644c6f46106119d5a41c76c676c8099a0c65b6d074465b1424c94e93be9b37d72cd5a0191ee875683757627a2949522861a9f3aec1a29dc2815a61d82a5c657ce5dcd44de445f03afa7542e121a9a58669490b27ace687725b280550b75e4a9107c7ac4ce2e4a7b777c369ae898d89ab332316349d903ec7afb7e84e53e35c8553a7d6f8d7ac027109eaae9d6af7b098e794c5277d3125ebe601007ff02cedfb10e1ce498366e666d4c58628eed3e20446f1f9fca07786d99eeb47867eff6b00e46e5de637ef1f85f73e1d36eb65e6002db0bac21e957f795a09e0caf6327b911c4f5ec0c17ec01655b06daf8e5cf6c976f63cb258b856fd45b64625e01e4f2da5d3d7b213cf3eb0a6e410675a1785d02e9f64fb6d1c107979545199bcf058cf96074dbe3c2231a9ce1a4951db4da3133a2955a526b392423224aad22e7cdff1581ca8e6c1471e68bbfdc778c5a63b14efed3921ab29d3fedc25a52032928f77ab3377da94573a2f0e967d6f1083f8bcdeab4cfdebb04490c219a2db505dc815e5f108744b6d19807b8ebb8a5249d717709c00f9c9d9fd8a60300bd1dad7a741cef0e1b8d3e4a9e20bcdf281b722c7daa8a698d876065942d7767a28d31925b06190493a74873430cd5feb2323dc847bb18501b66872f4f17e4ad7aec74d2b25c80fb2670505949d6fc478574e4868f05301c5143c987c11bc55b6bfdd0ab3e01219b725f11dd3e3b50095f5accf819e2ba500bcba44efa8f398781be8b5e09ae23318d09b23b7cc8e3eca594a3e343089979ec10c31707e0912bf907384da639d20ae81c9bf59a0129b5596490b78fb0bd465cb3360eeab0f611bef8acfb50a1837b77702ea1fcf0566d2e8c73e69c75c929d48a85084b3f7fd47c53e19cdbf6fb2a1995ac9a6c2928a35b168535666fd830702d1952fd2f1efb0916201ba99923de89e7cf469a47ee51d741f8ae1b7321e579dcfd0be0860aee76493fa0be63c8dc0657e82016a42af22f705c484c7fba2470e654208623a90139b01fecfec9330af66e2ab52579ed735367cabd4e295d5032239e43db595d9706eb08a3cd24c2e43c1fb55d1c7817345482c81c08d806c26f7af15551cc9b4c41c553207d74013642b9a5d4a1b984dd68d209d475be9c980c95558da6b38829803afb0b43fc60806dc6ca15b09b522520fa03c5be5e3359659561ef8b8c33873ce1c6e43d6dc387145e0cb35bd826a2119894404a2e31dee5c1b2066b43e22b93c9b7b1b4c04dda31bb23ff4bd31ed4880331cc6172c17f52df981afedd8859b90ca769e1f49e07d6c679a492dc59cd919bf06ae213013146e781be8ddaacd6d25540957ab3bcca478269c407595c61cb6f8dbca258052c42bdf8cabea7ee8245ffd3c6834b4789dd64a60cf2b520cb8fcf3b78756078e71bc9322f2b5ff9a791fa36ddae65e59193354c8c2196b363e1f5b72403e9a2807ea4136f93a7c64e172af347c7603f919f07aea0450002273dfa9f7909ee62932f2a4913a8092d4054482d054178417713f75b3d841145e68ffcde103dd1606d3887d9dd74c91805b6f9dccb973c97a9c176e3709096cd75091fff1473a8ee36b66fbec5c1bcdef669fb5a6e88efb5e7f63bbf64c0364b4f8fff4abfd66326b7c745d6a8b45eec8f09b7c48e6ae8de5668fefbbca4c038690a1e082757bb4fee82917c14d9a85bf8ddc2de3ac9b1df01e2e42b1ae5e411abae93402171c13927b51d337444e953222b5defeb09835ae68abf67dafeb8fd5a5f4fe25c651110e076d9e121ad1be5a494fa6671d9482ac61b013738bcf8f36e54f8831cacd20a47ead2fe7955f93bf85794c85a818ab191dc1a0c68e48e55ea10cc2082d4d36f424fd4a89e71a13aa9c54ff93cc2d3eb075a6ba5fb019e83310af36637be06f530fa5493ceefa6ef368f89dda4649a924024c7615e993c2a412c9c97d7b8714b08c549e08926981e7588dfb13672a6673b5e269bb5bec2d3afb0d1f6cef744fe56ba6e63369e16195dbf555915678d42900ec3b7a356fdd21b3c8386fdc95c5fb905d6fa72ff33794fdf850a89d17ef8d475ed1c70b30ece11548c8868ca3a5638acba4e07afd869444bad96488b154ed575fc13fc8fee06b37cc999f2627623cd03d2013901a6f4ca9fb185ae41f1017dfaeee3b9618c116ebb39fb8fe8531b116efc2f92201c0b5f21c39cd920f573e657c734bda77005373e05a58cc2439ce2e40890d3354fc4074e9c4825d1d22bdb28a9624d2d290b5043883339b4064e0db6601166b63ef95f829ee142d1e4d9aaeb96af57dd26e16e653d6b78f289d328115d420ca6a12a7b66d3b3508ce1fc42d3ee6182949d47dd685cec2a5c35cab5c8fc2cf8078158bbc2a17ceb5542fd44043ba1119244078ddcf41a31350b23b19b2f502f58b795e9a2c8a3773e9d67b81fc61715d6f9d5dfaeed729dd58579c57d0825277518ca6583f527c49909b65aa13ec5ac20b3f0115784ecd72ad7559752a8e58a654874548064deff73188dccf2e53c905951ed44b8617694b42c9f0bd185f5f348eedaa0c618e16d782c178a5bbe75c675edb1110bfcddc94f433a2b901011edc2391ac6478bc72e8f4673935ba012686d826920e6ac72dab6ef2a8f5d5ce3bed20f7f32c1b5861644d4e49a51cf8f7db42ba8d55f1871ae75fcf1dd7e119506287df860d376036cc303a3b6bd933fa2cc58663972a3adc425c0f34500b71a1641d4c2a1cd561cc3442c35ac9c5acc0bf14faf8aab88411c53d8a712480989400d86e6c73c9064f01fa8f377feadb64cf657bfcfd89cbf2b251f7cc8fc97126a9a89ad2231d578af87250b1e455937a78eca2bb84949e40f290bf9e4a6379e6a12a6f1e106c0a465125dd130f8ddac7a8f815533381e9423d776118795950db9420cf0c79b6c7a0f4f0ca9ee4ec39fb75163a854e5d1c36ea2c59c24a39dc8a15f62d3454d8e3595259938602cf7c3029478fa1fbb633091885a2340845aebae1b5004e0e447d1b8d982501390ee9f604555eb54d09ba006596e22fc4038f328b05c415f7a2126433f30c810a609a9ad0f60fa3110a5febc772eef2035e6883dc6f9b01f133a3072a5457f29f34401a546c0d6b57b53d86dc28c797d9417c5216b2a10b04c9b5ce89e6d01c84ae009e1eb08ed179916ba396295a4e249b0173ebfddfce4c2ab98b785344977675050efbd554cd9557981720dd32e808d436f94d73fc8e828c02e9c47fdc37fd8b3db0008acf47268a6d5cd4740907b0b37fbd3f999cdea239e2262c24b6b762446a6d54d1f2fa197fd24392dc93bdc6c77d48e75aef41c824d2fa502aa0915f188f52807929bb57a17a9c6373784cf6c6f4a3a6f42f1a86c5407502829e9b15a44428cb8256bf004b40563c81034dba84ad403bdb17a44d5a65991d813700585c5a4d22e01571d28a2db8dd9777977e1024a0c8145c6dee73aee39c520d9ad015cd1a8eef1347ad2a800aecfd745dd2de6c182ad073e304caf6712c9851b71c060c282057c3fa17e8a75b08d9f22f7b8a127b424ae157434db675997cbe6d0e3783a255a8cfd456eae4be288af3c0d96507ab239b092ce1831be60c83f4100a80a6e9fd8d377a64df61fde09dcac3f5e3d21aaadf3442f9274835b01144ca14dec97186adde992b42ce56198e23873d44b7dddb31303a92ff4b5b80ebf47060cf97a9e576415bebfb2a60a49dbe77f5188e135880b576c050d4d1c9d5f003c1b9f447d604b400765da3d6d66881a08947158ac44a71d96d5fd391e15fe28fa38da1b8322b04638ecbd388daaac353d569437182c2b5efc6b6dca6b47595cc0c36cc7575a51493935abc93717dba991c39903ad7e22f964b7522d6db4cfecc613d3fbb7341cd40a6dbe324364f6579f0b3f0a03a8bb521edbdb78eb8af75b0e028ba802f4988d9b044ec8ccf64f68f05afd2d7aa2ba6dc6307de7890aece1ab105faec72b49afd44d21534fc77139f12974b56d4f9dc4fccfdab245afc588d04c4138b588bef2a66f4cfa8a806cfff59b3f87797457cca0ea5b4c778d63eb262ec3fc5be1b61e339fccd74d07488bfa734971614eace10a60a661946ba3e27dba927c7846c87dbabfc1f255cd71b6e5ea1e47c2d6195e5f1029c0ec3427a3ac679703e60cd0bcf4f6787846c2c9407dec08ba3d43b2a698db9acde313433cdcf39b4c0685363c152d50f6bbc98b8950faf8d4890e3ef889689802b1411fc2889fb8ce7289c73f0ec3478ae0ac6c4db1cdd368d00dbc27b80ff45b9f55ba9a5c4febc5bdf6f4c23ad1a8704fb1a26d85b833852255e433ae790575a7042fed23b6dfe46c68e253c1aafdedc5e526791c512bb0e13e3576483a2e9265d380a2ed7078e24ff89d6de08fe67421d41bdc8a278f7407c1f6adacefbcf93a17aa5f53b88422654c2a7ceed6661ad449957f472cfb3c30574ab96324620d127be99b53a0250f5c5c947ab67fb532a25b59344c13837970dfbaa553bafd5cfaf06ddb2e7482709c6e313d9ba5ef2a29f4dd16ddca87ecff3bd2efa2c0a991bccc7bb77ae5684488fe16b39fc9fc5b1d9b395440db609c791046481c753f80dfa5d4dc38412cff092dd58ab07afa52fe31b6590dac628b9f24f38ff0a206f7f827cb2886d91b1373c53d3a30fd2087251f091b29c9168f3ea91e251cd67efa65d1739a81a98c0b1d089407eded80742a28c5f9481e6144a9abce0d1ff0e9dec00cb1ef314dcaf4775af68c6ebe8c9c9c3094cdff7610cbb52b4e69a84671337087e9e5160b6fd802603f46ec3c3baedd6aa02b1b87108cd92c05a269556aaf64eed447caf49eb9d430aecb756e8d254dda53db22dc86f7983d0609090cc74e7e1cd892cd47779c325fa54a3ef0bce251596ffa2ce717ec0a0cece69732f71d00d2fb583b97ce871a27eee44aad6facf5ffbdb8f8c7d408f3696abc0a1a0aec85d448cd7659c6c9bf6f32497f1a3e6e85037c8415747b7d2f3e655270ee6417f5683fe426daf2790b393e95c8109df088ff0bce0d4e935de53ba25e214810b55aae9f92a82fa720835f8121bc6bbf8af85cccaed9a6c8d0907f61daa536710df80908a74176ae24a8409170fd3377185496ea11f236a773aa247c481346429f87cba2d5b3a65a5794b86ba629aff11ac4ccd99198e9b64816f60173607fd54a6ad47e0d754a819c593fc91f8472e00be38756b5357f66ea0a1e3d540becc86a8d1e857f61c0ccef68bc13043eaae7032fad4f000b7252cb23c55dae19653e8565898c5fd066c672c6b2dacf284d222c1b2e23f9780747e4205c6fdf63be0f5b8edd4aa9d4b2c9c4a92d16941b67d1a1c2230dcbd535655ed9d49b2155f9775fb7d852025e64c6876ba7549020358531be22423aec932e1391061af58b93e944ac789d294283a80dc299a373d3724e2adfef17eb00ccf1d136d1dd203c00f06cf6c035b09bdf3977f33e6572259ead92344f1d76701115cd04d916e93450b91031d5d835dda6d9b654d26d2e270d93eb5c0e1edfd029ebab055c9e196d797d1791c02b51eb033cd6f32a2522c2644ba41e450b1de73b98249460aab9eb3d32278b869f65ee234da73fc668e52a103a50f20de38958484c4bcf898d4c773934dd51890dc50f52c3b4c6b8ac2016968d98ee529990193efea73dd85361e934f2e72d67a233fa4e633ca1ce11ada072222f05b12f88ff23dda0838a06932d2ab5a802ab27753ab63779b07232e00d49a1813cf0e0a66bc82fe26ac4d98981af73f487481da277a531175898d326bf7f997809a0b0926ca80fdc09ce1a69e6e113a7e7a24014127a76b3af231f2ef06c22a1dfe3ff5337a9cf1f05ec9d41bb3877dd7df94332d721e94c051efa7f8aec7ca4e794c8af7e433991d00ddafc47f741c2a92ffe621d4f60897f9ee9a916b6ecd116f6eff6563404fbee119faf922c9b5fe7eb4bf7479a7e1127a3c816a9e29f4406af67c856f7c0a34d290ffb6cb037cfb540135a71b1c619961a20f1e9144968f67e84dc570bfaee8d23b338011fb176d3104817d29c22636f4c60502b0e82dae0e5f6315a1d88288ad6678b391f93f316a27b51550b454428375485e499ca827cdb4e8773c9884d9a8af9a103f17966e269c8b8894ab0cc607b03a2e774ba0b409d950b886a5b45ea569c1ab413a52ab6caabbdd5ecf6c601b1a6c0ec44620bc6dc0593f863a59fe9643399e3817d82cf3abfad6fc04c1159703217b94a1a4f7af57fd18e4d6777ab30459ca94028bde377c49bb8a7e1419082b91e60687f90a4d928f934046300227a803d269ebf25512e1fb5a0a71a8efcc3651ed49f6c2207589b9b77d0d922c0d733c3d3d72a021098bf0625e625513849dcad180bb0d649940cf1bad223809456df6b7f194ada687b4b43284bef10e43264675eb46fae54921739e942f89dcbbd87ec0a197a2ba9859f82dc61b1925cf06514bae2c1d6e73f5095693bd78aab8f2e56299a534b0d06eb073d2094331abbf25e940d5e3f751a56014d1ef2fc2e5b36c8c78f39d42a2c07b1794c50cc656b58a4ab0b0aea033c882b897142ed2ad2400a2530bda1a3051be351e54a0f0fd05e9fcf8961f7bfdceffa9bcbf2fec180cb3716df42bff39b07378f0a7709c9b910b8a76ede1aed1173e113696a6c470567fc706bb5939d9b98a27daafe4d1fb7b43cf72b7ebbd521c5a996fb8ba48455efe69c7a81a401ae702f4d8117b04be5cd8c7a3d16b9496a2c0266eff1d7ca6ed7a4a38682dd4b04aaad065de2c2d1cc6c6ddf544cfd0ae285880ff6052938b4e84c0352a045d326693846542727973c820207bce785eb073afe2d15e7cb2d58c84649e45f20e88d0ba3916782b50bce23b13c0fdbd321af61f54edbee4521ccf0922ae1787dd91d1f32f9410d805a2daba02ca69e7dbe7724a7c690dd4a9bf725ae883d3e716ac3f638a645c9071c648bf46ae762b490cf690857e75eb8eb637d7ff16ca87df52da80772140d41355f0dbc79e98f86cfc252d9a713a6b81d94818b5bf2887ae31c92e9ebe032fe8d710aab185c4190990333785a31e2dc41e5501861f6b58cab7f75d504f52d4a3f35a0750bb52ac0f44155ba18adca27e8a7611eb1db4b7489e498a3b92c14f23f3660750c00b46a24557ef331797cff01a36d7ed93ab5d3ba6a3dca8151c488bb386af7066ae7fc8fcf6267ad5c0775a6c7f1dacdc1aac04ecb36ffe4d95aba9b462b6ac021adf2638cc1a0cddfc5f3ccd27c28925026e7157fe644daad39d5399aed1544394f8662eacc6d0c15c47d12404738926b36c4e1ae66862f956dc5d3c38d216100331c018ae7923eb96d52b15f6f0e9997dad29624915478ba2904df349877f6d8ab462c472140c7791ac2ab191ffa50d961ce99a0fbecf3f23232077d224c7739a1915829b4e048750dee78751dab616d3d48dcc429e45590dc0d777a44434384a1abf8ead45fb6fd8696ccb8e1dd94b15fdb576ce29519b1b9217a1df74976f00ea23e1601905a4be847776ab3638605f148fb2d763c4de3e0d6a7216f614c92df23b3a8b7d7e551a62373cd1be9b2205fa1eff61efc0438646d24a635a562765d414374d2a4a0955757e75896d5b42b39a448edf88514d3e5066e57994a871e62f39a4de675f54294eddfe9e40b900a763498e7be79f79d29ad5e40fafd10d9ff8853cb2b17b89ef8ff2d6b4f53b0080a08219da18b19ce4ea61b00ffca78397fb069b44979609c805d518c765f417b0dffff88ad0f9eeb394ab27905b255b181f3ea086be981288737b7383c770eabd96b8106fec1fed808b10b7c5e4000772ab7adc41e5c1a26c1a3933d035bc8a13c2cfde539fd655a54e6b17968912fc0e53490e56048ec00d43f6ea9b91a805017eebd97c4b3f5c2722c3d61253194bf3ab8889584a35ab237ee0d03ff366314180f01fbbb1b63c7611f89daec1ce95bb3f7d9d25b93c8732ee977d3c4156f7a7effb0042a3cd37ef9c89c179a4957a9cd6b6ac485bbe443947dd6a160148bc2b274e59b10b39b10749510e14040766a944485f3415dffe00944f3d46eef7d361adaaa16f14bd42aeefd903c6b3d73714efd613d3046e39097670bb809ae9967b7978e354441ffc0bac2c65033ec02b8014270e9a5d3f75f69386ac1af7756170952eb3e599b585b3d01affa4a88d3a4d7be369e701e97833ecfe7b609b241c9c130d92e2e3d5598a0b6beb13468b190ccf20304361ee74fbc74d99d7b3701e6a5a5f60f8689d52bf3682126f75582e6e322c0d8a070dafb3019dae6a2208b6ec01061d848c03d1f157833b755e2af04212b422f953f0bc5e545c52ecb57719b0f60dd34fdfed48192fedd7e52b06f5914272c6d6e92dae2beaddff702a05e30defd7f4eefea04ff124f02bf7d93fc4c71ddcb6c86cab79a4845ef3bd1b26c47e9c14dfbfdfd0adf68f6ac868fa0a33b7901e003f6a61c7e68bd9f849fc9c447fe04ba06372ee35f444270a06daafc001ff3efb8926b47910128113138c7349d7a8bd7daba507fcd76f1d9d5dd549117886a2734505121e9eaf104b80d9d0286c4c2a2bdc3f1c8af8294c791a72eb0c89e2cd64119a63cb5a59acdfef18bb947fa9102a7a58089016901091b8f4cc25e01af21b48c79c269a2c76ede6b2aa94d161a80995883c13506ebf9766d80c2608077cf6668a30588e342f25683a627dec709f23a1f025fdfbd2b3cd6f9ac98baaa56c0649bd09257f91785639043a8db55f9fc672b2d914f79d4c33e1c7e69d7a952c7bbaec3fd7fc4e815ee338275b58060f996c654b989c224e7c8c2f888bd9aa22210ae9cac84f68c51e46a94c250a09059c1565db9b50f3bdb5eadde8b75ec90360a0b0ee7e2cd32c93a6e5bade49cc91b619cd5093b22a6e76c905da4955aabd994bf95af0a20ce5ac10b3ad0f6d41a26c54814746dfef85aca06f6f25380bd67048298c9facac15d4bc73227b2a3b7d15fa488dac0a3ee74e1f58d35480fc5a546cf9aa4722700b702d71fe8eaf4c3beb067ab508b98bbc3d49927faf2d2a5744d39f425ce358c1bcfd673a8fc63cfa41356621b89df3f1bf7b36846d838716a0ecc3de2df0b7803c58aa31892a82fd3e35bb87476ea8b2bc36342b2f4509d9069fea17a9e95977c8f36c5b77a20be6e24630dae2a7bfdef6e7f5585b1c2a4c63a8d131c7c7b46324c25f620199cbdf3ebcfbcd442b65c2ef522a440f6eb5f1daf929600737e39c42b4122fa25e182ed5875716ffcf30df5b73d88ac2e61ea10b703cbcba96d782758036dc73d2be762d06a4ae1dad0c6f2abf263c4a84898ba332317a3018c8544e5b9f13cdc76b056cc890fe38ab7ea58811cb5746c7ed3ebf535a04d37306559fc4092b032b24e44979103d7630dc29312bbd471d19e3976ba1988b10d724f14b9ad2b07d20f1906fa42c273b20f47d8125f44dc6f3fd6e4d56094d31e02f314470083f615c8fa1f3e254c49a888796cfba94ae59ce900b7ef1e4451b9545de86accc410869f83f08679261d54ba799ee3cf714e3b3eb1022ae5ec8237f2ac4265e898e4127c1eefdecb1487987ccc3b9fe62400d93675112be541e5f982d13ea1fe69b1f4949a030e65826c0a47c2e1b5eb008a9f2715ca04526e92c7275b78c55cdeb300621aed6936de5347ab85b8ceb1c8ff1164c422cc82a679a1cf30309f679ab7847ace5f9c2cf853b7c687a99f89f96f292dff58efa699a4e58ef5c90b5ae43b5c1964b3cd472e62bd3f3a3f831853cce52361c469150cc3d24043602a956c6b7afba6a13455c521fa4248cdddc59804dd5ea8b6ace85fc30d3f31edf2893658f4d99a74c5f69cf919486db4a7f684473310d7143d6721c8c87e96ef544b0461ba47ea220ffbdf10ba3adc000358848b989c8ba4d7149e2ac8211134e426c1fab22f8686fcf9f697826bc7943d706d828510d638361f615aca7b3214f84146300edc392304a96ce36918ef441e0ad1765559141362a50ba2fa7a26ed3dc6e06a444e17dd66f09deeac6e557b7780b3d81d03c383b825b69131a66f5f434eef3f6d9f443ad9c652d98672e37c3c1001945cf826a87aff8f6fede8fb5e5e219cb315e9806a73bae013aefc5424e6cc45ea309a3d4bc8368cc54d58704495b2ec6690d8179e4a5e07b7f6733e4cb4446893192ee18f1bd382860ddb2e04e6af24a3f4807f747b990183183eddbdae314386cb38d0c0b994950775c997dd2a3d63e756904468c239833d9082a15f8beaa195bdb3618a7e9a4616291c0a0ec4e1abd2e4474bd5dfa95f5195298a7c4143766b4f33c6c335394bbb0ea97ff849cad26107a6b405c73d217978287acb8c317996f4c1446f65a32c1bfdc5cce0dce3861a52ca5f2a99171232095a2420d8bb9f7c61c7b24cb602041d64136cc504b6756c49c03628cabd23cdcf262ade2b83024bed684d7754998739def4c59cde6463c2ac9390e53819373bdad5efd46ec9246b0d48fac2eef9588367053f1d510d2ead14c3213c953982dff5cceb36d7265f2aa6224ff16f6f005dcc390a1cc47ab769591aa39e88f4c3d278cfabcf21e588c8c396eeaa92f471750e2b46d6dc6f31f0c2d9a52f4c6e7b6d32b0c8ee824d613d5ded10d20be80113f3dd5fe108a1d50768a1240ef7a1346ada3e961557b0f06995e871eccc69cf70c3b6e7e215e65a9ab27756f9dce3352e56431bfdd3944eb10274a78aa776684e62eaa4b1e192d2179c2574ebd6bb78f0b37b7029c9733997ac64856a775f4bc7b0a4fcf1e50fea5640d11350c0161b705909de71e88e65304ed7d1338febcd036a9a40506006f3fa69f2c57cdf47913159655e78bcb59f876b14db636a7e40f3b2cf8df20565c704f6f5288a3dbab5c6f86ca3a1a8bfbb9b23ea00d84a0e1da3069b11407859dff685b5a4bfe6ba4d84988382fe4a5e30a28800baa822a059a8ab2ca0f937e12a4035555d2b31afb394fd2d35209539f61f26bbcd07193c4b63352b023e2e138ab6ac8b2a763c85f349bf0e93705fb2f9622c4e3204b1c5463db93a7e02e0f15c5565b958d32af5d3a6f67b7ff4888401b69a046deac271a15ebca5e5258013b25599264ed9b41cbd598b01b4b5d0ff763e065486a23820fab3ced6b4b5960d28e981a8207b19d18ecd74c9648038156697889726489b791a34d53fdfac12720f7a906d616e40acd039ba15a9332d19662d64bd6e51da5c95a30298fd627f298e69b2260d7372f1daab5bf923bde39eaf5bf2538087c76815c1c846346037e85a703774d96217ba96a71ba593253a557b46e591f8a8663920662340dfa41f5616f4776cfeb81dee65d77a9cf2f142f9af0c3feda057f9f06bce88a9925cd7c48653aaceeefbf528abc31cef538a4fb063bde4109df5a21d56ae08d26b428891c6cc85e5a445facd5e94bc063caaa2c3024614959d1ecd22443b99c08b7bb892b82bd1d0920d7e6107a78a4417c99fd249ec575f88bfb1d0ccfa4f0bf09bbad4bb460719101b60dbe07ee1fab11182c2b2d7431778fad220282c9e2d6a6bdbda0c4e4da1eacf64f868f58cd0f064eaceaee06923e60e7a006905a69a510f36b356181aa699b1f08bc8115f48b061f89e0611e8a478bc80e0b34055b43e0786751aba99e6700fc9144eb87ed686b244009950704fa9d6144c619c938552b5138a53c7cdca57827a2af4946680162bb7d4f8903088546b42130837adc9fe0af440e6e5b40ecfdb3e803c74605da01422067308c75260c4fec1b117cbc9145cf03df9bac42c51e4edd0640b1679cc48593a4754514038d4649dcf563c447c3df6e29a44ae5bf1ad77d01391dfdc30e3773cd4ae2193d28668905eb7868ef977c3e2ca0478af9abfa18c3930b46551b835581fca5bbb02cab2316f915ad653aa3d6299e323ea320635be1679b8e28e1fe5040d97fae26501ee7388c294f9cea1bf502528483913934100e0ad9fd0fb380d31deba13db9f2e26038793d68a76de466dabe45e93ae6a3d23abea13bae49da0ed82596105661814328e685a64e971b9f7dead6ecc4f6762934967af35547a3449922af1bfdea45ee8bb9f30e639b7c19da255a164e556085642a8deb3a37461cdf005c1a3fd16e631a2edca63ee1760b4ce7737ebdee6a07fcc3052dc42cbb395ff5e4121c5d232e7cccbeeea2767d5fe86cac105b4f895cf3c16911cbdb2c4ce2203814c40890a4a5e2e3a5e37a5024edf37261f6bc6c8e0e08920bd539d5742b8806c07ad2d73902db9e3fa89a56eed18aa5413e21db548b9f1a3c4e280075be95fe3a4ec16d8fe853ac4b47d8f20dba2ac1b3797068f88a9e2d5ebb48e3ca513002a995e60419f77d0b872b3967a8337b7c4b2c06ae3d7ed0e67b687274553ba8a44c253e3758acd5a642fcd2a7c62bd06ef6eea410d3516c571af154eff5b4c4acf48ceff4eb2bb6cb7c81d0767b012e8a36be4084d3d4c91ba98abd302dafb02987621ef398f65a80545c50cb7455805bad02dbffc01755d2499dd0fc1e0c32460cba6946005da8d4efa8a8e91686b1a5b74174231d5fb16298c59e9abf775e2cc699f26791d1ff9e861c9fdea39b10d1c19aca67ef9d48d6f51bd5a7b01b324074182d414d3ca684745ad05f69cbcaff9bd2dbb798c7b0049515086ca33a906069a68eb0b8da742d8070c105d721afe30e0dcc9d13157521704fc99136bf32c5cb7b3d388b8bc741842bfbc0cd0665d1d7cbf2a11bbda20c98ae1c176c5bf1ac55d0ffe344c0988e3c557098d72534bf44aeed3b3000404c5d4121825cf95a49aa1304d17e38a3a897fe71f47635e36603a7a25f6cf3899c88eef273a5cc85e1824fd5455a9246a9904548434db4c8091f3f83e292e689ad53581a05c217d9ede03e9102c047a3b3bf4c632dbae5bc7bee88e7ceef68f00c0b7216be5f32755c1fd35a6304bac2144648e16d586b18f3937018ae6a82ac9ddad183d5dce646efc975a80ddc7d5c9251bee61c67cec63fdc0a492e2454764293907142eea617db7c89fa28f4de1f5e70f514a1d51fea67f26e2ed0024818d97dc2f2cd3703aa886f6e0b8d34986f66d4661d02a415da085274391cf3db1b096655ea50e866e4581976e1cc60467b0b9d1aaaf53dd99087b23124cf794e83f26f148ed386ca4ec2c55ba7933baf213b04cc4f0b3cf6f3795218de5881aa7baccf62a782a9ac5401184ad63589010ce6e32348570bd3c67bc7781f3f2c553ba625bd6da65b32ce8f47995d048b3b9ead1145ea3dfd9620cdf8ba1ad902f5e5e6cced041d4757751744060a0047a672c60920d337d979b9afc4b704e2ce5d192d4349915e24ff5306ca412279ddca6021af3e564c1b8c839a9ca1edc3b941e3c9b094687a945351ab69deeb4439e63e1d93af5b5ed46e6f62826cd3ae5bf20a703abdfea951aa11b92edf5581ba21c5091a32cbdc829d5c748cc06a254fd064cc5748fe38dbcb055b0a475c8310c4fecc97b135e8ce27aa0b920f8f48346e5abf6df2634cb677a3a4e0ec9160d3ba09929d5ac4cf49a5a881321b0542766f58e76cfc421e7ddb1bb3568aabe6616017c1690300ddce2f855e91e9b96f8659175e0ee54ac131e1c1dbf8a606eaae3cfb368404ad11dc97ff04c538143ae99fb6206bdeed27236d3ba32633b2469a0586c95dcd7776f72d05f39e77a80e7a167c06e0306b6c72681ec601563fd6526e663420e0118fedd657135c5289dcbc4f53833439adb04ad66768925761e6fedc99842e2a81f511e4d26f33990878676d282f1a572cfa9e1d477db7f62da417935e37cae24155571773152f5343576ded85cec54eeef55763f17b57079178c462f1d9b660019adce6c70b113aed89fd5de16fa23159ff488ca8a277c2fb303ddff603c3284d3b2d029d5398bfb903983db6e8837eea284568d3bb7202eb8b1f89ddb77d0ed38b2b57075427f973ce4f6cb4427fc96d62a06a440e6bfd7da940aefff6d5d37b6d0310e28222a50766b5a842104d26370a60316e3796c899ac7833819e6d04efc97fc1c86b62c1267e62ac0026bcc692ae54ada9fa448f3e579f77fe79849c3c95e3352f12fe73bc07a9975d19fe78e02c1dcc845c875e33d5912b174947e6193b42df70eaf6fe3a9748f88c051a26cb543a4d3073ec2cd9264ad7a78bbbeecc3310f573cc0183ea83140e4d7a84ab6ce9d97996dfd4e7a4b2295cfd3d449fa0d83818ef09b10dfbd3c61e5acc768dc61f74e455ad4aaada48efb2b51d144265c70e05a9353e8f213ec21f307c12263f50f6527d6cb1db036bf7aea67525c7f4b5bc5f5e297419613544a0046bd5ab1da0463c37936a779ae18023f8037d9fdde7003e638aacc238eced535daa2f14bc2df9219ce142f09c926139ff7a56a34a104c877ea9292cfdd01e22e298856e9ae17ffbe82a26279543b2524d01420cb03fc8585cdf78906d877039f8eae3ea8dc3696c4c5fcd72f14478497a861ef181e30fe489242f68362465f8a177830b1e9e4d89ade520dfde7b8b87efa613ae4a454a57e7e4ea161ed6eabbb6564e2869d21493439e46a6d1c1f53dda312ab50c0a3cbf90a0928d2b42cf9e498b6262a2bf6ba3649e40aa6c7d846add132d455c912846d91a73737cb1097aa1f7ac67c218cc139bfe8f51506eae842688dd56059fcad56e3115d9a49351182c66c0fc0631f588895d697c76be1da10e16a8a292dc52bf9406084ac66e8904f244e3075d5a92e48b00c9a65c664539da4329db5c659acb57befb903782504e4b42e4a9d1700b6423ca45aef85dba102cfdea206cee42c1cb9ae15ce755e1fbd611b15822f99922db7d9916fa7e3860b8b8d9c9685a754669a527e538da004c1e2bfa971121c07ca16862d12fd0fb535fa60fd485b7af4ecaf122ac580fa819ed6b3e4cf979c0960aa4ad3c3bb3d4b62cd373c6454e00ee6e2dbcc7a4874dcb6890dd964a6ef5ace9406f549b0d6e8445044cb97ee2ec03ea1dc2017ecdd7238841b5108ac8d5778799a8398aa8d8a7f0ae27e4a2ab7564fedfeaf682b12595a8ba043f12f4489494a100dd0fc4925305dfa0edac5961a0ab7576665118551f5f409dc8edca0edcf68510cb121811a96179c6c80549d286c0c43ccbd962c583eebe1f7f6d5d880f505f14298d39abaedbc4dd34f2fdee9dfb989360be87d17c4a3ba86458b39b19345a07c5ce19bb070bbf7cd985915e67e72db5306d2431a4b48a2c299c3bde6d869c6e81c739169d4789580c482a9afa76f369d17660e414414e82d3dd575eef22cca293279982282f0b990337cd00eb1bf2856d87193f112a05dfa9a19ccada1c7c285ce3b91ced1f6f8a81ff96da9bfb8d74850431d82ac3e2c195220f470ef38659d17f330ed7e565fad346929c9b2364f269f384ea7fccdc1116cf389a240512b7e6c6923351a19562f775632ee539f611bc966583717dce2b0413c91985708108750a80284c50f844c385d3a6ee8ad3399090967017aa765d7a4e19456e1ce040e4d9cfbc2e175bdc6c25f400759c92068d7061e749675417cce7e08b85e2dfd90a5ee2763435405759f1e1ba6d726bd9f35ea4ac9e5599b4ccf22f16ab5a760673308a81b9e2f2dbb49c12806f11e5eb85c41eee08ad8baed8bad9476b8a4c1066ac1ee6a7331b49f625aca7e8afbe2c6ea2af56d7e71fba3a67bd31e85b10437ee6848662ea89a3c2cf509c0850fb66853da4265ed275fbc100558b6ad2f72881cc9d1980753ecda35b5005e7a93a3165bf671e581cb7ae9894130f8fe2813574eebb1534ecf5a49f808bb51aa00635492bf10cb49eba9378a786c0756bb523c031d974dedbcdac688231316952c48f39b519bd88806bbb2c1d3d9a7e16dd89b4a508fac16ff2d7cdebd1d4a182c5cbe56642f3683a64a15a7df8d52c0154dd9a6cc457d6eda552097d31fef84614e2dc6cd6be5fab25b7e4833e5f1185f5ef6d72f10344e57c317707e20156decbeb98f8ee64c944a816ca50cf834d5251bac4a09639085148238e94adfdb6e0bda454e6213ab941eabbc0133832404fbb1a9abb5e063f734f65d8246b9006d774b194f317d54faa3ae5d2d2b849d1b8c928c759f9ff3a4fd4d239e9b709ea1dca8d602d480493ac3c2e544619cfbbac52856f05d4d4c1f95a05f5db31422955b5b8ee678fd5b53f437451e2ca1c49fedee00b3fbce9d1c947f09a213bef4e591aab9629c046d8fb2f25b524cebc4ffc33a316157b2b0ba4a9f06d35f208bb6e0111af651e7a5db9dc067888a863c606d95962bab08e8b6c3f967ba80b12207e22ff6d8af0a23489ac09ed56e9e06a35228011f81d793fa4d55e88d90a834671e282e4db66d7ac7ced28b7fa9cd7a8126602c6189d803d0fdd9a2839d306461e31da976121c7ea108e468fd5dd0ea024ab4f22d90c696c6f08c158d2f65ca7e22fc171be94dae24f96dd988f2b267527e0d40839679e79c2e92ba8c4548b15694d585d40f131ba00b5c85a43f1c7c443fc1b08cad8bbfdd374505a3310992db578c61eb6c35a7ba4b070a0e821e5116f84d6a208988a045d6cd10a08c0d419e18ec42d2526fe3cc49db75c556ecf8336003b553e585935acc533cc06e45b061cf1c688d5d5935d06aa7807593fbc89b273e383261f51d00b565d99c266a6a8e71f0cf503b775b936c2e93ae5d2e5c60074785d722518a33318deeca0741d48f4e23b7af76b09f629db1647c9693fc21304c2a551b9847680015f64da7840a08211961e6180ae9cf601fa0fb99581ec0c4079f6e0eb81c9ffc19aeb005272e61daba67444a83f89aed3810731993803ee916de2285e22473f758a8003f81454619f8e5b41592e0aa42563b0027011bb045c6423be106def7b2900cf38dc004ea6ebab19300d0348408de26fe635304280e1d3846ae12e9a66cc251a9974447c56e7494927387d1e14c4c70cf00edbae615b79c4ad4f3e56c44f1d0e536ea0b2fbb71cc3ba366bfa62428030edccb287999b83da2ef503157c1c10b44f9e1f1b20fa4b1f5d027f0118240ab5497ac26decb0f15761a9e873b9820242763a992fb40dc6c2265ac3f8dcf57eec1d587b05e6b61ffbb6490925c7d3aff5a1152021c7f68903763ae1319a852e73e7a143433f3767ae22538da54b34359136bd4230ecb781382b9a4e5c4fe92592f381330614942527c6dceb282b33b3070f0cae7a60137fca986274fa37524b4ff34245fe8c2498a96f00c3668c88a353f3d63cf1dafe4ade6586feeb96d33e8f16264be5007f8367a29f59a0031310d97aaa68d7c56ddbc0de370d9940eaec02d0764c2b317ef8832050f02690d7d84047ae67ecd5fd5e7acc79bf7f3a80863598d690ce5002c3df7466bc14ccae51828a8539ed0f39370fd577f3dbb733120e2f7042a6f66ae8b057e9262b73aa0179d73fe2dd51aabde958124965b960619c2ffd22e2680dd7b2793b73a035fd04633ac5184f5c93d4d91b1012daeaa9bce6111a189c3682a555a1046d6a77040d411d8d946cdc521e08d00f6917dd7eedbc3b761a802fab83a58f5160028ab321471df5d24d7b0e554d22c96405bce4ee5432520583b92a1e2c7e5963bdd43460b851d0cb8ea19a9a3e5dcf6084c737391f6ab21e1feca8cc0a68240b79b6bb1cb9e287de416d5b32a8fb8c1719ad37aa72c1915bd19d67e79c95c41ca611585cfc94ab9b38f95b48162fd23b02206649b90fcbdd0f8457ae8bd9bb6e102fe3c5cbddbb2198fe30e702fc1fa8eaaa1250a0bb2e49513590340bd40ebed0ddafc5f08f21fdaffde7c2d5c3adabee343c960a94e941d97cc5cadaad37708a51dd59128bf103860cfa6580dd9e05445a958a38a783e271c368862cc95c453c25dcdc228ffbbf5b215806b3f112262e92addee89a57d6b1e0580bb363598d05cb7ba906eca2098f1b42dac7b6f7b727c41e30a88adea0881e341f77c31735e51e2a4c8d1c989e6a2590d8f9db503d5de210fa7ab6512fa0ba10ef235e7b4d59ed3b58ec20389504b615012d496bb61e6dfe051b18c37d595f3eb05dd39930eb287c5afeec0ab72b53148a2e50734262902b9ff0d9640f045074a4088027eb758049b1b4ecd31bed0e478824121490126adcaf79340cb2d58c118b6bface419893631a871cef67e7f714780e1409544f2bc07f058ddef00993003629f32e9b8c7657f8a75365b37ec0a3f4cf6e06fa1f31a8930cbc0b843277a14239a541ccc90d7f54423f70a45f03e5158f702bd7960e9dde6ba6b4c6478340713ea317639f7e26aa7c592d7d060a513605d603c9ae6f388163c684854964f59615f52560ed04f8849b1ab179ba31bcf720db1430714b78c6d361307d3eab99e50630c8a1b7503fbf2f6bb95ef1df71bc67dcecb4296563c8f004697cd14732febc0d980f0a873c87d60a26b6785d59a4403903260efb71af8ec184dcbe52cb30eb6ab5443f50f270c742e3b5a7d039ac660658c5a882b22b7e45013b3a768f5407627ccebc9345397e0914944861891c15b49a11ddde76a6d0d9ae6a086f9568e9419907a86d2d994f7287f14edcb6741c3a1c526d7c8c31bd0b23da3c2c76755108685e29d1605abc229495acf80f183f64046d8aa0d0d4f7516b7431a360078eeb0e5913a3c9011b27fc8b52a757e33ed6c7d3a4795e868511b7ddb25e695135277f866ff73f3ec71d5ce6290987ed2f9b391803bb2c0f3d8742b191adc0e5a71d09932e892261e19f0bc01d0ff565fd3efd7b39d83a3543d160c3f84857844f255b3d05dcf951fa4898dd5c0dcae66b87c43dfbdc25a0372f1ae36e944a99a3fbf74782be467af5d2c302f2f9931ce4b649d05374a6f86634a47bf74ae03adb1eba511967926835c745c460e2e5747d38cbed03d0ac5a2a8bd923b63c577f139bb105e244abd41bdc6ea370801c17f45396d3183252d35ca00cc28dde7bf759a3a159b11fa545b7960c5a8310d13f2760af495d6ff0dbf5858d93fd3f2314820bb4408dd947a14881c255e05f169a45825f97678837ed1196bb962df01a26fd99e5a95a2906f928a43c44f294db90918e017724e5f8ee8141a84c5f386045c1715db25560d88303c603530f3fc8e356f50c9a90d636145e72ecee5af29bc9c008b6c02cfe8d49ea0578d2f75d47a7d45bc7dde29eb14b4298dabba618b7ebc8d1b22c98b7e20da441b3cd82e85ca8b90a9fe2d90f71d11fd8494cb4b7971223ec6883b509a2472dee40e8b20e26fa719fe8979673a4e13d7cc886d10e107e4ef8db897ee71e7eb463e711a9ecdc3de53488ab23e0fe70e56eaa650fd651e83543bb4cf6db77d37ba6955e3a91d533fa15337c8d4518e291e30d1239236b1e8ca052014d38ad0e0b495f0f4127386c3aee8ac4f143ac96e8494878433695eb0d51a1c0bfedcfcbcb4544c45eb4b385660d7303f3d8f055eac452ec8deccc0cda95d0093f12b4149f399b88d67ee8e969c9bf7feb21e8415c58e377eb4e595faa159809f14aa593c27ec402b87747c004786d95d8451ca47f35269a69d6f6cdc439d040ecce2c537a3619396da47eaeb392a78b24f538d99902e6a913bdde92321c5532b60e8303cafff42950f7253ec65d64030ee586aa046ee8c863865ee5a966a526df627bc66a440d8dbfe0a49120042cc7c64b3ba58f39091c3ce8fc1ca882ad0936d6d7ba83874f0bb196751a50715f3ec6eb4ede4d2a08dc660504827878f8ceca42c40ffcddfaeb24c880f9838ecdb032c53222ded26ca6fb7d228d68e46410d1d5e6b7b1339793e74db755f3f576240be33dff09728d4659003ff5f21142dcfb025afdf9784138b6d96d7c0a64d9a1644c5428a365f7b4a1a09f60ea1d0e810a4ed7e01ce7a1d69505cf1247988d0c471650191cd0eda3838b682e6b1d3adc5dd9f1fa4c134a4f7347d5285c3fdb2903d5e9bbe1b034d64e60b18eb914b0ddbce4b3e4df30723b218335f4b5b58f719c8ccb3da035c3931323995fe3f8d794e71a79b8b39054dd63b9949dd16fdb642dc4c6a2f9de9b17ef0c62db2b00f10c8c05c3e73548e45e4a88c199cc9cdc980d65d99acf5a6046d6ba147d38acd67b7c1a533daef45a8338719670412c2c449aca3c7c19f9a17991c028407e9e9deda0e26e178ad4e3845cf4f5cd154a001079ae82d290d03f179426f209ee72598e23c0ad750f1bf5fd1d7fad4545dac5055348e7ade6391d9b0559d3b621bd7ae404d869951ceb356665e2452056a79b08d76f2c056ace76be2da266e3f1e61f1cbab999f6d66ef01154ba86365fa61a038374c8076e39575a00de2f6258165727e38195c3b2aa9ac1727a06e77f8fc661875e676b6b6ded014e489217d28841cfdc5a8965d22727adddc9531f26cc69f6cc92a45e33dcb2cbfda623a82696455146135f52c83fdef0a8cdad36eaf7c3c84b9e3804f5cce0aab44b31b3efe5560d92ac94054f5f84c270529bbeea44ce4734b4e843339c853dcade5937f2ef8f3defb7b07faf36d09c5d67f1eb116f6ed52e1bf89e103be4535eca5532f8e91fbf4fcc1da5c3fe80019c09ab8bb829987ec7e5290aa7acd9d15793c93ab0772079e250899aae51d18854904b3acf29a7ea5e36e1049a4d065a7ec5432a4740e3737d6ba976d9383eba57897d2d983cce4aa1a5953f4bc2dc98672d9926d359e2abcd4e8c29b75a66a5b01fb3b30d8da32d74f16c1641598e0f7baca9e7c14a168bbf960eef26249f050246ab3fae727ee825a22c99ad5ec9e5a3a51cd863194a37b4d68d361dca2c182dbf173f52007d2704570f8e6a640ccf8a2033fc3c619682427f036b9decd7d138fc8ca8e44293b3bf0d5942901005b08c7459d95212f023d22cdf82153211d77dcd65d5f2b733ac7cf2879945cfdf150ea4998c6c9a8b3f196608ae8c70cc963067aea805dc73f3c3311d859e2b5df3a9eb6b3bc100823507b9770750d197ebbee2b41f561192001019bf5d4ca50ea471bdd822528590e78b58888bcaeb9df15ca163881f6a3eaadf426fe19c14645ab63868632e3da002ca1f70c827d1f15683bcd70674218cb401a5974f806e2c40e1a7da79bcaa327d4ee7282ef3d973e0ac009eb3855396c59bae37aa43db530556615e59304bc2c60226228edf02029b4e3db9dcad3132c1386d1df08f4bfef7442e1fadc99856534f09a6d23e728dbb21085c5f0f8d9f7413dc83ea416e7934350f08405c4ff4fcea7f1e5e1a0b390416cae86a3b7e73ad91b5971b73d7401def9cd9d3d7034abe6739c99a03b6ec464396055a843306441c45b46c334fbf040b6c086be260fa03d232568d9b17fe39d0a4dacd4a0eeb51c2e735419306bf1ce4a75300d24b9fb0fceb4154f1c922d2f5bd3563ab9b59ce301850e289eae12b4868a35db4661e7dfafc2ededee13d500528d9b539404dcbda376975bfe1884534b5234004900961468c20014dc6a68b3a431b3252d6f6f98f3a7ce65874780891808d007fbb277cf5b31f54ceb6a3bb8e1faa67d931e8221aa853f4378a5c11503b71419a4ac7b5896be87e7c2cf2a82492233005d4041605c468f53ea824d2452acf67c39e31a284c5729838dd0c0518e5af595df8b81f2539a9ae90e1e0573c4e8fa395d4432b5e8667ac942c43f6ebfdb463814d4bf726d4b26b60b2c326566956c9ba1032b9055cc84d9c64f08d73f53366232bbe3ae8a07c19ce0611125c1ea51ff7dedc9e7ce83ab754cd8d89711e52b4e84e4bbd2ec3db84abe2acbe24b8c566c12f84c45122db47fad3db39961945f5b35e336334882ab8495ffc24e567f4adbcc5917376268ec1e44d33e6420018c7ad8d5fbccac7a7779d952648b7abfe6f1571e1e713ed373ea74c2c67bbd061b93c17fbdce70012f95d01c0bd14af3c298674335ca238aecc55144c72412c4d8e3845b094a03728c9056a0b36c955cf2e4316220186c1c6e685907bcaf6c022ed5b52cb842b096273ef3a08040861870c82a52b0383b5f94c6a5a2e1d58aa1f10ecb1764827622c6cba2e59dec904c73368c10320b6c2443101c0bfa87ad7fe9510dd747084a9aa79a449c2eae9af9e49ccca3790b65ce14fed5458b8efe16e9df2c5a6dadde20d5128a0c513fb4764f4068dc16ca2e23b9e6400b20259ca45ee27efa130dc36d5ee773f936d7eba17443590f875c515d8415cb41608cf9c9357e2822277afa720ed2e748376a7290c4ff47a61f37551d777466d390bb734e2a7b0b35c1dfbae181c4c59b5c9d161876fec180bca7871fbc7402958ea73b4000c9f47023053e79ac83d50294409f7460eb4b8dabdbb3a41d7eeac1808c5884f8c612e5df09df0b5a780693891ce601b5fadb85e9790b890a37cd8d674f903b33f0a52db54fb35797231aacbf99225cd8269b7f86fc03d330d2def5e614cefa0291a18d08c8bb744d8acb62eaabd56aef5c5e30fab73ca742123cfdf19aab2ef85e023642be5a50c66c153414ee7d1a926c93ee089887ff8a3c7bdec1b60ead7c3321a8b77f1b367529bcdbc7ed408c30064045358645ef036ca652a589e1bc4f3b693bd0d37eaaa0728e89fb926eac112441c40a44ac1ffa2988f8f0b2804dc116119744f94393e1ec38168021057b664d53860986c7fe34a0a0e918ba83ac3c5b39719118a6357f7053a4b863c9f9a8a536e66e77b516aa3cdcb2813c57d88b61aaf0952f53f5ed185ac94bc9afd5a12a19f5ed728d482b23543637c76e0090b300237f8b727b913e3e758e0e17cdd5088d2ebc23dab23da21dd9d9e7308a77e829bde1ee7ef839be81d8191ab5ada71d8ec529b81c346bfad54df0d5114c11f29428597e9eb9ad2986ca28c9f8dc872764708e329ffe1f64810e8fea648f20190611f6a4513673994478305162193960c8f2e63749dcbaa6e8c5754a7496a55234f6cf8b34d2d2625bf27663da4832c93314ed81444e28a42ad4d61ff0a01b9f7c3f4ab3c2f54779f6e34ce198458340e6b686b3e6671427c7153547e4e42e8bc1d4dc0a73fd050774024e987a01ed2a9f226fcb96d934df8966b2684a9603784dfc50c6a7989654c7760b55a98685b582087ae2c3efcc1bdb315d52abc5c66469cd7c54e56c60bf490cbdd89796bdda40c62601d636645ab19c222220e900526bdc1b59203d8feb85fef8bb3ce1d20b39ffb34407da98a37e5db66e81b0e7bd0cdb1d007031de5f7f5c0f6a7f1136fbd392af7a80db90246512c31297f24812c9da620dee5042355eb5183075e37b016fbf291038790f15003c48f7fca297d84dbcb393215eff041b30389f4f312b76a9ecd87375b5318950eb24ff10081daf2c55ea32a84ae26db591e6ad7e7c833b1beb313e3aac5bdbbc587cab4f8c1068131868a92711bc8bf45ae62f60dc8bd6daad071d5550a7de59339ef40a2c9ea032617d169dd28a2ffcb5d07c5cb6c038f4ae72fd0f789d8761b445725f3e904c23f65b5d475c77b241487adffad54d3275d55adb0e938cae344c604ca9083d6a0d6d9191d383d813eb35a496874d4d1022b164e7ed2129199cada1012057797f9bcde3247584a37509716b6652bfb235bb3ec4ec4994c5a93531200db582d9a32841805717f3d6bca10ff1bea99c23ce5bad958b961462d269c20d1444360470daebbc2a6f34a3552f3d1c4b8448822640bfcaf39691f39edd985872b59848b3140385336b70f4b57aead20f0a627ce37321af7f650bc2956d2729de7f9f3ce0178deba87a8d059033d77b79289359fb7503beb760aba431a79a080be90e8c399587fd9e15e8ab29617156e7cbcc6bb05c238f33bc8bb48b33f38b6f0fd135a82ad63f570384c9b29dda8e79e857e59217848f2412c526bcec18bbdbc4e71253695351cadaba44086f3cad23c31f252a2b32fc092c5f7226fc95559ecedd927f3e5d170828aa8677e4fd025b33af281fe358059d44915fc31e94e5735f32f7c5f283870c03f0da039b1d02e645b542c33497c5e5c699efa500b160413eefcc362760dc6c72c02776158538f5fc0f6e3b4b5bf2aa49eba5c10c8aa55a8dfd4a31ab71c8fc07375a04e6c9fbf14d86603889a136e1bb75a6df53f6fcaa364df42b7e6bd0239b0eb3c4d959ab3a2906c38fa4bba219660671444ab300bc07981ac2d5ef40d1cadef3618ea3e50f6f5f214c31e14d85f5a6b8e7ae7a2fad4df34d48f35c086e983504b16eeae0ed98f912b80f25546f1e79cde7ca1324a0984784d9b5fe078d35dd99052a5d46681d117b3ca03090b379a3b827a00efd6f0e808e7eca900d2d9ba7769082011284a241570175a70ee9f12873123587ec2c41faf9e6a72d1bdc264f1a3f7aa0ef43567aecdc49fee356e64cd13339b7c7e06e3fba8286e59f6660b0d303fee847210e5035a435d937f6a62771e5e8841aedca6b7a3f1ffcd740e9b2f034ed9b1df0d8c27043595abc1e5c1f455038d31418b19fd8038693295fee77e15271953dbaa2541406277875976c8d3d65abd835bf62d91c64223545b92638c2067c216ac953e3bf62b246b97f1334b5710aee0cc0b68939a40550deab840b10b1af702d1ca9e2732af8bdc24b0a0e76f72ac3c7c4bbed0d463573913e1a0783ea16eeac616c1618f5baecb7c8b7938741ab7c302ab1a5f2a66c0ae6fb9f0a085d7a1137e640e2dcb7256761c95a4627b9c5ade7e3ab4cbddbacbc26b55dc0ac10d030ced73dd736f1b85c0a0260bc22eafe9c4a7e830366e7082217d608d47bae8f91de77d6e9114ef141782ec595ad811d6a04d5b597e9f320b518e857aecaa903426e39483cd9bc4bf7dc639648d6d087c5e6bac56e4c1dccb0518a5e84dde34fbbd40f8b1827cd1185de1f0276cd91da88cb375cb2b792245ce2d68bc8968f49b7b83d3311266d0daf174d4eec9b841d1d6e5de6dfa7fcac4f2435a5345c5119978529438468a24bbebfe34c2db08a3cdeb949960d30bd72e5977070e775eb0678e7d78b37842fcbc90659725783665ee5b2244c0039a9344a32da5f76a4076afdc14b0a8d3f0c5a47602395f38570cf9b761e6f5242b9f4314d99a8af9913f48095e254c2d1ed1f6dbcd286599240b5cb8f6539083b6f5d812752e1bbb5b3e691afd7c91ccbfb729a85c3a4efe90025e17e7f8b962321c54473f7e4e076a8f96ba22180600234df19d69833d4a6337552b765a941158b849447e91cfe0fcc686f8058eead81a9f434be23c87ad9c68fe038dc74a48d8191091d9d729f1193c275afe2e6ce773d0f91c77167e4692eb3046fbb1698c6d749540fc3e7a85db88f7c831a5a85c6b76e389c6649e8518684704b375620ab2f7e6084c30a1853a4b3bc45b1b47c414e7cff1f7f66dc22ee555ccc5d62e42627525b970ce7ba1659f5f8f422bcb9c4eefaf4831431d924b6b3032f3b10a911dcd82a3dc0f993baa556e95dfeb6b3985fc39adea74def64fd5a7372f333d427d79cf7b483c842e8839f29ee37600f4694914e377f7264a547f59b8b4085fec7adf6d52af9320807024b3fe642ce459d6fdce4ed160d04e31999f3fba96f308eb0f013f6932f0fdb8c639c3e197dc3fcd18430e22fa498dc9cc29fe4193889e89baa92caa2664a8711b093a80504117e7f84ca1211d5de321968bfc65ecacd2be35e2a46af93d8d3b6d286d9692a0eb500cbb4e46526830e75edbd5bf18327ced75d434e42306726f219e60fa17fa09134fd1812239764ee2dcf6907f5f71516e7c0decd6bbd8c11723af50ae856860538000f1e0e79f3513283e2e301ea1ffac336d9b19aed0c9c02fbc5ebc1e82a7bc3fda18c6e4615c55e684bd072f33980ca673b189c0165aea1922f683ae6a122504852e4abca861b4762b010dbb694d99022287763630f11aefb94cde65c12a954422e1a277369a739b49d56b50cee1f7ff3ef0f82dc89ad236c8eed42a2dea39b150ec417f6a37b5aacb6f7727cbb184f18d0acbadffd4206347d555b5830543a7b6de503262a9852fbebaa0533f2fd9317b73af45c0114a7525ad2b3213941a244bbe56ac50afc1004b669371ce49101343e932dd1faaf3b5dbd7765151864c778d8c67d075d75abf48761db06c1763ca53aada16fde3625124ca33fdfe4d1677c6ada60fe48660303eabc27b09e96ecab026e145cedc5cff06c8a4736c76458a2dfa76a5cebf18650bf192bbcb29fd03b28c0b31aaff0d4f17c6621760914e3f12924f4278344f463314258eae5829e55862b07812531e937ff9c2ae25493e5ad74229ec5e1f9df5ea24eaa712a9e55fabc350666820c5b2d9a8c0bf5323bd1012355c967df6604df689d7b5887575ef4021cf732a2188b3881c3987616f80e15350091431a81a84a62c163929eb368e95d5fed4e8979a8b533d37ed097193067953434d74edd6050c5685a0cdd7f7453a6d05fb804b1d78fdd4df4cb92cfd2f7efcca3f34300fb642f9fc82e19bbbee02f27dec6a5bcefbcdfcf81bbe22cb81e4837e5d2e105058d6b0b05fedfe01eb848bba83f5a9e1fe0e87815028226fb1b5e9c1c2343987b73c0661d9ed563e9997b71fcc37b3d75397c22c5824e3c8d692c5204daef6b9108391dbb775d624c1c9023bfff4ee8b7ed66af0942452d58f2260b7b4a4c4628934542bcf9eb988dbb3424ab70de5438fcf3c05871436767f619d03cdd9babdef44c43285c1b967a0d152a6174df7ff3806a87acf4c604b2743386d949ee37e7d755b1ff0eec9c56470d0e11716ee1f4cdeced39ce8acc1efe1cec0f37863b81da5a6e1de4e91d3bd52bd45ccaced0fd34bdffcc709d96ecf1c928cc9da000d5fedce3d3b05c0e0eded4e33d744b78ffd88c93962371d175684c13d1ee2548e6dd0ad5f0643741605f862adefa1dca214f11ed6c428457c0a0290988a3298867bf4221b0562a8ef48c624bfe17186750c4cc3e57150d65155a16a0f829d28c21231cc7d95480e8e2b28921199de7aa74d098d51f8a695c8367fb661742c13edfd84d6454c3b9f9bc0f9e6bfdfe3785c6d19f9b674e1a47d74f8862e933fd1ce4cd117fece93cd6d8a819e6a052a5d5c4ddb986d826976f7d0732696d5cfb406bf4150986c8385464f319d8632779b5a920ee1c69388943add925ee4be586eac71ba22ffad21b0921dfc08053de8d933fb31df8eaea9f3bab3358042e2404923acc05045b698a19ed7e7db22ed0c26115be94685fa2549ca7fd8bcfd3ced46490b32e6f447feeeae12639cb6091c646beaadb05a71c9d13de20225b342f0254f3dcc2fbc6e1126698e0d935b8a8a29a13e02f2e9d9d9368d0a0a223293d23a3ba8076915600ae5d2122e882febc68e76918b7af95343e674c0a0d5df8ea33ef2e97a2f6f35273b2c97589f2527e83fd716505d3d4842e35e7e02fb319e462cf335d7d07f1c756d7d2f2486b14ad62f78d0101b71eba996ffd45d5fd4d77ce7afbb876b4d1da1232171774d4563b2401fcca294f4965f661d795980b6e9b0246970ddbc16d021acacfe1c86c00b5857e07bd6168bb6f245e708106d93f33abd52270d8d477d005cafb0d9b42e9013f03994879215fca36c4d35aff7139938fd845bebfe5b657c13f51e53dfedbe03b80211c213801c5ba8943bf36db2ad44d49e1c522c44615ee8afd9c0aa5de95b95654741cb02625155071f3faa5a563b16c01c970936c3d45a9460d142511cc06c8b4a6cbbeb3395a927a9f3156ee7ffd8628a05c3d7a19ee82dddc006ef25436bac2e0b80c7d2e7ff200c7a008c8c7ffa278e569dea779d8bb2f4d9c4b8e248e847b6da65537f02ac784988ec748d4675850c402bb81cd78776d6a874cf8c2975759e9836b246f3247a44472b94d62622bbc19838e9db5b43e05d3112c4063309cedc16512199d4b069cc05d05ea2ca0742c7852c82b08d2a1b696e041f7a2ba48bc20231cac79c3630e812293df4517ba0eb7c277b8564d39265c519ae697e0428d2e8b701ffbabdf8f7fb25ebb05abad05c87a4a863ddcd1d5fbca5ccb5f7aefc2a56f5f6fc2d23400269ddbc01c611a9877016ea31c3291bc6b1a79a47b41380021b3a345d2decf1c6f4418caf9baac31cb96f3a15944db03b2c54cec53963af2013010753b0e2e6ffeff7affaf0e1e7e6d2ee2e06eebd391b640adb0cd075614d2924fd2ab51012bdc382d7cbe2a2b1009f9849ee0c24736b4f70f5d473e8ffaf15d1303600f246139407c6e1554b8a43f1e33a1565a4061b3ee52c336535da4531fefc7b3e5a7c37ee6b00ac5b2fc85dfd361609e081ff9888e1218bd3fec259aae06c3071a6b0a92015469511bad3d42b407b9312716f55f1afef9854ce5c93af9e23e82f5dd256b4ab05687bbc77a98e0961d0a72eeaf6a0722a01efee7eb898a183a63b860535779c04f681144287c89b2728f62fa8cf4644cd2b405c3a9c43c39fd349348c54423a4f19e02bdfb49ffacc26a971bd7bfea2ef4eeb477e82562b8877931d9fe2e9d536d77a01d7dc189345e6bc27eb1b9cb447326c3271d41d870bc40e937d05a3fe45c8f78ce80cdffbc3125f06ea8585c0f843e8fdb90e6bce52d0ebab481c6cd6310a3867a02881c7658eaee996a455a2a0e77d1c6c2dc4c8b8a4e071a33c6c52a6ac41544b398e949308353cede473a7c04bfb64eedf9fb2b3792651b9d9a2471e45cfce2767f86bceb2db8ebdf0d6c5680bc983565125e3e3f02ff6b5c3f488abe2a2750712e99a5fbe1ffe0d09c98769fef6d7b14ddb2aeba95a03a8050c4b64c92b2b18490224b32825d6d8822e46f389a7d0d9648d7ead960aa31988dbeeece872cef5a1e8c6ebe8226fcb394b3b36b99bf9a35d899184bf094db5585e572e1049e03ccacee4ff00357b63253b435292d9ce82fe1e264079a4248c56dad279410243a1d89375e807689ae9e804366da308983f74fd68480bc6c78e0b0dd584979e4bb890b74bd43560c5c558028172d6ad1fcd45bee3f3618f95378159a8b3bb4aa29f119a73fa25df80788da0cf685c9db77222cf3aa62082405f0b28a2d98c7a74b14eefad645bbd7c2a657eb761e298c5c7a10c6f10508fe18681785bc6aaca318adc65145ceb90ad1e4d77cef0b044024c0c487a90ff61a98b3e787592667632ff57043455908ad81b5385b1ede2a2c71e28d0e407b07ba91ee8b809281865ddf460469da0b20af89997e81d90957ef2ba0ca8397e1dbe74094320dafe231da1578ee7ac2b7efa9128ee917ee423eb4ade6d02d5fad77a85095e2aa016f1bcef11b934691d6de7d4ddf4683a71ea83977e198dd67ec092d34129ea1f79055c815fb142a7c766aec1e524657bda998566f5c886d33fc157a68b71abfef3f136add71f83b4934ca8e0bf29468f2edaa966528d7afd0f207f7020f5d9a8f1ac5270b18779423e01e1a39b92c856339d646e90770862e6349031aed506fb5a85fb1a1f5cfa74328be2a10018c7c9d6a291ce397049eac1436f593ce1050f671398a1574f6ef04291c9cd4c2b23f6c0737244771bc5b772ecf8d7e45058567383b8b9c3c839e582180cb986bd0ccffbd59356c6df2090630440c38e225a5462e24ac486e189a6f0d7f3f10609ac20322fedcbb3f81f76d091d2dae73b08f0a1f3ee4cb28cf1a369bdf4b7ba8e88193ff5e8ca69302cb095f86a40869ac2ed0f2997de23b4bee53fcef9c6f4fe976bb7274ab637f115dee0ca2af83f62a830e797aedc6376a72214f98f5330785e49a92b422d03a6429d7a3712b34d1fc42c12b5816c712635f6d454d77d25ecd2f42c16b9b1163bab5ac534b540b0844ad3564473817b0a0e39bf86f9daa1254d7b6cb0dc629e3abfce2327a0a4db0e6b175375e89e8ebed9ac73700ff9fa7b48d3270894b8532cf70a95558afce5eb1929d87862d8123197139f6a32c62b2faa2408f81da7409d8285e0136ad396fc9a1ef48e95a1c95082bc6925ecdab58bd6942657bf86f168475e6d5693bc3fd3ae6a8297c5733e58e91c32a76ae57ac12141d30880b2976d2bf509b443dafb790b6cf7e7deb3b1d573c0f510e329740ab086cb8207374b04c73269a5f678374b1536e58bca45c50c8642182d0beed7830a7ab224c17308954024a8cfae2faf95a086ac46142c823a2203da7a5d0995d9f92f478611f2049a8cfd45d590dce7f9fd6ca61d7efd87a944ea22cc3387a109bc8af11768229c6f3486baf373fb0e383c937c03bf303b59c49e15b126c72f8baf55c654a07664ec319035f0cd056689880c3b88c41aaa3a90255b0ad120d3c2ebd174f90888192e6e4f01c4939b4ff3525592a63abb72d5a272beb901db4239063c4e23d7611119c3bb2378fe08f3a248c0d146302b9e06e4ffba846ce5a931a8e7392ce07588399efa87192af53e681d65ebe83d01b06f294e6e4ca602ac02f1ba294518df08795d7b37cb2db4be399e799c41979531d6d9d939243685ae5d5807fb985d2c586620f2add8af9fcc8102c5e58411a3ef9b002e7a6f3f980d5dd417866d15e6e1fb3892e65deb65ffac403ada505204ea90f2b390665ef2ae6b8ab4d560321d85fb5742a3e49df58c0a7b3016096f8415db0d80883498e37d1cc5f5d47f4cc15c53e99d60d83a5e8ec2906bdfafbdc75e2cba36f378aa0fbadb0e7a7eac9b62a681be07789040e346559cc702fbef6fb9b3655feff090c36a750bd7f729b8a0987d3b1a56eff46cfc2635f264b2fe28954acca262553c94fbf93ff176190375b9494032e60b9b472263a1fcb325a3695a5fd9ae933a59e471abcc8d65f9734d2318bf91d9a987c43e3d31dbbf4db1385e8d1de67ad9c03a6b4adbf0c8aa15e5d911d85fef2737c29995e935ae104bbb1c53c10113c633d6848de5357761336af2a521db9c9bca8de1e8bafe6b906d63cfcd41e03b78015ca7e5def108f631a09663559e919c748539498a1b5d50a7fc88a5a756b0fddcfb665020dfca61790df75cc28ce166be3b8e4c67f15fe9782e55c41628c186c163c8314f3c5a3ee1126edd3f2d3025318e55388bcca3950d2d03349f8de630b035b720f576115fab8a4e0e5053b96ebc3b5b623f79d6391ada52b529f9e68009c3785b6edb3e1d6b3fb125d78665991802363dabaac08b9fbfe4ab3150cebb7b236542aa75fe69c6dbe90ecc0fad2a3160a75e4630618ac937afa563d4b2d894ea3d37e021c71237e18af6742c4b6956ebe08a64d27fba9865bbd85cbd31695179fb3b29652bb5dc73194f387df3e8bb35d8669eb739209d0345825399c759786e526aa28079802c888175253e028b356aa5c192bdc4b7cb9a5f0998865773c3f4cb4c845b19525ba7d95902abe2f397e94e0b1070c0ee4bf8e26aa6ce364e7c247b6963dc7c1879d12bd54bfcf67c0a7e755ff702afd94516e8b6dc97f8f5fd03c315558bb0726816438f6b245c889b2478ea64ce59410d390a795428c31c2248d6703ed315e6e3d016b2fe2e4f225c974ad12209ae1902ac83f24a50aaac048ab34abebc665c05f018a8b82534076971caccd30b5c028420c224befbc9b1fe1285fa907811b552bbed540c81bcf157f17bc1942d81e52bc8ebcb0e33be627dd839fece69279ac532577bbaa593e060ec404a4ef81041b8734eb7e4f99bf79345bb1ab1a93514ddce2d7d13a64e6c84271564a674ec3e1dd611a32ff3fec014f42ef800228c4bf9e3cbeb15a92a2903bcebc5e16fc01255226068d07b13f50885ab40e718447d006e4ea826614089e5c2fe14c07d0a8a4506af75af5c37e01c4ab72eb2663713822605a546baf0430f0b58d6c01c4b3e45876b8704a208ad0617b46c3dc53b8ec81a2d09f1f0607c2227ffcaf9cbd8e9f6b27057bcd1ba3fd8e4029dc596e873876c2680c06878781edaedc2957ecaf02e04ee8c72b8f34a8a6459909c681d6b5e472ab879d1aed0fb8bb8ffbac5c5ab2ec94deedfbfc0aba05eddb0c0b10b5111e4905857187c2c3a91cc9c438cf9402a50e6e035fcefc64678d8770c21ab4e65dfbf5e9b6a71a1fe66a4b128a06fcaab97a85956205f8a113e371578695412bb5b030be3f0bcbfe0839ffa2067d9160faf55a931099e5fe8b33a495511cae0ed6d1a27e30451f2e0838678d82a10410389d15e7b8fb5ece35904c77626936c082e26490b1114e1e283a49a1757b8eb3a4be35959f5fe5cb2a6a216dc3e9eb90ec9f154b78ac8653036a08cd7051a786c8aefb9ef1237a97d7d2c0b80f8ed9a95c652a5e710bfcfab5474f9800ce8d23f99b20bddeb34acd0663d7a31812e4f5cde92aa3aa4700625641cd8a760e91c01dac78d21ca0604c7c12e1a59e6eeba605af61041efd71dc00eb46c6e7ac0417e03320cb4bc78798299a1432adbf0692c401271008f2d701fd4e21dac7fea8041dd3a101c486cee1989155fd600055078e489a5ec1a4c430ed7026b6183735768e2f1c55ad1650614ecf7545234f06a85ecd98e10c1ee5e9a0cb32eb5c3b4355493871e8b32a4ed32b2cfdc713d44d343eb293a9fc1c8d5d1e45538e5d55ebf8d6951ddd328ee14ef47e36f885b58bf9ecbf77c01a16b66b0572f43c34c70420cfaba4cb02b7565b85c0ac956ae22f8c2f6321c21f3fb870c3e3faf7e4ef462c57c121aa1ceb30fa32454e83a4369a3d9e5aae1c0ae05771b10e8a057e68555a18acab2a81e206389ed20a1a54f0b6b404dd097c888f10c7efb06d614aca4e44b2cc1e0fd458bbfb73441719e840b93c7cebdb5b09c25c36826c99b5834b59fb2c0e75f515b31a5e4f39bb1211db88f6f951e9ada3af0c417cd8130274f9da93b64d92b7fd6d6e72eb30ca4932c5df037166fd9409aba5621e7b7d8c94307d6ae7351dbd6ac92277db9f0704d82abe9b8209772db47b07b67638699b3a65f9f85230cd49e0dc7bef719fdeaa895238e7f7fcf1035532deb2999d78e4ddf87a0114bcbd238c2329f4a0ee8550cd7ba7a2354bbbd412ad184f0416c620e80e7825b27fbe6447400fde80798a8f33078831a829c85f46df4942838d94b5347f48722903afba41d1b6f28e344b9e81851d936f90a2b1af746bdc3eef8822a19d77d9d57d1f8af439e618e7e793866e30794aed9201d14494bd42b31a848d0a2c06c0c10a50b0d97fefb005594b5a038da0e0e235a6cd7892987d092abe7e2f637f02d4c271ccc14a66c483aaef85de1e82c208c07dc4835e83a82a65f68795a8f1f18e5dfd04896268329c289547c8bd1ba65964a5a98099da154974760d9cb1ab10ec6f6720237e23c130e3d942831d79c07910614b8321f9778783ffd8b672b558efffe58cbdaf1c57e6d97bb9da75df3b03ff95a42a0f92fef8db3fea977f0f5f448a59faad31db9825fed1e648d02ab419afa9858873719f5f21dc4e9dbffdf1fe6486de8b8baacf6c4a72a8a4b20d06f9351c78b233cb6328a956f8ba2316c91e3ea14edcf20481be762e2cec9baabdc2e17a85ccf9b37a57d6e99f720466fe89074c364eb29a4f8235773aebca85d85ebacb87ee8638b66afd0ca3f0235f116b10cd80048f4ef41ce92ec996ad2f50a06d042b53b54a988d4706b5af13700e32ec2d278c07b0bfe6751ae497a82cb8aa355f5bac645741fe79733945139b9ea015b684a45d5be56b896dff6c1312242403e5034a3e95a74fbd79642ed3b6eae95d11ee7fa7d48050dca27936a39e81577c82de25661c6871282d20e23797e56aa562e29ed99225e59a12b74018d52fb64d3fa8220686f7dbac54abbedf422c3be20ce02e9ecf14adb5b2fd83312ca935fcd54c456d1272ac1b25522c60c8b3162a7df1c050c829a12b03e00175001b64071d60872b20c7ed0e1cfe54e32e70dc889c2877ca2303f84220c06aaa5c9906bb21abf28c0edb1056021e90acaaa66821e318518c2162398b0f1bf03ec7408b37185cabc83f8f9c5562c14b518d3035d88f07b164f2ee6e3843d852f9dddec5cb1718dbb8fa728a953ccf6f2e6f97157dd4f64a9aac4b0f850e2db3fa678e14a08fab407e9c55e50fc18b56ebc2a82c9e2ffaf2400bd0a1a5be8bb57521f0aafe6c69631577245d8d05be1328214b7f72353e88266d73597381dbd67f469df4ef05ab246b49620b1e75bd68410d7c9ad34ef6960a8f2aa13424234e50a73e931ca9c4476909edf8b575ef2d1f4e8fd9c3be21282e5ee92e3df893bb3bd514fcc4b58030c390c7538b92122721d0307a20eb1df2386b82821495fe6305a3bb90e987b2c414432277c849bbb5c3f6c9811925726d9eac8bee705c5a879b4314a0de404d1fd68915fc5644b2561f4d57aa7b839e4996eef11c161132ed91143db70ddfa4f4069cdb5021d2e3bc56957f4c5181c2818df55f8f57f24c66f1e24b06d631caea6decd89cd47b856ef602fdeba9e0e3380819252cf9796d5227007fa16f6a162f6ab810fb5559b3aff9943c84063d2f89960cd5f85b4c644b9e075c2b39f3e7d3ff5c55380fe06000905a2835d5d40dfbefb01adf003b83d13a1a315cedffc69b8f07f9b6228a822821f6a0b56a349a8cb8886ebf89e3af375cd9f63fec7a673ee8b70fdb3bb458fce7d161f2ca683c71cf1b91a8219c86daee44d4449cc2f202e077f42a022dbcf85c9f80b6b6d73da1f7eca9623ab27e8ef598a3c50ec82d16982245f5f00cfb09958647f3e8fcd42f34b982c9bfe706a8c747361a4238fc3ffa37ab06c4db8132e8c9081ae92652ac3e634408f9b45f89bab3c979dedeb0d71cb5b40f720387f1af54a4ce4544571f3afc0cdeecd48695c5ff53d87c987c4be834ea54aef7ebeb93e1516996201b2315aad9675e1da7ef1ebed0eee76079eb06ed96a1cf6c1e5a4e5d3ca15b13bcae5a8ca783528792253bc1c1b3eb334eff2c6d09b56b37b38cf5cd8a6cf56a6ce51e82e4575739374d2739e2903b47a394e94314f7eedd86c69669d7e8b153986eea8f4111e59c1562d0e327ab779eec0afecde9e464b23dcd26cf328538e6a307c72d707cb37a95ca954bcea72ad3fcd8a90cd78795e95772fd8ae8393f12bd15793723cac487bda212615ed69e9a1168394df1701178a0a10a86e86f1027e459cf983581ac372f5685a8431ea21abfb1f54ac5d65328320ab483ef63c363335b58b1e4372798dd1492b18e6e3947c4779b65604871cfbb988b945092bbb60252d95f98be0a6d9cc4db4e12bcfb9f171a2247ea39ee79a4113338de262e57cbe84f6c5bddb0009243341c3ed42a41e75c313deff9a771b9706d16a3ce144d7ba7d29c14a41e9751c1b8d32831ca7906e946415bd14d9034ce048eac15723460fa15ac595acb10446b39a8cb61c0eeb1c83625356834aa913ec464236545bed50fe741c5f09477ef4ead653dd53450434bc8fa3c4c4e8ac98944e2fd1663791278dc1309db3d2eb0e18efb6c95474e9c4ebca8eeedb7a291893f94f0c9f1b49542cd7a1a24a586469a00e2f6bb73c628f13b5701acef67fb08cd718c124e40c6691d212eb42651daf478e658293a7b1e1e167b1117b6e0b2466a04fe316789208dc8fdd797e31a6f83b3b86901e052490a7cc4c6374ba865eba5e5b93be270edde5ee033a2c878135cffeaa06476369d3f0e533511dadb3a9d188f26de681881322215aa3ec7ab5a27a7c0936a5985f111c9837403352bbca4d3bd165626dc5f93dc21bb7e08746eff18ddd010b4b869780305f58059da44deba541e49f024a01b8207b01027f19c20340b9b60066738a55f658e8e6506983c14e758d159673c04904d89521ccd6ece3e22c65878d7422fa2a7b8cf7af07dcf8993792b5f41d2a0fbafded67eb7bd1b4b9456dc9fcbedd06cac312cc391d61fb4b7ac18caa479c3a1e6abcd06786c35a5f288f9244bca917e46b676ad16947c874b4af5781c5bec5864f29ad1e6378fab0c57de12784260ee87a964da50c51554dcaad8f8b84594f9d75312965dfadfe586018070e940d680ad2745c62b0c84a4c70e0ec6e90610d46eecacafb4be1e4040910cfdd5973659f44019e1dfa9a763918de6af9f1e5c46b82ba34a3361c4122c0c2e5bff18003054835867c86d3815d8a596a08c59324c83a12fbe80fefde4d8cc1020cba85aee04f954ee4cdb76af22ca0cc2ec191a69aeaafeebdc9b8dbd4d996c7c197e69f2cdd4bd28d2610e84a26680156682657917cca60487ca5fcdc83ffece35518c6c13ea5633b8d3d57c70729848a7f30254d510bcbacad8970588ab126e13621909a07fd162bc14207b31221e2ba06bdcea46d38ea484d321bb197c7de79825a1a990a40a987b1589cb2632690ce8e0fada4810fe2496a0913de9406313f0e835665abea638cd5ddb653287a2d6cc223b75436e5aab86ee8f731e84718dfd13c5aeea67f75e5c9bf4d8fcc81601752068190a87d055cbdd4a0463dbdb1c2f7200e13ccce3401856cc21a1bb36b263335c05d0c0138db76c125e6784d878f4b2e9f36872ec54426d3df2a8d1a36d51b4b7543feb47449792c85b5995af6bbcd823a09d4a1a8fea42e5b5601554684ff53d255394676b5586706d40fcd22eddd2627c39078ea522af62235ab7dba86f08a047efa93b5540f0e48f5df62820d4c7a274f13849e3f94a71ac141ee9a894d5fc183abefb5a61c5d0b2271a489cc00682f05dbbffb39b70726d8c8455b8a6655f4d6124f02a2c70360e05159f051073c580fe96c1c104c03b98675fed194fa56506be86c19c458c55c5d4871311c308379da3410a46e7714a5df3fa2c3fe6f2c6222f9cebd565015b04aecb531e89c0943ecf77dfb973cf441b084b5c34a83b18f088a2eb09cf8dcc8f0552767d3f499e2ee599e9b7f3f4159b756deceaa451d687e8628d37e7f602ad3fa6595265d8067eb7b4a4ace47ebcfcd0ea083b1b0e2733cafe6421490d09250acb6f3d25610b713a198060979b345f69bf6b42ad93bc90ae4438de64c68456f2c89a751c8fb5b37063c0cb3a916a9409b2297038e0ff9d1238b54f728113c5d6a208387b0a67accaabf00aa8bea7ae4f70482183972e28aebed2f6a0c436cb8de51df77cd10b5ad638290eb310bdede1026b74cafc9a58ff7e5bd674f7aad0d3e4ee6e95240e1dda5e932a57921600ba1ebdbccd4396951ac6a85d41173e14b2bec9878f90a69963a0fd543a3aa81d9e19355fe19bd15042b69f7af74028c109153cd5caaf4a4e85aef93dc419856b6e52bb64cb06e2fe52ab71d4922129b6567c833bd1d55608c917d24f47f13af7337e042976c7c4e24a49ae45eab46f3d146a563cc54e22ffa2eadc270f0a71fd17eb02cb57a05199781c55702c3590d4b33f19bbb2b72ea3272cc6f19a3485660e6c499df54088ed886dee972538ef154954d8f3269feb5b3f2a0a116143c1fda0c3da80a3fd9321c922e17a1fbe9747afa35f2e95179083458ed179c2a76f003d9aef6537ddfc2f77a31c595cf2779314968382d9ea265de43a080fcf0bc10ac6c6e17621e52bb0c3f1cf9890b7f5fc455ce01de1acc7b2160dc9d2eaf0fadf79e6fb09dc32f7a8455d075b96f5948df6765ff94dbfff3b54c3e5899713731a54cf2d0b29e53e6846f28c1e033215d7bc45c7c4a8c784b4f800db69c27f37ca79047e4bea4d1ca49b84e7404aaf40073043b43188e9b78fe10d2973facb632e9fbd562b143d6623c25da7dbcb6c9427d54ae063ed60349c2560b4874dcd4d363491dbdc6383fd84e069b0ab5eedc052611fe474754e1d149e67901d3ccf0c2a9d1919b04a8885a73cff1e7523a53ecfaf17ef8892f2ab63c94348e5e5514b91e4e107a7ac23e3ec20296a9308088db36f129a6d64b2e69a9b7e874c259efde51b0c0d7e16c5a5d8c5807291e72763d01e787cfc082ee49a7fab4d540222deeaba1382b47d0c6b6a8b7b0d9d1339ccc371a8e25eedd1ca1c99348338488b5b50628f47618eeac52a8886f9283f23fcac8a33bbea7456a2010b6520d15fc6b5885fb4818640e9749fa76a4a068a184a245392b184fbc4c125edd7053f7fdf8f790b169b1da62da0f614a5b8b3cd09fb87386ebfac36e941a9758c7f10af6865e3bc5a518ea2a625c2d82d25c4e8ff6e58de3895deb57b6b3c6d8adc138782554f6e0cff2ea3482fbed251e28acb5a22778d9a2560f5c3280c713fd66f918eccb0f59cfe3edc285e2812fea72a0185ebd65add131f585c42f01ac004fd181b906fd5a7ece0ef88af5c45fbeff2f37430b061d499ae850f4b7a4e06f36d82d0b14d8a6b8178a12deb8c74d706fe15c9e8c8089999a5ad7ad9b12746a362051376e2912f540846c3c88250ad9b22e5782299c41a6abd73acf1348b9c5bc413bdceda7dd11a1610f2f05ab8d760d3d8f76e0512be448d95156882b42f156a7bc6721cf310960ec36a4fef4a0e9d5eca2e3ab70cc075890e72efd2069394e0d91829ebd543eaaac2275fa2e1173bb064ee21c607c6cbcb70f9aee45d130bdc0eb3ed0e093636f2b6e0f7e42b30e33994ba6d7fd7a398db2a264835a12f0b0473bd92425c6b000ab0de750144828eeb2a5e68613c76adcf49e562c55f2ce3d4e0c53083c39141d1a218afe8abae5a346de3f08805ac941e5d7315a2923a54e02e14a095c93ae92e48801b89d14ee413832c06bd86b3da45ba3fa808e026b6b19045ce085c07c894272a573fe5e603bc0a273ada55f00d6fc2fd526777bc04eeb42d9f104b4e99975b9fd0c34b4bb43ae2464b88fd2c0bdaf63a5715d50f501c9c38b03bfaa51163111b3e8ea482cd77996634df35378b7b59773bf5db728a84a3c89221ec01db5f588dc235d627ecfce51fcf2e16019b5642ae6c2eb7edbbe4dffb086e26a44ce2279f9c253e3c443acbdfa4119edeb3422560cb238ea9a59dac6b77bdef0d94d64902eed0220e3a1ecdc4c67f6e7031b9ecad4f6e490b2f5f4e6efddcafe19bf0d8bb35e223ba2e138c14fd2fcf3a58240f1bc4ce97634c80aeb59a8c8a44f06cb34f7931c875d85293ef4d6af54291a7055ebac3fcc065409b827e119f94c6548a2b82fbd6c543703b1f9e10fc8637a6fdf7086c5e48a4a775ea3caffbf5089bbbeaace57146036c9367970c106640c7bef4b96d46f9ab9b11da2aebbc39b726c63561cabdebb88b1aa7eebf82f6d122b5ec1e831df1864b0eec0f752215b0ca60f87efdc84a0776f478ff446516b5dfd16c7c8ab15c518170b306e3892457d06e84e7464218b06cd47c2b4d959cfee1deec7dad601fd1e71c6f2782691b97a2e0a8101d569e164490b2eb605c0e3e795f3d08d6d32d52ade30c9e02555ff1a23cff95ad611a5ae68c06f266722fbaef361b9c43d72e86e81c75ccb2a521b47f4d3b7298009eb82b60ef5ba9df59f42fae269e1213f0789d2764e5c683547dddec978600cabeae273aff0849bff5b062453bb8bbb78f1c921dfe5510fae484aa110943a32cbb0cb688ef5d4cb6ec195d07748803749e4fcc6c8e7ad9313fbffccb12b6dc36420f3a7501a9f9d6240e83c079dfa671a8fc3546a6bfa5405a8ddde3080231d0439925616f3ced5018328e72a681aa7f6504dbe902bdb05085b886c166e80a4c483424c150edff77aaed33868de2a34e5fba6f7243df9ce9279866230afa66c5c74bd4db956ef1b92e766ccbdc3a1d15d0d3c899e5b4cc3def6113bd133dd427d0d92db6e961809568ca202d368fa3da189b0692c68f37606e1b8c98ac79553e289b4196913ad3628169454b038d7bff39d1fd16c554f2d8012bc8873d7d85e4b5b6e8440e8def65705ed38c60b1cf45599520a101a1e1bcddaf92a2ff9de98c43a96dfbcc2583e42218fc8531b5edb33ec48c2b1b631b464016debf9abbaeacf6c4cbaaf51aa32c8a11e5de27f0a2c76866f07c29c2a02e2081e38d318c0ae687196990c9dbc30fac8c7939bb59e1e3e7aed26eb239a8483fbbf7f8e7942019380ab6a67ee4816739a5b11cbb149c95f1e643f0795d9fa288cfa86d9f77aa3e16ba97c4a8860132d21f5c80c4bef267ae6a929b6366492adcb1a30b08bfff2712c608c7f45ae1639afe33c732dab16a183027c4ea6023ad380d18ea39db96c0e7e94f7f41fd76e03926f7b341e9a2221aa267ff22e0f7eb12c7a25d260f64ffff47fb1858183af1760e123e935cfc5a4cd33b593f2973f0175765154b5334433f131f410a378d078e075f2ffdb0ad28eeea14819def2ffe71a2189e0672b56475222fd9058e0163a2e9d7402408a9f8e2edc744ea45a96d59d6b0bf6710d74a468f6ed490f37507a1804ed5c217adcfd174cca8c5ed6e74023a2fdc1ff82a495d4e4fb288b77b8fa2b6db770181285dab52d44fd63cd3399c88ae3830b702618ccd010f45285bd8b92f91316011a10b8c7478dd8f6e5ece08122b9de13433795b42e43fcb56a1214de15dceec592d041ffaf8f0c28acd3f9bba3c151440ba59e944c6191357b2250bd2e731cbf2d137afea59d1ac15aa06c40bf622a95116948722f54930a2ebdacab2b57fab46554c7a92f406befd8a021a58afa9335bd603275b15dff8c80aa85459a9ee023412bf217daf1da50d952c9a9af9076581967cfbc456daa1038288ce2eed647625b4174864b63eb26b4c1b202d5e0fe72b6bb43aa510dc84389195771e297fbce49ba0e717f84346857ae5b851ecb486ef9757ef19ece30966d4300873ef041d8cc3a89b308a4d9796ced3abbbec098cab117904da3cfea8b3e19b91befa5f987e373684f6e6fca40ecb5aee129e089184768286ea8eb59afa1f36122fb52c244a2f5866875c6fa107e959ffeff93646a76eebe9647dc0402130e3a0d9bce3eba9ffebaac7e10e6d2d6ebcd3751523896a8b1c7d053299bf3240546a91b7032a4495de7cede397c6f7e949ba0eb39562625fa4709f0f1752ae13cd204ab9ec269d204846929dd35ba5f37be3485e251406eaa55f57145a84328dfd6662b792a77ead3d90537881aba520b002b5e80b16ce1826161e8f696141e0b4a8ce7ae687215e2d61bb25b0643db7871355a53c89f41fb7bc0d1ad85437406e25592f9fb1585c5fe28225b7ee1d5c788dcc7e8c77b70c7020648dd6d34d13fc086ebd3743d6e23736b7fc7caeaf28d387878e62fa1acb81f2e5601898be4f6c5bd5084e602a5750750ab02823bb4b9fc5b5039940ec7c005915784d0ba131398bc4b53c664746444f8da4a210f57e5eb00f3a748086e8c12a7b74644041a5e2f74ef71ac841ecd9869297816b5d13df0dd0888e8f222fcee6cb5626a63b4b1da0f3db5a4003b1ea784f76b5cdd84b39bdb363054ea56b0e83279ffd9ff95a18430a40a799d801bfbd9713379b20b2e451293b638394dbc3f910f55cb325f6af2680c9313e3dd5c96d44ff953d661f195c11176eeef43ff9d32f1bf0dba77f7cff3ef38aa3dfb63d8ef18bcdaf1affff3e550d32b4711a61eef228d582aaf840463236d374a3d463e3e45b96437a6ccab21173857d70e3c1e778ed0c8c830450518b80a171558abe304471f074b861dd3bd4ff64d3543351176c1a6ffc0444a1ddb8cc7c5e9c3acee739e4bad6cc0fbd0f31436b13885c4d372bb4a9599c30d063388654fbb4e148dd94b836961efb0a6487db62474e83cd8c1b66d0d8defd9091e57ba44231229662d6035d784805baecaf4375d5aeeef81181781d6ec71c7a35ef62582cddc630bed29ba46065440cc5fa767e972c401e12046285460e5689651124cbb493302a40524498047a9e8565930f51c05ca69061deb999898e186616b020d12c3bec0baa6ee20a438a942dfa5fd07cb6fa81db98c3de42c6a3aceb17959e4529aa4b1798acb87a300368e798f3d6060de388ddfa17b9ef76ca2f785010c182c54d5e8763db8aade83beec8556b981bee9242055075952d096c18a3ebe31080074425899be5b62792488666f8ea26ff4bac8a104febb5fd90d641630be5f2c5a0b8b014c8e034b48d056d102ebe070596fe31a41196d6b9341f25051e3ba06f6ad0826478ed191a7b80a6f1f16c062c54c4abbd634e340d852f285c1a8ad376468d24ae1fe84ed90e29bebcc1655241562fb20e96fc483323e80d2fbd1664fe84944aee833c99212251a84da428b6a15d2fabd10a81c1b109babd9b226d24822f2ad81b48e05dc6b27b1b519f75b8eb8775d7f8d607e5ac9a04079fa755b1c2567447113d4bd0417f12c17cdeaa659842ece5f7d33946af38e2e7aabdc6a9c906d7d9dc020a72dcf05b0b01a88fcf8ded4655de0e3c1edf9ea20df722d65837d2a050452988fa29250b80a1e254f87fc1c53e0f79244ecc35a653f8566616f8ff292042e28e41fe2dc35846e1ba2f9d29974fa7313a2d87f96bae1b5cacd085b4d0f4d9482728fc13c4508ae456e03dd78b7d7c4f63dfa70f7510045e64dc47512f70b3296c5e584f683fb235698efa7fd952d00e3f88012ac7fdcd3f5ca666af3f14c7929f282333d1e7f83b844e5ce423509c638fed573e1e88dcb4750e0d6a8347503707355dac9158a20dd2dca9ef1aaf5bb49033ee91f912f745bb252f104a8232d0c7aaf0fafeba50acbe13f95d0dbc12c6724d0105e56bb4bf3a1b61a3ef57c7f917424b19f7ff333ebf5b21c2d8eb877247f20f0d0e4a8789a5c4af14f8bda4967f1b1f5ffef0b3e50fdbf0d115068134ed23ef55a92c783c8e80e1535a764ac8e29d77a191a5488ee07e10769ad0aaee4ccef1c8ff2d5aa091691566413d3792a0acd79873bfc28faba70a6fb5921a56e35b5da20d25810cf6de8ca42a81ab82a9996a94df10a0c3b962e253b79af22e49ca4925e6b0b360c0d994180c915a6989c8233638ff6abcb67314236fb69fa2914739686057e14ac04609dfaef4deee39ae58db251b7cec2fb3191b9107b2d6857205eac9ba2e8ea9cbebb87be2fc04e89fa86a26c6d7b48bba4ae7e4c38c953ed534baed466eaa87f68707f0f7e2e324f8699a04419bf555dca647179a1f206b138fa8852bfa1166bd73e503a515f4425e725b8d91f3df56313ce7131a98d652ace96c4f5d085ccee1855caace597b3d34a51f952b12f8b0e846e6c5dfed5ee31d0337634cc720e18a7643edbacab1a58bdee2e4913e3805f6d78ba324fc37e6f727b97dc75ebc811a6ff28fd996bcd4bbe1a09129a5cac20fc96fcbc73cd1b547e9437f34f43479195fdd6806b4bf24026a408c47289afc794dd3cd958cb791cefdcce2ebc96e66f4bb0f26bde4b0233dcfd5ca62b45cc6a07a83ad8430bd46d3f26d86d7495593b7096ec08297b89f5429894b29380394260e78ce8ee40a42d44af9c5dd71ff9688c5ea37f1ee3c7d5e302d2f6932eba6a2120aef21737d12a033268025b476e895d0987a14c3f5d3e78a7077938a10936bae99b271219ff746180900e434c452618b7119dfce91c4279394993cb7d92bb97f04da0f8ecdde8fdbc4d8c8669bb253ac8c973a07e483866d7b5297389c5aa17fe55d525c6be1905098dd4abf5da8325771720d32f0d67f45d6b6422f5e338a2f43fe6e21206dd30116fa0d8fa7a04c147e0df13a3f24bc29904c8310ad605d2378a6b2c79d9cffff36558a26c92bc229ec68d38fce50bd70d5ff704d3e14c1fbc71d19ee18a6e0e478ee72052cc63a4b4b856162aaf9945c48a7f74be3875a177e75590e3a23069587709f15ff16fb99234ec2dcc8b59718738207ccde27356559a36ecbd16c6ab90299ffe10acde700e7b84c21490f22fc6cc4bcf579cbdc3003e7d8da56fde33b5dfa0b0f6d6c12a4ff5c8a49a63fc6abb5638794feee791ac27a561f002eaace70482afef283195f970509a410cca9ad37b8e6af11423e55df910b8672f047345e960a2bdaf015d94d5ec79e274825a00ed1cd0165705a701edeb6ededf6035cb43b39c1189bc6d33ab95aaa1170af235c4fc43f1ebadb0183355159a6e4c17786e3e51d8234b3024829c88f9df23122924f0323a05e745c4fb1c3241537de329d93073e244d023a09dd21eb1bf19afe8e63b8c379f44628dfe6cb22165180e1533447c7621994694a25e5a4d055c61910d25707d1eac9af9dfb5a089cc7ee7f892b0e729721865eebf177fdce7449adee5aec887cc3ba1b06bcdf634cf2e5d034f7ffe2bfe08ecdb590540ca589a29c538d777358ee82eb00c63756979cc2bb228aefd22d29fa1a190b5176588f0aa243f647718fa54392189a807927f985538f50d0d8828e0b23ed0c1418ca0a39ee4a3ce277d712394c87a2a56627e52e7aae9e3289ba0f137119d2524d229fbe79584023997f8098539dd041a843fb98040617930ae6790ae50595f148340c6d789b805f93b4da0e1718dbf74ffd89cd2ae74fe827d13d062fcdce7590d632ce37266fe2283554f40703f98bfd0d57cec34c63633919a3e1478b18d96dd01258dae935747864db5b89c31d66a60ebe7e78dd12bd3144e69ec88d089196a6f13a59a5b761314e566fa9e2a15aa1475a92a7e2c73006d5d26b0fedae1fa053350794a8ec6a71bd041a966fc73d3fe5efcfd9f2f45ee4e6f6f9ae886c5ebbf17cc3ad10bfd82681c1984501f674aa7c6bd51e7e7b0f08c5eb58db6f59da5070f12fe491c0dc950f72d35e12b708621a097e5ad419a03a7dd8d5ad0cefad02c42d1ffab295808d7a16d1c0a0192eb1ed7d17e1b0e9c6432bc1913c6918330556f15edf7612c8e32a736f12ad654564ecb302a50d44649ef5a00fac2ec35278d88478a9eff6724b0ab563543e5345b96caee6dc413d654a93ebe534670b9458dcb06bf0f6c2fa0fe099c17a59b7d1de9c3a018aa23d69ce12725cb90502a1d16fafcdf8609f8cd14f123857fe63e366d4f8f0380b83b944f47c2735acf45b3a57e5629f96355c98d4127a271086ade461ce6a0619e3a3ec82714585aadbf193fc926a92af49f45087daad67a638cddbf32beb7b45d994c597247e817d6d958e52c1f69eb3a22c66232a99a63d201b6d62008f47d61bff805b4b1d276501f42a1f0a147aaf844a5eb0b9bf07180b36d4cc48165f296f8143c14eaa77061d644e1247bb4a664bf22b436d7c34db8719386fff06987f2198d8b2e29209695c078149286791ac3ccfc7cd9d99e8a5c116064b25173706833bceac52d10547d27633ca5ca8acae5e900c8437cbf9951461ebee23531c472ddc5b7c2fcd9ff44b2ad13e39dbb0637a86836cb4c3b7cab33d9bba8bf4ad2b28330923c4f23535bc4088af77dccfc4679dec53bc8086489aab4441c9b104367378ca57b214e3f5d98ca2ac58e28cccddb143793f6e948fa62ec5abc395935ee1580f0770e1a19b8744a6954d34b8320df9376eacbc87addff76bdfde53c85bc1d70f906db6efa103e54bb9dacc3fd0fcf8500b3dcdee399ce9a1c8e854273eeec9b59d9014f51063da68c502e358234b2b2f92261b1276c8510084f707c486cea114a5c5a37854fbbe2e0de8299dfd2cb594eb270bacb5507d9888abdcbf21266ea2dd1a4d0bae5695db25f3572ff3c45b7ca7ad6872b1d609bd25beeb7f654cec9a2cfb5cda96ee41e7a6b197a94c26766a07abf856e20a256a21869ccb353c6e74ddf3ee203918f2e88b97f821066abf9cffdc56995c8e263092484682005fd478c29678ab0aec40ff78c8e760dbac3792836847e744f4b0ae202e88abbab5f36072e3937ece88f53a347bcf1c1c824c927ea8e896aa48a2cfdfad922f6b8d7d0acaee6bdd6103128de6b277dda8ad3c408ec97dedfd8b8cce87001180239bb8b8898384934616d072761b09ccd2686255f90feba1b035989484ba4aaa006e61e5db3ceec95384ab36c8eab7171ad9409db878dd124e855860e1b61d20b759668d90b8b1343e05e2ea768fa15ae3f7ad3bd993660bdf831900b0250366dbc95ae60358c1c6539d8b635f55dc94e8c7bc23af777a9d3ee7afce343cbf796dc76fc05a0bef882881bcf073ab926c636d7420c6c0f28e93d3527de56e1d11b466c369e0f6e0d5f350fb1c8bc226e3e9219ecca521b0d75c5420ea26832395236ba0f122f64fb7b6a3b8350b17613479c50d76e909ab85f197a2ec6ac1a55b3360855a51d113e32279ae7a6b861affbfc4dd70dacd4d8c5ce41953377f17ee6480bb7d8db9cca101f6404b6bb42f3b637205ff8776d87762a7e7ff044727ad84bea3be6259f0f220ac7721cf2a62ba8cfbf6382d5da815ef268fabc0a2068887f027d2f882a75f5b7c826f22d45089b57b167f8f6d4fe9a8cdc9833b164529292fabe16d7f0bdf09bcebd164aad8adbbc1653229f86568379c7c4bf7d8df58d5510f9b038c30e9cfcc742f0143934ba9687a67ac5aab98ac23acec550317a8881c1041543a1250b5376c417f68dc84a33de32fed56c9b61acdec6da23b0a65d6fe60bdb5c93fc28c21fa43f8d08bf66032a4c6b5b2ef7c2a04ac3ac6d7b2b961c04b564256d23e7b0a514d49e93216c6d8cc81bb4fce68f965ed558795f2aa4ab0fd0a997310f62b7157c9cdc407a6fa1a835a3894a0af2aefc0ce2527c5e8ecbcafbb4db9d68470fc27e889262676f0a7ae8c62600e8ca2cad95a4dc0ca8c84457fc9418e4515fbf9a6d7216738041f6c54c1d8573a732dd1a001b144e00365e151bec992b48a2d6472506d995749f7ceb92327f09506c00e034962554c181009b45d5e13f61e1b3e5f090c7bd46082a1a68dfcf0f051d4bd951e725e231c223c1b13971c5e688f8ebfa07f692e5945ffd021dc843f4647ab93fa830bd0501a5b4df24a43a9255e42022d6a8cd0ac5d491e0f3f38abd134246a0ed04e0218a152daa4dc4b1d5735c09c8a6171da85dcac69f069178a330570690f9168cbea80fb633e57361998ba1367da6b7ee2a5018e5bb97c7c24fbc2fd9c63674404d0512e7faf4f3018fc145ebdae1a03a6f5c1166f927e6f265118c3b0dd3e31125e5d03f5fd613f4519f499076cbf84ddfece526f1c0895be229eb57b183cb3cf4bfc817335e820ff11911e6da0243ef5b6735aebb0735a37784bd5afc6fe2c5afc9a2cf6508319838e4bc42ab83fd5b273077f021eb9a87617b9fe9fce4518216e385d0a0b28e6536d9f79228768f4c209813f04f646b6d1fd1ba9c134c124389f747774551c46d9aad31623eb8b59f2bf32fc114ac9031e77afe499f5cf592259b43202cab6841e4b19af64a7d634702e3f0731f4c56aef9e62f972cf4fcf5f435f2c2e6ae22e14750ef4ca606f0fe384c1d17f65a6dcb915117d2c4ff494c761ef94cb4a21d8bc7af45cf6aebaa0628725362df82a27934a62e48651a6d20f944f7e8fa24561de4ee8acdb9b1a9f234d65214c7938a8d9f9b198ddc0f13cd26adada9ec3751c62676a0b745f62d7bc9f5ae56cf54f543367b654b0d2ee044737ae84e144e197b33d38b497e82de575afeb13c4510c8b2419d16fa21dbf1222443777ea0e85664191cd97a4136377ecf9e2bca2e3df22c08b20fe60b272cb949bfd47fa85c1b057e42bdec81fe36d818d925deac72763011bf7765191ffe0a6f8bb129a676c520dec645e40995ecd63f8095181fa9be06449fa48e851f0caa4766ed3989ed1808daa30045977c444f46439041ee78a1108b683ed8f5273e606aa366b70720c1dcc57200af38807814da305fc9e64e98fa8f91c754475580cc0492872e77e5e211c6bd41f2aa05bfcf57ad9e65778af31844e1a955169178e974fa14bd66efea60ae4af859d9c1dddbd7ad4e480e20cd8ac562df2e5eaef4705db4e3793e3bedb409dec816e6e31f67d80905d219b00152ee7e2429b38b0edcd2408c4e9280e388b763ba762b8dec48d3952053a37c4b86e964195e481bf76a046b50e8498db6fdf6fd94800d1a1e8847c0d90f245a82eb6f17ff4a39d00c10a939fb6978d3e6c44ab94606781334b6f784248d76f455de449725892ae06ca5919efc4fd6643301b11b09a7bc371144030427a6a5ce21155e189be1f799fcef03faa32c81e6561f6517a46966bfd615a505270ce1c99bb16ff9e525f4b3d408349ebab425eb0ef59b2b988dc3c4af860c33e0dd87e32469d3ce854b452af07f87a2415d8af80065e606653243260efad0bf4d5a9125a71bfc82c65fdff344ab4a0c96f1735bada11d654e5574ff18401ac3102775a0b220cc17dcaf57a55fce0b70071a4635e49c6267ace26fc66120aa21b53ff995c04373d924019d3cda7ab032afa1172b226102c54a45ee91549933b3c4570fa4b253025d7789823c8fb541c9e0c3622ecacd903cc1c3abb2c3e0a6aa1956cdcf8109d96dc908d8b665fdb1ea1ddb2c55206aa082f2f2b559abd4354a78e016afe5b2d6a31c14f9509268cc44dd4f47b3ffc0c9345802d705a835a763e3f42ca358c1c07f4875f26c4ade233d4a1ba96e9706e99270adc7c81eb1a6e48458abbcecc4cd53a9d8a775ae20993a4553f5ce5df7aa1f5f821235d5dee39344e93ac719cdfc5a678b5650c47308cf178040e45fa6cfe08370a9bbcbed3bf2c8532be6c87f212dceb41c4489e9af1cc3dc4bb9e144e3f5662ec2ddb3fcfa2a0e1f5c69a76a12a1040c4f68322d6e33d221855457a90f8a0a0e325e7ffd62ae71f96b7495304684efa801b15e3f8f795fc577672a194d9468742de8c133f2604cbcff2dcb55d5faa3f1ed2c89b173e528c2cf330634f70d3114e73c7bdd8a02f844058b8c1aa972c515d21150669aa0bf0c36024f1a0b63fedf38dc3e23a28d4ec2a9664b1d6e73be8f19f9544af771d000a7037321c99a4e2d0bd25d775af5b6c8ed9f07576a6ea015aaea1606f5b308ae6a92e5b0ab6a252cfa55052511c643b387dabe7edabbb5e25dba2a42b361d8acdd1a1a7d9a8a7618cba42ccd39d6f8a1875319d03d936b8555b7b85e0e16f7120a518126cfe42e7b4f4a9fe4374a8615bc2e0d7c37e14f56d34b24979bbad9677fbed04a92806f8dedad791d22d34c3b5f62a5ecf9429b3db15640cc8898033fc17701a5c51ad6af94a6580bdfc8cfcb7ba3399aa47bbec88dd74eb274651343ceb2b8f7fa509f8c36d5c2e10e86e8d2b9d2584dc1309105c061c021cc41843cf674f68ebfd3845a9cd65cb5ad532c9ea97c33c5ee691f3ac395371d5d27044cb4b43a6da27b9e1b761ec66e39413f4e0cbd79e589744671bbdb88303f3e6e615f218f1c19ddead2fa3ec610a4dbe00c504f1954e110b5f91026d49c47f524a95d08ed2fdd2ebcafecce5bc919104f0c6f17e6b221eb652562662ddd082bcac96eca4faa4bbbade1690cefc24fb7f70971894e89f384937b8cb117a69f592bed3bb00d3a2c32dccf1c9317551f536539cfbcf9aed5931acaed2ab09e3f14fd0238675f5b41de29e5c9df14b6583c9a7230a532fd93e9f02fe90a27c5a7ddf907454bdb27abedae2a6d91b13b5d9380fb8548160befb35f7f5e959b281c8287f3d6f66aa2098fd56234789bcb750ea965f9796d3a3ae6727ba84a77611824a2c9951c851f057f0a08ca3b2ec0fcfbd4eda9d44f76e9b82507039fd580492979d51e10109b4841efbb29caf2925a6b9c76dcfa3733323ac2d3d97b484b311e270f006d5aabe516fe90148aa5f7dd4a1a2928177e29f1db4d426219533f8d4b15c17de8e19be96df46e10fd7c9f94ed39b34b902103af2b94d24725479c213618f102fba2720bad22ac1c7d8d74592dd45184a13d6bd45f13a255c0187d095d1b92b9e3464d2d9b190970421a81d32d33a0e18b37b70f94370ed5610619bf704eacec95eba09cf1d850a673db29d90bb58c3bb499f28fd8ae16cbae5521c9f0e3805d78c9479b05eccc49133682ac347414149c56105f721642af1fba4147b29741cb12ab15284ee40851ee263cb435dbd37e81ba0c1eb6954bd9125239842961c58c2bd03a182e90674cf0a1f0f2185dbc612bf630c6086fe22c9bdbc0e2a0fbd14969cf51dff47d555c4be247ed2b0cc23b7aa40e3afd7c898e3255f1e2b00c346a3e90ac313a72d80a27a7433a4e760b280685d5672ab34b2db406252a123c93220d6138beebfb173fcd67cc7e953eda112e387b76ed654a5d4ece46c74dd9bb768f1cd070860248b0620b686890a60766cab736fdf6e1ca7c6dfec21cfc20eaf0abb9d7a4942ef5110f57321abe41d6841e3f3845df2b8ee9a01b87dc2f329d275b22c4defa3f6a14c04e58bdcaa17b037e5e75a10cb70c9a9a973827580641d8763d8ef92e92e0f45aa07a3ea9b2c70a5764cd382349c0e3c5e9287a6e8aa3f6865378714952d6770f90a668465c691fd4a2225ac3780481b56d5b4cdbc0e16b52dce028c15b6412b55548fefabe7e6cf44e72f27160046f9098bb59cb410f5309c96282fe98c90a97a7bc31b60108b997ca8497d0790a1c19547702871865096a8a8bd85b70b2bb2a1d8833d85738c0121697a74543ae8b3f215a162c46f10ee544c160c8f3a57960a86fe7860055d59af177b6fa475ac4c348d7e26aaf43f826d424d54951baf6d1fb84772fb92deae516b230da838ac454ab3f4fed132261c3ca9fd7da932603490e04ac68e462109b8c288c546b8cbf095e7eb5c879f738fb9a1923c025154da3616209f69f4718e5d35f88b5c7da59e8ce6f3b0a29383bfc788b613804b762105042e9ff5df8c21a40635980462ae18482c0ba2bf7b713df6c7db5422c1570a9e3d01a27c18e72f3d72828e93733fd5bc9ce9fbca29927b0f5b1caa97bc142b5ac2e838afd96a9a731244df65f127f4d118268f800accad75e2c1b2d4922fc38e4103a145c3173117925ed0c3699787aa943df2d5833bc9b1f81e4d7360b2db66f4af3b61e7d8d220eb6dfaff6768c5ab828ff8310b4a2e27b75f6ca047279b1dc095b5b9948eadae8b8fc5a8bfa5be4d7883697c5d37a8055d9f16c604ce145023b64e401eb2d23c4423d09d9ef397dab2531c9a14522a547fdfe343eb0325fca78be583db45c483f52893aab5c62a206deacba4f9a98b2b265072edbb57acd119fd633b5a95b0a7291293bd4593dfe49f9eff4a296e237144ed1e9edd81b26aeb0b239863855f487c136758a5e13b42fe05d1fae6ab9d2e59e44f5b6f2f91d8a2cc40b5b0c295e03089f324fedfc462e9c5c2709a0ef8ec8d35abba471e03519149a105bd96f387b9636993cc0c501705959352118ddf4a2db8a982f2b58c9f8452907595aefc625e71cadb425d2254ec574a936c0e4f7db6d72d57def92f2e3120078adb31775aca50c54a0cbf7030ff40b238a76da2a04114d2f0ba57fbbfebbc962d6649eabe53ef22e441876e1bcfcbd76ab489e8134909227fca57fcd3f72204974d377ea46c98a808173a4a629817315420b786a6e704e37ad8cacd26d970bca479737e735be4d95fb8c3a0b0f069c29c945bc9ba279390b1029d83173fa468b091724773056566648da96abeefc16348e507ebd7734a1b0876d473e050aa3992900b7ddb0699cb49b0977a588298d8aa7b78252466cba8f878ab187b39bd6cef90c79e2b3cb2727b338bf98575b516b43b8ebe829c7260ba828eb2188d2faea0b62fc1ed47e4f9ce75c34047205ae10a46580d78c781a0852866e1f1cb9bac71942a0efb2e30ea838e37ee896dd14136df1b3ff61220179d8977fd7371a754e39716326d5ffcd3d30ea9a383731fa229bcc93b04d197c37d3194b4c0482e9f597002b6f7c475e5d966e86ed881db3201851cb784cb3633f9decd2d878f753d64826be24a1e1820c5f863b777ffa1664bc5d4ceb9b9dd62d071d24f45b8fb38bff0f18d8b4f198a778bce866045f79b4de6233fbeea99c2b5f49eb12a927b486afe5487e547f9cfa44c8bebb37db20ba947a95c97fbc95132d194572f225bb6cb723d948bde2bdd955ef9bb2de1f622703ec8467736cb9751447d583d9b827e72583ef72415138567ec0848d4994040603fd8a7a812f48b755ef2b750f4031c392a53297c1c0d2dded7cf73111e835f28506d0b6a502d10a2d457f4e9fac9e710bb1436c916bcb4757146152690784804d67554589cad2c27917aac8b6be47ca024ca40723e4ec27079fc477427b4bd375288da4f1c0fc5b50fa20793fef17fbbbf4333dfea1770d239b66b72a42e42a5961f220ace91445dac4c03988257731a7077002105e6e84a91eede0f8becb3a9805fb1b9ebf57a52e12440b4adceb9fc009028429ba7d09a59c21eb6274fab59013cef127aa6884c40a5a7ca7c1078b13fef9457469f0fc7ab373a285906bb26df777ae08079fa8089c9f774a7e5931cbc7e6b969f9fa487f234b53a29254a0c255b1346597e5e50cfa9d111230001a3ae7e1d0d743afdc51e9e8556015c369c6cddfb5171979eb4cef35ee49f7211216d9d1dc44133f9aba7c3506c6971e3dfa62020d8f3fee843d652d149cb23b8a3f78b026f0eec1eda3eacd77ff9ff2402ddbf795b821940ca6268875f0a34f052913c4053552dd31b4db989d74058ade75f915542c40be7e331242773faf50b29a4f3e0d057ca076a03025a615934baf0d20804241a0371baf87c6bb196d7159a7cc25b6d76eb7cf1e434d02f8e6163fbaed6cbe81736250c3edda6855a1cbee4b2dfb9b79b0e2d061bd7e5f662e8a6b6abf02d8863c610ecd2d2e44915cd0cc5b15c169e54c42b345af67ea9657d3748804c8cdc767bc55d443e677b6db000ace64d80510e10efe684a34372bbd0ee6bece1f44798611c8c3cfd2d42314956d257d2030d74a40bd3be1e562b370f02f86d3a39c41b24339ef77096897fd5317deab6cfbde6d8db588ee4a7be869a0cc668d132999f16b3a6564a248c09c8a12ccf8ad3c62ea642865852aaa49f16eced3e42526fcc108247cc6db01cdbe45d8b42c0981dfc3e5dc088d2b8b4277f75b48748e65b467836a4bb1628bfb880abea08a0718c968bad6dc55da75c8c8f72f3642813b876a25ab981cffedd37f5b907cc5040c886b77128966463f82304c3e2f51408ff9795dbf442ddc47075ae1d33d77ea5fc2e47c50e13d8da2a5e984a2396cb5a8db866581404480252f6a7ba47f0a58c7cf6310bb36858ce67b305be2b72693e12c166a707df1ce81ae2f142cea1be98c56a2839f2f0dd01e7b799c23de93b002db9cb1e1692ee3c07a04ff728f540c3ce34770c5d1bd8405e476aa6699c8a97f4b7886b62a36a99548a98a61fa69af2d35dd2252dd5fe5235cf7a3cc42290530eba2ecab5e455ff4873128f1e5f91da3fce813fd02fdca5c928f3464a510c3b9d2a8af78fd5da03c4da2e0d6dc9858b132df6f70e050abc4aa247e9ad4ca20abc9c94710ee2a24704fdb2c58f2f41fca73f07247e6941527b5ac03b6109a2f79594713effa467991e0a8a1fef3c20aabaef58c59134ee07932594d31020cb0c6b22060a769a31f4b8847f40a6a3a51b601b1421c2ae0b47d4acb5a5b6c51bbdecc11d7efb93a32e5fd03b6ce9f14a8eda595e012f1776272b30c6d7c6a8fd66e615f6c1c914c558705f700dd48176eeac67b27ea1c7192e1024efaa1bce87f5bd5ec9dd97ba173c8284e618b6abce03fa7fb36b286007e102995b13fb59b4d7197a79dd6d534b7eab96542d219ca7c47c4497dbf260ac3f5d17b5affb356e364a3bd016f26abadfa2a10835f3215d11f03e586caf86a2eb19b1238f7d13ecfa7b5c8e115c60a0fd17c0de0c94b25d04978bd44a97a187a0689d86e4d14f344fe168af94d9683de9835afaaad77febc595e2ca4873b09ab83c2d9f01e40b8ed4806cb26718d52dbe5e64227129a334c507a6e80124966faf0b5151a8cb2f5403ab0d1cebba723bd4711f7c612219a681698a69ac4285330887c13c1186dcb18df3ccc45cdac23c31f4bed2a84d8c0e7404de41e8a8ccf12737685b2314e6f3d5a9a0a58fadcc3b6132513f25708a8854e5d7c12cba1e0c48706c7f27b038d4be64ae501c2a8c293242460bab0d914a162d9d38bc0adaad14baf623529841fc700fea3d134b2c6086dafaf04fa8531f51f2dd6230512342213fdf5c18d684545c61f9cc673a604746d0762a37aa95b6489fa7ceec1cf46f020886338071696e2c36df5975dd1771e62dd3f627ff67ac6b3a344d829ac082cef54268e756188c2aeaaea935569216beb9e1b7ba340210d4deccd64910f6237cd14b0c1585f7701d53bd403e278685501fde0d81ff177a1a5e2854574f908c95003594222005484b294450c1501746b171c201e98909f7a3a2fb150b7a3233154bb43851d41a7fe117dc14ec30b7f25660fd836c93bcdbeeb1a06a9c1526fc5cb9b08625e4da4a4a9d6ff4b431888ea34f00b683960f992bc7734d399b2f3f2e45ecbfd0f9d0e6f04458af12ae7420547953628769b37ec599c9d5d8b170db53ab6e92d26f290dba0c1c7f7c673d11a371473fbd4666b11178aee070430b05db6136c3b272440b54cd19cd4dcf04bcb9cbeb6bde3c36a85e47c8526a418eee6fa21e5d7f60bf1dd38204e2b5e2de42238b9f6197a8524907fe282d68a5005dc4acc860789d2c83b2b2dcf854abadf446fccc70e93a9a67eb5215ec03b18986307899c5db1a32121f1f0db77c962f1bcf2c9944b90d923f122705baf50250bd4c86f2be6c31dd92ee426654626fa79eeccb001dc87283c2969405fe1e1e4da6b70e46764b022cfa8f5d8ebd5ab93f8cdf0af3d6d65faece77766d7326ec3edc9b4654a60489845ac3e7513f352f5d77848bc804ab744dfa19ace891312917d6cc5a8b212bcc7da750a9359716a50984014d1248bffb410cb651ff269f419e7d56f32f4e632287de8a031e092f6b2466779968875fe39f9f0249d6509607b6539b13a652a840d783575bc7091ee0ed669f79b712538eb6979abd278a70a9bf72ea682472320f631ca9c95887223cc0cd1757fcba4dc3a932e887ba0e684ab284bd8045d786b994d82e508d4570d9681806eef662527ba590cbfed5cae857a321ea7445283d8cd6f086a790411c24f62a11f388e2489f1bcc83d571869cb3fca8f520143f3b47b467550b312997cef3079032516b56c750a31d580dc39ddde53f6a4a3fe30e41fb14c6f0c86d417dd918074f15db1eb626b1cc8829780b7d92a63499038765295224825a3c0d938a2ad9301df89bc5f188f605b1ed6d8567e314e280e1a7e2c43805cc444623f97f5bbcd2f461bbdf43fc43644ab47a84983f667aa287b089db7bb4832421d067403f3815f4b243f2f7b39b72f6acaf3200201afa132640688850ee8e7de93baf004c5812f97b56c985c293632c3d4f78c22ad30f7bac79b531eb92e7afc90ee8efaf412c8c3100f5aa407a2ae60836a3a325e723a824ea9b378e51329373fc48362c57a2d1c2b2b412ef1bc6e1281055ab300cb6f169cd6969e0a5b5931f5dfef94b7f4c164740de080bf29fbe3c9a98cd7b6689d2b83d333b8a37c69bbd7f3499b7428b9c507fc4e858c9ebe00f61653ca6ebf72babf1c2234860334784a12704bda33ec726091f6b0c10f6a90f212ca0692172e80737aa32f52991c81b9a90fdd5c11c6b76e91c387fce8d2eafe3fc849eecb00cefbf22de4b1b491f45490437286c57762918f15d866956878650d173b72ba37b4c3f7e3420abee582fe897ac0e98871ab43b1bb6794d543b31970da2715368d6672016a1ca10e477f46a3ff32801d6f4cb4e4a081a57129d770d3197841fbbc2d93218f1e47e72209ed82f4c39f781e501a1a1a442357de16cc96cd00a5cfd423d51077f1e07e4810adb8111e4be9939dc9025de9738236c26e274e520e40f65331042ca14e2afadcbe26710fff591952bea159db8bb7dd48cddecec24249a85b4822d39befccf0b3f510c12c08c6c1259b1c82a71a21cd95f999af0b544745de46a4f33069b62e246cf45b6167a7af93794c1adc98d36d07a0aef3479aaed3e585c9b9e4da6a258718a2bf007d6fca78279d6e9df9d5427699968b476a3074bef1add579300d7fc76d8bd78ba8e5fa7854fa245d65f3d257ad860e7a1f40f01a4aa8c9334e64ed247f3fb66f697d3d03c4bb12de586184eecd9ca57f7543f8c1dc1a95fbe84bcf4e28a4fad773450f8527a874fea33aa1f8c69f7440a6e75ebe6235e2440465b22d21ea9ccbf7f14656ca982a99424106710d377b97f6af2d34813a4722aca598ced0ed5fc3724a0580c16e5eb4712d0426a6294b57dcf95fedbbac775a1c20e21ff0e4f8fd83859bcaffa4e3282b2843fc641d34f0fef4fad9276e34f819448918d3d401d7a5f35301e1149de17bb1a3d0198ddff6bd7191565d0596129b14ea48a07c14ac5e420f8b5fed96f53809c0b47a552908dbd4708ac2d2c443caec8b769abbca3e459ed58945a930098131635a6a519e6d584577b86b076190bd36fb9f527bb45a4a896f0a899c22f3f1347a6c04f34c3717a6de00d6949ee1e1bae51fe38f862193029e4a638c5004b13607e15ea5e3ab9350e6f0f5bb4c3b10f18b85f7f1d101ebbfef3425aba7b50afe40aa948cdc2e14908fbc3d7faba79cf9f1937fe2a44ef61a3656078fd8964ffc9fa58c7c0dd979d416d4cd3c1d2c42beb6cd7c68c164a42b05709034bc548512ff4227088be31a34eef0095152f935b993a0fe5ae6b1a6c5da14f0e17f025eb53c68a66271b8e0d5fc35934afc144274a84b26dd58d88aa5e577b4c54a39732cf8622f2a9b147c62c487ea8255af912ee36c7efa59dec6146f460ef74394ef8bfdaa9d393430288d4537bd3fff329646a0168a1009511fe74953324b8fcaaa1d3e89939ec20f0caf06857f1216442e8af06d038cf6b5b4b5b7ed94bb56e835a9e1cd52a8a029ceed89d7e43ef32c1336d6ca16c1e2ac89af1950dc75c4460c779c5899acb15515a674de7e5027652e2ab10d97cce783716fb6b66f4655e64c8d26eda94e349abf69fe1537df356c83accaf7c94c78bcf81d0b7df7fd603d28f53f793895590e399bfa5d755a2ef40ef4732b0aa5559c3980bc327bae8476f3976c790f07e211403e07087b58d64c95eb61908d7240a24210f10c39c03fe95b0533e2915d97fe96e4814b78fe002343d4526828abb376cb46f0088ff07d86616f7e48f82e30df689ddddc503845c95545d4067f15ce0dec2e6e21d8d25789aac6eeb3d635382da9e21c7b364505974c83c2da9c176aa6fc1fd046abc738eb53338e5f2014fcc44fa08400535f945e8e01d1cdd46862d701134a09ff50d99c2ed93d982000c4e60bc1bdc412a468fc4ed4ed18e7119644e889cd06c37f18a1069c5405948fa835fb99fceac193532b4bda5d9b66628d52a00c6e5d4f57091e6dd9611da39e7a86febd6ac4b08acc56956ee60419e650e6c264f40d896da9b67e58db53f985497097ec64d75f9fdbc08d2ee0730cdfc214231c20cc1a28cf6edc207d8f9fbd171c77af686f5f06f2f600c0ac3b132d31e14dae3d687a8150300399a80e83946249b020f620e459690ce3ce14bb4ba2d982e5636f4a82af5219d2862bbb311a19d2818607844b891eeb00d5382cf1d6224d959bbd93075de55f6f3a354e633483872e1e69afad05013356c83df484c73072ecab9ba950070dd6040926faffe63c64c0e0489367a74a35e2e2f0d953516da3653fb6e78f697bdbc3d6badfe4168b11eec5aff3cd6da424bc6efcc94f0818bfff870af7fc54c4fc24294cd4192e14bee3f1e03eecf63687073d448c799111b2eb982b4ff70ac629839de369e85b4f39b15a477227b419ab9c43fc3fd9e20fe0a35298fb491e7c378cc5c8c801a86ec45b5384bf11f868fe86a562aa4a78b9043e9ee6e30fdf39ce31aae67ea051577b544dc50aef15a95cfeebec55f060cb7bd6c93a437b89f0a4c1aa2164c8eb0ad78b2b43dcd2214e1c926c919585a2d4d6b43043c800869bf4a97d00021b65a9237d4593a2e403bf34e456315f32ea90cc2c72702ca363a21fe2096fa6bb0aa7fdf7209981d1e98e3384a4a73c56a4ca0f6709a2583c185d9f78d394ec90265fb2c7a10d40dc23519f15070e6103bb7bf3ed3d889e8d0037b50c90811cff84d9f1edcb507f2755474d2ae80d9ede297e5104f18e953bf30ed8d4d532b4c6277a054a27377b61066d3bf435c348fae3bb3d65a889af1cecc5386e0d0469129d4a549a2ee57b2e6e25506fdf3a906bd6e6846248fda1f657a8d449144f3074696ca6aed19cfca85d8c8d37aa000508379f75add5710b97fad14a7a9f8c41d10bda13f073684333ec221b99c8073c118d30cc51c9415843669bd390d5b9ca6ba05c6132e7afcfb9cd64643874fef998d909c5ca41286c1f2da4ad9b4baf0f2e859a5354dba9ec2dc4965323543690efd5c2dbfb1cb87503ece3757d8e19adebfa290937892ddaf234af60110dc37d25dfd4573e5e654881c1d34eee65960140254db046eeb86d0eb2d6a4b18e30f61c13032666ed88915a42538b36009c329a2342475fe06596968d207966562788ffd7f66a9116e335c3dcd706c4891d94346956da538691819df70550077bfab46e3d748ef7ce1177cefbf5f3ea5699d05a9f5c64bc0379cf867d941b0eac951fad8bb1ed06cdd9f1dcb550bdb4e0e4a2bd221287d47068ce3636efec2a299daacab3c0c6391242f8203d9c16bed074436d7da516fe94fb97d374f39f24f313be922db540033a439e89320470dccecc769b7ceaf39d7f09324a436b9774ab247281c9ff5354ebd695b10c0b20215987e9324e6425fc8dc6d57e04dc75279815bddeb56c0501d659b7319ba72495aab65ad050de6bd3a3f18d9db049315e74c21ddb01d9407baf8c247bf748a43c71d563d899d769ac6a3b602f68e9a14b37919043f11bc03bfa63614bfe63643cc31102dc84b02d7c9b0a08d2ff291e59958ad1ec83e5d877b801347770042451e18702c63dd36e7a7652167ce53f33bac9501a4172d350d98c6015cf193ec76733f46571819655c5f36590f2f98f0de78de46f5fa036e0b1d2e2023cc051e9b0a6890e066c6fdd36108c46ad29eefdc9e2b6f5579a3700f540b8bcfce008cc9b6636dd5d390522bb0eb9ade71817238b1266d8e5d173e8559229ac3dfaddecfd8028dfbc0301cc27a7219c98d2e6248fdcf2bd43f6769057a769b093382b81b92d967a971e60cca8bd61249201465f24be8e00aca07f2fb8c463aa088c9c74f104b0fef0651a3b07867ef8dc2eac26d0e62371ba1a48e50eaa0e3c58719e46ddbe1f6d6c2594ea8d970577de7292389d1db0305bbadcadc10a9c43fed0e142dcd173706ba5026c53ffb289155658fffe81de221bd2d309035f9e5597835155105df1cf33f6c673901a8b3a98e1a365cf3bdc22219a43d2af6afc4cd25e3dc49d1e31e5a21e9be540dc7a4e4d497c5182e54531c7066060f4a26916ed7ff521b28a361ed87755a687f7bd56c4bae95853e62f2306db46b4be7bc8b943c0e42dfc224f3932d819f28b2c567c82ca124995866048572753ce78c3ccc39fd57439de36fe85e51ff5895bbc00100cd023dbff9182ed3d371444d58cb39af4817db398dc3a8075063343f1a9f19074ae6ea55efb5194b5f912c45754250355df347d32172a6eeac2af0c103daedbf91dfab319dd005be741d3ab8315bc0ec7048150203868c585695328849ee2e1841a9758f7a644afbb2a9c04b6d7f92fc005acec94c00ba2b1cfd7072c0c0cc72acacd0a4bdeb9e1d3d2bb064f7e47966897fed3f22b90171a4f9e059019cad2d584a8a0f33f7a2fe311608fa2d52de3e4b38c199716da0a3acd90cf26d759cdcf9305f6950b1eabc30e0188666ae47f17fbc1468053231d8a0b6d52c18cd2297b86f4cd36d60cd972a2aeb3bbe9f159009c358e01f3b6d200eddc0e578e2eecf8c6e219889b8ce040376a599fae9c9d4365837c7820bf66d1e231e48753ee61e1ebcd4c2664c2439b71a98cd2c01dea07a6a51cf896bf4d2a826b22b688067b5fc841e87f64dd0b8cd779589e0b08d3fb852a497922209c99d6ea3d68b0c5ca5b9cbc50a5691781ccf16227f28afec0b48aaad115bda08809347ff7dab09e67445685525b6e803152ab2dd23ccea45c6cc817b8267c663ca63b1884922fedf97e5797a37a2bd34084836af3f10a751b6720536727ecb81654260f60f6271bdcd4d01e36376dbfac78706de2b1555b1fbbe38e7105d052fd9fdc0ee1ebb6570c7e187c9fa0003e88199eea4e129f39ec4fe03d8f5e7934b9c056b16a677874e3f68af2ffdc690a4881ecbe209f82cd234d1ecf82041acecf38823ecc68f116b5c9b529fee81d83645d2500b44b6c23fa9fd2b0eda40934401c5824adf7b48a83b3a06a9bbe8aac4db9917fd9b5212f75d477d423299d1d30d42ea2183cd31745c540d9a43e6398d4c2b910b2dd4a9f2898041fc17e61f9efd86c10b57d33cf2d0b639e7866cfd0b3f574bd2e744740ad87a6ec739584fa449bf7f200d0a082936f7e06981e03f2808f6a4cb82c36a75a3a8c33c4a2a382d40db47dbf2232a6eef158fe18c9429a78b7a7a46464dfab44a88e7afc7702e32bc94b558feeadaac2b7bf5e68756809dd8e4c68c085aa05ce0b610ae7fb0bca7e0b511f7e772f6b432e491904d997919fa09ad6a82e3319dc2e3ea9bc2650410b0f04c0f16d9b078a18230c8df6ed9f2ff5b7bd47af2836e52df2f53c0e95b69b0fcc90e49043cacf83d76664c5fef49d44eb87d2b72c2af4f6b9fd7dc80e6c242251d837148290e7da13581122802578350d1021d0776c424a7cef3f308c411ff83027b5d417eebc7b55e517e4fcccaa4ccb0db8ca15adb451504ac160c27919adbfa4255dd2370612df47153f5c23e0b92fbda1bdc2c017e9193f563328168beaca180d05b477d0554cc95c7d01b7c0bfd54cc65052de96f99ed136aee313b4e06b9507bc048e82da67dfdff1023ee0f8fafc737667c7138f89814c60febf2245712f2e56107ce1953287e10926ca4126fc8a1d06ad4687a619d398d5bd7af4ff1288f3c52c003b1bc683fa7a679a22fb22e86dc875202ecfe30bc3f54a7a7f32493c967659f0af43760fb8ed182a5ddc7b15b0b1b2deb5f977542c950a6dcdf6c33d25438061c4f5c0dcd8429b04dbbac9334c1b0785c1f7c5d75eb5075ccdf27b053265cd6df6480860a1b048965b1c5d04530c7296c4f81d7d5f7829fffa8df2276c66789ffe97b75d001a75f83a002eb9c05058a8b37429fd9a0fca63b957019105066601c8562f51aa6ad7bc4f40b92a04212c1c8ae957b26cc2783f2e8a22aa35902e87974c3c96374f036c16cdf1c4792ee4c10afc7576601a22a118e8398cc9e1e69ff38e516bbe91a3b0441f1ccf3e2b309e5ccb3dad28807a110d9563fe9c2b4377fa121715aecfd905d50e30834098fae68074323d02a4d313fee26f36cab4bd1cf6f33d9322ea69935fb9f5a5add238c80c05285fc21da7be00c0c2c122d65d2d4139acff932be439ccfdb3d4fbdf1524f081c647aa47e719cf7209b278c0e39825f2b263ba7a4386fb6432f6af90b0595dbc47265bb93c5bcaca40fe0be9e01ee75256e1f5a73f898e1151e049f87c8336b942d68cbf939779d3f0af0b358cdcfc6997a1c0b027c44f770cdfad8043274ad4edb8b83f1f0b929120492024f95eb926db040b8a0f7221ced5508f35ce5fc997c2fb8221a993a7ba2a8049bfc1b8cd847d6a23f38834c77e468a5e7fe51b3d077cc84b26d39a355496ff4b7523e76a936d4ab543eabb0342818ecb52e1ea208eef1a91d3914c94d0e715f43dd252337fbe4ed641cb8dc8a2a2b36220895b4cd3f9bfe18b4cf6ec401e3431d4e4292f667975c67246dc3dc1ecf4df449bdcd55881fcf0cc77e14d18fc0f4dda99add59438ae0389e17e330231027ca77965a25f8f436f8969a4195fce788dbf60d5c5a9f76016e016e6447f88afeccd6ae1d541b3fbf9669552303b79226c724dea1f7fb0b1d643047f84e8ee6aa02c6265811d4b732a9bc44ac6d3d04575dc9d72938a51500e3a2e36cda7710b1e2dd0f76d2f617a6bf0927485e64e976fbe8c43612e8cff0ec33c522747d582a6f549ee24cfe839ba045f8442e2ed293e33f758c33b7cfcb9bcd4d796c61a49102f93af33b8d9ed2b1e2b98d7bc5e60259e19ae090f9e7e5837677a2fccdae2cd9f59100e1aefe0bd4c75dfa28384c2a4a778d91bb6ab90ba077022e14105d57c7fed64c7ebe720195833a2b5733e1a5d75ddda21033b5bafef3fa8eaebd30c771c6b55646f31b6d6c802c9faccccb985fd161f1a10c2c342fbef8b5efe05cce88e918ceff4a9d398bca7f90ddd307037c6a0d25ed880aa7c7c96edd40557cfc156c2ca40af00c5b4301bc6f6cc948eeed33bd75c7c308bc3805b96e957e0c74c774aeef3fa41d17cac5b2eb79d4926a678d2533281493128b9d7855f17a9cd93f6ba1bbd092db06e33ee13ae856760302ee83820dfc2768e2d510d2b7612b6d6d67ff56219feaeeecd7ddcd21415f8c4f0c413a64b916481db4acfab7044969ff0bda042468f63e90aabf359872cefc71c37f07f995e9f6187d1f587da7cb8e258c646eb9ee03b156d895b4133d3d8ccda2b910940883bd231456b53e6e20e3dcced0193b95729c4826944d53ff4cbdf0bd40490bfb95cdb3fc0257f197cf366c4c73557f34a67f3ddfbf493f761f9109305ae81c3daa3a04460028493494265f49984eccaf4c061766a4ecd42e1ddef612ff2765f63e41e8a0134d2366a8e34fb272c5c884c6bab13f5fbcf8811168ee5494d0d5e3fc40c60a3ff39c1e4c8801e3800f4752650ee6ef41e5bff78cb23791cdd3ec0aa60df6fb6b847d8f895a386faaaf6f8f404fcaebec2ba0337dbe35eed95e9e9d4c3fb8aa6c20fe262bd8fffc5807182e1dce75c3397cf1da7c2e034f9f2bbf737f8d1c7756f78926aee95552b269672d8ca5d463494f95aae269cb0ea8c52eac292ff20a80ab123d0156a70b2e18aa30373314541636cda910a311dee81a914a5bea0ba39a026099f87826ad43513d3de5261c16bbf411dd1b1b3071a5d6a8a9fbf1d0aa27fd135ce881f3e10a09ee4ca08dade70d494fc0b85bac6a8362a7b04039d955377946bb446bcdbf1df037d64954627a7043f5603d93b9ba9b81900b738dc5f1812f13f2329a4aea5643ec13445853229c36741a15afebb2f57303ae6032b0f6aafd3c96b3c62c6486aaf78d34a420a76e17e76e0b58627b977f377fb350d74fc6131dd166c551e54e6cbf72f75e66f4d40b1597db4045cf41cfec3dd4aaf780aa6657b9e744d8010334266f5483992e8ea7c9fb1112dbaa97b3cb6736b8a920900c3f4609055629b032a2683c5c8588fcd2bd85646bbd16ac2e0e13764d574f68d212c7eca7d27ac80772321885ad0ee850715815adc39f9201ec62ddbada336c3e635a137c3a646fb02bcb75c7b4a844184e7686b04a764a0d7af42f87b641174ed5654f93c8afc0b5f7ddf70baf3fc3de17ff837b334d04925cd5fd541d30bd1bcb8aee3c52b506a5f61fcb79e91a0ab6c87616d414ad6044b40cf0754c9fec70cf5f79b5f3655e31827c6d5cc779ae2437aac750ed1cbade5f980e8a3d25874a2fe3df5a0c3f3299c1aee98c5173e4114fcf0aecf3b5c39677663034db255042eba1f2996ffacb252fc3440e58ba27c5a315ec9f56ba48e302ecd28de8cc0d73af0f1aedc53fcbb9130968b471f5e2b9c32da0a706c728c212231ccf71fa61eb09a81b380ef388828aa78b19a645b93e76308127eeaff73325751df66d154b292672d13afcaf7bd94859f1456af90c620e30710b0d8e5d85776db5add3f54c9f7fa481591a10b1687b055fbaa1e9f130fbf3f8548f9687e9e25b42a6fe9560143610e000caaa7ce5abebfa53aedc80597fc436047debf052b96dc9ee07096824f965a466d04c5447216adf2735e27547ede018769c96f1b7df1986e2ef1ccce8962c24d6b554c4df4625f99e1873d7d9c5bc79dd92bbc76be036c4cebb0a7dbe0386138d7760c0c440803ba2ab66379cacba3d4740ef7750331f386a54d176dabd4f4fec4bfc100432b0198663b92790dd7f8fb62020f788e0b14f59f142ba026b3cf12a71c1bd3084dfebca819857a42970647c7a9efc085a51ab7c419a3ff8630e4892164db2af82cc9d02cfe160d4d1eab9143efea1af1a7590ceaaa4549d99516da913fdeae107065a0d4667e06e0bdee7af9cdf342cf3dbaf83ec97c448e2c079a54406e5bcf208a4abf283e0dc0d55ca9949820d1ab456c9f27eacf1c55969f3d8c9769a93e5e77858a6c12eced4e4b308d30bbc09a1f3e70e7bd9bf26d8611d4cb15b8ea8078695acd4255704ddbb8ff0da181caa09aba09acbe95b9a4b2e2e2765ce39e1d4b6569a730b0161738937e326e4c2314e125a21cca1a467cceb388eb993cd209dff3bed722612fef96817dc109e340b70e9dce05d88ae1e0e06b0fb4d0f66f7bc1ea03d028cf63d5dcccc6fd4ca662f2775d3366af66b8e03c51a00b8cc63c0e4b1ceeb8514c961cbe4759ec8fda4199affe1add48af01f26bec557038941b7b8e677fbb1e0824de5fa32828ad38128c219c2cf2ae054a38f575e5653e7c0678e72d7da2d29ab653f7f43f231b9a27929a68853395bf589fb20795b94b9f85309b54ae565daf469fdf02f802eb23040277ca9c8777e142d0af1b6932771e3875a8eb3c7b6dd23fd626fa58f7a01953e59ebcf821927add215688d1864059270514bbe6c08484fd5608650362be0dc14345455cb61663fa9b258000082af49534421fd1e288692c9310997b9d7477e471fa61fe98b45494cf08d97cf12ecd99dae2b04d031016e2ba6a5433dc7f003e3dbe7065c7248c1f30bcbc4ff7f4502f68a15e0fa2486222ee7a7ddc622e9b91c8c340bf0630774de75e0ec83b3cfb404f3d998b1f1d03b6a137266703d7fd8c690b1e5c319819b71f7dc98fe757063b31825f3732731423534106872ce8e60f2fd77e2e9d54f2f16885aafcf8528d620ad866d24a39935ee172b06a99a530933e8d31c1434c2b056d9e16d1b87fe1dc6535583056d9ad0d92389ff55ca30e692e4a7eeaf78c5e51c082e2e48bfc059a9a0dc96fd44e70e124c4dcd57e3502a8fd4ad2f5e2dbc079143c05026723fa4fbe0182c866abb403bd95ad8adb4737fb8607a4ec602df29fe66c2530d383eef147e60aedd9b3b505614cd82b2c70c69fc5e5218c06dd84f7aa2329c0a1bbf60a8bdc0701576d4f996ad4cb9dc992aa9f3cf8488f47194133e062e409183dedbc89d1105547a7c2e0aa1dfec81946da205396b9f1d472363b8e0a247340112da9eda97461f84cb8a2774a6500cc9fe93538ef584571b6d7aa18625f83c2394a55b343cd4f79ce89704b2482f8902633fef052906c852d0d7d12e3dfb65894db6ef4c29c10d59fda733f7533436e117607562bec8f4ee94973c201ae662a5469b99d221d388b9b340929cebd0c4e714216a2ed7e4e5a149f715ec87935949feda4ccf3edd7f09619fa200748aa6c29267122d5887fc0632b28ea3321c299f876fbf519221df9f5155f34afcbf53e40ff418df882bafa7c9a109730fe734cd27de4215c22c11fab34d80b11fd71ba8a56aa3f84515d2fc00d03a1906fbc3f92af55f3411bfa32434eaebbb89a9facfbadaadb0429a6b1c194be0fe86c427202b6402e53e16f8e60f780739d626be7fcb1fc7f6409a3032444758072d82627bd04c9c63791d9c545e2ef6656d6ef225fddff6d2b4ec8109552a585b330a54c0a69db87c1bed12370a9239e218f946637dba64ed7b48f7bf7cefbd9f2dbefb0698603c359b45345198012adff612ca6bee0756b2bfa255f1dd89977080f634a50f5c850c3528795fa93590c47645863663e3653ead4b16cdf82a91e60a0effee0df3be8c49fcab01abc3807cd5ee31558de9a2bc23862c41258d64601d32b014f10dcc0d1201ecfd11c084ff3678d67bc21f230a994426ad6f989d4d841648995d0f4b571a7e050d352373415a5af83aa28184d2dd65ebea6bd69d7307e381ba8cd076f81c03579c286b0419d07f94499cd1b5add06e08bf1fcc3a45f4d3deeb79a0a8ccf80bfd5e68cd5f918e452c14a8f793453d11356e0812b3f5f5ce5b2106bbea8c4fb1db6140e520625b006e8a2c44220afdab2ccc30b272fe196bc515b5ee7fd06cf2de4b7d2e34a45744ac1697f9ff054a0df7a1b535392a6ca39ba18b370beb3f29096a675cac99bb7a16eb70d9ba1e90d1fd6e155130f39f68a32448e2bf84f1a721c2bac3b184d7f26dd01507e1f0325394d3b1feddf2870cd419f3573776bc34073554d580845e4662fbc923818e6b292e6848f86003a2c9cf4595862b7be5e2293177771d7f3af5151be7082583bee2e5a5efd4e3f587a0b1a97a069efee3d3e3541ab30b99b9378f9588b1678b967c7488d1926bc76bcaf3134de6707fb339fabd6b0964436ad5bbef81210c662549a0606dd395800064225d1eeab641fff2173290a225d3b1c234f5a52259db7fc2eacfd7753e06defb49efb997eaaa865c35e14fa68afb26843c1352920dbb87668c6119026c09435c73834c53f0c7d02d02a29aefa65ce81c13dd9486ffb027515979dddc2a6e738fbadf5dce8e3ae35defcca08cde3e10e6f7511b1fb03326dc4cebca3939c6d90079b7871e365d7e08245805e9d1aa68516849520797319a07f22b5bcc306e9b4cc0e142336a14ee4ddc02f1b6d0446c68368059fb39c9691ef48d7211bac215fd1333bd676e7e0c8e7df9ab7147c811cb90c16a0def3a315c6aa2d268e73f776a65e9d5698286483ea4e75d03c8fa34f5eb989d12d0071557fba18452dbda1ea7ef7903dfe990025024b691773e2605f28704636c2b0b86992cc222931c7d4b78ac7811507b64685eabe00c78b1d66de5a764eda1c185dcb327b2d2c464a0d94f922e1fee933562d8cf1704bc67da142e8ee3953b5fcfd239b011b8282a869c8d6f1b43f2aa6352a0b88ca6f273abaebfd71e8c0e0339ca3d6560a85729ccc32bfee9fe92afcda548a5a5b3cacdadd4a191c0d66d8db326c923ee59cb04d2e9a3893f3f0c8e9e9fb0ed545baf6832b0479de36707f1e496182346677a85ba18d9207a5702c1e6feb84da5c65e9d03d214517c0aa59b5acae7ed79cc1a86242ee30bc4459815bdaf85c93e933241f5122a269bc130af063a80c9cd02daf786a8788b3a8fd833ada153070709e9c625b22312eecfb459392fa6c719138590c2f3e229589ad69a143dd698357fe90e6c6b6502652ba46e26b89d5fa7d856a3eeb1920a9334f69077cd0a4f3b75809ba51def0c10b929b2e974fd90aee4e58836ed1b2a90f41f52130da4a9e5d717b16fe7a4d0c87398e6720f981c0f378b9858d6ee26ff5228550b8a4fe27b4661507b7137fd0a317c52b0b0b7986a28d86529b383b8a9c1a59466b5a53b2c72b9ff3c164a969b510a809ef7be9906d1d6f5487420b80c7d2fe08470817b574653b8152d84e02485a16b7479b344859b8e21708eab4d2316529bfdfafbaee71ddbd6103bb79c6f2448f615baf2c021841a6850456def49f8c0c371f8c40a51f3baadd2bb991248028c8ca1507bafef8117cdfa2a0c5c12a6e73cd325dbd77120bae807fe23a9cefca71b879ca26785ea7bed74091e289f54ab9fde08dcc58cb866144f3465575d11c950b8dadbfb8066680388bc9ac78943670ec7b1d8828098c2facee281ea671eadf490264b1b87c7bce4dca1697455f7aeef01470eb86f74dc8e57276e5d616f17d3e3a87bce384c8cb89039453efca47e42f045d6c8d8a7ebc1d54b1a9fdc100754ff61733de7f669be60da89603d2bf7dd4dfe039720e861bcf64cb52133c7b95b1dbcd6467176379a0b0d4f93b897e76b66318d13b5fbe0b178fceea424fe8ef89468c37ddf8620eddb3a189e7bf85fefb59d05a0e244a7d58604651a74eeac020c365648fdbf81d76af98177bf99214c23d8900f212cba963bcbd2881f073fecd43baa4612c1c077c6cd54df96ac10f55288b655cbfb6a058d96506449eb50665545f7b519adbe4ba06258e8996c284d3f9bf03b455ea0bae93f85a26e0d525c4459f89582f7c7aa2ac82d1626b56f02e7d0243da837cbfb8dca012b23d8dbf694bb79f62459b9f1c3a615b5370bb75e4a0fcb2f2fa4372d4842ad6375ec6064526a6765eebac6cc53bb7f0beb212692c0f24d1a601e80064e76f5b3d38999530dc9ea40e2de6a3119b8a8fc5bf31774c164038e64d0ecb524ef4cff9f5f9f13cc728b66120081ad0ddcd94e3b8ec855c4fd7bf6091a2b97f8ca0e94659787098be10ba088e2e0e4a11624915211c989cff4da017d88447d106b2548c6428fdff1ada5e081fddbeab60b0d6a3e7d94bdff8e1d24a7ac4ac06dcaa0011524ed66533fc7d647e73c779c8f18b19a264feff10e18a2b61e942172973de7c9094048f4152b825499faae612b7743d0de95a2a99cdec6e24f3bbe57802e4544c2a1b978ac5b86b857b7063f30adbca26c908ccc4a930dc3b01685ea1d8b80faf1d3f028887261e4d09b33e8e436597ee8f610d64bbff4a8266f3352e68e4ece7aee5ced47384bdaab9fdd0b337d3f45b452a6a5d0761b9a0a4840b4cdc6006a9c306c268f3b96608889e03995fd8670bf2006bdfa3dfaea2cc4b9a87f91bf44d36ad02156d9f2057f292f92793f4319848ada6779efb96f7bb3628edc7866918d06955a8d6dec980253243ec4fba8b521ab6d25447055f103bfcff76373856312b25b84b86bf0e49917148eeb3f9e9d7d36d28378c958b7ac19f43b2c28f93a3298c4d5866a06765d9450379570ab7ef5c16fc0eead040b905d656d8b7bf9bb8b81ae47641f4b99ff684a00c304ae4d4673ff865b50dcfdd0de30719773a03993a124933a0d98636a71048bed781b70fd9df0b2fdda24d631f38e6f7bdc05628b93190df052afe9037f160714dc167e348fcac083dc4198ab4a4267d8e45d58f07b0386ac4c9174a6f813c6f1f60241e3bf7daee2a338b3e0c2e8c5639869cabafe4acde55a93ceee744dcf918bb8c58b019aa0c368f6a921b40096ae656e54c866dc25b910c270be76121d122efc0c7f505257908b7b7876109fbd4c97bd62a9b46e337d25e610bf4cc6e1f49e994fa2f71224476b25f5f7a04b5c262603671f2fcedb8d29f6931db40b6e3da7d57ef44b44acbb3e8490d44941cecde3ff92c9a54e0dc88432e4736b3eeef2b754489616b34063b032b1da7b4d035418168887bcd2d2c73bb8ca82b8f89526dd5120be399699ce61dec267e1b8f0ec2537176376b614b64003410591a0e6f225ca663387842165e0976d971442848db743a2ecf4d86f9d95ec91f1fe27b169a9b2988181d7ea7730802e19021e7c90429d9b6ca5f74d69e2283d202c8593ba437623be34e6019907b2b5b0195a4f9ea7f084a816ac6123ffb76fc021192c6b2e222132df62734e5a70148d3171b4c2e2c4f784b8413ef5dde3a1f964623be67d9a8426ad9acf98b6546ce24f1d9c50eb4532850deae8ab1a0a15cdbb83c7c74414fdb0d5fb6ff1cfaf2ecd37d6554d7e3bd604ddae35db895e2ee8da8c23b846dc1916e8412f0019fff53cb8a3a4e05749832a7222aecc5da9016708aed455b1eddda0671214c9645d7d7682687779b71513f2d72f0316b768b79f4a5712a32db9394b775f444a404c2fdc2783850e23eae343a3a6fd908f4a4713d78260ba3ed29f1536e56618a83faf5294270390cff1223650db7cca633479d00cbd08a2de4e1401a9155cff6584ee8d532a3dec0b48973e6a8d85666b1f3035055e844dda20fd6762aee88c07135dcba67e23bbf703d7f1df83332791c18fcfc1ec66ec900327931fb7fe600d0e902371d79a58d7640b5ce576b63b41e6fc0efd64204500ef21da963da7ff84ecf6ef3ddb06304a02914e8e13a755c7ee2af1d9ab293daed86eb81cf42c4739d5403a05a02ce8106f2025da7ccd220a66f0f07ac567be70ca7ae74d5bbffb4261fbeb74b015d01e7ae4c8cf0c46ab4df9403c5ce52c488bed71ddd95a5ae0b26763cece2d7bc2f466a4f1a660df264efa8e990cf06028d257385049ed0238674918886492292278671aa03c1d8649b06dfcf27695608b823336d9a3014a1d11996195849c8cef0a336cd3b8c5c61c45f2f079f592fbf414e4d326dead91e59eecc09abdf62dd5f31cda88e3c9fd29c0e3d3351932de72a70fd1139a6a523f78f13de0b8fe2298cca6d2641bec196d4623ba62e34a1b46c68005d6fe2d22c747ba5b4517221a71ae562a9083052ccc0bda2856d94e577b4e9013a832f266bb13696157aa39bf92c5a2f28cf9c7e48c178fee1ce31be24c121fac5dc640c2a894e725b70b8e960040a53784ac53fec34440c57e0d1c81be0acded444ba17781f2224b6b1daf67d50be1df052df69aaf910829f60342a8a87fd5036f3d251cbf207a307b599237d21bc6f7af784a22a0c2a7f7eef0da69bf1124225daf396678b6d04b6f003bf724e5a42f00dd265e9075687d5cc38c2283df76d7c50c0f92dfc764b224689f141d98be30ed5d28e43859641e3f166931d13eb68563b822e2a6c7d7c3396755702f582de42519e66b8553dfa5a6c63c66d1359bbb9789ccbbd86a00b99207d61277439bc3a2d5423fae86f13fc8402db7778e62b49e13a3c59610facb62a7e784f4656dd903ae4e674452aa8023a5614a1f6ee8e700f42eb5ff9ae09400bc105139cdb169c6ae2501166107d24196745cee316dc7a43e01c17672ec4d9b0e8d437c1ed19973efae202c719f50c8b8daa08b04e549114357ab8f4a441c72e6de5adc3144b59ff211cbd2388f35cd1bfea6b155b2a7fd5c11d42dd8db54ecd8ca08e505e475cf401fa579a891abe62f2d5f7cdd6702f2dcc6f4e326e510aca130445b427bc7a84ca995cc1d85e1d1cb0e7315d74a3875d78bdfd28176828d7c86f83e7084f26b4e67c64389e79d888edcb5b9e704bcb1763daecd146be032dcb5aeb2c69c701420c5eb1f3786268983379af11985e08d1fb67301af02c109782f71f37dcd99ff5e81c009423e8246eeca90640f1e9583a726f964ef1bcbfe2ad2108a4c143a26634e0d42421934c7d2dc4337fff9c8532b4171a16c39119575aae2c336236e2ee79d2e21a5195092e7d70efc4e44a308f959dc334e469f7caaf0c6fa1832baa49f3fd8385fdede0f4904f2b0f342cb43afdc46992edbc64950425665d0c81b216a6acd3d3fcde4261866538e2ef4279d347cb13c6e4341181aec77673a1946f04cfeedea4a36b5b2fa8fd050b48bf4f864c8938ede5d4abacb7d2c4fe7871d1b7f4af9f0d086b832bc647f457ec71c3e6f32b366cf89d2939768310f8299e385795ba952f493364c2321e152b8e1f00d95e9edd41537543ed37e40d30bdb8405bb3a8cfbfebdd748605ea32408ae6592164a936d3d0b259394e526b91fbcf65785037f92d423ea5cb6b598ba51bdef4f4bbc27b93e3ccbd97b2833bef8f2348424a71cb06e880658933d900ba7b839838f3c71a96924b4779a0fa61d88ffa361108c55b4f6500adbbe454cd870fc2e4e02be19aa174cf9d6acef7dbb5cd13596495f6857d26cfa7ab51ac0f232a0ad0ad556bb1aa6553e3e1be92d63d1ce2380752bf325db9a02b091febbe130a7c89e847d2713c99fc9636ce962025be6ded5c65fbc2ee2abadbaf58a870ba71b08c5502ca50686d8caf80ea42681694120bc7569e13c77b036c3bb52d7c7e90cebd3af7975973f4a0b42810bb90f409349ad01ec2ab8e7f5466f511450d2cbda461393fccdaa5c7f13023696f45dc0a1fd9edba93272e4fd03f4bfbc752e71c2f52c29865b418a38b5cbccd07eddd8838c25f2e87d195c8130ba302c50ee1aaf71f328a3484a1c6a05dae2850b6b3301dd3ec1ee0b02a271cd85c6d4d2f6b35469b2512da6885f08482640c723bf924b47885e911c49bacbacd6429a0d7f9f3349759b8433e3232b6dd2cc3e671b25a1b2d355bcc2b3654d32006a61afb43423041453648d206ad738380af0a2b658ecaae964610832950e7583f301b463f2b69307630056914c9788d01b1f30b168c33994317a0dc9a533203206462e585a3f874fdf61d9e65751d0a794ac15c622b1bd84bcd28b4814471fa636581fb72323dc58f0492e67028b4ff99f003d2da2bd8db1432a1f6901ed14a41fc07ef9be983fc9fe4a7fac3a52966b22df7c04a909d71274a82ba183e4a32fe9654c3abec75b35fe20cb9d41a861e6c9caf4f759308b0dbcd75277b1104377128be1561393bc3be9298869f6e0bd454b8b14983c4ee1197fc89e46273233b31ed17d028a9f101157ea425378406c3f85e326688b11d07accbb155c7b3cb2fbd54a66418180c7f135659b1e9a9f19ee48d5b3b0c6f438258e904c9b0cc72eb100b483c43d623f853f25e164e06c3cafc86f331fdf75b0898c30a70fd736f84b50c8eac74a2ee182af82523fb7be9b1e1e7ad49387e9cf48835a4e42da68b308d2bd38a462508b4e1aede1e39f5034d13b1bdd4902d2e3712d2321e54aa8b49159d70eb7659b4f45b85a952fe22cc816c9e17124beaf00691e4772494505d352423a3c4ce9a18d8456def05bb6787a038270118af43c95f3af7c14622f0951978eb000a92101ba49d78b903387bd9e7b80426d090c87be5fb59d06fe150afd5793f26b82bed27a4ef3d79f8f9f56c53cb7343cac580ac18ac9466d6f8492435403edc32d32a00d78d03c0413d13477a11733515777e8447c3d03b9e5850bff1a9f9a13ce56328d0af06db82913a1059a44019affffb67cf160557ffdb7042717ea3b32e89f359fec78680ad74f8a062c7fa90ab14a899f16fecd70b1afc016a4fb5d736f616898b8e53c248a96098ee2b544e9eaef2a415f644b2da89a793622c182f4021c7713999bd61e63c219d94b5d53e1da2ac0ee6adccb70afcdb2207f8bfec46e41a4e2029d57f68d7dd96b0631ec0e9fb84730c33656f7c67faf526adbeff1ace1f80f048598cbea61889f33fdcaefa6e948b9e0bc4908223d81b04e17a6615d4ad84c9bad10f786a8017bd05daa4f85d38d6dbfea0d3faeb4e09686df97a8429fc71147379670c4cd34c2d275418838061f93774f0262a6e13b63677ece58136440a18a4cf5d3b6539a2d1400cb3e16d61eaefc50aff93b7e724b6ca379de2b37ec0615407ff580023160f54a0fbb48d16105b362f25a395f66f2c434694a98a4effdbbd52f0bdd92d4c6cff915e8f310550e6da929aa9896221da525d528684a974b7a375a61e2c9d7ba408f260eaa389d1e14a0d4587648081f86887232089d0b6cf3892fbe3ea8404dfcd95fee7d77842a9c5f63b5cf5140fc1a7a5fe99637c2a6bb1e517c386fbf85ef8d3d5cade73ab0d1137e5616b94eac6190f5dfafd47f3888d3c53724be5a47b339a9076642185dc6de922a5a05defcf804041bcea81ee58c48bfed614663186e6045f94ebd79f1e3ba255682e2f7b84ce9a3040abc6ffec1e5106d7011a42e11ece6297ebf0ced5fcb64747e82ad3dcb294636a05675e93d6121002adacd96b356a0a207dd5acea83afe9a6ca7ba3aa30dbad43351d7d8be17c343f143fc9cf064363aec085a27a69b05f8aca0ced2399271d7fbc5ac5ef9d70717e3febe3867da9ea2e0156d1d88c89a00d3a34ceb6b967f1842d40168dca114aa2b7c6d1b4af47b78d039559bff4bd7e23bdac4bf902f155103bb9db0e397fa19625aeff3de691bf685c59506fa5cb3acc8eee7541277c9716ea615a1d6042ee6b29ab650edd593819df8c37af992e94a45cd2b7750cccdac64ffb06ef3f0e7ee03da8f3364837317666f3120cc970b8bf7f6a899f12669ea526171081bc33b279e421eccf23ee82095eaea6fac43bb33f08412e5af1eaac825173d444d4eeaf5f59d4c34f4eb2cd21707295933fd6efe9f81c4ec7717ab463af03bcb718d5a7a796cf83ebd958c90c709eeca4e8e831b157cf6cab0bb8432424e5b821408139098993d7c2cea6e63348b442c71d6f6d27b56e70a018cdcb34358ce3551f1c75f738de886d13458728139cfa7806a8fac8cb466270fbb0136b516b28f8d22fff24be15492952e0d9c56a078cd50391ce2a4cc0f59630e0af6467a81ff27991c66d50304df38439ffb6ad30dcef8809226287d0ed58022cd1405788922707ff363b7ae52890aa547d9685af22f9b4a827274b9c5fe22f6ffd2353236bee47bd3e578b5a02d46b8a15ce46581787df3b59770d04a11186fa6158c3f219091fe3cdf29819cc6f48b40c8fcfa6bfb256f36cb3961f2c5874454974378e32691a3f62cc865118785458e958f3188a473d84c29683727d53bac8112c0483961b2db8eae925192f22786b6dbc80f518843f3509ae391d3928ca5b50de0265a8aab439dd881885f7ff1ac861a486ee23d8aba086252eb7ef4ac0ace9a42462444538876343e1da986de9ea2b99813c903429e33e88bccb451b4c235ec622c55dd2bcc6ef6a94490152024c4831192d7bc863675a08775f3395e3b002d5ed7dbfeff3efc0b03e153c5050d55bcd93b78f67d95697c29281313b7ba71035897480cb1de73bd125d615185f2252dff05550a6f6f7980d9c3675b311fbcd38266ef20506e41408c24702a3ecb0420610de1112d87e025752f81afdfa0d7d0ed1a47fa8995865da9cd548631e0a8d6aec57c536296038173f764678f847ec6f5b74091c03066178ca5de3a7e8fd7d9b9bf1d5c1307d29429dbf51cb9962f01f20356cc0fafb7c7754059f5deb6cae3ec6ef9b20ea7c68f1148b944e81423298215341ad17312b2e1b90f1a7792aa31a8da961556d103db89d86876704eaed01f50f307302ab61e9788dade87b83c975934e271fa5e784441d8dfbefbd97dba67168dba3a64ce190803d8f16e28951d655d6a1eff21f184cf4139d25152f36bca360f33f64201f64d602b44194f408b34a82b17db9a2b690c990319a07f52fb205416b380d00186f3043a1e60a12d507169605525429032b51a49e76c5aa6bc898a81464f84e4dbf3fa02fb74e035cfaf256b0a11c96d9e4b35e140d27ddbfc7db841f3642707073e24af5f043b5612efccff1460607459e281be04d7875e8e80a7a95fa3825582025fea400cf37138138f8809080b5ba1f8aa84bd39331d831d8445c469f88c90265a1c622b02cd2e751bea45cefc5287658865ad9442310972e745de4a71d681d15fd5cdc7c714f8533e556aa521d0cfdc6ebe72216df7ab69207ecad8ba96da53a7600f66940a75fa777c3bcd619e22f7df3914b2949507d4f4d7fa671f1b0a25b9431323e225a52b3878cafcae300fa49d20db57e337fd42267077aef403b4d63a4a520c93b4874218c7732f7e5535bdac9bce3411cca4d30614626393ed56a072b21452649029ffd5a2908b99d88336c32b5c8435654cdec6131f3a514e65206b12547706ffa156bc196b1b3e2e9b833867a444d12973a3cbe4fceed0cfc2692eda2a033effe9e329c9ed264ac61c250bf35a70dc63b42dbe7190ece34f6c92bd8ebafaae139b8cd40e1acff6c1c094eb93e6c0be6190864ab9a6f1d663b878b7f14d01f31a0b923d4e84348e1f9b00df642a9bf77c6afae16c066d62b60665f3bd0684be6a3cbcf0876fabd1aa2f723431f05ff3cf14d58ae38473389261024c893a8913ada4e6b3a8d9e7df070c1af0674949afe1825df8ef0b21385e4b50243b6e5f50a49eb6c8256eb8fe4fbc720308ba11a4507d25c92aafa32d83fdf3f8f22e81aecffe4d77a9c45533422e81477254fd51bfa40c229e3153f2fe229eef35995d5af6edd33daf3f05f4ba76d7c423ed6546624b8753197ca03347124c1590367c7884a76fd95f402fb395ae68a26ea14ae704517f790701364aa12f53492a5a68c4c7617340c6b82c13c09f575f720643dd7ae6cfc2696d791540805f4a29caaa745b2a99554dc8bed1aa6e8b33dd6fde13ba6f7e824f66ae5fa0dc0b7390e5f2a771027eb1654d18e710ccd2e96485e5924583bffa29fc5fda90741a3bb9e0ea09878a286ff305181d5fdad0df0a29c8878a1c8fb071129326108e7947f3f9e7734db8e0c4af13f522e096f0871716ffec8fed10c1761c8fe94a4856229cf055335a3d466e0d7519a603568112c5951b9bb33b42edc94818a6be9b93c3c294d7bcb6efb5524c9ebcd872123a0c75b393e3223a4649fbebb703077f39e87e03f1d42b6f356025ebd2f4ba4b1039990dac8589bbf0161235492530da1172e4594c004a2c721310eec170c4acd639d0e6c6ecfa369e3ebb6efb059fa17159ae01f07cb14586538ff2b2291d6c36b6f5c8d83b111a8b81b6c1ed5bcc46072ab740850c3931e6652b26426be7786dba24db05375731496c71492953b363fd94e3500c35d516c0d35fd93d3a661c6d6ecf2cd498729c578beab35f4afbae225ecce99643eacf13c5871065da3e352d227f33e717b887f68dd876eadb21d29572631f686560c408055c876db7ad7148a27f4153761db31b468597d4ed5daf7a8f06b3efd269f55cd21d93adc84e0ce0eae614d050f178c4aa75775ffc94ecc5c41e3bd3b9f82ac505a3acd7a877b65376942e207f08e3348b4c543937a6032ec84373c5b588d6cde5f378b332a51d21fb249a53933f49f1d542f3f63a2c978bb21bbf728dbc641f6b2fcb8b5505aa7227104f43148cbfacd85a4ac1d283bd5bafe2ae90704953b4c20f84e5b0b8d1f23190dba9175d7dde6616f7ca66d51d3c0d92df9f77675d72a5d356cff7479cf01a4de5a0f097ba476db2c2635111b5fb9920a91ece61067b93c2cf73b48571197fdbf58750e3c081c5d24da97787fbe9274b0bac16e3a296bd0c43f682b65554daca432d16c959b4b3c47ec3f2f9cbfecf2a37fbc089198af1b8d91bdb22171c8081f1bc4d8d4137c19c9be183e498c41eea09c3a3f43f90e9521543040f340612dde6e56e1212dd1b5a9325df9063d9b6a93e4a5222a3fb53cd93007db44a02e25fd358c7dbd76d3a5f8b9c0573aa06e5242330cf43581935ac6c706fdc9affd3e412b1ccbc0d780eb3e383d86e59d3de7cccefbe954533669337b0f6e629651467e74f60d94a066fac09e23a518d5ca27f354def9159d7d41bde9539e77bca61526bd246d0c63035eff918f46f8d5c1b456c1bc0f21285cc5b395cb78be774078e3b5fbd4ff01c005b31e74cb2d9d6b81b279261e9463108ce43cf7e80f2ea68f5e4e2934b204e2444434005de0ed07ee45cc5fa5881545eadf222343a0958024a8956cb82119b05276567ca4bc21dec9e7219fcd939a22b5b253207a38a2da48020a63ec19e6a492519d9063f6f8e3814fb14b7bce20cc8330c26f2343c89128a84ae918daef5e3dd1643dbe08cfccb0f1265251e0c29ec8aeadd55de717747164c68061fbe030cfae06479e5195751e7993d752690badc86cacff8fddc44a9dd85bafdd2fb5ed08935b61c28499ae662bdd08c6418da3459e3be5079a9af7a0e733d30b6dbf4ce0267cfa71775d584c9a3441915b623779c0aad1acace3df24585c2b7489c4548950c088041a99bb807f039b6ece7de2d21b129d9499ab484957c33de0bbb48293d171f7e400648df3db22e5ad05cf797071efe9368993e17b36db2b7b5c685be4ce8c24cc6e9c2df786070294237d3d157979c2fa99bf4d6ed1370e48d075e1411978ee957d52db4bdc5a892c3f0d677b563283b3575791904850e1c6ee289456e5d637a48b3235699ac689cc3c32b81454a5ffb92e5bd36cf779859f12227c3ab50bdb73ed75ca41ffe0e84456857e0429ffa800d7a7384d30762fdeaf34b78733ac82c3376bc5509bd0c80f6b2f962ed6517caa2911c57bf356d7d5f5e378a1da3a975c33eab5024d17de98241674df6946f788da815b589a547b8b21d17e3ed9d636bc9a98032b568547388634dcbf68b96592a3abe0fcceb408f3a5d5fdde0233ae6964948f4d7179f577ebf5b7c16cbc5720d9fab161818c2877b555e27efe67940ff57983177348caf617457783403cb14cf5c3a6c4bde9094f33c13e8ff77f227e86ac79bb6ed7076999a54cec107f33b90afa497bd34c510b1dd93ee0495597ff4999b66df508fb6415c303324c5cab6763cb7599be8546b17dab5c7e5e3f4064b2b22ee943394bcd8c5015c12ac86a4cb891e28e807d32d6f755880a03c096769c9951d15ace5e2855ff725ad03fbc98a8560ad67eff2f08cdabcfbfedf56e30b107b602f745659c0762729f263737b1e2e37a9dfc09239bef552330ad0af6b855a65213fc63550fcb991640bc7ea6dcb1da735d9b7657d922914e7ad5b171f4020e41dd88a3fe0db8d553c81508f1338ddcb573677b022ee91e25e89784c217024c20a1e2e2ca8ae05cf2f54ea7266cf7164ff50e9068847870ee72313c12ee91d74719ef1a6fc946477605c1a028e82acf08608cac01b3cee24ffe118fb2706a2187f60a18e117d9d08ac9618479b07c0968f5fb1c3b906f5d5be4fab99569f147ecc263364f6893faea6354841f6cfe368c633a033b4365f77543c34ae05943ea99154f41a3c6c93e6191c90da7627021c9e3d339ed716f6ce1f91a734fdc316033e72c6a6bbbad1ced3a1776c1036013d914e73c6bd44024591f20f8c3b1be0f786be8b674cb6a66aeb3cb60a8aaf0b4c09218d39f7acc74ac8acf6364efbfa54e911164775903f1802174a0219e22e1185b1fff18a3ce4bc44ef0a539c700c08864063905870456d7ba060b1eaa43c557d9cf9086c776ab87df3093cab8397188d6ef50114e249587d701d2133d2902e235ea152a9126529f9f454d100bf015f01836939c883d8e227e27f48994377b23883798d6656e353ffb7e97552e8b52c8be1f0ef5d115c3aeb01ee9abea60393e93db57c57be02ba4fe0d13ae785c72911b713cfc588466efc6b41698d646bffaad6c90032260cca23d445906d7901db8a10de90cb3f2e92a16a2a330faa05544634a89f5c8c9cf5b1fae7b92819fcbe0fdaa5aac45115c2c99be7f2714626f1d3ca36f71a663ecde74683909ccc46132292b7555cdbaed2bf0a81b3936820161de8ea2c4da320831ea762740950b8d30a965f836deffe36a8a40f0679cd1f7c65897407a70a108eb6596d6a9f5cfc7120de2ce060514755b11232d805f70629a1daaccfa5670c8bcfa69f1202579febf0a7cee5340e3a56ae4b923473be6ee2f1439f2728a8a2820525cfb24922336ff7d61c7d2790a47008c5ee7c3098dabaaf495aeb036a3ad8623df32647cf27576444dd0de448913b75a5ec5cd3c7bc9b83c0cccffa23bca59db9cbe71caa8b60178b630dcc1d36a334c769c99e88269da009cce387b2ae2d351acedaf16b1fa4fe98d5d31812ab5ecc7f62ddbfe3c27051040be6c8f2f89cae3128bf39c5c6f45cf11a6952b61b8522c0909ebfd3f1047f8493a433b448881181ce44a61f91b324ce8cfa09dede90ce087aebb10fc9eb35558711ce682908fdb150ea37f79e859a6ff0c06f53aa48437d19bb198914387e75b12f792182f594c6d411d9303aa18c8615c4a68cdd3ed23a0056a3aecd75b35995c60629652485ac2892da358327399a298c72e8ac678a4035ddfb584b91b42794a37d1f2fe4ed95b4fd4e2cd5cd2287738b10f54248fb31f440281b951ec3f55f627a8d2943fff5f03d239fb3cef0a3d5c76e9995d5e91af6d33703b34ed700eba32a7c3274da036a198682a23f05f91dfdaf7be53c27a9318c6666b4bb07b12f1ee24376336fb16609d8d3de463127c2973083f9c83b79d8a803bb6152382388aabe6ed710aba8dca2b484a024143f5bb699937078e7e4e519f6b00a9747d7cbd03bb7252053e1f4ec4ac2dcb7df6966f3bb46e23d79e9b5575dd7d3948a775f7be1f939b7119f956113bd80db1616f36ead73c1a509221410f9840ba47c054cabed7c3ce90f10dd42bda36310c32ccfeece1e91a0fefdb2cc27bb9546b3128f596d2707738cf0d53099e26c8e00315f4fa703c74095471ed306cfd32c911ec1f91387d00acb90d291fe920a2a23db32c5bf8c6a3dce6864158537ab0b74ce73f87fb789202b071667ab3d2921866657619ed83ca80cf4e24034d2c4794a74952d04276b2fffbc635da04e8782265edc9ac100d87e4d6a57444da9d89dbb4952a2bb3ac35c31fd6764633bf1861b5b33e1f7ec96cccfbc3c0fb16ba9e9ff0dec3b5f5bb852823f4139ab968b1dec04e49f7913384e88920b2d8a40e2de498a1fe3dbfe07a2afbe4113eba07e122508f01b42da4a2b0c7a2860ab516061311d722369b133f695e1b65971606924e07223fa3a8cff8746b5d16fa8f3e640b5c4af8c9950d451fd3c99002999a862ac5bd2b8e21c4a0a157655bdc4f16c444c498eff28f03e4fcaf844878952a02604de384096eb7ec5ff0e68b877db5d55981b3e1121df0c7b3666a617855a0d85c405173c2a51d9c97a67cb8168e358f1ffcf70f17fbfeb424e5ecead215f90edcbb4eeb51cc18a808b91abb91df9f03fe42f514958d124a52bfa3ddf04e5334a84a83e3ccda0fc5773e3354e6e5dc0d66162ffe91d596ec6c20d9f1ee01f5cf8487e7e6b5e4e24e8b4253596c181f59a3b686949de6cdfad31f7594bc3aed67642771c4daf2aa9cb5ed164cb86ad14b69a87c4c1dabe4ad4fa3b06253cf9720f3e5e12d78fa085035f7a3a38be991bfcb885716dcad9f27b8703111cea4d01574d825fa6e4b80d5c57a638ba01a1183836c0b0de32be0db45a8b7043580b51080e1854e76e06cd3f52e5456bcf06c1f03bd458f69bfca31d85867914497ac491c6c7058b9aaae583676636f5f02d780f4d16d4c40bd88b54d13ba420ec910a8fcbf8fc6d2f569623a2be3000a1c818314c4d396c843af69c87cab32fbd33fdba2acf896e0fdd5b8cac24bcf1a30ddbf6823bd894abf29125374423eaacaf1262dc98e0e33fb8351fdecfc07c284ad659be58869eba0d65fafaecabd6479885611073da76b377e0585aed4ea8044393e6e6fae39d12b2bcf904ec4e508fd6fe4e4fbc9de783dda84be20b8520fc908bea95d34c7e9ed9f72dd5c3eb46e66f3a8f92207f866d2029a8b5c966789b7c567aeb6918257e5ee3447d3cadb43b8a442ae1a7fb5e0c8f3b4b7ed70a9ea19096c406d787bd9d8a888ea263dd1afa0793bcd59241c81d02153d7376224380298b81ef5a2ee94ff932c20a6a17d2125785c50ce490ea00f758a0e7b553ad5120ab9657313aba5832a364ae387026b876c676f6f8fe25bc2d02d7c7379a00a86b71c283a7a8b6bfeb61fe3f04679c8c24eba885ad08cc4357966dc1c4699eab81f08b159eb09356257cf5a5cdfe72b36c54846cc59403770833825dc7dc50ad05e27e265fe9263a67ae5c1e314565256f1eba9b8a52c94ed1c2d004d8be71a40c8463f835c9df13bc053ed374002de350c3979634367e90ea69d9be0bb02fd86d08dd0dd41e6c69b235a2aefa16939013c725b20c6b2b02be640c03491eabc3cd93557b174d85a91ad1670e85ed118b53e14c4f8ac6b1aa3ce701cb697dc3010403812e6b28a9fb66975273a8f151bab27c23311a9be21711031f1551f3186c16a1c35354ab64c00c0550b27bf93cc754694eb2fedf83ed816f873757bce13acc02cac062b8a23d9ba4b9229628326a190cb59d43af1c8a9861588cf4d8da8df904d7cf033adb17c9844784acfdfee4552289ad2fcca9a4747afcd1173195dd5ec25892932519ba8ea843efdadb70fafa837962ace826bf9a40b7a524e4ab4488bcb7fc1b6ab809fdfa42dee00d238711c9874fe36e307003960450651daffd2c4b194b86856b88b3b43a15df9cd156026fdb8ae81139f843dd61065e30cd548a4587f3dda954c3b574cdb433eae793c60354d3be982bd1ef3ff5267eb060476d8eb877bd7c40605d48e52313b97caa6046a7cdf10f61da4e0b92b20c88dc652212fdd0a173eb7e818cd524b2ec437c9f32d331a3cc6244cf89789a5fdb6ca9994259a4d65cf672550ff10baa3885b658265483e4970fe5d240942a72849f975692114a6c908c636efc9ec849cf08a83f75289416efb86a7ad4bbb769eb43db2254775488a32ee6f1216fc980f5ad90bb04201a8f11056b4322bdcbfa5da240c7212b212d6fbfee9307a2613eca0ee73695289ee9e0c200113b6a4eaaf86a3b7f67941448bbf2629784678a48ccaaae4340239ca2a39140279a6af2983d9a6702812abb88a7a3af9d899978aa47456f1e657f3dca9623eb1cdc58ece5d5738a4b3584a2c457e1c30b9a666d8118963ff6050619975c278165c9a19745bde20b3eef5bd97069f012cf63f216434aaa26e692349e2cf34be769a531813bfac71f73143a3a7faa25eeeec34b0358435cc540fb1d12131abddca037474f8f77318051a7a810e2c2e5ee42c4bce2f86250fd2d4c02b6cc04c52dfd3c7ba9d23dc22a6bb98c0822ba73a50cecca33524dd61a07c76167c598f8e1c0ab07ab66d89c2b76bd061c3a9dabf237584cdf080eebb20db2553d4d8ddd9e27c7441a04726a6f24733e3b8994da06406851cf07a6a1c7409cb5d7092d6b3035fc8903ac72e5feb0018652f64969b5b7b8ab05ed8816806804032048bd7c138e3a5b0465bd12119bc435b28084907bec7f38e329a593cb31edd53cd0d218a0e78af5260bd43f82742a62577f888ad1587d25d0bb201b9b440c36e1fc5244f5e9fa2750d18b2ae366c93101742d689dc12545b643df9ae937acdc43f5699329b8b121e72f5a683644079d3f777feecb9fc808d3b4bd21b2fa128570aeb3b49a0faa83227a1ea3bc25e1db4e1c66c82a5af208a5fec79663cc6da24d0d80e6215b19367e62487f04fed316179a2930b472730d682fe6f6e414861a8e101ad5aa19408331c7d2f004e7882bc6b112513d05b49a60f21173e023914b295a7ed4d8321d65cec9945482bb37ee8a5ffb1b99eb5021bf3eef619b5e23be2651a48f6d9f58ee04670fb9ac6ae149344d21b9bb297526e59aee34174d816995873e0525bb11de7f175d967b10bb2d415346c9b287a0035c8d787369953f538385e6b72f04e58219c999199999950f01561894986ca36f3993fcea42a9d0dcc85017603a8d26a4390064ebd2b679de55c7515e11f573a0f56f4a8487bd4c8a9a9ac6e834c9efad2842fe90d907a702b2d3da3cf3f98f551029fde81ab32d836185cbf8ccda24782ee289554570e1265f42def6ceb5a4f5e457a5b47b3517cbcda12a7d004d396076e111165e93d1a0046798caf0b50bb15e19095ab795a96bd499ac11deb353ac1a57cfb30d2b3fa73479528de04069f7430ce8a151e637cd5acf5d2dac982d009060fd82c596c33e560192f52355cd03ecf38274c66c4a4b7e973d5bff6de2091d0f232027f9277e191f822edc3c880c1503cbb2396234e95d300d874dc2a88a89fb96b313d2e0bb1e8ced9c2cde770ff7eb996901b5a24d4d5377b3dda0d6fed9249b1efb212e4a217b3679c5da1397185f95de4fe1ca38e34d3f884480fcbd7e81104a512726ca83b2075b5e7b95a530be143ac854c237c683ff758c672b1d4db47b3bc6ae718af6d9d6b8867333695230451933898445145624a86fac1c328e7b2921a04be63fcfb42e4c8a2cb5c81d13f18eaff8836d3ce8f3720abcb696f01a1785a9ee30187324ee35cc19506ddc1ccb4bdef8436d02c90129f7d8b6b30e8a3b0443bfc0f8f5fc245ffa2c314f2b7e06d69f90f40fd428abb237fb9269b5b2b259bb65821306a3c287f5b83ab2b94976f17b59e188a751b33e4459916af5fa835075a885c351da6be27110ca688ef5b70df583269b49abced391bff5a3a8a0142a6d8925ba2263d635d6bb968159c23a7cee2a28953530284ca3b529d9ca38235d1e53aeb16ae05bae256d41da6c812b78d23e01c986665ccc92d6cc6222d534911c1911bfa586f4f480488014ddbad3ff2152fa9e3f6854d0c6203c6b74f2886b73a161463b4643d1fa8affc3cb5b29bb3dca6fafcbb0c9d07e75c5c9e28dacb23d1da17a5580b2774333f287caaf318ef790f830f97953eeb04e4da2a8b46fbfd088ff28f704480526560f2f65d70dc4780390458930d64260dfa59d9df29fc5c2cc8aa3998e28790dba30f17c243ecb51012a92012cfc25f23ba98ac9f54c484513d493c91fc26845622ca0b50ed2cdc651ef0e30605bcadc602b8ff3a08b2ebcd8b9237854439c56b8987754b233c42b1af2ed3aea5c875af9d80c0150b36f5de1b29670b8502fffa0bec3704e7c8d8806363e9efe86986f5dbc9bf2d9e71722d5b8e0fc9db044df167d84964746768ec9d32f2921b766930a3169e0b330f3a52dc2f05449059d859a67127b94aae699d53a2264d4ef4da750e0d330014057b3943c14482d964585562d46108cdf3ea73b7197fb6ff60a39da6db8119afd4cbda6519f950b983140287c838a82a5fc55d6b0e6aaf565720ba9097a47fc64744eba455b7929a0d0d91e7da53ca602fabddc4c7c67a25189293ba3ed932d521f344244f015069c0e6e295f5cdaeb13c59f730c1b4bf5edecdde96b15b3f2eb0583f49570dc87ef7a5026b1897821ddbbbfb8ea0a85fa926c7c4c3827f63a5217fda69ff13fbdc8fe14e498106713d5d06024e923a5c031b6f61dfba3b1ceb138dbf9e86e78a2010deb544fb93a3ff6df1075c86b425338e626e8dd2d80bf1aeed72d32863c13942050e841d92f99dbe7b789d21b9f55ab1727f64fc21e797b223adabf13d2ecb2efbcf336cf68bbab6cbaa216c627df86fbb22542f6f0fb4bb4462688ee85334ca32214e923348f769a987c22f9b58eecb9d3d62b6f87664cc6eff5c957acba9be9eccb1068687dd2ad9c1d290b6f7453c30a9aa5dc056ed8a6f3154556fbdb09df477c014901c9991a57e3b2a74529755e2985fbcd2d4accc0aad3ea6b508e739089890774edb99868f9d53749a6225e8b06ce45f294421ec6266a5289de1798df152f079443178a97443bdff2cb2af1d2b76e5d34dc7a22239140a4c6866edbc4daea46777b432302509a9159b19fae7cd04fb2007478f77bb319047a8733712e05f87661ca41c1e3ccc8f8e7f73fa48bd146fa16170852b0732550121e4ccc5da2a7be03916df8f26ad04295e68e15978458b963ad33a01b051306f064638299eac6586115b1a3765dcea9309e9606604d504d460107b32a9245af245492105f32cd3ba4f2e59f92539ccaf23a9efbefebb9c383ca5fa3332f6dec5f8b2e22199b5450e71b1bdda2ed230cb8e639f28a61e71ff0deda27d6c1b22146984f9bc77039570563a670d84608edd4c6f6acc0ede51a8b801251add325796bf859eae052deb583db81ef38b5a6b565322aab577801888c02ee7252321b53efbe69fabbd0fd31362004b664c49debfecbeba37d1e3dba5849d8f783ab069cc2b789f17d569eb604a42827774b0582cb98971de84899876a33ab145ceafb8782450de08858cabb9776b2ed16bcdaae67b06cf0b70475dfe4f3734b0bf23ede7c7e86b9429043146358491f1e72c844c9566f43fdc6dc7ebad2c6d140f5f09adfa17ab4ea4ba53d3a12718a703abd5994c1e5a7b1fe0ffde61ef697a630bd35559afd9f0011406429cc2ae93782f541fac14127af20096160a7f8fe6438fe34837a0afb7993e3817b34b12ce978688e551d51256cde50c7795f3a228b7fa516115d8eea1383d2a4e6ef4e8f0ed9ed47a20eb425e3d049e4cd89d9758194a95ed337fd1ea4b32e1eeea32b4f5ceecd4462d8ca405e9d83cd34b2fd84e40c1a7a0d1b400d11cad7490327340146193065f208a15c97381a020c156fa498d247fa4da591dd0c40b0f6a8767b40f2a1226529b2feaf46de88d28e4ea119d45eb029fea2f1a948912a5d5bec100edbebc1af791756baf1cc138119412b20679f027c88a75e1c0f7671eb1b01cd474041590135f56a8ba43e4eaa776414837b7f4eb9fe9a4d8c0d2a3cdaeec7b45f4f45af13770845c66ccad719bd93777808b8c206dac8f98afb39081fbcfa1e492c24f495d294deef9c274399d54c06a970a2f45f2f1744e834faf96f36b4de02b614cd164dda7b506cd73e5a895f43848ee7e42051c00ca42dc8a6b718182d9cb24184ae74158ddbc6069d6399f87d1b7948437af0a22c80ea55a13863462157a949fabfe2499cc13c4e8ac3dd4ba4fcccfee6745f0f5a47ea3fe45ef274c8a506819d2919948eccb15af6544167d84663a68dbea7c74205d8258dd878aecfefe3ecf450411ea68ddf300d7e06e4b194bdae725c0b9fd6855e0c0c1d56df2cc8f0ae04f81b53b21c03e759d20c6603127a1d0d1c7c495eb3bdb01559603816dd735a483fe86998ad7b1b25fc698ac09785eddfa6aeeea47526a7225e8180309ad3c30aca6b11dab00d3c2227b6aff31164feea1e9a7ae27451bbd5a3da5954844cb0d93968ed87ed51983359e40326dafc83d1585f463022b131671fab20ef10ceeb81706a09c3bc444983586203ad2077ee80281b9b29b1c840344fa08df8f276a0324a6917b2fe721f0387d7e318ac344d4e5885e86bd8ea310d31f13c7a28c809efef4a0a5a6cb3c9b20be6bfe91bf6e2d62fc4cb7813fcd470915adb7e34f813caa81b69c4ff51124d3228d6924191fcd2225b5ef84fae6e3a3c5f415e824a3c7ed2ee7b7c12d4a42753c03cb204801a7c3e0243f90b7c289708f11772fdd748e6141db2ee4832af185d145bbbdca90af819bdec62ad30dfef41d8eed69ce287c9562aad857f02d8e3cc1c707bb03409042c23015fde2efcbd398d4c38a1b8dfdb204862957e84dc1758f62007146ea736f069f4e9cb245808aa09f574cf5571037d43fd99184f1c71b9bd9cd82d0dee1ef0fafe1acddebd8e8f251b29fc08a3c7b2ff0d42b1d3b1ec8b564544a289a1b3b0498c1c9d899fa733827875203eceb1e12ea256b43c362d973fbef543400ce7e64bc1cbda01864473e086b72a7f8d6056e1a0cd26b11ea6f1d6581cd737fdaf02f5b4043bfc19cc76a18b97d568a513a0cc3d0eabb183ded33fa3c60c06d7dd7ccc7f0fad1216e2e69956e276538df839b8f2f6c4a21573aa46216c1f6674b3350397cfe0b4c8d16fd57b29f164949792fa5da8145e076c496531dd52f8f3a577e496bb49f640d0612ea6987fd64ed2cae296723379e600c29aeb18fd8882ecdd7efa7de3460e602c64af0d768208684995d922daac9243b7a95059160a6fb98d24a1e5f53433c79ddeaa7810a1c1d7067e0dabd049f8ef67df1afe720fd2d7caa17d63a6a85a71aad24d174015100b2fdddc445c5770cfe523d3e4b1adbaca45abf940e926e52679c585c87db9e84813dbf0e67f9c9a0399c736f2043bff01fdc5edee2a974a1af51297442247ce07923a67cc064d5d314bede198345067102f13a536ade38f9eaf5bccee5dfede2304490dbe3de46a7ea4163f965bcdb1f1cd37b719a74f9d1a728bc48c4c398511c81003ccf7db3800aa616f9dae1a2515234ef9d03f416e83ded65af22ff750b941ae9c98c68c1871e569f46c7750f1561facb9c58192d54871d82a1dc6c04172601e34bc2abc12ad772e4fabe05ca546046073a441984c6f781d6919163d108495df5f35bbf97fd8051e3418239599514bee13b11b7d2d2778cf08e682238ca91ebe9b4f5936b38404f0ba8e956952c0063e2edc4c1db46bac1603190d23594eebc8f4bfd466481bd9c27defbf75f7e56f7626d1f56c2a26f144f5b3d9bcfa5c8dcfcf14943bce118175587222366e9cde8688f374dafa386a863eb74a8b019f795c57fb1a3f838b97804a34d0a89e18d9e3551223d9b5a636b80a9cdfc533085ce8b1c031a0a9708fc64523e1e10477e34619f1ebb2e4bdb29d9a69d9263e49b6f74ccbfc468eaaf4864a6a8019f4f06616322865c1cf47a70d8ec3af564e2dd210e857576b21b5f8fb4bebfdedac846febda99d89f64afd783da120b2ecce8ee4b0b9756965b896624568215d6826bf37e5cf3ae2d17b217bac6eda7bc7227c9ba2cdf463c24ddae046f7fd019847ef09c565ea6ed815298a982193d35a6a4a2beaac2ea417db7b4b45c9e70fbe64883b4994c391f5bed93f0e4103ca200fb189bb67831307264911de29e9c2956df961a1a7d5678238f1564f24f5b24505eafef26c6f7bf23993d456e4de652c82d5d6cb01f32096e63f59ea93a50835051f1bd6cc37e7c8d4dc915f9968e143f97f590a5e139c6d490dbf48e506dade1d4592a2f3eae94991539f7e47667888175affafee720360eb66754da4a77d9943433d7a196c03a147fb7893bb6a27a9498c4005566ef73af97526aeabfeed5a42c2e78f823bbcc13f5c06e6e4316088ffa3521b60945c041f30cf1f41550df03d51868a0baaf03f74b38e08801fba83b0aa7dc6c50a4bfa16b567de1a5cd37e88d4cf95e0764a32c9a941b8d325d9af763dd2e8e38c79fb22c8bf4d8b8f0f5f7b8476f5784a501e5c500343f43c97a929e4a814b592d00a78311103ff8ba51cd1c4d5962b664f2ed15f44bfb9ecb1a06b965d577159afae6f3d5b626f0643f57b0f2f0e99f1ecf6b4f04660f39574d509803a44ce41a406f62c204bd92a578350aa416d0accec81ed3ed9d817b940fec65ce36687794edb96266ec4c74172738ab7d8a13d5cab947d09cfc0654318a26ac00a07e39f943ca5b0856d95264b320495b6c95aee2039f37f7dfb2b0c0293586dd52e0bbd5142ea2f2dcc49598db1978ace2836e3716535aaa41845ecb788aa4ecd8126a0325094215a41598ac3509944b6fcaf9d0f4c99e281cfe249ab6ecf9fddcde21c4149189bf26280110590562b5d5dbe3568d4aa3cea2cf4a79652ec9b9d9a0c9e9300b55622f82a14b5e2376e44a1d0360345504bf8e9ebff018065ca7bc29479e9938a59ce94113a52f196b62bb2a0774cfd2b0e10f3108418e0ac427fe41b68f0af8cf630ae091fb4b396e51eb7e25be4df22b6b3655372f3e1769eb04b32a83f36778df4910e0de08fa65b743280d2f6bce35a834aee2fff3e224a89849a3095e2550939c69fbc9d2e98d8336b95f71527edc012d12161d933b591748e803ea20cd0d0fc9fb7f3c8d05b5c3a58b630b34a80b8579c8bc5d477a5a2ad0e9122ae6557fd1318096c9ac5f118c318178f8d5f1c7eebc2995847e7c89e5401bd275b0b69c9aa60a7b020e35e8255151f5beb67c4815de29b558c3c16502533455aa4597d3b8fd96c6af2f2cfcac9f2c39701b2bed034cc48f0624d32eb3ac8cd8562e574b4a4d4ca236b1451c1f985355b05e827c4ce5ce10b43158f3e25040d9e37fa565513499030524232ec2013b3bc087102e30425cd3b2eff669664fadcfb097309c3dbd6f87cec688931240aa355b4ab27a73055d2e9ac0a6dfbe8514d60d111c04117453ca8f8faa66ab7d5a16a91369769230cca1f012fd5511622cec72794735c55fc4c418c6667806a5912f3f6d5e3de09f420c10a4357acbae8cd2277416ffbcbbed6e423af281e90fabeb73b4a82b448f5d13f40b6d612413d74ef78caa95ed34f80e5b36defda11c1054f2a99ac047b5f49d4b758e0c049811c87997b836d06779733c0022c348a1100a03361e089075554c7751f98f6cd2a1808214df1a867d81300fe3651696b09a5bef7408457bad62fa36474a3adaf73338114165bc5fedf0594e3f412f1d8850448859b62332781768bbcd84a98504c39e3998bd148b4b1fc45922d952fdae05e5923a56484dd4e1caab50be9d9a9a6b0e83f90d1cea6291896a6caa70a0b8b51cc162786f6db3df46aa1bea42005ae81b0612774079f2bd343d8342016d3d80d673bc8274646b13d7fd40a4c8a4362b4b2871df95e11035bc48df2c4991b37191be4407645d4e7cb4d1babe4eff8cfef5546ed5e9636ee8efdaa8eb0a302c368fa17eeb8c17993175373404bab7a14da02405a288368c838689032e65544d07c5ddb2925e2257d6fca7411e3b1c8693ed711c2202dc4b750a0b262e49c393a2ad9c47c91cb90e80fb45c53bdc5720fd70fbe17822ad7b9dd7c896f188e2d40226fc885e1e801fa28b13d5646c78259c9a79aa292d59a83f40cc3da9d9cd632fbf913c0612fec3f8707540cbe80283e926f12bf29185d3d36ece101aa443e8bc75496bd270ddcdd65ed63e86bbed20a2a65264d70ca702dfe7176f2a0d09367680c8b2c87229e05ddd505917059f1dd017a2fa33c0cda61cca7dae1d6079bc077bba666057631956d0e9f95ab41cdc227007736e83c46d4aae28647c0b46b8870827a74924b147b363726a08af45ede04e183d26880e769a7c2b058ed0260c6d37b54c2b89e89706b65bab8edd5912dfef02d0ae6ed20cd3131ef3d0b6ddc6914a21434e7cf32773dbdcbf75068929765a823cac4f44a5da0faddc43602dbbb172a2873091e892075ddf99ba709d64e47abc456e923eed1b986580086ff1ef2df26228632da131ed57f662ef30b2d5a822883a044a78099f0ad856c5a42581baf7e8ab2db16828038d5eb2cd2eea57dc63caddcd86ad532cff82743e32d81224890fc86790229896333e46a2603baaa62d04d035df8a5f2530a0dadf46b47de6ec34e25ce2bafdee1ca14b6c5d4c007c7e6940df38386f474dc9475e037d01607f8a7de40b182a8ea6450a5f0cd793ee326ea0dd1b81df9a69e05f98a4fb5b5afdc04c505b70d887ee884e340df5c7ee98bcf4a5459be35b73e3994238f89359b35f37222fccdb4ea7cf2d95da419f736042214912d69cd1464bea65795b9d5803c4f55609d216aac984cb4922cd74882d7f697eda9cdc64710920aaaf5ffceb65b7761d79202dece1e313d64676326927d584f80c25a23a656c3afbf87e0896399bf09344c6c8b5da878ffc552e2eb4e47bd8d05de20eee2952ac5761d7bbfc14377dac6905ee3fbe33d4473728492b3848ca2dbb0e3f6d8320ce0375bcbe0a377edb09316e00f50dc83cf44b8960e76571b679da2c60ce99068e611c8b595609a78eef7dfd580876e6916b206c811f756a8a73d08ecc8312bbc7cc655767e556a512cfc8f4016218f041b68cf9c7f1a67e61ba4423d82755c61348330f380a3cfd15d9c7eb9b9266930983c4c7fd815f031d124746b3ea6a358c550e1f03b9b02658a0f33060666d8faf8d2987f6703020e49ce73c8ade297eee3c05732d3ca3480385e5253fbe0b13a872f598114a1a8fd2b7f770441c39389c517d150f4466b1da7afc1085748c01572a776cc44bbd4128b87fc5d94f0b67884a3d77b1a22610692ce776e94dba494a26d9fbea1e1ac741aca51e09e1585186e976b721678a9eb31dd611b5163c2041f857450ee298b1c2eec3db6ccfaae46fe26825d56e590bed765c0efaadf83f80846fa0b12fe70a3f783fc58127c1b93fb2c09cfca2ebd4fc38be1e94f250466cb093aea03edca9695f2e4dba556b56702f424adbe2c8c454104f33e9048b72d69e44012ff6e2590bd3009f29dbc52e9fae6fad1efe85a7e6ab702e72baf237413fde4474a5736b1b4713cb8fd8ffc65ca64668ec5e5157d30a1af1cbff203cfaaaf92de7da5f1442b6425f000bdea099525895486f2c6502eac0ec6265ad883c3697d3c918e5344a39673fc84ba757247b6faa33f31da8bd3f55d7aa09858ab9f913808dd785a0176af70dd15596376a75367988c553d27cbfdedc8ba69c61291ba8ecef809b2d41e09a04e7249640b03f118da039ffbd28700231bfbe5a157bfc0a0d2e0b77ecf5258ad805811e78d2586b9c6fe89cd2aacceda5a77aa39ba055d2c52d465dcee91879d12f9c8354b7625fd7d711738e163177bcfbb62d6d48e47992746b97e3455e84c829156e87e5a0992a50b32ec2ebd9597492244706d1eb27010c79c0f0841ac2e08f7d11c25171bcab7a9bae9f18dc1b0dd0071d827f61a38d3704c315dfb4de425929d2f10f76106b86821e8f9f10c59da69d4b545854ccd5caaf9d58004c4971a38683fe8da4e9c69ebc03f5e5e434149113b6e37539ea7c54a48c79c5f61334b11b4f0d8e5a295f32963fb1e3cdd1a1d1cef290460aff2bfb4d33642815c965971c656292516722dd18d0df835fd1a82f6e556090a30ca8e1e2a03b7760dcc77d122588aeb906c92074139928e8e940fa8801380e8432d13f6a689ae540a7e7d62460ee83d9774185e342f590ebbc5ddb5122c116ec5e68e1c2cad46e988b30a5c03ed06a50316a607953c249ae32ede6842a8001188159ab33db5825ef0fb6bf3e043665d1703eca4f0d97649aae3ae8a82db51bcc1589d9eec6cf2136bc1f2f4a26bec224eee0d96516479f5b6d28c147d13c07eab80c2987f4548111dc5c23a1a9cf8b64ccc87b224a1f7d2353f792731a92881c038fbb4e76dbf84f27e6c470149cc7db1189b4b0931628e27e73b6e1c46de1371e0a2dea5fc282fa3d6bad562e88800cc64c6003baf253f9de028eacb03e9860a8a514ef4e2fd5edb7d6f2ed8eb8d58f81cd1f6ef05b706e22856fc29b550973b9377e31314bb36eafad66146cca4ce39ad9f971a1954e08be464e6a525be21775b6b988069d3e2e31fa9b7cc2b77040558078784814577f7bda4a76985b1d759334c4768d93e1946040a3f41563fbacdd8f6ce3ff427fed432fb67f21ff3fd10a5954ab8d4fc7d90203f9fbb1f1296f84028f46ef31fdbab50ae996685b5b82d37d055b02d81bed02cd5dbd5a9875f9de160f89f4c07604fbdab1032ed96cace0a8008980f871a967e76b2bb57f263c73563988c5350809aac967531b94f6abe6277863b29b83078b40bde72b287c106e67c94fed74516da982ec628a8a320ed7757dde1c3d986a43dc051cf1127c4066987613c465c3367e40399a693c1753d37f286f42e25f9a51629e5179770c6d29c8cbe832c383a2ae058be92f016b0ffd67a0fadef93c13a6770ca50855370e783bb763f70628904631aa1120ad7d72d8770cecfabf3f306e5425dc1914e85a4505afaa4130c28fe275f33152fc263c3c65cf7a8915f4e7597f4afc1263ee72ec8fe0f3a71fd8311594cbdc61067a6bf66e8069569d3ab15e088e59b629a4be2f96959722014a0c80a6d5963a4f2409bdac0cc964fb5b0406cc0c8bed3001a22a467f9f774eb99892887780dcfaa485c6c49cb4ecc4e57d580990f8e45cc6693c2fe3b0c48d5c8c7c0b750bcb549ffecc86a0785a1a06608c6da78fc5ce9e110394f8c96796b4f4077fb3a0b8f31f343afeaf133c19501ded94c67a35dcafa64bcb42f90bc7c7789a2adae4306ecada4b7893ed1445e70b44887020a946cadd37d449cb6dc30c1a304d75d01711c509dd557d9f8c4aee177663959b2a2b35f53d07c0401e67b43c65ea6d48f52b8d0a4cccf258aad90d80f5c77d62dc5f5b859b12d094a485ab606ef048e7420f6cd2652a58a1ac78643ed8dcc244ae8ee20335cf6dda3a01cedaec40d1468cdb9b05205c6622267ffd612ca6f484e4670061f55c6416dd7fddd560e8fe3fabe2317829db058e946c53fe99aec284818e4d07b327c207f664be378a9a14a7985583305959b2cbdb359642946d7b816f439f20d27262494e3f16acba57eba33e24bd3df2d90b26b22c1b14f8abe1b57a3a889339a0c36b477777a7835051b198d777c4b54dc21cad2e64ff6ee45dfab02e281c2f3e7d56f71240fc9d6fd991c89f207ccd6d6ee99352181c93e2a4180854839bb77a5239db2d826269763abf2e982d4ab3ea3aebe75b3ca955e582c3a4e200516a935fcc2cc9e6e0ee49c1ded1d6468062902bfdec61a1e9bd2364843e9e1f61a7b7d1f9b0906d3a73616cfd1106b6e4a80e6c4609a9c1f4dc50f60fe623569673bd7e2072b124f58e38ba8a8a9b07ed7ec2b601d328f941752083731d0e3a154a8282cdbd16425e262b3888011843f1b8c12ec4979de433b73462025a4e7e48afc7a90ab03e7bb4733bccaf534793b0f4a1954b1e528ec1cfdc809576f1ea6d419f6eb4e62fad178176bfc1709a9ebe28d8f0261ff749790dff76217676f466cbb041ca3a55eb7398c0d78915909aa6e6e8674a40f48653e80389cca6915d4195a62c69a4af64b4a5543746fe6ab68f5c63676f807d4888c6456ca3550f767086c318203d2b60fc62fb6d1672bb46551e952614d410b6387e35575be3e3544121302d6676a13f58b9578f576d53bce4697bccaf5aaf47eedb3498900c2a60d3bb25afd2cd5cb4e59dde9ce40f3bdd5e219d70344c9ab7751542058f7dad1679bbea7f3e528d8adae7aa5c18826d54adfc57a2c19cf7848619ec80d398a957292087ce92fde9cd0d9c91010a3a9159ea03ef5544b884cc146d3fc86facb8725ad554edd4a517900b8db4b26f8b48ebfccc3a3d547e0b5541512e5f8925518c6b2b162ee1f39178b15aba0b72513df41fec83eadc18f391326aaa886326440fbafa9a3858cd2716340bde923f59561f3f38ceee5b8891f63816449a22e405c9a6f4fbb6a1fae5791f4707796f58c7635666b72e0d926c1ef9acff989ac5e2fa61399f02490e72f6c67df0b569a49ab9529e88962ac5e304c47819ef9c7d6d92cc460be72c9b074c2dde547f672164a8fd36ccdc9f3d3aba24123840411e32d26b871aa801aaea54388376d87b3434c97c3638c68e0c726674d526a9053c3f090aa6849ae8cf0ff2adec3550422048248ba0c567bd5e59eb2c9db756f97ae984c40b9b44b72c30740b947f08ebd733eb61b6fef96ff8014b3a0daf0905223ce1b17785ed85e2fcb8dd0c3afd9041b716253e231b84db80266748497433256dc19958ad8747cd9ddf365df8557bf704fa185e4b6a0d43ea0de808d55b93a70ed77129bd19922a3cc6c872a2e7ff423b0f051c7a30b6f5b1465b9462fbd1b926a9c8e555f260720e6763de49dea667808a6b89fed7be7b983f1d9779bdc923f97a998838dfb9ca63066b75489e3b0d5718ebd9d786512f3b37700b99e36665c4d855867e9f41a653d983024c3f3fc0d3b02acbe35691f2bc6cb0609c332b7c7eaaa2ccf4e56179e40817d25803a8e24d028b1040fb17105c531c2085989db395d7805e6194ec3de65f01494dbfac2ccee441a510568a4853d2c6fce49a969a9ad6fc3a4db87155b0893bcf9b9c4e28fd9ba83c32e705c28ac5e7d92b35d2c21c39f60a20171040c4dabbea9ae66b4d4929b25108cf0d4777bb42793045f6ef4db6717377b8b8d439359d6d5a70ea69996c6e6eb5b653c67c181dad29e9b30e606af25199e4089e9b8002763d69a98d92eb6370de1e3e5a8c43c597e78a75512a37ec6c411f9efccba55e103f2fad79f1d8eb4ed367f08a91d29ce6919156e3b7656115e1b66f6ace9cb951918d5b42c4b87b3e8be20509db3560e5d252b148464cd047ce9acaf1a3609a27a33d46c07254bfcd45bafe635902ce6b3ccf94d9476b175363f1b1137be2f18a651ba02b53074784e4799b2eef06ca6778b871e8ee4af822f17285fbc1f0f409fe9b7aae767940201faa3a8acc88337b972bec61fd8aafd6f2ae92410c42a6f8847855d439ac004f064c35fa850c0c5f0a14862dfb7cb27af2584ec2d215e65ffa8702f5dabc9aa7a46b49f8173d0348d4a989406c16ae904f131e8ff1e34327df85019f9021a4f4844e8b02477f9d0e557a9caf6e03fc957801210e4a10edb9da2d3d1e7efd49afa1c22a5c024c24e3d03d16c24a2391a05e32e76a033b4e663504949cad6c986b7f5cc057cc6ef6de751cd65f9907585fccf50197bd415c0dd625c58abce6f7ea4693886208672893357621d003fc6574127fb47b952b27f581e1aaacafc315bffb618fa2a24683ce4a13ef0b3283b52d9b03913f81f94f11d1a34fa3f1adc41e072c796eb3882a5b6a7d7f9baeb647ebad577b8d9f44d6f7d38fadde40fe45c05be2b22c07a26ae37778594c0cc96ecc167dfc96f7dcbde5c144e418d5aef363928c0d9c01fcc5749859a3143481f1202aa94d23e51c9939e703450551e3d8ead460e903c2fe0e542ab92c69c01f4404f74a6787704da8aa85c93e48c5d2e88b91fec6dd8c118136f786a589efda1a132a0ef41d5fa0f4e62c0040c7036eda809da6f76b16fd29bfea2d9a75dd8cd63f91e6a76058c6088fed8607efa40b24382d7f91673f1e6e0dbe2b25f11748431efca76a89da2e721d226a78a5460bf5ba14b57d7879a4a126e49c14ae094fde6f9c0a306f422034ed826b7cd8fce2c45fbc9257786f1a41f09578e3502bd44db1f48d99dfeeb387cfd12a5d57ab2dc7e9750f7db1ee7abf9fb73774814138449abe535513fca6fddd318786387fd43439905ffdc06080765ca7cb61021d191d358b78ae191abbd2c6c0908e75d1a5c9fcc363bb54d26da02b7c6420cad8592eac78e2d203d94f48f99d1d455383ec0f6b24f3ff5c0bb02373cd7687c13362270d547ef6e54fc27f31345888289c9a554fd6acea6be7d91ce731b8131af6ecddf79af6d476f933c47831660ded3a0fb481ab15bd9f074d570f4aa90985ef33df000bc51816804c02947c28225b860024f2c455a0267bb57036d5394d6501646d02268b7931038d19da00a1490e1af40a2601170343bc5a8fbbe3be670b19f4e10bf102252759186d1a40aaf64daf5ce82b909dc7713ce040423207eca2829d7f3c755addea3c89e6006a969fe49013cb7257ce546af1e5e40dec578d6ccd6ab8c5233c3b31f47058a71c0c8360f4e4f4190f984cb6f3b7cab1553d0d721d2c9938e7fc73fa170e3b60fa913f52c1bcaac9702af9d8d05f3327e1c5dbc794ddafacd7e117c44923370a01a59b5c1f3a86911b2a6848b227258177e4eb583ffbfa21c971e9aee14de127e5b822cefade8b41174ebc234cc5149a675085f8f7d14673ac5de9119416b6c53b6dec6ad9ba40e6f9051b2b4b5de3a2200c739b7512efc8c6e17dbe983ba337eec0c9f6b162486c8d7ee7e3f080c1c25fac960e765e5218b0c0c73e3d4617b7dd18aeab6bbac03e3c0689410a792f244548d4cada4c12f712d56eacd00cffd81304806e3a7897ed2f9f56b4b86d996f44c57974d2228bccf2566613df4d43091622b4b0bd9c633f5c709d20dd385ac28274ff77b01d1b83bffcfbb7ff7d3a2cd9cf6bc31a1bb0f62136603f798b28754316bbdef93cd6f7b3776d86e9bea0baa2ce51798558c8954f02a9b2c629e32c4cb5ff0ef1d2f2a067d05be252292d39967ac1e0a615e578cc0065f508c4c0200435cdc246384d848a6c4136b5eb89f3b31bb81f2aa3a5804cb5b51a9f01e05db735d35159dce4170634236a519fbacb6fc090805b4f5541af7e7d6aa5380a781d1e487075616adb81797cc115370608832754009824c3b53ad78e2b3dfa5494a8d62b13bda9b56daccf9d677ff8431a127301c60ee3a31cde4ce2b4c07b2568c257d589b17025e704bbca6a6ac449099b05ae85350dd97703738d538e90f64a277e4229fb056b8bb5026177a3d4fa2c256455d8f73900dfcd060088105eec220da325b78bddb8858a5695a111db7316f8d99070972e6f458df3d8bf570ea1e6e2d938c82da776cd9d9aa0e9a7dd033e6a15b7ea7ce891e780e65e5e96b54b535019a6de574d78cbc7a2cb3b7addbf2a1ed621126e6ec41281b84c51bcaac1ac8f3c329d07ed0934997d0ac935a5bcdc24e21cf67314cbc3a4f3b3d9e396d8d299e4fcd198415909f41d3e3c564e97c645ba37d76d8f6a50b96ea400a89414e82b9531cab740266488b07ed9b44b0fcc4f9dfd6b4dab9de1390d26ef2706a9c3d6ef818bb581f64e9ded7041e0063bcc821fd247ebdd4275aa6c3dde22105e9b45af83a8209f6156ad9fae5d23d63ecc77cd4b8842080d6a7137e8f1172351d9be97afba3140248785538391e341bb75423dc7af4ca5f7157c0143f30995bab472fc033527d7cfb6d7699c6d2f7bb623662d6163295eb208817f0c1ac7de259df1f427066fd1c1adb30672902f2ebe522f49f8eed5fbdbe2beef9a9ef1bba0ce524b8180663039b27b7b07fcf956132b5af36b806dc676e92c0fde91e6d9c5abaf0457ffde2de2985d5e294c43ae399cd5e435e98eb21695355bb47b99b5c78abdd24a7b26b46c771a1e53c0cea3f454a8399cd8b5d9af1a2efba6366dfb84837cb7912327fb2cd0a7039a8976afc54ce871dc993a6a6ff5f2cbf06c74fb96971ea588b721966cb1a52314684da7268bbfd52d3fbad1b23a375727cfe4d1556696c4402541bc57b5ee69230c6084f82f4a0fc378521a620429e6f9ac4f64884b992fd57d5e0751d77d9d8b96d106b7f7683842b5c967fb239444cbe05e5b8c65b8cd5f10ca0665b078972d0c03bd216e6f6b3faa7ff71716319ccc3119c446073cca2585d214dd8e8d46c7492fbb7988851272291febeda8b88dda9d758aa26af656947dcb1a2b7e255368aa51d108560e2a96fcf4e4271569486390dde8a0411509c60a40cc72a4bf5268c40e68d472e4c51775372ad1fb80418a100d475174e2ff8bd26ddbbb54b294d5621030eb3da38f31ba6f34170d6deaebef486b41e9c1870e34f2350e72b46e637b763defe31afec4bc91cf4c06f2ef78aecb94d4dbbe6219091bdb08fb89cbcc233fa3483ea77efb4a1e0ec069f0722b8cb01c9540c167a4315ab45732d01a45323d83d07d0afcbed3186ce677655b0d50d364fc06899936a702978df7013982717c7b0832946d45402255b6dc64bc8d55502157864bc8b329adb6dd90126c6fa92e769530f89b52a1eadd490c1e32db2a9eb4c1f4d7e3aceca40de50ab6fb256828f98c52bfee0170a65500412858164c0f53f96abc66b9077efe912ec07d17365741bb63921afe82bf502289ae1eab47b180b8e6928d6c57427688c45a68440f23b177be4b094f5d49fa62dd6682478915c5907cbe4349e11dec92e66510e021214de2a4453a419e792af63a81da37fd0517863f5531e7a03b08859de13133d527d8d07476daecf1a66a6eda76b5213d96e661befd7cc8f29c418c8fda82d45a4b6076ea2a3b5e2a96769c21c7912f0d56d369f1c3033109444d55e472839cedb6dc82d43795dac04594a5a949a26359aac5a67fae9254d6c99223899918c8bdefb19486af22d6891398f513a24b159c7f7e5227a3051e62695ef2f619287719f069045f882c7b0c318129a4ff5bd8e304bd9d5d148eb395c99d2cf70d5beb8c4d2555b74fdad35873b197d08eb81fa54ddcd41d2680dab1b8d3490c00585637f61e52f4f9c904b6903368c618447654f5f80f45ea52fb3e34a22f9a498cb39df46aa57e99cc6726d1faa08d921be4a64399ec0d3574b83dfab49f2903e45322b14398668a163d6a3b7c9e15325fbc24dc77d56b8c579a4fceae92e82ff13357f767518cfde4dc1e746dab5784c30e860d242588d1587e3a2aaac9453737ee6fa5994d1991261881da52f1538d587d8f239f56b7a98bed54c84d3b3c8058f1d3b2cd76249092d61665ad152301c2fa7ff5df6ebbbb3e04ac206048c95e352e82f3fbe34ac234da0124a1c3a59da58257f992db8897a3f9f016c7415ad6b3dd1f4f00be3be79bbf3c0d0e4c419ce0c431621c0d13f384965171b1cb6b18191c1a2788b9efa06660b574147955430f47dd401b5a3b984d3a97646c55c9eb28999f8653b3aeb0669930e1c952d69109ecdce69fd382cd641dfe724740b2287be15200189df727888ad4402f9a2f16d48e6b3f47e27fe93776650991332ee9c1e4390a9cea4e1c021b1fc072db1583fcdf50347432499586a4620256b7a845205521498b6cbc8afaae41099e37b450a529c6cf40238a5a659706aafb8ee6d9ccd7068f8cd3697a9d9cbaa9d29b85849c57bc27e6955cb7bba2850f3f9b907c5f5f754309ce5fb50a991586a791282d8dc9db914cd523fd12ce422281fe72290ddd1d766f5ffe2453daaec36a0931f1ec9514545e239d728e713997694ebb919ac64bc7c364139663821f4644725118ac38c5e31f8953e06bf94bc1229f865c276ad927e6de6d7e32909bf8657cd9d700cb024c976edd11bb7510fe306106212f4a4e6d22de0d6e8a44c8a94c49935756db73e8fbfec5bb5e4b3da34c1dc49f456404f84d0d6478eb766df521099f3fd0e46110c97d950082e9252af50348fb1c6b4e74b19aa6417a4f31af8279676d3aa87782b51ac55fb554fac5774d88b9dddecaf0d3831bbb7a903b40335632e459cdf7fac8499b0dfdf6f0aae3ea7c56ec4f6079d348d5419cd710a1a790774be8cb493900b317067584abefe71016dcfd765a79570011a25d3a2c29768ac8a9564e90fecd31a5bcf136e2845db32bbe57f3f7f8367dcb10d8dc3283bda0ee7a532babe96e2b72641c39c8824df0005988a382c1df2666724b510878e2d1b075d9a41855d7beeaa2206c053e8a83fa363599f501205dc6248a48bdbb3359f9153e785d87c28bde663ffd8fe612ed7dfd7c6b4438058372aecfaaeacb8327eead20250c87e5e9813ccb01a7f165161b8c06b2b99edd3af78582dde89587475547dd2f6ce288f171f1d3ee40003a4fe2a993ea90afa27d2369827e5ccf1d3f4bd109e14403d055bc38a0e72c7e3d9d6848798a51a109560f71430521b73c28390f66508c8eca87242bc57812859a8f08ce0a396051a1c15e1fe74fdefe5a9bbc92181302605749022e77973766d21f8b857211d6220209d2e6b60536aab9ecd030433fe5b6ecb79e3e62f8cdefd8dbe08dcdea7886e0a20a776155d9cb0b015d534cf94a050bfe9c888dc63f9e7ffa97eefe586b8ce77dfe6eca0db216991633125564ad11a0771219f0b6d77819f4cd4ced26eee3c5f7561fa56ee60daa5176f863eb713bf57fc27dcdd33463b01efd96fcb31b808d42dd69aebf3aa73120401becf4a2dd3d1a6c4b62b00d6039dc6055aab0e5c53258a9fb381201165b6fa37c13b4b6b10e8e2d9853287815e8bece7239217f77bb8776357656f85f4191dc08e943b6f513c20ed262c0ababb9af973d63ec0903b7535ec7732becf0bee76eaff302342dbc2e8e6171e58a16cf4ba038d97962244a520e79484881db93b87d0a06bac19fed5984a06b9c9e7ed534593280ebb8f71c7ebc6bb007b7b14af95c99ab20c941b2dcfa167b0776fe7385cac51c28e81e311d5ffa54b4dc36d0a02b25f6faf6d4895f07b6230c542ae458fcf3a74baa4d2e166e9d85fb9e4cca244efd56f01f445f3b8a4930796cc9457240198c4157eca10813f5878cc2f09a30b4a1e890d3cf4a2f8d7296c46bb93064befbba08f5572778a594645baef27871b25a5e7eb5e7dd4d13ccee05b6956551c6bdb1317e5bb992f44cd77d7b5e4fdc8374fabe0c3208f741ffb24eb26d421050774b3ed9768366cd59aaf2e85d80f55939011d2966e76c697c6e1900697b7aa17504fe508e6d960b7a6865a0edcf83d1b1de216afafb2faeac8b4e1885567e4c4ef5125ae88daf3c943fb0305507d9f5305f101c90f53b2ccd0e29c2e8c64adb83546d90e353514fc8d3eca714aa13d2fa45815a6970908e0002768eb43f8a048d3b5b59081226c435c75f33916b7da34497ba34bffea9e91aaef672d71cb62216375da1746092cceb96b90ba8b6dabdd58ffa8cfd89086187d3cd36b75359ffb1d44eccc68757e0e961353d4b24e25e06a8ddcdc285ad4dfb00c3a6e92e00dd8bb12788f3cc649d913a8e085d5fb7e5d8cfb456223416bec41651dd19e280b1d68be557a134aae4053092ef964d552e51f304474fc5d10dba9d97f39dec8b5c3f278fc2f416c7ebcc3e23ea78bf2e159a18a18bd3cb292d7c71285f91cc02b9d47f60e0a0a2bdcc1d58c9c7899052ad52faeaf23d0ded271dfdc0ca95b6ae28df38ad80b88524c61475c8feaf4576f1dc618fe37a5f269293c07b5ebb7141eeed6d4c0c03e05d8e09fdd1a4cf6340c04cf75558959b4c192d538b5a853db4ad623694a119c9408fa5dc7dcec5f3f292f4aeac2ee7727f2d9d502013a5bf52334c6b6175fe30958bd51d7e40393b1d09cba058e5b5d751805b2e0a3a15ebce9636a441fd6858c096542db0624a67d5853dc7f0195a92c305553c92d31131c7a129b40ce4fa78295c4937da56dc2bd8cd236cb929f22fbf026e3f842e908f0c8290e956d2debb0e92ec3be4b95c16dc98bf33b34fcaba41033a0de8134aa9daf4469b9a57186cc030b895d7386ae9d4287713974630afdfe0a98dd8f610226c6cee2e95e672bb33f68ee5ea928b913f0fb9537a4ce2fbb5e353bcfce86b4f36f69d1d5fc525c1f057fdd544e5acc97e053daf44d8eb1f74051b002a4a865e885441a6de23d8542e6c523fc988deccc6388aae54deb773b0ae685cc3755c30f323855313b3e6c24b22b7fbc6e63894d80142634369fa2cfa1d151766ca222fb488cd520b7cfa7caa69bc804b3d62cdd40ca63102049684a66261f30ed22a1789cdcc7daf979946105e8376d0afde38ce3e29af5c4b32b5dc34944b8b0964adfeb4bab1886892402af6c67612071f067c5f58987b64deb60a5c5f1a1c1ec58b137c7ecae0189cdb8a2e662c45a678d8344f63be810d18f74893dd120e6850fddce869849db87afe0e080a30186729bc816241da1f0162e08707691bd8adc4ad223b2b1b6b51b232482c4e8cb91bd04ac5b1c11ee43030c301554a53f0666bb74956955d32e07e1e065ad17fea8d614959469b6445757c0f3f6af524fc3f3ffdf3d85ad97760c00a8435546b5df5b281c14283a6b229a902a0d5d43846b11fdc90ae7974abf910b803587de9bde2066597f2941648ad90bde2026d5cd582daa984922f72aa743c4db64a3badb784930ce064ca8d0db773f91a1b0b2107aa8ac09c6d99f76c56bb144f6e8ef9c2382ab702c2b368e6915dcb7e2df5795d25a97343e835e4c19ed64a22448172b8dfbf093f637b590c92e9680b240c6ef0cd43f97a94ea4f4926d1bcea6bac32f68f058f9b84bf83b91b250df60045ed8755291631b1c0b8aa8142e8bf72d1f003e13a8e545cecb86d02985034223d1accd50c6c62c648d11a155f63d6b6d26288ca8b263cd7f8c19952232752ad787f2d1c2e00d38ad9d673ba1365bb0ce7743c19d810a34a22f960cc035b5138d53df38cb2cdd3419d2fdf5e8e6944845d734ea202ba07e0f8ae7b43cf01f3a839f7c7a46c922b86964e3b3211da78c476c2e1df6e8fceb880b574dbfce318f97df76a7c869994a19f0de408d47a8a9c6677c620f06c9d44e970852c87aa73d82fc02293e542ed62b96152badf4f83ed2a7aa0790ae675951d3dea79255756ede23e01d8ec6e7ff1d39dbf124f42374c7b714b99a96674a1c3802e4a22b343fae61b32cc7ee12bc86bd790427e90b86bfba5e28b2b5505168c12a1ced17aadb8474eab56dea8eb7f6829ef1e95ed727c10b02270904c3260df7f3af7b8294cf5981057c3b4d608e65b9b8468284f958605f1b2a6bba600cfbd0bd949b819e206ed3f1a9aa2d2112a1cc3a7e95aa0b439e9dc6483043dce46f99680562f3c8b65615f4c1b4aba96dd0b000e2a95bb5aa1409c625051ac43de98b685167047554caf8595b2c7b202570b3dd916176526cbcf109cc6f5c959d0c00ec1000fb82ed0fdad1494d963a73a2601106d02fdfd08f95d2534f6311d1442abdb97c1aa3534c883104066ddf8a2c2bfbb6ed6b6e9513efb862c571654b8786b71f06a06984331652d4dfd8d58d81406db18839a84d81d8205adca4f134b79fe8eceb2b8c055a16ba7620532e5532114ca5aeb82bede820eabd29c55615fa86e2a34e87c0a75d708900c119f0a1592e4e093f4595542ad93c66353d76942bf5e4302938aeb8384f4194af64fbb59900d61ae58eddc0ae5c56f5c7b7f06e24f18c537bccfcb67889c9130dba4c638444ca2cfd9112fc79fbea54189bbfdb2a23d197b56bd6c43ecf98c0c48af46bed625d797e941cdfb332dd374978542a7c552be278c72e7737c9a7ce9ab94b2e340b1b0e8007513c26897128d8019ee3c832a38775c745c7dd412786e5f5bbff6ebd43e5fcd88f5387dcbc61aaca1090cb3fb773255048ac7e398bfbff15397ce4969e10e8f7215cc54d2dbee4baca5f1c9dac90ba83eef4ca5cbe32f19884317d10ec635a3786c1ecfd8220facf163d0d69f902d757bec111df593fd4f24512dac1a359e140a463bac3ae740c42a59ec82e46f3752a276a3675457a9bed22254ea1fbd4314d54be810b6f244d3894d97baea6c798ee71a2b4ee61daa49459fef2fb325f92f9646645ba9c6e4adb676cf6b3797073f012a708d5e44eb7140903c90c1d29ba3925f0345401f844acdc45af283028c7a1b3d62f7ccd1e93e9e465b798d5ab283fbe67f7c048fc2bd22b2b6037d57f743184f5e3ebfc4c457c52334e163239fdd412d5be86bfcc2cf20ae1dd86a906ad090dd37521e9540547939273171e72aa78699ec719bd5e37e2d8417865827a1a76b3f80c44cb5f0e10bfb14ef55ca85011eef035d9ad95b4bdef1d861ab184ebbd7e6732811fa413be29e335e68825aeb485457ec1db5caabac5b9772a68f261f314fc44655c5a45bfe6198e9968288700b44260334aa12bfa6810b7ef108185f6d9410ab9e7adcd592f07af3fdd30405613a8976ae739d6470e0e7ce92c804b38e0b47df69716c030cef802caf2a197329df98645956a4b7c2e5a43598cf624f0e28afec50b0a29371c4beef01d7e4d2b7ece027f79b93a8ad03a0251adf484a87eef86bdc7b0348085d23a283d6cc820cce132069d2d0a94a7db7d5b38d1db37f0a0f9f0f9ce5018168f39ab184b4dc900471b62ba5e237dc50e3b49f61fa5cedfc9faa5e1c87606c694835145bd24f3c48f06ff4a414e4ecefdeede39cdb878866f3dca8f53da36e7d2889d5110bd6b4943fb93f54e626f866a44010614d2950e7aa77b6f71571d2509efa8097ec5e385f64b3137c29701f3d845c594a229d9d02287f6de6a5a0c9e9efff1ac467d4df9d166fae0071aaa3d94c5924615f9daf7c13342faa1e50ab54934394e61c0e45ef145c9dfbb665f1b8237b52409b3d7485088f9c015519e8253f21f8fb2242f2d7cfefe7a6e3437d522b60bfc308ad6ae351a9e57e53b7f9d2e3675f1bb1931f89c3436df5a4b73bc36fcdf0eb50c863b57a7cd9b1eb90dd367c5dec6c68833bcc3acff7e060a1a51236e3bde814d229544a3bd9eb169024d2cc195bbec6f3fc16cd420b829f80634332c184d90856b9efb09f64a788a0333be74097b4f68ec843a86724ff0f38eafb3d08e72fbbaa411451f97e1a87eec1e68434cbef61b4aac7f0d86b24361ef0fafaea5e32b6618336ef5e25480287b35901d1ed75dc34bfe0590f7fde24edba3aef1c796e95ac3453c88b8652c2df8889de8c6d6744b41f87e498ccaf2741a9c0311793d4097180611d9eed84748574ecd9a5c00ab26ef58331b4cbc9af504c34a700be44393e365540b3bdf8e552867cfb5abf8417b13509daebe758c24e24704565d16e87ef2553853c50df1ff1298a9200d4ac82806dccf337949badf601b4fcafb8b29b4563358484d130e2c61f4f9db6c1ecb5e4eedcd97ab262b1ef5fd36beb541b7ba81a8d25440b5acee82290502ef80730fba48b098921cb7f9d3690373c02ac86cde55261ceb18c8060904d0b9312aa508f0adea7bb988c06eae60d199794fdb0e2ccc3685e8d0f5d1311c88288bb79fd75aee9a692d74681bd0274e2cebeeea7aeb64bcdbde038c2495a151471da6c57e495fac6f7302842a8f6f67c5b95061542fe01f4c8d4c78f5586ed59f9be294ac77dcbe409eb024d3af7510bb709d5314a4e3e717d587d5b6613151e9988dc89b410c35a5e38cc8a2f51ef78472618c126cbc6339006eb11a797eba75c08763c4054933f6880e6fe07a91f05b39fd0bb7573146005f5c6aca0fb49f1f19cc8683705cf0b969328dc2cd8d7881d17e66a288f85b0328e5bf12cd71c4d822eb29d87428ad382e42e8f744ea2c588a827d45268a0755e23417982ae1b031d816d36cabdf4028bfb99f027e803ebb47e6d4bafb712ddd3179cbb2e42165ebc044396494ae4645a05c28e738cff53cce87a69ea7ce0e15b10f9c24b6a2c6865e90b509ce89d10a1df14e50a85fca3ea539f1c47c819c57d05419da7c19591cf0f0955aef0b6688e77b42583e3ff58e7d1ce325f7d366550ddaae70694528cc9dff677ada84cdfc6b20eb86dff84916273ed2c198d3721fb88a8d4953bd6eec3e4ff8c4f7b29f6b29c554244c137b045ff04ec013b1550ec10c5a835ad083f025ba216f6998a0f9bc26dae907bd92d91f456a18a312fe56cbeddb52eaa9f1b2bf694fb2556746ce367dc8c03d7a12bd55ad9cd98b3546fd6aae3499bb5ef058cdf940c1b08c169f0c6eef9c6a1685f386a8af9fcb7a72dead4b80c004e3aebc0165b03af80e154f5838263eb464fe4b6e398202e91c22fb9b2488f0e1d8abca992fb8ed7410d1c1738660b3e00c67c7a0e5b7a9b597c4b213ade305e3709050c1f0c3360905c742f09c596e1c867a883193a34b3af9cdb96a2110ab3022901c744e6ad803248ec27f941c2db698ff12132058757c3bd80a9405640a79d01a2d0d44728a58cdca71b48ae3396026060effde9b2752ba71f8104a0fc0719d154883a0e485a30ac07f63cefb1c2adb05341cce720209eb5c68b3b9966f243efe5982e5757033339a055a82f18eadf12069a2c833a1519f3a5b5ccb679603bb42293c8e6d5c582c018cb6cacf44566c042526e684c0c1efced5d8b8129b7d6e99b60c83a22ce8381e343b532559fc42f1fb73ad7a4c463e061a7fa247fdc873adffb649961bbaaf612b2cf2843ede7882e925f8316b144bdff70f40c20cfb70aa27d4c1db9a57aeecf9ae9a946142e8fd71c345c1b18a9e2d37b6af2ad4efacb382ec30ab6d82a70b6e4f64d0639e5dacf7c7124af0b94d53af1f5dee1090daf216d5ed544fcf4a367b984bb35f5cd8fb6d92c5db95abfc5e7952997f7639e935b31ea79bdada36e362185a65f9e0a0671768500f89141cbb23b9c8f9318f83edb07a99930892e9119e75e5fe1687ab3507f40d39127662d479acba1cc268b153b257f81ca499b467d5ccb8d416bf9ad9cce7605ecb81bb798014ebc21b5302309c3f1548761f2fc6ea5366f397200695733026b9c2e7678be1503a3504c65287509cbe3b0a2b1bef8f3d9a2c55ee5835b6391a76d21c50e525e9d4b2116c7c8ea800a47c210229af5d925e3349d78befc8fe558635302250289f05691d3bdd930f0522bc4a9f4d3225955ea9e2bd17f2da083fc88147b9743dd771a07efd84870c4b6145cfcb977b7a25acf85818cf22054d97aba7dae91881ff0da6afb8c2d1b40f82cea7fd507fd8a664a4f245ed1696c7df9e445e20069e749e5cbd707dc399f697d5332369d1b4163e42672d5b1ead50e8a64a08888d157d7a1c7e7d316e9deaca5f516650d28e5d6cda0185987b94f1fd5f378ed1da86394dd40ef625f78a71ba220f9d94cf52e9a0fde8c5225d33c9bce69c5eb99b5b1c07b3bdc816c69983f01e27088e76f028934ad6482418b76bf0f878d3e18b2defa14e44fc9ed5dd7084974af55eb0805c29acc52a355c2a6a6598e5528a8f5d59445bc76cbfa5fd0cbc830cd5098fcf7f21cb425fe9017908f015a12963fc4d4fc1b9b2db78a582b6c5bdc8d8f47318745b47e2e49deccc83f76b45d12a0dfa318829791033774b319411fc65c76402de1e3e17f93412dd76f47989d7791284490d587a596d0c85251fe3837cf9508d8b2ab8df342053e52954baaa3754a4e0f17e6ef73e75a5c273b0d1069409fd8c9232095cd7ca02432320c391e684a186b47c29ab1470d8e00ac71a453f7cc5ad805e744bca36ecf4b33eef0bfa9b9f24a5c870829e3531def5e9459ad4431e4062938b994ed188da13f0f53b8d792dbbddedd3368bd50144a09849f3906872eabbe6ac7b873e64ccc0ad15bfa2e5f7a25dab2d3637012403374e0713ecaa34220c2a64ec0c8cb5e966e75ad7712ed3451513c01693af126f1920f11df085f068df3f149315f4ed92bee1003c938656f2f6a5ecb119ce8185e7bec147f8c97fb7d4232b21481a121c59496e5664eeaca8366e74736d1f637b1602efd37c2503480514a8faaf1598b858ac153d547a32a198fb2cf1fd55ce4cc7cbdb19a20782361ea5ebe41b1fc2dae3ebfe8c11f209c76ef95af62eba84532ef9dca17e3b5d7d89cc9799759a13d6bab50d332567f1d7776d3dfd5978f7c05b342b864b8f7c587eb36831aedfcf42b8d922dca7e3773b14bc7de69bf4253b3bf590358fa0e11d89048d443c27c99377a39a09d96a7b93dbe4e6c1e9aad4872824d7ee42803337352ecba34cf65d6dd8f5f0231254df6df94fa5206bff723136f660ff00c06eb0259614f1b93adb280d1cdfb04e44164e2d5a98863bfc35879067a93c408a600f788d7bab476bde4f60b1c9428dd0969367a913796c445c41624528aee531dad838884af898d1ca8a19e7bf045cc9b506b1df06eabd9a852744d5229a61e04d7414d9a82c70e85fb3f05129eafd3bf9b81aec0a8ec027ba9a3c75e2e336fe6a25064379d7320ec83b391785e119c0190b40207a087abf485be42787d64c811ba2a4fec6a19eda598ac133f06592cd23726c25211fd377ac7e386e4d83bed903f8870b8a388f51ce3b6cb188473e90c0effb1a16e766d899a403d4d98ce8d515e1cc4e3eede4563c982f1e3acc006ee09a7bd1abad101e1bd81614f541535e42c78924cec2f95b43cc5dfc89de017d9c99820439051c1f85ad49b330ed8435085116f9ffb5320299d223a5f1261f12713fa8d0bd2d5ab40e773f090df8ee008a0a366b3903b342ccf86a1fe2f441b7a828090e0844341b2e03a1b404b05fb3a87c76d1bfca356ef9f216b051f08fd0382bd011d5d5d9cacc2b9f1cb787b3849caf7c2b521593e3600eb4c2f9111974e2be4fe08fc4286f5a33bc72d2d2583dcf9e1b63da0c3ffbb5776d8cdeec6729fe305a30c4f52a15e5269d9fbee4063ec3cd56450cc47d01eb53777c180212851fc4bc1685715d6e1ce3df15d77493dfbbb8c5000fed71a3f1482451d23df10c67daf201dad7b40078e51260294dae1376019ac260dcd88f849cde7f43b74b76a9565f46ee361957133ab34eabcd45b13094c7406006236a0d90be40b8b4e35d45fd3089e6c5f470863cab4c843f605d7340860fa3942a0eb719d2ba207743e2fc4f29b237e6dbe72677ab8f3e0a79bdf473aa9fd609a870e084e6ac09ee92a1dc36650b0291d7b0cf856b9ea6c7682bd0f49f3017e4652bdad366a57ccdf3fd99b84fd80a623a22330ba86bf093b82e023168f7a3ce77227e8935e9df07ff4ea083ae9eaba3bb2499c8eced1a3458c8bddc397d9e5fb35276d54cda3d39a37df7c6420fd9cdcae8a71577da4db42228a241b1109b4d8c424a6c3ac34092c251dc92ecd95e492fcac81996031f11e56ad2401f51b16a7893e99eaa215a0b717069045a7445ff6a16e7a61a8977124d675ea1bdcb7063e4af9bbcd07e6bdf6b716e3f514e699e9af772f78290f544fee031a3c9456ff7e9d2c47d30f96d56a6d2f0b3528723b95f4f8d0da5e7ccefa0f342a7ad4d558adeda741a7e06f950c21b816a8e7a566696ec753661895fe90bf10794d42dfcc874e9a9a2a89a098444d744a2f015d061805888c0bfc36191a40eeae7ae35e9ef98aef5ef3b8df3ab97a8dddf0b7a9a90d9485bf1dda925d883b4531537edc7be38c4b95780cb182074fd05fd09f24829774969579fae4cdc7f4e655a6c98b621f89cde7939c87b7e1bbcd887017e7d97b5f8d07708f2303274ef5f8b88e735bef38f1ac33bed73d3d492d9404b813f4c40f1888c6f9de4c80fbb1caf05d213bc9f85161ccff352df46196837018064e57aa7d84ddeaede28ac3457d139c58a7173982d0add6121eef46407bbc7f32e730b860fe00d65d074b5e8e4ac6f9cfab3d0b1c19783e752b5418180134410f0cf1a93ad1b96d9b326180bf9ddaf60b28ec65867eb141016e816ad081974505410b14f1063b02f5b297aa7e01226d8c704ed13e96d2a3f4d083efb6983d9796c362a594138b7a9203a5166de016e640bd101b19587213e58755004d2aa8782d45747bb6d313a56eb1d230439d94d627b30dedc6da14779a4273feb31462d1761241e966493a8443f728497a8132c2197308ae158882fd8d08797030515582858c6af052b20662b4f1e38671a986fd8dff824b0c904830638a8b2e0b941c07d4aec121d2c5fcd4c5ab5a2cc52426b3ae373b0b96d784cabd0de1741770abca0b1e475dbf6dae8d98fdf2de04826a0678e37b3a9fa5344ff564419f573fe9806dab2ebb819d59a36f91d2dd505d91b2d0537b8cc01526bfde2f664bcc6eb11177655e6a253213167c59e32b00c90a6ff4fc08aa9966abad6ba2f3c60a252a8809d757d3e6ff5ead0d068f6e4b9f013697c22845360e9d57d6b19df210b9f896ca4eb8d2cb19821bad83a91cc0eec6ffbc4c49e6289e866aeff5a476d51833cd68a0235995892a31b16ce4a286b20dc65c18ee32df97a2557dbdd8e11a2d21b200803cef707986248b2f1068005709bfd5706e3f2b0baacf8a5cc2d200e5d9a26b34e9f4a4e87c1771802a29cbc4bf7d8f2781bfdc26799c817690bcfe24b65caac9bada0d689a9ca599d72688c0f25b22bdb06178c6305acac22f0bee32675f7448b1b5cb41986e6675b256ca830f0a59cf9dfed015b9fac9c7abd46550429b51c70610beb792dbaf44cfc63ade98ac4fa97fba21c3247831f50e11b73cb87791a982db5f610ec733721e261a46f70140e6df6b83ebc00620aa3dcc0bc06aba841cab3a34865af95933063c1ee08554a76bd11288ed197407a621feb736c85444f398d25c5acf40a62f2a69c04f6082b85718bc82527a4b988ce0d6effc54c4611e2858d90b2e7251bc9483ac877d7d0227d3ed32bb85ec7552e4c58e2a71e5f96fca921527743862f7f9595517c82f6ff0c4fe35400389e78e159bf44e7adcaa919728c8ba6412694aa4a46819a57d653d580581043636f3f368ccaaf99d311346cabb0be8146d58633193f7963427e2fdb5f3fbf3317bb6cab59d80ce3ad893a6e7eeb700919678d1e9f7a39a088c3a9a1089debae85f85be336dd073d4a9529afc035a3130d369bd3f330814e7afab4c3bc45584c087362731093c9e2b81e4066c197aa12f866fff1048b5122fc176e1a22a8cc348fcc281a55ac4f3752f9b07556038f89b70afc2b5a7cccf8198f0f9919fe9d56fbf8bf0bfad83e85f3000afed616b51bf00d9e482b82b05459d6730d4dfe8a46edcde2deb125019bb3427f061953d383abb5baa0ce34d5ec9201fa7d81b9a4f51f8e08e948fedcd0de49db8ac60cc695b94595da97433e947be0a68dc629f5e0443da7e0d3db484e165f9439739d366a08cd15c8701a78e141d793a22eb07af69e3353dc5450cb7e70bb3a924c07c6417e2ca56422017599c31bf4aa97e66d2035841473d1763544ddd89a3cde6d7177e4b60a0a034c10ed03dbde8dfed626406cb48c3a62d19635d5bc9ec9dc818bcd44cfaabd21cdfd1d6c2840139db5dbaf1e25596651067e22aacf48c602530e0d07c095a436945ed9c452a75c7d50e87883a9327ac05955b2b006430a2314d0e5e4cc9b004041902e68fddc645cdbe7b0d387cbe62e42e75cfd17eea439b94e6e2ca6d75849ec580acced8993f1f54b8a51bec8321877cd6eefee7f60e2ac092b626f9b1392fd224a4efb80cb219aa1ff41dddba0082b328e55b6618c1f295e99bd81a55db74d3960236056b54423ff8f06e9afa02849245c5a3dd87aee2acec7c33817510e8d6ca5b2be29f6e5265a1e1a357240e763e5b634ac73ffda711f69eafdff9e00dbde2be82a397b856218a1524c31e11c57278a10a090bc01a251a8f1603a060f21c69359a9d717552e6ca2917c72962bac333a67061bf3cc4887a37cc7b0cddd5b10afa70216d12828189bd060016287d1652fb8ea110289d347a5e13d43a83900ff745dc0847c76e8e751e579213cfa275d1ac868386cc3aae4901d440dbb1c9ba39381e66926f9e0665e9afddff202420af75179295e9f61ee3c8b291532ea5b5be80fb25892633374bcc27042282f8eeac430d0329be0a95630eb7e201ebc97d98f3662a5ddc6eda2598b19eebf66c3c5be4a40857c3fa1131e6dd3d0e38aa16ea427ec5964f44916967fb5089a2ee4c110472cca545eb1cf1acec26d4115ef111294e95801a7eec86a6982207d3345fe27972c3e9362d6fb1402f78012c43314a197beec41bf697149a6f722a257f49c467447f5a6de9edac38de0c2de01424f01b61927fa1f80d6f0cf5c525df8e9f5090fb157faeb12199e12d4fc24e057f06e142a7502aa4f31c8856fa23dad30cf908ea9300bf4400e8a36afe58e42843abd10b090f2115bd5c558e174becb4e3316ed973ac8237056f3f097aed805c7478cacf8ca8b660e985adf894f252671824db5f5c2b973c9ed45e84a355e7e765bd114f9a28d6428d35f6a6ef226297fe4ee71fadb2d5c8e5ec612a498d5a645d38e61054aa427f695ba424061be24f13c4c2c38ae4ceb7de0a8708994093accbc0f4643b99b2c43aeaae7c096c66f766d7b97f27ae266a77062fa901c2c8cc63f1dab2363a321dc5acc16dcf87af15bbefeb5d572ed7d571a1e7451d01f84cc463be7b5a0ad20e355d976a6645fe531b82b64a071428423e949a0bd48eaae808cd82eed3a5394cb43900c686366f65d5a4cda4248d9cd495e6927065caff13c0112451432accdab330a72daf7b279f6405aa958d8c9ca0704485cd37b0342579584fd609d2f86b1ea6172cfd8632a1dfd14c7f976fe2f9f3bdf7ddcf2fafa8bbfd27fdd1e5765d85a435c7d4d322939c10a7a5f33200a3019e852b3ad8409f54c56b6ec573ab1e5a28db4d2859353be09b1d5e1dc5828ac1b386813f3ee7bb9ca645778533fc10a55f7567b570067895a46f25bbdd2dffc347177d70405000170bc151c6e7a66dedbf2d6ce85bb1b0e3463591ff70c296e451ccafce7fa055c4f6020f2d334503df0a75428a432c8ddb17d5722ee68e799acd38a32cc06baa0dc56edd4de117fcb07a71bd3041750c263b6df58d9c60ff00e9bed398d3bad1644510700efef1c9dd0085028b93dffdeb9c5d5ef68ff73933c322c082d31586da6a7662e328b29be477d833795561ee768bbd185e1badb03c2689fe470f836a264ae0b2f134543d1b1ae05c158bd33dc98742019a47b612e209669bcb330b13bf402b133dbaf5d7393ad004d70d830f919e9e4c9adb1e22315625d1fbbfd24d443da6b5edf837c25dd2c2338ca68391ca645f2daf4c1bcb128290ba8e65b6a889d10cf3f0c8639e9d58a33a77a44f54c317f78ecb5f4011d8a11d3801ada9e1df6ed08eb9a702e2d6b8c6b57d7df5bb1e1bb4e0ea3f0c68ab2ceb257f6f6c3e7fe2c1da1462ec6f095b2f134004279bddc6996dd77f752a78900559a9aea3c9049ea16e6372c86b170699eb1d597e0ae42535e3e137b3ebcae9a3d5549a4dc116c3b33297bbeecf8b22b9f05f9cd6bb03c45734d17c85cb89812b81c4779c98942b3f4e9d9436767b6e248c846ccc781d3465bc25271741fdd6a525b9aaa89a7ceada2a0c9c7156da5bdf4dc1ed20a980ff3683519eb50b9ab12c1214fc05288792dc6938f4aabcce60e54674acafb83fae05246bd6fdeccd2f0bd0e64851442228b241837ed20e6d9501a295956e3cb141087b6b0b7f31784607f3a521f216ba8e71740973b7d2d0377c0da7f98e2b91ed6251354bcc137668663353eee4ebc31abce110605bae8f7f483f459e5cc3dfad57c721c5416755f941a3326486f4a17e7f3cad2194573176829fd4648e7a373695a123a2811c1c247648ca9ac00e5a109cb3710df328fedff8a83143c88f740136209b2ba935bc87799badd7a62b0696d1e8eac78fff3ace0fcf7a25c7aa08295a1cfc8bd84e9897e61e9a727f3156143e2f64fc201ad0a2b4f1cea43cb4d5dafed8d43b2dd69df91853aed6ba92b79e85cca6cc798ac9c052f3511eae39d25931e1cf907aaa6b0f5047003f139fa6894dcc41db395dee8a627501c5297fd14c514b159ad28c5e921ad2c16c48c7add856572b727f25502b07f6f2c617cf542a7f243875331557f3f55f5e978eb2d6152e2188041b062225ea555939b93fdd5d62ff4351e4f5b84f6baeb0e9a4e6bf57e3e99f6334d880696de009b43d7cf529bad763fcee7ca023630b84ab7cecd36b59a9468a07a46596191871d85a9406c228aa9415171b890b606eeff1ac2e4c3dd1659e900c63c0024da296d8b66e4dafef675eb85a26a9328bb2f0bedfca3b44cec49b28c0b3c127c85793fa3b51d2b653664142684b92c2fd569bf8de916970baba14a5ae1a0f03450d3f5b5c643558baca35e7576ee68041713128e9de51287c4794c7031cbbf71e42bd351bd49d8f73227c0c8cbeae456a507d0c1ecbeb77bdd99635d8ffa571f99c1621eabee7e39ed83b6433567d9ae08eb2c1af40e6768eda053ef988def0c8fa646d00961836c9130b4d6696d1e6bf307964a9cb053d09c9d5ca9baee9976ae93d170414bbe7701171e92723bc517649722a8c6446f0f54ac482efd1877f2512278252ad79f036aa259598e735d58bcc97d4294248ee464759e94b3242f542c7a608a92ed64456ada89e08e77552f3e3f7a2016fda7566c2ab97ef93e3f667c0819a70b4991d75918d5652210d1a321df1e77f05c04b94fb6a3fd2ff3838a8d69bb855f6f0822781769b77ea6e4be5c0dec8433b6f22e0842a618020405ba85bacc87b3b0efb13522e5e8cc2616edc099539ea98fd0100193f33605af32528a0dcde0584ca10039e07e4227e74693375a3b4bec43d529dd410bb387aa3e797d1676ba702870e7d9946fa48681a5c7238a5abc2a36bcaab959a089be8ee9fcfb99f383163e31928f674759a945575bf1ade3217b19d4350d26e25e053a4bac27708e838992411281ba192ed13d71dc92a2fc12ff74c26e8fe0a088a46a4faa0bb1f060b25309208de5523db5298980605a6783ae511f1423e9132330073455e7ec0ea6673a452d65dd92ef40ff7f054161e8635e7670905252f0bb6bf4363643133dadfb85221023312108750596ca9a5e6011b6ef1aaefa29a598325d32fb2ca2c63fc10ebe0ba7f8f4728c63bd7dfb2072a38c294e4fddd0f15197044ef4ac7ecd953cf63ce77e68e0aa4056ee01f9a768031474a9953bcbdb150bb2de50d24a04d5f78e6b92db3664dbae77138006a70bdd66dca0015a069c10ae4b9bb770fd259579bcfb9cb088d6359171098849ba020ffd3460d3ec06fa0aa27c35038591506f2a73c4d60d7bd3f3210f1e8f59446e33723e14fa18735f9e054ef59cdf0b6ebb9134aaa0561e81d670872e64cb949b73e48bb23688e9dd9db854444ede04f3e08cf99306fe000de892b4a43facbf49dffd94dc79082c20d05179484373705a3ea360aabc7f535e51269ecba37be77e1f306586f90ee51c2addcd185a4bc70c3b89f3c68ec314f2fcfe9244b44741574b41d357fbe7e6e1350713275d01a7ef75cdfcaad2764796a8c8a4f57130c023778db0d39b0ee8cd4942c56d40d17292f9effc2246a7360b848f2d9600ad7804153473ba37a951f9177500346823c687b4c782a16b490ab0e69fd7ffd3fd22c857b362754453e36a42ced9d9f7fe0c3432380e05cff542fafd6f7c0bf3fa10a149585d8909dbff6b7dfa5017dfcf0c5f093b014692dfcfb9705ee72d2d31d517533f69b8fff47058e559e84a6a11187ed74aec6be15cfa47b2555e06cea938129bbcfa37150e864cb83a3b9b5afe57c8904c30f39c2439e2467720e09d6fe1ea79ef25271267b972c89141a60ebdc5ab099c07f06ef6b6c65a48ff9a14a8c1db71efd459932347d0a03e02fc7958cebd33a6ca55836fbd033ac4c05101094d536d967ff0d599de9145894f58155a249697c094e2ebd1dd41a085714dc6a596b75326deee57169f6106aa1ce87c35badfac7cdf721a77af11db18725748f92464bb18103bc3dcfef484552e989eca1dc9ea1149ea1d13520d69f73bdd8f12f5c0188604d43b38db617a0630987a0acd0c4830f0ed087212098c327a7f55b1750b3c5542c1443cb8c4ad0e6247459c763af42476dc540f3dd9fe38bfe0d033ec80aa81cfeed472132af17ec5fe1210b722f1fbb119a55f2e9fa0f33073468db94333168e98ad4fcde41dfd9008b164d697859a6d3ce43508e9f91391e2e8d8ac8abbd901b8b2c878c1e56fb5d7a3113425cf66b8569d7fede8c1a82260e99545bc1bfecf667782fa12f7a4ddeab221e68e4629e37cd1a9fddb83742d113750005bf7b8d2dc72ae61aab39c0eda84fa67b297748c55273db45ca9bc8d2640a260309968ceee8ce88e4727cd4f5b055deb43343d21d9f9bb188eed6cfd5448b2d836a766985e752aba28fe35b2dc17a61b0208b6838e85b4645914b30a71051dd3ebb16396c11f81e0790c7a8aec8d1131a3003d25ce519531aa21244a1664e169732103c7438bcdbbb8f1ce613c38d39eadc06a610666662874a3a5ed5b3cc1ba5bf9525351591cd6b9d6a016f141070ab98aad1905671abf11cd0e2eccadd0b6d78b9096b20b4ede9fae380e8949299a4afab03f453f0217cc1d3ab794e3b02be1d6303d6feae0985505365b25110083e82201e8671de5f6eaefe85271b9855ec23c3156040939bb934fef708205986b6ad38e2fc0f32d4bf7b0b981470436f176019720093a3fbd876424b61a82785b8af78d8e7801600319360d5ba1955847556014aee728e124b4aa9ba64aca8fc7b1003742fb73aaac2d0aafa01c6523aa44057a9ec35fd3885a688ca96efde61456df8531415b0e60000b18cab00abd9634f60095691d2b6dfe5e9c58276b9bfce6e7a6616bb7be71a19298ace0da25a371c143b404782380afb85b8205405f1600699205935a94dd3c63bf51c3f81e93dcfcf645c8afdf52ec0149e382e309e7644437d95e8bcd285c4ef34d76226ff64ff023c974fc7c9e025d9e5dc6a1a389c61701eb3248b663d665ebbe09c573cd46aa480afaa7484285c9342edff43f571f723c9d0d9f28ff6d5e773910c32105ca1ae1df03421dbb85f31447f8358d08c23ecd71b9b39b4f617684fe74c5dd59277341341405e6bce616c45d63c8b37ac7923ef8d88ef9998d69681c8ceafd3d8c5b141529934d5bc30345bbcf701efbeee04d7b0b0cc7dd4eb031285e17c052815737ed3db1af19e31c6f66fc987adeadf75e5ef0c3ba6a4677140093aa06c4ef3e2af1a9a2fa3d84aaebc618231ce9f1650cbd9475da419cf6984c1f74928af23b69ef7d8c92317b55ea372bbee8974080dcd16309fd7189320f4884efd7709f7e6b4449625aeb6a791f4f305eaf39028e65a3fee9d465ec9ed940f6d0110c484a4f866f20bf18a42da9c7956f5cdfddb4940bf21f348cb111dcc3589c3eb598d9c4c939bba8b5e72b4613f0ac9694398612b1ee7de4d700ffe64701c8c72befed30a34c78e0a0675bdf9b55f22f1fa4da5c37b010fbbfe2c896b3aacde5b75d93f435c44aae6a52bd6b82b89ef03914bf7e48b5e8808b4801dfd696fc5b4590df752b2393bc9960a26fee369dce5d44a4384a95671dee4ad18e6d80809ac7550c2ec66ba0f5a64b3d3189c2ba4a607cb657998bfd372b430303fe9088c396560df0f7230b23199f5cb146a29c5f73c6fca73e44fa422e2bd49da99c53a90ebbae8cdc5414668061efd0cb37ff7a04160a2b0ae8f78e434e0fae88d3151198b8173220d1799c09de31b70d7d65c27605b90e83ea444b655060541e901d56990574a2f7e97d914abc47e9aa4d3bea3fc9f01e2fbb3a307812dd6a31248737f000f8e247669dcda8cb71df4518177cf6cf7a664a9d0110632d1eac58cdb24975f0fb7d0b914c270ea604bbeb8d382fa81c17b247b855dd77126de76551485cfbfefece6e10d99da1cb32aad94371f4cadbb2e3922635eb059d088363e3cbc424dd70a1f94e49c858223f7b9c7bfdbe32108a62d30ec90666559e398e88df17122d83ec5ab71a67652af1b3e739738ff755b3fa9383d914567c14a42015cfd002e619519c23567ac3b13a08bf1df633b3b8afa63b21a4657fe255095435b203645e5b3da59805b3e1fc1f69328f3e5b962042d9d3775440b48fd6d50cdd9f354751f5e6861d97c7ef2a6190146e1a65addb6a06fb02371cd8f5d44ff30a93fa0c94918825a63f7c712a2695799d297f439ddc5211b7d172050df35088e2b3e46521b5ae8a32aaf01918dc9258cf936acef7800d75603ea5ebfa35962636016d3d055f2ad55382308bc4875ccf8744084ab4302d4efe87530222c15005d4b53476815b68e342e5bfb091400d8936ff8731e09d62fe6d22d14f056dfebb2517d722d8dde36854de6afb64160d9c76383e269bc0e7077bdd9047b46e4956b77206b22b76adfdb1cc3fa04e1eabc38610496e2d1aa8409c1e55f62f441e2125ec4819bdd801d7a0515051ee549c4b0d80192c62485398006e2fe85c4d028cf652830446de5210fd9147cd4ce12fadbba404c047bf962a23e247525aedcd90146c35e3402b2fdeae36cd304088345957fcae60c8842e8b1680c2d8e44ae1472fec5c59b6449f3a182e39abf5cbc3053362b996a65ab19ff4ad474e8da442e14c233256e4d6b485378494c8e989811340752401a1f6d676d8d9a673d353d7f32e5e339fbe1c3ed8f5a77afab87c67ece0143274f512e5ff2a9e1b828fabc01a726abb474047959e79b1ba59ef9fe91961ffb74e52bf3bfa002735cd1cc9d2c9e7b27df174f0e68309a5f8b3d333d0cea04e94a0baf642eda17d75cd90098072269c61d667ba9ed4d459d5d4f5e041169f2bb447ce93b461eea0ef126e54a87b2c959a3cf62040a6e2e71c3659935b8643de14967664818a7c861b4ea289cafe861f6e73f90e01589ff710240b3db3dc880eb979313196857b88325d20ee57abae97be9beb0feea92b7373a193b1545ddd02eab76510b2ffda4ed7037534f97d14c5f9cc7f6b9fbb290f4dca79555a21f8fabc45112dd8eb28593f894d6ea603a7217437fc83e5f93ab63a858d9bb87856d0edede04d2dc49f403756b10ace8c6fcf2b4fac6f89bbdeeffd6f8ddf63f17c0c579266d1734d64a1d2638fe30a7192d126bcbed4a717f598ac221f0ffbb2a1105dbf0f395213fc61af537f1dbf6bb3120791fa8148c24aa5ea087d41c221be68c1fc828d41e069ddff2e0c02989b2de79a05c7eb07948da51905672123c0d1aa0f2076ce1b66cac9f8367884fcf57eb5b48bb45b94b8e61f63639a3bae7974b0e6d1b5af929d7f6a2a5510ad8c7a1068f5a75092e74792c3a81df353018dde956ef7751c197c7ed7cd12f1c807af6d5b38458bc5d6247fd12987e956a61e3ac3eb9cf784b03799f273f0e801e6880e818007d46dd9d43dbf1055d0922ae1f801abf11716c6c0c44fd1232a20944001f40a30de9a682e3f5b012cbfcf09b97b92b4ffaf364a81419c958362c850e972b234131c3983c898c93e52c96c82edd57a83dc1a9d85956182b9f94ac7c3078e241fbebead110304caa5aede922ff53cf664c3329aae4c0c954d869ad4e8a8df6ab73f78fa0094b5d5bee8b6ef802493a690c6237a210821759d031e4ed2a0ce8bc3c8dfe413cd5ded65ab333db5cc16dd3027af03d7884c703d8c87926d0f205f08386ef3c928e95e391286bc504cb925b41bf98344791aec4581f4a51ab428d8323919c96ea8edbcca5fa35a0fb4801e1f68033c52d27a0f3f1a490474f31b2755697661c764a7a19e38868597d902f12be74565d752ef8bdd78a96c1a6fe7459421d5913065e1647ff0e0ca6eefe7ed2e548f9c14315a11a2bc34412354c70cc1e2369e2c1091ccc8301b2a358c9d2a9d6b481dfcfe0c4fa9025a87b05e62c0dc7513dd447f913026adc7285175dd9f41ff50faa44405bf9beecb77bc3d26f8bf323ad7a5141dc612134355759db3b62cbebf0f1fbe32cccb9f79d45f2c271b044e611dd3484c7eae1f610c2e6d1ebb9b272fef6963f0322178684b96522c94873e60967fd51cc7919d1081ba6231145c4d5c41ce905296f0079cbbab50427daf64a7218f8ccc0dc1ec19636b101648b8e397572da45e487876ec1b5e2a8ecf96c5b14a347d7f1de4457c9afacf2ee9acc34716a89d2806e3ba16bcd4f9329fa51d7bb2f1b1b201d22de6b5f874f8964fc1166273d98d39254a7a0f49e5914ccee0d9f56227351266dfc336b34e45f521616faf2271641f0d6884004a26d51d74b0ba220fc948048abac46a020c4fa2122aec16b1e89d8493a3153f7875f5777eb0041401fc2695fb7d949fc8a87825abf5ef8fe9456c5c63171d23a14499f094655aa2d9da7da697216048d8f97caeaa42d87b3553e05ae97ca65658776801fd7cda71305580b92a9fc0f9b9fe753614cb8de3ff45d912daffe3d01d36a740d42b9d151871e42edb1888f0323646838289d52293e56c2a909714bff240636e7f733744bb6d6f0c4c116d58d6a930ae5eb994fe3605dfbf2ab38e3a013e5caab46d56931863e872cafc06eeaac4b1a5c535b8c6250a1b9d2c6e7f0c4962fe0be00d7cba04939995b1916874ed4551459a406d35349da2585822b5ceaeb9229f3ffe7894c9f58541fa5b8fd76b726ed9c328a7b2e5e9f3a3f6d5f694521597b52942c720669b065220523cf76b8e4dcf1117ca15711c48e888636178cd6a0503cf77a6c03fffc906e866fe62d1f95b5a97528f65554d60b7ea28af2cd83ad9fe4bc96994bbb1c31465147ae9593d655da2e238044c13009f1d4af0e71295672207370caa3f9bdca17a6d868161e39bc62bd604896652bc61df06472167a8def3fd5b82e26b9f5ac323078ae190d1433ad3be453aa10b4d11dc4c30e70e08931e4517f0457ab55a6c1cd53f90d9880ee0c98011bfb44ab687343718d5aa13b2cb3dc8fd20d0f0afd4506597e332a7702707ecfb68070c3c1f757eb131b36ef2a37a2c53ade225ba23d55997d56db78768a631da53417fbf73659ecd6d9a1b5b224c746ca9eafebfc3c5b10e4524ec0e1e9f576f916d795d2acd015788d35de71f4c54408f983ffda45973e511954d20698e4702869aed268b43f3320d8908099866696377d91b2cf7cdb4ab52f33d7b4bbf6ee4529a4baf4b4e60e1f59e69183f879094ec6374530c06312204be0c21fe2e190c53ad49b404b364a9e5d5bf105c8c7fafc6dd9ff014c1550c573be3949fde76461e3c1a713e012d19e5fa8fb96d9a6d1cb73a50666c52e11761c5bc4a1b451aab54c05625c78587e5da48359cfe2ee791ac6df1020f9e400b9f777c43f61bb196b83e766cf8af1c700448d008ae4fa25224b2aec9fc074f5d552fc34e19c52a77933627dce04bfe2342c8f3bec6dc69c8c981daa875d3369748b6028d79985f502226a7334903cf8b626787a19fb732d179599ddd89879f459c6703a0ac7ebfeb3f68b3766068478c8bca091d0828d51ccdf08f58ea56e103314fcbfd76afbcf4b1796f797f3116bb696378ef302f2cfbc241fcaae5346431d13fd89aa1f2dd03a11058034dd511d88054badd20ddd31f9fd5d6fdb4e1ea5857783d8947fc64f240b6c543671104ed6c17643223402c64a35d6fb9ab5acff1c957b578fcd61812852b26814bbeaa0243c14431cbab637ec2297dc8b05a6e6ca35e42bb411770a72608d50ed9bfc625e734578f41e3804a7b2111570da364708f81cd66a7ab3f0a10b4a97cadd3de5ab022b63eb4a183011d2d5cc18f397bbf93ae18be52f681678f74d8cc97cb07a4422a005dbe82154d403b60294f38961a9ca1d23f36756f62de28fc197d9bd73be62cf8d931a967e84dbc7678d721eec1b3efe2dd568747ef7a3b0b98d157f87fb9e8393b701cf20dd58bfb06e97e1e8b54330e04c06bdb01749f99a5e6cd26df2afc75e3924e53bd36f3bad6c80591d05b951b8031db06c675754c87573463e316b5d51af426e4cd202a4bcf5499fba26d8f97c0c360b0b49a66dda0d382acc53b3a0d537e3aa55d0dcb97068320cf192a490a75de4c3a4c5fea367041d42209b6a92b9fc65198a478e9a49221a0f4dada5d9f8df15d713818bc9380409da354a9b0b0553231e9b8be7199cb2e32a51c1f78b8492acc5390bf3fb0ea93c5baf0837665e5da6a2d1378c18694c3783b8038b177c730804304f2869e4b2ee0ea620eb3c40e0d026d9c024ca59880514556f270c7565eaa07a6902b9d63de71b4cf4f8a67196f59824c5da170b28309bf9bac5a188e914e65477f1d5463917a6732942134828365c8835226fb6f3b945dbc98958e5531e12270ba81665471e56481034700717e755c1d6dbf2184f34ca8bfa0f524ba2d27f16e4edce239a29d975e79219a27907a3df1db89d770f0639766a6ee9ae2d9a0ca772e75e59ab6c7f7b43859926b9f732c5df4f45669d9c9f0523f7512665002c81741e08308ac045a4dfcf9525fb01c5538c425040b9619ae89e3c4139ff58e913739bfd8ebd2d65f9044f7b55baace005e4c6fdb416e11f34b95e869e7e1389ec558a7f7071822b21046aeb599e2630faa023949570e8e7f019ef3a3e3f6d3392309640eff306518a75829deb3928ce4a714d28a5de72fc52d91ea0bf085c0c00019a9ef724b5ce95a36ee45f9f81fe2456f55a1d56c80e1225f5e1ac2392fb40248c5aaf3f81f00858579b2a0eff49b831f5c0b60bf025b7c4a077f6e6317d3adbe0566f3a5cf9ca7e3b08447e15526282ea3b95e416c5aa5255b135c1fc56f88de846815ef3f9d4e47a8aa813344d4188154a2e543134b8761c8d17092640dd2a4ceb0ad5b37c6cf3f888d263b9f85a529a82111a7fde6fb71ec28cc5c83a0d622fa70b650d3d9acdbc00ebc76fda062dab6797f5f625577965c081ba9a4eb11c13582568d55af9f3055a0153aacfa1accb0b7d321def81e8361e19e316a637c5b5b65e9e372d29c2b29270aacfc5d384e29a24b5eae40dbbea91af3ed08f35f42d8b9476d23cb6620457e16f664c81a5a3c5cdeceba1a888d14115dd294f5b5e2d7fcf9a9dae1b91f391528dda115bf682aaaf9e147fa662268837cb762a7ac3cacb22c9bdffd6fc2c9161c8c3db2f86d7ac74eef82595daf09e5c260e1d467fc4392fcbade0477b50bdd6fb67e42c8d9b39006b04be35045b3e7659fbcfcd51dc805e8e5e18ef640359a8a01a885ee7e69feefb15f3825bc6958968d4801fa43a8b8aaf224e40b5fd86afc100d7ff8f0189aa9ebcb2f30fa0617f40f22f80f7b9d44901c8d05169053ed6a8e5ab2a1340c1208c665e40e87575c9c93e884e0f08e7633faf485ebd04bfae1d6c7d699a15cf34d474501889b8b9daec2a2f548049cea574c52ef5f6972639d7158b61f15fe5ac61b62dbe1e954ab1ef18d68d0c23c9654239caeb3e432ddf4fe20e17784fc271521f166847eb4486e01420c70e4f78645493e99afc6adcdfc45edb1d3d1745486456c04ea34d888e8337e812d23c8b9120839ccdcf94e1088e97e02499aa18284e6590f0c8ff8e4d904e4b882e25350d1a99a5807bf8dfdc0ead276f2831d3776b0ea6868a6a4b1d48031f6906a809bb1e056c956b65f392588393d8ec3ce077f8ff050a6871d53a522b414f012ae3b48f9cff8b649585eb066460915326469c35232f7a15f1522146b1120e4d2efa1c47c9f1d7d44680bc85317fc17afc182399de0c46c4864822ef4e71d00b0db74a7db580732741f3079d5e139cc94f470482049bd070ea8e2b9fe00db6dd3c367892e171865db6414dfa7c25aead86fbc2c8a85b9ff0a1ff474fb8679480efcaa7151cd3e735b6bf53513e8f796d728c5a12943758f0f78cc317e82c6207618233fbd20b17762cd51420ec58d5a6125c513ecd9d6c42ba123b1e8550e7c4771b5aaff4293b91afbb213bef7b3eccdfb29e03ffe4cf82a66a797398fd2a3a5faaceaaa645bbc5b07d287bd2d43e7cfda997c1c82c0a0b0db827f6bb7a9f0f5d19bc369ed99823e9ebeec277752587ad10a851fb4569dc87549cffb0c9e9ce998ebc51106f6e777da9f9360bad4d6aa63cb1c3147c1f3557d923cd66790f1cba7ae77e294e294102ade471cbcaa82dc008ed85edd1838d7ad54e3b05bf51c2e8a107299825eefc8fa4de04533e793d46763a7455140046393080d7d697a752a4168edb07ce697ed9a4084d0a779c4242c6fb07fd1fdc5117f1cedf91b012e6e6551f7af7ed0895767f9ceb2059073c14aa5c78d9e6457d5722fd1056dcbbb2cbfa6033be51666f9ff1102647401cba7dc3bc4ba5703bb31b2ab06b25a6832fa338f83e3025d32d0d72be8ea21378dd5b50b98cf1b622f117715c53369e0d9c090a5c7965520bb81f46a0abc4314742fe3a987cdfd60d0744084b01e1db0ad5bd9efef2c47c71f21157ca308fb41ed411649e8c9222c62b9b6babcbb779ba480037fbc9c4503b0fe4cf33edbef3972996d0a9fdd8012d0f3d7e2b586ffb4f3a28487fd525e29efbb7417b5a39bd118c911294c7e7c56b1503e20b6ca10692b1881227cbae6bba5cfd1517c4d094af30baed3d3c0577282271168162ba3808b88894b44f40105c6d77703b4fe20299d7b886003b2f957fb8f82d3a4eeed4ef8e658839de4880d26bdc3e72d65a0ea0e01cce1a9355dc06e76815f04c8568937fbbcbc2dc0c6ac2573e275adefb6c710261553e450608eb4ec4921c745ec2a751615947ffabb73e47a27dd4d16e5f5749ab4a8cf02870389b948deff28ca62f87fb16ee64416a0418ba5b0a1d2f54f001a7e64ec726a262b09140064ff15dc06708d41485c7dd20105754510ad427d03a9470ddb18b139bc35c83751bab2f33315ee3b44f9e6bed416195355cc50d2d788c5a9d72631ccb57f06d4cff722c5f216393e428a8b82f05e93e28d3d40bf874efab24f601e364edd3d1de0f1c958f91c0753ba0b693ac23d55bb05e36a65a09f3ff0daca846a496a8f12236c20b2d7f5e09f1421eb8c70aac5534ef849908f96ac43e31c9624eca76a21a091f9551f47f2f141edf2a66567eff155043347789b890cfaa8c8c41566289cf69817f632a72f33ca2fd9409b8b95b902daae22eb0eba6cd9b04ac7e6fc3c23745c065511b835d19b96cb8f5446fca307c1956471256e729a757d8cbdf1cb684c15d94bf7a368d47b8d30d0984f1a2d5b248f370f4c7800e0227e63515921f7c25b08251b1b2c1a08f0368dcb51b4116cd2365f82d43efab2bacc57a3df7339ff70ace2ddd384397719a5be0d56ef2248ca2eca01576d5eb89448319185ac8d64645ce6dca68a4c5398d4636a37f21dfa0ab45e7bb355041f8d1dc77816bb191b42d15d195cbf51a44e57a2d4ea5e3880830561c47851c1a2660f0d3425cfb8dfb6974e21ccfc012020bd59839a81ad99715224c6db5284a5fdd6d1f2bec72ee63abe62321a37ee2691d5cf2173dfdc2e77303be45d6567b8d1fddef0b7aa4c8a96f0070451d5784ab3e1a1a1006990cbdd804c0611a353580f772119ad66509d5f489e9e759d0e6bf386373e87c1871216777fa08eb0a8034051ff998020253a5cf4e392271f031aea7ed44a97d26197de832f6b66e46c2224c1af0405a64a76d8ef3c161526d4e6ba99ef24e276c30eca776c744f4f7f73835be6cae200f3dfb68cc07ed55db0810749a60be70c4a38fbc82cf8914aa78f46d72a83023e210ee0cab51b92ff56409332ba1f75eecda4f4fc587362fb50e682aa860c94a313ec1a1895e5ba5e9d9abd3d67437e9e2b8c581e02532000367f2e7b163beee8ebf8c2f795391e7d77e5841415e9b03ffeb70538038834628b3bb6a7ec51e22ed24fd7d45d5a5f968f9391e58fbe64eba0e182189798ee140207fa6c659e966629ac0949d1517c94ca4c314151f83a133449f993719eaeb63816ce1f36a9798e8c768f1138eda6e596fe67ad816722d68df6510b63f5cdea2d4875d0065bc92e0ee9b811de631dc43339f214012695454302835c474ce4557cfcc3f257d582add1386ec4fec7c99c0503aa42f467e00e009cc7602164f02ac71f46f2fe3da93cdcf3c30dc8c840d42c0b6fd646b64704fddf78e6589618e5ae97b86c72e58faa5d285d2896b00513e2e51205711c49c0f824ad556b57e71be9435f6142953c7566273725335a2f6eb2e89055df077e30d420b4463cc240d993931a68d9e4840e215dccadaf3e486f78278a0d245f2b137a208e6aac5ce655542a2b78b3e269936be9a2c6c238ba2eeaf5895811b40fedb6d8645e1ab6717c1d4ec491c02456dcafd1e5d8c0f5c0cba85d0f7e4763934c0f2751eb0c9f7a97a09ca8f6a1c41ce8be73ea322e4bf6a29c02791c87b31a5979d3d597f45d15f7ff854d312739c7b3748fed82f181950093996612a5c5f6ddca641d6caae70ed556f60010f34a7ad0b880b86508dc16cef352b9a49fa7e2540278f0b6a7e30d8d5e01cd54c5916d969fc56a49d152634ff6f20f14815b81ad1881325b56b78db1b726c3d940f6e4ebb87156decb0d9975f945b29e94c8554df58bd88cc77ad7717c115ec4a7fb57c7a8dfe4f7ae3b55777d978f3b9437a7d75ad510a12c4374ce7a85e66bbf927664fefac159867d035e187fcf198166aef4da204d477437ba85b446f1ba722539e60a9a2e413988b0038e4710420da24085a454e14a30207d4da484ee73e853c376540d0995914a839846163494b40c6132595037b96f5333e68c104a4a3fb369e8b7b8d1b16da1f4cb54369ffe7ad71190bc98771aaac936761034679b39e76573680156eb27bcc66275ca131bf178560d4ee0d888b7270a6b51f51f3b1a81935c2b136c96bba84cbd9b679791b0dd01d9b361a08e30d821bc3f6a692b159450b17411e9cf27ae384a3f622ed047445d1e4620256cb692f832dcdb1719df5981b23c7be08b128430ca6bcda691cec9e4d9bb2f88cc364f1d8e17bee8c8a454b7e1ead087115d5659d6e8e5c80277e546ec5962f89f3dc7cf6e4e2b90e2594d3bbcbf37639a6e7af66f9266ef88b49b17f0d5fedf1b6aa37f94009df86423af32b5409ad28937f409cbba2d8e35463bf7d85e456511809d1fc9d577e187af647db243aba7e5ba9c12588a4226b5889eb0a218e1935e4773f6461ed724e7cd72ae50f5e32cf73abac506874a91a1a17849ec4016649880d2cbe9010b0a869b0ebb98996c971d199148db74dba8941635b8906ace30052cf8e6c985e7f4abf7d9387377c47f53c2ec231ddd15f22a604216d85fe9e7d7ecf3bdca0496611c7337c61a6995aed6615a906e73f244982b04d8267b6fda0a328373e00e49470daccacc26644f79f82098b30f1533cad8e34d5b35200e66017e4cf0177764351b8374203a3041fd022d1c45535a8b7836e062ca1db4f6f145a2f3559be546e9bbde5fc1133275f45a30d217b928cf089d17ffe3f1cebc6032d43cce1957318f3e54da9c0635224b3f3c725624315b0cbf1e7b300943ef25b027c1b748bc4c3e0c6127c52ae4b25a1ab646136fc096d017291df242faa6c133470c7b7bd3a2cd31ac8d3726638bd3d25b7483f85b2c85a0215bd6f4c28706cf9fdffe29def147a3654b9129be81b0b81cc19164439943df31523e641ff15e29e0edb2f1606446a4d350d8337254862e9202238a041525a7171d2984d9d82e037a99c6123773de9318272daaacd02c069e1baad53c8f9f2fd308ea3233bf19292eb03f27889e90cfa6e5d31f68fc2889d5215d53ef937132352b104b380ab41bfa33938cbeb14a8909d8c18778247b8c2f7519ca6419a7bc9c6d0f94b5d177bcc5f05e435696c1de71da62b6207ec8b6c6883f326b55f93dfd6a08604f960ad0358cd51e92a0b7e5aea2ec05d2f50e5442da64deb287f2dfea9093aee28ab25efd4d0f0d94822af0754dad72dce34a9a88c29d3981846867f6a5e9d2994603c50102cc473423e2cc51a537e985fec0cd28c08957731138d2061c4c2c45ebb1e0bd7ea811a9e0e8078c3d779835e4347e3c429f10be0c5cd67dd5d3e4e9c97202c5de9baee4b083dc93bc9b3a3d0561b709ea91bf49d28a8b7ffa879fea358bc7be87789dd627b14d2903b5baa02817e177bb5fbe0e657e1cf168a60adeeaa23063f04e9ff8741db6677a5dea6fe90eadce986d40dfc3b6f8841045399e0c276aa413afcba14d9643f971299639aca981a0bcc0abf35a91fa7ad1a6aa9471f8c5af8990bf0b52461ce26d3e97ff71fba14f4a9bd58f352f73c3749e697873fc237a684ce38764fb1fcd75980d5e05abe791996629a319720fcca01d0c20b874fb5b67311d9516d9094205696b9961e8215ba0494963ce1b6a2124679535eddb4e1f8e4976473fd0a10d0f9c576dbbf36f4c49078797c608d7c5bd1c88c1ea2c344c3ed57a1a4b2a048b20686e53f86cc19d0fcda18de7c328aed7db356c4d2c45ea6381e3987d7627a493677d14cdf6882144eaca357cba9084227e6418343638f7f46bb6d0aaec89674bff8588f9d5a23527ee0c68c3b59882b282690b9ed236ca36b6d5022b0da33d19beef7e2343e3afca979c00593f4ad2d77c7863b2dcb80181e4adbfa1c23dcbf21f86d24bbe533831111e0012ec6b646bb1449b47a79596cec46d0eb9876e4eb5a7de9b79dadd55ca9d62007810e1d2b29007b36dfaa1b73a47312effe146d7308f71a692b21aaa20d9760d1eeeb684af9b1c12c39466fb7ca2f5384fd27b302f2df718873eb6c6bedc5d115a4df6729b5b46d732bb4d571a64e702e36d91b7d53f6d5d0a779c93ff9cadfe8e2856d820ad39d152ee0e3e84afdda772a31533e88b94b7ec355894e03e6f3bb1752b5bd16782a6103c3d266935c44e40a8e55a57cb475220b1b2b1af99dc80784656284a96bd71c781d8d7443bca1ed8e25c0e0d336d1660fbaaab6f64b7099916566b2dc05f315a91a4df0df40edf5b0ab1dd5aa954a9b155a56740377479131f18446819b462fa12cee6e1c47778a100eabb16403a9934908ad0e135f7aed72f0ca3c4acc894ca3e89487c63b443dcf81aaa7a79f7d8e4969c2715080f7244a5288c8c26aebf686ffba1af3b25ce8c2832a8482e7d7c315d1cdb2793dcc6ad7a67af3b72367d1d5b2f3e6e9dfd4f3f9d1101e8f35b000d18e8efcdd2ca5cda2befd3d9abd29fef572aae2b7197aae52278874f34b80e00f344ef0ed63f210ad3f0c5bd90bc3f7229a8ae252fc0b8a3c277a6dea2dcf28fe93064415f9af5e88a2199dcc6d27e3a2f80266f17722b5946c48e12e627d95ed83998f1ea48426de393fe6fdd1b19e4593f45f1c3f5fae4293acc79c9a0290d5e7766169e4146411b1dc6987f2d18f835f9cf19da028e925c3f2945be45166c23cd410471a009f9c6b7d73986900900a28969d0b8e0cd551569489d2075891adfb5e1d8cd275ce7d831dca2dcb2372a008464a83af68624eb48d6c826ac2d827fa9c0d65b1ac7808c2354b0bc4cda09db54f06c82fb632589aff95c4bdedfd3915adb2e677364b61e1143c0682a926b96341d373e4e58f0ebe5be5d990b1003992d4bd9156178bb1e8d7e2c2e2bb17859f11df5b79080f8f27dcf4c6d45307f51fe9c528f4196548f81c8452be976d64c876c8b4294b8a0eabb5b9804f51227eb8dec1dc6476c601ebf69911bd4e4f15667fbae841de81ffc5fb517bf0992ebff0a54a7d63a4186c0be06db2cee3e24d605fb62fd87d7f7dfc7fb3c5bd0716aae4d390e9c2be7cc669c4dde8599ec324a52f5e7d50cd88a9ca8418333be1e2cef7b356229b6e5a46d4e475238c6c82958af14ad4a4f2d13a87629f9a66d8afdec96cb1cf589ab4f814b9b3df1bbd80cad4efc4d84fb3ca8806644f56ddfd9ff66ed564873c6cd9f4472db343dfb8d123197ab0d6c06091a98de27dc0d35cb61441ab0919faea85ce3f58ead57a5ac152fe2c5c826e556d476de5bf229a8fb92db40d3a8427f3a368f25e87e557521a701592d6b39891af2b9890b683f8a0a9cd120cb5580fa8da88024975e4436c81578372a8f0d06248c011020d4e992fd8c8da1b91656b1173267fa58ba857428b70fa8d0dbf33274ddcb3775061c92993934039a3d217ca2101546fbdfbfa4148d36365fa0a61530d02692bdb0f00a75b18ede8ef328eaf286609688005d2f5283f4d5eb217da6e23801f652f9c5f3392911634c65bba39f1666f7ef5c1fd766686dbcd7c8ef3de4fc0c518872f646ccf82d0e4f031607b49363ec71ab7af9009a16624c4f37e92e3d7dd328ccb3b60185f68483a8eff5555a6c176bd7025c9eb2f20f80423d9627eb683dd57bdf3f983b27febfe2c110122899e6c27899b46ad0c861d2b4fd7576f0e02665c62cafdc09f0c5faff358da9a4e07fa9c5b41a2255ac5ca2bb3d36b61c67bbe8116bab4cc00931d3faa80b066fa9f24db668bbd8837ed828d6d13ca9b7b8287746d709c6d7600c35f947f6b9a376bef9b20fa0328ea0acaa82a6b2cc9cc98b9c041049f22bbf0ce093ae4b9e40d3cb2226b826431df7ef1d14d27c2b86db8f6e481d7e9dd0e1c703920375105a92a13bfba7253f633721802017ee6391bdb9df33cc7f1dc9525acb138e3c24207701b24d18ac88dbdadf0dcefcd356af6a28bc272a491e3d2768646abfceeb7803c68e7f7f69bc4d8d8051421b8cba44563e334c1c3d6177091ce7fc2b8c668ce025fabfe4bd8406d01d99c854311cd13694fb1e7b4fb79995dc9ccb53f229d4b9b2c98873882b9d41018a0e0c7a50c2087a95c840d0d2fed8e69e5b2f18400b1920b837f068e82a2d75e5191281ed638b4c88a2861a23bd74f30d3bc5d95878fd6bcca010092c4de11bc58a77ba94277cd40071d99bce4b25df5e34605dc883870ece98089c61a37868b1a6ad712d7f7d446d5f697c4d1a0f3dcd37b45219c30087db17f6cdf3d83b889ea7d12277837c8db493e446b7a952d1f97c3991294187ec0173b658b6b56ae435f9dd3d78f51c9d3086e7a5ba090d466cf95dab3aec74494cd9c45b2fc772d9a6549a29f49bfa09be8632dd6f68de409abf023818b5c81c62517aa085f856e2fc82ef9d35a5af45016cdece04be6152ecceada2dc3f5a0f10558f39b9c78f500abedd88e165905707863fcda96011e6b0718bc5b16b346ffd01562acd27d21db54be012bd67ff491f361a8cd54846271e9dbd1d63943acd6ed925557b18a995e692d0c977812a23b70845a25d65024a97226227a25b9238833134e11f229a19e6ab970be5d89f01d0bc35114a70a1e2210c5a7510019c61aba6b9da53d8d0a4c266c3111f9ffc0a745064384e4f2f4a292fc888541b21657a7206122e36a26bc48e92f6c70cd15263df62af0c527f8b50c4391d09700156951da99c2b84ff1d5df14c558f78b1c3a685153108b936c43786524caeeb0256a686fcf668ad9181994c2b1304363d435367462b9fafd72e68eca78a544dc628aa559dc53718b202081e8854633036f8bcbbb75829c24d5bd5817d9b5e80cd56fe544689efc99041149658e1c66d0fdb7c11949da464de67ac14cd7d1e615eea291f66118eb07c89c86a93a653c644714e9403f918dddd6044429485452389f9e156333c4cd00529956072c7e62a10174c148957f21eefbb7d50abe8d5eea74152f68226f328a274626eabb2c10e1bd4483f84ddf1c93d4cb3db781069cc6065f32f48e445c6404f3a2deb36658478ea02b18364f8b41ee38bd4251bb53474f4c00f33aff3970b3e5c802ff82892665a96ab9e0a6ecb92c8cf739c7122a5b9f6e7d7f602da6485fa7d82dba5ca6c6c1dd5edd6a83df283e305d61d514eb5383f99246ea5cd6d8be1840cbbc499cf5fbb64bc140f4d4b3166ab3d831165763a2e411af8190314f07ea20882fd9135a0b8b3146313f0b49a053d56e43dbbdf98d5d6140fde14171c3221fdb517c1582a6186af2bce3c96eb2d3307227dcdc744b4e0e6482cfdd6f7a31a7d0fb07baa0b6a293bda6c794fdb3f623b4abc168e1b61210cbb2964ef19791512260894e3465c71b16ece68fe7600732e9f4f480b2142bb83cde190adec147d1a926d20e4e662f85cd5e2dff1050a188c3d996dbbea920d3a7a40382b4bb4ffcf12791f62d161a5ae32eb60f6182d5125e6095c6b4206c8bb251b74ffbd2e2db800e7c8846ccebc3dae630578d7d24ba84b89e4af1a16cdde498fa86d10ff7c07cf2aa19945055d3c0e2d83808a38ce7dd2e4d3d3c0ed53f2ee13e807bbed0e8dc1194dbeb9655f9b6d03a4cf038a91c03e8b74d364f9d323431d4ff465cd73d1180128305acc2705f548758363bfe3a2096721de6eda97289ca6f4d8a1b0680656896e95834754b5f143951629f72f17a82805bc420382ca43c9206d49dac0aabec3ad279c5b6036e11517f7e1ef34893aad3002e96c88e8394108305133dea09f9658d7a6190c07df53117d30e7d68e39ef05ff59c7f23b01fa4beca7c1140f006392fe37b432b352d49d8633e87260609ab1d5ab73a24056c02d57053c868803a127734498212c09c0a0d35e6b065f365b8882b8b9258cbff598d717ea53c11a9fc74cab3452c16288aa2edcb4a62103eeea71c5e22d9a36723fed697f665584924f6c29ac09c8cbfeba2b26e0e4b0104139f1a28aeba9580d505547b50541c14c5b70d7fb61f44f0061d1f6d007e2742e594b9052adff1ecff2bdd11bd799f3f6cc6149c4576261dab2b38d1e3c2707574f557393093b1672e2730d468a7fc208dd9c602b96c8f63b41977fef4c7911dd142c662db652b2028c33f81cfe7e95add5abc463892a2405f2d9b945cb92fb62d91e21ab46b059e3612e196e6b53fc71855a0099d16528de4a73073d8ba75eeb1ef63d04d7fe885073245beeeccfecfdc6638f332bb084b7fb8c88b88a6f8d92993dd297d0f96944fe861a8fe801f9088507b57bdfabad90b37a5d136d79d4aba8123bee909881b17b36fbbca567e0c7e12b940c84c9b525beb12b1d530c2a85fd3a0b9970bbc0a050b3ddb9b6f816ffb6bdd0a1d5278fcdede16d24733483aaa5cf5025897827833bdddd5ff1bae6c009944b81436f8387a457406adef93418cf951ffc689a0256a139677b71866017d0ed871d4fd07b23a4e7c658931e957c25f141023ed5cd8ba186e30aaae0f59579d283aa19da9ab3bdeffd844a8979ff6b0aa7b11dd08b3a04538755032b32910b878367ad2b831b1cf2b353a93916fc61e5595bd9062d3b99ef0c053c77e037726f870216adcd93dae52da3adbbf87caf9287a97eeb4adc42184733e90a56f38c6e02548f26c35e25801a2e6ad92a8660f853090dfc8f698404bcc5ea63de7d4529ce94239404637ac3114574d44133960e50b29e08ed5ab5b2e7a82b7dd3c2f5c1bb24a2c21fb02f8cb3467415841f3725271366cde55362000e2375f246a53dd206dc0e65bedb9dae7e7bc001296595d79762552edac64fc6cb262980e406e22b47193277df98f736574313e8e7f9ef8e9f06cdad0decbedcc7dd8fc201d59aa70f36faa748d8a11a8e89745ee76e3c3dfa43c5b837236f432bba93662cbf043b92a54b3653fc88b1a256d53cab11067f40173e44cc94f8d249deaf340fdbbdb70c148ad66b48be50f708fc89b03c9b26359e0578b1f62555e9fedaa0d673652bf997b141ba0adb96a46f39579a1d37d6f259b0b66118626d2aa3117213e72251fcfab1c647e252545eab576e8ed98ceb865c42f557cf848cdfd61a64e76011b9b68306f4a15f57d6be3c9371a69121876869f7783b7fb6ea33900d256950af88f56114f8a26fe19acc9786bbb3f194214cdd1ad5a22e6bc939f997f27c36e1b4f0c7687de97fee2cd83d311e4e53b756e5b5b75dd5d9891ef846858043c9668239366388bbfd4a1233d4be60f69e52b1a180e83c034ce12b5ab8088cab1166a813dec8092ad46d35238ffe9437d7566d201e795d4e75771ab64e01a35f02cf4b1281514493c48906402b22f558ad7c07984e580a8402855bc4c8444b49e877bb9e7726dc8888ba83833ca30d19f55a210e77717ee834ffffe6c178a1efd757cb94bcc5f9cca7dc4563faa11774c2497d4b6757bb209c8f250323099fe1932cdcda8538495f7dd99873c1177757547e8ee18e61ceeee90bf5ce1f74210f26ccdc37bfd1dd84959c6ab8ce7ca55444f87186eca020218091f569f263fdfebde423b1bd151aa37abd92778bbbaca1afa1136c54031f8eab0229a146eae943592536dcd548f205848919cc65ee38f82dd5c991f6d9eb32595fe16ec044ed908c7e30ef0f0c2917aa729de1e367980ce84f48ae2da9f2d0bfc63c36939cea6319b18c4ab1b83b43c9e390e7b7ccccfdd2fee5445e01177018f62a9678fc709173e570894f647aca932dfbd4e1d323edbe77fc004939ec131d4b1bb72015f76e49464ffdafa018fb4f863fad0fdea05d5d1e3c2922b6a1adbaabf789277deb8fd55ff5a6dde93059e5265ac8d76c5af5d02350629f3d771639aaaf3e521a3ad1a466dd014d6b8ae3a5b420aaca6718315891412bbdc72ec5a0cc51f28361551bcdd323d490dcb823195ae2d12f7b37587fa73b5165edf659a3bc200bfe33ada063f6b4f9f2f9e5010bc1e2fd49c91e3af643cb86665bc57ec804cc8df9a5cc88159846f361437c218c4fc7af122c415b179925176ed8789c5b80bb42fd50d6df1d382f9158cc22d0ebfd856ac6c55ed6f1a394483198dd5c36cf7ee27cd72dc25d8ca380dba3cf54b9912640dcaecdda1b6f12d49b23d51417d1338d303686fac687c8d050efb40c92586cbddb22f4c96cf13980eb3345e6dc0b6b5489c264bd798b7e19581c87352a246703d314e3c9d03dbb6eff8612c0154e83d78b1c811e7994f3eb08bab782d9dc489e91ae900a194448dd154dfeebb89d42e8bb5fb2021bc0876cb4f5470d907b407cec0c2cbe42d9cb1c3e64e2a4be46df18fec00eddcaa795fdae564bebb046f771fbb1622141c10f4e018c7229531b5da2376b00bc3a53351329d965163f69d8a1ec2f48f710a755be78a8c344c818d8275efbf05c2875aa951b076786c6ecf6ad8f5a49af18ea430e990d959f1dde6638b02dc4a77a944d67e6806d31a30482ab43ba67037ce8d432bfd6f351fc96f78a785c9065da1f327baad56b97900436e95bb0212c62c3e7be8104cedd4f1e2d2efbaada2f7d5d84d3092c595355c5e40b59bbab9ba67c9826747140ee2124f65c65aa5587fb3608e9edcdea55e373a422ecb7566b62879f98f94017c6772fb13aff55d99b59168980911c1bc9ef2d4986d58b9da399c007635dfaca255ad30b23d7fd73a177f47f7fe8c601047089a88cc301bf821d1c173d2128c215d1b285bc6e859a67e24a61b8f9280eacbc3addf4059d798c2a99fe48f6d023527009d46a978421552bb2c6ee9ab00bab8af8b99675dce4fb1bfaace6f25f53ae73d0d39523fce9270aac19ee7370fba1261e52b365be5e072fb2e617f4a7a67257105b5bf48b213a2777e09fc134a6def442758dbecfc0e168c44222d96c3b66db6db534eda47f9a7aaf3a8531e1573dac1eb36a375351509d097f68a055e401ea6c03de55cd85d62cb000b7c586ddefbe63b359aca1a7b84ffb0a8c39b84197090c4e474bb0214b3eb7c84e8615fab180cadabb9ab70d986bbf08d057bfcc06f6b03daee437e43df8c4a78caf12b2bfc8e099424b10bfcf53873f5e06cb89c6d41142164ce40f9b4a4783d2236429087a921da96e92f29add73e75b77057a1fb379f8cd6fba230c152db78fe228da9cff2c08ca9aa8c20f4a252c3fbcf62d7cdb8c4b128ea463256b6425b1850edeb06cc6b645d134651135aca5d162543b6a1f27823242abaee6a0a0f161b8641764849b00203b82e09ae38c37244a3753ec84b3e660ac5ac92ff5d02769bc3c88b6923cf73fe93b3eef193960977063c339dd02dd771730de52deeace3002daca3b75da295cdd3abb18959317b4762d35fc23786b28aa59b877db61a23b3873f33bb9651d8a3114883c60e0034f4d81a3f6c52c1097322f971c7a62c82b1b3bdf2630907668c818701f260a9e8eff909dca3a86e3993580e188981de4e59bc02d6d9c15392fe57a4477e2b4b3368fe14852ed7293a6eb653ff8fcdf9024ae299484ae8ffe2b6a507ca728db605601b0af8e9c195d7f1ebd9e05008e54e456fec29ad2b940d6056b682c1415bfd1924a1bb3e49a38ad47d62135a914afa73d05b62818349c9edbf013a865c35d998295942f61099ccd467d10129bc2c1e81bc8444a85a691c9d0d8370ac549f675259e5e434db0b67b2e4d1dcc8e0c620b3c2ea0aebf599298b3ab46cc6ba3e4296f189f43a9ae93e211d5a73d39ea1f59be6f5609b48fdfaf658a1c8a68ef7aeea5552ddb8b9707fe05f3c3d0c5462196cdfe8ee497add9865df96c349aad5238becb5fba7788ef61005d9249639093e7b7588a0defad08f080d54433ceeca8d9f91151e90c378b0503654859bd2ad51cff8e516c16379f619d05c9ac95d9f6677dda8b5b6d16708754cefb24322f4fd148a666e7fa2ea58168a217f2ed8d607e6ccffc3009c4bb9d10c53751920c2907bce9284e3a5b0c2d5df7cef66a7f7478c485e0cc548fc19a7ab246a180566fee548f574cc2ebf40936026ad06d1220c1bb48284c9913bdbd80879215fb27ffb0f45f44afcdceb2bc9fc32444a42ba0cecfe348477a8d0bcbd44f0d8360652145dcf0358e27eeb8eb94c20eb54a16f288762078e78569791205af69724cc2b432fb49d1c76d9b2ac2678642f5003e5933e94f3a77a54cf0ff66d321e9fe389bc4c614bb83716785a1a01bdb6bd219098ce3e9e2b7714509918b8a03030b7166d3b8180f4e83167da9b06eb9d66936bf31c4fb82a0f3c088675b8ededf0abdceef974e16793d0e180bdc3bdf01727cae5722cf27babdee5603640377eea71af21a8660141ea42a2cf6734ce6e7b26a28a22f34e2e5f6391acaf9c6ebc348d7e85063cd4e6f04eadb54a1399ac46b972fe44dba123f0d70eb3fd8adb8c5657e6fa1049507ba4b796c1e448cb32f4ae9e39b8c5eb10e6af646ea742ad25e4bcc8a06c30766988f788c8c83e9a2fca3a1ed9bcefad473d95e869037f26fc99d5407236f3d103541976bea38ed5a6492288f647b113bd22700b6b1039928c4772b2cb852c6b4130af0a08bdbbde31a52ae7e8cd5e7c39188f5a1fa0667a1a72d5655921a73b121444422a41818e735e3299165bcb3954ebeac457d80230d05778ee14a4bd5518f39e8b453137be6ffbf6c21508e28990d7c3f5be51d4786d7c522f20a618c4408f93767fa8cc1fed85d252f971bc1b09fdac05d7a42a08cdfe16e9eea00ff213c8f44a194e3144034e3b90692ba7bce64e1f01c6f90e51927f04bd1289d5424224ce3ab409f8ec489adb3947fca5dddc99364f07aa52e47dc2032c879a70f1a60f972373ccdd1131e912ec04a173d5d78ac374b5d62ef0a33b97bdad287842a66dc05963f0f7a301ce1e6aaa4e0e63ea87cbfe9667ffa23e7de08ef2b5693db4162e2826564bcde283eeac221fe6927069c0fa12404cf7c20873a83de6b7f249ab77d07f7965f6f8fdb8b853df9f84883dd7e672701af77ae52e60bf6f8e11bbbcebc4346b6a4bd8ba0c02a0ab4bff0ac7fd925e61b6cf3133293ba97b521dc2e28b683aba4ec95b075b1f06c43d5d94fd6e9cf3f0a2629302e25c5383fb771f6a9e7a9e61fe33cee05a31bc22a42f22e5b47a86deec7702dbebad422054770dcc9102caf0475ca59d3d11198b901711ea99c071909b6501007cc278fe76ce8d0d6221af9e98fd15199a1ded5bc008ee2a1de57cbc258d7e0766bb2d663cebddd17601478af4417941a482a8326fd7fcb2caed4e5b02bbaf3ca62e90f4bb11dcfc07b9e60618f401b805a8b2888a71a5b420c50265eab84d4da8931a941206e66eb79502751cfb1611b6d3368b9fa28f05d0eb4817888abd6375d242382407bbf4fe2feec140eee476b4a53e261ff5bd3dd5218efe06db14bece02e2d51948b8c4ef27ff611cbcdfee7a1218fff2276c36605250c75047f8e2d921ae908f11e54b5b72faa5eb4287300e57372cd1c18b907aae9f7b93d45852e03323ce5c86a2876557c7bd317ba664b64a98b0914e00135a856c80f63449af08ab2d28c57227a9d9ffd8d490ff9badd4c89e915de5a175c4db82917a60111b5a115ad8f3350fbb9afd0e8fed93f5b8c42539ffdf19e5c390c89078f402e118880af3e25ed70f0ffeea0c6a7abe79e271f241595a8572d3d8d5734a102066695246af8ffb540d899d934d18cc7ba6e41dcf9ba4929e8fdfd62c55527002ce07709f11cd1a0165797633cf6a87e804386e59a520586e3159affd2b523c364d1c4e3b70fcfaeca909a061ac4b1e0c8d4dbff016d8a9e2c98461d7a8dc5f00969f721cfbc50ce47f6fefb84ba30a350d25eb6edbaa7d872c283c89433bcd25181a28ede11beb3561cc1d9cd7ca54776b186f016b2859d417689e7aa9f65a859d9062786e6f966b9087f4af27706f9e9031f918f667dd4e45c4e0774e22febbc19dffcaeeaa23dc231402355b5b0ca5c9490795d18b6a924d026829ae0f3a2d0a6a07e98995f0cf5ffba662f595f0241b296651bdbed137f1bed71e061f0e79dc4a3a21be04f8d8d490ca914a895a00b35e404074a6d0d83faf68723f1a7c73367cbc8f4bb66b88f38cf71f7f07f14debfca9bcbd61068b39bb16769789e675550ddcdb6a657ff3e19094a9ee8ff1b664764f4a8c403a43edbb3d7df262824ef3cd1524c2be0b8e9c3fc51c264a1fb767dc929f8100381486e3890209a46ecffb2e2df84594e956430444f2696aa50337c7f6581625fe4b3867c0de9604d3b89eee18afba29e277da8a2ced77bcfa03b6cd118caa8e93b2041c58f9139fb4ae866c1f42eef887ca4401a60e86c5bd368aa35afecef90e43e3a47104258bad8c80e62684d425ce8ce2d1e52996326fe70ab7bf9bc81a7ae92f5b6a9b10fce43b4ba6b546919baa03acb408fead26d7b9754c5bb224c6224a26b307738341359a6524a28bc45b5799ec25d96d17178812584d37b95b7e78abe746392ee658b0a76e6625c6855e28827de6f80851a3bdcb99d4b9ab6cc94dc978e58636d9e0b80bdba0e6f9a4bc5b1ab73298a8de6c3e7943477de12b76c11ac8704f550d5401cddfc977460845cb16522c6489e23860c2ea7390bae232417cc9e23075f40c57924a84aedd36cfefa2eaa6f13a9cf4024c6f0eff030e8f2a90c0b586229d9f49568520cdf295e1b7ebd5eb4b77815410802343e7cbbe53587393830a05449c9549f0d259722dbf6b10e18e93361558f3b40a5b29543e3fbba7097e4032c0a8011b3c2ee4111c049eb9e5c5e9f6563785e5f9099594a94452b89e5e69c538957ebd610eb6f14a734e40fd0111d276b5e8c8c38e757e9e718b9c6264baa6b40f26061555e7f0b695b302d4b99c888be2e00f20c2508858c5c2a2ad13ea06c2db528bd5ddd4ac8ccc1a18acb06d2908c02d6de42dbc40a50099bed86954f98ebfb78032aa7c98b4c87f09edbf6c384d808db84dd32a3ad97d34c5235d33ffc98d5f1f724a83dc49469289798b70816871a898c8e792ad02c03bb3f61dbfb1979e97990511ba7d88a5f174977d40980ea6a80a55e790a5c296628bae00c0b145bdd4da42b0fc9d113650ca21ed691cf3b782be5cad4e583905b8d01d7cb0179ca494416249ad939d55fb6ecb8d7f7a1ad949f35a5a259f557fdf22f1c6b6a02b86d132b56126404d0c7acb578509c14f163c0882452742292c72143ec0dbc16052ef627b4b1c63c9c680faec4cc2e424f8f3a46bab11bf9911593d8d7052bb071b68259ec04c1be722dbdd037dae68af6d35466e450d747d9e2e81b8c91740be501b7facd255aa4b513e942e32eb6f8589ad70e29999db1cacb08ccf9fe6b4daa2523c03a140b5ffae50ffabcaeb827614fdb83385658414dddbd2ffeeedfa66fb092f95de2838ef6d944d69b22e0634db30713163cc95123ddf81ab650d9f60fb515fe76af8fa4be77f0a205b7ad83fb2b8c257ff7d1ca88aed8f02daa968797f084f7441e4f57a5289f6b1b504644ec36f1bd4999ef477e2dae4f63bdcbf3a509080656953b7192a91c059f3c921213907bb99b50a94d267db65bcd4451a62699b69f5f7c7dfa783722cf3e6c543669752d272d85acdfbfa1cc92570d0a323e3b4a88a6a93e6c31d16f02d67e66a8cdacf7c587291ecee675d7cc846e855acfee648a544202c29c48024463be5649b8dc8e336a516bcd781f78a282f65b0910fe3f063910a47cc620b068adceee03bd558291d2f17f5a1e8e0ff76015414a74595d825efddadb4d408c5b8e3f589a83c18bfa861aded2d94c07c0d07c0d5db24e14514d544877acd2aae9bf7a85ae2b49a1af09c9972028d0489c4ea59c71b87536ea5d7793259ec7e408721117740118684f908168155bdbdac68cc3fa274e74aa7aa6e60869b8b3e3acd648ad4c3985498edf030d4443eb11c3eabcd667ab459af104269f551172d2a0b67f5f4f3c84447f2b226c504a6e0797a9cb05cb4fde5b0b74d72ed2e61f74441ce594174e5c41e56544a02649f97054f63a47af624386b7493b0b6b69d18fdf209fe6b96fde5bf6cbd5b44b850018e4ae6424370b72093b7fbf3abdb390e4f772bf7571c6ddf33f078e5c9fe9658af41fbe7d1a069c1db93ed3f8bf0cc7e95e8cb53e4407e62b02b39495270881bb5174fe7c6d3cfa36149cbf677b67c982e843d474d26afb02a3516e965d8e0d6653c21d8b34c6c7fda2c66b49c392618d42ab461934c2cbb40782d261078dcd7b283bfb248ae5a7f3d960b21a87a76fb3596571f4fc346e1dd15c53b9e2daceaafad4b79b4b46ef3cf4d944186d0e50adde494df724780795e6ba2b30ced3ecc6f4d62f919efc22d8df534547fe5474335e6c6f1e41b1ee0dddce34e030a48ae315c549b6ab603e16d00f2be514154951d09be5477f1d1147d6267b5c52bd54fe9e4b073c78cfd5db345a0787761b9a4664d107a04d3c5a40b52b3a91b217048e4aa8700fa84aeec59806b902a3cd9917ccfa3854299c61085a69c12133b01b970405bea204e04ec3096801dda50f8af0c46e11c2bf74165d36f88d6ca15fa3f38413446724ac36022bfb92991b43a79f201e6e9591b52b36189d09a0fbec845e04c245bda70a2e9f2eb10dcdcde4885503cde2f4c8fc1214bf0b31618ff6c3168d84a0d456b61c99e1bf0594a3c0a2110a157aa0abce7734e534c989aed5cf104657a3db2de0be6841a96f19c7d4a9b6fce1a8e4ca5d360de05533e9f1ecab1c8a9c86b034ea54ff259c1ae4d5aeb37823522595e25e8a367f0d6aeeb1859610fe3b3c64792d4a8a77268ca74c0a7d35fe6bc4e63459d95200cea821ea6c5e5270c1150c07b377d87fb8aec1700001087c023c27ce2dbd9f4eb7c695072deca1a5828cba47c1d869513edc55a440a9f264a8bc341f8040e2fdd103427c4678cd72de33a6eb8d421046c10683b4b07b83bc542dd2cba095e094a1dcef086f832b35b0ac64f4a14df1d606df07d0314bb1e0e9003c427839a3c963e75adfd8c190b353eeb0adb02b70c0a971de83090b9e9fc89c747d1c954f91d132a3ebd9b4fa4cc68fcaa255d515e9ba752ceb17eddc96ca4c6036703658a567e77af57222512cc7e216930c6da8fadaf0cbe87d8b54b873f9ccc92d0b6a215b6a3226953ed575333f601bf02f2813f908518211ca38995ef65f68c560d0221f9b6f3cdd64b189f10c8ac017bc32332b7ebac457be3106fe97ff47aa05d05e72b6c2d603c3d55a2e9ac43c3cad33824aea9527db0124b7508c338d58236769ffeded6793fc0e2844aeda77c2cf7c6f44ab3e49548053cdd36dc1e796ec6f23ce099b573d9b603bbb0cb0494cdbc3964614313de601bae44b95cfc07ccd5775170bc14ac2db3d0515d7ce0ddfa4f4f527a48a192b12c6c03ddc9c28f1580e0379b6a18a48b379cc5fdac3af05237bb8d9d49d03b53e56cb4ba3ef63964507d5ded7a0622ddad6adaaabfb9dda8b54bf169fa57305bd38645814d2bbcd349025b1bf84c100b174109b6c7c02507f85c3f463974521bccc25e0e179c2edad0257046ceb0cad4788a3e927d4391531d14e9e39936acdd552cd64bdf5ee784f2ee77adb2050e76a5bdb8cb445f5ea921d7bb72a6add1657eb5d55cb344c48ec6294a82c18ee8574f00b595d1fc0999253579123a833eaa6c0a56ff1ac9f27fd759373fdce791f33dccd3f67f33f96cefbe3b500104d351166b52e39201983257e6dbc581053972b461082c5bbf67de5308f26adcfff54d034800dcb1a77ffa61c5c0584d660da6ecf6ff36be55e67e8b257a4f1aeba5055abb9efbde73b426427b48cc8b8d46f22f81293da387989bae8e649b6efa38bd682adca7c7669cfb4afdac16379e635a02ce3e31f11b292180643032e90b8b7121de7a32538e0428a276d12247750b90c9661b7a1530bd015cce3bf6e71941a56955fbd398ae75a6e7abb52c59192c4a09d41c6459eb23c1b6395d88fa64bafe04616117456eef79e3dd6226da17efd1cdcd46e635342d843184996450b5b87350b742d93513f63193599f47fc2a9cedac905ef2fefe1b8cf5245f1e436b61baa8f14ddcec0bf57017ecd6ce1379d924e699fd0c0f4f3c29b5a40878565afa18a04323efb31bf25af866b1aa9359a610839d051564463923ec1e8c921e93a51dd72d631c9d11791bebd22f2ce935d319cd3cedb35d90871350dea5a02d532febfe32a0e44bcad55d8ba17c1f90c2e721b49a3fb2e4b51231f266ce7162722dc68f370489e77b26f008bd4e67c65d24a7f0012e17110c76ec7442b59cc65e1a207a8aad22b4c87a6e7328d9a7b838e202a4bc21cbbd93c49c0c357f00470bc7ce8ccbb033c2ec5137f5d64c5857d03a83bddefada365e9cbcac5071c76b7251e849fb95e5930bea6976e04192b6286a4902a7b4a7fc8c618b6f94d311a9c42544405fac41b1d61fd82d075ba1b67373f169ef89f8e493ef97be3ed6e4d510c332cf8e5ca8068b5a38e295f95217d21c743d13cc6ac21a5fde845a178e4daea06704f92d992de53a6b58a5a3d2b70daf9d01bdcbc382f8e0e1fafd3688ce50d872addd78c3c2fc416e85589c7327844ddae8bcbd6ff1a1d6531aa86e6fdef09a9499f35845270ada61d0272a3d29328760e2ab513c4913e4388ba7e25c5c0a271a643073b15787d477338824332ad709ece1505b2f5e4a7872b6183299d453d63bf842c0a5a3a47a19ba82d893dc105bbeed879fd9f2dcd195d7f293f81f61a626810d6e48b1d0f1f2a37219c6fdfaa18dc9aa2f05b20b7df68f85b5ce504e32ffd1b086c8d6d34b3acd9e640b4af3340b2ac612d74f89490a2d2b4c5c3438880bf6efdc2a844718c1cdc685f75ffcef108a7e9e196acd38235429e73bb57a3e0da4f78348d40c11731b2017b332684d7db488c31530c19da928195e6a92b23562ea4c35cd8959591b46832af48b9d87e936e15af53138579e1c9775ce0bb9bbd009b66828279cbce3c21e725bc1169705c68c8b391bd5a9a40a9c91d914012952b9dcabd43ff3b3313a8ccab4aa34ec0e800d950acba12aa5d29196de49b9e46fe56e62ed6ad15dd019291b470b20d24cf8aa5485a03cbc433f6348e638682f7d828b801e434d1d4f3021cd29e06f5982e79d998ffb8eb35ad4c8571e87cd97a18dcd3b70a8654338011166bc04151c22327b1f8628e5f94e2cee8b0b1b2ef44df2224e1d0091abe0a003bcf524fe5715d40cbf71175e5d5e8775d7a9033195f7d30456fad82ee6f91a2136456f8e02412fa4b6eeca11d1ca39e2b430b70c6bf982883c8f5db74235c0566bf2ed6e53ec3064777ddffc302367fd972663b8225ce7ae5b73712491b4a5bb29f34c9547b59a45bc361565c37d521dc13c29dddde990840b327efe5cc86d6531951ba9e6e8b187c954cd7520778aac6bad71cdd4b87875f5f613000ecb8e7c8c4257b520ddb793c14a161609c6c88fab56146431bf89ffd33efae822765df03255adc2507c6ea12d27f10cf39e4747193234dd05565be1bce2142d9f2a7df0e0bd45e66e883389059962325cea18e81f4467fbd3116f404ae0e445bdada0003c3b07b9e1c69c250b1b4de945d209fb2186974bf8984c442e1b3abcdf3edd5f078cbff3a32d337d82b89df99707aa933d306f6c63231f5275bd707125768c574cbb406b61d3fb4e53a9adf00a336efb6f139954b49f87a93fa6ea10ec10fd041733bad1f1861b881ef09de07f30258dd5c96c6681841c461164248cb22084523c79ecf2556fc1a19da121fa2e9f24db7ad00a6d08e9f7226771a6a3e967ec33ba4a6ff7421640375fa23a77dc325c9a55f35a3251c1c5847c1f6a22a0c4731bf17705d2adb11018874a0536fbf838f417e79d374196881b1d9db99344b08f67d07a96bccb22870fcb384fe4bd2265b42362a6b0e8338e732d913fa8aeede2841c15352d72e9dfade2e993edba96e17a0ef21c310df522d1d04470d0f0e580b9e7f561daeaff3eec164058c090051723b1cb45d81ba3734b88e79369fc4ae0cd1a5eb940d0e365e7d885d41b4bb9a740e53d6795c9e68c80c036cf6b5f213ec7e0964ad3a50b496bf6b3ddae94cec7636a3e0a8eabe2f66bed977fbc7661c951b1cd4a3dca75eacde680c4fa7cffe04f84640a4939f5bf7a4605b6f47147fce6aaa4f3caf4874fb39d1adc91855225f5ea82df6b14a6f0e7abe992e47714f39d0f50d8e5da591ad7ee6eac422938e881b986cda95aeb437a1bad1510fceda13abd8d0d9870ee6f38eabc178859aef06941bbab5c924d01704c6d2a2b12e93e3de96e0d8a200e6dfd69f5280b2b317d077e659ac56f101636e3ead3f3b44db6fbebd5227d995fee320291020db06f78890586231fdff3ece78f6f3831578e0e3b63a071d6d29254a510076f9af45dbc44a7b98cb28097ef2ae39e6df6c119eb761b835b6c40497e95d38c0931b9cc0b506a6e3ab490d6c1cb66b6ca552a922a896bca93b8f99f1432244d34cd9586c7e440d71a4e86cb1c26b6dde8f230068509411810ed679ab263783746d72993f5be3f0d5e2bd01c549633c8dde711400bb45270bb921f48b04e18aab16fa4c39297eb3455a21b89a6a7dac95b27d1ae05c6e8facbcde67fadc2d399937dcc94a3d635c5560746904c7b140a12aae64a561fe5b77e72202277d375e7458412b0e87c8c89abf78bd62f81ef3d85367337e743afc2afbe337d46e4a203d90c090be0c0d98ba1faedb4930869febfb05fb4e4f245883413ebc0224b24551afe00ad5f7a44a60590b41d3a8dec87ce39180495af2813e482e5ccc1079f81795b04ad318aeae928eecc491565152308d5c13d7738e576906ff75a2b38e29a8c00cad8933502fe2f60238ec4183c1221b6e5b05f220aa3492a8eb9f3d57ee7310a184991723ee59fd499d4ac871dcf66a9263a36dd680ad1b6fe6529c38280b745566c55b790102d38662b9c2670cd07e91cb0c3480cd76ba7a93d2ebc50fdf4f8245164f5cc7b25e0e06bab7ba4525705a7e2750c36ccb5d86bb7cea5b8c3b8b0f9c34f4705a223b3d954cf63b01bada92fb53f3a01f4adc8744e0d3f7bc2d8988098f6c29e7fca16f83f3d902570b0803965b1c2f3270a54990d89eadf3d07ed0d1f62666a23745154b86a16c51081874bda5af567e807329ca963a335996c2ffd0bdd1da81fdb65ecd9d6a8093c61bb9b54c13ff087983672a445eb431868dc44156ec09c4a7b245e960d7154455790732559334dea6d898f46be1ca16de2a9a0df6584eeba4a447bca85723f882ea8b95195355cbeb26bf58412bed63fb58bcded8990367c9173bb318f4e6501f598f4d36f5d2f8c6d320b16fd590d35a57e52714c4034e531521e2a4e7ae5f209707cc47b558350df7246af444d1acc2927e0665e6d9e711be464f5f7ceaa38b7604bf332562e751aa1e83c66ba61d45a7339d3196c7b7037689b7e794cefc9f58386006f6da6a03f6680d46116aff0aa5ceb65a99c1c6e05cde1e82a347ca1f44d8e53e61fe594d4f24608e009c07ddc7533e334097681ab4de5e8db25755a6e2f2856ef2d54594720467ecdcb5e8f63bbd0e1a80dab38e562f05e138e5441c6842abfe991c6654010f7e31060fecde1e683ae457914d91e1288ef7e187561e94d16a101ea811d35059b9051e8aebb73c3edd63b954ca37abff454275fba7fa04867dbced7e4e5139623b01c4dd0960b071ad4dcc799458789f3e5cb53af29e40a7ea55cdf4dd0ebd07802aba1d0bb18212d6e11543d796662f8382838f5e85245de9f7a2495743a9002daeecb7472447da694dc619c226614e33649837c1bdfe1a7aab9ff13a1e120873440492441d3c048f08c73c007d775fa72d68872e17988bcd69f4e0f8e30e27ece2f255b181bf6772a482b997f564f81933b4cd46a34dc6c7d1a210c7bc1f16a14423f4cb4c172ea3ed0e82a30f768b07c9f81a928ccbb3a290b802dde90d5ea15ebd092ebc5e75bd7af6922a1e634b0a3962d6f855c62d0638a649bf1dbbf3c1a60ac4dd2dc4bb7d27c7c9a99844dc0b6f071bd369e43fe689c6ae021485bb995509f571c0f2bccc921be90d97e1ee141311ec44a588c0495c5211b58f9123c18a1c81e5dca2b40ff62b1656913e4b3e3fbace4ab08a909543389aeb2d39bb720e00dbdb6cd1c4daa5a865b0be242aa0fc340c590cd2b4522440a20f3c8ec0ceb15823543dc95ac60910a635bd57c6ee77e112312effeebd7b43b6f592ebbdb9c97f02f53759872564fd222f77ca950b9f3063f0c5b73fb5679e4d94cc7bcaed52121968201973d97fe8ed2ba4b89d26e8a7b3cfd04f8493835d8a6128fc53c18f3ec5c89a4e7f858eadfa13d686e204fe42cec547648cb8030f07b370df4bbf7ea674d1ac3f32f21fce5c65cddcea48ca3eaa6fcc41c508dd222f1e2f61a203d25ae1ee5603c242901009b701e6f20a6358dcadcc8783b6319e9f6378977e16d5f9f31747d93029527a3fcff45b317fa5b70d09350cda247bdeb47fb29acfd1c916b57e5356703547da6d9c28c511f7520cdceca1b97cd92ca71f4d3d3260e0a3cfc5829a392b0740ac9bbcc963f80f99d57e98bb562302f19b7dc468e293b1141ea29a5bce145cd6eb945df02227c9c70a89adbce87a8d5dce8975ad922a410d4878a04e4700564a67d9a9387e45e15a476bc1b55d1beae43b35ecfcbf9b18c90d51e7f1982567460e146c501980040bd750f59826c43e255289164588415e18bf76e12dec32da5e5e0e87e3c970551eaf776abca10d4d943f0d964949376c878192ead0c3da2cadd27ddcfdd4b85a6c98d52a5f48ed933ae91c43b4bfe39b35aecf9050a0c684025ce70d90a719c8884398c095de9f0a101e04b73930feaccb09d30eb300b4c1486ee4006d7fcc2e7cd15d224ee36aab9d08b640c23955d48ba64a1815952e020b1ef0abde6b2bbb215656dd0c7b177a5acc7b5ef7a4a9234bbbd48a85ab580946943f267c0378547cad2c7e81469fba4186a0930ce4a2189dabb7dc86086f157ce4f84e9a4f74c098b621b1dffbbd7c671cf0ceda38fcf6541fef12b08c85ef31e1bb5c748e7c7993c3ff778d9bf4bbc35bcf393d9973283d0c2347bdea77a9d45134e03a97e806c9f14568ca5ac0b95ae18669ed833ff379b6d43d0fc4c6b37687b54fe29ecbe9a07027685ff8ba34ff0dcfc8bd3177cf4735b3bcf855ca81927d8e87da0bb875e74ce9d066437cbabf43966f56bbf3d6ea104eab5216e83f15b2403e9e77818e0491b1eb2df1a101554b4cd4ae838b0b628e3f332e2729a002b011464f76266cffe5d17d228c8ed8cea3d197d7556f431f3ff4e812392a9806c695e421c8ce0a3801a57aaebb26747dec92f4613855606a8f065136379e088b09745196bc07acbfa3be4c38cd29a5a91e0ff8974de47cab211a6fa64406422a2ccaae395cfcc164df8e63414f39419c6aa184755ec72d012f58bd0e3f7db2d82cab1816e11e02f91e474c24d037d1a8a1fbcc7f8d559bb29f0fd1365770086ac0445f99c50254cf0c15f6475608e8d79a0c83d67700de96c9a972344e28c2f85592d556ad6ae0482b7899127c130ad239878d767f9fb664b9b68b24ab71d1ede59ff90632d44e6aad5ffa45d29b83a2102070b064863847f5040acc45ff993c1ef28534d8f1ba52a410bded517892ee46941931b3066204bd8f7e0fdfeed7a89b0b537e54c4f0cb5c01ae4653674e3350023de39efe98c70382a3457dc96c3247b66c020c9f188916b662c373026f9fbb58457ea155a122dc5cfd864f58b8a3b76a71b41308d846d6ee6170146566b1dc94a7b67a599529029ed125e6bed93611fe6a65c659e395090915fbc27296eb4959a5eb686a2e7c2bc8484afc7d71e22260d574085098ed05f6c3646d058f08b697f0c3488f6889f7df8bc7ecaa45ff4d0e486f5e8ef6c52bf3e48386e34981743c54ae471797f532e8456e9c0ae205cc7ac5b9fc1f9f28fa053bb6f5e6438840b74c40cf2e000cad47b8df14e8ead65d91be2b369fc50aa3b44311dbbc6df5900cde05eb8bdd0ceffc9f7380e8ff7db0bf3fe9e1667dba5553a5b1eaf280b5d3262c62f6808b96a884b80bd22ad1bdc148f9e0ca51692c7331a5851b4eba383e43e23e12adb273d7afef243bc32600e3ed286336f20619b639da15061b22f77898090b4b76e2d64a0f9574416aee508cc894106ec87bc3fa2faccc813533d4709eab5efc2583bc5251d847fcefdf8c7a895eb66f234e06555e5fc69dc2bbe3a82fd1c832bce64bde291a33f6e7046bb9ad3e82139e0e8f688afd80ea0738e440a428bfc85e1f64218a85000656acbe9a1764d06cdc8ff074b9901505a078e978ef91afec6edb4b897cf2327b567997b58be355cc6711c21ec663fd5fa32546562a03012da2bbb0479e29eedc2d28b216f816a5e9c478d91c5fe6be4566b32e0c66f8c05d7c5f8381cdc5df2e8a62a6e49c89dc94c9201367c1d6bc66d075345ab33bc40efec5204295f4e68d7eb3a5eb5449154fb88196f61b2a478ae9386593849628f9eca110b7fa4f1e6bd94caee3eda9269f84ec9c74887d1590946f9660b498076bbd833ede36a16563c6f3ee88738a7047951fd1a96538b0b743abbecf17ea0553597c7cf7bf278e484f7d354e903ccfc5627ee8a42c9289bca3205f9ce826e884b42144f3abb752624a87c2922ab33e4d49b9252f620fb8df8a1696c3ec955e63dbf178fb3bae7f1182afcffe5e7c3c9ad9d31b13107eb857a96ec889b905ed1ede5c90c13c25ea6b63bf8820f54984d42251d693f1f04e13a5d91539f5b31d5a2164f263cb9dce81a9b525918bb3d13a9c735ea7c4dec5a31e2e0ea9d43b4eadb344512aede0e4601ff3b2f8163ee40710bcb6c8fdf217b271e066c46ba697b76d5e896b1c2b33f519d6905cbb21acc0f9fbbcb3859e6fbd54b029320a7e6e2bae49a4faf6d917a5f5800a1337761c2653871d48603f9e326989fdb279ce597b0acdcc5195053e88c2fd300e25e5be1ec15ffc90fc7c4e568b5506bb820d047019818ea2073f1eac988e35fe3462242d37af5a0741dc9d7690359b82c4154a8dac36a6c1b5eb0c3c960d5bbda2334c4d25d2ddfc3e00708fad09cdc55b0c84d986c0dc4d0223c5332d27641f8a36b36084bd41a013a497e3ae0abdfb6db363bfa3c09d81c48171ed9d1b37e6b295b42714e7262ec11df7173a9d815f65906e321114594711e291d53faab99771230d51c0a6f1608036786e8e08bbd08585121c0b4bf95b2d86866176cb437fbb797f82b120629dcf029eb1510286efd189f2da6783471eceda084c353d66de30cd0bee583ed32ade9f918c551fd0dc5051b9ecf4e93c21a5d7b3848e68f090a46ad10a4d56a508a38a2f78479a7815debb9b2ec57964095f6a4ffd6c5596ddd5c5613dc8ae2e52d66f77585023f67a75899aa87eba490b049a28868672b729c1736ba40df3204198ae144c2cabc3ca847cf1bc294ed550ae31be6d37caa7756dc89043bbb570d5e8bd2aa4b5a9f86e118ccf7beb6ddddbe6ddc4555fd315b25405ac90e0aa11d0a52a0005df1a5ced80421283fe85e11a8ec5e71049ae056a8451513db982e57782d8324fd8d93cf6cc7b9cb3ad3da30b8ff156ebddd72907f888353976cd99f023f57e648b131475cfb60d4d695725b4614f6ef1469b49dae6d8e18f4a4b1585438894cde6fe3d1195b6f601555961769effc3020eb47ab8887dcdf6c5abbf2d0cfd987b5106ecb2faba3f3d3fe19075a09e89eedc6f4ff95f75502dbf6996afe205f60a8ff947abaf0ddc670e69e2a394498ab9dbf171cebd88ddb58b7fac73d6ac88289fdb44f3a9667084110da1ee0ee2fd431a9ac70044a16453faf1bd2874fb7628f8f0e63f7e14fe5d8cd4d4eb4fbef01ecce2e210f563037a1bcbdb055c1843483d19dd605589a41d8683cbe061fc46e087f1ad928eebd009a1241bc57a681793f6be66df15e1a612c25fcae1bad095cf1f714b5d62b8a64884bd0885236912ab0ad447764a01304b8e72543c20cc36b78d9319d4b9b8d57fca5b05f15150ea21f1cc6c4bde381ff74586ea5e28ae5c162154e47297587ea14dceec494a1565c208cd3f9cc5ea04378f4836cd9c6bf3a339efc35a7fd92e58f4dbf4c64e5db614f6481ff3144056f9f358385bfc6796f5bb3387e5104799d7c829d474f9fdc822494b7d1654855f85693f5601c44481dd443d8b7df92b5c669f39105b22c88a835c6f10c01c512ae78e14f3c40caa7dfc1ea60208576d4e9845ef7e30fab9801c2e9f63477baf4c36220aba0d3f0dc057c6a00c2b7ee58bae14545ed4308f5ce376bd108a27f14000bb3e06cd483012778784d01c6c4b82f196802c3229f2bde4612ad8ea1a3f585e138ce53ec9228d8ff6e748fdedc4389d7e9c98146feb96a6911bdf528bccf15560930ba92c7797299e7f0a19fa264a98c528d6d070b0199728e938f344d7ddc4e751e6c1ca946eaf00893e6dbe7dee1bb17ec55ae2ecc9ccebc6d2d912a65c11cba25dbb0ee7b87d49a21ca1cdda24efdad4688659309308c7d9f58f2ea3439b48a640f53090a2c6483c7c8bdcfc738963567556ee955bfb02b19b1e7029f0cb775d2aa8bf6503c50d44906f3dff6c256402a48715d8434cb12923aa3f543ea52be1072824d734233c1d0b885b7aefa48e894efdb6a746745304f7e42563ce206cdf23782f41156e21287eb3f4a89ec893374409c907ee6cbdeed8f9d36c3302ffb16beb7e3a4781013a7bfa58c218894c5b547fd3db942609169da2bb85b23a12f128b2803ab4b9ea69a2abd3b7ad365a085edf7955d58f036e546b80415fc0b902ec3a59e559b3e6c1bf86a2cc665a78fb5accc676de2a9a486521c0526e2491f9b2e40b8eaa4e5b97a093df61e4a9d4155b252d70dc771076914842b646e8cf25a6c8d59f72c6fce2e15e1876f1acd5c921f29a3962e05149822974f3986f5536af09a2fcc3e686988859d09e7391cd923153d7f40535f68199b39019deb47d34648f3ae575579e6cb970d483b96623fbe3ed11a5691a2406cac3f2d797d46012f4d78467004596b592ac09c09446b7ce8a3f4eb264b827e0ae689a3311a44ba142d048862da2e47625d57316a2325196b86032167b420cef4ac8169a852883eb0cfbeb962530a457d224e835262afd190ad31f2ce1cb57e946864a0008c065717e89f51f18baa35d43d3c94b0d3a731d667804e3d6344294a4779c43a76ca176b4d29118a057590d00af0a75defcf0af1c3d06fe585c7f5c5bba2bedbf717c9c0de55cabc53ac7d708242d87c5907e8b97cb85daebb8fbcefe7d1b75d7a2c2f503aa18172cdf57d7bd3acf4c511763304a1fde00a36f77dfc75a3c81d0aca1d9105507fe2cb9da4e3334cc71523c523a09befc5eaa936a43ed26710bc24afe4b11cd6cd2c12db1520af39786e574b94ed5389a560d9b07e58cebd389b4e070e204554d97742b338a30dfd8ea7c818b5ec53682108401db90ff62ed2a434ea32281925b987be91d8c0fa536e7a4ee923b12d575a786a8f1163931efb6eb76dee8597ac5aecb1cc9d5d3d3e11598d27a4a20e6ef51150a8680ea78eaa3b3ef3a602ad8e7b352d9f6e4b578be99c38693d613cf2aa312e436040511b9bea506f1b20a18f45f68aab7f7ee0b46eb12c52a5ee06f17dd4a9fc27c8520a18fdc6a3cfa0f845efaa6392dba11a08216d4e17e7d9c00197fa2f486b4564a97d668383cbaa029128713b3c140e0c16b66d9254882dd76bc290958c88c2da51ad745cdcf3959c8c38740fdf3ab1c693d46a2d69b291bebf8df357ee3ec00f1d7c3d3a1a5640f26eece7d7865de880bf2ba6e5f64c9734f57391001b3d51510fa15ea78855d5e9f825eab806ecb3aba7ebfd4bb891b32e55b9b2b903cb7f95b2e98e0df4b0aa49b6dd0caec6e2535aff5f554304acc0207babca2781c1f94ea598c0e7923818417c68d269c70808ceccae7176074c2247b1bedbc9c1a864a55a05ccff49c1894ba4d575246ef28ce449725e429ddb5408b9b9ab4299ae08097404f3b1388f19604c3fea4b5e28f9a4b6b58d87939dae1db2d95bbee1b5103c10558794e070012dd9732524fc031b1bd31bdbdb940cd7fccf59f722319519d0ba08c44ff5e58f5c117b35ad1b434323cbe68153e9f752f08ac80b0f933b74e66aac8a85c9d85fa1e52551e6e94997374becb3c35677890cc2b00dbc71249ae9b2390465fad19d0fc70c47d065da5daf5333f16968fdc47c49cf8b1df886df27a87bcf5a7df5dc50b4650eb7a6f321f0976a5d18c7021bb55a2e701ae65233bd49e1abf0c4fddf83fede94e8a102ed891afa997e8260f10a7291df976926602a5a1f3a07ca38388e5b8edf6a33584ded47d0d855dd38c4d492a3ddd4da750776103802dea35f2be820b94a63b72603985f0c20f065be23221f18bc99ee6f41438441d0787acd6fb4993a07047ac8a2c74640e74ba1166bfc7e503930aa6e989594e29f46045ae4906a7812526f4a2dd8ed9c2ce383b631916758ad12490b2df0ca45f4718f17fb5bcd0aab4b70c118de2d24c301830c1c4f7e7999e98b76d91028387fc124a70c89c5ebb4736afe7919e372f1eccd92b5fbab6372931c2756a4e9177d62f488fcd1a4ea90840323e27d6f9b7579ab79be5bf818e62dee01749e665d39e038af522317466f00d0d5feb7e2030256ee902bbcc74c841f64c6290586eb75d5a98b3a28efa58b5fe668759c82f43a081a283d445a553bfed04ad14a098c0d8606d4cc88a2e5331073f7ccbcaef2ad61838564175972640c8396f0fcbe8412024079db5725f3282824578236326e7e1614ea37efef5d16692feabd814ed5cb689d9ae436e2eec613711015585b9907da758085885951d9671745e16ad91103d9c00a1f6bcf2cb33b12a00482523b17d307609b2d6d6abb9f75ca72cd59171ec4714accde0d2e34ef413b59bb5a696f789e229d8c4552536cf65d63bf6c4d4636a7097f48f52fea8fcddac205060f61993c3feb9b12463eb1b73f629c69e05aa37e66ea5cea1ba54c5a97debff5f7339a3c3c549ada0e46c25dc3c5d10cf66fc684c03590595f5bdcb46b07b3cc5b7b1c7417b16eae5797ec57ada6386d8129a75b09685b86beaa1bc3c200c70b61126ecf36dc46fb9d48d28116e0289ef8708e378ab7d8258ab3af18c6fea86800f06a89a07af3df5c1b47ddf6150f50358b9021265d8454b2e7dcac8c7942b7248b36d5c383e743de18706a4e54fd4ef5b842bd1fb22d98f28279bdf0ce76c12553e9456dd762eaec4bda7031c537848dfe08ba6b87f83ee59adcc85057125e2682d577e31447e58d40f8b631d0281db2ecfda9a9252955a1dd0f3b88f391bf621f4123894f32c70a333bec573b527aa0c7cb78762628d167b9863646f377cf545af5ce7fe3b76cbcbf5dc21ed55d76c47f0ae1fb2d383ece627db7309877d64128b01e5869eaf13031fdb0ba38e7e766ead58aaddaefed8624416c64097fcda78818ebb0a67cb0481c62de28a9c72ac6ce32790ab7de2b70f947662fb7042a8321a120ed3019eb3884731ac1a848d6a4952f5c74aff2c4b729fd4b0c181081066c70fc2e22cae962ecb5d81a0d9a043e8fae6eb5f6fce4d3cdb4e75e4e255221a4e546845f623b7a33401c5521bdc9e575409991343119454421e8daa03954a25f4eaca10e229bc4cfd3fe8fad72de60d8aba9cf9e6c050fe9a2abd33c43d3246befdebaf550b31f3ce53a22346519d07a925226ef71265ca07c5d499f2e889a9fa832bc84a6d3295f5f62a42a3f460a1bcf9a0dbbab151756491f213623ea0399e91d4ac4ee413c770abb66f479c3934e6f053ff6544ab84bdf562e5db65677e545647dec731e18294de10c08db13e0b166f44a35067f27a428d7f5252ba7e3a02e89da913d5fcb58be24df4d71c8a5bad3aa08e680f184b0c7f2d96095a8ddbb2cd16d762b7233489b4717f4e49f5b843f3ddd115f4dd636fa0118e32be79426a9c0d62ad0a46fdb5f04e724c6b937816888c10f70d4a28c1b770c49d887c9fd09fb64d8d3cc8b2ac9c35830a6c9f10995f86ce2fcc71828ccfa7975d7e16c119a279f64a76c1ba1be1fc2f3d8ee34a01d137c008b21e14e6630cd65d7ba97ea7926f27ff69a6ea1563b279ecc1ef0017c74de45284d5623eec74eb815e4f37d30e67beab9517a714c774791d2c4e9abb0b5819cf41492bfdb8e286e114ef6eaae4b3dc050a5c83d76919561e289176f33906d400d97f872258291e0631fafdd9588b2224523941352285aaacb29bf50c43761233a255fe5af540581ad899522948f0ba459e55cde466fe281af1356c00096886860b10a299b88ec06b642944c27218eb272870f0198ec3c2d2ab9cdd98194b626865f91f46b83a4629081aeeffe70583262216bce555111bb453ff87b495c53bc1aabe4d498011241d6c9d89536d16218712c9ea199f5bc0bab856a006e8bfab270140a7bd77a4a3e2d355940e383b5de8d25c974cdc4cc3ccd37082f68e9c7837624b2153896bbb1ff9beca5066091ec4b6f04e96d2230675dc2be72eac6af124ff19c8d5fdd2160ca7f86c3007ece4d4e217d21c87ac1ce337867f8e8db4d915aab28e07df4886f67067c9570418380d7e0b30e9611423e5d614cd0bbe423341b4a6b6432e2a06030a0b53112078fcee0a2a404d07edaaaf2eebdfe99e13f6b010b56942d4b28221885ef6ba492012c92c664a67738346f38f1ba6effeb686ab31e8d704f4d62b270921dbe61c40b9140fe5a480937b839b0862fa6734a222f1d632863631cac8a4a4340c821152d443a53aa4db6d324a079200476a279a9771ba40e1fa11e1aa8998d560e6bee1d28558373ceda07f68a9ff0b4240cfb9b2d4379c4296de2b73a27d60afcd3ae4ce1b1a1dd809faa40834328e9c6b2a33706db9b24d35e921325dbc6691ea9912d5dfd7cadc1fa92e77a7052708e7d504c7ba813d177970e4e08de7afc589dc0dc01c32856f3b3b1c7185af3af9923e5d77fdfbd2f77a5cc3842d9f767655997286c9875f8b471011fb85dbc5063dfbc6dc138a2638063d3ecda098d588c69d04385aa42fd25c30dba2421246025502ada959e741f270c5939a97b1a99bf55f0223843a2f1cdc2725a63cb2dde1f4eaeb5702a89c37fdc7cf61cc06c4d5c765071129ffc7aa9b025151f0904f9534e6ec77e9c327d3fba126846356902b6d6330cf221ca65291a50b634a69b368a8dccb91e70b4f2a7bd73e7875c1c8eefc338168884cdd0871215272ac39ec8bbe73ea7ebd9e25c1cf831296927b8cda170f09e18cab13912a6925b1fc6f1ce394aeb73a6a6b51bc4bbcc693b737a38754845c5744475043e73fa6cdf02f93db14a1bf6ff3b54642113e1f4a68aeeaf34d23b16b3284708454c654f1e9031dd4734946bf8c3bc41a916e55ec4dace4be7fda5c3bdf509f1a37fb56cd6ea50be16e591a03d3b0553b3a6f3c3e32bcb379f413f3847b431d5f60030424f5081c20e93d33c511abd3b9f8c9a3f6b2e5cc315f17e861c62ebf964c73defe386888a1c280b5311da3f0dfa476a3213d7f93d459eac5cc49e89cc455aa745fbf49c98c36a451350899e3ad7f7843514ca6c2556fbb6b217a7934a0e62c3dd6a6ee6383c61b12b837466a512d267361c64b4c555a6732361f0e82f4713dfaa3a396e235e7b11bf204c8f45b6574492b1f7263a7afc38ab59f3ec0198090df77287042b99f7142a2172a271931cc449fc9ccde2e8e8b8eecf9490fdb886599b391a2e09a18a3102bcabe811190de977e4ca40a77ebc74ab21d06e196990c7cefffd2337029dd91d1906d0598a2f60684891ba3e3431ac57eb419ee4c656b6c380224b20d7e2669ef7b4885cbc46685a6a252f5fdf9b82ba8cbf16e65e2f008b6ed53b2416363640b2acb0fb32e0c89e5ed0442786a7ab1885cd20ea425c61227af55b0a26214cff7fad626391379cd6ef42654b26f87fe76d163874935e0a1bba5be1893b477db7f74f46b51caf8f365c68271e7e21bb27c3ac9ff7909a95db9f775dffc6590448b8fbad96bbd892898c786a342576137924908a4377c5c9ae22199f8cd35736eb9d8e33e8611e810f17b7198a4f4789a23b38c362dfcc18ce1a33e8903777d6bb05e67da1ce73f701afe03948553a4c794ebd10f2f0901af6e48e790859fbd373ea5ccbf3684511f554bda11af48eceed01f1a73a2793eed919ded8c1f63f974b946980897326a3f65165768047910e0027610ad591ae03876bdbf245f1032a67ba2770216cbfb27b30a6f49ba256559923656fde1ffbfd3f0ced311d0589a3206eaca40fd5c54dfcdbc793008cca5114579b7e9aebbc9acc287170e92fe71428e9d0a1e67fe577dce0c1f4dbc50d1eb4b9d4674ef11b13f5896c84485c6a5f15f4912fe51b614b15aecde3fe18806517210bfe45e921818641ff8dd85c979bf56f77bd57befabdb491b5f18ba0f498821356445cee6b2640488992aa88e9b67373151e729272dcc313e14d8fabe69a1f51dfac670f7bf3dfa48c049b869e69ea5065aab53d9f2e784045a8baaec0e9197f8bd8386c88d4288e8565139c41cc3f8ae767a261bb421952b55633a60996ae4d3bad0172ec7512db8ec7667584bcdc396e270ee1454083d43fc2f87ec90cea145c3735517bbfaa070e7ce04dee553c5290bc88708d4a8e0bff11fe1f494a7881b77c3c8105435bc02d096260b9f99b2041d1e49e8a669e658e364c7b8c006e026c670cfa70855e789493b73248127620a9b6d19a1bdfa2e0354225c59add441fe43b72536d5ef2cc9e7a1da375f0ceea9d88654c3d1b2dc37ac1ecd756cc06a985f67f91378caa687f38bd6c30ac2adc60d8edf4d2127976840cf0805d768ca574d93571d30c737abfc2597496d9e4c6e03dcb86612459d1d28017b475e50726ababe58626f47c4c2743b67d1e016418b0cf2f7994d60c562f0e6796d624386f51ff17c924fb09042d3b556ce0cec3a10d8df6f0d70a2e4366300f6301b0502af9abd9353113c6fb695cf1cd1bc436c7f75ccc7c054de55784f012b10af6a8979b63b48eacc44b6527aa5cc987af8a2998760916b3bbfbe95717123c5c80429372446aaded9b3e280ff230a8fbda0b789b4509f92b776a269fea697f9d0a96e58a67059a70a6f2443693de6f60e1d766db0931fe79f8d45466a7fd4ba30be00c34fcab78a9fd2ac4b19c9d140364fbabd472d688d141e535c3d095dafc7dc478cc999b71c967cd330e3ffc7cc32fe49992e4b707c363133c0d5ba1f1b3c2556a9a7532bff4c988b76ad5e665e307aadb28e5cd346e7ba9257d8f3b1cae991971f433ce9fff359331e06128bbaeb344adf8bc5a3e687e56bda6bfd0db4c5604f3105db52927a4e70d051444764c1066e262ee7ca0ce36bdbdb54a5b9f50f02ab6140169cb70421dfc7d2f51a5a8fe5d667427996f79080760997c1585cfe9fb9c78dad5be4c9321ea5cc44969073abfaf962ae5d9b9303abff5794ee451e9e3c924c67babe4b9b521935d967dbe84ee0445c37dfc63338cba91724500cb3f4c320f16e7fc022621e28c6a39f7ff3b0f45e6ee7da3fe9a8ec99f259e3dbddb7818ed1a2fe8fcf9a248c02b1f55029f579a6e2edc0f6fdd0419bfe0de21cd6449d88e5a4b33eb118ed1d6326613da6d0919ba11e5f410eefa9503e4f9055815046bca2ad7348f899a8d0d8fa0e98bbd5ee93233b4354e48096c4ddb1ac17bf813c1e2b13a1577f49726b28ea58350b929d46dca11955885861f90ed65b71d32f44f1af10069addd5ba972553cfe07e77459313cf4d51d877b664626d68b68ad36d7c1d08dd789d07af80140d6bcabb1b88cda4b791f8fd42ebeb5d5fff3e54cfcb6cba8a8f34d6f7de7916e91b3be42b20115e6ac432529cc92301ba6adefedda628e028c5bc2b13ad606f563c0a6f08608380e93c9f2ff68f6252dca91b989c16e956adfb2f79360bf171613aaea33feef6a3149e8e51df5029c2d80add5b9e33d1bde595a4d342c6185ccd9e6464251c1f5ffcf06e5bff2f972b4aa66998df0c5ac19944df5a6260ad801b611f455f7082e4a50f15028516780e6ec3ee9286e7940f9fe531f6ac9448ae8a0166c7b10ca9eecc4d4a3cb8a40754ec3a79577fb47b2ddaaee462ed6b180309f027afba1f889460cb25e7563b99f9b0987d4d97c533b7f42988d07eebe8b9541b43497e04df1cb086f48fa5bb593d0d1a731dceba27c63325ad7339eab5bdf1c6fead7de3f4077ca1583ed6295ce5fd0ec76a46f5cfa6e3ddd0199ba3277c9980ba4f0be5e8fd90c6a42a7d613eeb5e14827d611be54c883bd0475497387ebeac048f4c22f55f07dc90a7b67125c594a9da2785add434e0025f0b7a86bec49d7aa42f01e082717e98164ff95cdae1e66ab02e82370eba2f5d0ecf9444a07d610ece5b0087f130400521c2fafd5febd482449b285beba6bcae429ef87a8c8731c486fd8a8587c1d63d5f15cbf973a357174e61f508336ddc08033b2fff7d9e5a8fabc1235b0ffe7f4e595a1104d54a546524ea3ce5b7375375d1ac50f33f0f5c2bbf3ea578f9fabac9f15cfc6a742543f23f88e4cd7d26aa03715ec399cfc53037be0cd5c7a47f1c409a9c669f12d0324139f0519e2e4f1452daa03c80058f5c88d06d05c2e5de3a9f089c7d59064ae51108dc58ae40f2a7fd758f8db6af383857a725c901e0757d77c71bf2c1fdd7b8267e638ad629cea0b9fe0179e371970f951326e52a8d25bcf86916d685e9de3cd31b42c1e11c98e48220ed7796c214c89e828571cf6f96ad2ce38a33cc0361b2d7cc2a6ecf978ebad4978b1c187f9f592eaee804fb236031692ff82ff578b4d70ceecb858d46f279a40f7aeb391204b43642f1869240548fb3435b95a01ab3bd757a7006ff45a711eac32fdb311ab874d2a8b8f6f7a35f8d59a6e77f434ea587aa5d14060bc90af112dea259c186af6542f9e866aede60f7c9e2eb619645a8c760cac1a91bf0bdbf30159fbf9dc039b3bd06f346c514bf3ffe783d6ba957abd21fd17afb197eb35ed29df252f5c212fb1f7937193c9835bba5c49b18880f0db627b95e526c787e6dc56c951654d38d3ad155e3dd573e69de418cc963924ed2662e9f6e4772beb41fa6053aa2c14eddecb93679d809e1ac37b007a92c9da6479f2060ee5c20af8b86b53a681052ea504b4071e7b3808fadcdff3f197e2f38bbdb8c8abaad1d4c5a87e5c3d0be6f10e2f81853f3ae6bc784d78398fbfd93a8f9c00e8f8e7a9069ad7889f4a1e11daf51c05675757aa6553d17ba8aa0b41e7b366ad34ccefa89e14aa1c7ad78855a7bb48087076ca16ac166e39cca7e368ec4abba71c500c144c5f2d5d4b3bd625cf7a72d8f2494b849ee6f3e7a4c20693802d6bd1f72f6d6db30353b8d982dd2b58328740c11a3d475cf4df7ca03fd7a1b0ce2bda8d4a83308b0c7d7c38835b2fa4fbfecee4707a6ae30ba1cf46d0d1d4f580fd0067684bab25774aea248e4abfd4d0ab1f2449a73662bc6d79d015da21b374d27c58590eb8a21575265ec48751a41ad09dabbcf7a827eb88550634454914eb573768fb1c588e2dbbe0dc400cb9b7235a5a32e9b9afd45770b298d47333f20026169e28a93291310bc75091927115ef7fef61740c0ba4c9ecffc09c444801e9e1a4bfe1ff09bb88c2177d5d1f9025eb3b29acf855d031f96e759b66c618225a4ea1adf258640570dae69b32be46445ec6de9b1fa68afbbd5258dbc11b92f2abfa3f9d2b51ca2f8cd07890bf6cc43c34a0539096f62f2fe9bdc1deb2d5e1f87acd140279524a3bc460328e80c8d27364a9f214c75370519e83df08f7998917f79d96b94abb2fc490fca76a9e60dbf3dc39d922ccfad70692c321d5facff501f128ebcbe2840f22bc3c7926aa6958f2508a6b1dd040d0f3a507178da70b7c254712157fb57dfa7e0c81310cdb562e57831591277d21e1311b5d7c330571ff333baeafb5129aaca796295b98bddd99589bae8f9d2914ded0fbd3e9e3a43f47be2cb4107174f677e544d98e671de29f72d7caa486d634f5a267ac74b64e337953a59d7ccf68e4e23cc441e0435cb76a671fee1323a5ba0146c6f61d5bd38d11cb3b8d3049e6a1411ed0c6b3bc78ca2ad9d9d6c2a748f23386d1098048e4441a0ef61d74f7c6632ce292b755ffbc362f9d20875f2b49f179f926076b64ae6b732279e462d189c9ff0327d1b67208523a0f606e8d51935a85da28395748819a60455b070e1f004c35c48438a9627fda164ae64be42361db8cb5878022e0cf522b9b9843c43dbe98adf634440cb5ed73eef1ab866c82bb97064145017a7847acb4ae2911765b3383fbdddbcc492a1b0b071a87ffb4be18a3cd97452291e4f9a21ddfdf96986a7130d430c0ba77e832c12cdae7b232f8ff964db25c949d62f9fa6a36b3ed19818578c79a140bd5bac9ad01ace2626267193e7b836c25b5ebb302334e0819d49637bd38e8a292d9110147e4408c17e7231e9ad94242fd373cdc56d57d8f812ee01903b23aa76ab3229d6ed87887579bad3a78f05b07368e00fafac090ef3c205235b0f99c1ff521741a074e40ab6076b6b400468fa25284a01e566388fbab2ea7bce2b639eac1b331234fd09749d252e2e966f0e6f1934a5aa09e626369d46e5e595ec87a40886f6dfc084fac3edf786cb001902727c0234feb5827e048e989b8c8e7e7d9f3ba45865f3de2dd3eec9e375192615cfbe22bbb8c7ca6c1fee7e79160f4c1ade798a94ce3e2918bc796c41885049d77c27a404a0f086e66e08ef343b669526972907506e097fe67c8ac09a92f2706d3b5b7272378e876562b567f16375e3114254e75d8715813333d5af88bc31b8283f6e6349bb576022bd01e948b721806670c0b8e047cf8c31d72fe5a2816cbacbece20a444bd8ed4f1b5d3d82aebaaf5518d2eed1d6706c590e4ea072e7aac56ff1afc6a5dc8cb3c10b9c5fe35ef1ca1536b895d2073bc1a05da60f4e69908dcaec18abcfbf6aead3c52e10ba469525da02d7206c698f640c1ff2f18bb79f4cf546839eac26e2d19636a16da370aa2bedab7cc592f71402ef1aeb0661af85312536964dacc4efc53efb9e40827611649dac887f43092e2785dab24fd51af78cd3c2a85437701ab058a950b4fb803a3fc18d84646d24f2df61feaaf10855aa7c9e98cfd820808b8aed2c81d302c51a983ea7c685659e314bd43b931d8de1a9618ad510d0d850b7f0bd15b71664ab0a92c43a01f4cff52887cbad9de2a311b7cc63fbb31f6ee7bfbd23db3e1cb608665d6b7851bfd9391f78f2751024af17cba09849277d6b51d460ef565872a439dfaef3388a1c86b9d27b4701b853f76094ec08e917cd1c4d83fa7c3a7ab7a5932441c3c8d334970854dfa8a626787ede20c6a8fca8666fc039339c10cb35267968e7621b5f293616237ce2adaae199b89f9629dca218805e544dedcc5480ca11a2592ccb634ad5a9f347fdc13caf051da1cd54c3c46a724f31cfaf1931a6c6cea174b062403fafcdc13faa9b0106f37540d1a19f2976a06d79d95de0c944104350f4bcab98fe903eeb97540f6580ff33e74c4d5b0ef8d84d8661b0d638ac5959360188b3be336cd1866efad9b20107c2580bad4973dbf3d1c9de909ea442f1eb947ed1d810fb864fcf0502227ddbd5daecfe8a9fd5716e5d3b617c1451659fb0441cbc479f9af4ee103e3e091108c3d1677841ff0b94b55f3e83ce523f50e6b59cf0d3b87bb58af0621916c1fafe200676bac7672316b7fdae5835670f7cc33d8f304886102682edab7f0e663ad15a7688f5e5174e9f459563a9d1347f66875f60f4fc1e837acefc19ab18e7506d67a6083ca248d2c5d0836ea022a91a8759701c841fe8716d4a7c4be4219f0542268b06ffe26084002dbe443b3b76e05906eb266e38aa0e934683256223a2a5dc51f065f7ba4848e506ea62e35c0713d5119e132bf6a9c18f122cfd5a9257b2092150748010435d3365a29fde4e657c6b24d5bf390aff407f50b8a64b47ae310350ff272959e52f3263568e5b3a337d1b1e93d6d7a5594b34c60d0ec70dadb13441bf37190b727992f39dc4f45c99869f92ad9b8e00303833c1bd88ab0c9a50f7ff89249a41abc035a6cd99450c024618bbeb3c19dc4cdc10e2a51ae43312154c74aecfa971e2d5041e2d3e4fea53ad4b9bdaa6c1d022181b96cf8b12fc899d28b36bad9005eb12bbe96845573159548bbe03381d36deb6dd3392596771c3a452ce6e5a10041c5788088e0a3a7f8a44e599b39c1353e01cf2dcbe227e12a2a80ae06606b9adb679224272e52f0f6d1937efc426166ace8ae02a3cc1e659b038b101cc59bb274617d22c650e45e8bcd05d543e2c6a6b1297b64ede535513ad3b9a11f1c8ac686a5ce68a7e5ece5a207a91acacdc717a4b57a55e2211b0a78bd11542edfd694b2c7a92c61321f81753d2f87f5d73cf5fe2d90adc8620cd3d6112364cc7cd8ef64a0cda7b07473c0d2deb3dfd3f2618befa95ff0247465e4f02b2e3194397608c30fc8c7df043b9f93eb6aaac479512a8bd6c7e85d1f2a429a01dbc4b76ea0e56b7e785b41a4582bd5d4ff5c7e4fb73b44a02a7dd64600290f030cd22c5d74cd6eb58507990351618cc76a11f65faed72a5012572775aedcccb5fe725aa5efd52103066f0b667daa60f7e06fb14180ce4419cad5b117b1ca1cf64349b292e8fcc7e8ed4cee26a47b0bcb5a0db573f0f1b8e0167e4256300ce60b65b2992a6d5b461fbf4cfbaad67def24681df24b7e049e0955f1bdb7cdab9ae4f9c77f5a01dba9a4805aee398cc40acd5ff53974e293357f0718f8429dc22d413862b41873d41444a9d4c4830f292234b9a88563670c36b4ba8a11d039ade574a307ddfde7cba75a52f6f22e79b33d7ad7a5221347f6c7f021cc9cc4c79f334cfacc94f308f25fc24267385cd8713068afa77d2b97fda057c61a27ae34576839fc849c2357523f3cd713c7d1288b5017fb21ff73ad5ba71fb86d224848469abc64035265b0c2654857659137f2abda9fd03f8c9340ef88d24590526d6322a714308482099707f8273e4c3d99da2d377d75c3c79610f6d1343fea9af4cd0b9e9de606b52aaf71de2d556dff51f5ea4466a9730e6f7a5eff3a053ee7afed7dd74fecd1b7d0ef537bba94cd2267caaee575b5742372e93abb2d8d9e8de867bb479d442c7527bbd820fbb14aaaf5067b3cae4a560fc736fb5779c6a5db267d2e545e3ab652de8cccb72d4fe4c0defa02efb276473a0ace81fab5ac8819627e747afb49cdee626a888ea61cac19515e52d7fb39eb1a99a90adc5b3c8e138f7cfd1014cf0ab6146463511283c8dd274b7a01a6dd670cc224ccfa160540e07d66f9ea9e9804f88b394dac8b84335ffbf2e59637fb385b3b9b8529a6392a3de4a1048f768652d054f7a058102f690b4a7ade73180f10d9ffd73e716f2ba63a241ad9a223f4b40bc71f5c8230b6c63a6a20993c53c2d749e30d3c6f62eb7f3d9292e378bf0e9400ac7fc5ec25716bff229f9566a742d52f9fb1fb965c5e7ce0e95d2f580827542eaed66608a068c35ab6abe154f520fdd08cb9efdde3f74a1ede29c681c2423c25ce348c1b5d666e004f9a164e6ca4ae6b0566673e62810733e6e65affe3e6a730fb4ba74bdb511d1cb76f8a1024b93fb869a9e3893e471db59221c95bd9aa3cf537b83b78a042bf0ca313b7572366ea772fa3d1d4ddee6a4724109f6cd14a33f9b8df60e207105d9dcb581b4571bbcb3e035c9bdd9b3d7b1f9f85cd33e1ac5874bd57f0defbac43805c0b9bcdd5e8bcaee79710451624e7ed948476d3d836b0b699e89dfbc38ecc9982d7c04e258844da3198e00e488e880efbf6010a377be60d7b0a18d385f254760e351bffbbd352e4774451029d4cf73a874fe3b8827644da00af8ca8b0647b795d21e289b5fe7f8f46fa9d9760580776bb58b1f9d62978ef032fb88daa2bcda3cd086fd65e9e686c157ffd720625e2ed2ad1b119e162ce59c9e907fa03c994fb51bc691eb7c2fd0a306f0b38e22d6026b061ea8d9c0f778e071129d60c6f1bd7bf40977db8ceb79fb62ef5c565b74efebac9d882d3731140ad7a3e1fbe964f84a18110e164d1255444dfa8fa66b6a1329f6236136001a469a14db17b4f629618ec905dacda21d572d39d97ff9be78eebcc652518aa904f5c07db349cf6dcec6e4809aad95cabc7fb96e671f1544a94a03885c07eaac25c3b396191854519d150194f4747018611ea407595d4b456ca6df6aadd1852059eb653861c9a3bdc27ac08d89f61d9f9e61eb5f19113b96003ee3d8b80699dcd8ffcafc761e2783f0ef373273f2d990ac48da6e4354baa94c9b93a7d006530ff434495f6db0b98199956c32f43b251216875663e99d5fdde9aed212df74d4109c162b680cb3a343b6e78cfc0b2e1b56e5a4f67201e51d05dbb7507895c24e77600cd61a1a73447ff60f00f2171054a0e3ebe84bbb222574adbef5c4c4dedf8a7089320a76833b5e5f24a1d782ef8a11e4a87f6ce64f77610970a89704ebe39f7a64b61892efdafeb2fee4996d54cb419774777da5d3eb452b9c95e22a427c821b485180daa224bff71a0d0ae6774eecd4b1173bf3fff33c5e9ebd77308f9196024fac7e9aeddeb907de90445907a57901bca33aeee5e4097de15bdcb089d97093c42916e6eec8c7556b209efafa5630461e68a69935de629c8f297a60505bc317d9758e6150ddd4edf6e836e16f6640981e1c37597787b785083988a309b82d527920c2d7ff70438ca2a579e9e7f3f1f0ab71b168d89fd238b18267b706aff45646a2b2302805c2ee341184f7df69b4ad2ffbb55bc9da075a24de58e42a01706e9e7044fee074b50a05119f6e40f79f56d0ddbe470cb943ed31f26845bf5c6e8fee6d4eb99306ca2611cbf455e512b2c1b84a17eb0dc7ec843de3ed24a2f2ba283df916eedd2cf43636989adb2dcf2ecae7e11d1ac4e56f1c3b5df3bc0782abd53df709517f0d3ca3796035b4bb314b8850dfd1481e91a89f51284c9eb73e437e37b9c033ca0f52e100672ebc0e57b7fffa527a6e6e3f335acb0c721d1b78c65ca5249f106cefdc84798bd4494856a9aa2f41d48c6e505da6b92885022635f12738ef13258dd5227095729749370ed956cd7e10f9a7561100df7ed5ee5f9bc4b0c3de29ea862781bcd2233e3b0ab294a330f7e0fd5499b2f015221565474bffe9c5077cf181a4ac48eb2ff8e6ac917184a980d92d0aa1da2d2785b88e01e5605a75cabb96e82ded59a01c62fecfe7f0f4bf60a56796a1a1d3f74418a258bbdc70c53c2a8599198aa1849d62e15dce0d434c2df9d7fe126c56d5ba081e3e2c3c3c19edff08c151f4af4127009864cb8ea230ea8f80c0f354ab13a28d488b1d538d276af6a891602d341d07e90bd2476fbd57fdcc1f3c2befe055584f62170bafd6187d3a6ef9676b699f95e4f67366426c8b1f4319418c9650f1f2db1a84b57a553afdd93410400eeb8744d00b3df640f905ed4adcb3abe900d1ad3198c885a5c13fbb7b1ac9bfc8a5e792a3670042b561745dcbd96fe1708288a0ad7410d030aac66dd9dd6617937a30702b4a2f54b224403bc06471d57e669776cfd78c8ff919f1a10fe4bdfa5a1681aa713a284e19342811b7cda13d2b52f40da7d163b974dfb5fe762b427c76847f393315b22de91e9f7350f4d3624311f6a30130f6e0efbae3f65d7e50ed69c6cb9617107b06e495e3d8990711e46ab1f0ecdd41f07575eef713f47025cd1296ff6c37dcbe0a1613b40c03e1237b3602fe61bd2f45c1027ef246a825f4060058fddd03247a86e4a675d57db14b1bd1e882bd09ebf2e37bd98fca97922bdaf66a256b5fb9de7c940c259bd3b50381b84c9dc0a18ec72924b4d326517e6412504d2982bc30a9ccc3197f8abf768d38df874b0dee53f9d1043d25e892fbe323b6134ba1b1ccc559286b01d2284d9c33526632b2f7df18e64e22b8b897e4e135febb16b5bef96a95f2454d39b285d97f9a83097e1bc0dc59608b18bd35188e2b02affcc536e7120bd39c573208d0f594298264235a1fe3c9826b03ff8b2e41a23ee02048f3eacac94338fe00f18f15426308666d24be5f7d7ef306fe428604b576c3146182627bf79f91193ce2e86d0b5a5278b8cd4f9132ce754f77078dcfa11b659953c6eea6667c0ecbe194f7d1317543c6b2e5d9fdf38f6f9fb46bb0d08cf7530c5cb8429f540e8a62fcbb5b00efabb61b59c734687cc96c65f6567f8e8bb729b05436acbfdd7b54d638c3c10c947624c9c4e0bd81d2a0c9d3d8c41d7b9e0fce351cdd1f759e48ea29427955b169e8c618539851bcb705b100beb842887ef99f0ee67be973425df6c2bef9db39ad8d4436b34c0bb962ea6ad4c0f0a6daeb45567268397f31d07d311222aeef64741fe3f3cdb271ce1ca3e0939df6e01d29671d5e4647e5c33a74fa05396c847bc1f850670611de83d6ddcaa541657e1989cac3b72f2fdac06c3b53758f7d0a201958adda4831f3e21904d01bb2c39f6e9cb5ddbda2cea0b3fef87189d5c5ff4fbad7dc35a172df30c44403d63eabca475ed8366c54be45a1f5e12817d7d50280cb369c6b68596aea503427993047d14b89b87ad6a7c01247182fb714305f0afacd6d2afb76d625abe2ce59ed0d3ef7ae8f6e53777a6011871ad815bdd873ef47d428074ffade786228a253f12957f28e43f66e00faa260de6b241da0d6874138ce250d22987a4f0b7029631e951e3b5397ca70e1c963c09effec8097e6cdc72839bd4f34cbd186fdd812a17fadf29979a33eed6efa3fd20e30f55dc6c2333f45f83775ef10ff9035ae3a257a9aa7d1183d3f9144de9fa296affa704115d01cc6243c0d3e314b66d248fc8560a48c6779443522f235e1d7513094b293e4de2becb91a9543d668685afbdf4281347d03f152092555ec762d5acb1761035d3c00b1f3ce73c640c4fe6fb3989bda6e9e1593d8fdd0dfce1a33124645f53b2e97f55f9932166c22dae165e5c244231de76d2c60cd186cd1e5b958f6b69198d8d5208d209fea4553b4d6a0c88285c0da2a902c36602b48df30b2931e9f8462f2febe80c203a3f8aaf00d8bb230bc0f0c0137844c23ad670f29e8e48f8a6751af5a1a16b1761f78279bbff5edc80043eb24dbe9c3bbbfe8e97aa995c30abbbc84ebe88ec9c81a8b84a5c472b1c7f4071cc46bed4fe6f0ae229655899333e8486f301482ded6e0ffd54da9bc03251950fa2f8b91536bed8058943473a91ef4d524fb43b5b4505ca69d2ad1d27a30d49828d04bd34704fd8a7139c66a9e252c3ca88790f83a261455fdb55af37ae2fe151f93fd103c859b6f37ca7334fb72f9ed919828a1e8db1c9b15e85a884b62fb1ee73405d131ff65df9ee83969ed1fe6190951c67ff650f0dab10c4b4485924223e07021fd59cfeb4066d176d566786ec104016ac3fbe97e9e13131189ce3f0cf57724f79b1a2f794efeec2caa0f584e346b8c7e09a6d0699b21cb201199e8dbfb8fa52f92b432a26f7137d63e6e370b2190ced9aef5b0ed6644adfbff9b43461875f163e4616e0ce516900117357ad31c44e23da291bc1a9a20a91290f8357e7547bd2d92bbb78ee5d2051c47277d5744024c2e467b1996732f2952359594a12c53ae055b8c149d516ced4da83a83aa33be22bbc04963b41f9b91d58fa4903b350e93ec60f0a4bc0a2bd9f4c6c6db12fbb810073139797c95cc76969eca180ca8de20e702bccf575be0b11798a6d89f16631f6c569bb3a560117940a480bde960f5f04af24c8207cb36f070e4f418f0325ea1ba9e73f0a7e5aa75500064193b3220eae7d8cc09347aa9cea80ad4f44d280ee6e1854e604d7f705d9b7ac77ebcef9f396bccba8e35134a01c418260ec477c7d75e3c50895e1775fc9e84f993d46f8044fee46fa2a6d19870cc2cd10bf679b331c75843f92364dad083d9a7e652d40d987339aafce1f33b2bb562129e6be6d11eb017e1512cba2a9ea93cacea85f62cd0d5446d3cc46542159f399b6b2f76cea33a71e81e1a77fd7e468aa0cc2e202e35fc48d0736400c450721082132e1fa97b58d91308870a3bb6dc718c38fc3492015585b57783d313874c3e1e4738199f560f1ee2ece0547052c080e47b0cc283a88fc1d2e5d94e20d99191ab23eb2551923df71e431f74197b7aa8cf22e5c43ccc32d2688b5e44b3cdbf5a4ae998cc92fef2835ebbe3169fba05cc8dfe520260623bd5f170fb324dc3c9c7dab9e43a3c0078bae54bf5809ec8e6beb0fc7590d77cf3b22f7a72b74680adb67f4856e6c411a3e120beb4f54240a197497294ff2019170ed403b78574e563336a1044390150fdc4a731f1d4b5dbe060476b566a11e55f291d51ac78953aa460d45b402a3439a4259e7965602405913968ca4b8f8349e11076363a3e456072a6807191f577ada68a04a2e7fd5950d9fb567908a4a86f8957b3a0fc75a07adc15e11188083cce82fc5dea3666fae7c35fe3f3144d21a4dc0d0b161e71cd2487f6b4088ef3a151525c22810571cec5cacbb560ecd15491af608e4571d0d651999645975fea61ef8c78eb6391cc8af3a6a31efd8d23bc32ab24549eadc861e57f0aa454c6c0507957ecde48f20ce861da992f340074aeae0ae3aabaf9e5a18f0bc10983486c8a420672defbaf8d6d0b616e80e65481f3916f983b34e9853bd77533d9a9d98de4320cacb89bb1f07b9115fddd60ef79dcf21f37087d2a788cccd995480c51702e5737a7c56aa67e794bea67aded2c067c3b46f95d87416a7b1c297b78fa34b3cb7f92324c53895637a0ef564b0b50ac46444e5124f475ee0d44429355414d7a7ed8b51c769645d8ef9011be41c6ffae86e2577b392332011ce9b16f03185c839419eaffb47bd5f351c22b77d24ed7ca91e9562f11c53cdb90f7e6557a7f5231fdff5dd0aece71305d8640541c8043c871507bb9d2baab044a89ab95b37b9a11505a9b97dc0061471a715b53f9325ad46e45b8ab11f39c13c1fd9eb21736772d577f1e058d6893ebfb68c70a43de731edaf37acd45a6bb6a964f7fcb5514020098f69e6e0fae52cb9692c5c2461a2e9faf49e68850fced6e04a33cd1741d4687aefc2d2c928cfc3f65da90413763d215cf923bafc3110344f10fc9f4c907b80c7510fce07006d1bebc8ca720432d604a17e224bd342b8a9076434fdc3e5753db81b476ebd7f97e551f2216793c341babe7f5140df39133f60a63571d61d93e888bbbfbb4fe73acda5db8931f6619adcc461d955eb57778a3cacbd228605bf111a1ade6c4f6e10b5aaf293ecb8ac5b726859088ff5c0fc728d73f628ff11f1740893ef5d1da6bee6b3edac04f421c4c2a54c53517a1a52c31444491940244c2796e0142a24674da421c4f43104e192b0e256f94771f4bc6a07c5b14d1ffe0ac75899635e2d920de67ce87ba566dc6d959a189e060d6534cf1b4a20d9e1b6537bd78b06519d2fe99244d708bec3063cc2065ffa9aed6a9d060069950bc73a98f832f256d243b42eb46cd3c8ee1ddbd278d47a7e8ecdccfaf6ea307c5481645e2669babca22c681254d7c991c09722dd33ed500e9ec0f723c7523dbcfd5f7847ed036bb042a7383b385038be8f789423b040118a7cec34ff6b30cb6f95f478d19f43d3d4ddbdee48dfdef59c5f9d9617b232afabd1df1575d8f436008007c8d77c5292bb822bd764ac92f64cd99b128ba2742c370d7e62b04933959bcafa60b4d728926858b8aea902b6e21b1ed4d8e945512e9779eb5e0a3e121a3790be1b344329f029a6fdd7ca747d4c2bb2b233de734583a82099c7eb354a2e65ba712f9879630953bfea29ad32e0cb4fb1513e86f1b98b75e3cd35d5999ae909169f2009e38ac161d5f233d8aeea23268e6a6a0d5cc2e72f6d8d3cbc37de85e4b79bc9a90ef7cf1965ac3e73214aadbf797292e061b77435344be1cd79d351c3f6de84ebfea3798de242f954b74c178502df356786c93599ebe22c84e15cd815fd666e93e4a61d0bbbbf82d91e838864f8bf322685e9510de3eea9954e68438cc3e8d52d961f07bb762d88266e749a76929c073fdb08e999c954f8b15f8c30b8cb01e8e91f6631bff4f2b343cac273669cd31adfd44a32b98d0d62bc031d68622636f2b6c1665d96ab6ea8e357057fbb1337338cab198094aa6b74b98a88a2c6119eb41f23fe868ef6b02850ff352b3d7dc23258499eaaa251464515469eed46c530e541a4d7e404d3f686d969e74e92c8b0dc2794a48fcd77d767b02ef10c0c18f319b072ed68c75f3fe251cb35e267acae0982ef7a49c143802fedc51cc968bb8cadaa7dda08437f48b28531307eb8480f83df77f2ae0a58f81e15c76ee30237034a2d51124679e391d68fa2ae9b87e3ab58f35fe5255af67fb1732bd2aa90376081b8c4dba96d625937484bbe473acb240c3050c8eccf918ef4cc333ddbec7c789b654c704682b9592e43fde2f6526fb02c844be9d24c67b92721050dcbb69fd1f05d29238693bd856461bbd095be0bf0564bd6f0ab24100102cec31ac6837b704b03be96ec03dab7714aee28041c5a7df977146d31543d0b8268633e7be684bbde19adfea1b0592c3cb36884ea3e49eb74854b2a784f09c72d064bd0da998113825ab634a652eafa9eac4ef720a7702053b46e5b34411166e8a0a12bdd7e344bf5cd2e8c408b411a171234b84e2568e9c56a4f6513d5351cb5142c838f782fd9eea553b5ad007ba71ddf32880ac07ef0b3c284ab6d8a612812fefc08c7af2700003e33b71816692834a2dddd024e5325465a3f1356321baa2f0e7bd1599c3e6369f35cc0a1a2ccfe1a8d2633b7866d7e0fa045e999251af0b837890a8f81bc53738d23c9a969bf84e4903413e210b67fb326b3758188f1e62953a9e26977b74a7394e9007a72bd7b5bb18ad5ceb7df9123fc0e0a41b74ad29cc21cd56cf0150be217e8e9844b8087a21d187d60195100aec43cbc474a4f8aa7e66be50c68d02511aed85bea5f4621b30e95564bf8f9828b6ebd6de66bf048539b215ddd655423cf0fb6c51d463ba6da4ea744cb0401276845cfe83648b79c375455b525d6bac4a79d7d253f59e50f86d2ae4540d1ce51ca4a2e0f98a9b2190969f1e2e8f8a68d86ce1346d2c853fa2d4f2da4473876a9d8a497ab08cf08cdcec2b4b6b5ca080bfcff5f6d7ed93b6af8393abe81c2e9cd1b7dd3559a17e6c58d75c40d0f9d50cf7c38f5f9c1b336ac980c6d5e02b008d00b325e0484b403eaadf4d777c6d93aa4a8415eb17daf4d76197435c934a6b16c7ecbe52c96c54cd5ab0f3221d2a4a7eb9aee55f74069e2446f4bef6d7ee42f41c85f7bf58dee568731cd0ecabfbe7f95076c41cd3e2e3171138643e0dacc9a4a85b7c1d52b14590290825646e83ef3db294491ac2a792d6945a9f03ad8fbe1c7f2fbd270573e9d25a70bd7f5c0c37175a35e5224c2b3fb4cab3e7373b72b7eecf3b3ce401e99c2b1bd54937aaea8d08b0216e34a983d88c5ead23460472b61f0cdb031a98a6e06f636bb71420a3f48efc15f1220194581d6a59c4d25cfdf30e6b6b0bbb3a50e79ff0df8a012a6408a50f5301c516c9c9539bc323d3e57b8487514a0c7f87a5f32b0c0b01bf07662288c0318bf9fc873b55784a6cba205face2c72c77184e889e3315d27286b8e0ad61313a27dd88638ef25d725d339e9a90d75fae25b0f906cd72c0ec2cac55e23ecd0fcdb4c213e0c3b33330904f31c3dd8306a67ebf42f4a44d94ab776844897f2c32d32f5c53be6368fdfa06e85fbc4fb72601c01a3a8f08854182d38897bc70de5abd5ae7fe91c03bd83304b327182b3d2730bfe0569623ceea0959c381efec272b0ce9daf9b5b7a3dd2cf00d00fb828a72a3fdd20589ca0ec98f8a5b6b2e19d22d269b9597e8402a33093dd5beae8ea65eb2c6d660129060d4126d5ddd43292f85b34201fcd6632103b3a4ba8660ab246a2e0bd2821475431c542e87ce0f1495d7baad8f0df244980ae9931150603161b39d3fa2711cb0d9dcbbfd1ecf4e44af941676eb75ba0a5a22379cbabdf11e62a68aa2db815bafcd6cc33b5208824d9203ec7cdb161d511ea43c8c0aae04d86080989ca14ac7c27231fe33b4bb712056e3475e58689cc46c43c2ccadbd088f992993130068c4aebd6d06cf2adfe4ad3e5d9656a27b39626de9cb3b9114feca48fa816b2725682a7ae1e7efc71a869047e9d5db42d1e8803f42b9baf3afd2c5fd05146a303e3ccdaeaa7bb3a4d65c54437974b635be98453c689c00c9eb57cb688beec890a1aa4ce5fa5163e3e6bc45ebfc966d984f14a28af162d03ecf73875abdde130666e82d82280f7fce7d0ad41eb634b1fe9e4a943c05dbd807d7b1069081ffc9ffe2fe80749036c0c2e29f43c3617c5a3c0e7103fe5f87e6106de4b8d11f74afa9585a4240a592700c6e9e7a9bd637571b244f7502431479725049ed3e16f0a6fd8d4808950b6289eb0a0112b37da16096fd732596641509cfb14de715a50c00dd4046d26765195bf2155da0441b60e3b316f23e3ddea25fae920b5d525eb18c634f188920d9e33753f8b4afe4833c2bada9cabd7b1baa9a6a14616207ff05ab1044b4f8ce7e457ae25e5b67bcddc9a9f8b70c1a9fe5d07ecb45ab331a41d0909cadccbf3702899b3d376b8cef98dab4d9dde8694031008adc5a5a2b8608561ecc35a198223123859ec1688d019242e12eacda0ef63e9b51f2cb1310cbece381c054659f52325f73de687712ebe870fdcc0d348086a3fb8a63145997291afaab6d90aace61226b90dc85f2709707c16ab53a0b743c228a274c813483b1edf8e06310fc5ed856632dc5dfffe2f5d9d91ebd5b27e22f3da2689121c5cf5c5c7d0ef900ac0ec24e525eacf3793a4dc11277ed86ee76927f38310bb395aa5a087d83ea4ab1798eb3706a803581bcb5aafa66b6049d9bdd373235f202af045c96a14ea0d145831c49e0e34c40f5a26d78f36c621395c6b4e4605512cfbf928155b2c2cbaa6134e85e616e022d9fb5a3378c3b62e31fe29b0813e29e045a4e507acd90546983a13933ba6920f7646cafa1c04b85cdaafa8adcbc7412bd3c0298c328578211ab299118f327e95266b23a0c0907de27d3912b62f15a7143c477c683d9eb03df9fde55967a3e83418d34c3de05ab3fa78347017b0d865bfc0a6e6a163f9b76de4d7f9aa970838dd8ce5d8265e9caa4341441849ebf1d92adeb0d7252a0c25dbb11f25a4d80e2d183ba991f417b9ff17faeb4ebacfcbf71ce018c12ee1f1bec57b587c515caae99f7fdafef960e09d35048c5aaae6f3d0791bb0928d78da3ed5ba3f6f7bf5b4628315054e8c117d91328043cbcdbf855210efbbb2250acf03f5b1c7ae153fa6b553be7646dd5524af1452e9316d11d2fdb41d6ce91821884ee2481195888d70fb60c4822ce1e8f8d193467cb24b794a8411cdb328f8506a4eb137632417cde7aabf91462fcb3004e35bd5e4629be858ee0458d9a22391d56c4d76c6914caf14216f246e62736b58bd616ad53985dc703e71eb9388dd7ffd2f5e7a72f6e2a0804374b770974da629b1920b56ed6ebb6003382c36bdff52c64971d21070dd198d9315919e0839d586478374504886c074c38d072021f8b62fe2294ddf4344ee6965454994d3de7e022495bcf84380ac5b7482f475448f9e664eb3e5bb08f77c2210d20cc38ac5435ae515d7d4e56d4593ff7dec57ba2c66841c03ae2a304f4f77a863222876f8f3db65831b61d92ad8aba882b667995ece780f88679bd0c328d4e6e8d674dfa751ea8c2055a8f5c1b7a7ae9ff8dcc9324ebbe5ec3377e99891ae6329e11aca2aa9123643fdd5ddb19f2811d060852218cd6db9e9c2aef4f8954de1421782701f5623e8aea0e1d320a41fb094dc12a6d97f05ba6e049999fa3508ab542536c12d057c4eeeb945afd64dd4ef7f4d484554406529ab8675a2187e75be2b756020dfd00b7a2f2747a4417f0218a8cbb1de1f2e05421b1b1c7cd95cc2b1cb15bf1b96f9394ed4c5b5725ef481e28589c73aed41483c5ec8432ce5d9332547e371366920f73b0a9579824f529f7646f578bc0148eba23da348a05bad6e43c2a42446a8a8f927e7d68415f2975bf5456da21a44235845561c8cfe08af7dd98741c6f8559519286e3deb35bc6a14d913b4645abc013edca9475b8817c699837b4a7418123cfc981e9e2b3b235be85576039909fa27bf3eaed70d84a899702ca383b35ee2fe85181f9999c577fd5c21f28d8fb5073202f30a0f0932a3f2276ab3315fdfd2b08791f752191b09711a69a83f0ed4c0e28f9d6fd02daa3c0fc8fdbe130723cbd084d94e28c37530a18a81c5496fe70b7f2bc6471b882bcf0b43938f01799ee47323e77e0948a81c8be33a1dfda9adb2c68f1da9ee1c9af0ee3b1e331716977267d61c1c22e4d1736149a054c411db5b29204c597e6f06d170b823ec90d6d6f0899a85b24609d9749609f22ff908870ee95316d7791c29df5ceaabdcbf55b72e2365c7430de5c4877cd11bb51573f7d12ad00b0c99495b0dfc6402594a46a997e9aac263964c80d1848ae0c9b287c24101a89edc0dc72e788252e8c0edefb917f438f6a5c4faf8e9896583806f907ee9ebdb1a84bb28af5f357795e6fd3343890f7eb346291ecda36a76d10753e770912db36ba9798686c9fb36f5cbc8af588f4427e5bc9418d34332f1f2f2ff89533370594d4a704000481a80f293000eea80504209231975edbc3b95bd3a45fd3b734b06db0c02dea50ad9941dbbf90452f3091dd0228ad8e764c60c182ec9669b221ce8546e5603bf2a382c508701e2348178108ab83e53ecffd915b4f36dce244862ab2c706af287367308edcc26d2752f594892703574c76e53842d4856ef7337577836d42052879ff7ce289cf334f2571f4f9de2b20a3fb4ad6614ab3dc9a7f4201c1cf42380685f5e47ab76d7fda4feda6c28203f2899df687b5e2033679456e2f0990ee8e98872aadecd4f6cb0ce911d0fde1ae03e26dd63386d124dd94ccd9c1f8dbd52b60c1e29553b7fc2549f41a398ccff7a5c6f64649ca7ef1a9a2775b93fe071b599078422f1791b06bed45447d0484f537e1dbefbbfa4cd30b011dbe39f95f8d4365eb4f218bbf2e023cfa312775202d8435dccb1ea0ca9a020fb01733978d5cc3e5872c004c1c1c31b9d83400c0df8251531fca26a3bdae34d68137138816c0d25798139dd7442754b21a4b2f0e3aeadb9c93f893d61c3032fd02f9d793d18a7db6e07d016c411e6fe71c29d89a45d304861dc77fda2701de42869a84f05fe177cb820643046ef26e4e44ca9b7731a00cc0bd4f10d633f6a2df7e35d5697e813dde2a57f561140382bf1da79f5b9ba4a5f20d7e3dd02caf8710d8f9d74f1449326142ebe8e95625d240fb711bae9310effae12b76e76eff0427ef16cc03e15f5284971a75214915fceb20741427dd150e6ef177d7036449912f48ea0f5bd33844b5955bed4980fc8ab1395f320721487f299c0aaa272abbc8888846429abfd377a45d9aae63837d7179b2f78b4acf1188eb2230038cea7178758016f54b67a66bd4865b9b00574d6348842a1830af4b51422c15734a0774817d9615286afc79cc14663a49211a01ecdf48257728759ab972563247b1c673cb06914889c67ff570b935e8b41526c50b6b26fbb0860956d24568a38fccd0abca33108e463f1fac39ff66ba9c5931e612be08820b1f576f924b18dcb9bd785842c4a8ab6ebd3fd1957fd8547fb1b3fdd9a04ed9a008f605929f33bdad8dd5aaa8cf1ebcf8f4ba37f13ecfefd8423adb192986d841624d3c2ee855b82948dd0518af1f211d777e1bc3433fa43f4b026d87db4e264a27be8d2c4d03cd08d156a9f09e34f5331738d7e9adee24ca7147102e7fb0bedc35eec9a297075dffc99c9b454bbcc7b5cc9703bac097b68f21e3176a57d6627d9307451c029cb1987363cc1d963c5f08b94c48f2532593697639d7cdd236e6b1e4b22128a79aad7e84ecc099bfa9633f249695ef9eda155e4b38416983b99d973727931b4d2061086a330f34a50cffa78e4598b77758aebcd5ef684cecabc82d3ef63184d7a27dce8a716053fc5921af2350571a9aeb272f6b3b81cb70863793b5fd85a61ac3dc378c0a5f3984db9418222c0364d3d02cd9021adea5aac608655bbbc2eaa532a560b1d1383c4dfdc281c54593b21014aad6b5e7e3d828121a72921a3f2fb9b9dded97aec9f82f2c202d586d29896afcfc4b11a3f19193efeb70efd41cc2c0de986d692016c01b539c77bbce192cf83a9e7a493d37118900e158f8e118eeee4460a407fe1b71025783e9a12eb3dd8c089fafa07442fefc249a48d3fcb1046051e2723f2c6d0531c5d16f1b783256b695fda6b4afdb9b4ffea6140ab0ece7e3bfac6c2f7c1e3fea9875baaacdb3fb2c3e0d0e26b0b15f0d4c87817ac666b0f2cc108c190196a7381f35d8ff119d0ab33f97b06ae31caa09891e6e5c986c4c6ac7cd9b3d4836278a95bb9de4c01bee6c439cc5b16e574c8caec28caaae9ce97adcbc3706b8267b6eb003fe4a62a88105b9364fd217e08338ab2c3b85670f66389b3f26e3b02015d20657050bdad2372be14bce59fa65bad7a228d1d203663aebc195c239212696d93dd0d2d4ee055315051573a1d59f829346b42b7f6705609f95694f0fa5d0f1ee4455b1feb97ae13446816ffb793e34dff88ead91f1a09ecbaa83dcd0d5b46c180129c395b2659731be036491a0bbfbf326b95cfd7392df6c6ca7cd18b22af9a006773ea1fa9dc41a6a45e7ed1fe1412614eeb98ef54634d7ff4e4b0591613ac2f2e154678d33b325b0dc6d9658d3ab6748c9bb46149335534e5b36e8fce133ad59c4f678f1a76d4f9bd18eb52801dc7d1f4455e5cd37c064e9ccf4ae5a32391bfbd9784df331f5e9b2c87727512a73953f577eb44f421801bbb68d2288bbe86177d5aa8530642320942ba7daa0bac227934d6e63805ac7d0512ce959644ecc26e4a4c7b7c284d8e9642654e587fdaa1f5941e976ee5d1c0e9573f5703da9c85a09f909afa5e41cfd055a9716029145bdf73a5f9d5e7ca3c76ef03b32fefad1e62c603a69381b008079f0d6131310754bce283c37c333e49ad032e35c70c28dfff18948e46b564f9c1ce14453f8942d53e5597b879b0f859a4fc4844fbc30539a88807f382891c99cc52d82ad895797489dedaa8fc3c6476fce99608a03e46f5148b177a15cdbceea48d9a639f0dfbf54282809d7f3a08cb5e2da500538f2aab44bae1d5fdbb37e42778f6c8c084c954b228d5eacd8e75a47cf1ba2fd370535624d9114ea2836fd061125c3a1bdf2e4e3eefb908753755fa6790f8e180a52237eb2f6752bb68888817342b9869e91f70c66eea56c6dd30aaa42a396aac30b412515eb9ef98299ef752758aada9236ac179c8dc22a939ae3667280b03e636ed713ffc7d5b74d0d44d3967bc6919a7a8433e3fe35911e9424587443d73a5f207fe8191edbc7e6004c18f827c2ac4c387ada2dcc5c87e76ebefb0695118868d5cfa79e645ec01db431456a060376fd79c42e38b22f5568a1cc69e709f5408e90ccfb3d7d2e297135e6d0357ecdce7ad11f87fcbee34c8050f2ddf65d82512669ed6dc7c81885c5a202c7a277de158259318f23b953210da6d46cf781789305c30e3fe89f6fb9c29c1444d07cc1789b63937fc14443d96ba8e631979e298402df1c8cf4625dc48e16fc55379c4e1e5ea5627c04dc7c90963fd8674882f25fbb034c78741dfefaba697317550b072b7df732836868842cd9268588bd754650d54ec9b9f6360f9021a55b7b853c78459b23d0bc04345592ef25aeb4cf29d67eafbb4eadcb21796b76f9d7ad1943302b3abdf37b00285e28eecc3f2e3be7e5707f020db58fc3ca2691f2fe5a81c1c5321183d0035f6206de2dd4b49139d5be05d374203649d787e5c22e154565d5be8050ca7c1e758491ba53dc08100a8059e9b275171fd8dbec0556df3ec0cef4bc064dee9fe98fcfa8b77d0531ccd42b9e127d2365d1ca33163738f04b1f8daa23c0749fc36ebe9dd4e21ad42ec538ad69c51c2b2cd7d621359cc09b42866fc75976c82b74bd602a633f63f1ded38c8a7bbfb1f2e0f7f7ea0c7f8a7baf95679911c71dfafbb71d8b30ae067492cc948d734b6f2a3049689f2d2dc8d22f37af2bbb167c0e56eba14364d67254623c174c224149180a7a33673609549ab6049e3ed97afa25d3df25347cb6da9c31ef71cc7bf14cb694ee3401f866765b388772b263f6232502abfe774be1f3e0c2e98773f18ab3e97b0bc29743a21ca09171fdded0ac85c2b1d50f3fb6c73a5aa82ab05d31b2ba9107bde5bcd5fd42ffa2b62e084466f6edce38a4a2b55b972adffed73f6a2e7ad01b623b2b449350563709fdfa376760f2a8776f4c4d51b7536c40b44adc498b07a7fe3bef83b55a09998a2a61042ca17c91ff67d5d44097ede6a9f5b1f398c6b3fadbaaef01b959c96df80298c4e316f442f9c667e91224a471e9c394f934398db16e79e52fa922d109df0ad1fabbc353eabb1bab0df5dbcabea2dd35d5f27c4162987208afe9cf5a1c4ce6fbe29abfd70bbe54f5bf9b60b3781b2cc7a1b8a17605e63e666bf8645033a59f3b476a745e44e3bf83383b3bf7085f970fea251a26b091bc9354ddf44b3f90215e818b9ee95627890cf0edd1a5803573a498c4bc5c04fe7165d0d63617fe977349b47639b62938aa0fc7a6da67f2f0958abf78cbee4e7e0a3690adc584fc0be43085613c85974a733475fa75819cfe1b9ce13cdfc246b68c1e0b725f041e6e50b9349fad42ea4553537b1ed0a3d94b9c7ea309400ef0769146110c05d007defec4008c1deb6af0990927aed3d0de3aba43536bfc2e9f4be588f9fcfc929b846ae4195b666e7d6b6be106f639a34b433b404f8dd0134260670c2fc8a2a89097bd21b154757f26eb9e9b7c83ffbb57b56927e8b2c874492232eaaa3924cedeac7e8e70fce7f757ce60d01ea25144c59adbaf08546c46f731eb3419ef1e131a92830cfbe9d7024ef84d4042682622985f2d2897dc87cd5df9306fb6f9e9020f83dd541808a3390a92c3674cdd24c011e81e9b37a3cf0aa1355698053849e06e663c42e439b721b9136cb153d1d084b8e85a80d902187921ac02aaf29ef12266da0c0a9aaf6cf8e9d953b7d55105d3cf06bfbb30431adb7b9ca2aa1de4ce0f2ad65bbf8aa04c07760a30f7c6ab718985ef31a094993a249c4b0d46f5290facfc2fe842ffaf4c3e1e09f6f3351301131881399f2abc4ef453aa230b51a11b28722e94b432bcbd69a83c2a8e5d9b60557d208cba33155215b4ee2c4de4e924149ff066f9598a717b9e3d1e619552220b7e3607a211d68a70db42fd777ce1cb8d4603a8a1566117e513c24e1358418b13c2b7fdf125da602c85e6d3cbb6cd924f66a463b0ca3cde68dd0ba68f35ca0e112445dfc3a9a5bd8144eed30721fed6906bdf93c0fb696886978359bab58c3661dcdcb6120f22227334ca7b32f1f8ef4cb161c43c144c4cb1d6f8184c83aa6dfc0effd29da2de54c976f2c11a781af02913e9c6ec0b63f6e24f0cb0314a06b2ddbda1d759bfc2b9d1714f4f42ff221b79d20f1ee599630413808d77c6468f65d45a6030bf9b436eb61383d0df6ea916a14655049a19504b175d5866dde0133138e869c77048e8b9322e8454f70ae2c20f6aef80c755bc8f48d2befe4565fe62dbf9a3d035de42030b29edefdf5dae486f27fd4c41ca0858be968b623a9d3ee723bda5e8e4f6684448893c5cbcbbe3c7d9694ad32303cf072c776db859e0197e1cf308aacb3414472a9b75352da1381a5598b571b8ae6e402520f2c403eb1519548424701bf0cf8099805294f080b69e9ff28882059b1edc34f6fa4944023e5a5c9c850eecd1819163c0adf8ecf5fce9f92287d56d8ad9a3b0ee78d0935f39bd4b16c5639637250b503c04ddf93da41c4de2d1d378073217df7b4fc74c8a2efc156a36587276d81d7e11c7d49a82f705393a691659c5ca6834c9d1899310dc2ee0d3ddd9c1f72b0cecd03ce2f15f41bab8e6241ba92d48f22c6c2bbca9cc6ee5347dcefb88c091c035eecc0f7e8e83e65b71e9265175df05af95dbe3f72ce4da705965a5f93b8453ae967373282022b4d768ee0e665d2d1b543ae4d8636f176f87746037d571df80bc113abbc973d410036ffd7d9cb6fdbf47549d41a715f263ea41cb92c38f18b0d6f047dadd6e90e2a0f2ed0a19a0aa436e5a63be5cc028c56b6568e206df897c25bb1355053e2a15e9e8bb66479e25eb4cdf76f3cb3555e88aeb8a73eb6f6c3d37a79ffec149259c7416f6b9d5ae2eebf6aa7dc592f644b93f0656c0b227e9c84a458b84bf7f749e18df1e10125b0389bb81e9817f163cc978849c8751d9b6174c51a5a15d7cec83fdf7a0a35b913942a4ce73fe279ae8a4e78b62b16dcca8d5350f6c3c926f7248d81046ce1c3a1b950a0a4a926854e84c0e48179e52ea7dcbd207f4c42376cb6b2c0c31ecc6a4953dc1eced1d57e3049fbb8a1ef3a016e14bb2e1330ff99028539b4601ed5b6bc6d20dab061e12b4b87739778095014b65058f4a7e490588668d376a081ef84c44c9079e58ecd596f6f6882c905cbf08a7d6dc457ec45d8405b48d3a7b40f914992ffe1966fae570178083863799a54348804007f9fee0eda3ca9825d0d0430fccc1ec530bf960dfa88ae74d757c6df8d8c5fb661bfba8f3ece9c64f77ce90f83752edeb0c4c793099a06d35f071f081898a30a005dd26ca3c502a7e8f65cc8a6a23d703be91487734c50ab9be8def7842616e32209aa377a30c0edefc68a53b671e35be005f21db84fc73eda7881582cd69e9b7a03ec9ee512a55d85a5e4ba6cb27094241ac0199a135f3936e7124cb434b26b83a5d96606f4a97864f2aa859532ca18796411e781f341c5c91055ea6059ab95847718e4285f9ca8cd3a7cd1ea15124bd71c92241ed9c722f9beaa8370518c87cd15f8a91d2c15f538eacc8aa352a5566c1899b5357ed303d758529495debd5aceaff777989f70d76055e3d4b11668cd469476acf26417327561e6c888669ff49c50effe66f8f4f21cf0e42f31622d40723c0cd2ab8b5a107ff062b7550728b167e3a39fd032e608cb12bedc697cef43c977ae511a0e919fee0508358b5ecc0bce0dfc0c0a90572b9fde49bdda59ac66e2b138fd75f8bef9efa6cc83520442f73e7fbda119ac963884ea9cbb44c2f84497ebbd09fe89f6a95f9cfac7b3d7c41fd58421ae71897faea243f5b6e13ef5613187763fbe470fd692be5b300fa496018070cbb4949a127f946efc88775416427453e98136b9516baff70b7ff059507b8905a3da7c7e0626f0d4e93f5e3904bc521a50509220b8c228d999ac46f1cb4e46c58e32612f344465683413bfb9436cd7c0ad38b2f7cece2a6fcea4c03c6d27dfcb7332ba09c331dac33b2df34407498e182e661e8a5ad662dd05850b333f262e05dfe0d79954936e6bf7eb9661ff13b8bd5dcb3eb7fb1b2289e65b33491750638528ef4878e4bd4813ffd3d1f3a89a0f93a1780ee296880c5b1666b137a68a53ad306be643df3db751ed0766a9b62bed92edc03c03d2457865a11e7be27c6321839f9d2197a42b90b1fa544f43eecbae682e7ef119fe5f8eaefcfd4d12e8e55b85668365997e7ea5a4c79537699509f12d63e3081b9aa9f0efc49dad96160acfe6ad2ad81c64c6d627835575ab32ae8c460378a2cf8ed18ed21c1cba4399ba647913f5cff5ce648b9b5c569e681b85be1b75943f61c99ee93106de969dbc02bc868215b764f4f88febb777093d6539e2f1eb3d424c52c9677fb69a0732f7eac124393cbbcd4d421068dfa2ae46a01edd25a97c8fa4424bbdc25f440a6b4406ddca0fb3fc7746951f4ed699ccc0a2903132f8860912d3378f91c9932f67458429534a6b1fc532a9cda7f66f10ad1e000f6281aedfe17ae4c363cda9268ffeb5d75d50ef11908cd322e5e03cffa92c429ea36f167a80df62080d3cbab27c9c08ee59f31cff7bb80ecf414b297251dbc8e2fb968181a23d3b17b5dce0de9fd1c84808034cbdff9c6d9b77af0e7c7d4af7dac1da6aa4338cbf7d5ec59fcb0f1a6d0d4fd1eeb2897d4bd8c61f7e3de1da656c87273c4caabf39c4e3818646b8037505347cbb6b8c2720bfdfa9098d156cb3683df98e40db8efaa03469eaaa58d0c92aba79e3d62cf1143ed1b57dd64c8b1daf3a09f90bc2e26970ac09a19dd4fc88a63947f1ac43b369a61da5dcb936f66327ade96b7a1eaed164dcbeed7118d6c47c1f8c7980da615e9e1668b6042d62e42ccd6265568558d8c7d317f26c1399c67a549c902879b236d613ad405f6ac2b98c79e0bb4f8ff83ca1219ef985f35cc29d970411a019fe5c934d8244d907499affe7c341b76492e7aa529cfaf939b8026152f15f6a10d073c5c379504bc3e2d1cdc8521d1c56edfe4e3954e71e8a4522d5cf76a329198aa49a22cadeb0e9638501944c54978c4893a18110b464adb8247bf10961559453a2fafff1c7ef56dc29a5705584340a804a5266231f9f67b8ef67c6eea0da22399d779d83f819e085707fe5ff84840236b877bfa9b3bff3b19ed503eafa1aa889d44b1edb663842e60431624354bd94a83bba8face3f5cfe126cf7efae481d8a014592d259c689f5a61ab3af827595294f265897dc36b3926cd51205a0ddaf4d8ad0f61bb01c8e15ba2ebd048d68f17f276b6417b7fd61c0e66b0aef37100a2ff1beef477679a889ee31cd9604b4be801b5abf4356bafd512ca8223123002d8bf01d660a4be32096e90c9310d910b53b23eebe39c27e4bb3359eebf44016790a466136197aff2742c3d3b78425f0b4aa4759a9661f69a350f9e991229dc816b5af9510fc4ca44557e419176043f17cc24b398b287e5dc75037621bee6a4e71ef16eb0ac70d0be7802d9041ccdd03b437ee9ae64239eec20c25e8bf722179820226e2a7d435ffa89221ceddb2b22723c8532988462c26591ea95f32490f18f070f97dbc1c8f15425d0f320c7339263c3bf260ac430ecfe5cf16b6b070ad4f945645d3294e7bf764ed56a9bf053f1215971e6867765ab8d9f007ba861657defa866cd8e9fad4107af4d71af6e15b205f3600a10f9f285685ba5bea6af1897d3bfae87830970c81d8a022f36ca86e2e8232e08ab98bf113b045e74a77f610a9ada1f758e3a5a5b7007fad65cd6594a4652fd082d3bf10725fbda43e04e09972c1fbcdf8f9ec3a4667004fc91c69d0913d58b5cd1ac8c35da8deb754551ab130653a6e33fb7a8efa37f4dbc42977027bd7484f2bb4332fa3432cc1a476fc2a965dd57c5ebc608edc14bc71eb376267f0b6c28542545fe9f86d4b30d929bd82035ee54f2de132ce7899cf9a59e0d59addbb9c9967d775f2a6ec85e12e43653a9f4466a93c5054cea3fdaf08633783a2d614e6f6539edb0a915f3312f4037c385de55a805c7256895334bfceea3f1312ece99e1dd28c8970e60c8acb781a5d969f7785ae598b15c42b59e47ae74a55b612b294de69e3641186877953ab0439258a3428090cc6b04d3e08b0cfc26d771441ea2d5d39a24c126bac6bdabec455428994e256829166bc7364773e45771e31d3264db771c43d9879e086584aaf9fd8670fe4786010dfb662d59368378ddab72b77e807620f5e04b1e50b6a29360b6ff565026b377b6d0686a70df6d1d5d4a3655c4344cc86440b36086102ffea1f651ef97a5a400182cf9dd647e39dbd1a169b66186d4a134c572e52387dcf488f38920cdf3e6d50cc290bd2f5ddd0e3b7f1f0cb2a414ee1cae629ca232e2bcd95f568622895108a28177325c3aeae687c585ff1d308793fd5e2e1b2299b8912ae6664dedd9cf34413b336aebc40304d193a06c7f565db59da0ab635ce54cdbda2fca90d44c8825e1c8ae02096cb7cf4f347fbd02c3ab3a2ce8f18854a4136eef4d5f0d193eef9e24e103a8c009ad7de98c4aaf72c59d0fd8dd383feb4b4d3dfb724737484148068c6c748be06d61be676834e01e9728fc969ff998d4b85c531ce42a381898f240ce6459aef878586fe9865596635ac0ee7ccc6829e54c3b57d35df92acca5a8c93861e5522ecf85bd074e672426f50b34e22bfb7697c4aa45d33a269a5658fa67ea3a89e0574c3bf4b37cc4da7c1ef06f3a41ed2112dee06d612c85b84baffa9edea8ced940e216800880a2ed8f68ee92bb20dca999e8b2fb47e3da33f8ecf81e9d59f1404826d47bedac1b631c391fb9fd645e5bb14b979cb4686f86d3f0800783f6c6a7e7dba0f40689ded292dcc21a2ce97ad6025b1318c81556bbc4b686109c44f6f61f49c5f763b43670de26f88b1a669e48f6ffd81620859b1072aa6b266c3aba16b9451f3c83083e56876a3b02449356b35b42081094f797635a6507be091a06e0a4645df2e220a918b0ee361b26c6fb2c6a9ebb516c2ede87f71973e9f520f7f51c043249541b2e52bd12919b50436d01f28b8048c97d6acec51b7b816ffc3c3325c52b186805d8996dd7b7628ac522cc4f865bb37d1ca81fd59961774e064317b7ca6b61232084a9f8df8dac3d42725e8ceca6e13e8c8b364589ea5df681e08146f8961f0efbabc4283f9c3927cc3368c553e79b767d43d7956d594a2c9ab5f312fd760f1ab3fa3b754f470b4e77476fa46e6bf2a830eda54e5a37201f0aacdc99cc7759c0c197be320c4e50710ba9424b629daba05a57efa65750c302c6d94a3c202f9ec45c655705c069ec56775c413c24f4b840239f8e7abbcdc8f3979222b0ef2975633a5f0c2f7d139cf48a2d4c0860975e28c70a0cb42353fd6459ed4f8dc0a4b820ac9c79179c2e0ddac47e5b1c6866061ef297ad5e10af2fd83af8fb7925c9be826fa85a1f59b3cac0c48127967db96476216746619b028a9e7104ae5168da2347770d3a4c6a4e125748119fc680d94a3793d931517d13f9d4ac3181162a609df646ee5185ac08661c566974bf289796a700b7cac56a271dd8b7302661f61ab90d6c81518791a5e41a96cbb63dbbfcb9b3c277a4714f8629decd2bd74773a863af34f5c56b1db9a040f6b3cb8e3d7d97f5eb27372593191a936fd1c268403f693987e5a5ee3d070c2b71f8dc711a180501e786810c5b7722bea3b995f3c4bf9db6e400d0e6e1ae658672b7ba2f15936dc2bf4bf742a01a9f8b587c56e00cddd01a4808fde121c8fec6caab3d90532aef3ae215a17e50b703f2c8a6b55365eafb6f5b8c63a96aed777346127ffa5d34fb9d1041ff87de49edbac2aa551e5f1f98e41dfb797c8f5b60203a3f058e11b32a11c9b41a0ea1e0f085191b48ce6a82d267f8b44aecacb2015a234df8e28aac05dcb60e25d616427ebcc2eb785088772ac05262a50b710edbca7ba3ffe81a4cc01c0ece89ccf0d15a80baef04d25fc966cf5e35c787eabf42511d1a71b6d2495846e63f61c11726f9302e605667d22a2f08d617e1dd7f8fd7c8b4ce6336d671859f0c4787fc235e8ec417e169a104f19cbdee8c3763e7537dd941b40eaf4fcbe91d5b5ff01069c25bce01c06e8a9ede7bcccc331ddd2d122c2326798f2f9f84c417ae3eb84599bd0dfc6381a40d8eb380ac0ecfd1ddd7160fda0036cd611db2eabc51ab835e4f27ed98f637001f370ab8b783eaab806ea535b79f651d6f2d410ad00d608c35778746ac3cfdea344bbb0a311d4e9745496692f7ff2ba21d59263e07f366dfa70862a8dbec9bd600490a762cf99135962e046ca6832f5c9f314e96d66227986ccabde81e0d863d38ee0f3240323303b9b0dc44e46d8a2f5ee1e40b1753a0281ba7306b479a1d77bc4527608f15136da83cd17320b81e5abac1df0fd7b1a21d75b115fbb01522f4ded2b7204b9488f2af1ac512f5205aa609fbaf01c1a5c874ec3dff4690c81eda9c84afd7cddd8726b87c3474ba3d610c5dc791ea1f5e8b21dc1b2b9aa3449b14034c8b2a97860ee404fb65c484399fbf357fd7c5d0e19b4eb925352483c503be4fc4fe6670958976bfdd6e7afa05a4561a6423174242eab1a65e6870b5b012d225d09f2e525b7288c063effce3f51e52e6d57a24585b5b55eb38d3f4ce827e21ea2e6656f0a48fa8b8b798c22eee69ff8810fcb1cc50cc745e2622382afb98a62a003d97dd6ada857d8bb67d7e3143b729898f7bda0574629a65e78eb0060520ae0dcc5c69ecba3f7a1c591b0fcce5d1f6604dd9cf512a2fb08addbfaa9c9905b3347bf79cbd8b36f7cdae1c511abdb62d206f8b959da1e929c1440a4ac58189e2b60e4324178c3fed07dc7a7d95b7de2215726b244bc5a28dee0e7d8ca2c51a6558dfccdee02e5a3f1836b609bcb4419bfed35d547658b75bcacfe6e848f64957cd4264c1e2cdef3b6da2ea622482cf752f94ed55f62e37a814a5082ced53601b535549becf0eeaec930bcf5ee43c85d7c02c9cbd35575521f5e34de68a7f89ee5ea8de888ffa83ea167a203619ba7f11b099bfeb2c7b1271d3a1d040f1f1c5ce002a229bfbaa6c46a4ffbcf22f89bef0f2b7282fe25dad7ade35f4dd274ebe2a6eb5faf0b41139b7be916072f4403ddf837c431b5e8f25a11e36207b5d6e2b5a48a38d6568ad862eb1dbab8f4b328cf4dfd47f8983a3a371f8c1cf2874224e6e61d5b6ef25b73f0bb95e5bf5c34fb135bf10cb5f900d7c51aa857a86e3c6e82516970ea856e4e95fec1001bd01d20cd80ec6d36e56d3009a900dcab2205affce2ae9a5b81e0a02c0aac5ed0b4f0af075938170d9901563d9b851a460b3ddd18ed51cac332c0d38aa77b8c75e0608dd30ee8b182b94de1ec0abaaa705b90a17efb5e2654e1af026cc36f00787365da63dc6e70c32c1885f18365355c3ab0cd4b9afd50b6f8233c0a988fb76f164e2199545584f632f08ff1e7a79922548f72f8cf8a7359eae76f1305dd5dd99af96d7337deaa91258208f2d7857fceded802ba74a7704c3d4a97fafecc5b1bfb78e7b6cdd0696337a4887eb7df3be9cfd8034b9f4b339b7744054c0d8cadb81bc862ad0df959d5ea5f7f6231376ef888f7698d92a4a719be4bbd7319408f681bc9fff7f91299e97a471f04b4408fb1f0a29fe39053d184b3de00498430caab0774d9b81a7dc2a5d981647903235f931b2aa2a54ee708443836106501a2e143d71d0e3cc187d2ef943c93f90d660cbfbaeba7fc0b0f8820cb050cebca61933a8bb2c515b04e4984e3d980230f39be59a69b86f723e12d07c0f495a41cefdac9f542794c2138dc4ec7e36dbff05bbc3e5672a99ec89fada24e046c307604b592759155e149fcb7a5e7f483a3c2f418cf7372aaf1bfde8cc1217a7c84f0d2b1d4a41eee5b4bef208ee43fce073501ae812c95b522a20f9ccfdc8bffe6d909914b0575a2d30a2034fdbf1289cf021b577507bdece8d5aeb0b3f05c2a22d7941d985810302981cc1dfc46528e458a3ea54d8f3e62ef80da106a63bf1a5a315f3499e609f8031ef56820d7b8f0c8988540f95c11c9b2915ef3ed5581d657f625437c3eff6ba38da74ef6d13c0eb73c61b781bf4edad35c715cfe250d3d7f5e690803d6ec3bb62bc6857ef663ea73bdd198137211d5e1ba8f2cecd0c478601c7e49de9ad733b60075aaf5034e9a7af1ca43b443d168f0d41b6b6107e6e76b9892806f7ec9a846eeb82d21931f51b6fbff0ba8c81d99047c1bab32e1cc66a6b40468715dceee9249a1e8cb0eb47f75f80849ebf975ccb860b1329dc002692022e7b333c84e911dfdbb33eaf1d61984cf4a2b2b30c0926242ddbc10b89a5358402c1a0731f29d197b12204bd856c56aaf8c9b549cbd50a80586dd8e5d3d257bc12a23a1604bfe306c0c85e6358d690bf7be7bb40e313e9776580fd15e435692a4f30b387ce39269c1b14e877d52934d4765955390d02b37a0e5641eeed3f0caca1aa932fe6bda52865a3274a5be6d08ce503760e1360a23b1c53cc97d888cdd4f34e6cfc2b3eb672d2af25ff9666117fe9d5eddda37883d7f93a870b09e4891450d2dda43bcd9df56dea7f799374517bdb9c8210d8ea91637be310b7525b54e2bde58eb73c85a55fa7f9dd55101942616dbfbbd08e568e37f51f3ea40be7c7d322afbc85fabbf23c2647350d22bd68ac543386c8c1983e00b41fb3bf5f5cb387454f048b0f768a7c04d3dfa25a81754c72d33443745a48ffad7956ac5be9c57e2b081de4b8a6dfc7514284bf69cd0c410d1536a51961d7551a3d76660c975fd39f3049f5000bfc1cdc6da3d48c35e95cd2929fd42dc3fd064500b7c3a5a920934399db69b1876c43d31dbb794ebb3ea71c783154c616850c68bd410e1d06a30cc7e7abbf04e38309833f77aa0ed6f35e065ee705ad18349e885fc1b838f9d3981a1e3ba3adbcc6414a8eb32124e526262f1eb72c57fc57434a6ee657c2789646855fd34482c9b9a7c9c51c985e70a5b0972e0b3d9caa0bff248f0aeba731d6e41ff0dcd7d90b68d4b75ee68355bf04fa8666d0d08e10243337ecd0b4d4075516b4bb19c47d2596961018ae15b46f404191fa5127a10e260ea5c3844f26cf6cbdd59432745d43b9fcdf91a05e1031fd34ee5228142531cd7b985b335a5ad16f90ac0f997284e110870bdda6eaeab38f7bd711544ce17b7c061572dc9630079971c826fdd0219440a4bc8c112648bec34441e3a44d061b533d78f7fc9cd08d2bed95fd8158adec2e8834dad8cbdd74010d11ac88c6e44560dcbdcb36b93b5d94e70f408d666f4aecdcfa6298784745e0d4765c5b563aa5c29ca26946e2ebadeea0c17796450cffad829c2e14e9df58043cbb1a21f04a6bcb07b60aaadaa96b58419ec4ff16552557583c1e7b106fb055a2c5bee2486c6638145add79d129856985a4464e7e012671136b4845c36c33e76a34f7e40f595ab1f0dea8bd89276003332d76b727533c05ad6717508db80d2d72c6feb51999f28f4c9904945153d579f3433aec14c7506821f1fc54be9ea12bfb42a8efe92fc241ba8cfddea5a6566f68493d8771720f8a34f0eb62ddba7600ac920255ddf4bef348c0b9b56a1b2dd4ff8698c47473630dc233210e2f0f55bafd3f7886403436bd638484c2ed57c858896dd6ee84554ca20f0b5b2d07523ad5d1ce25b421f7b4a500c6ecd7115a5f1a80ecadba8fb7de9f886abd95bd7d7b1644d7efeed360b88516399d5c30e29f58d14e14504ca58f696be51836a9ad6f7200cf6ee44222894bea2b099d20a5c58838d52b5bff1422db183419a547acfaaa44cb1b1b33a4210cb19da314641377bd476f4c07b5341fbcea6031289583e0df9246c6f0a276be02a6bdabe5f8f4d9fcae1359084e0901797a73ff71721cf9293aeeb75cb94a8542d7cf0edc1cc1ba2ef288cebfb86605050d7f914a272eb902ece82d2ab4a56fb09ad8013311a3ab8df769fc232ed8015e5883f3696d763c664f622be4ba8b40e0ecb9e2d6dabe527e3369bc6b577580feac6e6ce293aec26a9ed108dfebf6deceae976d2a45340746d6f5b26e61885e2e8c89ff419c1e7b44aa789f8224130af196d41c87789d30c641b6d3ec453bac60024577e3ecbed92fa91c9f90ba053256b308c516650bde70f6d3db5a7119285d2bb3a9fa402f760a8ed1e483647ea4b8924716de664ca8a316901fedb8736ba2fe3bca0dce8e0e6a2d2a12f49bf754339cc0ebe764595fe7ab6100c71dc60ddc6d0e5a119caf68fa4f7d3c0f6d05c791bb9f67f90bb3800dd1d05ec7a7b7de7b9cad5fe29f06b09681414f1a4c0fcdd8a265c200bf79bbbfd2b84262e2f99176c91d17ad09fbb7c8ce3f7d558f6839a069833f1a3a5d9cd2d1dbc7a9c400c54c017d882345a1ab1bcf85b85023f4ae1accfb606094b14b78bdb531bd3f4a5959195c14ff257329240c9d659b9357899f9edafdc8f0d1f170651a825a43e53168072702e63b046ef25408a7b5f3587eefbbf086051bce40d6fd59600a3acae19dbff0f042316d2b07c5b8e2d3367df98868e04ec8a85bf55ad7344c4487969c5e74f83e9dacb9e21d0b8ba80f097bfb3730488813fb5c3e7a9a79fd15296f71ff145585aa47de5f01a705204fb3ff59af28b2610b994681ca65d58a132097c4ff1ae3d8cfa71cc70b558c5e158085644b260828f32f6b1caf27d496c273355056c3b63267297eedce1fa3aa99d6743fb61e2857256bdc59be6206174a46f7a20832dc517eebd40572b72105a29abc38e8cb58d3ebb41cb729408ee98ab96202b5e9f32bafdafd39f7e34e2e6828affe2c169d8eb067d4ad0b01032134f9ca94bc971c2557d07e163b40e99a41cb92d73bf5bad8e082bcea4874e51b3fc33dea427c550d08875a0cb6a6596b3e90651feb78254e90e008f45c41651ea3b8c60253731db0974a31795805179e14b55f39e2f381b7cc493725ad8b705c1a2b4acb97b18cf49643c6d5ae4b190fccadcec4320f1cb9fc840d13992f08a152c0607d1c118e5a9269ac6a02e94ef46a368336a074512851b1f97cdbe721366dabfd86ac95cd8500fd690bd38cc431dfab3950830eb1bea7f60a5bba64d8c7be64aea3cd830664476c3454088b238b2163e0877ee3700a6544dd81f234c95e1b166305c464197f337d208e8700f3e1dae89184538d5cb387803dbe2b31af3fe5c83b0eb5322caa6ac10becb45ce5982d95c9ca4df58bb46a9486b738ab1f0627a1a776b52d2b4383123acbdb3f02ad9c5e983a1f8be996e965213cea74d2d0f990960dc37c77e4097df4985151796faa04de54c5de9f6317ac73a85e808792d65f6fdeddcfe41b549d00ff3cc2b5deb8a2bc3e9ee9600c7d0cdc77dd188bdd0069d5555e73969f44c6b2847a114bfae049bf6b06ca4f51c3a19839ca28b71fc6dd166955d7f257f7818ee7016635c9303ca55cbc22a77e4cf994c55eb31ca76eb7546fd2291227fbe5646983250f60261e8ec20ffaa81e02916d79f1dde7c93292ad949e8041abdef44606855fa171e8054db030580fcd5b34c7c44ff0f1a1680f4c3fd40331ba4700f10e689de97820d4967be7e84ca967b043c20389119d7398c2bd2c105322a287b8fbd303e2ce396e88053af4f0ffa27d2cb69cda311d29744c62e9323b322e63593e661d2b3b4f6248d992c46aab2868d72d97d8a027b9c65c74ab280039269b0d00c36a1c3dbd2ffaa7362ff96e86a59c354154b9c1b70bbdf9a1fbf9904a805cfe0ab3a30907392160827eea83685e2bd693974e263a1f84c536d43b5c22f4fbdc2a9d22abd341244861832bc21bdf9166857c9f24918e93bdac55172d9254342ac4aa16c76bd81c9aae9452200511c3dbf239ede0cc38768390e3003ba4b17b3009ce23b4c13b967fa4c1d58d9588bd22ece500fa326ede4b77e7fe6e5e92a4d3f5d4b2f9e57d3c60afa3f7fbf77af9fa32d3c2bb3a542ac8566ad702fe6d3ba0f7bc7287231600940c55e6e0e2b684f51f185d8d5e9191eed38ded860d50ce9b628a91771d66f3daf42d961640fb62ea4e68cdc3d3e815e369f418489633b40b8b6ed3242a1781c2f6d555dc45557b45521bf0503c41da98dfa2eb8fe102a1848fc587e4f0cf1c0e3122b9e00e7e976e95b6ab68caff72728d91a7b2939acf2edd4e111546497f3681a3d90d9cce604f8e0864ba9644e36e1b6536500c16b7ed90ce208888fdc45bf6dff414ec25075703348e620c4a4c73fc8ac11ffacc9fab1350b435c0403201d203e317f4dc87f6300c363f4cfca55ade0ed85b4ff8d07ed7dd4f50d8ae8d4f4e1f7ba1cd3870bfc123a716e198c5ba4b0da65b7b08960a57ef89d53600b5883da1484acd0075fc259275a07df69d7590168b6fc950d13037bf19824467788f4777b21e840597733d89abaeb5aa2e8a4ec4fbc05f0ab3931d604b1e0c5f2a25d95aaa744c515f6f367289fa2594d2392356e9bb29478193470179a3154bf6906a6dafc1395616c47b48cb821bf8a6645b19a335b285e439f7dfb8c430f73a4baf7879f53affedbfaa00ffc44b566f1fd73ec013c73192f73278a33b5974745d0de28a97ef32bff726e39b2b86352e6c4950a537cc0655a445b024f6d58f9aa8eda95ac355b19a3fae573dff3783f14361ef0e8a511aae60f30347287a96bf01438800a027a6a5f2a15fc522f3a88895f2a839b890ed215f0882a4688e19fcfb7d145473a7f4452939f8b8230b24b725534719ba9d291850815731ff865df25647715d7d2dab11d32a820a44d64f60c6ecc39c12af2cbad5a8d5346ef24aa6b2a20ef07473a19763ecac1cb0f98be8dae59347ba3fd19a809be022d916cfec2417b8ccfab0e3c19a30e244c22b46c74d5280c2affa3ed77b49de44268cd405d7dd9044d91fe8d9aa8e201932ac71e0165627382496f034e2e882896ba75e7d2919485dab9a929ffa9d176737c04e79140dd0559c69f476844dffe7b0c667995ff0a5fc7edc95bda902cc5904115159924b48a137811d7113c4836ea630987cb7c0a5f76069cf49044facdb0046937dcc62f25ef5d2bb5a356077e8bbc07df74f99160ea22d99b6efca5d8b4daab944e654cf4f26087b74110d4081a7588a87331c6ffdcd68dc8195f6b284b071c0f32b83a7947b70d42677c8e02b6536877204458402b3f067b70c61c56ed9e2de56fe0389544d25ad160d73e6345f03192ffb29508a3e5e8ce46991c77df54893ceaa76ac881858ab193965bccbaf302caf7e3347bf7116e2c9442bdab834bfd23c1e717f184c5d30e35407f67ed214d69b9c65141a6a817bbb1f54b931cc6615c4b09b57878d457e0d841ef25ea728d823389083f7313abeee083cea7d3fd93a5ac871ee4632fc75de46409032563bdbbc682a6e6b41b775b42c4f417a575af26ee16e3f2c39e5549be6eb0a2c3cc9fd2ffef4b26b725e1221280cf1f0f258dab6d9c9ae041ac11458eb4bb59d1d9ef5c96162bca85a452ca56485874abb2cb9f62e1212f8d10024f804cc5b4571b5fd75320c88a4c5883dca09d4eeeb780af7514465f724ae46c1a5d71e6fe5983365e8edfb9fdd7cb96060f0437741f3f832de0cf5a4a0ec0a5ae512370adf3167069165fb76bad3c81f3ed7a0a322319a7820c9e7f9c97de967c3eec073dbd977eda1f809aefdb26f75ad7e6d549ce64be7d275da9f7e5e8e0b6355acb3da5f7162132232d7d7911ae9c459f597b560c3f0bf42ff86925bad9607ffe9f00d86028a01617d50aa67d444ef45924f76838f1e5c8dc19865191f5b304734b83f28cf3cc3f1acab9802cc40309bf3a50e7bddc0b02d05fb8e44546b54391fb6172b5046040cb2459038a8021edc29a99d323684083e388507ae8c0b5a11a5f8bf400968897a88e7b9fe381a054166e9f1f42cec20dd2f5dfb4a318b1102a3da96e286f1292399f74338d18486084a75247a5276404c140dc8e8345da4340ed3b2d2998df83b784392ac5ca7efe3669c67fb823d9b455d63abb7d9749f171306eef0454775f37b34c304e9986f128fc1599fdb963684719ec992a346bdce558e97679a97c4419c54f8e55ea97d3f99c533069280b9df73cfac5a5e2fb3b6b81d51b6bf7278d10b236340279c6bac6d7f6c7f22b92d83ef735b1ab568652abe25c880233e1c2e116efea5efdcb9ede28baa88db29124ec1fe745e1e53f5172187182c4c4b0ae9c0a88e56a9690696b328d93f1571e575eed5e1b1efa3c9b1ee307252ef8d97acef6be4490b57ef3f4b4a9a9da51365fe046f64b62ed243287482e87ca5d450fe97c295b068756c11e5e519969a8a5e652cf5612f607044a06b1154e3b811b5155fd38750515d64d3f2f873e175f748e4b605deb3e9ea1b8d374456a76e2646adb6eeae3703f4019eae49cb2cae248838051e5ca760d1316871e20b4042be1a3ab17b937b71a55192e8cf18684a8f2d167804972f9f3e9e0aa27fe89cdbdd49efe053c92d852c32a4418fe5eaff7f98ea36f47d981a212a08e6a01ee523ad0ca52777607339b07ec8511e84b65465aefde6d337385d0b7e516e6854b6772412ed684b5c5553eebd807146cd7daed7b9dd330748f0b046a4ff05872b847f570320883d709e966ba18905fcef90b30e3aebd1ca5085741b8d13bc37292cfdcf1c23273473d61aa168f5d5539f3e3c39b78cf9ee24d53d17ee86fcf9fe24931218e8145cf68c979ae5108a1783551ae056984abd04f22799d671216a34248e11b2843df2ff8ae914a1847f6cb4d32743c41f3fa76e355404ddae9d2a402951590f29664c55f8469c79d0f0f99aaed1166d8c96535f80bc81f639ee243c19f45e7c00c53b2443f13a7e070ade4da92c7c1fd2d4f988f5415c98452411ddc1c2bb6303e69c7fc93eb49a8af80407ecefdd6fca01b1ef97a4680d3a811429aa29ab9fd8c4205fe83c262b524fd638cc5f238e65030db3c8d6683139b946d17a1f159cbef4e207bd0fb39f84eaa1a4d77624041126f4d4b381ba416b1c29b9662bec8cd64ada36ce060bdc772b1d190e7f9c1af0a3716bf97732b0e51a0d95b20f97f6b3d12335de1d59c0694403dc0fda8851f2961a3ff955387dbbf17538b4c8707137aa8ab5900a2a1ce1347b3ec1c4958c115cb161db73c889596c242ef80c30ebf2f49c2b9a1cf8f1c14ff5d6da447078a6f9526eb6e0bfa2ea72b605b93a8e07b8d91a43de41169a5b9a1563e33a5e97baf17d7c2b295ef041d2f004f56a89e661e0293793c37f5ba9d9380f97c73cfa435fa4a35d003109469bb77a07dc51645cefb8d36980fdf5e0a3c5e91b98654b5d9a812893090eba245c4e618bcf95388da11129441c99733e0d95fdde43031e72eef4878a03d2d170f19fefddb32fa3809d75e01a8c8c6996fb9e1f7666ce9bfd9f0f981d4520b69645887539f783167b8d307c34e34299ba379e23262c6dcda534ff2ee08cbb9b1a977cf048bb22cc000c561448f4e4bd38bdd08c18210573be261228cc1a600a209fa13c4391235b5da7dfdefd9792fa5d1de2d54f368ced5dea3babc6a972b1a60acd0db8704960125218b592c6fc013fba9054c438ad0882d714a828f6dbea157a8eac6406d1e461e6ad75727a5b07f04c177b432ff5fff7abb361b52da732c24c07d34b981470f4b07e3f1aba054ce237cd616f877b7c0173d3542688dd739dd374f3872b4c6bdb3f0cc6783d44b0d73a341bf675e25b25565e8c6a7a5c20807947ec377a059c3c570e34ca3a89816caad8fa8613af2eab1acd786c729ea9222665698f248e1b22acdd1b1ff4b83fd8a17d4cf6643483039c11bb57645ee4d5b634e9406e8baf03b857d1c63c58801229a3618a5c03a0121c0d550493a3900e9be8d8784865660dcaf0a4c5853d6822dcfe605db4c583ed2808ad6c05308c5cd89dd7c53b7513bcb0388c52b8db65fe8a3c3149d0e326a40981846cdba5ffa44212fedd458be7305171e1eaa248585454406dbc739de52cd6884514a1ed02348f39b23c1f0c2bb4f5fbcbc748b251a25c9119e653b7d2173697f4351f27b1a8f47b610b85e77d61ae22cc19ba7b8ab8581ae5b0eb28c42937623aac4e118cede5307abae681e6ea2518782916e06343f9d83f7cdd55d3d64b8d26c792ae1ffe4653ed648d883d663880e4cccabc1c6daee8a348945a71b48c9c79f969d2a875eb0ecfc5f28af9758b93b08006f382be5f482dcaceedfaab66b93a271c6add0b440eac6a15f44dd08942adc5e4deb3fecf048fcf04a078656a878f94f6e82c755df8c3aa2929cfadd8547ebb7fc18bb17f26fc8485b08730e4245271f8f13a1a49ceab6e43198fdfbcadd8cc71d982fdee52bfc2acdc8ef8aedebc4da58660df977edc78948aa03ebd4a65fd8de837522021f861b8fcc60180bdc061d0fcaa49f8778a21a462699e3d211199c125101f5a334981384d654a3c59f364782e1c5341912877efa77f3cb87e5d6ade591c0fc499c1359c730eb9926713cd96da09f5ef28ba193a8e5805086fe31c1eacc5b913743a7abdc7b925b846d389eea78eed78273c40674dbcf07d1d13549dd333c5a087f3f74ee4607fd0d249f50e92cdaf8110c36c47436c893c5d657aebd65f6fbbc5f5adf2a5093cd3c81af76025b54bc12b25fa179cea30fec5b3d689a6d5dd54ced08a7ff3ce070573a9d27de1b870ccc9fa9d9731b416181b3e3b3b7d082aab6f5db9a8c903bab788b08ded7a41310a101008b0374863e8fcc8317da31bca5f6faec02ff69aca3161431b9e1ea291aa555849405a82f7b5d82b2538969ce8217036417023b1f8a0d881d937ba9ff23c7659e9afcd4328fa7bec528968286acd5251ba30d8e58c66d2358c9e3b1db0d8667b7839dee83fd81a706e672be7fc62b3a4bf90a4f084e0b9e79b68075e3a797f0d65038c5b45ba99510809212b2fecddc4e9c28a635b025e29213f321639d415743d7ad738504f66d7651b2a0cd6b2ffdac4ebcd5f20700c1372051bd659dbe1da3ff6abfa42ad34d9c8ea57d82ed4f25fce336e4ca839cec0272cf5a16f0e68ac0be10914a00f30586e11d2f44ca90227f88b9441857c85e7814c43bb50f1bb8ced4948f59269ceb1ff1b4f8bdb8bea20593fb1b4988328b2932f433d3f6d67bf11c8aa96b9512d3cf74483b94aa748279cee0bcf0ad98543bf4867699578b81ef6680bce8d09d9c70d496a19704429d9ad288663a763def956cfc4355778fe13eb06ecc0f7ebe39a8e3f4950188c6bf8936d1a878ffefd79de50a0cb4c45d74f92a9895f5ca9e8cf27fe747606c80be65b28d738718aa5f57c392bdfd799f62b79083a8eeadc3d7dd9a317fe975af1da686c6d0a20eeed7f0ecfd26fb8cdeecb78d93649d9d8e540f147c00e4818c8762bb3da71d6e233f1f9311038c8080a96597f27fd1f59da64dfa7fb0191a17be722a1c782f7c5afc4d7fe12f3f6355023b9ca707a3889f03e15ce2e86cbeed4b3d9a938bd4e7fb94a0adc5c265c786dd3f29c10460b7a1916cfedee6650dbdfb14114a7b41ff89879fd5540e93aead389281b12a5fa1a5bbe12a830d1bba01ce00a0f64df20c19582264370ace8ec4cefa0b9070edc877dab555eb41862f04daaf543f8877c261c5f5731a5fd8a3d2b89bff79a224000f0586f96e8598a30d7d7d9e483569444daf9ec73f271a8176a238c5c18a029ab6d309fdf039f780371d779a7514df8c9008f8063a543da0db37ff330a8578efd19fdb5f8bf0f6d27c7e16481978d7e843dc1c158bf71c5f8ddc0ea1ed7ccfb9a10e7393c33fd71737fd71fcb28d274a8cbfd068841d5d1d362ed83e29dfd0730f9736c85c470b09feb43c3e78456694ea4aeea243043897493a7a7b15dc052c3ace9ed27b97ddb9ebe850aabcb0c8157d18a406d5526b1d3c8b8a3b21fab0119578c23554a7eddba48f369cb95ef25e55035f3dd0476573c8cd8e451aea5133e4a2a667695f93597c6f1dbb4eb4ff151a53a8b098dcee59ea7a4b3eb32709c56985928ffb92697e00fec32d5c34cb168d5c71edd5aeb96d3310b388084b3c03cd15d48bfcc5d4b2010ae07c536bd9ae9f4da56a3c4f3ed28c193cacb10d7b03fda763c2c12b69658671c3c0266be0c0be79adf4f56697dd0d48a5a6161407df9ae8e24179193966fd9d16e3e0eda429562b44931cf5dad626936f5aae075b9a51ba5d7991b5d1af89b77efcb8b6aa53a33506ffc934c516cd2fbf82460440fc08695c68349228cc5dc2a120f44dd9154a542830a0f462060614a3676ccdd875d6a475e17144a12e85af7683e7624fbcfcde5ea171e5981c2c33090aab0a6f0d142b3857a9b3a197d8a06d4fb6fa74bd59ca66ce79a2dff2015c82779573a991cbf3fb42f33f80323b4ce5222a9103d505184aacc467b811435a0fb05085d0b732a9d2fad0b19cbe762924413ed6e5979389e7f50bd52bb8cad2403572fdeb6944816d0a7156b85af69ac8e9beb692e4ef2ba33d06aa9cfdce0886160a14d6f4144e9881aa215e9ad5692ee9f8d25c4705e5cb30e916bc5e72347fe775a8ccc6aa593de821fa12032438269ad031a7248ce040828d14f899d9243364280f1af740e1544f770c1e8da54162e7b3d7c6f2b82752e8a460db420c1ede1651a10137dbb0af30fdd42b8a7f013b40590762ec62aa70ca415893cdab2b33750463c378c729dde31f2d2922b71a88397c0ebea8a600b81ef89e5cb88ceecb7dc3eef6c52da02fc7624491b86cfcb49ff38a6464f461110198c7fe42da6c49e9df9b9bc02eb3a27fbe10b7169a769651d3518f937b8879c76b5df4f0f715c8d8edeb0d64840b3121c46202edba00a7817c75b2b84296dc1d82e6843fd0b1cb07cd6739073005ff3c0d82c7de8e3aa12571e407d4554a80cc734993ca54b61a5252dfa9febc89f151c7c2ff8c665fe58dd6d733cad9bcf4d18a5bc1e38fb863dd0a5df57b9382fc7abbeb5aa7e698600d2f35c5d228eb1e8ff636c15548655beea9eb167769ae0550e06296fc70c6e7ed9916eae220405aa5a68b0a2f09a5ba0064865891e2a8345e237d44f97b37499ee51c3e75ead7c4a90e9ee3eb57519e61d4b6a256d244ddd1b2cfc21edacaba114b1de1db3e6cc206e5c465f7ffd68cde36d2a9670a1678e392bc8e25cc46409f910f54b508aeae984462aa3cd6928b530b2c44fb199ff921f995b92d8e0989ff97439725f3c526fe97346821e29ae386cb53213a888ec79f940dd60f13d3b0c02b8d2ee6d902c7b85c9273a8730f4f09f5faa6d6b5b4af6d5c78079506f82fa82e0468ea49254cb1aecb40eb8850bbe4936a3cfd292ec8ecd0becff998b968fb7dc78cff883d45f4c4c3685d5bc234b4776e77c05088185235a6574e08aa508e6faf6b5aefe5bf177a900814c7997ef03e99db0362a165ffb652b159b720a68696e05c0237cf6a0c6cf96798d8a4e3906e2973c06844905daa40194d36a385adb6fbd7928e211fc85b2829a7c3d794dd2e37983d8834837c57bc7513da277f673ae406e2190828ad913e64b0d3e6460a3f55999964ca5fbb09f816df32fbe19d81055c6dc7c63ce79650c78a00cb3a30d0fbb78466183e377fb9694f5e2c528f9b3b97be7a363d77682cfae53353f9b59a1a0f0383adc902499bab990590e08b3612a3fdd889d4a61673e33483ed54e589bb96b0f7e619838d187cc1e0c0cd52d4230fbdfeba576982735b631fa6c1fed563ff817fdd0f3ea8c9b50bf009148ba17fe73a55f20e77ec8a9a749d4ccdbf9d908bf79a5e1f9f5e9d30bbc2016553950cf728a502cd7798e89ae4c480ace1487daa4019fece182144cee7c4dee8d2f9da93eee368b8a93c55a8c219790be88f8f9e0c27ab0f0c961259d424f9944f9b31a8757ed43050d84a8bbcc61b2cd523b11b3218d850df5cc5a9e0e203cdc2dacc50162dfb9c4c9b506184b5ca1292f860fbfacb7d98718e117e9f2484cbe940be01e203e94ac395688483a593aa2243901887c5cd5a1351ce0a39c38b89b3c4f789da3eac50e1efee71fd5d203218e7ff35c298b8a0cf7e527f77382f16269c6e796973385f99b67a2f389c322b00d0d73fa67bf53e3baf0782e952160d8d46d90a30df8e9aaf532a8542e42d40d15749772ca56f6a769f6b6560fc3b75ea5f0bc2e2cc3902444328f6bb734319e8261374696fb2a087c87d32b6d8498650fdad0097758d112bca3f29568e9acd8d53f85b449568fe555b68d9f1560ea911b6640e23d9659a5efde615b914d11fb24f7813958779b912d09e60b22535c6e917f7ea8de5f5fbb1e91161b85d18fc78ae8efa9ec37a37881fb396ec6e2c3bdb6b8a3885fbf4805266122238fdf03883af25d251969c659c1d14dcf064be0fd01e25c9ee96c92e0ddc5e5c9fe0a002f919340b3dcc32acae97eed32a0cb5c53dafad32f0eb3fa72b99c0643313e593011ef042d8a33036cb9028f699bc16e8dd06066f05c629d36a162e3e47cf8da57bc2528f69c61c277a4b38c5912ca8f91397b4a31745ef6c39d3b1cc1ab91448cc3cbb06b5be86f799a3c6f470c8fc39706e1960d274ee71a942ce88ede0bfff62fcbb26d30548fd389682230e430c176e372ed0f3c10286e94b0d024a555508b1d2511ca3c03b3fc1076f07a238d226af9b072a3f333915eea8c5ef05c9579c5880df186ea765cdaa03dcdeb2a7fa351d3b536a3c66eafff94c68d76201d0af53c8705230a271ba061058da8f1c8585e2bcd1728663e3b3c5f4d9d3bdca0efacb3ce4d3b0acafb880c8edd603bfd797e60a3d0eb6a8c144902ac06280a2c4a432f54e357646f8b4bddfd6be1c729c7ab3adef89574d9c7fad25722895231d2431a6ce76074e6ffa580a69eca8693bc2fef842fe70285a031bd5d55d3d4d2e5c2b7956e52431bb9d2bbed2e8ffeffddcfe196af0f7bdb3fcfbe21d0d347d105370cb2caf9facb69b1ecc4ad9fee55153591ea0860f63e619460eea3b6bf4ece989f3ed9605e1816fea305834ac3a21b9d4b962a0aca41d425911c05e08c52ad48e8e858c71fd4f1f555eaf2d7da1637fe11b0b380df527dff049a687de2fbd644c4b38ea30b0d020fbf718af754dcbfa913184e227535d635b9143851f201584fa95bbaddcd5c363fac6668790454fb28b2ba49578732afdd8db9f007aec30dc8dff14e9fe190084697230e9a9572d2bff78e227c1a1c4d8c576cee9cfc17929dfece5fb23ed1dd562bdabb5e7284cd8617ac79045ad5873d75a8201c54b32e8e0970e52a055dd43bd1728e18309d25466f62d9a7dfc656815760e22297ed85c3f651511b8eebc0a8f2851640dccaead551648d672cdf55bd9f5e89678c84202242299593a05a7ffe18194886994f1ee93cb4b312a799c0b760775ad3515ccab571aea2a66e474ef2c1d68ce6d65863c7338ce0fec6f7f8c57d92060aa4548f5a9321870d81ff436e32c3ea2be9656935fbae045df24184c3a9c8ee3f65481c88aa98cd9a9ffb3116194a18cc23d3dc12d2ae2ea61ca5fe75dead594ee7499415e300682dd0192304782678a33bbed752495ca47ed00d36b95b065f0def29bb7eb70a3f014c63db7d32666bbe6010217bb62896e61adff51596cb96aff6a615afe23580de14c3e8f0c17b86e733de681a798fd55aa26e30fc25157eba10ebc411637ce78d40ac595768e303fc8064f7961d948f505781d0b261c8da8a292d66022cc4e77f5a2df559db80b34ce9978a6cc0e761bd65b6a6f39f09582485bfb3bcaf0f53976eb641ce999e8e9f081b10770ee9255bad10ca7a890b36fe7b6bcef472b2de42db9c2f9500853d8e811befddb50608a3407ab6b1be2e2698ed067b7e561e23a340dc929b0c51fc3ac861d3a73dc51ab6b23525e74162b1178093ad541d2a85834269b91c429dfa495a6fa7dc6759916ff68b998300939d145a625e5aa1657057a29645a02dc82a28155255d8179bf47708793a34e34d531067d4229353852ab193e3c391b1196671836fa2937d5cb35b5947b938267a55d7b300e688acc7f100ffde415168a738e5ba52cf8bb2e8b2630312c7df5be9ba81e586459aa869c0a7ef4b1dfa82319fe5af4843c5808777e88e27448c653c039df697de3201c48947b09d57e60ddf63d9a6c6a542e8cb4229e6feb1a0695be15983bdecd311b2f368ab12a16cedab069982e9c4674a0cbda535cea639f180ef5bd09b4d4f491c77fad3e41f3f28b97c5e46133d16bd60c68147575899451d282594d18a51bc3af2cb62871a0b58ac0d744444d3d0b0ad3081d1e4c6eb82c2570cece4d08b244f7386b0c411043154a30ad2fe401e939c84c877abca8c47b40c2d0375eac91296598413117ab83be001c9fc1b704fd00b91c7d398562d22001b2e40c0a930f062d315f72ac1ee46cf5e42f994556d17262ef5b6753cf9cd203410bebb06ee4ff0a24052d7069199525a9e02589b115b10dabb1e1f8dfd0b567a0a88dc213166221eb6fd01cbf85873fe98d9b363d847e909a572ebd96b71e05f205f52e0a2a82a2ec53bb7ded950f48224bcea8ca25f0bf1d512f4d893b22c316dc725dfaccae1dd90c5d86b042585076e5039c463acbb375304d3a1de728e0973607555827e2489106afc340e4323d82184f814ff83cd6104049a0d16e6783dc417ed7f3d73a5b2604c14eb06291700cd55fa79757b9b123b07db43ac4bdd80d53a18e4db69eabd76f58f3dfb9ac2f88430843ececcb4c9a6e5f44db1969f3c317d012b327fd79a462242747dd49cf1040b1710fa3a1e45419afc04a9bb46a25e80575183b6a2b451cca168dce3907a4beb0a0246a0b903599d709441f88958fbc90897890fc3735e9e91c84e8a26198626051c18ee2caecc7339b0b053350ec694ad5e70a72abd76bbca0b955b43f534c004df37edba0980b7b09b968a8cdaef674a8e20de9cdb8cb2c93d06d17f1ddb2ca989a37a7311952789131865952fcf70b09c36659e6719111f6dbc2e76636b6639d09f62e6ac4e7be2ff82df57e036715d9288aa52b837c0d3587a430f2bd302f0078fff693c68d00530266265ae03000ea3d3a12a866b4d73ff5df9e586a8ab12303051a3e7bab6ef5f4688cf9484783e1cb6bbc73cf09bc200315a1070ffb7cc4f2d2b243757fc44a1f84360bc1d8989b100e8f68f610e0c7c78434a7778944378ebf4c53b161e2b670d40bf1b85d010c532cd7fa7a0bbfa5e6cab45c45ee7e56411a133b1dedae9b1a3edcaa3956d8e44cb10cd7b66e152e89300ed7fc998ffb2602e0a21d26567170572f84e8e0a9dc72940be15a30d8fde8f361128367334537fe0f5e668df9bff30aed42370dc84c9ac22f72a6f9d350b26ae1e5f09e2e9aa4162306a6758787f89ae86401cfffd268f1a1b2a42c7f18a52ca5bfb2f62acdbbc1c70acdad9c1cdcd4d38fa4d34ec996fe9e5b10af9e6bb8f08510f42bb9f5ad62640f951798885524d6df52baf153dae86dce48156bc39c95c6cc5fe527d378e37095e06027dbc60e878bfe48617ad99f428b45a4eb755ac8132684f1ec593fc0040aecc5192aa653e95c5c67fc7685a11737cf7a255705331f124cf9b3f46dc3842263323bf274d7ecdd1fe0e588951e229a1af7f318db0c0604b086710ebc568bec864bee273d7d929a1ff4b9aef7d19453b311e5410abc3b4974a7b173d71bb3fcb7dd53b54eaf59fa9b515d6b80b983f0f00b0a81c87fa6d973c2d7f15841bf21ac2bc3074f0cc012dc93131745f611f9914458db7f12da03fed9bc7696aa4f41d143066a6cb710021341ee31590013109ad5a69383d68f0518d9d780a1c8358d4198dfcd040e31b267fe07a043ad647652e805a6add8be63bc6442b965c03cd52f2a48fcf2b74640d103c518ae16cd7970893df999a0defd5015a9779f336019ebddc0aae647a39eb7a1848c3e5b1558befff30fba214136fad1e8fadea1bf00786487079be19a267dc75b6c03c22685fb1940527903a85155f4e0e1ad956db600c4928376f80007ca0100b91f20d48aea53cf7ea83ea9d7cd50eb2d683c6dff7d6ff6439c1420dbcc9af570e0db566553ab2591e175a2333331bcdd71007ad26afa1943330359accdea1eb90d04b99a6a5628bd5c2fbff7600fd4120283781645770cf81aef429043f67265d1ae7f9841696ad379ce2cd5d558ff3e55e9ba89df9cdb9be0ac3ec2405e5b96e3dad101c218c71bbba40d78d5559ddc415b48ef64b40d54410b553ee12d22c181dfef75382560918de3cd0d20897b5fcd158da96f586af215e20e14ad15b0bbe40b11d361c79360b3a6ea59d811a22a067751dc3e1eb2eb256dbedad65246af6da8dcb73b3b25e88ea2ae16796e0cf87a6ecb1388ca7114950fa35ecd5fdfa0ae65e99ff3f0dfb48c298c6b0b952ff863ab52386e11573ba55611d93db454fe8f38f996c426d7c0ea87f54556f85ce94cfbbf912bffcacb020f035712ccf9b498266782501521b62fd50e97990975ef9471e646f0ea307c3a31b1a32ba42f94f9056ebc08d16b1ff2fad19807bf6aebfb354affd48ee674b9531ade9a9ea7b6f85ce8e723f28cef8eff36099fce830fff059cf55759c8cdb1751ca74abb1e3a81b3080759c450955ca7432ad8c5b7209eff707107aa15eb767998dd5890459e55c6cba1107866f867a95e7a3a5125e5bcabbba67f808e2c4ba3f8b09158bc8019d0b64f66b89ece74feca90e2a0fa8cca54c3f2b9f1eeff0955bedd7e8a1fdb2da1dcf160a9ab564881bd9e6c6f638d2c5cb249fb0704c49d9681a51a5ef2c8a2242b2221d1251d77c920310fd06dae54c81617081f9ba9ab12f9b3e2efbec65fbd7f35b315496f5e368d367b0e3ceb1463907aaa4258ef08eea55e8884d74c85bbb64310f89debf90ea5c4e40ed86739c19712dbc00f62e0152f3313dd02bcbec2499fde6e396efc04c79a5174109fe452c3a1336901abb256ad81e11ce31f677ceaa3049859a33e1a6e427dbc2223f0a83d536dee1de8701987de1326a07c3bad06f34c9bfa009ca1f8be39d0de6a15204ad6358ee512b45ad4c7f0149acb1d001e87b3fbc36d228db5af18eb00fc5fc8dfe4e64b61b808801896f1f68b214cf44494331f8a23680d83d7fb6e0bd6f3fc41bb2ee273c68769a2e6fd04b137e7b0aa7937caebb5d83f22f4fdabb0af124979b55c59a29242487b13d250251d7ef35866ce84f1113c853d06666961a1a0936ec87172ed20cec3b7f1ce25eb8b0dbe82127dbfdaa06fd91961b12e038e520d8a16f154c49d5356b8baaed4df703b3a9912e4dd3bd7c9071125e531f420dd4dad43d779422e0f6bd05de2f56d9dc72ed703cd39e6ed2026a45f537946efcd14e8288ae818c84e7c56ee587ecaa1e5d8bcec318a15f91de524e164ed5e050bcbca7c568df8e806d8b69df3a319653080d1dbeb3b128b3f34a42887d22b10ee47e04189bdd5122e1d30adaa3f1c86959ab1817d43d51bd5198deae65f8ab712ec13a9ea4fd082dc0c916f57de3506c65760b0419228f4dc22721b7f1d363bf7b1fbfbe1247ed8db39d76bdc91d4fc5da0f1c509a9145ca997e87e9af5a884b2266a50e3c381ba00c5debae611d8836e27b9db7af1880e9e07bf238cbd8c3d8a23b9716d1331e5611d385d524a2eb99144384846d0139b0d443fdced9657644b48cfa941d9c24748d0332a7e50ea4668f277b1988f8cdd595957f7bf44d0ed28f4ba07912533e985692268e10c34adbc3f2f611f214a73838a3b95dd9fabfa51c54e7376b84f39b311468a0b3be85587a4f2195d3f4d9c152ca1bebc9b639aaf5a53c0d0fe8c89539d1944cc2c7cb72050f90035591c90fcf33b3af977a0b027f31c32d46870d367d66f82c92558509b982d5dfc7748b0b9757b2a140cf08e1b04854ca2042511685c13cca14477d3b09d790efa5487c75c6a0f73fd5400ff739b3c1ae3b7afa611f417e1e7e818e5251813b185e4c9d75f00d2eef9e2373dc535d958f3521c6f206f88ad923590a5a637c6ac10de60a624ae4764bbdbccdb4717545f84065fb21400d86c174129637166262989776cd8d9e13c4003a13437372493e1a1380807ae377ac7dd02cba7e1ddc0a960aa53cd3fa43970ff4bff984f3d3d9574e97aa5657fc3799c444ded4e0bca2be85e2aa20ff5e8cd5017114ea025563b2ecdbcb0e233657a4047617f786cdd550da78c13c9d3d88e20453b838999c891d72f4054b6edffcfed4d8010d874a528fe071132a9b53d9b23c0d04b48989ccab8adba3a3ea366d42816f836b775a453a663118b7c4899ff6f5d447ef953110e9eea067803d9bb0586966393b869028393203031ff58a8fed782580cb2938166d9906c26e83562ae5c9f836f2ca3007a8aa223e193d16eaa547e8b6d950747f6049a9636930ae0fc464b5b7621c0c4c743f4fe4cacc413f34fdc2c55b6f660588374eff842ce2fc9f11470c54ea27482160f09a8161860f8e56467926cfa0d8f3029ec649847dd40770aa5e5a20a09882533a57c5bd3c8e4d42d9f6f2b1cc97f6a24b532d1cff3136f78d2c6086b7597416c0f1c2c8408d77466b45b0d4ffef78631ea34d7b45796a7a9759767bbf377970a170485576ff031cff385a7b05e264f2acebf3dcf003f8e12889cb1cf0b686a7eac4e7870bf8d4343e9e0769f3c0baff88a9136eac7394b9c8cfad7d3cb18ff299a175b159048ea8196345ca9f676848dc919f8ece4caddbe7f8e39cae13cfc0070dbb888b7181c61bc5860977b19905a89ff943bbda0569f37e2fcbdeac950b83d10c4b5dcdb62b5034b9b72da23991112e7eb87177c88d12577a9a2082726fa287f0b461de73d6f5f8708e7986220cc47c76a70df9ec8619f3394003ac14684b6d7f58d6f5036b9c43234e040342b69838579cdd18ebbee962c352977d83171ad3fe111b35d078c665a5dfb8da5421e7005a1c8900e8fac9b9e4da6cc2e25c2cb22f3d3ef49e0a207404b86d16f51bd687a05d47a74bf9e4c3c9c2d45237e1b06a4018ccb6df8a4bb58d3333a7c788461f22690479d0d87639788cf0e3d2deea46cf4e4d65afc8bcb7c0c11a586c7838b1cf0a428a8e989b9166a67d81dc44b7aec210d657ab9fba8f5b65adcd25ef5af2e10f3e81c86914afeac00f0e318038d8dd8bb5c138971135cffdc0afe64daffcb6f6035e21520426102af5003bd6f2a9d812a10dbccc5d152e7829a5e49e7bda8c49da891c73deae13c323db0ceacba408a3a324af1edfc23b4988fe6495a3cf442b059c9f66bfab2cf86bd4e017879777cd10f98cddbb7562df7c9e9243b6a04445c1a151814ccba38f336741c331585efdda6aa955215c6c937d061cdc8d45d214e735523c7469534c52ca690cd339b2bbc15cb23525bf73ee2945f5ab8248c86dbfa546bc95fdea450899f1d1e8182cb7efe5b43b8343beef76e985334f37f5d3be3d920b518c2208e9302e8a9d3f4898b80498238f4c7aef9e0a21bca25596a960e1049669a1e74526aff75039d238f01b5d6ff139e8c56b1d2fd37868826ace1b7baaeb8ca26695b2954f02d10807003b049e27e90727bca063d6e42242fd295c746bcf4a5354d170a6a9fb9392733ae3b342f5fc2fdbfdf7ca8a79a6a78178fb0cc30e790f576772ca9777f22ceceea2beca3470fbb98fbf31b68bdc8fb1bfbeeb96b05ccad6e32b354db91343cb472fe8cf096183a76d7e98564b316646956f6314c3d57d8eba9d2e64a660652082a87e7f0fedadeeaef845aab9ff7f988a096de41af06832d9796bff60e71a0fd0ecd68b8deaf42c03285ebf44becfc8ad1a1052544cbfcfda12d2388c92c309ef4beb953993409b259e8dcbf218e9c862b243b04a51925979abf34d17e1b62da2a3cf6dd37e4c6eea35fd7e106a56fcd8fb110cab8732a7bb0c8fac16f3647a528aac97821b04f768e0f0e34639c30453b796308225ec326274f3985ca50bfa1eb159b76010a10b2aead15a1eaa5fc68952e194390256ca396b44505ef1b6f4fe04be86aa9ec720053187a5313887e277b87536cf0dbc87b62da99c4bf1ff9759c0add5eeafe5888f2b629896d359be235c35b7ea61ba87b8d6702eff3e3a0835d64eeb810ed213425efe7896c53bf60c441dc5a45bf06c04af513b3c1d10d88e5eb3d8f0af551c4b6cc771a92926d7b2fb6cafb3399a8b14608be97756013090a42386fc3888ed80756339272995726374d91d0dd2a9a68d29fe3e2deb96fea3e3d0746aef61923005c43bfba0d05e3a7a3b1a4705d090152fafdfd1c0398650f60343efe7d223d97f71bb93f004e7c89594540f644fdaf5b915444ec50adf4b017c3d6daa1a95c47c7b3163207dca65cb0e2463a7be60b4cdae5b3e12b7a42955e1d3de4a671e37c443a5e6addd38440a547589987dd098c35907c898249050a34b66af3000f2d84f6a2d16370b0ef6e76ad3b5612837c534bd62ebee0f8075abd29a84028a766b4b89fdcf770b5bcde43cb98413a927d2b302d608e5fa08a715eba00b4307b9ca1999beceba5dde43dac959726a3c9245b0134621741fdbb15663a737c333e6bec3d4b65a168ddb49cba1b7d8999662456bf0634dac971d7bc2cb298cb1a4c845e9426385f049416051159d7c7d312deb113f004cdf78d73582928cc7da0f21380d9ccf9b13adbc8215fa2769ef1accfc3b3d19c3d3a1c3bde3c28fe15fc6bf712144420f31c39b930ca59fa1a6afd264b23dd87d51335b8dc37639b702e3790b6cdfb98964432d0a2c44fd2d914cc18bffdef787b31e2d67a9151caffffb0b8d285766a80987c01404bc0caab90a2f1a29c71f5cb23503732296568742efadc056c9e49826bf959aee9abc0723af6ad60dd8786ca0ce0b261df18dd5adf6234531ed6cd71aaf174c38f9ec7ea54293e997a68e1814ba7209e0732dc8b889fb058bba404983addf141c1a2067963f1a049ecc8d6847d4b7740f3adc90263f09678a541046d926f05e79445edbcab3660fe8b832a92b472bb93a027702e56d9529dc6259c266076dcd1e80e954631dfd2e1b34b79edd77e0d5207ad4417f3e545d1ed5b661faff472b3757ddd85c2e43d8a766b7842ebd70f394bfb65e745738450b2836bc3c6b0fddae592a73487d8ede09a3654e90c387c3f46ef1fa0b9517ace65eab6324af415955163598ad60b889abd1f2e512c0a116bcb3f2b3abbd13d4aed39becda37178f7df587ecc9211d09a871d1268f1c927fb1d466e4878aba25c657a4ba82239a1894318fe19de14d7206bbb426a4c5dba5c30b4192a14d4bd35993f25febcb48207e5f26915083d8a42aaf1eb1330204d63da97d00726af965de7ea792fd5d8f4eae3d29af7d352597165e0e01c0f04916f6caf0434d55806cbf6c8eef3d64d4832928f73b2238819c05fa3b2330febe30ef035bbfc94e16fe8f132727a85fa4ae5269c1d786ee09262964e61b6c9c2319c77991f51624aae592f2aa9c481ef3613f0c4ba02392822a589bb9ffa76a45707f41261d7e6ed2aa700cb8a14b406829309e298413778ec83104e71db117f01baa25d34c75c7d4109eb641899e38447705f9dac416fca4cfe0ab16d06b1bbd60d6a0ad1d5a0b6b967dc131222dc132718a40df19157d0bb0ece3828ad281ae088886d0b3cc294a632d259e2379a7d9ed857a741767301386d1546f3a58b74da8bed2246da430c248cfd898f94b4e8beae91db8a34dc1ac5c08b45e4eb9e71d48158a76a9c60dd41d6124e0dc0617cb5ff2589d64226b937d6d10b15d1585af32057b18df3f73ccec78ae586dc1a7fe91882bbb5c7f49960bb1f988c52825ceeff94ffa838c3f0c53916b640e61cd5f74ffd06ba1e2898a5f274cd9db9a831d2921fc89b43599ccf0786c6d61e87b31cb865851b51c81282b1b1592483ec08f7f8d60f6003e868367c49eac202ea57fdf69cff369dfe97c8a8fe3aa219374fdee9820d15dac6c71abed76f1ea096cf8ebe1666678554b0da28b8e938a6cec32ab1d6643548903cb6a46bfee3669adf7469a02d3aa12b2c865a2d2482c79a4ad3a62b8f4b69df98f9282d9086c929a0d0145de8c57675390024648dfa1317c4deab662fc2074a52309c81b2a924e9504c1b5e8f90f377fc6987dcf01c62667872246db55b57dc806dbe3d34c046448c601f3b6eaae304fad929b6a3b0a701d7bef5aaf80721a289388c9cc84db834ba3f4a66ed971747d317541a55fff0218ecda25293b1ab998bb1cb75211bbc2479a87340a8a3866d069eec62a320ecd8730d2fda30c4d01d8bf085361a11d25549fe24ff2417db8f50074a0d2f02ddfbbb8616fa34a5e00e905059438be506ca21bf573f4d9b8b544bc70ff02e8d27fdc2e7b91dac9732eb29fb695e8b7c318a852b02327e768405e716f0d878da815d54cd30f65fce972f0277bdb4514ca73ad7d31b13be6feb94988fd292307967f8e2183498697daca08aad35cb7dae097c658f60916dcbade1945bdbffc73a9ad3c10ef2384a987428205181b6fdb6612575ca092013dd9cf56197c814178bfdb40ee2f10ae709ed55491b733f57afdda3141dd0cb5f348297c71834c852fbea5294b93655e48f62b7612d086b08bb2cdbd0636275765118a2c23d36bd9aa7d76721bacd4f13ccfc69162f23d4ca4cde77becde2a3f3b4533712faec67767d353a01f063669edb8cd14760d5c68037ee116b115a1c6ad378d180e97dcaeb5aad8ce2420ec6279bd9669f31d157b21ec85554fe1d06b38f42c3624df9e4fc8c065f430bd7be6c37be3a38c947719288f61325e9c66eac7c4955b8cb63252af349186b72f8b00888f963c355d2642e013210314c39c076cfc411bd24ade09bffc386cf093c0504923c088b0f1ad2db1ba3030e9ac6447b37a314af300a5ddc3229fd362b5c374f2b4fa1b2c9636be2c35d9b59042f80d981d0406741d87d2a9a836173080c01b66de1e8492f35019b52ea1cb88f5f1d3ff6efb926450791abe61a2df3ce0f39247066496493b69cfb54ac5ac3669c7522f541c75a4f7ab6083f1f07fe7f8ed63bb9a9abe7bd12c8274028857c2562551a9996ab73467907cb4c05c40b326a41090877d4ee52d0977710880971fb2be96a54f4c52f9b30ac77e9a2b604c909acfbf97289e2487a316a95dfd758b78766d3ad3de74d111ea4b7fafc91ed865ac9771d721b4504eaa1f7e940cf2fe0153eea1efc3eaecaedeade9cd593604922a56d74249460470106ac80507b25fc046d9b6c3f1f1366faee4647582149020c9454fa8d5696266d547a92db3aa58e2fd0322be713467c066aff017bd6a0cb805e337aaafefac90d31facf67c1e5d1608fbb2f2b3d7a63890415f529471516e8eed56350aaf6568af0b3d55e6067c2a66fd888bd89e684d1988fff7237fb01e3b71409c227d7879811a299863eb073db77253076c8d06bc72e33f2e769870a1ae9ade2a209de949e6aca1d696d4445b5f444785f2dabf3665b267ec57bf6c7984f899ce6e2a89c94db7c4010229befa6761c07a51e3148fc64db1468e2b4215bf1e8dd616e6812154d0754f606dbe0059a63a37eb1ee12e568e005ae234c24916ac2ccb6818ad3ed18a174b5f9fd2b4166c77c7b4741585924d0128798ef7430a82531770fcd1c765b678cf276b0a0cbb09554c48872956c0e4a345e32e8dd0154af859cb725cfcb561620c813eb67a2c19b70c10d129c5b1411b60dbd9b93ba989a5444ccd11df1da566387be88fac82dd3a2902964e7ef303226198d5796e086fbd59149e35c5b63e4b4afbbfa13310b72cde36afa930f576c2cb26dfb4da1926c5b570bc4d0ff335d020ca448e9fb929f9b09c8a4b48fbd0a003800b7df4b5a402328cc4ab98b689605a28323cea2707747377138b84c8966f27ceff61620934083c6f5862f1e557dfab9ca5ae81551b4cfcea4b0b3d01d3a74d759a6afd0ba479cb40a9e17442386d053b4d3d2739a8ac38f8916ceb1a41d5d4c5eea146964df5a88f12d2ffa2b99166afbf2c5e7bf37528277a0c1f8e3d32f071284883a4e4ae38f83769cf7046484ac3b3b3eef6267c92c4604698e44fb76015ceab0f5695be607d579c367103a7553180e46a6357fd5e9a4432cc9a6eb8cb34533849371d1f78b308ef9d5f03f1de78859da605645601564f29523a90cba9c93873485246e39f42567225022e89ad9dc5e9dc421a8589dca483d1661a80563c42b683c7dd32a8d09e3a2076fa445e55853cc10b69c3741faa137f90bdddb1a25b567193b241d476fad539ed6687a9881f3d2cdd641f2cde4024cf535248c68bd13f5fde1a8ba187753d58343c3170fcec3c6ec72d280715b9ff5ce4eaa1cc116b6c65f4e0158d4904fbfa4709d7fce9968dd88475ec37a3ecafc2f964aa513dfb28cf929a046c778f066437251b2233bb69fcf210dc82fcaaeb9177083624ea7740b74e3e16688a5325dd842fb40ea62dd51a9a8f3f3cc148b3b00610b0845f4186aa729a4dc83ce0dd0d04236338c9faf7df1622991cb12f60bf4fec305551b5f47572406fc57fad2cf6c617973656b451c5ee5f1369359aff031d8a075efe4682714ccd2ef2683991f3648dd3a7b598fe92c6347370e550d7fe291cfa05551124edaa4cea4a9088779536ae95f0d4c884e50fa229743dce6fe1bb6d19ebd0e7334a00564f3478b8bf8d794f4606f6f36d339654b15380726dd51ec3bc8c7681fa5e686b9c81af8f474b91a2e2a13aec413cfec6b6c541ccf216df056a6e3712141dd6fa9c8e327b93d19a5fca17bec7dc1673e0bda12fd1f879910121f912a417311c082a7328f330de374f202d1e1a61aafb220e73c6186d231112d1cd228e8ad51adb42d4469278c64a93701c5d7d17432140bb4e7bcf18a6d57de24a835a510cc29d96536503cd18f23f8b13a5d010069d76aa7e1d62888879b49d870ee3d525f8c9aad590c10bcbe2e39bf2361c18212df4fc758c39c953c991d0b28034349acd8c8a354f8fdaebff01a04bc541b0684cdd8b07306c79cacf161936e14117117dee015948c54b626db8c5ed866b15f7a77d2bce3d9c85dbdd0aa3d8f6771d74b2bc00c51ddea1766b7d368a8829ee6d0739650c1c7340a4cfc0b0bdfb57de05b4ad1c07099fbae1febe22f0f0e8f158823b30d1058502140a27ecff5ca6b623b7de837e8ee089382b67350637aa4e3ed9ccf1a5c04cc0aaffe983585976e57853a3cc4725ae66b92eca90eb46b16a4d1d0b4eb64afc11c54e8b3900326adc4b764c76447d45ec928d11a710d2c3b2e30f161d103b040997fde1ebebe10c836a2548a641576af4bcae6b14756f91eadab32b03ba420f2362d48239c097e49ae5510cbf7471d8871ea78a93d83cc90b129130f8a3ca0c3951180529a835e4dacdd5942e76b33a65dd54895e8d714dbc0945e582317d83540444bf59f04b16dc4aba618db0f0010a32a409e19d28446df4c9d7028877974e3eb4ca40eddd105298dd2c6a7d896037ec781fba94679a64306c676e7a8b4af997be11282a9e93c3b8bb7ff9ffb17bf229c37f6d485a16df7811d8740f0d74f36214e6896b4f053dd97f2920a6205b5c42d4847f2d38a98bc50e30c95131ce8a112fb5b1f09275d554223d5ef2175a422aa410ed7cfd23bd720ac73fb92c86c59732607ed5c167704b9e3764df72a5f1e66bc942ba07ed8857fa5f8382c5491f5520233dc80c5babd776abccd695410253d1925326c57d2cd20785543916b74b0c8a64b611ca0630bbcad11224735533ac0b73ceb97f579c07dc12344f755b66ea396357978612855fedd55d4b110d3a37ddc3243f599591d264c0ecb4763b57f8b5ebeb8c7df082b3c1a042338aa5e452d1c1f326d1c8aa4a10dd341317eb6f145602b0f8b1b51e78a34a85b067b2e31a4024e6450ab68202f8ddfe4a83ea407693978da9d19d36e26872a31745b927b216ee958858d12c855953bed6138b637b3b74c30ebc4d93081d170c4875047d984cf4cc396d49ec225f32deb412c6609604078f16251502772a2cb8ce4dbf51a374aa9cc0ce5898a0073f86b5dbc1fa1d5d030887a9f939d8c4cf0f3a232b0d377e238ac56ed7476fc6135bdef1f53c545cab42f892b82bbd708c2686769177811cee5be11c25c2f69b2fa021b06c740a3ff9b3b4811bc5cd474a7226bcb4e86b1b892ca9ce7501b01308b16228c5d114506e7f5b0038975ffaf0a2bcbc3422dd94ba960dc8bd589fee76149b6f45fae8150b1813ccdd9015cbfd399a1723e286e04e4a4e3c5882f7b3bce8c1a58193d5eeee9af56643b751864bf82b643756df40cb2dfaa9822c12eda57f5ecc0e7b47495be08af6e1882916b23586619cfc941588e5090a71ab5a0862c5ccf3e9dc43b312b05cea3bd8d2183e78de9da78ddf8090f3acd165f0fd716136fa6f089e7d9738d9dd3e0a396427881672504fca8eb2fed69c89f644578b2a67334129a3f07b6026cd2396ca4171707883057f97707f53e6bd2a147034754f5e443a4774c567adbd7d549f3cf88ebeae3d2f72af162ea12b935a2261effa7184431292635a06ff8fb41101ccf38ef2dc987332226e20986c5422b60eead51b46a37f0209949607e22aa25c962d538756641acd17f86a293db9696f634a5d28340c51200587273f85100a621f9b2b84baf3769ea1e6c858a6b98cab4b1090be573ff16ccbef97476337c22cc6de1b8292f0d712720b8c4b4008d8c0eb7a601a40232cf7109c69d54833f4b7d06ce43a9fe9bc6e73f1a92dd17fec3d88bcde6ffaf88e906b39aba59a1fd3ff9102c254bb8f9ddd2f383e4ead89cb51c78e4a61c5b4c9e02f2573ec0c9628fa48b4f8f4d6ff70663b8fbb1fe7d5a19ab618c656e362739182fa08b6433f7dc37b9a2f54b8dd362f38ec8a39d1dbcebab6d5d63e11120ff754ac3f10fc3cf96342fc4cbdcd41c74fa4c716c419c5c7bdfa4a72b2c45d66f8e48728a889727bf0b3d87cecb255696c9411833ff736ec081ec12eb339bebe1211c6414352fde3ae5cc8b43132e8b7c0d0108c43fb2ad0bb87153880db24ca8b52e005d3c25a2ad5d575b5f05688a46990a57b4bc5659effa1b2eafcce477c803cc15095d0fe8403371686c02d4fcb3e4d9c7b0d55a3274027faa4bdabd4238a544e13b947bea745b282bbc6c48ecef6a01d972cb28559ae3caeff1ae2d3fdcda109d1209d16bd8693db01a7a1ed07e1d2640c07359fb4fe21dbc31a190f4437bc2b0b1f1b8f75d79ec3d0b2f8dc908bd0e0ce8139be7b30f8910a30e353a14b6e5d975e8cf363ee5b41628fe72138d12f1869f8f1b45b57b98837a3a746287ef77c605497a97abe080fe5b1294ea5f2e2812dca0e609f519cfdfa8e99f7e3fc33aad8b7ee2678716826b2978b93edd53c073ba9dd6763b95c9a6fa738517fd862e7c6f16f9d5faa32a7d22f20f07d03a9c468d083ab6b1d76b10d7d73ff61b0cba7f43cfadcd23cdfc01dcaa0df2e011871530a0a91a3fe9105cb9aaee0bbb129aadfb4807425902c96c5f2ceaaab2584994c9614e7f337b47ffa642bfff1e25f85c88868b768da4f16012aa37619adb68c419251b41a22c84be0fdfa4158e3ab90b5cce7833eb282a57e4f8ada1d03679ceb92103e536e4dc26f53e433e9bfd0fd130c43fd8d958ccf8a8c8dd3e5dd1c72cdc0282cc7ca9c99936fb02ba253a82a6952628e7d336f1df924fc1918bb3de9bd68292e3c9e92c115de8ef6714e3e7968eaed31f04f11ab90f36317411390d63cd3e5905bacfa9e3ba0e3a2219a42a4d74dc197d00b2595fd97a0518bf3f3770e803cdf70bee41a13092f7849bf32de50141562e3f0afe7367d3beafebca6b67c3fbccd569036875e325e58a564f8f66407c8f0eaf2a13e7980d58d0bfcc6efb5dfd7b19a6042a20c309598a5f854fe1ca000328fd89ec66bca998bf5f9b66b257a36198f70829871617c854fa3924f823f8534dff70acdbf7e3b5f89612c3b9f64b7df313a3a6427e67cdfcb29aaa8924261e0513a6d290290d0be71006f295025b67f07a879e0244698732ff41fcb04df90edf13a349a216f5b95f53bb0095a1412b47b962633ffe5b432926859e27f19b8ae8b4a04c137de711bd259ec7c599212da957b5831c7cfc4e5a92b9bf2deacb5967003700758f28fb5188fa7e5a479544575352c978784598bb46c503000847213a46cb8d3cb28e8015b9af9c647fd57eef1f9960317be9008b4af50213e94f22d60da2e173a311b747ee8c6ce8d4c04bd1f793771f77fd853a3fb6cd8c6fb2109e65fbfe52f1eb9cfd352d53b5a0a0be5d1f9045a602a4744c44968b173b8d6e9e5604d2c786167e170b753d292a97932185d593f8fe2f3db5acaedbbf637a9a8a0adbd52f1f0211fccfaff2e97fb0576ea1a56ebc92812bcef3a3ce659129bc37712148bb8869f3a7a5dc993a659124443a70fd57aab17db6bf557c202dc646652af5bbebc107da0b876e2b44400be55092f80781975a91807ec83d3d461a5d386c8905a7ee166f175cf9ced6de89fb10df4d4063230555cc83dbcc20603c444c646a5f3d8d07d3635b99969f938c06370240599edb8e52a1ed89119e3c077e1b241a32d3bedcb11e14b5b0bf26480519dbc0ea2b7ae28a8a75b5077f403855dace355347992e932848c43e8040814a9ac9cd5757c4f929e2980950b76e7969a8783ac41eccc3cd8b86e287d1033f1041d00368146269ef098a7f92da906ee8a29bcbb899626f98d95a7a0291edf90f469c7aaee57fd0bf1b06fe0c532456dc5fcd4ed853ce2ffe3464f41402ad824d58214cf74e5b0d4cbde290b3abcd35f6d2ce19654930a1da58d26da280c4234a4f2f598200f096456ae478ebe9156064169be84de1a5883b5d197d639d4eab6c91cb705fcac5c869768c88aa26df0b2550170e27674ff70b789d73509a41fd0cd1717e1dd2873ac9c731243bf6538727edec701ebb3e09b8ca4d8903fe075fea97a4e7b52c49ddb82b6e7ae320077e6d9b50b14b6cd446063fe754984762ece97a69125898c565db0cd60c672245aedc3f03ccee03acbef2c517c7fc087138783f5761fa947b906e79b67747c62d450e38a9ecab4af390d9eaee7b72fc581d5bae82ddd2539dd61aa4bf0ed1d169cf9464dfd0a180e09e36660b986161f7ad51550b556efdfe14d88618f001e108c5b4cc9fc6c8b7271361e1d98aa9af8c4c40fbf7dde22e81e5e6d6597e4314f87466227bf072bd31d02be0804597c377de4c0316376118eb2030c98b24c6382d8b22e626669d50ad7d8c60a9e72d9728d5a192e2c86151de74003532b7a8eab21d1f66292afacbd5576b8b8322e22b484e91bd3561c210bee14974d9dbc60daec71d8ad6fb0249c758df8e7bff63a6018219b5ec5a9217b75b6ba49aa9b217f629793cfc96d8ed9f95ab6e93c1508feae229ac80b948fdc9a5e11018ea27cd441c0ae7ccafe91fccb3d94565e569c2587805938e2aa0386b02c090197cf0a478f6c17bcaaae98596c6073993d9a378e0b4695797b9d5a24e185e9568b5792baadc60230ecc4a80bc5f3db901c110d46293d1d1e0ce4c257d3318cf0bdfd03644e6bd7ac1c39e3a41837c1f24b8c201a44621ef235c152fac02bbe31f51deddd4fec825863a0fe57b1d2220e85de91d25b8bcc02938d919d897a4b505b27af08a079d517724f261479bb8767136c98eb69e0b57f1368c40092c78f02d24338b6b49bb2a6aa91b1631012ee0079284e7364d6a51b7d00d12ebec31ed187660df27f45e91e80125bb6a1680fd50ba8fa1b100100b7149029ac4540dfe5820e41bb32db75b2815f47774d0aba935e2cd27a79bf6057ab361cd9871d5bfbd3040c42dff62ced2e20b011b1d0a43a12525f96212388ac75e5182496b11fa54e1b4e371077fd746150586b7d3b86f612feb184915f8a984cc9a84b0bd290fd9eb28ad28fa49436f1ea3b02f0fffecbf931804de461c34f4453595b33bed5370637119fb1aefe40f29a5178f11cca79416fed4f08643f7881818d49961a522641c40b152b7c5caf6d39400d03fae651cfffe2de3aeb95f20c107f3bdabbfd8bd4f8e25c8eb8e1645d72214c0e42d39557012e85196bbf208fb84a3e725e1774eb292386cf5e91b05848432e429bad3982b85ca69e9a7e1dde8b8982dace59f778b922dc06f2eb052c3da5a83fecec8a3cabc26597128d11f9be04abd7e1525df5d9b7f881102a8bfeea31c97a6f986d0e6378a935372f870ab64fe2bcb494763faa18cd7cc12a3436c3c5a05954327a959ed1ba54accef0eb98826c18c5c7e673bf0484a59ed27e9373220abc42c62f36b91fd82646e89ed48991b6ee79b665d7dbfd89146b9b14c79309f33f433c042ce297d9b7545bbb4c10815048935bb05120deeddaa1da5640e34e936ef3a0fe225b6a74ebcd9008a3128c7e08ebd2ca5b755c3891713b8b0cbac8d87aaa58b2cdbe9f7aae3b24d43fb051835fe41ff214edd4c18c16b18093498cd2455bb9201a1bba3a97e83b51a8a4992c6529df837fa4f0575a82b5a9af791ae4b5cbf0e4d211a32b24a064ce9853907cdcc16eda5fef8442c71c530e9a69aeb1f873f7947dabc8263a6c55266f82ee40800e564c577b056564cc55985dae881d0c932127d42e9f5a86ba2498f66fa5948a4207d3b9a00de9ce9cde74722b8799af74b307fcb7e91a96db20c70911084c0345bb05577380eb317e5bfb6cd6308ae917edb2caadace6e46f6940afcdef86cd511422c0fe989565b294fd832fc5b014b9bb97d17e592a22f521b36f30dfa3070a328a64b4394dacb09d2ee644e90806b488617a2c372617029b3d67ac27df01f70c89cca122b79cdbd1c597cee18cc480ddc8a7d08ac12e6a3a323f0a40f974cba8ba563fc1db1c4286fdf61e049016e796cc5bfb647017253079f7a7675eb048f6eb8fdb81c4c1f08eceb4e38ce8affbe6c6248f19e6877e8c90ac55fe198e493d728de1b3002e29d7b2b9ff8078508200ee2bfc72605e45172d801c1c49f616a9c5aafa473a83e05e1dc2b45e6859c84b97cd9602922f8343c29658730927473d45b312eee2339f00844adcb118fdfcd78db1ea975726b2c88e3bb8d9c5968b51853e53526710c6f001c3b2482f454b8bf66f220ac0dc706f9558c307ca87130a63fb1f7659ca4601f7191365d9aa1cdaa7db3212b5e47046a8db403a163fd3daf9a21136f7117b9d3a1fb6c7d4c542e14b136737d7c59080cab9d2502a1a684c9f7da184469acbfded50cbfb62f3fe5a2763e9ac81d44c1f5363009032e0e63143dc9a3d7193027feb465e1f06fa39ff8e2f796cdbd6618f1f6469bc91ffc4f0c956f3990d222b30aba6683193dc844d0c42aa4c4722a25ed4a923e56f165fef4d606c482ea8cb46d9dd5498456c40e9ede8e606de6ebe08dc3d20a6e5fedeb899a57df7fd75d6ac404811b31142e834811dade9225d2030ae1450d888e15ff77dbdf53c7b56ff9d0750b84244ac04859142eeb7994d35d5a9b1f827c2417d493a1f4739e647a422f6cc51e921cdfc57d4d47fc4e142364c92c1ef7df6237e6dd7f33ddb37af0c6a8b76a57c0fc301e1e3a1b9e9fa8a298ff7f6bc4dfe5c333a8b96bc0c798dcefdcd5f0d9af63d99090040e84649b56beff25ccb84208ee3cbfd069949997529be0fd013a41c10134542394448cfa17dd4ad94ee18c53d385c5819165bf794cd5008d95322b0b9e2fe8a71ee49a52531f34500ff39191d71ef7070e64af19e2486418a5be75f1a59aad1bb5ed3c23886c61048a9ab2405d64f5cb622d553cf4ef1575293e108036f854660ea78cc2ace84fdea4fd6b95c4404c35d1ce1f583001ecca158be7b9e046216bef4ffde8da96604de19fd92db90ed8626bdf86e685d9a6d626a09b19b597d0c5819a3cec067280dad0b2ab02bf055e011f8f41f4e84e7160a1f948b891bf0729c9023b53771a34860308b6c5fd0e70fc4cc950ecc174c0fdce3879500dd0e587b544a1f95bf26818ba2afcb75162c3b4750d700920ce6f8d61ab98f5eaf46b99cbebc3d6ced43aaa2d23657a45c2140dad5ae299f3ffc6654d278f21af70bd00b07af8b1f8541cdab741e105dce332cc0e97669a308db433b7110a481e78b9ecf4531218b96add02eb96df8484461d966a4189bd0fb3f4c50a9c9798e495ee2ea35a54805a4cba9a410d62eb05ce96a49e0601f5a8fcb5ee1eeb608bd6d762f4bdbfb093456d2244909c7f1f21b1a2f620493ca030b85168734490182db7ff3eebd1880cc4fdd0d23e879c74c4ff1141eb5a0a02ba05c6194e93fc65e5c2ca86628cdcd31a02780a107091f5bd26dc616baba1b1d12ae4245498f1125c838107d3b9df6f419e65c1e653507622c079e4bbf267d6de863e66b9cc0b4313aad99462c870a90adcb1d7ec60221820e0d679fa9f54dac212d2fdd112d8e36004b972171cc9963b7eadd245157cdc103f05dbc49a9494dbf3528a95032f153f0727acee74551c09e5d17c11ba3cadb6be765a3150e81302a1fefb3f1e8eedee5f3f8aeaa1b459870697b30d79413237202738ffde87604b3517b12355263c4e31cbaf8a569b22eafbd9d0f9cdcc59a55bc302b7c24ab57ee2e65884d763c5a1efb8c9086ebf6e46bcc85f7b876690e474daf5bdaafd2ac530e4f392d4dd82e6bea56047cd1adf0e530d72998a4fa8aa8db2e563c1ef0ba3dcf8052309c84688aa216fe1050861c65014f99fd73c5d9439b58d3ab37d8bc36f2d53f497d6efe93f9bd8dbe0607a13f6db7717600b981ab9f170fa052a7f8eafff39655619c3238ba56db6f111103e7fc49585de519ef7ded4d716b6d3768c1c198d4511ad41df82428c0e49220e7ad97736ec45fc7b7b0134aaf2c0c264a97ef9a2108ad501ee85441e52a44628543e5c0d037b397ff8880f4599f8c19d154c79bb0e343af0286737b8b84afb7a263ff79083864094ba7b5faf0c08cbc93a2bd5c1a13c040c77965cb7fc85f9e329b457c4b76ca47ee0cceff70d58138e0c7a994519c2bd8fc3f845c0a7a9a598c9c879ed26be551f99c0793f4f07e742907f466dbf2a5fe27cb8079713fc891e9735da33e69bc32f9d2f609af02a9709645e40e9973cf0daae856b342ad2ebf3c12f956204710abc90b0de6058512c0eb9f1cdb144b001fee03743e0dddb8eaac4718e52b7907c5910f1f6346b4386c105b21376ca452f39d4f9ffa0274e27e66e6a583032a4b11c00483bf9f9cf42166420d2efbf23a5c46e6942accc33526828754584747dd1ac333037e36e75d410a7c02a57168107d3dfd73d0e00d87a308e5d104f5bfd0f52891a4a2130f75d8fc946f87d20df5b617902279faa2702179f34580a50115779b061ebb4efb7e0931d6451edde65d5a07130c190f8654c07a8ddc7fd2ab21b76d6aaf725785efdf9a5500ef6db95482b52d72f75ab305a77dbdac989a7dca2826a71030182cb817f3e9518a9d03ffb4c78f2439add70e164e788f3e1f2e3f6419a68b4c91418c637efb61788181f64826f6703d8cbce00eb150e6dbac05432a2d42cdbd16ed0737d79df36d751db47df0bdcef6fce0da77036c07fe4600e68a63517da61d1919354d27f7f07929755b47257b618a6ba90ce99b6c1131153a59804d5554fb0853a66d06202132dbe8fc778d943bbb9a6371c59758c993801d35799998397cda6bbcc5ac6fbc3ba15f81e7047624191afb01217cfb820520fc2897dd075b75a1509a7e5ba0b73271982a54e586d6f5e567dbeb9a191775c085525bdf4e3d7c04b0c4181b0831db64be8bfa612bc3e8b03976dbb5113641d8db7d386c9402e2e483343ef348fc1245919e83a97a67e4106a2a517047ee64fb1d29aa8e72a8c647e3165e94acd99177fe8c53fb78a49b5389823c6659f6efda0de7b8eca0f5bdf4a72cec990e30de9db9a89c992ccb8fe863440af1ef1cfa98e35ed4faa15c8a063cd2a48c3d061a8a5ff8743b320524c16f308c2cc94eb4af3d80a38fbfa0b03b94e9ac53be216eeca26fb778860463ba65266ca5c5848c5d82d27ad6409b5e81517ea742c1c1b004205d585c0a2214e3eb990ae3c97d3314dbe0870a042a431f51f798b5df6eb6273358de25a9a19f2338c5f81f4631426960066f39daf90629718635a2e2001c90b92da74ea13b03af654fa18c54f59062c34f6a577d5127b391ca3f1651199f3cfa26f1ac0cc619797a6cb78488f98a6043168b09aeb11c13ce1a4765d69e2032e8f62c7b9cbb6184617e3cb7e92f516ec096986d1689b06c84cb12eca7e9f99931dc869b4cf3244eff1b672fbcdf9c7d57be201b3e8fca0f4fb615246d08c657d0f9da9ae72925dd049a654c0da139ab2a966569df42446a2cdf9972a8dbbbb36c09a8953755974160345b69edca3529b3f111c113a80ca1e58f27623e1ddd77bafa3a0f3be9c2c57738387ec2a311e20d48d5d977722c7de9d69d19c0bef4830a76059f7691bcb89393b612cb7b39c577569aa8a8bd6ae74b7ebadd2b7536dd7e1b7d25b14fa63759818f081c9624afd03e80b1d72eb882da2add4891a90b8d9bd12c0d03a2acbf9919132341ef9a0b14a4048f0f2c60eae491d38ff452d41e0519739097cfbc2021083931badce189e8be50cbea3606077b31fb97c3fbe149e3e8284d70e7936104a5a6a7e2ef5934c12bd80fb9ffdd6e75f33b6e74eb988118cab2daf5c542ac92d7062e7f18d953cabbca7d8d43fb7780a6557a4be1bcc6152a54112441434d83a8df80638b19f26265bb78f94c43b880684c5b172e62b1dcc96843c4d4c798373ec51ee81c518a3cc6a5f494a4dc6615d6eddc824dfd51397e610ac8ac1b191a7ecc614e4bfab19e7ff5bb346ca62eb366db54aa82b479998226666a6ee9dec3df87486ad4698a36a4b123c4fd91ab0c2a481161ffb63d53e6377c0c8fb966dd55e7027dcca9c8bc7f8ffa05466f860da9d898046d7c09bdcafe51efe708c5d962d49783a7e74d55c28ff8583f060ac89786eddb3e477371deeebbf07b1678b2302262d4aefa423784997df88e88f8993082520b206b57e0b0d6fd54f91a2bd7d3a098b07713b8add3817849fff265fa3bc4444bf5b61f2becb822a6d9de62470d03dd7b67a3c7ebf6233d686d8baf288bb6c1fcc3600510f763e8d5fa9e4f9057f2c409211270bfa015f22917b4e305b2b195290995795bed133192308329047a306fd810af77cd06a784fda3f8546f2227436593100c4a9bb370841f8cc7c548cf9402bf41653cfcdeb40ee112027abc02c26baa4f0e7cbbbe0ad036607df4cd4672f40e15716ee490e70de8c1ab63359168ecce88b492eca6e006e677b2331aa5aba2438233e930df5d92501cbdde74de2f2c4bb93322c4d1fb057632e778fd85af20299ca2dc484304e02c27d2795b02dba852ad1f276839ac48edd76d9730016bdd9b611b3d695b2fbbb8a8f36561a35b15f3768e8c093d6e996b437c3a2ca1a80445a91689c7a350e4de529bc1d9589d97cfa33497571de9064939af4c88980d76479d4d28da730a671f572b51d8727bf4b5ec7d325f6eae326accaba9543667436664e35a67ac174bbd05bcdc98c497bf36b10da9a6874a2f61636a27ff5b3d2c8dbf072eefa12aef309619b86b2c645541f85d100d8e8bb5288e3f2327b63f0baae7727a4bb58892c015854e9ed284eade1616b24fda23f0c354663666284bc749a013301941574abba6f87189ea5935a8fa4bcdd03def29b6f8144b34ceef26ff1a595c57bc70db9f13a744957de6638be6c0fc4a7ff829276e6cc2e14b816dbc13d90b3438c98249add72f8f166997e5dfa1cbda7cd740cdc748092f72efd9f77e008ac0014fb570e995d8e3aefb665a0752007de30feace9dc2a90e5de85f17e341cf7502934a0ff1684ed26c78722bda5073755d77bfe6f2fc265c943e60bfe4391cb1630aaa06e09d4113df5e6c107ee61a449436aab49810cd79c1da1807486cd5753cd73a16151e673f4fb7bb28dcda60da554d77f4b38fb0fa416fcfbbb0ef38d4cfa4c1204294aa5d93c5a25bf69bb5e53c3cedc7c2b437d4da32a3243c429f0dbb8e63657651dd71190f830fcd1b3cce6ea052fd5189c5617b5879a3b1eedca0e38b3410bddec94bda7bf1e771670fbed603cca5d214b34d24a1511c631388b337cc63e154ef55b5366a7a586569bbe226bf8cac3fadcabf1e94db8f554a2d815722c1b65c48a11164d384d1878fcae0e02720adc5fbe87974528d219290dc3345c35f91e59353b1e3e89be8177b265db7fee0f468466056cf7b9107c4eefc530cea4d9bc05bdfa588801396995b7fe53e5a69a28d85fd9f7218a68b74d3549539e65a3693c77c4069e81decc53c950184ff5f30cec08fc39ba072e8d383fe12e1b2c8d21a92f50385ba1962a9a7209a8d2fd6c2fa7022ba7482211a7a1d056d7edec457642d33c1a6f49e68416bd36ce618ab57bc247c36e5736a7aad701aa4176725788935e6b7976b4a6c6a120926bef5245fb7a9a6880344e39aa1165ff9c637fc04238de6ccceeba6d3ae3d119f1f49b37a9ee6c9b97148045686977f2cd5c08b70ad9da6ae8116481d8b1b6fe05e59a297bbfdd11cc991069e36b0bde84fa99f8f6f5a45588b83f5f32bcfdacea1e07c66c21b9787c8d3e40ecf5dcb91da213ebccbcb305cbc7a8f39c661a1ee2fe9daf2e2d82642688c3fa1c48796bb741859e30bcb9cac6800d156ba090cb9f0060e7d6fcb971be70d0e146732415262a7f987c8c065bcf4623114069b1e7c2301799aa6eb8d3ffd2ad2f5d41efd591a208e6171835ac577fed9f64edd0e5835ff7ef1326ac4142282e1d4661bbaf97d20797f707ad43e552467ebbcee9a0d8ef947244b35e2dbe22007816cb6aa0dfc83367aa361b99feb2e63cfa3920c4175db73f3266a88d0d42cbca9dbd8693327eea7db315b3f641db8b9cacd87e80e86aa5bb71d319761d8b27591cb88e6bc6a9918fc6dca3b4b2a80dfe4ee06115f2441f453f859a0469c6f01b41ae8f36f3e7488bba14e1aec92a46dcd75584823842a2232dee915a038732248f76fac68e53a43dcdb62db698c688fadaef0ecbb41f2ed9c44b6e3a197db803c5397521d820712e5c82da9b69b0d0a40bfe97615962e7955b7d939126246974611df597f63dd04e68a7f8c5181f0baf7d99f0fe79435d719f235c29c06360b92a713456042b0acc7d0d98d4ecdecafa7c09699c5454cbb3765f764684759d6998c06bcab3cbbf150e0c1ad1a0c554c6e0a6bf51ad0b091dd51c155bb0adfa15c42d5f83c346aba3caee054dbfedf81444ef968441fd5f6f761adb5ca71c4e65f2ef73444c67fd560159ab8a02c747095b72de119662a99c9a5088f01d8be4051d404323f3370629bd507a8ee0400bf901febe7f12ed0b987800a5b72daf7ac0b73c1634b7bae07ef34122fa098be15f57b647e036d2bc3e9936db2dcd7936640437dc93e36fe26878b1c5673289bbd83a46f065ef49adb089bfc5c979b8b29b292d0b02b539f6c873850986ab4a86d36a12e36c88b8396e3df02a35ec19335e74d66aa17308efa6bfa537148101bd1f6c11b9cdef889327f8120c36e3f054b5f9a3ef8526afc3012a851a57455f0b3cde1c2f89eedfa9f1ae46450de78de3afa1c1c3085b57310386ab248ad5a7746e306a7758c5cac98e98b1f802f3ae7cee53da7f2e8152a6407aca26e418a23e11d51466ea5eac989f9daf15472daf94840cabc513ff3e238a2751c00a4768b5ece7d82bc052ed99f50d0821088eb5fe9a1416d4e5ff94d1950a64fbf618628d71d6748507df66b98f35b3eb535bc6ea89d1c9cdc3b5a4da893e7cfb012cbb5b519b23fa53e1365c1edd41d86e8c3ac16735c29f53db6fa583add395144c6c84c21140d8efb513ace2677954d192669dc92023d977b35095dc7e363944c6f1e21961ec8e97780b44970970494b993252b8cb6d5349b63378748bb07c8b135319249b430333288595c17a18f5a920f6e60d48ed4c5d5eae38857618a7664a34a1d26543339edbb439eae2957bd66af4ed66d42bc73bd23b382fcd0782d6a6ecd6461dedab307bef6a41af1aa44173b93752c2257b187114c6a73ed835539738a774cd6d8a31a562bbaf99011aebd9c6787b356b8077c7af4e3bb73e54c9f5adad71b7c2e61139cada1dbf452148a6de4c8fde96bec9cceadaeaf48963cccd03f1a2ccb9cfe4b4c6a040e1b5b7dd5a473759a3f8f01b2740e03f49fdbd93ad88a69feda864b10438549f2d5a4ebc64101046becc9b0ab4780ec0f1c2607bb817d7bc198d58a6ffb125a0496962be1d060856bbc1aec6df9707239b565c1bc5dc3ef8319503d3acd110dcf5a07045b433d1fbb8e6c85bee883ea9c7c142b20e7a35474956a3c15c078acb653a7b412383d890172a75a641ef166638b87e4fb871b8197d4849a66c0cd42e726adfc085f6ee626b502d9cea0f7ebb01aed61f153a74e6b21a5dc001adab2c23ac46ff032571b61d9fd2533a8afd5fd9a48f0b50520c9d09c336122a100ba06557392d5a555a7e25bece13e180d742c1fc792b68c79539722b29fc01be6a81beca01c609cf5ac6ed3f6338b1ecc3e080989433e22869efb5153d38aa21b7fe90e994d40412afc7c2c8b79aa642c8010b928455ff94541688930d9556c587df81c67f241135ec460fa64236ec2fb67a1c5d6aa6f28ff0f9e631d40dd107c83e5ec1f50cd76885003dc84adb98d838a50dd106d3dd8380a37e4bf4713f8437b541f13853089a4fc7199d97d085993c56e8f87489d6cf404f0fa14940e4aac1dae726810cda03df195eac30e73e4241d28ce6f2a285303e9dfc90221e0dc672b996dd307d75fccbba5bfb66d430a03c2717b72fe0e8525887718060f7ed39eb0e14ef5a0251ed224eef52d16bbb506ca7f786919b770cf26cb4d7979ee8c4706a2c2872b1ca6a0662f468b9ad56a215098504e130d3408f684cdcff1f8118aa3f674f1b229072a9421224adfebaae654526c9b6a21fe35b37664c2b2e04f19cc2ab808c465c0f1731ff452996354263785a4b01aa516ff84c5e3555d89b41a5011c1c7181c7631fa11597970faa9a41063ccd8293e9975049ffc0267f3df8d3fa545620777a849883999100767bf26ff5ce2547c9026668b8ae15f41d9dd0d669067cbf3e23e4a597ec8d180be24032dcac4c7a9e3ec1daf158641ce2a824644531a9bfa0d046a1ca1399687d1630a6af93c6ab3deacbd1cf463f8d3b18b84911e0bc9703fce98ba01ef40e65a58a146d07537ada115be1cf4f51493d57f468f30b7a5749f18dfb954778c9f9e6b137bd4d5b26e0c55bdbff94fa2550b8216c388ddeb6b773c738e2c0f475b77683a0a2b509a4cd610419c7ea9131241c4bff98d3ab8ba3c4598ea752a6ded8d946e53cd3647ca476094e31e9d61080fd4f60584ce32ff06c5d9e41aa5160458febe281440feccdb2bc9e1565ca3d3552daa08f83938ffc3d2c3936c46530f7f004d4ea35955f07a9da610ca7a6140fd1ef78b81776bdf1cca46368ed49a32ceb8ed802d88bc1f52dcc401ec4aa0440209996e507e741c26c5593ecc7bab65a23a77d09f79bef9c32d334d3f4d3cc29fecaa68b4491fd35db58379f5abaa3a6ca2c9b8ed4ae55b27d4cdea56d9604a8ea03357a32a78ab2c9b77b9d28abdd9ab7cbdd401a3781d54bd98fb29a37b7daf773f8a59b11191b1e1da290ea780699170698f91aebc87f49dbcae8af93fa57d86aed921e8bcc907a80189fe2cbc3d613286af264065334cdf7c4f6c1d14f1edb70b809bbfaf4d49a035df4269c541a60013e63cd77b7437911ebd1a0f9e202ab7eaa825976137f54b47c74c8899bede1865e9615f5baf7ff4ae482b32730e9fe400cc0fec20d22605e8d9c60d67321c69d4296edadf9cb0b6c39e4c07468e1446ee036674dc7424892c83d5fd5d0f5ff92024fe158c94ca58a729726a58a2f1c78ab663ca085ed8b7d08d73cff5f6c907981564ef95bd2095ec99a36b4ba68c6813a1a278fdd1aa87d716c15dddc3c33737216702dcc25b92a7d4363e5d825d5d5922eb2062facf8ce7a14e7eae69a44abf093b0fffa3ac221ed9981f04ba2ebaa24584035ae18ee4c3eb04d987444b7b914598973c055985d79aafd4d2b42d5e5f4c3f511a0aa63f25fbed47e2544bb4a2c0400070fef9f01812710cfaed3664d26f02467c2106fc7111d48e366e7fee9186a2c5b822f36b6eb060a46c9525771c9ef65b185029e36899ff82f5e60e164690b511927e1b4bf2cf693f402ca192ed3aa6d065a4805dd3d0e32cd40994e4a5a4a8201f44007f5859114f0e76e5a2dd47cec0c8aab7ef4fbae5d6ccb22881e47901f54ec9aca46bf10b6a8c6985862d91cba692f67ffe0bd830fbb931321c3f8da6dc72fee4c6122b0697fe01ead8313523cf8fdb87ed2f6f274d5a35d973a5d0fa63e9c124e1b9ba5ecd93fca23683224cb9582fbd01d6d4b7df3668f39f8f272c7c47c82c6ee78951a09232be301bf981030035a3b5e6d8faef0e9cac05e756932ed743f4db15bb614332d5c77308d38955ee7b9f86164ea7785a974d14cd68f2c2d046660aac4beb450d651e3392a0d354c9d8953b85c009c849b8b4aba599cadb6cc936deb54e7aa98695d2fc3a30c45bd7eabbfc5bb68a034587ad8a337b4cde3c30ad5a8804d9033d730c061cbb037c97ca5f3c769fc0321f75178d4f7f1fb7979c39bbc6501e2c80176539f35f93df0ebd067834b9012f12e8ddffaf128b6336a56b7f99b8da5deb4a18441cd2f96b41648e7824792275537c38beab62d4962d43472498f0c9185515e36774cdd87be5c0b7332573c3261e320b8d99ebb05207daa073fdc362148208ccb133d7c05f6ab80603d69dd2820007bed019084e520d397a793fb7239b3621342b14a53b20c8511deabf92db89e5bf291b4ebf074fa2e10eaf9c7c145a2ab756da6cc353e720b61af3373aaa3d2830331a4716a22afedadef1a512f2aefece9a44696904db7334ebf4080619151724e0b39558bd046d37629472800c6b0f17034ec4c8f0d1f103e3a22c088b62638c94d1e4d2fec110997df53d02f221751e31f854183e3ffa35cb29824488a0193414c4b512da3e0c5422ce1a1ba2f2e3aa23e47ac3e73394cba94171dc8f6689be8ba473fc4f0c791aff140e4dcbf510d3001a26b6837a5a0340ddc191e56fb45e50e3dbd01b54b82a48f076c8ea0c25c783754f11695b864bedde878c83c73b760063254ceaf2c93d8859338e246c1d4421eed095e95e892360ad65b8b29189dc5b4a49bac4885177a83ae4563eb07601cbff3296f76fdb5d15c7654f7f124eb2b89ff52b9b43bf383d595f5a38d227720bb977c93388e14d4c78470a4f62958c74b2a0c8829dffa2b1f08e93e92ce4fc3b8cbd0ef5c65fcff0f6b5582f85832b5ff4a7f4ab5d2e2929d9ba69a7bc5c01fcbd4cedf7754ccf9db0b8bb363d1776fc9afbc3f1ae1e745147a4216c2c3811cf66c8ac18fcb4a16d529764f9941083415354ee78901d57d0f05b9cc6490895d5e30568932a821ed09a53855e579b26768c667f70746f114868efdf9f94786b9e0e0b61e366142b2499fa7208ed5a1b8c43a15e74844e5323964c50b2bae30a30816ba02e475e2869ffe9877c931ef3dddab795d5a7594735d934691f40dffaa7a8be0c940c1d2bfe7d5776bbd422c0f7b8ea84b8b146dffa412caa58725564df85e1d1aac2ebff4b42961415c0f43eb9e85bd7ee7a2f238702ee1d87cfa45196d6b5eac2129ac49990594756e128e2ad259249c724716017c851f7aa1ce44d699d334d97f73247d22221d59fb936e4e0187b7e0700d1eb1ceaa239effa730717b389d383bb3ac636e28b14cf42a1a44806d9f2fb86fb75eccfc94b5b4fc3877091a0f4da36e05fb43ea17fdaa075213b4a0c6d3cee14ec94428d7e11e6af1d0f23b8ef46200ed5ea378a6386820cf3e9fc175184aa6ad0893e4ba86cc86f3ab558a2dee907eabaddeecf394f85cfc254c76fa05b9e9b05848ff3452c307c640d634545e74485e0b1529d885a25141caae4b8023168829efc83a533d58ab5f965ca102a1d897dd9d5e73b7ca6db8ea4d18579de5efcef670a3a37d298b83e9bf7871a609bc9aef57ac39840c6ae0b242b422b02890274a3343f7d24a38c3bed1e8a11068260dab2c105525eae63f75055aa71a6d9a06492afedc6fc80cb7c3a3d39d3e56d6542f4bc7056c02c9b959bd6eec1e7cc977358ff3b733865cfeb71575b7628e04a226804636b8866641a9c55562697dc648f1a7fc4e0fd721d01bbf6238c2163de243ebdfd7b94e5899d9ff9fc247e963a7629341b41489047c1c966b133431b38a0b3bdc4e56cb9a5a7403ad198e2b4addf85358503786d16297b36feade215aae678fd66c9e78e4e821ed5fedd5bbd57e065b97c1c2d0e978ccac6550f28bb6f1d5a012a7db441d4e2665f6d394f633a6aece33947c1ef2a544cd5f18c6831672a2b229bca4efc2cfcef6b312168ba8567fcb65b1765eb9e63eca3eb8e947a4ffa903c51389273e3affd0139a93f5d02d552653d09a0da9034469b7d7f85598c9587371aa9d2d70e200b3f43e6b60b333e977853c0338731409fc37a2bf85fb4848a3ca87e7ff8d5996621ef3f273ea4fedd04e713aa44a959aff48c3eea379699f0f4ea9534243cb6d7afe5d7eb35e968943ad60098f54240d0e4380d53b4d3ba5a33825db8cbd04a8fa8a30d53ff66fbc636da7d3e2b788460aa61067d43992fcd6b711b6905fe229b3e223346b361d4a5a02931156ccde7b782d72b5fb9f4efe5fe4f1008c3e4f651939453d4e438869cc4b778978dd4b7fbb9a95813a6b2a0e54ab2aee31466708bc874b201014f9c8f4fa5a2bcfbf15a9a8bfd1820268a613ad858880aefd80a77623d27ef3190483a427619427dc42b46d7c0e1c681c184b0618487689b17c742844d02d194dc7c25993c376d7b857f6567919405a254c1d4300f2edeca9cb46e711feef9fd28de3353de71072e70e3af10fad5f0b544b6e66e59891fdf5f25774002232a02f9f3c3292ba679dbc97dd4c8b28d8deab0290569425da3c061a9d16b7fea661d188686a803daea0a14d92173b197900f3b9f4b5ae241d9e309b22f14b62fb7e560b9dc34516d69cfce9246a59bfd2e34141f43ca2aa3ebbb44328025d7d65fab758baf06b92be12b1aef01a3fb242a7abb35d155fd517d0b8a8e3d4784c7f355943aa6087675524bbdd202025d2ed799c0cb70c97f5bd7ef7dbc55145868b702b0546c3960f09962fca741bc09b41b136aa04b5ad145950e96b6cb221dd61a7f498a51295e2be71aae4eb871b4a49dea7fa22d0f7df215e45ab29eb2b59a14d72fb522f7a072ac1803e9e5861d8451faa22c4eb68ee01779dbcb6b4121b3ae6372084dc1b674b96d08e55190e264a59e68f8ded75d5b59e9ad8923d99f8e736e0e8252d4ae21ef2d33ae3caebada1868b2a69926f54d6c5645c4bdd0a389f4951a341c125cdde70b377a3d265a6abd2b494ddf81d664060e1dc9cefbd70d71238770388e5f8ae16bc0bf990ab20c8d1476118e2b1fae7a04985e2c7bb15e24acc6ccedf4932b682ef060c4bb453aa2e4e837c96f60f1ef75209736660f2fb7f9601342714d90d40c92c1d305bec5cc5fda462fd8ddf4bfcf17008066ad1bdd0163ac83c6c408023e213560ee3307199f760985962a78a801aa043fc57cd2ecdf84be139b7199771a3231abfebe48d56a2a380ed29860dc4e4c5ffac28783a18695f672cb37b2d26bde2be3e11a58663fb4469578a7da5cf9978f877fca7e5dd81333188ec5067452ed10d23cc57dbbf5325420124597f65eb7e6f97bd244fff5004e79f1e42f952c0d42564cc8252e6f0a2573a2d0da16190fe3af0fe8a6657a3782e339b41110add4641a3fe816ff38447236f6287d579b2685c4287ff4cd253f69236aaa24d705e7d8c8b1d9ee722d8f443ae8a1b38d0785a7ba4be6eb5e8066fa21c9e2629b479d3684a5fe61edf6fe6c8373eced0f3105f8948c7e7d7bb54ff9008238d960b9df2d996c068576a48a9b901ea170031b03fb12cda15dd67ce8c0b56bdc89fce91a9aa0f2d2f3defeadb9b3400fd93b7652fe8e6ba581e79212e7b64ab0ca1cd9d7c48bf593733749d71e4ee214023442cc6ea784536163fcc92090370f378f48a742f27fb3cb34172c466d9d008d4f29cb8c63d430d46cf60594ca5c1e29564ba31ad90dd79d7bf02715f734f94f4aa43e32cda03af7a4f4f1a194d6cec0bb8e195b0b86c49537a83e86ec663cdf3814a96cedcffce41701ba4a97ca0ab38a50b453a414e7edcdc192165833ad3f0d8214c20f4b2d8bd9c844aa19bc2803eb012994752ff50f5eef63b4b1eb5c83c016fcac7c0973abe29cbc98fcadc5655807c952868abf933201ce4adf80ebd929771b0e6b4fb7f145fd5f743ee29c0e21c624cd655d8e04969db0053d7e0a398f79ff2aec2df2d6bebaf6f24ace28de90b8cc7b23a83d715d35b0f53dda1b85bd0d90e1bde5fc0a1219f2336bd1fe4b8ca3a88fb3e83e90bb7690774437debdec1db79beaebdc9d8b75c2335c63675fb47e3dc802ded4ad22665d3150134ef456405182526497c16e9b71f3a5e7da37575933db0e18c7e3e04c3901f7287fee71bbe7e28a59afbcdc36df666333c547319881ab978da1198cde70c7c69466fedb673744dcabfa9a2d114d9322bedb23a137db9666b3f9ec3074846bdedd32e42d0788160f5d7b1931a4579b5bf2a425cb7accc107f29734ddf75a10b94c369ec620fd8a3e1c4f9a59ed77dcbbd0cb1e8b7ce23c8122ca611f5fba97b87e2f3bcfcbe6b91ab5a01b9363504a05085206e7d57d9715d09155a95d9a0d29d4f14898a47dd1d63bfec66d710974c8524116b4a76d2572046736885a5ef5c6b40bda0c2409e0c53d13b5a8806e0479390c3e5ed1a76c6a08537056e701266cc5dc5b931bf63301c1f1a93d65550469b1f988c7bcbda4877ee6ca79f0e200a3176b4de1273d3dfb2757be2448aa9c7b8cecfdb46655eb193787a42fb2cac926bce611d1354e6d67cc4eb91f2d70ce31fc9d8b16683baf57960fb0e1f1933e0aed081fa8e14f7acc9f1862442bc5754bf7fc6ea98bbcc1f1ba115c53e8d0cbcdd3798983ba7ba57602892791229c677dfdabcca7b94156030f46245d13e7d8e98b5b06c9ac1572dcbc570091a922a1d254f39358fccdf04aa90d367c1cbc4cad9f118b92c86d7d0ca952279c12e505c4539fa1307d6aa0e066429f36e05cf8fcfd9d8afe50131c84ba46d8d0e4f65b08b2af929eeb869645624828ccce96f8d5ba44ac27a151077256619e46b0211f71c711fe5f5478c164708ce42b9166908f12802624389d1e9674af64c963ad50426828e88a89383c4a42d05219b95e20095db5c59fb7ae9999c4c443c70f29026475d47767de4cb9469341c4249bd3168fbe9e489f0087d2dcbae9580590faa8445d808ff8509ce7eb5f08dc631cbbdd2c5036961185f4ef0873dcaac77a105763af581d62e916dd60add34a28aaa12b47d5cb7fad8c2d07407f643743ac9b398a192b0f593bee4a9b2f9af766ee9aab90df827c3316d5565a2d3414e8c3a67915d1217b5941360f6de7f1ed8537a8ecee78c178625e99bd442c4eaefa1d43c22799828f8279f814189735a45620640b7b29974098d4dc978b561fd9d9cd8b3e642c75defa2ad8127a8eb3b57ca6ed3fb3f5a94f178c3d4e085305944b27bfa1a80a5405a504ce4119eb748b9c614f4a0e5e38fb0b6709f63c41995e70b9ae74807d6f89ec66762dad42bd3c36a46b30647884aeb83ea8cb35f40825ae66a2dc8bb507ce512fb9df98c37e951b3df7cd4b441d9aa656c798f8ffd3890afa8575b1c61f45f086cf94cec2117d528ef2ede5f34128c3c2b51817ea0d8457e0b6fd3ef57f2f0d84a6849785c8dee40c93a96dea9d52310759536556eebdf9df03f9f9919c407b3ed431689d6c96af0225e9b395f39394c02c73f6e5a18aae77b8ae45e42d9d141752e4c896097e86d31dd876eecae655ad2e1892f734d162dc042ee221fdd815d3982ef69c3147b11490d58b1ed35a9589d0a779f17b2169d645f214f39ae0318784ff16c59b8fd34bd4772ce167850b45351685ae12ae25a39eea0ea5176fc3f67625564814ea68ce2560ba8137feb856c054205b643dc31898fa5109db7ff12276d0e3764c50ba82590e62962ed9e525a969e32e2062973d81e92d0feb7cc8666d48fa7fd6baeafb4497cc389965d4db15376a45b731beba6834c911ed561d945c95e9d46bb748faae944d462ae2e6f1ec1a01fca3c967235649d940fe39ccefa58bdccf1d336a409edbe81542fa46c69fe517412037533328514d992d43d30c00989f49d2a631388febb20d0f5f5966ae6864206692e8249c21e8c7da0de57e330a197bd394543727374f83bd9b727885f7c0381d3fe9d0df83d1c0e8d483db8159edd8852e07391efdace96dcfe164384de000429aa3db562087081fcebc538e30a6e656b036695a3bded648ccb4775a11d17c9dba27a12d2a814b56b437c29000bbf1bf6f852ad54f1272da6e688721b936cb2859141d4761312aad781a1c9cb97ee29299ab75a6fcdcc937dcf324ddd82bed5abb033d772062c7eaf97197c6d7208f08812e9b2a133a201a6fa2f91bbcbe8b5b8cf0308548ed69207535421ed5f7c8d5c67c23fb3b0cd861115d77441287d1e477e6c87a96023e64261fad13076750a535ab2f0c0fda029314f75ce4faa0db3b12a83903dcd223d225726b924b60385a0f8366859b711d59fa3456e7bafad18c7168f8eef14bb0e36c6720cfbbac0019951e0376cbdae97e7bd9a182e969c83aa40f3f523427e42a527bdbf9bd6195233fa4604ae3c93511251b185a3a3d6f4ac2f455bdce20838c368aa7cf3670f724774e1c4e7d3462b0e75aa347d506f1d7e95cadd021f91bc72d3b4694388c3408767b9eb480c7a517ab0f5d15f728f7f93c998434d7c3cd640ebe8a6d20cc10fce42e632e3b185090e8552f67211e57d4205c060e9418ebdecf6ad2fe0e45bb51a5fc99fac3229ad420ba64c13cac74bbf1ae0a727f358bb30efee58ffb260c9407033c89304b1eb460b77486ddce96de26d0b8141c68c3f09e7cd9b8ea7bc994fadc2c7fbd87dfe68b78777d8e260d326ce7611e9fa3da4b3bf0944502a46c0cdbe5f3aca94a9c5fe330595b44b3f9a5ee992748850c3b4aa1c22cc2134c7a1e2cf29e2de2798a1a987ff91738371587e085e10e68c72c40d1db67a74b97860787e6c6b6ea51e7864b851d4e90b17696491650485964c0f29fe8ed87c7ec9288a7494dcd6824266fb2b8bbdc69e300cf4e5d59483bcfddb7e008eea92846699e4f7aa62e92cd71cb046123462e7a2f28b0e71370479bffb2e69d60b6f7b69aceef0c04abb9f0a2f5165e854c18849b9b6d11bb1631c7b337d9ad502a07c87a91e0deafd898317fa13736acfc6cc54e9be123627768eb2c20d75edf0f8c89d0f265a4de5bc722b6dcb62cdef1d855fd5225fe521ee5a826e2acfbb0cad2609639fad95b69c48d29c9a9c78e2fd1dbc0549b2bae9fb97033de01ab4d1211b73f579f65d110699bd9e7e4e3bd03cc5f93264302645a615b124ccd40a54712b20e886466a489ea104db2cd30ce79b40cf3d30f4604171baeea8d33b44b7b3c2a387476a404636c1e774be89c80e7dbf42df1b76d2cfc6d7724480a1b584ed48dd82f880a50b16846ea505eacb55fe6758b06a89b4bd34a129f7696194d3c260adf8da37ffca97c86bd6191c6390e2f8d6993fdea2747d5ec4082798f6ed41a1f6a9cce9585f22ee2d21c596c46a965bbbc4c9abd5763cb4fd9732f67b626dd63bd4dfa04fd454ad803766b7e31b6bcf96e984d65e14769db74536a25e4b4502cf5dd1bc33cc93e0b757213fe7917385dc11c4b7f5b6aca7d0bcb3605cbbb5c2a69da947a917d81b58a0e4719c3ebfaecc8cf5309654260f1ea794c5f3e74eeccbff5111f2e85cf8024be51425efaa751fa91a5e017b99187e089b80f27836d9d16cacc8dd129f4322ab8509cb33a92369be225044c14ce048842a1b6d1e95e288b44086c63f9104627ffe1dc3452faf19bd4a885f446b93cb1d2a8feacf481ec1811ee177f53df2525e37ae2e5ec021e545c17d0f7e6d309399160e44baa469d2ab3c4d0e2e77d8bd918176cde626445f24176ec89a39776bd4953ab13ff10646b507fe73596fd80f4364be240741eb71c45908078e560f77e21f39ac56ee83a75bf50d31de45574d8e21a09b306d91f07fbe684a1c1dba13b4cf6b2caed563d1e409904a74a106e88b19eed7303b47d05bfc528ea8ce8c1fdea6949aaab4bf48a9a22fdcd555b6ad6ffd76034aaf3cdaf72f376fbcc4c44e17711dc76d6e0cef585feb4943272df9153e9d3e226ca12ff197f33a2fc3a1efe0ce266c42f8f194934b382c6030c437a95fcfa6e12038f1f53f3d23db220ab1852f8a7cf8af950d1b536f9b21a3e5a7a14ed371a9352c1da1b73006b9bcf57e80a90543deabb8af8ed656eec174b234ff1d721d5fc79f14420e092a37e37d024feb746190faaf5e03f103f37bf3a88712df2315b29081e20d0c8456b7a068b0b342c36478d84b64bdb83c98632222cd0271a88086fdf6dfa473b4cf30c342954a65a4bd10752a3bba461939986f93a4418dd8c1cb74ea5829521c90b6c00172f96531e276bc0f1f345258091d04534643ec0871cac561f2bad26aa4eef8ec5e57e36782a7b2c652086e351c93ed3e730f2c3974a67e6c0555c76e2e5fc125f593e042caa6ab1bbb26480a23b6b7b3b1cad8cbdeffef47cea5d7fcb3c6ad1c118ff083480754e95f879101bd77a704fdfddbcf73c3a3be3a9e2f526913b6e1ddbaf5577e5db76c308eb7d8836bdf6f378e7a8cba734bd14c4c162feb71ab35605c976c31d7e7167f42dc63524d1008b15f65ad13b3765c46539878fed00a0d8a0a4098b706cefd01c1d2fe49e1ce0a1bde2eec02d8e6b9ee4b776d29f48b038e7d941caa2c460f6df5f7a3b19875f949993f50e81d60110d5e3f118ecc3091d4ded7c5ef50c855ac5c6a6d6dd9c0cdf4df6980ba1311b53c2417a3c965f546f9f3e5dde7bfebf2246e9f6886cc7e6345a8a2490fdeea3f0bbc75279c5c4c10c23181f77b35abe9e564e580cb5fe39ac3c16863eba173eee932d9909382c8f1cd0699f405e441e32b6ba67d86cf6373dba82f4f686c0d3b635585d9192d9031ad3d686a0c57b53d6ce281d29eec26dddc429c35de1c0fce682a770c7314421ad60da2c3d6ddd65687a89247b2a751519d62136b6b671cf1727a24b3233fe620db85923b0b33530a9f45c5c80cbe58af29c590789d5ab2bbe43c057d49e2722c029cacb6109983c91f349375c2085b2044e8913bf9f30bcf25e5554501aed1ae20d08a1826a7490c99cf6db8700d8969f8366c7e5f2b4df617fdd75b70641680e009448a0a0cad759b246b26a74c96b10f547ff103af99b3e8594126a95544ab0aadbe5dbea633a7d6f138786627ad2ce973cdc9239230c042758cfec2d0fa496ee9cbe1a3d4e4c7a8be2ae3713fec9ead8f36b30b5540a477bb7d40c5c4c511f6d091dcd7c2daa4f915f1a06088d1f3a9f8c87ae7b41ade7512886f7c0311fb8dd8dd1749149d7372f1781d40ad684ed67326270a7a00498a7fb65d23a9918f87d537b01d7cde04c99be7e97075b92d9909339e7504a3c1e42e28dcbc7be4c8841d8488fc3339174d9170e3cb82d57cd1f57af4a05d616bdfd6441082712f358d99c1739f88246fdbe0108a7a9c3c74e4f1f7415b8adcf354640396ae90e6b3f03f03e91fa8b5ae2993bb2812731afba2d81063fedd5b91581b0d8f8e4289b48c6562787189c8ec6f04241dd267aef7a5e53809acfea48d2c10ffc20d0198858eb895f7b204ea8b2fa2ddebaf39acd33f1abfebbc7c7700a1638b8218273e2768108f6b05dd68361d50baf8cc095fdc60aa5b5eb7009bdb7ded0fad1db5ebf969b513bb16a19cd1f0384ca5a7068ef42abd48ca3378f6fe51aaf8503f7da06c61900fdee3d94c9cc830929d800c8e8fda8761a3a19f9174e9062ea8dad8aa7e336b38a25c1334c1a3d2da4843b96303d3194d8732b71b1e3b87bc2e30f1ed984fa777ed5381173b9a282155b2e94217e5a33950aa2eaf856312e5ab81f0ecb9478da42ef40410b4eb6626d0d378ac457f394a9358a76079926af5ca4a26f6a946acaae52dda490317aa1997a06932a05e2f42123e11207862681b7af026dfb4573682329cce06ab60e223e9d9dd1f33732ce849ece5becf6a289565e880ce83379f1d0f6c20e809d42f4e15ae0cc21de781f1d496d41a3a9fa9d334b4a0a4c9d83412b0468e6e3ded3f1197332455d58fd4d7c905d8be70d02c37c24bdf7747cdc71901c39e3848a3ebea664d941f653512041d058178b6d8dbd7ad82b83fd0fae26c789a8fd5996d0587b6119ee46da69f5a068c58073d235ec2f5c58822081b589608e06c4c39df5e31ee083b483295d9c67c6d2bc015bf1619fde3383dd909d47171f3d11a0a8d9e98aba2c7c77db97d7b20c34fad82b87cfc3e7b2a52eb9c1b4a9b628dfef97e3ea84717aa6a7a3e2015f90f9eabe5f47e551209654c9e2f330420e6c68ef96f2cadeb15c85a91f2d65f39a5a56893d1ef4fd1559a5e3dbda91224e3299a9458cb5b266d90ae298da86e7f7a58ab14b54f3b0478e238095e1e585e423fad79efbbd65f50a16ed2ab7ca30b2b80053afb4e0b85d26727cf1010f82ce4aa15a46e6540f91092994c703bd995534234b020cebddcdbf9c756e5d96ac0fccad2ccf82482b941a53f17ae9207fcedeb765fcf34976181bfaa02f2891b0b99392203cd37e9a6252da73bdaae25f4febd74c887cc851ab04f2b3764ebd638511f6666de6005b54c80039966781144311b8979dd0f24db84f7cbd0d8add8c655592c401f763f8f54c656f40913d318cabe600aa870b8dd80c141717f5ea20430a76a237ffc8dae276f21ea1a5c9f7af3e656ad77affe1bcbd0ab02e2869ce8f7d573574e7d01872dad03b437e2a52e831f9ab448984fc4752624e566bf3951c702ebadf2c6e3473d029449eac8c36852d74c785197ef5a9a7fa5e9cf8b3ba7db3fb9dddf183c4a8927d39903fa930f6f5726cadaa3b92f0d9641a5f49b64dfe910a22fed8793840c3921222d9b74ecfa20bf9c7638dca5f0c9596e0f633cf33bcf3999d495852765f80863e5c8d8dcbc4b8e51fe19faf12501bab21e77460afbc0926b32286a731fbd618a7d592de658b0819b43569bed311da5c991496df281af67161f29a41c96d1d82cce4d020ebe8f6a90600a48b4130193d791a89328e6d73f94431956a1b80997b81b6d6ae7d4d24a156f0b524e8f5cca7c053d8fe6f8e40782e3f365671a8412d14c83ddb1613d397eedfeba2ead38e4636004fcd9eef7bd6ea44f375a5a134991981d9ae1c996286c6e1bae579d028658d8233a48a31187515d41d6f0a689ad2ae10568175b8495ba6a91906ca1815766a2d14a0d2c453ef362db99df6e85baa97f9765e8e7d9d307189a3e8b297bce972fdeca6c29f24b035d9fb5c3630072b740961ee5c21a0434a2e2a4f39c255ab139257190bd888d381977f121885aba5f002dbbf75e8dcb34679fd13eadb7971fc9df894b04078aa11b1fcc6cb9e993b4b97947c3dc6433be1aeb36396653a04f1106dc304da1bc4ea5d87691b9168a8f53e7a4482af038f6080287efe671e129e5b27c78e6fefeb622089f88a20bca76c785066e18bad9e6b1a8c988763df892450a26be7a22353816835a8a8c8e8762e05e0646e2897eef21b089db777319d28e32ec4bd56475202d56bc8ec067f4b5c76fa4086db3a878765dc465d639de964d493e7eaa10aa87a4a735e8f337900e73c4bf95fb5d44b388cf8ec2147453d0ffac18e8d17d79431dce003edeb1f1b442850ad0e3681849f3944b78a7b5396e780f3e3528152c1e0c756a0f2ec058a3a6a6c7bae562af81562220f2162f8029a8f57d750eb6203cf84a9914070111753f58689e3e8714d74cf9915924d33cbef19db6f683292a46d06b07f732e3a1c28cbf5a70cf00cd364acf65878d923aff225f299bbfdf2543163a8c39d7ba83b082320dbbd86f9bcf28229aa9b087fb6d5c00d70bc20b095c34ec089023846c39337cae82b6952074321293ed1145778ac48fd2c91c439928547a039ade40c18ebaa3d16da62982cd9d9f97cf98174f6b73d7500bceeb7e27c2fc5f647ac1712e916053285b19c3c3dfac0e0205e3d37370a522a3c7dee376be07be8e07375ffaf769b751e63afc6420d5f1bcdca1a34fd599f84c04bd26a6b3a5a6f51690905f21bea511637e55bcf2ad4b6946ec16bce4721bea9f72b36627b89bfdb6f39dda3c0a1e2b0526191856596397a789f61ddd22594e6f36daa2737cf0efc08329abd2e73e36cc914476f78e8878c904b38739c190bbec797d7dcc8e850bf1f56a091ecbaf28ea4114a2f8903b14bbdc57d815569826ad5d17adc620073e0234c86aab3cf6a02bdf1ad792e08a053bba2af8a34f44e19c580761c1fa0b232b37d4590c0c2fca13e37d7d2ead70dbd8e576c4da9d380f634f39f19383bfc476221381e6a8e0f93e45ecb49e048b303995f833677cb5a37a963526166c52710e522d5eaa2aa5c7f46b43f899cab38a4872a8bdb62e4af9dd24b3c9f5257db79068b11effd444c24a0e13bf34fbc81e08896af21ef74366d7942b04c9610005479e9f5e0eff8d20ec8c5fb1ebe95c8834faf723d36c6c1f554965bd421e0787c701e58f2252c5b3e05584333d012c26c3263a23ef8c26ec5d98f9f6977096bf74ed7c68ad6f7fd98700ceb404930e3cd744fe47fc465fd768b08539c9a5a234cdd4e8d2dde89abf264534d563d9e249bbb11cdb0471f5957eb063f185e44d1166ed96c57e9f5d0565f5fcd1c88679824d0bbfff493e97db5571c29f97f20b83cda8759dbc81c283925d922ce4f057d1f6f84ef35c4ec732d91eb68753a3dfe2bb6134d1213afd9cdeb029437886d42ce331f169564a410470ab1c1c85e17f3e710e656b120e8734b238322082c29f2d897d2ab2874b9fd98da9778dd528ff1a744608b98f1cf91ffccab9003bc68ae6f52273fda7f80f47a22f2088c49d7b3607aa9fe5024ccdb0e3eafd7bc2a2fc0985e35615667e9919f4f26896547846a9a933a912fb89a0164b5520b9bbfe4403cec4694925481d4679471a867845c83957a307e3cb562fab5366c0b4a8da1ff6156f151d373be684ea509e2cbafd9f2cc5f737220b8c25fc04d8dc732887d6aad8923a4829a8cc039ad3da8d63eaf92b0e7a368e5b70b8480ccf4ca4615eea4f18c8536dc92e78629f1808b5851ad70bd0aee110872c35eb479860fdf1883f03c0707d07afc69d3386b122f8e3a7fbb498ae216a797403d64ce44bd593295ba0be6cb39b2f40a5dbc9a2c90913a7592ee1197b0dd6a8d0b76041955190fcb3940357aceb75c4b77f565b852fb2dd25156b77267fbc9ea10fed437b9a980c2e3f7523c019e44e7facb74e080c32affebb35074cb9fb58658905101a30c93d09d6b476cc2b3607e08e2192e3f4917d5ac365674b36920b5cd7eeccf09cb3e0b37beb9ba96b3dc93d4bd732b3b47d8a68b71e271da4e77d4131343d778487b95c8a3727c49fd54d53f55947676021c9bd9a1a318b8d6d69fd1c14a73cb72e5f717fd726f002d1d0cb8910a5ce4215b4d69445fd483052df29684415a607749890ae3816af32b3763901b3de4906e8dd9d86610b79145f22695c0065417a7fb3d41576223af9ba04d68238ce7a2a99752ed698ed9111a69ffd93ef28238d7f206ce27a374c5153e30e3239c7ababbd0c93f845e6242e86bc1441732fdd78bb929b2fd65e351c1ae3936cd12ac44f26ef89f6bc5a568a8dcde2ed75442d97c2d89c7f2d3d7651b3508f8cc110b35313f8fb3abb62eb5fda17ee986c84f52578ad05784252bae5c63cde3e1d32493ff75bed5304ac08ef11b6ca90eb6ed4edc6fca1a5747b859bfaff454900d6b99bb5d18f6b719a8babf5fd9ceffd7f45785e73525c35c6f291f3dbb62fb3bb7424ea7f4dcf176c4cd5696d6b289a33abe2cf8840d7ceb9e85ff045f226eddfe1e2e024987bc96c63933e11836e96d612521bb67f6bfba44b69abc524b2bd4195d5aaac5dd739143868202749f91b24b1ffb1534291a7933e1bee03d26df81d55d03fbf58a38d757bcd5b0c79713e6808f75844ffdd474e3b189b51d594e5a97b166f048ddc2bf65f41d095206c0718d51efdc1a3d7539d9da55411e460a58c7c5d5f9bce044a8b5cd131faed09c4271010606d22b720dd53d27e409dbd70b96edc987c97ebaa6d47e7fcf03b86eff3525565426b99309963883113fa61f99a05f447249d27ef3e77483c8aa99de6132f0b4bd1354e232525654b2925e40bdad3aa0f40e16b6804ced1309e05227d6e167f7e1d771c9b53a100f0307b2134d975c546d9ad3dd149feace556c606ef254a486954289b94ffbb24fd17e5da6dca113a29bf9d076a9b0ca74929a77282441309d9db6a717dbcbf43bae13307ef36db97d2638775056dca6505d79ee2c806e8c7305455528fef073a40f52abbe52c77f3c7fe2d52c587a7687cbbb88a73a0a5bc4c23f0a1bee95e28f77847b32586c85f0f50749fc3f928a4c9c055add7e7e4969509c89259b5d3755cc778770654f1d755bbe4df9e3cacdb493c0a8f995debb99a6d6d7af20041761f2ac9ad73906830aff1661dee0d8fabe9b06b007a26a4ef363fea77382fbabdf526a6edb2b81c4b76696abc15c06ca685b1ac06907356fc8963eb120a3885a6f9e160a5478044ee759b7a3eccc4991d5aab2c31167b03f9ebfe0d27aeb9543338a6071bcaeb832f49d6ec21f96307699ed942de3866d4d192fe908dfcc58956cfbb1aca52cb3bd71ceb603cc548937520db49bfc06a587091dbb4339fbfa502c6b60699eb144cf945052149a2e6a80cb8a093d9ddea0c8adb57d9f488dfed50e90bbedec07f83c4e03f765e17031b491a8020a669b4a666de98d805ccd904c63ca20eac8e535e43d1a4de8d7d45f7a9a4515170190c9bd4f1355a4f0abbf51bc2e325c57f92d631047f12730c2a1733d0e5219ece261a4bab143cd22b6e94d4152978330d71cc56e8f08a8ccba59b588a03e92310b91be17fc8a5ae6b61f13fc19a2e929f9c0027cd004d16eda7e6155b8dc3e9325216a8e18caadc8d8c60521985526833f088830f1676b10ba620eef24983cc7725b098673e747b2260b7bf0caf1b9a8987e54bd53d885a2ffcf55f1ecd984e3cb50bc8f20a848896555dd4188410fa4e2f6110b0928adc6727e6cf3c26cf1d3a5dd6349e92a0db64ebabdd8955b21b0d4583067c40529b9cfa8d02116fdb9afa9428488b303751f2ee05cfdbd3c37e1605ad9a5b8d81a7fe842ef460221927374afbdaec4500a16531ade432cc11695611f7a8f88d5ade1f75dcba704a4500eeb9336be16b83a7fc5d8af7b70fcf89a03b0551606ccf71fbd03c2c363d7575a2f5c95794a464f463f9b4d2b3de66216a21319a68ab020174cdc45c591ee3fc3f30fd5a5d898935bf04c34a132f3284ec620de23436920556b06d560527de0484bf2f4f2cb674e43591b4a6252f9a56c562cf2a393c1dee03d6d5590ee57e7c0f6272d007632c83e1e007b3a9870c66487fd9847b93f2eeac709838f4ac76baf4c141970b850ade22e6dac5e6f5100f2273d5dd65e8f487582b7c0ec1cc6c3af799609d08349f5abdbcff2164101e38e2b52f23ebb69dfdd4afdc4b548912aed46b36103e24686c6dc950928d53d23ddf03423b3b3be659249bf9f2ed146436ee999c63440cc8fd099b23e2822352cf79f81ed0f618189711b50e055020537806aa9d9883cf7a3bd51adae0d06019a3c8e452133cd3d23cafa66a19127c285ffb94cdac73d6a01e2a32ae4d8643c9f12e4f988da2d3713793356c45b046929804714859b031fd9294ec49aa5be63ab29c728b8aa25d3cdc230f03b0e934254986b130ae99733da66570621623880d2d249969a555d4eb5cafa1cc245714a8741330eef6af7c451a2970e84d901af3c8f53fd9c4d835afa0ddc6c3a9d28ccfcc6417c954ffff951270ae6c3961a3aa1113aa263d44afe6d9ccb22004be4f9eaa3e93f5730b8e2f086a072d58bcc3247697f9dc1a917a88a5d115a5c4bf94f60e77ba93c459a17f746de2450d6a087310a0672d2bd234c6a564179be66ad48ec2776c3f73fe3e7c1f8d4473adef2e7d11745fb91a1d6945f5363d1c80e6bde73541d13749a290f0f3ff5a7174fb2302f0cf108077293e2e4b33b2c3c50c6a6fda8d44dd4355f241fcbcf7c808107504d5830bc85e2b81203317c8552105b7328f04aab000b2224af74d83f761948bf9659f4ac33359ac47bfb5db4c756fc9c170ab0a47882dd0916feb3ac86e65c7bac9bcf6720cf2c4a64687292de90832e6612ef1b1d8b3b4b50d38b7e53b09acb81275495c3f69086c67bc8abdf51b4dfaffa539425ed194566b1cb370385458551a4999bccd5aa44bf678eba6b0e9a9389d560c8f4d80ac303fca93d2f0b5dc3f7697d76459de8e4e138d4c1db1001a63717bc9ad74d62be9a3fec3abef89e0eb15235b35405fcfaee994dd2af37cf315b79d8b8ee8a92113636e17263778440b112fb9d635f82f287ad770d898acf424de55319d976831d81407bc76b5ba81ef8e0a0f6914ad9fc7aba102956cc3357010c0a67ef82a3d5b419b5a9727fa8d89d28fdbeb7de5ff2f3a028a20c247796c72a1ba7af979b6a7aa88cf9417e86d3e81c4ec99d3a7909c02231d21b4bef18e43658535701b4cefd2d9f3c48796b8054954252962443a6414b4acd6db30cbefc91f09c67a3a4139db75a2b91812d69ea03a1b756155dfc323bbae289d93e462172bc2aab689052b769d364db3d45f0b23a39f76514139de19a34e2b4833ad9ef4fe15f0ded11cfc1f90ce43a42e288be5612761516209aa7bd461a8d5ed53b8dab2a5a176e87bf9d5642572d61b1adf50b96b8c4f94603c5787ecb67d502fe6610e94705d33c52c0c1e0dad2cd1199666ca9f71a60d6d57945553e6b59f5552c69a309fd36e5ee34a207c43afc25ffa6ffabf85d84b8fea448ed7158e25964d76c2ca0fff0bcad5c7f6355ee2a43ae69ef4e810f362023cbde51e2aa8d1a0aca57ee5a4ce4ab91373c0f91a37b076db53f5f5232e8f685f6baa70a973820ae676c7099dcfaf14fde2f888612fa780fbb7c79b09c56bcfa4523b15e668a1e17e6d951a64c8e4843e7d328e6b325b8b39b359e445b9732b36fd2685eff8b28868568f7e76c6913e1524dfca8493464b5b4a081ab206cb7a921b65d40034cebd2793d5e8f431cf50ef1fcb220d037e2e4aa61ffd1dfdad736fdaf7407c575e6d5a8d62065521822d05534eb9bae42fe0c0c9b6b4a24880046949f84da147526831dd52b3868e644ad12610e8acb2925fef605e2f6c2ca61ac469c3095e77a8c8d43c0272a75b3754a6bee75631750dfde0095b1136e421243bea82caa256e9c931a186eeac93ba33c1d429b4b3734eb8f7f551fdc901242b7272b70a3d232073d82dd9e258a53c0dddcb19f5a2b3321d3292f49fbbf212b41c6eb80aa3528ac4bb8144cf39a29483e8315579192fa339841cdf1e52d720e18d8e896d85c78b13f6d0cada14bfa2da02a2a95c0d485417d2c2f91d1aa8ef3ed7f66299a80d6be2cbedf441c32043b597e7ca30297cede0209602f7831ea627552e32c88960eaa7c4b07115539a3f911b65676eebbf21b833fe54247941898ffe848f9a85544af18010efce483e07d71890c6274a48e1d792af011898465553d0b910a2c6df647a9fe3b9ab306f8b3d5260437544779c658d72ed0fdb6c56d0283d62d49930d31e11440b5dd2ca27357f9b0789b6eaceb262d5e6406f64a23729ba9ed36f4a18bf49090b2af71654df605a89ec303b80cbf51760fe96af89bc77d9145d3851e0958372a3f6e647a9bb5f8ef26a6b2fa02c789d2532fb410c9299f49ad99e4e735d7621ad1c18d8e401c452642ea3856df8a5faad8345d62db66a77f8378742325061be08ea292a5b03207ca030992df309351ac1044144b8e5e3901e8e4b92c829acb834b6dab48391729ac8c541787cf043c9acfc124b50b137985a81a0c719373fad7e9638721dad1aac4953c970ee04e8811e4bdf043881a34d53f5ad09bfdd06249b1c45dc174442ec3c0383a8c0ebc642cf238c8229839e03ab3cf169e8f14907a5677144f4ee3fa612f5a0c883fcfb7fbc0c40c9d3b25b38c0a4a1e1644373eea26a6d0ad7f251bf3fdb32b7a763402f76dbf83b7f9dfbd1b32c7ccebc8eac5ba2512782758760259951a19e242b7c8d56e7597e4a63573400c1285f9dffffbbdf3e4982de2c73a6c8fd91f8ae6b58d2f06a60749af80d4c34bfb49db27c01e1dc9ec1b076a22a9d2815aabe1881071ce2c9e64332bbd42d3e07bd5f852a925e7ca59dd55435d135c83259d7f05b9813f9abaf269ca51133e34303392f3081f7d4528533450b603702c842ad5d36e0782680e6f9dc3bab0b9f6de81178ffce16fe6acd2ad667f25628ab811c0bb9bf3b734c4faacd8ac2fa905db0c90774faddc6319f60ae39bc08d2713b6d616ed01b75a77237a4819662f5a3259bfe038ed299757b11b586d7aef6e4baa2a3c65417141e65ead709c85582091adfbaac0d9c4b4822261bec84cf0381781b0d34bcba3136655f3e036d1f6c56fd0b80c507afba9e9356c03228ff7a54f03685dc5c24e17869b6fcc0d698c1467e695aae4389bfd21c3f457726cdfaa71c790caf13f9c006a32f3779bc5cd139b89da49d999e760b2d9ec6f0ba1968b616b63b86817f977bedd2286b16d4468075eea7eca16f616642d263dba888472d1c068725cccb7b211bb307a12e7a74c917aa2daaaef610229f7ca8de198f784ec5f8d8c901c807b8ebc33dfdb6105357479a4ae673773d73c12d72ebc37410968067e2fd94e48c93024ab5b72270762cf45b61392a663465a412797d694e104958f9b473dcce410a968a5da06d9399d443d38a06c0eddd357ee3443b6f66a52b583d6a2dd34e6e7806d310585190780f1bef9b7ce6b4a2a7efe9517e0f6288b5bdbb693cf99b8ea41ee5e4e1ac5d41ceffd8b5ea89cc625de590fa2f86bc18eafa385ad9c0960670932082955e0d23d4b4ee2f463fe53c550766dd1c83135d6912e68c33e54fe73391e4c0b2cfaa4c393898ff684c8905e4142c99946b26e13ac737b68df3c5a6f63eacd2ca3a3a396b2845182d33dddf8362001b57546f94997ba3db92966cbe4c95603fc655a84cfb2f5a8530a44b506f5bd18d558b80679ef4d2fe03629e5b2cafde67d8d1176c2025478825ef9f13c94df2867288da13fdb9ac5a6f44d9564089a0746ffdced4ad8eb1c880672f6114606f1b04ff72f2c21242f207293048db27ace85a8d61dec510a52526b5a8afbfadff29a428c0572c28e62cc51416e40a3cefeaca01087f29b0fbe9cd86805dec08000bd3a0832ef142c066724c34ff2fc6eaeef685c00bf3bb024ce68ae59e8662fc81559f37697123a3200f0838aced0b8bcc81aacc0fa9b573a9c3448a8fa04a22c4d4abd64964611548f812d7deb46d80628888c3a6b05e1dc9f6b9562decd531c4486d5cf42a1459de55a3ad95ba9e260809ef4db93fcf1dfae77736029646d496f0c4daa969263e6d4cae39badef7e2a98f901ca9bc17a9e0b85454e2faf3166f8282c9d111dc0fa68972695382c1c135da00a623efe50b253f5acbbfff7b7fabf4109a61481a3c885f8ba4f0106a35444fc537f435f0fb00b32b1d44b4307bf0cc855a0474ab9050ac1a97cb6a67cd6cefe45a80953915dfed370ceee50d86ffedb19b5f855c30255333d791b8d9ed74a876d65cdafcb28f07be52c1e256a09d6502928f550ddc8de05399549dd33a83ffef88177ec18855cb3779234b531fc7e31c57d0b1469ba837773652be07885c03c9d41bbdc54aef63bcb5a192553d878abbf844dc17b39f473d1d5f8b80210f201c4f69f23f34252bbe2ea7fef25a5bbe1a2b7df7c251d890d05890227bdc7c343105c29fac6767ae0a5fac9f5e9225447ca7c68099cf3cbf699e5808cdab5dba5d41c3b81a6d58867da44b5b6282b85129cc238996e78b47c9c3663272ec87f6fefce8e5d7f608816d47e648341c71c00c05b05c2f05e3002b74d5d00a54b9acd322d9e067eddd8937f10c65e4f2a372ce9e07c187d12b4a4ac2e30b8e94721306b5b543ec94520ce6055136c0c5072c3687582a269a2dff3143d199fff1cb57e5690944a2f8d9c00a51f48e1ef214e260d9745c688513973384c9b86a8ae3f261188de4bff9c1c43cc7e05023edbf0acab56831debef9303a323f12cd4599daecc9693125e27f9c38a032664827b3094d41fd48c1786d8050db1c104de042dfe8439a72e2cbc31f856734e61bd8e22d719a82f2859573a3cb85cb2af79e2c7e5839c6c0eba29df8f301ac629ae784f93ac70e8ad8e9bc47afb2a7449d2a1c4357861a19e5312213ac88f563595ca0312ac3b63efacfa2ce32451432cf3da744e7de2b2e1818df32e7d7f1710946cc6c50e2df69f99582f5518ea29bb40fc53c93cacc674f00a9ae128235e98db478af0f6d3acb6923551e9884cf7a2fe7ce417c2a13d1638447bc52f77e0415662e0d63bd0326cf46696af4242940ac6388c65afb43816fed7f8e430fba0671fd49350072ee3c956494120a75cf6558dd7409a3a4bc8ef793f75e202dd87e5a43115436d8d0276888c10d453bdc4541c6a52c6c429d92efd9559556f0aa32404790f9c403317a98b829cdde275a160ac55a4b2f79416064d82bf7d7504edbd786283c8a65ba56c72dca0b129d0961519350f751e135a801625afc58f5a396f011f5d7e1a6e60787c8ccead5d87fe2d83ab28b90e3a27d10822fe4f2bcd1d3eba76e44a05512b34d620a702b166bcc0d1d33e03acc28e9e75e9884d28c12b14740a862ffbfd9af44db775d6edec891c479311671868c75c0632fcba0115bc9308236fd72cf75b124da423fbb605537c2acc3a8238a0327d172d7f19145e2415f65a05edc1634bf3f58ab1b2736aec065f69a4175d12cc56c2f64f1f773bfe57efd29e57cf7325d7d8114604e5870ac8bc7c9b8e447a1f3b09476b6d5cdd3f2698449720d30fbf70eb3015366ec570a79a0574524d7d1bcbc6733db6cd3c65cd3be55c2a09a5b4dc0de29053c9c5422386a7690a8dbe12119e2bc764d7a315f910d2b405b18ce42d6220e8a7a0ab4ae73fac418c3c7757333946a36754dd016d901a2a004d714f92ce451cfa88657cb1efee06b60e36fa0f5b3c4ea0afe0c7957b0ca341037d15ebf5cfc6fdf4f10c5f39c7ace953791e9d2900235a6c1db06a811cb9ac7326e9b8448ffdbe329cab87a129321574012de9c37c385f9d25511203052ec34025aa086ac06bbff14a74246dcc5885ac2ab72d1df43564ea3feb2629b7c2107a1de657152ac4f05dad872620f7ca83351b89da6366bf8a7609dfaed07c58bac520eb85b789ac593655807f37c752523300c36b6ad14a0785c816db8ee60a11c86ab45ad27700455a04916b37b2d844980b68671f817fd7655fadb038ff8f415055f7b6ba2e63a890914170dacede672ef329acbe419c304a1cee99b59f742ba00367cfcac2513600ab0cce0950d2d155286fe8961c7a8b64bf06fa161e8be9d4e1fae4e305239fc8af89945cb93512f83490f42aac4de5b17be9955dc94d622a276abdfd7a333daddb1f8470c1134a2a65febbed42a5176aef46b738bf4a1612b9e0104a91677e42096cc1634a1f22f96412d95d870e20b34f7ab175122cf184821783aa89e1e6512502d890aca59a84cacdec5659c7d6d4811732843c67427282096147739478c2bc6998608e71f44c97ef59569c9f19e002e2954d19a18abad894cfc7b07b4919ef769e446d4cef231cad2a5557cff48748e8c2db8973279fece3a708b3ee575b2da9a222a552cc643dc9af2b6c7c6659bf789124ddeb908aaa3c679dd6a337e9ea7a52162ca1aa4ae131d68c0f3dd1e6c7266e41d83970264e949e0387e2302dcb9f6d872573eebf1813d86fc7a77021ac001215d4bbea9b7bfae4c89864f4cb1e561a350b4033772b896ceccdeb146903bd6f7ccaa873e9d5a01694b1c287f8661510adbbbbd4b5bb840967a2c770e9873ebc28fd68c4103c2c8032ca7b3d5b235d6f646e60d48676c86f0623b60f043a300899978b913de43da9c3c6d27179c5baf8ec37e3b79960d0470b620720b37689905663aa1f84d65b975c471329cbccae620b7261e2f0fe38b33d46906462f797b4e6ed6627655a74fc1e2322f9b5d27b357fc0493b7254b5353d9e1493a5a0c67b7b175880cb911c900ea512badafc841268ddd509f535768bc71da9f72a76453cc5c92bfb96946dbea9fd33f922a1e1c45092188350da8028d168795f784159d5afe4cd81d7c23f7c49e88c250ae4646fdef90c2feb43573b9c92d118475880229965a0d68078bb6c78fdda651a1f90ad8ae04649803316b71ff99e54e511df0a2abf424afacb2302da9c29c24c703eb29c96cbb5f074f8b535b468b4b7ccb83f246f1fd5e7616ebe95e0d6092ccd756e163e9c61dec4bdb8de03ba965e606ec52dac1d23c15a574e4bc26655a525a4867cd1a67ad397eee8ebe21cf385479f8e92cfe7d58e3e3addb3cf9e07d4085104e83aa93725fc861b8c68d6f6758e989335763342db851197ca29161bb0e27fc35c639ebf02e828f62178028704239ab1b2107975fd810d6daedbb2b378c0037c322abbea254db0520a86b77154431aae2cedf8d391b3f9e4c44e86b320316b54d48abee97d75dcc472c289f8958e2ce03fbfca6fa51618a6c18c379a206b8e085f696179c1161b6c8e5ba0b80f0cb26c87f5d77e9e1773db0e83920a66d8ed6966da32a8370a4d557fb6b9287ce60f4dcda73dbd8fd210e59c058ba5a74de164fcd27d4d2574a46ab80f94063a4bd932be6d4c5fdd2f55996f7cca59165d026cf73116a396c9d5de2701cae23b6de2830cad077fbb268e0737d1e1c4f3e8ea0168b2eb9428ead0ce6f46468ce4742223b43b8613fc319036d5902f57984c0f33f156d674faee9c23854b942c9552fb307ab2c3c3bdc5a48a246e565e8fd787346e974e4ec7334236a33ccd59c6b9a9b5601b9e916e8215aacf36832e8ca67c4e0aec74d7ed91d40f5552243e5b4df1de5e53e4ada8ae129efcd8157d75390403f1d6d35b740170c52a8ebdabf45b6369b938a3e262c0d3714df655d0692f98404403f1032d7a1b96c0c2c9a3ae3eb3eddf1a5ccd606601c1f0c8dbbddecceb13e98c04ede5a59a0aab24161d0a7832d21b24cc71b4d883eb5b88609725b122f0afd44a81968c529418ede7b9ebab7fe632e3478f1d26333d226af9d7c668a5eee7cb575ccf88ddaca3860b133db5ea19a1a3db16d3b81a7f8dbb6b9692ad6bd48e555472fff69f9562b3e2ba94985f09a0c0a5484e924e841b60ff28ec615568f553891410255f17ea0e1ad97864f705ff774304e873fd8cd1b11a337689eb83edda3bb101d0c6260b5d131c628a965a34897863c9519528fd15033e28d5337f56df8a87ddfda5863962000ac6f6f1357e930f28f9993da09c4b2a65307873739080762711195f996f56e4f092359d850d4e56ef3d2408c1ee6bfe1276347c195f061ca017d51698682527cc0eac7d7e87a3eb22751857efac76a22ab9a638f1eb88368c4ade7695f4f4791efe96323742d55dc25fc15afd55d847027b77f3f440f111d3ad9345859f2d73dd5356c713f3261bf9f7f960d15fd9ceba69d042d819651c6402a2972d8922a9532a2ff62329681c59316af665387cf5314a6a2e3c0175d95d939b538d2254e6e5970eadf04926b41d08c599b171cced14b965c8b9f234b6c5aa74a626805b7e8a63774a0081b8226594613a378041ade516f88094564831f0377adbf04abfc753f68fc559610e6b7cc4fb4adfc2db00294e480cfec84b7069b2d251861e53637f630e7967efac178e4c0fcc75e733bb1d2e78c50e6b73d4946f6528f28925e446e05d1a755d1ebfd0b4c8c8063c63d683d5bad0e5a15cfed613a1cd3fb19a0e3281c1f1bb3b1b49c1c491f0fb842ab5c861e6733662ce327a492f9490948c211a3b42c695208f20484c57c9f99907b16ddc8462d95b54b2c9a087c3339ae853129cbbdeffce4a623dc0a46dde0b9fe5451fc856718331f38086dc57cdb462d9e1ebd4550deff1fd45571163038f26082cacccee707f07f4db4b8f0873ccad393e50a0a5031122cac5a996f3e56ecb08ddf2d6af5c80af9af4562278a64a782443ec7e8d3c70c1d39a0be05110a04d4df2c5ac378fdd2de5124d813920dfba7feaf60752e490364861a2d46fe78ab452c764cee246e4ae99fa7149b23bd18d80d37fb474332086e62217dd298d659ce89a0a8514a5788be95c2701886a08a7819d94b83d608d13106bd096df5c61ee9a3322a823a7294943780980e00ddebb7aa6271c53b3fcd468d702869e1c2bd6571d833880cf9f4c906c735ed15c95120781ea8c48f94cd00fb0baab4c9ad1e0a7696ac799a8a818b25c601b1b20d383337d222f1e02ffba8a137575d4f301d5c9cad49d6b437ca9a3920a7a36babe3d5d997393a25e811921f90a7779deddb90caf7524020fd5d3d885fd5eee8ef86f0d35332fd17da18633a5574a7a9e8475dc31c25ddc4a136fec7620047e413f3fe8db724cbd7de2e539921a11270460aa811ef3c9c0f04b4fda787c89020d4dccc0d53b6537930dd0424c78994dbf225bc126efa750c5718c582a27866f890f72520c5aa8e49d2d85cde45330a427279adecb059e2e8f1b0b978e67279c4d9a556c4b773c6ed0e47705f6983a8c224250bf124ed20986ed95d1b291f699cda556822b1f6459a50897e4a1487e3cbe78bba86dd5730bd54fad1bdfcc969a3ce0790033fe765d8cf3828d94c8b1962ad0ad17efc6c6c773ca3bbd12ecf4cdb40646e33988448991641c495a86ac8f559bec1cc46bc968f0f5e8e330e2f299196d55134c3914a233fe4f2e86bd37e16247b6259193f7956db5478541e688ef677ac8f2db55a1be838b222c8127be575982f57e2192f9ba984f3690b1cea41d6402bd559ac7caf6612b3dadf63fc00e67ffda2a92481b9294ab760ec4e0ac2415f06637953424792a1d6ace3fd458530c3bacc9be3c7fd0ac8e6511e84862e06feb674a1e34d263ae39ae6d53c7923926898332858e52d0974f4ba4c0abc0be561f4ac850dfd5ed107a8459a397ad0468faa3f25fd9410cac1600561dbcfe6dd72dd4bfccb9f56d9b06d6888d04a64a6c24851ce0c2ec348e36f8b7aa8428112608ee396fccc48370bbdd3eea96853cf21c0a76633f7bcac039da050d9ff8edd5e7df23ab4a3e12ca891f4de140172049bdf4e8979a5e117b954a00312710f0d4012ad08e3af8c8082a051ce7aa5aeaafe69756b6f1756065124b7c743d0b38d000b64d688710fa569de45095b52c107df7573868d947d4f38cfb783055d8308cdf64096e01a09912f15ec462dbf06f6df5075e2f332b8edbc7d9fdba713fcecb5df1183b6406fdd2a1b84d848184928272a5d0ca422f63693df7bc0234966c9a3e8e4929b308b77ed120fc2b74f7b7d00c5b1ee496894fb521ce82166b4c188928b2ee005be10cea99a38b53b16eada01dcd128f0f0a1a0c0a008c60b670e2f04337a39ff4408706acd5ced12284136f3b694f1e72d0a8e5473e466a77e41637beb01dd6ce7f21b84dfd59b2ceae966424f5af015d897b36ebdc7d48570784f93b47d67c039b818e6ddc5a1483c4a91661208550b3106ff60a481ccf7fe3db8566fc332b9d0a5df248e5a735dca8e8c7e125e0d5aabe9be1e66d1fff316752a37f05e82376d75ee268443d0ce38c8f21925260633f6fb30ff6989f3d58ab15c3988b60aee7f9f8b33dad155ada26d7820f162bc3fd43aa54451cfd8cac8447437915c13ced8044bfad2fa2bbd7af06834de0afc2857f1044cd95b7ac9bd4def8d50868a981da0858f671a71e687e0194acad39c1c8fed21d9fc7ef5877f12ea7e049d3457c4164ffc8b1a79b2aa9e32deb7fa5043e431f6d493f7d7664fa9feb0322d90dfaae63913b6f7f5c1e8862bd92fc73dff31c0732638b24609c7317193fa7d5221665176c092f098b8db9e3bb7d0dffa59efabbacdfebacaa78d5f6e66487318a8aeb812bd748017ccc66505077a94a576201bd854b3ee9a0ec30ec49fde67a133f8df8543e4c397629fb03503dcc3ab5eff0290785803b9c19b8dd443f48166b7d9034fb95957b7120eab1f2e32ccc9329801dbf4bbce03ecb21ec0e7ec64c35d33a8473e7bf0b8189eb64edc14b151f0f897661feedab11e4bdf5f7fffe984548a7463ed1efdd4aa04f09e79f13fc23cc40b00798b4b7a7880465b7ee5d92fb69009576b05fdcfa461f91fca05b1775be03bdf32678e2f93c30c98e9f7a1825fbc7df7f18ab58b15b951fa7e3639fdc44aad54c80f83153e9ce20b018ac8a64c56fe3ad3071d87101110d7c33a71c1052569442b4123eeaa6e5b8db4e3a35e7da47aac2befabfc6dd55745b8ad102eb2130c932a21867de47376d51eb28f4a7d238cb525990244d9ab9e2158160793bd71b5589495ad9c71aca3e40a6aba76ca77f9308fb5d1e1ff59897aee0ef85b90f4fc61fbb2c36beb10a1c049ca83ca872f4cc0c9888f96d62d35fce7b45b41fbc3b7d0b07de970d703b959485c8ed4905ed4327352a5da46522fbc727e4310776465e1b805633b6b218cc742fa0c0e4d2c060d5a72747d99cf6fb54f65d3eb2c737f3a9323441852691aaaafbc78f8e22f41c055efcaa4118b142d163b18eb0dc9e6b3de29c527ea61dbde7b2ec06f8b3357acb98d40d02e6c973260319c43c6da2d1a7b438730d8ec676265f52dfd3dd994234137062aec2c0a334d3cde59b0830c3176c9bae610fd3eaf9520e77d32e57e4a584a1bbbdbf5c41d1a28f2ef70fda41ae9824197e70445ce68b5c2cc8fccc4d492a6040b4d4abe750fb6bd54ba6ec95569c7500ef447f6ec65a4d845bbdf58b7fb056afd190060e433f12c6aa3df1bdead53593593806b82def68fe3693138593b5e1c64814422a72279f3793a42dca378435daae32b8e3f8e89eb67807b354b6e65d35edea4cc11fbedbb6393227aa53ef692ec4c27b12f017a22a36d99a4a26a2e54f1ffeb6eb48c20c5b7c163f7bc7e732539382f4413e882320fbc9fe792614836da2ac2be1a615ae6febd37c9e6a4a2d21a91843c9ad63b45664e3f47f8bbe3f051358db07bec215402cc9263c2a59765290baf5db8024af137a281f59d700997f8717a133f74a41f2d1ce0e4b1bef585cf4ce4b3b1cd23fd06d51d2e9e5b91ab4fbd316d378640c8aa21ec9cc7756f9abf77469a74d8c5c15f66278c51f6f775f33cd54452c77a9fd4dcc5cfe157dad37c55d81de290078e7854e20db3d7e18a5620da221693ef242596586e9fc046aa205a93ebf87e63d00952ca125d1c29cfbf18d6c89463266c5e12a58a25cd869cc1aa53b2a4fae786c324f3142e9fe94f0b05ba9e220f5e8b04b4234cfdff36ab5120b255b81b40c4406be7d9825202993ae5e26735b6dc729513998e42e59bdd0af8ad842c605467e68259d87ebae06cf5808ebbe54377a3a814212958890b742b764c6b8db05bcc4d9681b64757c2812fda37a9d676be82ce596592a60896e465403b4d5ba92ea07ae9ff5451fdd76bbafcec298ad1ee1162968707be80b556f03497b84b563fcefc403d416d54ca2907ca3b4f6c3ebb90629cb4009a165bfb3c21c71162b03b39bf7c0ade88cf70f03cfa8da723665b083ca620f80d861b486298cc5bd14aa654d3ad5e967bf347436f3e76cd2556f7fe49db88587b58e33824e581dce2591e924cef2ee43c1a6035a79a1f036bce56694a18577eed38b8758014d5b6d79e4e742fe2c8657e9f4233020810a5262cdfb0165b78be45ddd03c482c2d52afb1b3325b0b32085e731bb2b6e9c3f03413189ebd81b4bbee835d157c1037bb672a318257467b5d25e27bc9cf38c9d5c89beead40228d8db71f6ab0be0959f6321c0c73ea3782a4b73463db82a646100a6b72d786d0482adcd333b6bbfb3ea9b8eebc915f4675d32a6e9297fdc8dfde4d39896a1f037f5c9b54607659db8675932755cc48cf12028533eec2e00ca55341f6c485f75cb9d73461c20f8e55afa127d26f0a537cff26f672a46a8c4b34d6ec554c3f2c601da5a40e96cccfc2a4fbd1f3b820c86e728f5269c80a815700218d80013e58d816e942535c33bcc6f3c847808613e00a90c4781c12fda3761492f18cf5eb55d7db212f448c56ce2a378e1d5ac11d4b1d384eca8058d09a518082a5210f7e6186bd78d27829c8e5dc325623bf73ed5fbacc473ed2b152959e50e6ef8280818637b8285302962e7733a2ca0cc55ee50bb8f38f5833796ab396d2bd9b860d2453b3ae87d3a09175d2e66a9effb41522ae5805944ef2bf3e3a59844d2d1a0c9ce3a5d0fc20a8b9581cf45f628a2c327752710613d39c07153911c5dcbaf8cb3a7594e4b5a03593632e2db9d5a27356b9e12157536f6037acd63dce605e4eed971ff9eb9a84511aad4b2670909dc491785fdd2509378daecc56259f227710abade4cdc841dd06d1f63f0d7081375d3d6d7b5b310d5499580a50d9a8b6b46cd20a4ffd3e01a3c5039011077b699f9ec6cd64fd457fa9b30b70917dbfcd416b362829e855704a889919f5d05e19cd0b0b890b2e2bd9914d35d147c154615aacb1cbd2795f5f5e0d093f189726a6de6ead71b39f369575560baa2678a922748168b598ec4e3fa769e8134c26ca6ca8f1669871a12964d6edadb3053acd6995834fbeb06ee0d6d10903aa512ab59c547530f2031708141cf409389f552a04faaa8886f6f15af88d085c289990c1f4649fda8bb371403490539a3f0b7148aa0d21d39037d424c5712a0e4756329b38cac5d18d68ccc63a3cc50c207a3de247f2bc867cbd17f3287eba3106043aede1ce6795b77630d34e8708e997093fd0e9b77a70bc2eb8718d404f330c9c4d9a5fa3d240c8dae2b0b9fbaa361174cd2fb4a265a712a6349b1a47bb4080e2637ef8774cff03a7e10048052ae004a7b4d7327f0d56d02d2b9a38e3534a908024898f1c5aaa1f77919265801acb93de2b050a49d2b78b1231ed4187eca955e9279a3dfbf0c7f3211a3cfc1a1201bc68292dc7ea6bf7c613926802204160d5f2ad9c9f199a7d1928c25690b644a00d5741e7c50a581692329fa1ddb74c5f5df03490e0a91153d56c180391681318cb9b3d184e6c2b5eb3dbc318bb99f660929bb683e20d1131afb2f249adef5d0aae192414f3ae2d58709df306c155bf2f75fa078ac87a405d3afadab75f28a16a613f5ac9bcd22cc3a9c398470d2a50175fd7003ca1687db197aebf8039abfd4977760e3e0c4a4ae4ec497f1a9a983507e1457384f2b2236c9cf05e8a9fc99caaaa48f91d054b739ee2f9e4e4fb4446717540a0f01e5ae51f9ffad9e9e78fbec80272f8d40c01e70a099ee5558ed0846bb05b7b663690ec2a478328d75d8af95794595f4260be6fd2e62de7662dcdf0423d00fd5129f7c6f519adf22fa252ea5a506361dc6b41a74cd28aa9f3ad08ec126783c2f7efb4e2d9812ec06f58a051a316135afd78007bfc48d4daa785ffecdcedbec0664c8ebecb4ac01da2f4d12cd33c33a3104d084efbd3e9202e7744906b45b8290f3c6e0b00d04b72939e614d830114519270b973aabed93fe8ae10a70798559fd5f8c4877bd91e8008b5975e60649b6f34b52e0544d1f70cc35989204318c524d4e9340d7387fd5d466d129f0c621d6d7a55ef23d496b8d8259678bfae975e36f7f2a8734dbfbd59394940519ffa1085885a875fd7d0e69db507bda0f3cd14bc05edf880fe99e9ecb94670f4bc2463b76acb014ae590b402bd39d821e91241c5d5c31147541cd387111a1d41a7afa0472842aae4b7e1bb987a3b0bacb58e387fa23cfd87c4329f38f4c1353be0860b387062667e319e0ce41700660050e15d7834cf2c968c42ed447065761ce03a2ee3bb28df09e01a9277d8cb791c4ee2c50208b4698fd5a71cdd794ac819e48ed8469e9a676facc070a3617ae1fd6ec98f509d9dc2edd4cc7e3cec01530e277f7342cf4786b5229f10fb203e10bdc90c726100bf0dc49f7e403a4214b9389dcabff0af92486dcd6f646f220e56e822ad67913b40cf26b1901335ffcaecc46d92f0e2c29fd6f1f7c1934777a44bfdc850585df12444c86ec15657a79693bb6746410aa4e181e639ae804876af4bd992968fc4eee2629d7886c363dda6fec10fc71562a93444a5b9fd802f284bc98e39f2a3c97031fd2bd29c13698e9ad917c054945b567e8cba193d25faef94f44a62b2de5a9b9df8941cbbd18188468eb8c2b302c6d654a63563fbb4d277809fe6c0c5842eb098e6b109630bc2eb4999243906ed39ec9c062c5212d3e4462f7eaa800d7a47fe41e8f03a6a0706983a2fcb6b6daba851a7acfb8d6a74cc51aaf23f334c7d6afa437cc4fb78d65f30ac251194315dcde86b7ce72d88d73737f689210825211a940c361c18078ec7867a657a081fb961e45d11e386d131a6ee8c7ba69a8d85a2b8d36c4ba2d9b1205eed9f3daba8c1d0c09aec1a8a3bc31ca816d105b89bd4ce860bdb1c4dc8ba48f74f6bfec8975f0fa9c0c703b6ba83de33a2545ceced7b24febd8dba9af5773a5e55663c55e5ab864fba2788a389095ae3d752a22d017c21f66510d6290c91d73f11b1f38bcfb0cc661da19e1d0914ee6b67e66181e6ab4a37f55e5122b8f6883ee828e31552a06d2d2f0257bb7e4a7447d8bd0f28b4f689a4d6362a30e9978c8e794cdfdf3984c1feb7559669e069250595988a39abdb577b520f9ea71b05690c2c85cbc5115c07d426b4317b47aa98e399db70c438fa31a46c98939563d9947564c6149473cc5f803d15112078da76adede9efa5ac53501644d4c480a881c2d160d02cd4e45279891831a23c51c9017e8e1f9994ea135b8580884bf6b5a031854e0a797cb9f755fdcd66f01c9c0a7a198b18d6b69e7a5583126bdd1544859a4c18d6aff8e36f87e8c0cbc641d66609a0124c79ac096b7965eab161a086615d0242fcb9f92bfad1b207165552593994aaccadd36727522f6ff49ddf1dc6ce06d1ff2e1e6e02f8202516e62fbbf154d8c7e86db1dfb6e10a9ab366d9a96d1edb666f7058bba065459c2e501b93dc178d6fe085787814719387f512079c40402a1f5c819b1c4cdc8c702ced5f4ea797b341f0e47d0377bd7b24409b8ee7c20ed4518026ea78ff1f011ac15d51511f360ba90935efb2136bd5db46fa04f3f286f135bb92fc57ad74e7f2764b25b570d3c47dd16a412d608c009cb05101adcceefb3121f87d2eea5db1a828f26a1a2c510e362bb6357c4f2f63845bdd447ff9d3008ac2f1b0ec6cbc2342dfd032bc69d95b2d3c28a0af256905478227c7454eb969e0c1aa4faaaffec49c70846ce38235ba0f2d55faebaa0962cce142f3df5076a05f0f9049948df0b02bc44ff9c4a04354e17328dd8ccf5cd921e78576ac7a2bd79eaad47bf09c38a3262bc3e565cf579173669dfdb2fa54fb041612480eebc77bf09294b6fd14088fa197bc97dd7bbfac2339149980563abc24c29ef7ff5314f6583badd05cfd594ae7238e84a1e93dc5975ba236b0aacc7e5c4981ee02929cc2694fa4a9385be87c1b765071327e148438268a68393598ac961b8f925bb9e782468836c65e9430c352e06fd380d7781f4a9a94520c822567edd1eb9917734449477cbc031efeead32081482efd5e7f3af78c9bc48132450204286701599f9923bc62cdaadcf582f90471411753e72a985287dfb838c86d9ccf3d546ef7fe258b304a352ec22274522804a55fc810f4903c7e75051130177808e8473cb01d7b23ab9e1da9926bd38bcc19a62704fea426394827003002ca86c0fe0a711396a521f60470963378d29d9ab9ee6cea57cb04b78724dc12ef8d4c22cc93e4a31013d06db8c7127fd04f29af6743d4e24422c76a09679f886806305b1fcdeec7b47979247f74b6203991f40c95dcae87336a242e590dee35a48dad71e7cba46d2331469c1fecfc17d05d5563055e562e189fcb69042cbea656f96ad36ab30e63389a01166485b3633301a41407dcd3fb239b9d74821ca881e5eb9bd36f7b2c86ee2c45c628e20109411f1a9d290144a6d34ea157bf31b9f69a36e4efb3f5dbe1ed35a9bb7526a538f8d32811c1f18838a3c9d4d02f4404e7e55d30784b34fcaaa7d57392e705799af111cc72d1f34fc3963c60467aabd5f1003334051b9c398557d114339267e1e08b93e20256f1d283abc66796aa3517943fcad7843e470efc9cce52e628a4d6d5852127c0186110df70ad2116617bd7d537cf92e7cbba6b542d4ebcafa26a361a7ed1163067d778f868c969337af4a9805db560dd0b94bc6eeb62e2674b36350499b3cce19c6b975f2d53a1ae3ad6d583c0d87de345e4632da503a79020b2faabf264c11eaed2ab4f7afb18e66ac3a57fa95b1917638f3a48134945052054236d6ecd038eae55a9a8a764da1dc2340b8a78d3f6ec2c896907c8309286ec2ad1ec32f64ccc61e2408f5136938160ee78366e08913a205381d125c3494b2707ac462bbbd0fd552cf8037ef96592714bce2f5987d14d3708a6ea368418e8d2fe6450f5c8b7d3e8a4f66870c599f2cef8efd47acb28df685e78d2277e53fe984d82ee3512b7279217eac6e48f7d8903b480e64fb3c3a426b2e12aae530e6ddd7087327979b9bde826e3128a2b176fad6da0520451af0412c702bc5b5522234e3d9183fbb8c918c72bd51a524c77435514a5f3fa24994f92481da65e083ff4789b5b63f5d251a9f4989f3cb7d980dc685e67095f0465755d8a5b138a849d1aa94a3863b3dc1dc144aed03ef792b244e92b82cbad9bbe8bf165e68c7292779c47206a4fd1ee2ba1a3d95352f6d64b480ca00c183d800d796da195d9f73af14119bda2f6e50b0f11ae046b5bcc9a21905308b4a68327781c178637848efbfc0f864d80fee4d50df270a471446b6e9239ca6f6061cc14373452fbc9c6da809461b1b1ce319e538f0d61c2493d15701995f98a3e078a52db21894d83511016a4dbcee8cb00c179c98585231f2d52021fe3fb27e3ce7f21fb73c7d3945ad08de656d367348abf2779551470f4304ce7a3083af4439cad51a58ee6f5004c570017e39669935d633335f882a339394083906beeec7fa173cc7ce10ff6804cf3d5cdcd158aa0a0323c7f23eb60ae25acfc6595d81d3e4b17e509800d98c74c9614fd701b6ad145ab4274ed8ebfa3214f66407fa1eb346e8e475ee54710afb92d2c7f8e62df52b6b07c6ca057080ddae6fd209110c392c9cd2d1568230789dc2ba509402029dca4690adcb954a9f0665e8a67bb3991e7cccfadbebff782c61b461de890d4f6937786b8027f12ef451afdf976737106518b285fe1c24e3d3ac72078cc49baa419f919d214be227ca5e02a72f102421e1e79c6f5137812cdec67dc229ed0e4dae7c8b0fee507485c6b2039d9d3718c3cbc4505cb3801d7f93665e4f9d9a2943b503192c0f0e94d830297e5ca87d6c8f74ef79c0bf9b4c0de1d5c558cadef538a110716a06fb8b5f91b65e13efbf4e9e2450d57b2b4451bcf0757fdd8ff9961aa65891231f5568cb6661c8b295d1f05c8ce6efa97542f50306c2acd00b17792eca414c84b698c63ca26d116e1bba5940483244b28aa11c92f72614a8203c87f42961ec57b3c34b78ca4c04385977ea94a5f7d9fb2278eef4e6cbdcc205863a6a063847113b26dcf3ee767c1cf5ad1343ad811f41590d1141b158e093187cd2a5ba12293e1ea1aae9ddb4b3c27fe29c604e5176e3f68c578812db257c6ba7eb2d58e279fa814690cdc89f1f922393c52724a25444a1bae6ce5314b25d9a8ae37dccf8116d15a3a4b6b3f38cdac7f6f3623bd6216faa8ac0ba040faafcf6760c9c9999498de4cbe349268763407c1a019589204a27c96626417de83484e93e17855339947bccadd91d0530008f76bfe7e2ae12d208bbce9787ef8c069c102bf878ea1871be83a8f7d91882464458e0451e72b3a17cbdce7342e314eb9ef88536da6551bcc0a5322fac6c94c6875adf85d08ebb93dcf5f265e59fd9b46890b21f4845f4974d8f3e74331be9af8d012aef124cc7e4ae62fcb68b93b92f0411b0833e6ed04bcac078853cd65f81b680121e869ead28089461b73654408200165b6c69a6112eacbda57f8a6500c65c172f7c3f3ed5618296b8ce83246d9bd09c631b54604aa844ff3a0930ebbf803cc30fad0914bc481db567b9458f01463a04b2f96d98ca0c8160e6b451fa99092290b34c06fb8a8d8518318c4c1b5b0a8b1e6bb1b5d22461b168aead86ad4477ba24f15e344f108ec88adb846d83a016468b857d423284a545a2c66a09bfb512766b67ac57c1511cef442932633d34cb65e38978c7b42310baf7bc7ff1f35b52d33492c835def94941d2684a232a56f0dbf15e6d648d5b73c9932935ce1994e0830d44e7fe7f469149cd8ddd461b6eb1fc67367a9424b84c1c54b9c97c59e34beeec49a3c4142460c24fd700a1f482be17a5541aeb2d5c353755a8b37ac1c5d506989f11d330ff43421773139ef54d812de572dfd74c0d0629361303e3b7bd96854b5e86a355eb83cb602eefa07ee0b89b4064f6aa5d4d62de92b51b97eeb5cad54d301af3d3aa01ee1d7e5c2f4e680b1db0f5886fd3d2ee313fa9f6a4a6cf381f72b2e75b36876f12a6fe421ad5c125fa43b52405071d7d185ce2d635960b70284ff098e0b444bf89509e8dfbf5b1e6f2ea0dffcb209ed2ec78e208012e88ecc4b5b090eede9810eb405712225f7de390917c17bc8f1befb56f20326cb36c9f0894c64b266ed027d3e15eee56416a7ee1c2d93f38570cb7f41af6bb2bc1b9a20b1617756237a49c7ce244361b867c5a256b75ca8bd63021c4268bcbaccf64877ecba43092430e554f56027e86902f71bbdbf7f53477d2b267f53106816aad3c309a474cf8654b2b6a249c45beeae11c4472ef36d6fa43a3c799ea16715dc8710a71cb61b80b903a81166905045d045c1fe85b2a6a0ea43e7b0b5c65284e88d62faf52e39246ebd4f22abe50a4ab4bd5711a109272dabdfef653d400f4809c84935f51ec0273c02c7e3a4141b43ca3717fcf2b21edb4268551c454efe372c96c9af150b328271529b77b14dc0890af2345677cf91b6112ba33237fe0aacbfce683f1877bba21f8db9a3b704dd8bc9d3cc61128e2ade42073ff19f5f3bee78520a1437e6a79e5a01052d58cc35bd95606c61d69c383c554452bc1815f7b14ed9d8c982957c1892cc869da4b881a0d6fb0c2deff32f836bdbcd136e56c4d33a584dc0e93001d36bea9288d533d7244534d23867658db3d20574683cedd10a40d1d04bad3fc33b50224ff023cf305c4689f7cb65a228cf9fcb1bb68f3f316ac4d7d8bc141c8281dc358c67df07ce31b9ac276d10ff0c327ace7ae84734d92a943aa03d95d4d98c2aac3ac31eeea0f4aab5c9b31dce93d4b60dbbd098f5d1487e11fd208493b71621f33c32fe3f00d69c5ea38a807909b357ac60bb9ae75ae2adb107ac2cfc6f665dfa62c42348aab453cc1f7a7a073789babe017d5551b439707354f3fa4aeb791fc5e3266fc396d3e7d18432294f53e84654d419dbb93974c251a7928a8656a91f88b012a4c3d42a8b0f2683157c5b693e50a5a022ae86243ef871c29df20b7ccd04aa0fc529618de51b6f564cdd86788e7f8c5c51da539c4ce2d760f8fc11b87045bd1810eed67d21a466b3312e990a4e9f15fd955b9234cb4027038289dd005776ab8709e1aee376e319403f3ff781331ed0000d3c04dc25b700ea49f9da1de8c0c1091174f23281aa9391ff9e71205b609acdb0d051ea1940a000dda21f0552e3f72d128f7db215a8c132bd27aa533d6b4b5e453cd768df9f1d8adab1fdd7be12c8c8a61bfa121a0e188a6d6254791bb7b4b8ce37e7f1a093f8393d215480e4658f8aef3d7b6758aefbc4bc8826a9d2d785c6a1bc534c38cd6c696b5148a677f546d9dfeef6373c8fb8c836138d668a077e78a6ee462b1a4025a6c23491389d6d9bad2df81b7fc06826a204304b6557281701a898081710509d36abd7deae35c534d7f4c4c9785f81d9fe36b9065482d2ab3fdf13d0cba82762f66ff7f78ecfce674bbe2c0e919a99b28a738fff9c5f1db214493cea0f91a4d6463a20c44f9b2b18eddf31ffd27657b4ee3147f6258265319eec266adf175c5ff087589e10ca632201b596a57842f44f6706a53795877526d5647076659a785a9239b3996969831e979b2820ec9a3e2e698ca6f9de7050f5db45776446bc24f45605ab087f11eb788d8b5fe9a939d5e74f2e22cf95ad79e63e1793dd9c334f19013621bf581e7cb555ac3c7c045c08c4974ded79280ea4226cd74d5b984479e2c6b73414640e9a91997b3229949fbef494054812023ecd27e41311c3039cd614713b5fef8e58b4240ef7ee968f2d2b7f9ceb80e5f6fa2767e75cce51436622bd9ad59faa18f8d647c6bb673bbf1c1938b889e9d120275314f0424bdabd7ac3c9825fcf7bb039f43c498a9f8ef8e508c8d122e2efe1eccc2f04997dabc8e78844b2188bc908179c7dac3a8e2e9d7098a5da2f3454a07a447ee7748c75564e925f9b3f5b773cdd525884d3a3f5e5203e35fab0d7832107aed5e293aa1766dd30d85eefb9d7f3de39dfdd53ef1a52a881b0b5d651b5b11d5f030ec933c8f3075fb81503a5b6259fa72beef4f8fb06ea7d97d0f179e0d417c7d9ae25c3343ee757d8ed96d8d04ce01633c20595014abad8c6761a96c1b0fd63d0ae2fc9c4b033bd3c12a6541ca2030832af2d9dabcc4e54a5846ff17dbd0ce71d98c3a64ea90a8a3a4a3926c54d4e323e7ccb0413bd0c713b33ac04d83d9b0fa0267ba5d22152cba6d3522ad3dd681166ee56eaa9b46c509a24718ee7b2dc05907f0dbc8ffb185444d06a56750979768b193d94aaf4e08d054b15869201fc3e87e61d035e4da52377b3303bdec0a06970aec8e6f2b87cb66572d057264166cc6ab91f749246814efe68635b66b6e1d8dac4ddf02d64ab039f8071c88ea76b457ca01a86cc4473a330e119f5befd25eca85ef09bc196f3fdbfd915f1d1985d3f5ef4aaec7875b9bb2abf149925c2c36ee9d6cf4dc98760ee046373d611ed1d30e7e4e31e1b25400de8c89dfe37ddee18842e286957f17f3588e344d4120f707dbe330beeaa394d273fb05e23c523cdbb5a04c8f66f79661c8c872f498dbadeadb0acfa12ee7e729458ca30ceea0ec7f6da35595f1f99b2547c3ea091913828747f75b2f24cbfd1ea3de1cacdaba761fe7a4180dfa1477f53be7959d5992cf8e25dc03ce1141461dcdc97880570223313c5fca23d2bf41a0bc9a50735a9e79c56f80508b0a5d8a020070ec531b07ad83082661ee1f213a3ee6937f70bcc52750f1d6b8767b227d3414a2290c967fff068481b9737cff2f5ae74f4f1b3fa8904f9a2c922295f449c2706639cbab17f13d78a4b3907daf02394364261a57de555aae6e8f7cab92d251816f831b1bab4fe39218b52ca514db47ed161dfa14a727339619785667bd57a0d92bf597faf6f308eb8ee559830a692ec9a3c982993f06b30df1e196f35d47690cf08a172fc04851afce9c69b299fdb5436a62d9cf65ffa9e76fbd817912e8d52eacaa4856e1772ecbe14df50a9c55844755ed38e9422b06e9f11d45585168b86781e7a79f8892547bc26205014c4de347f93e1d3ddcb1619355681b4b9c289d822e5338b303c8606f0c7068136911eb4ac6acbdd608b54a37c74454099b0b671be0fff418f0dd261420a15ce764112d226656ab9c11106b6076176f6d67c87146566a89d07961038cf254506a4d726ca17085e522743c0ead1b9eec10b87bf4c583db1b75b1b59ed7cd10dac32762406758a468728fc622a7d57a9a9887a70705436fc27aec0248537bb28ad4948d5fc47d25c3876b3de257433e088d4a2e6853149c4b97a7e76a04d9f9b5e36f088118cec9cc726afcf992bb872be9e0c848e968403d597c89cd500f44b4460c6179b390240818785e6521e02a56907eb04531880bb75db6b6fa25786faf93e91684b488c3167282e2f3ab30be13536d51aefc7b6a3b801f39eea6a793e3e6741bddc84239bb6acbac3459fce6b3f70081e67285f6ac69fdea7e003a446033b16fef011688b4a43aecb5a01e21c1f0bda632db80d3ed66256e923888d97cfccb9291f6fc776d5bb2d9dd46db40d86ff4627dcae2282099058d4ddb4c2df3419c6adb6608ab1b789d217196c0e5f5696e68c6cd59f9a4b34db0f78f33db665dddde7fea4cdf06e11ede18316379f6629149a596e0ed3dd106c97adb85cdac1f583fc5f723ed8b0d7d4cbef5fc94da8d90e46a3b4cb129d49f49e754772014c43b8db603a9c06737985ecc1e75284e2f97722fb08755bf4e8392c30036ab0d54beb762501df1c801ae888cdfb544c639e8b872d3f7cdc7eeff091afe2b80013e3f85c78c99fec79f39ef6d3cc6634de165bed36c70c9e9d43d7835cf5d239d68ca4730ec28653b936d48160e34f9868f8e51852722ba782e066a2b29bbb2fd61e7048fbb27fa81f81a57764edf11df04d765774cedde801e23637cdaedc8b2b5813a42500cadf75f283c43e4e1946c107b734395d86185ec1b4919e766471fe24dfe20f97f442e858d6da2f2584621ef0d6374a454830512e3c26d31c3d7d948b45350400bc132cecb2f856cc9e6635affe6a657e74738168121e338d979a3f0c42b7031e34fb50c3240bf05f863f719745afff9632ffc6b9d2d05ba5e5c68eebc7833a4982d7b238be76e660830b910ef7f4e92619135a4a95c89269b6bf91229ca3992d5f19102219a8f2b265a1a85cafa21e3f3316b3e916ef7b4134640fae77beeb73fccf8ffc636d1173c14932f0290f27310ae0547c5eee6806ba7f82aaed0df0c5872b00362b49a028d117e199a599d431c74255f9422820ed4732ddf7227685fec84bffb937e5bafb4ef68ab161ee76b29d2254272e65765fad7beed7fa8d0e9fa4638d4a0c10d728fcfea910534835cc1600fa4c2024777c7b2004cc443fb82c7c198390e6c804ea7f44de451109e7c030702095ccd078e2c7f03dd49d648ae4eada340326b2166d2fde8827e450b61aa0ea3fe6e9c50e0823c96b09a9e0078426803978ff9b9e0322487d6467da599659912078cbc2021741fc8d94e7456e4e0ce019ed2cd94beac6fc54c6cbeef33bcdcdc50f9b04ded180ef757b52e6ea5f5a36a91d48e118f8854b4ab6526f57b17509fc05860167efec5b3ba904e2b78a1138033e361a8cb1f6d3c4e95eb759e1d5cfe2cda0d2fa8072f782f651d8f5d9c99a5f7fc00aa5ccb2800891119c7608efe606cc936c534e6c64ebffbf93d96fa957066fb9afcc50305af08cd50f388a9e876968b29c23d34f3eb479a15e51ef1558c6bd766bd4c9ee791315b9774867f1119adbc60409b5f9d3411ab3e2a8b955a1f71ce93b98f03c88483e109311f73f0d4def92a9bd84ccf69dd3bc57b0a941239ab811c8e902cc30985978c9e3ed1b7d0d4e9145e7d8bd2c471cfa8b1009714ca0a71098eb01be3b81be9361463cfa94991443e20e06721a7bcc89491b9ecbea64772aed210a1ddbe3af2b7662bc3709690dc13a6927cdfe727b9521bbac01dbca0e57e9a642054366d4fb06e6c4d17d46d320ce565aa025677a9adcc78c6b67f33b53e8c175f21a5b4577d028c6997ae6594e29cc21543a6e0de921a7052a65e7836b06a4420f8bb97ff77beb97cab49613ae3a9c0f4f103ebc38da73ec79badbb52859ab37674d8484bed8e7e6f21fbef87bd228d08ce5efd86e6ba4d67d1d0de47d584663612a0e6874cf10c82aa5db3d8bf27fe39b23dab39e610125a357548319e95ac9a0116b171a67ff2784a0a0aa3bea9717ead034b5ebe1c591d9f3b644b18971c9f9d60e8f21d1d6bbc02d66befd97d33b8679490934ba6ac606e136666b5992bd806f75fd6fe2057b7f84b7dce99b4d4ba56ae5af9ac0ffebf287e14760e4b7c3ea4412041da4ebeb8012a1fa90a97e50e1d132150b46d2ca2260affd65e9f20f3578532148817ab39049805153f8b65070fb8d8835b260175837bc2fefb6d3560ec10ed9075a663cd1e51b0d60c2a5ae4c2f2b6b4efaa524e68667833c3cda9c8994e76bde5d24e86f774a018aebabc1d5933df9c45f814a29664dc33d56f15f858642792e705a1a866f7e92776b26af645e91ad8f7cf247e6da1230f611e8b69f0153566a2218fa8000571cf953a9cb881612c7b283df6b62b2aedcd7bb5faaec35ba25db2eef8c952e2fc4f068a265471a501b49290ee9615992b881948b0c6d2321a1a593bb6e92bafac502714d7559c52b5c639a8a394cd12c1e4d41c09f4128fb7c1cfc2032831f887922d15c4f571aee9383f9811953b3cbc0e959a6645e145f872583b466c963d1fda233c35f64877abf702b09fdcaf80895f5f0aa199368f58767ccb674d0341bc8b71e117c1126674c0e5cc22744ce3332f0631d3b59f02a07c7e3f5bb0f75ec476330d72c1aa5c20c7e18d63764751258cdb11e5e63fbe4c474b1c31161a6a561bfd74a57b57505a7c596be8ebe98191a18eb067635636b083f37b897044f0f01b8222803da39f60a787c91f79cd1e743484dcbc18de358e8d2eda20ab22d9372dbcd43d3e524a5481b67b1c3792c671f10b45acf283da9a9c44e1f3b6775e300d8da1a90f264755cd2a10a86dd7b53c67235b10083498e65a32e8d8f08b50b4f9b3ff24b72e4dd890aa85754e04b38fe702cacff7fb6f9e21d170e247c18f79491bbdfe2f2ebe18b139e86ef5371f177c92493132a81437a32fa40dbf5aaad95ce04cfdc936981cd024b2c57a985a89a56645faeacc2f57f5ff1f77d0b9bfe43b633caedf6268be05c17866280ed49eb3cd02eec77c6f3654620a82f0f80bc6ae27aa28356480db668667cb0178297f334160935e4b765629a88e84f4d25a8914a85ccddfbaa423f9394613c837eb3639e91398ee696d77220c3a4d86593af942b1334749ac1f58b7cb71fecb00f47e9cb0c4863823430a987ec8cac730d49fece1e5eac48fd6b6109b6d452ccf59cce0f22f4878c4ef77972297569a253b10b2ac83eb72462cf0b96c55eec340b8dacb3d24c595902dcdb5b1989319fe57edd6796a4a77db3cda870229658f33048b4b647f14aff788afb5c61eb31b5633a8720fdb623f36dba1953f6af204bff36e371a58595050d345c8330cab951c4fddafa0bcc016b7c5170a9a8fb2ca802eb5ba04d1d4e59627253bf716b9dad1b04aeb79d337cbc65dcbe2b0948f795b936bdb310b5162fced71795f9781e1dc7c34a6575374d41eed2c2f120b894e0fbfd6335587a25aee745fef14f67855716ad05f09414f794bf672e61c46af2f977cd238d9da7fa5017b53bedc392af31fb08754e9a9d63f1afcc5ace024492d9d03330b99fd30c073b51ea2b3e1341f300b29665ef1f4dd70150f4a5ccac9593953365653f9e79d07a46b2f98a8e0ba1e89bf04e2385d49b5956846e6311f5b442f37ef3b2f5924c879b22bacf1fc3783a73592135bab4738768fbded3f7d3c838c445ef6f90e194b3b06cc172144f6d306a1c9c02a23f0d243a145f73ecdec1333444ee276fd9efa6377e458182817c0159b7fd00e975b9fc353d0170e99ff1118ca86ebdd800d24c9e452b006fd8f9281a9ed9bebd643385013d2f1208a4490c82b6087cbaba2fd45fb126fd05f548887fe6eb62647d8acdf70f9a55d40aa21f3e3013d7237c284f08fe2ce9fbd0439c1fcd059e749d3043a3a7e4a86e832b3e7fbffc2057cb4742893e3bc9da0ac808be3b5727cdbdbcfc0f1348af59bf5d49f08b1d0d6b48d9e08f08e391a301e78cb2abe21a6a6c3f4c14735d2aefb48805ddbbb29a540080b5cd0e2c137af194702663dbd0834268513561c60de04bb0662c906211c07fe6a6b9a6b118e1c1a0c83c6087e4bfe3d997cc1c76f543c38264083441cd85e254a59edcfcfbf3ff49d7b12c472505025649a106e2229d02c62e12030df08211cb4ba4d8b3cf1f56a4ebb4abc1964de5f97338a774f52751f1771099fdf60e234d8678039bc6dee72d2d2d2c9aeff3adf898a281d931cf59877345046d9eaf5f0126fc58ad27ce1d3bd52921003ef9ed4457590ffde9d01ca39fd7babb50fb16610db1fa1277327e37caa18702117bc4115d1736e349d4e6991abfab8f31eef2bdf83adc960f39439ce12baa9d3e15704e7e38f462de6e3ada02985415fd6ed2caabef61acfc93e9fa553eef9fe8d0e5f98d33ab505aeff27ee130efd68822909b52a4188c32e86a39b6e6b88cd1577697759a5e93c9a666316b86fee4b8f670a2766eec13565284a12e4ae2ca1109f0016be593e1bb61c688cea41994ef92b9b01fe3d29973d64dce192ca8a0a89a445a4cb277f51a7753a77b827d3a4985b8ba8c0fcabf61ab7cc23f7486f5a7b9bab7617daaba2e470f00d4104fe87fe5fdc7c50504bcd4472454d0c8aa08e650a56d4ea30e2f329fa41df6d8efd65047359797580a3919747c58857b8580e2bd7eeeff1fb3b09b875b8b542c6330800d5b65dfd5fb878c6ff56061374ac34bf5b5a4007778c1bb275a9209fd384b9f7a12fdcb0d08bfb685ce032c0fac98c3cab5b8def303e7adaa305586a1c4e49109949acb3c5bc05d98908b5e024367efbead9f4ae2289cc1fd242a68d29c156b385ea783acbeb3f35bd9b856b06bcda7ca5232b5e01c40c530f6a5e3d00104332d55ea0443334f853439a585538af81d9097856b73f6bc07891cc06f44d3e99dbcccaccce5ac4955431910e08c5e5e4ee754537ed3e211e99ca859e46933f7407bc4d64ac2339d0d900d6e493b38d4c10d0e6d422b1024ad2e3cd8af5b392424832545e187220a8141956d176ace20165de3094d80bdd612c3ada737d8d9109bf35b834fb7c30310d1896d8e392e772375f2535ff2ef3bd9dbabd7cae5aebf16c86561292231d023e09c82aad604cd11df5fdf7c2afc23f74d6782ba298e49a421008a6d944fba78192cf0b54c36d654ff0eea3fa149a2dacce556678abe73abbb844697ca3187d3e8b72f132bd55b6b3d07dedbe90dfce7a55eb0b7fb15b0a9866cadef452dbb00a033fa4d335f6d60bc080175721626731a38c69be52dcce8b4582f99a34ff1ecd380c5c3bbca9642257520f7e693009a29ff5d98809f6cf86a443c00c5de30d3a653267a1f80be3b0ddfa762e839764a6fbdaccd2f2863b70323dbe2eafa706cdf86ada68f0aa53418e74f4643cb800b7ab7f898256f2e03f15c89bc51b1d245598b7bc88191e5220a4a778307aec9db7e99cdafa04912f5ff01c5ad9c9260c6e62fb488ad3ff67150bf3797264947ee2f94c7ef554d13eeacfe92f70d0d2689954bafaf60d2b5cce8cd74b56493975402a74a5b6e1ca8931277f5ad4f10ac95acea77b8c2bf8e086a283ef276feee8a14f43a765d88166e43167b65ed127907b01ef211177ccc4343d42aa8871807fab669e264ecc4fec2e211978d9c80c6b075ae86cd48387040c6dc30dedeed0dadb022dcb3b1fda2a69c9ec9fcdf7f17b6a9df3bdb697cf15e4ea13050ed556db850c11b9558bfbc5ec5eb1f4331270799ed2841f6fd8e0587f086a0f91ea1200a538ab85173b3e9e3bf91c289cebca26ef2de5acdc670dafeb8742d1d4edcb9453849f7cce87f10b25d5bbd763aea938967af3166037016c28ecddbad50d2bf9aeaec1aeb664db12d30bdf8abeea97872d8d9680e002e4a19b84adec749908bb07148627c8c0c33a1cba62c0579fa216fb9d9ab419bce5741622100d53da71dde025b323690df6cf90a4e9575716f7ea25c1ea50dba603f1acfe3b22c45c66c8e177e622a0629fd53e96c84b4df008d416f3f66459477c2001c3952f2d545f86279f55a34ffa784ecc6355e68fe9c68b074feffbdd408be114b16988e2836f104cad235ea66bf32995dbc55ae75cf2e2211b0ba7c4163194763433959fd69b59133bad8dc27e6b844471757bde2ba7b10d4594b2639634c4ae2dceb50add1881ada33fcaa4e81235a4c4627559fafa7ef3c8f57ee2a6df4a9f2cac0d2ad98c56f6d56ca15fd2d60a5307cbc7efa90752f3b68e8c92466c52f739bb17bbf172713d85fa88a7915359a667859d96f3911dc92e16d3765c1b0d2a4ab28e522f466d475192ca673bce7552260124b48d8fea2956e11564f9869045286051e01c7f25407b834ef70ef930928304b569b6a7cfe58ad8eff63b55c5a22c22816e6727ddac915512fae42a18e8e6fc0256e6f7ff27a454d1586f305b9648e446de2d9a17a60f20f08a978e96fd580a9399408e3154da1e9e526f2608185145c6eb99e9a4134aad6d6bb14d7f10c3c48bcd4b089bd0f80b66f8aa849623cf2f60b9a5230575e2acbae9c6ecd016338af21627956918d886e6f2b718d2cc1612d0df672b628938a9de1e09ab603f6aa84dde6c12641a141b9037b338be5a37d1c763fcea772882f765197dcee0aacec1100e69e90b47816925befa73ce06dabdffddbbb36d181a1c102566ef2248a1896c4fa9d3242e0c6e0c2a3109dfb75d956dc322ccfd6eb85877e15e8b5a1e28be526935285dec0f27fda5f35cfcc0bf620342e6b6bd6a3c0d305bada3cbb81c6faf58910f8c452f43836e590fafa3f9de170d40c8420a73cac0c6fec857b2104133508071dad02a548a52531ec1434c1250d522926d0e184ec7c20f8ea88c3f90f7f90223a257e8be026d92f982f84f8df749f2d0c0dbf06f87f4adaad6ebfcb97e5e926981205dc4f66c7ceae607e86ed4a2d9a1fef2c23590de3663bba85d6055a53ca454baa692d8e5ece3819e95228df1dcf829e2c155c298c4aa35b51ce3d8d0f7e11cbd42a2e7d3ffe349f1659f2bf5cf8e1e886f2a82b9f2377e65cf9c1585928ac5fe37f00d2dd62426fd57b827d6760da9a2725c60bfdd85c9d046ecf151f55fea2e0c1fc66527edab7f14485615e7e2f96697606f8b6841f768b3a47d06cc708e95759a59ffa16f9f85f6794866717a4875353362da067ec43243b360c3587452d7735749c3a1dec230c37f517830a7a49879af474053fc4822e2e10190178baf682c3d968d71e183e41fd808048865d91a55e0f119e96e4ab7f4fe54dd120fbfdc81033903e5ad88fab09213c7288b57878ec821f0e251ed6132aa7ed445dbdbd684c8abfef9b8b1e0aa2adfe1ff7ecb7dcf448c53143d6ba90cae22f86abc3ff07fa6cac80550ef72904b9843b0d302bcf2be8ef71491adadb11d6705c034323e82b30e1022ecf9ac945e9df9999a6c188e5fe9de01655cdd82a3f6b6c044bfaae37e3e7bac38c0b6116b2e35f130901cc777104561768f128b3354f69c0c232bb7fffa87d6f511437f8b9fd80a105282852d98716906c237fc50aaac00ee8915d5016fc93b069b33cb3fcd35ab7b915eba59eca6a49491de0ec377733c73de8562ae5c9ed6fa3472c1b6bc11fee58c93c1a5ffb865b09e1725db68a701c98fe53de89305138725652a8d33481313c8d689fdbafc7e5d41539379aeabcc0253414fb2296afb7708e4a2a8d345ace6b7a0adffa89b1d099bfb0cdcad5446ec92c90af2b6025a953784fb6b579e9e18123803ab2851efd04cc5a6a82a1cd04b77295046d798a6f16a8cea76b378c2ced39af29c36092c8e6dd731dc51e979f9a544a344dcae27c99205ff3c35f6ebdc043d8e4f9c233edb9163d434a674a3444c44f4ee294a4df91d93830e31350f193cc4a84c898d2fda968e437ed2d649f1b624e10b7181ba06ba0ffefb4e1e0028343f71713224845a8466b1c77b09aa2e9ef15cfffb274fb75a6c092d2a9ebaff0ef72c4d9d24f6b2b9b1b156cfc3662c01624111720b50501e5af5f804b11f758c164a4b2647e60ef651aa7c7318dc0ca04e4e0866498af4c3fe1a1db030c94237b877be3a0fc25af479f2729f9db437f19d0c14c442d47f81d1820f5a6583c901779120e4fa1f5a3d230f8fd7f46ae81d085abe5fe7a02db0025a7c4fd42f9514a0888c9926364f77565f832120db4be9317736b4d479dce5d7ac0c789ce2a9cc2fb74887f2dad206dd30666d4d819e4d17c94eceef954a4fc115e7007fdbdaaab0b6b4a3a969a4a6f108846e7388baca9b17285619530e596e6fa8de5ae7b7e0fddd7c34e8e5e822fed72793d70b89c88f9a0aa080a16b271a14e8ebd60ba761e61afb07a48134d6b8312ffa4fa2aea87086f72e774a582b46eb2ece9917dad62a853c6f9e090d2565951332cd467d44c595c2fd1696f43268f32b7439eed07c68506f62929387069daf10f8c929394d747faa41b564c3a8e29348233cb5fcd4de8b588dbaf0d0234ac558df1a9fb335e00b6de849806a5a9ef38aa789d01f3ed4414ed7cd31362b14e8309b92795a46371ac4a00e3ba3571bb463b9506783836edcdcfcbe19afbf2590d8d83e58130ed2470c31b4dfe5bed9a3e7208b520adfe4d56a15d1fc23bf0ffd2d2d1f39aa2469e76a3e80df864c224420ba7bee420b2e89db87f6a87b7f2fefe1e77b8ef6c748fb1d2c28642437e9d53cee09a549519fe0e42e78812cedf0bad05dcdbf467989dae8c27273b62ca9000b75a12d51908e9ef649410dfb083994840d80ca36ba4a99f0df95c398d71e2aecf03b72e0625870bb5e5e5b53a192bb77166fdf11ad5df3d04acbf3d8cb74c87e0a4239b7f7afe3267c2d47bd02004a6bfc810b1ebc4ba36fb163150b83c4902a4ce34584b7ddc233668d13f64c1492591bd5397f1df3b2d72a97fb484958c7971c79c9597c5a6e9f67f28f5b20eb1d3fc0cdaab75f5610ea7b6f55124bc9d8e03ce64f78af6325e4a72f112bef2532eeef38d7e6a4fbf597ad538e2bebca4c729cb12f34804d2a1ce289492d9323e91d377f1dca102893d2e683db515e9f1ebf63ef784e03a7fd72bf0d93375ae101582b0eaf2dc385d03657d7e44e3f2725c1a4a3a07410474ab8dda90dc1c1b1764b03a31f92406ed491c70f7aa2e44020faf5d1af24c3a3aee6f1b476d2b5093a77cfaeae13a2a5bf083a83496c16b23cd9c7121240d7608930fea9e31841f5a510daf9a3736d167991cfa209c71ea1638c438f948249b398dcf3bef48ea3bd25d176b8948a1a48b855dec5f9cff2a69ae284395c5c4d9c3287bd2410ce21dd3ff6c396c1011b6f8d40cff17c4b3bb8332428a1c79283349523f82171edcff8b0c31672f3ee64b9a830f50f58c60e462eba1c38a94677be4b1ef9d12b84823d22bfc8a22c453e9e42f6267b62bfd0c4cfe5fd5c72f19e6bb1975d3ab42172cf2d1db136bf242edeb47ae785243f100e4a6ef0ded8a1146865f82f09d9f5b8d32660c36bc602ba36691007b54ba497716cc86fe33e68eba74e41ec910f3acedc7bfadbcd734f653ee6711750358c9f7dfa586196c51fb14350c532f519161f706a7ef00916a949cea8afc4da60299ade110dffae59d3e8063bc215ca8102d0d41612ef9875ea96272e320fdaa40bf0094927931372de6bbce92885b504cf2bbc4a641bede3dda1050a178d585e5e998f31d5d82da8d45c3c9bee603ea878f46d88802d5e9337e2dd6c8e0e091fdec748745b281203ec53460ff76f8340604d7f076fb5a08a4bc8fe3b02bf05dae233e042aa44d1aa0e71898ccd95ad94808e6080a2cfc18e4194e7f2c1ebc61341603193a2ec107f10e68164775fe0768a30e306baeb9490a1276eab1b532cca832c134da33514b2e71af7ad4697a53dcc04d4283d95d6b8696ea1bb3e82789c4b672b5134fa19b084a68cd8c835a45f389ca5599f150ff5c00ac71580a5ca25805d5d6aaaf5ee987b85b71dbedbb13158c5b049e9e1c502ecd5639b5012f7c82c6637ed03ac1d5484574ee307e7f4deb26c3bd675c5fd1a5b290c860341218ddd67a9ef0d0ce295138c8b2fc48a9bfeadeb0014462b7632575078799a83a9a955b205e51c0b71b767bc37c477d75785ce76adf7d060ea1b33b9911fbd386711003f2f714f23c36adaa179c81a49326a23cf7394caa045e419d6784ed115735ccffbcbeedf36312c2f61799f35414166bd27c486b8a03394db41657d8786adf842fd2a335d4f1ccee9fd73b37d79edc99471bfa0fbcd58782712193bad3427f413c55270966060a6dfaacf06d56f03664e5e807df1395a533d85ded8f57719b9f86c1df4ade4853f3d8f965976b5778b2f04eb3ec8dba7948e2c8d00b6fe1320508aa223ad2926b0c760c8ffbaecaa53e532979ab013ed4511b61b3d962fac3a6a766190d357799273f73b1aebf4bc8022e8b8abf795673238686724b4a4575814ebaa98ab4e57c7ed897fa9756d6eabdbbfedf9c06336614ad4888bb788714c4c6111617b80d00dd7af73631544a2f6ac9739201b3eebf20644db30786c80653849f37e3bb31b9d14651e4bf56ef24915d71e001750ddbf7f2408069e0b701b0a081274106a4e2431023e48e46013244e4226171cac84cc0bce8d3b30e71374fe9cac748f546a2245044dc8b3f3bf0e2e23004f639e3eb06b8a7da7e3459b909b40058e8c3c010583e8553e50de5039088423e4476396987b38ebfe8cba30e2d12bf108f59e9d13f8f0608354274aa1178267425481e0bf9f96f5cdb465b56e62010398e6d6d5486952bf72f2ef1e329221330c45717a7eb9ce0d7862063b485ea8813885d284271fa3b7dcf78202ffbaaa3fd416932f6f9a23e372ff804e1e8c89e7455bd5a0eb164bffb4aa95ceb26926e38fbd01525491f477baa90bb9841ef4c3d489c4fd598b5ce79a4511b5e2f6772051068e84201b9d6e58db9500117cda39ebe5e7f32f22c97514917b007ba80560e36b592d0645b9c07e2107b450d763a4a86e4416a98b7a2b267f15c2ef790c862037c2d168e794d8ce4a1c23a9d4f683139229b8e6ce4f2ddeb35d6f339843f51f8d5adba48ea32e3d054b37d21389b8590960a8ea57c497b4d65c114f2f26150a7a0fab8c6417031bf2d57c6faec06caacfa4642a3362ac3a96c5bbc42a6864ea3b45dc66acc516545675fba306768c49c93a897e5bcd9c71c2d38caa58bd24a00fd3e1263e5668162caa9e2a73c6770219a89297160079d73def11ba74b70a95f3e0fa8c1872794a856f22845e54639b66665316865802b48e64fbb3659e62a886aef45858f0ba28ea878ee6a76764dc68676fe1e578458c4e9bed8000b6d537b6a3684c6f7c0d943179880cb77d5a388b303e2340c382ffb2c9921af475381b503b5cd585807f2628b3bab895a36574e43f32b171ba97c77d298229576e836671e97d264794dc892a7c00ab08cd997cc006e2123a47e17f9c3f65cb28b7d9a7ee7de19aa8a0329acb4c8070b03f6680f9adf1f258fb46bc192944f5f33569a6932341b460cf4da8b083c857d06b860f515d668c430be35fff33981ed67dcdd4b7806272daebb7ec0bf87d1d509db5bddc165cb91cf8bfdbfef6b84370e8c9a0be1474eac784baaf838781d8d1b0f53ba053d831c5d35a19d1fb240b54e2bc980202de9e0b98cacd3194a59130915bf92f0d6c4d54c6d00764140a3dc4d7cfee4babf369414825a6a55ef132518e60d1922e96f16db659c21f7125fefc1718b20fab500b07728813d3d494534aee5437ae6f973e06f0d327f6356707bd465510617e456f2c6c18b036833a7619620f6aba464e396db7d2d34d442bd3e57c9219564898569a0b95d682557058e579976523cac96375639f78553d74873780411989a770a4ec136bb2f7ec84590f8975a63df71238ae49dc7a0ab9d4392645a405d8eba0bb892428a7d3d155226baaff49fffb5f7c82933df3aa3bc49b601f74d29636fef9ad55b19480e8fceab0c7710137572ab536a2638fd0555270ed8ae394af71b1dab6c1474d242389f9125efe09b23f654921576c279f4ea761423f8581f381b7834d34940435a2b3608d79db2e04e8a3248a9bcbc70fece108863c9c645d11df6bfe06822dfca5e406cdc823136c1520c96cb063ca2695edae507d478ea2ff2a52b2d2ddba4ca32ed880f15448ff0f557eee89cac96f3b0b63f053b0664b443127da005c20432ba9342d0646038549f2ba89b8702e7e9a2a079b92d0b76575712d909931ee19918e4f697eb6291cee6d47835dd5902711201195a0847d578dda3d9f1fd04ab0b1ffe23f33b5ab44d381a01b6481b3d3f43db5cccf8e0ea2caa60f177ee2d0dc9ad371b81b70a626f5d2db999268913166e0afcc16e0d21759e417e6ba7399af422da8ad7eb81f4a294f03d79641e215ae249e6cb43086383e430344e45d7cad8b436409dc9a5b3863e3c98a603fe4cfef6e319d23ed3e73140f6a9e088c8b57a4b873f31ee24481c1ec9bedb24359aa61fb0bdbab7b4b551a05ecb33c6a20b115285a0ca0e79723856505f1889ef8e90234dc7dc9a68120acda038f6cb0caf8935d06ae7a0a07b7b221ee647130a1352a7e162ddfe4c9186cc686eeebb5526885900da76820625cab293619d58a52d44f5c440c6e2691e6f1c35a877397aba8ec1df09b2510d69b025e1c8eb0bbcf1cfd206b48048c5591db390745036b41a88db75760875e1a7305ca0f1fd69623ff4f0ec6c5df0c3be6313ef854f24959dc9df76f2ca47597cf2c3d27a90858d517ff7695ea45b8d5045364d31b83a6daa1979eb56288611a8081a1ff9247c0961bd917b484f69cc63d07a64e810ac082b939a2808115997c7546827466cdd2842e0b276c882e2f5cd57fd4d71e6d9347831c171585e85aaa8e611dfa2b279956993c1fe8703deabec7c09d794673a879dd4c553781bd7fcc3823c88740df7a72eea7df1673c54d0dd4d83d167dcc7cc7f0bda4794b9cc2ba0cc93ee54aa5a876adb99baa71903dc2a2c827bda09c735db8d58e7c13c15a46986ec32656260f729aa96ce784f2814c29a81519675104adcd8f7c0c26748286136500a0fb6391da1487876892cd04f5c72f9b4cd16bc804a725a81a603fa68754dbe7ac2f21110fa0f822e12c760234c2b9b048c51e70b5fc6b90c59dd4d06fa0d5df15e492ad5af60c1c3bc538ecdef01c8b6780439a9175912b2ff8ba80589b4790c9c77e3d44a6753b769f3131dd2c910fb18aa5ca6f3efa7c75d725fa3f8857aa8de65e83dc49a2a3f48d78e2abcca04ed0a842c0d61ba9cc8d56f33738c06828481d7ae915a0823008b1848cad7ef3154695a26c8f6246dcc4ac45fb309720bab09c77eca4e421e273378ed6a823d68d5975c50d251b74a4284875ffc666482e05b882ee3cd4e578d56b4a2b04870515d63c89ad72c00c25a00b44fc25ba5a01d652ba91544fdc814c80313c103c7086e6f2c4f5b80b5ffb7072bc4d6fb76019dddc6aa4181e5cee5d3b3d9e9a6983729b4806da772af8ae3b8f07b8ffa85c61efc54b2c3bf909e1ba71cca2025a73a9799b19ae2b324dfc0776cafa81b56e1b37b55f57fbdeda52bd9258c8464d6ec9bba283c5cc3ac049d64bfdcb876abf753e865428d0dfdc88902909410b94451a0025883b75e2992124bc9cf5e43f2a595b22958600947471d7dab86e0cc318068844aae96914cb99c640909aac71ff69e2f63adaabb928e2c5f3e25ce93192c20f109170dc04e4054d07cbcc5054ddbae419a4a92f86e67c2b9a786e300645b40bf3e4e00670f85ade69ff19eb524d9097ec04152245accf2f6654ced6ff12d4e18496de7ce1def234e67e7aaf74c6ee4eaf7945ce0553912082afb5b16f78cad0c18eaf511f5fd2ce50a2ec593574bd39762cb8410142c3e7d8c1b27272961cfa42c9c7c6c081d55cadf220326e2890c6330a8733eca0362d0616cb463940e0866c830a7a509ab6d63e76ac4386f90448a4f393ac4cff27ab96f5c7a903ac2a76d4db8e96baacce1db775b073ba7d180cfe37425d232d98f9c343a4ff55fcd443829d44aae65ad9fe2c2cc714abfdf97014a06e2a035bd3a924b444ae02340947542b7b14ef29aa000c87e65d28244b9c2c28912d84df903412f39432bf6d517b2391a5549d44803e3e8c78ed0e8126b23ce87957f96a451c70aa7962cc264621d91854817306856db18bf5828ef9efb970cae4749383a845906781d6a993945c67cf0159d01189985ecd09c2f3f600df6eb67bda5dad4a04904270c912b257dab937deff24844cfd219ed826381925eb17909305c2a56fb4d093841f336baa8afa0236e531385ded09be87e70ffd4e40da801d61c9e30fd3fcc56e5f381dbc71abf568f854ece2dbbe6d05967abd0eb863b75c67e69dee1478e8a61c3f5226beba86ba853a7d2cdf78466c44c96bb2dc3dfe19e391bf32284287e215e743a15f17af055f654f96d8385e18ec8096562124d74d19eb96803bf7c3fc83b58f95079c5be39cf566362ffce1217a6bdb3db6cbbe8244deaa972ab3bd8739f215fb5578f85e2e0e8e1b35000a1b8e9460bc989f42547999bc70f264cfff6f72dc9b53509f2074fa04c86c2b6795f37742a34dcf09b8cc6e83a4f4781bd9d7019be821b678c5557c7d33b063bf3105fe2f51a1fdad5221c96356ca86768510a945a5fff71c32fe4c2d941073a25595e01f538bbc10f94b5f1926145c88fb892767b07719e73f69f5f68e208d1787c91683c3ad2d3000e37527d1b4c42390fac4d9913cfff98e2d2fb112303e69a447f325a4a5fd895fd933c6d816ffdd4d49566e3c6ea13a656038b0c2edd63eca355ce77c1d3091ce2ad59383796ce6d0d9b5d5a625af56728bdf97eb065ef1093fbfb07def2fdc451a82ea1bc8ed7899ac20644b0a5170c5c6b57fc39c76c2566aec81ae44a284acee0340bc30ad7391717de2a5858dc35620081ece8c8abe4b0c79c0801f8776a6d442fb93adec5e1098880542c9f720c91be27e595ee9de6e10a4f8a1b3a50db3f19449ef70914247582e36f7f0eb097475ea403e03a7d152691e9d0397035933187bedce50c5538e9f3b07ca7f513efca94b2ec00398c5ce4f693a88ae39602e04a140f6a1b25a1b847e9053079d05341a337792d88f4f01e42290cd83598e046d76c189b37f7cb9e43e953ecd493967a7e50eebf5c8319bbe4a240cd0982ba72b0ceadffee404a34f6b7a3eb033d9b9c9e60a65076671f8bfc754d5c1cddd909a7b98f810aa44f394806010390efa8071b1bd2b84ea990f10374aa26cde1a412f6808fab785a18056e6bd28d29d366cf55c0461a583ef9d6d198ac23d69169ec0677e18e0645a394c1f352f9477026a8d494ba1f305a6bed30dfea36ad0504de890f3c781df63a78a720ea29015b6c0e071b9f19b47c9a53068894edbb3e6d960fb13c0d1e3dfedefc84a4ce496987a132943dda5d311c496df90cded121ff216df5dae0fbc479ee9e263d04522a076f741b52822f5a83659e294a27d618e8d8f32e26a9f19b7b63c68d2025a3b0c9d0bf6faf2c7463580cc628d9f90a6c66d5f1e94c881b21f85f33c629b3b5e21daed71fa3cc33ab5f0f2ac8c93f2ef0801b0925f6a62e52a484758595f955e9e380c0ecd9b6059185898ba1f89902fc08a0b0002089f49790ce52ffa757f10cd8833c498c6e002cda553dfed68129749c1236ffd3fe5ddb4e6be6e776fe55ae43f5b50cb4ff214dbe8c346298fa21c2dda516c6a3f750f2c7c44a4d4e72907de8e3916a635ff2a5fab05f818de1b3f2933789c0b2a884b2a309630603e986d553141609d6d47842950622dd29e1cd39e67fbfdc08c65d05dde62aa1327a099190845ee77e31b6bffdf10cee07f568bfb034d9fe77d88c48c80fbdb98238c953d7f1439e912d2c051e09d63c6d50977725b2a2dcff76c3b9a44df21338c43518fe5f545b41c3391c004f837e98e25b8e9f733b7c5c5493c125d584e9ab860a8b5ac05f81cad91be1ab56404f720a8fc9fc0675066c36ababe0d2d9f72e01379e17b6690880589458037fad32fd7e957e99a0a7358c86981865d91b44262f280a5a6f395f16b24fec42a8d61b7b112bf28c2a3032faa45f2ee2e8e983d611bd0069b1f5b8f84c909ecfad5a0807f74da0dee7fc17042d2c87fa05b9b0caf6fa1246950a8d481c2ce7aec6ccbf1d262ebbe7d3b459f5f0d994b90f1a5e4767e2c9661fa3f3d70d130a01fb026ac66dd35e3f971ff2127f07781438ab28730c3bb74145056c74893195b5c51d2cb2e5c5914a9f657aca20f774f1f2db5b80302647961025c4a9ca73259a42734e3d26a5635c0b578b31b4528799d1fdc236ae78bf4ecc5a299be7703ed708ab5e4ce227d9dc8f07bad93501050c652aff7a59986a3f82d2216d61a668b5cade35677883d5ff26b1fae05426c5cc9c04a38010e7821b6de14ce425ebd7dda906d27c929f24ee2ae1068b3ba6d3462afdb305f05d327c3e425a62d4370a30180dc8eb7a267234ac7e7da871995c87a81b0ac3fcf71c5182d6e3c57bb3d474ed7ea5a95eae462490a1109c1cca3254e9464310f9f91cca15e3b568183335d626122f0a22d617e09b8aa504998b655e0fd698f5836730ead690591b229c0f49d22a7635a3bcec9556df4d1dfc112fd767d3b2b43f8a303c9acf5618d3c8bda1d1527986997e13ea5e0d45a86eeb3931cc49c84698c371ea3eda980705dab9d679379102f8570a9e23ab962560c60a6c740196291adf4fde1554780d257dea9469bc68ff53ce4b9538346cd84c1eabbb273a71d3851e92e2aae5fb14ec8eb42275891229b527ae79294d85b79ba93f1532d2af005ec3cb4b0dcc33b744d93c25dc97af9be81a2c30badb7f32acd3a46bd3f7c34a4bc9105e534abe05c18957942d8f9b7148a24049a641efabd6c915a0b81c46c655d1c485f9637430652034380a639ec349272bcb46241c2679af520cd8d8179341870185d383c840712c38bfb6a8f2918ecf98924d21975e90349f7bae79f366afaa1f4ae1f413f5c6d0bfd4f2078dcf017f336a5d06635c9cd2565038c3406c8e7b6ca26852d22c44697e67a567efbc4237bf1e8ede339694be9cdac3eb3671f23106d31d155b81a836a964ee28560dae3e4e9ccfc8dccae9cfb9cf0f0a352b5ab58edfb40f4b3df4f93530261fe413dc1b0259e062e9be5c5abe67361a235f26aecda791e561369fc97c80c4ad7d570a7972715204002e0ba8b10d97943fb3822834f81f081260a39677c4caabd404fcac4034cb5bd46fb5606f747b6cf0876a7a4f422e6298f1d7c91455630d27a70f3a8ee8120eccca844db4f4aec1fa3cbec1da490f5e58cef57943ed1f73f8c61a5da76566b8a40ad58a3d03a1a9ea2e2470aadc27500b22e5429cb8f9fc3491c69c902ea4c7ec764127faacaafbb1ae86c7673ea303c992d5f0541a58c9a5490e2a9b42f155b104c1947027357654abab6315099dc96ef47b0d8a7cd09d17034c5f606817b67b87d65016c132f5254422ee66ac4ae1076177f2391437546e75552e1104371ee21b5ab0cc690b2f79a0025561e0300d9a78d05f271c04280fcced4acd26495c93ea403b210dd6455f2993e6ddc9df5fbdebd90837fa448a9dae18bff1a4403a246bb01949780707b12e7c8d6fb39a4d6f978ef1a0dcce3a879f206cab9626358d44baa1fab7cb0e4831a9008b05b4b7c094df66c198dda359d7ba44a735e1d26b5fcfd576e1ec681d2b61c9c6f8e6953f78507cdbf5188d01674da61249fe702d8d25157d7f09ec574e3225208bd06f1e2b5f61419b01c2f28127eec6992ffbb7850fd840b1972ab04eab2fddf3c0488292d544480f9b010ebba173eff00deb61a512a31ff56c590cd8f3897280c6096c64a1ca7030c8b5f2e045c72710a007f3faf177945231c7f358fb83f2d6fc46194c79bed8200c7e5d56443f622bdb22af4fee0d114a1ae7e0c0f338e8dde1a242b0931c830237a2fccdaaf134470de8c2d16bfb20b16c61dc55a6eb57e735f82547c7706326f35c2166c23e0fa8d68ccc13e5f473aa14fd521d65349b76a8c225551229591f123dc1e6f6dfbc1dd3ee2313326cfa2452443806e4a7fb49beb4a7426e32a4d63184c5054259b75d445591dbd93fa3a36fbb5bd54d7f2e5115559e136eeeca2ca2f778f730ea197c3c2d2f7cb006a5dc39a3816d3d0ba199f72d3d1a373f714f2211d1ea0174dd2627984bc72d76e868174ecc298c40777f3c6a5ddde0ae99d72dc58abd0c0f647c88986d5752e8ff795e4672e0c6b2c8d42acf0f67ca46f7c75072a03f8b3fab3fdf47a0a264687c241c40ed4f68a90999f6c2374fa9b181a8370908a1b969f39a217e6376b592ead5fc269c239dadf175ba65de5c1cac6b1ad310b0932810befbfb0901434f3dc1907f1db12c5621295bb350be37ccca5e0e84f366ad1ba87288ce1e71cb21cff2efd6fbe5fa170501c0392490ac36924c70067d9a4801c525e78ed63aa137ff5e928122a6e3d82a218f303493ba0842f34b2a63c2e5a411d9073758890e5309f2b5fac5461a72c40cb2650ab9ed814964d6201cc77d28e234496b4a6ce5cc095695d6c661d306df80e8ae1dc96257f911a53fc4b3bc96ef3c2cf0502b6f5b68f30735b76f50922de6ffb13aa74f3f6c0d077efa03774fa210da20fedad25b5952d8d38acb556dc56df074823676345615893ffe3cf62d64c7ef6057f1438545087b1939218d3fd586738a322e50ab80e20a96610361f24ee8fd6ed52312eb111187e128e0787ca1106152baffd37f152f52c057fee658b5e013df6e966446557c9f448a679092f6ad72bd5ab5b18ee2dafc3dc3a3783e9105a1dd06afe2933d41d62cab00ed6184ac515d8c9f6a8993dc38064c3c58b27b68f6b4de83ae1d5e93f89b82aa44bc5ad916e01c4b0b0c519a55529d2fb5ec3bb1784ff8fd95a7378ce71f94fa59a3a0c39af55d5ea78aa856443e15c126d93af61bec50d0fa80aac8b2481d76fee0c0bda35ec24dcfd9a6556650e720ad1ab82b0aaf76f18f3b68a9c9fdfb1a19c19522b42e12691be4c9ed543a3107b07dfa51bcd5de0323ddd322db4ac1b85d17aa4fc306c3eb8df800d53b917bcfad2e45c8a0c45bd4c63e1c946d82bc429faf97044584f20c64f1b446e7cfadccb3606d294ca730ce3200b1eee9ab426c747c9f6455f218500249ae397c4f757312211aae66814597cf3aae92fe6517b71fb27126b50038bceb14a8f70d3177252e4b24c29fac42c887dde5c3e58673b0d6047f3c6e87e1ba13ba4ce402fd0da74ceb472b82ae8f494d123a548b2c1f0cf7c8d616c8ffe8f8eb3415728331776fa8136bda50ddf95d3b4d5b7704b189aeb8d265c1aae446e13f4fd0b7918d4100459c3320197e70f013269bfbbee700479dd68d8561d3f2a24064d8307936987a0c095d6a722452e2693aca00a31e87ded9158033707ed8d640c50ad892bf5653bd8a831473fd84d842f682bf0b7fe81a42d234471118ff62203b2de73049d332445e33319e8fdd09df87b91f9f393fe3fae6c84a89049a234135c3b78bd50f451cc1defb29f309534c222211faa20926aa98f06580e6a8d6b040c7a694860560f3eb268eb865edba579026c2a73889eda4f33af41b38e5a3cac819d63220e41405ddae4336cfe33036425ef2b2a75cf1827042ff9a1c30c4d036716ed4d9e159d5f4b732c152214e1bbefc4f03c0ad07f2a6a018a45c92df342cbf8eaf626a69ebfe153f43a588c902747ae3324eaaf2248e538645cc9647f8c2e58040e87f509f98661dc7d73ec024edf53a67d0ab874bfcdb123c4d54657609c3961a643213d9139f71ecc033af7fd4909e1800ace44bc1d2ed87e0fea3dffaaec9d38e89174f7c267763e36d012c1727dbbd583974940bdb706c3a6d5b278d7a5df046dc24b52bf5010ebd1262902de083627dcb87e3afdaf5cdacf45ccc30db7b8af654d453bd1a4157dff33e3347a4b36dbf98e471654313a68908718935147ff9065c3880689afb3f96755dec91e4ef2df644deb281f180f63a0b5044411f2db544e1f84f94a39da428f431e9df489673319b2b7514add54ab47fad59399d3e17327b9a1cde4cae9729459b46ceb87878158ec805be2eace114dec9b98eae23d84ebb73d62c5f274e4835d917c575401f3ce7c3bb11892ebbd93f0237a215876e950ecdfe76c47e0b54d64c0546a3d540a2b4526bd7dfb160900f937381cce290a93346cfd03d4fb8637a569cc67942a61153faa64dc3960f66bc2812058553654a20d156726286eedead0201ca7839ed3bd3e49ea0560268ea0600b683d4df2534bcf93f1c13a9e66c26bf5d2abec32fd4b679dba613e96bc1fd864a61a2dcabdf88df464da94f9d57b3abce54aeb0e8577009a2a39a46972ac53a06e8fdb5e83de78de464d0f13d2d231fb585073d4fe904375487d4556b220d888e8c93a7a7527b22488c111bba41de07cc55166375e0e8e6da65db8615eb3c605d0c22447ef2412f85c7c850e6d995607c27ce829b569351bbe271f12948252e8eb130f1dcd350686f173a1220d99b2bdba809c12ac565095a31f86b12264a581bc27f98f9db2932101f1a0b4ea3855fda330ee24e723d74abc8be93c2bb18fb3f0bedc8318d23135d12e8acdf3e88b738dd6fb5c8aba07dea82cb99ba5779c55c62d1204510da8989a0c484dfa22c878f3bfc28f76f92231c1e871dd01e643188115a30c290d048bbb081ecca9d50684835a288cf261d856471ea33ea0daae1e4852a3a3256ea2c84a9657c90f1696bd8a9a6eed1f70e2d50c9754c76000cc8dc1e5579927b4759a6f889b9f5e24e3b247e7f149856cad0163071f275567d530d3866f8320932b1a4681843a4ded1ad56ce15617a33694ceb7820d515a960856e2c9c8256aa1c5a6a2570c62a2dac5062d527e2e974700f0c33126c744d6c7c0bea46fd12888d293882b2d28306653ecf6204ba4e036a9e8d164b89cc84bac226a64823aa55b085a7f652a040101dd5c36ed0eda0375e9802ec2b7ab30ae7fded8f69160318d0a40dd1c8bac3ed9483f6ee075fec9e578a54771855369a1fb08ab40c9b9d3da9d30bab1e7b2d34cdebf74b748adc4a7a2c96ff56b21eca4c19daa218e2a0ea593f3398f15b3f14f63eb4da1e754ed4fa0ca6f282c2f7e6c7470f4547ede6e5b24fab15e3646592bf63ad37670268da208f21bd4e415169d87bd149d881d8dc8055b2a2fba2277fe89ef1b366b489b4f8e7d6ef77ec827b34a2c793c511a606a6b1bb8dd2b3a5d74bd29ad5de3b9896f88079b66d2b5c8e0b3aace4b2986461b4b16327c2ed24370ae063698b2eadd9f24896ed47dd6e08dd117e6d035a4fe11c19d664bb053140a049e72bce9dc9fccce8aca0cbd7ca7b1db58deb491f5c0a4e8c935cbb2006982d6637da44f25bdc734122e2a0801ff4c55fbf66a4dca7c875c0156356fc8f33c885a27627a6ffcbed7ef7459421caff9a82f4be568706c0050f540e34cad7c64dec9fd95f7ab802e3634370619e2af4d96bbdec48fbaa16174010b489f5ae6462a188f88cd12afdd06587bd1eb19ce7b2b607060414ed89c1b14990e37e71f3ad5b2206d0cba1c05d6acc365dba500f1cf5655b5163e1390e026d3b111a8e72f177648c24e7e3d2f306a957579dbddcca2763c4598ded663dd36b9e4620535d68a428a4b15dd047b7f7d3545b0997ae6558b61b579af19a985f14abf380d8bcf6f298a14e5f9c925776a786ca04527f03d1eafb9d7bea3954bb7d89680b0aebd269bcd7cfed6cceefd7bb4732ffcf7c437d2997bcef1c933aca3d6e86d2ed6d1896876d7ee860cc1cfb02f8135ba840f7caf4f51a6362b3a432324b8cff26ad566370cce7ee034da2d772e350f24a6202d6010bd7811bf191c398c27aef0f6b8ed6336afc2e597996be15589693da38bc46ae2ecacddeac3d9a55ff57448dcc040cd9be325de70251ebb1aa8313ec8d3855647a0680accb3d591dee71deb780206f20faf9f41d85559dba07624400cf35ef3546ff93a9463e20df224f2f2978c0426db7db7d41b4832b7222c38fd2f0812e7b2ee5ee67c5a9a7dadbd018cafe2e4aa9c79acf4093dffa4e8e90bf0bb52b7138289a159495768cff0f0d0d8506fa30f1fa3975aa0ea1a6e2cdd54d8acfe28907d825a7023fc8c87ff0069ff575759089ce8ce833761699c47fa5da725cb63391ca89e4665d1c3735eaf3e0c5d1440c0aa38475c8be3b8891584f6bd6845b7d84ad8e01ddc8c4c7c23e346fd295c57b41be486f281051c1413943f700c89eff5086de4afc8c71e998a57af7418bae69010bec8ee8695d066afbba38d2cc731c8dd5b72876243ce661e6b74a565d1f669e773283cd43b61d56bca1729426c0ef45e474683ddb595cfa9fad3a30f28abe4d2e12d77b288a2a383e34d3ed7b0efa707309bc7faeb53d50ef91402d8eb966361536cc42525b090f8918224eaa7ee3ebb44f5feb4028ece442cb5322275cf676c1a5a0a683558d44d3e8f801fdb36f58bb7db096e2b859a12c91951ef85e5347cc996d1727a08e482bf628dfcd943c970216162543fc6bcb357efe57a044c66bf19d8a62be4b7ac2729297ad60d5c721e0b678eb66aeaf89a810d35b337760b924d3a45369df1bae134d5186966e0b2717f25148b89e9c127be09363c96a5bb2d55a9a8ffce57c854556d104663f65dd844b1c625b44318eb513a9c0464c59f81aa5927accb6b72a655740c438bd3b7f5ac1f77cdb7f647be26a60eec6e7f0f73c2641b70750c18ad5d12a8164e437e132770f50f03f9f97f643a9aca05b9bab0f063071386bf6611e63df91d79502bdfb2e109c9d38e3a08568a4a6582f08d92fc9529bc05bc5421f1bf21415acd11c0da63d9954583716c26443d028d4403b14bb1e54407ac4dad38dc16d1b3b6f6002907f70b6d56b2f9ac3ee586d1dd373b4edde05afe467aee6d97efb75bc4d8f34fc65f17e2aedb83e8c28104c874841773f91632273474868c5d672a93263d4f451ae44061e9191db560d0f2c8eba3764dafb8b767b9a6b6173013d3712ff038ddeb72b3ef7df5f5f1acabeb2907ae86bdc5b5dddb5fde1944e5ea354ce3d4d5a5ba3d7867327ca04549001575590f8b1613fca7f8cc8c16aad3a592fcbe0eb7044ccde539416e42664482dbe5af1b4b718ab332e46d292c30ae1457fcbc68bd3300a944fe5d12343f7b7602fe1b9c5c582105446c3540f7b4a32b596e51dc387e8c55407192424766348b564b3a41ddd513ac479aa564bba74ce1f2a0d9b04ec3edc09fe334acac521226b3ab613eab4722f37684b112360d1386342be2fc3f2132bad871ff95e3937bd2010e944d9b0b96510a83989940406d62f0d4d179b50e71cf033422adcefb42f7bc19a0ff870b41d80048db7763fe601fc832b7267b23eddfa2a11ffc5820c5b46e7e20f39dffd680dd8d2a0a68c0f7d8183562e2c97efb49f0e8bf67123872572dbfce6e41d35525f627cef5ea6cf34765e967b1a6a200c4aa78e8ee759505c4132d58733807676b3966354c8373e85e7f7d9feb4702e131e7ffbd506367e4953ce75ba7500c528f62328a8685e2021d10ffe7cfa3bbab8adde5826b25706c1b23baea45bc80fbd0d037b83b51cb312fbdf18a39aef61b41c7832a85e2568b1eec5cd528e7395b4753a437564c3a01f17dd0a77a42bb3a0d6e1047e6c01e9b3fd73e29728c7ded8daa814f160eaea328b30b746de8117357d0a770b1acc9117c7bd5db16af70d5a397002e9d683c3b08fa2bea7e59a1ac488ee5c40c63e6b732665c3c8c8523a633b5158d077126aa9cbf439bac9fcddaa3461dea2735fb7d58e138f2df5f14dc6c99f85134968663d5876610415a3ad3703596103ac4138eac50297c7c4d468e57c21c36b44acecd6bdef29eaeb8b197b96a3503bd1b66fae7888bb58dc0ec13bf7f2f152b1165028f45af8775ad873da9ea7f66810b378e7ae7dc2d9299abc8e7dfa9e79268018a1ecd8efc51c1e8b3e3e3f2c2ee5eefc6ec08e41fb2885b27c6293c278d7259d8865a6a2869ec7ba6088ce1faf2addc5153d4cc1fe581575f4a10a5ef6a4944d1849012fd0d1c4e48d72af708fbee0df6b3325e2652d3b715499a85337cf405158f263c9e088f0f66cf9b164d17963f5eb2322b30e235a170a805a48427fbf1a389be60aeee8280665dd1a235d76816b2f9531c0c9a24b12b531ba5c24d941aa36ab64a86adf1eb67e61949c5a9c6d4ddd62237c519337ef723cf529ff443d2890857a3a32bc7cbc72989e38317459f9f9d4cb7bf8c5ae2510bb9170257097b0f6c4743e575d6f329d94edc2364588b621b8d1bbdb20fb4db449b788eaf5f2a8779665ac7af75edf6bf492a4a3980783403f6a78c2627d7347ab3d94d057b35b04b29787cd7bf3046c5ea1feb1bb4b6089092dfdab626861232be83204fd8ac3c82b02d1619c84dd12a0e83e8ff0f0e0ce7a848d3ea28ddecdbcbdbf608288fba47b05cdb697b0ece593e33fbaae43c38705defa3ebbd6ecbf3760707d2e958a0a9ff1c604b913d19851b5407d0048f39d50a15444b902b89096c41ad0a22a545572e45e640262b370dd8b24e0c961aec69d1074fae476bdae111282f8238483af4ee4e5f84d8cecd10915e478d5bc1200c764a8b3f2dcc7eaddf2b003cbfcd96fae6826ec4d5ec8ab035e048cfd7c597fac6d0dd8599596edbd6700886fd1200d840f8e271dad3c9ee2601063442e6bcfed3dd46650c3804aaf9d1f8b7a152de3da9358d147fc82873aaa744a9f553cd881bce697cf6d093dcdb95df9d4aec916106224e94b5075d8fa3104e77e2a72e9507555e9753309a93c92e625055a16a4935d113a286f01c7ecde305e6b25a0ce502f2523e8d84293663a86ac06771f168cbc5e8310c4b8b94091152d75b21b38b13bc1c8c15235b2637d7b5ada44daea1a1a24cbf885c95203ba5559d1bd8c229731332f3371614d93285e2acf705f106a3959755ca8490e957486389768bdb44cdeef33cd6c3f9a10eee2cfb8eeff7c82fa7e94ac27d0e1572dc56449c90884e93fe41196ed774d4cc4cf3ff0e7a0b55ee377165135ad8091c1c7c83d24f2f09990f48a8dcf859369358436abd90e159c4177d38fadf8ffc76af6e2c686be77bad2d50637a52246e2e40901c479dc95514442468b9c02fe525df9b8268b2bc93ab15bd76298098483532a332789bd853f96b2fcf67fb444005be9edc5d1ee991f554907b6081d00cf9b079de2fed2262c30c36c40478c346b2ba675bc9a9dc58454bd1542ef0dafceec221da407622467934b36d053550b7318e08bb2508421693c6ad7f9789353315293e616979b81c1d9c75bb50911585ef3ab1fa8a22ea3d0714de7e379b744a94b8bb40aa8e1555c990446add1a714885725dd4069b82c2ecaacdd9f5be7a0074eb6f7bba5f89cdbe30bbb6cf60f2146caf25b9d37111b4de11ba23737f17c04a120ae994458541e5ad521a7471ca3bc7f0140d04acad9fd3d44020654437c7fd37b63cae877b2e5451b0ff67e18b53d23d4d1e8567b18c1f2665833a63591e32fd36503eaa8d9eb15142e9b788f7eee4378b69f07a739d787fab82c1b64ac3d1ec4662ef223cbcd8f13604f65371a99cb8381b1074a0a2e62f2c2d59f5bed36bf9a8596f833b23f91faa6f50e3f1531671d920a6f0c91d79c580d57f293d39d91c2f02c2e0c72d064d4a7cc1c4dceff1c2d8da61a1d89e8c760bc023d5cea90c0649e345616bb5f08896e2a952b09d0182e7733406a57d8e467ce17680daa2ba8e5a5f63ba09a7f670b8d4561f0e84a5786a13e42ff228dd9879e3bd908ed2a025f12dc3b62320017e0a71f70a437d23dee933ef7c913f4ac0e63a179db4d71cbe08525ad90ac6bc80cd31a656c111df3e431e9862c1255ce2990626ae75e26e57adcbfdf42387cae9800d0739c7c0b084d7b8fc439ee9ce6de4d76c4959d96fde1f232ffd1f18fbc867713c019b8c878320b70396d5bad25c5f9e0a25c4a240b61ae72f589e31c2fb7fc3e8dd8e37cfd68204c47abf2f917d00189637971c3001f934d3f42c4dc32dea831c33b661eaf6c585e3e898387718f308d81b9f29f7b849941803d30fe09f391b6224faea06df5df1f3050b263cad1e69370912193fc801ceddde2da7b6fd0a18b98fd56acf30d2ae46940d97a3633dcf28f910923a6a788b56b9c5de9fe828aee5bd96935fcb3eca2bd9c3996491e87eaaa3f863a45bf88fe47060602bc94179105c14920a8980ef818ead1f86f168d4431b4dd5304fc2d8a6e598910f5261f25c01a2200c25de551498b63077caf477d6e53ef408973174e2288f2edcbc90cd6bfb720a5bc563b3644afab007a8e49198f2c2b94cb722bcf644ca9d53cba544843de3ee1e7cec32ca287eac3df4afcb7a345d6b3d37dd5e034df668c632dbe6fd828769a4006cbd712dc035d591c03f227dfa8f986176150cc40f2f1c3093f124d9ebfb948cdd055b494dbc9ea7353309397e186533a06fa6e7718946f2284b5f05c8602d93602d36c54ea24a32e453826ca9598741b64e6d11817850ad29b76f1e60de4a0bdc4ad919ef71cc20b35096a945b2f02d97d616591f096ce812e00df1700bfc2e0e9c0bb234c206430442629afa2ae0b925ec134af227ae3c258746b04eebebb3d5cc61607e4f602c2cda1faaccc4bdd1d83d0e7e34ae7969ea9620ae18cc38ccc10f99a30c84e87e060b4be7b1e848c01e6c0e150a4f1404f439a21e4c0ee31b1c2d05b1ae180058ef09dd22ae4413f0e72b611ab3095eee77a82576e2d79c440ad40c7f35e746fbeb6060fb568abcba18e79bb164527e679f2cce1f70475c6af569ef6bbca9646c90df1f4b97b89129c324c43331c3dfbdd7d10953c53ebb9741bc2cc1a6a0ce9eef607113157fe005b6523700c120ff8fd9b4c0a883f6d3f69b25f932e257bd8c77e75cab500f40e1a74f2a90e4b17fd6f4e8de1332e2d98228bca2f07ecb616a53cd293620234bcdd94b449fd1a04cdf29027916e4159251f596850a5f1d6bd62796560caa153e093dba128d862d975ef5ab96e4b36a1c7d705e5a9da79cbce2d6695957e8618b7d2ef973eeddb4f230ecb2183d03dd3ba7764e472399c97176c4595acf3af8fc99faa096bd68aa8f4fccc77342123c6432c930dd380db0697acfaaaeed9902ffa35a8dfea30d36d36705c6a96996c7b21c9d4c5ebdfc5d094472519dea2c5887e592b6d4d04aa515579b7f8693c545901122c414c1454722513c871280bcc9fcc089b35579a330600e9002f114c8011d738165544f6131f430df6d28e2d7fad541afc64d24cacf15fc97ae4794e18664a57bcd1562acb05028aa0bee239ff348c4447e28c752ba5ba808f1d3d5653d810c1c4cc1b53a0387eb185a2bf802eb967dba07fd970b85bd0302c867b934065d63477f45cf34567eef1c97bbea2ef9185ade583a6e93708a2795631020b6edb74cede5dcd2d4ac2b4832f18231aa4a7a7c158999313aa169216d4ddfe5d7e0ddb8667ba5a8b8ac4b3bd84a65077f6c00b7e8afab9d7a3ecf5c2fcb1c25fcbbf1716d9884f4202ecb96209c2c544f7acc471b852e392dcb5cff7ebcb4f45ceb3d4b707d203cf102858c15edaeead1aef4267f3deaf691086d99b00638c94b2f172366821463cf82519845d5a4d6665a802abbaa22b5117f5ac168c68de404e57ea42c6a29de6cbfc0176f27a8c2487330bc2d5703efe789050c693fa7efb117e318dde15255d9f2198edbdfb41e774492075c9b7cce72c5bb4878904f3e6a6d9e2d4fbab066065a545a2b3085bc992fc6235850dbfa771c8297d380a413083282bc55dc7bbabb881f08050056743240374e999f45cba508b2db4012818ad1697547c53e8ccb6190a3434ba880bff231bb61b750a1cd788fb7aa1c15ca70be9b85f65a348435fb9ac8f1e451c279788c7a837f99839a3a9b09ae3d68427862f88fe63028836d4a4dbc64a849d43c19d78a7def548311531bf76e395a8b4b0cfed72a13a764858028684c9206beeee11419243314e77275136d508fc4c2f6c505100fd02b6aa0c9a603b3021c03846b98a96a1eb2c4d910d60bb89ba8fabd1039543185fc43731f7f8f08b5774ccb6aa5496a8ba41a30eba9771f2439f8c703757fe9576ceac2af93425501387c9abffded95b04fc3f4285d58eafc1e66c15fc7f6ae8bbeb212e8c4bcb1764cbabe5c113cace28841960b1a8c2a59ab57e8b8d80f25e4366759e45cc09178704aeb825f280fee8c2b4c892c56f73a7621305cd580c2c935a0f8c344e71a144ea2971fafa7bed4baca70de22952cdc18ff5b804dea98d882209fd0c6e77951ffec2196697627628924b86561400023ae6580f70fffb5a2b9d83cce34febd034051778f3e9d639b79a5ea04c43994631c3333399cfbf2b474879652d4c996f93ff486a60af5040dc6adb1f48303df854b1aa7156c2c8f624de1974ceae2d00b6e425396d8818f8658d58bf127398a43b559a57b2521c747f61cc19ee53f2bc6bea6a860a24d5b251fefa4427245f6bb987d6777034e9a3df213848eb50d962900cc7c635a3d5d56ad991fd9544b8cb68e9b41b31826f83bcc21ae12a416467b5b11b8312e866a6e4824c8b853d2c789128823e2938da2612b9e9a254c61f39a8e735da220a53c2a2b0f9f3c0d41959db5f1b298de6830be3ec6acf91adaf5d434ff5e33436ea770814c8a11643b87083b63ee4e442b97fb9c6d663559369db427e0eca20c7173c5789b9b37066518f0831dbd089cb45958320b0d141143c32a5ddd993d702732ff4021b349f885d32ef7b121adf36de05ac79920c29c49d40abde560dcd3864f7d0d09d67f7247266e7e413165141eb0a7842852844e971a47077d93ba1644b3d2eef62b798a6d73d4dea3b3afa98363abca42ba53bb11e571049369abe7948febeea10f58d266810aba7156d4ea134c67691bb6f3e3d410448c199055c3c6f0a72b10a09a23f3a311faea1b5a7a328b98006d8a746b47e3ac999afab3f1faf10e3d3aad723e1f18a0ed1535b1397eecf785e5be3913ba792b04baaddd916fdf5002151f7e3914b122d819f720b8360e1ac8006f669556e4e0aa25ce56f0fc28e1e417a851cc5533f49d1e29b42d5ba8f9238d93e30a6a7eae3a80b1ec60ee345728dbf711007daff3e4ede0959edc24ab102cb7e86144fbbd5ae72750659596596838485c870ac283a0d0b43824aa6ccff16c53afd6d26a87b9c640e617934671920c9d0605ea50a54baf87556b0919875a62325e3749cccc0ec54cfef4351af58a151d484f4e56f889f09b0874ec98488dc15c10866b17904fde6d773982c12ca91879dbbc267b9b23e10411c4f2872bc3dabec9d50bf7c02ce0fdaa57190d847a4225e9d5efa9c38f11df3130460b0b97b8da3dd2ef1ea8424cbd83b67128994e97f4f9b004fe2ec0033a3873ace977fa150f0999f7141289256dad314546ff0d91ec9480b0cab8a76781f60ebdc7d77ba83663521bc7a9704ead50fbfb41313abd87167df4197c92f66bd0646a215a28710d22e6d59a100d70f4f79fa068f681cafe9ded3ec524938b5f33ce7a48b88e56e0e2a21ce09465cfddb82b33a18ac1e231753b9fd76aaf1f1c64f17398ab94ef654838be691bf929610a7ee5fb3e78d7d5192854d67eb43539b4f6acff29a22ed339abb48adf3a4af776e3f9e25c4f1658fe5b5846820379c74577d078aefdc242800b4a29d3f8c92bb9a175efd1308af45896e67afe9bc36080542a5b3a7a7722a3c3ac70746ea6846e208d8ee7b843442a01ee58515c74e12729bdb7ffddacb6411ec79d6478354373fbef5b91bdb5bbd04373e00cecc8d1db3d6546e0a643be9b173088c57bdc7726bd465ff2b0f1b6497dc0034265a328f5c73e44c3ae2a57f53b8f3baf1380582ff9581b97b69768b044893f7ad77daa5b14eaee2d1d0e233d2310238b5715d169a55743f61595e914f3d8b27eac3f5cdd2e394ccbaeb8508dd9e486c468237388ddae92932a60862aa92af6415a0801311ebee88dba8f9b3e84979c0e893ede3da2fcb172538a8be5f0a752078884ea6d09b2892ce58b011725b166eb28c71b0dd395360a6d7eab2726fa97a981e10751308d102326828f4f18a4fcaec497dbd7267f49de296799ba712b700c07c2df471b3ad26eb6bfa2dce63ecff079aa210cc4ebd340f4586588f7eb29fa2930dea71cc30efb90ef96ddf0b4a1f1b4fddc3178b1568109cb3472a299d45d9145dece7a286765bb49aba24f6761dae040fa5eeac524da1a584518446983fbb36adcaf64dc630d113f007fb411ea694531721e9f75cd121a9f69f0d94e0ae13e2daf64f51dfcab025211236d665d5a1e4163ff402e879340564a8527ff040424ff6dea1775d8c10841729dabbe058e86e36529d0d1f6c8fcdbb694263decf7a15cbb1f0a602d38b9d3310711e809aa19656826fa6d77b26728f8220d4d8b9dcb3a9bf821a2372bdfd4d56983966a59040dc47071de4051ab2f45a16e0bec1e2fc7af6e3ee9195ceae39340147af44a3d29a07648a01747caed81ce8835172006eda63e17301658db607cc1368144f2a7d57c6503ddf554fbcb4c66c98b2a4eafdd962dfd3bc766685b1be6f0b15e9dcacb7fe7d558f3c2ffe490cc1ade6914a4d012a4e4affbec84350c6d00316ed7f3ae743ca5c9c87919af5fbdbe27f39ac9c07ef33a3495d2b0c05ac95c7a78163e6ec41e021d47811d8b35b908a3dab8f3428e0351b59f6383274766864b629cc44de536359427ffaf12e1232d9b8a1aa79687243f7ad4b534f751ac4842a9c03fc350ffefb76261380e66ce4272b2467281000b5328d56ef762e9458cbc5f1c383afd95526ae19bf95c805cc61373fa616ecbd38ffaa284daa1fab13dc3d7bbfde03dc39174275f4ba677738461428c4e740f518c534bb4adfc6b301a262e91db417a7286fda4187724377407cbcf5d10e8d6767eedb0552657f9d613a3a0784aa198bd2de536a48b268a8dbc6ac5c6611b5dd461e5bfc534cc7399b384a0199324a67feb8157bb349e04dd9a5bc81e707027bf3ee164e64d00e87b42d97e55b2ceb2c786c6481d850c746aef8852d8937d484c3cf25dfd83a69fb6ee76c2a150ab3d2a0a5dd4ede5e4a4b3243da855b081b1a6656d09af9cdce07d9f709a8626a1021787dfb274d0212403ece2680c88633661c6f18dcfa8aee4184a77fd9db4f99402ae6ed764f09ceab4a43a2f681199f022e28c56af26e2ecbf05e33765bc9758d84597e635760483918c5e4d73ef22e84accc7e5238441004c4172f6f8ee982b409f56f8649ff8dc1c2effe1f88733a88c14f334d9f3f9a7a2812b7b1bbaae2edaba0ea16cd63334d800c90f826beb6a2a9e0157352cf74736871c18c63282c23275a704eafa2d29b390d92247c5b6fddf7a9b45d8b37a0900c31a2066b291df5bae09c9d27affc69be8d23a7203fb2d90f3565fef17856fea07896f604c02027f68fb304046fc534b9e6f1460114f15fcddfd296db91565c215b05310003c6930076ec4f9bd5835934b90592b3850d82047082de61202d7f6b74d1e31425ff2da03c8bd25051287eb88a23b63ad6e45c6a740f660361941b343a3e37531b18ef3605bcf96fe93ed5764cfa94fcbe904c2e89d96358f76da1c3dab1a2aef262027bcd3432b44401d13ee06a995e8c8614871104f312f8f50779bfc079f92815c85146ce2e2d07ef1ce5c1d187b84d923451b55259c8111906976385995503dc8ebb7bdee99d3a5ec5a6700fd9b3eeef4e3c920d61570d7bbc7ef6d5234ec21d592c6f08f4a103164e7438cbc3b3ec86d5cde0c091a9634b8dbde6fbe4429946f3b623782de2159e901cadd1889ee5d8a8273486e7696bb7e37e1a37a4a27b8ca5be890fe2226945911de26383b259121166cbcf5792f694b8024d986cd312f3301441e5407a93408fed910be723cea82fc5730c2bff8beada0b52c45f164f2ec8ab1623ca1dad70b01e24891871583c799b97e41897c0ab02cc21b4da03a4c506e77b478ba59bbd845197696e56ffe632cd23f73d1ea793ae822c949a2ac1d92cfd7aa73aafafff28091b301172aeeff4b7e57f41331ff728fa7278446a55dbd24f5d239b3a29fec10965bffc742131fd44911a7171149a7fe3ccf506fe5b08115719c50dea09c8a44f2eb4011cd135236a56b3ad2d5178e38bd70507fa841357d4f3d766631f55e0a73f5f02948692470c123e1e619f78fe6c40e0f867b8ef23e0ad03db336c72adf7bfb55d9ec8fc186ad6898a937ed575ced2f65a2b1561cba9eceb0888f0b43a18b379887cf162945ce72129c396628c410da05ca899f6c97e505c78719751e9f803933b4c66a1f1a20002b144a095563150f9a49a7e6c3489985e4cccb859dbe0098c58d4dff1fe0829d8b0aec5aecb5e3d6724deddf718d51525888bb213fb011d6c57266c3fb7fdac4e2dab6a6308c67a62b27f54e8fde257a31a0c4e5c8ec739a84f720bd6108bf2df70a5e76b8bd1ff968639ac5e44169e468565ca9f29445457c46ae36a04713f96712d9d94540b7d82cf28628748391302ce2698fc39c61d384b7874cd86df8ead336531b3fcded853649bde6af1c05f2056e92622fec6da73c0ade46d7460392a5ef4411234328f9f585edd5deb4999f7fb6ab42827808b9c0c4e8bbb69770c4fc1f9d658d56278f59a934bad81fe27dd8561a356ac627800b44a5d0f68d77a9f30baf52f448ff8fa0ed08a5848f44f45647a1f5469c1ce4cd585a2028c88a4b50bbbe3acd1abe68aee35edae6a220476bb95023a098783996c0df66be20f0241c8b8eda0c7498bc7d803ffa270bc872915a8bf468c1f9efdb00cd7d4cb6a2709d77e61123ee043cac26d01e451a62acfbad20265788ab651f31c460b44a8363fcfb59f2384854698c3350617d5b27b22d7a738f1ba6b485faf400528ba501f2b62ea5a2bc504b7508f9deb8452dfa1863bf14b39e6e825ce801c687c4eb667b1e6458e980410874172e555aad4b82b9bfed386d48b2df6a41565e1bc3ff2e0ee15c24fe5967ac8aaabafa02fc3c4bb48826e8f4f944b9293bec226e14b2d9a3d603cb3f6c005b9de194b83efc5c1f21e7a6914beee05831add323cb9ec6db73423ebf94db8cee2358d294ccc95aeef7e5d321c9d364e1be0a1b753fabd5228cb0816585e40b5b6cf6780643888ca4043a10bcf08e89c5ca46e72d01adb7ad0ea35009289d0d2287a79efeabae4e58b6583ca73861a63ac3226561dcc6c09c2eb1fc72f554f8e70aaacab8c22d41f77975aef93b73aab0962f61e77df9614d4237bcbbdb80f89521ee4633a3bbfde14ea4797b0b8ad2ec469451e31fa80499f8bd25e50776d0f42dc1819653ce279933469849b1bc4a0a7321910f0e294dcc91514b961c54f0510718885b5c47ef4ec2027d2f9c551cc808597d1a52dbdbc2af240310f504340dc63b5c09dab93e40e1ed13ce2b1ab5f3d63b10390b197a7e3a1b1225d54deda660a071eb1c79900a94d168596a419d61bcf84e82407308102f7f2deadf318c480afa4d2c4afb4cf98e2aeaa05488a0b9e4730599b05202909f545cab6919aeb9e4f077fe6f3f770e54b6d78b0b4ad86d05258c56e6527837ca88eba7585a43b614e58d901af3c89d2af2ab98be551c184001395945442a4e4e10b24f6d999cbaeb62f93bc14afbd3d036f7b0b3941cb5df78955126bca42a5883285a4b59a0c634e60928c1939ff4a64d15eedbd7235ef97b4bfc5bd9ba6ea008eefa21fb66fe6b6fc332b14e27033353e2804c99bc1bcd6d0a955065582e99c53fdb457ce7456e7922129dfbb153b8902fecd2407bc4579d2cbb8c8a3e4a969c61b47307c64dab4ac41c34ec116a97ddb4fd722c2ba524b1fc030fe255e5fa473d60f8408897680ba707d395b908de28aa9166866161b046d7b4a315c718d9a0a5e2125e46b3478a8b910388c5c95696fbcde6c8ded08036adb809a389cba8dbf25d29b680ac24142cad72b52c48d92a4667378245c68dc43b632ef6d3dccb94722013a8aab083d2cc1cd9741f251e3b72cecbbd4c3b16d10222c0a33f07056046457ba761599b0356784504d7f84d680ea992cf11aeb9737c6a651ab83378e41ce59d3b9bacb0aebd45385a56db7c40116d459a4300069351b6b6070002d15339d87d480fbead007a668d8b843d98c08431366a9cdc6279d5b7734340227642073611ad938726a772b8f767bf86d57eebfafbd7a3938300ebb49b6f5b26025648f76477f3349624e81e7b557b18e2e2c2b405d145baf23309da882f15eaba546318153c4f1ed12c16b4ffebcebbcfa1e95b695f428caab6a5daeff1d7e202918346407cab5556df1fba1361e005cddaf43f185851e88d880bdd0cb5cb317e5ce82610049ba55417918f72039e8f09b296962a8081f07b0f636f716e9c78129489c7b3933268feb56b44df6e207b949c5034b1199f79b2c23972f0f2678866175cdcddf6a238dde64ef72d873464e4ad84296eb3e60d90899bec3781fc62232235f20394d3af22483082573876724cc2fd39d4130dad3f4b0441b811a1fbfdf18e3d4923345777bb7dde5f039332465e2915a9ce18870869b1302a05bdb438cbecbab0922bdacee59436f60d3cf0f81095019c6510847a5b726d4f50a40b9317d4fda909fa76430177c7c78b6e535fb516c2007aab1357452e02d16a97c0707e81933cc47595f4d41bdef88ec0d8f91d515ad448a9fae4d5b6e5405c36a5c2bdf692e32da9a51896fd1d4d25f426552ad58fb16903ef95dbc1ee4c1b6e6cc1448b0a9f8d8add26baabb27b951142073a93e38227ee0156ddbf90516dd17c73c89d110a2411ee3d49f8a12dbb67dd8ca56e65a237cc15926d4847fede21e9da75359773912f6b8d9459e03bee9501c3d8d0bcbf0ce11ebdd66d6c824d94b71c0d27f05988b51a6673b3e6701d2ea1e53fafc19729d0c98b7949f9fb830a706c062f18a91d0de84e8813c2eddb024316d1af29c831b52d7fe7a717c2913b3d7bf88856eb01b6c40be78d9a1a94f0d9eef22d0f7f94a6241da829bd8949537f7989052c671766f4eca0ee75ac00d0d85b90ee5e8510f5d5c5c2347f0d8a6e2bc8578ecf9db88f3546e7c8217aa282c2b7035544e96791361619e4b4b8dcb2eacadaa5dc09c282a0bafca90a6add2500d32c928b0465486d4969f24847cbe07fa8e5cf1fb5ff68fb7e909c08b2160bbd1475d7e8d26c07b1228fcae47b5de3cb46a6166ade891880bdf1088740e2915de5908d85acdcef3879fb258003b6b72e43f86e74cb7fa368922127375c03f1fc58ddcfae5f3cde2965737873eeb71e650c1216608653b989c29376c61abd990edf378f2f0c3be890811c41e16998bb69338f7f078d3155473f883fb873cd95cba1b8c15a1d0dbf7f3676930c6c3089312e6f81440912729462a29cef2ec7c8af8bae1093c4e4aa48353287cc7de59ed8da1937344f1cfe95b263cf621cb70d61c65427b5b0ab5477cac5df8174d1b85aba83ae1b4dfb584241783769ad409237f8348fe78881e954d26b0cf48943ffee9aaf74852f489e8f15ee19811bbdaafc42755d13195efd424a84599eee7ee14d73e8df2bb61be18b463073743231b4fa67bc05e18fca7f477ef6aedc7ca8920dbc5e01b9ba8589511e3331c98166a5be1d457dfdbabac68b7d02bf1a4d06b353bb2797663d28b8b88f6fc45b5b2b35f1cbfb0d7fc941ddf66849b38b511c57e7689f054b3c1c1965e8fc2cf169062e865777d01a1497a864c07825c0457254c2a946f9512fe8e7e0c63c5c2f5f94aa7bc46ab690004acd8a9bd0979b54a63a4605a4326e257cb399bfddb5799006c867d1147b8eb6f2d7c22474e7ec90006762a4b3816e0709e193b545efd20fe3eabb1056f0afde4a2efebb0437252420b2ff3d2fec3a5c1702eb51d1cb10d7c767fd06ee4aa38d9719b80584be58f38d77d2ccfbc55401ec9378693835ee2933d2ec0dc6fe7d1139f078a56c6c8a0455bf92f0efc5533dd070145031206606e55260422f7fea723a7bda66ac61464ed4ac0bb006906637573d824c264a0909bcdd8668c769f6dee6ed5852161b4c6db0572f7636339115e0571172db9cb5f6a9ec6d8119cd324ac711ad65b7bf7b28caf2256753bb6efcb27946d1791ca29aa9ac15529c56db083d14133930a2c451a14aa336339070d4a7b4a371df068575cf57662deb924dcc0ecbf15139c9815a758166c58c8885e8e920530304af6444ea43cc8a856965eddc32d74e485159d2da810e565b252f1c59848daac8035df36d3122cb4d4c6e776adeda187bb72aa692c4c5bc09306ef5dea853251b9b2ee12d1906d424b7e90a89ee82d3f59bb60b3d67c373e1b67aaa4f1b052cc31807896a7505ad53311c50a640397840c5c90449184db335f5bb10c207f9ac9b69ef301333ccff45029eee4dd8ce50519da41a167c709c3063930617a33d26aa386631a0476409347819f446188a0226578344c6a22a6ad90bd7a5fb4e2b99d99f2e3f062563ef3020974ed4608ac863a0a2db019b7baae9dd653e68cb62d930f31eba7b33298212e1dc9f3eff9345a6da4bb5392b384d1963649dd851c8ae06340624cdf97262542aec6258e688d32fb4d5b99ba096dcc82afbccd9557cd474ed995e088620112d44a735d132d53d4f5129cce6a9f7108e4b7143affd6dc234c090a30c1eeb9d30ccf3d242c6c99a170f6c075e59174b20eb5d7876c25cdfd6745da84cb82f45761b72a2eda660deab69d69e5fc44940d37baffb623c5d4682eb86bddf3c5d07d1a416f6996172c96532e2bdd61ec05c32521cc557225fbbcd372b2bd970fdb0d986eb8834d91e616bfb766a09bc9778cf06c9f001298525fe3df06705e039b58a7853120cbcc432bf28b68c161128066fead5f2c34851ec60c54aa95da9bd0c4a2d7462e5b89f558f8e8df3bdf58830875df8b3291ab732b1961840bfb4e00adfd7b04a60ed62e3e9f44a85a6ba8e2d9f41f3340ddb99697f3611cd27345b1750483dcce135ab3e6af78820e12168f63b6ef49b33cafc404118e790e25f410ebfff9db01981611d50de41172f52675a3f3db746e66e5aacbac5bc54d52d657331a279e61e093eaa1f64d2cf80be503bfd99ed16cd90b1e6e685482271bf3590cb834a4bbba38930738ed485d84c3effbaf3e97759704240f8da97cf82b1013690eb8d94f2844f19712d57edef11c2e91de47965aac5c0c7fe9fa30c55ae6dce46382fb179a6186ca093af529869807d27bf2695af025d3e2cc00807bbf701bfd6b5755abd387bc2639aec43fddeb86d864d2d2c6cffb6dad422d550456fe06554d5e89719bf64d3bbdcea088e69ceada5f3b431b808a71b8593795457f9aa59a4e9317ececcd55b9ded25a044bb9b26da40582b34bef5c2879abd13b9a5d2ebcd3d1f9c5847aa56490c524f498c7bae01b5ffd439c204ea7225071aa1e9d4e3f41278b6308a818360438793b87435587828f2717568463303cd0e793143199be0c964366d320c8b7fddcb1531a78a2b21660c02fd51efaec764ec713e77af5c044e48db6527124b4d6b0c57d36d526af3f0293e8ef376c9d5a7b9ec714d238a27c32c1640d27f70a1bea79d22b4db7cd7b5a8e473bbd3546a88541f525ced5d30e6e4d268172512b789f0d142c2f676a9b92836730fa6a5de973f1d8c607a848bc3e5c68b3a6378b10345a6c86c5590e4c6f98dba03db2e2b0647b3da49ecd9609ec94828721f59b1fbde37db37b43b8873f1b2e234e639077d73c022c9ac428d4e3533c565354f9bae52725ac4567bb727d2a270aba00b84daa76ac1bdfeb0cdcf56e996e822e9d51a7842209a26a23915cc5ac80f5e2027f29c1905d797e7a5bf51bf738ee956f6cbdb9306f4b6a35e519cfab6fdefdf031fb5e7e87b646c2ab5e2ab05715181d6d94a2ee65ee6685465f1591d4fcbee34f99200bc5ccea737308bfc6a768cc0ad5a2b22fcc846eb04f67771d7616e36d47b4610e0b03b4eeccd5de44ccf2ff99aaaa77c17c82b08e87d1684094fdfd056a3c1e9bf22e2b691af8e919c3a398f21ed743c253d04b054f519db9e1f210e3067ab658f0c5b1c0580e568fc61dffb754f90be0bb916898a84908f8fc751dd25ade2218c978e6aa87d8001503a3d1def3ff34c21062714e1d7c2b0f5dfd5188964013d4ce0e3b32d2e483e6c0a33ef79c38d8498d759acb796443771d14b720e35b2414678cd4818874d357045e3ccc3bb6d48f97c20b4ec08a9cc00ed90b643fd16569b12d343bed02ff7dc7362bac0608276f00545e7b2c1af446e108a453fa88489db19349f080b172cac0871fe187aad1f584f20dff3aaa39abba643ab946f9e2700cba70db2ffcc75b20cc7f9bfee8aa861543a1a8d837c3bcc94dc0cac85751b98df5cc80009e9cc6f00b51e3bb42ebd0d489a3e4b950c524d8c9e42e1db344af08a2d5730cec4f18033810714d289be8d3f7a4b22133f886aab8bdef7e5719cdf62b36cbc8c6482b37e4400bc636886849c134732a0e8573a828e8482d736ba68c7466b55a260ff7bbb0503fb054777bf2fc831b001f739c21a2a2e587716d44a3baec9f1b68aba21c9d661d17cf006896e50d9ad4824a0060769fb9634ef7752b02af09e7782ec220e62c9cddb5788247df016c1759552f802d213db63a858795817f35495974f2173e70f6383b59f1b69045245eacd9e31597b83e2d7ee1b34e199d34c32ef6df20f24e42ee58503869ea5267e63b2e0d2858381b614795e21b7b28b8e8fa2c8da2e7650739da04f3e436355dfcc0cef48501317fb81de671d1751ee82a48219372b101ab71c5bd59eb81f1b5b7907fca94c2b51e51bef70b4c2e3fe19630ebae2e11e381c3718939333d78b2712b32718c20d6ad198637fecea8312b151639fce56e762dc42c42df237146714f0d36ff4c5c30dd954da0908792c40f6bf3e07dd3e1f8a69534852f572273865752c076ad5b12a600e067277c76d20ae28a45e16d382b971bc9cb691a34eb8a949e41ad5bb8f493230062898f2e3e15e67011dfaa7aa47cfb8986ce31185621efe5f5d6431fcd5e6b713ea836364fb2b208928de64732b82d4854e9c786fd62b3a6cdacbf58cb259e7e003f7d4d86eacbc3f667b9a63eaf2ef27fd209aca8dabc70460aeb115310829e789ea07af860b2a842f50e29d8b2deda944f1ee77fca344221059fcffca04a46cee4b97ffebb66fa6e5875584d4fc1863ce32abfb92f28cfccb772940d5fd970eae71535b722d84ca1d5156b92d6417d69db2f7e0873176d7363766dffb7c284fd620328f437f2d32f4d0d0aa55ed09501f57fb5a33f3d1c72646ec29295388b33e22691ff1e040a82b5dd04e4fc32141dec53f77999d80060f94314ca86b053b428a9c570bb3e41acf683d5e8f5745e2a19d08c09af718205390ffa319508cf8141007388c81e5776665040aa996cf42ec0b1cdc529099903a6d040e24fd184d4d2b3dfcf09d6c453a7156621278b31904d3163bb4addea49fcacf69c191a76e21e06b5c8e68efe1c27ebe8137b0b828f2f3fe2f7d38bf1e437597f1853f5c8a9c541e94dbc60971fed83ea89bb3dc2d9b073577d269373f2721f0f840126c59d993dd05188351dcfccef5fb9bbe42091af0b68847d753857db35aba02421c7370b497a35dad27631ef4135e3375c3012cf09a292d9cbb51a4f8fbc3efc29ab6964f256659dcce07ca88e61d3d469f5005d1b555046549579da482d51fac80b1b083dd1728b18e0d748ec94588d25671746e3bcc4b332dace88ff7ba3a9144f6476f5ed4a59b20778135028dc491b7efd8041fe9f0725057c129930d54e9aee3ea49b55d75a4fcbea48b856eedc580d44f0686141548d2228ae54dcc667a74d73acc72e08577182ee08441749f12aedac216bc305ea2d7ab5cef3e0ce5cd2a2ec71d5fc974933419aee7381a1e19e7e43e468575a7c3c31f97e467e23da4167a4a738fbe5a374a1f33ecb6dc6fa97a93832cea7e278832f1b0eef3dc097676ad40df410266be2bd216de9290fa39c15d96c11e2d2f674784606c34595f59e247ad1870ff2c06971b31dcd2adc479427408e082ba38c4285db81a68cdae1f9cc2c6ca5375ca1b6cc8917ad83d3cc70a492e77180a5202fcfc893187854e4fa44511219c68f96cb5e05c35464c8670671c8ad27911c4f3555e95ecc4472f43f00364f9042f5dc28a21044e7dde396448d5a0e7fefa0fae77688c9ca69fba0f6e9710cc5b98a2699ccbaa32ee07e109920b46b9b74e7a360922cc6530678ac2aef66e9623f85c6e0a6087b83b5f65b6b0b055445bfceed18641dfd818e8308d680f363ffab76321362f1cdec58a7f78ec30ad9d972f87ac0999fdbf77dd3957e60cae911c8782ff3ee96127668ade21ed3f38ac5c4a018b9402f686db445023e9f4076c65b034c77a2823067347209cf7e233ced176d055b415eea5bf9ef325ac0423fa1abaeda560def9f9ad63198cd59862621f3c2e9d1f74d386fee152aa42089653de5385cd45d146080a9536b6da3fc3c8e0f15aa5f8fd4407ad2cb4977363c78b1df41784890dd3b4eab003db1e6e8aa5308da35db4426be4f5e2b146961e94a7f5409a831161f253de168bd016c86821582252d948556495525625255db87d492d8f34ba15d4e16c36e8d96fe9aa67856f969b351c026333a3da12b5a2a578dc4bd9904eec2170aa009cf5cbf7102b22878a4f008c75f0760ae9a0009ef797886c6691be992e9ea55900a60f3312cb62044cc4c270f1aeebf64dc20942ad5503a0d0684af8bc9f6b6722dbd0dc60678e6d958af39f1078279d2c7daa058899c44e070e14e56376909b7f963b5ea0ecfe19df5f1ddfcdc676b8ab9ce3aace8b73b53b0448fd4e1013e54d8ecbabbe924185d544bd97f9025e724824423733c3feddb6de30aa7eff23f174fa7b56bcf9863c28a894572de8a6c65b9f7d0476e1a7b379fa8b62a0cd625c9c2f87a9a98d05a88e3fb76448fc542dd7416480847a4c07dd3e2a98364d37bb6323c323389a85c5d999c5f15067b30212c712d2da35dc781c6c2ecbe3f1552fe0a273860291489f78b2116c9da36a5de87ee970d994daf479c0a494106e76e4fb5dd515664ae9da8dc077a81556d73fba16ab34c8cbe82384b5097935a5712382222257b70ef27ec62550352acd7d6c83916428b566f5a0909358a25cca998aac2cc8fff51abe3ad50a892118af4ca0a424e8954011bf3679be8c400a215bde2bd5696a0529a7746608355ed02bcc6ae1109dc95fc2abe2ebce4754d8c4212c63e846460711d781213174096fdf54c2be251bf683cad23634ee25020619889be05cff416c198cd4f3fe34ae621f849f7fc44b0c39a28b2496a8459952f60231494559d4893c5a4b8e6fb9f01585eecfa7080f305b5aff9d0459fd97554309d48b8b08149afe852746aa7b6e62ccba9e208f904de601ca637bf99975b80294280e8935bec8c36591eeea957662b77ab088e92bc8fbe8686d47c38b0f48fe0ea047e174242f08f17c32d1ae41c7ae24f25e8aa84346831ce2a251af706a8f019d62bcfaef202e0a56796f7699dec7be610f589d70cb878ca98fbdb2b356986bc47b401a2511e2d025bf2485083d546a7b715f46b828380ad3b140f0efd9fbb86eed7c79f284dfd906a8f37ea05f6b033a3ab1900fa913670d2dacc159fd8f95c8bcb11959fcae8d245e7c3412209ae4072974b300f6311b015fd9acafab648ec774287272d6adb161c402642ef75e4badffcd23b81613e05c8722672093efb320deb3762512b8581bf6c0ec95459f6288c1e230a0d44cb364cb21f2d241e90d97ab9286023d10c996e877879d7a815134bb9e423bf8741d079082908a5d657da6d4cf22d848dc4983d32cacae7de1ccdaa26bd61710251ad1660b373fe384c33b0f9d408b62884e42d27ff8c52660875745f1f1a8ab7bbe0fbf7a3c3c7bee96e0a074f5cbfa25294ae734fc20f73ea37136e3412907b68b65286778477e70756de2094dbf91513175a082a5cd1d556b519d5d2775d75e6687ab4165fe36c3b62d14de7ad9a356b072057e2dcf2726c885dc3a9f5b6010462cf96661f16f1fc2ab4130f65e453c6888affac8ee940eb58a44389d8776c4eb3049729972cafb0cb0c8947107cb0b58d43b20534f453ff65a9eb9af97efcb62ea0b71e30328390ddd74a281d380d58a0880c3c3d1b5eefd5fc5e3bd5e41b56d24e10f89800488df6e81c3a4f5caafc0a6ec6ab1f715e192765249e4b631b54c8635bc177f8b8f71aeb55ca42b5b46de10c3bf40b2bf833fe1cbd36ae5c04fd5db870bae204a76b768754a1d700679edf3dbb06e276795d7d06cbf958ae000b30b0e163f64d0791408c996b5bd7b7f0a3d2c069209a87a70c2adfcf79e9e74f10b95de95275cfee1d3cf5df08f0bf55c0a0e22609682a1b5746ce132fa4a221317d97f9637d598f7f540d77776dcb08b34eb1678f6c3b706faadfaa1c3db6958ba18fb198a7f4aa90b679670dc30a7697844c24b08116b5550361efdb3cc540ab29517ea04f9f43fd382beab39c3306019f329b15d31c313f0fabfc6968bbdec0cedf5f3160b5feb32c86b412a99ce82b30614249b5734b933d1dc943648fad02b1e37df94d8810ac2db3768f497dd93021cf441e75d9a60878120d901888a894b5aa0923143a2751c389cd948f9fe6e12723eddeeae34200d86094bf0a6d88077b083f38d446452273f740799ef44cb460eca98f809f685998ed0bffe19e0363372eae3f2510d7e31a48960e12693d1164c86a4842c183f169e66bec5ea9a576cce794897ecc012026fda19ff32aae7cfe73c831b0a05cab28268d681631652e4fd70018f625fa4eb963fcc32ad107ebc734daa1b3b1ac1bf24bfcefde1e9826a133b293f0d1da97af28a841f9dcd2db8a0ec0c7c31aa74b0204d2a81a4a8814c49631af77ab948cf3fe1a6180c432332acd75d888d917819a34781dc64f479562c5d0e0124664b46d66f35d1d7119cf969f1e6d84aa66502602fc3b44276cbdfcfeb97d3a8dc7b7093eba8b9f776a33a230040dbb6beec68d73ecba36fcfd77640f23d93a6d54944fe1d626bba469f19943b4bf765bea33ab6beb189fca1e80e2d6e805705be8e3ca3506f726102322cb0095f5b19fe66683d3c4df6217e220f0ab59f324aead7497e65c745cdafbf99e188757b00c3ff0eaa8f4e52008fa71181fec7682630300c1aa357208c0e85dab1b77c60ee151281daefa2a97ec7c5c2ff91da2e28ed42b5b676cbab6c26c51418a516608212cf90543cc65ed0cfa99e57b49b531b6ddb92aca73c2804b826a9cd4e7be9de6cca7e022c8212040289431280dd9c335b878b768d202712ea3ab1ad13026ca78bb8d27f291581a4d221250b0c33d6895cdc012d5c884d1aabbcea30e3d7edf668127c5d6ca1e5ed5180f2a3931cdac6bf17de24882615c775af5d4b95daf617668801ef7fd5969d5b8754f4093e308399e74be6866a8b5fc288277cc9677e5d28cdc61ab5db5e291b8b828832ebd4a55778e46086f4f97ca84a2aebd38869375bb198a6e105b0ca69acf3e50c2553106fbb0b70e123aedd72e4513687f5398f81746c58a650836dcd11f9b94958a30dc05a63d23eb0ae83ba55c26c2035febfe2c6edf9bd00fc8da7a4814648830d982e59b717d3c191c3401c0032cf7e6d2db9b1676b4c0be7f0a986100cee822c46f6b97f4f72379b7711789d1765e72a2d12e4280d75ddfdc10889cdef9534fdef756b73c8c9ccacc8b13ee200bbc8beb8827e9f17979b5d4cad9f2ee91a6ac66c70c34e3926d792d95343a7363a589104ded384dd3d58b1fc5fc12c1679729fb333f281167d1a808edb96d15f37a53dca2ab83669ef56cf03a3caefaa1560c7bde00558863e0d663ff0a36e196f31b6b33c52d7bb644f47b03341cc2eb99a5a24a9fab46193ae691bee4644b3c9d1bfbc266a15f18ef87fa31cdf0803a3d36e76d16d99597dc384d42dd7671caf8dfda17e0a6d8f565a390bfef251816e154284efb25eef19a04b5ad121f0aea598142b8453e1ad1c2856ba5045dababf860491c9db9b179ee22f8c4d690430ca37c205b0b26ae6e9c766e4db7bade3f09961f8629e86ea1d208f46473aaa75706ffb45da09e228aac6b17eee5400164012bbf0668a31aac754c9d0d03db01425a8a5ae58a09a088ec4b36898ebe5cf97ef226d721b19795da4f94dd128348866d14e9922f66dfdfa367f93353a12bd3ad33b27097bc3d34b08281ccf5c32d9dcc196eb5cbc6d4e694fb0e4b143129baf861ba211b8bc1fb22176865694c42cadeaed8c36aaefaf24a2d2244c614e7119ad76c559a71313b7582f5d41bda6e343f9acf9080c9d509502c9ab1773c5409146c153ef3713d311bd4c08f5cf1d764866a2697b178c6689df94e643c4a4a15933d17ba6393a653e557323ed63d8f8352171e481f57f836a92d9333c23cf8d8863ff8620fe2c7d1c066c810f6bf2e422a267f0e1efd419da47ea74273a250ce8dbe5c8d0992fb4c3241e9afd7c11b397111b3340365ae87653a5f79727880d949c7af31da7e1c4ee342c4005b4e9ce5dfb49bb917360a893859175734bde2f51d60c19e9f800ba2581d17d4f91a02b910c57493be95b47094879ba05c09aeb08c2c211d1760d439a6cd470bdabe3196af39940681bbbb4527e6ab7a3095fd2337b11c41f249231c7756fd559c9778e1f3718b1e65c71db53e2564be0ae155ed3f11739ecbff159f091aa53c0060c117d662e3bbcda3bfbcd04bb83374f2b03932dad68de3e55a48caa0c7b615d7d1a95bb37744edec3aacd1d860e5725a7595f56ee283ea177ce940f2b38b0ad52a360faaafc0829d21f2b4e43c72aed7b01042541af42e149c5e9ae2b31b3263b943dd991a60263493134462b99fe46b47d42d60938726d6b971db02c02f231ba966d8ee9ee77f7f2c680aea599468bc50e0fe875511ec26e77e36553311c3ef0d570c5dd2e1e41e8e50cba3d8ed96cf561e49a4b0ca153af00118b55e63194e411a0b7befcf204e506578e080995b33864fa29c59458839145f2795317a533df9b9b9ef79e1d267b1179a6e0c12323051097077a90fa395d8ec1238e36b9780e9e510f1a3d45ac2dee9de3f3606488cc01b782c4234447cd0668f5a2bd4fadf28714fb211d5356516e3ef7bc6abac406e540c532006d4703c2c8e27cbdad97336adcc00dd63c82b0316fc573bb8b596423772a0fd25a9421e32b9cea04e918fb8d2c72faecedc6118f5be15173722ab8521aa4ac5e3391562ff0cb00c96f74bde4720da8086f61f04d3f272d42ea34ea85c198177d3dce59da200dda96d624a11093056aebded0139ba4ce739ca2e3a683a433c249e6f185489dcf3911d15552171b78441339e022644a798e90e96db03cddc2dae18ae2d81cef15f1cd5a3a307a32bbfa2aa82f626e46b7ab4ee47dc8bd1066bcb18ebd6ba5f798b24a8d1f1525aaa66ae5fadf27cd730f1d64703d7547ade9ea25724117d6ff53ba1ea57f17ec81f8d7cc56413178bfc7b810785091e28d37b8f05eacf9253db34549bda8088ee8d01eeec1c4e69b6d88dfda6e81dd35ff9fee005b1d07a1484b2ea27f697acf1934958a42bf30b98bcd2247605fc7d49d5fd22242bab8adcb207605929273ed906f792e8cb3ffd4bc95f6d93b0c17b05840d81a87fbfee652cd951674d6f21794945518d1a71964a1c22497a77a7703a277cd9c71bc9286530c9878695716b83a9f6db3bd08b45f92354725342e2ef401e99f0c466bed5287e5f6016b24eff8ca968f75444f2e79353fb4354130a2600508dbc172b87b6e19cc4c303f9d2cfdfb4a4ac7eb9cd78ab4dcad7c777423fc5993e5bf367f8d32765d985a477a9c7158254a54da047af5782b00597b0e0ad47ab729364878b966d90b20a2d25d95f73376a18ead33fa9546c5feee76af9ccf641f5a822d38c3af034bdb77274333f796e950d4a76dd908cd9bcfce95d8de968cbe5150f62f8f856683d1842f8434ee1e81b8f30947a7b7cc87b0f7dfc892922dd7df58c7f41a669e031ef23b4d5f0ba3f995ba618ea1a3089e7ad570f2ba764a953fa02a4125e5506760fa0aceb9947a50b660cee7a3909c24bfd4a8bde8dfcfbad22b18e20f0c8c3c332573da55ddd49812ef389f1d5d78c34d1778e43bf4aa6f3b34dd1cf490470c45e81965c2efe2822757ae6ab55178fcb0466726909676090f0feed53999078c16dd2d5eadefb75cd2293b85688d4a3b02d66d3c71b9f6cfd09876c19561571cdd3d0709add524ce45c1e69f76982922e65153f844ebae177ccbfb7e0c1975ea61a69bc0f82161a5075b10e932cc7d1d5dfa32f13edfcc1c48a0f1479b7548cc9df302197cfe56b7aff311358e62b08c4c1e895904b6c51bbbd46a82bab57e7b383e994bec57ccaed88bda5a3ce61ddae5e5510816988ab5467f83081604d6dc3796d6f855ebcc75911b9546d4a36221e381cd41aad3e6cdc063378857c557d4f26ac51c7414a3adf3663bd495c47aa76f47700c34cf3f00766b78ce132596e2f7886950e2959be9ccb40ea4625a93f12b6258222a48dc42ee29dc8196d014abfc2aed9c4bd70013191b2d35cfa44ab219185f4cbe5683c53775d1f8482e7b65843182915378e768fe60e75693afaea279e1247b3842f8295299e81bdc6367deac0e75481b375e92779fb6c2b0f742e671efffefa31be2d21dc7f0a9f387661ab22eb527ddfbcdac6466ecc80c131d559e92f91a6fa2d613a472710ff1de44d2a9274d7d5589010836929cdc86b684928c6160c547edd134608fc29fb22ee20a8622ffd9464f3eb6308ffcd9c1e431f92e7b4cf383fbfef4cd027c43de601eeafb4229a102234c7166206f8046d9b2427ae274fdb40442c3f9b74e484b3c753a2ae885ef3170345df7d9eade8bc01f14b4f51ef10eb14ef4389a7c2d212380a5a622884be2406371ad192b0c2ec53c34acb90eebff81289d83a70c3b57b0c90fb670149d9cd1bea160165a474c98ca6f7b35bc94a15ff9db4a39bf9ea67a52d508569e7b8e92fefd1eef8bc9a6bb231869d50237991903dce78554c2dd90dc75c787ebae518394478c66aff3aa634776dc76e9ddcac8d0a61ed97a86833d616a31a908d5343a884e75c68f4b2813ddb7760fb8af0056a71b59a20ffb79001ba7a615ed1f7be9e8ac1ba35de03f5f4d5ddbe4a65ab4d91f35e6d7e3b0943e700f279afcd7d2504c813725ee106f0c912706e3be82adbafa6ef14a8dc82fc08048d1bcedcf8619bf23289af5bc7bcd0cedebea9a3e850d3c00fa26fd1c759bea45f94c43e2463f74726d1a240e1508fbe8c4a357af5217feb30c8a3a1f350d8cff48d980d10f79651c2cc0bce517c1d77aa8e02b759716b90ef252c21820c0a82b66ac5499e9864adf92a14ccb3853649863852823cdf26887d0f6f24eba099e20adffaa053041f1d7f08d58136634b6a6026fb5d50184212c06bbaf22f6ec89d3113422c0e5a51a8f38d8c33b6c0a4cbe18e5f2ff5cd0a5f689b5b3efca93b2c5cf4315efab6d1250702c1af75cb36f1d5c91624762e75ebccdcdf59ca9d317a3893161caf289ed9461ef74ae599a3f536e44a085e37ccb2352a328588e36129382f955cb0d268f10ea88c4774c4276f61437077748324236728d1ea4d5543450b95b1c34a125592502bb3a81e769a8da6b3ea6da036dd2e9164e33b474c7612ddffb88dd84be01d78ebba6821bcb49f07d55a1c915fbb1b7bf5e972a939c8c0babd464517dd683f7f6a2b8cf10b7c50cbeddc2bda165539d0fb9cdd6a0ceb7ddc7e1a5b9b62f86a9a5e328cdd6c708a15fe915cec1477939aa6b35eabe39b62afb8b87563f49a1166c7629a2bd8a6069694fb48c8a2cc52561fc64f1eec310e1c1288a85505736157fd7f4320f611f8aca13d814a4087775fb289aad6b674d551ce9f8c1da0e5f7a575560ed2629478ee9ac455282ae698322a3e9ad4e6c4fe7e99aba171b06462d0fda7e3bb983afe3f9ccb68a10ef6428714fc896652b00e531d8254be8f6933370b74639bb95b2908b13d582d6177c72650b3204ae31011f76c53d28ca39897ac2540075d5df68457e13209b38d2ad8722c9831418dff527373b2371a1760fbecc84a9f2a822f4e9c54bd5ff06ecc25c7f5c341ad7538336241e5b226af3b3477237db205d55baf5e63af40bbdefcdef71c92526eb6f4b72f3f4422ee8d6af27630e0b4c645077f9ed3c481fdcd7ca8c0764437b38a119e67106e102dfff86c90f8176dd9e2e47e8bb4040ae636934d4295dc62ea90ed6b476242a76de2c789d18fb98e92d36ffd156dfb7cf98891af1c29fe4cc52b942d74e6f2f96cc96cb1772127b2d272a69e9d9a355f11e880e14565c8658a819e93f695eea785dbfa565fb7d0544e039eee83d355f70093f2bcdb3eadd29def1ede495341af8b3aab66215d4a1f29d7a18287b32553b74a18c30ff840ad30ea8330b2a36cbdc88bf3e591bf81565d8402ed9f91d99183adadf266e4e780a45242d1c118cc4ec9d98dd1bbead32798463cc847d1c6c5c338e549663ce1ed6100f39bf3c4196bdccbd1f8ea1eaa849551f4a3589ce1144354ef6e752edf8bc4a25a55323ec7ee5bc95888ffc9eaba4ee03c9ac040458e271a98848734f697ccee52155817326fde5fb985cc94eb51e631e407fb4f853d65597c3df5009ebf83a66c4f85595ca20fe4c3f94d179d9a16451716896fafdfc7139c77851e2f5c49f4576bdca248ce44df38da55cf092704c35cdbc9cca4d21bb43be1ee3aca6fd3836fcc094238e4ddd09a10da5e02218308a83c054983144643fb6369a5094d0d55d7e4f920b925cb04fc037b92dabb3e425c4c93c1622c0c95f0ae89a902509ededed7723d942ce76b1837331c2f76fd45fdab6037aa8cbef308f7d00fa9f1f3a8f89f02727af9bf9e4a0f60fcd2cd9a432991b0250927771a3ac3c02c78af365247fc81e1102f36128203e71af1bccde4448e79d0deff45b92c3ad9228e6305f7e72690c87a1bbfa2a2424f3e52617b31fe58da9fe447a9413fbf0d99beeddf691479018c7520c7d118f70c66dd046fe6ad88ce10d98fe7bc78322003367b2d3d11d72b46cfeeb19baf222899e5653fd8a9764bf140980286862a054926e3d223dda9e9b577e814080562f3e32b593c4c5b12bc07980f052920ef659b76b83863b604e675948c5f43b896aec4104d17e08113c7c626ada1c2ea9033bc83420330a740698493491392241437aadaa87e43677b65f24f4e3bfb77e060a4cddff7ed4e37ea8fd884d1776e3d7fd23629ebb4373b1594a15c30ab436f20f5ac9f43c35b4d58ea660d35ea2e6d94c81a1a0c9cfb5b2f2984f4d4b06ed80f3e1f6248ed497b695150d21b2335ca6f35648fe85beb9f02ead4c0f8cb88c8e6369750bfb3ecdfd44ce610f9d01cf7f680f3ce1a9cc65a78463a6934a936fec000e3f51e6ce8c9342acb230d5f7950971810cb65a2917ec5fbac947f2dc728b8433249c7461822f319809193394500aeee9ff3b8d363a6ec8de8d901a045a0861537c4cc547b8a53b9f8b27362158139b8a0a2a5fe4f87448a83d745c29bbfbb550b762e96c07f8701f3a506a667475cac1a91f49ac47f9dc603c537b69d2ca08dfc3bda3ef38da3eab6ad89b355bde5279c9aeb11328f9db5e045fad3a6ea4ac3c812dda73cfad5063a9424f424ee3f7caae2677844ce1d0df80ac2919a1881cd30343cba452d2d2b68ea542e4ec100376f54933e1ae32cb39536e6119544c3cf979df8839b311f0b04c4cc8b13488792152a0065a59cafc16c050393767811a9a2982545d94f85d93f196f95d934e43bb674394bfb74853d74c5b4c0725ce4ae31e832c553549c1d97c7a2ed8aedf5fdfe10dca23ae45f5b9bb27cc567a710bef1ba191d0c99c1e54db110e9a84f30c8c108a465ccafd4db173462d29e0388c0e5a5cb4c977b2df2704f23df612af9e42fea5a6c4f464be038d99f8bb74536ce83f38ddb36e121ea2bda2a385a67626e7b892c4316c3c4d0249a9c393bfafb81418fa2de76e183749fa3a9011bdd9e8201d98719f53013691379543b16c11917e601e632fe72f408f92e9642885f1441cabb3c578c95dbedd815d4af7ba63bfd180acb73635889d564d9fdb41ef9cea7ad4c0fca8c5d13547c5659896265bc0310bc2d254737a45b8a3a993f0f054a60da814dcd11efd852fdff4161b507a265ef128da69404c9f00cac3ebbda5d64c6ed4810a8178a98fb5ed00a508170e4eebacc70ee59a4433316c9ed74626e0075913ff42ebc3f26503794a7c5c158a005cde08937617ae6c912c5dd58451e946a5785781332c2460e2ca246f99dbb81386937b4b1be32db4437a69f163c3a19e3b69c5453e1ce6177817143a8294c5c9025313e7242c7375dc368d1627dc059afbf861f261a9aaa770b38d3ef036ac05fba708c92014531ef859dd7ccfa91ea58651df7cea819f64bfc9d47954b29dd16ac9700f81423ef6bd6d8db553809477845a565ae906c4148019192d1fa843a5ebb15029ada89410a4308b58dc9b024ebc004e88004578e91037ec85c2271dde118f037b865a77fdeacbcc8fdee91549a3292a4ae7c09a0f98764b4f6a4aaf6b61bf79f125b51305be60354d5987a85b89bb32e35107481dfe9c998a19a3a1ebfb9dd365eae808bec04968065c9264f5f368f5a4d902f173afb56bd366241790f6c53515abfe5f8074f3877f5ea7a34fe4cd4c564adeb3a10ee81f90a8b12e611c6559b8e7a1ec98b899c8bf66c223d653defd7e5280a613903ae875b26c499af571151e286a5d9c84fa442cdfa897a349cd3734014f0a9d7d8e6660f41012b2cbf78127dc114d1fa6c21b85e6b23c899de1ba86189b09176958fd2dd060fa2d93dd5b0639e27aac4ffc97fef6e4bd024b04015ebb599cea44c59ecb3f63be66ee4259dbff9bc6c38dd6a8c77f98dac2565dd3356cf9d95e13a49a661f1969528f7218c65948c9678585f8fe66fa4db23ce2c2d73bf038dab0bc7aa606caf4d39bced9ebfeda1ad360f638c65de07d81ca0b492d1beb8dce8f02df62ae8761191e6e948a8dd30f9c66ab3ad4c5a0e4562bc63b5fac4cfb3910e17f08e1430d40f2a90d5015e66693bb143d84c1944b8dfb724f57f91d1103de9a4da23897b2f8117b60354b1df273b32ebe364b260ddefb8515610df49d7ae4e28bfc84d964c3962cdad6b8108e62202bf673136c76c0ac16322b685f2442f551cf0d6ab417dfc52efe88456f6ab34fb11c97ddc7937c52f8109dc4c77265b14c08ac1a7c8f950e8e249938fd3302a11c74a1a5bfb8c9001dbf3aeca1fff445c6276de7039e58bbe21d86f43587b7e667bb51d8acc208b6e2d7c3fdc07c96b827600a45ba168ae9856d1335ce4c32d94a33baccce53d34c83e16399ac741bfce575fa30a329aee70c37aa9e5ce32f47f1a5976bb366e58418c6a1ab8fc528c3e2b229a54c0780e8ca2f6a223d3440bc24a11d64aab9c0e9efd73d93cb6bb5af97a846dcf81c11eaac41fef4bd2ff6f203b3fd663e2d1d7b563bc6c1bc8ee54cedd7deb5edc6445748cc0d7e01f1bbbbc285a55f37abc11d14631cf6c22cddefe8f5c7faa0bcbcb8e94ed04e50bbb323425b9c4e0d997cc8b73a30648f6e57c65046b46cd3fe05b7d353f8558baab282a4fa0cd39bb73f48b19956fa0b87129193308dda1ff492260564cb6191286ef889e1728d751c7f086354db93279a6a5ab1dbcfb704f20f285759aa5e4f0f505cfe5318c8dfd858cb569fd5f4aa9b21fda63e420d59c28b68329b759413e7a997d0ca9c55fddbd395267bf32790e8eb45d5765dce5c0989a9fa6212ee679a36a17acd10548f09141ee1b15c4439e9e2278359e0464d2d799acf5b09beb9d709861d6044b62185df84700cad5bb6b28d7bdd919e4c2120fa2e5ee93e7187e58430a2089732c6ab140a03041b09a7de087741162f0c18ec28c166bbfac6dacc6131a35e4e6e533117473ad9c020ed2442190e38f06a4f5457dd4f8c03050090db848502af6a8cb7e9da55bc8b639f87ddeef380e494e1edd7486eeb68015ced861860cb5127d3aa5376bba746d70435a68818cbd613d7bd514ff2663227b41f1cfd788594e01e6988eafeeb2f8a0060029b5b134bfc6cb86c66d24defcabf1ab4c56a23341ff9c552806560ebf763d8116667a1a4f4df46308ddac0cb660150745de7cbdecbb9127cb9df0ca443f2b5b157d14c18ed65a9f7fe6bb655b20d50b4f50a2fedb5ac8f56c57f35577e80310f51872bb630b3098827ee9781ec6815771e95be583f4c7201512053cd4073aabfcc154399cc7d791133278bf1821cfcad0f514ed918d353e28b664aabf49830f7e52323bbf88e2c445e15f48e48c8051986fc79ecef7f1f389f4882ecc1429439d2dad6ee4cc9113923acdc5a628c2a4c840aa51d1be29808be7b9cb804d01e9e416a1478894aa261751361fc71023fdeff181626077c2f51405e58df76312449104457267bab65f6a1563cf4f94897b8c4253b8769ef38d52055685c6509d262e0e1e63e719663b35e22ad8ab20a004042f1ee6a52f9eddf3c30775e3ddcbbcf26a27b61f1d1ac061fd299b13028ef11536fc3eedab8e22dee290a05dd8b881dce56474b550c121eeea3dae972c1674d1df08462121112fb07a0482a645484ba7b5b6c0c0a440838fe16e90a39da17addcdde0323142a5c7477133cdc855730c85a289ed40a14b422f574c050319f0414079ff3769996be175150953594f51fb7efab6d2bea699b91a58673e659205f30d1827627b57101731cc05bc247526d828407ed59dd159dedbbe2a0c6b6fcebfac4193327bc817c2cb07cd76a3c0adbd96f73b84caabed83e4c77a52e48d0523a40228725475077f8f3581aaf72a7ea9a07c75c9bfa810fcdfebd83c40a9f2359bb107911066920d7f8f7be123c9e9196aa221b07947ba07bcbd3f2475ee915183bfc78dc9f7315f90731de33fd4912634100598b3b9aefabb7e7ecf3522312236a6fe4c7b24519a7e9fa69e6e7d74ee92cb28459911b2f5a4958c099830ca63c1408723db8324f8250a576f2bb3b28d0652b6cf3a1aa16ab7acd59c4212a0aca4f26c42647e87c33870b812429511e9b36f1ed3423bd3b14f192c40cecf729efe968dca7c1ebb15f465c98eb2f44ec910675d514b81d5385d4914182265ab6450c30895ac5a5a9ec112bce589b29d9aeed67f8cfbf2dd4b1c95a5b39c5b6ca67a668f9da391d2e32d820d83fc18b1abfc9b446c64e4211ee56a52b1f76b4e282e5e9b0f5e61fef4fa105e43782d22fd52462f72e42d110e2c26a72f444a4f845230258869b163315f8929520f7ddda229bbef0276185f4d017daa39154ab71cb097d5b41332d68fc82216582871433c4bee3c7a54141e5336f14525db70b8e5cabbb45b79e95f3ccf3a0a2e25b4c216cbf198cd7bf742e7350aae67995ed0793fe3276186ddabfdd215e0b7d40254321b1af590d04d32887d957cd4bf3c70919a6ae4a24980d29ae246aa2a7529c4a633f18fc7c99c8a138ba1776a20ae38f0c2d88895e90f9a3431afe0cced2ae3b492d8791c830c82e5f494a37e4a3c247047b6d94d3219fd650873ee7725195331d3603c42b50bdaf4244d19f615c9c62a1849b24bc822343dfc215c67b82f7a2fad1340ab0b87c8f707a37add81afc686e016f7b99bf161ff282c9c92e31a5e16cb86b9a07e450a9feb72844631d7f839f00447b126d49f75c05d8956814664ae1ada6f5ea2e2a422ebdb3f9cfe689a4548f1cef918fcaf457b835ee44409ccacdaa19fecb89870333320b0a64f1070ae7dd7b2ccc06a07c5f41875420ada198ed7450ad06e8a3cb507b5012b0e02da7dcb43bd0d9362f7a162e738b2df2663f30be1c8e3733718494cd0d8d0e1cdae77dc24535bb40e857dc3703bd2147aa77a23e25ab6bbbb52d003c091a2486230f9e0fbd9a3fcdc664c678707c7615bbb0cfce0fe40360bbc5a21920e360220c3045be37e60f51a7cfdd044113ba79bacb8102835d2fc22662f2b478866380c604823cd75997bdb264c52651236b3b423469a280ff267c52b654451d6b8cf426c44c7ef8c1c23cac246547fc6a6e0c51811afaf0fe4d55a3a730608fb504b22f3af6836eecebdcb0ae06c6ec37e246dceb75225e3b62c5e6d26e6301e111126963512ea232a832e87a6698a2a0df52fd97a8fcbec0bbe0920cd860ca2edcdf6374a303653db8ecaec5e394917529f49309e7e4ce9b1e4400715b7edf9cf2b7d08702441637f16db9bbe8ec9a0f87661127041fd2df6bce85470510fde7849ad83e84fd3292cb740efa08c7abcc79ef1e1133e0c70f77b75d7204255c39cbc54f47e1d1a30bc1e67330c93926a0e2b5c8393cbc9b76643d4e0f287a5ab5dc075e88c943d98bded8d801c4906a7419bd345bc9b724bd1c372d91850875f51b9022b45bfed4b672b3e127caac33cbc714956921d28352071098a3806a8ed96710b7e95dc75996638b73ea270d6c3bf57f6587d7d5c0bec237cdb5936223079aca41a23f0303f3cfa85f0118f6b14c08107760d0dd6a302ee0d0427da02baa277380c499556eb7368ee8fc73109fbd1ee3d51056de04137188db93b780b58d9a39171022aac5463fe6e1f09f4accc81c187f9373bb8a61f4fcf68d0396e658364de93fa2378b73b3870bfde646eed19b0426b17d653889ee6b8fcb08d9c4bb72de1c0bc439a25ef46678b8070625adcb6d54bc54958c06e7370c907ab93024c0e51f45a135fc4576a0780035fbbdbeaf93c25a39bbf7b12b88992aab87bd4c2305b4224822e2a4e6ccfe3b7a54e74f922df4bddc2b1a843c89964a17fa5dc31879f608e6a329121f9ea7bccee15ce1fad72cb60fc12d5258a6eb81f0179d00b7ded24cb3397ec635a5c867028e77a5e7a1a04f1ce9997200eedf884ce0a65da449e4e25d3078145b4c05ab44c3abe024430ce5b01e89a92bfaad0b1d370b8b5ed6a22b8061f374f1010e6cead3a77193d4580b471739e8579be64c4aee3c451f3c45dd7bb7ebb5d91c91fc293087751524f97e8af7004c7310e63bac24944b33d461a63bab85b4ba4c23c4d6e52910b9faaca601d2d3b93741dce90586ffa166950fe8b25a18531d7a3efa907213af6c60c5ac8425094f24fd1ecd9ac9e1135a99fed171a5930dd70ab50d3d861066403379be9e94bfad5de13e842ef91e4de86c7187032da17f784021369f1cc2e0b48ae118c9b86d918d58c1905f0ee9e5668032ccb9ae9d5f7dd95153fbbb2f7be266b4e212cf528c2742610d41f13b173b1aeb7a843aedf0c4c4641cfb560877209a47b8b6a9ed43e0c9781a491835aa02eea33abe140cc3ccccd554c489d4b45e2ff384b37526592bac732cce9fafe6e9b3dde162c0a3591754b9f6ed4c3ac764db858eded52144a33f8db289a13e46657b742105bb38f2848562ba7c5e271fa672dff0122e95c2742eccce1a9eff522219d57a2adb81d5df3c506cf2593f816004431012065987f6785b443b313e49d33de42510314a3d566dc676a28976778c06777ef60f942196bffabfd690808800be72fc237acf4fa212c4aa2086d86da5e6a738738100210e3debf0fccee33c682ebf1c2670eb8f1ca5eaedbe02bf4319fb71f1307df9aa68aae9fcdcf49889937b5adb753f322b13c16a4bc61b10caecced6396d0226d4518787df27ac3b6cd8ebd8ccf69e63e8c21ecb075b21f79c75a1735188cacb59a8e6dd883feee295eba586c8ffbce3b91b003308a4554e8b36a744b46951a57d809936ae42d248914804a8d548d5b79136ea5357a2e450693ae6eb9c0e11204bd07fb929dcc9c5ad5403e5131e14796ce9be231756ae268aa23d6071cc6a0f2d6d72e08d2b21728535dca381a6abb4e7e8b81ab86dee9c7ce6070836b2fd99ab0e9e51939a4c7d6f9497f8b975fc0afb2d353e7adc7551bb355dd4cae14c2a3cf4b8d10bc4faf3bc677d1b5fdff3961264b3a2f9af038edc34e8453b6e82a5e930fc1f97ad8cd191842f23a33b3c74be338933e2b1201ab2b55d885118d964822a58447d24ac0421b9bd631420df7728b95e0247ab79e1273e642a20ef6c798d6a503879278cebc5fdb23961d3d89b330b79f54d081c06b4f2b9862be367a25cbc5c939938e1e108caa39ede41cece47bc8c0359e73e4f3d000bd860769ae6224595a031c40b645f34d4e9c5c7e802b3be3462f9f044cb62cf9c5518b1a23ce1982630d596d24f07891725671ce59c198d662200ba3e230d5d5286ed718c326fd67a76af2532a796d11f30ae694be133cdd9a362b1be2525ad965c8b089568d3aef19b2a5465efdf2d29cd0ba9703112c943a6faf54659187d1e36bc2d0eaa10dc74331e64149cde0573ddc5574ce74b32c5183f13fa12815edeccf027ad90f1c6b0b2ff5fef625402f0720d301d15a120ec4252048c3c20f43e5cca49562bb4e7ab44a9711d009ea6e135b138a17cb093b8274228012f597d8e01854bb7c95b13e21dfd2d9a48365cb3119e58108f5e4463b1134887636ba1ac8a10ed45d6ea01d3aea68ab1a92925169f674352cfb64e4c52b50f7d43ec2135a84a3316ccd459e2c0ea4a7ace231d15364e0e0094c077cc9b08703658ae307d08d9a57fb6ca01ba225c59ebfc299711cfda29860506149865d431424a530217a5d1d848d579637c8332135ad6caac23e5d5e5f8657df2ac22fb93e822305f7c59229f7037e51685b3f0ba97641045a7d24f866110aef3cf210e40e53872bafd19eec8e0bbd3cd6839aa97bf27643ccc7b95a3b05eadd5751a119613177670129017f1a48c4355afb106b6cfe0971c3c82996c23640e0877ee6da7c3b65d58304e2f815fe1f62612c8d6e6ccc544f0237b4c0eb717132db909d58bebbe475d4dca94e64cf06ba90bc369204426cc2a3e531fdf285de0d516697ba8247669fb732a7249f3892327f51319ed3b566acbac6952d16e9683de4980435040350198783a45f657696507e81c8282636ed99aa90f2aecac2481eb374814c04b2e47f3ab9b3e643f6860147f65eb357c901200408ed163cecf58c3795a78d0de4790216bf1b7716cd018460035675c85608a92120cf46bed11b59fa7bd2f905412ec097ba7e137f04d3b2cfbc8c602985e7fa2819808873bd2dafa0c4f05e92ea9363313a7c8ff0db21a752785b9830081fc4049e6d616faeb3c3eaaf54739332f0b7fc1f46538566d993d5337e824ad70de389e0befd117356c0f759935e9392b1d94772ee1556bcc6c98415fba7254045b02d724fbd86c189073424d9215cdb351ec2a5848786cbb23d2b73e5811b3f9c5f0208473fcf16c598ade5f6271afac678f7a3895725cb53267ce78f09771ec12e97d064746d86e82176decc886b03478d3d8950415822b1eb88ff6ed7f5f74cbc9def74518247a69faf44bb889fb0365b80e2279217522ec098f2ae9ee4ca22a82df82c0721baff105e528f04381575603107cfa95515ac284c0852e891ac185ca4e2b2bb10f3a5177a53e595cd7acba3c10f4b81319b63772362ccee16db93690d1264bf12bdda4850f4fa6e50250db11efa4e72611021b22df27f58a004cc7d7aae94703d448c8bf4348c56ae1634128af17c42d83f4a458efd58ed5616ef92b951e36c33ddd695d9001d598756d52e44a0474d6b8c8ac58230d538416869ede1b95b33f37069ad78668619d33179d2d775e3c2c2980d489cf3313ab52ab6f28908aa49b569a069636e85ccfca8aafe61bf51036ba1c6c8db1224dca620d01a5b5aedad2919a667d22a9213e6cd8fbdacbd80a2040c0f0b0696992f81240bc56da4a835c1eb334ce7f23f7f29579c4b88bf850deaac8d0c9492e29e13e64bf8ff02e2e07c18fb287ca159e8c8e5e619ed677c2f6410123f4482deaf8b50c02c096f9d11d5eca9ba5fe8f756c7c0e5e0bdbcb65d012e3bc9bab08f98589cb279c5d2c8a532bd97a806100f44aa8cf99b1c1d9884e15bc62f095128fa3cc3b22a18585487caa1516a72b17edf89d456de5c5007542d4d12759af621c5d5622325ffa932f815225d107b4c26dfea643981aba27c8a74fcb4c9540b9e7c2c13e8955df0d01dc495983c37b591282014ceb925cccc8656e8d418de88197ab83565151495c9fc350d9b7b4b912c396ce2124749242a3a39ea36b39b016f0cfdf4851c37b217aaab1a888e5831c86f690b6feae418f96c369e0af6980c4f84b396a0c68f4954e6fbb285f8507e9f4f102eb7ece5d0269f8a3074f1365ea015a5021336b20002fd5b03794b6966ba6bcdbc2970351a40eec168c4fabc79970d2af2868b176eb419d2a2c69135e03c24a673abaa5a3b498f847bc078bbfce0288c4701f319f64fc0863463dbbcc4fe730534ece1b52da5b5e8a79d8502dd06456d680aee5d29454a3452f7306c725393db493ade38058d4b2ee1920a78a084f80a82f9fa0b68bf7b3ed2f6d6a72f06074579ab4d29c6724af9aedcc043df7399d110e9066e560f011cbe75fa9b5754cb4d4253b2a87749effdc8903de8d34cacc8df1489622f94600c7aa22d5e54503701583ca06098fe135d262c6794bf0c0b0ea2fd7c08b02f8b926bd5f65e9ce523e309cad49340085efa7aeb1d8be68e30dda5f61511896b5bb2502149824d566a59550b68d983bddd33c71867bab0dafdd159e99e03bcde02a7ec4f350b3273a05a4dd7df76043c164c5379bd5381c62b6ac90203a5cece19736a8b76cf8f9d94da3c537f05cf036a98e50f628b718d2381f15cf65772c3904c8a0bb28bb39aefa6d6e7557609be9f1db27e78a9ef43b1251e172a6461abda4bc4097a3204ca31024b7b6372f542b276cf216bfb812d989f43587e3a52ec7be8e0b27742728cf57e23e2af173c1795efd6585b290b9befaa7fd14c973115691dac52e5fa23c8b0b7e18c686485c3a99569d71278052470878fddb8e628c8fc4714db5ac0f590929ceab2a66bc3ac593933113e921b5f2f9d9e4b50f762d3a9fa108166468f96400d061959bd6ac6b2a9ea77dee90ae7b2eea313cc4d4d09372fe9862c00aa9c4aa2a56640b96c6cfbf8f1d9a1d365548e37c63df9ba36bd22b635fbe218fdeaa5168d92b808ffe42df293032116d30131439a05a3b17d24abe76bed30000efd1bc6f8e6ddeb151ef2f412eccea20caeef45080e565259e7742eaa57d3396b29c8ff3df1a9d165cd2407afc9fee2685dac10eb4fbba9c1acd3b51a13cd55685c68916c153c12204889a6b6d908b88e855e0c02dc9e5073625d3a7ac171e6f47da2049bb44c598bed0e358b55316ba794f8ee86185d8b92897511d1f38a78f5c297aa9fe4b0fdcc444d9175d15c0253ad408c014569d5b6b713963d237d18319571271ffb47c4edaaf9583a5768ad2231ab8d4775a92d91dc17a3e75718b482e3cd13dcd90c0078c5349b8ab30a97193ed936d29d96cd4e90067a2f7fd863284e251c60b0341e292e1414f84a50c7293941ed5e2d5f1529e71eaa7a24d68ff1fdb363b883bcfcd07cf0c08e4e5a8c39fd4747fdb465b94ce33676049f551830ee76faec0602967c280c8bca35d058ed24d325f8fe0ec16c3bc6993e69af73cb60b12e23a9852169d909f53190f045235b4e3f11b7a5663aeaa4d49bb31e5f8852290fda51d6abf97e60f364a69770d628d1480ee5c9e5cf40e834d06d4ea93f77b0f66dbfd0fe94695a9c4e15000010bd8d25c54a2d5dfd9d7d3fb72c9b41e63c8848718a484829407a46688e97befaf1c1e0d553c828dc79504c72e6a8aeabe926f140df976965041f2ebe4539cf955f299f1b4c73d86bfbb721229cc982fdf42ca9c9969aca9585debba166aea3907250909e469bd80fdaa655b8d1a15d8d94c8f400a62cc0d569b65f5f992fe5ce099c806ea89828d4ca11b51e0da90089e35c14b4c89718c903da925c31dcc354e361190e6f2a7f17a5a6881e437144d2d3a5c44cde6210e24490ef31b36d382a2601d9c09b6867a9b6b55fe34f2fdfdc543ae48c1516470a39ffc4b67eb1b4a75042dde59bbbddec580f33acd457dd931aae746b440916a6d4bf2a42cbdb388957545c274ce8fd4bda16dfef04777225b617b8e7f86f5d8cd197245504c84ece179305773940bf05dc144f09397a583b46db5f71d2ac143f163e8eff6ed90a8309b36148ff7ada7a28fb23020f5d719eb4c06486cca9f2e8d7266e6e28f35a40425c8fb32f597b38e8edfd4b675ba2956544b5ef7352154e7ccaba431c0c2c52bb1835e53f166ef93473925c3ff8b42416f8deed496166c6598fc4f8aeef9630c71df6130f649da03b351e98c4de6102982e38f8e0d7b9054b2a3adb7bca5e245dd6263701cf07c938caf892a138060cbc3a68be30a6837d6b5ba35e787025d54782218894d4227e51bd64f81edb5148570f51d1150f3cced06d901944bc110f0b2a26641a7bb3aa280ab8910da487211c6633c16e7cca59d88ca26fc0952f697f764bf2aab70aa6e1b36289663a1db2f5c5e2e0d4eb4e67778f67c60947523f27210223973a52996207a940153ca2945b6c7d40288862e861622d5d09bf8c71763fb9f2d4b84836b80d3c4b2b650f7578f06f0f2b716e4f00d5dba24a71b69db33b56bfe0da20683cd20a05535d061169d40585de8293b056bba96ad8552c0bea7daea0dccfb265bc0cdee6f53fea790c65c127627a511d390c808896f1b069391097fd0bf7159b3ac7345a13bce96f5905d6aed2efae871acea75a90641649b94a90cde621425e922e499b483182da156715c82323c482f96f47bbf763a8d37a06f574115599127cb244896f9df9f8c049c9eb1e6fea2381fa94c8a0f6d9ded75f54ab3e9d3627b9da5111ab9bb186f8859d38aa1a7c7511de7afa873f340ada6220137b39ff6662f1964cd102e67f9deea8ecbc60d1092359f1e325b626bbc95483949a5a44096818530f34dae18a501e38ab27bceb6734217a6ac61a1c9a9c02377c70ec51256a6af3d9c2c806e2d2d39509ed1ba49b06364908d5e1979d94c0e369ab87305dafbde7e327292e13298665ac6a57af7ef0031d6fe4831ae1061bdf577bf84de205d0ed4b4521655d661b95ff233a430a8665fbb425b17a9ff2d525db592e7494922476f0e7425cfddde1133315d3a7e66c1b8e1d124d498fda17b1b43899e8209c4dea815f354122cd7fb2aa8c0d746c6e0f930b4bbd4f1c2177010a7e306c0d44b67132e6ec4cfada156dd55d1ca824d63b32979b2704bf288c4393893e8f213fb2ad90ea61ab48514dab2eacdb3f75dc19e75f22c9173588219ce390abff3c233d7d4224128053a210cd2b5b6732fd3a6533712305e1b6489b6986251bba58398b85f20531e979d557f235d4c5b9d144d58e6f6644b6c505fda8b2210aad3a82e22a409e809c186750dd5a46f1adcc55577b473b455b78a697900a85634ad0119ae608eee4d8379e414aa7dbc5e46c467e22afbf0671b794e73cb1a3781fa953969bb7f416ea8208e02c510151b84f7a1ac89a3c2c455ac1cb4b522126b83fbd375281b019b42194e0a2359ed4f89e77494d7a977eda81d8882f0f63b38a68387d797956a78b27427892475d2f6286928f4fc1de1d2007f7a33e41b0954f4d828e9625eda6c39123dc0a1c34ff4231b2a6adb6291b35bf40f90de59edbf03284c246f3a1125719af3bcd60785bd8d3f94b37bd89f7dc1da055557406bf5206aa79819eb6fe8d75f32b65f1ed83af9017665d93fd6cee943e6aa59aca2bd29151c834a26ade32000d1fa27107a291b7ee60ec51be10eadc3313b2fc38737933804b18aa591fa4674d72c5fcb06179ec3717fa0bc3a4afccbc18d5e58110dd2fc9087736432784ac506af5988742773b0828aa37eec66cfb6f8d46d4d93d10bdc96b3ccdb14dc55e9e48ea7c129aeeeef7aec721008e98b6a198d032420830f0e6ad2d9059616b633270d462ec20a01699cd49c2c72d2ddf1f1bc4f38abb69880b575e9fedc3f2f00b5a8be3e1a3aed55db8c1c9d434090e723559234263b3c7e3a44364e880c6e96c0e5ff419ce2ec1fc2fee665780882aecb974b84334cd6e0d15e9bca337bd18e5449da09c9ba265b1b8cf9773211808e0b1e70353e88e8f5e07561731c6a4a8015c7f8d112f999626b74c316e92aa0195da500b29055c4b84ee30885636147f5b95ff1c19b2e4f1a53c91bfc65b8c70812a37868c3035da4211e4b5d8c277fd141e65f137269ca74fac6a64d31bcdeeabbe0c977caa933fe2d4a5b84048017715ed8af1bd28a82c65dbfc9e5c543b46de406fafa151a48304b0645ee52105dbe544885ac99adb00da367a9afc9eaa6cf8674a238b4fb3a351335bdd55ef4a698b3a663204ae393145b88652ae36e6ce863fa50dbf4897716423e483cd8f92325c429e8391937e34c2b22aac61905a878a36986d1a8cf74315d59824413e4a06f33a0b8a71ee16f221d8f58067a398e6cb97c397608eaf71436f767858928483dd9a71c0b1728c9322085958db4f6cfbcfbc1ff3fa7904d1cc6a1a30361aa4c5dd1ce2cace9663ffe4c356334cafe9f8d8ba8ad458e7a1aa78060a728f86b9962da60969e02f1b46b6d1bd8904104def42c4d15b7a9f4751824d82ec5f7391e9d652adcf0678e69ddbc84ea55425f44f8ab99fb1090ff55c024e7a8c0e232c2610b705f9b892409ccb57067b89ac28951cdaac07487cb8d227ed1b61aea8f23a2f93a58d9068532936c6ba621a48adf16e3fa6d3c044d122f2786dcafbfe4aa6c5f98ffefedd0d974e32e82f578715d78b4174c91062e9d7dd3a10530905068941e28126d7c32177663e352a5f2c3889868cf779652eb7f2470f975010db1c4ea43d12111c1625c13242854f02524bdcbee2a9c486581df9ab6d290ce58984620711882d8cc168dffc8bcfeca9b166b182fd4ab9f296a60a70da37397dae7ac8093adb10015d0f1b17ba77af320f34fc511b84f4c7b5e1a021a1db3f83ace2f83d83d164e33b0010a437dbb77ab5ebb008222f0847b01d515855c891be5b9d46c6395fbc25400bc2765d47ec998c4f89d9c5729f9bc137c1302434289eadc10e61fa886bb8e47e2bd57a754ace82b32aef983491caa5360158aa11b126b0f3e448464f0d3800a9931ff30566a6a6ae2fb200055573e7d838ea680d1435dbb364ec5cfde6f72a5b77dbed74a51b892fb38d9c2a505a07321f57c3cc65789b13024e4c4994f5ed1b445e86cdf3f2d9e37158995a844c1102bb6fd6290548edefac2bee4263cf53a371af9127be74dfe6ed68d03c51ab5ba27b0e22840781fbc9161f67f28e6fd6807c75aa2b357a4ba3f24ebfad11979cd8fa6f09613e942edcbcf7df4d8037069247c89ba3a096465a722b6d04c5dac059d4a956e727828b156a143b942ae9d6637a63e1c457299835c580f1ac01f5973bf3932971b61b6b3d106bccc4f2ba126143777c945350e46708b39a63c597427783e217c8f2910d3af9ee7dcbd12e094e89528c775ff80ca6905bd2de44ffedc557cde1145d4c8a05198682cfc6092d678f368ff20e6088d6044506217db6e4b8d25c614960de1584ef107d5af3f6cdc4376b07c1d8e55f28c73150b8041fc76fe820f23140ac43031692dc178d17f8ab2841585df6c239ef2113f9fa1e6394330f1f5c52b5f25f444306076266537bc24dd096817e856f0f9cd3be8db4ff35e09fec6cf567673d62ce5aee49bfd61bf1fecc7fa65098a4b4b867f3da5f9d85f1f51d6dfe30635a229fcf176e2ecf259d139ae86af0f8551463965bf3423eb6bbe49b880c637b09d801abc1af47673543786656cf4329dd8e3dc694b052d39a5ca951e928207dedf7199dcd530ae04dedfa84812cac8e7e4f24f0b5de166cb7ebefff59946e8842baf6cf336d58aa03f16c89ce7075808c0ef4de8e17892213d9883e8ffa0ac95237014fc33748074b66907f8b5c013bf64cfd786737086c3cc76826237bfa210252eb8f05c2d8b4c1108e90781d25bab6ae7f017d783ab18e713c3cac457a83bc4bbb51c472391ae3d07dd4512c0ec4cdb4c4444f1e9e70ef52a799698e2f73340f0ae62a8edf494a74b81a8312c9b06161f90d792ebc07af9a8ab147e539b0b810833d6c4b4e170feec27757c5d2448e54eaf6a483914ac75912fc4d3043a806ac9a1f3f337fd5af3e7a1c3f0dbdfc7370636bf361b108c71e3ca17343171c42854db73957735a5860fa00f352334f91479dd0ac7888955008e78b2d42443b484a4da814b5b34a9b2eff7ba3318d611ac4db89f711b5af571d38a85e212362faf4a3c75ca94ba505516a0c01fb2227235884e833762d3c4b3e5c1e23cf56488d750fd1992af434483bb87b899e07c3e5ff75583d7a2582f50017632b29ecdccc835e16a1c1fb5ab7e730167a0c9c807420e5067687ba2b30a3863078222bdd7faa85fbd8c2b739a42dbbaaf92f5da3ec8687f0e291578e0f5755abfac1c08c752ed6fe2f57acef29e48a1b54cd0de1f14b92e84633ce650b726fb8cd40550fed64ab2365653cbfb704235511c8850e9623cf014263ed5d2ac4ac4e93698af608a38e588e3511903b9ee9f7cf18b10cb63c43e4aa33cfd16a749054ab0392a3a05fef5207612ada5bfcbc703db5a85d6a82cfe8921d34860d61de5e5f94c1c637774511354d370c73531d6765fba353667c3ab97788f91e16ea48805b729291dde6f68a023e530f12ef7d226247789726beee5dea4e73956335635ee9331e099b69ace98b4cf72fe7d133aba70cf78d47e1dc06ac3c3de2679bd6f8987110d401bb5d9eea926091018c0956c2505a08ef1d86de97ecec690d5eb11db9c1ebb2a732393809bc960c06139ed78945d222d2b1f49a7ecff007c51895b011fd720b1abd2faaf44dec552435e9f2d5ade9b89d8a7f60a55867911cad5d76705e0d7b101867c249190266f928e780a0c4de98e620a337c6cb90d0e7a733674af7954cf59d93715b750639a0de3ffb7b00267e52d4dc2e1c9a30c700b675e5be7c10b151b9ebd654d2b67e1be127f00c8fd9dcef473437d62a9ad9b63822b08215209dd1e8fbe51be26ba13676bd7dfac04402fea86018ff0b214b76831adbcb2fc630435ac7e323237bb628ec3364c86e5b8de1e92eb365d2e83ccbb338416bd2017b23fae5fa59e43f8593570924a16fce0c7281a5f0f4c4772a1a4c5ba6fb48868d66ac3a9632140f4ce4a62f3ecf1a5724c57ccab2f92f62b65996b829ecd6b055e449521da72360dfc82a6fdfbd122af2097fad945d475cc4226a5529477d1851b252c83e11662adbd4dd70aab876ce9be6a9d4d65a33fa6ed879cacdedc1bce0f3133ae273cf31b146701ec4b883dca04ff2a9b859df5d2f124d5b6fe1affb512c22c19d795d95e847809b134464bfeba32feb0ab740025e0b746255f0b17c2902eebec8f5a77c20054520c416f7889858779229eff106097cbb61f61d355e4ede9c7924cde7fc919467188a56720d16c833177d93b2faa7bde3ddb121b06baece2641bb4695a21bbae867b2e06f7e26fd2ba3f728f662246927e907f4265cf962fd29415a147106e950be77be73d65431fcdb6286aac755b0240848bae89dfbc8abba0232261eb143655aa7c4303985c72bfe9c9a9a63bbc2feaf106d16421fd9e6ed9f1d5f7d05031112a8f59f2feebf93a47c4ebfcddaeac81de43507bb194d81e8f07d5e3e23c15561e4f8040bfff0cf2a306eb634dd62f9f4546ac9da977186c7c7da0c531d3952664b1837c8ff910a993ed0a66d3e87c0648e3108dd75bf5e0de859d925fa801437421591a62d3188da9e36a4810959fd685b916455894e731fbbea6416354ccbe6da993f2748ff2940e4a9d4c027bf56af3170abe03ea2f633ed433a9bfb4163c3a278a146120a0ab143958ee5991f60a055feca3160a0d421232b827d044a1cd9fd4726419a327819a869f35ec75f0ed45354cd74bc118f73313aa98348e0ece53c838aedb1744dd2aa94b71230ca2d8118ea1ffbe0b72255327631046bbc50620587195fab61603ec4dba579378ebf645123aedf01a4a1112bcf0949812305ea043169f98e9910c05ed6581ceb38127b28ef1a468cf73816562d6aa5fd2091a3c0c2b4063fb4739affcf60bc098cf4916d9bf8df85bb47ac0247a8bf98f182e1e60ee99e42d9a3cec953c7e6e25a72183e00281a26140593831cfbf854f2f92eeaeb76fef53f2a639a90675175e9ac1b8643fbd67c4334df7f3dba6d1b5223a7607c55b81b7aabea8eafa7c50443cab21ce09b19cd0cda04897b04704ecb498113b3ad19956edd55244d4a65b64613bff06f340c7cd264874cb7ae092509fff2495b498c0611502f59e08dfdfe869b70bfc9aa1d5a9b22259cf6518c9af485d83c8ee06f4dbba74b9e9e949bc956b828f30b19a53d1704d51aacfee7a4dd4241a98871ffb726cd93e7e0335bb43287545809ee24ab7dfaffc3c520059c6b079a406f284de673fb9dd4bf63ade4d746d71982cbd97f33530b2a2dad7d0d5e17a185c5d71f305c43cde3ac935ed6bdfb73cb4775a82cd6b51ad3e38acde44bb2d58c1c22173bfa8f79e48a11ef0e666c3be25e6085a99e841cd0870615b45e3c3a14f81da2031d7de326197b99631fee6b4221fa4adef61dff4193d2af0a8122cb1ff920ecc79fa6753de87a64b065f838de00216954a92d524aba650e4020e1ae9ae88cf3d259d55f4edad5a91b05a427be6150e35e70d113ebd569e858355918be41b098981731c134981de2e2734e05b91192ba96d3442fbbba4905ffc86de4f458c845f6e5241bb09aab83bc821799ec99768b76c2b0e18fd14151f01c405454bb545ab14cfa7e5734e503c2a090ce2833d1129ee88836a7ce6d720093c0d571a3eb030a78b2ca9599376e8266cd49c7dc39c1514e3a15741735de1e3016114e0679e24d2453bab3c8ea563b2f6aabcc45740a6e4406a9bb0b61550609a2d0a28960e450e9b5e67f843bf46895dd07b5ea59e3f8439b6aa0cd29b25508feb7138d5a21f822c06d057d9dfb28a95f797f351ebf4a53fccbbfcc7789a8599317f17010e67b63f4ee4e0ff8cb02c3d1682bd7609feaa0e6c0fc920f968cb44fb3b8813fdbf87eae1e838cc5c9da3aa2bce025b9178e360c9f90317d46fd613b3ea886e68fdf63f5528411763ad23fd914ee773b9ba72813a0f07f1149d1d7517b19f00c9dfeef5821f26d9b835b15ac467289c5d3a23ae2f9382115d95b777118c231e95b6bdc400aa1708ed60cc1eba38b2e719ec27e7b22ad0b5c55c6d89c093c7c4c2f03f8435442ea08846e897209e5d5577ff20369cbd15622d86ea8292a5597a33b92a4e04e88876ef7b7b3af0d9e8dba2a7f7e6340c9badcd6d432af96ccac25ee06830a202adfdd11da6e2eaf17267af104d5e8e8883c50e2a409c756eeb36d66139f5889644038d7c3ab0692d05740dd78dee005d46475994641979d2f518da833beca3f6dfd18f1eb5deb7167c9f54ca1fc26e77d74921e902dd31945deaef44cb4fc66b90cebf5e94bbd653abc7cc0a66ad9244eecbe89f4e6ebb6a4df0a5efd5e634d5f099224a85bb008f9330edb1e17a7b2d01ff6cd8d9fe3f52990a3413b78d055142eef410ee4e44b18e5c2b251061fff19842f01652063e25f12f95eef2c48c53332a0b85072053a5772078d4b32b38ad24f7f5abdb402eb8d2c7b3ef3f98274a8ac8ec554d2195099031091b0c5e3dcb3597f16ceac6d9c81dfe38ae16961b0a06ffbed05c7fdc0d9d1feee724f4de9c5900b0d365ec5256308a88f55026d54b0b78e082a44effd6a2030a502e4b7e82ac357d3bf5f624b470ab1ad8108bcc5e0fa80e9be35ec157c8954691b015e5acf549d0ad5cb463a54131b786babedea95fc7868283d321aff348d5f5c999ce383cfde6c7fa6c355caf6ea38058a6fe7098878aa39ef145a03c204bf6e058b331bbf073616b52983a01889823be1a93eadeeceaad36720342b4fb58cb7d53c06fe03115de4bf6fe354cddc082cc444a111ce69360bc5e9f125242712f0c0483f2340bba4d90f4e8d34e912653f8a68102a16ae2cf98dbd006ee1efbaa8d3aa4383a6947043d23371c71faa259ea9f5a540ad8fbbacf1c9ac33224a0ce54a3b8705b1772469d92de926ab1d516d17ff1d0fdba7d9089390bac4f76943da85e038fcb04a09b5a0a67e0afee320d3ff888a752647dd8a37e12018841725c5608964003b8cfcefc5059359bd4b0ac17fa16c8884dbe93b767cc5777ccbb5aa73c4c3a21aefe617b7ac61d899b9ccf2ad8fa3a6520c268fe695ce804d8feef65df6a24fecdbc6e3c6df85f9cf6cf107f9f03efb534242a544aa0288ca489da1af0273de287040610c6ccf9c636d3588779ce097163c4a0495f8aa46a4dcfcfc872121d430ab21c552907b2e2313ae06a265d8a474dc1d8b9d053995486c1377813f6d547518426875fdac55a78eda2f8777cc818e06b9689a8984430b4e38f7b0f9b3e6f5d89dcfaf4f2f29afb40afb0d14da7d99366bf6b153e43705fd9d2d9a917b3292c888923754da1eb71ead678407476e54ff4b595ba16f3f7fa45a1e3362c7b49c9a11a6991da02426431c6cfb0ea5d49a177d1a6fe9ab21a0226e0098a5bc7e4ac6d6c45a4adb38cf98713d438c1eabc6f85eb2a87886f8c9b5eb142994811826d21f6e9ae33e354f366ff9f7a2778c7deeb02c9d166053783007d6f7d712d3085eefdfd3a65f08617e92e92b4ca5dcfa7290d288a41e70515e98e048f3e036c4b524052027a0ad4309da40ab68c877ce89be83f14d59421d1e9294186c6e070c803670a7c4b26646159ab31a7bfbe9ed22be06c72b85acf00fbc8d69b79a1d239bbf4c77df505d74b39d823f5f07202f11b5f2802b86136320cd5977316f9f450857972e23634ade073294ee8be960ee076c1b53ad3c7269a6482a7028de75deba08b30afe98b5e05a7964648bb0a2f3f5ec8650972f43cf829fffed4c2fdf707851fbfe8baeca51e8af23b93ec4a31748f647a4bd59456520fd14332af2da8b91db6481ce0888a14373a1f116d8dd9610f67579f009420ce0c619bfcb28610ab4e2029f97831625a24f7de8b09d9470b16082a54e6f1429c26470c877c87e74a72d0455b001e20a9e46936511051e9ce3d4f296976e35003b3b8dfb3687c1c1b7f9ad344aaa9618e225d2d3471a2a754dce4030d2f6b64dff3b07a2d586eeab48dd789036c02c8cbf73f364e4dc3539ffc742eda8fe19065f6a3656a700f0a2c0d31078a374dd27f3e183daf7a25f8cb33d2e460fae127dc969d5486d012dd8ce153aee02fe550bbc3549f6d2e876fd2eeb81b4865a1f550cc57e5dfc92979be7a58f1344af01993a25f2902f684a3abc4a3aedce5b5587f20c28db17afc9266ae5bcf9a97463eaef87957abf3aae134acb537b786d8c5e320b818bc0a06959dc70014ff460bf73366a396ae3e9959a51fcd723eb3a6fec3612751fefc46a58f83df6c65e6d29e548291d2b57b3c20b5c803144201932444fa58803d956c00b1b7567e4d4682c4d44405c1730575b2422606c4392a7c3c1ec214d8f5771a0ad98f2ea78f7af86bbbfd73b1d65765d504c1c8f06afb05ec0bbca736883259b356217c88381c4799d4bc695b60f9b4bf035c6b66b0a7e46119d19b59886a42e78c90bddb797ae62b6edcca8711b9a80a20ebeffb5cc1e7fffc8a616fbee257408eefebb5f60019f49b50e8aa9dfe9994cd1e5ff689d56c343927b670fe9cda4862a3834285e913e497ab48d72eeaa4e2b0001d1b52dfdf7d928d5328fd2533ff4d14abb33746b8588fbf5c52839c1c85d49dcc4a6388203aa38d0aa906c64d2e396c5b85ffbaf80a02cc90e2a2f86149ed47cd999060460c921e310967327440ec15bed7929837aad62d7d41f8e14ac8ba0d66ca607b20bc8c86a2ef94a2ec6adfe5f100fd04862533109db87355354e48937ea6ad7b34e7f93eb7cdb7d2633c1e8ae47d66628a4a20e1870326d711fe7acfed1a1fb81c477ae90c2c922d58a56f2c9ea48669f5be17db656ce686d6cf0645569d64bb0b68f4ed531ce179f3f46850e5a36103d139b352d6bed86d5ba6f62b795b8a8515191a8b97c75aaff22ba68990743ada02f35f7a102925a63e3de25a914211fc5705dd4bf87a90f9af10cff1c8c738539760dc56c845f6224771adaf41d7af16229e219d483597bf07380bf87e58ffd8a88effc60bfef31bfa887a6af321ca58660e674da4a68d64235f43961f3f67d7829a4d7dec5d1080f753ecb0f35387e204de71885e27db086d38287da66a8b4ff01a1dae79479a9b2e59ab5b36c99e37c67404054dfa5d9f9eb3084833b35648e97be196fe124958f35b881366c2aba654f812e94cd8d02e22bcbc9cd5810e5e93b2e8f74ee23773a25ff1d34534109e8ad989f1bc2520e8406911e34d08ff54349c5a66c452cdc1347593b3037a0a99b1b6ece82e08a2b459b398aec23007266f2d602ea593086ce93ba98f272212793bda8d54f7151cbbdc9d8fed063a4fb747a17b8a08f08978f7df5259e387be8faf69d1f0c78430125684c76b6838f5fc038b1ec9328f41499027893ef58a625f01d8ab2ab738651ad8c98eb975eab484ec96e1748022c3e280c83e537f2f382be485100fe1e01e2b29cbebe4f5a9c1c4227e74393541460262b849586199aa006c08f59a1cf4c7c5738f5dbe586027852ab39b1b85284fa700abedb1204050fe93082ed0ebd334a6bd1dd67965434579e71534ad08c53114abc95f72cf2aff4d4f20ced4c9cdcc28adfc7bae377eb86923a4f4f8397398bab617e6e4f28537c7cd3ef4be5758e0a03732d7a671fc98d42c3e8ac08376af826e79b139735b880da5027be590c39a1eacec6b4aa40bdb51ff80e56422ea35c31f10e5eff8c995cb9d959f7a3a1839aa40e90a43e49c9627f0b778a796fdfc77db616680d6b206cc649d7ad71844c768506709624fbb8ee205e697a1552d104a505813a78db9086d3d94e9bc6b6706b4c706ab85b752f33b2bfb665197f28c7465d4cd80741233c9167e097cd32a4efa6591894ebdffda8c5fe5d5da26e57299abf0d1a57db5c2250c24a4490a5fea97784aada5bb0f3fea71699d5962f0f7e5ddd0c625bdd38477a401ca2e2395b421f9023dc9f09dcd014864450a4bad0467e638243ea803740436bf6a49ab8bec8d563d94e1bd91b7bab2339745a70ea55162ac29b8d5710cf7a170657896a0c3412b337d5e17d572263a4433d6ed01405bc881feba2208610e1403415621d073e8defde8b19bfd3eb0f871451c199b25b30ae8dad81d96842e33f9c7fe447b90453066fee8ed469e35c338f21bbf08363739d4d2b90947e7ed718745a5ae2714a0513844c7809c61ea3571879dfb6c55e898cb1d19e6a511c7d402888768d3a7eac87a16e78d93c33187d64da5d792a5eb7dd4cc2f7b2d8b4c205dbc5f1f851c93e3c6f1a7cbae0714cdfa215013adc19b2e108d7be6a0dcd02ff9ec73a2ef6e8f02b11c5b10dd560ab064bb678259850a0f8b5bbbdc5f476390cec8d1a004adcf1b3a82ea10f98e17c86e09fa42199f8383e580afa1ac54d33449d9d31786d6e6d65efe634dad4ed46d096b61f547cbf56224ecb879a618a1ea250b401b32ef24de7869867d20a49ad842a304a83db99dddd6cc52de6da8abfa7be1bde779b8c0dd20772eabb0228628463cde064c81117f31e7c2989f42333ff9c59de1dfe67b63d3027df418be487da8977d70dcd9b583f59c4c602352ee2ef2e83ff6546d260b05101e059e94f4d7f77ee5973335f914bc530fc166cee895f9f3a690d2388c88d4002d4e77cdf70b4db93d9ddc77ee42573d153763ee94a916b9b5fcc1d592e02254cf805a2e2445725ad8056c6f8e47676c845428f9ec2080daa3ff87c69a3e59090a50b14a2a9ceccdc85f3971a08cf9e4acfb42e5ce1b25466226ade98b20c7188b68fe1ed709d421bf9d3d690364cd9eb08868892ff402be6be6b26cac724020d3259e0f23055ab319e729f291ed66f29f5916a878f7018c8ea039c943e9504a385f1ca82d6fdaec82ffb46c222bfafd0d4f6610f9cdab89d073daaf675bd543ebae95f3a5d09531dd66bc242272c6944e3218521340adebc52036d5c6779c495f57d1acb7ed5d99ce4a26a81f601de92ab805c5b593cf9702f7d1a990f50bbf8689be3d9307550b7ec0431b90809b4b98cb494afdacc4aed1324588e3ddd2ddb459cd7b30a2cf483e771bc1c3f695d89412ba5c1dcb09923d36ddf7398f73dcdeb2023a790748cfcdfe051f668dc5c3c751ca98cbba7f484c3a2d57c0da1925a7a124537b54ddcd372415cfe9d2d20f1edea3ec2c3f8b9743e0b26d4c3d2a594d7cb031d2d578be77cddef96e9792069331b361427eea24dde2d90ea19de848ddd786809c5a59c7886786cdbd838d648100431b79818b34eb59950492b4e17ba501616d0db2cd649216e78e1419f89d118a6f3890e5803a542853a7b2dd774bb61e87689e63764a681f9f4c758ad20bc10dde555552c50ae0047ea774a835fa646137c164a8efdbd16623d221d9e12e53fd5220aa9e4bad690189558336a446ebb074658b6be91d0cb95c669a4b9378a4cb7f2d4889911784222e70aa2f2b51fd93d7da8fa9a77f20eeeac7c0732a021b9461adfef61540935d07b94a252c4d2409f7a152351fe0fddba9415eb5f486c6f91dcb4ef84193317f560b3866e3f6fb69bb9549fe76a3b36720c81f3d8329743d239491e01fd157fbe1b1831dcbb426305f0ebb32c74f5a1a144d42dcd5077005652b998e16dc77371042c6a1f13aa4ebc005d134b806919db2750a1647b3d9ed2e39a01145c8d1cc1c3228e6afc938706f12827df9879110acce1cda1e24ede3ae940ed970e2b779f84b7b62d498c862b3d24fbd263765350fbe92a9427ce29ff248862c073a30394537fe055aa6c026124271b8eaf2a84dd92abeec8582250ebaf07560cf01f654005e747adb7501c0f457a96d1f6025a42dce8628a708c67f43c1b7dedef7b341c3d16b21c1f34ed8037d71d05e76dceb0ee421eec568b785fc7316354491ad787093e47583aa2d661d93874581dbe103983b7cc032a8d428fbc934f81a9753b46c16c5e210cce8c974fe556fa3f4cc10a83b6b420dc609047b735f7d697d5767a5fc059069fea6e76bcde446cb39723d464af2f0506d15299056040e460811ea4704e4a8daa0578a858d5283baa76936e0d088b0b53566f4ef1f599eabcc83163f0b95fff8363b547fc9d57c87f79e33350cc9b4efef6c09c6a1333cb5896aa28be35502acdf1bb2c6a32b3fee6788dc394a9e4893b38ed3a048b638f8c44d04aaaefe212e91934de44c0323e6cc220901001cdd08ed924bf8386ea602d95bc88fa4c82e5d25c77d92e2575c4838c5823984c072d3d88af1c2b9a95b609c6a3831416473cef47153cacb28c65030d56dd49c7af46cc9a49c2a7020fb30473941cdf09359744bbe6e1b6ab547889b9e3b3021438738e34ef48d0a320f8796e3968a1ccd072f07ddf8162a45fd5724d8db7922cb8a30d9bc136101f88874c4ed4b0d1056ae717f122e39d95c8dd5414a8d97eb3b7234d1b2b01fe98905358294cb11e58fc4f79760f8af78f23b3c932ba7a1693dd19f103f5bbcfc7a5d5c8d9fecb27774c96a01c128b66cd3a1356a02f45c03e5c7008e13637f8a7a3f8528880d5009015877321f80100d67e63bdabbe89d88619ca2d733c7d78d1c486f256a6e6ce147e821c999f5d2da507525316f362b451739f39fb3b053c8aaba9063089546fc5abfce0bf5deff5f728f017c04c4f911ba4730443b687e2090f3d0233dfd656bfb1d1b12c34e5327cf3495259f82868a6d89d6d2ca4940846ef3db8501baace8e91823917dad13abc4cda928a58df856e21c8a413457539412e66bf38adef44b345240ebb9038f6ed5319985731ffd775cea7a3b8f3bc4fd01aed0d75354fbdbae6bb797b61d4c281c57c24b23cbe77d0edb68983d9a301813229f95f7046b648634cfe5c624b5aa5be9adf96acbd9288d7e6f388233a5ffaefc4acce88a10f70c5681df1fe783995a9330745f89cc1763336dc53cd79ae5e8f9d4f184a1bd9500d41abb2430c05297f552d70922129081c4d7cef90ac04e48fecc2057ed929354f287d724bd4d0b1c44d19be90ab28e4efc52d4e35c3e0c52f4603f23e4f9bffa43ec22bfab0a18112bc9a7b89117ce127ec5271c06ad3f30e1fe0d2ee94323d4999fc23b13457539c60394cab92e1ea2b253a6203c3752fd11f554e8ac2565a7c199a4c7d230f3a94c331267c11a5c95b1e8ee829047c7b4a40ba68f8167beff286e8fc4310943f21ad8c7196d4a646854e0731fcd07efdd4f26e5f4d3a1958bd12f66e36061d86815949d75dc928bd0dd437927c1275371406ca3ebc0d8d81bcaed168ceac3c6febbb02f16b947e92868ca6b803c7f12ca2e623971857439b4cdb1d6485e64f223e4d137bcffd12bfce41a4655f28f39c448dbaee9318d6e08269501c27ecb68031d75f3211a39b9ae034febb8933f119b074a98dd0475b3ba194329c7da59d1d150e64c6dffc46040c0f9ef6f80430254aa888e64cc36721c6e429b4964824133c7a91c516bfb48df4397c53b24e4856e30f9294ced26e495db2238a06fbb50d47576ef7f64f05de398ec94ed31a3f9a6adcce5e5a7a9cda47f531b6b8660e875f973eebeef9766db5c18bab355771c11b85ee038ff225d5ab56079295a59e51a9b28953622b1d9c9c71162636f9c04ef3df5f14549204b96882814bcdb82d5ba83a7ea65eb1132ad2e055259784044845e1715df8ad03fac4b81829096d34bfbd2167bf5999662edc87c334ac4ce3553f067b5f079a0af05bc3f6bda5e4ea78e4e62791aa6531d25552e371199ee2ba32945ff328fe43c21c6e591cec03853a9c6ad21d9a49786c5c2c2fc50c860361d000727ebe80a0fc6c514859aa8a37a90b6762a36e9e2c37b79e3f70f6f578844a188cfd891959af34eb2c1fb8ba438ba44f23aff4d2275030145aa440166df815b54b73990708069019044c004d2b1cab391505a59732df3d0d0d8a42b045d8974bde56027481f77f1bd14df24d9bbff468a99b237b0c7cf8893b9f8961b55975a73b1c5bf927ae7fe3dfd5210997e695b197e0e991e7fbfe2aab3698edc7b564e0a8b1500187e82ba10ef2c35c278bf2f85ca6721a4c97c475ea8ebe330eff83e3393e7ac6c9ca912fd6955169d67c6b09fbeadf69b4bb5ff3fe5d74e6519457f151651bc7346af654cfb02dac6aa0e01b69d1c9a55e93867b798a922f150833f98740110a8ea48d549b5437b283fb5d6713c3e2be83576382051d42bde3b743b4aeb0f2ec5535b69d774f6c6fc794a1b18ef5a13a5b7cba7af7b70e3c5f0acf5d114d696d6bd5a8710743ec06e0ac0949b2f1640baa0f27ddf76b582eb41ba652dee44f4fa0d30af9dc3537ee0f44627c7d41167c1db7ab697d1e67add1b0a40de09049b47826534287c8b659825aeb02d6b8da86f29d33f39ee86c44ee2e14c4406fa232c9577dd837ae0985d0d1ac1139dae0c0f5a61146028e3ea92d3d88104177f6964092d8f4eca791b50358fb43d521e5f9baea04ef806df15217276c99c7110b053a762d212deb70b74b36717f94445e483093f8e94f8a72e5485e04ee06e460be6a27e654afbac64caeb83cf72ec0f66a2fab54d7fcfce3aa5aff63f2483e868283c604dda6044f7f86ea1003eb7024f8f8727096e6b7cbb219a34a3d7631abccaa38d98bf71200aa0cfc956a464749376f13984cb340e87d1c4b1b22b22df1bb5114f610b7db8476367c0a1b8dbcf9dc2c26e3007f2da14bf005668cbd6e98bbc0be0885a937ab00120da70d30b8d362040c2f2c6a97003fbe75ce0ae8cb571bc2cf1d76c8b91eb97b7a5494f1b35b97428a2585b2b1269d301ffbb1c51879efff4181cf1af266c777606cf2c423a6aa7c8be80699bc6f85e5dcc99b93b3b598247e1b69ab110a01e0ee46326b8f6b96e0b68755933a25ea89607d2d5aaf2ce8f9e71fbba4f8d6651ef3088ce73786e79cc200a591f37eabf1eca5f69492fc6d23d7017c254f357ad83c246c2aa8f67fa724287db277873cb83d77f49af0ce39b96a0dc2911363f4d057870a356f6018d6ce050b111831fcdee9f7ed6b106bc5349758ea0ac7eab4b2e4dd4f34a10bc7723cc9ee66f5148dc096d1a3b193a6e2c6bc240858a06682513ea56b838d63360922648fdc8c163f9100ef542906f8c9058c501d3326e393167d726abcf2020b7f6de4d6b93069aef9522e6afdc9fb708db7e5cf06085e9ca496d7cd866febf2ed802e442dfa1ab29e1b95be7fb6678d3f69d0d76fabe6c28686ac8804d7e88a21c8ae89d28462592cb23ea224db17652d7f016a12b8e1e8b11c076b3cd90ee9eedaca7188e491d077ff23256dc697bbb7d0080ba4e54799d3cf042aeb9b845fe44d94b35f7b4fb514ae059e05fc721202218b3b359f7705bcf716bc548c30a8adc0cecc90dd9f18aab801ddefdb35e80d6808ec457d5cd1b8d9050b23a22a805f252756e62c81b474a2c0ec10cf3352a596cbbdaff93c71a5204bf8d134c69007531ea81cbd6970c16911b759fd669fbf5e4f902476281d4eeb572b44186540a406410e2db2d689d63ec79eda9e4de88b1943447cc33819ff4af0ca091ab3702ee7686d75d2a6cf454276b107d39e8ffbff018b4453c3d4b2bc15435aad55d6f4e6ec680e36eb42dc1acd92dac7f9b1ba67a3f52c5794e9fe6b81243aeea9c29795588c61756d0cfed820ee0ab8013aa92360c4ea50a025dff59d46238966c421f45ca1bc5bf2f0685372f84171f87d493df0a9977ca94cb7d82ca2287153e8f80e073ffa89cf1f7c8d37759d2aefd06635c717513b9fe563b824a73dd923c320db3f7c57d0627b33bbe44f11441e4bdc7488ef7cd36e50b19765578826935ed8a3b45a2112cb0f1b6fa95776dde76ded3a0052cd5e8534cb7d88c97a216195e7e6df12e48263fae184cc0b58700fe8243178efc1000937da8cf57423256d6a8092be8a1f17fb3dce2bd6e7961b3f4bee205e5011cc503e9902c24492a346f13504db9f6afbf4293c398a94e69e18d4d8626dd1f0a9c52c24ad5bebb11c211410b4f3cbeb52b3f6b7d91b3a277b7b575b7e61a67a4fd43806fdb1ad5c0bc2b21b085878875ee31376dfd75737db286ccb667b3026eb1a9985e346d21bd48776c82efcfff7fee4a4fc4826769ab5bbf27637a1f51e71815e03b3be25ca5856cbf949762b35c7755f06d0753dbdebfe2e0ecd85e7bb3d2110e8b57aa4d525450def6d197fba2426c105e089806cdc8a4aa1ca8e671733a5ceab11963a95021f164cc17fa03aa6f06760c2d53877506df6d6370f555d5e473a689ba6b44bec0e365595cb004e403a2f2ad3e155d2812b0cbc54de787f2854481cc593bc64e3a44245cff8c84293254c30f1a16f3943cca6c0bf4adac68a4f1c75d8b5cd64851be75377a623e050de4cd26bef12f05f938a635497cfd3d679733ee34fbe2e1bc9a9bdef1376a5e9627cc7ebd798592e6ba0ca49175790db7973214bb8be24f6f2ceac281867b42964241b94397fd4cf2f323bdee6369b053686e47c8df514ae9a329c3daed38575aead5aeac8668349a83f9c30308af34a1b9c5a9c768d4a8ad1150266133364026a04b259b35acdb75a3c3632b707e81f8c411e3eb0111f33644d6638a04405939c4fd3cf27750b44e3f83d2c152f9a89aff00ce0fdc1c88f11e6d8f24930acff10e64e6403517d4bd6433164c993efb83f201cc5f0ffd004dfb84b3cb8d9c97bf3c340ad6f40b521425284437fdc211c38a9adf6907d5b70a3cbf221703fa260c8a2a6bf1a1982248b351b9b05effa16349697856580463ad846c71d4506be5a0f6f78bbd363514c750fdfb20d6a359b9431c190453827e7b0e9b1aa9b3ecb89a090b013e44a71632a40d93fa1755a8f1aa2cda879885cb7a7ec5b4dfd2aa814e8b9a6c468ee0eb3c34d424fc9277d639f0b10aba469005209d7e0ec0959c4717eff898beb9a60cde5dfac62d7fa6861a225f7ac99a1002a3b4dca0ab1d46d2dc21a8607c1809d4a23c4b8b263b266424d9493ee474a10e6399f21e1a97a33d31e83078adfe59824a4f70a1308656339a4fbf0e57fe1e8f66a95d0eaa9538cf1af70255841369e91189fb1be9cfcf6d3c0ddf639ef892e16b1c92c48421a9ab8f7f47d55cafe5c03cd274c0275faa206eb92a6e18dae27d4fff225a71c63ec71a14418a6caee806c16092ac5d5c8f813f4a863d7a5af85eaaa9ec4ca111eba6f13987b1d381ffa17544bcf091ecb3e22fa2f18c2ed264e7ca208f85c9d66c53fcf66fff859cfa72e4158f2a463ca98699cc0bb32fba1b56c4d2d25a059bd22f9147e874eb160cf60488bc5ac87c88d8ace74ffde370a91a5d2f0d84e2ed5faeae31eb264cc8e59ba22f8d1e6ec653f661b2bf2852d67674eac8246fdc1bf33fff272c1acc41fb605a4d5d603e8cf6743465f2abe742ef3fc1aef703ee454cfcd70d299425d52b2e840349f1cfaf5365ca1ef98669010371a2c1f37a314f2b35a74614ad92cb424985290698dcdf409270145a6d20c965fc672efb2113b250d5a421459d9b41c769fb4d42532c88de5a78cae0a1b8837b88bab0275d38bf1e09989008b64310834e1f9f960f74691a8f7fcb967a61d83cb66b90886bef85f67b44a812c0e031495392dbd2286ad2b455f577976949babb49c117872a240c8106129ffaebd749886b3c193b5fbc6aeab92ffe8c6de5ecf1902646a7b2211600d9185852d096319f21b6552d5eb9d9aabcf8127ae7f60f8ec2ee14f603b6f1e29879c3b6af2f1779134a4df41ff2fba2fb7573bdaefedc9d4f6ecff1812f4ffbb5e897c04610574870743e354e3588b3a2ddd5c13bf8c6a1b392f0cc7ab88da8d2ce73d1cf3d1a8033868bb907ebd1392b8a144758587f5f65b7bdc41a0ab0633ad121fe5843a0ae25856af446af58ff5d8b7f32114fd567f7e353e67d650cc660474ade9dfef3dd22b7a4285cb3de761f86fbcc0a7f458cf6a8dc483e6edba86f3405b12ecc43c204546c26811165e3063a32374ca12fd514ff8a8f81be72449217ae43188243a009a4793bb1d78b572595cc15128f98cfb29d827269c93c160306054c422fe74e8d1c718fc722e18b05ab07f46f32bbeff7cc38db620c335cb154d3c0eadf8b2cd7289120ac34b618d4dc69abbf70a23fcdcf297103bbfb4dcca37af4fa15d02a387c4a86b480f2e12433a75f28cdbb85e014b5d756a82592df17de812edebe90bb25a3c0ff1b42b3232315cbe04bae780d9101e3606b7a0c7030e1868e68d9c02ed47191bb5a962d537bc4410018a1b59c00986aa7980c1f466410ad1435e88135b848aecd035f3b28ba2f4339324b9b24344ec1a238e5eb1fa1a222c0648e898d2418ea9795c52d814d3c15fcb2bbcf5c633eb6765b84073cfa6075e8cfb4834ad4ce3e8d082f87aef27a866da3eb7f3f583b5d20b7c16e7dc1f7471969e9f3c1af488b44766a3c60aeadf4516f2faa8dab2c91739d7b7636bf76a2a6f3c1090bb7d723ac0888731577f92d57eff20ba8885204dc944c33f733431a6e1b4bfb941d777d7c39bdbfb5d184a5413a8444ef2c52683b7b526941eda168cc12542d0d60fd30f4de48d702933e9713841262d1b9781844fbff8ea7c00df805c49d44d94f4ce4976aa933e00d2a5a1c500b9e98569d4d445691a080f82f8063d8e0389b92499526f8ce4f294707e9385cd148bd0ac66d08b4a4338d7700f0aac29a5273bcf5a9c2f324ba8b92bcaa3e9533e4f41746534ef74afc3d2e0b7d8fb1c3fe96efb75a4738720e2e60886ceeacc11747402714a27918edf02d378815151d658e14bbcd183d78b4ce296fd770e78859b4ed46cdf3720fbdb06450cdaabbf12e277b34ed3cc66dbebf867c28ca3f14242d5e5197ec7141f949200a90f1c0631887180d7a442e403dbd2326398cd183ba9d2749fa7e7bc6779baf7161879a93f53fab17884e119333dccf5e23d9adf64661bc1193d2326cf2945ba58105b927be9e3b9f78b40a3802d6a3c9c59fe749a372d3523817603b0b834ca9af9d35b7abff6f0c7faa4b5b389bc1e16672fa320019d956418382bd6e443f527256cf83af054ce023fd4578c8f4314678b438e2877ec4c7174833290bd1c11b8e4d86bb6c4942fc1c31d841a3b684ff6fb5010431b05ff631f65c3d3a68ad77ede52bf796a12a47b3408f34a8cc8bf50bcb52517a6eeee7b0491ae3d20b723d370b9dd42b581f717adc2dc1dd4bbab37bc09b2bd183797f575cadc4e17870486b9067ce1c705b1132c1b52d6f3d65c3589083f26fb513d34d3b2dc57f3da492f543438aed1987a1be5561556dbed139c6028fe1a22dfe8b69ad98eaf7d160320be044326144ed2b03cc7c1028773bfbc3c4ab0d19514932f099b629d680bc5bb150be7c4133d3830e37b1606f1784a7a2985bc4a1587c106aada37f1a082f0f7f1c3bb0b92acaa297fe328ea0358913b26a4fe240d5f235396d62da81a4384002725be14f5eeaa8db7ba04bfafb47cfd4422d4e7d5c0b631bb69549b3805ec74997a9caa53bf99dc0de471bb6f628f11d4c7d53ddcc650ab703d18e2044ca85fa367e06dff3715c97cc87f1aaad32fa324c1f21e3c85078889ffee32c54631036756e22e9c3ee7730bd8d6bdd6e4422ab099d274fee1545e3dcda279fe57ecdea004c2933964e9e008eeee551f2c0d2353f90b916ef3dc22a2211581ade9e7ea50f632a4e965f581a6f7d3a767e1fedd037e4f83a4b0f20c8096e9322a16e30653f5c9d419e32e86621186294ecb36bc55bf21d99289a15e52a5e3051db8ad0245ffc0bdda3b6aa42a7a3d8f37cca5712537bc92118529216c4f052b99f5b09bc344ce80fe466d56181928c50d0a859d159ed1de7fb624bf8ba731ee6e382fa850ad49619de1b88f2df5f03ed1b29334c378f218166b8eb56a7dfff5d8ebea880775eab0ab3032791231fd03577d2b36ae180941a43d0468e63ed451211fc112df00291e97f5c9c705368da841f47213d91a645d1c80b7eb90058b99e2871030efbb557af1e8771c53a29dc07613cf54b5ab3244875c2b3a42d8f4fec49027275d840ff24ab0e25a59cd5c3deefdbc4527206986a22d41267dc3cfb0c84b777e7491412873be1b2c4b079e81a7ba831ef8118deb35c2a40c09bcd319e93c0bb2a46a4674457662a66d2dfa13da463e6e9f5fd49791bc5efceb21ab19edf94a32b28ec47e4040ab98366de9ae70521244aef6d88a822ca7fcb5a3761cbb0b8f1d65a292a869eff77e1c2b99275ff9602bc2fda3118eb96f8f686abcd924852cd2331784d1142514ebee13dedb2e142de64e72c4b1d00028c5902662678c68ad12813efc7ba7984fe3f526fcefd8ed41ac7171dfd14a9565b14eaeaf508ca50985c4947e2ef76d06b98c2ea2f850b25518dd56c2d58141c3532e584327115e2c2d5e2a6e64732a3237a9c5853eb44d83f24bc8fca638c980e639d37624e4de9834ee0710b1566b41af3526736f06546273e4d54be154f143e68b82cae22313ce771b46d26e3dc00812f487f6b297d3866697a693d2dfd8704675d7eb3c2c5d7435c70c8cf01efdf75782370814d3908745b2cdcc9cbeef40dad2b154a58f57e0208617d6ad950128f112b5373097063e10a76d78f93913a6f37d395e06b3b84326d379db7272a5734006a954c558364079a90dc866a6c6a11e9ddd44418e0fc6c3c42e7b7b1bfe794c33be25a1a244c8b0bdb8d7ae6ecb2f57ede6257e15219bd1a89db3bd02db2cbdf5bec59f9e86140abc8108c631453af92a57cfbed629d548c9e54e84bb7f95ddafbae97ede57a5b528a13be2aabe0c00580b5c0bb4b9ff1f1bfee28f7d89dbb71e0b9ebdd53d9595551323cbf7512703c78944b0714e59a70053aae30389e4ea0587d838859c36ea725ca28b67ce98d7a1e606edb060d8e32d89c942117ea1a46fdfa426d40ce4b404e33cd3612cb6786ce12f98b82e155697917e99630bd62f9c752a1733595eb8dc5d22e2722f6ab24f3c2d3b3aa195ed9412d705ee9be64f64d9f734df03f47838a665d7dafea6ec3e5bf4a2f4d88d20e5e95542337f7cadeeae80debb36ac99ccae2bbf1c65ddc86696068323dba858ff2cb935a2e88138c80c6e9450fbd957741557c7e8437e0b9da0cb374e9dab5e9b53d129af70ca3def0576dbd6eae44589bb1c0ca3505bbaa41c75e8b69d3ef668988e2b9dae1285422b1dcfb9534338ff90fa9605222159fbe388c5caa887ead2b0d683a1ff4a70250e4586f1a856be8c38d7a67b1215d8f97529718745eb7adcf5255f92641489917ec52cc9d8d4bc39bd597794677ebdb96c616fd0196c83ec6a2cc308d9fea794877940c9e1862dc8a29d54f0f2db631222b2cb2c059a0ff04e7baec2170017fb264c1bdcb01efcbe6dfd741619dce2a1c3e5b289fa8f1e385a7ce302ac6d9f7e28be683364680977851233b1a6a3df727f6920e2a07b2733c5a943f7cf26a7d5de44f42ba6b28004c71c2077ab9d64bc15d7c5e83c3a93b6a30b48bc9d95f5dd49e9c6744dcdf992a411b97e485eb6a1190d1221bf113e96aacbd5f3664990106b607bdfd8e646246e6be37fa0b40b58918f7e3b20a933c1b8fe85322e0200357d4295c83de324ddff09c82c9fcbb9dd4bda73a22ecbcd25777afd89bfa990421b93d5adaa8e2a0c41195eb85cfad21df77721d3bcbee8b353392f8d28cb2fbfbbcf078d076093678d87ae0169425eb49d37ee7acd9dbb5be1f08bdac4a2cdca6e45b43b1dd08fc7cc38c5f26bcbef53efe518736a039fa1131bec2a60004488d52a99cadb72de9f57b47a793dfb5347431aa6b7bdcda76dc244e42b6172b248dc55541d9b521802f4267b2acd93990c5917f7ee4e878f935ab551e47d9f410919be68528e627905135775f45061c64f6e669a86d078595d2251b8d2b9e5ccc25d3b693d52c6e8da4f9625fc80253236debce3e3436c0fb1683e06e6bb849acbbdf46e470cf41677d395154dc93e46de7d0f0405c2516f8c926005901d191826ac871b263a48ecab50ab675092fc2bf5f343a80836c6d053977aa527866fc44a647f8c124c7e1cf4b77082a203ccae7e7606846d547d6e236cddb67de5827f3c7892d0dd871edd2ca3d242b35e77eb815cc98a56cd0c65f4bfcd69979a8f6cdacc8991cda57d8636633f25075812b6f8fe345278fa3d71dbaf1b3058208da3ab9b45b23cb83c0eab7c78ec4d42ca64918aa0b23766d9adfa9eb284a828d90ac7f779da341fdc26a179de6c7d3ce7e62842f168a1cbeb1926099c8b8c4a07c251389c44360fc5d72c0501d2836c49f0830f72d09b16e6d6f19237ab2af4678c338df9e0a89f0d34bb0658f90954e5f52b6d751126c584fe64a9f32790eb942869f5f009492e68c175bd4ef5b149c2df2a71db6573cdeec55ce5d785abf65b45f7fcd35e5c9690f5d77a94db35066355dc856f3b9e7cf392c3d817829d6fbce290494d069eb61362b06c9394da661eb6af53a156fe8f06257090e358c30db3dbd6d4687c571f659f41a4d4fd82e2cb71714dae98309b9a46b5737019332490fd4f4d4687ce19023fd71454771c2c7251b59d42ed2bcb1e0f9d6a9d42009c9e7cee8e039edcc216544ba495c8bf58e961e5c2891d2e1f6216fcde0db32350989e0c803e647530dc7955d7b6711fb19a229a243f31ae3562dfbd7426aeab5b94c3204aa6075661321312bd8470ba1a10c72bb0eb696e3fbe4d05a0d53dda6a8d109e7a1e0006bfba6d2f1710417f9357527b673b55f064b5235a38bae70732caec30ac086780a54914171b1f9ba4d928c73c9f657fa06b82a1a7a827296d94b0dfa5f90d16c8f5e48ea39405a381459159621490c66c100918ac0bf964973bbde9c0dff4682a2521ad6c884c19733aa1e98c0c4859797234f4ea32e7d8008c8d2772ca9c1a608f0588f6c1ea6a29c1af8fcc24e578bb9e4f9c61a98a76e1e145ef0b07ae594145af38ce0fe38b932d6e267daf1002e051b17c19a3763b43b88ff65a6f03034c905f3f63878c54d1caa37e257b4b8c5833b08c9c288e6511d7dbd864b6c5fae11c7ac6ad25193688fb28416be0c561e8cf8075f12ce94021d7a03f9459658011706aa162122181a8aa8cf0bbe1b9f2ce43b66679f6219c549e18c74667abc8ea409ae50834089b2d5245f9b6c3771185f056792b4655d4ee6f7125e40a056501535c7c27e799b390c24ad98e80f303964924624fe316deb4ce3e0f6970c4b42bd31f50a078a2c3409fac4ec580d3677cb0149730d5f0da107ca9e465cde0f043ab5dad3cab472177645001e578ce65a45db05af31b265d0fe95eb4c0c7de020eaa9a53d06120493a9aea919e0048acb5f78df842932ead869213a82837e377a3e29d919d3808e28111291f2c90e3b8cfeabcd8ba2906ce41eb6bd532090017457f1d535b8060f6b713acb883ccfdc4a6625794c0b476e2066001898f13682dc5aa69d3b9e962ef6c653d8347488b5537c1f0e7c9750a1294bcfea4b8b99742d8614527665bff175b4251a9310daa52800289e5c7905f36c49bf0bcbc6cac235875ceb658c96c6d24106c3e738f2f31d6b74d354cbfd4ab1d4351e9186fed5d9551e509c8ad944ba22398a546432cd2a8d8b3bfcd94df91709e2ea73c4d3e46ffce00d962be951b5051e72a6f78f11eaeb8d06121235f83916a0cbbac3144470425b4794ebb058e95ce012402fb7e0851ad44460906942dca82a543466fcd6dfe7b33a75a39759eafa981abfb014340c7d4b5f4d6a4d8f0142a94fcb97c1a49776ca7c0566b030e3c939f9e519117957b2f55dbb7a14a3f04513181b87d97d1f78e976220197f17714b86e746e306b5a41ddbf98225534eaf721ca861eb3e2d344cc10d1a3912650ab86bc834fa62c8828cec40a33c0d8bd2cc927f0ebbb076bc9d9b9a53ba51b63e02ad9993a3a9196cd01b5d26cfbd08d2e20462ca883f04a435c7836328a8a8b432375b8bbdce2d5a5c91c5d00eefeecb39cfd78cae3b7efac82e74dd2efcb2c073990521d76a715771f38eb36e64ac43ef4422d3e22c64c2bd9146ef3d53b9dcd5ff8ceb33cf59c7bf1c20c89be736d8e6829b21df5f7d75c38b455ab3b68c1ecaf8185792df8840a87ba2cb0a548b0c1f0447c9f04d5080815d4687566f4ec3e2b743fb007b36b5d3e773adfc65aa76b0baec39d2c085daf5d96c2489577613eafbdb237c8f0fc5e0c405bc90f2aa9e1f546c80653b30514bfbe0744debce36e30ec870a0398b603dbeffe5ab0251fcd85afadde3630902935bcde828f6ab680e8f50d22cd317eab4855ccb1b2280df4bd480276e00df1255c49d9d9d445a7a45b80d116c9a7b31bc48ba79c9a225160b34e8a2f862d5a2a722799c0a9c5a80514914b8961f325aaf968c107e6afe2f11f63bb362a485b37a405ec4f2e71b998e65d6dbbee2f715e224dbd8a15bddc7c149dfec0d8825358aa60908b3949021c1ffa2ac1080a36fd90abf838cb0e2713522dd9c4d55277e2bb058ad780ac02bce5a8b45f28d861ca4611d7d61b99bee636a118681450df131dbe705f0c04e5c73f9084d870a95d0ab2e5956b90334b3123e18fe8f4096662ba8301eab75d76de7694875b1e86be83eabcb9674918651688bbde110d89d9dd82a0c66215cdff43d8c566bdcb4807e2c30b0773459ec36ce4649343b38951c7a8d7617ae06e1eebd52a86144a7c15fac33651c8e33939e48834f95315a7605f0188458307f52a83b245fddab388aac43ce16543cf8282f51141c4339c737c618180e36629d4f28d6bc3fdf1af3077c74d82f296b8a25e9f54653620907e285da0f888d9adaa9356e7a6dde006ceed4eb2c65eacc089b17ce1c395f5c75fad4b4b2c18f4991908b2bfcc6efe1363f7b9c93c3c3d18a647052e1f914b2f1d7ceacdd101587a5748db4149322c16159a7a48151c9a85aa5efe1a8a8f8dec853ddd652698a2cf931602b764c77f2a24cb7ba5c4baaea301aef8fb3edecd0ac0d32d0cd5e076fe0660a0567b58d880bb6cc0dd25bedfed34a3f4a55e93256a8d55452f58e8d8c475189b2311881f0680ded5744ff56038a6dbf71f8e6bd2b0b79ce421b6a1d7d740481ee23253499d1b4108ad04db0c4bec91b08761563ed76a401b2273e71566623073462ab2a3d2a7c430a292f9189f8c6bf5056b0b663a9deed860c80227e994aa5d28c98cb9fca85ebc0362fb5c6e7574605d83a0b972c3efc39b49f7146d8bec8f78da44abe463bebbfe2e1f906c55dd033d2aa9360928bea6f08f21aaa6fc433129aba41407a28d0f3cf7e0b05418a926c0b659e93a71dfb72414a863f7c7f2e0a97fb2c9e21e37958eaf3eed1e7d538795c659b97141fad9440204b0689f03d58fa4474470bafce123d402693457681bd813f9d0f81fde052918780c4807e2edfa91b5ec66277a3bf8ca38a4a8e7efc4e9142c06b64820348862eab1e617086fe877f13cd540b9c1afc7ebb06f6d69c89705cd1e810943ff2f8b4c2111562708236f90a2f241d66fd9d5843693db68c09954f164936bbcc77d5410d5c76cc9083cb51e12b85e964c08f3b2e45b64bce5e68c7f025b2fd147803a3814fd209bdea864c2a1ac0fd869461a0c4d02ceff45440cd070e461b391fd1265d6e866db816f81c0c1c5c818b29b05ee1f0a40b50ed5b38bac5cc8e73afd631e532e8cd8b91ec45eb86d449e07c4aedc9697ba0f4180599aa5b19a80c0a3ee5f6be8d149e4128eff90c6c14124334f0cd5fbcf87226f55b52ea00d5a74ae4efd7736859436aeb9c9848e97d52c8e8144d9487ce28497236c10999d52bfb0e4314395b03a0594fa494bd6217df6ce687f9007f53b62c7557a846b47fd4116926a756e9fa8cc1a24e639b5a847aeaf5d77a2891fa0876e755ffdf233c849b5f884fa51d5d634582637f1a3e34486bbd354208c489c65576d82e09377798409a35aea8558df0b2cd659b1770086f7a3717263b444d040fff1a33dc94c4ac932733a0d21ab215ee8f46e1e01bd0ea2af3f3312aa7cdc660ec2620c3447a70260e765e19b9affc74b299a3ac198418c21ff7eb9849a5deba56b5bcfc261183c3cd871b869f1b69b245676844fd6a131ea1d88188a2e4cee87392c8032f54717f8aae245704709668a59baa49d17f766ee0b2a096d15a686dc50d2cbfccd143e793c127effb79050f0366af676493b70ab72be57af7e64909c26173111a5d14d2910e84d631146c89ddd69104a8b296a9fd6ca0274e5198b112f51ada06b9e84f65df13e262cdc03ad80b3aafff3d80378e28ee3a14605e310f6a43a7d47de32c561de31c6e0ac9bc15cd07d2b103deaf27bc1286193201a453a5b646fb81d95d23f999bd0cf67a91cbb9487cefc7fbd7f9aa6df784782be4819e76b9be54d35903a5639503bf7921b84b7e48e5c56f181320540f94ab80b9d12a545bc63e7f40f7105841d252e3e6bb3416d46ff516e91a139f20592afdf3f294a8fa93badc14067f0c77612abf118ca4e916d3e656740ef9d5ace2a3ab6c62d474a5b88b5e3b74888e2792a50ca7c8d7d40bad128d5ab1b9ca0b6fa50c8bedb0b770c59f21dbf62bb71e4fdf712fc5152bd33b553ddd8e30c7664a2dfb715117270bc5974343ff883ea3de28cf7a4b509e88bf527ae4065eabc9aac1a832eb615d2a10972c6f110f37fcfa8a2724323fbfda6d816cbfa1da5537f5e58db2c7d418a4bfec01510bedecc68649ddce7495589cd5ed7a85a2175eb135e32a667afa148bb0aa5cc8eebbdb124f00c46a4399c1c10c3e68b0d79e8687366e27af089e3406a8eee0734171cb2e9dcbc6790353153d9f22003af0ecbcddcadec1f8e08ca4ea99589b05755ecba1b575c21260aef26033f37539070b4520ca679bd4fd8a4d1672e653761a28f0949c2b09db7dcc7888d8e8ebea84c67259c0b5b044521d162e38c9d7d6672e8129bc33ebc06b93bafb20481c00e107e7f3e0534c52330259c0644eefc978db760e0b31cbbf8b93c1aa4d84c6abe4448bc009b332287ab9e1081cdd3442c92575f7acf52b3e1bd005517a9fb36c82be3757d874dd24ad652e36580204608434ae762f66ed3b67cb7d22745c5034e74ab25fbb754c90ad217500f7774406c266691631c88890b650408835e5807e3f6480140d353489654719d1ee9d47d0db06db45c575bf220ebe2935c653a9ea299c9b5047ac3be68bfe84865bdc7c43ad94f81d4fc450896dd159e2ed954ae8c7dcc5ba612778ca447072fef84964062533ca3e11a4b64e37887a456ad353f6667cb6086fe0e01c8f5c1f19dec189d8a00b0621c4d0a83d54d8a97a7a9508031f8d5aedaeb5f323ae57417f2a94fb86d1bb8b8470b078fa58980586a5862dc5148f9b977eb86ef6a19263ae4a405924465360837756feadce1bca68afc70d2647781a0cfa60bdd4d5523a9b68e55817d9624ad7a5aa7f9e1ecbaa49b8bdfec64620da54368c7c759b02213e16ec4f5699e942f7ca73e503f73d976b9fd8026e2d5db20be63d3ab21169419304181ca86b75dea0f87a47616898ed5e1e8f05f542a1d005c05cba530b2141ef97755632558d3d9226e2354d4bf3f605bd7d2c2bc8a431b2d9b5accab65180a5d6e2641fa0c6d8d27f8a1364cf88a3f95673492354d9dbd90ab5438e2e11e75bfca54aaf0cc96b430ce72fd2dc5886cca004a82fc0d325baa21ef592e63b217a1d64a50c912d9d893d5787d7515728160e68937063a842bab8b06e1c990c4815d1d73eb60211b717166f4c4eb916b652ec38035bdf6dd9b4b8dfbc9de895d80525752be51d952214145a9bc5eff82f92fb7af840750fe8fbb6a017e82a12c6bdea153f3d963e8edce4b300680373a3b2dc3b12f7d03a0c9aaf955dfb56636a3b184301e4d21ab7f79014948db766aaa6656fc7bf07d06967c9eb70aa968f9c28a6c7e80d39ebbdbca8e11d34910f6f82cc3aa02fd1c308fb956c1d766f313af5079909a8709479173e846838bd74fe0ce02eea0569626575ecc307e4ee3869756009a5aa7f2a124bcabe5d3d1f27b595755d889f85455d9f89a2626f00d2c46c88a316d156e793494130a784ff25c5eb600a8d9f49b63104361833cb049ca2aff110f91a54c08547379afa872740742bd3016671c695b28bdc051e949aaebca6f190a38f14c3acbd6eb391fd80374f79bc169b4bd3615d34bd24d58603e07b0c10367c60923de0e69e5508a6c74a89ea03b964103e84fca9f42dcdc546bd9a0091edf4ce5cf90c038fad627dd85a143be545e0b17d3f9e1e2892ec510078fd262ad54feac20b45c8e8feccf15fed6c8911dabe2647267400e9c3804dbd82209e7ac6515eccf8c56c6c5a2312f0324ad58ff5ec2811269d0a4bf0333d1eb44bda14d50021707a11e749d15fbff8033a2e5d0c1d3365c6fe0af610b3f6b8badffd205b3163e2728cb70e7e73b4b9ad1924938e30a290a3d07061407c940e7811e6c0eb1d37a4b45090cbcfc8f8ff2a18cd9966634835e7f109ef5d729b32b05c939153dd8fee600f22b864b854508257d44ea66b2f166359907e96da1b776c6fb9b24c0c9fa93ecedf24a5d82df3b173a8de510069435231bdc11101d0a8a5eb973334229cfab615c86d0b4e204f3a9bc1e798db1204527bb1a5630c920047e0fb26cffa545e2dcb4efc6fad2186ac7208a8ef0dae49cf069568ee00d072b8fc6173f6bb3f4fe058acab928c4e8829bc7bbbed6cc572a559fd7a7c7438799bfa792d7699d92e03a3a57b6d97edd8e914825933b73df56fc74ea4da95e9c4906cda689f9ef3642e728488d3d92aec5a5dd0aab76b3b165b15d758c4415d9b6eac8c9b4ae5da7fdb8822bb84b7decb39aa8c4384f9139e3ccafafb5e74ca28cae0ad5800950c3f872eaa568b5cc1376333ad4085ea5f6d3d3ac3d81b879c3eea981e70128af94d7675170458d079cd1d62bc6952a5e454678256a9197a696a453e5eddf98c3c765d04716a874279b2462775873917d99d954d16a87ce4712ada48a94af22c5a6b0b9f37224608826fab59962586da9d52f59b724c48a85727a28ae045304ee699654d82096b44fecd3b8791aeb6ea864269d1f898009a5c4b95979a2ccea5bec87a342169ea485cf787d52627c06f72e3fa35a590fea40303bbe40992cbe571476e551bac8c256ac81b3c3e1b213fac7c6dc233b88ccd6479bf9ad798091e42b1bdb84bee120bd64de4f047ea95750dbb7e088e9b94b000af4fbc804c9cbb8d6cd5cba155a5449405c14f548fa212378326e76f369a16cd6fc5b4462ba1b4d984f2859e3f1a4f05501d352ff9027f2a89e0bd0f420d3baa3d32f5d19a9d0d0ecb57e0cdd624133b03fe0b643e262c688e7d3a78edeea12f7d394bce24152b89b7358326d992599b211e87965afdf173e6ae7ef8d2b84cd2b115694b7034082b77eff4395638922224fc05ea11562b435998bc422abe506ec033554ed0d344469d495a675615c8aa93447e01a7dd95c72e00dc4f7790f5620c0c3373675d16e59f79393279d4a5037cc2547b450c6075b6f0d832d99b9e94ad47598de8bbbc127fa0e01379df43cf49576e2fa280f842defec0b4d1fe29619bd72709adbf57eb630fec78365f1350b12d2186066d6d2bd0e0b642520102f4aa76784652a412234a423fb2b0e198fa4fa6c593f5030dcb22952eade8bea82f3cee0397fec74857d0a5d78498aaaa9413f16898b30520fcf12bb8af589a139b2ebc76a26b0eb77ba2ec91d7846afd6af4c4293a07e89ddb67707bb7e40a067db942d9cfc33f03dadf4101ee8192caad813658b8e1ac5f1658d38046b820adb333557e49f40d32f5e9bd1eca25af6faf62d2bc4b7b58100f4ca4511bf6d58103baf967d489c6b48741d392d8bde42796a13775d3b1514f1c199637c30955a36a350c452e0f7222ef486bb0011f4d76f1c17f72aa3a532154192f8056e011237c3a876cf16eec61a47ea67aa672d0c626ba687e43c996e6554ccae3b4811e55e820b3eddd329778aaf28c20a8c6e508b609407f799f892cd7cdd37b1655180c33f71377041156111b12c1d4830227e853b9ef9c4bce2f1cf9c60286e89eba70ec0b63c0f2bb3d4474789bead26c6450e1c4f50d2c27a729b39da00ce8bbb4229e859146a0ec1d2a3803883c2bd2ce74a3a49377b6ab646b2fd5b83d21f815d0b388c20c736a4d1a76caa528a9081e6c06cf3fafb15efa75359e9c4e1ef4a25104115fd051be592cb69e7280147b0b267e72b146046676eebc201ee2836e810510a58eba044ef6fde41517f1593891f7f29acdaa3da38085dea2bc0abdcaabb4a7b061ffed36d6bb0134c441330f2f5f35e90941e997aebc13905c2aebd4d47f8b1073fea9f7a9ade70eed6c04cc0136945fbb8c6e5bc48c5c5dbbb63ae6acb2f080659225efdfa37f24d7c2b0565ff074c8ff32a5c65f7bd189dfac108f3a794c88d0e97e91d7ba455f877453754dbada3f2621e3adb20f6a189e2af0ac6b0e441e030004a91bcada37293855750b5e25df6168f5d04f72d80f987fc74484c6e404149f6075269efdd1a32842b6c323a581e0d3e7b3c17e47e0131d3efb4a62dd02bd0d597abaae9e87fc98ff1ba313e103692cd2dba7566787db707f3f544e50410375a2305013622e2e5618f1aceddfc646f88be98a8b4d5bb45acee1019a0d1553f8c4c0be5bf9912572b397b0f2273d7ca1381fd860ad18bdd1eaf9df9154d01cdc679aa903084f3870820fd19bf65c456970627073595a2f76498fbe9d6629711a01a1c501c9708ef2e363fbbe789d96f2381570718b1c00f6821ce7f01488b6140a5080f6cbe8b3ae646dbbcc726f2690b963a84e594250020529aafb5c6327f661d559895d894626444b50e0841a25ee7500fa55882a854badd7510f08c67f1616cb718022b9e1742142b1a5369b43e7dc1c977df19323cab161bad5fb5e87fd5aa29ee383a6fc832efef18fe5ba3800f18231b0ece7d7ca8dac74bf2e3b4b82b6b17743f60afec73cf1013d4def49bef87d51d02d6e833de332ca29b703d40b95a2b57d652519ddca98008b396a189b07c80357cfae17187c4f238dc3629776fec156fbb91a11c743fa144154b28917ff6a8d06b4026fc1005a8a870f6beaa00944109c4753c37bbfd0a5ee963e651e3d37263c00affb5b865d2d7d0cb1fb5024169a17ace2a1cd839d5641eb27381ba9ed4a712ea6f2195ecc8fad100a8a9f3b772d6c58b9a305828e6f49abaeba1f33bdf703a5be0b27cc3376c3019b92d1329328574a5f615749ec7da8aa42d76fb2911eeb9275c27e895c727da99d962f88af857a9be7dfc64c4aa28a4825211e04bfacb228a147957623c00efec5f50f85d304cf3894946479de199173e790efb04fa796a5bb052f5d37bfc4f0af4c9e4cf722cbcb33fa1130c416aeb36b175a82e3f3a0e92dd8da04f5110e1ae4061bdcd0c255da589c8e79202e8f0827ebb2c0821a974a84a1f816e54d10e141cd74ef83956d6a46855835fec8d65a5b16986ee96ca5604683e0f0344b0feb64102b72e1853bd58eb27563a213db14fc1d1f4deee98ea7feea17663acdc01c6155066357ee554ecc57fffa62fc7aaa3de44d63a433502032002b301086d9ec8d49df151c86ada731d885ea5d1eade7458fbbc69ff14098004537bbbcbefe8a42cc6fce9119f3b657651bfce8f8f94979c97673fabc68f5747ef8c3d6c3ba1c2e2a1fc0ce32babe41cbedc0ee2e7ff6af787720487c2d2e6b150d39b93dda746e4f2532ce58bfb5d00221c537a6b733dd8ad32599ea7e7579fa9d39abd739106b19be163cac476cb76d52d64b86eae9d1b0998e12dd99fb1293ee6d75cdff3bc73370f84c05e43b428f3c42df61bd7487cc8893b3c3c2606bc13b51ec20daf890646994390fecf023d3eb294c71a04d23a997c45a50210847e280f7af8c862a6927487edc78ce1aec9d940b9e839a60b72ec757ead1774fd663f956266249913314f7294396986b586879f76edef17e9c4f2af19fa9370bde9143b9dec3622fd7051337fe7c72d78718e5ba1a1462412d1275d2c9c87e53fcd8c9020e876ca41fe7ad398412b05cda43713fb27971b7e22dc40022f898f75a599e63e23a8ac9849286cdb7c348509739cff90773b0d278e371cc668990d3c10933f69c2c0ae20483e7b4b78fbe26bd5bd3398ec19ce14bf899d33792bed4358ead62222f6097c92091f16197d27fa911206dc5472e961dd863be71627344900d8d59b79310250098e38f3e535e824213a7569c0e0e5c02b3ec1262009d17cf7c68bb32810c18468a4319d2904604f4c26c6dbb7ee1daf35a42ca3e6f4c6c876d965d4fad402af4b1147a65fe97a8a3841bcee4b57cfac230676e7733b39f64eea47439587c1c7abf10c5aad21c674409afeba2471db92032fccca20885ec199bae40e5a31fbeb1aa04126857d0f709b223f8deabfda2334f5740e7464e553f80e94becd70d0c7f330b7274cb83ca7a0df37c41d6e9dc5cde4152f9750ce4dbb33701e8914549ae449313e738eb0711d482a5937a903abd3eac91adc52a6ba293149ddcdaeb108a946adeb81e0bf27384dda961bbc1cf8b69e77c9ea64824fc303213a8156baa0d1ac5bcf72a0f4d06657e0f336fc269f6009c5db5c467a890ea6c6973aacf707708a1cdec04972fab274d4fc16ad6554e030106dc1b439c92440b2f2ce4fa80aabdb0ef5a462e96e57b241b6803eabd0d0dcb7ed3f4d04a74710ec4ca9657e519ff9d38133dbb84c6baa2de9ed67978cb0b5b5316a4cd2a01fca42b07f08e81682d42db019d6a19066222b096247d46aa8ce33bff5882a4e006410671c506990e188072532fbbd108708c520445ced6b139e4a10536106f1b0df75c1f75267261d8df6a15f251873e1c2fed8c8653a4ad761a2290aac4ace31ecd47003fa6eee23d95020745f1a598f4c1464330d219b6e34cfce9706e9154483d8792e2808cff8553fd9388b7dbdd0077febee53bb76fc5ffd2d2ee2f33d50499c75f30a14a21cab2590446bc12d9c3bb69b091767024596d6068b902f52f1841cb29b8ad62061ff435a717af2bb60612f6a43ecc91c5c6cc41d2d0b0ebcc4c6244b590600b522ecf6638e19ba79216d673e20278023f532b84007780a9a3536d05956fb5441181cae5828c9d6fb12357d655220fe2c534a2addec9b10ddd0c8fe8fd2f737c44409e256633fb75624717f5db64b093d9e788574a6a7afca3202b7fa1e3265f9ea031f2cf6c12a68153a69950079a4bf8f72140b0099455d238c0468cc91a359e77f6e6049dc08c9eaae04b026c05afb05475d4d715b27281b34bc34d854dccc454693a6450053f5fc7540f87f8cc543acb200b80c43c8ebf028f52f81e73ff369b05ef26a0551e52979870f1dfb6e2634b3797578aabbc04f5ad71c720e256fd82d91de9258f04869013d9fed5d47689d197f944980277358d7eec6ccfa2ec1a07564e175cab481fd50bd4e828ff12a8345855f10d229b61b950402a83acc4cc5b17f1522d639c8a1ed6b9d3c3c92256dbfe0c3f5671e195646108c162278a85103345b8fcf3467e224bbf988357477368080a4bb21bbe5bc1eefc018a72dc1064b3a707731da6e426fc120016cab503938dbe3894f31b1600afe0c40e9bc1d8aef04dfc92f444138151598c4163b47221cf39e82ca94d00d4cfc3602aeabc6ca3939a5c29c3153d635d449438e2271448c3378cbf97287c1d84b2de2558b1acb7a34c3e3fdf1fbbf4ab92289e691ca50bb54e320b15e0397a24a87fb63ef8c3828473b681fcdc9a3eb98018edf606a8b2974787091a4ece2a9aad02800f457a7f9ed8f918c398cd5da7a32eb7299b4667a58a4558f146203186d7ab4137ea4f9c01ba743e61289781927ee880d5f00f9ad91e85257017713c0faa03979667a87f46a3259103a433c4b3f1672bc230df27ae7da647c12778d6d27357bee0f812d5c3c9e24b32f12e50125fe38d30b4272f1715f2f44159b878560efd4acab7201da71f65f3ba5862c556f5137ffada20680cd628762e0fb30a4d36c64c845f6ac4e07bec3e8b90923b6881bda4963d1066609d5684f8ab58d466835ace5ef4ecb2c622629d36b029b3544c48d9560f68751355884456625f18be73b93427d0e698cc16f24860ec70303645823f9136f44761ca8c18cb5dd28163f374746c5e2ef526782a836a80cdc1fda37ac1495575128427e840dcaffea8fd35e36af1fd7363db549e4a6eb6788b50ce158dccbaeb382dbf5bb446214dca08a287446ec3455e24243cd8e45211111239b866e07d50252617679bb7403e890aa9bd6cfac1547429c57be8dd5d6340fbd869ce73a6fb0078fa725c2cc96ff3e525a0c5e286bf4fa3bead7aa98588aa8ae64e6d351f360f9faf7e14d7e4e552d765c8b17b0118ef5d1b4a1a7fbc39b80ae985b07784a1e63936787a1bb70e3f915bf0103f7a19df1c2221fc1a3b5381e0647324460872acbf4c9ec59dd796a794412c163c8294631e382d986e8f0d5bcf4de640a891b954b1316dd3f094014984e175acc715994f50e81a3ee2754a998167c86f712b5d5cdfb3550bdbbd4eff8f2c82e632c8e191219938e763722f0a359447012abda0f698e78f25b904cf1c0a17aeca2526c45659db8a3386cf4e18e57ba15630cd787688ae67ae6b921b33b2372efa9ef5ee7cd5e86bdaf243ec39e41df36ef8b624f81e13c540764b82e89157721d215c2bc763d7bb1a183e9791e9c6066b335b9d1fbd535e3ba35d025b42bd2ca3cab1143b9119e9fa480c879f31e9e1361a563a48e260f4fa54fd4940817573fcfa9fa8b409f0e35999d4bb6003b78334bd8a55cc9c9ffa1bdad87cdc8906f500dc3dc07fb52f4fd1522feb58b0b2468bc873b9e620ccc988c32f85dfc67dc499b692cf796d35b16f4f0858d82e53e49eb9d9f3b0f5b4581287918fbaa2bba98fc5678c69b80a345fe9d984a1b76d40910cea257e5c4fb29c73b76f03a1dd3192e4be8e775e80aeaed6e543178aa463d6e6abdd983b3eb65517d4ce6357af6f256d25e2c17679d03316c1b1b455e2c86847764924ea2612a5f6e44912a76ecf6785dd1e570a414c161e60d3515382516818bfda7fdd3cf969745529667a5d1f2c9d19afe4b58f3230ae2d916b1c70914fb067f7d199dbfc6ec4133488fa39ca97aba3c7503764134fa6519d26b1c53f2d423b51f34385c88d3380da141c107a41cda08cf4067e587cce8c12a1be23808cbd8e89c435433799358c9d2eea6eb91c17303433da944bb0eef58d361845d59ce9caa10dbdc5a4b30a601508a315d784caa670ef27ddf3063274ed4f6dbba3a5b64a2caa66904e6f622b69b4b721f9db79fcf1c84df71e60f9808fb9a14ef08d7fa18795a1693f122d915ef725522f41293d37bd8166b2052ebe06729e08cb55cea33ce64ff36b914b6e99b84835e1c9f73a3fb2df7fef55b98fa222f0a297b6d7453567f48b1719a4c791d61c5f2a255680b321e87c9de92e21a3a9bbc3f210b2bdffa4cb52fb9b16fd4cc2e29d2bdd2ed78478e93b8fb8f40728753253361c85e4dd0b64fd56dff23151b910aa2cffa735e08bff7186e6420b3dd200fe2683761f7e0fe062bcb794164fa920d752ed9b836860e9726cd488117ff5cd444da4ddff95751fab37e978cede8ab087ff9652c8a00d13a57699ca94622b75ac63a9bd02743065b3823aa6dc0d0fbd659683db6ed8a8973b57677eaad667f60d20b98d1072b75b67cfb44d379d222f68910d8084daf8840596df70f93c07f994f56edda8801b890ebd7b8d512aad2285ad37f41d4def1b2209081f56e539bd8289bffe69523220b058affa9adea61b42879e96ef2d3065f8022bc5a32d5e5397f61d232a0ceeab7410593fcf6b1b3325162bb61271e22b61272a1eeea260060c860ca6a29d12aa8d77ddc33f85f07fafff20ef08af9f2ea39514e70ce6c669894435d932880a68445e61a891efbcca23e4021b121d06d5e8f8c4c9ff804c24aca5d1e34bc30d68c93302335d1f00dca5e7b01644b023fbe34d2870f610f0449ad5af2cd77d972ad54d9a2e822c228c4e8a852cdcb20258f3ddaf77fb64bdd92764846db56f7432ee9cacee9329613e8637df26f34e9448023b8aa4355f38310bc8601a7431056494bfd7ecf069c29adb2f5e86aa0552497dc66d1d8172b153097063f5b61d5c5d367f3dfe808bd9b9c241f83802f8bf8e1973edda9ba707ab52405d6cf380b347f9ef9301611a24ac48276b9078d7e87dbcbdca1421baac125ef3ad9a5125048f259eaba567591f711a334ad8c8a483d4e1f4cbf1137189f28568aaf0a01fe8c76d0894ce2c24ae0ac6838ecb9f1b3f3aacf32d6be8cf8ccfa8d03de46bf83643c85e2eedaf6baed2d5ea064527928d3e86755ef3af5b382675f5fe1acb8e69ee643a7b74498c0c56fde4c4031623ba31b3811a0f04705bac4f41923ecfc7b748dcb9c1bc3cb9c967523716ebd49fb004d743e980fc4b84d883575b82433b122e279fae2cb2a65a6ba3a86f4ab95a3655aafea9bca41e9978f7cd963b95db16ba73eb0c0ed6f85f75ba68a19ff3e801d005dcbec45de753903843e01f64efaeaa224eeb32659e431c366f4fafea78b434061de6602598c8aa578dbe8e4bd57db1d0780c074bf4da69c489741f0eee5a17305611f5ab61e58bfee8a4b079ce270d6756535e59eebf36b0d652b302827bf77946689ed1c692afa8719d79a4b98d1f4c0f935a40e654ad6176f40e9f9397eedd1a693f326d8ca7b6122b72143de2b3b1f5f62eb21a9fb244860e27c56aded13f57e0ae1663f7def1e657c88ea369fc4df34407a0e9ccd97167aa378b92a9ddb4ae1ec6c2cc889c00447399823a9a2a3a9656f629f0b9e95586f78b21c6f2204463e5d1550d8c4ed000f5a365f70f6f505a4ab245ef474630b50efc80bfff36b5fbc40763c9bb416c800d2d3a11ccc5786e7fb9a56f9d9e884e1a99e1cd21790476867b2e126b7f9cd51c3fe3eeb2bdd790a8ad4c42f6d8db6ed75a4a83350cc0efa4659d82b97e5f6d03afeaf22f5918afa33f317eb5015266bddb42dddff4ca672f4d87cfe92e6528e50501ee51cc6ace84d9a1937d06ceddd0463e38a9fb4d6517651925b9d989404cfcdbfe374da0ed3ae2ab147c2791a01e8943549aafb51c2cd45200864eb76e4ff8bdbb77974c72b5a887af1c424d4fec2b2f5f4006cc74a48935e53d3a1fce3a912adefa9c853e91ac731554c90233f181f2c01e731853d56c45bd7724b1363b187b9c2dac5b335670a77c8c4176f948b599c11f9c43654ea10492f855c62543d750be9219033e6fe0d8fd4894a5d2d3a79aa3c4a5a06533735035b7113f68fc210c8e51fb25277c6726baf8fd6ac27607a047236adfff02183cd8ab5cd25d198f36efeb9ae95716b8bd9c726ef7d93040bebdd09264b8d8876a3e156d0c9f5676ba394502b47e70400a9aea74b4833daa4772ec9bbc465355ee5cd3be6d616d8bea607f04c26d7066423966eed4c62aac7b6b3e04ff76e4f7e806c667656a4229edbc34de582b490dfca7be44642d7b1b46b1e6d575e983a04a8527c93502b6b552111957ff9064010eb7cf32c19f525ad9cecf90573fa76f28a03d2cca8221371ac9aeb9efed332b0645356ec06de868b1823726fc8d67edf17911194f331276d5178c59e8f4dd2edc3c0536fe4eb11f81e33f37d24c74e2542e07a9f88482a579214753c0f26b90b02ec9f008b207410b102bd2dc5d844a0592618892eabcc9492ce8007d1da6e4433342804ba140ec104d92a9d651e97b09e20edd16a7c688ad22c4ba0b4a026bc393bf7608c376e887d72f50d9aebe99cbe113b5b71fb98127a0559d57baf4c26a19116d5d844281b350b4fc33fa2032cb95a2af493f795c110d7d4488282e1eaf5d025b9e6f1ba5a81ed1ebbedf19540185757f400f3c58377eaa4f308aac507662da922903f1dacd5f7b2821c534a77e09f9b3cfee864f32327746bb191385ffebaa0172f9a5427b41b53ec8001d0aa654b3a1073dcf62cbb0ffd04a05fad44fee80d593be7c37c9ac412e78e344a3134c1c0d743fd4b059e033edff5b236a207d7c45cb53551e39a4599a54418c307cd2bef03c89ed141e3f8f2047d8f787bcd38e3392720f84092fe2ef9c3a9b150eac5e9e00bc3fe6439f237db3b1101026bdb7a5e999342d87048605ec7a2413b52eb5f5e5af4833957735014e610ebb4cd2cc62f6f8832743c23bac373b32d4ac931b148b936a34fd84b22ed51a2a70fc1ad04191aed2a5fbcdd7b7a94b7b4fa6af502cbb6d10f2681712c2a0caabb0bb2e77336655ccd6422b8caad97c36d929af0bc7336507fbad0ba955b00efb5ee69b14157554ef3e519134c806b25c69ce04d3fd86b650cdb688903416b25d87dc7fc5271433c5a2eeb23aa853486d7a090a02cfce136671c33d9ba112c3795b2a41d8ed92afaa4cffee87d8dacb0e0c47bd97be36f65076f7c2103296a75f4ec5a9e0d86c0da71e0afbc08a87b2d54ab4ff15a037dc4c706617b267bed5bf3b899bdd4b4b3b2921f787ec95d61873d4d645b5b80d4fb99e305b7a5ecce4343b774fb16c8be5297813a7a1abf74ff355709c4159c35b3d51fc864579490fced79e3208d3c9ba72583e00c6955348567e1a9eaba5b65410547ea514b788d182be600e61748ebcac24451ec9ca0bbdb7438f17115c1d034d094605e45f32bed9216b7c05ae122f2937e7248a983fad97ddce38e3ca866391bbfca24c305714673635be1b181b17c65077df273f1cf2498b119a64cd26ad96a8d03cbaed1b913ae2a1e5d534862453692aa592be254dec1da43b876cd7de675fe4f4173d131879e6082fe94efc0795ebe4b6930a236ac734627a654d5517a03402aba6dad70215872f12c0674b55469237b55be72d93e02e8eb4eaabee5972e3caddab648f3bcb9f5011f6286d73f9710b598f8ac4b9195a5c52c1093658ccf52d57b8f5eb11684528c3ac2cbb9304888447c2161aa77948a25dacdcce4cfe9808ef52c3bb4bf2fc00efd859ddd301768eb400a1111203ee03a78c8266b9210e9bfab31722246ca47268a8ddb1a77396f02490d340107de87f39f2dc112ef86f3de04258c981374d2cbdb45adc358f1a36951d6f357a6e48d2e5506afffb93b8fbbcbc30b682e4f1df7ccf2658be69bd8850aa4b2fec44c1e8927e560d123a508fface554063045a35e9672414298520c4e3a4063280a23678b63eddc748954d8e0149c73b9d015821a9ca05b32be0099288e0bf62f56831f5a465dec4f0419a62c28237c7fc3defb70e597bf851492b49b2c27b605f1dc3180a5c8ad68d38138de9ca79f049b7e590556305e4197b60bdea383b6224cb5a09e29491538b209438e9bf681d148187ecb10581576a78b1380bf61a744aef498d12cdac76b9dbbbeee06afbf8fdad1a43398eee41fac812e0f5fbdaf9f0f69ff6bcf143bcf7fef49b064402a56f9da3e674a80d4ce1906046e9e19566e81b5d40254b908588081cd5c585b1521a0585db89f92c68d10b292a18df07442d474acb4e94879eb81508bb801b74feb82247a66bc1c0d479839ca88ef10eaf7d89a1b719901bb0ef1a2f71aa3d5badbb47f7e3b4491ec5c66235c45748c44c04c2a1bb56882a66b47199e9eb8fe16b16082a9228f46b0374798ad6370dc205525e20e939a5fd88efeff18a827f2dd5ac1595d77e91e162cdbc9475d17e6ab9f4d5d1c56c3d06e0111603d273b519f620a0a81df7e27a42435eec05c141c84566927babf39109722260b915c85697b9253ef2e2b8d1bed29ce0afcf352cbfcfa64867e65a2bfca64cd75e85091ad6c5d89dfbd76bd84b8f8d96e6b7d242bdad6e593d1f5a2b092b3d8ffc98b894c59c690376a8034b9ba50791f0db03147d550c13f8b65f6f340bbb1bf6ece159280a03e21fb3debb50be5648989e6ab706143f9fc5a94b93008530d30d1cb31ec63643e5380da632b7968dbdf7f3a7bf73dc2e3054c21bbff7667423e74bbf984f4f050307b32eebf420e281ef707d8e3162f95ac4d3c7c33d41bdac0db5167295003734ee5fbd8630529ddd20fa9517c6eab6fc19f46ae212e55e3107f77b030f3845486030bf45755ca33c0ea76fab5da3cca144370efa5841764e19073d13eeac3e0b87cc755e0a5469d02eaeb87352504ec7918c45ab377afe4b7f3233e514e73d97ca1cd1ad997e695e5d6256eb66937130748d5383a94b272fdaee7942487999d6d6419dc58c3314274776c7869a64b0da232fbeb411c88e26dd45b5ddbb0cbf9fc8fb64507b455b5bcdd3c53e8f283e05aeacf52619f7d92a46e88d9f0639e49ad17e78d9b14016ad58c530fe216191f1b63fcf4d1a31ad153edd730f85cec289d8b87c7f38af1033c3db468ee599ccc65c2e48b1b27fa6974ea82ebd0151c6debd315f8b8c3552f0defc9ddb7051bf99619482868ee1ca61bfe9894090bde08eb9655488e7792d897fffe1b029150528ee1c6d4110d06282ff4aef05ee656bc2bde169a73eced98a57d04f1ee6ed5f6a12a562ec492f5f7df5e586ba389ce8ff68f240e3754d158164d1feeff37eba73f3be1a75972c63893cfccae38a92b691c3944ceb4af3bdaf0d61c91b386b4a9e8e79c9ef98c4bb81523095d6f2aa05985cb2cd56060206af78608db71de2c68849af8902d9652d1a14a738e06ab227714707be7910a9a0ba1539637423e47e1935b9719bfda343968316248ebc57f1a8a3f88a74551a8e2734a10c50d7b608e4c1d53d82010c44b73b5cc5b214ae658e5af52d0ef26ee870a53941844407efe0c5c272d72d4b77715d7caa2465338f9f86d45aca43e0c8c8cb1803eb03f356731235aae7f356e3001de885f1bb9958f0502856d158389affb5bc2530d5df69b8f195b63a5111c902ddbeaba831dca4e8c8dc5c373a4ee7ff793cd94ad1d02dd19e6a5d391a4ff6334541d872be9c538fa9def7e8a226a61cee20466093b296ce59af1af6228df85ab99d15ea2be0f172a0052af8b2fc3890e5fc666c0e384d5fe0176e817b3c9e1d6acbb75fc1316bc985da72becaea3a3e11368fec2d60700162020b081a07f8661d36ac991f8a799a7c813f2f783b1501cbd29bd08f6811be3f72d61fe3e9392510a6a21becc98e5e3ad16af9a832838a43335bdc21e28d859880646164693717db6e223286dd85b6f5f24250432635add0efe468689e22573e8d4e219b09f5ec5f7bc058af37a55af54774c22972d401aa9552d15fff0fe455e557e62535971cf7dcee17276324bf25ce47948bec5a2be05ee3c2ba6daae52c8fab0d0edb558354180272114f1f26bcfa6e75e7ff9b423b54c8006d3af621295db9a6a760aed0bde50f02cec31b95b77cd1c5871e1a362172774bf8cf0a2e85428fcadbf745840f49eb7624538fa5cf200c442aae6550cd02403f7c7741513db61b0ef864a11a353ee9afcfd6a8e11da5b142af34d6ef24e44f273809ae38d617af1851cd3411c50c57bd91733d9377bf4a08e161f51d1eee8050b29080a5b4a2f301c9b5592eef8270031a5eb91a8dbbecfa5dd67ec715cdbdb1e316535b49f0734d5d7419948b386cd2b78f87c33459ec69a605f0ea36411ca7fc67c32f10cf2e9f0659aeaa820d83c6e19c2b8c5cd639d578c37db54d3107be22802c439c13d329447c57cbdb3d7889343c0dad70907ef5bdea3ad32824f9bb678cf50cbeeb3ee2f7f0810d2ca4850f905926093a613187aa488aa565088a70aa0f0fc31b076fe323771c9c1c1b2573e0d4c6a732a0094524738577306e9acc6b55cd9c4d2efb549ef4ac1403dfb4791f0e7f5e4532c998c84c613a886a84cff062ad4f9ecc3986d3abb1fab412ef265a4d3146717660a56e278007eb237eca9cd4673454d7676e041c20daba1a900dd237eb10587cfce23bf2e4c83d52e781713d270359ff4c0ef9390de769937c291f78e002f4ffee4371bb4b764ac3dbc3c776092f75b0e682b4e3f3b74ea232324786bdeb33dd349ae270cca7aa5c1fc717ee52ee92833e0a75efbeb39468acc5a71018bf4cceadd5a18874437071abe43d82101eadd22856767d29a558bce9e138bff24868d59c6f4d5d1e950d9ed9422ac5ec9c50310a4f5ef76e884bf081e61be0ca5f512d328de3e3b95c4c02e7ceee0103ce8bd1a3b02b4f25aa17e2bccff1fa74e86f58834cfac786da44bb5be765cd7f59ed4ec33b5daf6f3369f61fefbea67aab9a0f6a791a6bd1a9d51f60e77c6b22b460efe5c8d4e52c1b32d05d0b0db942b01dfbdaa0fc3766a6c7211a97a65c852609279120793154c0c68f4d055ea7e2f5fab66bfcd33d8b67d8ad1efaabc0e7b36108847103225df98c89ad32e29edd05536ae0ac7a1e6eee1d67772fe0e457477a5ebbd837a74f89e9a9f050b62e63be577292f4799e8376d8397a60f31f2b04aa081077bbe6ab90946650e6cf27f03a18c7054a9aa5c78ad336deb0935ecc4caf213cfa439f06a37f1ef0b1d792ea2e9ee39634f99128fd06285afcd45cbd98bf8779b00dba2ce5ca0e93cc1e38f02c47f24cf4ac6d04957e996d2cdf6aa902e31ae99da094175b7ffcef65b3acc70eacbead727540721b3c45d57a06fd7b3c8dfa4088ecd83771d77b79b3b005a19bfcdeda0ea88d34ca243a34c2f4d618f870edb4ea3d38ac4bfd4180e2c0a88f2f23e7f4a316751ef09281bee9cc6455424db9b90b8e9a6972a2ccf502b1711a73c467a3064db65a622a1dfefc8e929221dfd8a45c6403359c4c3db933545a0932e9a33254d37b4750f7b588128b3e4069bffe57b8d6fb5842fa5f705aac3a6892a94ecda807f1467d789ee735c97aae6e0f49aebf3db24a5dd7664bbac379dd124776986ac47b2eb0324aac810d5d566da55dc0d542441774023bc7cb5607d7ed8e41e471d58d1dfd755d77b64630240f0c8c4c74d54c73f4121c0a938b3202872fe2ed23e55147d69c1b6e9c21c706fd3aadf857655a7c3c8b1bb41ad129d822da897f966cd2e6a2538500552f2170065e02d51e8ca90623576b81d8ac2b8622f3ac5e69337c6664fd7dc0bad5885ab60516b73404c2b7c60f6d9fc9558ca40f6cc23066bd7aa5f1b1c4849057bfc928480eed062c962c52ad104ca70e328772e106f085e225198a7e4f9b05dbbd5f06791a3415eb2593bd84159ee158fac47c152ab053c6fc2e89761669e3fd08560b5edc36b868d77f7f295366504b619402e0a4eddce693b7d54b0be4bf61873dfc16d136fd050b4480c306ba19018a509efb7eab91def3ab7db4529b91e058b153952f8dd16cf15628dc8e0bdca6c8595b83c10466b68c5fc11baf6e2a92f6325382268bf5a9c7121821827bda3655d55fdffa25a0c566bfe3424af42f763d4d74d7d96d452cce70971fe39eae542b57f43f024dd53f1be25ff369f1a93df8428a90801c13d7b4492d30e41cde4f5866f9c694ce7488c9339f582f6c18cc68d1b83cee4f4f689efb4598d41e47763d42cf408ca4d760cc5f90eb89f69fa060d56a33a78bcd6120a8ffadf1f7bc00f88ba9d22e221e03063e16a447db19e43b3377edcb6a0bea27bd2b12c7c93d9570476b7dbe5cdec834602550e7f912f287158ea13a0aa5d548f36e6666551159ef7807c4e66caac63a07eeb4d8f2e15b7805925a2681c9a5a1e89dc590c60dfb42c5d5d0bb9c2751cf010c66782db3aaeabb931c45bda6982166e17dcd5ea992bc5b4520556ee79568489bad1640342acb1c52a6d29daa2fa1712875a1b76e7e3c7b6e4cb99b305cbcb0b0dbee58e332ef7a1883861a1993a7342e3b8f19fa7d319c49c5149b9af2a83a9ac381f2f2b5fc922d314d7e187a48fb2323a31b3d64f0db95572304711a1a37e8426bc29752aaf0d45a1635556d88f6050637cd2073477026c577827f228f563df6ecb241f8fa37dc8f09d0ee3b1fc37babf7a8fb089e8f87f52e8cb226e25179d37600c1fcc6140569fff5c470791dd257e3690185e773bd5fc5a5251de464859fb45177c79f881c8c9bf150b44dc961189b1f25680f4871361abd56f80fd0c2b13b4c8f2c0d21916859ea727b30222188c90856771861c6f0927a891ecdcbf8db25bed76a39711ab80931459db85315fd59ea59fd502967a13b46a26b77e23742cb7a750510ed5025ca09a2dafff0864c69a0fd2cfb9d2a477a6139dabe307cd51044b5214c09efb124c8217574271eaf5d46ad80f2ada8285d3048a521f6ab4ab82867ccca208a0ef6d8049832ec043d97fd45ab30a4e613eb470ce441109ed1070f6ba26bfa57d1ef48d7be62f25374a48c9b2650ca226b5201c2184cab56302efa13a2b254ab0a42b8734d1c001c32e62c8393b7dc2e49d6c4d925e3b73dcfe67471b3b5fcdf3e8d7727184ee45f2e7f5dc8d81cacc96798b47cfdeaa36a05e17f6b280b2dd3174f96be297906cb32abb76c4c47b057844717a9e0397eca58767421ab8b5efb5f53fc37b4f1f5a579968005e9bfd26924ba668c2b48dde21bfce858bd0153ef7b89e8547476b71f4808305aea53cef48f466f9c55790d35f86e162de1ad72bfd7b8d77ceec7e9a7afeb437a1e09d081427cc23a3ef726177680af1ce6af51e2e6def8907d4c53cc283c1f0c0635ec2e5d7a932e69ad43aa3186f74419329f70cd42f0ec9e43640b57fa7b97490c1d961295d953fcb28c4e2332350a5f71e0542ae006aea2663ffca575734a9977eebd9e4ed29cf205a8d89b07f1b5500f6947a16e72b5b061ec4a21c9c75acee4896b9ce786910b1da724df891954ebf42f30f801f4c56ab7c82e78e256e8bc1502a0e3ba881a91059a736bcb55f0e4e79415f11a5c7c2e5625c23307bd9626d89d052f6851878f625d0d00e4db175a1d70621aabe64147e35e0bb3d92cd3e3e609213764f917fb5ad6940ea2e7e2dd26ea87bf8a655060b830a0bc021c882db0d9587cc70b43c99d88ee72b397e24513955e3ef4c5aabacbeca979113715bf7ac42fb6094814750540c6c7446d7900c83a465e46c3ee041c504d5d1c07f6515915a8b1c9a31a46a79c77f85de6086294bc09ff73cbbc1beec4a1bd8dc55bfd4c2fd1220fc270f746e7809db29915d82b8448ced2b442a3bfc1f6505bfb5ef98fc13082d51003c3c651a729378bb3cc4fc87af44d6cbfb8ba9ba0b997ee877dbfeebb247649bf486d6809851b082b15a4647708f8dd334113867ea11a2469d3e5f261c007385970efe860e5a54897a6b58ed3949a6e1d621bda0bc09ff1aac42df4864b5d170d08107423dbd2d2220e9e3b77891a16aeae71ad438140527def280ed75c32c6c6a7d7d2773bd3a799ae3d6aeda5dd8076064ab32d1ab479153eb11baf117c96cb58cf83c841fcd6d41ef565e0a1d72fa9242f28814bc916869edc08f1282bf639acea7a20d636245f037cc86d45b569657a88b5a4bdfc14ea40ca63e3ef5141a9cace5f680a0665163146594cc634819cf9f7f7a1daea9677bb6e115022aa933646a0b6619fd39995238d4e53705efc5b8df2737ef45a66bc6a51b0c418eee4d6de2824aa8d3d4c19bed2815923d924857cfec5010f9b79f21b093d124092d6931e7ebb9cf1f16257b8ff23ab2f9d5a4d0fe45ec70071c40abd2a498f42768686b20ec2487fafccc504e2057a7d2c538b326a2799f8abebb85f36c9084bffdc859b82d2b849b376480b9650084180cb5506ab0a1decfb5d4f84588e56aaff5a7cb192c921cc4b6fc4f3916287fda19f9f59a7651b0ffecb5b15ce2bb7a24c49267fa26b0597f3bf8b7715cde42043a519801f06da6e36b539deee9cf3a88e3504f0652c5a621eb86f4fef438611f283a07700053d0d660f79174a06a4a8e1089b2c354afecb007e25ed5e92c4267ee5c3416ed51c8b20718da899cbe903d5ebb42cc3891ea037d5f29df1e0f5b78b1854bc2cfc88ae55e396d4a0364288fdceec5e2def075eaa5d331ab2b2231fc0634c81ec3a5b89ffa8826eebdefab59cc6030f36244337cdd3f22d3f3b36e350dd63676c6fa01ce395aa150c77aa9c55a64d021fe0a2b31b16063b65d093718e50bb84b1dce34bc4d1e1143774dfae36f38e48cc24ce7b75399e51093e6970eebc7a8760e2704f411ca0b98c456fb30bfa74f5e12302974b580cddd9688da2ee60b7c8b206e412598637b08df706a6d230199dd3f4b3e9d166e1f7c72040d87a8c5d93011202795d0772cc258d12e262f86f3e83450a754401e44cfcb4e03ff3b3f6f5659c09fed2b3fa0b0ae2694ff09162763c198352a2cfcbe5db5c3a93e8224c8a461d2f671f68896f726651f18faac1e4ad9b0365d5a533bd59282c2beebe9a719ff8930b314686849e1ca5f91d67807675cd8859fe52455ed095d5ff19f9e01e0389191dd4be439ba96f47ef632b820a8966a95c29e3037c1b207953eaf592b5e44e35cc52a9d4280bc1870da55353e3179a2b134061c2ea64fd412614e06ed41da049d232bfe4e86eb251853fe939aa61f98050e318126fbabbae861d303576f885728b83f44c32a18c85fdedddf0236023983ba9ef9add551b791fc0f2e2e13d50a659b07aca25ff379bb886ca12242befb5142bb3a2ae4222a002eb68e235004ddd5b2d4e9873a680da2c74e62d69e32a214a97c9f9dbb0a31b6c83b36f8f2d0439befd007b69fae5f829a4bfdd8a549368707f91b7aa8e41a144030f5a587f6a8779a4cef2aef383d2bd5e68f13a4334d7eebdbfd579c04c614818ca59e1cffa9ae93616bb437126562529b11b3b190adaea997bf243db1cdf97ca7b7614ca39051453e09e1f849f4f09e2fd141a25382d4d1d21f11e14cde4d75d9c3d8e91fb57cee83c6b2fa68f110f416b0dd2defdda6ea4515c2b3b424964a429f4eafa9009a29b62cc9bf80fb87070a8abb1c9c218fe6b9c9a99b9374d23787e259cbd0e0a69b565a2290397e0481df6c87ddd57d1ddf9ca42d9b4aa45ad0442b25494e9c43268c542a4b4a3947102b656ffc1401156f116e22e5f709b19a0a11cd425eda87455474dbcf1ebf50f0998d146e2a391caff0067cf06324515e03388993dc284b8354e2a7a59d62b25fac2e19ae29315ea87f37ae749294059e464df08a51c0e7f016887578300bb3eeae3b5f4f06d111647c8fc735eb723ee9b262e0d4f63b52c0ef76bf8cc197e074cd2104c7c8b7d67b9200d06148c679f986e4225906fb404b7f0f870994108a85ef4ea753c88042fc40593fc0a3a0aec0138f36b4976c0f9b58ee93b652be5059271cdbfcd561de2a5551a5a8fab3dca9035f226ac413e83eacd92758ef577e85a1b7d717dc95eef75b72520dac2a26aa880f2e361a75ad2479ce3a4c7aeb0a1534e58590bcfc5649463527fa8351d5d8b974791653995aff93841c07d08aa693ab7bba00cb821fc769e1e08b7458f5b1c91075183e1dfa668bae9ff3832fc9689e7f881921ec918c9e7c437e93e5c7508049e6e0c09af63973e95d0353db98adcd4328336f0e40b3b054f84ada4f784a1db006dd2b7289ee3c87f463741d2fe35692efd83525dcb2678680445c4f0402bb6335e5bd047e303ff14e61eb53307c4f40e847ab4aa826c7f4d94273028e3eb1095e281aac4cefc99e6a88d744b81b378026ee79a85bdb6aab3ed14e490b57701391bf0a5b9707bbe9f308682803fbcfa0027baabb240c9599a770413cc5d04a00f4eb2436936dda1013cc08346ac5f84b2587ce7243654cff39e62df6626ab1264f5fca4075fc5647b71286b8379064ae7979396064dc01f94a46213527ab9ee3803bcef4ac086d17c597f582270e9b0c7a9f5d90571867052a8ef7d888a9c7b547bd4c476064def5228b84c9d41d8ea5f4f44644754243ef15f44fed209805e591e3bde9dca90cc8bbf6276d12d203cc538819bfe4a66663fb0b564e6231de4a930f7ad21b15be4efe63cb5e39db855040f2ad04b25b0991d418a61f894d8a889d70eb498f3f8cc50401c595bf3f68d0a1d2fca1818fd5d38ab9b779e9739a0cc272d631fc9d55603efb78237d19098f535c14003c1706b65e6f285b57970f6c4d10bf354509d90dc86767ce14467a5f2871ea714320bb38031c963ed558dd48a9963998e7093cdfd4c310dad9dbe0f6bec87a8a89833d2502d1c1a1ccd7ce195dd9012a4c6cb4c6387b47ee13f689d900c476c2e12ec3e86681eadc4c59a9dbff4d08a9075995e8e2097ba0b223ce61a710f9caa2608cbb2779d2a67f9b35b9a538b806d7adf5a7ee681f6b3e98e2e81924fd8b4e082f4394999508554ccfa4275ac09e344955a24997c23d349651e1b47cd66c36354d1eb766842488f39601d06013df12ff6a33e4ceb576705d511863b909a947bdc537e6de0ee815ffc2214c976e625cc497db047bdb89c65bb9918d405b35ba6a0f2b8cc33992db0ab15a6e5153ac0c520a5ebe13980030954e4455088245ef5e2a082c74f56cd24ba567919299dbee44b610d0ca1352657cd464157792982ee864827e2e993b40d8424fe87c973ba3e6f6067ff05eccde3eabed625982371665305430407d3346d03bb4e77463aea4c5ecdb174a1e1c1ba886a46c050f43a15fc481aaf519c03699edcce75f9f8cddc083527c097bba11350713801b4c9ad8428e8968813a3e44b496d1a66e339d68fdbe701c1e97314cebc44f056662d5f07e27a9b245b12a4431829df26a799f3fb252d7919fb7124031c58e6bd749023f4857fcf74e151dcde28bbda878891f81973bae78e819b89099b9d73ea7f366c01697299ef629ca1f7eab8e6ef87a620aae936166e58b06d9b95fd4dfc64094419ae857edb20bf32b1d683e73323e3c8a790531c3620108fa6e7256090a2ea00f0773dbf7f843607bf732d44a0e2e290d82e81e5523d99635cd45b7ac03f8d544d038126a656f27a8b850fe2bd48451c7d5046edd1691fc4470f62cf48ab60c73eab1e1fb6f627e5a2a34dfd609aa0a1012acf0b2708de884195da697eac341e51aabfa47862d55ea7e0e799324c3b89a2fc8260971dd91ffc654e5bbf36cedc071fb80d80b313c441551283b3c215bc3fe96f525ad523fe26a913630c16ff1a49f8e63d6cf9384835899437b65f7946aa2c5ff104ae1410e380374931a1b68e357667bef15f6fa6a7750cdb15221c0dbb653496c1a0d09cd8c58a2b26ed7bcee33d1b94ee7f16c257ca32b6f94427d20375af569457a8c17fa0ab8e68a0b9f0c177855d925a38767e419237692f5f6da4151368ae51a6425e3359b07636e0e993e0147a1e6bbdf9057dcc9ebe1f9187e1baabfcbf381efc9a3de10a8343851492cadf4e7b3e582bb3eaacefdfcc3dadd55d7a83365af2f0500ed573f3a977620ef0853b489344a3a31ce76b0949e31d2e88ad928f58989f9f405a45262e16b7d18495367961f05c75fcb3683789b7bc64b0821c140cf52413ffe1c314c134f9dd2726d022e18cd22e31029031239787855baffb156b48970bc22e65b51f89d36abb9146e81e1f8728ada10442e42467b2c3dc0db82e022cb39c3c143a58a7f55191e8a32ea2002206b9542c1016bf3278b5d03316ba7fb512d824f19e6a9b5984360dce88f2a218fab67ec40087b10e682b3d346adc2c67dcae1c9a613f546b8f77ff71be9c96a6a37a9fd30f418bda3499f97c6468d556c7bb6b4f8b35816936c344cb4320297855967dcf02ac93da3fe07163f71785c8f4c5a34d46db62ebbc7bb1863f3035fa4041d39feb1dfd5380004c54a00d8dc7a70337a90ec3e8e2e5e78ee648f2deac33eefe1b530850befe54ad0b4ec3d4bb3471230a91c8cee303601a5856b0ed50b965aa0d8c8075c326dbd7429c91a23cfaed550dd128240b47143e53e5597304e748cbb43ed0ddbfd213e57a6cb65132b91dfd049843f0664b98373ecd636947a5996bcfa7b77fa584e8225f5a8f544635ec67d5d27a189b10db701c1fd811b33182c1716d7b6a204747590170e59cedcfaa4266821dccecfed01682ecb949a2a988ad3a8f9f3de1766068e7905ce65c3f06fa7bb311f5afb9e0fd0ed10b6db97fcf7c46626a4c8fe4bfb20bbeefdbf5d5b1178f0fc4865f6babf41ab193275d81ffdf1596264d27bd476e20dc8cd4d52aa54edbaed0073db525e05a8d5048ad5c89f802d7ebb830743d97d89a9d8aae755fd08e30b4b369f56ecdb16d219c869e096bd86dad7d0b0890366ba0d24c12ddf01cb27ca3a1c549e0eb66bb49cc5a496dced034503db4d8ec4f2324df20d4b819d06258b543cd2016bddf6dd9a910e28b022c708f0a6670d1d98ba6172b7cf44e8a108e2b90986bf66715f11de79962513fe2bf16f5ee42657f5c252ed6cc126f940d6c3d08cce6bc7a7536e708c251114844be60d81f99cd5c82ec8ca090c8d56c62bb4c1ae35aba3be1394656a084fdef9bc9b3409ee818f44521af10fd3e284a0a1982d84b9487bd37dbbebea22ac7fc1763037ce1a1ef2e7601ff0d8f97a873a6d6531e16aeaa174247bbe75df2418376929cc5ee2a50ee9e6722d8608feee8ca039e46b5fc30b705638a3c9c296c2de7936105aa988b22d3eb13f7f07322dc4ec0e765ad76649a3d4f53c1fb212dcde523e4d126429618b569e84c47af2351be16d5ceb59aa2d789acaef9fa9629157be6b68e4f0bed2bb5ce2c88b33b84656047c39d3d186e70bfa82af4a42d7faa823eeb974c9d5a2e1207f5cb6bed1ef3250c305507010d08a93e8904d574c93c902c79d03d94f2c4c64a997bf66ee45e91b0950968655e3f1242525eb10591d5aee6c8b16f8e68500226221ff34480d5d1168791a530ff43713007195795c80daa97e922f921f765abdd66b5fe4f507b7870d4b361b874fdb7f8a64aac58d9acc875bbd28052dad923cab74363dbad9a3c66cd1b1b8987c1c9c56b55e35fecfdab2bf1b0e420b4e0bfcdf4899ab620a73a70e7ea6af9463ce729b820bba6de1d4068c1d4b81cd00dae344bf284a3e9821fe861e508db0fdd419e4fb1a6399d7658b35db5ad5d4777137349353b215d9bd4d4193e7e1d1d49f8dc5b98866761f45693d3abe3fdc8baed573d4cc6b841b4968fb68ce1bfde5e93391780bbd4b313ee54d0c559fa4914f1c80e328e15158ceff7d0f674322228d786c45b71283ac8625f22ddc204955c6859b527bce51d950a70df6c49766f53ca81d2cad784d962f941a2c1e53ffeeb19c1f8ad82ad175e94a46fbf47093c37d01b2716c7de63c5094746fa9c31a432f71b04b5346fad4b3ccfa29b77d6d97b695442aa215f75f6d8558aa7d0d835859968f57a0d6ddb035e0d489c853044c4034f55cc56106a1450a5f53a664ef74456817d741b4a578a936c874263ae6f31deaa4edfc16ba5d94f4ae5f6e6c3b57bc918c3cea4661cce339982b8fed29a56f60907f0310860c4633610fb1062b9cbee605379bfbd6dc0ee398a9c92849ca13dc0d07afeb6f48f6b0e94d69475b60227d4c95f484ddc2326aea464c193e057e1bfa78b5f987f262340adcbe02f3cf9bb853e32f63b67ca2446c9d77e167530a1ab8334598f8bdd2a9657dc3b06536e2be4d608373bb0535b427716600611f4b676c6aad527bc7be59df7974f196c56d232946c960c4359ab763530bac7c8570aec361474241365e3d636e9c56cb76873b616217b230ea544c3bd3d59d4e513a2f57bd5d2b22501fa6bfd1a29eb350579b9c8424abd462cf9f700a3378f14a0150c9af112327100aedb4b563a625712e227332342ec6fe6d89afd93830ad5abee64c2308182cbb7642c752e4f1c61862593c6b7073dd7731677b86da9c1a69ea79582949d7684c4934988a962286a12e480ff6b85be38f3f8e7d10797da2622a77d86442317c0813511c4734310469ee65ab5bc5ee5a9d177386670f7a2278d7b6c6b352bc3e2ec5274321dab78989567393ccbcac8164262bdf12c332d8974cfac97313dab1f641a97567db1cd8c11f71baab78dd32032ebc84244b89fb4c80a473a5869c3fa5a26e595311985173e973105834d5db396fff7db05be4dc54c8b50e090ec929019ec58c381da754dafa89a1836b268efef3319642bfb4feb1c4182ed61a74743e63be29a7147b3052da2e41f4f8c725321a7f84c47a99f12a2ce6c2312f5906463495ae57b32bd51153b7d697297122fa1e63547516c38bd3ffb9c9d0a8b3d1a5c0c76578295ab953e5dc8c3bf34e586c6496eecaa49c097f0265b2f20b07c2ce6363f09b00b1bc10ad3ef3e37c0c05eb3c78e7bd3302e738b9ef527e7cdb00f5d1c71c8eeb3aaba569d88a4400acdcdc18d1e82e77b1c3072eeaed1010c55ca39dcab4c60386d14805a25b83b73708bd5b0724e6f974c326de147c752e28d53af257aebf19ed887c883dc9abcec3c82d581d0f71f599d085d8ec7ed3a21166648e439030585778801e93dacc0a762eb363b4ea8dea73c5e86bc45a400cf6bb1f101c12beea7b1b0123457d8687243b60fead9c02ebd2742acfcc7d9819edf6603986518d0a5e19c1e3592f48107fcf221820c2ac7db1e19b8784b4fe1b0146529a964f4c1ce26b9667958f66e67d3d770b7b191ffefc587f2eb2fd21d6153d8f22f92faa8de9f751d4474bb160513a0c366e8314c1e687978ffc88a5d2e6c617224fc9365aa9cc14ea2ef8a970267c005ef53774dedb6237e7632197a5a38504fa01a7426aaa745b9931e7f61f302e964faff382f65de8462e828af9603ecbc3345eeb4efd55be9b929cca8ea9f5194ddaceaeef0139ef2c18040df1355db44d442d317579b456d9ee89996b8907d307e2e10818e0c813cfc6617b6c0ff9b79ff0a0874eeaecc3beba41950399ef4bd7b6384aec9c9fd30c325b1bd8d46228e05c0dd03a2a64220d4c5c2eecbc232adcad1e7c8dd2611c1af48e57a9be1b69820ce9c9e8833dfd0d18451524758d488a97c908771a8d1891082d17dac9447302e1b3e6bdd032d1899f6a88c73c3e5a8d646af08065b9e29b33e4885abeef812785e1d01e7e13c010be8c6d91ec911a1ccc7a46abb52b92d49ce236579e138251b938dec5288e21d9061789423f25a27e4098416855cdb28b40f60a1849d80df106c48bd5280dd4e5afda44484da8b67b2241d8b7899754f55d6c4bc51d361173e58cee7714a46a04513a5a78dd228b3a6c5d23f5f2aa8f06d5cca11d3228af40e8af69b3275317f6d54144814021194eca3d40e0b543e08b2bd8d0ae5b4874d3be17225a8820ee86eb71a7d39de2045108666e318b4f7f8d7aaa5e9cea6741145d30f55fc7d3c01a09912f712b2c66e133d3383f341a71c743b925141e1554bc5367b051d64302b999446290935c79f4f6a252dc89cbb3284f590421b91f590f24d518463d05cf962f1f2ac5c30a6ca1f7a4145b29a8ea3c9171176a44394d08ef0ec42ab30c428e4a7ff928ef6732fa19a60a34c718a78c562f6268688cfd41d436b6f21c8fbb7f2aff68553dd6dd2125b5ddaf0c3995c5e8aaea313aa6e7c19c2aba1252bc29a61fee91c6a1659326068fec56340b60b0e39a66c99262cf1fc2ee5e68f433ea2d39b9f07d77ed4bfb12c531e558084867c4ca989477e98de9e385ff11ed245d2d93a1ac947f8af568197b9cce7be128b9251d0aee67e89edba735b2a8997be8df9286520c50a82a134e752f38310df77911b86619448904b83b537882d3ba767c8959f531791791719b78597cbd61376a2babdc4d19826538323d07595b4a572857db1962631e3113ae07b31f562a6085e8315411e2f294b2022cbd201674f8143b70ccbbce682e1bd99afa4a9c29546d462b0b3fdffa585f754d8dcf481d2641786c955641abe6025b5720d7e55ed76482d5dcbd3ef2ea2bcaa869b53c8a4318626137bce0f71c383e2ecf68273913761cfd48753a95e9ea7b41f2eb2bc0c6cd64917390017faa2f9f499e930bc855f6b9d15754e57f25bb9fa749edf5ef133081dcdbdc45050ff0b51d7de3bfe8faddbf4c1d4892d9eb5bac0f90d21870707f6d5cdf929d1aaea7bee22cb5234f89fbaccafb83b73fa522b525ad6862ad312dc13d4c0eec41254231458aaf975e0afa531c5b83318829dae2afbd8617d13283ac350985dd7336a4eae78623e3a014b979bb76bb92d5d82b808345a1a5029936ba13294ba1063cd0d652ba80522f83f791a0d9b6e6bebf26d86e4a966493887ab7e241774fe647a39a9d3f1d37a69b3871b8091b45b0442d99d44eabcf5c14d042fe45901b32093f51c8bcf74d5bcc37ff0ec2d7d3163b7f76725914fbaf292ec0580628ba11a15741d79d4a4e8aeae311f85c0cf118fc492dbc06c771033c476cc2cce5577e5d4cdbd77bbf60d43011e1078d9b83632aa79b3232d4e4d4d807dec721d6d6ec10a1c8d66ac9a703c585652460c1f1cc32184a0f98b096b2f1558581ad9f09ccb5f31129e21aa8e59e9adb5c48cfccf8e02b5cfa3fbc046e737b386fd2dc079a8572eef24354078ab32f21cece1a710b6a290aae65b4267ee535844cb6cf4d577d64076cfd45304c1e94dbb2bf2dd8acbd67f475f3642e073b00dd28def5d59ed6862e20bdfc704bcba53340cd6fdb998f8d434eb57e8b82c46d898bd3611689ec08da949fc1bfe6913d7e8d28a95b817fe6c2f075e3e714cdf87f3397e13a967e0c6b9b55db5b6db2a25cb0581738dba26517c039d0467580b0925d2fa4e972829e9854cdb268219a45742bbed8ac405be8ee0684b783f540a03a3614759ccc06cb1ecfbeebaecf95c6c583e01aad4bc0519c3f33879b2d5e80a276c56bb0af38c6a2bacf4ca3d99b831d45e8a2653034614ed5e43dbf644f850177c18ee7296d9dfab5a310ef1ae07b18a09e4dee30a56693d130a999a4787aab317e1b51168d84ef743e4f821a79ba27185f7162cc8acb2a25d60db2ae0201660b34be54717cc1b88c9b539f94cdc2f30e354cf78c83a5e5fceb526f90bdaef7dee2fe7c50bc45b56b359e473b5cf430a7153a8b40803eb77b3cd45c3ac854efd5e641c1550791b61d27d20e44c1bb10ea7e229a7fcaac6cd1e34dbec6663c184c25126020fe6b01ebf3bcf131982dcccf0517af53a045d3fcd17c7d93d8cd0ea8da5fbd9a6eab77b67be513dd72cf75c5c88d28b8defc5174e405ca12c869afcbd525853b0e44329e86c591ff850c147f502253fbb2460e8d246397e05833d925111e6741f97428f60882c5a0faa1b23a3ab98bff9a265f53cd5977d5046c303cba2be292405bec071ebbed4dcdd1e928c16e7eefb985b114a59868f66a1de1d9529b70fdd13ac8a24b99c23e2fc641b2e9e58f799684b940be8f23b51c5c7e8ef745b745303122ca353f06e7bfdf88944cd1b2547de6b2dea796fab4830a78e76ace820d90aa238bc284ce6d0fc0a30abaae72c165b1dad7a655c1ccb1d75f6cc7ad26a2fb12126e98f6cfcabaf152388cd0385c97d7a8dc2ba7625eb1de5b08375810a09c8940a4094b2d17ddce66181796e1e8e9370c5e156fd19c98f918ab6d3f64284291be2cc0db6254b02aecef4ff723d2522d8db15d639f60bcde3ccc7de53e336a9b00e6e46626e1d87f9b8cf39a3bf5c7bd977bcd624f54dbe5dafb20cf309b206c7463b90e36ebda3b6903e9adb88b93b8d0e5808797dd1c97566fb9b5e790189d8e1a0672fdd76e0775fffb04a9f40df40ef53ba41a9ee1ce61a89211c8d538e368f457adfd2e18fc88ebc1604583c7a04b8cb5edde094029c78c394165b76e329924dc7c52eaac4bfa1fd842f51dd153aaed6744b6b0b054c4dedccd1f05c43609341d425182b81a9e22186a3b54e422e48bae646f86aed4eeb79ce52006ead455f68e90d7f0d0c4dd25e70e022247bbba1273aa11c171164b781f57ce5e464993616e35200ecadbd52c9669db975cd595d68f9948b16b4981ffc16ef5aec66d5edb71e8ce2043447d7b3771db399590318c008e9b75d0c61824efb455f403dfc1b49e49cbfc499169910b47d73f56c0299848cac2c02d8b18be0ab80cdb58dd7843423aa553784307235029813b30693b8290587c94c02360834da0c3d304d5c23ef7b3a2698bf2aa6f0edd768bdf12746e368b73dc1bcb4e00ed1ac70169401408cd9fd3b7c527716139e5e01aa652c02f222ff22670c60636206edfb0698924e611c1d711837a8271bba242969322904185c5af87d8baf1be86a591a79eeeb3ac7b7b4a3858745eeb744e68928b39845ba9450003b2ab8cdebdc793fe3556bb06c0c3bcc0b391299bd8f8d1fc5248440fb76f7e4dec07bddfd4e29c2cd1b3d0208fcd090edc2ec72d55946ed1efc6c8ac740037bc5e88299cc0c83b49a2a09691771ded29fb8b8faf6915208e61c8224f7d65eb267faa4c38243654343fba5e4a6e903e1832b7ba7de71c27921e51ef84e1fcbf56e7dc8151d50978c89cf8ee9ecc7f402a02b6a78b4ebfcff6ab8addaca7185d4ff3749d0a3466a3f37352452c0614b785c1323cb098423080f085dcdf14debcfcd351ca53e0bbea8d01871d5b8be3b56ae78528e7f6b14112964ab9efb70167d96c1f60557643e3ace611887450356dc2cf3deab9731043052ebe5701e87c70d9c8358874a1056203639a17ef1f76d2534cade3ad76ac78179d94a308deac0741d797a1b05e4a500d2a740caa15fe4c029a11d7e8407dc72e8afde2b12d1e2975e15a6edce20fd5acbdea9ec848af8d854f3084f608a0cbfea85610a0cf94c7f8a628b417dd46a18116772df3682c7d20c1f3c86f91187ea34ad9257ad93f5d5beb7eb28fd7fe9383711a1a1a6512b60c16b760016ede62edd642063bb84b634b08bfe3594b912d3e277deb16afbac121f0e1332afd4dac0ded1108595d95271553c4508961c1e6a764d0b5c1748b4e9e82ceb0a4b52a9daea22606cbb199467ca3a02185431f5646419c2db61dd2a64432c027871ef1e41cf491ed456a057578d18d1fd40d0c29f56adf501231ed700b22c142876e16b0ce60cb3a66449fa3d9949ae82ba6ba784bb123ac6409c2957a4a2d76bed8a68db82674885088aae4c23a54aeb99e0eb6922e5b81807b440e6adb3c8ef310b002ca896fc8fbfd3c96be581d9d5b4fa00452c2428b78fda571b8881896c47b89dcffbb23f58e03912cd9517ca16ce53f8eeb5250c81fefa30d107dd22c1ae3a624c87b51c581d004dbfe1cdc3f812b14173a79bf9684a9944b97d91da0410a081cca28593cb724b890ad4fedec568343e480787bffce81fe020718cf8c29d9f337180c01e0def91c5a846e3e9cb0ff1431630121eca22ffbfb2158a2afe5d8f7fb3763843c917e093c1eb5e21a9ddd0febf42f51235188624f875c12901ec2c5d28ddbac69b27b433dadbfc95ae6bbfff7f251e848c7c3f9ecffd3a1aa392e20450d4352923b85c6c896bb4e11942dbf3eab1094a3b9f389b35da6c9dce653eb55f1fbf0a10ffdd61722825055e344731ba099c52b0169937b61f30fed061a7ecb857b791a6bdb385c4204fa875d22bd2e66063ac0b6cc3b40fecd28e8b380410fc357d5939dac27152d38910e9cbbfd6045b2b893f51bc98033d581acfa133f32aed48b628dc3aaf1262b8f2d51175618ae9632cc162f9b2cf28470d2e38c1debfefc1a4675a604e4141219c72921a1731fd3879fce3997a6eaa88cedf095665ad02787e48b116a11b2b30243b4b00d2fdd70c237dd91e243e303933f3fe85ed76ec2800b92abccaeb5f53ad08c448e51b6a3bf9691d3aa7cb80f518937d46be66218c349a852ad449f5eb6904ae4e3222bddbd004c3c8c0a92a0a34f5f9fbf7761ba22ca9ef4daa8b85dd64e399269886bf9d8bcddda370280fe79ec8bda6142cbea7c55a9fbf39d29548e7ae1c49feacf3619bce2b27e969a4e8b49b43294ffc85b3d21b2f9ed790da4a00fa614b214c98d284d6502e835410afa1434532ae8cff2c6c99e6394abcfb766b088236675a4bb799c05a70bf247e40cbfa559159cff23a3b7767608bfb1613ab0121f3fd9229552b1192b71d56e3ee96cde29e082d97c9c99c7f4a40967e882bebc7c04ed0a73ce299fa39380a1c703125bc7c89f8cf2c46f291f1a98b0fe101b2bb2145e6fcbe32372e7fe125c2cfa1bf50cf0298ca811a85298d180ff83355da6f398c7882b0fd12ce1cdcc08439ab3773d0493c42a6fa0dc9ef8b747a1d3a977ce95ef22ef9fe48ab7899094b338d0472882b5b56f99ecec18ee0ed16ff3a49dc5a9053ed5298ddb0e8b2f8d5aedb07765f3e2bd43cb861a9d197c4e227b4198b2a930481fc76bf1af92fc145b493fff3e8596e32979326285d25b2f203e15d3cc336e4a10e1fd4de16d63a27b6221725fc849b574b09d9f93534af69b918878491c2ac17da8d7ba71b067a2eb72c57839269ef3b2d66965d43b238e5277b0ee599cf10367f48c86642816eaeda15922e9f15b91c05d53f6f5c423a153cde0e402efdc336c9f0399e213a72be8bc5251bd2bbf7a474a53a4d398bd248f68b90add6feee7efd12843fe9e7d82ba7a632b9558dfb0a0559f5f9bbb98189402b346c20e8dd786f11c5a9ebf2b2ea60bf5fdf9d9b05e4124a7a012542fc1c0c2c495cbe65c8321c051a281c94e29214a6b1e5590c653c260b2956a59e4f87053baab0f5d7298b57068bd9280432b09880e79edeaa2d552b0a2ec4e136dd578ad038c1939ddfb9b3cf742d0ab112037d30f061fc9040e066646a16c21ef7e1c74e70491e26d222420ce062767b3dd450d60bea00cf44af46fbcc6ff368e55afe0d78806e898cd7db31df87316559f9b4f54fdd66e34c66b58bb3e0a509e57e6955fa64967ccddbb87246449210cb58911fba8cc882b91a0b1a2aa7290f06c3d4d931704de197c7fb78714160c29d307a80189e90afc0a1338abd4ab67ae65dfcf1b8d5be020c2733b5ce9c9a0c2e6adeffb25b346ac7d6e6c07c75c6b84459c8ea98aeabfb8d61dd7e1db07bc5ac7e7c0f84bb4af4fe10e4e4ac2acc5e9b51d3e619c85df91275650967c471dc64f4ac8f84a5284c1e653eb732629f4823124f98bf376f39d43e69e74b212e6f2f8d80732df7a614827adb113971f9b461fdd0eb514c21123c5bee543f0bd8155c91beacfe71f3db6aa35618c59a204afc25ac675060db2838afbf758627a32cba511d05e4d45b6aa053c98983018be78b5519fb7eb4e6081e9ec513392d9492d1c2221fe90da3ef417ef50734d9031acff194b48c8a4451fc7fed99ef4a1486a20ef835a29e6e523db92db3652a3fec928e44c7beae54bf839fa968da84b2e0d913ba9762ce5ab905fe0fad7a1d57a1038767da673af72eb6b19a26c0db6f442b0bcd53c5736ee66579e6d5a175c385e001e349f22cedc41d1d5a065933cf810d1d0d6ead0aa05e8183fd2656dde7f6f9e3cf4b54aec60eeecc9b7e467398cf05094da270c4b0c1e7eb659bf4e9028b196cd5607dd28812db3009b24a2f519207fbd6d5e956e16ba9054d0bdf7ed0c89e7752ee8e16ec1234a62345ad7c8f348306aedd21b7133653da865fa7ec8e83a424c7fbc805b50d7530ff5e9bc90d2644a0afb3055b3b190c52ace18c79d458ce01dd7d4db40aa408782d20b8558293f1e333e0b4e8f63fd3b31e2ad55351a6f887edd7173dcf4b2e7c215b7cc8bb8ed5a7ac97223818efcad4707b9f647ad8499411049b86ca55858522c2f869d21d5651cef4aabc6e49ffa4702e87462ea8651f3bddebb874cafa4bb6d0fc75da4476c7c3ffa95ae2c1975d92b42ad01bee938e774b80278da41eb2ea083bf3fec851aeb54c9a9174cdac335bb70c6c61059e969a4ce23599a2d34136ab1ce0fd2a5188c1ac69b1c91008357a45e3bd44dc725b0d8e461e5728d97fc5cb4b2a59e964d92fd2a147b7f6665ca90688c36952d5a83e3d23f41d11bb2abb58b203ae30c20f38ce52981994d1eeacbf7217976fd66c2e7c5ad1c2ba3059af47136f67049e9c4bce8a3a4c0f6e04bb8202a914baaccae9b03dba757c3fb707f84ca01ff6a1fac2af6721a556e032d3339f1d58a6c0d42b64897fb39b5640c6690fab0cbe09c1fc2c068d6cc6eac74a85383f2c4bbb42bd4fc5866768290adba0bb73f2d3d418a2361011f52695aff1669f59091c457e310b100780b4eea15951b391730e528dd107caca490b6e78137fbd7448f1b0e7ec203ff452cbebedfe813dbd15f781ad52aeaf6d2d1ec30957b8dd257128e459dbf765cdd98eaa91ef67c6c6b74471504fbb258cf27ba4f5ac1cf3be7a5106fc218bcbace2dd4f81736b1ffe4f4b4fc681a3fe106b3a847979298a6e400844bd0fffa46cc401f7107519c25ed18fa3926e2cdf2b23b4d6b72df2f5b8e68c6e3e79048252bf3fe878f76e55af2bfb66421e29a6c7ed94472ef562cb125029fdee923054f46e7af43d65a3c4e0a94a5ef066e4487017e1e5633620b6bb865a7169ad4d302376ca860be7f67cc2607a78e7c89d34e5804eb00a490073ee9885a9a046576307ad32a1dd74941d033626ebdc8d496607b5b8c5f2e19a985fee631beab12b3bdd298f18d90aae436b388da4a9382bd97434bcb25e1d9101c582b017dd1774ae2a5086e2a995174c41fad7d25ab6a735ac4458bc1539010b5bb9269ecc76413d97d9b2b87078291e328f76faa4ac54ab6f19773377b6759916be7fcd00ddf6c9762fc438343bcf954f539af8b61a932fbbbbf7b0f1d6e5a82988330e6b11d82762e9568e3204f0756e5b589bad6be4f84d35980d51e6dd1756bf72f0428a11807cd5a4e59aaa8083375f339961e58ca878c43f56bcb89e13aa3a4496a007beed56200a065f8c29f32960058fa82ebbc4add744ded56b367f7b2f691b3c4c3a2310a15b987c59141b0ec6d0eb7364d44608410b7c2b33d10857a2b6122f8c3993b2bbddc9b854761e8dcb72a83c6ebdfbb7d625445227b9f3b7102415cba15995c20f65e7d0c210d8158d0a7795729dc95182171ffbfd50563da4e3ed1ad06cee1090a2ab3ee94ec8f2de4b349647991306e4b12b7110c7ff50be62cd9185369d1d1c40e725ecd7c6bba4b834ede26d61db9d5edf762a65a002a917022bac9ee5d8db2f2f6684781d3fbb9f7bdcb37c7510cc1e77b9a192947e64153ba8df0ad9df9061d945d4526a52ad2ec01d3df2a9045bb6c1fcb1b57df7f6536a3b0648fc749323bde526de85c53f3ece7739dd63ad26924736ffa94d5f3cbc02f6f892a926c158f0313385b73e1b68e9fd1864834f2a9de4c0b5820e08248dd413b2959ddb6bdbd5867493983bc28c45a1a50a653100fa23544dcb7ada4bf8b2520d72e7efd67490e55bdaf844691c698d50b58e90ef474acbc7579fb97a6be68d57eb0b053fcd84383b1754e946d579d91be3902ec3be947bba656312f60d93365bde7dc016007bf8dbc2c57d708906855ffcd828c4d0e6f9b4468982ee4c1211f547797a23a9ca22902fd3107a2bd3464f44763bd00b0212597af6266f0fa9501b7439b2725c150df83490eff29ff278f5fde4f21287dfe133db3018e3ae5cac5184cad76201df0f897a2ed49d0144f88131ad8899fbb4ad8271a90aeb68db9bdcd535a1fc7587abe364b01eff0fec8e14075d6c1cda66ec6104785e74d34c343f3413b2cf635032450a6ef745b069f1656d816eb3d83f848cdf0f8482bc6204daa1ba2b9ca58d8c86cfeeed6a970f14076efd886aa435e7426ad30637eaf3ce7e300b85417b2d3b758ac6d5d21095448e7dba89451008a41aae4297099ecb933fbf667708c12b3516a91840fe7d88c59b716e478217a520f5f61f4ddf44d716d8d3034b9679ec4fe271c53ef070f9d78ae88867e3efc12ea7d382622532384cdabb3e9d8c276d88ae67f6e49c79d5e6a545f0eca281ae77e0c049aa273f53c864fb007d6e8e30aa433add674bdbc2f32dec8c54b76d10f57193548c85b687e80db65f9c23f0b17a6f90f49ca07741298e6d5440685769fc086a313a19145d9cf12c88be4d8bdd2952bdaf5ae88c09aeff168023bd547dd2fb50e56eeb0b0ddc41ded7fe6d62feee59f82789f7ad86494fd250cceba02e0b21384b6e61bca2c255ed5aef2758711f76fb7edd03536514f357904b0849ae065b5af3933b2e61bc915fece7fa001f5313afd29a657460fbeee5201112eb3cbc795147f3ab9dba4e573f0ae286d8b1cdb5490e2efcc253ca498965747d8b0fd570ab13b792a9be8b8ee4f1260294797c3a409cbb35c3d11cc647e08cacae714203122fca08bf43d1218291bb42e64a5621dcf0b563617715f30b8f3d37856a5f058c5560c53dc6bbbf27ad376034a7a69f1fddec00a5056ec71e94054f50841bebef1d8f74e6b3142341ed5efedeb1b8f4a5344ee4707c17f4657a97625420f4892befb5e94295c9c926343e19b6e867151901a9bbd4d67fd5a6de5e5bd386b425a441131e22a5a0b46f83e1524d3e20b5a24b0b62d88b8a5c34d219fd4ebd5b5a40c3d33023a41072c6ca4955a4fa933dd8611dad74b3f4c347123956240ac6fbb9f69576adc63804a66600d3c9b081ebaaa0f6c8fbd7737744806227305fe18d44d357f1cf51ddcac622ba32cd9b4c53bd5415bab4d730c494b600d96b252d597a7d26d915144438481091b762f6599b889ce504cc6345279a6fed1525d20008f8b4028dbccb36a28e272c955de70f4668232b83e25eef1df459100d60e5088cff0ad67b7d652d6e3467ad276186598333268c1e7d4971f42bd0f0f8fa0c9093624e7394f2f97ec76a40fc0252440c8169de1b219d572adfbe7e6f6aa9626060a7a630604c491143286fe7c14f5be7f2e9cbbd2f18d284e3989ce864663e3f3cf66139940e179175d64aea2926ce8dadbb1eb09d9c49733b887a67e321841349d9ac3ea5bb901d2a7b92a5687b89abb4c766a63673f218d82a75cb00257f6acfc8558cee7fa935ff521f9fe803575769bb3b5dcbc1cff31d51209da10a46fb229dbf32510a03531428acd7c8143976eb47da9629e913afec438d269e492cc023f4f193364208ca4ad71806346c867fe1a5ab083af6c36f10478d40c772ffd4534c43c5de60547190ea4685b637824898130f621bd20bc1ba49a809efad580bebaf0ebb18292e6ea11847ab0ee40cfa969541c3adf3efe85f978ba5f79088423cb813c449fcf5fab4e12feccf08ace04455ab2a0d774433fd0f6c6674c90515e6b5183cfe08078ae814eb1af4e661c446446aa5fe42d1101879959384b50fc26f4c303c80a03234145eb59a0144a1af8bde6ec6d21f8b404bce2ddd3be106b63a916bc669bc7bc7259cdbaeb6c04bfb1dcb708375b3dc4c7192c8c00c6926d114a3d8ff6a6b3c1cad24d9fa79396dbb4dbd5a45bf70d239a7904fa0b74dcccd8493a89e952e4dbda74c660fa47cb48b8dd4eff5cdba19dd38a1f21c940939d84145d99d81b99e33ebce319d70d1ced738095b14a21ccb3917a98c44d75e55347e7f2aea92f9fc4ffe5fe149e84a1d0242428a1a855ef9948fb2d91ddc23a17a8d6bf3f50c1f26b7d509108e0fcdb9db3f1ebc98039eadb018725c78d85a2d86b88ac84dd73f4dc8999f8a110864e8bacce42c125d88a1f8801d4dd72e375fd6a541a8d148b4114dde8979215d827086a8ff5796c67d36a2fdf2cdc038e077b2d8fb71c1b205419699343cb38d437326a411ed412664772e481547133af8b0af0cdd479bc56a6fd49d7ee56d510c365ccab86ff9b91b02f5ddb668b0f6d46648a2f511c4709b3ab0223460fa5b5c78487ff521b6e6b221178bf88d6fd30d72ff8259c14fc9dea72fda697a37e4f985ed08650521568ae632b5928897334ad14310ac3cc57f723b5a13ce3abb2e9bdf75403e6c1564ecf8c772efefffd6b0317f56241a0f77e87b3e8620989959b6fd7fb10c1c80a386d7436b099c37185dd484bdc2631870ec61156e6c9a9acfc8ca68c30332cfed1a2c1ab73f03083e986b32ba060634f3aa1b0c1e6fa10701dbaf17a48e4a6dfca523fe6cae356bb24814beb860a78234fa1dd8b5f3606c73aa68a8289fd5e369d78c06328de64be9af1e6a8d7ad4de123449596219a8da7794ba2f24132013d07bf5b44e5b9fed018e0673854a052d42136c641262744ab4e65274a082b2d85f1489f6982a88eef9ba2b16dea26a9e6e45e9a599fcdc964ab8712e3ee37b5fca539a2381e428aeccba5d2339912d3b80882c6a8552e5716d0525c649ac6f7780c2333ee564c9cdb5c16bb7fd8c1674f88a88d76f9889c0152ef0b34663ce665a3c9fe8bb79afd1d9a2f9c246735604174edd6fbe4383349a3d84120485c631b47b46f5d2b965a8b230a2902a3132546ed08c658a3c01d9f0ba639a6c68af14d0440ff9b3da6477541fb4474a04baaf9209eeb364d730a14662114da6854a6cac7424c00fbdf55652e518083a3b20cb2fc384e4036b6e72d79021369864dbdd20d4d8fb048cd62daab8407ce527d1b727a6b79b0eaf814abe30ad28216a8d3971b74671137d27fc7fe0778e9c62592d537904c943c9235d2cd5a1802ad678df6be5c6fe8814f807da530856e5424f980df30d35ef5787cdabf7a69cf098626af64918ed4e9c6b2a1385702abb278d5c70b034eb71c8d790dba70b5407a69fe17de57888137d7b09fe181e2eec1f21ea9892cc6762ddd57b2c5188b2bd500e64f28ecc515ad6233e5bb16c3fcad5694726d7922191f75fbc94ace0419d1f068a43ecdbc0836f7a0022b7de70eba368c73570b57b144277b423b9b91a9c909e7a4c1d9813095a3a994d5135893b38bc77d5f3d579b042e80d023bed607167c89705369183dad32e193391fcead88e3f77d56bab28c961728ad7e083113b7b9cf24a1891f9e1fc6f1637778abaaa9051c66044cb0d9eb111077030c1d352e15cf26cf758b833eef2f1785b7132fdf0c1504b92e617216420a6e10654b1342067208c17b06cfea61d6bb7d31827a91f265efb3e681eda7f0f0b08809117bfe6d8fa94f44cc746e2ea6c28c24836732b471086e6f346f38ac7315716644c1b0d2c7664b22130e2e740a9ec808c56b0c361281aa16c37a1fddada140bb00d0e933d53f44640464e3df5655f3be4f5d67f2181555ece9a94a0defa5ae90d4941b651e35b5a915fe77df521fbab83238ddda2527bb25ce00e4358692bd09504838a6207b3ca41df670c564b04059e3e7e7b2e3ff91df0c0385c3ba5669c7f67d2aa606f80345c40b23a374379de32bae35ed4bd185a4c0f94185c1fceb427a8fc2b27281abe29d7dd3aca34c6524585b5568a99f4713d7ca17cf01828d9bd835433761a83bfc4d166629a4cff750014d52c188f9025bb3f0a5d56f1ef6343eb24f800fcf2430eb08e91c57ce8172068edb01b5371187cad95013eacee66b535334824fe8fee89826d91e1157579f11bc1c511a681ff54cb795110e06926dddc4a3080d842efb06a679104753a10e8eb0db72f65ccade2b16dca612cb8ab08cf9b64f688b9c9b88f6a68d83560029b4aff0b047dae7fbb1ba216043a529db4e8c5d4ee1ec9e44f02b4a163eaf81526d7364e213977acf5aa9b9a9abcbf8b4bf330db2f2d65e06c35bad1d136d331a6b3e83b06af5011596805c3acbf59cdec7c74822cdba94fc754cbac2be499e0bb1985d6852efd7b983af54cf530e38bba56918caef3779e5f7e449d0b2eeead7d474b4d91bf390a8b38812bebcf70604096e651a30469497953ae9594f05638783ead67664b3ad5a45b13c87557c99489f1216301d1a87371bcdec2d671985d9e56457ea6a1ff6149d3929dad46a7211ae22e1e05d17ce729693d8c1ae75abcc7e7c1fa7808488035555e5438be954aa94ba658325d0b8852f36561f64df4d6957f832891a6c22404b9bb6c5b0a7002b21a1ecf01b19d15fcef124296a80852be83db90d87cfe5638d8b5087f3a5f60871660e3403e6778520a521cd51a4e75b8a553797d56b4131cc3f4ab491af9db77c26709bdac58fe57d5e31dc33e5be17b6ac5e00bacea8b4080640d51f34df3cef0b5efc2ab9a4db7f8f3fe1aa50d4f90108df586b16671d62b9e6d5b36f07d1082567cfe62c3a7423a47cafd2152dd442bb8edd7112f92a3a8d06bbf862b3d041f4b1af0ada37c016c83ab37a0920bdf0cd348703863ddf5283795af7fd9eea0be224e8d0563432c3e36023a8248b9a6a170bccdb1b4afd3229cb435b040a73dcb3c44eb6c15307cb2fc547d8373f21eb120461fad72e33ce701825b90caa341eb80e5bc4075f1096f0146861db9c86ff7aa18271dd258d7e61ea59e7eac09451fe8effe8de7728442956b716fe6579c925a3f63596e2a7a8073a981864c2b30763ce374b5bdfe782fd548fc39549b14aefa9c4e96a6d8da46023e8e8c8e328138a1cfcf7bd97964bbd1fc21057c079d3091685bdb687f0707281a04600d700b7807ba142860982121582ea38b0de9e07359991a691a68163d8081ef74cc2516de827fe7c16582bb7e247c8aad53dde3dc367f9d4405f242d361753ce88aa80e36417687416fe365650487aa5c794710bea747bfb2bbdc02b452f91af63541cdaf40d921cc4ab1908d7c0ecaeaab1b9133bbeb685ea1972886207addca0877e22c9b25c9554802ff1b34ec4bee5a8bc6e7849aa5e2b526e1588a2deafc5bea19681893113db6bcccc7b7116d72cbcee55bd3cd7ea19ca37fba93fbee6506de8affad9307f1a9c6e5e2b684610a5942de7a9e81ea461a4bc2936586b33b290a3bbae64028b46f95766cd62f82c508592f2fb63d3641cfc2d7ddc8d621e01becf8345ff7bbd9b6be1c78ee5ade8408ad0c0b0182e61596063fe3032924c8fc9f4b4c6b8ccc31f057bf0b022da8738fe845dee41942bad01ba89d02cbcb5cf80fc40b4b898d9bff915b57f60e47f6d86f3e36033954cedc4c4f855a0bad457d7f45fa894fdd159bc310654f23f64303050c0c06d5a08c5238757b0e1f9856d2b1ecd3042adcaf18265fbee9621bdba4bdad3314e93541134d873ef378e559e126391b7d12553418ec885b1902530aaa828e3df97b574d40b8f67e273bd9496d8f4a9fee811ab825aaca1a9320e5a0b15db5453a934c1a287dd30656647dfac409bda1bdb36a5c43a3470ccbadb4054b8a366348e3a2e68ccd7c848e697805d7f109bfe60d97f5e2fca574506df2b92fe9c1d6f1f892944a5fecd48236f6639515a0e75b25d4e818bafc59e36d9f10a8f87dd7060432d5098ad7fdf43d4ac528a6c547d3359b03e7ae1106131617287712d5f4f49251cdbbc182238dcacf0e95cadb128dea04841f6ed17af6c15100b4761e79eb4b1b838f6ca551c7cad1b3a10b752c2931b90284fe75bc200cb960bebad92e4baa7295eb7ff5d353d990a58ecd85c3e92a63a838fe1cdaff693ff5b0190cce19838d285024a2758111cdcdd8a3ce41fa0314cae1da60992679951c672d16181eeeb806f2dcbb8f43ffd211c118bfbb2305ed299559a9e28fab409e93d6152821f903eb678ddaf1407ff930273ecc1dd8a55f29d232192a1a88f073c94cdc4cff2d21dacfc4e2720d2a9fee9e5947468a99d594ccc7548192deaf0dd1c8a52237243c78a38447750ebacdc1dc3454937186d74de6d129ec1aadbbdf2a1c90ad7e36c576ae64951ecfe7da1703cbe73cad24c52940bf63d6eb3bac95dd15f4b5f8cfd8c3ba0dbeb66c3f7814d93021019815f73d3036548bc89beee836b47b22949ce00e05c25e3b023c3eefc7082ac3f7a4a72dda989247cccf71e2182ac7e7b70fee55d03038fd791e65f0f194d90b06553f14fc15d32457ed39d0253d561e55d6222828dd3164d0018ac600fa9f168612a70f52ca262752a64722dddf234f653dee762f80897aad018cb09c756861a14eaf6b64e26f41e089e1a723d347f0a2d10316e486826fb9b1a30420316863e58997296867016119f67148712d816a27d4bb1b1e963676b1b273828cb1fa9ae75955b9088ae3f3b9922a770d5059c9fa748a603263d57e8c1f6993d7ddce58c50fd4824f454ff093086c70ffd935f78c8320a2b24087c5d7f51bb8089ce8a146cde102584ac20e4d113168842c7c403781fc495042c280883de640fc75582adb4be4bff539da5bf0787c35676df1930119b82b7210a78dbee8a0002be4fe6bbb71c95641b1edeb8462f756261894891d6e8f246d24ca47dbfd5228b15aaac624f3232077c6ec45461d76983500da9e0a9211a694e9061494423de1f3559da213e118cecf8d8ce79b982d92782b579e10ceccbc3a28044543b58c44aed7eb07929008fce3afa7958a3cc8499e428210d25b1e78e69bbe3df67cc4edcbe171d14a35c8075714bea7566199b7aec713be68a61f3b740ce06a67d1fa955b075f077a3c0bb0a7a32f8e5828aa90638c342649591f36b3f706fe818624aab3bcc6e2cd6425a36d7db4871a80126f15675186cc85eb82a0e3ca8e5f4097a2de85791f8ce788c2db293924716b23de0572b0195290a5a172dc74720e8f37b44bb404db7c537952b0cd6a4b66cf92503f84b02afe19ed7d533f4174a53927d2d2f7efff4ad65f5a4817748fcd035c2121bf729f28dc002817b78c16a0ea82086bb626cf8be5280bdfa69f879f2c9320d962b5e65fe5d1778035d06cff3f37d1e75036bb311cb318fd520d607c780973a13fc20600b37c7dd23d488634637c3501395ef9ac383f28d21e2dad0431ae5bab0728b33b072d967e0ed6772680d04b9ef60b4db350377e3098d03581e72ebf8c802f009a151d9928e15f5af0263f835ee52a2804c6ff42329778bd7ca429063f5962ce70434cef3bc2ffd724b20728f0920c04c163999e1fc2448b249d328bf73cc54937a6dfeecb740545b8e74cfa0fa60c5d03eef957fcd95394e4beed5d455cdf9307741620898906e49cdc7e2c55bd6423c647dc800352a5f8709f2759a5ce47e9aa45e7dfac9a4287e28bc341e417193d9d98aff3cc70d69f404a309eef6dbe84fb594eea40c8db6aec0657e065114313e88d95f5dab03cf374cf74a39d6acbcdf4f3f06d2e1418af75d188a9df9ccb3cc5daa6ca5e549da87d919248a0b91d8dd42435eb4d3c28b73ca99cc51453be669cd9aadd42eb15972e879bbb3621f96412d61f85702f9c9ebdc40d0dbff10adbe7c8dd579314dfdf05caba14345e9b25a03bc4f1e382051c700283cca9dee9c8a58af6da47bc7a7c1f757a6d0aac2eb88f0b58d86ba767636fc29e9076a169e902e6468898a7341337de42f327e32b9fa9c06accc65aa9f36fdddc2528e95afe264e9348152e6b3835458b9d1f5a5255cc7ee53592d57cb021391354e96b423e6e80c0d711e0d8ab300b60daa356eace164af932d3edb9785954e9f5eeb94c012ca1c1e5e8dfd307906db13db01467ecfb84c6ecc504fc37b7b990193827eafc3e839aea9de1cf7dbc63f9878705133b325a505644b305ef51d4cda17c9a3e027f675bd7f4065e20f9199549318e1990b93286d9ebdd797f9bc3639431c910753327659fc19f80548f66ec0c44757c7580cbf973e20f03c690f889cd8228e0a594e41fb1ee397db08316744da01f6b0173d719802622100675cf905384e58f508f1cdbd2ab70015fde6d08d4b75f608ed04d4493305504c2b86934c16b25d25151e497cd0cc5fc027536ccad09b05fdca7cc8128a73f2969a6479fb9495a6685692a311ebf9f5b5ebf21a57f7b3f6f0034466716ce571f6107f2381e9be0fbb2de3e2c3ac3489943a1deca793f8f0ad23d88990aa79dae10b5ba95c7f3edd8707817b9a3af4a34b491415cbc2571c8879e9393fb505f2d0018a42dcb9b9c7bcb6f9b4ca912e6db72e6e935422a8d80fe19c857477db6e9a0fc115d46980ef07d8df8136487b5965a15421d1928c40cd379a589c483701c46938747aadd96327c2135cbb580db9b87f8193c064f8cf05da5f730626890f2df65c5cbc2819d70b638e06471c0ee081f4ba1fbfe501aca51cf044e8917023998dfb76eb24a115e477a7511c4e29aff863fa2ccc19a65d7d68a58992ed82c5e695ef6f58c92099659947b6c016daab9d20c01ed236c47d60b0b8b03956897e1153cb385708014d4e7fdf0ead8d2f26e3fac7123cbc0e2f3b013304168cd850932ce1d0c4a7f9d71cb1936dc839b0742bbc18d06f6c42155f0f606fc7f5f454181cd537f2ecc3020ff23bdf3fac8b06a20fd4e8522a5d04449c3a9a5423feb43519709588f1f188bb5cf3b2855dd63ad128a4470a53fc7996a52d5566e9f39742823303ebb4d5a7113faff6b9c35bed0a157e88269bf37da769e0eb7d3a1b973e0312c1ff688d3fbae13e4cef07e373c02673ef5417a73d0b916393a2eb00eb815bdba088ce06d07681b9a82f2f2391c58c8c6d2129da44ba2afaa730148420f31d522bf17e32d67f3724da79e5fbb7e0f6865cb8de5888d8519810823c8a0b556c9e5f6a7c244372c2e41240857989fc92f85f47e7f5b4de86f451bb0195961e033be7700cc7be5ff3f1e53752037c1cc02a82a8011580ecdab80fe1689446de77b7fd756464d5f44afb37eba7ebd970d1e3d41645965c493ecd9134d892bcb40e3503b651a54dbb1ea94483ba38d47f8656fcdac6d1b7706eaeec844e13cea65eadf4bee60691262c3709cc908718556f9f997b33b19be513ef085bb538deecb9947755bdfe03025c9331a62c6a019056e82db4ac046ad5dc29f98e67bca4b3fd0ad946453c82ad38a855a13af7d1f51f07d55523380f0a51237372cc9b2a75789a2a10175ea28b472756c80a50e4ae3a5bcf0fb02cbbfc517e1d0eabc57beb730149cdbc97b8621e0b3c6d08ee855426da6b7034550c6414dc50065a2b9194820cd55eab24ea40b167b90565cdfc7fcfe4d35b195bba2a6d8f1a90eac01635d32106f3619f3f6e32fa6899c62b2c88db9349327a0b91f23a95095c3b5bda65eb71ecd63e919c93afb6c52355bca91b6a86f6824c67313bfbed5de7f78810c9253f302484b4017070b7febcee20fdbf0d67f6648b14a19d2c8f743e2e71ab1e3e9a0e3e459ba2223960e5581f852a095c2c85e40887c0fad86125014b7d5699e6fc5147bf8c028ff7ea940ce11adf03b856b3b5542f214e7c7e5f8e844eb6cba0fe593d7cef6b35d94a8df9198521ecb2fa0b7dcb77d51d31930ea53b3e658915e80f86439c714d1fd7581c19cc424ee1fecf72d41ad36e58131db0522cd0c30d3aca0d4f6029e8ffbf83899302920f70c294431c3541aef575dab920b5b814925efca721999df4bb09bd62af08faf90e8ec277585b2c9f693c081d9372792fc7eac4426ad6db0b171a5e4bc5aa57b9a485f5b2f02eb69e9b106e6b0764a8a3d0bf5239e12d6067e615754e93dc5a68683d80497bf7e347f2af5f89b268b3b8fd4479579c39ef126757e5ddad6af2af45144db719360dcddff38e446b28c0ae7af845ff9d81822968b556b79ca9e47104197bc8525e253f9e9af92b89a21b7938093fb85091f8c3e359e6aaf42dabc41975e80192e1b94883457ff60556742293865f796869dbd67c9c9e2ed283ded9fbd7c5239cb144a9ae9213b0c6d67ab5900c5f15edf0facd6fdb897956d7e0d15a68a79878845fdf467410563d356965a61e29c869a7d4cea1a3a7706be7e21227cc4f9147c3a8904d28730a5535db60adac81ce0aac32d16058804235265c5e89e68e113d4ddec569ce23ae20ff171211af02e4523fb3b7b197845526966e8274ad5cee30ebf4d839c212421d1fa415188bf63a2caaa2fcb8b68cd5c1e948a07bfe898b6532bb32ba5913323fd4c7e4e0f306a61ab59cc0f6986a49ee726691b8b1f83ce472db30478596b400c46717b8fda46c10a9836e86591f842ae08a3b3d3582ff42798b576040d29379bba63e3a843ca347234237c10313a1197d4a3f6c8208e13f3959321157f257a0dba6c6faaae50e5bd5037bd8f6b24c4b3db3354d88c5c1bb8bd4049dd44bbaedba02c5222c3502d7dcaf93e286f5efabed0f8a39f29dd1baf6746df2d600a4d148eb205c42c8ca903087b28edf8b3ea51189f7eda6aef681445344ceb6b948bc6aa3ac9909c89d9260220ed552db43f96bee8254e00f24e44d216219c56892dc0a37bb6e85524a70a2670098ddbbd1593010aba01ce706d527211380ed062111e375688017ded57078604285d0368b0ab9b376b3749a23807f22d408e7cea1c76b533bdcee8b8899688ba02b02a4b8ef56f2aa4de998d416dc3d9962b570ceaa1d500179ff78a31730e257093e9e409ad75084113fa3a1fd60b100bb2264b9dddded57dd954e73a4c78bb7b2be2f8107b7f311308ee6d5e57b600943a4cb23da06fbe506d65648c8c50d6e4151a08fb70f10f4fcb462425e044e3a2844475abdb252698c4f525e37ca880d85c6eea9de9af6bb94be928709b531e832fd628e88437cef00a3c74d1fd940fb5d4de1aa2786fc0cb0d88e4188641e2fea418d7f3c36bdab059041b0ccd506aea7cabcee1e53f7e4776b09425690ed39b5ecc1e8abc474ee3d6a88527298688a52fdba8c689980443ad183bae904686c14a1c6a8694e6dd2e39d67c3f77d162e55679d3c1c3816893e8cc78ccfffea36bea93a0b51990bc803a917fbdad14704b687810b06f63c654335dda9220966dad14fec9e4581129a0a5351373136cf40ba7a2fa75e7371f4c8b8ef1f7b217a71e94d1a595a5ec492a3c3c45e9ad7d36fbb87cfa44b1107fe371b9f26a05e13696b762cedea3853fe1699bc307898b372f12658ccc6aab80f90efa55c55b49b5adab49794cd2d468fd9f3bf3cc9ae5600e0cf0c90c7bee60e65102d61861638b02870529aa8ed5e34ce70cdfaa7171490144605c15aa980688de16d2442cb776e3e88507fa1a7795c9326e79300f0e3cf97ed2f6df41db5db65baf5d3daccc6b2b205ddba304bfc32703f3679e9afc4f0dac4a3fef8a10bb1e8619b8c264fd6461c3a463bc53a786544058eaed4be521fdd6aef310a2d90b2b3be729c2334990a47a16b7014df85e949db1d8d427f34d5aed83d120fa84a54396682481df74007473a51d814dd365ca50c40341663a4c2632f70439c1a17b154b680018cbf979dcd051ba6f814a5c1a5c8596a2872ceb405d05682ca397a65f8a9b41d95adf5a3c1771bd90f5d71a2097e34564033f1dddf41ca8410d6c59015b0c0c2644cb65b83fb2e3a8e827711c866257c6db990a60fb6a1fd165dec9f5e0b65ac97ef547ff32aa91bf0ca7f33dd3272e22f27c79668a0f5ff083d22844f01f1902891db54eadfaddf7d74a7f452ba47a907bf0453caf73c2cb571b2bf54b5f9165a8d17e86b3a5fdf232a1cc7a96f1e39bac3609412c8238639a7d71f7f9c2e0d6a03acd965b47a7f4713d81a833c90ca2393ff16c10a397e966f816814fa31b4f782493a96b6e00747d4ce5a43c8311206b3fa38a052786e3e8e9ac7543d6f1435d75a89d31fe9db057d31bc00d94e7b4e82b9c1e555c6dc5dd5b9b9e8d57b32494c11a992eef11e5cd42c9f2e6db943d983314393a9d3e2e41358ae5c6df18dae479ef9d7f4cea9480b13a3d49c9746fa8950044f83f6d853b3b95dc6eda2539f1f03a2d807c715b743fb0c86b8c50690ce15aeec7570fe6239dc62d84f703bea4271db515f4b6658555c4ce9a9a8b2dcb90583cf2ee116686506ff821eb64926747196e68dbda90b25b759f22e50304725406b0e2b89c4412e436bb1a6264c8a5c20816467368909cbef68f357f62ee2b9509e743da097bb0a9a4f16c23527e3cbe6526c7e971dba105b78050c65d2e77c37e7b0bc0b416a726d34904b7061b35cd3b1cc36ca7d624bc737201cc0741c3952d6d39bc1ef8412e5780f926cbc40fe99dbbf58232bd775ff2e0892fb0d515245ee32e802ca270c8a7ce12dad0ce2ae96d44166b070f2b7821e098d15791816e44dd04c687f04911d607d368564e9d3ce9ad12ba2dcac1aa6242a7ee35375b00105e6029ca054e6cb36cb3b075ddfa81ba4d4d04851f6a787634fa7683027337c3824088af23eec5da6b764cdebcc41036d4a4e648c020c2dc74d781308533a893f817c7a02d37d7243da984e93544af1683c0b6668663c63a76c0839b35c955b6c2aaaa71f60168520bd96d6d5fd0d2210d660d00db79dbcb91a30af21acec152ae1edb44f8a2ca06f2a23423fe599c46c77d604cffee506fb0fda676ede213d31b77886655d6590220d06dce703e13080bde2ba2c291a35742a4479be21ee210351a6b9a467c1fb65dd7e5103033e9413bf0841a3bf5220f54e8870433678b32f55a34a3da656d3d1eec4455f6df4eb2ac3a26b51179b168e63bc36bd5856e0759441661812d6e5179f09169dfbc7ca31b1b87801a82f95e74e57ee15b7900e245fea2624e039c59ee7b5e300e58079594f655d6dc49694fa7af9fd2048d7ca4b134f3837bcbc0f987655bd44bfd49dc760ad7d0f250b6b65c64ad473c5df767db72bd61b189181b6a8dc7673ffbced37165c971f27c7704e466a55700bdfaf8330467c08890270f382635d5b8b3bd265dff8448802faa993ef7c10a11149bb25a36700756f0af5c645667fb368c8f581ed1822306c7eeb91bd9d281a65ab74348051dff65f0da062acb4b3765913b03285e66fadec1785e7ddd90c758b86dba39ceeb0f48f3721348defbb8924c3a820a359eff02548ebdb96a80dc88ca6c11d9ec767e516801145a3272f56a8d3598b52d0df1e2393061a4cce7c72111fd28e75337384fdd0c2aabf6a347e34160d4408768255b0f8c804f1fd5beb28553401e48560bb0fa0fed92c5480e35bad3e1ac863af7adfd09241e5bd7f3560e34d6cb7202ef7eeb76faa4d2d38c28ab69c740a9859a70998536b0be66afc5d60be8d6677ca67b4e1948d97b378370bc3294fe2719e30ac8df2e313a52d3d135f762f251bdec8e58eb2061176156ec76f16762e64e864f4399d2a40fc3e9f1d5045ea4d659ce2164e11a7c0c23f5f60a64cf96be42af4f2f3c6dc706fd1342e58eb2cdfc1f58e5ad9c2707ea819a8a855d6d24d6f14d1ad1b4f6d4be96287989be44d948920d183127f6251ff11094fbd217a7668419675bf006d22b4eeaa74aa0c9f4da3deb1c4992fe9d2d1047994a76941557312434ef50df4ccf0ea6f041a4930a53e7959296c1009308189decc07fe9fccf115121d6de5443f7a73be3fd085179d24bac1ad7a13c2eae150b2196722edcfe48ac7ef7f07a9f03972c33eda50a2eb0afb6543db143f61cfd77d9d6b3affea487cba727f46c89154fca62c9cb78fbba4b7aa9620f0d2afcf51ce3a58967089e56b819a6697b837d6659a20251bff6401e9373c2df0353b5087a9423f659ac380dc392af9268d06b89110d591dae3881b7a11daa9eb1df754727712d562b90c0b416cfa7e1a94a528dd45a475d9147b8c235272474518e771833cac6a96cf25192f628bcd676af54e23cf3f60d1031338425c1f8f0eb75b801021fe6962e51865a6223fe65bece06091b831db44a7e51c2621a09f41d50c332fab9e535b6cb24353464148a63c36f69199b274d75d346e6d65b42e3b02f1094873cae84a7b5d2a341a54c4a2692b2fe0bc9be25d84b8586998c50a6d9b5b54706b1a7dfc63fa1d9b9324149e3a8660e9c2ee5c07cf4b745e7cc13bb255f8157945c04caa534d909f9b8b6662c843e07b044c51d65e2bc33051621d027f38994969c327341b1086eb42590c927d52f4d9f33a4a9bd3c99dd489c6f182256e0bb801fb314d932d2642a273391bd7855f1f70a27ef54467730b30c919fca243c1009bda5136d59543a63d7db3f1893347e6ebd616cc8cb8da4ba9d6838021e778f49b6f353f0bc5dd3776fca91629d5e4872a9336112d2ac1aa810eaee66e236fca0990851ae7a01c0035b7594c01cbd86655096155ee46af3ac36ba97172d206720ffdd0f85756fceec6f36c7ecfd32d43977a40e875c2dc8592b015a5b4df0172856503b3ea931ad7c57e142c97ce8f50c7e7c8cd7ef1171bf5900dd060bf67350fe21fce571517982cb5f273d8b09b38ffed420d55e97e64ac98597aa62766fb1346dd40398647eb7b2c85eb44338f482e8e265c11cb4d2c42e31ff68a57e8e69f76661d17af07f6475b093a81f12d64a96fce8f23f04841c211787cca2d50f077394d1804a553d933cccef2c616f5b22cd913aa0d0084c378fec8344796f09c923d5ad775151f9a9a333a893e12a2add2a5d6a870e99641f481523de6b9363b9a8331d2c927e53cd5db836dfd560578e5c0c2a91e3e9a9f3fb9eecaa614904b74ca62a276655ff684b97243ebab8ec554eb2dd433bf39fcbd66c90de8e519f6ccd896f292959c1e5146dba86329673cd281353d25f8c383adf098ab464f202e9cc1c1831015a535ae23f6483cb1cd925a8e52667b77398541031d1e3bf681b67b8f372d374325c561f9b7db076c260c49e9b25b76ca4e11e8bbd148bd63cb7a3bfada0922a910f4dd7b7a258db9595f76e76d0444f5d176ef41bb9ca8d19ea379921c40e8ca7982202a751cb7558f13378f0a61f1f8cac385a32e296f52ad3bbf303e9a45b0f996aa0143c71b055ed79f92d5ddf94f9cd288ef41d2f5232874968e98ab544bb1b025112e6091597b88284ae476f11ad1c5aa52f406b722aaae92b5e90d11dc8fbb3464878f72b999a3f8b5b3e865cc670e3007bef9099dee1fbb4f14eb1db2212a8e11e5249c02996951d402c472e0f8bdc78d09593fc42e9f98924ae062c1916ce38a60141406d95b44ee27d644e24aa3f1ec169b7d0f2b91c305c3e0ee0179e806b0a9f451e21ccf10d14e02dedbd234d48393f4ccbafe71c5558f93b7e3c6b984650bd6f15cd852edd4ea22c4bf1ada22a48b434613b8d39ca51072035dd970da6a886e87671bd1214e644a4eaf95963b498ca2cd9c62b103824528d4386b3dfe1ed5ac90aa19ce24862824ace929b4ce202a805a21d3ad3668e06e7362e0fa71af70dca63a49e4142230535b8e718966859b1f47fb7c09df02bcad31eef4644402665bbafac44596bf4f5195aeed86f599be3843decae8a4ba63c0ca9587994b872b94b48ec295981ea5ed5d6d1f6864b3e695024415e56a69dfb37ba5e739e28161b8a9ffb965d746f8e2a5efecddf0fcbed2a0057a0f165ca9ab8dc58b182e52fc0de95085a5586a568c57ec6ab9e1d9e375d195213f60fd1d1dc24cc4467f0dec125da6766229e8df2bbdc546e5c40f6aea9f7fc803767e2a21f7d3fdc713309b0c83451e04ba0f09a7987594234434cf1bdfa8e4b8aafda0b5f67c157c3f39e97d5ac71a4dc391746509f16bcb06a9e1124ba7ed7d8f0d5af4f9c9bec22ef95bb3c07a286901d3e3fc317b6b7e8c0eeaf24e54a9bffd1e4ed903546d5049659d90446cf8c8bebb279c7e20feaa3d1dd7fe70e2e58809d769aad5b6b612783b6de9cd86668f80767027a8d7f1a898e795359987dde6a2d2bee3a1523d98b7184c80f8462074a8fea27895cf0b31bd66e59d318ab640c6fb82d97cf5a44ed1b9b78864fbfe0b21aed69b73b76ebf29974cd4bb12d97b93a6a7682ef854011954adf14d84baaab19ffe997919f6b1bead7f4bfd1b6d7c5993157b44ac0f406850917bf312078855474c5cc94c80279fb9edab0be152311b9be62426ac88c8a10be8871f380f9afd76aed816c72218c286a6d4d8a02dc7e511e9445e5cabf1a82d9941f73bbbe831920ca0b400e8f8a13c02dd43b9fbc5cb48c3217835e5717647a51de9085cef38b17341b41928b8a2daa5b6972bcada3445578d580492d61e3908c533667a0017de702b432dc5f7b895c27e6744d1ac423673cbe73f15a31d27a54493599a84e8d2cfbe0dd4ef98519aa2f534336684787592e3d43910fc9805f5ad0c556585cbc21a2089c52e7de49b950e14070ea5ef86906d3a54df38dfc4878d4e976192bac98782a7dbc375f86ea60bb4a2779231eaab9889b99af18c38c983122e9a3af5629bc5897394e9aa547bb63ecad74a53665a3daacd01deafb7f11e857d0635fc0f45a2a887b2d9a8254521796c85909180078566ed2a5cdbb837d8bb4c331bab849e47fe613fcca4dfdea8b88f820cf4ee25c9679706b4d885171fb70ee8b59aa4d46baac226a9b6c955627f2bb43a89149cb079d23453ae137cf367b8a930c7cd855a0f206110bbdabdd9e69b0942bdfffafb4074f3ef8c55d499097abfda858c768d6b00d4e3d744a9cd6bed708e7115a3b74f67613729de614232bde74242f559f6a92507200d2668c4b99e5be2fa6bbe5c2d4ff9ed2c41e93d97bfc230849ed86aab9fc9f724b2e3fa7fd2aaa646eccf74a36f387894260ea16dfce713990e3074e2a9e8a2988196f57ddef58fe71abdc8f7446ffebb58fd57b4920d21339ac71a459ff46bd1304e55a9cd32fc933386a33dc23cd7b8de81a8e762a031fb1f7243c6ae2199e9db522d4f32989c51db34f325f1168e8141cd671d5df6f228d6960d77320b184fb0a9dfc27dae5535f81bd7b68cfedf264ec76357bc5962406bd2ff3f3dccd2485d84a7ea2a060ca6583c5ddc2300f2772afe9a1286da675ce9966db0e2f638a269770439940ce45c3a8aca48b3f20057073a84779211ed567a2fc023e39e7b33992eb82595482964cee91e76448f14df191185e9fd7f4fb7c2e8705f3b0f2ced31aec17c6094bd9d70cd620d79f070b05e62fd20780ace417ded0e668a7cc7d19abdefe6758b22ed282a40bff789ce6be34ef57c011a7844e071f95277967959e16a3619dbef099fb6f9b4c8ffba2b97205af0cdc18693424e5b241969f57c3be46832105dc3eec18eeef02f9a68a2604cc0d43b3e72ac8e473839c31b29faa8e924ad249cedf70fdd32f76934d307982baf794aab981fec77248c28fa59d6de0d8e1b2138194cf57163b790aa86420c4fc5430e60539f8f215fdad13f8620cd1ca92365b3fe174935707d41b2535e7efae1dc2a1b494a48ed76892a2f293d984d643d5e87314258a730526d3ad61f27a9c9b1216d094e192f0a9a48218dc1c5ea26a77d8374635674980aabcc8505650ac3f9721fab0cdc48c94ab0dcbfd331d0b1f9474e64cd323ba98f90381674132c39b7609a2b7ceb90f8460188355d9f47cffdc592c5c881d170bd338a211cdd20c3725602e891a1e7245177c54156bf94eb0a4c598e76ef264abb33f20b7c31136d0339bccfea18de20a265a8405ae5f348d020c440ec8ae5a797fb3eaf56a0135164f7d7c6ffea40623912d201f785aafb4ef26ad79d0e4e05e6f2b0827336caccbce15600c7ab1da191a2b743c77458dfa3515d678d13a85d92b7126026208d1563c33d52b9c10052a9a47cb2e3316aaef0baf66d112a2c28f4364716de79e3a180946de44d360c7ea1da05992f99eaa3adcb301ca2a5cc707c1b2a3470ff4e90462df6d967885f60938a1f8644bc4e2f339e597cfed85c1f44fbc53570fd61d75657235d9f5eb2b74168a39ada0f7f7bd040342959aa1cbfa46d241853e9a74f9f20db9180af64eac6b916c286a2938058696fac6e746ff05ed7c768b2cec225ac55bac5e381fc797e9d0c14a8f0e3aae40366c51164145242978cd1d6a67a622b3cbafb0a11613e30a76fe70028d5b9b80277ba8a8ccb9240be24d7cdaec481837e35be974895e3d1039a4cdd61f660db91033b507fa2e0681174eb28165857987975be5ba41947f6ad81e551e180620c376cd085b797334171206d1348e959a2aee23cbf31b1d5fbd48a37d6a6cdf38750bd0fbcf147df788134fed1f338c1a7fa246e6abca87068e3176cf39519808d4509d7d16ab4c12e112c3f29316304200063e9f7ebc7d77ed1426ed5a42ae45ec8085b7b7856ce41ebf14edba4341e720eff8cc6ded55681c507fb1f201412fad04e890e31bcd944d9459a8f4a52b1f92122756f05967402f139b63a6075d505f8dbe605b0a687f13a5f229955c601da52c4dece3ac2721447021ef98b53f5fc1ad3338292b5eaefc4ae28c86e6baf42c9dca4e3a194b093a59d7cc266cb5afbdbc5bf4cd4bf6ecb61d1dd4c5d730186ff942a4fecc85fc98a929533e7922e44389b94277053deb046738de0b7958c9a921526a1af3b97d39d0e914eec6f2c577c14cbc63a0b9b782175fad7721ec5c21adffd2ec0333e973924b2ba404e8864692d01ed2caf1632b0d62f65b89c21c7996c9a2bbc37097aebbc6a79917fee78ba79d69e77e41b478a9bb42d7760d00295b15a08d13db6e965808d3a1a486a17ba35c6987c09cb6d85a857bae9d9b622d686a118f3b3c7bb2e6d86bbcaf6a5286b3e6e3113ce559f7de5200136d8323c4461bcbb6ca2ea05f074c22d3b3f3f4b5adf3dfb633ca8e900875792d5af7eab1f73eeae9f96bcf9786da1ea001e0f4acc8b43738d4ae5281d1ed42e92aab0c38a2f9cc9314c843faaf5b2c9daf8f820918fe5180d948191bdcb81afad81d5f1a4be7c444425378503fd1722fcfad308c4d1a7c91b312e32c0a0ea2a2080a52c249828913fbcec772a7655b4c6f8fd435a0842bbfa8ed18e70f79a1019e1f9afc45f6d98da4795c68c95024dd6e3c553bfced3559d0b8e7d11bc421479396e22be64df3f285f47e6807de14b6a3bc9fd52bf4bce9ed6f20f2eb8bba8c6ac33c3951fde2c1d35896634d7aa8fcd435cc829536ab89a150875158313fe3524f9de07d72112aa0d33b074a61b9108038bdad70b413bb005ad06695b03d95f9130b4d57b321cd4e0b349a095f7a01d8486d0e0ab8b3e6c8d43c1b0e1d4d1f21c85cc43dff7fd8c8b0dc7942cd07385842fe3955ce9ac914f6391fc022719d8f07c3f3c4b5a0f0bd734c9b770a4f8b6932764ba78651313c649a4e2d8c48a87706a23a4f1fcfa38100b19066de32422cbe22474712b8372c6b9920bb565cee46aba7a96984d8b74fb25a3e261e3f6d0720c37883d00d2af1374b091aaa233ce579f0c5e0cd5a0d0e19abcfb64146ff1e7308c3380436f4f951ad122a47dfc3839609a4849baccb5464fad29aa904f9ed5d2e346709e5780fee39923de79b6cb96bd96e8c25c683574ee7ef3e85447844032017853576164f6a9a029900d272b0d247a3d77c283b8a632747c926a8e92c0cd05ca04f4ef4dd9c3958e83e4d008254965d6f5212195ac5f4f5987b212ad68a96fe48dfd9dcdb1eea16f6394f4926018a3a9e0ee82ae42e2b497e07e9d3d9ca4fcb3655d8911bf981b7954c5b851b177de652379406a478897242a0d7acd5bb4fcf26f89174fee7b71e203a1fc294d513ec4a3377fa336c682ccbdbcd307df9a2838712d65717862747a7da1c877b5b097fbeb2eac1a7cfe52b48f8d8f70c81095f4fc08e5abd77083fdb4b251fe702f0059fc62104c77e4873b759db8a8b47e3a330768beed5cfb40d122c4581ce95821c91b6421fbd88ffaca4f1e948b1be67ac5444e3c4097272122bddf77ae3368c91d480c3026489ecfc237c519e15d63cf221984ec2e419acc0c44744de9b332cb0bd9435c752f104b4eea64e9fe55c066ef4f88179ecb62513c184e865267bf33a409948f4940acac0a36adf4adf0d84ff3025f0a2fc8421a81503042ef3ca809f3c7510c6f73623247cd56c1ee4470a49d1dc0865df9e2e4b2a5191187a387a1e72922157914edbaa074891e12b513fc691768440fb0f6905d655b7d17196e970956a6ee16a3ff891baffe142611d44b29a71657c184cbc6efdaded538a616047032d6241ab532dd0d4bc516b99ffc213950471c35f4f29f723ac9b48d9e7bde083a03ed70b02a238f2e9402d0a7e67d95585c295c1dea4c26f9d5907fd9f2e11c9450978e39b06b5380a53c9df58351f33e17a9a57b374d6dddf33c8b311caf8465bce378093893a98cb3a14efaa8b2a36285597677c3e667cfc872e962c42bb624c7d2fc5308b780df37bced072b15df271c8d69704879cfb0bed3d53fbbccddf737462ed2d9467e4a274450007abeefb74a7615e848d17215f75420c238651583af85d4726ea7c2f1dc8a9fd90ae021490a622b7a6cbece44635f9675d1816f236d433b0843ee7b2635be8ed0ad97e82a6d21a8f635bc14a5b782cd2480d59231d3ae16acc822e871d2ff9447d11f59b9ec0e1ee677108e6060b5709886e69430f5daf04cb41db06962cc4b0d895f8b437d0f84094a0106c2db6c660dae5620bf4e598cb527f000b2e9571f7167c860af8320c7412e98984de06af8ad784ac265a90997c80cf691ab3257611987ee83dbf940a6e342cadab7567b0e8bce5eb36f8d98f9f5566a8e75ed4fa59ed877e122369eff1e2bec12c32b0fe897433f4cbbd3c8c9dd884f9d710bedc5bb7cfe6c39f87cbad77ececf0b246214b79e5d94bf85065c355c55d2acef6d6f0c03c8ecdb123100a47a31ad052950aa11f8d002553f502f373981c7b177ec1e6bfe5acba365638d7d1acc8ee7f2393f7134f51bbd7ad2c2994c2612ae7a901bbfc434b7eb68e229e49540453109c6734a78e098607282658db15bc67ffb0f10fc315e025c659b145d606a7f77c4ecaa8d7de4b471ec19cf82e3a96de3545e14c8be28368a5719e479fd0432ff90d87bad26aa69c8d1a0a77100aec8975688dc7a5e85ca74b5f923ae242ed8f0ba66a2ceb725b8f67f39fea79f6e3ce4e7f8483f6706e4868bf0aa44f79da7cd78122a841e26ba43b41de7daa0675fc3389dfc704104c2e08230b05737b27fee1ddeafb71dbb07c698e134922e3f668519432be7446f4939af08c5c8dda73c05d117372966d3ccc1bb624cbda3e0e10f92c3919c377b9c82f5fe827ec931bb5f857a2f3665ea9c5ac4d7c2e39073779b55f17a2a7565c9f6e6c7d6321ed2f14501a0ea7c4af0fc7a9b5ddfebe2f664a2cc2030c0e475550bfa91bb68b9d85ac1b74adc2aafd7e1c9baccd65923cc32980267c8cbdf3d21115df54b572cfb2792858e9cf879b54b8f9a75f17f49c44b7300d3e966802b5038f41e42deb7f82bcb2227fcb5b8f6d65879d5dfa7eb4138477e0583b89668626b2569a6e4b79e70349bbc1cd3c8dfa4aef55ac1a8ba05337beed207070780b49080b21fce59fd60d3296c6247d59d124421a689a8896dcd798932706814a1f0344a6f6f2c7831e56635b72c73b12ebafd2b1cba54cc88530549046d358b5e30212facfe25dad82b31310e16794bb525df5e995e334bb52cebb83372f28135bea39fea0f7e129e0c6f5bbe6e81d6245223850a9a70d5a4d82458c7fb74952ad7a66f6e827c3485769bb775c8b6034e75281b5174f95213f97bcc8e2d03bc9a58499aaa02974554831a80005b71273ad7371156b36cee764adacda955353e4ac7fd7ffd419bffdf501dbce8254fcdfa1ed37873a778c81840eba4f3edd42fb38e514b5588709f8ad2c1fff9c2546d3773ab1ab78a65d303efd5675a0fa801eca41fda808e411ed579c31abc3bd5db7d37d6eab5b853606942c2baae566417b956e9869b21b27defd1cb73e512f944e152d800df9e5dd377e6f36bfd2be2befb56a7f0f7be6438937b88c48cdb9b46d95299b37cc729084f5b098c7ad2f6f3aca937790d3beee15ce1d1c78c6fd5ade8abda67b8570fb52d216952ec62fc10a48a957d5e3eac683a96d997d9f4fe6b00e30520670dae7c14f7865f39b4f79ea944bd4db336ecde841378488eb07a2c771c1f3aee3719c04e4afe7dfcefcfc70a7ea77b5906a1694077b22c6729159c4180dbdfe18893ca490adc2d57c84e7865c23a38a0b486233b8a8027b5f57145765229493aa32a49a4970e1c01e76b3b513377c75dce0ec26f416dfa8a33ad45cb638808555debaa8bf42649ffaa98d4eba542e34fdbc0ea41cb7a1bcbda2198f3002ad7ee09c85c86c0e03ae4c08ead5d0c52d699de452937a8122033c5de965375174d9f60e4bdc9fd335a23fc5eeb0abe6ea90558c3ea79cedea5dcb044c3172bd5e5fcf2fc92169432798cd261760e7820f40eb4cdd3c8351368d36108b3d8072d3701352d13f27eba02dd4be8d13f14dd20bc8725e3dd05c2df6328e8ebafa7479afbb3730a67596853ac18a2b3003944e13fa81041e2c35c30db905b74e25789b1200376c9aa942de85c36ecbde641d747cc235b18a8bda6fc8fffc71f99b017e1524e5a9ce0921f84653fe752a1b7da5f387239b6dc7a0c592837d23309866c9a0517e148742b82fa6c47d6e37cc7270ea684e24fdbf9606be7f77afdc9776d28ffd8167e5e9af72164d6a5c751a2b88937a632f1845109ff9e46ff9c70a9cd6e1078d5ee455f512edb94e50ea060da4894770c012d7a299c6e4b3bf81263f5efc144679c922387ffb26178cd36eff51fe3a5ef20c7c964c3b8bb207c5b971895bb8229149825f8777d531f4f91322ecec2a121695801d1bfe8bf6bf268770ea7eec60aa95c634218c9bd7e735ef88b77f652f2fd4e9594508c032a52bf13b9a9c3b66c631a8b3afe6deb11edf8e1fd641ec16786a394c2d72db9b9a135cf077100f24cae59df1a1c7d079ba97c07b90b976adba2406ef70ad2b05c8bcf5ba32de4c04aebc9ff72bc7256e2a03424e88e6d5e664feb3460a01d5b90b824e933b1d116e418aa251c280af87aad65f143133e95f6a4a1867cd46f5a4c859d749ec4a618355f5d91ab03d54896f2540946e9d16f70da8566be3b12266187c69c713feabd805b0d11205b138c48cc44654cce11e6a92cdcafe8112e387747624b44edff64f21af321666c0ee86ca7e61a24871e4ce1e392d75167dcb2d09bf0831563d1ccdd85cf23469847e60b69b89f616379ff375e0d103014c1dd6000bc2fce7fa5fb5704b45c941ee05b38be15fe9135bc3117f3e686b644ef8eae6cde005ba54c08c49fe841e9f4c69337bce518cf81938f66b651b57e12fd661985ab6ac1237c936e0c69fc80d31c8216912b7d569b79951ddf1962d82741593017b49387d832e04c4af981fca92ffa2aa035d9bc1e646a03d26dc71253b33c44748fe6f6fda9d015002eaed19c262225cad3544f3a1828bdc2f08ce3827589bbb0e524cc8cb79788c370759a3252286c8d87080a5cbe9a97b3322c5f0c2258c10c22f1f3d805189f634e1ad2bdeb1a9d4e72a6ac83d9cadefaa33774c8d9b67265e3368e5b07bb017577d380d64649b377d9d891239ee8ae8cd41c69c829d0dfb3de8966b6c36c6f5d4ccaa80231ecbc5a7bae56e3b678248c47e01dc8edd080489a28421b9e72ae9159e5e5b1520791209fb0b1d2f1f23e424d0542c636c4f309e68f8f16398d838ec8b4383a554896ed856a77ee5131542da6fede294241eb800880f9bdee6bf4952ef35f06a4a44b9eca706fa9afbb3f4be80261f7889f94b2e708e86e758c09632e08009e6c0a1dd43a2652419cfbe47c9ed9f0be8c180df5b63ab149198cb52e4e16f0f0ecab9f66248912a3265d7e9d88511fc192946a3a17c75faa8a53fdb8789544a230c63b88f1c809894647e41bad10b76754f9c37a3f980208811f5bcc49977e4a5545601d87d05b2c722e71ce1fd3cb8baa19dd01e5dcb17428dcdf709debdd6849148e55a7d3036a94ae8ecd4f7068f6158a34b4e60aedaa953d06f0273e5b9b4dce969890a4ec5e7e4d2a6adb717d5d8c7044478b0e87ba603434e23857b9430f8a13c6da6ea9e990505b67fb110adfcb61e7361b1c6047f73f48b7fdbb029663cfe8a88d1521b690d3af4ed3d95d82eed4b4f79fd47936403badb9a21a436270c3be9c93e0029de44a53f01ad05b5045cd3bde02f71c7f891977629aac466059250c1d37b6651f243f30a78d8b3de840f3974d535e55b77883e7faa9da31ec132a771dcf419246374c45195a3186e8e157497eee02e5dfea2b200439cd2128cdae4e0ecb17ee7f83256d06ba197710fd44c397fa1cac1417d5381e52dd5a8a47ab947d5890f221446e87a08b4e849df992809f8836b9d92d0516d11d5df0bd47f8cea68a2324cd807767319cc6e06e37fa4ff1535fc4c214c46aab2a15263fb2d2844fd00365c6e0675af40427ba825768cd865b088fcf8356a78f533673f0d4264265145ccb71628bb858a7fb486666c4dfc7aa240b0b46831f39e53ef0703a5403b3dc59de538fae4472ceaf0fb71ca4d64c4b335be434dcc5bb0a139ddc7f611cb36d0fa369a17e6cbe61b996704ad8b3bd07f9cfec017450a39d5f9a88bdc00a7310bfa03c66abc183532a3fbec0069752fa710db8dbac007127109cffb44f26658558c41f6afe7966eda4f885ac608a2de0939b8cf58fafff97c344d8d184497662a41620387bc9a5a5a768ec4a61f57bffa65176fb5a3e3335fc19d0bb6a95d13752fd1392e10fc6ef4d3df68a2513b4c9033409ddf7eaa80bdfb02d3e929ad18374ef2c4c718c1a8cb1e462dd684f29cc16323815608e8c80889c825dfcc231094b4307a087389ba0a348e00c8860c5f6de81cc6941bf12244927723b64b54b3e5da889fc14c7957bf09bc2a724fb20a0126dd465bdab62e0bb4750440d075a3e34247a7a1b530ef46c2369d4b9da42fce1033bf81834edc896e42ff1b7ecfead731f01dd5f795b12d15c508c8e188c3256b88b5cc5923614262f59917b408ce672d6cc79a84c10ed70ec75f01a9578a60eee75059b7784977e4e0410e993042a9157a8dcb8bbb49f3045cf0fd34e11241528a02638325c3e034180d61a9eb9293917d9a62588628d7b104f0d304a927ac01de143a6412213a72c2f7304b4c1709b23b4dae77f905c1072ca35472cbbd2ad2c30e1dfb2cfdbcb70ecd04142a5695161334f43749df4f94fc9e82fd2e91f15f415b966cac4e567caa02d8d859c46982b32cbd1e30f8f94a86035e109280507a2376c51a453af8496d2a4ba0f56a38dc447e8d04e5a78265199d9da7ae6b313c275e3ab5560989762cb4a65d6a38453444c11d7c51ac13878caeface59799de36f7da453504111620bd54faca00315c8c409b8edd47a8b993617138f8c2bc2a012aff53d65c1dab5a91df6f6ee779ec181c2940bf166bae28564e7c8875f2d8a4a01864ebfade8b9aac54dad1c0bd5a3dc96b1774b88774de5045d5082d0e57f11f8294f302fc464a36252f4e39c3ea007c4388c435bbe05819f12d84a58f05ca16124194171310e3d35cbad0dff5590220c4cc219acdd9c3a9eec0afeb4cabc45f185a6c5635f4607a19c8d82e6d048c6d1d056bce6a2ccf9d728d4aaa890888305f927ed4991ce47830f7e81252607bf3f23bd4d23044ebbfd18d62b2934f513d0ff95af79ccb15ca5c2357995e055d3b042bdedaba08279c6a660a4cba5b3b8d9830ca6d103ed891b26ac505de5c75c492d00c8dfe04e6f5a2e7e2fda87d99de53563418655bad46a6f2abb2b9dbff7f7061d56a57e402add58ccf23de0157d23e0095e7dedaff02b609d1020a26cc535ba4d03cd3bb0c1a7c9ba38834cbf543d258077c7c4c5fd2f5ceacbd587354447b0d5ff7e4911b2c89bb81abc5878be09e348364786e5d72707443a5d62d85cf36e5334d8881c75ebda3be4be45dec3317961481c540de14c8c27b3354313993d16a8809f1723e800884a68ebb0a48b169cb0daa1eef10ea1ef0a49dd1ee6f5c14b54622d5eddd0d6a4e3edff6613d8afb9256cf16762254bc9c713d651243e050dd5ee517bd5e051de1b4e467a6535962bb1e86daf9bd7bacf19b1ec64e9ee6c6a595a5e6f0753ac1df0952a3ebba9b861b8e96bf5837b844ce5e76269a522c76e6ef190a7425e94d18bf42bd14cd6489038a832aab6f5a8474d5edf10c80b64ea6de5c303446bdfeae373d011987ee6a4d03e7d72567a3d9b906eafa7edb5e1956a240232618a70034ce4ad15c04eed86961aef027a813a948228a478d46e16741767877ddaa145e97df3d24730802d78aed68a9b0915fcc853d25f5fc3748fae735bd9cb3964b3d1ad46997fdd5e5c021976cf414565de99c85fed7e11b8105e965692f77bc834a9539bf435341f381fea2cc3507837f8829092056411b9bc538b787a5f6b11a8af71c4caa83bac1b76e418b906529197075f761ba99f073a6e6ddd62911d37f28d770c4c6f08257f802eb6227e123a78b1e30fe03b8676dc5238a9b08c32dbb6b3a816196542bf4580d536c0b7f78b744c8f1fa105d43c9b1653924f5d38003f2f688d281486dd638576bdc302268bbec9f3f8d5d47e93cddd87b028db166b856b96b827c37a88a8a818ffc791505feea2c38cf0bcbf84fda027dbcb632b97cc6480e7c14ef83c241b635861159a1ea589fc31e281e2c29f7de3420943d2ff8e8f10ba49e30d2937b541e5679c7ffd4463674e05fef3421ea18d754644f37d55fbb8b19f2a73ac2f711cf8ce9c8ad53431b7f264e51355a7498206f4330b0ad0a773f4cc76d068bc24bf0efe6e6dc1bf05fef58f2a21f1a74c21ae371dacee9793df97870ca511d08a67a08855485808fab7a0dbf6c79d44a63f5158e0d869da1f77d54f45da2605e3b0856ddf4a4b8fb02a7e31e08999bcd4c220070de91577b35d304f100afb1957ac55878beea1133d85e3c8114ce0b5fdba19fb0640c9969f2d04208379920c6d7c82635262e8e43f42b5bddbdba8024a8c620a6fb532e157424d37fe02000a0465bb8d8961ab0d421dc3ca0b317229635dd9d8e8d844d71613e918b7a1d8f6e66a472f46e3769083e8fa3d84ecf7426cd7e0bbdb65eeb058de69dcf8a419147715dea3e149f383519cc942eb1303f695f0fd12aa73d2d2ff68738618dd83d052ff0769c6203bdb45385fc1db327fa18b08086342eb41a6523ac1a3b091debbe38713cdd6a13d41130a0d5b5dc832fad23f0fd3e4af0ac4e545b3be94e16f24231b396f0d8c4c1de30b9b38e3ff5630abc320b24500fca6f148050001cd03b30026e6deee6fe59cea3a1b0e917a938f7f703ae33a6649f2f581f85a289020c263c8366555d1be80f13aba5f6562352e855a5749a324ac5be4622241a96905c8df16c8d9815016038a769afb0f1954902b9f1e4d205860604e55aaa0016bbf6d9207b8048a67f9a70e3de59b206153c887834355dcb658f425837a09c62f00d1251c954d1ec50b6abf6d62691ce4a95f7335f7ed61996f06afc0054e2b72c12a39afb7d5da378dd7fdd7c78c8d7062acf9279a348bb636150f396549fd853ed44dea96c361bdaac29ef316962a07f1ff7be7a7e2b792bbd9af1a4423674443d87521ee941cba788848006c6deda2c57d323c52244ef233ed3a70bc4b59e83cccedc510f0a5cb3c8a17086318351d8d1eca6f2fee5d6a374046642c64c697d75347b0866f28c79f39cbd272d40bbf40dec95e197672b50c37c334530cc271669e4a1bee6dd65931f792c214aea6fb8eb4259b1e7d099aa8ccc960bdfc3a98610ca13b990bcab8be689b00f2df67015b42a87dab463897d686af9122c978f6083cecf504c1a6ccbfcc1336ee96cbc4f7c326a9396270646cdcd87e2f0b5a82e16c74e3a38cbfef3000cde3be15f7108c5f81de45fc52e381ed8f854e60aa99a561207e24256c801aae6cc4a74c2f32e65662f2b2e40d44c6eb8a52e1357c5e3f2b1eedbd8655900d98cc4d56feb703a7e63ad4cd5d035b801701fb4bab04d1f94f9736666ee5ce04f0e797518aaefc68bab6a8d70903f0d1a072266a62c5a3c04e8b4ea75babaae91c6d2eb6c07a922a081dbd18ba287e697fed29ce78816b7ef369947700ef99c247e2da10e295c2320421796f805aa5611ee1811c5ae458dae2795b26f6019c972e4c36573621449dc54dbf2c84b580d0e14a2a0fde0aad8db4fb8a2d9be4eb47d533f9508795b6f1d7899ad07a3cbba52235336f365b9a6fad0ff87750688f973a5380eef7108d8191c4adeffb1430dc4fd8dba414c88586ebba107ce2c0f3ba8200ee07959eb225ca1a425dfea5e0f42a40f8d4b7e681b03c7e38a8e626dab1f6eef29d8cfe940cc3045d1236d7d7f3e821b460928ca5b9e5e465a397d2f1d0f393046edb164b5f2eb6968a62a2cb52e040a0966318cb41e870851ec54f26eb61b713263aa9b34219f87c7feec9f2e00699d16d5faf43b3fd5ec095e85d786df8cb5b655df602fa0d28d147ce97590fdbaf31d255b695e9c6e798973bed869d524b5da22cd63b8bbc02cb78a07addd5342c3a3da2b14e4ec219e4b0c7426bcf32b6ca3929b85646d7cba647f88f36032d4499be177417ef70af5b6f1d94dcab225b2499370b5f171b964c0c2e5a95bcb596558e1c0b41e958c77625ab059acbaaa363128306702352491980008d3f99237bea38a17ac73684d9cb0c85afaf871bd0953ce8b488e188bd251c83a92a3fbe6605b423498f088b6c8e9869d61bd7053b83d00f03fc4a391a39bf1eefe8bd978a42721f04ccea4750d950e85fc46270e78a93fd341cdd1926b906d7804e4baf5d2d32b8aff8c6d750a1a68a8275d0a4790fe474c6d94b87674c8d0ae9ac4ab88a620e9b6e719688e5527730db6e3b79efdd77c2f1b970dee9fefa38f2b3b20d0cdcf1e3a9c56880be3abe38d057c95a7521ae9655274715bc32b818398491bb65a1d00eccb4c7a805452551e081b6a9f3eac5123ca4c48c4a64916882fa2b946c3270700e6c6d984e5dc81e1c5d5b3af40f30345ccb842dec8eb9dba3837e4fd3769deeb9116b6bc6e4aac630b7fd38743f990f7e60778cf7f80f6dc8ee349dbdcaa8ac8bb97b8ba65855b91679473ac846829794380963dc4d82aa8b0d6b7ad36c2df50e3b452f0b309fdc056fb9ceda5ca8f954d842444ad65c5b843bb25cac536b376171ceb79f2e24ec7c53f79788d3646cc067e7d69af616617e3a3a30207b186259225e69308fa7ac65d50b31f67d80f25292cf4375646a84f4453aa74ac38d7413a37a753c2b2bf5eaf5f90c217635506b01d37644795705eb1983beeaeceb858a3aa6b3f9d85c2fb4e9c9b0c506f5dbfee70fc81ff2e5260d44fbe52595a1163d65a06569506a79727e2038aefebf945ea83cf81073e354e08172c32b5c8ef41698bd4a21f6948cb89d8bbfb7aa1c24cd16ebfd4f020bb14eb485bd6dd5b962f9aed2ffa0798fa0f71de9d7ce0bf25dede3efa013a0ace8a80b7cc710de59db829f1ec4f9634775dbc058bbd6e1e4e4e55dfdae033bee009a713a148cd1901a5f3c0395270846ab3eb7e0f2cdfb2ed8b00120ea36e826d08c5ebf917058a97178859ea2a67710ed5c9d432037eb4acc1e7688c91e58691f100829921cb6f3d24e9fa8f157100d90c98247cd767fcaa87d3ea15d6db62a38ff70d9520f47eabe980b644fbb18aa045c65f97851fb1e6954bc5652c336e95d53a810a5ccedd91360ff2389cbb48b9d554b832be952703d193f8d7292481e3ee7b34f8364af30fbff3182de41594c396015cdbad00c7cba6a1d13085deed259408bf8c1df4f29ebedea52207fcf8dd61a1b8e0348c577c7bc677c9ff26fd1e4f1a1edec92aa7efe611e63fdcac10f3e8662fcc4e4ca65623dfdff7ce05309b0f337bddb75e1e9a28e630fd4ed40bb8fe929063c9fc1bed242e44542cea02e1409fad67031e82f1861ecd8a12c752a8ea9b44da4d99e26850bf517f3f27d7cf8edbc3646dc4d1d96504162aa008cee9daa474b6edf61e978693d8b6cd439b1849987d3508ca0d001fc42c8f52657fcc225ce643274fa648845301dfb1742a79eb34bab14ddfff87bc5373d1d75b87a3f8a05c93369abc91c7577bb8880ea136af9f436502d964569a06a15a04c32f8f35fce18ef1a6e7bdd6daacd1782e031334384115671fcc78279bdbceeb28c5d00c0decd6e3f086db1dca75dd55d2e96dd35ed3cf63cc31f5a2d06352042cb096f91cbd34745722df884be17b24533bd1648ef856cfb2be8fe71ec7d98ebaab31a2e223f9cfe6b76bb1b5bfee78e95d8709d057164ede12d078f2e02c2b79879bd02bc441349d18469904a26f970843eac76c4c97a4905d8d1ed170941270eaa92122c295850201f07b71be8496e88a50bf6343a8310181853dc0bd892a79267817908470d3e44c38ddee54223aa7450370e0cee997b4f001a8488504bda7df04e56e34891dd63c22ff82da1e3cca92980700e9a8a62e1a1acd28d95bd57c9c462b3f8460a801f7168af8180c4a912a0af0f939ae77a94e2577799e152abdd743a2eee3448197b2b8d03c5df9e3d943bc02c112ca6954473bbeda6dffac4c97203285d4aa423fe81b82ec17fc2a2c0cd4ca564156f17b4989b3fd446fc5ac4867c2f04461032ad37352a3de0c906e36cabbed5582e17182aeec61ab22bc842bb7f9e8a249a509ea6a74a5dffecafd420c15dd9316e5527f958b18a34ed74e2eab9372c522164979bc39d5341df8da781aeaa156e6e3f1937f7e59334b2e6d9517a29711fb3cb7f19d47b70c596a7dad0741757470e3638487eac82572baca8e856461e6d306390ad80d24607f83515a19da57827799085d4bc5c0813b2285016b610901896d8d5cfba7fda2b6043dd891f4eeb6f9832391f05ef5c7ff0ba9a74e196d3f870612ccb858da47a1c82fecd9f318ed4c2d7308941c57f0dae02dab0b1c02e505a4bdb8c803309fd4a0bec87b7feede14443a960c027682b48741d0d180945cd2dd7ef04fd7333ddd6c01efbd9fd8140ac54258392b094311839e5eabba32a681380d4525bf91af29692c08140a1c8e6e3d106472c06b59b1a7868137a6f9427e624561df2487de050df6e67632c6ae7e173ff1da60047ef8a8ae344e37641c4036722d1570922a6eac652dc013fddeb60823c7d4d6b9d05562ee451b7760635873c51cdd81b1c17dd1c565980276861554f74c32437485f901fe56fd63ac7e14a48d1fc7feafe7964689d01f79b8141742575a2e5fa79a5f2fb2ecb64ee47d376ffad1da9231b68efd024771128cd5607c34cbc2a7e7460ac83ea9aab80e3ffce0d0f8537969b2044512444ff4a69538988ba964cbbd7dbddee54bec0cff6100e5d1b7998265f81057bc454f6cafc244f06979dbb2af79a8f743aa818d32c50f658854bf6fe816640ea524abf087dafaca0d724ec5cc284f322e4cd4717fbb2fe0a054c78dbc51ff7c8165fcbb347208f4211c122797dc6e304fec73832cdf3b576d57cccb9bb7490748c9a743776f89a0ced3b1d4233d7d6e7880198e715d55e6a43fa736a77f1b815007f7e95f42d0c040edea0152cea503047ecd02b9a0f229d154dbb1b2b52de8c5f4d103dbf31dbcaa5d39ddbf4028b0dc4a2708b8638b8d8c310caa2bc8ef624302a111354bfe60217d5446c531a1c6f7cc5959299cd78ece0832a4eef21bff43acee61721da5a5982ad974ba341651c998cbd1e48e8854fee3b690d1971676581c2222d93d14716b512c462b8404b38c9f2866b6e6bad191b5f9e021ff2fd46760a74913528d20e305adc42345e25bcafa884095b6fa17d762d87ca4edc81d3719ce34208ec394052d94256da5dd4daaadbb40be3813fd77f54b0ddde635df0705967f78fcd8171ceec1de9ab5ee141a2f9ec8dbc9d691a5e4097da124eee20b7abe3eb683ace6e9b9d6b236511030bb5f7266fb5664e87447919e536c240d979f93a9c6180dbe89c61f4894eeed1e2570a253e717c372dcd8800477b26bb1baa2123b30db20bc5b09e8a25b7c291fb55f59efbfcd78a7be8a3eab81d8fbf66c1730521af6abc76206c1b77ab6c431035934fe8698c944a59f5ad12811a591a3cd2b69c91f4f03f17dee9cec1f5892b6e97b2907fb289cb0e6915bf0e828e6fcc50032aed6426756716f4fe79eb4507fa25d48b06dbebec5ae461536e09718e962e2544c604e16ac1b86dbedea823967012cb257d28c73f39142e3e67158c5430d69dd3b167941677c2d3ac400b30f2a7d82302f8013e0c86f632316742e619eb6d69a4af8ab576d4fd6b689f8b6c0b4048ce41c985f67389b0e0aea61fa4041025680ddbd989c85fba039746821acc763ab5566636a39c4064c0f46e0c6462e0cc26754f777db51766ea8456a992f12cebebfdd85e577fbf95dcfc29edc3421e6f316bf755351cecdc140fc978df0406dd0ba4472734423df3a31365841ac38afdda26a59c198a1c134072555d20248133f95473855ab22ad053e992f66e1d37550945414c4bf426afe5d955478adfef02bf10c9f2b3dbf34b57738534c27b80b919bb84e6b0ec95af1a46502dfdcf899b2b28c080e76b8ea3b1447738d4199858908e18175e3a270f1d7160ae20d7eb6d65ed313153e29c04a854d8d1cc3d992489fcad1edae24c17c5d95077554a701c09d600f998aa8b19ac2230fcdcc402cb320599506cac5a00b43f03c340fa04bdadbb1710de63f40d742847ff76e7448eaf8f60c134ec990d5c608434388ccd938b091dce83be62ded322534a87119c6ff0846d18d60ce6a79ba5763a658a212cae0d05c4b42acf31bbdcbc407d528da2964f6951b703988086fbd5fea3a1db10eb5dad2184472a45484cf3bf96a2098bab88129ee5359ee4d1c88483c10cd816aa6aa5285a02049850fb7aceebbe46acb428cb907bf3bc621d0dc1ddcdcad9625a97638dde7ea239a8543aa502ac6f103dbc137f712b8bb7ae91d1f0eedb4665b0a773508a8d2c6b105cbeecdeebdd548c8e155a1e82a813ad8c7a910939d9026acd39d9f072b40acab700099cd557d801e8deaf920441879bb50121b0af33fe1ee545bfacf31a0af1712ae0f2626ca6fbfa633b7cbc6a8157c5d6138ad6081d4a68fbaefbe131e79d9dfdb4a5f4a87cf51b3169a9fa79c3ad41bd0da808d64dac6531f1cb453d8b38b33f5bec2928779e50ec866c5987f7d23fd723a8e3567b677cf175390c33a1cff328824fd69746c6af5b42c00ec747aa06178acf19f592486cd7ae4b3a38aef15840c9034ecbaa11624f0ebc3a79f9626ca641a36d76a6a3777e51f39b5f5a393303347dc8687d4298c6b48c34f1b2a7143000bfbefb3c2285694ba6aa91326eba271c35a8b8d5cbb01635f2766e4a378b73c26dda8e7d28a8f01e556780ec2d684f66ef83e72205a70a7e8dddbffac6bc1731ddf3e9cfa9cc6d0f1ed2e30328be60a2233df588cc0900e9a01e7c6920816c1a1b774290f4297e1f4d706d223a2f81a6dd7fb0a793ab0c60824b98d480dd762760290db94353e84decca6a9ed577b19f9c0a44fc567643278a7578b0740c7127d7c559ce79e693da1d2db4bd8b8bd2be2b2b96d8fb00925d4ae9ed345c738654c699c515b493b110f39ced9c435ed4272ef88909fffdda9b3a3ca1fa7db9dceb8c95083e7dbee1e8f35fef11c5f24da2e577b4ff43b6c337a2ce05ae1567ccde4d423c64a4848d0352ef4b3ec3d3754f8d91616ae18c384442230e12a651ea36e25934dd206a34b4f0bf2d5733c074ba8136708c9c18da7d50222bb967aa494e31d722c8a64883559de599558a186cf1114fae59672622088c6c33b09c8be13e8de3ab4899379178ad404aac29a33c3c739e3c5df4afa3a050982c48625dc49a03aa60ea379779534122152399fe45e5e6651b5d2745f553b8a248c9f7bc0ca3e11eb16620d6df0d2298512bd8095793e95d4a06bdee83597f35b84566780df9e0caf71f4d20cfe72f524736079d29ff067697ececa971686a2f135d8b0f79bb608cdc44bde13fbb96d4413e0217cb5564ca2e5edf7ecab86828d310be64043cc7bc541c68ab5b6543812facdaf21cefe1adc35415248e09a4faa667443b394747799b849c4ce639cbf68068de4fd96ca2008f2777028d39d8d99ee74d6fd3424c2035ea4bb6e9e597e1d56737a2b783a9d727706b615ce8f795fbdee2d3bba590c2ddc7788e1c041ffb721bae18bff7437b7b5f6e41e188ca8f33e506afb30c1c72802126822893b3ea53fb243e3bf8da18b7348e7f8aafa766fbc9c5aaa0a0470cf596c3c23fdb064bd44ec101749421750893170c72c920ffdda6606ac33053595cf14977664048ae217c7666a9d0b5f73dca8003df43a65148c9b1f3a2a483850b75fa26f030570958d37d6073560e89ce569fcfa9042a42edac5caf4b581252984afe98cbd26d48dae130b20ecfb507cf98b97a49b8586ab2e4ce7027c9fcbf57d59a0e7c1b6deb7d4ca7b5795eb5b391bf2f87b5e65bdb97e231b2b81d57515f0b012c7793a4de3f9bcc1f644c77db1175052048c9730f74fd54819e1ee7916cf5664f03a2ddbafbb8ffc725387d239ae1d34d5c659cd336a848bb89365f3d6b3c66cb512264111110e79dee8b9601ad9b82d04e6f98e6afb973f7ffd2079f36623110402e94eecce272071a34fec8b55f83369fac088b8d44fbc9d983f331240204f9531123f7d758fb8eb20376e6780a3e8b7a460157f6d1d439ccb7aed8a009ac53af88d445ae7cbc4e9bb2f46e82139cf9846c945323f77066e375be9becaca5c8cde70a51300178646742e9563e4fac11e5d84ed34abbd88cfae81c1291051b52faee1566ffb49049fef2faee4c44c9d92e14d77c89fefd9a7bba80884727e590882b678b46c0c155c8cba747e9fdee99151d5670f21a2b051a4d75e352f735075ea2a1f89ffc90409f8354efb2127cf9aac0a2a628bc97a16263dfa7d14cc3706b3c63f48c854d116e058e13c23991d1e5f7f40d3f933299a5510a54975c533afc1ff7204df0389258e9d795cb9102cda238fcce580f5deec8992e17a323ec98b777c095760227f56c6e16294b2712517efc5d9c462bdc8ab9a47a642860db0536465cb7ad4f726851766bb5457328d03616859bc5c32b73ea5a15acc1304ec38dcd31d6617ec801b21a02781028dbe188e82cbed4378288911faf23bb76707951761f367215507d0986beeda052f57716a8bd7cf2571a6806a9e1ab837f77b70afdad81514e49df4b1ebc10aba40b6c194e2cb0c086415d48cd1b5023465ad84e042c9a3561c3365a86c4d8a8def85f5baeafb6e054523b9e63956db7f10ac102f5237a80130ed3ca8965e9d23153bcd274640fef795e746c44d8d2bb3bf02da1f3ecd9335815ff880134072d71b1b3f256526da7827ba67a9ba6a0b8898a67945433455fbfe3abe790c36b5a5c596ed945ae2811b7d3ee856b89f75a7b6ed33e530143ba827c8bec356136cf5a9b55933765c605d4cd717b8bf1b7c9aee0fd8f426869e7a0d3311f00637dd3d84a41c88c706543791c41880b84493811f03bccb0caedf028ec112f9798016f0cddc4ce103eb7d3ce4f14f9db6111a8b99cf791c13fb7f2e17ee8b0cdb9bc04e139dbf231823ae7b8f7d953f2414a109e8be5e8db8224fbce3860a5f7fbbbc9774676370c42222e8f2786a029a2c6ffd3e5e61b58999747381a74d1059cc847aa2e23dd9c3b741b41352540ef0861d181f2dd1d40927f52171ab0e36ed58570269c82a0cba7593f3cd40cc33d5757e52a716d133d12cea38359f4066a17c7214db2db5eb13ac7ab47a9ee017a4b7abe6a973c46da5ec6535fa5512316af83e9e80f530fbf1aa97503dcd7efa4642c9d2e542f5af1bff060db0546a303523964a6be568a80ee295516ed6e88efc19e41c11503978355ad1a0c36ce82a28867d33b5439f025d9b04b8de7bd24385aceb68788b8d46cb0a4c86479056c0c0da42829712aef346056ed726f45694d60881456117ab45895e32ac15ff620655df6f16b48de3f139b015a472104de0f559af3ccd92c9bcade84f4d403cbeb6e05a266f7f15cebe5ebffbe8aef991565c30115ba01702c2906c75f1abe75a40b30993ce14b177a70551f5b02d2e5968ece9844d3216d988d5b78a9b8eba0a801c2820195b950fc48ac006e0db98273f3e54753658308ceefcffe8ec6860c6db55db115fcc0a3215fa8ad12c7bed3edc7ca844f7920acb70727fb1a6530dc038082b0eb48681f6f50bd6462ecee13a0cc9d9a2c2dff8be98be0438f115890959195436a0b57b118a3efce8c5635cff517b88000df2a4fd4ef52c3c6bd15373e90a6f918957ed7e9820abee74a13f9943306bd5151c0b3bdbdfd1c63720037e1b4f349c9272aa48890e61f64e3c4feed9e55e1a4c275c991ce109bd92ef48cf38c9b2fb277b510b561eeffcd780d9d4dc507c2c1e053078256e7d8cfed6987f947de50c67e119e038eef00020feee4e7eb3a7f18ee7a9b7bd235ed9abfbc006cd319fc72e4e43c008d16460633390342caee2695a7cf111c7bc593b41c50c40cd139c3e1936c350458737ed335385646928b31807f163c1a77136e8f4d315317c92bebf198b6e54180ff990e723d26f3b9a104938dd676253066bb5a4bd6b490eecd909c880396cae806d172a3385f1e67eb1a49491ba641588a22fdb06355368409a811dac0b8805bf4473abc9f78a0cb5dd02a482cf473749a0d66ea41a87f2e9086982220cc3b94a7a5e3557fe578af409103fa1cbad1888c8bfdc7298e768079976952dc280d6a5b15c9ca2fb3a4532d0bab73b5d065a9122535f8bac0e2c2153143577b4250f5c615b33efedcc99a6152c7112c30dc3068769bea9f75f534911b995bea7e36989a7e5f362ca876a1b4899cc184384b1510e3d5ab2870dda18cb5bf64b9edbe70d085094abec21fac51595c74e89a196b6dab9461136f61628c763cf4b7532a75dd04460cb26092a4a97cdc8d6e7eb96d214bfbd0d1921fcb2a7dd77e35e98dc3010420b88bad9f4e5f2a7487f0c86ec8e10da7add189e2a625ef7802f33290d72955716924f8f4651b09b14e455404d21dfa0a3f306904488cafd1ce0386aba3d9345715dc98ce9eeca77b9b812bab531caef16cbac9a0205ff70b23aeabbf63af8698750c25007b2119d2b5c14a59e9fa70ee12db2e2e30f027b62424d7aee4a03019ccd0e228cf5c339fd77ba023dd32a5957598c5bcdd9f94b3b3c90674dc2ec1b9cd70efebd7da026ef17529f503e2f3a487d79d7d6091427bc3801d902bf1576ec24fdcd8ce2dfde573db202d1f5c19dc919995fb2babf37d481acf6a1618cd8491a02c37d6c638855be4bc4f56d1132fac8f9707444b7168d8dabee7bd907910f34329964c6854b8d8764834885b76b46e1a1d95e3de3714ce473ae3cb863a8eb7c2385c34228c920ed50a51634ac12fbe555c6b68b42ade0b2918177d345418d74a4b193066118fd349a6830f682395788cc15858bd220847394c53c952e263c146a9395ea8de059a47c6a5114ff1554a09866100c7aed952a8eeb87c244e65eff35827b08f17d4f12033b25119cf1ec328f135b082bdbb0db738b2163ed0a555c0b814f503db1878eb7424d1c674dc7d6188c1bf1df4bbf154393068d44dcdebcd9c4a4d7ba3336756d34add82e6dc47a99bdf4d1d7f369b75cbef8a448cf34deab47315b558528a85ad3c1c30787fca71273a1bdad1b4a0e33c29aa981ab55b7190e5fd508578d98bd9aef96fddb1a8aee67f7c3b48af83a499816cdaf7ea01618160579aac1d1df9aa5aeaff1d4a080de988f5f6ed04098a1f8ef6122cf038b95819adb7cda397752ec182a1a301a426ad8de8a690d465b52f6eabe6800bdae3c407d37283fbb71151602b9161017c4848f43111ab40519b56beb675af0ce53f3325710fe6f83a02f02427c39f0c6ed57706dbe85805891fd1eae640abc77e2a715aaaa55825cb98d07a59b2910420386be8c018bbf384a8a544cd07d6dde9c0235d67d61a6f82ed3372cb432af708bd4525d9728f0b327fe0e26d6bc2c962e0a5ad7aed886452666870e70c393e45e5ca78f4a298074d698cdac316b211b1a7af60d43977c19d75f02b5f8d9b88322f98e796c8bc05e5fbdb1521c3218d8b595096baef4a4ecd2dd07a7c22441628dfb6732a96008af9e35ac200df2fc0e973e5ed1d1ef2d1921180944ac6c334c2093f9f12b686240d1866ab342b79c7d3f73270f90e363fe3e7430b4cfb9e13bd95fe52231d237ab779b1f1b228360f63a756eb1f7ffe859a818c2d2ada33f7a2db16919b1c7f60e78e3864a0bfe2059f312f45828fbdd57e96ba19078a421937ef0e9af4f24b691fb15a099ac24dec99c58b93e8eaf86f4b1440178a772535d57eb4f476581907072321b639dba06c420333728e1fc4b29ce9df8db986d5c55e50c12cc4b069219aeba58c317e1add45c15ff23a43d5f1c69a08b767887124fdc7b4a7542133f1a1703427502fd7206a6dc5cbdb579cd4a995d4fc50d81601aa05406838441875ac9f5cf6d1ef809bcc36680ff59bd377a6bb716a07c7e83a1183e10bd82fa19a72a770ff47d84668dd56bd516a111e2338cac130fa094487b0a41b7ab0abdf32f2dd51047ef79639c1fa290259315ebb5bca15ef304820ed7a80e04d1b7fe30ad2ebdc5cdc0bf9fd4e2075e46b6890c923c2c9e7670859d2dd1471247b7fa0535c8b37ae9fd5b63f21dce1ccea57c97688c989726fdc3f9890533b42d74864b630a91c675759c44b9e1ec124a44419042d050ec26155af50634546fde2cedc3eceb1480ec287fbbfabe14f176d23fc94d594124f66c50383a8db0d0c0010cc8175302f46346fbfc636d8068965a41a1962c7260d022b036a3e1789662e408bda5ccf0fcdaad64ae8942c3a5f3901d0fea8a3d59694e77b20eb11d99e26518f1d3203150d5104fad7fc01ae3f949d25da772a30bac8adb355df0a6c70e563fc86f6a1ec108b1731c9c1153755540eb67522f2dc6671e8eb7e502a583346fe0a2f1262c2e2e543ffef30ea249d3844f1ac4793c2f26a23830db8bad4cd2ba3045135813fdfbb2305ebfce72f49a6d48554000343045872e698ad4e2b468d9fafafef68b0a41940222e5bbf6f58497d9242bca687d9c5f847f26dc0ac8c8080b5f6dc733644f125c72da19be7cc0ee945917de53a080f606a1e1c26dcecd042098d85f0d5a87550c5335bf6413f75b973905311c4bd878d1eeaf79fabd6b515110f18bf980127cede102e5622da6a5720b7a198aee08c6e6e04033ff0e49f42e53ce56efc4810b0c9770774afe38ccf5312876f3749b0768d4a0cd51c0992e3c7cc280148b8aafc9bb3388133132074ce6b0ce1a45cd1df77f5e0f3952f46a5f586c6feea8c0caaa05274d1223ad4f9789e86454a2b0be271dc5e60b73525cb259772f0a4eb7796efdc3124aeecca78cd74953cbb189c79c1a0c048a5d0012e32988125c7942b457757d694ffcbf82623628864dcc3c027f9248198a53db5a92f20eff651912184361db01926920434d9f4a9126ba7f181add2cc2940678528c6c73646a43d3a25763d08487f092f0ee44b63a4e55b0216f09f7da98e73de3f0a820eab53e582567460686bb1dbad81359927e413b0db5c8a5b5669b1fb6e90318f0d22668bdbdf27c0a6ac6f4cc67c621e12a5b4b22d8de1dbec31afde086aca6435a8a83d1fce06de9d854b6a343e75f4325e25b48474317818d9ece0d95bf01a5bc931d50e0e332827727099293797702c050b4527eaec0b70de6428f059d16fd9101f4e674ebdd59fcb8108076b2ff3e4f8679338a73b1573d54c2bb128954478a3e3c7c537505ebc31ab0d3e2f1e986fba6070b9a21423b1af72aa3eaf537d1808c8202d3491b9902e9284ac9947eedd25330eb9378f3bb13831fe3c0a093828cb6c9ae04839eca0d212ff81134b8e23d11cac1cb2dc42f90d5aee4c42c212f139b8ca3a1153a52fcb72568680950ffa93b4c83fe40d3384cabdc9bca49615ce50b5bceaca956cbe979f115fcaa5ea918816804b931565d33ccdf8523e4ee26587fb779748d424a8ebe8227f6ebf40d12c949da54f7f1b084d3719c58716decd523e4582344c106210a63c487eef24a8f656b91dc7779da0bcfe6c5e936966d0fc05a7e07557246a01fbea6f0a56e3456b7259f40533b83dc8976bcc035b3696c567f7727128c3bd4d78195bb7ae66155678680c5afbde1ac13fc16d61c82f090d76303c7bbbd033f20cfae6341a52c6f47de80a1592b5cb56a7c73e57a049ef6d5ca3ec366e13e3cf4ca7ea45e5adb4a972adeab2d7dfbdc9a4bd520544d159f30fdc77271478f8b5571b67a3e284cd40759af3b9ff4fde6914a05efdfbc5ce4e50831c486761df86551b8b72e6000b2793a8bbb41888f075a7a4f562bf68f15b75c46bddeb4983e62cddb2d1a86c8c99192825c60ba78146bb2999386f01335696db14ae1af8534cec5d0556bc73f9328f2e02dcbb359500408a1213ebf3541f85e9f93afd665cd35bb1749316d41557ff4827815e8d4fb2d0d5d1cc3484895e7fc21ba8047fe17b3d443f5e3c1339dc1ce2e4ece992388a00841adfcd5e8ef33190643ab0f7cb5c286ca3098376e434eb42bb7594b6de0e0a17f2cff112d6f65cc63824bea23e796a070e72503d6ede52287d964f9c8e205d6844fef5b2192616f2618687238bab7957814b7a2f43b848b6c25bed8315f13d52098ce4548dad2ef1322e41bcdfe1d9615c43b26f5c0d45db9c2a24c6a157889299b73e94c91b60cdea970de292463204de3abdd24c84f6c561863b989f9b99776ad102b78fa500dbf5c20aad33144e2ca88ba895e31a32b0a9b56c4d4d3d1e35184cc398c398a7d75665a3d49282b8f5968351687cd14a7bfba50fb044b6067d5ba6d0bf4a4582b89ab02fb74a6166701b8bf1b702c29ac05bd69a48591c2b39f1dae32511dc336415cc9f632503c317d88165b9f21e0cd3ca1f8d45b2a80db4b2167e7aa81f25696be28aa7674280b15559a8d98a395211c04ffa362c08444c875e05371865d00f7b8f56023a86b7a7f7c5c0eae4e8101ef0ffe161c12612a08cf94354826ed60777d76e0fa3cf9d3dc81474dc079b6e0d2ebe10ff3c703e378f706ea88c75612c3c82da84e8479f30c266625cdaf09d759a1a948608dba412da7c21600e7929f75540047bce638a503dc80c13376a835f53d93ffc7fa6330ad0c2a674a613c43359c9e46a3185d0ca5c3c8d73a57c0e2d646880eb369981d5a3395352328d2d66097a9ea4078b3567a6cb4cd8c215cc020856ef03d45c393ee72168750448fa1a18601a875983166082c2b04841ffe97f013b979bb1570bc2b95753be0f4c299d128bd85fcc863b4ca225d8e3a0f5786b3576df16c27aa2866f1394fc3ee197a7bd546fd89772b8886b213878678b340daa945d8e1be753191f7bb50bac010e65ba8d11136fe6958510e26c517ba5cc06d743a8d7d7164cc14fb82b17edfc3739844659548588dff9733df3bc892acee44dda210d4ae92e5a76bce6afb9781212cdbd18e655f9dfeed49d4e09e58951d757a77afd7ba0ea8be38ad761f0fb4758c7a51319680fe7144a7ead20707d14b9d7ea8f42ff66f0af0a5ee1b5a9648eb95226f22c111ae484e89a7cc5109aa357d39c174e96df12b73a12c2acff6d4b815a8fcfe15fc0dbb7da23594a92deea72c988474c4be3accace2fb1ffa24d0c9577bb2da435fdea7ed378b27b25ca604729f68ba3320a3c1305615447223e7d880ff487eb33367d0d908140c56e409c4089dca30f790d0c23a93ac4a2955b9b352d7814806c167d70542fc97915da0fd0319533feb20f874e06e35575dfd0ad33c12b758426844f3221734edafd3042037e68d635e1790cb33aee614375520002ec76eb0afc71b5ee547601b2c9eabad9948f094569888927efbbefc3cc537aff8cffed039b8a2ffab4abbbef0874785baef4c8ab356d569268fa4f9af57e8e0bc70df4c5ddf3d96286be1fd19b9a0c757c8711204766c72f486fc957275b9e0f30cfbbec24bd14cb8edc876d9475927d8fcaa223b53a3ece176c196f057bbaebbf986dbd4f5f3705954235d8802a5513a127d0f4348919c923ec024759e81090e085d67dc0fe5a94d329975d48c93e4c4abaf58c1720a9af035b2e2db24a30b7cb97386c1d483103c4a5359b5e1c0eec7a29924da3e35d0bc48a3068cd931f2c69f22212a4c64537b60e248ea7d42d62ddaef6dbcf772da15796e0339e283c6c06959e55d55e4968494f049bbb401cda922d7052a575070ecbea4589568c53396a156663554d63356512ec39f5bdb3864d5a74247369ce089b370ef9aca2dd47a657c98185bbe7e54308457086d3a9a2e8336673a8ff668630eb18dc14b27df5fab0776937573aa9d3822ba02fc3f6332608e4d1344e69471343778bdd9c63e718d6d0f2257c8f6dc37e668084545a8bea9814dcc77cc451d7f2c9e39288aa1e6f2d2fbfa1df9cb6661c2c46032360eb5063b5dbdc355fe1aeca4cf5fb715d238c41144742ade45d209225d2033b10b667f6b2d60f7743776a0c181905edc717e353d36f76ae2cfd73183993585e1cc06001e4ef40f25f3a77e7d3cef75e62b1603961cd677d61abb9b2f43db2802822846c6e99c261ec338dc34ff102c0706af55320f47c7d2586b6419ee70479ad08a1a46de07938d113c898cd27469ae64994f6d41d5790fc85e1bfb1c1c43f00ee00b2e2da9540422880d7ce70c1afa4b647381174d2a1c982b38b1b235fa4e2ef614e7a99cac61bfd4ed5dbb3734aa342245161ba923b66be7ab176d354fc98688ad594694713ef4d22f05bdaeb50279a9356bebe161f92a6a6a71a5b0cab26a5f2be1753984accb60334bedf457732d49d5bb744c43812a63a87ac0d6f6053dd779fd3b4ed08fe6a15e907f46fd6546aa07eedece25c2e40563ce7b546feaae57fc6c47421f9c33b74a4dd854cd6ae05ab2621a9ad7e4aff7175e952749191fd10a647b6956fea10a76353e837808b0549d51a3e295250f74b54c915435b3ef33cb3240c93b4286ba88858b39a106382afe320711f66c4cdc9c014050e077192f1414b24a54e8fd1eb94f59d47b208f57c7f323ea08186876f3ea8d97c47547d8a76fa150193f14e27e21e4868232d9297d4e6495d80de70f6c9782efd83a625abc8f7d89fc60302afc118e1c9290e84b13e50d4a5207761144311a5e0170c5d2cce98511b94c409ae526e28f4c34b95bfb9bfd0b5c25acfafe22599e22589937835f4d834a8f725ce7c8d4288d30ed986fa4f8974a0e8c77a53dfc9bd10d64fabe448d8dd82dd59c41cc9d3540e20db12601dc461b3a30ca8d41f11bdf0d8ae49cdd2d2bccd251212a36fe6cb7d267c1b3113231ba76c61de33ee82034160410384b96f354e14fd25b65b88cbbe9324d0f9d09a9e91d9f375818a10babbf9726287d1e38cf89f27fbfcc0ee6b819e6f86fc673fb795c7765cadaf4859c63b8aeb77b9154a518d65ab794d37a4f313c7fca02e275b6322627ebc18e65674cc0b4645ac534d722e7cd051f0851d739e71095a99f6b8618093c125a38810eca73034c198a9c70226385128be8e9a4f1b918c1dbcc784d8dd6645b4348171476b1e27c4c223c0cbf588bcf875698e4b0ec4c3405dd3048091065816fe5a047b6d28704091c48bbe1d4e830c88cd8f8970f6f459efe17c0cfa1c6f06872ca011c321def71aabc8e1bd9ee113974b235606367519384de7a6146f28e95f40dd54abf147977ade4310d371262f5e7b584292278298a300f5def5dca027ccfc519104a017483e5f94405a43233389278f2c99ae80ef01882623a4a66f3b91a0f4742219b481f52e9a236c9a175def99a4fba8d576e24588f67ce2653c530b6b8d1ea448de496056bf7e68cf32bae5ce480a1f21fc5f774761525044872c4b10c365977ce71e345e47ce052fe54e5a58da940289ac0c060618e39abd8fe7e238c4a49ebfca316d050ad4f11936baa1ff952079f81358dcd4d21f3927b199d9ece40078464f40f29339dcc2c36b9f2eba942dbbcd3acf0a81433357dbdc3edc95d239a1f790e254b1851911a6b9d45715bd4c4d317653841c9582e2baf20cabcdcfd08f82225e5995b2a8268407f4169ba97fabfb5aad0f5a0fcbbcd6bc837a62fd4eea997fb87eeef800bf012a297ab09dd68f6a0a77aa96ee5cc62512a5b4c20e1d37bd993849e75381289cdf0b3e06b8cbb7a83a2dff460a41d43eb2f5e3e53c23c6e6f00923bb7b988c0fa2556dcd0dff85fc8ade8577ee452b416dba0d841b0b262bce4d34a4a671113c2a1fd84a99145a37870748f15f6c4326643c27a34d22fd00693f6c8942384671f820898c1df124ced6233e41bdfc08033e6cb142a9a85c25a5872fc7720f95656ec48edc9d5fd287148898c0dee55eb0f3f5738ac3f979f1b5462b5ecd852947166faa50e12c386d72857ea5566c4fd01e805c5c6ceec3ba6a772f77ffd4675a12bfced5706746da96773e848438a307eb831ca10b0b903abbe3b4876f4234f7090f4098a223a2ac4833a79f61dccdd7c503994a89d5e46efab67fcf6f843cec1ab022a4a364a630daadcc506e34b24ff8f052a0ae9cfcafa986e6d399e515bb3bbce1af108242270ed9e0236882e1ad1403c72601b805c9b74074205c302cabe19baa419d3db5c0cd830a6053d56490744ac7af900dc03f7fba37d6c3d48a6227ce5d5dd1ae85eb1ce3dcd0152095596df89ab32a735e319052a2d985dd0e2ddf1c64a547d123f57151b9065aeef443141d8041addfd0de6fa16492b6fc2bc9ca30e51381454080e5e61f4e8824c6cfd8d19eefd6e464d63fe7dfeaee3318e93d662275e4fa764dfbd4b398c338696163912ef7dace7e302225a2339c0092faafb7d1ca116f80fc769e5b3b1c4cce71e9df47985f362a7c4cb7f9d130f60b56a118f1da702f2436f75f12027a547fcd835e47b0f67189f7cbd5ecd798dd2330f5ccc35e15e8248adccee0ecd7e7f81377d38d676f511740f10b7b7c6a20410b71d0e408a7afbd4bc86a1f404f730f86b4f55f2a0539d024e894de454e56262fe4abc3d1c81909550c77f7f54cf11e5c9ea34252b982e4fac21604f5ce8d6eebdf78633ada4985e735c54109f1d9af2d02395f43eb6c792b31ab5ce0039f8eb65f7d7c3877415ed9be7b731a9c60c638f75799e6ecbcfb33709f1a3ac77ee148cd883d35cd9aaa64b0135fd37b92503757bd1cf1c14f791638c3b330a407a125d05437daa7d30778e3bc15cb0c17788e8bc2b11fb802594c8546d7c15e8b8e295a005bf4abc24b95c2afac685397eabe770ee1e83e66b1ed981a959790f796c048cf4a7da507c1d11e406e1c41b880c5e76719aab42609847da9e98106a9a5417a0872c2a68e684f57bd2fbc9c1041a012f939c0f66ce930ed2cf995798b995090b4818b30578a9bab694fac3dfdcd3f9aa6e5dfe386bd29ebef666238d691e0a6e7c16d84ca5da8eb0da07ad51cc4c078633869beebf6b5790fc4eefc676177a7c5433b66bad867b7d8b154006adb58b86cea6b1e8a940b81ec83d0e2b31cc30fe682a899386f7d97d9b6fd3e44f2d3693fc8f3231e496367806e0aa56990dd5cbbbfff97ad2a604edef43594e40c8d2aba0d5aa573a1b7b0eb983e79dcc50728d20bc4c3f3462a3fe014ea76c6b9f6f886490e7269661dea61e5cf5b1ab97baf20a46966fc32d2e2863085d9a8a09936054c34a87bb520b23f9f1a574ac4fdc96896c961dddf0661dbadc11941e79df45c6740e339299a8184b5ee22e7a1d63b2631d8cd8b5adbc967389a513c0425c6d7e30ad4eef956aeb63dd54cdbd9e100eedd419e3012329ac5ad3f407a76cad1af2f8f3cbc6673bf263bc126493c9e2d44adc7a6a29af34cb90ec3afbf7f02768f8f502e7cdc495b32c75df4b6b2e35f975b394004c9658eff2d61b10b72e0cc8d935e2e0d35fc1c09cd5bc22661c0979b2f23bc77932a77e247ec170c82c2ea4976f89e9acbedafce6d2750d58aa0f6e099ba596f556c62e36ca9198d9ff1b7bc2850b407fbc882f9bfd22e3d428b70429cdc85a05d1b4e56839e21924dd3f023a0412d85e088fa8e12e092a6b2c378cc232e01b96253b6e0653ef0c17eeea5df5fa654a0c506a2839abd5ed69e1a30c29df2d9da281b98a30911c4835a2619d779a68b4f81626136a58547e9c564a15a615e2f4c1122f4a01b5d9672d305ce403051c2b65702d214d7d014c6688e1913dc15b0596085dcc2fd085588cf735000530518524547a9d2b68a1b52df2491decd65ec0ad1b04f637574d6203588d25613203967452fd530c280c455e04eb5e2b35bd204937bb7048e6c4f3e2c18f04dee07d8ba3f57618bdbbd2127b263a5423bce49f2fed4aec06d75071cb6ca76637a7f17cd6511daa6a8ecac5e35472876a4b38db3ecac7395e50690cd34c4f6f27d8d855289dbb5573538153017ace426f2ee8f09cacc17649eae8b3ce574436168e555be21c77ea068fadd338ceb208795c1c4aaac6b0129a9b047b31927115bd32166c8d3272d6817c418f78e9bb9eb326562e4a08e658d1a2fd28233a83541628a09c880592d5445952ac1d2484c431122e6758e117d9188189676a1d41565f37e101f95e459e0dd6d4d98c4a0f7279c9080f8a1caa8e60a2f0412b8e9e35981c22c70ad34e54a9fc941afaf287d0ccb260d72ee19b89833a9117cd5b6b932980e0b86df547c96e6a2d48ca28c250fbcf4c5a5ff704a8d6988b1dd4d187c088b555eb2383d050a540fad1072279863384c9b0336dd53cd1c606b59e29699e71888b17e04750cbaf7b7599fcb176ce14729821e8401a31f3078428c3039f1055cfff939ff1917b0bb1ad315144d85a56ffdaaa915be410e51886cabe1a363217c4c7e54bce6f362fe1574dc1a816e7a48827e9a2af2dcbcc97e80f6bc6e0e482c56b17037e97df4fcc49cbb34225a25a7ff0e6edcd041406d4bd02880095f7408583add4cd048bbb5ec174d6733e1e35790425ed9dcc6b16c5dfc4370340f97eed468688f5dfb5ac0e5a7872c0641fdd8b417f66da24eaf211a9a29b59b8d7a643910910dfa221f53ace46f9096194afa4f1596c6337b3e0e960c3893865f77bc08ee9b1e50d72a165eda3f93359cb538382a8314ab4abaacaa9aeb432d8dcc8c005b96a829507ab5b95800a5273dd02d4721b6a12a02777c79bd4500d4a2bdfcccd89fa73bac66108d85c77b906bad549938f27771c8d2e3f85eb5a3811c63dea7c42298f05a6d2a5f8fa69805e20910356d312aaf371ae3878464925802e1aed5d3a01560c690d0cc7e83710a2639b899d6c3a8fd878ab823d7bc63ec4ee749ed10c001bf64ea4d8910589933b994d2a96ca2523c804fea7b337580b2f5643caed300f35b1fb167b322601f73cce51f2ebe567e96e8e69438c5a0448e7c1810dbefe915347bd3a160bbbf7122f231542f0da42de2038581061768573f8edf0be31abab5329f0b7cb2e656c0d860f38a06c0f5b1d690cb33f14d31129f8f094f442a73f51c2b00efadee4aa297375e2b6d794407f8cfaa1c29bce22d574fb436e016544c16b94668b88fc56d680b9c38d447bd0530c14138aa91a1bc00c65ceac416bf5ebb5a6d9457f20d1313012f5f29f228f8e16d2626c2dc0d9f260cfc539cde9ccf879111f6b91034e0c4d27d5ff05bee605e7801d8713567e546687f80dc101e39b038f64affe1c98d7e4ffe903815679af3755343c1476efb945333396a02b3ffc7743f57954905655a7a0a26dc89be656b2548cd01e64865c989179a3a1746836a20b832201987fb6a32616e1ad26afd0140f9693fce38a9acad43d8b7046d049004ac76e1c12380c7054f7814dca824a67538b3429d7c3771954aeeb92fe36e0bd1c429c36fdc4435b52fa73850cb103a47dae7d841b191e1b2fff867349f0b5d431b24a89464be3f81884d8db724b8af0764373572e60914d17d46896b80b1cc7d7a1bd92220de1176e02b9d0e048f6cafeaeaf0b4b5592b488292821c971467855d1f7bc1af56c327159c5e557e06222a217b1da08b64a1535bb84f0817b7bfc2510e68df2ff88ac78631689169f8ba014b1556ac70342609f8f41cbfe0dab82a63fdbf614ca93654f00d1c31b0a48c123080f56fc370f2ed69541e19cd1dbe69da70b107c7e5efd92a786452170eeda4765471824db01858e1f76f914f1c37f2a25fd480acb4dbbe76db67c72792dd85ebf35a6828d5da83e8e9c1e9e9135b9a714f49a090a3dc5ccd59ae831dc218d00872b16731c3ac3afc752263c55bdb0cd3876221d559024e6758accc71dff50ed52936ed904c84428ea4813184ded72e72429a7687963e17e392aa13ab53d15b24d87d124e5bc092c6a86b53d6ee2d8f6efb235898bfe8a868406a312d9ca280201a8cbc445a6721a96feb2ea0a6941fca160573372a08f1ee258b7a5dd768cd0c5488f1e300a80f5eff5de3eff4b76a3db21d106060515b7f263d5b201e1888a01a1663a8b26b8bb03e6a3b1dddb9ca92c197112eb9c98d35915c756faef15b2349ca8d97a7af8f4833cbdb22effe2d59199df371a0ff93345e2c3eed77d6317e1756d43200087b8e3d66f64ca39531ce6d16a7e24cb457a06303e24ae9e3ec9a9029b7b7ea45b2013b71c3e208e3ffae1446244976d33aba76a1419e37dc324af8029a95ef02a1b1ed73d208a07d472e597fba619a341536e214fa53342ddd5526a2c8e5dcd6746729e403530be8da0bdb7c1cc4f44d8c3acbb1172ecb5f0e96f94c14addc518a4cd301a5944be090bdbffc26151050ea320843ca29bb7c10b0314b6a0167da98189b134196cf7e84bb08cdf09eaed7847192c4f0fea51a5674e49222575217bf0c3d86c31ddeb62a00da4f8b223f1a51d7f490eaada486d6cb51594db90ab3c64224c37a58cbab97591a84e7cbc2eea16831e5c15a7b1760a79bec4d42226dcd3796806ff687a7116fe57dfead7737228df194e241688f1c2300797b6fc695d749045db0868b23dcd77c050700c3255867d60592357fe00d7584ba39d104eea81117b909f92356dc33aa4081041eebf9428de9a30bfc876ebbfadc02077599ba587cd857c08df088f37167d701aa37f83958f75c5344529217ec02250eb013c7a59cfe64e4686c2a130c7a3e01a446574f2c128079e98024059d507c1ee6398bcad94925ae853d0783a2c7365efdcd878f074cdf4132cbaa70b37de71037c0bea554c30a8056b9bbe2a40a4423c18f6992cfd96e61b4535853468a731c8be76abe44a6e0ab89006301ce62c8ca19139c5d857bddd22d75d19a28e7315b578cd6d21c2c646f4b005c625d75c2134ef515169a437c9189edd46ca5c514c9c9d30a248fa79eda74f48f6e795d558ad84afbc05b653faf42d2a785dda04003bb7920fe4105d2e1e3603b9721c53e3a28638647596d2ffa5a077a977d02d97fbb1a0d4854a04ea2585867428a863ed5b0f7edbc88dc67f207affafb12364b769592ddc4dc2701431b47b180aa59e128f5429a407b66f86e9fa4149470b1358c9bb855ffe92c5441ca1b7f7da24133a2bf317322b9e694b15cec25f3c31a3cbaca589cb8347a741a43f9f2a3958c1aa73ffa5002f4ec486ada49b43ac0cd7f19bb5955b3e807346fde332b5608470f680760afef61b947e3086e4f6dab73a1ce9a4f2b25943e4dfb19a316b98a423e3567a4392cf2fab306681fa94669fea5643dcca213c5b8c6eb9919d2e27b21341435d2f7b83ab8426a8906d307471dae3285bc3e6beb6286ad8eca80d460db2ed930e77a21eb238a936d718bff8fcfc277094a252c1f79c71c09561327144ad90c60e83e055afe55c5d22e5df8f794f6450f56e10ac2faf760e76e22ce915566ac5f9ed5d307751cd93429ae5555bc98488b38b2550fbc086c15b2c97022ca2be1292b6d87ff2a6c3a35c43688430ceaed963dbaf6f44f179f3b15d4811e22a15a6c227b840c267273f65a52e30e81637ab179417dfd0ec0e7ce8360aebebc1ae927351b330472d4c3f6d7fd68fe980bcb90ce3bbc7350e4a9c1487299553912827d4ab1a9ea63bab2bd0fee450784ecd3b0e20bd3cc88d0c311500380e3ec9c25f8401b079d927e10cb26700a7c95af08b19d8dd48ca61c8a1ca49ce41f55caf1a6364c91bea8f1d0868fad6bbc3aa3d7d4c0459a00e5e4ccee492c32ba9715b3d1eca35abe3ff0364ce7e4addb368336a6f7b92920be769cfdeab1355b115378931cfafaeff61e541d69e44352845c18fba58a7526e246ec07a7f872446b33f10f7ffbaf7ce7da8679276e0f3398b9d23ba26bffa8f382c456b499128ad8b6a78beb1faf5e155175695ee62750fa312c073596cbc639eff411ca8e2ca2d2b8f93255d76d5a5bf06f4f91ee56e1dd7dd8b94e254acc2bb0143df668c4a50120f87592ecfaeb33a6a2775983d94523713ffa5626ea4d4c9945bc7da8030755cc6f136ef7b5cd17d35b695cb7981f770e0e7b11cbcd46e40f27553aa0f7dec7b5f3c3448c89ceb20089d635956325dea5769069c2ce23008b6b2de198db44a72576cc0244ed829e43ca54ac29343c677f9f3adf3b60c8a96e8ab6a9f54d6e96aa03963dde349c36177c01272e9ecc2d8ae3cfabe85e9ae29d81c54b2ed89261acdfff2a1c85df9ae8c791b9a06fcadd281220ac0a6a303e6f8a573e8eb65081ce9899e09d6b4af23ed46a61ec204adde41cf9d3414a67fcde34d2b1142da86aea0380776903bf54d411cab1ad96077caa00cb45d5d639fae6396c0daec99799b55156a23383df27e78de3dfbc414779b1727d685363f57f7b2e6f5272b56d69a0cb2a9c1c6d962d40f703eacdb07baa6a6b8d180a30a9ca0756aff420e717b6afe73dec85968540641c6e93973b7ca492c1ec9b00b4449d35b48b3e03146d22a91d1b56597406728f70794ef6f0ca7ddc1f73fc2821f30805c1ee0110925f71c7e8ea47c0eae75ef0e854c2adacf0a8e17893fca7f5e1877be0b7862ad44dc3ec42396d8edbe6fdf43be32f866195f9e036afd235246c7d8727fa9708da6fa2b2c8733feb798baa1388618a992bdc19e13d9ebe2b08f6ab906fbaf18e3b3022347067c6d8215e834f2514960edde5fff3f3fcea47310a548b6c7c580decb441f86784e22f8f4054a681fc31856c06a4f2a850d5f12a86cad6eab836e1f835ed587427b056f486d266631a078cf2ff0cd003dac4b70c9ad2ec770835a920154c81574d60ac9aebbe6ff3edce773213d26097fe2f3db9a504edf1827958a2a02f5d83660988827aa48ecfe5c8fe3efb04edf46e3bd2196e319beb1df4bf8e36c8708cb51343755457e0d067459d0c9cb32f3db93d94e56c3fd84e5683ff4396dd0aab3d18223aab2f052309691d6f0c01bc76fff7e349c94ef5a6cb5e494f39c9ca598cc372219a8081084dd442bf761a325ec716d2630dbdd9744127ceb764137eabc8dcadc6e4be908b574c65432b002cb085740439bb85c52ef759bbfd1ae7975a2136a221ee3ab7ee37a15561cc255668d855eb6d95b1b0a4c2f4753cb6cd4cd8d90379810431f98d6f527bd6e2b4bd84d81f9ec1a13f75a7c0f788e2d07a1002d4a97c49c801d238cdb41117fd45785a2c7f0c27ef91b9d783a63c4217a3395d24c8618b084180495cdd8b542a69c6b0d307abefee8238767751735ebebdc7729d3aadfe7314e3d06367010ba03b6087e30f5371fc9d2aa7e3093e531e2c3797d739a638fb62205d5354bdfffd5388b4d835656de3577306a143432ed8ca3d2d5b8df7a0a9da76f21c914d4e634d89c61c6a03a63db8314fca6fed31a0f01949499ef9c1838b68e528f46f41566ce1387634f05806a1e19d36b46afb5ec18af9d935a1ef5d93b4565bb7b5314ef2b04610d9d86507972709728f9f2224e5a7cadf5cb73bdd10b2ecca3558faa6a3104720fb66985422339b3da703b142700431cae99d38ead1d2e73b8a8996c13a5698cd56696ced11f3ed0453217bc7bfbc1a8491f4b0fd04502950057f434c7c554482efeabb4e0d7ccdec6ce6cea7c870cf27417ef93810357ad7f79508b0cbc861edfa72018c888c00679bba90fcbe379bb9a3240ce66bee136948668730773236fe3ea3cb2d49694f7f0ec94255a9f31dad4c1e8695339ee52462477e0cafe2fe198c188cbfab0e81a4e2f6216d6b49a4ab2532b17a0f01c03ac4d1a044049226a87ec5a160e9eff15ee9218d5b8bd23675399f8fcc0105b79d5142b367382d1ff947c8a6d1897167449cd7a419b2efd429cecc344a959275a9f2d2e66de8e3832586b5f5a740ee57855656154f9372358c7012d0947d489e16f9c3e8dff07293bf4b27aa3e44be0d8adcac19c3ed92bd5c5fc06a44c2f9f19c4365bb8526ae1c007b1c76f237948c9b71fa0927e0bb1db0d60081790e54ac2295ecfd9ab2d5aee0d83977444662c7e0863adf4cb5a7aaf665193984ecde3d75c39e170e55336e8ee45f31ae1f541584d9581dd6e4d966f9692ebddd7e3bdaee05bcb1907dc57766b1448cf34878d54443af790982835ba0eabf6a6f4ff247313d433e98d2c408b126732cf8daf4238d4e2b5a4ca9d81909b9c945a622d3c8fb96357fe9bb4611518545ce75a08b1c1d7bfcddd0734849944d14379f549facbb14e2a9d7801e86a250868584145d027e0371f9ae925998c10133d722d767a38dfdbab9752cc7e5c78244893ae46bd7e90e3e9fc9f3d2a5f3b262370038df9a1013c16da4c8395f4cc0b259681b539c3e07242bf808df6545ee57d6aea053f927fc5a389262d7ab14c3b5d23cb94309720163c598e3c489637bc12134ed8a76502965a5f3d000168fdbe18bc2507c971ad70809c88825b584c1b874c74bee807ce420735027f184c8b9d5fb59eb79cb52cb943cecec63de0bd7d29a97718206a0a3e270b6d329bb656897d0193c57535ac8daa3b208c0f2f4ae527c396e3553cd108875017d1e22f739f1cb79ca9c137000f78a32528a0e50ab9859e4ed75ac440535b7f2e212d7c37e4c0088fdb433611bc8fa547bbaf4c7265d572001d0f0765f0b1d319b3b4388136728c4df6cb08693a5c78f661f472e5d62950492b8c67d82a43ffead8250772037f01cf092d17945b1e4c6bbb974e35b283bc70a003bd391db1d9b8ad505fc6022f4c6dacb6d18824b0238e96e9afa3324de87ecff32021597c2ba81e575b897e10bb557e3a38cb96ee2d157b6dc2650f80db08e28253e20539bf2b94b3f1775fb170866de2be44989df4b8515a30ca48496218a56df06104fdc5580f341cc4477c422792b5dff2cff25414b9cc24420272181cbf969472ed28ae637c24320a9ca9e441a326b614c6fffcd51e573f93700f1feb29b04587e0cd3b286bb0317493c5a4ce06a4844db5199051fffda2f0cda1fe33416cb44b4d4225ef02e48c26a458e66b4115fd9bd8edae1ec890d5ce1b7a20e2040df66a651b08f47b61e43f894c05c1e33801a9b0fdc3e34ec8952e9252b44eee9396f6f3616f01fef317974fd06bae27db41e461282baf90b7e53865929adb14233593c6ff1f181754586f1a7488ee8b67001435ebda799cf8ca3e9e76245e9b3e475cb00a5be449852647f0a9abd40ae7841e2cf2c3928c70db069d0f6b41a00505d38d7690977f1fdd8372c3ad0f7c79d204fac27cfd20a32a3f41e97d76848d0fb564ecdfccf95c89a9ff5c11ccc86c4f4b0341915be422d6e7380d0785961b4237a901985b6da885359e6dd4641e6d5cceaf77bb2580826c4ec922383d10b9f0b73d5cfceb52c6e573b2ae6919b9a9f0dab5589638bf32e65af1714e9eb8236539ca139003619c8c2d0805bc2ae55019980094fabb1362687dc045b2a6956e6fbf6ed294255873c77534f983e9aa094b60f2ae9541ef8c3d7c5ef51ab4edbbc64cb776bfb2d4ef3057ddb157b7d6c6ab1439b329f7dca5049858ffa591f9490b13bfc4df2a00da206df8ef1aa80788b93c053122a21949b42e0e2feaf26b9deeb9174744b8ff30a6655e1d4f97c65abb19ed95a5aa884e07f8625cc8db1d3895cf8922f494b5365af37b57ce80761dcc7d64733588217e3fb917ea6cdc56b4aab1e3676d9a2f43580f4fafc9babe9e9ef8cca157f825b3ad28e63abc8376a9b4ee1b2708c2f8fdd12553a437ef9e8bc3201e40e274ada0302ceda40f84efffb55c49faa0749bb3e495d35ccf61e86fcab71f2e7dc31d1d7adcd69d5f4d4a3fe593f828257a32dff6a0d64e9fdfcd9b1d719dfc21acf35d8ca8d4dc69d80840d56e84c7bb32a4ea4b4b95ba580e112f9c31677491ffcaa6bb98d83c79a8632a99f4387c3af22bac2736915b77402059ad84b7967521bc0c74cc587741b449793a27a1553ca1025e73426c81e020b9585f6e7131b455115d9ef1073258b83012e419b4d658872b54309d7eab12c7e0f469701f861cb1de808021fbfac20696fb18e4d1c70fb7c21f9b3954ea5d442be9d4cc52c73cfae3f560cdb9bb45db1b52e9822a4b0288a4fc6961a81c0d24fa518a96c0294e71b93502ce73c7dda5eb921de8e04c221f0157286d5d351027b9d4e17a9085fa486f83a8a2351079f58e7ca63b56c59440abb2fe3f5869047228533996fbfcdfac277e0ac26f698117a2da65f6561e8d9160955054a85cb11abb51961d7ecabd8902eb0a0e46ce1c77c791d4495bf375f32938db83e2b7a9a5d9f10115a3a677c255555ee96babe29b2f337279dd7f1c0e6353fd5ec60fb11d6823cd198509797b5d0be804d984b37a85e5276218f5038918df345209a2cef4f041be0662a33c2d5a8f03a2a0a2297b15d70369e05b61a16b99721765ee0c68625b56f17fbce8fff48a2f876f60bb976da9525804d72a0446373e6a98835cb3982c2c32c5fae8649b2a7fea461369d6ba11f1dabd2c68630bf778518e1fce574acf08b24dfa889927b115a19d05c5a22f938495ecd467edee3483ede7183be842f5408742f892bed558b1432f3a781fd30dfcc574357ba03a94bef8dec9d71112174b3f0862b6c0eca8b6a54759a985ca20226d629f170d9e688e511a5f3b4fda5340a641c4d96b01ce770cab75a55f60f4a7ac1d32461737146021b1e56be40d2fd028980a108ce7ca7af5b878371d3f7b79a1edc526e6a2ce4031e752e9debacc7dcb82d3c4828605cd76bab15bf76910b8617fee43118fc91ac07f0e2b5661daa2148170d16fb861c7e94e6100c9e31226fde6691622968eb0258edb3704eff3bed2fa9e790df4f07658dc7e8a0847df3ec871b62bf8c0b01499037ca7b065d2241ab21060188a8851cb605510d2ac35a0075a27d9a585cb8738b05b1b565e9ac39e85763126605d14a32cdbd5a44e1f816291b1634e493e8e4531397a854fb0bef7b6b1a0b09abc01f711386f4a1c4ad382a546e00600eefca271cc40dc1bc57f82558f8d43a7ac638e1d709ea30680c4ff6f1703276f3132ecf419f038b4cbd631c1033aec8ebec7fddc2d4f697808983957583e6ea44d9f5b2b8b4896bf3ba6153b819980e4e7a063e843d66114a0e672b2ed3ff69e003647e48dbd2a121ad0b8d963d409dbe851197c37cbb69c1602ecb4c24355fc782d3f5279cc8ce26a11450380b34a89d9f8cbcd08aa38f67cc39ec14bd879839416bbd4b833569d3a5f95621939290401ee155ee8d4cb0eb100f474dd3e960a7ca0ed84ba8804fba7a4332239047910bf17222f592c54972ff77def684ef61af9151371efcc1fd5b8b5c40af5de5557fdf4f484c809a5cc28d535359d3bc9c01ab7c7656e18fef4b114764c58e47575007cca27566072c9e8707d1669f4deeec090ad1f4f7785149619e64320b2f1572bd0955c0972354d3a291936c40ef987293800eb6f815a7198aca6abb9bf15ee190e3130775724b23985f52d97ee3d4423aef387217b07a5e87d3470acf8ac977ffcee1af8ea4183789bc9045a50e995b853f318ec00de71333e2a25870e0d146fd9eeb3a7f800bc0cfb0f1062940ff3ee9a1b353582f62b3d0a4e3df3ba2f1eae49527c2794ec101612eec911309299b8bbae21e84e24537bcbf092babafc391bc025073a11773b20653b98492d9d8e7d69e5b390bf28cf5d3475ce48c15af1f1798cfea0f3bbaf2eef7cdfc120528d0b37283a56a4b73f4b9bace7a8528365e337aef2ffbdcbe3973e10e3aa7426476c2284fd3756aabbd08b08ecbf3a4a839c2bb583343a852b004d428b73df33ee14ca6c17c14987750b5e728a5493323709b969573723b31777f9a41756e37cea854d60014dabbb1ebf79fd222e7e04b29e7609e7f3e72a97415d1186cf07a346031dd6f042e06996e27f82d45f9e079877e0d8275671fb900769ee19faf3f7d65c4758c23712b5ce96b709fae15ca330da7193e50b9541ace5046bab84fc3e1c10591455a779f7a9a2acc4f0fe220b7b950f07c4acf6c7bed8897f7d8c43bac7ff163192953f6c518768f0c0503d71d870661c015fa30da0dcf17fa928a2111d7edf39f385990f58372903324e6a144c8f0916f23bec49e64d06e2a0f7e52374727e8364bebc3e122d2e7c2cfd474518ce563a9dd3eb2ba6fd95e1d921435c9791c6a9ab98587bb5c36e94f341ee013905fc62d0bfb906f9940f77374d29515906476b1a05fe92e559dc3cbe555fe7340bd228fc0b472baf15d34bb5da36155c6f9693b66e0773944befeab0ddd7d56bfd3810d3ecaf508d854a6257cebd89be36772e8a0d0283fd0df113921359047e44b82615e5e2f1b5be5a154d7d87c8da58468430a3b040d602ab1ff8c433e378453c319e5057078469a75824566f5c08db6541d70ec752d11f0c4e18c2ad5bc6cf6ed6296c201978f338dcdfa3de8e0c7bf772fd844df3cff2e59b3c8abedd47c28b600a31deeafe54f37788220c2a6cbed49623575e65700a92c1b775896a690cba84d301cd65ad36b180af90d0beb68ca9e6ee00748794076fd58f3d121bc5668482be5f4ee800d0ccbfd5ececadc7de04903f7a440222e9bc83aae84661bf0a7ec679c834a75da3e3283b9b65c37990263a88a425a7bf8e85f428f9331399f7efb1c404e9a0aa89f8e6fb6a166c7d7110d8330f16f5c6e041f32a678673bcc142eff3a24d312da94d19643b7523543fa53cb3733864d4798997ffba9c87359ffbd925cf404c16b5e5837ca9b55d4f1daf9a0db0a1f006f4758ba5d39f33547acf903cdd8487b9b2139cdc106a862df08da2f9f65bd79db6a5bbdfa2cc4fe4e2e0dfe9e94f7e1c7be9a2858b56ff8f5e6468440bad5def451562c58a32c0ded8db8176f2e247f70a222a6093850f5852268acd6e75764e5e53aea9edf69b44fe6decbe9b1e655c0c37a4202c9706a5e43fd9e515d81527d5bd5a7a1425e75d21a5f9d708726084d12c07a205663045f9fc906227a038ed693638041fd97e7b67aafa7e2c3de0d36cfd396563a691101d37dd4ccb7f7b7856510fc56ec34c372a88b493ef908dc8a38e9ae8f5d9ee2b85223043a7dc548f4920cc63b57e88fe29e5ba4df45ddc4c2c19e48d036ca7cf780e94fd32e94898282488c857daca3512068bd2d2304714e702d46608446da9678595e1e66d7b46aac8302260d87db9596fb8addf0148e72109824e0cefbb40e8a6195ccf50fa5386958fd06ad760b5cefecf08bf01b818b70f30bf66c9a283ab76d92df4ba453cb5eac8a483fda8ce98ea17b28de6abe4ef1b4d7aec5a1ecbb140578a549438536996456b7c799164322cade1c1d27cb7670844c1d87903f60f7598b740d195a50468ff64b4fc394ec97c5b19c283f52742291fd078f1ce62844dc60a6e7978b6ad5b375732eb8efdb25790c1f4e7b0270e503de5bad02779c076dce5835bbd810c6c14c30a19757b9d6f36a65707e88ac1c6184ecbca79d086aefc4e40bc480da54466b9a18be69ae22b936c2240ac2da1e71d3af8ee5c910ae1dfe2ae61ff013859514801da22f7850c6d3394d18db576ec4f3de8c649d779ef91c396eca99dbd25d5d5b1f312706c49caeed941754aae81919b966673578e6dd4a3338eb5d7fa294774a49b9c913c9a052606509c600f3408bcebb887686e6de8d48518a0e1dedbb3d660b9875bdb921f7d120d4284bc86162ca70730390d73ae395f984c28e04b3a7a5b96ba6c2db8fc7865691c0db5a7af83f3d073bc2bbe4035d4cf15096d3ccf0cc14d3f03476eba20e0bbb4c3bb361be614f28e3a4f7ea01b5e80d62a02de5b1e8dd0a3c073e4d0b82174051c1281fb99d14ccfa619569883edfe7fd1ced64a54fcd452bda28c31199ce8cbade2d6a7566315e4ed7e23bc22ae9a55c4935136e5fee39cdee08935ac45f32d68bae9de512ce942dc8c24ea1137ad86ae884ef2195923d2cc126cb17fe79ed39c74c6f58ec29534d23f647dcece73fddffec29f301dbdce28413da336cac06a30f6734b5f30295a155c21294a1d8187d70e2dbe8eae98cb8b4f5a5a3f31b2ec55fa1fd69438a6377a19de1d74e2644bc1d106f1636f38335bfa2372590c35075614de869d1b6b487c2255aa7d39943d6a1fb3706cf86042852c56fee6161f09b1342c58ad9e2b10c10876e46d95d109d98ac5434bc5b4605815ae4d49b931dff261b7f17c0bb03c36f441c13e1409d717d446490eec9e6c8826da9507bf343f9075c61ac5b26abeec51a48c72f7b69eb11e885ad3c17932131db8596c8de217159c2ba2a6404d21f13059bb19536215eebba41447b2a314c71e323c96dab0a8e30c9cdb5a86fa35d0e381a538c42efb978dd840b4c2de40ab291a5dd99328bf653c9907c54d2c287c2edc8d1a8472e8b923beea77c4d2398fd4c62f578e350c0d8b6914404684c9372a07f52e0f55590dc82fbb881feb83673f6cde574041e78513a9a1befec98d2939347accfe79f3878755cecea0968a915f30acae582e681906f017a834ef0803ecd63d6e3a5df5baa2cb98a73fef18306b74deb8255c2df2ec474e16e72dcb8d798146d4fd60750ef406c8f89f58dc7d503b0ada71bf74f508a4ece209a6a73f0b82326e4f1dec2cbb393441f1c619ad10adc5312572817d33767ddbbedcfe350f453efdda8a1c00c2f65268c13ac93e7c2602d0d6add933f6318a96d34f3018d7850491d5af99e81873fe1410c23f2940b9e2dadb72bd77a90c88b31a2b3378ad3008d106a3b606e5d2e8a5b0c9c6fe277bd6f6eb404b2b9ac8f6a436603dc09a7e4ee3edf0665d21624f953e0cafdcad865a26550d96f3e31eafc268f7f6d258de7be98bb8ac181b507e3578c3a10b2aad3e98ff3b854ad6a70ceb118b5cbc15e5cb0181857b99672f070fb4f807577591f1c152f82e7e51e8b96d18cc7c21f5b3fc79b3a4cac2238da1f7070362b8f999ad6a75508247b194331e610ca98d4a6ba0b65a0aba0250d281efb8ab275d238098c39dd2a2c8974bf8de698173890936d93c3a1bd791c16ce412426fc2543c68f80d8f575ccceebde76157868cc556a0bfd2829a236877a1d807fd391c7dc284c9441b835bf0b9818acaa23cdcd5fbe2dfd9cb2c49a29b793caef120397d18235dad37e93a0007edb133b0f42b339d496071b0622fc7198df8fb204baff3534c14ffc6df29cc9a2765914505e9c31265e3a9bcd72464cdb8024304489d98937b0d651d8937bbfc7f58c31de0ef8b399bdcc0ee9532af3a6141159430f89e825edd2b77c6a1fc2daa2a0a73e6753577c98abc5f7c295605c16e6a3cddc2c8f76cd0c185b2a0a2e88a979bc8cbc3099604b72ed1756b0900e99de50199948611636307727644d00b9f7daa3c2266c2728abde06182893c550e88815721a384f49d788b1012f8a89590a1e7089623c76c49c7cba80c66886a7c538877a86503ed73f2cc10ebf31dd8e7ca09fbff94dec5f6bd309f4a9bb1f7467407f62037b33803e4c9711db3a03030f188acab91b553d9455b4a145d0778118d057a7e3316d2568e25e69b5dec2ab0ac49b96f47db16674dd01e6182f92e665228d4d93b3140958fae38a7c05a10505be99f2197aba83341b71aee702e57e226bf14b9736548efbfe2318f15cd8f11a287850e14f28747e90dd7236f82e476e892a1b7c72600d714f689244b2383100a0449c182348e19f08bb7d7470d21c1c371d0245d4cd834ec0b47bee7a2118e18a7b3ff1f5a3ffd78ede135821050a4972e5cac2d265c4bf55ed89eb938788f9c58ccf96687cb8aa954312ac3b21d55f3800a70215b3967b4347dd283497bb95fadd2c0c6ff693781b75394f018b2a0f7cd9a748c86a3526fddcebc76ec9000422ce7ada914756958159958316700bfff4b4aa82bda1290069c7631785fc4d7985c44dec7744533c16f1d2dd21b417fa0bba90ed87d1851bbaba15e34f480f4f77122be86dee220f1763424e1064067b46ad73799fe2f50836dc0f70b82a075319fb1504465f26c0847776110bf1616f695b303354da69a0fde1618da3d4a7176072fc90f4710dcd5ca4729982b1d8b0408e5221db00961275d417e86d073a01170df7bcd4b7f9afd73c198467600159b2fce13aea93f4267f5cfad8f13d0992ba7cd653ac23d2ed42deddfea7131e34fe77639f349c271d017616d778a413bdb27bf7ac824ebd483006cfb5453682085274396bf08e216e86dcfd35ccd9e35581d9358339ef3723bf29587c6f99198d9708e92d7ad9a83ac5a3ea8576b26e8947566a321c32d07407987479e28e2279a2ab2a1e230654e180d197c5691fc6503a7c40289f1a920d53a6dbcac78e31873c21ad92f1fb0a77f1b20687adea1c26fb8af04d8640986fae2aca609c6c3969cc5e8465cab5b5972f659970550cde0ee80f8081e9187e8d1e436535acd428cf819c996e7a04d51b05cfe60da3822ad3efd7e8b20a9e1d7cf634bfe65eed14402bbdab3e2d69399d30b397f37ff3ca077206a56af0a08a661bbd4873022628120155571f5761881da4d8a16f1d54c54514410119083c8e5383aec5320c769c5697214b355b518173b33bc9b8aecc981c3bda78d02dd31de0d46a7f325b78f2e3092b10ec787ceb02f02aa4f03f908cde14c647769dd2ce2f06ea5b6b22cdc86c865656e5f6e3840fd4d1802256dcd265df16e391d729f1f58152645cf8847a2b52ff0c5bff442c8548920e305b6ee6cae03a7d6e29c372b39986d74b6aa75e81fc5137fb655b9f0545bd9534095e9aaed3e272c841520aca861fbabf5e71e75da4772070762546538147daa855c16e74f88a8271de0b1050d10c7a61bcf92a4c6c61ed8f71d5fc0b613f7b41cfaeefd9dc90b778e292d82153abd17999617f4c7f7b9ff13315e4e7e2b006937894391c56d2e4a00d66efe102175c9c996ceb44750acdb5f6bff0319897989f91239622495cbee0980f7c3469e40e7788c8786c0fb07e590328b7180675abc2ab593ece1d17e41ad2b09e8f70fa93991b2541fedb81fa00078d20a38a481dbe90a3458a52b429f87da840bd66e7ed0511b0fcd90d2c01a05daa08cf748df7d3f4d81fcde06442a5b7bded19ebfd2f83367797a79dbe2ad16c273d3a6790aef277cf80734acb88257894969b7a5893696cc7842cee9e89177604047da074ca418a99fbff7d835a7dee97344ab2053f3e3337f8b8067c65f2cbb0d960123ed314e0811403466e4c92c068709890292d55718acb8229b9d86555c8ec4239a0677fdec8626348fd5bfc6d18f74ae36ec48d5902947f0647476933bf8eb49d00b6e55a947cc95ebb91d6584504192a893ecf4c8da6321ad80494fcf78631aab3eb1a98b97ac6dfc508066ecb6af02ef65f19a1f2f13eba674de527b3e9c4b7c79c61406d8f905dd339e6a24ebed14bc0ac7f58c4171a1c42b7830f8f3362235e3c9e988f50fd01e1c53b2cb7e1b1f425f3b7b11a8da83234c8616e61c611e75c34e67ee3fa5469da26b2f3660a0cd112ffbe5a86743b4bfa2c25871e56b17dec522daeaac04b415134a053fd0ece634ebcdfa100f7c4de3861464811f411ee316844896f051e8642aecd96029d6218e509a70a955efa5d16d6dc117beea70d69791cd3df10f34c79eca1b44d92cb1ae91529373691059cd58cb954af30ba2e1f9c351e35799f2aa9742b8f4783247675a618b83858200e48e4461597cdd498aced06ebd8eec994cdd8a8dd9c1c8bcace400ea1229d1b531952fd2a911c3b5054657256cd6425f75180168d9ac4fd4b2c9277cd8cca867fd1a322b3339ffc544405f6d9ffe2d0271c79a3f7dfe0068fc9f265c627b5c0efafe2ade81bf9e830a97343d52aac3f5ba0e1fdbfaa36cf5522feb110ad5bd6c2ee5bf26cb95ffa6a4709843dddff6a4a6a6107378d8617a7491c114d2fcec193dc8e345ee264f8b5829b1cf1288c0c28abaed6c1dc0988cd4a3d38d331caf68d0c850cb4695cee48ccefaee98c1e5de7eb5172a3b527a015959e509f79f2c8b119d4425bb48158948301006a211cd18e266c75eaba3b3aacb70724bec18c2d0d36adcdd0c1053d916bc597a69b6524cffa0438a6a6a76148c1fd6e52208c4e6d555c3d7d38d7f64d41b81a29502973f82527cd28333a7ffd5d538a4de211c08fe34da1900fa708825486799fa6a5dac9bfaa11ca2f0e1ce6dafcc1d505b03c3d35f55ff517ececb3d8bfdf2b781b3bd1e8dffd8f2b905a7c85f5223a48aa2027d92ebe9697b151a93a61abe509252ef0ab88efac16bae2cd807497419fc8f81cc71d0e0b5ea8aff9b87fedd00aaa79fea6514d246441f0c62a498881ac88c333f65bd5113cc03750bf0ae20fe34dacc8ac9a390623b56097d9fb131871345e3cef975766687d8c77d418153b765f58b13952f2f58ce0c6f11846cb891fed0610490fda9bb0f6514a14fa602f819a83cf10c1a292bd54704ba622946de2ea1ba728e8b34a671fc28e9e78dc9cd1f39aa9ea22598e8a92d23716abb9503696c744a3d39f87442d37edcf9efd8f585737f5813dc43dada99826dc88cd53660521712af96767cc9d2c3f362e4f6d40b947881d00de9b899b3fc7a5894907e29cbf4740d955d9214a73e5d48870225c5ef9a3553812f58cff704c55c446530c4ceb22d40ac21f04a55712aca7df70010a147e1a8dc83a590b865b9b36e788c130640a48a8e13dda4eb4653c20974ed66681a303baeb2408ce46c20e1faa9eac5de1fc89261871939e5828e978bde7e68ae88663190e5c92931a748a1a525a394350e0acce37aebe3dfedc3796c5d24d6e52c9ca6acd4a3021ee098ac940080e062d5f72e01f860a515772e5540a5a3e2a86d7a471dcb691c3f08711c2b2d3a471acabb88f24c67bb0f686ffd39fcf98b74b52f6b25c4ecbc1f12ca20ad5b695f0cd02186e6e96fde68f7281da76f45d9c267addf360a75ebb97d8665040fc6dd33a57af035ca06442fe1c036429794a76b21f42e46b5dc6b007dc2ebfcd5e7fe2e3f36c214cfcb1193603910cacd2471c2cb41c95f5a2cef52d2cf2d46e63dff60e8f05665bdc633f964fb249200b1fe6f6c5d59fec4405f41b8f44faf7484446daa0d921536866f7941f0046dbde2f35db9e8db89fbb6bf4d4702beedcfb248e9cc90b435c89afba7459cf34bd269c5fb198a6356a000c0b664e1de8eecac5338b69fdeea1b09e5bc5a894aa1980e1e3d00420af394804d52a886696d3d162af328f02e4f61df9791bb6192fa8bd49ca879583f0bd50d0c455e755d4107462f807a63d97c3c645dff14e4efe1fb28cfd60b23e7e80b527ed0e5de555e2710d2efc4dcba2189a25cdc4aa8fc1bf0ac5e0ed439f388d2059b47b99052ce20eeb4235c4f8d75e430406047b3d6d05637092f361d2dbca9a9184205e6e67fb57988e6a8765d702988bfb6eea6fb95d26970550869f6a2a9bb3132d7fe576e1f1cd7bc9df63daadff4c4d0c15c9361e73735baf7b97c6b0828863fc1914be3c6fa0c5818f4853867e4482b92bb5a8ace975ed8e4a59d1bdb20a4477b42198d0a50d7454677888878d7edad910ea1e73cf4be6eb47d109cdd14ac427dfcdd17ba26ce1b6b65c36b38890469993e898c7a9ef1fe1dc6aafe3933d448dcf804d9c0e4ae9db9563c1de1a4e8c925886420cac2632b84b3cd0b9ba77205d07f4c61d04527585fbf0fa60af2f276bd99be8c5833f8c0f5659d33a239c06fd84b462bf218bd9c401a7121552aea2851a7f331992e07ad5bd3fb035ae2d11cea130e5eb2566e44bbea75acdc8c383ee444ec16c1f540224b534728bc3138cd8e1d9577f7644ec3b3ee3cf0417d055955ae25b13536dc2380bcf106861416501b72bdaa63ecdd7ce74403615c9ab9d58259c25f837cb4fe2cb30089b591d4f3cd4ad5c6a7693c22da94d7484c18edd9fa1a791e3c3fa49356a90e6ff8b388d048570d9ce63773541fd90ded62f434a8202066d205c789af2c54038579b1af8cde28a053d7e382f3968ebc68d5ea7e457d9a856e3c1817b434aacc01320a39b12b06cb6d2962a8ddd88f4eba3f68bd80924cb73091e4227af1add88033cb683d44c43215d2378b92a676d3f8eb91034ce61ddf749bb90deb33e82f4925fb403c50de4174cf4018c28b10cf3ba55803fbab394f5fc9fa3bdeace1086859c3ab374f3e14cc1a47c1ce3031e5c476cead3bd419224cb11bc56c9f2118d2a0c2f2c0c7030afd2c3882ad03a5b1c041f2024f556d4ed34a303902cb597211feb6ac1c803cd661b51e23dd5a39aacfd434aef698c08d6dc8d75f839f86d2ae9ce016d10a8a0b6c44b52c443ad1f7ff41d226c6b09463150a732fee8ca77f56ad979fe90b259fe2a5d23a986c581c3bdb14bac3e390a3352cf5743431f456f9c2d461ba5b795ab79af442cd6b527e8505f9c2bdb5ce4964b2d62413da49103e2693cb2dfddd0c277319ab94d793d8f4daf6b0d79ddcf5f07bb3f0408cc3c3757fdc0d1fbf37bc1ea6082655cc66ce3fa7171bf4c8faca4acaab1127de48c6ed731d0f67dc91622ed3510f3e8e77a0f1a46f90944425fd2dde3998f2241e24f0a8c7e75320a43c3ec494a360f5870d979dc132af36b4970faa9c7a61651eb340b3be9a2b11daa420b5997215ef49e73426e257f72b1812b6dcdee90f844339dbcf565cd1a25b302ea1dc597e58c91253baf578a6c17dfb63cc88e7f2cf1c138d52c97f1c30192a8a19c4dc1adc8865541280975c9c7703fb8ce49be1e1486d1cb1d8322da23e75b40996606bd235579945741add76114c1fdaf45de35e0ce1a39e009ae11d5d76f243b1eb60b6019984770b0df7f871f762c2614e151ee2fbe6ffe7e1d075e098dd7fd2f8ca0188ec40881476980b11033421e0d7bb71d43f9187166ae1373b2a7c8eaa9f61d47a0268a77b8ed30e886c3ad05f40645934c6b11840e3499343d3d32c63d9cb0a34893dfe1c241664dcb8736d4fd7df9c5d3e0f9d20bcd9de545971fbbb8b0fe7a04c35b267b5690284aa8209259ec321a7186b011091192521869e043f67ba6a17e4d76087ea841820da9ef39ead5721426aee3c4f21b4ec89face39b1f27c5d58d51d8bef23f4f588c5b102b4a8ba0e53cab2cd558ceda329e630f8a6d4edc8d5e65d7af9c193808bd4d24941f7e8e0fa7a559c3ce120a6c4d635eeda7b8627f5d09691b8a1411c2a9285bad95d8d48c79a0db4d4202696801ecc3248620f467a21e4a82a9ef77bb6529927a6571000dc1d263fde8553a376ff98dafb6a70bd4e8eb0adfb2695284b4d49977a5c1947445af38146a79e866ff523d96f488735c38f787339e27baa2183b93f8762180c96509c6efd5a7e51d91d203d7ca5becbab427fcfaf6e3e2ba4e95d5c0b90f56505716aa15b50a158b9bd513a3633866dcf199daa1b96804649125e63516fa506ca1e15ef92410ade5003082710bed54b1d2bb5b481f4940828ef60518e993541bb907545db64eec43ba6537ade6a4726f54716b6e21a09b5d3827734df6a1ac64ee80a647da4837ccd1545b8694d14d691e615764e56163369303af2fb52cfa50704723ffd1ac5ea213d3a1e808f3fd920fabfcaf141a0a74065d26ad4887750bc3c00c4fda4894b66c7474e9cc3dd5b57523278c9622d9e8ab790b56597c2c4732c82579774e5e4efc5c009bd2b1034c11ca70f500cd233b2c2b310404f2c3d7cc64e4f81c991ebf508336400f54eab07a4165e1e0e875c9636cfbfc77db30141975ef3fc849db9f4332f61895d2d8899da7235740a42b503641329d954008d0c0bfbbc3adeef57f2d5bd4908ce41c8c079ffd7f0cfc3d07e503a3bea5157804a6556aee4e2e177a31f850194a626e3f5f82490101eac649c4b5df3141e758c9db917f49352a531ac737f4589b0a0be80fa2220b881712bd13636bad11e226eea85f0e055f6f925306cd213839cbd95093cee22b1bfbbeee0b550b2b0c07eb2d9d49628f4dea031d7ecf9188ffb4f10b322ff2efbe75e7a7092df927a256e9a69fee22d023bad4aaf5ff114e40cc1f79039a76536ec54c1a8a6b0813964cfb8d237e0ff0eb9e92199956ceaacea0b8a5bdbb6aa32c4645732dbe67ed586a44e1b345436ecfcb93e8d2084c332acff7bbe33c7f55bc9f9df71aa578be1e4cb9b682706cc90df3eae3eccad5ee3260b91d96ba0b531479edd60c06f89974d18d19615721537aa0e95093eaa920c648721f1b9fe737a24482062624cd5684f8d296be9cf80b65d118783d6288ef16472af96f758307fb9b324916e4031d29f8d68b914ae41718e90b00cdb4d0d8f56cb90dc5449dc3716a563a4c0863e199d91d43370028eb3d00ee3964cfcfc09ea9c94835c365f6f2d5be9d9229c4af04abb73257209627296350689eb3cbc92555b9d3f8e9416e159e349b24fff314356f0d04e09b059bc84a84fb7934ca1cb45118ddfbd7e552d379d907bc48f0789b824d90fe629a0e02bf98dafc2b7c2a28385194f95714f672bb117189b034e5bdd461017ed66bbd9a171e8d27b0360375be3dc6ff309a78bd2f84a62f37851b2af7f817bb64e1e9f5ae96f53a957fa6b9b64d2be2804b237cc495e4d54e8c46c1ab466f5718be3ef5028b44aa4bb206015a0b00a4f8c4d0e3bb0e233c3fe3d3f83d879a894a6a52ebb04ece3e12ca79669a414d43f5b081959838244ecbdc8718b791af737348465ea481baaae707bdfa43dec9ff0b6c7c79d6c1a56db65d617f4ce9e0397458f5d69ef81a383042a06c47cde1458c9284e1479fab50f16ed0de8a06b1ff8c6fb49a2b25fd711d348955db5110a156ce87fb98399bba680c075a07cc511b9f359fa4195e068409e199359d54e5c3572026137b9bddf3149b37aa62e55d401dcbc77ffc0ac646104cb0997272ff66c90805b1b2cd83bf2c406f7a9587698804f0bf94ed773449e36c9d9f8779668225938ca75cb3849c45455eb79a17b34b214bc0893976b014ff57b67e719c9cb07983623a5bca42d2a5ac01fe14581e63e222dcec60a5d290528ef79da611f56c9e715ad3f2e07f0e46a84f00f1fcd7a3ee1441200c7a91c50ddaeaf3bfa93a9ca152cff81ea4538e48f1120c97a204cd43d1435f90a0c60c07748096ea65c494506c1c1c7edabc535f3a3e4a6aa35aca7845dcd0c501551ad7227575a4f803f3f8e2632ec62d8c8f868e16f8d7bd41077bccc179bd3ef8993784d353e5b8b0ece593e813703ddf8e00b1a604fad10f193bbbac3bbbcf62882c38d2b41e49bfa93f7ccc3908469a617be22ae949393600ec44405bb9055c97a18bb71fc97742e5d7592b4d03efe8a43f27fe2ff986ab0f41a9621db069979e7e67bbf110be7a2982dd1a136cc097f1988a311815a76cb424089155a53e2fadbfc805fd5645966bc3383864ef0d1a8899a4033462c406f2b3419aa781611b3c02c778169e79f94ba28b09c844eb5b4f8a303ccb6f1f3575e30142e53454186ce1003478ab971f38fce1e2e397048e9798f05ad5f6f4f4f3a3f44e6c7cd9bedbfcaa840f82d319447187884181b2a0ddac366e530ed24da5f87c48f9d0acc9718fcf11f419d94808c153ed6b6882b012e5820f083589eb7e4040e2a7c7349ecb50d868e6eaf2055fc501b82c9711568bba6df516966aa9718b0e8ace6ed127ad75866ca297f89e1f007d26486ca1d6eb3589b0e673c3f916a46258a1928c4296c4c9bef8dc20a10674e8765219086888b6d4cf1a991a44a5c5d0ba24dbb7bca39d12ddc1d93855a2263700d8d2033889d2fdea9fd1a4b2198939279dd18a23cfc47b5cb82219b010fb9192e24c879e6173559144f5d83a67ce1ccd63b692d9f05db9d4698ea6cf927802f27b85ef55dc5c825e291d9f9530f0beb8c18d5af8e208456f67550eb7daafe3c1c29bc9e939b132fd1f0b6e8de129f8008df73642617b7bc3c1b015699179081c1a4e51345c05d087cbe890f24c8df1ea62a656fe93133f322c413c9b5198f3becf05d377d291e9d80c4c7c9bd5f5c8edabc8f7b514a81f8b3608e8d82bbfdb052c662302090472cafe3c8b349c5c69ee247fabcef13caf8ccbe9721282ef5b98442a4bcd4cb1e4694fa5013f2e53d06ea5d9799aca2de929b9fedd6e239264936b14c0132b6a15a5a5a29da6a39b8ac9f8a3fe5ea5d102ac1b196cc14c8f301b3e68d607343f74edbad79ba0b4a955fc3d192b9b0f371aa80451a3a34803777d1d2e48f1ce51ba15213be719772967702e7ae3cdb6a7c430bdd0c6e2f4a7d0a1919466da02d16b83791527b5c1cac6c9c63211c9c96c0ee5ac7e426b9426436e0cee08c73b839a1e8e5332be42bb8cb6e3ac770fbb63c474dc3c2fdeb723a3f56f4ef8ed869551ddece3ea18acd6bb1df83af657691294f86a1ef1ad1e732cf532c490256bc7498fe18e574102d33f32d2d1c8d64ec3d27b5fed976094a355dcec1e1c14823ad3025aee415f36fbd24acc5e6f9161c51cd50af9be19ad2d117a64a4f06be9b7e7549a0dfa6532b8211320a4ebb055b1e8b8978ad073a8254a42580d7c011204455f99c8fc11d55f5a3d6afa76bedb4d7721776572dceff969528e71562f3490cd7bb572e41800f3cbbd449b9745a07b73d36aece51c941fd4bb08bbf5af743d92bfe245b9b5a5bb2dee6c299dc9b37e74b4a3fd0fcde5a26d816ca63e9e975552a9955b4a460ab7683f9f84e48cf9d519e78a96b67626239294f2b910cfb69069484f7cdfe9e1b371c892e7996412b98396766d3963d4f6b9517ffdf08b284fa016f0f39eeeaf02fcfc1db85f3c93f56689deb318e72e632a4126322b1f14a2094ed2c660c41670a52dd6c03c96ec18f3c86e33f44bf456af93b16546376f973d90378c643462b43626dd1f2855cf74a8baef4dd67227ea8f85a0009d4f7967ce72e2fbd74e53bd6e21c7bafd2cc0f1ee714b449815bdc222c5ae456b076e1c6d19a9e7b71ff65b28e23d8a8f3950ed21c70f2990cac8aedbc2c190f5282746af92e0feff20f3187a71b32931167c0b49a126f53a726ca9ae47aa2893a04eb753f93eb7d17ce1bd157cf78ac00dd668df489b70f24f98abbfb856994f6092569cf2f7adf6ade778c947f295d35ce839238046335708a320ce312cb92fd91ba2bad54e524d1bd096abc71b2e34a7ab960c2753684cc674581a5812e14c91ee369110f42a5f493b4cb4a12c6ae00b7f23dca35a4f3dae89813c541340a95d1f19f998991966656f19dd719717e18b0d058d3716b7fb841d9d1f85fa39a5f5c8b155d76a2d68c27ed94caf3619b284a90253ba2c989915098973de6f1ad5f0de83770896592865abf3dabf73aed57a9ebd265e92d4f87721013b901103c5a42cf2ca8de2908f46586dedb41bbee276073e0c232f48bef3aa42e7127161eb1af4e75b602c483e979d3449462fa9749ebe109bf64b45cddc69c65c88191b920041e364a2fa3b4b68870d11bb4a5f4273d99a7b389d486df8aebb1a53c8792d7f60b3559e1fb14af887af90c6713de3bd4251c86700ac939e19af94360f50db21d2fd3f42a5c5921914e4c941c02b885ddddfa63814af6617cdc79843e0709101c063e3b599948a0725ae9c0142afbd60d2d070dd4332987f964e5d3c9254b7145610108a31cc2eadaf42a256315b48c0686f18fb2f86a796712e25d4cad7b7a1e39de3b6a18de5eef69e0d376030a2916ef5d5f96f8315bba196c3e742567ccb432b88405d6d64340f12c42a1afe51a190592737cf5128c8187902313d749b3fe1c29cc9aa4ad620f0814e8cadf0c1a1674c30dc4f121d6240100e1e901517dfc619f80a0ff332932ab1bb1a9c9214b551dc37bb263f6067d0d112547447c950de70aaf987b01e11de4324b20c0a6285e8b63b814f95bf979add5dd16ce6c93653013ee0f1e3067ea7a03c62492914a147d84139d795f8cc0aa6c233f8805332065f3065a0f55c3fb370cf0135898a11bc3cceea9c45aa542d57573e57ae024f09e9aa7d853ea1929c062db878e0126c038fe5312020f05ec32d1135859a7f3dcc334f94f59deb55c70648af4fc5f2b08f648a41b474a0e4744595fc2a7c976c9cb95a600aafa804b2756544e59a5024fafa7a3c823a826889f2b889d1abfdc3232d23bf50806d8c5dc1834cfb0c8c6cbdeaee0a5a271c5a407a4101ae171b511780a846b60129e16023a82c50efa0577b2080dee5f9055996263b68a8b20416f7eca56ce193d6fe32ba13efe794f1d291a46e9f699a962a0b87b1f4d1ea00e316bf737bf2f7251fc17bfb63ce73774a40f7b31c47dc6d1ea8aac42c1cae248f8b80e6f9b373538c6aff6c779135cb48583571ad84e29375ca964f2d6a29d48211596c6399f69095c865871e80b4d81201ec17b2696afc1e6f120de54ce07138dee0c7a696f231c4ead72232fad4f8190b1ac668bf9ce5c68d854ac9b41820d95e713dd0337298793ff2c728dc8dfd91c5676a6318e54894c43bad75a0694636fc7fa596a60419a79070df104ea87eac922dc009cdd733144d57088e0f307ea7f963fbde7ee10e469c691023a7a706d3ef6cd51df3b97101d59b4d33b507f0f68a7c634aef7a235cbbdf59c7fd22bb10f4948e77c1442591103e7dbb538c42b2526f328b8f8c86055d3dcc94c79bec02398858b7cd8e2c4052788a70fbdaf331416d37b74272860e2bb7ad0861fbb17e3ca39957c2612b33d40f388db9ae1f666f6e84dee28a7393b44312ad91430bbb5a419906d47a50c64582698e8b21531605f12a372131af67a081c35e18fa6c56b3e0f4053f929d255e7b66c2eefd3c4be19bb12455a1e7bb5c468f6655fe3c550c8cf8485ed348ec8d07586658fa9ae1b31d83c5e003f376a62ff7b7d83618371037f352ed4be47685b360cc1bc16f422571d49694da3c8a8210837107f220e05b44ddced79b7be97989d7031999041bfbd954f05c30ebb0074341f2f6e8720b299da08a69e3c755ebf9b1fc8d2443379fb4499273625806446b49918dbcbb267c7bb96d0ce92ac00a088529dd3a09cbb3da637d34f5d5779a14fa0dd8ff0dc519283ef7d683967ed3d8cb54c5493e80dbc20227ae51ca41c9e3cb32b6bdeb31b58a3e5c88027bb54a75e6ab5c31dc150a02bf5af86b55ea305598be499b4071d41e924416a0eaaf8efb0b0a1c4654c9318eaa34ff29c0f62441c2f58e04bd94b1faf0dee08249af84ff2a2b6b2c89aec542f5350fed913dfca0b1d988413c6b2496a2606bc8c750f516592936668fac48da3eb19aa6ed9d8ef52e00cec8722b6b5839399ea47df8ca23aaf124a1c405927ee6de7b3642ef71b5e464855e8eb0b6910b1df9c3215fa7af7f01e0b0e1352a34f364b230eb4e80f3c1510d7915fff62d119b4e35d6e7b808dd6e6dd665ebb0411d8f8fd582670faaa3bf89c391f178ad987cebc3c5a40548ffa1f74f221dd014fd50e374f391b82d844633498d157128de436ba4b7d4d2f99088ff449d6c44a7a99e18e7b45ede3a8c542ce708f087f7ec5d26ba509ad389ca91d4c72fab3c26c1b38d7d6bb07e4c4036909e95e0f3de47272389d73688304fba4be935a47f5088bd169fbb0ab067c9db958ef3542fe6fc6b1a65599ef0588487e010bb21451607cfa8e27c4b824c1ee8f939bfc3430e4923c5b10cfad531ea14abd582bf8d16c69aa935f9b483cbeb8612ef3ad9c0727904cb36560f8ba7d05c450965f339d8ed3b06c989be81dd60b04e434d50d067277513e676ffcd3dfb873a5ef8035983d7f3fe5c428b866ce446ef45ea6574a3dfff1d0cec6eca02e401ebf88d94b22976fd9fd7fcab0138fbaf1197f7bb3d35f052795cf5209a57ea53aa6c390f2e9b50db923ea4cd51e27d827eb4737a7c2f260d68967c816881ef2e453b3b43c125545a84d8ddf9c43d7612fa4d1c76abce3036bf2c686fba83a4812505f8c28d83ff3ed8899ca4b078b52eaa205d8a0e0881801728c6d7b5670d69a342c090e5a646ccd108994a305833b3023bc3b3653d786f46ff4b87ad503f97b87ff688d83a23b41e1e8eb10cc997ce6611824e578b59d2e13141b3a07937e220ee919557a9ff28eb38d111f8a933f0c82717277fddba6c5641cc44df9d295ce54b26c268fc930085460b08e8212d72bcd947e21bf14bc511670a1b4196c72a985a686bfd5d9cbc1072aa9893d8b1bee1d24ab91cc81ab4d87ec11833026ffc642a4dc70bb132311e371be4793fda323160cf38a410a36135ec0c2724696e9811633a1f8511d9e045ba441e272d05be340017bcc88df6adf7e802a6126ff1da6b648c30cecf1595e923ed0a4600b23eef959df5262af901354f11a7276216b81af42b329016bf09990bd76ae4160409119d39d72175ac30ce4004953c450f56810709ec3c48ab35652d3d6cc9d3085858681315a113003ce75c504e8899246604d7b6460fb3ee9c88ed2c63eb5e301905225d6b26e91c98b2ae6aa1a7a9f7a96857cd842409597d315260c63f4f18893d97d8856e46e602993676c5af0d5d7fe5c5769c471d29b658a05b80d279e41eef853cb3787fe01819d8e84d1e7bbf4eb869db238c055f6cfc6c3ce54ad60aace6caa31b1e4438a475af585d1ff59c225b327f02e9d6c2c35f01c6bf252f9557501ee0a470923aa196305aea4d4ebcd12fe3705195787089b187e83115429486b08e4c25d1642822366eda99ff29aa96b4a0d50e5d5a803cafe42052c4af2d92642bfb83b1c83da5d978e2c7b7456fddc8d0aa29532d6b85f0d95d2383d01d85bf25ce72667314f135789c7541b1359c4d88a7091a97aa54baf6b60560a972d6e10c092c8660b9ff718e32b29ba36d75c61540124e5c89be7ba2dc3f91c3358ba5c2c75b8e0d11c07e013ed86cafedd62e2b17b6ec176cef376eac410ae7ca0a6f87c8bf7f0ec8a8bf11fe713e688d1cd919f0b7f14fa178d35a8e646bc5a876c69d139a513cab6ea16146a0014988f236ecb3934770dfada2268c178d769980e291941408c8bed9523e2454d504e9d1e42709191700bd344436ab4854869a035069855e20c351dfb17faeccbcd3c1fd4234676fbe3b09934b190fde4d1c5559e4a8206a916ca5b66a46a51d11658488113436281afc35b2114ac743d2747c32e0402f08ab990382b5bdc5e74cae28044510b3aff1c4936aeed4fe99308e154b1148ba84e151a83472e47a8e96d2ed1862bac6e3d81d8551d9793bb360380a72d97ce0c27c5130656f3153f184a194f3ee239c70334df6169abddf477c373f381099b8147155688f02700d4144803453299ae81ddc504dc3c9f34e3447c260ae3fc55fb64cf5ac7dd20d27dad7f459e6077ef27967c71329ce3e905a8865c1574cb6985ec4e75f1a9a7f5ee020b656b15c6076d1ab851bd975957c060e3ab5cae875021df319e96c6e5694287be5f029467f6112bb039bef4323aa6cc83d64d17d548d43d2c8898867aca4daaf07b98ec5e2fe741c35cde1a414fe4bc75c419d1da9f6882e22f9f71036b76368b6284e891b540d7b27d488bfed3e963f4623ad961721ab0311555bb4fa505ad08b60f76a77614b2c535a51ad80a13d105ca620798d3764190a7c9f16a62b4a3179d9466e5ae84a4841019fc2de35bec7094cc419f51cf40bc3e0a6273c283fba5e30dde9f453d1eaa00a18180c8883896c43115077d4709582584900ef72f0481f73003e0cd377867f9b42bb426d51d76f22fc1f48f48c095c6cfa60ee56339812768d2a3d2e5e7718b16f85a834571166dac31be326ca6d7ef77618cf0e1bb63a3ddfa225f4957edbdb9adcb6917f57a109a0ceda23934242d96cb851747f6d061e1f331b6e83b8d9ebdf04a18235192d92e100a2d315098a68232440d36de209558f68f6320784a4ad6e236cc77cbb86663fff77fd31987dc65644e2ab08f275dccb8af178aec100ab18d51de9b227c227cdeefacc20d2bbd37b083fb415eab325c88cf3902795b6765546f0a1a5ea4765a6d700aa727a46367b68b50ad5923ba2e9e7114758e8575a004d198feb4c5ef42bd4b1a2bc22cee0204c30f2f4f119f4490c43182762de296a76c83e13e4e9595b241b10af8f2fb7f5c2ed060e34ce8206aef57eec12221868616c52826e24cfcf8649dd3590728678c3ddf424fc0d99dc0b3f48947508c1293e97bf95c9a18ee24ffb6af6c7b98afd49cf21cba2e6bcf2664b2ca9e4a8abfa05016d7d6ee988d4e82d9f7325ee708b8c79b358666e8ba65fe76e667bdcedff47de666bf18185ba5ce4f60a02067c2464c906694d50457b512fb6fc3acfb64cafc0aa398b8774e1c342d36596ad196e2fcc195d2f89efb7490bcb53958d69402717b42aa9c13ba39cf87a79bede04ab4cf6102b241f75198d8600e1263c80b8a67d3a7d9b97003f4bf37a4bc4363def352ac302ab1276f784f91d3346798636d746e88584776d4a7c0741c01291668be28c62ce2cae3cf710b9b4baae2352b27637f93629806a56813d019ce1ea7b235f193445dfcd9bb6b544b9fb8943c9c90f1582d61c11493618a20c16f845f35950644102529b66ecf79f6a18ed015eb41b58bd0d534dc70ff75a9114c8ca8cebd5e6756abe5e682ebc554cbfb0e9369e0e9da06eacb496cdd44a44d0943d25b66f5a59aba92928f5c210212e905f6ba38a7c7f522e21306b7c33b80806d0f8356fb5bff1751e5cda8a407828829644afc84173f3f610440bfc43fc4a4e865993f3426193e11b31e88c68e50a8157bd882ad9a384fa51ea1bc4aebceef43c7e8fe89c3adefe262ea9ea9e2968fd775c9041da57c444712dcfafc021720f618a6dd2bfc92274f74e914d1ebde28b298654eb1da3cceee2f3b390e63415c8618affcc0d8a76ad786cb9655e6397efa63cb23b7f4edeaee8e05c09dce42d0c69ef2ecb9fa6c5d486385f17ea5131ecec36d8221abe6776a19a486093a348473d85d92cb9ec9154be6fb06c5883a4c90371a9da6ac6ee98844df9d1d12f639107f94d8d2226ebb13ea64fb97e6bc229651ff53e9585100086fc6ee2de13682cca6fe75e60c1f6b899445945747fec8aaa6b7a66c6d056c4ad9e7c7dd7aae3971af657d31e51ae9dd7a2669838364c728ca860734de75db0d42013d3bb7fa0c094ef551cf539d584aef433b26f964adb4ac0b36a6f58b8a6dad5fe8cab60aa7ba4db781283542165f4c10e10a41e8b45655b906609b33d00aef14f728e4b96a07b90d94357b935b74748da9cb405672ff4b50c706cfbb687973ac01097dcc630e13fd960bee6f99d7c32db9dbdf32e7f3366d1916e1568d8946c7130384cff71585e08bac4e2496ae8a982f35f60d979b3a481389970b4b86b4942c8e2c0ca50a06a5b3e8fe7ed9030cf34e8bfc54057cd945191b1169c2b0508b45c5eb749f081233444ef3d793edf3c40236d9a8c2c6fcd0979c76b63b81ef9a6cf48415e028d5a826e5757af91f0051f76bd4cee754927918ee95f0dfac9898d4f8e72c68614556655761e0293ff7ab402597ccc4e7fc5ad05bb0a5b3cdc75f09963c974e09ac7082bd86dc065356717360ddcc425cd88460dec051804b8a104c0c62b0ad7a2f03ed0d82079d4226c14d76d3e4d793d7f322321105d12913dc221a634847b4710026cf61b97127156f1278d140de3a4d3540351844c5298846b0f2268ab4329f413a05b8a5febbd9840bc7d18bc654b21eeb1528d45ae24004b3d01eb07f220728f6de0b7b417da61182b42f16e72373a81a2aa3a63aa0d33d10aebeb6e5503d9af2d715782158b732e0b2a9f91444c69fc8166e10bcddbfd8745a55fbdc9a17a171212334705cf64a8ff141744e9a522734d44662649eb7e59147d295e43bd795d57822850eb3acc1439777da09a276305a9c677c093ae756a726fce0e7d0fd7fa90839763d3438ba74b4b4a656d1fcd6e81d5201ca5b995344cce3aea2f3154d1a41ed9cfbbdc678f59e330f2e0462e277179fbf7498681ffe42f73e3c5936c1789f760e56b52668d8b5cbaca9d8b67d12d078aa9293efd140af63a6f821db4c35b6c644aa72382d9080d7136fe52b269b5293fcc3925e4bec8ad02bb70f97039ffed40b8406e6e9d97194d6da4a880c38ac32874bde828628ef2d07ff607e808d7a6c57b014d4ac0b6a111aa75c9b01dd20232538c5b78e4559002ada8de8a2f2fdc796232c37341cd3f6a005477470ad4c03a0a683cd90945d738133e7169e11f45edf9809ab4d8f455265d28dbb753055c3dfbb1d33e8c23cec48bf2fed65343c0368fefbf52bef74f31851373aff9e365b73d1c7c80c1f0cfff0e21a844f207d5df98688d87125de5cf15339971e9878d9581519a754457bf5a36cc5a418ff4cb213e7fb6dea45b2fcdd49a952226e25e78286346913e8bf355d1dbda1a0ea412ef71e1815cf84f22ff89c511495d954773cd59fec373664846aecfaf78953eb4ebf36dda1370fd807c4201712e28dfb22c80c15b459e8567c23f9afc5ee8b0767a27f2f747e1adacd1d674df65c1e48cbe5071624d85183eae095c09d60152d3442a3a32a89aa34ab1a6db8e113daa1698332a294b522889196e2760107986e302cda7322e91142725e947dd72bfff75a2c9635c37556cb59c40c2d0f56d797ce1f7fc82e014f18adce7570d576934279ed53d9dfb99822fb34739177210b492685d0355bbdc5dc666ccc6351735d8d7bfe2e351225bb720ec0f7e8ac5c8bc81b141c845db0da34211e26b3e3272f27d962419e4442f8fb6f8e87ae14db0041f3cdeab295879c77f95d37a0ed9d3a7c5376cdec812ef690d4178f6e9e9a98489ff809c41c85b6659e467b846e566fd28b112b8ba30ab0a196db7ed2e7959bb6c2cababf598c76f4d8a796a4524f585569a88c85e5e6a059f0d4f3511cb8b6b00dc52c6547b0e3b848515fc9ed446ea761aef16d57410ff4124c3cf225fdfb0270c1919bedbdaeb7e1e8bed6d051d0cfd1c3ff8fd67c7343f2af5c90d75537014dda9580bd940b1f8593d5ba5545fe033f68d1c27e0379ca162a988ba3629e98e41166f442e9376e6bfa9ce0a580ff421e933c227717dbe4b39a1d32bf06290bfb136ccc972b31c43b6377eb0d6187540e533ffdff9a539e8513dd62b6a204f2aea07ba82983626ddf4514f5bab5d6119a7c0c06fa6d7412a8a6381ddde0cd0e66021b05ffdd370a06e6c0c7cc03f0a9c9dd1aee4e6c49f916ad2eb943750d214f8bf48a237fbd3ce1dbe305bd2b3f3389085f46f38054e94d0463a3ff73ac517fa0a2f4b4216ea9ee1671e16b651664100e0362d71a8bb8c3f30f8b35d68b333f471e0ff5adfe5512acf096001320eff29674a26429c19f8c259c04e55782fc68f77770f92bf53d8cd1291615356be4c551455dcf9e8e602c8e00397af5260bbd900f76df34cc556c7d7a7393a4c62a362422f398e7259c88915634670d33d49b783ac0a4a68679ced8105bcda8bb7e553c640ec8a6b1ea4bb2e9499978763e4bea8229fd93aa33c3cb722e87569c80275cd920f97e3190583aa87b0ab31f923d7a6cf0e5be497f0b1b29b5d1e1bb93bd015a46e643667dfcb411980092b59be9abe9f24bcc78ab9503146ecf95c725b61dd2fda1dc73dac68c104a724b12f55c317b9cf094df62268b1db16f87e4fb41c33443907d2a875b2b571cc91b0cbf91f5a2baf78cd1cd32a670a4b93374cd116173a3685ee909cd6d3e87cc7b77ffee6a1499d4ba945e84cd2f3bbd547917691c0fe0edb8ed7770d923998d9e07c44141709d5f3db0cd2119b7c647cb5cb8ab1e9153d4d109d6fcc724298b4146dbde80af2dbedeaf507da8a705f423c790ab3fe3f741e78218981bfe77515e4064b4b2dedc5a03aa6e7bb95d555d2504c02c4d4a6375d728910ab8cdac5609e8b77944b8458579fc900546f99567e88c32319f9e148070038895f788ffdae65d73e22ef6e683285a9b02b6671c3fff9c82a89d02ff06b84c64a12ffbb167cbed109d6e4b3651f505834306cfc442a16ab72d2104fcf763b74fcaa459511fb42173f47e3aa9250407fa07b4dc3d667b5ef60a930db90bd450200897ee5ed8776676aa8e0d3d024f660c8e3be71426d18e0dddc93a09a7d0277f5ff5dcda54d587768335039935f2fa53171ab6481c6a275c7a03fe4234d5d4772689b2fd270ab6f8031fd4f6ea07a529388bea77aa78192c8bade69e7519aad267cf41ae57dca0871ad80da33265ed2b4050933abd2fb12e61ae36acbbdc04a47b0ec6156e5a71e1a70370eeb17f667b3e8e900c74a5f14caa600f3eb1084740ef90636391d313c3731d96f64417d5fc09146fbe5574a4c0a2270723b8876d3426bfdc209bbe979bd2e926d084d21d0f6ab8896363d50b722e398bba4c7c09b2c9d00bc676e9d0fa3afe9bff3c4842e48c2448a35bb5735079e6c9bbd495feda2f546c18faccac86dc3d6bb2cfb3737dc6d83ea90137c156d931e42398e9c6a4fc10d53ded423ef665b689cf3d5efc8ab4be66864cbd809bb521495cf55183447dd052fa2207be3719e994c108a76d9e4678265b4a2e3b7973a6982e23493d4253dff2d652ea1d512bf73dfc66c86c4242200d0ef131cd89f83c260b4a472012d8c8f4fd2179c8b0c4a2756c9880e0d6b9d4354bbe3c34eb4015664de03d7f4d7744525748ed937c31d3377d7deace5d3695628168d90a5df0107685929fda0b66af8584c1f3222d9570709f8ac329a6882192f02be2f6d3dac90171f43cb9537c3c4b37aa364ed8ef0a8eebeedb8b33f78739d6351d2fc084d5550025301e1210818b0ca53c40ca9bee19cf4ed7f0f797ec1603a233fdea2487a98a8abe4d5c52fd56a19ee3ebc9c29e248500106bf0284253f02b1c32d1a2e394fc2b5de84adecbec69e012c24e99a946aa55e0d5788d8842b16cef4dce94022d6ac36fede77cadfcd9703c04c29fd71f2dacac7905b478a9021e571f99f34bacaba3f64099c4dc3ef27f0410d19145aa362aeed7c0528fe38bc60752400919ba3217d1b06bade5bd19419fc390849153cf92991c2352f719da98bf7436d490128fbe407da68297b6963ba5f0b6f3944957d184bd8bb3caf45ccc540b76356f0dad59049c6138f9a1b3a6f03e0610c96b83e7e93d2be21f3d2a1aa935d047d79a324fdce8951992935bb37684941e6298e2f3923bd82d8ddde9d34d219c4e2d542a4435aee5f7d44bb2383fa4403fc74a852418670bc559c15c1970ca64ad491ac437b17c3337ca234401c5132950613ecda0dffd3cfeca4c9a63b36e7778580b900ebf070060683706982886dbb9baaa76f12b3fe96ce921809f93410cc4f32b44817179843c34db3d86332d42cdcda6d6cecafba566c17d2b8f0b71253479e347f2ecd4decc0687d216312118828442fb4ff0be96740ac0801a08e64df95951c8595336779cbb0ec0913987347c6ca73073f1789d3f297875407101065879d8f38ae4273de5de392802f2294682631c28f7f704ae74d4316236ebfb54cca373d56bbb00e9e3fe3764de04f839dffdc259e88dfcb3669df86cbdf3f0d0c58fc72ad12f8093819b7b98957d0893fbc0aea6fe361c2c11ba9a036cd967ab46393f736e2bb6e146c282cee53dd0c8219c24e0de2b0ebbbfdef727846486392f9a392fe7373cf14c0ac528f7764064be3df460bbe04dd939570275aec168977e1d1a090b5e8f4596b788ab8f79ec9fef99348ed6e545de1f8706e3ab68d7f9f3a7cb812e6ad10f92138fc5f23cfb97c53b063652d202b261fa07b78d24713dad8af1c5eecebc1f0e24f8924815a53190a6d964e878a3df25cd5e4dc605343535ca6e76cf842f3fd57a8f47c8590c232a00ad8e7fe6f289c7e6eeab344e338f4b4a391f4c835d252c503d2496510bfe5e3651d5b5bf10fd26602bd8ec1489938d357a639c02e2bbbed99d0d098341e8f3a3efb244922aa811933d42032d408a8c1d91fa25b83c687a4d84b9ec6c3114e55e416703c669ddec2f6fdbfb1de23aaf9834121f9d070c55aa24d22d04f49f709718da65b8d3b00b59b1675b44d1a67df0a0301f3d8ca378e8d72a8521166d7da05fb925dd78c2a165a5c3345fc2f6d1d7bdfe306e00917e5687ced6af2edc27137a1b1bdd826541c9151e6bfb89399344ba06452559f623e30412a57bde8d05cc25606bb5323157f394c8c801c01d54f107689a55f7f59e4dc74e167aa9b0263518c5e815cafb5cb1b5316808dc46323ca9f48170be778bffe2a9e4f5b3caf7946b980cfe81bccbe523ba9ad60afff1e8a56540b60f08f6eb4d515819be02ce9f1ef25782176cd509b384888618483ec9856af59753079737c303691c98642841daf9a026911d5c48f00f0051c60e06c4ffd6ea14c5491532b71d7993be1d5fd82d04b65a2fe6d7ccf11b90ab324ecf7d9a2a19be125ab33ff2a59e23fe11d5edeb8c04860b6ca6f2db0c3e341ff6e11a4852a048561ccde3fdb5e8e9334f8bd73930d70f61c822aa4f6c66d387203773b283c99a54845cab15b5995f2afea324461d6320c8a0d9bebee7a4abcc0205e7020859d2fae2a3160612829950d90c00c21fd688cd283f1a7bf1683ee2ed37d3760e4cfb47b4805a3b9e234cd2f4d38f88e795e8fbcb7f9253e20f2f086da1d499601c3fe786fa549a32a4663e44e7abdb61bc71087aa479b52271682642696a94d30d7e549f265fa171ad9629b3832eb8963e742a92e42e037a683f82bb32bb77e10bce2e14c0bbd2b0d1a7c1693a5f95fc43ba2374f38699db4c8bc48fb32c365e7b7ff8674f48b8cd377ad8e4ef2443b78dcfddb9b16f4d09c7f89a1c9ee5b5c685d06269587bd3b2692f1179b7463d4ed283efe50ca287f42c463f330efe4ceddaa0d8ecbe26de8f10d9a477866840cd7d751bea6657f395403d6221b44012ffa5fb67addd962c7cfb746bbc9281c652c6dcf0e8d7e36e0e7e5fce2a99eb70e42aa96d60181dda159c10ed4c7d89a99cb037b14f19d9f22a4e1f207a153aa5bbed89d8acb84ef828b575c8ad5eee79fd4c7e308fe6f510d0dfe8b4bcfab08dd9b3c8801f2f862ecd735d40adce40a71ffed289cc61b65dee655ca1a188b9a7834b706e5cc4d0a0352e0c869d134ad326772fc95cce32e2978d07de4a4b230da5f50689a52fe38c21cd449dcd79aee1840928df3320618569a0ab37ed31bea73977eeaebb6bcae5df852af7529ccbcbe05f5d4d8578d898b54e47f4a043a1f76f88f2795ff4745998dd8a7d0dfeab77d063cdb922ce2c4eddb098d235e1f76fc5fc26d647137313c0f09e0af0d4127768ebc5b7aff1a8c9d22bcc9bc56979f63841030789b333bae6d7a057419a5d28ef1d92652670239f674a65bd5e2a61ef6c8a78f5a4fe0f5e843a96ccfb5db66ea7019164740a642390011ae95d1524866ca42039062b0ee4608ead5483d06214ab7d2513c55d86d670e277ad91875d6e8724654fffae0568e9b070887dff70aeabb41fa87716908968cd530a739f490be7a28522cd5f63088eedf2ffddec2dcc47c596456b0e8cbd4fcb77e5b4b53ed5c22e82ec982921d70a66259964d17c29cd5fd107b79fce9b2b6f7e3acd5d82ff9500194b2e97a6d8f4cf17aa8b031101cbfbd71408838f1382da41dddd6bbbd8d71cc81ff740ebf93be38bc6690c63ad0199ba68207737323a44d7942facab22e19a7822e31a3a30fa9fad64b4e7af3990377e4380079688e86c2b9aff4b9cedfc02c808eb0808f69d7f39ec2072b62e9fac3dab658eda0307133bd6b48af9735c02776570fe0743bc0072d59aae57179e2f1ec12ed99c160fa9e5865ece817433fab75fc7a0fad34a0ffdf71272c94a2f18fd80b51b1110ad65cd87f45ad97f6f13ba00c397c97f27e2304df34ce42a68b6b285136ce848953f78c3a1c826928e7715d2afed395dc237425e076c5f820476c1ea02615657cf7c52a64bef2d72563ff888d04baddc31c7cd8db53c8d8f2aa67289c9cc1229382a917aebfa283ab0e7f820bf84867530d5c6eeda7fa4324087b80816ed9a651157a7327658978b824e8d38ab3d0f4b10ac5ff209bac4198b41f12f6e9a78958657251945317de9838a15e034a5f4f746182f167bbe4a487a7affa8bbc36b7b34dfb1ff474c5bea579f9a23a37f1c35d153f89712112ab5d52e428fd25ab7405c1d30611f5b48313b417f36e0831000ddbfbe148e806819ccb50ce9185e9ed30b0772e68359e8d1cbc9f77a43a18f9c7a04c9037128a9fb205d07fbe15f4f317cf1810fb2d8e1c61fe23b9d7cec403840a81ed11469ec7bf717ae12f2f1d89624a0d23a6f08a0b3b51226626900f37b59fe3986a9912e3fb5f499e17c34de4862d909a9c9486b615671c3b8b1ad5722fb050d4114d00696dc9332b93a6f13238a9895f6863675b5aacba12183827184abcda32a7f11e402e1f5065cadf7f7aa278205df3511471a06fc13a66a24abb27b01e740d19438ba907081b4e98870b309ebdada9973f286bbae5142507e97e6cdfef5ac8d90b2dbe7dca06d7376b0219b9a1491a12f36866933b06d1b7bb0fc6653c21a04cfe89f44069a722f70882be6794e58e96d70768a094c57ae1ba0646b5f0f59c5571ec88066d9e25c006d7e60dae1460884d0014b9deb1be41bd75ef4b7bd70c603b057ffaf30b249162415bf0ed5212a4e237ff8957db65480f97c66a1266779b476fa2e7e18575d8c6e11d6f7439172a809630f3e356b88406f30ba06a712c7c81268317009622a75730e0a0465637fc5c86ee0e97e7aa6e7a1db390be69f51760d197b1857e8f8362fd274867619c3246df8178d4928c9e3ed99e17f4a9f86a5873570bbe297fa6b672be8b7fa2615b1702cbffe16d6babc9db60c2e1e3ddd82473b971721de91be72c77eecc26c83bbea989d7130a31d1dd65218b25ea7c8a27589e14fb4d910b2f4a014d329452077225a6f6af0f4226bee49555c7fba895abe7a1a9b29ccffe0d44e2bc23210846b27842e8fbe1d2a9b996e327a59fe7911698175fe0f13c06fba698d0c262546d443a9872c2093e8be38dd165f005d354710a38883ca6e1a7f1643d631cf8fece6982b714678821864ff2e2d15eb511e1a71e2e942ad092424304fc22c2a57fdc91313f6a653e9a6e9637bc58f782e619d35cf0144df26049453c6e622855b65a10757fffa276a2ecb37f16aa290616c7b6a36cdc2523780f0c656a7eb5ddc7b6f0cdd3455f1eab2c030af40e37816530340ef4f3db243cc9b002ba46e977d5d46e88c3b5626dbb4a3a803c54fd14535d475ee3f8a0623d51d2a1628bb192bfdf95b9188b03f3207afefb5a27008f3b1318c517de457480b596eb83ec2eedaf33db7777793a47d40c50d37a054417c43aa0e52fc33fe8a031720b0bf8bd2aef1382988b143abd6396c00c48b3bb731a1f91ef06c9c76392ca448668f7822ab23ab0848c2334bc7acd55cb83a48e30069f4b7678c843c7252f63fd98c5778d564e51aded246a2b616e6ad30384d41da3f98e8f11ac52bd4dcdd581cee20b7ce48561c6cc2a2abab54a9e8af9bade895c89a9bd43de6c2e11f12f8eccb3ebf0e3045f5c68cc9f5a2676c0284b7828227c54b397e493fb4c6b3f0d466f3998d416d39d04f2b550f1f41c6b8672dcaee921fde7b3630b64dffe830be62c37de38a846d74900f5ce831a9ebb1adecb497c9155a0b741c58b8c1e3ac195c2942b409492356d163a1dbfc90d83a67d82688060ab8b08e031b3f25e5139e7317e782d27a569b868b60e96d8bf70732a85012ed3de0dd2dd81379f137d6daab139bd95f0e57ed43d41528142cec0d42ac538376724cd8671e37f80220bfeffd680e26fc4aeed2535f39061c5176a0e9096a018ea68137995ee8a125415894745c7f88a0c983942d865d96aea88fc775110ea50769773518c440743890cad94a6358da8913f871d275e1bd230c9f46afec8dd4b7508202f233c640b43c922712d8768ec73165fd3ef8053941e9eace5788432c87ba0ebf0779df0fde0133b0fbbc691052874285fc171a5ba26f195e939d5803a2e580d0e1bd9e0fa087fd369854622f49fb850c72b76fe10376c8b24285c4dbcafd9440307f6e90a6fe8fc9ffb5b75e3595d616a43026a425253b129e4ac17d5063e30e405b699d1aabf24fd3ccdaa12fb7ae135b9875c645a7e2a21ce044cb456882d72ebcc34d3d1012a3611240cd22b3bebf7cc59fab5d7f715c45d4eafbb3c7c228891101ba6931f3a8e72a775cc531be68eb413f6d351c3853f6d7f5f6bd407ff689a8f15998493941d2a2ba5e993a8fa26e6d80c9c2f5a3b2aed15a1fbb3a46c7d879022f928613761febc94ca52f925db1ac6cfdce9d430cf8b7ac501139146268eae94b4a9c7c531d28f0713c866e7fe97bf02309a16e879041ac23bc4c2a5310a83095385a663269d09fd2278a45be9e2081198fc95a4e0340b2c16d0d7fd83cf2ad7949047656c01ee4d680524a93a51e76a473d0838cab7485c8db337d8c8d2966c3cf36c1dbb28e30b5195b3977e454485f3f153ddff548818518f38df248d7c4fe674f4deb65531a47a095cdc9672b52b29906ccac9e469362850caf618694fe1cfc569bbd2ef318851a69ae65e08b49b52b1df538397cfb4a32d528bacd1e95528217c9357a532ccfcb098d17101a053ea1012e107d768720fe2f1b7273e5426fff1001313249464a6cc1a1e3b3c9e4fe10d593caf5928882cb60ac861929d988fec55d432f3355b5e69b459ff69918f19ece00878244bc0677c9307dea8f825ed417330fa4a517c574504f659a0464237f1f036daf6f117fa042e337a6584489c28ab8004ed18b2738925afaf744b7b66602dcb5f5004ec3e4c57a9f16e14c236406bcfb29d3e868df2f1853abb509893d31b0d3482b5074110413c7fbc132a31b5e706c2060fd35c1ef9a0f628cba2579e481207512f8e58601fda18456f0d5171da1d75d02712da7e5252a0bc3bee9afb5d1d5af3d4db0f2df72b12320bbf0ec5771b7db36c68c2a3971c8956799913e687b65d4bee7bf7a4d8f0e3d6dfa4d067666343add11739b904ea1f2b67c5ec80fba67c278a0489cc38520c3e58efa8af0f18c370f584883cfd541067d5ee4bf6ebe16625d7f77fffad395652ce58afd6c5810ec24350f6c4ffa19f9db375d4bd1e2670cd7cd878ac1baac32270b845b2bae641a8369502a86df648e191e4f086c3dd8afd1b662a485cc3361a94189b7b41ecb4bc405e6a81b670ce15fc35fa872851038f77650945f58a857f4838ea8f2a208941c0763ec909f171986db47b2895b70a6d9cb195ef13ea0165984d3617795dc505179e8f7b7b78b583428b46b29332b05611efb75c17ce84f91af896bc4aec0920e0af540108d1d60725a4e24fbf4c5446ebe30e9e1a7bab0e5d07b831e7be3f4bca75d905dca14f7a0c3b5684c1592880e43088b263d72692495b140f6600e880c4265c16526c2fe0e52634187f248edfeac5b482946360d4e06dc798ebe03273dfc43c29df565483a91891cab60119efa7525f4524f50cf0aa4b03e31c5bf2f7ec930db42124ebef6b0739e42a38c92498b544dd9a06fb72d9ae117dea33b0448d0b6f10d27c89e9818548de403561b7483abdc477e0ca74ff50bf142aa5b7a6796a5413a56f37912c1fe29be91701b4ae0cc901531f5f3cd06630a8c9fe80a590125d7c2dcc270bb45daefd17586dcd2450d23bd15369bfa5fa07922f9072f5cf1f27fa9a9bb2a7daf4a608185f30a6e4751d01d5050d8530bd45d0bb76727e11f7ccec540e1b0ffcca26194651a3edd1b8fdf579eb48926e968ce0555597de2d1d2bb9f0a5a7ef7db6e9e41c30a30628edbdfe57060f58f9619141f53eefad373813920a14bd68fa9752b2e51dcf1b9f8e0f81291662fd0d759dfb6a9183132686c999308e48d93e491a7519c54396f0478042bf0c890d3c03307a0cdf45d33e295b7002eaa08acb9332f9b333446e4b7a7d421310d5a5ac095690047eac944a1471876eb0fdf7e8dfd7ddc5379a36dd7567e6a7b5ecc86190ac66a544cf4bee49a9cfa5991e44898d95aae9083d840f7febf52a8f6784021e269b9c63751f9fd8a477a420572fb6a3edff1949cd26ed26907b5a1ec249d0a0958979d4b8a5cd7aaed3b0803570ea8b779c8471fd0036a45af1ccb622cd1ccfaaeda5dbb34bd5401f18a46e72481fb0598e9b485ae743164f4daeb9e04ead2eff245a076e1fb82af739e40aa604380910b04d7e7144d01c9ca4de70e9a3e70be809343a60c63ec8184bb8373a44d9b2a7eb76de720a136b1b01b57bb49fa705c322a80d2791183ceab1bfb9cdcc2908aa1a5d0b9c42383dc443790a4e4a1957341b3bee8b6a9902c352edcf76c3058f9b35554b0b561eef27404d3aff04493d7eca43259b11bce8d3143c6de4da964621cc571d5876bf6c950c17efbc55793c1b8e468de6fcd03caddd0e90a8dd16c2cd9cdf6241deeaefe2b6b1f8e39cbde1bfff9095b4fc831887f661f5e69555cbe1f794e2cba4d64f63d46f598342e05213e045f55d12cd62380775e5eb8f07972bd6f3772ff63d0ef7119a3eb84ab60962924a5bb5700972095776a6b3c8d42383083a6b6472c29279e11abac1c491c52c8aac451fa6ec854b7cce8ffb3f9a76e239685fb0cd2419c7e5e4a65939633f1bd6637d2f743aa4dd44170bee790ac757410176ea2caf63158f2d985068e84c048a9ed949a6fcd5b709fe218a84b804f469f0e02e4a05b3f7d64637e6243970faa08942f5a4375472ac22db6ca99d6d7f7ac1cad5082d9cb336cd012fe959e833d95af5ad9443d2bd62565f0f158cf0c6d985fe7fcd073c2566afcbdda2ea6d3091e72788685ea8974680fd5b21e0af8ff85e0d84a6ce9efd0ea64a097eb78ea9603643e8e82ac22508fc731280459e3643f53b9ad6b464d3397d55af3350267d496222fb97cf14a08db3a26636bd51ced58662487b6f164f0c757c5cf544baf8281f206d228d2cd6903784d4a19757caaeb240f272dc3c85de94d0632580ad8605e34c691fa7a03699f1f2d9b7e4c9973132b8e08012ea4291f784a7c80487abf367098d81370c7212fa6b59b99a3b21ff3fbcebbbe5b0d49be2f01e594dcca0fa6cf2f54f168e355f83c4c2930c8e37a2cb1c4682ffe08e86bde9461624487ed168cdae4139abb27c04bbaeec4f80eae7830f6edb54cd87eeadc04d9c7697c2611cfe75293500b2118b8c1b64aafceeb79a8acdabaeba761c91e7eb34668392fa7ea97a5ba713f9fc18790c524f61420c5b99ab891098c0104d23f861fc09687d1ba0f8aef1c46f1e74508c56cf517fb8c21235e58187272c6e6a71ffcdec60c2c822f6e1d9b3dc380c84b0f5df31022f17749df11de9b4f471176a5a18b2e14ed4c7cd9b5630879f5a8ef242502f64985d39e2556f3edf87af472f561f78e66c42df507de22e198a4aeecc491303174fa25ee5e797e2cafa5d691f11d0a89cff39fce116de44b3973f3785474b27fa7a8ea13ca76432d57b90b9c1653163e57024c66643e25d40c858260b1501a2de76e388612b5a32a5184d34f1d4b0bd597eb11309bcff1c27b918da6ff5dd5f9cf15f203afc2b5aa1ff7b52b4e83b23ae13454dd5ff11e2a4632e2cb8296b04b490a2b0cbd1c0cf9069d1d7829a2568e3d522be026490cdc57612910c074a844a40c44cfaa797c2c3eb7671c5cbcbfe368c9a6a9b538265d05066f20085dc3249ee4a624bf6452abd6368b0cada092d6971e9860a02f40dcd44cef92f183917789e2d70ef1927884fed5a0e68a2c8b4c69a932aee086005a866db31fd10e5467aba54af2db62c35d7edab0050e134a74d1bffad6c27be6850e2b1a2a098ad04e9af6debfd81c95b1d36ab401ad437d563b74fa1467b540a82b879b62e8007a93795fb888cf22618cdc0561682434682de636b27c87f944450bf921b7e304657f5f7fc51e94c6f227b404820f948a166851ead8ddc93372709fb6faa212bcb93dbb7a3730740545e17da80a2192790523e9c524a30308e675e6df4eb431394e25665a983b7dcc41f3f3170141b5e97cfbc661ddc81cd3dad8dfe94dda8c04daba3812ee3869782111105a511a7b80ff7ddc60c4d82d75514532e02ccdd3092bd1e6ea8adfe19a3d4fba11d7a8c01a1e24ead13f57389d2f689763b24d8d4fa1ea1932363dbf2c4eed25da7dd22e5760e64a62640bdcbefe7ba4c83f952f7d03468594aec5855318d3596a656171c70d440b7147bbd162a0f167671f82783aa0611beb2b5d388b0b222b49ec5eef5b7f5c51ab11a142b49cdca099a2bad62664e2b18d47a7248d4ec4a86a70b93186c3a67d84ad4173b56ddbf48ddac9116d6680a0826ca6cf680c39cfc97293ff62ca13cc6d4c1169356edb043cb00591bb6c0147716762b5bf81e6cbd2545eb774be9bbb134dff03c1908613705c7be5393e9a5b8090b2ce4352a84f1d18c7a0489fc701539e220bc84e6e20a437349a43c403739c128c96f203d99e93c297b04c6b99f5d16915b0115d726478b75f530b4f09dc025b0893d68d0b914851c08698c7e3bab2736cef87f80e3040b1ce62b5a7d5beba81fc7b5795a0f056d4154512dc08f7d16a4e8f87b18151441a31b42b645eb5c9bb7a66fbe48ba5837a9bec45f58dcd4cbd2c4b27efd4817595f33b22a94bc86a5d3be75942fea5fd1537d66a68bef00ad12ba9300cd5ee15090b4068477bb9f93c29c23f5adf52406fd5e2478c6cbfb4b6267eb21f7bbec994302acf58fc2b192ab3dc787e7a6f36b04c2ec639465662c70889f4e3a75f5a3315e003b80b34f84bd62b03d85bdc67d6949a38f97e49e68b87a977926dd9b3bfb8a0fe3ea868cfb09f9e1ad06a99cb9294626b6f04e3afa14c673d8523796e23b51265db5888a6fe00be7ba8f8eee8af78efe2108e02e97bcd819b6b243b8c017f3018b93817156262609d4246848830daa605720c86439dc1720731705caefe80c33a86c8563be6de3682f3358bb533f4a51c9547eb3ae2d17ef1241c154e256218c984f0420aba08d463fedf381d62307a2f12cb091451d77eb9c8e5aa2991b398ad6aeb6765cac44ce341c48ba6822620fa64a62539f85911f0b816cf63e44783cc13ef08932dc8cca093320c6d7bc8168f8e05cd5c9e75775795cb7853300b09c05c9de075a861fb91173f633e546ad6c66b802dc57d32373cb4d8916f5668fe6a85fe28f7272f8da887d6ee2127d771a572be91cd42bdb2b2d4b6af8169d40a93970a1e121a40394323998c2cd2c15ac62719a6e05f9bcb905a720c7c8eae346b3efbf018705cd03d56c5a6dd0e5d2699181657d2edf1106c2cfa1496a079e0bf8713ef26732f51cf0442996c72c5f7d30fd45c0ac0716f86fbf21f8b2e7350b47600b80c164ee5af5c15a6b7c10cb070328f4e25c8d4537cbcefc58b9b3e43cd8111dcaca76ddf587e14b4a51a017ad98c9318092943d3eaca78041e235e921385330ad51b0a3db194fea8dfceb54b031e03ae90f2b4a5a4f26664b7ba7c50898ae81a6675b446b70bf2b3117c3c9cc9a59761384a1aa7b52d4cb481fd12441fe0a87b693dda4b1f458a90fe1f915cdc14c1aa0efc51adb2de916307f3e41ff3347c52edabc6a524a5758a1fb32a48751a925e146d305005d12fffcafacd137285e8d7684921fe278f19784be2fc3c673bc72200ef9a6d97c43607e188feec03c340054cbe632128b86810991af1393379c447edac971c3da1c8136d5f1872178d03722800e498ce1df3259c5849d777257e3831648f58446579ea2ab668ef5191510c038a038524e9f5e90becdef40c3a2d8d7166464c7c6af7da95d94f01108d810039642011d996a6e54d18e59a3f54026b8e268e41794d1876af99226f35641e261419dfce3347bdc1c9251b9ca8fdb1915e6c66540e523fdd398444d69e53e1fe1606e525abce4fa68ea746805f245bd6360d690f2e4e04c16cc4041df3e9b7b3695bddb6c30c0af5e6377f785bf54325b7fbf7a6f0070e163a260d70955a315d83a289e0817b651d80ea1885cdb27ff2bae856f1cfa38156e4eaa2c74ad25749b71cf44fb52859dcf8eab8ea720347c20fdbe07743fcf1ef316a24fc3b98006eca924308bf2d2dca46aee68c58b03ffba48df420ef5020652b01f3cd19cf43bf16d615b24df1beb8b618b87a437ddfc489e94511e90063e1a1ef5a6d2901c9209fb0f6bb4d197f5bcb186b359dd3a0bfcbc47f96f9dd5178cbf362e25494c7c7bcfeecd53db4c96eea2adadb4991cc1038a99634106780bbea454d6736ffb2e6ea97fbb2b5899a77ac6b4a2fe2bd0fbc2a50b5c574b8a7e39f66a54fdb3563dec34c9c78558057c838e8b1509bcf4410b00e5fdafa60ddfaa652bdde04fbb63edcc3bebb47356e1b35ed51569225c144b1397ff244e9db58403633e035c4e96b3b27113df0733ed6c8eaef98a5f4653b7517238b482860f7b515368e51640d6d5ee2e2c3b0e0200351cbeb9ee79893267664d63c6b3d55d02ac6b23eee8d80f2a985b0edd99c77fad6dc1e0c3376a0e9dab144ccb741cd8a67a072f0992dd2c91a172b7670366730f4ee5d21d7c4c1cc01905431b1750953a92b5a1f21a090140ca613b6c6279a8f603363539e706f6418c4cbd56235165d7e9c9a4ecb7d7c1da34c9a8eea35e6ac5f6ef4b5004060de424be3ffa2f516378812e6cf5623442a3442296a33bd9cd3841ed5cd43539bb3a57546a944d2b2d0b597d3597db51e93f2977ef4ef5b66dc6bf3618ae7a7e6c2ef8134a65d6dbb569235ffcdc7481516195c4861b2aa2901b87b1ed3e8330b01ad406ec9daabec6e1aef2ba7e3e0afa5d9149807c5fd7f204671a7ba2580ecbea8e7495a32f60ee59d383eace4d1efd372130a4d5f40961102b71aedf62a57b323b251952e6954c2d833b58afe2537a802719ffc26abf0922f04827172106c6c5dbebfa12dbfb30f118988d2e874c94af7ba743fd30ab62199fa622f84747566034279b966bd255389b9c32e50404439cd96f8686c5b8e44b37c35ee6239e98a86934f44c3d8201bdf35d4597f8b853806f37410ce1838a065110df8f2798238969344a0fe6aa082f1d0415b8a3651668e2a2d5bc48132ce11e63976eb383a5daeb0b9de8dd436f345d442095592aa393ef24ad9ef1777523f2499967cb7011aa4c6698564c0963af4828843500cfef609f45a287f5b012b87a3497acf7792b620d94e3686bad2e410f467ba6eda1873abd4e2b47d9cca217787b6e87868caac3bd3ce3dea5bfc6787006c80935df55bc032481c8af1f4931105d3ce3995ca0ff7d4f6160f849259fa1803439e133b683f01e9c29982f0c4bc66ba5bb25da8c1e449d980482fd5299b52d25be1660d9db5510a053bc85e548b44aa75e1bd7cb6f66be9e70ced1de61b64e70a62627887c59b7c24741423de7705b40245d48f4d3b50c17ca41ce87c14cd4a935d7e7476541a34c8a62a86152449dcee010ad35bffad6563fad97dd83d037cab9933a802d4eb93ac0989a57452c32dd57df12fa0b942f22489b613791ecd86a396b8f0ecdaa970b950d611f4224285f425d228361561cfd52428f8c0f84ff69cc305b481807a507a10056830a96d2fb3a0a1aebe8eb98364605396ee423e954145560e1b5509942594a1b999ea37aebbd9c84afa570e74abb5135c470bcbcc6d67856774a0d4a7430ac052b7c9c5e2d439957cecec16a4cd7a52cb25fb77b162f430ab248f315c46c4c97e098f972e68f714002d27b22307a2b08caa5a3d0ab028145d9ea0b19418baeae2e7575ba9550c7aa2a448f55698928149e958f4c4196bda756ca80f49435d092b1ec0114f04ec5e8451019bdb1b95189edc972b7837b04fb5601f81488b921a1327a2cf49fb9012ecb88c2285fc1bc1c4861325b8f147ffbefad89d79295ec153df139d5e0ba414ea220d2265a6e7cb4ff34c2c169b3996ede7678f92de58d715351c7cc73d47bbcd5ca39ed784a91dcdd6f1f37ddff8a4b57cd77ac5542c2760c45547bd929ff92723c1644e9c758b11f8fdf6de2538f8e939d897d2b3d5dbd12d443453235ea194098a501cd1e56919eccc8ab6e1a4d4456275a3dab0cb1a8860864751472b9368468d63f41584185253ff84941b59e5f454a07ff94efc0d256151b8556fdbc7c0085d5e4a61ae46fd122d9be2c367327b0a767abcec3ea36b115a8d19015493358bf8881bdae35f81d08380e8c51c4c944d4eb78b827d65f3c51646111527913a1a04417749d4485840e71e6a136c5e8b8413e470415599b0814717acecb055609ed98d6f6a2fe0efacfa9ad18c39ee01a00dfcb85ad2ed657636a156f1eb43fae804f04e08116030c422180cb6455386d2da82e3bb5c7148b21ca4072ba55bfa99243717730110ffb1e7c0d7edbb86da49b88ee6a662cc7cc93a8d89d1bacc471e0e7d402b56b030b53cbd0963d9243c5bff6e89804a2699288db75c5fdca511f7220bf81a8c1cbf06a1e2107f2972171709094cbde6186aa4cc4a083632f2662cb816b5fb16449a275419d1ed0c09f4c41dc20fecc3a1b3fd3a85fac21aabb8f6a08015888e58321f12c7138291e6210af90c67c4143fdd8833982a912b4fcae6d982517ecee48061a12ed996ffe1f6ddc0b7f9226a0754ecd768ddbb7b15ce958983220d95c87f6d2a04d7f79b7ed8be290d86d3b771c1d49044c4de0b67d0859b9cbe7025a4474f8e80c350f06ae75a857aac89df972a125145a71a79ccea7bec2233c9123015bc2841167834b197c2438eeca767d7e5b23f5fb962855c20800d609f3d31bb9e54f581be5af1e3144445be36f39591e8aab192389220147c425ef5d040ca184823d96bdd99b25b693d3ec9088b71e2bfc35db15d675fe3c4836c5ed01516ea03dffb69c421b867d6de08df949d2ad382ea6f25ecb4a1b8a37870594505dd18c16741d9719e2697e3811bde9f275357e2cfeebb6deef30c66b1e0dfd3feb4b4b7b84ec33e97fd895e564db57e0d4330979838ed08d69f05d1ca6fc1ff7e2ade5688ba91c9cd791dcaf64c470599dea6cb0c1e694c4a4e33e7d80ba9ffa84d746a475d52bda2cc3de61d2d4a5881f5df48a5404158aed48f2ba263b7f215ca879f32ec2f9b7e799d06862161c2e52032ba0c4a29c884796140e480ab7815bb6b49df8052582411e2c9ba655b8bc447f79f278e2878cce6a9fa4d95d0fe945a9c44e8eed2910617af9ca1b744f763a1ea38242b5dc5838d80876c05170cff0a03c5da1ca36ac90761c2d41585471158b050172a218d7eb7ea96be5660e50b64e564b4f4a201774b7a80d2436f6deb342f5486730edc1ae0bcdbd0ab5eda99e1bbf0ca86c3d20a1eeaf3de37e96807438e6910eb126dd2df955e71388c3b17b81ceece37587685aa3227b3e53181b9453facb7d7099abf2b843cfc39fccb99f9df23c65ca23dda69550a0bcadd7864c82ce2c90e60a2575c15973c433daf6b7766403b3043cfb3d1229e3b7c1272d9158bf38cf084bb5b66db7040075dea12d94e260cedb7abd10295ec1a006bee5caa199bafa58f1e39a411d0b2b069ca00245e319cd57dab505fbf1edfaff367fea44642d038e62f8c809098e94034569799929e7be555091861a7013fc7c58fff7c7ec9652ddb5a48e880ac3ee3079a8e3e8b826c43f60bd12088932deb679774bb211b1699de5127cc203b4cdfa520de746c0deeebc9797405f2aa7559139ca0e699bb71f6317609681f44a237abea842bd07829c3d23d1cac1253dcaf7cdb883c8e43ee1a164f0bae3ec5cb4a4f944c5354b8156eda4ab844d6d8c939370e6f02faede1941d9d8519865644d69a2627bc44df6d1d7e43344dbb2bbcd8c2b88615d66e2aa1ce20d886a25883d4ad94fffa52f078fad28ad3d86bb60e27e691a569823821edff3dc87c4889f34d5dddbc8be96ff2f0046492031cb69e65efc6a194253b2a6573932df4587f6c8b430e35c12545181bc9485778c6015d63f87cdbd8457b9c77872999e5f597085cefc893b7b9af895585889f82643379cb5d29292ac8f50c3a10a96f0b734e563a44454e94174f578df793a2d5b7f8da9a44b1fc2b9c174de8474976793dcb935385634c3953d881066f29888317c61b60382230e4ae3aed74b01fe81295f70a3e09757058856aaaa2d9d017980a86cdbeb3c5491c701b2017a1f86c6553d1e2423a8e55a012b09a02d3b74343726933d126419f0659958edaaaaf175997aabaa7010938dc2f5e36c3a216722ec970608859cd7094a16d07f359ce12d73d1eb8cd280a452a3ddb9fc0e2b4dd8c0ea18af24ffcb0668d1774fd501e87f43b1934b4f180a45a1cfd7981d6152f7ef65200459781e636cfd2fcd2a6c3c580c4495b4ec6b886218d7b533a5796dfc3f7591abaf7cf8263e6e32f03a01f6f7b13fca1d39f79cfbc481ee031be831e8bc4feb5bdb3e3250b1071fe842e971e840c7e8857498a80803d40a64346388cd2059631ef83c50e3be129aeeb017599a1cdaa859389d5539b2f5bc3e5828fbae4572259900ad7f3f9e29bff82818c000833398c93106a66f824b6b508947c5d368c5dddf2e75188e6f54d6bd58fcbb84ac5dd9f9c8dd70fa477354220e4aa4be7babe519941a8bc85e8094313caf7e42f0161f16f3eeb18e4da31f8b334732559585a42ec2c220344ffa20692a0a48e502e9702fc511f2afbb9e33106900b5e8b5e3db92f08903808e67ae89ed50948f20785e9fbcb404a0af79f86870e3836b5af8ea9daef2987092836275aa50795cf44b0fc2e18292bf8f45c3cdb7689dc1fb457e1cec535f32f0110b19e5d02507fd4ce9b3f55a6c23079f78e81db7344e1daf85c722fd3c3cd690e72a8c8058edefe147ebe8711b120d359e564d01bcc4561aae34a16a3e06324441677b3907ef32a813d0217d62905e0cc8de84d47d441737fed0e4c9392c5c274c459b0403fe8316f7b78f536b59d004814f4fae6d4530bad7bc5ccdf1bd0d16fe432012aec06182ca3a47c000a6a4b879f18aa2cab206b9319c80edbc8f51f0bae718b95104948b8d394ed66df4191c39c039ef125a43465b4b672bad38f527ad42a5e5f917855f6d1695b5c6b6327672047542ca1a91da1e23cd56b67f1299443083e5222ae647a597e2ea51b1a8ad6c498f70f3b98f3043a305ff22374796f607dde3fec3bf5e176c75050e94c3e4341dfb58b8a720db7ad13ffa1ea7a36ee106d0fbe225ee12ae01f81bf66ff38ac776002a9653e44867eeba26ab0c19d3c3ab37f984f6b2c6f07e56f51c0a7dbe403ff51865a21dbf0455d00b460d051759267165d11d9dd2962b73c0434ee88dfe7cf43e8b7a29fe231b57c1a5dbdbfc3a11443f0260dbfd375f28af225a6137360079bb7716780b4a96cf45bf5584888ad04414043720cb11eb4fb35106d61d94f56cd196323e34b453025c246e4e3ffb82aa45d991eba13cf4919043368036c2b61d5e67cb969539abd58638444b41360fecdfd826e46c9de322a06344e947d6a668f7482d4f1211b8fa81c7674b3ea2026489b335c0613ddc6cc9d192f43dcefc393757165c3a73ffcc3cb7f7597bb70b08f77beda3ead1889b82a2c3af1488a78804fe3348d6ffe1ba5e032ce6cf69ec749470cb3a4201660d5c38fa79bc896cc1cd6da552dc54a198d668a9431d29185e6b4586f18077fa3a337227025763f20bece851a207f2f03217f402d3bd1abb3712c69add214487934353ba29cdb99c17d04d1aaca13edf4496b38831d9cd17b60834d92cd184fbbd05e241c92a91f7df42ac2c56e03e08c2fe476405c714d7f43fd9edfc719eae3ea7cc465a4e102d1b2ff8b254bcce62f27f8fa95a92ed23effe88728b8e67e1b9cf03fdce937097399a31ecc5e63b2adaf159672019ed4dbcd74b4e1666d1a34923a2943143b9ac8d59d4e1d0bedbcfaea6174f25712b9cf862f5e699a2e1193b0fba4002971232fb51b277d6ada0c81726ca2877bd07ef5202079c7ff0aa8263097c6b0270d0e42339b405c61fba6252fb225c2b3060ec1dbc1a8b89d3fe7ea331b43920dc381760e9c364c2eafd9b57acd6a93802ac231a47ddd2948179095fa0ee347dbf5ddef8876af62bb738038d9f5f8fd07ac673e299d01441e7379874e6c07bbcbd91af9d73e55828f7d775a01d70fea6f55ce4cda48f73d0db4f069252c4722c06d5e03ee384ca6153e7d1faca0756352292279407b41aeb3a5ac6b8c5dc17e94bdc7b47796625fd07d61151e60c640dd2975e02729d9e68c4266156e27e944d06f073cb8437a47ed56d73e0b7928b32930d797de1189b9f1ffea3996c524bac3b959a1ee96f40a56ea5af8f20e91266e9720dcccdd799b3bc4a23dcf6a730f65550971983fb476b48b17976d99fd20b779fa56ef486bd2bdaeded8b063ad1f2beff8d03d85f9496da0fc6e06ec626ec6493459bdeb4434329c654afeaccdeb23d363f6981a5ea7e3635f8c8e21141e8db4f059398b7c60c8033eef2c0922b7459cf363b0819587e834998398ee90d371c4a4f5857829643fc5466ebc4a0ea44dba8fe2fa9697c9465555b54a16ea0577ccf27881c296c5ed70441e5a79aa83d0dd74a5fd9c7ca44acb03c00bc142beee26a32d227e8c4c4f26359ce6f629d53096335a6f51e122361853cdee6e0df06b4527d42617d0d3faec2b585d4dcdd9f8fd0d7ae5eeb12b02b7027efbbda597e5770e25f18603ab398fbc2f3933e032da1ad171d3699e87c1c024cd05c4fa2333d253d50627898d56571cfb80cc6bb56ce2538640e9bc4fac80a936c7ef3fbdea11b3db6bfb3e7d4684e1948c0105e672708ba1275c16af29440be01e1c84cafe11560a18c737d5e16d8e04c452df4532112d134bf1a709e5ae0f003f76ade8a915a277f026100f687bca80a092e332311e97e3e9ae19ffa8ea4fb3fd7f2fadf66a927c4f4c929542e85aa0cf262a72cde0e966f5676106aaa83628fe25a06512e52ec7084a689d0e5c395c346df78a3de8d3a0ec56d02b9741211a8f6b44a643f2d601301ddf700d5239e148ec924de8b564bde87463770d361ed54b854aeb0a7120c2ba40dd4dc17782c94f8794fa651e24f1351366027caea6586ed83167d42f548ed65b04adb2cf4de309df4dc7eb901aedb12b75876653eeb8c3ad4b58b5f009d51f473a78a6d08b0137feada3c4e08d6cfbc4fd315eb2c17cfcb51774a0f239c1630bd47e4b635426a338ebdd3f4b35fda6b98eb4874ee4da3f7425d84bf096a76fae024e89824b63b8c338c5c4714aff66524de6152a1d317234c564e38db35020a36b6e90e9b7b5dfc89f95a9d762c74ec8f7316361d4764c9bb169ed26e4c4614646000e7f2ac2fdd0c81d6046ddf8d5beaa33b131dc0034939ea30607f6f3c45d30fdda009418a2b7bb18bf1e40931a0801b1875156a973ff36c280a62aeb9966b0cf92dbcc7e3b69d6e83c1ccab9c17ec844cf299da5392936f2699ffb59be37462d525afd173efc8b6333ad9ff9d98febca14e093c739cfe85a70aed59e1c72de002c5d941c67949cb8afb0664f9e26f07d97e1dacce42977c9e6c7577d0de4cabc7dc463e231d71173954ac5bb97d0e1b8ef6d8011679634dfeec4c6d518f0d4e6fbe37a6b8c94c747877540ed6b48be0281aeb8c48e45834213fd793a89eee73b90d25b8c0cbfe35ff9aae0bfa5bca9ba1107fb1fc6a2b890a0f835eeb7149efd2c40069dd039ffd02954597487e4dee6ce1eabf350e78be9760c444c6785ac860964512acf2c6c5bc794e347371a99428c9b8d25274d288914105037b1c65dec9b2992e652bec0bd13b0a1386426d07874921ca550d4b5190e0bf57c658b1a15d4dc251cd97b58411055d72bb80188198420af49043ae1e1d845a428ccfe2f21dca7cc536b8a8abf846ed0acd158aff070476b2105656b68aa0db8d09251e2c006cdc5ba559c6fe33901556e1aa7b653aecffa972c691465016690164f80555717c5be736e252592480b08a0da7d072288853ecad6a090dcedddf81acc00647319b3a58b432f20b2cf8894d207d28cf0fef22df04e8b0a5a9b4b49558990bc114086347cf26019911c7920bb1131a1745ed2e1e0f0c9ac978829501ae7e966a37f8897ac713b77bd9ac2d0cfa27822bf43fed99c5dad630c4f903dff24d9050775f8932c856fd07dc8af7a46940cb675b7ec747f6261472af1dbece673b8b60f9d969fe775cfb1d0631828d6f185f127ad6a2d9df2512285f6472aae7e5f9ae67d93db25c15ea4ca80642e0ec7835d1f5bede9848a1cf41a22bdf5f1a418652f0d991b36ef69f56dfe68315fd8c8e4bad3bf7efa55e875232a24f22bfd35897ebe055180d43c0244f41556652b9bc9b54137339f07b5022fe0f4741b4a1e9fe8bf05e3bcfb69e38edb00edd85f006231c51c8fff547ae90eedc4b95bb082bb8b846d0cd556d84dcedac9aaf523ba190e9498245cf74a9a3858a87cb5119dde56db5e5e29f14487709ea0103f0cde2f53aeac4a753c8cd9a2cda2b203bd6749ccb7d4102da86bac7469e70fb754b5cfc9bd0760e53b83eeca530e0234fef538d05fe04ea1b769cbedb9f529f7f29661a7adfaef1a57a730f01336a511501518d3cc9372b2895ac119d45ee93a1921b1e1fc0bdbd016b971f7ea2a75fd8b06d365193e33c99a34d9057541107b349ea43769a73f7e41d333e249c91e4f21c7cadb2cb1305efa2d08b472ed826ebe77488444c664dc50099943c21c042da5b87a59155080e4bc49378cf1eff4e23f8baf0039823c00012cea607e911515aee3b42fd5ded36a0db7648a2921afb1a79308f3c44870d35585d6954c4d6fc40f953fc6d2e0e6a3e04ef609b535eb067a7a79395c24618a3d0a5532897ce5077b226d9fee4cfc77daa61f3478930ca8751ed73a953b9efbb25b03b12e5f6347deb9f41ded6e21f46f6705a11e24fc8ff30312d7c480728ccb5702648bd9b3409191ffb1dfce3ed68e285a5de2ccfbec25679fca34066b0a489eb81e98b3b56a36d0a621dedc692d6320cd8884e37982a48aa0feed5332a3c760e303f4dc73f1637dc4bd3ba23529c4029485251660e1803d8e4b282041e725ff95e6854968e492e213e1144fcb2e11cf4528e7a38dd9962c776636a3dfbd9efe6182b0795d9d778cfaa293b003f0cde0d28b0596d8522f715a61a2526ff2f2b26b8a9bb3b95e7daaf58fc3824fc05d56ff65de039452908fa030958b8fa285d252084e53c6fcd0e7a9ea31bfcbe551a42dd3c3809ec8de08d79f5af695810aa251a1e452c3daaa64c94b557ba7f5c971d3c86b227331cd29742848f15b3edd46f28f5c1ca534bd514027061ed923ac2493272eb0dd35fa4900d1e1b79ea126ee6e837799c053de51d87f8cf7916d8fd1c50c7a94d435dd3ea71f4c6f36403069b021514a3d2a5915657c306052438f7bde0e674e0fc26aa8f149bb76ed323ecee710baeabeb9e2bc52498f46f458348a6f9c257ab8fb9c6da23ba4782869a0fdcbb35429f1f7eb32af3352ea2b1cf0dca61447966dd6a8c218aeae1d88f2c5b0e72644e48f47849e1cb495c2206e1fb40cedae4ae345496f7e8e46bdeecbdba833e2b85fdf7dce1b12db89e8f14f8d88513dcb5a8d0c9ee5457770cecf72c1eab6a23447c19c8b508c69479bc5febbbab89832acd83f8211fae747dfdc30c55d4b5fd0eb740c1139f42bf458c477c7bd62864cad99f1d3068104ea7cd5e01fff71538cf867243a2977e11d72dcee70ff2bbbdc9a80b242ebc012062cb4ff1689236c0fedcc86f67b18a9968a07522e89a6323bbd0a25c7e9f06b423386901a5fe308d58fb70f0560cf405abf8f0815cce63bee08c90c9c847e3a54467fc6f97752e5acd84ffdc605f94bf40de25d185492d0d8bcf4ebebe3772f1b48c1a30643037f9856b52ad99557fa0c294887222584e3dce73c65ad1688dbd6e426ba5e4ca2054363d347be6c27182a13b1856bf0f4c2cf8e23a885de89d8c1dac1f32ac46f2e1d1c865da0ccc9855be7862c9380ff3ca55669c74eb93ed74c5fa781e9f552c368028aa0a1e3fd13d3a9758ef2c70215a5e7c6e662c24269eaab3ee9581b70f894ab2deae7740472ecb82b3e7aec401fe227b318f00f8df9a68d42b4ad5613ce0675d9af88365ecf7917445f58ec158f24fa40b3e8c482f7b924883e3f4da0fd6845b846d0620ac204cd82a4cf9deb5ab8fedc6d0ea91b05b3aed7224ab5b1fef74ab051ea0b1f70fc6da0620e448063255b4c8f51b4468433a416cf4fda1384498785e122baea3db1ded10bfe79a6f81c5663674dd2bbc90d005363ef805530d7aed725802190af65cd5f46ced7ad6ebc27ba38fd60ab199d69be816c7e6397faa6d10442e51a008f43391ee871ed3211305fef22ff1de7f9c2a7015e82f6a9c45f2c0fbb7ad7ea8732b1fa7848e4f57530009cfee8884dd3dcace5924b693d0b36474b73db2e48c4e310a1fcee0a1f371a221592089f33228384e03076dbdf66047b075a26aefe9c318a5c739bcf4fdf561c82e3c42672d81dc9b695f5d63b1dd2adeb2c01561fd031093ed3bc13528f4f413c52eeda3c90df71611245d8350647cc75ecca6da9e4b5ccfed741225d017523cb65d4680c0d08356ae9c2ba30e08c267524ffbaeb33f3831997078da55aca485b5450d3531bcb744d1673b29965163024dc2e5ae3cad44036ee20e34453ddb2cf6226758f5b7fd7200e696a094387f17e1db7d6ad1df0c4954bd22372a07ebb55e1563fa9d01298d5f5489f549265e7e56d12fe3fcf6f8006fd55d09995432019a65c0326b28f218434f37f3396a54757c01e54ad6d8639ec7451cc1f82efde176b7d4061f1a5bd4820515ee0ec43de20c25614100366ff42a01ebc1bd2fea3b72a7ef385a467b4d0bbff1b69ff570b2deb6e19ad47ce8428ac0d33971020e64a131161066410f05a8231f6f47503ad5dc5f17f94db509bc99b4823911325af8ce96fb3e90fdc987a53a5e49e218a1c9158babb1a219c284418b862ad0b0acbfbc6695e3021426acfef3709ce61f6a5a678fe0758099f5f3980c6c998c0dec3e5dbe1e684c39a3cf1ec2aafc60e18a49f55cc86f62150d6ff710cd37bfbace3726f4a166701c5ff4559fe6c223eaaf2b121977efd2b047fcef57f42f762a16323ba94e8fdcd710e43ba0ec30af446a38169bdf6d8e999fd3bd8acda01a79146b75fdafae0fe3502be1dcc9aa68def66e8df28e7c4796c7bb7b4b532bab8acdac4d4e35ab973ef79aeabd1831eedef910b510749615648c84af072bb968b3506081229aac57393319ff531d6af9c57b7733cba063c9294e86f4259a5ac5e9d0e42b1b7cc6facff8503ad0b393f73644d8ec33bf84f6d2aab18fa2a479acc9ebaaf1a6cc24765ec630630753e57621ed14cb3658ad4ced97af070698241d5c94cddb22443d06390e732b5ea295623f7be409e94d2356ecd0764ebae94794fa0364d4fcdb8ddddc4afcc87f464f85a163140db81747244438a99299540474abe182ea5e7b1e1bee46726011a76ce40847142b7c58b6d3851b377905c2c12083a45eeb98a1eda1c1722e2fc369fa0c4349408d671ff976bb59c980adf0a7c1ac0459a51539ea543ac0fd00b4313e76188a7d10fee734ae2c601b8a94bee6a2074307a789f6bf116f9bb663890bcd50411f3c61e53187b969a59f6c51c9f87b03338c43f68131728573d642a4b0639643c2a809d724d66b4c28ce345f8ce304128d6c1dbce802c472e29df1a5e66c333f11967f9d600305141991bbb2b785b4f0468deaa0a537514078ff78b79e69a543eaff5a5add2ae7fca2a59449e6a423a54a7e1ac012ca53a8887cc6cf9746788f5f37b266c77d2765ad5c261f3c62ac39d23eb8128fad2907260f654b28dd62c6a4989b2488cf938be693db7d4d1a78abb1c41412cc31d5aeb4cca4cba199029842fb4c25883164d9f4e5091b35772442e99c1b913d3e53aabbd09f38bf99acc70674fee346291ff56d2743ec5038c99ec0f1732fd535de57d5ebbedb1efaf32015fee7e4e968505ca77c3a3bef580573c62ee4f387326b590d1252cbf68840a4a255f781e5795d0b16f5087bbe9bb75ef9fa5c76d7f029843d69ab2f72f71e0bbe241d9c6f0548c33737ea27ed9cd0337f6c805d33301bfe0dbd071b55075d990a10cf8a438a7b07e68d6aebb6fb7163c491a9ba370d61d2d89303b9118f0f49a3df549e853a9cfa18835de0c4dc846f15a204af5e8ba2fe7c3342b2f6c89f03ab64e94f670c33a91e2ab7f06c6cc7c134fb4c86b1c827f95139ceb45611737b6570e83b56519b8538e3ac9763a71ec01318b92ae8e245a791c9b609a2d308c06f9245c5905701779e546ea86620715a76bb047378855b151f77056fe2e43a3f460728ed9e4795289139f0f7e614050ba9fbe0510c9ab85b846b45a3a21d63dfdc37cfffb293429d623398c43ce0565227ec5c862da791ed5b8e401a6dd92b28df3d1c48ba4e70327950b3c0e9bda8863fa6767f2081f3b9c1e788c47486e7c1a873b1269d0d864593967a9afb5c36dd4ebe66aac66c723023e240d862d70fa147db3bcdb1f538237e2b436c9db8a116f4d0648958648b50d8839885f72d10f66c54d1c6700c6be52cac05997fd7aeb07ac57b797cb12dbd8977c7b19aa0aee4edd338ea9957fc49909bc1a143fa47694b3ea82c1a498901eed997c9a8f7a56337ff7e3acc4a66962760bed4c1ded4df17d7569ac1410c457a5166cadf571b081372af489799978e56e86187e2de842d1a2db66b9358783ed02bb2be7d8a8b8c78a36bdc068fc6076a7069754f92a3c0c6454bc2039bad9511199f8e016caff1c0f0affbf3357107e0b97906314ff2f69e6e875e4ccf8c5a0b90fce6d8539b09df7ff19969ec773024d04464d36dedd7e8481c351652d86b3dc3a5625841baeb07325ea3a1d7e6c503f255318f6e2b3a36cf386bb708f4e7b2863550d9513c59b3f2d42c4bad6efe84908a33138853e8b39aa2887f06f3d3dc69e0007e86590107fe712d3efc65d8dcff983976ed7d2d3bd010ba2a49276b4a152e7214cf3d5f6eafd0d3f28246e32610876d452b7031c6f87749fc7a37eaacedc21f8efa7c4bdae8f4069a73af0b2642cd1d3aaa76a3e689da004f70fbc436d81cf5dfdda29ede65db4423f7369a7951b0fe4a1e17e1d3ce838f7b3f660814b02a475efaec6eedba860e5119ebb7d87621c65993a3241e29fa33c18947e17947a65d787321811145207f2fe96fa4a9a90bb855f450ba4f1ad86f4599e0e1f8570a87b0c45b355b3ae00741b85f778ff4b09a4033b767c5368e3aaf96b3bfbef642cac83543d272fa28ee3232ba991ad22fae9b7180ad088377a9c699053259af602c9f3ba81bb98486a7e3d150a8fa1c710dea870416090533c7188769f5006fd3da58642bee4fd1282fbda49923c2dcc56eb38dc1cf1d201a3a40de4e2aee01001f936d735c4eb22a7f3fa758da6f90dbd1a504efa220171ecae58589628f4ea35325b7ca9f39fbf08417ee090952e6bc2933ca1c9e95a86d9f26bb8713e0c116324d051e7c632ceb4987901b4f06bfb28eb8cfc701b6984ad85e9da5d94062514177099bf7f976428ee0cd2bea08b39ae1ef99904c1011a02d5944faa8661ca905bc54df37d3c6ad1cdf08dba2dd190222b079ce2860e539e33896510c60e103a545975d9067957b6d487b7ced8b788124a997c096c6a6fb708d180b0bbceb846c73e9c9f33ae6d68fe8b12d04dc8c12361f74502d86f5b3c140631da508dd3a29b806dc266d61396e1be354888ba9fd24182cafb3d44b56618b42de978aa2b5055ad86b5863bf534fc147410d569e4433a5773263a4abea4842d1c28ab135ad4f99a53dfd294655caf0c95a9b2989def9754a64363ebef4a8f06030639415ff635fc59f0e4adb0a580f97f6580e30ccb20a9fa7859dc15fe8d4c76e4b1b1e224ab64286fac89f89a5d32e0787a4854d613cbad35706de7567033ad1c382c431fcc9c483029769db83a47fd5e878bbcbce2c7ff1bc6041ce3293a0193fe2cab8990a61300fcafca2de765e517c85cfd9dce884c51359a801a21cffbb3acdff96b6ff56f9e8375be6fadac95bb8d9be42ad671b234b9a2abb9451d48921a2bd9ed17f2e0dc3aeebc26e56c0d75af2b38ea291c0f609571456c76752cbf495ff7f57f3288dd1a9e8571509e9ab85754f9885248264ae517501adda637b4ef5d6aca47107d2761857370097c18d2bb2021ee74069c5ca2c3ba6c1b545d8fe93a4b5568a8a0735c11c6a46051269a469fac733724099eb41391c98b99ac179a0c4029d1b33cdd17c3ad628157b5048f784495aea16913da0ac4697394ba3e5b45eb14d449adaf3e7dce7f47eb7ed40d17101787d2bfb4d28ab6633992f17458a1b33d1d228e71a9698a9e6b73dd7c96024eff8dc5c80a40e0772e14c37a77861b1f3ca00ecc4ad7ef95361fea817872632449b2a87453b02045bf9527048bf86c5ce471bbd1f899877f8493474ba7d33598660450b6c675022aa4bb781cd9ba5d2738a5286c844d772455c7d2fbd2c702fec50573bc358ad17232b5f37ee739631cdc62e55a9a2ace7a7f059ff905daa4a846b45dc2b815501a12ecf666669c138df1bb5a10915a4bc8f9d9982b55bcb27006e2168be7077eef3848563916768f8b8900eeff9fd47260be6e71efcbd5c95cd40108a1aa82c53a64950c61b8575d70eee7b56f04053e59ca356bbc909dc459c47abf7676cfc3dbc32c7776211c658c0296bc0a86f2f9ddf5e9e02bb1dda87478b9a8146e4fd64dc2771979b60389772ed49172e4e1d3f66cb5583eef2424a5d15beda57a1389740746ecce1c8fbb84b5022c400978bc0ac1b38e42044d940610bba09f9077a4706d68faa0540f99a579614b2b3fc4fdd29330f1e07f838923d8235673cea064851f201d19f32933b490384a60c059d9d117c842c3cb94fceffacde2ea3ff4fbfa48b4d27c4e146b5b441eb19d52dd85005e831d21945bd11c66f143e6bb8cb745ce7ff41e9126d645ff78f1664b4b46f962ed729aeafa86b541f96fc0e0cdd1ec2cd8a7b8f23cec76a414a73dadfa923bc41ae74462761cc0212e8cc3c4dee3ea031e0df516ceeae1a7101665dea0b1bc5bbe5deecfa7e5c004bad0631746f363c2f8931f5c99951525802d0a01c378ac1347f2782c738f64e89e32bd17aeea24466eae182db0f7a126819555f0d0218efdd766c3d62b5b34ba887dbda58f71805b1295a6f9504ccdf68c9f6c57d3cedb5206e067ea2eceaad170b17742cfd3b20e9106b6a26cc26b551aff949e9605341257e8083b4b9e44555c640e32569862b5dac654886e056881c9523f7167b9135e70ea7f19b0e619e412566f0305e6742f000c1dd921dcd8c011ae8088ddef6cd80e01999ac89c2eb88431e8466bd516b0231de4f918b915fc6f68868405806cee4a45f177f8fd9b0606bae3502e9da5a8039c2449dd47983f519ca061f0ec77e737cdd520eff5ba99f63183dbbcb5a852691f72a074968a19ccb1f8120c3ff517a94693a4e2917bc1f569e6f2bacb820b89314c4bd5d2a308aa5563d92e7b993a243c3ea0064e294857f9678e590036f2a21c2b33d4c11a68d0053aec46de718c62ea699e4b1fdf0da5992613b04fcb248fa94c92a6c769c33936e73ff3966bb7dcbfecb80d392e951b684f9f9b7683bf0ec0b730964b39c128ac454dd436c357c3d6e2f0ec3ce7e510d2533b13a754073a51d04d78552add8d81485e3447be2f605c2c0ce226cd49639e2e7bf7e2101e2e0f064d3239f87e09731c0b4b5d1d2d047816fd8b7303035ee4166bd2e0aef1c10c74f18d7d8754672003b38f2f16eb8d520f3683b364b587d1f7ce2de5ace49d068bd88ac065a022d647af564dda7b5853dbe01e32f1854ba9f51bf56374a399d9a97c0f57d8904bd8a65275c8b3a826663e1ea0b8c299a35b1d7b33498bc6bf496c7d25b3e25c0d63253085d4b4ca217d603e50cac2cf5b057e78ca6500e4a500e52849a5e09506772e1616feaeb7de41fee94fb29ce75a614f9bd9c5d3c4d93ae6cf538d6089a2cd3481f424b6de32d72d0b795beda649473165e47632ecb9bc683f026a372e11d9788540930b175e14bf545d4ee843253b75c58d525ebf56aaaef73358586b29e9454c00dd12473a6bf459bb49bc55fce281c724faadb76635c831048811b7bbb6eaf4d2fb991f6df9f7efced0a9ae876573220420602adf62d7565d4b988bc223011ed8b9dc518847040128d905cb5c79d52f0cd6acd9e0789cd2dada82b5f17fc762112bfc5eff2486907eab8a021a98eb7c3765199c5a6fd0de25aac327439ef0c910ef59911e30b2d0f86863c20fb99129678b9e4bfa9e42cafd60ef321910b05ad26f9324e2b5f21fa5e4b8a5e5666db193e6b4f3d8e376e4a1884cc573a107b4efb3b6d1bd0171c92bb7fef3489e91bb7d850a8b5d51099864b80cecd37ee5d849cf9058977b9f5484359358051d16cb2e3fb3b85044ad75dedbaa43dfd06f1c9a705d19e2ee69f4c560c546e4b1fe5de4039eba002528aa879b6463ff7932d5e76f2e10049198d472666654b250ba91a33a56b34c39412b70e075ec60b8f3e3463d19f68054c920c9b136678bc8e075f91a2ada1a58bd8da278f8b04fcbda88ce77697a927ac3c90c44951d86a5edfc14f97e127d1c54a4a191e7793f361cd6d908e6c4d5101bb94f9737b3bc981b685eeadc85779aa68e045dd5cd1e8e461e9df0f049eb027b5f638ac7bcc2a26586c698bc36f743954dd7c95a81ed2143a4aa144832cdb7e176d22c74f4ebd241fadf16919e0228a4a7e6c505e8bb41210b96fe94f5f8f85780544825eda8f175387223d45014f33ef374c9b153b5ff749e3ad5a401ba5400bc6c9ceaf75862248e961bffc2886d8e3f0ca9a0c8d90aae5110d09c6ac40702482c948ce1ce5f7e07aabfc22bf8e207955e6b46c2eb3453c6e29036dfa7f43f16872045b63810e201c17277ed457bf5eddf530c92c980cc0b0001e1206ef575791f1533ed3e3316113c615d8cdc56341c35403b647687889d4db724233eeb8a6e7409eaa8c2f8af3594b052c811a5d55d1f64d87e58662d954a78f86357fb32e0d8864f3d3dd605871532a179a6da6b7a04aa7fe6cd21b78b9cfa35edb1c861209f76106a3e6095316a91d0fb079e730c7045e5dcc752b45dd67ce3fd9b199ef4de9db24cd5c8c66d13a6bb5518b0694aaa58498239170da0a1efc0a05b01df88abd8ae2aea801f41326ed8fd988f258361bcf8f821c37c759a118b5008b9bef606ac793de7c3b96d692b1536ba267cdb527cd9fd52846fe30a138f0dc89e2419fd08ffa20268c6d63c6334d868ccccf622db39143c81ceb141aee27d1fecb25d5d9db48489088210d306b442af8a66ae79d6f106bf3dd3cc9ee4ece314f17f8a13a87872644441b0dfd605a3c17d76eec9250bffb11221924c306363ab51f3c10b94cb04eeed6b74c5f7b5fc996da7fee4dbd38afb6da2143c31cc9f8b64723945979cedcee374c5509f5800673b55ba58e801218092d37174cd6cc00be03bc20ba70ce60bcf0cd8ddb55d68d04ffa60b2b8a3cda4e16a4622416ca2947b7a837beb532c6e0baff1b4fa080c40b9d1221df495e4af1ecbaf0cb115f4a86be4155cff1d07a11fcd45a81dd2699ab37275fbbe9db245091935b8d54650897aff29df321e280d111a995c665abc4a9b0707a921735af90ff5f4ae00354cae710fc61327d933421dbacc89610f83f0d2cf1bab2a6bb8ab28d6b8472e58a9879b306193a7d07503d4b49065408ac9db8ec494bd9f00f88fdd01ed6ab7abd99e198bcbdce94862233b5023b89181d00af3dce7cc71663f3236a83474d0651a7d10d223dedf8aabfb650b1a62f8b460b4677c243779b6403b1a9276fc171d8996d9288d756a8928589dd1d7f1a5c80826bc63cef71e2e047127ef8916acaa48b8dd7af4648e132272d745f4f0581d9e7ed9f2ef1c98f55c61e18495482ad0e3483949f5548d7f54ca01c1ee2712d1eaaf1c0bff884a4a2364eb0f5af24f3ed718d6adf4cc274a457f65c98c7fde30bd361db2434ec032102028810bd3e5da09e0bcce8b6766557ff533f154aa5c74088641fce65fe2e8cafce2c375e0ba90b6cd32cf0ad29040c4ab2311c7f11ba05fb88a1b65abc7c944923d9647442f25bcafcc8195c9dcca79f854856d1043079e200b0805efa2050231456b257ec574ee169035385efa996f649186f2ee7ddb9c495fc69b5a5d539fd2a6bcdbebd8bb1d5c13a3aa7ae54f82e849ef3c291c4e9100e670cdbebfee92cca95c955fad25ccd4cdec9b1623ebe9dd73ec1048c05fb827ecfdcd94cc4590b70ca04f4ca0f8bbfa3199d3087252da4916116598db1b8355ef808c4136ccf8c7d78b4aa09dbf5c0feca056237cc27c2cf78a42876458830e8eac83ea5d2818a35ba7199db0313a49a418fdf4e92dfe96e3c1fa29273742f3925122b2cec5e4ee75e1ea84a7b25f1e5412f85deaaf363ee399092b9620783b9d38c6cd30a5bd58c6ec1ed6f1affd2f646b9fddb77eb1bc234db0f3e388f57d9f9885e50f7434132630ea1f464ef96a785f378c1cc977ab5d848bdbc0937ef5dfa958fa19a0a857d2fd46b17e4c3c6e3df1aae21fdf89d1189c7aded48eac86f75f9b642dc02de56020fb3019362fbeaa2e8bc639deb7c91135cfd75ac8450d68effc136bfd0c30d189f65c295703b9899630ceac99e5f60552fecd549c5e22585a65c5a1e39900cab06b0279f031dac8d4f7310745e337325eee9ef2cb9ae1e2046304a096f0e59c91c5e33bf2ca6cb691f5b82fca3e17f185cf3480aebcc746d72afc5f74ef2c1d4e3f844ec94f276d6eaa6ca799106f9dbaf9f2315b20960a7ae8e9c545a8979de3f0caa1d860ea44d9732c3102006c26399ca614d17a07ea4248fb5c0db4d5ddfb7c4769330998b6d0629c8831eb955c350604b68a5b6b372b34c8ff291b13c6742800114943fabdb77a960d361c46dea776235da4d5226486fdb14f581b0d1042159850bfda56c88b3f3217afbceeb2acfe7e4172f4c6583f29ba41147647b0d9fa12a4a7e4bbd23745c1da40af0d1ed9dabce23e9c88a74370a9cd268878636d84ea07e3519e48e12e647bf4b9777ec09260301324a7aca6b7396266d38d922b240f810ff79285c3fe0c72197da1339d93508cfbd5f41222e49017f2d28047ae0bc9a42f7cee20edf824a82c9640a33e46274e9b98a9732385184aa4236df2e6c844751a4b4a4b49c6b9dd4ada075695e834b722b1d30998276a8f74359892f0d83ef4555271cfdbcf8b8c5fbb0bf61b0b14bc93e8f9203ba6d7a0c2776ffe12f2d68b9e46a8ab686279158fffdcd4f716c29893b6cd620035fd98894fa8dd63512db6f43477f8ed697b7a241182f66b52f79c8c4c49d9c0c2d40a95f27cd01c60a550fdb499f0f84f92aab4c5ba607b8026a56973681a6ed3d8ce06f9f91c7faf077e0b148e46beb7bd2a6454d530ad90aa61938bca5d3d786003dbb0a278118d3ed761991bdebc47d4621d381ba24f5628cc0c38f2e1f32838f073af04e1b5a19cfc341f02ccbae4be154e1fac817b7dff7fea275ee51af18a0556f14d1d34905aa6afd0dc2ee6ae3500432cdc24a2d0bc0135eddd22205b01ed27846cd58c3265779e89c8fe43f8f7f08ba651007f2b13dc4fea5bed45241f6cda9345b5ee2c3fbc1174256cd425015f4acf1edaad68ff76d8e3cda93a120e1883db70726556bfb02e8d087519aacf639567803a704f589017776ab10db275e0c6ee3f0527e04216d564719acea64a69faefb47d5a1187507c68c7f1a7d705636f54d9f0000f0972aff569a93dd1244b8a96295cff1294929603cdd4b11010ec9587e00b76478dcf781590aa3226f6d010ed0a9f89f3fb284b31444b51af26e512c6596bd157519a4159f2fa11ad5cde11ef712080fb216525e8c96329c909fea01dbde4335cfc0e5ddb761dde02609fa20af73f85915c211b399ee892daeb7cba07a55cf14700f473d940d9b557946b28b94558f0f48e51a93eed2000b9ca6251e1a96724eedb3ff5a631b895166328555a6134d99e33fc248a546cc4af6673a6df6d2f2ad0bd0fc8ad55f92937d1934ad84352a45bcde6005138aff0bddf3462243ec3964d33ca7d6ffa1aeedae58909907a78bdb878dbb97f8ba6a944153cdbee008d7b78f6c23a6c5cc0c37ca3ab976ca770be5c679c30402aae071906f25557564aeee7f382774f0d8fe1e9cab10ba7ae9169e6574350dd2937e06aa727350e788bcb692a87317a5a3f58c76bed9234aee7dd389db2cbe2da3179f5020186bad9227f501972cf13450c773b920dbe9fda96acef8973f81e09cb17bd6c52190574f1f9b5893ee384ba4213886fe8a45257f83b68865661da0ed219bce91ace112287cfa9b1bd6b4dbce6d733e1367168d69f96590324c5fe0198cc5a2755cbd2ce5adc80c63282802bb266825c87414bca20328007f8f6662beeb25529fb2e5ccae4bae52ece1ca4741e343ab3920957b272ed61283ff1b66fab4ba6566fbdcae0d0362c45a8dcd311ff8a8626689daadc72d1ef6f589d253dc5e902efa06f386244a5111332e33a192f3c377e874407a0aa52db4c79e1adb24610cb10de5edb26594a29a4a601c44ce380daa022758a408eeccccd0005ad41354e8a65ca605d2b2c9a6f1bbb754a22d0f80113757b2229edbc9e231a4e442f13ec9ac757331685d93b29d4c52c25db4aa3eef0bf20f93f6224af7ee21c7343d825e7b0b6275d53d34c603ee08da2c3ed133a69c6383a90326eb6c1dc81862d50c753001f9aa97ce96e8c20834658dd6441ba09b1eca2eef036eca11fca6182f1a5d302783867bb33a737f4e61a65eed7cdcd68b746a267224ebdb3489d5ddd1c4ee78fd952eede2d0e089323addad957bb90a01be0a5689463c2b982810c3d7364638638975e7a4443d4126d8932ad0c2cd989729a10b465a4697f3f2ac8284dbb5d81413c23d47cd6bfa692d2731597f9d639bc5293b849f7aad7995f8895a46388cbfd6cd76086a6d267a748358c12540322c21bb8e1cbbe6fb97a29b99e03a1a3337c09da4ad04cce39aa6a239b75f77c5016dc319e31dc1cb5256140702287476b3fab3785e79fdbce8b68907dfb84de9004982a1c501d1c3309cc6f14eb12858b5611605dd605f76a5b1744439a65a3027e65781524e8d0162b76f9066338eff55330e4b733437b451de3377929eca3fe15ec075473a0ec312ab26708e4df902c1120a24779e2459f795eb69099c4dab3aa4a7a972a21ca8744e1c748367ca8cb49a31688f3de2202b4255fb10e5712d7ed75d99927ba8833443d8c1434502e30579d56508061ce326a29b22e27d0b8e5b34d6f640ec5e7fd2e64c1249ed81868f2a14e8a57471197ae378d61cc9fff5ba5364e21b1909bc94fa2c96bef9e43a85879623900f805b7911c5a6f0555967326c03c411d1eb1e16e6b7d87a942f626fb2b7c067dfa659b772a223fed1813baab5e01eae27f17cb5ccfac33a7661603a2bfcc2aa1a63b7d2750d749bf1d4d09c4c1abf553f346411e18fe114ef30e148b617512778d8a45e2eefcae337ba0c5867738d41a44d008b559abcc135f7cd83be1735621c280299e7f583151925f0246e559ba09126612df14ef35bb663db9d0ae811c54a4ebfb6ebfae7c6ab52f6d951aaa7b2e69af9e868c99763ac8f25ad153f8d3d98afc548828de98f76c994f71c9b16771c0a139300e77651081dcc680052bbd04fba4cc0f6fbae095f7172bc9853845653f5a7b4bef3b25a4359ff57f588c434169f1152077626abed54255d946fc4e890428882eb5a9af2b1972b5883ed92f172621282ce1ae1a065e97ccb5ecc0fd3ef29f78dc89fcfe2678ebd72b2e5c5172f35ed8c239ab0d24b96ffd0a4b8e2bd38e7c7a7e042707ebd5ee0e41bc3a961e5b7d06512dd7c1ed3a4296cb5d2d1d307e508d4ef35372c31c82463f3200ef5da4eb355399ed5933b57dfce148692b0fc5c5601879459c60fa4b51380250db1489308e06fe57959df4e33d70816efa490047bc4131411632a6182e45ae1609940a632c2553fa66015269d30054109c7ae4cf95a3377ed6391f36898a016deadf429b3f1cfa5ed0d30993d1d8320c0860b9184da427308ca7c5f9292a21648083798ee7ba14500b415426e1336f4cfafd4ea8e5f3e4c2e125f16009da188efc699a22ecf3aff7259da5e48f97ff1de3b3d29fbf9e0405df1fdad7d5e720e9ede7cb1c719ed2d8c0311eeb39282f298b2afa3992d0d38cdf40a318c21d39db9865ebbc88def524be745fd405aa3b62213dca955acbc243369de401c3f52f7509f2b80a24aeb1de9e6093d6c7121287cc284c9828d9794720112f272ba8fc5e510a259cffb319ce4021b52b69664a1330bdadcd9f3b3d27753d287b734026c326dbca1e02cc3a8f6d46a0c1192939d0ffb8c175b5b0b505324541890e6824108eb549fc987b67c2127644bd2dda7101449704bbb6bd819c4476ae56dccef141022048c6cb1dd495622fbd16a7e7b2c4d51e74611e7e535fc4ce6eaf57f57f5f007b101179d6a0bb29b07a8080cff2da131d04ea25be3203916bb6f23fee089bda88baaf9755a05242fd15e8ee63a255bd54a4fbfcbdae5367525250deb39cae3c0efde4d4c62c68846289f1174db84948595dc632188334cb49ecbce375871d3bebe87272a71697f4ad5ff8f01a8a8678002f358d6b9abdabf2a2c9d4ddabf2d4e42d1a993b282f654da6a78d282ba43d98adf10976c1fcf63c58654e2404d5532cb3a37e17c3d46b2d313fd75a59007569989e220987e0d43cd2c1aa95b5fa996579204952206871a16d290d4451fda06654e3466d0bf2814427563ea92ca69c2cd8fd0c80988110a0679f51960e1e412a14248cc4298d69c45fba74f600b9a2dc542564c6f0f129d95f9f969b6255bac25800a1e8fec2b25ce52ebcdccd10bf1b3b060de9ce82dabee6d630f2bfbe9c9a34a262881faaaa040b473599f51cc7aeaf740eff66c22161e7e08705cfc0f5ccec1f757f0a42a310c2d9a18172699f8e3912299708150defe67bde50b1e24ee5f9c1951fac8c1bafc40651f1cda63bb7f99b8b82d8096fef383e0f572f82612bd5ca1fa7a897f7261b34745692a1c5c6c371a1f5324011526f5a6743c0c1cca275eda3c305a4d3fadad76eb88e9106031f269427fcd22560e1f291abd16d9d40001341a3be87a24967fbb024e5940788e35657b03cfa78d3df9b64eaf52c243045f56bc9e27109b53f61ee2f57e21ae3934b29cacb37c12eda0c06bb94a343624bfdf99c53709247ba78c126ac43ba048827d8d2db90e784ea1ca1a7b81449b08ae401c73040fc8894d1135e2561118adbe804ea82ef0d3ac6f50d1765c0205aa06beba4b0c2a18664fdc35f4d92bd905d166481d63acec7aed45916c2bf737ea5def73b26862f6155dadf8b5c6124700c41f98ad97c959975a30507457cb4bb50ef58a41409f29c86984f19b731753bcd915174a5629eaf26b2995e450dc8984fb57ec55128912f3381e5244d24b9b476cd7183ea744fbfd961950da1ce58d13c5ca829f4acc4a8a592601430db61882e9fc7df519650123102c96a14d632f65b6184a10d446afbf2160c18c0c18d24c3aea80e1deb8fe2e38cf6fa403fc212ede38ebda68733db14b8b1bd26ccbf982f5e95ed7d7a95271621ac6887122a27ac9645658f4c4758a1eaf3be6ed47bbcbda0f182e319918724245c36e68a2287ccbf0dc63f23c917726671046cdaf199812db607185c1528ecb76a4d6c81ddb7047afd7d6ae8a3ca07625bb37fa8e76f481172acc7179c4ea95c01374e5d7aa4cfec18f27abffdf0f48e9e0a6ce4f7f18e36879b876352b667ddb98a20d59f8e4d2943f53a11eda8c64f15ec07420d0546387904ce4fd4ba2369e5c5db70b653c34eccd8de41557c3a6a6d833a0e763084fbac403befa318e46c9951762296f3f446a761f0ca472a47a6dbdf544d15e450335324c28734f3b7da4d4732beac5b5e34b535a7d029d0acd4cde7ff152a23725004955716dea3777654774f2c101ad8672e339817293affa3f3359b9bfd7f995dc9a9371bb173bb35bb4e833f43fc3a8c4cd1a4ad278f89bccb10ba11b6cb7778fea591539500ae6eff3739c6381771bd0e291d8f4e7a0233b09ab6bd24bce96db5456c8a58af9a23cb8a1e49580c1889ae138fc50f3572cc175a4e871e2530068ba4b30bd1f8566872468b21919fc518cd9d2a982aefcf1d9aecf716bbd77f7c37495235ef947aff9fb0a990c2af6fe329b639059b39a189f3ff2db1266fcaa33bd98afb774fe47a9dbdaef4578e2ba967703e57ec5411a421550c5b45225585351615d56c0fc7a3ccda892093822297f39a9e7bbb245fb67c0a73cf71143188f91bfa2d7569a4dbf0151aac6cbd168cddf66e0b85a718377c93c48f4cb9fddfb66ccb76f2e75a78be4912922ba6d25a5af7901c9622503c76bd69485af9050210743d5eab3f949a7bc9053211c3a16522246b179c5353389acd3d4dd1d3137b1e5db1bff01bbf221f65da8dd41ab8eddde99e8ed4f0ad96b169b0e7b92ca517427d217c1f10ca8b649661a5b8bb60af2906dc7b83af66dd80438c7fc4fe061c5bae88aea1745e67ab297b678262f7574e73eb303fa9829c3c00b1a3b29f7093db28ad41e385008268d13b1fb44a266e9db5aaeaf07a73d2f17d694b1f2c42b424e7e5acf4d35486e7c2a02dc6d9bb74b0dbbbb68ddc29efe45beb437067593abb4ecd75e41f78b005456de92a82456e4e2b5a9019175cd0eca065c7583c108b19db5ea672c6e0a062cd25c6d70f9043743935a1e13a68e287ea7f0f0053dc02814350d7a1e9e861d27b9c62103dd4eb63f46b04ce9fce96b48a9ccc28c5a670c33e8e99c38127bbf6782926b0e52864148e978175de8db5c0eb0bf740419b82434573d53d9cf65c4d272424bd3166cbdb87b13a496e173ab8fe7fa7a57d63a7bd398cacd2fdc6e27ef8570edd387b3830298f6e3f6759ec5c30e38e9ae7b2541fb3a4f13532f124613e61fbd76f6652795cfd579a28aa82c288233e482dd7794d6dea71f3a01d38bbb5c7d36f91c202bed6f310eea43f1bb027178969621395c1e447da5fc2b298ef83f9bf52b93170dc19d80c94d749ec578133a6a08ab86cf853fb129183acdc53a8b7592d8cb8b022365d88c701e9657ad39685769f0c6bf9fbb31f8890e47eaf59676452edd1a2cbc6c40e6b329b7a898c718c70a665249c30e45f3d366aa7375ad4fe26ef8f0af50c567598267c035d57b85ab870bea7ab6193c7cbaec5861ceccdb70f41703f6bd3dda6a080c23926e9f0d96749b93596e1c77e8956ca8e68c4eb97d26a571ead62cb09c8ceda79e182344e7da68d14844bb9a54b1f59a4ef3fd94100f815be42bff96c4bc1bab06045748b1c739d688500d954dd6518c615dded3f71370088fe18d387e9d24148cb90728c38edf445d35922be3ff24fc5da29a26300e4e95f796eb2e118c927d77faf0932c6a56eea77b08bd5c3ef7d0bef64e74b91df2a68c7a268528327d1137033780a9d1e7c8514eac2f207f66ee7f2a0d9b872a34e412fd1aa688569f582ed600f3f4c11ca52cdeb3f76cbaa74c6719a2968c0d97fd75af7161911fce935460c9f346bfd59eea9bdd6afb97dda36c811f87906d8a11f1fff532c2a8f050d77df1d0e4fd513a27a78f1645e989c769bc436c7a28bc1a415bbb381a820ff6d2c3ef97ac7a9444df907775888d823e6f7f416e2a3a5be402fee23f6069a951df833720621dacf72bbd96401bc717f0f47896b68d486272323323b5202ccf0440e2a9e7333e27dee8a834cc38262f0c656240c9334df1bf54350fb71bb32f90283ec809a4736dc11bd08bb55ab5721a401c42dbef9c4cf529ff4838d33454650056e92ca0f972731a07d8798809e86db827b75e6ca193b1a5c6eb77610abd180849e92ffae331f7357cbe9315cbf711b17ad7f14917965932508974104af34706bf23349f120286719489216270d201458062aaf95f775855231b201b101f121d8e7e7b666b49989cbe240f0f08cb546178c3a4651dc1df6b6e8f338217ab4060e26d630c46afcbf71930e569dbbbe89daafa85088c7e3d9e74563960fec2bef9a9a9a3e957a37557850f06088b47b36f99a0b229cf38bac64b4b70bcc70627d097c4ebab304c5d6178c75d7bea8e1317e26147b1e53ba199d4ddb5f77859a9ff314822303d2845482460f15316d1d00bfae46e78b879fae593d87414b308b11ea97dc8fd50b58f3bb7460847ed648505de2325e052f950a02738418b4ee036659c17551c29fece5e0a6ab80d40783395b987470f17190e0dac2517268847b1ce2a839a9366d02f89d794be6ba14ed17b747fcccc506e7c6fa7f314c2dbe0d61f04a38d547844b49714a93454dfc815405df127e75f4b84c0185776f8c3437a91311e1529f264ef48fb5e137d0224e7671e176748b0b5f36a3abbc594855b0b834f44d62512e1a2f1274f9d001320c02ba2677fc722ebd65d65990627ec7718bcebc73a36d0a1ff172558df8b56df3bc6a9d04968d0ae8b35326d175576e01f1e9b903e0da5cce481bd35f4e21e3503097c77300d34ba709a435f5d1889a455ca44063154841d25230acaa1bd71296952dc9fc9f76323b15c16ffd1bd923f8fa0dbf954e52b8f6fee250d6aed304e0170dee0f18b53a2357f77c471a75b7cf91a86b7f19af668d672f5ebb6fa47a04a69298023d182a002a2a7bec0eb555cefa3a47d9443590b2acb3805b3d0f8499b068bc9740f72ba07e102389102ec26bcb5c1f47ec26758d98b9b3c6f32ddc3aab356cc95f9591e1f2153a546bd6cb9e16a766f3f40163ce7d0ad9cb1dde22cce13e3431f747824f0be399d0739d89a20857882bc10be8a765d2c77b647690bd53ec5e74ebf8969c1532e7c1987fcec0b947128ed04452ad8fc78e0b5b454ccc241a18ae0105446adaa064f29279c411ae3d26f8eaf3a9176e75daf8108a9f8cc56525e18606056e531b83a95146b2c6cadf8879195ac7ebb91da35c2ccee89fed37667c10c6e8c1a528282a3811b51bf65f1ea48eaad665b82823dd0069e63a76e0e86e4945cfbbb82452108fff0216fadf34dd1412dc2ce8986bf8172eb2e8ba36b7486ba388105876434943239171d02eab0558acd95448950343e173fd9d229ceecdc450663a5c3d96ad9596c6ee2b77297d8b28e39a9538e78a61201fcda82d59ae3972a34229e15c8230e017d8733e8e464a917b76c1b79148db169e61be50bdd4568414a2c48a38bc1306407b3727e94ee2f42c2a8fd94d8217ab29418cbd3b9f522209c411384236c4ce3723d579611deb7b6262f7c78525f2451a24727549e3198f0ac3d3672c3c7092bb838447641631b10993e5ee5b3fac42d3fee1268849ed4cd5c336b52061104c3132bad5d7aff230cb17d5894009d28178fddd5b0edc9a8e5443f014a81278eaca3362a6493ea6905bafe86ce3db1874360ee2dd871fe22659c6665296ddf63507a7261183b4904ad72723d5f269f406e7cd83e4ec91c49f10e463ecbd60a74c72cabe3a0d9200b83c1ac6b795b47f2dee3eae070c38fc5049af7a3fddf6277b3d4032f6a51f553f057c3bf214335e105de860ae7f9212073f423a09f1ea3d7721869c4fabc3dc157913f1299b1eefc650f4bd4629604c6ffaac4337d5587b8d1c1a9b88c9b49d2274e0ac84511b897ab00965708086092c38c7902d9dbd4cf14771f4b6460ffaca8a98dcfaa87976c5e93f04a98265b654d0b0b4e20858cfe5178535a3fabc70aee8acf1cbbdaa2799180e095963f47d500977a23323813d6827d74136c7dbc3ed53e3631390a725eb1e6354f317d7122736c29fb6095809a2b0fac99be0f91ea340f18fd96aad797d306fec9df11e0a095a476b3fad2d24c61050f53016faa3522fd59bd6ae0c3920dcfc093934a758dd3645cbe9e69861688ac6ca94aa2546fb5e8a5ed06a379d3c20907d8a1141b2dac3ab6beca3c6e1fc245a5c59a4f3ca100fb6a673c899766f70c1768d44fd003dc68df9bfc574d0bb918f0692c233176dc6a2976b52cc76360636506ece960a3f0aefc8f102b177ef5fed9427f7a6814aa73919302a0a88aad56cc279e8b2e2302c0ffb870dd048548b004905eb93cee1573b385319ae6ef23a4e9729b9b4847c2d83c0c1dd3c9fcb8503cd32ed4f1c659a2fdefd7c7a4b7b4e49a8be3eed32969c4d84755c0e2629703e6ec66e47c2d1cd736a71691442723758323d76ce8e4429e2a46283a71300543009d4e54f9070bf38f226adc808406b3ba74e131f06fe6a40fd150fac6c127ec824898f309dc02cab982aad3f7ef8c39c766c1a7b4d61d3b8f417c62d56a6708da4356272cc5ff0d2747115619f581b81f28a4d0c58c667ae005bf14837c4d50d46615779a7a246afd028a5dc7e8fe1718ea91b1f64aad911160990da400ce34fd2c995336cd2b22195598165d575ecec4de9209d10fc8a04785524b253f712bc9265886aaa115ca51bfa580557b5f3b36493edeaa2deccac4129e99afd7f107167157bcbaa4b2448080e59c769157d138fb24ab06310cf453697b758f4f54ebccaebb3d9135a59c7ba5cce7ab965dc3d317bfc8fa5539fe58b19219b9ab9ab221721f157bcca9391e94e55800f831ad8f21f67225db7557c07eba04a3dfb0380c66bc11b907d8e664c8d42cb1fa1ade0269dcb72a3523f48d2a527591fd492872dab25c1b6c8f1c03c76a82dc1d2c7ba6af3681f50a92d240428e1115ee88c782e115666aa520479853abfd24de80ab19f98c4ac0cc6b37ff427f592e8714bae172281e0495c0b0d8b64fda59258f5e28f33f458d70444eb98568efc0f0a2e137c3c22910bb52dbc6d4b591c724157a09b3da9a3ed0cbf451f028fb80773f0f6d5604ad28c9270f7124ff511d814fe974d5e52d00b4ef9db429ab9bd418c6ecda4c2d7ff8a4d585fc153a2fce5b6f39f692cd32de46c858982dfab1f7cd4cb9e2830c85020f0d0b9c543a883790dec4bba999157f4059cfe0fced61937f7394e3f5beb4f6508376555f54dbb9faa659cc1d16920f219d4e52dbc8b08fd0b5894fc904160c055e1cf399e3e3589719a1aadc16740cbb6af311488644f13a06f355c398b49aac148f9e25b289ed2de5e9e55a4e32c2d155ca798238918be91d579c7a0222aff40e0e78a2f6158b94450f5646232e574870d794ae618ca652b9ead33acd6369cdf8524ef90d2b13e6a06995c716034a23ae3c6fd4e3322bbe7ad54d4c95ed71e15b69d689d57a2dd4637c2690aa062a8afb851cd9bf73442e3d1631986649cde868a37c8ec4b096a458fc5c427456cd6900699605c354ad57d8e32f3e3218da406df21582e9867122bb0c3fefbc0819e44cd3b9792257a5f369e1eab41c2cbda6bc26ffe0f2621a1bbd2adb4a077441af78675165220f7e98af4cf9bf2c9086cb44ca45bc3b2f29f10262cfa317dfed75bbdb539e945df19684681645376a6a1c5dcb8e522595ed23f7abe27c4af949ff977a0520497ae8decd3372837a9787300db5841acc35e414eb098e410b93dec8be600c867fe2570599e17c22d278da1245465bf5c1dfc90dfd88f1b869ffa7299e57cb604a865099330ee8c01710b5e33e984fc26d9db32ea5fb45dd75fcacc174fc8f47b2d988f8874f8c02b89c6b79c6e7e725486639a59663f140aee890be2b02ed2cc7c0347236398f4ddac9db1ce9381f397ff10bbda4ce721533e54c25293731826c2d8c7fb118146cb8b99acef0febb79e41b4bf1c2466c7a3d0d36b608ab1e162e97e88a5b09c10fd0c9b6d1743951a6628475bcecb08f168857f5b6212a180a0c542c3a8f58273c538410b36d2c4af0fdb074f9669bb06346730e315f3839586680179d6c18aaffee412aa1dc813d35a5a665dc83e69379963a6fde1ecd86b64d7269b20854bc488a5b7dd9c7254288501f2794e807121c8b9bec05b8c554dbbcd4550ab105800651c1a6c6a7ca3e17d7b4e663de37f9308699718d04942bef0da55f87f8afc5f0b4c57df7c3dc6904814055dadfd1d58d8e85128459d278626558ea6af549189aac502e9da3d31e8a20655e8ec6f4616e08f3dc72beeb848d7f95a4913b3e4c3f86a2f37ccd26993ceef0c5b1a50df9524713eb5352584e6f4f59426580b54814c0d8293f7d24fc950d732f455e0ac89c9e5d5cb8f73ecd82045f7b932419dce400c099ebb62896c58e448ad1dbe6cb43459611e6845f5f78eb8e9701f18bcc2041d2a949dbe5ea0fa04480fc9d35bd1b86fb16cae5414e6a786ee492dc4b992238dbd448c24e1427f4fa241f9b9a0e4df5de434af251f5418d07ce124604dd9ac6062807e2178affbef5dbadb8f9eca558f3ec7392dea3d903fbce6b28bac24c7de66fbda16fb60d52557a7c12a995cde8c36c19851177e983d1a1d9413195d1cc569721e88ed22b55a9d5d32465b84fa630543fffa90ceb4a8ab08c06cbf87508e15d43bb6cdc44da6b5daa3ced0395e03a85bdc8b466b23407f0fbab9769ae1dbb1339e8b062b31ee5aa654a049d949f54e907db1d3972194e177f9e83045aeeb182c11b3389cc280600e24536d3c49d14cdd785e578852ab2f080e0180f279d29528b89dba2a0035e23d6163db82ed80e6dd7a0d624024adc1d34a2803a7ef832bf483c90f811c8251e8c95be5409bc1df140708dc299c3401bfffc937c6446c10489d69e933958f36cbce1874198a600a86099e9663e91bee1bf8afd914567903cfcdd5d1d427108fa591c78fdbae16b2c79940fc5fcd8e7e8ccad72b86bc2228db2ebd48e2ab8d57a5ddbc27a1b5d63a6c21d7c455b2ece1bf2d8fa24636efc52dee54d15ed6bac6781ea8623fa7183288eb4e47c3663282022642406ec0a2ffc3f3be717c5510a02a989c9b3d387df21efc648461a472d77ccd9d8f2796f197a9ee58a0e5b84a2566a92ed3b20a8b5d21b1de47a061cbf5596f3e0a4e0049eab6532e0b5227466930c1290350c1f082e1fe9e91e96a5e8178dd1a79f84d105412bd13d009f24584828d49c99fac1472693b47b09fd24c94ff388eb4244c9657259e770baa9714a7fa7a26842b7d9f078eeb428a0824ab07edc1ae3a471350f7f13b6ec8720086155f68df9074eb49edb2eb8137e8dcfc265d9118bd611ff40616a5fd37e8a5b4871ed42444198d0ddd8660a3a0b712bacd7ff074827128359f2ba6f2e61a622583a914416b6454cec558d303356d6dc60d305dc88ce7ad5501bd5d95d86d7d815df8ef7ff02ee85bbd54c179f7bb0930b678f268d3335e909de870bee5e92ffa2740b0b0776b0b945a17895ea3753c16f1116a60fe942e8dcc209c0cd7cb8fd3cc60000105c231d944c63a51955d0d1a466e509fb2a3f0e579ddd11ef1e6453c4581d292e6d3c6bca65bd0af2b2f3e24e35827b503c616dd17c53c5a096cd3483265ef3eb27f0b4e5d587b6a14146621843c2712b35fa8671df881be8ba74f1d0a5eaabe01ca36e0b404196bfd7c657108f0a43dfb885004c7aa0a6db829f3f648c8b189c6de5f66eccb896974fecd289890d81de264efebd71a595100464278cc0828fb73470d6393f50f99aefc70610e6e5ccae4fe3880f1947adc5bbd2b064d18f8945efb18e490e95a4eb0e370fb6716a2745e6517325031bcb073fc073391bcc61e14b36a8b94f1ef05a8696e2770b411f51598c4b7f821374f9e2cb16f47333af8e03fbaa421fd386987236ce55a06e54073234b98979b8a396a3d193102edcab3eeb70f25eed4c063deaa1005f6d60f8d60e34cd3ab9d6ca2f1f5d224e4d8d3057de522b67f3c0b1c01945e3958388c8514a90558a65fdaf4c791529ca525df8785b1633b4ad43e724153672c31c2f7a5d9d67b67a008350693b62e8c75da5c0f16d0accfaf9643e4e6a889abb44ec9885e9c96104a696e6105a728727ca25c1a5641e7bcbd5cf4f7614e7d49c0282984212770cb124835eb5a45c0e30c9961b08916b16533b19f317a61084c4a2d09ce25d9cd12f38f3c2986acb4336773845e6ff2f3e49ef857f97c05b406da283001b90079375e62e746435611fdc8fe79a48f78f3e2b3edcda41f77fb36aa0b437a0ec9c434df592b9f91519a05326406760ae93d54d82191bf4e2f2c0ccb8ecd2a38670b52815c95106c31a9a0093c6b67a5c69d253694ed5f334bd4ad0f87065199e294643cdfe5abbb7d0995d143cf79b94cf2fb213ef0a67d850de8f1917bbf7d040501b14f7dcb209cb8fa7f96134a4e3c1b9de5acf4e3637c42e7630b7e1c14cecbb3d13bc050289088b7995420adc31cb98025b50152e3e2cd4d41031e7bb8f3bb1a7cc569266e3f2ddaeabd4017ac4525652387132ff4556b813b93bfcbf4e56cacb1b2fcd33a52857c0f831491cdf5679c9aac5efb1792433a2fb14ed32b794f79e928f23945622983afb8298c8a6a4ff4c6be548da7dca23a43bcb0ae9b3434e4558bf5f57482f6ad66be7a8206a5522aa5131a579fca15fa3faa9cb1fda57416c48373af61c1c092aa145e3db8b3917fc4fcda4440eca5aa7c5e07adcaca30550a019ff76cdeb2cdac022cbe1e197dc37dd50c31791af13d974727f329a54b32799df2e387926df52d41cb08d4b0ae44576666731a1cc7efe3d5591e2be7a7553b1d77ab897007f0436f07294eb502ce41cb31f2d85a1aaa7050cad3e169d5ee1364ab76a54355da1b893a16335c5d90ece1e9e1ce1657ff8eebeca5e8ba9a50ee1f256dac93b7fab2310be498b74cdf7a7b1b9f7dafc2a3716ba93d190ef7e7e5f0af8927129e2d151ff98c1edc4ad4a9db96a6a379a9f09d97c4ad9713a948a639a8971dc77d1c6f3495770d9f82bb3166faaa8aea6f38b64ff40cc795311a4a83c67aafbc688c1e0a792d96d6007f79cab77fb3a1512341b589aaf318bad5226f260bb1b0056c468263c11b0482e233f5b97ba68cce48dc0fb79714fd833dd1579a93e8a4178086f04cd8f311e01bb2ec024c0a93311660e587d9a8460ba95e32368148f60f7e82777f495e5476cb47db70faafa060373028440de9ce04cf6306aebff7564d62d6bfbf6b2d9fb688a2777a509919109d453193dc068a8419fd6dc66a012cae495447bd6f2783f711b3177c949513a71caa90728743a178fc8a352f0eaf92d68021bdc2a8330a2857a0fd52ccb0b90a615a539ae4e66a984026fef45177f32e124b6255c2c2ad7235b05a8e1bb4596ff5b81fc5f8ad21c40842dace666aa87adb9d7f85bcc4b5f0b80df8e84cb036356aa97220b9b2f1d17b6da217573bb94ad0b5eeba2d223121375a4e78dd7450fb9b936da77fce36852e302238842497a19c967d5a10de5a0dec9d7391103a4c8bbcf88301b47e5696575c26bc73f603b6523356e97c6f4c7bc34a2b54dbeb9d58f34ac340af33e1a3bc45c75bc8eb3a5cce733e6c3a9b0ff91d8b4f9c398c7d8a800638f7c1e1f4575652bcecfedbf0c3ffbc92d7d83f4dba0305833742fa0d622dbb2f3db708de97f2f8f06b6dbe53f1f8d1a811fb0a4c5b422ef7effefb39429db4f9f3e7cb0cb1319d3a18c60f9bc2a11a1d56cae10fda38d2ce350152d74aa7d99db4a0690e368bcb8a6790a6958ab73599aebd0c145d6d209dc2bcf513bbf178f89770cd3fce43ebf57659934499b0dcbedde9738c127dc3e8cab3119ca46f92a24f17d33a7e8379de5d70391676388271306468939533f9ee4bc884a98dcf2d75a4781565d8caea30954001f092a7d08a500c99290a944e7c00b32ae58d056f90f0e08e0f39f1462d3d6a51b3fd00876a776403fb711c37f968fab0e709fa4e8774e99c037df7a91648f8ce55cd67801ea532205f5c77a6b641027e0cd5b43746317f3413c3b6127b1c21cc2e9dad8f9d0b313d41c9be131eecb1414c14fcbeded84c07fdf7fbb61162a2fe07fe89002ed80424a8c621f3526e9b0fe314fe8eceb2bd9468ee3498c3e012c3a009f6ce492abd350a2676c475b2794d7a0c6ff54f52483d3161df380e508aff11f7f27dc18f176d985eec65dfbcfe4bbdec6fdbc9ece0c539db146b0e95fc18043265ab693bd6a17f69fb7ad96154f8b10aa4de9da700551f6860a40c99884b7ee036457fad9be6cf16a7737519a00f619cd0a20ce266d9b0b49ba0f26573b086cdc8babe9e26cd906cdb4b935a3b86108069d039477f0f14830cfb5bcf51336361b7f3cec1a154ad99f982f03a78d78eb17b03bcdb947c4993eabfb99da8c055d155c5c222b150b24a7f4984a4d323f791e615d6b676239396f2080f6bb05b17e55ec589b91caecaf842bf7f731a30be8554040e8de846cf7ac91068f5cc54c9441ba47bb024c1412a8b2fc4fd399b463aa30450359eb07abec9f2d001bc3d9771fdffc4020bc575093267b8746241286af7ccddf4d6a9b6fb596dc56a19cae053c100fb54e0e6cd9005daa5e0bf63d40a03bee43ef36028510b7bcae5e8c261f20c83ba7f13817d59d7bc241785dc69befb504dbc072db581d6c36e12d373533039c1b1b1b93a3a26423a13e3d3f6dbdda6674c8574927a88a4ca8122aa9ac6ce79a720524a5ab601af9e8c63ef2d4c8db6fa93444c299c4d66f6aa2cba3256a27ee2879cfc57d02690cbd456ff8055d121b0e7156a99fb26ef01a21abca946291b1ed043f2f9dc6d3aabe0dd060802a7cd40865bab4afd6aa54e8b69fb1d2eb023251b343df777a3dc13581bd3cc3c4c17e363b1af9a4508432dd3a010633acac5f0c9e4452977b5f437290b4cb219b50b7937e8dea7235ca1f4a0e43bc2290756b408bc4eb13f2c92b4f588eaccc3ba4de31b016ee5f4ea829ddf9cdb077d7813fbe1afeb7ab37903aae0f5c45a160d359ab8bc7888fd426f08dd56d4efce8321ee097198af420044b9a51b004151796ab966f00feaca6e2d3a871f135558fb1e586e19b9da586d714170c3813a9bccdf179baac59a9dfeed61d3503971300988dff99de3d5b3af6082c6eae70a0c7a45889bd45088d1ad46a3ba005e780725d64ddfb10ec18c7146d14210fe311bfa6e2b961e32fe8645807ec070de9d2345d984dc358298652643c1fce48bd5239ffd256bf4388c99e32569ca1f2785f78ae87f0ded0ccbc1817b3b30d5bd94f76ab6d1456a6a1b6552b658f2045b7806275641878974c19c99572a8b24f4809d8135d2d700b2be0839b74bba6e1b2d1909542db903d441e8a27485ec2f524c6609c1feb67ccdb493d013c71f4b04b4958bc37b2f3fcc4797082e713286059c4b572f92c70964d135d761340482ca18ad1776681e87ce8f1b3ca013032dc64521d16791547ee948a4efea0e5431ca1218e4824466a72c664635b36a6c370107e848615d73b56205be6473b95875c03896eddfebeff267def5b26e6969949f0c9bc05944cdf9d71f38e4eaed5ffb8095c7b211bff1ed36cc597e217bd101381c947d6faaa4a2f58ac8364d0e5267650a2e8e5fedf8112f5f16a67e1378264223b837bb065e1c49c6f4dbd956d53193293d89cfb7cd55ba4620a64c66f2fb17588b553f7f8355c98d94a56eb5fedfbc1a3e6859309deed181acd00140fcf3f6c0bb8abd354a355c9a344f152a6f4d243772131c22583d3f476a89cd7a6c23ecc6317dfa3f32f226bee27952fca6442ad32a319cb6dfdb218d6f11f82e3b87c9707d4a230161b0ff79f67cc3e048d4fe518783835a314e745d95f5764579b54bc20a896a6feef08493d7bf6bb1929d37b926ca410c54f587cf23b6703f86e3b8b6bfbed26e39b893658b42215fe8c9fb0f19689355cfe1ee1176301439a7b373e0c00b45b42af9e55aa057284c0e93fae8e8f1bb82f8ffd272577491147a95d12da00ba0851d5d3f79af510561f11158e17b68fb11346e56babb59a623a8ccff4dc81400eef9e11a91e59e3646c1349807ee5a152ad56d1614fa61c8d1d0bb35db2bf9b5c684bf812e214963cf341b7bb68819ab63f863346d01c7d7707f0ed0f6a1d032f6c65d256554552a25203bc70dbce793883667be2a447c3ddd2deb38cc57b76de8aef69c2b26691d0d2ebd71c3c1667658e1bbb7fcac5ec180ac9a5ed84e6b68666169c30ea8b4007a3aaa324cd7e9a5efc43e15c4ba632423434c9bdac9f17518e50b696ebc5848edffdae1224d860b5fc7262e604cb80c031dd3eb2d03171b3aa2b761a22ab12fb44263b63b67c227050a4ef965e1592e743551cebfe354e4b64a0ea512fc83396617cf9ce681cfe668aff2bf96afa4c7570c01f561283f168ad642aa7986baf459bde1b3be44a41ddb444377492519e95ec199985d70f2a881f87d52da10ac0c641ce88f928bc34f34a0798c68e9126b5e01e5b7578a4b5bfe6e2dece5741f00b1f1d34a5e8ac740a45ac43e4296e512f4c0b7cc21f8ce1e172f4ec992610bd46c8f87af0a06a6d55772e91870726875af61605ffbab24292659eca6ab403a73d750024cdf14b2bfea83ad70dc4e5a9403fc7299bf4f50d7b90f8cc3f8fd31a41e43098a68d72679709dedc2a709289d577dc8b272f96d15412b07fd38f324cf59dde8ba2aef96207fd131d373e291512736d19befe336c9f466444cee90dc37b33e4ec0c5c57865be7ac7ee080560beccbf8f7dc79773451b7f288a48ecbaadd912c7fb63df90e4354225b1a2629948e8bcda8b187569a611991d9988292b8019b99f8be38c8efe1c0c6e567bd2d491b73d1911363953663b45de43f488d8009b83b646fd6db4069e9570b195e284094a1dd13a0939799b17aafcc6ec1771f27ef84eef673a341a81895e3cd0e5719f9c02cb57a67ee54a83c20f81da384cc95c65996c9fef8c16f4a5fc206d8d31437b3a0bf0567dbef0ef310124fc710ae098d6394ee21215f86fd5a672a105946308e8aac32f72e21e5ff4b901c1957c01448c2aeb154b7eca4101b935419d6950fd35faa96ac32a1dcacd7724273efafb17da4a13951732d411f68868a0382b1d88e08d6dc0af641c6c5378800888bcdcd828698a9e57442ed6a3d66493dfa0ca198b61d4ea6ab716ff6002099424981453f66416045f86df3d7f6994e98ba384479344f37e99f4e6172ffdaa4d82448b4fd935b530f499cc6cd68af512feb053a00ac545e51f1af4ecbeb773387fccd6751397020acd1b197d8dc2ce76ab0c1e6aab1523d0ef3451f774407d85bb7a4fcc37be2d5ec1933cc5fae9ad2db238bcf500bee07381986fb1c4defa21b9f50dca48d4afe4ed5bc105398692550666d08f51ff627d6136a13e373fc287372a181c6779c0f50c202ddb40a75019f667f92523d9fe67c3e72ed8f1c7c44bf0e3110d753fca82c4cffbb80193c9875ea154146ba505437c0b8ca0a968dc1872818ed04197516b0a17f7bd9e250c476b8840a5a828db2c2433c651de0f55078bbfc0dedfce84d0cf9455c38f5551c5b8a498aac4c81ad42214233c1fb4060040bf4b17bb9535c25a1492ab7e594f9bba2e14d1aeb8834fb877e5f4ff3bfc1a89d092fa5aa9dd7de1615acbf4b0acaa81959ec88c574d9bb2525b27c3f678603861f5756cee7d15c00432c083335f8ad43f82ce860f54696f24bb04289bfb08d7f2b78be43de5d4c9f738fd5b02670f42d61701a17ed0e0c776f13a303b543168ff10b68a4e0a7cce87e589c7d9dde516867a2844b81b93691c636a4e997a8a2b70f1d0328330f3fbd65d09cdd27c5087de854f01d9d66e8ce2ee82ece4477b128beed01ea081d0747a75fc0ba6cca4230df8ce7c5c4b73a8065893b7cf12af706ea29c7797cc0c50fd07bb4a589be46ab92f47ac8689f141e3726f492c19aa92b5eb3c53b7e0d6707f2b39ebc396d28eaeec51a3360ca9014a529ff008c3c95e1d0c413810b22be9f4dfe7c8849eecb91deb13424819a54d85d95c9878b9f4d9ae410eca17d0fd4a33e9eea56ac1d00ee32bdaff1f4f736a128c242fc74d451e519504d99cceeb3a2ad75c32ee73ecae6e712db3d9390df6d9b80d78a58dbe841729da6f5b985d77a22e08e3162744c218b72af6458e7145af6e84d0e7c54b354c20e42c1c2043a00fab7c362f2cf60561ba08510f62d39d6ffab041f9889ab8dcaa7a456cdfbccad02e1e4591ca343c5ee5574e64c4c01212639e8ee341dd7826cf2af186dbc0035b5a4b7e9a3a301d6e63d805de35f823fe9f572cc5a35a2b8fa2d7822b6eb92dd8218c09fcee9777493a580bceeed25a98b1f987fbd5fa898987aa509b0020d180e90182e90233446c8ae13ea5241928542b2355d776ab0a56293a0de4d5832e1128e1680319c47b7304a28dacb7f0b41df642ee36e7041273d5bc0ff8c48fe041cccac18ad439ededf27fda202c4ce6b434b22bd7a4240b1c8a4819224df29f70f6eb55f460609569a7ed3c0b88e130492028d62b927eb1b4ade35123a00eac54e8d7f7a512a3c1ef7e8369c3a961da8d887c1f30e6cea5713dfc1dd922ca9f48a882a080575ce7f1ec30f63b2bca0acc542202dd483f131dc1eea6527c1389e8f0aa766414312ee5bd2c23329c25c142ff90f966f79ff732d2ac7fdb9c1673e876ceaaef02d0b2198d24ecb112fc0b7672a59945090238fb632b91dcfe76ae0a76de2ef5740a03a2ec9b6602df17ca5175bc362e245e91aaf88ff346f859f0db8ca77387c65753c02c01f345e1af86407f1c9c6c72f3aa7e4266b4db0cfcc5c4a529e119c566cefd5d94f1821e49b3401bc567275401e0c70ebbc7bfd054bed64b79ce048cee26b98018bd71510a1ba9bdf661ffe03a9317a73625c6ba1015d5843de113a2615a9b5047a667e83f1ec5a5913124185a95e3953ab381eab40012669e3a4855b6dc7a24be06d7f4adb9cc7b71b0d4c8553673a3d995d0e318ea21e793a7a609a4ccd87b0ba2b5baf81aa2fd6f28a6c164bcc7cf2680333b5d56b26b08eb0777ac77b34c22075e35c5677a5d6fc30b162352eb6438163042028d5d36de7de46608bc4da4f7e760917064659112c6c027e5f827b019160e4b80a665ed8bb7e0090d8e3d884e861a2b0a89cfa6092bc9eaae45c00e0aed229f1981834aba8875d76bfaacd2af8b33a7ee27f18c01890b4b5f63c481209eb6b3c5238cfd59f2729e5e285dbf331eda227b19787983173faae82dab8601ddae037339a8c47c9629b459c26f1099a7c583bd5ace2a2ed6a51811c91361915cd12d8fdaa9d5ed36282c68dd4879a06e22c57a68d17ff3dc85ffcc5d66c02d0e4fd0d2953244415a3a9fe1d06ff9a7042d941f05850667c86a931eb273482a577cd17229e05fc117f762ea5ada8baecdc124c2fbec038ac6e81c10cccd3bac1483d8e9ad2349e584e958779cb25827531314dc7f8fa24b3787b91cdc613c94d713a133c1cfaf5db85766a553241073a3dcb7a5f94e13929c6936e414d074d3bdfb27cec4c77c36de470831b2763d4b901cdcd5b35e20b323e5acc59728330cb9c3482c12e115d1635241beb17f38366af643a4f8f96d4a047680cbdcbefc01af5080de31191c979ca3d23e3fd709b573666513d2f5ed61b5c30bea176ef0b61643fc085737f78d2efdf7d83a0bda4cdd9c9c1a0b535d14481c4897cebe2527bad1602cec3d63c2ab98a37bb1a97a0e8e5a2eac490f04d1ad087669f07e43f47dccf6a78530b359c6c38d2b5157c0c49cb5b6251dc3d227ff14c8f6c2b4252202aded1ac9bc62f9c073644102aa5217be99489ea8c2d9cf783ca5d902987e32db743e0479c6e27e824996f4193f3b8e66bcee8e0e0078f85fa53c2843db3bb2137c89a4a4115cb111c00101dac51f7d3eadef7f00e230271910734afee2cb1661a7e078348a19039d5a6b52c409ff20884e9edd764cf686c13a8095ef3beaf8e8d6c40ab9f19653360058bdb3a0c1435fa2bded7d1e12c2aa302cfac08f1c12d9630d7aaf870cb5767ce22cf1d398d04f49b64d83ead621bc66be444c8f0daeb1f64fbdd7dc4fb2452b0de34ffc5400fe49a31eee5729a3b39d24af387150fcefd1cc96715b61eb87e757ef9a0be8e0a82db801105c6ae4606b467a8a1cd8b76c18f8293d3bfefcc7e1dd0c26b3faaf032da0820d4d4e55b5663ed8e090204a57ee3ba961f9d68254a1d0da3b3a4063dbc0b71cb7d19d9e21d29b7fe22c578b34d06239dcae501b6e4186fc387f010455f06e4ce2410f03669fcade8c6494d9ec0e4ee9120131ec3e02c3298dde24b568ecfcfc739eb9fb97ee501d8a38746a8cb1f5c3e91746eae1627f7c64cb3d5407b9d32c27604493cd90e899e4ed0f40fae7b39f7b6d0df29476a4913ce19e04bfd5bf59882caf9f3830feee9f198ce491dca785815fad101814ca6f0cf15b0aa11a9b4af4a0b3bf300bcb788c18d69f84d02d3ec3c29c17b1e002b282fe707d9a5cb3a162223da0854adad75eac004e72d9a93e47ed86c731e78c10bfe11ad636e574fde812ecc2fd124cd1d418dc30262eeafe65cd7c395c5c8167a8cf7b910cc48da72611c23c6e607f8d94af410d018c8efce6914f655d4792f36416c937a75ed1c54e7dd76afc4fe39e01df2e4e1902a831f18f44629f452dd88e33c975df05bc35c120992f77ff4de511fa48cd995535aca75a4b2b218f9d874e01d75459d683672e49167ac03b77aaa693350f0209746e62772d5bb528e47919533fdbbec4d6dbbcca02df9b642a9dbb024713417d8d152b6ccde6f93209eb98cb79ca7ceeac0315f517647c1bf20655f551be2dae90f2dbe3940809c177c6232502a20532890b4f22dcc9b7dc03c74e045e76c411192206b733602eed003a243d74c569c4ef3be348a3a285da162a8f329a8613d582b8aedc73550f052dbf11d1a3ba5e307e254cac7ecd56736c6ac60fa8dcd913d1bda43493991015729bc0520dee2c1b4a5b40f6fa12ca9a9b3767f0239df2be23af5a6e68b557fded9414617302d7985382fe6b6967e9096472ed00157e72a236c34adea19fe21496c7160a25277fb375c3feb587c6ae6fa0a5be79ed9755ba994c4019fc238f6326e18f8035a0f44b564722bcd6c7a1735639b404d9d245cda9de37d70c30b8d9c31952b3b2dcb395de0f47df940fb34094c715b25a84212b87fc0c8e4d5254940c77e0995c2f6caeddd518176de72a8f3fd3b6a736ca65dfee67af744e7833ad270b01c69876d12830dc8165053954331692a28df01732ce7ef680b9169ff9657faabb56d62cf7d96c684928633c1605e2bdfd865c1f24eef32698be0da70565408d936a35b5519f279d736e38b3ef4361acf54a1fbf59c57c1340724a5f4f475fa70423838758ca14b84d0d37eacca69ad32e54f818c6cc9315b233fdb88a9805b9697035ab3043217a43e1dfc9026ce3ccd8d92f4cfafd9dc795d74d0bbb2b7307fbe182749f4cf0168d2884391584e1ddb7e1ddaf652dc114f5ec0616a61487607ee4ea4af09b5a3b9ac3f7d35f500542071f9b92d9e2908298efd4b8fafeceffd0fc61be196437a68eb74143aa5179ded283481715439bd32e68018f1f784e1d196be080187c25c472008a6ffa2a83256b8745c304077aaa0085e18e1df5f473a2ec78ddee16e3f608bf0b98b9d54bcb884dc11381343e6cf4d329f2728a58edd5cb6b609eb207d5a56ad77fecebdf55528a88f011426a43dcedad6ab5ffe59a373113c696e603d690e74d7412271c2c08ff024ffaa4b84ab420159605612f6efe2c10852b7411fd819758af215cd37473a6d74d96e7478b09a8b2c411c7c4d3f0051800f915f28b9d0464503d444d19461b050e5e2abb297639abac5c4631ed93bea18a9bc451638cfbf2a04c9f93157ab37055f9a9786befa589dfa29809cce50f4fe011750e936aa585c6ce610ec4f977fe73c938fef1aa7d0dc9e2c7cac1e7b5209e47159b256f5c47430e0bb0f71471f1398908b85f89f8b48e3517a43e86a5c2af935fcaa4e8709ad511a6b6837b888379dc4457c24f56bbd06b08ec44ca182472e50ab4887ea6703995e3bbc9850a73c4b2f77c3f4ec7ea7a37814f1d5e35a70f76e6c5183fdd66358a4204ce936b54ad8d3c8998d3e4dd680a1fc13b69fc44afdfeba57a91290f417b7e29058867738649f9612846a52e48664633f8798b7f9f4f5af94cae037d0dc7c3e9865d2a4b31374fdc6022d3167dd56420cf95fff3d0372f48ba2771df95d7a4383f4e9d38595a33f459ad700ccea280797122dd54372eb191ecf92b5fbbd29828c45fa15d7ecb5fb3b4f965bad706540f1373044381be3a2ce4cfdd8150bc53b6a3602036cf021ecc734bca19bd28b202b848592d9d37137a1cdbc47d26888029497bd7a216e1578c9c88aa7fc87f6ef58cd6be3926705a3b01df2b0ec1b9ae6b342dc40547630ed6a6529a845d666ba7901b291cf4bdb280eb6988a2d739189b0cd24f902803c90cdffbaa0da4253abad87b6537e50914f62680707a9d6304afdbb16a7f0cc785d1dad47e95b297bfc442990c7ec5e0a02df45445643f4e3dc5bdd2973cc74265b5dedf12ae9eeb9102b0ecd119eb5630e090ce66c29e7a79b4896653ff171918aa8f0c08fe6868bd4af085e7ae6448527988136239935ea657ab24467f64f6b212c7b936057b912a5086697479472eaec1af81853ee97a429466dfcf709badccfff31e10d9a2c37e49031a8c34180815704eb5d2544f0fbdf5475bf8d765d9ecc783f368d16ccfbe11d93d6101054450f10dcef67c5616d5deee1ba2e155a44c6cefa0b784a203b968c30127bd224f557b020630eb0bd228f69d8e98ffecb16324aeddc1155aac562d93654a7f0b29c71e5e1465141f5271a17975eac77d1aa395ce610098f20f405c4c9110a2ac2c63eddfd7cd06b00458e3a9bc8c2ced4dbfeb93a69db79400bfa0d72494c2ae5fb80bd92979e6dce1eeb96120bc5c92a094c06aa38025877f91c670403e68bb1287a0310c8df0a38f8c2ee9f4617aacc22c5899ad7b9bfc6ddc2cd64fe6d970df795c9f3940637384f76e045f0849139ffb010dede097b12afb6f704190dc0d85c0186f6d98c371f8ff9d116659bff119eb3052abd3920cda01e746a32c6c4e542c42e45f45d55b35781642d62b5ce5282feb45721aba890340651f59b9acd80d62c8381de29a6b6914098dabc361e411ac1721b17e27418d945ad75ea210545e30d3637e9787e04c58c23c3a4bf8cbf63d154e1d4ebc319dcf1d3c459181f7cf3f75781321cee594599eee86c943e915039b4ea21e4cce3a3f3a4c08cace16f985f31764aa399e6d8cae7463ed46b7d82fdaf10a3a9d8ed5f4bd7234e10b28d03d6605b98168b85d5a1a9b78967448bc7b2718b63638eabfb19984bcdcd2b0b8abceef6814a75c0265ce8814af2ca64d77ea5b9c46cd5d489a5c1a0685aa6c7d7b2abfb4e85c5cc1eb8a54fc8584dcf08e87c1fa4fcb86b34b543d65636fba1f695c4a9543bac0583ac6eb3030622fc360e5307f475efdb404006acc43f53e299770ffdec4980da63ce5cbdbf3b558a5c3859e1751a330e8c1186aa328ae38f408b740844557ab4a15c6891cd76d5bc31e3512efae322be1fe38d2b0c4498b36504209400b4c6702279df916b4596e02fd03fb9bd07ad1ee611b01341f7b23f8f9810ff875cf05e6d55b2e5e5ef9e8d154a6c4fb29aa34fec2d356de523614d7a235e0216ff31b45b41aaf2e3797b8702d675a5c3bf4296e36bd8bd14532887744ea6daf333c404d08cc47a20f36a355be3f825000b7e543a4e3221810fa9bd0862c52b30834d7b9c6e84d711f272273ac4b8d126adc7491bb95b2920c46ac4134f49c472dcb27048fa6ad02e97210b223d4d2c3478b99bf2575d67c3baf334a2eb4efbd59d82ec20023569c61d8bfe8f6f05196c25b93236bc55605edfce657879856136aa4fb89b9b68729da9e5c797cafd20bb4fbac513fd374400f45c2ef6e1a9cfcd4a70edf843bbb01316cb376ffc1d88bd1f825ada9c9c9167e57d9881d73be210377fcf809b3e7700d3304a068d04edd8e12b56d372bb95b04edbd3958a080961827bc264e7b234bc7a4e3e9357b7dd8a405897d0e9ef78fb6751f7af78f2cdc6c02cc6ac2a736fa7cb06d3ac3b4d0050f2cef1eb0c51bdaa57dbeec0a62596800d59ab69965830851402179a42fd648c5ffbd165419cf34ba80cba2042328a89717def50751520f6219a39cb43555c6692bce29a2cbd726d1955e9ba841910d62d403d4196c37d4faf4565a81615278504a203e2690bcf5f705d82a0b828c8a8036885446cbc266862082262004c0f8059aedc19cc002eed127073de1b3a012feec2cda92d4dc16a41e59b05ec6adf7cc7bb6f963d93255cfe8a7b77bfdaaf98e9977c7b8b1c38bd2051ac225e3f820104a672d6166e7c3e2c432db2a80979a77892ffb7ea27eb2afd82e210dd7bc33708adbe953d03ac3355bcbf75604f7002c445780f3df27d036153a5fc388d8eeab3dc8b802a6c88b089d0ea424da170c842129521bdef9a88b6674b73bb1493cef517f687d3a239ac788921bfe530ea38a2e23ea77e1502d93b3ea5c5ccfd6c9c4464dd6d80755d9049feefc60133bdb347edb66b3586cb57fac32977c8846a96ea107f177c23c3d79398ae268e5e5dc11e5c753722b8bb7744500c2d7d09d8f8a11cf5696989a1e72668e697b81f093e2c440c200923d92c00cafd311ceee9b8fedb15955283434ba3686775ce2a7f7982cd04e5cedad4833112f2fa1ece87fe3a6416ee237064da93d3e5b9ec78a4164b669f765d5a6e1996db46194d936d912f95896ac5e2c6ac4088996600861cc0f3594b00d94aa7ff0a9efe63cfd8e3c5a4e1d6e5ff2359d14f95f10fc9063726f9e5ca25187b98029ddec082a08ababbc854eb6cb87ca6e7459a93b657fcf0be03b30e8cfc43c5c160c6be1f603390949789f6e4adb68e6f127d748049e1e367747f175ee8e2ba199a715cf1b19f1da2ae52468266cbae5658f2d39c4706ecf026bc12c8b4c65367f02d5516e73fe88e7f6e0f2a9ab2e3b0e288f7f5bb2acd3b2fca71327b27ca85a3f5574a90e1b063d98462eeea93988dc000fd0068339a2ca7cc190da5d7ce81685acc579ae2e07cdb61971d65a57381c0d747abe09977fc176b074f7afdb4590dda5a556876c5935628b2e3d6052dfaf3110e0e1fba1cd4c079ff589d4eb783de1c603495cf55998202e4579942a7dc4b0f0d7a142a92cde8b7e53ed9e96cb57056f167ae34876ede79f6941940c948dc2d9fd5d54a32f38278ff9446ffada761893f77834783af1b349b194cc73400ae950df63d23bf647d764043f14e913a0d9bfe48b657d4fbac682eb0bd6fb202e2e0f5bf001c4bc2a8a00859044097aef7ea7335759fe69e41ab4e343e17f1d67b220e8545ebd57e08c80e7a4dce25088f6ae59d37c5e21f2040ebdd3d86241fd4f4c360ded617f8f4b2c64bb6375ddf0bae5035a9a3906d9155fff6a3d4519ad9df7f1fd1b4ca15cbdd642fedc8d5dba91457e40c92621a2357026fbd8c1bb5f4ec22cf68480a68c14b2be90fde8e4569260aa762012f992028645f4d29d26d448ebfa4c612201fdf5a80c97362ccc3e6815d369ac042cf80e6df13c8e61f209e1dbd45ede8268b25c9f1f3c6599c2124c57106500f6d5a9f9afc0accc2212433b47a44dd66af27cbca1a4a9351cd00ca84bd27e9dea2c8e0b8f0d8a908aa0e57a2505f6cd5064e7220d77fdc4b64da53a3c2495e7af99f9b7299a14e420198026d6b86cfa25af0b2fff788412c9e78cba2dca72b310bad5851b5bb51960f43360bcaa23e08a094efb901f1e73224fbb0c0ed9505db38d2396e0902eb0ce2d30ebf96e7f7737e253d00bd7a2ca89d7a6d393937d5caaab913db23fb7aacf560f2c3693c3ad5c7ac9956b7915de57ec0f086d3a7a75a573cbadb4ddf33777bca354d5dcd75504d8c9bc57e8afdd82e4ccb3bcb79e443b1502ce033493de2cc4c565c8539cbbea104f6c6635c7d581b96b856d8ce91369669dc94321933352f277e2d52f8805cc55018a39b1d4bec9aec0578541f4898adb6883767ab2b699df12342d36c601f72e12f0d232550539dbeb08fb863b05d19704806fea5352802c3492e40c02e9ce50150b7469cd8e31c1fd8fa70091bc95f5a526526513597a2ad11970bf89f0dca6568ee3deb0b6383d58f2c7621a34f6fe6d6e397bb2806a3b360c999e82525fe8a38d6f642dfdaeffe68d14901750955061e022554f2c433b001b784bd4cefc50449c9508b8b6bb04c7a2af8f86cb4870c4deff43640943153d94e7d61dfb38b4b56b33efc502e6989c589864123ce51bc5b3a4b6696804cc653a719bfa33b95121a3b1f91a684b8c81df77eb2bd151485781d8a7f83bab410f9d90a55cbd2a99f9c5fbb4692d1c61eb3627c88a0eb5094ba644c7a6e99159a23b480de6b63f1b96893c7e3ef92fc6d94725b4bf3d7050e7deb479789777ac470e80a9937af304d06337ccf4d0fbffeb011063879d19976c8ed397b5886e318007fef2e844fb9987c8399d52eb2dd13249207dcf6ac4be16cc911c0bb0a7eadee48b3d9e3152e876e8910566078f77890413d6869245c82b5edd6695a7730cc16fc4d66aa22e0f100685b7f8a7407cdbfa6b3b898aa5cc05f3d9d113e800a993add43c43da008fd65d75976beca6985858c08aa6a7853e77c30ab15cb04b87e9815c40b8d49f1cbd3cea4385a759ae21c96313fb3529e678f5b46923a6be0a8600e5cae32dbfa04d88032286567c2ed2187bc80774d4a5adf7313ab07255e176c1cbe43114255e70e0d60abc574216f613f6be09330d4842a43f00a9f7678913a495f44c99b6ced5ee8cecf3bdd632b6f3ee37bfb5d558b38d3f2332943ad2338310cead4b339bb0599e2965ad283893fb8396d5c729736f7fca7abf21c6a39e45eeb314f20eb7eb1247028857b8004dee4804701b4dff93f997fb8d7580f15948b9c2d880e594e9d3b902c22ad7fb0473756d18494570f2751453dbef6b5c760dabf6c15e75a10a4e0a10813fe47020191997723362dd0538898185e79935978fbd8dd100ca6e938b0b6e831220962647be287738b0254e5927c846c5cd86eec3f7a14f70bfb38fa2c9eb5226961a2bd2c2bae289827180881035970787f604e70a2788ecb803c9ba60b54da7530feb03553ccc112056b1d61068db6b4ef91a267b4344696308e644ca0fca870d9d7be444adc8430a10a3f1d5cea53d203ba9f188b581905a82835c5eca6faf59bd730308ee62f96d521fcdf44c0bec98bf232358a776533e150d333314925daf3ea1e54d3fc768c540886ff6d12b9952a877050ecba457560a5e485bf8ab1a28c0a75ebd69608262ee0abe847c05a2b3287f02962036ca4f25893f89070cfd6c01ee2a301862228b6944b9a3d9a6359cb7382afc92cc22bee845209f5a8e96bd2fcdc28869fc30840eb65991419e856b73cebeedc7c1484bd72578969ca4eeac206d14f7513a212919c15411e633b393fcd8703befd8211814db5a908a47e9526b9f5bb844fc8633c6e17aca7106815a3d81fb4cab5810726d713f58560c3aed6ff7e96eb0e4139d1bd7c49fc0a9c677e92d200e69fb7aac53d5148e1a083c584d8883bbfd36eb5bbad0d1caf9a7beb5c1998838dfdd6721b13deaffcefd090a765862d068af8b375a131d640df8ba45c5707efc38b3253db5f36f318027bcfa38017e8d80871098879edc5aaeab4603552335652d53db4e72601f8dd156d05c526fc0a3026ac60cd68c9d5fb4ff9ba6f09820ede0960e76981a1d362f93f5ec94a2b3088e7672bd9691d15829b4795999877fa0dbac70c82a125f358bb13793cee47a1daa07914b391eddecfdfe047081673f6f9b37e854defb45d48de54ca8a69297bbe2791c30be0ad12060599ed00c676c7dd4d08b487ea6b36b54d640dae294c2740e2947c1adaf5e542576bf4bfdb5056f806dd99ab041d71918287a7707e528b7de2e2574b179c4e8f3cf7e348cded87cb861777fdcf64c4b4766e5feacff4d205adf02554e2f85cf104b72a71b7716801eb6223726c36ae983c7497b3141393f69dc49135edb237d3547965e216fc60fa03bf89b720ef09e0216b9f5ced6f3ff1e44c1204c68aa2dd5b4ceec1a38a9416e9d9312516879aa36ab4854bd06b1115695d2e709f2868a17b7a80974b819ab796ca47f898daaad7786d7918d3f0bb4a52bf999f810907de12aeb2801a3db0a63565d66c0e94dbefe74386dffc58178e3256bc3de7380ab92ae7d35d4b605c75e9cc55e96e8aea6cc6da0f5f68e63b3351ed38b2f917403712ba336ef09613e958bccbfd2942b43a367e95dedf50e20d23bae478ba19fe67683b21b6dbea4be8f307a5ae0e466118740d81f4abfd9cde7ee1d6788ce1a88fd1706265a837e78e2d87dc2d8a50be22d2fbd308dfbb0d2c710257b3d460584bd897defe835106365ca5dcfc1e8272a8b36c32e959feff9598224f8e82413b6baf39eb1a50578eda2d63d13e65988c075e21e467f72651500cacffb3de7b6007a64601a11dd6078b5f64ecf4320103dffb1d202cdc79661dfa2bd81109e6d2e2a58936e3e94f264f7e4c52ca4e612d1cb7b8f4d86edac7f027f8f94d12483df7304f5913e113effe1c5b5f7ad6b7b71be94da77695c78d1194cf79964f5eddb5a845bd18a2e9c8eb316bb878ac2cacaaedf530406fa1403110d1e46485b4f8d9ae8d3f649a6a7561936bc14dad43f1b9b70cdec939780562bfe4d48acaad586557e355d07ca9034930a635c514fab5c9f6ab8731384d39b02fa867eff5f36ac0c0df714538ded2c6e48b30a45b100939d6e414f390f7ebdfc3ae53d3638c9bae8f2b68e480bd9cc5312bd9e39250a24224ec9640ed3b4d8c935356ab95ae0785d665ddd9b71ba3e5de21a353b5436967ee5b804e50d457cf8a904609e0e4b360f977e5f066392667e588f2ecb084893893df1eccf5d62db0e474953e7f1f2f608508aad18f3ae155c11b24ed35a98e07903ceba47924fe7e721d7216277eb895379e9e595ce20f8bc010bf28c9f910838787c3bade76df18c1ed67463703384c8349eba67aed2dfc187939713938780e09951ec289306d525e574516a6e888ef60e0fcadab092876aa9f9e77c3fb01cbe6e3a67fc050297a9d743d7861dc6c28a6f5ff8c7b0e80fe34476484d81a65045180acd186b5a0be1df4995ec84d7d32ef43b5c8e1882d0507f65f1b5345b8ca2e35b67d13edb57be60d09d681a3ef5a857aff978d6a1254a32f338b61e729347aa2694bfd43507e6d9c048505a3d2ebb84f61dee26b848a9283c1e244639d86824e264cc5adce1071ad98ced49ab0103ab593cb24f0ddc5746b9bbe43d3e4994e22b5c2bf0a0c77cea6196571604b9089bb0d3bf1a2c833c0f3c8348d800e4abb83f022929a5e169d36bade1100bdb9e37c4571717224e5b59edb12b6abba07a664fdc772e871331b6d5e3e5c1e51738b993a2e5a7b2e9e882c51917cc8a4a6a8662f0269f27cbce7c57bbb6de28ae1f3af0179356cd409d8e1ff417c6e972b7cd1a7bed583f7bbaa255d5c9fca6d042ab0fd5d11d07c076583decf8cb80a462fa195d90e4d47c16cefde74407a1a7631c56338bd320511ccad66286f564df7dda927642d69c1bfe2c7359792d3149c56c40bc1d468633e26af5187298fc68a3792a6be97de097b2fcfdfea62fecbeec82c04f1fa3b93c595119d2949db6c913dbcb0eb21cfc1e32af5d4f5bada3b20cac5e25d324e5feae56e01e4c9c5399b41b72b4f7d5adba76c2b898d21872f181ca256bb640cb6bbf1c4792fcd228758b212906298bc0a6deb93db90faeac515839c62b64db51a5339cfa70dae64b834d1f24362a8e5e7402f736dfea73901a8422621496d19dc46392c99126382429def4cb65ceb8cfbd43f1c43c54a7c16e2c1779e51f0a82bc07207f6f71a4afe8e200199f09b293ecb0935cf4ae3671d4fb9079c4a385244c2cc5f23d1c67043bab5f46e5f580a7a674b862efb7c1033cf5ba7aa6f940665c27e04913c5a5dfb3709fadbf6ca91f39bf1ada0f37ef3e273872f971edbd1aa9d2d6ef8a7ce5dd2cd9a6550970e2b68f858f268c750583acb042df189094561151960ecf27eb2745387beca141c51eca02c9edf152f52f3284d8031474e9f33461e87cf975b9535f27ee304ad2e0ab91509b84dc7a1ca48f5cf145b5bd03510bb0862e1e0e328e76887f0f01a873c478ac2dc5105526f31ac7890e40334f25480648490b1878a6562c72b6c2242adea8f5fbadc5d35df9fa5abc4d36aa42434e412aa6e9abf1903d15e801d45034e2861eb48967cd646c35b0aa1bee1488b52e2014aa91cc070ce259897be0f4fea1d6c132353238a8976e74b572313e41802ada15a2b7772be1f27038775a8a1a9095f8739f2ea1051c8ac10da596bbee106b3833aa97a6f35fdcead3509dcfbe15b3f5608a6042067a007e33645c2c391feaf2216c23f771361430273a417a8bd0988c290b6eb3965621de6a5656f62c2a062a66ad87eafcd75fdc8f353049c92959facc4b948666fe05ac7281eb41296262f8fd8ed0c4f2936660f488ef160f5f30b7b5f5178bb0238115a3e7dea59484750e024ee00512d7ead9c16f8a1928a04d93483235da4cf120807e06e36d81d8d530f072ab84d770b189a95aefbbabc7f4d48032fbdc47a0d979120555f1bde1659ea4b51e8e87473471dba531e8000ac50982ae686ef2c533498b5c34f4db30cb6a0c00d9eef9584645c4bbd9ae999f330601be20c3de74951be1c4dd2a070dd1070ab6142d6dfd6c408aef0b7d04f175f57b91737f909b810d86ed6ec196753257f335c5b9136c0af7b92bdadd66500fcb960326109b70d3cf19d6badf78d00c69af033d2181b72e1a342bca4de128a9895b2f2d0c258c62d511f83caa22e14a0354910a48c9fefb0a378a67ae8b7108c1888a2eb3baddfc2a71dd22b1c748288c668011be47afdb55a6d08cedde5f061b35f963cdedfb39ea1c71f7e84e18c648b87050ea9b1db9ce44e6b932d349dbb565720dafe948455f6a5dfe8113401a79b368f7124c44f89530085c8a686c982a1885076736e57a60229a47b0b29b69285776e2fa03513f54d5ba8eea23e8dd14096abfe76e37f0b7464646827b465c12b2f802b87eeabc4d7250909436bf1280474eed0425bb8a9d4dd3f45a32194c178dbb66e7cae579c0fba0e32050870ee7c08bf1bab688f9887baf63aa2f9b74da59c2b775b7e7b97aea581b07e0ff9d9a4f78a7b87215fc6d19cd2f0a4f1e9f9654e12dac9ce30ec6ab4af99f0960ffde07722c245d99c966c029ae3b372d421e63fa7ad877de4e82947b3e49934d2156aef0e0302f449cafae7293951f2c6ebd6df002ccb4e20a620c89ed68ddb13167f03d96796aae669d23e88fa9f19b602b38256359551d960d6ff610c2a8507fee355f8c47d877beff61c856accd3530b3ea50ac91dc10b8ab05008b121fbdabf6d394ace047ff1693c6d7e9e7d4820f139720277daa4b0607db825a658ae7e93e5dd6bf771665324ec83454cc97ff61794693cf8f2158641230fd6a36e246e2201700b4b0541ac7f5d1d77b89d4b288dfc7b0232cc37c172f32f8da79d17d848563d70f2b45a827d2a2bf177742d96b0a51876c6fbb946f05e16d38257cfc57f7909ff0d68edf470ecd3ba34ab2139765372dadd5fd76662e841a92a079787fa3343f2e50bfb3ce1463fd2c870ed9dc3a2ac924917507975e862f85c22a36b5d473448c38448a2e9cafdfb8218360ee84d24e59352e060eea0c364bfff4fb1f2711eee8c75e040441616e88828723ed5d65da969b650f6d6592d65ca64daf4f90e138861751e364ed2a762085a37f1bdcd1e0f1061ac2df57b3d5eb067522a04f4309011a4d3e75e0c08f7ca49fa20716f3850bf1cf51e51225f01bc2bd05d9575efaa13ab9ff6d458fea825e550dbf4f7e170bc43900a82d8e18fdf790009d64afdff17c447e9c02c994b8e4344abb091b15e5c3fb18c2905cbba7accc766e4c15ebcbf9d4f8bd38cd508d5416cf38c2453890c8dc47d5210d9261d96d99d33415b2195788910f71516cf1d04b26e12750eef871c50a9db7a1676c17ef4e634262be9c45e7dd0ae18b68211816d0efecf02d977f7cf181f42699924efba3f8c9b9a2908749382694778d055fed6b5b4edd4e79dc52770226dc1e18b20f7458952fb464dc8d3b68d430c01260abf3b2ff5c3c4b6fa3c67ab41026390fd941a24d50d8f05a6789ca230d7dced4a10f0d064e44f36a889da63527568292f7ecf49649cab56a4b16550ab0070736045b6adc9eb785bfeb8809a407c7f22e5ce179495ddf640958c0a845bc62551a0a7b8cd1b0869e4e42a3854d4a6bcf894f5c8a8019ef695cf6b0f6f0690737a2c6a7f0b831310c7b67336696cb8ae228e817db860b161242ee9e702cb325ebb677d3b0c5e10fd74590c5b7503e13d4684047145bbc3bb2019136364782baae47b06f75f0a8e50a29e069d9cddc0a5e07586149fb6f778aadc72349935afba01509807195f16ed652396dbfcfd51100c95062091c8cc55064f950ee264f6801d564e6059238cbdefae056592eb821754ef7594e1b4fceddd6d665ef09946debc24e7038767a461f7021ac0234325d813873c083737effcd9fb63275f7f82ddf3779f62c59f96e8d6cca6bae5fab499ce75b79faead2de0b8f9bf85a208376fa61a4a4b416d53b056f68eea909c08d3dd7a4bb0b172c1ea514118822b0f716df24fb31adbf5cb96cc684c7d19598bcf5ca916cccd80a1bf033b6066aa567d27da290058464922b10844e076b52cc53e350ace64f982ad993e5a64d9a557302900aee3b92aaadb4806dce97278db46881773236165a9b111f14ba3908bf4cf8e2093cdf1faf6b9f2bf17fb76d9cc76202137b32e5f7d4e38d10ac7e141adb8f5d7b4bd721e2ac5514f820b96523ffbb4a952fb78ecae0ce0314d714742dfd932df551adb9495f06a49ab440e45a406259f0d9c8b9e74931b4168b93949638391b4b212a28ee8e67474beedef51bf7e227231f079f85116a5c3004238c393799eb906330ffe5ad3c7d33d55353b64aecb9ac7b51bd538758d427bbf5337987d42576171bcac766a1df04c026a099e0256a637f0e154405aaba818940e096516dbe76b3a972dcced02fe6bc4319ee295098c8bb4458f3310503601a3eea5f7968c9035b52148c9c615b3229b758bbbc946e301e798bbdd1f0d9b1e08f6abcdceae2165e3156d7d1709f3fd8af2c8c3d4c8c04eb697ce60fcbda771265b14bf4986106c98f3d582da69745aedf0c486abeedbe6e049776ce62761da208b18a53dc0ce8a4940d4e5262a54acc49840359846bde8c89538e5725aa9910fbee575ebf3dede223138634964e2ac91f34809559401af49fd21ddfd96c9ef5cf79d484c60170919d71a9ced1e83114c22d673038c40fa0993da45ce2227f6ae21fa1fef8b5ecb4c4e4867ba1d659bf6eac9006bce3637c179476c916d12c84ba3186dfbc0286c4fa4ea893b209af81fe11ca13b1a7f088337ebcd8556663bd3437dededcbb8c1c8080dd899252f1f22e5b22fa1cba63b1e23f41bed17d52d57d205e03aff9d0edb72821b33a4947bfb24a2d3b6338e8d74f5dc7188a3ee97eea1658afbcbfc6247993e4e9361ec1f387923be5e54861492e60f92c2b618be704407c260815da817195c8313db27fd902267cbca0fb07175363dda019de1f3a996a439c9293ecf4987ff6a26c09969d20ef3d75544fc716d870a885ab3fdebdb176d339c2f81609ddc9987a95e17422e225f5dad573b9a88985cd1e6e337593c7370c7c49070172e5f013ba5a4ca9565f09386900cd6eeecb0c1c55bcfe7ec38a0cd1e317d9f28391be361259c09c98065990ba17f5089eb3368f80d21af475eda7edd33eaa708d0956ef1cbc67cf820c36cf556a3a24d415e261e15dd5377bf785bced1467faeaee6f0d75d7856813d08663eefda794ffaab1baeac90549684a4d37f6dbf2fec1ef97927083cec01c275113531bae145f80e9ab7b8c2f2cd75afb100f3705442e8635c60ee69a6f3f92189b33c300be4c9081725fd892cf6bbb4a1fa0e423ef7d433f2e58ec0e5e19cc5dc0c47aabfec716466fb38425e989cfcbafa4d09dc4ec70dc93176e4d81ab6efbe81ab0c4f040ff0f2d820608363fd38858884bdbaeff7db86967025c7e37db0101394b33168a5045eb888437be094e26c8e195f48051cb2722ef1b06a94af54727dec5cb7bed4034fcab0b75139ceffd55aca03de90af16f0f9382ae860c9dce8735ec0ea55bc8eede61453fd8c583ef66373f579a42354334efa00d72dd160d45cc85687afff68c58c81f01a62f94b9fa7a6ddf91f28d64048fe9c6a5ded52274f48328259f79786a4472baa622db08a62abb6f3e5ad06ee6ef5da34762d0b9f9e5936a595738e3b258494652562c836b736dd8e88c043c6ba4c9072b438546855204c4ee8fc281ef77a6d09720e43ac42f71c9b72e38eb103064c1fc288d7e59b8da87f8bb16b11389e72bbc10d5bab5f91930728d669b72af3a90f81bb0fdf3745f99ed9689a48adf39ce64124abf72cb9fdf503188a649bb983640f12f462ae64020689ed2ee47264f7b1de358d6dfa8460bfe2061ed07a800881f4f2aae65ea7f8a5bd8133e4b170209865e7ae00c2833173411c2b33877f9bb587694e7a6a7b1575dc29cca144381cda6b8600fcaa8c93b51170af2a1cb82cc2be3f57dffa1f4a762a263e7ae1c8dc082958bbd57437d56b261dc4f7615ee622da62b08af6dcb9f22bf799c28f67f9b0c6235f209bf7949de1cf95ab19dd694ca0168e1595d800e3e97a9de66cd68995a5354b59667b122f15cf3fcd86f80175582312f75bb8458e6a59b5a4771b1effc170653a2100d15a1ed573db9689d40896c2d3e7fbff6a46e0295fe9e0b79d952368d1f9591c7c507164cc2d6fd3bd19a3b86715514c24c8695fc3aa72a5a2f8aa8daa870a93d56a496c58dbc432818044f135f80b6fad64a55b43560fd4c0deedba3b33ea16ec07362c096af6e2fcfa709cec33ffccf5d0d73ba260b98aa41ebe79a56df03dbe8ff30b0283abc525e70e9a22e48e08b5cb50722402d6199daad5d57a72e8c4af1e00834d13f24a082de0c6922fadd8e6f056056ce41faa7a4f353ad453f2f4a0f24e98401f8280e77f883137eb25272938174bc8d955736290342f861a4aa9c47227744fa8fa1ebc8dcd5cad4bc17306f24cf8b08ad19d555dcd2f92ece2c2ab6983c0fe89e261fc95be0b3ff268cfe30436fcd4f403c25f8f63c769a37a713d9cf9c4f28f1ec3a8ed9088820fbe804b4a30de2b1a367c9bab77a8bf9804d9352e1f30ce35eb4ea2b3c9cf3f83853b396c5c50536b63da145762c7878f2c3e4bc8ee4ecfbb45030372b1fc08cbe55056122c1e3e522827a148cbd855b31589e09972e2a4818b782ae8c1370c0acddb86fc06be9b277fffd174d68daed348c1c05b14738fb717fc0a02ed7876e78e9cffb4dc585bb899f964685026bd3d60429447f234c375893151d790ac9398b4dde0aea5f5eaa0fdfedf26d8bcdb35fba1fa877723a975a8c025a55e2950ba3b03eccbde88e1e8521e41734011ef4389329890bee61cd5bd2fdbe8c6f41801ebd35ec466d39d0067979ecce2c5d1175028263e79e9858e51ee50788dad37ccc145f7eaec6437df5bd04d275a66080f8572981c50e561b5bbe4f3c8dd5ca54c89acf8753b499a6e9290bc20ce36d855fe883120fd1a41772c3de52ed1f8fb9f73533cc253bec9aeb765664ef987ca977045ee5ba5579df3daeb99a30b0677d61af18a6daad51251d7a8dc675286bb9f08b86de38512476badf7077c68eedbcd5eeef30a6bd2d9a091e4e2db4793b216abf0e127959e9723c6dec648f20a3318b6f4412360d5f20d432b143eacb78dfe4c15441b7716b8b2c15ce50dcc3193d3a474dbf74a00ca0679f78619f1e6cfa05af4be69c6fbdc14a342da7d8147c3ff97589645724cd3ce92fc2eba1b2e8a382645f1089fad38c7a369029faac9eec4150d5b4b6743c92be0e836bdcb8e11bdf7a5a17f4e51ec4c71ce7d4e5aef05291bad49bd50c1c48f2498b26d6e357cca4889999beb173e613c5e16a203e3eb9f95400026b959fa66b869a4a32e6078c10faae1f430b7485a4c1f6e63e92aa0c437a1ad2e21252ce0ce10a8a769663146a1c844838c8a51a7cfff9b5edd9ed9e9d5b46a79bb3f79b65487d9ce20d815a48f003e156ea7c0b6ca5e0a7fa25f0102ccccedf5568d14525defc10f0f474c88c56d79f130a6c493b0195e394d8b2eb10a520baf055d18cd02eed7afec1bb4192907c1383dde15193055ade3b4e53b3a1954ac44dd47e1367dcf4649542b422645ca185940f42796ec1fc5230f8e908abae61b682a648264e50a844040e7091bf7bb8a3e2209f169f8cde73a21fa451cdcd4a66eda20c1ae2a476d4a05d9627ef7a94bfa75ad26ac94a4365ed0bc6248fb7b9aecf7e79579dc6a794bc27f47a0a163c53ab82e4f67445fb9a9a60d8962a2097888284a066441601a5321392742ec5cd963849078118d65159b701ab424e7920e8fbbc68e582acb3bc29506fb449eef53621493b34d5182b80f86ee0f18d420414121c4c26bc33fea37fae40cdfa3dd24630589b25a9b2fe987b0147697a5b0448286d0b36673bbff86ca721605bd2e2029cc09f9f3964336f5927e7531389ebeaeaa5ce0c9d9818a53c8763388a789fbcb2fbcb150f05bffffa963a2b738522a1e98234bd5ce23ba93780857711ea18cc6e0abad95ca48f634ad25705242ed03c8a1c6f26c67f20fd340bfb08e1b8c14f73a6a49da8e9b5c097bb60ed0036457a328a84841e155bce071d31c4ee061582a5696572785c580f7020fa3f0289b78e2cab2901ce4789477599bdf12b30f3b75c829ce45293c1b3e003f851c6637a3b417493e1e00a2b85dd6831aa13eee06cd3eec2f850a1ee264a61f0a64ace90e3be04ea552c7389eaddf06726d8dd6b35d5ccf70d198bc5dcaff3f94cc50a2929edaf5647c02d183c757bcc9ccbe6d5816e0fa9ff0524258b6b216b5ab147aca6b39bec0ccb125dc97fdb11a8c21a7975f684c8d56f9a85e5395db4786d4d661f8cc9b26713dc6f58334646716f790ba922e3a944d0d88d6a26180f8b1e7d2a58aff4d1bf9861fe97c219f8f34247975e6bd269342a82d39f33eb1d67ccb7ae8e1a48dae182fb7f3c678d9de92959579b77022d1c6166e729429ea166074e84ba9c4d5b1c8bd0579443a8a5830864e4f16b46e9cf38f35b21207748997d80f8de0d73b37a027ecb664e5fdf82b4a1a111897b6bcb3af8e5d1b4f1005f96685c853b531fa271c227d142e3eacdc072da55f1067412c3156443a699e3050299dd86ab0f2623eb898f1f1f046af2ba3d9317f22a101764883e8cbf129ff4f0046484bff5a18fd6307a2dbcd083514b28bfb455a65e9e0e9aff85418bd7cc8814d8f6c7ff8537d026f31b319ed66fc94916e50cd67a255f0c91372543c880a282b6b624388336d82f2e2214cb8449ef36425ce0b684d81ed35057b6b2748ea5af05023e74175da21cb4c50ef561cc47cd22c500fa39a6975fdb0178127364dfa7363cb2a7c3d09569df02f436624613dc73d99028d3c33019ef53721d8fa85e70b4ee079bbbb297a93ca45af82bd30abc9ba81ab85ee2d7d2d399c5a940f03c86cacce677e88244d93da83d3c19ce3ad3cfad02467b13532eb054896b066337125ad1e73ac49d9e30ef291df6982a3431ec00b78861cd99a7c7051e107e37e3ab10974f40656b2378518642914d9482b2319a701fa03e4467528ed429ca7b646576d3054c3f41575f946faf828108860a9e74dc50a425f8976ac27ef6458966195537ae5d89485a73ae3acff9f3dbc1d0d18862951735bbbfa960aca1e1ee0ca2ea1256aa162690f9d794fba628aa885d9c6d183c6678e814a8f048029514d7239fb76df2ff696cdfe6a9d122f521306a29b43646daecbe4e2670eba239d6fedf4758b5086e3883f0d1055c12bb7d52ed34e360474a54a513ff423194f4b66195ff60c277122a5dba4b5fbca0a0455b482148b5288d0be3e95b587d8c8bfae2a993b43cf246f38c08c4cf43930781f8685d82e91e5d33ce1a0a66568dd5f8a07b8f7103b2bd59034aab65b92fa2397c5f38258199a56e9291d97c33e51909dde2b7ee8f2066c1b53d4004283abc9ee04912331b3a56cdecc4bb1a5ccf6b56d63ffee4c693ee46319094153756b25d63a443736c734b638bd1e0a3441f6e93c55f061b336b027b483093469cd68da74cbb33f65ce620ee1c73ff90e44aabce1eed457044f00dab2c7e242125b8e980b41addb645b2dbbbc8b022e46d0a7e45e369942d80145fef8d3e2a8b03210a402af9783488440b10026a335b0ef643d94b0d95dc50d4e5c48c0b53f0a6738dd40ec4f5ad2de8e2271192a226751e260cd38fc6c476d50fef8067e3fae96eece6aae5e811527c786f8ea623e82a8c0fcebf82fe5ccd7c69da44fff0703394a6f8b359a305ee1ce10ce5bb64bf3d032883ec7ea90ecd02e5f765d17445ad5b77b362bb145c90afd000da45dad6fb769869fedd0b041af6651906db0df033d97c024a85c830d4172923160a8fc775814b4fe5f4b30cddedf7c60167155b0cb6c8af27b924d07b4c134bb787c5c6a180aedacedb66997bc14c96d46b3be53ae521c6d126e66989038e5eff434db5b664235e73a0a34cf515f72e54adef17a5f14f57730c0330e9724e0f3f836085c3a4b0320b66d1d5fc9d74bda6b85405d3830a1126e7b7dea3cdd5ea242153790d08e6b843c62f1d0fc1b58dcb9358d22d0b87ef37f50c7f0d04b48fef8086acb96a91bc2c20aa05368513ae2c4fcb8d8468d4071d5782ad1bc5b8b7ba4bf6141c84aaedc0a71d5c8ace18acfc4388fdb4748d142c6f54e055c5b8fad56b2fd3a8ce94297178c96fb6f1bbacbfcfb707193c53f420609ff96154ae6c9769f3ee689458827377eff91d87ad162cbd2b1f85f806c2205dc702ac7d749b614573ea6e028dd68767765aa252a5b646b3465be2f1713735e7254c63d4f94b784062aac6af62179e136520fb9f29a01612c47e476a1f2b3e0ce4b440a46c80a52c69da807c495d5a64dee23c102c7e34ade1ab660aace937e25ac18709a75daf2c2cabbc84ddafd9cc0e63fd5b7be437d89e0b0cab3f70f672e576514c72f9cfbfe8afe8dff4996c58db6693a149b8fd831edd5947dc97d415f17a9f0c44e4850eae8d20660afcdcd851396ea6a89b37a316911fb0a2d842e37321826b4e96290a5c9064e674dbe766692c1c5ea86c044252622a12cf88079bf392be09ccd0b6e99fa69442a5e9c52769b791951a5bcf93d333c8b668baab1b0cf365ddecd97120cee0d8c16a6d0aa34de328eaaf0d34e73454b55b48ce51bc346308d96fffa2d49e300ba85f4efd8d6b39263189b28c3aab047ac2cde31207105ce03aa4ec85747b2fb7518493304a25346648e968164a4842c192437315fd02dbd2ae7175fbcda54f78b4189e2f3083cf25dbc576878e7deadf5d069ebd33f55fcc2e90eb706dd17283c3872fc4d13d32d51a9d969e176b16aab44bf48000db583336c46055d04bf35db4b10510b0705dd3311403cc83ada0de872c41e1125f9315e226179bbb3f41aca199233ff2ffd2b3fbc8ba70141ab5bb872b7b9d90f8d6ad10a8cd28a83d4239495f422990db015261317c8579318b80c747227666615d6230331c22e64da20efb403853fbfbf2d1574c6e0e03726e1313fc70f1a28f1816937b8636b2a316d03e9e76093e74ba6c81e90e123af665553c1524c7876e22493aabaf469015c893f565739f88db9874a87d9e06e5f4570929df8a48416c9dc7f705e3f7e2b991143b3ec7d04abba89e3b35bbb0c837fe8cf449f7ae3c57f9fba7f187a2bd40cc115ee5a6604f242ba1dcf1880ffc7f9a1fbfcc0ce05ee46134b6e7f86147f49bb3840903e56890b23120b5ad72e0e8cd8d62a40777c3bbdd56d7bb4de57db686b586cccb04fb23bfd02c21c38323dd2e00c2858bac48b2e6c1a7544ff28173f6991d4101a51c3691f0eaa7fcac5146247c3906a1e75bbe022b3d5bb29573dfa1c5db0f1bce0ab874ce26a8fd9ac0c9deefc5d775f8c626e74d279cfd75ddac48f054bafd05b22b25283f37fb7128ed027e850cc185ab5889dd97dec9c58afe5d07d64a89da7a8decb2dee0ef397159d05eb447ecb475c54bff1c8a6f6564b96aceb26d6d990a3ae729b9d2a7cf83af8befe9512a6d0cbe7908ccd87ab99030d11bea650a49d91f7e8d64a3ad90b35e46353ceeaeb38bc52d564ef8a5603c1a6b9c39befb1a6be730235425506230668fe29fe5acd21e73ca900e8b781770fb19465e66223441856a8f016e594e574bbebb13a5f60a8a7f2686303e832ada39a2c7f5d72734946927fcded2f0ce91a4128ebea8efacbc4bef47597862fb32f83c04f21d8f60ca7f7bef4668999e267850d62e19491dccfe72684e969fc93023b60e3763d7caff8bd41d1133628caaa75263cce5bd69ea80c0c3b229ebe5532b1c63f1839481e5a2a97bc1b9a30b8c97f1ec054d98d6ef8bdd84142aa72d13d759aae852d929de576c1b74266cdaaf8023cec08b704578173017e6c94b23f8a7d483911f98099ad577a60e34e33bdba171b25b88af6c668d5029e1125e672b6723849bb7a19e7720d6ce19566afcec2e53e84773f07b74f0a67de7b7dc7cc3875f1775aaadf85599efe7760bd05b42856df98ff1563f20c82e694b6572f3ced0c018de376723365b4338325d7ce908351e6cf3884abae846d22ce08c646ff6a37bb7cbbd103222b9847f4413154134f250eca5bd8470843c1014e846de83cfea9b55f3610183d852b727266fdff2c70711f8f7a3150bae621cf28f1f6f6eb3f5300b905c267caeb124aaf53bcdccb8eed62981e65828a997809c406c7cbffb3682003f7666a3d5804fdf0df397364ed36241cb0c4025be6ba4d3d5c6fd3134405ad4f239a3365ddb0cfdc3f3700ed5bb3b9df59fee47cfb4490a0ecb73ba8868cf1ecd64318eca12f219c59b9da137fd4426d4d98fe5fd2560af6f7105605c55d14fe8c2fc437e80410a1ce51aac9f9fa79ce8b7c6e081f747589a6cb53c5804df7039e52b4c8d37e0f643cdcb0d0b08035e2373f97f5a86314ec415a50ebf66276277c8b675f1d2a952ab94ecdb20ee945f967eec282c654f786aa62100ef9939b23a0bd3e8afd0ee908b97fc17c7668479db49e546d8a300aa3387b5c3a8e347ddf5bcfe05b3cc9ad941ffaa9e169388153d7b18a10da2813e3f9f4c19ec3e768d047f56d7c115c0d349ae328d26638d0137fa21220a37a7ea0e0cb3b80bd4cf713bba6ecd68e3936690000076c4500779f5f0437fcfc4a86bccb6c6d164ebb9655d75baa63579e8ce40c256ca17bb1042ed3ca2743fd922dd4f0b41cd461fb1ff377d4e2afdc2c83cc830191e187cde93314949759f7a79ed19a58fa80d4315b8ae2d6daed1dd6789955eb56f5c5c8d65ee43133d2c4eb2b1b1a6c6e46f4668677dfd3f460a443466169696c9dd1faef2496a19eb663b20b361ea2f534fe8e1395e7aa54415f0a9b3d3d3e3bc22a7268e6b0a0aba18e91ef3d67773be29b2484830e7f54e0803c7b17dbe7a3b0c6c6491519549cd7283078156660b197f1073bfd4807a6659c8e8628f89449cf929991df74fb09c34c6f89a0f0441c50ce8f67af9330d79f73b9fdda888a9f33f8db8546550225080d08a45b495646c738b487e706567bddb28a0cba942920328e140db2b201f381d1302ecdc1248e83a34144017189969d1e33fe7b6e70a26a2de2c6c9a315b8d70470cd4639eedd2ddf64668d8fc8bb0cd03c7f15fa23872b6ba7a810c4f3c5e4a6f20f97687b5ccca0d3d8bbb51859dc35e6da3528853a95beacdebdd58c00f990ca8e6ec9033fef132dfa74d358c4509f83ec6b9c4c1be1d97ffcdfe32f5d2f2ea6fb5e62884196c31ea9f0628c10206562e380308f32c578fd8233652ab6cdc35f8358cb3477588ea1e966bfd35fca61dc2cb642fe7949759f12a5d7f4e06f6907b2c98500afd4daec72805bafa46872513503d05394a20ff53db9e1dede14e4aee2b89ec341b5ce7b4956bffed0ea09b527b7df9334b385d974d7be34828d39d0438de26989aeb3095df688258c6f0270400987c515ebb99a79fd043891dd67e629c29d09d0bdf28c932d8bbefc8056c3b4e14a9a471dabd649d7752732133d62b8f0d0fbc6e32953d57d6ef7aaf593dd056dc4b512d944ae131369e3aa62e06be00923e9ac87c30e702f11347d0850ec2b9909bbc7c5d53ce0111dbd37869aa154d2ee59ec4840b9dc18242ed0cb54a41a47d4d6ee67ed03fc15f39b7c36aa17bde62c723fe81c24d10ab2509ff828303107397cd2ac04d5b45c142cffc836f90228d597535e4ca20ceb5f8f34b8ebed1907d66cf11091b40f92e1fbeece1df6218576623ea993021379774cd51e625fd96f6433ace053bb9b463a02c1a1f2168d18109052e4597dc8b858861e82f59e4f14b9b6c142c9793b0ccfe21856e9328173fcdc2d9c3be2a4b06df86d457363ce7627403219fe723fde4803b3fa5fd0015d4ca4b5d0b4eb2628e8c81f8d839063d23c6445d753872551d3f194304e7be67deae65930c009099374d8f6d759edc94c551de1a562793e400a699393a7b99160ac186ffbf630007dcef7aba4803c5c0c89c990d9ff4b2725f4201dbef3501b3cb93fb3e979c296b004d46c47b890edf6c8302f7e2cd427af39d8fc9aaf7559b7abf8c5ffc987848ff9415f355aa58c302162c3d3b381ccbb9b16ced1af15762b7e6f43241982bdf6554b85a950d5f703bd7727e637c1dcc7f38997ada00e9d41dd999e1ffef51c845085d7a2bce4c92286a8681408c6dc552a689afc757c75ebebad7503f1731f0db50053ff5e962c17338c8615e3dc1cbad789bba1e672e0ef6fc5858e1da9a3e18fffe198e132f33c5f77d4839f92a8c2be4ef4dbf60678cea089aaf0d68a24d4e3f7a04762277b7a37ed4dfa2341f3089bfbf7015a2360dd9cff5cdd8404c60459149de83e8667a58a10ea843c254974865d7e854e1e8f678ac2944e78308b0300dcf77ceee8d4908eb21af2f36190162bfee30527ee0b07379ae1a8b9126843373fd537b4c7232c65b19a2f1b8f2550cdb581425dd56e128940c2ee936b013c19051737b6c1dd95dab58f76daee4bed601818b1266dd2a20de484f982ab7ea38eb4de279f0bf1469d04efacf89251eacee618a2a97c7937e3a385c22edf26659b40f7f5d77725c5a125a3a3e2e15d241c15554327ae1fd733429cefc9dae2ca96b8e296f791eac715b8ec3ed86ddc9a59c2c316f9a7970f7051aa8fd28cac3b39070557a67aa397d095133d0a8aa696fb9bef52fe515943d0e51b8327f69f597eb8d80b78ab76e327eba51fe627d941ed8127f87664b60eb341295befbcf5b351588f94954a04b9c579b0e3f45581bf8a9be2fdfed0d795f28c8e2b58279c20e1fa017ed53b472ddb0563058bc768417b13edb23d192acf978a3270a1df2a58a88268a307d4c5000e4142d5ccfb636e60be8a9041ebb15a4b279247b424d643d7e17a6c8b5b8a6308e8bea9dfbb93e2a665bc2e479a799d285fb4db042197a6d5ff3e50a27fec3a0169ededb33b6c60826bd25d541d7bd587c900b16b9c47e79a0c1e822b60e74bb53f37f444b694e6a8e2119e2839363cab9c228203909d75d2fb3ccb657afce0be3e2373fe3090e0903681b28dd45bb47a2fcdbd8aa67faeda017b0a77cd53c2ed0e0a79a7d00e5ef114f24ba218214720dda8b169b0fdb2f8dc60df16797c24de6662314a8e36cdd332631cae0dddcf84a844c829524229ba0b5421d90eada14fee1fff5ffbed96c287d55cc370b48aa93d8d28c4744b8b3efbf01edf2dc159bded1e734e0a7d3b732be93a6047b882a31bae3ab5bc27b265568012f3ffc0d5e97527ea7d3ded2292ec4c3589546ee3bb9087edaddc41a5cf686880166e7c528d9e83c8d0089a45150b772b01f980a9a0000ed17e529f25424201836744d7006ec66839efedbc53734c8f4b2e30668b9f0286243aa2cfba1967fd039042a7b423e2884cc73074e1e1d8a3fbe2003121a4b7ef878d5a891884c0c2d637d6857c40409ebba00bcba91cc482361b35f463425388d046b74635841834bcb506854c93746afc6e5c27881a4a283b574d121d28e4867e284060366e4560b612190b4e12febd2e8a9b6cd16c0bb24ef5bf0183c7d30709c92c74a1bb6bc5407f2445d93a7eb2c47b29b05b3536eb792a0c0e369b7088262115d25fa5e6a59752e0c5e6c5b80a5873fd2cd835c21a3e5ad3b9b7a703976ec73b9468b0be03888b45266500f93076e0648d3647ae2cfb0057745960832fd9d17077abd6d2caa300cff3ceb0851c5e0b9d6b67ab754f393c955d072d23869b852211757f2d4fadfc6441fd3aaf93072ca094db43bc28beffdb4040bff50c6f550b6b72ae05fec6758fc26095aaf10c8313a4c78baead9e7e56d9c828d149003d6eb94bd61730c396c8a878e0dc6ee63b44a74ba14106d0d29b3d7b101c55284ab71307969f78130f3f218fe1d2d6b50b91f26f1928f2f1272516fb739af392fc758210a130e92aa12d8a8b470bfc9a827c0a31a8dc3351ea174f9d04ed0efcd00b8502e4ab62c5e68591fdfc77fc0fedf085674a1b5d87dc519ada147b18c442928d35bf6551f767d353c3a935dbdd38002a8682b19459bf8e8d69074a065c081ea6d5f47e67d900f6aff589455a0f366e471de6095e892f19c829ecc544b24278160c032f7b808ab6a21b3a260b606b0c8b85098bdb0ef1437fda80f943cdd5e18348d6dfc7dc8e301ed7ec6082f713f78ea5cb6d4aab16ab23e62bc1f9a53498e594a7e54c8563a4858c6f4ae3f4e6f11ccbfb5ad447c01307c6fd4fd89d9805306e4460aacbe0d2e64010eefa448c3d8b041abdf868486d9c85fcbca17d10984b3a247475afc43e970db2fb4554fac4f9d77b3d0a47cb446593aec19c25a14d418ef538648514c4e89acddbd89a0b371c75eed30203a4a48009f4b1a37e3885c4da5ebfcb09029f17f303f1af00fe2e23724e51e3c69e3c47dfeece531f63b201e4f9edf18ad471c5bcf2f13fac4d32b667518d2be8fe95531f452a7921eedcb3542944ce823190cfc234c5e35ab0275cd9b36a299b7f636d58775e81e836ffaed7f6e53460e9c686f90b9bfc8b6becc8b53925b58ba7dbc45be910024bbd0a4de69f8528cd17d98ee95996149d38a8435e313d87448a17109197f500f6a612ca9e94a460152589e99c20aeb4a21dc57ca3348bce2e03c468062eb1149fc1cc092d96d307578ee2435e764cdc0fd4bcf653e2c274e3b0bf52fa6cfb1d313aec3561a5a50be2439b1948725e083ade7e4283b5c68198e10fd54101494c1658d5c0e0766c999fe678a3dbeb129534b138f556db3b1339e812af71e3fd674067f4ff095791bb9ac1eb63cb8f0223bd2f5e2ccbb1a8c528e8b84055730326af0d63aa637dc840a94cb4b327f16be80d374a47c0262700352dac316b6d7b59107f07dfc718fe702e3b9ff179636e53a44de523dfd331776fc8e8caf718c408cfada59992cacd155b328eea78aecc576dd42baa340db925e449c69c199a42189c1253bf1e4ef4ae445c3933f4dbeb7ada21247def1c039831d4abef3b1c0bba55e4021e08ec23a904a52dd6da25d9280693a9796c7d5ca3e98d0c56ac96b732d18718b3923a7b4363d0bd2c6327f509155e4f232cd6b40436a64bf1412dce5b1cdf2354b01022c220277d47223f12dba773cb481d49df4e7e8e2c88a5f51a977a25920ee76dfc187163cb1643974123adde5a53c04ac7f925b85532eb65ae6bed331c1553202dd2940e8e96b2febd3cdec7b2fe90fd449c96a58dd9dd4a7c8181c0b95cb343c090e32a6712e95250ef78b2c4d3668eca1f5854f9f3e8f95e175341e321875d93203ed30d0735897fe0687d3bed16f2fc32f445f48efa28630b4f40c7b082ab1a356ce9b2b3e40ab0d312e80901fdd17145fef015ee826ed8812cb953a9aa804e8938c9b2d9b7bc0bff70f093a44f868bd5e91b999286d10c5ced4d403996ba464071fdc1aa0567e110d6e2b403b78a973c6287f3931f5ea0d902b4d2c67a86bcbd89bde24a8196f07ba01ffbe5abe8767eca24da76b115997138e2463a363b4694fcd97a2028a7d5263690869c8b51769f1a22f9d0b953982214657f661b0ae197a1566fcf3b24e129125ccceb582ac5538379a94722047c9810fe64762bcb1108a46fb5ebe188c693d9ba3adf832062900b00879eea20029b01860364f93e00509a7478d3920716311dd1d92bd7779250d5351233cef54ab46583093ff87655bf443a0c4d9dfcb0e5909002cea4300b13354d8c2393f63c535e0dce8c232397c26c41727490ade0b916c2a738b7dfb129660dc367a4e72a614749475554c3dc7ec562da9b4eaee2209132046d6814c3bf5227eefa56f692540cef58b65bccbda9c71a0ff71badc9cfef799bd0654a669c3763842a5956f62bcca77997be93ebe0f888cd1bde4e7b7ccc45afc2496080b3927dc4b69d68d265300db705c4402f2fad42aa9b8ed0040219f0aeb68bd49e537382a9618a6cbd810ff62d050773d289cbec6ce61bc87f33dda396b2fcb87d7a4d7ecce9fc3c8efb2bd629d99f961c975881165d4bc538ae43d64408c16d7a89b40dea5d6cb67ec309338f8ee4a9cfb22b9f2c3037ab366d1cb9510f94d6940514f68ce22c3617266d95541e5581db89889571898e3f281d9d16fddcc76f7f7c26b6d0754e7d9644092d167b877448f711508e778362f7d31a8ef166b0c955feaefac991df6cccd6e374861ca6dd7673c2afc6a54ca121c2dad791655eb92bd9925c97b82328ce1ba73bce43a9b545fc7afa2f0a4d9a6399b9fe3ee4c4e06977f3a87f9aa8ed5950cb5e79c963ef97ede695d4df4dd3ff78cce16c18aa3a056b7c2b1ae8d58db2fd509a011d09b0f81fb330d98d77db56d0bc506c849cd290adea125ea2e701776614c92eeb12f6a76db111be76aed8384df8752e76a68c75598df310da34064063c538581ef27824346011c72735f054b3c37ed7c761e035d5f2bbfe6406d6b0ddd5798d9c659023bb329640a64270a8c592e0ec53a7b31306cdf85056b623e97d533c51091185f1200a7a1cc5451586b91f0940407eec98673dc35681f2bdf0f3d72bc6ccd75b4da08d19ce97aab68424388ff5b55dd372a37a6b1beff75e5b63203b33e9fe6ec262658f23c52a4e5bd8876e4711eb3f35f649d4fb6c0deefc37cb9b9a871db32d3dc9dcc29e015a1f606fa9e51d469ad2bff79e79e6bcd325a43ebb7dbc8f30f54088810d065fc1125cec77279fd38fb8eef29531913daf7b59640c43f5ee881867d00d2fbfe15f64720f92be0507bafd650e6cfdc9a3153b80d564511718c4633197f9e2fe65ebc9e2b5bc508bf4aecc64c54b5699902db4229605bb124bf5b33d09f5603b22270fcf5c3ec51331f2d6242087966a202406349c4830158d027941a1e148d433b741b69a8025bec279899eabb42e865e2827f60a64e061973c50cde12bc71a24603562fee045c9dfdf9c1cc0733dde3da1255e4999af08416e51710319af0465214c9b9072860fb2141886ed4e720ddd977dcdb69371d7c28e095989a4a2fc916f3edfdaff2d0516116d00bb2390f287914980caec07a9acad92d34c09f3215f54829045749effd80f052dd588d07e6462ebf85a2a6a23113f5fac73c2872d3b80d6611f5b9989c0cc127a89237e59648d48ef103b4e3d912eab5594577fe875ac3f5a43f4d8ca907c853c6e8b634b0a88f8e473c0ab730e9392469605db0c066c1c43b50a472728694390bb678f8a56e871600ee50c0f693da4151ac089aade7a4d254511e790b608fc935ba6018163af13e13ca664127822dab3762821e903b0d9769158a92baf73bc0b71f1a9dac08c87e13ce6c8d4300044430912951b9d2c31afd6a41fc7f40ce9bc0c4081a608851492cdf7af6c4229c2cc8121971e9a4a60962408d777adb4ce36762ed18a8961d10abdf87b73dea19105f232d226480bd5c3f6c483e6af8f2154d0c081144db58ffcc54d032761b8aa15b6616bba8c94763147c9b919211c1296c23e6d4d6f1cc609ed68de482e5a58f30fcc6fdf1c714fda44cae8c89af6d1b7dfa0ec5fd47fe23740f36202c03590c0e77b2c62f7ed462e987fcaf519d55f75a8524610d31fb3770c79de0d21b6b15412daa796ed19516177959ecf376618d0cfad7541c95eb0e843150cdc3329c3c66b2cfcebf6d04ccaab24acbbb3087c0ad23ff4655f4739e917818dd431a5a96cb3583d085f72212455a80f15dda45cd065935e86cc8289d84114896103f7c7ee69a2c6204d8fe92401aacd3d0ee148694fbad28270dd0e35b5107174cffd161f32dee1bfb290c518203188c11242bc35f69baeca953ae6b872e33cc5b3bed8db81037ec6ccbb83682ef0ac8e6a67e78c031d13fb0cebdab935bee283d59d2331d2f8263526d6a8f65048d2a2184f329bddc522410704972c6d548c7e8c942929f562263211ca2da1544bc6e4ea8be497e4522d27fe8d1e79e14827756c84956196dab901d03d6860f47f780d1b1191e876a95f9e5aa622844f609fde0fd91b85964a10462d5680d0f47307d888f6d83a4f0acfb5fd44bd3555a6ea0d57599c91a4cd58f13c99c4047e21c1547b7df188805512824447e2046d2f7f768293002c8bfc23e2cc0a438f8ab650cd0dead3b61e16c00eeaa78e3ccbe5e20595a9ebf58096751b414f10bb6acb76412220565dcfccbdce2fef00d02d219a24d87fe69d395df17550cb2878085e0d6641be64c51af39c4db3022022d6aa6a7182d67d2aabaa3db5ffb8403dce1f2648823cb0584e962873231cd9ebdf58f3d248564ba84d32e2ad276d89f2f65dedfd02b6d4a3c6c3b1177f17c3a93e4978cde0c3c741186c5d9e725015aa9e622d567cd44da8905f8e9ad323c53456d26267686b0e304197a581dda0fd803432c85c8c450588ea4fbe08d3fdcf202623e426b4903745a64f0134785ded57ca8b0a0aae746124eb8c73eb823eb42a1a96727e785cce5063d0b3275cbeb473e46ea9e1a91a3d366e8712c19e517ecfaf116273f1561b0aa90c2de057da35ab155e4aad8d5fea26651d5f908cfd500e26236b8bec2c94c2df3684629279c226011022843fc01cda5fa090181988516f74b9495f971fcd0587f6abe31d4dea41eb6daa6b1de6600755e0aa02430c8ad7540fda2d9f7cfcd9f0adbe1091f8e7bf5bd4f3b77e53d460ecea28908bdf5fa243930f8486d0f2869795dfe7a946fbbffccbe09e00cf1d16a39c7d15614b8befb55fc9d97b15fe84f04bfe4cd39863c18be630f4a1808e99bf620e1173e019cc8aaa73817c5611f3106c8fbf129083388ce7512a91b1d644d0b410e897fed932589da29ab5361f12cb9d79131a6e6190cde3d2348941e4c088f52645bd341a672a98b10965f922ab3656cef880504c54ae72b42ff02b2042248f84a070ac7a69cc1d06d183aa4620600bf66f32b53536d9bc697f1fff754f2fe9a526ae760370aecf6a2a7267ccbd0a6ee7c86d5ac7bbed68ea65c92ed308ea31b84aa984a3aeb566a041f568b886a9aeadc534da2cb5a52e24a8d203a1f44205b900af3ce339f23800a550daf70afed9083fa2c8fc461605684b309dad22552bac22cd57e315336c4e985ca4d9ae23a86a6190bd40aafeb2be198a9c1a785c5ae5369b6f78bda9d38cc91b6d63cb1c6968055de4e6d23bd4815c30bb7b462001f3ca324314641b5eb33f121272ed98f6be949c3c091103d6b23fc36fe11c0c86337e8290e9e64a30d41387823d31b049a1fe2637dc54036522f491a8cfdc234cb520150897b206a02f8da229fde2f825376065529f2662937105e2c72995555a8c72c611a2384887a59623d3580e5140bcd281b58a515a8cff14ae9f92d63cd0ffeba5db25d1d9c6ad6238570a2d69d95685d0b39de527e9f3515f6695aacff5ce66ae844db32d65df723e1c1a02c84f3d18a4ab1a00971a14cdea069ea79efd10c8b77bc97025333d2c100b09570abe466c2a278ba4f87b7b3c5187dec8cb399df1fe11d37817806999327034315803c076021826d8c949362cbb20a81794357a110a0fbc5faad6d060d5dd2fcff487d28ad8fb8f244a27b61e483d3ca0dbed712b39e17ca9cd73317413fe2281b8eec8d6a14cd5b597e22b00964d5500a69285fd98c00dd925c1f0a762e24178f2ff3446488a487f280826158ed191374befe531b48f96c86a39c540d6a2b83c6ddd1b19908c2e246c94b51974e35f3761656b55e673dc9b9dc7ce04f05280a3a5483dc90ba2fa01a02a6e2e994b46cb07f79ff02683549960922e00bfabac9b160a7570bcf2ccb32c66d8472c65e921ae7d58c63a52df390b417ea29f0dcf1c7abbb5ec71b09d87c05c410f01e46efb83b8410333dd5c63b0136d681df39696215b68459d54d369dbac2b4c6019823e37ed8f32f7c172148bcdc10e855fe527d6b34f0c3a533eeb00a3c7c1c5a46b2fd0336fb2451cadf7f0e2668c1b55a32ba24f8768994343973d8e336b705afc540eb0c5549f20bde6d009b70076208e37b23578533fbfb787eef32fe98a089441118914231cbd19c64a7e5178d512478df021330735568091f44d6c80bbcf3c4d59e40fc68c1a91fe4cb215b4ce68b84fc24ba07b4cd665b312142fc5bce15852bc5251d431c5d3eebca7777a773f6320b7102a8ec1dc0f1a56c0239f1227b2bc7b6b7dfc303f27c2107ba451d9ac7e81b9100cd65cbe27122de8f8a41a74abdb523096604d8b423568bc3f2d2d11198dee21ded67d455a51de5597229325ee12272611d74d4312d2137c9f79702b1e58f37977ba7903effbd3a424f62725b5c0306511a3f23d72bd465e06f6251f080731228816a9bbf074371116bfaaa57c2eb7861f1c6e33cbc1947e0d2e8a2c6d9d2b58c4e0dc218eb7d06edbb66f2f4fd6c661bf109a5527bf7bc6edb313d7a111782135157fa28f211837f2c2ffa5b46c26a17779d1d2bdab58c149a8b75558f190ac367d42480bd207cf6658cbe940af53853999e19b7ec5e0d66976b1e0d2bc600a42bb10a0d6972f2ad5277be68500752de8facfa4c0a7fafdfe4615818e9450205f75050a763cb10b357f6bb344e9c689bd8e12c14d66be02571443fea199389ec782be1a32953f813e73390688f1ceec355ebdd087777c1c95b189c1dab94073264a31b03567dc59f844c7c7d4cc0f8e797cf989ac4193da739e790a2d637ed4344a956ee947fb597c8e9aa49fb84e4104fd7b5888696fe2babea3793c4732c23c5ef1e99d6dce20a4894b82b4e6f23860b39b7caffc706fac20b1d9c639204a81dc67ff7ae9ff8a34d1d3300c4f24fa7935de5ead9e8914965831bc59b9ced3479f9a9cc61eb48d3aa534a66e0aff17adb5ef01cf1de31098d820ea1cc180939f2b82b24b88b1b537a923a474e7fb98d8e3e42ff04668452e5ae55014ab6c4d697a50cb59091bcaaebe0e33c025dd30dcac0a6abfc0f7c61e9ec0a9e30e28af4a69e6e832045392d81b1d81febee555510a89008c7247386f05ffa5bc959dc2bfab3a08d846cf9fee826ba642ec27a640350b386d826c52518f1d185b04231775f20a299242ca64c7832a0a48d80301bc3663900dd22c187fdbd594ca31a91680a8c4b1a7edddd4efc991e1cce8c0fe65213dda79cfeed87ad20b29d437e49d5568f3b2b48732ab64240f0cf21e1b12228953d18fc832dc7b65a28ff029ae491c52502648593419e3b172c41aeb857b63e0a9e00216766f5efb7c5b33bba4ace2f3b294f25a24221eaaecad64860516d7a104303b68e100a9185f8ca0ba6bc19d31824b8f5b212036adc79c8e1c5508c0e6a5a5130f542c88a9844e1b17579685bc8c6b81642bc7cb6f662108ecc0a068f6c20450775b354b6a28c7181930fee094fbb2921f656c1eccbf5e235612d444d8377289dbd5b7f23061a0216dfb99a00fc68797f71d351ed87af2a13becf71ddf992a7db0ddc08de67ce73008e69f117e580315fee9486aef731e5eb5cd2737fbd73c479657a8d79e6c923b9129ee438a6b83948190baa1e7e797de975c1480fb735cd099d080288043b3e55ad982fa1d514690f5529ab613f5ca32d4ee9d1347c02ae1dfa159a18e32e5da280ea4a0f595b2b2115d7fbd103a0209cef408c77255f6796d77a11ad3f97b60ab1546be4c849c0efcc25bdaf9a6a8aa204ac6a9a6aef9826aa572f597e7c7ef17bd782d629221b08f22ff65b934bde1244f912c4fb4c98268dfb85de2ff5053b0c1a7d2d622d48a6c48bcf1b075a762139ff21891ec842964738044fbe88f7e1b8ae245013b31947df7940b5864f34064dd551748ff3fee3e1a4fc0de0e7fc8ac9f804bc787a2c27fe306d4c9422dcc6eb8fbc5ba8efdada466e6c9c63309a3fe0d64556b633cec2dc79cc0f690e25a28737d72667fe28f871b9d85f173b52a412e6bd47e034e510e2401634fa829141eca23801c55b4e13b0733bf334f724f2395e9da935da8f42f290a18bf705787da27de69b3de5b69854f6c2fb587a54ee59a506d63dcbb42174ca8b95f4c5282341673339fcbbdf48e112440728e971f62685b7c23bcbfae12f22ec3efef56c03a32c0273c8b33cebd13e08e7ac45afdb3a5ddbe21cac4e2b08ed17c95701293d7d713e0ccf5108479b756da23161ceef189468073d539f9688037e573f94c874b720866b948a59c270049c06d0f63b0c2f61bdeb2c9e962f56a6f53d9b821948cc1b0632088eff9585e373089153fff388cd9ff7719a7ff5df12d91ee372dd540d2d8246b425355a82c20afa19d55d392f0e8823f3159ab9ef8c866f3c158dae0bd523672eaaa5124d05b5c198b61c4c110c59e98f92a069c9ecb4e8be7b78125081a7f5f5ac802eb86b7ef5cd581262e44bf9ccadde15ef509565295c70a81f79604f7e2990800067b2edcc37f8acc87ad352b888cde9b69cb43ad78b749ff4946d5b94691d96c2bd567de05ab6a16842f77fe7b7ac13fadaaab2f789e1194a55c8fda225394ec590f4f74754320cfc1b7b43bf7d7e0db2bea9202ca2395cc3609e6fda50b8278e15ba8f96b1a17f8b2b7f43f59d2e9bee5e5379c4ab80325ed7ca0769f7de9caadd462a702a11599d577917f47de8a5156a727e8a82d384ecc7bff0481b4d70cc702681579b12337c0feb84805ad3b0585d72073814a36bf79c6c6d25b045cf1f348418337cb806b6d9cc138ed97025057746856b39f3dcbb5c71575c863257a8bdfb386dcdaf9774f3dfa1dc418a5b27288386406b7eb8df5a9ebf742d2e9fe583cbd006c38e94186a695bdb05d34e959ac47692201f4d6c70bc8031e9e3638c70e29c33c53cef1101da9ab9dcd17f13accdddc3659f830e6a3170dff7519ca80e9781481f10531cac7606b733ace858c8013e2480580c30f13fb2112456d54bc0edfdc7896b1dcb223e43f5bf858aea356204d103c58821d772441addc6890266343a1ade4ad4be465e6ce01376f42c1d4b71bc8900ed52174e7db6aeccb36345be00ce969115a694884335abf3197d3e226de8288de2cc6320adf101214e05c01bb4e845ceeca117aa3f93c6cdc4a31464a5ccbc44be6b8d2f7f3545dbc1b71197e785284f5c0565ec10d3b77ed46caf23249d2426de5872a1375f1dd8b41c750909c73f9eaa068522fcd83643fe7710391af3b97f47f49f094c63a2c8ca9b9703fbd141a2e74ef837c11d25ca3bf615e42a4e340142fb985170c834d95c8bb70db41ac2970397aba01a10fa64f4c9138c9736dbee7b82860f66b79c75edbfcf678c2c7bdd91f4ac1e259e8a318b0b28a6c9e15a3ad38af0f078412e33329db89387bab274a7ea72b823b96d353ae858ea9e9ab9889090932c1ab955f0d9f14f1a1b2e3d0f05cbe8093820249284ffbf846c1913bc9a8724fd3bea5e3acb37daf5500386ceb1fdca0f967f3999e986f1e45e6dc45ed76e9bf3d928ba57a8d577a3f14de7d8acbade05e34022de381e26342ab9442951b5cef9a2973fe252fbd2f5ba5dd323fc09b824786a66373ac9d1247c5835658c391cb26f5255fd0cdff2f0750d09cac6ed667d36990c669b60d2250362574c17c96647f6ac1bba0d80e36cb71fb43671e3dc070b199129b47121f44310c2782140288e399607b6153ef58ccd394d9f9cc0772ac2959f3a5793f259b5fdde3522a185d04995020ddf3db5d1458f185cc76cf35457f237b440d53e359de4aa3efc9800da624860704317086c97a7803741cf63d5f044e4221f70190ea0c89643a707cf42110f75f0b07e269ee4e15cea46496f663c1692fc9334eae22a35de44d3db25e13ce59d7a8fa8f8037189bac5399dbcf235bdee26ff4e8a456fb86d1bb6d2736f7c4dd7bb53234cb2b6ae20555f24732848939d28bbc0de4b5cc29b4500ce0a9a3130c6ea3b9013b7f0fb676d4dc912241489b6a0f2a1ecbc297b046b7d106c638b42fdec29f3c63c2b0d178a7e579dc02c0e66f261a50a11fc50ea46205748953c432c1d0957204359186c1d1d8c06083c0ee13bb6f48d7093f64acd296f22230a427869ed70c703d7983d0a409cdc72b808b02285810f53b9004f71c368bf0340fcabfdf3f196a6cb58fde1e9ee13d5e47d292a7a0343df5caa5c18a4c982caede351dc0529ceee70c9af68ed85ec71112065ff421d4320501c8c63074b54a30af3c50437e2abb7be3bd724f82bc6181cb769afbf96f2e9d613e98a12249d06b9e23ee6b205497931ccf512e2d7ab213991b244660d12e4d3b18d27c4bbbf3ca8f1e270446a6e7789468bb63aa787c1f22938736b7d9dab41003a01601065320b744f9e1eb8274c07b3666736c78f58b89452da5b513f229af5294a40cd4a7cd06c83fadf0b3be2e4a52f5c6690e2ef78f257e5869ce6503724815f47070fcb2f2e7a1401ac0f4944043927adc28c63f012af55eeae27b6e16682f21ace976039645851f1a0fdbf22d7b1334af0a51a33d0ab8416d2984507f11ffb50cd92941c5322a6a18a7234ffb36120b4b1f9df4d70042fbc21a418befdb34712fc08887fd9350262a37c8536aac814a0e88faceee5380aae18f5cc9d5bdeea79911a058752a5cf112a08a90f5e49c5653d559bda2a6fca384e13f8a99c284a5f3788ebec0a91f8659f087744d5efb1beb3905a6bfa3a4c761ddcf4217ae66cfb82ee104e3226190f36e4a2be4f682e9347ad90a650e955356ce666247ffa897c01def36532802f7142ba16a3fa9d8f7ecd1effd2c3770cc6060d6ed3c14e47ba0a68413f1ce7d8f41afbcb1b97682ed45371ee3bd57f899d5bc55468de66c72cc03c5399f13122f6fbadf9eaed6959fc71d34107fd17165dbaeabee547a506a12bc1836688cc12ef8db66d96833a51a1f597549bc05cdb982450c8694067fc46983552344530d52fc1d4dc8ba9f0c26250e5a7f9e5055cbab6255c0297680304b9062820722f7542cbde76041d037d7c39d184bc3c02e0102def15ffc068afca4b70450d770d26c1bfb6bfc028f6e75addff1574df262e52fa8efc4b2f62811df91c79ef23f151198c74c61e122644d7db333a5742431c8a5d60526ce3d0e8ccaa1267b5f2c0804eae875ed3acc49986349317f457283991d4987f7d5b51108ad31bcda366571338daabb11d6b958119bb71b7b1b5af19c85b87df166303dd8708bd734c82fcc57a2ffa3ab831cdbcfb682e97c82516f6557a28cd70cf79fb23346f2a0b8255e23fd9ec75e6089863bd4d03076dd4bc890d25dae4e5877988fe5feb057d3b7f491c22f2894f21f07f34ac0992a8c7f3d82547d54d3353cc1e0e3dc9c00a5fd9749fbb19c24b9014fe11750e728325cc07d157718a4a5e6f0a1080959230e58d87a9526b14e029f01450ebf49bf4381bade773ea59089965d2f02c278e1cd73356b274eb35419225ae77d4295a50b1541d28a152c3d799f7d3ace1dc2866c0f609c0f205a79cc5400e799087a2f23ce3e2a4c83d9a36bf923eab4f642a62b512acde1e9a33f069dbfc1211805c9bdb348a97aaa9cb905b37bd3c33d8c854fec61790d96c33f753d4a9974907a60f25a4687203313b07b89e08e6443711ca6875fdb05d9a657fffc2a2b2662143fcc1d2b489b5a685827b231cdabe02fa86031c8a3e4a9d1867bed2c006ef816a347e56f9180b4fb286567f093daa70b5952065b41b45979acbb3808e2200828f803ed94c312b44f19f7175c085e563be7167cb8990859ca82e02e78700c141d8c01557a256aaab7a19b816577ba00e47ae2535e9783f5101d9c25f75ce5ef62ece5a56b22eec87c748285a1ab6eaf6b7d27191827de9fb5df85820319e6b270b5ca9bbda0ecd854cf95d5bccf41783f8f181aba3e423a27a9bcfc2afe83621882a3f1377f8634659637f0bcf55758ccbe78630b36b7a9c5323820276b76977ed8b702353fe3882a8d330bb57c88ebb3dceaf7649d069526126dff873173fbd9eeaa86837ed8eade1b7da9471cfcca47749046fdbf511a2b9263b6a6dd6e65303a1b2cc1eb31672906753e4f8fe8c37b07e36f029e3d45bbafd4bb0cdb561b8448ef991a37d6852434f0cca5c962b21f059577cf41391185d296a9aada4e11395d13d0259d8dd29fe43d3ec40691e67a8c23b3ad56a5e36805a6fcc5e014c02e65dd0dedc6ce35fee9452325d4ff664847a0999e8a79441256057befb9071cfca966f98c822e2764c02794b2fd17561559dc00a9b32bb5bea08d5ce1f56a22ceee22a467bf1675f48ea933e14793bb242aa5c384e4b03a1590f02d9d648cb96b500e43401e3c91fe4ea3c066a1322a91168af39773271c3d3e3afb5afcbb971addde7b6589523d55405fa58d327256c36b11b26398e4a3fe86d14fd4be31f4598c11757d655d0625f5d2125f2299f19199f06614cecdc8128229136c614317239973ca4c6c24bede92276cc531388803321cad5a2ba98f4a373a14d441e0131bbc1c00f66ba71433676a19ab1d845dd3164db4c877859da9064d4dbdb1a7d0f4e125415bcc983bff49e9ba318922e68cad4d8803b5f999ca1aab894135ce6c70829590f18e3d101f7d929adf27eb04521871777bb6c17e622f826bbbdc64bd6b526bbe8f358f72bc5b41ef3f7cf71dfe83018e440ef56703968417def4b81f8bed49f1f206a7882052fc77323c8e3cf063ad1f01e7c0be8589215a2db294020b128e40407df0d161e4ba9c2303329ff2af08403c4a6b3623feed5df5518432b63a3651afa868e1f30e29a214c5fa3e8516719ffaf2f5d3d1b698e809579ff13d3a9b76ebc15f12a9410be1692a90c6f8bb83bb173fd774db6a87757d265e7a80e52cb9b5e305ff055ab7cb2392dbf6cba0eb57f67ca3fa23583b59fa4e32c0c8a092ed716fee1a42f342ad1694f2e03ffa3945fd291987fc712f51ffb7c0074953723ac667d917f7eac5c5c9d1407c6a8bc3cc50394ea324dca67f69f6a1801cd00e33c02abf377f76ee8b4a50c251ecaee08d8904f72b70d848de2829d07cc3eff41acd5aa27eed3f2c63df8fe30a04b21855fb324d9af2ccf972f5d673b82ce7120f1b9aa221005615df3559195b25eef836bb363878c17b50fca9097753304be613ba0dc0660bcb8273df1aac8c5b7e85408bf07e55065bf3cd6d39af5320e9f7debdee053195ee17ad7ca4d9e7bc750cf174c6044675b95a580dbe46a5b91cd310c8ed863c8d6afe2750b774a21ca458dfe9839ca7ffd9ced3c3131638b16fe680666335371de0a84268f41ef105d8a3b574ca8d8c8182055184e11886ea265a5dfc4607d126c84ac3bb41417ed6286c59b4e0703fe1ed1d39db1547da7b6e11d9329cb31da79a5ca567a3169a972e17c5cbe039fe91691aa1bef5d27033bb129a4c5f6726ea57dd3d4b928006b29429492cd1693ec0b2587defff5cd13b22d197d5d00b85851d27083c5ce0f3f2fcb2c4039286e343179f806f601e6a52625a141a2441e75ddc7db9b3581d8b1be64afd032160d86196a891c059f428ff227466263900862768f7bac69164f16067cd15debedcc1dc96e5c1acf7dc28494916c2f410bdde1d2f97976340d5826e98e6c8cb5e3dbf97d81d12b9029cac91e14f359029b026b0ae72b1caeb16ddd9acb1ebb04f36a68ae8582eba7cdd64cc27bb8c8f7c9d8977aa322aeb80ad467db74132a9adc754e32e1d5fe899b8f67c8bd6286ddaea82461ee4f86bcc5a349dd432ed364d4fb209538981fe661656d536f74e56d72ac04c0f2a447742bc4cef2906770f19380d13932c69b6524f66cd664fb85f48421e125001d03202707230599fc7ff5bcaff7e13734d5799cacfe0dc119725572fb266ae7a0a9c1d65bfff7b9b81f05acf458a52154cf65f48213fd92c99daa6b822d0e8ce0d18cecf2fa03c67a04e44a383c434508eb19f11de8b5aff0c7a81bbca346a142435298737e1bd6672c3d69d54e0199a87c158a227f4157a3c636def720e808a3d99b55b116749b94efc9d95be18126ac6116cd34db55b7507926f0d7d4c6454516c9d059490380023b75ff5946b14019690bdbb4bb84c303da3fcdd4e51e96a9073553af4c265a7ebf662aa674f7d83a4add08b5d809753cd6f018c365dec3c9527f6104cb723d923a25ea291d1220722d242ff0a698a228666bb6911f13299e3ef7da0176a426581e7969f4284c7c84b05cab4dc2af7fb90d1807400f6dc54da1f6827a6f57acc3ffbbc27fa6eee4336007622b8fdbf727df36fd171e39028a70160cbe72e4590bdde63e92e3580103c1bcddcc22cf5c7d69409e97207b4eda20ab8ba397d78c49b7ad0e2e7fa79de5711aa066c65d9d1fefc2a1f47ca693ae9265a09184defa59a349a1565b537505a61202ee379884e4532bc5fb12b4be1bf67ec0f9439f52f2d7c88e567292833c8107ad01a4e1e01d1dcbe094003aaf3faa2b6e64501c11608f1d2e8505e891c3daea1c09a6dfd275417e0b90e8f586f1ebf13078145c7dbd80a14573fe55eb64b3064227811b17da5f32a17e306b95ab291a3b4d7db1ea9f23c92d142ae03da18eabdef683f9f457767987eed18420fced3033ec65e45028f659668dc78dc09bbb996d21c7dd7637ac9a96758cc12e4cc407c76c3a8ef672e69bef57e615d070a39feea598859d35b40fb06eccafde1dc0f130fe1680c71f49e21f79627b5b62c3614d3b8f0dd577a5cedd51baa4a769c527951810a5241ca5c6387e75ffc729a2903ad83440d7e36f37ad79079dd75631f2d2de9fadf0b2f9a13b7f33e7cb39a880a78dd7974490ba51feaac38e4a30bd2f6056d3fd944a08466fc7d80490defefbff7ae2f86654bab1936047a361575e6bc67fb7e8729fa46f351a374d74ff1ca21922ab6cf8367b6a6145b8a1dab00e380952b43ac41177e08128049a467727a329e39ea42a5bed050e5562f40b9b32b39500e1903277e632d38b569c451d5b7131193f9039c852589f0de410fcf9a40571e988ab7579a1b1fb4b17753b9618eee1c7474493efabdac0d6347b7a0d831e71b5e8bf6a21dc41133de14d0647c36f8426b28c2d7b99e859032dfab60fa592dc103f66c44bd26af6eb710e14b186a57daac405cb918e94d3c6c9e80d360a3eec284b99759f73a1101ea5d4823ddc7bf91096cdf72427879f75f554873101deadb5b94a63ac6014ab43a5b2494d9624e3e7508cbd6ecf22ec7bf904b5a7d495860bd721c105aa1d439678d2bc0af3fd1b6a23293d716d18645099b80a3fefbce1e4061133c38325d93ee9585d27f91ea4b1a922b3dbcf1aeee799472e89da37b8fc4d33fbbf2d49649a4147bfd0a07d4598c641b9de4da6ce75dc4e2e3b76e2f8fe2d2394ef5595b29db1f8f9435e41e60bf510613351be2820cfb5c5ca4178ffb77ef25752cd88f5af494b7cfa906bec296a94c7a090213d73c30c07a22777300c9059510c3a731b7fc40785e0f6dcb09bd71453c26d825f35c9676ac12ed4fc3cfd25e5cf978a5d9736104e7882cae7500c92cae957604b47ac73c4e831fc9bbfd3a5165499df8ddc4acb1cdd40a2a6353cbc3d81f58ec58ef4cf1c81e222277e42c4eea311c2e787cd490001c4e954aa0078bd0712c52d7e240bc888599666f044cca184ee42aa2e049c6b5e5ec2edd55c9aac09d4fbca964f02b3d2daf6eba36b2cdfb81e8aad8839457aa100db38c7db48ed1fd448592a1e5a6d203213248277ac73e61fce7fb86b7fbbaf254dc6ef06f6f2e07d3b24888df813ac7da66e90ccd6485a4bbab488a7415ea4b6309e6a812b949dc8559809255eb8cf803752bb3cc141958c97ce3626103df2bc263edac43c7ed40f3aa8112d7df13233122d791db1c9965f441afb82eb067d63ea97ee39a952e5875eb2204740763e8f42cc7b2b9f28e897403440129772e71a2b8c715496ba1b04e26acc9a0447ad7e3e05d20506d7874e7a3625098013da11f816b521d5b903dac6c165c7af81db00b03d5ac245aafaad594858a100ff621ceed17727c18715506c63fd4af783145258ef3773469de3c2427008f9a795010691451f3275c82125757254fcb51ffa64de3ac6bd5bf45988b625097cddb7df87e030af623afd83980372389c5ee411dc8b6d9f815329611c2a7b13674e9cda88216d8adaedd67621a0bb7286c17e2a2ae7732bebcc29c985c864e0283a587c612a9b8c1b10af1bce5aaa1b1fbb213c37b9107016a88810c7f796dbe528b9895d19f49d4727d1a9f4b0589bc7f94d9ae82b031f0fe678aa27330a6235cff8f24bb55feda74100505ebe520b6d8cec0f51f5bfbb6e6925539d13a12f254f31de18fc22d9dfcc4ef4eeafc461eb087b51d9102ba9236a54b63f0465a01757bf6853150d6a56f9cd82b262c0e82a459927c25af63491a3521a19db802fffdb5e7fb222d1a3d54ae2e36515508f92dc85675e431f2cd4e8cfef841a10698b412442d508fc787b440648ea978faeadb64c4a9fd8c8129f3749f180a95e37dd5454ab0548b244adc83da31a2cf4fe67e880e367581eb7489369232200c575e26feefdafbf5c826e516c8bbf2d425fb36db212e9601e9fd4ca3e6b0b1797eb4c6184cede09daac0015aa4e3c1147f7df01cfcb90377bda2c8750cc3819e819c2de88c70c814ebfe753efff2c459767290108b991932d0d05de7a43e4b3cb1c2f821847cf43175b0eeb9133947b9e8e56c409074dc44c49a43a41da145119ea79c57d92627f40254f90b39dcb20cea5440557e7d6934db40e8232e3cb4de16b594c9e29ee9d674b12d457c3beea35cf9abde412f03d6fb89247eb90481741fd1fc2d8bd1b91f5027e7b44ec4b9c23ca8fa68025ca6089634504f484f1e5f556ea6941ececab2bb7264ba07c509fd485778d12a888fb66dfd417c4f1a5b8827cc9c4832abde3152b4167e4d728f09dcbb916b81244a758be9d2260a955636186eebe4ef45e9c556d24e14831b13a90cbe64143e37fb43b95bb818898b93ed83d2561d6f2c249474b0e6a55b94e7eb6a97a16027fb846f0ddb6b95a8e1233e6b81867f4a08045def331e7174ea7c9bf0fff0450a6d19577de1988805e0b29a0ccdf831a1b0d72da0ab2961f0e6a18fa1b79ac52dfb4a5c9990c679577223e87cd77b2509a690887630f05cabddb82fa2c6afbaaaf5ddcf62368a79c38ea7d323753e94670289b48692b47c5c758812d3b74c2b2dfcf244c229ee9c676dd4b3d036b7219b21d04ed587480a10d0dcc267a755f9302ec6dbffebcba69ab21764f2d774dc97f35e7fe553f9258f2d93a3d37b90d6f574b79475043204ac4edbd79054f568f4aa9095fe3cebcfaa6649a0392c7f9ead9f8a9051b29a90194c4bdaa2300acc89cd7d135c00eba4a9a4a9a47e480c9bf7e22670228db388534bf78ec8f8abe2e13ee73910eb6892448722d67862405a92404808f154fab357e0b06b1b6cc4d4b27b111c08b08dad5842ce229e8939349eb11a33b79ef2449ed61a82f970a04d4e389303806b05d15151730b61b6358fabc783c4d9e3c302963e4ab16a4313313bb229174b0422991ea7108afb8f4a26f0a8c7956bd50d6d064c1af6661d13f188a94bfc2c694d4aee36c8f04fd52ad481593703aee9fec1de539efce972ef863f9fcfab79a5ac660e25123e14c7033b2192aabe51ff74b99b3a0c43444413fd10fa7c42b80dc7525db4546546e24d99a3df941ce64ca16bdd5f604a824edbdc5a587a21a747e2aa961703a52ede6ae78957cce419db94c7fdb4fa80bc455dbff9b37b798f394967156c118b96e7304df9900c186c2d23126411f6c2e16bd594a9c9c6796220600ce5f2ab5659ab791c9abca5ea191b6806681d108432e53c7878c705ac3e0b69a3249180d57fea3719d0edc712a554434d667c8398559665f0eae00a049a88e2d563584ac4b9c49ec1a89e1bff3ccd80e83e180cd4dff57d2dd16f9cf87ce679d3189166856602030b124a9024908a5e025bcbbe47e00739287a363ee3066fb61dadae889a23d1afd69e3065a765ad57942bbef79229e28a8082bda09967aac2d51dfadaf22d3b955c297da07d58fd45c87e80688b3653b1c9fc3900a6567e62b8e14a0617e8ec76869c4987bc5d7fb6aa579c9b31a7984b0f9c122d77429cbaeecd37fa9574c7fbb580b83d5dda49281514295edb9d154ce9c7adf69171cd4fe3510f7081021538b5d74f60e1b4702b9993b0e8f00cee97ca342053864f9637590b85a01c4a496f8a8faff452ddfadb147a3b693c2893836e696b4b529f3387e0763b594773b823709528a73ae6023376cb21a1838d9d0180bb27a0dabf11a09b7e98702ae412a855707a93eab6a8d87f7072b08ce429d129ae1dd7e1f7b6afeb8ea247ce6c233629882e5b091b16ac6c42869a0418f7fce0eac90a449970c1b9cb4cce34c75389d49bb8eb706ae57182fde5b527809b10ad3c446248cc829bf43ec0bd39c0145884ec7c90e61a7f37dd300cfd95bef5ae870fbbe1dd7450e5c3b8790f88c9927df1a67a0dfe4e89990b1cd4d89e21ac4c556309ee4d7971279271f8a3e08e8e817140efc7169e28a155eab930c89a9a234b6fc030aaf3cdd7ece3e19910ff040de42ed10dd487853975eb7e4d63802254a659f39a59cf6d779100c600f04c1c8cb3da5f554a00250b5314594a418713aab60eee3d1f15a932360490e947dbc9dd149247909327bedec31c70cec677bd316a9bcc70e9d7cd8e57143a444d7a1faff52e6004f595b19c908167f652b0b974327e836a782d0799294abf627a20d4eced50d407271cc1ea6498138702015558e27cd872f52fa6a59f7c789e7c04ddba26259f18f87cadf721ed4aa0043ef014fa840c4eb5f55557b5e79c2135f4a075fbb8f95efa20e73701f84213195c86daf7d6a9dcab1472d93c78eb13e3743c6f84779dacef8666af3f4f510e433be4f4e5cabcfd80312fc96c0e409c9fb0525e9f394dc26bf1ddf8e2f6ce8b38b4829ea337644524e0477ea930e741ce42248375db3f3bef7381f847b7c49abe185d86872a99bb44b48a20fe66c01eca9aa66636fd5a634076c8074c171ebc2cc8c261dd58842c81de863cf845a9d0a784973d17a422033f971c8eaea5f1cce194b4e42d8ac5a4428a27e62af23dd28d8a34d719f1098076c8b88e57551e1e5015a12b8ffd497d395b0297739968366db8b6a4d97a63895f9a1b7fc8ac4ddf0393fd1d255033e97488e9361c669d60fca087425744439a4cf657665b3017d6e4cef687cafb85fcf3dc420f878329f048fa0f3dfb2904c307db391112edb116bd2fb2f4737c12f04e4fbfd15f60c65c673c92c9ae250020542745070c7e4ec3928a13ac48a4911bc1418615dda362f367009288e69ccf984283c0c1af9089801063231eb96b687d7f05d52190e3232bb7c1757cc102500cd7ff8ed30166fe0f5cb7f8f7047320d0f6d779584b196f2113b91479dcce023cf0f062a3d7f419c2d985577d2b45c2f571f85ae0b6cdf95dae65dcf1fa7f19c8f302ce597553861de04d123e5527164f0d8a973ee267c2bd49f7196b96dfa76228c9a0a8664849a0cf517192fb87c240b348cd8e31d94e4befdcafb172db4a9554da361537d8a2f4298be48a1e4ecd5b70d5e554a86fcaa0997cbd28579b25b2a9f4c584d78c865bac071c2c1c9a59ad377bfc8a4371d56cd51f1105e867de97c1251769eacb1c887f4f12080f20398ab4dc3baecc9baf43f2c1a8e65ae41838a5aedf08a9ee93267ddb1737c2a92876a177a4f3322585068a24be4207a1c8953f13f0e1c9d07156ab3f71770cf17e39280b3aaead2bae4a780e11ece8ad9c427255d241a90be0a6730787580f08326a1d74f2d8f004da4ec4ee7ece67d5d649c44c8045f9b13775b08a2c74eacaf6323cd85aa8bb3e0f7f0d2b8b43e46614f3f8d185047bbd1c9a21309f64293dbb6bf6ca6b93cd5c3833e631504106df91e0f309f980d106466e51ab6949843e6917f68ea19dffa1471ab051b529baafe93dade3c127b55697bbf86e7b1840fbf8353129508640738c5f689453f5b8e067385e5eb211d1c4225e9ff6bbf5bb9669f9550a22dcdf8fffc1cde84b401c5f8cdf8143d34ac5b6ecd567bda5d4c0770f8887ff0bab8effd2b4c141172b8581ff1aeff5b2e8cbae4f1fc6cf75cd1772eacc96caef2e9cfc027fe0491ab34611a7e7d6288c8f12c6b72b3b6937eac56d8b40f4e8210f9f476e588e25d93d1e01b780b291535bff6dae67aedeeee19e68829d3ded13bbdb8e88bb873c0705c2aa2414d323a27bb41deddacec02a9a886bea6da8064be0436792095e22a6ff85ca854fb9a76a2eb305dca8ce8daee3bcfbe5c6c3847672de7ff4849102742c0db3f017d2b585acf254c1187f757b8e79557cf39f54b5d55d868efa3ef20bd59c0e125855bfbb5f668f9c4e2bcb44977540c08db3ebfa89fc1957abcad06ca8ac1deec236f210b82e68546357f8ed4d1f57b592625ea463b72aa70782060343144b4e2652b645ac474aa74d5881498ee099f9f80cd15aca0b9d642751e4e8aedf934743ff4e148c94bfdb1d0bf48f0dc1eff23b7d94e370bdbd6502904a6c4cad4862edff3edcc9859a2c467fe5039388a51be6d9715b889283b1c1e366beb2d368981cb56cb498d0125a8a5df1924de6a61cbdad84e6019cd7cf4e86e46d8667ffd7869ace41e0c6a76149e14c57b9f6a813ae67f4510128bac3c8b8d9b0d3a9ed7e9a49e542ce4355c8ee39cabb46d0c02f127c761046d6be841758fcd32e40e59ccb7e8c47208bc1d6f7d999dd38874ac2e4385570ed339b614d6076da3ebf3a376de0209c1b0ecd7b1e1bf58c70db21faf40c67596670925316c3494856bce85e80cd0d331ffc27575ed672f4977c2a59e7f5dfe5ed2e17e87a7542f0704bd0d91d410d034b28ed49a86ea4b03ab4a9213414e1cc7f6dd81ad29adbcc6a4896c864a2a3f45a5e85c75a19f4dba97b6032342817b1c691e9e335f2856bb259c57437debf9d37ea7a18329d0ca549a9b728d99504b1587a3c2c19ee80a2348e668b524b4c3534d3232b8a285770abe96846eb96130e78e10615738a8679ab906b3473d46b56fa02698f8edc42e4389d8d6dcae41d126fa74d5a188bd5c114b5cd5d24188bc2ceeae847c9b07d8a6ee263c6b0f7cdd4bbc2d4bcc9c50f801c5e432a1dba04596b4bc63a2d3bf2d060558a1e6fc7377f6007f8e5071e45e4ea8f54625a7f06d419c7c3f7373aea95f638ef68984afa55fe636017ebfcab0a1a76a7a01155283f3d4f67735778f31af94285bcfe9c73278e11e16e4e90cdf43617b6d8489de2f02b71ea0a4c4ff01ba6794ffbecc80714229644ea4a8424ab37251f68b3c117c500e11dc4e93205c03d4affb9ddf20a987a441b7d375fda1d5a401fe22b02cb804568a736d3a0dcc5f362ef1bb3be8b35d493bcf50b442017bf27d93f8a41144b4041694e0c6c6349e3c1b8c8d5ee33f3a3ba34d2b86fdb8b94695354b350de221a4ad276349707c932341449c8fc37d9080686d15724b800c997dd62d8bf4128fc06ccaf7242351cc730364e151661246f8dd1b3c074a00fc0e61fad7ef9306790063bf717ece33cf573f550a242e9dea1383118642444beac05e8a268718bb64151f6c6ae12893fdc74a022b1cac1c09bcf4fc3baa6edf9f02e13f4ab20d623f8b537140dfe2dc0f3e3e02e58c8be359b393332692a7b2b0930d8bec285772240e77204c9f0e58572e29b4ad8bdbe5c64c7056af2ad9ea1691403039bd1a04ba17529b8dffee99a26a1c61da9567a2f97a14b7966bb99f4d9b52a4956c9257383c8373d21331adcbfc10bbc44cfc64a86bd6982de565fd852f6e361548fee59bcdd7a0b9729647148bab93887756669a22056d623ef55f2b6aa776fd5fb3a49192888f59de2d449b2beae59702e8bf8e6a84496fae1009e3bf2393bb2f5bbaa8371a8bff2c579bc785145e51fb1ec94c037dc9a070b101ea1255cc81e3ca811da73fa995ec824eb185f0fe9180d19e6a4de99072dae498c588e37bc365949d71d6eeb35a216675eb6b283c63f68ab2b876561aa2ca6165ec82b81b8f357fde2228699dde2b7aa58de67e893c985c64fddbbf76b72a119f3cc4750b1592da1f738d0df536997ea4e6e9d0e112854eae23535620d3dd6475c0beb919499fbba5a12a1faaf87c92a636fdb742ab306f38a96bd29fc1e074e79440fda94d6b04717532c5914bed217b93d48e5f3fb60ec6141b8d9ed40d80867c37ff8c45798105499a2619fa3a1823f3882e770874b01f7ccb3865c2c21608aa968fbcbe85acc3ecae46829d173c3afd092c86fac338ef9330139c25ffcda8a5a2128029ed17da416e8c5ddc20e8308b33c327780cc534b0391d4ddc3a1de5720bfb0e579a42f805f813b0daff0e966d9523cf3f66d0c5ae8d62448c38de9094e07d81ee260f4c32e57b94dd3de5436168e2a1187be5c6116fa2dbb17d9abb18834a3b14e09126a738cf853f2c49d2246c499b149cb82d1db8d269ef5de84af25d1d346629bd0ce0db85b3a8174347c921934f6d2730b733f36a5b2b5d84d74b02bd3b22d0718ba91675c1ad8dc1f6e993df74dcb6745f686276683f242e6049c3918af37a62a4a443c2c13e0e8edfaa428f89cf7a1d5cce207cd722ac5ab3c99ee53f7cae70971cbfaf9b844ce677a41c424f8ead78d3016e12e4519dd02ebfad40c6622cc9de1f081f35fc20e57659436566c48a8506fcd301e8fe931f2a0d8886c2ef4344becf6849a1931323980dcd15125741931576cfaefb23ab650c074be72abf3b2e00ffcfa687f73f28450704bf13cb00a6e35f578c900dbb7db41796c13164d9ce8ac97836d9367b3a933c926245f40ff9b26094173711ba06bab883a3c8e16279576e4efc8067357c5cb07f74cc5c631e0024b1657a087cf61feee47dd31bcdd10e8028d9e879ecf59a8f9e6f928cee331f37aa8ddd0c52b59f498ca7c0631da818777c3be24c3c23c1e72013ae383766bfefa5db52c709b564ece5cc7bfb3b4ba50445fea3395e82bab1f7be7293bc72e17ac98cb5c2634c51c64c34668076c42683c857fe9018d09c31946a7d35f060e0ea517c0c99b756f168325e2bd398b011cf3330c0435826e3ee8540ea623b651f04c04ae05774b754c625fe77cd45b5e6a575843e740e5e4088dabead6ac31d2d04d720182f47d40a4ce099a871e6addec9b5e7401d9091938f92c14f078cc90eced81bd5dbed41dd52e8ed0abfa5ac35010f503b3c5aa2a060a9b9299891e94ca7fe41fd863d482fb975926fd1c03fbf9e9e2dd4a09f6209ce01c0499e2e53a3c58309396a935dd0992285015795de2b6a397882920795077fd0c78734dc41849c508d70b04d51d9b6dd48b18ff833456454f06c73ace6a9065a1ef1ea164d6d3917dd2d8e47bb4e0bccf408a802508a7ba2d2c23474437fd82cebc13fed8243e4fc8bb909cff68578ac10469d049573cc30e9713f18c08516f15789387927a2218d8d81f2cdb7d1fcc647e94be5b4c933bf2a750922a9a5a3d3cf6f9f7f3438b04cc3ee43d29834719fd9980a65046770a2a3310ce924bef7b68c9fb131d9423fc53b52b622d361b09c10e4ae8250b1af4a065a77f94114ce4c56f9c5cf0c92e7f8f189810f77325b9110c66846d1953a5af87d0c97b8ac8ef63fc101f4ddcdaa76b176c835f8fdf5849893e39a96be9eabf549743a71fc919cb4fbce2b9fede991414b9bdbf95440e74f49ec415a9076d5a7215102f0a3c7ec9a8bd8d8227116cbc9d969c5ce579ce197dbbfbf973b76fd1e536661f6f1b8222dc198f9be6bc7fb32485e33ea45cee03f47885a007aae5ac43432274a2ff0485dcaa896b687c78a194a39c6c93c7b601bcbb514718f753bdc3c63daf5cf242e8dedd15f3d16c50adf3a0391b4288a27f47cff9ecbaffe913f93987ac912eecbfb2da0c97b086bedc9c9f46d7c9442458b3d01e5275772c02ada2b8abb809c516068271bbef68de48b18cedf799fcc30bc1b3bbf7779be7a95d259bf28dc379ef61b6737c38323f0e823b7b2349a38d9517f0515a5f08ce8a6355c7ce75bda3b0b085b0656877314c88dedfecac5e2a59d0234d54691eb72ef00e5951b077b152a33ed1525cb5e5885f6f62c304bb3450ea58374fc7131aac23929fea41075684a925ac4d499a1941661a73d408c200b8eedf657ed135b0ec21ca3504b5a9f594a71fc4a6adb04daf3e190c14b6c44315c3060b37309018808c24d6ae31017534225f052f0dcfa09d21c91817c06c14c83505b0900ca2dffa9801be68ae41bbdc5e535712a212a5c0e77d68899a50830ef699e99bdff024eca4c73d9ccd2df73c7c2a694aeb453046516546b4d6e5d07544286091dce804c9e8885d0ae23e11a2f940eebbb380583ff772fa0ac9d3003ac791825a2fca0c7d0679e45d83b5926cbd3109432dcb1461344616bb5f5b0e45badea126bf6006d3d6837170bfead02a00771b6086b9f4507242facf7e87b167448be58f39f70403376666c3d1490378788142d8bbe96fbd816adb2f9e5826b0d6896036ec5a58d6cc573df69e3e66443ad595cd612f65b32fbe98039c4c3da627bffa0e7c5db588a5a776fc3bc6717339b0b0bf0571c2c7eca05af7b1f30cabaaf65fcac1fdf15b32747e7a9a94aac615527e2a17debebeea803484df90e38141dd666e142f46ba045cf39b691abf503596e1ed2aa7587ba89abe791be02628913c763c73c1a2ac6b0a3140e9d5dc059cad9d5634dcc914c18578346e6bf93aad345dae5f2c4a4694b3817d570c1156c91777a07458a5c2c2749cebd1a7824ccf6a9f4984a38bdd33af896d2569498e97d0f8b111935664b25dc69e1c5160a104e185d18e9aa8fccfcc04aa939f1b1b1998992a404faeaec6ad597390e7b66ac30794d661b4af2eff6cfddcd3017dfdf9a7f23743c2a9f1b187b13d0e809b7e9157ede19012a0b86581fabecbfc7ee653df885da9960a149a2df0710289b85f0158cccb1ae744bba96ae3c80eb580df540654aa40ad13720472374f703b43e5c29f49d25437d5d5e99eea55bdefe20fe934e81d225d043c9c40f0f58145b341d6e9743c12fc619435452248a6a1ef8c2a4883a55dc3f79e10712f981e2ed437a1289658348fcdf8c2a53746717ff17a5d5a2bc36802afbb2bb8dc14ca6020120ab7f445fa45ddaf3498cfe7751b0b6bbf2bb4846e7a712f942cefb9ae2da744729b6a71a1bb5b13437fed409bc8c5f47ed38dbe94dc71f1dcee270d2da661748a2e8d3b4c16861c5ae8bca9d355f4181402fb31a34ba42889a7c1d0f2106abb8b895f6a3fd885aab5cba17811b2a6e261dd4f2d3a76b318f2e5de18b9666848212750c5cbf28ed02018f25d07a1013bbacd565056c3dac708db3c535b609f191176a7ff3631e723b49c1ad70cc41fd8560645b362ef57d6e0ff524c5035c522e8b36d2affc59c5c4b5e059e718b494b69168792b45231f53d37d9cf2cba8d30a7209ca2bf4bf310234de0f5b96324c2f5acf52ed8b6b9a4699c80f9bdf9692013af921b24a9d2d791ddd23a63069194aed53913c70999f04b2f17a8877d3985e113d761b3390bcd8da92016ebc71ab3b340f756bd9801441e89ad98cdcf3fa9760ca1f098d08443949aff1f842d11a3d92ca31e7bad7b3f2215c57e2a3c33825cfc8712afafec60a3107abba5df1efa8d42245b9b47a7efbe6885c72de70b15a7f52ad70dd837e1d769a007051ab6737d29de6398b13e453a256fc58946a726776903c183fdd377a6a0dfdff0a9af39f25e07f9f7099804354e6d29a678afda74d3686be2c715ecd07dfbcb7561c96968b8c6123963aa98877a219789b74f76992468475857675c8c3fca19ea70a8e84f1e1a07cd6b4cb7b2e9aeeb197118a24b1e06acc2510f69fb6c4aa61dba8760722089e5020a182d3837f8487f182b19b14cde23d7caf3de80cfd833c4c6dac51f26d145e60cb080ab7344717ce6390b82d03c240c177d5ab47ee60d68d8d7dea4cb850298decdb038341bc2327dc6a8cfe4003102fb275ab71aecda92d3e7d3f13035598f7b875c23eda163d5677c24d4c2f90b55df62b55b397c00e20b3c59aa2003a74a52cc8ae70e63ac37ac1b3e0f38a3f62055222fd009b3d03b0c9b24c6c3db42384c3507ca0b9babbe1a22bd632f6b4be1042b442dcd45d6f0e5fbd6a112c34ffc56d4b68deb748d3813f40efc55c8766e2721b7931054255111a1fcc87fb1a9d175b1024659a699a193e07fe2134ef98358b7833486e370cb1eb46304c5c9424e95238ea61c9fdaa62c2bb8bea6483aeb139c9d78fc8fa824dd56abf00745c92c28fa249983c35b174a4debbea6f9c5ca424b071ce7d8d06bf542766908cf2e5bd0c15b459b8f628bd09c1d005bac9c3d65c4d4e51ca2609a312c4162460ed093566658f49bb42d1e9a7e64dc9b3e548d19615c4fa70a5c94d9e49e6a01794f6c4241a35602df4c24009851d36254cd7a053f9d36d6102a2f366cbe60f65192b74fe8ef651e3c7d20ab509c051e487ad0e679a858ec04b9b5b00d87f883611379c9d17e1bc06ade9527fb6693033ce0eb0f2701ce953d995c418ba30bceab606b1d46e65604d5c7b04384d0ea95dc373c1c3b6eb52f5400265830170cfe2da7ab4e396485bbc3df100a05820f26390f9fbb0749b7b9e7c9f3d53f4f5618d76c642ce6b7bcc77457e871be0d475af59fcb9171c2df2c3a3cccc398ec670e4f270cebe91d6659125a3edb78739721a5f0ef7d589fe27239bd9cc075e104892c6ae86d698621202801aa142b6676df8165261c698a14d2d8fc756dd198ab8cc6f41a23b5a72a422b99ea58aef1631605f79f9018e10947d915ab595bf3b951f769a05afc0ff3017193c91d8afd7d675e3e5011ed49123fcc7d2a22d1d8096a0a6a81fce4696f93784085afb12da495884f2b27f21d65695cc2677c81b1d5c6e8c39a03d7aed047468127fed7c638f4feff72e9f221210168b7886df0efd2749ad8da83d244af85895b77fdb4e9903ce338f3f551797b0fc0019f05f6ca106e7e4594be67e24275b267dc1da912f79b9e66cf326b5b7ed5ccf570b405de4b0d1cfcb44c77510a6b870ea6a145a2478b481154c46b8b38b532ffb0248a0ff078f16f0087f626dcf81b12f7bf4413a3ff16db6d9853e46671f0f6745053e85cee2f3e76ad76a1a7cdabcfc0244dc560cf0f51bcfd357ec8d9f5ca6fef23e0cc903421ecb7951da57ad19c56c5aca9da0d13a27984b37346d3fec515d8439fc1edfd0530cdbc35ef983dbe34901f8f38591e2bfb20026f811e3872e428d3824d6917c5ad9f8d7a7d335c7abf78d72179f1ce46dc54d046c56f28118616bff693ff380a1fa1660306df471cbab4f05c64a2f3b4453ab333fe5720753f91c0139e38b6187f7e84f8185765a53a82211e2caa00f945b972185ace20dc3fcb7ec4868e95797b0605661e066618f08a69a4cefb45cd587dae2a1fa77b9943a68cd0e1dd8f00ef2e773ae61df671d57f1d6c6ebccfc4484154867d363668579958bf81c1def3c1b73d1f090f56a436710021adb4b03df62f03e9acf91f047880c2e99d8ca6307a0b1565ae42447fae5746589c6d49d97498d96f5a93d042a9af90664c96848f1b37195640f42e3b6e7366a44c5011de54d3bdad0758d521fad17cc69ea6cacfb1ab95cd867d20d4fe4fbbd2988af45d438c4ea813b6f649a459ecf6a663baf0f9cf1d8f5d26d4f6012e7c1e17ef9a7c5be58e6fd7509c711a632befcd23bf3abdea5e769b19410ba13896650347cb91395677277d1018d53d3f153e6a0a416c61f35e76b2fa80a66651aca9feded9f1902947f86bfcbab4a15e5eddf796cc3ce3db15d8d10eaa605e3e0ee7b399f377d8df79a854de0a2025942c1a61430c19de673bc0e588901d066e752fc213c47fec1a0dc0dce3e95c0797652dda984cd0a9b22fc52ef737c66b78084ce04e805b7f1db6600fc416c0c8dac7a76a88d77639acf2e21b3d17b72da6630bac8e4f487f9e280de0dc804aa4d797389c654e89d39d325c7b9b16057101d2c813b77a5de8fadae78f27f30dbcbc73a981cd0f9ca8f7bfa4f948f5ba8522ad3b986d67f3bdabd8504f46ecde488e837bdca23ee68400e711bdce3d74be56118dd06ce4f2eaf7b8ee7d34470d5800f66fb04d4853de991e506cc6ac62bd556e3bab1df5e04bcb2ecf54867ee02db69097af3e57ec5aaa9616ce0567df8138d9aed26e09431dd4bbfe82929c4369279810ecc9541515b060b0dc69772c0d92a62bd24e950d4e654cb9cc68530533cc951a80ccfd81dd0d889d7b8554cc9bff0e36e2f01c0c4eff4339e480c80d46405256ed9009f27379ca101a445f8fd7472a79dbf01a0c98d675c63d70adef9bbd360dab50518877629dc4dd3d66bd89ab2a0af5bb446b6d552b74cf6f5b301b003a98cf39e32ac90ba89bb1e0a9cd7ce6bcf17d1c9f167cf30ab764acbd865f74bb1b098b74b3a47a49a6210459aa6e4112ab364691db7e37bcdce8342d6a911a7529f9ccf19154374a1cc377d2fc33b3acb1094d0d740ad3234f535652091de18a6ec6998114febf19205486c7c02569ddac73d35ca9bab9303e3bde2147e344711f3f2a85e5ba174532b37d99d217cbba3c40315e64d12dc1e04208c896521bed789dbe224fad1cd2798562ca945e9085de4801aafae1541dcb56efa5eb6a044af1f7e4801dd7039baeea4600cb154007398ed6fa26a7bb0d4ddebac9bcd01aa30e680f5970aa280b85db804fd60714aa619a348bd7a5b123d7ac8a03cceab163de5dcbdc8b01be96a6bf32005d5b848f8c75874fabf715150ff793ed2777151672b1c25049694d7437f87e376a6840d98dc332232997fde6cf5e9ee5f1f39869c2c943984cf64a33d42059d3ee3bc43f3b675df95030c992f3c1a61236bc3e67d0a735fefca3829343495ff09adbadad6a5eebb1bc0f55c9c3fba29bdaeb8d419a118eded02cdf25c9f0860c9a5195844cb60126c87b0fcf733e693ca409e8c37da663865188f2b558fc53401890feb42229e1ba7afff45e0512577b2c56eeee21299340f728446643a6c6b1b90f0389a91c5beb792f66aea1857642545c41bf1d34e7fcd30630af4bae95b18ca88dcb48915349e95389484d4acc67579570f7ad23586b41ced802c238c96a6a92c4e2b07e55de8375affc14c8e7fd87415e64467d7540c32603ebc78a9d642b29c8e9f840967ebd60cf071c10aafed6cb60a7c66ed6db5d4237f73d9fd1d9d42525f3e8e48746e03e095bfc6980915fde673d9ca7929821acb71452aeb4f6b4cc106fbff6fcfadbb9bcc93e22538d95fd5733ed1270bf0433ae04329de48e5a4da002eec1b88f8f76dc2c6b526cb00773384e085ec62d1d133211b13440894c1af375ec472cab81026b5979c5b1ab8d0259951b5b25fccadb75d8a87478151de1d86e492a2aba1e050b3bcfb06088d4f621f3438a7f9376e9ba4e4e2a750496f0898cc07156f19f1304d773810736b572816ad7113cf1880bda75eccfeee81b9d6c59309bca3fd2de503576261de3221f37f603e1449fa4444246eb70b93f67f626f37dce8b4b432c513ad8ed6b48917655b946b970ee66277dc4dacadb0159018bda5a54702af9d79656a3f678bf520ec57ef9018925c7c532e6699ebf0a3e436b7092d35c78884a0c66a5725074a31256616067a5d9a25aa185fd20b1032816e021941ca1723adcc4b83edf7e672d6fcc39f137936f353c2a4508524ed8b45f85f8dc24cb087d867a959024d5e907725c474ba9924b0a810b4518708788e606e5623b70bfd6123a23e2844c00db7ecd2e21665b2a2848ba9a47c17b7101f72fc931fab7923a98dddafda1312ce61cda922e2ec6bd1e6b6810cea5d374d2df70952d9bae907c4728219c4cd33f9e198aec6faa7aa2c3192581b13ef059d18675d54789a78a79194dbb757d55639c2be46f52cb126e8cab7aa6883b510c549a1913f675dc8b85411adddf97950b78a81a7b8ebd96129838487aa624d43092b0550b239749c5c80e7cdb0ef59e430bdff8c30d938b6e6cf37e96a88cf27a647ac03a77673956e47e614db6270abda51856ef1c60f894f50ca2c14202cbed7ed322872e9605adb7456ab5876889becd4a8ec3c30a1c444328f39c7d40935f4cc4e4deac95ba3c7972804a913db776e4f73bfcd6f0da56ce986c2cc98e3f8455ad998513492ce9ab4e07bfc7c8f0ccb38583dddaf46507cf0ec1d3f3682ba2480900714648d36a00de0b577e19d8f05b7f83a9a54033ef629204dd8fa9ca0850c62a8ed9e26ebe60d9fc9b65e00ab7099af4b2f979adff54a9fe42bf7e3952f955367b0f67fc305effe0716a3d5b10ebd163297750e9fbc7562dd4ce3a2029a1588fe58b13f17f02ec09fae0a4e6424063c44622488c2e19e3371bcb74e6a9ae302f3d845fefb7b54e8fe15ab313ffff30966af65c2f2606d12eedb29c923b33eecef01b36ee13287eb97b374f3e855565cfea6b508a2cc009f8f73f32260319717ba2d1d8e0a481214c2bc895bc9e9b2818dc39485a3ed55fe22e1364b6cac9300e45e1b310277a277d44c9a6196e8c0d9594f91716f622e2a3943d0955d97996089b85029b87ab1d28e731afa669675a77fee0c046655e9c0aa747562f43aa046fabdaaebd17adb75146a38b68015720b231c9a71e9c5e2b777313030cc20a27dbf9e9d1885323915a99aa618d55fa6b82ba5c92529441a930078312c5bf6ce2c6b363c4f6e3000558af81cc6cf6b4ea493d9228e96a85982e6001d9a9ef8e65f6c9d5f782738f1a7aa4b808d41bc4de03c2d8de64c9288f92fe4a86bec7b2bdaf4942de587ed40794ff3472d7add7a9e979648de03b53f0417c01e28199831a2f197c309cad78cff9ff5db17237e717a8f43c4042a907377775b8c3aaa61702fcc53806f1ec82a6df0d39ebfdc838bfe0c1fc98cca07b7df6e35d599664e33d968b5f0942b6ca0d21d083febf30a407578e25550bc8a7f904f72824f852049f76d755bdd83ed90183bc84e0d08040f8131e50e9d7449294da828738da74598996270157d1505458eddd1fa7c47fbf72516d5d76610e047fb57b8fb1005789af6b505b082d5904cb16c224ce19633caf66d1d95586afa15d8cd36dc66e530adcc5d8b2abf92cfaa43d8cacca80ee1e93c39103ed9a56d1c50f2057729f8677cae4c1ce1467040f2db3a6af445dcc8004a1c0b5a32ed23042dac7aacf7f02e6ac997c62d0a78fbb6b5125bf1499a52efdc2015769a80647b8a625e442da43fd58a93c2a8e47b73cc46e1fa4c30ed173b2a1acd67ebe7d171bf51fc5a3bfa25762c3b2491b73ad51090f1a0e5bc0e6e2925041cf0ab0d2e2e063261652edd0c4d6aeae7f84b6727d0dac0f4c507db5fb87337f383d8589a06c03b86cda26df5d22d3e1f09e2a3df4412b83915170212cbbd167e96f8678dbfaa762bfaccf84bd7f5262522404132a8cee34ccd98df5e718f7a1b0d63f4af11862e9038ea64c528b9329ee0a40e1dddb867ec7742968489bbf3df3d37584b66d388c5db866e39060be3fe8cea53ddfe14db72817a0c5ce5399e9b6ac551d10b33d5ac945332c91ce45a4afa007cfa118eff4e0dad550c0ef1b3d88a42866f23ed25b061b9c82803aff120a7a1e9f4a6a7acae8ab002aaf597fe24da662c1018f8abd7ead0052268b439e12009b47c095f542dd75bb5808dcc61e9ef1dad3d00328bf69e1a4c4ae9dfd8914dff773ecd33e0eb89e77cedb111bbcffc4bafe26fbfc7dc7200fa3f1972320abeb0e32455f8b57e3a8de03ec3abe50f4c1572e7ce2499e1278c0ce5dc4535b3459e61dabbbd135260a66d4c91b308cae25eafc4b3446481477481f9816d465733ae274e3d55e1085b310c60879b7917ab486af584f10bd99035ac14381a59eb136e9585ca12fe8a68c37b6f4920e2e0f80b88c1825897d1a532a97c1ecdade1105642f556f5d0221c7b598b22660062fbc5f2ab019a4f933230edfb3dc09f9eb9561b25f555d3651750d669b6fca34ade5af3ad17f90f575f7d7d4aa49ce2d9de4c834bc8d82c503a19a8f2239193ec6821cf3a0d1bd2764a5b421889877f097ade4a4c98ae51889f52d4a90ba3ca294fa221de2358c72807a62660a548e1dac6e0374339090b8556c25f06e3976d6bbc783c5c7a40769c0725bff232cbcb29d8c973ea97c290aa995850eace56316670c1d8349643ea5273942ecb110c4ef7ca9dec64e06c661b22afa8366598015a5366903af2bcbf023ca0fb4d58ca8c8b128382c19a907ff6341e2438f47c7afb3dd0a572a73ae2d29441fa119355392bd122c3149fded73ed678c206dafdb73e667e095dc036601ffc7ca3652ae0bc1a7b08b9e8ddbf82d5781562c08f9e66b361b7639c831300c3609872e7004509d1692f11e9fa0d4e5d116fbea6bb4a1ead41607ce7760394fe9e8b10f934583e7e44a21f1a1305ffbfcd6cc2f8fea9c102783587a8ad0a37acc7041c7f5246c75cd2e688055ab38c75d80cf1f3ebd8f87b31c5e052cadf595a842596de3022a58e3e79372bbcdefcb78367493f43246c49933508d4aba2c8c1cac32584b612298857d39cd18ce09751bf881f4d27f976236e4c97ca12a9b195e04c6f58ce517955052badbb53d054e603e79932bc0c31cf0fea63e11e0f32f135b4d8c2fca09b310f994daa5be483c7e83359ee7149c3960feb9a05c09e090a28e4914a481ffeee7a3f5749727c603e03b0e138c7c82650f578f0618dbbc46ef9d5e2d2c798a01cd7a607883fa820933aeaaeafa162779638e9ec09a10547ee066d021c8c6f62853f6a860b7d9286bd3389dcdffbd769ee30797c4235b5b5b86990a71801f2359c1a59f56854f39c81a8f47af8954326a5764c3d884fc264518e0150fd558e72cfaf2eb8aefe01ec212ce091f5d9fd8447d67751490fc5d50550f0228e6f460ccbbd4b4b3ec123a15f3f0f1cddd8afe681cc62dd2ac0346f0091d6dbae2b0c5f19291c987aa5e02a243db421ce12995d89c03e272c42f3e0ac61f0bd51f4e3772277cb4bf46f1b19af805abfa31ee9abb291be63c97a66e73c0b3860b7117402faace2f73dbee599f3a0e7e202dc58fdaf51b6ccfceb3b807635f4e8b36c22053f851f21d12555c0e5034507a153c33490d54a5f807e79111d38a5768d23f7df9156a65129a7a9fdc4d4410afe1969b72ddbeb0437c65d036349d6abd08f78c55aca89358cf660499a53a7b2ed84f646cd2bb3d1b985e66e30333e33d8fd061e61f5bf85af96ea93c921e1b9656a1756f2cbae6a49d6c9f32a7427d455c307214bfcb842fd39290520c56fdfe79b107d804a60976743cd0858cbcc0600c436d16fceba079f82ef5c24e9d987415f470316bd2401b5514b0b745fc446386f55ca8fef41e2c6b9a7b158835824fe4dc939f5dc6716b4949d1b2c3554756c75f6c264e3e2c1b7d60e090cc169ec0085b1e1389e26c6fa5b0609e159bd6ee0398e7887cbe7d7e3330fb25474da9545d37cc82e3b82bd5d4bda4c2e20529479192f4840e4e4df66dbe9a98184968b6029fd09c147cdaf80d76c80e45a8476ce4b07ed6be0e994462f3fe611714bf4f686ab398462e9712e8e83fc7cc10402173094d1a3adae4267e8f35eee978ced46a15f767f0f43669dbad842b66e93c02758b242bc064326b606833b6ec1c0e9da4ab8ac87b9ab64187ca27a557f150cfd4e57de987945b88191f71ad70b1588bb904a37ac36c3746c84a402809318d26e22d65e47e08732ba96d7d1ccc531e38bf8b4217b05f8e97e878a929eeab8130e68f5add15bb458a7f7d42ff9a04aabfb1bdb3844b6fa6fbabde9d6f60b6f3015c3330d77d9f9783d39661ad35c5ac17981037f600eb238d4a89928297fcb25fe496c9c32f6f24d366ef0ff3c0b6687d0d27e5f2e86cd0a5fe3abdbda4cccb2e47716d9cdd4861effddf9621e50ea30d70b27c6debf00cd6838bb1403b5d70d8dfd843358b5acf88a0d5f6cd60afb37b0253e692e7a0f65fb35e7fb46cd831c8dcc2a2c3bd0eb67a9a5206203b81c263b4a11f275b57f2a86e13ed9f431306db547649682c97ad4959b62833972c13fd1563625960e561fde200ff21bfc9f4c25d8b4071392ef49082c1bf478646570c61cc1887c2661c668fb57b48c5f8eaa431cb340ab66a8b9dfde25614a7ef601561d72cc2a485b9054ca26886be826334b97511ccb8e2c401f4632132587337c199b9200afc7b40bbc10c0d5eaf142e4ac4c49f184c2b184ca86f7a8a5cf153adb4166ffe34f30e406119bc98716ca6ac8b916ae1927eca66aa882b2d8ff5f0befb9c37a03b4b79e533db348fbc315b8369c34cbf122c79f7d69ff2701c757cb8f916865ef80b0dbad9928606b41f236006c579d5d91ec6dfb1cff2991b290acde10ee5b795d0650780c0197dc9d999e19e6bb41aa71b76ff773173057715e7ef7c8f7e1c12549ec0683db50028ee4cb019612977b6663d8b373518ec0de7074e2580c168d82d30422f87318c4630b80d4e01644864d48c1d4ea3a62a358007c4d1902f82d9b755e5161521d75914de57e80ce8aa3e11dd3c232b08700bacf4a7bf96240b5b5198a781edc4f387dfc2362281565ff9cc1673b5351841a2cdb73be482da6a7f7a29d1947f9eca9ba647b3090bb83aefd792bc2865879e77a009e315a49977169822ad656339e8bf5c4f2b3938f9d16509c9794923e3b0780647c037c37ed9e5067940dcdfbf01eb63545aa681565e35bc6ac705e6379b8db107badd2bf61f9c6ec0e7e5795a50b490444b0918876f76c4fa0b97d9c875f7815b110a838cd73fbac545b66e3572f5f468927c7d537603bab1945a22a12a37613d1e2bbe94645a0688997c8142725ce5e5a2a921e5b961ab534a4e1eeaf676e93c0ec541795354325f38184b0322574f4327b2a7fd7cb0eae7fd3f6dae9db12023a050024bfbed0f4de0aef90b1e1078afc918779d46da9b25acc7dcff15500f6b47404d8dfcab30aef726b74351877c89baeaeb232093b84b946a91c32da200bc4ab1942f080d969936393b2db96a15da62f3d786cd86b7c61e3838ad74180d240cd01e87dfde992cebc8be2761cc4d733ca9ede169d5ac7b94c2a414e5eeb4355d7755259ab713410e871e8b121fd20426956d2d5d603d4f97bd0630334cd7fba386ee9fb67f7843eab76882d8c0dc4be7d26299e13de3b270bb8649cbd028a437feea36500b9f2d14dea1569cc2fba3341aeb249f102a58a134cd88903bfd1dd41351b45975ae0236119d237880d4307db4d52d62b615721ec2a99a52071e3501914bd9b690dd8bf7bc06e804d02d519bba87bd56732b5c993b265c01cf7ac6ff7afeb0edd06cc2a0c4e97fbac986c23039d6bdb96b1594122506dc1820101aec8725e816c2c7a4115fbb00d41326f40ea828d524ededb2a1260bed23d8865792919e8d7eff66841de0ac8889193e2ad5bd3dc7bece39bfb17598af750569a9799ff17f539226c2ba21f5d854983c193cdbc0ab8c023af990a7e285afe0c12cf35480d43064cdbfba04df38e4afd16237ea804c370c8c70f6ebc960cd3d89422b6d3ba6801a881c9c0e9c4b43c46b384aefda4fbcdb7d7812f77b37a511bc7264c3379c2f167097fa645fd01af82778f70f8cd674a573d64a8a558d54b68dc1177a5284ae6dc0209f67d7bbec7128e2586e0c50454ca47deaff99936a5b478e2745b36ba2e47d03ff5c5456ab2549ff421942b1769b00c8631074465c94af6978153b1dcf40cc43d8fff31ee466610fb4fc136ddb8a90829681aec8a09708e2f2556268bf912b80f3b894b8042bebe8ddcfe6ba9d0f5901213026d38eebfa6dc3e82e2b8118a71557d57b6c3466cf7a605ddc6551e8c53f3c8febd459f941d65701b5ac53e9ecf8f60fb145dcd8cd3557aa9c1c7272c9a0b9588ab53feedd4b528bd21c54c27578c0efd7d3fe4cd7285cfa539bac7a37963ecf38c698233b3b80353419029e52dd7d2681f3ded562593b94b1420bb0c3b69707751b9639968e51bb4ab6c597a5d35bbf823494bf481e11215e231516e85f09684893b65c3ce6df7bfbc40ca88a50c1928d24d2ec89d4cd137345bc35a6fc9d1d50c2d998d4630dfc0c0c2a2f92bac48e17fb8c2a84d7fa2f9a66b1e2b26dfdb7ab35aca1f59e7de76c1f2fb5099f162d1cfc83cfb115ba2920c11cbbe0fbbb0b92e9d148f1909759b9b04e31d2cab7b06cbd090c47085a6b0e5065c6abbd267dd48b66474837c996a13d8b1f2d00613f9a81a068571bf8e07b99ec7d7c7a27728d8715d46949cc950eea4bd57f3e6b26a4e56832c97880e76e8e0e49b84fb17ac6616e5e45da991ff48d827e695759420553ef0bfc6101d70f9899230b540b4ce8d12f71d83bb603b81b20b10e3a8d77b15f634714b9e859dc1536690f2b9c3b5693f43b75cc38d2c1d890c074a55346ff8fb59c19e5f8e1d0415ef905d13023454fcd5a27a7e7bf9948c482e0927f9cddc35c925863abed28924ea3fe391fdaca24584e0fcc891281115e2986e8f60909447dd9e3f43b89f23abce7d6c90e986c54f9172532a32c0ff7f980371895ce59df519b4ced5a3ca6abf11d31358bb3492219c7bd1e47a545485fc529a331b7bca3e483f0899f4cacb19db8ba0b4cc597075711c845178511b69b3c6b0121090c5c9d009e26f493c638e051ee796d8e31933d0fc71590c3b0c76b1d29205bdc2ea849602a7981fd7bf69e939364beb765f0f0ec17cabe389192a04ca5b51f515530b4323b134228de4572469e9d2ea09ad064e04dcc016a0749ea9b357c8c783a4434bd6c4ce892af6d69833039310449765161af549a66b8abda73f967a04286e5d2a5e2ac8c119fd9cd1420203992ca5ca38cb92e38a2f8fbe5ca4d8ac70de9771a47603f2ee63e71191b5b14db2f31ac776bc84b4edf9ec16ce37bb743f26448b8ef4ff006c1aaee3b9c0f95d051e4b1ce7886a8780fafbdb7edd1b1aea89142e437c7688e3b8c748d4d548e4a7b02014a5aead3986aa312be7a3d4dbfc58bc01a246a7ad0958528f2c22b604c8dc659f5158dbe2a80c03a6ab8a1d3a91d5c5bd7718283d132c8e5383421f9655764a5ccf9f8bb21d7da776639b1d11e688346316613f563427fd15651c6d8761a81ba606a06fe4909d68bfae4b629202d7da84f452aed43be7bfe9eab4a391bf73e4d99c88b1574103bf2fffacb8195ce341746d2a7f96e6501947c9f3b5be6411dea256eba339a56d784d9521b3bad3fc6485e0023c0d06eb3402959600b2fe82f8e30d05fd116a16a3a0e87a4b1998e507622e7199c1cecc0dc8f7b4efb6f1c8e75e5d6b9ff6aece9f432b72aea8a1e235ea67c0a37437e57e958e79eb9d012709226dd583a0ecfb643ac36088acc878fe4a13e87072eb702b21c10ab7d30d8d5cd7e106bae2537b79c9cceae4aaabf6518c0ee46b5f4dbdb791a0cdeb8483e19ecbc889489a6ee92d46c34e07d481ce2324de2fb79156ab42c791f344c11613c5628e12d678487411ac1d5edbd24286dc67555b686bb99c7d6ccbf71981f33679b011bf3e1c07dbe8a375d9b348190a086f6e6079994346479c0a9c9881f18fd5852935ec3dfb51fbcc85b13f8f6f5b7891e87cd7ec3c7ff107c693abd0c32b9b83edd66da5807baa780cd4e4b433f4f6657e0bde0160d1342ce7820dc5ff1ddb388494eac0dc65e11cbcb59bee0e1dcbb196e7631570df26839abba40cc37d9976b97f9400d410fae1975f5be8cafecb698c15a5082f33e8147e4ee96e4514396606c199c722946a9ff8802b10666414358bafd18a7b64a2625a382be39a1b71dad69819d4b24f1094002eddc5df1dd182e8d504cde1fea3591f833eeb17b347d72e611ad22ddfd8f01ad98b62c823c0d8bd3de2ce49f49f8707a610fb28ce211e48233c782317f9f3ea9d959fd907f954493ef05480b7193b62401f3027cb0c89d5ed7f41f7c234bcd9701bfb073bb2753ea6095d2df5764c8db6797c2eb76d8725464854bf386fab9cab7963426da4e49ffe815eb71d877cdbd7a2ae858389e088a258b5a5066e67a97589144c489298586edf8bc204fe83435f3582a2bd7e452e5272c12292591be3d655cb7129c1b2b052ebd7cc3422308f37c904e89e89dba3e15c2a3b2a4b732b7471fe6bc9d0b71825af924f2d63ff781f326147c52b5bd5a3f6d0810c7d37ace33152c0d7c0e93ce09185c23056f35b312e1f2a74de00e7050bcb8daf3c3e326f97dc2abcac3029ae63c80eeab5bc7b6fa58ab18513219ce4115fbd79f0a65c11d16ed6c31415c183751f0e86b6251bfb1e252425574a60d2cebdbe52349026f0cfbadae49b8f72fa66966a73a710591e6eb046e6a7b814cd71ec6b061da67b3168db77fadfa9661f6495a91212df054d52198966c15cf8c9e8e003fab8e0b648bf89af909073ce4d22fa252a34d0f3c22e2573bb91e8b7f37fd336880c4fee0b673c48047ec5c2187e7252c7df714da8b2c0b005e4eb61ecea7c7aa7a1a85a0f7b2459e78876989137798c57421f02c68d3e563f74188ad5a9e46e74a6901daf8989d103735ab76ca7cd333abe0e45db825a04a2bcf90307f7b671664542fa7ba90576704a0f0721c1823d8f77d641eebe08c9dd3b6e372f6c1bad10ed06b7f558f1b53b8491abe6b6764df07292ce2c1d0ed1cf73332d7634fd675403bc381205870857b53e5348228e176170346ed6dc17760b1276194f44e2ed8fd413d894c3fd96e9e14162940d67963bc2cf18cfd60540f0ae3d17967eefe4ba4e2f93d369831a30254cd71d51a892df03f9e03fb63fd9850b5457621ce2f8a1a05f54582f00a58e19e139e7f687db0659a3363ad945c6fedcbbc575a45ebb6565546e3fbe9b7cac55128e843abc5c8f0a8239ad4527d195dffb2b8d26cd85f4f93199fb4192b6df618bd51d73b6f744c0e452182496ef1edd60fe53ec371458f98a02be6a64af3af36ec73013dc9daccf20aa0a80d13736b53015c1757d1916a4d32c6e28cd7b212dafcffc4053566972992558c69b5258e7065cf1dad7d4b36f70e4829f51ca0f8bb882e29955a858c25a6a84c1e6a10d019fef3a1ea61756f306ff68258e09c758bd0d19d98a4cc1b36d0f2f2391d88190083d955b4111fb33d9bdb588fecb93cbeffb64d4e70961dfe60261b8e0314b27655f6480d1e60d3766347ef6642dfc8745b91019218664ff2354b2665b3b5c25eaa6f633794137263e00c10bd4c854e1bbb34c0a2d54a29d5219372a699e25b74894fb538c37c7da2675b9800de60d78bc6adde51ae6b78d19b66a5a6c2f460723760d0b81a1cec30e63267cafd7f78956373b614d4bf4ccc69bd15cea65f3c19df694dcb7af17d1405e1b8ba93902a668153af88e6bbd1c71cef2b7111bb136830fadc8e3cacaf48282198ccd3c1e2ad13c3940997f5e3803b7ca6c15bde45a1663fca427fd5148cd003a2f5144a1aa9efd3890e4266eccd41a17f9aa79539bdf63e03f3b572eeeba2a6b98f35d321c892d0907dbcd5afe892c69b947dfe8ef937e937b09c45bd0ef97273a272904dabcc3baee90ab9289dee46b2d0e69199a6c597de71fba8ae61ed4f901d6f8fb472e1e464a5bad8472266ab06ef38c3e581cd596ab1a6db9bc7e81117210f2d16354c2c197faa4a6128dbfe08237394942def7b3d461a5e526a3c5b0019c03d47f91c7615179363cef78249f2b2e34a09f202072d3759262ff221b3c70bf49f0a11d18d13ad844aa36d4b8a5a36bd961b70e6c2ef2c8fe711bcf5a43c25d7b495b74798b797cfeecbed8a3c0e333f88805824374ec2af8d1ab632be3597da71805842c0947f3963e0f92d3ad5e3eed4fd0cdb5b1530709d54cfc3b953954820b8732c2f7448c35ae5a446fd1f70630cd45f3f32ec8395231db6b5ab330bc9b353dc3e02673efcb7f6dfe1be1b6fe3841af006ad10b48505cb0fb4f5f7341203f5577788f01949849aed4110e4643d6b22f9d86066e3831d7bcdc50d586aff45775a5d513ac7726362fdba0ea9522d5f7fcc21c6d7dad622629ea5cf83c3e85380e6e4f9e5de964060ddeca260616c3e6fba80180521a61c9b8f65ff2b83b60886575752e3a959e9fc9988a263aeaac2223939eafc3ad677cf286a299cb1f8ba6042545246b800976afb2fad5a2c593cfb8c801eb512f70de318db21cab1a05c4f9f909d6e7ddcddfb34cac35d6901904536e528790c8cb878945c544fd6d98d12fec8e76ab5651be2060ebb7aefaed59e1e18437f070791add1cea0ae7d5d489f24e7a542b0f94088d0039af88eeafce01f8cae1e0a7149f05550e386e0d8dfe2e83fed3db4e9dc9b269c32bf07094e8c96991305519dd318128dd4bd606a1b35f092330afc05056202e053e39a09ef537c6400c7d561bfef04732121d0dd43843425f6d745aee898f7fc1f4ed42acb4852d258d5149a1b34844d3c38260b83551f2d2522151979ec8f2285ade5b057648b00830f5c6436621726d111bfca80f6cb0393f63cb76f607e57b299c5d8c34f8c968cac4d5f45c14242bc6c23689a8e432e7fb58e7dac1c16e99f2ccc8c41577db06a74a85a7791616ae8297118a7d7c190a5e24d556c37f404f2e70f024500a634a829ccbecccc60e8ba9ba985950ace98b457a00a99a624d0e608e6a72483743348f22a26c29998dcee2cb08c36ebc92b249e8451f45cc5df7ca38c032b2aba4dbfd10abc949354eb8e87c26cfbc54c65062b7b1bb7502e3669efd1d65e5f0fee5915d6950a60b2e8fc2eeb6567590b8dd49e2341a394beeb2eea17275eacad4eb2e09426a27a2e507ce9a8d84756470b16b144283cb85b88e088f56f133fee253bb7cc32af929e8fc7c55eccb147a37d38273d3a42eabd9a5b8a43d0b5a696223d5656b9ec712c0da7bae33844ad24586729181025b2bc501351aab3fe2ca95522ab82de6fd90e1fe436b622003ef7ec700baadaa5d33c1c39d3cd409d71145040e4df14baaa8ae4d1055ddade0c5be12bcd2d446e34de1ea16de42c166d36d5a4d927252434b1c2fabd520f4588b0f7c0f78f413b5e92c0ff158b2a0f31e525e0e6709829d37caed99ba90633640c08b795ea4481298c3c24fb1544af8edf50f1e2ba2ed2e04916c1d7f1087a8c0f8526e08116b62a68ef5705f937fb28310e43e68b482f5ae9fa751dac29db1e1ca6a91596a171e301521db2c7b0499f181e16d45175a47812c765c296e5ed7bb19a305572edbc5a748f191d0c2696d73ee1ea8b5d860618cfcc503c5ef995323b3d3bf96d034631ae77d16a51bc1a20b5e141a58173ec9ff73e1d2ebcf9514e0f8ce7c8d67b65cccdad8786d251daa1448567fd8a9172a633ab9592f578a5248ab12a8c8b051a1004100fd3344da69df4b6247ccafb159b76e663b7db236f693f5a1e445fbcc5e94d9f30493bd29501cdaa832ddc0db98ca672de37dbfc7cb220a2639404be2263db88bae9e0462638cbf37a92f6a243e2f5ad1968503403da20c9d18cd90b4bbdc642e6aa29f804943e8e89f0bae62e016970f8590d9e04fc2cce7a40c89da0bd181249f3cbdc2583df43e48117112f1a9585d134bf3a36636d9cb1f47fde111d4d60ba3e417f6ecb2fcd12d4998a81716b8443836d26d67faf4a28b6ff51f4df71dc37a580bdb0898ceb69f1e0385a10af5fd93ea7ea9d4bc62adb0025e622cd2e72639df36e09886750b93875677c2a9a4d3c2aadf7759438a3680f58a10f6998ce799076eb75562bf9815eedcee2278217be172381d557b138f6333d94c498d3227b947bd356ccfa88bb460885e6af223da38f1ebe51f4c55c9517570a18ea107f7cc5860d8655aaa18d2e73ac63cb30e1f13c63063bf447e73fb972b038e36041add7344393f91c14369db077af8b4de7cf2c18c7761cd8c4b09fc2315130300c6007e0ece066e79609cd0523fa52c68eca5ab622648c8a3ffab205627a235b0502ffa7b59c79907aa68747cfa712292d8ed37e3b8d25c8fc3c18fe8a9224c74dc2860050ea41d90d2dd4fcc5a2fd632f66cc1699dc5ca98f9c52ffcad1caf27867f367611447c52caaff966fff74a1614adb9cfb7eddd03000200b1279b32cb570f803ec5d844b751ec1258f6db0cad85d514b04e4fec00a0be60bc335a7be2d2bda873a09d25e196b559d993850ae7b30bf33055582eaa80dd86cd1de88c36425f75d956f57de0e4b1320291020ab20064d998fe7e73b07d560316b7e3b108ef00075b550ce0a0ec75639d8faf7f1c38daddac6e077f89babf86c18d26afe53ec8f7a65f3f6e1e5c563b50b0db89c8a3e43baf15ad602a264393061ebc12222554ab031258d6c1e73d54ca31867af3d9f8c33c171b28c8c28f45aa95acb95b3af7f16346751e2513e1743515b9db5da3bc445badcc5b661f376f5a544f90b805cfc3810205654f13928c1aa798c1ec5f7a2cf95184b17b34248651fe84f3661c0bf66f870f3f239266a490b9b449440858bce3bd360a47c705f5b50215da86eaf8c880e69d3ba939f3078dce4e323dfb185b0e992ffe181b791bd8af429c7e58f41387e86995bc4e461057034318271279bde18666865105e1cf9d9d52f7bb3a274446d59370a59a3bab04736cecf090538dad5207e728939a6da102d2d86ee7f4142a70af01c8d0e628141aa88f1aee2a7c96b815ddbed977459ec3500f87a7a3e36911ee10ad50831f2538686e6365cddf2a2e8a1fdf21f6b6984d6e17824c0db7474a7ea2eaaad0d676ef728b0a485e24db7224da733c6fd0045318c08409346901daeb2845bf80ed69c6a24a9fde4e2cd7a0d5bbbd733de451a363b2253de45a1840206a7e2608edb2bfc10493c55f3caed9d4bda662f425b0e9827af42a1221f13d2a98280e048a4e4072593825ff24e2f0cecc9aa48b75fcf47a46e37422989e13584bccde2061eb43b1b80e1070b6e539e461e5ea694cba57ba677c5712c7e536bed2c1a0c8e072c0689cb0431ef009bb71718ac74b7761ab809a8144ba02f1d8189087bb51531a9197830f0d0f773b9b9cc4a86340692ad14b42c896ad66188eeb7685235039a25b72daf7719457d761556ef299fe5686015fd71802deb1b95e070f56c47493a2a3c67c3882cac7abf774ccda7f0a8b8e503b172bba888c380e27b445de1191cb9b5895e79ce5ce3135334ab53b558af91b2d76f878175cb99bc6bdc3b6b8bb627042c4ba7bf113238a8ad8666b58c7b24e4150966348cf4c487d7b1a445452947b861b923a152ef9d83d7e391ae3e188d2792c34c5fc1cab516707229d8ecb1ca3ec182212105dc6222574638d0d787b3b7fc6e1a79504f24c548aa9ce2b1130131fafb44ae63f282dd3f06f747e7cc28da89425662cf429a90cdc6b8e9981fa7090eb87437aa8ce6c6744985ae706fa7fcbaf9125ae9ac00c3c54a2da1694a4c7d0452514e294320b0887597882d9060ed4e84547fb90b2d48ae2d390b6032ab9787bc0c5d9f1419a0c31943394bc238949cc1f5f99b3bd5e83545ca01f4212fe4819f7206dfd9d6e1eed918b12d6d5ff64de46873d0d14f6c1c319265a1dfa3fb356fd4185a62e92ab6ed4636d801a41e93f98618738c32f6971d923074b3c510962ad2b7f063ddb557808b80e43a8c2a2c85d07611625c223f74b3aeb30af6258d30b0edf2a30111a05a0f205bf925ed7aae727454e33a0d47159d7d2b6e80dff8530945b346f67b99a7133a8823b24a36280dae2cddebfb80f39b7e8dcfa410a707fc5b6dd8dc7cd7a13fd681e8fec3f99caad0ba340a1114bad4c8e5aee918d71c76ff0a72cc21ecc55e0dfdac22fdb004abc2572cdfc45d4cc1b55f341565ef5b38db17c10021728990d36909cfe7d9c03bfe71d22c686b6eb5f51f612f2532ba098f1f180776a25018137dbed786f366496992c59a80e7488ea17f8910591e433296b644fa28101c6efb1998de17460d367d37b75e5fedd5f3da2555d39fa01edee83b9c9b4a51d35d914d301381c3cd70b527a4992d52e0e28801def64fb824b23c0db996db2c86bfeccbffe18af67fc1e4a713ab1405ee1f7b4d56e49f33f78b9237361d4f18264aef39e53029b74a26e168c988699d2ea1967952e337df611eeb7cfbce4d2dc168811f88a5641830e5efcffa96adf446dff977597d7ac666ec9da49930aebc97f7ab6fa2adaa4b0fec4c61f57442563f394ab09ebdab659a0ec6c9e52276c191154628f12a5c9a3a7fb2995ad2694692a630daadf6bf546f4a4bb39b2a27ed01083fad9ae67e0869a3a49c3b582785bb4bb995dd896c079ba174bf846080959e1d8e43664af39da09670ae5b3b3ac4063e2a39e00dc7b0019c6ce291ac7c2a615a6359ed2d506f53e89435f5dc04ac720140e0e429b0a5fbc3d42e127e0ad6aa94799020f0da2faafd24fb4be003d89f841306e5850e03d4ac5781adc50f1630aed86c1e00ff658803cdda5b0c5f38455a5e4214acd910b9a4e95bb46acbca560539c99c7a1f5409ade8209333bd3925b51487e46bba0d168747ca6f81ca49bc1a822c0197e977e812bf460c5cda56a3b4d2f845be33b874501a2aa6ace87151569f43c545bdacf9c45ead6683d4bfe86cbd200e47f0c57cc46985a12edeb64a4e4bd5c90b179eff0134863496f874f30b7699bcaf7c6fbe68f038a6131970e28e19b865b67efea8a29f29b5d258b2c069d235860c316cf598744d2c1369f49a4f50e2348d46782949cb35f2fee88abdccbeee7414c4c19e2b52c3de4bc82ff372e65103b60c5c17c4f792b77de4a41e369d9da9c2ab6f6a6f39745c544c11972e6a4bb31637bc8554e2d373879236ace67535807c06753434ae36cd9c4a0aedee2bf069e0cf6f1e393abedac3a4a7b1be2d5e3779be6ceacc0c9c91f254654c7d852981033b7faf0ad3d0b43dadb4310894dba5ab56a34397c5cfddaa28fe3c7b18e2280a677f48d8bb8a36828df8c2f102940b72a8755c2273e876f55848bb3461949fd7f94016b176cbfb118bd6f4915d861bcee8d553e72119b650413a7d28a8b6e92a189dea8d53ff18e31d6c9b1f7322e1a9f0a39b37847b41b1bca43ee9a413c36d31eae0dad04ee29226d954be7f477d20164ba130d61614d186805012a19848850fc64ae7d1c9fa4d3a7195ce33d5694d3d5681f03f1386c0cd5a63ad2f285c4df6eef3782114f757026f96ef3bcdccddcd2cd8d8df8b8a5a430732d17d01879aee3a2a00fc9c2c22afcaef8897a810939f8dcf6ae9093518159d695edff9843c61a933d7f9e3ddb0fe0d5647fde22479312685b3d700f909df8d21712351fc4ba486bc506af422d33cb13d2566f132b73e19cc11e9c31d7f7b5d8a1aa91d0b67895e07d870f072bf1ffab89baede86c9d5e4820c4f8c9e387f3896d9a4d67a5f145714a37dea8cd448d25ed59960a544844f2f77e22f6f1bd69028bf8632eba5788a301af7c9a4dcd9002575e7a862c3e211a207df09e2533a94cf7182f7ff82144ac32eef455fb49a1efab80d6c5161dd6d9d8fc0999837ff9112a70e037d6dfcb6740c1c99b9da31b08e48a45d0950fd9ec1c236994937f324b47290793ceb39e07df8d3896c487aed093a122824286b5fcba5e5903326cf7ffeb40b272cdfc34db1be9460b18d6e9622f4121386a2bcf50c35e9e9f66695f4fc8fa5fe2e188f4c44f7c3212558d96efdc648f812d745f099a9c37068c81ef2e93611c7b97ae857bd48f35841f945f887e2d547d56e1f05e2c7c61e95c04b4ca794993fa46f97179f08f7f7ce114932351192fa0430d298911bfda6e0dce231e0c94df5f75e3ac3cf4a2a70976ebd500bc9fa6a8dd7a0014412d91962039c312dc0ffbc07b8d2af1516299f49f985e44f9700644b9a3f8bfc0aa55458c6f81129fe20191993f207e8bebdbc260ff2d2eeb268ba0c5b286918ceca29d21e7c7643f840c4bead78dc305cbdedb4d9fe09796eef7b6dd2b383d801d33ee010626a09d7a86a289c8669ad744b4bad092b758d230dc93977806971ae714811e054965d80df1147652b354fa5fbe1b1f235a8b92a857d87d334911db2335349706569122942db59d19710152a8a4bcab67a9a3d89d7800974cdf955bd5986179b1a99acbf38bc708888c9c61da2fd2a523de3c6fc960d3483e49940c9f438c2fe4b08e73871b5f23c9930ddbde8da508b5bfa5c02125a3ec1d562e716f0e3dfebf3b752f78ec048df022a64ce2b9e7dc7b47547d5ab9b8a0573fcd5f5238349b66d4d968dc69e010234f17a7bd1832280df1fc52ac89a48adf67fb37f8190bde98a9457e93979886d5fdf1b24258f676b69f1df832d6883ac525107eec8d3659cd32606e5367b4d58c34be330dbdacd0259425f4a7011470b64e3c926b6d1fe1822a20911fe4ec7a0a0344045eb42152e0f02c489b1f37e9d9159ad6c880e7fb499afade6572fed9bfa440aaf4f599449e21512f199e449b033dd4d66278907e7b5d74574d541f2bcae3e694bc3dc8529c99def7ff056fbb754e0201dd6d965b24a9ad5b55f668f56d201baddd0b0d0087bb1b58e62e71d08d068781eb0912e47d1c2fba448c4abec69a1ea738c61df169c55eb574e23d67d8a8e480d9d91cfcaee790653ea4c4e710dd13239bfc8b55036a6cdd007e5a744d8ebbbbea1579dcefe118956d4e859cccc4b88bb16efc84777a1cfc53bfe22bd4a573b288fb12b5414b24d389e6194dfa28c477e6253f3503d804d940f39a2274c54e43ec64bb8b9d685b6e939c3a493492b606ca9d0aa15d3995de4f01fd96e7fcf9e74cb2cdceebb77a538c7f10871da1278f01fef8a25ddca99247b8b81ec1d8119ba3c622ee60b2025e772ab3e620bd352f0b14788d848ce2aef23b0e14cbac660340cbaf0556e7f9e1e19012e92c78c9ca7b678418560381c68cb4618b280a4c53b8066724a48d7218ff7f4fb054ccccd8ec4c04d4223a36c4671a2eb58e6b29dfdfbac5f714e4776c5e90b59ffb5df9cfaf0ddea850712d925f25f0f519a6ae80fd838d71a4655ff6da0f199e3756de31c869cd7be267eb783690a8a56b989cd99ef477a4e6bec6efefc053ea6b92d00d57a465afb7289daa880388f4b27dc6017c0ce289a9a6a3aabe757ced49deaaee9ab2e65760a907950d89ad111872316d339b2b0e317f1484604a8117a04e6f0fa056c7380183e6635fbd3ebe7810c4198d7eb78d490026fbc629d43a4b713077f3201f0808b95ae1a05664a30f1549b8d41f575c5d02131bcdefa64eba83bd674508df56d06ef9b7cdb1f1d6f78dfe4aed5409ed19300a470e446111baf059155a91a53619e8372d178aee922659c8cd94f824b7ae4a71be027375e9231b8236497741748d0cbabe45739d80460121fe78d4d696fd735d7144fe7a5921302a3f5951c25b7831dfe74a0980f8979a0561d574b110b0a1e0d1fdce12740e1251b73e5d525bceb7b83eefa07ef9aeee7aa58f7b93d49ecdb3a1a37dc9a44cc511f260fbe062f7dc56f31f1e5f9a5eb7483d4800f0841df0164159540ab6f113e74c1e800ef4edb16a5c2340ef4139d860c009edfa2d488cc6cec47bd8e8fba0525ce18b1a86a71a9562f29d136c3a78e813ce633c0a10caa0b9874dcb9af3175ddff9aa7a9b0d406879538c39ab1570abfaed0352ca55c9ab32eadb4f5745357e75052a3c2cd195a011ec83572067b319a34bb3e728b1f07e21290ae111a8eb77b2f920864f660b16e5159663cfc6c6a7fe4e6835bf02fe818427a0ea9821b8cffcd714633c45421f8aed9ba60e7b384d71b555aa4e1896b3eee2cc5f86a207962372e605326d8ee9f350f027a6fa8fd133e090bbf8182c4d24950499d5e7c6aa19d0413642f3247d8b44bf270918e77452882158127a4a004767c7d97abe07c84e6f3c620aea033ec4977cb9c56aa04afbfd9de2aff787cf36f3d56d9ad1f3d42a9809575031dbf7f6c33f822d13fe45ace83ad36824ec1a741fbe54ce9c88fbb40a20f0f71a7d3c7d0f3b8d48989f3a98c69e6b30c86e798dd1054452a239867bcf8c89eec30edf4d43a896f92cfa41b05a1c0994a7b40d3d51a4ea8344b300ca8e4b9819a3daa7866a3a30096f576106e9a373ae5d2b090252d1a7ae8204c3614b48c04338daa0041137b1329444d36c0fac79347645a38376c8227e8c80c7bef13b52d37e8f5b006803a5bbeed2e7c2880ce6d1e05fe922ad1b4eefce712d5bd08e60fb405d11bf0da65e8b9d7389c59d883da301b25b6ef541df0bef0f830e1ade2ba161b2f7e22f705bde929b8fc8e5878026f1c472802c4e1b1eb677b263be46b2b2ec8bd10b183a5d57c48bed5f7c832517be208ec65cd4e27b7b91cd457d62dbee97bc543b7a377f2dfbc28305557911bdfd9acbcd94f5aa922ceed490b3b50703c6b2c6fb7a428ec6426e01f414e5dd311a1643e3334cb0322f37d137c51c73b74795da13e4b735fe2459659103b33a95309dff3ddce529ef7401a3ba60717e42d61560ed5b5e9a13857c59e0a720299b8e3291518997a8f07f3c42564d789842fa8a3d00ff50ea38fa0997f4f68d27cd819b303b4bbcc8e18ea19b0821fdd819d968e7291f5a55700691a1c96dd1333bbbebca19aa701d6cd7cec8acedae9940887ffd2cd8c8a3cb4f255bfa36b54e6015a04b56ad20c4cf99ac61a9b38bca53bf7a7bc2c9ae362d52bdbe3d225db4ef37212a974d8ddbba26a24112ff6b5fe1d2d28efa450ae9fd57ff29d9ecbaccd0c250c0e0564d78ee92a0dedbb176dd1dba4b83a8755e88e2276006b80677135f41d5f3835684a5aa7bd3d07b2c6c5c19d985b8b1949c858ef375551e8ab5ffec36b85dd64dfcce353eaca07246bb13de34ef3b7b527a517cd06e4cf9cc7c4322d0bef0f42637a88c24d920c79beab2cdd28e9fff3b7295cf7807e1a20f011307a487af9240c53fb02aecb876fbeed128afc90f3014d739e174d726693c857a7a35b2fe82f0201693f65bb27c47073303e21908b8d1ad2a9e76e67cd825cb887d43541d7ce28c1679bdca11a8e25dd2222d395cf03ceaadea7fff78b3bb4c33b8d29efdffc40619d3d9fdc053e564e9c83b04e0e10b8af15c97fa53bb6dcc07fa2a86c2cbb5733c5de6c1ac1c86dc1f0efb8848ac7005f5db63797d003ad9e463b5a85b1d69721061f6952f17a391ec045c3b16a7b4ff0cfa4fe4f2b4036e101a0750daba20fa48b825122c079c63b3576a7447b62d8313726bf1a6a65254eb01252a71d1bf38d536402e3f65331eda803f40bed719f7f4933453d9bc13f687e0e56b6b0040c592bcdbf81b4c693a606474ff53473a97a7fcfe71b96db2e3f4bb7c6f90ac9e6bcf8f2e634b6676ababbd1e89c4c9392a3e12f18d2482f7cf8bda998754a6039dd212e63b9c0225bcd8d4afd14a18689462779f11b87c239522cc7f12d8f2e60f42f8c640aada8326103342cfd4098b58700341b112aa359ed5fb9c8e2fcb392fc7aafec5e2680a5a77eb26aba86b485b2d1ecf9a2737b014d7553e3eba630cd2489e06cacb731b4f0b3a1a2cafb9e49116237f4953cadf6c61ebedbec2e9fd34585c224c22d04c6c08d1c2db24d912aa6d12769899812631fad3b8233ba94c5631c8af7b0549e40dbdf7ff0f4692784a896e22744be1f20fb4ab23626bdc620e9bfb1d1a84703e7187646c032d5138d905671ac3232bf4bff2e7202672393ea46c7a9714fc11a501f9b4c27f514b1583f2a8f7cd16f45aa76e9ebad55bcc2668b43ab95a1ed193c37ea654a8645e49abbf43277c66bb1603a4fe89dc4bfeda2fd823a4eeedcc6c19b9dda21277fcbbf9d1817e6e79ec62b3853a8772dc19f7aacdb71d623bbec4cf7a1dd77b6c6401b028f18148d10d165cd39f99af2aba9512db861aacd37fbfde2492e808341eda782be7ea29d94f74cfdc7e199b0f2e11e560dd315cfdfe7ed3853c87fb29ee8e8601342baa86303c61918c039e4c8d22afd71268fb7124d1c1a78876905ffb727e640d5f7a4bad98be6197cdf457d032442faea2b10fc778b9194f09a41ecf01f2734ed38a9c5810ba5b4d210c6bd36873b277e780dbc29b685dbc777e2e2118770df104ae3c6476611520f50920f1b890eed3913b438cd350a1ab4ca4b121ecfe40060fc835d2808dc6aabe595075fa2042ae7cae96670c4940d7e0071f72fcbf2257f527377f3edb2e811128246e8b856b0ca3f03f5cb749a106a53c7d9f8e9b6d17a056d7ce3b1a3668428172fe23f41b21ad0326acd5e8609356142bfe784709adaedc23a98b92c5ba53b60830fa7d0901a38b461cd792f68c84d21cce273e369b917a9e5d6db0d135f53cacfe2f97e1bc6bed6490e22074ab1316395d2ee2e8b95a92e5ac118571b9b145f61540901c0f2a87813b4030fc462c67b2f48f7b3bceaa65f159f353974b41a6eb7732335dff005b913345ab63385e14641d6884d232635344dd9045d3c13638ef90931485bad7ee14222c69360d9e8153deee0a84c6d86729478d24f63acdf5d8a6096095f239b51da4a1340205f8150dcd525c7fa26760aee339205cdb68e8ce6a2877e0d373d86c8ba4007aaa0f56af2e01359f44fa6e023ae4ed7574997964cafde3d249e8e8e90004579b14e2f67798c9ced61022b3edd00834409dd8b38860ab46fa427609e12343fa0b0b7dcf4a4ecea431b8e39fc53dc92537c6c551d01f9a8e5c18699f94c2dc7ea66f19a932a9332f4756d0337143058288ffd4fac3ee45a08a5aa8674a5f5c75b533704b2fb10591f49180e79e8257d87c1c971594560610451d93e692e9f01bf1e42c679f0b32aac6720a9250b74426c5126606259694187d5fa41d2c938e72afeb0cf60e8b486f0662d794b62399041f073ed192860ca0c3317946bfe2c2f639ede62064f643213046b4c4c33d220b9c977a9445dda43cab4146a02590289a42cd0465d2fd977623f9c3bf3c01c88644c3f47ca1d79fcbaab4306c37628387aa4d8150662fb6da51a0ae1889e939643f53d4b052c19bcb0303cd4440eba3bd4cb409d367e8e10434c148e060f2af786ef8278384dda877aa97809bf594ca4c49b7d7062bdc21dbdc36d85155b34368cb099a83a684d35446d55e09f520244788cc5364c53035d01dee4ab1a6383c222f27bf52e7f4c5a16e73d83b791cea6207700f822b294f95a77f85a7d0634b506484420d5d3907a1eca69a2c353e11396d79a696f5143494da79ad74efa0a744598b42d983dff1a0fa60da3222904a0cbc69724397c9fb7ecdb43a6e82986838ca924c8c2643eecac18e9f8bf2eb7b408c7fb456cd7627da94b13f445c2d5f66f5701e08e4a696aa3bb4ffbde2bf2040196759311e0868341804ba9b7ecd3acacd9ad394f7c7f28ea889a0e70cdcc4034e68106f4abb0b6c148ec06ef2d96ea86beaf0d201d299806e32ddafbb37b3b2c51abd1c8f9a89ee1900ff5689b115d93362bfd53694b909f99a471b56a1520294b611ca16f9007ee8a527f8a2a54baadbaa145a222478ddb8fc54fa3ce56d089ee2ea0d611918dd5ea6cc30e47ea470bd22534e227cfdc0d349a28d8a56fd0641151905d36ba273cc80aa6b5247a2360d9a5c9adeef86f4f9d39f36a2c43f8cf68dc7203b76b00c0ef24b5efe52c2ab70e219a8c7f1291c282a40c167ea59eb7a4415e1c9311c4019508193fda6d00196f8d73065190cc2cbb1be1a32c66900a309f101dfa6cb296df7b1e2b0c66f56d22a0afff8f3cf7c436ecb3c176a7b7dfe474e899d2294bc9ff3582b06bd61c06a80d1e43eb240cd52fe497232c3d1c6393f1eef0c6675e9b466a557f437d83e9e0871e2ee857316dc7730799f2f6b61d760d5d992c8d5098c9db7e968287003763440bc20934ee2d99b8e806daf65bec1b268b7a8f46a774b886555115556e82c1b9cb58c320da413e8a89f8c4461b372de93d77872a739c575e862e05bb5ddc79d2f701685d09853fab6572944e231f90189f8ac8a6a0446d287b7b5503e9e44051b6f3671de107eab7ab2885e2a85a0072a2e662d3f628f1cdcc2f3357caa8c8621aaecf28893e87933a58fcc0cfeea61af8a2ddb6bc0bd88968f1f9d4a1b544434c78470ff95ee8041e4ff9776980f5406dffc9bb1542de44597e34b5379bc178f814f7ce39b063abdddfd9a10dc074ca7ecf032825194afb4cd6807e6dcf958856ab9c466404f14149eaa77e12f5a7d187fb644cdad3c08f350462b7328081ac90a44f93ea42bd8f7bb9042a628ff32d40139646fb1f18d6b25595b879eeb7a66495f0787a591999a780873a5e378cde253093ff012f9f65dfcc3ce671df8164f3a29f747f8c116a2ad225a29311dde30fc624c100263e0c7b05daea34ef908ec78665065f2f60e1e5d66aca200fb12c677cbb75ee080fff8ce1ebd84f2c573e841247511ee12de09ca29a19078c83771478899c2cf618de9e9edac70a6b069a9f699d9c9cf32cccbbb278253fe50d99e0fd61458902b40bceed65b87ff7005babf9684e676bf4aa7fb3656ec11e978b8bae805d7ce837977b1993c93d5f3e3f0204ccece0c8ee668979ce5705eed4ac39b4b49fd01bb97e29d5bc83d68f825f31b3b38466973657b4444bfad3c9153da36111a82e8564ab263175b9b7e15385f17b07b4dd1868b348681192097a8964ecb5d1c4be75ce2d8d6038d2905574d7a8d789273196e0130a9a774f8cc278012beb1778184e6648aac83285c6a9e9bc46c82588838962592a03cbe96471ce7665b84f23f8f13419b26cb6da1658c7d2556a2082dfaa7a62e9e2691465bf67461a187d6f99ab873d974e345d92d353dfea2a34250c4b495f1db97435f1cee2aa2e51d1dc79e159d8d3a61f93593469c9cd630c25ffac9155ac163ab2ffbf5b271fd70a567553432d67150c7c9faca16031565e9f2dd187688f3ea2f41bd439c4390abd7eeed05c428154072c6adf5e00eaffdd04be28980cbd11df05996f0fbdf2b7c6d4bd5d3ea61ea6384469a99ec5b7be5cb5ac2e73a71d39bb386d282a32caae7a0fb60b3b1314da5672c67b7526e5281d77caf7a97e4c77c7f74e22b754550a48da3d67fb9db542e42a7775e49939e4451db899fdb3d2704c73d07794db35c2850e75e1a48ab306aa714eb7a19ae4aee0cc5a3c45cc64d7c368c090d9d129ef3f2dee8b46382ab35e2acad94c06ab45555eb7df360e1a9401e497d09e538f672ca121df358da695f2a5877c112d99cc5cbe9e86f5153dd8155fe1add5c7bb0b244eb2e4562fb9059a1679f779139f6da7b620bad4739d6e14ea7291241246f10c584cc689b11e611dc107cf3b0684b996f010b0f98b2c655dfa2e171b7581f7992c5be11cbc76b895c3a4e99ae28926b5cfba3294076ef5c9c55f34c8be8bd2281e820f4451cbbfb7d128a9dab39de694397fa2324d7787ab40b1a22f0c210a7966d15deed32efb5186446042831c9a4aebbed0ac6e03519face7bc34c0631bc2f508033cd561a91b9684149e62b6c8d73b03c5d56d21314861fd9dbcdde644e1cdfcec926fb4fe91946ffc35fe3428e89063fa1f0c82963f81b22c5b6a7afdbb6845806196e99f2d764b41dd7a661e923763b703a73f730ddb5875613810dae8f321e5a533ecdd23982102edbd0bc98ae0dc0f24dec96750a50b188db218b31f796d7619573a73ee5cb6a5cb122bb2cd20622c788c14498a714301c8ef0dcbbcbf29a53a7ef74f0ed44f24d5f01631f158b4b16489e5dc3069734039e9545c938b7cc8b86b4d1bc5f9186a061d7b4112941fda886ea3652cebb528949e59ee1aa4374c48bc5bb2405a2d67a896674af3ef50d3bcb85553742a9d8d9a831c87b98c32c642934974ec6613be1e37d3a9cd5f92814a456e7dacdc479fae6aded9e869ceea6c7d38dee649205d29bb1dcfd858ee75d73a36ca2a7260a05b163fd40679effeece63ea6a284a08da79ac4f572229dc361cb390e5ccc85456c084919a8a34c0c4c1269ae23589975dc2c5c2d840e8c7aeb3e51315405aa09a40f6e9ef15dd0498bebc4a5803cd4bfeff265ebcbe543baf2ebb3e307927d9230099bbfa57fca7e0b05dbccd43f806dada13ee96c83928be4ae517b4037b269acc4617bd2d69b65abc30ab83fda7ad7b17949d7facad9a3bfb7f86fe6f39ab823fe21a5a1d64f8a357b4d7cab160f62ae6503aaf1ee3a12ad234014376e0d1a093a25783b40af44dac7848e8549562af8fef6c26b0d4b00750203dcd8123a47925bd38134fe9aec4c8c858bb769b0b1475cbab4bca54ab582ff223c256b87f60ed3f1b02b192a6ec11237c1628281f9169011b6bd467635cf3dec99579e3e1e02e2ab8b55338cd2d1985102f17184ef5285ca67c3c917859c0d5b7eaf29dc2d53f132b255148f467b989444a058b0b20941b905ee123f0a79eb40d0983c1b0ef80cb73b1c7e92e3c8e004ea28858b343d039fa6f980d3f8efc3d22bf0b323f97a7d259e7ed756d6ab6ec952e9663f51a964f838b0b1624a21b0d8c2ca79b2c075d9121177d8a8f9389b6ccca44e46e52eaa4234e16e160ff6202ef287ebb29eee8ddb32d1e4552d21982a4f42db37a904e18a9e563c3ce3840962a86ad2ce21e2e2f111b2a697582bcf89d979ed4d31e2652f6d97e0be1ba2010b056e709b708e96ae052c85fc5bc8208df85a908502c02ff526d14f05d7dff1a3734a7b3e5f441124036f8779fff8fafe28df4d1eefa4bb3176436cf33132df927ab350df808843b0a11f8f1d5b694e69beb237c851be74f0b9a9c5cc8625abcdd14c8909a6bb65ea12af3ecab33a3bfee93692b25e888ad73a73f6448ae15bfdf8deffc4ab7c7ef71699cc93855f76c4141d63c7aced560041a5976e99efb19ebaa545bf65e0db7087aacedecc25c7ec561fc6cc994ab7e3ea137ef78dd0c68cee9eba674e75ae65c7229f4e4339ca9909141e1f00db73e54af145b6527a759fc1e6ad116d0574fda52f5badf4aba8069e029bce35c8d4983c464fe43915fda68bcc9e9196bc7855c761c17bc8f76863fef637e2d8653bd31394011998c6b19e074587e424518c638caf16f114eeb6daf64c00b975c276bfba59f7c30473f55e02c679aaee3b50f37a4691b328599705e229f8fcbf923065640541518730c7848ab45dfb640e225665b0ffdf880993195aefd948ddf82ef1d37aaf834cd3a5e70678f1500aaa1b774a13dcfdca54ca9464ac0a5bc14d13948de6dc7388a5fc7ce0984261de640e4c0eae612ccbfc46c4eb5ce3c289922d3eb80290de5f0c7f0545f3dfd6a9d34128f68dd28787928e02b872e4cea9c063ee2d8ab96b81fc7092625239293cec489f0d367e7d74aa0189db9c6844bab206ac0f6a34ed4106aa2848bf4701439291c8dc04d8bbe8bbd8f21deea83c1fc4f5cff8ba64b26b4b810c50ab0746b1344cd1e85379f38196b92712e8fe5089e9cf7d3489cdeeb7c176cf320c70441a80332d40cd8add1de509938dd8357dd8a949d02a7c1392470212c4732494b8420f9e5816a9bcdf7ea0ce3de85a3fceda08ee8c8f030c0f74d74fc16d5624b18cfb726064a1f9978eb80d972d749f1836c37dcfafa53bd4fc335909329f1dd5285e6a52f4aa17995aee857ec35edf202b751a9766d8bd238978ebeb217d9858d045924c456ddcb7486797437a46fcb5175fc469f55f700617dbb08ee6e231ed48192111cca59a1eeb6e060d7b89691f993cd9d96276213e860d69a1a2ebb2a922d0c08665c13c85f1f168cfe43506161df58f82a2c2371a3e6da710278f6bf3905d55305b61dcac1f4b69b87b51d9ac384b8e8a15324a24ceb2328056d19097a095071560cd148e494200a36ea2424b351e473911cdca3572e5ff6d39875a13bf92e85b156e7af17b798747400f5127a3cf0f7e599628e08213a8e8253baac1f0a3e0f836269ae3a3fed5f33bb42de791a7591d8efd4bc29be687e523236e6cc5bf480abff07414dbb1ed3f947b30b34d255de05849e675b51fb75793a0ee4c962438c797303db41fb20088c8890047cbc46632b9e3407fd42fa472e46978305fac844796549553f7f233ad4039abe387a918da49dd76b5405d9c5dfff6007ebfa777736e76ac498b8b63591ca5d5158dfbcdd965e158857f7e7eef9259d8e8d0a1b53c2f7d3dcbc86a84aad6643c2bbc3520d5a360005c25fc915a1ea531a5d0eda5c60cf4964f88aa733455be19250294ebc398b90bacea0200e2b1e01643b8f836884cba0cfc678a3324992ec5b59fb15e0c9d5feb11f665d87f59eab8ca6989b1a0f97ff345f115359a3e8300b069b0d77040c32e924fa0a79d733dfd4d0249c522acfd11f0ce9b3e19624c74fe39f477b1005cd39fbdc242d281ea079c73dd98773613c5228fe2bbd7e174b073979943fd792d9446e648d29fa6b9b7ef0e309a1f8baa8164f55263053764e15a9655d0246aea7a2852d5b10935caa31c86c119d634781588bdacea825d0fa8f59380732e43bcdf7cf74674fc446d953b0e990cfb0cb96eea2b74c154c9ebc0194eae1b4a4bf2beb7921de4c4596ddc187f6a29042d769752e9eac64d18fa88036950d05dfc09be26aa8422cde6cd9b1083217932576896bb23424c68a84ce994f41878ae1b4089e15775f1b8b1cfa613c498188952abc20265bd3666711cef15ef48363146d63ea0d7da05fa9da5fa6b4460131d17e9c527764d8a56dce89cebdb854c1cdd9f637337fa957a3d839a56aaf8cde0aa2966467cc5bf6d226a8f9b36fe65945d9493db0a847ef07c95d53c37508e188db81418141f578d841ab08ab0b24bf714e3e452b6358e1b2f5484547721f1912d3c3bc40c65fcaaebfbcd1950d701362dcfd7e92aa603464ab88200814dfa9ee80267aa1a02f417ab5094d22d35cf3ac29de9e6911fa0e7d05c66678f80c5f6d09907f883e6b53f78ca8ead32eed2932d3d6298f8b9db53b0d23cae3cbe452aa91f8d170c53980339d9e6c13085fb078cf2207ee4677c13e865e52eda2885533454554b55164494ef475fc19682320fb61c1a5743576c348066ac25dcc430a10f896a08983fb825d2b3a95f0cfafd9bcd5ebe6d471132b3148842735401d24ad24f2592d6ac10116e0d91eff81b8c2e105c26486da0254b55ad207cf461054433ea30be3a0020c84221907e79f0a406ea2efb3f4ddcae9c516489b92c60f860bcd628b408eb7ca6ad4c12a3225912282cce32a734742afe2412aa9bb2cec6bf1d7168b826e2552e87bad7690d23adf42153c3aff146070704cf316c5a59d3afafccae1aefd7c9a2b07b997890d4faf70efa0e4863817c41693aef323c8f107e3844f37d0dc7e1070d347d67dbb4df2454eb5e369b649dfa24ff0b033eb9226d5242c2316527afa2a1b28376029a249e498d2800e1f59fef492c3f723ecd9d4b71e7544b5a7fc3867a1d36b180e421bc1c76f023267a20809b8b360fa8962da59f8b16190b9aa38db4428899acf50ce1c8f39546cc7cd628d727e37a3bf18f60214a5da962cd00828af9e6be3cd975b1964f061208bde2cbd5da1874dba6edc2dd76a7a5bcb65d9e24e124bb69cfb0904001223e3294394107166ec776091621bacc66840d4aa31e1122317e0d05930d9bc6374ec5cc7c2b4edcd1ffbf5e05380c5b220c91fac57e13e575297534ad7eb06f49d0e288ada416519f9bf3c607fcff8426f7f8552e011a6151a13214b9f88899b0da7cba2a0b0b74523e14b3898eb6d36aa5b4ce39c8dd1d732e46f1418117a9065092d1b2d987e41c506585550ed490b826c67351a823f716c3f89679d8074db3b3b4fc9ff5cd7e5da53d639966c0e34d7eff893d043d2c9c29e228dddfa970560858ff6fd861c9d9345fbdcccd74c8851cd96e9a253998801ca4f99e98f0d835951b8ef0cb18375dac91e437caa281ed1dd9ce84480c4b948e9adec3b07424334503de7e912117f80f210ff37ed9e8a7d82ba7eba3eb0deab33920ed60d39df6b85facae86bec3394bf869aca22ac03cdf913cc2c0f493b5badf359ad3087927dcf1e4dfca9fc4673a24bb9abac44c445285e97780219ea55a12319e1caea38564465ec6ee5fc840edf454fb37707b54ca7d0a0f5225c26062912cbaa7c7b823c2fa33de9b654799602abd97ce9b22bf78b009a9947fbb678c4f1e9ec8dd205f9c0af2f11aa4dd5ce1ebf4340b14212b2d555731377043441f460b43aef1c9378a284b862ad772956d8286295758b9b4303dd5121453e7498a2ce58d4a43d50cb763bcd7e4c89957b11ef09eedc528a90b16791b25b87ced73809f2252215cb50d08d861a9dc4c669bf92a876463ac0e3707bf10df0be4c846ef0654822b3e4fe382f27d90c5b4b5ebb951b1a9e7d4939e1351350ec3788c97b06be449e063ac673e22dbf15586769934188883e0fc98db8e144e5e0267e8f1628870b248988c99c9a0f706c75ccc066d2e0ac98a9a8194687233ab17c81cf10b4216cd96b56732dee4023babb89183cf531ddd7f87c9d5d7c2136a0e63b0665c1a12b3b2ae25b778023412f64b8f415c698694a93dea50ebf7eead523efc15f2324fb580798ea1a06865994d50c9a3ea60d52989429de352c58b14bc84233d19d5d463fed217101bfeaad2f2e4bf445c98e3a797e1191614c6a688d963605d363464c28415558adcc6d20125b03924e6c98c3a08e99c0a9d583cd360abc36c4fda36558577a6a9a5233aae15a90f328f7adedebade4dc39024f282a2e9133bf3f28593397e0fb08ca5c8ae45f5b6e53267988a1c100f24584db11cd10f6acf5dbedcc3f09bf93218b9745d4e3396b25dac5c2f96fbec31fdbe29a2d7b88c922b146c43a36578b3e2e2549144ca6fc7e596366feb5ab89c83a39b0edcce3129811d6238c1eeddb62188f231f79dc05c48a5b708c3b235b8efecbf345a730a48fd033cc8440cc620aae947db0d20cbb34f25b1008cd245ad12838c2eab4fbbe972e65f9c2ad8b06199379a1530939e14c51914f2636804c496e476813b5302ed0084c72f3fd2d38fa7b3007c52eab6c493fdce4b965916fb2b8c4ddbfb332ec7bcf5ad8a6a53128c1b45dd36b398f20b32d3bd303c11f32988ba36cc46c981b4a8d8886788c3a3bb5c8273583b169ed235d25cdc786eac3d67b4e9da8ef5efc11400fbbdbed31a938334fc2a948cc2da3fb484e7b46997fb144296e6bb57e9c6c2e2800aedf2a843d1193d351d2448e0e1de8edc2eed4cf26f94ea79cc93a4c4b9575f5474cd7c5da21cef17bdbe7ff00f7648482db3038c84a9908591baac836b3a0b13684d3b9032caca9e9b886a00777d0f9e994dce18e39e5ed9bcc09b4c1a31f5c2ce959068a2123a1248de53180c4fa984ea9439932853cf5a01b1c17d61df19c8dad6e8d4ae3ae57ba1497321b604e2dc9c4e4472a8bd85a625b96dcfd81300af7f2098a7791764a21ab21e95dced899caa26be424e8133f01436b370f02080badf4d7e7156ea82689e4f775bb11aa476f6dece6c5ee6caff0a558e0bfb455e0e2e14987dee356f9beef113aca26e68c161f205c4830808e18d3987884845139680aaa9fcbf00e2b5402fedfdce30b3d5feffd7a3f8bf36e59266de362217a865b253cbc53dd1373a33190fec2861d9c029d16dff1f7ddc6ecb333a7d6f998250c25d3b0ccc656472913849c5e9f0b7f021815ec6de16652eef35f0840033fee7b21b624a86e25a943b1d6d3d780818155efaaebeb53333c588c4be57e77b60b8351ae0ede555a572bb9402efc47067e68d6cadbb5cc31d94e320f443d24624a8140638541e304ed6472fe968f3db9de6a91d02f3f4ebd30f9ca6ffb21ba86421cc37d710d4c1644e6ec0b9765cf4b61306a871655e8eea47c1741c0248bc1b8ef1f167c7f3e394272722b81337542c4dd7ca0103410a5d3eaeab0c2d9f18cb0b9cdab5e9e60e3e23d533edd9d02fb54b257a107c982baa1e9116af12e03a6edbf28bc406683939c1876f5eaff0b84de7417d5ca94de243ff55449b33bb5c510d3bc01896eb52a3167910d968f69a20525c04361273491a7e7dbd035b91b65286cc74f30910d9c46976928c15cf7fb1cf820dc4fae146112db91f19718eea8021e4ff6bbeae45429a5a1e13c521e9992ddee0ae5b3ad627fff5290c4980ac27e52a6f211a2c26df45dd7a4606e7da07a6394eec80f954328aa9370cd6076ac684383d10dd4029617ac6a69e4526a56cbd7dd043de704ebf914b144db2c047acba1af798b01bd04b92f5a63ab62ae9295019f1333515a37f34813ffe9af2070e9bf9a627fe9db015aaf72b5ac078ac8b9c6486a5dad67c0d6a15c6c7276df5360d71bebfd52d99c56b26eda9c35553d4dd0fe74ec5aab9f76cb915bcda112cdb316a3746fa815800e4e2b590bea2aa5a046c5c89c95c65acdc6682d63cc9854362f50d22aa68c63d42ba7eee89c04a8d5074b3c609427636b1b4037d6f6ae966676a7ac7f5418c085e2068d8af727b8197a4bda6761e1f987542319e6603423226eab816549c9b236778be08a8e990363e216b10f255965e66b463a64fbd610ff45e586fd7bc4fffada04e8ae12caeb1004a499ebec7c9c39020f278c5ed1a27b17d4126c8192cec235534325028ed82102fe303bcd3d57a7075aceac5739870a72b0ce45e5b4c6b32b31c005d1ac1143192868b886cb1dc37f3b72cb16ee89046a8fecd4fdb90918d23caf0e85c081082a7428d48c0590993f6f36e9776f6c961a50a48c1e3ff224bcc67b291f5a7866a2494c6043f6a535cdb5575bbbb042cf76ceba29b855298f2398a95e8912c35f43c9546da157666c82ed3f98c97348d3a1247a510a7c27b44b214970c82f1baace20df3c215ce419a3cc0320f87cac7ecdc4436a7215956786d41ffbf30ef0ad2c3616832f47b85b41a4fb0cfa0911b07636f529e3df966e0d259d963453114a728331a672d69f3736e0536e3cb364df73c168fb0b45e7f2fbac421f7e26bd27eec47ab1bd55cb0d8617186f02b84810e55d564aee027212f30433f96f956a65d6d42acb982c0b4fd39c1610179853fc447b2b5234f4a5d6feb1fd7567f6bf5d176d0b9cce26931256ffaf699fe64ee16e5b276a9045c069d552123f783ba76d54845248c79a787da251854c96ddbb23271db9286370599209e11d11bf810d4d2412faabafb988ad7cd7ecad1926c6bfde28f59d8a38aa089732b541b688617459cf2837db23cbb25eeb3324d5ce4fb77b72fc6f1d72729ff2ecc3d15a68d738e22102d13f58d556deb9ef3c9d6231da684521b033d21adced6e1e4250510865236a7f2f06c5092ee36076672219aef991cd14f2b4e9ef1c8926826814a379aeba4018ad47e2b6af708d716aeb0fec9583c9a4c487be16da1201e16c7d0dde610a7e882000f90d727f7246952e3d87ba6cdbabd374d6b038c890b2def30529886e31a13cb0a3363ffee2ccf0a0711cb8b0e6059231a2e6992eb1775f7bab17f72d99e50918044b9c01ae0bc0fd8009333490876e8c35fe5e018012c5316cfa3292de5c63b0a55039ed759ccde16b595dba034f887fd5dddbd3dce9f84ae8c3bb8de6d129e4ee7659837fe99e21ce5b289c5099748849f123091ab32c8e7a248716f7df689b36b643423c16688a534a60031913d77ee9c5f9d399f51633030829873ae77ef2dd1a845a5aaa16e913b3e2de38b2ba4067bee93b3428d6a0226db66aeed488c919e9ee56a4c434d1e2b3dedbc96f244622f2a83d84d1a855277050830d3f49ac2779ad05dc8d8e706791c9d6d26c2581e97d05912dfe7384d3ff9d2eb4b57c35c2c61e7546243eee779fb5d6769d3945d9a39c8fb183e7e6fcd1a11dd0ae5ee25e53db624ea54a426496a28de0822e01f52d272e842d3b134908f63f357e82f231a21644f820c80f762199791b2ac5261d5ead1a90759072be68edf1e5821fee78164e7b96428ebfd08a5edebbe3b8ac0a795185957553732a7f591cfa564546a5a9d47c26b82df5e67d46c87cd5082d24ccbcdcd2dfdc1671a19f576796e0a1f055d352d34471fa5d1a4da53aabc03affb40abcf13a055df501dbcc0fb482b328f9d02cc5ecaa3636f4648b180dc7556d009f09ce3bbb39821ba5c23a435d8ce7189981121a15ab1f07146cbac329736396eba065fa1e8b964f9e67776b11e20f7ad070bf49f4fc967aeaf3e48435614b78ca20fb0939289558dbcda3ea6918beee86e9f7bfcbd01b096dafa451f344b15b61810f0304c6c9773714f598dad167eebbd35f8cbfc364110a4b711f9b14280a6eb6f6ce8879b45156a98bfb569571af0bbb5af45cf3f6cbb1e04ce89b879582acf16b233498687255b00ab98c3b7f3de2b5cb58a06cc7c0420be74cb89ecaa1d6b0cc20af554efea69006cec7759c21082c9eadabc536ef0240461bf238ab093a9c5a1f68e279c1777180f6f5bc9bf75682a57a66dbebca3b8ae38fca6ea867a555dd1dd2d5f299585c117d8a0ab83a7244500a04666c65596dbae632a107d492f981d2ace0c9d5d871d19ad92059ba1a97e0b47ac279e4b92933e74ca90cfa13fcb61cea7720b979188bbf24074f933f08bed782053557e8c56424975b75bf763cd699be5f0c9368865427e7743f596f5dd368b69bcd3da7d0319a5071bcd35a705d4022090a40981146edb08c195e2ff6b2d14cf6f94cd6e37e8d2ef58d85f9cfda38c0233165dc5f9518752d9d6f76aada303b8c4a41f17ddc7d8124f68bb0b6879eb2b24b193c9014b3b7d798494951f86cbafa24f51fdebf6efea6799038d4de37ed1e2c28bdafbc2f951c83acb8164aba061751733a08e1bcaa8f586491f5917b1386f7b05ee5426e4f4cab5e4c0fdca3ee9556ceaf0905780d7c4d2c0fc5c61e951d442180f5613e4a0baafc16ce32288123639df175b8721fb92b7ccf6df84d7933805671b863154bcdba41abdd390e604d0a7a9341c2aeff506c72af31a433dc73fab7f34755903403c1f11426acc939772bf6320442e7d77b2a4557a16a7bf8ef8d66162989a6de8d049b3722cf3c9c32ef8cb72925d13d77de5f0672c59c7f94d390375d6f698a86305e80a193c66cfe9079461e0f066c83d81d3750e2b449393e6d4828ee15f93bf4aad192fefe094f35d47a282ff68e915a7e12e732dfaaa6680b12750f9ab4c6e6a1abe109f1c3b340a31a435bdc17748d356e93dc38857f14bfc10a378963a2ec89622e4c3d3717efc92337f15c4253b07380dd3761975407cc3a1eb3466449b69652a604d74b2d0a1d41cb51a414d32cbfe20296652274a7df13f84331146c9338b0e439797bcddd46def69ad4879c0564e423e3bfffeb32bbd10eb52c9893678557cf51a32a4c37b5a8f865ee69da9cd4f5810b7afb5552254c64826027350f06ea3896bc2a3a090c88292eba7ac12ab112b0ac0efa6fb7ccb6c4fa8fb5894c322bdfbb65a37c40a8a8744b3adca22cf007799e89e085731a10071f657d44b6fc78cf7dd3a19127e405daaa3f8be7da6a9c2c5b4315eb9eb2c975d4c382aa3f234bf0aaaa604ba1522920672e7ec527e35f0e43d60a36d8b2c62f8f267ce9a51e3fcf0e046b31406874fb55d6d9785bec0354fb8ca7447822347ca1ce17e7c93d87827d1e958d8f738b95437f94270fa0b80cc57397813da33543aab1a10933e7d7c2ecbbd68f6149181f3d4a9c0e198c98689deae02f9330e55a65c7f9bc3f3adce96f506ac48dda1aa43cd8846d5abb0c97a910b4cde71a842c51d61632df6b549be312f600107e8fbe2d86b2247fa0fd881246efca48a743f90b0a825cee2c580cf1f5d9e80f8ddaaf69c7ee0ad96c1c51454ce0918f0249565e7fd98e784de4564c8585b69ce568e3036be063de71cd7bf77e4ea9d3b992cf0d7158d4b834a92533812b0b838333563c50e52dd5498112779ea1891d6f59c96652556ac0959d11a66669f88c6d1e1347bf1f413b6afcfd8b399030ce24ff598d3385f9c5d81a926283261a9aa680c397e700e0cb32c3b58d19fada6e01dfda3510b178b771fe5406fe5c8d720be5ddabf97133f942b75c6d80483a7fae3300e85190228c207b10e38902ad69183130bd30385b842b0a01bece116460c01e20b32f61695140c924fcbfe7d7621757d0d4d6826a6f2127c8e5989f34e0a5ea25f997f3fb25cf919ecc706b53ae615557a67fbe6dfdc90a5a4aba1c08198bd9412b7305d26c0e2e43751d1163630a8549ff179b17ccc3075315be6ee52c5195680b440c84617b66f57a2b0b33935ead19afac8f1c8574fa13fae55e0be7c62ec938ffe7a2d4e851e6b2e5d25e54507e921a362563348621d47f79444e0e29232257a16e2066ddce9fce402e6b84155f69f54701f5b668c898e6aec6dd0de9cb03d4ed39bad5da73a36696dd6c6df83b0f994cb0828cb114e24ced263addac6f9f326ae7cdb91e5a6695ee06e0398b988a2f8208699548bfc2ab181e8c6036da1693fe776d4858dbc09cbb4ba5e96f1eb6ac603bfff4fde33daca61fe86d4de2b2af0eb5207ff9fb30fe54dc1536ad9ee93dd4dfa2d8b0ac51bb74b41b69422f738ac45c2bd05699a5077800f251e704e09e65cbbbcaba269906e23823a033e0a9c32f50b3a09583964b70984ee655c2da43d08c84260a583570e88444306b48b8b807da545cf3ca72ef8dd9f7c62cf339b8d4db0099b13eeab3c42028414edb988de3c507fc88eaaddc214eb6be96b2a261cbc4c0fafa7d6bf9436f6b0e840962510fa1da68f87d0469704c55ee83c77ea0f50b207e9664055a0f5371a0791bc02b4cf087c5cafcedc4f34210058939888bc0a9ce845e399cc2d90f792e657285737ec99ad34e1a41d26c8dee303e0f0e97a1c57b51d7b583e25f7c57560f695e88fc7d119e5ed8b2c286b9835079efdaa3f5401b7b6f34db29ee889c2a7328484cfa168d02571c5f025945686b3d3bbef8b9f26274c501508e13a60e4596f2729392a480594b4add787d052d9621d76101a744352ec582741daa3e0077763dc92a5a3d8fc374fe9ca192a20d508c2d4954cff770030c0b13072dcbdf27e4d7fc8656bf9fb059bf5043298406621ec2f95a12646e0bf1e4948bc20f77524f7ff0364f4e70781393291104032903dd7616b3c39ca2a44fab62f77bab413086a2d38abbda727bc4b85009192bce743fe2dde8c8a9effb7b3198a390511eb618a05d63e145a3d0dace22c8db750ca932b7501ce5abbe361bc883b9889df44c9ebecf6ac3fa4e838eb883c1255e16b68203fc9d2e0a4f1740754883fbf99c66bae6fb96d8cc476b35047fd5b728f6a5048064b367a01438e0333e07558a1876f9698fe842487cb2910f30a4e98a22c3d0061291d979a86e43842c2923303ec05123464f40f5a0ee88f9ea6b14b8c0b355d768ccd9258ccd0dec1bfc33ae7c2df3d4a83676f4482a5e0877f02e9c0564b705c2dbcec10022c09d5e457b5ebb474e8077b1535cbb25758d49c4c64514d392a61207e8da0aeaf2512cb7d5bbb65b2f2918bb18a5c8a531c59afb306afdeb0cf0faabbaf7ca97832f244ad9210dbcad6c3b9723241272e9a3c29ac6c7c52f92f4b3733878e358bf425129b322c59563745b33f053dc4a0228c8facb5d999a2156375a0a0eba4924bccba2abf15ce258592b3a6994ba7bf42863bc7cb0a770e093f286f6c8aaf65b3c1afb8bf35d938627e9f82d168cefa09853a96aae37e7fc718f45c2fcf0ea0004d9e2cafa7900ec2c53d40565a1ef45c6ecd830e314117b7da2ba204f9630579673e8b7ae4feb1c514d6817c5f7b8e11e2f93216aa4363d9583b06136ca6f7f24c5c4fc07f3382d11b0a73142f70eb0386c3f2b9e6d129f3be8ce2a89e806c8bf3877a6018d981bc8704d0fabd2e8cdf147a3668f7cd3923f9c9b3b57174c5939db1356ffb17d6a279431b8d52b64b9a353f6360eb5172ad78578b3f37acd29f464ae3e7b6c77b04efe5094ed0665defa699aed27fe7819185b60e37fe0b7692d04aa3ffaaa79c6c3380e415126e58b38cc66c7a617e12c01378a69622c3e4bcec0b270ddfaba650b9f44a26dafe65e0e5f3b059d1f469560beed4a41911822bf27fbb0b2fd0476191793061f6022a304d8c0123cd8834b0230c05757a2251ebd5b951ca4602465da1e29e144a239dedeb74ddc43eff8cc00f01b3e9aa0e218326f431ca9427b3435c8ea052740c57e2078376c96a32a78892f0018a908f3bc880ee621cadc75bf1aaef23308089c8c6e0f10b407f3fb5eecddf1890d324f78d0b006061754bd6bfbc2f9d5f6b0f8c7dc60701d4173654f83b36551fe374924978987ef97e46e56da527baf625f38da1e888b20466095ef112514f7cc0a85bfbb1a839576a8963051d59d68e5d950618d70a1bb3e5f91a346e932d3c0a7a521842b5530d12da38d53520afbc5e95832883a164a1b09666d4262efecd0444cee9c3c5db825eaa5b4fdbd7f0f342645b2aa3321829ae00f4ed0c7636f08e578dcbb2b5435669a1515db6f4f4d2eb519baf247db60eceb17c4b38ecd10ebb7d35c212c3c0a80f3432bc6acff822069e2a9f5a046c2f863318a7afa358ab7a1aae845db2c79692e4c9a85adcb64c94fc916d74e80c516877ef01d987540afec0cd8e6d436b6d2d685f89e69121c482006d5d9a5d396b0e5abfc72ba1daa68039744c6788e45d03d9369943a3b052dc6fc3a7e95543ae5e69f6d1402ed45fe49c7205f637288e66fe08bad682b39a8400bdc28a15055d6211613f5c5f7fcc22dc5246a64e9e25d458918beef16373fb98bf7ac79702d065ad83be9d2d4931f4a606ff2bfbf40924f019da5de97d58768656fd915c40f6e2846fefbb6f0de5b7281958ea6e4cf0bac2eb85a46b41518f561c12230953c75f640389e33260b9a3e613d537f74fc7294b475222624bf579f30c22c21ba96738be2615319ac601875276094cd03622a9ba35955cbb0204a689a7fb9053d0c885cf2553623bb11d2234d42ba9c5b50ac2c2c9fc63636c127161ca76d02696090f09b416e758eed61ed8d07e094d8cb351d8f6d9d65c0649bd308eba658cafe1ac24c6ffe515d98a525f0d817f613a676ff7b0b5e5105afe2a961d8cb463fcab0169c42149b5018a2417f1155f326d05fed0688d50787a44aa4affda393b13314cd2f75654b4d89e45e34f4f7cdbf1a63453f5d555a6dacaf73b54598127e09cf38f7836359d936d5a8399f92c47371943f5619a136aedba4baf8ef5e6c5330365646d0700b4d81d6d793738f909c5649aeca0c61c2d0973715d3329f0d86e37ab3e7814cf02773f4610955d31092cd860df9607dc90c36ed7d55ccd5e9c7ee8fedc8a4b1d320a3a559b17dcf7f445247cf4eb86d2a69a6372536621ea8b0f39ffad39472b40514a04b984be803792e82eb3bbbb849a641de54a4734dd64bf47ce3719e733cd7e81104b8fe389bc7aaee866ec2051a0f0c176c821fb136765203cbdcdffafaff445bda92bd3f6cc82195f18c2024e4f048a19caf93289f49a618b2bf96ed68a531132f95880fd13e2210fd16af6bc277375e9abb90eec580e63346e59230133b535925e0bd6e0f2a383beaa89560ed07cdacf2f04accdecae663d7259637686389181596dd8dd8a346de4e2dbaf04a48c7ee8904bcf7d98e4efdf7cb9c7ad352ee74cfca61d6e7e4b3d74f99e98da0e6e1f1bcacc37207604463dfe3f215d6185e3d8edf1f2158c93855b82c6f9252c13718419fde29133d30f8464a12619b045192ac0e01ecc280cf03c4d871134702df39bb3f659bd58797ab97f142b04fc698289ecbc3263ac04b4dc9a8a3761bd3d7bd494b3955f2f1fee2d4679a3736a1806a85e677dec80ada65032448a9c88b158fe7c7aa1548edf6c71ef8fce391837c748585a5479e69ae16257090137bb6e8c8ac16bfc6abb9a096b193a01f3bf5be69c0fa4f483def379d9d3c8d7e2570653889a987f5a093c7fb11c391c4a43a573de8c40109ddbf0770bcebc92027afa6b188bb9ea90280a7605dd073f81687b5cce5dfb83ac0796923eac496bcfec080c1de7348c8aee7ab662f750442b15dab27b5029cf6834209aba76e6061788efbe287f54917f534766fed48685c52c4f3bf9a74f28e0f19d2482d0b160a95fed40645b5d2e4aaede9bb5aa4fc962c4b09e143745ca2bf9e5ffa67825a866f0b90a8b1eb7ee5b8f563981a6b48501656d2128e20de738a1dbb33a34e8f35af261c7d9801a110627358fe667b0e228ad65fc9f089d74c01d8c23aed96fbf548c56db01ee5a937e20720a466569b476378fed295923c8ddce7c72d7d000fdc2eb461ee369a390e4555ea54c4ac665131525c8872c72ee2bad008f504bf9aec453e7718dff24842ab56d0b736d4bbb8619cb5d94535f1eca74997cf0c68d967df8fd002d1f68b35beaae5977049159e6549c9c6b48e9ef4a46f2ba77696d3e8238c0e94deae75c0be98fae7030bf832472999350e2e9bee61d14e173eed4007311a84026b753fa1fbd675f010d6e1bb6cca84e5ad4010244df3ef2858cfcb2d76f4e21badf3a4d7231ef85b70d58fa62aeb8625facf3728cf202765c8a3ad93553991442a873e88b8c08a32479b6140baac2b9cfdcebbe41d4597b40a084673983ffd32f1e910d1c2d5d2d86816addc6cfed7aa7beb32b9924b35278e12a1f783eab058a74467fba161c7aa3472fcdab5e5caab5da0e54f8f915cd3660c2c46b79215e1555e519a66340b7d97e87c1395542194757da580a2c9b94c4b3d60a18e7aade81c5d7d7f2843569d8b1f906fa577be4839d6fee8c32214f620f520060e552758e0baf84fb1e05ad39309071fdc824fe0169bd6a4052445a1d257873cc3acfb9b192b9a0f5124616814f1937aa7f8c64b2d15ab660493645d9730081187878615fa79d14d72d7d39da49c862e598b7d852aba1f762f0452a6c4c02b2a84d92868edd632cb081e560a2f29a76d566e91e096d2164451b345635301df7b1f7bdd0be800acdcc207dc32467393cb5b8a010fffd2bf0c70e4c858018a36e6c3d729223eea7cddbc4ebc125b45164110b9df2ffccbbd469088e44a5927f3fb9bd267fb51421e4cd49fd4d5472d7043d6ecf3d83f135de068b035fdcfc3652f074beee125a32bc490e846dee8cd478dc1f0a595c522e805fbd9a0e31389d85931cd1ec77b141bc387b97e36c6a252fb67b62ee70b9ea158aa05d745cdae9c4646936f9b7ed8045449de3bd413673adff1ca5b9bd18d6e27107565ddc45287c4b6fd916dbbdb3af7228b80483bec3f2b84fee1ffdd0cc65e26342d27f080e57cab2ce7a7492798cd28c3948e578d9a8bd6938eaf3bdbb884e8d282a4d2f1eccc626eb6a3f0307ddf64225b0457af927b3b9834ef8e3cae99b5f76b379d585fd29dd4339ca0c9129f9e13b96a46cd1beba69d08775f5feec6c5fb6ddcdf73d0482176a0a7870d01554a4c08458a952555a3d3b5aeea84610544b6e664d58ce9e95be7d54823cc1ddfc4da404ac249b9f9812bbf164f84750b9494120cf2bb0f818dbeae4f6349e4135df25a66498d3162eeb9761f6dbf9c315892db55ccb73fc9780408d5b695fe0096fac6379e04db4ffca19abd73bc87175ccc567bc20f29146ddbffef97a1a8b43ce405f3770cd105ce2f17b5b798f1d8da4fddfa83d2b055f823005f605bd264eb1eb166b8d1d16d1a7669412ecc62c1b43a69e70e313526371317b6b04d5c904e199580c2ee911e8b48b7da223efe7ccb236b199e88fa320a95e7926bd90a5fddc907bcba3a14abd1d497b5bfaa6c368ddaa0030a836bec18a9627635bc45f6b62d57c8fc245a4161553991d746b91811e81db2b7a687fd8597109574a73236ff3aebf52a1895ebb4310bee8f5fa0233745b899c5c569de01e6404fb3d215eab630c8903a665180a9d8c0858e1da393241a3965be88e62e956e99b2149bfe6fa6022bfc09cfbd3ec7581e5cf41b5559ee0f2d4fa8d168c3916c132f6374bc6d8140d421cb76d806b1b011db2ef7d54043c4d99db16ab3a1ca896c29d017345bcfcd0d2365599d4c2be03b82745e1b959ffbf1da66d2d55e607993196fae42734ad618cef0749980cb4183e5ebbac4d23ba021cfe8ffc680a7430a43c612ab27ddc56fb2cfa33580ca068ef50cbd97ace1660c8b0647c6561242d346296d8e188a929510867d9650cf5820a868536dc99aa903c48a7bc3bedbae95ffdd2dbe0f2049f65ffa1c70c3885e1c8fe3aee7f5c52188899942efeb3961e6cdb6636612c8041e6821dfa9fe92793b61db81d96d7ab65cf6dfa37319a6ecb6556926654a341d6365393ea03f97c150b22c4098a03029703a594b3791367c17fc8a8bf56f7186f6fbcc714029d2997f3915202e011cb4ff4cbaa66b375d14db9e59a6bf77950b1b27c977f78a16faec485a713fca2de5f5e6b621691141490cad5178c1d63d5782c84dea29647379db464d4bd6d7d804d8814df761e581c5c94aac7b5dee334bbf687bff823efb77fc53358f57497bd7bea18eb3ea88960a852198de6b3a2cc4ff94c47be3871c2004c4286c2260264a79986d1910f2e87fa7ae2e58d19f8053945e4304c286e83ec9647802f146c716c7253f8f7ed9c7bcc62691cc8d79d76d9eac6f907f2707c1000e29925204c01b0bbad93006e77d68e576b87807981900f869b1fc601b67cfb6e950d1be5cfec6903ebfcdb518a93f444305b8826260fa7a607dbe148512617fd8ac349b221023ae0b0d9fcca7dfa99f2ba37025842be21c910caa434f21b75ac91fe7200ee8168ab74c19bd440385f749f8ae4076945c947d3417195bf4967779d73607b3f500bbc4378f20525482a985b1625b3326755c6ca60f478a009474e39ca297b33dac01028a0d7a4351609ccbed973d5ae7279d63b2e02d48afca42630d78e06c17ee921b2587f2a6bbd9d233b6ecbe90a51f9d3ed3d53cd9328777a7a3bd4a947b0d3245ab587cc3f7bdcfe537af624b1e1e15c15504fc5aec3a5f83e996959a20803d98f159f36ff680af1e4342f96dcdfc06ab876ad3b6f93103945edb06b2545b268bc97e55e74e353a0a9c5d93f337c1ef4e99a7a6062b9426df736b61dfe640bfc19dab1822aea11b06f639458d80ce62628ff1ae2759ee5049f554495b0348f7f6498b5d5574bc354633fd06b2524ec1d2e2dae2f9336d4b05c32db247e56f8626d227902975cf0fbc17d85eb330773623a50c8c49645725d3cc6732541efec80e77cdddeb31791afbb457b9267ff13bbe8632406ffa2a202a025e8597a906098e88d24d6880fc804e821a6fb7571168fd3b91acc2ed6b10c3183f2067c1ae01fb54a5ed7cbd13192837762fd2edb66938e86f8d4679d0779d610baf86a54ea2a393c6e5873d12764c783f13efcc775a811b1e91f5605715e38177747002525ecb37959a5929aa8962cba9f7d47d5e2e41414497a5a506c078a01c2a2ab4e600e20e19d271df4be1ded524e5ab344b02ad6f7ce017e69c13df4e319cb1edce608cb3eaa05e47019ac4c8f4cd1636c51965727c27982cb4b6e5894926cbfc3d53da6a76debef4a49d4dad5ac84d6fc7f73eb3aaf250a718ea0ff9f4400581c53f5a596121ab9eb6dd418e2e47fc2a3b9afe8607c86fbf7970c1bf3c9b31c4c79d17d5681a42d80a558776475f4f38d84f4995325f0db35e7653598a3c5c56601bfc2fd6045fdabb117b13f422bbeddc17581cdcdff12553168d77f71fdbe23c92580a4906b7d0fcbb864bfa78490a422b0c1ff10da3a95b3eb94048becd2d7b41d770891c556fd96699244746611fcc9bd63cbbe463aa1989ba745779501f6e1af0183e649e5f8ec86f1e1ab449e7e1a59f7e5752efb5d1eb9ba3b4fadf018bd701f3b8cbaa00d6ae67d902431942bf27028a32ce35d9e0fb808b54aade2a8f56eda5dcbcd5e13abeb6a2712c2305f7179c5de3ad82f271c8da10ae3d6e0b010062c534af45e07466fd5411815f0572e5c4cad269ae88a64d3f5701c4a29210a5e1c311ee09dd6b1771a09a2f42eecedefb2069a5970d0107bfd798068eec37fd55b670ee6409c91dd1d8c0dac34b572f2b0ad562a8aec6ca818488a842a5311271c174e446cae3ef14d1d05d4a949fdc468692c3e3f808d160d876c2ce725cc1f8fb5c6b4e61fe659d6f0a6f563a7d3ab4ba71523e7677465d375c049fed01ecd29fd0cb42aebf5ef8b4fe06078b051cc60fcec40eec3de3da7b5955354de1115a7969d135c2ef45c286782d80568f2f48bab48517b4c1ce98047d35d78ad7413948a8dad3c574c6791e3e29404f8a0ecf11b72c451e588a6c7dcdd6783b7a12e85f7ff3315d61c38c1240e7a90fe948aa3c4279e9f60203f0c3d70347a5ea7255dbe389edd02868829cd325f2915b058a9f31f5eb0b72c3e16599edb00a3a69a11c0201c59c5dbbb72d740cb03caebd17edab83a817b8f38153d5d20302be70715152e4c999d9aa4e67e2f1f1d8977b2f2607b830f13073e010b859f4a642e961804e0dd1d960828c98aeeee5635a83860e261a714841d8b7d5424a0b654b68b5066e58f6788c285697619e65d344c64dfdda8fd3f59768471aed88a5970a171d6fcda1cc8236f155e458967d07a7553bf456c97d4703cf2418c1e2354ffe23736bfda9fb8a63946e89ceb966aab823e2beb5f08bc5d6c3c21549347307171e873132fc97358daf04a73b9d2ff35d0771a12107207a6831794167dbe69a8e864f465f3acd17fd1ca718868eb9084af217f53fdbc2fed3dbab8481f51b3548f1570d3acf937880e437a5084e66db23c1a1700649704a68cdc0e041f7d27c79f0b9940f7354e6d7ccd668b76f563f047c74ff3bbdc094cfb995f42ac5d0a633e9badcb3ebb1e3a4292ef9cb40ac13fa886bb8b4e86c3b8d2906feb980362bfe57e4d18545fdaf6f8a23a11eba62535b1b4becdace7c3c93d8ddd0941b424d36e15d719b13c042a44c9ea062cff13ed211be3dd6070603347f006f88ecbb0f70d19728d61daeda44b07a199765fc97fc7b629934d59fd931bf1988d1ca9b7d169e9c95e9ec4f7a987a2f7871f7ff8112641ae54466267d8acbc8007e5957e8c8841c9539cd3730f5072bf3f2b31b47828c565c48b1f8123ffa7bded209ff398b775dc6817c09b4db699609b9fbd2da98473df113ad6332f4cba1fd6c00205be8e1d9f66af01f657a81423893d746bc0d3ee38bca45f220b21fb2db804ead8e070dc9e926b12b4c9e870c71506f28dc669e0568c782a7bd66241803faec7c1efd0f95ce61513f01d83cb73c2ddca2c8302b9de21a52272984c464f8a28f058cc92e482b281c4c106bac3da29fbe9e7f4eac3a4894fb4180cb0cda70730d198b4e175fc217a06b3003e554eb84b2a205cbc68e4df04f3a39fb5a84fc1281407b8de29eabc3bf95a290cbf66d9e8332ab330444c4d369ea9d4b19550478c43dc7830d00c824cf2c2d9f780e0d0763a17ccbbe40e302d554eba8ebfd525b5a9152c535db1bbd5862dec0be412540916fcb1da8640d9de83dbe4d9f36376582cf7cd07b7df00f972c1260ae7ff18348cba20f8bf2b539fbf334c36ec47bd721f47ad0c6d62656cc749253ab7b9e9887d7af18891567e38ca78696da44c194af3a4514101c9c3e07b9c3bae0feeb93ee6bee6d27575495bbfdb006658e686f854b2e4728483e6ebf82cec0e2ec383b5ee36334416849b698465f027a0055868fe3f2e6631e1dcd2930c7e20a791cc79d60463a5ae77adc77a7c1b771c965c8a9e2d2e734f597bbded7aa6602630c9e9c3d4e080a27cb371d620d19c8ab11214058e2a21b2f90f845c2dd8f94080afe7378002d03929f418d91138b3035dd83a812ac3707e98dd4085155f60b223b723dcd1ff29223937189ee8dee4ea1e3a87f7d3bae4d735ac7a0efdb9aa0945c0d171173c4d71b2f345f65c88fb53e78487a12bf9056ba9072a3aad52836b5933c1211abf0c99da97170e774a21ce6ce23b9576c2fc4cec87a791e3db6088ad6a391c4684d7af43d6f423e33d2d3b717875e205cdc30f6efcc3801d8f9d4b3e1ecc6d587248bc2c5a05c6262be0f1201856b9a1e41f044bbbf0c5570b941e4aefaba667ec609ed56acb13f36e67e0bce21ff07d217eb6173d4a57ddd71849ff20a6557bae5e9830f009bcd85c55d02fbc962be4b995077717ebda20b4c42e0f4266480ffc90d3a79314fb18319a2dd39936c2ac6b967acfdb863d756c0a0bdcec9beb3d317e37074f08df4de588e11fa91062d0823f750c96ec777c010d96f08a2da3a0242552bb1ffb0c44da865c19c33694158069d30e50de4daac9212c348d37f9803b792c07b159242d7e80bc71ffabf4364dc606b19a361bad869c800ab2687a2821472715ad036be56564a9f1abfebd0610567892ed2748cb1f3c02ac2d38c506f96a5f5cb6196e4a12984671af4081ea406c748176be4e442318aeefcf2d6b9efe7c8fc14124038c4e543933461cbeae17bd2dbcaba2d8ad6a86ec53b2e34ef893e7c3b4ac8e8204173e0faff0e1629e090ae28fdc3cebf6ea701a43ee3d3c9a4062ced45405ac2719c964567f3d657fa666a8e53ab75cf5d7b60ee94c2dd1e6a728edb2a0309516ab913055d6955a26491cd68925b30a9795b27f4959f6988ec4ad6033c8c2eee8e7d05b09ddc2f7113809eb7533686c8c83f0490a6fbc001f820c6348f699a7333788e08db98bf2246df11986ed4060767c4bc4f6eb0741f5cb73dfa3c40921bb57f9f54d8c904ca3c9074246a780973590db4f4ce70a1b75fdd23b74c9856de8d744b7b1d1b6c310bc93e03276e51d5e470daeaa025a66473c708c5b82d85f19dc0dba86f78fefffb75d178e0efae2c9f4c0dc07b05039b1fa72f7c8b393cc8b62af031ea727535bf6e0e3bee646cfaa9fa9c347fb1218ab8d4c9b02c514a1361593052e5a13f38fd4692732f5ae9d7d5c38e566655127b1083c5389c05f4c374631ac2384965975373c9516013615f5fa9e244dc9097032bd37d77b1f037b845b903edd55c6f1dd3768972a0fe31aa8ded56cec5c9e7e3b315f7cce7ab96d6c1a67675cfe98feaba61ea8da82bde396140fdd057f22acb0c5595b20f93e51545286716d87b40faf1cf371e26ff36c0ece82c50c3e32e2d69b30cf7aaadaa51611e21a07e59f284fcc71b67a4a3e0dca987103d8ba322d783a438dceaccfc13227987e99403f2b9d31215001d5b00b0d768c34e81e3b2259671a4b7a6bec46e0ae151f4525c5ced9d4c3808c9939ecc79577a27e3c460d0ec2aa562c679c19345e19dc000b8a065938d8695d00a1b3f06e601c4483c9e57b8ad0404df93a0a29747f9d56e1bbee9a5c4fdf9343d26b0e634121c18de40241ca82f3c80c390b81ecd487b8e49e659a195b27cea041841235538f5c36f71eaa3548cdd2ce700c04536654b1dc8d4074e0b5b430070c55191509161ac82732095448196c122b97ac30d9cff6ed23f70af67d0387bebc7e284aa3a73706df9d28ed5d3f9db25882c10db00ab1c5288096d201b7fd0e852b52b22655a38a35421c507954fc5f35634983a7fd909240707a20c136e560c71d8e7e02ca697d6246cd48dc37d8190651c4bbf2bd1d5eacf956c7367f7c6da06465bf7e28f6f61dbd107b469f380775b62ec2f7bba363eb364e7d5775ca7a1d6028ec672920416b82930301a859244e340f7c645138a4c42e3d635cc2f2dba4ccd71c3cca75692364880380fcb23057f282fd7d384d376b45cae545c470945854e35c3fcbcb8e34bc0f61fafe9d0adc967283cdfffaa6be2ae8a88ef587d2d25f74b5e71d112d70ca45898979e286effe92868e53fe8552bd271df127326f50b89d38b8ac229cc62c87a9b43c957c29e98f5829915c7fcde0ba1f5da43278e62e7742b01ecb454696cad58d3f0384584b24479066c8c759e3df719195f57fddc42eafe87f2f671c912c86d32f7fab4b742197ac4d87df12d7951e21598c58fc2659cf534cf8d60904368abd86f8c1cc6db19f85bbd25192a8495435b93958c99f226c586bc633fbe6b911f4419cdb8b0d1babd4b1d4973854d6eb198aef9445f87af38f7e4e62cc84315fe46610104b15d97cf29c0bae2b64c9dfb1fa9753049345c1231cb5409145fdbe7336045974d0f5e933870ac957695bf19cdf07d5f3ac36fac2bffa9c7dcde7f7e56b898aec6c9db910b4d722a673ecefd726c0f589f43b6753de2fee0438e93bf0a71af7987bcd212b3227609689a215edbd5d33e6d0b359bfab00f656f45a2bb9a0c0301227c5d836f98f03f6a0c24a89779be40a8dd94fb46c65e6723326464a46f6219c7b4348bbe3c02d9cc350aca5249e31217ab3d6fa16a852b282b65c7e4766fce486cfb74059a01f09b675ce1207e7e5df30467a17b8bb858f0cf0944193dc6debe1f1508637919707b5d5f131e9aa6642f686556711d82bf078f38299c4b4559eca5a80726b85be5b7639538b77f4218e824ecaad743824669de17ef2e5ff0f010ce6c282da924c89bf05ab400a59205a97c3f1a1ad0cc157eb1a1723a6e5939b33515e93fd88cca00e03b8c634f9ebf7a155cc9a63227dcfa84679a9fd636cb9008c83a0299be279526a1645e6c391ecfddd5be7db08157db74ad37563b6907ad1a55e1e90b4fbbe95064a9674169a1fdfea56d64ffa7b1f7d414605bb5befdd1c19f95b363bfe209fd27691c9670adea29e614e36e121444c3bc4aa0b14885d53e2678e75d7ac38f7febd317882410c383cad1da6eb70faa27f77aaf653b1ab5ecb8249b16bdf8b1f1e7380bf4860b885b3b7fb0075a88c5082c02c050e2951c1d246b9c66fcdcc7cb7ff76fbad969aeb80b581299d4f7bb07dc5260459025cafa86fd0455366639e91622a9c808254d1e3aa064ddaf9200faa3d99a68b807777e0490ca785133db541bfb23810b697b8b4e7012ab2ca0c7454a13290249641e1a42c8222a8e1380734c011e03e2ed2d1acec73cf70ec53512306c71d74667d6a29014c0b355a7599fed110b62565742a1ca47a8d716d9f8873f19e68027c9a5e67a46357c52751961f17a3a9cb0d39a047d090ff9dfb4827b144628aa9e80d25c12f5295aaf136306913f06a5439edf7a83e0562b9d6927d65886448d6310d62f2a251fca9433f334970e73a926f6c75dc698760fe4aa3ab4f03f7b672f4cd2a8a56a66729698f5b6b7dd4165262292ac39723f9a046168b2840460ecda2e5dbe85a79249cadb8a071237b80979fff09721b4d02dac055fd55a28a73f55422b7d6c50f36c6db555d3d626b4c9834609de9cbc507b2167a9815bd6ef887f25feae5c08f617e9466327331a9e127379947bd7604b095494462e68ddef039d787a847c2715643e61e54d215b719bbad6221859b4764342381dc81ea0d204d9eb480d987df1a3c978aeac3927745948db2c9a959804967378dc7f3509eac12e2936b36f71bf82a4a955e1820b0e40dccf371b2d72483b2c88c2139ced8504d64168900c7d2593dee263a09e9de2931f5d1b4ff7eaf7b8de3e8fb58086a39cdad44c28bdfcb6798746a3c0badfd3bb56b5d35575717ae026d16cdb6b180c752d3810258317075d146b98f2fd4f7153865479bb6d12bda4ceb9377bb780147e5c10284152b27f4e5015c92800fd9bcd45b5f0d9fb27607f4c4f41ec57fa411e607da661b281b7046d6fd8d8791f94056169d99d68f0357a0bd01611d9f958146e94341dfbbd77418e402d83d0e3858f4bcd2b0d45812cbba4b30e3f4c87b2af394c17cdf09d2104f93ef43f7f9636f4bb70686baefe0f16b08560675dfadb48d41bac5dad0e18fcd14e562291fbafcb9d3a302b73ed3d1d5401ddba2de6bc7444d36716bbbc7b410683cf5e59cd222265231b7572ec237a5a3fe66510cfbf91e92c401a0e086f7daf50e6b8a55707e1c778eeb74d2c75d8affb7aa8aae9da60a97842aa36edb31b0ac090a19ae4ac137965337ad46a434e0acd96b1e4e649b860fef9053e11f4b64a0c675e3fbf6562561122c4f3096a5f6311750cce92ff192144c8086c387adffaa4e36c8ab3b57bc1b564280ed04daa6b6c805441c1ba975bd796b45a8ded034e0b183e3e3f153f5821c2784da95c022162df63fae17248515204bf23a5e7d2ea60b9afb0bf3ef3e7e75282982a28979c1eaf384e8c7dab03cd52ddd12f89c79d79ab8223895aa311d82787e13e24516f58aeeef9c27ae270b2248876e8e4d9c5d5314ffda914c7a796030c830fb297302c58921a088532402a4f05b7ddfe75c6d002c4f7e605cc8de62a7037e174f044278721ccc981c6441a96c49728aa14071fecb93151acd920a0277fc1efaf255744aaaa7ac19dd95b94001be0b850c381ec35cdd2a37c72c0d7d935b990be034552f3ea2b2451ef31d60e193a8a799f91d4bad47a0fab2b0d28439219eb64afd967db6e60999ccac0b1743dc3141cd84a9cc8cc436fc3adac369dc7c00e1944e11a02e1e2a81144618c7076201cda09a1a39f48e2f2dcc0b38cac58110fc757202c21597afc04132de5847863bf99330d7b293ef7386b925d4ec2e2533c4c4c1bd61b5e2a970a5465d8ca566e9df32fa20ed3cefc8ba536cf963eeee7aa2ee50bba3c5fad6ad53dd96d692cf72229c6c2bf29caf75d08e0bd1b48b6122efd3d805fc28a470df6f8338af232049eb33ad508f0e908359578c50288273cd0ad9697e5c81f916699835ce9beb87da313bb10488a8cd15863ad3422f438426d2561d63ea259f0bad55f006dcb00bbd325553ff26984137dd00ecb2d3d47655f958a8addbd8ff50f905aef902da36f9ed7b47ce2e789f798a64f9fbd37f9ff85039b777f4bcd0a4cc1f97c70464c66cd77ae1e6dc1fdd07d4eb71b7a8130cd303317217f956b053b76b2c4b6ffd949f36d31918aae5d442061c9c57a0d9c665b9dbb20c10bcde09c962814c91e120e88d877bd3d4c4bb4e1a4aecaf6075ff0481530b1c8586c08879b2b36af2dd7c73e3a34473415ac9c64b60ecf7d3c0cdcb56c825d110cedcf1b06dae89f50a8c7f69b013e3b0a48d24023c2df7f93ef052fe444a3ac028b8e5d7e39d4924902aeea5da4edcc951e541665efea08b8b0d0c636bb86de1936cad65d294812136747e401dc3129b02cadbd4f405c7bf7d2f0c5b3e8d0cd14e8dd2c55d269c4676205c394ff29905ced1782cc42095507abb985e31eaf10ae3dd803ab28e76ac72a65e307a25663dc26b85bd4451748352315631af6afbeeb458d0179d5f92d65c9aec26603ebaec944edfeec9e4aa41105822e7c4bcdea896003fc83b0caea6babfad277b59bc00fec6d89707651210aa85d6bb18ba915181afc6efb26cd427363a93865caa23a5669c2cacff385dc400e231ec24fe2310ae7e5cc53deed71d09f11da2303a3d464d7d8f035b7dfa71e5cfbb84aa3c0a84b5e96c6dfbc40b2b901de1e0e25cea494ac854fad61fe01fee6e1604472248adebbeab81d612f77bde12ebc912f7518f3b37b828353c26d2de21cd0d314d179954cc0da2ef351f5a9871a4d43b66cc4c58d44615d4690ee2ef5109337767f5b50a3298e0866fc77d93d5efe8fae7672370432696ad869c45b8fe66964a18fc7b7e3ba2091f75d1e00313b5a109cdfcb3259e67ef5c26a8964ae2e5be1cb6f649aae42f467253c0790d2cfb270d2cdfd012fecbe530960051c2fdc91b288d6867c88ea4d09d2880664fb6887082cb5ded34c539c7a725bef96350001d083705e341a8ed59890657c009997dc00e690c1621f4efcecd8e97ff4d16ca52e9c21d52e55fb96d4520675194a1005354478ce5a778a86d3f35fa06396f146628f6bd1f0574bc9edc08515254c620f675603993472c2899d7cf7cad6b67c3812df0d9f705d5ad3e1886ab8946a1f54559f40a4d7a71794fa464c49cf5a35cda3873f2c1470becc56020ffb641fead80fdcee5bb1957d2aa0018bfc9dffbf9d1bc9d0b2e90f8400acca9fc425a6a6ceca9f4f22a114571d607cd9c7a0f09c53306c5a6ae816748813917def7b478040bc0aac5da657634d9aca382e2f0d532499e6cee1105a2ceaf8e397378e05b6d42d0e497958ae1d75dc414deffb185a5b7ac5184667df07c9abcd4c3676b1b8c5e36e8ead5ddc558e3ad9d31054468748a6470457d574be2b3fe0aef15ceb6a5c0dada697cced357156d3ef8541ed25ba5180f3fc1c4543e05b8601abf90f5fceb020d15e770a4bbd7913d0eb9e9d608839ab8bd43c2dfa40d01ac508d075827c841b173eb700c53e15e80d1b7cc8e67f8bbb06682fc88964d4fbf860240eb0917bd2223f35c22877e7e778928a6705def053f994d29644a2b1a17b8e54743e3eeb3b889aa4ebe54fa5e2eeeae6155b7958442a40e6b447343a1c685f1ec9fabee048b3b3e3b6af3f6d6f30942e7021ff3bdc4d30fb2149095416a119f00781c1ac6ad7bc24bfc058884cbcf1ea55f5379f25e38272d57ef815a64a703cd860e15d6f9393860d40cb6b6695b340ac518ede752e3f0c32b62506ee3b7c8d183090d5f66d68b1232fa923be625095ab5e2c7f3f0a9f21cf77daf35b6a35f4fcb943dff41094de78d02da8c71abfedf07f196ef22e671a7ec2aa3d4109128809e48db239c4669fe202ae8ea0c7808b81cd76c180970496898b0f1c3dc7cb0e7c37c60ecd1604f93d5b14b7e4c08d70a5361236e44934d33c21d4f27c37e342fb91ea82a44364a40dd2d6dbc7f392dd015eac6f4a309990943ee23b3984b40fe9d1399cbc8cc1b4f4ed00a28c7b8d47d11f5d0bae40c2dfbaa651b79e10cb720aa5da4030367323d78e72bff8626dae2425e2ded16908cf4c044674d5412b7cf0e8816800f4b7783ef2c692e9c1d3d2424feff82cc8992a8504cd554ea7c1f361d3d416f9c4d6ea3d7585b9246b7123c923b3b1c4e5a1090b9e0cfd6c12d6fa189bce9fae2f429b15dd88858034d6d9a57b89336f2a84ba54f97a14c23c1599c6fdc7131149cdb83fed26d93261791dac10a4e0e46fb47bb917a815ee28f1834f228f5f9e8fc6ea8636f1b3a0aac322dbd9a89b284b4c137a6b77392d27c70442eabf78fc0b03719fd58f86a237a390f224c033fb19b9a3f57bd115d6adafa4e4c6c15b1d2e4cf531a42b13c904232a6c9d7fae0cdd4729f2ff945ddb6575eeb205a74abc7e8c065f6b3e01888f352f3c9fc4522c8762cc4c4d62ac9363b99485031c9badc3469282c6b771abedc3b71543650597378f0634ea2ec05b7c636a70de772aac2df62a7c8bd4e00f33886dfe4b117e5378acd7a67373ddccdadda1e987096c44dad490a6c1f5dd76f8f99cbfd2063c1bce33e796c54b00330100bd6ce79b371d3d49ea13a53d704940ab27d2568b46e0d92902836a6e32e709819859ef668dd2fc6b5af9679555eb6a4a1a9fc68eaf5b5b059410a2c14cb8598c4bab2fc1ae9b6c8cb094691b46db8354f187b70366c65299cbd029844265e8b48a2146305359d5e5b6c5cab4e6bf456b07c7c72928a72ad2aab71305e47256285468b7f48cf392a110ebedcff5660be0e201a927b74b91ab82bcbf043c301322ca3399fd0554f3c205f5ec07f0b2b865f9563964674e4e4af41d2a880861542c1ee402e596068ca01a8f5f67dd8fcddc4d9e1506caeb3951c999c2fd99c83cfce4b7b40a84769f2711e0815dda736c9a89403773e51f75a07a7b7580760a6f4fc30070b85ae2804ee44b58d1c798ee9e2266cf4917bf3af29ceee813a1151a6b47d4c1d82e0cd0a161e821f69850549f86d02439228a8995c664b4db32e60128fcde089e127254819c7937509fbc4bbb676e1dfd84a1512bfb3956ddeae6ee7e5891c45bf1cbade99d45986c6f122fba75fa3e86f2dd4c7b985be2c8165103895a0e750036da27443957b9f0d63f1c7fbd9576cec355536bf01d7b4937b596e183af87170e0d528c1c11802f167c80acfb3932f81acf9cdb1adeb44861061a0bc7899df4cd95325176d0083d9e0799f8264ea74c8155487b785cda5f5b6d2ec472dfb3dd0eb44145ece4ed1395e01598b15fb199596f22490db7d8922666ecaddf7656da9d0750e1c4c899d48ddbe430788eafb8619d25d4560643b905696d5281081004bd74e8dc914e127ee052c0bf503c8eda05d41b19ef898121bed9ea455def7c9cbf4ae688592b20077d139250eb914efc93b960150c7a2f898e34bc4defb9de06183d55f0ac004df04f3b31888cf92d8fac2ad69fa2cb3f2850443692e37f4d69b3dfa695041d5f6e1e344d4dc0c597a696490f74846bdb302da6b88d5f090bf41ccb7bf2ef67a34348b8d77d14111cb3a047bf6622e267042c9cadc87ad10cfc3bffd88161a5e0d055a1f0f9fa2823e0680108b24a122360b935b1ec5f04a7a161e76fa4758814f8f189b97d72ed6e0daa5c751d4e3f30b0260d435295e4321046a617676665e53879fe48ffa51bd27e9d586a5dcfeb453dfd298b9dc62e1b3dbc632d35e4dbc11e4dca6da54ca9a8518e3a085afa28fb4d045c44fdc235fb6c8b70c04a11ae52080a8a5c99f3b08fca6c8896c213d7a2e17fb697d8479d9012b14649b8fe1c4f32902e5e5e3c92ba9f09cf31a3fd0e80462c007f6e5133ffd64a7d9d66f9bdc3b83e3ddd125ab202c9b9a6ff32225702a2829f7ad5a01fc8cd0c71ed016c718a41daaa45e654ebe0ecbe5100bed4c4003334942469c84d6ec687dc5b7419d6a60d301befaa7fe594faad65b7f4ce9a5a0161b71018ea146100163317ac152ab39f02e6e844fef88ca14faf469d7754bc4bc2b6784fad7414b81e584f80380412446b72e5753dee4b9d2c159539265b880868a097472693e45ea5ae351322077c06f3473ea464ddcba9c6c9ecf169e268c0a00c8f03492cdfeadfe7249e35a74d110313bdc955b601ccefa86894a1aae492dcbe0064cafc6c754be6ae5d1550715520f6fd30423ce3d1be187377ca9b26822b36f66e9a45838f44962de38e2deffdf11c31a055c6d15fd74dd27229c7a3feedaca76268dbb5c1e2b4ee29096bd37c1c53bc26f5581633265b11adf491d540963e6c9a0e9d5cb107b29f3348fc02b38732b8fba43106a04064173d157625eac48dd82f13f6d0503ba0df84b793c9ba782d2ab7362323e603e725d0dd876ae77ff9c8b0da24289fb09dbb7eb366ac94b92c1fd36dde26aff5478709fc6cfde397adc2df8fe7a519942197aded85833f35a37019ba01f9bb58a861838546b7dd5ce8d3b210c93e75b0e0e0b7ee6ae22c9a4506b2609ed63b8809399dbbe93ff6d97a4eb0f2c22376c3e9c86d68e22a496f45bf660b9f6fcee6affe79984c58226bbe757ae3ef61c7512fabec5c210a7f2c2f3fefee904c8c8f6775cdc1d4a720e6082d815f96736460781d5cf460bf64d9b5ef478373c4b8de234f992f50815e5348de902972938cfc153e1579ac5b8f5cb2a3d0ebc36afb399c20756c9a144675f63df2b750e5965fa890f9927e0fadfbed9e1eaa7e96981022c98fe657b3987cc04d2760d9aa1a8544f0a24c257d42cc88cea5cd072866099b8bbe87b46c1b3bb2fb512a5733784cdfa208f068c9be23a27d86b8b5182c588ad1060a86ef8ecca61b34d2edbd23cabad444eb6ad27aa2f070679aa68fa80b949ee4ff2514ba85217f133d1043a886b481114522d85def19c8834aaabbc7c8107843eea811b40d3e73215945126d9ca9a8d9c4a41fc248877a1e871d561f3d19c0c9db19f6bd139b4cb5ab5979a1e0e6f7e63c5657bab583ae8d87920bae68e80ae598b702b0c566acef1c4f1c29bfec8d54f27ab3018bc77303c1d04c9fd303c214d301eb586e73b1d259f314bb14c9e05f515dad7eefaa92020abe239c89f462d71194f69878fbe89a548a6428b00daac97561fa7e7764e45403a5f6fd46bf6fb5a19bfbbca2f40d51feb5b264293de40ac8324b1bc395f027cb4546594be4df47032c53a0c1d9cc389d60b48d2cda9d0edec178aad3752e0d5446cfe5604e06fb2e34e06dce24c2789bcce7b04ebf9c8d6bae2e1d5a6e9d80a931e5a7a86c7fffcc3969af2830496d69a7a262bb40a83dbbbd11932b233a4aeb48326b1571e95b031ab853976e63ae1edd43de6ec3ee882ab006c1cf7ed8fda30168976347992e9a0ff6be6106e883f8a26f394bc78ee9c9d479b7add90cf49425f9cf94eb4d220e52bdeccecfdd5b948f85cecf3b93c1d5eb5467bf86e72aaedac1420a5c89515e450882b515ada7a1e2f9098efe679ff5f1590f7e312cfe640010779234f27557c836b778f5cecd73b4f02a77a28f08532b7e4182081a70ad5a2c281ee975f1b5fb15eaf7964d1989ad2be22fc98adb1f5144e9d3147caabcf3ff92f9fa67ecba602b019d3d612ffcfe1bd13814f4ade67b68cb40557f474259da186f83bb01b4f1f8554530403c504b3a4753f99680987cf18b9ae4a81af067a8ed9104e144e8dff4ce7dd0dd778d57cfa0f0ca5a5bfca85a0925b153923e815ba78b90a492aecaeff3eee8cd353a001e86f91956f71d18916b9ed775a6cfce0fa68458f7af266e259815b9853a5e670877920b22b171725d4085db6636c159c288a11b406cd09195250d690321b6dcc534e58bac5c0559291baf00dd3af72c6ff5b22fc2895b7dc8d44c4d9d27e77bcba6057c8c7e2a7cae2cbbb58ea77acd7687ea08901581becce3f1c908c47b725215bb13dd964143c7d505652b88854d482d00b444ae5adf66e4d4bbe2868b1986a3ac583fa024cabdae149812bfbb372143e711b63cdefcb99a7dd813aa6df752b57abd3b24830659c832c64f60c27791f1e932743d99683b0b397b8787836bb01ae1f72b4991688ef6c6b8a94e6e8f86a25cb4c78964ec2e25594497f0ed9a82283192e125f509bc9b527d715490a145b0b61a4316d90c805acd8308caad6f992e79ba9b11aced0edd349dbe8e8bd359c8630c1ea1b20b977e78cd150b50493c5a62be67c8f0b9994fa56add6c14ec3959d29c6931904abc3423d14019c568e254920ed96efe031341c0580c612e43cb57612121864ac61038e2325d0f98e089c5d8daf18dad27d2307124be0fb13534aaa446cb295edbd21880cf6a7037a485ebdcae193dab3e4ea553fd91bce559d154a39d37776c4dfc51228e76f867d255092c3b2d0978c77ff74f31dcfdd28bdd0d7f5ce8a5eb7cfa547ea26e62ff44c3a6ba6e008ed23c95dfe17e4b1b704c1f28b42765f5b69f4e50e78b84d81f16753c764e9b1f06ead1aa309559b4810f1c990bea686aa1227190a99b68a9aa45773af504e82ea42a88ea37da99b7d4c8fcac9f567f003784ab393e56ebce1b98e10578bb5e95968fbe1ed38cb19b58e9379cb30f08dbd02e0f378d2ca996b35324208d74751ce2a44ecba84d3ca8aba6a0eeef8fea40f835543b9e6170d8438275032871fc866272ccc7a0892cd9dda8e309e8a0b5dd9246df7d55c8f729254365484c53f10c65be6b284d4371c28fdbd68d652b10811ad7a97dee1b7859e84aa35dc822b5a89e220b3168d2f950670fdac086d58ce4ff82456eb5894838de7dd6b50785a88ab2336cc5a34261cdeeb71c302bea38a9f4762586dc2694b2d3338a083e5b2460e50ad58a2c58d53aa250e717398ff3d1cfd60e6257429e8d8d63cd2e6cb2a1a319c62d39d2e898dd7a7f51b4b2ba9865e303efbfb2e5fb63a1f8a4d2322b12436a98b350beeb0241d35e4a17df0eafc2f87451d53d89e65619e526674c486fc28062b7c5a244e67efefb8b50deee29a28271458eec3f03af0a0a8b60b6aed0bf7faf1b9260f82b7da0d5672b8d8ba642440c2e6425a643510670c97d5b17761de44355646eb1583bb4a10889e107686ba0c25e7a01908117fbde5af3584e5a8a32e18a72303c710ba22067ede32f9467618e5edbe976b74923b2a12905cca5550120c0edf761ce9cfbf05678eec4cfe5bbe16c8e8e92c252825fe993e92ab4758337a7cf24d74e7c72f8f3c8f7e20851079f88e1cd22b8e95dded135c82c5bf3aa6716f5f1d5ab1343c5ec932675f47834cb2d6c5e85c463e029d030af117b9b373873c72599deafe6864c9762aad04ce13f1827b0d4d3e0f48361797e886b18d5a86c535879cfa5484f4bc91133a8565d67309c968e1708e9d48188cc525100234ce9b2ab974737ef5062aa795ecd776279e65bcfaf5b51043aa414f7fa240e5c261e01e3f1e33a9434bfa1d037f0adb8274ae3306674459121b63c616d707fd533a6838d8165aa3f8b7ee207705dff31efac305daf2406ce482f920364be82f47070110354f5f86abdd6eb5d9e8acbcab61fedc3c41ce5d4aebb39ddf8d1a8c52f1d8f23266d8a6de7a6cffb78da04f826daae1b64e36123a59a78c02b3dca415b8c982554a73eda64f8b876d225469a03ec3fc7134620d2020707862aa6de25224d7415a539ba653ba65ca0816ebbe9849fe3ce8901dd13bb037168d77cde2a3300f491f5d30ebd2cd90b24bf26b88e562a3253bc2bd802a901f53d1dfa585b0d047758d6975077046384970a1a16411efdd57f61099555d7f33a999ecd39d051189de4ad58cb6a02fba6bf416eb7d9199eda3b7112a4214925d31afe4dbcca1e1da6111ea6da3d1845bf119d8bb65111be7a479a84569513c3a6e3b8690e0027a1daedc945f4893b8c877e414cc552363c62da0842fa6f06568195dfde1fc63193e1433d92b80bd331521415d7d9f7195b7788e3e9977f20c52f67948a8a038b38d4aec6bd28742e8004bc038a5eaf0ee3e0818c8625029a7754c7fb1aac569fa43d616e7be27be68a071abbb4dfed3c0f2087842ccdba27ae042f74fc820f20f10734761d8945b98e6ae2c1f1a658df3d24efc29abf46e1e5139d884734a187cc03e48f0c3c8c76e762b72aca852983b71572262181bfd2055da1657295966a678b54f9bee08fa77dba9934aad8203b45ff326b407c4e6acddb2c28408646d198f8c050e1375f133fbc42e235a777b73ae622ce303016758df64706efe1550da3afe7c566335e6b8b925b4d72470db6ca13fc34f7f45cf742692a5867148cf979ae6471e6390613cc0ab16d6b5e7d7b0dcb1f8426c7747a744af1a9d540f71f65809a94f85357ef6c69f555ef9e992742b35fa335b7aeef61c63e2ee5dce4c32ece8ce195aa79e260a34cd77a16313eb453d6d93381f996364c787528f71c8e1340471f79fdbbf768ef9dcd371bb6af1816500aca5ab80ec7c4a852e0849986f881cc230cb1a6186e385d8ab36184cc8638926714b28ddcda6254a189d2044dca4e8e1c68647c61c0dfc4dee911309af54be70c16a148086f8555b2f1017e445b99ecf6b7a58eca2295fdad89b949b35f03649f4bf9721c08a4fc7a0893570e63b4ee23cad238d8753b6ecefbd18a59d280041a06824053e8e60c921c5199d44c3b00fe0cabfa045a293e686ada8dfbe9385c15d3b5aa5a92d4f88fe136482aeb1f4214013f985efc2b6d87665f91b150985329be05efaa2cec71319f8e30f4f321191f27387d03f44fa7bd568a8954d89d22210685701d2e93376df3c77363d5e62ce23e8c6b4f592a8082d6fad16538f6b497497e03d208cba3dba176f776b9fc6472ce085408913c287986ea468410efd493e477e7fd33e89fd6fa8ab5c14109f879994fc14b9862e6ba0ae447c72910ed74bffeb0c6852b515a034cdb70c5f36e5491260b256c06f1d156b468fff80d95183936767024a0905ebd473bbfe9f6dc8cfd2f3049e41d39bc9bed46dab4f0faeb69c7e597e50b91f7b4ac572eea8f479f6b2f89f7521e9de12877f3db27d7a06cec44ad0c56dbc6e96bc3dc203423d2b9ed6a9157ee35f8c035bf5f1793c487f7675cc2376f54ad11ecd656f44bb3be07f6b0682a3a65bc4e0d7cd2058850d4bb6278e97dfcd17c1d57094f8d7d98078aac7335f4e7357d247d7b804356a163921509787e89083053d93cdda2a4442086c22557949594ba5565e08e95f177f3626ec845460137ef268af2ca49876b5a110be6a6450e1d441039a89ad0cc1bb9fca3b85510a4b3b45995655657c711c4ef74dce8d2054fcd176886b811c39581e669680dbb9c3240c46210132aea4672ea9f8b3d2b9f096286ea3e630873bc28b5ff6ba4a4eea97ee3d23f91b2d57fa81a6ca945492f77907c67a469ef39a55a4d485c1b2a66dcd5d8fa8975ceb82971b9c38c4a916f49f27dc058b98ec2607fb453f4bd9ca38081608e4665398d05b957443b9f74cb331ff9bad57516b646b34e2b2a266087918f8647d4121c25051b7fc367c22be79236c74776453c6fb287cf5e6007e75abdd8d64a345e2476409cd302fbe78c61a1b2fad875820c8c2ee418b399d684edcb37a75db285c5057eec2d8de425340d973513faa27a484f5e59c5b0200c755e1553a4aa22fcb9c78018d8edd040cbaee8bdccd4297df0d7135fa05798b3c6a915473c086d4fc4c81fe67f0deda46588136505594ff6bbf374a7370fc570ca5c0c55606b9fcc27208d703f54e2c9086d2d57fee6b39e6b0dafc8d67b71a98fc7bcb7b1b3d0eed9cefee5162ee077a8efbcba4ad290b8ab15e9144d703e99afe42fc7b05330dde63ceb5f0fcd981031baa2e9970c7120cbe1c035fca280bee63d4f41775753dccc1dfe9ddaf2110aa551c0e9a1bbd5707ad18b4b51f02dcce165c382a9f770ecc04bae420fad08fba1ffa4eea9fc0b3e5b1290a83698ca001aeb77662679857f623ec36a634a99e175f17ed42dfc02135f352f808fea9c4c5a02ce4d33502eb0097e1d2b4e512ae6330022676eba1f89d7a9b7ae0f0da511ba6edc4bcbfb1b4386c07a9a296086df762d7157c46613e16d9c7cd36f918645ec7b21d5d41bce9d3ed575d3cb06a2ab54fdda81cd800962b905623dceb3d53ab4226e0bb41c9c4ae3a87dbe0500024be34c14f13474ff2a3393af8749e0dc0600f6558c8df8b9f1803c72e6401082f1df2754038a60ed5cd2190e97580af87a3826eb80a0a7fc88b8c761be44a5cee37158d9761b0fd6040fbb67beaec771f5c9831542d1a683dc089d2a24e110d3bb51f03f66dc496ff8a4ea9ef7d471693fe805aa8160baf874574da19710ddab250beea6847795f8a4f7779534aa3985ce6e2200d67171b50479cd9aa2bfcdf1b285aab08c2a96ccdaf6cf0509ef47586bffb162af9743cb83fd2325014be78f80e7ab73aa1f7d4c029ed39dcd40ac471099d2641c165088afc123f87df7be21df91f437df57039288f7a3b82a620d05f157a5616a2bbd29f5499ebbc689e7c77358ca87d9710cb5276dad5f4c51f0d44b239763e81e5ba1a4f913da0f06c386b660d8df4f735bf943529fed5fbdbdbe50bc5ee3002b82db3e634ffdece5796340500edb3332ae333f09a35774150c3621610089f0c3595b7bf3fc9d880e5bb895290bd0c3af5b38d2e7228fc1ba93eed6946d5ec6566b26af4ebe8289bcd0de864db1a0b8bd4967e8b8781343b18ecd955ecf8c5cfc4a2005483a1d3b47f31510a3e84c3c2b9ce399d77b26e2d2fb24f2174a715393a1caa0799b2656d0480b2b2f3468b2480c7dd5254ff8d51baffa3a17a11047619d92a1ca81986d21f2da2c4fa3caa382bf9c7d6c37f4c855f85c42b213068fb8b486475cc28c9e23a329cf6260e8f278c818ee0ba5af4ac02b6cb4e2671f961c284dac2b1bec2d907b2b617d71a91912cb59fdd9a9501dc1ea70cc92b30b4719ebad39a8832a4d35300143a884810e7bc728de86df63dec04dbb34ebb88e83b239b207f2bd65fd149572953c310bbb1f3adcdafde62e0678de60897baf90cd4a283e5f93179373feaff367dca9d1b7b10092983358d377f3b894316a2b6df70bdfb5085440deeccf791f0c92c034d878e2a93251c4a2730664d58acbcfa8414212d10847c58a1fd9c6bb73f92aca027f455f27bf8e0a2ff875ecf93845a25674711fd0dabac607f8c0d8ed02f04c11da58c1cdffa895ef07bbdf99f0465dcc8d57feb955ea11d2f47d632a499513421f51a7b5ff82e96ce1076180257a63e82363ca1773c7503e435b452e8c3a631e4464082606a486bbbc50aba56714c1ff72a822b2601148d44f4b8066458684e86fc2d5682fb63a2dbd021588f3e4b5f8993ecdac1f8537c50e27657476558cd74bac90b959f6fb853717e87b548ba83b161909ecf94a736925c8ba3c06f1d33f3c032825e6aeffffbd129daaab9edf562bb5aa4028d4fcd29632c79ca580ebc94b41d0d74d0c2c278e09ddcc17902c741e746af88c1f342fb495418fcd6f9588d70e132b98ae1c8015999173a715ee1872af0992c9d0641d5b916d073a140e9258fb95a2d36194353a0f6d3288bd750e6219ad2ac87a97c14d1564ac4843dc8096e1fcb385e962bdd706525576bfd8417c0740adc227cec7489b69b94aa5235886901d28f7f379feebc882722b16d9146621839475c5bf5de349be7397e5648c2989fb0f14865b505163bca3ae78be5d48230f16f35ab37dcc7e04ddc259f9ec9e8a4c15f9d99025ce149334e4e7bc8bbc697b080332f292fc2d2fa4411aa7b2c552435279cb1eec9d7ceb5bddc365eeeb0b2cf2e3da6e8aa5755b651940d21b1ff17d5309013bd0e54f783fa0bf0d7798e7efbe8299cb70e76ee7d7acc373d4957e8ca86919cf785b44540c9e3474462fdc236e471a5ac478eb7bbdf1299043ad3123670db6f4ac52e1481ee4b9f05ba526f2b7b479dc2c06cc754b1207d143f32115d7553c80eb6c8314b7c8601a3e8bb408d3cae15d3d0a1a63ae465c60898577130831358a2e31e5ec6b4a1820c02e41783238e9e8cbbdaad0acf66e4b415dc85d4491b7d5742b26cca2f5ea8a8fadac07a68a1bdeb6036c7220fa05f7508b1530beb45d602085fef882375e68a044d994c630e0edaa0b53f808f5b651a88f897dc29e49b58f3841ed9c9e30562c28612ab3baf4745ccbcc6b95e1b5b198e109f802d74d865949520a47ec7063f10a28aa5e0e99b7ddffa6ea6e94ea8ba3155ed9608b317dcaec385eff64118ee02b8bb23cfdc9000415098c5a4de0b47171eacc11129dfb39f21c6f7a49ae0ebde2848df53707c9aecdf9404b00ba41a9960f1d163cd6cedebd0d8ac2ea2c93d245fe9d7009c38af7b0135d08a67e296147321bb1de4074055e7ce2cdb9e10236e207a9b5f1e3215cdd02e547441cdeccd0e8e7653b4e38c2cf5853d3f9ed0cb6b6027f68c6a5acd872a5e66a037c1e5d7f6995ef8e80fe12a71e2cad22c43b2ceeaf3eee511a3b09d99c415cf9724147dbe8e1e91a9283b37f0631029a3e82c6ba175ca293f7367c884698f087a11e0bb4600019e0315f61f1ca658f12bcdec460366da56f4e8645a7a6752395ad6c44effb39c86de52be659329643380e76fb829fbfa393b15c25b29e3142f6443eb7efe3856a2cd4cf8c0f025f25fe7c9229bd53f6f00537864342d290c9f97239a5f68af5415cc2d0965aff6698b68197dbcc3d174e1bccac265c332f9af6e9f401958902d6451b6ce600caab8f75ce176fde137e46fa86f29270581e6a3fd8a71f9b55beab2f9291f7002fc185fd89cdebaa7576d39f145d70d2cc24e58c163d9f2c23daf2eab35ada33257b2f15f9b01f89c1568887fb698c6cac93b990c0a4147ea22aa4d21934ddc4729c07738971c765307c51a357710ac3dcacad75893d6ac1ac8f4a6cb9bba1091841b717982998da7e7858589dceb6ac96f5b232bb191b85dfbec9031612e60f57f1296a4cb95366f4add25919f2838338ea9b7459167cf101b7211111302248fd329714ee43c0aed974befb0bde6b0faf125286b0c6fea5669fd24f1249becb86656a10d6a3be0a555150c28952e01982af7cf36b01a91174a3664aa96eb2cdcc7955e5ab41be1e285b7741b313e52613da35c3280dfac8ea4ccaf6f7992d0c17b86f82dfb4bb9faec3b4702736e4f023e9df153616cf290204045e605a6433d32bf74861bfb6e77f74d4d85a2ab2c75c264b24b25a55097bba75ffa82e40fb004de9159b37d93741d92ec1af16f703e85a033ea23a28c8f989ca05412127daf89a49c387126c4932bfc11469fa96c572f73349c15c3fc919dda52937394c93810c6ef9bb8deb2ac2426933159e65be581ae481f13bd9ef4591a77417cd3c9e3654dbefd0669b6d36f1150eb339727e5caba44cc9d4733d144a3a5186c348300e828b298010ebb3b085b4e13df85d88843c8eb6738689ef9df7766af76a14d6d4790d25ffbeef1f1a2d8a9bca25fd577e7574461ee1e27c92cb0b27754ecb12906cc375eed0162daa51ae27ab41580fba15cdafe8c448aee5628b2c6b4b083278a33b37c819574af039693c40e0c7c30f535813a38a77e020c53fc38b24d5e0283d8d2d8e492d02597a68bff13dee0ef3d4456a8836b422bd5b9c32c0d0a84033d67343ca65a8e0005bcf0843a393c9f61ba1c1654586d120002ca12df3b31871e478f6f9c0d7dd5ce5020af371991b649feb7b2ffa1dc7217895e382a833fdbca2713b506f33d8a473cd4280628c1130b5689fdbfa28715e1740339510dfe02b4ee73769699c8496a4f0accb523b1183204fe041194bc92837778de206bff7e97f51b4d4e6733da4dcac6b4e5ef5ef4e9c4c63fc0fd9248fd9c9ccd52dfde0bfc5771658ea66046f73c9c755d50336dc081f16a91106d6a3d80d0965578cef70faa7cb8b33158b852054605a30f34084b2c99724e8a9e13f174d075b6268b14014e3be0256c4848ea8b46ab9c265eda6e3ab1105a216bbc0bb48385d4ddab233a7f50d832e24dcb915096cb36de84b1a8c8f770d0db74ad0805eea4ac74f334f6121d64d72fd35bf5faba498b2eed65f36907761b5707d40de93da0c4dff93c03be162f2d9339b5f330552d67df3a2ea37aee7bce348444c9ab768fc94f7a719bcc0c13265ad55869a1f6c85b87221317309c78422164936bac850dbba9585bcd86e0f4ee5e07ef91bbf267f81f493d006faba6148340f67d2cab6a087089f4cfa70d24ae0c44f61b0d03f74ae9dba78945a4a693e64c719f508f90664d2d9d92490410260387ae680bc30ecd2d2329248beef1e285683b25d27820873b39a33e98eee2086459bca0ba455a74608347ecae5c5e9f1c060e00f6943c7e13e7946741f01c3499d6fb9a18c74aa9c6638506c3fa46e77b2fafa69824b87383a1f91c4ffb157576210f5a79c63f423c5f4459f2ddc0e76a6a91902d9c10b479beeaf854b43dd59660f81edffe24e179b6f021db07a5d083526c859a43e1dca2509c579bb74abab0a43230b849680fc9113a14bdc9b254ab89202dec1a573d9eed521b37fe3851af7d29a6976a83da77af6cb9864a36adb1eeb5994d942a5a8545fc0917f04ead4c8c4d61368da3d9179a82738e0e8a4405976c90b727cf39e126debba337a12e1310f74d10a5e1aa3400ce005c823d0966cf286984665776d8e553011a2495fdba9fddd84d198a643c7fdbaf32aa0163d52cb1791d4755775863551c66abd519d2148a40a72b3792e06b44c2d0863c1860681b7c0f27d95d3a27ace578044c534b1b723465fa31a74d519b3313da3fd4ce8dd37971b7b725eee38dc7c448115a10f1a329f0b433ae8530af5aa555cb71c5881d108d3cce8e04c53cd408f03805dfc5f9734035ff3b3dfb7e81f1275f3f3fca7e3d235f05eca0b99bdbd301b8a8dba1c91552bf356f0d8fec9b59877d3c5e0dc76327f5280f39908719f934638de788c9ae128e1be2443ffa52c6edd63ab28597ee1044b0130a9b8b4c33c522572716956ee371967db2a857ffbd2b780444c9dcdc7908717adc6a9bda7408e852546ca2feaa228b4b6db83d284d195664f99a1edc02ad7c4bbd0a47298f0b4e874c3910059856f3164cc3503d0ba4269e296f2816d16346fabaf2cbd011e5fe0a6d74b453b259842f7b898f424d31d3eae4b19b77e74f252dbaf06f00efcede9f2861dcf0067d864d2b75b201a92378df1a3c1ae38bac4158af9fc6b051349dc3494a157f5af43e3d87d3241ddf2e8ed07531f5333ea4d358f6bcc67f14c2b6742e55caef95c3db661f459796dd7977c73eed76579e25e396eec0a23748473a9ad452d84d5e86681e19986d00d9dcbee497f97831715bf86d5586cb184accb7bcb27c503ad6eafa853e4712b9fb3684cb79be491801a6cdddc9460afa67d0c967cb75fad3f69f88797c1398d93de420bbd8c9e22d556500c6275a41040eda60c0f8b00dc895b1f1b45981e0cde119fd6054fd0865e02fc27a2af08066a520e6ce69cf524f7a5bf81a5d27f7367373cf8926bd58c2063579148cdc2d6dbcc4b6d1479ea540face429a7d694790ea82d32170421c08d27d4eb8319cd0a2f7be2df5605dc8acddfe84304158aa8468611c6d44c666b3957e8629aaf90257b32b7f8f6fc10de9348f5216b21ad1af225c5c681a010669ec641e0c6d6c2636c293f80cdc23ba66d015dbaa9ceb21caead0f3a0888b6adafeef8a11d9e56f5ad696d65998662b3369afbe3d015a771e306d77effe72fe0cb95fe3abe5ee585e6ef3ef0448350d6ab8e97f230d93f6b202a0bd1790c925adbef270d6bb83ceb1e44988476adf38a588bab9269df6c35eccc62a8cec662fdd091f5da62ff558fcf5683ba95cba4423ea2fd6324a1eed66a184dfc9bd28ee47cfc45fe9dae909880106fa5d50372bbf0f558e3226e3d459a23993986a6a88611c07fd3e3219fbbd62b74839abdfc73c2a8715848970538f45fb045d63501fd3a9fcf0b973b6183a400a48c8920177ee64918bdfe46a40829931325cb4d017b31c6ec40880a204f250d6257b7a07f64bce0dcafe316705dc18bc3a3e274cca823cfcb6ff89f3bac1e830462c779da05c279ab0f393e41f768d7b7c3de0c10ca36d9f0e7088f0bb2304f8aa61da1d0d1c0940f1cb6d512510e1e50bea6d647248f7343d13c40d8a32b53935e0dcff4f06edc734ce081c6e35b5216989b11f7d02e1f8f119ce74b6cafcf831c12a8a9dfb86ce6383e811e8f9c01933cd57281abd8557227cec5f00407b5d2cb99ae88fdc38b4970f15169ab1f7e5f1e6bff79c21831448863b56a3eb0bd072e9e6862f7725d1e37c6965ba8669b5ccf4c754a93095603a2ff207fb25e01400f95b5f8070204243aa2a082fa5acc176ef3725ab78ff7efd403a0c8db00cdc449a7dfea28a7b859d3fb0e63ae64f95bf8f68b7f5313aef230213f8a4f432c8501ba14f934ac7376eb9529dd53cb5143cd6a58b8dd9757fee82a8fa0ae50f48d83f3237490d8c3e9c97b8f7577a634870b838f91245c5cf33a35f02387b75899e8905db2d329e427412fa697c64ab60ed82d0c6520dc2e3ca0c80f569319d30464034c9412a2b3f71dab573f37f72290158f718b6791165cc73b4f6cf64a6869c66c2090e584d63658bd6c4128827af53cc8844ad9344b1bb6c0fddc617a77c35b7e491b7884df2f0ee51735254ea07190095b7c6015da6bca2d4555359b022325e2b334188eaed632aa7773ae6b791be6c801174307e0214dbaa6826803572b305f31e10292ae58093b73e47e7c10add1f339c75bbd151df91cbada7a8352f39d1d53c2d227ce7e028dba16e25fe3f5e62859d91540dad2023261aba5e7d4a8f6fbe3e85bd303613193b9dab02dca52525b19358b60975ae482fdb143a3c8a7e29240be8792029a16aa09bcde0aff9643071eab0d1209df873b382e4377e198fb78d3257f472adc95584f421db16c1779e1abd7654aa8a82646b3a56eb026235f4298324c64f8b738da3c89d3a46e6e79514b96aeb7d06a5218a602dc602d4676ab4bf0eac0981312d23233b498ee091b39bda33739c1056d1eedc4799eca31603c6a78614b0abd55f3cc4c42d4dcc4a1744815d37481e68033f9386c6b38be90cc36332c43f8efea1f3519f448ea9d16675c019e275e62cb91522393f8e86ee03913fcf8961c106f47ee9464545d291f65db52dca6217bc61178c383e250fcaddcecf47fbce51ad214ec2484b46b926a87b0b5116abb6224fe66fc1ee901addebc17c42a30ac6702205dfb828ab059fddb33a355094efb5d002fb076364d75f188c9f9781435e18086251ed7d119968a4332d16b0ae0b847eef3ff9fd2f5d48b5dad622b994ffa6e07658d976304dee54c9d5021f23836c948a38e0c4642dcd25589d2ead4bdebe8b41da6172dc9009850a0ac6b48cc508224d60de0a9f9afb3cd4b94d7dc495784b5f9ca678d1e27d4a15f6565b5751892ef9d6ee6ea556e6d17d7b82143662654568f05b85edd00e4b916c2e30d88c8b3f3a7bf162c6c6683ef82c3add9c372e3efa9ad838cb8fb473760e7915619c4a56ee49e1fb0db51a7ecaf7386351f623961775fd5939100c44097c6826df698c7dfb67ce3dc329cea1b497d6c7ffe7ef00178602a5b6ad451af268d8dbd2310d8fcf5d0bbadce6b88a3e307b8b64b36bbc894cb60ea95f3e6c775ebd9455d6a27b4e3ae7a3a37d09f6b39b195f198ac22df705de27560c6a523ee4bf948a94c4212984f12232d2621d736499322f1fa7871851b36ddaf29ca405defdd769536b8aafee17dc3ddd1a7e307f3ab8eb10400fe195c428d2284986576706f1f1c3a48d04b36619ae6cdaac23a72520be958707a0e0983742370f794c44239adb57b39774a8e7b9186c9b22fdf34353bbf8739f3c32148ac36173c82a06d5e2ebe06809bb7f5d7240ffa47b0f63957ca1824de7c0ad28536b370a7286f8d25e5270fc0c9b62d3ba2267f4747c2ae156356127d27fb9105146b8a8119741d2bb4223e6ca8454c0a0243c9d06572faeb2c8beb189c11a8396cecfc24d16f0d651a7d52b3545d286aa729dae135794a91879730b0f874cba1f8fa9353ce014541c74668d9529926c9a938787b838998c7aade11587607972e324f05f81f766f45ffa4f7b990484b00cb47cf2f32e4cc11b2688139042b68253cd28d9a80f2401092d769d1327b3455f4784bd705c7b640a634da954b6dfb7d16c4b853da27a1b592d23838138827f386c1f032472ae7308c01e895cfe446a20ba825a9b4e6b4b238d0ddff2097de5149f722704acf80a46a3abf0d5ed44fe6c3515e772b1b1a98d45f2b87301f48a954079d9c2ec0d5276980b0ce3760ef8b46f048dceeb63dd8383aefc0df4f05dcaf80ff9b9650086a81735b488392bea3a753e110b47717e5d602d91d210281fd23c26bd170ea908884e306ad2eb22d51aa67298d06cbccce9879f847e7ad29a0f23bea49603ca8652832aaf14e7d9bae4ce7ec5dd0eebcb7708b0faec468c089513b453b794ed988989ca591706b5e09f5227cd1359bb7c4f5403f6a0095785fa0fd8687452c7537f2013502bd646be119e895e00b20475f4838d1580d52ccc80488a48329f9cd20f7e5ea9d8a74fafe664d7a8dc7ef7f6428784e086942c6d8de42a7cabf40888501f8f3842ceb8c16191f8f455d05e4c2caeea6956b6d9274ac6723442889249a9d2405aeff99a61ecaffa3c0acdbab98625a404ebdc292fba67037e1ff53b3775e05792bdda027556c8454978fccaddb8090556e21bcb86873a2fcc45f53f7b0709e301c40cbe4186028823139af77861a75be0b03e77fc6a8d2ae92f45041be545079e79f12c74ad7aa5cf2102cf6cdd346b00da3feee1f9a976835f7b0150040b4ce777e989f3a492d64fc64a927c95c0aad1e2da4152f87002023267cc23c589a002b44e438741754b602baab4f52921250b0ed4e7c2319661b19b3fa60db20b004c2158ad16f5974025fa1f27e6d70a513de16fbdd38e115834f0122c95a7df3bb7e2e1523c7393745d30aff4720c93405a2efb0062ec0dbff88a64bc0f59f613fef7131b2970ec30f9f859faf9da1c321f24154079f50923917216759c8098c777fb3f27acac569952ddf356de31ecf66560ca824dbba6934328913caf935b3b37317c89915e5d5f4195d70259155c638fac387c39d41c0538c2da508a73fdc75d050772cf589b1733ff568636937bb8e2ec254e66065328bd29a3ec2801758addd6fd5fbaa3d5ebb7b3cf9acd3222a5e3be5fd2907078218144072fabb6cfe39c878df01d9b688666149d3c33196fcd6b362ea1d87e93cfd9e764770d91d26f26f284e1ac7b6675f17f768711bff936fa27c640241d5aa69c1b061fcd42624e5979d7abc49b20e7567d1272f28762fdf28c62b23364d2eb02ec9c252a70ddef9701241ef6bf23f8d8fa8a6adebe9e413fa566f2d71b41c5e8fa23940d726aa1293801aed218ba8bd6ad2401a0c55ca4345091d0f77927c3eb79cd21c477ccb4767024dfc9aafdc0ee6b2772a067840f3c2edf860dcd397b4ed597683986088b70d27851d5e295c82d816183a45a8eff9d9b5aea9f18a175f85e2f6a801d0f999ed4f68e71a0f2e089063e81047a5cdc07118caaf0a7b105e14315b373a83938143920a52163cbd6a6a75da3a674ce8e50b010b2732ddbddaf29c79c79a7fdd20916fd59719e3792f3b98fdd1adf308e1ea583d5eb87a3091975430575e40b3faa21d9a3608cf7bdabdcc6818dbf8ae6d98e1b7a49e125e2d0b44f7d72f1ff82f4964211a66237d4428ccc3c67556a11a2e1baeb15261c06fc3f3aecf455aeb217a632674e249a6278da863745103a6eecd5698572b8f80a554b087985a7cf097f9aa1a74a6eb52ebaebb1fff103084cec8ae15eafe8efaec8eb350b9588d97545dd505f60ff35fb94af80020d1261da7a38873d6d924d8eabd4962952d3f20df6e3a94badcc53f0a9fc1a0c3749ca266286551a42502a336c163dfe2664b60a594ba925ca166e0aa7c05d3177c1ea45506a59cfeb3a2155345332294290dbf1d50f3ddc5b0a6355541efb1c25a025bf7f4153cc84a056f25f11b1ada7fb71d7b900768bf62c456ff8176b2c6a860414d57af63db436a7504dd2d4803492033a26cdb3751ad135faf919fdc8a7d020f9b99a83d0c9088bd7a863c84f218954fe887ccec962c0a96e4ecc9d4c81d7c26504625f5f61e6e13cb7d848e9da91a73fc3244846b53f846af2f388247fc8aeb8efe8f41eb0675ea57ac8038222cb333f493921af38963b4001563dc4df72a654691e949d66e157710264fd521f65ea17fbe596c255528de66e128369ecb592493c679fb2109f2e9a4a3facfda259a1d8e5235a4af677f004f53dd5acafac384f0e95f61d3cbce40eb0438ff4bebc96dcbdf0f9cc9d7e2b7f84e6343c5dad964a5020c190f94a7b9bdac162b47110c7e00a176f689aa5555dbdb212ad2a511a7c4eac99d3455b2533af4107020db6b14979870d118c55385627a1e88e30a48d6c6e795240d203d15398213787178d1f4024db88f57b2af99c7b6012d806a54eee57cecd8fdd932bda513a246d4d7d16b04f67fee2f416bea689c990dc3a34ab5cf0165c04c38039d63cab53a18ad74eb2a3c9e8bbed257199eb15cddc90ac3a1af27f94b1b9bb37c7a0e7b8ec29e4868ed6e688bcd3c9245f917b040ca1483779ee19b2812f573e19b162d0c747226358ff9067402ab63c320d0e15b2cac6511eb6f6fa3a785d4ff21563bdd0ab64bd6c87435616bb59da49823437823ee7f0c1f189ba198660e6e88b4427db05b089cb767fe683ef2a9518f6819483f8ca10e4ecb92785bcd9bceae77680b44429f62481e72bd648bb113d2bcdf18e5bcc890506a0f0999643028dfa6253d0e8758b9678e4dd8c02ed16f12b80a04bb3d0a25a8d8c76b4c69c6874c50a9ecb2ab7bfbb7648690a86a22aea94afe6f95cbe0c96041545fecc30aecf9d9ddc873b4ebf92c844d4672a00d96bffc2a943bcbe73038429f018ee4024457abc2f6f0517cc1bc08a743aec06b7521d745404614c76cf192147b8c4ac626a0032c53244780dfc87e07844750fe3e1f98cc3f4acccf2c60c0fb8f61b2d06ac4ace52b87e56355439c6de9b78aac5079a438d0818f4f64a2fbe867f7edad09cbac8b3e62a8e1348da2ca8342f1d977df165915d3d835736feb5b506e0a9f46b039d921104d472bfd70f604e7d480fc0864ffeee2618d81131e0d07699ee0246c8138f5facbd8cbbffa7e5c7b7c82097ed27d15c648de19fb6b54713c9c8021d2b1c143e6324b8d4a718bdc32dea25fe1a999d39c31dfd55b6956c6e5732a94757962460292b8d7333f3e48ea23042543a5b5326949983a9bb060b3a15c344d02166105c4ed71574d246f7ee9ed4144e7a31351baa47c00e583e29eea7096fca6526e9d9b4ceecb9a4364151955f0ee686d2f147d31dc46f99b41d7b4aa574a616e0ab776a98fb3b7d9b8683364c29db0a0b27fff53bf22179f84faa988475e9b6d3f16a33f7ca7ca5313a8a16750044f60754e1742f7efd44a26b3432cbbb7b4aa994637884ac2a39fdff09797491dd4b5100a73dd3ade4d1070b9276bcedcb49e8cf8c7876161eae123fff1a2a4274b72c1ada8cfe5d530d507efe2ae793bec67c4a0d3b3d350963889a2e09525ac0a2bf5fd4de933f1c1a925d654a9fb704178ae886c5ea2f2cd7d8f102d00d97a3e80776ec1f78e69948b7ebde2da9354d61c025e8745828f8464f1f1022ec0df01e58c33d3c7514ab0c8dfa29515619ae42329731242d96edbfa0863a4f1c34472b9ee6386729c024e76d71693d5c61c6d04432b444bf5eca130c4ab4153cce40351d02a397ac4beceb6ae72526fd88ddd4646a338e81c9bebc335908bd62201d58b4adb071244ce134a77fbb60efaa614aa24edeafb4a6236ecadf8006dacc929ca01492c0f4f3d787a8c6867de4ab416d4cac453cd0e62b02d5bed6f04bf8d81f7f5861c34f1c742f678824e61529dd9159a9f00d2a05c974913bcc9df58fd3bc76fb1c43626c8b08fa7576e8993be61a190312a707c61a7c24e8bc967e0298e3620a8f3ef92ee4cce8643331244c8706c67b742a9c5c14a5acfd2e0b7fd5f65daaece4bc9ec48ae38647aad7e0a88d3535dfcc0300df30f9b2cdb8519124623a66c13ab9324a7609b6a1ad3c34f4b7259fd6d7e51068a47b7b143b769674cfb138ddbf7a8845b35e239ec963640a2cb9526ddcb3800a7347cf3e9afaee9069540698e888177d6d8aec7d111c484dcbed72f5c05e9a4aa05d5511b8ebb758317a14c02f9250e3b8d15c4b58fd8397ac9192b40ee29ff592f2dc82bcb1b21555cdf32142218f1ee0b24113282a8c1f0b43ace0e3ad2bb65c780caa47091d82f9530435432c0c29683f2759e8137b5d8ffac4667d34fb7e80fbb1797b02f4389b2d0cbc72c99b71f777dabc45cebd81523f035c20612afce5808e5a75a2ddf8524b9ef9c8e3a3729e527a411d2cc3f0a9886d81ae4f29694462a4b6a02067008f8294f92a4d971680b46ae15af5ca2448e3cdda2ae51e7d90cb5c8d5248d85a2b9b02c044ac3413ab425d6025b5040e0457cdd3cf8df3979cea67e6f831fa6699f6d8e9b33d7928af39e275ad0b20cb15e67b8c88bcbf7ec1bdce31330fb937daaf2a1e7d7e8b20328f63f666c4f9f27b4e7bcbc18ef1f0201024f94e865880607a4a60c3c4e38a563ca0c1157371fd8c02f61872da017cd1f085937a9a5fb61ffe994d6f8b67f199ab899b3bda1c56848dc9508932463a1611dec1f35d8c8603d1a2f856a3a003546f163ec5eb4fe42efbb6003a0aa4628b227ae1f8eb621687b76cf2f0646744473df859bacf21a87b163c39f98e35c9e70af3f96288e3d99c44b4fe0e034e10cbd667580b176d88f35bb05dddab251a5ee5fc5eb4297cd1b0d4b771c3469d67f745ac716024c5870957a7313a3583d0c2a10df512a14d9e1c9b337405b0df3f666f5efee17a75a1869bf04bb26390b1dc73ebf754a18d7494a25d14cc86fd8a79dfd6c24f23f9c1ef6c961a7cc46ec06972a06d4ffa514f1ab6d89d2b13bcf58e485bda74aa505bf179e959cc029f73ea5e35e2eed07dedd2a0da7c57be1ad76c439af054149b330e0a0bf58a9871e1a138768d10afc1d1493b54a270569cfd8fdc7c89928228b821e55fb011c7d63a023379f862a2f4ce31e37a2cd5f0853f42525e756ef981a42c5a89c1ef64241d0a7de561cd481470116dd470667c8c230eda1598d3fb9a64dff9bc2d2e77e0550326a5f6ac2860c227804b306dab5222b8555fac992714dec7b1a4b784d57f2bd435b897d35e4164758844986ee1b8a810af4f6cc2674248eca7e27a1fcdc7b1227c9bce58364cf878e1360d6210de419bc6e01afd21de5a139bb51397397794594b0cb735cb6f76ca07eeb0179a6c92719c2676d2f9fabb9edaf6b7b5b6ed8c7ac1d256ce0330f6201db0b07d099b19db98f72417328669accb4a7036a6f893df540bb2afbf80025e1e200d8ff4745bd5690424f04b166b90fca8ff4753ff191d093baaf754332a216accab1132ed7737508a5a9b10a0bef899dce92de68d04a1e7a38d965c9009e74d11fb1bf9daded1d6a1a1bebdfed9a077f2f046e4c6c41518f384c930fecf62604f5f9842691a5ffaf071fd7cd4115d1fa36e449bd806dafb48c5df49eed6b83958b705f7fed7b48e6e713167efffe7da2507ac45306cecf3feec2ca1a3b9210554ae1ab263273d5900854fbc86835c96426f0ecf70b897838fdd3a7070c6f5d5a8b02d438988efe033e25610bd937ec199d4c9794c4136ec18b7e354dfa3bd6755fa1f59afae97af9d80e075fa92e02592ed555c17c2316622b1fe0aa308e686c9e16047ca589bafc5f8a936b142ca3f6c81c708be11afef2b4d6bb03607de537fbc361e1b2b7ac360ca3f10613fdb15cf2467185edba2352fd5d599177df9bed0d1df0578e6e5c1f782f5ccebd2df097ffa9d81c50355249af6726f19ec46a2737119e928602b80b9df4cb8b6f1a53878ad506a6081a0ea5de264b9e2f95c4c305b5eee62380912da7caf1123440046890a92195c71d045a3873c9df85beadb8ba19d8ded9673511ef7cfe3634c59973ed6266ecf52345c4c9309504e28d6d49a0edd5b85cecd8e1c31f58fc6ed1140bde923fae4de77d593bc87107d06eca13d2d50e1838c2ed5d5261cead9e330a68e095f3dddc95668218c270b8569a2ec775a17c7396237789785bbbb62e3616e36294cde6d3f0a33276c3ed3a3fb407d06d55c17369d5461f3b920a3c358c3400c406ddfdc8ce2628afb4b4fc666b5253bab65e2f3ca664f05576a6b28499a24fd6c18c5bbed1950ef4e363cda467330f3d868f10736ef1ff0e132585692236ff6292d8bbeb0975c2ed11ddfbcd3787314f1e1552e0fa3d3f3a138a14ed7a0974e8cdb4f554946b7ea56f70e77dffa6a8add420d60e84b9c0a016c8fd02f39cc9b0fd4f53d189e2928f57a58fe19cd97171fa309be0e2677528dbb8f26b34dc1384f24b9a68d4e4d2ab6693929d8c2c645937330d4817d65aab2c30fe61ea063ae561496b31cb0c7d8b16b2861a632af391fb3bdb0f12ecc5561cb32e9b487c934acb4a84969234e95f06ddccf5ad0ca6747c72644be4fd7d091f4de7acad94745f8b47962672784334d5052520e3df296b8bdf9082f014a7426863975bceea14fa1eca682603ad0a1d81a35d944374d02b86ea32bf66b6f8bf7383dc4871cd2f2f9dcea8645e7ce56b709959c14eb5f7e7e426fda0830f50009a99df0d23e5b163af97754d519b2e9eb186ad5900e64dc9f5b72fd3f67f43815f4f24f47bd064d9c77f72f3ca70d4491eefd15c867ad6e9b537afaa0a60fc6ebc70c22ee2465340d598ea743a407f180b51dc990ae8ce36d7b8e00ce8596688cb46f6303716e667799db985001c9a6e7b0440cfa1ae91d9fad24f923da1721f2acea470e1b6a2e4be5fae5516dee13e2e3c9534cde5f19fe8ccbb1e6d82f9e5ae59736dd3395dddaf6245ca608655dc7c8a555de7780fa59325f8763deabeea81318eab94d9f95fc948cf1fcab9504f463db66f5b99ecfa6c4ffdef800c16567d26013a1cd4e0bc79a1f28e2fb0e6c92aa19363d97c3056eeb8d7b2816e8710b953bc04bf599c36c461b267d0d762f3de281e7831b5ea03db981a4d4042563ba97b3c177bd94684fed172c40cbd5e035440df47ea076ae0e2644e50b26df866399776b5f2aeac6ae842e1ed05dbe2e00cbc0a37f0567babceff88b788c24f6e0a5c81527d2aeaf499c24738b2e33c8546b80f7f98ed31890c05e71865bcb60f3371ba14c7bbac59686409e692ba263605a07349245bdadf64620ac348257619fb6f9e178426e59f27eee358145c4bda2bcb701cfe60c82797c4cd934e7130aabe881391d0af191ea1797027c35b095736bbcfc4e74fa72f16b3e7c0a622cfa8230f4b823496930a01143dc5f4d0566371becace2634c4c9a42ecf87183f622aab8a61fdde65a78041335a1f6b6ba4a5c94f45b60ce9127b372601da725c6596e4bca201706a92c30e97da948acbafd3aff571d51f98df3950bc6ef9ef99a8f23141c3ce7bb4d4c6bfe9a5e31be9cf5df03320a8e1cdc79599c5bd1c56726b73ace5fc2bc6700fbbd904b6f9be5d3e1a3d301dd6cadf87ff54f92bcc26b3a28a9d2f82c628a597ff6271d6652f961a14ed334009feaf39c377c7d992615b25a5f4986ada45dd00aed104188859ab254129bee3683f9ac69b1ecaeb62a844c476eb1f8310119b6eaf1ba41b770a26a80b274718cb3f7241e2a1278de728aa125b80a29de9b37165392cbd1e90f3f1539e92f2001214bc14b28c45e6ccf217586891d25c976eb016d25ef9096cf7bda4ba6cc15851f59bcb0aa4b5df7704976eed6ea771e287a18ee71a0c17e17c9709e6df3e1c046721a0eaaa9b1c8aea5cb93539d936bfd6ef98a867068094af3b92852fa60f7a2ce70ad8681e6560dcc49efc05f1f6dae11eccc88a17d4166122a7b79d30646719792b8a656e903b84f7d5a5a8eef58b961d1600624f5dadbc458468dde00a6ae2419c0be44acd63ffab339fa9c6102d462db0774c4bdd62a7754d22073014a82bcf416cb1ad508ddcacea1d9dd77fa44d1b6301101c9247530443d13cbc9aa24c8eb7b4c9797ff73bdf8934a1eb7e75c8333405c5b8a66b03907b621661bd7ba25f8a589dc98f990e7c514b6b2ce788d42a848b4c55aa3dc99e68c211da6e9d6986ddb1693902ad0b1525d18e4fb635370ac1434d1fe034d388747c2637234a44adc0a9bf5a5e302abd1dafecbcf9d3d4c48f987320bfafa6b90c918df5045d85d8382d10bd184499a59d44861a298973c1c8acfd50e21d2ee7bbeef19f64f2678dc90f98c3ceb95ff39f8ca9c2161d78df61b2935363ad92df95000354962890c706928babc2d56c54b25d5410d75f9a3599ccd6f3babfbd25b3c191241840c8bf0057766320aa9f4a2f155970f244672c12b00bb78fd6079d25190abb875f1c825ca356886e423f5b6d7468a3d4be2dc05bc0afddacf2070d5275531b40a629ba6b2e3fcd4824b24bd12143c82d1a1be2aa67d8edcbe878bd0a2bf1ed3d606af615d297449a72f24bb3c4210aec2cbbbfc07beca37f0b365bfc6b08c5c1f2ca0f9481f24c7779577aaa11a2b0b5239c335e9d32d1ccc3de7a625c6e7d931505d6e76ee7914392a8098c5c0ae0e45b6192c050a19cba6fbc217e0b87d2ad899c5f8bdb3281292174c18ebe97a76577bf3cbf4cd33f438711e8496378585c1ad1f50a6d058c1f7cf069d58ed90aca2d9152a3f52d15eecc87b3f47ea6207a7a8e1d05b15617ccd2d93eac6bb890fd96d93491774d108bc65c59d1e36afe115ca3a22c55294adade986e1175d2bac72114d2eddc9bcb52550f90a464f22d062724701a2eda7b4379c93eea2e51468dab300eea8dd7fa26f304ae67a6e966f3078967645d246af750880c04ea11b203dde6f7a165f8dea96b0bbbe94b7e58a6d085f3ef8032d86ec0b247b4f89d48f0d0422fbb87673c49e9eeb3cb24c5c104be3b5a6c1036b327d25ecdeffd4b1716590f937ad30637710e0b08ed483671834045247534abf381b55baa330b095e9c8ab4f0efcf0e332935e28c0c6ed2142532c018a61c1cfb1bee5e12d2a8a149baa9ee89c66267652995dab6a52028f709906fcf006833279dc7463d85e967a438b4941d716be3149cb68b6eaed4fafa627f4e33b2453eb648824669333dddb89af134d856730337d6ccfd0abb19063b27cee83f636bfe2ca3f17af7e64e95f7837eee5343ab9bd281945dee2d8fc0aca513e5f33af5f982e8e2950f2b69aa1f4dd7d995cc86f89de65379537ee0b33a640404df40719fca33a3cdc08f559fe241bb8f8767d56a5b47c576baed5337c839365e35ed62641100ec69f9d78ecb074c085906fb7e9a31321e70176a8d518775c5a771c26a3a2251f021c8e5ef7dd44d8deba54cadd3c520f3d20447b728fe1669df4101eba62e965e2d126e6f847e19ab14515b82c8961b32ed29173e077a5b7a4c938fe664c05a8d37f2bf5e23d747d663a1bc92df733a4413874755a5ba7d31113f8e092bf059a899600b4211b7c47c54bb44b944dcc496aca4b1294251cff1b2785faa3ef87e9cc013466d4c9ef873a8b1392d86c53e2f5cc9bae381945f3dd02fb4a541b7d5e125a41b92a9fdfcbf0a3dac951de9f30fc4f1fe7dc27730b36576e436f72c236533eac2a1bf087bb39787097ba1dffaf80bf6c65a7dcac35d337bd48e0afbb7473d3798d61d2692ca2309f4fe4d26207558a2a22a2e38e5bd10d2ecc48112f5c39a5d570e894d7927b0a82d968678647c91e0d4ea977dfaed9c150e7778c99c590b56eecf73cb2e05d140025f739fb44f2b69cde4b25e13d636a0af6b6c554cfc297960508979abce4d891dd81c12dcc3630ef2d71d73409ffdbf12d31cdb3ac97a11e4741531589fdc8432f36e8c1c1650b418655bab2d4e7fa11bf90dd8cff1ab276af98361dfc4ef3e0c03720eb3cca735e6ef9569dd10d992ff80d7a74b0e05a9907afd0bfb8d78e0e40ea3ead8286908aa1ece91579908e67c146bcc66fb92c0f632f41d2b8dcba11e16195a9f1eb3758ba39f516f6d0d37b3e8b0eaeacc2c8dee7a2553e3f295f226a051f0f4a4ea5a8763098f44bfd592421d042a5c424f063c2d295416185528f919bdc00d2c5ac1c74e6d3c1e4352eabe797ea49714c8f452de0f91cd3249780f0bfed1ce27dbdc079c785500f558449a882852b5212c9cb55043ebfc75c1b7edcb76cc808394419c4a3ede548fd15cdc414334c66fa41637f0ad94a7ad284e352f6f36d4f3cf8a212f7bf700d6d3b31882b833060e4f487bac6840423e2e1f776ab27731559ed3be36d50988f71029645aa2f69e1116d434d568148babca28eee91ba023cc80a43f5fb5c05ae27930dc1205129bb07f10a98d099e35a63590625d3242132790115c7481472f83dcc869de4121e93e045be195bf164c0c69603da72fb2042968d8865b90109c3c675334cd1aaae5a5387d3e7e785d631bd2c6dc968eb767cfd7ac8a1d57a86df9618a6b115997f9ae837ad38c002cd7edf340779436c40a5f596d85f7199e8d5d4ad9ef5517c57382030974b92aec10eb6c31b568fe9d8527004fc67e0253fc96e5ce3ba9e248582f55834797ba2a9fc3610b04295e1c37b2b54f6b9500f7403f591089d4c269c61870b32fadd0e5c36c03ea5a1a710bee7f785e7d461a3ccd3eac96a0e283f531f3c38fd89526aa0ff870b048e2e6ed8265acd977f92c49f3e23274e87a1d9a0f70b53f01ad076b2a3e0f639af630561ba3a25b01a5a6399f15e5c2a0b371a90fac1152284877c4a83a8d067883c1f43100bb0938d1a0234e7c36a398332e80b713feebd422cd22f8c8ec1c0f9cbfb784564fedfab23e18c4b1bdb1f59f6068a01bc69b6701b35df61d14f8fcd99ce2c41e3da1d848ac5540f133192ef47ae0cf4785839a7533e3f406b1f1b9791ce05550ea062afa02bbc28b6e9716f0fa412ba137873393f10d5d3b249be42cba6b0201e9fb036d000c94b1cdaca586ba4d8147a364bff77ba3140c61df1e5070c0b3b439f4d0eddb0d4162ad9d95063c39e8b1d3cb7cccbcc371ca62e1d76767081bcd7c398f9436a32635d97e9d72aa6dd274e038a2f18274d2c51b10f0a8c0b9e7f0df0a215835a17ebde9b7c7862e35f81de57e27daf3d8cfed2bb8949c1b125a28671c57d6987dddd0346591f8ff2d606cfa62056e94c9181f966d9eac6c9f9fd1ecf71bfe7399e6b93b0c60a66cf26ea6874ee9e6625b3466bdef9fd52db7fcbd6441bf175a4f7b642380d5185edfa9e43b17628b11ab19fa981786cc5782fe920c4fe00f746b16e931f63ec7a8dbac730d3ac1d594cfe652c1b317b6f0c711a77b7870f79b9ee7c979f24116a3328a61d8a37673f0fa8cec00a81bfc6b063d1c3ea5ddeba3cd0a1e69607648dd4c0a7f033340041e6a1bde6919f3060c06c0f040bc2701118577dfd757e82b6f25c22bb2a845b3cdd3ec106af5e0e844b55e16666d41b75feca2bce1120e6789e0c6878a72107cd55803d1ac1a4d79c7aa0ea7babe2dbd1e581b05491e9ef233dcaf8b02c0d9c93deab6997e9d36c3bcc79fba4389810ef4640273b432f10d1eb1d6a1210f53d20388539998bff04ad88cb64e75433f5f231943b628b605af5abff3a217bdf1bab8982ef05de60d14b10e77fc985fdc14ab94cc9ae6da82800ac1ae6fd2eb2e06065ee0ce4a520669fada445a432dee9ed54af39cadb3ce6515defde27ad9a151ad8abd845dba0343d8e1d7fd039ade06aeff9540bfee16fe81ec1d867a525069b11544c2dcde5768a9cef82da337d814a63573959a8c193d9a4a93b20a0dd92082f4ea2cf9ad8d5bf2056153da6338cdd0af65051d4d3bb48c13e81a51fc8fa7778b30154366b25b090036940cde9156ef88876d87ebec154cef5a2aa7dedf40d2b5acc8b7bf2e85a2567950e80733ca80cc8b8975bfc18f22d2ed8f6ce4586273540cbca46b0afefdc93aa469188206c14793ef4e9e869a91effce97d038ef893715e35748eee05d402494e02110422af3d1f32189f7b970e2c157eabba5baf98a105d8b48b5bf0d0f9a75858a3c061b8282bf2a8b690f67c4b788060c00557f75f99640cecad69008ba4ec12487ecdf8109f772c2ac838b762c776e91faabcee6ff394a24677289ed95869a7f351ddb0962c00c441190a08e47241fe3b5247c372e8a66a53deaf3eb77bd5d4b19f51d7b055ba3337f54178a313f2198b44b08fb9e44b56315ccc17a2cad9b7378b83c7ddb7dfbdb679a8535869822b7fdeeab5d75233ae52cac1f3d7fe38e5997b5a2b9f679894b7b2b4200b61d2655c874022bbdc8cfc14b69c89ea38589deed53bb9adaa9231480f8e1529d18648caec01736e70c140a0f331674404b4a0afc60704ce2ddf60ead2e77617b6afb51b1ec286c6531e1e37be7a3803927160b5558a1a1dc3d366e96e35f2439188bd7fa0e3e0284c8722433f6580ae3324da062d363846a9833d60fa38b8992652b117adbc7d58c024fb819b798fb80c77fb50864d8b33ae7545c4f695aa001be25c7ed165d4a004c2c808fb8865434bd9e7af9499fb23f03713e3685ce392866d8d15cd151f33cd21ebbb4819153f4a4819d91bf3786261a003bbb0b0385bdb091eb7d9dfbca9a680ef91514e1e20bfe7e70783dcf2cb7d0f00d55ffd25f560d458fb32a0a855af97def779cee486d3923704930ebef752288a6d908bc27ffe27ddefccf61d82e5586433bf48deac82638c9d8ca964a979033a61ebc87e0b389d9998b9786d79e849f462da0f7d5ff7bc27d5a2579e93ec29cc0f8170b11909d237363e8825fdd6e58209a7338ce7fe3acbaa92d1125e1ebe5fb4235495adaacac4c3c48b2ecf6e92ae2fa7b4720b7a9f6e739d72f15137095c388a9215b470368960c9de2d6a838adad0210551cb42db884e38a8e90f63644098611a2e762c71084585e73c920ebafc7991caa872a645221eaec55b5900d48ef1a3f3e08bd93d96c14a15ececfeefd1e833d1f5a2bf156d6f09a6420ea0757fba330d950aa6c1fbe8bc72df8b2ceb87d7e883eb52850c664ef2bd09d6c7bc188d0185decb1e65d54dc347ba7125de959cb9260da22d2d635460dbadbfafcc7a6317e09814139c4aeec341c9851023319525a6d81185445d0f2e537f306425e79fe7f4a8d6df3fc4c5b6f66901712030a017ffe9a66f75311899943f2b7b954d15bc2b9396e333e1f53cd98761150a299c7264bf6a4fdcf88fb26ef06b44b16e0b85c53e363228d6446556105ce40d0689f3a3f3b6b268b174a5747cd7f13b74668f2213b39052cdf054dc767376cd19c0e663ee91fbd2722c9d605ff442850c2a0ad394d327ee669308fc26014102b10228bd58977a74e3508dd291f8246da1165d687812fd472748f0d4a6381c93514d66e1032a349312978b25498d5fffb5a9c1e3f32b318e66e96ab0a76e77628271da13e1a85d40961686e66322047ec6105ccdddeae85f2464e09ee7ab2dca6edcc542daf39defe8dd77217459e71e5d163ecaf244c13e7d00fdd00ecc054c6309a5cacf7591a6333c6f54b985ef19c8121d7a3439744e81ed0445b463bd0b45cc22d3083cf7e115c59a7011bdced023ff79431569f67bc9fe3ae3e647235f4c1ce2464f35aae3606837e587513df9b75588b6e5e6f362e6aec07c848c55b704fe0ba6c25c09b71d5cadcd2039f49f924460f86a3893a393382905ce9c1e6821176e28dca68fdb0cdb4420ac93d40ba75508e3e60817a835aab067cf4709f6fb48bbaeb5544f504c55eeb09f14a58c835e228981a0e0030054ceff08597ad843ff2ef4abe9c90506bd41751422d20d8a090dd4e5611c23b0d0ad7de9d3664a1b8c74fbce0a47f946d51dbfd17e60373062be4e0d0367c3f4c36c9ec428bac76584aa6251a9dcd15e81066d4518e12117d64390a7cd7d8e2f6dc211982adda4ab05c2c7808b69e42a9ce7731218e707682f650b13aa776a97a449f9659c479a14638984a92ed0991979aedc3fe767124066fb3a2fd9d263333fe97bb060dc072553e6ed6ce0caa7bac498c2fd77604e1852080eff147005bfcd9f491a69da26be57871607b4cccf826e36b17cb94ce682c2fb51a66902a5aed11513d1076d4e84889fea6f941a638773a4738946b6160d1c55ac216b3668e838fc45d66e8b4261bda0c52407892bf8938e3cc1d20449fdb8cfc463e282b45b52b56d1e73fd205846e607478459cde4bf555599bf199aea1db918d89868014e4b3bebc0b3353da89503d4d0191de67299c31e2af51fa1cca7d9cf5d5467d68377388839b85f67ec3925a92070098fca745a383062c28f73b0820ced54fea110ec1f701ac35832f840d6bd291c9e5a6cee031bd50ab32e3025d24a9ae513661597a8b31895fa989af41a3d5d6e0df95db0c5a2e45ed5ba5de0c4f6ef9139b218d99525ca0894f69cb9eaec62993b82e76bf33b854655bbfd56627fbd37eb7b8986fd084346a73869fa49b9db481e67e5375a5c4db18dd50497e79bdb6cf0203c5e060f0025cca2fa30aa40b0d5a6d5ff43b01042def81f6f9cff9c19c4b0b0176520e0067de5b079ef1bfa34f50e51de83445e7836544f8f33919006ab28fab1edfa1cb8c87bb100b3d7800217ab3982c1f898004cce5141b26047de83d620e7f4f455ff3ddb9d1dbfce256e924539d5f84a8d3566785fe5d2121b84d612cfcea11a9e1712d0b1a642a5b0e70c64a9c8c5f19ec2ae9971ec68e2ac7e571df8035fd10aed93dedcc287b493641d5b6821adfd4359b46eef9710b73d091a9436893f51db679e6876587abbfdcdc6095a67ffec2c9b891dec42bac612f3aee21482b34f8de30619ec3a829ce80ba471c3e33a4dbb2c22e3a2ec9f47fb0183ba3bef4f3454a131cc813217727b64a9e001bbf36e01e2982fb3d1c66429c6ffbd76cc1df55a11e6c8fddb5fa504b5d19769e596bca930bb08c78518b86de6fa4a505f940c521c2dde789a36e508fa31512b7d1cd21147a52302ffcfd2a17eea4fac548843467852c03b7c08b69e66dd084c646b46495ab4953b53f3715c4d823b9ebec37220cdb27780f08171e8ba46bc1ca6bf0c3aeb58d6d1018c10d341a1c31a7d1df6f0dac352b2ea30ea774b19ca02cd73545566405451b21fede651a7d5bc7c21d448b9533609e71810614d7eaa2371be53282e57a4ed680addfc090a489bfaf50d4fffed7932696df0e1ed4eef42b6d0737efb7850f05444fe7bc47601f15f1e6a4ace7281f0c65c38db401fe571ae5efc054383841e4e3535b060d7e25d24b434eec53b91568bf4daf6715d6da8c15179576b3bef9aa0771f67ef3df8ffa87742c26069b9400f3970de168d0fbb29652c13fcc337d15c9205daf648a958030a8c06ed34ed486644a63b681742b3d402cbc0d0d7e05181fb8c105010fffcb59d5beb8fcd52939f0877d6f7def064111a1c2a775b369835e9a8947c25edb233dd11016a6e144735d175c11f033eb83c6c2a313d14b5bd0f47cb3a3273d54833e64f6dcb3ae009c54670d6032691bd742d224ede17b253dccdfa50df3ec84c97c8025659624d8c85940e68e5c1c60c751856aa8904384557f102e32b69a78c4e1e4dfbe5e21541b51cda7426c61d5dd9b13543c40ea456e14690357ab6ca41ef8cba29aeb7d8a23c774361eba20d9fc040609901aa35ae3b8738a393fabf97b7ecd91edad33c983c0ec09c436a3871cd9f7bc9493f51db5f99ed33687d34cf5d54d1e2dd2896d8a7939c8a9409d87a4ee38fa511097ee7c6ac287f1215163ab9aa5df65c0c68f52fa1f568d04acb3e23799abd72574b5bcc1ba4aa37912d862e80daf826a98498ed8b4e53c903be7c5b3ec42c226c83865100040964f191c841ee68e4e88617a8746e20de2c2e8977a5b928f04d12e56839239103029f77514431f4558e8eed527abfff15db72a8c31f10366a6912386034cb16fea4d555697810db00a3eeb5a7bd3a218719d2cf4f58f622c40a2a5a2a266e93f7527357ecacd3a04818159c212a9e6338652c588961eb17cf26bd8517fdd430cabd0c0cc2bb8aa03e82ffc84cecc07ca869b2b1a9f15001ef14ccd1701a8845be8179d7f66076ab9c82e957c76aa06bfcabdff4183b5666954e7a976ce317d605c76456a29112b69989a84ad80a79f4a51830de10458012c4b04cf74fe59c485519b6a7e7cf4881ec9c1de21fd05315ef934a25047d8a19447b0e48383ba9f04ea3910d968a725c729718ad46874f04b032aa59126ccc1c4c130fe4ff3e2974699f153f1d2f1060f533124d0a1c7c48d32519362ec8dba11b287eb1a8193dbf4d81d5385684e0a3ed91cd449195c6fe368b0bac94f7ecb02b8ba64b286f08bbfe45a5443f9c734726909b49e5412c7ebbdc2b6188d8408a60f22e278eb6f110575122c0f84df08a40fd7ffaeb94ae135ab13f7d02acc129784155f1df2bcd1152fb3693629103ed478ab2c5813a22fc766c2d61c4c915b4c83b1b8bf02b8f39caaff07dbd83be3af151d1f7ec3f9aec22c21346e442ad3c11ed400ca067379b4f7d6ef70e347ea5d6e9351fc1478dfb4f5285381c21161d740d270bcc0cb8d00668bb75a0d219fc6ee0b3669911ab912ba4408088aa087a49d4b18eb538565b4c838bbdf6d08968ff5c30ce4abd5b0dea9ff82ae0a1ba9d686aaebd678618f082fc58620cb5ca7403380ed7fb0648ce1ba61d7212d7a2412e67dc1e29ee9e04c8dbe5ff26cbbfd7a3b1dd62a5c10849f74ae8ac0e7c9330fd2cfaa82569698d103df8f93d672ffc0c1393b44dd69a8c083288704ba19ac5eb79f691b026b2ec9788f0fb314e326abf66915ba1456ee3e8f1fad304f70520af41eea66fb759ed39f9c29f87860a0b94d1ee5cb98651ed3ab3435586157ea623e5f9de054d10d7481a663943ee5e0be612f1646d1af755b8d69c097e5871b3409fcd6794650c41b5c5f79d0d4d1e93ccd835dac89f84d98ad3d92002e3d99a5ad06f98e98686760015dbb7627ba55ed4068ac9b30a2e6b0b499a20bfec47b76f1e916cb23dd23d56fe00ccc29516e3232463ccb5384b93ec5acc73d54907543ee15adc8575fd08aeb264e5ab65bbcff84b250be1ee3a8d3c82004e19ba3cf7fa2d2728ec3c9652950943da1556bf1e3f624299a00c1ed10373e79e10851f0028915cd6c44ac63f2ad2f8d16feb59a1654986f79395888383dac7a8f8c34d1c3049214ab9d5849c1360a1dd5cbf6531c192f502c167df08a8fcce398993f6d4fef3b029533fdf6941f202808cb8ed1745d2e536c19cf7710b4836d627313d1b436e32f387a9bf76af905884db12a144928613e552607e3f14a4f16b5854e4f178cb0c8ea3563f5ca35661ef0a038178fef890516c42e8db57724ef07b6544b43e4410c8c0b99c74f7e65cba71507a74206656709131a1b3af9888d72e0f0481a356cbe05d9d062d1e2c0b64f7e9b63e050e169736bc68b6e90cb71c0d4a14a0b38ab18554e60c8cc6b56964bfa62a1e62df9c7a6a467cfffbf9ce4453c1109f58530725a9973a63ad0f3b5dcbf399c2cfdeebe40c09078530ba35571a9c5afb3d97c8bce3ceb6a99aaa832d9f9b80ee4853a021bc0fb3494cd95f3de40e5992c0874352861ca79b61e5a5d9564f2906bd19e5c4a38edf7d742f1d749b5e0c17a1572237ec1a8f8dab60f14d4eb5b94a872366496ff3a03a6a8571dbc3433e18360ac4501500457237e9ae85ea86ecb29341a4da4ffd1045f88925b135aa3c40054591964d421124923dff12fc5eb5d9ae50878a51033eb0a5e1466ec901ffb3b0f844c01c2212a9da3f227140cdc97bb7c79e6b2af30ee3fc9ac457695f6797cc288533447a1f47ecb45c913c54eaaf6b62f15159a024ab87d66b4d49e53384d54e99a9b37426cbe097aa0f414dbbd89537fa62bbdaf5d60612f34402e9639cdf24ea6d222f3c99833af20557232dab93e29a6c3d9c286d32500eb6fa48585e2ab31338bc33fd52a3c99617cf74fbe9ab002e426aa6991ae5f756c759c7d928e9741452778cbdedc09cb45b5862f3a4e316f482431f43274d28c0131a68c8d7aad5f14b9c147bdc9dd7b047824f2e8f7964af2a0aaa488fde06cf51596b58c4b6e62c599376f7f2a889f5e424bd51b097b5f1d97559949f7893dfcd6ed4a9a4ba7e4413fbbc8af5d839c1c50e404f6a9647eef02b3a358895613d54741555ca1dcd186850c2c6803ca0d875d073970e4666eba2dc735363846ebbd92ef2cad81fd9bf7a1466c2ca81bca236ed716921531acc2fd2ea832dc4d05fc972346d05387d7562b90b47330b0d3578c858a16105778b07edc9b90e73700907896ba05f8038229522ebe7b2c441759512b0290bdfd0643cc2656e0480bf1d6199a819c94e9a0c609ea713119b05e57e57d9e9a0bb99a9632a8b8b181d5adbff3e2d3dcd23e9e0ccff3e7186c64023be01421e4b06086ec4fa74ab27b8a90796b6c653ea7debc88b493602a81a2c8ca231d0b33d8c53c54447395dd77eec4d9845541d4ed8201eb4e3b5709730d5da3251b586a680809f2fae67d89c1fb594b7fe7d70484852f420a02cfd77f90dc24d16c60fbc577cf884f8dffe11928d5f9ff73e8eb5b866154a5325cdf96b9953d4f594a03e656f60981538b404cc31dbf1020155c992df1dcf848f9a722d59a325f7ab862702bff081c6e7d5679d627371539e88519acdfcf2bd11eb1e3b58650ad179765cc5738b24fa2f8a706ed2fabe909497eaaaf3663dcb85775b7bab783d174e7d088944244be024994e54145ebf664ad90b3a83b0e56d537f8e220dd37be47edd97ee4e1e9e839108337d3176b91918a09d10db5c15c3b4fc4b9fd26836aaa5553cbf205539aeec8203ebd6d287b39f4e70918500ff5b415f9a4a6414d4efe066a1d62b00e92bed7a36e01c2591a75b5c03596b460893a35ded082520a4b90750261ebc9a26cc0703f92c06ac15721b2a959212134ed8100cad3233428af5d9a952bf992054a97445a3357520979fee9daf6644adde0e8d395753f5096367d17614e25e6e1231aa911df81d882eb219678344aa09f6368666c295dfa5a261f6e143c410777a52de9b42df99ca169e69b7a215ea83e8af3db108f187eec2b792dd6f1199c4e5e6af593d45f192b03203ffaa6cbc32481cd4d5d649df83ae9598c55e33dde71e7770f583c08e31fc91d3597cbd00229655a6af6605c06eb7bf0c054ebf6f87cbf45ed3eea508f79f255e5864884a2bc1d4c28c30db467445cc2f8941b35f7deae296c1f278719eea540c6c90f480a98bebe9f8c6a56bdd4f47bb77dd4f5f3c59ff2f173bf309435ecbf5d6625ae3ceb840441b2f1acdb432a1536f2540713397852b522c19221b213ee9eda80b5a1024cfe9a28c7f6f74283994953baef6acc79b0c244f8e1cad40deae46265ebd54a6f1d65cecaaafaea17beb9af0f5f1778b8d1932b4e0cd22ee49c8f8d91f68d85aad3ffbbdadabbe17ac17229789481652eb55e295a64f49af785c4d2d36db470b96ff1735fb2571a514f1d5f246c75203b3fd50ffa999849cc35a2429a22de550a0383cad0e4e75e63250652cd00540329b707f2f4d8610dfab456ac2fe5641eb37a64397c9fb78a8a1c3fb3a4d24d0764c8a87cf3731928e30a46b04509ffc0f850f327861c4e0a8449437acfc9f5d2de3ae9a581888a2cb1fc41f346324c6d4a89627919a0b7422251bbad8634a3ee098cdbe923a7b74c7a9e3ba848bf713ec4f93a6875f9ab1ab60807db721bcb6666e3640704d1755b2471bdd53e6f8f1700c252376adf111e8f3473ae974c20a4b18e4d1fc6679cacc4777fc6dcf14d0496cb788a90bd78beaff5b15df14abb80189ed79762742ddf9c0888c58fc86a32aada7391861a43ca29643f88d90cfa78cc4ef8542ee52553c991b61178616b859ec517bf8ce760817545f27370c15c317a22ac4aee0494cf40512fb912bcf9fad1b1124765b66d726103f7862f55326d67fee63ae0445b3d8402d729404d479b414d77dae4ca6e03e944941691f8c97d510309460a1f77c74a9f96337b1b39838464a2370102b8b6524302fd7aede9e843ed228594df4f91482fd880d5847dd834fa03f99348f85bc234b3e98fb5432a81792c9daa07603e7e1ad94f09217aff580827cf9c9a2badca39b99f2d90a3573d7435ff5e623aaefdbb76a7f6af0c33f11a30badf0b0c1cbc5687a1cf10c0b73c79a806f17f8083398e6ae67066de12e8200db282ff78e0d6e3a205418eb55a599ec311a6a4456af400b197eb026930a20fc3e888c43bdf47b402f3da297204cf023af9547623c05df034c04a00990df176757f30517b42bd849e2a1f764ee12ecdb24497d39200d4484d7db728009dc1b5e19f813647bf8fb139e9e13ae5136e210c80e07b2af73d5f893fad002bdd0e892a67768dc220724e3c7091cc0dd4190e1d78a504f9080ec27d5748fdf98184a3cfd452a53d32bb84ebc0dcb17f8255346daa5bd1471c279d6bc1cc628a8994a3501c887dfb4ec6970c2cdf9fe4678decb6393646131d426de0fb46f1c71fa97dc3d7cecf141ced4f6a3b85e50c1d89a8f575c5f0bd3173b98f83408e8a0627a339d10a5c6ef81ff94e8e764d7f4be59c687c379471d77e35123a646ff4055f2149e705bce37a4d0c9997e513a02d5df550e61fc3b73007572a198c8efa594ded700bbedcd8e89978ff1c67850cad0ced98c26eebb1d64401d09c9e962b22f6036994b5ba3f8b3eb2d9b45d190c350180569a6f9d2725f08d2eddc80fcf542505872c13455e0fa9c084cf2f7a772f50e0d5d8ac24beb9f8947023ad1b3a524e9117f3f5b7d5f69aacd5deb7fd245220d63ba840d793c344b5419c345aab6e6b6f3446d6b16bc9402eeeb687c6cd1c8519b3ef5688e22d826dbb4f75da1687f74c32b91739992991db2b65566800f1cc9fbc4c3d9f7f3d36c5fc9efb78e51477e63b727b7dfc733534c9779d3fde0ce7be73afe06e0d3f97fba088686c0aaafc1aee9983f210d4e79950ac1bbdb98440d4c50237361fcc6d1936b1b26b1721254256e7e6c5cd1f0c49f7247e56e444acfc5e79c338aab4d3bf5d8848319ec7a14908b50a71e994c0cff66e8d85ade4366f87004f784384b4bbfc681ea3c85fffada3b97dfb74a32685d21d9c774aa32011185e7206c4d4635ed88f3245dd31982ed8f8e34a14821660ea289ade492caa7792ec19dc3f973d5930cf6dc2e8575edb8ae19c31077d695e239332337f87af9d9bee8b8d62608c3fd740b7c32c827acd3be29a3eeebf3ffe50384ce67adcc4b341e77cc210e8666307b9ba382789971a75cbfd0df894b636f597f18ece1d1c448f5225d858a7821a705b13f3fd17e2bf6fae92a235f25a4ece7c6edb0fe386946701914b45d603a776b94cfee2eed49cdaa9f789cbd424ed26811adc1cddcdf42ab592db79a6f34192f331a4577ce0379e52771b8ecc6c277bd5632d9d3f410b7d5e6831972d2ca9e037ad71a33733a37d859f949f28b3135c3f029f96949e93a5c950cfbf72f36a772056712c8146f8de35b11dfe01ebe425c81de9139427a0b9455af3b748deab3624c0c3743c0a42c7d2ef4ea77d7db6943ccf82d4659836b4b27e0ec5d93dae1bc1d5c8446739e47f53819c2f52ed908a387b8aca34bd7e4c69efb765d7ddad8a018a305af07bed73e05890c48991655c9796f593130f516b1d8dcf9c766778e7d512568f94367c6af0442a19be75164cbb42701b432ce18150d4c31c0d7881e709dcca8251ea38fe71cd771c2e9fb33c4894cecff21181785a60cc7e4b660968a57a84920f80181d23f15814b44e1e71c385f65e4aa15aabb55cfe6dffbb58758ba8e16f0dc8be87929f15c8d7d32af1774693230b64df04d970a3b726281746dfd37c376be44a31b47b92a820e35edb92c6237b93f9a82b591a3112d82003eaab637591e613464cbd2a809b656361b9a24edb8bc232d5bbcf62132b2e5431c610fe5c93ba6c28f3b2f1e10cbaa3f6827280c59eea35ec113cada3d7a33e170f38178b66bd8aad0ed1a64be5dfc522fbd96504f0d234fed2faef9d30366bd1bfaad165449ecb58713be35904c1689f3758203cdeb3a6c2503dab86b440eef0544d99970b88c329a6e9808d8eef4569d27aed674b6594502a4674efb329d5efea9ccb4729212b1bfc08766f5231247ffa6c9fc44eafb041c9464a3fb423cd4d55da36d1e38f00f7d0d75801cd2d4733910492f3bf71b19b4687925edeea6cd6dba42a0dd8783e515d5c9cd8262c245c47ab2f4f8ab2e03a49e3d80bf707cd65a86d54c845a887d528246bc901ba7fa8077d602df67fe8d7b549b6c3106a0773791b6deb4bf71a34415d89867f4a5ce9bf83b675ec3d692bc5da09c4fe569e09373286862160b6467c8d5c722f2b236fda1678c975fb5fd8b396cbac9ed0e764bc03f9c71fdcd8eb4967fdca5110161e6b30ca5fece0a2e2721b9b8f27e12880e983c31c86dc457e4ce7aefa3351a3f88f1d88e32c9f7d9edbc8315f9158be39ac1802da8912faab5ffb4f5152c02390338ed02114feb3d18816a5adcc38aaaaffd3975204512b2b59b886428a48d0f96a4c81b8da01ead25a8d11cabfa7254989347ee566fc848f3065856aa6014fc349773253f5ae6e7c54d7019bf1782f8a215049cd127c13945dd116ae420ae97be25a2e2f4de4c9804b7a662d4d352c1edcef16918b5fd8cb2e03a7a88443465d6f3a9cf18c3200137e8ea1467c58047b8bd4d8f455e2c5dddc67cbc424aed89b6db174d8fce0a0c31dd057f2dc5e7543832177f8d85851b28c786521bf7dbe52dec1921922ab1f89cd6595c726adf5dcc89b76ed868adcfc639b4bd431a0db3e1389b744ec3b78d765d2fd62acb6072aff8a8a9c3ff97320446d319b35055e7e9f2e6fc52d4469e25047efd8e12eaffe5a4862de0a68b6704dc2ae407ac781e1a25b982f00acadf72c9952ba140995bb07934d2799ce94d4109f8cdff32ecaaa735d4dc35a4cecdd939f14d00ab442b31c227caa2c74262caab0b8c957e818ed2028fea7bf1a33275cfce8ae014bc42194f34587abfc61d502f6215b8df6bf8a770f4f3c66845f0628672a12f6f29eff71dc9f8561421a176306ca619f305419a72b321e526721d3bd6af207b6fdf4c8fff88f28819da138a002bceceaf5ca42aa81bcdf9dc1653abe0047d53b01b62169d48912bcb539e31f247539a10c038aeb8da39b6e913b195d00fc6a27f405e9e5a733ff7f8d01c72ca2e39d0994eed882c04202957a771a15cbcb896cfaaeee0c28de18f3d64e812a3cab13c849216c34148b3463335046568889cefdbacb5a62278c3c8e9d3a935856e00dbbba2a2d5155682616c39500d4713157f770a671d969067ccf47361cfc1bdfc3e55318a6d9700c62614207960b6bfed83ff9a9a0d1297d5f61b9a6d072b182f6275153744d3e721e2b750e3b3e76e89f5a48ad5a9e524e0cdb346f5d0efd8ffb62d96efded4623cc4809c9a091d27a6ab8339ebe80bb47127d2c7fd0bb87794f31c4d73e8d3684e716b8b82e86f28a9935daab4c72d5c99afbe5bd238f93580d0885748cebd7a476325604585e0433e3c2d6956a788e0437321be20d8f171f0822682e919cde84628e4e4d2d74d84c0903b6addda98c10abd02c18e0e5e134e850af7af44192627cf95ed25cf01d000b77e67defb97e86a7072e6b0d6958ab8810f0837f8e6aba806cef898c8ea6e25bc1d861694c3dc8155975a0f622f00eddd0cf5569d13d1a3a5ddd1b1c42202ad95fdbfc987246e4ed90ef153fb75681f8e3c0c3135a8e684a5c07f4ec580e5c72f784b66ecfc4246dfafd0b483ce5992c3b271a8fa0447e43d22c068b4dd4cc7da21233d6e64d6f1d965b359f5ed58c0c6568b4349854dbfd6f59404fbbd3192ada81cd124b26d3264c07e9f45bb9f6b89cbbd609023669e03c91cfcc5b3d98295c764b8c725e021fb7841fdc253fbbabff0661e06335de68f1acd0bff0977b59214b457c1c18c497b67b26ee52ad460b89aee522543600b135886d527427404ce2f512a267c174b5778e42684f665e0136dd4b38aa445c32e585bb6444e252ede0706075dc31c2e0305de2ad6cd3a3f880579c448a96c7c27b6020f08aeece9e384d34378f64449da367e2b8191e37158289e94293034f396ae7141241228ceaee563df57fb3cd1be34bae7d3958a510dc4e858977def729cd4bf5bf96e15eac7330519110932def185e2629e76eb51ded4471d6c6c27bdca3d501edd5948602177a2038a945ecd2f684049c7cb04975e37d185783735c840540493a121b218c0fba38d9fa2dffae524ac588ff0232a70b99db3c9b86c4990b7e6be817c88b4410f8d032e4651c4e1729f85224da1ce4d52418a57fcdb8dddb2b151f2dfbe5bc0adf3e0d6b8fab0e93036722cdf9556fc9bc35c8ba30bf3fa58cc45ab0edc487535c9817c6438797054208fa776925d8d0aa9a8603f0941338cb409f0190f11e8cefda0be777bd005e5caa3ea7b9cc9abc1ab1fbf7ab2ebaaa5958b9393d04f91e26923cef01fc1655d7774dec512402f751ee3c28ac8e4e21fea625398fbf9797de8e5917e9bf31478087b919333f456e108c26a49255ecc1adcc72d3f23bdff7e10d0eb0e3525e35eb77b3587c9c1c658dfab2713f6699f3c5a36dd4683b49c22c716ef0dd3bb7843ba1607f65a684e57dbc7c1bd53c0b71a3e8ac5b064b242a216b39e212d3c3f40b8283a1e5506f45b077e2cbe0dbac8930febcade15b3491f22e46fb9500f655dce6c6c3e35863fd32eb660e3dfc26b2099b7ad5fa740cda25025a34c3c943586ad2b2cacfc8a4d47e36c7b1f54b49c1181e935f5bf641fd0afbb942d4f880b8d45b11c3eb0fcedec314a19f90dbda08ee43fe5003b02592672c7e1c0f7a8ade6e2c377528e41194c08a89924f82521064897f3503b159664ee8f35e533b9c315ea947a2aeaafd223284cc4180a564c0de636faf95c40f83adb5a65eb79ead99b867be96270e83d561dab5c0ad75f29910edb9db32c450ab732d27f38b06565491605fa2817a8fa4606361a50542b297b38180cf931574f17a3227610fc9cb96d5b3e61f601678032701274f00c512ac618bf7b06e09a5f2be4bf5256881ea5bcf67b82c37ad7f3158426bd6b3e16e8da5300f5ba4b180600532bf45c3d19f42c7af5a5498c8974c8dc418706d1c56d47120eaf493cd3cfe7d66015fec9a46dae478b2ce2a93c0946fc941228fe4b49a3d7041f77d3747dc56fdb3b7ecdb8d5f4b4a19d3a096e68abcda8c59622d765261544f6f12d3e4c1fae71172cd5dbc75ae9953b992e44d10fc117bcdbc6c3d2b40140c77023e2de41f0c74a7a07f6a5a84274d57575adae798c3571dedf64c52413d3563f9a1f8c20a8248ba9d88cce57783098de646938a21ef9b64f5378bfcbfce3db0ab09e6db323170d5b57b90af3bc0989d0e53de870803c2a181fd9a02c14e59c1172371f5877df7964406d57247f308c5e01c01ff79350aaf8d58363ce78005311cb2956b88c6146776e792e593ca0a9d297b7b4407fb388d389e0a73ded8f901d35633c98ce42b385175a20d0c12c136f134f4505858acbfb581026a34b85b9d75ba4c0ee2fc6a563b0b27126230bfd6366232edfafdd4f6d7901229758c5f3a8d2d5191dc477a01cb60cae0d1b32e2ce45288df3a02887d648497d30951bb0909ac5a8e6b34aa4697c091d12a5bdfa1cb97f1b428a574c505cbfd4f13baf1bcca8f1b01f05f86e67713a3cbfaae1fe296a9e76d135efdfe93756270a4daebf0928c9a33b905c65a3bdaf389622b2fe93ead47ad7d2b09d871f1d2a7fcf60f642d911e502f893a04441934ac97f0c62454d99c1e679a86886f5fe54f57b72b0873a76d633c79b1839a118cc4d11ca5ea1b4635950ccb4b71e4a99f4e05e41fd9611e009c8ff2f9b6bb4d1a9e4ace7cc0aaafe7fa0c1d16e3c2885f5f3ff2c648be8bc913da99aa934c3cb8d03c009a581aa550162075d9e9cac5dcf50387a3256f8d6911408110ab56a0fe930fd5d606ac1af2a3efe73df768105df81c4dd48db497ff3c5e9af5b2733870d145415ff8616d5ccf096435b53bfea5bc47abdc8b2e9adeba7a61016d5c47b73ead6a5d8c37a5765ba934afd65ff14472ca75dfa999062fd40ea5a1995abe9b7a71b801e6ea8967123d047ae802d9d8bd4b07fa38617018f4eac154031f8720fbd2fec323e2339dafd6dec3eb21ac71a4a75228206f083b20194decd2d93f7cf5f464c64fba86add2b851294a9003b2f63a5e37aaaa78df4d4243697dcb3d7a73a083a8e019b4c928a803a5c6991d1c94d0f05a712fb87405050e944ab39b5401d36982d70a775ec985109612d2d921768a8c4806866bf9113ad7db1695e33053d54dede6345c3d2d04958704f34e19a8a08c8bd1a6dc9deeaef2c9dfb14a7c14d4df630c600d4549f0dabfd09d6583096403f012d6fcede022308b3d6cf9526a6d338370b4be9b8e18890a92ffa536e1d96e7cdd8443c57f24f9340285ab7b49f724f07b0d70d613cef28f67171fc5303d3fa728d9d59902ea4381e792f17dd0a50c956c019e75146ec636a97e8541300a4c930d638a6d72332265708c05f438d499f561ed61beef184b4d67a25091363413c090c220e592a6291cc984d4dadc6e738eeb09422a87f6abaf7a1055f801b20b54ad3e3f7244a8c30a152999df021f58f4599294b9a482e42dfd52d21045425791782b0c4ae45fffdd7feef1638dbcedd112759029afc55d2ae23d0fe3f1dacf931bbaecd73528a2bf82f19cab3249f43b3a03bd328cb6ddfef22f8fd79ebb4da634b38ff292225ab71b5d051401e2871db653b3033095bf61542a63a9e936f4f8f993158a84a809fb56468bf0deeebf8997e13382294535d4bbf8ef7a3bec8cbecdcaa8ea2b729b33b9979f1ddc9b5e7f90a9c8207a5cddbfbe9d2b523eb29b22b05d485e0d6f1ab212b3efdfe07e5fb389bb7ad7b6de5c8824b88b3f51cac680c0f263070abaf75dac05711d2e5aef7ed7501c528dd57a5017ee1fa1af9c3811e665014074295700aa8f81d58525182eb1bda1540d3f28e13c03e58de4797374988c72c936a5efbb1e1e353019d14c949b6a984aab0d066e5fe75e7011272f9e0b014b602fc91a6d8fd6a68cd314050a6673d0226a0f156767d469fe2f5eda1156bdd07ac7f82966bd310d14e2f6dadaf9e69b447a66b45f37d8802997adb6857bc3fb1b6598fc93dcc77ca7111cfae7fde7ab55e350651cd33f6e9ba7f4ed164667761da182b0fa8f9669f6d4191c4dbf3c244570a44b20af71f09cf849012dd525cc808f9e649065f4a0885657f7ddeaa882dbf80d78357318b23eaba4aa6bd842766b59f87a5e4ad8ff050a9cc7012dc51d03d765b753917456635a99fd56cef2bcb4b50db0ebbefa4d828b51f49db1bf70698d1e74026ea74d04f26ec09176dadd09149fa0a5cc223e266a3ec0bbf885bd48273870c27c98316824af5a23d0b1a35fde3cfd914039d272d05b15f6aa3924c4772b8c87029628e20c39db94471830b178e9ffa6672ba71c2187e72789b6f32920cf7aa695cfefee1464b44d58485f7245c0b0ecb11b189fd8e36458536629f047d6a360c9ae89fb7bdee6f4617412fbf170b4fb7fb8af01d8c5e8f4a37373ce31de33122e0e65fd039d5a526efa8b506f0c7e4e2cc263ae1c551fdfdbfd028a7ad0ba61f320c43dd4d1fe6e4c7ee168af7365dfbd612ced085785eceaf40701e6ae5f82d629af52d29bf7e7bcb3fcde9b831615adf74e65fb376d8eb4231192b4cca176b75d833e1126e867e6bb32f1d528f22f9388509ffca6de4c4fc1e63ab2d53e162c4f449bbc55a0f5c458d7a2462900269d55ca1fd902d9486fe5b00991f1b3e08d1e1d6f77e982e0e5984a4f2baa9f244fe3fd14129236831bd252b4477b85b64f3212f097e6dff6f7c01510d69aaa8451d6fa23d9d3c3bfc6665110c314919030ee68a9d3779c5b34463d336def29b438f58dc5b7baadecba6f6423ac2f2ea4fb72aff254602d3d8ec1a645149e92f4119220b1f254844259bffda7b3304ba4d5bdb607e4e05e73d7dd4b40835e140552d8844fbac80233254258360a30579a84f441046d3a12b27f087069ca6aea2b2fc871c25903eb79e884eed7def65f62b497a93cd9e974a59341dccb615d0c581dd6893efcc6b17fbe0a805dbc0a487c7e2f9ae307b6e6591557eba542276bb10922a4f272dc2a44e71143bc3bab94aed843db830a6dace7207f2ccba8ad272ca3e3e9f69f454fc8d0d2d0420f9ea7b99b0125829418a208108b8e03ea88555e24c6d35b2a60f6e6c5be57918a885c7e231cc8719f7d83438c85dfa864f782a8cacd205f61259232870a8341989693d70e0bfdfe79e06b726c03b0b225daf2d1361666a4236cf8912cfc145d1252214f94ba0624416de6f5e910b3b0632dbb6fca990ba473a5da5bbf7d239cc0656a01ca18eb0ceacc2a76ace0dadc25e8514d02fdd06283f934b95bb3096476f7516dad12b60d8fd1697b0a01b99f6d7da05c6214a0125c2265cd81e3c8763627c01fc77ba5907765748534249ab4bb84433c7b495c5a84327e5adb09a453fd63eb0bfefe519825d61024ea0d04baf6270fbff4730d57e83a7eac556ad384220a9f7e8584bf17ac2a8509155b283bae1e8b384843015e66cb80f2bdc9be5e873cded908bbab9c8e30ed7f48da351b7dd7b77a3a70d50bd842c3e2ae20cd23c472714de8de052a11cbe942967c2ab74f726a7380eb2f54b17192649bcbc370879c17b16dba4ef6baa0b166c5494f845679147f9ead583e1de6e109e215b193217ed1a61f0ff61556baff310fdf5df226d088acf08855e3e4860dcc4ccae06f9b392dc2a25a63f0517b063149b0b3cc4b44dc67193ed261b139f280445b1db8560cd57af77509e818a26bbf3c6ca465ca661aad7a38a9d0827faa3cf734371262b562fa8b114fe5466e644e76302d212c1b75082088fd1a5e2415827aa7183c18bc4955c9e6426d2f48c954840740170315708a388277f92c665f32d75a3b94efdbff2f282870405e4e0a58e2745c5d81694ab8d3a6b7f4d2e13f3b9f9f37f1b06511f8362d5bcb3dfbb2ebb374d10c8a6998574a188cb19f55c8317d8f2eeae06c56f008cf102b75c1c1a5638f23f27acdbcd9c5cacef39d5a8f9ab546c5261483f9cde17337536e65eace96a90833a42c62aeafc4564e29c5463b7bbc1acbb1c9d0415aa451fe1192a0346e8b753f91673ab8a9dd91aeaac38185bc3d77c9fee7b9783e13a8cc4168fdeb7f8479332181a7aa6bcf86c588d85ce98946b991024406a9755f882de1efb3c2dbd9a2b6176ba259f97817b298bd9ba712d1512205792dd4f9e68a2032695d209f5934378da587784afe65533632be14d6942ab9d6b074c6ff39ed51033eac85ed1eafa508bd72fe017031e1b84312f2d81055c16e5b829bed5d09a3cc9be7243adf3ac52ee16d1d03e270f025de2ebdb6eec7257be6ebfa7e0a8178d81135f69b3420196980cae196aae0377246faed6643c314676591cd31e6868edbd02f633f8972be53ab08d9c71eafb86d925eb7a5f3e4d9dc130d0b86274c9a4059fda482e85d62e2cd5f864b45a10bc7ab064f050696acf54eb1c6e89a17ec72787bba92de49a8049467c0524a78e99f335cc15343de9c4e58fb5c14d8ae306b33723d53fb0f1b73c03d733fd50c4296b7f588434ebceb6d27e222da14b51ff870ad6c70db941504079ca47b7f2a78f9e0f54cab28f9d6e98f1e1607fc3cd3acb618b9e69330e15cbf44f4604a547f25e2f861728e3edb51731e76ee3e1f335b5eb23b4723d53b5f7d9172e06cc1684d02bcc72ecc58a753d14def07209db7f039f8e8caf796627f546e878ee1fc5a7a6ae29d349a9f36be2242e465952da99b66663f0117e003a54f0227791526054070d7a2250b8594f34af887aad1dab72b310ef2880548c952d993eef763802829e206606c3bffffb173ff4006f1a98aa635373247ddd03175a34ca53768ae057f05a4318bb6fec73772b6320a383adae1de93673ebc1b58637d116807f1f523874f1bae35b4ee01d01dce62c3cf7fe01a7fcb532b0791ab6b6dac542578742c59de7ac62a7da2bfd9eb5616f5936dc5f62a572a7bc78247fa8c96fc0b9f83943ecd46cd11a1664260d6d9c5f1d20fe2c7c91d6ec1e2c9b8ad4ac9e632c760904b6d17e7fb7b12eae244909f2d99596f72c6e737e9636d894f5df9e6a08efde9075471ad480c573de138c79f679e47874162bc22545cc2edd07b732e2b7f66d486820b1d18a1138bfdb27450e932924b47bc83f70733f12441cd76eab03d15d21a219f637ef3a515cbd0d87302318e4cebab5a038cd4c01e0e57d2ae5d368b22bc2848ab5fabe02fe376dda3234756ba39106cb90203d6db9dc68e89f537efa75ddf54a01123bfd5c720c1f603287c42f0f840a68df06dd94c7bfc9d0c1797449a9e3ed2ac1c09225631b48d300cdb310ae4064947ed8168c7abfc8b5bbcfe8530170265087892854a26be36696fe285f7d5f684ad446ce6d8257588cf9ab2f20e2f50d4cb61310239dbebae71ebff61fa049f68270f484d9ab082a14cdab47d5c3e6897ded4897de4ff856e7694cafe7c34610e85a8cfb112e64b80144b5fd5dcc6a7a0aa8e63eb0e46dbcf52f6933fecf54ffe56e4d026daa6998e870008f0d105d12f58148c4a6df16dfd429bfd908b045e3d31db0fb86b90ecb9e1d1cc856a369d0c39b6b5dd7f98b2041bc59bc24aa476a36265c398ee5179b8a26d7ac057672f93ca27c36453889300e5a5097a0d976bd5f4f44b5cb65c4b53f0619f2a7ed7919d36ac4f7e07499c7514d342347c8f4c2cb6b24777e03296673cf92293e1540ea7f6258df75e49c126fc423a0983e02b176b5c0c2bdef53a5e9db8b8608efa042438c349705317319ee90e7820059c4c1c405294d7932fb6f6783ed6ad1e3bebad823691425378f91fd8eee9a9b7ffb23a9892750b9cf2279038eea79c2cce2f24f23a1275fe92dbafad2c21bf77e8f34f082be44355ea50f55adf46730ddbf084ccc7e32b1ae0d0a4e2ede88f6a66b31cf5ba8aad08f23219954418c38b9749d66cb54d0ae708d116e1ac9dfe14f6c47632e79b84cc3f9ac26267c2803446632af3131515ea510dceb5185215c7fbb70b51a033015a6cdc52db254df00648825153d6b92e15a6ac0d829348f3ac1cafeab421dd05bb02b6d897ee4b76f3f7169804b048a709e8f3f0473eb850d8c1b001f8968c6f26786de27a318350fda616016cad1fa93a0d20a1757584b5463d4750a9b46ccfcb95b16c759815ac9c0a400f813f4169f73728264480f5db1da7d833ca0176253677dc3c44d5fc3d106a8d26eb1cb1d2d932276b0d1c040ee4b2cc6029a264428d989d8a39cb2487e49707b380ad8d54fa5733618914b792b265a864a6d9c2784981017801ae9869a94ae852a0bf80dceac717cf7e9fdea2caeabba4eba6196c1a621210b53a90d657c82c681ca9376301d699902cb4350a3997e92ee1c6b50a278e1c0dc7a426d321d13c6c63195afa7b31182aebc5e7c973a4f5d727a384a3ed9082cbc2aac9ce465fa6005b45a00c2023ddad86044a9b6ea4385f41aada36b39633374f07f572ee89ac3d44ec21c6242e0a9853cdec2bdf7aa52002b88e9052782191fe3320aa0c9d3a086d3f3f3b3c96506acddd631575e80eaa11af5447ed54d2efcd4664c155570fea93dc89a5365755a9eb8d1c6e2a4f8a50a518af38db2dd53f267ce88297ca7505758f57b862ccf6aa4a448e0b608269bab83ded6d44436c1ea05e3bdf3704cf3fc68b502adea7d71ed671ab370fbd242abae87f336c95d8cf35c1f17bb7177c62462c3d64f5005f9d19b40d10e4d3a239d0eea8b1e5ea557ae9d00fffffa104680c682ae4d3a107c0a3a971c1f8c5b84e3db6f8537345a136f3e4e3c63341ffe44fc2f4a63015b524b970ef7370f16697c9c34cc206ee0de7c3d35fc7bbedbcee0e4ef2d3583c825df4e7848730cb276e337efb0fdc7455fdabdb967c26e63c6600367925bf9afbc9405f62c9b73ddbd15d2147d72b0814402035f9c0fc811f80b6bca5976c442cda0bf4687db89c583643d7792d0acced3f2325191dd1af54c8c416b2dcc8103470f0e0e26cc247850add87228a04a7b82e52eed92925568cb61f0c3854b5c194de27c96f3762562158bf0567594623b6528f6e5be03d525b33964b1bb509d32d28abd9640a49c5ea97369f21c16aa3fe572903fadb29ea3496cf70dc9d001aa0d951d35f9e253d6c35eabe3d13eef45902b317768676f9888add48af1836eea0a1d9e3d1824cf311faa80b8e5307d1f4559a5df1e994398ddcb92f772ce5fea188db7554b9dc8fb2cf96da606426585dc9faf0b3102b418b722efb349582208c61aabc6f748708dc0ea03c1b63203af64c52ff60fa7d03e5d108e69807dbdacf15fd4417ad41e9bf1cb4f9a846ef766483429853f029f6dc5e6e2b120812516db69170e09994bedfe98bcad5399aa866491efab399c832ac457138450942e8616465f31e6d84a3bd07c4e04cc93c25c4426bea3cdf4cb1c100e423f22bd6c24bbbb7bf86d4bc1c41b5d07c73688f99d12401fe3853ae85994c7f8444411aea794f1a78604b160ffe7a950ac7b7db4c9310b6efa6ee07bf6874b01cedfc3af2165fca552048186c7218b07f14ae94481dc5a534aed77c98f1f1a02f7e88584f8ef9c84dd2cfe26cb77a629bc197695b64b68b12d5b2bc9d8521f28e202b763488cedfb0f12631875cb2585a9b8ef4a866f12d8a4b1b21af0d21548ed2acceb587d70de29dc06098460c61631bb347f063e1150a31fbd5ca40b65dfc8eebd24f86eec62ae4dd8053ddeb82b225ac54a5ff06540f75bc37746b40e701be24d078c201a2b4a1ffa99694b8487117c752e81cf7db9693bd7047b32ad6f1ca7e1a05dcf5a2281a817f2c590b7740f4d5083f07ab9fcab8bba26c7766194f0d3202f472a426ec1f48298a85a86bf68885a3941ee2b26088752e3ab59eb97606af3ea164642f5052066d1d71c548be450fe4011f6a0c318b97232648ea07e9e93bf4d487b85d08b3df4d850b95d6c03cafe0d23205a4a0ea781720b3c3716b56598ffbb1efc4d4a083b8930642cf446e5765b0f259916fed79503e87a558a36edac7b8ca018f405cb6e8317beeedf35e8c7f033596063310f063bd20e797341841591e7c853120e09351478ffc6c298a6821ee36aaa0a29f70167358c32b52658e6942aee3dbeae2699c40fd6524ac6679b0e78c3aacdc7b0aadb2973dae5e7a652e1b1050249d77ab37707c2aef0ee9b33529e6acb54ac1d99aed0e276a53f0857e6b7a3dfd7d38d9270b83542612716919a54053fddf8e9e4b0b86cd9f8d90828e74423bf6b3e02f05359be9b8c0d89f9008ae1b41fc10b2444a6e6a4647050638c4525a4fb1489128519bba6bc2c34a7b295d29c924a7398dd5fbb8804b18305b9c8fef2906db991576e40a770ce87e50c3ab0169314dacb7652b50d46f7b82ef185fe1ba9c13b1ea8b591b8352bbaafbe7811c69bb733d3953a9dd66513eed036f650330225e7e44894fa3e3a16e4c40786c559215d3e042b9564125712c57f7d437a0394b30efecf4970e3af1a07bd7ae4fcc0f6bc1b86506dd6adb98f8b361c2e0f2c1d4757ebaa9676160159e5c639058b9deb6a787fbd4c4dece2d92a603db231f22256f34a6823203ad4bb8587c3fd5f134f427e1c7baea306493b507471f38ae35df5ee2d68a8ddbe9711b76be5e9b9f79ae9fad4e4fd18bc71cca2ea72d370980296e73db36286331b49e01929550a53c723eac7b81b96235d2abc484ceff95ec89defb78fff0347d4476cfd7bad5809a06dd297e07cc7695b1176718af06e4de1c5a9c6f31fa4f812d9aadc2e5cf479dd506739911694032358085192c20d579ca9e7321d8d182eb5f876663e2bd9c33d1b6bba9abae67282ea39f8826e653eeb357818d6ed0e3e387800fd2cc60ae29e41e2578b9136fb2dab2a32c59b9f7399d08f2726f52f5e0fb2e7be4098838459d3e51ac8bae8f7e713d77fdbd8edf5442878ee2298c648e123169cffd3668d65d6cf16e74d115f369baa683c9ae4ffc50986a71428ceb080ab101d922f18ce322fc5872cbc5f81fe419d9ad4bfd735d8e1bc5b51ae5ba6056addd3f5217c0342e17615de6c23775028e303ef8ca31ceb0c91357093b846e238113e6f090a376835caa9aa26b127de4a3cbac40e3d40df628b3f59ed76eadf55c257975dbcef4267b3ff405a67631a47ba6dde65ecf2fb4a234b8dcbd62cb9aa90ebd6ac8107254e87f7c07812f599910a0cc6b6aeef269878c0ec7be5c75bfc6bf49ed127f86c1b1cabd8a82bf73dea0fb29c475c41c1ddda96a6a616ceae6c3e2f4e2a2f5ceb021379778a5504af669116bba5594ee77f7c7ffa9b2f6983ce1b55ffffbe54fb63aba1ebc927c9cb49f0a8addf383b53111f9727e76ed7dfd11d15dc7fd592b8414ba65754da399562976ed02ddae371436cf0c5f3a47469878df7272feb733e589bb0f6b817757c18bb89336c3a380f836a74766c192306f755676272eb5ca54fdd06271856e368c70eab29742348502b89b92785d799b3da2adc57142488dd95b819257bb5dbf369c7731f1d4813d9aedeb7213e77bc33f3d399960dfa9ff4a2aecf1f016fd04afeb79edb9d5c31fc519fa4b47c7b65bc00eca7653307127a4c0ab5120e8274719cd015d7628a914c01cf9b144bdc254e358340ed3f33a702fe28c97304dff3d08f22dd21f525e4749a64fd4049021c9e4c36ca8fe256153c6f0f006d168c326b005a42f46e08b703908b05d0ec479c6f29adb17f2760d355ee2120a72843adc3339a4585bc154c0e0e24ac5001f9f3e45975a2fc2da794c4012940e5d5eab3c7bfa6b3d7a6cd4bb1aff1b932e9b6c4a2b3b441d27f3d5a3cb79a3cb2761714dcfc837613eb58a76491ed67e1167d7c7b3acb13a3ab80bda1be6bd0fcd062b91b3fefdc5ae20cb7b5c87eb079557c4e6529c1bcefb78320b23a2c11de228cca4ec148efc8b9856d9abb211eadf16b20a89700bf28ea7ef94593a5a666d54a27ab2376718664d245b02bea78c7bbaa7c0df903af5cf5e4b0fff9b0e428896aa45b8b5275f403e4a23508575b784927f83ce3746f29491207421649a777a95c8f2bd408f4507aa841e48a9aca0bc267f01541d0936c81f6380d4556f0be6a3c03c71577b789daae8aee64be3488aa12a76fd576e7f9d3696af969cccd2a0dddaa125d89a43bec2eeadbf27075ca0616bb78b3e61161cbfe6011b4c8170b2d4ff58c06caa21601a0d016e36a85e3be4d848a21c6f690793018872631c1314fa8a0ce8565444bb2aec4b8c893a9158776860bc6efc54c10bda33213193805a943e75644d8a91ed45aa487412e55496447cf62ccafdfa016cc08a9749a3cb7a06bcf5bc19a86006920987bf01fc51bf25691ba96139e946f9998e5cd8bcd3e69a3bc6c3aed5b885060b8f5e4ef4605d7eebf27e5bd1e04ea2f95996647edb3b0fde53b8b79e2cc4a70cfb6db9c4de269aad21b835c509d3b1787aecada0c733f08d7ab937f1bad84a39c7c6820d95b17d17491dd86912d4e9611e1a447e0c2d38642f6cc33aeb4ccf777a2f06912e256e18d59068f5e08a5e1c144b470135540312037095ad06aea4e502a4bc5c6b0539149ede8c143e26a81ba9e55b399a9369cbd9d813ee302f3e74a93239c728f7bbb4a58f06a5e8b4245fb76f6f6f427d400eff11d7e7eb204df42536355b10f9bd57d9013e080d856cd2dcb07a3a8dd06d7c74c3c8d5bed3093c0ef40c2d047da881ecb649a8784050e86d046cdba225c2350c7228cd6c895fe1038cebcfbb0e1645980e4c0bdb299fd40524416d46a6a95c5aacd523252a0b5ea60397c1a753cebc8f19deaf8939a7346f4111ef340e5f5694de6937c0c3f91e9e65563f8af238718fcfe8695de16d97e7245654d140b28335330a06106b2e6df88ae3218fc28183bf22d44ae7b001c17d29a58302c23cedb2b86ad379fd878b309849069b5b4f0d82a4f6bf0bd1d4c8c97fc129589c64ae9a9131ae695ecccd90f3fe067c0e83696c95c9a3eece769a1999ebc237270f32b3194d6887d93da3bc682a388b23447fda33bb3ef3b150752009819304c9bacbea113a6abe92d46312ca737db8f0fe69bb57dadfae638af9f78f7da8da606709a18b57bc85080e4500db280df3a963b60755bc32d1dab3c78c94f270b4b69344b67a8daf6f7c5b37bde8ef17c1f85d49156a06ec01369ca176b7707a20f75140f64bba847ae9ed38358090c66689d6a11b62a2c748e66110ce6782438cc79772c4bda1ddff320a11ddb3d2884a9a9d79f93d1b81126275f5eecf8e75d62f92bd9a60a260e3bd628ff3fc5ea4d04014c6a382083adb26f5fbf24fabc843be6f8ce497e13e787c2e0d3d0aa53ca25b8ec9fc443849dc6d220b52a4cc7a5bad6de172c75e2676fa14a8c7ef5db8288419603b7dba0d1c2e48a719571538ad2ea7f18228195e88db951230a0ecc36b75abc996035c0daf3f1d6d04f0d997a8d7176a019ecbaede52e90902773485783ddfa0f85bd2a74f2ace004acb4e1a94ec8e84dcc763bac969b4d319ef4df235a78e870ecac406a35b23375ad9259181e52e94fa674411fe662b5a701054b5894749a796b113a12f811ad398677ed0fbbacbd453034449b5b14e2eca27cc24d25d26f1fb1646735044584dca9cd6ca68ed2c6101ef5216fd0148a2acc071f7e3f81038c0a20827848f201fe3a078557fa749ba4fb3e732d52f9602dd088a2934221446448cb805a3120f53ba69983043f9c7a6eeba68a4103dad7db6cdd8b5c2eaebf44a0958764af32626bec2df34b9674eea8da6a8e18675a977ccea514bf7e66c21c5dfbc7a7f5c9db098a72726a1e3d2912ab78e59686f1d1bac7d179060750f66b727a121790ebe2ed11d286fab047efbbe8d963eb62f0a57a15ee8a455b5cace7b6e6551c2c356d4d1de01b41f04cdb5398ca49e53eb1c8cf136102198a1874de84efdd25fe7c9598ce74aa975b5b83414ea2364e8b5bf6e77d5e06b03fe5ef452b635cbab5b65027c7470ead9e5f77d725fced27f1b0a1aece70a47fc9fb6684aba707f58a5c85d43ab376bc5ba2bbda21d1b6ab4d03a09c973adff57daf2189ed71b98f013c3fb72a517649e1bef902494e35931c4b26a018550337a2e0e4cc6b026e83e20b9e3be4d0bc25ed01448910900af0c1dad37bc9cbfe20969cc9aa7770d2bb38e96f15c422509ce39d7ce7011b2f5ff69e660ef56228e9dba4f5b2ab28e797daf9827b8d1569c6b592d5aef63f0df06d1541c1c3111e8a2c4f396899ba7033de337a15fb82aea560b70575238f970c20c6c9565d5612f45687bb57c4155346989cde80b24de09bbf1beb384de926ed8e2c501d437d054c59842142d31b1980166a44140dc6ba76947230d06b86520c56634563d216e6491ac11dbcb997360bb9d3fbde256bedc035c60cc69c822a73906205f8e77a48b87d0ec846c8e5e11fa7177f07d101d0f79715801887bf265c4bae8f1bb611963136cf57a562d442bb45a55b934a0e84449a8e0f0097d2b69983d08f066ba1dd6d575844971f4a4b92a4bdfc712c09a20280ccf5295588b50c9c998d5a77fdf0d0c5ddcfd2d32c1e4540d7434d4a7f66da4ab37b96918ee2ac31477dd3332b8015c9c4c8c29cd602b1f6a8fa4ef616c90a40aeb4c300a5aa1844e9fa0f23a20427969c834b86868e0b7e38007273f880daa7f3bfc7bd2154052cddf92ca5e9dfef083870c6c37be91b5e8b0215c3eecd4116a328fed88b13488cff24f7d76c7473960fe200a88063a47b2284fbd9c1c5e4a4ccaca7b43390c11f81d5cf4135364474c35ea2a9ae2cd38501145978f892310e33e3d3633098b89557e683137f3c242609b2416ad38aeb1cf1b8116cc5a3d2a654cc7c9379008234ecf4cd4c3ea044538c9e3c088eaa8c38320cf32821cac9c374263f0e54366a5952a2eb0df708876de057a744ee744485a918c6773220f6763b8ff88f39ef2a0c08affe3d035abe54bf2eed6e64755690ce9ca00d7638a9fb6e0c9116b7b38c0543bb101d45bc1e6fde2abb631523380c14dc8d7e68aab5ecf681b953480753c610efb291fc7dc9b8071a4422e0c3671f8a6ea678a3b1481ee40e5ef0769b7fbacfbf95061367e775b944842c07d00e905581dfe3b8e1bad9788757e080a14feb0658c7fffed64ca808c830bb70215b29fe4215e6438dc8e1fc559f5282dd74099e698aad68ed58b546bb7beda13b8addad38c3c3f49a96ce15d1b80345f4c8fb65ccc2d450f40d7d5a297a75814fcc0f8d5b03f69e983f79ceba02add610ec8985cc9225a29ee3a7eba1e08dcf2743a15f1a1d4b5168467fecd5b3c6da59eb6bb678dd37933361300d8229ac2ed6bcd91d680f98a62f5a5ec32b1dd55d35b62990df12da152024c059053ec53540d60cb2051927cc9cb9d4f20d4e9f249f17c7e3d884241670647232412c91e1b1d823b44f77d6415afc77cf81fc1968d5f0c4281d39ac86a15f30d7f50ea2464029afa91bd1e3556a0f9a4b34d7065ca0f03b55bc0e3d99ad3856ac8105da04f07e7051d82c1d46918cabbc168c9a485b2e3b18999833b2c89c894f985543de7c3d892d0201c3f10eaec1a3167fbb445330252f4ca864df4ee421123fa6fac24dc3e397afba58c001c521ff17351e06cecc3f966f3e5783e48ec2daa08ecace5290b5b1fc49de64361a22ed8c9e2074d9e3fd3b602ba4b3db0d0054f5b9909f44182178500795375706388ec57d6bf34a3918e920b1371011dda95248a7e6e374366fcd92d320ecdfc7bf1abf175e91251f142379b3b1d8a8f3c698771a1687ec37279ae43ffed1cd9c70211c077e4c2573afd3f1f1be789bd33443d4a91129bf26caa607e9f543b7f6b2713710a3f654da8a4d8d88606e83ce597a8ea2a43041aa0c9d9d3b8def79b3849c78c0d86e434c9c2b98f6930a872939658ce4892d70d83fbc415bc4f1701c71e1b195eecc142bb140b08fb23fb378532ca4d4675b06d6a0033704c7b6524fd61408bf7f982a5de7629815b02f2165bcb9c7940e845ececf15563c63826587bd9a1dea7fb922222ab4cd0b458b93ae90e45d6a79803bac9a574d36eed6d7e46bfa37f1f7c2dea8facd3df612b5d94010cf419a718f9fb8686157cb945c3a27a3e77b8568ecdef2d328d6e50c2779f711c5a57f315a9afded267cddfda5e8bf77f5ced11f752c39eb2069c7a6607fccd3bee4bdaa25bec6174363f4fbcf2ec579a6d1bf91b8d665ccff9e4e9b13cc389fa729d78b6b2ecf7fc9e28c7d43c17cd88a03456938e752ca7e3552733c1bafd36091a6ed4445d68b0f9ba4edb741da3892e3e1cb5a2c4342a57b0c8ff39d1a6c912ccb3f55be20760d84172ef2247539801606798ce502eaf5d1a627967e086b799b2c9ca43038876993012b72923a5e218233caaaa37780310bff11168c564b6b3711f55ef62b8b2ab2ed0c954c30464a55ae23821f2a988d0cd47f4e5ad48b6ef8cc3bf9ed3e3908ad5aecf30dbbc9a85d978d4b13d76f56c2b435d2b545f1cc117ad561710ece1d44aabc88870aef60f6809ea9d2d415ad2c32989e7854e96d8fcb1cf7f5782a0e4978e009424b77e80bd91ed80c569feac293fecb7e0397ee3ab060deeaeff991d770331ec374b68a74bbfce847520decf6d7d605ff63478a2744fb63670e490b1dcfe2bf852dc0e5a673263d0d1afbef02977344b806768c8edfc6b08f54eef969b448bbdb2537fcab2a4873ccc9b2f43af81013a110c22682070e104e0e07f277c735b75ceada375fcd8db4e62f6c6d134cce51cb327ac0e5b8c7aab982657b3c17627ee741b8fc51486b36ded86f2499ce384563944235e4ef3fb8a33b3ed657352011e82bcdf04fffd132e1a058f63416f2e8afbbd1c290c1e85dfa0c50cd0c34d7f365d561b65701464a0477fd189a417524e9204935ec95ffe7761cf7e1751f4b842adc15d2d85b21d7cd86bf8b290c3339fc19242a34205e34c928f2d43d35e89b50ad8a5233725f77855ed263d5027e04ef51a95fd46f461bd0eaa57083f935170dfd0a3c13047cdd43966c9154ef3ddcfd08a29d7a8049e7eb58dcb656d9f5bcb60e264b8d5f7e166e7449f88b4f410bd9fc030d26c8755a8d73ff1711533e52f13df9255457421ba46fbde4f528c71b73a2e546b311504a0e4d740fd901705b8e380ddc20fa68913bda59dbcf527b6d38273356b0d714b7c1c0d4f88901634c0fc2e480cb26500dc2cdb0a65ba9e3365b9bb18fad3bbbf9b6a93b2d9ff71fac31f8c18c4d421512029da1934dec9a5082ea6080c05630f99f95b7565037818ebe5fe59c204ba4d5eba96faf3eeec43a0760c6e3d798c68439288ef3b9474ee3531b7c05c2d2f72e1bee0e05984116274131f6fd50b521250cc511587a340460abf82a1515a705eba316c07f084e0968b47fb78caa056c4ac4ec90701b93ef3b4e3755cafc589232e96ad790079ac766bfbe35640bad55753ead5075c7a4ae93813317fe3bd4c332c4e27f835e57750a39ec2420586d39e5f53b2052484a4d69f98f952644c637c02c1292550c066c8bc52c7ad3e583ad0c22623817b493654fbc08dbee90ffdb9c06cc90c77eb04776fc02cb6f68e1190e0cf39eb49530df80b3300199e1ea2161a05d69c9cec75b64978e0089782b40aebeb4eb2adea0edd991e46319930ba74e11a0f51ff546b76d16c4b24efdaef1e56b1b0245a34a8c025521df797e9918d4a101dc1f124d266beeee680f12f1266972ca1797af8ffc6adabb462d5f8779e4131f8155a02ebe5d615294a00f1b715b24706e6395bc2c11dfb9ffd46fd61915b3249834eac3cff9a804f67dff3dbc78d9ef25871e0e238117d41c2779791a9fdf9b6d209ae36ce993c4bc47d8475d675a5fc398f5eb20065c7515d4a86c3230f2fdc6c42ad54859773ae134ecb28578cad520863d8510d93892a81cda8451c9f5df8bdd06bc2d0ecfb8827d61634ddd71b0586a640d58fed74c1fa0e6469de0097be82b450e77cf3a23cd42246921a263e03875c20ae2c1291b35b31cb965b6b7a5b465dc03f08666cffe7ba5886f85809ba5a7a81d7ecd71cf8081f49364b89acad4b89f9766cb3a75ab6363b5ddccafc804c04c676df51c574a72404cc5c9109e6a4b2089f5a1a988646c424aada43628ee28c5fc52c8585c94c39d8bca08ae0433c8e57cfd85efe91fe92bd7601f33d1b030c285786faae64116df46a0eefb92bff89bb2ce2350a22e84618512fdda1ebf6dc915f683cd2349d855eca91ba6f45f6f21f7f23b00119209b43dc12e9f9f506d504c30539234d1edb785c63020c7198bb08657bab826b29598fbdd8995ec2af0967ca731af902ccc80228ae9c28427b42aaef8f884a8a1325cf25c3f87c5acab0a6801efa97dfde8888873e7f8916496e730f203f682bac4d1c2bc248089be461e033b1492eb15f3e6baf8898871558add66a8fac93684e14d6b510c96b6e70fc3a55b6fa3e668982bf583d8b0bae5ffcb2f3fcaf153167d20e10cae976ec7bb879493e8730b13ea6fe18ee0d112578eb3381335ed091b215fb05e43f463f5f6b1bb357cb8b79fe8354f14147bb57924700c02f364fb1284d92492e44a5ef8049343e00777f578323a962f26b48ed3d82e8e1aea974986544499a80082f010300b47426ff3b20baa0af437b7082646438bbea56e8ff2180979f1abb2e238f24eb3eeab9628ba2c3a76e83e07d996195d604df51fb9efb96a1c8c25936bc59dfe61f70a80c7f2e6a36bca871fa38af7a0adf62b66ecd62180355cd7f3070a9ef2042f583f07eeb926c381726a52ac8a2d906c27ce9bfda1c619989db9280da25fdfa2e5379b4d73195d657229173059c812f209a30edbccb8c0d59acf6bee8a0f700f5b3879dcf3d07295da092f8e9687c4d89ad758e70599fe5c1a6869804ba9e2f07b3c3441ddb6df0a139debb91e3f8a792d9fbf9c5d425c6e3f8bb56c31feefed3d4b1d0436d5a2286be0332cae571949554df6f45161c2530b0b19bb32ebed723d41a6c42ceab793d56687044b60d667b9d805cfdecc373d99be559cd1a6c1662428a2bd03e8f98913f7cbd905164f0ba6e6e48560070cc90f4a4c434e2f6f1026316f7f0607467f0eab74ee89317b8be6781ce7539f671efd00c949ba09780fb2bccf3bf5ad391b81b8b79ac8a80b072d88240affe81e0e11b279156671d77403c62d77681fedc19d7ab3e81dc1a58ef6d6866a7f2d58676120c441566162457fce3134c78459c04f4ad79720ba48dc07b245377c86455638a8376c0fafde49c250e3b8c45f545cb0a6eb8b04d76dbb5ce145343186aa02860cdbd96d06d4a3347bcf40968d4431d1f9e9bf4d796bf3ac5ced5170a90dc3904c93514c8291e25121c6137346e90c492652e06fd7178f4af9c226cc6f7334fa33a4b121c333e7e1a0956845aa0c68d9cb1f6956ab39982b570593525655c1be1f1586d9909ec923b451f9925714131d7e5ebd44d2daac434ccbf0e3399e909def9199d98b708b1830b0d321182b1d761b227fcdeb751a42ace7c225895e37a59df87856ee9598eb11596151809b48eda87417c961283e2ca405cdcd5f9cdfaa870ee2fecb9c62166b97acc8feeb99db4f6cf25c21ab33095715a8766b06e354438e21c502fecf4c4f940eb93412292aab27abd73d81c33266ce9f1003345e939dcdf2d4f504342fcede4f9ad890a58da2766bb923461f1923ff9261f74bd240c7249c4e316ad2d41d76eb1da46ac55560650e704e78907d6d184d6e035d937ad8b041c7d2229d011a258e8f5a9bd2b035b1a9d5981ad9e71b6d4fcd864900f3b16f07a887b0cf57e6d0d989d6e31314c78e8f098b85fe4d17a975f043ee08d008c9bdbb85eb24c7a3c4435fd820834dca4ec002aa54ed72d8ba70b105878534b75196f5a7401a122734e4d91c55f2b21fcb2265e8e95d5e21207df81678fe31a1a66e7527900a610df981bc077f0a8ba51062785f6436e89cab9eb000d955b610775c4bb3f4e62f170bc715f426897b2a22134aa0035b6ccd60023613d6b89e7c8d4f6de2b5fb3468da87f7c6e3a57553f06741f85074206eeb0d3cb2b747dff43e7bbb855ed651b3b3c9244ca82a3ee9b933061bc8548da74dc80e9f503a26c22c58e34c15eb8e00aeb65340a412e1fb5f17d8f51048bbba5a9d8c35a03cbe3fabb50fe961853ec39f24ac5222e4f4bdfebe24c0bbbbd1f52d8f7aa7ddd128efcc8121175f9b22a94d32d01220fb6bcd39a23c4972ec2780d5dac31cfb7a12df9d866e256bee48308bf77e38dd0f6497314775d2d6da1b4eb23a99660e99fa6d99781e8d367f293ded9c7120f17329d765707fb0955c9eb8eed9550de32e3b688fe5594d99c4a372ac25e80edd4fd6b7f673c8a97ba9834fe2ad42caab2ff5ecbb5c56cb1d7796c38ddd5499db6bca0e59746891fb4570fd0672b99d11dc054592049fbd04357019d974bbf2891aa35c216441e64a99cdedcdd94e0fd3874f23b52c8353aec8c65649591b53e44408cabfa07ebfe5aaa112da57276702350a41fad115bfcea2aca542cc875dae0b82fff02b6c684bf1e1ff5ad25ac35f756eb2ebcbb4ba5bc4cec9a09bfd0717a34e3399c0db419988253f3faece544672dbae8b4281ad04fd2f1b72c3413c845153a8f5ea18ddd5965f391f7a98ce36f3b836afd8b880840aa49b6ce2850360bf74f4c0b8fbf3621e04be93f42324c4e2654ebc3af29b2b472f3732de2c3c32c63ce2becd91480104c10610cda8d30928b802618fb0096681c2557cb2de8c3d5e6c06bffa702c0fb228958f9504decbe59ec6e0d872775ade5f15f795149e5175a70c551012a6c58213c9cd18822357cbb58ca71f85c019a07a13234ab852be945dddbe53bc6eb86582465fcce90c85d249c974cd1381d75dbb99d9e8008f37954ab5de76b35ff1a5f37abfd7a1b77a5345ee8afa2a12d79d1d92628da22ad8cae3c15101f1c8f981b51d109cfb58263117b3beee62e68479cd1338ef5dba035b5dc4bb29c220240f2d5482aa844e64f0c9d6944314fc14e815f8ea0b88bca0c2d15809638f194dee8771bd962a710f3fdcb7530def126ff10b69c6058d8a34751018287de4531fa4ced6d517017a62edf9d0433c59df9b385befc4dbfd2b0659483e07329eb12c542e13bbd2853eb57b621bf7a077c644bcdc1a82d9d2398e20b3cc3e1f1de8a87396fddb4b39c1d6582c37ba404667bbc42f8192b171b8f6f178cb3c30d43fa1dde5050f4d44a45feb78a4d27b5d72826e42f1977f526bfe65fa97a4686efc81129e1a853e258787cf78cfd2b2f67e998e330c477de69c1a3908f93b2636c8939f7e95ca9600bb91b46ba0acd94c7d9eee197438ff52bff6723e62ebe6e824c0b91f6d82feaec44f903db5dfd8c08b353e382a300c2786e0b36360b28abaeb8d18acf42c98b8932eba6e6e6e5901ede64020d6b713288c61b03e361fe440ad452fefb122aff57886cc763e83770d62b75aabdd5f9e8accd402ac094ac191a1dacca6939b1d95acd0e1199775ff1082520dfb57a52f7e60039a635fe50edb4783c4673ca59816bcb96e497dedf0d74e9ef814f41cf1a465491f9ccc2fc685a409f1f7ea0c84afe0cc7a4af0b8c8d887d5720a4deb9f24ec28f13ea93061e785ea9c4903e973356f839fa8925747d92300f4113107575922c77fe55c592c7ab44cfc4ac00de0a31aa2429181bd5e00fb81b7b0dfa9b25e890bf54c35273ecddb57f98105f25e14a3334b77b4f1034ff73855817bd252feac06199939d4b79a7d80a53ae4bf121cf30ecf7e340f6218036cc6ad0080a5d15caa62a1a3faf7c73d4eb1145a143a2d267e912f0fae2cef33a453ab100798619f0d3562d3aadebbd5895bfcbd9fc7db5aed914b07106f9dcddc05b822bd8d53fa9a226fa414b24ab5296934fa6cc579e58a6cc820e831d5e7fe1a88384fedd5528f6a21bbbbb2662c7c4140b780ff194f2baa4d9b65d4f613e2b6d3abf107d54ec67ba3d8624f3ffc4f1bf4f623751fa9fc410d2a41e154f3e3ef5da0e05be700d9e062eee158f5ebc6a19eec8180a93933db080f2506b7923ab6d852c3a44bed186b26509123653a5fac9a6e68926415d4a8703563dcc9100324d061acc835a62bcc8a1aaae3fdf8a989d2b280a378e197dc9d7cab24dbf2581b56475102348bc6e491a2d9526b508e62b8dc2b0a0b0c9da6233de3f59b9edf5f84f9387a41b213c90adfd67d4aff156c56a3c0636c87d94bbe5b36017ab7da8dcb5b1e25213ae85612b15b0bf4b6ff57cf3908045a930a931d5b4ef434c5b05cd43b5252abe16bfada9c9467ff975ffd665eba81f6532b1e1b5ccb8bb87f4c14e59057ec9ed888356de6202ceb3d02e62ca10462b988eb1826b24a9fd5d0f09bab42befcdcd6be557366e29be960c84d0db3e95373d11e1f1d9e027e6085420296cacff610b1b30064a883f1fca545cdc64e9c7c29764a67ef79a5ddc5fbb4acd936ba223795756392bb6d3e2e213fb643a5048bb86342dceec8d1ca5d514888645447cdc70581204c4fa8c661a352a641659cc78551212c3cbac3177100acfc0d0d07ed4a34c023eb81e74b5ad8af2ccd4141fe58102ac8a6d373dd151beed45797272644fecd855da64eea62777f7e280237f3c0072ac745720d7ab5528b6e894100036823c1c1673c5d6ae57ccb79179359729e1e27b41db966cacf3ddd65053cb0f7bd0a8078b7894992baf5392c28be16e5d974a0029e3862ec8fe1766eea9242cdf0b8f8b4202a3bf1cd77efc6a2db48b0d7c7e9c9fec00cb64726373a0f55b1c2aeeb58398a7806fb50e27df58f6e078f97cacc35e531fea2909e7bc01199a3ad34eace6d515a28dcd6e5c2ab5d3c54e787452d2c696a5e21f8305d4209c852b1f4f138af1314377696a7f6a225ff54f1f4f3f231c2b91bc4f715c6c6a1c7e430a3edb6bd50d1aa413900828ccf05b034e5fc6c4c9ffb804c59c6dc8dec00db85ca6ec96d67a4755082fd4a40e680774a5bf55525758c3a84bd792f5e120f422ad8d4215ffe3587438c87e4200bdf50a863d6f8624ca9dd57640623af6173452b6f86b060f2c36f06f423860fb4cb6a6ebe6cc3a9f97bf7ba0265f8775ba5f1eda679b6d3fb7983d1fee7c972ce312cbdc19812e2418aff584c057b989ea7194d0e9db879098cf8f3eb18ddb4f322ccf61df24a974004cdeb21c7c04ae2d1f77eebde6d30645dd7e516ae4a973eb485426d4a50e5428a334f3a867efb0af059b66aec056296fa4d7f3ccc3e2fb834f1b4e430406d62714b2b27883b3369d9be9aa39aaf44b22976f86b6c30a2c39c0266775ee8f9cfad5c92ebf5cbc5aa3cbfc86435f124945be05073cfed3deb57e2efab9367e6ee1e56b788631d116f4defcbbfd28f593d2e5723325c25fcbfe97684c1c72e425021263d44554082e1898a76b20231493c7d388726b6c1b74ecdb012b9776c0a524733a16b10e0400c753cddbf1485a465e586f307e34194878ee985a2c4fe692f9b83612f6247c53a2a926977a9e2076411c9533fc78aed1659b95e7195abe106e47709d08d151b77c847a7f48b7e54bbbc10f8746cadcceae3b0d2384dd0b4f324c96690b73559979be23713e8d05d6f4a1d2204cb5545683427454379028fdfaa1762dc7518e5744157868fd8dd8d89df9f3995fc508db9e864d9dd280e4f8f16a37f075ab15cadf0e4785cf43bd0aa0d7946e62e126e6953d6679dfffe40575270d4cf3669014f190e95d24504dfdde41e0603900d2d8f2df74988e8e0e504fe993f0389b51d7a5c8223207c94dd1399aa8c188bae9fb00b22d93af1ce954b7b07a2b0de49da689a0392e58a6ae53e609263261d0f477c2ae1e67664696411f39ddaa24e5d8ee562e1990d3bb08c047fe750d91f1a4459321cc478af8242c9b31f460eb66852f37a6b34a9ffaa031b2e4a7c1e522e9f79983a9e24ee778fe5d0f0e4a025aa9cb8a288b711fe0502715663e31d3894129d88541d99c1abab9b8a2c5836c5982244dc13cc4fcee96578f13d31ed36bf96151898f95fc5b35aff27a4082ab199696d2f2feedf511c049349f959c7b1aa0f2c4e745ae1e190f8cdc3b8a33930f27621c3051e788a3be72ca80257ccca30de62a906691582d176ffa590220010a8dae36adb58ef05c46e55936086a4283063c6dfd3f7a3c76c79bf85c5ad87cce02b6ee7a8a4252eaa6acf5b499c97bb23d3870925ad7e91d0eaa2053a9e67f22cff2b79988234a32fdbc3cc9ad6880bea9e783a43a39736d8c2e291c0a3e34cc7ef54aa360f296e992643c93f1bcadd08c5c6e2208f626c0ab57538ab735fd721d34eb0c015a397722eba46d06d6269216fa9776f9cef560edc6493549057e14dc29feff892d19a1ecce7b733e0ea1e193d6ce6b9554cc0fd19bb27df7d00c5b1e1ce6183540b52e755baafb83eb1aefaa19ece55e14b7db2ff3fac129f3fd1f4d1b2bf287bfe84178c52f687f00642d4b117b31a68b17266863fb91f5414ede12ca43f242c61707b2ca261378b8a6d90e08f25e368749c59e8d4f4f9223363a5e000706d14506b7fcfc5ddac66a41acf4b3bafa28e151f8545740f8439a81a4b0b1ef2032761ee2c8f4409293406c1b5c1b18436ad45911ae85e44161fbfa26f48ef90ccd810d6ed8ae42c15af4b275cf9c8830fd06b556daeaaf86787c6f1408fa3b348d7966a881f35ffc1e540490f7e6e0a3477b6f2ee82e380734c9577a15663a9d01ef49515b6d2746ef29bdc0cf80bbab11b905ad840ade3462aec0cd50d19a262ba14a6f9210996c3b891cfb77ba65c2625dd02fa40a12f5e57a6e90a236b1d747b69d02990f9403ee0179f2dc41f6e8a221c2cef37e6e7580346fd083936cde01cbb624451dd9bd932542ae099b2d2c3822c05dcd3f36048cb2af704bfe0eefe9b94daa80d2ae36db785dd16d92c5c39ec52da0a8b4f41e71eaa0fd25ca64fa9bd8d8b4bde6f9b606682343c5834b672575582b771e48b0b5bf8652abf1306dc0b1c48610aaef104c1779d27105de5c9e55d2952bc0c4c3328c0a8b5223e97a02ab494ac25e17643f9c84e7b51bbadcb4c4768826b80d1676d3a8de6c4314152e410e9f3a56276ab850832bb316ed78c55234c6d1bfe7520ddefeaa0b1a4715ae59a49f20fb7876ff59e3b98b6f01d5fc9c1eaef6551db8b5fb65b5f52a2d8cca7da8b7c2e10dd1890c02aef2f72ed0be6b31189d451b4e8ce877776391aa21b0c2740857f35135a8fdaedb1bb59b8dc8229cd18b03c75946dfe9f5184e1a5ed6d2223ad6693caf9ca6a8c999de578419f85dbeb36251b5ccc30d93998ba993731220a2a296e991b9e6cc115825acf3443502c3739571cbf983af9026b63f33beebbdb6854b5415db6e2784e6ffd0880f7d269f79a4c39f448c96243fc1d46fd22be14af8be2d1b39bdeef7fd930b32dd2718368b95b9569705ac2ecbdba96cb30abaf54fb29b0b436e7888c45f8984e26b89943d54cf957543c82916242852e70ef64dc18e73c37579e74830ab31b6304024ef40c9d26e68afd2ba071bba15eb7d1ea3820251c45be207e4932977f2381f311053f36e3346c4680c7c0873936ec96fe037b35d0da182d28069e96066d1e189a20914d4ecb3c52080650af6f25e36e856a0adef8abbec9644972795e00654548d516a29e9bf0bb9d28cdff82a9d779ef2c0e7575c52f6644f8fdd0fa18a84d31c2cca9846384f9ba365f8583a6f688e715b9b65e8b296abf2eaa50c9e9bb3dabcfd64525ac5fb162899d3930aabe34ae23175db1e0fa9872ac6bb787d92ad60d9212c530d851ec1c082283487aea12294e3330a63530934b625fcfe7b01a647d77957fe14014a16fbc990d02505ee43f35587ade1813653ae074040c984a128092917b90fba5b1ebcbd832c6e118a240ca68d2754238b4ab977b94e5954bb303ccc77be739178fdc58771f98ad3d24bfd90f87c0c38f5c1809e990a922a81c444e1ca9fb3ccf312d26612da522e205561d0faa5c8e35ae42a01e102e6972fb69198bb4814f147afeb282ee939455d6d3c50b136d1ed8baa9633f24e428d79bd0fd2d736e9d73cbb028cd0ef242f55ea2c4b70afc1ff2aedd20aad6415d635690bf27f9b6f1dac107ec04de5b83d6bd49748229a8eca174a164124a5577d644860e2623149bc892341d00d95acac6e7e0f2eb707aa6bd534b294539a295759f13855816704a0f2e831d7ad232a5dc7e38a1638ba7e0c06eea075c0c17c8540a95861350f53205e5b0b7ecfb9adbc79c811c924c2e88c1732304677f5cd502b568393147c967960970f5059d56d2d4e7de119775dccf43329009e80fed43dc900f65d20110d60015bdbf025f69cdd03ac37b2bbddf642f6e82f8b894a534ec4f4ba26034c92ce136cf58a127b4e68e1ce314cb5f9c899db37eda7379ee63cdc306aa02fc1485843c15053996b3302f31254dcc9cbb9912b839197c6ce88bee1eaf5152b82f008a9f0e2db5bf75d70aff01a8f5ea58645313f1e41b11b262c7fe5f87b9db24ed6352f2b4a5afde990240e0b1a9b1fd58f986fedf13e1e027274e08531225c727fe2e4ccfcedec10f8dad5352bb247f6243353f6ec7cdf2b51d25d165c299a991603a657f821303f3fbc2f35285c5e7919ad19acbbe37a5c157c661b5263f986f3f2d1c5f847dd77c4783d21a01704c8a48a60e0042e40403b36c82579784fb99885e22cc23b3c57c1c36452a0ea819e619bcfaef2acea04e84a2d2edab7c7d94fc83b77603ece3ce5151a1c1021e466bda2c9b42a8d6621550d4c60a791f46c21617943c4cc30cde6e1e9b62a3e7bb75e530cb3d86803e8ba33794377a11e89bdd2a237fecdc269da157064ce0d79b564362903788d489246cccee1621e2ffdbf46d3bf9d07fd18b939f5a097c312f099c3b5dbb01b2bb2bad1b3ef81f146676737af28c1b4ee96bc7a82124067b6164a37d29cd3170e2bc78e4e529705e79a7691016e176f3a94a4809313b255b719f06897bb131e0e2d6746988557ad4f5b31259f3e9f6f88eafb051fec1a9769ffe3b55b2e4cd369c8d4f411987e671176c57f0518b3e2a19521e52a381f780bbf77fda0e468303929c68165623e429a9cd594ac31b3b46d6445cc9d132a3614c527a8c9ba7b2332fd4f659eb9594cf67e7e55ee17ef157780ffb4992195c648bc9cb46c407e6ab957fed4b86fb71ffef8258b96820bdac1a341d8144118faa071f9b1dfbcfa2606bd5f634274e627637683df6b0224db468b905b3b9fa8791e10bb90214f08f384b3e1c84a65abb07bcde73c7b31eed20a569dce4e7f6c0225c68a2025031d03dce445fc0e920d09e0270aecb0810a17e8ad9c7e78682abb106b5d719b0cce0e3cc83d569d38501b68f877d061d8f13f05f183df6f09653a2994946ffa0c5bab02caa62b63501c5a91ee74f37abc034b0fca5ce7293e9dd35acef32191a63bb19a9e2253bb7c137dd5137695ac5037eece124a9fa1ffba12e47844a2d23485fb41e6ff1867ea92c461af05c653e915b351d8a1d0814a01a2204fdb8edc215602b4d795c97b7764f3125dc2e03f38ab2bf8e5702e91463b1ef08e06f06c6f7b35ed9bb3a10bd22f3fe295f7922eeca7d9fcea298fd960ba884f6dd0739b796d956aecb85e571d8ae48f1598df910b94c204ddd98faa59263a809f60ff6e9d61633219a68a0904a2ea98211b8c4837311066e09f3f7d2fbd863bd57fb62d0b172d7d130450a895d3a253b1ec858b05b30b41115561ced8d94de7328373a49ca302fd4ade0d18a2c725ece560e2f85fdb8dbad2f6becb5e39ed2e90e262da8a1d36e0e591ea6e4cfffd89c0b057c5e33048f6dc4757fbdafb81978adacdb96d29281898c9fa1e9fded47ea1e11049cccbcc0658eaf44e7a15ce672c36f4ee09cc178894fa257a74f6c3aefd9d60f8a4fa2d5456372157251c3f72425a6e211f7bb20db44db2702f11f240e315a6ceeb2560cc0286df5cc1dff089964571a0e3563ed326b4d7db25eed95bb15f679e1f970314e6f687adc6abce603194a8394858b28190f3222a007839339dd9d918c087aa6e564802a3e1190d9bc9665d748fdd416b1eefb5cd1599311e41474c73cdb4dcf798c3abe4a676171871ffa4d54fb622607c86fcff89c9279cab55d08bb0d2fcbf14f121daecc9f6ae5c768d31641112265d54d088c1ae679aadfdc589e261fd0cf109ca17e17b7b1b0a979bbbdf0c8e11c42c2c2033d4ca6621b1e7b2feec8f170569df4eedd8b0fee94aa9085b2a361a1f59f7cac84537b7e1bfc6072fe65d8fa13609c0a9ce6d52e48774347fdd0390b584366b44ccf17f60a33eaeeb6a0fad8c49e9ce853a887c6686e1c0e8325e730c61e0561c3654f6079014e6bb7bce23ff58db51484ae8dc49672ecd61f1d41e5a6db6be6a09d44321d5a978c3465371a26ce32d487f01147a4c061e334e1a92d23df57fa08364c2591e14c05c265f531e8146760a92f5783592445d567ac6e7d85a59c135a3bc52d7c354e911a8c98b6588a0bf65d7761aee0e7ffb7098aa7c90398685af8caa4283db6b5fbe693125deca7eaac3bc36aae3d10a90387e001428032b5645b80063fa5e5cc94f218ae61b936f1b138b2dcf7d71f94c068093371779395cde6e65a0c0e396780a11621a1b7a1f24d2bbe7b7d6a7c2427c0ff94f5e499ecc42fc8e9b1c9a81d9ff428ded19cad9535dd8272dca43bf0030647a5f7f6f1d4d341794b94ebd222d23c24982f9d984bae2ca2af50a7c4ff72ed717d41f3c2926456c0ea49b32cdbd7f52449a2da75ee0666a9c49252a30cb94a06ff9e2e7bbbed1a6f4813b46af7695f1149fcf9d485dfdc00397e557e940fd74010e8dc40cc5174036803594679ddaff9408c0fb43041f997c8d890e8f596d6aad49803d9f275afcfc6ab5c95307a9fe2844ef82d91666ee963ef50769120a19f413216480a585ab0cffeb6c0b2d5dfa2ca48d5b5b30e463cab60f93b12e9cf62b690eacff380e0106c71c677cd4ebd6c4f072db9ccc9ca7ab98d9b00fd521acad8efe1af33b4bcb69ed4331e554962a76a299999322011dec370d5968a457060007897d8840f21c9bee9d1346cbeba0a93d8cad48c0dfde4326e6cd99f8aba0606927401917dd0d7fd179e7dacf1a37b1b4012b1c75368f126564be586d0d77fdfb311c20acb026c19a33e74d77205b7922b1ddd8aef68f150ddfd56996cf90c459f2cefc1b8d6834eecd9ec8956a81973bc67fcbd303bd8a0404584b17b985fbe05973191b4a83f292c43799297e3d3c49181e58aa5cf20700af565ad75d89f7dba5377786f47e3b87472645f5efb9874c2582cef9245a80a5ae4678aa647445db22293eeb4e967563453631228c3f87ce3ac0b159d4a4a358e6f5eaa0165146f9d250f37900628cd750e5968898325cd5128bf29cded361104020cd0769b638127828b472f983bfaedf9fd94c4a18265386439f07aeda67b5fbb9f075bfbdb16659b9b8767ed877d17450dcb936fa50e024d019be4878e459ae36a2d4dccc2122c1fa2de61fad19a5dfafe2f7f64c2195724726d7117bfd5722fa68622cf68ca73143889cd8e8a81f6526ad084e2bac69c2964f91eefb896a14e4dd8a743743d3fdadcca35b771cb77dea9f9e41fd7eccb8c148c2ebcc9351c9cfa1e3408173a749aeaa00c213582d795dd0290f5bfbbf2a71094a9cbf3c0f006b9f826ecb0b47bea495ddd7324cd57814a21d6f9a5e85ad3528283da9aa133751783968805304dbf46fd8d2434a25e46d53708cd8b4e8602e80cab9a95acb685ae0a94b7e47bdaecc9d248cfb1569781cb0f60400e5e5dbc8a8c829aedbe78ca00442632b402d0cd98023adc7c6a4e5b9c8ead4821d7553e39ce485c9fdc4815a61b42ab0e500141c7ffc49e49d06c834d373ec0389c44841241b907f44880abffc4059afb6cb19e879fcf15110359782c3cb751ba2bbfc68664ae7cd236ef1d7596b135e7bc5f2acedc8e5aa0df56bd456984a5a6112c3cad1299a842dec1af990cc6f5fa06b3d5658740287640f7c23f025fe7bf33587a87cc1f1059ef7341ba751504bc94604180ddedcc87cfb74e578bf4c4659982541c946fc4ed1cc05e976c9173da8159e0b5801e4ffcc9fd4f3732ca7f14cfb2a098aa8231314bda1e51a162e7e486cb1b09c73e524627798af09ca09a6de745bd093e09e3104b3a8efd66a7ac137aea27a8c39d973317408c0ec0e9cf0413b5e343210fdfc533eba341ce66b1d46a403e142a2cafedfb64437ae61b5fe9c8e95611545b6cb91dceaf7bb5796db20f370ae1e8364b5a3940af8ea92cb54921f2c4cd83596289a4d77a1644828428b5afded2a28d8356c3db5f3e07cd46df8d4fd627fdbeb4877200f8bd1bb3bcd2908e8c48b36793ede74be20f5b190f47ab8675bba8aa4707a2a9c12f8e2671b758e3cd9a4b9ef45928dd04be982948ddea39ae76111c7ab1c43334315f4560666c3c445b4bc5b809e96b8ee89cc06b18e96d88508f599c654c6ab7f881199ee905d1cd95df45e9c11318bdaf6720be3ecb0233ec891c86ac7454c19c8ac92f3f391990c853485012db19d6102b8595c935fca347fe8814e9cd9c0c95f45b84c4421ca431911c91abce4335bfa6c140ddedb15b6c37a23e27a0cb9652d08810ca91345f7af5b25447dd098658da2c3419254ee835965c1588c48498d68e21a0f06e964955b0b4e4cdf639d88c003d997640fe8d04bc479cd623c08c3e366a5f46b985c8b26ccfb47ec5e3e488a6c276749520cbf35dcf7bb92320f63fb32cf4e2906d7311057859bd1831bf1860d5d29224b40f0f32254e2a0cfc959c9359bcfcedc5ff5aada270853284aeb2f9dff60868c291179dc6194dcb2c5a8a3d255a598b1be05f6c11cb4f9f37209595c588c5b0c1274a4ae7c29c6001b236a42329d0b0cb3b443df3bdad63f2429075436a9ce7f04550e23420c5a8847694ad51926e7cbfcca93b60c27972c3b05fa4ecbfdf5eb8cd7eb4baeede4b6128f1a6486677e1e48df34c612b644d589d76f33f921aeb13ca1bf987e4773309e0fd2ad1381829321f0f1b219b6d8bf5be33b30a4cc7641f641702fdc4067821e1e59cbf36b89620f360ee40a8234ad0e7db3b2a1047e0a57bcec12a9695b136afa6d9ec633444ada10a9ef74b4622636aff5c3939da555af48ea7e961d49ca6cb2e14c88fbacb3375d191eb75d61f575cd120842c24a84645207de93ddb17574233fefa18356df0a0ec57098187375dacd6b52e595cc1be66b2b2f9ee5c4ddd75853ba4d9b6cad546d6809a240fe91254fb348c328aca7db2f9bdf8e9357cf8b802c098b098fbc5d93363063bf1998da34d4ad49ec9a1dc6d3b5f74d386d174e9054567d225f7b51210a4acf966b476b62bfd00e5bc44edc8740115c836de7d58950415fe745cec61a3652fff6db9500442822c57777c162f3fc3d6a5fa7eb18ac30187f36acfa0eec491d66859a9367dc9943d1b592576dd9efb374fdad743e01c203c658f0d316449ce747a7643626af900e7565646238d57cd3b70814d8e50f6620006c144855a266d9309762a2196dd68eea0dd7ddea2e8c5e516a0b081fc2e288679f9dc560804368fb62ae57007a9de5eb1fe56039d660b17bab68e0c5e6e729451963e2d06ebecf5f108f82a77b112b51b1a5260ca879b5f08efd3a782302577c971e142759ce7a96499f8995740af8137a5826c26618405d8f85ab7e0c8d4c0acc60ad0722d127deb15cebbbc6d0d3c1b02ac1d89d57f18b14ca0d12a7c5ad85f88f7d69450e39365a334a67bc8f7bf0ea822e0d54b0f1c959bea0c3ac29cde08222353fbd7618f7bb4e98bf2d0dc21a672de7ce5235c7afbb6104826336bc085737b098be694591ae8b9937fb9f1f0aa0de4498b86ac2a86bfb9e97d49ce7e2c82507ff13a1387c04ea652d7ccc3c22b98d59251cd7b64613d4f901fe5f5524a20110444cb46670b01872b57996467da8ad1ece8a70504511c9db56b62e8e7f39c8694b80e195beb279a54d9092cb425261a1ad517923b47f878d02c45d0b3c5ba02e0194c783d0787d153555fcd3d1e04048ac07823890922e7e3e59d3d0f6fb10de97e0b5de2920f18fa19cfd1b5bd648e8a752e286568ee46c7cca7c4e06bc8f9ce09a660e0e297e387926b06490f75428d9004c4d5bcfe417b3d553102fce16d2bb1780bfca458cc076876867ac095ee1ec601bb70c28bc5e6c436e833959ff2869f2f295e23a68a21ef13fdefbca1f63aedc8bc05ec34fed166836268336fd608578f56a3bb6720d22efd7e38dd10e4dd67df73b5bb368d328a4a240e54495ec8231268282f31eab44c4528200fba9f08c5a1e0384eb35c47bd634ed40f2aa90c158eabda3ae1d50022dc11115f3c6d54aa7fc6c1a3117dea4dac77183705a03f503a295a8b916933c5304559e7a3d1cb476d0ebeb4fe9c705ce3c8106a97e5bdbc683725b0b81b11706ebc24507c694875fe01a9a5778baa96b62436e47e9fb140ce17bb8504903484b9f02431bd03b3ae8ce4df03e0bc2c210fdb0cee635c07163fc9790276687f997835ec60b5a934a4ccdce652e3e289950250d5e227ea1f8786c1a91c3eb877ddd6770b3b4ea460c4989c2afd4c5f038c7606da77d49a5d900255dfb9420008f0dd482d324895d763e0fbb66d4fa0172205cc80c2534859161cfe8e9142025bd8082ee90de9062400bc822508cf9cef171bde0626f41b960906f879c5b90011881c0317f00605744f296d76d0497f9e8f8b1dd3b86dfcdddac75bcd72e546062841897732d0df919e615a623e60638c85475bd8f077301e129c826894a90d2b9c1c50a4402e6f1bc9a5932631fac9b63817d1b7c8743af27bbe9d27bfb84ecd98e27ed82291781beac07a7141e23231163a144cc4f4d85991218d7ae7fae82cdf4ad2460e225d4e96b4340461afb16561397b707fd19c359bede770f02079184ee0789e56032a2d9065c834b8a7643b4b86ae0c2604793aad11f0ac250a9528f1498ffb3a5d00e48cb7332e88e337b0b410d6de74e8656c240ca4cb196364292d0830fe3b0826d6673a3c9b0a726a24d230f7b6e0683a1e4c077e9652608b97f949598b0de4c0ebf68f6e0e930970c8f65b03012851023bf847b197b90c8bf94b68ef574a9ac63538f1918b26f94dd33ba080af8b9fa1eb0b19cbeb335c03e1f6302755818e6f56d37793707f4a30ea517f965ba3652016408847b664508c6d54990adecdfc2a7ada167b5ed4911ac1787f0884d22062dd1389ddd42b6498aa6f9b2c2631a7d3fd6ac51e7a0df7b9f8a61810919daad9b4e9072a0dccb8ba1ac15c8f14c5d1df9bb395d28a097ef24c46f1e83c72506806b2b246d87225aded83ab05484ec92bc73de0d8106e76ab7e1c28bc0913bed695c23f5362e7997854434852707ecdba54d96533ffc7a0bf655ae1a28074871c6c9a8ab5155af64675f4d2aa8d2547904650b975725d9f644e29ea1564da704c3186dbf2e1fc8a593ceabea732a00a614a50fe4f7b35a1e56b89deaa4a44aa8ca540c4fd4a262aecf9668942faf9adf80c8a0091d7a92740cbf377036714dd781bd614fb790f634aa30ab8566758768f0264ee2b82bc84132519303359112dfa7a445b9be5cdabaf825c201aada41f10bb97ce2181177dd9738dca7a6a0352b6bbf24749f9c9353a43192f97b7b22199b3508c8872f7af15f1815cabd6d440a9e8e6889ee94c808a5f7475c985f2c76587826367a3df99b033b75c82509255a2de2ff14ad92d3befc7233c4a4fa92f54a95569b5af5ea44ff3415cc839954f79d2c6754e5c4090da23a180ea38c6972bf76779243a131218a4804ba9f15a2b1c98e39dae1d1537c57d2f642b244d48930fc484735793107d40094bb9309a05e77b7cd20d9691d357804684f04c02a5f3e0b4426c481c6cb555d593ae33012d5b258dedf904b15f485a5b1d63cf3080867af4f3779a4671f4ca330ef3cd5e3b70ec5d57e7e8347f409af83989cb27e6efddc55e296d2afe56378212739d71cbd2cc5dda1320b47fd139319073aaebb2069cbeb917393f841d3153e79febca3dfdfd4ee906f4b505a54ca7c580f9c17c3b9c69e6f0196afb64308dc1a13f749580f6d95f7fa72115d358766afaabb3c540e23e20f085b7268913c79545d2f3a0e234e1e96b0179aa535455785ebda241c3049e17bcd9d6a36a224b3795da7777bfa66606d0f935022b4c149495e4a56f564c0675953feb3cfd1efdcbc512ac773f45a8e5521230de84b468a4586c33df3743d5bada8f8f59e22fae3101eda832cb6b2913f4b17c8d94c3d068c62b3190e40ed5b418b194935b8cf8801ed0bf9c437ac843b4ef8836099da73b3976fc4fcd007b8da52e7e56aba8ea7b866e049ff33b55e809cdeeffc0213c58c6bccc243fd107438ca3f319d283dd0d27f1c398dee3e272711bc266f3955d04a87d140959ebe3783e6b5827ef7fd9cde9285dcbd5ecf428c86b0a3722991782386a67f553c1cd8eaa29d61cb28c5ebc6ee09e4d989283ca3eb297a2c8ea33940da05702314a4bca52dcdf408b3c4be78180f6c403d42e80e9b3af9abb8e2d98a6f5c336dfac903c21bde12f677a0d8b2d16c1483ea23c87d37e876eb39e49f73a30d9bf71eac3eab41d3240947a87a9adeabf849b1148e94bc61a4bdc053152c82dcb583a5d26ca57bd36a7c5b9829586f11f81e0aa5781d5702e02caf8d7753a09c17cd23f3d32d4111b7c241ca927095ee0ace211420a727273e849f8ef96617c13ff0f48b499772eee5ccc33eee8c25ce34a5adba7bdfb8bc5cf8436baf149af018cb5194433c29bf0c51d0cd832292213293180beed1f36ac4ee26e6af678c31f230e4d2c5cf2e54c72baa213a51b3c714c7d7666936da64bb29135859ae1fe8405b38ca90e600d4efd7bd9a3837c636aafea55c55d29d5917baf6160548ca1000b2eb4e0429fd41f79e18369777018b29f4c767cd0ffd4ae6f756325d82aaa1996fab4a50b28dc38a44042cad6099957f7e9c6d3c47058daf381912862567018f2e1c29b7ae76592367b077037f2faa1d7c6bb49ef15214fb5eaee13fe583c545eff26c29a8a54920ce4d76fa5f130cbf77a6bae16fad546af37490de2a13ab29418ef8232573750557b106dfed3febca41a364fa9169b75b67062431df9958a90c386cbeaee467f1f92ae31b4ce631620932eb07374bb515e3bffa7ae0f1276c3a9b1a9cfbb47ecf53ce8011d857e6ab1efb68a56e294880a2d052cd38c059dff4cce611373ff422484fc9495808fb39f39be3ac50077070dedf87c4c022ad8c7d3db4f5fd2311f45ab48ed5ea8b16dc0984af6d44a757991a1aa4b794aea426d4cd49cdb74476012be05105e00a8b28ff8eb6346befc350884361a3fe22a6456df97d7faf37b420b7e62295a210c50511ed1ae7040c51ee194b6da27cdb90481c8474a2ffb7004f68f228e39fc1af495ec416be1fc43e6879e0f8ef887bc370d4fc2e763f64061be1b5a88e9377e29876941a3467f47effe69a83e3a9206ea0fa789041808579d5dad5461e3defa65c795b2b3f3ce59f0ef3d872818721847bee834cb36edde63b4c0013fdcdd860896973694e5289e5b5c98335b1e26d5255b195108507f3f185ccf5b2f0b97b94603c8c8d75a6a388ed2d52387de63193f85aaf831a57450f06eaf3369a8c4d6ae2f4bc9a85a77829b332f9af2ecf591dfecb445991dfe3472656945366fe9851cd3ac1e1b1e2340b06f42ecb6afa79197468fe751aaa17368932170b35d8ae1e32dd7b05711fc2af37d0543d18ad89da481a853f7af29d0fcfe3e2d82838f80e755d442d93bd8bd663a8ad42c3a977a775359feb6eb659c865362598b8cfb5ddc2b38befa86685eafc7fde11f29672e6962f29148272a40ce3f5541245c90adf97867206eeb3f11aea15960af567a13735ab489ac081057a61b3429a962a6a5d8cd4c6407d98fc58f088ae8b5d9ace04f327637e62c3da870215daead408516f01715e9decd0c8451ccfa673424261f78387eaad4f2d2be8e2a445e5cb3c1b990552eac6acd78e7bc9e5eb748495977b2cc8084533eee8fb81f03a301d362c794d3a64afa7911a3b71fb3ce9c949bda4cefde7f257d5ac14481f47a9d1ba4649891e7fd9ead7a28e388d360ebd746e83a059eae98b2450e877745ac3438435882ab95e2dbaca23ee39aa71fd36dcfa628bb7e94d49da2ea0837b0660055e269a3c484aecdb245a41e4ab1bd89b6ed3c5e8ebcc873efc3b8a2c320c5a93c760c642ae87aea67453593316f957a0898e6dc45cf3a0913c11af04b63070801b35021084f056afb442d807fa9a55091f50fe2d60447318bea9475009793faa6d26df813c79756d0607a7e4c55250ab78862b2a5f44275342646bfdc1aed1923ef82128fd840305295ff9d5010170aca13843cfc1413557dd58d04afdc06c31365c28c8b28e93b410d512e461bebf87b0056b2f5d91fbb2ef58550b1c4d3552a1ddb2700c6e5d48bed2eb81866ee272369dc56c5d7e1927960ac0687dcb92a41e43255455160aee10f8260e98d7a77742d7a055559bca2ca97d0e32d117137835839bb166ca0904bede64ebe39a54ff2f92c31fd2fab9aeea38bda32cd6a86ff5cd88d6c2ab2b9121278fd9fff84a05661d9a6268a2b4345410b8c1af0264a5312ca8c9f615b510a0e6cceaf1a47b4f9d09076c24a317b907b83dbaa21f296c0e33859ced1591d7dbcda42aa45c100ed4072f947b3dea7f7fe9083c4af4664a9d1cfd0d4c794acf1e2f8f54d5541e1012510865fa45497cf117e95858dbacbbc09443683fc0d37fb22ca1f7032cefc89cd73b714b5e291492c13f0913939845b32cee84c8c27b2fc8f645ad0b6f0066dd59b25c41e98fc85d1e5a241f88519e87b9606bc7f4b5483a7676f789b457c264b3d207b3048c25c64ea0978a99d4b956d8b47d5bf7b38ac16a554ab2a89f8ed1799786d64496e8bf76a4c13e4f344ecd60be1a49ed498cefe357f5898aad08082c3b50a858397f3030145ffebdee84926f8685e394d813b918e68a838636e96142580482ab79775529b830b26b15cfca319f048caf12f269c882cfc8e7ec4763f5fa5ec3e7f0dad066603a0b3f85673777427c9f3ab1e8ad479f11788276064a757d8bb11f1d58e6ecf7a75d54039f9923a744250bab4ebd7fefa0a0376b5829d96eb51fd23718b917dbce576daa44b390b21d1551fee35e0a4ba28c405a41fa8c47394b92e0fdc0a4cb1a244a7902978f73f6066681aefe8c391fdb7aded4b6cdab853ae59a5d873b273cc234af917d490298bacf07157599a39a2e87a57dd6154122ca2c2d66e5a0af6c54da08c6abfc86ee6969551497e6e38a495a7146522815a8413151332576e138dbdf6606dbbb6925b60f9d86deed2a9b124e595050a92c7fb08c57544bbd284ae80786dcdcb6d8d8712bf535172a80d70a2ff10a2068850c2ed11277a6c81795c45c6b9f1d02312fe4a349a61e24b811fb3f2e18fd002c11679a038efb8152e69824ebfe486c5719576cd300ef9c936d35b9e32528d05325ac25eb0c59b6246def8faefa4820bd3001d0a0cdf52aa742e07986e8021bddc67066c80bc2f844070ef13441afce297415eb168f23005943a20ec2f7d9eb99ec52edfbe88a4af261f38e44952149b4fcf7ad2e239ef86eaac73ac857ab9bdcd91e20e7290f4d6a2d8c389fa8df9948a384409b2c73636524d3f11f3dae7c96082a20e018c7a6e0ab85d7db923d7b7efc53ffaaa35170b68a9cecb9b6ea4491f18b0f61f708c6f6195e743563ed396c0958e36554ad49c814d3264afbfbda77fe1149269db48ef1d6033c6164f53066be35887b59dbbaf994a46bcb1cb332f3e789846a757de9bd48d2b0cf028b2bc18753bb6e0e0fa7ec03cbebe0e91f34112f62dbfb2ba8a66dc306fccb54762ccc5cbb0ffce9ad9d51a3f6f6008fc915d8c7f6909c41fd7ef50e627e5ca9d0b145c3b4b90b8df6cfc27225e6a762e41a658fc99c8c314aaef354bd609a4beee64ec3dd9c807a236ad09a3659e06b2fe39243f20dd456c3d8b82f063b1275b6aee118cbc73b2c1710236eb9f2c7c30b0c320db603a7ae0565271f8875a34d01d0be15c25b0758425490c9928429eca2c90a0ac8d4def8e5ceb46504e23d3a210abb1a7e44450f55d5c136ec455a9f00c2ec2e4906cb00592534d807683e57628c82cf47699bd04f6878818a7785482abbca668ec9200c8afae87959cd26850f38952a0a522df04b3d99a312abc1b1e22bf2793efc894f5ef6f551b29306c2cfa1ee6162c59cebd3db434df692f1ee3b09a993e1982e0cdc2f4a672e71a67ddf6d0c9b19bc48092cf1b8eca8b606a8858d1790aaaebc1f84d22425daebfa2f2d435eb2e512dc2f355dd28081cb430a61b516ffcc4ec9ab76eb9c98f73331cdecb66df7891ffa315225a9ae6fc7347473b0388a200bdbeb71e1e0f5719b3349e00de8fd91d5c0b43910a6023cf8faaddd0e97fd0e1d34dde9bc38659e5e3f47552836f6f52b4cde571643eeb696261098b464b7acf8ee68b664d4b59051ae603981519372fb9e83bb3a90dd0735e08ae77d80a11f82b1c238ef72c4a4f646adc471d6fb9300690f312cdbca0dbd6076ef2c4a4c9e76f88ed230331c4d31b1b37f408f48c6305bd2aa2c72bc49cbf4b8b11157aec317fd5e8394ab4e435502a8b8d3cbb07dc53a12f69cd1849f5aa5da2235a1b8cd9123b0fd079ab19d8a58b1590264050b5bf03082cf73071b797f35984e7172c52873e7445bb52b01a2e5e883bdad60560d2a26879cc7e881e1d12e32986e741ba14e22e6a4955c9cc173723ec8e86c9c54ed9ea3e5bc7a76e57bc5dce45b437eedcee898def0230ad02ff64741721ff69a071077d50813cc76413e26c3bc71b626cf72b538ffdff44c2567b51d239a4236d59fd11c5967bf047ce29ec95a8f6ada18b9ff5fb559c2d2a3c7ae04295a8adc0101426750d4d9e39d9ebec9c9b565a6fe6833ed9ee3eb30b80c751cb4172b3b76fc36890bf61de03c2a2a12dca33ff6c126ebdb1e0253a1dec31a73b327cb16cb61a431c2cb154a2933325af95970890be670d73323366cdeab995a551c24cf0aa888f7b3f348e159007d73c04e6cfa4289d61d98d9510d13cc7f3158c36fd1a75607f3b5fc6443ccc9d7ec210f1c9530a2dbe9d4e4ad3f25a7529448bc2a9f089b5284395af586eedb7bf851871f947cba65979e312811fff7a2fb098a5e3ef2b658220c2eaaa55826909e0383e340b49269aaa0af5678c66d30ef09ff3bc5b3041ec71702c643aad4ce9fc5d03a870c4ae18e8b12040583f50e555113ba362949ff28dd2f58b72d18ee84b94be7601fd5466695cc4219c494abd3f43d112bd7d45f04c0415cfec54059702dcd90a56fd2d731682ce40a210fb56d3db666d05513081bef0e09f1ea96c672edc5a218d7d4343d58f6b29d0c1dcc6957c44273b4717630bab3548bc1eb988eb5565510e663b06f078cdf37cfa472b317372dc43f1c22f66e4a77643481c0eaa61c1b4794f28a939fc0ed813c2ac3bfa32c8227d1ceb550a28bcb0eee42da15d09021e3b91548c1d6b4c9112e3f87da9fe467989f63a54241b092160d5e63c132858c9526e067211567f7b8d1321946dca9b3693d84e38ae966863837fbb4e35b2b02ca779e0105accabfaba29716240623b6cd3fc90b63c954ba1eba8e8d6fe1211f6a9ea68ff53be684741c64e6031401b7d9df91b1163d0010359966a904b4c0b181deb55059e27bfbd07314bbc3216354622284d79bc1a89670318c15091970f3e6cdff39ed3f82c788494c848a06a53b8e309dec63d52254bf9420daf6d693f83d5dbbc6f5abfb6da303bec9abe8c22fdda62779ac1921d91f48ebec54b0e6e93d608766c545526c3c95d58003610638e499a29a64615b258cac8199d30453b7de4ed77423d97327f7afaa9bddeb5d72106be2698517d36fbf24d514ec311096063e23af35baabc9d84302f2e0e78ecb96c6af51edb15be86de6d0bb5553d03e7dfd31be1eb26168d810a567341d587099ea4e40b785f38bc6e4a034049361aab8344480a8bfb73c23a54df9b40a73493bc7c4b0a0a7a0e574699085a0651f3136300c784095ba2a87f944525f7b492984fe59d8f3064257c5a2f509a19af6318e67ef4974d16afff7f4b59489c12314fdec39bb09fffb073b4a7b5c777e79566a98f4fa58d2a1f7276de3e97137977f7309ec54c07e7ab88e0f2594bebb4cc7d3cf200256740b3d4c27514e0d6bd181f82e3299171cf0c6db9682f16a9a2a9b37d0cb3686915e6700e5e848f7bab1f3fee7fdbebe6e7f9d8bfd4721bff452107bebd8addf06861578e7c790aada572e4f1c98214d020a0c4925ca0ac10f4727a909fa6b82270f2061196ce54ae6596a970be3166c2dc6f46d0c2774233d9b6d0861fb7daaea28440baea659d82c3452aa586ff37051b95103a909a448675f32bd4db0b8e51331a2422923a8666c1c3624eb95eb3b7af0b6205ea4552f2dc071b60082df1d67268514fe5946a6bcb8f8bce59d1f35fbb4c2317d95b79634887d5f5012984529c52d7d6ce21b63df758fff6bae207cdb2503968e2f9ff5638110511bdfcf25a29145747f316b996b4de5fc3354ceed2354c0dc25651ca5af426dfc8395a8f86982c557176791c3340a1fb47a06be617b10eb3a7c21c0bd90e45b6197d969f08f924676bc8bd9d6b273b70d59fcf26b8c523f7d65847685413dfdefea709f31520f84c6a642618e1da775a25d64bcb46fd299590f77551630904b2377b2d4286dd9e33e2e393370c760fde365d17de1d6631722281d1620b741c31e054e4c12be5ad35715488394c50a87827337e44afba69a2ea896c5c281834e50113c242a2eadfa70acc9b173f91d19211c05b14a78bd4b1ecb251442ac58dd86c85807f249860976a811fa9531fc559d5f236349d257c66e8e59db1b194d4b9fba637f3f90a0f41a748317f2ebc89a99780457608d7cff7fa307fcf118e64e0ac08b909cfe778e9c864911a84837c49201fca43833225e00a41997e364154939a602732ad4eede1b8d9de8d11b03b30f9ae52bfc740933c3b315fa70491b7ff8b9d0024b0c749bf87eb10a2cbd21c9822fda066308d9896a33a731594e6924c9b3c826ffb377742cafc283ebe228bcd66803ea1e3f0e054fb64b9d77815efefae1d4174ef5c9e29f957403cd9eaac4dd9611ee6dadd691139ddfb17e63b03a426a88e8aef16c4ddc1a138a3783e09b6fbae3b9d1996c2d99807cd08cd2316358c90ec5afb38233d83b36fc7cf536258c5969be53f869081e69994cc24dd66815e1a317a87591c916e8eb928035c45b12ec5ba41b209e6e2fa21d5143211b6c3f00415f1d63b872d58ae713af3ca7ec729eb5e4e56f405262449fea413fa7b255347bbd385e0beb9df18e8d59fc12fe15bb7b44bb46f29fbf8c404924d5fc78c5ccb41f267aba0eb39a906a0b6898adb8ba5c3a93c9121ebe50fa4dd2e3d4b7ffe0d19f86aea3c314a20bac03ed713819bfabba36965cb41544f1f5dd66662a31aac9d808a10f44c022a3e1a4434b1f830ac2eb69d55ed2b81d1d91182ace00b04c02acfb6c26bf2a2bc1250c4719834b3260f96c6f8e35c47aee8baae334455a6c885dbffb6a3cfc868b56d44ff1b3b26e195b31976288506b45b68190acd7f75f8362b4ccd3ab6806441336bfa9d6f81237cc8213c11bb00e97be2e0e754375edc7f9fa9195e0c2fb03010b76988ff3ab7b8f55d2f88061c1df2c112d374f998cf44d0b9e674b70347d50d1b81b21e016f244db3d5f0db2b8d3ac7a3afb99da1aec49120d2eb2fd7ed8de87f03a5693ef9c5fbf4fcbf5cb4c7f237d8789e99f89c091294b00e6e47eea64c0b13a069b453ebfec039ce2d92d8326d61b93b89700dbbf2db5dfced410d4d69de989d99130e8ca195ba044e08652a294b3ede72e45e38ef3762604a831df8c8d742d7f48ee61db1e5fdcbc1e05ae7ab6fe9171f59355459e194d0a5773a5ff2aeadba73ec67667f0da7fa41118bb8e545519620635a26d94e3cd15e1986dd3b57438888a4e1e22f517a8e59e9afa602885d079f2863da43eb0febdf82e58ab310c87ff153f9817750e9c860f9ac16f7c3b76aa8636ea5b50df5703cfaaccc0e309d9af9fe42078e023a29acfd2ee8d072f634d2dd36ffbec4875933aa6fa8a50ff654b3ebc0b3b6a8863ea86707aab6274abed4c67c730769e66c4f7b6dfccde5cc11bf087d6544aff3c10713dd50d0ab07656f0a8316532d6bfd490149a13e83102ad4f83f112549cf5eed5224d8c17775489e219891be4007f889ea6fc05f3f462dd7997e767beab91e9e577ff0313a64098329772490301fc2e2299123c3ec7d07a476ca56d7a6fce43b8ebcb059b2c4f1ee1c95889fe94aad1e4aeaf52491a28465ad4b1503bcce7353c38fbde479c6ddbd8130fb598b1ce9327d2d00b3d18642217d7d0c02b04c27ec509fbc0ca76fb4a3e91a65764a382b3d5123000c2610859639e612cb0ba51935215077e252f04dcd110b3814f2f43c2a3ae01fe6f38a2ab5bfc0de4ae3f0c8ac9b957fcec1b21e20c4abc6933d4ba6ec7d8cd1613c43ce7716bbbf42948c9819ee5df3d842951f0b5475e694c414dae0ccdff8a323da945bef4bfd9edc07f6dbb0d0d91f8047600d8d28916c2f267acc998921e5f524f856613e489969f567d10b18c17de092cfda851024b1db99b69734f966ecbfe16815a45c04f426130ed555bc0a737e8e1fca3506ce440630be36e37e505bd3ac0941adaede7a8d3dc331c18cbb4ef058eaa1922ae683c2b3b98c39b3a4e8bd3e942da542661b0fff0a2e649defe4654d1796593c2a3694cbd03eaa975a31fea8362d1763f11241cac2387d569d90258a713688a5f72f9ca22644dde3b0a3e0fa272aa1bc59eb8e8ff797225bd8ea28a878a668ba184ead01ef5c437224a81bc2708ad7690c90e3c49a68077d4aa7908430a3cdedf2f26d75b7d635898bb0c136ce3899c94a07e46764242946c5c6dbe3a1f7773444060f8ac73f316afd2d161cf038202a1a578e5805542e65b759ca845f6c1b1fd23b18264e079396c00c02061d73160ba5cb0e67b59b2cc8d4890fc72b175a0a4f99f293aef5c745df0202a8c54e6609020fdd8d5809e6a6992935a34d28c444c5e5a201facb00463fda36b99fabfc4063c9d97b4710fb109b13400fdb6eab89edddba9e2a02a0bfc73de0dfa8c26c89eb48375f44e23dace6a9804a76bed8c4b0973ed0bf61744b57481ff11f0430a05b5c63b4b292c9f42d040b78ba808100f426de055f7368b3552f3afa147a6dfc4c790c2a5f5b266f5df427ba4931ebfbb2a09e21287f1e04613b0eb56789ed0233cfe70a7576e4fc21885d9af002bd2e9c2c3cf99f3350f7a5d789237b289dfe6fdf7e83833010a99dd823a34682db946076656a9b0e07b41647e6ec28a59646235f2064445ee2b11d8caf054b45bc7624f14de46441179168637438629b48c42041d04513eedd2891dbc8a91916b8d7700d66c6a50f7283b0c06b3a57e736895c4e356ba756cd2f4b8b1e546b18670da67339da27153e8aafe3696ea9c1e3c965ca6156447fe84b40d5e617253352957464d162c364770f2e37d8b5666b12e088a5f4ec5042a83eb7089c6d7bc6862c8583390baccbf150703a50362b3084cb8a6c0b6c5ceea22c2bc0cb43160052eb814706804465c57332e7651e8695706e4ac73db064e3844ee2a0e1b1911daf601ebb00549f6c42413a688b1d1ad3919cff4dcfd7f84159ddfa5e2ed3efe194aebcaf631088a7f6b5eb128926c2f0a696391c850bc057485deb1e950eb5da951db040a0b7fd24a943881acd05010cf903553bc752e1453dca12aa3b6965efe2eb6c420dc9065194d19e3d4d9d4cb2a514d89ec96f63e104f0baae77a594574fbdec3d515f60660a6f350dd7ec50fa0f4040788c8340c9925d0b683c399df51bc498dfb83bf7272a31c77bad1a1b0e5f681943b823ce70eeaa426ec1ae9c9954fd5d9af06b31f1cab52f18a23ccc2a65a65be10808883c63b0cd9b7d48a90ac4ffa76f87a9e4b134aab8fa939f73747827837c17eab24635b5d4f789b8022c689f450f7b488ca59eca627f512d06a664548ec405fa9125d5efcc12b6ce61d716781fdbd16cdd0b656524847551f0671251a61addce4a76b90fa02e88873ace8731f361e3ac10ed218e6e2be3b5e9bf6d3267cb5074d307f26edb521eaafa6f34bca9f77fd50cba4bb16e6cdc2ad6c330aa4fa3f2f7243ab6bb6074fd42d4afa860f3a417bdf7e580df471158d6eeb326ba951436202e058bfe802d35311429c108b9a6e401ecdd553984c81d3007263f0ffa5eb91cc67bdc1cc43d289cbde7b1eefd6d40f62e7c1729a3a34c6951176d78240343dbc6ecf135cbb3a55a75472972542c0dac9d0e1981eed913c0f7941d7340bceda98d4608a87b5fcb1bf107e78529ab585c57db5d04b9d662c8f7e9752a2a5bd0837addcf25dadbcbd6c902e856a6f878c35ee102bc6f882f1d00be879a25407181032a75a95c130febcfc8db17819844b9c9d73ce6d2706edb082232bef3d323ebca103403fdba0b5501b23416b4ff194a529e34dc3992d5a5a6cac9152164473215fd210e812f7c04a7b3fed05510febf2e38104af53b5a0baaa2fa708185709a3e98492ac84009645dd6a6846d49275dddc842303576bbe9e3c93e42b0b9ac6b314f71f781ef670bd7cb60d3c808ce46afdc6b1a4f19bf069627c0771c1856efe39dfca26e0103bc8fe17d5aed63b6d8bfbc3225eba4674813ce491e4d4d61ba5683c845422f60903691174d2e10346e9aef9f41bf61962c719f6384b7f8a78c21a6893106a94790b5fe5ce216af9434a5a027f5537bc27277aec91bcc8a46c6635923c67e1420def6d1c85f2546cd1174946626a81840ec522c650494bfa7eb141ba56a59ff66d5b0c7478dfea0ccd84667f1d14418470b5a6d978076ff689de579f9afe65d201616b33fbd11a130652bc8c689f94ad4d0c1641db87233a27b53c497ea6dc7900a66e6b7069d20c09d70bd2e51f3321f84ac83490c3d6b6519418299489368f0c20757694cff0c75553e48a24cf9e07e587aea699aad63ae93f0b0b00832b0e220b307681c61995c990c7cd9f8c779bc25c660fa5797576a4b9a383f84d0aa4608a9f28c26a479b9df5294768e02dd9a79634ad3970ed6a5478f830c3bc92df9211d9b7c7ed0d26d177c965dfda9e5a7543a2d2f6e2396dc1f0ae3114d8ef7ba89574f98223d9c43c68526b3f778290aefcb66b623df8335408df803639d162ea8f6858539ce331c54c1ac6c7699692569f184c1b41b1297ead776cdccc7a67a6aae1717ffb19e067183da2b631b0b7e207ef9de654b03edf495bd0748285ab9eea69f48bd2b50e17d73eab9404a9f7a120489cc2a3c7d56b9140f417ac273037d675df51dcecfbb3d06d6a3d42504906a49a59102d15240422208616e96c5fbde438766b1e2e79d0f3e5d7d6c8d002fedc0292f46f52b1c597e8735ed94974af0b83c95c576117ca84a8b943922e288fc40b3750eaf38b84c2a5735f2e7ef6267e0ff262b798b0e2023768b6f66a0f346d0cabf4db4b483ff297d9604d73dbd9bf9ccf7d5395211085d32f39d85dda1287fc8c6c3b5a39b5c16d9b86fb6582cedd4a73e07262d17a45e75f848a159be772b3f78391552117ab8b468724b48d375a4123151baeaded5bfb4e9fca8e5436383adc22bd38997f91977edd7639e06479e538be656d61a6df1e08f4350d164a4799a7a851a97bbf4c126a0f1e2cf1fb3870863dd959873d10d14831e8300469a41391544bfa0a96f5d9680bc52f7823507b7564a2eaf4d74c18790cc8fbe7449f71ee2a435155e614ed8f6ba2307e7da3a1f80dc8820746bd90d79007f55feb9d916a10284b1c68e67fb410d1c5f3656908538ad8e260597bdb75d79354cfeac4da7a194866134a8a35f8f7cf8c7b083e4a469af7129c0d51ca87079829c851d015b50c831fbbcdf5bf6c850b300dfc45fe33cb24bbd294bbb1645b843e9923bb78295c8b177e4603da12b8172afed3f6a3bd1dd120adf3a650fceb22a6c0a4bda789a1598a8070a699a222897054be89b255f56bcfc9916f1d991bf0e83636da06b6f575277a35d863e54992e19af5726c1d9eaebc0fc6d84a9b3cdb8979d974489839271ba7641a3d8f9bcd23782f11f8821c09b70a5d11a734edec44d9a8ea9a3197a084465b854e8a9dd9a58c53ee450eb749c794b6e684920e901fdcc94b421b0e45f87f19e0d2cecea898e351759e192f387f57e6fb8c1ccb97f4f58194a954f309d4b407ee207dbc999d0402b3cebe1214b4528ea18cb30000d7cd61aa72ec5bcfb10314632a2390fd23fe84359e01823029e0f8589f0fc35bc2b27a91c5f6fb7349af98678dea40a314f50957c88bffe227e52ec239821b51226c2a20d3d69fcd2c9595c583ae52660d0dee01b98d42a8727f9f73d7993ffdd3628bffa0e5834d67d43805ace47df12e02663c435e05638534e18800a4697924c4c0e5e8f61ff10558ad10eb1324404ab0726088b25a625a592442fb47379b096b5c50b8dba54a5d9de4af83c6d81d09cb5df052e6ace46752fac176a0e08da9bf5e71a82a98dba85d3ee8c866714e02ad0881520a70879a1ee186494d054ebae6f45876d721c4708e36772a114b6ec205c66e0b3ffde585c0f9125161db7196e2d7f6b7cb017823d52181eec2317a4126b9e6fcf850e56fddb593ab8e6469069212561a6949775dcba1dec50b4a673208ed91d365e47fa88559180e956ec231a19a685467385fd428f9e84f5c48e0ad9625b9afbe26f80fee56752e03ef608c3fee1b00335137dc559af474b815813d4f95ed37a1d1c1cef4401a10c653d18227c1e414ea57604ddb849c6a1d4ea8327dad1ae84f2e14cc7df2e83c97c36a4e844fcaa17765f4f3ffb502b1f1303bb24741130e53465f93e57baf06da9a2f0f9fb5353d509f3a55d94cf07a570487417c148762cd83d641e2f590ba09a3363a30508b207d47d6296e7c76ed2fe9bcb7fcee93b7e3c3cc89fc5e15e7bf1992a9cb9173e7e15bdfafcd355cee7c1cd3a594aa4efda4faf4a449f13ccc407016a0a6b67b7a4642e4064102efe66002b900fee3da2247cf0545bd313d2143ca993e9a20e7f538673c28f4474d82562fe5f21392406695cc523820e7fdca811631cd65b7a1d34864a84405eb47eef5e80f3cfa8eb4b621594ba65c013d101ed53c683dbfc0a2bbb3da26485f687cc4203d5eb3ab7edabc19a148987d3032ff6d23c25e9f8fff4ebf7637ef43241b686b3bfae559a16d45229a625eb7faa9921eeb2cd6603e77ed7cbc6e6c5fc6739e1a1649d07f679c250784c91e2c8d7c5340a7c668506c7a103b27caf04a2848d9186e9e767ed1b0aecdcb45706654c6260bf81b7b2c9d00c493fc71f86c421f7a6da7bbd35a06146984a5971879937e421614382c3eabdce0370a72cbc6e92ae0f443f3bfda9a04d9b2890af7cdfc365d2a066a51c065b5d777a6ca5f0bdc0e22ba00bcb7b55e8060b09ed535a60448416e890080a65e73d46bf844daae423728911b9fa28b075b0da46cc80d4919498ef1ad2450b1ba2d6460a171fba63982590244bfe07d252006ebe37ccff289fed8e30cc07c524264be86228d0e00d54d6964267217a61b551355f7b5b4c8a4450660972c862404594dd35f61d6330ffa0b6ad1b835eefbb39fcfb3fccfd21ebdfe7682152750ea2748adabf3e7447ab840c87a81fa9226f9346fd3ee6a1828b312cfc4374811e25bb29aa06a69ff8ff9ae8f8bae4af919d0357541f4be036a6ac9da400187838cbadac2b0378a932f9726be29692cc48ec247a80a0ede60410b64f918cb0f71fec192f801503a4ba258726963a50f1bd25328fa0db72c03334ca7946ed0e334b66b349bafbab34ccab2a7a46c7747c9279be98d8d8eeffa4ad106a7ad7200088675f90de3087e27200aae5e55e0f2b5924b562e207f3b6046737ad95b29133e5c54dd4016d5221857fa7754245108ae4ffb6f3f03f50be85df9979a66e8ff3c7dc85181e019c598dbe583941c90954192f2621c3c62e8d0932271ee66f2501c00cc63cf8cd5f74424b670f6ac5006b51fdc04bcb8d131318889dab7adaeaf9304c79d04163bdd334c7f927da0f340ddca4d17ff032fff80f4bbfe2a1e938a0529864c31d8cf2016a2e8a7d25663d3c2b92614c310f0476e14157d095a3cbd4d9b23744904c9e87dd6fe9b3481e5f972a61d122fc253f44b880f4dc4a4a83a0c69009160c63285201ee1145fbb1cafa66cf5f8eeafc481b5e10853391881e8e4dfa3f6a7d4f54a02a3654732bf5f0da86aafcc31f06e5f561430bb91bcb8b5f73c783a854ce7f7ad2cdf890bdcbe997789245aca143f33256865118e02c977b58191596f7704a116ee8866ac4fca429f20c5d6a0546b94d7597c345e2691b41f13cd1f95914b3543436052eeaca8b2ff18782e674354be620f891e378b856c75407ad57350f284d977b13a94a9973516689c3e8e1b80550a9b612326cbb26443cb5ab462cb9507ce8b8749ef6089b7536899bf7352d30b9c68552977d9b47e4b2ec5db7b09e298b13e766f67b658cdb97e0db0370f132f602d97e7b38862107ad771e9efac8b386ba8a3a84bd06d83d3c6bf7192afc0e9f9cd4e44e5b56aecd3ba99b8a71700ffdaaa9c9e9a23f1dd86385fe74eb615268b9b053efed601c8ea798d0e6d9ee37e30ab113a7a9452a1500b96ff8e4c7f99df4dd1cebdfd8c3ae7da122d75a52836dc123331a4e4af3711e3534757fd8b9956fb75d8805038888d5267e3cbbb445a247aa156abd44cfa30c733c4acc20a5873358709198786b9cc59d3bb22dc1a3b8073616fda6afa574d34110545d21cf4d374f01c7eeb866347b29968054d87e1355ecc8a86c405bf357065f35bed6c92258c0a334536a11b2321c77021aa1223cb05dc445144c6155292415fc0972cdc9cd007af7ca0582549d91ae824ce075523f0b15f7819aeb917a82a84ccfa915653901a0ec23c9a1f3c2a1089a5faece536d685cf88a517ec257b6274175e4df757e789217aa55006bda062e313c036bdf5fdfc0bb63ada57cfee0f19c2e1fd503d6c492e8d9ed02d3062cfda3e8d8cff5224636eff0ee643b60ebd786e287665afa1161d5f0dd67392e2943e533f671e189ce76d8aeca5949ea268d89fb4ac785da03037389ed09540221e9e3064c3a2464b442191206af7d51d16412304e594ab5996b71c86b8f9e83c39420af2df96a01ff7df8e8d5c00b78c50a849d3e7f650eb399bf61a87ecc64802703d0f7abc6f52cf87744ffaa543c6497b837f66d5f6a25be3f44f6d38c6d76373fcc17c78074fbe64a5ca11b340b4c8c7c57448e809d62ea94d8e3d8f5850b046fe6369020baead0999d01aaa1fdb92c7822db01e9a82dda7961c4f18caa5e8f022cd5277f2a791495ca9ec29594cb794b2e1dd87f5373e59f7b123fd8c0319d700cd684cb15b1fe1108902e198f22c6e4b0f03d123d5873add7d5334801261582ed23eb9d4dde12966200e0fa06146f4aa1c2719d7aa60b430ee5bb81e3e16e95dccb246d6921b40d7a534000cf79f372cfa6d6a0e1b9c76e6b1a32aafb2f4b2986cd259515506dded5a54560c6ab4d6c4b42897fe93b17c0b1729ca12738263071460e89986d0ba05c092dca85fa60c9f42e82e43a451fe67be99061d6b5260ecd8fef8cf36d00655346647284f32a5fbf81100d065ba23ec9d6fbee218e7bf04ccb2bb94433297898ea79c32d64721314639b39be8f3be399bab941ef83b50f33eb9da0febbdb28fb5d836756c40df68b45a1352f4ed16e70d18230c4569f31203f9960e1987a06b502c09a3b09e12e8e3eb51c47132d4024f6131db4b39866cf0442ed7f446e3edac3d031a83b7a48f56002c17225f48f9d636e56e9df55b487191866f753fb1cec631d855a31af3a551bd3de3def187510f001e2e40476b1832aec7b2cf11ca3cb8a8c42cc3b665001a01ad2c09fd774cd88016699f9f52096478ef363c41ebec7737c33da0f39acfdee9b3e26d43089273912dca2b607bc42a6a390474938ad11d913e5a3799a723b5e183b2b0db9921125a9c62fd8253490754d796fecd8c6944d2d9038a45ede4ececaef1322b6b878bc140abdc5ec0e54bb14ca7a6d6ed14a39faf1f4a2d9c43d62cdc52306d90d12b3c2161c62bebec0a42677e03d3a285c66299bac480a13905b507bb51e9b322cd084d474fbcc2067a21ea0bf5e1a942db28cf9ed0ae2fe6c11506eb2c24d6cfdb6cb3eb4fb315e7be0fb2e994ecfbb8b4b0e3cdca305d198ff33cf9dd714e5d6d284f03480907619a66109b879dbb5c2dc844289ee9eeaf965dbb74d6de6b640a97ce81ac22ac5de1fbb0ca00cfb93e22f8a8c0a1a988e2e461c75ac21bb71dcb12e7761d54d9aab39a3afe44d836427dcf3efed606dfbd7f12e9e95f53d737a31524eb9a5b00b12972f85b55b03ed906854d99dbe93efcd943aa86be5f5882433168db98717dec8b487ecd86cc2033abca250383e3dc262cbfb3c99451bae3ade26faf478c8dda0bbd99c5fbdb0d590210ff375df5ae0d19f95e2af72b7c265fcbf6fc77450b9c628698bbba66d295ebe3629f97c58c27131e0dac966a6183fe3c329e3c0b12b48466fb531cd5cab2ed737da83d15227e2949127a8fbbe1f014319bea98a6b1215ed98529b18f954ab7c16f0d28ae4fb5d214656bcf3ad6d0f9eecdde6a31cd2f70aab0c6d6a14da38d464843b0239ab3f9688588740590b01039c224ae215897a8e6194c6c453492d621cabd40ffe999d0e9fe2eecde51e103a9c92bc319fe98c62cfcab9227938be3cfe36845def124841ac0193e05c5299d93152e1cd455d1567f97f7ca73e924e40102860371c6923e47b3543baf5aa8723955fafb893c216bcb53503a8f53eb27c5e1d8433e6525595deeadcfe964744625c3678f54a3344925ae00fc142b28a05d7491a730534fad55ebb1e42e1127d4a66fb21005ad9fd123a493a370db2ded1d22cca332b083b27f7db60258019418b4b86183bd6e4c9564751e3d25e7670689dae60f7acda9767019af9a116ad29ecf8b140dc6d6700d9f77a4ca3c45058156f32f2c359c833cddeeee42d5913bbb16f33f441778eb0b4560f5cd15bbed442b743cf50bffef2becf3151e31b21b85df0c6c86c7a6e20640c11107c1852148f3cec61a47e8d1716039ada1875c4c738c18025d4e6c9e47eb31a7f9a286cab67e0939f54f2c923d770b4a0f5a6e1c3c256f2c5a6c65cba02f27df6025db24cb14f1c411845d147ed66e7eac1b8a290debb9efa0701268664eb674910fb7cd728949e95a70b77281d95d34f364b173a87bb4c5ff15828fe9983981a6c28dc2157e49b49a1cfce96555e77d176f51a66e6f3646dfa46f7ea1c18063918d290e1e6cbc121bf307d1de3789e215c9bf9ac6471fcb607b770882a5772e4e3d415ca73501f48754d4e76b6ef65ff5dd342130b4ac64036aa42023cdfb82065cafb178fa8cbd241f30462842e169d5c7731fb1095d884e4ca021cdb58e2046125a446826cd51c5136f6b3041adae333c83aad94b8f7dad53751fc295e28408bcb77da4d1de251efd1806143c5fff0b4f59717744c9314c9ae3620471b152a9ab0d139ed729a7b9220a2481ec213d84b26edfd8825442e34eb392310e0bae879dc2cc8e4f2c22098b934418ffa899bec366bd5553aa3912636d981a8eec3a99c34e8017b5b60aea2a6b77d5c2a2772ab6f4d8a7d156af36eff7189553e752ee6d743e7986b2ef9bcd41634e5adffccc9bd2cc14684dbce070562bfcd37298438c490a7011dc82924cc0e8b646cee14c655bd7337293ad4cbecf1b688d78cd644dd59f938fd74293d9daea2960aa08e0b3770c1fb410639a738943095fdb34c2f10deca1c337aa607b4363371b18231d0918567fabe302daab500357c519d1417c7611e366c5087d04572dc8dea9b79c0e3f38db49d17617726f02e05fc0ef7c149e921c947beeb74343b92651a0423a36d2ff0194f95484dd23de07c711ac0a93fb2f28e6701bf3556bf8f09aeddc92b04d0c575320e794e765e124ffaec88679e0ef47eb136a76e95670bf0d6d45497e2dab91a1720655b1cd9107f8bc8c2e58b286f5d0453decd9824307ca5465b254d6aeac71a976435d25bc39cdf9630bfedb31c569fb36663566b24db7448659d9b8ff16ede5b91d3b1309fa020b9f6914ca04181f4cce6513d6c887d06eaa004ccbafda03b8d78d85249b4b8051344661083b535ae370e371c43acdbc7193fda5fb3f4c4feecd339b0b56fa30cf67351acc0cd6d1c65ae2bfaf786e7fcaf248a90e3b4036ef8ace2c09099e0ba94ff8ab30e57d7cc17c12b8aad113f8444ab456a738001f9593fb18f10b11efa1a5d45d195f25f4e643f5327728118fbdfe0354de34ed4b4d437dd1113342d850bde162aeb22ab686cc3d5315f97c7964fbd1e3de06a2619ea24ad1d368d8ba186798bb7fa00cfb3b1c703fb0c0eced59abe3bd77c09f2cc40159003cc830d7c4e96271a8e1e3a5ee2f006244d2122a64757da40c99a81b82b679c18088a9d557eaefa4277585d24b14533d2bc30c95104663e22ee5d77c5a8ad48836b0cf2a301d0f9fa5374b24293b65c84f03d40fd8acbc619580755579fac3387075e23ea8ece12607fc14ca35565098e543eea73930604ae0a34eea71e56f067d93ae7cf959f7c9f463bf1556ca7347100514efe64905a9a896b6fb16a56d4b2d9807248247cf29c5ae1aa9d4d3cf02ce8d64782437b8d437319febc78d0cf91f4c5ea51b1ae8e3b4d3fb3c4e793392fb8f467abbe4d4b96ad49e6d5f5d137e6823f903f086defe770cc38e27a2df21fb4892afde6134531192ca816440da45ce33edb201503ae90da9bb1b785976035adcff6ce434bdd6de24bdd8ca9ceafb2fb432c37e36a82421090f0e911de49a96b21625eace1fc73f179cc52b9417ad786273a6f4cfad0d0f2c8e7e28d563ba0315b37b335df08017b29ccfb1f997ef692b6b3eb2b6ef7a7b0156652da68253763ac535522eaee04d5987de9b08241bcb93c2182859603bfbc2bd66f3f290210d5b548881cbf4f3922a791e8a3431db0fe765bcdfff7a0f204ef728e0f20352454b0f01a66edb7d00613ca1a03ae9b3352afdf9b6e053e0fa85d802e100930967982b4caaee611e57cdc436652fc8fd59f4707cde20abf338d980b4c2acc518fcb71f47af4e2ae435996eb3c22e387efd3723a1c6a4be93832698dd5092e427b19cdd183b8553833ef7d3b9ebf3e8caed86c4ba019f36dc98129847ceb246966db037806f599f981e58ee46adc06733029b818414af018c7b4adc63412e3ad50fc3705c75f19b7760171258520b783cc36f2221ed90209964cb13fdedbd2e6e2559eabd9166469e8abe6eceddbbdf15a77277a0aed529f81880a74115786bc7087899c1c58b879afdb4f09ab4b45fd9ef6b2dec8b1d69f19268776c794bfc50b66e4e053766ddb9489c4c2cd1e8b2f06d9c0b0bf0ac04b6072ac671a2c32812032b4e737c71f3771dd539ae327974626c797b2119c9057856491e547dc019dc72aaaa5d8621138cb1f10627f905190874679df25d446d2214726db5767243a098a44fbe63adaf7f82d332231ccaef5c7a6be7d34349ad712f279876e4a79642530489063fe97546ad3be7e885643cc47c1409a3e19de972ba4bcaef6a4a9beb58361ff485a66e9840c417312acf453005b0634810a0be3ed14ac6868f33d43c2b6f3be5e5b48c920d84c885bf77302d3ad0b61008f449de2ba558523e5cd7ed801f74f999709ea81f838f426eeb390cda5e0a777fd88b0579f73e05ab4a79dbb503e3d1b78c4d7606906182ed34e8b6ddad4c1e9e912fa68bf695434dc5b779d796bf98453346c5b0e2a8fc311ac1770555e86b2940b9426f057e7b87eca11c7ee265729a65cd04ed7184f6ef89c9b301c073acb647c8c00b0dee3903b536883fe4eb22ea22370f31366e3cd5b845e54f6d72918a3381df2af6d98d4abc6d9389ad10b873129e070971a3a101248dd42f3c51c19980ec84b3eb39dbb556ce62844845d733baf1e984956514d6a62592e8e2696a7ba6fdcfdab9035f4562043b0c5924488a26849e9565e48f89dd9c146e7d2bb2868393af25a6a17c8588d86fc4db9cf792e56a1e26c20d02cee7512ec43242df492c0128e6f16632114dfb3c127811b8fa1ef3686f884c09c5710b3748f70bd1d061a09233c4bdd965387ea6fb3e4112967bf9e0749256d70746f8e56d8a5350b41b33b8574e32bf6fe0bae77e50b566643aff7e69624f2f1ec30894513609507a1d8ccbb423a85ddc05b2f9eb829c9d8bef126759ad37342d78a711174cd3f4f8f1a95fe7010b2a4d5b3f50d82d569eb48094404c72c29a66f5221e7b2fe0d840886197fd7369df7eaa614fe460a17d0aeb219cc728099a439c80e33151bd39ea12bcab03db6a60a3dbb8ddd7fd02cba6ede8133fe24a8bb9ce29b62a2b0b402d08d05f6711975e3877630d6ad74a162a8955ecbc746a380a9dbe25809f5c8ea190ba778062563aff6210729abed0ad73cab2e70a183ac442024072ccea142c078fac97b6ad49557cfc6c28965a5d19f6bc74d9f2256ccc41721280de2677ee3bf42c8abc5f1a9e830cd0e3b9f8bd5898efb13eccbc9da39fc9010b8d21c811355ac163f3682ab6ea9b01ec9d2ff0cccff312db87e9e6324d037d1d10922b4eee3961eeef81ab21c98632a803e26aff19deda94b8b5c51ec8c4b938316cdc84e2c5398700c0c7776d4a3b5516da4266646efb8391d090f0e1c355534ce1a1eca68f3572efac83f83468d22fd3ae7a084e1f21d9355976518f7dca8d7c5f8b8cdd349aa46d31f9202e9b59c7d4d0b44fb9618da1cea97157149230c2137a14d0abd88961775af791fce5e15a88f205b8f39d8f6e1f0e27c606a78e503579456382b0dfbd181b4803340f5a07893bdb3ab8aead7a90672e6dabe13161a064cbe155fbfc8f432db68d98ebba12c4ca3cd931b995029b168889d1dcf1caaa020eec0a0614dee44dbc2bb08445aa201410d651e6b5ebde2b3feca17d563780e31ba5d9b5744a3a9b7e4a1a20cd1f0e1f8354f7935aae0f6ca1193f7a2b2846417dffb42f86be33e5c1fec0409b914af8e9cb25af2875f5f957dfb9e76cba048b720ad51890b18cd8bfa78e6191da08a77f29006b9e7f237e81889672ed945d9e441e18d6c6df19a26e08f5e08e872da4f0e31bf92ee9ea2606162b0b427c412ee761472e91616663d9477e25bb308e7cd980b1d47570784e6c97f3cd06277ff62cc0440be16089ef69d827d83aabbea02fb79f46fb31b91272893ec14ee452fb651fd0da9c940eabd8cc9e19ac4ce22f5b475fe8cc6164dbea2f512e701a8b34201c03b4ff1ba96c69b01c26d39a2416409e37e786c75ba1b06bb8be30532cee1544d7ff094678dc500742f021a59176254636df1b0ba88d2cd224f536025fbd3fb631be1d7220c8fdaeac6c3c5409745c14c58843ee8ade00bdfb9c595295d98ad0e7b2f8a11f4a108c8bc47e75d382a9a1b677374c8003ddba0341591a61ee7f4d0e02b8279b0cfe98dadc7313acefec4a861c9f99a90be1eff609741f568e90e05e0f624149dd1b925833bf670dad2760be2c7f301a00b673a1b2a06c0d73d06d86f0336e7de3ec37f3746c990d2fd97c8a3ee72039b5ccca1227b08be2d108bd6d0b6686c81043c551bf7d34070d59be3678d90bf27392e17148d5e69e87fee9dd4a83cfa153cd45a7e45dfcdfc1c352204fb01179863f731229a7abb198a24c5bf009ab5649d1d8e672640800d3f5566a22952943b1b18c451c4a05fd40355c80957c75632fdcf7f786adbee6d62b1a85c4bb72cb6144285c02ccbe6ae2b0fc98455d1a43dea28c38019d60cd82bfd732f22bcaa09a8feb62d7173d5e52f84c0301098e3d912155529d4c3ab1fef2f6f6ddf4f79b68d83c440d669b94f4a821486d21d0dc289f3d37083daf13dd8ab29166566ca2df0e6cbaa461af4e4cde8fb2689e51487f9a4b2196f3be442f9a646329b3c411ef4e3d43addd9deefa2fa7bbb2fd99858eeca0fde0e0087e7797bc06a2823735ccf4fe58901a5a6d7e7af72db7dbdb3f9f905a57147d9c4e10e2059be445b301a2a8678a2ca28f3c5c14d63c8b866e383228e3a1552b4f1274c2b56ee355fea4df6189685861b7ed78904eea3c8303506f495341305e745aac96baa4b74997e5feb436ddfdb2f8ccd64ae003d4117a038496666011c1256b228827b4cf98c03ceaf556363b1777de1425d8f73fc6856fc37ab48c4be768a72e72b205708cb02a4dd2695720a444f6991863e0e281585e3134fe471a959cd8beaef13dc26b58c0c903a6a4c3884f55eb010d14559965f5acea9051293aae6c46b3f098ce951d6bab2f1fc0a544f64de8b95d1efae864398360d13f2e2675eac088dd3c9e54d2d32e90232e7976e5ae5b12b08984bf4b221b0c3e53f7fd3b3d638e23a556d0c479d78b9036d6533c0fc9a2ccdb57dd5a3c6fd5460cf7158e6a0f2fb2992ecaa3469426c682b19550813330ca8c607d8f5d055c75c4ce6d864d2238c15f1fcce93e5fbf056f0deabf089cd5e9ad4dfa8bd0e1371ef5259e523674fde8db6087289e85a62de0749f88087fcab3ad59a2b1ff8378aee34fbf761f5c09a2eda51185375bfdc229a73a3c2457d53806833000317a4f8a4a7655f0d78e0a9960599d109cc85f86cc9e8417dcf643b1760097af8b9954984d8417cc7d9030f7bdf229e9861eabcee9e8bc4226d6575ad5d38e3ad128983ca7ad830567b9847468271741332208e210c38cfc7c4e188e1c4175b2416d7d151e22a020d8d70ae884da8c7f67802dec0d03fbcd780b213308581749833862cd226128409b0c0d77a62f2e1880ad6af1a9f8518eaf289ea44dd057399f112ad16884cd39e96a44458e7e8f37c9e5253b83558fc16940ee8bdda7c268ba5bc0faf876b2cdc1ab96eb91a4c60ce960ed95033c5195ecb6fda4359f17a079875839b53a0ad76335aedfe7100ca1d68bc78b18ed6c5dba2ab0708e5e24f6f89fddb0688a2bfff69234c0ca15039022e0f6d55397c710f3dce85df691b2385c3e909b802193e0fa453aa6968a56c445ae0b06ef0645e269e730fd934dccf12ad829bb09f034923cbd39f63b0c5974b33afc76af5c5afa191866ef9d9b9a5ad0158f681ba034a99fb81b672056634ba25e145667935994bc263356f8c6e405de81bca4d3d23f9ab6b310ac6a21faad26835553dbde627f868c7fcffe09189bfa3fea0928f9add29fb3eb7259febf47b4d8d0b5d5e95f4c9f4e6e63dfc990c79fa4f5e6d37174a78dc1a9c10fc3741c314518fe941ff522702e938378d1484783c291b22f84d1644bc7b5fd0f88b3803ca4ba2dc7bba85a38be0a31f89e55b2c43ac1c203d541b6c2d334f34dff74079ee4290f3a608fe580d9ee61d4c0cc5d72e3406e8b0d614b5b1e108e76171f7a13b61e62331d31dbe6273e4bfb374d4a2575a4549a9d568b8cc4602fba89ac431041e4f8833094deb6cc8d0c25a2958656fde1b6aa295df6147db651bbb6e7e11b27e07331c4537b9c81c0c9ec622b79b638391c277e6dd975f4cb558e3377922bd9e3ec760d59d40e296faa0e310535c926df7e8f56b22f2cffb2259754a068030262cbddfa469287c890e1a2e5fd3a6c7461c5b82a0290af26429c0ac2ee4ac13cd5f71c3c828087d69f21d3f1139984678d4ac4593bc0b6a3eeeaf1917520484a8ff9371a9961d7ca232a0350702a3456e57c364f51b7d977780c93fd8f45590e072f2e99088bff41c8b0602580117ef15b8e2df316166776d6ec14590bea7246279c27ab0d17447b52ce450296c49ecd161e46c905a7ecba6f260846681086e1447582bf56052967874da4abd6f8a717f92f75c5849a7720d4cb83f61021bd5fa09b432c61b09c7b0764e015c0dd56176b6fefce27bd74d4d1acfb96d05f0e472f474ea9cc1a9f02a4e5c5428844d020ecade7fc7c0d01f2d1efb99dcf2e7c8493851c9e8d58e0919c49944027d5aaabd31218de652354c3737c8e26c61d870c264363f5a1cd8b69c6ab2018a0dade8e5d0cecc9202913fc649a86e475a170d8265020993115ed5944420a6d8ef4a884368ef4fdd873b1aba938779d17854d33fb8343d8f0eaef718c39a177b7c38d9112c1abe0c0438b729a54aa2b119e8a1b73bb2173460b64b0a49787c0f02ec7b0ddef32ab3c193e50dd420fa669d491bc3c8105694b50d713a797b3bc6d14eb621d24842197156e8330b92bcb7f55788ca5ba850a60f2452198fe6e57186869bbcbca81eb38e0bc7078f95874b5acafecd2500d26a04cb9a11f84683f8f14eac60257b02bdbace53b9d297cd61613d861443c3874cd88818f1d0a89957875c7fbbaa49039f06ab88b7757e7fb84ed98173279ac2a4b94e5760954ac4907ceebacdb319174873fa50204663ac4474dc9484088d7740acf489da82970beca23cece1edcbea2e923ed72eab02205743b4b1ada88c67f2f2bf767e0472078aa9c6ee6e4f4f8a92cd1b52ec1d43ff76ff822f2aafacbd986f737eb84fc3d659c6ba552ef4f693f615429884af32b11641a4d2e30efaf3ccc071f8fc01a67831b4e4e6a526313dda35f4574d3b8a451cf670b586bb47f0428d330779851953ba43d491358d05102d6a41472a4e73b876dea9be6bce71c476fc2f26f0ee345c3d9a20be0ec0025cdb56c64c44ac8f3588bd19e59e197f3ab7381dd24a4f28dcb2472c305efedae52329b30b1111ac70d1adafb4f63c3545d43ecd307bdbdb60459dd1aafd17dab416ff8a6d7824e6073007437cd254efe743ae15fdd3ee2b23c8849bb39c2ac49ab503ed145bc1c02071670b2e73e5d5d09d699a85e855361a727fdc79cc519ec5cbd9971ffdb965d8716e245b6a58391adfe79dd49baf6281ea6516af599614025e875d5ecffe20fc52f029af7d9c6c6e4576f13296d9a53473c82ef5c51e93b97abe70bec2dbc0af835524f6af20703dee5cf2dfde76e58a605f7ce3c213884dd53044b1ab0fd64276c57ed31d63b26e2a30a1be3b939c93a1d99cc5b13e6ad34b2bad4116b033c932679fa74427b7648350634ddb15fc1f50b9ad7fa43fc593a5a0e36d5b50f51df068411b8101f24cd6ad997f5d23109fa9aa1134ec79dd4d72f65f7437484bd9b276a051a09be9e1e80f9469f26d49d0460a395ee1ba749e400aea4fe9ea534093d8e829594b34a898df4b2db70cd5da31502af281927a4b4e8996983d9ab6f49009dbca237c0aa2cb7515d15fed2da3e34cf51462bf26694fc7baa5cf51c1a465db69d9f84c649e9c7ac15053910790cc08e5656cd42659ed9588a54ae194b47993fe21bab4e9499c2184c471d29a4b22041e66dfa5060d49424a37841fbb25ccc5e1e3a51177d27d172fcb118803f92bb71536fd6b85299ed15f33f5fe948d412b9dba409ba429fa2e72235644269ae9f5f83b06e4a7ef862a24dd128849ee26d81095e9decba7c1dcb966802d2bfe0dee5c8bd6bf7a8408f11fe889f8eb99fc82d6f0f3df2728940729ba97565cbfc7ef721caf5f5d0210af0e4fe9ecd717a743be1bbe3860deecb27ec6a523fb78b640e29c1794ad161244d673c1e7425df26c8967433d612b486ae05e344f0c0bf4b08b469a6ef964c5ff35948d45d030ede9faae53ee1431ce6a115b9d96849f949a4807d13809a9ad4c8c699308974ebb9b31ff4ade2c6f49fab17c8719b59059763d14e93d75ae9bee3ef87f744b1374a0adde2614868a1156985eef2b08441156b175fe10ec7782409877dbbd16c61709e52c10dd66c9f1f995df4b986f4955dbe59f03fb75a3b1ce14bec64f293557213b8bbe5b68bd67745fe349e1b1b463c46921f2edf464d38764cf5f211173618154f6fbccff9cb3bb5f6ad098f481576336ed349c7438190d9210326bf2c895b47476e3cd133df975c85ed8d2aee7c492f08d623a3cce528fb9b8c6bbddd80a40e228599eb1ffa5e5b39788f677b36ce980192d4e3f9d193d7e6e53a1cc39eba51e7ee7dfb2179bf92031ec800ba713cde7107056dcbcd313d175dd1ed71668d70a52453f915c73593f26212aa4495900f43851808841d43f213ddeb1865387f1541545f46404a81bc04e03ad6e217647555b9af940737997b91995b09cac4c5f4944d950f7276c94c1759b047998a68185d69bc4e1df98396fbc0355f6a4369ab5f3b43324f6c226ede14a04c38b7e8603267f9af5c581245858cf7064cb522b8995e3f29a2369fa6be1a90ec258ed866e3250d7371a19e7099e243c5b5406fddbcfc389ed8f6fae84651f75151f30a1dc9b7e1b945f61df0139c5aecb73dd996697d6e981e272c873a0eda2f968fa7bd75392faa74e4eaa220ecbb4c3f47229a3469111f8b61b9cae203242701885379c1e0a69e1bafafb6c7d7c22125d9c9ab5381a80ddce6fe659264bd8088ff073359313b89dc9c4e1966fb2db2e63fbba08b3b56e4aac105f81e90772c1f25a0d545e19a6ca10e9d457890bffa5c312c1cfe3ae8c13a0ee4b58190a7f62111b64c7a8eb14339e8c86c4f50636ea37273927995eaa0f5be9c5e082bbd29cbe68d24e123d13de52aeb636c8cfa39341eb5cd9cf177450d37a401c577f0ef43f4b18239b11f3f55fb90d5fd7d9627c94d93258f285fb57e4d0d2563ffe83e8de1155857836aa4e234d71ea8ba56f2a5984586f6ba82dedbc480daed650769b8f0101221adc14fc2083073d5ed013aa890cfd64e89a5f16bfe6165464843c785ca67c7266b9672aadd3abe54310ae5727b1c3c107f50ed92092d88a1af43c9a7f857fe3f75f716a802a492ddaf62dd44df857dbc306214ffece1615145d34d74bf1a27d2181e97273d2754bcc9839aba36a15e3b8715c555c0fd83b0014f91ffa9a2fbed7dcca5a1b466ec63b872586d801a6eeb88443ac5f2a2bbe65800209aa1628d8d452ef4ead0c1c80617f836c165d64b033ed110259ad8d8b336d1b7331f14ca5ef01dc850f5e16f1747018b368e04ddf4842ea09cd925e5e9a7331310e47591c76a9c8ad554c1e986203cd74b1fb6ed8bad48598cddda382092d576cf1800a31209b560a9383e85881745d91bd7c9fc2755a1fbe55e770a79ddc4d175cbf4bba85edc3eb478c7ba3bdf0aa2b57d9028053d2987b0ab5bb93b3a69d7f1014e5d363e5bf89baa3b3603b2a130d992ab0e1ef3794ed2e78282745b48dedb0ff5c81ad39125c482824b2970523991a2c3a86798572af218a383dd517baf4649d586e4d37b8a376b7665a4b7928665cda38bb8fc7edb5a7369585f1fada1531375fc8eaccc44336d32c967613a28c501fe0754fac67ee3ff0f2ccbfb7e19bf684fe3275cd271e510e1d42e1ec1236cde02aad4c99e6e4bcdc65e700617e3ebdf8734b5240904d636aecaf3f81c5e5c8903ce430468725c8acb806cf556e0db92c1f459bc433b5ddecc059b9403e86484d97628f84994a1fc06a6971506a9241519abd8d3984fa2eec4b674251ce64ca4b4736039056d7b6707b3ba4fd2c279b46e50878f6e01d189ff1a59c226c120a998af8a9c08ac3bc4a2d5e5d8d9f5c74d8f29e59a14d6235167044de9e03f4a1030b8b32961444999a3063877413a842e529c004001610520679bf8fd093e97b9cba32b06def71aa87b834d784716c18dec4b6b56528e7dd9a25f6844094b5e327e50d23538e17351b6058392c4c0297d0ecb246e66b49d210dd4efb0a070972417b426f7ac715469a1f1604c1dffdd3a75c851a2253dfa8c5a91ce6ae83fff87a7ca7f7f34dff0d5a34a9e30a872e77f62d340f7318b6dd8ae93f340318e4e9996e9e3526b0de70ecfe51222a3e82d7eb97b471fd06a7ff8588cd54a6be05e8b1756b4b6dc0fbee392d2ba90d3a1a6239a4492166f42a515f45895a63250907d75ab1ee091f79c9a8f51fca8b4ea59b50e797d034ac33b666e0771e50c0d23b05d2c1d3aef99ed05b3b7b2cdc9a7b65618b3cc1e5179b8332945c124b4addac4fb3e7cfb23e503a1b39713c4fa250a8697ba1014e38fde0a65d27ed9eb2b3a62748946615218da78a99771f77d404fcfb84ade68c72a13ef63533112368c2aca3b990601c3da1d87ca58b2986794ae4732e3d84fb0a84f5c8b0871eef132250f07d2d1fdc4513b14eedafff78acf5395b4abef05a1ff02cd35c82d958c2222e15666c1b7358a286e6f6951a898f314a1eb4a7485ebe5affbde7b1fab09a243ec73d2819a806951223393eb699b7df3096c01737ffd6f07fa9039a788a1ac5e9751e8039e6421914e1552967804dc5b541c18d2c26f487905ef7e2078c29a6e830b9e7a513c6043623a5743fec4c83d74fdfaa66c0c7ddab76bfe8e9d7b7ebcd0842cdc2653a5e93a3101d57a8cc81ec4f73add1091403e300c279579c9ee47bf1c5ed992a9152464365eb6e67486e1159d8d2010efbb2c0991ea08a245fdd712f09cfded4e23c6db5a10fbc10594b506e13c7fcadab90ffa9fc06fafaf3ae6ce073720926e6ed3c1ef3b8f4ae434180596a32ded08377cdafda8c32a6a6a6beeab416cd1b133e5ec517b6cc3bbd228c14c093514fa8f276285135ba96e5a8fd6034c9fb24fa4e5f1b75cb084c2f3919df703da465e93ef9e09f95db7456c39ee202951c7a7d3eeaa890c2f174bde838cb52dcbaf4e1e2539776f3123749b046dc28607e14dd272b8876085f23212e251afea57841bf7122348078615c8a53cf8185147836d93d38f3bb0ae4862580b35d86a5c13feeab427fefaf92b2e3d2b9f11001d455ed5be260c58e491059b081328bf27cf9430ac709fea5bd8aab3ce1ec31832ce64d20aff60cc0d0ffb07ad2a1eb4edcaab5689566cc5c08984d10a6f765c46f20a43a24cd3bff4962b6e411f92893f4fe646904be12867ff50b2e7b76ba3f781ceb027ba92e1e37fbee393ee633251a22cb7dde953a517af34b2b633750565b08a844e95f5db46fef451aa26261ec24900ceb66c0e400f6a2ffcd3fd832dbb12d17ef73dc1db27df5830fc236c79ed4a44f8135b377a9dd868d3296144723f0943532d1db930f140557675228c0ed2034435518438d1fa301da925e606aa5398f54b2948e7fc5d7249f2f81be20167cebfe82790732dee0418fd42adb3619bd355a7da6ab9d61cefae6269ae2b90749bee5ff5acae67d83843e9da24d52d7d087b2b0ee8ca44625cc956c609df3ec8f0e5da29ca0afa167d8a72665d0e437891398233c670cde239aaab3d2b6cf295137afbcbf050790c5627b9a5fc02009d39b3c5a836d654d79e778a03759cc364a660c242f3bfff7b989341b7104ca14bd301c6599ecbb59fe50b44fc8fa1e2fda4626e81b33082bf201b7711db2baecd2b9e8a62fd4999b559d0f9c02045c37ad74707674b546ce713a312b356ff7780dbc0613f7b5540940e25b739d6580c90b6c97a898e1abf1dfe575e866e3769fec450cd8c73372fb5b94ea606355972ebaa493cf2b30b7f2a362f7df6fa0ee5e9fa3ffcc082c176519dcb819d09da450b3eb77c293dcd413b9432872cb4897ebedba72304cbb37718e5a2135266ddd08508ab8bd18d784154c1c51d0cd9b80bd1f9fd290d001361fa38ede1c678d56ac17624af64cd398fc6b3e16c4156f812d10e1e18e16c27485b808e885473a810c1acdb47c1b0f160e710ce1d187b916d18932b5213d81b1c8809f8c5868b929c0308804847850b2580a5c19815ca0bdc40b434c498343f1e680c835b3f0ce09265a310577c12604cb372984d9ab3b55a5b42cf8576928a8b39cf40e189a6d503c575162dede7c33158fbdf7864178bd7f976d82fa6935efe97e6c2a823ae67697caffb8149607db45cf792a36f76bb13cc070afa8235d089f546b2c02eaec8a0f131b36aead8592265e761242593193dce2329236ed52a17745c5d1cc1c6883d18ae9ee834c1dfdd7ffbe560989ee3b9227db4f16866fa0db72d60c652e9ce1348a3965c496b6089b4e1a9e2cc366fd4cf78864e1cb97d41582f8607796b215c60f7a519a3318f1949ed894567b85d8dc2a3bea5f1999170565e974ca802f4a7e197780757104831cea9a6a5f8289758083436b231123e370cd0e75db3c4a42d9c746e7e059d11e0507940c51e049f8bafaf7f8fa8221bd0b8cf01edb9e95f14af9fb740becd443336ebcc5424cf18ed97211393a0f417a94d83e4c78befa74999b1e8ce759b541958ed10a1f8a61dc4bb37b9edce3e26c73e7612fe4fc9d4c2043f3c21ead5b711154ca1d82e17c4555088ff6f2dcb500641a8fa5d2c28725d0dd03b2a6027595f8f73a4c2c6e69b841212d3c50575b432d8d58258d81be1a378dca3fd197734ea09381fbf14c024ce9de7ad1074d90240352f9045494fd67684fdbe0dbe10872e82ec9964d2c023dc99ff00aa853808a162c54906110b7ca21c32e6e25c0e36f1f35019913776785303227bdc849fd95d9a2a39fe5f3461d3e4f8b47cecf8218fea4d46f3c1e6df6cc9278ce1786765f5f3646da7ad9386862f8425f41f7c128684dd5f287e2c5aa02b701000cdcc12c6f764b8f2263303f4eafe87595ec329a1be800173760a8ee77fa36ca8b627826e97a041647e3e2e43e2070c64f54ec9660929edfa5c8930dfd30111bff642b763e1c2b23d2eabccb98233ed72291bfd7b748b1c83bf22d4e5a31f778f04dbfeae372dcbe9c2e3247fef06ad36209b6949745f86fbc66592bbd45895790fe4906f6d4f940d15a715dadb3161011c55d36dee5ac6de18294cf12183d968baf35c1a82e50dab9ed7d45a8588d6eceb66716d5a0612f976aac3912184cea0a22714bdda1f7d834fb5d662f28d6ecbf19885e56766dc4d865f5634a154286e336ce884002b37f8b0194e0fa169d48c11aec3acfc4274705d8544812ca74082423be6e3560638b2f594886da1568e3098b34a2c9c4989ebcbeba2dcaacc69bc50df9132a8dbaaf815861f518d610669b571ab02ecf5a667468c53412304326fb77f2729dbc1c0b4da1f76ffcc1747e9918fc8c196dcd65a7d3d6b8211ef5ee6cf38a821b1a4f0b09e57084fcde608052771e096564c7194f5507dcc4224ca7a2b640e8e31b8de543411d6d2550d324cc098287daf22a0ecee4cf22972958c0ddb3c8c9053a75ad54e6f8492061061e923cca8c3b9f6f3598fbbda9c3a5df1402a85cc8f673a56e946529fb12978172d5535947796ab4bceda344a02b53ae58a3fc53016725f7d20293420f55b82f66585f786e724c4084a65ac353575644d7836624d191012666d897c99cad702673c7239e428d09ac010f4343d6a6bc286e3679a142dcb98625f7c020b7cc57d199f36bbf939c48deb165488d13ab62458867222cd527827b6aa005c0ec765b43cd5f8c940994552a66a46c6ae999f65f9367eeb675081a441bbf98a1e4bd9bf247e92f8e5364862246066f5ed9795fda01e70f6d27bfbabd4dab4a90171c85ebadd1f3b9967ac11a62813bd8010e049058d7ff388494e8bc21b3282519b9cb4788dad55628bd6dd5c566526753d6a3297a67834c4fbda4b3cd11fb4681b50621de425f63633eb07fc8d3ebedca2a7d2405df4b94c5e3a5eadea2b09fe338048e1a416ff86da54b7a53fff26d258794197de2e3ba931655bd42667345236dd3aedd270c203e8434e0d0e8bb01d7c927bb793bf49e99dd4f70d2beb2f8b31e61a18639c4c8093c9e9cd9a6cc045ae5f22f485ece9d0ed4bc428715081c9f3291676af8bb76e2bd65c442b74275e559ec224bd9869a27e8ac3bcb9ac896016218875b75f0115a968da7e7f90057ffbd4c53d1ffb8c158af2d50269d3058e02d0720bee3ad28531cf05774685f6d6629ca5e4bba598e9366e6b8fe2c2bcd8a46f8a44584a204a09b2912623d4a1a2c6845739edc93b00e13645a5fcc57e720e4531caa33bae95642cd1f812133ccf19190915093b2f7b7e5eea329817f14e580b5ef98cc5f4263da7948bbb944b4ba0d607d66dd6279a8bc28380a08b634498c1bc0ac78a9fd9eda5198f1b8b8a0b2cd6790415a38d0b8a04f7bf881d1b90451538198dffc9c0cdbd0fa21ad4f2bcea4a048de8014504dbed88491ffc57172dd9102f4dd9104dbd09bb344093aad131fc1c91f68a5a90fd0d97b0f9505ad5f83665c218e1b7eb9e1f5033235e6c791e648077c31a7b0e5daf52429888ba05b0932808a786c04592666f7aa149b776686ada3beb089f22092ee6b013c879c258e2e6444bdf652c7dc39dc391d20efaee00b8735ec94e1206cd4804ddfb83ed3edb73bbffef8647c7ad5a4f8682580add4815b181b02842d4507766e00c355a6a1b61144f83007358fdbbcb6e0639c5e8060543428c1a7c6fed28eb1683c1d88655dcf5b0d9d20df0ea569ed7373aa5050c28414b4506ca019c5789845e96d0a3d037014564e271f04ad78e7964cc2808b678cbf3cf7bb3dc87fcb9b09d4b30f1698aa6f383207d217bcc7582257849f2cf25efb2fe99040ca7867a183f80fa55d530b03a1c7709262f3fb26fd2f80341928aa0101da1cf85386d43ffa91790682449569b3487f8e617da1220625f26e9062f75c79fa8c489d5e20e6abd1b4b09c3f1255292232fbf1397dd59093ae34197bac2fc195d723909b4690ede8bb7266ca064d6c68ed2f0737c453f3eacd71e31d76b8cd83754feebb99a8e10cdccd58edb3e36bde025b16c80ed2aafa846606852c3f12fa790f6192c10895bcdd100c91728b993f2a5ff25f40ea023df6e564f830d4073f82aed82e6ac60bbaaab68a54fb42021a035cfeaa2d884ed452b9cc8f8167f3b6c99d25ac6bab7e826cdc930efd85aca483f7bf078b290c04c85ae34fff885f1c7407119214d463a132fcd461e6ff1689d772b22b2d187b2cd6dfaee171088a7adbab78791734058230990847a384732f92cc1f02aead1ece44417bf23bb2b83b9483fab5b2fb626d215cef4cc1dad7ad4dc8d6a11d0f84e48e28eec0f5886d79740ee3807813439a1d49dce7f1f1c7cec0330fe68106da62d64a9db298ad77f7420bff147e39e6a7f991a93a6d3dad55f04e55b1389f524873d87a4913b97bcefa902b31440ca04e15d8339f8233d8751926e3c51ee3e433fcf37d4d891206b93dfdf6bf49ce4a3dcaa531efdcf648095d057b6e6315d84bb8b615feff39dc5544cc4c972ff1d0494d1759ce2bf22026795468116b5c95020a7088a5a9d2229530f464f9046e5a6adfa5d312c083324f6503f9900ca1cb42a676082a9d668bada5d83027a02db6d7d7767656021aaddda6adebaca84bc8bf30eee6014b6934b324aaf30f171ff2233a7f4e15a4488f53bdf5f0e8182e166241f93bb62339550655fbfc67037444b186d3d8f3270f5ec99c63a3ca5312c1c06247a912967f39854e668ca0ffc16c4f82e157c596bde1c3e2d0850bcb4fc18759b8700afaa71f1c1bfda2b98d84f9075bd08f72aea0f505b94147d54f0ba530aa83cee013b444bcb324bf8c2df41bb94bca99cca1caafe5dbdf097ecbd33232cae6984d99af62b248d59e37c4f06487b0f3ea29ab887c2877128b57f89682bac423eddd190c0687382abdbd757c7e4da737b3e46b54a58ad717abfa0c2bc7838750af0cecc8297645172a8d649764f60f4f561325097313dc441a830e8cfaabb7a0e8eda9d3adaefa96f5574513e4fc190eebfae1e42cc02ff3766fecf0f7eb60379e2abe85b925166cad4d6b3e0725ea02f71bd0bb923431bd7bd7e7372406d585f3a8449eb89beae1a7037f48c94aec8f1cc92d4e596fb96b1b130fd7dfdb0082503b6c7a86800f9dd32141560f62f6213573dd7add10b9c4315b9304dcd7e3bd8709154698a917be6b6b046d63b2dcc83e7fbc8e0f49b7f8025bf898a663c039a9e5810c8ca423ea253451f54d0928087ada75d904fd8ecf7c0d7a4a87400d53bf34dee9c62dc97995165fdab910a80972a3ca61d0ff2e8d0b719fbf52da4421ff4401ea6ee8ef6e7a11fb872cc942b9114f3c424bed5ed5a415617324129dfba4fe8e50ca22b9b8cb3b0f988c7348628d02e3827e59779598fe8ea962585064b6735895d2a7c6d147b6d296e2035415a9577bd867edfd48e8bffdde5aebee0993f5cd9a3bb6b6095e1c1502aff28a93151100a42094bf4c6a46389729ee26d880ecb858645ffefed9830e8f85dc2c7b611c2d4454dad183845d57f3f829210edfe84acb2a7211f45b224980d7f1f37dd31390ae9416dfe9a14b8a38d5fdc044f3611b95d1f11d531b1c5272b2051e672e03bccf5134bfd4b4bfddb5a289bee2339b085df5b6d61a92edce6b6e2dba709b8046a4207aedaf404938c253eea613c7c541910906216d5da941113beda3d1f9b7288317f0858b6259d73057a50933b2c714df7c19944c7fa262f9cd469973d4b15c6b924a85f273bfe91329ac826dec4e97e821328614bb4db7d041dd1e7479b1531275a40bc86d10ea50297754669e23fc949b9b6582a74e4e8748454ccf0670e81f532d86cd85cf0c3047389a6698e7bacc44ed2fd84ba7875c76e00ddf5d0ed002e8235101a846c78850439b1f1d040a84f5293783578bd09b224fde7ded6af5c599bb9fe61987ee1390dadb27dbe29c7cee171fe65015b2d9a203682427dd1d9f663dca26358303c602564c34c263eb7bc4a32e0c7a4affaf3132c5d7f6c2d6414f098866cf0efaa59365c574d547db9b452f1cd4d08319982f5e058ac7edac46bff33058f884f679ea6c96cc18aa097036540a5e9483c0cacd496a3ed3f433df6bbd201f99a9d51d340c66f2ac3da8207e72780b801f8aadff5adcc45395b6d76822ebb510a5bd6ae3bc23b10698b0fce3615e79522afa18ac83bbcd0a32ffc82a45883c7a60c537f0590810c94f954688aa1ea94748844a878187be95936bec1d537474291152c2b0dc36f8c55ba324e06c6d33bcf3e9794b0e43521a61f2186a700a2647f4adb2a2aef593b438357d3e7283094612b0b6333eb525d53c12961e5205b23ac34a2ff3a03dc65245d14c1431c8b9baf546304b004c7f49c6d434003fb45bd597c97baf119af534add92ea8ed720a52f175a39a5e29fce998c05cdcfd1c286c5c24d8bc97c5e2e99c680bb7fe99b6da5541ff28cefcafcaaae383596f6844f7414d7a8ffeaf5d1b35d202c1198954bd877dbf01e4f435360be385a370d0108cc96fb6af5e67396690ae192cfb7ec5ff25cebe0199d5b380ef5e4e2518e6e4739eb7c45778d433ad35834cca27af4b90f60a365372251d4c7aa1762112cc9d06de5323c3a89af763ce4002ff16d02c95c7881e810da0e0f7c96e4ff2116a2ac986e19232bbdf62eba43b7dcb5eee16e89dde996bf88ef0660b660f6ab45ddd275b3fd165d17fe2a258d1bf2087f9b91d5370d1e71af34c55da08ed72189044ad0022387cc9847c006b053df4f49c013cb63bc1d7777c6edcdce1e110a14f8d340e5ae21d3611658626a9fc90873f403dc9ac1da9ccf7a193c263fb7dcde692aa835a288014dc71dfd0a10373e5e1f5e74b0b8abe3fca6b9813094a342a8b5ee6fbb04a4930d737b12d141cbe3fd79c466b367c9173981aef47e1759cc65ab7bf272e3d386321c87bfe6650b518e7c98534d1634b439f00922d1b6e2a6a286cf624b27f9b27aa4fb0ee465850991ee86c1ef4b88123b5dd74ac18e4add67613a69d4df5f147b0703c6d05d4d4799f9ad928d9540ef77876fe9a83ce6f30e6f5054cc77ca1896f428e8ee1724efe645c6f22d6c45057b7615987b1900b96a0277d53c4e9b3099bc089385321e8ebc9b8618001798bb01a6edc23d4bbf841e22971a72ab26571a45c6a04c951726ac11fb73442406818ff938d32af9e10c41e7255e9e577df059782a0f47b1b80e07c05eaa85068e11639a65efee5d33713197311bb4872a7dda3ccc5bcb2defc943ea71baef9713d618f6caaa138ba6809fb0f11f0917db8c35a49d99e63be1db338ec6065c4c5cf92062d163d507e70bcd24afe35a6c1f4809b3872d3e543e04d663cdea45c41d4ec575abe1ecfdbe6d6bb61df42ddda250a020d40df199583eb4a2bea02326fa7d2b5c323720ce9a9c6a9d5b9b329a1e6e3ec1ca9fa5c9a8f724099dcc8f42ebf05982ed1e61e58604d2cd337d5ea98d352f7703418beebaf340f265be4171d910ea353936919741c7218742f18a8709e061e70ab5891e04b29504de6b76ae1ca67ef794dfce54c9b571a06332c6abd607a7a653613a8d9931b40016a98a731fb058a68554e6a2bccd32684171a4f494019f7127b2405dbff8e087affde521b214bd3586e59292c7e92e6885b306fe0a51b770cf7ebe17e64f418a87a698e7683593c32ae7123f50b6481db2bf9cc5f579f74f1c399d0d066bd9278214af216b2fcfcd539f356b77d7aec8f651f17e739c821be70f765294733972b61205ff20f79c9300c85b96ff2eee274a8ecb6bbd626935ef0710fc32258694c7785ce29a45639738168413980c502606fcd1658062099cd5f112c8c0dc2db6ec4dda062cfd2c6c166d1be1f8d89474787c6abd56db11eccf3e54dc462684739542fb7a9332943469829d5307790f422269d2d5d30afe182dbf6e9c6f26a523dcb9a551550ee4ffc80f4fc71b2a9209dad81bb1bfb3f8e42a5f5cadfd9834420557a6df856c0dbf0576fd20925a3aa281e2ad17ead7152ed115d2d724c6526f633e8d638f62d7ba3cf92e8a6490e230e34d13e54ffc7c5db106fb021250b636c40cf4799bef26d6361d06921a08b1e9129663f25859880aad34fa054aa846932b2fd1263abea10157a5fa37142aa2a3982d7f0e775f96126084e57c2ee1d4d7b1227557a94bfcdf3a29047c62e3dc187ddcf59cf96e675ec2f875804e0c07e87dd26f84b457bdf0cd1bb905ce1b9fbaea1e0cb201982ed5b3b515b26ec8bb6b5b5673d087b7b496ae48c877749464d46eed21e609b42849db3f9eb7fd7cbffd71735151db0e4a664c331f98a6effd1fc40620f84d02262d9983a5830ea8a3e40ae69aed476f85fde2624749a3e7bec9fdade64532d3647a732118baa33f5e1b9972093fdfd41b1e61cce78b5b4b710eaf983fd00cc36e44bbc68c57f64857e5d9b6f8d316ad7a22a64153dab485e4374e465755a65021dec30132cec4091e01feb4fe370d531060bfa66b4fcc07db95bebcfe8e59e9572d77940dcfcc4dc00c9698e4e8e57b203b1e91a7764f5516a5519fe89cf40804a627e502a713f9c5917c9045a6dbd518196d55a5f6d53d7159869aadb018a42dcfdfa9c55dbeaddedd0ebe962bdd7348a41da93bff7c6a96f6472cf50cdf33d1eeed3e490b1ebcecc5fa6fbefb26d297762816afb0404c162537e915bd126c103f5ff94b4be428bc617b3164b19c8caa26f24e89e5c6cde333e63bac14d7176067ffe4038c75558fe7b37fa03c0551b61324125eae8e992f6c0a12172f0d280f9eaa3a2b395923af58e3e805abd594ba2296df8d24076e205bc9694b6992e93f1ab0af355658abf137a05aabd520ae2e30ece2cc052cfac09157c2f9be20173c381226826f71f2a89a676e7e851b6a025904a627479c335b078a9ebb5475a396d76831d88db4f574d9fddd247d952ea4ced2f366611be025bd97c653d2450bdbf50f74b524a39976b76f102f785712b90b6ab099d7d7a01bcdf41ce4e7e08ff48f6cd15f3e72cb1d60c894cf95af7c2c09553b1c77370adfe0f52c732a60caa983d5e55fdd6323750d16e5467718eb9188b4c8ac585bcab88c4fe94e309091c6364613c3ef9a1adf69bc0d67bd0550e2f17388557f25a2516424e6f004580083cefd1975fdf1bf6be636da8ebd744f9627bccc9de60bb872f6285abeca9e947b09adb8b652dbd060486894cee3d80adf7970b8fe124bb9d46310f8c472d8ed5235203ab0df7d3b789748a7e7bcd569951db30f2da27120a70ddcb1641be507bb6cb47303dc2c44ed577cf3cd68803008d1cde0ecf78b709bedccc5ab47daa4eaf0fe273b3713499e80557cd6a24344072aa5f250942df7d5893d0e9e934e95d310ca13a37d03ce632ffd5545a6816dafdbb5efaf0bc98a7fad3941b29d0d38dea5bd1c024cb4fb9a8efc4540c10234943b503b20fd24599090b3318e31c4b760a824eeda509df8a4dc56cb0203a317083e971e158ac25d0fec0f4727a7b1d571c429bd5942ba9aa17bd19d75100c4f2d01a8114e0c819522d43b8b213d2a832138bae05d612d62cdcb9a034cc10ce99bc5e6dcd472b64b3596ebb4d1a8ef94c599cf5d0ea9ee2443e6788dc3d503c0a485de734ad25d4535bc3fb425117ad09be20e1624c14d8f6b9cc91dd0d832e10e8b386b0c5b7c73599ee6a61d29b0055c597730500b162cba03c45815673ac1c7f392915524e3e4441544b3cd34d6051cbd36ea9abfee6bc3a373584a8bcbc32850cad1acc3af22d63551c89a95666a0e26437b43e95e53120eeb76639c430848a23130fb160811bf7498d6695dcb986991a3e898b80de2c661e80ffe02e53d9b034a70855e9ee7ff0057e280abeae2992d372837f892020fb3c27871f24296373e774b430708b0f5060ec37d880f414f6635106365ea5e67e03da6408bbe142295b16d493406a28bb82d3c2139dd335c6be91575a120cdb694cecf0868b20a9ab190b43037b78fd9585ca8f9ae18c5017e5c97c842743edea9e9c181e80e081aecd377d8a693d116d34680b20abaf07ab04dcc5e99bfe7bd6fa91249f35bd0ed35e03b185855def3ac433c02b4347c8c0a7bc390a4bc4172f6f46608a9c755748e7c42dbd921418591d856807332795f487564bc840637d5654ad5b48ce4a745c3e6ab2849fb0115f53f42cb57b13c79b1199a42393fa94c53c3649d1a73610defc306b9d907388c617889a2ad83ea8def6ed1670d4160a5d3e751462dd56201c1017639a332c2a2706b6aa0f34f454a92c134a2408847c10c8e931b5452322ed78c59bf36baeaffdbddf78b1e6f767ef8e788fafa212c07acf1ab54695e3802f9acce0d134c6a1a377e82ee8f400c2d7610f04d86d933f8ac4df2d307b105316e034ab02da2d497bebd9fc4b053ca45692648fa68296cebf989f04f63fc4d96e8bbf628f6e39fdf94802764f78a3cae8047e10bf55b8c281e5ab108a81e868bd5a182d093948a0c5efe4da0f107c87ade9dd04eca5db9c1873f5e918b44603397018e6f867de26d3a6ff91b43a3d269f63f1b58cf87d9c8d0964da144eb8c8c5697aded3ae2546a7d3055033379520076a132f111ec2696b60ef9cb0c7b1144bf171e44b48b187a3ccf40d854cc1d9c075c2aa27feff888edeef1f56d3bd97fa5f97cb89a3d28f569d0fe42276a63f73bfadf02fad14951acaa74babc4ce8c87164d2639f4be151dca3ac3123f39aa668f8cec3d7081c1fb490571a0c152d02bf831b8331a809e3a7484178176be27764ac9b98b6eb803621eea49609f9343588e973cca0188c0224f9c3b3551b56d54c33fc1c1e4f5111a4ad6035ff80111e66ca0b32ef90256670fcc1a61a4790a871521f145f4dd47d1c95bf414ce510faa88f58f15eb30242cf5e3786c181c33077fad7e6a68a41ca6cd5cbeb232f9feca90fdef97fa96502031be12816a2329bd4b1a4e242354179a5b73aee422d3c06cd1389df61dc37ed37ac736b0cc36a656f6f37d285c51ccf1dee475833eb175072157e8f369022c9d1fd6efd2c8c2c711909440738cafbf175788bdebda3ac8813bd554da959bfd81ce1e9a328ed12986c8bd0cd45b18257bb4c8256fd113bba3e2137e72999f0789e9e0b9195ebb1ebb743c609cb65811a36d0a9278cddafaf04a71d48c7aed1c66a043af109e1c90b8a9c7f057367cc72ac246ad649dd18056d6e5393633ca31041203fe4e6a0c214c4e093ca93329a20b843f45c67309752933de91d65df251c63f5d593ed1d3d520c1e39868a796f425594a8361607fdf274f04aecb2aa9eb0e8cf6b8f2ac3c815f53e6c0145321513d3f79d56de55abf365d1d6512ff297d456f0b0d0ecde507098beaf1dabae63e3ddb4b8aea221930bd409880a18d7a229aebc5406c9c520e118ea0fbef8a5016e9a139b9de737a99a846c0c9585b7d6d319a2024fa7e5375ace25d090cfa158e594646572fedc3eb93fd276696674920e7e439736bf7030201a3c47024153fcf73e9756a54a91269fdf4ab65cca8451d473f296d86fd48f0e27d7c2d1f535b3c97a4c7fcce6fa55ed2e71075463be2156e82a1c6cfa1e5603cc08335ccbb2b31b1c1867fa0d7565a12f142458a68318feb53aee5d02826d74bc2c4852b0147e54c05f84d78550a1456d803fade6bf00dc71a07cc88965a35665445c6c62ebcc9a1790cccc0f82db15400082307d88f97dd01468555f5574f9e38fa85558a4039ee65276e15e0cf2462b19763b84a1d1faaf1e5c27109b989bb19bce02456030194217788b915fca5bc7ec50a8044b9135379be59e7f74ff05fab42299b38a46ba48c69d144a43414c563bc6b658d817109eab4bc5092a340a8a18075df946f8e8143e3b55bbf028866a34460109b0e4261e6fbfef39c6435196f9b8919a5ffcbaecc3643e069c076a475454aa31691729c1d2d7f26e58c30ee3f4804a67fa4c914b999a14b9f10dbf6438f6c291b7ecab15fd4d5c10f7fdcf939f7461fabaf89f9df6c9ac0fcd066274c3c2bfdb8ea67611975828bf7e30ac5cf229a1e49d7170a235c73adb65462305f06fa833cfdedea5a96f459df2fd56584a03d9d7a8cef75521f08577554959b514c0673b3df1173003549a9d15a932a154c563cbc2fd2fe6569f01c3a3d3c813eb2195abe25ac9c9573e37cca9fd66589d8d64ab4da442f7f69bd82d3c373c5dc61e2624499bbcb378b9a7835d3aaaf7208b4b17ba46c6145f305326f2ffcff84559036766eb2b5a28dce8468441fa7d38117c9c7bd4b487c5d2d435bce2413d0fd14fa2882c1f1033e2bde02fb71c6865945d956601eeaea05676aaf2e6d8a6fa47058a93224070273666920fc87cb73abb324d3320e1c065eb80680ed96a426ffde86695ca2495793881a0955b60a1e672e29b8a779c526ab2921e1a1f52d7eb5292e04460728155a94e2dbc28947a9d82bd32b9958d25a941a3c4b71bdb5a23fe5cc6104e3067a69a1a2d28224df4fcf0b8c9396cefbb573f017dfd85866c5b0361f1ba27253b11d4ab8812e605c33694053d2b23f6833e404c44dafe0c41a802f365e1b48e98aa421f1c782f905a4a983d1be3ad856f1b7d7a8e07a74f6b4207f3917531345e76984fd29de1eb63829cb0aaa29292277763cfd0ff6d2aea9d72fc413495efbd04a8ae778be83a4ae03072ff0ea3044ad2d9bef41c39957bef08a5fd215bceae017fa750d7efc3c758e6d3adf2b17a7396cd7288b19d0fa4074341f5743bfea2982e1abf91624c13406cb123c3f48f49f5fefeca8404c4571018c869c562a01605e3c329aedf3ac3c3cb0a71f8849c4908cbc40441104417f65aa1b1258b43ca2396397eb2e064f23a4c52041497582584aa4da50b93e7bd0717bde972a6f9ad385ef8acb95094819ba624c189e9df1bd42ca95130e25d456caa8ec3c3e1f271fb31c804fd78d56ba8839140a07ea2532a5625cf5c00f83fa46d6fa46b69d62b8e21d8fb4c6bafaf042060e09638337aadd083ba2dbdbaac6bb30da39a170abf0b20e4d02822bd8d629efc63b77d206c66a4d2fd57426992b35cb08a6c6fbc79192e636f7fe35ed5fe28d067bc5de5469b31ed5f9dd83ef01a9bbcf19da64068223fec577e325650d59d9eacad956b3f03a4b87428826f01c0d43a227514919180dc1ee4442a499da6d83872d27a489f43e4439d1afb76e0662dfcd9444949adba632f7f7c0d5a8ef433fcf988ed9937e08df9241f348041bbc0eb929b4d77655e5f490849649a08d6d330e79caa04e7fd5e7c1f98df9c0120dd0eec9575acd87112c4489797ff771ee624b193d4eda26ef81142605ccdd3f08e608dcecc1eb8f8c8da1b304260e5973e49e6d7bda31838632b32d5256f056ca845904e8f32f4e209d8fb7bf8736ae5369452a1d042d0f0872886d2b03ca66858a9a42eedc944f3dc04c9a65ccc2a2b6ed2a723d0bc5c1997665d47872c57eb81af8684fa4d0e8b22102a936108d6feb6270f3f2bd7f5a83faa84e9c1440114c3247db23eb0b0c1ba031fed8122eb4bf9b04e7d3e89fdd18d7662fbe7c2c4c4386a84e59ab3bd51f553072351c44f544c5cdd4a30aa78db0d9115957641e710b54d1266e302978f3a1b7f376835ad21deb639c25a059e83fd67023d806718598c25335ec73edbbbb228883b0f07c4e25b40844e5d03d2f4600817c78093ef52a0bddebf24e6e2e7ff88931e3db1f2f65640923a926b7c755bd7c10aed09a566247cc2d5a0b18ea0b1bd169dd504da91b5fa2787a499ce58a6baaf0fdea377bceb53881fb83c72fcc72d72f0c21556c57ffb357ca7345d1f1c266dc92229e3e1818464dbc06f97c1f561d3bf63fdfff56328d3a1098d5b6491444a794b9d7545bfe50a4d42b8f546fdeeaef22f1479b8fc7307a0d405d79c9a154b66064f8892852a4f859b1bc7a52f51f8ab981b3ac1c46803f611ecf61948c167f666c819a9492eab2cafe52196d0d39da296628a7c79d675ec18205e846a3b9c8186f02735981625108025f70beecd9e2ae98205f1e28a0c26dbd514b07f2ef152813bd10868671d4b272e2e8ac468a9a70371005ab45e0224fdba4db98a94ca90091f545a417d79a70314d1e82255fcf116fba350d574e9adf2d617bf8ec81e59b4b1232536b3c78606f596f1eef7b9387da9d0dfc8316828bab4316350580ef600a09b09a54a9924b0045cd49d6efc66c2adba4f4fdd475ac637624d6d15bccdfa9a03377ac3e979bb3a0270dc39f56f355c688e671cbb9e3e443744dca569cc5a47f475f952ee97da2be07076f38197966c83ae72e2eff94f20f23d01624d59c323412688a03294afea77866e449fe73f9a09e9c1ef5c90a4fd43f15f42b1e717f8d774e198b57e83ae7acfb62700b81745047e0ecf26cb2af3fe560a890012b782ff701cd600f0def35113a1d12de991199b0260672cea08e45e8665c06db302770d34dfff07ee44b39d82c781c490c59e6116239027ee7dd5abd5ee560a31f9014a15b4208843e2dd9eefd687d869e0efc2f1f2db0141cbe6772411b37d74f427295f8b5c9add29f99d9b6d31ae93eb66ea6f860c7b12782fa16e56e0c4d331704af42b55b90271f58eaf612a11c782055d41087ad17e08d4e49c9b38546c1ac9b832ba7670f7fe59c4f485f81dfe4319360ecf907d5851eb4b9a7117865f7148d73f2aa2f27e4462504f0a4613f8ab4d56349d14726dc0945be8861292f9b3ed8c4cca32cd81b6192d59763678712dd6f6af6dda923b9c7c5ebce62b0bc087887828a8db1f1bb088fda0c51b256a4097780640efcea3361cc07a9482271c23339a5086080d3d8c0568cdd3d66c2c8c0dcbc3d9c753fd86105fc9ea6ed6ae778bbcd15dfaa44eef52fa3ef2225ac4e6f5a083f5ad2dd6f9330f3d7c268318c62a30b39121013381c0cb769b31093536d2ab23584503000d7eb0e4664c0e5157ad37f676742331f891b66146434f5cfe1550968464460008005c8e861e11aa88bb07da2cd462d311f23be74935ca1b9a0e226aac0081953ed04611ddd7abebe43b7186c131ca92fe1012efa71c83bbc341d718583cd485b3cd8d388cfb057879dd483ad6c972ab45824816a500ec5fa4c915ac99c34e2454a5d09e40dab472fdc59757a57439e42abd49037aecd44d551f47b13d84941c82b3308851afb71a9e3e94316e6205e9cb670467ad3b404169a48a12eaa127dccf3ca972cdbf9bdc0caa8cdf2a8de5a7f0f25e1226cc0d1259dbe95769c27a36cc58c122315c9631c4a075897051405e0ef1fc325cd3c0965af8f21d3e4d715b5a217af62f0b35d30b8d343ab64ae5ea7cc96223ca1e6dee7541d0b6f3bd53a34c061d39c746b304c51058cb3de6dbe751859b70c7b4146186a620153f6a1668cb32806d7920532fa6d5e455f3d7ca17ba71adc4625a763db65d90db920fcd1a5f320ccba1649923ca3d7ffd457fd255ddbea685644e5e1dd8205a9e6d1c4f6e021457a35b47dab6ab930b540b5574235aa453b30b6643465d57a97135bbaf133d0016df9f6a5b023e4a8e130610c3c43b9a4a11e51bc4c37519720d3e8633f1d148b7094da413c3d148b90ef7fdc3531a8c74f661deedfa075e3cd0f9f19a528f6aa814132a0ea06eeb01bf1a9b166014c38d674eafb78a5565178a0d63285b3593189775f813276353fb13c75189b211566d344d946711aaaa7c8f95dc240cef330abde99c908b7d4787f51c537118358f8204fcf5113ea5a69670293e9f0b8d22af5e6101deb4f7ace18f2d8ea6a1c857e0aece31e7a83178c619fd1bc2e4cabafcd64ae3cc9a911fb88ee8bb7ce78e73044c04e37cc8d71f27a7d9bbec6b7c6c0395025a75ad151ec0f93156cb7c1dd43930b631557859dfaedfe7a8bb83a6f3aaa5cf6b661f6318ac8d5ae41d61ff735a7741acafb763aecbfaa4f7429ef0a5d19b4a6f63ac8a8e089162f9af194d7a1e77a92738044272419cbe7973acbbb86b5669747efd6e70c318973685d656497e7e5b947fcf9a1387766d7690afcea96c8628edc968fbda41991799cb51657dd1310531d0b5403b0b4fc124335195c1ed2af667f42d855a20b9d987c1aaaeabfee3b9e037f5fa4b48db4ac2420b9b4ccc21ffdfb5f27c64be964efa07e440c7724c8ea0edbba2010e69faac673ab6786b11fecedbe6adb92e97f8c21feacc96a3ead2203d28a3fc5fceab4bf96592263f6c28e8dece123718241d978e0b61755b4f6fcb54b93eee2a663d89ce7dd665af2885562bc6cae8e3a6415904c9b2abba60f705f53d99a4ec0b99046a9f6ecfa360c84c37c7ff3273f1130e5582fec0b6e957fa33eb55e156cf46af821f86f60547967ab39ac570ebb5c2c23b8e2e965c0b00059b8d91ce1809846f474438a1fbef0062fb4fe8186a122b32eb8dff98ccfceb7932e4c8a8603595ef00d933d4a6197e1fd03985622158470104ea6621aa33f6d35cc4fdd7be17174916cc82a2dac7507a646f603daf3137d0e5f2465c68c7acc2de33e93f6cdbf053f19f97aeecf19c2a69f675d76f2019478883b087a0d3e546ee4293f1a889caad674b193a234cb4ae9a5318d7e5773fac8374abd8cf4c53589a81318f3915a9a8633af5f90c9a75cf87467b3261cbf7fcecdb8f017de223c97b7a91ca382176d36ae7588b5a12f1f9c9aa1a13781562f3574ed00cdab2f7a52617882bebfc7bd064778662ff1f6693957a9f6bcc82e195384ef55bb5be67d4a76abc63cc360d905a6e8d13d6a8f36107395ce16297ea2db4eb72821f5d4192f6795131e9394250df34220a461021cbc78df923509767fba1a1ad6c848e1ca2480ea2c65d984e371e1ad0f733705daa559a32d539f785a7a5b298a56e143284a9287f76b01cf1782496143f2366abaf7f92e277b4a84bf500849bc1528af81cac63806ddcda673ae419c6a8ac894f992883e343a55142fd715b88f66a6451912bd4862568f6e07954a043cda3b6b9998b4e5e42930c69f5b7f3905d4aff17decc63d317d064a9765487142e5efb65ef04ca15396756746bcb0d0ac107371049b552da3a4b7c598e5c3ed64ebf2ebfb5dcc23bd1b15849bb7322806b1538c4ad797d742edcd3838a357893d63b4ac7362035c704e62968ec011c530295d3da592bdbe7d6212f6d29b84e0d243d71f56d8251cb868ea259b728c92ff2a45cbc12a7416203454b88e95a0b3f7513857f2842d639e0e5b343fd2ffba5d6b0400ec3ba4f6107dda2611c05ee4e4833b5971bc5a6d7f655f3663e87f04fdff3f215749cfdac35f90dda728625d3e651957b4bc236ca796637360723ea31b0ec3785457b76c0987feb302f092460479e541a9facf86e05a0bd5dceadf89c3d2b03459439d969c81305a3712256653fa51c1bae1a4b9a59c23b2900b3d4a656e6b63b08a674e295b2791e51aafdd6ab66b3c69a3d98e02dce34d4c009781a446d44116971f8bf941c20156c7895a05f22461f7cb4e7aae50969c1547ecb5f05619ed8073b616814d1181c387c4716df492ab04a2a88b59b2b5c66db1ff98f6c1867a1262bd4c2cef0cc850a5ada7c0cec80be2f8a952d09bfb8932674db6567f6e0be7f4c07521968637a0f693d973d15331a481884968d6d6fe62298f33d683d4d498d6de3ac9d4a054c57806276b887e767187d1e305f5f516d66bc3cc87906495f27aedd17b07eeefd824f66c1e51eb21edba8cde1d89fd60188f02ff228a920447f798f1cc5f4ff624200288488b3370dd47752f9d307f54ebc2565eca9313bea0ee1aab4f8f586464e0e8b7eab7019b479baf1042846b055c93144ab8f1da387fd5c16c1a31d2ceb19dd5db6c6395706e3acc93f7b646b4dfe24782b8598a21b1cf566ae145293c0491bc3f2ec477993e9c7e40710b257a390621ca89219074bc9d646c95dc7b745e843780eca8aa8dba745e41079fa66d822a2f8669ead0a7df23b536e8073f7969d1623f79c2773f9b67e5c0ab3efaca5a64f5c1aef824c19cf500da091b723212e31023084cdb3dc87f3af3af3526723bcaecbd330145b09719883fade96ec2ef920ca991b2987a3dca5855103c0ad56f7f5ab79f83905e30e09c9ba2d293658bb587341766b7971ae8bd99c6cb403460b185696641c85e90e528087a36c148221b0ec9fa6b082980063116aef893b52815bdf838b058e8d64d057050baf98abdd0df0d4debd9f2c599ac09fe3484dfb53a10aa991a651c474ba3fb61031f7bfcd251a0e6497d454bb2b14dc18c04452c739173e120a808744c7902bad1c735ff586cbaf794ddbafa9604086128e97655845650c3a7feb3246b27094b964836917911d99590febda1caf8c8c50b8da87e035168c1951b530bce2fd84f4085bbb9de93c3c601a823a753b3d5d32c075810314d01ebf441905a4da740ad3e58e767f79121bf9953f46e14b1e0948c61a14aa4e075dd65177b4b033ad2059137a1bcb619f8e9409ba1105b0cc4ae5de8a37c5e1ffd2f5499ff194a0a7a664a2d7116f798f2f00967816e9ee082dd335ce6387e6177aec9db4da9de5a2f0c17c0904a8b7a1aa5e0018d893fceee945bdf3da9b5cd82334eec7f9403e33ee1d3b61f584c29f6e0a3e5ac560b951ca29405f30ac2730ea411f0692816d1fcd308ed3073e3a4d7e91776057a0fc500c190e806f6655163a9a3cf39ecb7e5700d3615d2b53744ad7225308502a899b9771698bf6028c44b16a517e802b533f8de9c243eb31e8c13c8aebb604b74616ad390643284a2053fced98a995d905e8570f73bda7b770b7c0bf80c8f6cd3c701f9edfc387136fad189e8f78ff1240c6a8400ef46f64f03b5210cc3da85c1cab4c7e9c1410f1d5669dc50b2f5cb793b5da24be96693c84f56e06cedea805761ca58d5d0f0c5d5df15fb9f901320892a8cc8437e6540fc772978c01573c278527e3c50b1cd4c2990979a690bb304549a2cc45d0432bcb5b6a890a01fa9abfe498c1f1a309f51efd602d66ad929381268f299e19811e79dd8756324b89d8b3cbf014bd191b4ddb9c8eb84b6849b79c945f8a176ff63160fbc2e1152ac828a883c06bc9f9c1f139c2c1650b0f4e6a7125af7fbf0ea5d73c84734bd7bf74fdf5782be7118d2def2573a469d365cd78547ec20afc9bf6db0881a5ae8671dcc4fee589b92c86e204905ba5041f1e445581c8f8678ffce9a8aea2c6cfe46ce0e2842569917a1c193100c5d270804f5103fb0469bb8da1ccc4f02b514b0b99ab6d7751f6aa640308b61725bc9b9cce4f37e8abb615901e0626d454f24bd41d1cfc202d2a002f78ca2da4d35b41a68005aaf33ae15cf927e33fa76e4b090c03903e3fc42ab76e57e51629cf6b1fd2a58536085e5563fe0cef894057320453da9a3ac6913ce59c438d2a132bc41222981a0f0582178917d535b38f06336d2b6ee09aed7033c0c1ada6e56360751a757f12c546ce951f45d66fbe37c7da3e80665884e0164e8afc075e589710958cd32b504e55b158e1a809f8149537282e998cf56eb36b3e86aee7cad567772a9980ae6226f6e4ccf94567ec8947814c086d76982b8059054909bdf425ab089e9c26815161b0b5ce49637b563aba16e08fa27d4219f5da2247e7af62b8dc7a34d62c36f14c341a9d66ad7ed89420bc6448b9044264df94e8bdde79aa214ce7e2353ca997fcd496180024d701624c28123f2eef876fa286ebd56b467c3b0aff47eb8e14ae265224c1cd281e3a9c167fd21b4b4d3ba57e7c34d0df3715cd854340cc2cb4e05409953f3115b97ee23a82cb87007baf2db1459ae5f25ee4fa85ee3c1098fba631a8e1a7bf8e124b833503db47de342bf897133498123b394488362b909d5478694ed67109dde80a2ab91753881b6951faa009b77abaa085713a753ead7f71d7cb2469d4d891ec14967708761164dcfbab94be08b08175ba688560599d7366fbb1ee6b4c7624c89e0ef1b38ff200d8249bc49597eebf154663a27eaf1a968af299b7680802977b8dd6c6be865bb8ac2d519be2d676f0a9b860c0b02b1a36740dd186557f4b8e452b3ed183fe6ad987f2c159d5aaa5bfd58df3884a160bc1c31bffca36dfc59c9116f1e71ee8ab4d58ca17641652da49b03b2269b6f697f5f7e057da334db8dfe0f7b306671f20a08f081835a439b7bfc2e20e047eaf7f0e1323bcb48ca353e78d069bd6ca2b12ceb58fd64116b1cd0facb7388c6741aca60c00f5a1a7dee5dba89786004d96644073319f358f2a8c55e2e224d95e0f113fa1d126d2a8c75f757294475ae5a684f3760583c6fb4ecf5d574d9c360152d3886ade9a794e9b49fa1d22d1f7dac7d022fb40e96c146d52423b095ad71392a884bc634198366a4cc843f282ec77d205a5e2d18f1cd9c558b6ecda45f0147793e77d6dcd9a4c5c4b96bb3f098d7593db004d63d0462ca846199ddbec4d60a22f26a816841081a304f4aa892f7fca61557315b6488fd3731a3cb1c1c45dbd4511240b3f04cce698d8b0a0cae8b14926df29e593a6f836e7f0c40cf50966be1d07737873cb40fd9aa51de34362949e0cb86f93f79956b13233531799df302ffbc8eb17c8902c1de2734e2127ca34d4d40f0d5847c5f93da58557aa886aa83c10435cf3d3d141a674b5d6b076c32b5ad5bdf46f8e9d88b55fbe34f6b15bd6a6d96461626bcec13c0e960ec5fa24cf73891ac286fa064e98697253ef44035e5f006cbd184e9d4ce42cfbf2bed3fff47e1320ed179668049f1b1578daafa7175cea02f6caf2560d7b52ffa03fbb388cc7ff6743168e47ff2bf80f6fbe92092711f3cf8aacb8c72b3d0f6ebe8d6c63a0aafd71192da0924ee7f05f97b5e84eb771b72b9f77393edf9097986828fdc49652c78a4a1e15423cc41a1e47c579581e2f478b250b337015783550d54af1f80e9fa2d6ab451b06207ae1fb63bf1e1baf730c59cfafc2c0ac4f0826b3f5f991098133875d259443e5302c306e9d7c954fe01f63e70888c47b8d577a6a1eb8755352a56ccc58265357065cc20adad4e61986b3975b1e27428c5cf9b3fd80ce5b809f71e38d3c236973019486a9d27cba892d4d0385befe01f74d5aba7381a5b5197d5fee3b6372dd8c608f4fe984e514c5722b698efec50b295584659902d3360f20b83338f4968aa1ee2adb9fd804dc048d1d6858522fa9db2db8ada483f2d81a6cc216690fbbd3d13bc744806497d4c93bd13a0ffb9fc8b6fd9d9bfe9038d52e8c55fd711bb0ba615693a14bace0a0532e143eb8afac000a8ee324cf082a0a13b8564e8afe15e4b062905eaa26fb053222a8144af7edb18b6a91a1ec5ae89ed69b5bd2b43da3935d2aca0178f584d1984a5eab8138621f4fd29cc4e75f31cc1d62b34548b08f4d20a856ce0c18e6585e5a74fab515e90f5fff8ba4c996e77265062c4ae63e7b4d71292753a5c959a94a2a06de10eb729c73435cead27b6722e25280f014523bc1aed069aec99460f46c456bbf69d779b3a5cdf787d4f97b721f17271958ff81b9958d0eea99d9b24cd5e0e243cf59620956d0ae3f8358f7725e7895dc9aaa5aa3ba65af18a4f86fba017f4d1f56f1729f3679bd18d235de32127c38fe56f7a7af989bd59643350a75ff78e7be8049a23aff000838bb1d0b7c59b037ae2a92d7ed9e0c1c3381b40eb9025a45ef38172f7f7aff59294c264429245b52901551afdfe92fcb184d1091adfa17e21735d0bc2d74d3cdb45c879f49073a3503ec9d558318683e0b7a17e71f8ca520d304baa474e8a64297bcf8397d9e09782d0829d48153abdd21436c249a7cfe7901a369ed84a6cd793a13e6a480884784ec9afcf9450c89a47957c1801a9f05929e5d8f5ba714b37b5d5ee91de06b0a73bf4122ce285b0bbbdeddb518696d5277553a2ea9ae4f3757cbf401dfb637dbc2c53bb8ba557e2ad8f422f2eae3c6484eef5bc67e50660bb105cfba5522f2b464267370d0ff5f1b66e29f753fe9e8e02f1056cfe96e0d09765bf31aeac3de75dc5f2cf15c57c8ace69813e41b4b80f4f6a2e2d297aa55b5c1431b406f4975058792e1a43b57bfc3a948c0e458dd1cfb9c1e8a9ad0d19a24b74a2741bd4efbc924d1ada1aebc0768374df25ef967d75559917d20d1a5441137e7f374701a6561c9d031b7a747c9dbd7f27005ebf73415a4482e647f2c08a21f1a7240072e40da28b18d80dfeaa2ef090f97c0a2fd8a3f47f5ea7ca7ce1d3b38c6781f338646add4bdbcfe7c51d51028b5327846e830add2de220f5ed4ee4eca885d8942f785505e387028360c12cf353b0c1cdb4f3428c0af1336dd0f51363d3e0443184e0f6b7512d5532dabbfd1db9ab8bdffdaaf26cd130cdd5ffd80770d75dd35fd8b55bc5466bf5193fcf9b25869b3bb7627a251bcc472ba0f5f7989ca123100bddf64de87b8be7e73699687a7b87c53c4f62a2305993197c4bbd8c400565fca952537081597387df8921b29077f243e22e6773d9c7ce546b9412460922928b84f442e4664083bd7dba5e824cd11c9fa52fac0b8c5dd2954430d0090c40d928c6a47e1c6a824167984023d16beaf5d320d10bb1980c62e043e54ab345c367e75e734e2f8e2ba7f3b9e46225ac5abf6d933343c906fb458960e2fe04aa6af3fb8afd3ad7c6c138c9d87f2a864d7c6fe9c76919a2c3806a978e1056be0711778ec0c93b26157f4b27cdc9f93da94b5fa491043fd9b45071280359a02f1ef4ae691fb85592b28a16f4bf7138f9c9e628504602e2271076ed88d119a2c4372aa7b7f1ef00106cb080ef4add7bfe1dba3f84d605a03d6480f75751341b696fc44ba1603c91e708d478987ce501bc0343eb470f67a3f1692865bab2301cd36e0f06691344ddeb9d09acfdc18fd76219dcc6ff0436a9188c1c21c08f201d6026cda6605c835899dd420dc6235fbfa1618b39bcc93ce7c96845ef1871b8b82b7bc503dada8dd7bf65f36ba32195f8a849f49fda583d63826c5c5f4b195557fe2297f5441c20b8873acbf7c0bc83028cc1b83ff25d27e61c08f5194cc4ca3e8a1bd4c293155b9f9feb15928c426fb78a7c5d18d27694cc8952eea151a2095fbf9392e3e94ef37f2b152d448d718d1c61c96752a5013adadffaf645a41ea29f7d0be49315591c54e693945d7a073df925077eaa5781b797fcc2cb1ea3451d3d76809312160ace329ba395c1560d44829b19cd8f07c8e26d419648f06e7543f6bb11fdd618e8a7cc478090e52de20e5d20f46467587e143665637b422e06f0f2d4dccd15e1c33404c3daccde04650e1efaa1de8a65ab0bae8a9b4fdb33f23d17224083ace749dfd3951292ebe5461f8701d00d5a00cb8fe54be81f00876c12f260b4cfe8a4408d55f2b772305d15c02835d33b74d8b0fdf12c96e5983caba60297baf5b92ae2b84677532fce2d6deb242d4f5b1e389aad39b91e0775a36bd814dcf87ee8982e16484c6c4e029c3ad286fd1422768b122d745240c0568c6f9e30af1e6486c181be436b22cd840531c397a612c0c5fa317d6ef84e9bb1be4027b71862af2d2fb4f46606e527237fc2cf405d73d0d3d4412bcd452be77f577a6f53254a24bb8dbf990579a521f003c34baab839c230b3149165f71d2c7d881dbad2a0385726ea8fa0c5d62f2aef3b3b75a7476c93a9622b26e67ef4eae2f16871cccd61c194d57aa0485f91098f6808929c6731649b3c1c4b14935c2e15343c9de531064d4a9c15add8801604a52015e427082b4eb4cfa33c8738d96b3ecfbccb0a5d4fc593149499f6470a4296e3fa863c85f32bb2d12fcdd930a61dcbf625f2ee8db2d1bc232b67b6877c59eb9f54db78ab62fbaabb09db81996aca28bbf103e38cf9a00cf3a5443fab7a5a52c9d349fda66d59ed3dc649684dbe1f820d3cd41586c4226f61b2a9023dfd73079381837db8f26456ebd79c996213ec1941bbaa9aa6232d99fdac076a050cc31ab88cf70880e3c123104a0e3d8e162a9031f60b2d790682de3ba03e59a88f83ecf850c964a6b9d5282482d3173963e65d95dead1f76580966f755f96f59d3d0152807dd8f0473a72df6662fab0d8f837371ecadf58082d7beb9617145f52355c05614ef64d0d633aeb2801fac385f8dcd3b3690d84a54d4dcd5c78aa932be2d20c7726675fa1386e7e4792fded6f4282865a286c4f9d18908ae531dce230ceb4901c450ddfd22bcd9e6b97a3943b490f01b2612bf5b3ca0a7f5484bd11d8b9dc2e378a6797be19317059f5da5e08f4fae7a95c58bc00206b323c23f3db0bad55e2fecc20f941d3240c21e608513db786a1ff2b117389e32ff54b275b5ea826f346a2eac11de8578b65aac574b1e53f3d508dea8df6f9f6908e0c1c688b3cbd6b1530ff1fb012c0b834660b94d25eb0ad39610a450ea6472b3a5fe29d96f43a17c211449fa22d4637e793cd2c63397c7341b26b363fbf32b9d6df8d9d6798443d6bee2cc11a2a771a1e7926e4558c46367e25090fb325eca18174920e7dcfa2b39b175ec615f5b569d3d16d8714393c9307f4db49b20ba6617681fdccbb212b96c44a838d202b0ccd5dd95791567c0b2c7c5dd10e3765988b1e44f5b4cf55a9065c4566321c8002d6daddd6d924112430beaabe2bb47b872830a2240be764d8a6d19400eb71ebca1a41dd46a952df606683bb95cebe31e542c77dd24fbd0d6d27c80bda7c1c3db426fe952cfa47dea2ff9c9c616785553580a3b46c67706c69c04ba13a1a4ff64556a7906196a4b2fc931a3b53da3eb9619775e48a74384d507426dbeb47ccd3bc60a11daeb2c515619f31ff8ebc325638aeca1c52269f2cc1a08b88169b72e78f7b4440f6ebc0b2f3390df0208c1733aea43c53ed26f112e8b23c0dbfe0ba8723cb18f199e1e82702ab0868e4304bca9e97c1b2ace7fb656af40eb81ce29e183e8695d297d5dc1385e04e5c44b4820b637ff89d49568fc5a0a0a2ae13bdf7b79ad84f6fa1c7d21cddf92b79286186ce9a1b3237e0728434ceac7c978e9b8623a8c1eab7e464ac1095ce0b67964121047a72eb9b75e42152711e8caf1ffa9cde9fbe8393139d33bd9ce87c73fdadaa031ab726900c7273806ba8d4bf1a1e7fc171ae01798613d590e0c95868f6737e38d817ef5f70392d03e2db1db8c41f36cb8c0344de283c8693e6d53df2c0ea36e218e37a427693f530d6dca0590ebc2f09e686226d5b03a4b0e4c35b1d21dae7cbbe499661b2041dbf33aca35ee0ecf2cbf1aea574a4f7f27dd4b1d3347c1d5018db6e6691392abb42df7e946ecbf547c71d0208d2f6b520796d0bceb7bb34468407d82faafe9d91d1b83075de7670ec139d5b715a02cf628f5ff95a417e90a19eb35c86b826d9f074603d66a4d551bccb8914d2227abbe3d3efb626ae1d96b78847f3fe9f1bed258ab1556cb040ed7f31315d61535a118c36de8425cc15d6ad353ffc0be170a55815be0f82529522634ba59ae47e5fa145c47f93718086ea989808e0828c307e4a99d1660e9b996ab42c82a0adcaa954483ada30f21586364fd5cb95a9a9f57db1d56264452bdf92c22d4ae1ee72ce92cdfbbfc6818c137a045f923b1fb0b55c26363c5e03c1a44cfdb27f0fac6d8c09a8981d34de531da4e4ae24247c6b7bbce985d1c778c96c5c83280d26b8032cb91ba0fccdd278129f395edde284cdb2432f45ee6e07188e69d3b23f1815c303f0cff19aca4a155c147eff7f8df79db6177c0be611b6b6f3c35f79013e34b17afc9ea3040f6dfe764dc1ecaf788f1e0814125468f69c9a85ef2dd88255cd7348f6bb25df755fdca931d9b67deedb3e1e4a9d7580c93e5072f8f26efd12f193da528b5da847fa2afbf1570947b3a700ed719c4960722b219a42dd25c918066193e340af1352206d76ffc7fc39e19d72be5d9b48ab36ffd5329e8e72a08412bb1029d2a6a710cc8dd58eb4b0cc6c83fbdb345b40a43e208a418982e68ac6774ddb77545d6a0be0cfae28441240b37c68637b1b6b3380e56e2bd29838246931a2f90567e5813d10ab3bb3f636f502f9af7c57767f25d14c2cbbe035d3f0aa074991ee2030c763297108ed5ef0899e23a8a2f4d733604ca6cf1af905779c0a0d2ede8d89aa9c8d31686d46341df01acaaf43e0c772e150b36311b1eeb6dddcc436cda5dd3e34e36737a91ee2a07ae2a06d0c6906220d0f359d0bec9d1b6dd9dcc02891061297792422ae690df348ef81920731cd45e7b2c096fe130bc35faf10f05a9af5265f8a37e5434e7f040786eb8212fe5e0604c2ebfa84a1062ea836a423c4c21b8de9b3ded5a1684c63fc741430ccc92715e1bd6000a4aebf1e9572d8a792e5fd9509d1d80b9f089477b016a48a79033f659f8c9a340eb649cf99409f589dfa339e49a4fe9dcabce334945756041a6a1df728f7e235024279a2fed472c4468a7227fb558ea775e0655a87a60b666d86a8bece1518d587dc561574168d7432e755d6a849ae0cd6bef88bb1d065c5c5010dc62110b6c99881ca35e16e7d54a029fb6f36b861a5f059ebd39a9bcd1a4d7f038ccaa68cb34b329533124339fc9f88d225632dcffbe79574a18a7ad8a137a992469d9aaa43ce89f498811a26303a1564e8d54403b83eeb6bf4f0fdff36b38c29b870c0d435161d7d25cb82aac5fdc7e1ee55dc31fd38510f9283f5cd988e614ececbd1f056657d2457c3d89a2274c52db4d82a8b8807e38a3b1342d5e10a9892c028d912864c3cf44a3ea06ee7ebc14606c35a1adfeb7b56f752bf93a14bf4bfeb1270ccb66f1463e3f9b611ea5a541019ac9d5e8068b7769e5440297229b744b3aac2aec4aef69b597976d77c7e02a052e0ab98646efc4a2fa0ff808fbe2ce8e01b7a9c261d4073a3cd95561754200589c0b258306a81a5518fd465782f778b5b1d2d3cf6fba9fe1920d7f607897f11a5ae8a5365f75539ba892dd7f2f7e9ed207ad4c9e0e60a8e7dc772da9a9b9754b598e6abf0e91e3e5c5e37aa85844fbdf409bc2dd30feb4b0658c80cb2e874b1c972a68a990d8766a4e7dc08c98bd87d4dd099a797f96d9d431088c894afb36f86648a0104807d38dcd2ad17f77183966c95ead8e2d8a4d801e1eb1b9e97054be245991d6d3df54fbe5b3c3cc0a6223128d991b12c8f609f5ad321f6649330302b22b6620ff1ae18a21c306207ac55e7faa64409e7407873239caae447a6f13b9c530008d205baf8f9999e916d34d523d55fb58cec367f0d1805391460f13f2a7f1c2cedd51ce6028884d5198a432aab4a3c1f97f83c22346b9be997e7188b117068aed0d8f867a6af8a1263a5e6c0e4e3ad679d809649bce7529ec5fdab861a753e2fa3cf101292aa6a3a443a42c656cc71acc30664ef5df5421956eb763aefe013d1aa45307e092ab4d488ed080ad6f242df2695d52f34bfff045ad809e6c00a695bff49a08e967ff00fe2a262e97796b80e3904bff1b6d1b95b656974c1efc0e13a30896a62897bd36f0593c68489459353704b0fe04893b7ab5e25d7aa6703768b1ad7f71e71ad1260013a878f4e159fecee5bb95eb116db0a1bd531b183d753d911a6dfcbdadaaaf2ea411461d79d126c7cf1df9e4ad964b83f2441de2584d651e9be31667c0743256f3ca18ad0be36d166efe7ad710a5772faf18ca2198bd79ad0fee64d062ccbda81c75a1f409bf5fac2a59c2ceeb27270553fd226e45d76a453f24043a9175210f279dc7c4565221828a85eca1489cd54bf0b2294fd2c57b7d81282b064e197ce64938dced171db78974e4e912b44222b86976a5b7d81e8756d5e295c6363ce0fb75a34333ce2ef8e747a005b30b9b04837565855ffc3bb3d39269f528885ebded2facfaff52230a6287667b390410fd70e82e8cc5ecfd8ee3f79be6cced925215dd24a3e6b00a973f786efd9c4b290234a62d6021c72379b9eb8b30618163412f6f837859f37c1949ba635eb97f12f8d46188a504a851b75288b98a14abb59b5e0130b9010910d2ecd5c1ef06df3565f0ab976efd646569e65c9537c8671e585415acc6d667d6f654ad028958564bd172e0e331ba437d62f3d5eb4e176cd846db7ea3d1ec3e34774dbd286689fb4e0defccc07de5c8032da00b5dbfc1081c45cae9b1d1834a8c768bcf64c1190e1348f1987fc73f5b5b9e61557445af9951573f00d8809ff74793df56ffc9fbfefd299d4072830f27501005aeaa98166ecaa3e2a04fb63fc8cbe5edb0b6d923d55a819369798c3794423a2e801b7cf044ce856a9143edce493a0d2ca80c87e7abb77beca5726f71040a60c989407f55383101b1ae1bddcfa083dd67862aa507b47e423ac5b5b698637743c077e315ef013313898d38a70321ba10c97556c62e49915eede1eec0396cc6c7d1583bed869fa2d0aee6f239428b55cf1f170b5c72e3fc23ca5c8481a17c22ac7c5cf4fa35171d0118c41ad4c1c48edbc9ca8d54450c00e91f0c5f04c904801d009a0969a887ff288b99a03f58247717f7d4a8c14d8ec378e23ca38eadac44168f318abdbe1eed7e0a3df64669ab496ba69ce01a04c8fac95a1807192f4fca814bdc9ee3d578e7a1656a7fd7f767121eac778d6bfa3d31db05e0c437827d9365917579ea400c00f4219772e12a8de5c0294d8a8c4014284195b1da09cb1173885badd09b31d18b5678f96674cf6990f0a456326192381a236c26202f6e8d5a7c0009ed51d0e91a4740e3ffd4433774d3f761b891aae19fc69b88296bbc22f2dbdfa259b77d6eb07daded8c9f99d6bfa6207ca9524374d3b3969e3c8e03d96b047dc8fd74577f8cb63e51f594e58810bd64c2c448a65b01bebd21943556df7d656849de5f971c1ace16a7c52201c1927ffc7143079f242f01cef70eea0eab2f37b1157f9ef5ecb22d65521a150ecf63879983f99e776d8989c5f3d182e0f2a0efea67f530c660991ee852c4de832331fab320e20c39c7ee89558c5e9673a796cdf28a0dfd4c25e616792f21a244a27f463fee49800818c9f0a4909bd347cd8810edfcae867f40fc926c507fe52de1b3e346d469c98e126626ec4782823c80bb7d8e941d237f3320433ca91b8a44aabef338df77917487b58f68fc5f9127d8a8000f9c44eac82d411234ad1437e5452a3f50a5ab492bbd2999d1cb311c827732b24d44bec7cef1d6f9794932a3be2c66e873f94132a652e72c6b9fd9fac882f964d2e27204c1eb46a1a9f938a230a8214d421cc17db21ba37dd28d23da586381092e598a2da13f3ab1e3afd16ef60fbc492f57db3062b0c49add88dc511def30daeea9a1222b2be33497ed3c7703501696881125379fd6e2abbb3baa76bbf9e1eb8eb5c6c5193640b790a3b32298c88c6232fd09a8c8b270ddb7c4ea565f6dd811cd952034cc82d6aa13f33a32c3f6986c1af5bdbc8ba71bdfe3c8feb17e1a6e3e8f511fa1cfcbf9fdce89d53bd81af8751ec5b2b943293d41971e3b115b03b9942613ebb4a8f1b8101dd3034615bfb41466a40433db87f5e0d0a2af6c6128f3fd7ad9a9e2535d4df501bb9e28c748da56ade1ea85d12d4be80a843d7eb4dcdc431e21191d619c61a1ba3b07f6b6ff2661bfcb1b4811e50958761c06ef986002564a8bbbbc18c4ff779fa5c761f6d91e56840996aa96639288c8733f0b8b91a3a9a03e53a7c556fdba1bedd97c7271daf0645ef96bba770353f0d3eeb8a4fc1aa5161e478e3be985bc10064f7a46fd4f1d87eef14d88a244ae029943afa8b0720fe2e5693ea415f57d3df0d3a5a066794379bc5ca8ab3a1124e9819d0f4d86858652f587e51bd72ada2eb180ad0aebdd7de66c5454545db5aee6dbf6a007ef01791e6c79dd4dfe05e415ea5d077e8f0cd8a6cadfbc2f1885f721c2d7fc66fa1af49ba0ea292f4727827d40ac6421e9ca88f41af7d3ee8082c1f2125b76756319e77d40801acf36691e65a1bcef1a68ea2f8de1c90b78e09c58db2e653dc7ebde3f0ac227ff6759256ff2fe0b5337e656d37af23ad6a8904633bfbbf78cf83b1a114ab33e80e388196b78c3852ed9d1b29b38ea89d6c86f3a051f6877ecafbf84345c1a51268ac80a0242cdc31a9e474268f033150973fa39192c1f9ea883b7f2230eca513d18e345cbe2a8bcd87e8e1b6abb9b070c0e50155fe04bf2e46bde725baf1a112535b68f279d621ead38942210c0bee0439dbc94ba1e891d2516e79555bc36180e1620f77ac3472f43680ba3a40722964d28cd2caa419bbf40fb4362233c26cf528105117988d87c324a13965c48c8ebc61d3f53b4666e34fa0b1764c37f364b5f17f31b47948c58dad5f03fa20467546b6270ffd2bcd62d7de976ba2db96896a0267b406dfe1b17b6480df4e4cd709d64d7a0bf398614ba4934e50612d0f0b9a091d6bff2311361792b0c0506c00153a8733afec07e18caaca03afed4e5715eaff8dbaa907ad9a2120c83dc848517b2a08bccba0a7566012c79b4396ac874cb50c4bd01472da58a9e931f17959006511cb28a3a1a4eab38071042c1768bb59d9ec01bca7ab009b40256782e2be242d3b1516a0a308e772091ffc8e7da529314e9324ed39dea2015968810ae4780ef55d806c4c5cfee14db07fd4f76aac9bc5369a07085c84ae61481bc577427b30008b63018b16b592c123b942cacccc30d7d734368cdd954a35e3e202e314c1d059a1753eddcdfa3a3c6600c0dae1ae723b597e1c6451cce1a5f82a7200c9659531c61fe704e5abfa0a796e342290bfb33f4d4df783071415cef7d05aad7b68eb7892c3da9fd6b90b4d8cdb3e6124cacc0c0293ad8ce2c81e99676ab7d68dc5e8d1488ba831fae600ebe22b847bbc19b29ba62eeac516283485ff267252b71bc8727976e7031629c26d0a40cb06e959e1c0120883f913a13a91427920d7491bec52dceb0ef7abf170cb334d3f6afbbe767ba4db726f64383a1a153e7f49144c6fddacac7b96408bf4b74e1f4310889dfc09870bbb6ce71f67f06e84798d4cad63d62f19ffc404f532b46640538a4b4be827dce8c37707a4dbbaab2e2b5bd8bea72ca4215bac38404d7f645537de4bae2aefe8aa3830d71909f1c2196a0381383fddc305e9f7e5988755aebb382ce2bbc82919f1ae32f11d5fdfbd17c8f3b1f27f502d482763cf1456c4dc99b67e20740809f650229572ea32c3701819899eb1791e3e9a01b78d85edfa05c64809493fde93ef2c48ecc0a88784f7d40988ce553d052bdeacf8f64757454b6d8676805de32f4efda19f9087667be0256e733300d11bbe0630ef6fab3dccc1ff5032dd6755dd9ed67bfc1e0659311c35efd7bda2a261499a233d9e6fcba4237cc4937ad8f18429e91c004e30e16ba254d1b6d3d32c3496c9d1bea734c8d7e3f2c8d71d6ac3045abf97c7c68e6cbd2b9aec4cb2459e586605bbf6d77551aca78729e228aa3d95401988886fbadc901557ee19503fe1fcb2e4b883c959c2fdd4d338966adfc63486ffee9cb0716c4bd44bb203c4a10221473648f86733870dea2ef5d7660b588793871a8359cd1bb36b42e968c81a464b491b5a69e2b872c78b4bf772be0605deecf4564639801e61692eb984278bfee90bf4355f6bff4d8b0ac7f747e90b3dab939f24c817a5daecff31a2f1998257a12318b38d4996a8c614cd87df5ab242b0eb7b855cad2ceaf19fedc83108367b97b8af400b1ebf1612123e402cf4949f1763e13612ff6fd6184f9305f15b29ef95ad91ab74eaafa2f9e352369c9379a009d714557c3ca5f34aa15bd2d431ddec93155e734d1203ae5f503935f229f42075e763eb9953c015d47ce1ab01690b1b2e7f1191d018aaf564774b19fbb3cffdc9c37849f7160b65f4e003503d881a7a7d5c69bb0bd3ee19b43d4ea42cd8152198a98d4f7f29b3d0d4b053aaaf0dc0c0ae9cb33fdbea1e66988b5632afdb932bfcf11aa0da7905b31c51bb9577a4577f3ed20ec5688a10ef22a05b88a982d2bbefe7992ddb058ea1723c0b8dc8a43ec37b3d06a0d9ba8c531e23334ebdc190a1d2398641ce22ffbbb61ce0d8f8b297c01fc956b8dec0a8e19eb75af83f80c1ac9c1d6b29d04d15b59e89c491fdca28d30145f75708b9daff9bcfdec935a98d3bf05909c8d7549cffe4a8aadd5f67bdc8112911ec8afdf83dd30a1cf82478ded7daa84a31874af34d89f180c3e1d16ccb311ff364a522f77e8ed07cf65292a4552c22ea1d5d2eb0e85b6ede12a5e3ec1b6a9c7777c78431dbc546aaaf702b553afd8d89fd97d71ecb9931282a4b15bd919140eb4b5da677e0bfb148d6ec5d44c1399f38fc3943a5578241ee8e151ae4cdc6fca9bb82e59302dea9662f9dd5b86c72d53c9714c1ab1b151a501dddc2d1adf511abcacd5f535a47d8e0478dad48503824d6c4530f95cca064baea82b4cb1bb7c7d64461bf4dee3b6fab6b555e4779fdd6224e4cbb4f27e89a5316a3854629021564becf76ca4462378aff78361243004f271d010aed62d8855a9822019fe1e1f0841b87b2181873f7c420290c402f12d5ee09989fe471d980f3001526969f087190fccba5b5402b72dd8f221705cee0297aafcb8333c2f2be62f6599ea0f6d05b2089371721dc5e171cb4b4b263c927c6bfaf491c54949f74e33da823d3283c5dc6842b711f980f5d7bc68d08a8d790fe4d08b9e4fd82408d6772da225e033678643cc35e4d5cfd98bebf19acc4314f38170eead64ecef7022cc1816b61c4599b0b89aedd30237238f82e4a5ecd3671aae0dacd363fba375ebb7a04d25fe157f61ba2bd3fee5bb213bc4e1da6f43d7401ca4c9626a2912c9f2cff6df16c4722d56ec59e9133219852857820605ffa58845442ab28793343962dd7d30f0349a8abdd3cb160a47bee9b4ba32f30324ef1442b3f3ef620e1183fbd0094c36155ab3510efe23070e6ad6abd6dc9c9c115283625afb8c10bfb19ed10e9e6aa963807418bbaac6d2f25460faa7608321e9fa5c9d1c7741ad4d4bdd8e4002a0e74b85b0d48e8287dea4d5e6ab7faffde3c061207af62ade75dae123d02d0c1045cd3f9efa981d8b977479bcc86cc994aaf0e204112fee1f003d55e89c605476ea95a19c90a88784b2cb57cf9a504ec5e81a6dcb4948e1caccb47e0787f268b7660b0cd1408d9f9dbc0be32b0ead76076b7708b1b0df21be4952142b51527e36a47dd4c69181db49b1ad4e982e45e750d2afae38a82d34e70b6836e1a25ccca2782d35b8edb40c5115031edcb492782991dfdff48b3973bea230d772d3920b435cb23d710afaf3c9cc92a5e90e012644024879e92f73d5e7e1c23f3872efc4f7f6de47d6d97d93d1789357c9bb2e783790666c48891ebad9f535076aada27e8061e1ad323f40d9cd857c539b7f41487c3651b4e980652e0366d5b2c9528a7c159df0005ad0f3f7c03d17f93165e11fcb3c2f2993da97f99670cef4756fb4eed3fd46b19dc7817b06a67235fb6b034d88840531e47f677d3df4fdc3dd756a42e7e879f1bd3e80199cd7beab67e7b5f3b028aa1b1d2a010b834c691a763f84c6a961384dda2fe9a9e5a23469e9da8487578d9d7edaa9bfba9a4a4764cb498ddcf9c5d6236b2ec7c849432575eb24d6f71047acf7c230b0557af6278d66c382d96891c9c0bd6d6b079ef3d45529a81015ceab50d21abf3e8a52bf71ce1d6a52642e9b648e71249ac439082129c716f5503977120cf83a26ce1687d50d0b56403f8e9b15838603d9d2535e15b28d0f64bad214cede52af13162dc2b61fc18ffe846575081cc7daae0c3865a4c9b0ffea4c4ed9367345188743ed76bdbc97d2c3deabe925471ea7dbc0734bf3000de869f88b1819f6c43ddcd088f54a410bbce5b6d6349b365a53bbcb76a13b7062d6d7bb878afad172ae2f0e1bbaae40e000c3587d15c98542edec1dcdeaee0e3396e0eea86e3487495953d13b86a8c7e17d29a26b6451b07e9c7f48d3d317ddc92ce840905c09f1e10b347e85ee1ce0299af6d91ab0a4024bc3ebee9cd901844863ca8c69520d1d5fa5963e4ef99a8f0b20d83a980a2344a99f9eb073a73b5b28b385d95887404ea2247c26cb512eb456f43f79d93556bfb4ae7a1839c7d390944862ea24855c3ba4670052eb6093bb406992421780404cd0de55553fafa9eea03895176ef4bc090f2d6b49528504cdb81a3468b5c2230bbe42f28b34544420e915dba7d61e3bcd874ea7540f2bd561b748f1588ccf592da576bbea36f7fe3ca344bf0a8d3b6a936b2e90325de60b82b611be13e6ba7b4f3507b5ed3d3d36edb6ab1d3d63d7d32414020b8051c91fce7409268e744f055fa9019e9008008e362a631cfdbddd37f5c75cc5918c804bb362faa6f88586f88a24931b05e5c693e65e32b39226c8f8d8c7d1bf0ee2bb96ba80a4a0dd8c5f61da74a00f2af0587dbc53427d97ad40908bb1b714e001f6e120859bb04af1f5ca687ede95dd6ac7d103aabe04986336850888a61bbb5cbf4b2b955cb338099084ef1e8ed6d12f6ca120ad57a5a1ab188e802e190fb2f3bb4d368cc0831dcb9fda8f8f0738b3c261e92059f8731613d90172148cde803c2f1829414a1c97ee5b69e78bc0b1a1dd1c07811d124af55369ff4b368cfa7549d5b9069685b7ab0a652b14a3e26565cc87a75e536071ca3c7ab75f32f1428a07469cdce67c49feb446342cfbeedcb2676ccaaaf1064c1d21ff458bb09cc098335e0ca43966f9dbe65267a11a7adfa10fee9921ffc34ccf2e725842db861eaa48627f05e13add6c5e106d43bceac55d96c0c55fe6eed26baabdec6dbac34425c0b55329b6a3b05e0a73d60cc2e4c84838642bba56d693752a04748ff50cb14269d00e067ef07dcd93fc1480d7483956240ba3ac97076d3417165a0514e77c69c52b1fb717f3d685407601607d7edc297fdef39f7bb6ca0e7df284c796269dd93d461006cea6d6cd9553a32add0952c2ad11deac8381c7b543e84ca7abc6256258a68d201ae7b79707a6d2bd3aa65bf4c817560c5083e6746c39413d5c97c81eeaaa93ca6c31be25a300ab57f5edb73f4cd24f923a7e24a613a2089ddfb3001bec4a40a8b5d47fcdf43c528f1b514e8d9618342580e90c0e17eddb7507baf1484d13b988608ca09fb4ed4953b434f6b11a38c03619753fb4f3a4131a198d413cc55bc2092e3c3ec781d31bad73e00353518d53befc6127bcb6ff6d86e06d74337873523d1393df781403db1f0003622f9efc6589d928b52dfed276020c24ed80c92354a410d9856bcd65898907ccf48d4d3f41884d213e74bd4a33a7171b03246e833430a1b2cb68ae628f039428a2d18e64b11325fdcfac6cceff0721d6852b68b886452dfeb9dcaa52dc20b091c74bf8a8507e2199e02c501efc10bb9d54b213473c937f1345858d5759f98e7315805beedf2799548316570a88718aa8eb58fc42fa4434456bd3cf682b3b88b1b65e7af0d4a19d5f42a25377f965755b0faaef8e22d3ea84d99663eafe8bc0f18a26dba77453ee505b58ce005367a92cc7e592e067ae94d7dbe7e4bcbee025636906a47fd170bd6cbfc4a7e5ff9f845bc92e88b3c8ca8572eaeb15f11122feee92da75f4ccdae6bc1de81a9b1aeb374d9d6350cc38cdac5a750f1118a55fba73f40161faf01c602f42d33442f8e6562bfb96a261f3b9e605d1cf31034abfd4059aa70c781bbfd0825559bdfe7e6bf29374bd132be78b1a62b0d3e9b32a1d52e3d0b09f07350726adedee11c6e5b85eb9b47f77e460c42d2d710634a224860bd8b047495c6b9b7545edb1acbb335c0be7856117be992c590747ef14366460bf67955360049708c508ff6ca69576a47b05bc2e169c25e2c950feca7603b1c1ce9419a042b0e66bab4444eab1b57e57e9d0c7a50bbbc80f32ba9eb3f2556f745499fee5c1457cc08d44a765cabeab7fbb70a27379cb95123b97f17fd8a864cbfa2eccc61d2bdd809b09ec4abb027dbdc5766a49896e759001da3ef325a3de7789fb5e3ca5fcff6185b5920258b57c992b5c4a3550147f54fa8277af65dddaa4f756a7f14fe419f74ef0d53214ec55ac6868562777e6fe0c3d87b5e312e32e72900f4898fe1dc1e5ad735342b7821f0e27c0776ac277c1c6b3fbd4cd9d3b286e7eabb8661da30590dee1ad3c9504df8dac635e20fa9e55495bab9496a3afffee1747aa519194f8dbf6c69fe09f369f7d4c236e2e5c33a9bc3fb6dbb76fca1a34604c381f079cda3525694d3faca9a215ca82ece1b06752a73030e8f7a7b1ebab9d842c7d46356c8d03f3097d39097f7bf1a0f1ac9a30819b84350b9dcf5d6086b2052e82bc73645e4512ab5cfcecce1efe758ee3538da79f25996b8b8802722333f4b3e3c390f247bfc46d5c2a958bd3e5e47382859648432db228a4f6dc8f2cdebb1e24dd18eae35ba410165f5b36a781c4742673dd1eff5d0737b6b390f818013a7979f60c36a815cfb4c24566b3c07b6afa0fb26769c89ead30813ae7222afdc958bc96dd6a552002418ba74100cebee269028e7cc5173b77ce49baf90f50478896312d7e22fc857e6b566e533a8f54f3cbf96e3ba66f9a84a1c6904c9ea4edd221afa228d9fbbcbe443021d6a33f58937bcece2d7d5357ac83d959c267fcb2f36c447939d70c430bcf2fddbbff47b0ca9850a93ddcdc7efd8f37292846b1e73838faa8cb35e2f10242bfd413f285b54bc49dd4106265c01cb15e6e72578b7f2f76c28264938ecdf0114df90f9b11582fd88afcbb94103ea3c0285bb1333b65386a629d26b162f92e5ec70eb1b8f3fa76e669b98bf3f3cf463ed77b7ab152ee94d73a2cfa3fc467c17bc8857fb6cc853562e756db006b072eece811e7cfeea6abf72978c8e7ec365e907ddb87f4f4ae0dbfbd6cc80e57fdb30bfd0cd72b54f5434c2416af9bc61d1ac97d884754ad174943d9e101459cbdb4f98bb2a8a388a52295c7e781b1f2b2c4fd9318cd870f882240d7abe26c72fcb336ccbe6c97d34261afada53f1314115fc89c70c03f5370a822975eacaf32faa57d71254174011549f89c645f2e277098198846643aa8fa4fcacca7516126b1614b15ededa70424a54383e1552ff49c8863360f13d52a8cdfaf99098c9eaad02592b3dd75ac62277359b3a772ef5197500157a11cafea8e613660fffe57d7ceb84d20632cc4980b5b0014677ef55ab589140865de04023409e77616f1ff258bc6c1421a2df4f2985d06f1b1f0f11ccc060166ee7a975f8fb98c0084eb1bb67c269c16553ea4e90c650df448116e7e97981f937d2d040e32b962442fa7dd374cdb38d42ad07dd2343726421586490e1831e7af4f1e7bb776e39144af4fadc572ffe90867de12b69dd05b50e7cc92c4543b606c68600da6fb73f4cc08d4b7a23b3e9bbd7a9a667d08d8ea7018789f45e2855dd898b92f84c06f863741668bc7f0ec7453e05817efb0d7943a879ed2e290ad6e634aa6affb05d69ea2e8cd8e5cee37cf0ac97ec5d3d4e654f0fb14a39249cf4dc8612af9662b13a823046dd9a2c60ccbbbba4e486619d3804bf9213e36101c10bebe53a18e47af520e998decec90901d0643a4092f4e197b61547af4b825df1d5c5a52cc5ecc39a66fe6774f1205e60963b7621f05f136635f9ad2ba91c112076439fdc306fc11f406d7bac26c42bb32e0b9de73cbd269075f486fd4b216a936a74c0f9668566e02bac88020c862e22e2111fc393a4ef58951b5765568c882df33f3d9f9f1fedd7cc51791c9efa4703f75e10f989d2950959a7d259ec9575b50af944ea1db258b567d6c0aa2e15c1fed15fa03c4808cfade0af5a308ee2dbf0b4d44ee1f763cc29fa677c8dfc12048cf7a9b6ce872db36573cad7d4af2eaa155e56faa41882c4d95b2537019a1134433e7ec844637999e6619ec46e172524fd582cbee28f48ac359eed60de9b0dbcf349c1b94357efac16b18c7ad673abb62684d04c316e2c35337e52f66cf5b839bad7763dc16e35f3ad3a09b760700e8aa91b2c7772cfab3b6f3edc5c3074e8fbca464b2aa522ce0d010b9d0e8835d0106083bda1fe05916a3e0d4c61f475035d7f06ceed5dfda81374fec881cc85cfab834c6efee209394a1625346820ccb2edab3a295b86179f5b4202d4edcf99ab8de90df0d74908e251d133e16676e2ad0e08ab3831eb59ce3bfc80ecc20167f778f2ba219f84b8cdbe7be7176c396f9c06047baa8fe1638340ceec3fe5b9024b523a0d9240870189da1198616d6211209072a9abcee98d54bec455ad876d971a6e85e43a5e83b23f0a762ceadea2428b3c294e11c7cd1e7c923734ae8c86f315752054507feaf800e465a8b3cce5b2d52d6d0a4cef767b0cfeadee03e667a3ab9103b5fa3ceb71726f32108abc534a512e9c724a6bceed5a28e3e9bdbda7c34803358016a771c9fc916924db257e83223540e99a72e80660125ed0692e6057165d8a063ebe32134e7c4690dba50b8bc931fb08541853385bb2a82af76f44be033add1accc7a2f49a2cf52ff6ee45cca117ccdb818aa05cddd55922a04a9ce641b89fa829c77ea8485b074f26e2e5adc6df9400457eb07d8f95857b3a03fb8b92da2e991332da2d63d007227522ed85799871e81c0180df44bf8ed81448e0e5e4e5d6b6f5e678db1e4c62b7090c28fef5bdb026e0cb39470e6aad26b2c1e27db7ab37a91af7c81c4b59bad17d269cd0c4718d747367cd0e4ca4f57adc1d9523cac7c768e3138c3086bbfc7d02066e84721639471acc84b96d4640fc2e34f9f8f88d6051c0f8ef2e77409d32b585f3d75891caf59db8cbe915b36f10f1970a5ec5c9853edb5b45df26c86964d63127e3503ff85ece829eb2b93bb3f1ef87737bdaa28dc4ef6c47d820d8d6a473aca205dd6df8b22cbb88dccee9d1f53288e930529c491afcdf62742a9e670373fe68f653be93f355f6c4e36e5371072d8b6209e5d22b7ea85556736eca36d940c706ade43f7051ce6e98ae2bedca70afdb589ec2e7ca704feef0363c1ce0f0d7519679667b0c0ac5864964996d7c88af774c38414249a646afa1f00ee2b18444056add2802d100a19fd062473cc80bcd26668cfc150db6cf61515270cf1182bf033e7bc339361cf260f4f98133574a42f5f627ca44b95d4f96817023e03d5e83c1ac61475fcbc894a74445b7628479783b095f5ae07dbe76db90c3f16e3dd70b341d263f4800dec36dc61246871ba74a4bf6f4cf9bd3ffa8272dbace088d6d0c46128e50f1b61e7eba74ccc5bb2b269e0402bba1464ad966ab91d53c5761f68485211f63d2f3b0bd941731b684988f0b5e57b70fe021f995d1d568c992297fa7ede7bd0ad90721f57a0377c9db779dbf1f1e833ca1c01fc9b11323d001572b98c7ff4477303960df3b4e8b9803a734c286055483786b271d25639bdc23788449100deb881a5fccc9cb2e4eb3c06ecef0ec8475cf768ebd41b7ab33dd4576bb0923db3a2daea8ed719601e4dee28ef71b3023a627ee73b8eadf645bf3290997e9682da88e090dc80fc9197648722bae6446a196d2b5053489afe0420bfa482ec711dc3e814409f772715bd2a4785cad427452d494cfb6509865ab58e2c1f3dbff41a87f2bbf82cdd40e11f97f2881fffc593171c5bc829b1068618ba3acc1348f9e8c08265fc92efa2252088fadfaaa182d666f78854764555a49cb833828feb7b9262f60bd639b264d528bd5f661c057982eafaf07658ccd21c8e8148670cd346977758da749e336cb9c28435116cf438655d7bc01949785153d3776e4d1c58d16000036f3071b953e9bdcdaabbaf74104f3491d1cb4bba69169f0ad33b8784ceb77a38ba04b37abcc42fedd3b710ad63ae34394f3ffd98b2914b91f77d483f83f1e8499dc1722ae284dfcd1e34abb27b3c658d7a439e647e82ae3830b49ef1ca29d9e7c100faa268c1e7958f7ed7f99f9a2adbb2823ca5099b36a5980b4adaed778031e731a084845e12c34fdd2c43d498e05add847b8b21ef9785e050490f615cc2bf364af013b387d9b8b2445992dfdef3bc222801622f99ab7316eac23472a24c59ca92dbd7ed51fd3f35c2e084abb93eb77c2bc91f027950960caf07b0296242b318efb1b8c211e46a7fc5444cd7f6e3969c4729a2d91368ca030f4dbb2e5bb62f920b5be1e5791d2fe6662ce03b74abf06bf65611decfe951e2851fcbcf7de861e8b1135e382b2e415b624e6479311ca269552f5cfd647278457e31d43218d4c65915e3f6d7fc9f5337aa4209d40e7611c75cfe3fd74c09f83f00609bd8cebea47e5d30d21b5322ee1d51b75daf17879ecbe68191db519fd22738008e8baadc83a6cd306368402974c5d38e4d5f2808f5ecdb90451aca3c57886e11c74dd37d48f01fa61f81849cda98c5b27417ea1c0f50204a74e9ee34f04fcc6ae4c2717776d9af3dcd5b53299c50cb3a5c276cbda9e00cb35153d02c09f25869f0bde2756960f59b8b86c23017f63d8f64ddd926589f0edd45c6d4abb58fd4ea18cd2339c45a86c3172d1d984e2dd5fde4f9041a664d2c7d7337d0d77980867cf63d33eadee5c67883cfbd70843d56a88b57ebe890c6d2f215d36d2821ca7c1e0b78af6f5a5bb32b06066b61b445ce9c39111860c82644090c73df972fb9967278b8580cffccf3ab81942df9e7e5972961b9b53fc209fcbfda6b63bbe34e78419c26ba1142cb4f15f3ec7cea059dc2912692df3ff046f5d8c4bc0ed11b6a7ba4e04a25f5feb546dc2ca8cd2fb97a0935380174ee974f9a0f796885e1c2460805e130da2e85034e82d4072a758bbd5df8ad8b6f58b0de00736f14ad48060f388dd1d99673eda5e492ec345cc4a312708c5d4e7981355f67c9bf6f825fab46b543c82d38139defa4976c0ab831b0c50ff05e199c697c4f3b45aab5bbe3c447fc758e48dea6c5fd4d32f5a8e61f8785a916d3ce70868b86db930249e16d3b66a6b8e397e71c6de2e51aabb39906e6efd6a3cd048284ec83b56633644144cb81b787d9063409662d9321686f4947c3e073e5c1b5cda1a577467d50ac9a2d5c92f964c8613f2bb6cf3da533b492d171dfd7849c42664db10de6761dd2b42e560b7ab89b843edc49f728afef3714ff9ba81dac39f0be245d195cfaa260cb90cae55ff84704b6a022b9294fb406d15522e48d29731c32654f733d6f3d1f49f05476b33bd0b221798c921ede301e946fe74b50962ecbdec3a90f7ebe8ba724888c4182988109e48cb0e79f9cab7716c5981e33cea017cd3ead61b6658478a0626cf8b1b846df235f2ae4ff0056ee91b7ddded3d501d57a9a81680bf54b67c6449af18cfbb4d513db06e0f1f206303ec7bc91fcc4cce096b20814c5bbb42913b6d26d188fa47bb6458683a5a374eaf9c7bbcd05555f234c45759c9eb01d3557e2aca926b95479bc02d28ec4e8b346db698d2ee16b722bf4f7d47eb431bc5ab69e361453c4556bb4c6f14f305838567a24668aa79588ba3f4c549aad321c2987afc62cbe804f60325a23c77d0b81842c8459735b16c8180a6311e35d0f67027b5cf035d860d81add517db3db936470da8d5b9018bc4a7707cc083a20d23bbd2b04b83ca0477cb0b1d182c79f53fa8640bfd0e10fed5b66d83d19eca2a07fd531ee129a3138cf1c7bd465202d64b0c94042d1b68aeb2c116aca904b1044fa7e3ab5e4c8584d098bdd6a9d22b5e677f496ef0d9f128fcaf169bf55c964bb80c22edc495e8a6ff05d7e758da1c7e851446f312b3a2be2e0ff98d5aa614fdb57bb44112dff04bac81ca7e159733d0cfc1e1077b709348ea4c122c5c2f97c4c9b3c129465f3627dbc1c94c689db7146cc0db68764fa3c86767f443e721cf90792da85c1debac0e0373af54f135634f8b5980c787a0fed81ae44f42cf6a9edd15fdfb2e70f7233c3252288f627e2c7874db0fecde91d39ab502467d87e00def907c7f68594ae47ac441bf99ba9f539ea7b59d3ea41cc795b5c05e79c70e9546f19c9cdd657f883d316ca3808393e73e76b7a500c146f07021e3bb9774306108ba9f1e44e4464de329c4a75ecc09d6c35e6279c1dc52d0cfe2701b4a4728f561abdd5b4077b00d5c2660883ac7a2ea5061bb66209fe3d06a7860f1e0c26bcd0241e9a355e6e9109a7d8666a168d3bedb3682dc26fe3bd0d0a92e8b019255e4652e955b9390fd1d01ea2668aa9f070a1e946b8f3e5d6083dd4fd227892358c462836d6a1b3f7369b49e4b7cfc4958052a2e5cabb10fa1b6963cf180af758c3a7a6dd325d2f1a411bcc97ea87d6e561f3d31fb4be0dde5e81e8d47eea3ee1cc44472ba7133ce66825cb55e078127cc9384f8ea00b99bfa5b159c677d73f60236a3d1ab8d6e84420c696a5b9fd3afca149c022aa3fce23da2b5b4d3ff300669901b7f84763b82ed7f7d00989258872dc9a59b8ef73b3e2129441a4bf7abfd6e4dc48068b33540c67194149f208b03ef45a21b45a12480c85c991cd801c702de7399a6b3281aa6560135f61ec9343ed5bcdaf5d255f66ba23a778537f7cbe369280948f65372526564cf3fa9ababb9a8e18e266c701adfaf8a16d6b9f7d7b63db6fd488f1733db955da50cf993413c31d95aa5155fe0de43229bcc3b55020da66fb720ee134cec7ce1f018560afe197162a1c688c663aacb405f2834219146ca5dd8c0e0f7922d2f7c89e8eac09e9153bed56b7c3a41fbad969b768b8b4e708593befa11ad2a642456f12878da51b75af119f6e3a5d28f92aab404b14a57811d2cb64b2f411f391bc7ac362f3e5c0848b8d03689616463d0178ada51ade32ae50599373c85072c28df613b10b30a06466ff062f34d8b953a2f68cf86b87194b5a4d28141e4192244a4aad72ba47c2d8eb0d794991aa388af00b32265f3f3df2a5ff3c116bac87c3fb68b239bcc359db75ad9958ae14b0fcff272d994036ea83c07f95e8422801390a2882e812723221c6f3fdec2de3ef12b2eed1b8bb03b0153fdb906e322ec77232a4faf9629412da76bbb53cdc9dc1098a26b0da49ae442870d9f6b89e911ebf096b5792f313a490dae7b5ccb1b48a7cba293283290c53d1488d55ce49dd94afb97719571cc41d8050614f766d24bb23bd4876c0b160a2307fbce0d6d5ab614806eb6d92b58d53025f50375591fd3d1e98ae447d72edaef2a38f3907dd9f06a87f2f207e89b0f29471fff2f42c0f2a2ef249df77cfa692b0660d7e4deba77eace7fda50debf14d03b9e14420eec69a8cd3723a9fad247cf6db3fd7981fecad69345199a307ce310e715193af477f3843b905271bd73921ada3743febfd3447e311edacf665321613cf067ecbd01d76d18bea831cfe4dcd2b1d85524dafda740a5c4b03be7c4a5d539452c858280f4f677eb16f244af14fde3d01a2fa1ef457cabc63937f4cf951f0e5984c641a149c4a9fcb5de06f4f6eefcd7fe9b9b9093e08927677b8ddadb4d4b04838f73ff41d26ff179b41c3470a4552d281baef4885f27c843f33979add94d9b5e2ba77cd10f462877c8c791f69d304b3ec114e986f4d6ba9bf3606a725c362e1f4a4b23997c95a4ca04f232f9b50b283134ce4f0aee826a03145a6afe90f8db20b68a48da7ddb30e815ad57fad31283328a702d89a6ed6fb22dca70e24b807b5668dd81361c19e4c04af4392d5d88fb2f7e3ba2689a0d2c568f9609085acea6386427e3aa2c483d469a33f10dff4e8e98d0062f2ae09fa2b8136c1eb376c7965be849489b550bece1b6b1176724e8bfcbceb08bb5753e81917748af9892ba37e75e05e95249c354614021b35af406d19862e9a5ce856862b30c080c0add59de4d5552abcae088e9f6abf3421ff085b7b20105c00342fbef84ec998358fcb960622fb4a1c75e50e9f776de6170e392601cc0c965532f991a583c111c0fef0ed628c13c48baf998de4c34b22ca401151f836f7c51e139a1c9379853e6d9c6b684b4c9d4799368fd892a1d64bfe1cb08e34eb4d6cdddf55bd6d01ee5aa6fb5042f2108e9c3561b4fe5d1bbb99478a71e055aba07ddc0b7dd6e56ff27d9593d14f28c8cbf7e3bad7b3cda15c39334cc7ee33a161bc350a6afcec5d4aedbf2201dc94b8b3fc22c864875fdc16a7a1c9c2d9dc52196a557d5576ba4d5f4a84e68231c2c7ad68374d8ef1788fdd069e369fae7656357cdbd5802bdfac56b01926d70e4a8a44fd4b87ff593d5fb49742d382f99bd1a88fbac583cc0db539aa358dd8789a78b55cb3a3ca0ec200dae1ee66b876ad1daab347588b8449472755e89c65f8851b40dacefdabab91984a3837dc3d648f95b98418e6b8bf9475b0728e5709399e740291fe64774984398ba317de075aa867cc352e96f3b64908199b17684aa0b5cfc211f3cb36961f7e97f657c1f545a411f2f3cded351bb2a3ff0d9fbe9345e97ad8e8ec8eb0baf749033d4b36822541c7f9e4b3386b29c19006270dbc27a92e974dcf023add9ab1ea8c65b81c89dbe0d662dd7e60fc1e96a808ce02532b6c7e8a50ba0db0a83966c0c74286392acbf8c6d65518929cf41e231e87e0f979ca1423348fb9dbb1a170c97ea664907ba43e6cdaba2d1629fb686b8356ef77a96de5632853e51b6651885082bf63722cee6a8f075339cda45053a75863d5604735d32b61ba5d9085c835bbe3af8a9cc5da5782ca47c71abfdd6905ef08129d8c5a6d81adc3c9c2de8cc339db9faac863893746ef6d4c2b41ad1bc1f7f38e1631708dd358dd8f623b144a9a97a92cf5525857f6c152e12f5d79c6d890cf4fc40f917f087323eb61addc1b20ad44783722c9b41c4e44b8205f7e610a35425044cffa5d007cb428d290a7629ca481e239f4c801091aa4799199ee29000fc6ee17dd33ebd1150a4be5d5624bae1f4cd082b04b22712f15750830aa71b8f5122b349b17f16e969884b89c9b4bcdca54f611363f0ab66ca627d3cdf4ebfcc902d5b697652b539ed39724b829f8fe103007ed572dbdd57216bf1a339afba93e2039bf57ecc33c81b5d4f756cd029a9d51023182997d4ddbb61926bcfc2b9c2717a58d06b2c11fdcc95d2b8118d50b31c07b7a7ddc79169609b2ba6b88d0362c12a0bb4f1de423e771bac06322c7a523d810cbcc35a697f3a80cd614cbd331dadec2e06f56019b30e89a4279ec8425908bb7784a0a3452a9896b57f3a27d0c09b673d20554442a23a648e33623f8117860fdc8735cbf5d7d129427303b515d6b6f62b4f59ba09926b206381d2b77c9070c17d64f8a23d00029bcaba370c14d8d0375f42ca5c65a1a6cb7dbbc273603bf1911fc8b7abacea7fb55bbd80b6e37ba51bdf9d47b22ec04a2438949e7089355d8214aa7064c93b85150a9d4084610aaadcf36c4d0c2caceff358e3107f1a5400218d43dab8a5a131f1de583701f76b5417b24e702271124ba57faecbac56671e6ae78fe2c8bbbefbaa46824ea42db94a53bf8b549c6795d4398ef91573d532d08db97e4f0790ba4032e9cec1409761d404dcbd75771d3279ba1bf7a75183d718e9956b7844e2e4e2292e86f9c2ba9dbfcdcca692c90b7762404e1cd9c6c78f2b38188c72666d29e0d93bc3e1c6aba96471c9b1d825ac6ffbde6507e0b4883de5b27e55b957c6498ce208e34489769cfdadac57bd5c3e4a40d8d0f48b8579ab18f340a5c78679bcdaabb093aa946635c156f189cc67e62fb800d52cf306564042f158823b410f210eb0ecba95381781c494f67adfd05513e7fd302abdbd487c8361842723c1b203b31bd0fc6b1ca0bd95337ac4bd86b310ec78ac6ef6010e66f741f59e3f02ffd9d43dd74a6929a840fc9eeecc71a09c707d3f5a7da4e5fd4a506d3c2ecda425912420e41ed27e3b63a9346055c0a7ec64cd94e49d064c52758a078d5ca206da3427dbad8cc0bea2cc625942290106b7f014b060831182adb74c7be860a3702853c7f29a6b22f4cfa4d2bf5cebdd23742a5cf4fecb3849cb9f346873de8675f9a76ada6fbb32b521cf800d9dd305cfaac9e79a9516de1c053bfd5876e3af6f2cb6d517745d3f52f0e9f4fa05ab08dc0ad5a951fca95b7e9f50bc3ca39c695218e4e4ecc721519e7d4d17eb68eb242afcdbcf8dee6c1eae3e29451e77456b399e5b3b8d5011a7f888196fcf83b67e5f93447f0fd5cac94d1124b551b103399a6a206cb8119dec2d9ed7cca333020c3210824a9745c118f8dfaa3491f2d3ff39ac6371cf90a20c08415742808e82c5eff24a713d524a4fd51d9757cf4264dbd3d1b23a8cffeb0f67d384f5344dceeca26c7fb7916102045778b11860383410e030f649504db07957c0abe5e1f889292fc32bf77a447652e8562c42abfbbfde1be8464fbd9ff8d84a8bdebee6ecca0b617ada4c9c71ebfe3c733c0efaf85156a2a0d601f9c2b230ad62b54a9be9d492a10b469866182a95c7f435edcc81481c901bc5254b975d06a7ad651639abd604176fc68f053c345f8f9cc40c593156a3b742e04f2036ca2131473549fbbb62bcc06b2437662fbeb6b382bf36c690cb1a3996746ff5d08d24676aa8792dcda79c529397b56c6eff4baff72bf891303c5bd8111502698f976aacdc62c58d2ffb7f4ba99396dac22c994eb3a17b2d2db12d4c971f5a3a5683a3f3cc0668090f98cff9d9662dfc7cc67b4d43e30ac8cfeaf15105d4af5a75d33795ed057f2d6e1014aa0a2f263f5325d68dc78ec7650c1084c885d4a594d7edc95077daf0551b2cac6c5db0b2b2595c489be1edfaff706245808b609febc5b68047acf25e000f16f4554d6292da36ec1a61ad72cb6abd92fc228edf5d8da520364e1e9e4f240102a12139fea07c65ffb0cbb57cdec0bca3c2d69bb9e2a404ef10d337a14a4bd59611949fd87c5815a077a7e9d24dd5f506e4fd0f27ade5ea4ca5807b2f02ef13dde88fd1ecde2ee786f6c8eba5455a5f816ca025438e3e241771e2881bb21ec371c45f3620fea7a8038e880c0f2f743e74d4a684f5761da3352f33b7f02ba8cdd661d5c08635a314ced3e7d8eec5d57cb767e70de0f5dc8d3b74fd5b9590b6b0f6898e59470af37a418c465b07ab056e8a70afa11c958e736ae1ae89e287302e4c26fd8b66959f6ae158986c480b2a44a0108a70e28503f1b5232cfcb9b33ecbafcdb29e9961fe5422fb6a1de47d5e76c613ef824e514755fb24940a77b53111931aaef72d591a1d07136d274e1a5dec3f7b0a49885dcb5f85c639369b4efd344ef5eb291c8c2340a535c2aba4911a81ee239c1341d39fcce30fee39731ca60c50a14bccee79edf665502939a033c9c13a214c61eefa2fda4f7de5001eff37da0c95e0d47fbc9d89456e4f06f0e678313b7a791727f77afe09cf33e29ef23583034cbf9a30956e698ceb3654cfbce243b2857c43f925fc9c4f52ed50c95e44a9eb09c4bc420aaea32d07c678375dc62c2d4ca38d77b7b669a2233dc556fd02d0577b51dcc6005af414c44ca072decc071b100506c0aedb55cb221d502d966593fccd13f51ef95150e943f77628d17b3e1b9aadaf35926262bc764c083c580a4dc8ae159d2f70d65e092accea0ecd5004e968da65e7bf260a24c1f4493dc6aaa02ecae360dc981d55c1993ed3a6b439013a738af05674c64ef311f04c89ce33d672fbb123eb08e9a0c4bdb6b7b7863638399100ce4b838abbdf5e47a00502ac5d278c7c4df56ff80d4ce76ac127797d5fd0c12e6ad706d88dd53ee54187a62a58584f8acc151e567248c8cfb53fa81d4437fa92f0dada470b136b6f8652d6a11b03dcdacb65ab0f78bca7685f5ae53a47bd58e1994c192ff82f76bf2c0d9a1212b589a73ce0e256294532ec7688da2e04ed3925016c4f0e9cc2ce730083e598e337d1d5741ac037c499a4a0a929e9e9e869a0cc2186741e49c70c1d2b5f916ed1556eb773b2be7578bc97717e77b46f5c45c1a2a5f42888acac03e9aaaa9603465a4ca70cd0fea24c6da758ce07b250d24641a6835bf57ccf9110a59a5a9361a0443be16caa7068ae448160315d29a5d876aa15506f41ee9920e6fdc6306805ccdd5e2e98114ab79f31656662d2ad0c9ea1c608ec45aa55e216d52d7c86368db0e9c0db5f9d0f55d7c13fec865331480ed080d4588d1b941cd078c209321621afdf9918cc7ede2b852da8b40ff7dfc2ec579590d337e057ef3f460943f2ae8c092aae3ba039fc2c4bea103556dd8db394a242f00d2a78bdb3fbfd51367213ed3cef4b5583c569864af9c0f39911bc015faf9d8fb8618f4f25e16a24801a97ae3f1b9228f141a2c89aa956880ab0a5711f63ddbcc5a62dd14b1475e18dc7bf9c4ced6fc4f24468c01be4f4491e44031da7499cf27203409d63bf0b11b99de5282fc9214dd4ce6b96356fd0b7ed3348968f3f41144ced0c9563b7b592c1d60823b489602d21e92299c5b67c4789fa2db9e3cf5c1b728015ed1f3a481e1356f98482107c7d00a6494c0b6450de2064c47838a36c0b5c93a38996475b344691ad8824667a44fea83a72d33e4c39c72e41afd8a31cea5512e8c4ffbf4e8690fd8b05995102d8c08a11c102bd878d8c0774426c53c8d2c14607321ea4a6531eda8f7d70e9de9d15b93c2c4e6bf4e64de44be0ed1cc5033dfca0798dbcc649a8013382e283abad4bc85feb8a98a824fa773ad0cb0d9cf2599497ea68b019b178a10a55159f81a83b38f0c963171ec8fc13dd60d1aa7052dad0921a40e549556997222a9946f2e796cc7348c10faa2d15773c043dc9e0b4cbd768215e36806c79d47d692dbaf76bb2a96752c6403a64a6b81c037d0902836e855c370c05817b76b792178a9456fda2423ec65b7088ba67307810efee55d250bb3c2729efaae5949ccbf269903042cd0f69b24ac32be0b56233a83774b897275b7af423af61bfbb6fd9f5a1299165693eef76f4710d4dc9f09f626fa794940438f1fa5f6d88ac55286a0eb732ea1d5dea7fa33a39d1b6313945e17a0b5c2d5f9aa512ac267b378756393d55eded67a56b80680c894650d760d821a075bbf0a4270b908885c4f689b50682574167a617f7813e35f456b04bee6c37f3d459f89d5c8d3cf8d8bda5c9923e907b8a4b08b73ab9d0be444cef5e01be5e7fbf0e0a006720fb3f8b3ce9fa0079203fed4c1cad8a075bfd34fe3e09c80f6a0e17ec5c64f2a8971e895150d0d6ec7c944ed3691cf88d82150a23f531fa2d150e659a3a039fbf357ff4ab0d975cceb536e6173be5efdf89f7119179bca9c3ae438944a70da15206e8274f5e2aef10545bdd6216a3def05c796aa1caeb7c85d8d9597bad4e488b44e30be20411761addbe168ec10eb615f77414725f0eac16e88cdcc5ce7d661d3b588e38a152e6c00f8dacb54076db4a8087924ec9dd9f89c21c863cf6c149765b5ca61cb92f52c7854fba408e20cd19dc3b924fe072606025d1d0787fbc457283f0f5a42ef6e19da7348887d6ad57d0eeee5811f54ec15ccb0996ae63629b745edfe0cbca29ddbb444cd452bb3bdcbd8ef1c68009c2e8c44f489043c11e6607328fabc3fe166b8d8205cf9db8cbd05f34dadf2d2af4f22c611f6a7e21fe68541b0d132cafd1605710aeff280fe9d0e7eace34f2ede24bc9fefa36e1d82c090a1f7c5aac1230e10a49c728da5b34665afd4cc10aae74a92a0310ae7f6c5f67e3efbef2a614d712600e1354d8243e585d0ca233b6a4b2dc83481a3b1a3078a1c93ab1c98edc55f8e89ed0aa6547fd1077b222eab016a7918e22c19093dbd5d60c926fa72b102b85805fd11fd85ce96bb8222890cd0f56eddce2ebdbe1ed6888b74d2e21044cd36d9bb06bc097155fd758205f3f898908f7835efb12c0ee1b9b03f2a713465fca6f7539556c5950d7e246a537cf073ab6ad07498a8a0c28e0d88991113b4db17f608477da2c157d4369d231eb5b38136228346ee1ea2d347cc13c6fc9de00ee31583e672b7ca798caa3e784e3dee9c18171e0c318603c0b6900a609db092ba4cb6dca2bec2967db2c8b6514ac77f831d24a8da9ab6350db08fb879725258728b45899da2726d9ca12ba137a60008da7d04b5e8e2b60f8daefe59efff2fd9daeef0254a6bcee36eb3c82b1daeeda202336830def9c0887c4b7372a6e950b343edb5dddd15eb09b9bacb1a13cbfb51470f775a7da9d5db79232531fdf4082abc92a8965b5a4248b2b9be39a05d9cf9e420effc853d6682277932f6e63aa6826ef0ecc939b8eca5965b173a6faa9483dc98e39faa11f6073754a9cc95da8e944c5eeaef3f6508e07292237a67a4cd182d5a009556d378786c0e7852501a81e3dd3516eb1a24b2c516d55f70f17f6578936f99973a7415c011e0bac43c2dacb09b5d79125039639aa25930010f356125e73b4de185ff5e1846d558d7f57018ef190a6b4551c3e529ebddb7bd68b2ad9c7a3b85c4c15e9a6b0a7fcd96a80f2b7b28f526f4e9e04d8137c909821b89bc095e61c296e26453b3e93572677ef7e8e0583abd8596dafc9a9f3f6eb366edcab6f90b70692912157a235d6a415a7764dbf6f799557591b723d0c37905cb60dd5c621afac9689cb86b49dd237d5dbb6d30c08c9dabc593b430606b818ab13a52d529b4f9e9bb5643eaa3d9d6c952f9c110c6cbf315d151d84335469d1496e5a36709684f6109ed814119b58ae08707a06bb1a735145ae56d5e2a4569cdab2ecaaf87de52f9f40e7245e219abddffc2c352ca57803e54c1b849ccccdac1a4f26d5e02b2bcb4a743b1cb044e92678fea3ff5369fdbf7854f3ac72fc06ff3e8ea9f972b37883cfbf54d86e187de884f742a0dfdb2d06148d2eae55e5827d383a95a41c551c3842b9a0a53eb6302e28d07dbd9d0be40f9e64fb8acdccbea4be781bf362ad014fee861252cea37f9ba4630e33ee33f2fcfa6197b8da8c14d1ec7d08165d5ea6381bab9d1f241bbb2e02954d115784afc579c947e269d21b8c2e861133d52d76c65bf485ded5f377e2f56af5b47ae618c6410f12e5293185f6f8456cf02b54c42c92e6b21a9a6cb0f9a24d43911773567304c711987da183a4dfb6d3cba010fb47f9879c6e864efa74f7b7cf9f1ce6bd65f0f00ed9b6b15df13f3fb837158b3c54f689c6353aec22f8122b008a36314e3a9f46d56862f8cc751a7d643207efc2e8b5819344976aa3fa5d676ab867f602d2b3619ae89b9ab2f13a3a8bca014e8a1ea42ea83a8c83a41e15d8ddf1b5cccc50bdd7a096a842e5ca085f7648cd4c8c07b5328143cebcefbcf4c21843815c531dea00f69a81aa5a6f7160d4bbd061ef56134b60bae67039dba96b33b4d533eeb7af7cf6cdadd4a00df3fe50548f3ec1c4f04f381adb2069c984057424bb8815ca12d1781e80024bd6cc40873b6aacb31863be952f0ab7c3b44fcde32e62a731b9dd7ab0660f0a52ed318f5633e3221cfbb0f605a7d077a0e13374e74ef2f5c293e1164c6d9491e1a224976223f6041528420f8a12c7860037adcfab3b085673586058cfcd8bc9e077c58b21c4fd58b4bb4197d3f466e4eaf1a6704f4194e98482a585d32cd75330804f1d0b5019d2c3f077a5fc13479d13a1453f7284c12eea39bf5776faa75ade843f2753115e356f2a62b8967e65edfb12551400c7c9c81e8133ead1b750e9d0c55e64e4a345e44510a23bd3d9b892434a1b3024721f569f435863348b21b5f284b2bb8a0d521545dc72e47c250834fe092016585e53c0da051c773a14e0ac026fa45caaa156d2e4ca52b37419b16744420ce0e6db917e861158d31ff65b71dc73aeb3f8e70818b7e75dfc9464fadf476185f236c393dbf0734e4cded017bbf2b00e6835feea4628eb95038e09bef32f9a6c184b5b6fb2c1ff13865deec78eab7cac6cee370efe4d81cdd277cc16cd35bfa739337cdbd8360cdd205be8835d9555ff6cfc847da599d29acf4370c875961e733afa79df18198a5958fd78d095f8a4d0ce7098909bd4214bec2f789476d948973dd6fbaa26890a5d5b69feb21b591d4c6574e455f377a055e8a7d1e0408d9ff6244b06ef4ce229804e6dbdcd9434a2454054101311da4bfe1595684b070a5db496c90bf529149180af250834d337597922d88b0a8e1096bbf82e1fafdd224f952d4e66cb3dbad46b5585cfa709cdd8fe4ec6b6d2300c65cab4914e8240af486a17634b71230351e1ec0657279a120d89573c5218dbd71fa1c694c29f7d76ac0094a97d0d3e4ec66473a9f1877edde8f63acba98406d1dfaa740d89c5cba0f43c31e67a842763bcd35713c32a8538f0982642a923a6f9d794c2ea6c0be4c450dee8f6d6631fb543e6b70fa9978e38799770c5c0214344fa824d3ef8919fd488973c6bfba160b7e340aaf8efcacd58461c7b2c49ab9056189b0fec5fc06b5f9f6568d22ad372c16a2497576d848e8c5aa1eb2f983f267e56bf86b15b24529c9b60a7d896c9b2cfbd7ebc6838680abf83d803eca36541a5b7c2bdd0d9e85c948eae3db8c83aa1449a4d015222df45c3050b7b972f5c16fea8fc75284ddf07c3c0d053adee1307c187dbe9a1b4100623b1d83381bc31c3872d37b5689ad136c512502447594693564ed0579beb250dd87b6048d1b32a05f0ad2e49a2d479eaec388c19e91bbb4060c1610314dde684864870b03d05d54c35e225d4e3dce942f6a37ab0df13a77f5af9d55bb06b759c842dd3a3020bdf68d19ee50887f5c62d8a6e7c3b9ac55694d0a5e6e94c0b775fa16d79be2154a31dff12462db17fbc3fca61f938898b34d81c394d5783f9c4f4ac2b41a0ff0f3a75cdba145c24616698c7e1fb18f546ecc17e403426f96dad1ed69e358b3e5090cc9d0f4276e52068b518b6ab7a7678b606c412e4edb609f0bdede3ec96314b1ce5711f67ff68d9c74a9893ac37ac0a9f28538022675efb3432efbfbbb32d3f76fd7efbb397a687bf26b4e7f768bfb93fc1e1d096e69f1a1189f27e56522eeeed7a3fbe673f3c34bc58be3bf5869bb1029359493791e7b61a3e07ddacc3e64b46e460a59c29f5a2a3546e9031ebf3db05ec8b406e406ba2477a7db0b8dc1999fed3b6179e40296c4eb133e01be55dc14e615cff2afd3f7d3dfb270d6458f686f0002d77129c77829dae823aadef223888dbee2a305494c4aab7b3915ea6fcc7376ebd6a4bcaa89425929a463d2122da2a9845d9270bb30c5c33aa3ad43c941a06bf4e43b07f2d3f517c6601423057ef82f274075c8c25a688180a4717eb52fa5bddd343081fbf4bb50fcc0b81a3d51b03a4dd31117baeefc55c66cbbca83d6f0856cca7550b8b2063d0b83b2e0fae557489b92abba81c79c01e6389767bd334e2c729aaae409750f0181795066222650788db738ee0851744a663c97ecd3981469ff96f8a6ca31fdfcff794b61a21ceb544dfdccf7fa68ed83c5157d89ef17c804d96f384ba06c4fa57d83d8ae667c6574824fc6ac4a988b7f83745fba743f38200d35c399d896b3b56e04ba6f64e3144c40e088cbac822c7724b98d0c5dc7b7c6aae14021424d91e622e247baaf8098af1c26d7452e7a7cfc23cd8e632ea57a2c562b87a14c992b236c446aa8a9b5f62240cbcb2b4b6d81d6045718d7e15236eea728873fddde6a4f52ffa33619130ecddb44ee73904eea5b03b29c137fe2a82021afcd98fe08c2520008cf8f100bb35c9b8e1e0db9da1745268950f5929a8fc976dc92cbc81be861109255fad65c3b9f954cc8470aba1eb110d01b59f902a15059a03986b6ae75afca99047fe2da1aeacccfae28bf83b3fa0db1c44cf3a0e1dfca587a6d6f0369b9f0c38fa64e5755e5f8f11d6c73dec70a20fc9dc41d3c5657bdbb04017d6ec1d3960786a14bea52c3d64f197744182865bae696671c567c28d99db29365b0780b21d24735edc0913cb0514fedfb208cf67980d162c15e6ef3ceb79c9e3be10e3677f1e34fa028a7270476091d6f9f3c86149ea9a47a5129c27db21d2c7e54bbc3f4eab36eedfed87b683ee42ed01550ddd3e9515c253ccf7624950f96dbea535079cd9acbf85f456b7678cd6c6abad4781a769db3f3fcda9aa39f7e07921eb5fd222e991333f9608b78d238a55252da005e1ccee0987c5a5fdf422bf646d4f85ccb60cf6d8db373cf1ff25bbdc640f58b4a36d35c28608daf53ed75775bc525d50c064cbe206914547f04051f49f49d7db699fb2b57d460be4c21072cdadbb11bbe556115c0a943a949cae2edf65ac1c804285d9b8c55f2efe983cebfa7e7dd0057997188ef66e5d521313d52079105f9bb23ff13dac3e909d60608e02327430f20c900feccffe49be471ffd37874ef3f02392fbdee1f20696da57586763cfc30e4b42e53c33297e6a4f01de7684bec6a91ae4f12de24f80f45adb74f7749cfa2dcc17f19a43fc1be3c755c45defc4188620d60c3d894964ad303a075c0ecee30b5332a8d121ad5d881264f69beaf108d9f0f47eaf6207d555cb98f9fd96ce14155e0bcacbf460edbc60503220ff81732aa9dc027c6b3105265f36964e5100c258140e7dc312c98f737383d1f09d33adac793de085711546e10d72f5d78b03a1a58326a98c1a442ac0cf1eaed1f4d3c227aebb49a6c8c6cf629b30bb3f3e6f98f378931ff2557ccb066a8131dae16135b52195d30a18e08b08a62dc86a402650118e072168313da2735f1ba9eb1b1a497c6072420c5f822c17c276ec6c404650baf2b249853f8dae51dbfc5f2c2655fa278bd4703e9aed1270667138e3c69f3b59203b17753e7cb4a584a55eacb88e11a1c98e219db57dd61b01e59acca778dc55cbcc3618c88ec8795451fbdd8410cd14e54b0289ed4f886e5f5eafdd73aa1cf2e74c4f997900c7e968101d53509de0ecc220de1c4f71f56a54377c10b051d727df567106d836d087116de5b62361c019fe95f7e834462c25fc18b53bc2bfda190bea55ab363e1aaa832b096d72ee49caa9e623f01abc0e421d1fd312b1a62461bdcdb19cf5d7f6592478cc2262f8fa9e4f036a1123ad7363021ce63a73301127c327b5848eff1f23c5375a14d6b8cb07d385b32b46fde87c60de60db8fdb2e1358f43c6c661a4e0e9e84f451b6df973b52f49d4762171d3372308fa32a965e3815b7fd77e47a47a19fe0d2dc25e69f532d55438beeb08ec88847299525b9e6e0d953fccc50cd6ae49c0fc796cd9dd4d74242af48edac2921272950f24c88f4537430ec4d8f1b36e60c4a2e1791067d8f8396a27f27cc4a3da28a561d85f89fdd2e4b18829d2c8d76a4b281289f5edd617e4a755683188de8d3b2a5a242722cb3d60b77e7cc04bbf77b3367bb180a6119574e661c355e4ab6885b92cd56ac01f9c09968280d10b18afb631ad34a226212f70603f66465622cf50ce65b099c6acdc408915d9a6b4587f524d7bb67f1ca90d099793b4c19912e9cafe0ec259bd14b20e99615171d6ea2b3b98fe40bd210109f55ccf0b7bd08f0453cbb54b3d309a8ccd01e30c91e15b661f853f4bb55e26e2c3402b71176001ffbf4f1566f74452dea2cfeb596c2f47e1e26bd3704d4b14a07eb66df31dcd6c18331f89829aa8f763aa944f6cae8f8e4737040263113adce2a8155a7cebef67b51a2bff74910d9277d99a50d490d50f9f5f82defdf422bd606ec2c36f01ce91b34915c264f52f7b527134a32109c4f6268c48a6e8778fe303412c0bd668319cea2ec6c5c62bea9e5d5f39ab868ff462b6a927680ffb851fed2aa4a4c33aee5c2508dd264238bd666bca9b433ccb5f2cec2350b0f21efc7b2971b09cf19052805bbae85a81c6c19f07320a91d34b1eacfe96855ce80cd8ae9b4d2ba0a9e6ebf7fefba6c9e05d164fd6fd73ef5b2cdcca562a7d9e4260711bacc5553f351d5e14ffac636a394cf3c00c3492207c67fb36df510245ce8594efd1ce6254d2f83422e0cbd27bd1c8ce954c2bb0747b0278b7daff7800a090e2eb9715536e3c161f9ff19b5915b13d5786d70d50f9cbe39ed6ddf438b4a6ef9155f26ac62ad50df72240994d21aee45f7c84e8e5c6f4f99f6457ac945ae91a6bc0ad4b016f344043c60d43a4e3b22af9ae2fddc1d8c6945794d400244e2e0b2d8ea6676fe2129291f0d4e835d1e43b348f300a581d443ed7c1937cd986621c0ed5a9f1ecdeb0354e53ab84846dbdffd5e5775c87bacda0293f2ec9fde91592d081fe1ac6e198c337998ee9b7ddf7b9324ea196ba57314c2e58e3ea188f2861fa6a5a4ae2663fb827ce0337799dd01fde59e9d20ddac8dcb6936b7869c1dfc2dffa71a668d4df79711197ce3c23dc2e5c2b90fb28e9ad1b11a8ab8270f697bab0ff74ee9019cf8b135678c5437ad304f03bba594c85efae1e5a5c5206b780d7a04bb9dbcaf290a72ed626977d3f1d7669427cd8ab2bc28a09dcf74c7beb54a6506023b0bad722c57ed9b9e9222a7e03eb10ba3c64ec6ea572cf02475dff1654a88780c62fe882110cf7379de1eaa146d6f8d7c4e6b0ca3e192d3dbe495d70229b5e225320a64ed623eac33b007403c3f236c21d3045836a6988f8a3e8eea1cc7279ec61112b8cc6fe0fb3aeb292e2cafab1c3151f69bcd504d6b5a1cf4bbe5c6da8052e5c20707cdd9d6b0023fd25a50c1aa97027c54a0f6c17104c5764a6bfe70e0ef0387125f6675fbf202e0a35d0981ee5bee51ef37c946a59ddbeab40ea8fa86c94a596db5bb5d36ccbab1776b2e493e3c20b7c06b48154b8ca78370dd3642f744f656007287988977bf4d3cbc3d5d4326a3872dc8b0b8d0bfec5d3b66643ccf6de7603fe311f7c404835644b7d038fa13f32fad72dadc86b89296ea5067e8f9ff9e0c44f2db8b4433c2afd16598ad31c01e3bbeb16dd14b66863a2017b0c5f5394e34fe33bcf1f69a13bfeaa55893818407cf801b35b55842dcef2a43cb15dd4b1519d38143e37edda7df62bcccfdf4f274e02d26eb1c7ba4ae9bf74689e0bd1f55eefb73c2aad121c47f04ecd5fc7f2363a3455097bcae5faf27a505764b085721e0a62e6436dc920c100b782339d01c713c12cca126fb6ef15daf33c736ec8d42cc938fc2e6c0f252b8750c74c3785e3cb35b312b0d63feb8717ff4e36adc272a4dd2ecf6e0cc8e91cc5b4906b621963a0496dae65a7ae1d11bfbeca69d83cba4393aa19e2d6aa69289bc97e1dfec7c80ee0ccd0a3e923739dadbed2d9646dd81c3dbdda1457b7c92a77922657773296084cec591e63d85011c14d2c1fd89ed8ce0c2c2236c39ed3149c3389efc218a8f3de00c8ee0550f5ec43b70d4ef6ef1b539ad6ff71ce5223653c613acbab29347a4b4d73d92e7310ef65a984f6881f6a9b0cef2d60d649cca613f95ff7443e484b4c70a9d2078866aad83855baf9b70a6361542c9510c49217c6be4d5df8798c064acbd64d3a009f4611b5f8a2998b181e6a6a76c8845e62bae89573d564a14f2386a4a29feb0d260f8d4b132e4793fab006845015c4f5c1294e18eac359dbf19896a6f2e25ac6fe7fcfda86d2ea35acc5fcba91535ec0ea52db68fbc7758e35c7bd87ab5d985de39aa789dcb962f1ae040f5bd8d7e31a72df81cb910b77dde3997e9ea2d616d54b3089af82fc2a6eea75957adcbf7e83f1f7ed9bd5c52b01694b7a78a7b50ddf6f5589e5773eb0f4c2634b80a2bde6dcc50c6fd2e1a9a11d2511fdc2767c43719daf643a1d3b730230c099327e074aa5456b669a7928b470563292d37f0b0104c55931d62eeaee035298802170ac258f1655529a38cbf1cd3361474cc1d8af07dbb82b3d75f3c2d455c90753b631c6440a837fd48fecba0644fbaafd8cb1fc02ad03668183dc1b3cfc01f5deeda4fa4224d4e60c7be1f90c5ec0a26f1276f0c2ceec4492a6609de9e05228ebf68bd5d4eff9088cc3cae4ed22bedbae26b024507c4e17c0e72300a24588ea36bcd9e20bde36923b41381c786ca357cdc9614e7476dbb8e4f2a53a6063fb56889ad4e2ee403fc31914633868d4499192b3d9bcef03f85e62fe337a8b34b9eea5da7d04a48a89aa657614e14dc902289bf6e74c46679b46641f0195933be64da8e24402387e6e9a53a49882564b4f71ac46e20f9aff09cff5f7cf403d5437690321e304c7639c52f1ef6d6a2b0f1fac15ca3de266bac9a4957b5b394f64892dffbfb4357d89f596d5b6bc81eb0d2cbcd359c3e7cc601275f541b7c2f5869c68403e058bb10cea43c1a509487de0b4eaacc5bb97cda71305eb5a333c6266bc53dc0d63026c03b17c7ffa6e9648aaa05bf716db35e21b95972b2fcb5e35048b082727d642da737593108af7a22f0ffe30a5684809b6bbece00555a7c5f1df2c1fd585f45360dd0e6df53a10f36d6c9b93ec81a9d499d63212e61f08cb4a6fb0cf5fdfb6563a5c7cb75d8b6edc182a15e3b072adc38f25e50983869371674eec53010c831f4a3f1519fe122409b3b90e8ee66ffd7a1559e42786ba1d710bb0bbb03685bd5e92a3cea8a79de8dbeaf091c66f5c19ab3096afebe9300a6d2dac2d6bd7e0e3b847e4048f29413b55810436fde98f681aea96375b0b5c0adf1711b64db4413c3b456a815d0bdd4db685b183a2c794976dfd7562ff860c380408cdc9a62c0d34f5131b8217d8d20a72b3eecd59e6d30c925f3e55a20ef0c219c52feda5f5e0fd1f39d061981e6a94ba56b53aaa72c47298205c322c7b363ed546a71ed70a1cef0b2eb68bc8680fcc71e5d437b2976bb3491fd0d1cb03036e1ea31bf5e5e34302dde773c5279abf80d14d314a022d943e5953706a606f500f5cd84117749393e2cf0929a3384365cb3c40d9dec95010f34335429796102873ef3036122b63236a4814e8e64c5dc39ed22e9f1b007251fdd2c910b09cb189a71949271dd16b5ca9e0582f599e8a987f556dd8a7fa12ead225f57a89c36502092490a5a0c6968b20d5b97e7d7ae2d88a8be0eaa16e16798f89d1c1b7bd81679da4258f3e860c46e0f1b0f1a4d43fe1cd356cd02ba2ccbf4ec1aa83fb4df6ef6564a848779d0221cef68153e7b5c2f172255f85cafa89e7c21b1007e976eab5de8eb88d3e549057235158a4cbd7a363458aac2317352697f3139008e0d6a8649186e42ef7a4f1de397290a1de592451b430acef5382c21bf1b7e67c7ee5a65c246fb27c32302f47ba21755f9bcefecc64d9fa9d3d74d550453c65c34a9ec5a112c9d47c5213f6d752b75aa7ffff74d9e3c8fa771f3ad91e3816536b3eb6d94546a836f60131e0e2161837e32360d8c6d3be32c1ead8023fc9bcf782a26f470f17ef2c7c107ed449762d2d24a74e2ffa95c7de68e81f84e7b43420767c9941426d5975e6c9d088fdff7f45d5bf9d2705b31b8bdd564aefbbdd0941bcc509dcc92695b06701331cb742df10f9c1b3386108a6c3541f2224467d38e38fc8a9ef124237bc5c50c1a2c797d88843ba42aac2203e7e92af986faae37295c3f7d352ec2b08ee669fd93fa842c2772c1954540fc1f8ee24873e1364d24272cbc8f26b7ec91182d3c8625a7bbde66a65a9ab50136e883862a80836361f7db5df95812e90c124598b59a2b87603bfac7511fab88e30cc8653e6aac51ca860b79ae510c52702c2a2eecd1883d9ad45f98ec6cc1fe5eb200aa2c6a690bfacfa2caacd18e5f347982a80b9b94f575d68c2fa33832bcc39fc16182544f392c74742c67ca92706ee2752874d2506249d88a7dad3d9f17a56e56ab277e199abcc6368168a2b1705c87accc21e75b7502036cd80943e77de4bd85464edd59c0877511cd763a44a751a1902f0cb28a0a96143aaf565df2cce825877abeea111e1bde8be4f7f43f6151072a0f009f24f69fd7c5318609e1ca5ea21d1bc7f99da00a0f80dc661bfb205793cde3f375ca55452912a1f8bcd737baa1b6c1431ff1effdd4742c2a6dc8c5ecc5fef1160c1fe3a22d0db4f8d60b74eca73ae1dc3c8db17e6802e7748b8b1c930c311103c5097f28a47e2c9511e48bc27f39181ea4960488d0b4a944505f42d4990039a0631358aac016f460428a24e95960c8236409eaaf4537ae6a2ce75692ba1cb546159377be6cc1a9326c04dc6b0c0eb67b11601b22a1b922dd301d0f6cb9249c18d1b63cd8054355357190e283e1f39d7b80ccac1a6a25ed82edcb264d5e7700fc7697b5f5ca631e20d8ded6e00b69ddbb6db4f2aa2fa8fc6bcbac63c86a04425bf8392a59fa5648b674b2419ff352e7f47f96fb7ef47ba371d97cea5715ce8994e194ff493a49fb9fc3759ceb2d491dcd1410e95ea46688ecef37c6444101bd0dffa6110d5a8f4a24d16550216e331b159eef7b48eb2c094f9be4d099cabae598c12f2b4e92a4e6faaf0c744eef4440516c0d7404eb1bb9f2f906c11780be0d257a2f14da74c914ad3ebaecb99a2cce8b34a81701b688ec01dde10991603a97e23ffed124b1911cb9f86f4a5fe7c412bd812dcb655802d11f066f1e825fe47291f990f6a1ef09adf19227f6b8d9d3a441c6f11eacf90f1f8e5ea815dd882e3e6cf57fed445f70168197503f8ba78fdbc5a0d63e8aa8381077ec7e51768a5925dcd93c6c3eb9e2f16bbf365f5195a4b7f154012725e18099ba92ed31a75ffe859d02cb3878f6b82dac6bfafbf4b78aa4f815779136b21ab84ae65d0d117b47c9a774fa2bee52e09be60c2550ad2407643a48825b488a03bd39eb722654cbf208fa5ecc37a6f4704278bb82d73b2d53da256b634cca25e6d62f9d84550db1ad239e16dc448934fce5d9e3daeb47fb326b09a78bd320325b9c7eb3d6c299e639cc1988f2a3d807df87743c067ea674fb3348a66d6a2271a8a42f05693ececcf29aa296760e1297fffdbbee5c7c68539309c254d12df13bff730aa376a97d2f333dba4e37dc2a83917f5d7cceae0117164e6373d4eb0c9a3716fc42f2c978cb599d3c33f2a00124b5e0ceb7b03bd8f2170919076e68718beeb4c12a1319f7c9e86482b3e00c1b817da035c7d589e1635667ab14336000c1ee5b8ce7fa41a401f00248de167235484d3a3c3b322e3520144f6c41414ba08f51c246b0b40a5dc4a8010c7ad75d752cf9b23fe2b5940828158ceca02d780a08009a3e923c7168a1c13895f41dcddbcc0b9390c8ad4accb6f0fb0992a2940907c1f32fbc68b426b7412ee3caef469f86d172ba07d3a03a8e85ae34f961e0fad919f45e07512a152fabae263415b176f6c5367249e7ddcd9900afdfa84f6c73aec96587644aa50ca2b808b0accb1db59b97f9980946af2dc12c3c4f89d0b15b3d2ba61b47c99d72a9a0f1104c10ddd278cb9d3d54458184c42e3515db08d70f4ab609d8562e682417668b3c7fb0bf6547e3783632c3862ab328ac231a6760e2ddbe9ea5db5bd0f18b09caf0c3fd3b0092ebd34d27cec73eef087f05b3ef28b58a739db918e57f09f8284ee924af8cc47ff9eedcd194c231edde6f8cfcee337b7f2dfae8596c4f50cda0cc3be3000dd00f6608dde9d815bb6b45c7ade5b9c7c676d1cd3aaaeca6d558fc8b159de61be1d331a5bd2303b52ffdd58dc7f1001ede517f7ee3beaa9937083a208c3e27a8adb6ebf41817e4ded925630240a5dcb53f127e5b015b073f62f5fe6e7bdccdb47bfbc030fa9555c81ac92f548b46ec2a5492321a3ba116d2d1079d07915755a8dd773afc125f8d0e27011565abb718c76e60870e3a49aa426f5e9122fa4f94d8f73d625c240bd0af8c86c53c597edcde46d6af156e97750fb235e562f9179495c117b43ff499ef2d9884f82f735cdc37a7d1cb030a77a8ca3d9665e52497edfb4a333d7380df1f5caca37a2997abf6ec79504aba033b0ea1a78907107ea6637984f0899126e27240c37f609259c9edc04c9094eebb5776969838942a99b218b08cee783e95d86a17b07e229c6d28aca21e90d245b27463d05b3be853d5348b994d19c58d58e1a91a0340a590bb855714ce02a521c3e8700ba9d0cc97a4b5627a1bf556873b10402afd1c8b9d44fa4ebd392ce65e3082388640bc861f02fa3b45a38f5a179bab97356f29ddb8fb63fabf63388366c47c4dfd611c3d87d7faac1518047ef9c83bea3faf74beee30146bbca5373325dca51c0a6d9e39352ada3e989882b8e33a14281a12072c346cb11cfbe6e272b7faf89bd61cfaf523f743a35dbcc2e99dce6ae71871404e6247e33c831fd360d3fa4dbb99d9729156c5011a4fb6f16e6310419d770af805831d13897c0358f1385794badd87566f66eaf307c82bb8caee5b0a67de55ffdefb35e5b9e8183ef2780086913d8a466894fac194d283690d336a39719efd9ea4f763cc2aee443251838da37cd862026e057b29aadde3e50f1e7ff84474466fe8654e33a61c54a830269aeea408a75f3635c45b29a0ddb4f9241896e03413aa2ccfac2bd8efc949d43d507aadf41572ce5d73850381f870bbd0c4385d03be2b2186762eca42569d2ab7fe31772026165311c63ba23763f43992a0283784f8c95f8684d58f65a3815d833b5b6b999dfbd9c6e449a3a6198850c72accb049f729834ad2c5e82e1f644d8246d70e37212fada0061ca8618962bde5ac9ec03046791428ecd0a9716add12b51eceb19ba21a744926e31117f586926c2915d065f5a7104f29100fedf51bd651b9295c759dccbbfe40a29a619408be9c30ad855f7bdd044d5610c0895b2097d45012c5b940f812ce2da241d8026171746246b180db0b89992c41d4019f4c628dd03e52869d4ce2fdd5fc111966fec7a2c8ce0837c94998fd3e9337af058e061cbc4c318b2964058d652aadef47c949ad5ec221770d251b5a8c45e4a9388f152baaa9c330912cc60c9967441ea6ce07350af1efc389f293ce6859e5cde7d47c758e3582b352c7b7fd60f057e9c24b6dcedca2f0ea2a4c2eae06347b307fbdb2538b90608953986cf94d94c6f85dd25fc30d9500a2f1521bc0276b32f41a85805ad0a7a4c2666fcd3e7bb3c33f7b7c86dbc8980f7cb470c91afeb0bb408ccf5021ee99511c283f9d511d02626f2a9d165e9726788984d7e4305ef65ae3ea16f0817a69a9a9562ea8a428b50325aa05b337487a9c81932bda0f6317bc5efaadd55ddd0104746c391001b3d519d781b1bdd91d37627b5c8a71005b0d00e43dcfcb6bd691d900c9ef878aec8046e9a6ba0857db0e273f4e890d5abc801c7fc538a64c5f118d0807a8e1b7d09c84b642ab2efe70bb580e4187959a2b801ed916ce5a7ac067412812d6e7c52b6095b0b2e76c9d13f4a7158e9816d0f6d5c1d5c2da20ee661bd1436c8749bd6b646f638c46b8d0e642dcb25d7fcbd8ad533ad7fc6341a3730491a47f80ae7b78af732317dbd7a66bef6fd822c028102db06d09678f3c297a012405efd3c5d527ed60c1bd5fb1cafecefea9c44c98208fc0112969f12bda0f1333286940ed122ca1fde312365f2008f1a3fcf21d2c49692aa5b40f509101c3d3e25b869a1d479def8e45ec80b03f6d88479216655d008f2f02e3dc21bf519f55390669d881036dd792028a1b6929588a439b3bfc23ceebc020e3ca0d6e5df5eb6a47d73de8ce7dd580ae3f0025f9e544d464524144361102b37f78399646931b60fa94e8e411c7cde9c0d0a183fef8430a4eb03c4f8da80e9bce0f403e5231b821c2e5550f949b337c317d2f048cc29ae2072d7a5ef86bb0ff3305e6e38c114b0d28b9a152888492fd8c0c981744b20b6d8e07d63bff8ffddcd7881e7ddc5769bd3fdaa1aeaeb0c0ab496e581368b24eec6c390538a8326cf5830aba7c9f2c1e6e85ad3633fc669ad54388f510906867195410992094822d2c599c2b680f4ee5ff386c30e599a185e4d2b08367e599d36ecd7b9eb1146d01b09827dea3f599c5bea54d727683325dd451abf6ed4975b00e2667d55bb2707fc54aab01c79a316cd9223d60c3e16b0fbc6cb710f023735809a6a44766c7226abced1fd4e82abfb416f4498c92df24669b5f3ded4b5ca7624d1462e56c3ba16459ef2f137964906ee27e60d40eef7d6614ea6b201fcf64b25b3857fc86b5d0a6797bbb40625c64e4e20e194bb74f6e1e132dd84cec1cb0e7248ce9134a722054388fc7d7069b52489183949e0ed2cc4db45c5b49f34534d07adbfd63f9d97cdb5de6ddb3cf1da76a8170077896abbf5ddd79d0568883c8060ad119e95e44a5b5fe0aa66cd65ef4cbc37597655569749d17a355b555dbfe5dd4405c21d9e84035ad4211d001f35cf7805948f48272f266d00a01a2ce2997091ce571c34b8db4a95bcd13e7b3cfad865a3ff6baebb10c7c95bb9109843b41e55e0880f55b613c43d2b52c9b625ff328e775e23597cf0b5c64b3a78490b951c8e7bcff643d0098f49b0bcac4efdcdac070926b295d1883c1bc50cf8d1c46943569869d5cfb9e35158ebdd9fe6f71703f768fcad9efdc22b1d4b049fd13abb0d2dbeb076c582c1a9798566b0e95f237af1d8e82600fa7680028af750e0e6896b1dbd8df0baccf25543ed3891a4253825e5257121a4b593ee4b5736178eef311441fe27ea1d44a57521fea2f96d4f07e39d61bfe4163fddcef460688fea278dcbff4dfd53995b5aabd160cfa3386dd98504e800c737278ee743a41096e3809314d3f2161ffc06c6d7e6958b8c3503d975a81f9084a10e61d00345d71b83af295725f992cba9a987528d6554ec79bd7ba6ec3fa75b4d5839507ea5bf236adda99cd78d5e8160c8f444f7e3b2a72013be652d6403ca22495a5ab50801108211e0306a99f2645b7727b68fc2bbf5de9618164e58f0e4ac2fa1ba0ac1f08625f3f3bf3af35acaef95e487e3cbfffc4acb474f69664252ebbdc2ad6020864013359d1a43241328c6ecca321f3060d1c47caa7328413ce08988cc7ee8b324417e9f49cd6315653bacf863a54875fab983cddefd9ed4ff8fae62cbd2b7cd66cb61ae49a8e288068108479edb94563185530585c34d337197f419f7af54449d9f7caf889ea8d08f2740bbe02e60cb950d286695e191a0e3b3899135b059e6fe5121a533ebf4a05811e4b91f9b698d58a94e0e47441e2cfb94ece5a182b3a30a9ffa18e32ae2f791e52ac5dadce54ef5ce5740d97d1195969abcf4df40b8e9552ac306893f0cb141636b31a01f9df393a990af6ec9c45e8953aaf309ee80bfc5a428bfcca970292e976d88ba97b4f7726b428d19544ce04a96928d31f24deda8dc4c0f28ee639aa3fe052cad0039b98fe5c6e8651659c12f6e7350f0eda67b5371e179d035ca69f54c37eb699beee3eda84e949d12db4fb2007b5f0fd94fa092e63c1ad2ac0cea6785737a2e6303806ad10586a57a14a77358bb9833be8eb6df15cfd7202c5fa12d129b568c8f15a031533e1682885ffeafedc9d154ff29e8412caf2aedea63cbc97113cf72c41d09846bea871a7eaac2132a296043a2d6e17f25e593f60af079f84834b3ab64b0ccc4f0e48c8d41d6f8aa2adeb3a57b61f09ec6b24d5e50f98783d4999d49c6d5157e58ece43e3c7b51f1c81357c8a78af7be1078281dce90ca9c7b6ef8f59ee603e53ea3cb7c34e0554af45d3b4b4b8abcfa562ae9700ea664ddda0577abf5e6bde4a9806d519659886f098066110b670105adc05c7301a6e3dd77bd2d1de2d913c69c80552dc004119fcdb7a406b806e0950d171a7896f97ec0a20c114512d633295bef4bfcf3c308ade41588c30d992c953c73ccddda6824e5a2de580d2046eb0c5907d2dfc7ee170f9f06fe6d09c13520ba32e88a2e3397abffb9b84b5727d30e720fd3b38129dc675842d0f5fcb8592715b47738a6034c597b321148dc4441ac1fd42bfaedfb71425d4eddacde0fa5dfec15e86af8ae94238d67525170221906003b587ea793d6eb83643934359484f3beb9ae5e6dfd87165866f04d540de42e1ffefee3705ba73b6db2fc731061e94595ef2c1ce87444f26eb1e4a420bf5c6aac15290ce746ff895ecd25e3629b1ba440b38c9628e6c15df16d1d59ee59e6a92d1d6b997827b458ed87df0c7e2f6d200c0a6de583d84e3ad1e9cc7d0b97e5b5887b7d1aa56e51db4bd8e29475b0c195ba65662b184196fb7b7f23c6658508f7c097d9fe5d038c3568c6fd1e28e3bb40c267457d62778f366b780517246bf3bce0a7a4592621c4a78e0e823f3f1ea99d6557c606fd01b2f46302813619164c48accfc00c3a3a1fa2cd5617cc82738c139c34faba7cf251564544fd90b52cc195534e2426834161952c4e09bb81d93163bcdb65df1836d5b916168e7e515c060888593859cb25241e8e61f7ea194cf778d2296f705925d4562e8cffe54db65ec87119f39901bddbc745a3693fa73b83e7c4b3e896f7e5788976ed45bd03d79dc70611fb1c64610b32cf13cd8ff46f4b30cce8d04879948677bb21aeb85eebf5708fc6f3a1704d90b8394db51beed529b4cc48ba7c86785f803a80f12154412b4d343f22943ff21062bae129f9552279087629c2c259ff9bcbded7edbc785ecbd1bd8356605c51843dcd589dc58bc0821801cb0169494f391d850dc0885cea5b5291de3331752a527353e4f6fa1600d7993b6d01731178af3e044b74c60bfbffb086262921aa8e6c16b6fe4c25600c66cfac2c7224fba8a54b2ad36d66cf29d322a72a15a0e1169fc0eec1bbea799abc35f26a6f119254f47f4a69f4d2e84f736e24b7f64b12188c9d2d1830c47c8156971c24cd2d9f893e3aae442c9f0195717a5bd64f61dcf627f417609165d27c16b7663e6c217327206cfc4391d1ef80eb42a06e3bbe481cf58fa86862350746965e7f6c40400fd66d65fffe4f9bc4b45ca212f39989917d3a18ab51f6f68b121ed9395b47aea3ff778130be0ffc85dbebf5c9e3c1349c39156d9b075bf6d468b61ac317725b444a1851246be1bfda5ea2e73903c704712d94562ef0152f3c6c0dbe33abe8828fb93b30d4e613b56b063814f6d145b1dfd83b935250812c7f20407275379561c346a5ed80756fae7660c4659c18ad2c7d457b5d52f397e31c337391f5bb1121babdc78b9d38c89350bae4f5bdf75e1d8a51e101f40134ff926b680d717d2856bd00c4ec9283234dd39884875c41399db1d4d1c0026378ae1dc1c02deba07f7044991c0ceb7aeaacdcda9548e1cca99c74e3dbdfeeee0cf715c58fdb7fce403fe5980cfc64954c88a570aecb437e9dfd655fda2d52e8477958868c6165642e2cdb03a8ff3f353f0bc72a7c4e00e489eab4a98504b77ac1b392e91b677e9c92ccab5dd8a9d6f6a4bdb95857ed03412e0fffb893dfc04ac8cc3b78fe19030fac27af7e8d7df73ceaae84b5502f6ba8fafc8a3168f4429070dbaffd7fc678b309cba5a5cd730ac41fb8d9789b029c1b2d41f8f5eb7525695ab066c087a8765cba8b142f49458fea7cf05c68700d20c4a828a8b95250ec22ff1eb73ac6882ff6225f369efa3fe29a35d32b6e7c69c9f84257d43a33081681f3f4f110eda63f571f946952bd23cd501db853ed7e4bf2822424494a2c90728a299437a6e869c2e411edef4179f2622cef90294b2caf3273c6327fd4ddc4dd82f8318c0082c4e741816ba3059978bcd387a4badabf1002438bc5c5103145cc60f46a89ad0d4dc2b2a963e63536bd4573080a3245aa0a4ca00156ddd6c2bc9cb5e22f68054458c1f047a523f99dd428d92d75a9d6b7063ce77a1fed7939f49f8848c176b642968152ff8535be6f92e1d44aeac109ac8d2065bbf537b8eb53e1cd787aa5dbd4eff2d3f2f71238cf58620b1c2510f003ad974838d55100c9175d5001f0ceb75b17dff9c1570593f2f8e9eb9ba579309073d21ed629d5c58eb1fcc91244b2f2362a66a35009322993b4fc1d46669fc12e637f4b234546aab8168820b9f5b3cd1b2332af8ef18265518f4878e484234bf0e5d21954504498fae1d2e51fad0185b3299f383a97b946b8768142fc5c360ed01615b172910aec2075b875cd1173b11072163f0d105868ddc9c36f3b94054532b0ac0a8f9e6373c117b17a997aa7f988237047cf23f860c257a57e3d8cc68b0ed697427ad8948796f6bc423b6a02ee35d25c141ee02702e72d05975f99bba891d08c710805d2d6952b427912a8a760b88d2945fdeaba90c4c206c6e246c2b3ea18f2281fe82413576f3deb2f497ed6d24d4e92982b5507e0032bf41b78bc96682d09c47c445285b515ca928e9517b35ee20636543b8bbcf62acdd5de5601fdb053a64d5dc2e2c1f03af6b5ec1a9618191de0c9c8297189dff08aff3232293f2d0c2cc4bcd1ff77c7f9374e3bff59f732b5e2bf83f5bde461f3f534f9691fc19185cf7ea8d9c8088310538773cc3023605650fe82329b652fbecb9687844a470af34b01b10394edb25f72e322b10e026ddb7a5cb505e668755169db51bfb69c9021116b674751ade862dab031d084481f209faba86096371169a69c7e3196d6d8e2e5636410badd021533e5af6da3a69d3d733aa24215e1ba4d7352a1f9416747a3713826b57c7f729aee3b43a266d0b34cbe259fdd56fb06a5b9a1ecb4503264104cf642d1ab02446acc262669192d518291ad395507cfe5cc9632aafe5a6d464a2ded973bb53b533f94a8f89349b2d517134d9f0c6c86044aa94aa2270ac5965cab4381d0410a15f707b9a4ece509fd87f839e11a3acb27b64598b7d284dc5a8f5db18fb60020248ce91670c29fddffca5aaf221674aa02b265432252bc02913e9f02289263ca6f8eef99dbc5cc9580ef6c5a6a0ff755ea0194185d7e155f744d7fb5774ba3d5d3b74c2d4ee302e6db2737a6dd0801cc7d46b2caad110d2ab905ed49275f6070a51b19242649b05ee7351667777ec63118b173a63dad56aa0425f6b9e6d647a7f119b7f4b099fe2c3111e0b08f13b2ea77fff6157758f7deec405f9f232410593df8cbc4a95451fb75b59501a33983b92be0cf20a39c22862ffb7b6348e1936a4c06d1a5348aa953156c855ce18e02083802dad68a7adced7ef784b63f786bd7f72c7fec8ac1c9fa9ee9d7a638c7ea5c21b71b31ab0e4c383af49ac2aef27bdd7cd66397ef7ca6c3ad0a5824c21fe3ecf5f9c2b2a80f2c068f26b69c9769084f8612fa25a3ec8fdf4d072aea74a4005f3be2183498d79ed033596d128b549c72c2b6df9d4dc916f1d8b18f4140adc6a22a01534c1417eb7f293abf0d289d3768f23d3c9a076a710870ce9ab9c39a85ca1876aa30b30a8a67999f78643f62ec432887aac3928d311e8505e61a6fe684abce37a9f837fe17cfcb3f4ceb1050dda8b83c633b82a42135c18105d40b98c763d41db01c59459dba8788b239814aced249700318d5cf8a5e67c967beef75cfea406882495d4fcbdf6d6497bc9e028c005daa30fc693928a656ce8da96a7bf41a65a7faa5b1d443f4cb42a54ea51b3ec854bc3c7110b581f98b91786116a51e670c0fd6ad0c155a4027e5ecf0c46df61e5c7c73692a29df0da8205696e7657deb3b6f31901a6aad9d852d36c13ca6b27aefb27ea4a8b90cce3f34a2b27c8886a677ccd71cc7138d0ecee481bbfe943b3a315aa3d51d010b55555db930d7ef7a4b3d5b5642f41938550565c618d8d40980b22c19b5d534c6282af89280a3217acd7562e45e0351a16a8aeaafb58abb14ca07a742780d7dfa5c7dd0af3304703f7935e6f2151af20de4fa65ff93a5b918c5e098d1d257316566ea17711cdb0bfa3c9af27bd14dbc29630b92db205d95a2380ccf7a5aa4dee69861dcfee2b2adf897e673b0a4f99106154acf9607ebc0dd5dfdba719af56cd550059b2f51be22f286d6b39e2defabd28c74c5fd90075a3c02d8972756c34c5306d56cbc280b7713ed1c3afd18afbe08ed0c89434b05c48784b1b6d2c781c13ed283f62a9675eb6ad63f26a2e41d38d2eef58718dcd12efa308b896e5fdf8664e4c62fa95efda04dda5fc82677680ab221f5365ec32ee93f73050dfbfd4b3772e84f27a3d1620e273a86242b90244fa8b7f37c487ed1779462153ebe4429c378613d8614dd6e06881a5785b7a2643765b32d4d0f31cce79d1c81c07d3f67db70906479f4b8d78f75765f52702fea480917b34e869288874a7b7c2705d9ba632cc9dc74e0063cfdc1823ea9013c669c1c69aa6699b239d7910204447d49f17ac4b30341d67b403287e4317e02b474aefefe4455d1717ed2177342f3fd7ee0a51593738e4cc8a96022e9562979232d9dd5e14e71c3a5353a09cbadf03bf6fe982646ea00900026c81f92d8e5c95d3ecb40fac1027a19bd68d155a0b812c8600a6f793bb61f416c7e3c57b2cb2bb1a6eaf4451c5f0f18dacb6c664b58695aa0190b0f2c8bd31c44a8bf76e7455acb50ce495301bf652d506ab1327b99a5aa5523263ac34d016ecbc9db9d9d42e38a19ce656828e584016ed9bf0f097230393d1cc9277d86032aaeeb2f55d0e928003f5fecc2e8976e81bbba8c29a65f538aa4ee21abded22686b3abd401baeaab7573c6067f39e772c99a1998d1855e0769af295f76ab392d64500e3af021fa2da34b86b732e536cc748dca457d53aced04894875b5069a2e98242db4204e8a7dc640d7522737cdc6a81c689de880959ae72aed047eb049d1b7bc155a603e5e2bfc75e44126400ffd677eb173e945946f2cd3084a3a3020cc8d207c6dce1b56874fde38700684784d05456c44ceece2fae7d228f8dd05f22b40dcd36583eb549145852cd59163e7f8fb0749fd5692c966d734ae6886fb9420b44404a215c80daf54a5eab2606e1b1e2c9b428737027b5a487e88a648fa3860617dba9730303ed8ab909f5ec468c0009316b573b26cdf0fd4c207f56f883cc2c0beeacb0ccad4a0feb1eecd71423f71e7a39e6112d3e895b3457484299043ae64b07672139b52b9db2b56b0d51dc47aa01b884af14bd0323b358244259ba6527c3b570f8f18862461c0439ac3494178d157ebda72d34c3ab943ebaf09bf6256f2d68d30117f20fde20f08ded45dd41e87695feb16d90fabb2b6d2d5db07c432c7a7aa5e1b33b19915eb66728a0a89c93cb959e2eee31ab3fbc41ab1c41bb5632b03bcba8f9daa8304c37b703b3e849d0931b187525312adf8584e35068f9f644095ab74f63e4d0a0c374db69fea41c1022b96cc35b64e3041fab23e2042e9aa8746f9252227bc06a3a6ff5c34da7daeb338c93325ab44d7284df835f70674ef07937affd7cd8731761776e432c3aa0769a112f1b87af9092e73236d06de8e0e177fddd3a6c619e432657f174ee1c946f5158a7bdf34211056f75a47cecc424f56ffea884b58ff16de47075c232fd525ea5f08dfd444431587bc50e386e05c092e4016b98c131256d5c10f9e186da51cce2970d3f6dcfbc0750596ef0fd6caf9138e95dfb58dbabfb2c51fbecc65fa6eda4ff67cc095f99303523e90951d897b8245efe72cf8f4dd3c18f4fc661a4e35a9118977520c10da257a11ce67896f0302a47ada8fe39527b98ade82bb0de961794a5a65047fb072b336a466f9a45b2106da696ad5b842f175e5bae61e9af1fdbe8d3cff9dd198bd97c402a2ee076eb23d9588fc16d4fca864fd97325cc8b5cfb0d6a98c9097581ce6a4c71fa06279dc84bd337b651a707e15e9e360402fb0c1e054b4b411b2f6f2a25574df82a7390a51dc5af9ef4f910c7121630ac0e2e732dfab4f471507aa1dfda0c7aa447e1c403992cf2f33b24ed73898a5c61bea6b7e2789d583af4efc103d332e2b68a0a899f77fa9553f0d69548a4522f369b87a21b1c4dc20858a1e90bb67a04a2b3def49e3164dac3db3afe6a35cd5c22f95eb242223ad9c9c126cd85a1a676bb2dd891b77387143ddfb8f00018521e19741521c5ca9e9cac7b0a1154338ab32f5c56e1a647af7afb699714c4d2ed97087051668ab93fe0b265aa5519dccde8510f0a7cd200234ec6f5bc3e57d878f5ae7a57001ee2802fec93d6f8cb723d58866a641f9b9e92803ec8e9a64ce47e6f01e15c0086aa3ac12266c176e2208a5666e28285445b05387f0fe5e2688f5fd7a87632bbcff6da7a1c3310fa42f57db7f216ac302185655f575ea4782c763321a9ffedab4c3b4c551b87b871ba7c0f3740c34ab02428cd5e16d27cb378d711d325ed152cebbe9ff87183f809ea7fcdc4b897526274d33bf9e87e6aa3c7e1b84760aad906756555d42ae350f5b7d95fe857dcfa4e7d0652e1adcf0f0873b433bdc7ddfbac6025dc12c83c1a50303c5b474457453eba331fc624a6dc7a4275f169585d7c9691ae3afdee0ddd55d35414603444aeeb1f869b0c1df2f22a486bfdf843845a185dfd6065c28afca7d49ddb356f65c28e3f9289828c6b7459d9cbad8ff418f7de33dd015d4916281da6d00417aad80b0771b20d2c2f91c650ed5924a69e2f738d77495d30b2781b414fb8c9cc468bec0549dc82fd442544137d5226add1e24a3c4a4e823704833acd0ae60f5556c2aaf0a67a34f2be3467dcdd2357ececbfddc2ecdee036250281baa364d0272846ec74324b80cc313f8c4a5006682f0ca9cbef8229bf53b51bc2ae8d224f79816199c33b4d0112d0b141e13ec558c4edf848b0189f126af11a2d4044ea5222b61b943914f1af0010e001d780dff05ed431f372264689b8e3f8f66f0fbf4a2db3be8183cfc3e8347ccb3a60d1d79535acd59f097064cc61516d6e8202814015c016dcfd8a4a4b453e7716513c5873dcc42de4c6b471ce507124db2e99499fa07725ab5c0123eb6e3a1570f3f7b1675bc43d419cf1a229f8daa550aa3ec495d6d3eb7e227593b1bff98fcd9e8920a639ea7771da8d507a4249c3a2df444232223aa631d37393e5cac8395de17775ea768dadf9ad75d6b2f6ebdecf1de22c6ffaa4cb4085e9816163b67c39ac0c5471b5e4269bc1042e439c45f1f6bea4c34d4996e39fb7bca21d03725caf111ebebe97da7a5aa44bd5ea9724924d2150498496dc765840f8521e0beaab4f893d42c7630b16ab8d8398133f56f0421ce5324f78b001924f312a717faa33f852e7b07d5c235e1fa64fea469cc8e9f832fd8877d76e189df0b7a3a29eba54ae161732b4b930ff509194cf0801b3011ffdbed35ef2660dc6af0300ed650564e20ebc6f4a69d7148c3ce8befbe6094ce60d6262b1fe2a7d3c283ca85bac6bb2846838d00953c3987400448ba00366aabdcf1ece2a9b7a23f664d82e7796324a1567493f7c6afa9ddc70d4a8d6eb3e2b17ed419393e4bbfb262acb49390cd7369ec587c2d45aa3b17f8433fc8ed0b938ed3342382c5f1fe3e2289638731ce94eb25a3130cb4e20265da21ffc78af086d0238540731aa62b76b2b164433f32b8a818af94a95081b25503fd5dc67e44963682ed396154983ce57c0515d89bffbd5ba061862448b71adce155334b280bf8bf410ad173bde44c6980e1fe661f5554b2c1e65ecbccfea4d1bd29ad9af506771a161ec1340ea1ac5f2acd4c34823a630e964d0354a4a2052544df829262226364137fabfce5dfa800e2df2bf41913b81f97e3f4d183889117cff142e852594bb4fc418f725db352fc31b356b679c9989be519cb351a6a2800f2280305c94ceed9b800dbf3ffa26e7326ebe67e0c5987d6a4195d164a390943fd7ef843616ca1f9202348974bbbd6fba728c377a31eaaa25d46b7418dd3d146a6380e4baacffc82f249698f0fbe7a832a7b56a21d68e89b298f393146ff92f5c041b1ef5f705864ccf60eacd71957fbd5b8ef5db61d9949176668f6f36b2c4c0937c3b4eabdc44598fa679c178e9e61e7af086b4dc4c4933e170ad7b40d5cc09315a367fd598049fe2061dc13f6910fd640c712c6664e579b8a25f796ffc91d819c201946612aa708d821f61f539576a531bc696af0f3c2c1d5bfb91c4dabc6aac654e765d78c5cabe63d31da61d6fd0a51f9fda6fca2ccf2620fbe9c8764350a219c06f0422f1d3114a4696747c5697853824acd13095f4af28af8724329826407c0059066c673957961f5455a5e3dbf9efa28bed808a5d0c92ba8fffa3b1bdca76279d93a2610eb5fcbed8fbbbc0628944ae4e31149664ad72a62ae1fd7a64066bb7248ea5e1e509b59d6fd6ea929e05d589ff7d6d1ba812db769609ce909b10d2ceb8e9a1a917759160121017a5873fc6cd626d3d416d88e9549427d22ce6db82df4b23331ea1750562c01a2bc1da3d09e4845f5aa8a28e3e4610556fa41e6f8ed8bca4e9af3063262a5abf16473352c8162e1796a6ffefa64c5e177d54bd71ce4ca7d9a7891913e4b40a9e58147d58b4c8086d68185b306a0a1f7496a7bbf4e48d5bccbf59cd66788ea6bd2341354f2850b6a3516718aad1ef7e3abbd74690ad4b5c8addec4fd6a90dc40c1933c0a8e0f1a4089132f92b8b31041e6e602ee799a5f36ba120a5299b7e8877b34f77faf376830ae13bdd47fb8e8ffd7f6d5a2dfc7964cb5ac525e395f745696445c6bef5409852a775621f0dde83b39eb00af076fd613bff371154cb701f4eb088ce94deaa9478f850fec876d8a105f4746b715b286ac47d5f55852e62550a1738a19b0eef7e9add17bcff1cd7a0e8ad612b50a27ad65384800dce74df7d37dc1043caf2ea898691676ce3b0b9002580f451e21642d5045d5cbb86dbe339c933ad9167b7652889d4f1f1ced1a705667fb8437e752e3fd77afd18bd5c2d1e82bf6cabb12c66a3a918d5cc870d47e13367e6db375a7a75258e05d03c051eb0f39b34c96afc057abac79b36e69627c660bdd97ef9a989d20884cf454d513eaf7d35ad8757803c11491b26bf9f6dce566f70d7ada705f4f71c8de4b8689437577a1c40c7522876069b330e87f328e299fb5265388b00880abad1e9412e28e63303bb76c620c828cadab64d66885ce58261b5f2ddd33445e5e61f96ab9a5b8ad9cc2caacbfa8c445ef2ae857f59eebc8c045b172f7ef8b250af8c071ccf89d218a78a1fc66b538ef8fc343d2b683780f1959654ccee8117ce68478863f267b60c4ced764e87f8658d18e61bfb9e1672966136b16058983d0f811bfc06f75b795442cd148ed9efe2db676564ccbdf4c4859e1fe58cd70e288a8bc475da7d74d7592efb3d8fd375cc508f3f862c83373aa389fa3587e7ea65f689ca57f7125c2bbbf4aa41f9805ed8a0ba5e903260a5e4af1bf2b1f4553918bae7f3a7b650d0c6fbf41891fa351760c04427abba5173602f33fa156f6f47086b251756452a8d67c9e6119b717921a695efd06b95a99e40568ea58d64e65c5df63c239de4732a2c552483037c93a36e8851154818f967b40511818fa727b0a112e652cfbd42ca9c880112cab2ecfad8251df450619fe99831638e6d48a398c9f6fc39b085c8afccd04d77a9625ae890ed30f964918899cc31919c42c2f7adc5e3f9e22bda34ff07126466d6a743fb6bdcf33b983a832dd2c5284a8ae44ee8fb3012f583f9bd01026b6a06e3bbac1cb1d0c19e32012d7c66d5ec2bd68cac256460c3ab24a163c8bfee7943b9628b8c4a4d2294c044fd44d06f5f6d892a966e229a25f27e6291a252bb2fb595e7df008037d07dde1bf79e8327fc4ab7bcbda3ff629efe62b4921130551053739058a28db4f2e5c7c655ab8abc8c33d3c4b8b9d8ce41c7ebb39bd1ea2754b753ad116540b5d00fb671977d9f9bb22db410d6fb11cc54efa1de36fc787484105fe4216d7b60d665068132d76f1dc4d028ce2a4f0e33d113ce332700d22f13a081d9fe2e46c7dc618199ea6bb4321a1c75eb8bb6570be29b9e445a4b3f8996567bf02cc8cb3f16b3c132212fbeb95cd23e8a94e1f5d42f4bea95820a5c7a591b772b28a9f5bff521f73696bb37adc10fdde17f52ddc45cf55c8f744949a35acf3ad4edd6d15e0d400a62c987d35c734b66498148b4e300ee4167b260c777219d57ea4f36573c5feda936cfcdf8ff9752f1fb3381df049dabb845478e70af06b164671ef94a3d7fa3da8bdc368dd1880ab897346506ff4fa50b8312a05ac7f436d52ef02f8387ed5bf12a29345c1afa37c723acd2f875e32b30ce73b073d0bd8eaf682a88536d183a3c7b0d94954eb30409168657944b997d21ecc2d45c8fe9547d9e588a01021848baea03f3df917a8b7ef7050841fc4373db79ee7875fc3a0013c44d9b360aa77ac31f3045be688a374ea39ae19027571e8fb7abc03d480cc44c4c1f49aef7cf7619a41eb1c6dca9cd591e8acbc8e8571e681da2b630e89d2023c1afc24174e5f4c42f1eeb7be02c7e03f042b36be132919985d64ea241ad878d4b1560d299951caa8e78078b409bbec79380d563088e2f4d52d6a47aa03e5968328916b14194976488a5ba344eb44891d8ca89aff56b24be9216e878d3334afc7c706f497cfc034a709971b16c88139e66dfe356c7a759222436c05275e8293155b83a4b6f4f7c9b95cb3c374885314ef6f245a201e5edd69d1aed68f7fbaef87a3d5c6ee4aaa1ad5023ef40782d1be42e8b715fbcc6ded814acc1b3f5558926ac9dad2b3af240f00a548b18d37d2f2ca3c208749696939f06a35d1caadcb56cd0d12530c0e5438ad359d4228d7daf117989807affa9c0beebf641e11cb133cc22e0fd1cc9588f9bada80c43a6f0564d6272df3d5a73de965c766ba75b49a8be38a22af0d8879b8d5c0475b28d0cb73e8f3e9b83965a8d4ef90eae2cc5d8a8a035ee189294f66d4b4ada9f8824e1ee77b5876191271619d51fb774b93d438735813f518ec713fec7e4b1e8b45bb7647f0d8d4ecc3bb9789c5064e9249bfce8d84184bc91afd2e8b3ebf9c815d1ba243a30271557f09533f8887a36d126b9b311a0b4e73806bd00c4a058a2977f6fc04a4c9cc93e1674b808ba4a179d78ece9500b51d98a4c650e262eff66472b1ac5e12b2e388c8481090ca435888d52f285f0a38f0fa1b1f445abcfcc0977a8a514e95a3ee1d241555bf70f47c5b63bc0cf1681d07dfa8dc03dfd1acd08c49436d750aee4ee58f8554e3e6e981d6e562f5d90a307c3c0574814c74351c08e6b40d846e57997333b1888210ac2400499e6a8a0c796450aba3df9710bb47af177b4a7c1b6bba2b83aea77d55ee0284f02a0897205edddb02d64d465a028a79834a72a783ab2f8c7af156a77b78161842d669c4cf120921545c24ad1d33eeb7038e037aed49cf23addfc3f3d51d374973fac03c42c2541d10aad7ac5bd41e2e1b671b478edbae902381615971bb78c9ed1355092c7db1f7de0107f28f939f76fad5602986de455a87fa2d852ab4160a8e397100b8ed35c1f1b43aa998d0a49577f79d1dbeba3c233e65e937f6610ce8533c68afbf8ecbddc85abaac897aaf459d27cbc99cb2b78098460dae97a9ade37f546a740bdac6c3a3e062c8354feee37d84f0c692f6d09f4cace5f396827621f5c07e7d0e9cc85c34d112cb85c16ac1759b140c330ccac0f9516da576ceabf5aa5ca5fab4b9b516fe59529a522bf3e04c03320c609e2246bddbf14fb4f255176d5711122fd2b483efa8a9b8f9d31552186d6ecb41a03c0c2fa70586771d88cb10e5887247acae8d710f8901ea2f373d82785e282544e9fe1d95250e0d4c685392041712b9d3cd035c079f997a950b43a0fd2aa4af9f7ef37f14d67166852ef42af62ddca9cc7ff47c6e704d28cf17940b506fabad159c464e38b810c6bd8fca44d23dc11c3adde03e70d338fce9f690d1545dd0fc4dff5b46a8fe0d0f222046e069af607f86215f24484bdbe1da0045020cb8bfc38738463eb59d1ecc870052f885921089d7959f9f83554578cf372028fe1a0d1231011b370eb4a0bd804d42d29900b4e7abd94e4ec20818c95b70e57a303eb7ca695aa0c72a0bdfed6efad0970acfc762192e7c46a652e251475449808aeb19844205ceba0b17c66d59d42db2ebbe571f34ef337dcfbc9372d2741926836ee2cc0c95a09c8843a95e15be4c00887321e8e3ce546000098a533fdb1f6fbc744b01e8c69cc2e11906e580b3c60610cc8ea87118bde691603465635be90304fd5372f2d685b8e9ce1dd908f62568380b090372e986355e20a4118a4d0141ef5620d3593fa89177b391519af5ba6ad7c39eddb754291e4a0ac6968bfd8218e92d2f1df2fa9ea4c9d49c4908444859412e1d0277baaa84a2bbaa9ff14acaef7fb9819d7eda2b9819d9e15aed6bdb4d9be5063560c578c0cda0b5118adf693bec98601e522221606c6a18d02b781807f5aad78134880f5c3fceeebc23f222a4e10a7748338adf011eac65b77442067da820a0ac47ea956bfbdb419abf10574bab373a147842a2abe887cad811ff8ece23570eee58cec6ad94c6cd2db4ca6301acbd88cb2c5561352b9d1aba3bf65d77502bf1fd41fb8c2e8c5e69b36fa11edfa477e573aff963dbd8494ac18e07982f26e43b90a0c42c6a8a1cb29297f0b270fe6e3ed00fd66edbac2ecaf52dfb250286bf52cd0c7162408c72a993fa55b1d39ba4a9a20a33c76eb0a002e6d01cefd53779757b6db7ac6109692eab6acc206c9874d4638ee9259abd50e43fdf53edbe6ddd731da35e675e2d7bb186d422acbc24f2c92f341e5db1443b794632ee10f4d435a67e7ad8e0e7db00cc623ac27b987a5bfe5fbeaba74472906e780d0507d10f54eee363e875872666a8ab47cc00315483bf2ed9caec2f4bb6f4e65588f3dc022c68350fd2c87d0853c8cf292bc07907eb488b67bdd465d029866f78aded731201ca9d8445d147301c75d2417194700b3c8ed0ea2627706181d3af07bd5a3d74895ef82aee438074b403556b27062153e7dc7bc8a8ef4f25254547a744549c2e0179b5ebda3a4fddc2b18429051bcc9b128677b5374c5db769201bff83e34a1b692b65a92ff2b5de4fc75f193f72d4e48e1aaf97bd2af6a5612e40146902e20e200284e41fd7cdbf4e421ac223a3a4cbd71bd0e49f05ac1a2282387c2e3bf6b93b2cc91d25b8486d8c633d0faaa3ad8a05e217d386f090223a4e4c1adaad2f8459be7e066ce9d29fbbdca7d4351ac6a192505a6a5b05dda883bf6462a56551260e05d66298b3ee5f980211494bb1d8b6006f81b26e758f8814bc222d5f735f93bcd0097f11167d188f00b8b2e0250bfbb0b22291c694bed9a6ddd4685029a93ad23c1a63723d6f7c1f8dca3ef9178bad9d5610f7022682eb79637af9100a828b19d81927c55d7bd2e7d607c06fb6d8b67d4ebe0bbd726466dbd8099eec855956c9f15bbe59485d27c8eb65df055dc12b7beb74f4bc9fd832a088ef559038ac78b5d4a81176b7083ee7f5d654ef40cb29eb256bc4d903b6d0c0a4a394042dd2feed4b1f47f054d9891b18685cf3f63e2940453567cff41fb6219c5e509640ca26c6f2520b3b63a361539a9403baa0fc654610c8f6f69ab8815130811f003bcf15207236bef3f724505fe2c2b62332ac82fdedf2e48739ba1003ef3d22187f51796738bf1725e22e24e8eb6b45319896088abbd35a0433cae3faa177e2be6943a6babdfd2b9fee77098797c84eb1626953d9c0d87a61bddeedcd0e585041ae34a2be760fa5282365716c19104a8ff4373902f510995c8ede1958502276b0de088ec0066f83226667c0be208452617a34c6721557de2cc88daa043a8b4aea84cdcbea1d740837ad606d9309ed19945a121d1464225f4e716f387720b847f56bcafe76710b60c04bc76d03d0d37b9cb0dbc4fa646910bb5d60700ab2e652315cae8f8b25f112996fb37a7ea088b511a6f945422d829cb987d1c8349867b410a915c4f8943431ba00c0c30f7f207e539fd8e07a4f2bf7e5c31cd2f460eb0fcc1f65d7f34d635197345fd24bb73e9e8f41cd53f0e8cf546cdf99542925c684626c713b0baaae8e725d4b056310b6836c89050a73b5d8c3d3fb5e5e10dc8ee894629c4d4e01def55aa635e340b5282752766e0fe4653ea245918807a2840442347ef45bb8d66c78051453351142586672d785d600a0b32c519eb4a82df9af9f81555a509101e23c1c7e3ee25ba547d654863d5095750d186cd5f5f5d89c51e36f90aca8f81ae6cbec120f8817fa36dd1e289f1fd25a1e8fff8f5fb908bc8434784cb1aea5c38fb906fccaf4f889e6cac11fa65eafbf424fabdbb9466e7816cd5af214cadad051d9de3256b7a64b0994d9a9864cc1654e4b41e880751b1ed3c8db5f59f5a5c94411525757e264c945638c81561d68ae82bbaaf3ac61cc0aa994ec143ca875f7e83f9ccd52b514b9db268f868d781e5abe9636d2ea903cc2191e4fa8935e09849b336e621459107f5c6570260117a2134e28dfaa3ba7dcdf5fc69da44ae582548267598e4f40049888d1bbde26b8c59a9b44e22f1050cfbd72db61f2f65c145f31edb06592c1b78e9eeadde28837f941e3db78b7d1a7be62af5fa0b75b61147b5f374d78d5b3cad4bd986d5dd0c093e3625d4192e474435a28ca217a3d54dafdad4e121653a6dcaa26418dfc238338b48f16563b29f344edda70378bb9f82b840d51616164b7f6172bcb51f4acb716ace60659e9e4b4b1916624048555b186dc48173b13fd0f34a213dc532aa56fefa0931c696ba64eb653ef1a0231694c2dfed91b32c06cbceb244808f49710926e45bfd4a399b542d4ce3ed3b2987f5e7abd12644c675b97597a2358df232c63d42259f717e6a8928cbe890a2cae01276587517d32266b72ce51fcc64a8e0da75e15018000c569e5d0c6acb19d46c2ee0511e81ff6ce73f0cba7b97f89eb473c54bc4a5668d0736f30ba5c8580f03403943fe3f3332bf569739c92b59d8d982f3e795ab0f6bd0dc487c214c86a5106a44a629d0c38c89892576c7d62bf285fe95b19b76e880b0c89dd6f7757a8b403b6df520146e21496eab8e51412ec4b0056ea3b0f07545ec35d3f809896f8550bd45b58c5d1bca8c6440ef61470cdc3b0af9d48e44c6021c8956b721bec474a554dc1ee039b489d5b525344379f86d2527a2eca214c0e9a90737c754d7ca79f9f893d9b82a6a10c8d98d389bcc6e39877b7e70b0ed0932bbdb6d9c28aae5d15551eba135ed84d221e16855b634dd3d5f3e3dfc937519509c8f77a65bff3097961d028a3c648ed3f2f7ac1ba13f13a441d27ad708940811f5b48fc739f9a2c946678c0e266b2673b38733465497e329e4a49e09bc598c0e15dcc593c0b4769157c07dcf24069dadd32ef88b155fa37e5770362393264493aaff9da6e21a4f68748c78f1e1f7db5d2034bcedfb4ef333a7b7d685cb3700e587b50717e177e9b10b458a60f99558809966c6c6967f068c2976773c51701112f8001b7fa8b3a14c2aa46b0ee8af6171f45bb18580bd75e8ab45331ddd0f26dcf6bfbd952f5e1c5e3dd31ad0740d9d1e9d40f625eacd58c14b9c3d28f7619e703b73b29fe91cd8eaad322518e43ef89f433ffdc2a7c4902aed17b3341d75c4f9044b2027cd58e6aac15f476579fac0affe6c36929b6b9c7f8d3c3420ea88055cde2eba8162b7ad8cd57c93dfadd774c9be7a3c3c6be5a718a0fdfc1f882df210442d75d701818208c13f26e55294a41da2d8ad602d445cbb36e72285e18e9745ed4ec4b7935731c64a37f7679ac66c2e10243ca9839246ed88945f83fed38c927abd14e325206a743fc1eb3e74aebf208b7dae3574bd3c33897490e4618fff7338c915f8610f21f383838aefc7646eab4f4cad659757677793ae44ac8ff8f457cd5ccc466f633b009b3bd903e008e422a063adfabc2c7daf7df5286f19d3a74d764574e2de03c93c898c34e32f3adbd4b4bbc5bba3c0c10ca730f45735acc5fdfdbf33a277b7bef457aae650ec3a1518f1cef1fbc72d24779c966b2bfd921c12be6b0c33b3a9119e48df484742080e9c94e5e69d8b7ce1964985df791f07b1197e2433eb903d5a13fe30281125bcd724fcfbe56c35960ae2eb7aa03eb4f92f1850bb2c113e9989ba899b2194cf9f15b0a4df418325f660cb9e629c3d2e7199ad3dfcc8cd406f451602e79ae71a53324beace1fbaacaf6d393af56ae0a14cce499c7ea39a31a6803fd782b5f77457b05780b51ce347a32ec2a1e2fa9f34f41e50fc9f2679acece592faf9bc4dbdd65c7313eaf0230ba4d9f97a1c2423f1cb30f169b9095a5811f517657ed006658cb70641f49982cdf2fa1d2a3e79cc40f68f03d1459e7a6eb61b59c6b7ab668168c27ddbaf35df0d3a402a658fef760ee2a10f48d7bcb78804648f931d716370d1e854362abd2d4a25ce5bda6df1186e31ecf3342e81ea8ed9ae56881a19e7d02463cf0e1955065d7f9f5016eeb05783ef798918e3f72d9ade496f60c66d254f29db37907b5158b14827a55b2b3fa8efeb5981b8382b84e0c4f31db3a03d1ea9536a2d3234181ddd0ef61a093c9333cbe0a70bc3d69170b170cd19d0f4361bfe5e80eaddc505499d6f68b366b2945fc5dfc806728ebea25b17c7d9786615c8d328114962f022a59087721a4d042b0e76da6ef24614f89860701ac0d72c78d736d9b25976a53c36167fe804e8211ff8e7fb3a7cae650d834c76e1de41041cc42a3f3d3bd31b2ee3052b4f796cce9e0aa53ebb573e0faeeaed6d43c03e43c992cdffa33cc364d37b2a5838be0fc2de8e2423420e55c0eb201347ab319dec1cfb98593c606c11c3bf244c7cd0511d4207bf52c976f726bef586f8e467ec0ed04d01a2841c7795a5a4151b537b17135fbe789473a6fc69a73e9444a9fa124fbf8c0fe14aab67dbb4ad5e545a9a7c82d79cb105cc44e7980f2646c910d0b843de6bd646bcf3b6b6b20dfd3320d13f52d89469ad49a631541f6293d9f39be0552e8c85cae9d2d715d2937aa942cd97bfdf2d10d390a48e7feabc4e28c1cb6a1a295dce541da755ede877b6c36d4a270e7705a57c77ff63266a8bcb9802470fbbe186b4b4ef081fae3914a47cddd26f65b473b9e06140d6ce6401f37362750cfdb92650c4e935693f1d26a7497e7a101a15025b4dfd60152639469eb9dcddd1344305e13bd80043312c49fea10db0507abe3c4b231a94255d1d6ee6132fc8ebd1bf25b632439b4b2edd09962daa50ca65741153f389d1566a077ffe423991ae687f4a0031aeacd08b4761b9dbf86255806502de0cea6ab723dd7d140d4a21b8054d4eaa4157a42bca9beca8683004395a96d75501c71fcae1ae6cf7c68298e0afc6b63ea2324155a7d13aed6095ff0e7d7fbb192d535e6594aff79381db1d789a5ec06c4c0ecd91440f3bc39946a1b3c9190bcac7ef538a9b9bc8995ed66dcf91559d45646f25d4005d44b31d58397f90042577209c42afaa1ebbfad849f965072b73cb64f4505ad33ee992c1ba5c23279ca55feb150bcd4dbbb614f8f75b8bcb8eda6306d68b8d5377fdd7f0f8a162edb8df5e2580c3b8be05d071b05ebe6da8ff11a384655476c8f5ee9f372d549c8fa7533be93396dec9d9e9b6f3dc22f74bfb891d32b90ff6233d1148887e74a883cd8c8606f89a75d072efd0fd5a569868863654f471701dce232c447573b4250652dcd96c4de0c56e11b37d3791aa61cad780703ae907c8c8f528f3382264e67454d98572ccc4909eb6c0fc56c1e8f068ab50ea24f54ba447d397c7ca6cf05de2c34d0e1d2dfa43ff43ec3e51ee6ab5a31327c2fcd922cc2a57b60d06a0e0d3ac6b63ac1351749aa86a9915a5bb92ee5cbee174b255dfea0763172b9acb8be871e5e7fc76f2f17212c456c6b5152403bed9678f6823e05b00f82732d8c7e03238dfe47e3dad7d21d5504bc0f7b89c100f0f193306abe51d83edfd705e75004ffd4e694faaea5e5416558d6bcb03b7f8ffbbfc95cb225269b0576d8cfca6833b5abe1d9d4baaf725cb08b8cc2cafa9a36ad90dc4cf692c02ce30a40a01658fde444562047497670f16720db0303532097f5739f768487a26a33d5e144b9613e9a8b5fc6b892c1eedc3215edf01b590964d0fb74debf161390f5197af32421b42c678fa445fd8c731f90c5b1628f4290868b47c8839624c100226161c178ef8adbe550a78877a9d5bec65311b09bbe244742e20740714e5c9a73bbf43156c5f7b090b0b1cc7ccfb55f56c709cfb2a5b71416755364a11216cd407642db0cf5e0707332a7e126dd59d5e3c2240f147720f32c875cbb5e9423e79b32b229da913c287de551cb7323e675c1806bf1da8f0b74065bdef5e9873c096d21dcf7dea65be3c06d56b352f36865525845bbddf1d1863766dc82fcc58187668c8c392095b2a7a5c0334f53569d3cb3286839f95df5ade00e5b37097543c7317f2a71c61dcb4ceb14094a399e8274dfe1d9741fe1d55aa417c7f99be0f9eb14f742d66c086ef283f55efa7a5635eed77b28f828ac0d192e2701a577aa267d5e8e6ae0ed35e0bfc7514fe3406ef3e0ab2be23087a8167e88ab58e13401477d6fd450285dac5d230260592ec259f98c08729320918e14182b74a5ece393b9b564b3113e9ca24e26e5632afec21760a0c758f6b70b6b23f1387bd539e90f8804da44b3b98cfcd552e28f5aa26d17dce43c4fd23859e7994728198b2117d24df2f405bee0e590d32dd03042b4ab0271bc26f0cfc3cd67556011c44bff2753bdca14740c18a91d2eb24a61bdc40a887c27521bd4fe8623a464cbc2959a086805d88d8539bf1a4359c42f77c41349be62ca750ed5b573ddbdb69348399939ef12a23f34fca32f046efd1778a85114637130fcc22ed8bf49b40bb3403e4be65f0743dd78fffe6ac43d392d7c848d2d731a1dc0c88d57fba9b9304bec6d0e8e229e1b8fa343d8e75c1ad5dd0255cb2086dd746ef5c9e6a89b9f41a90dee3225d41f629bc44cbdac532d2c17402c09ca01ee21532e4fd93136a12e6ccddb3876c5c98e5d3eb2f04616c963f4b044f70c048637efd4104dcc2ee636f85e1d07d6b913588683b9863b06c26e6b3f469896652e1723d2f87c372e424422744553ede7651788a61a5492ed1b455dcee57ea5f17ad3b0a596c3d9608204f66b284b2a6eba9b99d02cb27bb60e45ebbad951973e1f024a87d93e7b8278c56a3dbab720817bf19fc64a57cf4a4bfdbb76a1239c2dcfdadeb3a61f9b11622ae3ef1ac58ae7def09a12afb85d39eef0bb3487c5873d1566e12ee532a6b411443c485b7b31f9bb48caa7b72adf5f662e79e8c56a36d9edde20820e96b390a02fe827beb6d600b8a82cd2f1b27804ac7101642de5a593d985ca7268f6d87b20a296dd194cb8707b7654b0a8880a44309e8a2febe7c9cd73b1864d4e163182981776ef58e3fd91e7a5c825dc556037ab567e95758d45044d10d3e9c6cef7515f191ff6a0688e8b299766c5fcbd7660a9a9db67d490ba2a7f199cb2bfe544424f7793b1ad3218e82aefdcbda0cc1c0ebabd43a9558c895e4d4ba5c692ffea92bbe7853b0ec228426ecf6100de5b23abcfb8d193fe3d9156fbf7cd8a1fa86b37c28e7c27ea3379550c8fc9b8658a6aa9c6127edbe615ddbee994e1aa235788021c4350c5ae5d97aa12c7637d33efc764e67ae3f1b0f891b547eb9720a4afb9d3486690b18e3937baa505ca019261682de85dc49cee193e6be0e29e60f0165de91185a344d442322d3747cb6acc2dfbf7c6153e59748ea5a5a78217553a3b483d16fb0bb7c011b0d68899aad8c874e59890314dcaf11e0bb00f33322caf1c683138953de13074ee56a76da3207660a09f6a6604ec4e301cbbbfad94c65d2146e3a8033dbbab3f8d3c3b5d28a250dd32664dcd110cb11f006acccdea643c852199c83ac032b68c3070e6f898f5ee21d1c0462deb475b6caea22b6ad2392913c059c25cc890bffdbd4997dab61eafac7d89f618c8f272727dc6161393463935008362baf347e267a727d8d94d789dad37fbe7e7e44034276c0b36c837c5506ee34fe0c4cad720906384674a39c4a9bf800dc3ae4ff70d26c92d0c6a9b93aa7c7371583afdf3d17b778883ea6fad1fbe7f1cfd01f256ea13263ae6f6a12208f93a374dcd4ced9b15c958f615a5ecef6ed2e1dffc2de7a47d9e3a3c5514bd7db2f852e66f7ca7dff0cb27e87226f1058ba0e1be0f4646b1fe73abffd2c978cdebf3a532267e84ef1e38b02c96a183d40a451c52e148a8dc9865621041619f04c7cb9a65b3430678b659a3411c031da305b91de445da2ff115e39b87bd38a224b8775e9f393c0caecad12bdb1d41ab1122805a1b29ba93b3f39e9ef4dde0d3294141219d988dd7cf822fad3748bdab54df02ee52b0a5e8c5178eb2e5648f99b3e0b93671804c0750f1e426c62e942517e15d956109a02c7ac5856e80581d0bd394b0073733744d03d62066904860b68ab8789e5145bcbdd909ee34b0156eadce5a9a7bd8b3c2834aa0f83aa3ce18f4486293baa2c224ab9e15aa16de8bba4a675316d40084d3e1019ad9373b661a7a4efe6cdd290a375f5e8ffc773fab721d733d20dd09921ad0739c279112fb460fdf06fb7c12c0b1ad212d81819ec518d86be8adf003ecf0c573ffed0654bb425fc0b93160adb5519d4f5f74698e3c9dfa5b9f5277ff501626639322223d0aa0d0cdad61f2ad2b21a83470bd4a5182cf3ebbd4233c93f2779aa9727d294de7ae8c36455978ca76f3d9e10daa9a5d5c2e1abdbdd6d8b4389b92f21724e43ed025e1d560f8b30dbadada17ca9e78526b8b4f29fc8a203fc045488c980f38c94cfca8e363e487e82fd93605d0dae532da2a5c47e2416262c74471c31e85c63b6fd141367b738790ddf7cc685f66c3dc702356192bc447423cdbb55068a2dee508be3857158b10f5a6d7aa11142b64cbb5c1ec31697e76d338954d6743ceaadf44fae2df55176c6a86708fc485cf950652cf6b859818f8435c196ba3da6e46886fd59d4ef08caaae2b503ef24b635851dc15c97a80cbcc6cd042553569e3eb2094f2613fafaeb59b5923ca3ef223fcd8d3b4435b52abd0381fec24ba9134748ae546011013ad80d0feaede4d2e75fcaf55712704cc88175a6a9dd9f742b54405f50d8ef642ae74b6692eaf5ebfafbfcbf36b57a4fd328e0cce4cd258e3c4ca161a113e4be57a796d4daced7979cc9b194cfac350c392df598ad1004885660d687f292811a0263a829b7ddaaaa933563567b66e4430f593545204ec8a02c780b92a059d089680ee2f781df59a56f1d9c9b613af3166613d8f1028a2782b945759b058c991e46a715d9d56e185347ca1a2272c3f4a0c164215afbaf069ba8b025e8651c05de60b456540b218dff74b83acdae72b04ccd993427bcc3372279db1ab370f2bcbfbe36dfae7f45448c59fe748594e2c34afbdb954f4e00f1b45c986c0a7d742752c432918b91575f159cfa02c6f2c8ef5eaa3f088b8d5492f2803a2740001efe17ac7795bfe4135f4f4793e387b17de035de255d412e14040cf18ccc0b1c55e66e33fcbfaa0f663e7aa89e5ae0dd7188f56cefd72d9c513030ddf68d76b3652bdd67102e52a052da6103b27df1f7495c38fbd7aca29a133a6ba768ee503a41a1ae14b829029dace35f8cdd2f70d725fdacc70460ca91855165f5c3ac51ba143effc5d4303ac172572852e9154fa0b0b281335a9de57932602941cd55fb8dd8388853a5fe4b0114e5fd839517394a466e62cea34b99d07bbafa82d2f82667aaa6880ddfe510740446fb418c9086a826f807e5547ba426c480b493596e9c6c60186e9e1ffcc5003aac8eebfeb2ef0b1f2611fa129dec9c3d98eb099f5600f0863ed6e774cf255d4529efb180daa374b73a449535c24c13227a2d933adfa11411c631554059729a0912511bb7957adda7cd095f03abf1bd8f3d55bf53a8ccec4399cee992fa40cfff39ee94bbe366365b3ce03c42298ffa37f8035eac18fcae328cf274ea98d75edfc377731629a7fab838c2825ab717a3a661582d58fb5627c20c55c136ca8addbcc9597c47dd0982168937b27cf3d778bd66b32022c8d8d66b732be304a3266fab307329a218ff3e5dd8b40e1086d4182e0ac72ec0f87f4c68f4bb17dd660e776bac20531b598be868f9462d02563ddbe7c559567747e87c73d67337f18e333e164de09c6e93783c37aacf02d84972407371092e368799ec56cf3d39d89301756267aefd121777875f8edb4e4cc676d0ef6e60a8c05de0246c94c6971c0e49d48f2288cacd2af63e7cd5a2beda56143e1733bcefeb17e43a7c27b3f3111981c6cb73f967f3eeb2a284daeb7f69c1546556c7c2d6aaca57c24928d8d042c6ffd812f7c861d301942ce8822f0c1541f1dd74a3126a5b2b1c2ff4b5a035344b1ba1813dec19313c74c8b7728ed2cab801a2645c3d02bf9e7688acfaa1ef22266ddacad44930b16dca6ef8d41b1a9b4b21d3192b49ba3c150b1239c126a02f5fd74dcfc6fa41e063aeb7a2b18e83183bfb60226fe24cce5460e2fa7682ef5265b87851e476d0d60ccda799d4c1496b3bcd7ee1d2adfaeab24ecc6cd6434fa57fd1214235d2bf55586a1dbcd8d77ed7b18b4f7da60452d77e347968b61ace96e979f35db638d026c0eb2b62b70e4c70b6a0b13647a2fe0a7d77834a43492c65d6e8c0835c5fc1be675a320109c3480f038a4b4cfe9fcadefb7dd7e981581d657aaa46a44f760053265441a3bd1bfe911f61ac4d10169400db9c1ba274eadd5b31315af65f714e4bda8ade9a6ee26c95647d232f911eedb8ce97400755075810c9d083c06c4fb4c5581ea4c8ec0015e12b9e149394b388d441bfec29c0f5b9dab23706e4e901c57f7dc982c66d0ab18f815ba80a9c08101ab078cc4bbbb88a55ea57aeb8d0dfdb93045062706a254079eea00cf353725739fdd2e03410a724c9a02829f198f8f08218d9d7f5fa35d2d42a246ac4247f88c1a6d9c41a0151ff9d0ae9d13cf5af69ffb3c6ec8a3cd2f03ab1cca68f81998aa2d34828538cf1503006f42511730c98b8b808b21482fe021d63b057666b88952c4b95426489a9713b39f9d02d249e7cde4e95e76c27280a00e69835088b4a72284524ac471453b2d778118c4db38013c3f65900cc9d08c18e41758b602481c2a95545872470136cc4ab9f0ff892f4ea9f4567dee490d0c9beb8465581585d2ac881ce91378648893796c8ea914f8cc68538340f9036ae0c658789ac5cdf1e4a137d4d9254120ec23289e16e8e44d485837e538da2d6633ac5f484855003a7bf1a047d79d332a86cb314cc85318b112455c3b5b560d3854dd65c53f18b0b67125ff0b29807979d55bf6c5725c6ed468d89aea053a324a911714ea463ae4373b7216197dbd57697fcf3b17e4c3f259a43eca68dd97b0bcc98d047c17d5a9e0ab7d5d85db1a2aea586dc4b1a9157f2175558b49e5b1ab8e42363f79f4df6ceeed5fb1a2647e9ce7768c8d1bd141cf06e7412b9fecefb912a1326e6dd955ad863e3b63375ac54b0109ab0c3bce16156f8fa8a7a0650001ddd9c189eb076628f8470878fe069b37ea693e21681621400a083adcaae371607171f155a942abb927d5c65842376fe2f72136964b1b89ea273d29ed9845e4743fd728ce245b29d5aa12c60679804619ac5fee444903f2f1a6a3a41d3c15faea9dd92896d4a4e3d3fbf400b7f29f715b7be9c86a7d7c5a146fc6952a06c2973115a571d5eb1240fabbd67a0089982dce06fdb53eef2b98f3c99854ce7f788f8e9b6290a4b3071633cd425a5142d5250fdd9ea991267cef0c6596ce919f1e6c52bf1009f218ab7ab75f1b05e8bae683eaf0e6e1a1fcd29da10a6cbb6411cee020e4264a6cc90931b126f6995a2bb13f15d030e8f367c3ad85ca06bdfd83349831f39ea6c34a6b0d7aea78cc24fb16224c5284501c25f380ddb24512660c92ca62d36dafcfeb19e93d2746f334a2cb2c614244403004b24c362d1735117c561793aaf7c45f9f3922746196ada2da3fb4c7ead9cdb11d50a5be37f52d6195d2463009d4df72a3fdc44746016e80d2c18b5e84b8e02cca9d73c3245539e74c4cbe9c46eefab5c4ebb45cb7e58844d94afa91395e13325e7198366198cc2becd569c4d4dcb2f23a7ba0ee4520bd55a934a6df7bf7bca6b97b73878d95f9e8963ee6fcba26ac2b8cbc99f71be87e1e4e71f0bf5de6ad13ca83597ad78a0a9029b03ef9c7f6955b2ad1ddb514ab80b43aadc60e96b40e2c79b58d516dc7740a5f82ee33454bdb2da9ecdfeffbe877dfa470ee13f758067eccaaa131fc2aa29c3a354d49f9a44c06803e6461a16df609202d71daff6a6ebc5ec1b74d43fa057d0867802f77a34f3193b94ed123edbedd42aa5937dfc64e20086b9a6a298965eddfec285c763aa27ccbc2dbfef5aa4fcafcf0c317264e8a9343aa0db5c6b72d8cacc892c60061d37d61c376e5497457b2d69202ddc47c628a5d9a4e00acb8fb1ab827dd46ff0c82cde34fcfdf048d41139778a08896ae11a29aaf442d8861f126d8a985e95a984ed2608a1b5100f70c7f18997380d39d2b0a5e030385b18d206231d24a31421c789f6048b2357a25f3138685b24ab5ff3c3cc04712c49a9d9935d065fa9e81f71d93fa987c13015e2197b01e39b3d0a1f26cac639b36f027c6f7f8d6dfc5dde03668a20249a3d270118c305bef4895a7413326a947b382ac4f809f9036b2284e1e625d77c9e0e13c1e6ce9d088eb0ffff462281cc7ecda9df4cf80ef0afd4c35bd63d17713c3f832306d72e4391962a9e9cc30a0fdaf2d48895dbaaf17b8c9dc4fd6d2ed418e7e4b2a75c821f0f84f447695357e4061e721a6900e3a64174edb950431e07bc6307095701c787da79558a4c00a48b3ab01066dd6fad6de506a886ec398031a23d6a3e7578849507cc45847d882dfd60cc40a105bf62987c9d4bfb744601fe827278b1689d418a6af88d46a37f17b0f254b6aa0981af3110eea2bd59fd3133c3260f3a999220c7379f6cb2c6447c27995044bfbcfecc52f1a086d54e5a18a9db7a895368a2a500a4865d82451f1ec9ad02e73b4fccc49a74900bc477fd01212da9f6f5ceba230fc75dc2102acb84388c89d220b62a93de44209bb86c0fed6e6367c77b884fe1958eff595b7dd854633f093b0b879f996ff5a4856db07243ddbf4356ea989ca2ba3fdb9d501316535a7c82d7759dd7deff0821cb9462997660508c4a11d31439fe0215976bcc23e3fbb9b7f5811d32f0a427635d78ab3431d9c87556ebe2a38061ab4adad0fa2ceb6724854edb08fa1a7672dcc4a02d597d5a9edfdfe5161169643a8d8deeedee549dfe0415052d642eecf8b020997ed9ebb24e7d608afaf4fdbb6aaaf5b136236a9d50935d83810ede36a9f8a2c84a0bc20b354c19b047a5cca83324a616426c9b9ddd4562dce4832d6e19805d4be99a3eac5fbde8350d8e564e66abe4a664404c8f4ae897b1965111435cd8117c0e4295fe7d8a4d870b505ccc879f27bc30b3f52b2f53276a3ec5cc42e4446d15e014ca775249e7adf72d0b011608ea0a4006cbdea5568c2224eb268b5e0a25be7ce4306e17a013e552d5202f0fe9eeb93ab3d823b8b5be2e7c91c35dd51a04db09fc13bdfdaa1dd504b1c91ce097e4a66e36635ecbbd43ab4e57c884dd656c6143982588b1a96fae06dabc08be53b63bdeab4ed686256ff4620e7e03a73528e266dbf3a1cfecc5b27b47a41c329b118f63fa88b1a2230493886e1b264bf842c0d05117b84feef38bc3cb0ac5f791e61301efacf94d39eaf93a8ac523c7a4e15f7730a77865fd4b2da30bac38d3192b6725597a9e64b72a2180713ad3066c335303961b2541eb4067700e5afcc03c5a2d6659f284d2de6a281c3b654d8669e54bbcc8e16d27a2fd8d4cce1e6bb00d11e6afbb22fdda9247cd92cf8972b4b8a2b4634c3f6b559473c869c26a2ec188c8c1fe83f8cf9f7afb95fadfc2a26c8d7427d567d39bf1742b8df121152fb9d91bf03c916a445224fb0ae98b495541ce6176fffa11ef02849016c22f2d30cc95f3cfede23de7586e4b652cadd6f05213a9ad09dad94352d58a39d6c2e8617ed784f9d87f99077436d6f29adc06fbe03d5a9e0d67c2185b72eaeb7a6d3e74507aad35ccec773d873a0747f0e088fd8d99470aec6ad34841894b69102ed5ca8d736b23ec888e59f0a2f20ae7c6a821c74f56dc6c1795f4b5d15e952cae0f2bfc25b37bff3c058cedaf89d013823e214764651f0cb59fe162a04d3f9e47a8e4d097ab85fd68f14450cf41c3b2cfda20f896c8363bf0953c81a0fdb7d30023c352339db4c606851784d6e781fe6a811b0d0858edba7185449a682732be77c70b7766ce16ba3d0d62f96e3e5582fad361473e71e9bccd15e9581469122309dc6af7b0edb1f26a44d2d764900a13f1c84ec86775a04fe1b64c82fe1a86bb5160635ca2198e1be67785ac5d67838cf8d33d711eb4d6ff1915a0cd83bb97f4eef1c167aa2b831fc77e8f58ac33b54c62dfd17570e0234d347d76dfece0a1b2b2df2972e1d104a14220fbdbf932469a439a02712ff4b45b2632d2a73586dcd599c0c9012260dc669fc542b522a037075605193254f9291ebaf1fc3eefaf89b90074e652cc2556d8bfddd54da0b7eb06c917e3c646f61e817b33a9244070285f250c8f73bcee627bba7337a726696c4e95b12dc0ae7610bcc6818e25c733286c52fabfeb59884e0dc0d2147b7f2202be530404102190b1c1ff7a762db961f1520d8446e759a5613f8281974e457b54c00c9d1aabcc73fbacd9068b873f333368778793af09aacbb007b8ec0c2f432884aa7d2c67cf147502a18edf329cbcca16c569d9bbe1258fb7e1067df22a8885f3b000d747619ab642c14ae74a4bdbe5145f2a9095041e0115f6d7aa297233e8611fc0b169e45d645e54579a33f90519446be3e5296239a38b2e662917db38312d574fcc97b3ee4a1324d2114891599e038212540545b72abf5fcf4bfcff2d112c14070533f70572599c72d1accbea44e20f9011566d386734af6fa063295844b73e4a93bb3c678038b56b16bdab786559229e269d9044e410220604da69bfbf2e88e0d2382c019bb02c2e41b8b66b174469b9b64815777ba3b47c048982a1d59a48a9eeb8ec7722fa6ceff6948baa5ec7eed56746f6d10032982df613ea20f0299daa24d1827b8558c090973e65c7b9871961eee87fecfe8868f5b051d21368de0d8b91cb5397664ff50a8f68fa1dad568b757e8bb6d2a569431a68d634c2cbb7cdb14151b834cf0b31d638c752c299b9106aa457fca81a67f65385b48729bce36bd380c7d9a9edeb1120457c720304fd41df57e810729c1a5a622e785635fdaab09e4525a742269f3f8c0478db88e7a47d1fcfaf8edbc6178c1a3627bf12af474b5067fee38b80f5f91cf7e15578c66bb171afd07f8b4561c30882e28e816a986e2ea4d59e55bcc773f2fbdcee9ead6eba0250006475586f1244c1753aff8ba8039666b86e1887a52b2decbd9777fa0b0f356fd58a7995b81822bddbea46c2a3438e84e63acb841d64c254e494ec8c5e3e592be96e9b211530c4eef12f83cf8c209669f3a22a54ddc096ed5848f2da545685cdfcf7fb152e38c0e888960bf31417bedfa676fe67c9e88acf22b5a6520b6229fce6e69c52211dad282b12dd37ee591530fd296058819a88bd2297a8174f936d99b2e3e5599046f5cacae20b29699839ec8f05d92e2c650acad7b287f448deff6d4189cbfeb71b2cc569fa156c915473386398513ffb8d001460469ab02ae27954f566175cd0b89592225f0934d1eea25e80150dd8555469fdbb1848755f8eb19d184b67363f626e5b8094fb11d9b8c56ca7eb156916f41dce5326c6ee12f5646c167c2ec332835649007c74497b88e75508feafa4dc99adf093533a8979d308317903059260436a7599d1c79cd8737cd6db43d3e40d5a0021463f9b36f88c46442ae11ba766f8c261561f0c8a9cdfaa40f0fcd2e880ddb379dd7ccb60156eb82364a15a653cc2074f4b9e3d7f1041361939b08816906bf8ab0cd5d732c09ed3ea675933339b454531cdcd2c43629d5847f967f888769c470752085883180cb9436d741092d96ea8b15c1d28c2e6a850136f807050f03eb69d4484b1e828eb8f49e91d0a950cb9b5f46d181175d610a5da30750a795b91063ac05eccc9e33ab5e2b191a638b1ff59aa987aabf674a2db2980aa51ea2fa04c904a04b3a5b22d66acc4378d089299b21095657e978acdcabe168689e3e43604c16fece795f87f9e7426091bc15eb3602b1c015cc9ba7dfdfd0a237737b7d3a148b4a0875b6a1abbf7c34814f15741b962e3c9744d5a76ff547e53f2682df4d9f7d7d53d42f6e182b684f7d9f70a3f840f4a761d16efa868c271128d56bba841c33a57eb44663922813135d158a2e5933fe72afb00089a256ff2c8a4eaa5cb2e351517f64bb61f0bdb2e6b4940ec2bd2da7591138ab302c4655ab0bac4e2cc39ebaa0d350db0b1a9e0b13258d24394008b9c635c80552ae3ebb3405a62caa16a96c7a093ab16d56da0c716e5e126961aa10430cdb4618c124ca93226d43758762bdaff275a307b8b9d7f8ce180cf2f838375b2edef03bdd0460a22c64e5efede51114de1668a7bcd331dd686640a75e428d9bfb04180a81e7694226f6c280b92ade1c2331577a7036dfd47f68931ddbe6abbf41a96071b6d884eb0a32f48b5db2bfc7e57f9176b4080953c73e24d10e121829987219799b78943665c4dc5432ef993e5093034d5e0d28458be915edb0ff2c4e1213e720fb01f3480f6355c72b0b4209730abb20228287f5da89cfd8f77a69d5b8a165146c55b63ca304e8265e04c2dbb8bf624ba5bbea3d8a416aeefc2c5acbc7eaf9ef45db7e1d6c0d92f79638bb956d9f5bda9d156ae568c72a6c36e8b69cb83af86e47c73f6e5e2ec0b99340f9e8db68a1f4d3e8176b0c1301d5513a8440eec692c134aef535e78d07bdaa3bb1bd02f52470e2c8487a55a7d1e18799aef527f010343899287c655f4ea237ba14eec071e0377996e7c3b2fe95674241ba81c3450ab8b9a8b6120340530369b5c3434c0708d73468aa6a841bba711a13de633342103485d861da8af76387ca948782c1e9ef42bc89eb54ebd091050d96d44e5f725c304ebc78159aded96159c651be2ff497748da61bbae024cc0ed6f19998a00c8001a3ac4366f12f817984a44c614505764d18c8747b77f9caebe7ced0ba1dc3d6d25dd4c1c5a582f7d59f2b10e2d9003d7c6c3808eb3ed55743b40348c9db5d0283fd5821f8841378d1d93b9bb4c772900aae18a4fe6b22fed7a7d4bcfb9d90ee5bf74e3b126cbae277a66630dc9bc459001efad46025d93fd6866e393a99f2f1fe403eeff694153d99b9388d3db6f31c6cec9222609abe45afb545243d652f30885faa893f5c8ae097b8ad09121ec99382e07f19178b881cee37a1decf9658075c878694b8a8ae4d4a906c0937e30fa9a09af191c48e88c8a4349e6212ec76aa0881db096eaf37d6914a188ee80fb8967e515266d28ffc0b612a54c8339dd74b4f0800fe4ec0922d47061ed3960cf884533a00b0376a41cfd9b4ea5bedff9b644b2f34b3d9f36ef679e861f1cb73bb9be088a0637e99fe2d22e6962c80d0528ed913db2f1a3894691241ebce87a3cf487c63ec6dfa45fec3224b068af4e197e8859dc553e2927aaa89d480aef270c58d801469b2f45d67630cce28e9849543f6d94ed1f669bf43ef61ebd43ea657000c0fa15492a44279c2dde642a031263d3ff8aae9ad21c9bfeed22277af5a4c04824e0ef4a60a55b9088df686686f89d59b83c7b2e7cf9acd33d0af575f44aa5ef2ee725fbed70b028606bf1de553f3e3a6c3ce6031dbed9409cc29ddc41e3d88bf96bcae1d35d71db55282dd4d2fe20726a3cd5f89b4b42401d5d112fe26594b2bf68906f569646a16cf216ad94027bee2ef3e486e66b289f9e6f9a181b2d123a9e8a8e567674ab5248f5a65616a122c0d2a443005193e5cc8b7cf7a25289c191a560caf64f87bdcb715ae92d48929c39bd3a1d9a8308174844d60bf8378bd6aea1e24ee2ac6ef0e3cdcf9be4f1c2fe6e115c08151fef2910c8a1327820f47f35ee94d08be3fef321f9557ee3b14d447febc8bae1b193d53d7335c425cec3e36dd19170709a301a546f5a637ebf1805c624e1100bdd1f3d790f06f0b0bc207791ccc6b11e7ae5674d18ef1b6496cf62860e6b36a2429f5b1a24e4873d123586a146d4818a6f12abf769fb200f4f1fe6046b224c38ca561296da122ccf73db5882f7fb76e49329c5235771275d834cc8c6a26d2a98cdc05ae1e22dc84b477b0e2b77ff8d0314c14eea4517b808823de5b265b707461e07a855b26c14c45d5b90e10f5c12235d58b4c5fb6ae82a653f4d8891d8d4e04f2f1615bb39feb1921bb33793caf7c3b1fa0d9e8015b4f64b0dee912271daa71ca21e0afacd5bda4bb9cd604b907cd705f1c89a7ff113fd31d3d5bdfa646503a9d69c418d432b43f9ddbedbede8f33ffc2a82a5e05a392f2ca01df593b8ba8859c1af02b89a8c53c178878c7b70fa61c1cd1d5d33c1ccd90b1be8bdaa623c4bd1cecf61c70dfd3470b25ecb3d20dd4b8cf49abedd9331e0b86eb8d7dcb8ee4fb2231ce4370b7b1face8d9a5fdaa723e1d56307cccfdec52ec80768633935a8e2164dffeed27604e8cee693ad19805b783667f3010fe9dc8b6a6dc92317a1c84c2b39dc5b877f8f9613dfcca906afcb679783db178152fa17775cd0fb413417e6fe626dc87a05bf0472b401e4cff4973202274325be0b49499e6b8ba9b4c485547fb7f688800cd67acdb03cda51c203a4d4eabe1d4009894545a073bd0ac4eb48b9d31ed3502d9868b15ff63ea40b3d38a90e4839021e3e04fb08f1b145892555bf51c40f8c7919d23fc1022bfcf65053d8f56a3ae81a5cf604a9c8c1503d1cab2646ecf53927364c8e6c1daae001d2fa6cec76e31a834ba70c43b991aa36f769cbaa24da10e92dc7bbd4db37ffe8ab5e9eb655410b6f93db77e91dc6abed0e9ba6b9a0de5168f5f5d54feb6a4e72016a34bb3ae0f01bab8223ca8bd526dd547b12fbdb795a6861b0d91082955626cfee127ab62e8e7e6c0af6de9257b31fc0609c2f41f04aa15b07f1f8de7e126d0a265952e1a07fe2e81f2b82741d87e69083420afacec959bb7a8515bd7b40e23df5e7769d0ef99c9dcd644132f31b871ab21a6058df9fb4e2dae6148043b71f34e4a894f6c55ef042ec2eed34abe2f4a338e15207295e7ba59b53809db11cdf8279965101bfcd497d954166dbee3c289a05753385e78049ca2b11a050019bb1bd0c675c33982362adabb839fd77b9160f08277b3367f13ffb80820f60e59f94b4b0f5658d726cdc4d53fe09aa4e4c2ae62d0c3e5e5134d662f6a49c638b0aa825d03582607af0234ba2410df6e1e3724e52749bf40da7502aa2847c0877e67a7ad1fec6c46786568a7f0812f85277d7b1c0b84b931aef84f983614bb7c6e4ab8931aa549ad9656ee328c4226494b7c1435c5457f661f11736d6dbc75d8526c67e362c6960549bc84f335f27b3105c7741d95dde4514a6e34e59ef7b53f2e3c3e78f4248eeed8c023820d33cc40deb6d233671773619625e42b376aa5d52f75040778c88d31fb3be0a6af303cbd9e1ea0a431d324c0485cfbdb63cd73d7647a3544a8ee74f1eef71c63db8c42dadc718f923be28057e1ef39cff5e9a66c9b4ff5aad5e41ce9b681bb0844cb51635edb9f98cf63aa41a77f89cda6d4db10382b8169428cb7e819462b5f8b8c5fded75f9f5b8551257156d9caf19528502a45dbdce197e6b6fa57306aaff7c6adf0aa211808e425635f2bb58c11b48a9d3fc86b3beb3149b381c42283cd5efc1317550dc00b74501bc61f8bfd156cc5cf6c8c62abcde843f17fb9a9647ade6c36e5fb9e14f37080f60c9a0934b4c3939b49eb5ed92aa199df445fab89bbe2db876c261332f8c9346855da15d1693dcb3cef22a25a79361e0901eefc8440a3bb861a602f5d062839202c7d6eb166f2ef1ebb9dbc065da5ec82f82cc1d2089090845dafabe0a459147e8c267c554154d6a0436331500c80d38b09583e560d697616f83029ffdf84155ac6a2b97dd0fd334c3c2fb02da14f8aa1d86958e9ee28e6ee1ccf5ba46f015b02f884bd431d04dbb54b24bf2390862815c0d0ff63a1c6a101ae0926d5aa4e8f5ab9b17f23b6cc8aafcac64d4a76908e20953ae96a8d35407d8b47e0e90193f3404ec81d0e2a8d1f5c6ca113e3b3f3cc1b899b5bac9c60c5b8738f5274ca90bffec7fc09de7fe18b700e25011caa6c513e207efe195ab011c4ed29cc26a83b5fc7cfcf3a36096cbab4f3b9d9debb6622f45edac611ebd90eed7934f449e0e2095216dd9e591a7f65465e65315ac226d56076bc307bbb92d88f69c78b75a89fd4f10ed323a3316cc03a79e2ce86f2aacf5a3a6bdfa6e3afdf71af5dfddd6cc881f7237acf5c0bc35471dbec83cd1e1c6c9f44ad7538491a3022b38c2a5d800ce1eb7286c4d0be2ab3c6b23ac7996bd5a9acef7f77122dad02cb281635b311bcb265e1ba7a93b22626c4da861a3c5951aacf55e785e33a140de34b00d7885728a04e7db9aa0c83bebac71bd93b72da839b6891f383ed6af4331ee9e2aed80196117caab417b7aa6041438432876561f56b1c494ae7bf8208c7479575564689c332c6d867cb09ff754696ac62f0f19d184dd5aff30aa13eacecb51d6ffa88f58d0d757cfe558a23d066c01df7122c48ac652cbcf2ed80f228faea69195d354ac62dbdaa6b79a942c49c3712312a47fdac8ddca545da02a703afe45b9127af5a996a6c27430bd352124b8f7db12c9afb939bad83aa248dc48f541bacc9b5a780b82cd160673c1af4ecbe45903ad6d4ad27e3fc66b7f039608f920e847fafcd25df012edff3235ad06b1cdb2a2df948aaa4cee2e55233a832935900b213092e6c3c40fdeefeb09bdacb736ddf62bf3154216c0f77dee5f64ade59d875283ceafc1a9b38b13ecb1dcad2cc6142932dbf6902478be76dd754755a3dfe3d9d3de572c2cabf4265f4e543015ee84f021d546a592914c7022360fe8ea3951942e269e725cb448336fb696092bde46f5c7df1058c773dc6580ba87b454769fcf790dba1a0e381b94dfffd301c6cd508e24d18d9256871cce86a0bf6eeab0f3fe316f999b660c4ffadf5324369fa28bb10dae6f27762d451fbac0661cd0fcd46e0ee1dfe1284020078fb29e9471f5082db32e2f6639982c4d803450ff0bd116de23c5c820e7f7682d8e347314a8d5c1c0645bc5f397547a6196e6bbaea778b7ce0bb6aa4c993581cf6376a81c23ae9615005d7f7dff8baba322982eb66df052d938b7d59159af985075a9540fd2cbdfbbdd4af42a5cf34d35851782eaa9871ea364a2c59de7a9ce0af52ca6887c2a2d5ce53e6c3f454077772b3c2385feddd7bdd74fd1f63b61292b9f08f9baca06c6013b3a30be8b647a2af8cebef60e7fd0ff0624848108805b3196e8c8bb657f048f612638626c6fb60e995d1c76e83f6f0a275243b10a4abeb01a22f85473e33d47f5404ebef620720a837ddffe2cc0f090c3ff7385faac01cc0e12acf152d0776d46b9d5a4233943107c43165fd020352d7bcddff436b3fd7e9295c324cfa30ce910795c17afae11f8c46184143bdf300a38cd696d00cdf935d7053d382f74f8c4e5a23cbcd9d3dadda3e807d8a509c2fb0aeaed70c813a6d675cd796b75f3732f5d42d4ee5a21b8b8c76ddb3d331f363c8079ce86ceef782afd8f3a2265b2967a74466fd85a320a3fc9d5cba5227977e37bd92c098d55407b230d14459b09523acd901dbf541c4845602529c656020ff031ed2645a5bbf8108d556a8a940162486e7e979f91da9c0aec683f9aa635f0150f427bc3425942dc73f4bee32e178fd2708d2795c308f9d9ebe5e1abf1182411d5cc3176da28dfca72942e66c8f9fdc5aa151ad1079be0039504c8074f93a65e20ddd3794cba0aa8c6ea582120d1ab9d943b131e11ca006bd5da2041acda9800540ea9cff9fb4f68ac39d41ad7d26c77e65cb9d0865878699f8dc9462d293983e4f1b03efce899991125f0e06cc3a6e76f72a26703aeccd7b845df952e9239a553be5a31ba6eac86516afa5f28263b15b100771e810533c1c7aaf31a1f93a72445e2a5ffd74b4a74f4388b045fb0d08754c76b2ea0aee9b157f0d56f7dbdd1780c2923389173b495273c19f650255049d50a4e8b8c2aec438836e7af7e4482b3bf35b855b66e1741b352fc45da6da7b2fae5c951a9498d1a701fa18cb09f4d4fd554a5e46a3184a895f78ec95b55a54e567126f106accbb415bdc8a95a45fcac0b93bb68a83b76e420840ffd52637652c970514cfb832bb165dd155ef1a5d7d120441db61b9abc4dbf70eb5b598e56eb95ee516563876afab88d68e4c6776884082c8025e8516770d821cdbf2acfaac5c7bce3a5164a1d5a6e72bdf2ddcd408b404f6194c34766d4d1986e64bdee2007e9030baa163b77d4b35fa1c02f494aa42dae1ddf16221b836d43444595b48a9361a33fbff7bf706ce05fbf6afe6860e57ca38ba89b8064da7eeddf51c36f60129783c5551777231fda75031ef2c43d6ca47e37af656ba8c5b0070b46112af8e4faf3997b151420ccbc8cac1a1e664b557089f7fd0b8566f9bcfebe426a6211ba5c5fe4831a27b298cafe8e3a75aaf23e6a66d90a59b795b505dafbdee0ea57ab889ca5a75207f55d155b720dd71ccd040cd3c85663d8ef0ca05f804c0c3ae7a4e33164fb02db84c9d28981b00fbe3b90b7c3d2099796dfacdb24524df5d69bfb029b311178b3dc6a5445eb318e3b9feb6de6e7bbd71f46ccb40343cf5556674b74f6a66a5f6751cb684c20d64e0bfe4f2bcfb7f69bab5dd2812ff75c964d205d285fc3fcd9701874a9089d2c81575354808461493a9e0c1223ae7d39a6cb8de94c6f59ad1bb5cdf487ca9f327664a1005d49b33edfb502cfcc10386ec9064c9304e83e96a9f82d4056812633f3d6a54f8cd72b43576a89c0870e0d77d3945436919cf2945d9059105dd6e5f84ce3b174aca07c39bf2fe42cf9982bd12d723796ca9436cfd8e96dead855023bfd38d1e1d6361e85696603c2a8259bf895d01da7c132aa5f9b96c49468d07dd28fc38462fb0b5240726551d7b425a6ce0c54cc85e52c90d702a5f48260f7eb141383396ad2289c20b4b4478f09d10f2ef7b0531a203a60de3ecda3a4ddad173a3fe84b2b549889c23db69067dbd6f43546f6078a5f7ad8371c84b4824d9705842cd05cd201439a103fa631b7b7f1db3d09a3fe95540be645af670cc1ba6248b0d5d6dbeb9abb6b1c3603f502ac111addae7b8a2181fd66019e071651432175aaa8deb7fa655cab4fc4eb9668400182570be5dd86f1e862ae643427bf62535664f6ea2531444b4c8c390e50ae0e781273ba465958a21c6e717bc82baa7247c2d9227e4473fa3a7041f314ed21ea35b55a7a3a68f2ae341bd5ef0e1908f580271b3aadb7548033aa0e7e6da8f4f94624ad132fc04c144b7011b9bcc786c56889caef26afec563ed8e63ddb613e41497375d3f0ddc091285614a7eaf2eec1272c3621b2f1385b7d0ed5ca7d278085c78fe9f8637be77c54accd8c9ca3ce2bb7e575a8cabf6e0d378762a1ccbb551b8e63deabb73a85c7bb4e8c0696bd46e9ccadf5e6535bd03322feb058db69c060f3b4020a88764500eeb47d05995b00ec90ded23b564cf96c212a07a6e9185dab977d2d410c304eae87a5a9bdd03d10c848da755961749b501dac451645ec7e7715afda957b95a985696ddc853aa8de7fb739a52c3688043359e7b6a8d14d8161ffd1830602555d73d162699a50d89c33fb3cc5b8f12116df7422f4652fb3a95e1301a79cf7146bcb0362859c32a9d1e66c037b2c0626bebc32c43f8b85505cb2703d9b011b1726ac8080d510032837c7f52041c5941c4af8940aae565ca0dd1ed4c908639f1889856ba9b00acd4fd4eaeb60fe28471db3a131fc1a2427d49c5d845fe4ead7cc63c900ab120fb1ec0491b00b114e962b7fdb30e867f10049980be13cefb645b0fb1443a330ea1b7c470385fe43661b067278b38360cfcb3ebe7880f2eeb9dd1ff75faad442904ead7067ab673a432fbf50ca21cee0f706abdd074176cdb7cc3b87fad12730eb5adc407f219f9696be47abce711f95c576821a6b656fbf691762da2b4d7e6995e2d75ba0b391333e7d6b00b32630365bfb79267c79d98ed59abf4b30c00ba7879e7091bb720755aa1a38b54cf0f6b7595c5f3f9a4a25582a984d585a99dfbc6e6f84657fb7d6495c3da05a1786a066c2936415cec6e37456eb798470fc365ea06baba675a4f4f9638a223e729798a53ce8474cb58c485a5743015d90ba841b2035617c952b55c4005efd8deef2a642da494837cb5a122843b195977eb3c5610f3594d61123b2ee8a2fc5b97645dde007c38694e9b22a550cd796c02533cd0a6f7d3b71bda9230aae76c7581e41c730f27c9988b8e112a15b4165bb59e0df7ba1c3fd24a3b0a1af58340379a673190e48de78055c71a235dc3ab7f34ed09c2eeb42fe33c4d5da659c12e6553e878d9d9de5141d9265d014840a328fe78f5974bd671c912dcc49705c9e4030ff36c727232d3ee7a3675e28732fa1df1cf5db53d43c76cdfe1c41ddd333ea938cfd10d9d90f35ddaa3d9192c84f80affae528b30c8f7ca4a2c05923815731ab76c336d2afe408b462b6da59f034f986537c2139f2147b84e92bb22003ba6d43ab7224f0f804f212e62e89026a1aefaf06683e479cade27ebbe070b6301667261af38dbe983b471643eeb977de3fe7e4fac703c2e23feda02a886d66d471cf5b2c13dcdc2da8a8a85e9a825713160e5a39654de9f7c7d324efff50b636f5de6d617ee99e693b541b6855dc3ff32bad09d7589a1e6965d4be9e31a707963723840250ed58a5a3812184cc0586fee245d67469202524b6b7f0b24de5bd466b09ccee5f43de42fc18a9fc68eb38277a680df2d1ae7747fd99eb343b497c9dc51f753e3f8440b7c3f484942428e8dbd58fcae28719c7395a91dcffe4b19621bc89e6a16efbdfb86cb1c42a6d92d4fd8b5e1711320800a8ccd01203e39b342d73944138a0cd6cd58a5a4fc470a295bdfdfe5ec2e57e74e5db26494950a4856217b2935cf42a4d10f845d066ce569a48fbe74a6e01ad583e085a563cb99b8f7622bb71cd7a68876296c317281682ea9b8b67b3809769258baf32df770cac2f4718857d3bb1c61dcb4321a088414f3bceeb0fba7ab10cca4f85f34004ebefff399041733ffc9202498a8ac067e56756d47e3e61fd9b1be1f548feb11ca8fc62458779cf416b8877c6e7e87cf85eb83f11577c5b1936cf3d7561ce63371cb18afc99d3f0f073c3e60e540692fa8274634972a73d981a2c05e051cd4e7e9532c68aaf2c3da749b84eb6e745a9bdcf1c952f03d282e7f3e24c8b6a5198ae4f801668bbb94e9dda2492159779515149b2b246badb8476bac0e9c997286bca2d244c78a52c4978b3561e172648f68fc3219a32a535ed8a658c7aaed7c7e3a382e479ca54d6c92d91baa8a8fc321e33082f483b3855e904868dd30d8c37249ccd42c9ff9167803062b2c056c8ac7f2e0651cdd28a41a5d9e6fceffe9381bf95ea082cf495a0fdf8b6cb02eb606157266e52c6222e3f502669826226ebdf6b17a0b897024c3b164d18ccfd5711a470b0f8b650c37f6c525533dd09e7e08d995975b00180a59fe477d42fa91fb95040e9995b02b0c03bf83f7c90b044a7d479afc89e1d83d97fcfc0e05cfb95118136bfd0f3ab04813d8d28f321aebc3ad6b5d72e611aab3a8f703ef553695d6689b98c55c2628852f9443e475d3ab474fca08d5187018b35a412a70ab65b6329808a414ea4db1eded67c946c57b2c4211adf64aa466374c8a718065a97304e6a357fbbf7c1715ce8c07d760a0ce8fa6c2120e3872a179d6af33818bf9207ed7cddbcd45341670c0b1e1a2b93674fbc49cce258ba95b36ac47c9405118027f2ed2af11162463248ad9ba201514862a1ce2e5766fbfb02a443fbfd94f9c609b5b12d2df351e5db46a94b2bb499bbeaa5b6d9fb457efb66134517132edd1dfda8ae9918ec3fbd4a79760acf52026910f84044aecf68803c140a3d9b9c0dfd16f98d8ac0b6add0e5af349c06b1351b46b55fe790abb77dc79925e3e4917d206f888f0e8cc2e6b051f6815c6acc954f8d6833e83831febb0add102f8aaf4022c62e10fa6c37921cd751d9d0a1183e45e93b02cf4f46f23971ca98dc749bc5502deec06a21b123f6455922307ee83e3bc4a42e34fec8a488a1cc5da56f9cd03af2a2522821451379cf8556cf219030baa06d4e7d940ca7195b0d127e481289b1cd4e390f2dacbac710447b801885f93367c85baca9632dfeed74e785a9eaf82537b104b7abaac55aa87cdf25804996c6e3cc17a43435dfe43583e69104392d6205efbcb7cf69b59bf97a038c2fdac7da7f94b03b64c069c0ede937c5ddcc2da8f25c1a0175e4e90bd311e299cbddec3fd5e23de7e01fa520bcf57edac48529673f298c15a738966655f54f0020888a341942e689108741c420f0a2979fee21081f0891815de0d7b2c756f33fadbe42f1c0d415595f6d224eee0a9856fd16fc82252373a2bcb51b8ba44ad6703c3ea165b761c41860e5152d790a34b37c438b662b780a23269ebaa483aa2cd93ebcf75e3f7b353f8cc1d699c86e2a366b6791989d34573461a5815cbb4d83fc7499c58a91dad3ac1d13166ca2509d33f087c80431293c99672447df81bb722c438397a634495a65dbfe9c8a091e21383905ff1d9b134a1a9c4f5df185bf513e17fa3a258efb908f135a7a86d29198fb17463329449e85cf10141bfbc3afd41cc558eb207c1b112fc7c3fb86f7c4dfeb43c6b0628bd32b5444816e86fa20e892a6523e8dcc89afe420fa4184c9df9396760e8c4e6f1de03adc28e0600f733748ace378ddd85f9760cefbf218cf021e1a2040e463325b51630207f0e34922ada8ddec2690f7b9c336dff46f00982f4cdd99a3ef9566e85988a1d1fb7120356360a4274eaf6e8968d4f32c5c997976a257d397fd79bd82f408434501925d442879542e40ce6114c92c243b00c38890b238a730600d456717e3ceee018c46f88025a4f6acf86b28b0de518fb7527242ef9e4509b90c7c227d24de4022461f41220b646d58b838287e87c27ef0ceb7b9de1fcc93aba6ccda907a14e7430b8a7b0352587146d2e04c3c686e6416d5085e4e8d0d28d1cb3370db45b9202431289de0eebbb80cb671c5192c778ccb2c8f09d0f74e4dd1eddfc9cb71ee0daaf6ee868d65e4521c00c8d39200395f2a2edb435a20a99501e56b5be14aa9acd86a2e4aafd4ed4af3841a4543b2601308c02e7d9bfbee7b215bc2fcbfbf23a1f27493f88f2a67d5c2b8c6f8473c2a3b984962dfdc12d0760beb3f46251e0cf1c83fed4dcebf7c7236d9f5cbcd3db6a6bcfdff430a5b13b85157d62b93c0056f0d5dc4019e1cb079d8eafde201d11bdf9c3371118e90d96d40faed5d914b7ab22ea5b15fa3266ec04f46ce58ae3a830365815f666fdbd36dd2799808d77c32d4abb67b7731460094a359bbb1c1ce33dcfb571fd30d4cbd1c2290cd0cb069191aed238fcce453f78ddef14e9735f024f2d7b74ecc316bdb9e7c8de6d40c8899ded8f85f541b89987706b09c84a86ec3f552f3ab930575d81e7742cf201668735e6036aed9604d32c587cdddaf5e2f7ec8bb96984ba56f28fa290deefc0efd0a84573c2d999251c0a42f39f304414b85d539cc468555bf94f8e3bbe247a98f1b44905007949f357cdc38e574736ad57c98d44e180d2a9b780410b6d3a90b07d63ef4f7b0df0a46b1d2640962d40d29836bfaac6e1fd53b33e46d7c1e19474cce18a4ebf635640baadcebcabbed70453770df31c3b613a77dda447c4239957f7bcf99f1ca7501869b80264dde385fe5e4d530a6c70ccad5fb6e6bb1b4d6ec66ef1298105c66b55a59f0d8f5746386086225ec72b65172abbe542ff1f6b2433c1be4b27f1e8ab0c1059affe90e17602674eb361cdc236711ebe5dbd795e5ede3137db0a2ade6068df48fcb72199be61dbcd758ce655c404077000d79684306de404021d135600b45767e880596fd77cb641e689e3348d619cce8a63c4fea8660e534857e146aef66b000384ac65148ed8d799b7da72e8c6d618bd8a8e8bf8a088d45593d072516b6bcfef1e2908eb7797c4ab864b1e7697ff656350e02ff1c0596dcdb380380d0b46f0b43743a1718fc1acb7ed34204f4600607f0466377701edf4c51df11575acd516d720407b62caa6e441118492914867eb77b9bbbb262cded88520dd5c2ef1c6067a5cc3b74bc81be8dd399f21492cd9ecae74badf200bf9a2a6ab30dc34c64c378305b67e66bcdca180f848845301d006f439a223f4d8ef151a2ea5da9019a80ce23024e7aac239f2279eecd27eb35c5b98fab1be3f3692262abfe65baa96ebb7d6728bb3f78b09231a8369b4cf4db80695bec7a571d402dc5f1773245ea6d5acf877e14fbb97375ba42a310c1b1861087cdaf371bdd757f66d5c8a2f73a557a3caaa949551483414ce8e92f89c4b6dbb4a24e9d351d05637b7ec8f2a65df0df87740d69daa3abfb477a53c70f227b403248f192ccc8bab63f1026f2a5d612632ac59b273216c03d498091ebf453e5764364532b94dc3962f2263a74fe7d635f6444286ae4f5369d8dd1222acce0389fccf1c2bb05727f0a8e5fa71b1cd46abf7a4f26bb9795459035bb47ab9389248040d2ee06ca12fb9bdb0989c15f4d0824eebd133e412c5ab735689858d63a1a4bd19f0166c7760c3d064b10e6c17a08a4a706ad116a34e1d04933732351892c1d26482c99b28398b228597b4f50292bd5ca341ddc104070ab1d29d8aafd19754e3f4e2cfefb138a3496fde0478e60fd4330a34da631169e8675c2874c9372608a8c23cb2db267aea6c9b4f59c49118e839ea6e8944c263ddf838fa6807c5ee4cf75dd3498c758643e1ec6dd18f361e2e96ab5ccc3e028a9d581618a55d68f2a66880a8a9c23a0a3c5fb2fe701b22183f62e1ba3fc00fb79d2e5f572d8d5855b39850102229e200b7f4a1e22f51ff32aa1f7c9fd993ae531a79f98351d51aff8d109c539bec8b84e30609ef29cd1eb7ae5b56511dacef559c897e72405f1426abf60a1470b283845474bb7819de6e0df9ba76821ea3283e2cd468c41eedbd2422b66687572f35fe59683026932822d02f762b022a1128e3657f2d46b1ea916eaf656278252f14dfbebf1367c237ad8087585bf9e8d3fece5ff9ffdccbe5481602a364cd4a9d0b298ae85af486e29107148b05ca14ce9416d716381ce7c84cdbcb1ef236eb01e3a141fd6def1bb4a7bb9b27a4313c98f2590aa8deff39680dc732175cd44adae53c81a7da8b8ff7d0b1f23bdf403c9411e0dbde6b2538723e531215d0363906b6204e4e46c31b9618a7c4996f6cbf02e5ce4aadfe22a22100636aed16348c261fb04c61bdd9f726ebf1861974bdcb8fdcefcb06f0395fd0e72faa9c6d2c366623ed888243287ac245a0fbbca830fc0e9c06962439603926afd5e30b2b6f4d0dd46389cfc93a9d74db923f82f5b838190d402fc4ade1a2996f02ca50bcbb106cfaf31f690becb423c9f36f674bc62d450f620156a7020ddacaa10573bf43d9fdc9c79d88478dc370b70216f3914d0e8eb70b4e018468401baa774a51b9832943e22c1d1817e2941af43a8493e56b4079674b9663a234de59e710e2b51ea8f02e1fe41dee8e09dda820284c157901a3df01f48924eeb621c3e2a017f30e4640076f236be613ea71925852f91a1af2c5319ca6fb7647b859131fd6d0d57a05a16f648b720a45984a3e7d579ac04af04be30ccec8c8c78e3e07ed6330018ffd09928d8ab928e8964f45ccdac3591ee2a37dc42a3fc8f1f1fdf8a28c33f9f09b7e44543d5f77366946e32a8b319406abc10e95de576f2c9aa4f56fc2ab9446e5a3405c70ed2555027f511a1108f4e1b4a6b57d2a76af09c25843af172207528f8ebe2a966927e7bcf943eb9397cc1252b73e87d9b181cca1c04f99284dc91064db60b51a8586052c8cd73a1805244a2a48e921c4d0810a11918d97a874b008da95ca664d12fb183d7286f9921f43cdd610a3163c3e52c6c55712591f3d609f0a1202d2f61938c63971ad3b1e9d3bc2300c2fb42a80ac96315fc140b5f2e5bf22bb27df0e6b3b0d2059adf21b6c664e7db936a0598f31d66daa03f28d32568de09e4086155ced4e96d062620b9b79faa04ec1a8c07c78e54ebcaf55b165a1cb880d1d706d57e4ddb2fbef0d359249bab2f621d0e5ce37309c37e076f39312690db1f368acfc04efc3e8a1ce45e933c8a53430828bd6321be9eb68dc7d61e2f1ac92e09d807b8c9677b9a5110663c07c71a5b7f5c2e1adc40703010ede3f3d5fbdacc76ea26af59d26cd0f432a7f8081501a5bb0a9b9176f6a93639f24a7ecef1071b5928f11f6b72407e07d05a90a20eea6ad95e2333d7460f302b60084b9a71097eee013a5e5e57e1c24cfc76bdf2f0603ee1af68622416829d68d6a55fef7a0332f9aa88690763f9102b36b9cb24932b29a8fd18a6308663598e5e9ad58f1e7e93884d149894a8cf79e2f1d8322e93cde37f1bfae151edb49160749941be55eac24c9133778d81cee3fa0ba19215dd52680c1362949131ad01de36a8ebdf1778d935892ef0a5abee53186d91c69d01ee21455f413d75a0cadc816dad29b1746aa248a21373b3f991ade970b57c08a083b07ee57f105feb950dcf500ed244e8d547af9f5554d011779068a48210287afd236ac52ff3376ce8c6f7662fc4ab71c02d00c3591db1a80c2a3bc3bef5eae02cd4999d1967a7fbb22511c9fcc68de7335d218bbe91d17a08ec7fc7870ce54300b5886b4cbeed742a1a4a2da22bb065945e4ac92d198cb0cee9083865ea5f7f7b7c1b8ae4dd3985d3c4473190960a17c8dd31db15aa84e4019435ddcc1f296ee241036a8d422ab978e21813c97df94c2a31059ba6eb8f50308ca5eceeed377057eab8a23d121e9cb3ffd632542d239eca6a428b02817b89e2ee98c52a10d53232623e6d68dd22d4d718b9809acfc1c9d0829115b7e74af9d05c22e4a015c3a29caecef34f454a9852e461ecd30803c978cc2c95a7a29a265856a1731939fcb0b552121498ab76c729296510b41c55a2b9c8c39107a0f3cb3dd8f71cb945f36e4b0413c42ba99f93d69257653a1c6b56282ea3bd13038ceaa27e415b9114e8a39d2d246d75031ba8d9498132ffd0df7cac9195c0b38ca8c00cafbc61f0601d559915407e4593c2c4fb177575f763cb57a341323717663534b11ff5df966b2b9c70663516a2ae6315944e9e408b158a6e9566b4489ed9ff3fc6d0d4b51c2f00d2479bf7bdebe7d20ce363cb630b6c3467bc412455f7cee90a737407e23c4dbb70790ef41853d961f4b16ade92dad4068beb2f8624e7e4f5bb411068e32c8af9fd97b420180c9989544dd5d380d7e48a7750ffc2d88d7f1dfabc7a9a332d76021a000f03bfc6a543ac13755571d2d58d9c9412cab1db5cdf4ad5786aeb2862113bb666194b6de3c94c5c8d50eaf3d51013a7a6be42d1cabf6030ddb521132c872b38dfbd3c73efb55fa8dab5d343751cb993243cfb66990e7bc3ce1a511aeff993c03a237532f699e25730be7b829695afb646f82ac53e05a6f1d03b55c3331940234bfac87f1e68fd8f0f67a47c64dda6249012b73fac301e088c084c1b3c8ec4a97301121999eaae0e9c32714a27e947f48ef845661bcb2a46e14300b354bce2e84a2cedf10a02ed2ff739ab38d348a091ed8358174a4882a58f67e29633d953502686f9cdd43a12edd7a962b5df4676e00b37edb73b12a889894e79e48c8b52b165aa3088903955921b6a14faed4f637fe92357b3776a8154036298769f0a3f3636d4b9de06bac31cb3586e844d126a72111a0855cb97ca1471927f81c1a6d948799105ebbc9f60a6fafcd12b9c365762bdaccf56fcffb992d6f05176bfe63312417639d87f9f102a9c854b140fc2c3f3fd3d31cb24a295e2324fd3a26504a9cff507c1658f3a2aee8ed123d43673771d35e9d3e34583175bb8b665ce31c6453e05295bb030d0d383436eefcc5227a70a525165fd6455cc487b09c32c1812139c0df4674528d41f8b7ec758966339f5a2c64e487d3c6b8f847ba5964011ae2d9b4d45a43fc801a62bb743b3618b24828be7349090ce79e62dd97d607212a0684b2870c653750920027680c88103ef42059ed30066910b12a7a98cc5ead92169569a8b7f5ab412664bb03cb4962fc57729686ee61e369dbce1f21d531ed54a89fb8f019967470ffc2d879b30a622924628fb6ee9d0eba403466a8c4af5b2ec86e6ab759d51a1395208e804a694d3968583ada2072c014b5547e420ece169e9ccbd34a60996bd4a63252de3ad378e0ab4ca54c54e3e401c63e899dacb1e797950680051021c55ff64f06d0f0f97061236c3d79f3938bee9fa50d823b157204e95aab4d7f6a400c90efb84cf57c15fc031b09af995eaf85cc3e34890457f88c688faf7e9a9d71a6d3806672a3bd4573add1d802c3518ad425aefd2d00dee9874f498298441b38f44023c597fcb4a0225ca6de30a5e0cfd9cbfde2e459f6de4dffc8a2b00dcdfc20d0e6bf1739866216662217378e8fedbee115debddb0d5cd1a2a3b6765d5eb643ac43d656bc2a3e0a6fb9e4702b3221ebcc7f1c0c170c0be760485297e30ed0612d427ef7dffff256d2b6491f36441b87bc9a0d163d16b92d113327cbed6bd82c648ce56a3b941b1240f1f0c6b974f437dbc19f601cdca1251c9136f7536bf306402b7ce2637ea7df305fef0a1b5ed5afb8311f02f85b169bf691e5388acfd7e803196446913a1852b4efc0096819c764936c7679b8b6f9178f23e42dd2ed056ccc171d8bace04746f1f94af466223b2553cec33a74f6199a1ab43935b63add79e15e0db38e6e1626438ce8e99fbca66867886c5a4526915d1c0e464d20f738c4f51c3609fc796650e4023ebb1990d707ae455d448720c5add4250f1c92da4f78942e6efffa342d5855f667072c4d5b659e3e5724db959f70c07da61bae1f860657d4ab41b3686caaa3547dc46edb17cd144c9d6459db9f9b9d835f42cf64b5c4a969b8d6b9857eaa402573dffce99f251666ef2329757702ce12aedeabc87fe439051ed6c955a981e13b42b5e85c3814d959a1cdb06f214d874f7ce5de3c7225783c136194154f9f3f60417e66a25e6a4ed968c5404e863bb34e1c35dc7a183912d8518cc7dbcb35fe335c70562a48399d4674d1e6f832672ac977f21fe955ed6064787e1519e66710adcb5a44a8f938f6e65e2ebe17f781dd474b7c6323e229c8607603071e45c5765e33d93febe85262f21da4c6357ab77dee96fa01c3b0de99da685a385317d34638922a6c5f517c52ba044ce14f71ff2fde363f2fd9ae046d588821a88af306af9ab971d302c92e3df0c98f4e46a806e6725a4b3b350f59a8be0f6582b54325809b037ccac54d54f0dff0c374197e4a1db696633353335700d62a2bc2c1223eb64049fe78fb8d4a36213a3f28cd2d3421fa6863d4a3dca690e687868bdd070e692bef265c965679f466cd17f163b42ca14b0bdf61e032f56fbebe35d6f89754b3ee96ac885b13fe3a2437fd0b4103b7c35cf14b2ab75e2fc5c9a3a6078776ab8010fdb467f9ca541d72eb0f4c1b341791c13d3954a67574bdb7b118d1ba40b03adf016253d4175de79131c926159fd75d88461716b66e01d9357400e3a77497e8c5584507aa58c2ffaa40cb96a40def96f13d79af09221c19a369dacb371fd9e5651fd22b6b1ec942df13ea9afe1d62e403c5cf9ffa60f060363e705287b57ea67abd0850bbeb211f43a43e6d7f452d12084e005c718583fadbde875f89c69c4225da59a96e830fbf50a3092f4a128b02b1fd4b00ade7f4b415f41313b31686b9c55178481f43ea0888f5effb5e1a21e0348ac7c5a191986674d17ae3047d7c6cc2e78af79660a46e116dab099be2326651ec41de309b2feeef5989b3d5f76a1779f57f567902b23c876c72f82365832ce25ab03926660550618325d2dc7c73a5c13ed4e01a464ca7bb8e9b2ce1be09e5789686d914000d2c5b09c7a8e021ba72178e6adce623721b42a72048e1d82131730d20b542a54f533199235f7e40cd2155c0383d397a825f7abe29a2f6888faafc636451743efbbf7a65c124591068c134eddb6a2140ec2eb0613a7384783941d003d4b8f792e38b5126fc40e3c453aee20f8e7f08ce6035bd7dbf8fb56d40b3834e2f5a517b5a87a026fc2eac2d6e3cb94067958184176e220dda87719155c216a20b51c15ba29ab94b37371e10b38f499e53b5871f6d411b70e6db4188982cd44b6fc09d6128b37db4eb921a0346a46e377d889e02b8a6bbcb030715a7cd9c2d643648b31412cf3b1a03de607e5198cd6c719f8421c7bceca0027eb41b8bcb76a4be60c50c40097b5c95cc8a3daa012d09de61ff2a934cf4a415976812a04aa92ee2a36fd82032483aefa7c864e43edcaba223bce8ad71b9d6329de020441c0e54454f91dc4540d8470cf101ced4ddbb64000b0e35dedcb1074029161782cefbcd1472474d99fe2fe1389d2804384fbbf78e38a675c592e23f1512055d29b02127665adac06d1372b36de51cff2e1f1f60aaa96ad9cfc11f1cdc7945fa8423c1273402f59eddfa96c1f3f23a68d0cfbda18ff0e7068c2d95d6d229c252974c9a47eb040e56322bbd65f627df630fb36e81f650bb599517df294b23f5e54978923c1261d033c5a44309bc3581870dd299cad4f28b77d70bb447b9d97dbafdc9ae86b4838c9ea782bdf8b182ac6a1e748470b32ae9cd9bea15db47b4afa85700b1ff07de89565ff03e5ba0d4489f6008b2e09dfa0458462020b48ab9ff608ecb8db8d0b87434dfb5ff3b3bbc4933ea53b97a15bd08347a1d67078f379abc4d8dcfd7ce8432d5f531a6e3956098f7bbe7f000674b502df246a66528c3df140fcc114e07fe909dc19038e24bd65b8caeb57b216e8f8be0bc8bd1567abc4bc687f6cd09122994ebaf7a78a1b185f35770c5d6402e8ddbbb553fc9d514efe4046a718866ec5510289583eaa172cac9453ff897a2634b2896802e1d138e005bcf67f8ee38592dc198d704e301c530a6336aaf9552d52a64f5fd4aff9ad239605152aaa1b6c094f71815355b12a012954d0499955ad3343f2808a87373ce11d0dc0ff7eb39040323e6918b3c5dea3ba95c8c18ffabcdedc1d22e4ed8a8d89090b8bd8ad800e9f2a7aab2f9ebef830358585305426f7e80de379638f7f7c0d5d109ff748ac069700ec662efd51cc73253612aa2dbb6bd0ebb552fd88066f38d18ede38d720c4a1b4e5182c2d7a17807a701973b9b5bc32a5217fc62d03f16172cb59d5685a16e4d718a783272b84420fca90a42653bfab9b3965618f726890364e0f0f3b2d95bc216110899655f21af0affe21a0de7a7b60a1a25a3e9628864ebcca01e27fc909934015cc4692d6743ffd31433ee150e95d3af387f70dcebdaee4379ef36a1b6f9f8029c3ef41bcd70e26015be2531f0be0ec332fdad4f01fccdaf891df4ba53f581767a8a325d49cd819792a8c7b3b07933d5feb2768ef597e88750ea0640e66ee10ce28e8b2af01ff4d553f7848d504c381e47f1551fb84756e6d1e4f5ccc9d29deae8c73f5c2129158c9ec7df9969e1faac21eca858475791ab4e10251d12df5e1997fc2f6086be34d49c8650a47e9dadd1fa913fbac6226d2f14672346c07785ad9a8b04767d3c5ee3433275f2effd9d798362c7269bdbe48cac30ceecc407b38d703206bc8187d9a2df8304f8425eb8b01d19d349f9efe7f8d2df960bdb17532dce7a251049df71fedeeb1e191d8a9e854fd3fdbc95830ae3983d248071088c8ffb11184c0df26bb2dade46ed851d1b442a9118faeb0fb39f722fdc9bc9fa05bc96c6119f4eaeaae80c5ac80c5e7a1e1a12f804ea0b29fad15ac47e158b3e74ae02b43ec7eb6fc2998a4602092a8f4ca75cc6b834ba1be6eea282e8e4ea26148a67305338ddf48a22d518e446b6f2244c1b2d83281d38409248f0faa6b654b7e0f722bcece3528e0d112d4837abe76aee3a43e5cfd03adfaf9d3cbdb0061a6eefd339181d4267ea2e34c6ec2228fd29ef8e0eb747cd80c64f03dba613dfd10a2f4fe44ee40af0de2a5cd6cb26bad60bf8326f52f082e3e7d62feb1b8e1ad80717a38950cfda6479e2226c096bc3976f5442c7c25246d3de4ef643cad8b7bf2765a09c226d68c2456c98b58336c7e9a5564bbe4a694bd0b1b41b9722578c7cd5710415f4eca3bd8b6d18cdcfc3c55777bd64ec0fd22b814371066fb884fc20a6f687df3deddd01ad0242b80351c05b34acad47a0e2f286f98d749ca6fa8d08b43739d145c12ba203af062973b1c2cab60dc2ca5b1ad3c5190b0088de3cc74adc912f719cc870c27e872fbd10c1c4327c20071fe79c399d77ec2a69a28f81af99f6719f666be748d85b4f5fe11a927bf95af3d941616db2abf161cc5d4348450cdc6099b7d714051805f27632016b68200e6096582a611c5d5e216266f24d682be7b136f50ceaadb2aacd670c59cce9b41c43e0db3e7a921bef79812b65388feae0fd90bc30e68e223e3adc47242dea05e225a0ee9ffd7698cd39206ff22d351e415d9eeaf2c99f91d067e447554783baf74fb1ea6d334e6560586b1a0df0b65ac13f18a8923a8a5fe1e709c547fef2581a5296e8760b8a33be90322b53f987b07274ab521d46fdf98b535ebdb5720b909d41bc60b64151b4f0c2407197b8f3a67b4224b42bd7e59ce7a56e86e6c6d26a143c463695f85c8667e8f7718003577abcb70861d48c600062493d3fe0f17c612559160570129b0cd7977b18d3ac981d85463e3c385eb5682df81fcf2e65169cf63e086a85b9a969689c4d498b9bf221fce21791d717e5acfffdbffc2c7db8042d9acb9dac0ad011c05dea9172b1eb79c402ccfee504096195b90f6afb369d238d62e86521f32bcf9655e29bf48e4c11b999840e79cbdfed2357c52a4f87c86602e744bf27604caa2cdf5083b0c7ec515662a4801d6759a004df8c32c8f046e5a6e25475fef5f861b0b120e7a5e300ea80b0f79fc41d6f44d7cdbf9437261a2ff51fc7a022adb23ae8a207600e2d85316d1b67c88aba5920ff7775a79eebd4ab0a857eb54c22cc30f6e5984a7fe02246868968e43bd7fbc81e150983cf5d9d2eb2bab02d0c6af4b58c8bb20fec1a3ea70b012abe4f8237dc7c887d2994af721b4a5b15d59be798b7350e41586e33eb549220a8e94fd6db2aa4dbe1149a2b9133b0bd92bdb7fae2600c2fcf48a3850650fc5188e53a6fbd0083cee1f63819023a6842dd59362a2de0181a430affb22646e7ba65612a9e4814126c5908d4d582d56499ccef473a8af7843458b379814fe86392ef06c9e3bd33b9c434bb58d519f14717fef39bfc8fa3deac5ef458c6036136ca64959e23f4e237b43203c1f7c4c1bcef9a8c1c25fc1467b56e1c9349d910e4f7abfc10085ed88b8e08c9ca695bd3b494b05fca9caadb76506f265613bb1c63e584394dd6d49a2afa93cbde8168adc18e62ecf7b0f12f7c377269e6616703760477bee3682ea47d357bc5f8fecc41a7ce805ca2de1add933bf70e0c3f38d5405c543893bef821ef708132f4feed2bc05acc989d321f2432dcb55299a82506ae1d5224f6e399c8f938ed5a036c110b357bdaca461b4d936cfc85be3028d7e205da414aeefbc64b3931262ba5e7eed59486ae7d44511cb29795c82f16446ef4ff1e0d115eced7dd60e89c2d5a5809903787436bc62c2857b90cc80389460842af7913dcffa27831e12330dc89593cc22dfb48ea001dd67593484f51ec5928fcbcd0c5b11baabc5d40aaaa31f5a9d32b3cab1a5296fbdafa112f4fb5150afe173f900cd0068e50b28faa6b52191598cbd1c7264cc5c5c54a21cef01f78e7d90eb2a7d3a42db178c305a047174d291bb42d98808b6651f96a480f11967d1c4989f3f0609679f91ee6f042bd21512f29d629d8dedb4cf66c877f20c3b0500d045304aaf5eba5abf1601310cd79fc95587421e521a669ede71de305a5350e018cd03f5216cea01df1b1fd89e52cb9557ff4fe97e3e81024d3bcb72d174c0b66fadcfa0e73054146633105e26ef0ef5b8c05ffb48de66e527f603b1717f5ddb43b9eb35a74d7a2df03ce2be700387e670d2e1e66250ea294e68796909acf5ba63694cbe31e107627c496e7d4c5fd8a5df85af31c95adfcf24ba7d350099134580a94df561519ad1b8a649beddf8e5b6a1f70f9290080f38aefd8efeee6747462b8f7489001e07b2b231171852c9d99c30aced371a15d423ecc6fc805be8c9f251f7ed19caf39d0c34932f79c530ee771d0227cf5940ee9fe798317afdc9c1bc1875137b5458bd03568c89be7ead8702fdad2dab4cab279d9039e98781d648e34afebd707c71abb56af077592e75fbe37f2d9d52eecceebe3602317fe1131550400ae4345bae57003cb2ad45d2869df9d2e3185e4731b6e3d89ddb6b552897a2b56d38a9d7f7d4ea2e1d0317d446d6024cd903d6061cc9a20b9bcb72cb591567f0cfee8e4e058b01426ca0f83a749ed1805251c42843945b03c1365d39033dd783cfb70d7f15525df0d366bb4c6ee9984a8d1160255dfd4b9daa2363ab39dd7f595382340108d7797a664661b1f54839b9a6fd06566c6dc8553eaed24a8a669280eb6c15fbc4601ef82fc8d9f679cb57aaebf7e3cf0a23b87a82d6f1544d1f9e095ed0302d5c7580298abb181102c473472da190770c4747bd4cf0c931ee1c29b129307a0c0818d52a4b84369c3260d8d9c1395834b0a662d576ebbf22504a221b87903f5222be03f1ef7a79844f99001ac9cde46282ef825652fc502789b7c3a6e12665d4b6f1d9eb4a06f5c89f0240b330d3da48213389395dd690786fbd9ba52b317a05b4ab2f6af63c45a4433dc120280efc034be2efbb9f0228ddf04801fbd1ea70db84a05dfd50d70a96cfd547ee238900f401cb600713b7d9c8d26db21a4db251964ea82a0df91bab606da00eaa3734f837a9b569cafd071de8b4888d37a25e290f030b99298c71d3d6f228d636a7804673e26cdb1e45222f988f8da7349813fd63ef13d735b62aa58d920b949ce8ea09a40eb7b9f3f07897ef4389b85a600d04dcaa165d87b7a628c09fea117b35bb61dfc7ed68735b718f67a67f301216951f0a9e37c5a711d0d93ce7d9870a61afb2502b4580cc0f36b71fe0cc380e65b04b4032d0dedac599a18f6cfd0ab90fac8ba22d36220ee5d35a7206636eb46871c1518785357ae6a75dd9e85579059a49ab21f0916ff0a1f9c8c3f957049cf334aaed180123be251707d9e61cb036273f7cd7a7f44426f5aeb493807b3d0dc17f75f93834c5a7165507f1bdda0cdc9a574101a5049fdd53a342b54fce482988fa4b50ce314742eb011664e788a158e2c53d7ac1a2cb47ef0767c34adb6cba36a69d46f9fb89f3f1ff2dd1edc40020a2c49b74ad16f6c805d1bf5fab3c0dd1467967babde61f0edc17174cfbeca2cad5d8c3f120a0bbe201f97b899fa001eeb0ad2940d59d6311f106623e31e15580991f1b0d4b357c61a92a259b7a981150e723a4d782427a05263e5f18fb235487642a6220b2c05e8a174bd59fd0bb78ebd41c1d1925807192c9ff760a5ddc5dcfdc43fb5421662cdab81f2a62f2a853a6fb30f64187e08acfedd765787fdbf2e144d2b73452e5256cd19074ed30d141db1e0b968836140600eb2a6cf35014e2c4ab04332047d45a6bfda5a9c6e3024320ac81e12e602d7640179e199dbea1f87187072a5a2ae296e8a43a69001870f974a4c324b3020f4f0b0b0f796a02e2e360140788ac1a4d632707810bf4995cbe148f6412ddc2993624e4e71f8b72423886fa211ef93f4904ec5bea1a3a09c160595dbb8f7240f4bea1e95a9ca35a081d5b0a5b6e7e86606d7f46664336484cc839724c4561435f43a4efb07639a413130d82eee97bab068caad75cf7545b803967562988189a328f0908bdc54add57df31a8e2e2427b0ff729aac1c840b4962c4b317fb9c7e2c1fa025cef9ef45c6c2542919eba7d2d674b029f6ff625a3e07cc8d3bc4541558ecad808b53c03521ef29e60d0a616aa7a4401c6b5035c2fef8bdaa8e28d323a3fda3330434a8adcf163f6b36d460352009ec2f170decfe6c34d3a9e9f198840c087bd8c1e37b1b16738f830116e663f7196d1b50aae0c99b6deef3f455f20143aababb1c3170542efa7988885d736114fc71da6038d87381638e0e979a396a10daf233a296b98b520182e6238b4bb84ca0657aa4c7863d00b062bb364612f0a6e4944555b6acdfb16237992812f166970cb83c8857bfc59b81f0982a26dc0dae6e8a1030083de140ab7e9d3979a359e0da6b9c411350c4e9b4ef0b82faa315403d43ed211ebd866e95bd6de179f1f3c8200d7313fb184b591afe6d1cfcf852a1724ce76391567ccccb2f5ea7528f5986c78f8ff940accfff667143f3fa99b320ceea87669993d28331a954e657d57feb67ba84acc8f4bc44003ec3dadcd20232760fa6196ed6b9ec937b0eabb110ae3d89d4ab83eec5abd1640fdb907e2b9455ce4240fc42827cd7bbe00fff473e2e8342bcedee0839d872626a9799410e8472d017c394c8d0c57d754533e2106c1be094976b6800137a7aeb043de20502480b3769a8f4c63577ed40405c13aea0702721ae76316892f47167b01d8fc82a5c7a0a32e0da2a2ecb20ded5cd67977c0416b1c9488f03766748cd62820a4ed0dfce688ce2ba25f12055bc4ee629a81dcda7f112dd82780a2c78d9a11d3b0e0bb2fcddf6d7e8a5c054143fde25c53bafad6452fe4ac1fecac538aa40dcf1455098e9111588c4ba0111b06f3114843d0d788775e1752c8269e957cef694d2563b2288629e68490f9dbb5f810b78a695e283921528b257ac9b291bfb64503fa23c701283175504bc2e81cb6ed3c4f2cc8dfd3a04457ad8b3a1027c0552b5f3d18788bf92ec7aef1d01bde335fdfe865469cec2a49af3d159967d6520c04b1e9a4b34a0905ca54cccf85ca2d31fc2c22dbc6998ecd7e2716c7c2dfab5079c68138eb8c6a36825a9f828f4cd2b30a02c787ce7f57f43f132945bdd91f7f5a43d1caf8080186fdfba358b07ca6eb72b44c92b13cc9c4b6194ed9648618230464cd07dc4d6d40d4c7a1454fd5e63317d5cafcd00c2c46fa8fbfaf2b5a3e684310de1737808281d32f4aa8c7626df0823691ee520cc521af2398466608164e8bef137cebc9f48aa7ef2de5f52699048de197b6a32dd4576760caa893c3e8877c36d487c6ebe64f6f9c13b569f818a605744dc9b56b020e4e0c6631acd623e20a093a42b3992b3a7b9b84d52452b7ab905540afcc3923591d58505cd3e512d5448672171be9719f527e49b6dcbb0b54aafe6c98aa07c3c4f4b50a536dbe5b66d3fa07c4f7d6b99f12f20bfc39bdaacbf220f102408602b4b602642542b25740ba007bd4f4320d2f8472cbe03d8af2a14fd28399b9f5caea7c5c8d4acfa27b5b73d34f033766918986e37754d6883b0491f3a6552221220a33d5ca32ae156439bed807b855bbae6cbd325749a370043bacdeb1d6198b008944fd3930b7567d0c37fddef62cebe32b3672a98778b556477661a1ffc1bd6a6b10a7883b5a18e89bab30e01ed0b9786887b1e292d264759451e13afd589fc345826f79f244ed3f07cb554eddcfefecbc43d8fe19be826a930051742699ab52499363ed4c023a4b0b974755d544f5e6b947ed42edd7a6743988b0a05e6a2871e6d9cbe991478cae97e9cf70fb633f37e9f781ccce9f633b7b1e04c0981f4db7fabd5787048b98f3a1764470e259dc67743f8a0908041ab07a65292199da04d684abd94b1d88709059e033cc9511dfcc69307c9a4a5247daa854f8a155b511088f4d725fbcbad6ff342d06aec1239b950b6097bd5cc6c2d96b081f0daeff6b66e288c87dccbe51e56426507f1b5beb234092e422dc31339ca38ceeefd7d0b5695ffefbb44c39782c05b5e7f16bd4196527e7ed4a7a02a25a8bcc40e3d38f612447c17a2f99f4ee586c73a7c369fbccba43607ba8fc6567b03013505135a75d7c0878bd811acb59fca360ee816feed1aa9dda6697b23c5f376a9b2f51cccab6224e266ace97feef6fb29582f6180a5247e8a9db5b7f5ab79c44c6590b0a47abb7e848a79a6abc210b5a55375e00c2960d61f38eab1281b02c74a80373c021a6093680141aa519d51424a777437fdb5b69c79b405d876bc984fb45857037b5cff984c9eaa5be0369f81be6b8afc68c0f482084e25d8f3b5675fa50e68fdf6140b49d8b88409d6e6c5ea41b78366b7969809b517790ed375f0929b738b2deb80be78a2a7e0af6495127f46dcf88d059b44e671e269b81a309a9dbad6bfa0b21e3c258e9668456ff521eaa8232636f04616058e001dc0e89c7538a2d65146a009a203f5cd5241d0bf8f61c1f50288990626d7df6cb529a7df42ba708949c72da151fb620bfbf007e1ee38bc235d37360e3c959fb839905ed346e1da0d0b022d1b71fb6b918d5c0d8c0a3b90677ca5ca91340b98af6a88abb0870f19ab0e602df78db83f4c73e8bcebec2b9cfc4decffd439614664357f169515920a565f0b8499884a01020c736266108e442398cced858af2c7c2fa7ca6ad2a3fa3a8e04cd96e76f7ba566a738051c9eab2455ffe50db46d94bac8a15681ca84f453ab3322a1d148470186b22255e687989d1225810403ec86cd3e127f8d7062c8b079fde4a92b11e3a0447135ec8cec459e1e695a0ecc5c0de308bee5f43188caa7d7df4689bd41e6458cfbdf88a2c711e45eb1f46d0818ee02740633ed3f42386d339bf9be523762032d0d25e9956db7749ba5bf0517913ba222b1d46e97d769e546cfa00b708a20193f87220d2f73b9f25ed63dfd280fe48b4bf5ad0346c8ae2ad4bcb6d70effc129d8e0fa8977d001380f97326e52c10a983467e1db755ce0f1ff37ff0c7a948a079f61f37fd4aaca3d5defef261648b232cb83176706a31f67cc5f3aa2fa87095e25e44f36951d7753fcaf53c74416524165b01131b11909291080aad498a423a76bfddae53eb129526a2fe4bc066380f713a8504907db226835907f2b17abb7cfb8a7187cebc23ea38bd6177d05639e3b244ff6787e3cecbfcb60fe0894cf0d2f7e653728700ec81b14a9034693edc5f0b368da78776cae04bf7db985946b97d6ae8e705bc7ccf4fe12519a1ac651b62d0e179d9ff08efde76a0af4d44c75936d45fbf57b316ad538f2ec2536ab450da0d07563cd9d97deb834dbb1a12a461841b961cc3c73f86bc9b6da01ecd38499143f99580bf27e51eab931158255976d9c0e6dfc542e8771f80a14b6884f337941fbeef9be2b2428ef9cce884ad334e9d39c60f1ee909329d3abfbf7c71c8081bda4afcbc7d2f6b10cf19c251f504bdf6351bb1ab720dbc3812f0805d8e93c1a93452f35667b94747cb2c166d9e6404217f1d89d25eb66feed5bedf77fcbb7e8f9746cc86162c418476fb80dcf30b90e3c014926cba467a4917fdffad1bed6607e24eb2684973dbe616fe8c55573fb78e1a5b9d8ad90f7eabafd44ed1e95d573fa0792f3beae8592c49df131d2c687ff60ded1f60cc1fdf3237719ac2944894f6e2ea1fa359fc7d411bfd30821572013e854ca55a380b67e650bfa1121af8b329e80f9b7af5ba2673c0d7eb54cd197a03366d6e9d196d7459bae72ab170ec258970d09a3a138f50525b5bc45863bc8a743a87f8b7e516470b88b8bb45774a542060eb790546526d24d5d6982f2570c97c4b7d1eb3dfffa65e79cb40fbb02812c88f47693e771856870fcdcf5fa86ef89f6254089c9a251279674857a0705253c79abd0a074f8851e30e0a71df7d2c2d5dfb9f58ce1b0033001c6303b525e91a25a7c5aa04d880fd01b267099e8ebaa751815fe292ccd2cde87038fbd1005b48a5633157d2b4c004dcb5d76ab18159b77ee0e321c995f8d463abbd1c1e3a8b53dbc0a5e8d8532bfd49645d4229d8c0d556c54be2a720bc8075d804dc274394401c737eb38127e89b1bf5572aa7e49779d778f3e0a53c6a3541632aca4a571f5ae0caad592e050a01539eebfed75ea8f33d14e234f1936345ced29cd830cd518107a81ab31b7c39276f46499605c06d4627a54d395cc3958c27a296026c90a5587827ca274f29be48680f3c4b405311951cf830b1464c60f61c8bc237f3ab3f9bd3ce47ca9be2cc9fe493f7deca939f5cac1b561ef5e3f795d045baca0c3c16d6fd2f46fc523ac526e1e073987fe4ee491e00cbe8e5deb7be8359584900330c56b3bcd26efaa2181bf2136719195c889c5ab46237228d49c55e42d19076a1a5e56dfd762ba7e9b1b3438529bb1ad58768a317a7c16b1e1f9b936b9d5e8b92c91ed1fabbc619205040e3e3d97b6cf8d84480643a1b110bb5edaa93ee8282b6c933206c8ee7c78809dd706f5d5e033340de7e6c197baf7f2ed17a958a67dcc6c16f4dbc907bda0b7d4e6e2bb1e91d5a56cc287a308f4914520d5f8e6a1e3eab9bd7ebd70e1c7b84c0bbe82b3f68b167d6d99a00a2e86f3985d2d5cc0ce67e9d79777c8fcf62ea6a1b1fa593a65030f934f816c51a6b1f71b4193f6e4730b1a67e9464d1c3be32a3de01c5ec1c5ac4fc67eb494a42cd7bb294869f12bbbace9ec81667ec53abc7ded387f543c7e457a3a4a73eb3f24b7cc691373292ee02a8487a84fa5d7fd7eda9d4d6b34a5d7f607e770cc6c552d91c032853edd4d000fe99a99185edd37af11659ae6fb20ec07610ee0383f3c4a0836b13d71a17823e38f5602b90102a810f691a6cb45d7b3c700b74b48c665f6d71e1b9dd2b88ae1973cd6388d36cfcceb92ea5d3107bafd41ba6e6a7ee3d93e0e49470bc684847a255e2aa04b192311721c92687a6c49ed95e31a9d251b68934e039824d3b454b07cd8081b7f969b8060718fbd95bb504fea397e353f50271a30f721508ff825539d49901d88b730d97cc02978484176ce5ee2cfd566dc6a6f05b708973d5769f9884dc0acd30a9d3a4b561a29a14bcdb75961c13775f54fccd9cd78a1577a4ca2892369f7520e4b11caf77ba68e45915ea8fbea4df2b9657f999149e47d3fa53cddc8434f1d370f31f7f83aff0bc8620a1a32a87feedb0e4d0892479e1e220250e398a70367b292c02ace337362ae0c902e9ecb63976f899ade457891f59e3243fdd51ed6f2cf04c3ab1a0e1e75359945e8c7d611b477550e61d62979ac0900649926761d0333f4199ad37a8fa91a8cdae30252bc3750a9454aa98a894f65c471a645cf4baabf4b39abea92f207b5b5d03845a39f665c041ea5c0d42ca5a5ef8197638c179e9af98a31c16dc6ca7072af094a8095e08080fcc99889b578919531c94186be09eeb45510662668da3e6ef152588fbd90ad60bf15e7e9dd4a5bc97ba11817c8f52d9a18125598cb2fcfd670815f2b7adac04f499e7b19142293c27851a4193140a82340ac89fb233081b846821401ca0730cd238d37c5508ce3ba1787eb45e48914c9bda90808b2d60973b2f39b5248b5477c4fa96b079b97a256a603e6d88b05a97468c06ca928f75155e01442864bb14f51133d2ff1844360e51f34c58d04263052727a0c34a4f795543b98dee2f48269bc54a20450a68b8a1014a8c3fa311bc21e51598217ed36bf0e3f014ef4206f86fb01c46f6eb8f16f5ca414cf7b474f004f05ca99ba3fe1984f95701bad7e977ab57cff0577216e01e2245f2148e93d75f5047a0af37efa2cb058e4695f961ce25af2cf0ab8ad76a6bfd6cdc4f57d6fa2a245e8ca38aad0456c6e0e1da8b2c080d53a3db5eeda268f2013e7f41dadb87242e2914ac7b864373c392816f4f786dda228e4a8386793912367d7ab74dda6ec6c81a31f4e0e7f2314f35f85b32be036fff2734a3fd2961c4a8b3d5700f70de85f04cfcfd1f7271106be4cde4f3d134bb083e9dc1c340e916a5fe1a0ec404662f1aa16c82e6a2bb18f2013329f191ccdf4d393ffa5fbc7c15ffb20f0ead2f536c993228456f50d679e54441a7f73907a42e9562af474d77c01b709f783cbb0823b42083ab5af97279057ef1b6ef07cbae5db24e6bc65477469605bf15858ab334261b9dfa8dc0deacf47e1252d7808e6bccdd3c4748d7b32ea4ffbc157d442cd771c71153cad86849e4cb1ad7a30e0db14fdd8f7cf4f9c8cc008e4997b5cdf0f801aa97b9cf902770e162d5de6b539417bbff99d1a71ce7e959cb4d41f83e11a32e63b045eedf09628a9ddfa51bf6e78873c8383e3d7172252257c280e6af9652794e6af6a0144d2043ede98841e9665f6b337b0469f6005d738600c5882425ac6fa6c6cb6f54c6df55e39645a982a6e78ea71469b2dade30c3286e910949fc527862d838a84ae719f8743f1d0ee44a159afdf7cff2bfd52aba180ae5fdaf25a32f3fced468d71359d3fbf9ee2f11c34df611921abe4567104326f8022b0fd280c053e75392387aec6980b3870796f64bd4cedc0117af94e6f815aacbb80bfb52dce3fc53385a2cc9be0ec7560520a09dd7e6a6ec527590b68e02a5505009136e3babdef21b83ecc489d40af40875dc791a6c917798ac28a1c6064f4ef753755b52475d57d27b34f3944b3fe37cf2f9659a312df246a932244be733cdfbae2e568ae149c0123508272c24496a8f6b62fa6915eae76324f04935d1ffa1fa033ac255ac542ce1febf94409deb3e24564ea72a37c316f414c64fdc3746fb5e8669246a625382d8b072a06659812f168ff97fbfaea6be7d163eef5d357fa56c4fbd5b31a233720064a2eb70ef1539476e9b7494f543ebd38cb06ce70874b21874b3be9fdc52a7ab760280d1d4f625f2faa73b3957f8e858aa53c83a02604b052b9a1bd61f554c84d5fdd78e3a1e4a9bf9328d39b11d722f0a7f42155e014d8e8112165351b41d4326323e762248be431824e76d723c0d9e42c35c83d16bfa09eb85dca04f64544e446d5e19f8e528ca89aed7f2a6a9b14e9047b302b696cd4411a32997f394b306fe12e3bea9b5c2a5a7c636b6b7a81b834aed9e075bdd6444537c0899a6e5e19408dc73eb149575ad7c3e3b1e6a98b7ddd623ae805699a881bae68edc4eab2d5abbedd550c0f79c5cc4dfed65f91629d0038d631ddbf7b0bdc86ecc1c5a74135681f04e7d8e41f5f51a007185e565c8765f8634f336942be729b084f27e253e253c1a3d41abcd3202b6e333c7e866b7b04ed7566841a9650dab6789b82784ec31898f8733166a3fc92ca721617573e85907e471f66929dfa4639a69a8a73932f7f6576e53f419ac95a3ccd63d0a5de39e58a4e31a445e667658f47ba5f3582f0ceefdcfdf003bf5f464c5c729eafc21b2176a3264f62565de7a00fb38f7e4bae8f1e1015b99e87f966fae39b897961486ccfc3fd00045054e2c5fb89c9985fdc91940c4475284d4d8ff9bc26aeb45feb83dfe333354c97ef0b8d8ebcf8832b3f0b823ad3d5b57658dff93fe1c5a6a3e25e0a8238dcfc162d1eb3105d945e65afa3b8819ad68438db8ae0b462c855d8ef27493425478a5d80fb3380fba6fdabe1b1a596d31a8ca10ca04ce34c70a94c09139b867d7fd940e2048b9bfa24901a6a55e1b6a199ecacc103cb1970c27299512a89a4696a9ed98d1ef86b705f081fc7a023bdd30489eeac5b83ba56022f90ce4b9766401b79e82de72f9ce44220b2a56e1e96c5c4995ccb393e823efb523869576dad86dae172daabde0013378f810c95d4eed9da61af95a0702d36f0216e0f37461d4b0d350f1b25fed54407cbaaebd7bd25d4060fbe3c43ec6f34069f2c983b0b20f8ceeb147b41cc87c921284a366e7ad7f9215a1049000d68269301e70755e88bd07f60bd6ea386d692c1b04be9bdcdbf5ca8872d0c8c3e44648517a558fd9009307b4d3a27f5ab4baa982f0c32adb4bacfeaeb1018c2419cb782dee1d8a88183c050f2efcbe1fbfb92e71850994e3d8331d2ef18da5842beedc8a8a601ed301294cd913f89fa79e88eb05208a6b55e0f2465650bb82252891b4b6fcd43df9dc8680e67b5bd018e32a75d907b65703cf522c94e674a399f909d4582df8a3cf93096db2a6643eeabad21e33dc48b84f3050b889dde2a3c8bdc00ecbb40fbec91dbde308ec35b26e3a68d8d19eb29248ae18d6dbe414feeffb7caf7fc3944de8153d6561e21513c0b5eb3ab9dfc18b6df6aeedc5b6b6dc6493b2cf3bfe484587a24ecc7617f16ecc167cd0352ec9bd09d886fb6ee26bcc7573841367c5e998d2e60f1220945ff7e01558b2baf7bd5fd13bdd470e3c35564dd8f0526921dcd49398b87d07fd73b35ebbfb79005bdf815013ba80c527ab007838ee10709321ca57147310c7a5236b62e83a03ae3845cfc202b1a5a972223789afc4bed15939e10605a494b3dd78ad8960fb229e05965ee4906357ceede0072b2940245d2cb20f604c97a783ef7e1186f71392636b2cfbd4b1b54eeb68c277c3a04d2910e45e6e31ca22576eb30981126a076743e0728aff918daeeb50ec57ffc6a5616e7f05f34bef74e178c368c8129a847aa6d08b6affc9eb1b270cbe262604305895e79850ee7edfcb70d72787dea37b9b2ac2fe299caa7c6bed7804f308320839dd8f819934e1e4d4c19c4738db6caf4a79002480125c2635503e0167cdee2df0d1b7d2b0a9fc1077906a77831cb998cc94a9dbfae1dbf2115b67801467dc8da8d36ba583fb2c8eae6c8ca2334194ae9e1b234fe1021809401250d63b60de9b6d7d9d179bf61a0ab458c1a50c851b6776e2932825937ad4aabf6dd8a0ceff5079b84021daa06e4668c530e585e00f84c84d8323591f4c6951b0fd4ff9bcd104955fe140e88518decb5b97c76a6218700a7003d2c0f06c6c0d9f9c2a8fb8d48b524ea6bab54eadb404eff13e36972ce484e55a0ea65903f8f3959190fd18526ca52702cb46eb8ce2d1b632caf037d79b4f0a0e772116e93f4fb6877cd0850ac2cf8d01dd1a36b038f717edec13ebaf793124b51f68b37325c3e077892614e55d5d6335d5ac869f65fc43154017ad5163c0f0efc0d0faeadc006d621709c71abd5568185ba221682c14f69c5aca9538dc72fa0ed64eabd7526f772cd6d6d611d62bec016b78844740f3ed2da644ced9d3934c4a4f8d7acca3109452fefd1708da69f86f650b22ab3e2a2d8660fec894f1d3e9c20f61a58f8122f4d37895403580a3b321ba0c9d987d9c85c441eac1a2a182e98e514e1b89f7bbdfa94d19017e7aa551585a3dad052dfa722c2b36f0a5477a41d83324ce538445383940e241dce68fbe12ce0fc5ae89aaaf829964f638855c76d6815c7964cdeab3f680708909632aa40e37e10dda1dbc4214cb55c5da0d5f60edaf27e4dae29cd9d088278c485fd94b5c797674decb631fd6b4f345257cde0a4f7fd3e19bf13287edbab92a893fc4e1c74583bf733ac3ea5b874d119c6c454baee80458a388f39ec15e4fa5a7380d8bed5bb869830c319939a692b3a90768088adaf7098bc6ccf1d9b0a1ab21e5471e21e1a70b7b261b07c317a509c6d79b83568bdb0ed6ae67c7e566241e8f516a3d13e87ba73bf8c2002a824a24f221f10eca8590694afdd764ff327e959dfbc50e37eb462a26448681576d8d6124b446fa00d3dad6d74ca4170528f8abb45b6aec3372c4628eb0509f140b9ba097920f17d4ed5ce341dea7297f8377072959cdd3544d6dd3a28d816703773e1ecb5bcb3f35e02a107024dee62ce3723edddf3db26b27e74c1ee612ff211c7156cb73a193ceff8bff741be78ddbe19ccdb1acf89fb68160cb9c660846f05ca81ec8ae87ccb82c1b96b0f8df52ed19ff63f0d579aed9c64b663b8afa658e1f26364c33a6cf4413d673b40f5de6c77155e2d8d65d002b944e7c4ccd4ca4becfae5a98ed10ce8ae52a5b718bda0e177cd6870161546e976bfafcce3a6f5a6bc09e1ffae53db523f5b7046f4bf8cbaf9093f2cf068846d748a09b98f1c993a4c2052f6b1ce1d96f57fde4cc6ebb51eb4059fdb1af1de2e47da7f342ffce949a361b3b126fa5fac3c47d71214f7009454c9b5d6af8de48983e563e864ce66ec531317dd952a668a0a278199482aee73f200920a367473db9434996fdff914ed8b3ca09b203170a300f831bf47c989f0670994d256de53abe79d264ec60de945862f8ce0b2a0b29887f34fa8e7dfdadb745eec87f746d55c33b64c0578e6da5e746d4c04e21e7c9f532d521ffe57c5cd166b73059e27240f11dbd581025fb7e4c9c008e520ccd5e3ede48cf69c4680186f2c0cb846fb2216bad3cc8102692bc469405db5d945b04ece9ba876fc86c309a4a95ce390c21fdcbfee1c8f128aee7441b7b32dfb5a43e988bb02d3d7643db34b798aa47d8eb16701b1ac2d74a99ebd0109b165c7bd3b36f33b592ab4883401ecf4fd363f4bc566532874717c090931a8ebea01e8915627e15d317d1617b4c8cfa97297c20a0b70fc1b3a2c7210bb29b4b05733fed27962836c6bb08bb57bdaf8611bd005ff4e0f0f89de09d8fb26da7b122c28f4d873cced8b7ede59f8f90eaa2c1c840a2fb6a3e4797986a3aa13de551d357be5bdc290df2068c0ac971bf9dffc4368d14b16782abfec15663b44abc84c0faa66a81e1e43e41930b77d7cb9ed71c4d5a45edcad336f4b38b3c329dca3a6825a40e6d1c0eea8137a95471f4148c8431f06367590a8d94cbfa82b86f22b3f67d938159a1d6341fb7029c3293dc90e58e8e21f4ae4a115b904bfae69d274414dde7ce1e617e276602421bcfb6930abb7eb80caee2536e4f912d65999f390edb17ece9af00a48a3613af27b5b537bbeec727c190be99eed53f8aad8cd693d80416409bbcab1e260b905b1637e2677774e51efd398237c389adf9ad9fd691317f57aa7f80c2d6f9bf6e5c4812aab1b93fd1a3c04d51fdaf6d10a6db6a75b3dbcd89edd0a15c186dd17c42ed2332758e10012d20ffe1301cfbb4ab0a528c7ced17814842ece7d1e45279a39a4491989f6df316708d4836b711461a6f660ef1c0884e2e3dadb14f3ca74c94398e684f1c7dacb000a19aae3802cc7d57e3700ef3536d2d1be1fb8cfb3ada0d92ad4682bfb46436619d328e24bccf6fc5e1f5269d0c6d53fe2a1158139e66b722bc6b4c3a7a4363c514e05d54342a64cad66411c983c5f7b0897381beba5b964c21fad468fa90d54a64d5d994cc240670b15684fad37f06c38478dd5e26e38bd57de5c058dc7527a6e7e7acac40103d7c0a5ba1cf32d45938db1a2915f243d64055553800ece265ba93771e0a5a521c24d5ae33204ef55e7db136d11ed9dbb0f8182f686f6d652f6b76696e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6c6962736563703235366b312d302e332e352f7372632f65636d756c742f6d6f642e727300cc5a24005f000000570000000e000000cc5a24005f000000590000000e000000cc5a24005f000000710000000e000000cc5a24005f000000730000000e000000cc5a24005f0000000001000011000000eebac9038b5c68030244fc01dd4265002351450100000000000000000000000000000000000000000100000001000000bc5b24005b0000003b0000000a0000002f686f6d652f6b76696e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6c6962736563703235366b312d302e332e352f7372632f7363616c61722e727300bc5b24005b0000004600000041000000000000000000f03f000000000000244000000000000059400000000000408f40000000000088c34000000000006af8400000000080842e4100000000d01263410000000084d797410000000065cdcd41000000205fa00242000000e876483742000000a2941a6d42000040e59c30a2420000901ec4bcd64200003426f56b0c430080e03779c3414300a0d8855734764300c84e676dc1ab43003d9160e458e143408cb5781daf154450efe2d6e41a4b4492d54d06cff08044f64ae1c7022db544b49dd9794378ea449102282c2a8b2045350332b7f4ad54450284fee471d9894581121f2fe727c04521d7e6fae031f445ea8ca039593e294624b00888ef8d5f46176e05b5b5b893469cc94622e3a6c846037cd8ea9bd0fe46824dc77261423347e32079cff91268471b695743b8179e47b1a1162ad3ced2471d4a9cf487820748a55cc3f129633d48e7191a37fa5d724861a0e0c478f5a64879c818f6d6b2dc484c7dcf59c6ef11499e5c43f0b76b4649c63354eca5067c495ca0b4b32784b14973c8a1a031e5e5498f3aca087e5e1b4a9a647ec50e1b514ac0fddd76d261854a307d951447baba4a3e6edd6c6cb4f04acec9148887e1244b41fc196ae9195a4ba93d50e23150904b134de45a3e64c44b57609df14d7df94b6db8046ea1dc2f4c44f3c2e4e4e9634c15b0f31d5ee4984c1b9c70a5751dcf4c916166876972034df5f93fe9034f384d72f88fe3c4626e4d47fb390ebbfda24d197ac8d129bdd74d9f983a4674ac0d4e649fe4abc88b424e3dc7ddd6ba2e774e0c39958c69faac4ea743ddf7811ce24e9194d475a2a3164fb5b949138b4c4c4f11140eecd6af814f169911a7cc1bb64f5bffd5d0bfa2eb4f99bf85e2b74521507f2f27db259755505ffbf051effc8a501b9d369315dec050624404f89a15f5507b5505b6015b2a516d55c311e1786051c82a3456199794517a35c1abdfbcc9516cc158cb0b160052c7f12ebe8e1b345239aeba6d72226952c75929090f6b9f521dd8b965e9a2d352244e28bfa38b0853ad61f2ae8cae3e530c7d57ed172d73534f5cade85df8a75363b3d86275f6dd531e70c75d09ba1254254c39b58b6847542e9f87a2ae427d547dc39425ad49b2545cf4f96e18dce6547371b88a1e931c55e846b316f3db5155a21860dcef528655ca1e78d3abe7bb553f132b64cb70f1550ed8353dfecc2556124e83cc3d405b56cb10d29f26089156fe94c647304ac5563d3ab859bc9cfa56662413b8f5a1305780ed172673ca6457e0e89def0ffd99578cb1c2f5293ed057ef5d3373b44d04586b35009021613958c54200f469b96f58bb298038e2d3a3582a34a0c6dac8d8583541487811fb0e59c1282debea5c4359f172f8a525347859ad8f760f2f41ae59cc19aa69bde8e2593fa014c4eca2175a4fc819f5a78b4d5a321d30f94877825a7e247c371b15b75a9e2d5b0562daec5a82fc58437d08225ba33b2f949c8a565b8c0a3bb9432d8c5b97e6c4534a9cc15b3d20b6e85c03f65b4da8e32234842b5c3049ce95a032615c7cdb41bb487f955c5b5212ea1adfca5c79734bd270cb005d5750de064dfe345d6de49548e03d6a5dc4ae5d2dac66a05d751ab5385780d45d1261e2066da0095eab7c4d244404405ed6db602d5505745ecc12b978aa06a95e7f57e7165548df5eaf96502e358d135f5bbce4798270485f72eb5d18a38c7e5f27b33aefe517b35ff15f096bdfdde75fedb7cb4557d51d60f4529f8b56a55260b127872eac4e87609df1283a5722bd60029759847635f260c3fc6f25d4c22661f4fbcb2e89735c61787d3fbd35c89161d65c8f2c433ac6610c34b3f7d3c8fb618700d07a845d3162a9008499e5b46562d400e5ff1e229b628420ef5f53f5d062a5e8ea37a8320563cfa2e545527f3a63c185af6b938f706332679b4678b3a463fe40425856e0d9639f6829f7352c1064c6c2f3744337446478b330521445796456e0bc665996af64360c36e0f7bde364438f43d875ad18651473544ed3d84e65ecc7f41084478365e8f931156519b86561787e5abe1fee653d0b8ff8d6d322660cceb2b6cc8857668f815fe4ff6a8d66f9b0bbeedf62c266389d6aea97fbf666864405e57dba2c67d44a23af8ef46167891dec5ab2719667eb24a7f11e0ecc6713770857d3880168d794ca2c08eb35680d3afd37ca656b684844fe629e1fa1685ad5bdfb8567d568b14aad7a67c10a69af4eacace0b840695a62d7d718e77469f13acd0ddf20aa69d644a0688b54e0690c56c842ae69146a8f6b7ad31984496a7306594820e57f6a08a4372d34efb36a0a8d853801ebe86a4cf0a686c1251f6b305628f49877536bbb6b32317f55886baa067ffdde6abe6b2a646f5ecb02f36b353d0b367ec3276c820c8ec35db45d6cd1c7389aba90926cc6f9c640e934c76c37b8f8902302fd6c23739b3a5621326deb4f42c9aba9666de6e392bb16549c6d70ce3b358eb4d16d0cc28ac2b121066e8f722d331eaa3b6e9967fcdf524a716e7f81fb97e79ca56edf61fa7d2104db6e2c7dbcee94e2106f769c6b2a3a1b456f948306b508627a6f3d122471457db06fcc166dcd969ce46f7f5cc880bcc31970cf397dd0551a507043889c44eb20847054aac3152629b970e994349b6f73ef7011dd00c125a82371561441312f9258716b5991fdbab68e71e3d77ade3432c371dc8d1916c2fef77153f19f9b72fe2d72d4f643a107bf627289f49489c96e9772ab31faeb7b4acd720b5f7c738d4e0273cd765bd030e2367381547204bd9a6c73d074c722b6e0a173045279abe358d67386a657961cef0b7414c8f6dd71754174187a7455ced275749e98d1ea8147ab7463ffc232b10ce1743cbf737fdd4f15750baf50dfd4a34a75676d920b65a68075c008774efecfb475f1ca14e2fd03ea75d6fe4cad7e4220768c3ea0581e5354762f4ec8eee5678976bb617a6adfc1bf76157d8ca22bd9f3765a9c2f8b76cf28777083fb2d54035f772632bd9c14629377b07eecc3993ac8775c9ee7344049fe77f9c21021c8ed3278b8f354293aa96778a530aab388939d78675e4a70357cd27801f65ccc421b07798233747f13e23c7931a0a82f4c0d72793dc8923b9f90a6794d7a770ac734dc7970ac8a66fca0117a8c572d803b09467a6fad38608a8b7b7a656c237c3637b17a7f472c1b0485e57a5e59f72145e61a7bdb973a35ebcf507bd23d8902e603857b468d2b83df44ba7b4c38fbb10b6bf07b5f067a9ece85247cf687184642a7597cfa54cf6b8908907c382ac3c6ab0ac47cc7f473b8560df97cf8f19066ac502f7d3b971ac06b92637d0a3d21b00677987d4c8c295cc894ce7db0f79939fd1c037e9c7500883ce4377e039300aa4bdd6d7ee25b404a4faaa27eda72d01ce354d77e908f04e41b2a0d7fbad9826e513a427f299023cae5c8767f3374ac3c1f7bac7fa0c8eb85f3cce17f2b000000040000000400000086010000870100008801000000000000000000000000000000000000000000000000000010662400580000009d010000140000002f686f6d652f6b76696e2f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f73657264655f6a736f6e2d312e302e36342f7372632f726561642e727301010101010101010101010101010101010101010101010101010101010101010000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106624c701000029cb01d1c201000a0b0c0d0e0f3a020072656375726c69454f46706172616e206f626a656320737472696e67603a602c5d7d65736361707574206f662063686172616374657220285c75303030302d5c7530303146296b737572726f676e2068657874727375616c61796e6c2f000000116b241909f86a24fe6a240008000000066b24282c20202c20636f6c756d6e3a20292e7273009c6b24005b0973657264655f6a736f6e2d312e302e3634696f2f636f72652e727300d473243504008a0300515f04006869046c04720464697663dd000000e16c2400630000006a6669753132387372632f68656c706572735f3132386269756d6e7075605460003b61646ee650646f63cbd5d7ebf200fafc9a6f24de636f6e7665727471202f206365696c28712f246d617829203c20246d61782e204d6163727320616e7361746973697065725f7468696e67736f7051cb7024008d00702400830d7665632f6466726f6d5f697465725f6e2e727361696e746f000000887124a30000626967757485974b6d757461626c7920626f72726f7706017b69016a077273d70166697865645f2e7273f472244c0642616265565246496e4f75744342414245cf00466174616c4572726f72446973890100008a01645765604e6000b474c60211000000607524ce002d666163696d706c732e7273486f737761737669646573656e756d206469736372696d696e616e74250000001876bb706173735f62792e7273282972110901037724ee76243a20694320657868612e2041626f72744c7724005e2061727261797665632d302e375f696d706c2e72733c7761736d3aec7724005d2c672f6572613b65732e6173206c616265612c206275742e6e206120626972746869667574757265496e706129697320637573746f6d438b0100008c8d01000048418e013800000043426164696572726f728f0172524e6f5072739001000046726f7a656e4e6f576f756c6444696542656c6f6d756d41737365744442795a65726f554f536f6d6e65ec0b477472696e6f64655f506c656e20213d20306c656e202520323b20696e6e6572847d3d6e6962626c65760060000d696b3e911193944e000000a87e980096002c814d40550000dddf3d000000000000a07f240054367665632d312e366e65775f636170203e3d206c656e3203203c5f8d005131000000a480244b004a006b009aaa868626870d8e0d000000456e644f664f7074696f6e3a3a776562706b696e616d652f646e732d822460017a010000c88224343500003669702e72731f0000002b06010505070340832432796e20604572727a010000d4833201312e7273006884243363616c656e6461722e727359d484e174561400f08424000b059101000092011c85800c448c0d1c980041ec8a92010b0c4f8167f72310000041f88a92010b000091010c61706973003c0f7665283c0aeb8c08046e616d6501e28c08db0b002065785f5f31011f657867696e675f6d61785f6c6576656c022163727970746f5f65636473615f03256432353531395f042305285f62617463680637736563703235366b315f636f6d7072657373656407257372082809217369676e0a23320b270c1c61746f720d1e6d0e205f5f3132380f323536101e74776f78111d3634122a747269653235365f5f726f6f131c6d6973635f7072696e745f686578141d7574661522162373172a5f5f18346f6d706172655f611928671a28731b241c225f73651d295f1e201f1c617070656e2022211b22222328636f6d241c652519261e271a726561282a291a2a192b272c196c6f672d1a5f5f7275735f2e085f5f72675f6f6f6d2f333a3a3a3a683161323366633763373931393631633830086f6f6d31343a3a5f3a3a68393338303437653131626162613862313229636f726e3a3a6861326632323964373737613138306339334e5261772c413e3a3a653a3a646f3a3a6831663931636534613935303464316132342e67726f773a3a6837396238376337393438636266636165354773705f696f5f686f73745f733a3a6d303633663163383531393861666331303645667265653a3a683837633337323034396136343461333837253a3a666d743a3a3a3a6866646165643231623631653265613363382377726974653a3a6866366665633333326139366331303531393664735f636865636b3a3a68336661353832393431613334623136623a2e725f3a3a68613932366532323133363764636635623b3a3c266d7574205720573e5f7374723a3a68643335626539633533613639643831643c3b636861723a3a68363764306161333731373838316364393d68613161643737316538366635316161346f633a3a7665633a3a3a3a356232626335303864353938663039303f4e6e756d3a3a696d703a3a3c696d706c33323e6834396531323832636435613065643438402d30646665313533656230656634353661413e64333933363035636438306263386463423733636363636130643330386332363843493c3a3a446562756737316564663633653835376238363639443962733a3a6669656c643a3a6831386432636635313630613965343638455f7266633a3a6268633031306232343163646463346635354639423a3a6837326230356637636432373430346333476f36616362363665353138616562613437487363616e3a3a3a3a6837656561656431653765626563336131496661696c3a3a68393732653963626566313938646639354a38706172737273655f3a3a68656532663739363833653939363963374b33616e6f3a3a68333962383831326530646462333834644c2e3131394d3d3a3a3a3a6164645f6c656170383832653333323334343339396636614e496e616976653a3a74696d653a3a4e6169763a3a696e673a3a68326430333031353137643839333562324f4564617444343436343538653764343464366163355040643a3a50746f5f5f6862343338303266633230663430333039514d7b7b636c7d7d3a3a68656335376233626538323537363963615239733a3a3a3a466e4f6e63653a3a6f6834613236383063656665386537316239532f666d745f7536343a3a683037353262323334626366646461326354115f756e77696e645531616e793a3a416e793e3a3a747970655f69643a3a68643534626266353930323938636663325635746467726435633534313937653631613465376357433a3a6864396136383766303738313731306563583f3a3a6e646c656e393465306234633061306438323963592c3a3a68333631613138373166363066373334315a323c26333633396132383331666339323534345b4a3c3a3a52616e67653c4964783e323566373435343736366130373338385c323c63686172643331353933353166326637383436325d475f646174613a3a656d653a3a3a3a68303436383663636533376539333435345e393a3a69735f68653536666437323361323362323862615f496562756773697a6537326666636161306533666139343465604164353736306364313833663261343761613d3661313033666634623034306164303762375f3a3a683231613164363933323232353164373063303039653132346636373731383036626564443c417338343064333161376364623065613936654563656c6c3a3a393564633139343134643166484d75746363323635386562626330373237393367306461623232646631333233323062666832663564323961616365656435656638695350616441646170633139343336313739636135373733646a3a53623038316665383861663936386464386b333964623566653738353338343539346c2e68303036396333613133653437616464666d68396165343639636638646236646230396e613966643133643134386534363662666f62656631363233363139333434636632703765743a3a3a3a683431623137626230346633333331346171315f7536345f696e746f3a3a683761343762643262353735616563393772343c6232303537303835313661393961366173313c737435383466393130323835346564323633744e5b545d3e3a3a636f70796c656e5f6d636566313134303932626664393739307531733a3a757466383a3a6830393564323435383339313734396231764742666f7220693838333330613430363630313461303762773e34636131616634613635363137653330785a637572766564616c656b3a3a6261636b656e643a3a733a3a4535313a3a746f5f3a3a6834653936373134623534666365663066799201737562746c653a3a436f7454696d6545716283d5a8929b1c54082111111191a949daef02091086024990e4401022c2fe128010894012822443c61011111111914024100922294892749d0aee896b0593633c7d0ae015401a8ab8c48213820ed80805f17cd814a2ccaf912dc9ffb5fce6730696cad6bbfe5aee306079b50866f6949457f45f5cec2fb930ce2318a0eb9100a28c0757f43cb44243509e9ab031a660d4cf7124ed5b1d5ed2e509f8605a1c37b97462ca203e55f0177a3521834e1a9e0195a8f54069ac3144910604b01a8d6597e3022ba64bf3358ebdf1acc0fcc9fcb296e83e50d7ac044a894b259823f24e42e642bbe89da454de5902e650c5308ff61e44f4999e91ecd15be872a1673b8057458d505c9e1c984fd030c8834eebfda1abb6d8f2a1db2836ba3500c07060dc35be37095c52b07aeb55ca0ab276c3ad5b055b694c8352a3c0de475d8c199d6db47ff0d2c4902b1f01e020fd5a2812fce7fba591572091f2089cb6bc128170f5f8122953085e4e23b7c8788413ae89b744ae371b2e429d9716bb752307f5544871e4a53a7f36e3b29a34824b8b9871c37515603c5fd83fdd867c302f8060c8a731806b2dfce484f66ca5ded604617334baa842db322225af55824203c333ccf6244f287b771636d068b939b36d2386e21c295c04684d07b238e245f24411bd29cb3105e95602fdcd468aa9d650a775cde0df1af960eff1f1b3cbb7b2e5ed2f87cd23f5ba739476d6c7640fc8ac1c4b88ae73cd2e3a1270125c28c4758fc0cfe41191576a9d9b53c445d8baca94571d23e3a645b6c7a3cc37e266872ea842bf8a11b82caa3558b39052730c3e0e8953eec143807370388442651014e42c1c714a9aa5b540217105c8108bfe2532d14064c9f1dcf7371150b61de952afce12a97ee2e0843033f02aa4f5e339c23f003769aa360a6a172cb0ada7ab3adbb1e153988951d122e19f657d3b8dfcbc31fc46cd34c452e2a046131d25746ea1813f0b91c03bd2cbace3b1939e324a70d61949f16cb51698bc5982849dc9e65c6af2119f707605231979ee0ed2483877efb25c13778d889186f04236f82b188cc9d89738cea2db9b48e6015c153227dee550d64a66e6076aad7b65ec0a6b999a33c707e6c822fe0008249e515381356e4e09a8aa59dee58c906e3de2e1038434d44234a4cd1a4811b051091c54e610130260c85336863c0ce1271d5d1b447b1e8b1e4d2ca804bbd355e835883ab70a17d33845c21b8cb799b85f2dc1c0a2852e4d84667c9b03cb905f76cd33b0ba50240c3dbf0211815f4e01d2f287e7511580614815a7830a4ac259d800a4ac1822d86ca9896de00bdab069b480582accdb6a20eb41a79a95e418b1c7a72d64d00b46370b4a1c9e1691b44840c79ac3f50c7940ff586f19b74371ece3607d01f2e3fd2dd01023ff9831203483eb632a76394429cd01aaaa6c20a6ac17368faaa714160244538b662139858f3824d1c3835f25a2647a6d88667860101351e541ed4166c45b0c3bafecfcc18e4dd2ab2c778df9011bdf023d644354d44e1565e85451dac5eb455b9c9cc021156d43ac073d191344d70d3b382a3e0400daa5af45d76b0163a076a82f29df3a88c3803d318a454d3358e69ba790bbb4ed1568ce15485d071191dced4c4195fb34c0480f2807f1dc6e88fd70f5b2baf483cc26429b64734ca4b0826855467412f180b7b0c0fbbc47e3f18bb6372725550845eae1e1e421188d1efce35bf54fbc3ac551ede70cf40c27965a91135ebec7fc5917dd1e0282434ac267681003710f4c61f407d64c126d871b5ecac8822c1b95c8523110ace66768e15a44ec157e8c5ab8b1ec82c7d945db891d54202149a382b3d0693f3d70f8fca0b657f26a648801ff234e4c01ee80fe950579df327018258d2dab115eb2fea5c02b6e55c5007fc2d80558c81f87c7872870d74e7c159115e044f4445e1f7ef7ed1d7a119db3d340d41721e61ce08f2330ff151ed8dd5bdc007f185d5574e0fcd887b00dcea2c1122c3cb1cfcc790f5f6fa5f80641beb35b0221605e05c6851e2905bc09ff5fa010caf366fc76046dbc0f478de2455977c405709b86166f63cfed091201f73dc260f105982a0b01cb06573708bdb9f6fe8904d34b01010347aafb9e8fe80c1280da22787243d65426366a7ff55a0908f38a6c81e0286c8426d99d18ff013d3d45c8ccc85b445c38cf07f5625bc065ca612703a493b0663f05d2df8a8ff34e4b0011e402b4a18da92e5ce2cf060c7fdf5b8559d0fdbcfbfa864c26aeb290f90afbd415bc0f958d9ce1b36fde8d05d6371790274184036c2338e36aa2f988d1920b78bc0713ca5ef16f73a02b92ef43ab4f09e192c6884e449002d1c4cb12029bbd609c817085104d090453db3c60aabdf8066ac0bf1226ff8450f8761a4dcda4fa14380c13f718d8a81c658c065a5d4e6aec16b593448e01cb750178051889894f684951e2e0d1554331a397a6ccdf5d106ca0e3f30e2ef39da18740f071e097ed82f754ddf4296c0dd08fe401e5df83fb757fdf819c1b3b808ae95722a0c95d88526444cb882c68f9077aa13a2b6c83429efb20e98323f9b32ed053d88170e623cc3d33f13bc630803f04a5a832c41b77e55891961c3e92b0d1d93f8228e45c0a2939692d0a92710770edead8502048cca100ef3858ca960840e3a2856491ce06206c0977f71020e08a5371ede49d6df1cd9839cecb0fb0785a0d295aa4ecfd09087fdbbc44e307ea91b2643cc211b8165ea673fb39a8dd0a27d5ca6b4e80cca9c8b9cbd9d9f31809cc1a54f2278d3f855281abd60f9ce52fc15901c15daa203a36fc46e51f6f8089dfccd72400d0dfbbfb5c72e10e4d7e0f38d7e948f18b53b85d1b31db2fe96c7a40ef747543860d133b1e6061cf01356467785a4907eb230f70ad5acc414c1f66251ea7f5535350e9f975263ac20d0aacdcfa407d5e80f0fbe610f35feac0c2c5fed86d54d024803fa9e0147063ab21313c390bf7b599281a21c70cbd782d8e45fad4bb59d40da64521b6a98732a19f6d92d505eb5189649b0f680d5e00ce0278020348503dd73fc730fe5f00d75b9c33047af34321f3a36585f8ff4bbee33d30280ae4da6b3648305cc39f70511c1a55df4b76f8cf8baee2913e4eeb15ca3ddcd50892360f0ae7878fd6217731a0c4edf2099f60253a929e30daaf95f59d84c3ac15e1c55884b9a602190f7e3c019d808295420e1053fd037add819e5d0b80dfcc8013f1038ad21b021bdad0332828ef5e5b40003cff32caf3bebcba7381483a70c750c4b979a6c04333ebc06fce20027d41c5bdf832dec7fe8002483c28eca01d8a025c7240b0f36a8b83e4954002300b9b4f428c3436027d85f19e58e2d684312cdd6514263c078830bd4c54cc0e484057007c9aa6d23e0174dc115665237c6958021c9624818db80e53562588bb4ae28d8fea288f400037a8463a7d179e5000be47c062b3c401304126b3a0d5db84040dfcc114e81eeca345e0b5930bf8f1c90c74d34551dc3713011c9a99800b36e023411350162a045ccfa7813d4102f62b557069bc025ee735c03d11014fbc8621f7fb4e8086f21cbd8101b419f8280a4908f4a8900840963a23b0ae9f38208a1fcf060912ae170f63a06d46a9845f62282c3d86e070392606ca5d6c8723be4d926653991e00c51a983d4aa09b2fc2b28c8908c8a45e7f50724c00993181673812100eb48ef4885cfa03ad05a4d9e6440dcd69d77fcec1151881032b9d169ebfc51516760566010f680cac1d32b0316b93fc724aa4065cde3981ef04918bd7daa392381a308a28596da08c98673421ea3ec70451ef500f84b1436d850938379d6a3918f245045810ad6dab034e67861f113620f026c301ffffffffffffffffff115942b31135f2b4514a29490b3ee9c8b1f1e7ded69652a69464922df0f105c2c0476beaeeee6e3e44110611a310178b05079b62b10c2172e40c314460b1ac10395284dd0539eec0a8d076253dca9df8640e3b2495ead8ee074d4ae8d928b9815f8e3a20ca5ef4cebc127532912345e8600c2e5bc3a93471a5dc20e5984376e246844755932e75b158eeac93430e6b3ed58f2f9142781e0785e835f9742634ca070edbfe8de9fdd60cd37a03a2ff5cc6c8209a3daa39dc704b69726496af3eeb16cb104b8e3678a734487d2684c920cec1863465eb854c15ae2efb418e357c52e38f92d7f194929e98a8613b1732c8985e55b9ec62b1a894300b72a4e1d3c17e33a78c2ec243c3265c7b5e3786cfad3ac32175d4e4d9ccf307b9198c3998d8181d9b714b97214156525654c0881c6550c3db8b4d5e424b2d24c39dd564753425bb4c1b43a253ef67586d1e5a2b86d345b649ad74f8932529e408435bdff952493971a181611debb56dbdb4cff24b23c717d63af9bc7dd6e1a1b52e168bc592811c5ec0ce859a101f53abea8242c5fc6c94ca5027c585a349e125364a2166095b2c435c8d93bd88b1861c5be8fe6cd48952caa1856393bed8a7d69a62cd8249eafcf7c9a57f7cd7c56279410e2c203cc46696f04f72dc8bc5c239aee00917edbf2afef774725861d591e2e3d95f9e8f7254e1962e85b68ee219b2a4c27a35e4c4099dd293690aedf9ea53a3e44f279f0839a46098379d54ed6a7ba5da2047141e914ab3d67a7ecc540e2864f7d17363dd27d8a7ec44474697a335650409420e27bcdf1d37e7b0615dac7234e198a9e5ca68e251eab57bd760142298c8c104dbc45e3d33e98d325a0277333aadec33a1a598831c4ac8d464bafbbd3993350a91125fd9367224471256ff7a8d2a9edb765e2c961ae44042a7b26534f5e1dc95ea62b1f4ca71843ff36bf56bda5f97115e11db60fa5ddd48711152b9339b65fa7f7e031110599315234552908308fdb7dc91a16a6fbccd310464e7cca99b74bb7fcc21844d34ef7e7c8b0e2e73b158505a06398280ee4c0e20e8263e95e6d65908611701c72f94be417c479d39ac6b2101872f72215f88be55ffd1a55e2076369ec54f85a89217462d5fa7162adc56bd76b16a86b7962ed59b140e5d70f264add6aebe739c2f164b6f02472efad6515cf5e79f8d3a5ca8da374c69d9aa6ac25becb3e3317ec34df75992e22b379280c3168e6e747de9c9e5fdeb62b19c98ec8aa77000472dec6c2ea53e3b7f4ffb4a0a8a8ac532e40c8be5c62470d0221faf93b9fad3e58a67715e8f5945fd2759a59285f3e2364ad3f54a8dc7224d31da3b4a719b63091cb06034bc968d9a1a3b6d5ec179d2aaa3653e13adbb62ad94acf9d75eb5d923465ab1fab0426dfefcfa175d9cc85a4ae060c5396dd23a480db3f2ff2ace8ed15f5e3278ceee62b1e0500572fc376b1f712ad6aad506adb43cfdd1bc582c65e040051e85b70c771f4e46378e80e314c72c93e8f211ffe2e9c562390387298eea575429a9d9a25fa5e83e8a56f285ce31932285e3eff264e8cf16c20b01917504a58de01845269a1e5e4e88edca44912ccd624a76eaabd2a8e460cf08d2869720c80e7084a2fd7aa94d76893521050ad5483bf19965b434e713668ad07c3a2fb3d6ed8956c8ea98dbddf535e962b194004727d4ea5c73a68a691da3cb067070429934cdcdc5e8b8b72e16cb0a0a4a4a101c9b40c46ad7317979a7d1b984814313e6fc9c77374a33819633f2c54b2aa5d5bf582c28168b084e800313e719e5f97c658b26998ba58406382e617f6d7672d7be31f5c5623152e4c842382ca13aad2a3d3b5c4b0f56e215a15d44f77a86565e2c16b65854fe808312b90e39c24b5675debd582c272862908163127e542ba3d64abfd21c0e49f442a8f27235e5effb1a255ba4c4c89e21031c9140876ae54a68187db2584a800312e912af9d33e6f691ef62b1941059db7eb2028be50610703c4204381c61c9776beae8a2cd53232644be07381ab1d45969bfd96c6da7a3828311b7a994a53b896e28e1fa00c7227e9d8478d1203e4b3b45b0415cdb681936a39f8bc552b2e26aa8889108f7e7c3299d52af9817221831f2b74fbc6b3607380e91b68c328eae46a536ea320465c88ac9a6a4712317380c6107e5af3d659ad7562f160b0b70144293136a43858d50e5b99c818310fbaef6a9717dfd597eb15856806310bbc9d1357f1e3e5d7f1184a3ee6f47ee99c98e5f2c161523262b8148279715af212a63f3178b0510ab8b12ca83edc8a041178be50faa6ec9f8f49d558ed6c56269230728297e406d4c4ae59dce3279d4a50f9df6b6d3144f11e7ba582c7c30c8c6f4bc3ac8d7a4bb582c7b309c4c1bf64beeba6a2e168b1eda4c2fdd57751d75eb9207cb457dc49df6a4edb9582c7850477f196552ea237e5fee60bdaada6badb5ce41bb9400871d0ecfb226f4495f29da8bc55207d6c53e77dc0b531bbf58e8601871ef1a224a978ae6b098929e550a9d7ae3be582c2fc021877dcc830ad5fc4ed95f2c961267230638e2e04b212bb6e9bf347e2e28c001873dbc978eb747991af5863e77be59d71a3199bfb82173d3f5af635a579fbcb4411d3d9fdedd983a7a7cb158d8908afcafbdfff318852e8d630dea6bd2e72537c9dfac8bc572021c6a30f328d7a63a8daab12f69405eddeb2f93bb1bedc50438d0600ed1d0ccee4969b95f4a544a4ad03003c71936f1416e69a5daa9566660a47e7a37ad3f6f8783b41023e028c3e6b3f264e9184629370d1c64407fc7c7b0314d7553cd5b41c9111c6358bdd041877b3ae5731ac12186a452791bbd41c98e590e7084817f39bd653a68cbb93fc00106d5e8c60cf9d16d2383e30b6c1aa536bfbefcbc31151c5e68d4c728845a5959cade018e2e9c4e3ceb453eff0b8f0b776ea1dcb4f445ab6d0bb6a98c9934358f67971612aaef3c8ea628e931596056c8100d2bb3bc4e6301153f9bf9b94496aec0bddcfc3a5d750b0f5b21e5a5df3ce68cb96955505b7367762f1db5085141dd6faa9f835091799cc25196be151d7b64969714d0f29df7b57cd2bd6a140c4ad6cab4367a75070abd6a5352aadfcadfcd13f670db5a5e6614da3127ac6fd7a316df717636178b65080b703461f9c23fbfaa9c7aad74b15852562c9621436630a40dde9423cc60b040c8ca8917b158546250813652d2c861061c4c388da8c8a83245c6c6e058c2fa65e4eb5cf7915179196204252504168b11949466419012a0ac9c9461b118d9228b4309c76fd61bd3ab5e5fef9286901557817b4a1a61582c2bae62b1582c4450780c1c4948f9b6cba9fd3e99ca0a0e241c2653c74c263a67301dc11863a651f22e566f638473f53b67e7d8d25caca60867619fb6496f90f5200e222465a409e9e95566b9e118024aee7f28b5d1417da4e2031c42e8a4ae5e19a2727576212b3e028b85554c8a5c7004413125b4e5880eb9571531b9a86c808d1dec800c1c4038640913c2677506b78ba0a48c61b1ece0c62ff4a05b880ea77ee5478aac1c39e3862fcc225faf316785904008377a71ccc95f666fe6a3d251fea40c1edce085f95b1f5e65bc8ba58a9d0c3aa2ea376b822064941851b9e1841bba40a7cdfe1f73960f8dada0b061b148e1462e8e795e89cd30396ddf183770610cff3a3f07d7318889861bb73874758ba99ac87f653a9372c316aa7025478fd6d173ea8298ac103952c40c376af1ae12570df55a274ea8b4604c7d7508adf5dbd3432e2a4b86108b854d8ca8dca0c28d5934a231bfd04cb551f577346e70431647ef6f9984d418296619dc88855932ea30559deffcd6c10d582067d39d49d131b56bbd22b55532f2a74bc7f0bbe2b03267093ddeb93fd60ad5af6a9850abb14ac68a46870f2ef6ddf36a76156ed699eb3ea953eb49aaf0ddb56e7764ab739d546c2b6c3c8b6ed92047542893965a5e54a4badb9c229d0f4246a584962b36457abfd38b2921b4e9b914adda6c8fef961499103a28f18f9b5d7a468116f5f3a29af994108a42a5d27368d397dd1b060c8d2096820b94fce0462852f7aff4c82ce3895d81422573d0be1972a4caed1328294ba9e83b71a1356e78e224524f8b9d8fd985d809e64e2825849f49a91cf889c532a40c8b450441ca10b27272e4a2028b456585ac718313481d75decc93da45633671cb7f294588b97e12ba582c25282b272616cb9012151423272546d4a8a01831c1911b9a7045069d63c67b9d5574b158869c9c20489f98942048101408f1234496057ea4c88d4cd84a8bcc682267f6a598506aa60ed921b412d310e2821b9730bf545d9ef53bc92872811012dcb084a73ad887a8efd3643a110ec18d4a20559e9912b24e894c0944ebaf2ebd519d39d7b83189c4afd08fcf621e6379b1587a3d458c1b92e05d6731b35ab5fefc89842e4f73e5463e64362f16cb8aab61b1f4c991740312a85e15f1995fee8ef672e3118e329d4b64564b33e962b1582c4386a861f23db8e1085cdab828351ab4bc5623d69b8509173ad9ffad1861f097e15ecfa534adb488f327a1f40bf539c7548a30d7e67c52be14dfb9910855b3523ad38bbb8f4a178be532c60d4418f3a5947fef663a76086fbeeebf5c7ecc239e3891921516e38621fafcc1ddb7b40a81d6428ad3a2aa4e348b107b4cbdd14467ca52a5417c5ae7bceb9d63bb9a82043916dc38c30d41b8f5d2633c7f92676b20cc72545347eba44da880f0bc4b6a11aa779528ff60d8e815cfea93ab10fac179ff13f1de91a53f22f8c08d3e28d34f7bfcbc1a3e74f8f0fcc8f958a133a6b587a34cf641064f42ca66f4b0aad152ebe4219392b23ca0775477286d52abad783047a95cbeda689995eb0eacecec5e2df47eadd00e67fc17ae57788dec5a0733c30da4fe9a5ebd2e19adad8b9092b65852568c90e0061dee6cfdb284cb7755ad3934ea5ea98f5a938e3a2c29c1c10d39ac5d76d89095d2354be3a0e9e4bda1a49ae97f70506fe76c8ea37354d72f16cb90199820021d48230642c8b8f106836ee9f1f66f72d5e306d34d6b25844a19e48edab0b607d72dfd65062973b1584ed8d92861c3514d07fda5b64e5f6b821b6b4083d64926f71c3dea0f0a6ea841e5a2843aeda0536c77b158fce4488a118b058c1b6930bbc56d0ea267b4ded070fae8209fba84ee8e673007f19d59bda4ab6d2f168be61db15882dc300342c8b80d3a088d7f7219da1f753a5a46b552792e16cbae6c082c9616dc20c3a9f9fad4b73f641d031ec5bf3edd39966e93183eb57b32e84de3e6228be572230cba3a5beda75ebf42088694affbc69f6d29936a6f7c41ada5d4e0a54ac817dd1842fa8617d2ff2e37bee8ecbab62e2464923dad83cb9e26b9802973e1d295f6ec5a0de3c6168caf5fc6d6a33491076e68c193ab59a4bc72a973f862b18071230b292d3b559fd9ca1cd48bc582033f49c36239d994152c5c2eca43446abddddcb882ae73ed5bab27791b41b158d21915582c16cb890991142fa237ace079ceb5555aa6d195a9c2d24309f12685d8b9e962b15c548e1079bd4185854ead7399d87852de056f4cc115fa4209e55df2efb4560d14335c0d3550cc308262028b450d142242d20d29a4a2e457949bbae9fa62b198a9798b658d65f6352270230aea2c93c89eb05fd1f0c5620943c58c1b50507ed5960cb2c7cbe42928292922384131b158d2b8f1844699cc526b7d52e5e75c4c860c2923481a42527ca58c22282963b01b5181c522846f38c195f71c7752fbc9df6f34218da63706d5b4db49cd0485345911cf9f3676100b2c16152132b8b184357e53a62a2da2b92ba10f2e5edc4ab59de32621575abd8b19cdf3b042c262578ad5bbe23c8ad01114f97e792a4eb6b446389d7edd8aef169f9345484b7d328edec86cf149438818168b10223788a06fea92e36a62950b2f16cb89132941392971306e0cc1f85a2957b6deb8cfdd1002a66366fbe724738e4adc621992e21795254304168bc552525262b1ece04610f08cae6b4c7b0e33f10d20d8f22d932e99df2d3d94936515582c294b6459a58c1fb8f2843cf55b6265140a1b4be44bd4302142c42d969513131414a061b1a0acac78ca8a8a498a0f72213b6bf45eb494920c7a707b14deab2f376cc75c2c1693121493954d295949b9818ac532c4073c60e59ce7e02645de282f16cb1a87031423164b0b76c0bafe9899958c6da273b1587280b24ad6e025b226a0035d976e133b4aeb747eb1586ee0252b6cb10c094464c0e309292d476ad2327bcea763726133c0e0e184773e4b99fa538796f252d2274b644bd8596082141e4d3846dff79a6e6eb6d11bc504ce830909ad7fce3f2a1fadba216408f14631018f252ccab438a9f4ebcdf9b5586ee0211083871290e772f3a6f3b02fc68bc532c40c2167f048c2f9c67d3da590a2447eb15890c08cdef4a89eefc64b332c16232a3ce071843b8717cda7b343b5c94d52d23043c8ca9133c2088190347818e1cd5c4fcfb21d36b3cfa308dfec6c6abde7496bda4d52d2b0585653800711d6d549aaeff92a087251593294c7102e353a6477363d223e0f21ecb6df5929d5abd9da4b3a32a40d2fc14565c908a279283848230d3c82f0d8f666555a6a19364949438d13133650525010021e406885ebcd568ff26be58bca927151d9cb1941d208324609829021248c10b4918252c4cfb0585697084163c72fd21fd32b332d7f3c745fa0d9ca85f4647a9bde10213982b0a317bb3a2d75b6f0bc040321b88090cb0e5efce9363db676dbe0ebc0641767faf40ccd6eaba2a05c4afac444093b74b17ffa2c42ebd79deaca85f9cb439bd9f89d8cd8818b5475f2177b0da25d7e0bc566a712ae6fb30aa92d74ed9ceb7b730cb56d472dd2a46e60072dd279fb9e9ef2c56299859a6dd2e56db889cc6461d01f35bb8cb91ff2bf94c4029d648e99afed8bc5f2871db0309e90d1a493d231d6e9fe25be72c4c82b309d33cb8ccfb1119b8bc562b1c060872b92325bfde8c9d8a183ad386bc673f1fc6a5eb684f865535672208220418810593182085981c572e30b3b587127a9e761856bbe9d2e2b263818b2631566ad1615e1a77568083b54916e0ae1fa233e2aed48c52e7bca5ce6d3b5a3b9582c25971da848aa66a1496ba1f1b566080f769ca24fa1f57afcf2a853f7c10e532ca3deec555fb92d97e22e7d6f1e63d6ec19448aa52be9f766abf9a53a0adfd665ef6850eaef8922a17398f35cdefef797ec08451f468679f924f3668362ed9637aaf5316955b0e31346cfd1f5ee778e9b23252728168bca1a2828170c9820e6448c1c49e3024272b0c31389aa7f95c2943af16af1263a074f5af686137b868e274dc84e1df4178b65c726b0b95317d737cdacedd0c4a2c34dbf9e6eedf72f16cbc909c408a24284081841820411e26c98582c44d89109cb3cbedcf4152636ad9ed97590369e5d2b2aae0613765ca2d76a1a773d77b71c2de1ea36cda8658a72ed2bb116ba516897a5546530c53b488a5b610725169f56e566d39d3d7b63a0c1028be553d81072d9310954c8be8779eb93526b8724dc96ade57abfd20f2f0d7644e25166f341bf5eb5490a095e6d27f7b4f171952e821d8f40e6ec9f3c868ab1311da1965527cd3e48f58f83180a82d80982980982d81941cc8c1b4ed8d1085cc7c37d3cac2e891c2982763042a1f6bc939cc80ad43009c362b1ec58846a22ce449d96adb76e8388913176284215facfce34e78bde7624021dbfff64d33ec7eb1071f07b9d44a5ec106dba147b293bb54eef62b190b1c310c6a8104acb6cb25ba61078b9890cd3fb28a414213ad53a3f3fbd36e1c12263802164e5c81927635c760ca2d142631adb18bdb47487203cada576072d4f22a61d8148e6115a99b835118fba80b1031069d0526db013ea1bf523464e4c4a8c1c597195dbf18755c6898c728b658813596b0218ecf0c341445cebda990eb9f7c17919dbbf84ea1c15721d98a4f80a0a0bced8c10747868f39915d23af124f416195121593dcb187830a6de97275b6cc282b66871e92695398dce0b7b37f1e3665fa26d5899a954a3bf070e6fca8b5dacc9dc52763c71d6efd90b9eb51ad7c293b2c65364b69764eae9908bab0a30efc2925443d6f8cae437450a48fce9bb2e3c28e39e03bfea365ce29fe8363d82187947d0a11eff81fe6b3c28e38a4c584fb4b3337e57f193be0b0feea4f32ca5de876831d6f503e77c88c796d9a77b158860c6163871b524a68995a63544ad6f72738d9d106e328a9a34eabd5c7d520d8c106d543a8ec7edfc6243564c71ad2d518ffbff96350211676a8e155ddb1f50b7d397a6e61471a10a16b2a45c589d5522dec40833b1bfa9e2dc77b932e3bce60b9a9668ddc529eda0e33a4f5b9d6bb31ae0e9d5ecaa0d65bcf5a3c6466f1da4106b4762b255ff6cad2a68bc5320664b3d0f470efacdbb9582c173e39b2443cb0430ce739ad6e26f2376e6c4718b853f69e36762732db01865667e60c15cadf3b31f94226639586461995e5edf0c2fa439d9bce4243bad605a4993abd2ef2d637be830bd7ac28a1e743c6deef62b194a0f48e2da4b42939fa694cb6a42e16cb077668c192c96d93d83ed926ccc21e850a2dfd74fcc7171694fff26c6392af90098d55cd52b6c30a2b91a7f67294d45a477754a1db980d9e46f4eb98b3830ab70c572a5546de5568d8310546a6d05988bd2f164b4991f594151523474a9c8fb4a7906087148eaf85ab8a8718dd5f14b85797396d14de49cb40c1521115b74a06cd509fb0c8302ed348d3394b74c24a53bb9462ddb6776bc2a156cde8a927cd52c7046fa3c8e41f65abf79c2528a3b45a99ea2b01cdd46ec275cea22326419923b2358cf84cbd23e15c8f496764336a7947586c7ed82711bb194f178b25077ed96104bf4d69bf5dd9b332694711d0d23155d579febdcfc81659d941044b5ed4946e7cbfbf86a421e4073b86806a5471266eb3634c09218f0d31193be54b254b3b82a0d45279baff4f78941ad9010474d29b64cf6f689e4ca48d94955f2443a71e4d319e59c62e43920e5f9c40472f2e25773ab40ad52fb474f0229d75f131e7ae0dd35f2c96941215131dbb30e9509f4fc7506bfaebe2efd99455d58c66a35c98d285e93957d25fc675e0027d99e444c9aae316c8165a4c6e63adf7b702223a6c81e7d4f1579127bc3764e8a845deb90d30ea5f266ae4ebdc8683450365e5a48c3474d0620f19558d94c23174cce2cf23a3a86bed1f2526810e599c4a84b96eb9759e9a58e81a5e79d2ceef0f332c96fdfaf3e3bd5e78fa8a759b0725e5dc141dae38e7502b9631fe9c9a78ff1c63acc075cc7bf34825bfbb0c74acc2d771743edaa6173e52c5a2b53215f721e55f9c0a57c52819ef6b1ac58c8aa38813f9a6b77c4b5f021da7588813353a4a4d32c9ba0c1da638bdd232663dfdc2de1f818e52f44aac123aaf7a77cfc7400729507937e93da6d4a98b0d1da3c0ff4443e8972ee4de3a44715a1d469a6c6f7dad25a22314e794d9c00974804293fdf9d3a819fcfd4f607b2bd3362a1da4679de8f0c4319a3bbc5e5772f54b818e4ef01bf657eb345ac3c949a083138d967ebb79ad5bcd9840c726becf1b675f93da671f093a3471e8d5cfd9c309b55aaacb38838e4cdcfb1b65fef7983089d6225b6791b99fd3061d97308d0c52eb15e24a9ffa061d9638aed86e0d4aea55c2bdc0404725945ac9d5186d4b73d4a7400725901f3b9e6eff27d03109f5afd6eabed1c4292d2f62928282131d92404d7bccf9d6732b4e9178e4ece49d3c39224e154898c53376d4d8b83a1a1d8f305bfcc97f7c154a09e970449b731271ad33a378e723282941d1d108b5fa78d52935317430420d5ae68d59a6f687a6631189cbf7d7a2b957ce7d59d1a188de54b91a533d9d4a2911daeb2cdfa9df3e5317061d885826399eb73378ce2b63061d87505646ea18dff5fa9d8bc5b2e223f09536c210830e439c7ef3ca245767b53aafb272b228d051085ee9243d07a51a5be69711e820c43169909eaa8840c7208cfd2a5bbe9b8cb11a272697342c168ba5c4888a90223a04d17689cf3277a7974a4947208e4995e9463b112e758048c892b729355cbe5ac71f8e613f6bc2e3a8d2b01f3cd532d36922a5cce8e883a3b33a6afd7f25656cc555cc88840e3ef4e91fbe84cedacdb47b303f5f67fcd3d275343dbc6ac3b79026a596f2e6e118f4eaf09d4e8aef0c0fb794294228a9b9c39fa44819649786d4a13174d8c13b15a2f535afcd6a2e254174d421a5a76d4ae769b1527a035711a2830e682bf97a4fca315d5230828ca1630e463ba5e5670eaa366b849ce890831b5ee80d8fbb316fe8c2031d7150ca599df5aad49c4d0e07c5de78d6f122eb3454448d4db99ce878c33a2632cba69a8edebae11242e52adfd1ba6378b158d4383139848e36304298e8906964036ad4b45cba301333af818f696d367d146da1a5865d09f55f5ab38cd2c9347437b2dac36c49a97234a8b56137c9aa079d39439a5a7f8a7829c3797dd16106637cd2985687d9ef51191679bb7b357e72e721c35f429fce4149c7e0ba78d09834dc6b8fd12106c44b59157f1874e94277e7f00fae1930a885768797353b717d6197bdada39475623eea85b44cb92ac2d36bd1315dc85b359c472d9d9e292e38734a758f48b9cd9c2d2465e61479d156df392da8abcba5de7a0ca97916dc1ce3357ca3ca9763214f6a63dafc1b5b26d115d0f25c34b6d2cc9cba0e2b183732750c9959f6265d7454a191ab623cecaa878e520125f231b619eb42dc53d84628d3a0e930744801f12b645e0f71a37e74b1584a507a0c1d51303f29bdbda743864c5e2c1622ab8262448d2165043143071414bf7955a1daa53ef304852e51df7965b891af13ce55e6a3b5f6d2aaa4928e262c33e8eb5f0dab1e5f4c40a44e329a34ca10e211a4c1868e25a4ba224c8990fe594965a043097c0721c5568e8ce9a374244153da7b37b712194ff36fd23c031d48485e765c4b0aa5a40eba0c49d171845c6625bc75071d2273741861edcfebb3a1399bd53a8af0a9884c195bb43621a48308a84b1dec3e76ca933a1d43d8764edfe6701f5dca3a84a0c776ed7af306f171d7110474e644ea07f1d8aed601843ba3996cfda55ffcf2a5ae541de50bcdf5eb2c5e94aa1ef5a21359d25f799dd4ade4052e427806ada9a4bcbd0bd37568ef77abc8f8ba3888d452648bd5f244988b3589bad964e36fbeca410e5cf03a26d355d353aea75b687b3a27f95217ead5261072119292c3166c16a36fccf578507f2dce312a7bf1e1c4aa162d10d3b42b73e741ec9c8542877c8c3aaa8f275e59689a4fc955baefee5eb158563ddc7ceac062615ae7d1259bd3acce2b8ea3b4d6ceb9279521579c3be8b47aaf49539d46c8d10aec474a9311323bd4c6073958811cddd431876cf941be41841cab607c343be48d9c906d0e55a833b59e97152945ae4672a46231cfc285e93c26b336072afedce79d6ce32625c31ca748c90a59aaf393f86b3cc8618ac57b6f6a2739f6ad2f2147290cad4793d2f02073853ac8418a565bf56f7ae6f84b9f90631498cea5757e74cc18ae28d649aa76e92a938e311f8a57f47c26fb59512d72430e50bcf94afda614e5f8c4cab432a595760fe7f6187278c28c4ac96dd3f94e8454275427be3135281d5e53393891ac17f24eb87c52da75851c9bf05363363478c6b967185149c9a109dec4c8b019aaf6dd0de93282a478afabaca010512931a272e309393281f20eafb4bf4ee56b8a9103136ba546b597a9f3949e1c974036573e479d35b9ccbd2087258cd97d54a4d059b1e28bc5920393f71c95303c4d69dd085fa114e4a004226d4b866ea5747cf162b1a820c724d449331b38a5a64d9e5167a1b3d665889fa01011c362f113142268e490044285f87a4e214f7cbd582c28c81189930912e853a5838d545721aaaf9d418e47f8dbb9354afd2923838e488e6bcffba84e0abdb936bc0441ceb4e1250862b490a3118ca79236e3ef2da4d226256dac0ee46084ea635c997a359989b7885b95949bb5934311c72c4fedca0b29d5bd44a0bb8472af5f9d745544e4f235a4d435f7fc1d14390e619455f320b6646b311902d97ae399dd87d3422e845a7594d0396b4b4ada4859b991841c8460354569dd668e732f1fe41884a747e630a75c73c7680e41245e9dc6ca7655ae36814807dbd3ed3abc963c0142d91ada45ee9a4e538e3f1c8587d1e2b3dab4d30fad6652ad85780a7ff50872f441cde251df33abb9440939f8f0b768bbf8ea242ee61c7b507cebaca47cd79bcdcfa10755eac6c724fadfa9a4468e3c98c5ea57d37a11a9f21423255fc88187a3c95552ebcc36629b2b2a3e56b17d4c9bd5f5bf890dfb50c5b9c59a149a46d5e72b158ae78c32ed683317262a8c2375a9a66d3e4ee167dc0ce2df7538995d960f532c6d4fcacfabf7c55ba5386bfba06932cbd6dffb2085a11dea95ded0f4ba93e16314debf54bfaf424deb920f511cb6b383fc5c9eb30e87e1231428951aa5145a87eaeda05867cafbe8e5e339c99ff0654e9132c6513a52ca87274efb31bc9d7e9b55b58f4e38a6c76386152d379d1367cbe9cce931293caf868f4da8aed9936a6dfad0c4397d9f87ba7636219509fc3f77378fd767adf181093ea5f01c9feee3e4cac7255815e942a90ad3a675253e2c61cf96cce25ded93ebf8a8c432f9a779a9f2ec499492220217f8a0845969d1e052d5f9e92f04053e2681b2d351fe23553f9a2e2544886c89491113332e2b46bcd98724cccc3d3a1a4279b90c193e22f1c9fb57593f6ea7a590c8ee472bfba0ab957f23f0f108a4c71c53cecd061d5a8ef85427e14279f8f58c36823f6dcff21bbb26321f8c509994426bb8cb26955a84f9574a2ddf5e5eb657071f8a38c4aa7f65ffa2f77143f848c45a69d9d17f5da7d2413cf84084a25b46cf3a76d019f7e23e0ec1a951ca37ab4f526319f83004e37a7ce384eaa0433e0ab17a2ddd5d32ef5f737c1002d91b531fe573fc947d0c62757e2b46b76ad559810f41d8e373af679a8f40f0a9d952a4ee80506dd62a9598e8545fb9e0e30fcb9c7674f0ee1d1b990f3f3436bbebb1de3d3668888f3ee4fde1eb47dd49d9621f7c586bfb6452fe3f6c4cef21f38cadd94debd7a87a385b681b39f37511ca13f8c8434a756bf91c1d64e70a0f4ad1affb13526512fd1d2ef92d95cca3a699cf317cd8c19c7aeb3569db183e56075d76290f71a9a6bea543c24d4cfdff78d820340773e8bd86f0365559ca412fe55a2bcd9fc4be180773dc542d97ba3e670f1c90ab75869d8b9a523a3ede80899a6ce68c3a668d71c3f7e2fd54d886b366d2f9523f0bad65c3315ba997cfff94e61acc601a26839e66d2b01a8e7a5a9d18ffa875bbd2e0faa9d3d332632693d1f09cfe14997b5ad5aece707c2c2d6a369b383f7d982195995e78ee6ebe948f326cba35eb7ea5fa604264b0f54784d41bf5a82dc760f24e27aadaf5218695789741ad466d93874179a7c97e53a5524a0886735261ffb93b79f7e70b9a67f5afe6578bc7cf0b9d884d7f2764a6ab0bbb2a213326dbb86007db2873272d23f78ac1c716ceddcc71a774a5ec4f061f5a508e4e52f3e8e7e7549be40025250b4aad7bd3344fe67c721f5860fb3cc8e9b0aaa54c5a838f2b6cbf3a7cdc850e9a3a1f5648aac6d2dccd152d75087c54215f5b711522934e1afaa04232ebe85a3e33cb943f021f53e075cd65e9adc6be330d2123f0210555860d8f41ca9c6e1f9ba8ecf2110536ad877f6d21fd85275f52051f5070bfe4cf4b39a7db2a2949c3c7134e51e679e4cdcdc779e15d3e9c80a81fe531636ff29659c34713d271c5ab132237ba894a7c30c152a6d3c98a8d355850825f378305414a1064e5c819ef6878a39800871a7c2ce18f9f37baa5be8cade34309888dac97e2456de94c0533f0910444cbd01d6764cee3f93576a5053e90c08790a94f8c5a57f95c2c161480f1021f47c83faa185f572da34c3e8c9094f9b74d526a3dfb28c2a363c5478f4fbd3e91e5123f312942051f4430a74e1acde5e5e3ec3e8680dfc9ec676f3a35667c0841a594e65cfa6ab46b3c088af3ddfc3519b3eeca0710cc4e5a33e4ff8b3b89f4fd511de2f2f7c5599d9ecb684af5f4ee85e2b2b799a3e5064f0f5e9cc3f67dad882af5dbe552e23a305129d263170b295ea368a995f9085d7ae86221ea4e655765292d948b5b3cf334caa9072ef82c56abf1f4c1819fdc22f1cc2864ce16c893b7fda7db5b44ab85bf493b492557e34b0f2db43b5bfdabceb45778b15852b6c72cd62d7fdfa53a36e6a82c4ec2b5db6fc91f35552c8cd3334ade6c8c2f836061c8cf96c944289739e6157c90a14fd743b4e8922b72153d42340697a365c9911ead684fb750eb5aaab519d3e8c10a3388d8986233cb88a9c72a9239895dd1358f39eb8bc5a202891eaad84367ea8c527bf27d45a2472af8cde99f63e79cabef62b1f440c55b1fa26fb21a4d837a9c620d22949cced9daa4ae8729ce31ba6a368fa6cc698f52381f468c6cfecc9ec8061b2621b058d29915b4e7c0640c8bc57b902279428356a31dab3a390ac3eb37dde35be219238a5de7e71ad51ac5a83a1489cb358d61323beb13285262239a85882b0de52776d9fc575da1bd2df744aa5f06117926a446ad4eac6e65a38af837ad224eb06243ebb03ac7cde99b30ab17b34a5d94f0a4d404c234568cfe57aea39609b35232469d942fb55f933ef112354c346f05aa0726de927952a867cd2dee4ba04d5fa4dc1cbfbd374b28cca5d9c6119a3d5889a5e69659cbda77751a25587dca4ceade784cff2438312b4ca7da0b110b7a48e2fc23cd6e55cb98e4de272625282b3d22e1ff89b03b5fd136a5ec911ba8582c1ee80109bb5bdcf98b6ccf5bf778442be3b35bcbc913cae4831e8e586b96b2d4b96b1d2e6f041ed23335aaab522bc388733673ebfb526fab5c041a36bd8d6978524d7b28622d9f31ceb84c3a3e9c08c37c468458792dfd400f441c73cc8e8e9ed5d9e143f025a3a9f039f919321743245b68aadad732fd62213cffd0feba47a44c1121128df97bde3f0b595a8f4118fe764baa276dbeea21084697de1cc573cada68206eadf7a3c7fc2eed6580d054c9efae33a542a37afc01fd39cab859f4a64fa34b9f98bcc53244053dfca032ad37ba4e5a2addefc562b9aca084a1b27262826244043dfa90cc99a63445e9a42973e15d59598be50463a0c10210f4e083a15993bccdf56f214ce9b18757baadaede95523e83460f3d2463526f32f5efcbd67be4c1d155a621cbb3dc8ed2030fb7f4d825d7a56cf7aac71d72932f65b494d47ab42e7638c7527b4a6baf4c3f3bd0a30eea8b558fad6e4ae8edd2830e86bf8d7525726a53877a2408068810393246902ee3022964389fe010428f39a87c55c76f8e1b47c85bd0430eacfa58fd789dd38bfb8e461c0ebbab72ca54a7d72d19f48003f79b74e9e03e42337e29515915305cd0e30dfd88101b956ca955ee1e6e58e753af4de659e1a7d1a30dcab23b3d0dda42b5ead2830d6c7ebbb7397f559a64419012085939595e1678a0c71ad4e0f2568b102a84a8530f35a07abd37873fad83f02f164b1157418f3498b4d7e3c8fe2865ee4fd0030d283d622b64f6476fb1063dcea0da9619ab947a0e2d9961cda04c64750e22be329c613bc9c95dd93264c870d0b1467c6608ad35f71883aa93072dd7db4cdc2806b37d7899599d92bbb34718f29149b38c95aa5ba7567a80617b294eebc327f195f9408f2f9c77a5f8b7ea2462f7f08219a5ffc68d0fcdb477015da24b5b447cb2465468d0830b9ae64f1da5df469d832e16cbc91a5129d9142f630bcb9c321dbae684e8540bcb8f316d87da11595e164e61d26f9548b3552d167eadc9e4a4d4af3f4f8f2bf4ea3a57a7abf99e15a5b38715966ab3ca56b4afa947157c25e4ce4e7b6746de420f2a9c5e7cd57a701944e8bcd0630ae7d92cbd63e89b5f992ff490422e7c5f0a2dd92f4289851e5140cc758932f10f1e3d3da090c7c6e4aff5cd684ef57842a285a818e55a3cb6d5c3099c782db4969c7b34c12465942ede37087a300153afc55563eca38ef75882739ab5760b33a1a3df4309f8ed6635a7a50ca295286304294388913da34712749549f5f89a6dd65a911e483047174ab9d24a346a17073d8e90fa3cdae2cca49b8f3d8cd0bac9db52df7dd9aeb12baa47113e173ac27456abdad7c5622959834d8c68a00711122e46b6ce180d5aea7b0c01cda74de3f7c649555d7a08611df6fb2f0e1962891e4158d377eeefcd3c0d690f202c94c6158d5f572ae28bc5c2e31726f1ea714ab437087d81de785577aaad31c87a710af1fdfad6282a55bcf0df3546cd7cd9d99236d6088f5deca25286f1d70d629a22f0d0054a673e5383cd8897f2c8c5ad448d10215f6c7a9c072ef020646ffd9c8ca2a95b98a430a183522d5f7b6a0ba4ec97b239bb93abbb164afd6ed3a8fc46ea8c167f9b7a1642660d19a46691b7ca98ea6c93923a280b3be8ec332e4fe84cae55b272c4088f58f0f3256c45050b467c6cd999c65d6bd02bd4b0b7b7418b2ef3942b90a5539a10abfab35a61fa09a1d6f4ca4ef762c59d33edbc145a37a9bf8d95932328615481c72ad8b50daac63d0b7d2755a08589ae93f5b526a552a130d9a947eb5442f4731ea8507b293fa1f5e97cd4c5e314f86fe64fcd8cf3aaf59412c7c1a2318487295032c652df2d95167fba84804729d67e5aaccd4586802144489ff84a0e4460b10861670111225b4405168b101cf02085afbdc3eec59396497929694759711ea338ef7b10a14d4b97304b52504a4e200a4666ade30721ab263ec52314c6dd6cdac18497ee20e2018af597dcfcd94e5e6a7eb15856200465e5a40ce5f109e5b6fc51233368699a0bbb1195131311f0f0c449dcac870c429e3ca11308e9c4a563f6fc26c3bd526ec9101e9cc85f0b95b3afe5cf5d3c36f1abd7617490ea5db33481fe8e09cd5168ee25275f5244657150e22b9bb2a2e2011e99507c86cf49ee3b4109a30b3c30f1eb681e3666ed5666a51c09a30a3c2eb18e26b1b15f74e7dc2cf0b0c4f51a4a3e6f4acf417fe151894d637568cb7ba5e44909dc836ac9af352134c9088f49a8356e5299b51e25a54b12a79e36d9bcb275e69b47249217ea95ab0ba975fe4062d12b57a456a3bb7c7f84195337c3bb740d428ef8c49ed8e79846ccb38db83dbc4a17ba543bc668810723f8a454ac0acdff9dd1224cff92e1e75445b0f79dba4df7354e6778246255dbab5a6d83ee312122992fc5758934b51d3ac49b439b70a9cea574f50a3c0c914e4226cfa164cc36cea310478fea95d2f15c5f3b0f42246b5bdb083d55bcc063100a55659bd92ab6eed3051e82d8b58c7a63689a68d860e0110863ce286454931a36b5b4c00310c954e2ef45e48bf1248f3fa89d4ce96a549a254259e0e187cb65dfa368599a63f8061778f42153a5d3df5faa7bcb67f0e0c327afb2659031e70c9e10f0d8434a66f52764269993f93078e821ada32d3bace689471e8c273cf30bd55196a9c4e08187b45f7ec906b5318f3b1865ec8afad7c9277d0a78d8e13a51ade4eafb2c17d52161321b3889addd28524f9c672e25e04107a40af951eb2475cf4879c0630ebcc898c1757cc46f521478c8415f755beaea427e692e168b9022be52060a8f38d8adbd73856db6d08d071c3c2d4a08a563fee7f479c34178103267685b4d310f3728c256cdcca50e399d471bd4aaabef654a74336508e926c2830d4aa17f732a296cb7f436e0b1066673546f32e8d0e6611e6ad0bdd378afd20d75a534a8d95fcf3748d11b9f754445480b78a0e1ff2ca733c788c935cfa09f6c6bf911a24aaa6638c3eeb76c684ae52d8f32f4eab5c7d68ffea74c86d6b3aa3a21f237bb8ea1cffe385711e7398f6230a45e59f3cfb4496a78848155d3a95ae3bf7e9e2f16cb0c7880a10dd52eec954e4aecfe85e4c7eca63cf355898e87170cf1dad64ee4660bf3622971365605053cbaa0e79462bb2934c496861021e262bca3c168582c2c061e5cf05f6b76da8c25dd64148f2dfcf2a231b4cbec4abe178be5514a868001060f2da44f8b53524ddac82014834716d6ecbebe4a5b738f980716f05736229b7184d6593caeb00ce23ee308ed52a4cae06185744e42eb7d64cc6d2e8f2abc2f95f6bcbddf4943c810e28d620219f0a0c241d6e3a826dd624c76e1934d595330a88d9b429926cfab75e12185e58c525d9dd6a3da9cc532440526a8018f28a04b7c7753a79d09d5c562f9752216cb10328478a398807940e160526a132aef947892ca06b701b40d24e3037364e5e4c83a821ab00dd806cc28408d9325c23b30601140e8d10522a001db00e6060c057845e548ca0e1c6d2c0d0400004a899103002b2a47d0d081c3d5d8236a9c2c111f3854524872008063b2c286496b62ed63da3d321ad3c79774e688c552c4534ad830e9925e3931592162726495a4381113234550d80c209938262b29171522252524403061a4082f1d402eb1e22a967036508a14f1223d8054a20d235cc48bf000428953e203c8248ec94aa31439525242024412c76485c845654b4a488044621531215262648c1124000824522e2a25619c5186193e803ca2518a9410b9a80800882356111322250700d28893bdac94a8a83811020061c489b3e18b4049711d9478ca96a8208c33ca3063004014817aa424a5a4518a94b0716252a2869f2c0048228aa0a8b1728252a4e4649518196304100082085c335e644aad115a7939a25272625282b252a282c234007288cb5c0acfd549a98ce862b15c00882110cf54a1bf73db2a5f4a0ad1b9d4d81954e9dc282fb2271f004288950ca94336f87d96f105e5c24006e17f9766f131cbac462b88c54bdcd363cca36d6306904020b5ccaa4388cf10a75d2c160302087545ead63aaa68f129f19514670b903f9cb3ae0ca24793eed452c34f4e504e4a14103fac5ec56dcace1e61a64d51f1923629b1582c162fb2272400d207845aa133dc4acd59a5103180f001f1fe3437b3328b75f76012f53ace9f90919bd683599e887a71a7775ace835a4f6b513abecabd8707949033f32254a56d4e00e40ed8ed87730f4a445400c40eda296d232e52b379150052073bc795bfa293be8c413a642a4d0a319faf359b50564eca98c3ea3a2f9e5ee375522072586c673fe51f27937b26ff699431c618455416076d2c8ba5040740e2a01eddae7534351c56315f62e6edb35935a222040c206f483d4b856919abd3f76eb8d52a1984c9e4494a59080980b401a99b44bf86c97c1f6f2365a58d94343c00840d8e5a2d3df79a8a15ea5e206be86bee957c75773a662100a2864f4ce9760acdf231514c4800240d46d5990da865a64e15df24aa77354e4cca0082064ee796f1a366129bf2037286955e1f29539f6e1d9931809801a5a31b747852cf97e4c02f33005206b75fd888d727527b08840c9c091dfcb55cad8b0e9031ac4356867ccb301d452062389fb2cfbc9791cf9dc904240c669846dd5febfe42270408182ed32ccc4f76bef0869ece5ac6537e7bb200f182752a842e3b17e5af5f2c96df131c9418205d38cb96bdadb9de63902f168b1a25ddab807041f3f431a3a59a54332e1b251d06902db0dfd13dcb205c89a83928b9815b2c276bb250784960b11839828068217d7dd1f54d9ea67a16daa4f77346cda94a0acf241650abd7d5bdf435ac7db194ac6c9114942fd14c205738ea4e8de55e5b7fb6156effd4f9b3c2d59d5415decf183cee0af7d5dd6565a5d7c82a6242040c2054d0564dc8b2d77d692203640a8aaf9579eeee1fe61c011029a039a7a8d2b14cd4eac0004814cefc19bdf284e76accc5625183c8960c8980ca46c0a8408c12a0c06211f2022050487695f4cfa426e6e427a8838a91579527e5849c0d9303e2843b66a94e8b109e841ed5d8158b05c524016942a684c67c6a3693b0170813941d858813fa4be49d848c0164097ed62b5d8c4ebaa5eb33a9844cea1dad54df8dcaa88bc5a2797b51293132c6082c96db8b4a18409280d625b4b80931a366ba582cab88091105828435cfa49055891731594959364a8ce4c04b8a3811b7582c961d02e40806552d7daa43a69f0f10231c4abdca70da6d4fc7b401a408aa9dd9fc19a544388c142eef3ad2c4a9800ce1a0a56e6c0629659236102124f6e3e1a3cce7a559204138f5b4a752a19a9ed3040204c377be8baad5da3a7af98549f8ea539aa6fbd574f9e10bff57fdb73ee5233e354c547a7178191dbfd1bd582c67fce0c5b623b5d0a6bda3d9fbb10ba3a616f37aeee5872e504acbfa29b9dffcad1fb958e7dc3d7d1be23f3f708192233664097d3adfe2a01f4e86ae8d908fbafcb005af757f374ae1ff2a54821fb5509dd9eb68ee759b45821fb4309c90bbff2c56438d13142263fc9805e3a2ab4e973aad6abc582c61fc9005b25c6bcc31a52acf501113f606e3472c38199e4dfdfe367c0d237b860b7ec0e28faa575ec8cd42ead5554a4a86a0214445c599c1b881abc062f196c18f572ca656e68dd42ca1e65e4723022a680859c10f577077223ee9b0225c7c6d9c6c087eb4421d5497ca90aedb45a47eb022919bfbe9568e76f5fab18a3dd568ce9abb5f8ed40f5528eaa1759f56ed9c2a1d987ce0472a1ea9ed5e64f2243dcc19fc40c569c2efc7e5433395c18f5328444ce5e758662fe4178bc5889145c20f53a4cb5ce718cfeecfa3a538b8afeacda243bf7948b1cec973eb493dd11d8e42d59ab793e234e949e48728d2d146bf6975424fb537f8110a64ecbc2e9366ad6e56a0f8939279ba417f08711af9f10974cbae568dfeadf5e8c80f4f2c856dfd0a29ea042255e6d2593e293f38b13cddc1bedcc5ab95b6e125f8b109a5d0a41d75294d75a71f9a38b36fb88d52a6d3ef656271ae31d493e68ad57e6062a5f74a537b12ddf9adc28f4b74beb2b336df0775be157e58421f5d57ede1857019dcc28f4a249ed95e7cde60ab75b8f08312492545c8a821c5f76812ab876848b566077e4802fdfa3a436832255b2b129aa77e4022a963ba6cb790a31afbf108c6d496eab14f5246fdc31197de8ed677fe55ea37e211db2d549550cfc96684bebd1be448252a346b112b570da2b79e59c956118b6aad7a6d2fef7c4ac41a93d63935c72cb64d885867d1b631989aa7341d02fd265d682b0d91d03e1972350ab9b95408b5c6b41addd934c7244268a6c4776aa1ae5f3f087bbb555defd7b7850471c94aed9a4f7b298302916c7999975189d83c204c199bb2634628bdd23fa842a6b635cf3442aa7e58fb5483da51f661d51f3d7695302df3c307b3d4e2795cbc8774f74bca98f37699f4d0be9fcc61b49929d9c9835af50aad446c8876e101a1ecd4afb97787ff6c3c69a99e1d4ca2beccbe44de5307e67be48efdecc798a1832b847893d9314768ac073fe6e0ca24da49c3ff099d5d2c96213fe460fa4b2d27e364eb689d98103939a27ec4c1f6dcda5dadde523a1cce5a75bc32f34ca9df903284a4fc7803328995f39e77a4d01aee462c962168084919f2c30d9e09f97bd2b478f1ba8bc5e21e82bec18f362466ae74d7f3e5a978b158ce0f36682a9a375a83b0dd20fcb18694867f88caed491da50675dcf8b169da66b35e834dd6f891865506997ffdc469c68f86d5850ad5fab44ebde2fd3843761a43b8bc0c297e35832d3b8f8e58a15eeb4e199679f4782921d754d66430e62ca3e996affe7373b15848f0630ced8c169a7e654768530c6eab192df4c566614229265db246ca16d11f613093a9aaa71517af4e60506fc447794acaf697bfe08dcc6d6d429a7dd0bcb0fe5c4f97eda3a841040c36599594141ffce88221e6f5336fdae8baf67aca4919164bcacac9110dfce00252b6ce6242e9979514678b25033fb6e0ca4cba54cd8c10a1167ef159d7ad988a529f2cfc52ce84d05272cf643fb0e078dd695255aefafa15cebe49cd6cdfe997232b24552a358fe91e3327ab701cb9fe518a7a4dde0f2a205f9b9a87d6caaffd630a9bcb9cd934aa6ff5fe430a49d3f05a3286ce1c7f44217da5d36b7fd07aaa5f2c961f503867b43bfe08fdadf31f4f58c69a0ffaff4266cd1f4e60739a387dca758e8d92f1a309b6c6cfd3498f7d4725262832dff7489322a75234fc5882f247836c9dda16f22ffc5082415eb58e31db8f242c652b979db3a623b51f4840dc7356f3f6a24fc87f1cc1f0935a55753653d213fc30c2a6a59019f1423f8a807c6ea974653e3d77fe2002c2c5678d5352b7896d8d1f43589fd88d315ca47a0f52f92104857225750eca84f6120ff91104c6f59d760e519aedfb018495c66a4e1bd5a88ffe2f7c9df44b9794fb42ff57391a8307d72b5b227bc101492fcc318877f618f34b88bc48b6e99a319359bf14da05225b4c5fa9f1aca54a1769da6757fea71f7ecf85a2a5b446a72d7f3771b1d87cfaf9b45dd367dd020224b630f3ab8d419dfa89ca6ab1102e4f46a6adba4d40420b0990ccc20224b228313102060a2240120b0790c0c2c40818604880e41549e28a0990b4c20024ac580503485471c4c40802485261011254acb2c98486ef462d75012146728a3435ddcd9f16aa8578b158d02031452229858a9b98180163040f202145bed1f665292147a676b15886fc8064142646c0900089285c0d35368d0c908402142a1120f90403483cb13cfdf41a45d4c68a891a483a51d200124e1c53e9684accc454d99b2800892610409289b3754b836c192696736ba6846d18cd61924ba4f56ed0759e41b8565d2c16124b284b8b382d23a98401482811009249a0735a1535f67db231171249a09d4f0b1dc5cce65793446297c2f57b14423dc7580d2490384ad53a885d1dcfb2f23150d278c4a76a3a69cef3dc10a980c4119718d9416e38a94b6e248de0743a1363fab5cea8923022795ad496fb248b48837950326add3dcd2051849f5aa915a72a5d8416184812718b14cf7951f7fb422488306bdd3199b8d3ad93911c42995f8ecc7a4a248630af9467afa3fe7e97a410adf8dbf5774dad3e2484b06438a1b9ba4d7f3c88c5a4c7ca155a6dd45f1924824877529e36ade956260cc4f9f95efb856635ab0202e9df4aacb815e19a1990fc4119f33f88cc27634e2f891fd43aafdbadc57e847d589bc832652ef6837b48f8b016f36a72b435e6722f7b483573eed7a4eeee28891e58f5724b272956e7675d2c16b758da58315101491e4ee6b3ad3b961a33fd62b1b441c488113088105931c47002091e16d53973d01e6222e5178b85e40e6caed7a953c759fdba1d54153ac727d93affd497143782c202923aa046671de2dc1ca206091d946f7f2ab3ccbe3187ded12883640e6d8d0c3a5aaacff9b91c0e3aa94db531a890fb2289c39dd4a92e17192a2b148610131238208326b18fb1fa456b0d923758fa4377279d47e4f86ec8b58bbeffe8619b1a90b461f522a57bd6b1643120610332e3ae97c8d7c55242647d45a5640d2247160c48d68094aaafe9b742b7972e164bca8a1a27264da2867d836869aa6362f76d9234a45f3c07cd1fd55d662468489f69f3a84c86f55d919cc1ccdb90e2e5268f4274f2258f5282068919ee9cc1e6c6a546db5c19329d62f5a8f9ced0261996a541c70e66c265a7c7b050db4cad35cbe62c16c371837eed28d949750e83a6f64fc8ace1fb5c0743fe41a7bfcc9fc7ef24f94262931c2f6d4f3d527f06891790dfaec448dfdcb94a922e246e322e67ea215c8a840bc6284fc6c69fec64525bb85363634a6d1ba132245a306ff29719e52459f8cc4c5637c5bf63890d245838bbc7cbf20e7af3a72728265a20b9c251b96688f1ce59648ec40a7e9acceb14376a73c7084915981b75d59ca1a5feab0c122aec39bad2e4c9b56312d56837c306245368b5dede284dc39678dcdb5814989048011d8d9da41c256f5b1456429f0e9dbad469eb6c9040e158aff7d6d1301e344f408568f0d974f71a571c9038c16ca9f3d37d8f87107d85a40999167bca3bdd1312262c3faf3bfd57ab5432c9129871a1842b1d75ac349128e15ed99dba3bbc55be869024e1cebda229ecd3a379489080b72af7cf1ac91154a146adaa939d64d09018a18f39b621f374ce5e222942225e6eda3548fb1b9110219d759b2a3da9a2f7910ca13dcdeea1f34929d509a18df1f5d86a5c6b8df12609423afb549590e9c6d5870408c711d7413c28d1cff28989c5f28b83f6f995518de9d89b0f5f244ea8c6131b1fbd3087e8ace579e6fda8f2227715ab95ea9c599bf262868f5d2cb6a984f6ca993e5117a8f24cbf42070d323660f8c805ae85e83adf18ed5c7de0e28e359d3dd2d327dd62796a45cb93ccb5eab205ea44a8fa8748f967eec0472d7ca5857bd628f12aa3b460956b99973af3310b6556f51723e3d961be582c259be23e64f19fa7d52a5deda4ccf91a5b44f98805faa7574d87172fc50b8b4d8ddc98b23ed757ede315ef96e92ea11ac5fecb15762af932966afdcce9562893ec2ddbd1a5b4d459a1c6ec5c15f9713b070390f6a86451d288300c87028130200c000002cedc8e400073110830404c200f474362c180d683e803140001484a3270542e28201a8885219160200c0442814030180a8481208a842890e4c81c7c3e372e551eb198716371292127bcbbf9e8cd1e8930307a350ef92d0c0c59b85f35c2588fecadd20809d018fc7d976af800b89b96a66915045ef8ca481c5ea251f7c2a580a4ac39794bebddd2abad088a67bdf6114cc62d8c5e08d96a2a4433388895795bc2553008533f12d6994066e5f5b8905768be5d0adf7bc923da6ca3ab545a2fe6ae45320f80653005fd34a26bc05b7e49988dd2014dcbc2741d3f0fe0f0bc053772f9d140f0d427fec65f1b486ac6ee1e6957c25698330a35e6ab075d2955de1ab0a736b83a3a87c565c0d9cc522a959cfc3a12bc4303aed7e8d52a83b9db9857623c4bc0c9665572e2cc41a0b43350085f55a2b4f37d70badbcc391bc4ecf681a7b9d0f7efa26e84a70ed196eb9207932d502f4b46ebf57d9d26474ea920b65ab169b2c3e7ae1300e9cf099c7390d33c87f581c74b44e3783f06efc97a408a4270a988d832d130e46babd6ae36c42db59fda5d083c7ea405ca027da451a1cd955268580a059864842968a236ff45e08688a22a38f67b20889889979fb6abb923edaf5f700f19f60cbe8491bf6468ce9644bd03f47d4acf1ca3119ca079aa31b8f3ec9550e461b7b6a30d1c4c0816b41705330e27205ab9c0481bcb9841b48880b7ceb5a6aa85eb66051a300bd70303b8a5dbbf48717f826f5b827c536983c85b62450ce086bf0189609d1ecf5dd41bb6f25afb5c094dd9096db5ba6e7f8ded332a61b4e1278d07db698c19ad196bcad5095acea90f27e4fc139fbc099ab766537151ff75b6debf5cac1ae99cd7eb05c57eb07414b12e8efe51b4b8d5e389cc400170235722058ce71a009ba2d9223c340a73a9274f537e2593116cdc32aaf398fa8cde420c526d3de3f189d46d1a354aaaa5eeaa43160ec6673bc83186c2edf3b5ff229c58f0ac8608e189cd64e3245fd69155a58a14feebffe1eb255c32a92d2606991191d592c12c4269d663a9a10d54c359834013985450693ebd0598257422260ed60f6bf30ce67370996a1933b1f1ec183a0fe539085a48b8c3222d11e7aced861db98a06fee46ae51b330c096c7bb6de10986025d36679c46f9df215daf7fc3211c2c45b9d63647647a5b33653bdec30713be803c959a8414e401ab47d016e68845dc14bcf82a529e20d09e115771a483957558a1d9d993cccafab7d3c871caaf4e0489f473f42a3c25d36f0abffca3d11a084a9ef3084fd8d68bcdc1ea88151e76baa33c9c610f25e026f5533d3621288c18280ca928879e860e85c7bf6928b115b7d0221d57bf1543be985f87fb8b8d2758087f3ad7f3a6e4b71bb44700e73fb6c052922e2c889c8bfcd5156cbb8dae97315200e728ee37b811bc6f253ca2fb8a56fdd42da0bca429209c045769a68003116c553b6f3c41859b5f957099babe91fb5e56b7cb1d6e91a4d3e39adf08b081252148125f9d2a792a56460a87bd9683aabf00c1399bac799e2c516fcff0f8568392deb28fd7485484dbb5577760b3b9226b9d0e525a7a0480a1e34e4dc0c2b4e09cbaa3f365286145d7ff6efb16feb1d250f5aced91144a20432384668c46ebe38385a487e3983f0f505258683ae247521896475a0e0c3091e65527cd5f0c642660d379220b57e39e7857dca44bd6548d8a1d4e4222d41c820426102339cd306523831ace0a69fa5d48f21d757e124d8b809beeb8e7444e1b50980d651112d2a1727286d6497c7d7deec85f10d6bd7849031e3b5494e532fd808512ab0d7352a3ce7fc63fc18401f7f2bb13b1e64bcc61d3859202185da1fd77b244a0612e51bfae6b3b3d1931d8d8cee667739235ad9eb001b842030c4fb0537df94893bec7436d1911d5d4c6edeee2a9334c0062c011e07d219c75c362047db1fcc53fb4d9bbac39c0e6d200ad2520f29d960052fe224281c0bba5ddd9c0dd42572a4af6bd0d529cead53777ec7484656ad4e2906bfbfc9cb729d405437e86ae7586e0eb76f6c694ab51d68c8f976c61d0be937537918ef57a570601405ce8b768b79525627d44133190d03e2fd7fa3e07ed40e8d62ae05e76b6e3599a85a03f083ee54162c7521d66e1493dc0da05023d8e9ffa411bfa974a21ee8256e9496e6cb71c306959f9f9bd4b52472ed4635ff08749536bf6fbbe2cc605f6c3032cffce01f577743325b230a27c6ec4d7173f13bd923243ee629f6f2a77c57a40cb0baa05bd4464544e3e673cf7e446a30edd699fec95a6b74a1d99469bf765aa8e24c5bbdac5f2d06e8dde08b209d64bfe7c727979a6b76f4185bdc927f283269576dc959a159cd57bc691aa132d8ccddce530a76b4d5f3a2374357cceb7695d4d8b00ab02d8b8d128cfd3bc10fb9629e113c6ac8f8e0c6b529c4435e325fd6f3283893e835078a98623e028ed16dc5a35ada4479e154d151ee9b4d3d87de829298a54131f12fff5679007d496cd320b3157139d8d929061e62efc7c9c2608301a32bb0db8fd6657f65440d059dd76db2270b34b196b8b22c9a03d7fa6c39eec1a064cc78af88b4e40345ecb3bb32fd0238079a22ae15b3a2bdda8ba8da5c7a2961b028694116da704ebe6e17c8ca9796af7634b71d58efd1a5de79bf275fba759f75c561b444674a45592877726d3e5694194a414f873eb6115ea209609242982c2db0777368db9d1b80c9e200dde0f4b864c1f5983157cb0130962c1be19edafacb81c8fa879e837174c00bf52e0ffeb931f3442debc8c2cd58c142842963d44bc5bd19592a8a5619287a6f921176ccff6d3a12cc91e5a6cf0b6e19959d24bdacbaa523c1eb77060b5bafa867a528dc4216ad44b2b8346b1c351332b113af5fb91bce467c58f53bd39689572bac2f5b5466211b3a536e4ae485b4b23c9dbac466ddf41f7272fb20758bb15f638fc52714c1be702ce888c7d2c011904f11d7728619a00d33196e0f3a76b127bc1724f54eb18465b4e1a78386f3042bc8dc96d7ffa4b9633579df102ac54cf2ef5ded36cc28b9ce06342dd0291a8b8820565fc202fe8aa18cbf494738e24f146dc276d5ad597d8a3c21d0564a8cb607316d1a20898c2b142171959714652926253be9552ed3e9e2f0a13aefe540e0d49d5234790b39cbe68d71092a15c4c1111a75c195ae64303646eb00ecf5b6c2c1e0a97de4c7f6ac6a964e2e48810b1c48afd5fde2d1f5959f8dd0322fa90b3999adb7c7b9c5a73e22134306f014d84844d2a14eea13a0f0b0e640af807635bc925851664b803098ea68d5d708b5aa8a5ea7bf50e17e0eb7cf425b4caec84de4e063b10d4ffa0d8ec75e8e8b8ca3c8c57a86fac79db6c314d083fa581d1dd8fe6c503286bd1a613538375415abc0b9a6bc6fa326d965b8d5be5496a52d678efe14fa51b1e15b353d5d8ed7a56d664924c634b9bb24d838ffd05f5169cf994b204ca0265126839e767bea1e09593428453970c7b83f46b072c52a5b2a786fb2c9ecc40c300fc0a3a8a456e1348c8a316007d96454e0cea1ccaf7967c7b5c789d4d56f96555202b6833d736b11ed0680a483336f5a80956bf12fa01ade2008069b00c928481330e42dfee4514b5525251c785219b5b47a447a26a4af2e6dd41a8774298f880f396fd5904944294cfb3ebaaa4eacc08025d9aaa3a5a88eef98ba40cdf324b180831294648b19a6f8d9419745694389bf34f45522c3b9b628b900f258d9299ce2d6c1ee71550f1e83e54ce75219da34af2749f4ba325723588dc039c1021c720f01084b15d09b34f24df2f1d2934980c84208d4c669da22fa779983cf8ef39bda01dd1e8e79209bb204f6fe6cf81c5d8a4a21eec7ce298428f6b1fa0df71d9234c695106518ea534221d39041e8ead6b6bda44a228af10d320899c30b199b986bfb9ff39bc12e3a29895d0132a8c2ac3f7ec8523a47512e3cc6bf43035f43219f36dee1976b22cb83cf79b81c8ff35d4fd3820c428ffdac32cd7491bc73635706aa81c217fc652a23852e410b22cf2ef2fa26b069b74d5dd3204c213c1e6a69b0a6c935edac787975d36a24cedf863ed2b065563075c026bbd77c786ed5616ae4cac25f92b6011c95e232f488f7cab0311567be47839a5fe2dc62e3031c5f1eeca7a720a1964697911751002f6e62317ea1dd011223eb57ab01f194b2167bff6a0b02046b3142b79f7896e29050b130917eb262beac2da9f3b5a6cc7c971e9c45b7a30ef800bd8ed6815422c6840917741f2ec6ca76e7b297946e37961b82951addef74be58c5fce871d31f4a7a1a420c0a25c42582df2cc2c4ef21eddf181b32b3a1f4553843d10a44bc9faf4bf91185b4c48464a3fab9a725900724e9a3444b2078c1dd995b739314e66e2dd15cecd4c433aadf2aaf1b8457e6c3bb832dca68a88fc066e6615ee1fa08011c2fa08a2e410d3582cacccc7cbbb8719d35b92f544d6a7ab02297dbfacf7d1f2ca090cc024f792fd4c38e67b1ee145d29003a7e468fc545ef7ffd40c02a2e77c551142c8eea983c1770caedd7c8b0011d6cb8486a5fe8e482384583ce2b893e134face03a0b42288d840c6f6d49cd21c4b7999de39bbe9cfad5e355328e30100849fdb28f3503cb16af6d48390a50963fb77bba3582a28cacadac80b58d145c21a13631508a9b0a9ecc2c9ca8f8356c586b0fe0527c5672eaeab044349e27b3c4f966440453ec5af8bb1110d4de0118c6d10039f39dacb7a9347295976d72310142fd7d577e3d2ce9f8e934f90a1d4ea842dadc71c7961f051fdc08fec20a4dafdd32fcdda08eec4e15636724b9b887d92f704b7a24125dff353bfe5239ed2e1227e1bd4ee89cca4b54a4f9381d8dd3afb5a4557f020c9d40e74309e3c0ae35f4cc0f268a20051609708abf520e36870fdceae23a2dc36a24a9c148c64260b400a353c2005a76928c6e1459bebf26205bea339b453c99f4582b40e6f377c9ce9a5f6d74db26c2377073e23addc33950776dbd2c5a437b5ba0379b680f167afd16fb0ca4f8b69aa0bc82e6e5568082d04ba1d48a1f2acec55e07b846920f278cdbda1f4d1788685c5187302f2d01ed752ce1e060d2d3f0bf5559b0c8b1ff1c6b39c9bc4e37abe4728e73a25674d5f234cfb3080e9fb5ec31abb2f79af689bef08ec9f454237f3b5f950ad326d459c107ed23f8e03ed8f28346f67932e7203e2ff425fb3feb6d936d8bbed595a9d6f60fff0eae381b32cbb00894de2f8f9a6a1b1b79c2ceb166da3b7fcc3b7d266ee2f3b351563b827207af10be11d14d01aa4375195519da1d96920928a8c184c0a389069da415019dc85425fc79384c13ab88cf7b2026b2aa7648d9febe8ed852eb72bacb89ad6123c004bd3da71aaeb91c2c2a6f88c370f62243dc7a07ead2c35f6ca80b2550f4e353107c30689ed725441c8a2938d4bc7e3e6897a47f24bc3133473f362cfb836eec1457f1ebd8e4205df6acfbe3089a7aa4e0f629a79d3ba11ac63e8ab61a666551b45a333cee93f3e27f82cb27a903a2517e9baeb1096a46800e01d9606414653f50f4ce754a59783affc8cb728845d8859c249c81b769b2105c67d07ee24551016ab0f60d1a6de3ab7b0ef12b663f9ed9d10917870f8f4e0cfe7647663868903b23a5cc5183968fd1a6a54c1592c104b1ad588ac60e70d1a47ca2227855b5e601a6f9431325eb62340af59e305ba75031621d81628a53488d8c905ccfad9c99b1f8645433b8e94cb7a7888f3773b9257f9aa424ca41bd0fed2e45f65b2f82529c07b895263049b217498adfc8e3008a23b3eedb6cb4ee775536034be1427a302d05a37c813bb55fbf285f770b1e17fcf90f5097e883b2e4aedd927cf43bcd2b5a90ab88eaac76fe0e4db9ae17c2dcbb459179bc21597ecd5a84d0a301f982cae5962f8825e15634166d21d2146bd8eff915bd459fa8b827e1e7b55bfd5f7412fe89d3e0debe81bf898c8740ceafdf59286f53b73c761ebff8c1171fbb8f2a24b5729a9a2343d072d385264b82d0465187abb6a7a381e17d11bf9bd2d14a385995f0b958b17eb0db42f75042deb79549f71b0c6aee527c7cc7d797b14cff43aff04e9fdcf6330e48aee7e219283425db03cc278c997aaba2e6fa7894644d4e05961ef641bc2d5a2a5204fdd22bda9394c49a9e394442a8fe7fd59d325e68cec57cf39031d90ad9732f141688014a2329840d24d9342a7815e58b8cf0a2aa51ed1af1aee6c258e0d2ef56cd388569199851700ab3bb04d9f5636ad2bc3e1e217f3c2d11fe8dae0b175a1a04b16a8538c8404348fdd78e96f195dc7542bb04432bf40810c7511c2ce82ebef46a075dba2e6e571268b2b0676fdcb485b4348a43063509dc00c202cba169f79b259aa9915c3d3f7151c412f14885ba5f5d50aa0373e64e73000f4d4da2ff5d0630dcab5a7b7c4a965bb566719c4dba186a90d9db3459046bf64104c56020fdd7afc1dc078754e84b27003fa979aa44cd86c10c3911e032a6bf146504a5872111fa023a09a8089e9912ac7ba882067f12f1982aeb0743442356e92fc252b181774e672d4790cd485d417b625e4d61cee3f61560de6806c67c4541e2dd08dbef34e6fcaa343ec4fabe6af2a21ef96e04645e8872decd29378e3d5c70450f15f7d46ce3bb4719a75fb7466695450e89eaede2aeca233d5d41ef295cfaac7f7d03c2c73adb5496ef21ffe9dc7721350e66cc23ceb4e9e567da0a828ec7968793e5ca82f4eba52369e60bb5d3d741a85aa786277c109b0f585569b618429917be5b574db33dd9c13f105cae3c83209a07715a7e63ecde142ca73514d095ff2182c15e875c309d7886d216eea2ae813c47ce109d6405ac6924d49f60bdd4ed50cbb2b7a98dbe39413b7af67b48ec1d8ffe3db32bd60ced41d3645fd6bb0c62aff6595a79e6a6780b18fdaad16d0ef9a3f40c15a2d264de53683e643a8bfe9c5a7262fe8b22d4b4cca7471147339722343aef118c1f854ee6228a2823a0a2c888e20297e7355b7512192cdb6af7582e0665e276d3a55229656d68cd8971767121124584324540d1871403b4e01913f1c20202b9d0c9afc50d68039025340135d04b2cc9142ae239413f0bec0e2283981614b38c9cf7c89eae9827d9af7dffeeaf6aded759f297ff070c88f0fd48b139aa828c4925ba0005843930d6d028fc1bd590700eb17599997af11438001d6b434a674959cc5205e0bba22343dfb0802ecf9e9acfdb98b44b52e5ac553f23f74fa20c7c3e29149cc8d93aa214c5af403f31f35346499a5aa6191dc85ddb0287dacce9cd88937e8e73ef9fb2394dfaceeff1a12e4cf6baab34cc86648246b5c1f5bda89d5b9192fa938d73f1c102672df2ba8637f531aee5a353191f5b9698ad3fb6d9caef55db7320b9a7b84c891e1b0b833306359f95aed868b49d42e71ba84731dcde3dc60219caf92eec7414340d711197f25a3ec30d6da898fa59f855c65b74df7d110869b58acfb97c959e56d412864920f0e725cd03983e13524396d4341b3734d007e2be3fc22edf03bf66a713a513541fb64f6a0f1eaf7abf11f506f41e40cea958682c4635ef991dfb789ac89fbee3f82c505a5f9803c1e4699f986e238e0f0a65f88f63742c71ba1e5f33292689c3a82f82ca93172192585653a2c3517c2d4620dc2c93c696f81f2a3c20074d89f983260061f914e247fbcc57783d6a1efefc76ac22319d25d996fe421e7ef21f59c41bd83f08d9a8706492466ea511954cceeb270b8507c9861452607fdd134053bc0f475a08750a3013458e00d9654c541d4fef28a582d4b81eb9d472fd36149d2a3ac520a17e014ec89ecdde109cf82562c5f635a4aed46014c1ca9682fb16166762796fe54ba69e130819e722a830162388e60776f2784655ca17d0ab2b426c04768dffbb9853353c55c3807ba1b4610060429113a03e7a7df083871ab8b5f3c78230fade4fd01cf93072577e12942529094f1765c848486d455331ab109b9cf812b6d8a02a91737fa1820266fd3fc8ecdd57e193ecf72920ee2201937fa37db2f392c0839013ab195e5035158db709bda743c582c44a3091082306222b2d8f085529c8c712621e0c4627b1e9e1226efc93680fe9c91914149b915d1ea6871f88437f26b4072e8d4af4e115895d13ac533aa2fd2d726f599a0b4a95d78e225edeb782e5c4317b4243a13b5f0e94d6ef69b9df78c2db021b3c54cca486c941d42e57219a72ee9a85fd7624c4ad42662c29d730e6ac4de8e464e26f089cc3198778c5db39e8f9ac4a6a9c902a0ec66e4beb801f2c5c85fb1d55ccbb60483664e0c68a720319030e38f7d6a5ae9719531440dbc5ba4e664d47beae1375162b577413d5a74a31641afa370335cc16b9e536c2365ab4951da206c388fd16d615f72a4b9742e9f0f79cd0770c8d4b260af9276ca107c17c4310cf3531851fee8dcf2f6c71074ed355127be5c7835b45cac293745fc8e1fcd4bacbc60ba2cb08607c6144513aeefd36a11c1eb1922cbe493a60bceb8b996ebbf6d60d7ec36785805badf8b0894fe4ce2245d018c38bd1d5e405923b432ddec9c645375d1f652e8ac95bdfcd8476d01f914d0e836154401eeb83e7d545d8aefd7bf350be651325456bf925e6c0a2873ef9b3a40a9cd087732ef9964f2a137276b79c491c29db62cc8b7f1970ddf63051d2aba6839f94e3c9f1e501cc6bb2bd7edce9d880691fafe42346adb030dc243b09731ef34f603986b30d6a94e56e7f57c1abbd9f2c26f6b79da0905006296750164ee77c5379c4455f8c7648121c70c5530992b861388c38372e80b6cc37b639d09043314b59c4e55e971329fc8a35fc3baa860399a7395ff35b5babc2d85c33a17132b0f59ad0e17233e7e15d2abcc5d1c450059c483d074341a5d37ed018fae59ee30236c7a2c9a1392470dfa8d32cb4c9312a028d78078819e874424c28bc0997ff553f4ddb1d0329ccbf139c6b9b49fd2dfa6ce3790afae37a7d6dfdaa982a072e29ec162b39f23bae2ec4d9530181b857fad162e3a6aac3941780c61171a94d1c871be3c83af01c6f1584dac673486adc914386ce4e425b61d761a1e3b56a010fd042d0b4525b726c701aaedceeb620e88c3cda89b0963194fddafdc1e7e0245655f318b16556672e91f5649f6ee50b7ad41ec4e45584e9b91091bc3abdc560fe6d84150341f65fe4ada3ce82407779541c86e269c2268a733e2869f62af52f8f7e8bcdcdf225f843956180219b1e12da3146d045b7545709ecdea3b80352f86e2efebe389d8f88f05cd2e5d438a6b4b6ccb59571cd2894fcf3d94bd1fa9a532da983e3957c6c991c1a4e86624d15412e836ff1b035ad361891c75119178aa35b4e13a753ea04cf2a640a8144d1fa104a80196e44b56d976556187a327cacca499ab476182a2638ccee211881b79cb5dd2aa3aa820fcce9773747015972619db19bfd4aa5f5ed6ee961a17413692c612306f53812fa0681e4290eb151b488e06095235334f920f3aacd6087691a5d3d95dc8bc35ae95ab342a660538adbb0d8a563b1649de2411c821f22add0ef7a1558418496d290880e1a879a1a1515c5571c05443dbab3eed0b7e79132aa864379b55274f307daeafcddebeb405dc26076f7c836dc588938f5807d5faf7dd582b3c9538ad9f7cb332c2b7e1aebbec2d697116b8dfc0139b38d1b22a635c2f8d2806844fe51c8274468e4e8e75a03b0929a3f260a56b1516d65c79a4820ec12ec9515e854ce205081fa93265f0c1816c9c65f534e656a91205a350690861410e1ccbf03779e003c4876a1ed50063c07c5abe09c84d1c26ae252220c558d3a9dde97a9f8ffee20a7d1a705b3cd282f3861614469f7eb429b563612190a1f422ba84c80aa85c6e8e70096d3e604d38634b7e599ef543a0790275cca03a810151e2e169c23f88f4e0e99c43426d4a7e52974b6a32fa67fd2a600b2eda5859196e24a568ccc5e9d7e18d41e8f98d93ba73c8bc3b7be37e900e3cd3e7a6acc91a83480488adf6d48d8f6cc92dbdc3f8bb8c8bad8866ead61f10d5d5c90179c2ae895b5a0557851058116b8adb4cb75c7dfcf3b022d9158a51ef136596b53cabfffa4624798a3359c09e80a6c8667081621c079cd091812e982ead096dc465717d41e51ff566190051c5e100c8349644519add76e7464800875311b2faaeeefb91287824b12a7f62fa66d29eda82f838bc27c00de151ee4c3b8a930ff96f67c3ddb72de0a8c1f03906b90a9bbef2275fe2df8cfc129aaccc87a1c952875b69471bd778171778009c8d41d16f131c10c427d598d8a899bd21f39778e28eef20f5499c947272112c24934912a258eebc14679d31d19d1a78d44bb7974455512ad1a33d00895c6c8bbed8cbbe52d10b3204b4e23edd1081c5749cd5081a648331c3024699fc10dd44dc9ec9b6392cbc0e2621a2748d944e161fc146ae6be5783ef683427f54e8b7c7e74d4858fca4a83dc0f730f3d8efdc0ad03e583412876ae8b4474f2b58806502db4bf129c9e211e22bb4ed97ea45b7698c9efa6495df36f67c2bbd426c9623dbe8c4592b89e016c02dc755fa902dc3bb157013a872a8d0305ee711a6f4ddf3f96686410baab310bf4769c43d3dab6945e8b51ee9e5b17eb22b93018d17602427d98235ad3c08236fb5cdc76129ba656d00f529c97ae29cf9cae6ed7c98385d5d408e803fcae7b28f4891535fac4ced1e235ee93ed3c8a524794b2381e294fee8192a0057732fe7245bd01cad300d7957336a642a4dff574547be020d94974db86b908ce60e675a4f2ced34ba5646b98a878723bf9b0a6c6c81221918a19324cd952a8ca03a2f697edb91a48b392b25ad1dc89e60a851292f3eeef9146d0f4223bd96b0921913571238d6561ca949ecdbd1163d7b01e04e7f7ed23ef8436b877515cd172c755dc72910c3d62f6a6d0e5c72a7d8eb814d06896545b92ed7d5bab78241b7dddf2e6c027a820d84d0ad5077ed6671572106bc0f9f3be6db1084859247b68f38e6a74713411d4769f2afb7d0cac299b9003d64712771286623728a02df69495dc1b9154dc9102f2ab78faf23f3df6fa8e510f0c4376936abb739778e6839d33ac307ff0c541b996c63cef5b73c4105cf50f592ed0ec89fbfb38fbe3bf93a43cc50b303c703ec199d0f2a2ae863e29f48f6c572a59229f68d71acf685e6401ba7febb7003fdf632a50825f1d581cdb4e90192c540bf55ad5c80c952fae7ba8fbb7023a8c7b751e868413cf89d5fc53b6625f66f408e7988213a440b7dca5a4d850f71680176662031fe50f79f27bb7c9db99b403748b0537fcbf62a30d37c073d963f836b6d0b05738740adec3fbd3d70c77cca670b0b633ff5cc109b697f0c9e7f1d8bc43a57f045d4b2d6866149b65cb5fcc8bbb6edd9b456e26a9a2d8b6431e054eb7b11327a684b55c63bc4ff2177c5aaf9ec2df241fcb705e971e28e556e76960277c63876ce591e5621a7b55785ea6ee98b8c10cc39ef53d57560e451e6c10616a0498341aec08a887bc09ba89b3a3d8264ce67f4facf457850980edd788bc7cd806b92bd9c0846db4bf65465c080ec59fb1ccee9f176c08cdc6289228943388d5acd03657ca347cdb1dd2d00f528fb471227c4290303999804f4ddcaf6cf29b621508fe348c192cdb0cae1dca1d4ba1b4276da66bf8fa5be5d0c17010c9239957b9188e53f49f8685a6125869f08e16d5494ec03d6a71f92b526b9543082e96c4628b54d2ad9a8c1831a72c17df8bc72637b17e9a7b05f91a1d96e973824b147a4c99ab2015a87bba5865961cc2d150ff936d3d02b9ca0b4df219be0a6ae9fc33ad9dc6fe56c742f527522c3577a623409caa98823c1e95abde72c17fb0ca318433df1cbd1e483ea6cf9b495230fd50cf9ae313db160c83a9f889b7a7539b21b55fb3b9547d0229e35210cff67cdfe662956d7aef5f0a75465841b2d142046a8588e4058b4890a64366bcb1924c49370478d5237667bba21382ce8f7bf701b97f50c3231797d48fe48ceee51f30baa3c6a6280d162a9f33dcd51bf4132b1d5e1ed961b320a6405468de0f71da87436c9908d133b86d769dd186d6c8a3d480857af62e3cf84d568e6a5ed1f4ca3b7298f07b518a9aa7852c5b1009dfb92532f1f30d6ffa63c88a14e43c05cd3fc79a1528c534f90f05302c43169983a93b817c4d5ab4ebfe922369f2e5b74032b183b44903df9a23ce54dd9d8dd5df0f2851b10ba64067585e84f80f51870a4d670a1125f6bdcabf91d33e8f6fc77de902ecb189c2ca5f06f681bb83804d9960ab62c68eed487f284aa2d60df57e698dd012b113546e7fa2a77cb392e85438e5ab33e70b232da09896ed64fdc4fa52aa6e79da322ddd435ab95983d41e68f634b56bfd22a9631cf1705782e806a36d9189275cd396be7a2ae2a7840a962b1b1194ebe5ce0881387fe77ff1edacc57c37448fd67e32bb5517d7c215e3f9416cfe52448b9ee4b82ff032e78f8dc93cb3c824773052697c89a03a64396311662007200d2d639b0276ab60b55cae454454c0f25520653fbc5453a48e5a0d7ce80c708620748ad0f12dda69ce3215ced00f47d510c88642456499404bed5b185c994d4b447df9b1f4bd30363362b7ffd62f8ccdaa89e4beb751578531a11fad924f1bbfd65d2b3ae9a23524bce73549bce06d033174c04c8e343edfae6ae0f0db514960f43dfd628424176640915798a6989965ac3b5924e8dce6537117bfd2cb81d5fbb11d2d9828ff8d0e84d473a3d6275816ae0715c68b2d9de0504586f012d46b54c2672dd905b90ab9071ba42c865234a4fb45ff8bdf292c4eaa4640b29ebea0381bc00cd97360f61bdb170b83ba567b421cdc79ed566560ac439ddb7130993c62cf1c71ec5a445de1dff4071fe839a810a67dc78651306109b39a69fffce78d2e93894f1a25e61dd558063da68ed978b4167f4458078917cf0cae4cf081b48ed0125f4cded7fca7b8462f3d848b74478b0df0f779358ca70bd2a261584353623e17043febd14d9b649f588858ba3d6b5b4a457b3d88206094471d2672e2663d0387459fb290471c99fe1584b30f899f2d23848e341078b5fe11b1b554d7324689cd1c8017f011ee98ff58a0946a385a943c0d8e249eca70f98b917f9f275c86d228ccb97f618f0af5e3ce9b32207e3bc681dbaaa35e51f4ea78c290353fa91becc21ab7d29a82fb9817e1c416a09789baa9962d7316d21c4c0660e98527e5409a94a281547d3349f18654d02cdb017ca03bb37d884e26ea37bfe783f22c768a07fe52c06c14fb9fed697a795074244badf349479a2e639c8be097df80a1cd2294c0e81bcbfc970afb2d4197cb7da6b7e314169c06839c20d202ed6b8ff3a24b559f8c1013076dc8bae89fc58243c2e6326dfc160483d678c2c611b48149ae2d42e50c9e5d98bbd6bd81bf3681f955c859a0ac4ca0e94b83ede2df3b63d3a9ed5e9d988e9f7e753841c955028e4f8e458a9e944172e084f56b269b55daac61406e49d6ea70aa4a677c7e2b078d48cb91c32f2d8d90e31e75f64f9d0c81864f30b299e6652ac0e73ecbcbd4c2500af46711e78fe168219bc04da650a689fadb1ba35af7063b83903c81b69c7d2b7cc56c5d4613788e0204b077254b11911891767e34ef2763f17b10cf2a65532f6a5b8030e33e4e882568b93feb9f1885f807032ad1c175d07e13bd1d3d7e88eddc4eea815b28dfe996f3235459656a8a99fc4383cebbaa778439ba473c1e0997ba82c3b8f12d26df3833f39758a0d3858bb5e26f419aab5b96e43a64a5adc1a0911ffd74f87fd499b5cbccbb18d481ed4a59583a8170bc4bdbd1025beabc927da0682ce4ea647e1c87c380e704d8b68110a20e44cabd63ff232fd5c2043b5d4b58a0e6cc16003586661c7c176a2631964296da7fe38e5776609e31eed03ed41832d87b1576a941b126cfb2c2826ba158156ecaf0f4190f9784136b7bdf77083ed63dee7c4bcb26c1886f8bc4fb255d882f1fc7768989a6d6d23e47a2e9907829620607896ceaeaea8746fcc0fe971e7a3f00792851ab64dc218273185a904419cf051b8301159194d8ec25a7ce4918197ddba3f302b03842e13e584b92cca149f3fe8fa48aae82788a2b12c3424b7431e012a42f6b7bd26d2f6a4d842f2f18c5a94637fe3b06983aa7cb2c54b88159b844feeb945413a4cb3f7a7f6faa0ecdce557c9d71692ce01ad5a689f4fb898049e27b2fad41248fbaaefe36b5c22dc4c6787433f8d9aecbce63621fdd07b48c8b233d0cb967a20f96d6d0a6760cbe7d54c69610e01e7d01a9a28c98747a3cdb9a1ed07ce0d265c43a867e135ad94fac2513021f958e549baa9ae76ac0dd3892513a584210415c809b03b11a9a8807933d7f38ebf58cb4c721dd1de9684234107c37da0da84d072bed52840433c9ed6f940878bb3a68d774be109c81d0b7f1eaba007b6050d83925a19f4a90a688c18d63c41699b6e754b05ea1da49098b06983118bea1707fad4a57e7b0a4a14e862b6a553a5fd398da14f78f01697e3c7fc87d606c62626134444884d38e736b3b28167c51c35eaa46264ff9f1b8ac286418ad32223047b7ef1f8de6dbf841298fa49c24fb642618d23856313e3c5e8273b00af87a0c42c801f475c77c2e241b9aed79119e0e93584d54af01efea926b4d69d313b9c277b29a596d6002b64a8c1ef1ebe0bbd3cef6a62665684e87d2536c4c8a56c49feb66ec5f7e026d99df769a12ac61b2203869b4874d7669d230a3a62b2135cc6cfa7bca80a6560f3dab222ae7712a1187981b4a251fc18ba7e4a2bd2b547d1aa87599ec07a030d45b9453847e75bb05d8e5ee74ac6376d16e21aa5d7d904bcd1324a76a01083016d8bd5723ef802e0fa8a24e04d5bbbd2f50771a4dabc11fab46a1a094af0b1e1a2fca2475f12f348b866e081127031b2a117ea005e173dd1ff3d65aac5988e4298ac23d4094fac54ca0474a035adb6f49453c83186b2ce8dd612141f7d3e2d4cc4a35e296a3fb779638f8a646160ce81ea75bde81d10860ad58825baf5a0f3b764ba3364d08744a2285224f1835d59377bd6d404205dfcf3a56f4be41b66b07a64061d5b4a7f6121f2aa3e2ae3ade8a258d4a7ed18832d3323cb4ba6ba8a1cc9255730158c0545d4c544be317e6e1c6a2a09b2ac6a4604a440d9dab9d40f4bc7022c254f974909bd88583c1ea0a61d827b3349870c3c9c6095c2ca9d385da9a9a969110434faa9b60388f52349e5629339362659621012a3a76e0bf4536737f03d0218a0e330d210a816737930925aa20005ba7f539b6d0aada2bbb208ad9e773a602beb72f20a74074b5492555f3889538ddd9947b42cdfb25008a6ecbb00fd613a12c05e85d8e54097bd70ce494d41c5f8845e4bb2236147c23e4c00529e3a962df46ec3b874934f8c78719165eb706c693ab9257aad61ec7e8590a3552d806d31ba5758acfec2d5342f3a70ba30378b315626c33fb18b7b9a97b160e08b8e60c51c0b5123a1eeb0e4b90c4d050829720fa56029fff3a5ae2484431558bfbb591076abf625eb58853a1ac7d9bc92b62929770eda68f7b82fb3cd6284356cda48a77d792a04acfec4b9625019e7fae2813d73df4c89f33b9263e452d9ab94ed60412d83845d76c96cc0c177796f63096dcf79caba4fe47bed4b89fb294b3b7b354ac5fdd0467297472af089e054f0fd409d1e63dd93b3adef32c701170b2cc3f97c5d888ce70b364dd3117f18ceafb31e593b442b3ecc78a9aa0bfbaabcc8164e3dfae20a69025eb13fa119764d02018af6107adba2a205f23462d3410c1a61b2b8be6de9f682a988d80f327a3786ef2b50dddbb89f6e3d899c1b2a3e1a01c501b0dc8275bb19b2f4926beb6b2938bf6cc59d580e2ec4ac5fc304a160a2fb6328503174da87e759e04049e26b13fb9ac38bd3b3564c75af319cc190c11ab63e95df886d53a3f510eef1676096a04731633b790a63ae5658ec65ec170b5a974b12afd91dcb6496e8c3f4ef830be6174803a6004d4c1d72e0f3ffb82ccaa4874df787a9804a4dceef6859232c2dd6b7598d107a3695576b3cfc8621fc082255c0357f073ea422905f1565db28348e57f6175a803fe3131bebd91ae7642f15508a99d2ac14b8739a3b8c817b656c496aaa0f216932854dea490fc3dee5cb4efc37b976107829905155262d02f8614f220904e184b2b720f4f39b3bce32a02fa3e3f6c174c1eb0067ea343aadba980ad12d2032978ac143a62c9214a10b3042292405def587d59f0487ed0283278997c2dea3078b958d982bd71bdc5b351da42bc69de9aa4c9eab27f4b5ab6234e79c1bf94ab55ab217d10ba493c3089036015087785beac8584065b4d0103970d752953800a1fb2015760d93d1a3cf7450fd90a0bca9d90095cbf75a4628d0357b708f0a2127c73985d68c3bd67132cd29899abe194336d42856ab9b34a66632a08ac867922771181501d5d924ab5c3ed1cd700d4510889de2a0e21b282da9927ebb735a98edd28a7ae811e6e1c24f88b623f465caf4ab3db5e2a4209f658199a9a9c0c9543cb41d140d2ce2d5d64f7755bb76f51210c660301311e6adb837d3d26b2b6c91258aff0a0b1bfbc87003efbdc396f66474f4db4374810d61e34fa06ab6a9abae13719346b251d4ed3132496721c0c017654d8bf0e2bb141d5271d445c46caefd9c343c63f67dee9c91ba2dc5d3ccbf6180e64c10ec6331d2c7432b98366b124607ed937e1ce50524b6052cecd60e8f7303852c12e51f336c11ed0443a66378b95f301df789017cd05a307686393ea48b1d8846cf8337428014c99a020025f52dd870ed213225ea5ea3e73e18313d808b9013c9e13c59e074c2362ce23b86d38b661c50af47470378e26db7ba9b3950d34151f31baf42e78f1c3ab42da969c4160b3b6b853d89f3189b55c8291bd0c1037ac1ed4677cbc5236b4031adcc1f3d0f20f584ac72c0eefd66487d0d624d60686d9bbb1dd81cc96be8bf0051318ddd6eeb52ceb37dbbc6fd9e43fbea43755dafc362ce491a1d41a2287bc628362ecd063a375c8f569800275173b838631c2227c815111120704fa2426de1e10b99fb6d037cd08423df7012641070366eeccb8f40cac26f5b5de66457f90821f6e34a51810830381446c9ceb8dd6a7daff8aa77998174b88600e745fccc825037d204ebdf5ff62860ad954b0565c804f5b448a7eee09775fd978f8bd207dd7bf0b92d8f55a506ebbb4226923e9f5cadc9c327a0494ca77808657e520912f0fae6b20bfe7d58052b6c9f02331bc506a72662c7e2d1247ad6253a623517d2815aaf0b2533f117b6717886aa82c6f0da451403700c0a695af3f76deba91f2c33eeb8024624359fed2893a4a880c69412acaa049fc2a880c0f3cc730858d4307555206a3f3124df343c2d7565858981211a906b1d4c7989b88249e5ea24787a31b062bc6534329813f247dda6be82704c3fb706d62fe131824498616b28292627585d684fc4039f575a28d2040eeffb9af7faff81c642e7207c78f8489fc3d4731ae9f3cdb7697148933249342accae260463897faab81b97fb8996b52fdaa0e", + "0xcec5070d609dd3497f72bde07fc96ba0878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x2f85f1e1378cb2d7b83adbaf0b5869c2878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x5f3e4907f716ac89b6347d15ececedca878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0xede8e4fdc3c8b556f0ce2f77fc2575e3d9764401941df7f707a47ba7db64a6ea": "0x00", + "0xf2794c22e353e9a839f12faab03a911bbdcb0c5143a8617ed38ae3810dd45bc6": "0x00000000", + "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0eed43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbe39b9d2792f8bd4c305000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0xbd2a529379475088d3e29a918cd47872878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbe0e0d969b0e48cab707000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9de1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x2099d7f109d6e535fb000bba623fd440878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x04be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0eed43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbe5153cb1f00942ff401000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0x160f30b56aafa7a26eec6068148674c69e398eac426144e0109a76ba5048d71b": "0x14000000", + "0x1cb6f36e027abb2091cfb5110ab5087f878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x8985776095addd4789fccbce8ca77b23ba7fb8745735dc3be2a2c61a72c39e78": "0x18d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a4890b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e1cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c", + "0x426e15054d267946093858132eb537f1ba7fb8745735dc3be2a2c61a72c39e78": "0x181cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc208eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a4890b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27de659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ed43a85541921049696d6f6e80d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f", + "0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbeb61f803a716bd3b906000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da95ecffd7b6c0f78751baa9d281e0bfa3a6d6f646c70792f74727372790000000000000000000000000000000000000000": "0x000000000000000001000000000000000010a5d4e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9e5e802737cce3a54b0bc9e3d3e6be26e306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20": "0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x3a2d6c9353500637d8f8e3e0fa0bb1c5878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da96f2e33376834a63c86a195bcf685aebbfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbebfb27f1eaef06bb903000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0x5f3e4907f716ac89b6347d15ececedca138e71612491192d68deab7e6f563fe1": "0x01000000", + "0x5f3e4907f716ac89b6347d15ececedcaac0a2cbf8e355f5ea6cb2de8727bfb0c": "0x54000000", + "0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01", + "0x426e15054d267946093858132eb537f105fe52c2045750c3c492ccdcf62e2b9c": "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0x160f30b56aafa7a26eec6068148674c651774b991db9164d0b92ebf8d30170a4": "0x08000000", + "0x5f3e4907f716ac89b6347d15ececedca5579297f4dfb9609e7e4c2ebab9ce40a": "0x04be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f", + "0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b": "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0x7c215a8bceb5e4dcd92f78e36a5fd0ff878d434d6125b40443fe11fd292d13a4": "0x00000001", + "0x160f30b56aafa7a26eec6068148674c69f22aa01729ed4ece3529364da1e677d": "0x0a000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9edeaa42c2163f68084a988529a0e2ec5e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e": "0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x426e15054d267946093858132eb537f1878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x2b06af9719ac64d755623cda8ddd9b94878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x5f3e4907f716ac89b6347d15ececedca487df464e44a534ba6b0cbb32407b587": "0x0000000000", + "0x7cda3cfa86b349fdafce4979b197118f71cd3068e6118bfb392b798317f63a89dd4e3f25f5378a6d90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22": "0x0490b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe220000c16ff2862300000000000000000000000000000000000000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba0ff3ae12770bea2e48d9bde7385e7a25f": "0x0000000002000000", + "0xede8e4fdc3c8b556f0ce2f77fc2575e313792e785168f725b60e2969c7fc2552": "0x02000000", + "0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbe39b9d2792f8bd4c305000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0x3db7a24cfdc9de785974746c14a99df9878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc4de1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f0f0000c16ff286230f0000c16ff286230000", + "0x5f3e4907f716ac89b6347d15ececedca0b6a45321efae92aea15e0740ec7afe7": "0x00000000", + "0xa2ce73642c549ae79c14f0a671cf45f9878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x7cda3cfa86b349fdafce4979b197118f71cd3068e6118bfb392b798317f63a89a647e755c30521d38eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48": "0x048eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480000c16ff2862300000000000000000000000000000000000000000000000000", + "0x89d139e01a5eb2256f222e5fc5dbe6b3878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0xd57bce545fb382c34570e5dfbf338f5e878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x26aa394eea5630e07c48ae0c9558cef7878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x5f3e4907f716ac89b6347d15ececedcaa141c4fe67c2d11f4a10c6aca7a79a04b4def25cfda6ef3a00000000": "0xfcffc06ff28623000000000000000000", + "0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbe598b52bf1678443909000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0x7cda3cfa86b349fdafce4979b197118fba7fb8745735dc3be2a2c61a72c39e78": "0x181cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c0000c16ff2862300000000000000000000000000000000000000000000000000306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc200000c16ff28623000000000000000000000000000000000000000000000000008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480000c16ff286230000000000000000000000000000000000000000000000000090b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe220000c16ff2862300000000000000000000000000000000000000000000000000d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0000c16ff2862300000000000000000000000000000000000000000000000000e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e0000c16ff2862300000000000000000000000000000000000000000000000000", + "0x2c5de123c468aef7f3ac2ab3a76f87ce878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96": "0x0000000000000000000000000000000000204aa9d1010000", + "0x2b06af9719ac64d755623cda8ddd9b949f99a2ce711f3a31b2fc05604c93f179": "0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0x160f30b56aafa7a26eec6068148674c6e41b6264a7cb4bfa399721dac9486ad1": "0x05000000", + "0xa37f719efab16103103a0c8c2c784ce1878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x492a52699edf49c972c21db794cfcf57ba7fb8745735dc3be2a2c61a72c39e78": "0x00", + "0xcec5070d609dd3497f72bde07fc96ba098ef7dc060436e4ed803af07632b89b65153cb1f00942ff401000000": "0x37f68164ff558fa9e50943800586a868c52bff83dc30603aa937ae02dc2fa57d01000000", + "0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbe9eb2dcce60f37a2702000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0x2099d7f109d6e535fb000bba623fd4409f99a2ce711f3a31b2fc05604c93f179": "0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0x426e15054d267946093858132eb537f1a47a9ff5cd5bf4d848a80a0b1a947dc3": "0x00000000000000000000000000000000", + "0x5f3e4907f716ac89b6347d15ececedcac29a0310e1bb45d20cace77ccb62c97d": "0x00e1f505", + "0x5f9cc45b7a00c5899361e1c6099678dc878d434d6125b40443fe11fd292d13a4": "0x03000100", + "0xc2261276cc9d1f8598ea4b6a74b15c2f878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0xf0c365c3cf59d671eb72da0e7a4113c4878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x5f9cc45b7a00c5899361e1c6099678dcd47cb8f5328af743ddfb361e7180e7fcbb1bdbcacd6ac9340000000000000000": "0x00000000", + "0x160f30b56aafa7a26eec6068148674c6018ca972549721220d90af177ede718332a5935f6edc617ae178fef9eb1e211fbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x204255494c54494e30840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179800000000000000000101640000000801000000040000008000000000", + "0x5c0d1176a568c1f92944340dbfed9e9c878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x7474449cca95dc5d0c00e71735a6d17d878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0xc2261276cc9d1f8598ea4b6a74b15c2f308ce9615de0775a82f8a94dc3d285a1": "0x01", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950c9b0c13125732d276175646980d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f", + "0xe3fd011a1ea758d2e1b46ed3cec43fc8878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x1cb6f36e027abb2091cfb5110ab5087fdc6b171b77304263c292cc3ea5ed31ef": "0x0100000000000000040000000000000001", + "0x3f1467a096bcd71a5b6a0c8155e20810878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x160f30b56aafa7a26eec6068148674c69e4b5099d95fd2dc017e4b63dd422dbed9c986912843223804000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9f3f619a1c2956443880db9cc9a13d058e860f1b1c7227f7c22602f53f15af80747814dffd839719731ee3bba6edc126c": "0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x5f3e4907f716ac89b6347d15ececedca308ce9615de0775a82f8a94dc3d285a1": "0x05", + "0xf2794c22e353e9a839f12faab03a911be2f6cb0456905c189bcb0458f9440f13": "0x00000000", + "0xed25f63942de25ac5253ba64b5eb64d1878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x7cda3cfa86b349fdafce4979b197118f71cd3068e6118bfb392b798317f63a894f58b588ac077bd5306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20": "0x04306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc200000c16ff2862300000000000000000000000000000000000000000000000000", + "0x5f3e4907f716ac89b6347d15ececedcaf7dad0317324aecae8744b87fc95f2f3": "0x00", + "0x160f30b56aafa7a26eec6068148674c6b04b1cafc8a27d9b578908a17470e55332a5935f6edc617ae178fef9eb1e211fbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d00000000be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f", + "0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbeb61f803a716bd3b906000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da98578796c363c105114787203e4d93ca6101191192fc877c24d725b337120fa3edc63d227bbc92705db1e2cb65f56981a": "0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x1cb6f36e027abb2091cfb5110ab5087faacf00b9b41fda7a9268821c2a2b3e4c": "0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0100000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b321d16960ce1d9190b61e2421cc60131e07379407fecc4b89eb7dbd287c2c781cfb1907a96947a3eb18e4f8e7198625": "0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0xaebd463ed9925c488c112434d61debc0878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x7cda3cfa86b349fdafce4979b197118f71cd3068e6118bfb392b798317f63a893e73123ebcdee9161cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c": "0x041cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c0000c16ff2862300000000000000000000000000000000000000000000000000", + "0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbeb4def25cfda6ef3a00000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da923a05cabf6d3bde7ca3ef0d11596b5611cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c": "0x000000000000000001000000000000000000e8890423c78a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x160f30b56aafa7a26eec6068148674c6878d434d6125b40443fe11fd292d13a4": "0x03000206", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f5537bdb2a1f626b6772616e8088dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x0000", + "0x7c215a8bceb5e4dcd92f78e36a5fd0ffdd2c92277bde9448eb8c7246ac873075": "0x000000000000000000000000000000eae111a54fe8107ea6c18985c4df7d9801", + "0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbe0e0d969b0e48cab707000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbe47ab1c010b3bff4908000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0xede8e4fdc3c8b556f0ce2f77fc2575e3878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x2099d7f109d6e535fb000bba623fd4404c014e6bf8b8c2c011e7290b85696bb3": "0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0xe3fd011a1ea758d2e1b46ed3cec43fc89e4b5099d95fd2dc017e4b63dd422dbebfb27f1eaef06bb903000000": "0x840279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x04be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f", + "0xfbc9f53700f75f681f234e70fb7241eb878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0x7c215a8bceb5e4dcd92f78e36a5fd0ff8d0838bdb05dd1aac26991aea8e078b2": "0x00000000000000000000000000000063a7e2be78898ba83824b0c0cc8dfb6001", + "0x5f3e4907f716ac89b6347d15ececedcab49a2738eeb30896aacb8b3fb46471bd": "0x01000000", + "0x5f9cc45b7a00c5899361e1c6099678dc8a2d09463effcc78a22d75b9cb87dffc": "0x0000000000000000", + "0x160f30b56aafa7a26eec6068148674c69d72629262c16cac33c68ea69d5560be": "0x28000000", + "0x7cda3cfa86b349fdafce4979b197118f878d434d6125b40443fe11fd292d13a4": "0x04000000", + "0x7cda3cfa86b349fdafce4979b197118f71cd3068e6118bfb392b798317f63a89518366b5b1bc7c99d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0x04d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0000c16ff2862300000000000000000000000000000000000000000000000000", + "0x1809d78346727a0ef58c0fa03bafa323878d434d6125b40443fe11fd292d13a4": "0x03000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195066b8d48da86b869b6261626580d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f", + "0x426e15054d267946093858132eb537f195999521c6c89cd80b677e53ce20f98c": "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0x5f3e4907f716ac89b6347d15ececedcaad811cd65a470ddc5f1d628ff0550982b4def25cfda6ef3a00000000": "0x00000000", + "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x0010854b1fa555810600000000000000", + "0xd5e1a2fa16732ce6906189438c0a82c6878d434d6125b40443fe11fd292d13a4": "0x03000000" + }, + "childrenDefault": {} + } + } +} \ No newline at end of file diff --git a/crates/phala-trie-storage/tests/data/state_roots.txt b/crates/phala-trie-storage/tests/data/state_roots.txt new file mode 100644 index 00000000..2c62f398 --- /dev/null +++ b/crates/phala-trie-storage/tests/data/state_roots.txt @@ -0,0 +1,51 @@ +0x2666df62d56f8c99219de47a0a1c94a4fd83347b586049593a8caa4f523699ca +0xda5690a8bd63b68be3afeb8b85d92bf8fb649a645b5f13839a7f0ba3ffb06873 +0xe585edf0e0327624446aed1da8bbdc649af9a7b37888d73b9824d1972d7b4f86 +0x17a41ee3bb99d6fce3183d72ecb4d2eee85508e2e08bc9f1a41ead0793e3b5b8 +0x30b649563847df3f891fb61cb0847220e3057162cefacb248b9cbd6b55288197 +0x98209400e661442e8b5783a0d8cb0b48891ee6b15e80bec1ce7bb3d3afc6a439 +0xc050ce3335428d0a1dde3f6d2acb7a166f68006d325819efa538bfcdc25cfd60 +0x0efcdddabf3ac49789ddfc0d254d005552af235a165011a6991f2d375a107bcb +0x3f87556acaac035cd7fedb5bb01056e1ff93cde1628d5e3a3488a09be88f4e64 +0x7c3a7912c6f5d0231e9d3e36f08cad2910b0ce64254acf1d29963ba20376bdfc +0xed6e2bc9ac5529d15ac62ee106ad61355ac35eac7c82e3dd71e40c480e95e939 +0xa0e5d69bf0fa0f462a4bd7d90c8e78f438a3671336aca9abfc1617fe643e5175 +0xf09e4df8fb8b2d1ccf337f82c1a51c3da28e5e7bc0d4456056727893bda33e5b +0x4fc1cd6977b80f8494aa0bcde9239da26210cf5457954d98199c66dc5798e92c +0x90ac3507ebdc1da74cf07fa15f4bb0ed049257979599d156c381bf1d12e160c0 +0x64b71979f2a7648b04b835dfdbc186c5cf7bad46cf9b0c5cf8f37ab08e0603f3 +0x7e4aa1a842b188ddf5fda00470d97e6677b92b257b215ca8bee9cbf2e8fd4c2e +0x2e1c78dc16bfe3f6e458c9874d6374d04744c2780d255c5a70b71c908d7de644 +0xed75994772fbe40b4a1ac96df12134a8c659c310bf83609c6a460cecccaed565 +0x5e077b7470233b2911ca46cbfc2a99cfd84f4d77bd3c5f004d5f548a56495016 +0xe258014e84cba9c1eb8e1671ad14b8022d2d886ab500710d227a981942782356 +0xba40650bc4d9013d23e63d41e0b2aec8a3f2789a3152e3c8015141f3ccc194f4 +0x7c07fbaed0dd3d60398a7b2fae3760fc5c7598c988dc6699d8eba04ee266a07d +0x8f2161273cd071dbaa926991ad3e400855b82ad7f4abd3e4b55cf88e63e0ada5 +0x5c7e7e640ad604b12ed7b9d860432c74f680e6cc204940a3d425fbcf250ca669 +0x6117a45d59e5d5b60667c37f1b6b953970b6dca2f9e62e7c3ecebdeed1c97e3a +0xf9dd3666cf65342974454a31c0d18a26c5abb08e3a93ee7c92b119667ddd4d32 +0x75a6a9e271076c13e476e5ff2ddb1e376261ecbd3562ea6f8b6a33bae9e7d84d +0xac4352fda29da05e961607c14ba95d060cb5fac410dc4f7e78cd33191538362d +0x375fcc92ef23adcbcdaf283b0963cd817c23b886f05c129e3d4b4e1ced34a1e9 +0x526fdebb56248c272713f45163f5a9eb6c52f87b55237d97f20439b07290642a +0x0a81096c10b5e946ae2706751c83f37dfe6803f861c9ba3676c7485af3c883f6 +0xae507a43961542e6bdbf608b7138d1fa4af109a642ec99916d0e7458ed0ba00a +0xa9a8e7bff2e6904b50d5b1e2dff5d65befc173e1f4c608bc7ccde258fdcbc5d3 +0x94cbfeb2cfbfc97d77570c8136ecf77abbd90f0a9e6ef61a542a6a3d596eb07c +0xf16cb78b0062666f3768c5e1cc4603153650bc604c6625101942985775dec467 +0x95147f31827527a97c5da270543fc1f6bf5108f690da8b6f286d19821f8598f4 +0x35ed296e5d6de237fabb7fe0ec710adb3fe924024c3750df6b2ba7e49f62f8af +0x63f833e7e4bf05c979341b366da5d67abd2712b1cd2daadd71ad27a71fac2877 +0xfe09e223c020ca1a2732aa927441a4850c545b2b98c3e62b72917252578a15d2 +0x34b9a85b31c0b743f6a91d509193bde8c734a38e2358662078a24016da989c54 +0x8d7119411626d7ae88a31ff84f1419bef3880fd2b99152c4c65171edfd74baf2 +0xbe795dd173a5a430270dda35e51f57b213a7bdb8834dd8edac5fa72e3b60542e +0x7a4ca77521d106bf12142163c5cf0b475324eeb465cd1ea78ee9ac40a7b4f486 +0x070a851b59ab9c44794a9326ee200bfaf46eade36727f22566b31c5ca3cf74aa +0x2347a3b386289deb6a6dcc3182bc343c08f9eba533a9351990a974bec19e5d78 +0x5e8cc62a9676dec7d240a0b9f7ea236beb023edcc94afd9001a4f9e68d64feb2 +0x9e96b5d11979742bc4cfd230ddf7bd8ebbe053fcd2d2cd60c07a9d6b2fa288b8 +0xa5b2cd8d8a51120a0b3502cf19f7849d0dacd0f43ee3f6e0e399903c9af57b8d +0x6a8f9ee05e984fc696ac17b2d2a699f7dc334fbc6091714b9708281feab72b25 +0xf06b3515a28e1147d5aefc868816f2c915344c0e20210c73c8c1fa3a87ff627d diff --git a/crates/phala-trie-storage/tests/test_state_root.rs b/crates/phala-trie-storage/tests/test_state_root.rs new file mode 100644 index 00000000..7b5ba3d6 --- /dev/null +++ b/crates/phala-trie-storage/tests/test_state_root.rs @@ -0,0 +1,126 @@ +use serde::{Deserialize, Serialize}; +use sp_core::Hasher; +use sp_runtime::traits::Hash; +use sp_trie::trie_types::Layout; +use sp_trie::TrieConfiguration as _; +use std::collections::HashMap; +use std::path::PathBuf; +use phala_trie_storage::*; + +#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] +pub struct NativeBlakeTwo256; + +impl Hasher for NativeBlakeTwo256 { + type Out = sp_core::H256; + type StdHasher = hash256_std_hasher::Hash256StdHasher; + const LENGTH: usize = 32; + + fn hash(s: &[u8]) -> Self::Out { + sp_core::hashing::blake2_256(s).into() + } +} + +impl Hash for NativeBlakeTwo256 { + type Output = sp_core::H256; + + fn trie_root(input: Vec<(Vec, Vec)>) -> Self::Output { + Layout::::trie_root(input) + } + + fn ordered_trie_root(input: Vec>) -> Self::Output { + Layout::::ordered_trie_root(input) + } +} + +/// Storage key. +#[derive(Serialize, Deserialize, Clone, Debug)] +#[serde(crate = "serde")] +pub struct TestStorageKey(#[serde(with = "impl_serde::serialize")] Vec); + +/// Storage value. +type TestStorageValue = TestStorageKey; + +/// In memory array of storage values. +type TestStorageCollection = Vec<(TestStorageKey, Option)>; + +/// In memory arrays of storage values for multiple child tries. +type TestChildStorageCollection = Vec<(TestStorageKey, TestStorageCollection)>; + +#[derive(Serialize, Deserialize, Clone, Debug)] +#[serde(crate = "serde")] +struct RpcResponse { + result: Vec, +} + +#[derive(Serialize, Deserialize, Clone, Debug)] +#[serde(rename_all = "camelCase", crate = "serde")] +struct Changes { + main_storage_changes: TestStorageCollection, + child_storage_changes: TestChildStorageCollection, +} + +fn data_dir() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests") + .join("data") +} + +fn load_roots() -> Vec { + let json_str = std::fs::read_to_string(data_dir().join("state_roots.txt")).unwrap(); + json_str.split_whitespace().map(|v| v.into()).collect() +} + +fn load_changes() -> Vec { + let json_str = std::fs::read_to_string(data_dir().join("changes.json")).unwrap(); + let response: RpcResponse = serde_json::from_str(json_str.as_str()).unwrap(); + let changes = response.result; + changes +} + +fn load_genesis_trie() -> TrieStorage { + let mut trie: TrieStorage = Default::default(); + + let json_str = std::fs::read_to_string(data_dir().join("db-0.json")).unwrap(); + let json_value: serde_json::Value = serde_json::from_str(&json_str).unwrap(); + let kvs: HashMap = + serde_json::from_value(json_value["genesis"]["raw"]["top"].clone()).unwrap(); + let decoded = kvs + .iter() + .map(|(k, v)| (hex::decode(&k[2..]).unwrap(), hex::decode(&v[2..]).unwrap())); + trie.load(decoded); + trie +} + +fn map_storage_collection(collection: TestStorageCollection) -> StorageCollection { + collection + .into_iter() + .map(|(k, v)| (k.0, v.map(|v| v.0))) + .collect() +} + +#[test] +fn test_genesis_root() { + let trie = load_genesis_trie(); + let roots = load_roots(); + assert_eq!(format!("{:?}", trie.root()), roots[0]); +} + +#[test] +fn test_apply_main_changes() { + let mut trie = load_genesis_trie(); + let changes = load_changes(); + let roots = load_roots(); + + for (number, change) in changes.into_iter().skip(1).take(30).enumerate() { + let main_storage_changes = map_storage_collection(change.main_storage_changes); + let child_storage_changes: Vec<_> = change + .child_storage_changes + .into_iter() + .map(|(k, v)| (k.0, map_storage_collection(v))) + .collect(); + + let (root, trans) = trie.calc_root_if_changes(&main_storage_changes, &child_storage_changes); + trie.apply_changes(root, trans); + assert_eq!(format!("{:?}", trie.root()), roots[number + 1]); + } +} diff --git a/crates/phala-types/Cargo.toml b/crates/phala-types/Cargo.toml new file mode 100644 index 00000000..566edc91 --- /dev/null +++ b/crates/phala-types/Cargo.toml @@ -0,0 +1,40 @@ +[package] +name = "phala-types" +version = "0.3.0" +authors = ["h4x3rotab "] +edition = "2018" + +[dependencies] +hex = { version = "0.4", default-features = false, features = ["alloc"] } +serde = { version = "1.0.101", default-features = false, optional = true } +codec = { package = "parity-scale-codec", version = "2.2", default-features = false, features = ["full"] } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false, optional = true } + +phala-trie-storage = { path = "../../crates/phala-trie-storage", default-features = false, optional = true } +phala-mq = { path = "../../crates/phala-mq", default-features = false } +prpc = { path = "../../crates/prpc", default-features = false } + +[features] +default = ["std", "pruntime", "enable_serde"] +std = [ + "serde/std", + "codec/std", + "full_crypto", + "sp-runtime/std", + "phala-trie-storage/serde", +] +enable_serde = [ + "serde/derive", + "serde/alloc", +] +pruntime = [ + "sp-runtime", + "phala-trie-storage", +] +sgx = [ + "full_crypto", +] +full_crypto = [ + "sp-core/full_crypto", +] diff --git a/crates/phala-types/src/contract.rs b/crates/phala-types/src/contract.rs new file mode 100644 index 00000000..fd0051a0 --- /dev/null +++ b/crates/phala-types/src/contract.rs @@ -0,0 +1,76 @@ +use alloc::string::String; +use alloc::vec::Vec; +use alloc::format; +use codec::{Decode, Encode}; + +pub use phala_mq::{contract_id256 as id256, ContractId}; + +pub type ContractId32 = u32; +pub const SYSTEM: ContractId32 = 0; +pub const DATA_PLAZA: ContractId32 = 1; +pub const BALANCES: ContractId32 = 2; +pub const ASSETS: ContractId32 = 3; +pub const WEB3_ANALYTICS: ContractId32 = 4; +pub const DIEM: ContractId32 = 5; +pub const SUBSTRATE_KITTIES: ContractId32 = 6; +pub const BTC_LOTTERY: ContractId32 = 7; + +/// Contract query request parameters, to be encrypted. +#[derive(Encode, Decode, Debug)] +pub struct ContractQuery { + pub head: ContractQueryHead, + /// The request data. + pub data: Data, +} + +/// Contract query head +#[derive(Encode, Decode, Debug)] +pub struct ContractQueryHead { + /// The contract id. + pub id: ContractId, + /// A random byte array generated by the client. + pub nonce: [u8; 32], +} + +/// Contract query response, to be encrypted. +#[derive(Encode, Decode, Debug)] +pub struct ContractQueryResponse { + /// The nonce from the client. + pub nonce: [u8; 32], + /// The query result. + pub result: Data, +} + +pub struct Data(pub Vec); + +impl Encode for Data { + fn size_hint(&self) -> usize { + self.0.len() + } + fn encode_to(&self, dest: &mut T) { + dest.write(&self.0) + } +} + +/// Contract query error define +#[derive(Encode, Decode, Debug)] +pub enum ContractQueryError { + /// Signature is invalid. + InvalidSignature, + /// No such contract. + ContractNotFound, + /// Unable to decode the request data. + DecodeError, + /// Other errors reported during the contract query execution. + OtherError(String), +} + +impl From for prpc::server::Error { + fn from(err: ContractQueryError) -> Self { + Self::ContractQueryError(alloc::format!("{:?}", err)) + } +} + +pub fn command_topic(id: ContractId) -> Vec { + format!("phala/contract/{}/command", hex::encode(&id)).as_bytes().to_vec() +} diff --git a/crates/phala-types/src/lib.rs b/crates/phala-types/src/lib.rs new file mode 100644 index 00000000..9b52c044 --- /dev/null +++ b/crates/phala-types/src/lib.rs @@ -0,0 +1,625 @@ +#![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; + +pub mod contract; + +use alloc::vec::Vec; +use codec::{Decode, Encode}; +use core::convert::{TryFrom, TryInto}; +use core::fmt::Debug; +use sp_core::H256; + +// Messages: Phase Wallet + +pub mod messaging { + use alloc::string::String; + use alloc::vec::Vec; + use codec::{Decode, Encode}; + use core::fmt::Debug; + use sp_core::U256; + + #[cfg(feature = "enable_serde")] + use serde::{Deserialize, Serialize}; + + use super::{EcdhPublicKey, MasterPublicKey, WorkerPublicKey}; + use crate::contract; + pub use phala_mq::types::*; + pub use phala_mq::{bind_contract32, bind_topic}; + + // TODO.kevin: reuse the Payload in secret_channel.rs. + #[derive(Encode, Decode, Debug)] + pub enum CommandPayload { + Plain(T), + } + + // TODO.kevin: + // We should create a crate for each contract just like developing apps. + // Then the following types should be put in their own crates. + // Messages: Lottery + + bind_topic!(Lottery, b"^phala/BridgeTransfer"); + #[derive(Encode, Decode, Clone, Debug)] + pub enum Lottery { + SignedTx { + round_id: u32, + token_id: Vec, + tx: Vec, + }, + BtcAddresses { + address_set: Vec>, + }, + } + + #[derive(Encode, Decode, Debug, Clone)] + pub enum LotteryPalletCommand { + NewRound { + round_id: u32, + total_count: u32, + winner_count: u32, + }, + OpenBox { + round_id: u32, + token_id: u32, + btc_address: Vec, + }, + } + + #[derive(Encode, Decode, Debug)] + pub enum LotteryUserCommand { + SubmitUtxo { + round_id: u32, + address: String, + utxo: (Txid, u32, u64), + }, + SetAdmin { + new_admin: String, + }, + } + + bind_contract32!(LotteryCommand, contract::BTC_LOTTERY); + #[derive(Encode, Decode, Debug)] + pub enum LotteryCommand { + UserCommand(LotteryUserCommand), + PalletCommand(LotteryPalletCommand), + } + + impl LotteryCommand { + pub fn open_box(round_id: u32, token_id: u32, btc_address: Vec) -> Self { + Self::PalletCommand(LotteryPalletCommand::OpenBox { + round_id, + token_id, + btc_address, + }) + } + + pub fn new_round(round_id: u32, total_count: u32, winner_count: u32) -> Self { + Self::PalletCommand(LotteryPalletCommand::NewRound { + round_id, + total_count, + winner_count, + }) + } + } + + pub type Txid = [u8; 32]; + + // Messages for Balances + + bind_contract32!(BalancesCommand, contract::BALANCES); + #[derive(Debug, Clone, Encode, Decode)] + pub enum BalancesCommand { + Transfer { dest: AccountId, value: Balance }, + TransferToChain { dest: AccountId, value: Balance }, + TransferToTee { who: AccountId, amount: Balance }, + } + + impl BalancesCommand { + pub fn transfer(dest: AccountId, value: Balance) -> Self { + Self::Transfer { dest, value } + } + + pub fn transfer_to_chain(dest: AccountId, value: Balance) -> Self { + Self::TransferToChain { dest, value } + } + } + + bind_topic!(BalancesTransfer, b"^phala/balances/transfer"); + #[derive(Encode, Decode)] + pub struct BalancesTransfer { + pub dest: AccountId, + pub amount: Balance, + } + + // Messages for Assets + + bind_contract32!(AssetCommand, contract::ASSETS); + #[derive(Encode, Decode, Debug)] + pub enum AssetCommand { + Issue { + symbol: String, + total: Balance, + }, + Destroy { + id: AssetId, + }, + Transfer { + id: AssetId, + dest: AccountId, + value: Balance, + index: u64, + }, + } + + pub type AssetId = u32; + + // Messages for Web3Analytics + + bind_contract32!(Web3AnalyticsCommand, contract::WEB3_ANALYTICS); + #[derive(Encode, Decode, Debug)] + pub enum Web3AnalyticsCommand { + SetConfiguration { skip_stat: bool }, + } + + // Messages for diem + + bind_contract32!(DiemCommand, contract::DIEM); + #[derive(Encode, Decode, Debug)] + pub enum DiemCommand { + /// Sets the whitelisted accounts, in bcs encoded base64 + AccountInfo { + account_info_b64: String, + }, + /// Verifies a transactions + VerifyTransaction { + account_address: String, + transaction_with_proof_b64: String, + }, + /// Sets the trusted state. The owner can only initialize the bridge with the genesis state + /// once. + SetTrustedState { + trusted_state_b64: String, + chain_id: u8, + }, + VerifyEpochProof { + ledger_info_with_signatures_b64: String, + epoch_change_proof_b64: String, + }, + + NewAccount { + seq_number: u64, + }, + TransferXUS { + to: String, + amount: u64, + }, + } + + // Messages for Kitties + + bind_contract32!(KittiesCommand, contract::SUBSTRATE_KITTIES); + #[derive(Encode, Decode, Debug)] + pub enum KittiesCommand { + /// Pack the kitties into the corresponding blind boxes + Pack {}, + /// Transfer the box to another account, need to judge if the sender is the owner + Transfer { dest: String, blind_box_id: String }, + /// Open the specific blind box to get the kitty + Open { blind_box_id: String }, + /// Created a new blind box + Created(AccountId, Hash), + } + + bind_topic!(KittyTransfer, b"^phala/kitties/transfer"); + #[derive(Debug, Clone, Encode, Decode, PartialEq)] + pub struct KittyTransfer { + pub dest: AccountId, + pub kitty_id: Vec, + } + + /// A fixed point number with 64 integer bits and 64 fractional bits. + pub type U64F64Bits = u128; + + // Messages: System + #[derive(Encode, Decode)] + pub struct WorkerEventWithKey { + pub pubkey: WorkerPublicKey, + pub event: WorkerEvent, + } + + impl Debug for WorkerEventWithKey { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + let pubkey = hex::encode(&self.pubkey.0); + f.debug_struct("WorkerEventWithKey") + .field("pubkey", &pubkey) + .field("event", &self.event) + .finish() + } + } + + #[derive(Encode, Decode, Debug)] + pub struct WorkerInfo { + pub confidence_level: u8, + } + + #[derive(Encode, Decode, Debug)] + pub enum WorkerEvent { + /// pallet-registry --> worker + /// Indicate a worker register succeeded. + Registered(WorkerInfo), + /// pallet-registry --> worker + /// When a worker register succeed, the chain request the worker to benchmark. + /// duration: Number of blocks the benchmark to keep on. + BenchStart { duration: u32 }, + /// pallet-registry --> worker + /// The init bench score caculated by pallet. + BenchScore(u32), + /// pallet-mining --> worker + /// When a miner start to mine, push this message to the worker to start the benchmark task. + /// session_id: Generated by pallet. Each mining session should have a unique session_id. + MiningStart { + session_id: u32, + init_v: U64F64Bits, + init_p: u32, + }, + /// pallet-mining --> worker + /// When a miner entered CoolingDown state, push this message to the worker, so that it can stop the + /// benchmark task. + MiningStop, + /// pallet-mining --> worker + /// When a miner entered Unresponsive state, push this message to the worker to suppress the subsequent + /// heartbeat responses. + MiningEnterUnresponsive, + /// pallet-mining --> worker + /// When a miner recovered to MiningIdle state from Unresponsive, push this message to the worker to + /// resume the subsequent heartbeat responses. + MiningExitUnresponsive, + } + + bind_topic!(SystemEvent, b"phala/system/event"); + #[derive(Encode, Decode, Debug)] + pub enum SystemEvent { + WorkerEvent(WorkerEventWithKey), + HeartbeatChallenge(HeartbeatChallenge), + } + + impl SystemEvent { + pub fn new_worker_event(pubkey: WorkerPublicKey, event: WorkerEvent) -> SystemEvent { + SystemEvent::WorkerEvent(WorkerEventWithKey { pubkey, event }) + } + } + + #[derive(Encode, Decode, Debug, Default, Clone, PartialEq, Eq)] + pub struct HeartbeatChallenge { + pub seed: U256, + pub online_target: U256, + } + + bind_topic!(MiningReportEvent, b"phala/mining/report"); + #[derive(Encode, Decode, Clone, Debug)] + pub enum MiningReportEvent { + Heartbeat { + /// The mining session id. + session_id: u32, + /// The challenge block number. + challenge_block: u32, + /// The challenge block timestamp. + challenge_time: u64, + /// Benchmark iterations since mining_start_time. + iterations: u64, + }, + } + + bind_topic!(MiningInfoUpdateEvent, b"^phala/mining/update"); + #[derive(Encode, Decode, Clone, Debug, PartialEq, Eq)] + pub struct MiningInfoUpdateEvent { + /// The block emiting this message. + pub block_number: BlockNumber, + /// The timestamp of the block emiting this message. + pub timestamp_ms: u64, + /// Workers that do not responce the heartbeat challenge in time. Each delay only report once. + pub offline: Vec, + /// Workers that received a heartbeat in offline state. + pub recovered_to_online: Vec, + /// V update and payout info + pub settle: Vec, + // NOTE: Take care of the is_empty method when adding fields + } + + impl MiningInfoUpdateEvent { + pub fn new(block_number: BlockNumber, timestamp_ms: u64) -> Self { + Self { + block_number, + timestamp_ms, + offline: Default::default(), + recovered_to_online: Default::default(), + settle: Default::default(), + } + } + + pub fn is_empty(&self) -> bool { + self.offline.is_empty() && self.settle.is_empty() && self.recovered_to_online.is_empty() + } + } + + #[derive(Encode, Decode, Clone, Debug, PartialEq, Eq)] + pub struct SettleInfo { + pub pubkey: WorkerPublicKey, + pub v: U64F64Bits, + pub payout: U64F64Bits, + pub treasury: U64F64Bits, + } + + // Messages: Gatekeeper launch + bind_topic!(GatekeeperLaunch, b"phala/gatekeeper/launch"); + #[derive(Encode, Decode, Clone, Debug, PartialEq, Eq)] + pub enum GatekeeperLaunch { + FirstGatekeeper(NewGatekeeperEvent), + MasterPubkeyOnChain(MasterPubkeyEvent), + } + + impl GatekeeperLaunch { + pub fn first_gatekeeper( + pubkey: WorkerPublicKey, + ecdh_pubkey: EcdhPublicKey, + ) -> GatekeeperLaunch { + GatekeeperLaunch::FirstGatekeeper(NewGatekeeperEvent { + pubkey, + ecdh_pubkey, + }) + } + + pub fn master_pubkey_on_chain(master_pubkey: MasterPublicKey) -> GatekeeperLaunch { + GatekeeperLaunch::MasterPubkeyOnChain(MasterPubkeyEvent { master_pubkey }) + } + } + + #[derive(Encode, Decode, Clone, Debug, PartialEq, Eq)] + pub struct NewGatekeeperEvent { + /// The public key of registered gatekeeper + pub pubkey: WorkerPublicKey, + /// The ecdh public key of registered gatekeeper + pub ecdh_pubkey: EcdhPublicKey, + } + + #[derive(Encode, Decode, Clone, Debug, PartialEq, Eq)] + pub struct MasterPubkeyEvent { + pub master_pubkey: MasterPublicKey, + } + + // Messages: Gatekeeper change + bind_topic!(GatekeeperChange, b"phala/gatekeeper/change"); + #[derive(Encode, Decode, Clone, Debug, PartialEq, Eq)] + pub enum GatekeeperChange { + GatekeeperRegistered(NewGatekeeperEvent), + } + + impl GatekeeperChange { + pub fn gatekeeper_registered( + pubkey: WorkerPublicKey, + ecdh_pubkey: EcdhPublicKey, + ) -> GatekeeperChange { + GatekeeperChange::GatekeeperRegistered(NewGatekeeperEvent { + pubkey, + ecdh_pubkey, + }) + } + } + + // Messages: Distribution of master key and contract keys + bind_topic!(KeyDistribution, b"phala/gatekeeper/key"); + #[derive(Encode, Decode, Clone, Debug, PartialEq, Eq)] + pub enum KeyDistribution { + MasterKeyDistribution(DispatchMasterKeyEvent), + } + + impl KeyDistribution { + pub fn master_key_distribution( + dest: WorkerPublicKey, + ecdh_pubkey: EcdhPublicKey, + encrypted_master_key: Vec, + iv: AeadIV, + ) -> KeyDistribution { + KeyDistribution::MasterKeyDistribution(DispatchMasterKeyEvent { + dest, + ecdh_pubkey, + encrypted_master_key, + iv, + }) + } + } + + type AeadIV = [u8; 12]; + #[derive(Encode, Decode, Clone, Debug, PartialEq, Eq)] + pub struct DispatchMasterKeyEvent { + /// The target to dispatch master key + pub dest: WorkerPublicKey, + /// The ecdh public key of master key source + pub ecdh_pubkey: EcdhPublicKey, + /// Master key encrypted with aead key + pub encrypted_master_key: Vec, + /// Aead IV + pub iv: AeadIV, + } + + // Messages: Gatekeeper + bind_topic!(GatekeeperEvent, b"phala/gatekeeper/event"); + #[derive(Encode, Decode, Clone, Debug, PartialEq, Eq)] + pub enum GatekeeperEvent { + NewRandomNumber(RandomNumberEvent), + TokenomicParametersChanged(TokenomicParameters), + } + + impl GatekeeperEvent { + pub fn new_random_number( + block_number: u32, + random_number: RandomNumber, + last_random_number: RandomNumber, + ) -> GatekeeperEvent { + GatekeeperEvent::NewRandomNumber(RandomNumberEvent { + block_number, + random_number, + last_random_number, + }) + } + } + + pub type RandomNumber = [u8; 32]; + #[derive(Encode, Decode, Clone, Debug, PartialEq, Eq)] + pub struct RandomNumberEvent { + pub block_number: u32, + pub random_number: RandomNumber, + pub last_random_number: RandomNumber, + } + + #[cfg_attr(feature = "enable_serde", derive(Serialize, Deserialize))] + #[derive(Encode, Decode, Clone, Debug, PartialEq, Eq)] + pub struct TokenomicParameters { + // V calculation + pub pha_rate: U64F64Bits, + pub rho: U64F64Bits, + pub budget_per_block: U64F64Bits, + pub v_max: U64F64Bits, + pub cost_k: U64F64Bits, + pub cost_b: U64F64Bits, + pub slash_rate: U64F64Bits, + // Payout + pub treasury_ratio: U64F64Bits, + pub heartbeat_window: u32, + // Ve calculation + pub rig_k: U64F64Bits, + pub rig_b: U64F64Bits, + pub re: U64F64Bits, + pub k: U64F64Bits, + // Slash calculation + pub kappa: U64F64Bits, + } +} + +// Types used in storage + +#[derive(Encode, Decode, PartialEq, Eq, Debug, Clone)] +pub enum WorkerStateEnum { + Empty, + Free, + Gatekeeper, + MiningPending, + Mining(BlockNumber), + MiningStopping, +} + +impl Default for WorkerStateEnum { + fn default() -> Self { + WorkerStateEnum::Empty + } +} + +#[derive(Encode, Decode, Debug, Default, Clone)] +pub struct WorkerInfo { + // identity + pub machine_id: Vec, + pub pubkey: Vec, + pub last_updated: u64, + // mining + pub state: WorkerStateEnum, + // performance + pub score: Option, + // confidence-level + pub confidence_level: u8, + // version + pub runtime_version: u32, +} + +#[derive(Encode, Decode, Default)] +pub struct StashInfo { + pub controller: AccountId, + pub payout_prefs: PayoutPrefs, +} + +#[derive(Encode, Decode, Default)] +pub struct PayoutPrefs { + pub commission: u32, + pub target: AccountId, +} + +#[derive(Encode, Decode, Debug, Default, Clone)] +pub struct Score { + pub overall_score: u32, + pub features: Vec, +} + +type MachineId = Vec; +pub type Sr25519Signature = sp_core::sr25519::Signature; +pub type WorkerPublicKey = sp_core::sr25519::Public; +pub type ContractPublicKey = sp_core::sr25519::Public; +pub type MasterPublicKey = sp_core::sr25519::Public; +#[derive(Encode, Decode, Clone, Debug, Eq, PartialEq)] +/// Sr25519 public key +pub struct EcdhPublicKey(pub [u8; 32]); + +impl Default for EcdhPublicKey { + fn default() -> Self { + EcdhPublicKey([0_u8; 32]) + } +} + +impl TryFrom<&[u8]> for EcdhPublicKey { + type Error = (); + fn try_from(raw: &[u8]) -> Result { + let raw: [u8; 32] = raw.try_into().map_err(|_| ())?; + Ok(EcdhPublicKey(raw)) + } +} + +#[derive(Encode, Decode, Debug, Clone, PartialEq, Eq)] +pub struct WorkerRegistrationInfo { + pub version: u32, + pub machine_id: MachineId, + pub pubkey: WorkerPublicKey, + pub ecdh_pubkey: EcdhPublicKey, + pub genesis_block_hash: H256, + pub features: Vec, + pub operator: Option, +} + +#[derive(Encode, Decode, Debug, Default)] +pub struct RoundInfo { + pub round: u32, + pub start_block: BlockNumber, +} + +#[derive(Encode, Decode, Debug, Default)] +pub struct StashWorkerStats { + pub slash: Balance, + pub compute_received: Balance, + pub online_received: Balance, +} + +#[derive(Encode, Decode, Debug, Default, Clone, PartialEq, Eq)] +pub struct RoundStats { + pub round: u32, + pub online_workers: u32, + pub compute_workers: u32, + /// The targeted online reward counts in fraction (base: 100_000) + pub frac_target_online_reward: u32, + pub total_power: u32, + /// The targeted compute reward counts in fraction (base: 100_000) + pub frac_target_compute_reward: u32, +} + +#[derive(Encode, Decode, Debug, Default, Clone, PartialEq, Eq)] +pub struct MinerStatsDelta { + pub num_worker: i32, + pub num_power: i32, +} + +#[derive(Encode, Decode, Debug, Clone, PartialEq, Eq)] +pub enum PayoutReason { + OnlineReward, + ComputeReward, +} + +impl Default for PayoutReason { + fn default() -> Self { + PayoutReason::OnlineReward + } +} diff --git a/crates/prpc/Cargo.toml b/crates/prpc/Cargo.toml new file mode 100644 index 00000000..9a7e9ec7 --- /dev/null +++ b/crates/prpc/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "prpc" +version = "0.1.0" +edition = "2018" + +[dependencies] +async-trait = "0.1.50" +derive_more = "0.99.16" +prost = { version = "0.8.0", default-features = false, features = [ "prost-derive" ] } +anyhow = { version = "1.0.42", default-features = false } +parity-scale-codec = { version = "2.2", default-features = false } diff --git a/crates/prpc/src/lib.rs b/crates/prpc/src/lib.rs new file mode 100644 index 00000000..999aaaa9 --- /dev/null +++ b/crates/prpc/src/lib.rs @@ -0,0 +1,112 @@ +#![no_std] +extern crate alloc; + +use alloc::boxed::Box; +use alloc::string::String; +use alloc::vec::Vec; +use async_trait::async_trait; +use derive_more::Display; +use prost::DecodeError; + +pub use prost::Message; + +pub mod server { + use super::*; + use alloc::string::ToString; + use parity_scale_codec::Error as ScaleCodecErr; + + /// Error for server side RPC handlers. Finally, this error will be wrapped in a `ProtoError`. + #[derive(Display, Debug)] + pub enum Error { + /// The requesting RPC method is not recognized + NotFound, + /// Failed to decode the request parameters + DecodeError(DecodeError), + /// Some error occurred when handling the request + AppError(String), + /// Error for contract query + #[display(fmt = "ContractQueryError({})", .0)] + ContractQueryError(String), + } + + impl From for Error { + fn from(e: DecodeError) -> Self { + Self::DecodeError(e) + } + } + + impl From for anyhow::Error { + fn from(error: Error) -> Self { + Self::msg(error) + } + } + + impl From for Error { + fn from(e: ScaleCodecErr) -> Self { + Self::DecodeError(DecodeError::new(e.to_string())) + } + } + + + /// The final Error type of RPCs to be serialized to protobuf. + #[derive(Display, Message)] + pub struct ProtoError { + #[prost(string, tag = "1")] + pub message: ::prost::alloc::string::String, + } + + impl ProtoError { + pub fn new(message: impl Into) -> ProtoError { + ProtoError { + message: message.into(), + } + } + } +} + +pub mod client { + use super::*; + + /// The Error type for the generated client-side RPCs. + #[derive(Display, Debug)] + pub enum Error { + /// Failed to decode the response from the server. + DecodeError(DecodeError), + /// The error returned by the server. + ServerError(super::server::ProtoError), + /// Other errors sush as networking error. + RpcError(String), + } + + impl From for Error { + fn from(e: DecodeError) -> Self { + Self::DecodeError(e) + } + } + + impl From for anyhow::Error { + fn from(error: Error) -> Self { + Self::msg(error) + } + } + + /// Trait for RPC client to implement the underlying data transport. + /// Required by the generated RPC client. + #[async_trait] + pub trait RequestClient { + async fn request(&self, path: &str, body: Vec) -> Result, Error>; + } +} + +pub mod codec { + use super::*; + + pub use parity_scale_codec as scale; + + pub fn encode_message_to_vec(msg: &impl Message) -> Vec { + let mut buf = Vec::with_capacity(msg.encoded_len()); + + msg.encode_raw(&mut buf); + buf + } +} diff --git a/pallets/phala/Cargo.toml b/pallets/phala/Cargo.toml new file mode 100644 index 00000000..14888316 --- /dev/null +++ b/pallets/phala/Cargo.toml @@ -0,0 +1,74 @@ +[package] +authors = ['Phala Network'] +edition = '2018' +name = 'phala-pallets' +version = "3.2.6" +license = "Apache 2.0" +homepage = "https://phala.network/" +repository = "https://github.com/Phala-Network/phala-blockchain" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +codec = { package = "parity-scale-codec", version = "2.2", default-features = false, features = ["derive", "max-encoded-len"] } +primitive-types = { version = "0.10", default-features = false, features = ["codec", "byteorder"] } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false } +pallet-randomness-collective-flip = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false, optional = true } +log = { version = "0.4.14", default-features = false } + +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false } + +phala-types = { path = "../../crates/phala-types", default-features = false } +chrono = { version = "0.4", default-features = false } +untrusted = { version = "0.7" } +base64 = { version = "0.11", default-features = false, features = ["alloc"] } +hex = { version = "0.4", default-features = false } +serde_json = { version = "1.0.41", default-features = false, features = ["alloc"] } +fixed = { version = "1.9", default-features = false } +fixed-macro = { git = "https://github.com/kvinwang/fixed-macro.git", version = "1.1", default-features = false } +fixed-sqrt = { version = "0.2", default-features = false } + +[target.'cfg(not(target_arch = "wasm32"))'.dependencies] +webpki = { version = "0.22", default-features = false, features = ["alloc"] } + +[target.'cfg(target_arch = "wasm32")'.dependencies] +webpki_wasm = { package = "webpki", path = "../../vendor/webpki", default-features = false, features = ["alloc"] } + +[dev-dependencies] +frame-support-test = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false } +assert_matches = "1.4.0" +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false } +hex-literal = "0.3.1" +libsecp256k1 = { version = "0.3.2", default-features = false } +rand = "0.7.3" + +[features] +default = ['std'] +std = [ + "codec/std", + "sp-runtime/std", + "frame-support/std", + "frame-system/std", + "sp-io/std", + "sp-std/std", + "sp-core/full_crypto", + "frame-benchmarking/std", + "pallet-balances/std", + "log/std", + "phala-types/enable_serde", +] +runtime-benchmarks = [ + "frame-benchmarking" +] +try-runtime = ["frame-support/try-runtime"] +native = [ + "sp-application-crypto/full_crypto", +] diff --git a/pallets/phala/mq-runtime-api/Cargo.toml b/pallets/phala/mq-runtime-api/Cargo.toml new file mode 100644 index 00000000..f40ff5fb --- /dev/null +++ b/pallets/phala/mq-runtime-api/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "pallet-mq-runtime-api" +version = "0.1.0" +edition = "2018" + +[dependencies] +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.9", default-features = false } +phala-mq = { path = "../../../crates/phala-mq", default-features = false } + +[features] +default = ["std"] +std = [ + "sp-api/std", +] diff --git a/pallets/phala/mq-runtime-api/src/lib.rs b/pallets/phala/mq-runtime-api/src/lib.rs new file mode 100644 index 00000000..8eee0fee --- /dev/null +++ b/pallets/phala/mq-runtime-api/src/lib.rs @@ -0,0 +1,7 @@ +#![cfg_attr(not(feature = "std"), no_std)] + +sp_api::decl_runtime_apis! { + pub trait MqApi { + fn sender_sequence(sender: &phala_mq::MessageOrigin) -> Option; + } +} diff --git a/pallets/phala/sample/report b/pallets/phala/sample/report new file mode 100644 index 00000000..daf439d5 --- /dev/null +++ b/pallets/phala/sample/report @@ -0,0 +1 @@ +{"id":"68000083950828099204333099214355698801","timestamp":"2021-02-14T23:14:15.956073","version":4,"epidPseudonym":"4TUztFNlJtNfyhtdnN3L4ZfOUkUNcw2coVyAYcxi6Q893o6a+lHgfxVYrlsCAaz2IdpD0QZKFbpjBVbPbhGCs1kRZXxQjgJtzA7SJXFXqD7mdtVMdIo4H3jt1BkAcLtutIgrKyrYGx6Syz0BVemjh/8LKkavYQp8h9iMGbC3HZE=","advisoryURL":"https://security-center.intel.com","advisoryIDs":["INTEL-SA-00381","INTEL-SA-00389"],"isvEnclaveQuoteStatus":"GROUP_OUT_OF_DATE","platformInfoBlob":"150200650400010000030300000000000000000000000000000B00000B000000020000000000000B86CB9EA25B3C1F64D413DE62481A711098539F47B0D6DFDCA848E3F9A186BDB4437411723316554519AEC5BD4A808629E9A7B8721E9DEAE29B5A4F47774F599336","isvEnclaveQuoteBody":"AgABAIYLAAALAAoAAAAAACA1iY73e440nuw+J3NzpJAAAAAAAAAAAAAAAAAAAAAAAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAADAAAAAAAAAMF3H2qlC2w4MuSFctloY3fNQjug+KiFma2ljlffGp54AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBX0LxHPZEMMMLq3gWullqHaATDDsCi2cxM6Zs+aPg5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACpOE18Xay8i7pFacOrlyt6b3TKCONe7EDhrKpvzGg0dAslwCwJeapAEvMDoY9JMH1vc6usT206bPOTbHb3rQEc"} diff --git a/pallets/phala/sample/report_signature b/pallets/phala/sample/report_signature new file mode 100644 index 00000000..264b01a4 --- /dev/null +++ b/pallets/phala/sample/report_signature @@ -0,0 +1 @@ +eZQhHLwjpvEPYcVqw0S9K7LyFoTRkT3S3tq4LgJz+1BaMMdjpZ0fOvmrt7oS78KzyXoSNq7lwG8PowDdSSJr5eLluA6x/dipK2rBC2THJUnwyKiCMwGSS6TcsVVzVJfgdAttcrjj587XaKd6Q4FhigrqMdzx/vJCH7liorhU+JYw53fLF7jjepwEgcbXay1l45Dnaczv7zvUOGTuE21kKPf9Bu1glpibG5YykvKP8VOdOK4GTUdVNLbLsj6386tmBAjOhXt+m9knn0IwxrOzUHI77QO95ljsLtUvUoyFg1vvSUDa0+xxx96qiIBKS6IHN2EQBonqvLdgkgoxzhfFbw== diff --git a/pallets/phala/sample/report_signing_certificate b/pallets/phala/sample/report_signing_certificate new file mode 100644 index 00000000..ffa2dc6e --- /dev/null +++ b/pallets/phala/sample/report_signing_certificate @@ -0,0 +1 @@ +MIIEoTCCAwmgAwIBAgIJANEHdl0yo7CWMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMTAwLgYDVQQDDCdJbnRlbCBTR1ggQXR0ZXN0YXRpb24gUmVwb3J0IFNpZ25pbmcgQ0EwHhcNMTYxMTIyMDkzNjU4WhcNMjYxMTIwMDkzNjU4WjB7MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFDASBgNVBAcMC1NhbnRhIENsYXJhMRowGAYDVQQKDBFJbnRlbCBDb3Jwb3JhdGlvbjEtMCsGA1UEAwwkSW50ZWwgU0dYIEF0dGVzdGF0aW9uIFJlcG9ydCBTaWduaW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqXot4OZuphR8nudFrAFiaGxxkgma/Es/BA+tbeCTUR106AL1ENcWA4FX3K+E9BBL0/7X5rj5nIgX/R/1ubhkKWw9gfqPG3KeAtIdcv/uTO1yXv50vqaPvE1CRChvzdS/ZEBqQ5oVvLTPZ3VEicQjlytKgN9cLnxbwtuvLUK7eyRPfJW/ksddOzP8VBBniolYnRCD2jrMRZ8nBM2ZWYwnXnwYeOAHV+W9tOhAImwRwKF/95yAsVwd21ryHMJBcGH70qLagZ7Ttyt++qO/6+KAXJuKwZqjRlEtSEz8gZQeFfVYgcwSfo96oSMAzVr7V0L6HSDLRnpb6xxmbPdqNol4tQIDAQABo4GkMIGhMB8GA1UdIwQYMBaAFHhDe3amfrzQr35CN+s1fDuHAVE8MA4GA1UdDwEB/wQEAwIGwDAMBgNVHRMBAf8EAjAAMGAGA1UdHwRZMFcwVaBToFGGT2h0dHA6Ly90cnVzdGVkc2VydmljZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML1NHWC9BdHRlc3RhdGlvblJlcG9ydFNpZ25pbmdDQS5jcmwwDQYJKoZIhvcNAQELBQADggGBAGcIthtcK9IVRz4rRq+ZKE+7k50/OxUsmW8aavOzKb0iCx07YQ9rzi5nU73tME2yGRLzhSViFs/LpFa9lpQL6JL1aQwmDR74TxYGBAIi5f4I5TJoCCEqRHz91kpG6Uvyn2tLmnIdJbPE4vYvWLrtXXfFBSSPD4Afn7+3/XUggAlc7oCTizOfbbtOFlYA4g5KcYgS1J2ZAeMQqbUdZseZCcaZZZn65tdqee8UXZlDvx0+NdO0LR+5pFy+juM0wWbu59MvzcmTXbjsi7HY6zd53Yq5K244fwFHRQ8eOB0IWB+4PfM7FeAApZvlfqlKOlLcZL2uyVmzRkyR5yW72uo9mehX44CiPJ2fse9Y6eQtcfEhMPkmHXI01sN+KwPbpA39+xOsStjhP9N1Y1a2tQAVo+yVgLgV2Hws73Fc0o3wC78qPEA+v2aRs/Be3ZFDgDyghc/1fgU+7C+P6kbqd4poyb6IW8KCJbxfMJvkordNOgOUUxndPHEi/tb/U7uLjLOgPA== diff --git a/pallets/phala/src/lib.rs b/pallets/phala/src/lib.rs new file mode 100644 index 00000000..350251bd --- /dev/null +++ b/pallets/phala/src/lib.rs @@ -0,0 +1,39 @@ +#![cfg_attr(not(feature = "std"), no_std)] + +//! Phala Pallets +//! +//! This is the central crate of Phala tightly-coupled pallets. +//! +//! - `phala_legacy`: The legacy `pallet-phala`; will be retired gradually +//! - `mq`: The message queue to connect components in the network +//! - `registry`: Manages the public key of offchain components (i.e. workers and contracts) +//! - `mining`: Manages mining lifecycle, reward and slashes +//! - `stakepool`: Pool for collaboratively mining staking + +#[cfg(target_arch = "wasm32")] +extern crate webpki_wasm as webpki; + +// Re-export +use utils::{accumulator, attestation, balance_convert, constants, fixed_point}; + +mod utils; + +pub mod mining; +pub mod mq; +pub mod registry; +pub mod stakepool; + +// Alias +pub use mining as pallet_mining; +pub use mq as pallet_mq; +pub use registry as pallet_registry; +pub use stakepool as pallet_stakepool; + +#[cfg(feature = "native")] +use sp_core::hashing; + +#[cfg(not(feature = "native"))] +use sp_io::hashing; + +#[cfg(test)] +mod mock; diff --git a/pallets/phala/src/mining.rs b/pallets/phala/src/mining.rs new file mode 100644 index 00000000..fcd892d4 --- /dev/null +++ b/pallets/phala/src/mining.rs @@ -0,0 +1,1339 @@ +pub use self::pallet::*; + +#[allow(unused_variables)] +#[frame_support::pallet] +pub mod pallet { + use crate::mq::{self, MessageOriginInfo}; + use crate::registry; + use frame_support::traits::WithdrawReasons; + use frame_support::{ + dispatch::DispatchResult, + pallet_prelude::*, + traits::{ + Currency, ExistenceRequirement::KeepAlive, OnUnbalanced, Randomness, StorageVersion, + UnixTime, + }, + PalletId, + }; + use frame_system::pallet_prelude::*; + use phala_types::{ + messaging::{ + DecodedMessage, GatekeeperEvent, HeartbeatChallenge, MessageOrigin, + MiningInfoUpdateEvent, MiningReportEvent, SettleInfo, SystemEvent, + TokenomicParameters as TokenomicParams, WorkerEvent, + }, + WorkerPublicKey, + }; + use sp_core::U256; + use sp_runtime::{traits::AccountIdConversion, SaturatedConversion}; + use sp_std::cmp; + + use crate::balance_convert::FixedPointConvert; + use fixed::types::U64F64 as FixedPoint; + use fixed_macro::types::U64F64 as fp; + use fixed_sqrt::FixedSqrt; + + const DEFAULT_EXPECTED_HEARTBEAT_COUNT: u32 = 20; + const MINING_PALLETID: PalletId = PalletId(*b"phala/pp"); + + #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug)] + pub enum MinerState { + Ready, + MiningIdle, + MiningActive, + MiningUnresponsive, + MiningCoolingDown, + } + + impl MinerState { + fn can_unbind(&self) -> bool { + matches!(self, MinerState::Ready | MinerState::MiningCoolingDown) + } + fn can_settle(&self) -> bool { + // TODO(hangyin): + // + // We don't allow a settlement in MiningCoolingDown or Ready. After a miner is stopped, + // it's released immediately and the slash is pre-settled (to make sure the force + // withdrawal can be processed correctly). + // + // We have to either figure out how to allow settlement in CoolingDown state, or + // complete disable it as we do now. Note that when CoolingDown settle is not allowed, + // we still have to make sure the slashed V is periodically updated on the blockchain. + matches!( + self, + MinerState::MiningIdle | MinerState::MiningActive | MinerState::MiningUnresponsive + ) + } + fn is_mining(&self) -> bool { + matches!( + self, + MinerState::MiningIdle | MinerState::MiningUnresponsive + ) + } + } + + #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug)] + pub struct Benchmark { + p_init: u32, + p_instant: u32, + iterations: u64, + mining_start_time: u64, + challenge_time_last: u64, + } + + impl Benchmark { + /// Records the latest benchmark status snapshot and updates `p_instant` + /// + /// Note: `now` and `challenge_time` are in seconds. + fn update(&mut self, now: u64, iterations: u64, challenge_time: u64) -> Result<(), ()> { + // `now` must be larger than `challenge_time_last` because it's impossible to report + // the heartbeat at the same block with the challenge. + if now <= self.challenge_time_last { + return Err(()); + } + // Lower iteration indicates the worker has been restarted. This is acceptable, but we + // have to reset the on-chain counter as well (causing a temporary zero p-instant). + if iterations < self.iterations { + self.iterations = iterations; + } + let delta_ts = now - self.challenge_time_last; + let delta_iter = iterations - self.iterations; + self.challenge_time_last = challenge_time; + self.iterations = iterations; + // Normalize the instant P value: + // 1. Normalize to iterations in 6 sec + // 2. Cap it to 120% `initial_score` + let p_instant = (delta_iter * 6 / delta_ts) as u32; + self.p_instant = p_instant.min(self.p_init * 12 / 10); + Ok(()) + } + } + + #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug)] + pub struct MinerInfo { + pub state: MinerState, + /// The intiial V, in U64F64 bits + pub ve: u128, + /// The last updated V, in U64F64 bits + pub v: u128, + v_updated_at: u64, + benchmark: Benchmark, + cool_down_start: u64, + stats: MinerStats, + } + + impl MinerInfo { + /// Calculates the final final returned and slashed stake + fn calc_final_stake(&self, orig_stake: Balance) -> (Balance, Balance) + where + Balance: sp_runtime::traits::AtLeast32BitUnsigned + Copy + FixedPointConvert, + { + // Calcualte remaining stake + let v = FixedPoint::from_bits(self.v); + let ve = FixedPoint::from_bits(self.ve); + let return_rate = (v / ve).min(fp!(1)); + // If we consider kappa as a panelty of frequent exit: + // let tokenomic = Self::tokenomic(); + // let returned = return_rate * orig_stake.to_fixed() * tokenomic.kappa(); + let returned = return_rate * orig_stake.to_fixed(); + // Convert to Balance + let returned = FixedPointConvert::from_fixed(&returned); + let slashed = orig_stake - returned; + (returned, slashed) + } + } + + pub trait OnReward { + fn on_reward(settle: &[SettleInfo]) {} + } + + pub trait OnUnbound { + /// Called wthen a worker was unbound from a miner. + /// + /// `force` is set if the unbinding caused an unexpected miner shutdown. + fn on_unbound(worker: &WorkerPublicKey, force: bool) {} + } + + pub trait OnReclaim { + /// Called when the miner has finished reclaiming and a given amount of the stake should be + /// returned + /// + /// When called, it's not guaranteed there's still a worker associated to the miner. + fn on_reclaim(miner: &AccountId, orig_stake: Balance, slashed: Balance) {} + + // Using miner account as the identity here is necessary because at this point the worker + // may be already unbound. + } + + pub trait OnStopped { + /// Called with a miner is stopped and can already calculate the final slash and stake. + /// + /// It guarantees the number will be the same as the parameters in OnReclaim + fn on_stopped(worker: &WorkerPublicKey, orig_stake: Balance, slashed: Balance) {} + } + + #[derive(Encode, Decode, Clone, PartialEq, Eq, Default, RuntimeDebug)] + pub struct MinerStats { + total_reward: u128, + } + + impl MinerStats { + fn on_reward(&mut self, payout_bits: u128) { + let payout: u128 = FixedPointConvert::from_bits(payout_bits); + self.total_reward += payout; + } + } + + #[pallet::config] + pub trait Config: frame_system::Config + mq::Config + registry::Config { + type Event: From> + IsType<::Event>; + type ExpectedBlockTimeSec: Get; + + type Currency: Currency; + type Randomness: Randomness; + type OnReward: OnReward; + type OnUnbound: OnUnbound; + type OnReclaim: OnReclaim>; + type OnStopped: OnStopped>; + type OnTreasurySettled: OnUnbalanced>; + // Let the StakePool to take over the slash events. + } + + const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); + + #[pallet::pallet] + #[pallet::generate_store(pub(super) trait Store)] + #[pallet::storage_version(STORAGE_VERSION)] + pub struct Pallet(_); + + /// Tokenomic parameters used by Gatekeepers to compute the V promote. + #[pallet::storage] + pub type TokenomicParameters = StorageValue<_, TokenomicParams>; + + /// Total online miners + /// + /// Increased when a miner is turned to MininIdle; decreased when turned to CoolingDown + #[pallet::storage] + #[pallet::getter(fn online_miners)] + pub type OnlineMiners = StorageValue<_, u32, ValueQuery>; + + /// The expected heartbeat count (default: 20) + #[pallet::storage] + pub type ExpectedHeartbeatCount = StorageValue<_, u32>; + + /// The miner state. + /// + /// The miner state is created when a miner is bounded with a worker, but it will be kept even + /// if the worker is force unbound. A re-bind of a worker will reset the mining state. + #[pallet::storage] + #[pallet::getter(fn miners)] + pub type Miners = StorageMap<_, Twox64Concat, T::AccountId, MinerInfo>; + + /// The bound worker for a miner account + #[pallet::storage] + pub type MinerBindings = StorageMap<_, Twox64Concat, T::AccountId, WorkerPublicKey>; + + /// The bound miner account for a worker + #[pallet::storage] + pub type WorkerBindings = StorageMap<_, Twox64Concat, WorkerPublicKey, T::AccountId>; + + /// The cool down period (in sec) + #[pallet::storage] + #[pallet::getter(fn cool_down_period)] + pub type CoolDownPeriod = StorageValue<_, u64, ValueQuery>; + + /// The next id to assign to a mining session + #[pallet::storage] + pub type NextSessionId = StorageValue<_, u32, ValueQuery>; + + /// The stakes of miner accounts. + /// + /// Only presents for mining and cooling down miners. + #[pallet::storage] + #[pallet::getter(fn stakes)] + pub type Stakes = StorageMap<_, Twox64Concat, T::AccountId, BalanceOf>; + + #[pallet::event] + #[pallet::generate_deposit(pub(super) fn deposit_event)] + #[pallet::metadata(T::AccountId = "AccountId", BalanceOf = "Balance")] + pub enum Event { + /// Cool down expiration changed. \[period\] + CoolDownExpirationChanged(u64), + /// Miner starts mining. \[miner\] + MinerStarted(T::AccountId), + /// Miner stops mining. \[miner\] + MinerStopped(T::AccountId), + /// Miner is reclaimed, with its slash settled. \[miner, original_stake, slashed\] + MinerReclaimed(T::AccountId, BalanceOf, BalanceOf), + /// Miner & worker are bound. \[miner, worker\] + MinerBound(T::AccountId, WorkerPublicKey), + /// Miner & worker are unbound. \[miner, worker\] + MinerUnbound(T::AccountId, WorkerPublicKey), + /// Miner enters unresponsive state. \[miner\] + MinerEnterUnresponsive(T::AccountId), + /// Miner returns to responsive state \[miner\] + MinerExitUnresponive(T::AccountId), + /// Miner settled successfully. \[miner, v, payout\] + MinerSettled(T::AccountId, u128, u128), + /// Some internal error happened when settling a miner's ledger. \[worker\] + InternalErrorMinerSettleFailed(WorkerPublicKey), + } + + #[pallet::error] + pub enum Error { + BadSender, + InvalidMessage, + WorkerNotRegistered, + GatekeeperNotRegistered, + DuplicateBoundMiner, + BenchmarkMissing, + MinerNotFound, + MinerNotBound, + MinerNotReady, + MinerNotMining, + WorkerNotBound, + CoolDownNotReady, + InsufficientStake, + TooMuchStake, + InternalErrorBadTokenomicParameters, + } + + type BalanceOf = + <::Currency as Currency<::AccountId>>::Balance; + + type NegativeImbalanceOf = <::Currency as Currency< + ::AccountId, + >>::NegativeImbalance; + + #[pallet::call] + impl Pallet + where + BalanceOf: FixedPointConvert, + { + #[pallet::weight(0)] + pub fn set_cool_down_expiration(origin: OriginFor, period: u64) -> DispatchResult { + ensure_root(origin)?; + + CoolDownPeriod::::mutate(|p| *p = period); + Self::deposit_event(Event::::CoolDownExpirationChanged(period)); + Ok(()) + } + + /// Unbinds a worker from the given miner (or pool sub-account). + /// + /// It will trigger a force stop of mining if the miner is still in mining state. + #[pallet::weight(0)] + pub fn unbind(origin: OriginFor, miner: T::AccountId) -> DispatchResult { + let who = ensure_signed(origin)?; + let pubkey = Self::ensure_miner_bound(&miner)?; + let worker = + registry::Workers::::get(&pubkey).ok_or(Error::::WorkerNotRegistered)?; + ensure!(worker.operator == Some(who), Error::::BadSender); + // Always notify the subscriber. Please note that even if the miner is not mining, we + // still have to notify the subscriber that an unbinding operation has just happened. + Self::unbind_miner(&miner, true) + } + + /// Turns the miner back to Ready state after cooling down and trigger stake releasing. + /// + /// Anyone can reclaim. + /// + /// Requires: + /// 1. Ther miner is in CoolingDown state and the cool down period has passed + #[pallet::weight(0)] + pub fn reclaim(origin: OriginFor, miner: T::AccountId) -> DispatchResult { + ensure_signed(origin)?; + let mut miner_info = Miners::::get(&miner).ok_or(Error::::MinerNotFound)?; + ensure!(Self::can_reclaim(&miner_info), Error::::CoolDownNotReady); + miner_info.state = MinerState::Ready; + miner_info.cool_down_start = 0u64; + Miners::::insert(&miner, &miner_info); + + let orig_stake = Stakes::::take(&miner).unwrap_or_default(); + let (_returned, slashed) = miner_info.calc_final_stake(orig_stake); + + T::OnReclaim::on_reclaim(&miner, orig_stake, slashed); + Self::deposit_event(Event::::MinerReclaimed(miner, orig_stake, slashed)); + Ok(()) + } + + /// Triggers a force heartbeat request to all workers by sending a MAX pow target + /// + /// Only for integration test. + #[pallet::weight(1)] + pub fn force_heartbeat(origin: OriginFor) -> DispatchResult { + ensure_root(origin)?; + Self::push_message(SystemEvent::HeartbeatChallenge(HeartbeatChallenge { + seed: U256::zero(), + online_target: U256::MAX, + })); + Ok(()) + } + + /// Start mining + /// + /// Only for integration test. + #[pallet::weight(1)] + pub fn force_start_mining( + origin: OriginFor, + miner: T::AccountId, + stake: BalanceOf, + ) -> DispatchResult { + ensure_root(origin)?; + Self::start_mining(miner, stake)?; + Ok(()) + } + + /// Stop mining + /// + /// Only for integration test. + #[pallet::weight(1)] + pub fn force_stop_mining(origin: OriginFor, miner: T::AccountId) -> DispatchResult { + ensure_root(origin)?; + Self::stop_mining(miner)?; + Ok(()) + } + + /// Updates the tokenomic parameters + #[pallet::weight(1)] + pub fn update_tokenomic( + origin: OriginFor, + new_params: TokenomicParams, + ) -> DispatchResult { + ensure_root(origin)?; + Self::update_tokenomic_parameters(new_params); + Ok(()) + } + } + + #[pallet::hooks] + impl Hooks for Pallet + where + BalanceOf: FixedPointConvert, + { + fn on_finalize(_n: T::BlockNumber) { + Self::heartbeat_challenge(); + } + + fn on_runtime_upgrade() -> Weight { + let mut w = 0; + let old = Self::on_chain_storage_version(); + w += T::DbWeight::get().reads(1); + + if old == 0 { + w += migrations::initialize::(); + STORAGE_VERSION.put::>(); + w += T::DbWeight::get().writes(1); + } + w + } + } + + impl Pallet + where + BalanceOf: FixedPointConvert, + { + pub fn account_id() -> T::AccountId { + MINING_PALLETID.into_account() + } + + fn heartbeat_challenge() { + // Random seed for the heartbeat challenge + let seed_hash = T::Randomness::random(crate::constants::RANDOMNESS_SUBJECT).0; + let seed: U256 = AsRef::<[u8]>::as_ref(&seed_hash).into(); + // PoW target for the random sampling + let online_miners = OnlineMiners::::get(); + let num_tx = + ExpectedHeartbeatCount::::get().unwrap_or(DEFAULT_EXPECTED_HEARTBEAT_COUNT); + let online_target = pow_target(num_tx, online_miners, T::ExpectedBlockTimeSec::get()); + let seed_info = HeartbeatChallenge { + seed, + online_target, + }; + Self::push_message(SystemEvent::HeartbeatChallenge(seed_info)); + } + + pub fn on_mining_message_received( + message: DecodedMessage, + ) -> DispatchResult { + if let MessageOrigin::Worker(worker) = message.sender { + match message.payload { + MiningReportEvent::Heartbeat { + iterations, + challenge_time, + .. + } => { + // Handle with great care! + // + // In some cases, a message can be delayed, but the worker has been already + // unbound or removed (possible?). So when we receive a message, don't + // assume the worker is always there and the miner state is complete. So + // far it sounds safe to just discard this message, but not interrupt the + // entire message queue. + // + // So we call `ensure_worker_bound` here, and return an error if the worker + // is not bound. However if the worker is indeed bound, the rest of the + // code assumes the Miners, Workers, and worker score must exist. + let miner = Self::ensure_worker_bound(&worker)?; + let mut miner_info = Self::miners(&miner).expect("Bound miner; qed."); + let worker = + registry::Workers::::get(&worker).expect("Bound worker; qed."); + let now = Self::now_sec(); + let challenge_time_sec = challenge_time / 1000; + miner_info + .benchmark + .update(now, iterations, challenge_time_sec) + .expect("Benchmark report must be valid; qed."); + Miners::::insert(&miner, miner_info); + } + }; + } + Ok(()) + } + + pub fn on_gk_message_received( + message: DecodedMessage>, + ) -> DispatchResult { + if !matches!(message.sender, MessageOrigin::Gatekeeper) { + return Err(Error::::BadSender.into()); + } + + let event = message.payload; + if !event.is_empty() { + let now = Self::now_sec(); + + // worker offline, update bound miner state to unresponsive + for worker in event.offline { + if let Some(account) = WorkerBindings::::get(&worker) { + let mut miner_info = + Self::miners(&account).ok_or(Error::::MinerNotFound)?; + // Skip non-mining miners + if !miner_info.state.is_mining() { + continue; + } + miner_info.state = MinerState::MiningUnresponsive; + Miners::::insert(&account, &miner_info); + Self::deposit_event(Event::::MinerEnterUnresponsive(account)); + Self::push_message(SystemEvent::new_worker_event( + worker, + WorkerEvent::MiningEnterUnresponsive, + )); + } + } + + // worker recovered to online, update bound miner state to idle + for worker in event.recovered_to_online { + if let Some(account) = WorkerBindings::::get(&worker) { + let mut miner_info = + Self::miners(&account).ok_or(Error::::MinerNotFound)?; + // Skip non-mining miners + if !miner_info.state.is_mining() { + continue; + } + miner_info.state = MinerState::MiningIdle; + Miners::::insert(&account, &miner_info); + Self::deposit_event(Event::::MinerExitUnresponive(account)); + Self::push_message(SystemEvent::new_worker_event( + worker, + WorkerEvent::MiningExitUnresponsive, + )); + } + } + + for info in &event.settle { + // Do not crash here + if Self::try_handle_settle(info, now).is_err() { + Self::deposit_event(Event::::InternalErrorMinerSettleFailed( + info.pubkey, + )) + } + } + + T::OnReward::on_reward(&event.settle); + } + + Ok(()) + } + + /// Tries to handle settlement of a miner. + /// + /// We really don't want to crash the interrupt the message processing. So when there's an + /// error we return it, and let the caller to handle it gracefully. + fn try_handle_settle(info: &SettleInfo, now: u64) -> DispatchResult { + if let Some(account) = WorkerBindings::::get(&info.pubkey) { + let mut miner_info = Self::miners(&account).ok_or(Error::::MinerNotFound)?; + debug_assert!(miner_info.state.can_settle(), "Miner cannot settle now"); + miner_info.v = info.v; // in bits + miner_info.v_updated_at = now; + miner_info.stats.on_reward(info.payout); + Miners::::insert(&account, &miner_info); + // Handle treasury deposit + let treasury_deposit = FixedPointConvert::from_bits(info.treasury); + let imbalance = Self::withdraw_imbalance_from_subsidy_pool(treasury_deposit)?; + T::OnTreasurySettled::on_unbalanced(imbalance); + Self::deposit_event(Event::::MinerSettled(account, info.v, info.payout)); + } + Ok(()) + } + + fn can_reclaim(miner_info: &MinerInfo) -> bool { + if miner_info.state != MinerState::MiningCoolingDown { + return false; + } + let now = Self::now_sec(); + now - miner_info.cool_down_start >= Self::cool_down_period() + } + + /// Binds a miner to a worker + /// + /// This will bind the miner account to the worker, and then create a `Miners` entry to + /// track the mining session in the future. The mining session will exist until ther miner + /// and the worker is unbound. + /// + /// Requires: + /// 1. The worker is alerady registered + /// 2. The worker has an initial benchmark + /// 3. Both the worker and the miner are not bound + pub fn bind(miner: T::AccountId, pubkey: WorkerPublicKey) -> DispatchResult { + let worker = + registry::Workers::::get(&pubkey).ok_or(Error::::WorkerNotRegistered)?; + // Check the worker has finished the benchmark + ensure!(worker.initial_score != None, Error::::BenchmarkMissing); + // Check miner and worker not bound + ensure!( + Self::ensure_miner_bound(&miner).is_err(), + Error::::DuplicateBoundMiner + ); + ensure!( + Self::ensure_worker_bound(&pubkey).is_err(), + Error::::DuplicateBoundMiner + ); + + let now = Self::now_sec(); + MinerBindings::::insert(&miner, &pubkey); + WorkerBindings::::insert(&pubkey, &miner); + Miners::::insert( + &miner, + MinerInfo { + state: MinerState::Ready, + ve: 0, + v: 0, + v_updated_at: now, + benchmark: Benchmark { + p_init: 0u32, + p_instant: 0u32, + iterations: 0u64, + mining_start_time: now, + challenge_time_last: 0u64, + }, + cool_down_start: 0u64, + stats: Default::default(), + }, + ); + + Self::deposit_event(Event::::MinerBound(miner, pubkey)); + Ok(()) + } + + /// Unbinds a miner from a worker + /// + /// - `notify`: whether to notify the subscribe the unbinding event. + /// + /// Requires: + /// 1. The miner is bounded with a worker + pub fn unbind_miner(miner: &T::AccountId, notify: bool) -> DispatchResult { + let worker = Self::ensure_miner_bound(miner)?; + let miner_info = Miners::::get(miner) + .expect("A bounded miner must has the associated MinerInfo; qed."); + + let force = !miner_info.state.can_unbind(); + if force { + // Force unbinding. Stop the miner first. + // Note that `stop_mining` will notify the suscribers with the slashed vaue. + Self::stop_mining(miner.clone())?; + // TODO: consider the final state sync (could cause slash) when stopping mining + } + MinerBindings::::remove(miner); + WorkerBindings::::remove(&worker); + Self::deposit_event(Event::::MinerUnbound(miner.clone(), worker)); + if notify { + T::OnUnbound::on_unbound(&worker, force); + } + + Ok(()) + } + + /// Starts mining with the given `stake`, assuming the stake is already locked externally + pub fn start_mining(miner: T::AccountId, stake: BalanceOf) -> DispatchResult { + let worker = MinerBindings::::get(&miner).ok_or(Error::::MinerNotFound)?; + + ensure!( + Miners::::get(&miner).unwrap().state == MinerState::Ready, + Error::::MinerNotReady + ); + + let worker_info = + registry::Workers::::get(&worker).expect("Bounded worker must exist; qed."); + let p = worker_info + .initial_score + .ok_or(Error::::BenchmarkMissing)?; + + let tokenomic = Self::tokenomic()?; + let min_stake = tokenomic.minimal_stake(p); + ensure!(stake >= min_stake, Error::::InsufficientStake); + + let ve = tokenomic.ve(stake, p, worker_info.confidence_level); + let v_max = tokenomic.v_max(); + ensure!(ve <= v_max, Error::::TooMuchStake); + + let now = Self::now_sec(); + + Stakes::::insert(&miner, stake); + Miners::::mutate(&miner, |info| { + if let Some(info) = info { + info.state = MinerState::MiningIdle; + info.ve = ve.to_bits(); + info.v = ve.to_bits(); + info.v_updated_at = now; + info.benchmark.p_init = p; + } + }); + OnlineMiners::::mutate(|v| *v += 1); + + let session_id = NextSessionId::::get(); + NextSessionId::::put(session_id + 1); + Self::push_message(SystemEvent::new_worker_event( + worker, + WorkerEvent::MiningStart { + session_id, + init_v: ve.to_bits(), + init_p: p, + }, + )); + Self::deposit_event(Event::::MinerStarted(miner)); + Ok(()) + } + + /// Stops mining, enterying cool down state + /// + /// Requires: + /// 1. Ther miner is in Idle, MiningActive, or MiningUnresponsive state + pub fn stop_mining(miner: T::AccountId) -> DispatchResult { + let worker = MinerBindings::::get(&miner).ok_or(Error::::MinerNotBound)?; + let mut miner_info = Miners::::get(&miner).ok_or(Error::::MinerNotFound)?; + + ensure!( + miner_info.state != MinerState::Ready + && miner_info.state != MinerState::MiningCoolingDown, + Error::::MinerNotMining + ); + + let now = Self::now_sec(); + miner_info.state = MinerState::MiningCoolingDown; + miner_info.cool_down_start = now; + Miners::::insert(&miner, &miner_info); + OnlineMiners::::mutate(|v| *v -= 1); // v cannot be 0 + + // Calcualte remaining stake (assume there's no more slash after calling `stop_mining`) + let orig_stake = Stakes::::get(&miner).unwrap_or_default(); + let (_returned, slashed) = miner_info.calc_final_stake(orig_stake); + // Notify the subscriber with the slash prediction + T::OnStopped::on_stopped(&worker, orig_stake, slashed); + + Self::push_message(SystemEvent::new_worker_event( + worker, + WorkerEvent::MiningStop, + )); + Self::deposit_event(Event::::MinerStopped(miner)); + Ok(()) + } + + /// Returns if the worker is already bounded to a miner + pub fn ensure_worker_bound(pubkey: &WorkerPublicKey) -> Result> { + WorkerBindings::::get(&pubkey).ok_or(Error::::WorkerNotBound) + } + + /// Returns if the miner is already bounded to a worker + pub fn ensure_miner_bound(miner: &T::AccountId) -> Result> { + MinerBindings::::get(&miner).ok_or(Error::::MinerNotBound) + } + + fn update_tokenomic_parameters(params: TokenomicParams) { + TokenomicParameters::::put(params.clone()); + Self::push_message(GatekeeperEvent::TokenomicParametersChanged(params)); + } + + pub fn withdraw_subsidy_pool(target: &T::AccountId, value: BalanceOf) -> DispatchResult { + let wallet = Self::account_id(); + T::Currency::transfer(&wallet, target, value, KeepAlive) + } + + pub fn withdraw_imbalance_from_subsidy_pool( + value: BalanceOf, + ) -> Result, DispatchError> { + let wallet = Self::account_id(); + T::Currency::withdraw( + &wallet, + value, + WithdrawReasons::TRANSFER, + frame_support::traits::ExistenceRequirement::AllowDeath, + ) + } + + fn tokenomic() -> Result, Error> { + let params = TokenomicParameters::::get() + .ok_or(Error::::InternalErrorBadTokenomicParameters)?; + Ok(Tokenomic::::new(params)) + } + + fn now_sec() -> u64 { + ::UnixTime::now() + .as_secs() + .saturated_into::() + } + } + + struct Tokenomic { + params: TokenomicParams, + mark: PhantomData, + } + + impl Tokenomic + where + T: Config, + BalanceOf: FixedPointConvert, + { + fn new(params: TokenomicParams) -> Self { + Tokenomic { + params, + mark: Default::default(), + } + } + + /// Gets the minimal stake with the given performance score + fn minimal_stake(&self, p: u32) -> BalanceOf { + let p = FixedPoint::from_num(p); + let k = FixedPoint::from_bits(self.params.k); + let min_stake = k * p.sqrt(); + FixedPointConvert::from_fixed(&min_stake) + } + + /// Calcuates the initial Ve + fn ve(&self, s: BalanceOf, p: u32, confidence_level: u8) -> FixedPoint { + let f1 = FixedPoint::from_num(1); + let score = Self::confidence_score(confidence_level); + let re = FixedPoint::from_bits(self.params.re); + let tweaked_re = (re - f1) * score + f1; + let s = s.to_fixed(); + let c = self.rig_cost(p); + tweaked_re * (s + c) + } + + /// Gets the max v in fixed point + fn v_max(&self) -> FixedPoint { + FixedPoint::from_bits(self.params.v_max) + } + + /// Gets the estimated rig costs in PHA + fn rig_cost(&self, p: u32) -> FixedPoint { + let cost_k = FixedPoint::from_bits(self.params.rig_k); + let cost_b = FixedPoint::from_bits(self.params.rig_b); + let pha_rate = FixedPoint::from_bits(self.params.pha_rate); + let p = FixedPoint::from_num(p); + (cost_k * p + cost_b) / pha_rate + } + + /// Gets the operating cost per sec + #[cfg(test)] + fn op_cost(&self, p: u32) -> FixedPoint { + let cost_k = FixedPoint::from_bits(self.params.cost_k); + let cost_b = FixedPoint::from_bits(self.params.cost_b); + let pha_rate = FixedPoint::from_bits(self.params.pha_rate); + let p = FixedPoint::from_num(p); + (cost_k * p + cost_b) / pha_rate + } + + /// Converts confidence level to score + fn confidence_score(confidence_level: u8) -> FixedPoint { + use fixed_macro::types::U64F64 as fp; + const SCORES: [FixedPoint; 5] = [fp!(1), fp!(1), fp!(1), fp!(0.8), fp!(0.7)]; + if 1 <= confidence_level && confidence_level <= 5 { + SCORES[confidence_level as usize - 1] + } else { + SCORES[0] + } + } + + /// Gets kappa in FixedPoint + fn _kappa(&self) -> FixedPoint { + FixedPoint::from_bits(self.params.kappa) + } + } + + #[pallet::genesis_config] + pub struct GenesisConfig { + pub cool_down_period_sec: u32, + pub tokenomic_parameters: TokenomicParams, + } + + #[cfg(feature = "std")] + impl Default for GenesisConfig { + /// Default tokenoic parameters for Phala + fn default() -> Self { + use fixed_macro::types::U64F64 as fp; + let block_sec = 12; + let hour_sec = 3600; + let day_sec = 24 * hour_sec; + let year_sec = 365 * day_sec; + + let pha_rate = fp!(1); + let rho = fp!(1.000000666600231); // hourly: 1.00020, 1.0002 ** (1/300) convert to per-block + let slash_rate = fp!(0.001) * block_sec / hour_sec; // hourly rate: 0.001, convert to per-block + let budget_per_block = fp!(720000) * block_sec / day_sec; + let v_max = fp!(30000); + let cost_k = fp!(0.0415625) * block_sec / year_sec / pha_rate; // annual 0.0415625, convert to per-block + let cost_b = fp!(88.59375) * block_sec / year_sec / pha_rate; // annual 88.59375, convert to per-block + let treasury_ratio = fp!(0.2); + let heartbeat_window = 10; // 10 blocks + let rig_k = fp!(0.3) / pha_rate; + let rig_b = fp!(0) / pha_rate; + let re = fp!(1.3); + let k = fp!(100); + let kappa = fp!(1); + + Self { + cool_down_period_sec: 604800, // 7 days + tokenomic_parameters: TokenomicParams { + pha_rate: pha_rate.to_bits(), + rho: rho.to_bits(), + budget_per_block: budget_per_block.to_bits(), + v_max: v_max.to_bits(), + cost_k: cost_k.to_bits(), + cost_b: cost_b.to_bits(), + slash_rate: slash_rate.to_bits(), + treasury_ratio: treasury_ratio.to_bits(), + heartbeat_window: 10, + rig_k: rig_k.to_bits(), + rig_b: rig_b.to_bits(), + re: re.to_bits(), + k: k.to_bits(), + kappa: kappa.to_bits(), + }, + } + } + } + + #[pallet::genesis_build] + impl GenesisBuild for GenesisConfig { + fn build(&self) { + CoolDownPeriod::::put(self.cool_down_period_sec as u64); + TokenomicParameters::::put(self.tokenomic_parameters.clone()); + Pallet::::queue_message(GatekeeperEvent::TokenomicParametersChanged( + self.tokenomic_parameters.clone(), + )); + } + } + + mod migrations { + use super::{Config, CoolDownPeriod, TokenomicParameters}; + use fixed_macro::types::U64F64 as fp; + use frame_support::pallet_prelude::*; + + use phala_types::messaging::TokenomicParameters as TokenomicParams; + + pub fn initialize() -> Weight { + log::info!("phala_pallet::mining: initialize()"); + let block_sec = 12; + let hour_sec = 3600; + let day_sec = 24 * hour_sec; + let year_sec = 365 * day_sec; + // Initialize with Khala tokenomic parameters + let pha_rate = fp!(0.84); + let rho = fp!(1.000000666600231); // hourly: 1.00020, 1.0002 ** (1/300) convert to per-block + let slash_rate = fp!(0.001) * block_sec / hour_sec; // hourly rate: 0.001, convert to per-block + let budget_per_block = fp!(60000) * block_sec / day_sec; + let v_max = fp!(30000); + let cost_k = fp!(0.0415625) * block_sec / year_sec / pha_rate; // annual 0.0415625, convert to per-block + let cost_b = fp!(88.59375) * block_sec / year_sec / pha_rate; // annual 88.59375, convert to per-block + let treasury_ratio = fp!(0.2); + let heartbeat_window = 10; // 10 blocks + let rig_k = fp!(0.3) / pha_rate; + let rig_b = fp!(0) / pha_rate; + let re = fp!(1.5); + let k = fp!(50); + let kappa = fp!(1); + // Write storage + CoolDownPeriod::::put(604800); // 7 days + TokenomicParameters::::put(TokenomicParams { + pha_rate: pha_rate.to_bits(), + rho: rho.to_bits(), + budget_per_block: budget_per_block.to_bits(), + v_max: v_max.to_bits(), + cost_k: cost_k.to_bits(), + cost_b: cost_b.to_bits(), + slash_rate: slash_rate.to_bits(), + treasury_ratio: treasury_ratio.to_bits(), + heartbeat_window: 10, + rig_k: rig_k.to_bits(), + rig_b: rig_b.to_bits(), + re: re.to_bits(), + k: k.to_bits(), + kappa: kappa.to_bits(), + }); + T::DbWeight::get().writes(2) + } + } + + fn pow_target(num_tx: u32, num_workers: u32, secs_per_block: u32) -> U256 { + use fixed::types::U32F32; + if num_workers == 0 { + return U256::zero(); + } + let num_workers = U32F32::from_num(num_workers); + let num_tx = U32F32::from_num(num_tx); + // Limit tx per block for a single miner + // t <= max_tx_per_hour * N/T (max_tx_per_hour = 2) + let max_tx = num_workers * U32F32::from_num(2) / U32F32::from_num(3600 / secs_per_block); + let target_tx = cmp::min(num_tx, max_tx); + // Convert to U256 target + // target = MAX * tx / num_workers + let frac: u32 = (target_tx / num_workers) + .checked_shl(24) + .expect("No overflow; qed.") + .to_num(); + (U256::MAX >> 24) * frac + } + + impl MessageOriginInfo for Pallet { + type Config = T; + } + + #[cfg(test)] + mod test { + use super::*; + use crate::mock::{ + elapse_seconds, new_test_ext, set_block_1, setup_workers, take_events, take_messages, + worker_pubkey, Event as TestEvent, Origin, Test, DOLLARS, + }; + // Pallets + use crate::mock::{PhalaMining, PhalaRegistry, System}; + + use fixed_macro::types::U64F64 as fp; + use frame_support::{assert_noop, assert_ok}; + + #[test] + fn test_mining_wallet_setup() { + new_test_ext().execute_with(|| { + assert!(System::account_exists(&PhalaMining::account_id())); + }); + } + + #[test] + fn test_pow_target() { + // No target + assert_eq!(pow_target(20, 0, 12), U256::zero()); + // Capped target (py3: ``) + assert_eq!( + pow_target(20, 20, 12), + U256::from_dec_str( + "771946525395830978497002573683960742805751636319313395421818009383503547160" + ) + .unwrap() + ); + // Not capped target (py3: `int(((1 << 256) - 1) * 20 / 200_000)`) + assert_eq!( + pow_target(20, 200_000, 12), + U256::from_dec_str( + "11574228623567775471528085581038571683760509746329738253007553123311417715" + ) + .unwrap() + ); + } + + #[test] + fn test_heartbeat_challenge() { + new_test_ext().execute_with(|| { + use phala_types::messaging::{SystemEvent, Topic}; + + set_block_1(); + OnlineMiners::::put(20); + Pallet::::heartbeat_challenge(); + // Extract messages + let msgs = take_messages(); + let message = match msgs.as_slice() { + [m] => m, + _ => panic!("Wrong message events"), + }; + // Check the event target + assert_eq!(message.destination, Topic::new("phala/system/event")); + // Check the oubound message parameters + let target = match message.decode_payload::() { + Some(SystemEvent::HeartbeatChallenge(r)) => r.online_target, + _ => panic!("Wrong outbound message"), + }; + assert_eq!(target, U256::from_dec_str( + "771946525395830978497002573683960742805751636319313395421818009383503547160" + ).unwrap()); + }); + } + + #[test] + fn test_bind_unbind() { + new_test_ext().execute_with(|| { + set_block_1(); + setup_workers(2); + // Bind & unbind normally + let _ = take_events(); + assert_ok!(PhalaMining::bind(1, worker_pubkey(1))); + assert_ok!(PhalaMining::unbind_miner(&1, false)); + assert_eq!( + take_events().as_slice(), + [ + TestEvent::PhalaMining(Event::MinerBound(1, worker_pubkey(1))), + TestEvent::PhalaMining(Event::MinerUnbound(1, worker_pubkey(1))) + ] + ); + // Checks edge cases + assert_noop!( + PhalaMining::bind(1, worker_pubkey(100)), + Error::::WorkerNotRegistered, + ); + assert_noop!( + PhalaMining::unbind_miner(&1, false), + Error::::MinerNotBound, + ); + // No double binding + assert_ok!(PhalaMining::bind(2, worker_pubkey(2))); + assert_noop!( + PhalaMining::bind(2, worker_pubkey(1)), + Error::::DuplicateBoundMiner + ); + assert_noop!( + PhalaMining::bind(1, worker_pubkey(2)), + Error::::DuplicateBoundMiner + ); + // Force unbind should be tested via StakePool + }); + } + + #[test] + #[should_panic] + fn test_stakepool_callback_panic() { + new_test_ext().execute_with(|| { + set_block_1(); + setup_workers(1); + assert_ok!(PhalaMining::bind(1, worker_pubkey(1))); + assert_ok!(PhalaMining::start_mining(1, 1000 * DOLLARS)); + // Force unbind without StakePool registration will cause a panic + let _ = PhalaMining::unbind(Origin::signed(1), 1); + }); + } + + #[test] + fn test_tokenomic() { + new_test_ext().execute_with(|| { + let params = TokenomicParameters::::get().unwrap(); + let tokenomic = Tokenomic::::new(params); + fn pow(x: FixedPoint, n: u32) -> FixedPoint { + let mut i = n; + let mut x_pow2 = x; + let mut z = FixedPoint::from_num(1); + while i > 0 { + if i & 1 == 1 { + z *= x_pow2; + } + x_pow2 *= x_pow2; + i >>= 1; + } + z + } + // Vmax + assert_eq!(tokenomic.v_max(), fp!(30000)); + // Minimal stake + assert_eq!(tokenomic.minimal_stake(1000), 3162_277660146355); + // Ve for different confidence level + assert_eq!( + tokenomic.ve(1000 * DOLLARS, 1000, 1), + fp!(1690.0000000000000000282) + ); + assert_eq!( + tokenomic.ve(1000 * DOLLARS, 1000, 2), + fp!(1690.0000000000000000282) + ); + assert_eq!( + tokenomic.ve(1000 * DOLLARS, 1000, 3), + fp!(1690.0000000000000000282) + ); + assert_eq!( + tokenomic.ve(1000 * DOLLARS, 1000, 4), + fp!(1612.0000000000000000247) + ); + assert_eq!( + tokenomic.ve(1000 * DOLLARS, 1000, 5), + fp!(1572.9999999999999999877) + ); + // Rig cost estimation + assert_eq!(tokenomic.rig_cost(500), fp!(150.0000000000000000054)); + assert_eq!(tokenomic.rig_cost(2000), fp!(600.0000000000000000217)); + assert_eq!(tokenomic.rig_cost(2800), fp!(840.00000000000000003036)); + + const BLOCK_SEC: u32 = 12; + const HOUR_BLOCKS: u32 = 3600 / BLOCK_SEC; + // Slash per hour (around 0.1%) + let slash_rate = FixedPoint::from_bits(tokenomic.params.slash_rate); + let slash_decay = FixedPoint::from_num(1) - slash_rate; + assert_eq!(pow(slash_decay, HOUR_BLOCKS), fp!(0.9990004981683704595)); + // rho per hour + let rho = FixedPoint::from_bits(tokenomic.params.rho); + assert_eq!(pow(rho, HOUR_BLOCKS), fp!(1.00019999999998037056)); + // Budget per day + let budger_per_block = FixedPoint::from_bits(tokenomic.params.budget_per_block); + assert_eq!(budger_per_block * 3600 * 24 / 12, fp!(720000)); + // Cost estimation per year + assert_eq!( + tokenomic.op_cost(2000) / 12 * 3600 * 24 * 365, + fp!(171.71874999975847951583) + ); + }); + } + + #[test] + fn khala_tokenomics() { + new_test_ext().execute_with(|| { + migrations::initialize::(); + let params = TokenomicParameters::::get().unwrap(); + let tokenomic = Tokenomic::::new(params); + + assert_eq!(tokenomic.minimal_stake(1000), 1581_138830073177); + + assert_eq!( + tokenomic.ve(1000 * DOLLARS, 1000, 1), + fp!(2137.7551020408163265763) + ); + assert_eq!( + tokenomic.ve(1000 * DOLLARS, 1000, 2), + fp!(2137.7551020408163265763) + ); + assert_eq!( + tokenomic.ve(1000 * DOLLARS, 1000, 3), + fp!(2137.7551020408163265763) + ); + assert_eq!( + tokenomic.ve(1000 * DOLLARS, 1000, 4), + fp!(1995.23809523809523810696) + ); + assert_eq!( + tokenomic.ve(1000 * DOLLARS, 1000, 5), + fp!(1923.9795918367346938723) + ); + assert_eq!( + tokenomic.ve(5000 * DOLLARS, 2000, 4), + fp!(8190.47619047619047614897) + ); + }); + } + + #[test] + fn test_benchmark_report() { + use phala_types::messaging::{DecodedMessage, MessageOrigin, MiningReportEvent, Topic}; + new_test_ext().execute_with(|| { + set_block_1(); + setup_workers(1); + // 100 iters per sec + PhalaRegistry::internal_set_benchmark(&worker_pubkey(1), Some(600)); + assert_ok!(PhalaMining::bind(1, worker_pubkey(1))); + assert_ok!(PhalaMining::start_mining(1, 3000 * DOLLARS)); + // Though only the mining workers can send heartbeat, but we don't enforce it in + // the pallet, but just by pRuntime. Therefore we can directly throw a heartbeat + // response to test benchmark report. + + // 110% boost + elapse_seconds(100); + assert_ok!(PhalaMining::on_mining_message_received(DecodedMessage::< + MiningReportEvent, + > { + sender: MessageOrigin::Worker(worker_pubkey(1)), + destination: Topic::new(*b"phala/mining/report"), + payload: MiningReportEvent::Heartbeat { + session_id: 0, + challenge_block: 2, + challenge_time: 100_000, + iterations: 11000, + }, + })); + let miner = PhalaMining::miners(1).unwrap(); + assert_eq!( + miner.benchmark, + Benchmark { + p_init: 600, + p_instant: 660, + iterations: 11000, + mining_start_time: 0, + challenge_time_last: 100, + } + ); + + // 150% boost (capped) + elapse_seconds(100); + assert_ok!(PhalaMining::on_mining_message_received(DecodedMessage::< + MiningReportEvent, + > { + sender: MessageOrigin::Worker(worker_pubkey(1)), + destination: Topic::new(*b"phala/mining/report"), + payload: MiningReportEvent::Heartbeat { + session_id: 0, + challenge_block: 3, + challenge_time: 200_000, + iterations: 11000 + 15000, + }, + })); + let miner = PhalaMining::miners(1).unwrap(); + assert_eq!( + miner.benchmark, + Benchmark { + p_init: 600, + p_instant: 720, + iterations: 26000, + mining_start_time: 0, + challenge_time_last: 200, + } + ); + }); + } + + #[test] + fn test_benchmark_update() { + let mut b = Benchmark { + p_init: 100, + p_instant: 0, + iterations: 0, + mining_start_time: 0, + challenge_time_last: 0, + }; + // Normal + assert!(b.update(100, 1000, 90).is_ok()); + assert_eq!( + b, + Benchmark { + p_init: 100, + p_instant: 60, + iterations: 1000, + mining_start_time: 0, + challenge_time_last: 90, + } + ); + // Reset counter + assert!(b.update(200, 999, 190).is_ok()); + assert_eq!( + b, + Benchmark { + p_init: 100, + p_instant: 0, + iterations: 999, + mining_start_time: 0, + challenge_time_last: 190, + } + ); + } + } +} diff --git a/pallets/phala/src/mock.rs b/pallets/phala/src/mock.rs new file mode 100644 index 00000000..80c85171 --- /dev/null +++ b/pallets/phala/src/mock.rs @@ -0,0 +1,281 @@ +use crate::{ + attestation::{Attestation, AttestationValidator, Error as AttestationError, IasFields}, + mining, mq, registry, stakepool, +}; + +use frame_support::{ + parameter_types, + traits::{GenesisBuild, OnFinalize, OnInitialize}, +}; +use frame_support_test::TestRandomness; +use frame_system as system; +use phala_types::messaging::Message; +use sp_core::H256; +use sp_runtime::{ + testing::Header, + traits::{BlakeTwo256, IdentityLookup}, +}; + +pub(crate) type Balance = u128; + +type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; +type Block = frame_system::mocking::MockBlock; +pub(crate) type BlockNumber = u64; + +// Configure a mock runtime to test the pallet. +frame_support::construct_runtime!( + pub enum Test where + Block = Block, + NodeBlock = Block, + UncheckedExtrinsic = UncheckedExtrinsic, + { + System: frame_system::{Pallet, Call, Config, Storage, Event}, + Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent}, + Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, + // Pallets to test + PhalaMq: mq::{Pallet, Call}, + PhalaRegistry: registry::{Pallet, Event, Storage, Config}, + PhalaMining: mining::{Pallet, Event, Storage, Config}, + PhalaStakePool: stakepool::{Pallet, Event}, + } +); + +parameter_types! { + pub const BlockHashCount: u64 = 250; + pub const SS58Prefix: u8 = 20; + pub const MinimumPeriod: u64 = 1; + pub const ExpectedBlockTimeSec: u32 = 12; + pub const MinMiningStaking: Balance = 1 * DOLLARS; + pub const MinContribution: Balance = 1 * CENTS; + pub const MiningGracePeriod: u64 = 7 * 24 * 3600; +} +impl system::Config for Test { + type BaseCallFilter = frame_support::traits::Everything; + type BlockWeights = (); + type BlockLength = (); + type Origin = Origin; + type Call = Call; + type Index = u64; + type BlockNumber = u64; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = u64; + type Lookup = IdentityLookup; + type Header = Header; + type Event = Event; + type BlockHashCount = BlockHashCount; + type DbWeight = (); + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type SS58Prefix = SS58Prefix; + type OnSetCode = (); +} + +impl pallet_balances::Config for Test { + type Balance = Balance; + type DustRemoval = (); + type Event = Event; + type ExistentialDeposit = (); + type AccountStore = System; + type WeightInfo = (); + type MaxLocks = (); + type MaxReserves = (); + type ReserveIdentifier = [u8; 8]; +} + +impl pallet_timestamp::Config for Test { + type Moment = u64; + type OnTimestampSet = (); + type MinimumPeriod = MinimumPeriod; + type WeightInfo = (); +} + +pub const DOLLARS: Balance = 1_000_000_000_000; +pub const CENTS: Balance = DOLLARS / 100; + +impl mq::Config for Test { + type QueueNotifyConfig = (); + type CallMatcher = MqCallMatcher; +} + +pub struct MqCallMatcher; +impl mq::CallMatcher for MqCallMatcher { + fn match_call(call: &Call) -> Option<&mq::Call> { + match call { + Call::PhalaMq(mq_call) => Some(mq_call), + _ => None, + } + } +} + +impl registry::Config for Test { + type Event = Event; + type AttestationValidator = MockValidator; + type UnixTime = Timestamp; +} + +impl mining::Config for Test { + type Event = Event; + type ExpectedBlockTimeSec = ExpectedBlockTimeSec; + type Currency = Balances; + type Randomness = TestRandomness; + type OnReward = PhalaStakePool; + type OnUnbound = PhalaStakePool; + type OnReclaim = PhalaStakePool; + type OnStopped = PhalaStakePool; + type OnTreasurySettled = (); +} + +impl stakepool::Config for Test { + type Event = Event; + type Currency = Balances; + type MinContribution = MinContribution; + type GracePeriod = MiningGracePeriod; + type OnSlashed = (); +} + +pub struct MockValidator; +impl AttestationValidator for MockValidator { + fn validate( + _attestation: &Attestation, + _user_data_hash: &[u8; 32], + _now: u64, + ) -> Result { + Ok(IasFields { + mr_enclave: [0u8; 32], + mr_signer: [0u8; 32], + isv_prod_id: [0u8; 2], + isv_svn: [0u8; 2], + report_data: [0u8; 64], + confidence_level: 128u8, + }) + } +} + +// This function basically just builds a genesis storage key/value store according to +// our desired mockup. +pub fn new_test_ext() -> sp_io::TestExternalities { + let mut t = system::GenesisConfig::default() + .build_storage::() + .unwrap(); + // Inject genesis storage + let zero_pubkey = sp_core::sr25519::Public::from_raw([0u8; 32]); + let zero_ecdh_pubkey = Vec::from(&[0u8; 32][..]); + pallet_balances::GenesisConfig:: { + balances: vec![ + (1, 1000 * DOLLARS), + (2, 2000 * DOLLARS), + (3, 1000 * DOLLARS), + (99, 1_000_000 * DOLLARS), + (PhalaMining::account_id(), 690_000_000 * DOLLARS), + ], + } + .assimilate_storage(&mut t) + .unwrap(); + crate::registry::GenesisConfig:: { + workers: vec![(zero_pubkey.clone(), zero_ecdh_pubkey, None)], + gatekeepers: vec![(zero_pubkey.clone())], + benchmark_duration: 0u32, + } + .assimilate_storage(&mut t) + .unwrap(); + GenesisBuild::::assimilate_storage(&crate::mining::GenesisConfig::default(), &mut t) + .unwrap(); + sp_io::TestExternalities::new(t) +} + +pub fn set_block_1() { + System::set_block_number(1); +} + +pub fn take_events() -> Vec { + let evt = System::events() + .into_iter() + .map(|evt| evt.event) + .collect::>(); + println!("event(): {:?}", evt); + System::reset_events(); + evt +} + +pub fn take_messages() -> Vec { + let messages = PhalaMq::messages(); + println!("messages(): {:?}", messages); + mq::OutboundMessages::::kill(); + messages +} + +use phala_types::{EcdhPublicKey, WorkerPublicKey}; + +pub fn worker_pubkey(i: u8) -> WorkerPublicKey { + let mut raw = [0u8; 32]; + raw[31] = i; + raw[30] = 1; // distinguish with the genesis config + WorkerPublicKey::from_raw(raw) +} +pub fn ecdh_pubkey(i: u8) -> EcdhPublicKey { + let mut raw = [0u8; 32]; + raw[31] = i; + raw[30] = 1; // distinguish with the genesis config + EcdhPublicKey(raw) +} + +/// Sets up `n` workers starting from 1, registered and benchmarked. All owned by account1. +pub fn setup_workers(n: u8) { + use frame_support::assert_ok; + for i in 1..=n { + let worker = worker_pubkey(i); + assert_ok!(PhalaRegistry::force_register_worker( + Origin::root(), + worker.clone(), + ecdh_pubkey(1), + Some(1) + )); + PhalaRegistry::internal_set_benchmark(&worker, Some(1)); + } +} + +/// Sets up `n` workers starting from 1, registered and benchmarked, owned by the corresponding +/// accounts. +pub fn setup_workers_linked_operators(n: u8) { + use frame_support::assert_ok; + for i in 1..=n { + let worker = worker_pubkey(i); + assert_ok!(PhalaRegistry::force_register_worker( + Origin::root(), + worker.clone(), + ecdh_pubkey(1), + Some(i as _) + )); + PhalaRegistry::internal_set_benchmark(&worker, Some(1)); + } +} + +pub fn elapse_seconds(sec: u64) { + let now = Timestamp::get(); + Timestamp::set_timestamp(now + sec * 1000); +} + +pub fn elapse_cool_down() { + let now = Timestamp::get(); + Timestamp::set_timestamp(now + PhalaMining::cool_down_period() * 1000); +} + +pub fn teleport_to_block(n: u64) { + let now = System::block_number(); + PhalaStakePool::on_finalize(now); + PhalaMining::on_finalize(now); + PhalaRegistry::on_finalize(now); + PhalaMq::on_finalize(now); + System::on_finalize(now); + System::set_block_number(n); + System::on_initialize(System::block_number()); + PhalaMq::on_initialize(System::block_number()); + PhalaRegistry::on_initialize(System::block_number()); + PhalaMining::on_initialize(System::block_number()); + PhalaStakePool::on_initialize(System::block_number()); +} diff --git a/pallets/phala/src/mq.rs b/pallets/phala/src/mq.rs new file mode 100644 index 00000000..ebc778fd --- /dev/null +++ b/pallets/phala/src/mq.rs @@ -0,0 +1,240 @@ +pub use self::pallet::*; +pub use frame_support::storage::generator::StorageMap as StorageMapTrait; + +#[frame_support::pallet] +pub mod pallet { + use frame_support::{ + dispatch::DispatchResult, pallet_prelude::*, + traits::{ + PalletInfo, StorageVersion, + } + }; + use frame_system::pallet_prelude::*; + + use phala_types::messaging::{ + BindTopic, CommandPayload, ContractCommand, Message, MessageOrigin, Path, SignedMessage, + }; + use primitive_types::H256; + use sp_std::vec::Vec; + + #[pallet::config] + pub trait Config: frame_system::Config + crate::registry::Config { + type QueueNotifyConfig: QueueNotifyConfig; + type CallMatcher: CallMatcher; + } + + const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); + + #[pallet::pallet] + #[pallet::generate_store(pub(super) trait Store)] + #[pallet::storage_version(STORAGE_VERSION)] + pub struct Pallet(_); + + /// The next expected sequence of a ingress message coming from a certain sender (origin) + #[pallet::storage] + pub type OffchainIngress = StorageMap<_, Twox64Concat, MessageOrigin, u64>; + + #[pallet::storage] + pub type QueuedOutboundMessage = StorageValue<_, Vec>; + + /// Outbound messages at the current block. + /// + /// It will be cleared at the beginning of every block. + #[pallet::storage] + #[pallet::getter(fn messages)] + pub type OutboundMessages = StorageValue<_, Vec, ValueQuery>; + + #[pallet::error] + pub enum Error { + BadSender, + BadSequence, + BadDestination, + } + + #[pallet::call] + impl Pallet + where + T: crate::registry::Config, + T::AccountId: IntoH256, + { + /// Syncs an unverified offchain message to the message queue + #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] + pub fn sync_offchain_message( + origin: OriginFor, + signed_message: SignedMessage, + ) -> DispatchResult { + ensure_signed(origin)?; + + // Check sender + let sender = &signed_message.message.sender; + ensure!(sender.is_offchain(), Error::::BadSender); + + // Check destination + ensure!( + signed_message.message.destination.is_valid(), + Error::::BadDestination + ); + + // Check ingress sequence + let expected_seq = OffchainIngress::::get(sender).unwrap_or(0); + ensure!( + signed_message.sequence == expected_seq, + Error::::BadSequence + ); + // Validate signature + crate::registry::Pallet::::check_message(&signed_message)?; + // Update ingress + OffchainIngress::::insert(sender.clone(), expected_seq + 1); + // Call dispatch_message + Self::dispatch_message(signed_message.message); + Ok(()) + } + + // Messaging API for end user. + // TODO.kevin: confirm the weight + #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] + pub fn push_message( + origin: OriginFor, + destination: Vec, + payload: Vec, + ) -> DispatchResult { + let origin = ensure_signed(origin)?; + let sender = MessageOrigin::AccountId(origin.into_h256()); + let message = Message::new(sender, destination, payload); + Self::dispatch_message(message); + Ok(()) + } + } + + impl Pallet { + /// Push a validated message to the queue + pub fn dispatch_message(message: Message) { + // Notify subcribers + if let Err(_err) = T::QueueNotifyConfig::on_message_received(&message) { + // TODO: Consider to emit a message as warning. We can't stop dispatching message in any situation. + } + // Notify the off-chain components + if T::QueueNotifyConfig::should_push_message(&message) { + OutboundMessages::::append(message); + } + } + + pub fn push_message_to( + topic: impl Into, + sender: MessageOrigin, + payload: M, + ) { + let message = Message::new(sender, topic, payload.encode()); + Self::dispatch_message(message); + } + + pub fn push_bound_message(sender: MessageOrigin, payload: M) { + Self::push_message_to(M::topic(), sender, payload) + } + + pub fn queue_bound_message(sender: MessageOrigin, payload: M) { + let message = Message::new(sender, M::topic(), payload.encode()); + QueuedOutboundMessage::::append(message); + } + + pub fn offchain_ingress(sender: &MessageOrigin) -> Option { + OffchainIngress::::get(sender) + } + } + + #[pallet::hooks] + impl Hooks> for Pallet { + fn on_initialize(_now: BlockNumberFor) -> Weight { + // Clear the previously pushed offchain messages + OutboundMessages::::kill(); + + // Send out queued message from the previous block + if let Some(msgs) = QueuedOutboundMessage::::take() { + for message in msgs.into_iter() { + Self::dispatch_message(message); + } + } + 0 + } + } + + /// Defines the behavior of received messages. + pub trait QueueNotifyConfig { + /// If true, the message queue push this message to the subscribers + fn should_push_message(message: &Message) -> bool { + message.destination.is_offchain() + } + /// Handles an incoming message + fn on_message_received(_message: &Message) -> DispatchResult { + Ok(()) + } + } + impl QueueNotifyConfig for () {} + + /// Needs an extrenal helper struct to extract MqCall from all callables + pub trait CallMatcher { + fn match_call(call: &T::Call) -> Option<&Call> + where + ::AccountId: IntoH256; + } + + pub trait IntoH256 { + fn into_h256(self) -> H256; + } + + impl IntoH256 for u32 { + fn into_h256(self) -> H256 { + H256::from_low_u64_be(self as _) + } + } + + impl IntoH256 for u64 { + fn into_h256(self) -> H256 { + H256::from_low_u64_be(self) + } + } + + impl IntoH256 for sp_runtime::AccountId32 { + fn into_h256(self) -> H256 { + let bytes: [u8; 32] = *self.as_ref(); + bytes.into() + } + } + + pub trait MessageOriginInfo: Sized + 'static { + type Config: Config; + + fn message_origin() -> MessageOrigin { + let name = + <::Config as frame_system::Config>::PalletInfo::name::< + Self, + >() + .expect("Pallet should have a name"); + MessageOrigin::Pallet(name.as_bytes().to_vec()) + } + + fn push_message(payload: impl Encode + BindTopic) { + Pallet::::push_bound_message(Self::message_origin(), payload); + } + + fn push_message_to(topic: impl Into, payload: impl Encode) { + Pallet::::push_message_to(topic, Self::message_origin(), payload); + } + + fn push_command(command: Cmd) { + use phala_types::contract::command_topic; + let topic = command_topic(Cmd::contract_id()); + let message = CommandPayload::Plain(command); + Self::push_message_to(topic, message); + } + + /// Enqueues a message to push in the beginning of the next block + fn queue_message(payload: impl Encode + BindTopic) { + Pallet::::queue_bound_message(Self::message_origin(), payload); + } + } +} + +/// Provides `SignedExtension` to check message sequence. +mod check_seq; +pub use check_seq::{tag, CheckMqSequence}; diff --git a/pallets/phala/src/mq/check_seq.rs b/pallets/phala/src/mq/check_seq.rs new file mode 100644 index 00000000..a0076b5f --- /dev/null +++ b/pallets/phala/src/mq/check_seq.rs @@ -0,0 +1,182 @@ +use super::{Call, CallMatcher, Config, IntoH256, OffchainIngress}; + +use codec::{Decode, Encode}; +use frame_support::weights::DispatchInfo; +use phala_types::messaging::MessageOrigin; +use sp_runtime::traits::{DispatchInfoOf, Dispatchable, SignedExtension}; +use sp_runtime::transaction_validity::{ + InvalidTransaction, TransactionValidity, TransactionValidityError, ValidTransaction, +}; +use sp_std::marker::PhantomData; +use sp_std::vec::Vec; +use sp_std::vec; + +/// Requires a message queue message must has correct sequence id. +/// +/// We only care about `sync_offchain_message` call. +/// +/// When a message comes to the transaction pool, we drop it immediately if its sequence is +/// less than the expected one. Otherwise we keep the message in the pool for a while, hoping there +/// will be a sequence of continuous messages to be included in the future block. +#[derive(Encode, Decode, Clone, Eq, PartialEq)] +pub struct CheckMqSequence(PhantomData); + +pub fn tag(sender: &MessageOrigin, seq: u64) -> Vec { + ("PhalaMqOffchainMessages", sender, seq).encode() +} + +impl Default for CheckMqSequence { + fn default() -> Self { + Self(Default::default()) + } +} + +impl CheckMqSequence { + pub fn new() -> Self { + Default::default() + } +} + +impl sp_std::fmt::Debug for CheckMqSequence { + #[cfg(feature = "std")] + fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { + write!(f, "CheckMqSequence()") + } + + #[cfg(not(feature = "std"))] + fn fmt(&self, _: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { + Ok(()) + } +} + +impl SignedExtension for CheckMqSequence +where + T::Call: Dispatchable, + T: Send + Sync, + T::AccountId: IntoH256, +{ + const IDENTIFIER: &'static str = "CheckMqSequence"; + type AccountId = T::AccountId; + type Call = T::Call; + type AdditionalSigned = (); + type Pre = (); + + fn additional_signed(&self) -> sp_std::result::Result<(), TransactionValidityError> { + Ok(()) + } + + fn pre_dispatch( + self, + _who: &Self::AccountId, + call: &Self::Call, + _info: &DispatchInfoOf, + _len: usize, + ) -> Result<(), TransactionValidityError> { + let signed_message = match T::CallMatcher::match_call(call) { + Some(Call::sync_offchain_message(signed_message)) => signed_message, + _ => return Ok(()), + }; + let sender = &signed_message.message.sender; + let sequence = signed_message.sequence; + let expected_seq = OffchainIngress::::get(sender).unwrap_or(0); + // Strictly require the message to include must match the expected sequence id + if sequence != expected_seq { + return Err(if sequence < expected_seq { + InvalidTransaction::Stale + } else { + InvalidTransaction::Future + } + .into()); + } + Ok(()) + } + + fn validate( + &self, + _who: &Self::AccountId, + call: &Self::Call, + _info: &DispatchInfoOf, + _len: usize, + ) -> TransactionValidity { + let signed_message = match T::CallMatcher::match_call(call) { + Some(Call::sync_offchain_message(signed_message)) => signed_message, + _ => return Ok(ValidTransaction::default()), + }; + let sender = &signed_message.message.sender; + let sequence = signed_message.sequence; + let expected_seq = OffchainIngress::::get(sender).unwrap_or(0); + // Drop the stale message immediately + if sequence < expected_seq { + return InvalidTransaction::Stale.into(); + } + + // Otherwise build a dependency graph based on (sender, sequence), hoping that it can be + // included later + let provides = vec![tag(sender, sequence)]; + let requires = if sequence > expected_seq { + vec![tag(sender, sequence - 1)] + } else { + vec![] + }; + Ok(ValidTransaction { + provides, + requires, + ..Default::default() + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::mock::{new_test_ext, worker_pubkey, Call as TestCall, Test}; + use frame_support::{assert_noop, assert_ok, weights::DispatchInfo}; + use phala_types::messaging::{Message, MessageOrigin, SignedMessage, Topic}; + + #[test] + fn test_check_mq_seq_works() { + new_test_ext().execute_with(|| { + OffchainIngress::::insert(&MessageOrigin::Worker(worker_pubkey(1)), 1); + OffchainIngress::::insert(&MessageOrigin::Worker(worker_pubkey(2)), 2); + let info = DispatchInfo::default(); + let len = 0_usize; + // stale + assert_noop!( + extra().validate(&1, &sync_msg_call(1, 0), &info, len), + InvalidTransaction::Stale + ); + assert_noop!( + extra().pre_dispatch(&1, &sync_msg_call(1, 0), &info, len), + InvalidTransaction::Stale + ); + // correct + assert_ok!(extra().validate(&1, &sync_msg_call(1, 1), &info, len)); + assert_ok!(extra().pre_dispatch(&1, &sync_msg_call(1, 1), &info, len)); + // future + assert_ok!(extra().validate(&1, &sync_msg_call(1, 2), &info, len)); + assert_noop!( + extra().pre_dispatch(&1, &sync_msg_call(1, 2), &info, len), + InvalidTransaction::Future + ); + // no cross dependency + assert_ok!(extra().validate(&1, &sync_msg_call(2, 2), &info, len)); + assert_ok!(extra().pre_dispatch(&1, &sync_msg_call(2, 2), &info, len)); + }) + } + + fn extra() -> CheckMqSequence { + CheckMqSequence::::new() + } + + fn sync_msg_call(i: u8, seq: u64) -> TestCall { + TestCall::PhalaMq(Call::::sync_offchain_message(SignedMessage { + message: Message::new( + MessageOrigin::Worker(worker_pubkey(i)), + Topic::new(*b""), + Vec::new(), + ), + sequence: seq, + signature: Vec::new(), + })) + } +} diff --git a/pallets/phala/src/registry.rs b/pallets/phala/src/registry.rs new file mode 100644 index 00000000..304888fd --- /dev/null +++ b/pallets/phala/src/registry.rs @@ -0,0 +1,606 @@ +/// Public key registry for workers and contracts. +pub use self::pallet::*; + +#[frame_support::pallet] +pub mod pallet { + use codec::Encode; + use frame_support::{ + dispatch::DispatchResult, + pallet_prelude::*, + traits::{StorageVersion, UnixTime}, + }; + use frame_system::pallet_prelude::*; + use sp_core::H256; + use sp_runtime::SaturatedConversion; + use sp_std::prelude::*; + use sp_std::{convert::TryFrom, vec}; + + use crate::attestation::{AttestationValidator, Error as AttestationError}; + use crate::mq::MessageOriginInfo; + // Re-export + pub use crate::attestation::{Attestation, IasValidator}; + + use phala_types::{ + messaging::{ + self, bind_topic, DecodedMessage, GatekeeperChange, GatekeeperLaunch, MessageOrigin, + SignedMessage, SystemEvent, WorkerEvent, + }, + ContractPublicKey, EcdhPublicKey, MasterPublicKey, WorkerPublicKey, WorkerRegistrationInfo, + }; + + bind_topic!(RegistryEvent, b"^phala/registry/event"); + #[derive(Encode, Decode, Clone, Debug)] + pub enum RegistryEvent { + BenchReport { start_time: u64, iterations: u64 }, + MasterPubkey { master_pubkey: MasterPublicKey }, + } + + #[pallet::config] + pub trait Config: frame_system::Config { + type Event: From + IsType<::Event>; + + type UnixTime: UnixTime; + type AttestationValidator: AttestationValidator; + } + + const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); + + #[pallet::pallet] + #[pallet::generate_store(pub(super) trait Store)] + #[pallet::storage_version(STORAGE_VERSION)] + pub struct Pallet(_); + + /// Gatekeeper pubkey list + #[pallet::storage] + pub type Gatekeeper = StorageValue<_, Vec, ValueQuery>; + + /// Gatekeeper master pubkey + #[pallet::storage] + pub type GatekeeperMasterPubkey = StorageValue<_, MasterPublicKey>; + + /// Mapping from worker pubkey to WorkerInfo + #[pallet::storage] + pub type Workers = + StorageMap<_, Twox64Concat, WorkerPublicKey, WorkerInfo>; + + /// Mapping from contract address to pubkey + #[pallet::storage] + pub type ContractKey = StorageMap<_, Twox64Concat, H256, ContractPublicKey>; + + /// Pubkey for secret topics. + #[pallet::storage] + pub type TopicKey = StorageMap<_, Blake2_128Concat, Vec, Vec>; + + #[pallet::storage] + pub type BenchmarkDuration = StorageValue<_, u32>; + + #[pallet::event] + #[pallet::generate_deposit(pub(super) fn deposit_event)] + pub enum Event { + GatekeeperAdded(WorkerPublicKey), + } + + #[pallet::error] + pub enum Error { + CannotHandleUnknownMessage, + InvalidSender, + InvalidPubKey, + MalformedSignature, + InvalidSignatureLength, + InvalidSignature, + UnknwonContract, + // IAS related + InvalidIASSigningCert, + InvalidReport, + InvalidQuoteStatus, + BadIASReport, + OutdatedIASReport, + UnknownQuoteBodyFormat, + // Report validation + InvalidRuntimeInfoHash, + InvalidRuntimeInfo, + InvalidInput, + InvalidBenchReport, + WorkerNotFound, + // Gatekeeper related + InvalidGatekeeper, + InvalidMasterPubkey, + MasterKeyMismatch, + MasterKeyUninitialized, + } + + #[pallet::call] + impl Pallet + where + T: crate::mq::Config, + { + #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] + pub fn force_set_benchmark_duration(origin: OriginFor, value: u32) -> DispatchResult { + ensure_root(origin)?; + BenchmarkDuration::::put(value); + Ok(()) + } + + /// Force register a worker with the given pubkey with sudo permission + #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] + pub fn force_register_worker( + origin: OriginFor, + pubkey: WorkerPublicKey, + ecdh_pubkey: EcdhPublicKey, + operator: Option, + ) -> DispatchResult { + ensure_root(origin)?; + let worker_info = WorkerInfo { + pubkey, + ecdh_pubkey, + runtime_version: 0, + last_updated: 0, + operator, + confidence_level: 128u8, + initial_score: None, + features: vec![1, 4], + }; + Workers::::insert(&worker_info.pubkey, &worker_info); + Self::push_message(SystemEvent::new_worker_event( + pubkey, + WorkerEvent::Registered(messaging::WorkerInfo { + confidence_level: worker_info.confidence_level, + }), + )); + Ok(()) + } + + /// Force register a contract pubkey + #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] + pub fn force_register_contract( + origin: OriginFor, + contract: H256, + pubkey: ContractPublicKey, + ) -> DispatchResult { + ensure_root(origin)?; + ContractKey::::insert(contract, pubkey); + Ok(()) + } + + /// Force register a topic pubkey + #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] + pub fn force_register_topic_pubkey( + origin: OriginFor, + topic: Vec, + pubkey: Vec, + ) -> DispatchResult { + ensure_root(origin)?; + TopicKey::::insert(topic, pubkey); + Ok(()) + } + + /// Register a gatekeeper. + /// + /// Must be called by the Root origin. + #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] + pub fn register_gatekeeper( + origin: OriginFor, + gatekeeper: WorkerPublicKey, + ) -> DispatchResult { + ensure_root(origin)?; + let mut gatekeepers = Gatekeeper::::get(); + + // wait for the lead gatekeeper to upload the master pubkey + ensure!( + gatekeepers.is_empty() || GatekeeperMasterPubkey::::get().is_some(), + Error::::MasterKeyUninitialized + ); + + if !gatekeepers.contains(&gatekeeper) { + let worker_info = + Workers::::try_get(&gatekeeper).or(Err(Error::::WorkerNotFound))?; + gatekeepers.push(gatekeeper); + let gatekeeper_count = gatekeepers.len() as u32; + Gatekeeper::::put(gatekeepers); + + if gatekeeper_count == 1 { + Self::push_message(GatekeeperLaunch::first_gatekeeper( + gatekeeper, + worker_info.ecdh_pubkey, + )); + } else { + Self::push_message(GatekeeperChange::gatekeeper_registered( + gatekeeper, + worker_info.ecdh_pubkey, + )); + } + } + Ok(()) + } + + /// Unregister a gatekeeper, must be called by gatekeeper himself + /// + /// Requirements: + // 1. `sig` is the valid signature of specific unregister message + #[allow(unused_variables)] + #[pallet::weight(0)] + pub fn unregister_gatekeeper( + origin: OriginFor, + gatekeeper: WorkerPublicKey, + sig: [u8; 64], + ) -> DispatchResult { + // TODO.shelven + panic!("unimpleneted"); + } + + /// (called by anyone on behalf of a worker) + #[pallet::weight(0)] + pub fn register_worker( + origin: OriginFor, + pruntime_info: WorkerRegistrationInfo, + attestation: Attestation, + ) -> DispatchResult { + ensure_signed(origin)?; + // Validate RA report & embedded user data + let now = T::UnixTime::now().as_secs().saturated_into::(); + let runtime_info_hash = crate::hashing::blake2_256(&Encode::encode(&pruntime_info)); + let fields = T::AttestationValidator::validate(&attestation, &runtime_info_hash, now) + .map_err(Into::>::into)?; + // Validate fields + + // TODO(h4x): Add back mrenclave whitelist check + // let whitelist = MREnclaveWhitelist::get(); + // let t_mrenclave = Self::extend_mrenclave(&fields.mr_enclave, &fields.mr_signer, &fields.isv_prod_id, &fields.isv_svn); + // ensure!(whitelist.contains(&t_mrenclave), Error::::WrongMREnclave); + + // TODO(h4x): Validate genesis block hash + + // Update the registry + let pubkey = pruntime_info.pubkey; + Workers::::mutate(pubkey, |v| { + match v { + Some(worker_info) => { + // Case 1 - Refresh the RA report, optionally update the operator, and redo benchmark + worker_info.last_updated = now; + worker_info.operator = pruntime_info.operator; + Self::push_message(SystemEvent::new_worker_event( + pubkey, + WorkerEvent::Registered(messaging::WorkerInfo { + confidence_level: fields.confidence_level, + }), + )); + } + None => { + // Case 2 - New worker register + *v = Some(WorkerInfo { + pubkey, + ecdh_pubkey: pruntime_info.ecdh_pubkey, + runtime_version: pruntime_info.version, + last_updated: now, + operator: pruntime_info.operator, + confidence_level: fields.confidence_level, + initial_score: None, + features: pruntime_info.features, + }); + Self::push_message(SystemEvent::new_worker_event( + pubkey, + WorkerEvent::Registered(messaging::WorkerInfo { + confidence_level: fields.confidence_level, + }), + )); + } + } + }); + // Trigger benchmark anyway + let duration = BenchmarkDuration::::get().unwrap_or_default(); + Self::push_message(SystemEvent::new_worker_event( + pubkey, + WorkerEvent::BenchStart { duration }, + )); + Ok(()) + } + } + + // TODO.kevin: Move it to mq + impl Pallet + where + T: crate::mq::Config, + { + pub fn check_message(message: &SignedMessage) -> DispatchResult { + let pubkey_copy: ContractPublicKey; + let pubkey = match &message.message.sender { + MessageOrigin::Worker(pubkey) => pubkey, + MessageOrigin::Contract(id) => { + pubkey_copy = ContractKey::::get(id).ok_or(Error::::UnknwonContract)?; + &pubkey_copy + } + MessageOrigin::Gatekeeper => { + // GatekeeperMasterPubkey should not be None + pubkey_copy = GatekeeperMasterPubkey::::get() + .ok_or(Error::::MasterKeyUninitialized)?; + &pubkey_copy + } + _ => return Err(Error::::CannotHandleUnknownMessage.into()), + }; + Self::verify_signature(pubkey, message) + } + + fn verify_signature(pubkey: &WorkerPublicKey, message: &SignedMessage) -> DispatchResult { + let raw_sig = &message.signature; + ensure!(raw_sig.len() == 64, Error::::InvalidSignatureLength); + let sig = sp_core::sr25519::Signature::try_from(raw_sig.as_slice()) + .or(Err(Error::::MalformedSignature))?; + let data = message.data_be_signed(); + ensure!( + sp_io::crypto::sr25519_verify(&sig, &data, pubkey), + Error::::InvalidSignature + ); + Ok(()) + } + + pub fn on_message_received(message: DecodedMessage) -> DispatchResult { + let worker_pubkey = match &message.sender { + MessageOrigin::Worker(key) => key, + _ => return Err(Error::::InvalidSender.into()), + }; + + match message.payload { + RegistryEvent::BenchReport { + start_time, + iterations, + } => { + let now = T::UnixTime::now().as_millis().saturated_into::(); + if now <= start_time { + // Oops, should not happen + return Err(Error::::InvalidBenchReport.into()); + } + + const MAX_SCORE: u32 = 6000; + let score = iterations / ((now - start_time) / 1000); + let score = score * 6; // iterations per 6s + let score = MAX_SCORE.min(score as u32); + + Workers::::mutate(worker_pubkey, |val| { + if let Some(val) = val { + val.initial_score = Some(score); + val.last_updated = now; + } + }); + + Self::push_message(SystemEvent::new_worker_event( + *worker_pubkey, + WorkerEvent::BenchScore(score), + )); + } + RegistryEvent::MasterPubkey { master_pubkey } => { + let gatekeepers = Gatekeeper::::get(); + if !gatekeepers.contains(worker_pubkey) { + return Err(Error::::InvalidGatekeeper.into()); + } + + match GatekeeperMasterPubkey::::try_get() { + Ok(saved_pubkey) => { + ensure!( + saved_pubkey.0 == master_pubkey.0, + Error::::MasterKeyMismatch // Oops, this is really bad + ); + } + _ => { + GatekeeperMasterPubkey::::put(master_pubkey); + Self::push_message(GatekeeperLaunch::master_pubkey_on_chain( + master_pubkey, + )); + } + } + } + } + Ok(()) + } + + #[cfg(test)] + pub(crate) fn internal_set_benchmark(worker: &WorkerPublicKey, score: Option) { + Workers::::mutate(worker, |w| { + if let Some(w) = w { + w.initial_score = score; + } + }); + } + } + + // Genesis config build + + /// Genesis config to add some genesis worker or gatekeeper for testing purpose. + #[pallet::genesis_config] + pub struct GenesisConfig { + /// [(identity, ecdh, operator)] + pub workers: Vec<(WorkerPublicKey, Vec, Option)>, + /// [identity] + pub gatekeepers: Vec, + pub benchmark_duration: u32, + } + + #[cfg(feature = "std")] + impl Default for GenesisConfig { + fn default() -> Self { + Self { + workers: Default::default(), + gatekeepers: Default::default(), + benchmark_duration: 8u32, + } + } + } + + #[pallet::genesis_build] + impl GenesisBuild for GenesisConfig + where + T: crate::mq::Config, + { + fn build(&self) { + use std::convert::TryInto; + for (pubkey, ecdh_pubkey, operator) in &self.workers { + Workers::::insert( + &pubkey, + &WorkerInfo { + pubkey: *pubkey, + ecdh_pubkey: ecdh_pubkey.as_slice().try_into().expect("Bad ecdh key"), + runtime_version: 0, + last_updated: 0, + operator: operator.clone(), + confidence_level: 128u8, + initial_score: None, + features: vec![1, 4], + }, + ); + Pallet::::queue_message(SystemEvent::new_worker_event( + *pubkey, + WorkerEvent::Registered(messaging::WorkerInfo { + confidence_level: 128u8, + }), + )); + Pallet::::queue_message(SystemEvent::new_worker_event( + *pubkey, + WorkerEvent::BenchStart { + duration: self.benchmark_duration, + }, + )); + BenchmarkDuration::::put(self.benchmark_duration); + } + let mut gatekeepers: Vec = Vec::new(); + for gatekeeper in &self.gatekeepers { + if let Ok(worker_info) = Workers::::try_get(&gatekeeper) { + gatekeepers.push(*gatekeeper); + let gatekeeper_count = gatekeepers.len() as u32; + Gatekeeper::::put(gatekeepers.clone()); + if gatekeeper_count == 1 { + Pallet::::queue_message(GatekeeperLaunch::first_gatekeeper( + *gatekeeper, + worker_info.ecdh_pubkey, + )); + } else { + Pallet::::queue_message(GatekeeperChange::gatekeeper_registered( + *gatekeeper, + worker_info.ecdh_pubkey, + )); + } + } + } + } + } + + #[pallet::hooks] + impl Hooks> for Pallet { + fn on_runtime_upgrade() -> Weight { + let mut w = 0; + let old = Self::on_chain_storage_version(); + w += T::DbWeight::get().reads(1); + + if old == 0 { + w += migrations::initialize::(); + STORAGE_VERSION.put::>(); + w += T::DbWeight::get().writes(1); + } + w + } + } + + mod migrations { + use super::{BenchmarkDuration, Config}; + use frame_support::pallet_prelude::*; + + pub fn initialize() -> Weight { + log::info!("phala_pallet::registry: initialize()"); + BenchmarkDuration::::put(50); + T::DbWeight::get().writes(1) + } + } + + impl MessageOriginInfo for Pallet { + type Config = T; + } + + #[derive(Encode, Decode, Default, Debug, Clone)] + pub struct WorkerInfo { + // identity + pubkey: WorkerPublicKey, + ecdh_pubkey: EcdhPublicKey, + // system + runtime_version: u32, + last_updated: u64, + pub operator: Option, + // platform + pub confidence_level: u8, + // scoring + pub initial_score: Option, + features: Vec, + } + + impl From for Error { + fn from(err: AttestationError) -> Self { + match err { + AttestationError::InvalidIASSigningCert => Self::InvalidIASSigningCert, + AttestationError::InvalidReport => Self::InvalidReport, + AttestationError::InvalidQuoteStatus => Self::InvalidQuoteStatus, + AttestationError::BadIASReport => Self::BadIASReport, + AttestationError::OutdatedIASReport => Self::OutdatedIASReport, + AttestationError::UnknownQuoteBodyFormat => Self::UnknownQuoteBodyFormat, + AttestationError::InvalidUserDataHash => Self::InvalidRuntimeInfoHash, + } + } + } + + #[cfg(test)] + mod test { + use frame_support::assert_ok; + + use super::*; + use crate::mock::{ + ecdh_pubkey, elapse_seconds, new_test_ext, set_block_1, worker_pubkey, Origin, Test, + }; + // Pallets + use crate::mock::PhalaRegistry; + + #[test] + fn test_register_worker() { + new_test_ext().execute_with(|| { + set_block_1(); + // New registration + assert_ok!(PhalaRegistry::register_worker( + Origin::signed(1), + WorkerRegistrationInfo:: { + version: 1, + machine_id: Default::default(), + pubkey: worker_pubkey(1), + ecdh_pubkey: ecdh_pubkey(1), + genesis_block_hash: Default::default(), + features: vec![4, 1], + operator: Some(1), + }, + Attestation::SgxIas { + ra_report: Vec::new(), + signature: Vec::new(), + raw_signing_cert: Vec::new(), + }, + )); + let worker = Workers::::get(worker_pubkey(1)).unwrap(); + assert_eq!(worker.operator, Some(1)); + // Refreshed validator + elapse_seconds(100); + assert_ok!(PhalaRegistry::register_worker( + Origin::signed(1), + WorkerRegistrationInfo:: { + version: 1, + machine_id: Default::default(), + pubkey: worker_pubkey(1), + ecdh_pubkey: ecdh_pubkey(1), + genesis_block_hash: Default::default(), + features: vec![4, 1], + operator: Some(2), + }, + Attestation::SgxIas { + ra_report: Vec::new(), + signature: Vec::new(), + raw_signing_cert: Vec::new(), + }, + )); + let worker = Workers::::get(worker_pubkey(1)).unwrap(); + assert_eq!(worker.last_updated, 100); + assert_eq!(worker.operator, Some(2)); + }); + } + } +} diff --git a/pallets/phala/src/stakepool.rs b/pallets/phala/src/stakepool.rs new file mode 100644 index 00000000..a22d1273 --- /dev/null +++ b/pallets/phala/src/stakepool.rs @@ -0,0 +1,2615 @@ +pub use self::pallet::*; + +#[allow(unused_variables)] +#[frame_support::pallet] +pub mod pallet { + use crate::accumulator::Accumulator; + use crate::balance_convert::{div as bdiv, mul as bmul, FixedPointConvert}; + use crate::fixed_point::CodecFixedPoint; + use crate::mining; + use crate::registry; + + use fixed::types::U64F64 as FixedPoint; + use fixed_macro::types::U64F64 as fp; + + use frame_support::{ + dispatch::DispatchResult, + pallet_prelude::*, + traits::{ + Currency, LockIdentifier, LockableCurrency, OnUnbalanced, UnixTime, WithdrawReasons, + StorageVersion, + }, + }; + use frame_system::pallet_prelude::*; + use sp_runtime::{ + traits::{Saturating, TrailingZeroInput, Zero}, + Permill, SaturatedConversion, + }; + use sp_std::{collections::vec_deque::VecDeque, fmt::Display, prelude::*, vec}; + + use phala_types::{messaging::SettleInfo, WorkerPublicKey}; + + const STAKING_ID: LockIdentifier = *b"phala/sp"; + + pub trait Ledger { + /// Increases the locked amount for a user + /// + /// Unsafe: it assumes there's enough free `amount` + fn ledger_accrue(who: &AccountId, amount: Balance); + /// Decreases the locked amount for a user + /// + /// Unsafe: it assumes there's enough locked `amount` + fn ledger_reduce(who: &AccountId, amount: Balance); + /// Gets the locked amount of `who` + fn ledger_query(who: &AccountId) -> Balance; + } + + #[pallet::config] + pub trait Config: frame_system::Config + registry::Config + mining::Config { + type Event: From> + IsType<::Event>; + + type Currency: LockableCurrency; + #[pallet::constant] + type MinContribution: Get>; + + /// The grace period for force withdraw request, in seconds. + #[pallet::constant] + type GracePeriod: Get; + + /// The handler to absorb the slashed amount. + type OnSlashed: OnUnbalanced>; + } + + const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); + + #[pallet::pallet] + #[pallet::generate_store(pub(super) trait Store)] + #[pallet::storage_version(STORAGE_VERSION)] + pub struct Pallet(_); + + /// Mapping from pool id to PoolInfo + #[pallet::storage] + #[pallet::getter(fn stake_pools)] + pub type StakePools = + StorageMap<_, Twox64Concat, u64, PoolInfo>>; + + /// Mapping from (pid, staker) to UserStakeInfo + #[pallet::storage] + #[pallet::getter(fn pool_stakers)] + pub type PoolStakers = + StorageMap<_, Twox64Concat, (u64, T::AccountId), UserStakeInfo>>; + + /// The number of total pools + #[pallet::storage] + #[pallet::getter(fn pool_count)] + pub type PoolCount = StorageValue<_, u64, ValueQuery>; + + /// Mapping from workers to the pool they belong to + /// + /// The map entry lasts from `add_worker()` to `remove_worker()` or force unbinding. + #[pallet::storage] + pub type WorkerAssignments = StorageMap<_, Twox64Concat, WorkerPublicKey, u64>; + + /// Mapping a miner sub-account to the pool it belongs to. + /// + /// The map entry lasts from `add_worker()` to `remove_worker()` or force unbinding. + #[pallet::storage] + pub type SubAccountAssignments = StorageMap<_, Twox64Concat, T::AccountId, u64>; + + /// Mapping staker to it's the balance locked in all pools + #[pallet::storage] + #[pallet::getter(fn stake_ledger)] + pub type StakeLedger = StorageMap<_, Twox64Concat, T::AccountId, BalanceOf>; + + /// Mapping from the block timestamp to pools that has withdrawal requests queued in that block + #[pallet::storage] + #[pallet::getter(fn withdrawal_queued_pools)] + pub type WithdrawalQueuedPools = StorageMap<_, Twox64Concat, u64, Vec>; + + /// Queue that contains all block's timestamp, in that block contains the waiting withdraw reqeust. + /// This queue has a max size of (T::GracePeriod * 8) bytes + #[pallet::storage] + #[pallet::getter(fn withdrawal_timestamps)] + pub type WithdrawalTimestamps = StorageValue<_, VecDeque, ValueQuery>; + + #[pallet::event] + #[pallet::generate_deposit(pub(super) fn deposit_event)] + #[pallet::metadata(T::AccountId = "AccountId", BalanceOf = "Balance")] + pub enum Event { + /// \[owner, pid\] + PoolCreated(T::AccountId, u64), + /// The real commission ratio is commission/1_000_000u32. \[pid, commission\] + PoolCommissionSet(u64, u32), + /// \[pid, cap\] + PoolCapacitySet(u64, BalanceOf), + /// \[pid, worker\] + PoolWorkerAdded(u64, WorkerPublicKey), + /// \[pid, user, amount\] + Contribution(u64, T::AccountId, BalanceOf), + /// \[pid, user, amount\] + Withdrawal(u64, T::AccountId, BalanceOf), + /// \[pid, user, amount\] + RewardsWithdrawn(u64, T::AccountId, BalanceOf), + /// \[pid, amount\] + PoolSlashed(u64, BalanceOf), + /// \[pid, account, amount\] + SlashSettled(u64, T::AccountId, BalanceOf), + /// Some reward is dismissed because the worker is no longer bound to a pool. \[worker, amount\] + RewardDismissedNotInPool(WorkerPublicKey, BalanceOf), + /// Some reward is dismissed because the pool doesn't have any share. \[pid, amount\] + RewardDismissedNoShare(u64, BalanceOf), + } + + #[pallet::error] + pub enum Error { + WorkerNotRegistered, + BenchmarkMissing, + WorkerExists, + WorkerDoesNotExist, + WorerInAnotherPool, + UnauthorizedOperator, + UnauthorizedPoolOwner, + /// The stake capacity is set too low for the existing stake + InadequateCapacity, + StakeExceedsCapacity, + PoolDoesNotExist, + _PoolIsBusy, + InsufficientContribution, + InsufficientBalance, + PoolStakeNotFound, + InsufficientFreeStake, + InvalidWithdrawalAmount, + FailedToBindMinerAndWorker, + /// Internal error: Cannot withdraw from the subsidy pool. This should never happen. + InternalSubsidyPoolCannotWithdraw, + /// The pool has already got all the stake completely slashed. + /// + /// In this case, no more funds can be contributed to the pool until all the pending slash + /// has been resolved. + PoolBankrupt, + NoRewardToClaim, + } + + type BalanceOf = + <::Currency as Currency<::AccountId>>::Balance; + + type NegativeImbalanceOf = <::Currency as Currency< + ::AccountId, + >>::NegativeImbalance; + + #[pallet::hooks] + impl Hooks for Pallet + where + T: mining::Config::Currency>, + BalanceOf: FixedPointConvert + Display, + { + fn on_finalize(_n: T::BlockNumber) { + let now = ::UnixTime::now() + .as_secs() + .saturated_into::(); + Self::maybe_force_withdraw(now); + } + } + + #[pallet::call] + impl Pallet + where + T: mining::Config::Currency>, + BalanceOf: FixedPointConvert + Display, + { + /// Creates a new stake pool + #[pallet::weight(0)] + pub fn create(origin: OriginFor) -> DispatchResult { + let owner = ensure_signed(origin)?; + + let pid = PoolCount::::get(); + StakePools::::insert( + pid, + PoolInfo { + pid, + owner: owner.clone(), + payout_commission: None, + owner_reward: Zero::zero(), + cap: None, + reward_acc: CodecFixedPoint::zero(), + total_shares: Zero::zero(), + total_stake: Zero::zero(), + free_stake: Zero::zero(), + releasing_stake: Zero::zero(), + workers: vec![], + withdraw_queue: VecDeque::new(), + }, + ); + PoolCount::::put(pid + 1); + Self::deposit_event(Event::::PoolCreated(owner, pid)); + + Ok(()) + } + + /// Adds a worker to a pool + /// + /// This will bind a worker to the corresponding pool sub-account. The binding will not be + /// released until the worker is removed gracefully by `remove_worker()`, or a force unbind + /// by the worker opreator via `Mining::unbind()`. + /// + /// Requires: + /// 1. The worker is registered and benchmakred + /// 2. The worker is not bound a pool + #[pallet::weight(0)] + pub fn add_worker( + origin: OriginFor, + pid: u64, + pubkey: WorkerPublicKey, + ) -> DispatchResult { + let owner = ensure_signed(origin)?; + let worker_info = + registry::Workers::::get(&pubkey).ok_or(Error::::WorkerNotRegistered)?; + + // check wheather the owner was bound as operator + ensure!( + worker_info.operator == Some(owner.clone()), + Error::::UnauthorizedOperator + ); + // check the worker has finished the benchmark + ensure!( + worker_info.initial_score != None, + Error::::BenchmarkMissing + ); + + // origin must be owner of pool + let mut pool_info = Self::ensure_pool(pid)?; + ensure!(pool_info.owner == owner, Error::::UnauthorizedPoolOwner); + // make sure worker has not been not added + // TODO: should we set a cap to avoid performance problem + let workers = &mut pool_info.workers; + // TODO: limit the number of workers to avoid performance issue. + ensure!(!workers.contains(&pubkey), Error::::WorkerExists); + + // generate miner account + let miner: T::AccountId = pool_sub_account(pid, &pubkey); + + // bind worker with minner + mining::pallet::Pallet::::bind(miner.clone(), pubkey) + .or(Err(Error::::FailedToBindMinerAndWorker))?; + + // update worker vector + workers.push(pubkey); + StakePools::::insert(&pid, &pool_info); + WorkerAssignments::::insert(&pubkey, pid); + SubAccountAssignments::::insert(&miner, pid); + Self::deposit_event(Event::::PoolWorkerAdded(pid, pubkey)); + + Ok(()) + } + + /// Removes a worker from a pool + /// + /// Requires: + /// 1. The worker is registered + /// 2. The worker is associated with a pool + /// 3. The worker is removalbe (not in mining) + #[pallet::weight(0)] + pub fn remove_worker( + origin: OriginFor, + pid: u64, + worker: WorkerPublicKey, + ) -> DispatchResult { + let who = ensure_signed(origin)?; + // The sender is the pool owner + let pool = Self::ensure_pool(pid)?; + ensure!(pool.owner == who, Error::::UnauthorizedPoolOwner); + // The worker is in this pool. It implies: + // - The worker is already in `PoolInfo::worker` list + // - The sub-account assignment exists (because they are created & killed together) + let lookup_pid = + WorkerAssignments::::get(worker).ok_or(Error::::WorkerDoesNotExist)?; + ensure!(pid == lookup_pid, Error::::WorerInAnotherPool); + // Remove the worker from the pool (notification suspended) + let sub_account: T::AccountId = pool_sub_account(pid, &worker); + mining::pallet::Pallet::::unbind_miner(&sub_account, false)?; + // Manually clean up the worker, including the pool worker list, and the assignment + // indices. (Theoritically we can enable the unbinding notification, and follow the + // same path as a force unbinding, but it doesn't sounds graceful.) + Self::remove_worker_from_pool(&worker); + Ok(()) + } + + // /// Destroies a stake pool + // /// + // /// Requires: + // /// 1. The sender is the owner + // /// 2. All the miners are stopped + // #[pallet::weight(0)] + // pub fn destroy(origin: OriginFor, id: u64) -> DispatchResult { + // panic!("unimplemented") + // } + + /// Sets the hard cap of the pool + /// + /// Note: a smaller cap than current total_stake if not allowed. + /// Requires: + /// 1. The sender is the owner + #[pallet::weight(0)] + pub fn set_cap(origin: OriginFor, pid: u64, cap: BalanceOf) -> DispatchResult { + let owner = ensure_signed(origin)?; + let mut pool_info = Self::ensure_pool(pid)?; + + // origin must be owner of pool + ensure!(pool_info.owner == owner, Error::::UnauthorizedPoolOwner); + // check cap + ensure!(pool_info.total_stake <= cap, Error::::InadequateCapacity); + + pool_info.cap = Some(cap); + StakePools::::insert(&pid, &pool_info); + + Self::deposit_event(Event::::PoolCapacitySet(pid, cap)); + Ok(()) + } + + /// Change the pool commission rate + /// + /// Requires: + /// 1. The sender is the owner + #[pallet::weight(0)] + pub fn set_payout_pref( + origin: OriginFor, + pid: u64, + payout_commission: Permill, + ) -> DispatchResult { + let owner = ensure_signed(origin)?; + let mut pool_info = Self::ensure_pool(pid)?; + // origin must be owner of pool + ensure!(pool_info.owner == owner, Error::::UnauthorizedPoolOwner); + + pool_info.payout_commission = Some(payout_commission); + StakePools::::insert(&pid, &pool_info); + + Self::deposit_event(Event::::PoolCommissionSet( + pid, + payout_commission.deconstruct(), + )); + + Ok(()) + } + + /// Claims all the pending rewards of the sender and send to the `target` + /// + /// Requires: + /// 1. The sender is a pool owner or staker + #[pallet::weight(0)] + pub fn claim_rewards( + origin: OriginFor, + pid: u64, + target: T::AccountId, + ) -> DispatchResult { + let who = ensure_signed(origin)?; + let mut pool_info = Self::ensure_pool(pid)?; + let mut rewards = BalanceOf::::zero(); + // Add pool owner's reward if applicable + if who == pool_info.owner { + rewards += pool_info.owner_reward; + pool_info.owner_reward = Zero::zero(); + } + // Settle the pending reward, and calculate the rewards belong to user + let info_key = (pid, who.clone()); + let mut user_info = Self::pool_stakers(&info_key); + if let Some(ref mut user_info) = user_info { + pool_info.settle_user_pending_reward(user_info); + rewards += user_info.available_rewards; + user_info.available_rewards = Zero::zero(); + } + ensure!(rewards > Zero::zero(), Error::::NoRewardToClaim); + mining::Pallet::::withdraw_subsidy_pool(&target, rewards) + .or(Err(Error::::InternalSubsidyPoolCannotWithdraw))?; + // Update ledger + StakePools::::insert(pid, &pool_info); + if let Some(user_info) = user_info { + PoolStakers::::insert(&info_key, &user_info); + } + Self::deposit_event(Event::::RewardsWithdrawn(pid, who, rewards)); + + Ok(()) + } + + /// Contributes some stake to a pool + /// + /// Requires: + /// 1. The pool exists + /// 2. After the desposit, the pool doesn't reach the cap + #[pallet::weight(0)] + pub fn contribute(origin: OriginFor, pid: u64, amount: BalanceOf) -> DispatchResult { + let who = ensure_signed(origin)?; + let a = amount; // Alias to reduce confusion in the code below + + ensure!( + a >= T::MinContribution::get(), + Error::::InsufficientContribution + ); + let free = ::Currency::free_balance(&who); + let locked = Self::ledger_query(&who); + ensure!(free - locked >= a, Error::::InsufficientBalance); + + let mut pool_info = Self::ensure_pool(pid)?; + if let Some(cap) = pool_info.cap { + ensure!( + cap.saturating_sub(pool_info.total_stake) >= a, + Error::::StakeExceedsCapacity + ); + } + // We don't really want to allow to contribute to a bankrupt StakePool. It can avoid + // a lot of weird edge cases when dealing with pending slash. + ensure!( + pool_info.total_shares == Zero::zero() || pool_info.total_stake > Zero::zero(), + Error::::PoolBankrupt + ); + + let info_key = (pid, who.clone()); + // Clear the pending reward before adding stake, if applies + let mut user_info = match Self::pool_stakers(&info_key) { + Some(mut user_info) => { + pool_info.settle_user_pending_reward(&mut user_info); + Self::maybe_settle_slash(&pool_info, &mut user_info); + user_info + } + None => UserStakeInfo { + user: who.clone(), + locked: Zero::zero(), + shares: Zero::zero(), + available_rewards: Zero::zero(), + reward_debt: Zero::zero(), + }, + }; + pool_info.add_stake(&mut user_info, a); + + // Persist + PoolStakers::::insert(&info_key, &user_info); + // Lock the funds + Self::ledger_accrue(&who, a); + + // We have new free stake now, try handle the waitting withdraw queue + Self::try_process_withdraw_queue(&mut pool_info); + + // Persist + StakePools::::insert(&pid, &pool_info); + Self::deposit_event(Event::::Contribution(pid, who, a)); + Ok(()) + } + + /// Demands the return of some stake from a pool. + /// + /// Note: there are two scenarios people may meet + /// + /// - if the pool has free stake and the amount of the free stake is greater than or equal + /// to the withdrawal amount (e.g. pool.free_stake >= amount), the withdrawal would + /// take effect immediately. + /// - else the withdrawal would be queued and delayed until there is enough free stake. + #[pallet::weight(0)] + pub fn withdraw(origin: OriginFor, pid: u64, shares: BalanceOf) -> DispatchResult { + let who = ensure_signed(origin)?; + let info_key = (pid, who.clone()); + let mut user_info = + Self::pool_stakers(&info_key).ok_or(Error::::PoolStakeNotFound)?; + + ensure!( + BalanceOf::::zero() < shares && shares <= user_info.shares, + Error::::InvalidWithdrawalAmount + ); + + let mut pool_info = Self::ensure_pool(pid)?; + let now = ::UnixTime::now() + .as_secs() + .saturated_into::(); + + // if withdraw_queue is not empty, means pool doesn't have free stake now, just add withdraw to queue + if !pool_info.withdraw_queue.is_empty() { + pool_info.withdraw_queue.push_back(WithdrawInfo { + user: who, + shares, + start_time: now, + }); + Self::maybe_add_withdraw_queue(now, pool_info.pid); + } else { + Self::try_withdraw(&mut pool_info, &mut user_info, shares); + } + + PoolStakers::::insert(&info_key, &user_info); + StakePools::::insert(&pid, &pool_info); + + Ok(()) + } + + /// Starts a miner on behalf of the stake pool + /// + /// Requires: + /// 1. The miner is bound to the pool and is in Ready state + /// 2. The remaining stake in the pool can cover the minimal stake requried + #[pallet::weight(0)] + pub fn start_mining( + origin: OriginFor, + pid: u64, + worker: WorkerPublicKey, + stake: BalanceOf, + ) -> DispatchResult { + let owner = ensure_signed(origin)?; + let mut pool_info = Self::ensure_pool(pid)?; + // origin must be owner of pool + ensure!(pool_info.owner == owner, Error::::UnauthorizedPoolOwner); + // check free stake + ensure!( + pool_info.free_stake >= stake, + Error::::InsufficientFreeStake + ); + // check wheather we have add this worker + ensure!( + pool_info.workers.contains(&worker), + Error::::WorkerDoesNotExist + ); + let miner: T::AccountId = pool_sub_account(pid, &worker); + mining::pallet::Pallet::::start_mining(miner, stake)?; + pool_info.free_stake -= stake; + StakePools::::insert(&pid, &pool_info); + Ok(()) + } + + /// Stops a miner on behalf of the stake pool + /// Note: this would let miner enter CoolingDown if everything is good + /// + /// Requires: + /// 1. There miner is bound to the pool and is in a stoppable state + #[pallet::weight(0)] + pub fn stop_mining( + origin: OriginFor, + pid: u64, + worker: WorkerPublicKey, + ) -> DispatchResult { + let owner = ensure_signed(origin)?; + let pool_info = Self::ensure_pool(pid)?; + // origin must be owner of pool + ensure!(pool_info.owner == owner, Error::::UnauthorizedPoolOwner); + // check wheather we have add this worker + ensure!( + pool_info.workers.contains(&worker), + Error::::WorkerDoesNotExist + ); + let miner: T::AccountId = pool_sub_account(pid, &worker); + // Mining::stop_mining will notify us how much it will release by `on_stopped` + >::stop_mining(miner)?; + + Ok(()) + } + + /// Helper function to trigger reclaiming for a worker in a pool. + #[pallet::weight(0)] + pub fn relcaim_pool_worker( + origin: OriginFor, + pid: u64, + worker: WorkerPublicKey, + ) -> DispatchResult { + ensure_signed(origin.clone())?; + Self::ensure_pool(pid)?; + let sub_account: T::AccountId = pool_sub_account(pid, &worker); + mining::Pallet::::reclaim(origin, sub_account) + } + } + + impl Pallet + where + T: mining::Config::Currency>, + BalanceOf: FixedPointConvert + Display, + { + /// Adds up the newly received reward to `reward_acc` + fn handle_pool_new_reward( + pool_info: &mut PoolInfo>, + rewards: BalanceOf, + ) { + if rewards > Zero::zero() { + if pool_info.total_shares == Zero::zero() { + Self::deposit_event(Event::::RewardDismissedNoShare(pool_info.pid, rewards)); + return; + } + let commission = pool_info.payout_commission.unwrap_or_default() * rewards; + pool_info.owner_reward.saturating_accrue(commission); + pool_info.distribute_reward(rewards - commission); + } + } + + /// Tries to withdraw a specific amount from a pool. + /// + /// The withdraw request would be delayed if the free stake is not enough, otherwise + /// withdraw from the free stake immediately. + /// + /// The updates are made in `pool_info` and `user_info`. It's up to the caller to persist + /// the data. + /// + /// Requires: + /// 1. The user's pending slash is already settled. + /// 2. The pool must has shares and stake (or it can cause division by zero error) + fn try_withdraw( + pool_info: &mut PoolInfo>, + user_info: &mut UserStakeInfo>, + shares: BalanceOf, + ) { + pool_info.settle_user_pending_reward(user_info); + let free_shares = match pool_info.share_price() { + Some(price) if price != fp!(0) => bdiv(pool_info.free_stake, &price), + // LOL, 100% slashed. We allow to withdraw all any number of shares with zero token + // in return. + _ => shares, + }; + let withdrawing_shares = shares.min(free_shares); + let queued_shares = shares - withdrawing_shares; + // Try withdraw immediately if we can + if withdrawing_shares > Zero::zero() { + Self::maybe_settle_slash(pool_info, user_info); + // Overflow warning: remove_stake is carefully written to avoid precision error. + let reduced = pool_info + .remove_stake(user_info, withdrawing_shares) + .expect("There are enough withdrawing_shares; qed."); + Self::ledger_reduce(&user_info.user, reduced); + Self::deposit_event(Event::::Withdrawal( + pool_info.pid, + user_info.user.clone(), + reduced, + )); + } + // Some locked assets haven't been withdrawn (unlocked) to user, add it to the withdraw + // queue. When the pool has free stake again, the withdrawal will be fulfilled. + if queued_shares > Zero::zero() { + let now = ::UnixTime::now() + .as_secs() + .saturated_into::(); + pool_info.withdraw_queue.push_back(WithdrawInfo { + user: user_info.user.clone(), + shares: queued_shares, + start_time: now, + }); + Self::maybe_add_withdraw_queue(now, pool_info.pid); + } + // Update the pending reward after changing the staked amount + pool_info.reset_pending_reward(user_info); + } + + /// Tries to fulfill the withdraw queue with the newly freed stake + fn try_process_withdraw_queue(pool_info: &mut PoolInfo>) { + // The share price shouldn't change at any point in this function. So we can calculate + // only once at the beginning. + let price = match pool_info.share_price() { + Some(price) => price, + None => return, + }; + + while pool_info.free_stake > Zero::zero() { + if let Some(mut withdraw) = pool_info.withdraw_queue.front().cloned() { + // Must clear the pending reward before any stake change + let info_key = (pool_info.pid, withdraw.user.clone()); + let mut user_info = Self::pool_stakers(&info_key).unwrap(); + pool_info.settle_user_pending_reward(&mut user_info); + // Try to fulfill the withdraw requests as much as possible + let free_shares = if price == fp!(0) { + withdraw.shares // 100% slashed + } else { + bdiv(pool_info.free_stake, &price) + }; + let withdrawing_shares = free_shares.min(withdraw.shares); + Self::maybe_settle_slash(pool_info, &mut user_info); + let reduced = pool_info + .remove_stake(&mut user_info, withdrawing_shares) + .expect("Remove only what we have; qed."); + withdraw.shares.saturating_reduce(withdrawing_shares); + // Actually withdraw the funds + Self::ledger_reduce(&user_info.user, reduced); + Self::deposit_event(Event::::Withdrawal( + pool_info.pid, + user_info.user.clone(), + reduced, + )); + // Update the pending reward after changing the staked amount + pool_info.reset_pending_reward(&mut user_info); + PoolStakers::::insert(&info_key, &user_info); + // Update if the withdraw is partially fulfilled, otherwise pop it out of the + // queue + if withdraw.shares == Zero::zero() { + pool_info.withdraw_queue.pop_front(); + } else { + *pool_info.withdraw_queue.front_mut().unwrap() = withdraw; + } + } else { + break; + } + } + } + + /// Updates a user's locked balance. Doesn't check the amount is less than the free amount! + fn update_lock(who: &T::AccountId, amount: BalanceOf) { + if amount == Zero::zero() { + ::Currency::remove_lock(STAKING_ID, who); + } else { + ::Currency::set_lock(STAKING_ID, who, amount, WithdrawReasons::all()); + } + } + + /// Gets the pool record by `pid`. Returns error if not exist + fn ensure_pool(pid: u64) -> Result>, Error> { + Self::stake_pools(&pid).ok_or(Error::::PoolDoesNotExist) + } + + /// Adds the givin pool (`pid`) to the withdraw queue if not present + fn maybe_add_withdraw_queue(start_time: u64, pid: u64) { + let mut t = WithdrawalTimestamps::::get(); + if let Some(last_start_time) = t.back().cloned() { + // the last_start_time == start_time means already have a withdraw request added early of this block, + // last_start_time > start_time is impossible + if last_start_time < start_time { + t.push_back(start_time); + } + } else { + // first time add withdraw pool + t.push_back(start_time); + } + WithdrawalTimestamps::::put(&t); + + // push pool to the pool list, if the pool was added in this pool, means it has waiting withdraw request + // in current block(if they have the same timestamp, we think they are in the same block) + if WithdrawalQueuedPools::::contains_key(&start_time) { + let mut pool_list = WithdrawalQueuedPools::::get(&start_time).unwrap(); + // if pool has already been added, ignore it + if !pool_list.contains(&pid) { + pool_list.push(pid); + WithdrawalQueuedPools::::insert(&start_time, &pool_list); + } + } else { + WithdrawalQueuedPools::::insert(&start_time, vec![pid]); + } + } + + /// Removes a worker from a pool, either intentially or unintentially. + /// + /// It assumes the worker is already in a pool. + fn remove_worker_from_pool(worker: &WorkerPublicKey) { + let pid = WorkerAssignments::::take(worker).expect("Worker must be in a pool; qed."); + let sub_account: T::AccountId = pool_sub_account(pid, worker); + SubAccountAssignments::::remove(sub_account); + StakePools::::mutate(pid, |value| { + if let Some(pool) = value { + pool.remove_worker(worker); + } + }); + } + + fn maybe_settle_slash( + pool: &PoolInfo>, + user: &mut UserStakeInfo>, + ) { + match pool.settle_slash(user) { + Some(slashed) if slashed > Zero::zero() => { + let (imbalance, _remaining) = + ::Currency::slash(&user.user, slashed); + T::OnSlashed::on_unbalanced(imbalance); + Self::ledger_reduce(&user.user, slashed); + Self::deposit_event(Event::::SlashSettled( + pool.pid, + user.user.clone(), + slashed, + )); + } + _ => (), + } + } + + /// Tries to enforce expired withdraw requests + /// + /// If the + fn maybe_force_withdraw(now: u64) { + let mut t = WithdrawalTimestamps::::get(); + if t.is_empty() { + return; + } + // Handle timeout requests at every block + let grace_period = T::GracePeriod::get(); + while let Some(start_time) = t.front().cloned() { + if now - start_time <= grace_period { + break; + } + let pools = WithdrawalQueuedPools::::take(start_time) + .expect("Pool list must exist; qed."); + for &pid in pools.iter() { + let pool = Self::ensure_pool(pid).expect("Stake pool must exist; qed."); + if pool.has_expired_withdrawal(now, grace_period) { + // Force shutdown all miners + for worker in pool.workers { + let miner: T::AccountId = pool_sub_account(pid, &worker); + // TODO: avoid stop mining multiple times? + let _ = >::stop_mining(miner); + } + } + } + // pop front timestamp + t.pop_front(); + } + WithdrawalTimestamps::::put(&t); + } + } + + impl mining::OnReward for Pallet + where + T: mining::Config::Currency>, + BalanceOf: FixedPointConvert + Display, + { + /// Called when gk send new payout information. + /// Append specific miner's reward balance of current round, + /// would be clear once pool was updated + fn on_reward(settle: &[SettleInfo]) { + for info in settle { + let payout_fixed = FixedPoint::from_bits(info.payout); + let reward = BalanceOf::::from_fixed(&payout_fixed); + + let pid = match WorkerAssignments::::get(&info.pubkey) { + Some(pid) => pid, + None => { + Self::deposit_event(Event::::RewardDismissedNotInPool( + info.pubkey, + reward, + )); + return; + } + }; + let mut pool_info = Self::ensure_pool(pid).expect("Stake pool must exist; qed."); + Self::handle_pool_new_reward(&mut pool_info, reward); + StakePools::::insert(&pid, &pool_info); + } + } + } + + impl mining::OnUnbound for Pallet + where + T: mining::Config::Currency>, + BalanceOf: FixedPointConvert + Display, + { + fn on_unbound(worker: &WorkerPublicKey, _force: bool) { + // Usually called on worker force unbinding (force == true), but it's also possible + // that the user unbind from the mining pallet directly. + + // Warning: when using Mining & StakePool pallets together, here we assume all the + // miners are only registered by StakePool. So we don't bother to double check if the + // worker exists. + + // In case of slash, `Mining::stop_mining()` will notify us a slash happened and we do + // bookkeeping stuff (i.e. updating releasing_stake), and eventually the slash will + // be enacted at `on_reclaim`. + Self::remove_worker_from_pool(worker); + } + } + + impl mining::OnReclaim> for Pallet + where + T: mining::Config::Currency>, + BalanceOf: FixedPointConvert + Display, + { + /// Called when worker was reclaimed. + /// + /// After the cool down ends, worker was cleaned up, whose contributed balance would be + /// reset to zero. + fn on_reclaim(miner: &T::AccountId, orig_stake: BalanceOf, slashed: BalanceOf) { + let pid = SubAccountAssignments::::get(miner).expect("Sub-acocunt must exist; qed."); + let mut pool_info = Self::ensure_pool(pid).expect("Stake pool must exist; qed."); + + let returned = orig_stake - slashed; + if slashed != Zero::zero() { + // Remove some slashed value from `total_stake`, causing the share price to reduce + // and creating a logical pending slash. The actual slash happens with the pending + // slash to individuals is settled. + pool_info.slash(slashed); + Self::deposit_event(Event::::PoolSlashed(pid, slashed)); + } + + // with the worker been cleaned, whose stake now are free + debug_assert!( + pool_info.releasing_stake >= returned, + "More return then expected" + ); + pool_info.free_stake.saturating_accrue(returned); + pool_info.releasing_stake.saturating_reduce(returned); + + Self::try_process_withdraw_queue(&mut pool_info); + StakePools::::insert(&pid, &pool_info); + } + } + + impl mining::OnStopped> for Pallet + where + T: mining::Config::Currency>, + BalanceOf: FixedPointConvert + Display, + { + /// Called when a worker is stopped and there is releasing stake + fn on_stopped(worker: &WorkerPublicKey, orig_stake: BalanceOf, slashed: BalanceOf) { + let pid = WorkerAssignments::::get(worker) + .expect("Stopping workers have assignment; qed."); + let mut pool_info = Self::ensure_pool(pid).expect("Stake pool must exist; qed."); + let returned = orig_stake - slashed; + pool_info.releasing_stake.saturating_accrue(returned); + StakePools::::insert(pid, pool_info); + } + } + + impl Ledger> for Pallet + where + T: mining::Config::Currency>, + BalanceOf: FixedPointConvert + Display, + { + fn ledger_accrue(who: &T::AccountId, amount: BalanceOf) { + let b: BalanceOf = StakeLedger::::get(who).unwrap_or_default(); + let new_b = b.saturating_add(amount); + StakeLedger::::insert(who, new_b); + Self::update_lock(who, new_b); + } + + fn ledger_reduce(who: &T::AccountId, amount: BalanceOf) { + let b: BalanceOf = StakeLedger::::get(who).unwrap_or_default(); + debug_assert!(b >= amount, "Cannot reduce lock more than it has"); + let new_b = b.saturating_sub(amount); + StakeLedger::::insert(who, new_b); + Self::update_lock(who, new_b); + } + + fn ledger_query(who: &T::AccountId) -> BalanceOf { + StakeLedger::::get(who).unwrap_or_default() + } + } + + fn pool_sub_account(pid: u64, pubkey: &WorkerPublicKey) -> T + where + T: Encode + Decode + Default, + { + let hash = crate::hashing::blake2_256(&(pid, pubkey).encode()); + // stake pool miner + (b"spm/", hash) + .using_encoded(|b| T::decode(&mut TrailingZeroInput::new(b))) + .unwrap_or_default() + } + + #[derive(Encode, Decode, Clone, PartialEq, Eq, Default, RuntimeDebug)] + pub struct PoolInfo { + /// Pool ID + pid: u64, + /// The owner of the pool + owner: AccountId, + /// The commission the pool owner takes + payout_commission: Option, + /// Claimalbe owner reward + owner_reward: Balance, + /// The hard cap of the pool + cap: Option, + /// The reward accumulator + reward_acc: CodecFixedPoint, + /// Total shares + total_shares: Balance, + /// Total stake + total_stake: Balance, + /// Total free stake (unused) + free_stake: Balance, + /// Releasing stake (will be unlocked after worker reclaiming) + releasing_stake: Balance, + /// Bound workers + workers: Vec, + /// The queue of withdraw requests + withdraw_queue: VecDeque>, + } + + impl PoolInfo + where + AccountId: Default, + Balance: sp_runtime::traits::AtLeast32BitUnsigned + Copy + FixedPointConvert + Display, + { + /// Adds some stake to a user. + /// + /// No dirty slash allowed. Usually it doesn't change the price of the share, unless the + /// share price is zero (all slashed), which is a really a disrupting case that we don't + /// even bother to deal with. + fn add_stake(&mut self, user: &mut UserStakeInfo, amount: Balance) { + self.assert_slash_clean(user); + self.assert_reward_clean(user); + // Calcuate shares to add + let shares = match self.share_price() { + Some(price) if price != fp!(0) => bdiv(amount, &price), + _ => amount, // adding new stake (share price = 1) + }; + // Add the stake + user.shares.saturating_accrue(shares); + user.locked.saturating_accrue(amount); + self.reset_pending_reward(user); + // Update self + self.total_shares += shares; + self.total_stake.saturating_accrue(amount); + self.free_stake.saturating_accrue(amount); + } + + /// Removes some shares from a user and returns the removed stake amount. + /// + /// This function can deal with fixed point precision issue. However it also requires: + /// + /// - There's no dirty slash + /// - `shares` mustn't exceed the user shares. + /// + /// It returns `None` and makes no change if there's any error. Otherwise it returns the + /// amount of the actual removed stake. + fn remove_stake( + &mut self, + user: &mut UserStakeInfo, + shares: Balance, + ) -> Option { + self.assert_slash_clean(user); + self.assert_reward_clean(user); + let total_shares = self.total_shares.checked_sub(&shares)?; + let price = self.share_price()?; + let amount = bmul(shares, &price); + // In case `amount` is a little bit larger than `free_stake` + let amount = amount.min(self.free_stake); + let user_shares = user.shares.checked_sub(&shares)?; + let user_locked = user.locked.checked_sub(&amount)?; + // Apply updates + self.free_stake -= amount; + self.total_stake -= amount; + self.total_shares = total_shares; + user.shares = user_shares; + user.locked = user_locked; + self.reset_pending_reward(user); + Some(amount) + } + + fn slash(&mut self, amount: Balance) { + debug_assert!( + self.total_shares > Zero::zero(), + "No share in hte pool. This shouldn't happen." + ); + debug_assert!( + self.total_stake >= amount, + "No enough stake to slash (total = {}, slash = {})", + self.total_stake, + amount + ); + self.total_stake.saturating_reduce(amount); + } + + /// Asserts there's no dirty slash (in debug profile only) + /// + /// This could be probalematic if the fixed point precision is not handled correctly. + /// However since here we check the exact same condition as we set in `settle_slash`, it + /// should be always safe. + fn assert_slash_clean(&self, user: &UserStakeInfo) { + debug_assert!( + self.total_shares == Zero::zero() + || bmul(user.shares, &self.share_price().unwrap()) == user.locked, + "There shouldn't be any dirty slash (user shares = {}, price = {:?}, user locked = {}, delta = {})", + user.shares, self.share_price(), user.locked, + bmul(user.shares, &self.share_price().unwrap()) - user.locked + ); + } + + /// Asserts there's no pending reward (in debug profile only) + fn assert_reward_clean(&self, user: &UserStakeInfo) { + debug_assert!( + self.pending_reward(user) == Zero::zero(), + "The pending reward should be zero (user share = {}, user debt = {}, accumulator = {:?}, delta = {}))", + user.shares, user.reward_debt, self.reward_acc, + self.pending_reward(user) + ); + } + + /// Settles the pending slash for a pool user. + /// + /// Returns the slashed amount if succeeded, otherwise None. + fn settle_slash(&self, user: &mut UserStakeInfo) -> Option { + let price = self.share_price()?; + let locked = user.locked; + let new_locked = bmul(user.shares, &price); + user.locked = new_locked; + // The actual slashed amount. Usually slash will only cause the share price decreasing. + // However in some edge case (i.e. the pool got slashed to 0 and then new contribution + // added), the locked amount may even become larger + Some(locked.saturating_sub(new_locked)) + } + + /// Returns the price of one share, or None if no share at all. + fn share_price(&self) -> Option { + self.total_stake + .to_fixed() + .checked_div(self.total_shares.to_fixed()) + } + + /// Settles all the pending rewards of a user and move to `available_rewards` for claiming + fn settle_user_pending_reward(&self, user: &mut UserStakeInfo) { + let pending_reward = self.pending_reward(user); + user.available_rewards.saturating_accrue(pending_reward); + self.reset_pending_reward(user); + } + + // Distributes additinoal rewards to the current share holders. + // + // Additional rewards contribute to the face value of the pool shares. The vaue of each + // share effectively grows by (rewards / total_shares). + // + // Warning: `total_reward` mustn't be zero. + fn distribute_reward(&mut self, rewards: Balance) { + assert!( + self.total_shares != Zero::zero(), + "Divide by zero at distribute_reward" + ); + Accumulator::::distribute( + self.total_shares, + self.reward_acc.get_mut(), + rewards, + ); + } + + /// Calculates the pending reward a user is holding + fn pending_reward(&self, user: &UserStakeInfo) -> Balance { + Accumulator::::pending(user.shares, &self.reward_acc.into(), user.reward_debt) + } + + /// Resets user's `reward_debt` to remove all the pending rewards + fn reset_pending_reward(&self, user: &mut UserStakeInfo) { + Accumulator::::clear_pending( + user.shares, + &self.reward_acc.into(), + &mut user.reward_debt, + ); + } + + /// Removes a worker from the pool's worker list + fn remove_worker(&mut self, worker: &WorkerPublicKey) { + self.workers.retain(|w| w != worker); + } + + /// Returns if the pool has expired withdrawal requests + fn has_expired_withdrawal(&self, now: u64, grace_period: u64) -> bool { + debug_assert!( + self.free_stake == Zero::zero(), + "We really don't want to have free stake and withdraw requests at the same time" + ); + // If we check the pool withdraw_queue here, we don't have to remove a pool from + // WithdrawalQueuedPools when a pool has handled their waiting withdraw requests before + // timeout. Compare the IO performance we think removing pool from + // WithdrawalQueuedPools would have more resource cost. + + // If the pool is bankrupt, or there's no share, we just skip this pool. + let price = match self.share_price() { + Some(price) if price != fp!(0) => price, + _ => return false, + }; + let mut budget = self.free_stake + self.releasing_stake; + for request in &self.withdraw_queue { + let amount = bmul(request.shares, &price); + if amount > budget { + // Run out of budget, let's check if the request is still in the grace period + return now - request.start_time > grace_period; + } else { + // Otherwise we allocate some budget to virtually fulfill the request + budget -= amount; + } + } + false + } + } + + #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug)] + pub struct UserStakeInfo { + /// User account + user: AccountId, + /// The actual locked stake + locked: Balance, + /// The share in the pool + shares: Balance, + /// Claimable rewards + available_rewards: Balance, + /// The debt of a user's stake subject to the pool reward accumulator + reward_debt: Balance, + } + + #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug)] + pub struct WithdrawInfo { + user: AccountId, + shares: Balance, + start_time: u64, + } + + #[cfg(test)] + mod test { + use assert_matches::assert_matches; + use fixed_macro::types::U64F64 as fp; + use frame_support::{assert_noop, assert_ok}; + use hex_literal::hex; + use sp_runtime::AccountId32; + + use super::*; + use crate::mock::{ + ecdh_pubkey, elapse_cool_down, elapse_seconds, new_test_ext, set_block_1, + setup_workers, setup_workers_linked_operators, take_events, teleport_to_block, + worker_pubkey, Balance, BlockNumber, Event as TestEvent, Origin, Test, DOLLARS, + }; + // Pallets + use crate::mock::{ + Balances, PhalaMining, PhalaRegistry, PhalaStakePool, System, Timestamp, + }; + + #[test] + fn test_pool_subaccount() { + let sub_account: AccountId32 = + pool_sub_account(1, &WorkerPublicKey::from_raw([0u8; 32])); + let expected = AccountId32::new(hex!( + "73706d2f02ab4d74c86ec3b3997a4fadf33e55e8279650c8539ea67e053c02dc" + )); + assert_eq!(sub_account, expected, "Incorrect sub account"); + } + + #[test] + fn test_create() { + // Check this fixed: + new_test_ext().execute_with(|| { + set_block_1(); + assert_ok!(PhalaStakePool::create(Origin::signed(1))); + assert_ok!(PhalaStakePool::create(Origin::signed(1))); + PhalaStakePool::on_finalize(1); + assert_matches!( + take_events().as_slice(), + [ + TestEvent::PhalaStakePool(Event::PoolCreated(1, 0)), + TestEvent::PhalaStakePool(Event::PoolCreated(1, 1)), + ] + ); + assert_eq!( + StakePools::::get(0), + Some(PoolInfo { + pid: 0, + owner: 1, + payout_commission: None, + owner_reward: 0, + cap: None, + reward_acc: CodecFixedPoint::zero(), + total_shares: 0, + total_stake: 0, + free_stake: 0, + releasing_stake: 0, + workers: Vec::new(), + withdraw_queue: VecDeque::new(), + }) + ); + assert_eq!(PoolCount::::get(), 2); + }); + } + + #[test] + fn test_add_worker() { + new_test_ext().execute_with(|| { + set_block_1(); + let worker1 = worker_pubkey(1); + let worker2 = worker_pubkey(2); + + assert_ok!(PhalaRegistry::force_register_worker( + Origin::root(), + worker1.clone(), + ecdh_pubkey(1), + Some(1) + )); + + // Create a pool (pid = 0) + assert_ok!(PhalaStakePool::create(Origin::signed(1))); + // Bad inputs + assert_noop!( + PhalaStakePool::add_worker(Origin::signed(1), 1, worker2.clone()), + Error::::WorkerNotRegistered + ); + assert_noop!( + PhalaStakePool::add_worker(Origin::signed(2), 0, worker1.clone()), + Error::::UnauthorizedOperator + ); + assert_noop!( + PhalaStakePool::add_worker(Origin::signed(1), 0, worker1.clone()), + Error::::BenchmarkMissing + ); + // Add benchmark and retry + PhalaRegistry::internal_set_benchmark(&worker1, Some(1)); + assert_ok!(PhalaStakePool::add_worker( + Origin::signed(1), + 0, + worker1.clone() + )); + // Check binding + let subaccount = pool_sub_account(0, &worker_pubkey(1)); + assert_eq!( + PhalaMining::ensure_worker_bound(&worker_pubkey(1)).unwrap(), + subaccount, + ); + assert_eq!( + PhalaMining::ensure_miner_bound(&subaccount).unwrap(), + worker_pubkey(1), + ); + // Check assignments + assert_eq!(WorkerAssignments::::get(&worker_pubkey(1)), Some(0)); + assert_eq!(SubAccountAssignments::::get(&subaccount), Some(0)); + // Other bad cases + assert_noop!( + PhalaStakePool::add_worker(Origin::signed(1), 100, worker1.clone()), + Error::::PoolDoesNotExist + ); + // Bind one worker to antoher pool (pid = 1) + assert_ok!(PhalaStakePool::create(Origin::signed(1))); + assert_noop!( + PhalaStakePool::add_worker(Origin::signed(1), 1, worker1.clone()), + Error::::FailedToBindMinerAndWorker + ); + }); + } + + #[test] + fn test_start_mining() { + new_test_ext().execute_with(|| { + set_block_1(); + assert_ok!(PhalaStakePool::create(Origin::signed(1))); + // Cannot start mining wihtout a bound worker + assert_noop!( + PhalaStakePool::start_mining(Origin::signed(1), 0, worker_pubkey(1), 0), + Error::::WorkerDoesNotExist + ); + // Basic setup + setup_workers(2); + assert_ok!(PhalaStakePool::add_worker( + Origin::signed(1), + 0, + worker_pubkey(1) + )); + assert_ok!(PhalaStakePool::contribute( + Origin::signed(1), + 0, + 100 * DOLLARS + )); + // No enough stake + assert_noop!( + PhalaStakePool::start_mining(Origin::signed(1), 0, worker_pubkey(1), 0), + mining::Error::::InsufficientStake + ); + // Too much stake + assert_ok!(PhalaStakePool::contribute( + Origin::signed(99), + 0, + 30000 * DOLLARS + )); + assert_noop!( + PhalaStakePool::start_mining( + Origin::signed(1), + 0, + worker_pubkey(1), + 30000 * DOLLARS + ), + mining::Error::::TooMuchStake + ); + // Can start mining normally + assert_ok!(PhalaStakePool::start_mining( + Origin::signed(1), + 0, + worker_pubkey(1), + 100 * DOLLARS + )); + assert_eq!(PhalaMining::online_miners(), 1); + }); + } + + #[test] + fn test_force_unbind() { + new_test_ext().execute_with(|| { + set_block_1(); + setup_workers_linked_operators(2); + setup_pool_with_workers(1, &[1]); // pid = 0 + setup_pool_with_workers(2, &[2]); // pid = 1 + assert_ok!(PhalaStakePool::contribute( + Origin::signed(1), + 0, + 100 * DOLLARS + )); + assert_ok!(PhalaStakePool::contribute( + Origin::signed(2), + 1, + 100 * DOLLARS + )); + + // Pool0: Change the operator to account101 and force unbind (not mining) + assert_ok!(PhalaRegistry::force_register_worker( + Origin::root(), + worker_pubkey(1), + ecdh_pubkey(1), + Some(101) + )); + let sub_account = pool_sub_account(0, &worker_pubkey(1)); + assert_ok!(PhalaMining::unbind(Origin::signed(101), sub_account)); + // Check assignments cleared, and the worker removed from the pool + assert_eq!( + WorkerAssignments::::contains_key(&worker_pubkey(1)), + false + ); + assert_eq!( + SubAccountAssignments::::contains_key(&sub_account), + false + ); + let pool = PhalaStakePool::stake_pools(0).unwrap(); + assert_eq!(pool.workers.contains(&worker_pubkey(1)), false); + // Check the mining is ready + let miner = PhalaMining::miners(&sub_account).unwrap(); + assert_eq!(miner.state, mining::MinerState::Ready); + + // Pool1: Change the operator to account102 and force unbind (mining) + assert_ok!(PhalaStakePool::start_mining( + Origin::signed(2), + 1, + worker_pubkey(2), + 100 * DOLLARS + )); + assert_ok!(PhalaRegistry::force_register_worker( + Origin::root(), + worker_pubkey(2), + ecdh_pubkey(2), + Some(102) + )); + let sub_account = pool_sub_account(1, &worker_pubkey(2)); + assert_ok!(PhalaMining::unbind(Origin::signed(102), sub_account)); + // Check assignments cleared, and the worker removed from the pool + assert_eq!( + WorkerAssignments::::contains_key(&worker_pubkey(2)), + false + ); + assert_eq!( + SubAccountAssignments::::contains_key(&sub_account), + false + ); + let pool = PhalaStakePool::stake_pools(1).unwrap(); + assert_eq!(pool.workers.contains(&worker_pubkey(2)), false); + // Check the mining is stopped + let miner = PhalaMining::miners(&sub_account).unwrap(); + assert_eq!(miner.state, mining::MinerState::MiningCoolingDown); + }); + } + + #[test] + fn test_pool_cap() { + new_test_ext().execute_with(|| { + set_block_1(); + let worker1 = worker_pubkey(1); + assert_ok!(PhalaRegistry::force_register_worker( + Origin::root(), + worker1.clone(), + ecdh_pubkey(1), + Some(1) + )); + + assert_ok!(PhalaStakePool::create(Origin::signed(1))); // pid = 0 + assert_eq!(PhalaStakePool::stake_pools(0).unwrap().cap, None); + // Pool existence + assert_noop!( + PhalaStakePool::set_cap(Origin::signed(2), 100, 1), + Error::::PoolDoesNotExist, + ); + // Owner only + assert_noop!( + PhalaStakePool::set_cap(Origin::signed(2), 0, 1), + Error::::UnauthorizedPoolOwner, + ); + // Cap to 1000 PHA + assert_ok!(PhalaStakePool::set_cap( + Origin::signed(1), + 0, + 1000 * DOLLARS + )); + assert_eq!( + PhalaStakePool::stake_pools(0).unwrap().cap, + Some(1000 * DOLLARS) + ); + // Check cap shouldn't be less than the current stake + assert_ok!(PhalaStakePool::contribute( + Origin::signed(1), + 0, + 100 * DOLLARS + )); + assert_noop!( + PhalaStakePool::set_cap(Origin::signed(1), 0, 99 * DOLLARS), + Error::::InadequateCapacity, + ); + // Stake to the cap + assert_ok!(PhalaStakePool::contribute( + Origin::signed(1), + 0, + 900 * DOLLARS + )); + // Exceed the cap + assert_noop!( + PhalaStakePool::contribute(Origin::signed(2), 0, 900 * DOLLARS), + Error::::StakeExceedsCapacity, + ); + }); + } + + #[test] + fn test_stake() { + new_test_ext().execute_with(|| { + set_block_1(); + let worker1 = worker_pubkey(1); + assert_ok!(PhalaRegistry::force_register_worker( + Origin::root(), + worker1.clone(), + ecdh_pubkey(1), + Some(1) + )); + + assert_ok!(PhalaStakePool::create(Origin::signed(1))); // pid = 0 + assert_ok!(PhalaStakePool::create(Origin::signed(2))); // pid = 1 + + // Stake normally + assert_ok!(PhalaStakePool::contribute( + Origin::signed(1), + 0, + 1 * DOLLARS + )); + assert_ok!(PhalaStakePool::contribute( + Origin::signed(2), + 0, + 10 * DOLLARS + )); + assert_ok!(PhalaStakePool::contribute( + Origin::signed(1), + 1, + 100 * DOLLARS + )); + assert_ok!(PhalaStakePool::contribute( + Origin::signed(2), + 1, + 1000 * DOLLARS + )); + // Check total stake + assert_eq!( + PhalaStakePool::stake_pools(0).unwrap().total_stake, + 11 * DOLLARS + ); + assert_eq!( + PhalaStakePool::stake_pools(1).unwrap().total_stake, + 1100 * DOLLARS + ); + // Check total locks + assert_eq!(PhalaStakePool::stake_ledger(1), Some(101 * DOLLARS)); + assert_eq!(PhalaStakePool::stake_ledger(2), Some(1010 * DOLLARS)); + assert_eq!(Balances::locks(1), vec![the_lock(101 * DOLLARS)]); + assert_eq!(Balances::locks(2), vec![the_lock(1010 * DOLLARS)]); + + // Pool existence + assert_noop!( + PhalaStakePool::contribute(Origin::signed(1), 100, 1 * DOLLARS), + Error::::PoolDoesNotExist + ); + // Dust contribution + assert_noop!( + PhalaStakePool::contribute(Origin::signed(1), 0, 1), + Error::::InsufficientContribution + ); + // Stake more than account1 has + assert_noop!( + PhalaStakePool::contribute( + Origin::signed(1), + 0, + Balances::usable_balance(1) + 1 + ), + Error::::InsufficientBalance, + ); + }); + } + + #[test] + fn test_slash() { + new_test_ext().execute_with(|| { + set_block_1(); + setup_workers(1); + setup_pool_with_workers(1, &[1]); // pid = 0 + + // Account1 contributes 100 PHA, account2 contributes 400 PHA + assert_ok!(PhalaStakePool::contribute( + Origin::signed(1), + 0, + 100 * DOLLARS + )); + assert_ok!(PhalaStakePool::contribute( + Origin::signed(2), + 0, + 400 * DOLLARS + )); + // Start a miner + assert_ok!(PhalaStakePool::start_mining( + Origin::signed(1), + 0, + worker_pubkey(1), + 500 * DOLLARS + )); + let sub_account1: u64 = pool_sub_account(0, &worker_pubkey(1)); + let miner = PhalaMining::miners(sub_account1).unwrap(); + let ve = FixedPoint::from_bits(miner.ve); + assert_eq!(ve, fp!(650.3900000000000000054)); + // Simulate a slash of 50% + let _ = take_events(); + simulate_v_update(1, (ve / 2).to_bits()); + // Stop & settle + assert_ok!(PhalaStakePool::stop_mining( + Origin::signed(1), + 0, + worker_pubkey(1) + )); + elapse_cool_down(); + assert_ok!(PhalaMining::reclaim(Origin::signed(1), sub_account1)); + let ev = take_events(); + assert_matches!( + ev.as_slice(), + [ + TestEvent::PhalaMining(mining::Event::MinerSettled(_, v, 0)), + TestEvent::PhalaMining(mining::Event::MinerStopped(_)), + TestEvent::PhalaStakePool(Event::PoolSlashed(0, slashed)), + TestEvent::PhalaMining(mining::Event::MinerReclaimed(_, _, _)) + ] + if FixedPoint::from_bits(*v) == ve / 2 + && *slashed == 250000000000000 + ); + // Settle the pending slash + let _ = take_events(); + let pool = PhalaStakePool::stake_pools(0).unwrap(); + assert_eq!(pool.total_stake, 250000000000000); + let mut staker1 = PhalaStakePool::pool_stakers((0, 1)).unwrap(); + let mut staker2 = PhalaStakePool::pool_stakers((0, 2)).unwrap(); + PhalaStakePool::maybe_settle_slash(&pool, &mut staker1); + PhalaStakePool::maybe_settle_slash(&pool, &mut staker2); + StakePools::::insert(0, pool); + PoolStakers::::insert((0, 1), staker1); + PoolStakers::::insert((0, 2), staker2); + let ev = take_events(); + assert_eq!( + ev, + vec![ + TestEvent::PhalaStakePool(Event::SlashSettled(0, 1, 50000000000000)), + TestEvent::PhalaStakePool(Event::SlashSettled(0, 2, 200000000000000)), + ] + ); + // Check slash settled. Remaining: 50 PHA, 200 PHA + assert_eq!(PhalaStakePool::stake_ledger(1), Some(50000000000000)); + assert_eq!(PhalaStakePool::stake_ledger(2), Some(200000000000000)); + assert_eq!(Balances::locks(1), vec![the_lock(50000000000000)]); + assert_eq!(Balances::locks(2), vec![the_lock(200000000000000)]); + assert_eq!(Balances::free_balance(1), 950000000000000); + assert_eq!(Balances::free_balance(2), 1800000000000000); + // Account3 contributes 250 PHA. Now: 50 : 200 : 250 + assert_ok!(PhalaStakePool::contribute( + Origin::signed(3), + 0, + 250 * DOLLARS + 1 // Round up to 500 PHA again + )); + // Slash 50% again + assert_ok!(PhalaStakePool::start_mining( + Origin::signed(1), + 0, + worker_pubkey(1), + 500 * DOLLARS + )); + let miner = PhalaMining::miners(sub_account1).unwrap(); + let ve = FixedPoint::from_bits(miner.ve); + let _ = take_events(); + simulate_v_update(1, (ve / 2).to_bits()); + // Full stop & settle + assert_ok!(PhalaStakePool::stop_mining( + Origin::signed(1), + 0, + worker_pubkey(1) + )); + elapse_cool_down(); + assert_ok!(PhalaMining::reclaim(Origin::signed(1), sub_account1)); + let ev = take_events(); + assert_matches!( + ev.as_slice(), + [ + TestEvent::PhalaMining(mining::Event::MinerSettled(_, _, 0)), + TestEvent::PhalaMining(mining::Event::MinerStopped(_)), + TestEvent::PhalaStakePool(Event::PoolSlashed(0, 250000000000000)), + TestEvent::PhalaMining(mining::Event::MinerReclaimed( + _, + 500000000000000, + 250000000000000 + )), + ] + ); + // Withdraw & check amount + let staker1 = PhalaStakePool::pool_stakers((0, 1)).unwrap(); + let staker2 = PhalaStakePool::pool_stakers((0, 2)).unwrap(); + let staker3 = PhalaStakePool::pool_stakers((0, 3)).unwrap(); + let _ = take_events(); + assert_ok!(PhalaStakePool::withdraw( + Origin::signed(1), + 0, + staker1.shares + )); + assert_ok!(PhalaStakePool::withdraw( + Origin::signed(2), + 0, + staker2.shares + )); + assert_ok!(PhalaStakePool::withdraw( + Origin::signed(3), + 0, + staker3.shares + )); + let ev = take_events(); + assert_eq!( + ev, + vec![ + // Account1: ~25 PHA remaining + TestEvent::PhalaStakePool(Event::SlashSettled(0, 1, 25000000000000)), + TestEvent::PhalaStakePool(Event::Withdrawal(0, 1, 25000000000000)), + // Account2: ~100 PHA remaining + TestEvent::PhalaStakePool(Event::SlashSettled(0, 2, 100000000000000)), + TestEvent::PhalaStakePool(Event::Withdrawal(0, 2, 100000000000000)), + // Account1: ~125 PHA remaining + TestEvent::PhalaStakePool(Event::SlashSettled(0, 3, 125000000000001)), + TestEvent::PhalaStakePool(Event::Withdrawal(0, 3, 125000000000000)) + ] + ); + }); + } + + #[test] + fn test_no_contribution_to_bankrupt_pool() { + new_test_ext().execute_with(|| { + set_block_1(); + setup_workers(1); + setup_pool_with_workers(1, &[1]); // pid = 0 + assert_ok!(PhalaStakePool::contribute( + Origin::signed(1), + 0, + 100 * DOLLARS + )); + assert_ok!(PhalaStakePool::start_mining( + Origin::signed(1), + 0, + worker_pubkey(1), + 100 * DOLLARS + )); + // Slash 100% and stop + simulate_v_update(1, fp!(0).to_bits()); + assert_ok!(PhalaStakePool::stop_mining( + Origin::signed(1), + 0, + worker_pubkey(1) + )); + elapse_cool_down(); + let sub_account1: u64 = pool_sub_account(0, &worker_pubkey(1)); + assert_ok!(PhalaMining::reclaim(Origin::signed(1), sub_account1)); + // Check cannot contribute + assert_noop!( + PhalaStakePool::contribute(Origin::signed(1), 0, 10 * DOLLARS), + Error::::PoolBankrupt, + ); + }); + } + + #[test] + fn test_reward_management() { + use crate::mining::pallet::OnReward; + new_test_ext().execute_with(|| { + set_block_1(); + setup_workers(1); + setup_pool_with_workers(1, &[1]); // pid = 0 + + // Check stake before receiving any rewards + assert_ok!(PhalaStakePool::contribute( + Origin::signed(1), + 0, + 100 * DOLLARS + )); + assert_ok!(PhalaStakePool::contribute( + Origin::signed(2), + 0, + 400 * DOLLARS + )); + let pool = PhalaStakePool::stake_pools(0).unwrap(); + assert_eq!(pool.reward_acc, CodecFixedPoint::zero()); + assert_eq!(pool.total_stake, 500 * DOLLARS); + + // Mined 500 PHA + PhalaStakePool::on_reward(&vec![SettleInfo { + pubkey: worker_pubkey(1), + v: FixedPoint::from_num(1).to_bits(), + payout: FixedPoint::from_num(500).to_bits(), + treasury: 0, + }]); + // Should result in 100, 400 PHA pending reward for staker1 & 2 + let pool = PhalaStakePool::stake_pools(0).unwrap(); + let staker1 = PhalaStakePool::pool_stakers((0, 1)).unwrap(); + let staker2 = PhalaStakePool::pool_stakers((0, 2)).unwrap(); + assert_eq!(pool.reward_acc.get(), fp!(1)); + assert_eq!(pool.pending_reward(&staker1), 100 * DOLLARS); + assert_eq!(pool.pending_reward(&staker2), 400 * DOLLARS); + + // Staker1 claims 100 PHA rewrad, left 100 debt & no pending reward + let _ = take_events(); + assert_ok!(PhalaStakePool::claim_rewards(Origin::signed(1), 0, 1)); + assert_eq!( + take_events().as_slice(), + [ + TestEvent::Balances(pallet_balances::Event::::Transfer( + PhalaMining::account_id(), + 1, + 100 * DOLLARS + )), + TestEvent::PhalaStakePool(Event::RewardsWithdrawn(0, 1, 100 * DOLLARS)) + ] + ); + let pool = PhalaStakePool::stake_pools(0).unwrap(); + let staker1 = PhalaStakePool::pool_stakers((0, 1)).unwrap(); + assert_eq!(pool.reward_acc.get(), fp!(1), "reward_acc shouldn't change"); + assert_eq!(staker1.reward_debt, 100 * DOLLARS); + assert_eq!(pool.pending_reward(&staker1), 0); + + // Mined 500 PHA + PhalaStakePool::on_reward(&vec![SettleInfo { + pubkey: worker_pubkey(1), + v: FixedPoint::from_num(1).to_bits(), + payout: FixedPoint::from_num(500).to_bits(), + treasury: 0, + }]); + // Should result in 100, 800 PHA pending reward for staker1 & 2 + let pool = PhalaStakePool::stake_pools(0).unwrap(); + let staker1 = PhalaStakePool::pool_stakers((0, 1)).unwrap(); + let staker2 = PhalaStakePool::pool_stakers((0, 2)).unwrap(); + assert_eq!(pool.reward_acc.get(), fp!(2)); + assert_eq!(pool.pending_reward(&staker1), 100 * DOLLARS); + assert_eq!(pool.pending_reward(&staker2), 800 * DOLLARS); + + // Staker2 claims 800 PHA rewrad, left 800 debt + let _ = take_events(); + assert_ok!(PhalaStakePool::claim_rewards(Origin::signed(2), 0, 2)); + let pool = PhalaStakePool::stake_pools(0).unwrap(); + let staker2 = PhalaStakePool::pool_stakers((0, 2)).unwrap(); + assert_eq!(staker2.reward_debt, 800 * DOLLARS); + + // Staker1 contribute another 300 PHA (now 50:50), causing a passive reward settlement + assert_ok!(PhalaStakePool::contribute( + Origin::signed(1), + 0, + 300 * DOLLARS + )); + let staker1 = PhalaStakePool::pool_stakers((0, 1)).unwrap(); + assert_eq!(staker1.shares, 400 * DOLLARS); + assert_eq!(staker1.reward_debt, 800 * DOLLARS); + + // Mined 800 PHA + PhalaStakePool::on_reward(&vec![SettleInfo { + pubkey: worker_pubkey(1), + v: FixedPoint::from_num(1).to_bits(), + payout: FixedPoint::from_num(800).to_bits(), + treasury: 0, + }]); + assert_ok!(PhalaStakePool::claim_rewards(Origin::signed(1), 0, 1)); + let pool = PhalaStakePool::stake_pools(0).unwrap(); + let staker1 = PhalaStakePool::pool_stakers((0, 1)).unwrap(); + let staker2 = PhalaStakePool::pool_stakers((0, 2)).unwrap(); + assert_eq!(pool.reward_acc.get(), fp!(3)); + assert_eq!(pool.pending_reward(&staker1), 0); + assert_eq!(pool.pending_reward(&staker2), 400 * DOLLARS); + + // Staker1 withdraw all + let _ = take_events(); + assert_ok!(PhalaStakePool::withdraw( + Origin::signed(1), + 0, + 400 * DOLLARS + )); + assert_eq!( + take_events().as_slice(), + [TestEvent::PhalaStakePool(Event::Withdrawal( + 0, + 1, + 400 * DOLLARS + ))] + ); + let staker1 = PhalaStakePool::pool_stakers((0, 1)).unwrap(); + let staker2 = PhalaStakePool::pool_stakers((0, 2)).unwrap(); + assert_eq!(staker1.shares, 0); + assert_eq!(staker1.reward_debt, 0); + assert_eq!(staker2.shares, 400 * DOLLARS); + }); + } + + #[test] + fn test_late_reward_report() { + use crate::mining::pallet::OnReward; + new_test_ext().execute_with(|| { + set_block_1(); + setup_workers(1); + setup_pool_with_workers(1, &[1]); // pid = 0 + + // Simulate no share in the pool. + let _ = take_events(); + PhalaStakePool::on_reward(&vec![SettleInfo { + pubkey: worker_pubkey(1), + v: FixedPoint::from_num(1).to_bits(), + payout: FixedPoint::from_num(500).to_bits(), + treasury: 0, + }]); + let ev = take_events(); + assert_eq!( + ev, + vec![TestEvent::PhalaStakePool(Event::RewardDismissedNoShare( + 0, + 500 * DOLLARS + ))] + ); + // Simulate the worker is already unbound + assert_ok!(PhalaStakePool::remove_worker( + Origin::signed(1), + 0, + worker_pubkey(1) + )); + let _ = take_events(); + PhalaStakePool::on_reward(&vec![SettleInfo { + pubkey: worker_pubkey(1), + v: FixedPoint::from_num(1).to_bits(), + payout: FixedPoint::from_num(500).to_bits(), + treasury: 0, + }]); + let ev = take_events(); + assert_eq!( + ev, + vec![TestEvent::PhalaStakePool(Event::RewardDismissedNotInPool( + worker_pubkey(1), + 500 * DOLLARS + ))] + ); + }); + } + + #[test] + fn test_drained_subsidy_pool_noop() { + use crate::mining::pallet::OnReward; + new_test_ext().execute_with(|| { + set_block_1(); + setup_workers(1); + setup_pool_with_workers(1, &[1]); // pid = 0 + assert_ok!(PhalaStakePool::contribute( + Origin::signed(1), + 0, + 100 * DOLLARS + )); + PhalaStakePool::on_reward(&vec![SettleInfo { + pubkey: worker_pubkey(1), + v: FixedPoint::from_num(1).to_bits(), + payout: FixedPoint::from_num(500).to_bits(), + treasury: 0, + }]); + assert_ok!(Balances::set_balance( + Origin::root(), + PhalaMining::account_id(), + 1 * DOLLARS, + 0 + )); + assert_noop!( + PhalaStakePool::claim_rewards(Origin::signed(1), 0, 1), + Error::::InternalSubsidyPoolCannotWithdraw + ); + }); + } + + #[test] + fn test_withdraw() { + use crate::mining::pallet::{OnReclaim, OnStopped}; + new_test_ext().execute_with(|| { + set_block_1(); + setup_workers(2); + setup_pool_with_workers(1, &[1, 2]); // pid = 0 + let sub_account1 = pool_sub_account(0, &worker_pubkey(1)); + let sub_account2 = pool_sub_account(0, &worker_pubkey(2)); + + // Stake 1000 PHA, and start two miners with 400 & 100 PHA as stake + assert_ok!(PhalaStakePool::contribute( + Origin::signed(2), + 0, + 1000 * DOLLARS + )); + assert_ok!(PhalaStakePool::start_mining( + Origin::signed(1), + 0, + worker_pubkey(1), + 400 * DOLLARS + )); + assert_ok!(PhalaStakePool::start_mining( + Origin::signed(1), + 0, + worker_pubkey(2), + 100 * DOLLARS + )); + let staker2 = PhalaStakePool::pool_stakers((0, 2)).unwrap(); + assert_eq!(staker2.shares, 1000 * DOLLARS); + assert_eq!(Balances::locks(2), vec![the_lock(1000 * DOLLARS)]); + // Cannot withdraw more than one's stake + assert_noop!( + PhalaStakePool::withdraw(Origin::signed(2), 0, 9999 * DOLLARS), + Error::::InvalidWithdrawalAmount + ); + // Immediate withdraw 499 PHA from the free stake + assert_ok!(PhalaStakePool::withdraw( + Origin::signed(2), + 0, + 499 * DOLLARS + )); + let pool = PhalaStakePool::stake_pools(0).unwrap(); + let staker2 = PhalaStakePool::pool_stakers((0, 2)).unwrap(); + assert_eq!(pool.free_stake, 1 * DOLLARS); + assert_eq!(pool.total_stake, 501 * DOLLARS); + assert_eq!(staker2.shares, 501 * DOLLARS); + assert_eq!(Balances::locks(2), vec![the_lock(501 * DOLLARS)]); + // Withdraw 2 PHA will only fulfill 1 PHA from the free stake, leaving 1 PHA in the + // withdraw queue + assert_ok!(PhalaStakePool::withdraw(Origin::signed(2), 0, 2 * DOLLARS)); + let pool = PhalaStakePool::stake_pools(0).unwrap(); + let staker2 = PhalaStakePool::pool_stakers((0, 2)).unwrap(); + assert_eq!(pool.free_stake, 0); + assert_eq!(pool.total_stake, 500 * DOLLARS); + assert_eq!(staker2.shares, 500 * DOLLARS); + assert_eq!(Balances::locks(2), vec![the_lock(500 * DOLLARS)]); + // Check the queue + assert_eq!( + pool.withdraw_queue, + vec![WithdrawInfo { + user: 2, + shares: 1 * DOLLARS, + start_time: 0 + }] + ); + let ts_queue = PhalaStakePool::withdrawal_timestamps(); + assert_eq!(ts_queue.len(), 1); + assert_eq!( + PhalaStakePool::withdrawal_queued_pools(ts_queue.front().unwrap()), + Some(vec![0]) + ); + + // Contribute 1 PHA to trigger instant withdraw, fulfilling the withdraw request. + // Then staker1 has 1PHA in stake, and staker2 only has 499 PHA in stake. + let _ = take_events(); + assert_ok!(PhalaStakePool::contribute( + Origin::signed(1), + 0, + 1 * DOLLARS + )); + assert_eq!( + take_events().as_slice(), + [ + TestEvent::PhalaStakePool(Event::Withdrawal(0, 2, 1 * DOLLARS)), + TestEvent::PhalaStakePool(Event::Contribution(0, 1, 1 * DOLLARS)) + ] + ); + let pool = PhalaStakePool::stake_pools(0).unwrap(); + let staker1 = PhalaStakePool::pool_stakers((0, 1)).unwrap(); + let staker2 = PhalaStakePool::pool_stakers((0, 2)).unwrap(); + assert_eq!(pool.free_stake, 0); + assert_eq!(pool.total_stake, 500 * DOLLARS); + assert_eq!(pool.withdraw_queue.is_empty(), true); + assert_eq!(staker1.shares, 1 * DOLLARS); + assert_eq!(staker2.shares, 499 * DOLLARS); + assert_eq!(Balances::locks(2), vec![the_lock(499 * DOLLARS)]); + // Staker2 and 1 withdraw 199 PHA, 1 PHA, queued, and then wait for force clear + assert_ok!(PhalaStakePool::withdraw( + Origin::signed(2), + 0, + 199 * DOLLARS + )); + assert_ok!(PhalaStakePool::withdraw(Origin::signed(1), 0, 1 * DOLLARS)); + let pool = PhalaStakePool::stake_pools(0).unwrap(); + let staker1 = PhalaStakePool::pool_stakers((0, 1)).unwrap(); + let staker2 = PhalaStakePool::pool_stakers((0, 2)).unwrap(); + assert_eq!( + pool.withdraw_queue, + vec![ + WithdrawInfo { + user: 2, + shares: 199 * DOLLARS, + start_time: 0 + }, + WithdrawInfo { + user: 1, + shares: 1 * DOLLARS, + start_time: 0 + } + ] + ); + assert_eq!(staker1.shares, 1 * DOLLARS); + assert_eq!(staker2.shares, 499 * DOLLARS); + // Trigger a force clear by `on_reclaim()`, releasing 100 PHA stake to partially + // fulfill staker2's withdraw request, but leaving staker1's untouched. + let _ = take_events(); + PhalaStakePool::on_stopped(&worker_pubkey(2), 100 * DOLLARS, 0); + PhalaStakePool::on_reclaim(&sub_account2, 100 * DOLLARS, 0); + assert_eq!( + take_events().as_slice(), + [TestEvent::PhalaStakePool(Event::Withdrawal( + 0, + 2, + 100 * DOLLARS + )),] + ); + let pool = PhalaStakePool::stake_pools(0).unwrap(); + let staker1 = PhalaStakePool::pool_stakers((0, 1)).unwrap(); + let staker2 = PhalaStakePool::pool_stakers((0, 2)).unwrap(); + assert_eq!(pool.total_stake, 400 * DOLLARS); + assert_eq!(pool.free_stake, 0); + assert_eq!(staker1.shares, 1 * DOLLARS); + assert_eq!(staker2.shares, 399 * DOLLARS); + // Trigger another force clear with 100 PHA slashed, releasing all 400 PHA stake + // (100 slashed & 300 free), fulfilling stakers' requests. + let _ = take_events(); + PhalaStakePool::on_stopped(&worker_pubkey(1), 400 * DOLLARS, 100 * DOLLARS); + PhalaStakePool::on_reclaim(&sub_account1, 400 * DOLLARS, 100 * DOLLARS); + assert_eq!( + take_events().as_slice(), + [ + TestEvent::PhalaStakePool(Event::PoolSlashed(0, 100 * DOLLARS)), + // Staker 2 got 75% * 99 PHA back + TestEvent::PhalaStakePool(Event::SlashSettled(0, 2, 99_750000000000)), + TestEvent::PhalaStakePool(Event::Withdrawal(0, 2, 74_250000000000)), + // Staker 1 got 75% * 1 PHA back + TestEvent::PhalaStakePool(Event::SlashSettled(0, 1, 250000000000)), + TestEvent::PhalaStakePool(Event::Withdrawal(0, 1, 750000000000)), + ] + ); + let pool = PhalaStakePool::stake_pools(0).unwrap(); + let staker1 = PhalaStakePool::pool_stakers((0, 1)).unwrap(); + let staker2 = PhalaStakePool::pool_stakers((0, 2)).unwrap(); + // After fulfill all the withdraw requests (100 shares, 75 PHA), there are 100 PHA + // slashed and 75 PHA withdrawn, leaving 225 PHA in the pool, all belong to + // staker2. + assert_eq!(pool.total_stake, 225 * DOLLARS); + assert_eq!(pool.free_stake, 225 * DOLLARS); + assert_eq!(staker1.shares, 0); + assert_eq!(staker2.shares, 300 * DOLLARS); + assert_eq!(Balances::locks(1), vec![]); + assert_eq!(Balances::locks(2), vec![the_lock(225 * DOLLARS)]); + }); + } + + #[test] + fn test_pool_has_expired_withdraw() { + // Default pool setup + let mut pool: PoolInfo = Default::default(); + pool.total_shares = 1000 * DOLLARS; + pool.total_stake = 900 * DOLLARS; // 90% stake returned + pool.withdraw_queue.push_back(WithdrawInfo { + user: 1, + shares: 100 * DOLLARS, + start_time: 0, + }); + pool.withdraw_queue.push_back(WithdrawInfo { + user: 2, + shares: 200 * DOLLARS, + start_time: 100, + }); + pool.withdraw_queue.push_back(WithdrawInfo { + user: 3, + shares: 400 * DOLLARS, + start_time: 200, + }); + // No releasing stake + let pool1 = PoolInfo:: { + releasing_stake: 0, + ..pool.clone() + }; + assert!(!pool1.has_expired_withdrawal(0, 100), "All in grace period"); + assert!( + !pool1.has_expired_withdrawal(100, 100), + "Still all in grace period" + ); + assert!( + pool1.has_expired_withdrawal(101, 100), + "First withdraw request expired" + ); + // Releaing stake to cover the first request + let pool2 = PoolInfo:: { + releasing_stake: 90 * DOLLARS, + ..pool.clone() + }; + assert!( + !pool2.has_expired_withdrawal(101, 100), + "First withdraw request fulfilled" + ); + assert!( + pool2.has_expired_withdrawal(201, 100), + "Second withdraw request expired" + ); + let pool3 = PoolInfo:: { + releasing_stake: 630 * DOLLARS - 10, + ..pool.clone() + }; + assert!( + pool3.has_expired_withdrawal(1000, 100), + "No enought releasing stake to fulfill all" + ); + let pool4 = PoolInfo:: { + releasing_stake: 630 * DOLLARS, + ..pool.clone() + }; + assert!(!pool4.has_expired_withdrawal(1000, 100), "Enough stake"); + } + + #[test] + fn test_force_withdraw() { + new_test_ext().execute_with(|| { + set_block_1(); + setup_workers(1); + setup_pool_with_workers(1, &[1]); // pid = 0 + let sub_account1: u64 = pool_sub_account(0, &worker_pubkey(1)); + + // Stake 1000 PHA, and start two miners with 400 & 100 PHA as stake + assert_ok!(PhalaStakePool::contribute( + Origin::signed(2), + 0, + 900 * DOLLARS + )); + assert_ok!(PhalaStakePool::contribute( + Origin::signed(3), + 0, + 100 * DOLLARS + )); + assert_ok!(PhalaStakePool::start_mining( + Origin::signed(1), + 0, + worker_pubkey(1), + 900 * DOLLARS + )); + assert_ok!(PhalaStakePool::withdraw( + Origin::signed(2), + 0, + 900 * DOLLARS + )); + // Now: 100 already withdrawl, 800 in queue + // Then we make the withdraw request expired. + let grace_period = ::GracePeriod::get(); + elapse_seconds(grace_period + 1); + teleport_to_block(2); + // Check stake releasing + let pool = PhalaStakePool::stake_pools(0).unwrap(); + assert_eq!(pool.releasing_stake, 900 * DOLLARS); + assert_eq!(pool.total_stake, 900 * DOLLARS); + let user2 = PhalaStakePool::pool_stakers(&(0, 2)).unwrap(); + assert_eq!(user2.locked, 800 * DOLLARS); + assert_eq!(user2.shares, 800 * DOLLARS); + // Check worker is shutting down + let miner = PhalaMining::miners(sub_account1).unwrap(); + assert_eq!(miner.state, mining::MinerState::MiningCoolingDown); + // Reclaim, triggering the return of the stake + elapse_cool_down(); + assert_ok!(PhalaMining::reclaim(Origin::signed(1), sub_account1)); + // Check worker is is reclaimed + let miner = PhalaMining::miners(sub_account1).unwrap(); + assert_eq!(miner.state, mining::MinerState::Ready); + // Check settled + let pool = PhalaStakePool::stake_pools(0).unwrap(); + assert_eq!(pool.releasing_stake, 0); + assert_eq!(pool.total_stake, 100 * DOLLARS); + let user2 = PhalaStakePool::pool_stakers(&(0, 2)).unwrap(); + assert_eq!(user2.locked, 0); + assert_eq!(user2.shares, 0); + assert_eq!(Balances::locks(2), vec![]); + }); + } + + #[test] + fn issue_388_double_stake() { + new_test_ext().execute_with(|| { + set_block_1(); + setup_workers(1); + setup_pool_with_workers(1, &[1]); + + let balance = Balances::usable_balance(&1); + assert_ok!(PhalaStakePool::contribute(Origin::signed(1), 0, balance)); + assert_noop!( + PhalaStakePool::contribute(Origin::signed(1), 0, balance), + Error::::InsufficientBalance + ); + }); + } + + #[test] + fn test_pool_owner_reward() { + use crate::mining::pallet::OnReward; + new_test_ext().execute_with(|| { + set_block_1(); + setup_workers(1); + setup_pool_with_workers(1, &[1]); + + assert_ok!(PhalaStakePool::set_payout_pref( + Origin::signed(1), + 0, + Permill::from_percent(50) + )); + // Staker2 contribute 1000 PHA and start mining + assert_ok!(PhalaStakePool::contribute( + Origin::signed(2), + 0, + 1000 * DOLLARS + )); + assert_ok!(PhalaStakePool::start_mining( + Origin::signed(1), + 0, + worker_pubkey(1), + 1000 * DOLLARS + )); + // Mined 100 PHA + PhalaStakePool::on_reward(&vec![SettleInfo { + pubkey: worker_pubkey(1), + v: FixedPoint::from_num(1).to_bits(), + payout: FixedPoint::from_num(100).to_bits(), + treasury: 0, + }]); + // Both owner and staker2 can claim 50 PHA + let _ = take_events(); + assert_ok!(PhalaStakePool::claim_rewards(Origin::signed(1), 0, 1)); + assert_ok!(PhalaStakePool::claim_rewards(Origin::signed(2), 0, 2)); + let ev = take_events(); + assert_matches!( + ev.as_slice(), + [ + TestEvent::Balances(pallet_balances::Event::Transfer(_, 1, 50000000000000)), + TestEvent::PhalaStakePool(Event::RewardsWithdrawn(0, 1, 50000000000000)), + TestEvent::Balances(pallet_balances::Event::Transfer(_, 2, 49999999999999)), + TestEvent::PhalaStakePool(Event::RewardsWithdrawn(0, 2, 49999999999999)) + ] + ); + }); + } + + #[test] + fn test_full_procedure() { + new_test_ext().execute_with(|| { + set_block_1(); + let worker1 = worker_pubkey(1); + let worker2 = worker_pubkey(2); + let worker3 = worker_pubkey(3); + // Register workers + assert_ok!(PhalaRegistry::force_register_worker( + Origin::root(), + worker1.clone(), + ecdh_pubkey(1), + Some(1) + )); + assert_ok!(PhalaRegistry::force_register_worker( + Origin::root(), + worker2.clone(), + ecdh_pubkey(2), + Some(1) + )); + assert_ok!(PhalaRegistry::force_register_worker( + Origin::root(), + worker3.clone(), + ecdh_pubkey(3), + Some(1) + )); + PhalaRegistry::internal_set_benchmark(&worker1, Some(1)); + PhalaRegistry::internal_set_benchmark(&worker2, Some(1)); + PhalaRegistry::internal_set_benchmark(&worker3, Some(1)); + + // Create a pool (pid = 0) + assert_ok!(PhalaStakePool::create(Origin::signed(1))); + let _ = take_events(); + assert_ok!(PhalaStakePool::set_payout_pref( + Origin::signed(1), + 0, + Permill::from_percent(50) + )); + assert_eq!( + take_events().as_slice(), + [TestEvent::PhalaStakePool(Event::PoolCommissionSet( + 0, + 1000_000u32 * 50 / 100 + ))] + ); + assert_ok!(PhalaStakePool::add_worker( + Origin::signed(1), + 0, + worker1.clone() + )); + assert_ok!(PhalaStakePool::add_worker( + Origin::signed(1), + 0, + worker2.clone() + )); + // Create a pool (pid = 1) + assert_ok!(PhalaStakePool::create(Origin::signed(1))); + assert_ok!(PhalaStakePool::add_worker( + Origin::signed(1), + 1, + worker3.clone() + )); + // Contribute 300 PHA to pool0, 300 to pool1 + assert_ok!(PhalaStakePool::set_cap(Origin::signed(1), 0, 300 * DOLLARS)); + assert_ok!(PhalaStakePool::contribute( + Origin::signed(1), + 0, + 100 * DOLLARS + )); + assert_eq!(StakeLedger::::get(1).unwrap(), 100 * DOLLARS); + assert_ok!(PhalaStakePool::contribute( + Origin::signed(1), + 1, + 300 * DOLLARS + )); + assert_eq!(StakeLedger::::get(1).unwrap(), 400 * DOLLARS); + assert_eq!( + StakePools::::get(0).unwrap().total_stake, + 100 * DOLLARS + ); + assert_eq!( + PoolStakers::::get(&(0, 1)).unwrap().shares, + 100 * DOLLARS + ); + + assert_ok!(PhalaStakePool::contribute( + Origin::signed(2), + 0, + 200 * DOLLARS + )); + assert_eq!( + StakePools::::get(0).unwrap().total_stake, + 300 * DOLLARS + ); + assert_eq!( + PoolStakers::::get(&(0, 2)).unwrap().shares, + 200 * DOLLARS + ); + // Shouldn't exceed the pool cap + assert_noop!( + PhalaStakePool::contribute(Origin::signed(1), 0, 100 * DOLLARS), + Error::::StakeExceedsCapacity + ); + // Start mining on pool0 (stake 100 for worker1, 100 for worke2) + assert_ok!(PhalaStakePool::start_mining( + Origin::signed(1), + 0, + worker1.clone(), + 100 * DOLLARS + )); + assert_ok!(PhalaStakePool::start_mining( + Origin::signed(1), + 0, + worker2.clone(), + 100 * DOLLARS + )); + assert_eq!(PhalaMining::online_miners(), 2); + // Withdraw 100 free funds + assert_ok!(PhalaStakePool::withdraw( + Origin::signed(1), + 0, + 100 * DOLLARS + )); + assert_eq!(StakeLedger::::get(1).unwrap(), 300 * DOLLARS); + + // TODO: check queued withdraw + // - withdraw 100 PHA + // - stop a worker + // - wait CD, withdraw succeeded + // - withdraw another 100 PHA + // - wait 3d, force stop + // - wait 7d, withdraw succeeded + + let sub_account1: u64 = pool_sub_account(0, &worker1); + let sub_account2: u64 = pool_sub_account(0, &worker2); + + // Slash pool 0 to 90% + let miner0 = PhalaMining::miners(sub_account1).unwrap(); + let ve = FixedPoint::from_bits(miner0.ve); + simulate_v_update(1, (ve * fp!(0.9)).to_bits()); + + // Stop mining + assert_ok!(PhalaStakePool::stop_mining( + Origin::signed(1), + 0, + worker1.clone() + )); + assert_ok!(PhalaStakePool::stop_mining( + Origin::signed(1), + 0, + worker2.clone() + )); + assert_eq!(PhalaMining::online_miners(), 0); + let miner1 = PhalaMining::miners(&sub_account1).unwrap(); + let miner2 = PhalaMining::miners(&sub_account2).unwrap(); + assert_eq!(miner1.state, mining::MinerState::MiningCoolingDown); + assert_eq!(miner2.state, mining::MinerState::MiningCoolingDown); + // Wait the cool down period + elapse_cool_down(); + assert_ok!(PhalaMining::reclaim( + Origin::signed(1), + sub_account1.clone() + )); + assert_ok!(PhalaMining::reclaim( + Origin::signed(1), + sub_account2.clone() + )); + // 90% stake get returend from pool 0 + let pool0 = PhalaStakePool::stake_pools(0).unwrap(); + assert_eq!(pool0.free_stake, 189_999999999999); + // Withdraw the stakes + assert_ok!(PhalaStakePool::withdraw( + Origin::signed(2), + 0, + 200 * DOLLARS + )); + // Stop pool1 and withdraw stake as well + assert_ok!(PhalaStakePool::withdraw( + Origin::signed(1), + 1, + 300 * DOLLARS + )); + // Settle everything + assert_eq!(StakeLedger::::get(1).unwrap(), 0); + assert_eq!(StakeLedger::::get(1).unwrap(), 0); + assert!(Balances::locks(1).is_empty()); + assert!(Balances::locks(2).is_empty()); + // Remove worker from the pools + assert_ok!(PhalaStakePool::remove_worker( + Origin::signed(1), + 0, + worker1.clone() + )); + assert_ok!(PhalaStakePool::remove_worker( + Origin::signed(1), + 0, + worker2.clone() + )); + }); + } + + fn the_lock(amount: Balance) -> pallet_balances::BalanceLock { + pallet_balances::BalanceLock { + id: STAKING_ID, + amount, + reasons: pallet_balances::Reasons::All, + } + } + + /// Sets up a stakepool with the given workers added. + /// + /// Returns the pool id. + fn setup_pool_with_workers(owner: u64, workers: &[u8]) -> u64 { + let pid = PhalaStakePool::pool_count(); + assert_ok!(PhalaStakePool::create(Origin::signed(owner))); + for id in workers { + assert_ok!(PhalaStakePool::add_worker( + Origin::signed(owner), + pid, + worker_pubkey(*id), + )); + } + pid + } + + fn simulate_v_update(worker: u8, v_bits: u128) { + use phala_types::messaging::{ + DecodedMessage, MessageOrigin, MiningInfoUpdateEvent, SettleInfo, Topic, + }; + let block = System::block_number(); + let now = Timestamp::now(); + assert_ok!(PhalaMining::on_gk_message_received(DecodedMessage::< + MiningInfoUpdateEvent, + > { + sender: MessageOrigin::Gatekeeper, + destination: Topic::new(*b"^phala/mining/update"), + payload: MiningInfoUpdateEvent:: { + block_number: block, + timestamp_ms: now, + offline: vec![], + recovered_to_online: vec![], + settle: vec![SettleInfo { + pubkey: worker_pubkey(worker), + v: v_bits, + payout: 0, + treasury: 0, + }], + }, + })); + } + } +} diff --git a/pallets/phala/src/utils/accumulator.rs b/pallets/phala/src/utils/accumulator.rs new file mode 100644 index 00000000..3435411d --- /dev/null +++ b/pallets/phala/src/utils/accumulator.rs @@ -0,0 +1,26 @@ +use fixed::types::U64F64 as FixedPoint; + +use crate::balance_convert::{mul, FixedPointConvert}; + +/// Accumulator algorithm for passive reward distribution +pub struct Accumulator(sp_std::marker::PhantomData); + +impl Accumulator +where + B: sp_runtime::traits::AtLeast32BitUnsigned + Copy + FixedPointConvert, +{ + /// Clear the accumulator + pub fn clear_pending(share: B, acc: &FixedPoint, debt: &mut B) { + *debt = mul(share, acc) + } + + /// Returns the current pending value in the accumulator + pub fn pending(share: B, acc: &FixedPoint, debt: B) -> B { + mul(share, acc) - debt + } + + /// Distributes propotionally to all the users in the accumulator + pub fn distribute(total_share: B, acc: &mut FixedPoint, v: B) { + *acc += v.to_fixed() / total_share.to_fixed(); + } +} diff --git a/pallets/phala/src/utils/attestation.rs b/pallets/phala/src/utils/attestation.rs new file mode 100644 index 00000000..f42911dd --- /dev/null +++ b/pallets/phala/src/utils/attestation.rs @@ -0,0 +1,150 @@ +use crate::constants::*; + +use codec::{Decode, Encode}; +use sp_std::{ + borrow::ToOwned, + convert::{TryFrom, TryInto}, + vec::Vec, +}; + +#[derive(Encode, Decode, Debug, Clone, PartialEq, Eq)] +pub enum Attestation { + SgxIas { + ra_report: Vec, + signature: Vec, + raw_signing_cert: Vec, + }, +} + +pub trait AttestationValidator { + /// Validates the attestation as well as the user data hash it commits to. + fn validate( + attestation: &Attestation, + user_data_hash: &[u8; 32], + now: u64, + ) -> Result; +} + +pub enum Error { + InvalidIASSigningCert, + InvalidReport, + InvalidQuoteStatus, + BadIASReport, + OutdatedIASReport, + UnknownQuoteBodyFormat, + InvalidUserDataHash, +} + +pub struct IasFields { + pub mr_enclave: [u8; 32], + pub mr_signer: [u8; 32], + pub isv_prod_id: [u8; 2], + pub isv_svn: [u8; 2], + pub report_data: [u8; 64], + pub confidence_level: u8, +} + +/// Attestation validator implementation for IAS +pub struct IasValidator; +impl AttestationValidator for IasValidator { + fn validate( + attestation: &Attestation, + user_data_hash: &[u8; 32], + now: u64, + ) -> Result { + let fields = match attestation { + Attestation::SgxIas { + ra_report, + signature, + raw_signing_cert, + } => validate_ias_report(ra_report, signature, raw_signing_cert, now), + }?; + let commit = &fields.report_data[..32]; + if commit != user_data_hash { + Err(Error::InvalidUserDataHash) + } else { + Ok(fields) + } + } +} + +pub fn validate_ias_report( + report: &[u8], + signature: &[u8], + raw_signing_cert: &[u8], + now: u64, +) -> Result { + // Validate report + let sig_cert = webpki::EndEntityCert::try_from(raw_signing_cert); + let sig_cert = sig_cert.or(Err(Error::InvalidIASSigningCert))?; + let verify_result = + sig_cert.verify_signature(&webpki::RSA_PKCS1_2048_8192_SHA256, report, signature); + verify_result.or(Err(Error::InvalidIASSigningCert))?; + // Validate certificate + let chain: Vec<&[u8]> = Vec::new(); + let time_now = webpki::Time::from_seconds_since_unix_epoch(now); + let tls_server_cert_valid = sig_cert.verify_is_valid_tls_server_cert( + SUPPORTED_SIG_ALGS, + &IAS_SERVER_ROOTS, + &chain, + time_now, + ); + tls_server_cert_valid.or(Err(Error::InvalidIASSigningCert))?; + // Validate related fields + let parsed_report: serde_json::Value = + serde_json::from_slice(report).or(Err(Error::InvalidReport))?; + // Validate time + let raw_report_timestamp = parsed_report["timestamp"] + .as_str() + .unwrap_or("UNKNOWN") + .to_owned() + + "Z"; + let report_timestamp = chrono::DateTime::parse_from_rfc3339(&raw_report_timestamp) + .or(Err(Error::BadIASReport))? + .timestamp(); + if (now as i64 - report_timestamp) >= 7200 { + return Err(Error::OutdatedIASReport); + } + // Filter valid `isvEnclaveQuoteStatus` + let quote_status = &parsed_report["isvEnclaveQuoteStatus"] + .as_str() + .unwrap_or("UNKNOWN"); + let mut confidence_level: u8 = 128; + if IAS_QUOTE_STATUS_LEVEL_1.contains(quote_status) { + confidence_level = 1; + } else if IAS_QUOTE_STATUS_LEVEL_2.contains(quote_status) { + confidence_level = 2; + } else if IAS_QUOTE_STATUS_LEVEL_3.contains(quote_status) { + confidence_level = 3; + } else if IAS_QUOTE_STATUS_LEVEL_5.contains(quote_status) { + confidence_level = 5; + } + if confidence_level == 128 { + return Err(Error::InvalidQuoteStatus); + } + if confidence_level < 5 { + // Filter AdvisoryIDs. `advisoryIDs` is optional + if let Some(advisory_ids) = parsed_report["advisoryIDs"].as_array() { + for advisory_id in advisory_ids { + let advisory_id = advisory_id.as_str().ok_or(Error::BadIASReport)?; + if !IAS_QUOTE_ADVISORY_ID_WHITELIST.contains(&advisory_id) { + confidence_level = 4; + } + } + } + } + // Extract quote fields + let raw_quote_body = parsed_report["isvEnclaveQuoteBody"] + .as_str() + .ok_or(Error::UnknownQuoteBodyFormat)?; + let quote_body = base64::decode(&raw_quote_body).or(Err(Error::UnknownQuoteBodyFormat))?; + // Check the following fields + Ok(IasFields { + mr_enclave: ("e_body[112..144]).try_into().unwrap(), + mr_signer: ("e_body[176..208]).try_into().unwrap(), + isv_prod_id: ("e_body[304..306]).try_into().unwrap(), + isv_svn: ("e_body[306..308]).try_into().unwrap(), + report_data: ("e_body[368..432]).try_into().unwrap(), + confidence_level, + }) +} diff --git a/pallets/phala/src/utils/balance_convert.rs b/pallets/phala/src/utils/balance_convert.rs new file mode 100644 index 00000000..9c2616f8 --- /dev/null +++ b/pallets/phala/src/utils/balance_convert.rs @@ -0,0 +1,39 @@ +use fixed::types::U64F64; +use fixed_macro::fixed; +use U64F64 as FixedPoint; + +pub trait FixedPointConvert { + fn from_bits(bits: u128) -> Self; + fn from_fixed(v: &FixedPoint) -> Self; + fn to_fixed(&self) -> FixedPoint; +} + +const FIXED_1E12: FixedPoint = fixed!(1_000_000_000_000: U64F64); + +// 12 decimals u128 conversion +impl FixedPointConvert for u128 { + fn from_bits(bits: u128) -> Self { + Self::from_fixed(&FixedPoint::from_bits(bits)) + } + fn from_fixed(v: &FixedPoint) -> Self { + v.saturating_mul(FIXED_1E12).to_num() + } + fn to_fixed(&self) -> FixedPoint { + let v = FixedPoint::from_num(*self); + v.saturating_div(FIXED_1E12) + } +} + +pub fn mul(x: B, y: &FixedPoint) -> B +where + B: sp_runtime::traits::AtLeast32BitUnsigned + Copy + FixedPointConvert, +{ + FixedPointConvert::from_fixed(&(x.to_fixed() * y)) +} + +pub fn div(x: B, y: &FixedPoint) -> B +where + B: sp_runtime::traits::AtLeast32BitUnsigned + Copy + FixedPointConvert, +{ + FixedPointConvert::from_fixed(&(x.to_fixed() / y)) +} diff --git a/pallets/phala/src/utils/constants.rs b/pallets/phala/src/utils/constants.rs new file mode 100644 index 00000000..7b4367c5 --- /dev/null +++ b/pallets/phala/src/utils/constants.rs @@ -0,0 +1,68 @@ +pub const RANDOMNESS_SUBJECT: &[u8] = b"PhalaPoW"; + +pub const IAS_QUOTE_STATUS_LEVEL_1: &[&str] = &["OK"]; +pub const IAS_QUOTE_STATUS_LEVEL_2: &[&str] = &["SW_HARDENING_NEEDED"]; +pub const IAS_QUOTE_STATUS_LEVEL_3: &[&str] = &[ + "CONFIGURATION_NEEDED", + "CONFIGURATION_AND_SW_HARDENING_NEEDED", +]; +// LEVEL 4 is LEVEL 3 with advisors which not included in whitelist +pub const IAS_QUOTE_STATUS_LEVEL_5: &[&str] = &["GROUP_OUT_OF_DATE"]; +pub const IAS_QUOTE_ADVISORY_ID_WHITELIST: &[&str] = &[ + "INTEL-SA-00334", + "INTEL-SA-00219", + "INTEL-SA-00381", + "INTEL-SA-00389", +]; +pub type SignatureAlgorithms = &'static [&'static webpki::SignatureAlgorithm]; +pub static SUPPORTED_SIG_ALGS: SignatureAlgorithms = &[ + // &webpki::ECDSA_P256_SHA256, + // &webpki::ECDSA_P256_SHA384, + // &webpki::ECDSA_P384_SHA256, + // &webpki::ECDSA_P384_SHA384, + &webpki::RSA_PKCS1_2048_8192_SHA256, + &webpki::RSA_PKCS1_2048_8192_SHA384, + &webpki::RSA_PKCS1_2048_8192_SHA512, + &webpki::RSA_PKCS1_3072_8192_SHA384, +]; + +pub static IAS_SERVER_ROOTS: webpki::TlsServerTrustAnchors = webpki::TlsServerTrustAnchors(&[ + /* + * -----BEGIN CERTIFICATE----- + * MIIFSzCCA7OgAwIBAgIJANEHdl0yo7CUMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNV + * BAYTAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExGjAYBgNV + * BAoMEUludGVsIENvcnBvcmF0aW9uMTAwLgYDVQQDDCdJbnRlbCBTR1ggQXR0ZXN0 + * YXRpb24gUmVwb3J0IFNpZ25pbmcgQ0EwIBcNMTYxMTE0MTUzNzMxWhgPMjA0OTEy + * MzEyMzU5NTlaMH4xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwL + * U2FudGEgQ2xhcmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMTAwLgYDVQQD + * DCdJbnRlbCBTR1ggQXR0ZXN0YXRpb24gUmVwb3J0IFNpZ25pbmcgQ0EwggGiMA0G + * CSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCfPGR+tXc8u1EtJzLA10Feu1Wg+p7e + * LmSRmeaCHbkQ1TF3Nwl3RmpqXkeGzNLd69QUnWovYyVSndEMyYc3sHecGgfinEeh + * rgBJSEdsSJ9FpaFdesjsxqzGRa20PYdnnfWcCTvFoulpbFR4VBuXnnVLVzkUvlXT + * L/TAnd8nIZk0zZkFJ7P5LtePvykkar7LcSQO85wtcQe0R1Raf/sQ6wYKaKmFgCGe + * NpEJUmg4ktal4qgIAxk+QHUxQE42sxViN5mqglB0QJdUot/o9a/V/mMeH8KvOAiQ + * byinkNndn+Bgk5sSV5DFgF0DffVqmVMblt5p3jPtImzBIH0QQrXJq39AT8cRwP5H + * afuVeLHcDsRp6hol4P+ZFIhu8mmbI1u0hH3W/0C2BuYXB5PC+5izFFh/nP0lc2Lf + * 6rELO9LZdnOhpL1ExFOq9H/B8tPQ84T3Sgb4nAifDabNt/zu6MmCGo5U8lwEFtGM + * RoOaX4AS+909x00lYnmtwsDVWv9vBiJCXRsCAwEAAaOByTCBxjBgBgNVHR8EWTBX + * MFWgU6BRhk9odHRwOi8vdHJ1c3RlZHNlcnZpY2VzLmludGVsLmNvbS9jb250ZW50 + * L0NSTC9TR1gvQXR0ZXN0YXRpb25SZXBvcnRTaWduaW5nQ0EuY3JsMB0GA1UdDgQW + * BBR4Q3t2pn680K9+QjfrNXw7hwFRPDAfBgNVHSMEGDAWgBR4Q3t2pn680K9+Qjfr + * NXw7hwFRPDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADANBgkq + * hkiG9w0BAQsFAAOCAYEAeF8tYMXICvQqeXYQITkV2oLJsp6J4JAqJabHWxYJHGir + * IEqucRiJSSx+HjIJEUVaj8E0QjEud6Y5lNmXlcjqRXaCPOqK0eGRz6hi+ripMtPZ + * sFNaBwLQVV905SDjAzDzNIDnrcnXyB4gcDFCvwDFKKgLRjOB/WAqgscDUoGq5ZVi + * zLUzTqiQPmULAQaB9c6Oti6snEFJiCQ67JLyW/E83/frzCmO5Ru6WjU4tmsmy8Ra + * Ud4APK0wZTGtfPXU7w+IBdG5Ez0kE1qzxGQaL4gINJ1zMyleDnbuS8UicjJijvqA + * 152Sq049ESDz+1rRGc2NVEqh1KaGXmtXvqxXcTB+Ljy5Bw2ke0v8iGngFBPqCTVB + * 3op5KBG3RjbF6RRSzwzuWfL7QErNC8WEy5yDVARzTA5+xmBc388v9Dm21HGfcC8O + * DD+gT9sSpssq0ascmvH49MOgjt1yoysLtdCtJW/9FZpoOypaHx0R+mJTLwPXVMrv + * DaVzWh5aiEx+idkSGMnX + * -----END CERTIFICATE----- + */ + webpki::TrustAnchor { + subject: b"1\x0b0\t\x06\x03U\x04\x06\x13\x02US1\x0b0\t\x06\x03U\x04\x08\x0c\x02CA1\x140\x12\x06\x03U\x04\x07\x0c\x0bSanta Clara1\x1a0\x18\x06\x03U\x04\n\x0c\x11Intel Corporation100.\x06\x03U\x04\x03\x0c\'Intel SGX Attestation Report Signing CA", + spki: b"0\r\x06\t*\x86H\x86\xf7\r\x01\x01\x01\x05\x00\x03\x82\x01\x8f\x000\x82\x01\x8a\x02\x82\x01\x81\x00\x9f@u1@N6\xb3\x15b7\x99\xaa\x82Pt@\x97T\xa2\xdf\xe8\xf5\xaf\xd5\xfec\x1e\x1f\xc2\xaf8\x08\x90o(\xa7\x90\xd9\xdd\x9f\xe0`\x93\x9b\x12W\x90\xc5\x80]\x03}\xf5j\x99S\x1b\x96\xdei\xde3\xed\"l\xc1 }\x10B\xb5\xc9\xab\x7f@O\xc7\x11\xc0\xfeGi\xfb\x95x\xb1\xdc\x0e\xc4i\xea\x1a%\xe0\xff\x99\x14\x88n\xf2i\x9b#[\xb4\x84}\xd6\xff@\xb6\x06\xe6\x17\x07\x93\xc2\xfb\x98\xb3\x14X\x7f\x9c\xfd%sb\xdf\xea\xb1\x0b;\xd2\xd9vs\xa1\xa4\xbdD\xc4S\xaa\xf4\x7f\xc1\xf2\xd3\xd0\xf3\x84\xf7J\x06\xf8\x9c\x08\x9f\r\xa6\xcd\xb7\xfc\xee\xe8\xc9\x82\x1a\x8eT\xf2\\\x04\x16\xd1\x8cF\x83\x9a_\x80\x12\xfb\xdd=\xc7M%by\xad\xc2\xc0\xd5Z\xffo\x06\"B]\x1b\x02\x03\x01\x00\x01", + name_constraints: None + }, +]); diff --git a/pallets/phala/src/utils/fixed_point.rs b/pallets/phala/src/utils/fixed_point.rs new file mode 100644 index 00000000..9fe4fd6f --- /dev/null +++ b/pallets/phala/src/utils/fixed_point.rs @@ -0,0 +1,48 @@ +use codec::{Decode, Encode, EncodeLike, Input, Output}; +use fixed::types::U64F64 as FixedPoint; + +/// Wrapped FixedPoint (U64F64) to make scale-codec happy +#[derive(Default, Clone, Copy, PartialEq, Eq, Debug)] +pub struct CodecFixedPoint(FixedPoint); + +impl CodecFixedPoint { + pub fn zero() -> CodecFixedPoint { + Self(FixedPoint::from_bits(0)) + } + + pub fn get(&self) -> FixedPoint { + self.0 + } + + pub fn get_mut(&mut self) -> &mut FixedPoint { + &mut self.0 + } +} + +impl From for CodecFixedPoint { + fn from(f: FixedPoint) -> Self { + Self(f) + } +} + +impl From for FixedPoint { + fn from(f: CodecFixedPoint) -> FixedPoint { + f.0 + } +} + +impl Encode for CodecFixedPoint { + fn encode_to(&self, output: &mut T) { + let bits = self.0.to_bits(); + Encode::encode_to(&bits, output); + } +} + +impl EncodeLike for CodecFixedPoint {} + +impl Decode for CodecFixedPoint { + fn decode(input: &mut I) -> Result { + let bits: u128 = Decode::decode(input)?; + Ok(CodecFixedPoint(FixedPoint::from_bits(bits))) + } +} diff --git a/pallets/phala/src/utils/mod.rs b/pallets/phala/src/utils/mod.rs new file mode 100644 index 00000000..9256f62a --- /dev/null +++ b/pallets/phala/src/utils/mod.rs @@ -0,0 +1,5 @@ +pub(crate) mod accumulator; +pub(crate) mod attestation; +pub(crate) mod balance_convert; +pub mod constants; +pub(crate) mod fixed_point; diff --git a/parachains-common/src/lib.rs b/parachains-common/src/lib.rs index 37206250..cfd24f31 100644 --- a/parachains-common/src/lib.rs +++ b/parachains-common/src/lib.rs @@ -15,6 +15,8 @@ #![cfg_attr(not(feature = "std"), no_std)] +#![allow(clippy::identity_op)] + pub use constants::*; pub use opaque::*; pub use types::*; diff --git a/runtime/khala/src/constants.rs b/runtime/khala/src/constants.rs index 1f78730f..48712b92 100644 --- a/runtime/khala/src/constants.rs +++ b/runtime/khala/src/constants.rs @@ -15,6 +15,8 @@ //! A set of constant values used in substrate runtime. +#![allow(clippy::identity_op)] + /// Money matters. pub mod currency { use parachains_common::Balance; diff --git a/runtime/khala/src/lib.rs b/runtime/khala/src/lib.rs index 8dd8275e..5f8b2bda 100644 --- a/runtime/khala/src/lib.rs +++ b/runtime/khala/src/lib.rs @@ -19,6 +19,8 @@ // `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. #![recursion_limit = "256"] +#![allow(clippy::identity_op)] + // Make the WASM binary available. #[cfg(all(feature = "std", feature = "include-wasm"))] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); diff --git a/vendor/ring/BUILDING.md b/vendor/ring/BUILDING.md new file mode 100644 index 00000000..e5f6b7e5 --- /dev/null +++ b/vendor/ring/BUILDING.md @@ -0,0 +1,96 @@ +Building *ring* +=============== + +*ring*'s Rust crate is named `ring`. See https://crates.io/crates/ring to see +what the latest version is and to see how to add a dependency on it to your +project. + +When hacking on *ring* itself, you can build it using `cargo build` and +`cargo test` as usual. *ring* includes some C, C++, and assembly language +components, and its build script (build.rs) builds all those things +automatically. + + +Packaged Builds +--------------- + +When you build *ring* from its package (e.g. the ones on crates.io), you only +need the Rust toolchain and a C/C++ compiler. For Windows targets, the packaged +crate contains precompiled object files for the assembly language modules so no +macro assembler is required. On other platforms, *ring*'s build script assumes +the C/C++ compiler knows how to build `.S` files (assembly language sources +with C preprocessor directives). + + +Builds directly from Git +------------------------ + +If you want to hack on *ring* then you need to build it directly from its Git +repository. There are some additional requirements for doing this that do not +apply when building from crates.io: + +* For any target for which *ring* has assembly language implementations of + primitives (32- and 64- bit Intel, and 32- and 64-bit ARM), Perl must be + installed and in `$PATH`. + +* For Windows targets, `target/tools/nasm[.exe]` is used as the assembler; + [mk/install-build-tools.ps1](mk/install-build-tools.ps1) downloads it for + Windows hosts. + +Cross Compiling +--------------- + +When you build *ring* for a target that is different than the one you are using +for the build process you need to install the rust tool chain and a C/C++ +compiler that can produce binaries for the intended target. + +Besides the required dependencies you need to set the environment variables +`TARGET_CC` and `TARGET_AR` to the full path of the cross-compiler and the +cross-archiver respectively. + + +Supported Toolchains +-------------------- + +*ring* targets the current stable release of Rust and Cargo. We also verify +that the current beta and nightly releases work. + +On Windows, *ring* supports the x86_64-pc-windows-msvc and i686-pc-windows-msvc +targets best. These targets require the “Visual C++ Build Tools +2015†package or Visual Studio 2015 Update 3 or later to be installed. Patches +to get it working on other variants, including in particular Visual Studio 2017 +([#338]), Windows ARM platforms, Windows Universal Platform, Windows XP (the +v140_xp toolchain; [#339]), and the -gnu targets ([#330]) are welcome. + +For other platforms, GCC 4.6 or later and Clang 3.5 or later are currently +supported best. The build script passes options to the C/C++ compiler that are +GCC- and Clang- specific. Pull requests to support other compilers will be +considered. + +Note in particular that if you are cross-compiling an x86 build on a 64-bit +version of Linux, then you need to have the proper gcc-multilibs and +g++-multilibs packages or equivalent installed. + +If you generate a standalone NDK toolchain in order to compile your project, +the wrapper automatically passes flags to the actual compiler to define the +`__ANDROID_API__` macro. Otherwise, the macro `__ANDROID_API__` must be +defined with a value of at least 21 on 64-bit targets or 18 on 32-bit targets; +e.g. export `CFLAGS=-D__ANDROID_API__=21`. + + +Additional Features that are Useful for Development +--------------------------------------------------- +The `slow_tests` feature runs additional tests that are too slow to run during +a normal edit-compile-test cycle. + +The `test_logging` feature prints out the input test vectors when a test fails. + + +[#321]: https://github.com/briansmith/ring/pull/321 +[#330]: https://github.com/briansmith/ring/issues/330 +[#334]: https://github.com/briansmith/ring/issues/334 +[#336]: https://github.com/briansmith/ring/issues/336 +[#337]: https://github.com/briansmith/ring/issues/337 +[#338]: https://github.com/briansmith/ring/issues/338 +[#339]: https://github.com/briansmith/ring/issues/339 +[#340]: https://github.com/briansmith/ring/issues/340 diff --git a/vendor/ring/Cargo.toml b/vendor/ring/Cargo.toml new file mode 100644 index 00000000..a9156a03 --- /dev/null +++ b/vendor/ring/Cargo.toml @@ -0,0 +1,365 @@ +[package] +authors = ["Brian Smith "] +build = "build.rs" +categories = ["cryptography", "no-std"] +description = "Safe, fast, small crypto using Rust." +documentation = "https://briansmith.org/rustdoc/ring/" +edition = "2018" +keywords = ["crypto", "cryptography", "rand", "ECC", "RSA"] +license-file = "LICENSE" +name = "ring" +readme = "doc/link-to-readme.md" +repository = "https://github.com/briansmith/ring" +version = "0.16.20-1" + +# Prevent multiple versions of *ring* from being linked into the same program. +links = "ring-alternative-asm" + +include = [ + "LICENSE", + "Cargo.toml", + + "pregenerated/*", + + "build.rs", + + "crypto/chacha/asm/chacha-armv4.pl", + "crypto/chacha/asm/chacha-armv8.pl", + "crypto/chacha/asm/chacha-x86.pl", + "crypto/chacha/asm/chacha-x86_64.pl", + "crypto/cipher_extra/test/aes_128_gcm_siv_tests.txt", + "crypto/cipher_extra/test/aes_256_gcm_siv_tests.txt", + "crypto/constant_time_test.c", + "crypto/cpu-intel.c", + "crypto/crypto.c", + "crypto/curve25519/asm/x25519-asm-arm.S", + "crypto/curve25519/curve25519.c", + "crypto/curve25519/curve25519_tables.h", + "crypto/curve25519/internal.h", + "crypto/fipsmodule/aes/aes_nohw.c", + "crypto/fipsmodule/aes/asm/aesni-x86.pl", + "crypto/fipsmodule/aes/asm/aesni-x86_64.pl", + "crypto/fipsmodule/aes/asm/aesv8-armx.pl", + "crypto/fipsmodule/aes/asm/bsaes-armv7.pl", + "crypto/fipsmodule/aes/asm/bsaes-x86_64.pl", + "crypto/fipsmodule/aes/asm/vsaes-armv7.pl", + "crypto/fipsmodule/aes/asm/vpaes-x86.pl", + "crypto/fipsmodule/aes/asm/vpaes-x86_64.pl", + "crypto/fipsmodule/bn/asm/armv4-mont.pl", + "crypto/fipsmodule/bn/asm/armv8-mont.pl", + "crypto/fipsmodule/bn/asm/x86-mont.pl", + "crypto/fipsmodule/bn/asm/x86_64-mont.pl", + "crypto/fipsmodule/bn/asm/x86_64-mont5.pl", + "crypto/fipsmodule/bn/internal.h", + "crypto/fipsmodule/bn/montgomery.c", + "crypto/fipsmodule/bn/montgomery_inv.c", + "crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl", + "crypto/fipsmodule/ec/ecp_nistz.c", + "crypto/fipsmodule/ec/ecp_nistz.h", + "crypto/fipsmodule/ec/ecp_nistz384.h", + "crypto/fipsmodule/ec/ecp_nistz384.inl", + "crypto/fipsmodule/ec/gfp_p256.c", + "crypto/fipsmodule/ec/gfp_p384.c", + "crypto/fipsmodule/ec/p256.c", + "crypto/fipsmodule/ec/p256-x86_64-table.h", + "crypto/fipsmodule/ec/p256-x86_64.c", + "crypto/fipsmodule/ec/p256-x86_64.h", + "crypto/fipsmodule/ec/p256_shared.h", + "crypto/fipsmodule/ec/p256_table.h", + "crypto/fipsmodule/ec/util.h", + "crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt", + "crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl", + "crypto/fipsmodule/modes/asm/ghash-armv4.pl", + "crypto/fipsmodule/modes/asm/ghash-x86.pl", + "crypto/fipsmodule/modes/asm/ghash-x86_64.pl", + "crypto/fipsmodule/modes/asm/ghashv8-armx.pl", + "crypto/fipsmodule/sha/asm/sha256-armv4.pl", + "crypto/fipsmodule/sha/asm/sha512-armv4.pl", + "crypto/fipsmodule/sha/asm/sha512-armv8.pl", + "crypto/fipsmodule/sha/asm/sha512-x86_64.pl", + "crypto/internal.h", + "crypto/limbs/limbs.c", + "crypto/limbs/limbs.h", + "crypto/limbs/limbs.inl", + "crypto/mem.c", + "crypto/perlasm/arm-xlate.pl", + "crypto/perlasm/x86asm.pl", + "crypto/perlasm/x86gas.pl", + "crypto/perlasm/x86nasm.pl", + "crypto/perlasm/x86_64-xlate.pl", + "crypto/poly1305/internal.h", + "crypto/poly1305/poly1305.c", + "crypto/poly1305/poly1305_arm.c", + "crypto/poly1305/poly1305_arm_asm.S", + "crypto/poly1305/poly1305_vec.c", + "crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl", + "doc/link-to-readme.md", + "examples/checkdigest.rs", + "include/GFp/aes.h", + "include/GFp/arm_arch.h", + "include/GFp/base.h", + "include/GFp/check.h", + "include/GFp/cpu.h", + "include/GFp/mem.h", + "include/GFp/poly1305.h", + "include/GFp/type_check.h", + "src/aead.rs", + "src/aead/aes.rs", + "src/aead/aes_gcm.rs", + "src/aead/aes_tests.txt", + "src/aead/block.rs", + "src/aead/chacha.rs", + "src/aead/chacha/fallback.rs", + "src/aead/chacha_tests.txt", + "src/aead/chacha20_poly1305.rs", + "src/aead/chacha20_poly1305_openssh.rs", + "src/aead/gcm.rs", + "src/aead/gcm/gcm_nohw.rs", + "src/aead/less_safe_key.rs", + "src/aead/nonce.rs", + "src/aead/opening_key.rs", + "src/aead/poly1305.rs", + "src/aead/poly1305_test.txt", + "src/aead/quic.rs", + "src/aead/sealing_key.rs", + "src/aead/shift.rs", + "src/aead/unbound_key.rs", + "src/agreement.rs", + "src/arithmetic.rs", + "src/arithmetic/bigint.rs", + "src/arithmetic/bigint_elem_exp_consttime_tests.txt", + "src/arithmetic/bigint_elem_exp_vartime_tests.txt", + "src/arithmetic/bigint_elem_mul_tests.txt", + "src/arithmetic/bigint_elem_reduced_once_tests.txt", + "src/arithmetic/bigint_elem_reduced_tests.txt", + "src/arithmetic/bigint_elem_squared_tests.txt", + "src/arithmetic/constant.rs", + "src/arithmetic/montgomery.rs", + "src/array.rs", + "src/bits.rs", + "src/bssl.rs", + "src/c.rs", + "src/constant_time.rs", + "src/cpu.rs", + "src/data/alg-rsa-encryption.der", + "src/debug.rs", + "src/digest.rs", + "src/digest/sha1.rs", + "src/digest/sha2.rs", + "src/ec/curve25519/ed25519/digest.rs", + "src/ec/curve25519/ed25519.rs", + "src/ec/curve25519/ed25519/signing.rs", + "src/ec/curve25519/ed25519/verification.rs", + "src/ec/curve25519/ed25519/ed25519_pkcs8_v2_template.der", + "src/ec/curve25519.rs", + "src/ec/curve25519/ops.rs", + "src/ec/curve25519/scalar.rs", + "src/ec/curve25519/x25519.rs", + "src/ec.rs", + "src/ec/keys.rs", + "src/ec/suite_b/curve.rs", + "src/ec/suite_b/ecdh.rs", + "src/ec/suite_b/ecdsa/digest_scalar.rs", + "src/ec/suite_b/ecdsa.rs", + "src/ec/suite_b/ecdsa/signing.rs", + "src/ec/suite_b/ecdsa/verification.rs", + "src/ec/suite_b/ecdsa/ecdsa_digest_scalar_tests.txt", + "src/ec/suite_b/ecdsa/ecPublicKey_p256_pkcs8_v1_template.der", + "src/ec/suite_b/ecdsa/ecPublicKey_p384_pkcs8_v1_template.der", + "src/ec/suite_b/ecdsa/ecdsa_sign_asn1_tests.txt", + "src/ec/suite_b/ecdsa/ecdsa_sign_fixed_tests.txt", + "src/ec/suite_b.rs", + "src/ec/suite_b/ops/elem.rs", + "src/ec/suite_b/ops.rs", + "src/ec/suite_b/ops/p256.rs", + "src/ec/suite_b/ops/p256_elem_mul_tests.txt", + "src/ec/suite_b/ops/p256_elem_neg_tests.txt", + "src/ec/suite_b/ops/p256_elem_sum_tests.txt", + "src/ec/suite_b/ops/p256_point_double_tests.txt", + "src/ec/suite_b/ops/p256_point_mul_base_tests.txt", + "src/ec/suite_b/ops/p256_point_mul_serialized_tests.txt", + "src/ec/suite_b/ops/p256_point_mul_tests.txt", + "src/ec/suite_b/ops/p256_point_sum_mixed_tests.txt", + "src/ec/suite_b/ops/p256_point_sum_tests.txt", + "src/ec/suite_b/ops/p256_scalar_mul_tests.txt", + "src/ec/suite_b/ops/p256_scalar_square_tests.txt", + "src/ec/suite_b/ops/p384.rs", + "src/ec/suite_b/ops/p384_elem_div_by_2_tests.txt", + "src/ec/suite_b/ops/p384_elem_mul_tests.txt", + "src/ec/suite_b/ops/p384_elem_neg_tests.txt", + "src/ec/suite_b/ops/p384_elem_sum_tests.txt", + "src/ec/suite_b/ops/p384_point_double_tests.txt", + "src/ec/suite_b/ops/p384_point_mul_base_tests.txt", + "src/ec/suite_b/ops/p384_point_mul_tests.txt", + "src/ec/suite_b/ops/p384_point_sum_tests.txt", + "src/ec/suite_b/ops/p384_scalar_mul_tests.txt", + "src/ec/suite_b/private_key.rs", + "src/ec/suite_b/public_key.rs", + "src/ec/suite_b/suite_b_public_key_tests.txt", + "src/endian.rs", + "src/error.rs", + "src/hkdf.rs", + "src/hmac.rs", + "src/hmac_generate_serializable_tests.txt", + "src/io.rs", + "src/io/der.rs", + "src/io/der_writer.rs", + "src/io/positive.rs", + "src/io/writer.rs", + "src/lib.rs", + "src/limb.rs", + "src/endian.rs", + "src/pbkdf2.rs", + "src/pkcs8.rs", + "src/polyfill.rs", + "src/polyfill/array_map.rs", + "src/polyfill/chunks_fixed.rs", + "src/rand.rs", + "src/rsa/convert_nist_rsa_test_vectors.py", + "src/rsa.rs", + "src/rsa/padding.rs", + "src/rsa/random.rs", + "src/rsa/rsa_pss_padding_tests.txt", + "src/rsa/signature_rsa_example_private_key.der", + "src/rsa/signature_rsa_example_public_key.der", + "src/rsa/signing.rs", + "src/rsa/verification.rs", + "src/signature.rs", + "src/test.rs", + "src/test_1_syntax_error_tests.txt", + "src/test_1_tests.txt", + "src/test_3_tests.txt", + "tests/aead_aes_128_gcm_tests.txt", + "tests/aead_aes_256_gcm_tests.txt", + "tests/aead_chacha20_poly1305_tests.txt", + "tests/aead_chacha20_poly1305_openssh_tests.txt", + "tests/aead_tests.rs", + "tests/agreement_tests.rs", + "tests/agreement_tests.txt", + "tests/constant_time_tests.rs", + "tests/digest_tests.rs", + "tests/digest_tests.txt", + "tests/ecdsa_from_pkcs8_tests.txt", + "tests/ecdsa_tests.rs", + "tests/ecdsa_test_private_key_p256.p8", + "tests/ecdsa_test_public_key_p256.der", + "tests/ecdsa_test_public_key_p256_debug.txt", + "tests/ecdsa_sign_asn1_tests.txt", + "tests/ecdsa_sign_fixed_tests.txt", + "tests/ecdsa_verify_asn1_tests.txt", + "tests/ecdsa_verify_fixed_tests.txt", + "tests/ed25519_from_pkcs8_tests.txt", + "tests/ed25519_from_pkcs8_unchecked_tests.txt", + "tests/ed25519_tests.rs", + "tests/ed25519_tests.txt", + "tests/ed25519_test_private_key.bin", + "tests/ed25519_test_private_key.p8", + "tests/ed25519_test_public_key.bin", + "tests/ed25519_test_public_key.der", + "tests/hkdf_tests.rs", + "tests/hkdf_tests.txt", + "tests/hmac_tests.rs", + "tests/hmac_tests.txt", + "tests/pbkdf2_tests.rs", + "tests/pbkdf2_tests.txt", + "tests/quic_aes_128_tests.txt", + "tests/quic_aes_256_tests.txt", + "tests/quic_chacha20_tests.txt", + "tests/quic_tests.rs", + "tests/rand_tests.rs", + "tests/rsa_from_pkcs8_tests.txt", + "tests/rsa_pkcs1_sign_tests.txt", + "tests/rsa_pkcs1_verify_tests.txt", + "tests/rsa_primitive_verify_tests.txt", + "tests/rsa_pss_sign_tests.txt", + "tests/rsa_pss_verify_tests.txt", + "tests/rsa_tests.rs", + "tests/rsa_test_private_key_2048.p8", + "tests/rsa_test_public_key_2048.der", + "tests/rsa_test_public_key_2048_debug.txt", + "tests/signature_tests.rs", + "third_party/fiat/curve25519_32.h", + "third_party/fiat/curve25519_64.h", + "third_party/fiat/p256_32.h", + "third_party/fiat/p256_64.h", + "third_party/fiat/LICENSE", + "third_party/NIST/SHAVS/SHA1LongMsg.rsp", + "third_party/NIST/SHAVS/SHA1Monte.rsp", + "third_party/NIST/SHAVS/SHA1ShortMsg.rsp", + "third_party/NIST/SHAVS/SHA224LongMsg.rsp", + "third_party/NIST/SHAVS/SHA224Monte.rsp", + "third_party/NIST/SHAVS/SHA224ShortMsg.rsp", + "third_party/NIST/SHAVS/SHA256LongMsg.rsp", + "third_party/NIST/SHAVS/SHA256Monte.rsp", + "third_party/NIST/SHAVS/SHA256ShortMsg.rsp", + "third_party/NIST/SHAVS/SHA384LongMsg.rsp", + "third_party/NIST/SHAVS/SHA384Monte.rsp", + "third_party/NIST/SHAVS/SHA384ShortMsg.rsp", + "third_party/NIST/SHAVS/SHA512LongMsg.rsp", + "third_party/NIST/SHAVS/SHA512Monte.rsp", + "third_party/NIST/SHAVS/SHA512ShortMsg.rsp", +] + +[package.metadata.docs.rs] +all-features = true + +[lib] +name = "ring" + +[dependencies] +untrusted = { version = "0.7.1" } + +[target.'cfg(any(target_arch = "x86",target_arch = "x86_64", all(any(target_arch = "aarch64", target_arch = "arm"), any(target_os = "android", target_os = "fuchsia", target_os = "linux"))))'.dependencies] +spin = { version = "0.5.2", default-features = false } + +[target.'cfg(any(target_os = "android", target_os = "linux"))'.dependencies] +libc = { version = "0.2.84", default-features = false } +once_cell = { version = "1.5.2", default-features = false, features=["std"], optional = true } + +[target.'cfg(any(target_os = "dragonfly", target_os = "freebsd", target_os = "illumos", target_os = "netbsd", target_os = "openbsd", target_os = "solaris"))'.dependencies] +once_cell = { version = "1.5.2", default-features = false, features=["std"] } + +#[target.'cfg(all(target_arch = "wasm32", target_vendor = "unknown", target_os = "unknown", target_env = ""))'.dependencies] +#web-sys = { version = "0.3.37", default-features = false, features = ["Crypto", "Window"] } + +[target.'cfg(target_os = "windows")'.dependencies] +winapi = { version = "0.3.8", default-features = false, features = ["ntsecapi", "wtypesbase"] } + +[target.'cfg(target_arch = "wasm32")'.dev-dependencies] +wasm-bindgen-test = { version = "0.3.18", default-features = false } + +[target.'cfg(any(unix, windows))'.dev-dependencies] +libc = { version = "0.2.84", default-features = false } + +# Keep this in sync with `[dependencies]` in pregenerate_asm/Cargo.toml. +[build-dependencies] +cc = { version = "1.0.66", default-features = false } + +[features] +# These features are documented in the top-level module's documentation. +default = ["alloc", "dev_urandom_fallback"] +alloc = [] +dev_urandom_fallback = ["once_cell"] +internal_benches = [] +slow_tests = [] +std = ["alloc"] +test_logging = [] +wasm32_c = [] + +# XXX: debug = false because of https://github.com/rust-lang/rust/issues/34122 + +[profile.bench] +opt-level = 3 +debug = false +rpath = false +lto = true +debug-assertions = false +codegen-units = 1 + +[profile.release] +opt-level = 3 +debug = false +rpath = false +lto = true +debug-assertions = false +codegen-units = 1 diff --git a/vendor/ring/LICENSE b/vendor/ring/LICENSE new file mode 100644 index 00000000..bf787438 --- /dev/null +++ b/vendor/ring/LICENSE @@ -0,0 +1,204 @@ +Note that it is easy for this file to get out of sync with the licenses in the +source code files. It's recommended to compare the licenses in the source code +with what's mentioned here. + +*ring* is derived from BoringSSL, so the licensing situation in *ring* is +similar to BoringSSL. + +*ring* uses an ISC-style license like BoringSSL for code in new files, +including in particular all the Rust code: + + Copyright 2015-2016 Brian Smith. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +BoringSSL is a fork of OpenSSL. As such, large parts of it fall under OpenSSL +licensing. Files that are completely new have a Google copyright and an ISC +license. This license is reproduced at the bottom of this file. + +Contributors to BoringSSL are required to follow the CLA rules for Chromium: +https://cla.developers.google.com/clas + +Files in third_party/ have their own licenses, as described therein. The MIT +license, for third_party/fiat, which, unlike other third_party directories, is +compiled into non-test libraries, is included below. + +The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the +OpenSSL License and the original SSLeay license apply to the toolkit. See below +for the actual license texts. Actually both licenses are BSD-style Open Source +licenses. In case of any license issues related to OpenSSL please contact +openssl-core@openssl.org. + +The following are Google-internal bug numbers where explicit permission from +some authors is recorded for use of their work: + 27287199 + 27287880 + 27287883 + + OpenSSL License + --------------- + +/* ==================================================================== + * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + + +ISC license used for completely new code in BoringSSL: + +/* Copyright (c) 2015, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + + +The code in third_party/fiat carries the MIT license: + +Copyright (c) 2015-2016 the fiat-crypto authors (see +https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS). + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/ring/README.md b/vendor/ring/README.md new file mode 100644 index 00000000..47ae07be --- /dev/null +++ b/vendor/ring/README.md @@ -0,0 +1,230 @@ +THE SOFTWARE IS PROVIDED "AS IS" AND BRIAN SMITH AND THE AUTHORS DISCLAIM +ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL BRIAN SMITH OR THE AUTHORS +BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY +DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN +AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + + +*ring* +====== + +*ring* is focused on the implementation, testing, and optimization of a core +set of cryptographic operations exposed via an easy-to-use (and hard-to-misuse) +API. *ring* exposes a [Rust](https://www.rust-lang.org/) API and is written in +a hybrid of Rust, C, and assembly language. + +Particular attention is being paid to making it easy to build and integrate +*ring* into applications and higher-level frameworks, and to ensuring that +*ring* works optimally on small devices, and eventually microcontrollers, to +support Internet of Things (IoT) applications. + +*ring* is focused on general-purpose cryptography. WebPKI X.509 certificate +validation is done in the [webpki](https://github.com/briansmith/webpki) +project, which is built on top of *ring*. Also, multiple groups are working on +implementations of cryptographic protocols like TLS, SSH, and DNSSEC on top of +*ring*. + +*ring* is the successor of an earlier project called GFp. GFp implemented some +elliptic curve cryptography over prime finite fields, also known as prime +Galois fields and often denoted GF(p). When we implemented RSA, the name GFp +did not make as much sense, since modular arithmetic over RSA public moduli is +not GF(p) arithmetic but rather finite commutative *ring* arithmetic. Also note +that *ring* started as a subset of BoringSSL, and “*ring*†is a substring of +“Bo*ring*SSLâ€. + +Most of the C and assembly language code in *ring* comes from BoringSSL, and +BoringSSL is derived from OpenSSL. *ring* merges changes from BoringSSL +regularly. Also, several changes that were developed for *ring* have already +been merged into BoringSSL. + + + + +Documentation +------------- + +See the documentation at +https://briansmith.org/rustdoc/ring/. + +See [BUILDING.md](BUILDING.md) for instructions on how to build it. These +instructions are especially important for cross-compiling and for building on +Windows when not building from crates.io, as there are build prerequisites that +need to be installed. + + + +Benchmarks +---------- + +*ring*'s benchmarks are in the +[crypto-bench](https://github.com/briansmith/crypto-bench) project. Because +there is lots of platform-specific code in *ring*, and because *ring* chooses +dynamically at runtime which optimized implementation of each crypto primitive +to use, it is very difficult to publish a useful single set of benchmarks; +instead, you are highly encouraged to run the benchmarks yourselves on your +target hardware. + + + + +Contributing +------------ + +The most important contributions are *uses* of *ring*. That is, we're very +interested in seeing useful things built on top of *ring*, like implementations +of TLS, SSH, the Noise Protocol, etc. + +Of course, contributions to *ring*'s code base are highly appreciated too. +The *ring* project happily accepts pull requests without you needing to sign +any formal license agreement. The portions of pull requests that modify +existing files must be licensed under the same terms as the files being +modified. New files in pull requests, including in particular all Rust code, +must be licensed under the ISC-style license. Please state that you agree to +license your contributions in the commit messages of commits in pull requests, +e.g. by putting this at the bottom of your commit message: + +``` + +I agree to license my contributions to each file under the terms given +at the top of each file I changed. +``` + + +If +you want to work directly on *ring* and you don't have an idea for something to +contribute already, see these curated lists of open issues: + +* [good-first-bug](https://github.com/briansmith/ring/labels/good-first-bug): + Bugs that we think newcomers might find best to start with. Note that what + makes a bug a good fit depends a lot on the developer's background and not + just the hardness of the work. + +In addition, we're always interested in these kinds of contributions: + +* Expanded benchmarks in the + [crypto-bench](https://github.com/briansmith/crypto-bench) project. +* Additional testing code and additional test vectors. +* Static analysis and fuzzing in the continuous integration. +* Support for more platforms in the continuous integration (e.g. Android, iOS, + ARM microcontrollers). +* Documentation improvements. +* More code simplification, especially eliminating dead code. +* Improving the code size, execution speed, and/or memory footprint. +* Fixing any bugs you may have found. +* Better IDE support for Windows (e.g. running the tests within the IDE) and + macOS (e.g. Xcode project files). + +Before submitting pull requests, make sure that the tests succeed both when +running `cargo test` and `cargo test --no-default-features`. See +[BUILDING.md](BUILDING.md) for more info about the features flags that are +useful for people hacking on *ring*. + + + +Versioning & Stability +---------------------- + +Users of *ring* should always use the latest released version, and users +should upgrade to the latest released version as soon as it is released. +*ring* has a linear release model that favors users of the latest released +version. We have never backported fixes to earlier releases and we don't +maintain branches other than the main branch. Further, for some obscure +technical reasons it's currently not possible to link two different versions +of *ring* into the same program; for policy reasons we don't bother to try +to work around that. Thus it is important that libraries using *ring* update +to the latest version of *ring* ASAP, so that libraries that depend on +*their* libraries can upgrade to the latest version of *ring*. + +*ring* is tested on the latest Stable, Beta, and Nightly releases of Rust. +We do not spend effort on backward compatibility with older releases of +Rust; for example, when Rust 1.53 (Stable) is released, we don't care if +*ring* stops working with Rust 1.52 or earlier versions. Thus, we can +always use the latest *stable* features of the Rust language in *ring*. +So far we've never used unstable features of Rust except for the benchmarking +support (`#[bench]`), and we're hoping to remove even *that* Nightly +dependency. Sometimes things are broken with Nightly Rust. We prioritize +keeping things working on Stable; if things break on Beta and Nightly then +that breakage won't be considered urgent, though it will eventually get +resolved, one way or another. + +We prefer to improve *ring*'s API over keeping *ring*'s API stable. We +don't keep old APIs around for the sake of backward compatibility; we prefer +to remove old APIs in the same change that adds new APIs. This makes it +easier for people to contribute improvements. This means that sometimes +upgrading to the newest version of *ring* will require some code changes. Over +time the rate of change in the API will probably slow to the point where it +will be stable in practice. + +We don't have release notes. Instead, we try to clearly document each change +in each commit. Read the the commit message, the tests, and the patch itself +for each change. If anything is still unclear, let us know by submitting a pull +request or by filing an issue in the issue tracker so that we can improve +things. + +This model of development is different than the model a lot of other open +source libraries use. The idea behind *our* model is to encourage all users to +work together to ensure that the latest version is good *as it is being +developed*. In particular, because users know that correctness/security fixes +(if any) aren't going to get backported, they have a strong incentive to help +review pull requests before they are merged and/or review commits on the main +branch after they've landed to ensure that code quality on the main branch +stays high. + +The more common model, where there are stable versions that have important +security patches backported, lowers people's incentives to actively participate +in mainline development. Maintaining stable APIs also discourages improving +API design and internal code quality. Thus that model doesn't seem like a good +fit for *ring*. + +Every six months we have a meeting to revisit this policy. Email +[brian@briansmith.org](mailto:brian@briansmith.org) if you want to attend +the next meeting. Please don't file issues regarding this policy. + + + +Bug Reporting +------------- + +Please report bugs either as pull requests or as issues in [the issue +tracker](https://github.com/briansmith/ring/issues). *ring* has a +**full disclosure** vulnerability policy. **Please do NOT attempt to report +any security vulnerability in this code privately to anybody.** + + + +Online Automated Testing +------------------------ + +The following targets are tested in GitHub Actions. The tests are run in debug +and release configurations, for the current release of each Rust channel +(Stable, Beta, Nightly). A C compiler is currently required to compile some +parts of *ring*; *ring* should be compatible with GCC 4.8+, Clang 10+, and MSVC +2019+, at least. + +| Target | Notes | +| -------------------------------| ----- | +| aarch64-apple-darwin | Build-only (GitHub Actions doesn't have a way to run the tests) +| aarch64-apple-ios | Build-only (GitHub Actions doesn't have a way to run the tests) +| aarch64-unknown-linux-gnu | Tested on 64-bit Linux using QEMU user emulation +| aarch64-unknown-linux-musl | Tested on 64-bit Linux using QEMU user emulation. [Needs more work; issue 713](https://github.com/briansmith/ring/issues/713) +| aarch64-linux-android | API level 21 (Android 5.0+); [Build-only; issue 486](https://github.com/briansmith/ring/issues/486) +| arm-unknown-linux-gnueabihf | Tested on 64-bit Linux using QEMU user emulation +| armv7-linux-androideabi | API level 18 (Android 4.3+); [Build-only; issue 838](https://github.com/briansmith/ring/issues/838) +| armv7-unknown-linux-musleabihf | Tested on 64-bit Linux using QEMU user emulation. [Needs more work; issue 713](https://github.com/briansmith/ring/issues/713) +| i686-pc-windows-msvc | Tested on 64-bit Windows Server 2019 Datacenter +| i686-unknown-linux-gnu | Tested on 64-bit Linux using multilib support +| i686-unknown-linux-musl | Tested on 64-bit Linux using multilib support. [Needs more work; issue 713](https://github.com/briansmith/ring/issues/713) +| x86_64-apple-darwin | +| x86_64-pc-windows-gnu | +| x86_64-pc-windows-msvc | Tested on 64-bit Windows Server 2019 Datacenter +| x86_64-unknown-linux-gnu | +| x86_64-unknown-linux-musl | [Needs more work; issue 713](https://github.com/briansmith/ring/issues/713) +| wasm32-unknown-unknown | Tested using wasm-bindgen-test-runner on Linux in Chrome and Firefox. + +License +------- + +See [LICENSE](LICENSE). diff --git a/vendor/ring/STYLE.md b/vendor/ring/STYLE.md new file mode 100644 index 00000000..882b7f5d --- /dev/null +++ b/vendor/ring/STYLE.md @@ -0,0 +1,200 @@ +*ring* inherited C, C++, and assembly language code from BoringSSL, and the +style guidelines for that code are in the second section of this document. + + +# *ring* Style Guide (for code not in [crypto/](crypto)) + +*ring* usually follows the [Rust Guidelines](https://aturon.github.io/), but +there are some differences and *ring* adds additional guidelines. + +## Imports (`use`) and Qualification + +In general, import modules, not non-module items, e.g. `use core`, not +`use core::mem::size_of_val`. This means that the uses of such functions must +be qualified: `core::mem::size_of_val(x)`, not `size_of_val(x)`. Exceptions may +be made for things that are very annoying to qualify; for example, we usually +`use super::input::*` or `use super::input::Input` because writing things like +`input::Input` is highly annoying. + +## Submodules and file naming. + +In general, avoid nesting modules and avoid exporting any non-module items from +the main `ring` crate. Instead, prefer a flat module structure that is one +level deep. Thus, for example, we have `ring::digest::SHA256` but not +`ring::SHA256` or `ring::digest::sha256::SHA256` or `ring::digest::sha2::SHA256`. + +Sometimes it is useful to break up a module's source code into multiple files. +In this case, it is useful to make use of the Rust visibility rule where a +submodule can use non-public items defined in the enclosing module. In that +case, it is OK to use nested submodules. The nested submodules must be +non-public (`mod x`, not `pub mod x`) and the enclosing module must re-export, +using `pub use submodule::x`, the items that are intended to be public. This +way, the implementation details that drove the choice to use nested submodules +do not affect the public API. + + +Note that this is only necessary when the module has submodules. + +## Error checking + +Use `Result` as the return type for functions that may fail. Never use +`Option` or `bool` or other types as return values to indicate failure. +`Result` is used because it is annotated `#[must_use]`, so the Rust compiler +will not let callers silently ignore the return value of functions that return +`Result`s. + +*ring* functions generally do not report error codes for a variety of reasons; +when they fail, they only report that they fail. If a function only needs to +return a boolean indicator that it succeeded or failed, use `Result<(), ()>` as +the return type. + +If an external function (e.g. part of the Rust standard library) returns +`Option` to indicate failure, use `ok_or(())` to map it to `Result`. + +Use the early-return-on-failure pattern using the `?` operator. Do not use +`Result::or_else`, `Result::and`, etc. to chain together strings of +potentially-failing operations. + +```rust +// The return type is of the form `Result<_, ()>`, not `Option<_>` or something +// else. +fn good_example(x: u32, y: u32) -> Result { + // * `ok_or` is used to map `Option` to `Result` here. + let sum = x.checked_add(y).ok_or(())?; + + // Early return is used. + foo(sum)?; + + bar(sum) +} +``` + +## Arrays and Slices + +When creating a slice from the start of a indexable value, use `x[..n]`, not +`x[0..n]`. Similarly, use `x[n..]`, not `x[n..x.len()]` for creating a slice +from a specific point to the end of the value. + +When copying and filling arrays and slices, use the functions in +[ring::polyfill](src/polyfill.rs) when possible. + +## Casting (`as`) and Conversions + +Avoid using the `as` operator. When using `as` seems necessary, see if there is +already a safer function for doing the conversion in +[ring::polyfill](src/polyfill.rs). If not, add one to `ring::polyfill`. + +The C code generally uses the C `int` type as a return value, where 1 indicates +success and 0 indicates failure. The module [ring::bssl](src/bssl.rs) contains +a [transparent] `Result` type which should be used as the return type when +declaring foreign functions which follow this convention. A +`ring::bssl::Result` should be converted to a `core::result::Result` using the +pattern in the following example (note the placement of `unsafe`): + +[transparent]: https://doc.rust-lang.org/nightly/reference/type-layout.html#the-transparent-representation + +```rust +extern { + unsafe_fn1() -> bssl::Result; + /* ... */ +} + +fn foo() -> Result<(), ()> { + Result::from(unsafe { + unsafe_fn2(when, the, entire, thing, does, not, fit, on, a, single, + line) + })?; + + Result::from(unsafe { + unsafe_fn1() // Use the same style even when the call fits on one line. + })?; + + // The return value of `foo` will be the mapped result of calling + // `unsafe_fn3`. + Result::from(unsafe { + unsafe_fn3() + }) +} +``` + +## Arithmetic and Overflows + +In general, prefer using unsigned types over signed types, and prefer using +checked arithmetic (e.g. `x.checked_add(y)`, `x.checked_mul(y)`, etc.) over +unchecked arithmetic. Prefer using checked arithmetic over explicit bounds +checks. Example: +```rust +fn good_example(a: u64, b: u64) -> Result { + let n = a.checked_add(b).ok_or(()); +} + +fn bad_example(a: u64, b: u64) -> Result { + if usize::max_value() - a > b { + return Err(()); + } + Ok(a + b) +} +``` + +## Unsafe + +In general, avoid using `unsafe` whenever it is practical to do so. The *ring* +developers chose to use Rust because of the goodness of the safe subset; stuff +that requires `unsafe` is generally better off being written in C or assembly +language code. Generally, this means that `unsafe` is only used to call +functions written in C or assembly language. Even if your goal is to replace C +and/or assembly language code with Rust code, don't be afraid to leave, or even +add, C code to avoid adding a load of `unsafe` Rust code. + +In particular, prefer references and indexing (which is checked at runtime) to +pointers and pointer arithmetic. Example: +```rust +fn good_example(x: &[u8], n: usize) { + unsafe { + unsafe_fn(x[n..].as_ptr()) // The compiler inserts bounds checks for us. + } +} + +fn bad_example(x: &[u8], n: usize) { + unsafe { + // If we do things this way, the compiler won't do bounds checking for + // us. Also, since `offset` takes an `isize`, we have to do a cast from + // `usize` to `isize` which is potentially unsafe because an `isize` + // cannot hold every positive value of `usize`. + unsafe_fn(x.as_ptr().offset(n as isize)) + } +} +``` + +When you must use `unsafe`, minimize the scope of `unsafe`. Example: +```rust +fn good_example() { + unsafe { unsafe_fn(); } + safe_fn(); + unsafe { unsafe_fn(); } +} + +fn bad_example() { + unsafe { + unsafe_fn(); + safe_fn(); // No safe statements allowed in an unsafe block. + unsafe_fn(); + } +} +``` + +But, don't go overboard: +```rust +fn ok_example(x: &[u8], n: usize) { + unsafe { + unsafe_fn1(x[n]); // `x[n]` is a safe expression + } +} + +fn bad_example(x: &[u8], n: usize) { + let x_n = x[n]; // This is going overboard. + unsafe { + unsafe_fn1(x_n); + } +} +``` diff --git a/vendor/ring/build.rs b/vendor/ring/build.rs new file mode 100644 index 00000000..6bd79230 --- /dev/null +++ b/vendor/ring/build.rs @@ -0,0 +1,873 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Build the non-Rust components. + +// It seems like it would be a good idea to use `log!` for logging, but it +// isn't worth having the external dependencies (one for the `log` crate, and +// another for the concrete logging implementation). Instead we use `eprintln!` +// to log everything to stderr. + +// In the `pregenerate_asm_main()` case we don't want to access (Cargo) +// environment variables at all, so avoid `use std::env` here. + +use std::{ + fs::{self, DirEntry}, + path::{Path, PathBuf}, + process::Command, + time::SystemTime, +}; + +const X86: &str = "x86"; +const X86_64: &str = "x86_64"; +const AARCH64: &str = "aarch64"; +const ARM: &str = "arm"; + +#[rustfmt::skip] +const RING_SRCS: &[(&[&str], &str)] = &[ + (&[], "crypto/fipsmodule/aes/aes_nohw.c"), + (&[], "crypto/fipsmodule/bn/montgomery.c"), + (&[], "crypto/fipsmodule/bn/montgomery_inv.c"), + (&[], "crypto/limbs/limbs.c"), + (&[], "crypto/mem.c"), + (&[], "crypto/poly1305/poly1305.c"), + + (&[AARCH64, ARM, X86_64, X86], "crypto/crypto.c"), + (&[], "crypto/curve25519/curve25519.c"), + (&[AARCH64, ARM, X86_64, X86], "crypto/fipsmodule/ec/ecp_nistz.c"), + (&[AARCH64, ARM, X86_64, X86], "crypto/fipsmodule/ec/gfp_p256.c"), + (&[AARCH64, ARM, X86_64, X86], "crypto/fipsmodule/ec/gfp_p384.c"), + (&[AARCH64, ARM, X86_64, X86], "crypto/fipsmodule/ec/p256.c"), + + (&[X86_64, X86], "crypto/cpu-intel.c"), + + (&[X86], "crypto/fipsmodule/aes/asm/aesni-x86.pl"), + (&[X86], "crypto/fipsmodule/aes/asm/vpaes-x86.pl"), + (&[X86], "crypto/fipsmodule/bn/asm/x86-mont.pl"), + (&[X86], "crypto/chacha/asm/chacha-x86.pl"), + (&[X86], "crypto/fipsmodule/modes/asm/ghash-x86.pl"), + + (&[X86_64], "crypto/chacha/asm/chacha-x86_64.pl"), + (&[X86_64], "crypto/fipsmodule/aes/asm/aesni-x86_64.pl"), + (&[X86_64], "crypto/fipsmodule/aes/asm/vpaes-x86_64.pl"), + (&[X86_64], "crypto/fipsmodule/bn/asm/x86_64-mont.pl"), + (&[X86_64], "crypto/fipsmodule/bn/asm/x86_64-mont5.pl"), + (&[X86_64], "crypto/fipsmodule/ec/p256-x86_64.c"), + (&[X86_64], "crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl"), + (&[X86_64], "crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl"), + (&[X86_64], "crypto/fipsmodule/modes/asm/ghash-x86_64.pl"), + (&[X86_64], "crypto/poly1305/poly1305_vec.c"), + (&[X86_64], SHA512_X86_64), + (&[X86_64], "crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl"), + + (&[AARCH64, ARM], "crypto/fipsmodule/aes/asm/aesv8-armx.pl"), + (&[AARCH64, ARM], "crypto/fipsmodule/modes/asm/ghashv8-armx.pl"), + + (&[ARM], "crypto/fipsmodule/aes/asm/bsaes-armv7.pl"), + (&[ARM], "crypto/fipsmodule/aes/asm/vpaes-armv7.pl"), + (&[ARM], "crypto/fipsmodule/bn/asm/armv4-mont.pl"), + (&[ARM], "crypto/chacha/asm/chacha-armv4.pl"), + (&[ARM], "crypto/curve25519/asm/x25519-asm-arm.S"), + (&[ARM], "crypto/fipsmodule/modes/asm/ghash-armv4.pl"), + (&[ARM], "crypto/poly1305/poly1305_arm.c"), + (&[ARM], "crypto/poly1305/poly1305_arm_asm.S"), + (&[ARM], "crypto/fipsmodule/sha/asm/sha256-armv4.pl"), + (&[ARM], "crypto/fipsmodule/sha/asm/sha512-armv4.pl"), + + (&[AARCH64], "crypto/fipsmodule/aes/asm/vpaes-armv8.pl"), + (&[AARCH64], "crypto/fipsmodule/bn/asm/armv8-mont.pl"), + (&[AARCH64], "crypto/chacha/asm/chacha-armv8.pl"), + (&[AARCH64], "crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl"), + (&[AARCH64], SHA512_ARMV8), +]; + +const SHA256_X86_64: &str = "crypto/fipsmodule/sha/asm/sha256-x86_64.pl"; +const SHA512_X86_64: &str = "crypto/fipsmodule/sha/asm/sha512-x86_64.pl"; + +const SHA256_ARMV8: &str = "crypto/fipsmodule/sha/asm/sha256-armv8.pl"; +const SHA512_ARMV8: &str = "crypto/fipsmodule/sha/asm/sha512-armv8.pl"; + +const RING_TEST_SRCS: &[&str] = &[("crypto/constant_time_test.c")]; + +#[rustfmt::skip] +const RING_INCLUDES: &[&str] = + &[ + "crypto/curve25519/curve25519_tables.h", + "crypto/curve25519/internal.h", + "crypto/fipsmodule/bn/internal.h", + "crypto/fipsmodule/ec/ecp_nistz384.inl", + "crypto/fipsmodule/ec/ecp_nistz.h", + "crypto/fipsmodule/ec/ecp_nistz384.h", + "crypto/fipsmodule/ec/util.h", + "crypto/fipsmodule/ec/p256_shared.h", + "crypto/fipsmodule/ec/p256_table.h", + "crypto/fipsmodule/ec/p256-x86_64.h", + "crypto/fipsmodule/ec/p256-x86_64-table.h", + "crypto/internal.h", + "crypto/limbs/limbs.h", + "crypto/limbs/limbs.inl", + "crypto/poly1305/internal.h", + "include/GFp/aes.h", + "include/GFp/arm_arch.h", + "include/GFp/base.h", + "include/GFp/check.h", + "include/GFp/cpu.h", + "include/GFp/mem.h", + "include/GFp/poly1305.h", + "include/GFp/type_check.h", + "third_party/fiat/curve25519_32.h", + "third_party/fiat/curve25519_64.h", + "third_party/fiat/p256_32.h", + "third_party/fiat/p256_64.h", + ]; + +#[rustfmt::skip] +const RING_PERL_INCLUDES: &[&str] = + &["crypto/perlasm/arm-xlate.pl", + "crypto/perlasm/x86gas.pl", + "crypto/perlasm/x86nasm.pl", + "crypto/perlasm/x86asm.pl", + "crypto/perlasm/x86_64-xlate.pl"]; + +const RING_BUILD_FILE: &[&str] = &["build.rs"]; + +const PREGENERATED: &str = "pregenerated"; + +fn c_flags(target: &Target) -> &'static [&'static str] { + if target.env != MSVC { + static NON_MSVC_FLAGS: &[&str] = &[ + "-std=c1x", // GCC 4.6 requires "c1x" instead of "c11" + "-Wbad-function-cast", + "-Wnested-externs", + "-Wstrict-prototypes", + ]; + NON_MSVC_FLAGS + } else { + &[] + } +} + +fn cpp_flags(target: &Target) -> &'static [&'static str] { + if target.env != MSVC { + static NON_MSVC_FLAGS: &[&str] = &[ + "-pedantic", + "-pedantic-errors", + "-Wall", + "-Wextra", + "-Wcast-align", + "-Wcast-qual", + "-Wconversion", + "-Wenum-compare", + "-Wfloat-equal", + "-Wformat=2", + "-Winline", + "-Winvalid-pch", + "-Wmissing-field-initializers", + "-Wmissing-include-dirs", + "-Wredundant-decls", + "-Wshadow", + "-Wsign-compare", + "-Wsign-conversion", + "-Wundef", + "-Wuninitialized", + "-Wwrite-strings", + "-fno-strict-aliasing", + "-fvisibility=hidden", + ]; + NON_MSVC_FLAGS + } else { + static MSVC_FLAGS: &[&str] = &[ + "/GS", // Buffer security checks. + "/Gy", // Enable function-level linking. + "/EHsc", // C++ exceptions only, only in C++. + "/GR-", // Disable RTTI. + "/Zc:wchar_t", + "/Zc:forScope", + "/Zc:inline", + "/Zc:rvalueCast", + // Warnings. + "/sdl", + "/Wall", + "/wd4127", // C4127: conditional expression is constant + "/wd4464", // C4464: relative include path contains '..' + "/wd4514", // C4514: : unreferenced inline function has be + "/wd4710", // C4710: function not inlined + "/wd4711", // C4711: function 'function' selected for inline expansion + "/wd4820", // C4820: : bytes padding added after + "/wd5045", /* C5045: Compiler will insert Spectre mitigation for memory load if + * /Qspectre switch specified */ + ]; + MSVC_FLAGS + } +} + +const LD_FLAGS: &[&str] = &[]; + +// None means "any OS" or "any target". The first match in sequence order is +// taken. +const ASM_TARGETS: &[AsmTarget] = &[ + AsmTarget { + oss: LINUX_ABI, + arch: "aarch64", + perlasm_format: "linux64", + asm_extension: "S", + preassemble: false, + }, + AsmTarget { + oss: LINUX_ABI, + arch: "arm", + perlasm_format: "linux32", + asm_extension: "S", + preassemble: false, + }, + AsmTarget { + oss: LINUX_ABI, + arch: "x86", + perlasm_format: "elf", + asm_extension: "S", + preassemble: false, + }, + AsmTarget { + oss: LINUX_ABI, + arch: "x86_64", + perlasm_format: "elf", + asm_extension: "S", + preassemble: false, + }, + AsmTarget { + oss: MACOS_ABI, + arch: "aarch64", + perlasm_format: "ios64", + asm_extension: "S", + preassemble: false, + }, + AsmTarget { + oss: MACOS_ABI, + arch: "x86_64", + perlasm_format: "macosx", + asm_extension: "S", + preassemble: false, + }, + AsmTarget { + oss: &[WINDOWS], + arch: "x86", + perlasm_format: "win32n", + asm_extension: "asm", + preassemble: true, + }, + AsmTarget { + oss: &[WINDOWS], + arch: "x86_64", + perlasm_format: "nasm", + asm_extension: "asm", + preassemble: true, + }, +]; + +struct AsmTarget { + /// Operating systems. + oss: &'static [&'static str], + + /// Architectures. + arch: &'static str, + + /// The PerlAsm format name. + perlasm_format: &'static str, + + /// The filename extension for assembly files. + asm_extension: &'static str, + + /// Whether pre-assembled object files should be included in the Cargo + /// package instead of the asm sources. This way, the user doesn't need + /// to install an assembler for the target. This is particularly important + /// for x86/x86_64 Windows since an assembler doesn't come with the C + /// compiler. + preassemble: bool, +} + +/// Operating systems that have the same ABI as Linux on every architecture +/// mentioned in `ASM_TARGETS`. +const LINUX_ABI: &[&str] = &[ + "android", + "dragonfly", + "freebsd", + "fuchsia", + "illumos", + "netbsd", + "openbsd", + "linux", + "solaris", +]; + +/// Operating systems that have the same ABI as macOS on every architecture +/// mentioned in `ASM_TARGETS`. +const MACOS_ABI: &[&str] = &["ios", "macos"]; + +const WINDOWS: &str = "windows"; + +const MSVC: &str = "msvc"; +const MSVC_OBJ_OPT: &str = "/Fo"; +const MSVC_OBJ_EXT: &str = "obj"; + +fn main() { + if let Ok(package_name) = std::env::var("CARGO_PKG_NAME") { + if package_name == "ring" { + ring_build_rs_main(); + return; + } + } + + pregenerate_asm_main(); +} + +fn ring_build_rs_main() { + use std::env; + + let out_dir = env::var("OUT_DIR").unwrap(); + let out_dir = PathBuf::from(out_dir); + + let arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap(); + let os = env::var("CARGO_CFG_TARGET_OS").unwrap(); + let env = env::var("CARGO_CFG_TARGET_ENV").unwrap(); + let (obj_ext, obj_opt) = if env == MSVC { + (MSVC_OBJ_EXT, MSVC_OBJ_OPT) + } else { + ("o", "-o") + }; + + let is_git = std::fs::metadata(".git").is_ok(); + + // Published builds are always release builds. + let is_debug = is_git && env::var("DEBUG").unwrap() != "false"; + + let target = Target { + arch, + os, + env, + obj_ext, + obj_opt, + is_git, + is_debug, + }; + let pregenerated = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()).join(PREGENERATED); + + build_c_code(&target, pregenerated, &out_dir); + check_all_files_tracked() +} + +fn pregenerate_asm_main() { + let pregenerated = PathBuf::from(PREGENERATED); + std::fs::create_dir(&pregenerated).unwrap(); + let pregenerated_tmp = pregenerated.join("tmp"); + std::fs::create_dir(&pregenerated_tmp).unwrap(); + + for asm_target in ASM_TARGETS { + // For Windows, package pregenerated object files instead of + // pregenerated assembly language source files, so that the user + // doesn't need to install the assembler. + let asm_dir = if asm_target.preassemble { + &pregenerated_tmp + } else { + &pregenerated + }; + + let perlasm_src_dsts = perlasm_src_dsts(&asm_dir, asm_target); + perlasm(&perlasm_src_dsts, asm_target, None); + + if asm_target.preassemble { + let srcs = asm_srcs(perlasm_src_dsts); + for src in srcs { + let obj_path = obj_path(&pregenerated, &src, MSVC_OBJ_EXT); + run_command(nasm(&src, asm_target.arch, &obj_path)); + } + } + } +} + +struct Target { + arch: String, + os: String, + env: String, + obj_ext: &'static str, + obj_opt: &'static str, + is_git: bool, + is_debug: bool, +} + +fn build_c_code(target: &Target, pregenerated: PathBuf, out_dir: &Path) { + #[cfg(not(feature = "wasm32_c"))] + { + if &target.arch == "wasm32" { + return; + } + } + + let includes_modified = RING_INCLUDES + .iter() + .chain(RING_BUILD_FILE.iter()) + .chain(RING_PERL_INCLUDES.iter()) + .map(|f| file_modified(Path::new(*f))) + .max() + .unwrap(); + + let asm_target = ASM_TARGETS.iter().find(|asm_target| { + asm_target.arch == target.arch && asm_target.oss.contains(&target.os.as_ref()) + }); + + let use_pregenerated = !target.is_git; + let warnings_are_errors = target.is_git; + + let asm_dir = if use_pregenerated { + &pregenerated + } else { + out_dir + }; + + let asm_srcs = if let Some(asm_target) = asm_target { + let perlasm_src_dsts = perlasm_src_dsts(asm_dir, asm_target); + + if !use_pregenerated { + perlasm(&perlasm_src_dsts[..], asm_target, Some(includes_modified)); + } + + let mut asm_srcs = asm_srcs(perlasm_src_dsts); + + // For Windows we also pregenerate the object files for non-Git builds so + // the user doesn't need to install the assembler. On other platforms we + // assume the C compiler also assembles. + if use_pregenerated && target.os == WINDOWS { + // The pregenerated object files always use ".obj" as the extension, + // even when the C/C++ compiler outputs files with the ".o" extension. + asm_srcs = asm_srcs + .iter() + .map(|src| obj_path(&pregenerated, src.as_path(), "obj")) + .collect::>(); + } + + asm_srcs + } else { + Vec::new() + }; + + let core_srcs = sources_for_arch(&target.arch) + .into_iter() + .filter(|p| !is_perlasm(&p)) + .collect::>(); + + let test_srcs = RING_TEST_SRCS.iter().map(PathBuf::from).collect::>(); + + let libs = [ + ("ring-core", &core_srcs[..], &asm_srcs[..]), + ("ring-test", &test_srcs[..], &[]), + ]; + + // XXX: Ideally, ring-test would only be built for `cargo test`, but Cargo + // can't do that yet. + libs.iter().for_each(|&(lib_name, srcs, additional_srcs)| { + build_library( + &target, + &out_dir, + lib_name, + srcs, + additional_srcs, + warnings_are_errors, + includes_modified, + ) + }); + + println!( + "cargo:rustc-link-search=native={}", + out_dir.to_str().expect("Invalid path") + ); +} + +fn build_library( + target: &Target, + out_dir: &Path, + lib_name: &str, + srcs: &[PathBuf], + additional_srcs: &[PathBuf], + warnings_are_errors: bool, + includes_modified: SystemTime, +) { + // Compile all the (dirty) source files into object files. + let objs = additional_srcs + .iter() + .chain(srcs.iter()) + .filter(|f| &target.env != "msvc" || f.extension().unwrap().to_str().unwrap() != "S") + .map(|f| compile(f, target, warnings_are_errors, out_dir, includes_modified)) + .collect::>(); + + // Rebuild the library if necessary. + let lib_path = PathBuf::from(out_dir).join(format!("lib{}.a", lib_name)); + + if objs + .iter() + .map(Path::new) + .any(|p| need_run(&p, &lib_path, includes_modified)) + { + let mut c = cc::Build::new(); + + for f in LD_FLAGS { + let _ = c.flag(&f); + } + match target.os.as_str() { + "macos" => { + let _ = c.flag("-fPIC"); + let _ = c.flag("-Wl,-dead_strip"); + } + _ => { + let _ = c.flag("-Wl,--gc-sections"); + } + } + for o in objs { + let _ = c.object(o); + } + + // Handled below. + let _ = c.cargo_metadata(false); + + c.compile( + lib_path + .file_name() + .and_then(|f| f.to_str()) + .expect("No filename"), + ); + } + + // Link the library. This works even when the library doesn't need to be + // rebuilt. + println!("cargo:rustc-link-lib=static={}", lib_name); +} + +fn compile( + p: &Path, + target: &Target, + warnings_are_errors: bool, + out_dir: &Path, + includes_modified: SystemTime, +) -> String { + let ext = p.extension().unwrap().to_str().unwrap(); + if ext == "obj" { + p.to_str().expect("Invalid path").into() + } else { + let mut out_path = out_dir.join(p.file_name().unwrap()); + assert!(out_path.set_extension(target.obj_ext)); + if need_run(&p, &out_path, includes_modified) { + let cmd = if target.os != WINDOWS || ext != "asm" { + cc(p, ext, target, warnings_are_errors, &out_path) + } else { + nasm(p, &target.arch, &out_path) + }; + + run_command(cmd); + } + out_path.to_str().expect("Invalid path").into() + } +} + +fn obj_path(out_dir: &Path, src: &Path, obj_ext: &str) -> PathBuf { + let mut out_path = out_dir.join(src.file_name().unwrap()); + assert!(out_path.set_extension(obj_ext)); + out_path +} + +fn cc( + file: &Path, + ext: &str, + target: &Target, + warnings_are_errors: bool, + out_dir: &Path, +) -> Command { + let is_musl = target.env.starts_with("musl"); + + let mut c = cc::Build::new(); + let _ = c.include("include"); + match ext { + "c" => { + for f in c_flags(target) { + let _ = c.flag(f); + } + } + "S" => (), + e => panic!("Unsupported file extension: {:?}", e), + }; + for f in cpp_flags(target) { + let _ = c.flag(&f); + } + if target.os != "none" + && target.os != "redox" + && target.os != "windows" + && target.arch != "wasm32" + { + let _ = c.flag("-fstack-protector"); + } + + match (target.os.as_str(), target.env.as_str()) { + // ``-gfull`` is required for Darwin's |-dead_strip|. + ("macos", _) => { + let _ = c.flag("-gfull"); + } + (_, "msvc") => (), + _ => { + let _ = c.flag("-g3"); + } + }; + if !target.is_debug { + let _ = c.define("NDEBUG", None); + } + + if &target.env == "msvc" { + if std::env::var("OPT_LEVEL").unwrap() == "0" { + let _ = c.flag("/Od"); // Disable optimization for debug builds. + // run-time checking: (s)tack frame, (u)ninitialized variables + let _ = c.flag("/RTCsu"); + } else { + let _ = c.flag("/Ox"); // Enable full optimization. + } + } + + // Allow cross-compiling without a target sysroot for these targets. + // + // poly1305_vec.c requires which requires . + if (target.arch == "wasm32" && target.os == "unknown") + || (target.os == "linux" && is_musl && target.arch != "x86_64") + { + if let Ok(compiler) = c.try_get_compiler() { + // TODO: Expand this to non-clang compilers in 0.17.0 if practical. + if compiler.is_like_clang() { + let _ = c.flag("-nostdlibinc"); + let _ = c.define("GFp_NOSTDLIBINC", "1"); + } + } + } + + if warnings_are_errors { + let flag = if &target.env != "msvc" { + "-Werror" + } else { + "/WX" + }; + let _ = c.flag(flag); + } + if is_musl { + // Some platforms enable _FORTIFY_SOURCE by default, but musl + // libc doesn't support it yet. See + // http://wiki.musl-libc.org/wiki/Future_Ideas#Fortify + // http://www.openwall.com/lists/musl/2015/02/04/3 + // http://www.openwall.com/lists/musl/2015/06/17/1 + let _ = c.flag("-U_FORTIFY_SOURCE"); + } + + let mut c = c.get_compiler().to_command(); + let _ = c + .arg("-c") + .arg(format!( + "{}{}", + target.obj_opt, + out_dir.to_str().expect("Invalid path") + )) + .arg(file); + c +} + +fn nasm(file: &Path, arch: &str, out_file: &Path) -> Command { + let oformat = match arch { + "x86_64" => ("win64"), + "x86" => ("win32"), + _ => panic!("unsupported arch: {}", arch), + }; + let mut c = Command::new("./target/tools/nasm"); + let _ = c + .arg("-o") + .arg(out_file.to_str().expect("Invalid path")) + .arg("-f") + .arg(oformat) + .arg("-Xgnu") + .arg("-gcv8") + .arg(file); + c +} + +fn run_command_with_args(command_name: S, args: &[String]) + where + S: AsRef + Copy, +{ + let mut cmd = Command::new(command_name); + let _ = cmd.args(args); + run_command(cmd) +} + +fn run_command(mut cmd: Command) { + eprintln!("running {:?}", cmd); + let status = cmd.status().unwrap_or_else(|e| { + panic!("failed to execute [{:?}]: {}", cmd, e); + }); + if !status.success() { + panic!("execution failed"); + } +} + +fn sources_for_arch(arch: &str) -> Vec { + RING_SRCS + .iter() + .filter(|&&(archs, _)| archs.is_empty() || archs.contains(&arch)) + .map(|&(_, p)| PathBuf::from(p)) + .collect::>() +} + +fn perlasm_src_dsts(out_dir: &Path, asm_target: &AsmTarget) -> Vec<(PathBuf, PathBuf)> { + let srcs = sources_for_arch(asm_target.arch); + let mut src_dsts = srcs + .iter() + .filter(|p| is_perlasm(p)) + .map(|src| (src.clone(), asm_path(out_dir, src, asm_target))) + .collect::>(); + + // Some PerlAsm source files need to be run multiple times with different + // output paths. + { + // Appease the borrow checker. + let mut maybe_synthesize = |concrete, synthesized| { + let concrete_path = PathBuf::from(concrete); + if srcs.contains(&concrete_path) { + let synthesized_path = PathBuf::from(synthesized); + src_dsts.push(( + concrete_path, + asm_path(out_dir, &synthesized_path, asm_target), + )) + } + }; + maybe_synthesize(SHA512_X86_64, SHA256_X86_64); + maybe_synthesize(SHA512_ARMV8, SHA256_ARMV8); + } + + src_dsts +} + +fn asm_srcs(perlasm_src_dsts: Vec<(PathBuf, PathBuf)>) -> Vec { + perlasm_src_dsts + .into_iter() + .map(|(_src, dst)| dst) + .collect::>() +} + +fn is_perlasm(path: &PathBuf) -> bool { + path.extension().unwrap().to_str().unwrap() == "pl" +} + +fn asm_path(out_dir: &Path, src: &Path, asm_target: &AsmTarget) -> PathBuf { + let src_stem = src.file_stem().expect("source file without basename"); + + let dst_stem = src_stem.to_str().unwrap(); + let dst_filename = format!( + "{}-{}.{}", + dst_stem, asm_target.perlasm_format, asm_target.asm_extension + ); + out_dir.join(dst_filename) +} + +fn perlasm( + src_dst: &[(PathBuf, PathBuf)], + asm_target: &AsmTarget, + includes_modified: Option, +) { + for (src, dst) in src_dst { + if let Some(includes_modified) = includes_modified { + if !need_run(src, dst, includes_modified) { + continue; + } + } + + let mut args = Vec::::new(); + args.push(src.to_string_lossy().into_owned()); + args.push(asm_target.perlasm_format.to_owned()); + if asm_target.arch == "x86" { + args.push("-fPIC".into()); + args.push("-DOPENSSL_IA32_SSE2".into()); + } + // Work around PerlAsm issue for ARM and AAarch64 targets by replacing + // back slashes with forward slashes. + let dst = dst + .to_str() + .expect("Could not convert path") + .replace("\\", "/"); + args.push(dst); + run_command_with_args(&get_command("PERL_EXECUTABLE", "perl"), &args); + } +} + +fn need_run(source: &Path, target: &Path, includes_modified: SystemTime) -> bool { + let s_modified = file_modified(source); + if let Ok(target_metadata) = std::fs::metadata(target) { + let target_modified = target_metadata.modified().unwrap(); + s_modified >= target_modified || includes_modified >= target_modified + } else { + // On error fetching metadata for the target file, assume the target + // doesn't exist. + true + } +} + +fn file_modified(path: &Path) -> SystemTime { + let path = Path::new(path); + let path_as_str = format!("{:?}", path); + std::fs::metadata(path) + .expect(&path_as_str) + .modified() + .expect("nah") +} + +fn get_command(var: &str, default: &str) -> String { + std::env::var(var).unwrap_or_else(|_| default.into()) +} + +fn check_all_files_tracked() { + for path in &["crypto", "include", "third_party/fiat"] { + walk_dir(&PathBuf::from(path), &is_tracked); + } +} + +fn is_tracked(file: &DirEntry) { + let p = file.path(); + let cmp = |f| p == PathBuf::from(f); + let tracked = match p.extension().and_then(|p| p.to_str()) { + Some("h") | Some("inl") => RING_INCLUDES.iter().any(cmp), + Some("c") | Some("S") | Some("asm") => { + RING_SRCS.iter().any(|(_, f)| cmp(f)) || RING_TEST_SRCS.iter().any(cmp) + } + Some("pl") => RING_SRCS.iter().any(|(_, f)| cmp(f)) || RING_PERL_INCLUDES.iter().any(cmp), + _ => true, + }; + if !tracked { + panic!("{:?} is not tracked in build.rs", p); + } +} + +fn walk_dir(dir: &Path, cb: &F) + where + F: Fn(&DirEntry), +{ + if dir.is_dir() { + for entry in fs::read_dir(dir).unwrap() { + let entry = entry.unwrap(); + let path = entry.path(); + if path.is_dir() { + walk_dir(&path, cb); + } else { + cb(&entry); + } + } + } +} diff --git a/vendor/ring/crypto/chacha/asm/chacha-armv4.pl b/vendor/ring/crypto/chacha/asm/chacha-armv4.pl new file mode 100755 index 00000000..90fa2c77 --- /dev/null +++ b/vendor/ring/crypto/chacha/asm/chacha-armv4.pl @@ -0,0 +1,1167 @@ +#! /usr/bin/env perl +# Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# December 2014 +# +# ChaCha20 for ARMv4. +# +# Performance in cycles per byte out of large buffer. +# +# IALU/gcc-4.4 1xNEON 3xNEON+1xIALU +# +# Cortex-A5 19.3(*)/+95% 21.8 14.1 +# Cortex-A8 10.5(*)/+160% 13.9 6.35 +# Cortex-A9 12.9(**)/+110% 14.3 6.50 +# Cortex-A15 11.0/+40% 16.0 5.00 +# Snapdragon S4 11.5/+125% 13.6 4.90 +# +# (*) most "favourable" result for aligned data on little-endian +# processor, result for misaligned data is 10-15% lower; +# (**) this result is a trade-off: it can be improved by 20%, +# but then Snapdragon S4 and Cortex-A8 results get +# 20-25% worse; + +$flavour = shift; +if ($flavour=~/\w[\w\-]*\.\w+$/) { $output=$flavour; undef $flavour; } +else { while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} } + +if ($flavour && $flavour ne "void") { + $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; + ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or + ( $xlate="${dir}../../perlasm/arm-xlate.pl" and -f $xlate) or + die "can't locate arm-xlate.pl"; + + open OUT,"| \"$^X\" $xlate $flavour $output"; + *STDOUT=*OUT; +} else { + open OUT,">$output"; + *STDOUT=*OUT; +} + +sub AUTOLOAD() # thunk [simplified] x86-style perlasm +{ my $opcode = $AUTOLOAD; $opcode =~ s/.*:://; $opcode =~ s/_/\./; + my $arg = pop; + $arg = "#$arg" if ($arg*1 eq $arg); + $code .= "\t$opcode\t".join(',',@_,$arg)."\n"; +} + +my @x=map("r$_",(0..7,"x","x","x","x",12,"x",14,"x")); +my @t=map("r$_",(8..11)); + +sub ROUND { +my ($a0,$b0,$c0,$d0)=@_; +my ($a1,$b1,$c1,$d1)=map(($_&~3)+(($_+1)&3),($a0,$b0,$c0,$d0)); +my ($a2,$b2,$c2,$d2)=map(($_&~3)+(($_+1)&3),($a1,$b1,$c1,$d1)); +my ($a3,$b3,$c3,$d3)=map(($_&~3)+(($_+1)&3),($a2,$b2,$c2,$d2)); +my $odd = $d0&1; +my ($xc,$xc_) = (@t[0..1]); +my ($xd,$xd_) = $odd ? (@t[2],@x[$d1]) : (@x[$d0],@t[2]); +my @ret; + + # Consider order in which variables are addressed by their + # index: + # + # a b c d + # + # 0 4 8 12 < even round + # 1 5 9 13 + # 2 6 10 14 + # 3 7 11 15 + # 0 5 10 15 < odd round + # 1 6 11 12 + # 2 7 8 13 + # 3 4 9 14 + # + # 'a', 'b' are permanently allocated in registers, @x[0..7], + # while 'c's and pair of 'd's are maintained in memory. If + # you observe 'c' column, you'll notice that pair of 'c's is + # invariant between rounds. This means that we have to reload + # them once per round, in the middle. This is why you'll see + # bunch of 'c' stores and loads in the middle, but none in + # the beginning or end. If you observe 'd' column, you'll + # notice that 15 and 13 are reused in next pair of rounds. + # This is why these two are chosen for offloading to memory, + # to make loads count more. + push @ret,( + "&add (@x[$a0],@x[$a0],@x[$b0])", + "&mov ($xd,$xd,'ror#16')", + "&add (@x[$a1],@x[$a1],@x[$b1])", + "&mov ($xd_,$xd_,'ror#16')", + "&eor ($xd,$xd,@x[$a0],'ror#16')", + "&eor ($xd_,$xd_,@x[$a1],'ror#16')", + + "&add ($xc,$xc,$xd)", + "&mov (@x[$b0],@x[$b0],'ror#20')", + "&add ($xc_,$xc_,$xd_)", + "&mov (@x[$b1],@x[$b1],'ror#20')", + "&eor (@x[$b0],@x[$b0],$xc,'ror#20')", + "&eor (@x[$b1],@x[$b1],$xc_,'ror#20')", + + "&add (@x[$a0],@x[$a0],@x[$b0])", + "&mov ($xd,$xd,'ror#24')", + "&add (@x[$a1],@x[$a1],@x[$b1])", + "&mov ($xd_,$xd_,'ror#24')", + "&eor ($xd,$xd,@x[$a0],'ror#24')", + "&eor ($xd_,$xd_,@x[$a1],'ror#24')", + + "&add ($xc,$xc,$xd)", + "&mov (@x[$b0],@x[$b0],'ror#25')" ); + push @ret,( + "&str ($xd,'[sp,#4*(16+$d0)]')", + "&ldr ($xd,'[sp,#4*(16+$d2)]')" ) if ($odd); + push @ret,( + "&add ($xc_,$xc_,$xd_)", + "&mov (@x[$b1],@x[$b1],'ror#25')" ); + push @ret,( + "&str ($xd_,'[sp,#4*(16+$d1)]')", + "&ldr ($xd_,'[sp,#4*(16+$d3)]')" ) if (!$odd); + push @ret,( + "&eor (@x[$b0],@x[$b0],$xc,'ror#25')", + "&eor (@x[$b1],@x[$b1],$xc_,'ror#25')" ); + + $xd=@x[$d2] if (!$odd); + $xd_=@x[$d3] if ($odd); + push @ret,( + "&str ($xc,'[sp,#4*(16+$c0)]')", + "&ldr ($xc,'[sp,#4*(16+$c2)]')", + "&add (@x[$a2],@x[$a2],@x[$b2])", + "&mov ($xd,$xd,'ror#16')", + "&str ($xc_,'[sp,#4*(16+$c1)]')", + "&ldr ($xc_,'[sp,#4*(16+$c3)]')", + "&add (@x[$a3],@x[$a3],@x[$b3])", + "&mov ($xd_,$xd_,'ror#16')", + "&eor ($xd,$xd,@x[$a2],'ror#16')", + "&eor ($xd_,$xd_,@x[$a3],'ror#16')", + + "&add ($xc,$xc,$xd)", + "&mov (@x[$b2],@x[$b2],'ror#20')", + "&add ($xc_,$xc_,$xd_)", + "&mov (@x[$b3],@x[$b3],'ror#20')", + "&eor (@x[$b2],@x[$b2],$xc,'ror#20')", + "&eor (@x[$b3],@x[$b3],$xc_,'ror#20')", + + "&add (@x[$a2],@x[$a2],@x[$b2])", + "&mov ($xd,$xd,'ror#24')", + "&add (@x[$a3],@x[$a3],@x[$b3])", + "&mov ($xd_,$xd_,'ror#24')", + "&eor ($xd,$xd,@x[$a2],'ror#24')", + "&eor ($xd_,$xd_,@x[$a3],'ror#24')", + + "&add ($xc,$xc,$xd)", + "&mov (@x[$b2],@x[$b2],'ror#25')", + "&add ($xc_,$xc_,$xd_)", + "&mov (@x[$b3],@x[$b3],'ror#25')", + "&eor (@x[$b2],@x[$b2],$xc,'ror#25')", + "&eor (@x[$b3],@x[$b3],$xc_,'ror#25')" ); + + @ret; +} + +$code.=<<___; +#include + +@ Silence ARMv8 deprecated IT instruction warnings. This file is used by both +@ ARMv7 and ARMv8 processors and does not use ARMv8 instructions. +.arch armv7-a + +.text +#if defined(__thumb2__) || defined(__clang__) +.syntax unified +#endif +#if defined(__thumb2__) +.thumb +#else +.code 32 +#endif + +#if defined(__thumb2__) || defined(__clang__) +#define ldrhsb ldrbhs +#endif + +.align 5 +.Lsigma: +.long 0x61707865,0x3320646e,0x79622d32,0x6b206574 @ endian-neutral +.Lone: +.long 1,0,0,0 +#if __ARM_MAX_ARCH__>=7 +.extern GFp_armcap_P +.hidden GFp_armcap_P +.LOPENSSL_armcap: +.word GFp_armcap_P-.LChaCha20_ctr32 +#else +.word -1 +#endif + +.globl GFp_ChaCha20_ctr32 +.type GFp_ChaCha20_ctr32,%function +.align 5 +GFp_ChaCha20_ctr32: +.LChaCha20_ctr32: + ldr r12,[sp,#0] @ pull pointer to counter and nonce + stmdb sp!,{r0-r2,r4-r11,lr} +#if __ARM_ARCH__<7 && !defined(__thumb2__) + sub r14,pc,#16 @ ChaCha20_ctr32 +#else + adr r14,.LChaCha20_ctr32 +#endif + cmp r2,#0 @ len==0? +#ifdef __thumb2__ + itt eq +#endif + addeq sp,sp,#4*3 + beq .Lno_data +#if __ARM_MAX_ARCH__>=7 + cmp r2,#192 @ test len + bls .Lshort + ldr r4,[r14,#-32] + ldr r4,[r14,r4] +# ifdef __APPLE__ + ldr r4,[r4] +# endif + tst r4,#ARMV7_NEON + bne .LChaCha20_neon +.Lshort: +#endif + ldmia r12,{r4-r7} @ load counter and nonce + sub sp,sp,#4*(16) @ off-load area + sub r14,r14,#64 @ .Lsigma + stmdb sp!,{r4-r7} @ copy counter and nonce + ldmia r3,{r4-r11} @ load key + ldmia r14,{r0-r3} @ load sigma + stmdb sp!,{r4-r11} @ copy key + stmdb sp!,{r0-r3} @ copy sigma + str r10,[sp,#4*(16+10)] @ off-load "@x[10]" + str r11,[sp,#4*(16+11)] @ off-load "@x[11]" + b .Loop_outer_enter + +.align 4 +.Loop_outer: + ldmia sp,{r0-r9} @ load key material + str @t[3],[sp,#4*(32+2)] @ save len + str r12, [sp,#4*(32+1)] @ save inp + str r14, [sp,#4*(32+0)] @ save out +.Loop_outer_enter: + ldr @t[3], [sp,#4*(15)] + ldr @x[12],[sp,#4*(12)] @ modulo-scheduled load + ldr @t[2], [sp,#4*(13)] + ldr @x[14],[sp,#4*(14)] + str @t[3], [sp,#4*(16+15)] + mov @t[3],#10 + b .Loop + +.align 4 +.Loop: + subs @t[3],@t[3],#1 +___ + foreach (&ROUND(0, 4, 8,12)) { eval; } + foreach (&ROUND(0, 5,10,15)) { eval; } +$code.=<<___; + bne .Loop + + ldr @t[3],[sp,#4*(32+2)] @ load len + + str @t[0], [sp,#4*(16+8)] @ modulo-scheduled store + str @t[1], [sp,#4*(16+9)] + str @x[12],[sp,#4*(16+12)] + str @t[2], [sp,#4*(16+13)] + str @x[14],[sp,#4*(16+14)] + + @ at this point we have first half of 512-bit result in + @ @x[0-7] and second half at sp+4*(16+8) + + cmp @t[3],#64 @ done yet? +#ifdef __thumb2__ + itete lo +#endif + addlo r12,sp,#4*(0) @ shortcut or ... + ldrhs r12,[sp,#4*(32+1)] @ ... load inp + addlo r14,sp,#4*(0) @ shortcut or ... + ldrhs r14,[sp,#4*(32+0)] @ ... load out + + ldr @t[0],[sp,#4*(0)] @ load key material + ldr @t[1],[sp,#4*(1)] + +#if __ARM_ARCH__>=6 || !defined(__ARMEB__) +# if __ARM_ARCH__<7 + orr @t[2],r12,r14 + tst @t[2],#3 @ are input and output aligned? + ldr @t[2],[sp,#4*(2)] + bne .Lunaligned + cmp @t[3],#64 @ restore flags +# else + ldr @t[2],[sp,#4*(2)] +# endif + ldr @t[3],[sp,#4*(3)] + + add @x[0],@x[0],@t[0] @ accumulate key material + add @x[1],@x[1],@t[1] +# ifdef __thumb2__ + itt hs +# endif + ldrhs @t[0],[r12],#16 @ load input + ldrhs @t[1],[r12,#-12] + + add @x[2],@x[2],@t[2] + add @x[3],@x[3],@t[3] +# ifdef __thumb2__ + itt hs +# endif + ldrhs @t[2],[r12,#-8] + ldrhs @t[3],[r12,#-4] +# if __ARM_ARCH__>=6 && defined(__ARMEB__) + rev @x[0],@x[0] + rev @x[1],@x[1] + rev @x[2],@x[2] + rev @x[3],@x[3] +# endif +# ifdef __thumb2__ + itt hs +# endif + eorhs @x[0],@x[0],@t[0] @ xor with input + eorhs @x[1],@x[1],@t[1] + add @t[0],sp,#4*(4) + str @x[0],[r14],#16 @ store output +# ifdef __thumb2__ + itt hs +# endif + eorhs @x[2],@x[2],@t[2] + eorhs @x[3],@x[3],@t[3] + ldmia @t[0],{@t[0]-@t[3]} @ load key material + str @x[1],[r14,#-12] + str @x[2],[r14,#-8] + str @x[3],[r14,#-4] + + add @x[4],@x[4],@t[0] @ accumulate key material + add @x[5],@x[5],@t[1] +# ifdef __thumb2__ + itt hs +# endif + ldrhs @t[0],[r12],#16 @ load input + ldrhs @t[1],[r12,#-12] + add @x[6],@x[6],@t[2] + add @x[7],@x[7],@t[3] +# ifdef __thumb2__ + itt hs +# endif + ldrhs @t[2],[r12,#-8] + ldrhs @t[3],[r12,#-4] +# if __ARM_ARCH__>=6 && defined(__ARMEB__) + rev @x[4],@x[4] + rev @x[5],@x[5] + rev @x[6],@x[6] + rev @x[7],@x[7] +# endif +# ifdef __thumb2__ + itt hs +# endif + eorhs @x[4],@x[4],@t[0] + eorhs @x[5],@x[5],@t[1] + add @t[0],sp,#4*(8) + str @x[4],[r14],#16 @ store output +# ifdef __thumb2__ + itt hs +# endif + eorhs @x[6],@x[6],@t[2] + eorhs @x[7],@x[7],@t[3] + str @x[5],[r14,#-12] + ldmia @t[0],{@t[0]-@t[3]} @ load key material + str @x[6],[r14,#-8] + add @x[0],sp,#4*(16+8) + str @x[7],[r14,#-4] + + ldmia @x[0],{@x[0]-@x[7]} @ load second half + + add @x[0],@x[0],@t[0] @ accumulate key material + add @x[1],@x[1],@t[1] +# ifdef __thumb2__ + itt hs +# endif + ldrhs @t[0],[r12],#16 @ load input + ldrhs @t[1],[r12,#-12] +# ifdef __thumb2__ + itt hi +# endif + strhi @t[2],[sp,#4*(16+10)] @ copy "@x[10]" while at it + strhi @t[3],[sp,#4*(16+11)] @ copy "@x[11]" while at it + add @x[2],@x[2],@t[2] + add @x[3],@x[3],@t[3] +# ifdef __thumb2__ + itt hs +# endif + ldrhs @t[2],[r12,#-8] + ldrhs @t[3],[r12,#-4] +# if __ARM_ARCH__>=6 && defined(__ARMEB__) + rev @x[0],@x[0] + rev @x[1],@x[1] + rev @x[2],@x[2] + rev @x[3],@x[3] +# endif +# ifdef __thumb2__ + itt hs +# endif + eorhs @x[0],@x[0],@t[0] + eorhs @x[1],@x[1],@t[1] + add @t[0],sp,#4*(12) + str @x[0],[r14],#16 @ store output +# ifdef __thumb2__ + itt hs +# endif + eorhs @x[2],@x[2],@t[2] + eorhs @x[3],@x[3],@t[3] + str @x[1],[r14,#-12] + ldmia @t[0],{@t[0]-@t[3]} @ load key material + str @x[2],[r14,#-8] + str @x[3],[r14,#-4] + + add @x[4],@x[4],@t[0] @ accumulate key material + add @x[5],@x[5],@t[1] +# ifdef __thumb2__ + itt hi +# endif + addhi @t[0],@t[0],#1 @ next counter value + strhi @t[0],[sp,#4*(12)] @ save next counter value +# ifdef __thumb2__ + itt hs +# endif + ldrhs @t[0],[r12],#16 @ load input + ldrhs @t[1],[r12,#-12] + add @x[6],@x[6],@t[2] + add @x[7],@x[7],@t[3] +# ifdef __thumb2__ + itt hs +# endif + ldrhs @t[2],[r12,#-8] + ldrhs @t[3],[r12,#-4] +# if __ARM_ARCH__>=6 && defined(__ARMEB__) + rev @x[4],@x[4] + rev @x[5],@x[5] + rev @x[6],@x[6] + rev @x[7],@x[7] +# endif +# ifdef __thumb2__ + itt hs +# endif + eorhs @x[4],@x[4],@t[0] + eorhs @x[5],@x[5],@t[1] +# ifdef __thumb2__ + it ne +# endif + ldrne @t[0],[sp,#4*(32+2)] @ re-load len +# ifdef __thumb2__ + itt hs +# endif + eorhs @x[6],@x[6],@t[2] + eorhs @x[7],@x[7],@t[3] + str @x[4],[r14],#16 @ store output + str @x[5],[r14,#-12] +# ifdef __thumb2__ + it hs +# endif + subhs @t[3],@t[0],#64 @ len-=64 + str @x[6],[r14,#-8] + str @x[7],[r14,#-4] + bhi .Loop_outer + + beq .Ldone +# if __ARM_ARCH__<7 + b .Ltail + +.align 4 +.Lunaligned: @ unaligned endian-neutral path + cmp @t[3],#64 @ restore flags +# endif +#endif +#if __ARM_ARCH__<7 + ldr @t[3],[sp,#4*(3)] +___ +for ($i=0;$i<16;$i+=4) { +my $j=$i&0x7; + +$code.=<<___ if ($i==4); + add @x[0],sp,#4*(16+8) +___ +$code.=<<___ if ($i==8); + ldmia @x[0],{@x[0]-@x[7]} @ load second half +# ifdef __thumb2__ + itt hi +# endif + strhi @t[2],[sp,#4*(16+10)] @ copy "@x[10]" + strhi @t[3],[sp,#4*(16+11)] @ copy "@x[11]" +___ +$code.=<<___; + add @x[$j+0],@x[$j+0],@t[0] @ accumulate key material +___ +$code.=<<___ if ($i==12); +# ifdef __thumb2__ + itt hi +# endif + addhi @t[0],@t[0],#1 @ next counter value + strhi @t[0],[sp,#4*(12)] @ save next counter value +___ +$code.=<<___; + add @x[$j+1],@x[$j+1],@t[1] + add @x[$j+2],@x[$j+2],@t[2] +# ifdef __thumb2__ + itete lo +# endif + eorlo @t[0],@t[0],@t[0] @ zero or ... + ldrhsb @t[0],[r12],#16 @ ... load input + eorlo @t[1],@t[1],@t[1] + ldrhsb @t[1],[r12,#-12] + + add @x[$j+3],@x[$j+3],@t[3] +# ifdef __thumb2__ + itete lo +# endif + eorlo @t[2],@t[2],@t[2] + ldrhsb @t[2],[r12,#-8] + eorlo @t[3],@t[3],@t[3] + ldrhsb @t[3],[r12,#-4] + + eor @x[$j+0],@t[0],@x[$j+0] @ xor with input (or zero) + eor @x[$j+1],@t[1],@x[$j+1] +# ifdef __thumb2__ + itt hs +# endif + ldrhsb @t[0],[r12,#-15] @ load more input + ldrhsb @t[1],[r12,#-11] + eor @x[$j+2],@t[2],@x[$j+2] + strb @x[$j+0],[r14],#16 @ store output + eor @x[$j+3],@t[3],@x[$j+3] +# ifdef __thumb2__ + itt hs +# endif + ldrhsb @t[2],[r12,#-7] + ldrhsb @t[3],[r12,#-3] + strb @x[$j+1],[r14,#-12] + eor @x[$j+0],@t[0],@x[$j+0],lsr#8 + strb @x[$j+2],[r14,#-8] + eor @x[$j+1],@t[1],@x[$j+1],lsr#8 +# ifdef __thumb2__ + itt hs +# endif + ldrhsb @t[0],[r12,#-14] @ load more input + ldrhsb @t[1],[r12,#-10] + strb @x[$j+3],[r14,#-4] + eor @x[$j+2],@t[2],@x[$j+2],lsr#8 + strb @x[$j+0],[r14,#-15] + eor @x[$j+3],@t[3],@x[$j+3],lsr#8 +# ifdef __thumb2__ + itt hs +# endif + ldrhsb @t[2],[r12,#-6] + ldrhsb @t[3],[r12,#-2] + strb @x[$j+1],[r14,#-11] + eor @x[$j+0],@t[0],@x[$j+0],lsr#8 + strb @x[$j+2],[r14,#-7] + eor @x[$j+1],@t[1],@x[$j+1],lsr#8 +# ifdef __thumb2__ + itt hs +# endif + ldrhsb @t[0],[r12,#-13] @ load more input + ldrhsb @t[1],[r12,#-9] + strb @x[$j+3],[r14,#-3] + eor @x[$j+2],@t[2],@x[$j+2],lsr#8 + strb @x[$j+0],[r14,#-14] + eor @x[$j+3],@t[3],@x[$j+3],lsr#8 +# ifdef __thumb2__ + itt hs +# endif + ldrhsb @t[2],[r12,#-5] + ldrhsb @t[3],[r12,#-1] + strb @x[$j+1],[r14,#-10] + strb @x[$j+2],[r14,#-6] + eor @x[$j+0],@t[0],@x[$j+0],lsr#8 + strb @x[$j+3],[r14,#-2] + eor @x[$j+1],@t[1],@x[$j+1],lsr#8 + strb @x[$j+0],[r14,#-13] + eor @x[$j+2],@t[2],@x[$j+2],lsr#8 + strb @x[$j+1],[r14,#-9] + eor @x[$j+3],@t[3],@x[$j+3],lsr#8 + strb @x[$j+2],[r14,#-5] + strb @x[$j+3],[r14,#-1] +___ +$code.=<<___ if ($i<12); + add @t[0],sp,#4*(4+$i) + ldmia @t[0],{@t[0]-@t[3]} @ load key material +___ +} +$code.=<<___; +# ifdef __thumb2__ + it ne +# endif + ldrne @t[0],[sp,#4*(32+2)] @ re-load len +# ifdef __thumb2__ + it hs +# endif + subhs @t[3],@t[0],#64 @ len-=64 + bhi .Loop_outer + + beq .Ldone +#endif + +.Ltail: + ldr r12,[sp,#4*(32+1)] @ load inp + add @t[1],sp,#4*(0) + ldr r14,[sp,#4*(32+0)] @ load out + +.Loop_tail: + ldrb @t[2],[@t[1]],#1 @ read buffer on stack + ldrb @t[3],[r12],#1 @ read input + subs @t[0],@t[0],#1 + eor @t[3],@t[3],@t[2] + strb @t[3],[r14],#1 @ store output + bne .Loop_tail + +.Ldone: + add sp,sp,#4*(32+3) +.Lno_data: + ldmia sp!,{r4-r11,pc} +.size GFp_ChaCha20_ctr32,.-GFp_ChaCha20_ctr32 +___ + +{{{ +my ($a0,$b0,$c0,$d0,$a1,$b1,$c1,$d1,$a2,$b2,$c2,$d2,$t0,$t1,$t2,$t3) = + map("q$_",(0..15)); + +sub NEONROUND { +my $odd = pop; +my ($a,$b,$c,$d,$t)=@_; + + ( + "&vadd_i32 ($a,$a,$b)", + "&veor ($d,$d,$a)", + "&vrev32_16 ($d,$d)", # vrot ($d,16) + + "&vadd_i32 ($c,$c,$d)", + "&veor ($t,$b,$c)", + "&vshr_u32 ($b,$t,20)", + "&vsli_32 ($b,$t,12)", + + "&vadd_i32 ($a,$a,$b)", + "&veor ($t,$d,$a)", + "&vshr_u32 ($d,$t,24)", + "&vsli_32 ($d,$t,8)", + + "&vadd_i32 ($c,$c,$d)", + "&veor ($t,$b,$c)", + "&vshr_u32 ($b,$t,25)", + "&vsli_32 ($b,$t,7)", + + "&vext_8 ($c,$c,$c,8)", + "&vext_8 ($b,$b,$b,$odd?12:4)", + "&vext_8 ($d,$d,$d,$odd?4:12)" + ); +} + +$code.=<<___; +#if __ARM_MAX_ARCH__>=7 +.arch armv7-a +.fpu neon + +.type ChaCha20_neon,%function +.align 5 +ChaCha20_neon: + ldr r12,[sp,#0] @ pull pointer to counter and nonce + stmdb sp!,{r0-r2,r4-r11,lr} +.LChaCha20_neon: + adr r14,.Lsigma + vstmdb sp!,{d8-d15} @ ABI spec says so + stmdb sp!,{r0-r3} + + vld1.32 {$b0-$c0},[r3] @ load key + ldmia r3,{r4-r11} @ load key + + sub sp,sp,#4*(16+16) + vld1.32 {$d0},[r12] @ load counter and nonce + add r12,sp,#4*8 + ldmia r14,{r0-r3} @ load sigma + vld1.32 {$a0},[r14]! @ load sigma + vld1.32 {$t0},[r14] @ one + vst1.32 {$c0-$d0},[r12] @ copy 1/2key|counter|nonce + vst1.32 {$a0-$b0},[sp] @ copy sigma|1/2key + + str r10,[sp,#4*(16+10)] @ off-load "@x[10]" + str r11,[sp,#4*(16+11)] @ off-load "@x[11]" + vshl.i32 $t1#lo,$t0#lo,#1 @ two + vstr $t0#lo,[sp,#4*(16+0)] + vshl.i32 $t2#lo,$t0#lo,#2 @ four + vstr $t1#lo,[sp,#4*(16+2)] + vmov $a1,$a0 + vstr $t2#lo,[sp,#4*(16+4)] + vmov $a2,$a0 + vmov $b1,$b0 + vmov $b2,$b0 + b .Loop_neon_enter + +.align 4 +.Loop_neon_outer: + ldmia sp,{r0-r9} @ load key material + cmp @t[3],#64*2 @ if len<=64*2 + bls .Lbreak_neon @ switch to integer-only + vmov $a1,$a0 + str @t[3],[sp,#4*(32+2)] @ save len + vmov $a2,$a0 + str r12, [sp,#4*(32+1)] @ save inp + vmov $b1,$b0 + str r14, [sp,#4*(32+0)] @ save out + vmov $b2,$b0 +.Loop_neon_enter: + ldr @t[3], [sp,#4*(15)] + vadd.i32 $d1,$d0,$t0 @ counter+1 + ldr @x[12],[sp,#4*(12)] @ modulo-scheduled load + vmov $c1,$c0 + ldr @t[2], [sp,#4*(13)] + vmov $c2,$c0 + ldr @x[14],[sp,#4*(14)] + vadd.i32 $d2,$d1,$t0 @ counter+2 + str @t[3], [sp,#4*(16+15)] + mov @t[3],#10 + add @x[12],@x[12],#3 @ counter+3 + b .Loop_neon + +.align 4 +.Loop_neon: + subs @t[3],@t[3],#1 +___ + my @thread0=&NEONROUND($a0,$b0,$c0,$d0,$t0,0); + my @thread1=&NEONROUND($a1,$b1,$c1,$d1,$t1,0); + my @thread2=&NEONROUND($a2,$b2,$c2,$d2,$t2,0); + my @thread3=&ROUND(0,4,8,12); + + foreach (@thread0) { + eval; eval(shift(@thread3)); + eval(shift(@thread1)); eval(shift(@thread3)); + eval(shift(@thread2)); eval(shift(@thread3)); + } + + @thread0=&NEONROUND($a0,$b0,$c0,$d0,$t0,1); + @thread1=&NEONROUND($a1,$b1,$c1,$d1,$t1,1); + @thread2=&NEONROUND($a2,$b2,$c2,$d2,$t2,1); + @thread3=&ROUND(0,5,10,15); + + foreach (@thread0) { + eval; eval(shift(@thread3)); + eval(shift(@thread1)); eval(shift(@thread3)); + eval(shift(@thread2)); eval(shift(@thread3)); + } +$code.=<<___; + bne .Loop_neon + + add @t[3],sp,#32 + vld1.32 {$t0-$t1},[sp] @ load key material + vld1.32 {$t2-$t3},[@t[3]] + + ldr @t[3],[sp,#4*(32+2)] @ load len + + str @t[0], [sp,#4*(16+8)] @ modulo-scheduled store + str @t[1], [sp,#4*(16+9)] + str @x[12],[sp,#4*(16+12)] + str @t[2], [sp,#4*(16+13)] + str @x[14],[sp,#4*(16+14)] + + @ at this point we have first half of 512-bit result in + @ @x[0-7] and second half at sp+4*(16+8) + + ldr r12,[sp,#4*(32+1)] @ load inp + ldr r14,[sp,#4*(32+0)] @ load out + + vadd.i32 $a0,$a0,$t0 @ accumulate key material + vadd.i32 $a1,$a1,$t0 + vadd.i32 $a2,$a2,$t0 + vldr $t0#lo,[sp,#4*(16+0)] @ one + + vadd.i32 $b0,$b0,$t1 + vadd.i32 $b1,$b1,$t1 + vadd.i32 $b2,$b2,$t1 + vldr $t1#lo,[sp,#4*(16+2)] @ two + + vadd.i32 $c0,$c0,$t2 + vadd.i32 $c1,$c1,$t2 + vadd.i32 $c2,$c2,$t2 + vadd.i32 $d1#lo,$d1#lo,$t0#lo @ counter+1 + vadd.i32 $d2#lo,$d2#lo,$t1#lo @ counter+2 + + vadd.i32 $d0,$d0,$t3 + vadd.i32 $d1,$d1,$t3 + vadd.i32 $d2,$d2,$t3 + + cmp @t[3],#64*4 + blo .Ltail_neon + + vld1.8 {$t0-$t1},[r12]! @ load input + mov @t[3],sp + vld1.8 {$t2-$t3},[r12]! + veor $a0,$a0,$t0 @ xor with input + veor $b0,$b0,$t1 + vld1.8 {$t0-$t1},[r12]! + veor $c0,$c0,$t2 + veor $d0,$d0,$t3 + vld1.8 {$t2-$t3},[r12]! + + veor $a1,$a1,$t0 + vst1.8 {$a0-$b0},[r14]! @ store output + veor $b1,$b1,$t1 + vld1.8 {$t0-$t1},[r12]! + veor $c1,$c1,$t2 + vst1.8 {$c0-$d0},[r14]! + veor $d1,$d1,$t3 + vld1.8 {$t2-$t3},[r12]! + + veor $a2,$a2,$t0 + vld1.32 {$a0-$b0},[@t[3]]! @ load for next iteration + veor $t0#hi,$t0#hi,$t0#hi + vldr $t0#lo,[sp,#4*(16+4)] @ four + veor $b2,$b2,$t1 + vld1.32 {$c0-$d0},[@t[3]] + veor $c2,$c2,$t2 + vst1.8 {$a1-$b1},[r14]! + veor $d2,$d2,$t3 + vst1.8 {$c1-$d1},[r14]! + + vadd.i32 $d0#lo,$d0#lo,$t0#lo @ next counter value + vldr $t0#lo,[sp,#4*(16+0)] @ one + + ldmia sp,{@t[0]-@t[3]} @ load key material + add @x[0],@x[0],@t[0] @ accumulate key material + ldr @t[0],[r12],#16 @ load input + vst1.8 {$a2-$b2},[r14]! + add @x[1],@x[1],@t[1] + ldr @t[1],[r12,#-12] + vst1.8 {$c2-$d2},[r14]! + add @x[2],@x[2],@t[2] + ldr @t[2],[r12,#-8] + add @x[3],@x[3],@t[3] + ldr @t[3],[r12,#-4] +# ifdef __ARMEB__ + rev @x[0],@x[0] + rev @x[1],@x[1] + rev @x[2],@x[2] + rev @x[3],@x[3] +# endif + eor @x[0],@x[0],@t[0] @ xor with input + add @t[0],sp,#4*(4) + eor @x[1],@x[1],@t[1] + str @x[0],[r14],#16 @ store output + eor @x[2],@x[2],@t[2] + str @x[1],[r14,#-12] + eor @x[3],@x[3],@t[3] + ldmia @t[0],{@t[0]-@t[3]} @ load key material + str @x[2],[r14,#-8] + str @x[3],[r14,#-4] + + add @x[4],@x[4],@t[0] @ accumulate key material + ldr @t[0],[r12],#16 @ load input + add @x[5],@x[5],@t[1] + ldr @t[1],[r12,#-12] + add @x[6],@x[6],@t[2] + ldr @t[2],[r12,#-8] + add @x[7],@x[7],@t[3] + ldr @t[3],[r12,#-4] +# ifdef __ARMEB__ + rev @x[4],@x[4] + rev @x[5],@x[5] + rev @x[6],@x[6] + rev @x[7],@x[7] +# endif + eor @x[4],@x[4],@t[0] + add @t[0],sp,#4*(8) + eor @x[5],@x[5],@t[1] + str @x[4],[r14],#16 @ store output + eor @x[6],@x[6],@t[2] + str @x[5],[r14,#-12] + eor @x[7],@x[7],@t[3] + ldmia @t[0],{@t[0]-@t[3]} @ load key material + str @x[6],[r14,#-8] + add @x[0],sp,#4*(16+8) + str @x[7],[r14,#-4] + + ldmia @x[0],{@x[0]-@x[7]} @ load second half + + add @x[0],@x[0],@t[0] @ accumulate key material + ldr @t[0],[r12],#16 @ load input + add @x[1],@x[1],@t[1] + ldr @t[1],[r12,#-12] +# ifdef __thumb2__ + it hi +# endif + strhi @t[2],[sp,#4*(16+10)] @ copy "@x[10]" while at it + add @x[2],@x[2],@t[2] + ldr @t[2],[r12,#-8] +# ifdef __thumb2__ + it hi +# endif + strhi @t[3],[sp,#4*(16+11)] @ copy "@x[11]" while at it + add @x[3],@x[3],@t[3] + ldr @t[3],[r12,#-4] +# ifdef __ARMEB__ + rev @x[0],@x[0] + rev @x[1],@x[1] + rev @x[2],@x[2] + rev @x[3],@x[3] +# endif + eor @x[0],@x[0],@t[0] + add @t[0],sp,#4*(12) + eor @x[1],@x[1],@t[1] + str @x[0],[r14],#16 @ store output + eor @x[2],@x[2],@t[2] + str @x[1],[r14,#-12] + eor @x[3],@x[3],@t[3] + ldmia @t[0],{@t[0]-@t[3]} @ load key material + str @x[2],[r14,#-8] + str @x[3],[r14,#-4] + + add @x[4],@x[4],@t[0] @ accumulate key material + add @t[0],@t[0],#4 @ next counter value + add @x[5],@x[5],@t[1] + str @t[0],[sp,#4*(12)] @ save next counter value + ldr @t[0],[r12],#16 @ load input + add @x[6],@x[6],@t[2] + add @x[4],@x[4],#3 @ counter+3 + ldr @t[1],[r12,#-12] + add @x[7],@x[7],@t[3] + ldr @t[2],[r12,#-8] + ldr @t[3],[r12,#-4] +# ifdef __ARMEB__ + rev @x[4],@x[4] + rev @x[5],@x[5] + rev @x[6],@x[6] + rev @x[7],@x[7] +# endif + eor @x[4],@x[4],@t[0] +# ifdef __thumb2__ + it hi +# endif + ldrhi @t[0],[sp,#4*(32+2)] @ re-load len + eor @x[5],@x[5],@t[1] + eor @x[6],@x[6],@t[2] + str @x[4],[r14],#16 @ store output + eor @x[7],@x[7],@t[3] + str @x[5],[r14,#-12] + sub @t[3],@t[0],#64*4 @ len-=64*4 + str @x[6],[r14,#-8] + str @x[7],[r14,#-4] + bhi .Loop_neon_outer + + b .Ldone_neon + +.align 4 +.Lbreak_neon: + @ harmonize NEON and integer-only stack frames: load data + @ from NEON frame, but save to integer-only one; distance + @ between the two is 4*(32+4+16-32)=4*(20). + + str @t[3], [sp,#4*(20+32+2)] @ save len + add @t[3],sp,#4*(32+4) + str r12, [sp,#4*(20+32+1)] @ save inp + str r14, [sp,#4*(20+32+0)] @ save out + + ldr @x[12],[sp,#4*(16+10)] + ldr @x[14],[sp,#4*(16+11)] + vldmia @t[3],{d8-d15} @ fulfill ABI requirement + str @x[12],[sp,#4*(20+16+10)] @ copy "@x[10]" + str @x[14],[sp,#4*(20+16+11)] @ copy "@x[11]" + + ldr @t[3], [sp,#4*(15)] + ldr @x[12],[sp,#4*(12)] @ modulo-scheduled load + ldr @t[2], [sp,#4*(13)] + ldr @x[14],[sp,#4*(14)] + str @t[3], [sp,#4*(20+16+15)] + add @t[3],sp,#4*(20) + vst1.32 {$a0-$b0},[@t[3]]! @ copy key + add sp,sp,#4*(20) @ switch frame + vst1.32 {$c0-$d0},[@t[3]] + mov @t[3],#10 + b .Loop @ go integer-only + +.align 4 +.Ltail_neon: + cmp @t[3],#64*3 + bhs .L192_or_more_neon + cmp @t[3],#64*2 + bhs .L128_or_more_neon + cmp @t[3],#64*1 + bhs .L64_or_more_neon + + add @t[0],sp,#4*(8) + vst1.8 {$a0-$b0},[sp] + add @t[2],sp,#4*(0) + vst1.8 {$c0-$d0},[@t[0]] + b .Loop_tail_neon + +.align 4 +.L64_or_more_neon: + vld1.8 {$t0-$t1},[r12]! + vld1.8 {$t2-$t3},[r12]! + veor $a0,$a0,$t0 + veor $b0,$b0,$t1 + veor $c0,$c0,$t2 + veor $d0,$d0,$t3 + vst1.8 {$a0-$b0},[r14]! + vst1.8 {$c0-$d0},[r14]! + + beq .Ldone_neon + + add @t[0],sp,#4*(8) + vst1.8 {$a1-$b1},[sp] + add @t[2],sp,#4*(0) + vst1.8 {$c1-$d1},[@t[0]] + sub @t[3],@t[3],#64*1 @ len-=64*1 + b .Loop_tail_neon + +.align 4 +.L128_or_more_neon: + vld1.8 {$t0-$t1},[r12]! + vld1.8 {$t2-$t3},[r12]! + veor $a0,$a0,$t0 + veor $b0,$b0,$t1 + vld1.8 {$t0-$t1},[r12]! + veor $c0,$c0,$t2 + veor $d0,$d0,$t3 + vld1.8 {$t2-$t3},[r12]! + + veor $a1,$a1,$t0 + veor $b1,$b1,$t1 + vst1.8 {$a0-$b0},[r14]! + veor $c1,$c1,$t2 + vst1.8 {$c0-$d0},[r14]! + veor $d1,$d1,$t3 + vst1.8 {$a1-$b1},[r14]! + vst1.8 {$c1-$d1},[r14]! + + beq .Ldone_neon + + add @t[0],sp,#4*(8) + vst1.8 {$a2-$b2},[sp] + add @t[2],sp,#4*(0) + vst1.8 {$c2-$d2},[@t[0]] + sub @t[3],@t[3],#64*2 @ len-=64*2 + b .Loop_tail_neon + +.align 4 +.L192_or_more_neon: + vld1.8 {$t0-$t1},[r12]! + vld1.8 {$t2-$t3},[r12]! + veor $a0,$a0,$t0 + veor $b0,$b0,$t1 + vld1.8 {$t0-$t1},[r12]! + veor $c0,$c0,$t2 + veor $d0,$d0,$t3 + vld1.8 {$t2-$t3},[r12]! + + veor $a1,$a1,$t0 + veor $b1,$b1,$t1 + vld1.8 {$t0-$t1},[r12]! + veor $c1,$c1,$t2 + vst1.8 {$a0-$b0},[r14]! + veor $d1,$d1,$t3 + vld1.8 {$t2-$t3},[r12]! + + veor $a2,$a2,$t0 + vst1.8 {$c0-$d0},[r14]! + veor $b2,$b2,$t1 + vst1.8 {$a1-$b1},[r14]! + veor $c2,$c2,$t2 + vst1.8 {$c1-$d1},[r14]! + veor $d2,$d2,$t3 + vst1.8 {$a2-$b2},[r14]! + vst1.8 {$c2-$d2},[r14]! + + beq .Ldone_neon + + ldmia sp,{@t[0]-@t[3]} @ load key material + add @x[0],@x[0],@t[0] @ accumulate key material + add @t[0],sp,#4*(4) + add @x[1],@x[1],@t[1] + add @x[2],@x[2],@t[2] + add @x[3],@x[3],@t[3] + ldmia @t[0],{@t[0]-@t[3]} @ load key material + + add @x[4],@x[4],@t[0] @ accumulate key material + add @t[0],sp,#4*(8) + add @x[5],@x[5],@t[1] + add @x[6],@x[6],@t[2] + add @x[7],@x[7],@t[3] + ldmia @t[0],{@t[0]-@t[3]} @ load key material +# ifdef __ARMEB__ + rev @x[0],@x[0] + rev @x[1],@x[1] + rev @x[2],@x[2] + rev @x[3],@x[3] + rev @x[4],@x[4] + rev @x[5],@x[5] + rev @x[6],@x[6] + rev @x[7],@x[7] +# endif + stmia sp,{@x[0]-@x[7]} + add @x[0],sp,#4*(16+8) + + ldmia @x[0],{@x[0]-@x[7]} @ load second half + + add @x[0],@x[0],@t[0] @ accumulate key material + add @t[0],sp,#4*(12) + add @x[1],@x[1],@t[1] + add @x[2],@x[2],@t[2] + add @x[3],@x[3],@t[3] + ldmia @t[0],{@t[0]-@t[3]} @ load key material + + add @x[4],@x[4],@t[0] @ accumulate key material + add @t[0],sp,#4*(8) + add @x[5],@x[5],@t[1] + add @x[4],@x[4],#3 @ counter+3 + add @x[6],@x[6],@t[2] + add @x[7],@x[7],@t[3] + ldr @t[3],[sp,#4*(32+2)] @ re-load len +# ifdef __ARMEB__ + rev @x[0],@x[0] + rev @x[1],@x[1] + rev @x[2],@x[2] + rev @x[3],@x[3] + rev @x[4],@x[4] + rev @x[5],@x[5] + rev @x[6],@x[6] + rev @x[7],@x[7] +# endif + stmia @t[0],{@x[0]-@x[7]} + add @t[2],sp,#4*(0) + sub @t[3],@t[3],#64*3 @ len-=64*3 + +.Loop_tail_neon: + ldrb @t[0],[@t[2]],#1 @ read buffer on stack + ldrb @t[1],[r12],#1 @ read input + subs @t[3],@t[3],#1 + eor @t[0],@t[0],@t[1] + strb @t[0],[r14],#1 @ store output + bne .Loop_tail_neon + +.Ldone_neon: + add sp,sp,#4*(32+4) + vldmia sp,{d8-d15} + add sp,sp,#4*(16+3) + ldmia sp!,{r4-r11,pc} +.size ChaCha20_neon,.-ChaCha20_neon +#endif +___ +}}} + +foreach (split("\n",$code)) { + s/\`([^\`]*)\`/eval $1/geo; + + s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/geo; + + print $_,"\n"; +} +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/chacha/asm/chacha-armv8.pl b/vendor/ring/crypto/chacha/asm/chacha-armv8.pl new file mode 100755 index 00000000..80ec882c --- /dev/null +++ b/vendor/ring/crypto/chacha/asm/chacha-armv8.pl @@ -0,0 +1,1144 @@ +#! /usr/bin/env perl +# Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# June 2015 +# +# ChaCha20 for ARMv8. +# +# Performance in cycles per byte out of large buffer. +# +# IALU/gcc-4.9 3xNEON+1xIALU 6xNEON+2xIALU +# +# Apple A7 5.50/+49% 3.33 1.70 +# Cortex-A53 8.40/+80% 4.72 4.72(*) +# Cortex-A57 8.06/+43% 4.90 4.43(**) +# Denver 4.50/+82% 2.63 2.67(*) +# X-Gene 9.50/+46% 8.82 8.89(*) +# Mongoose 8.00/+44% 3.64 3.25 +# Kryo 8.17/+50% 4.83 4.65 +# +# (*) it's expected that doubling interleave factor doesn't help +# all processors, only those with higher NEON latency and +# higher instruction issue rate; +# (**) expected improvement was actually higher; + +$flavour=shift; +$output=shift; + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../perlasm/arm-xlate.pl" and -f $xlate) or +die "can't locate arm-xlate.pl"; + +open OUT,"| \"$^X\" $xlate $flavour $output"; +*STDOUT=*OUT; + +sub AUTOLOAD() # thunk [simplified] x86-style perlasm +{ my $opcode = $AUTOLOAD; $opcode =~ s/.*:://; $opcode =~ s/_/\./; + my $arg = pop; + $arg = "#$arg" if ($arg*1 eq $arg); + $code .= "\t$opcode\t".join(',',@_,$arg)."\n"; +} + +my ($out,$inp,$len,$key,$ctr) = map("x$_",(0..4)); + +my @x=map("x$_",(5..17,19..21)); +my @d=map("x$_",(22..28,30)); + +sub ROUND { +my ($a0,$b0,$c0,$d0)=@_; +my ($a1,$b1,$c1,$d1)=map(($_&~3)+(($_+1)&3),($a0,$b0,$c0,$d0)); +my ($a2,$b2,$c2,$d2)=map(($_&~3)+(($_+1)&3),($a1,$b1,$c1,$d1)); +my ($a3,$b3,$c3,$d3)=map(($_&~3)+(($_+1)&3),($a2,$b2,$c2,$d2)); + + ( + "&add_32 (@x[$a0],@x[$a0],@x[$b0])", + "&add_32 (@x[$a1],@x[$a1],@x[$b1])", + "&add_32 (@x[$a2],@x[$a2],@x[$b2])", + "&add_32 (@x[$a3],@x[$a3],@x[$b3])", + "&eor_32 (@x[$d0],@x[$d0],@x[$a0])", + "&eor_32 (@x[$d1],@x[$d1],@x[$a1])", + "&eor_32 (@x[$d2],@x[$d2],@x[$a2])", + "&eor_32 (@x[$d3],@x[$d3],@x[$a3])", + "&ror_32 (@x[$d0],@x[$d0],16)", + "&ror_32 (@x[$d1],@x[$d1],16)", + "&ror_32 (@x[$d2],@x[$d2],16)", + "&ror_32 (@x[$d3],@x[$d3],16)", + + "&add_32 (@x[$c0],@x[$c0],@x[$d0])", + "&add_32 (@x[$c1],@x[$c1],@x[$d1])", + "&add_32 (@x[$c2],@x[$c2],@x[$d2])", + "&add_32 (@x[$c3],@x[$c3],@x[$d3])", + "&eor_32 (@x[$b0],@x[$b0],@x[$c0])", + "&eor_32 (@x[$b1],@x[$b1],@x[$c1])", + "&eor_32 (@x[$b2],@x[$b2],@x[$c2])", + "&eor_32 (@x[$b3],@x[$b3],@x[$c3])", + "&ror_32 (@x[$b0],@x[$b0],20)", + "&ror_32 (@x[$b1],@x[$b1],20)", + "&ror_32 (@x[$b2],@x[$b2],20)", + "&ror_32 (@x[$b3],@x[$b3],20)", + + "&add_32 (@x[$a0],@x[$a0],@x[$b0])", + "&add_32 (@x[$a1],@x[$a1],@x[$b1])", + "&add_32 (@x[$a2],@x[$a2],@x[$b2])", + "&add_32 (@x[$a3],@x[$a3],@x[$b3])", + "&eor_32 (@x[$d0],@x[$d0],@x[$a0])", + "&eor_32 (@x[$d1],@x[$d1],@x[$a1])", + "&eor_32 (@x[$d2],@x[$d2],@x[$a2])", + "&eor_32 (@x[$d3],@x[$d3],@x[$a3])", + "&ror_32 (@x[$d0],@x[$d0],24)", + "&ror_32 (@x[$d1],@x[$d1],24)", + "&ror_32 (@x[$d2],@x[$d2],24)", + "&ror_32 (@x[$d3],@x[$d3],24)", + + "&add_32 (@x[$c0],@x[$c0],@x[$d0])", + "&add_32 (@x[$c1],@x[$c1],@x[$d1])", + "&add_32 (@x[$c2],@x[$c2],@x[$d2])", + "&add_32 (@x[$c3],@x[$c3],@x[$d3])", + "&eor_32 (@x[$b0],@x[$b0],@x[$c0])", + "&eor_32 (@x[$b1],@x[$b1],@x[$c1])", + "&eor_32 (@x[$b2],@x[$b2],@x[$c2])", + "&eor_32 (@x[$b3],@x[$b3],@x[$c3])", + "&ror_32 (@x[$b0],@x[$b0],25)", + "&ror_32 (@x[$b1],@x[$b1],25)", + "&ror_32 (@x[$b2],@x[$b2],25)", + "&ror_32 (@x[$b3],@x[$b3],25)" + ); +} + +$code.=<<___; +#include + +.extern GFp_armcap_P +.hidden GFp_armcap_P + +.section .rodata + +.align 5 +.Lsigma: +.quad 0x3320646e61707865,0x6b20657479622d32 // endian-neutral +.Lone: +.long 1,0,0,0 +.asciz "ChaCha20 for ARMv8, CRYPTOGAMS by " + +.text + +.globl GFp_ChaCha20_ctr32 +.type GFp_ChaCha20_ctr32,%function +.align 5 +GFp_ChaCha20_ctr32: + AARCH64_VALID_CALL_TARGET + cbz $len,.Labort +#if __has_feature(hwaddress_sanitizer) && __clang_major__ >= 10 + adrp @x[0],:pg_hi21_nc:GFp_armcap_P +#else + adrp @x[0],:pg_hi21:GFp_armcap_P +#endif + cmp $len,#192 + b.lo .Lshort + ldr w17,[@x[0],:lo12:GFp_armcap_P] + tst w17,#ARMV7_NEON + b.ne ChaCha20_neon + +.Lshort: + AARCH64_SIGN_LINK_REGISTER + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + + adrp @x[0],:pg_hi21:.Lsigma + add @x[0],@x[0],:lo12:.Lsigma + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + sub sp,sp,#64 + + ldp @d[0],@d[1],[@x[0]] // load sigma + ldp @d[2],@d[3],[$key] // load key + ldp @d[4],@d[5],[$key,#16] + ldp @d[6],@d[7],[$ctr] // load counter +#ifdef __ARMEB__ + ror @d[2],@d[2],#32 + ror @d[3],@d[3],#32 + ror @d[4],@d[4],#32 + ror @d[5],@d[5],#32 + ror @d[6],@d[6],#32 + ror @d[7],@d[7],#32 +#endif + +.Loop_outer: + mov.32 @x[0],@d[0] // unpack key block + lsr @x[1],@d[0],#32 + mov.32 @x[2],@d[1] + lsr @x[3],@d[1],#32 + mov.32 @x[4],@d[2] + lsr @x[5],@d[2],#32 + mov.32 @x[6],@d[3] + lsr @x[7],@d[3],#32 + mov.32 @x[8],@d[4] + lsr @x[9],@d[4],#32 + mov.32 @x[10],@d[5] + lsr @x[11],@d[5],#32 + mov.32 @x[12],@d[6] + lsr @x[13],@d[6],#32 + mov.32 @x[14],@d[7] + lsr @x[15],@d[7],#32 + + mov $ctr,#10 + subs $len,$len,#64 +.Loop: + sub $ctr,$ctr,#1 +___ + foreach (&ROUND(0, 4, 8,12)) { eval; } + foreach (&ROUND(0, 5,10,15)) { eval; } +$code.=<<___; + cbnz $ctr,.Loop + + add.32 @x[0],@x[0],@d[0] // accumulate key block + add @x[1],@x[1],@d[0],lsr#32 + add.32 @x[2],@x[2],@d[1] + add @x[3],@x[3],@d[1],lsr#32 + add.32 @x[4],@x[4],@d[2] + add @x[5],@x[5],@d[2],lsr#32 + add.32 @x[6],@x[6],@d[3] + add @x[7],@x[7],@d[3],lsr#32 + add.32 @x[8],@x[8],@d[4] + add @x[9],@x[9],@d[4],lsr#32 + add.32 @x[10],@x[10],@d[5] + add @x[11],@x[11],@d[5],lsr#32 + add.32 @x[12],@x[12],@d[6] + add @x[13],@x[13],@d[6],lsr#32 + add.32 @x[14],@x[14],@d[7] + add @x[15],@x[15],@d[7],lsr#32 + + b.lo .Ltail + + add @x[0],@x[0],@x[1],lsl#32 // pack + add @x[2],@x[2],@x[3],lsl#32 + ldp @x[1],@x[3],[$inp,#0] // load input + add @x[4],@x[4],@x[5],lsl#32 + add @x[6],@x[6],@x[7],lsl#32 + ldp @x[5],@x[7],[$inp,#16] + add @x[8],@x[8],@x[9],lsl#32 + add @x[10],@x[10],@x[11],lsl#32 + ldp @x[9],@x[11],[$inp,#32] + add @x[12],@x[12],@x[13],lsl#32 + add @x[14],@x[14],@x[15],lsl#32 + ldp @x[13],@x[15],[$inp,#48] + add $inp,$inp,#64 +#ifdef __ARMEB__ + rev @x[0],@x[0] + rev @x[2],@x[2] + rev @x[4],@x[4] + rev @x[6],@x[6] + rev @x[8],@x[8] + rev @x[10],@x[10] + rev @x[12],@x[12] + rev @x[14],@x[14] +#endif + eor @x[0],@x[0],@x[1] + eor @x[2],@x[2],@x[3] + eor @x[4],@x[4],@x[5] + eor @x[6],@x[6],@x[7] + eor @x[8],@x[8],@x[9] + eor @x[10],@x[10],@x[11] + eor @x[12],@x[12],@x[13] + eor @x[14],@x[14],@x[15] + + stp @x[0],@x[2],[$out,#0] // store output + add @d[6],@d[6],#1 // increment counter + stp @x[4],@x[6],[$out,#16] + stp @x[8],@x[10],[$out,#32] + stp @x[12],@x[14],[$out,#48] + add $out,$out,#64 + + b.hi .Loop_outer + + ldp x19,x20,[x29,#16] + add sp,sp,#64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#96 + AARCH64_VALIDATE_LINK_REGISTER +.Labort: + ret + +.align 4 +.Ltail: + add $len,$len,#64 +.Less_than_64: + sub $out,$out,#1 + add $inp,$inp,$len + add $out,$out,$len + add $ctr,sp,$len + neg $len,$len + + add @x[0],@x[0],@x[1],lsl#32 // pack + add @x[2],@x[2],@x[3],lsl#32 + add @x[4],@x[4],@x[5],lsl#32 + add @x[6],@x[6],@x[7],lsl#32 + add @x[8],@x[8],@x[9],lsl#32 + add @x[10],@x[10],@x[11],lsl#32 + add @x[12],@x[12],@x[13],lsl#32 + add @x[14],@x[14],@x[15],lsl#32 +#ifdef __ARMEB__ + rev @x[0],@x[0] + rev @x[2],@x[2] + rev @x[4],@x[4] + rev @x[6],@x[6] + rev @x[8],@x[8] + rev @x[10],@x[10] + rev @x[12],@x[12] + rev @x[14],@x[14] +#endif + stp @x[0],@x[2],[sp,#0] + stp @x[4],@x[6],[sp,#16] + stp @x[8],@x[10],[sp,#32] + stp @x[12],@x[14],[sp,#48] + +.Loop_tail: + ldrb w10,[$inp,$len] + ldrb w11,[$ctr,$len] + add $len,$len,#1 + eor w10,w10,w11 + strb w10,[$out,$len] + cbnz $len,.Loop_tail + + stp xzr,xzr,[sp,#0] + stp xzr,xzr,[sp,#16] + stp xzr,xzr,[sp,#32] + stp xzr,xzr,[sp,#48] + + ldp x19,x20,[x29,#16] + add sp,sp,#64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#96 + AARCH64_VALIDATE_LINK_REGISTER + ret +.size GFp_ChaCha20_ctr32,.-GFp_ChaCha20_ctr32 +___ + +{{{ +my ($A0,$B0,$C0,$D0,$A1,$B1,$C1,$D1,$A2,$B2,$C2,$D2,$T0,$T1,$T2,$T3) = + map("v$_.4s",(0..7,16..23)); +my (@K)=map("v$_.4s",(24..30)); +my $ONE="v31.4s"; + +sub NEONROUND { +my $odd = pop; +my ($a,$b,$c,$d,$t)=@_; + + ( + "&add ('$a','$a','$b')", + "&eor ('$d','$d','$a')", + "&rev32_16 ('$d','$d')", # vrot ($d,16) + + "&add ('$c','$c','$d')", + "&eor ('$t','$b','$c')", + "&ushr ('$b','$t',20)", + "&sli ('$b','$t',12)", + + "&add ('$a','$a','$b')", + "&eor ('$t','$d','$a')", + "&ushr ('$d','$t',24)", + "&sli ('$d','$t',8)", + + "&add ('$c','$c','$d')", + "&eor ('$t','$b','$c')", + "&ushr ('$b','$t',25)", + "&sli ('$b','$t',7)", + + "&ext ('$c','$c','$c',8)", + "&ext ('$d','$d','$d',$odd?4:12)", + "&ext ('$b','$b','$b',$odd?12:4)" + ); +} + +$code.=<<___; + +.type ChaCha20_neon,%function +.align 5 +ChaCha20_neon: + AARCH64_SIGN_LINK_REGISTER + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + + adrp @x[0],:pg_hi21:.Lsigma + add @x[0],@x[0],:lo12:.Lsigma + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + cmp $len,#512 + b.hs .L512_or_more_neon + + sub sp,sp,#64 + + ldp @d[0],@d[1],[@x[0]] // load sigma + ld1 {@K[0]},[@x[0]],#16 + ldp @d[2],@d[3],[$key] // load key + ldp @d[4],@d[5],[$key,#16] + ld1 {@K[1],@K[2]},[$key] + ldp @d[6],@d[7],[$ctr] // load counter + ld1 {@K[3]},[$ctr] + ld1 {$ONE},[@x[0]] +#ifdef __ARMEB__ + rev64 @K[0],@K[0] + ror @d[2],@d[2],#32 + ror @d[3],@d[3],#32 + ror @d[4],@d[4],#32 + ror @d[5],@d[5],#32 + ror @d[6],@d[6],#32 + ror @d[7],@d[7],#32 +#endif + add @K[3],@K[3],$ONE // += 1 + add @K[4],@K[3],$ONE + add @K[5],@K[4],$ONE + shl $ONE,$ONE,#2 // 1 -> 4 + +.Loop_outer_neon: + mov.32 @x[0],@d[0] // unpack key block + lsr @x[1],@d[0],#32 + mov $A0,@K[0] + mov.32 @x[2],@d[1] + lsr @x[3],@d[1],#32 + mov $A1,@K[0] + mov.32 @x[4],@d[2] + lsr @x[5],@d[2],#32 + mov $A2,@K[0] + mov.32 @x[6],@d[3] + mov $B0,@K[1] + lsr @x[7],@d[3],#32 + mov $B1,@K[1] + mov.32 @x[8],@d[4] + mov $B2,@K[1] + lsr @x[9],@d[4],#32 + mov $D0,@K[3] + mov.32 @x[10],@d[5] + mov $D1,@K[4] + lsr @x[11],@d[5],#32 + mov $D2,@K[5] + mov.32 @x[12],@d[6] + mov $C0,@K[2] + lsr @x[13],@d[6],#32 + mov $C1,@K[2] + mov.32 @x[14],@d[7] + mov $C2,@K[2] + lsr @x[15],@d[7],#32 + + mov $ctr,#10 + subs $len,$len,#256 +.Loop_neon: + sub $ctr,$ctr,#1 +___ + my @thread0=&NEONROUND($A0,$B0,$C0,$D0,$T0,0); + my @thread1=&NEONROUND($A1,$B1,$C1,$D1,$T1,0); + my @thread2=&NEONROUND($A2,$B2,$C2,$D2,$T2,0); + my @thread3=&ROUND(0,4,8,12); + + foreach (@thread0) { + eval; eval(shift(@thread3)); + eval(shift(@thread1)); eval(shift(@thread3)); + eval(shift(@thread2)); eval(shift(@thread3)); + } + + @thread0=&NEONROUND($A0,$B0,$C0,$D0,$T0,1); + @thread1=&NEONROUND($A1,$B1,$C1,$D1,$T1,1); + @thread2=&NEONROUND($A2,$B2,$C2,$D2,$T2,1); + @thread3=&ROUND(0,5,10,15); + + foreach (@thread0) { + eval; eval(shift(@thread3)); + eval(shift(@thread1)); eval(shift(@thread3)); + eval(shift(@thread2)); eval(shift(@thread3)); + } +$code.=<<___; + cbnz $ctr,.Loop_neon + + add.32 @x[0],@x[0],@d[0] // accumulate key block + add $A0,$A0,@K[0] + add @x[1],@x[1],@d[0],lsr#32 + add $A1,$A1,@K[0] + add.32 @x[2],@x[2],@d[1] + add $A2,$A2,@K[0] + add @x[3],@x[3],@d[1],lsr#32 + add $C0,$C0,@K[2] + add.32 @x[4],@x[4],@d[2] + add $C1,$C1,@K[2] + add @x[5],@x[5],@d[2],lsr#32 + add $C2,$C2,@K[2] + add.32 @x[6],@x[6],@d[3] + add $D0,$D0,@K[3] + add @x[7],@x[7],@d[3],lsr#32 + add.32 @x[8],@x[8],@d[4] + add $D1,$D1,@K[4] + add @x[9],@x[9],@d[4],lsr#32 + add.32 @x[10],@x[10],@d[5] + add $D2,$D2,@K[5] + add @x[11],@x[11],@d[5],lsr#32 + add.32 @x[12],@x[12],@d[6] + add $B0,$B0,@K[1] + add @x[13],@x[13],@d[6],lsr#32 + add.32 @x[14],@x[14],@d[7] + add $B1,$B1,@K[1] + add @x[15],@x[15],@d[7],lsr#32 + add $B2,$B2,@K[1] + + b.lo .Ltail_neon + + add @x[0],@x[0],@x[1],lsl#32 // pack + add @x[2],@x[2],@x[3],lsl#32 + ldp @x[1],@x[3],[$inp,#0] // load input + add @x[4],@x[4],@x[5],lsl#32 + add @x[6],@x[6],@x[7],lsl#32 + ldp @x[5],@x[7],[$inp,#16] + add @x[8],@x[8],@x[9],lsl#32 + add @x[10],@x[10],@x[11],lsl#32 + ldp @x[9],@x[11],[$inp,#32] + add @x[12],@x[12],@x[13],lsl#32 + add @x[14],@x[14],@x[15],lsl#32 + ldp @x[13],@x[15],[$inp,#48] + add $inp,$inp,#64 +#ifdef __ARMEB__ + rev @x[0],@x[0] + rev @x[2],@x[2] + rev @x[4],@x[4] + rev @x[6],@x[6] + rev @x[8],@x[8] + rev @x[10],@x[10] + rev @x[12],@x[12] + rev @x[14],@x[14] +#endif + ld1.8 {$T0-$T3},[$inp],#64 + eor @x[0],@x[0],@x[1] + eor @x[2],@x[2],@x[3] + eor @x[4],@x[4],@x[5] + eor @x[6],@x[6],@x[7] + eor @x[8],@x[8],@x[9] + eor $A0,$A0,$T0 + eor @x[10],@x[10],@x[11] + eor $B0,$B0,$T1 + eor @x[12],@x[12],@x[13] + eor $C0,$C0,$T2 + eor @x[14],@x[14],@x[15] + eor $D0,$D0,$T3 + ld1.8 {$T0-$T3},[$inp],#64 + + stp @x[0],@x[2],[$out,#0] // store output + add @d[6],@d[6],#4 // increment counter + stp @x[4],@x[6],[$out,#16] + add @K[3],@K[3],$ONE // += 4 + stp @x[8],@x[10],[$out,#32] + add @K[4],@K[4],$ONE + stp @x[12],@x[14],[$out,#48] + add @K[5],@K[5],$ONE + add $out,$out,#64 + + st1.8 {$A0-$D0},[$out],#64 + ld1.8 {$A0-$D0},[$inp],#64 + + eor $A1,$A1,$T0 + eor $B1,$B1,$T1 + eor $C1,$C1,$T2 + eor $D1,$D1,$T3 + st1.8 {$A1-$D1},[$out],#64 + + eor $A2,$A2,$A0 + eor $B2,$B2,$B0 + eor $C2,$C2,$C0 + eor $D2,$D2,$D0 + st1.8 {$A2-$D2},[$out],#64 + + b.hi .Loop_outer_neon + + ldp x19,x20,[x29,#16] + add sp,sp,#64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#96 + AARCH64_VALIDATE_LINK_REGISTER + ret + +.Ltail_neon: + add $len,$len,#256 + cmp $len,#64 + b.lo .Less_than_64 + + add @x[0],@x[0],@x[1],lsl#32 // pack + add @x[2],@x[2],@x[3],lsl#32 + ldp @x[1],@x[3],[$inp,#0] // load input + add @x[4],@x[4],@x[5],lsl#32 + add @x[6],@x[6],@x[7],lsl#32 + ldp @x[5],@x[7],[$inp,#16] + add @x[8],@x[8],@x[9],lsl#32 + add @x[10],@x[10],@x[11],lsl#32 + ldp @x[9],@x[11],[$inp,#32] + add @x[12],@x[12],@x[13],lsl#32 + add @x[14],@x[14],@x[15],lsl#32 + ldp @x[13],@x[15],[$inp,#48] + add $inp,$inp,#64 +#ifdef __ARMEB__ + rev @x[0],@x[0] + rev @x[2],@x[2] + rev @x[4],@x[4] + rev @x[6],@x[6] + rev @x[8],@x[8] + rev @x[10],@x[10] + rev @x[12],@x[12] + rev @x[14],@x[14] +#endif + eor @x[0],@x[0],@x[1] + eor @x[2],@x[2],@x[3] + eor @x[4],@x[4],@x[5] + eor @x[6],@x[6],@x[7] + eor @x[8],@x[8],@x[9] + eor @x[10],@x[10],@x[11] + eor @x[12],@x[12],@x[13] + eor @x[14],@x[14],@x[15] + + stp @x[0],@x[2],[$out,#0] // store output + add @d[6],@d[6],#4 // increment counter + stp @x[4],@x[6],[$out,#16] + stp @x[8],@x[10],[$out,#32] + stp @x[12],@x[14],[$out,#48] + add $out,$out,#64 + b.eq .Ldone_neon + sub $len,$len,#64 + cmp $len,#64 + b.lo .Less_than_128 + + ld1.8 {$T0-$T3},[$inp],#64 + eor $A0,$A0,$T0 + eor $B0,$B0,$T1 + eor $C0,$C0,$T2 + eor $D0,$D0,$T3 + st1.8 {$A0-$D0},[$out],#64 + b.eq .Ldone_neon + sub $len,$len,#64 + cmp $len,#64 + b.lo .Less_than_192 + + ld1.8 {$T0-$T3},[$inp],#64 + eor $A1,$A1,$T0 + eor $B1,$B1,$T1 + eor $C1,$C1,$T2 + eor $D1,$D1,$T3 + st1.8 {$A1-$D1},[$out],#64 + b.eq .Ldone_neon + sub $len,$len,#64 + + st1.8 {$A2-$D2},[sp] + b .Last_neon + +.Less_than_128: + st1.8 {$A0-$D0},[sp] + b .Last_neon +.Less_than_192: + st1.8 {$A1-$D1},[sp] + b .Last_neon + +.align 4 +.Last_neon: + sub $out,$out,#1 + add $inp,$inp,$len + add $out,$out,$len + add $ctr,sp,$len + neg $len,$len + +.Loop_tail_neon: + ldrb w10,[$inp,$len] + ldrb w11,[$ctr,$len] + add $len,$len,#1 + eor w10,w10,w11 + strb w10,[$out,$len] + cbnz $len,.Loop_tail_neon + + stp xzr,xzr,[sp,#0] + stp xzr,xzr,[sp,#16] + stp xzr,xzr,[sp,#32] + stp xzr,xzr,[sp,#48] + +.Ldone_neon: + ldp x19,x20,[x29,#16] + add sp,sp,#64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#96 + AARCH64_VALIDATE_LINK_REGISTER + ret +.size ChaCha20_neon,.-ChaCha20_neon +___ +{ +my ($T0,$T1,$T2,$T3,$T4,$T5)=@K; +my ($A0,$B0,$C0,$D0,$A1,$B1,$C1,$D1,$A2,$B2,$C2,$D2, + $A3,$B3,$C3,$D3,$A4,$B4,$C4,$D4,$A5,$B5,$C5,$D5) = map("v$_.4s",(0..23)); + +$code.=<<___; +.type ChaCha20_512_neon,%function +.align 5 +ChaCha20_512_neon: + AARCH64_SIGN_LINK_REGISTER + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + + adrp @x[0],:pg_hi21:.Lsigma + add @x[0],@x[0],:lo12:.Lsigma + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + +.L512_or_more_neon: + sub sp,sp,#128+64 + + ldp @d[0],@d[1],[@x[0]] // load sigma + ld1 {@K[0]},[@x[0]],#16 + ldp @d[2],@d[3],[$key] // load key + ldp @d[4],@d[5],[$key,#16] + ld1 {@K[1],@K[2]},[$key] + ldp @d[6],@d[7],[$ctr] // load counter + ld1 {@K[3]},[$ctr] + ld1 {$ONE},[@x[0]] +#ifdef __ARMEB__ + rev64 @K[0],@K[0] + ror @d[2],@d[2],#32 + ror @d[3],@d[3],#32 + ror @d[4],@d[4],#32 + ror @d[5],@d[5],#32 + ror @d[6],@d[6],#32 + ror @d[7],@d[7],#32 +#endif + add @K[3],@K[3],$ONE // += 1 + stp @K[0],@K[1],[sp,#0] // off-load key block, invariant part + add @K[3],@K[3],$ONE // not typo + str @K[2],[sp,#32] + add @K[4],@K[3],$ONE + add @K[5],@K[4],$ONE + add @K[6],@K[5],$ONE + shl $ONE,$ONE,#2 // 1 -> 4 + + stp d8,d9,[sp,#128+0] // meet ABI requirements + stp d10,d11,[sp,#128+16] + stp d12,d13,[sp,#128+32] + stp d14,d15,[sp,#128+48] + + sub $len,$len,#512 // not typo + +.Loop_outer_512_neon: + mov $A0,@K[0] + mov $A1,@K[0] + mov $A2,@K[0] + mov $A3,@K[0] + mov $A4,@K[0] + mov $A5,@K[0] + mov $B0,@K[1] + mov.32 @x[0],@d[0] // unpack key block + mov $B1,@K[1] + lsr @x[1],@d[0],#32 + mov $B2,@K[1] + mov.32 @x[2],@d[1] + mov $B3,@K[1] + lsr @x[3],@d[1],#32 + mov $B4,@K[1] + mov.32 @x[4],@d[2] + mov $B5,@K[1] + lsr @x[5],@d[2],#32 + mov $D0,@K[3] + mov.32 @x[6],@d[3] + mov $D1,@K[4] + lsr @x[7],@d[3],#32 + mov $D2,@K[5] + mov.32 @x[8],@d[4] + mov $D3,@K[6] + lsr @x[9],@d[4],#32 + mov $C0,@K[2] + mov.32 @x[10],@d[5] + mov $C1,@K[2] + lsr @x[11],@d[5],#32 + add $D4,$D0,$ONE // +4 + mov.32 @x[12],@d[6] + add $D5,$D1,$ONE // +4 + lsr @x[13],@d[6],#32 + mov $C2,@K[2] + mov.32 @x[14],@d[7] + mov $C3,@K[2] + lsr @x[15],@d[7],#32 + mov $C4,@K[2] + stp @K[3],@K[4],[sp,#48] // off-load key block, variable part + mov $C5,@K[2] + str @K[5],[sp,#80] + + mov $ctr,#5 + subs $len,$len,#512 +.Loop_upper_neon: + sub $ctr,$ctr,#1 +___ + my @thread0=&NEONROUND($A0,$B0,$C0,$D0,$T0,0); + my @thread1=&NEONROUND($A1,$B1,$C1,$D1,$T1,0); + my @thread2=&NEONROUND($A2,$B2,$C2,$D2,$T2,0); + my @thread3=&NEONROUND($A3,$B3,$C3,$D3,$T3,0); + my @thread4=&NEONROUND($A4,$B4,$C4,$D4,$T4,0); + my @thread5=&NEONROUND($A5,$B5,$C5,$D5,$T5,0); + my @thread67=(&ROUND(0,4,8,12),&ROUND(0,5,10,15)); + my $diff = ($#thread0+1)*6 - $#thread67 - 1; + my $i = 0; + + foreach (@thread0) { + eval; eval(shift(@thread67)); + eval(shift(@thread1)); eval(shift(@thread67)); + eval(shift(@thread2)); eval(shift(@thread67)); + eval(shift(@thread3)); eval(shift(@thread67)); + eval(shift(@thread4)); eval(shift(@thread67)); + eval(shift(@thread5)); eval(shift(@thread67)); + } + + @thread0=&NEONROUND($A0,$B0,$C0,$D0,$T0,1); + @thread1=&NEONROUND($A1,$B1,$C1,$D1,$T1,1); + @thread2=&NEONROUND($A2,$B2,$C2,$D2,$T2,1); + @thread3=&NEONROUND($A3,$B3,$C3,$D3,$T3,1); + @thread4=&NEONROUND($A4,$B4,$C4,$D4,$T4,1); + @thread5=&NEONROUND($A5,$B5,$C5,$D5,$T5,1); + @thread67=(&ROUND(0,4,8,12),&ROUND(0,5,10,15)); + + foreach (@thread0) { + eval; eval(shift(@thread67)); + eval(shift(@thread1)); eval(shift(@thread67)); + eval(shift(@thread2)); eval(shift(@thread67)); + eval(shift(@thread3)); eval(shift(@thread67)); + eval(shift(@thread4)); eval(shift(@thread67)); + eval(shift(@thread5)); eval(shift(@thread67)); + } +$code.=<<___; + cbnz $ctr,.Loop_upper_neon + + add.32 @x[0],@x[0],@d[0] // accumulate key block + add @x[1],@x[1],@d[0],lsr#32 + add.32 @x[2],@x[2],@d[1] + add @x[3],@x[3],@d[1],lsr#32 + add.32 @x[4],@x[4],@d[2] + add @x[5],@x[5],@d[2],lsr#32 + add.32 @x[6],@x[6],@d[3] + add @x[7],@x[7],@d[3],lsr#32 + add.32 @x[8],@x[8],@d[4] + add @x[9],@x[9],@d[4],lsr#32 + add.32 @x[10],@x[10],@d[5] + add @x[11],@x[11],@d[5],lsr#32 + add.32 @x[12],@x[12],@d[6] + add @x[13],@x[13],@d[6],lsr#32 + add.32 @x[14],@x[14],@d[7] + add @x[15],@x[15],@d[7],lsr#32 + + add @x[0],@x[0],@x[1],lsl#32 // pack + add @x[2],@x[2],@x[3],lsl#32 + ldp @x[1],@x[3],[$inp,#0] // load input + add @x[4],@x[4],@x[5],lsl#32 + add @x[6],@x[6],@x[7],lsl#32 + ldp @x[5],@x[7],[$inp,#16] + add @x[8],@x[8],@x[9],lsl#32 + add @x[10],@x[10],@x[11],lsl#32 + ldp @x[9],@x[11],[$inp,#32] + add @x[12],@x[12],@x[13],lsl#32 + add @x[14],@x[14],@x[15],lsl#32 + ldp @x[13],@x[15],[$inp,#48] + add $inp,$inp,#64 +#ifdef __ARMEB__ + rev @x[0],@x[0] + rev @x[2],@x[2] + rev @x[4],@x[4] + rev @x[6],@x[6] + rev @x[8],@x[8] + rev @x[10],@x[10] + rev @x[12],@x[12] + rev @x[14],@x[14] +#endif + eor @x[0],@x[0],@x[1] + eor @x[2],@x[2],@x[3] + eor @x[4],@x[4],@x[5] + eor @x[6],@x[6],@x[7] + eor @x[8],@x[8],@x[9] + eor @x[10],@x[10],@x[11] + eor @x[12],@x[12],@x[13] + eor @x[14],@x[14],@x[15] + + stp @x[0],@x[2],[$out,#0] // store output + add @d[6],@d[6],#1 // increment counter + mov.32 @x[0],@d[0] // unpack key block + lsr @x[1],@d[0],#32 + stp @x[4],@x[6],[$out,#16] + mov.32 @x[2],@d[1] + lsr @x[3],@d[1],#32 + stp @x[8],@x[10],[$out,#32] + mov.32 @x[4],@d[2] + lsr @x[5],@d[2],#32 + stp @x[12],@x[14],[$out,#48] + add $out,$out,#64 + mov.32 @x[6],@d[3] + lsr @x[7],@d[3],#32 + mov.32 @x[8],@d[4] + lsr @x[9],@d[4],#32 + mov.32 @x[10],@d[5] + lsr @x[11],@d[5],#32 + mov.32 @x[12],@d[6] + lsr @x[13],@d[6],#32 + mov.32 @x[14],@d[7] + lsr @x[15],@d[7],#32 + + mov $ctr,#5 +.Loop_lower_neon: + sub $ctr,$ctr,#1 +___ + @thread0=&NEONROUND($A0,$B0,$C0,$D0,$T0,0); + @thread1=&NEONROUND($A1,$B1,$C1,$D1,$T1,0); + @thread2=&NEONROUND($A2,$B2,$C2,$D2,$T2,0); + @thread3=&NEONROUND($A3,$B3,$C3,$D3,$T3,0); + @thread4=&NEONROUND($A4,$B4,$C4,$D4,$T4,0); + @thread5=&NEONROUND($A5,$B5,$C5,$D5,$T5,0); + @thread67=(&ROUND(0,4,8,12),&ROUND(0,5,10,15)); + + foreach (@thread0) { + eval; eval(shift(@thread67)); + eval(shift(@thread1)); eval(shift(@thread67)); + eval(shift(@thread2)); eval(shift(@thread67)); + eval(shift(@thread3)); eval(shift(@thread67)); + eval(shift(@thread4)); eval(shift(@thread67)); + eval(shift(@thread5)); eval(shift(@thread67)); + } + + @thread0=&NEONROUND($A0,$B0,$C0,$D0,$T0,1); + @thread1=&NEONROUND($A1,$B1,$C1,$D1,$T1,1); + @thread2=&NEONROUND($A2,$B2,$C2,$D2,$T2,1); + @thread3=&NEONROUND($A3,$B3,$C3,$D3,$T3,1); + @thread4=&NEONROUND($A4,$B4,$C4,$D4,$T4,1); + @thread5=&NEONROUND($A5,$B5,$C5,$D5,$T5,1); + @thread67=(&ROUND(0,4,8,12),&ROUND(0,5,10,15)); + + foreach (@thread0) { + eval; eval(shift(@thread67)); + eval(shift(@thread1)); eval(shift(@thread67)); + eval(shift(@thread2)); eval(shift(@thread67)); + eval(shift(@thread3)); eval(shift(@thread67)); + eval(shift(@thread4)); eval(shift(@thread67)); + eval(shift(@thread5)); eval(shift(@thread67)); + } +$code.=<<___; + cbnz $ctr,.Loop_lower_neon + + add.32 @x[0],@x[0],@d[0] // accumulate key block + ldp @K[0],@K[1],[sp,#0] + add @x[1],@x[1],@d[0],lsr#32 + ldp @K[2],@K[3],[sp,#32] + add.32 @x[2],@x[2],@d[1] + ldp @K[4],@K[5],[sp,#64] + add @x[3],@x[3],@d[1],lsr#32 + add $A0,$A0,@K[0] + add.32 @x[4],@x[4],@d[2] + add $A1,$A1,@K[0] + add @x[5],@x[5],@d[2],lsr#32 + add $A2,$A2,@K[0] + add.32 @x[6],@x[6],@d[3] + add $A3,$A3,@K[0] + add @x[7],@x[7],@d[3],lsr#32 + add $A4,$A4,@K[0] + add.32 @x[8],@x[8],@d[4] + add $A5,$A5,@K[0] + add @x[9],@x[9],@d[4],lsr#32 + add $C0,$C0,@K[2] + add.32 @x[10],@x[10],@d[5] + add $C1,$C1,@K[2] + add @x[11],@x[11],@d[5],lsr#32 + add $C2,$C2,@K[2] + add.32 @x[12],@x[12],@d[6] + add $C3,$C3,@K[2] + add @x[13],@x[13],@d[6],lsr#32 + add $C4,$C4,@K[2] + add.32 @x[14],@x[14],@d[7] + add $C5,$C5,@K[2] + add @x[15],@x[15],@d[7],lsr#32 + add $D4,$D4,$ONE // +4 + add @x[0],@x[0],@x[1],lsl#32 // pack + add $D5,$D5,$ONE // +4 + add @x[2],@x[2],@x[3],lsl#32 + add $D0,$D0,@K[3] + ldp @x[1],@x[3],[$inp,#0] // load input + add $D1,$D1,@K[4] + add @x[4],@x[4],@x[5],lsl#32 + add $D2,$D2,@K[5] + add @x[6],@x[6],@x[7],lsl#32 + add $D3,$D3,@K[6] + ldp @x[5],@x[7],[$inp,#16] + add $D4,$D4,@K[3] + add @x[8],@x[8],@x[9],lsl#32 + add $D5,$D5,@K[4] + add @x[10],@x[10],@x[11],lsl#32 + add $B0,$B0,@K[1] + ldp @x[9],@x[11],[$inp,#32] + add $B1,$B1,@K[1] + add @x[12],@x[12],@x[13],lsl#32 + add $B2,$B2,@K[1] + add @x[14],@x[14],@x[15],lsl#32 + add $B3,$B3,@K[1] + ldp @x[13],@x[15],[$inp,#48] + add $B4,$B4,@K[1] + add $inp,$inp,#64 + add $B5,$B5,@K[1] + +#ifdef __ARMEB__ + rev @x[0],@x[0] + rev @x[2],@x[2] + rev @x[4],@x[4] + rev @x[6],@x[6] + rev @x[8],@x[8] + rev @x[10],@x[10] + rev @x[12],@x[12] + rev @x[14],@x[14] +#endif + ld1.8 {$T0-$T3},[$inp],#64 + eor @x[0],@x[0],@x[1] + eor @x[2],@x[2],@x[3] + eor @x[4],@x[4],@x[5] + eor @x[6],@x[6],@x[7] + eor @x[8],@x[8],@x[9] + eor $A0,$A0,$T0 + eor @x[10],@x[10],@x[11] + eor $B0,$B0,$T1 + eor @x[12],@x[12],@x[13] + eor $C0,$C0,$T2 + eor @x[14],@x[14],@x[15] + eor $D0,$D0,$T3 + ld1.8 {$T0-$T3},[$inp],#64 + + stp @x[0],@x[2],[$out,#0] // store output + add @d[6],@d[6],#7 // increment counter + stp @x[4],@x[6],[$out,#16] + stp @x[8],@x[10],[$out,#32] + stp @x[12],@x[14],[$out,#48] + add $out,$out,#64 + st1.8 {$A0-$D0},[$out],#64 + + ld1.8 {$A0-$D0},[$inp],#64 + eor $A1,$A1,$T0 + eor $B1,$B1,$T1 + eor $C1,$C1,$T2 + eor $D1,$D1,$T3 + st1.8 {$A1-$D1},[$out],#64 + + ld1.8 {$A1-$D1},[$inp],#64 + eor $A2,$A2,$A0 + ldp @K[0],@K[1],[sp,#0] + eor $B2,$B2,$B0 + ldp @K[2],@K[3],[sp,#32] + eor $C2,$C2,$C0 + eor $D2,$D2,$D0 + st1.8 {$A2-$D2},[$out],#64 + + ld1.8 {$A2-$D2},[$inp],#64 + eor $A3,$A3,$A1 + eor $B3,$B3,$B1 + eor $C3,$C3,$C1 + eor $D3,$D3,$D1 + st1.8 {$A3-$D3},[$out],#64 + + ld1.8 {$A3-$D3},[$inp],#64 + eor $A4,$A4,$A2 + eor $B4,$B4,$B2 + eor $C4,$C4,$C2 + eor $D4,$D4,$D2 + st1.8 {$A4-$D4},[$out],#64 + + shl $A0,$ONE,#1 // 4 -> 8 + eor $A5,$A5,$A3 + eor $B5,$B5,$B3 + eor $C5,$C5,$C3 + eor $D5,$D5,$D3 + st1.8 {$A5-$D5},[$out],#64 + + add @K[3],@K[3],$A0 // += 8 + add @K[4],@K[4],$A0 + add @K[5],@K[5],$A0 + add @K[6],@K[6],$A0 + + b.hs .Loop_outer_512_neon + + adds $len,$len,#512 + ushr $A0,$ONE,#2 // 4 -> 1 + + ldp d8,d9,[sp,#128+0] // meet ABI requirements + ldp d10,d11,[sp,#128+16] + ldp d12,d13,[sp,#128+32] + ldp d14,d15,[sp,#128+48] + + stp @K[0],$ONE,[sp,#0] // wipe off-load area + stp @K[0],$ONE,[sp,#32] + stp @K[0],$ONE,[sp,#64] + + b.eq .Ldone_512_neon + + cmp $len,#192 + sub @K[3],@K[3],$A0 // -= 1 + sub @K[4],@K[4],$A0 + sub @K[5],@K[5],$A0 + add sp,sp,#128 + b.hs .Loop_outer_neon + + eor @K[1],@K[1],@K[1] + eor @K[2],@K[2],@K[2] + eor @K[3],@K[3],@K[3] + eor @K[4],@K[4],@K[4] + eor @K[5],@K[5],@K[5] + eor @K[6],@K[6],@K[6] + b .Loop_outer + +.Ldone_512_neon: + ldp x19,x20,[x29,#16] + add sp,sp,#128+64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#96 + AARCH64_VALIDATE_LINK_REGISTER + ret +.size ChaCha20_512_neon,.-ChaCha20_512_neon +___ +} +}}} + +foreach (split("\n",$code)) { + s/\`([^\`]*)\`/eval $1/geo; + + (s/\b([a-z]+)\.32\b/$1/ and (s/x([0-9]+)/w$1/g or 1)) or + (m/\b(eor|ext|mov)\b/ and (s/\.4s/\.16b/g or 1)) or + (s/\b((?:ld|st)1)\.8\b/$1/ and (s/\.4s/\.16b/g or 1)) or + (m/\b(ld|st)[rp]\b/ and (s/v([0-9]+)\.4s/q$1/g or 1)) or + (s/\brev32\.16\b/rev32/ and (s/\.4s/\.8h/g or 1)); + + #s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/geo; + + print $_,"\n"; +} +close STDOUT or die "error closing STDOUT"; # flush diff --git a/vendor/ring/crypto/chacha/asm/chacha-x86.pl b/vendor/ring/crypto/chacha/asm/chacha-x86.pl new file mode 100755 index 00000000..599a38e6 --- /dev/null +++ b/vendor/ring/crypto/chacha/asm/chacha-x86.pl @@ -0,0 +1,772 @@ +#! /usr/bin/env perl +# Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# January 2015 +# +# ChaCha20 for x86. +# +# Performance in cycles per byte out of large buffer. +# +# 1xIALU/gcc 4xSSSE3 +# Pentium 17.5/+80% +# PIII 14.2/+60% +# P4 18.6/+84% +# Core2 9.56/+89% 4.83 +# Westmere 9.50/+45% 3.35 +# Sandy Bridge 10.5/+47% 3.20 +# Haswell 8.15/+50% 2.83 +# Skylake 7.53/+22% 2.75 +# Silvermont 17.4/+36% 8.35 +# Goldmont 13.4/+40% 4.36 +# Sledgehammer 10.2/+54% +# Bulldozer 13.4/+50% 4.38(*) +# +# (*) Bulldozer actually executes 4xXOP code path that delivers 3.55; +# +# Modified from upstream OpenSSL to remove the XOP code. + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +push(@INC,"${dir}","${dir}../../perlasm"); +require "x86asm.pl"; + +$output=pop; +open STDOUT,">$output"; + +&asm_init($ARGV[0],$ARGV[$#ARGV] eq "386"); + +$xmm=$ymm=1; +$gasver=999; # enable everything + +$a="eax"; +($b,$b_)=("ebx","ebp"); +($c,$c_)=("ecx","esi"); +($d,$d_)=("edx","edi"); + +sub QUARTERROUND { +my ($ai,$bi,$ci,$di,$i)=@_; +my ($an,$bn,$cn,$dn)=map(($_&~3)+(($_+1)&3),($ai,$bi,$ci,$di)); # next +my ($ap,$bp,$cp,$dp)=map(($_&~3)+(($_-1)&3),($ai,$bi,$ci,$di)); # previous + + # a b c d + # + # 0 4 8 12 < even round + # 1 5 9 13 + # 2 6 10 14 + # 3 7 11 15 + # 0 5 10 15 < odd round + # 1 6 11 12 + # 2 7 8 13 + # 3 4 9 14 + + if ($i==0) { + my $j=4; + ($ap,$bp,$cp,$dp)=map(($_&~3)+(($_-$j--)&3),($ap,$bp,$cp,$dp)); + } elsif ($i==3) { + my $j=0; + ($an,$bn,$cn,$dn)=map(($_&~3)+(($_+$j++)&3),($an,$bn,$cn,$dn)); + } elsif ($i==4) { + my $j=4; + ($ap,$bp,$cp,$dp)=map(($_&~3)+(($_+$j--)&3),($ap,$bp,$cp,$dp)); + } elsif ($i==7) { + my $j=0; + ($an,$bn,$cn,$dn)=map(($_&~3)+(($_-$j++)&3),($an,$bn,$cn,$dn)); + } + + #&add ($a,$b); # see elsewhere + &xor ($d,$a); + &mov (&DWP(4*$cp,"esp"),$c_) if ($ai>0 && $ai<3); + &rol ($d,16); + &mov (&DWP(4*$bp,"esp"),$b_) if ($i!=0); + &add ($c,$d); + &mov ($c_,&DWP(4*$cn,"esp")) if ($ai>0 && $ai<3); + &xor ($b,$c); + &mov ($d_,&DWP(4*$dn,"esp")) if ($di!=$dn); + &rol ($b,12); + &mov ($b_,&DWP(4*$bn,"esp")) if ($i<7); + &mov ($b_,&DWP(128,"esp")) if ($i==7); # loop counter + &add ($a,$b); + &xor ($d,$a); + &mov (&DWP(4*$ai,"esp"),$a); + &rol ($d,8); + &mov ($a,&DWP(4*$an,"esp")); + &add ($c,$d); + &mov (&DWP(4*$di,"esp"),$d) if ($di!=$dn); + &mov ($d_,$d) if ($di==$dn); + &xor ($b,$c); + &add ($a,$b_) if ($i<7); # elsewhere + &rol ($b,7); + + ($b,$b_)=($b_,$b); + ($c,$c_)=($c_,$c); + ($d,$d_)=($d_,$d); +} + +&static_label("ssse3_shortcut"); +&static_label("ssse3_data"); +&static_label("pic_point"); + +&function_begin("GFp_ChaCha20_ctr32"); + &xor ("eax","eax"); + &cmp ("eax",&wparam(2)); # len==0? + &je (&label("no_data")); +if ($xmm) { + &call (&label("pic_point")); +&set_label("pic_point"); + &blindpop("eax"); + &picmeup("ebp","GFp_ia32cap_P","eax",&label("pic_point")); + &test (&DWP(0,"ebp"),1<<24); # test FXSR bit + &jz (&label("x86")); + &test (&DWP(4,"ebp"),1<<9); # test SSSE3 bit + &jz (&label("x86")); + &jmp (&label("ssse3_shortcut")); +&set_label("x86"); +} + &mov ("esi",&wparam(3)); # key + &mov ("edi",&wparam(4)); # counter and nonce + + &stack_push(33); + + &mov ("eax",&DWP(4*0,"esi")); # copy key + &mov ("ebx",&DWP(4*1,"esi")); + &mov ("ecx",&DWP(4*2,"esi")); + &mov ("edx",&DWP(4*3,"esi")); + &mov (&DWP(64+4*4,"esp"),"eax"); + &mov (&DWP(64+4*5,"esp"),"ebx"); + &mov (&DWP(64+4*6,"esp"),"ecx"); + &mov (&DWP(64+4*7,"esp"),"edx"); + &mov ("eax",&DWP(4*4,"esi")); + &mov ("ebx",&DWP(4*5,"esi")); + &mov ("ecx",&DWP(4*6,"esi")); + &mov ("edx",&DWP(4*7,"esi")); + &mov (&DWP(64+4*8,"esp"),"eax"); + &mov (&DWP(64+4*9,"esp"),"ebx"); + &mov (&DWP(64+4*10,"esp"),"ecx"); + &mov (&DWP(64+4*11,"esp"),"edx"); + &mov ("eax",&DWP(4*0,"edi")); # copy counter and nonce + &mov ("ebx",&DWP(4*1,"edi")); + &mov ("ecx",&DWP(4*2,"edi")); + &mov ("edx",&DWP(4*3,"edi")); + &sub ("eax",1); + &mov (&DWP(64+4*12,"esp"),"eax"); + &mov (&DWP(64+4*13,"esp"),"ebx"); + &mov (&DWP(64+4*14,"esp"),"ecx"); + &mov (&DWP(64+4*15,"esp"),"edx"); + &jmp (&label("entry")); + +&set_label("outer_loop",16); + &mov (&wparam(1),$b); # save input + &mov (&wparam(0),$a); # save output + &mov (&wparam(2),$c); # save len +&set_label("entry"); + &mov ($a,0x61707865); + &mov (&DWP(4*1,"esp"),0x3320646e); + &mov (&DWP(4*2,"esp"),0x79622d32); + &mov (&DWP(4*3,"esp"),0x6b206574); + + &mov ($b, &DWP(64+4*5,"esp")); # copy key material + &mov ($b_,&DWP(64+4*6,"esp")); + &mov ($c, &DWP(64+4*10,"esp")); + &mov ($c_,&DWP(64+4*11,"esp")); + &mov ($d, &DWP(64+4*13,"esp")); + &mov ($d_,&DWP(64+4*14,"esp")); + &mov (&DWP(4*5,"esp"),$b); + &mov (&DWP(4*6,"esp"),$b_); + &mov (&DWP(4*10,"esp"),$c); + &mov (&DWP(4*11,"esp"),$c_); + &mov (&DWP(4*13,"esp"),$d); + &mov (&DWP(4*14,"esp"),$d_); + + &mov ($b, &DWP(64+4*7,"esp")); + &mov ($d_,&DWP(64+4*15,"esp")); + &mov ($d, &DWP(64+4*12,"esp")); + &mov ($b_,&DWP(64+4*4,"esp")); + &mov ($c, &DWP(64+4*8,"esp")); + &mov ($c_,&DWP(64+4*9,"esp")); + &add ($d,1); # counter value + &mov (&DWP(4*7,"esp"),$b); + &mov (&DWP(4*15,"esp"),$d_); + &mov (&DWP(64+4*12,"esp"),$d); # save counter value + + &mov ($b,10); # loop counter + &jmp (&label("loop")); + +&set_label("loop",16); + &add ($a,$b_); # elsewhere + &mov (&DWP(128,"esp"),$b); # save loop counter + &mov ($b,$b_); + &QUARTERROUND(0, 4, 8, 12, 0); + &QUARTERROUND(1, 5, 9, 13, 1); + &QUARTERROUND(2, 6,10, 14, 2); + &QUARTERROUND(3, 7,11, 15, 3); + &QUARTERROUND(0, 5,10, 15, 4); + &QUARTERROUND(1, 6,11, 12, 5); + &QUARTERROUND(2, 7, 8, 13, 6); + &QUARTERROUND(3, 4, 9, 14, 7); + &dec ($b); + &jnz (&label("loop")); + + &mov ($b,&wparam(2)); # load len + + &add ($a,0x61707865); # accumulate key material + &add ($b_,&DWP(64+4*4,"esp")); + &add ($c, &DWP(64+4*8,"esp")); + &add ($c_,&DWP(64+4*9,"esp")); + + &cmp ($b,64); + &jb (&label("tail")); + + &mov ($b,&wparam(1)); # load input pointer + &add ($d, &DWP(64+4*12,"esp")); + &add ($d_,&DWP(64+4*14,"esp")); + + &xor ($a, &DWP(4*0,$b)); # xor with input + &xor ($b_,&DWP(4*4,$b)); + &mov (&DWP(4*0,"esp"),$a); + &mov ($a,&wparam(0)); # load output pointer + &xor ($c, &DWP(4*8,$b)); + &xor ($c_,&DWP(4*9,$b)); + &xor ($d, &DWP(4*12,$b)); + &xor ($d_,&DWP(4*14,$b)); + &mov (&DWP(4*4,$a),$b_); # write output + &mov (&DWP(4*8,$a),$c); + &mov (&DWP(4*9,$a),$c_); + &mov (&DWP(4*12,$a),$d); + &mov (&DWP(4*14,$a),$d_); + + &mov ($b_,&DWP(4*1,"esp")); + &mov ($c, &DWP(4*2,"esp")); + &mov ($c_,&DWP(4*3,"esp")); + &mov ($d, &DWP(4*5,"esp")); + &mov ($d_,&DWP(4*6,"esp")); + &add ($b_,0x3320646e); # accumulate key material + &add ($c, 0x79622d32); + &add ($c_,0x6b206574); + &add ($d, &DWP(64+4*5,"esp")); + &add ($d_,&DWP(64+4*6,"esp")); + &xor ($b_,&DWP(4*1,$b)); + &xor ($c, &DWP(4*2,$b)); + &xor ($c_,&DWP(4*3,$b)); + &xor ($d, &DWP(4*5,$b)); + &xor ($d_,&DWP(4*6,$b)); + &mov (&DWP(4*1,$a),$b_); + &mov (&DWP(4*2,$a),$c); + &mov (&DWP(4*3,$a),$c_); + &mov (&DWP(4*5,$a),$d); + &mov (&DWP(4*6,$a),$d_); + + &mov ($b_,&DWP(4*7,"esp")); + &mov ($c, &DWP(4*10,"esp")); + &mov ($c_,&DWP(4*11,"esp")); + &mov ($d, &DWP(4*13,"esp")); + &mov ($d_,&DWP(4*15,"esp")); + &add ($b_,&DWP(64+4*7,"esp")); + &add ($c, &DWP(64+4*10,"esp")); + &add ($c_,&DWP(64+4*11,"esp")); + &add ($d, &DWP(64+4*13,"esp")); + &add ($d_,&DWP(64+4*15,"esp")); + &xor ($b_,&DWP(4*7,$b)); + &xor ($c, &DWP(4*10,$b)); + &xor ($c_,&DWP(4*11,$b)); + &xor ($d, &DWP(4*13,$b)); + &xor ($d_,&DWP(4*15,$b)); + &lea ($b,&DWP(4*16,$b)); + &mov (&DWP(4*7,$a),$b_); + &mov ($b_,&DWP(4*0,"esp")); + &mov (&DWP(4*10,$a),$c); + &mov ($c,&wparam(2)); # len + &mov (&DWP(4*11,$a),$c_); + &mov (&DWP(4*13,$a),$d); + &mov (&DWP(4*15,$a),$d_); + &mov (&DWP(4*0,$a),$b_); + &lea ($a,&DWP(4*16,$a)); + &sub ($c,64); + &jnz (&label("outer_loop")); + + &jmp (&label("done")); + +&set_label("tail"); + &add ($d, &DWP(64+4*12,"esp")); + &add ($d_,&DWP(64+4*14,"esp")); + &mov (&DWP(4*0,"esp"),$a); + &mov (&DWP(4*4,"esp"),$b_); + &mov (&DWP(4*8,"esp"),$c); + &mov (&DWP(4*9,"esp"),$c_); + &mov (&DWP(4*12,"esp"),$d); + &mov (&DWP(4*14,"esp"),$d_); + + &mov ($b_,&DWP(4*1,"esp")); + &mov ($c, &DWP(4*2,"esp")); + &mov ($c_,&DWP(4*3,"esp")); + &mov ($d, &DWP(4*5,"esp")); + &mov ($d_,&DWP(4*6,"esp")); + &add ($b_,0x3320646e); # accumulate key material + &add ($c, 0x79622d32); + &add ($c_,0x6b206574); + &add ($d, &DWP(64+4*5,"esp")); + &add ($d_,&DWP(64+4*6,"esp")); + &mov (&DWP(4*1,"esp"),$b_); + &mov (&DWP(4*2,"esp"),$c); + &mov (&DWP(4*3,"esp"),$c_); + &mov (&DWP(4*5,"esp"),$d); + &mov (&DWP(4*6,"esp"),$d_); + + &mov ($b_,&DWP(4*7,"esp")); + &mov ($c, &DWP(4*10,"esp")); + &mov ($c_,&DWP(4*11,"esp")); + &mov ($d, &DWP(4*13,"esp")); + &mov ($d_,&DWP(4*15,"esp")); + &add ($b_,&DWP(64+4*7,"esp")); + &add ($c, &DWP(64+4*10,"esp")); + &add ($c_,&DWP(64+4*11,"esp")); + &add ($d, &DWP(64+4*13,"esp")); + &add ($d_,&DWP(64+4*15,"esp")); + &mov (&DWP(4*7,"esp"),$b_); + &mov ($b_,&wparam(1)); # load input + &mov (&DWP(4*10,"esp"),$c); + &mov ($c,&wparam(0)); # load output + &mov (&DWP(4*11,"esp"),$c_); + &xor ($c_,$c_); + &mov (&DWP(4*13,"esp"),$d); + &mov (&DWP(4*15,"esp"),$d_); + + &xor ("eax","eax"); + &xor ("edx","edx"); +&set_label("tail_loop"); + &movb ("al",&BP(0,$c_,$b_)); + &movb ("dl",&BP(0,"esp",$c_)); + &lea ($c_,&DWP(1,$c_)); + &xor ("al","dl"); + &mov (&BP(-1,$c,$c_),"al"); + &dec ($b); + &jnz (&label("tail_loop")); + +&set_label("done"); + &stack_pop(33); +&set_label("no_data"); +&function_end("GFp_ChaCha20_ctr32"); + +if ($xmm) { +my ($xa,$xa_,$xb,$xb_,$xc,$xc_,$xd,$xd_)=map("xmm$_",(0..7)); +my ($out,$inp,$len)=("edi","esi","ecx"); + +sub QUARTERROUND_SSSE3 { +my ($ai,$bi,$ci,$di,$i)=@_; +my ($an,$bn,$cn,$dn)=map(($_&~3)+(($_+1)&3),($ai,$bi,$ci,$di)); # next +my ($ap,$bp,$cp,$dp)=map(($_&~3)+(($_-1)&3),($ai,$bi,$ci,$di)); # previous + + # a b c d + # + # 0 4 8 12 < even round + # 1 5 9 13 + # 2 6 10 14 + # 3 7 11 15 + # 0 5 10 15 < odd round + # 1 6 11 12 + # 2 7 8 13 + # 3 4 9 14 + + if ($i==0) { + my $j=4; + ($ap,$bp,$cp,$dp)=map(($_&~3)+(($_-$j--)&3),($ap,$bp,$cp,$dp)); + } elsif ($i==3) { + my $j=0; + ($an,$bn,$cn,$dn)=map(($_&~3)+(($_+$j++)&3),($an,$bn,$cn,$dn)); + } elsif ($i==4) { + my $j=4; + ($ap,$bp,$cp,$dp)=map(($_&~3)+(($_+$j--)&3),($ap,$bp,$cp,$dp)); + } elsif ($i==7) { + my $j=0; + ($an,$bn,$cn,$dn)=map(($_&~3)+(($_-$j++)&3),($an,$bn,$cn,$dn)); + } + + #&paddd ($xa,$xb); # see elsewhere + #&pxor ($xd,$xa); # see elsewhere + &movdqa(&QWP(16*$cp-128,"ebx"),$xc_) if ($ai>0 && $ai<3); + &pshufb ($xd,&QWP(0,"eax")); # rot16 + &movdqa(&QWP(16*$bp-128,"ebx"),$xb_) if ($i!=0); + &paddd ($xc,$xd); + &movdqa($xc_,&QWP(16*$cn-128,"ebx")) if ($ai>0 && $ai<3); + &pxor ($xb,$xc); + &movdqa($xb_,&QWP(16*$bn-128,"ebx")) if ($i<7); + &movdqa ($xa_,$xb); # borrow as temporary + &pslld ($xb,12); + &psrld ($xa_,20); + &por ($xb,$xa_); + &movdqa($xa_,&QWP(16*$an-128,"ebx")); + &paddd ($xa,$xb); + &movdqa($xd_,&QWP(16*$dn-128,"ebx")) if ($di!=$dn); + &pxor ($xd,$xa); + &movdqa (&QWP(16*$ai-128,"ebx"),$xa); + &pshufb ($xd,&QWP(16,"eax")); # rot8 + &paddd ($xc,$xd); + &movdqa (&QWP(16*$di-128,"ebx"),$xd) if ($di!=$dn); + &movdqa ($xd_,$xd) if ($di==$dn); + &pxor ($xb,$xc); + &paddd ($xa_,$xb_) if ($i<7); # elsewhere + &movdqa ($xa,$xb); # borrow as temporary + &pslld ($xb,7); + &psrld ($xa,25); + &pxor ($xd_,$xa_) if ($i<7); # elsewhere + &por ($xb,$xa); + + ($xa,$xa_)=($xa_,$xa); + ($xb,$xb_)=($xb_,$xb); + ($xc,$xc_)=($xc_,$xc); + ($xd,$xd_)=($xd_,$xd); +} + +&function_begin("_ChaCha20_ssse3"); +&set_label("ssse3_shortcut"); + &mov ($out,&wparam(0)); + &mov ($inp,&wparam(1)); + &mov ($len,&wparam(2)); + &mov ("edx",&wparam(3)); # key + &mov ("ebx",&wparam(4)); # counter and nonce + + &mov ("ebp","esp"); + &stack_push (131); + &and ("esp",-64); + &mov (&DWP(512,"esp"),"ebp"); + + &lea ("eax",&DWP(&label("ssse3_data")."-". + &label("pic_point"),"eax")); + &movdqu ("xmm3",&QWP(0,"ebx")); # counter and nonce + +if (defined($gasver) && $gasver>=2.17) { # even though we encode + # pshufb manually, we + # handle only register + # operands, while this + # segment uses memory + # operand... + &cmp ($len,64*4); + &jb (&label("1x")); + + &mov (&DWP(512+4,"esp"),"edx"); # offload pointers + &mov (&DWP(512+8,"esp"),"ebx"); + &sub ($len,64*4); # bias len + &lea ("ebp",&DWP(256+128,"esp")); # size optimization + + &movdqu ("xmm7",&QWP(0,"edx")); # key + &pshufd ("xmm0","xmm3",0x00); + &pshufd ("xmm1","xmm3",0x55); + &pshufd ("xmm2","xmm3",0xaa); + &pshufd ("xmm3","xmm3",0xff); + &paddd ("xmm0",&QWP(16*3,"eax")); # fix counters + &pshufd ("xmm4","xmm7",0x00); + &pshufd ("xmm5","xmm7",0x55); + &psubd ("xmm0",&QWP(16*4,"eax")); + &pshufd ("xmm6","xmm7",0xaa); + &pshufd ("xmm7","xmm7",0xff); + &movdqa (&QWP(16*12-128,"ebp"),"xmm0"); + &movdqa (&QWP(16*13-128,"ebp"),"xmm1"); + &movdqa (&QWP(16*14-128,"ebp"),"xmm2"); + &movdqa (&QWP(16*15-128,"ebp"),"xmm3"); + &movdqu ("xmm3",&QWP(16,"edx")); # key + &movdqa (&QWP(16*4-128,"ebp"),"xmm4"); + &movdqa (&QWP(16*5-128,"ebp"),"xmm5"); + &movdqa (&QWP(16*6-128,"ebp"),"xmm6"); + &movdqa (&QWP(16*7-128,"ebp"),"xmm7"); + &movdqa ("xmm7",&QWP(16*2,"eax")); # sigma + &lea ("ebx",&DWP(128,"esp")); # size optimization + + &pshufd ("xmm0","xmm3",0x00); + &pshufd ("xmm1","xmm3",0x55); + &pshufd ("xmm2","xmm3",0xaa); + &pshufd ("xmm3","xmm3",0xff); + &pshufd ("xmm4","xmm7",0x00); + &pshufd ("xmm5","xmm7",0x55); + &pshufd ("xmm6","xmm7",0xaa); + &pshufd ("xmm7","xmm7",0xff); + &movdqa (&QWP(16*8-128,"ebp"),"xmm0"); + &movdqa (&QWP(16*9-128,"ebp"),"xmm1"); + &movdqa (&QWP(16*10-128,"ebp"),"xmm2"); + &movdqa (&QWP(16*11-128,"ebp"),"xmm3"); + &movdqa (&QWP(16*0-128,"ebp"),"xmm4"); + &movdqa (&QWP(16*1-128,"ebp"),"xmm5"); + &movdqa (&QWP(16*2-128,"ebp"),"xmm6"); + &movdqa (&QWP(16*3-128,"ebp"),"xmm7"); + + &lea ($inp,&DWP(128,$inp)); # size optimization + &lea ($out,&DWP(128,$out)); # size optimization + &jmp (&label("outer_loop")); + +&set_label("outer_loop",16); + #&movdqa ("xmm0",&QWP(16*0-128,"ebp")); # copy key material + &movdqa ("xmm1",&QWP(16*1-128,"ebp")); + &movdqa ("xmm2",&QWP(16*2-128,"ebp")); + &movdqa ("xmm3",&QWP(16*3-128,"ebp")); + #&movdqa ("xmm4",&QWP(16*4-128,"ebp")); + &movdqa ("xmm5",&QWP(16*5-128,"ebp")); + &movdqa ("xmm6",&QWP(16*6-128,"ebp")); + &movdqa ("xmm7",&QWP(16*7-128,"ebp")); + #&movdqa (&QWP(16*0-128,"ebx"),"xmm0"); + &movdqa (&QWP(16*1-128,"ebx"),"xmm1"); + &movdqa (&QWP(16*2-128,"ebx"),"xmm2"); + &movdqa (&QWP(16*3-128,"ebx"),"xmm3"); + #&movdqa (&QWP(16*4-128,"ebx"),"xmm4"); + &movdqa (&QWP(16*5-128,"ebx"),"xmm5"); + &movdqa (&QWP(16*6-128,"ebx"),"xmm6"); + &movdqa (&QWP(16*7-128,"ebx"),"xmm7"); + #&movdqa ("xmm0",&QWP(16*8-128,"ebp")); + #&movdqa ("xmm1",&QWP(16*9-128,"ebp")); + &movdqa ("xmm2",&QWP(16*10-128,"ebp")); + &movdqa ("xmm3",&QWP(16*11-128,"ebp")); + &movdqa ("xmm4",&QWP(16*12-128,"ebp")); + &movdqa ("xmm5",&QWP(16*13-128,"ebp")); + &movdqa ("xmm6",&QWP(16*14-128,"ebp")); + &movdqa ("xmm7",&QWP(16*15-128,"ebp")); + &paddd ("xmm4",&QWP(16*4,"eax")); # counter value + #&movdqa (&QWP(16*8-128,"ebx"),"xmm0"); + #&movdqa (&QWP(16*9-128,"ebx"),"xmm1"); + &movdqa (&QWP(16*10-128,"ebx"),"xmm2"); + &movdqa (&QWP(16*11-128,"ebx"),"xmm3"); + &movdqa (&QWP(16*12-128,"ebx"),"xmm4"); + &movdqa (&QWP(16*13-128,"ebx"),"xmm5"); + &movdqa (&QWP(16*14-128,"ebx"),"xmm6"); + &movdqa (&QWP(16*15-128,"ebx"),"xmm7"); + &movdqa (&QWP(16*12-128,"ebp"),"xmm4"); # save counter value + + &movdqa ($xa, &QWP(16*0-128,"ebp")); + &movdqa ($xd, "xmm4"); + &movdqa ($xb_,&QWP(16*4-128,"ebp")); + &movdqa ($xc, &QWP(16*8-128,"ebp")); + &movdqa ($xc_,&QWP(16*9-128,"ebp")); + + &mov ("edx",10); # loop counter + &nop (); + +&set_label("loop",16); + &paddd ($xa,$xb_); # elsewhere + &movdqa ($xb,$xb_); + &pxor ($xd,$xa); # elsewhere + &QUARTERROUND_SSSE3(0, 4, 8, 12, 0); + &QUARTERROUND_SSSE3(1, 5, 9, 13, 1); + &QUARTERROUND_SSSE3(2, 6,10, 14, 2); + &QUARTERROUND_SSSE3(3, 7,11, 15, 3); + &QUARTERROUND_SSSE3(0, 5,10, 15, 4); + &QUARTERROUND_SSSE3(1, 6,11, 12, 5); + &QUARTERROUND_SSSE3(2, 7, 8, 13, 6); + &QUARTERROUND_SSSE3(3, 4, 9, 14, 7); + &dec ("edx"); + &jnz (&label("loop")); + + &movdqa (&QWP(16*4-128,"ebx"),$xb_); + &movdqa (&QWP(16*8-128,"ebx"),$xc); + &movdqa (&QWP(16*9-128,"ebx"),$xc_); + &movdqa (&QWP(16*12-128,"ebx"),$xd); + &movdqa (&QWP(16*14-128,"ebx"),$xd_); + + my ($xa0,$xa1,$xa2,$xa3,$xt0,$xt1,$xt2,$xt3)=map("xmm$_",(0..7)); + + #&movdqa ($xa0,&QWP(16*0-128,"ebx")); # it's there + &movdqa ($xa1,&QWP(16*1-128,"ebx")); + &movdqa ($xa2,&QWP(16*2-128,"ebx")); + &movdqa ($xa3,&QWP(16*3-128,"ebx")); + + for($i=0;$i<256;$i+=64) { + &paddd ($xa0,&QWP($i+16*0-128,"ebp")); # accumulate key material + &paddd ($xa1,&QWP($i+16*1-128,"ebp")); + &paddd ($xa2,&QWP($i+16*2-128,"ebp")); + &paddd ($xa3,&QWP($i+16*3-128,"ebp")); + + &movdqa ($xt2,$xa0); # "de-interlace" data + &punpckldq ($xa0,$xa1); + &movdqa ($xt3,$xa2); + &punpckldq ($xa2,$xa3); + &punpckhdq ($xt2,$xa1); + &punpckhdq ($xt3,$xa3); + &movdqa ($xa1,$xa0); + &punpcklqdq ($xa0,$xa2); # "a0" + &movdqa ($xa3,$xt2); + &punpcklqdq ($xt2,$xt3); # "a2" + &punpckhqdq ($xa1,$xa2); # "a1" + &punpckhqdq ($xa3,$xt3); # "a3" + + #($xa2,$xt2)=($xt2,$xa2); + + &movdqu ($xt0,&QWP(64*0-128,$inp)); # load input + &movdqu ($xt1,&QWP(64*1-128,$inp)); + &movdqu ($xa2,&QWP(64*2-128,$inp)); + &movdqu ($xt3,&QWP(64*3-128,$inp)); + &lea ($inp,&QWP($i<192?16:(64*4-16*3),$inp)); + &pxor ($xt0,$xa0); + &movdqa ($xa0,&QWP($i+16*4-128,"ebx")) if ($i<192); + &pxor ($xt1,$xa1); + &movdqa ($xa1,&QWP($i+16*5-128,"ebx")) if ($i<192); + &pxor ($xt2,$xa2); + &movdqa ($xa2,&QWP($i+16*6-128,"ebx")) if ($i<192); + &pxor ($xt3,$xa3); + &movdqa ($xa3,&QWP($i+16*7-128,"ebx")) if ($i<192); + &movdqu (&QWP(64*0-128,$out),$xt0); # store output + &movdqu (&QWP(64*1-128,$out),$xt1); + &movdqu (&QWP(64*2-128,$out),$xt2); + &movdqu (&QWP(64*3-128,$out),$xt3); + &lea ($out,&QWP($i<192?16:(64*4-16*3),$out)); + } + &sub ($len,64*4); + &jnc (&label("outer_loop")); + + &add ($len,64*4); + &jz (&label("done")); + + &mov ("ebx",&DWP(512+8,"esp")); # restore pointers + &lea ($inp,&DWP(-128,$inp)); + &mov ("edx",&DWP(512+4,"esp")); + &lea ($out,&DWP(-128,$out)); + + &movd ("xmm2",&DWP(16*12-128,"ebp")); # counter value + &movdqu ("xmm3",&QWP(0,"ebx")); + &paddd ("xmm2",&QWP(16*6,"eax")); # +four + &pand ("xmm3",&QWP(16*7,"eax")); + &por ("xmm3","xmm2"); # counter value +} +{ +my ($a,$b,$c,$d,$t,$t1,$rot16,$rot24)=map("xmm$_",(0..7)); + +sub SSSE3ROUND { # critical path is 20 "SIMD ticks" per round + &paddd ($a,$b); + &pxor ($d,$a); + &pshufb ($d,$rot16); + + &paddd ($c,$d); + &pxor ($b,$c); + &movdqa ($t,$b); + &psrld ($b,20); + &pslld ($t,12); + &por ($b,$t); + + &paddd ($a,$b); + &pxor ($d,$a); + &pshufb ($d,$rot24); + + &paddd ($c,$d); + &pxor ($b,$c); + &movdqa ($t,$b); + &psrld ($b,25); + &pslld ($t,7); + &por ($b,$t); +} + +&set_label("1x"); + &movdqa ($a,&QWP(16*2,"eax")); # sigma + &movdqu ($b,&QWP(0,"edx")); + &movdqu ($c,&QWP(16,"edx")); + #&movdqu ($d,&QWP(0,"ebx")); # already loaded + &movdqa ($rot16,&QWP(0,"eax")); + &movdqa ($rot24,&QWP(16,"eax")); + &mov (&DWP(16*3,"esp"),"ebp"); + + &movdqa (&QWP(16*0,"esp"),$a); + &movdqa (&QWP(16*1,"esp"),$b); + &movdqa (&QWP(16*2,"esp"),$c); + &movdqa (&QWP(16*3,"esp"),$d); + &mov ("edx",10); + &jmp (&label("loop1x")); + +&set_label("outer1x",16); + &movdqa ($d,&QWP(16*5,"eax")); # one + &movdqa ($a,&QWP(16*0,"esp")); + &movdqa ($b,&QWP(16*1,"esp")); + &movdqa ($c,&QWP(16*2,"esp")); + &paddd ($d,&QWP(16*3,"esp")); + &mov ("edx",10); + &movdqa (&QWP(16*3,"esp"),$d); + &jmp (&label("loop1x")); + +&set_label("loop1x",16); + &SSSE3ROUND(); + &pshufd ($c,$c,0b01001110); + &pshufd ($b,$b,0b00111001); + &pshufd ($d,$d,0b10010011); + &nop (); + + &SSSE3ROUND(); + &pshufd ($c,$c,0b01001110); + &pshufd ($b,$b,0b10010011); + &pshufd ($d,$d,0b00111001); + + &dec ("edx"); + &jnz (&label("loop1x")); + + &paddd ($a,&QWP(16*0,"esp")); + &paddd ($b,&QWP(16*1,"esp")); + &paddd ($c,&QWP(16*2,"esp")); + &paddd ($d,&QWP(16*3,"esp")); + + &cmp ($len,64); + &jb (&label("tail")); + + &movdqu ($t,&QWP(16*0,$inp)); + &movdqu ($t1,&QWP(16*1,$inp)); + &pxor ($a,$t); # xor with input + &movdqu ($t,&QWP(16*2,$inp)); + &pxor ($b,$t1); + &movdqu ($t1,&QWP(16*3,$inp)); + &pxor ($c,$t); + &pxor ($d,$t1); + &lea ($inp,&DWP(16*4,$inp)); # inp+=64 + + &movdqu (&QWP(16*0,$out),$a); # write output + &movdqu (&QWP(16*1,$out),$b); + &movdqu (&QWP(16*2,$out),$c); + &movdqu (&QWP(16*3,$out),$d); + &lea ($out,&DWP(16*4,$out)); # inp+=64 + + &sub ($len,64); + &jnz (&label("outer1x")); + + &jmp (&label("done")); + +&set_label("tail"); + &movdqa (&QWP(16*0,"esp"),$a); + &movdqa (&QWP(16*1,"esp"),$b); + &movdqa (&QWP(16*2,"esp"),$c); + &movdqa (&QWP(16*3,"esp"),$d); + + &xor ("eax","eax"); + &xor ("edx","edx"); + &xor ("ebp","ebp"); + +&set_label("tail_loop"); + &movb ("al",&BP(0,"esp","ebp")); + &movb ("dl",&BP(0,$inp,"ebp")); + &lea ("ebp",&DWP(1,"ebp")); + &xor ("al","dl"); + &movb (&BP(-1,$out,"ebp"),"al"); + &dec ($len); + &jnz (&label("tail_loop")); +} +&set_label("done"); + &mov ("esp",&DWP(512,"esp")); +&function_end("_ChaCha20_ssse3"); + +&align (64); +&set_label("ssse3_data"); +&data_byte(0x2,0x3,0x0,0x1, 0x6,0x7,0x4,0x5, 0xa,0xb,0x8,0x9, 0xe,0xf,0xc,0xd); +&data_byte(0x3,0x0,0x1,0x2, 0x7,0x4,0x5,0x6, 0xb,0x8,0x9,0xa, 0xf,0xc,0xd,0xe); +&data_word(0x61707865,0x3320646e,0x79622d32,0x6b206574); +&data_word(0,1,2,3); +&data_word(4,4,4,4); +&data_word(1,0,0,0); +&data_word(4,0,0,0); +&data_word(0,-1,-1,-1); +&align (64); +} +&asciz ("ChaCha20 for x86, CRYPTOGAMS by "); + +&asm_finish(); + +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/chacha/asm/chacha-x86_64.pl b/vendor/ring/crypto/chacha/asm/chacha-x86_64.pl new file mode 100755 index 00000000..c85bfa89 --- /dev/null +++ b/vendor/ring/crypto/chacha/asm/chacha-x86_64.pl @@ -0,0 +1,2035 @@ +#! /usr/bin/env perl +# Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# November 2014 +# +# ChaCha20 for x86_64. +# +# December 2016 +# +# Add AVX512F code path. +# +# Performance in cycles per byte out of large buffer. +# +# IALU/gcc 4.8(i) 1xSSSE3/SSE2 4xSSSE3 NxAVX(v) +# +# P4 9.48/+99% -/22.7(ii) - +# Core2 7.83/+55% 7.90/8.08 4.35 +# Westmere 7.19/+50% 5.60/6.70 3.00 +# Sandy Bridge 8.31/+42% 5.45/6.76 2.72 +# Ivy Bridge 6.71/+46% 5.40/6.49 2.41 +# Haswell 5.92/+43% 5.20/6.45 2.42 1.23 +# Skylake[-X] 5.87/+39% 4.70/- 2.31 1.19[0.57] +# Silvermont 12.0/+33% 7.75/7.40 7.03(iii) +# Knights L 11.7/- - 9.60(iii) 0.80 +# Goldmont 10.6/+17% 5.10/- 3.28 +# Sledgehammer 7.28/+52% -/14.2(ii) - +# Bulldozer 9.66/+28% 9.85/11.1 3.06(iv) +# Ryzen 5.96/+50% 5.19/- 2.40 2.09 +# VIA Nano 10.5/+46% 6.72/8.60 6.05 +# +# (i) compared to older gcc 3.x one can observe >2x improvement on +# most platforms; +# (ii) as it can be seen, SSE2 performance is too low on legacy +# processors; NxSSE2 results are naturally better, but not +# impressively better than IALU ones, which is why you won't +# find SSE2 code below; +# (iii) this is not optimal result for Atom because of MSROM +# limitations, SSE2 can do better, but gain is considered too +# low to justify the [maintenance] effort; +# (iv) Bulldozer actually executes 4xXOP code path that delivers 2.20; +# +# Modified from upstream OpenSSL to remove the XOP code. + +$flavour = shift; +$output = shift; +if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } + +$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/); + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or +die "can't locate x86_64-xlate.pl"; + +$avx = 2; + +open OUT,"| \"$^X\" $xlate $flavour $output"; +*STDOUT=*OUT; + +# input parameter block +($out,$inp,$len,$key,$counter)=("%rdi","%rsi","%rdx","%rcx","%r8"); + +$code.=<<___; +.text + +.extern GFp_ia32cap_P + +.align 64 +.Lzero: +.long 0,0,0,0 +.Lone: +.long 1,0,0,0 +.Linc: +.long 0,1,2,3 +.Lfour: +.long 4,4,4,4 +.Lincy: +.long 0,2,4,6,1,3,5,7 +.Leight: +.long 8,8,8,8,8,8,8,8 +.Lrot16: +.byte 0x2,0x3,0x0,0x1, 0x6,0x7,0x4,0x5, 0xa,0xb,0x8,0x9, 0xe,0xf,0xc,0xd +.Lrot24: +.byte 0x3,0x0,0x1,0x2, 0x7,0x4,0x5,0x6, 0xb,0x8,0x9,0xa, 0xf,0xc,0xd,0xe +.Lsigma: +.asciz "expand 32-byte k" +.align 64 +.Lzeroz: +.long 0,0,0,0, 1,0,0,0, 2,0,0,0, 3,0,0,0 +.Lfourz: +.long 4,0,0,0, 4,0,0,0, 4,0,0,0, 4,0,0,0 +.Lincz: +.long 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +.Lsixteen: +.long 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 +.asciz "ChaCha20 for x86_64, CRYPTOGAMS by " +___ + +sub AUTOLOAD() # thunk [simplified] 32-bit style perlasm +{ my $opcode = $AUTOLOAD; $opcode =~ s/.*:://; + my $arg = pop; + $arg = "\$$arg" if ($arg*1 eq $arg); + $code .= "\t$opcode\t".join(',',$arg,reverse @_)."\n"; +} + +@x=("%eax","%ebx","%ecx","%edx",map("%r${_}d",(8..11)), + "%nox","%nox","%nox","%nox",map("%r${_}d",(12..15))); +@t=("%esi","%edi"); + +sub ROUND { # critical path is 24 cycles per round +my ($a0,$b0,$c0,$d0)=@_; +my ($a1,$b1,$c1,$d1)=map(($_&~3)+(($_+1)&3),($a0,$b0,$c0,$d0)); +my ($a2,$b2,$c2,$d2)=map(($_&~3)+(($_+1)&3),($a1,$b1,$c1,$d1)); +my ($a3,$b3,$c3,$d3)=map(($_&~3)+(($_+1)&3),($a2,$b2,$c2,$d2)); +my ($xc,$xc_)=map("\"$_\"",@t); +my @x=map("\"$_\"",@x); + + # Consider order in which variables are addressed by their + # index: + # + # a b c d + # + # 0 4 8 12 < even round + # 1 5 9 13 + # 2 6 10 14 + # 3 7 11 15 + # 0 5 10 15 < odd round + # 1 6 11 12 + # 2 7 8 13 + # 3 4 9 14 + # + # 'a', 'b' and 'd's are permanently allocated in registers, + # @x[0..7,12..15], while 'c's are maintained in memory. If + # you observe 'c' column, you'll notice that pair of 'c's is + # invariant between rounds. This means that we have to reload + # them once per round, in the middle. This is why you'll see + # bunch of 'c' stores and loads in the middle, but none in + # the beginning or end. + + # Normally instructions would be interleaved to favour in-order + # execution. Generally out-of-order cores manage it gracefully, + # but not this time for some reason. As in-order execution + # cores are dying breed, old Atom is the only one around, + # instructions are left uninterleaved. Besides, Atom is better + # off executing 1xSSSE3 code anyway... + + ( + "&add (@x[$a0],@x[$b0])", # Q1 + "&xor (@x[$d0],@x[$a0])", + "&rol (@x[$d0],16)", + "&add (@x[$a1],@x[$b1])", # Q2 + "&xor (@x[$d1],@x[$a1])", + "&rol (@x[$d1],16)", + + "&add ($xc,@x[$d0])", + "&xor (@x[$b0],$xc)", + "&rol (@x[$b0],12)", + "&add ($xc_,@x[$d1])", + "&xor (@x[$b1],$xc_)", + "&rol (@x[$b1],12)", + + "&add (@x[$a0],@x[$b0])", + "&xor (@x[$d0],@x[$a0])", + "&rol (@x[$d0],8)", + "&add (@x[$a1],@x[$b1])", + "&xor (@x[$d1],@x[$a1])", + "&rol (@x[$d1],8)", + + "&add ($xc,@x[$d0])", + "&xor (@x[$b0],$xc)", + "&rol (@x[$b0],7)", + "&add ($xc_,@x[$d1])", + "&xor (@x[$b1],$xc_)", + "&rol (@x[$b1],7)", + + "&mov (\"4*$c0(%rsp)\",$xc)", # reload pair of 'c's + "&mov (\"4*$c1(%rsp)\",$xc_)", + "&mov ($xc,\"4*$c2(%rsp)\")", + "&mov ($xc_,\"4*$c3(%rsp)\")", + + "&add (@x[$a2],@x[$b2])", # Q3 + "&xor (@x[$d2],@x[$a2])", + "&rol (@x[$d2],16)", + "&add (@x[$a3],@x[$b3])", # Q4 + "&xor (@x[$d3],@x[$a3])", + "&rol (@x[$d3],16)", + + "&add ($xc,@x[$d2])", + "&xor (@x[$b2],$xc)", + "&rol (@x[$b2],12)", + "&add ($xc_,@x[$d3])", + "&xor (@x[$b3],$xc_)", + "&rol (@x[$b3],12)", + + "&add (@x[$a2],@x[$b2])", + "&xor (@x[$d2],@x[$a2])", + "&rol (@x[$d2],8)", + "&add (@x[$a3],@x[$b3])", + "&xor (@x[$d3],@x[$a3])", + "&rol (@x[$d3],8)", + + "&add ($xc,@x[$d2])", + "&xor (@x[$b2],$xc)", + "&rol (@x[$b2],7)", + "&add ($xc_,@x[$d3])", + "&xor (@x[$b3],$xc_)", + "&rol (@x[$b3],7)" + ); +} + +######################################################################## +# Generic code path that handles all lengths on pre-SSSE3 processors. +$code.=<<___; +.globl GFp_ChaCha20_ctr32 +.type GFp_ChaCha20_ctr32,\@function,5 +.align 64 +GFp_ChaCha20_ctr32: +.cfi_startproc + cmp \$0,$len + je .Lno_data + mov GFp_ia32cap_P+4(%rip),%r10 +___ +$code.=<<___; + test \$`1<<(41-32)`,%r10d + jnz .LChaCha20_ssse3 + + push %rbx +.cfi_push rbx + push %rbp +.cfi_push rbp + push %r12 +.cfi_push r12 + push %r13 +.cfi_push r13 + push %r14 +.cfi_push r14 + push %r15 +.cfi_push r15 + sub \$64+24,%rsp +.cfi_adjust_cfa_offset `64+24` +.Lctr32_body: + + #movdqa .Lsigma(%rip),%xmm0 + movdqu ($key),%xmm1 + movdqu 16($key),%xmm2 + movdqu ($counter),%xmm3 + movdqa .Lone(%rip),%xmm4 + + #movdqa %xmm0,4*0(%rsp) # key[0] + movdqa %xmm1,4*4(%rsp) # key[1] + movdqa %xmm2,4*8(%rsp) # key[2] + movdqa %xmm3,4*12(%rsp) # key[3] + mov $len,%rbp # reassign $len + jmp .Loop_outer + +.align 32 +.Loop_outer: + mov \$0x61707865,@x[0] # 'expa' + mov \$0x3320646e,@x[1] # 'nd 3' + mov \$0x79622d32,@x[2] # '2-by' + mov \$0x6b206574,@x[3] # 'te k' + mov 4*4(%rsp),@x[4] + mov 4*5(%rsp),@x[5] + mov 4*6(%rsp),@x[6] + mov 4*7(%rsp),@x[7] + movd %xmm3,@x[12] + mov 4*13(%rsp),@x[13] + mov 4*14(%rsp),@x[14] + mov 4*15(%rsp),@x[15] + + mov %rbp,64+0(%rsp) # save len + mov \$10,%ebp + mov $inp,64+8(%rsp) # save inp + movq %xmm2,%rsi # "@x[8]" + mov $out,64+16(%rsp) # save out + mov %rsi,%rdi + shr \$32,%rdi # "@x[9]" + jmp .Loop + +.align 32 +.Loop: +___ + foreach (&ROUND (0, 4, 8,12)) { eval; } + foreach (&ROUND (0, 5,10,15)) { eval; } + &dec ("%ebp"); + &jnz (".Loop"); + +$code.=<<___; + mov @t[1],4*9(%rsp) # modulo-scheduled + mov @t[0],4*8(%rsp) + mov 64(%rsp),%rbp # load len + movdqa %xmm2,%xmm1 + mov 64+8(%rsp),$inp # load inp + paddd %xmm4,%xmm3 # increment counter + mov 64+16(%rsp),$out # load out + + add \$0x61707865,@x[0] # 'expa' + add \$0x3320646e,@x[1] # 'nd 3' + add \$0x79622d32,@x[2] # '2-by' + add \$0x6b206574,@x[3] # 'te k' + add 4*4(%rsp),@x[4] + add 4*5(%rsp),@x[5] + add 4*6(%rsp),@x[6] + add 4*7(%rsp),@x[7] + add 4*12(%rsp),@x[12] + add 4*13(%rsp),@x[13] + add 4*14(%rsp),@x[14] + add 4*15(%rsp),@x[15] + paddd 4*8(%rsp),%xmm1 + + cmp \$64,%rbp + jb .Ltail + + xor 4*0($inp),@x[0] # xor with input + xor 4*1($inp),@x[1] + xor 4*2($inp),@x[2] + xor 4*3($inp),@x[3] + xor 4*4($inp),@x[4] + xor 4*5($inp),@x[5] + xor 4*6($inp),@x[6] + xor 4*7($inp),@x[7] + movdqu 4*8($inp),%xmm0 + xor 4*12($inp),@x[12] + xor 4*13($inp),@x[13] + xor 4*14($inp),@x[14] + xor 4*15($inp),@x[15] + lea 4*16($inp),$inp # inp+=64 + pxor %xmm1,%xmm0 + + movdqa %xmm2,4*8(%rsp) + movd %xmm3,4*12(%rsp) + + mov @x[0],4*0($out) # write output + mov @x[1],4*1($out) + mov @x[2],4*2($out) + mov @x[3],4*3($out) + mov @x[4],4*4($out) + mov @x[5],4*5($out) + mov @x[6],4*6($out) + mov @x[7],4*7($out) + movdqu %xmm0,4*8($out) + mov @x[12],4*12($out) + mov @x[13],4*13($out) + mov @x[14],4*14($out) + mov @x[15],4*15($out) + lea 4*16($out),$out # out+=64 + + sub \$64,%rbp + jnz .Loop_outer + + jmp .Ldone + +.align 16 +.Ltail: + mov @x[0],4*0(%rsp) + mov @x[1],4*1(%rsp) + xor %rbx,%rbx + mov @x[2],4*2(%rsp) + mov @x[3],4*3(%rsp) + mov @x[4],4*4(%rsp) + mov @x[5],4*5(%rsp) + mov @x[6],4*6(%rsp) + mov @x[7],4*7(%rsp) + movdqa %xmm1,4*8(%rsp) + mov @x[12],4*12(%rsp) + mov @x[13],4*13(%rsp) + mov @x[14],4*14(%rsp) + mov @x[15],4*15(%rsp) + +.Loop_tail: + movzb ($inp,%rbx),%eax + movzb (%rsp,%rbx),%edx + lea 1(%rbx),%rbx + xor %edx,%eax + mov %al,-1($out,%rbx) + dec %rbp + jnz .Loop_tail + +.Ldone: + lea 64+24+48(%rsp),%rsi + mov -48(%rsi),%r15 +.cfi_restore r15 + mov -40(%rsi),%r14 +.cfi_restore r14 + mov -32(%rsi),%r13 +.cfi_restore r13 + mov -24(%rsi),%r12 +.cfi_restore r12 + mov -16(%rsi),%rbp +.cfi_restore rbp + mov -8(%rsi),%rbx +.cfi_restore rbx + lea (%rsi),%rsp +.cfi_adjust_cfa_offset `-64-24-48` +.Lno_data: + ret +.cfi_endproc +.size GFp_ChaCha20_ctr32,.-GFp_ChaCha20_ctr32 +___ + +######################################################################## +# SSSE3 code path that handles shorter lengths +{ +my ($a,$b,$c,$d,$t,$t1,$rot16,$rot24)=map("%xmm$_",(0..7)); + +sub SSSE3ROUND { # critical path is 20 "SIMD ticks" per round + &paddd ($a,$b); + &pxor ($d,$a); + &pshufb ($d,$rot16); + + &paddd ($c,$d); + &pxor ($b,$c); + &movdqa ($t,$b); + &psrld ($b,20); + &pslld ($t,12); + &por ($b,$t); + + &paddd ($a,$b); + &pxor ($d,$a); + &pshufb ($d,$rot24); + + &paddd ($c,$d); + &pxor ($b,$c); + &movdqa ($t,$b); + &psrld ($b,25); + &pslld ($t,7); + &por ($b,$t); +} + +my $xframe = $win64 ? 32+8 : 8; + +$code.=<<___; +.type ChaCha20_ssse3,\@function,5 +.align 32 +ChaCha20_ssse3: +.LChaCha20_ssse3: +.cfi_startproc + mov %rsp,%r9 # frame pointer +.cfi_def_cfa_register r9 +___ +$code.=<<___; + cmp \$128,$len # we might throw away some data, + ja .LChaCha20_4x # but overall it won't be slower + +.Ldo_sse3_after_all: + sub \$64+$xframe,%rsp +___ +$code.=<<___ if ($win64); + movaps %xmm6,-0x28(%r9) + movaps %xmm7,-0x18(%r9) +.Lssse3_body: +___ +$code.=<<___; + movdqa .Lsigma(%rip),$a + movdqu ($key),$b + movdqu 16($key),$c + movdqu ($counter),$d + movdqa .Lrot16(%rip),$rot16 + movdqa .Lrot24(%rip),$rot24 + + movdqa $a,0x00(%rsp) + movdqa $b,0x10(%rsp) + movdqa $c,0x20(%rsp) + movdqa $d,0x30(%rsp) + mov \$10,$counter # reuse $counter + jmp .Loop_ssse3 + +.align 32 +.Loop_outer_ssse3: + movdqa .Lone(%rip),$d + movdqa 0x00(%rsp),$a + movdqa 0x10(%rsp),$b + movdqa 0x20(%rsp),$c + paddd 0x30(%rsp),$d + mov \$10,$counter + movdqa $d,0x30(%rsp) + jmp .Loop_ssse3 + +.align 32 +.Loop_ssse3: +___ + &SSSE3ROUND(); + &pshufd ($c,$c,0b01001110); + &pshufd ($b,$b,0b00111001); + &pshufd ($d,$d,0b10010011); + &nop (); + + &SSSE3ROUND(); + &pshufd ($c,$c,0b01001110); + &pshufd ($b,$b,0b10010011); + &pshufd ($d,$d,0b00111001); + + &dec ($counter); + &jnz (".Loop_ssse3"); + +$code.=<<___; + paddd 0x00(%rsp),$a + paddd 0x10(%rsp),$b + paddd 0x20(%rsp),$c + paddd 0x30(%rsp),$d + + cmp \$64,$len + jb .Ltail_ssse3 + + movdqu 0x00($inp),$t + movdqu 0x10($inp),$t1 + pxor $t,$a # xor with input + movdqu 0x20($inp),$t + pxor $t1,$b + movdqu 0x30($inp),$t1 + lea 0x40($inp),$inp # inp+=64 + pxor $t,$c + pxor $t1,$d + + movdqu $a,0x00($out) # write output + movdqu $b,0x10($out) + movdqu $c,0x20($out) + movdqu $d,0x30($out) + lea 0x40($out),$out # out+=64 + + sub \$64,$len + jnz .Loop_outer_ssse3 + + jmp .Ldone_ssse3 + +.align 16 +.Ltail_ssse3: + movdqa $a,0x00(%rsp) + movdqa $b,0x10(%rsp) + movdqa $c,0x20(%rsp) + movdqa $d,0x30(%rsp) + xor $counter,$counter + +.Loop_tail_ssse3: + movzb ($inp,$counter),%eax + movzb (%rsp,$counter),%ecx + lea 1($counter),$counter + xor %ecx,%eax + mov %al,-1($out,$counter) + dec $len + jnz .Loop_tail_ssse3 + +.Ldone_ssse3: +___ +$code.=<<___ if ($win64); + movaps -0x28(%r9),%xmm6 + movaps -0x18(%r9),%xmm7 +___ +$code.=<<___; + lea (%r9),%rsp +.cfi_def_cfa_register rsp +.Lssse3_epilogue: + ret +.cfi_endproc +.size ChaCha20_ssse3,.-ChaCha20_ssse3 +___ +} + +######################################################################## +# SSSE3 code path that handles longer messages. +{ +# assign variables to favor Atom front-end +my ($xd0,$xd1,$xd2,$xd3, $xt0,$xt1,$xt2,$xt3, + $xa0,$xa1,$xa2,$xa3, $xb0,$xb1,$xb2,$xb3)=map("%xmm$_",(0..15)); +my @xx=($xa0,$xa1,$xa2,$xa3, $xb0,$xb1,$xb2,$xb3, + "%nox","%nox","%nox","%nox", $xd0,$xd1,$xd2,$xd3); + +sub SSSE3_lane_ROUND { +my ($a0,$b0,$c0,$d0)=@_; +my ($a1,$b1,$c1,$d1)=map(($_&~3)+(($_+1)&3),($a0,$b0,$c0,$d0)); +my ($a2,$b2,$c2,$d2)=map(($_&~3)+(($_+1)&3),($a1,$b1,$c1,$d1)); +my ($a3,$b3,$c3,$d3)=map(($_&~3)+(($_+1)&3),($a2,$b2,$c2,$d2)); +my ($xc,$xc_,$t0,$t1)=map("\"$_\"",$xt0,$xt1,$xt2,$xt3); +my @x=map("\"$_\"",@xx); + + # Consider order in which variables are addressed by their + # index: + # + # a b c d + # + # 0 4 8 12 < even round + # 1 5 9 13 + # 2 6 10 14 + # 3 7 11 15 + # 0 5 10 15 < odd round + # 1 6 11 12 + # 2 7 8 13 + # 3 4 9 14 + # + # 'a', 'b' and 'd's are permanently allocated in registers, + # @x[0..7,12..15], while 'c's are maintained in memory. If + # you observe 'c' column, you'll notice that pair of 'c's is + # invariant between rounds. This means that we have to reload + # them once per round, in the middle. This is why you'll see + # bunch of 'c' stores and loads in the middle, but none in + # the beginning or end. + + ( + "&paddd (@x[$a0],@x[$b0])", # Q1 + "&paddd (@x[$a1],@x[$b1])", # Q2 + "&pxor (@x[$d0],@x[$a0])", + "&pxor (@x[$d1],@x[$a1])", + "&pshufb (@x[$d0],$t1)", + "&pshufb (@x[$d1],$t1)", + + "&paddd ($xc,@x[$d0])", + "&paddd ($xc_,@x[$d1])", + "&pxor (@x[$b0],$xc)", + "&pxor (@x[$b1],$xc_)", + "&movdqa ($t0,@x[$b0])", + "&pslld (@x[$b0],12)", + "&psrld ($t0,20)", + "&movdqa ($t1,@x[$b1])", + "&pslld (@x[$b1],12)", + "&por (@x[$b0],$t0)", + "&psrld ($t1,20)", + "&movdqa ($t0,'(%r11)')", # .Lrot24(%rip) + "&por (@x[$b1],$t1)", + + "&paddd (@x[$a0],@x[$b0])", + "&paddd (@x[$a1],@x[$b1])", + "&pxor (@x[$d0],@x[$a0])", + "&pxor (@x[$d1],@x[$a1])", + "&pshufb (@x[$d0],$t0)", + "&pshufb (@x[$d1],$t0)", + + "&paddd ($xc,@x[$d0])", + "&paddd ($xc_,@x[$d1])", + "&pxor (@x[$b0],$xc)", + "&pxor (@x[$b1],$xc_)", + "&movdqa ($t1,@x[$b0])", + "&pslld (@x[$b0],7)", + "&psrld ($t1,25)", + "&movdqa ($t0,@x[$b1])", + "&pslld (@x[$b1],7)", + "&por (@x[$b0],$t1)", + "&psrld ($t0,25)", + "&movdqa ($t1,'(%r10)')", # .Lrot16(%rip) + "&por (@x[$b1],$t0)", + + "&movdqa (\"`16*($c0-8)`(%rsp)\",$xc)", # reload pair of 'c's + "&movdqa (\"`16*($c1-8)`(%rsp)\",$xc_)", + "&movdqa ($xc,\"`16*($c2-8)`(%rsp)\")", + "&movdqa ($xc_,\"`16*($c3-8)`(%rsp)\")", + + "&paddd (@x[$a2],@x[$b2])", # Q3 + "&paddd (@x[$a3],@x[$b3])", # Q4 + "&pxor (@x[$d2],@x[$a2])", + "&pxor (@x[$d3],@x[$a3])", + "&pshufb (@x[$d2],$t1)", + "&pshufb (@x[$d3],$t1)", + + "&paddd ($xc,@x[$d2])", + "&paddd ($xc_,@x[$d3])", + "&pxor (@x[$b2],$xc)", + "&pxor (@x[$b3],$xc_)", + "&movdqa ($t0,@x[$b2])", + "&pslld (@x[$b2],12)", + "&psrld ($t0,20)", + "&movdqa ($t1,@x[$b3])", + "&pslld (@x[$b3],12)", + "&por (@x[$b2],$t0)", + "&psrld ($t1,20)", + "&movdqa ($t0,'(%r11)')", # .Lrot24(%rip) + "&por (@x[$b3],$t1)", + + "&paddd (@x[$a2],@x[$b2])", + "&paddd (@x[$a3],@x[$b3])", + "&pxor (@x[$d2],@x[$a2])", + "&pxor (@x[$d3],@x[$a3])", + "&pshufb (@x[$d2],$t0)", + "&pshufb (@x[$d3],$t0)", + + "&paddd ($xc,@x[$d2])", + "&paddd ($xc_,@x[$d3])", + "&pxor (@x[$b2],$xc)", + "&pxor (@x[$b3],$xc_)", + "&movdqa ($t1,@x[$b2])", + "&pslld (@x[$b2],7)", + "&psrld ($t1,25)", + "&movdqa ($t0,@x[$b3])", + "&pslld (@x[$b3],7)", + "&por (@x[$b2],$t1)", + "&psrld ($t0,25)", + "&movdqa ($t1,'(%r10)')", # .Lrot16(%rip) + "&por (@x[$b3],$t0)" + ); +} + +my $xframe = $win64 ? 0xa8 : 8; + +$code.=<<___; +.type ChaCha20_4x,\@function,5 +.align 32 +ChaCha20_4x: +.LChaCha20_4x: +.cfi_startproc + mov %rsp,%r9 # frame pointer +.cfi_def_cfa_register r9 + mov %r10,%r11 +___ +$code.=<<___ if ($avx>1); + shr \$32,%r10 # GFp_ia32cap_P+8 + test \$`1<<5`,%r10 # test AVX2 + jnz .LChaCha20_8x +___ +$code.=<<___; + cmp \$192,$len + ja .Lproceed4x + + and \$`1<<26|1<<22`,%r11 # isolate XSAVE+MOVBE + cmp \$`1<<22`,%r11 # check for MOVBE without XSAVE + je .Ldo_sse3_after_all # to detect Atom + +.Lproceed4x: + sub \$0x140+$xframe,%rsp +___ + ################ stack layout + # +0x00 SIMD equivalent of @x[8-12] + # ... + # +0x40 constant copy of key[0-2] smashed by lanes + # ... + # +0x100 SIMD counters (with nonce smashed by lanes) + # ... + # +0x140 +$code.=<<___ if ($win64); + movaps %xmm6,-0xa8(%r9) + movaps %xmm7,-0x98(%r9) + movaps %xmm8,-0x88(%r9) + movaps %xmm9,-0x78(%r9) + movaps %xmm10,-0x68(%r9) + movaps %xmm11,-0x58(%r9) + movaps %xmm12,-0x48(%r9) + movaps %xmm13,-0x38(%r9) + movaps %xmm14,-0x28(%r9) + movaps %xmm15,-0x18(%r9) +.L4x_body: +___ +$code.=<<___; + movdqa .Lsigma(%rip),$xa3 # key[0] + movdqu ($key),$xb3 # key[1] + movdqu 16($key),$xt3 # key[2] + movdqu ($counter),$xd3 # key[3] + lea 0x100(%rsp),%rcx # size optimization + lea .Lrot16(%rip),%r10 + lea .Lrot24(%rip),%r11 + + pshufd \$0x00,$xa3,$xa0 # smash key by lanes... + pshufd \$0x55,$xa3,$xa1 + movdqa $xa0,0x40(%rsp) # ... and offload + pshufd \$0xaa,$xa3,$xa2 + movdqa $xa1,0x50(%rsp) + pshufd \$0xff,$xa3,$xa3 + movdqa $xa2,0x60(%rsp) + movdqa $xa3,0x70(%rsp) + + pshufd \$0x00,$xb3,$xb0 + pshufd \$0x55,$xb3,$xb1 + movdqa $xb0,0x80-0x100(%rcx) + pshufd \$0xaa,$xb3,$xb2 + movdqa $xb1,0x90-0x100(%rcx) + pshufd \$0xff,$xb3,$xb3 + movdqa $xb2,0xa0-0x100(%rcx) + movdqa $xb3,0xb0-0x100(%rcx) + + pshufd \$0x00,$xt3,$xt0 # "$xc0" + pshufd \$0x55,$xt3,$xt1 # "$xc1" + movdqa $xt0,0xc0-0x100(%rcx) + pshufd \$0xaa,$xt3,$xt2 # "$xc2" + movdqa $xt1,0xd0-0x100(%rcx) + pshufd \$0xff,$xt3,$xt3 # "$xc3" + movdqa $xt2,0xe0-0x100(%rcx) + movdqa $xt3,0xf0-0x100(%rcx) + + pshufd \$0x00,$xd3,$xd0 + pshufd \$0x55,$xd3,$xd1 + paddd .Linc(%rip),$xd0 # don't save counters yet + pshufd \$0xaa,$xd3,$xd2 + movdqa $xd1,0x110-0x100(%rcx) + pshufd \$0xff,$xd3,$xd3 + movdqa $xd2,0x120-0x100(%rcx) + movdqa $xd3,0x130-0x100(%rcx) + + jmp .Loop_enter4x + +.align 32 +.Loop_outer4x: + movdqa 0x40(%rsp),$xa0 # re-load smashed key + movdqa 0x50(%rsp),$xa1 + movdqa 0x60(%rsp),$xa2 + movdqa 0x70(%rsp),$xa3 + movdqa 0x80-0x100(%rcx),$xb0 + movdqa 0x90-0x100(%rcx),$xb1 + movdqa 0xa0-0x100(%rcx),$xb2 + movdqa 0xb0-0x100(%rcx),$xb3 + movdqa 0xc0-0x100(%rcx),$xt0 # "$xc0" + movdqa 0xd0-0x100(%rcx),$xt1 # "$xc1" + movdqa 0xe0-0x100(%rcx),$xt2 # "$xc2" + movdqa 0xf0-0x100(%rcx),$xt3 # "$xc3" + movdqa 0x100-0x100(%rcx),$xd0 + movdqa 0x110-0x100(%rcx),$xd1 + movdqa 0x120-0x100(%rcx),$xd2 + movdqa 0x130-0x100(%rcx),$xd3 + paddd .Lfour(%rip),$xd0 # next SIMD counters + +.Loop_enter4x: + movdqa $xt2,0x20(%rsp) # SIMD equivalent of "@x[10]" + movdqa $xt3,0x30(%rsp) # SIMD equivalent of "@x[11]" + movdqa (%r10),$xt3 # .Lrot16(%rip) + mov \$10,%eax + movdqa $xd0,0x100-0x100(%rcx) # save SIMD counters + jmp .Loop4x + +.align 32 +.Loop4x: +___ + foreach (&SSSE3_lane_ROUND(0, 4, 8,12)) { eval; } + foreach (&SSSE3_lane_ROUND(0, 5,10,15)) { eval; } +$code.=<<___; + dec %eax + jnz .Loop4x + + paddd 0x40(%rsp),$xa0 # accumulate key material + paddd 0x50(%rsp),$xa1 + paddd 0x60(%rsp),$xa2 + paddd 0x70(%rsp),$xa3 + + movdqa $xa0,$xt2 # "de-interlace" data + punpckldq $xa1,$xa0 + movdqa $xa2,$xt3 + punpckldq $xa3,$xa2 + punpckhdq $xa1,$xt2 + punpckhdq $xa3,$xt3 + movdqa $xa0,$xa1 + punpcklqdq $xa2,$xa0 # "a0" + movdqa $xt2,$xa3 + punpcklqdq $xt3,$xt2 # "a2" + punpckhqdq $xa2,$xa1 # "a1" + punpckhqdq $xt3,$xa3 # "a3" +___ + ($xa2,$xt2)=($xt2,$xa2); +$code.=<<___; + paddd 0x80-0x100(%rcx),$xb0 + paddd 0x90-0x100(%rcx),$xb1 + paddd 0xa0-0x100(%rcx),$xb2 + paddd 0xb0-0x100(%rcx),$xb3 + + movdqa $xa0,0x00(%rsp) # offload $xaN + movdqa $xa1,0x10(%rsp) + movdqa 0x20(%rsp),$xa0 # "xc2" + movdqa 0x30(%rsp),$xa1 # "xc3" + + movdqa $xb0,$xt2 + punpckldq $xb1,$xb0 + movdqa $xb2,$xt3 + punpckldq $xb3,$xb2 + punpckhdq $xb1,$xt2 + punpckhdq $xb3,$xt3 + movdqa $xb0,$xb1 + punpcklqdq $xb2,$xb0 # "b0" + movdqa $xt2,$xb3 + punpcklqdq $xt3,$xt2 # "b2" + punpckhqdq $xb2,$xb1 # "b1" + punpckhqdq $xt3,$xb3 # "b3" +___ + ($xb2,$xt2)=($xt2,$xb2); + my ($xc0,$xc1,$xc2,$xc3)=($xt0,$xt1,$xa0,$xa1); +$code.=<<___; + paddd 0xc0-0x100(%rcx),$xc0 + paddd 0xd0-0x100(%rcx),$xc1 + paddd 0xe0-0x100(%rcx),$xc2 + paddd 0xf0-0x100(%rcx),$xc3 + + movdqa $xa2,0x20(%rsp) # keep offloading $xaN + movdqa $xa3,0x30(%rsp) + + movdqa $xc0,$xt2 + punpckldq $xc1,$xc0 + movdqa $xc2,$xt3 + punpckldq $xc3,$xc2 + punpckhdq $xc1,$xt2 + punpckhdq $xc3,$xt3 + movdqa $xc0,$xc1 + punpcklqdq $xc2,$xc0 # "c0" + movdqa $xt2,$xc3 + punpcklqdq $xt3,$xt2 # "c2" + punpckhqdq $xc2,$xc1 # "c1" + punpckhqdq $xt3,$xc3 # "c3" +___ + ($xc2,$xt2)=($xt2,$xc2); + ($xt0,$xt1)=($xa2,$xa3); # use $xaN as temporary +$code.=<<___; + paddd 0x100-0x100(%rcx),$xd0 + paddd 0x110-0x100(%rcx),$xd1 + paddd 0x120-0x100(%rcx),$xd2 + paddd 0x130-0x100(%rcx),$xd3 + + movdqa $xd0,$xt2 + punpckldq $xd1,$xd0 + movdqa $xd2,$xt3 + punpckldq $xd3,$xd2 + punpckhdq $xd1,$xt2 + punpckhdq $xd3,$xt3 + movdqa $xd0,$xd1 + punpcklqdq $xd2,$xd0 # "d0" + movdqa $xt2,$xd3 + punpcklqdq $xt3,$xt2 # "d2" + punpckhqdq $xd2,$xd1 # "d1" + punpckhqdq $xt3,$xd3 # "d3" +___ + ($xd2,$xt2)=($xt2,$xd2); +$code.=<<___; + cmp \$64*4,$len + jb .Ltail4x + + movdqu 0x00($inp),$xt0 # xor with input + movdqu 0x10($inp),$xt1 + movdqu 0x20($inp),$xt2 + movdqu 0x30($inp),$xt3 + pxor 0x00(%rsp),$xt0 # $xaN is offloaded, remember? + pxor $xb0,$xt1 + pxor $xc0,$xt2 + pxor $xd0,$xt3 + + movdqu $xt0,0x00($out) + movdqu 0x40($inp),$xt0 + movdqu $xt1,0x10($out) + movdqu 0x50($inp),$xt1 + movdqu $xt2,0x20($out) + movdqu 0x60($inp),$xt2 + movdqu $xt3,0x30($out) + movdqu 0x70($inp),$xt3 + lea 0x80($inp),$inp # size optimization + pxor 0x10(%rsp),$xt0 + pxor $xb1,$xt1 + pxor $xc1,$xt2 + pxor $xd1,$xt3 + + movdqu $xt0,0x40($out) + movdqu 0x00($inp),$xt0 + movdqu $xt1,0x50($out) + movdqu 0x10($inp),$xt1 + movdqu $xt2,0x60($out) + movdqu 0x20($inp),$xt2 + movdqu $xt3,0x70($out) + lea 0x80($out),$out # size optimization + movdqu 0x30($inp),$xt3 + pxor 0x20(%rsp),$xt0 + pxor $xb2,$xt1 + pxor $xc2,$xt2 + pxor $xd2,$xt3 + + movdqu $xt0,0x00($out) + movdqu 0x40($inp),$xt0 + movdqu $xt1,0x10($out) + movdqu 0x50($inp),$xt1 + movdqu $xt2,0x20($out) + movdqu 0x60($inp),$xt2 + movdqu $xt3,0x30($out) + movdqu 0x70($inp),$xt3 + lea 0x80($inp),$inp # inp+=64*4 + pxor 0x30(%rsp),$xt0 + pxor $xb3,$xt1 + pxor $xc3,$xt2 + pxor $xd3,$xt3 + movdqu $xt0,0x40($out) + movdqu $xt1,0x50($out) + movdqu $xt2,0x60($out) + movdqu $xt3,0x70($out) + lea 0x80($out),$out # out+=64*4 + + sub \$64*4,$len + jnz .Loop_outer4x + + jmp .Ldone4x + +.Ltail4x: + cmp \$192,$len + jae .L192_or_more4x + cmp \$128,$len + jae .L128_or_more4x + cmp \$64,$len + jae .L64_or_more4x + + #movdqa 0x00(%rsp),$xt0 # $xaN is offloaded, remember? + xor %r10,%r10 + #movdqa $xt0,0x00(%rsp) + movdqa $xb0,0x10(%rsp) + movdqa $xc0,0x20(%rsp) + movdqa $xd0,0x30(%rsp) + jmp .Loop_tail4x + +.align 32 +.L64_or_more4x: + movdqu 0x00($inp),$xt0 # xor with input + movdqu 0x10($inp),$xt1 + movdqu 0x20($inp),$xt2 + movdqu 0x30($inp),$xt3 + pxor 0x00(%rsp),$xt0 # $xaxN is offloaded, remember? + pxor $xb0,$xt1 + pxor $xc0,$xt2 + pxor $xd0,$xt3 + movdqu $xt0,0x00($out) + movdqu $xt1,0x10($out) + movdqu $xt2,0x20($out) + movdqu $xt3,0x30($out) + je .Ldone4x + + movdqa 0x10(%rsp),$xt0 # $xaN is offloaded, remember? + lea 0x40($inp),$inp # inp+=64*1 + xor %r10,%r10 + movdqa $xt0,0x00(%rsp) + movdqa $xb1,0x10(%rsp) + lea 0x40($out),$out # out+=64*1 + movdqa $xc1,0x20(%rsp) + sub \$64,$len # len-=64*1 + movdqa $xd1,0x30(%rsp) + jmp .Loop_tail4x + +.align 32 +.L128_or_more4x: + movdqu 0x00($inp),$xt0 # xor with input + movdqu 0x10($inp),$xt1 + movdqu 0x20($inp),$xt2 + movdqu 0x30($inp),$xt3 + pxor 0x00(%rsp),$xt0 # $xaN is offloaded, remember? + pxor $xb0,$xt1 + pxor $xc0,$xt2 + pxor $xd0,$xt3 + + movdqu $xt0,0x00($out) + movdqu 0x40($inp),$xt0 + movdqu $xt1,0x10($out) + movdqu 0x50($inp),$xt1 + movdqu $xt2,0x20($out) + movdqu 0x60($inp),$xt2 + movdqu $xt3,0x30($out) + movdqu 0x70($inp),$xt3 + pxor 0x10(%rsp),$xt0 + pxor $xb1,$xt1 + pxor $xc1,$xt2 + pxor $xd1,$xt3 + movdqu $xt0,0x40($out) + movdqu $xt1,0x50($out) + movdqu $xt2,0x60($out) + movdqu $xt3,0x70($out) + je .Ldone4x + + movdqa 0x20(%rsp),$xt0 # $xaN is offloaded, remember? + lea 0x80($inp),$inp # inp+=64*2 + xor %r10,%r10 + movdqa $xt0,0x00(%rsp) + movdqa $xb2,0x10(%rsp) + lea 0x80($out),$out # out+=64*2 + movdqa $xc2,0x20(%rsp) + sub \$128,$len # len-=64*2 + movdqa $xd2,0x30(%rsp) + jmp .Loop_tail4x + +.align 32 +.L192_or_more4x: + movdqu 0x00($inp),$xt0 # xor with input + movdqu 0x10($inp),$xt1 + movdqu 0x20($inp),$xt2 + movdqu 0x30($inp),$xt3 + pxor 0x00(%rsp),$xt0 # $xaN is offloaded, remember? + pxor $xb0,$xt1 + pxor $xc0,$xt2 + pxor $xd0,$xt3 + + movdqu $xt0,0x00($out) + movdqu 0x40($inp),$xt0 + movdqu $xt1,0x10($out) + movdqu 0x50($inp),$xt1 + movdqu $xt2,0x20($out) + movdqu 0x60($inp),$xt2 + movdqu $xt3,0x30($out) + movdqu 0x70($inp),$xt3 + lea 0x80($inp),$inp # size optimization + pxor 0x10(%rsp),$xt0 + pxor $xb1,$xt1 + pxor $xc1,$xt2 + pxor $xd1,$xt3 + + movdqu $xt0,0x40($out) + movdqu 0x00($inp),$xt0 + movdqu $xt1,0x50($out) + movdqu 0x10($inp),$xt1 + movdqu $xt2,0x60($out) + movdqu 0x20($inp),$xt2 + movdqu $xt3,0x70($out) + lea 0x80($out),$out # size optimization + movdqu 0x30($inp),$xt3 + pxor 0x20(%rsp),$xt0 + pxor $xb2,$xt1 + pxor $xc2,$xt2 + pxor $xd2,$xt3 + movdqu $xt0,0x00($out) + movdqu $xt1,0x10($out) + movdqu $xt2,0x20($out) + movdqu $xt3,0x30($out) + je .Ldone4x + + movdqa 0x30(%rsp),$xt0 # $xaN is offloaded, remember? + lea 0x40($inp),$inp # inp+=64*3 + xor %r10,%r10 + movdqa $xt0,0x00(%rsp) + movdqa $xb3,0x10(%rsp) + lea 0x40($out),$out # out+=64*3 + movdqa $xc3,0x20(%rsp) + sub \$192,$len # len-=64*3 + movdqa $xd3,0x30(%rsp) + +.Loop_tail4x: + movzb ($inp,%r10),%eax + movzb (%rsp,%r10),%ecx + lea 1(%r10),%r10 + xor %ecx,%eax + mov %al,-1($out,%r10) + dec $len + jnz .Loop_tail4x + +.Ldone4x: +___ +$code.=<<___ if ($win64); + movaps -0xa8(%r9),%xmm6 + movaps -0x98(%r9),%xmm7 + movaps -0x88(%r9),%xmm8 + movaps -0x78(%r9),%xmm9 + movaps -0x68(%r9),%xmm10 + movaps -0x58(%r9),%xmm11 + movaps -0x48(%r9),%xmm12 + movaps -0x38(%r9),%xmm13 + movaps -0x28(%r9),%xmm14 + movaps -0x18(%r9),%xmm15 +___ +$code.=<<___; + lea (%r9),%rsp +.cfi_def_cfa_register rsp +.L4x_epilogue: + ret +.cfi_endproc +.size ChaCha20_4x,.-ChaCha20_4x +___ +} + +######################################################################## +# AVX2 code path +if ($avx>1) { +my ($xb0,$xb1,$xb2,$xb3, $xd0,$xd1,$xd2,$xd3, + $xa0,$xa1,$xa2,$xa3, $xt0,$xt1,$xt2,$xt3)=map("%ymm$_",(0..15)); +my @xx=($xa0,$xa1,$xa2,$xa3, $xb0,$xb1,$xb2,$xb3, + "%nox","%nox","%nox","%nox", $xd0,$xd1,$xd2,$xd3); + +sub AVX2_lane_ROUND { +my ($a0,$b0,$c0,$d0)=@_; +my ($a1,$b1,$c1,$d1)=map(($_&~3)+(($_+1)&3),($a0,$b0,$c0,$d0)); +my ($a2,$b2,$c2,$d2)=map(($_&~3)+(($_+1)&3),($a1,$b1,$c1,$d1)); +my ($a3,$b3,$c3,$d3)=map(($_&~3)+(($_+1)&3),($a2,$b2,$c2,$d2)); +my ($xc,$xc_,$t0,$t1)=map("\"$_\"",$xt0,$xt1,$xt2,$xt3); +my @x=map("\"$_\"",@xx); + + # Consider order in which variables are addressed by their + # index: + # + # a b c d + # + # 0 4 8 12 < even round + # 1 5 9 13 + # 2 6 10 14 + # 3 7 11 15 + # 0 5 10 15 < odd round + # 1 6 11 12 + # 2 7 8 13 + # 3 4 9 14 + # + # 'a', 'b' and 'd's are permanently allocated in registers, + # @x[0..7,12..15], while 'c's are maintained in memory. If + # you observe 'c' column, you'll notice that pair of 'c's is + # invariant between rounds. This means that we have to reload + # them once per round, in the middle. This is why you'll see + # bunch of 'c' stores and loads in the middle, but none in + # the beginning or end. + + ( + "&vpaddd (@x[$a0],@x[$a0],@x[$b0])", # Q1 + "&vpxor (@x[$d0],@x[$a0],@x[$d0])", + "&vpshufb (@x[$d0],@x[$d0],$t1)", + "&vpaddd (@x[$a1],@x[$a1],@x[$b1])", # Q2 + "&vpxor (@x[$d1],@x[$a1],@x[$d1])", + "&vpshufb (@x[$d1],@x[$d1],$t1)", + + "&vpaddd ($xc,$xc,@x[$d0])", + "&vpxor (@x[$b0],$xc,@x[$b0])", + "&vpslld ($t0,@x[$b0],12)", + "&vpsrld (@x[$b0],@x[$b0],20)", + "&vpor (@x[$b0],$t0,@x[$b0])", + "&vbroadcasti128($t0,'(%r11)')", # .Lrot24(%rip) + "&vpaddd ($xc_,$xc_,@x[$d1])", + "&vpxor (@x[$b1],$xc_,@x[$b1])", + "&vpslld ($t1,@x[$b1],12)", + "&vpsrld (@x[$b1],@x[$b1],20)", + "&vpor (@x[$b1],$t1,@x[$b1])", + + "&vpaddd (@x[$a0],@x[$a0],@x[$b0])", + "&vpxor (@x[$d0],@x[$a0],@x[$d0])", + "&vpshufb (@x[$d0],@x[$d0],$t0)", + "&vpaddd (@x[$a1],@x[$a1],@x[$b1])", + "&vpxor (@x[$d1],@x[$a1],@x[$d1])", + "&vpshufb (@x[$d1],@x[$d1],$t0)", + + "&vpaddd ($xc,$xc,@x[$d0])", + "&vpxor (@x[$b0],$xc,@x[$b0])", + "&vpslld ($t1,@x[$b0],7)", + "&vpsrld (@x[$b0],@x[$b0],25)", + "&vpor (@x[$b0],$t1,@x[$b0])", + "&vbroadcasti128($t1,'(%r10)')", # .Lrot16(%rip) + "&vpaddd ($xc_,$xc_,@x[$d1])", + "&vpxor (@x[$b1],$xc_,@x[$b1])", + "&vpslld ($t0,@x[$b1],7)", + "&vpsrld (@x[$b1],@x[$b1],25)", + "&vpor (@x[$b1],$t0,@x[$b1])", + + "&vmovdqa (\"`32*($c0-8)`(%rsp)\",$xc)", # reload pair of 'c's + "&vmovdqa (\"`32*($c1-8)`(%rsp)\",$xc_)", + "&vmovdqa ($xc,\"`32*($c2-8)`(%rsp)\")", + "&vmovdqa ($xc_,\"`32*($c3-8)`(%rsp)\")", + + "&vpaddd (@x[$a2],@x[$a2],@x[$b2])", # Q3 + "&vpxor (@x[$d2],@x[$a2],@x[$d2])", + "&vpshufb (@x[$d2],@x[$d2],$t1)", + "&vpaddd (@x[$a3],@x[$a3],@x[$b3])", # Q4 + "&vpxor (@x[$d3],@x[$a3],@x[$d3])", + "&vpshufb (@x[$d3],@x[$d3],$t1)", + + "&vpaddd ($xc,$xc,@x[$d2])", + "&vpxor (@x[$b2],$xc,@x[$b2])", + "&vpslld ($t0,@x[$b2],12)", + "&vpsrld (@x[$b2],@x[$b2],20)", + "&vpor (@x[$b2],$t0,@x[$b2])", + "&vbroadcasti128($t0,'(%r11)')", # .Lrot24(%rip) + "&vpaddd ($xc_,$xc_,@x[$d3])", + "&vpxor (@x[$b3],$xc_,@x[$b3])", + "&vpslld ($t1,@x[$b3],12)", + "&vpsrld (@x[$b3],@x[$b3],20)", + "&vpor (@x[$b3],$t1,@x[$b3])", + + "&vpaddd (@x[$a2],@x[$a2],@x[$b2])", + "&vpxor (@x[$d2],@x[$a2],@x[$d2])", + "&vpshufb (@x[$d2],@x[$d2],$t0)", + "&vpaddd (@x[$a3],@x[$a3],@x[$b3])", + "&vpxor (@x[$d3],@x[$a3],@x[$d3])", + "&vpshufb (@x[$d3],@x[$d3],$t0)", + + "&vpaddd ($xc,$xc,@x[$d2])", + "&vpxor (@x[$b2],$xc,@x[$b2])", + "&vpslld ($t1,@x[$b2],7)", + "&vpsrld (@x[$b2],@x[$b2],25)", + "&vpor (@x[$b2],$t1,@x[$b2])", + "&vbroadcasti128($t1,'(%r10)')", # .Lrot16(%rip) + "&vpaddd ($xc_,$xc_,@x[$d3])", + "&vpxor (@x[$b3],$xc_,@x[$b3])", + "&vpslld ($t0,@x[$b3],7)", + "&vpsrld (@x[$b3],@x[$b3],25)", + "&vpor (@x[$b3],$t0,@x[$b3])" + ); +} + +my $xframe = $win64 ? 0xa8 : 8; + +$code.=<<___; +.type ChaCha20_8x,\@function,5 +.align 32 +ChaCha20_8x: +.LChaCha20_8x: +.cfi_startproc + mov %rsp,%r9 # frame register +.cfi_def_cfa_register r9 + sub \$0x280+$xframe,%rsp + and \$-32,%rsp +___ +$code.=<<___ if ($win64); + movaps %xmm6,-0xa8(%r9) + movaps %xmm7,-0x98(%r9) + movaps %xmm8,-0x88(%r9) + movaps %xmm9,-0x78(%r9) + movaps %xmm10,-0x68(%r9) + movaps %xmm11,-0x58(%r9) + movaps %xmm12,-0x48(%r9) + movaps %xmm13,-0x38(%r9) + movaps %xmm14,-0x28(%r9) + movaps %xmm15,-0x18(%r9) +.L8x_body: +___ +$code.=<<___; + vzeroupper + + ################ stack layout + # +0x00 SIMD equivalent of @x[8-12] + # ... + # +0x80 constant copy of key[0-2] smashed by lanes + # ... + # +0x200 SIMD counters (with nonce smashed by lanes) + # ... + # +0x280 + + vbroadcasti128 .Lsigma(%rip),$xa3 # key[0] + vbroadcasti128 ($key),$xb3 # key[1] + vbroadcasti128 16($key),$xt3 # key[2] + vbroadcasti128 ($counter),$xd3 # key[3] + lea 0x100(%rsp),%rcx # size optimization + lea 0x200(%rsp),%rax # size optimization + lea .Lrot16(%rip),%r10 + lea .Lrot24(%rip),%r11 + + vpshufd \$0x00,$xa3,$xa0 # smash key by lanes... + vpshufd \$0x55,$xa3,$xa1 + vmovdqa $xa0,0x80-0x100(%rcx) # ... and offload + vpshufd \$0xaa,$xa3,$xa2 + vmovdqa $xa1,0xa0-0x100(%rcx) + vpshufd \$0xff,$xa3,$xa3 + vmovdqa $xa2,0xc0-0x100(%rcx) + vmovdqa $xa3,0xe0-0x100(%rcx) + + vpshufd \$0x00,$xb3,$xb0 + vpshufd \$0x55,$xb3,$xb1 + vmovdqa $xb0,0x100-0x100(%rcx) + vpshufd \$0xaa,$xb3,$xb2 + vmovdqa $xb1,0x120-0x100(%rcx) + vpshufd \$0xff,$xb3,$xb3 + vmovdqa $xb2,0x140-0x100(%rcx) + vmovdqa $xb3,0x160-0x100(%rcx) + + vpshufd \$0x00,$xt3,$xt0 # "xc0" + vpshufd \$0x55,$xt3,$xt1 # "xc1" + vmovdqa $xt0,0x180-0x200(%rax) + vpshufd \$0xaa,$xt3,$xt2 # "xc2" + vmovdqa $xt1,0x1a0-0x200(%rax) + vpshufd \$0xff,$xt3,$xt3 # "xc3" + vmovdqa $xt2,0x1c0-0x200(%rax) + vmovdqa $xt3,0x1e0-0x200(%rax) + + vpshufd \$0x00,$xd3,$xd0 + vpshufd \$0x55,$xd3,$xd1 + vpaddd .Lincy(%rip),$xd0,$xd0 # don't save counters yet + vpshufd \$0xaa,$xd3,$xd2 + vmovdqa $xd1,0x220-0x200(%rax) + vpshufd \$0xff,$xd3,$xd3 + vmovdqa $xd2,0x240-0x200(%rax) + vmovdqa $xd3,0x260-0x200(%rax) + + jmp .Loop_enter8x + +.align 32 +.Loop_outer8x: + vmovdqa 0x80-0x100(%rcx),$xa0 # re-load smashed key + vmovdqa 0xa0-0x100(%rcx),$xa1 + vmovdqa 0xc0-0x100(%rcx),$xa2 + vmovdqa 0xe0-0x100(%rcx),$xa3 + vmovdqa 0x100-0x100(%rcx),$xb0 + vmovdqa 0x120-0x100(%rcx),$xb1 + vmovdqa 0x140-0x100(%rcx),$xb2 + vmovdqa 0x160-0x100(%rcx),$xb3 + vmovdqa 0x180-0x200(%rax),$xt0 # "xc0" + vmovdqa 0x1a0-0x200(%rax),$xt1 # "xc1" + vmovdqa 0x1c0-0x200(%rax),$xt2 # "xc2" + vmovdqa 0x1e0-0x200(%rax),$xt3 # "xc3" + vmovdqa 0x200-0x200(%rax),$xd0 + vmovdqa 0x220-0x200(%rax),$xd1 + vmovdqa 0x240-0x200(%rax),$xd2 + vmovdqa 0x260-0x200(%rax),$xd3 + vpaddd .Leight(%rip),$xd0,$xd0 # next SIMD counters + +.Loop_enter8x: + vmovdqa $xt2,0x40(%rsp) # SIMD equivalent of "@x[10]" + vmovdqa $xt3,0x60(%rsp) # SIMD equivalent of "@x[11]" + vbroadcasti128 (%r10),$xt3 + vmovdqa $xd0,0x200-0x200(%rax) # save SIMD counters + mov \$10,%eax + jmp .Loop8x + +.align 32 +.Loop8x: +___ + foreach (&AVX2_lane_ROUND(0, 4, 8,12)) { eval; } + foreach (&AVX2_lane_ROUND(0, 5,10,15)) { eval; } +$code.=<<___; + dec %eax + jnz .Loop8x + + lea 0x200(%rsp),%rax # size optimization + vpaddd 0x80-0x100(%rcx),$xa0,$xa0 # accumulate key + vpaddd 0xa0-0x100(%rcx),$xa1,$xa1 + vpaddd 0xc0-0x100(%rcx),$xa2,$xa2 + vpaddd 0xe0-0x100(%rcx),$xa3,$xa3 + + vpunpckldq $xa1,$xa0,$xt2 # "de-interlace" data + vpunpckldq $xa3,$xa2,$xt3 + vpunpckhdq $xa1,$xa0,$xa0 + vpunpckhdq $xa3,$xa2,$xa2 + vpunpcklqdq $xt3,$xt2,$xa1 # "a0" + vpunpckhqdq $xt3,$xt2,$xt2 # "a1" + vpunpcklqdq $xa2,$xa0,$xa3 # "a2" + vpunpckhqdq $xa2,$xa0,$xa0 # "a3" +___ + ($xa0,$xa1,$xa2,$xa3,$xt2)=($xa1,$xt2,$xa3,$xa0,$xa2); +$code.=<<___; + vpaddd 0x100-0x100(%rcx),$xb0,$xb0 + vpaddd 0x120-0x100(%rcx),$xb1,$xb1 + vpaddd 0x140-0x100(%rcx),$xb2,$xb2 + vpaddd 0x160-0x100(%rcx),$xb3,$xb3 + + vpunpckldq $xb1,$xb0,$xt2 + vpunpckldq $xb3,$xb2,$xt3 + vpunpckhdq $xb1,$xb0,$xb0 + vpunpckhdq $xb3,$xb2,$xb2 + vpunpcklqdq $xt3,$xt2,$xb1 # "b0" + vpunpckhqdq $xt3,$xt2,$xt2 # "b1" + vpunpcklqdq $xb2,$xb0,$xb3 # "b2" + vpunpckhqdq $xb2,$xb0,$xb0 # "b3" +___ + ($xb0,$xb1,$xb2,$xb3,$xt2)=($xb1,$xt2,$xb3,$xb0,$xb2); +$code.=<<___; + vperm2i128 \$0x20,$xb0,$xa0,$xt3 # "de-interlace" further + vperm2i128 \$0x31,$xb0,$xa0,$xb0 + vperm2i128 \$0x20,$xb1,$xa1,$xa0 + vperm2i128 \$0x31,$xb1,$xa1,$xb1 + vperm2i128 \$0x20,$xb2,$xa2,$xa1 + vperm2i128 \$0x31,$xb2,$xa2,$xb2 + vperm2i128 \$0x20,$xb3,$xa3,$xa2 + vperm2i128 \$0x31,$xb3,$xa3,$xb3 +___ + ($xa0,$xa1,$xa2,$xa3,$xt3)=($xt3,$xa0,$xa1,$xa2,$xa3); + my ($xc0,$xc1,$xc2,$xc3)=($xt0,$xt1,$xa0,$xa1); +$code.=<<___; + vmovdqa $xa0,0x00(%rsp) # offload $xaN + vmovdqa $xa1,0x20(%rsp) + vmovdqa 0x40(%rsp),$xc2 # $xa0 + vmovdqa 0x60(%rsp),$xc3 # $xa1 + + vpaddd 0x180-0x200(%rax),$xc0,$xc0 + vpaddd 0x1a0-0x200(%rax),$xc1,$xc1 + vpaddd 0x1c0-0x200(%rax),$xc2,$xc2 + vpaddd 0x1e0-0x200(%rax),$xc3,$xc3 + + vpunpckldq $xc1,$xc0,$xt2 + vpunpckldq $xc3,$xc2,$xt3 + vpunpckhdq $xc1,$xc0,$xc0 + vpunpckhdq $xc3,$xc2,$xc2 + vpunpcklqdq $xt3,$xt2,$xc1 # "c0" + vpunpckhqdq $xt3,$xt2,$xt2 # "c1" + vpunpcklqdq $xc2,$xc0,$xc3 # "c2" + vpunpckhqdq $xc2,$xc0,$xc0 # "c3" +___ + ($xc0,$xc1,$xc2,$xc3,$xt2)=($xc1,$xt2,$xc3,$xc0,$xc2); +$code.=<<___; + vpaddd 0x200-0x200(%rax),$xd0,$xd0 + vpaddd 0x220-0x200(%rax),$xd1,$xd1 + vpaddd 0x240-0x200(%rax),$xd2,$xd2 + vpaddd 0x260-0x200(%rax),$xd3,$xd3 + + vpunpckldq $xd1,$xd0,$xt2 + vpunpckldq $xd3,$xd2,$xt3 + vpunpckhdq $xd1,$xd0,$xd0 + vpunpckhdq $xd3,$xd2,$xd2 + vpunpcklqdq $xt3,$xt2,$xd1 # "d0" + vpunpckhqdq $xt3,$xt2,$xt2 # "d1" + vpunpcklqdq $xd2,$xd0,$xd3 # "d2" + vpunpckhqdq $xd2,$xd0,$xd0 # "d3" +___ + ($xd0,$xd1,$xd2,$xd3,$xt2)=($xd1,$xt2,$xd3,$xd0,$xd2); +$code.=<<___; + vperm2i128 \$0x20,$xd0,$xc0,$xt3 # "de-interlace" further + vperm2i128 \$0x31,$xd0,$xc0,$xd0 + vperm2i128 \$0x20,$xd1,$xc1,$xc0 + vperm2i128 \$0x31,$xd1,$xc1,$xd1 + vperm2i128 \$0x20,$xd2,$xc2,$xc1 + vperm2i128 \$0x31,$xd2,$xc2,$xd2 + vperm2i128 \$0x20,$xd3,$xc3,$xc2 + vperm2i128 \$0x31,$xd3,$xc3,$xd3 +___ + ($xc0,$xc1,$xc2,$xc3,$xt3)=($xt3,$xc0,$xc1,$xc2,$xc3); + ($xb0,$xb1,$xb2,$xb3,$xc0,$xc1,$xc2,$xc3)= + ($xc0,$xc1,$xc2,$xc3,$xb0,$xb1,$xb2,$xb3); + ($xa0,$xa1)=($xt2,$xt3); +$code.=<<___; + vmovdqa 0x00(%rsp),$xa0 # $xaN was offloaded, remember? + vmovdqa 0x20(%rsp),$xa1 + + cmp \$64*8,$len + jb .Ltail8x + + vpxor 0x00($inp),$xa0,$xa0 # xor with input + vpxor 0x20($inp),$xb0,$xb0 + vpxor 0x40($inp),$xc0,$xc0 + vpxor 0x60($inp),$xd0,$xd0 + lea 0x80($inp),$inp # size optimization + vmovdqu $xa0,0x00($out) + vmovdqu $xb0,0x20($out) + vmovdqu $xc0,0x40($out) + vmovdqu $xd0,0x60($out) + lea 0x80($out),$out # size optimization + + vpxor 0x00($inp),$xa1,$xa1 + vpxor 0x20($inp),$xb1,$xb1 + vpxor 0x40($inp),$xc1,$xc1 + vpxor 0x60($inp),$xd1,$xd1 + lea 0x80($inp),$inp # size optimization + vmovdqu $xa1,0x00($out) + vmovdqu $xb1,0x20($out) + vmovdqu $xc1,0x40($out) + vmovdqu $xd1,0x60($out) + lea 0x80($out),$out # size optimization + + vpxor 0x00($inp),$xa2,$xa2 + vpxor 0x20($inp),$xb2,$xb2 + vpxor 0x40($inp),$xc2,$xc2 + vpxor 0x60($inp),$xd2,$xd2 + lea 0x80($inp),$inp # size optimization + vmovdqu $xa2,0x00($out) + vmovdqu $xb2,0x20($out) + vmovdqu $xc2,0x40($out) + vmovdqu $xd2,0x60($out) + lea 0x80($out),$out # size optimization + + vpxor 0x00($inp),$xa3,$xa3 + vpxor 0x20($inp),$xb3,$xb3 + vpxor 0x40($inp),$xc3,$xc3 + vpxor 0x60($inp),$xd3,$xd3 + lea 0x80($inp),$inp # size optimization + vmovdqu $xa3,0x00($out) + vmovdqu $xb3,0x20($out) + vmovdqu $xc3,0x40($out) + vmovdqu $xd3,0x60($out) + lea 0x80($out),$out # size optimization + + sub \$64*8,$len + jnz .Loop_outer8x + + jmp .Ldone8x + +.Ltail8x: + cmp \$448,$len + jae .L448_or_more8x + cmp \$384,$len + jae .L384_or_more8x + cmp \$320,$len + jae .L320_or_more8x + cmp \$256,$len + jae .L256_or_more8x + cmp \$192,$len + jae .L192_or_more8x + cmp \$128,$len + jae .L128_or_more8x + cmp \$64,$len + jae .L64_or_more8x + + xor %r10,%r10 + vmovdqa $xa0,0x00(%rsp) + vmovdqa $xb0,0x20(%rsp) + jmp .Loop_tail8x + +.align 32 +.L64_or_more8x: + vpxor 0x00($inp),$xa0,$xa0 # xor with input + vpxor 0x20($inp),$xb0,$xb0 + vmovdqu $xa0,0x00($out) + vmovdqu $xb0,0x20($out) + je .Ldone8x + + lea 0x40($inp),$inp # inp+=64*1 + xor %r10,%r10 + vmovdqa $xc0,0x00(%rsp) + lea 0x40($out),$out # out+=64*1 + sub \$64,$len # len-=64*1 + vmovdqa $xd0,0x20(%rsp) + jmp .Loop_tail8x + +.align 32 +.L128_or_more8x: + vpxor 0x00($inp),$xa0,$xa0 # xor with input + vpxor 0x20($inp),$xb0,$xb0 + vpxor 0x40($inp),$xc0,$xc0 + vpxor 0x60($inp),$xd0,$xd0 + vmovdqu $xa0,0x00($out) + vmovdqu $xb0,0x20($out) + vmovdqu $xc0,0x40($out) + vmovdqu $xd0,0x60($out) + je .Ldone8x + + lea 0x80($inp),$inp # inp+=64*2 + xor %r10,%r10 + vmovdqa $xa1,0x00(%rsp) + lea 0x80($out),$out # out+=64*2 + sub \$128,$len # len-=64*2 + vmovdqa $xb1,0x20(%rsp) + jmp .Loop_tail8x + +.align 32 +.L192_or_more8x: + vpxor 0x00($inp),$xa0,$xa0 # xor with input + vpxor 0x20($inp),$xb0,$xb0 + vpxor 0x40($inp),$xc0,$xc0 + vpxor 0x60($inp),$xd0,$xd0 + vpxor 0x80($inp),$xa1,$xa1 + vpxor 0xa0($inp),$xb1,$xb1 + vmovdqu $xa0,0x00($out) + vmovdqu $xb0,0x20($out) + vmovdqu $xc0,0x40($out) + vmovdqu $xd0,0x60($out) + vmovdqu $xa1,0x80($out) + vmovdqu $xb1,0xa0($out) + je .Ldone8x + + lea 0xc0($inp),$inp # inp+=64*3 + xor %r10,%r10 + vmovdqa $xc1,0x00(%rsp) + lea 0xc0($out),$out # out+=64*3 + sub \$192,$len # len-=64*3 + vmovdqa $xd1,0x20(%rsp) + jmp .Loop_tail8x + +.align 32 +.L256_or_more8x: + vpxor 0x00($inp),$xa0,$xa0 # xor with input + vpxor 0x20($inp),$xb0,$xb0 + vpxor 0x40($inp),$xc0,$xc0 + vpxor 0x60($inp),$xd0,$xd0 + vpxor 0x80($inp),$xa1,$xa1 + vpxor 0xa0($inp),$xb1,$xb1 + vpxor 0xc0($inp),$xc1,$xc1 + vpxor 0xe0($inp),$xd1,$xd1 + vmovdqu $xa0,0x00($out) + vmovdqu $xb0,0x20($out) + vmovdqu $xc0,0x40($out) + vmovdqu $xd0,0x60($out) + vmovdqu $xa1,0x80($out) + vmovdqu $xb1,0xa0($out) + vmovdqu $xc1,0xc0($out) + vmovdqu $xd1,0xe0($out) + je .Ldone8x + + lea 0x100($inp),$inp # inp+=64*4 + xor %r10,%r10 + vmovdqa $xa2,0x00(%rsp) + lea 0x100($out),$out # out+=64*4 + sub \$256,$len # len-=64*4 + vmovdqa $xb2,0x20(%rsp) + jmp .Loop_tail8x + +.align 32 +.L320_or_more8x: + vpxor 0x00($inp),$xa0,$xa0 # xor with input + vpxor 0x20($inp),$xb0,$xb0 + vpxor 0x40($inp),$xc0,$xc0 + vpxor 0x60($inp),$xd0,$xd0 + vpxor 0x80($inp),$xa1,$xa1 + vpxor 0xa0($inp),$xb1,$xb1 + vpxor 0xc0($inp),$xc1,$xc1 + vpxor 0xe0($inp),$xd1,$xd1 + vpxor 0x100($inp),$xa2,$xa2 + vpxor 0x120($inp),$xb2,$xb2 + vmovdqu $xa0,0x00($out) + vmovdqu $xb0,0x20($out) + vmovdqu $xc0,0x40($out) + vmovdqu $xd0,0x60($out) + vmovdqu $xa1,0x80($out) + vmovdqu $xb1,0xa0($out) + vmovdqu $xc1,0xc0($out) + vmovdqu $xd1,0xe0($out) + vmovdqu $xa2,0x100($out) + vmovdqu $xb2,0x120($out) + je .Ldone8x + + lea 0x140($inp),$inp # inp+=64*5 + xor %r10,%r10 + vmovdqa $xc2,0x00(%rsp) + lea 0x140($out),$out # out+=64*5 + sub \$320,$len # len-=64*5 + vmovdqa $xd2,0x20(%rsp) + jmp .Loop_tail8x + +.align 32 +.L384_or_more8x: + vpxor 0x00($inp),$xa0,$xa0 # xor with input + vpxor 0x20($inp),$xb0,$xb0 + vpxor 0x40($inp),$xc0,$xc0 + vpxor 0x60($inp),$xd0,$xd0 + vpxor 0x80($inp),$xa1,$xa1 + vpxor 0xa0($inp),$xb1,$xb1 + vpxor 0xc0($inp),$xc1,$xc1 + vpxor 0xe0($inp),$xd1,$xd1 + vpxor 0x100($inp),$xa2,$xa2 + vpxor 0x120($inp),$xb2,$xb2 + vpxor 0x140($inp),$xc2,$xc2 + vpxor 0x160($inp),$xd2,$xd2 + vmovdqu $xa0,0x00($out) + vmovdqu $xb0,0x20($out) + vmovdqu $xc0,0x40($out) + vmovdqu $xd0,0x60($out) + vmovdqu $xa1,0x80($out) + vmovdqu $xb1,0xa0($out) + vmovdqu $xc1,0xc0($out) + vmovdqu $xd1,0xe0($out) + vmovdqu $xa2,0x100($out) + vmovdqu $xb2,0x120($out) + vmovdqu $xc2,0x140($out) + vmovdqu $xd2,0x160($out) + je .Ldone8x + + lea 0x180($inp),$inp # inp+=64*6 + xor %r10,%r10 + vmovdqa $xa3,0x00(%rsp) + lea 0x180($out),$out # out+=64*6 + sub \$384,$len # len-=64*6 + vmovdqa $xb3,0x20(%rsp) + jmp .Loop_tail8x + +.align 32 +.L448_or_more8x: + vpxor 0x00($inp),$xa0,$xa0 # xor with input + vpxor 0x20($inp),$xb0,$xb0 + vpxor 0x40($inp),$xc0,$xc0 + vpxor 0x60($inp),$xd0,$xd0 + vpxor 0x80($inp),$xa1,$xa1 + vpxor 0xa0($inp),$xb1,$xb1 + vpxor 0xc0($inp),$xc1,$xc1 + vpxor 0xe0($inp),$xd1,$xd1 + vpxor 0x100($inp),$xa2,$xa2 + vpxor 0x120($inp),$xb2,$xb2 + vpxor 0x140($inp),$xc2,$xc2 + vpxor 0x160($inp),$xd2,$xd2 + vpxor 0x180($inp),$xa3,$xa3 + vpxor 0x1a0($inp),$xb3,$xb3 + vmovdqu $xa0,0x00($out) + vmovdqu $xb0,0x20($out) + vmovdqu $xc0,0x40($out) + vmovdqu $xd0,0x60($out) + vmovdqu $xa1,0x80($out) + vmovdqu $xb1,0xa0($out) + vmovdqu $xc1,0xc0($out) + vmovdqu $xd1,0xe0($out) + vmovdqu $xa2,0x100($out) + vmovdqu $xb2,0x120($out) + vmovdqu $xc2,0x140($out) + vmovdqu $xd2,0x160($out) + vmovdqu $xa3,0x180($out) + vmovdqu $xb3,0x1a0($out) + je .Ldone8x + + lea 0x1c0($inp),$inp # inp+=64*7 + xor %r10,%r10 + vmovdqa $xc3,0x00(%rsp) + lea 0x1c0($out),$out # out+=64*7 + sub \$448,$len # len-=64*7 + vmovdqa $xd3,0x20(%rsp) + +.Loop_tail8x: + movzb ($inp,%r10),%eax + movzb (%rsp,%r10),%ecx + lea 1(%r10),%r10 + xor %ecx,%eax + mov %al,-1($out,%r10) + dec $len + jnz .Loop_tail8x + +.Ldone8x: + vzeroall +___ +$code.=<<___ if ($win64); + movaps -0xa8(%r9),%xmm6 + movaps -0x98(%r9),%xmm7 + movaps -0x88(%r9),%xmm8 + movaps -0x78(%r9),%xmm9 + movaps -0x68(%r9),%xmm10 + movaps -0x58(%r9),%xmm11 + movaps -0x48(%r9),%xmm12 + movaps -0x38(%r9),%xmm13 + movaps -0x28(%r9),%xmm14 + movaps -0x18(%r9),%xmm15 +___ +$code.=<<___; + lea (%r9),%rsp +.cfi_def_cfa_register rsp +.L8x_epilogue: + ret +.cfi_endproc +.size ChaCha20_8x,.-ChaCha20_8x +___ +} + +######################################################################## +# AVX512 code paths were removed + +# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame, +# CONTEXT *context,DISPATCHER_CONTEXT *disp) +if ($win64) { +$rec="%rcx"; +$frame="%rdx"; +$context="%r8"; +$disp="%r9"; + +$code.=<<___; +.extern __imp_RtlVirtualUnwind +.type se_handler,\@abi-omnipotent +.align 16 +se_handler: + push %rsi + push %rdi + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + pushfq + sub \$64,%rsp + + mov 120($context),%rax # pull context->Rax + mov 248($context),%rbx # pull context->Rip + + mov 8($disp),%rsi # disp->ImageBase + mov 56($disp),%r11 # disp->HandlerData + + lea .Lctr32_body(%rip),%r10 + cmp %r10,%rbx # context->Rip<.Lprologue + jb .Lcommon_seh_tail + + mov 152($context),%rax # pull context->Rsp + + lea .Lno_data(%rip),%r10 # epilogue label + cmp %r10,%rbx # context->Rip>=.Lepilogue + jae .Lcommon_seh_tail + + lea 64+24+48(%rax),%rax + + mov -8(%rax),%rbx + mov -16(%rax),%rbp + mov -24(%rax),%r12 + mov -32(%rax),%r13 + mov -40(%rax),%r14 + mov -48(%rax),%r15 + mov %rbx,144($context) # restore context->Rbx + mov %rbp,160($context) # restore context->Rbp + mov %r12,216($context) # restore context->R12 + mov %r13,224($context) # restore context->R13 + mov %r14,232($context) # restore context->R14 + mov %r15,240($context) # restore context->R14 + +.Lcommon_seh_tail: + mov 8(%rax),%rdi + mov 16(%rax),%rsi + mov %rax,152($context) # restore context->Rsp + mov %rsi,168($context) # restore context->Rsi + mov %rdi,176($context) # restore context->Rdi + + mov 40($disp),%rdi # disp->ContextRecord + mov $context,%rsi # context + mov \$154,%ecx # sizeof(CONTEXT) + .long 0xa548f3fc # cld; rep movsq + + mov $disp,%rsi + xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER + mov 8(%rsi),%rdx # arg2, disp->ImageBase + mov 0(%rsi),%r8 # arg3, disp->ControlPc + mov 16(%rsi),%r9 # arg4, disp->FunctionEntry + mov 40(%rsi),%r10 # disp->ContextRecord + lea 56(%rsi),%r11 # &disp->HandlerData + lea 24(%rsi),%r12 # &disp->EstablisherFrame + mov %r10,32(%rsp) # arg5 + mov %r11,40(%rsp) # arg6 + mov %r12,48(%rsp) # arg7 + mov %rcx,56(%rsp) # arg8, (NULL) + call *__imp_RtlVirtualUnwind(%rip) + + mov \$1,%eax # ExceptionContinueSearch + add \$64,%rsp + popfq + pop %r15 + pop %r14 + pop %r13 + pop %r12 + pop %rbp + pop %rbx + pop %rdi + pop %rsi + ret +.size se_handler,.-se_handler + +.type ssse3_handler,\@abi-omnipotent +.align 16 +ssse3_handler: + push %rsi + push %rdi + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + pushfq + sub \$64,%rsp + + mov 120($context),%rax # pull context->Rax + mov 248($context),%rbx # pull context->Rip + + mov 8($disp),%rsi # disp->ImageBase + mov 56($disp),%r11 # disp->HandlerData + + mov 0(%r11),%r10d # HandlerData[0] + lea (%rsi,%r10),%r10 # prologue label + cmp %r10,%rbx # context->RipR9 + + mov 4(%r11),%r10d # HandlerData[1] + lea (%rsi,%r10),%r10 # epilogue label + cmp %r10,%rbx # context->Rip>=epilogue label + jae .Lcommon_seh_tail + + lea -0x28(%rax),%rsi + lea 512($context),%rdi # &context.Xmm6 + mov \$4,%ecx + .long 0xa548f3fc # cld; rep movsq + + jmp .Lcommon_seh_tail +.size ssse3_handler,.-ssse3_handler + +.type full_handler,\@abi-omnipotent +.align 16 +full_handler: + push %rsi + push %rdi + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + pushfq + sub \$64,%rsp + + mov 120($context),%rax # pull context->Rax + mov 248($context),%rbx # pull context->Rip + + mov 8($disp),%rsi # disp->ImageBase + mov 56($disp),%r11 # disp->HandlerData + + mov 0(%r11),%r10d # HandlerData[0] + lea (%rsi,%r10),%r10 # prologue label + cmp %r10,%rbx # context->RipR9 + + mov 4(%r11),%r10d # HandlerData[1] + lea (%rsi,%r10),%r10 # epilogue label + cmp %r10,%rbx # context->Rip>=epilogue label + jae .Lcommon_seh_tail + + lea -0xa8(%rax),%rsi + lea 512($context),%rdi # &context.Xmm6 + mov \$20,%ecx + .long 0xa548f3fc # cld; rep movsq + + jmp .Lcommon_seh_tail +.size full_handler,.-full_handler + +.section .pdata +.align 4 + .rva .LSEH_begin_GFp_ChaCha20_ctr32 + .rva .LSEH_end_GFp_ChaCha20_ctr32 + .rva .LSEH_info_GFp_ChaCha20_ctr32 + + .rva .LSEH_begin_ChaCha20_ssse3 + .rva .LSEH_end_ChaCha20_ssse3 + .rva .LSEH_info_ChaCha20_ssse3 + + .rva .LSEH_begin_ChaCha20_4x + .rva .LSEH_end_ChaCha20_4x + .rva .LSEH_info_ChaCha20_4x +___ +$code.=<<___ if ($avx>1); + .rva .LSEH_begin_ChaCha20_8x + .rva .LSEH_end_ChaCha20_8x + .rva .LSEH_info_ChaCha20_8x +___ +$code.=<<___; +.section .xdata +.align 8 +.LSEH_info_GFp_ChaCha20_ctr32: + .byte 9,0,0,0 + .rva se_handler + +.LSEH_info_ChaCha20_ssse3: + .byte 9,0,0,0 + .rva ssse3_handler + .rva .Lssse3_body,.Lssse3_epilogue + +.LSEH_info_ChaCha20_4x: + .byte 9,0,0,0 + .rva full_handler + .rva .L4x_body,.L4x_epilogue +___ +$code.=<<___ if ($avx>1); +.LSEH_info_ChaCha20_8x: + .byte 9,0,0,0 + .rva full_handler + .rva .L8x_body,.L8x_epilogue # HandlerData[] +___ +} + +foreach (split("\n",$code)) { + s/\`([^\`]*)\`/eval $1/ge; + + s/%x#%[yz]/%x/g; # "down-shift" + + print $_,"\n"; +} + +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl b/vendor/ring/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl new file mode 100644 index 00000000..017570b8 --- /dev/null +++ b/vendor/ring/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl @@ -0,0 +1,2561 @@ +#!/usr/bin/env perl + +# Copyright (c) 2015, CloudFlare Ltd. +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +############################################################################## +# # +# Author: Vlad Krasnov # +# # +############################################################################## + +$flavour = shift; +$output = shift; +if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } + +$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/); + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or +die "can't locate x86_64-xlate.pl"; + +open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""; +*STDOUT=*OUT; + +$avx = 2; + +$code.=<<___; +.text +.extern GFp_ia32cap_P + +chacha20_poly1305_constants: + +.align 64 +.Lchacha20_consts: +.byte 'e','x','p','a','n','d',' ','3','2','-','b','y','t','e',' ','k' +.byte 'e','x','p','a','n','d',' ','3','2','-','b','y','t','e',' ','k' +.Lrol8: +.byte 3,0,1,2, 7,4,5,6, 11,8,9,10, 15,12,13,14 +.byte 3,0,1,2, 7,4,5,6, 11,8,9,10, 15,12,13,14 +.Lrol16: +.byte 2,3,0,1, 6,7,4,5, 10,11,8,9, 14,15,12,13 +.byte 2,3,0,1, 6,7,4,5, 10,11,8,9, 14,15,12,13 +.Lavx2_init: +.long 0,0,0,0 +.Lsse_inc: +.long 1,0,0,0 +.Lavx2_inc: +.long 2,0,0,0,2,0,0,0 +.Lclamp: +.quad 0x0FFFFFFC0FFFFFFF, 0x0FFFFFFC0FFFFFFC +.quad 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF +.align 16 +.Land_masks: +.byte 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00 +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00 +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00 +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00 +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00 +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00 +.byte 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff +___ + +my ($oup,$inp,$inl,$adp,$keyp,$itr1,$itr2,$adl)=("%rdi","%rsi","%rbx","%rcx","%r9","%rcx","%r8","%r8"); +my ($acc0,$acc1,$acc2)=map("%r$_",(10..12)); +my ($t0,$t1,$t2,$t3)=("%r13","%r14","%r15","%r9"); +my ($A0,$A1,$A2,$A3,$B0,$B1,$B2,$B3,$C0,$C1,$C2,$C3,$D0,$D1,$D2,$D3)=map("%xmm$_",(0..15)); +my ($T0,$T1,$T2,$T3)=($A3,$B3,$C3,$D3); +my $xmm_storage = 0; +if ($win64) { + $xmm_storage = 10*16; +} +my $xmm_store="0*16(%rbp)"; +my $r_store="$xmm_storage+0*16(%rbp)"; +my $s_store="$xmm_storage+1*16(%rbp)"; +my $len_store="$xmm_storage+2*16(%rbp)"; +my $state1_store="$xmm_storage+3*16(%rbp)"; +my $state2_store="$xmm_storage+4*16(%rbp)"; +my $tmp_store="$xmm_storage+5*16(%rbp)"; +my $ctr0_store="$xmm_storage+6*16(%rbp)"; +my $ctr1_store="$xmm_storage+7*16(%rbp)"; +my $ctr2_store="$xmm_storage+8*16(%rbp)"; +my $ctr3_store="$xmm_storage+9*16(%rbp)"; + +sub chacha_qr { +my ($a,$b,$c,$d,$t,$dir)=@_; +$code.="movdqa $t, $tmp_store\n" if ($dir =~ /store/); +$code.="paddd $b, $a + pxor $a, $d + pshufb .Lrol16(%rip), $d + paddd $d, $c + pxor $c, $b + movdqa $b, $t + pslld \$12, $t + psrld \$20, $b + pxor $t, $b + paddd $b, $a + pxor $a, $d + pshufb .Lrol8(%rip), $d + paddd $d, $c + pxor $c, $b + movdqa $b, $t + pslld \$7, $t + psrld \$25, $b + pxor $t, $b\n"; +$code.="palignr \$4, $b, $b + palignr \$8, $c, $c + palignr \$12, $d, $d\n" if ($dir =~ /left/); +$code.="palignr \$12, $b, $b + palignr \$8, $c, $c + palignr \$4, $d, $d\n" if ($dir =~ /right/); +$code.="movdqa $tmp_store, $t\n" if ($dir =~ /load/); +} + +sub poly_add { +my ($src)=@_; +$code.="add 0+$src, $acc0 + adc 8+$src, $acc1 + adc \$1, $acc2\n"; +} + +sub poly_stage1 { +$code.="mov 0+$r_store, %rax + mov %rax, $t2 + mul $acc0 + mov %rax, $t0 + mov %rdx, $t1 + mov 0+$r_store, %rax + mul $acc1 + imulq $acc2, $t2 + add %rax, $t1 + adc %rdx, $t2\n"; +} + +sub poly_stage2 { +$code.="mov 8+$r_store, %rax + mov %rax, $t3 + mul $acc0 + add %rax, $t1 + adc \$0, %rdx + mov %rdx, $acc0 + mov 8+$r_store, %rax + mul $acc1 + add %rax, $t2 + adc \$0, %rdx\n"; +} + +sub poly_stage3 { +$code.="imulq $acc2, $t3 + add $acc0, $t2 + adc %rdx, $t3\n"; +} + +# At the beginning of the reduce stage t = [t3:t2:t1:t0] is a product of +# r = [r1:r0] and acc = [acc2:acc1:acc0] +# r is 124 bits at most (due to clamping) and acc is 131 bits at most +# (acc2 is at most 4 before the addition and can be at most 6 when we add in +# the next block) therefore t is at most 255 bits big, and t3 is 63 bits. +sub poly_reduce_stage { +$code.="mov $t0, $acc0 + mov $t1, $acc1 + mov $t2, $acc2 + and \$3, $acc2 # At this point acc2 is 2 bits at most (value of 3) + mov $t2, $t0 + and \$-4, $t0 + mov $t3, $t1 + shrd \$2, $t3, $t2 + shr \$2, $t3 + add $t0, $t2 + adc $t1, $t3 # No carry out since t3 is 61 bits and t1 is 63 bits + add $t2, $acc0 + adc $t3, $acc1 + adc \$0, $acc2\n"; # At this point acc2 has the value of 4 at most +} + +sub poly_mul { + &poly_stage1(); + &poly_stage2(); + &poly_stage3(); + &poly_reduce_stage(); +} + +sub prep_state { +my ($n)=@_; +$code.="movdqa .Lchacha20_consts(%rip), $A0 + movdqa $state1_store, $B0 + movdqa $state2_store, $C0\n"; +$code.="movdqa $A0, $A1 + movdqa $B0, $B1 + movdqa $C0, $C1\n" if ($n ge 2); +$code.="movdqa $A0, $A2 + movdqa $B0, $B2 + movdqa $C0, $C2\n" if ($n ge 3); +$code.="movdqa $A0, $A3 + movdqa $B0, $B3 + movdqa $C0, $C3\n" if ($n ge 4); +$code.="movdqa $ctr0_store, $D0 + paddd .Lsse_inc(%rip), $D0 + movdqa $D0, $ctr0_store\n" if ($n eq 1); +$code.="movdqa $ctr0_store, $D1 + paddd .Lsse_inc(%rip), $D1 + movdqa $D1, $D0 + paddd .Lsse_inc(%rip), $D0 + movdqa $D0, $ctr0_store + movdqa $D1, $ctr1_store\n" if ($n eq 2); +$code.="movdqa $ctr0_store, $D2 + paddd .Lsse_inc(%rip), $D2 + movdqa $D2, $D1 + paddd .Lsse_inc(%rip), $D1 + movdqa $D1, $D0 + paddd .Lsse_inc(%rip), $D0 + movdqa $D0, $ctr0_store + movdqa $D1, $ctr1_store + movdqa $D2, $ctr2_store\n" if ($n eq 3); +$code.="movdqa $ctr0_store, $D3 + paddd .Lsse_inc(%rip), $D3 + movdqa $D3, $D2 + paddd .Lsse_inc(%rip), $D2 + movdqa $D2, $D1 + paddd .Lsse_inc(%rip), $D1 + movdqa $D1, $D0 + paddd .Lsse_inc(%rip), $D0 + movdqa $D0, $ctr0_store + movdqa $D1, $ctr1_store + movdqa $D2, $ctr2_store + movdqa $D3, $ctr3_store\n" if ($n eq 4); +} + +sub finalize_state { +my ($n)=@_; +$code.="paddd .Lchacha20_consts(%rip), $A3 + paddd $state1_store, $B3 + paddd $state2_store, $C3 + paddd $ctr3_store, $D3\n" if ($n eq 4); +$code.="paddd .Lchacha20_consts(%rip), $A2 + paddd $state1_store, $B2 + paddd $state2_store, $C2 + paddd $ctr2_store, $D2\n" if ($n ge 3); +$code.="paddd .Lchacha20_consts(%rip), $A1 + paddd $state1_store, $B1 + paddd $state2_store, $C1 + paddd $ctr1_store, $D1\n" if ($n ge 2); +$code.="paddd .Lchacha20_consts(%rip), $A0 + paddd $state1_store, $B0 + paddd $state2_store, $C0 + paddd $ctr0_store, $D0\n"; +} + +sub xor_stream { +my ($A, $B, $C, $D, $offset)=@_; +$code.="movdqu 0*16 + $offset($inp), $A3 + movdqu 1*16 + $offset($inp), $B3 + movdqu 2*16 + $offset($inp), $C3 + movdqu 3*16 + $offset($inp), $D3 + pxor $A3, $A + pxor $B3, $B + pxor $C3, $C + pxor $D, $D3 + movdqu $A, 0*16 + $offset($oup) + movdqu $B, 1*16 + $offset($oup) + movdqu $C, 2*16 + $offset($oup) + movdqu $D3, 3*16 + $offset($oup)\n"; +} + +sub xor_stream_using_temp { +my ($A, $B, $C, $D, $offset, $temp)=@_; +$code.="movdqa $temp, $tmp_store + movdqu 0*16 + $offset($inp), $temp + pxor $A, $temp + movdqu $temp, 0*16 + $offset($oup) + movdqu 1*16 + $offset($inp), $temp + pxor $B, $temp + movdqu $temp, 1*16 + $offset($oup) + movdqu 2*16 + $offset($inp), $temp + pxor $C, $temp + movdqu $temp, 2*16 + $offset($oup) + movdqu 3*16 + $offset($inp), $temp + pxor $D, $temp + movdqu $temp, 3*16 + $offset($oup)\n"; +} + +sub gen_chacha_round { +my ($rot1, $rot2, $shift)=@_; +my $round=""; +$round.="movdqa $C0, $tmp_store\n" if ($rot1 eq 20); +$round.="movdqa $rot2, $C0 + paddd $B3, $A3 + paddd $B2, $A2 + paddd $B1, $A1 + paddd $B0, $A0 + pxor $A3, $D3 + pxor $A2, $D2 + pxor $A1, $D1 + pxor $A0, $D0 + pshufb $C0, $D3 + pshufb $C0, $D2 + pshufb $C0, $D1 + pshufb $C0, $D0 + movdqa $tmp_store, $C0 + paddd $D3, $C3 + paddd $D2, $C2 + paddd $D1, $C1 + paddd $D0, $C0 + pxor $C3, $B3 + pxor $C2, $B2 + pxor $C1, $B1 + pxor $C0, $B0 + movdqa $C0, $tmp_store + movdqa $B3, $C0 + psrld \$$rot1, $C0 + pslld \$32-$rot1, $B3 + pxor $C0, $B3 + movdqa $B2, $C0 + psrld \$$rot1, $C0 + pslld \$32-$rot1, $B2 + pxor $C0, $B2 + movdqa $B1, $C0 + psrld \$$rot1, $C0 + pslld \$32-$rot1, $B1 + pxor $C0, $B1 + movdqa $B0, $C0 + psrld \$$rot1, $C0 + pslld \$32-$rot1, $B0 + pxor $C0, $B0\n"; +($s1,$s2,$s3)=(4,8,12) if ($shift =~ /left/); +($s1,$s2,$s3)=(12,8,4) if ($shift =~ /right/); +$round.="movdqa $tmp_store, $C0 + palignr \$$s1, $B3, $B3 + palignr \$$s2, $C3, $C3 + palignr \$$s3, $D3, $D3 + palignr \$$s1, $B2, $B2 + palignr \$$s2, $C2, $C2 + palignr \$$s3, $D2, $D2 + palignr \$$s1, $B1, $B1 + palignr \$$s2, $C1, $C1 + palignr \$$s3, $D1, $D1 + palignr \$$s1, $B0, $B0 + palignr \$$s2, $C0, $C0 + palignr \$$s3, $D0, $D0\n" +if (($shift =~ /left/) || ($shift =~ /right/)); +return $round; +}; + +$chacha_body = &gen_chacha_round(20, ".Lrol16(%rip)") . + &gen_chacha_round(25, ".Lrol8(%rip)", "left") . + &gen_chacha_round(20, ".Lrol16(%rip)") . + &gen_chacha_round(25, ".Lrol8(%rip)", "right"); + +my @loop_body = split /\n/, $chacha_body; + +sub emit_body { +my ($n)=@_; + for (my $i=0; $i < $n; $i++) { + $code=$code.shift(@loop_body)."\n"; + }; +} + +{ +################################################################################ +# void poly_hash_ad_internal(); +$code.=" +.type poly_hash_ad_internal,\@abi-omnipotent +.align 64 +poly_hash_ad_internal: +.cfi_startproc +.cfi_def_cfa rsp, 8 + xor $acc0, $acc0 + xor $acc1, $acc1 + xor $acc2, $acc2 + cmp \$13, $itr2 + jne .Lhash_ad_loop +.Lpoly_fast_tls_ad: + # Special treatment for the TLS case of 13 bytes + mov ($adp), $acc0 + mov 5($adp), $acc1 + shr \$24, $acc1 + mov \$1, $acc2\n"; + &poly_mul(); $code.=" + ret +.Lhash_ad_loop: + # Hash in 16 byte chunk + cmp \$16, $itr2 + jb .Lhash_ad_tail\n"; + &poly_add("0($adp)"); + &poly_mul(); $code.=" + lea 1*16($adp), $adp + sub \$16, $itr2 + jmp .Lhash_ad_loop +.Lhash_ad_tail: + cmp \$0, $itr2 + je .Lhash_ad_done + # Hash last < 16 byte tail + xor $t0, $t0 + xor $t1, $t1 + xor $t2, $t2 + add $itr2, $adp +.Lhash_ad_tail_loop: + shld \$8, $t0, $t1 + shl \$8, $t0 + movzxb -1($adp), $t2 + xor $t2, $t0 + dec $adp + dec $itr2 + jne .Lhash_ad_tail_loop + + add $t0, $acc0 + adc $t1, $acc1 + adc \$1, $acc2\n"; + &poly_mul(); $code.=" + # Finished AD +.Lhash_ad_done: + ret +.cfi_endproc +.size poly_hash_ad_internal, .-poly_hash_ad_internal\n"; +} + +{ +################################################################################ +# void GFp_chacha20_poly1305_open(uint8_t *out_plaintext, const uint8_t *ciphertext, +# size_t plaintext_len, const uint8_t *ad, +# size_t ad_len, +# union chacha20_poly1305_open_data *aead_data) +# +$code.=" +.globl GFp_chacha20_poly1305_open +.type GFp_chacha20_poly1305_open,\@function,6 +.align 64 +GFp_chacha20_poly1305_open: +.cfi_startproc + push %rbp +.cfi_push %rbp + push %rbx +.cfi_push %rbx + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 + # We write the calculated authenticator back to keyp at the end, so save + # the pointer on the stack too. + push $keyp +.cfi_push $keyp + sub \$288 + $xmm_storage + 32, %rsp +.cfi_adjust_cfa_offset 288 + 32 + + lea 32(%rsp), %rbp + and \$-32, %rbp\n"; +$code.=" + movaps %xmm6,16*0+$xmm_store + movaps %xmm7,16*1+$xmm_store + movaps %xmm8,16*2+$xmm_store + movaps %xmm9,16*3+$xmm_store + movaps %xmm10,16*4+$xmm_store + movaps %xmm11,16*5+$xmm_store + movaps %xmm12,16*6+$xmm_store + movaps %xmm13,16*7+$xmm_store + movaps %xmm14,16*8+$xmm_store + movaps %xmm15,16*9+$xmm_store\n" if ($win64); +$code.=" + mov %rdx, $inl + mov $adl, 0+$len_store + mov $inl, 8+$len_store\n"; +$code.=" + mov GFp_ia32cap_P+8(%rip), %eax + and \$`(1<<5) + (1<<8)`, %eax # Check both BMI2 and AVX2 are present + xor \$`(1<<5) + (1<<8)`, %eax + jz chacha20_poly1305_open_avx2\n" if ($avx>1); +$code.=" + cmp \$128, $inl + jbe .Lopen_sse_128 + # For long buffers, prepare the poly key first + movdqa .Lchacha20_consts(%rip), $A0 + movdqu 0*16($keyp), $B0 + movdqu 1*16($keyp), $C0 + movdqu 2*16($keyp), $D0 + + movdqa $D0, $T1 + # Store on stack, to free keyp + movdqa $B0, $state1_store + movdqa $C0, $state2_store + movdqa $D0, $ctr0_store + mov \$10, $acc0 +.Lopen_sse_init_rounds:\n"; + &chacha_qr($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr($A0,$B0,$C0,$D0,$T0,"right"); $code.=" + dec $acc0 + jne .Lopen_sse_init_rounds + # A0|B0 hold the Poly1305 32-byte key, C0,D0 can be discarded + paddd .Lchacha20_consts(%rip), $A0 + paddd $state1_store, $B0 + # Clamp and store the key + pand .Lclamp(%rip), $A0 + movdqa $A0, $r_store + movdqa $B0, $s_store + # Hash + mov $adl, $itr2 + call poly_hash_ad_internal +.Lopen_sse_main_loop: + cmp \$16*16, $inl + jb .Lopen_sse_tail + # Load state, increment counter blocks\n"; + &prep_state(4); $code.=" + # There are 10 ChaCha20 iterations of 2QR each, so for 6 iterations we + # hash 2 blocks, and for the remaining 4 only 1 block - for a total of 16 + mov \$4, $itr1 + mov $inp, $itr2 +.Lopen_sse_main_loop_rounds:\n"; + &emit_body(20); + &poly_add("0($itr2)"); $code.=" + lea 2*8($itr2), $itr2\n"; + &emit_body(20); + &poly_stage1(); + &emit_body(20); + &poly_stage2(); + &emit_body(20); + &poly_stage3(); + &emit_body(20); + &poly_reduce_stage(); + foreach $l (@loop_body) {$code.=$l."\n";} + @loop_body = split /\n/, $chacha_body; $code.=" + dec $itr1 + jge .Lopen_sse_main_loop_rounds\n"; + &poly_add("0($itr2)"); + &poly_mul(); $code.=" + lea 2*8($itr2), $itr2 + cmp \$-6, $itr1 + jg .Lopen_sse_main_loop_rounds\n"; + &finalize_state(4); + &xor_stream_using_temp($A3, $B3, $C3, $D3, "0*16", $D0); + &xor_stream($A2, $B2, $C2, $D2, "4*16"); + &xor_stream($A1, $B1, $C1, $D1, "8*16"); + &xor_stream($A0, $B0, $C0, $tmp_store, "12*16"); $code.=" + lea 16*16($inp), $inp + lea 16*16($oup), $oup + sub \$16*16, $inl + jmp .Lopen_sse_main_loop +.Lopen_sse_tail: + # Handle the various tail sizes efficiently + test $inl, $inl + jz .Lopen_sse_finalize + cmp \$12*16, $inl + ja .Lopen_sse_tail_256 + cmp \$8*16, $inl + ja .Lopen_sse_tail_192 + cmp \$4*16, $inl + ja .Lopen_sse_tail_128\n"; +############################################################################### + # At most 64 bytes are left + &prep_state(1); $code.=" + xor $itr2, $itr2 + mov $inl, $itr1 + cmp \$16, $itr1 + jb .Lopen_sse_tail_64_rounds +.Lopen_sse_tail_64_rounds_and_x1hash: \n"; + &poly_add("0($inp,$itr2)"); + &poly_mul(); $code.=" + sub \$16, $itr1 +.Lopen_sse_tail_64_rounds: + add \$16, $itr2\n"; + &chacha_qr($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr($A0,$B0,$C0,$D0,$T0,"right"); $code.=" + cmp \$16, $itr1 + jae .Lopen_sse_tail_64_rounds_and_x1hash + cmp \$10*16, $itr2 + jne .Lopen_sse_tail_64_rounds\n"; + &finalize_state(1); $code.=" + jmp .Lopen_sse_tail_64_dec_loop +############################################################################### +.Lopen_sse_tail_128:\n"; + # 65 - 128 bytes are left + &prep_state(2); $code.=" + mov $inl, $itr1 + and \$-16, $itr1 + xor $itr2, $itr2 +.Lopen_sse_tail_128_rounds_and_x1hash: \n"; + &poly_add("0($inp,$itr2)"); + &poly_mul(); $code.=" +.Lopen_sse_tail_128_rounds: + add \$16, $itr2\n"; + &chacha_qr($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr($A1,$B1,$C1,$D1,$T0,"left"); + &chacha_qr($A0,$B0,$C0,$D0,$T0,"right"); + &chacha_qr($A1,$B1,$C1,$D1,$T0,"right");$code.=" + cmp $itr1, $itr2 + jb .Lopen_sse_tail_128_rounds_and_x1hash + cmp \$10*16, $itr2 + jne .Lopen_sse_tail_128_rounds\n"; + &finalize_state(2); + &xor_stream($A1, $B1, $C1, $D1, "0*16"); $code.=" + sub \$4*16, $inl + lea 4*16($inp), $inp + lea 4*16($oup), $oup + jmp .Lopen_sse_tail_64_dec_loop +############################################################################### +.Lopen_sse_tail_192:\n"; + # 129 - 192 bytes are left + &prep_state(3); $code.=" + mov $inl, $itr1 + mov \$10*16, $itr2 + cmp \$10*16, $itr1 + cmovg $itr2, $itr1 + and \$-16, $itr1 + xor $itr2, $itr2 +.Lopen_sse_tail_192_rounds_and_x1hash: \n"; + &poly_add("0($inp,$itr2)"); + &poly_mul(); $code.=" +.Lopen_sse_tail_192_rounds: + add \$16, $itr2\n"; + &chacha_qr($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr($A1,$B1,$C1,$D1,$T0,"left"); + &chacha_qr($A2,$B2,$C2,$D2,$T0,"left"); + &chacha_qr($A0,$B0,$C0,$D0,$T0,"right"); + &chacha_qr($A1,$B1,$C1,$D1,$T0,"right"); + &chacha_qr($A2,$B2,$C2,$D2,$T0,"right"); $code.=" + cmp $itr1, $itr2 + jb .Lopen_sse_tail_192_rounds_and_x1hash + cmp \$10*16, $itr2 + jne .Lopen_sse_tail_192_rounds + cmp \$11*16, $inl + jb .Lopen_sse_tail_192_finish\n"; + &poly_add("10*16($inp)"); + &poly_mul(); $code.=" + cmp \$12*16, $inl + jb .Lopen_sse_tail_192_finish\n"; + &poly_add("11*16($inp)"); + &poly_mul(); $code.=" +.Lopen_sse_tail_192_finish: \n"; + &finalize_state(3); + &xor_stream($A2, $B2, $C2, $D2, "0*16"); + &xor_stream($A1, $B1, $C1, $D1, "4*16"); $code.=" + sub \$8*16, $inl + lea 8*16($inp), $inp + lea 8*16($oup), $oup + jmp .Lopen_sse_tail_64_dec_loop +############################################################################### +.Lopen_sse_tail_256:\n"; + # 193 - 255 bytes are left + &prep_state(4); $code.=" + xor $itr2, $itr2 +.Lopen_sse_tail_256_rounds_and_x1hash: \n"; + &poly_add("0($inp,$itr2)"); + &chacha_qr($A0,$B0,$C0,$D0,$C3,"store_left"); + &chacha_qr($A1,$B1,$C1,$D1,$C3,"left"); + &chacha_qr($A2,$B2,$C2,$D2,$C3,"left_load"); + &poly_stage1(); + &chacha_qr($A3,$B3,$C3,$D3,$C1,"store_left_load"); + &poly_stage2(); + &chacha_qr($A0,$B0,$C0,$D0,$C3,"store_right"); + &chacha_qr($A1,$B1,$C1,$D1,$C3,"right"); + &poly_stage3(); + &chacha_qr($A2,$B2,$C2,$D2,$C3,"right_load"); + &poly_reduce_stage(); + &chacha_qr($A3,$B3,$C3,$D3,$C1,"store_right_load"); $code.=" + add \$16, $itr2 + cmp \$10*16, $itr2 + jb .Lopen_sse_tail_256_rounds_and_x1hash + + mov $inl, $itr1 + and \$-16, $itr1 +.Lopen_sse_tail_256_hash: \n"; + &poly_add("0($inp,$itr2)"); + &poly_mul(); $code.=" + add \$16, $itr2 + cmp $itr1, $itr2 + jb .Lopen_sse_tail_256_hash\n"; + &finalize_state(4); + &xor_stream_using_temp($A3, $B3, $C3, $D3, "0*16", $D0); + &xor_stream($A2, $B2, $C2, $D2, "4*16"); + &xor_stream($A1, $B1, $C1, $D1, "8*16"); $code.=" + movdqa $tmp_store, $D0 + sub \$12*16, $inl + lea 12*16($inp), $inp + lea 12*16($oup), $oup +############################################################################### + # Decrypt the remaining data, 16B at a time, using existing stream +.Lopen_sse_tail_64_dec_loop: + cmp \$16, $inl + jb .Lopen_sse_tail_16_init + sub \$16, $inl + movdqu ($inp), $T0 + pxor $T0, $A0 + movdqu $A0, ($oup) + lea 16($inp), $inp + lea 16($oup), $oup + movdqa $B0, $A0 + movdqa $C0, $B0 + movdqa $D0, $C0 + jmp .Lopen_sse_tail_64_dec_loop +.Lopen_sse_tail_16_init: + movdqa $A0, $A1 + + # Decrypt up to 16 bytes at the end. +.Lopen_sse_tail_16: + test $inl, $inl + jz .Lopen_sse_finalize + + # Read the final bytes into $T0. They need to be read in reverse order so + # that they end up in the correct order in $T0. + pxor $T0, $T0 + lea -1($inp,$inl), $inp + movq $inl, $itr2 +.Lopen_sse_tail_16_compose: + pslldq \$1, $T0 + pinsrb \$0, ($inp), $T0 + sub \$1, $inp + sub \$1, $itr2 + jnz .Lopen_sse_tail_16_compose + + movq $T0, $t0 + pextrq \$1, $T0, $t1 + # The final bytes of keystream are in $A1. + pxor $A1, $T0 + + # Copy the plaintext bytes out. +.Lopen_sse_tail_16_extract: + pextrb \$0, $T0, ($oup) + psrldq \$1, $T0 + add \$1, $oup + sub \$1, $inl + jne .Lopen_sse_tail_16_extract + + add $t0, $acc0 + adc $t1, $acc1 + adc \$1, $acc2\n"; + &poly_mul(); $code.=" + +.Lopen_sse_finalize:\n"; + &poly_add($len_store); + &poly_mul(); $code.=" + # Final reduce + mov $acc0, $t0 + mov $acc1, $t1 + mov $acc2, $t2 + sub \$-5, $acc0 + sbb \$-1, $acc1 + sbb \$3, $acc2 + cmovc $t0, $acc0 + cmovc $t1, $acc1 + cmovc $t2, $acc2 + # Add in s part of the key + add 0+$s_store, $acc0 + adc 8+$s_store, $acc1\n"; + +$code.=" + movaps 16*0+$xmm_store, %xmm6 + movaps 16*1+$xmm_store, %xmm7 + movaps 16*2+$xmm_store, %xmm8 + movaps 16*3+$xmm_store, %xmm9 + movaps 16*4+$xmm_store, %xmm10 + movaps 16*5+$xmm_store, %xmm11 + movaps 16*6+$xmm_store, %xmm12 + movaps 16*7+$xmm_store, %xmm13 + movaps 16*8+$xmm_store, %xmm14 + movaps 16*9+$xmm_store, %xmm15\n" if ($win64); +$code.=" +.cfi_remember_state + add \$288 + $xmm_storage + 32, %rsp +.cfi_adjust_cfa_offset -(288 + 32) + # The tag replaces the key on return + pop $keyp +.cfi_pop $keyp + mov $acc0, ($keyp) + mov $acc1, 8($keyp) + pop %r15 +.cfi_pop %r15 + pop %r14 +.cfi_pop %r14 + pop %r13 +.cfi_pop %r13 + pop %r12 +.cfi_pop %r12 + pop %rbx +.cfi_pop %rbx + pop %rbp +.cfi_pop %rbp + ret +############################################################################### +.Lopen_sse_128: +.cfi_restore_state + movdqu .Lchacha20_consts(%rip), $A0\nmovdqa $A0, $A1\nmovdqa $A0, $A2 + movdqu 0*16($keyp), $B0\nmovdqa $B0, $B1\nmovdqa $B0, $B2 + movdqu 1*16($keyp), $C0\nmovdqa $C0, $C1\nmovdqa $C0, $C2 + movdqu 2*16($keyp), $D0 + movdqa $D0, $D1\npaddd .Lsse_inc(%rip), $D1 + movdqa $D1, $D2\npaddd .Lsse_inc(%rip), $D2 + movdqa $B0, $T1\nmovdqa $C0, $T2\nmovdqa $D1, $T3 + mov \$10, $acc0 + +.Lopen_sse_128_rounds: \n"; + &chacha_qr($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr($A1,$B1,$C1,$D1,$T0,"left"); + &chacha_qr($A2,$B2,$C2,$D2,$T0,"left"); + &chacha_qr($A0,$B0,$C0,$D0,$T0,"right"); + &chacha_qr($A1,$B1,$C1,$D1,$T0,"right"); + &chacha_qr($A2,$B2,$C2,$D2,$T0,"right"); $code.=" + dec $acc0 + jnz .Lopen_sse_128_rounds + paddd .Lchacha20_consts(%rip), $A0 + paddd .Lchacha20_consts(%rip), $A1 + paddd .Lchacha20_consts(%rip), $A2 + paddd $T1, $B0\npaddd $T1, $B1\npaddd $T1, $B2 + paddd $T2, $C1\npaddd $T2, $C2 + paddd $T3, $D1 + paddd .Lsse_inc(%rip), $T3 + paddd $T3, $D2 + # Clamp and store the key + pand .Lclamp(%rip), $A0 + movdqa $A0, $r_store + movdqa $B0, $s_store + # Hash + mov $adl, $itr2 + call poly_hash_ad_internal +.Lopen_sse_128_xor_hash: + cmp \$16, $inl + jb .Lopen_sse_tail_16 + sub \$16, $inl\n"; + # Load for hashing + &poly_add("0*8($inp)"); $code.=" + # Load for decryption + movdqu 0*16($inp), $T0 + pxor $T0, $A1 + movdqu $A1, 0*16($oup) + lea 1*16($inp), $inp + lea 1*16($oup), $oup\n"; + &poly_mul(); $code.=" + # Shift the stream left + movdqa $B1, $A1 + movdqa $C1, $B1 + movdqa $D1, $C1 + movdqa $A2, $D1 + movdqa $B2, $A2 + movdqa $C2, $B2 + movdqa $D2, $C2 + jmp .Lopen_sse_128_xor_hash +.size GFp_chacha20_poly1305_open, .-GFp_chacha20_poly1305_open +.cfi_endproc + +################################################################################ +# void GFp_chacha20_poly1305_seal(uint8_t *out_ciphertext, const uint8_t *plaintext, +# size_t plaintext_len, const uint8_t *ad, +# size_t ad_len, +# union chacha20_poly1305_seal_data *data); +.globl GFp_chacha20_poly1305_seal +.type GFp_chacha20_poly1305_seal,\@function,6 +.align 64 +GFp_chacha20_poly1305_seal: +.cfi_startproc + push %rbp +.cfi_push %rbp + push %rbx +.cfi_push %rbx + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +# We write the calculated authenticator back to keyp at the end, so save +# the pointer on the stack too. + push $keyp +.cfi_push $keyp + sub \$288 + $xmm_storage + 32, %rsp +.cfi_adjust_cfa_offset 288 + 32 + lea 32(%rsp), %rbp + and \$-32, %rbp\n"; +$code.=" + movaps %xmm6,16*0+$xmm_store + movaps %xmm7,16*1+$xmm_store + movaps %xmm8,16*2+$xmm_store + movaps %xmm9,16*3+$xmm_store + movaps %xmm10,16*4+$xmm_store + movaps %xmm11,16*5+$xmm_store + movaps %xmm12,16*6+$xmm_store + movaps %xmm13,16*7+$xmm_store + movaps %xmm14,16*8+$xmm_store + movaps %xmm15,16*9+$xmm_store\n" if ($win64); +$code.=" + mov 56($keyp), $inl # extra_in_len + addq %rdx, $inl + mov $adl, 0+$len_store + mov $inl, 8+$len_store + mov %rdx, $inl\n"; +$code.=" + mov GFp_ia32cap_P+8(%rip), %eax + and \$`(1<<5) + (1<<8)`, %eax # Check both BMI2 and AVX2 are present + xor \$`(1<<5) + (1<<8)`, %eax + jz chacha20_poly1305_seal_avx2\n" if ($avx>1); +$code.=" + cmp \$128, $inl + jbe .Lseal_sse_128 + # For longer buffers, prepare the poly key + some stream + movdqa .Lchacha20_consts(%rip), $A0 + movdqu 0*16($keyp), $B0 + movdqu 1*16($keyp), $C0 + movdqu 2*16($keyp), $D0 + + movdqa $A0, $A1 + movdqa $A0, $A2 + movdqa $A0, $A3 + movdqa $B0, $B1 + movdqa $B0, $B2 + movdqa $B0, $B3 + movdqa $C0, $C1 + movdqa $C0, $C2 + movdqa $C0, $C3 + movdqa $D0, $D3 + paddd .Lsse_inc(%rip), $D0 + movdqa $D0, $D2 + paddd .Lsse_inc(%rip), $D0 + movdqa $D0, $D1 + paddd .Lsse_inc(%rip), $D0 + # Store on stack + movdqa $B0, $state1_store + movdqa $C0, $state2_store + movdqa $D0, $ctr0_store + movdqa $D1, $ctr1_store + movdqa $D2, $ctr2_store + movdqa $D3, $ctr3_store + mov \$10, $acc0 +.Lseal_sse_init_rounds: \n"; + foreach $l (@loop_body) {$code.=$l."\n";} + @loop_body = split /\n/, $chacha_body; $code.=" + dec $acc0 + jnz .Lseal_sse_init_rounds\n"; + &finalize_state(4); $code.=" + # Clamp and store the key + pand .Lclamp(%rip), $A3 + movdqa $A3, $r_store + movdqa $B3, $s_store + # Hash + mov $adl, $itr2 + call poly_hash_ad_internal\n"; + &xor_stream($A2,$B2,$C2,$D2,"0*16"); + &xor_stream($A1,$B1,$C1,$D1,"4*16"); $code.=" + cmp \$12*16, $inl + ja .Lseal_sse_main_init + mov \$8*16, $itr1 + sub \$8*16, $inl + lea 8*16($inp), $inp + jmp .Lseal_sse_128_tail_hash +.Lseal_sse_main_init:\n"; + &xor_stream($A0, $B0, $C0, $D0, "8*16"); $code.=" + mov \$12*16, $itr1 + sub \$12*16, $inl + lea 12*16($inp), $inp + mov \$2, $itr1 + mov \$8, $itr2 + cmp \$4*16, $inl + jbe .Lseal_sse_tail_64 + cmp \$8*16, $inl + jbe .Lseal_sse_tail_128 + cmp \$12*16, $inl + jbe .Lseal_sse_tail_192 + +.Lseal_sse_main_loop: \n"; + # The main loop + &prep_state(4); $code.=" +.align 32 +.Lseal_sse_main_rounds: \n"; + &emit_body(20); + &poly_add("0($oup)"); + &emit_body(20); + &poly_stage1(); + &emit_body(20); + &poly_stage2(); + &emit_body(20); + &poly_stage3(); + &emit_body(20); + &poly_reduce_stage(); + foreach $l (@loop_body) {$code.=$l."\n";} + @loop_body = split /\n/, $chacha_body; $code.=" + lea 16($oup), $oup + dec $itr2 + jge .Lseal_sse_main_rounds\n"; + &poly_add("0*8($oup)"); + &poly_mul(); $code.=" + lea 16($oup), $oup + dec $itr1 + jg .Lseal_sse_main_rounds\n"; + + &finalize_state(4);$code.=" + movdqa $D2, $tmp_store\n"; + &xor_stream_using_temp($A3,$B3,$C3,$D3,0*16,$D2); $code.=" + movdqa $tmp_store, $D2\n"; + &xor_stream($A2,$B2,$C2,$D2, 4*16); + &xor_stream($A1,$B1,$C1,$D1, 8*16); $code.=" + cmp \$16*16, $inl + ja .Lseal_sse_main_loop_xor + + mov \$12*16, $itr1 + sub \$12*16, $inl + lea 12*16($inp), $inp + jmp .Lseal_sse_128_tail_hash +.Lseal_sse_main_loop_xor: \n"; + &xor_stream($A0,$B0,$C0,$D0,"12*16"); $code.=" + lea 16*16($inp), $inp + sub \$16*16, $inl + mov \$6, $itr1 + mov \$4, $itr2 + cmp \$12*16, $inl + jg .Lseal_sse_main_loop + mov $inl, $itr1 + test $inl, $inl + je .Lseal_sse_128_tail_hash + mov \$6, $itr1 + cmp \$8*16, $inl + ja .Lseal_sse_tail_192 + cmp \$4*16, $inl + ja .Lseal_sse_tail_128 +############################################################################### +.Lseal_sse_tail_64: \n"; + &prep_state(1); $code.=" +.Lseal_sse_tail_64_rounds_and_x2hash: \n"; + &poly_add("0($oup)"); + &poly_mul(); $code.=" + lea 16($oup), $oup +.Lseal_sse_tail_64_rounds_and_x1hash: \n"; + &chacha_qr($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr($A0,$B0,$C0,$D0,$T0,"right"); + &poly_add("0($oup)"); + &poly_mul(); $code.=" + lea 16($oup), $oup + dec $itr1 + jg .Lseal_sse_tail_64_rounds_and_x2hash + dec $itr2 + jge .Lseal_sse_tail_64_rounds_and_x1hash\n"; + &finalize_state(1); $code.=" + jmp .Lseal_sse_128_tail_xor +############################################################################### +.Lseal_sse_tail_128:\n"; + &prep_state(2); $code.=" +.Lseal_sse_tail_128_rounds_and_x2hash: \n"; + &poly_add("0($oup)"); + &poly_mul(); $code.=" + lea 16($oup), $oup +.Lseal_sse_tail_128_rounds_and_x1hash: \n"; + &chacha_qr($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr($A1,$B1,$C1,$D1,$T0,"left"); + &poly_add("0($oup)"); + &poly_mul(); + &chacha_qr($A0,$B0,$C0,$D0,$T0,"right"); + &chacha_qr($A1,$B1,$C1,$D1,$T0,"right"); $code.=" + lea 16($oup), $oup + dec $itr1 + jg .Lseal_sse_tail_128_rounds_and_x2hash + dec $itr2 + jge .Lseal_sse_tail_128_rounds_and_x1hash\n"; + &finalize_state(2); + &xor_stream($A1,$B1,$C1,$D1,0*16); $code.=" + mov \$4*16, $itr1 + sub \$4*16, $inl + lea 4*16($inp), $inp + jmp .Lseal_sse_128_tail_hash +############################################################################### +.Lseal_sse_tail_192:\n"; + &prep_state(3); $code.=" +.Lseal_sse_tail_192_rounds_and_x2hash: \n"; + &poly_add("0($oup)"); + &poly_mul(); $code.=" + lea 16($oup), $oup +.Lseal_sse_tail_192_rounds_and_x1hash: \n"; + &chacha_qr($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr($A1,$B1,$C1,$D1,$T0,"left"); + &chacha_qr($A2,$B2,$C2,$D2,$T0,"left"); + &poly_add("0($oup)"); + &poly_mul(); + &chacha_qr($A0,$B0,$C0,$D0,$T0,"right"); + &chacha_qr($A1,$B1,$C1,$D1,$T0,"right"); + &chacha_qr($A2,$B2,$C2,$D2,$T0,"right"); $code.=" + lea 16($oup), $oup + dec $itr1 + jg .Lseal_sse_tail_192_rounds_and_x2hash + dec $itr2 + jge .Lseal_sse_tail_192_rounds_and_x1hash\n"; + &finalize_state(3); + &xor_stream($A2,$B2,$C2,$D2,0*16); + &xor_stream($A1,$B1,$C1,$D1,4*16); $code.=" + mov \$8*16, $itr1 + sub \$8*16, $inl + lea 8*16($inp), $inp +############################################################################### +.Lseal_sse_128_tail_hash: + cmp \$16, $itr1 + jb .Lseal_sse_128_tail_xor\n"; + &poly_add("0($oup)"); + &poly_mul(); $code.=" + sub \$16, $itr1 + lea 16($oup), $oup + jmp .Lseal_sse_128_tail_hash + +.Lseal_sse_128_tail_xor: + cmp \$16, $inl + jb .Lseal_sse_tail_16 + sub \$16, $inl + # Load for decryption + movdqu 0*16($inp), $T0 + pxor $T0, $A0 + movdqu $A0, 0*16($oup) + # Then hash + add 0*8($oup), $acc0 + adc 1*8($oup), $acc1 + adc \$1, $acc2 + lea 1*16($inp), $inp + lea 1*16($oup), $oup\n"; + &poly_mul(); $code.=" + # Shift the stream left + movdqa $B0, $A0 + movdqa $C0, $B0 + movdqa $D0, $C0 + movdqa $A1, $D0 + movdqa $B1, $A1 + movdqa $C1, $B1 + movdqa $D1, $C1 + jmp .Lseal_sse_128_tail_xor + +.Lseal_sse_tail_16: + test $inl, $inl + jz .Lprocess_blocks_of_extra_in + # We can only load the PT one byte at a time to avoid buffer overread + mov $inl, $itr2 + mov $inl, $itr1 + lea -1($inp,$inl), $inp + pxor $T3, $T3 +.Lseal_sse_tail_16_compose: + pslldq \$1, $T3 + pinsrb \$0, ($inp), $T3 + lea -1($inp), $inp + dec $itr1 + jne .Lseal_sse_tail_16_compose + + # XOR the keystream with the plaintext. + pxor $A0, $T3 + + # Write ciphertext out, byte-by-byte. + movq $inl, $itr1 + movdqu $T3, $A0 +.Lseal_sse_tail_16_extract: + pextrb \$0, $A0, ($oup) + psrldq \$1, $A0 + add \$1, $oup + sub \$1, $itr1 + jnz .Lseal_sse_tail_16_extract + + # $T3 contains the final (partial, non-empty) block of ciphertext which + # needs to be fed into the Poly1305 state. The right-most $inl bytes of it + # are valid. We need to fill it with extra_in bytes until full, or until we + # run out of bytes. + # + # $keyp points to the tag output, which is actually a struct with the + # extra_in pointer and length at offset 48. + movq 288 + $xmm_storage + 32(%rsp), $keyp + movq 56($keyp), $t1 # extra_in_len + movq 48($keyp), $t0 # extra_in + test $t1, $t1 + jz .Lprocess_partial_block # Common case: no bytes of extra_in + + movq \$16, $t2 + subq $inl, $t2 # 16-$inl is the number of bytes that fit into $T3. + cmpq $t2, $t1 # if extra_in_len < 16-$inl, only copy extra_in_len + # (note that AT&T syntax reverses the arguments) + jge .Lload_extra_in + movq $t1, $t2 + +.Lload_extra_in: + # $t2 contains the number of bytes of extra_in (pointed to by $t0) to load + # into $T3. They are loaded in reverse order. + leaq -1($t0,$t2), $inp + # Update extra_in and extra_in_len to reflect the bytes that are about to + # be read. + addq $t2, $t0 + subq $t2, $t1 + movq $t0, 48($keyp) + movq $t1, 56($keyp) + + # Update $itr2, which is used to select the mask later on, to reflect the + # extra bytes about to be added. + addq $t2, $itr2 + + # Load $t2 bytes of extra_in into $T2. + pxor $T2, $T2 +.Lload_extra_load_loop: + pslldq \$1, $T2 + pinsrb \$0, ($inp), $T2 + lea -1($inp), $inp + sub \$1, $t2 + jnz .Lload_extra_load_loop + + # Shift $T2 up the length of the remainder from the main encryption. Sadly, + # the shift for an XMM register has to be a constant, thus we loop to do + # this. + movq $inl, $t2 + +.Lload_extra_shift_loop: + pslldq \$1, $T2 + sub \$1, $t2 + jnz .Lload_extra_shift_loop + + # Mask $T3 (the remainder from the main encryption) so that superfluous + # bytes are zero. This means that the non-zero bytes in $T2 and $T3 are + # disjoint and so we can merge them with an OR. + lea .Land_masks(%rip), $t2 + shl \$4, $inl + pand -16($t2,$inl), $T3 + + # Merge $T2 into $T3, forming the remainder block. + por $T2, $T3 + + # The block of ciphertext + extra_in is ready to be included in the + # Poly1305 state. + movq $T3, $t0 + pextrq \$1, $T3, $t1 + add $t0, $acc0 + adc $t1, $acc1 + adc \$1, $acc2\n"; + &poly_mul(); $code.=" + +.Lprocess_blocks_of_extra_in: + # There may be additional bytes of extra_in to process. + movq 288+32+$xmm_storage (%rsp), $keyp + movq 48($keyp), $inp # extra_in + movq 56($keyp), $itr2 # extra_in_len + movq $itr2, $itr1 + shr \$4, $itr2 # number of blocks + +.Lprocess_extra_hash_loop: + jz process_extra_in_trailer\n"; + &poly_add("0($inp)"); + &poly_mul(); $code.=" + leaq 16($inp), $inp + subq \$1, $itr2 + jmp .Lprocess_extra_hash_loop +process_extra_in_trailer: + andq \$15, $itr1 # remaining num bytes (<16) of extra_in + movq $itr1, $inl + jz .Ldo_length_block + leaq -1($inp,$itr1), $inp + +.Lprocess_extra_in_trailer_load: + pslldq \$1, $T3 + pinsrb \$0, ($inp), $T3 + lea -1($inp), $inp + sub \$1, $itr1 + jnz .Lprocess_extra_in_trailer_load + +.Lprocess_partial_block: + # $T3 contains $inl bytes of data to be fed into Poly1305. $inl != 0 + lea .Land_masks(%rip), $t2 + shl \$4, $inl + pand -16($t2,$inl), $T3 + movq $T3, $t0 + pextrq \$1, $T3, $t1 + add $t0, $acc0 + adc $t1, $acc1 + adc \$1, $acc2\n"; + &poly_mul(); $code.=" + +.Ldo_length_block:\n"; + &poly_add($len_store); + &poly_mul(); $code.=" + # Final reduce + mov $acc0, $t0 + mov $acc1, $t1 + mov $acc2, $t2 + sub \$-5, $acc0 + sbb \$-1, $acc1 + sbb \$3, $acc2 + cmovc $t0, $acc0 + cmovc $t1, $acc1 + cmovc $t2, $acc2 + # Add in s part of the key + add 0+$s_store, $acc0 + adc 8+$s_store, $acc1\n"; + +$code.=" + movaps 16*0+$xmm_store, %xmm6 + movaps 16*1+$xmm_store, %xmm7 + movaps 16*2+$xmm_store, %xmm8 + movaps 16*3+$xmm_store, %xmm9 + movaps 16*4+$xmm_store, %xmm10 + movaps 16*5+$xmm_store, %xmm11 + movaps 16*6+$xmm_store, %xmm12 + movaps 16*7+$xmm_store, %xmm13 + movaps 16*8+$xmm_store, %xmm14 + movaps 16*9+$xmm_store, %xmm15\n" if ($win64); +$code.=" +.cfi_remember_state + add \$288 + $xmm_storage + 32, %rsp +.cfi_adjust_cfa_offset -(288 + 32) + # The tag replaces the key on return + pop $keyp +.cfi_pop $keyp + mov $acc0, ($keyp) + mov $acc1, 8($keyp) + pop %r15 +.cfi_pop %r15 + pop %r14 +.cfi_pop %r14 + pop %r13 +.cfi_pop %r13 + pop %r12 +.cfi_pop %r12 + pop %rbx +.cfi_pop %rbx + pop %rbp +.cfi_pop %rbp + ret +################################################################################ +.Lseal_sse_128: +.cfi_restore_state + movdqu .Lchacha20_consts(%rip), $A0\nmovdqa $A0, $A1\nmovdqa $A0, $A2 + movdqu 0*16($keyp), $B0\nmovdqa $B0, $B1\nmovdqa $B0, $B2 + movdqu 1*16($keyp), $C0\nmovdqa $C0, $C1\nmovdqa $C0, $C2 + movdqu 2*16($keyp), $D2 + movdqa $D2, $D0\npaddd .Lsse_inc(%rip), $D0 + movdqa $D0, $D1\npaddd .Lsse_inc(%rip), $D1 + movdqa $B0, $T1\nmovdqa $C0, $T2\nmovdqa $D0, $T3 + mov \$10, $acc0 + +.Lseal_sse_128_rounds:\n"; + &chacha_qr($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr($A1,$B1,$C1,$D1,$T0,"left"); + &chacha_qr($A2,$B2,$C2,$D2,$T0,"left"); + &chacha_qr($A0,$B0,$C0,$D0,$T0,"right"); + &chacha_qr($A1,$B1,$C1,$D1,$T0,"right"); + &chacha_qr($A2,$B2,$C2,$D2,$T0,"right"); $code.=" + dec $acc0 + jnz .Lseal_sse_128_rounds + paddd .Lchacha20_consts(%rip), $A0 + paddd .Lchacha20_consts(%rip), $A1 + paddd .Lchacha20_consts(%rip), $A2 + paddd $T1, $B0\npaddd $T1, $B1\npaddd $T1, $B2 + paddd $T2, $C0\npaddd $T2, $C1 + paddd $T3, $D0 + paddd .Lsse_inc(%rip), $T3 + paddd $T3, $D1 + # Clamp and store the key + pand .Lclamp(%rip), $A2 + movdqa $A2, $r_store + movdqa $B2, $s_store + # Hash + mov %r8, $itr2 + call poly_hash_ad_internal + jmp .Lseal_sse_128_tail_xor +.size GFp_chacha20_poly1305_seal, .-GFp_chacha20_poly1305_seal +.cfi_endproc\n"; +} + +if ($avx>1) { + +($A0,$A1,$A2,$A3,$B0,$B1,$B2,$B3,$C0,$C1,$C2,$C3,$D0,$D1,$D2,$D3)=map("%ymm$_",(0..15)); +my ($A0x,$A1x,$A2x,$A3x,$B0x,$B1x,$B2x,$B3x,$C0x,$C1x,$C2x,$C3x,$D0x,$D1x,$D2x,$D3x)=map("%xmm$_",(0..15)); +($T0,$T1,$T2,$T3)=($A3,$B3,$C3,$D3); +$state1_store="$xmm_storage+2*32(%rbp)"; +$state2_store="$xmm_storage+3*32(%rbp)"; +$tmp_store="$xmm_storage+4*32(%rbp)"; +$ctr0_store="$xmm_storage+5*32(%rbp)"; +$ctr1_store="$xmm_storage+6*32(%rbp)"; +$ctr2_store="$xmm_storage+7*32(%rbp)"; +$ctr3_store="$xmm_storage+8*32(%rbp)"; + +sub chacha_qr_avx2 { +my ($a,$b,$c,$d,$t,$dir)=@_; +$code.=<<___ if ($dir =~ /store/); + vmovdqa $t, $tmp_store +___ +$code.=<<___; + vpaddd $b, $a, $a + vpxor $a, $d, $d + vpshufb .Lrol16(%rip), $d, $d + vpaddd $d, $c, $c + vpxor $c, $b, $b + vpsrld \$20, $b, $t + vpslld \$12, $b, $b + vpxor $t, $b, $b + vpaddd $b, $a, $a + vpxor $a, $d, $d + vpshufb .Lrol8(%rip), $d, $d + vpaddd $d, $c, $c + vpxor $c, $b, $b + vpslld \$7, $b, $t + vpsrld \$25, $b, $b + vpxor $t, $b, $b +___ +$code.=<<___ if ($dir =~ /left/); + vpalignr \$12, $d, $d, $d + vpalignr \$8, $c, $c, $c + vpalignr \$4, $b, $b, $b +___ +$code.=<<___ if ($dir =~ /right/); + vpalignr \$4, $d, $d, $d + vpalignr \$8, $c, $c, $c + vpalignr \$12, $b, $b, $b +___ +$code.=<<___ if ($dir =~ /load/); + vmovdqa $tmp_store, $t +___ +} + +sub prep_state_avx2 { +my ($n)=@_; +$code.=<<___; + vmovdqa .Lchacha20_consts(%rip), $A0 + vmovdqa $state1_store, $B0 + vmovdqa $state2_store, $C0 +___ +$code.=<<___ if ($n ge 2); + vmovdqa $A0, $A1 + vmovdqa $B0, $B1 + vmovdqa $C0, $C1 +___ +$code.=<<___ if ($n ge 3); + vmovdqa $A0, $A2 + vmovdqa $B0, $B2 + vmovdqa $C0, $C2 +___ +$code.=<<___ if ($n ge 4); + vmovdqa $A0, $A3 + vmovdqa $B0, $B3 + vmovdqa $C0, $C3 +___ +$code.=<<___ if ($n eq 1); + vmovdqa .Lavx2_inc(%rip), $D0 + vpaddd $ctr0_store, $D0, $D0 + vmovdqa $D0, $ctr0_store +___ +$code.=<<___ if ($n eq 2); + vmovdqa .Lavx2_inc(%rip), $D0 + vpaddd $ctr0_store, $D0, $D1 + vpaddd $D1, $D0, $D0 + vmovdqa $D0, $ctr0_store + vmovdqa $D1, $ctr1_store +___ +$code.=<<___ if ($n eq 3); + vmovdqa .Lavx2_inc(%rip), $D0 + vpaddd $ctr0_store, $D0, $D2 + vpaddd $D2, $D0, $D1 + vpaddd $D1, $D0, $D0 + vmovdqa $D0, $ctr0_store + vmovdqa $D1, $ctr1_store + vmovdqa $D2, $ctr2_store +___ +$code.=<<___ if ($n eq 4); + vmovdqa .Lavx2_inc(%rip), $D0 + vpaddd $ctr0_store, $D0, $D3 + vpaddd $D3, $D0, $D2 + vpaddd $D2, $D0, $D1 + vpaddd $D1, $D0, $D0 + vmovdqa $D3, $ctr3_store + vmovdqa $D2, $ctr2_store + vmovdqa $D1, $ctr1_store + vmovdqa $D0, $ctr0_store +___ +} + +sub finalize_state_avx2 { +my ($n)=@_; +$code.=<<___ if ($n eq 4); + vpaddd .Lchacha20_consts(%rip), $A3, $A3 + vpaddd $state1_store, $B3, $B3 + vpaddd $state2_store, $C3, $C3 + vpaddd $ctr3_store, $D3, $D3 +___ +$code.=<<___ if ($n ge 3); + vpaddd .Lchacha20_consts(%rip), $A2, $A2 + vpaddd $state1_store, $B2, $B2 + vpaddd $state2_store, $C2, $C2 + vpaddd $ctr2_store, $D2, $D2 +___ +$code.=<<___ if ($n ge 2); + vpaddd .Lchacha20_consts(%rip), $A1, $A1 + vpaddd $state1_store, $B1, $B1 + vpaddd $state2_store, $C1, $C1 + vpaddd $ctr1_store, $D1, $D1 +___ +$code.=<<___; + vpaddd .Lchacha20_consts(%rip), $A0, $A0 + vpaddd $state1_store, $B0, $B0 + vpaddd $state2_store, $C0, $C0 + vpaddd $ctr0_store, $D0, $D0 +___ +} + +sub xor_stream_avx2 { +my ($A, $B, $C, $D, $offset, $hlp)=@_; +$code.=<<___; + vperm2i128 \$0x02, $A, $B, $hlp + vperm2i128 \$0x13, $A, $B, $B + vperm2i128 \$0x02, $C, $D, $A + vperm2i128 \$0x13, $C, $D, $C + vpxor 0*32+$offset($inp), $hlp, $hlp + vpxor 1*32+$offset($inp), $A, $A + vpxor 2*32+$offset($inp), $B, $B + vpxor 3*32+$offset($inp), $C, $C + vmovdqu $hlp, 0*32+$offset($oup) + vmovdqu $A, 1*32+$offset($oup) + vmovdqu $B, 2*32+$offset($oup) + vmovdqu $C, 3*32+$offset($oup) +___ +} + +sub finish_stream_avx2 { +my ($A, $B, $C, $D, $hlp)=@_; +$code.=<<___; + vperm2i128 \$0x13, $A, $B, $hlp + vperm2i128 \$0x02, $A, $B, $A + vperm2i128 \$0x02, $C, $D, $B + vperm2i128 \$0x13, $C, $D, $D + vmovdqa $hlp, $C +___ +} + +sub poly_stage1_mulx { +$code.=<<___; + mov 0+$r_store, %rdx + mov %rdx, $t2 + mulx $acc0, $t0, $t1 + mulx $acc1, %rax, %rdx + imulq $acc2, $t2 + add %rax, $t1 + adc %rdx, $t2 +___ +} + +sub poly_stage2_mulx { +$code.=<<___; + mov 8+$r_store, %rdx + mulx $acc0, $acc0, %rax + add $acc0, $t1 + mulx $acc1, $acc1, $t3 + adc $acc1, $t2 + adc \$0, $t3 + imulq $acc2, %rdx +___ +} + +sub poly_stage3_mulx { +$code.=<<___; + add %rax, $t2 + adc %rdx, $t3 +___ +} + +sub poly_mul_mulx { + &poly_stage1_mulx(); + &poly_stage2_mulx(); + &poly_stage3_mulx(); + &poly_reduce_stage(); +} + +sub gen_chacha_round_avx2 { +my ($rot1, $rot2, $shift)=@_; +my $round=""; +$round=$round ."vmovdqa $C0, $tmp_store\n" if ($rot1 eq 20); +$round=$round ."vmovdqa $rot2, $C0 + vpaddd $B3, $A3, $A3 + vpaddd $B2, $A2, $A2 + vpaddd $B1, $A1, $A1 + vpaddd $B0, $A0, $A0 + vpxor $A3, $D3, $D3 + vpxor $A2, $D2, $D2 + vpxor $A1, $D1, $D1 + vpxor $A0, $D0, $D0 + vpshufb $C0, $D3, $D3 + vpshufb $C0, $D2, $D2 + vpshufb $C0, $D1, $D1 + vpshufb $C0, $D0, $D0 + vpaddd $D3, $C3, $C3 + vpaddd $D2, $C2, $C2 + vpaddd $D1, $C1, $C1 + vpaddd $tmp_store, $D0, $C0 + vpxor $C3, $B3, $B3 + vpxor $C2, $B2, $B2 + vpxor $C1, $B1, $B1 + vpxor $C0, $B0, $B0 + vmovdqa $C0, $tmp_store + vpsrld \$$rot1, $B3, $C0 + vpslld \$32-$rot1, $B3, $B3 + vpxor $C0, $B3, $B3 + vpsrld \$$rot1, $B2, $C0 + vpslld \$32-$rot1, $B2, $B2 + vpxor $C0, $B2, $B2 + vpsrld \$$rot1, $B1, $C0 + vpslld \$32-$rot1, $B1, $B1 + vpxor $C0, $B1, $B1 + vpsrld \$$rot1, $B0, $C0 + vpslld \$32-$rot1, $B0, $B0 + vpxor $C0, $B0, $B0\n"; +($s1,$s2,$s3)=(4,8,12) if ($shift =~ /left/); +($s1,$s2,$s3)=(12,8,4) if ($shift =~ /right/); +$round=$round ."vmovdqa $tmp_store, $C0 + vpalignr \$$s1, $B3, $B3, $B3 + vpalignr \$$s2, $C3, $C3, $C3 + vpalignr \$$s3, $D3, $D3, $D3 + vpalignr \$$s1, $B2, $B2, $B2 + vpalignr \$$s2, $C2, $C2, $C2 + vpalignr \$$s3, $D2, $D2, $D2 + vpalignr \$$s1, $B1, $B1, $B1 + vpalignr \$$s2, $C1, $C1, $C1 + vpalignr \$$s3, $D1, $D1, $D1 + vpalignr \$$s1, $B0, $B0, $B0 + vpalignr \$$s2, $C0, $C0, $C0 + vpalignr \$$s3, $D0, $D0, $D0\n" +if (($shift =~ /left/) || ($shift =~ /right/)); +return $round; +}; + +$chacha_body = &gen_chacha_round_avx2(20, ".Lrol16(%rip)") . + &gen_chacha_round_avx2(25, ".Lrol8(%rip)", "left") . + &gen_chacha_round_avx2(20, ".Lrol16(%rip)") . + &gen_chacha_round_avx2(25, ".Lrol8(%rip)", "right"); + +@loop_body = split /\n/, $chacha_body; + +$code.=" +############################################################################### +.type chacha20_poly1305_open_avx2,\@abi-omnipotent +.align 64 +chacha20_poly1305_open_avx2: +.cfi_startproc + +# Since the AVX2 function operates in the frame of the SSE function, we just copy the frame state to over here +.cfi_push %rbp +.cfi_push %rbx +.cfi_push %r12 +.cfi_push %r13 +.cfi_push %r14 +.cfi_push %r15 +.cfi_push $keyp +.cfi_adjust_cfa_offset 288 + 32 + + vzeroupper + vmovdqa .Lchacha20_consts(%rip), $A0 + vbroadcasti128 0*16($keyp), $B0 + vbroadcasti128 1*16($keyp), $C0 + vbroadcasti128 2*16($keyp), $D0 + vpaddd .Lavx2_init(%rip), $D0, $D0 + cmp \$6*32, $inl + jbe .Lopen_avx2_192 + cmp \$10*32, $inl + jbe .Lopen_avx2_320 + + vmovdqa $B0, $state1_store + vmovdqa $C0, $state2_store + vmovdqa $D0, $ctr0_store + mov \$10, $acc0 +.Lopen_avx2_init_rounds: \n"; + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right"); $code.=" + dec $acc0 + jne .Lopen_avx2_init_rounds + vpaddd .Lchacha20_consts(%rip), $A0, $A0 + vpaddd $state1_store, $B0, $B0 + vpaddd $state2_store, $C0, $C0 + vpaddd $ctr0_store, $D0, $D0 + + vperm2i128 \$0x02, $A0, $B0, $T0 + # Clamp and store key + vpand .Lclamp(%rip), $T0, $T0 + vmovdqa $T0, $r_store + # Stream for the first 64 bytes + vperm2i128 \$0x13, $A0, $B0, $A0 + vperm2i128 \$0x13, $C0, $D0, $B0 + # Hash AD + first 64 bytes + mov $adl, $itr2 + call poly_hash_ad_internal + # Hash first 64 bytes + xor $itr1, $itr1 +.Lopen_avx2_init_hash: \n"; + &poly_add("0($inp,$itr1)"); + &poly_mul(); $code.=" + add \$16, $itr1 + cmp \$2*32, $itr1 + jne .Lopen_avx2_init_hash + # Decrypt first 64 bytes + vpxor 0*32($inp), $A0, $A0 + vpxor 1*32($inp), $B0, $B0 + # Store first 64 bytes of decrypted data + vmovdqu $A0, 0*32($oup) + vmovdqu $B0, 1*32($oup) + lea 2*32($inp), $inp + lea 2*32($oup), $oup + sub \$2*32, $inl +.Lopen_avx2_main_loop: + # Hash and decrypt 512 bytes each iteration + cmp \$16*32, $inl + jb .Lopen_avx2_main_loop_done\n"; + &prep_state_avx2(4); $code.=" + xor $itr1, $itr1 +.Lopen_avx2_main_loop_rounds: \n"; + &poly_add("0*8($inp,$itr1)"); + &emit_body(10); + &poly_stage1_mulx(); + &emit_body(9); + &poly_stage2_mulx(); + &emit_body(12); + &poly_stage3_mulx(); + &emit_body(10); + &poly_reduce_stage(); + &emit_body(9); + &poly_add("2*8($inp,$itr1)"); + &emit_body(8); + &poly_stage1_mulx(); + &emit_body(18); + &poly_stage2_mulx(); + &emit_body(18); + &poly_stage3_mulx(); + &emit_body(9); + &poly_reduce_stage(); + &emit_body(8); + &poly_add("4*8($inp,$itr1)"); $code.=" + lea 6*8($itr1), $itr1\n"; + &emit_body(18); + &poly_stage1_mulx(); + &emit_body(8); + &poly_stage2_mulx(); + &emit_body(8); + &poly_stage3_mulx(); + &emit_body(18); + &poly_reduce_stage(); + foreach $l (@loop_body) {$code.=$l."\n";} + @loop_body = split /\n/, $chacha_body; $code.=" + cmp \$10*6*8, $itr1 + jne .Lopen_avx2_main_loop_rounds\n"; + &finalize_state_avx2(4); $code.=" + vmovdqa $A0, $tmp_store\n"; + &poly_add("10*6*8($inp)"); + &xor_stream_avx2($A3, $B3, $C3, $D3, 0*32, $A0); $code.=" + vmovdqa $tmp_store, $A0\n"; + &poly_mul(); + &xor_stream_avx2($A2, $B2, $C2, $D2, 4*32, $A3); + &poly_add("10*6*8+2*8($inp)"); + &xor_stream_avx2($A1, $B1, $C1, $D1, 8*32, $A3); + &poly_mul(); + &xor_stream_avx2($A0, $B0, $C0, $D0, 12*32, $A3); $code.=" + lea 16*32($inp), $inp + lea 16*32($oup), $oup + sub \$16*32, $inl + jmp .Lopen_avx2_main_loop +.Lopen_avx2_main_loop_done: + test $inl, $inl + vzeroupper + je .Lopen_sse_finalize + + cmp \$12*32, $inl + ja .Lopen_avx2_tail_512 + cmp \$8*32, $inl + ja .Lopen_avx2_tail_384 + cmp \$4*32, $inl + ja .Lopen_avx2_tail_256\n"; +############################################################################### + # 1-128 bytes left + &prep_state_avx2(1); $code.=" + xor $itr2, $itr2 + mov $inl, $itr1 + and \$-16, $itr1 + test $itr1, $itr1 + je .Lopen_avx2_tail_128_rounds # Have nothing to hash +.Lopen_avx2_tail_128_rounds_and_x1hash: \n"; + &poly_add("0*8($inp,$itr2)"); + &poly_mul(); $code.=" +.Lopen_avx2_tail_128_rounds: + add \$16, $itr2\n"; + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right"); $code.=" + cmp $itr1, $itr2 + jb .Lopen_avx2_tail_128_rounds_and_x1hash + cmp \$160, $itr2 + jne .Lopen_avx2_tail_128_rounds\n"; + &finalize_state_avx2(1); + &finish_stream_avx2($A0,$B0,$C0,$D0,$T0); $code.=" + jmp .Lopen_avx2_tail_128_xor +############################################################################### +.Lopen_avx2_tail_256: \n"; + # 129-256 bytes left + &prep_state_avx2(2); $code.=" + mov $inl, $tmp_store + mov $inl, $itr1 + sub \$4*32, $itr1 + shr \$4, $itr1 + mov \$10, $itr2 + cmp \$10, $itr1 + cmovg $itr2, $itr1 + mov $inp, $inl + xor $itr2, $itr2 +.Lopen_avx2_tail_256_rounds_and_x1hash: \n"; + &poly_add("0*8($inl)"); + &poly_mul_mulx(); $code.=" + lea 16($inl), $inl +.Lopen_avx2_tail_256_rounds: \n"; + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"left"); $code.=" + inc $itr2\n"; + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right"); + &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"right"); + &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"right"); $code.=" + cmp $itr1, $itr2 + jb .Lopen_avx2_tail_256_rounds_and_x1hash + cmp \$10, $itr2 + jne .Lopen_avx2_tail_256_rounds + mov $inl, $itr2 + sub $inp, $inl + mov $inl, $itr1 + mov $tmp_store, $inl +.Lopen_avx2_tail_256_hash: + add \$16, $itr1 + cmp $inl, $itr1 + jg .Lopen_avx2_tail_256_done\n"; + &poly_add("0*8($itr2)"); + &poly_mul_mulx(); $code.=" + lea 16($itr2), $itr2 + jmp .Lopen_avx2_tail_256_hash +.Lopen_avx2_tail_256_done: \n"; + &finalize_state_avx2(2); + &xor_stream_avx2($A1, $B1, $C1, $D1, 0*32, $T0); + &finish_stream_avx2($A0, $B0, $C0, $D0, $T0); $code.=" + lea 4*32($inp), $inp + lea 4*32($oup), $oup + sub \$4*32, $inl + jmp .Lopen_avx2_tail_128_xor +############################################################################### +.Lopen_avx2_tail_384: \n"; + # 257-383 bytes left + &prep_state_avx2(3); $code.=" + mov $inl, $tmp_store + mov $inl, $itr1 + sub \$8*32, $itr1 + shr \$4, $itr1 + add \$6, $itr1 + mov \$10, $itr2 + cmp \$10, $itr1 + cmovg $itr2, $itr1 + mov $inp, $inl + xor $itr2, $itr2 +.Lopen_avx2_tail_384_rounds_and_x2hash: \n"; + &poly_add("0*8($inl)"); + &poly_mul_mulx(); $code.=" + lea 16($inl), $inl +.Lopen_avx2_tail_384_rounds_and_x1hash: \n"; + &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"left"); + &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"left"); + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left"); + &poly_add("0*8($inl)"); + &poly_mul(); $code.=" + lea 16($inl), $inl + inc $itr2\n"; + &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"right"); + &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"right"); + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right"); $code.=" + cmp $itr1, $itr2 + jb .Lopen_avx2_tail_384_rounds_and_x2hash + cmp \$10, $itr2 + jne .Lopen_avx2_tail_384_rounds_and_x1hash + mov $inl, $itr2 + sub $inp, $inl + mov $inl, $itr1 + mov $tmp_store, $inl +.Lopen_avx2_384_tail_hash: + add \$16, $itr1 + cmp $inl, $itr1 + jg .Lopen_avx2_384_tail_done\n"; + &poly_add("0*8($itr2)"); + &poly_mul_mulx(); $code.=" + lea 16($itr2), $itr2 + jmp .Lopen_avx2_384_tail_hash +.Lopen_avx2_384_tail_done: \n"; + &finalize_state_avx2(3); + &xor_stream_avx2($A2, $B2, $C2, $D2, 0*32, $T0); + &xor_stream_avx2($A1, $B1, $C1, $D1, 4*32, $T0); + &finish_stream_avx2($A0, $B0, $C0, $D0, $T0); $code.=" + lea 8*32($inp), $inp + lea 8*32($oup), $oup + sub \$8*32, $inl + jmp .Lopen_avx2_tail_128_xor +############################################################################### +.Lopen_avx2_tail_512: \n"; + # 384-512 bytes left + &prep_state_avx2(4); $code.=" + xor $itr1, $itr1 + mov $inp, $itr2 +.Lopen_avx2_tail_512_rounds_and_x2hash: \n"; + &poly_add("0*8($itr2)"); + &poly_mul(); $code.=" + lea 2*8($itr2), $itr2 +.Lopen_avx2_tail_512_rounds_and_x1hash: \n"; + &emit_body(37); + &poly_add("0*8($itr2)"); + &poly_mul_mulx(); + &emit_body(48); + &poly_add("2*8($itr2)"); + &poly_mul_mulx(); $code.=" + lea 4*8($itr2), $itr2\n"; + foreach $l (@loop_body) {$code.=$l."\n";} + @loop_body = split /\n/, $chacha_body; $code.=" + inc $itr1 + cmp \$4, $itr1 + jl .Lopen_avx2_tail_512_rounds_and_x2hash + cmp \$10, $itr1 + jne .Lopen_avx2_tail_512_rounds_and_x1hash + mov $inl, $itr1 + sub \$12*32, $itr1 + and \$-16, $itr1 +.Lopen_avx2_tail_512_hash: + test $itr1, $itr1 + je .Lopen_avx2_tail_512_done\n"; + &poly_add("0*8($itr2)"); + &poly_mul_mulx(); $code.=" + lea 2*8($itr2), $itr2 + sub \$2*8, $itr1 + jmp .Lopen_avx2_tail_512_hash +.Lopen_avx2_tail_512_done: \n"; + &finalize_state_avx2(4); $code.=" + vmovdqa $A0, $tmp_store\n"; + &xor_stream_avx2($A3, $B3, $C3, $D3, 0*32, $A0); $code.=" + vmovdqa $tmp_store, $A0\n"; + &xor_stream_avx2($A2, $B2, $C2, $D2, 4*32, $A3); + &xor_stream_avx2($A1, $B1, $C1, $D1, 8*32, $A3); + &finish_stream_avx2($A0, $B0, $C0, $D0, $A3); $code.=" + lea 12*32($inp), $inp + lea 12*32($oup), $oup + sub \$12*32, $inl +.Lopen_avx2_tail_128_xor: + cmp \$32, $inl + jb .Lopen_avx2_tail_32_xor + sub \$32, $inl + vpxor ($inp), $A0, $A0 + vmovdqu $A0, ($oup) + lea 1*32($inp), $inp + lea 1*32($oup), $oup + vmovdqa $B0, $A0 + vmovdqa $C0, $B0 + vmovdqa $D0, $C0 + jmp .Lopen_avx2_tail_128_xor +.Lopen_avx2_tail_32_xor: + cmp \$16, $inl + vmovdqa $A0x, $A1x + jb .Lopen_avx2_exit + sub \$16, $inl + #load for decryption + vpxor ($inp), $A0x, $A1x + vmovdqu $A1x, ($oup) + lea 1*16($inp), $inp + lea 1*16($oup), $oup + vperm2i128 \$0x11, $A0, $A0, $A0 + vmovdqa $A0x, $A1x +.Lopen_avx2_exit: + vzeroupper + jmp .Lopen_sse_tail_16 +############################################################################### +.Lopen_avx2_192: + vmovdqa $A0, $A1 + vmovdqa $A0, $A2 + vmovdqa $B0, $B1 + vmovdqa $B0, $B2 + vmovdqa $C0, $C1 + vmovdqa $C0, $C2 + vpaddd .Lavx2_inc(%rip), $D0, $D1 + vmovdqa $D0, $T2 + vmovdqa $D1, $T3 + mov \$10, $acc0 +.Lopen_avx2_192_rounds: \n"; + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"left"); + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right"); + &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"right"); $code.=" + dec $acc0 + jne .Lopen_avx2_192_rounds + vpaddd $A2, $A0, $A0 + vpaddd $A2, $A1, $A1 + vpaddd $B2, $B0, $B0 + vpaddd $B2, $B1, $B1 + vpaddd $C2, $C0, $C0 + vpaddd $C2, $C1, $C1 + vpaddd $T2, $D0, $D0 + vpaddd $T3, $D1, $D1 + vperm2i128 \$0x02, $A0, $B0, $T0 + # Clamp and store the key + vpand .Lclamp(%rip), $T0, $T0 + vmovdqa $T0, $r_store + # Stream for up to 192 bytes + vperm2i128 \$0x13, $A0, $B0, $A0 + vperm2i128 \$0x13, $C0, $D0, $B0 + vperm2i128 \$0x02, $A1, $B1, $C0 + vperm2i128 \$0x02, $C1, $D1, $D0 + vperm2i128 \$0x13, $A1, $B1, $A1 + vperm2i128 \$0x13, $C1, $D1, $B1 +.Lopen_avx2_short: + mov $adl, $itr2 + call poly_hash_ad_internal +.Lopen_avx2_short_hash_and_xor_loop: + cmp \$32, $inl + jb .Lopen_avx2_short_tail_32 + sub \$32, $inl\n"; + # Load + hash + &poly_add("0*8($inp)"); + &poly_mul(); + &poly_add("2*8($inp)"); + &poly_mul(); $code.=" + # Load + decrypt + vpxor ($inp), $A0, $A0 + vmovdqu $A0, ($oup) + lea 1*32($inp), $inp + lea 1*32($oup), $oup + # Shift stream + vmovdqa $B0, $A0 + vmovdqa $C0, $B0 + vmovdqa $D0, $C0 + vmovdqa $A1, $D0 + vmovdqa $B1, $A1 + vmovdqa $C1, $B1 + vmovdqa $D1, $C1 + vmovdqa $A2, $D1 + vmovdqa $B2, $A2 + jmp .Lopen_avx2_short_hash_and_xor_loop +.Lopen_avx2_short_tail_32: + cmp \$16, $inl + vmovdqa $A0x, $A1x + jb .Lopen_avx2_short_tail_32_exit + sub \$16, $inl\n"; + &poly_add("0*8($inp)"); + &poly_mul(); $code.=" + vpxor ($inp), $A0x, $A3x + vmovdqu $A3x, ($oup) + lea 1*16($inp), $inp + lea 1*16($oup), $oup + vextracti128 \$1, $A0, $A1x +.Lopen_avx2_short_tail_32_exit: + vzeroupper + jmp .Lopen_sse_tail_16 +############################################################################### +.Lopen_avx2_320: + vmovdqa $A0, $A1 + vmovdqa $A0, $A2 + vmovdqa $B0, $B1 + vmovdqa $B0, $B2 + vmovdqa $C0, $C1 + vmovdqa $C0, $C2 + vpaddd .Lavx2_inc(%rip), $D0, $D1 + vpaddd .Lavx2_inc(%rip), $D1, $D2 + vmovdqa $B0, $T1 + vmovdqa $C0, $T2 + vmovdqa $D0, $ctr0_store + vmovdqa $D1, $ctr1_store + vmovdqa $D2, $ctr2_store + mov \$10, $acc0 +.Lopen_avx2_320_rounds: \n"; + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"left"); + &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"left"); + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right"); + &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"right"); + &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"right"); $code.=" + dec $acc0 + jne .Lopen_avx2_320_rounds + vpaddd .Lchacha20_consts(%rip), $A0, $A0 + vpaddd .Lchacha20_consts(%rip), $A1, $A1 + vpaddd .Lchacha20_consts(%rip), $A2, $A2 + vpaddd $T1, $B0, $B0 + vpaddd $T1, $B1, $B1 + vpaddd $T1, $B2, $B2 + vpaddd $T2, $C0, $C0 + vpaddd $T2, $C1, $C1 + vpaddd $T2, $C2, $C2 + vpaddd $ctr0_store, $D0, $D0 + vpaddd $ctr1_store, $D1, $D1 + vpaddd $ctr2_store, $D2, $D2 + vperm2i128 \$0x02, $A0, $B0, $T0 + # Clamp and store the key + vpand .Lclamp(%rip), $T0, $T0 + vmovdqa $T0, $r_store + # Stream for up to 320 bytes + vperm2i128 \$0x13, $A0, $B0, $A0 + vperm2i128 \$0x13, $C0, $D0, $B0 + vperm2i128 \$0x02, $A1, $B1, $C0 + vperm2i128 \$0x02, $C1, $D1, $D0 + vperm2i128 \$0x13, $A1, $B1, $A1 + vperm2i128 \$0x13, $C1, $D1, $B1 + vperm2i128 \$0x02, $A2, $B2, $C1 + vperm2i128 \$0x02, $C2, $D2, $D1 + vperm2i128 \$0x13, $A2, $B2, $A2 + vperm2i128 \$0x13, $C2, $D2, $B2 + jmp .Lopen_avx2_short +.size chacha20_poly1305_open_avx2, .-chacha20_poly1305_open_avx2 +.cfi_endproc +############################################################################### +############################################################################### +.type chacha20_poly1305_seal_avx2,\@abi-omnipotent +.align 64 +chacha20_poly1305_seal_avx2: +.cfi_startproc + +# Since the AVX2 function operates in the frame of the SSE function, we just copy the frame state to over here +.cfi_push %rbp +.cfi_push %rbx +.cfi_push %r12 +.cfi_push %r13 +.cfi_push %r14 +.cfi_push %r15 +.cfi_push $keyp +.cfi_adjust_cfa_offset 288 + 32 + + vzeroupper + vmovdqa .Lchacha20_consts(%rip), $A0 + vbroadcasti128 0*16($keyp), $B0 + vbroadcasti128 1*16($keyp), $C0 + vbroadcasti128 2*16($keyp), $D0 + vpaddd .Lavx2_init(%rip), $D0, $D0 + cmp \$6*32, $inl + jbe .Lseal_avx2_192 + cmp \$10*32, $inl + jbe .Lseal_avx2_320 + vmovdqa $A0, $A1 + vmovdqa $A0, $A2 + vmovdqa $A0, $A3 + vmovdqa $B0, $B1 + vmovdqa $B0, $B2 + vmovdqa $B0, $B3 + vmovdqa $B0, $state1_store + vmovdqa $C0, $C1 + vmovdqa $C0, $C2 + vmovdqa $C0, $C3 + vmovdqa $C0, $state2_store + vmovdqa $D0, $D3 + vpaddd .Lavx2_inc(%rip), $D3, $D2 + vpaddd .Lavx2_inc(%rip), $D2, $D1 + vpaddd .Lavx2_inc(%rip), $D1, $D0 + vmovdqa $D0, $ctr0_store + vmovdqa $D1, $ctr1_store + vmovdqa $D2, $ctr2_store + vmovdqa $D3, $ctr3_store + mov \$10, $acc0 +.Lseal_avx2_init_rounds: \n"; + foreach $l (@loop_body) {$code.=$l."\n";} + @loop_body = split /\n/, $chacha_body; $code.=" + dec $acc0 + jnz .Lseal_avx2_init_rounds\n"; + &finalize_state_avx2(4); $code.=" + vperm2i128 \$0x13, $C3, $D3, $C3 + vperm2i128 \$0x02, $A3, $B3, $D3 + vperm2i128 \$0x13, $A3, $B3, $A3 + vpand .Lclamp(%rip), $D3, $D3 + vmovdqa $D3, $r_store + mov $adl, $itr2 + call poly_hash_ad_internal + # Safely store 320 bytes (otherwise would handle with optimized call) + vpxor 0*32($inp), $A3, $A3 + vpxor 1*32($inp), $C3, $C3 + vmovdqu $A3, 0*32($oup) + vmovdqu $C3, 1*32($oup)\n"; + &xor_stream_avx2($A2,$B2,$C2,$D2,2*32,$T3); + &xor_stream_avx2($A1,$B1,$C1,$D1,6*32,$T3); + &finish_stream_avx2($A0,$B0,$C0,$D0,$T3); $code.=" + lea 10*32($inp), $inp + sub \$10*32, $inl + mov \$10*32, $itr1 + cmp \$4*32, $inl + jbe .Lseal_avx2_short_hash_remainder + vpxor 0*32($inp), $A0, $A0 + vpxor 1*32($inp), $B0, $B0 + vpxor 2*32($inp), $C0, $C0 + vpxor 3*32($inp), $D0, $D0 + vmovdqu $A0, 10*32($oup) + vmovdqu $B0, 11*32($oup) + vmovdqu $C0, 12*32($oup) + vmovdqu $D0, 13*32($oup) + lea 4*32($inp), $inp + sub \$4*32, $inl + mov \$8, $itr1 + mov \$2, $itr2 + cmp \$4*32, $inl + jbe .Lseal_avx2_tail_128 + cmp \$8*32, $inl + jbe .Lseal_avx2_tail_256 + cmp \$12*32, $inl + jbe .Lseal_avx2_tail_384 + cmp \$16*32, $inl + jbe .Lseal_avx2_tail_512\n"; + # We have 448 bytes to hash, but main loop hashes 512 bytes at a time - perform some rounds, before the main loop + &prep_state_avx2(4); + foreach $l (@loop_body) {$code.=$l."\n";} + @loop_body = split /\n/, $chacha_body; + &emit_body(41); + @loop_body = split /\n/, $chacha_body; $code.=" + sub \$16, $oup + mov \$9, $itr1 + jmp .Lseal_avx2_main_loop_rounds_entry +.align 32 +.Lseal_avx2_main_loop: \n"; + &prep_state_avx2(4); $code.=" + mov \$10, $itr1 +.align 32 +.Lseal_avx2_main_loop_rounds: \n"; + &poly_add("0*8($oup)"); + &emit_body(10); + &poly_stage1_mulx(); + &emit_body(9); + &poly_stage2_mulx(); + &emit_body(12); + &poly_stage3_mulx(); + &emit_body(10); + &poly_reduce_stage(); $code.=" +.Lseal_avx2_main_loop_rounds_entry: \n"; + &emit_body(9); + &poly_add("2*8($oup)"); + &emit_body(8); + &poly_stage1_mulx(); + &emit_body(18); + &poly_stage2_mulx(); + &emit_body(18); + &poly_stage3_mulx(); + &emit_body(9); + &poly_reduce_stage(); + &emit_body(8); + &poly_add("4*8($oup)"); $code.=" + lea 6*8($oup), $oup\n"; + &emit_body(18); + &poly_stage1_mulx(); + &emit_body(8); + &poly_stage2_mulx(); + &emit_body(8); + &poly_stage3_mulx(); + &emit_body(18); + &poly_reduce_stage(); + foreach $l (@loop_body) {$code.=$l."\n";} + @loop_body = split /\n/, $chacha_body; $code.=" + dec $itr1 + jne .Lseal_avx2_main_loop_rounds\n"; + &finalize_state_avx2(4); $code.=" + vmovdqa $A0, $tmp_store\n"; + &poly_add("0*8($oup)"); + &poly_mul_mulx(); + &poly_add("2*8($oup)"); + &poly_mul_mulx(); $code.=" + lea 4*8($oup), $oup\n"; + &xor_stream_avx2($A3, $B3, $C3, $D3, 0*32, $A0); $code.=" + vmovdqa $tmp_store, $A0\n"; + &xor_stream_avx2($A2, $B2, $C2, $D2, 4*32, $A3); + &xor_stream_avx2($A1, $B1, $C1, $D1, 8*32, $A3); + &xor_stream_avx2($A0, $B0, $C0, $D0, 12*32, $A3); $code.=" + lea 16*32($inp), $inp + sub \$16*32, $inl + cmp \$16*32, $inl + jg .Lseal_avx2_main_loop +\n"; + &poly_add("0*8($oup)"); + &poly_mul_mulx(); + &poly_add("2*8($oup)"); + &poly_mul_mulx(); $code.=" + lea 4*8($oup), $oup + mov \$10, $itr1 + xor $itr2, $itr2 + + cmp \$12*32, $inl + ja .Lseal_avx2_tail_512 + cmp \$8*32, $inl + ja .Lseal_avx2_tail_384 + cmp \$4*32, $inl + ja .Lseal_avx2_tail_256 +############################################################################### +.Lseal_avx2_tail_128:\n"; + &prep_state_avx2(1); $code.=" +.Lseal_avx2_tail_128_rounds_and_3xhash: \n"; + &poly_add("0($oup)"); + &poly_mul_mulx(); $code.=" + lea 2*8($oup), $oup +.Lseal_avx2_tail_128_rounds_and_2xhash: \n"; + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left"); + &poly_add("0*8($oup)"); + &poly_mul_mulx(); + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right"); + &poly_add("2*8($oup)"); + &poly_mul_mulx(); $code.=" + lea 4*8($oup), $oup + dec $itr1 + jg .Lseal_avx2_tail_128_rounds_and_3xhash + dec $itr2 + jge .Lseal_avx2_tail_128_rounds_and_2xhash\n"; + &finalize_state_avx2(1); + &finish_stream_avx2($A0,$B0,$C0,$D0,$T0); $code.=" + jmp .Lseal_avx2_short_loop +############################################################################### +.Lseal_avx2_tail_256:\n"; + &prep_state_avx2(2); $code.=" +.Lseal_avx2_tail_256_rounds_and_3xhash: \n"; + &poly_add("0($oup)"); + &poly_mul(); $code.=" + lea 2*8($oup), $oup +.Lseal_avx2_tail_256_rounds_and_2xhash: \n"; + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"left"); + &poly_add("0*8($oup)"); + &poly_mul(); + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right"); + &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"right"); + &poly_add("2*8($oup)"); + &poly_mul(); $code.=" + lea 4*8($oup), $oup + dec $itr1 + jg .Lseal_avx2_tail_256_rounds_and_3xhash + dec $itr2 + jge .Lseal_avx2_tail_256_rounds_and_2xhash\n"; + &finalize_state_avx2(2); + &xor_stream_avx2($A1,$B1,$C1,$D1,0*32,$T0); + &finish_stream_avx2($A0,$B0,$C0,$D0,$T0); $code.=" + mov \$4*32, $itr1 + lea 4*32($inp), $inp + sub \$4*32, $inl + jmp .Lseal_avx2_short_hash_remainder +############################################################################### +.Lseal_avx2_tail_384:\n"; + &prep_state_avx2(3); $code.=" +.Lseal_avx2_tail_384_rounds_and_3xhash: \n"; + &poly_add("0($oup)"); + &poly_mul(); $code.=" + lea 2*8($oup), $oup +.Lseal_avx2_tail_384_rounds_and_2xhash: \n"; + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"left"); + &poly_add("0*8($oup)"); + &poly_mul(); + &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"left"); + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right"); + &poly_add("2*8($oup)"); + &poly_mul(); + &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"right"); + &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"right"); $code.=" + lea 4*8($oup), $oup + dec $itr1 + jg .Lseal_avx2_tail_384_rounds_and_3xhash + dec $itr2 + jge .Lseal_avx2_tail_384_rounds_and_2xhash\n"; + &finalize_state_avx2(3); + &xor_stream_avx2($A2,$B2,$C2,$D2,0*32,$T0); + &xor_stream_avx2($A1,$B1,$C1,$D1,4*32,$T0); + &finish_stream_avx2($A0,$B0,$C0,$D0,$T0); $code.=" + mov \$8*32, $itr1 + lea 8*32($inp), $inp + sub \$8*32, $inl + jmp .Lseal_avx2_short_hash_remainder +############################################################################### +.Lseal_avx2_tail_512:\n"; + &prep_state_avx2(4); $code.=" +.Lseal_avx2_tail_512_rounds_and_3xhash: \n"; + &poly_add("0($oup)"); + &poly_mul_mulx(); $code.=" + lea 2*8($oup), $oup +.Lseal_avx2_tail_512_rounds_and_2xhash: \n"; + &emit_body(20); + &poly_add("0*8($oup)"); + &emit_body(20); + &poly_stage1_mulx(); + &emit_body(20); + &poly_stage2_mulx(); + &emit_body(20); + &poly_stage3_mulx(); + &emit_body(20); + &poly_reduce_stage(); + &emit_body(20); + &poly_add("2*8($oup)"); + &emit_body(20); + &poly_stage1_mulx(); + &emit_body(20); + &poly_stage2_mulx(); + &emit_body(20); + &poly_stage3_mulx(); + &emit_body(20); + &poly_reduce_stage(); + foreach $l (@loop_body) {$code.=$l."\n";} + @loop_body = split /\n/, $chacha_body; $code.=" + lea 4*8($oup), $oup + dec $itr1 + jg .Lseal_avx2_tail_512_rounds_and_3xhash + dec $itr2 + jge .Lseal_avx2_tail_512_rounds_and_2xhash\n"; + &finalize_state_avx2(4); $code.=" + vmovdqa $A0, $tmp_store\n"; + &xor_stream_avx2($A3, $B3, $C3, $D3, 0*32, $A0); $code.=" + vmovdqa $tmp_store, $A0\n"; + &xor_stream_avx2($A2, $B2, $C2, $D2, 4*32, $A3); + &xor_stream_avx2($A1, $B1, $C1, $D1, 8*32, $A3); + &finish_stream_avx2($A0,$B0,$C0,$D0,$T0); $code.=" + mov \$12*32, $itr1 + lea 12*32($inp), $inp + sub \$12*32, $inl + jmp .Lseal_avx2_short_hash_remainder +################################################################################ +.Lseal_avx2_320: + vmovdqa $A0, $A1 + vmovdqa $A0, $A2 + vmovdqa $B0, $B1 + vmovdqa $B0, $B2 + vmovdqa $C0, $C1 + vmovdqa $C0, $C2 + vpaddd .Lavx2_inc(%rip), $D0, $D1 + vpaddd .Lavx2_inc(%rip), $D1, $D2 + vmovdqa $B0, $T1 + vmovdqa $C0, $T2 + vmovdqa $D0, $ctr0_store + vmovdqa $D1, $ctr1_store + vmovdqa $D2, $ctr2_store + mov \$10, $acc0 +.Lseal_avx2_320_rounds: \n"; + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"left"); + &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"left"); + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right"); + &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"right"); + &chacha_qr_avx2($A2,$B2,$C2,$D2,$T0,"right"); $code.=" + dec $acc0 + jne .Lseal_avx2_320_rounds + vpaddd .Lchacha20_consts(%rip), $A0, $A0 + vpaddd .Lchacha20_consts(%rip), $A1, $A1 + vpaddd .Lchacha20_consts(%rip), $A2, $A2 + vpaddd $T1, $B0, $B0 + vpaddd $T1, $B1, $B1 + vpaddd $T1, $B2, $B2 + vpaddd $T2, $C0, $C0 + vpaddd $T2, $C1, $C1 + vpaddd $T2, $C2, $C2 + vpaddd $ctr0_store, $D0, $D0 + vpaddd $ctr1_store, $D1, $D1 + vpaddd $ctr2_store, $D2, $D2 + vperm2i128 \$0x02, $A0, $B0, $T0 + # Clamp and store the key + vpand .Lclamp(%rip), $T0, $T0 + vmovdqa $T0, $r_store + # Stream for up to 320 bytes + vperm2i128 \$0x13, $A0, $B0, $A0 + vperm2i128 \$0x13, $C0, $D0, $B0 + vperm2i128 \$0x02, $A1, $B1, $C0 + vperm2i128 \$0x02, $C1, $D1, $D0 + vperm2i128 \$0x13, $A1, $B1, $A1 + vperm2i128 \$0x13, $C1, $D1, $B1 + vperm2i128 \$0x02, $A2, $B2, $C1 + vperm2i128 \$0x02, $C2, $D2, $D1 + vperm2i128 \$0x13, $A2, $B2, $A2 + vperm2i128 \$0x13, $C2, $D2, $B2 + jmp .Lseal_avx2_short +################################################################################ +.Lseal_avx2_192: + vmovdqa $A0, $A1 + vmovdqa $A0, $A2 + vmovdqa $B0, $B1 + vmovdqa $B0, $B2 + vmovdqa $C0, $C1 + vmovdqa $C0, $C2 + vpaddd .Lavx2_inc(%rip), $D0, $D1 + vmovdqa $D0, $T2 + vmovdqa $D1, $T3 + mov \$10, $acc0 +.Lseal_avx2_192_rounds: \n"; + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"left"); + &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"left"); + &chacha_qr_avx2($A0,$B0,$C0,$D0,$T0,"right"); + &chacha_qr_avx2($A1,$B1,$C1,$D1,$T0,"right"); $code.=" + dec $acc0 + jne .Lseal_avx2_192_rounds + vpaddd $A2, $A0, $A0 + vpaddd $A2, $A1, $A1 + vpaddd $B2, $B0, $B0 + vpaddd $B2, $B1, $B1 + vpaddd $C2, $C0, $C0 + vpaddd $C2, $C1, $C1 + vpaddd $T2, $D0, $D0 + vpaddd $T3, $D1, $D1 + vperm2i128 \$0x02, $A0, $B0, $T0 + # Clamp and store the key + vpand .Lclamp(%rip), $T0, $T0 + vmovdqa $T0, $r_store + # Stream for up to 192 bytes + vperm2i128 \$0x13, $A0, $B0, $A0 + vperm2i128 \$0x13, $C0, $D0, $B0 + vperm2i128 \$0x02, $A1, $B1, $C0 + vperm2i128 \$0x02, $C1, $D1, $D0 + vperm2i128 \$0x13, $A1, $B1, $A1 + vperm2i128 \$0x13, $C1, $D1, $B1 +.Lseal_avx2_short: + mov $adl, $itr2 + call poly_hash_ad_internal + xor $itr1, $itr1 +.Lseal_avx2_short_hash_remainder: + cmp \$16, $itr1 + jb .Lseal_avx2_short_loop\n"; + &poly_add("0($oup)"); + &poly_mul(); $code.=" + sub \$16, $itr1 + add \$16, $oup + jmp .Lseal_avx2_short_hash_remainder +.Lseal_avx2_short_loop: + cmp \$32, $inl + jb .Lseal_avx2_short_tail + sub \$32, $inl + # Encrypt + vpxor ($inp), $A0, $A0 + vmovdqu $A0, ($oup) + lea 1*32($inp), $inp + # Load + hash\n"; + &poly_add("0*8($oup)"); + &poly_mul(); + &poly_add("2*8($oup)"); + &poly_mul(); $code.=" + lea 1*32($oup), $oup + # Shift stream + vmovdqa $B0, $A0 + vmovdqa $C0, $B0 + vmovdqa $D0, $C0 + vmovdqa $A1, $D0 + vmovdqa $B1, $A1 + vmovdqa $C1, $B1 + vmovdqa $D1, $C1 + vmovdqa $A2, $D1 + vmovdqa $B2, $A2 + jmp .Lseal_avx2_short_loop +.Lseal_avx2_short_tail: + cmp \$16, $inl + jb .Lseal_avx2_exit + sub \$16, $inl + vpxor ($inp), $A0x, $A3x + vmovdqu $A3x, ($oup) + lea 1*16($inp), $inp\n"; + &poly_add("0*8($oup)"); + &poly_mul(); $code.=" + lea 1*16($oup), $oup + vextracti128 \$1, $A0, $A0x +.Lseal_avx2_exit: + vzeroupper + jmp .Lseal_sse_tail_16 +.cfi_endproc +.size chacha20_poly1305_seal_avx2, .-chacha20_poly1305_seal_avx2 +"; +} + +$code =~ s/\`([^\`]*)\`/eval $1/gem; + +print $code; + +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/constant_time_test.c b/vendor/ring/crypto/constant_time_test.c new file mode 100644 index 00000000..4627cdd6 --- /dev/null +++ b/vendor/ring/crypto/constant_time_test.c @@ -0,0 +1,128 @@ +/* + * Utilities for constant-time cryptography. + * + * Author: Emilia Kasper (emilia@openssl.org) + * Based on previous work by Bodo Moeller, Emilia Kasper, Adam Langley + * (Google). + * ==================================================================== + * Copyright (c) 2014 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +#include "internal.h" + +int bssl_constant_time_test_main(void); + +static int test_binary_op_w(crypto_word (*op)(crypto_word a, crypto_word b), + crypto_word a, crypto_word b, int is_true) { + crypto_word c = op(a, b); + if (is_true && c != CONSTTIME_TRUE_W) { + return 1; + } else if (!is_true && c != CONSTTIME_FALSE_W) { + return 1; + } + return 0; +} + +static int test_is_zero_w(crypto_word a) { + crypto_word c = constant_time_is_zero_w(a); + if (a == 0 && c != CONSTTIME_TRUE_W) { + return 1; + } else if (a != 0 && c != CONSTTIME_FALSE_W) { + return 1; + } + + c = constant_time_is_nonzero_w(a); + if (a == 0 && c != CONSTTIME_FALSE_W) { + return 1; + } else if (a != 0 && c != CONSTTIME_TRUE_W) { + return 1; + } + + return 0; +} + +static int test_select_w(crypto_word a, crypto_word b) { + crypto_word selected = constant_time_select_w(CONSTTIME_TRUE_W, a, b); + if (selected != a) { + return 1; + } + selected = constant_time_select_w(CONSTTIME_FALSE_W, a, b); + if (selected != b) { + return 1; + } + return 0; +} + +static crypto_word test_values_s[] = { + 0, + 1, + 1024, + 12345, + 32000, +#if defined(OPENSSL_64_BIT) + 0xffffffff / 2 - 1, + 0xffffffff / 2, + 0xffffffff / 2 + 1, + 0xffffffff - 1, + 0xffffffff, +#endif + SIZE_MAX / 2 - 1, + SIZE_MAX / 2, + SIZE_MAX / 2 + 1, + SIZE_MAX - 1, + SIZE_MAX +}; + +int bssl_constant_time_test_main(void) { + int num_failed = 0; + + for (size_t i = 0; + i < sizeof(test_values_s) / sizeof(test_values_s[0]); ++i) { + crypto_word a = test_values_s[i]; + num_failed += test_is_zero_w(a); + for (size_t j = 0; + j < sizeof(test_values_s) / sizeof(test_values_s[0]); ++j) { + crypto_word b = test_values_s[j]; + num_failed += test_binary_op_w(&constant_time_eq_w, a, b, a == b); + num_failed += test_binary_op_w(&constant_time_eq_w, b, a, b == a); + num_failed += test_select_w(a, b); + } + } + + return num_failed == 0; +} diff --git a/vendor/ring/crypto/cpu-intel.c b/vendor/ring/crypto/cpu-intel.c new file mode 100644 index 00000000..adaff7aa --- /dev/null +++ b/vendor/ring/crypto/cpu-intel.c @@ -0,0 +1,203 @@ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] */ + +#include + + +#if !defined(OPENSSL_NO_ASM) && (defined(OPENSSL_X86) || defined(OPENSSL_X86_64)) + +#if defined(_MSC_VER) && !defined(__clang__) +#pragma warning(push, 3) +#include +#include +#pragma warning(pop) +#endif + +#include "internal.h" + + +// OPENSSL_cpuid runs the cpuid instruction. |leaf| is passed in as EAX and ECX +// is set to zero. It writes EAX, EBX, ECX, and EDX to |*out_eax| through +// |*out_edx|. +static void OPENSSL_cpuid(uint32_t *out_eax, uint32_t *out_ebx, + uint32_t *out_ecx, uint32_t *out_edx, uint32_t leaf) { +#if defined(_MSC_VER) && !defined(__clang__) + int tmp[4]; + __cpuid(tmp, (int)leaf); + *out_eax = (uint32_t)tmp[0]; + *out_ebx = (uint32_t)tmp[1]; + *out_ecx = (uint32_t)tmp[2]; + *out_edx = (uint32_t)tmp[3]; +#elif defined(__pic__) && defined(OPENSSL_32_BIT) + // Inline assembly may not clobber the PIC register. For 32-bit, this is EBX. + // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47602. + __asm__ volatile ( + "xor %%ecx, %%ecx\n" + "mov %%ebx, %%edi\n" + "cpuid\n" + "xchg %%edi, %%ebx\n" + : "=a"(*out_eax), "=D"(*out_ebx), "=c"(*out_ecx), "=d"(*out_edx) + : "a"(leaf) + ); +#else + __asm__ volatile ( + "xor %%ecx, %%ecx\n" + "cpuid\n" + : "=a"(*out_eax), "=b"(*out_ebx), "=c"(*out_ecx), "=d"(*out_edx) + : "a"(leaf) + ); +#endif +} + +// OPENSSL_xgetbv returns the value of an Intel Extended Control Register (XCR). +// Currently only XCR0 is defined by Intel so |xcr| should always be zero. +// +// See https://software.intel.com/en-us/articles/how-to-detect-new-instruction-support-in-the-4th-generation-intel-core-processor-family +static uint64_t OPENSSL_xgetbv(uint32_t xcr) { +#if defined(_MSC_VER) && !defined(__clang__) + return (uint64_t)_xgetbv(xcr); +#else + uint32_t eax, edx; + __asm__ volatile ("xgetbv" : "=a"(eax), "=d"(edx) : "c"(xcr)); + return (((uint64_t)edx) << 32) | eax; +#endif +} + +void GFp_cpuid_setup(void) { + // Determine the vendor and maximum input value. + uint32_t eax, ebx, ecx, edx; + OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 0); + + uint32_t num_ids = eax; + + int is_intel = ebx == 0x756e6547 /* Genu */ && + edx == 0x49656e69 /* ineI */ && + ecx == 0x6c65746e /* ntel */; + + uint32_t extended_features[2] = {0}; + if (num_ids >= 7) { + OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 7); + extended_features[0] = ebx; + extended_features[1] = ecx; + } + + OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 1); + + // Force the hyper-threading bit so that the more conservative path is always + // chosen. + edx |= 1u << 28; + + // Reserved bit #20 was historically repurposed to control the in-memory + // representation of RC4 state. Always set it to zero. + edx &= ~(1u << 20); + + // Reserved bit #30 is repurposed to signal an Intel CPU. + if (is_intel) { + edx |= (1u << 30); + + // Clear the XSAVE bit on Knights Landing to mimic Silvermont. This enables + // some Silvermont-specific codepaths which perform better. See OpenSSL + // commit 64d92d74985ebb3d0be58a9718f9e080a14a8e7f. + if ((eax & 0x0fff0ff0) == 0x00050670 /* Knights Landing */ || + (eax & 0x0fff0ff0) == 0x00080650 /* Knights Mill (per SDE) */) { + ecx &= ~(1u << 26); + } + } else { + edx &= ~(1u << 30); + } + + // The SDBG bit is repurposed to denote AMD XOP support. Don't ever use AMD + // XOP code paths. + ecx &= ~(1u << 11); + + uint64_t xcr0 = 0; + if (ecx & (1u << 27)) { + // XCR0 may only be queried if the OSXSAVE bit is set. + xcr0 = OPENSSL_xgetbv(0); + } + // See Intel manual, volume 1, section 14.3. + if ((xcr0 & 6) != 6) { + // YMM registers cannot be used. + ecx &= ~(1u << 28); // AVX + ecx &= ~(1u << 12); // FMA + ecx &= ~(1u << 11); // AMD XOP + // Clear AVX2 and AVX512* bits. + // + // TODO(davidben): Should bits 17 and 26-28 also be cleared? Upstream + // doesn't clear those. + extended_features[0] &= + ~((1u << 5) | (1u << 16) | (1u << 21) | (1u << 30) | (1u << 31)); + } + // See Intel manual, volume 1, section 15.2. + if ((xcr0 & 0xe6) != 0xe6) { + // Clear AVX512F. Note we don't touch other AVX512 extensions because they + // can be used with YMM. + extended_features[0] &= ~(1u << 16); + } + + // Disable ADX instructions on Knights Landing. See OpenSSL commit + // 64d92d74985ebb3d0be58a9718f9e080a14a8e7f. + if ((ecx & (1u << 26)) == 0) { + extended_features[0] &= ~(1u << 19); + } + + GFp_ia32cap_P[0] = edx; + GFp_ia32cap_P[1] = ecx; + GFp_ia32cap_P[2] = extended_features[0]; + GFp_ia32cap_P[3] = extended_features[1]; +} + +#endif // !OPENSSL_NO_ASM && (OPENSSL_X86 || OPENSSL_X86_64) diff --git a/vendor/ring/crypto/crypto.c b/vendor/ring/crypto/crypto.c new file mode 100644 index 00000000..8a3d0667 --- /dev/null +++ b/vendor/ring/crypto/crypto.c @@ -0,0 +1,38 @@ +/* Copyright (c) 2014, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +#include +#include "internal.h" + +// Our assembly does not use the GOT to reference symbols, which means +// references to visible symbols will often require a TEXTREL. This is +// undesirable, so all assembly-referenced symbols should be hidden. CPU +// capabilities are the only such symbols defined in C. Explicitly hide them, +// rather than rely on being built with -fvisibility=hidden. +#if defined(OPENSSL_WINDOWS) +#define HIDDEN +#else +#define HIDDEN __attribute__((visibility("hidden"))) +#endif + +#if defined(OPENSSL_X86) || defined(OPENSSL_X86_64) +// This value must be explicitly initialised to zero in order to work around a +// bug in libtool or the linker on OS X. +// +// If not initialised then it becomes a "common symbol". When put into an +// archive, linking on OS X will fail to resolve common symbols. By +// initialising it to zero, it becomes a "data symbol", which isn't so +// affected. +HIDDEN uint32_t GFp_ia32cap_P[4] = {0}; +#endif diff --git a/vendor/ring/crypto/curve25519/.gitattributes b/vendor/ring/crypto/curve25519/.gitattributes new file mode 100644 index 00000000..f11486c9 --- /dev/null +++ b/vendor/ring/crypto/curve25519/.gitattributes @@ -0,0 +1 @@ +curve25519_tables.h linguist-generated=true diff --git a/vendor/ring/crypto/curve25519/asm/x25519-asm-arm.S b/vendor/ring/crypto/curve25519/asm/x25519-asm-arm.S new file mode 100644 index 00000000..5f3e921c --- /dev/null +++ b/vendor/ring/crypto/curve25519/asm/x25519-asm-arm.S @@ -0,0 +1,2138 @@ +/* Copyright (c) 2015, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +/* This file is taken from crypto_scalarmult/curve25519/neon2/scalarmult.s in + * SUPERCOP 20141124 (http://bench.cr.yp.to/supercop.html). That code is public + * domain licensed but the standard ISC license is included above to keep + * licensing simple. */ + +#if defined(__has_feature) +#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM) +#define OPENSSL_NO_ASM +#endif +#endif + +#if !defined(OPENSSL_NO_ASM) && defined(__arm__) && !defined(__APPLE__) + +#if defined(BORINGSSL_PREFIX) +#include +#endif + +.fpu neon +.text +.align 4 + +.global GFp_x25519_NEON + +.hidden GFp_x25519_NEON +.type GFp_x25519_NEON, %function +GFp_x25519_NEON: + +vpush {q4,q5,q6,q7} +mov r12,sp +sub sp,sp,#736 +and sp,sp,#0xffffffe0 +strd r4,[sp,#0] +strd r6,[sp,#8] +strd r8,[sp,#16] +strd r10,[sp,#24] +str r12,[sp,#480] +str r14,[sp,#484] +mov r0,r0 +mov r1,r1 +mov r2,r2 +add r3,sp,#32 +ldr r4,=0 +ldr r5,=254 +vmov.i32 q0,#1 +vshr.u64 q1,q0,#7 +vshr.u64 q0,q0,#8 +vmov.i32 d4,#19 +vmov.i32 d5,#38 +add r6,sp,#512 +vst1.8 {d2-d3},[r6,: 128] +add r6,sp,#528 +vst1.8 {d0-d1},[r6,: 128] +add r6,sp,#544 +vst1.8 {d4-d5},[r6,: 128] +add r6,r3,#0 +vmov.i32 q2,#0 +vst1.8 {d4-d5},[r6,: 128]! +vst1.8 {d4-d5},[r6,: 128]! +vst1.8 d4,[r6,: 64] +add r6,r3,#0 +ldr r7,=960 +sub r7,r7,#2 +neg r7,r7 +sub r7,r7,r7,LSL #7 +str r7,[r6] +add r6,sp,#704 +vld1.8 {d4-d5},[r1]! +vld1.8 {d6-d7},[r1] +vst1.8 {d4-d5},[r6,: 128]! +vst1.8 {d6-d7},[r6,: 128] +sub r1,r6,#16 +ldrb r6,[r1] +and r6,r6,#248 +strb r6,[r1] +ldrb r6,[r1,#31] +and r6,r6,#127 +orr r6,r6,#64 +strb r6,[r1,#31] +vmov.i64 q2,#0xffffffff +vshr.u64 q3,q2,#7 +vshr.u64 q2,q2,#6 +vld1.8 {d8},[r2] +vld1.8 {d10},[r2] +add r2,r2,#6 +vld1.8 {d12},[r2] +vld1.8 {d14},[r2] +add r2,r2,#6 +vld1.8 {d16},[r2] +add r2,r2,#4 +vld1.8 {d18},[r2] +vld1.8 {d20},[r2] +add r2,r2,#6 +vld1.8 {d22},[r2] +add r2,r2,#2 +vld1.8 {d24},[r2] +vld1.8 {d26},[r2] +vshr.u64 q5,q5,#26 +vshr.u64 q6,q6,#3 +vshr.u64 q7,q7,#29 +vshr.u64 q8,q8,#6 +vshr.u64 q10,q10,#25 +vshr.u64 q11,q11,#3 +vshr.u64 q12,q12,#12 +vshr.u64 q13,q13,#38 +vand q4,q4,q2 +vand q6,q6,q2 +vand q8,q8,q2 +vand q10,q10,q2 +vand q2,q12,q2 +vand q5,q5,q3 +vand q7,q7,q3 +vand q9,q9,q3 +vand q11,q11,q3 +vand q3,q13,q3 +add r2,r3,#48 +vadd.i64 q12,q4,q1 +vadd.i64 q13,q10,q1 +vshr.s64 q12,q12,#26 +vshr.s64 q13,q13,#26 +vadd.i64 q5,q5,q12 +vshl.i64 q12,q12,#26 +vadd.i64 q14,q5,q0 +vadd.i64 q11,q11,q13 +vshl.i64 q13,q13,#26 +vadd.i64 q15,q11,q0 +vsub.i64 q4,q4,q12 +vshr.s64 q12,q14,#25 +vsub.i64 q10,q10,q13 +vshr.s64 q13,q15,#25 +vadd.i64 q6,q6,q12 +vshl.i64 q12,q12,#25 +vadd.i64 q14,q6,q1 +vadd.i64 q2,q2,q13 +vsub.i64 q5,q5,q12 +vshr.s64 q12,q14,#26 +vshl.i64 q13,q13,#25 +vadd.i64 q14,q2,q1 +vadd.i64 q7,q7,q12 +vshl.i64 q12,q12,#26 +vadd.i64 q15,q7,q0 +vsub.i64 q11,q11,q13 +vshr.s64 q13,q14,#26 +vsub.i64 q6,q6,q12 +vshr.s64 q12,q15,#25 +vadd.i64 q3,q3,q13 +vshl.i64 q13,q13,#26 +vadd.i64 q14,q3,q0 +vadd.i64 q8,q8,q12 +vshl.i64 q12,q12,#25 +vadd.i64 q15,q8,q1 +add r2,r2,#8 +vsub.i64 q2,q2,q13 +vshr.s64 q13,q14,#25 +vsub.i64 q7,q7,q12 +vshr.s64 q12,q15,#26 +vadd.i64 q14,q13,q13 +vadd.i64 q9,q9,q12 +vtrn.32 d12,d14 +vshl.i64 q12,q12,#26 +vtrn.32 d13,d15 +vadd.i64 q0,q9,q0 +vadd.i64 q4,q4,q14 +vst1.8 d12,[r2,: 64]! +vshl.i64 q6,q13,#4 +vsub.i64 q7,q8,q12 +vshr.s64 q0,q0,#25 +vadd.i64 q4,q4,q6 +vadd.i64 q6,q10,q0 +vshl.i64 q0,q0,#25 +vadd.i64 q8,q6,q1 +vadd.i64 q4,q4,q13 +vshl.i64 q10,q13,#25 +vadd.i64 q1,q4,q1 +vsub.i64 q0,q9,q0 +vshr.s64 q8,q8,#26 +vsub.i64 q3,q3,q10 +vtrn.32 d14,d0 +vshr.s64 q1,q1,#26 +vtrn.32 d15,d1 +vadd.i64 q0,q11,q8 +vst1.8 d14,[r2,: 64] +vshl.i64 q7,q8,#26 +vadd.i64 q5,q5,q1 +vtrn.32 d4,d6 +vshl.i64 q1,q1,#26 +vtrn.32 d5,d7 +vsub.i64 q3,q6,q7 +add r2,r2,#16 +vsub.i64 q1,q4,q1 +vst1.8 d4,[r2,: 64] +vtrn.32 d6,d0 +vtrn.32 d7,d1 +sub r2,r2,#8 +vtrn.32 d2,d10 +vtrn.32 d3,d11 +vst1.8 d6,[r2,: 64] +sub r2,r2,#24 +vst1.8 d2,[r2,: 64] +add r2,r3,#96 +vmov.i32 q0,#0 +vmov.i64 d2,#0xff +vmov.i64 d3,#0 +vshr.u32 q1,q1,#7 +vst1.8 {d2-d3},[r2,: 128]! +vst1.8 {d0-d1},[r2,: 128]! +vst1.8 d0,[r2,: 64] +add r2,r3,#144 +vmov.i32 q0,#0 +vst1.8 {d0-d1},[r2,: 128]! +vst1.8 {d0-d1},[r2,: 128]! +vst1.8 d0,[r2,: 64] +add r2,r3,#240 +vmov.i32 q0,#0 +vmov.i64 d2,#0xff +vmov.i64 d3,#0 +vshr.u32 q1,q1,#7 +vst1.8 {d2-d3},[r2,: 128]! +vst1.8 {d0-d1},[r2,: 128]! +vst1.8 d0,[r2,: 64] +add r2,r3,#48 +add r6,r3,#192 +vld1.8 {d0-d1},[r2,: 128]! +vld1.8 {d2-d3},[r2,: 128]! +vld1.8 {d4},[r2,: 64] +vst1.8 {d0-d1},[r6,: 128]! +vst1.8 {d2-d3},[r6,: 128]! +vst1.8 d4,[r6,: 64] +._mainloop: +mov r2,r5,LSR #3 +and r6,r5,#7 +ldrb r2,[r1,r2] +mov r2,r2,LSR r6 +and r2,r2,#1 +str r5,[sp,#488] +eor r4,r4,r2 +str r2,[sp,#492] +neg r2,r4 +add r4,r3,#96 +add r5,r3,#192 +add r6,r3,#144 +vld1.8 {d8-d9},[r4,: 128]! +add r7,r3,#240 +vld1.8 {d10-d11},[r5,: 128]! +veor q6,q4,q5 +vld1.8 {d14-d15},[r6,: 128]! +vdup.i32 q8,r2 +vld1.8 {d18-d19},[r7,: 128]! +veor q10,q7,q9 +vld1.8 {d22-d23},[r4,: 128]! +vand q6,q6,q8 +vld1.8 {d24-d25},[r5,: 128]! +vand q10,q10,q8 +vld1.8 {d26-d27},[r6,: 128]! +veor q4,q4,q6 +vld1.8 {d28-d29},[r7,: 128]! +veor q5,q5,q6 +vld1.8 {d0},[r4,: 64] +veor q6,q7,q10 +vld1.8 {d2},[r5,: 64] +veor q7,q9,q10 +vld1.8 {d4},[r6,: 64] +veor q9,q11,q12 +vld1.8 {d6},[r7,: 64] +veor q10,q0,q1 +sub r2,r4,#32 +vand q9,q9,q8 +sub r4,r5,#32 +vand q10,q10,q8 +sub r5,r6,#32 +veor q11,q11,q9 +sub r6,r7,#32 +veor q0,q0,q10 +veor q9,q12,q9 +veor q1,q1,q10 +veor q10,q13,q14 +veor q12,q2,q3 +vand q10,q10,q8 +vand q8,q12,q8 +veor q12,q13,q10 +veor q2,q2,q8 +veor q10,q14,q10 +veor q3,q3,q8 +vadd.i32 q8,q4,q6 +vsub.i32 q4,q4,q6 +vst1.8 {d16-d17},[r2,: 128]! +vadd.i32 q6,q11,q12 +vst1.8 {d8-d9},[r5,: 128]! +vsub.i32 q4,q11,q12 +vst1.8 {d12-d13},[r2,: 128]! +vadd.i32 q6,q0,q2 +vst1.8 {d8-d9},[r5,: 128]! +vsub.i32 q0,q0,q2 +vst1.8 d12,[r2,: 64] +vadd.i32 q2,q5,q7 +vst1.8 d0,[r5,: 64] +vsub.i32 q0,q5,q7 +vst1.8 {d4-d5},[r4,: 128]! +vadd.i32 q2,q9,q10 +vst1.8 {d0-d1},[r6,: 128]! +vsub.i32 q0,q9,q10 +vst1.8 {d4-d5},[r4,: 128]! +vadd.i32 q2,q1,q3 +vst1.8 {d0-d1},[r6,: 128]! +vsub.i32 q0,q1,q3 +vst1.8 d4,[r4,: 64] +vst1.8 d0,[r6,: 64] +add r2,sp,#544 +add r4,r3,#96 +add r5,r3,#144 +vld1.8 {d0-d1},[r2,: 128] +vld1.8 {d2-d3},[r4,: 128]! +vld1.8 {d4-d5},[r5,: 128]! +vzip.i32 q1,q2 +vld1.8 {d6-d7},[r4,: 128]! +vld1.8 {d8-d9},[r5,: 128]! +vshl.i32 q5,q1,#1 +vzip.i32 q3,q4 +vshl.i32 q6,q2,#1 +vld1.8 {d14},[r4,: 64] +vshl.i32 q8,q3,#1 +vld1.8 {d15},[r5,: 64] +vshl.i32 q9,q4,#1 +vmul.i32 d21,d7,d1 +vtrn.32 d14,d15 +vmul.i32 q11,q4,q0 +vmul.i32 q0,q7,q0 +vmull.s32 q12,d2,d2 +vmlal.s32 q12,d11,d1 +vmlal.s32 q12,d12,d0 +vmlal.s32 q12,d13,d23 +vmlal.s32 q12,d16,d22 +vmlal.s32 q12,d7,d21 +vmull.s32 q10,d2,d11 +vmlal.s32 q10,d4,d1 +vmlal.s32 q10,d13,d0 +vmlal.s32 q10,d6,d23 +vmlal.s32 q10,d17,d22 +vmull.s32 q13,d10,d4 +vmlal.s32 q13,d11,d3 +vmlal.s32 q13,d13,d1 +vmlal.s32 q13,d16,d0 +vmlal.s32 q13,d17,d23 +vmlal.s32 q13,d8,d22 +vmull.s32 q1,d10,d5 +vmlal.s32 q1,d11,d4 +vmlal.s32 q1,d6,d1 +vmlal.s32 q1,d17,d0 +vmlal.s32 q1,d8,d23 +vmull.s32 q14,d10,d6 +vmlal.s32 q14,d11,d13 +vmlal.s32 q14,d4,d4 +vmlal.s32 q14,d17,d1 +vmlal.s32 q14,d18,d0 +vmlal.s32 q14,d9,d23 +vmull.s32 q11,d10,d7 +vmlal.s32 q11,d11,d6 +vmlal.s32 q11,d12,d5 +vmlal.s32 q11,d8,d1 +vmlal.s32 q11,d19,d0 +vmull.s32 q15,d10,d8 +vmlal.s32 q15,d11,d17 +vmlal.s32 q15,d12,d6 +vmlal.s32 q15,d13,d5 +vmlal.s32 q15,d19,d1 +vmlal.s32 q15,d14,d0 +vmull.s32 q2,d10,d9 +vmlal.s32 q2,d11,d8 +vmlal.s32 q2,d12,d7 +vmlal.s32 q2,d13,d6 +vmlal.s32 q2,d14,d1 +vmull.s32 q0,d15,d1 +vmlal.s32 q0,d10,d14 +vmlal.s32 q0,d11,d19 +vmlal.s32 q0,d12,d8 +vmlal.s32 q0,d13,d17 +vmlal.s32 q0,d6,d6 +add r2,sp,#512 +vld1.8 {d18-d19},[r2,: 128] +vmull.s32 q3,d16,d7 +vmlal.s32 q3,d10,d15 +vmlal.s32 q3,d11,d14 +vmlal.s32 q3,d12,d9 +vmlal.s32 q3,d13,d8 +add r2,sp,#528 +vld1.8 {d8-d9},[r2,: 128] +vadd.i64 q5,q12,q9 +vadd.i64 q6,q15,q9 +vshr.s64 q5,q5,#26 +vshr.s64 q6,q6,#26 +vadd.i64 q7,q10,q5 +vshl.i64 q5,q5,#26 +vadd.i64 q8,q7,q4 +vadd.i64 q2,q2,q6 +vshl.i64 q6,q6,#26 +vadd.i64 q10,q2,q4 +vsub.i64 q5,q12,q5 +vshr.s64 q8,q8,#25 +vsub.i64 q6,q15,q6 +vshr.s64 q10,q10,#25 +vadd.i64 q12,q13,q8 +vshl.i64 q8,q8,#25 +vadd.i64 q13,q12,q9 +vadd.i64 q0,q0,q10 +vsub.i64 q7,q7,q8 +vshr.s64 q8,q13,#26 +vshl.i64 q10,q10,#25 +vadd.i64 q13,q0,q9 +vadd.i64 q1,q1,q8 +vshl.i64 q8,q8,#26 +vadd.i64 q15,q1,q4 +vsub.i64 q2,q2,q10 +vshr.s64 q10,q13,#26 +vsub.i64 q8,q12,q8 +vshr.s64 q12,q15,#25 +vadd.i64 q3,q3,q10 +vshl.i64 q10,q10,#26 +vadd.i64 q13,q3,q4 +vadd.i64 q14,q14,q12 +add r2,r3,#288 +vshl.i64 q12,q12,#25 +add r4,r3,#336 +vadd.i64 q15,q14,q9 +add r2,r2,#8 +vsub.i64 q0,q0,q10 +add r4,r4,#8 +vshr.s64 q10,q13,#25 +vsub.i64 q1,q1,q12 +vshr.s64 q12,q15,#26 +vadd.i64 q13,q10,q10 +vadd.i64 q11,q11,q12 +vtrn.32 d16,d2 +vshl.i64 q12,q12,#26 +vtrn.32 d17,d3 +vadd.i64 q1,q11,q4 +vadd.i64 q4,q5,q13 +vst1.8 d16,[r2,: 64]! +vshl.i64 q5,q10,#4 +vst1.8 d17,[r4,: 64]! +vsub.i64 q8,q14,q12 +vshr.s64 q1,q1,#25 +vadd.i64 q4,q4,q5 +vadd.i64 q5,q6,q1 +vshl.i64 q1,q1,#25 +vadd.i64 q6,q5,q9 +vadd.i64 q4,q4,q10 +vshl.i64 q10,q10,#25 +vadd.i64 q9,q4,q9 +vsub.i64 q1,q11,q1 +vshr.s64 q6,q6,#26 +vsub.i64 q3,q3,q10 +vtrn.32 d16,d2 +vshr.s64 q9,q9,#26 +vtrn.32 d17,d3 +vadd.i64 q1,q2,q6 +vst1.8 d16,[r2,: 64] +vshl.i64 q2,q6,#26 +vst1.8 d17,[r4,: 64] +vadd.i64 q6,q7,q9 +vtrn.32 d0,d6 +vshl.i64 q7,q9,#26 +vtrn.32 d1,d7 +vsub.i64 q2,q5,q2 +add r2,r2,#16 +vsub.i64 q3,q4,q7 +vst1.8 d0,[r2,: 64] +add r4,r4,#16 +vst1.8 d1,[r4,: 64] +vtrn.32 d4,d2 +vtrn.32 d5,d3 +sub r2,r2,#8 +sub r4,r4,#8 +vtrn.32 d6,d12 +vtrn.32 d7,d13 +vst1.8 d4,[r2,: 64] +vst1.8 d5,[r4,: 64] +sub r2,r2,#24 +sub r4,r4,#24 +vst1.8 d6,[r2,: 64] +vst1.8 d7,[r4,: 64] +add r2,r3,#240 +add r4,r3,#96 +vld1.8 {d0-d1},[r4,: 128]! +vld1.8 {d2-d3},[r4,: 128]! +vld1.8 {d4},[r4,: 64] +add r4,r3,#144 +vld1.8 {d6-d7},[r4,: 128]! +vtrn.32 q0,q3 +vld1.8 {d8-d9},[r4,: 128]! +vshl.i32 q5,q0,#4 +vtrn.32 q1,q4 +vshl.i32 q6,q3,#4 +vadd.i32 q5,q5,q0 +vadd.i32 q6,q6,q3 +vshl.i32 q7,q1,#4 +vld1.8 {d5},[r4,: 64] +vshl.i32 q8,q4,#4 +vtrn.32 d4,d5 +vadd.i32 q7,q7,q1 +vadd.i32 q8,q8,q4 +vld1.8 {d18-d19},[r2,: 128]! +vshl.i32 q10,q2,#4 +vld1.8 {d22-d23},[r2,: 128]! +vadd.i32 q10,q10,q2 +vld1.8 {d24},[r2,: 64] +vadd.i32 q5,q5,q0 +add r2,r3,#192 +vld1.8 {d26-d27},[r2,: 128]! +vadd.i32 q6,q6,q3 +vld1.8 {d28-d29},[r2,: 128]! +vadd.i32 q8,q8,q4 +vld1.8 {d25},[r2,: 64] +vadd.i32 q10,q10,q2 +vtrn.32 q9,q13 +vadd.i32 q7,q7,q1 +vadd.i32 q5,q5,q0 +vtrn.32 q11,q14 +vadd.i32 q6,q6,q3 +add r2,sp,#560 +vadd.i32 q10,q10,q2 +vtrn.32 d24,d25 +vst1.8 {d12-d13},[r2,: 128] +vshl.i32 q6,q13,#1 +add r2,sp,#576 +vst1.8 {d20-d21},[r2,: 128] +vshl.i32 q10,q14,#1 +add r2,sp,#592 +vst1.8 {d12-d13},[r2,: 128] +vshl.i32 q15,q12,#1 +vadd.i32 q8,q8,q4 +vext.32 d10,d31,d30,#0 +vadd.i32 q7,q7,q1 +add r2,sp,#608 +vst1.8 {d16-d17},[r2,: 128] +vmull.s32 q8,d18,d5 +vmlal.s32 q8,d26,d4 +vmlal.s32 q8,d19,d9 +vmlal.s32 q8,d27,d3 +vmlal.s32 q8,d22,d8 +vmlal.s32 q8,d28,d2 +vmlal.s32 q8,d23,d7 +vmlal.s32 q8,d29,d1 +vmlal.s32 q8,d24,d6 +vmlal.s32 q8,d25,d0 +add r2,sp,#624 +vst1.8 {d14-d15},[r2,: 128] +vmull.s32 q2,d18,d4 +vmlal.s32 q2,d12,d9 +vmlal.s32 q2,d13,d8 +vmlal.s32 q2,d19,d3 +vmlal.s32 q2,d22,d2 +vmlal.s32 q2,d23,d1 +vmlal.s32 q2,d24,d0 +add r2,sp,#640 +vst1.8 {d20-d21},[r2,: 128] +vmull.s32 q7,d18,d9 +vmlal.s32 q7,d26,d3 +vmlal.s32 q7,d19,d8 +vmlal.s32 q7,d27,d2 +vmlal.s32 q7,d22,d7 +vmlal.s32 q7,d28,d1 +vmlal.s32 q7,d23,d6 +vmlal.s32 q7,d29,d0 +add r2,sp,#656 +vst1.8 {d10-d11},[r2,: 128] +vmull.s32 q5,d18,d3 +vmlal.s32 q5,d19,d2 +vmlal.s32 q5,d22,d1 +vmlal.s32 q5,d23,d0 +vmlal.s32 q5,d12,d8 +add r2,sp,#672 +vst1.8 {d16-d17},[r2,: 128] +vmull.s32 q4,d18,d8 +vmlal.s32 q4,d26,d2 +vmlal.s32 q4,d19,d7 +vmlal.s32 q4,d27,d1 +vmlal.s32 q4,d22,d6 +vmlal.s32 q4,d28,d0 +vmull.s32 q8,d18,d7 +vmlal.s32 q8,d26,d1 +vmlal.s32 q8,d19,d6 +vmlal.s32 q8,d27,d0 +add r2,sp,#576 +vld1.8 {d20-d21},[r2,: 128] +vmlal.s32 q7,d24,d21 +vmlal.s32 q7,d25,d20 +vmlal.s32 q4,d23,d21 +vmlal.s32 q4,d29,d20 +vmlal.s32 q8,d22,d21 +vmlal.s32 q8,d28,d20 +vmlal.s32 q5,d24,d20 +add r2,sp,#576 +vst1.8 {d14-d15},[r2,: 128] +vmull.s32 q7,d18,d6 +vmlal.s32 q7,d26,d0 +add r2,sp,#656 +vld1.8 {d30-d31},[r2,: 128] +vmlal.s32 q2,d30,d21 +vmlal.s32 q7,d19,d21 +vmlal.s32 q7,d27,d20 +add r2,sp,#624 +vld1.8 {d26-d27},[r2,: 128] +vmlal.s32 q4,d25,d27 +vmlal.s32 q8,d29,d27 +vmlal.s32 q8,d25,d26 +vmlal.s32 q7,d28,d27 +vmlal.s32 q7,d29,d26 +add r2,sp,#608 +vld1.8 {d28-d29},[r2,: 128] +vmlal.s32 q4,d24,d29 +vmlal.s32 q8,d23,d29 +vmlal.s32 q8,d24,d28 +vmlal.s32 q7,d22,d29 +vmlal.s32 q7,d23,d28 +add r2,sp,#608 +vst1.8 {d8-d9},[r2,: 128] +add r2,sp,#560 +vld1.8 {d8-d9},[r2,: 128] +vmlal.s32 q7,d24,d9 +vmlal.s32 q7,d25,d31 +vmull.s32 q1,d18,d2 +vmlal.s32 q1,d19,d1 +vmlal.s32 q1,d22,d0 +vmlal.s32 q1,d24,d27 +vmlal.s32 q1,d23,d20 +vmlal.s32 q1,d12,d7 +vmlal.s32 q1,d13,d6 +vmull.s32 q6,d18,d1 +vmlal.s32 q6,d19,d0 +vmlal.s32 q6,d23,d27 +vmlal.s32 q6,d22,d20 +vmlal.s32 q6,d24,d26 +vmull.s32 q0,d18,d0 +vmlal.s32 q0,d22,d27 +vmlal.s32 q0,d23,d26 +vmlal.s32 q0,d24,d31 +vmlal.s32 q0,d19,d20 +add r2,sp,#640 +vld1.8 {d18-d19},[r2,: 128] +vmlal.s32 q2,d18,d7 +vmlal.s32 q2,d19,d6 +vmlal.s32 q5,d18,d6 +vmlal.s32 q5,d19,d21 +vmlal.s32 q1,d18,d21 +vmlal.s32 q1,d19,d29 +vmlal.s32 q0,d18,d28 +vmlal.s32 q0,d19,d9 +vmlal.s32 q6,d18,d29 +vmlal.s32 q6,d19,d28 +add r2,sp,#592 +vld1.8 {d18-d19},[r2,: 128] +add r2,sp,#512 +vld1.8 {d22-d23},[r2,: 128] +vmlal.s32 q5,d19,d7 +vmlal.s32 q0,d18,d21 +vmlal.s32 q0,d19,d29 +vmlal.s32 q6,d18,d6 +add r2,sp,#528 +vld1.8 {d6-d7},[r2,: 128] +vmlal.s32 q6,d19,d21 +add r2,sp,#576 +vld1.8 {d18-d19},[r2,: 128] +vmlal.s32 q0,d30,d8 +add r2,sp,#672 +vld1.8 {d20-d21},[r2,: 128] +vmlal.s32 q5,d30,d29 +add r2,sp,#608 +vld1.8 {d24-d25},[r2,: 128] +vmlal.s32 q1,d30,d28 +vadd.i64 q13,q0,q11 +vadd.i64 q14,q5,q11 +vmlal.s32 q6,d30,d9 +vshr.s64 q4,q13,#26 +vshr.s64 q13,q14,#26 +vadd.i64 q7,q7,q4 +vshl.i64 q4,q4,#26 +vadd.i64 q14,q7,q3 +vadd.i64 q9,q9,q13 +vshl.i64 q13,q13,#26 +vadd.i64 q15,q9,q3 +vsub.i64 q0,q0,q4 +vshr.s64 q4,q14,#25 +vsub.i64 q5,q5,q13 +vshr.s64 q13,q15,#25 +vadd.i64 q6,q6,q4 +vshl.i64 q4,q4,#25 +vadd.i64 q14,q6,q11 +vadd.i64 q2,q2,q13 +vsub.i64 q4,q7,q4 +vshr.s64 q7,q14,#26 +vshl.i64 q13,q13,#25 +vadd.i64 q14,q2,q11 +vadd.i64 q8,q8,q7 +vshl.i64 q7,q7,#26 +vadd.i64 q15,q8,q3 +vsub.i64 q9,q9,q13 +vshr.s64 q13,q14,#26 +vsub.i64 q6,q6,q7 +vshr.s64 q7,q15,#25 +vadd.i64 q10,q10,q13 +vshl.i64 q13,q13,#26 +vadd.i64 q14,q10,q3 +vadd.i64 q1,q1,q7 +add r2,r3,#144 +vshl.i64 q7,q7,#25 +add r4,r3,#96 +vadd.i64 q15,q1,q11 +add r2,r2,#8 +vsub.i64 q2,q2,q13 +add r4,r4,#8 +vshr.s64 q13,q14,#25 +vsub.i64 q7,q8,q7 +vshr.s64 q8,q15,#26 +vadd.i64 q14,q13,q13 +vadd.i64 q12,q12,q8 +vtrn.32 d12,d14 +vshl.i64 q8,q8,#26 +vtrn.32 d13,d15 +vadd.i64 q3,q12,q3 +vadd.i64 q0,q0,q14 +vst1.8 d12,[r2,: 64]! +vshl.i64 q7,q13,#4 +vst1.8 d13,[r4,: 64]! +vsub.i64 q1,q1,q8 +vshr.s64 q3,q3,#25 +vadd.i64 q0,q0,q7 +vadd.i64 q5,q5,q3 +vshl.i64 q3,q3,#25 +vadd.i64 q6,q5,q11 +vadd.i64 q0,q0,q13 +vshl.i64 q7,q13,#25 +vadd.i64 q8,q0,q11 +vsub.i64 q3,q12,q3 +vshr.s64 q6,q6,#26 +vsub.i64 q7,q10,q7 +vtrn.32 d2,d6 +vshr.s64 q8,q8,#26 +vtrn.32 d3,d7 +vadd.i64 q3,q9,q6 +vst1.8 d2,[r2,: 64] +vshl.i64 q6,q6,#26 +vst1.8 d3,[r4,: 64] +vadd.i64 q1,q4,q8 +vtrn.32 d4,d14 +vshl.i64 q4,q8,#26 +vtrn.32 d5,d15 +vsub.i64 q5,q5,q6 +add r2,r2,#16 +vsub.i64 q0,q0,q4 +vst1.8 d4,[r2,: 64] +add r4,r4,#16 +vst1.8 d5,[r4,: 64] +vtrn.32 d10,d6 +vtrn.32 d11,d7 +sub r2,r2,#8 +sub r4,r4,#8 +vtrn.32 d0,d2 +vtrn.32 d1,d3 +vst1.8 d10,[r2,: 64] +vst1.8 d11,[r4,: 64] +sub r2,r2,#24 +sub r4,r4,#24 +vst1.8 d0,[r2,: 64] +vst1.8 d1,[r4,: 64] +add r2,r3,#288 +add r4,r3,#336 +vld1.8 {d0-d1},[r2,: 128]! +vld1.8 {d2-d3},[r4,: 128]! +vsub.i32 q0,q0,q1 +vld1.8 {d2-d3},[r2,: 128]! +vld1.8 {d4-d5},[r4,: 128]! +vsub.i32 q1,q1,q2 +add r5,r3,#240 +vld1.8 {d4},[r2,: 64] +vld1.8 {d6},[r4,: 64] +vsub.i32 q2,q2,q3 +vst1.8 {d0-d1},[r5,: 128]! +vst1.8 {d2-d3},[r5,: 128]! +vst1.8 d4,[r5,: 64] +add r2,r3,#144 +add r4,r3,#96 +add r5,r3,#144 +add r6,r3,#192 +vld1.8 {d0-d1},[r2,: 128]! +vld1.8 {d2-d3},[r4,: 128]! +vsub.i32 q2,q0,q1 +vadd.i32 q0,q0,q1 +vld1.8 {d2-d3},[r2,: 128]! +vld1.8 {d6-d7},[r4,: 128]! +vsub.i32 q4,q1,q3 +vadd.i32 q1,q1,q3 +vld1.8 {d6},[r2,: 64] +vld1.8 {d10},[r4,: 64] +vsub.i32 q6,q3,q5 +vadd.i32 q3,q3,q5 +vst1.8 {d4-d5},[r5,: 128]! +vst1.8 {d0-d1},[r6,: 128]! +vst1.8 {d8-d9},[r5,: 128]! +vst1.8 {d2-d3},[r6,: 128]! +vst1.8 d12,[r5,: 64] +vst1.8 d6,[r6,: 64] +add r2,r3,#0 +add r4,r3,#240 +vld1.8 {d0-d1},[r4,: 128]! +vld1.8 {d2-d3},[r4,: 128]! +vld1.8 {d4},[r4,: 64] +add r4,r3,#336 +vld1.8 {d6-d7},[r4,: 128]! +vtrn.32 q0,q3 +vld1.8 {d8-d9},[r4,: 128]! +vshl.i32 q5,q0,#4 +vtrn.32 q1,q4 +vshl.i32 q6,q3,#4 +vadd.i32 q5,q5,q0 +vadd.i32 q6,q6,q3 +vshl.i32 q7,q1,#4 +vld1.8 {d5},[r4,: 64] +vshl.i32 q8,q4,#4 +vtrn.32 d4,d5 +vadd.i32 q7,q7,q1 +vadd.i32 q8,q8,q4 +vld1.8 {d18-d19},[r2,: 128]! +vshl.i32 q10,q2,#4 +vld1.8 {d22-d23},[r2,: 128]! +vadd.i32 q10,q10,q2 +vld1.8 {d24},[r2,: 64] +vadd.i32 q5,q5,q0 +add r2,r3,#288 +vld1.8 {d26-d27},[r2,: 128]! +vadd.i32 q6,q6,q3 +vld1.8 {d28-d29},[r2,: 128]! +vadd.i32 q8,q8,q4 +vld1.8 {d25},[r2,: 64] +vadd.i32 q10,q10,q2 +vtrn.32 q9,q13 +vadd.i32 q7,q7,q1 +vadd.i32 q5,q5,q0 +vtrn.32 q11,q14 +vadd.i32 q6,q6,q3 +add r2,sp,#560 +vadd.i32 q10,q10,q2 +vtrn.32 d24,d25 +vst1.8 {d12-d13},[r2,: 128] +vshl.i32 q6,q13,#1 +add r2,sp,#576 +vst1.8 {d20-d21},[r2,: 128] +vshl.i32 q10,q14,#1 +add r2,sp,#592 +vst1.8 {d12-d13},[r2,: 128] +vshl.i32 q15,q12,#1 +vadd.i32 q8,q8,q4 +vext.32 d10,d31,d30,#0 +vadd.i32 q7,q7,q1 +add r2,sp,#608 +vst1.8 {d16-d17},[r2,: 128] +vmull.s32 q8,d18,d5 +vmlal.s32 q8,d26,d4 +vmlal.s32 q8,d19,d9 +vmlal.s32 q8,d27,d3 +vmlal.s32 q8,d22,d8 +vmlal.s32 q8,d28,d2 +vmlal.s32 q8,d23,d7 +vmlal.s32 q8,d29,d1 +vmlal.s32 q8,d24,d6 +vmlal.s32 q8,d25,d0 +add r2,sp,#624 +vst1.8 {d14-d15},[r2,: 128] +vmull.s32 q2,d18,d4 +vmlal.s32 q2,d12,d9 +vmlal.s32 q2,d13,d8 +vmlal.s32 q2,d19,d3 +vmlal.s32 q2,d22,d2 +vmlal.s32 q2,d23,d1 +vmlal.s32 q2,d24,d0 +add r2,sp,#640 +vst1.8 {d20-d21},[r2,: 128] +vmull.s32 q7,d18,d9 +vmlal.s32 q7,d26,d3 +vmlal.s32 q7,d19,d8 +vmlal.s32 q7,d27,d2 +vmlal.s32 q7,d22,d7 +vmlal.s32 q7,d28,d1 +vmlal.s32 q7,d23,d6 +vmlal.s32 q7,d29,d0 +add r2,sp,#656 +vst1.8 {d10-d11},[r2,: 128] +vmull.s32 q5,d18,d3 +vmlal.s32 q5,d19,d2 +vmlal.s32 q5,d22,d1 +vmlal.s32 q5,d23,d0 +vmlal.s32 q5,d12,d8 +add r2,sp,#672 +vst1.8 {d16-d17},[r2,: 128] +vmull.s32 q4,d18,d8 +vmlal.s32 q4,d26,d2 +vmlal.s32 q4,d19,d7 +vmlal.s32 q4,d27,d1 +vmlal.s32 q4,d22,d6 +vmlal.s32 q4,d28,d0 +vmull.s32 q8,d18,d7 +vmlal.s32 q8,d26,d1 +vmlal.s32 q8,d19,d6 +vmlal.s32 q8,d27,d0 +add r2,sp,#576 +vld1.8 {d20-d21},[r2,: 128] +vmlal.s32 q7,d24,d21 +vmlal.s32 q7,d25,d20 +vmlal.s32 q4,d23,d21 +vmlal.s32 q4,d29,d20 +vmlal.s32 q8,d22,d21 +vmlal.s32 q8,d28,d20 +vmlal.s32 q5,d24,d20 +add r2,sp,#576 +vst1.8 {d14-d15},[r2,: 128] +vmull.s32 q7,d18,d6 +vmlal.s32 q7,d26,d0 +add r2,sp,#656 +vld1.8 {d30-d31},[r2,: 128] +vmlal.s32 q2,d30,d21 +vmlal.s32 q7,d19,d21 +vmlal.s32 q7,d27,d20 +add r2,sp,#624 +vld1.8 {d26-d27},[r2,: 128] +vmlal.s32 q4,d25,d27 +vmlal.s32 q8,d29,d27 +vmlal.s32 q8,d25,d26 +vmlal.s32 q7,d28,d27 +vmlal.s32 q7,d29,d26 +add r2,sp,#608 +vld1.8 {d28-d29},[r2,: 128] +vmlal.s32 q4,d24,d29 +vmlal.s32 q8,d23,d29 +vmlal.s32 q8,d24,d28 +vmlal.s32 q7,d22,d29 +vmlal.s32 q7,d23,d28 +add r2,sp,#608 +vst1.8 {d8-d9},[r2,: 128] +add r2,sp,#560 +vld1.8 {d8-d9},[r2,: 128] +vmlal.s32 q7,d24,d9 +vmlal.s32 q7,d25,d31 +vmull.s32 q1,d18,d2 +vmlal.s32 q1,d19,d1 +vmlal.s32 q1,d22,d0 +vmlal.s32 q1,d24,d27 +vmlal.s32 q1,d23,d20 +vmlal.s32 q1,d12,d7 +vmlal.s32 q1,d13,d6 +vmull.s32 q6,d18,d1 +vmlal.s32 q6,d19,d0 +vmlal.s32 q6,d23,d27 +vmlal.s32 q6,d22,d20 +vmlal.s32 q6,d24,d26 +vmull.s32 q0,d18,d0 +vmlal.s32 q0,d22,d27 +vmlal.s32 q0,d23,d26 +vmlal.s32 q0,d24,d31 +vmlal.s32 q0,d19,d20 +add r2,sp,#640 +vld1.8 {d18-d19},[r2,: 128] +vmlal.s32 q2,d18,d7 +vmlal.s32 q2,d19,d6 +vmlal.s32 q5,d18,d6 +vmlal.s32 q5,d19,d21 +vmlal.s32 q1,d18,d21 +vmlal.s32 q1,d19,d29 +vmlal.s32 q0,d18,d28 +vmlal.s32 q0,d19,d9 +vmlal.s32 q6,d18,d29 +vmlal.s32 q6,d19,d28 +add r2,sp,#592 +vld1.8 {d18-d19},[r2,: 128] +add r2,sp,#512 +vld1.8 {d22-d23},[r2,: 128] +vmlal.s32 q5,d19,d7 +vmlal.s32 q0,d18,d21 +vmlal.s32 q0,d19,d29 +vmlal.s32 q6,d18,d6 +add r2,sp,#528 +vld1.8 {d6-d7},[r2,: 128] +vmlal.s32 q6,d19,d21 +add r2,sp,#576 +vld1.8 {d18-d19},[r2,: 128] +vmlal.s32 q0,d30,d8 +add r2,sp,#672 +vld1.8 {d20-d21},[r2,: 128] +vmlal.s32 q5,d30,d29 +add r2,sp,#608 +vld1.8 {d24-d25},[r2,: 128] +vmlal.s32 q1,d30,d28 +vadd.i64 q13,q0,q11 +vadd.i64 q14,q5,q11 +vmlal.s32 q6,d30,d9 +vshr.s64 q4,q13,#26 +vshr.s64 q13,q14,#26 +vadd.i64 q7,q7,q4 +vshl.i64 q4,q4,#26 +vadd.i64 q14,q7,q3 +vadd.i64 q9,q9,q13 +vshl.i64 q13,q13,#26 +vadd.i64 q15,q9,q3 +vsub.i64 q0,q0,q4 +vshr.s64 q4,q14,#25 +vsub.i64 q5,q5,q13 +vshr.s64 q13,q15,#25 +vadd.i64 q6,q6,q4 +vshl.i64 q4,q4,#25 +vadd.i64 q14,q6,q11 +vadd.i64 q2,q2,q13 +vsub.i64 q4,q7,q4 +vshr.s64 q7,q14,#26 +vshl.i64 q13,q13,#25 +vadd.i64 q14,q2,q11 +vadd.i64 q8,q8,q7 +vshl.i64 q7,q7,#26 +vadd.i64 q15,q8,q3 +vsub.i64 q9,q9,q13 +vshr.s64 q13,q14,#26 +vsub.i64 q6,q6,q7 +vshr.s64 q7,q15,#25 +vadd.i64 q10,q10,q13 +vshl.i64 q13,q13,#26 +vadd.i64 q14,q10,q3 +vadd.i64 q1,q1,q7 +add r2,r3,#288 +vshl.i64 q7,q7,#25 +add r4,r3,#96 +vadd.i64 q15,q1,q11 +add r2,r2,#8 +vsub.i64 q2,q2,q13 +add r4,r4,#8 +vshr.s64 q13,q14,#25 +vsub.i64 q7,q8,q7 +vshr.s64 q8,q15,#26 +vadd.i64 q14,q13,q13 +vadd.i64 q12,q12,q8 +vtrn.32 d12,d14 +vshl.i64 q8,q8,#26 +vtrn.32 d13,d15 +vadd.i64 q3,q12,q3 +vadd.i64 q0,q0,q14 +vst1.8 d12,[r2,: 64]! +vshl.i64 q7,q13,#4 +vst1.8 d13,[r4,: 64]! +vsub.i64 q1,q1,q8 +vshr.s64 q3,q3,#25 +vadd.i64 q0,q0,q7 +vadd.i64 q5,q5,q3 +vshl.i64 q3,q3,#25 +vadd.i64 q6,q5,q11 +vadd.i64 q0,q0,q13 +vshl.i64 q7,q13,#25 +vadd.i64 q8,q0,q11 +vsub.i64 q3,q12,q3 +vshr.s64 q6,q6,#26 +vsub.i64 q7,q10,q7 +vtrn.32 d2,d6 +vshr.s64 q8,q8,#26 +vtrn.32 d3,d7 +vadd.i64 q3,q9,q6 +vst1.8 d2,[r2,: 64] +vshl.i64 q6,q6,#26 +vst1.8 d3,[r4,: 64] +vadd.i64 q1,q4,q8 +vtrn.32 d4,d14 +vshl.i64 q4,q8,#26 +vtrn.32 d5,d15 +vsub.i64 q5,q5,q6 +add r2,r2,#16 +vsub.i64 q0,q0,q4 +vst1.8 d4,[r2,: 64] +add r4,r4,#16 +vst1.8 d5,[r4,: 64] +vtrn.32 d10,d6 +vtrn.32 d11,d7 +sub r2,r2,#8 +sub r4,r4,#8 +vtrn.32 d0,d2 +vtrn.32 d1,d3 +vst1.8 d10,[r2,: 64] +vst1.8 d11,[r4,: 64] +sub r2,r2,#24 +sub r4,r4,#24 +vst1.8 d0,[r2,: 64] +vst1.8 d1,[r4,: 64] +add r2,sp,#544 +add r4,r3,#144 +add r5,r3,#192 +vld1.8 {d0-d1},[r2,: 128] +vld1.8 {d2-d3},[r4,: 128]! +vld1.8 {d4-d5},[r5,: 128]! +vzip.i32 q1,q2 +vld1.8 {d6-d7},[r4,: 128]! +vld1.8 {d8-d9},[r5,: 128]! +vshl.i32 q5,q1,#1 +vzip.i32 q3,q4 +vshl.i32 q6,q2,#1 +vld1.8 {d14},[r4,: 64] +vshl.i32 q8,q3,#1 +vld1.8 {d15},[r5,: 64] +vshl.i32 q9,q4,#1 +vmul.i32 d21,d7,d1 +vtrn.32 d14,d15 +vmul.i32 q11,q4,q0 +vmul.i32 q0,q7,q0 +vmull.s32 q12,d2,d2 +vmlal.s32 q12,d11,d1 +vmlal.s32 q12,d12,d0 +vmlal.s32 q12,d13,d23 +vmlal.s32 q12,d16,d22 +vmlal.s32 q12,d7,d21 +vmull.s32 q10,d2,d11 +vmlal.s32 q10,d4,d1 +vmlal.s32 q10,d13,d0 +vmlal.s32 q10,d6,d23 +vmlal.s32 q10,d17,d22 +vmull.s32 q13,d10,d4 +vmlal.s32 q13,d11,d3 +vmlal.s32 q13,d13,d1 +vmlal.s32 q13,d16,d0 +vmlal.s32 q13,d17,d23 +vmlal.s32 q13,d8,d22 +vmull.s32 q1,d10,d5 +vmlal.s32 q1,d11,d4 +vmlal.s32 q1,d6,d1 +vmlal.s32 q1,d17,d0 +vmlal.s32 q1,d8,d23 +vmull.s32 q14,d10,d6 +vmlal.s32 q14,d11,d13 +vmlal.s32 q14,d4,d4 +vmlal.s32 q14,d17,d1 +vmlal.s32 q14,d18,d0 +vmlal.s32 q14,d9,d23 +vmull.s32 q11,d10,d7 +vmlal.s32 q11,d11,d6 +vmlal.s32 q11,d12,d5 +vmlal.s32 q11,d8,d1 +vmlal.s32 q11,d19,d0 +vmull.s32 q15,d10,d8 +vmlal.s32 q15,d11,d17 +vmlal.s32 q15,d12,d6 +vmlal.s32 q15,d13,d5 +vmlal.s32 q15,d19,d1 +vmlal.s32 q15,d14,d0 +vmull.s32 q2,d10,d9 +vmlal.s32 q2,d11,d8 +vmlal.s32 q2,d12,d7 +vmlal.s32 q2,d13,d6 +vmlal.s32 q2,d14,d1 +vmull.s32 q0,d15,d1 +vmlal.s32 q0,d10,d14 +vmlal.s32 q0,d11,d19 +vmlal.s32 q0,d12,d8 +vmlal.s32 q0,d13,d17 +vmlal.s32 q0,d6,d6 +add r2,sp,#512 +vld1.8 {d18-d19},[r2,: 128] +vmull.s32 q3,d16,d7 +vmlal.s32 q3,d10,d15 +vmlal.s32 q3,d11,d14 +vmlal.s32 q3,d12,d9 +vmlal.s32 q3,d13,d8 +add r2,sp,#528 +vld1.8 {d8-d9},[r2,: 128] +vadd.i64 q5,q12,q9 +vadd.i64 q6,q15,q9 +vshr.s64 q5,q5,#26 +vshr.s64 q6,q6,#26 +vadd.i64 q7,q10,q5 +vshl.i64 q5,q5,#26 +vadd.i64 q8,q7,q4 +vadd.i64 q2,q2,q6 +vshl.i64 q6,q6,#26 +vadd.i64 q10,q2,q4 +vsub.i64 q5,q12,q5 +vshr.s64 q8,q8,#25 +vsub.i64 q6,q15,q6 +vshr.s64 q10,q10,#25 +vadd.i64 q12,q13,q8 +vshl.i64 q8,q8,#25 +vadd.i64 q13,q12,q9 +vadd.i64 q0,q0,q10 +vsub.i64 q7,q7,q8 +vshr.s64 q8,q13,#26 +vshl.i64 q10,q10,#25 +vadd.i64 q13,q0,q9 +vadd.i64 q1,q1,q8 +vshl.i64 q8,q8,#26 +vadd.i64 q15,q1,q4 +vsub.i64 q2,q2,q10 +vshr.s64 q10,q13,#26 +vsub.i64 q8,q12,q8 +vshr.s64 q12,q15,#25 +vadd.i64 q3,q3,q10 +vshl.i64 q10,q10,#26 +vadd.i64 q13,q3,q4 +vadd.i64 q14,q14,q12 +add r2,r3,#144 +vshl.i64 q12,q12,#25 +add r4,r3,#192 +vadd.i64 q15,q14,q9 +add r2,r2,#8 +vsub.i64 q0,q0,q10 +add r4,r4,#8 +vshr.s64 q10,q13,#25 +vsub.i64 q1,q1,q12 +vshr.s64 q12,q15,#26 +vadd.i64 q13,q10,q10 +vadd.i64 q11,q11,q12 +vtrn.32 d16,d2 +vshl.i64 q12,q12,#26 +vtrn.32 d17,d3 +vadd.i64 q1,q11,q4 +vadd.i64 q4,q5,q13 +vst1.8 d16,[r2,: 64]! +vshl.i64 q5,q10,#4 +vst1.8 d17,[r4,: 64]! +vsub.i64 q8,q14,q12 +vshr.s64 q1,q1,#25 +vadd.i64 q4,q4,q5 +vadd.i64 q5,q6,q1 +vshl.i64 q1,q1,#25 +vadd.i64 q6,q5,q9 +vadd.i64 q4,q4,q10 +vshl.i64 q10,q10,#25 +vadd.i64 q9,q4,q9 +vsub.i64 q1,q11,q1 +vshr.s64 q6,q6,#26 +vsub.i64 q3,q3,q10 +vtrn.32 d16,d2 +vshr.s64 q9,q9,#26 +vtrn.32 d17,d3 +vadd.i64 q1,q2,q6 +vst1.8 d16,[r2,: 64] +vshl.i64 q2,q6,#26 +vst1.8 d17,[r4,: 64] +vadd.i64 q6,q7,q9 +vtrn.32 d0,d6 +vshl.i64 q7,q9,#26 +vtrn.32 d1,d7 +vsub.i64 q2,q5,q2 +add r2,r2,#16 +vsub.i64 q3,q4,q7 +vst1.8 d0,[r2,: 64] +add r4,r4,#16 +vst1.8 d1,[r4,: 64] +vtrn.32 d4,d2 +vtrn.32 d5,d3 +sub r2,r2,#8 +sub r4,r4,#8 +vtrn.32 d6,d12 +vtrn.32 d7,d13 +vst1.8 d4,[r2,: 64] +vst1.8 d5,[r4,: 64] +sub r2,r2,#24 +sub r4,r4,#24 +vst1.8 d6,[r2,: 64] +vst1.8 d7,[r4,: 64] +add r2,r3,#336 +add r4,r3,#288 +vld1.8 {d0-d1},[r2,: 128]! +vld1.8 {d2-d3},[r4,: 128]! +vadd.i32 q0,q0,q1 +vld1.8 {d2-d3},[r2,: 128]! +vld1.8 {d4-d5},[r4,: 128]! +vadd.i32 q1,q1,q2 +add r5,r3,#288 +vld1.8 {d4},[r2,: 64] +vld1.8 {d6},[r4,: 64] +vadd.i32 q2,q2,q3 +vst1.8 {d0-d1},[r5,: 128]! +vst1.8 {d2-d3},[r5,: 128]! +vst1.8 d4,[r5,: 64] +add r2,r3,#48 +add r4,r3,#144 +vld1.8 {d0-d1},[r4,: 128]! +vld1.8 {d2-d3},[r4,: 128]! +vld1.8 {d4},[r4,: 64] +add r4,r3,#288 +vld1.8 {d6-d7},[r4,: 128]! +vtrn.32 q0,q3 +vld1.8 {d8-d9},[r4,: 128]! +vshl.i32 q5,q0,#4 +vtrn.32 q1,q4 +vshl.i32 q6,q3,#4 +vadd.i32 q5,q5,q0 +vadd.i32 q6,q6,q3 +vshl.i32 q7,q1,#4 +vld1.8 {d5},[r4,: 64] +vshl.i32 q8,q4,#4 +vtrn.32 d4,d5 +vadd.i32 q7,q7,q1 +vadd.i32 q8,q8,q4 +vld1.8 {d18-d19},[r2,: 128]! +vshl.i32 q10,q2,#4 +vld1.8 {d22-d23},[r2,: 128]! +vadd.i32 q10,q10,q2 +vld1.8 {d24},[r2,: 64] +vadd.i32 q5,q5,q0 +add r2,r3,#240 +vld1.8 {d26-d27},[r2,: 128]! +vadd.i32 q6,q6,q3 +vld1.8 {d28-d29},[r2,: 128]! +vadd.i32 q8,q8,q4 +vld1.8 {d25},[r2,: 64] +vadd.i32 q10,q10,q2 +vtrn.32 q9,q13 +vadd.i32 q7,q7,q1 +vadd.i32 q5,q5,q0 +vtrn.32 q11,q14 +vadd.i32 q6,q6,q3 +add r2,sp,#560 +vadd.i32 q10,q10,q2 +vtrn.32 d24,d25 +vst1.8 {d12-d13},[r2,: 128] +vshl.i32 q6,q13,#1 +add r2,sp,#576 +vst1.8 {d20-d21},[r2,: 128] +vshl.i32 q10,q14,#1 +add r2,sp,#592 +vst1.8 {d12-d13},[r2,: 128] +vshl.i32 q15,q12,#1 +vadd.i32 q8,q8,q4 +vext.32 d10,d31,d30,#0 +vadd.i32 q7,q7,q1 +add r2,sp,#608 +vst1.8 {d16-d17},[r2,: 128] +vmull.s32 q8,d18,d5 +vmlal.s32 q8,d26,d4 +vmlal.s32 q8,d19,d9 +vmlal.s32 q8,d27,d3 +vmlal.s32 q8,d22,d8 +vmlal.s32 q8,d28,d2 +vmlal.s32 q8,d23,d7 +vmlal.s32 q8,d29,d1 +vmlal.s32 q8,d24,d6 +vmlal.s32 q8,d25,d0 +add r2,sp,#624 +vst1.8 {d14-d15},[r2,: 128] +vmull.s32 q2,d18,d4 +vmlal.s32 q2,d12,d9 +vmlal.s32 q2,d13,d8 +vmlal.s32 q2,d19,d3 +vmlal.s32 q2,d22,d2 +vmlal.s32 q2,d23,d1 +vmlal.s32 q2,d24,d0 +add r2,sp,#640 +vst1.8 {d20-d21},[r2,: 128] +vmull.s32 q7,d18,d9 +vmlal.s32 q7,d26,d3 +vmlal.s32 q7,d19,d8 +vmlal.s32 q7,d27,d2 +vmlal.s32 q7,d22,d7 +vmlal.s32 q7,d28,d1 +vmlal.s32 q7,d23,d6 +vmlal.s32 q7,d29,d0 +add r2,sp,#656 +vst1.8 {d10-d11},[r2,: 128] +vmull.s32 q5,d18,d3 +vmlal.s32 q5,d19,d2 +vmlal.s32 q5,d22,d1 +vmlal.s32 q5,d23,d0 +vmlal.s32 q5,d12,d8 +add r2,sp,#672 +vst1.8 {d16-d17},[r2,: 128] +vmull.s32 q4,d18,d8 +vmlal.s32 q4,d26,d2 +vmlal.s32 q4,d19,d7 +vmlal.s32 q4,d27,d1 +vmlal.s32 q4,d22,d6 +vmlal.s32 q4,d28,d0 +vmull.s32 q8,d18,d7 +vmlal.s32 q8,d26,d1 +vmlal.s32 q8,d19,d6 +vmlal.s32 q8,d27,d0 +add r2,sp,#576 +vld1.8 {d20-d21},[r2,: 128] +vmlal.s32 q7,d24,d21 +vmlal.s32 q7,d25,d20 +vmlal.s32 q4,d23,d21 +vmlal.s32 q4,d29,d20 +vmlal.s32 q8,d22,d21 +vmlal.s32 q8,d28,d20 +vmlal.s32 q5,d24,d20 +add r2,sp,#576 +vst1.8 {d14-d15},[r2,: 128] +vmull.s32 q7,d18,d6 +vmlal.s32 q7,d26,d0 +add r2,sp,#656 +vld1.8 {d30-d31},[r2,: 128] +vmlal.s32 q2,d30,d21 +vmlal.s32 q7,d19,d21 +vmlal.s32 q7,d27,d20 +add r2,sp,#624 +vld1.8 {d26-d27},[r2,: 128] +vmlal.s32 q4,d25,d27 +vmlal.s32 q8,d29,d27 +vmlal.s32 q8,d25,d26 +vmlal.s32 q7,d28,d27 +vmlal.s32 q7,d29,d26 +add r2,sp,#608 +vld1.8 {d28-d29},[r2,: 128] +vmlal.s32 q4,d24,d29 +vmlal.s32 q8,d23,d29 +vmlal.s32 q8,d24,d28 +vmlal.s32 q7,d22,d29 +vmlal.s32 q7,d23,d28 +add r2,sp,#608 +vst1.8 {d8-d9},[r2,: 128] +add r2,sp,#560 +vld1.8 {d8-d9},[r2,: 128] +vmlal.s32 q7,d24,d9 +vmlal.s32 q7,d25,d31 +vmull.s32 q1,d18,d2 +vmlal.s32 q1,d19,d1 +vmlal.s32 q1,d22,d0 +vmlal.s32 q1,d24,d27 +vmlal.s32 q1,d23,d20 +vmlal.s32 q1,d12,d7 +vmlal.s32 q1,d13,d6 +vmull.s32 q6,d18,d1 +vmlal.s32 q6,d19,d0 +vmlal.s32 q6,d23,d27 +vmlal.s32 q6,d22,d20 +vmlal.s32 q6,d24,d26 +vmull.s32 q0,d18,d0 +vmlal.s32 q0,d22,d27 +vmlal.s32 q0,d23,d26 +vmlal.s32 q0,d24,d31 +vmlal.s32 q0,d19,d20 +add r2,sp,#640 +vld1.8 {d18-d19},[r2,: 128] +vmlal.s32 q2,d18,d7 +vmlal.s32 q2,d19,d6 +vmlal.s32 q5,d18,d6 +vmlal.s32 q5,d19,d21 +vmlal.s32 q1,d18,d21 +vmlal.s32 q1,d19,d29 +vmlal.s32 q0,d18,d28 +vmlal.s32 q0,d19,d9 +vmlal.s32 q6,d18,d29 +vmlal.s32 q6,d19,d28 +add r2,sp,#592 +vld1.8 {d18-d19},[r2,: 128] +add r2,sp,#512 +vld1.8 {d22-d23},[r2,: 128] +vmlal.s32 q5,d19,d7 +vmlal.s32 q0,d18,d21 +vmlal.s32 q0,d19,d29 +vmlal.s32 q6,d18,d6 +add r2,sp,#528 +vld1.8 {d6-d7},[r2,: 128] +vmlal.s32 q6,d19,d21 +add r2,sp,#576 +vld1.8 {d18-d19},[r2,: 128] +vmlal.s32 q0,d30,d8 +add r2,sp,#672 +vld1.8 {d20-d21},[r2,: 128] +vmlal.s32 q5,d30,d29 +add r2,sp,#608 +vld1.8 {d24-d25},[r2,: 128] +vmlal.s32 q1,d30,d28 +vadd.i64 q13,q0,q11 +vadd.i64 q14,q5,q11 +vmlal.s32 q6,d30,d9 +vshr.s64 q4,q13,#26 +vshr.s64 q13,q14,#26 +vadd.i64 q7,q7,q4 +vshl.i64 q4,q4,#26 +vadd.i64 q14,q7,q3 +vadd.i64 q9,q9,q13 +vshl.i64 q13,q13,#26 +vadd.i64 q15,q9,q3 +vsub.i64 q0,q0,q4 +vshr.s64 q4,q14,#25 +vsub.i64 q5,q5,q13 +vshr.s64 q13,q15,#25 +vadd.i64 q6,q6,q4 +vshl.i64 q4,q4,#25 +vadd.i64 q14,q6,q11 +vadd.i64 q2,q2,q13 +vsub.i64 q4,q7,q4 +vshr.s64 q7,q14,#26 +vshl.i64 q13,q13,#25 +vadd.i64 q14,q2,q11 +vadd.i64 q8,q8,q7 +vshl.i64 q7,q7,#26 +vadd.i64 q15,q8,q3 +vsub.i64 q9,q9,q13 +vshr.s64 q13,q14,#26 +vsub.i64 q6,q6,q7 +vshr.s64 q7,q15,#25 +vadd.i64 q10,q10,q13 +vshl.i64 q13,q13,#26 +vadd.i64 q14,q10,q3 +vadd.i64 q1,q1,q7 +add r2,r3,#240 +vshl.i64 q7,q7,#25 +add r4,r3,#144 +vadd.i64 q15,q1,q11 +add r2,r2,#8 +vsub.i64 q2,q2,q13 +add r4,r4,#8 +vshr.s64 q13,q14,#25 +vsub.i64 q7,q8,q7 +vshr.s64 q8,q15,#26 +vadd.i64 q14,q13,q13 +vadd.i64 q12,q12,q8 +vtrn.32 d12,d14 +vshl.i64 q8,q8,#26 +vtrn.32 d13,d15 +vadd.i64 q3,q12,q3 +vadd.i64 q0,q0,q14 +vst1.8 d12,[r2,: 64]! +vshl.i64 q7,q13,#4 +vst1.8 d13,[r4,: 64]! +vsub.i64 q1,q1,q8 +vshr.s64 q3,q3,#25 +vadd.i64 q0,q0,q7 +vadd.i64 q5,q5,q3 +vshl.i64 q3,q3,#25 +vadd.i64 q6,q5,q11 +vadd.i64 q0,q0,q13 +vshl.i64 q7,q13,#25 +vadd.i64 q8,q0,q11 +vsub.i64 q3,q12,q3 +vshr.s64 q6,q6,#26 +vsub.i64 q7,q10,q7 +vtrn.32 d2,d6 +vshr.s64 q8,q8,#26 +vtrn.32 d3,d7 +vadd.i64 q3,q9,q6 +vst1.8 d2,[r2,: 64] +vshl.i64 q6,q6,#26 +vst1.8 d3,[r4,: 64] +vadd.i64 q1,q4,q8 +vtrn.32 d4,d14 +vshl.i64 q4,q8,#26 +vtrn.32 d5,d15 +vsub.i64 q5,q5,q6 +add r2,r2,#16 +vsub.i64 q0,q0,q4 +vst1.8 d4,[r2,: 64] +add r4,r4,#16 +vst1.8 d5,[r4,: 64] +vtrn.32 d10,d6 +vtrn.32 d11,d7 +sub r2,r2,#8 +sub r4,r4,#8 +vtrn.32 d0,d2 +vtrn.32 d1,d3 +vst1.8 d10,[r2,: 64] +vst1.8 d11,[r4,: 64] +sub r2,r2,#24 +sub r4,r4,#24 +vst1.8 d0,[r2,: 64] +vst1.8 d1,[r4,: 64] +ldr r2,[sp,#488] +ldr r4,[sp,#492] +subs r5,r2,#1 +bge ._mainloop +add r1,r3,#144 +add r2,r3,#336 +vld1.8 {d0-d1},[r1,: 128]! +vld1.8 {d2-d3},[r1,: 128]! +vld1.8 {d4},[r1,: 64] +vst1.8 {d0-d1},[r2,: 128]! +vst1.8 {d2-d3},[r2,: 128]! +vst1.8 d4,[r2,: 64] +ldr r1,=0 +._invertloop: +add r2,r3,#144 +ldr r4,=0 +ldr r5,=2 +cmp r1,#1 +ldreq r5,=1 +addeq r2,r3,#336 +addeq r4,r3,#48 +cmp r1,#2 +ldreq r5,=1 +addeq r2,r3,#48 +cmp r1,#3 +ldreq r5,=5 +addeq r4,r3,#336 +cmp r1,#4 +ldreq r5,=10 +cmp r1,#5 +ldreq r5,=20 +cmp r1,#6 +ldreq r5,=10 +addeq r2,r3,#336 +addeq r4,r3,#336 +cmp r1,#7 +ldreq r5,=50 +cmp r1,#8 +ldreq r5,=100 +cmp r1,#9 +ldreq r5,=50 +addeq r2,r3,#336 +cmp r1,#10 +ldreq r5,=5 +addeq r2,r3,#48 +cmp r1,#11 +ldreq r5,=0 +addeq r2,r3,#96 +add r6,r3,#144 +add r7,r3,#288 +vld1.8 {d0-d1},[r6,: 128]! +vld1.8 {d2-d3},[r6,: 128]! +vld1.8 {d4},[r6,: 64] +vst1.8 {d0-d1},[r7,: 128]! +vst1.8 {d2-d3},[r7,: 128]! +vst1.8 d4,[r7,: 64] +cmp r5,#0 +beq ._skipsquaringloop +._squaringloop: +add r6,r3,#288 +add r7,r3,#288 +add r8,r3,#288 +vmov.i32 q0,#19 +vmov.i32 q1,#0 +vmov.i32 q2,#1 +vzip.i32 q1,q2 +vld1.8 {d4-d5},[r7,: 128]! +vld1.8 {d6-d7},[r7,: 128]! +vld1.8 {d9},[r7,: 64] +vld1.8 {d10-d11},[r6,: 128]! +add r7,sp,#416 +vld1.8 {d12-d13},[r6,: 128]! +vmul.i32 q7,q2,q0 +vld1.8 {d8},[r6,: 64] +vext.32 d17,d11,d10,#1 +vmul.i32 q9,q3,q0 +vext.32 d16,d10,d8,#1 +vshl.u32 q10,q5,q1 +vext.32 d22,d14,d4,#1 +vext.32 d24,d18,d6,#1 +vshl.u32 q13,q6,q1 +vshl.u32 d28,d8,d2 +vrev64.i32 d22,d22 +vmul.i32 d1,d9,d1 +vrev64.i32 d24,d24 +vext.32 d29,d8,d13,#1 +vext.32 d0,d1,d9,#1 +vrev64.i32 d0,d0 +vext.32 d2,d9,d1,#1 +vext.32 d23,d15,d5,#1 +vmull.s32 q4,d20,d4 +vrev64.i32 d23,d23 +vmlal.s32 q4,d21,d1 +vrev64.i32 d2,d2 +vmlal.s32 q4,d26,d19 +vext.32 d3,d5,d15,#1 +vmlal.s32 q4,d27,d18 +vrev64.i32 d3,d3 +vmlal.s32 q4,d28,d15 +vext.32 d14,d12,d11,#1 +vmull.s32 q5,d16,d23 +vext.32 d15,d13,d12,#1 +vmlal.s32 q5,d17,d4 +vst1.8 d8,[r7,: 64]! +vmlal.s32 q5,d14,d1 +vext.32 d12,d9,d8,#0 +vmlal.s32 q5,d15,d19 +vmov.i64 d13,#0 +vmlal.s32 q5,d29,d18 +vext.32 d25,d19,d7,#1 +vmlal.s32 q6,d20,d5 +vrev64.i32 d25,d25 +vmlal.s32 q6,d21,d4 +vst1.8 d11,[r7,: 64]! +vmlal.s32 q6,d26,d1 +vext.32 d9,d10,d10,#0 +vmlal.s32 q6,d27,d19 +vmov.i64 d8,#0 +vmlal.s32 q6,d28,d18 +vmlal.s32 q4,d16,d24 +vmlal.s32 q4,d17,d5 +vmlal.s32 q4,d14,d4 +vst1.8 d12,[r7,: 64]! +vmlal.s32 q4,d15,d1 +vext.32 d10,d13,d12,#0 +vmlal.s32 q4,d29,d19 +vmov.i64 d11,#0 +vmlal.s32 q5,d20,d6 +vmlal.s32 q5,d21,d5 +vmlal.s32 q5,d26,d4 +vext.32 d13,d8,d8,#0 +vmlal.s32 q5,d27,d1 +vmov.i64 d12,#0 +vmlal.s32 q5,d28,d19 +vst1.8 d9,[r7,: 64]! +vmlal.s32 q6,d16,d25 +vmlal.s32 q6,d17,d6 +vst1.8 d10,[r7,: 64] +vmlal.s32 q6,d14,d5 +vext.32 d8,d11,d10,#0 +vmlal.s32 q6,d15,d4 +vmov.i64 d9,#0 +vmlal.s32 q6,d29,d1 +vmlal.s32 q4,d20,d7 +vmlal.s32 q4,d21,d6 +vmlal.s32 q4,d26,d5 +vext.32 d11,d12,d12,#0 +vmlal.s32 q4,d27,d4 +vmov.i64 d10,#0 +vmlal.s32 q4,d28,d1 +vmlal.s32 q5,d16,d0 +sub r6,r7,#32 +vmlal.s32 q5,d17,d7 +vmlal.s32 q5,d14,d6 +vext.32 d30,d9,d8,#0 +vmlal.s32 q5,d15,d5 +vld1.8 {d31},[r6,: 64]! +vmlal.s32 q5,d29,d4 +vmlal.s32 q15,d20,d0 +vext.32 d0,d6,d18,#1 +vmlal.s32 q15,d21,d25 +vrev64.i32 d0,d0 +vmlal.s32 q15,d26,d24 +vext.32 d1,d7,d19,#1 +vext.32 d7,d10,d10,#0 +vmlal.s32 q15,d27,d23 +vrev64.i32 d1,d1 +vld1.8 {d6},[r6,: 64] +vmlal.s32 q15,d28,d22 +vmlal.s32 q3,d16,d4 +add r6,r6,#24 +vmlal.s32 q3,d17,d2 +vext.32 d4,d31,d30,#0 +vmov d17,d11 +vmlal.s32 q3,d14,d1 +vext.32 d11,d13,d13,#0 +vext.32 d13,d30,d30,#0 +vmlal.s32 q3,d15,d0 +vext.32 d1,d8,d8,#0 +vmlal.s32 q3,d29,d3 +vld1.8 {d5},[r6,: 64] +sub r6,r6,#16 +vext.32 d10,d6,d6,#0 +vmov.i32 q1,#0xffffffff +vshl.i64 q4,q1,#25 +add r7,sp,#512 +vld1.8 {d14-d15},[r7,: 128] +vadd.i64 q9,q2,q7 +vshl.i64 q1,q1,#26 +vshr.s64 q10,q9,#26 +vld1.8 {d0},[r6,: 64]! +vadd.i64 q5,q5,q10 +vand q9,q9,q1 +vld1.8 {d16},[r6,: 64]! +add r6,sp,#528 +vld1.8 {d20-d21},[r6,: 128] +vadd.i64 q11,q5,q10 +vsub.i64 q2,q2,q9 +vshr.s64 q9,q11,#25 +vext.32 d12,d5,d4,#0 +vand q11,q11,q4 +vadd.i64 q0,q0,q9 +vmov d19,d7 +vadd.i64 q3,q0,q7 +vsub.i64 q5,q5,q11 +vshr.s64 q11,q3,#26 +vext.32 d18,d11,d10,#0 +vand q3,q3,q1 +vadd.i64 q8,q8,q11 +vadd.i64 q11,q8,q10 +vsub.i64 q0,q0,q3 +vshr.s64 q3,q11,#25 +vand q11,q11,q4 +vadd.i64 q3,q6,q3 +vadd.i64 q6,q3,q7 +vsub.i64 q8,q8,q11 +vshr.s64 q11,q6,#26 +vand q6,q6,q1 +vadd.i64 q9,q9,q11 +vadd.i64 d25,d19,d21 +vsub.i64 q3,q3,q6 +vshr.s64 d23,d25,#25 +vand q4,q12,q4 +vadd.i64 d21,d23,d23 +vshl.i64 d25,d23,#4 +vadd.i64 d21,d21,d23 +vadd.i64 d25,d25,d21 +vadd.i64 d4,d4,d25 +vzip.i32 q0,q8 +vadd.i64 d12,d4,d14 +add r6,r8,#8 +vst1.8 d0,[r6,: 64] +vsub.i64 d19,d19,d9 +add r6,r6,#16 +vst1.8 d16,[r6,: 64] +vshr.s64 d22,d12,#26 +vand q0,q6,q1 +vadd.i64 d10,d10,d22 +vzip.i32 q3,q9 +vsub.i64 d4,d4,d0 +sub r6,r6,#8 +vst1.8 d6,[r6,: 64] +add r6,r6,#16 +vst1.8 d18,[r6,: 64] +vzip.i32 q2,q5 +sub r6,r6,#32 +vst1.8 d4,[r6,: 64] +subs r5,r5,#1 +bhi ._squaringloop +._skipsquaringloop: +mov r2,r2 +add r5,r3,#288 +add r6,r3,#144 +vmov.i32 q0,#19 +vmov.i32 q1,#0 +vmov.i32 q2,#1 +vzip.i32 q1,q2 +vld1.8 {d4-d5},[r5,: 128]! +vld1.8 {d6-d7},[r5,: 128]! +vld1.8 {d9},[r5,: 64] +vld1.8 {d10-d11},[r2,: 128]! +add r5,sp,#416 +vld1.8 {d12-d13},[r2,: 128]! +vmul.i32 q7,q2,q0 +vld1.8 {d8},[r2,: 64] +vext.32 d17,d11,d10,#1 +vmul.i32 q9,q3,q0 +vext.32 d16,d10,d8,#1 +vshl.u32 q10,q5,q1 +vext.32 d22,d14,d4,#1 +vext.32 d24,d18,d6,#1 +vshl.u32 q13,q6,q1 +vshl.u32 d28,d8,d2 +vrev64.i32 d22,d22 +vmul.i32 d1,d9,d1 +vrev64.i32 d24,d24 +vext.32 d29,d8,d13,#1 +vext.32 d0,d1,d9,#1 +vrev64.i32 d0,d0 +vext.32 d2,d9,d1,#1 +vext.32 d23,d15,d5,#1 +vmull.s32 q4,d20,d4 +vrev64.i32 d23,d23 +vmlal.s32 q4,d21,d1 +vrev64.i32 d2,d2 +vmlal.s32 q4,d26,d19 +vext.32 d3,d5,d15,#1 +vmlal.s32 q4,d27,d18 +vrev64.i32 d3,d3 +vmlal.s32 q4,d28,d15 +vext.32 d14,d12,d11,#1 +vmull.s32 q5,d16,d23 +vext.32 d15,d13,d12,#1 +vmlal.s32 q5,d17,d4 +vst1.8 d8,[r5,: 64]! +vmlal.s32 q5,d14,d1 +vext.32 d12,d9,d8,#0 +vmlal.s32 q5,d15,d19 +vmov.i64 d13,#0 +vmlal.s32 q5,d29,d18 +vext.32 d25,d19,d7,#1 +vmlal.s32 q6,d20,d5 +vrev64.i32 d25,d25 +vmlal.s32 q6,d21,d4 +vst1.8 d11,[r5,: 64]! +vmlal.s32 q6,d26,d1 +vext.32 d9,d10,d10,#0 +vmlal.s32 q6,d27,d19 +vmov.i64 d8,#0 +vmlal.s32 q6,d28,d18 +vmlal.s32 q4,d16,d24 +vmlal.s32 q4,d17,d5 +vmlal.s32 q4,d14,d4 +vst1.8 d12,[r5,: 64]! +vmlal.s32 q4,d15,d1 +vext.32 d10,d13,d12,#0 +vmlal.s32 q4,d29,d19 +vmov.i64 d11,#0 +vmlal.s32 q5,d20,d6 +vmlal.s32 q5,d21,d5 +vmlal.s32 q5,d26,d4 +vext.32 d13,d8,d8,#0 +vmlal.s32 q5,d27,d1 +vmov.i64 d12,#0 +vmlal.s32 q5,d28,d19 +vst1.8 d9,[r5,: 64]! +vmlal.s32 q6,d16,d25 +vmlal.s32 q6,d17,d6 +vst1.8 d10,[r5,: 64] +vmlal.s32 q6,d14,d5 +vext.32 d8,d11,d10,#0 +vmlal.s32 q6,d15,d4 +vmov.i64 d9,#0 +vmlal.s32 q6,d29,d1 +vmlal.s32 q4,d20,d7 +vmlal.s32 q4,d21,d6 +vmlal.s32 q4,d26,d5 +vext.32 d11,d12,d12,#0 +vmlal.s32 q4,d27,d4 +vmov.i64 d10,#0 +vmlal.s32 q4,d28,d1 +vmlal.s32 q5,d16,d0 +sub r2,r5,#32 +vmlal.s32 q5,d17,d7 +vmlal.s32 q5,d14,d6 +vext.32 d30,d9,d8,#0 +vmlal.s32 q5,d15,d5 +vld1.8 {d31},[r2,: 64]! +vmlal.s32 q5,d29,d4 +vmlal.s32 q15,d20,d0 +vext.32 d0,d6,d18,#1 +vmlal.s32 q15,d21,d25 +vrev64.i32 d0,d0 +vmlal.s32 q15,d26,d24 +vext.32 d1,d7,d19,#1 +vext.32 d7,d10,d10,#0 +vmlal.s32 q15,d27,d23 +vrev64.i32 d1,d1 +vld1.8 {d6},[r2,: 64] +vmlal.s32 q15,d28,d22 +vmlal.s32 q3,d16,d4 +add r2,r2,#24 +vmlal.s32 q3,d17,d2 +vext.32 d4,d31,d30,#0 +vmov d17,d11 +vmlal.s32 q3,d14,d1 +vext.32 d11,d13,d13,#0 +vext.32 d13,d30,d30,#0 +vmlal.s32 q3,d15,d0 +vext.32 d1,d8,d8,#0 +vmlal.s32 q3,d29,d3 +vld1.8 {d5},[r2,: 64] +sub r2,r2,#16 +vext.32 d10,d6,d6,#0 +vmov.i32 q1,#0xffffffff +vshl.i64 q4,q1,#25 +add r5,sp,#512 +vld1.8 {d14-d15},[r5,: 128] +vadd.i64 q9,q2,q7 +vshl.i64 q1,q1,#26 +vshr.s64 q10,q9,#26 +vld1.8 {d0},[r2,: 64]! +vadd.i64 q5,q5,q10 +vand q9,q9,q1 +vld1.8 {d16},[r2,: 64]! +add r2,sp,#528 +vld1.8 {d20-d21},[r2,: 128] +vadd.i64 q11,q5,q10 +vsub.i64 q2,q2,q9 +vshr.s64 q9,q11,#25 +vext.32 d12,d5,d4,#0 +vand q11,q11,q4 +vadd.i64 q0,q0,q9 +vmov d19,d7 +vadd.i64 q3,q0,q7 +vsub.i64 q5,q5,q11 +vshr.s64 q11,q3,#26 +vext.32 d18,d11,d10,#0 +vand q3,q3,q1 +vadd.i64 q8,q8,q11 +vadd.i64 q11,q8,q10 +vsub.i64 q0,q0,q3 +vshr.s64 q3,q11,#25 +vand q11,q11,q4 +vadd.i64 q3,q6,q3 +vadd.i64 q6,q3,q7 +vsub.i64 q8,q8,q11 +vshr.s64 q11,q6,#26 +vand q6,q6,q1 +vadd.i64 q9,q9,q11 +vadd.i64 d25,d19,d21 +vsub.i64 q3,q3,q6 +vshr.s64 d23,d25,#25 +vand q4,q12,q4 +vadd.i64 d21,d23,d23 +vshl.i64 d25,d23,#4 +vadd.i64 d21,d21,d23 +vadd.i64 d25,d25,d21 +vadd.i64 d4,d4,d25 +vzip.i32 q0,q8 +vadd.i64 d12,d4,d14 +add r2,r6,#8 +vst1.8 d0,[r2,: 64] +vsub.i64 d19,d19,d9 +add r2,r2,#16 +vst1.8 d16,[r2,: 64] +vshr.s64 d22,d12,#26 +vand q0,q6,q1 +vadd.i64 d10,d10,d22 +vzip.i32 q3,q9 +vsub.i64 d4,d4,d0 +sub r2,r2,#8 +vst1.8 d6,[r2,: 64] +add r2,r2,#16 +vst1.8 d18,[r2,: 64] +vzip.i32 q2,q5 +sub r2,r2,#32 +vst1.8 d4,[r2,: 64] +cmp r4,#0 +beq ._skippostcopy +add r2,r3,#144 +mov r4,r4 +vld1.8 {d0-d1},[r2,: 128]! +vld1.8 {d2-d3},[r2,: 128]! +vld1.8 {d4},[r2,: 64] +vst1.8 {d0-d1},[r4,: 128]! +vst1.8 {d2-d3},[r4,: 128]! +vst1.8 d4,[r4,: 64] +._skippostcopy: +cmp r1,#1 +bne ._skipfinalcopy +add r2,r3,#288 +add r4,r3,#144 +vld1.8 {d0-d1},[r2,: 128]! +vld1.8 {d2-d3},[r2,: 128]! +vld1.8 {d4},[r2,: 64] +vst1.8 {d0-d1},[r4,: 128]! +vst1.8 {d2-d3},[r4,: 128]! +vst1.8 d4,[r4,: 64] +._skipfinalcopy: +add r1,r1,#1 +cmp r1,#12 +blo ._invertloop +add r1,r3,#144 +ldr r2,[r1],#4 +ldr r3,[r1],#4 +ldr r4,[r1],#4 +ldr r5,[r1],#4 +ldr r6,[r1],#4 +ldr r7,[r1],#4 +ldr r8,[r1],#4 +ldr r9,[r1],#4 +ldr r10,[r1],#4 +ldr r1,[r1] +add r11,r1,r1,LSL #4 +add r11,r11,r1,LSL #1 +add r11,r11,#16777216 +mov r11,r11,ASR #25 +add r11,r11,r2 +mov r11,r11,ASR #26 +add r11,r11,r3 +mov r11,r11,ASR #25 +add r11,r11,r4 +mov r11,r11,ASR #26 +add r11,r11,r5 +mov r11,r11,ASR #25 +add r11,r11,r6 +mov r11,r11,ASR #26 +add r11,r11,r7 +mov r11,r11,ASR #25 +add r11,r11,r8 +mov r11,r11,ASR #26 +add r11,r11,r9 +mov r11,r11,ASR #25 +add r11,r11,r10 +mov r11,r11,ASR #26 +add r11,r11,r1 +mov r11,r11,ASR #25 +add r2,r2,r11 +add r2,r2,r11,LSL #1 +add r2,r2,r11,LSL #4 +mov r11,r2,ASR #26 +add r3,r3,r11 +sub r2,r2,r11,LSL #26 +mov r11,r3,ASR #25 +add r4,r4,r11 +sub r3,r3,r11,LSL #25 +mov r11,r4,ASR #26 +add r5,r5,r11 +sub r4,r4,r11,LSL #26 +mov r11,r5,ASR #25 +add r6,r6,r11 +sub r5,r5,r11,LSL #25 +mov r11,r6,ASR #26 +add r7,r7,r11 +sub r6,r6,r11,LSL #26 +mov r11,r7,ASR #25 +add r8,r8,r11 +sub r7,r7,r11,LSL #25 +mov r11,r8,ASR #26 +add r9,r9,r11 +sub r8,r8,r11,LSL #26 +mov r11,r9,ASR #25 +add r10,r10,r11 +sub r9,r9,r11,LSL #25 +mov r11,r10,ASR #26 +add r1,r1,r11 +sub r10,r10,r11,LSL #26 +mov r11,r1,ASR #25 +sub r1,r1,r11,LSL #25 +add r2,r2,r3,LSL #26 +mov r3,r3,LSR #6 +add r3,r3,r4,LSL #19 +mov r4,r4,LSR #13 +add r4,r4,r5,LSL #13 +mov r5,r5,LSR #19 +add r5,r5,r6,LSL #6 +add r6,r7,r8,LSL #25 +mov r7,r8,LSR #7 +add r7,r7,r9,LSL #19 +mov r8,r9,LSR #13 +add r8,r8,r10,LSL #12 +mov r9,r10,LSR #20 +add r1,r9,r1,LSL #6 +str r2,[r0],#4 +str r3,[r0],#4 +str r4,[r0],#4 +str r5,[r0],#4 +str r6,[r0],#4 +str r7,[r0],#4 +str r8,[r0],#4 +str r1,[r0] +ldrd r4,[sp,#0] +ldrd r6,[sp,#8] +ldrd r8,[sp,#16] +ldrd r10,[sp,#24] +ldr r12,[sp,#480] +ldr r14,[sp,#484] +ldr r0,=0 +mov sp,r12 +vpop {q4,q5,q6,q7} +bx lr + +#endif /* !OPENSSL_NO_ASM && __arm__ && !__APPLE__ */ + +#if defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/vendor/ring/crypto/curve25519/curve25519.c b/vendor/ring/crypto/curve25519/curve25519.c new file mode 100644 index 00000000..30afff0e --- /dev/null +++ b/vendor/ring/crypto/curve25519/curve25519.c @@ -0,0 +1,1911 @@ +/* Copyright (c) 2020, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +// Some of this code is taken from the ref10 version of Ed25519 in SUPERCOP +// 20141124 (http://bench.cr.yp.to/supercop.html). That code is released as +// public domain. Other parts have been replaced to call into code generated by +// Fiat (https://github.com/mit-plv/fiat-crypto) in //third_party/fiat. +// +// The field functions are shared by Ed25519 and X25519 where possible. + +#include + +#include "internal.h" +#include "../internal.h" + +#if defined(_MSC_VER) && !defined(__clang__) +// '=': conversion from 'int64_t' to 'int32_t', possible loss of data +#pragma warning(disable: 4242) +// '=': conversion from 'int32_t' to 'uint8_t', possible loss of data +#pragma warning(disable: 4244) +#endif + +#if defined(__GNUC__) +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wsign-conversion" +#endif + +// Various pre-computed constants. +#include "./curve25519_tables.h" + +#if defined(BORINGSSL_CURVE25519_64BIT) +#if defined(__GNUC__) +#pragma GCC diagnostic ignored "-Wpedantic" +#endif +#include "../../third_party/fiat/curve25519_64.h" +#else +#include "../../third_party/fiat/curve25519_32.h" +#endif // BORINGSSL_CURVE25519_64BIT + + +// Low-level intrinsic operations + +static uint64_t load_3(const uint8_t *in) { + uint64_t result; + result = (uint64_t)in[0]; + result |= ((uint64_t)in[1]) << 8; + result |= ((uint64_t)in[2]) << 16; + return result; +} + +static uint64_t load_4(const uint8_t *in) { + uint64_t result; + result = (uint64_t)in[0]; + result |= ((uint64_t)in[1]) << 8; + result |= ((uint64_t)in[2]) << 16; + result |= ((uint64_t)in[3]) << 24; + return result; +} + + +// Field operations. + +#if defined(BORINGSSL_CURVE25519_64BIT) + +// assert_fe asserts that |f| satisfies bounds: +// +// [[0x0 ~> 0x8cccccccccccc], +// [0x0 ~> 0x8cccccccccccc], +// [0x0 ~> 0x8cccccccccccc], +// [0x0 ~> 0x8cccccccccccc], +// [0x0 ~> 0x8cccccccccccc]] +// +// See comments in curve25519_64.h for which functions use these bounds for +// inputs or outputs. +#define assert_fe(f) \ + do { \ + for (unsigned _assert_fe_i = 0; _assert_fe_i < 5; _assert_fe_i++) { \ + dev_assert_secret(f[_assert_fe_i] <= UINT64_C(0x8cccccccccccc)); \ + } \ + } while (0) + +// assert_fe_loose asserts that |f| satisfies bounds: +// +// [[0x0 ~> 0x1a666666666664], +// [0x0 ~> 0x1a666666666664], +// [0x0 ~> 0x1a666666666664], +// [0x0 ~> 0x1a666666666664], +// [0x0 ~> 0x1a666666666664]] +// +// See comments in curve25519_64.h for which functions use these bounds for +// inputs or outputs. +#define assert_fe_loose(f) \ + do { \ + for (unsigned _assert_fe_i = 0; _assert_fe_i < 5; _assert_fe_i++) { \ + dev_assert_secret(f[_assert_fe_i] <= UINT64_C(0x1a666666666664)); \ + } \ + } while (0) + +#else + +// assert_fe asserts that |f| satisfies bounds: +// +// [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], +// [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], +// [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], +// [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], +// [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]] +// +// See comments in curve25519_32.h for which functions use these bounds for +// inputs or outputs. +#define assert_fe(f) \ + do { \ + for (unsigned _assert_fe_i = 0; _assert_fe_i < 10; _assert_fe_i++) { \ + dev_assert_secret(f[_assert_fe_i] <= \ + ((_assert_fe_i & 1) ? 0x2333333u : 0x4666666u)); \ + } \ + } while (0) + +// assert_fe_loose asserts that |f| satisfies bounds: +// +// [[0x0 ~> 0xd333332], [0x0 ~> 0x6999999], +// [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], +// [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], +// [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], +// [0x0 ~> 0xd333332], [0x0 ~> 0x6999999]] +// +// See comments in curve25519_32.h for which functions use these bounds for +// inputs or outputs. +#define assert_fe_loose(f) \ + do { \ + for (unsigned _assert_fe_i = 0; _assert_fe_i < 10; _assert_fe_i++) { \ + dev_assert_secret(f[_assert_fe_i] <= \ + ((_assert_fe_i & 1) ? 0x6999999u : 0xd333332u)); \ + } \ + } while (0) + +#endif // BORINGSSL_CURVE25519_64BIT + +OPENSSL_STATIC_ASSERT(sizeof(fe) == sizeof(fe_limb_t) * FE_NUM_LIMBS, + "fe_limb_t[FE_NUM_LIMBS] is inconsistent with fe"); + +static void fe_frombytes_strict(fe *h, const uint8_t s[32]) { + // |fiat_25519_from_bytes| requires the top-most bit be clear. + dev_assert_secret((s[31] & 0x80) == 0); + fiat_25519_from_bytes(h->v, s); + assert_fe(h->v); +} + +static void fe_frombytes(fe *h, const uint8_t s[32]) { + uint8_t s_copy[32]; + GFp_memcpy(s_copy, s, 32); + s_copy[31] &= 0x7f; + fe_frombytes_strict(h, s_copy); +} + +static void fe_tobytes(uint8_t s[32], const fe *f) { + assert_fe(f->v); + fiat_25519_to_bytes(s, f->v); +} + +// h = 0 +static void fe_0(fe *h) { + GFp_memset(h, 0, sizeof(fe)); +} + +static void fe_loose_0(fe_loose *h) { + GFp_memset(h, 0, sizeof(fe_loose)); +} + +// h = 1 +static void fe_1(fe *h) { + GFp_memset(h, 0, sizeof(fe)); + h->v[0] = 1; +} + +static void fe_loose_1(fe_loose *h) { + GFp_memset(h, 0, sizeof(fe_loose)); + h->v[0] = 1; +} + +// h = f + g +// Can overlap h with f or g. +static void fe_add(fe_loose *h, const fe *f, const fe *g) { + assert_fe(f->v); + assert_fe(g->v); + fiat_25519_add(h->v, f->v, g->v); + assert_fe_loose(h->v); +} + +// h = f - g +// Can overlap h with f or g. +static void fe_sub(fe_loose *h, const fe *f, const fe *g) { + assert_fe(f->v); + assert_fe(g->v); + fiat_25519_sub(h->v, f->v, g->v); + assert_fe_loose(h->v); +} + +static void fe_carry(fe *h, const fe_loose* f) { + assert_fe_loose(f->v); + fiat_25519_carry(h->v, f->v); + assert_fe(h->v); +} + +static void fe_mul_impl(fe_limb_t out[FE_NUM_LIMBS], + const fe_limb_t in1[FE_NUM_LIMBS], + const fe_limb_t in2[FE_NUM_LIMBS]) { + assert_fe_loose(in1); + assert_fe_loose(in2); + fiat_25519_carry_mul(out, in1, in2); + assert_fe(out); +} + +static void fe_mul_ltt(fe_loose *h, const fe *f, const fe *g) { + fe_mul_impl(h->v, f->v, g->v); +} + +// static void fe_mul_llt(fe_loose *h, const fe_loose *f, const fe *g) was +// removed. This comment is here to make diffs vs. BoringSSL easier to read. + + +static void fe_mul_ttt(fe *h, const fe *f, const fe *g) { + fe_mul_impl(h->v, f->v, g->v); +} + +static void fe_mul_tlt(fe *h, const fe_loose *f, const fe *g) { + fe_mul_impl(h->v, f->v, g->v); +} + +static void fe_mul_ttl(fe *h, const fe *f, const fe_loose *g) { + fe_mul_impl(h->v, f->v, g->v); +} + +static void fe_mul_tll(fe *h, const fe_loose *f, const fe_loose *g) { + fe_mul_impl(h->v, f->v, g->v); +} + +static void fe_sq_tl(fe *h, const fe_loose *f) { + assert_fe_loose(f->v); + fiat_25519_carry_square(h->v, f->v); + assert_fe(h->v); +} + +static void fe_sq_tt(fe *h, const fe *f) { + assert_fe_loose(f->v); + fiat_25519_carry_square(h->v, f->v); + assert_fe(h->v); +} + +// Replace (f,g) with (g,f) if b == 1; +// replace (f,g) with (f,g) if b == 0. +// +// Preconditions: b in {0,1}. +static void fe_cswap(fe *f, fe *g, fe_limb_t b) { + b = 0-b; + for (unsigned i = 0; i < FE_NUM_LIMBS; i++) { + fe_limb_t x = f->v[i] ^ g->v[i]; + x &= b; + f->v[i] ^= x; + g->v[i] ^= x; + } +} + +static void fe_mul121666(fe *h, const fe_loose *f) { + assert_fe_loose(f->v); + fiat_25519_carry_scmul_121666(h->v, f->v); + assert_fe(h->v); +} + +// h = -f +static void fe_neg(fe_loose *h, const fe *f) { + assert_fe(f->v); + fiat_25519_opp(h->v, f->v); + assert_fe_loose(h->v); +} + +// Replace (f,g) with (g,g) if b == 1; +// replace (f,g) with (f,g) if b == 0. +// +// Preconditions: b in {0,1}. +static void fe_cmov(fe_loose *f, const fe_loose *g, fe_limb_t b) { + // Silence an unused function warning. |fiat_25519_selectznz| isn't quite the + // calling convention the rest of this code wants, so implement it by hand. + // + // TODO(davidben): Switch to fiat's calling convention, or ask fiat to emit a + // different one. + (void)fiat_25519_selectznz; + + b = 0-b; + for (unsigned i = 0; i < FE_NUM_LIMBS; i++) { + fe_limb_t x = f->v[i] ^ g->v[i]; + x &= b; + f->v[i] ^= x; + } +} + +// h = f +static void fe_copy(fe *h, const fe *f) { + fe_limbs_copy(h->v, f->v); +} + +static void fe_copy_lt(fe_loose *h, const fe *f) { + fe_limbs_copy(h->v, f->v); +} +#if !defined(OPENSSL_SMALL) +static void fe_copy_ll(fe_loose *h, const fe_loose *f) { + fe_limbs_copy(h->v, f->v); +} +#endif // !defined(OPENSSL_SMALL) + +static void fe_loose_invert(fe *out, const fe_loose *z) { + fe t0; + fe t1; + fe t2; + fe t3; + int i; + + fe_sq_tl(&t0, z); + fe_sq_tt(&t1, &t0); + for (i = 1; i < 2; ++i) { + fe_sq_tt(&t1, &t1); + } + fe_mul_tlt(&t1, z, &t1); + fe_mul_ttt(&t0, &t0, &t1); + fe_sq_tt(&t2, &t0); + fe_mul_ttt(&t1, &t1, &t2); + fe_sq_tt(&t2, &t1); + for (i = 1; i < 5; ++i) { + fe_sq_tt(&t2, &t2); + } + fe_mul_ttt(&t1, &t2, &t1); + fe_sq_tt(&t2, &t1); + for (i = 1; i < 10; ++i) { + fe_sq_tt(&t2, &t2); + } + fe_mul_ttt(&t2, &t2, &t1); + fe_sq_tt(&t3, &t2); + for (i = 1; i < 20; ++i) { + fe_sq_tt(&t3, &t3); + } + fe_mul_ttt(&t2, &t3, &t2); + fe_sq_tt(&t2, &t2); + for (i = 1; i < 10; ++i) { + fe_sq_tt(&t2, &t2); + } + fe_mul_ttt(&t1, &t2, &t1); + fe_sq_tt(&t2, &t1); + for (i = 1; i < 50; ++i) { + fe_sq_tt(&t2, &t2); + } + fe_mul_ttt(&t2, &t2, &t1); + fe_sq_tt(&t3, &t2); + for (i = 1; i < 100; ++i) { + fe_sq_tt(&t3, &t3); + } + fe_mul_ttt(&t2, &t3, &t2); + fe_sq_tt(&t2, &t2); + for (i = 1; i < 50; ++i) { + fe_sq_tt(&t2, &t2); + } + fe_mul_ttt(&t1, &t2, &t1); + fe_sq_tt(&t1, &t1); + for (i = 1; i < 5; ++i) { + fe_sq_tt(&t1, &t1); + } + fe_mul_ttt(out, &t1, &t0); +} + +static void fe_invert(fe *out, const fe *z) { + fe_loose l; + fe_copy_lt(&l, z); + fe_loose_invert(out, &l); +} + +// return 0 if f == 0 +// return 1 if f != 0 +static int fe_isnonzero(const fe_loose *f) { + fe tight; + fe_carry(&tight, f); + uint8_t s[32]; + fe_tobytes(s, &tight); + + static const uint8_t zero[32] = {0}; + return GFp_memcmp(s, zero, sizeof(zero)) != 0; +} + +// return 1 if f is in {1,3,5,...,q-2} +// return 0 if f is in {0,2,4,...,q-1} +static int fe_isnegative(const fe *f) { + uint8_t s[32]; + fe_tobytes(s, f); + return s[0] & 1; +} + +static void fe_sq2_tt(fe *h, const fe *f) { + // h = f^2 + fe_sq_tt(h, f); + + // h = h + h + fe_loose tmp; + fe_add(&tmp, h, h); + fe_carry(h, &tmp); +} + +static void fe_pow22523(fe *out, const fe *z) { + fe t0; + fe t1; + fe t2; + int i; + + fe_sq_tt(&t0, z); + fe_sq_tt(&t1, &t0); + for (i = 1; i < 2; ++i) { + fe_sq_tt(&t1, &t1); + } + fe_mul_ttt(&t1, z, &t1); + fe_mul_ttt(&t0, &t0, &t1); + fe_sq_tt(&t0, &t0); + fe_mul_ttt(&t0, &t1, &t0); + fe_sq_tt(&t1, &t0); + for (i = 1; i < 5; ++i) { + fe_sq_tt(&t1, &t1); + } + fe_mul_ttt(&t0, &t1, &t0); + fe_sq_tt(&t1, &t0); + for (i = 1; i < 10; ++i) { + fe_sq_tt(&t1, &t1); + } + fe_mul_ttt(&t1, &t1, &t0); + fe_sq_tt(&t2, &t1); + for (i = 1; i < 20; ++i) { + fe_sq_tt(&t2, &t2); + } + fe_mul_ttt(&t1, &t2, &t1); + fe_sq_tt(&t1, &t1); + for (i = 1; i < 10; ++i) { + fe_sq_tt(&t1, &t1); + } + fe_mul_ttt(&t0, &t1, &t0); + fe_sq_tt(&t1, &t0); + for (i = 1; i < 50; ++i) { + fe_sq_tt(&t1, &t1); + } + fe_mul_ttt(&t1, &t1, &t0); + fe_sq_tt(&t2, &t1); + for (i = 1; i < 100; ++i) { + fe_sq_tt(&t2, &t2); + } + fe_mul_ttt(&t1, &t2, &t1); + fe_sq_tt(&t1, &t1); + for (i = 1; i < 50; ++i) { + fe_sq_tt(&t1, &t1); + } + fe_mul_ttt(&t0, &t1, &t0); + fe_sq_tt(&t0, &t0); + for (i = 1; i < 2; ++i) { + fe_sq_tt(&t0, &t0); + } + fe_mul_ttt(out, &t0, z); +} + + +// Group operations. + +int GFp_x25519_ge_frombytes_vartime(ge_p3 *h, const uint8_t s[32]) { + fe u; + fe_loose v; + fe v3; + fe vxx; + fe_loose check; + + fe_frombytes(&h->Y, s); + fe_1(&h->Z); + fe_sq_tt(&v3, &h->Y); + fe_mul_ttt(&vxx, &v3, &d); + fe_sub(&v, &v3, &h->Z); // u = y^2-1 + fe_carry(&u, &v); + fe_add(&v, &vxx, &h->Z); // v = dy^2+1 + + fe_sq_tl(&v3, &v); + fe_mul_ttl(&v3, &v3, &v); // v3 = v^3 + fe_sq_tt(&h->X, &v3); + fe_mul_ttl(&h->X, &h->X, &v); + fe_mul_ttt(&h->X, &h->X, &u); // x = uv^7 + + fe_pow22523(&h->X, &h->X); // x = (uv^7)^((q-5)/8) + fe_mul_ttt(&h->X, &h->X, &v3); + fe_mul_ttt(&h->X, &h->X, &u); // x = uv^3(uv^7)^((q-5)/8) + + fe_sq_tt(&vxx, &h->X); + fe_mul_ttl(&vxx, &vxx, &v); + fe_sub(&check, &vxx, &u); + if (fe_isnonzero(&check)) { + fe_add(&check, &vxx, &u); + if (fe_isnonzero(&check)) { + return 0; + } + fe_mul_ttt(&h->X, &h->X, &sqrtm1); + } + + if (fe_isnegative(&h->X) != (s[31] >> 7)) { + fe_loose t; + fe_neg(&t, &h->X); + fe_carry(&h->X, &t); + } + + fe_mul_ttt(&h->T, &h->X, &h->Y); + return 1; +} + +static void ge_p2_0(ge_p2 *h) { + fe_0(&h->X); + fe_1(&h->Y); + fe_1(&h->Z); +} + +static void ge_p3_0(ge_p3 *h) { + fe_0(&h->X); + fe_1(&h->Y); + fe_1(&h->Z); + fe_0(&h->T); +} + +static void ge_precomp_0(ge_precomp *h) { + fe_loose_1(&h->yplusx); + fe_loose_1(&h->yminusx); + fe_loose_0(&h->xy2d); +} + +// r = p +static void ge_p3_to_p2(ge_p2 *r, const ge_p3 *p) { + fe_copy(&r->X, &p->X); + fe_copy(&r->Y, &p->Y); + fe_copy(&r->Z, &p->Z); +} + +// r = p +static void x25519_ge_p3_to_cached(ge_cached *r, const ge_p3 *p) { + fe_add(&r->YplusX, &p->Y, &p->X); + fe_sub(&r->YminusX, &p->Y, &p->X); + fe_copy_lt(&r->Z, &p->Z); + fe_mul_ltt(&r->T2d, &p->T, &d2); +} + +// r = p +static void x25519_ge_p1p1_to_p2(ge_p2 *r, const ge_p1p1 *p) { + fe_mul_tll(&r->X, &p->X, &p->T); + fe_mul_tll(&r->Y, &p->Y, &p->Z); + fe_mul_tll(&r->Z, &p->Z, &p->T); +} + +// r = p +static void x25519_ge_p1p1_to_p3(ge_p3 *r, const ge_p1p1 *p) { + fe_mul_tll(&r->X, &p->X, &p->T); + fe_mul_tll(&r->Y, &p->Y, &p->Z); + fe_mul_tll(&r->Z, &p->Z, &p->T); + fe_mul_tll(&r->T, &p->X, &p->Y); +} + +// r = 2 * p +static void ge_p2_dbl(ge_p1p1 *r, const ge_p2 *p) { + fe trX, trZ, trT; + fe t0; + + fe_sq_tt(&trX, &p->X); + fe_sq_tt(&trZ, &p->Y); + fe_sq2_tt(&trT, &p->Z); + fe_add(&r->Y, &p->X, &p->Y); + fe_sq_tl(&t0, &r->Y); + + fe_add(&r->Y, &trZ, &trX); + fe_sub(&r->Z, &trZ, &trX); + fe_carry(&trZ, &r->Y); + fe_sub(&r->X, &t0, &trZ); + fe_carry(&trZ, &r->Z); + fe_sub(&r->T, &trT, &trZ); +} + +// r = 2 * p +static void ge_p3_dbl(ge_p1p1 *r, const ge_p3 *p) { + ge_p2 q; + ge_p3_to_p2(&q, p); + ge_p2_dbl(r, &q); +} + +// r = p + q +static void ge_madd(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q) { + fe trY, trZ, trT; + + fe_add(&r->X, &p->Y, &p->X); + fe_sub(&r->Y, &p->Y, &p->X); + fe_mul_tll(&trZ, &r->X, &q->yplusx); + fe_mul_tll(&trY, &r->Y, &q->yminusx); + fe_mul_tlt(&trT, &q->xy2d, &p->T); + fe_add(&r->T, &p->Z, &p->Z); + fe_sub(&r->X, &trZ, &trY); + fe_add(&r->Y, &trZ, &trY); + fe_carry(&trZ, &r->T); + fe_add(&r->Z, &trZ, &trT); + fe_sub(&r->T, &trZ, &trT); +} + +// r = p - q +static void ge_msub(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q) { + fe trY, trZ, trT; + + fe_add(&r->X, &p->Y, &p->X); + fe_sub(&r->Y, &p->Y, &p->X); + fe_mul_tll(&trZ, &r->X, &q->yminusx); + fe_mul_tll(&trY, &r->Y, &q->yplusx); + fe_mul_tlt(&trT, &q->xy2d, &p->T); + fe_add(&r->T, &p->Z, &p->Z); + fe_sub(&r->X, &trZ, &trY); + fe_add(&r->Y, &trZ, &trY); + fe_carry(&trZ, &r->T); + fe_sub(&r->Z, &trZ, &trT); + fe_add(&r->T, &trZ, &trT); +} + +// r = p + q +static void x25519_ge_add(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q) { + fe trX, trY, trZ, trT; + + fe_add(&r->X, &p->Y, &p->X); + fe_sub(&r->Y, &p->Y, &p->X); + fe_mul_tll(&trZ, &r->X, &q->YplusX); + fe_mul_tll(&trY, &r->Y, &q->YminusX); + fe_mul_tlt(&trT, &q->T2d, &p->T); + fe_mul_ttl(&trX, &p->Z, &q->Z); + fe_add(&r->T, &trX, &trX); + fe_sub(&r->X, &trZ, &trY); + fe_add(&r->Y, &trZ, &trY); + fe_carry(&trZ, &r->T); + fe_add(&r->Z, &trZ, &trT); + fe_sub(&r->T, &trZ, &trT); +} + +// r = p - q +static void x25519_ge_sub(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q) { + fe trX, trY, trZ, trT; + + fe_add(&r->X, &p->Y, &p->X); + fe_sub(&r->Y, &p->Y, &p->X); + fe_mul_tll(&trZ, &r->X, &q->YminusX); + fe_mul_tll(&trY, &r->Y, &q->YplusX); + fe_mul_tlt(&trT, &q->T2d, &p->T); + fe_mul_ttl(&trX, &p->Z, &q->Z); + fe_add(&r->T, &trX, &trX); + fe_sub(&r->X, &trZ, &trY); + fe_add(&r->Y, &trZ, &trY); + fe_carry(&trZ, &r->T); + fe_sub(&r->Z, &trZ, &trT); + fe_add(&r->T, &trZ, &trT); +} + +static uint8_t equal(signed char b, signed char c) { + uint8_t ub = b; + uint8_t uc = c; + uint8_t x = ub ^ uc; // 0: yes; 1..255: no + uint32_t y = x; // 0: yes; 1..255: no + y -= 1; // 4294967295: yes; 0..254: no + y >>= 31; // 1: yes; 0: no + return y; +} + +static void cmov(ge_precomp *t, const ge_precomp *u, uint8_t b) { + fe_cmov(&t->yplusx, &u->yplusx, b); + fe_cmov(&t->yminusx, &u->yminusx, b); + fe_cmov(&t->xy2d, &u->xy2d, b); +} + +#if defined(OPENSSL_SMALL) + +static void x25519_ge_scalarmult_small_precomp( + ge_p3 *h, const uint8_t a[32], const uint8_t precomp_table[15 * 2 * 32]) { + // precomp_table is first expanded into matching |ge_precomp| + // elements. + ge_precomp multiples[15]; + + unsigned i; + for (i = 0; i < 15; i++) { + // The precomputed table is assumed to already clear the top bit, so + // |fe_frombytes_strict| may be used directly. + const uint8_t *bytes = &precomp_table[i*(2 * 32)]; + fe x, y; + fe_frombytes_strict(&x, bytes); + fe_frombytes_strict(&y, bytes + 32); + + ge_precomp *out = &multiples[i]; + fe_add(&out->yplusx, &y, &x); + fe_sub(&out->yminusx, &y, &x); + fe_mul_ltt(&out->xy2d, &x, &y); + fe_mul_llt(&out->xy2d, &out->xy2d, &d2); + } + + // See the comment above |k25519SmallPrecomp| about the structure of the + // precomputed elements. This loop does 64 additions and 64 doublings to + // calculate the result. + ge_p3_0(h); + + for (i = 63; i < 64; i--) { + unsigned j; + signed char index = 0; + + for (j = 0; j < 4; j++) { + const uint8_t bit = 1 & (a[(8 * j) + (i / 8)] >> (i & 7)); + index |= (bit << j); + } + + ge_precomp e; + ge_precomp_0(&e); + + for (j = 1; j < 16; j++) { + cmov(&e, &multiples[j-1], equal(index, j)); + } + + ge_cached cached; + ge_p1p1 r; + x25519_ge_p3_to_cached(&cached, h); + x25519_ge_add(&r, h, &cached); + x25519_ge_p1p1_to_p3(h, &r); + + ge_madd(&r, h, &e); + x25519_ge_p1p1_to_p3(h, &r); + } +} + +void x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t a[32]) { + x25519_ge_scalarmult_small_precomp(h, a, k25519SmallPrecomp); +} + +#else + +static uint8_t negative(signed char b) { + uint32_t x = b; + x >>= 31; // 1: yes; 0: no + return x; +} + +static void table_select(ge_precomp *t, int pos, signed char b) { + ge_precomp minust; + uint8_t bnegative = negative(b); + uint8_t babs = b - ((uint8_t)((-bnegative) & b) << 1); + + ge_precomp_0(t); + cmov(t, &k25519Precomp[pos][0], equal(babs, 1)); + cmov(t, &k25519Precomp[pos][1], equal(babs, 2)); + cmov(t, &k25519Precomp[pos][2], equal(babs, 3)); + cmov(t, &k25519Precomp[pos][3], equal(babs, 4)); + cmov(t, &k25519Precomp[pos][4], equal(babs, 5)); + cmov(t, &k25519Precomp[pos][5], equal(babs, 6)); + cmov(t, &k25519Precomp[pos][6], equal(babs, 7)); + cmov(t, &k25519Precomp[pos][7], equal(babs, 8)); + fe_copy_ll(&minust.yplusx, &t->yminusx); + fe_copy_ll(&minust.yminusx, &t->yplusx); + + // NOTE: the input table is canonical, but types don't encode it + fe tmp; + fe_carry(&tmp, &t->xy2d); + fe_neg(&minust.xy2d, &tmp); + + cmov(t, &minust, bnegative); +} + +// h = a * B +// where a = a[0]+256*a[1]+...+256^31 a[31] +// B is the Ed25519 base point (x,4/5) with x positive. +// +// Preconditions: +// a[31] <= 127 +void GFp_x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t *a) { + signed char e[64]; + signed char carry; + ge_p1p1 r; + ge_p2 s; + ge_precomp t; + int i; + + for (i = 0; i < 32; ++i) { + e[2 * i + 0] = (a[i] >> 0) & 15; + e[2 * i + 1] = (a[i] >> 4) & 15; + } + // each e[i] is between 0 and 15 + // e[63] is between 0 and 7 + + carry = 0; + for (i = 0; i < 63; ++i) { + e[i] += carry; + carry = e[i] + 8; + carry >>= 4; + e[i] -= carry << 4; + } + e[63] += carry; + // each e[i] is between -8 and 8 + + ge_p3_0(h); + for (i = 1; i < 64; i += 2) { + table_select(&t, i / 2, e[i]); + ge_madd(&r, h, &t); + x25519_ge_p1p1_to_p3(h, &r); + } + + ge_p3_dbl(&r, h); + x25519_ge_p1p1_to_p2(&s, &r); + ge_p2_dbl(&r, &s); + x25519_ge_p1p1_to_p2(&s, &r); + ge_p2_dbl(&r, &s); + x25519_ge_p1p1_to_p2(&s, &r); + ge_p2_dbl(&r, &s); + x25519_ge_p1p1_to_p3(h, &r); + + for (i = 0; i < 64; i += 2) { + table_select(&t, i / 2, e[i]); + ge_madd(&r, h, &t); + x25519_ge_p1p1_to_p3(h, &r); + } +} + +#endif + +static void slide(signed char *r, const uint8_t *a) { + int i; + int b; + int k; + + for (i = 0; i < 256; ++i) { + r[i] = 1 & (a[i >> 3] >> (i & 7)); + } + + for (i = 0; i < 256; ++i) { + if (r[i]) { + for (b = 1; b <= 6 && i + b < 256; ++b) { + if (r[i + b]) { + if (r[i] + (r[i + b] << b) <= 15) { + r[i] += r[i + b] << b; + r[i + b] = 0; + } else if (r[i] - (r[i + b] << b) >= -15) { + r[i] -= r[i + b] << b; + for (k = i + b; k < 256; ++k) { + if (!r[k]) { + r[k] = 1; + break; + } + r[k] = 0; + } + } else { + break; + } + } + } + } + } +} + +// r = a * A + b * B +// where a = a[0]+256*a[1]+...+256^31 a[31]. +// and b = b[0]+256*b[1]+...+256^31 b[31]. +// B is the Ed25519 base point (x,4/5) with x positive. +static void ge_double_scalarmult_vartime(ge_p2 *r, const uint8_t *a, + const ge_p3 *A, const uint8_t *b) { + signed char aslide[256]; + signed char bslide[256]; + ge_cached Ai[8]; // A,3A,5A,7A,9A,11A,13A,15A + ge_p1p1 t; + ge_p3 u; + ge_p3 A2; + int i; + + slide(aslide, a); + slide(bslide, b); + + x25519_ge_p3_to_cached(&Ai[0], A); + ge_p3_dbl(&t, A); + x25519_ge_p1p1_to_p3(&A2, &t); + x25519_ge_add(&t, &A2, &Ai[0]); + x25519_ge_p1p1_to_p3(&u, &t); + x25519_ge_p3_to_cached(&Ai[1], &u); + x25519_ge_add(&t, &A2, &Ai[1]); + x25519_ge_p1p1_to_p3(&u, &t); + x25519_ge_p3_to_cached(&Ai[2], &u); + x25519_ge_add(&t, &A2, &Ai[2]); + x25519_ge_p1p1_to_p3(&u, &t); + x25519_ge_p3_to_cached(&Ai[3], &u); + x25519_ge_add(&t, &A2, &Ai[3]); + x25519_ge_p1p1_to_p3(&u, &t); + x25519_ge_p3_to_cached(&Ai[4], &u); + x25519_ge_add(&t, &A2, &Ai[4]); + x25519_ge_p1p1_to_p3(&u, &t); + x25519_ge_p3_to_cached(&Ai[5], &u); + x25519_ge_add(&t, &A2, &Ai[5]); + x25519_ge_p1p1_to_p3(&u, &t); + x25519_ge_p3_to_cached(&Ai[6], &u); + x25519_ge_add(&t, &A2, &Ai[6]); + x25519_ge_p1p1_to_p3(&u, &t); + x25519_ge_p3_to_cached(&Ai[7], &u); + + ge_p2_0(r); + + for (i = 255; i >= 0; --i) { + if (aslide[i] || bslide[i]) { + break; + } + } + + for (; i >= 0; --i) { + ge_p2_dbl(&t, r); + + if (aslide[i] > 0) { + x25519_ge_p1p1_to_p3(&u, &t); + x25519_ge_add(&t, &u, &Ai[aslide[i] / 2]); + } else if (aslide[i] < 0) { + x25519_ge_p1p1_to_p3(&u, &t); + x25519_ge_sub(&t, &u, &Ai[(-aslide[i]) / 2]); + } + + if (bslide[i] > 0) { + x25519_ge_p1p1_to_p3(&u, &t); + ge_madd(&t, &u, &Bi[bslide[i] / 2]); + } else if (bslide[i] < 0) { + x25519_ge_p1p1_to_p3(&u, &t); + ge_msub(&t, &u, &Bi[(-bslide[i]) / 2]); + } + + x25519_ge_p1p1_to_p2(r, &t); + } +} + +// int64_lshift21 returns |a << 21| but is defined when shifting bits into the +// sign bit. This works around a language flaw in C. +static inline int64_t int64_lshift21(int64_t a) { + return (int64_t)((uint64_t)a << 21); +} + +// The set of scalars is \Z/l +// where l = 2^252 + 27742317777372353535851937790883648493. + +// Input: +// s[0]+256*s[1]+...+256^63*s[63] = s +// +// Output: +// s[0]+256*s[1]+...+256^31*s[31] = s mod l +// where l = 2^252 + 27742317777372353535851937790883648493. +// Overwrites s in place. +void GFp_x25519_sc_reduce(uint8_t s[64]) { + int64_t s0 = 2097151 & load_3(s); + int64_t s1 = 2097151 & (load_4(s + 2) >> 5); + int64_t s2 = 2097151 & (load_3(s + 5) >> 2); + int64_t s3 = 2097151 & (load_4(s + 7) >> 7); + int64_t s4 = 2097151 & (load_4(s + 10) >> 4); + int64_t s5 = 2097151 & (load_3(s + 13) >> 1); + int64_t s6 = 2097151 & (load_4(s + 15) >> 6); + int64_t s7 = 2097151 & (load_3(s + 18) >> 3); + int64_t s8 = 2097151 & load_3(s + 21); + int64_t s9 = 2097151 & (load_4(s + 23) >> 5); + int64_t s10 = 2097151 & (load_3(s + 26) >> 2); + int64_t s11 = 2097151 & (load_4(s + 28) >> 7); + int64_t s12 = 2097151 & (load_4(s + 31) >> 4); + int64_t s13 = 2097151 & (load_3(s + 34) >> 1); + int64_t s14 = 2097151 & (load_4(s + 36) >> 6); + int64_t s15 = 2097151 & (load_3(s + 39) >> 3); + int64_t s16 = 2097151 & load_3(s + 42); + int64_t s17 = 2097151 & (load_4(s + 44) >> 5); + int64_t s18 = 2097151 & (load_3(s + 47) >> 2); + int64_t s19 = 2097151 & (load_4(s + 49) >> 7); + int64_t s20 = 2097151 & (load_4(s + 52) >> 4); + int64_t s21 = 2097151 & (load_3(s + 55) >> 1); + int64_t s22 = 2097151 & (load_4(s + 57) >> 6); + int64_t s23 = (load_4(s + 60) >> 3); + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + int64_t carry10; + int64_t carry11; + int64_t carry12; + int64_t carry13; + int64_t carry14; + int64_t carry15; + int64_t carry16; + + s11 += s23 * 666643; + s12 += s23 * 470296; + s13 += s23 * 654183; + s14 -= s23 * 997805; + s15 += s23 * 136657; + s16 -= s23 * 683901; + s23 = 0; + + s10 += s22 * 666643; + s11 += s22 * 470296; + s12 += s22 * 654183; + s13 -= s22 * 997805; + s14 += s22 * 136657; + s15 -= s22 * 683901; + s22 = 0; + + s9 += s21 * 666643; + s10 += s21 * 470296; + s11 += s21 * 654183; + s12 -= s21 * 997805; + s13 += s21 * 136657; + s14 -= s21 * 683901; + s21 = 0; + + s8 += s20 * 666643; + s9 += s20 * 470296; + s10 += s20 * 654183; + s11 -= s20 * 997805; + s12 += s20 * 136657; + s13 -= s20 * 683901; + s20 = 0; + + s7 += s19 * 666643; + s8 += s19 * 470296; + s9 += s19 * 654183; + s10 -= s19 * 997805; + s11 += s19 * 136657; + s12 -= s19 * 683901; + s19 = 0; + + s6 += s18 * 666643; + s7 += s18 * 470296; + s8 += s18 * 654183; + s9 -= s18 * 997805; + s10 += s18 * 136657; + s11 -= s18 * 683901; + s18 = 0; + + carry6 = (s6 + (1 << 20)) >> 21; + s7 += carry6; + s6 -= int64_lshift21(carry6); + carry8 = (s8 + (1 << 20)) >> 21; + s9 += carry8; + s8 -= int64_lshift21(carry8); + carry10 = (s10 + (1 << 20)) >> 21; + s11 += carry10; + s10 -= int64_lshift21(carry10); + carry12 = (s12 + (1 << 20)) >> 21; + s13 += carry12; + s12 -= int64_lshift21(carry12); + carry14 = (s14 + (1 << 20)) >> 21; + s15 += carry14; + s14 -= int64_lshift21(carry14); + carry16 = (s16 + (1 << 20)) >> 21; + s17 += carry16; + s16 -= int64_lshift21(carry16); + + carry7 = (s7 + (1 << 20)) >> 21; + s8 += carry7; + s7 -= int64_lshift21(carry7); + carry9 = (s9 + (1 << 20)) >> 21; + s10 += carry9; + s9 -= int64_lshift21(carry9); + carry11 = (s11 + (1 << 20)) >> 21; + s12 += carry11; + s11 -= int64_lshift21(carry11); + carry13 = (s13 + (1 << 20)) >> 21; + s14 += carry13; + s13 -= int64_lshift21(carry13); + carry15 = (s15 + (1 << 20)) >> 21; + s16 += carry15; + s15 -= int64_lshift21(carry15); + + s5 += s17 * 666643; + s6 += s17 * 470296; + s7 += s17 * 654183; + s8 -= s17 * 997805; + s9 += s17 * 136657; + s10 -= s17 * 683901; + s17 = 0; + + s4 += s16 * 666643; + s5 += s16 * 470296; + s6 += s16 * 654183; + s7 -= s16 * 997805; + s8 += s16 * 136657; + s9 -= s16 * 683901; + s16 = 0; + + s3 += s15 * 666643; + s4 += s15 * 470296; + s5 += s15 * 654183; + s6 -= s15 * 997805; + s7 += s15 * 136657; + s8 -= s15 * 683901; + s15 = 0; + + s2 += s14 * 666643; + s3 += s14 * 470296; + s4 += s14 * 654183; + s5 -= s14 * 997805; + s6 += s14 * 136657; + s7 -= s14 * 683901; + s14 = 0; + + s1 += s13 * 666643; + s2 += s13 * 470296; + s3 += s13 * 654183; + s4 -= s13 * 997805; + s5 += s13 * 136657; + s6 -= s13 * 683901; + s13 = 0; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = (s0 + (1 << 20)) >> 21; + s1 += carry0; + s0 -= int64_lshift21(carry0); + carry2 = (s2 + (1 << 20)) >> 21; + s3 += carry2; + s2 -= int64_lshift21(carry2); + carry4 = (s4 + (1 << 20)) >> 21; + s5 += carry4; + s4 -= int64_lshift21(carry4); + carry6 = (s6 + (1 << 20)) >> 21; + s7 += carry6; + s6 -= int64_lshift21(carry6); + carry8 = (s8 + (1 << 20)) >> 21; + s9 += carry8; + s8 -= int64_lshift21(carry8); + carry10 = (s10 + (1 << 20)) >> 21; + s11 += carry10; + s10 -= int64_lshift21(carry10); + + carry1 = (s1 + (1 << 20)) >> 21; + s2 += carry1; + s1 -= int64_lshift21(carry1); + carry3 = (s3 + (1 << 20)) >> 21; + s4 += carry3; + s3 -= int64_lshift21(carry3); + carry5 = (s5 + (1 << 20)) >> 21; + s6 += carry5; + s5 -= int64_lshift21(carry5); + carry7 = (s7 + (1 << 20)) >> 21; + s8 += carry7; + s7 -= int64_lshift21(carry7); + carry9 = (s9 + (1 << 20)) >> 21; + s10 += carry9; + s9 -= int64_lshift21(carry9); + carry11 = (s11 + (1 << 20)) >> 21; + s12 += carry11; + s11 -= int64_lshift21(carry11); + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= int64_lshift21(carry0); + carry1 = s1 >> 21; + s2 += carry1; + s1 -= int64_lshift21(carry1); + carry2 = s2 >> 21; + s3 += carry2; + s2 -= int64_lshift21(carry2); + carry3 = s3 >> 21; + s4 += carry3; + s3 -= int64_lshift21(carry3); + carry4 = s4 >> 21; + s5 += carry4; + s4 -= int64_lshift21(carry4); + carry5 = s5 >> 21; + s6 += carry5; + s5 -= int64_lshift21(carry5); + carry6 = s6 >> 21; + s7 += carry6; + s6 -= int64_lshift21(carry6); + carry7 = s7 >> 21; + s8 += carry7; + s7 -= int64_lshift21(carry7); + carry8 = s8 >> 21; + s9 += carry8; + s8 -= int64_lshift21(carry8); + carry9 = s9 >> 21; + s10 += carry9; + s9 -= int64_lshift21(carry9); + carry10 = s10 >> 21; + s11 += carry10; + s10 -= int64_lshift21(carry10); + carry11 = s11 >> 21; + s12 += carry11; + s11 -= int64_lshift21(carry11); + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= int64_lshift21(carry0); + carry1 = s1 >> 21; + s2 += carry1; + s1 -= int64_lshift21(carry1); + carry2 = s2 >> 21; + s3 += carry2; + s2 -= int64_lshift21(carry2); + carry3 = s3 >> 21; + s4 += carry3; + s3 -= int64_lshift21(carry3); + carry4 = s4 >> 21; + s5 += carry4; + s4 -= int64_lshift21(carry4); + carry5 = s5 >> 21; + s6 += carry5; + s5 -= int64_lshift21(carry5); + carry6 = s6 >> 21; + s7 += carry6; + s6 -= int64_lshift21(carry6); + carry7 = s7 >> 21; + s8 += carry7; + s7 -= int64_lshift21(carry7); + carry8 = s8 >> 21; + s9 += carry8; + s8 -= int64_lshift21(carry8); + carry9 = s9 >> 21; + s10 += carry9; + s9 -= int64_lshift21(carry9); + carry10 = s10 >> 21; + s11 += carry10; + s10 -= int64_lshift21(carry10); + + s[0] = s0 >> 0; + s[1] = s0 >> 8; + s[2] = (s0 >> 16) | (s1 << 5); + s[3] = s1 >> 3; + s[4] = s1 >> 11; + s[5] = (s1 >> 19) | (s2 << 2); + s[6] = s2 >> 6; + s[7] = (s2 >> 14) | (s3 << 7); + s[8] = s3 >> 1; + s[9] = s3 >> 9; + s[10] = (s3 >> 17) | (s4 << 4); + s[11] = s4 >> 4; + s[12] = s4 >> 12; + s[13] = (s4 >> 20) | (s5 << 1); + s[14] = s5 >> 7; + s[15] = (s5 >> 15) | (s6 << 6); + s[16] = s6 >> 2; + s[17] = s6 >> 10; + s[18] = (s6 >> 18) | (s7 << 3); + s[19] = s7 >> 5; + s[20] = s7 >> 13; + s[21] = s8 >> 0; + s[22] = s8 >> 8; + s[23] = (s8 >> 16) | (s9 << 5); + s[24] = s9 >> 3; + s[25] = s9 >> 11; + s[26] = (s9 >> 19) | (s10 << 2); + s[27] = s10 >> 6; + s[28] = (s10 >> 14) | (s11 << 7); + s[29] = s11 >> 1; + s[30] = s11 >> 9; + s[31] = s11 >> 17; +} + +// Input: +// a[0]+256*a[1]+...+256^31*a[31] = a +// b[0]+256*b[1]+...+256^31*b[31] = b +// c[0]+256*c[1]+...+256^31*c[31] = c +// +// Output: +// s[0]+256*s[1]+...+256^31*s[31] = (ab+c) mod l +// where l = 2^252 + 27742317777372353535851937790883648493. +static void sc_muladd(uint8_t *s, const uint8_t *a, const uint8_t *b, + const uint8_t *c) { + int64_t a0 = 2097151 & load_3(a); + int64_t a1 = 2097151 & (load_4(a + 2) >> 5); + int64_t a2 = 2097151 & (load_3(a + 5) >> 2); + int64_t a3 = 2097151 & (load_4(a + 7) >> 7); + int64_t a4 = 2097151 & (load_4(a + 10) >> 4); + int64_t a5 = 2097151 & (load_3(a + 13) >> 1); + int64_t a6 = 2097151 & (load_4(a + 15) >> 6); + int64_t a7 = 2097151 & (load_3(a + 18) >> 3); + int64_t a8 = 2097151 & load_3(a + 21); + int64_t a9 = 2097151 & (load_4(a + 23) >> 5); + int64_t a10 = 2097151 & (load_3(a + 26) >> 2); + int64_t a11 = (load_4(a + 28) >> 7); + int64_t b0 = 2097151 & load_3(b); + int64_t b1 = 2097151 & (load_4(b + 2) >> 5); + int64_t b2 = 2097151 & (load_3(b + 5) >> 2); + int64_t b3 = 2097151 & (load_4(b + 7) >> 7); + int64_t b4 = 2097151 & (load_4(b + 10) >> 4); + int64_t b5 = 2097151 & (load_3(b + 13) >> 1); + int64_t b6 = 2097151 & (load_4(b + 15) >> 6); + int64_t b7 = 2097151 & (load_3(b + 18) >> 3); + int64_t b8 = 2097151 & load_3(b + 21); + int64_t b9 = 2097151 & (load_4(b + 23) >> 5); + int64_t b10 = 2097151 & (load_3(b + 26) >> 2); + int64_t b11 = (load_4(b + 28) >> 7); + int64_t c0 = 2097151 & load_3(c); + int64_t c1 = 2097151 & (load_4(c + 2) >> 5); + int64_t c2 = 2097151 & (load_3(c + 5) >> 2); + int64_t c3 = 2097151 & (load_4(c + 7) >> 7); + int64_t c4 = 2097151 & (load_4(c + 10) >> 4); + int64_t c5 = 2097151 & (load_3(c + 13) >> 1); + int64_t c6 = 2097151 & (load_4(c + 15) >> 6); + int64_t c7 = 2097151 & (load_3(c + 18) >> 3); + int64_t c8 = 2097151 & load_3(c + 21); + int64_t c9 = 2097151 & (load_4(c + 23) >> 5); + int64_t c10 = 2097151 & (load_3(c + 26) >> 2); + int64_t c11 = (load_4(c + 28) >> 7); + int64_t s0; + int64_t s1; + int64_t s2; + int64_t s3; + int64_t s4; + int64_t s5; + int64_t s6; + int64_t s7; + int64_t s8; + int64_t s9; + int64_t s10; + int64_t s11; + int64_t s12; + int64_t s13; + int64_t s14; + int64_t s15; + int64_t s16; + int64_t s17; + int64_t s18; + int64_t s19; + int64_t s20; + int64_t s21; + int64_t s22; + int64_t s23; + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + int64_t carry10; + int64_t carry11; + int64_t carry12; + int64_t carry13; + int64_t carry14; + int64_t carry15; + int64_t carry16; + int64_t carry17; + int64_t carry18; + int64_t carry19; + int64_t carry20; + int64_t carry21; + int64_t carry22; + + s0 = c0 + a0 * b0; + s1 = c1 + a0 * b1 + a1 * b0; + s2 = c2 + a0 * b2 + a1 * b1 + a2 * b0; + s3 = c3 + a0 * b3 + a1 * b2 + a2 * b1 + a3 * b0; + s4 = c4 + a0 * b4 + a1 * b3 + a2 * b2 + a3 * b1 + a4 * b0; + s5 = c5 + a0 * b5 + a1 * b4 + a2 * b3 + a3 * b2 + a4 * b1 + a5 * b0; + s6 = c6 + a0 * b6 + a1 * b5 + a2 * b4 + a3 * b3 + a4 * b2 + a5 * b1 + a6 * b0; + s7 = c7 + a0 * b7 + a1 * b6 + a2 * b5 + a3 * b4 + a4 * b3 + a5 * b2 + + a6 * b1 + a7 * b0; + s8 = c8 + a0 * b8 + a1 * b7 + a2 * b6 + a3 * b5 + a4 * b4 + a5 * b3 + + a6 * b2 + a7 * b1 + a8 * b0; + s9 = c9 + a0 * b9 + a1 * b8 + a2 * b7 + a3 * b6 + a4 * b5 + a5 * b4 + + a6 * b3 + a7 * b2 + a8 * b1 + a9 * b0; + s10 = c10 + a0 * b10 + a1 * b9 + a2 * b8 + a3 * b7 + a4 * b6 + a5 * b5 + + a6 * b4 + a7 * b3 + a8 * b2 + a9 * b1 + a10 * b0; + s11 = c11 + a0 * b11 + a1 * b10 + a2 * b9 + a3 * b8 + a4 * b7 + a5 * b6 + + a6 * b5 + a7 * b4 + a8 * b3 + a9 * b2 + a10 * b1 + a11 * b0; + s12 = a1 * b11 + a2 * b10 + a3 * b9 + a4 * b8 + a5 * b7 + a6 * b6 + a7 * b5 + + a8 * b4 + a9 * b3 + a10 * b2 + a11 * b1; + s13 = a2 * b11 + a3 * b10 + a4 * b9 + a5 * b8 + a6 * b7 + a7 * b6 + a8 * b5 + + a9 * b4 + a10 * b3 + a11 * b2; + s14 = a3 * b11 + a4 * b10 + a5 * b9 + a6 * b8 + a7 * b7 + a8 * b6 + a9 * b5 + + a10 * b4 + a11 * b3; + s15 = a4 * b11 + a5 * b10 + a6 * b9 + a7 * b8 + a8 * b7 + a9 * b6 + a10 * b5 + + a11 * b4; + s16 = a5 * b11 + a6 * b10 + a7 * b9 + a8 * b8 + a9 * b7 + a10 * b6 + a11 * b5; + s17 = a6 * b11 + a7 * b10 + a8 * b9 + a9 * b8 + a10 * b7 + a11 * b6; + s18 = a7 * b11 + a8 * b10 + a9 * b9 + a10 * b8 + a11 * b7; + s19 = a8 * b11 + a9 * b10 + a10 * b9 + a11 * b8; + s20 = a9 * b11 + a10 * b10 + a11 * b9; + s21 = a10 * b11 + a11 * b10; + s22 = a11 * b11; + s23 = 0; + + carry0 = (s0 + (1 << 20)) >> 21; + s1 += carry0; + s0 -= int64_lshift21(carry0); + carry2 = (s2 + (1 << 20)) >> 21; + s3 += carry2; + s2 -= int64_lshift21(carry2); + carry4 = (s4 + (1 << 20)) >> 21; + s5 += carry4; + s4 -= int64_lshift21(carry4); + carry6 = (s6 + (1 << 20)) >> 21; + s7 += carry6; + s6 -= int64_lshift21(carry6); + carry8 = (s8 + (1 << 20)) >> 21; + s9 += carry8; + s8 -= int64_lshift21(carry8); + carry10 = (s10 + (1 << 20)) >> 21; + s11 += carry10; + s10 -= int64_lshift21(carry10); + carry12 = (s12 + (1 << 20)) >> 21; + s13 += carry12; + s12 -= int64_lshift21(carry12); + carry14 = (s14 + (1 << 20)) >> 21; + s15 += carry14; + s14 -= int64_lshift21(carry14); + carry16 = (s16 + (1 << 20)) >> 21; + s17 += carry16; + s16 -= int64_lshift21(carry16); + carry18 = (s18 + (1 << 20)) >> 21; + s19 += carry18; + s18 -= int64_lshift21(carry18); + carry20 = (s20 + (1 << 20)) >> 21; + s21 += carry20; + s20 -= int64_lshift21(carry20); + carry22 = (s22 + (1 << 20)) >> 21; + s23 += carry22; + s22 -= int64_lshift21(carry22); + + carry1 = (s1 + (1 << 20)) >> 21; + s2 += carry1; + s1 -= int64_lshift21(carry1); + carry3 = (s3 + (1 << 20)) >> 21; + s4 += carry3; + s3 -= int64_lshift21(carry3); + carry5 = (s5 + (1 << 20)) >> 21; + s6 += carry5; + s5 -= int64_lshift21(carry5); + carry7 = (s7 + (1 << 20)) >> 21; + s8 += carry7; + s7 -= int64_lshift21(carry7); + carry9 = (s9 + (1 << 20)) >> 21; + s10 += carry9; + s9 -= int64_lshift21(carry9); + carry11 = (s11 + (1 << 20)) >> 21; + s12 += carry11; + s11 -= int64_lshift21(carry11); + carry13 = (s13 + (1 << 20)) >> 21; + s14 += carry13; + s13 -= int64_lshift21(carry13); + carry15 = (s15 + (1 << 20)) >> 21; + s16 += carry15; + s15 -= int64_lshift21(carry15); + carry17 = (s17 + (1 << 20)) >> 21; + s18 += carry17; + s17 -= int64_lshift21(carry17); + carry19 = (s19 + (1 << 20)) >> 21; + s20 += carry19; + s19 -= int64_lshift21(carry19); + carry21 = (s21 + (1 << 20)) >> 21; + s22 += carry21; + s21 -= int64_lshift21(carry21); + + s11 += s23 * 666643; + s12 += s23 * 470296; + s13 += s23 * 654183; + s14 -= s23 * 997805; + s15 += s23 * 136657; + s16 -= s23 * 683901; + s23 = 0; + + s10 += s22 * 666643; + s11 += s22 * 470296; + s12 += s22 * 654183; + s13 -= s22 * 997805; + s14 += s22 * 136657; + s15 -= s22 * 683901; + s22 = 0; + + s9 += s21 * 666643; + s10 += s21 * 470296; + s11 += s21 * 654183; + s12 -= s21 * 997805; + s13 += s21 * 136657; + s14 -= s21 * 683901; + s21 = 0; + + s8 += s20 * 666643; + s9 += s20 * 470296; + s10 += s20 * 654183; + s11 -= s20 * 997805; + s12 += s20 * 136657; + s13 -= s20 * 683901; + s20 = 0; + + s7 += s19 * 666643; + s8 += s19 * 470296; + s9 += s19 * 654183; + s10 -= s19 * 997805; + s11 += s19 * 136657; + s12 -= s19 * 683901; + s19 = 0; + + s6 += s18 * 666643; + s7 += s18 * 470296; + s8 += s18 * 654183; + s9 -= s18 * 997805; + s10 += s18 * 136657; + s11 -= s18 * 683901; + s18 = 0; + + carry6 = (s6 + (1 << 20)) >> 21; + s7 += carry6; + s6 -= int64_lshift21(carry6); + carry8 = (s8 + (1 << 20)) >> 21; + s9 += carry8; + s8 -= int64_lshift21(carry8); + carry10 = (s10 + (1 << 20)) >> 21; + s11 += carry10; + s10 -= int64_lshift21(carry10); + carry12 = (s12 + (1 << 20)) >> 21; + s13 += carry12; + s12 -= int64_lshift21(carry12); + carry14 = (s14 + (1 << 20)) >> 21; + s15 += carry14; + s14 -= int64_lshift21(carry14); + carry16 = (s16 + (1 << 20)) >> 21; + s17 += carry16; + s16 -= int64_lshift21(carry16); + + carry7 = (s7 + (1 << 20)) >> 21; + s8 += carry7; + s7 -= int64_lshift21(carry7); + carry9 = (s9 + (1 << 20)) >> 21; + s10 += carry9; + s9 -= int64_lshift21(carry9); + carry11 = (s11 + (1 << 20)) >> 21; + s12 += carry11; + s11 -= int64_lshift21(carry11); + carry13 = (s13 + (1 << 20)) >> 21; + s14 += carry13; + s13 -= int64_lshift21(carry13); + carry15 = (s15 + (1 << 20)) >> 21; + s16 += carry15; + s15 -= int64_lshift21(carry15); + + s5 += s17 * 666643; + s6 += s17 * 470296; + s7 += s17 * 654183; + s8 -= s17 * 997805; + s9 += s17 * 136657; + s10 -= s17 * 683901; + s17 = 0; + + s4 += s16 * 666643; + s5 += s16 * 470296; + s6 += s16 * 654183; + s7 -= s16 * 997805; + s8 += s16 * 136657; + s9 -= s16 * 683901; + s16 = 0; + + s3 += s15 * 666643; + s4 += s15 * 470296; + s5 += s15 * 654183; + s6 -= s15 * 997805; + s7 += s15 * 136657; + s8 -= s15 * 683901; + s15 = 0; + + s2 += s14 * 666643; + s3 += s14 * 470296; + s4 += s14 * 654183; + s5 -= s14 * 997805; + s6 += s14 * 136657; + s7 -= s14 * 683901; + s14 = 0; + + s1 += s13 * 666643; + s2 += s13 * 470296; + s3 += s13 * 654183; + s4 -= s13 * 997805; + s5 += s13 * 136657; + s6 -= s13 * 683901; + s13 = 0; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = (s0 + (1 << 20)) >> 21; + s1 += carry0; + s0 -= int64_lshift21(carry0); + carry2 = (s2 + (1 << 20)) >> 21; + s3 += carry2; + s2 -= int64_lshift21(carry2); + carry4 = (s4 + (1 << 20)) >> 21; + s5 += carry4; + s4 -= int64_lshift21(carry4); + carry6 = (s6 + (1 << 20)) >> 21; + s7 += carry6; + s6 -= int64_lshift21(carry6); + carry8 = (s8 + (1 << 20)) >> 21; + s9 += carry8; + s8 -= int64_lshift21(carry8); + carry10 = (s10 + (1 << 20)) >> 21; + s11 += carry10; + s10 -= int64_lshift21(carry10); + + carry1 = (s1 + (1 << 20)) >> 21; + s2 += carry1; + s1 -= int64_lshift21(carry1); + carry3 = (s3 + (1 << 20)) >> 21; + s4 += carry3; + s3 -= int64_lshift21(carry3); + carry5 = (s5 + (1 << 20)) >> 21; + s6 += carry5; + s5 -= int64_lshift21(carry5); + carry7 = (s7 + (1 << 20)) >> 21; + s8 += carry7; + s7 -= int64_lshift21(carry7); + carry9 = (s9 + (1 << 20)) >> 21; + s10 += carry9; + s9 -= int64_lshift21(carry9); + carry11 = (s11 + (1 << 20)) >> 21; + s12 += carry11; + s11 -= int64_lshift21(carry11); + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= int64_lshift21(carry0); + carry1 = s1 >> 21; + s2 += carry1; + s1 -= int64_lshift21(carry1); + carry2 = s2 >> 21; + s3 += carry2; + s2 -= int64_lshift21(carry2); + carry3 = s3 >> 21; + s4 += carry3; + s3 -= int64_lshift21(carry3); + carry4 = s4 >> 21; + s5 += carry4; + s4 -= int64_lshift21(carry4); + carry5 = s5 >> 21; + s6 += carry5; + s5 -= int64_lshift21(carry5); + carry6 = s6 >> 21; + s7 += carry6; + s6 -= int64_lshift21(carry6); + carry7 = s7 >> 21; + s8 += carry7; + s7 -= int64_lshift21(carry7); + carry8 = s8 >> 21; + s9 += carry8; + s8 -= int64_lshift21(carry8); + carry9 = s9 >> 21; + s10 += carry9; + s9 -= int64_lshift21(carry9); + carry10 = s10 >> 21; + s11 += carry10; + s10 -= int64_lshift21(carry10); + carry11 = s11 >> 21; + s12 += carry11; + s11 -= int64_lshift21(carry11); + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= int64_lshift21(carry0); + carry1 = s1 >> 21; + s2 += carry1; + s1 -= int64_lshift21(carry1); + carry2 = s2 >> 21; + s3 += carry2; + s2 -= int64_lshift21(carry2); + carry3 = s3 >> 21; + s4 += carry3; + s3 -= int64_lshift21(carry3); + carry4 = s4 >> 21; + s5 += carry4; + s4 -= int64_lshift21(carry4); + carry5 = s5 >> 21; + s6 += carry5; + s5 -= int64_lshift21(carry5); + carry6 = s6 >> 21; + s7 += carry6; + s6 -= int64_lshift21(carry6); + carry7 = s7 >> 21; + s8 += carry7; + s7 -= int64_lshift21(carry7); + carry8 = s8 >> 21; + s9 += carry8; + s8 -= int64_lshift21(carry8); + carry9 = s9 >> 21; + s10 += carry9; + s9 -= int64_lshift21(carry9); + carry10 = s10 >> 21; + s11 += carry10; + s10 -= int64_lshift21(carry10); + + s[0] = s0 >> 0; + s[1] = s0 >> 8; + s[2] = (s0 >> 16) | (s1 << 5); + s[3] = s1 >> 3; + s[4] = s1 >> 11; + s[5] = (s1 >> 19) | (s2 << 2); + s[6] = s2 >> 6; + s[7] = (s2 >> 14) | (s3 << 7); + s[8] = s3 >> 1; + s[9] = s3 >> 9; + s[10] = (s3 >> 17) | (s4 << 4); + s[11] = s4 >> 4; + s[12] = s4 >> 12; + s[13] = (s4 >> 20) | (s5 << 1); + s[14] = s5 >> 7; + s[15] = (s5 >> 15) | (s6 << 6); + s[16] = s6 >> 2; + s[17] = s6 >> 10; + s[18] = (s6 >> 18) | (s7 << 3); + s[19] = s7 >> 5; + s[20] = s7 >> 13; + s[21] = s8 >> 0; + s[22] = s8 >> 8; + s[23] = (s8 >> 16) | (s9 << 5); + s[24] = s9 >> 3; + s[25] = s9 >> 11; + s[26] = (s9 >> 19) | (s10 << 2); + s[27] = s10 >> 6; + s[28] = (s10 >> 14) | (s11 << 7); + s[29] = s11 >> 1; + s[30] = s11 >> 9; + s[31] = s11 >> 17; +} + + +void GFp_x25519_scalar_mult_generic_masked(uint8_t out[32], + const uint8_t scalar_masked[32], + const uint8_t point[32]) { + fe x1, x2, z2, x3, z3, tmp0, tmp1; + fe_loose x2l, z2l, x3l, tmp0l, tmp1l; + + uint8_t e[32]; + GFp_memcpy(e, scalar_masked, 32); + // The following implementation was transcribed to Coq and proven to + // correspond to unary scalar multiplication in affine coordinates given that + // x1 != 0 is the x coordinate of some point on the curve. It was also checked + // in Coq that doing a ladderstep with x1 = x3 = 0 gives z2' = z3' = 0, and z2 + // = z3 = 0 gives z2' = z3' = 0. The statement was quantified over the + // underlying field, so it applies to Curve25519 itself and the quadratic + // twist of Curve25519. It was not proven in Coq that prime-field arithmetic + // correctly simulates extension-field arithmetic on prime-field values. + // The decoding of the byte array representation of e was not considered. + // Specification of Montgomery curves in affine coordinates: + // + // Proof that these form a group that is isomorphic to a Weierstrass curve: + // + // Coq transcription and correctness proof of the loop (where scalarbits=255): + // + // + // preconditions: 0 <= e < 2^255 (not necessarily e < order), fe_invert(0) = 0 + fe_frombytes(&x1, point); + fe_1(&x2); + fe_0(&z2); + fe_copy(&x3, &x1); + fe_1(&z3); + + unsigned swap = 0; + int pos; + for (pos = 254; pos >= 0; --pos) { + // loop invariant as of right before the test, for the case where x1 != 0: + // pos >= -1; if z2 = 0 then x2 is nonzero; if z3 = 0 then x3 is nonzero + // let r := e >> (pos+1) in the following equalities of projective points: + // to_xz (r*P) === if swap then (x3, z3) else (x2, z2) + // to_xz ((r+1)*P) === if swap then (x2, z2) else (x3, z3) + // x1 is the nonzero x coordinate of the nonzero point (r*P-(r+1)*P) + unsigned b = 1 & (e[pos / 8] >> (pos & 7)); + swap ^= b; + fe_cswap(&x2, &x3, swap); + fe_cswap(&z2, &z3, swap); + swap = b; + // Coq transcription of ladderstep formula (called from transcribed loop): + // + // + // x1 != 0 + // x1 = 0 + fe_sub(&tmp0l, &x3, &z3); + fe_sub(&tmp1l, &x2, &z2); + fe_add(&x2l, &x2, &z2); + fe_add(&z2l, &x3, &z3); + fe_mul_tll(&z3, &tmp0l, &x2l); + fe_mul_tll(&z2, &z2l, &tmp1l); + fe_sq_tl(&tmp0, &tmp1l); + fe_sq_tl(&tmp1, &x2l); + fe_add(&x3l, &z3, &z2); + fe_sub(&z2l, &z3, &z2); + fe_mul_ttt(&x2, &tmp1, &tmp0); + fe_sub(&tmp1l, &tmp1, &tmp0); + fe_sq_tl(&z2, &z2l); + fe_mul121666(&z3, &tmp1l); + fe_sq_tl(&x3, &x3l); + fe_add(&tmp0l, &tmp0, &z3); + fe_mul_ttt(&z3, &x1, &z2); + fe_mul_tll(&z2, &tmp1l, &tmp0l); + } + // here pos=-1, so r=e, so to_xz (e*P) === if swap then (x3, z3) else (x2, z2) + fe_cswap(&x2, &x3, swap); + fe_cswap(&z2, &z3, swap); + + fe_invert(&z2, &z2); + fe_mul_ttt(&x2, &x2, &z2); + fe_tobytes(out, &x2); +} + +void GFp_x25519_public_from_private_generic_masked(uint8_t out_public_value[32], + const uint8_t private_key_masked[32]) { + uint8_t e[32]; + GFp_memcpy(e, private_key_masked, 32); + + ge_p3 A; + GFp_x25519_ge_scalarmult_base(&A, e); + + // We only need the u-coordinate of the curve25519 point. The map is + // u=(y+1)/(1-y). Since y=Y/Z, this gives u=(Z+Y)/(Z-Y). + fe_loose zplusy, zminusy; + fe zminusy_inv; + fe_add(&zplusy, &A.Z, &A.Y); + fe_sub(&zminusy, &A.Z, &A.Y); + fe_loose_invert(&zminusy_inv, &zminusy); + fe_mul_tlt(&zminusy_inv, &zplusy, &zminusy_inv); + fe_tobytes(out_public_value, &zminusy_inv); +} + +void GFp_x25519_fe_invert(fe *out, const fe *z) { + fe_invert(out, z); +} + +uint8_t GFp_x25519_fe_isnegative(const fe *f) { + return (uint8_t)fe_isnegative(f); +} + +void GFp_x25519_fe_mul_ttt(fe *h, const fe *f, const fe *g) { + fe_mul_ttt(h, f, g); +} + +void GFp_x25519_fe_neg(fe *f) { + fe_loose t; + fe_neg(&t, f); + fe_carry(f, &t); +} + +void GFp_x25519_fe_tobytes(uint8_t s[32], const fe *h) { + fe_tobytes(s, h); +} + +void GFp_x25519_ge_double_scalarmult_vartime(ge_p2 *r, const uint8_t *a, + const ge_p3 *A, const uint8_t *b) { + ge_double_scalarmult_vartime(r, a, A, b); +} + +void GFp_x25519_sc_mask(uint8_t a[32]) { + a[0] &= 248; + a[31] &= 127; + a[31] |= 64; +} + +void GFp_x25519_sc_muladd(uint8_t *s, const uint8_t *a, const uint8_t *b, + const uint8_t *c) { + sc_muladd(s, a, b, c); +} diff --git a/vendor/ring/crypto/curve25519/curve25519_tables.h b/vendor/ring/crypto/curve25519/curve25519_tables.h new file mode 100644 index 00000000..310581cf --- /dev/null +++ b/vendor/ring/crypto/curve25519/curve25519_tables.h @@ -0,0 +1,7872 @@ +/* Copyright (c) 2020, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +// This file is generated from +// ./make_curve25519_tables.py > curve25519_tables.h + + +static const fe d = {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 929955233495203, 466365720129213, 1662059464998953, 2033849074728123, + 1442794654840575 +#else + 56195235, 13857412, 51736253, 6949390, 114729, 24766616, 60832955, 30306712, + 48412415, 21499315 +#endif +}}; + +static const fe sqrtm1 = {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1718705420411056, 234908883556509, 2233514472574048, 2117202627021982, + 765476049583133 +#else + 34513072, 25610706, 9377949, 3500415, 12389472, 33281959, 41962654, + 31548777, 326685, 11406482 +#endif +}}; + +static const fe d2 = {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1859910466990425, 932731440258426, 1072319116312658, 1815898335770999, + 633789495995903 +#else + 45281625, 27714825, 36363642, 13898781, 229458, 15978800, 54557047, + 27058993, 29715967, 9444199 +#endif +}}; + +#if defined(OPENSSL_SMALL) + +// This block of code replaces the standard base-point table with a much smaller +// one. The standard table is 30,720 bytes while this one is just 960. +// +// This table contains 15 pairs of group elements, (x, y), where each field +// element is serialised with |fe_tobytes|. If |i| is the index of the group +// element then consider i+1 as a four-bit number: (iâ‚€, iâ‚, iâ‚‚, i₃) (where iâ‚€ +// is the most significant bit). The value of the group element is then: +// (i₀×2^192 + iâ‚×2^128 + i₂×2^64 + i₃)G, where G is the generator. +static const uint8_t k25519SmallPrecomp[15 * 2 * 32] = { + 0x1a, 0xd5, 0x25, 0x8f, 0x60, 0x2d, 0x56, 0xc9, 0xb2, 0xa7, 0x25, 0x95, + 0x60, 0xc7, 0x2c, 0x69, 0x5c, 0xdc, 0xd6, 0xfd, 0x31, 0xe2, 0xa4, 0xc0, + 0xfe, 0x53, 0x6e, 0xcd, 0xd3, 0x36, 0x69, 0x21, 0x58, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x02, 0xa2, 0xed, 0xf4, 0x8f, 0x6b, 0x0b, 0x3e, + 0xeb, 0x35, 0x1a, 0xd5, 0x7e, 0xdb, 0x78, 0x00, 0x96, 0x8a, 0xa0, 0xb4, + 0xcf, 0x60, 0x4b, 0xd4, 0xd5, 0xf9, 0x2d, 0xbf, 0x88, 0xbd, 0x22, 0x62, + 0x13, 0x53, 0xe4, 0x82, 0x57, 0xfa, 0x1e, 0x8f, 0x06, 0x2b, 0x90, 0xba, + 0x08, 0xb6, 0x10, 0x54, 0x4f, 0x7c, 0x1b, 0x26, 0xed, 0xda, 0x6b, 0xdd, + 0x25, 0xd0, 0x4e, 0xea, 0x42, 0xbb, 0x25, 0x03, 0xa2, 0xfb, 0xcc, 0x61, + 0x67, 0x06, 0x70, 0x1a, 0xc4, 0x78, 0x3a, 0xff, 0x32, 0x62, 0xdd, 0x2c, + 0xab, 0x50, 0x19, 0x3b, 0xf2, 0x9b, 0x7d, 0xb8, 0xfd, 0x4f, 0x29, 0x9c, + 0xa7, 0x91, 0xba, 0x0e, 0x46, 0x5e, 0x51, 0xfe, 0x1d, 0xbf, 0xe5, 0xe5, + 0x9b, 0x95, 0x0d, 0x67, 0xf8, 0xd1, 0xb5, 0x5a, 0xa1, 0x93, 0x2c, 0xc3, + 0xde, 0x0e, 0x97, 0x85, 0x2d, 0x7f, 0xea, 0xab, 0x3e, 0x47, 0x30, 0x18, + 0x24, 0xe8, 0xb7, 0x60, 0xae, 0x47, 0x80, 0xfc, 0xe5, 0x23, 0xe7, 0xc2, + 0xc9, 0x85, 0xe6, 0x98, 0xa0, 0x29, 0x4e, 0xe1, 0x84, 0x39, 0x2d, 0x95, + 0x2c, 0xf3, 0x45, 0x3c, 0xff, 0xaf, 0x27, 0x4c, 0x6b, 0xa6, 0xf5, 0x4b, + 0x11, 0xbd, 0xba, 0x5b, 0x9e, 0xc4, 0xa4, 0x51, 0x1e, 0xbe, 0xd0, 0x90, + 0x3a, 0x9c, 0xc2, 0x26, 0xb6, 0x1e, 0xf1, 0x95, 0x7d, 0xc8, 0x6d, 0x52, + 0xe6, 0x99, 0x2c, 0x5f, 0x9a, 0x96, 0x0c, 0x68, 0x29, 0xfd, 0xe2, 0xfb, + 0xe6, 0xbc, 0xec, 0x31, 0x08, 0xec, 0xe6, 0xb0, 0x53, 0x60, 0xc3, 0x8c, + 0xbe, 0xc1, 0xb3, 0x8a, 0x8f, 0xe4, 0x88, 0x2b, 0x55, 0xe5, 0x64, 0x6e, + 0x9b, 0xd0, 0xaf, 0x7b, 0x64, 0x2a, 0x35, 0x25, 0x10, 0x52, 0xc5, 0x9e, + 0x58, 0x11, 0x39, 0x36, 0x45, 0x51, 0xb8, 0x39, 0x93, 0xfc, 0x9d, 0x6a, + 0xbe, 0x58, 0xcb, 0xa4, 0x0f, 0x51, 0x3c, 0x38, 0x05, 0xca, 0xab, 0x43, + 0x63, 0x0e, 0xf3, 0x8b, 0x41, 0xa6, 0xf8, 0x9b, 0x53, 0x70, 0x80, 0x53, + 0x86, 0x5e, 0x8f, 0xe3, 0xc3, 0x0d, 0x18, 0xc8, 0x4b, 0x34, 0x1f, 0xd8, + 0x1d, 0xbc, 0xf2, 0x6d, 0x34, 0x3a, 0xbe, 0xdf, 0xd9, 0xf6, 0xf3, 0x89, + 0xa1, 0xe1, 0x94, 0x9f, 0x5d, 0x4c, 0x5d, 0xe9, 0xa1, 0x49, 0x92, 0xef, + 0x0e, 0x53, 0x81, 0x89, 0x58, 0x87, 0xa6, 0x37, 0xf1, 0xdd, 0x62, 0x60, + 0x63, 0x5a, 0x9d, 0x1b, 0x8c, 0xc6, 0x7d, 0x52, 0xea, 0x70, 0x09, 0x6a, + 0xe1, 0x32, 0xf3, 0x73, 0x21, 0x1f, 0x07, 0x7b, 0x7c, 0x9b, 0x49, 0xd8, + 0xc0, 0xf3, 0x25, 0x72, 0x6f, 0x9d, 0xed, 0x31, 0x67, 0x36, 0x36, 0x54, + 0x40, 0x92, 0x71, 0xe6, 0x11, 0x28, 0x11, 0xad, 0x93, 0x32, 0x85, 0x7b, + 0x3e, 0xb7, 0x3b, 0x49, 0x13, 0x1c, 0x07, 0xb0, 0x2e, 0x93, 0xaa, 0xfd, + 0xfd, 0x28, 0x47, 0x3d, 0x8d, 0xd2, 0xda, 0xc7, 0x44, 0xd6, 0x7a, 0xdb, + 0x26, 0x7d, 0x1d, 0xb8, 0xe1, 0xde, 0x9d, 0x7a, 0x7d, 0x17, 0x7e, 0x1c, + 0x37, 0x04, 0x8d, 0x2d, 0x7c, 0x5e, 0x18, 0x38, 0x1e, 0xaf, 0xc7, 0x1b, + 0x33, 0x48, 0x31, 0x00, 0x59, 0xf6, 0xf2, 0xca, 0x0f, 0x27, 0x1b, 0x63, + 0x12, 0x7e, 0x02, 0x1d, 0x49, 0xc0, 0x5d, 0x79, 0x87, 0xef, 0x5e, 0x7a, + 0x2f, 0x1f, 0x66, 0x55, 0xd8, 0x09, 0xd9, 0x61, 0x38, 0x68, 0xb0, 0x07, + 0xa3, 0xfc, 0xcc, 0x85, 0x10, 0x7f, 0x4c, 0x65, 0x65, 0xb3, 0xfa, 0xfa, + 0xa5, 0x53, 0x6f, 0xdb, 0x74, 0x4c, 0x56, 0x46, 0x03, 0xe2, 0xd5, 0x7a, + 0x29, 0x1c, 0xc6, 0x02, 0xbc, 0x59, 0xf2, 0x04, 0x75, 0x63, 0xc0, 0x84, + 0x2f, 0x60, 0x1c, 0x67, 0x76, 0xfd, 0x63, 0x86, 0xf3, 0xfa, 0xbf, 0xdc, + 0xd2, 0x2d, 0x90, 0x91, 0xbd, 0x33, 0xa9, 0xe5, 0x66, 0x0c, 0xda, 0x42, + 0x27, 0xca, 0xf4, 0x66, 0xc2, 0xec, 0x92, 0x14, 0x57, 0x06, 0x63, 0xd0, + 0x4d, 0x15, 0x06, 0xeb, 0x69, 0x58, 0x4f, 0x77, 0xc5, 0x8b, 0xc7, 0xf0, + 0x8e, 0xed, 0x64, 0xa0, 0xb3, 0x3c, 0x66, 0x71, 0xc6, 0x2d, 0xda, 0x0a, + 0x0d, 0xfe, 0x70, 0x27, 0x64, 0xf8, 0x27, 0xfa, 0xf6, 0x5f, 0x30, 0xa5, + 0x0d, 0x6c, 0xda, 0xf2, 0x62, 0x5e, 0x78, 0x47, 0xd3, 0x66, 0x00, 0x1c, + 0xfd, 0x56, 0x1f, 0x5d, 0x3f, 0x6f, 0xf4, 0x4c, 0xd8, 0xfd, 0x0e, 0x27, + 0xc9, 0x5c, 0x2b, 0xbc, 0xc0, 0xa4, 0xe7, 0x23, 0x29, 0x02, 0x9f, 0x31, + 0xd6, 0xe9, 0xd7, 0x96, 0xf4, 0xe0, 0x5e, 0x0b, 0x0e, 0x13, 0xee, 0x3c, + 0x09, 0xed, 0xf2, 0x3d, 0x76, 0x91, 0xc3, 0xa4, 0x97, 0xae, 0xd4, 0x87, + 0xd0, 0x5d, 0xf6, 0x18, 0x47, 0x1f, 0x1d, 0x67, 0xf2, 0xcf, 0x63, 0xa0, + 0x91, 0x27, 0xf8, 0x93, 0x45, 0x75, 0x23, 0x3f, 0xd1, 0xf1, 0xad, 0x23, + 0xdd, 0x64, 0x93, 0x96, 0x41, 0x70, 0x7f, 0xf7, 0xf5, 0xa9, 0x89, 0xa2, + 0x34, 0xb0, 0x8d, 0x1b, 0xae, 0x19, 0x15, 0x49, 0x58, 0x23, 0x6d, 0x87, + 0x15, 0x4f, 0x81, 0x76, 0xfb, 0x23, 0xb5, 0xea, 0xcf, 0xac, 0x54, 0x8d, + 0x4e, 0x42, 0x2f, 0xeb, 0x0f, 0x63, 0xdb, 0x68, 0x37, 0xa8, 0xcf, 0x8b, + 0xab, 0xf5, 0xa4, 0x6e, 0x96, 0x2a, 0xb2, 0xd6, 0xbe, 0x9e, 0xbd, 0x0d, + 0xb4, 0x42, 0xa9, 0xcf, 0x01, 0x83, 0x8a, 0x17, 0x47, 0x76, 0xc4, 0xc6, + 0x83, 0x04, 0x95, 0x0b, 0xfc, 0x11, 0xc9, 0x62, 0xb8, 0x0c, 0x76, 0x84, + 0xd9, 0xb9, 0x37, 0xfa, 0xfc, 0x7c, 0xc2, 0x6d, 0x58, 0x3e, 0xb3, 0x04, + 0xbb, 0x8c, 0x8f, 0x48, 0xbc, 0x91, 0x27, 0xcc, 0xf9, 0xb7, 0x22, 0x19, + 0x83, 0x2e, 0x09, 0xb5, 0x72, 0xd9, 0x54, 0x1c, 0x4d, 0xa1, 0xea, 0x0b, + 0xf1, 0xc6, 0x08, 0x72, 0x46, 0x87, 0x7a, 0x6e, 0x80, 0x56, 0x0a, 0x8a, + 0xc0, 0xdd, 0x11, 0x6b, 0xd6, 0xdd, 0x47, 0xdf, 0x10, 0xd9, 0xd8, 0xea, + 0x7c, 0xb0, 0x8f, 0x03, 0x00, 0x2e, 0xc1, 0x8f, 0x44, 0xa8, 0xd3, 0x30, + 0x06, 0x89, 0xa2, 0xf9, 0x34, 0xad, 0xdc, 0x03, 0x85, 0xed, 0x51, 0xa7, + 0x82, 0x9c, 0xe7, 0x5d, 0x52, 0x93, 0x0c, 0x32, 0x9a, 0x5b, 0xe1, 0xaa, + 0xca, 0xb8, 0x02, 0x6d, 0x3a, 0xd4, 0xb1, 0x3a, 0xf0, 0x5f, 0xbe, 0xb5, + 0x0d, 0x10, 0x6b, 0x38, 0x32, 0xac, 0x76, 0x80, 0xbd, 0xca, 0x94, 0x71, + 0x7a, 0xf2, 0xc9, 0x35, 0x2a, 0xde, 0x9f, 0x42, 0x49, 0x18, 0x01, 0xab, + 0xbc, 0xef, 0x7c, 0x64, 0x3f, 0x58, 0x3d, 0x92, 0x59, 0xdb, 0x13, 0xdb, + 0x58, 0x6e, 0x0a, 0xe0, 0xb7, 0x91, 0x4a, 0x08, 0x20, 0xd6, 0x2e, 0x3c, + 0x45, 0xc9, 0x8b, 0x17, 0x79, 0xe7, 0xc7, 0x90, 0x99, 0x3a, 0x18, 0x25, +}; + +#else + +// k25519Precomp[i][j] = (j+1)*256^i*B +static const ge_precomp k25519Precomp[32][8] = { + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1288382639258501, 245678601348599, 269427782077623, + 1462984067271730, 137412439391563 +#else + 25967493, 19198397, 29566455, 3660896, 54414519, 4014786, + 27544626, 21800161, 61029707, 2047604 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 62697248952638, 204681361388450, 631292143396476, + 338455783676468, 1213667448819585 +#else + 54563134, 934261, 64385954, 3049989, 66381436, 9406985, + 12720692, 5043384, 19500929, 18085054 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 301289933810280, 1259582250014073, 1422107436869536, + 796239922652654, 1953934009299142 +#else + 58370664, 4489569, 9688441, 18769238, 10184608, 21191052, + 29287918, 11864899, 42594502, 29115885 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1380971894829527, 790832306631236, 2067202295274102, + 1995808275510000, 1566530869037010 +#else + 54292951, 20578084, 45527620, 11784319, 41753206, 30803714, + 55390960, 29739860, 66750418, 23343128 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 463307831301544, 432984605774163, 1610641361907204, + 750899048855000, 1894842303421586 +#else + 45405608, 6903824, 27185491, 6451973, 37531140, 24000426, + 51492312, 11189267, 40279186, 28235350 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 748439484463711, 1033211726465151, 1396005112841647, + 1611506220286469, 1972177495910992 +#else + 26966623, 11152617, 32442495, 15396054, 14353839, 20802097, + 63980037, 24013313, 51636816, 29387734 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1601611775252272, 1720807796594148, 1132070835939856, + 1260455018889551, 2147779492816911 +#else + 15636272, 23865875, 24204772, 25642034, 616976, 16869170, + 27787599, 18782243, 28944399, 32004408 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 316559037616741, 2177824224946892, 1459442586438991, + 1461528397712656, 751590696113597 +#else + 16568933, 4717097, 55552716, 32452109, 15682895, 21747389, + 16354576, 21778470, 7689661, 11199574 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1850748884277385, 1200145853858453, 1068094770532492, + 672251375690438, 1586055907191707 +#else + 30464137, 27578307, 55329429, 17883566, 23220364, 15915852, + 7512774, 10017326, 49359771, 23634074 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 934282339813791, 1846903124198670, 1172395437954843, + 1007037127761661, 1830588347719256 +#else + 50071967, 13921891, 10945806, 27521001, 27105051, 17470053, + 38182653, 15006022, 3284568, 27277892 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1694390458783935, 1735906047636159, 705069562067493, + 648033061693059, 696214010414170 +#else + 23599295, 25248385, 55915199, 25867015, 13236773, 10506355, + 7464579, 9656445, 13059162, 10374397 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1121406372216585, 192876649532226, 190294192191717, + 1994165897297032, 2245000007398739 +#else + 7798537, 16710257, 3033922, 2874086, 28997861, 2835604, + 32406664, 29715387, 66467155, 33453106 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 769950342298419, 132954430919746, 844085933195555, + 974092374476333, 726076285546016 +#else + 10861363, 11473154, 27284546, 1981175, 37044515, 12577860, + 32867885, 14515107, 51670560, 10819379 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 425251763115706, 608463272472562, 442562545713235, + 837766094556764, 374555092627893 +#else + 4708026, 6336745, 20377586, 9066809, 55836755, 6594695, + 41455196, 12483687, 54440373, 5581305 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1086255230780037, 274979815921559, 1960002765731872, + 929474102396301, 1190409889297339 +#else + 19563141, 16186464, 37722007, 4097518, 10237984, 29206317, + 28542349, 13850243, 43430843, 17738489 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1388594989461809, 316767091099457, 394298842192982, + 1230079486801005, 1440737038838979 +#else + 51736881, 20691677, 32573249, 4720197, 40672342, 5875510, + 47920237, 18329612, 57289923, 21468654 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 7380825640100, 146210432690483, 304903576448906, + 1198869323871120, 997689833219095 +#else + 58559652, 109982, 15149363, 2178705, 22900618, 4543417, 3044240, + 17864545, 1762327, 14866737 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1181317918772081, 114573476638901, 262805072233344, + 265712217171332, 294181933805782 +#else + 48909169, 17603008, 56635573, 1707277, 49922944, 3916100, + 38872452, 3959420, 27914454, 4383652 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 665000864555967, 2065379846933859, 370231110385876, + 350988370788628, 1233371373142985 +#else + 5153727, 9909285, 1723747, 30776558, 30523604, 5516873, + 19480852, 5230134, 43156425, 18378665 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2019367628972465, 676711900706637, 110710997811333, + 1108646842542025, 517791959672113 +#else + 36839857, 30090922, 7665485, 10083793, 28475525, 1649722, + 20654025, 16520125, 30598449, 7715701 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 965130719900578, 247011430587952, 526356006571389, + 91986625355052, 2157223321444601 +#else + 28881826, 14381568, 9657904, 3680757, 46927229, 7843315, + 35708204, 1370707, 29794553, 32145132 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2068619540119183, 1966274918058806, 957728544705549, + 729906502578991, 159834893065166 +#else + 14499471, 30824833, 33917750, 29299779, 28494861, 14271267, + 30290735, 10876454, 33954766, 2381725 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2073601412052185, 31021124762708, 264500969797082, + 248034690651703, 1030252227928288 +#else + 59913433, 30899068, 52378708, 462250, 39384538, 3941371, + 60872247, 3696004, 34808032, 15351954 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 551790716293402, 1989538725166328, 801169423371717, + 2052451893578887, 678432056995012 +#else + 27431194, 8222322, 16448760, 29646437, 48401861, 11938354, + 34147463, 30583916, 29551812, 10109425 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1368953770187805, 790347636712921, 437508475667162, + 2142576377050580, 1932081720066286 +#else + 53451805, 20399000, 35825113, 11777097, 21447386, 6519384, + 64730580, 31926875, 10092782, 28790261 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 953638594433374, 1092333936795051, 1419774766716690, + 805677984380077, 859228993502513 +#else + 27939166, 14210322, 4677035, 16277044, 44144402, 21156292, + 34600109, 12005537, 49298737, 12803509 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1200766035879111, 20142053207432, 1465634435977050, + 1645256912097844, 295121984874596 +#else + 17228999, 17892808, 65875336, 300139, 65883994, 21839654, + 30364212, 24516238, 18016356, 4397660 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1735718747031557, 1248237894295956, 1204753118328107, + 976066523550493, 65943769534592 +#else + 56150021, 25864224, 4776340, 18600194, 27850027, 17952220, + 40489757, 14544524, 49631360, 982638 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1060098822528990, 1586825862073490, 212301317240126, + 1975302711403555, 666724059764335 +#else + 29253598, 15796703, 64244882, 23645547, 10057022, 3163536, + 7332899, 29434304, 46061167, 9934962 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1091990273418756, 1572899409348578, 80968014455247, + 306009358661350, 1520450739132526 +#else + 5793284, 16271923, 42977250, 23438027, 29188559, 1206517, + 52360934, 4559894, 36984942, 22656481 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1480517209436112, 1511153322193952, 1244343858991172, + 304788150493241, 369136856496443 +#else + 39464912, 22061425, 16282656, 22517939, 28414020, 18542168, + 24191033, 4541697, 53770555, 5500567 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2151330273626164, 762045184746182, 1688074332551515, + 823046109005759, 907602769079491 +#else + 12650548, 32057319, 9052870, 11355358, 49428827, 25154267, + 49678271, 12264342, 10874051, 13524335 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2047386910586836, 168470092900250, 1552838872594810, + 340951180073789, 360819374702533 +#else + 25556948, 30508442, 714650, 2510400, 23394682, 23139102, + 33119037, 5080568, 44580805, 5376627 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1982622644432056, 2014393600336956, 128909208804214, + 1617792623929191, 105294281913815 +#else + 41020600, 29543379, 50095164, 30016803, 60382070, 1920896, + 44787559, 24106988, 4535767, 1569007 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 980234343912898, 1712256739246056, 588935272190264, + 204298813091998, 841798321043288 +#else + 64853442, 14606629, 45416424, 25514613, 28430648, 8775819, + 36614302, 3044289, 31848280, 12543772 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 197561292938973, 454817274782871, 1963754960082318, + 2113372252160468, 971377527342673 +#else + 45080285, 2943892, 35251351, 6777305, 13784462, 29262229, + 39731668, 31491700, 7718481, 14474653 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 164699448829328, 3127451757672, 1199504971548753, + 1766155447043652, 1899238924683527 +#else + 2385296, 2454213, 44477544, 46602, 62670929, 17874016, 656964, + 26317767, 24316167, 28300865 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 732262946680281, 1674412764227063, 2182456405662809, + 1350894754474250, 558458873295247 +#else + 13741529, 10911568, 33875447, 24950694, 46931033, 32521134, + 33040650, 20129900, 46379407, 8321685 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2103305098582922, 1960809151316468, 715134605001343, + 1454892949167181, 40827143824949 +#else + 21060490, 31341688, 15712756, 29218333, 1639039, 10656336, + 23845965, 21679594, 57124405, 608371 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1239289043050212, 1744654158124578, 758702410031698, + 1796762995074688, 1603056663766 +#else + 53436132, 18466845, 56219170, 25997372, 61071954, 11305546, + 1123968, 26773855, 27229398, 23887 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2232056027107988, 987343914584615, 2115594492994461, + 1819598072792159, 1119305654014850 +#else + 43864724, 33260226, 55364135, 14712570, 37643165, 31524814, + 12797023, 27114124, 65475458, 16678953 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 320153677847348, 939613871605645, 641883205761567, + 1930009789398224, 329165806634126 +#else + 37608244, 4770661, 51054477, 14001337, 7830047, 9564805, + 65600720, 28759386, 49939598, 4904952 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 980930490474130, 1242488692177893, 1251446316964684, + 1086618677993530, 1961430968465772 +#else + 24059538, 14617003, 19037157, 18514524, 19766092, 18648003, + 5169210, 16191880, 2128236, 29227599 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 276821765317453, 1536835591188030, 1305212741412361, + 61473904210175, 2051377036983058 +#else + 50127693, 4124965, 58568254, 22900634, 30336521, 19449185, + 37302527, 916032, 60226322, 30567899 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 833449923882501, 1750270368490475, 1123347002068295, + 185477424765687, 278090826653186 +#else + 44477957, 12419371, 59974635, 26081060, 50629959, 16739174, + 285431, 2763829, 15736322, 4143876 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 794524995833413, 1849907304548286, 53348672473145, + 1272368559505217, 1147304168324779 +#else + 2379333, 11839345, 62998462, 27565766, 11274297, 794957, 212801, + 18959769, 23527083, 17096164 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1504846112759364, 1203096289004681, 562139421471418, + 274333017451844, 1284344053775441 +#else + 33431108, 22423954, 49269897, 17927531, 8909498, 8376530, + 34483524, 4087880, 51919953, 19138217 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 483048732424432, 2116063063343382, 30120189902313, + 292451576741007, 1156379271702225 +#else + 1767664, 7197987, 53903638, 31531796, 54017513, 448825, 5799055, + 4357868, 62334673, 17231393 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 928372153029038, 2147692869914564, 1455665844462196, + 1986737809425946, 185207050258089 +#else + 6721966, 13833823, 43585476, 32003117, 26354292, 21691111, + 23365146, 29604700, 7390889, 2759800 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 137732961814206, 706670923917341, 1387038086865771, + 1965643813686352, 1384777115696347 +#else + 4409022, 2052381, 23373853, 10530217, 7676779, 20668478, + 21302352, 29290375, 1244379, 20634787 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 481144981981577, 2053319313589856, 2065402289827512, + 617954271490316, 1106602634668125 +#else + 62687625, 7169618, 4982368, 30596842, 30256824, 30776892, + 14086412, 9208236, 15886429, 16489664 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 696298019648792, 893299659040895, 1148636718636009, + 26734077349617, 2203955659340681 +#else + 1996056, 10375649, 14346367, 13311202, 60234729, 17116020, + 53415665, 398368, 36502409, 32841498 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 657390353372855, 998499966885562, 991893336905797, + 810470207106761, 343139804608786 +#else + 41801399, 9795879, 64331450, 14878808, 33577029, 14780362, + 13348553, 12076947, 36272402, 5113181 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 791736669492960, 934767652997115, 824656780392914, + 1759463253018643, 361530362383518 +#else + 49338080, 11797795, 31950843, 13929123, 41220562, 12288343, + 36767763, 26218045, 13847710, 5387222 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2022541353055597, 2094700262587466, 1551008075025686, + 242785517418164, 695985404963562 +#else + 48526701, 30138214, 17824842, 31213466, 22744342, 23111821, + 8763060, 3617786, 47508202, 10370990 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1287487199965223, 2215311941380308, 1552928390931986, + 1664859529680196, 1125004975265243 +#else + 20246567, 19185054, 22358228, 33010720, 18507282, 23140436, + 14554436, 24808340, 32232923, 16763880 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 677434665154918, 989582503122485, 1817429540898386, + 1052904935475344, 1143826298169798 +#else + 9648486, 10094563, 26416693, 14745928, 36734546, 27081810, + 11094160, 15689506, 3140038, 17044340 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 367266328308408, 318431188922404, 695629353755355, + 634085657580832, 24581612564426 +#else + 50948792, 5472694, 31895588, 4744994, 8823515, 10365685, + 39884064, 9448612, 38334410, 366294 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 773360688841258, 1815381330538070, 363773437667376, + 539629987070205, 783280434248437 +#else + 19153450, 11523972, 56012374, 27051289, 42461232, 5420646, + 28344573, 8041113, 719605, 11671788 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 180820816194166, 168937968377394, 748416242794470, + 1227281252254508, 1567587861004268 +#else + 8678006, 2694440, 60300850, 2517371, 4964326, 11152271, + 51675948, 18287915, 27000812, 23358879 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 478775558583645, 2062896624554807, 699391259285399, + 358099408427873, 1277310261461761 +#else + 51950941, 7134311, 8639287, 30739555, 59873175, 10421741, + 564065, 5336097, 6750977, 19033406 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1984740906540026, 1079164179400229, 1056021349262661, + 1659958556483663, 1088529069025527 +#else + 11836410, 29574944, 26297893, 16080799, 23455045, 15735944, + 1695823, 24735310, 8169719, 16220347 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 580736401511151, 1842931091388998, 1177201471228238, + 2075460256527244, 1301133425678027 +#else + 48993007, 8653646, 17578566, 27461813, 59083086, 17541668, + 55964556, 30926767, 61118155, 19388398 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1515728832059182, 1575261009617579, 1510246567196186, + 191078022609704, 116661716289141 +#else + 43800366, 22586119, 15213227, 23473218, 36255258, 22504427, + 27884328, 2847284, 2655861, 1738395 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1295295738269652, 1714742313707026, 545583042462581, + 2034411676262552, 1513248090013606 +#else + 39571412, 19301410, 41772562, 25551651, 57738101, 8129820, + 21651608, 30315096, 48021414, 22549153 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 230710545179830, 30821514358353, 760704303452229, + 390668103790604, 573437871383156 +#else + 1533110, 3437855, 23735889, 459276, 29970501, 11335377, + 26030092, 5821408, 10478196, 8544890 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1169380107545646, 263167233745614, 2022901299054448, + 819900753251120, 2023898464874585 +#else + 32173102, 17425121, 24896206, 3921497, 22579056, 30143578, + 19270448, 12217473, 17789017, 30158437 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2102254323485823, 1570832666216754, 34696906544624, + 1993213739807337, 70638552271463 +#else + 36555903, 31326030, 51530034, 23407230, 13243888, 517024, + 15479401, 29701199, 30460519, 1052596 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 894132856735058, 548675863558441, 845349339503395, + 1942269668326667, 1615682209874691 +#else + 55493970, 13323617, 32618793, 8175907, 51878691, 12596686, + 27491595, 28942073, 3179267, 24075541 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1287670217537834, 1222355136884920, 1846481788678694, + 1150426571265110, 1613523400722047 +#else + 31947050, 19187781, 62468280, 18214510, 51982886, 27514722, + 52352086, 17142691, 19072639, 24043372 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 793388516527298, 1315457083650035, 1972286999342417, + 1901825953052455, 338269477222410 +#else + 11685058, 11822410, 3158003, 19601838, 33402193, 29389366, + 5977895, 28339415, 473098, 5040608 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 550201530671806, 778605267108140, 2063911101902983, + 115500557286349, 2041641272971022 +#else + 46817982, 8198641, 39698732, 11602122, 1290375, 30754672, + 28326861, 1721092, 47550222, 30422825 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 717255318455100, 519313764361315, 2080406977303708, + 541981206705521, 774328150311600 +#else + 7881532, 10687937, 7578723, 7738378, 48157852, 31000479, + 21820785, 8076149, 39240368, 11538388 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 261715221532238, 1795354330069993, 1496878026850283, + 499739720521052, 389031152673770 +#else + 47173198, 3899860, 18283497, 26752864, 51380203, 22305220, + 8754524, 7446702, 61432810, 5797015 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1997217696294013, 1717306351628065, 1684313917746180, + 1644426076011410, 1857378133465451 +#else + 55813245, 29760862, 51326753, 25589858, 12708868, 25098233, + 2014098, 24503858, 64739691, 27677090 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1475434724792648, 76931896285979, 1116729029771667, + 2002544139318042, 725547833803938 +#else + 44636488, 21985690, 39426843, 1146374, 18956691, 16640559, + 1192730, 29840233, 15123618, 10811505 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2022306639183567, 726296063571875, 315345054448644, + 1058733329149221, 1448201136060677 +#else + 14352079, 30134717, 48166819, 10822654, 32750596, 4699007, + 67038501, 15776355, 38222085, 21579878 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1710065158525665, 1895094923036397, 123988286168546, + 1145519900776355, 1607510767693874 +#else + 38867681, 25481956, 62129901, 28239114, 29416930, 1847569, + 46454691, 17069576, 4714546, 23953777 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 561605375422540, 1071733543815037, 131496498800990, + 1946868434569999, 828138133964203 +#else + 15200332, 8368572, 19679101, 15970074, 35236190, 1959450, + 24611599, 29010600, 55362987, 12340219 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1548495173745801, 442310529226540, 998072547000384, + 553054358385281, 644824326376171 +#else + 12876937, 23074376, 33134380, 6590940, 60801088, 14872439, + 9613953, 8241152, 15370987, 9608631 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1445526537029440, 2225519789662536, 914628859347385, + 1064754194555068, 1660295614401091 +#else + 62965568, 21540023, 8446280, 33162829, 4407737, 13629032, + 59383996, 15866073, 38898243, 24740332 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1199690223111956, 24028135822341, 66638289244341, + 57626156285975, 565093967979607 +#else + 26660628, 17876777, 8393733, 358047, 59707573, 992987, 43204631, + 858696, 20571223, 8420556 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 876926774220824, 554618976488214, 1012056309841565, + 839961821554611, 1414499340307677 +#else + 14620696, 13067227, 51661590, 8264466, 14106269, 15080814, + 33531827, 12516406, 45534429, 21077682 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 703047626104145, 1266841406201770, 165556500219173, + 486991595001879, 1011325891650656 +#else + 236881, 10476226, 57258, 18877408, 6472997, 2466984, 17258519, + 7256740, 8791136, 15069930 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1622861044480487, 1156394801573634, 1869132565415504, + 327103985777730, 2095342781472284 +#else + 1276391, 24182514, 22949634, 17231625, 43615824, 27852245, + 14711874, 4874229, 36445724, 31223040 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 334886927423922, 489511099221528, 129160865966726, + 1720809113143481, 619700195649254 +#else + 5855666, 4990204, 53397016, 7294283, 59304582, 1924646, + 65685689, 25642053, 34039526, 9234252 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1646545795166119, 1758370782583567, 714746174550637, + 1472693650165135, 898994790308209 +#else + 20590503, 24535444, 31529743, 26201766, 64402029, 10650547, + 31559055, 21944845, 18979185, 13396066 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 333403773039279, 295772542452938, 1693106465353610, + 912330357530760, 471235657950362 +#else + 24474287, 4968103, 22267082, 4407354, 24063882, 25229252, + 48291976, 13594781, 33514650, 7021958 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1811196219982022, 1068969825533602, 289602974833439, + 1988956043611592, 863562343398367 +#else + 55541958, 26988926, 45743778, 15928891, 40950559, 4315420, + 41160136, 29637754, 45628383, 12868081 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 906282429780072, 2108672665779781, 432396390473936, + 150625823801893, 1708930497638539 +#else + 38473832, 13504660, 19988037, 31421671, 21078224, 6443208, + 45662757, 2244499, 54653067, 25465048 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 925664675702328, 21416848568684, 1831436641861340, + 601157008940113, 371818055044496 +#else + 36513336, 13793478, 61256044, 319135, 41385692, 27290532, + 33086545, 8957937, 51875216, 5540520 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1479786007267725, 1738881859066675, 68646196476567, + 2146507056100328, 1247662817535471 +#else + 55478669, 22050529, 58989363, 25911358, 2620055, 1022908, + 43398120, 31985447, 50980335, 18591624 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 52035296774456, 939969390708103, 312023458773250, + 59873523517659, 1231345905848899 +#else + 23152952, 775386, 27395463, 14006635, 57407746, 4649511, + 1689819, 892185, 55595587, 18348483 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 643355106415761, 290186807495774, 2013561737429023, + 319648069511546, 393736678496162 +#else + 9770129, 9586738, 26496094, 4324120, 1556511, 30004408, + 27453818, 4763127, 47929250, 5867133 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 129358342392716, 1932811617704777, 1176749390799681, + 398040349861790, 1170779668090425 +#else + 34343820, 1927589, 31726409, 28801137, 23962433, 17534932, + 27846558, 5931263, 37359161, 17445976 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2051980782668029, 121859921510665, 2048329875753063, + 1235229850149665, 519062146124755 +#else + 27461885, 30576896, 22380809, 1815854, 44075111, 30522493, + 7283489, 18406359, 47582163, 7734628 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1608170971973096, 415809060360428, 1350468408164766, + 2038620059057678, 1026904485989112 +#else + 59098600, 23963614, 55988460, 6196037, 29344158, 20123547, + 7585294, 30377806, 18549496, 15302069 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1837656083115103, 1510134048812070, 906263674192061, + 1821064197805734, 565375124676301 +#else + 34450527, 27383209, 59436070, 22502750, 6258877, 13504381, + 10458790, 27135971, 58236621, 8424745 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 578027192365650, 2034800251375322, 2128954087207123, + 478816193810521, 2196171989962750 +#else + 24687186, 8613276, 36441818, 30320886, 1863891, 31723888, + 19206233, 7134917, 55824382, 32725512 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1633188840273139, 852787172373708, 1548762607215796, + 1266275218902681, 1107218203325133 +#else + 11334899, 24336410, 8025292, 12707519, 17523892, 23078361, + 10243737, 18868971, 62042829, 16498836 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 462189358480054, 1784816734159228, 1611334301651368, + 1303938263943540, 707589560319424 +#else + 8911542, 6887158, 57524604, 26595841, 11145640, 24010752, + 17303924, 19430194, 6536640, 10543906 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1038829280972848, 38176604650029, 753193246598573, + 1136076426528122, 595709990562434 +#else + 38162480, 15479762, 49642029, 568875, 65611181, 11223453, + 64439674, 16928857, 39873154, 8876770 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1408451820859834, 2194984964010833, 2198361797561729, + 1061962440055713, 1645147963442934 +#else + 41365946, 20987567, 51458897, 32707824, 34082177, 32758143, + 33627041, 15824473, 66504438, 24514614 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 4701053362120, 1647641066302348, 1047553002242085, + 1923635013395977, 206970314902065 +#else + 10330056, 70051, 7957388, 24551765, 9764901, 15609756, 27698697, + 28664395, 1657393, 3084098 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1750479161778571, 1362553355169293, 1891721260220598, + 966109370862782, 1024913988299801 +#else + 10477963, 26084172, 12119565, 20303627, 29016246, 28188843, + 31280318, 14396151, 36875289, 15272408 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 212699049131723, 1117950018299775, 1873945661751056, + 1403802921984058, 130896082652698 +#else + 54820555, 3169462, 28813183, 16658753, 25116432, 27923966, + 41934906, 20918293, 42094106, 1950503 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 636808533673210, 1262201711667560, 390951380330599, + 1663420692697294, 561951321757406 +#else + 40928506, 9489186, 11053416, 18808271, 36055143, 5825629, + 58724558, 24786899, 15341278, 8373727 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 520731594438141, 1446301499955692, 273753264629267, + 1565101517999256, 1019411827004672 +#else + 28685821, 7759505, 52730348, 21551571, 35137043, 4079241, + 298136, 23321830, 64230656, 15190419 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 926527492029409, 1191853477411379, 734233225181171, + 184038887541270, 1790426146325343 +#else + 34175969, 13806335, 52771379, 17760000, 43104243, 10940927, + 8669718, 2742393, 41075551, 26679428 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1464651961852572, 1483737295721717, 1519450561335517, + 1161429831763785, 405914998179977 +#else + 65528476, 21825014, 41129205, 22109408, 49696989, 22641577, + 9291593, 17306653, 54954121, 6048604 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 996126634382301, 796204125879525, 127517800546509, + 344155944689303, 615279846169038 +#else + 36803549, 14843443, 1539301, 11864366, 20201677, 1900163, + 13934231, 5128323, 11213262, 9168384 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 738724080975276, 2188666632415296, 1961313708559162, + 1506545807547587, 1151301638969740 +#else + 40828332, 11007846, 19408960, 32613674, 48515898, 29225851, + 62020803, 22449281, 20470156, 17155731 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 622917337413835, 1218989177089035, 1284857712846592, + 970502061709359, 351025208117090 +#else + 43972811, 9282191, 14855179, 18164354, 59746048, 19145871, + 44324911, 14461607, 14042978, 5230683 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2067814584765580, 1677855129927492, 2086109782475197, + 235286517313238, 1416314046739645 +#else + 29969548, 30812838, 50396996, 25001989, 9175485, 31085458, + 21556950, 3506042, 61174973, 21104723 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 586844262630358, 307444381952195, 458399356043426, + 602068024507062, 1028548203415243 +#else + 63964118, 8744660, 19704003, 4581278, 46678178, 6830682, + 45824694, 8971512, 38569675, 15326562 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 678489922928203, 2016657584724032, 90977383049628, + 1026831907234582, 615271492942522 +#else + 47644235, 10110287, 49846336, 30050539, 43608476, 1355668, + 51585814, 15300987, 46594746, 9168259 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 301225714012278, 1094837270268560, 1202288391010439, + 644352775178361, 1647055902137983 +#else + 61755510, 4488612, 43305616, 16314346, 7780487, 17915493, + 38160505, 9601604, 33087103, 24543045 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1210746697896478, 1416608304244708, 686487477217856, + 1245131191434135, 1051238336855737 +#else + 47665694, 18041531, 46311396, 21109108, 37284416, 10229460, + 39664535, 18553900, 61111993, 15664671 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1135604073198207, 1683322080485474, 769147804376683, + 2086688130589414, 900445683120379 +#else + 23294591, 16921819, 44458082, 25083453, 27844203, 11461195, + 13099750, 31094076, 18151675, 13417686 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1971518477615628, 401909519527336, 448627091057375, + 1409486868273821, 1214789035034363 +#else + 42385932, 29377914, 35958184, 5988918, 40250079, 6685064, + 1661597, 21002991, 15271675, 18101767 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1364039144731711, 1897497433586190, 2203097701135459, + 145461396811251, 1349844460790699 +#else + 11433023, 20325767, 8239630, 28274915, 65123427, 32828713, + 48410099, 2167543, 60187563, 20114249 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1045230323257973, 818206601145807, 630513189076103, + 1672046528998132, 807204017562437 +#else + 35672693, 15575145, 30436815, 12192228, 44645511, 9395378, + 57191156, 24915434, 12215109, 12028277 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 439961968385997, 386362664488986, 1382706320807688, + 309894000125359, 2207801346498567 +#else + 14098381, 6555944, 23007258, 5757252, 51681032, 20603929, + 30123439, 4617780, 50208775, 32898803 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1229004686397588, 920643968530863, 123975893911178, + 681423993215777, 1400559197080973 +#else + 63082644, 18313596, 11893167, 13718664, 52299402, 1847384, + 51288865, 10154008, 23973261, 20869958 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2003766096898049, 170074059235165, 1141124258967971, + 1485419893480973, 1573762821028725 +#else + 40577025, 29858441, 65199965, 2534300, 35238307, 17004076, + 18341389, 22134481, 32013173, 23450893 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 729905708611432, 1270323270673202, 123353058984288, + 426460209632942, 2195574535456672 +#else + 41629544, 10876442, 55337778, 18929291, 54739296, 1838103, + 21911214, 6354752, 4425632, 32716610 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1271140255321235, 2044363183174497, 52125387634689, + 1445120246694705, 942541986339084 +#else + 56675475, 18941465, 22229857, 30463385, 53917697, 776728, + 49693489, 21533969, 4725004, 14044970 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1761608437466135, 583360847526804, 1586706389685493, + 2157056599579261, 1170692369685772 +#else + 19268631, 26250011, 1555348, 8692754, 45634805, 23643767, + 6347389, 32142648, 47586572, 17444675 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 871476219910823, 1878769545097794, 2241832391238412, + 548957640601001, 690047440233174 +#else + 42244775, 12986007, 56209986, 27995847, 55796492, 33405905, + 19541417, 8180106, 9282262, 10282508 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 297194732135507, 1366347803776820, 1301185512245601, + 561849853336294, 1533554921345731 +#else + 40903763, 4428546, 58447668, 20360168, 4098401, 19389175, + 15522534, 8372215, 5542595, 22851749 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 999628998628371, 1132836708493400, 2084741674517453, + 469343353015612, 678782988708035 +#else + 56546323, 14895632, 26814552, 16880582, 49628109, 31065071, + 64326972, 6993760, 49014979, 10114654 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2189427607417022, 699801937082607, 412764402319267, + 1478091893643349, 2244675696854460 +#else + 47001790, 32625013, 31422703, 10427861, 59998115, 6150668, + 38017109, 22025285, 25953724, 33448274 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1712292055966563, 204413590624874, 1405738637332841, + 408981300829763, 861082219276721 +#else + 62874467, 25515139, 57989738, 3045999, 2101609, 20947138, + 19390019, 6094296, 63793585, 12831124 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 508561155940631, 966928475686665, 2236717801150132, + 424543858577297, 2089272956986143 +#else + 51110167, 7578151, 5310217, 14408357, 33560244, 33329692, + 31575953, 6326196, 7381791, 31132593 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 221245220129925, 1156020201681217, 491145634799213, + 542422431960839, 828100817819207 +#else + 46206085, 3296810, 24736065, 17226043, 18374253, 7318640, + 6295303, 8082724, 51746375, 12339663 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 153756971240384, 1299874139923977, 393099165260502, + 1058234455773022, 996989038681183 +#else + 27724736, 2291157, 6088201, 19369634, 1792726, 5857634, + 13848414, 15768922, 25091167, 14856294 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 559086812798481, 573177704212711, 1629737083816402, + 1399819713462595, 1646954378266038 +#else + 48242193, 8331042, 24373479, 8541013, 66406866, 24284974, + 12927299, 20858939, 44926390, 24541532 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1887963056288059, 228507035730124, 1468368348640282, + 930557653420194, 613513962454686 +#else + 55685435, 28132841, 11632844, 3405020, 30536730, 21880393, + 39848098, 13866389, 30146206, 9142070 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1224529808187553, 1577022856702685, 2206946542980843, + 625883007765001, 279930793512158 +#else + 3924129, 18246916, 53291741, 23499471, 12291819, 32886066, + 39406089, 9326383, 58871006, 4171293 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1076287717051609, 1114455570543035, 187297059715481, + 250446884292121, 1885187512550540 +#else + 51186905, 16037936, 6713787, 16606682, 45496729, 2790943, + 26396185, 3731949, 345228, 28091483 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 902497362940219, 76749815795675, 1657927525633846, + 1420238379745202, 1340321636548352 +#else + 45781307, 13448258, 25284571, 1143661, 20614966, 24705045, + 2031538, 21163201, 50855680, 19972348 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1129576631190784, 1281994010027327, 996844254743018, + 257876363489249, 1150850742055018 +#else + 31016192, 16832003, 26371391, 19103199, 62081514, 14854136, + 17477601, 3842657, 28012650, 17149012 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 628740660038789, 1943038498527841, 467786347793886, + 1093341428303375, 235413859513003 +#else + 62033029, 9368965, 58546785, 28953529, 51858910, 6970559, + 57918991, 16292056, 58241707, 3507939 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 237425418909360, 469614029179605, 1512389769174935, + 1241726368345357, 441602891065214 +#else + 29439664, 3537914, 23333589, 6997794, 49553303, 22536363, + 51899661, 18503164, 57943934, 6580395 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1736417953058555, 726531315520508, 1833335034432527, + 1629442561574747, 624418919286085 +#else + 54923003, 25874643, 16438268, 10826160, 58412047, 27318820, + 17860443, 24280586, 65013061, 9304566 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1960754663920689, 497040957888962, 1909832851283095, + 1271432136996826, 2219780368020940 +#else + 20714545, 29217521, 29088194, 7406487, 11426967, 28458727, + 14792666, 18945815, 5289420, 33077305 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1537037379417136, 1358865369268262, 2130838645654099, + 828733687040705, 1999987652890901 +#else + 50443312, 22903641, 60948518, 20248671, 9192019, 31751970, + 17271489, 12349094, 26939669, 29802138 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 629042105241814, 1098854999137608, 887281544569320, + 1423102019874777, 7911258951561 +#else + 54218966, 9373457, 31595848, 16374215, 21471720, 13221525, + 39825369, 21205872, 63410057, 117886 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1811562332665373, 1501882019007673, 2213763501088999, + 359573079719636, 36370565049116 +#else + 22263325, 26994382, 3984569, 22379786, 51994855, 32987646, + 28311252, 5358056, 43789084, 541963 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 218907117361280, 1209298913016966, 1944312619096112, + 1130690631451061, 1342327389191701 +#else + 16259200, 3261970, 2309254, 18019958, 50223152, 28972515, + 24134069, 16848603, 53771797, 20002236 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1369976867854704, 1396479602419169, 1765656654398856, + 2203659200586299, 998327836117241 +#else + 9378160, 20414246, 44262881, 20809167, 28198280, 26310334, + 64709179, 32837080, 690425, 14876244 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2230701885562825, 1348173180338974, 2172856128624598, + 1426538746123771, 444193481326151 +#else + 24977353, 33240048, 58884894, 20089345, 28432342, 32378079, + 54040059, 21257083, 44727879, 6618998 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 784210426627951, 918204562375674, 1284546780452985, + 1324534636134684, 1872449409642708 +#else + 65570671, 11685645, 12944378, 13682314, 42719353, 19141238, + 8044828, 19737104, 32239828, 27901670 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 319638829540294, 596282656808406, 2037902696412608, + 1557219121643918, 341938082688094 +#else + 48505798, 4762989, 66182614, 8885303, 38696384, 30367116, + 9781646, 23204373, 32779358, 5095274 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1901860206695915, 2004489122065736, 1625847061568236, + 973529743399879, 2075287685312905 +#else + 34100715, 28339925, 34843976, 29869215, 9460460, 24227009, + 42507207, 14506723, 21639561, 30924196 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1371853944110545, 1042332820512553, 1949855697918254, + 1791195775521505, 37487364849293 +#else + 50707921, 20442216, 25239337, 15531969, 3987758, 29055114, + 65819361, 26690896, 17874573, 558605 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 687200189577855, 1082536651125675, 644224940871546, + 340923196057951, 343581346747396 +#else + 53508735, 10240080, 9171883, 16131053, 46239610, 9599699, + 33499487, 5080151, 2085892, 5119761 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2082717129583892, 27829425539422, 145655066671970, + 1690527209845512, 1865260509673478 +#else + 44903700, 31034903, 50727262, 414690, 42089314, 2170429, + 30634760, 25190818, 35108870, 27794547 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1059729620568824, 2163709103470266, 1440302280256872, + 1769143160546397, 869830310425069 +#else + 60263160, 15791201, 8550074, 32241778, 29928808, 21462176, + 27534429, 26362287, 44757485, 12961481 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1609516219779025, 777277757338817, 2101121130363987, + 550762194946473, 1905542338659364 +#else + 42616785, 23983660, 10368193, 11582341, 43711571, 31309144, + 16533929, 8206996, 36914212, 28394793 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2024821921041576, 426948675450149, 595133284085473, + 471860860885970, 600321679413000 +#else + 55987368, 30172197, 2307365, 6362031, 66973409, 8868176, + 50273234, 7031274, 7589640, 8945490 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 598474602406721, 1468128276358244, 1191923149557635, + 1501376424093216, 1281662691293476 +#else + 34956097, 8917966, 6661220, 21876816, 65916803, 17761038, + 7251488, 22372252, 24099108, 19098262 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1721138489890707, 1264336102277790, 433064545421287, + 1359988423149466, 1561871293409447 +#else + 5019539, 25646962, 4244126, 18840076, 40175591, 6453164, + 47990682, 20265406, 60876967, 23273695 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 719520245587143, 393380711632345, 132350400863381, + 1543271270810729, 1819543295798660 +#else + 10853575, 10721687, 26480089, 5861829, 44113045, 1972174, + 65242217, 22996533, 63745412, 27113307 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 396397949784152, 1811354474471839, 1362679985304303, + 2117033964846756, 498041172552279 +#else + 50106456, 5906789, 221599, 26991285, 7828207, 20305514, + 24362660, 31546264, 53242455, 7421391 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1812471844975748, 1856491995543149, 126579494584102, + 1036244859282620, 1975108050082550 +#else + 8139908, 27007935, 32257645, 27663886, 30375718, 1886181, + 45933756, 15441251, 28826358, 29431403 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 650623932407995, 1137551288410575, 2125223403615539, + 1725658013221271, 2134892965117796 +#else + 6267067, 9695052, 7709135, 16950835, 34239795, 31668296, + 14795159, 25714308, 13746020, 31812384 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 522584000310195, 1241762481390450, 1743702789495384, + 2227404127826575, 1686746002148897 +#else + 28584883, 7787108, 60375922, 18503702, 22846040, 25983196, + 63926927, 33190907, 4771361, 25134474 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 427904865186312, 1703211129693455, 1585368107547509, + 1436984488744336, 761188534613978 +#else + 24949256, 6376279, 39642383, 25379823, 48462709, 23623825, + 33543568, 21412737, 3569626, 11342593 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 318101947455002, 248138407995851, 1481904195303927, + 309278454311197, 1258516760217879 +#else + 26514970, 4740088, 27912651, 3697550, 19331575, 22082093, + 6809885, 4608608, 7325975, 18753361 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1275068538599310, 513726919533379, 349926553492294, + 688428871968420, 1702400196000666 +#else + 55490446, 19000001, 42787651, 7655127, 65739590, 5214311, + 39708324, 10258389, 49462170, 25367739 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1061864036265233, 961611260325381, 321859632700838, + 1045600629959517, 1985130202504038 +#else + 11431185, 15823007, 26570245, 14329124, 18029990, 4796082, + 35662685, 15580663, 9280358, 29580745 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1558816436882417, 1962896332636523, 1337709822062152, + 1501413830776938, 294436165831932 +#else + 66948081, 23228174, 44253547, 29249434, 46247496, 19933429, + 34297962, 22372809, 51563772, 4387440 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 818359826554971, 1862173000996177, 626821592884859, + 573655738872376, 1749691246745455 +#else + 46309467, 12194511, 3937617, 27748540, 39954043, 9340369, + 42594872, 8548136, 20617071, 26072431 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1988022651432119, 1082111498586040, 1834020786104821, + 1454826876423687, 692929915223122 +#else + 66170039, 29623845, 58394552, 16124717, 24603125, 27329039, + 53333511, 21678609, 24345682, 10325460 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2146513703733331, 584788900394667, 464965657279958, + 2183973639356127, 238371159456790 +#else + 47253587, 31985546, 44906155, 8714033, 14007766, 6928528, + 16318175, 32543743, 4766742, 3552007 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1129007025494441, 2197883144413266, 265142755578169, + 971864464758890, 1983715884903702 +#else + 45357481, 16823515, 1351762, 32751011, 63099193, 3950934, + 3217514, 14481909, 10988822, 29559670 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1291366624493075, 381456718189114, 1711482489312444, + 1815233647702022, 892279782992467 +#else + 15564307, 19242862, 3101242, 5684148, 30446780, 25503076, + 12677126, 27049089, 58813011, 13296004 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 444548969917454, 1452286453853356, 2113731441506810, + 645188273895859, 810317625309512 +#else + 57666574, 6624295, 36809900, 21640754, 62437882, 31497052, + 31521203, 9614054, 37108040, 12074673 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2242724082797924, 1373354730327868, 1006520110883049, + 2147330369940688, 1151816104883620 +#else + 4771172, 33419193, 14290748, 20464580, 27992297, 14998318, + 65694928, 31997715, 29832612, 17163397 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1745720200383796, 1911723143175317, 2056329390702074, + 355227174309849, 879232794371100 +#else + 7064884, 26013258, 47946901, 28486894, 48217594, 30641695, + 25825241, 5293297, 39986204, 13101589 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 163723479936298, 115424889803150, 1156016391581227, + 1894942220753364, 1970549419986329 +#else + 64810282, 2439669, 59642254, 1719964, 39841323, 17225986, + 32512468, 28236839, 36752793, 29363474 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 681981452362484, 267208874112496, 1374683991933094, + 638600984916117, 646178654558546 +#else + 37102324, 10162315, 33928688, 3981722, 50626726, 20484387, + 14413973, 9515896, 19568978, 9628812 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 13378654854251, 106237307029567, 1944412051589651, + 1841976767925457, 230702819835573 +#else + 33053803, 199357, 15894591, 1583059, 27380243, 28973997, + 49269969, 27447592, 60817077, 3437739 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 260683893467075, 854060306077237, 913639551980112, + 4704576840123, 280254810808712 +#else + 48129987, 3884492, 19469877, 12726490, 15913552, 13614290, + 44147131, 70103, 7463304, 4176122 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 715374893080287, 1173334812210491, 1806524662079626, + 1894596008000979, 398905715033393 +#else + 39984863, 10659916, 11482427, 17484051, 12771466, 26919315, + 34389459, 28231680, 24216881, 5944158 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 500026409727661, 1596431288195371, 1420380351989370, + 985211561521489, 392444930785633 +#else + 8894125, 7450974, 64444715, 23788679, 39028346, 21165316, + 19345745, 14680796, 11632993, 5847885 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2096421546958141, 1922523000950363, 789831022876840, + 427295144688779, 320923973161730 +#else + 26942781, 31239115, 9129563, 28647825, 26024104, 11769399, + 55590027, 6367193, 57381634, 4782139 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1927770723575450, 1485792977512719, 1850996108474547, + 551696031508956, 2126047405475647 +#else + 19916442, 28726022, 44198159, 22140040, 25606323, 27581991, + 33253852, 8220911, 6358847, 31680575 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2112099158080148, 742570803909715, 6484558077432, + 1951119898618916, 93090382703416 +#else + 801428, 31472730, 16569427, 11065167, 29875704, 96627, 7908388, + 29073952, 53570360, 1387154 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 383905201636970, 859946997631870, 855623867637644, + 1017125780577795, 794250831877809 +#else + 19646058, 5720633, 55692158, 12814208, 11607948, 12749789, + 14147075, 15156355, 45242033, 11835259 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 77571826285752, 999304298101753, 487841111777762, + 1038031143212339, 339066367948762 +#else + 19299512, 1155910, 28703737, 14890794, 2925026, 7269399, + 26121523, 15467869, 40548314, 5052482 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 674994775520533, 266035846330789, 826951213393478, + 1405007746162285, 1781791018620876 +#else + 64091413, 10058205, 1980837, 3964243, 22160966, 12322533, + 60677741, 20936246, 12228556, 26550755 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1001412661522686, 348196197067298, 1666614366723946, + 888424995032760, 580747687801357 +#else + 32944382, 14922211, 44263970, 5188527, 21913450, 24834489, + 4001464, 13238564, 60994061, 8653814 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1939560076207777, 1409892634407635, 552574736069277, + 383854338280405, 190706709864139 +#else + 22865569, 28901697, 27603667, 21009037, 14348957, 8234005, + 24808405, 5719875, 28483275, 2841751 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2177087163428741, 1439255351721944, 1208070840382793, + 2230616362004769, 1396886392021913 +#else + 50687877, 32441126, 66781144, 21446575, 21886281, 18001658, + 65220897, 33238773, 19932057, 20815229 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 676962063230039, 1880275537148808, 2046721011602706, + 888463247083003, 1318301552024067 +#else + 55452759, 10087520, 58243976, 28018288, 47830290, 30498519, + 3999227, 13239134, 62331395, 19644223 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1466980508178206, 617045217998949, 652303580573628, + 757303753529064, 207583137376902 +#else + 1382174, 21859713, 17266789, 9194690, 53784508, 9720080, + 20403944, 11284705, 53095046, 3093229 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1511056752906902, 105403126891277, 493434892772846, + 1091943425335976, 1802717338077427 +#else + 16650902, 22516500, 66044685, 1570628, 58779118, 7352752, + 66806440, 16271224, 43059443, 26862581 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1853982405405128, 1878664056251147, 1528011020803992, + 1019626468153565, 1128438412189035 +#else + 45197768, 27626490, 62497547, 27994275, 35364760, 22769138, + 24123613, 15193618, 45456747, 16815042 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1963939888391106, 293456433791664, 697897559513649, + 985882796904380, 796244541237972 +#else + 57172930, 29264984, 41829040, 4372841, 2087473, 10399484, + 31870908, 14690798, 17361620, 11864968 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 416770998629779, 389655552427054, 1314476859406756, + 1749382513022778, 1161905598739491 +#else + 55801235, 6210371, 13206574, 5806320, 38091172, 19587231, + 54777658, 26067830, 41530403, 17313742 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1428358296490651, 1027115282420478, 304840698058337, + 441410174026628, 1819358356278573 +#else + 14668443, 21284197, 26039038, 15305210, 25515617, 4542480, + 10453892, 6577524, 9145645, 27110552 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 204943430200135, 1554861433819175, 216426658514651, + 264149070665950, 2047097371738319 +#else + 5974855, 3053895, 57675815, 23169240, 35243739, 3225008, + 59136222, 3936127, 61456591, 30504127 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1934415182909034, 1393285083565062, 516409331772960, + 1157690734993892, 121039666594268 +#else + 30625386, 28825032, 41552902, 20761565, 46624288, 7695098, + 17097188, 17250936, 39109084, 1803631 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 662035583584445, 286736105093098, 1131773000510616, + 818494214211439, 472943792054479 +#else + 63555773, 9865098, 61880298, 4272700, 61435032, 16864731, + 14911343, 12196514, 45703375, 7047411 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 665784778135882, 1893179629898606, 808313193813106, + 276797254706413, 1563426179676396 +#else + 20093258, 9920966, 55970670, 28210574, 13161586, 12044805, + 34252013, 4124600, 34765036, 23296865 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 945205108984232, 526277562959295, 1324180513733566, + 1666970227868664, 153547609289173 +#else + 46320040, 14084653, 53577151, 7842146, 19119038, 19731827, + 4752376, 24839792, 45429205, 2288037 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2031433403516252, 203996615228162, 170487168837083, + 981513604791390, 843573964916831 +#else + 40289628, 30270716, 29965058, 3039786, 52635099, 2540456, + 29457502, 14625692, 42289247, 12570231 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1476570093962618, 838514669399805, 1857930577281364, + 2017007352225784, 317085545220047 +#else + 66045306, 22002608, 16920317, 12494842, 1278292, 27685323, + 45948920, 30055751, 55134159, 4724942 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1461557121912842, 1600674043318359, 2157134900399597, + 1670641601940616, 127765583803283 +#else + 17960970, 21778898, 62967895, 23851901, 58232301, 32143814, + 54201480, 24894499, 37532563, 1903855 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1293543509393474, 2143624609202546, 1058361566797508, + 214097127393994, 946888515472729 +#else + 23134274, 19275300, 56426866, 31942495, 20684484, 15770816, + 54119114, 3190295, 26955097, 14109738 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 357067959932916, 1290876214345711, 521245575443703, + 1494975468601005, 800942377643885 +#else + 15308788, 5320727, 36995055, 19235554, 22902007, 7767164, + 29425325, 22276870, 31960941, 11934971 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 566116659100033, 820247422481740, 994464017954148, + 327157611686365, 92591318111744 +#else + 39713153, 8435795, 4109644, 12222639, 42480996, 14818668, + 20638173, 4875028, 10491392, 1379718 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 617256647603209, 1652107761099439, 1857213046645471, + 1085597175214970, 817432759830522 +#else + 53949449, 9197840, 3875503, 24618324, 65725151, 27674630, + 33518458, 16176658, 21432314, 12180697 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 771808161440705, 1323510426395069, 680497615846440, + 851580615547985, 1320806384849017 +#else + 55321537, 11500837, 13787581, 19721842, 44678184, 10140204, + 1465425, 12689540, 56807545, 19681548 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1219260086131915, 647169006596815, 79601124759706, + 2161724213426748, 404861897060198 +#else + 5414091, 18168391, 46101199, 9643569, 12834970, 1186149, + 64485948, 32212200, 26128230, 6032912 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1327968293887866, 1335500852943256, 1401587164534264, + 558137311952440, 1551360549268902 +#else + 40771450, 19788269, 32496024, 19900513, 17847800, 20885276, + 3604024, 8316894, 41233830, 23117073 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 417621685193956, 1429953819744454, 396157358457099, + 1940470778873255, 214000046234152 +#else + 3296484, 6223048, 24680646, 21307972, 44056843, 5903204, + 58246567, 28915267, 12376616, 3188849 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1268047918491973, 2172375426948536, 1533916099229249, + 1761293575457130, 1590622667026765 +#else + 29190469, 18895386, 27549112, 32370916, 3520065, 22857131, + 32049514, 26245319, 50999629, 23702124 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1627072914981959, 2211603081280073, 1912369601616504, + 1191770436221309, 2187309757525860 +#else + 52364359, 24245275, 735817, 32955454, 46701176, 28496527, + 25246077, 17758763, 18640740, 32593455 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1149147819689533, 378692712667677, 828475842424202, + 2218619146419342, 70688125792186 +#else + 60180029, 17123636, 10361373, 5642961, 4910474, 12345252, + 35470478, 33060001, 10530746, 1053335 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1299739417079761, 1438616663452759, 1536729078504412, + 2053896748919838, 1008421032591246 +#else + 37842897, 19367626, 53570647, 21437058, 47651804, 22899047, + 35646494, 30605446, 24018830, 15026644 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2040723824657366, 399555637875075, 632543375452995, + 872649937008051, 1235394727030233 +#else + 44516310, 30409154, 64819587, 5953842, 53668675, 9425630, + 25310643, 13003497, 64794073, 18408815 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2211311599327900, 2139787259888175, 938706616835350, + 12609661139114, 2081897930719789 +#else + 39688860, 32951110, 59064879, 31885314, 41016598, 13987818, + 39811242, 187898, 43942445, 31022696 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1324994503390450, 336982330582631, 1183998925654177, + 1091654665913274, 48727673971319 +#else + 45364466, 19743956, 1844839, 5021428, 56674465, 17642958, + 9716666, 16266922, 62038647, 726098 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1845522914617879, 1222198248335542, 150841072760134, + 1927029069940982, 1189913404498011 +#else + 29370903, 27500434, 7334070, 18212173, 9385286, 2247707, + 53446902, 28714970, 30007387, 17731091 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1079559557592645, 2215338383666441, 1903569501302605, + 49033973033940, 305703433934152 +#else + 66172485, 16086690, 23751945, 33011114, 65941325, 28365395, + 9137108, 730663, 9835848, 4555336 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 94653405416909, 1386121349852999, 1062130477891762, + 36553947479274, 833669648948846 +#else + 43732429, 1410445, 44855111, 20654817, 30867634, 15826977, + 17693930, 544696, 55123566, 12422645 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1432015813136298, 440364795295369, 1395647062821501, + 1976874522764578, 934452372723352 +#else + 31117226, 21338698, 53606025, 6561946, 57231997, 20796761, + 61990178, 29457725, 29120152, 13924425 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1296625309219774, 2068273464883862, 1858621048097805, + 1492281814208508, 2235868981918946 +#else + 49707966, 19321222, 19675798, 30819676, 56101901, 27695611, + 57724924, 22236731, 7240930, 33317044 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1490330266465570, 1858795661361448, 1436241134969763, + 294573218899647, 1208140011028933 +#else + 35747106, 22207651, 52101416, 27698213, 44655523, 21401660, + 1222335, 4389483, 3293637, 18002689 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1282462923712748, 741885683986255, 2027754642827561, + 518989529541027, 1826610009555945 +#else + 50424044, 19110186, 11038543, 11054958, 53307689, 30215898, + 42789283, 7733546, 12796905, 27218610 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1525827120027511, 723686461809551, 1597702369236987, + 244802101764964, 1502833890372311 +#else + 58349431, 22736595, 41689999, 10783768, 36493307, 23807620, + 38855524, 3647835, 3222231, 22393970 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 113622036244513, 1233740067745854, 674109952278496, + 2114345180342965, 166764512856263 +#else + 18606113, 1693100, 41660478, 18384159, 4112352, 10045021, + 23603893, 31506198, 59558087, 2484984 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2041668749310338, 2184405322203901, 1633400637611036, + 2110682505536899, 2048144390084644 +#else + 9255298, 30423235, 54952701, 32550175, 13098012, 24339566, + 16377219, 31451620, 47306788, 30519729 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 503058759232932, 760293024620937, 2027152777219493, + 666858468148475, 1539184379870952 +#else + 44379556, 7496159, 61366665, 11329248, 19991973, 30206930, + 35390715, 9936965, 37011176, 22935634 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1916168475367211, 915626432541343, 883217071712575, + 363427871374304, 1976029821251593 +#else + 21878571, 28553135, 4338335, 13643897, 64071999, 13160959, + 19708896, 5415497, 59748361, 29445138 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 678039535434506, 570587290189340, 1605302676614120, + 2147762562875701, 1706063797091704 +#else + 27736842, 10103576, 12500508, 8502413, 63695848, 23920873, + 10436917, 32004156, 43449720, 25422331 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1439489648586438, 2194580753290951, 832380563557396, + 561521973970522, 584497280718389 +#else + 19492550, 21450067, 37426887, 32701801, 63900692, 12403436, + 30066266, 8367329, 13243957, 8709688 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 187989455492609, 681223515948275, 1933493571072456, + 1872921007304880, 488162364135671 +#else + 12015105, 2801261, 28198131, 10151021, 24818120, 28811299, + 55914672, 27908697, 5150967, 7274186 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1413466089534451, 410844090765630, 1397263346404072, + 408227143123410, 1594561803147811 +#else + 2831347, 21062286, 1478974, 6122054, 23825128, 20820846, + 31097298, 6083058, 31021603, 23760822 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2102170800973153, 719462588665004, 1479649438510153, + 1097529543970028, 1302363283777685 +#else + 64578913, 31324785, 445612, 10720828, 53259337, 22048494, + 43601132, 16354464, 15067285, 19406725 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 942065717847195, 1069313679352961, 2007341951411051, + 70973416446291, 1419433790163706 +#else + 7840923, 14037873, 33744001, 15934015, 66380651, 29911725, + 21403987, 1057586, 47729402, 21151211 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1146565545556377, 1661971299445212, 406681704748893, + 564452436406089, 1109109865829139 +#else + 915865, 17085158, 15608284, 24765302, 42751837, 6060029, + 49737545, 8410996, 59888403, 16527024 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2214421081775077, 1165671861210569, 1890453018796184, + 3556249878661, 442116172656317 +#else + 32922597, 32997445, 20336073, 17369864, 10903704, 28169945, + 16957573, 52992, 23834301, 6588044 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 753830546620811, 1666955059895019, 1530775289309243, + 1119987029104146, 2164156153857580 +#else + 32752011, 11232950, 3381995, 24839566, 22652987, 22810329, + 17159698, 16689107, 46794284, 32248439 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 615171919212796, 1523849404854568, 854560460547503, + 2067097370290715, 1765325848586042 +#else + 62419196, 9166775, 41398568, 22707125, 11576751, 12733943, + 7924251, 30802151, 1976122, 26305405 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1094538949313667, 1796592198908825, 870221004284388, + 2025558921863561, 1699010892802384 +#else + 21251203, 16309901, 64125849, 26771309, 30810596, 12967303, + 156041, 30183180, 12331344, 25317235 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1951351290725195, 1916457206844795, 198025184438026, + 1909076887557595, 1938542290318919 +#else + 8651595, 29077400, 51023227, 28557437, 13002506, 2950805, + 29054427, 28447462, 10008135, 28886531 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1014323197538413, 869150639940606, 1756009942696599, + 1334952557375672, 1544945379082874 +#else + 31486061, 15114593, 52847614, 12951353, 14369431, 26166587, + 16347320, 19892343, 8684154, 23021480 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 764055910920305, 1603590757375439, 146805246592357, + 1843313433854297, 954279890114939 +#else + 19443825, 11385320, 24468943, 23895364, 43189605, 2187568, + 40845657, 27467510, 31316347, 14219878 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 80113526615750, 764536758732259, 1055139345100233, + 469252651759390, 617897512431515 +#else + 38514374, 1193784, 32245219, 11392485, 31092169, 15722801, + 27146014, 6992409, 29126555, 9207390 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 74497112547268, 740094153192149, 1745254631717581, + 727713886503130, 1283034364416928 +#else + 32382916, 1110093, 18477781, 11028262, 39697101, 26006320, + 62128346, 10843781, 59151264, 19118701 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 525892105991110, 1723776830270342, 1476444848991936, + 573789489857760, 133864092632978 +#else + 2814918, 7836403, 27519878, 25686276, 46214848, 22000742, + 45614304, 8550129, 28346258, 1994730 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 542611720192581, 1986812262899321, 1162535242465837, + 481498966143464, 544600533583622 +#else + 47530565, 8085544, 53108345, 29605809, 2785837, 17323125, + 47591912, 7174893, 22628102, 8115180 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 64123227344372, 1239927720647794, 1360722983445904, + 222610813654661, 62429487187991 +#else + 36703732, 955510, 55975026, 18476362, 34661776, 20276352, + 41457285, 3317159, 57165847, 930271 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1793193323953132, 91096687857833, 70945970938921, + 2158587638946380, 1537042406482111 +#else + 51805164, 26720662, 28856489, 1357446, 23421993, 1057177, + 24091212, 32165462, 44343487, 22903716 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1895854577604609, 1394895708949416, 1728548428495944, + 1140864900240149, 563645333603061 +#else + 44357633, 28250434, 54201256, 20785565, 51297352, 25757378, + 52269845, 17000211, 65241845, 8398969 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 141358280486863, 91435889572504, 1087208572552643, + 1829599652522921, 1193307020643647 +#else + 35139535, 2106402, 62372504, 1362500, 12813763, 16200670, + 22981545, 27263159, 18009407, 17781660 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1611230858525381, 950720175540785, 499589887488610, + 2001656988495019, 88977313255908 +#else + 49887941, 24009210, 39324209, 14166834, 29815394, 7444469, + 29551787, 29827013, 19288548, 1325865 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1189080501479658, 2184348804772597, 1040818725742319, + 2018318290311834, 1712060030915354 +#else + 15100138, 17718680, 43184885, 32549333, 40658671, 15509407, + 12376730, 30075286, 33166106, 25511682 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 873966876953756, 1090638350350440, 1708559325189137, + 672344594801910, 1320437969700239 +#else + 20909212, 13023121, 57899112, 16251777, 61330449, 25459517, + 12412150, 10018715, 2213263, 19676059 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1508590048271766, 1131769479776094, 101550868699323, + 428297785557897, 561791648661744 +#else + 32529814, 22479743, 30361438, 16864679, 57972923, 1513225, + 22922121, 6382134, 61341936, 8371347 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 756417570499462, 237882279232602, 2136263418594016, + 1701968045454886, 703713185137472 +#else + 9923462, 11271500, 12616794, 3544722, 37110496, 31832805, + 12891686, 25361300, 40665920, 10486143 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1781187809325462, 1697624151492346, 1381393690939988, + 175194132284669, 1483054666415238 +#else + 44511638, 26541766, 8587002, 25296571, 4084308, 20584370, + 361725, 2610596, 43187334, 22099236 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2175517777364616, 708781536456029, 955668231122942, + 1967557500069555, 2021208005604118 +#else + 5408392, 32417741, 62139741, 10561667, 24145918, 14240566, + 31319731, 29318891, 19985174, 30118346 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1115135966606887, 224217372950782, 915967306279222, + 593866251291540, 561747094208006 +#else + 53114407, 16616820, 14549246, 3341099, 32155958, 13648976, + 49531796, 8849296, 65030, 8370684 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1443163092879439, 391875531646162, 2180847134654632, + 464538543018753, 1594098196837178 +#else + 58787919, 21504805, 31204562, 5839400, 46481576, 32497154, + 47665921, 6922163, 12743482, 23753914 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 850858855888869, 319436476624586, 327807784938441, + 740785849558761, 17128415486016 +#else + 64747493, 12678784, 28815050, 4759974, 43215817, 4884716, + 23783145, 11038569, 18800704, 255233 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2132756334090067, 536247820155645, 48907151276867, + 608473197600695, 1261689545022784 +#else + 61839187, 31780545, 13957885, 7990715, 23132995, 728773, + 13393847, 9066957, 19258688, 18800639 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1525176236978354, 974205476721062, 293436255662638, + 148269621098039, 137961998433963 +#else + 64172210, 22726896, 56676774, 14516792, 63468078, 4372540, + 35173943, 2209389, 65584811, 2055793 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1121075518299410, 2071745529082111, 1265567917414828, + 1648196578317805, 496232102750820 +#else + 580882, 16705327, 5468415, 30871414, 36182444, 18858431, + 59905517, 24560042, 37087844, 7394434 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 122321229299801, 1022922077493685, 2001275453369484, + 2017441881607947, 993205880778002 +#else + 23838809, 1822728, 51370421, 15242726, 8318092, 29821328, + 45436683, 30062226, 62287122, 14799920 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 654925550560074, 1168810995576858, 575655959430926, + 905758704861388, 496774564663534 +#else + 13345610, 9759151, 3371034, 17416641, 16353038, 8577942, + 31129804, 13496856, 58052846, 7402517 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1954109525779738, 2117022646152485, 338102630417180, + 1194140505732026, 107881734943492 +#else + 2286874, 29118501, 47066405, 31546095, 53412636, 5038121, + 11006906, 17794080, 8205060, 1607563 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1714785840001267, 2036500018681589, 1876380234251966, + 2056717182974196, 1645855254384642 +#else + 14414067, 25552300, 3331829, 30346215, 22249150, 27960244, + 18364660, 30647474, 30019586, 24525154 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 106431476499341, 62482972120563, 1513446655109411, + 807258751769522, 538491469114 +#else + 39420813, 1585952, 56333811, 931068, 37988643, 22552112, + 52698034, 12029092, 9944378, 8024 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2002850762893643, 1243624520538135, 1486040410574605, + 2184752338181213, 378495998083531 +#else + 4368715, 29844802, 29874199, 18531449, 46878477, 22143727, + 50994269, 32555346, 58966475, 5640029 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 922510868424903, 1089502620807680, 402544072617374, + 1131446598479839, 1290278588136533 +#else + 10299591, 13746483, 11661824, 16234854, 7630238, 5998374, + 9809887, 16859868, 15219797, 19226649 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1867998812076769, 715425053580701, 39968586461416, + 2173068014586163, 653822651801304 +#else + 27425505, 27835351, 3055005, 10660664, 23458024, 595578, + 51710259, 32381236, 48766680, 9742716 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 162892278589453, 182585796682149, 75093073137630, + 497037941226502, 133871727117371 +#else + 6744077, 2427284, 26042789, 2720740, 66260958, 1118973, + 32324614, 7406442, 12420155, 1994844 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1914596576579670, 1608999621851578, 1987629837704609, + 1519655314857977, 1819193753409464 +#else + 14012502, 28529712, 48724410, 23975962, 40623521, 29617992, + 54075385, 22644628, 24319928, 27108099 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1949315551096831, 1069003344994464, 1939165033499916, + 1548227205730856, 1933767655861407 +#else + 16412671, 29047065, 10772640, 15929391, 50040076, 28895810, + 10555944, 23070383, 37006495, 28815383 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1730519386931635, 1393284965610134, 1597143735726030, + 416032382447158, 1429665248828629 +#else + 22397363, 25786748, 57815702, 20761563, 17166286, 23799296, + 39775798, 6199365, 21880021, 21303672 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 360275475604565, 547835731063078, 215360904187529, + 596646739879007, 332709650425085 +#else + 62825557, 5368522, 35991846, 8163388, 36785801, 3209127, + 16557151, 8890729, 8840445, 4957760 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 47602113726801, 1522314509708010, 437706261372925, + 814035330438027, 335930650933545 +#else + 51661137, 709326, 60189418, 22684253, 37330941, 6522331, + 45388683, 12130071, 52312361, 5005756 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1291597595523886, 1058020588994081, 402837842324045, + 1363323695882781, 2105763393033193 +#else + 64994094, 19246303, 23019041, 15765735, 41839181, 6002751, + 10183197, 20315106, 50713577, 31378319 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 109521982566564, 1715257748585139, 1112231216891516, + 2046641005101484, 134249157157013 +#else + 48083108, 1632004, 13466291, 25559332, 43468412, 16573536, + 35094956, 30497327, 22208661, 2000468 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2156991030936798, 2227544497153325, 1869050094431622, + 754875860479115, 1754242344267058 +#else + 3065054, 32141671, 41510189, 33192999, 49425798, 27851016, + 58944651, 11248526, 63417650, 26140247 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1846089562873800, 98894784984326, 1412430299204844, + 171351226625762, 1100604760929008 +#else + 10379208, 27508878, 8877318, 1473647, 37817580, 21046851, + 16690914, 2553332, 63976176, 16400288 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 84172382130492, 499710970700046, 425749630620778, + 1762872794206857, 612842602127960 +#else + 15716668, 1254266, 48636174, 7446273, 58659946, 6344163, + 45011593, 26268851, 26894936, 9132066 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 868309334532756, 1703010512741873, 1952690008738057, + 4325269926064, 2071083554962116 +#else + 24158868, 12938817, 11085297, 25376834, 39045385, 29097348, + 36532400, 64451, 60291780, 30861549 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 523094549451158, 401938899487815, 1407690589076010, + 2022387426254453, 158660516411257 +#else + 13488534, 7794716, 22236231, 5989356, 25426474, 20976224, + 2350709, 30135921, 62420857, 2364225 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 612867287630009, 448212612103814, 571629077419196, + 1466796750919376, 1728478129663858 +#else + 16335033, 9132434, 25640582, 6678888, 1725628, 8517937, + 55301840, 21856974, 15445874, 25756331 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1723848973783452, 2208822520534681, 1718748322776940, + 1974268454121942, 1194212502258141 +#else + 29004188, 25687351, 28661401, 32914020, 54314860, 25611345, + 31863254, 29418892, 66830813, 17795152 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1254114807944608, 977770684047110, 2010756238954993, + 1783628927194099, 1525962994408256 +#else + 60986784, 18687766, 38493958, 14569918, 56250865, 29962602, + 10343411, 26578142, 37280576, 22738620 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 232464058235826, 1948628555342434, 1835348780427694, + 1031609499437291, 64472106918373 +#else + 27081650, 3463984, 14099042, 29036828, 1616302, 27348828, + 29542635, 15372179, 17293797, 960709 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 767338676040683, 754089548318405, 1523192045639075, + 435746025122062, 512692508440385 +#else + 20263915, 11434237, 61343429, 11236809, 13505955, 22697330, + 50997518, 6493121, 47724353, 7639713 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1255955808701983, 1700487367990941, 1166401238800299, + 1175121994891534, 1190934801395380 +#else + 64278047, 18715199, 25403037, 25339236, 58791851, 17380732, + 18006286, 17510682, 29994676, 17746311 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 349144008168292, 1337012557669162, 1475912332999108, + 1321618454900458, 47611291904320 +#else + 9769828, 5202651, 42951466, 19923039, 39057860, 21992807, + 42495722, 19693649, 35924288, 709463 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 877519947135419, 2172838026132651, 272304391224129, + 1655143327559984, 886229406429814 +#else + 12286395, 13076066, 45333675, 32377809, 42105665, 4057651, + 35090736, 24663557, 16102006, 13205847 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 375806028254706, 214463229793940, 572906353144089, + 572168269875638, 697556386112979 +#else + 13733362, 5599946, 10557076, 3195751, 61550873, 8536969, + 41568694, 8525971, 10151379, 10394400 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1168827102357844, 823864273033637, 2071538752104697, + 788062026895924, 599578340743362 +#else + 4024660, 17416881, 22436261, 12276534, 58009849, 30868332, + 19698228, 11743039, 33806530, 8934413 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1948116082078088, 2054898304487796, 2204939184983900, + 210526805152138, 786593586607626 +#else + 51229064, 29029191, 58528116, 30620370, 14634844, 32856154, + 57659786, 3137093, 55571978, 11721157 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1915320147894736, 156481169009469, 655050471180417, + 592917090415421, 2165897438660879 +#else + 17555920, 28540494, 8268605, 2331751, 44370049, 9761012, + 9319229, 8835153, 57903375, 32274386 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1726336468579724, 1119932070398949, 1929199510967666, + 33918788322959, 1836837863503150 +#else + 66647436, 25724417, 20614117, 16688288, 59594098, 28747312, + 22300303, 505429, 6108462, 27371017 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 829996854845988, 217061778005138, 1686565909803640, + 1346948817219846, 1723823550730181 +#else + 62038564, 12367916, 36445330, 3234472, 32617080, 25131790, + 29880582, 20071101, 40210373, 25686972 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 384301494966394, 687038900403062, 2211195391021739, + 254684538421383, 1245698430589680 +#else + 35133562, 5726538, 26934134, 10237677, 63935147, 32949378, + 24199303, 3795095, 7592688, 18562353 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1247567493562688, 1978182094455847, 183871474792955, + 806570235643435, 288461518067916 +#else + 21594432, 18590204, 17466407, 29477210, 32537083, 2739898, + 6407723, 12018833, 38852812, 4298411 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1449077384734201, 38285445457996, 2136537659177832, + 2146493000841573, 725161151123125 +#else + 46458361, 21592935, 39872588, 570497, 3767144, 31836892, + 13891941, 31985238, 13717173, 10805743 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1201928866368855, 800415690605445, 1703146756828343, + 997278587541744, 1858284414104014 +#else + 52432215, 17910135, 15287173, 11927123, 24177847, 25378864, + 66312432, 14860608, 40169934, 27690595 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 356468809648877, 782373916933152, 1718002439402870, + 1392222252219254, 663171266061951 +#else + 12962541, 5311799, 57048096, 11658279, 18855286, 25600231, + 13286262, 20745728, 62727807, 9882021 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 759628738230460, 1012693474275852, 353780233086498, + 246080061387552, 2030378857679162 +#else + 18512060, 11319350, 46985740, 15090308, 18818594, 5271736, + 44380960, 3666878, 43141434, 30255002 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2040672435071076, 888593182036908, 1298443657189359, + 1804780278521327, 354070726137060 +#else + 60319844, 30408388, 16192428, 13241070, 15898607, 19348318, + 57023983, 26893321, 64705764, 5276064 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1894938527423184, 1463213041477277, 474410505497651, + 247294963033299, 877975941029128 +#else + 30169808, 28236784, 26306205, 21803573, 27814963, 7069267, + 7152851, 3684982, 1449224, 13082861 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 207937160991127, 12966911039119, 820997788283092, + 1010440472205286, 1701372890140810 +#else + 10342807, 3098505, 2119311, 193222, 25702612, 12233820, + 23697382, 15056736, 46092426, 25352431 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 218882774543183, 533427444716285, 1233243976733245, + 435054256891319, 1509568989549904 +#else + 33958735, 3261607, 22745853, 7948688, 19370557, 18376767, + 40936887, 6482813, 56808784, 22494330 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1888838535711826, 1052177758340622, 1213553803324135, + 169182009127332, 463374268115872 +#else + 32869458, 28145887, 25609742, 15678670, 56421095, 18083360, + 26112420, 2521008, 44444576, 6904814 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 299137589460312, 1594371588983567, 868058494039073, + 257771590636681, 1805012993142921 +#else + 29506904, 4457497, 3377935, 23757988, 36598817, 12935079, + 1561737, 3841096, 38105225, 26896789 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1806842755664364, 2098896946025095, 1356630998422878, + 1458279806348064, 347755825962072 +#else + 10340844, 26924055, 48452231, 31276001, 12621150, 20215377, + 30878496, 21730062, 41524312, 5181965 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1402334161391744, 1560083671046299, 1008585416617747, + 1147797150908892, 1420416683642459 +#else + 25940096, 20896407, 17324187, 23247058, 58437395, 15029093, + 24396252, 17103510, 64786011, 21165857 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 665506704253369, 273770475169863, 799236974202630, + 848328990077558, 1811448782807931 +#else + 45343161, 9916822, 65808455, 4079497, 66080518, 11909558, + 1782390, 12641087, 20603771, 26992690 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1468412523962641, 771866649897997, 1931766110147832, + 799561180078482, 524837559150077 +#else + 48226577, 21881051, 24849421, 11501709, 13161720, 28785558, + 1925522, 11914390, 4662781, 7820689 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2223212657821850, 630416247363666, 2144451165500328, + 816911130947791, 1024351058410032 +#else + 12241050, 33128450, 8132690, 9393934, 32846760, 31954812, + 29749455, 12172924, 16136752, 15264020 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1266603897524861, 156378408858100, 1275649024228779, + 447738405888420, 253186462063095 +#else + 56758909, 18873868, 58896884, 2330219, 49446315, 19008651, + 10658212, 6671822, 19012087, 3772772 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2022215964509735, 136144366993649, 1800716593296582, + 1193970603800203, 871675847064218 +#else + 3753511, 30133366, 10617073, 2028709, 14841030, 26832768, + 28718731, 17791548, 20527770, 12988982 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1862751661970328, 851596246739884, 1519315554814041, + 1542798466547449, 1417975335901520 +#else + 52286360, 27757162, 63400876, 12689772, 66209881, 22639565, + 42925817, 22989488, 3299664, 21129479 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1228168094547481, 334133883362894, 587567568420081, + 433612590281181, 603390400373205 +#else + 50331161, 18301130, 57466446, 4978982, 3308785, 8755439, + 6943197, 6461331, 41525717, 8991217 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 121893973206505, 1843345804916664, 1703118377384911, + 497810164760654, 101150811654673 +#else + 49882601, 1816361, 65435576, 27467992, 31783887, 25378441, + 34160718, 7417949, 36866577, 1507264 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 458346255946468, 290909935619344, 1452768413850679, + 550922875254215, 1537286854336538 +#else + 29692644, 6829891, 56610064, 4334895, 20945975, 21647936, + 38221255, 8209390, 14606362, 22907359 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 584322311184395, 380661238802118, 114839394528060, + 655082270500073, 2111856026034852 +#else + 63627275, 8707080, 32188102, 5672294, 22096700, 1711240, + 34088169, 9761486, 4170404, 31469107 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 996965581008991, 2148998626477022, 1012273164934654, + 1073876063914522, 1688031788934939 +#else + 55521375, 14855944, 62981086, 32022574, 40459774, 15084045, + 22186522, 16002000, 52832027, 25153633 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 923487018849600, 2085106799623355, 528082801620136, + 1606206360876188, 735907091712524 +#else + 62297408, 13761028, 35404987, 31070512, 63796392, 7869046, + 59995292, 23934339, 13240844, 10965870 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1697697887804317, 1335343703828273, 831288615207040, + 949416685250051, 288760277392022 +#else + 59366301, 25297669, 52340529, 19898171, 43876480, 12387165, + 4498947, 14147411, 29514390, 4302863 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1419122478109648, 1325574567803701, 602393874111094, + 2107893372601700, 1314159682671307 +#else + 53695440, 21146572, 20757301, 19752600, 14785142, 8976368, + 62047588, 31410058, 17846987, 19582505 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2201150872731804, 2180241023425241, 97663456423163, + 1633405770247824, 848945042443986 +#else + 64864412, 32799703, 62511833, 32488122, 60861691, 1455298, + 45461136, 24339642, 61886162, 12650266 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1173339555550611, 818605084277583, 47521504364289, + 924108720564965, 735423405754506 +#else + 57202067, 17484121, 21134159, 12198166, 40044289, 708125, + 387813, 13770293, 47974538, 10958662 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 830104860549448, 1886653193241086, 1600929509383773, + 1475051275443631, 286679780900937 +#else + 22470984, 12369526, 23446014, 28113323, 45588061, 23855708, + 55336367, 21979976, 42025033, 4271861 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1577111294832995, 1030899169768747, 144900916293530, + 1964672592979567, 568390100955250 +#else + 41939299, 23500789, 47199531, 15361594, 61124506, 2159191, + 75375, 29275903, 34582642, 8469672 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 278388655910247, 487143369099838, 927762205508727, + 181017540174210, 1616886700741287 +#else + 15854951, 4148314, 58214974, 7259001, 11666551, 13824734, + 36577666, 2697371, 24154791, 24093489 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1191033906638969, 940823957346562, 1606870843663445, + 861684761499847, 658674867251089 +#else + 15446137, 17747788, 29759746, 14019369, 30811221, 23944241, + 35526855, 12840103, 24913809, 9815020 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1875032594195546, 1427106132796197, 724736390962158, + 901860512044740, 635268497268760 +#else + 62399578, 27940162, 35267365, 21265538, 52665326, 10799413, + 58005188, 13438768, 18735128, 9466238 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 622869792298357, 1903919278950367, 1922588621661629, + 1520574711600434, 1087100760174640 +#else + 11933045, 9281483, 5081055, 28370608, 64480701, 28648802, + 59381042, 22658328, 44380208, 16199063 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 25465949416618, 1693639527318811, 1526153382657203, + 125943137857169, 145276964043999 +#else + 14576810, 379472, 40322331, 25237195, 37682355, 22741457, + 67006097, 1876698, 30801119, 2164795 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 214739857969358, 920212862967915, 1939901550972269, + 1211862791775221, 85097515720120 +#else + 15995086, 3199873, 13672555, 13712240, 47730029, 28906785, + 54027253, 18058162, 53616056, 1268051 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2006245852772938, 734762734836159, 254642929763427, + 1406213292755966, 239303749517686 +#else + 56818250, 29895392, 63822271, 10948817, 23037027, 3794475, + 63638526, 20954210, 50053494, 3565903 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1619678837192149, 1919424032779215, 1357391272956794, + 1525634040073113, 1310226789796241 +#else + 29210069, 24135095, 61189071, 28601646, 10834810, 20226706, + 50596761, 22733718, 39946641, 19523900 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1040763709762123, 1704449869235352, 605263070456329, + 1998838089036355, 1312142911487502 +#else + 53946955, 15508587, 16663704, 25398282, 38758921, 9019122, + 37925443, 29785008, 2244110, 19552453 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1996723311435669, 1844342766567060, 985455700466044, + 1165924681400960, 311508689870129 +#else + 61955989, 29753495, 57802388, 27482848, 16243068, 14684434, + 41435776, 17373631, 13491505, 4641841 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 43173156290518, 2202883069785309, 1137787467085917, + 1733636061944606, 1394992037553852 +#else + 10813398, 643330, 47920349, 32825515, 30292061, 16954354, + 27548446, 25833190, 14476988, 20787001 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 670078326344559, 555655025059356, 471959386282438, + 2141455487356409, 849015953823125 +#else + 10292079, 9984945, 6481436, 8279905, 59857350, 7032742, + 27282937, 31910173, 39196053, 12651323 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2197214573372804, 794254097241315, 1030190060513737, + 267632515541902, 2040478049202624 +#else + 35923332, 32741048, 22271203, 11835308, 10201545, 15351028, + 17099662, 3988035, 21721536, 30405492 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1812516004670529, 1609256702920783, 1706897079364493, + 258549904773295, 996051247540686 +#else + 10202177, 27008593, 35735631, 23979793, 34958221, 25434748, + 54202543, 3852693, 13216206, 14842320 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1540374301420584, 1764656898914615, 1810104162020396, + 923808779163088, 664390074196579 +#else + 51293224, 22953365, 60569911, 26295436, 60124204, 26972653, + 35608016, 13765823, 39674467, 9900183 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1323460699404750, 1262690757880991, 871777133477900, + 1060078894988977, 1712236889662886 +#else + 14465486, 19721101, 34974879, 18815558, 39665676, 12990491, + 33046193, 15796406, 60056998, 25514317 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1696163952057966, 1391710137550823, 608793846867416, + 1034391509472039, 1780770894075012 +#else + 30924398, 25274812, 6359015, 20738097, 16508376, 9071735, + 41620263, 15413634, 9524356, 26535554 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1367603834210841, 2131988646583224, 890353773628144, + 1908908219165595, 270836895252891 +#else + 12274201, 20378885, 32627640, 31769106, 6736624, 13267305, + 5237659, 28444949, 15663515, 4035784 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 597536315471731, 40375058742586, 1942256403956049, + 1185484645495932, 312666282024145 +#else + 64157555, 8903984, 17349946, 601635, 50676049, 28941875, + 53376124, 17665097, 44850385, 4659090 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1919411405316294, 1234508526402192, 1066863051997083, + 1008444703737597, 1348810787701552 +#else + 50192582, 28601458, 36715152, 18395610, 20774811, 15897498, + 5736189, 15026997, 64930608, 20098846 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2102881477513865, 1570274565945361, 1573617900503708, + 18662635732583, 2232324307922098 +#else + 58249865, 31335375, 28571665, 23398914, 66634396, 23448733, + 63307367, 278094, 23440562, 33264224 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1853931367696942, 8107973870707, 350214504129299, + 775206934582587, 1752317649166792 +#else + 10226222, 27625730, 15139955, 120818, 52241171, 5218602, + 32937275, 11551483, 50536904, 26111567 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1417148368003523, 721357181628282, 505725498207811, + 373232277872983, 261634707184480 +#else + 17932739, 21117156, 43069306, 10749059, 11316803, 7535897, + 22503767, 5561594, 63462240, 3898660 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2186733281493267, 2250694917008620, 1014829812957440, + 479998161452389, 83566193876474 +#else + 7749907, 32584865, 50769132, 33537967, 42090752, 15122142, + 65535333, 7152529, 21831162, 1245233 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1268116367301224, 560157088142809, 802626839600444, + 2210189936605713, 1129993785579988 +#else + 26958440, 18896406, 4314585, 8346991, 61431100, 11960071, + 34519569, 32934396, 36706772, 16838219 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 615183387352312, 917611676109240, 878893615973325, + 978940963313282, 938686890583575 +#else + 54942968, 9166946, 33491384, 13673479, 29787085, 13096535, + 6280834, 14587357, 44770839, 13987524 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 522024729211672, 1045059315315808, 1892245413707790, + 1907891107684253, 2059998109500714 +#else + 42758936, 7778774, 21116000, 15572597, 62275598, 28196653, + 62807965, 28429792, 59639082, 30696363 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1799679152208884, 912132775900387, 25967768040979, + 432130448590461, 274568990261996 +#else + 9681908, 26817309, 35157219, 13591837, 60225043, 386949, + 31622781, 6439245, 52527852, 4091396 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 98698809797682, 2144627600856209, 1907959298569602, + 811491302610148, 1262481774981493 +#else + 58682418, 1470726, 38999185, 31957441, 3978626, 28430809, + 47486180, 12092162, 29077877, 18812444 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1791451399743152, 1713538728337276, 118349997257490, + 1882306388849954, 158235232210248 +#else + 5269168, 26694706, 53878652, 25533716, 25932562, 1763552, + 61502754, 28048550, 47091016, 2357888 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1217809823321928, 2173947284933160, 1986927836272325, + 1388114931125539, 12686131160169 +#else + 32264008, 18146780, 61721128, 32394338, 65017541, 29607531, + 23104803, 20684524, 5727337, 189038 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1650875518872272, 1136263858253897, 1732115601395988, + 734312880662190, 1252904681142109 +#else + 14609104, 24599962, 61108297, 16931650, 52531476, 25810533, + 40363694, 10942114, 41219933, 18669734 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 372986456113865, 525430915458171, 2116279931702135, + 501422713587815, 1907002872974925 +#else + 20513481, 5557931, 51504251, 7829530, 26413943, 31535028, + 45729895, 7471780, 13913677, 28416557 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 803147181835288, 868941437997146, 316299302989663, + 943495589630550, 571224287904572 +#else + 41534488, 11967825, 29233242, 12948236, 60354399, 4713226, + 58167894, 14059179, 12878652, 8511905 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 227742695588364, 1776969298667369, 628602552821802, + 457210915378118, 2041906378111140 +#else + 41452044, 3393630, 64153449, 26478905, 64858154, 9366907, + 36885446, 6812973, 5568676, 30426776 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 815000523470260, 913085688728307, 1052060118271173, + 1345536665214223, 541623413135555 +#else + 11630004, 12144454, 2116339, 13606037, 27378885, 15676917, + 49700111, 20050058, 52713667, 8070817 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1580216071604333, 1877997504342444, 857147161260913, + 703522726778478, 2182763974211603 +#else + 27117677, 23547054, 35826092, 27984343, 1127281, 12772488, + 37262958, 10483305, 55556115, 32525717 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1870080310923419, 71988220958492, 1783225432016732, + 615915287105016, 1035570475990230 +#else + 10637467, 27866368, 5674780, 1072708, 40765276, 26572129, + 65424888, 9177852, 39615702, 15431202 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 730987750830150, 857613889540280, 1083813157271766, + 1002817255970169, 1719228484436074 +#else + 20525126, 10892566, 54366392, 12779442, 37615830, 16150074, + 38868345, 14943141, 52052074, 25618500 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 377616581647602, 1581980403078513, 804044118130621, + 2034382823044191, 643844048472185 +#else + 37084402, 5626925, 66557297, 23573344, 753597, 11981191, + 25244767, 30314666, 63752313, 9594023 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 176957326463017, 1573744060478586, 528642225008045, + 1816109618372371, 1515140189765006 +#else + 43356201, 2636869, 61944954, 23450613, 585133, 7877383, + 11345683, 27062142, 13352334, 22577348 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1888911448245718, 1387110895611080, 1924503794066429, + 1731539523700949, 2230378382645454 +#else + 65177046, 28146973, 3304648, 20669563, 17015805, 28677341, + 37325013, 25801949, 53893326, 33235227 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 443392177002051, 233793396845137, 2199506622312416, + 1011858706515937, 974676837063129 +#else + 20239939, 6607058, 6203985, 3483793, 48721888, 32775202, + 46385121, 15077869, 44358105, 14523816 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1846351103143623, 1949984838808427, 671247021915253, + 1946756846184401, 1929296930380217 +#else + 27406023, 27512775, 27423595, 29057038, 4996213, 10002360, + 38266833, 29008937, 36936121, 28748764 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 849646212452002, 1410198775302919, 73767886183695, + 1641663456615812, 762256272452411 +#else + 11374242, 12660715, 17861383, 21013599, 10935567, 1099227, + 53222788, 24462691, 39381819, 11358503 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 692017667358279, 723305578826727, 1638042139863265, + 748219305990306, 334589200523901 +#else + 54378055, 10311866, 1510375, 10778093, 64989409, 24408729, + 32676002, 11149336, 40985213, 4985767 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 22893968530686, 2235758574399251, 1661465835630252, + 925707319443452, 1203475116966621 +#else + 48012542, 341146, 60911379, 33315398, 15756972, 24757770, + 66125820, 13794113, 47694557, 17933176 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 801299035785166, 1733292596726131, 1664508947088596, + 467749120991922, 1647498584535623 +#else + 6490062, 11940286, 25495923, 25828072, 8668372, 24803116, + 3367602, 6970005, 65417799, 24549641 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 903105258014366, 427141894933047, 561187017169777, + 1884330244401954, 1914145708422219 +#else + 1656478, 13457317, 15370807, 6364910, 13605745, 8362338, + 47934242, 28078708, 50312267, 28522993 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1344191060517578, 1960935031767890, 1518838929955259, + 1781502350597190, 1564784025565682 +#else + 44835530, 20030007, 67044178, 29220208, 48503227, 22632463, + 46537798, 26546453, 67009010, 23317098 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 673723351748086, 1979969272514923, 1175287312495508, + 1187589090978666, 1881897672213940 +#else + 17747446, 10039260, 19368299, 29503841, 46478228, 17513145, + 31992682, 17696456, 37848500, 28042460 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1917185587363432, 1098342571752737, 5935801044414, + 2000527662351839, 1538640296181569 +#else + 31932008, 28568291, 47496481, 16366579, 22023614, 88450, + 11371999, 29810185, 4882241, 22927527 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2495540013192, 678856913479236, 224998292422872, + 219635787698590, 1972465269000940 +#else + 29796488, 37186, 19818052, 10115756, 55279832, 3352735, + 18551198, 3272828, 61917932, 29392022 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 271413961212179, 1353052061471651, 344711291283483, + 2014925838520662, 2006221033113941 +#else + 12501267, 4044383, 58495907, 20162046, 34678811, 5136598, + 47878486, 30024734, 330069, 29895023 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 194583029968109, 514316781467765, 829677956235672, + 1676415686873082, 810104584395840 +#else + 6384877, 2899513, 17807477, 7663917, 64749976, 12363164, + 25366522, 24980540, 66837568, 12071498 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1980510813313589, 1948645276483975, 152063780665900, + 129968026417582, 256984195613935 +#else + 58743349, 29511910, 25133447, 29037077, 60897836, 2265926, + 34339246, 1936674, 61949167, 3829362 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1860190562533102, 1936576191345085, 461100292705964, + 1811043097042830, 957486749306835 +#else + 28425966, 27718999, 66531773, 28857233, 52891308, 6870929, + 7921550, 26986645, 26333139, 14267664 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 796664815624365, 1543160838872951, 1500897791837765, + 1667315977988401, 599303877030711 +#else + 56041645, 11871230, 27385719, 22994888, 62522949, 22365119, + 10004785, 24844944, 45347639, 8930323 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1151480509533204, 2136010406720455, 738796060240027, + 319298003765044, 1150614464349587 +#else + 45911060, 17158396, 25654215, 31829035, 12282011, 11008919, + 1541940, 4757911, 40617363, 17145491 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1731069268103150, 735642447616087, 1364750481334268, + 417232839982871, 927108269127661 +#else + 13537262, 25794942, 46504023, 10961926, 61186044, 20336366, + 53952279, 6217253, 51165165, 13814989 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1017222050227968, 1987716148359, 2234319589635701, + 621282683093392, 2132553131763026 +#else + 49686272, 15157789, 18705543, 29619, 24409717, 33293956, + 27361680, 9257833, 65152338, 31777517 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1567828528453324, 1017807205202360, 565295260895298, + 829541698429100, 307243822276582 +#else + 42063564, 23362465, 15366584, 15166509, 54003778, 8423555, + 37937324, 12361134, 48422886, 4578289 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 249079270936248, 1501514259790706, 947909724204848, + 944551802437487, 552658763982480 +#else + 24579768, 3711570, 1342322, 22374306, 40103728, 14124955, + 44564335, 14074918, 21964432, 8235257 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2089966982947227, 1854140343916181, 2151980759220007, + 2139781292261749, 158070445864917 +#else + 60580251, 31142934, 9442965, 27628844, 12025639, 32067012, + 64127349, 31885225, 13006805, 2355433 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1338766321464554, 1906702607371284, 1519569445519894, + 115384726262267, 1393058953390992 +#else + 50803946, 19949172, 60476436, 28412082, 16974358, 22643349, + 27202043, 1719366, 1141648, 20758196 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1364621558265400, 1512388234908357, 1926731583198686, + 2041482526432505, 920401122333774 +#else + 54244920, 20334445, 58790597, 22536340, 60298718, 28710537, + 13475065, 30420460, 32674894, 13715045 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1884844597333588, 601480070269079, 620203503079537, + 1079527400117915, 1202076693132015 +#else + 11423316, 28086373, 32344215, 8962751, 24989809, 9241752, + 53843611, 16086211, 38367983, 17912338 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 840922919763324, 727955812569642, 1303406629750194, + 522898432152867, 294161410441865 +#else + 65699196, 12530727, 60740138, 10847386, 19531186, 19422272, + 55399715, 7791793, 39862921, 4383346 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 353760790835310, 1598361541848743, 1122905698202299, + 1922533590158905, 419107700666580 +#else + 38137966, 5271446, 65842855, 23817442, 54653627, 16732598, + 62246457, 28647982, 27193556, 6245191 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 359856369838236, 180914355488683, 861726472646627, + 218807937262986, 575626773232501 +#else + 51914908, 5362277, 65324971, 2695833, 4960227, 12840725, + 23061898, 3260492, 22510453, 8577507 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 755467689082474, 909202735047934, 730078068932500, + 936309075711518, 2007798262842972 +#else + 54476394, 11257345, 34415870, 13548176, 66387860, 10879010, + 31168030, 13952092, 37537372, 29918525 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1609384177904073, 362745185608627, 1335318541768201, + 800965770436248, 547877979267412 +#else + 3877321, 23981693, 32416691, 5405324, 56104457, 19897796, + 3759768, 11935320, 5611860, 8164018 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 984339177776787, 815727786505884, 1645154585713747, + 1659074964378553, 1686601651984156 +#else + 50833043, 14667796, 15906460, 12155291, 44997715, 24514713, + 32003001, 24722143, 5773084, 25132323 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1697863093781930, 599794399429786, 1104556219769607, + 830560774794755, 12812858601017 +#else + 43320746, 25300131, 1950874, 8937633, 18686727, 16459170, + 66203139, 12376319, 31632953, 190926 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1168737550514982, 897832437380552, 463140296333799, + 302564600022547, 2008360505135501 +#else + 42515238, 17415546, 58684872, 13378745, 14162407, 6901328, + 58820115, 4508563, 41767309, 29926903 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1856930662813910, 678090852002597, 1920179140755167, + 1259527833759868, 55540971895511 +#else + 8884438, 27670423, 6023973, 10104341, 60227295, 28612898, + 18722940, 18768427, 65436375, 827624 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1158643631044921, 476554103621892, 178447851439725, + 1305025542653569, 103433927680625 +#else + 34388281, 17265135, 34605316, 7101209, 13354605, 2659080, + 65308289, 19446395, 42230385, 1541285 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2176793111709008, 1576725716350391, 2009350167273523, + 2012390194631546, 2125297410909580 +#else + 2901328, 32436745, 3880375, 23495044, 49487923, 29941650, + 45306746, 29986950, 20456844, 31669399 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 825403285195098, 2144208587560784, 1925552004644643, + 1915177840006985, 1015952128947864 +#else + 27019610, 12299467, 53450576, 31951197, 54247203, 28692960, + 47568713, 28538373, 29439640, 15138866 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1807108316634472, 1534392066433717, 347342975407218, + 1153820745616376, 7375003497471 +#else + 21536104, 26928012, 34661045, 22864223, 44700786, 5175813, + 61688824, 17193268, 7779327, 109896 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 983061001799725, 431211889901241, 2201903782961093, + 817393911064341, 2214616493042167 +#else + 30279725, 14648750, 59063993, 6425557, 13639621, 32810923, + 28698389, 12180118, 23177719, 33000357 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 228567918409756, 865093958780220, 358083886450556, + 159617889659320, 1360637926292598 +#else + 26572828, 3405927, 35407164, 12890904, 47843196, 5335865, + 60615096, 2378491, 4439158, 20275085 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 234147501399755, 2229469128637390, 2175289352258889, + 1397401514549353, 1885288963089922 +#else + 44392139, 3489069, 57883598, 33221678, 18875721, 32414337, + 14819433, 20822905, 49391106, 28092994 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1111762412951562, 252849572507389, 1048714233823341, + 146111095601446, 1237505378776770 +#else + 62052362, 16566550, 15953661, 3767752, 56672365, 15627059, + 66287910, 2177224, 8550082, 18440267 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1113790697840279, 1051167139966244, 1045930658550944, + 2011366241542643, 1686166824620755 +#else + 48635543, 16596774, 66727204, 15663610, 22860960, 15585581, + 39264755, 29971692, 43848403, 25125843 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1054097349305049, 1872495070333352, 182121071220717, + 1064378906787311, 100273572924182 +#else + 34628313, 15707274, 58902952, 27902350, 29464557, 2713815, + 44383727, 15860481, 45206294, 1494192 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1306410853171605, 1627717417672447, 50983221088417, + 1109249951172250, 870201789081392 +#else + 47546773, 19467038, 41524991, 24254879, 13127841, 759709, + 21923482, 16529112, 8742704, 12967017 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 104233794644221, 1548919791188248, 2224541913267306, + 2054909377116478, 1043803389015153 +#else + 38643965, 1553204, 32536856, 23080703, 42417258, 33148257, + 58194238, 30620535, 37205105, 15553882 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 216762189468802, 707284285441622, 190678557969733, + 973969342604308, 1403009538434867 +#else + 21877890, 3230008, 9881174, 10539357, 62311749, 2841331, + 11543572, 14513274, 19375923, 20906471 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1279024291038477, 344776835218310, 273722096017199, + 1834200436811442, 634517197663804 +#else + 8832269, 19058947, 13253510, 5137575, 5037871, 4078777, + 24880818, 27331716, 2862652, 9455043 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 343805853118335, 1302216857414201, 566872543223541, + 2051138939539004, 321428858384280 +#else + 29306751, 5123106, 20245049, 19404543, 9592565, 8447059, + 65031740, 30564351, 15511448, 4789663 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 470067171324852, 1618629234173951, 2000092177515639, + 7307679772789, 1117521120249968 +#else + 46429108, 7004546, 8824831, 24119455, 63063159, 29803695, + 61354101, 108892, 23513200, 16652362 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 278151578291475, 1810282338562947, 1771599529530998, + 1383659409671631, 685373414471841 +#else + 33852691, 4144781, 62632835, 26975308, 10770038, 26398890, + 60458447, 20618131, 48789665, 10212859 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 577009397403102, 1791440261786291, 2177643735971638, + 174546149911960, 1412505077782326 +#else + 2756062, 8598110, 7383731, 26694540, 22312758, 32449420, + 21179800, 2600940, 57120566, 21047965 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 893719721537457, 1201282458018197, 1522349501711173, + 58011597740583, 1130406465887139 +#else + 42463153, 13317461, 36659605, 17900503, 21365573, 22684775, + 11344423, 864440, 64609187, 16844368 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 412607348255453, 1280455764199780, 2233277987330768, + 14180080401665, 331584698417165 +#else + 40676061, 6148328, 49924452, 19080277, 18782928, 33278435, + 44547329, 211299, 2719757, 4940997 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 262483770854550, 990511055108216, 526885552771698, + 571664396646158, 354086190278723 +#else + 65784982, 3911312, 60160120, 14759764, 37081714, 7851206, + 21690126, 8518463, 26699843, 5276295 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1820352417585487, 24495617171480, 1547899057533253, + 10041836186225, 480457105094042 +#else + 53958991, 27125364, 9396248, 365013, 24703301, 23065493, + 1321585, 149635, 51656090, 7159368 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2023310314989233, 637905337525881, 2106474638900687, + 557820711084072, 1687858215057826 +#else + 9987761, 30149673, 17507961, 9505530, 9731535, 31388918, + 22356008, 8312176, 22477218, 25151047 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1144168702609745, 604444390410187, 1544541121756138, + 1925315550126027, 626401428894002 +#else + 18155857, 17049442, 19744715, 9006923, 15154154, 23015456, + 24256459, 28689437, 44560690, 9334108 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1922168257351784, 2018674099908659, 1776454117494445, + 956539191509034, 36031129147635 +#else + 2986088, 28642539, 10776627, 30080588, 10620589, 26471229, + 45695018, 14253544, 44521715, 536905 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 544644538748041, 1039872944430374, 876750409130610, + 710657711326551, 1216952687484972 +#else + 4377737, 8115836, 24567078, 15495314, 11625074, 13064599, + 7390551, 10589625, 10838060, 18134008 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 58242421545916, 2035812695641843, 2118491866122923, + 1191684463816273, 46921517454099 +#else + 47766460, 867879, 9277171, 30335973, 52677291, 31567988, + 19295825, 17757482, 6378259, 699185 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 272268252444639, 1374166457774292, 2230115177009552, + 1053149803909880, 1354288411641016 +#else + 7895007, 4057113, 60027092, 20476675, 49222032, 33231305, + 66392824, 15693154, 62063800, 20180469 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1857910905368338, 1754729879288912, 885945464109877, + 1516096106802166, 1602902393369811 +#else + 59371282, 27685029, 52542544, 26147512, 11385653, 13201616, + 31730678, 22591592, 63190227, 23885106 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1193437069800958, 901107149704790, 999672920611411, + 477584824802207, 364239578697845 +#else + 10188286, 17783598, 59772502, 13427542, 22223443, 14896287, + 30743455, 7116568, 45322357, 5427592 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 886299989548838, 1538292895758047, 1590564179491896, + 1944527126709657, 837344427345298 +#else + 696102, 13206899, 27047647, 22922350, 15285304, 23701253, + 10798489, 28975712, 19236242, 12477404 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 754558365378305, 1712186480903618, 1703656826337531, + 750310918489786, 518996040250900 +#else + 55879425, 11243795, 50054594, 25513566, 66320635, 25386464, + 63211194, 11180503, 43939348, 7733643 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1309847803895382, 1462151862813074, 211370866671570, + 1544595152703681, 1027691798954090 +#else + 17800790, 19518253, 40108434, 21787760, 23887826, 3149671, + 23466177, 23016261, 10322026, 15313801 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 803217563745370, 1884799722343599, 1357706345069218, + 2244955901722095, 730869460037413 +#else + 26246234, 11968874, 32263343, 28085704, 6830754, 20231401, + 51314159, 33452449, 42659621, 10890803 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 689299471295966, 1831210565161071, 1375187341585438, + 1106284977546171, 1893781834054269 +#else + 35743198, 10271362, 54448239, 27287163, 16690206, 20491888, + 52126651, 16484930, 25180797, 28219548 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 696351368613042, 1494385251239250, 738037133616932, + 636385507851544, 927483222611406 +#else + 66522290, 10376443, 34522450, 22268075, 19801892, 10997610, + 2276632, 9482883, 316878, 13820577 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1949114198209333, 1104419699537997, 783495707664463, + 1747473107602770, 2002634765788641 +#else + 57226037, 29044064, 64993357, 16457135, 56008783, 11674995, + 30756178, 26039378, 30696929, 29841583 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1607325776830197, 530883941415333, 1451089452727895, + 1581691157083423, 496100432831154 +#else + 32988917, 23951020, 12499365, 7910787, 56491607, 21622917, + 59766047, 23569034, 34759346, 7392472 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1068900648804224, 2006891997072550, 1134049269345549, + 1638760646180091, 2055396084625778 +#else + 58253184, 15927860, 9866406, 29905021, 64711949, 16898650, + 36699387, 24419436, 25112946, 30627788 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2222475519314561, 1870703901472013, 1884051508440561, + 1344072275216753, 1318025677799069 +#else + 64604801, 33117465, 25621773, 27875660, 15085041, 28074555, + 42223985, 20028237, 5537437, 19640113 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 155711679280656, 681100400509288, 389811735211209, + 2135723811340709, 408733211204125 +#else + 55883280, 2320284, 57524584, 10149186, 33664201, 5808647, + 52232613, 31824764, 31234589, 6090599 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 7813206966729, 194444201427550, 2071405409526507, + 1065605076176312, 1645486789731291 +#else + 57475529, 116425, 26083934, 2897444, 60744427, 30866345, 609720, + 15878753, 60138459, 24519663 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 16625790644959, 1647648827778410, 1579910185572704, + 436452271048548, 121070048451050 +#else + 39351007, 247743, 51914090, 24551880, 23288160, 23542496, + 43239268, 6503645, 20650474, 1804084 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1037263028552531, 568385780377829, 297953104144430, + 1558584511931211, 2238221839292471 +#else + 39519059, 15456423, 8972517, 8469608, 15640622, 4439847, + 3121995, 23224719, 27842615, 33352104 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 190565267697443, 672855706028058, 338796554369226, + 337687268493904, 853246848691734 +#else + 51801891, 2839643, 22530074, 10026331, 4602058, 5048462, + 28248656, 5031932, 55733782, 12714368 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1763863028400139, 766498079432444, 1321118624818005, + 69494294452268, 858786744165651 +#else + 20807691, 26283607, 29286140, 11421711, 39232341, 19686201, + 45881388, 1035545, 47375635, 12796919 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1292056768563024, 1456632109855638, 1100631247050184, + 1386133165675321, 1232898350193752 +#else + 12076880, 19253146, 58323862, 21705509, 42096072, 16400683, + 49517369, 20654993, 3480664, 18371617 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 366253102478259, 525676242508811, 1449610995265438, + 1183300845322183, 185960306491545 +#else + 34747315, 5457596, 28548107, 7833186, 7303070, 21600887, + 42745799, 17632556, 33734809, 2771024 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 28315355815982, 460422265558930, 1799675876678724, + 1969256312504498, 1051823843138725 +#else + 45719598, 421931, 26597266, 6860826, 22486084, 26817260, + 49971378, 29344205, 42556581, 15673396 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 156914999361983, 1606148405719949, 1665208410108430, + 317643278692271, 1383783705665320 +#else + 46924223, 2338215, 19788685, 23933476, 63107598, 24813538, + 46837679, 4733253, 3727144, 20619984 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 54684536365732, 2210010038536222, 1194984798155308, + 535239027773705, 1516355079301361 +#else + 6120100, 814863, 55314462, 32931715, 6812204, 17806661, 2019593, + 7975683, 31123697, 22595451 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1484387703771650, 198537510937949, 2186282186359116, + 617687444857508, 647477376402122 +#else + 30069250, 22119100, 30434653, 2958439, 18399564, 32578143, + 12296868, 9204260, 50676426, 9648164 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2147715541830533, 500032538445817, 646380016884826, + 352227855331122, 1488268620408052 +#else + 32705413, 32003455, 30705657, 7451065, 55303258, 9631812, + 3305266, 5248604, 41100532, 22176930 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 159386186465542, 1877626593362941, 618737197060512, + 1026674284330807, 1158121760792685 +#else + 17219846, 2375039, 35537917, 27978816, 47649184, 9219902, + 294711, 15298639, 2662509, 17257359 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1744544377739822, 1964054180355661, 1685781755873170, + 2169740670377448, 1286112621104591 +#else + 65935918, 25995736, 62742093, 29266687, 45762450, 25120105, + 32087528, 32331655, 32247247, 19164571 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 81977249784993, 1667943117713086, 1668983819634866, + 1605016835177615, 1353960708075544 +#else + 14312609, 1221556, 17395390, 24854289, 62163122, 24869796, + 38911119, 23916614, 51081240, 20175586 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1602253788689063, 439542044889886, 2220348297664483, + 657877410752869, 157451572512238 +#else + 65680039, 23875441, 57873182, 6549686, 59725795, 33085767, + 23046501, 9803137, 17597934, 2346211 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1029287186166717, 65860128430192, 525298368814832, + 1491902500801986, 1461064796385400 +#else + 18510781, 15337574, 26171504, 981392, 44867312, 7827555, + 43617730, 22231079, 3059832, 21771562 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 408216988729246, 2121095722306989, 913562102267595, + 1879708920318308, 241061448436731 +#else + 10141598, 6082907, 17829293, 31606789, 9830091, 13613136, + 41552228, 28009845, 33606651, 3592095 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1185483484383269, 1356339572588553, 584932367316448, + 102132779946470, 1792922621116791 +#else + 33114149, 17665080, 40583177, 20211034, 33076704, 8716171, + 1151462, 1521897, 66126199, 26716628 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1966196870701923, 2230044620318636, 1425982460745905, + 261167817826569, 46517743394330 +#else + 34169699, 29298616, 23947180, 33230254, 34035889, 21248794, + 50471177, 3891703, 26353178, 693168 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 107077591595359, 884959942172345, 27306869797400, + 2224911448949390, 964352058245223 +#else + 30374239, 1595580, 50224825, 13186930, 4600344, 406904, 9585294, + 33153764, 31375463, 14369965 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1730194207717538, 431790042319772, 1831515233279467, + 1372080552768581, 1074513929381760 +#else + 52738210, 25781902, 1510300, 6434173, 48324075, 27291703, + 32732229, 20445593, 17901440, 16011505 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1450880638731607, 1019861580989005, 1229729455116861, + 1174945729836143, 826083146840706 +#else + 18171223, 21619806, 54608461, 15197121, 56070717, 18324396, + 47936623, 17508055, 8764034, 12309598 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1899935429242705, 1602068751520477, 940583196550370, + 82431069053859, 1540863155745696 +#else + 5975889, 28311244, 47649501, 23872684, 55567586, 14015781, + 43443107, 1228318, 17544096, 22960650 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2136688454840028, 2099509000964294, 1690800495246475, + 1217643678575476, 828720645084218 +#else + 5811932, 31839139, 3442886, 31285122, 48741515, 25194890, + 49064820, 18144304, 61543482, 12348899 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 765548025667841, 462473984016099, 998061409979798, + 546353034089527, 2212508972466858 +#else + 35709185, 11407554, 25755363, 6891399, 63851926, 14872273, + 42259511, 8141294, 56476330, 32968952 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 46575283771160, 892570971573071, 1281983193144090, + 1491520128287375, 75847005908304 +#else + 54433560, 694025, 62032719, 13300343, 14015258, 19103038, + 57410191, 22225381, 30944592, 1130208 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1801436127943107, 1734436817907890, 1268728090345068, + 167003097070711, 2233597765834956 +#else + 8247747, 26843490, 40546482, 25845122, 52706924, 18905521, + 4652151, 2488540, 23550156, 33283200 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1997562060465113, 1048700225534011, 7615603985628, + 1855310849546841, 2242557647635213 +#else + 17294297, 29765994, 7026747, 15626851, 22990044, 113481, + 2267737, 27646286, 66700045, 33416712 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1161017320376250, 492624580169043, 2169815802355237, + 976496781732542, 1770879511019629 +#else + 16091066, 17300506, 18599251, 7340678, 2137637, 32332775, + 63744702, 14550935, 3260525, 26388161 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1357044908364776, 729130645262438, 1762469072918979, + 1365633616878458, 181282906404941 +#else + 62198760, 20221544, 18550886, 10864893, 50649539, 26262835, + 44079994, 20349526, 54360141, 2701325 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1080413443139865, 1155205815510486, 1848782073549786, + 622566975152580, 124965574467971 +#else + 58534169, 16099414, 4629974, 17213908, 46322650, 27548999, + 57090500, 9276970, 11329923, 1862132 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1184526762066993, 247622751762817, 692129017206356, + 820018689412496, 2188697339828085 +#else + 14763057, 17650824, 36190593, 3689866, 3511892, 10313526, + 45157776, 12219230, 58070901, 32614131 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2020536369003019, 202261491735136, 1053169669150884, + 2056531979272544, 778165514694311 +#else + 8894987, 30108338, 6150752, 3013931, 301220, 15693451, 35127648, + 30644714, 51670695, 11595569 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 237404399610207, 1308324858405118, 1229680749538400, + 720131409105291, 1958958863624906 +#else + 15214943, 3537601, 40870142, 19495559, 4418656, 18323671, + 13947275, 10730794, 53619402, 29190761 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 515583508038846, 17656978857189, 1717918437373989, + 1568052070792483, 46975803123923 +#else + 64570558, 7682792, 32759013, 263109, 37124133, 25598979, + 44776739, 23365796, 977107, 699994 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 281527309158085, 36970532401524, 866906920877543, + 2222282602952734, 1289598729589882 +#else + 54642373, 4195083, 57897332, 550903, 51543527, 12917919, + 19118110, 33114591, 36574330, 19216518 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1278207464902042, 494742455008756, 1262082121427081, + 1577236621659884, 1888786707293291 +#else + 31788442, 19046775, 4799988, 7372237, 8808585, 18806489, + 9408236, 23502657, 12493931, 28145115 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 353042527954210, 1830056151907359, 1111731275799225, + 174960955838824, 404312815582675 +#else + 41428258, 5260743, 47873055, 27269961, 63412921, 16566086, + 27218280, 2607121, 29375955, 6024730 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2064251142068628, 1666421603389706, 1419271365315441, + 468767774902855, 191535130366583 +#else + 842132, 30759739, 62345482, 24831616, 26332017, 21148791, + 11831879, 6985184, 57168503, 2854095 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1716987058588002, 1859366439773457, 1767194234188234, + 64476199777924, 1117233614485261 +#else + 62261602, 25585100, 2516241, 27706719, 9695690, 26333246, + 16512644, 960770, 12121869, 16648078 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 984292135520292, 135138246951259, 2220652137473167, + 1722843421165029, 190482558012909 +#else + 51890212, 14667095, 53772635, 2013716, 30598287, 33090295, + 35603941, 25672367, 20237805, 2838411 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 298845952651262, 1166086588952562, 1179896526238434, + 1347812759398693, 1412945390096208 +#else + 47820798, 4453151, 15298546, 17376044, 22115042, 17581828, + 12544293, 20083975, 1068880, 21054527 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1143239552672925, 906436640714209, 2177000572812152, + 2075299936108548, 325186347798433 +#else + 57549981, 17035596, 33238497, 13506958, 30505848, 32439836, + 58621956, 30924378, 12521377, 4845654 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 721024854374772, 684487861263316, 1373438744094159, + 2193186935276995, 1387043709851261 +#else + 38910324, 10744107, 64150484, 10199663, 7759311, 20465832, + 3409347, 32681032, 60626557, 20668561 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 418098668140962, 715065997721283, 1471916138376055, + 2168570337288357, 937812682637044 +#else + 43547042, 6230155, 46726851, 10655313, 43068279, 21933259, + 10477733, 32314216, 63995636, 13974497 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1043584187226485, 2143395746619356, 2209558562919611, + 482427979307092, 847556718384018 +#else + 12966261, 15550616, 35069916, 31939085, 21025979, 32924988, + 5642324, 7188737, 18895762, 12629579 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1248731221520759, 1465200936117687, 540803492710140, + 52978634680892, 261434490176109 +#else + 14741879, 18607545, 22177207, 21833195, 1279740, 8058600, + 11758140, 789443, 32195181, 3895677 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1057329623869501, 620334067429122, 461700859268034, + 2012481616501857, 297268569108938 +#else + 10758205, 15755439, 62598914, 9243697, 62229442, 6879878, + 64904289, 29988312, 58126794, 4429646 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1055352180870759, 1553151421852298, 1510903185371259, + 1470458349428097, 1226259419062731 +#else + 64654951, 15725972, 46672522, 23143759, 61304955, 22514211, + 59972993, 21911536, 18047435, 18272689 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1492988790301668, 790326625573331, 1190107028409745, + 1389394752159193, 1620408196604194 +#else + 41935844, 22247266, 29759955, 11776784, 44846481, 17733976, + 10993113, 20703595, 49488162, 24145963 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 47000654413729, 1004754424173864, 1868044813557703, + 173236934059409, 588771199737015 +#else + 21987233, 700364, 42603816, 14972007, 59334599, 27836036, + 32155025, 2581431, 37149879, 8773374 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 30498470091663, 1082245510489825, 576771653181956, + 806509986132686, 1317634017056939 +#else + 41540495, 454462, 53896929, 16126714, 25240068, 8594567, + 20656846, 12017935, 59234475, 19634276 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 420308055751555, 1493354863316002, 165206721528088, + 1884845694919786, 2065456951573059 +#else + 6028163, 6263078, 36097058, 22252721, 66289944, 2461771, + 35267690, 28086389, 65387075, 30777706 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1115636332012334, 1854340990964155, 83792697369514, + 1972177451994021, 457455116057587 +#else + 54829870, 16624276, 987579, 27631834, 32908202, 1248608, + 7719845, 29387734, 28408819, 6816612 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1698968457310898, 1435137169051090, 1083661677032510, + 938363267483709, 340103887207182 +#else + 56750770, 25316602, 19549650, 21385210, 22082622, 16147817, + 20613181, 13982702, 56769294, 5067942 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1995325341336574, 911500251774648, 164010755403692, + 855378419194762, 1573601397528842 +#else + 36602878, 29732664, 12074680, 13582412, 47230892, 2443950, + 47389578, 12746131, 5331210, 23448488 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 241719380661528, 310028521317150, 1215881323380194, + 1408214976493624, 2141142156467363 +#else + 30528792, 3601899, 65151774, 4619784, 39747042, 18118043, + 24180792, 20984038, 27679907, 31905504 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1315157046163473, 727368447885818, 1363466668108618, + 1668921439990361, 1398483384337907 +#else + 9402385, 19597367, 32834042, 10838634, 40528714, 20317236, + 26653273, 24868867, 22611443, 20839026 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 75029678299646, 1015388206460473, 1849729037055212, + 1939814616452984, 444404230394954 +#else + 22190590, 1118029, 22736441, 15130463, 36648172, 27563110, + 19189624, 28905490, 4854858, 6622139 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2053597130993710, 2024431685856332, 2233550957004860, + 2012407275509545, 872546993104440 +#else + 58798126, 30600981, 58846284, 30166382, 56707132, 33282502, + 13424425, 29987205, 26404408, 13001963 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1217269667678610, 599909351968693, 1390077048548598, + 1471879360694802, 739586172317596 +#else + 35867026, 18138731, 64114613, 8939345, 11562230, 20713762, + 41044498, 21932711, 51703708, 11020692 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1718318639380794, 1560510726633958, 904462881159922, + 1418028351780052, 94404349451937 +#else + 1866042, 25604943, 59210214, 23253421, 12483314, 13477547, + 3175636, 21130269, 28761761, 1406734 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2132502667405250, 214379346175414, 1502748313768060, + 1960071701057800, 1353971822643138 +#else + 66660290, 31776765, 13018550, 3194501, 57528444, 22392694, + 24760584, 29207344, 25577410, 20175752 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 319394212043702, 2127459436033571, 717646691535162, + 663366796076914, 318459064945314 +#else + 42818486, 4759344, 66418211, 31701615, 2066746, 10693769, + 37513074, 9884935, 57739938, 4745409 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 405989424923593, 1960452633787083, 667349034401665, + 1492674260767112, 1451061489880787 +#else + 57967561, 6049713, 47577803, 29213020, 35848065, 9944275, + 51646856, 22242579, 10931923, 21622501 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 947085906234007, 323284730494107, 1485778563977200, + 728576821512394, 901584347702286 +#else + 50547351, 14112679, 59096219, 4817317, 59068400, 22139825, + 44255434, 10856640, 46638094, 13434653 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1575783124125742, 2126210792434375, 1569430791264065, + 1402582372904727, 1891780248341114 +#else + 22759470, 23480998, 50342599, 31683009, 13637441, 23386341, + 1765143, 20900106, 28445306, 28189722 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 838432205560695, 1997703511451664, 1018791879907867, + 1662001808174331, 78328132957753 +#else + 29875063, 12493613, 2795536, 29768102, 1710619, 15181182, + 56913147, 24765756, 9074233, 1167180 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 739152638255629, 2074935399403557, 505483666745895, + 1611883356514088, 628654635394878 +#else + 40903181, 11014232, 57266213, 30918946, 40200743, 7532293, + 48391976, 24018933, 3843902, 9367684 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1822054032121349, 643057948186973, 7306757352712, + 577249257962099, 284735863382083 +#else + 56139269, 27150720, 9591133, 9582310, 11349256, 108879, + 16235123, 8601684, 66969667, 4242894 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1366558556363930, 1448606567552086, 1478881020944768, + 165803179355898, 1115718458123498 +#else + 22092954, 20363309, 65066070, 21585919, 32186752, 22037044, + 60534522, 2470659, 39691498, 16625500 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 204146226972102, 1630511199034723, 2215235214174763, + 174665910283542, 956127674017216 +#else + 56051142, 3042015, 13770083, 24296510, 584235, 33009577, + 59338006, 2602724, 39757248, 14247412 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1562934578796716, 1070893489712745, 11324610642270, + 958989751581897, 2172552325473805 +#else + 6314156, 23289540, 34336361, 15957556, 56951134, 168749, + 58490057, 14290060, 27108877, 32373552 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1770564423056027, 735523631664565, 1326060113795289, + 1509650369341127, 65892421582684 +#else + 58522267, 26383465, 13241781, 10960156, 34117849, 19759835, + 33547975, 22495543, 39960412, 981873 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 623682558650637, 1337866509471512, 990313350206649, + 1314236615762469, 1164772974270275 +#else + 22833421, 9293594, 34459416, 19935764, 57971897, 14756818, + 44180005, 19583651, 56629059, 17356469 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 223256821462517, 723690150104139, 1000261663630601, + 933280913953265, 254872671543046 +#else + 59340277, 3326785, 38997067, 10783823, 19178761, 14905060, + 22680049, 13906969, 51175174, 3797898 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1969087237026041, 624795725447124, 1335555107635969, + 2069986355593023, 1712100149341902 +#else + 21721337, 29341686, 54902740, 9310181, 63226625, 19901321, + 23740223, 30845200, 20491982, 25512280 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1236103475266979, 1837885883267218, 1026072585230455, + 1025865513954973, 1801964901432134 +#else + 9209251, 18419377, 53852306, 27386633, 66377847, 15289672, + 25947805, 15286587, 30997318, 26851369 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1115241013365517, 1712251818829143, 2148864332502771, + 2096001471438138, 2235017246626125 +#else + 7392013, 16618386, 23946583, 25514540, 53843699, 32020573, + 52911418, 31232855, 17649997, 33304352 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1299268198601632, 2047148477845621, 2165648650132450, + 1612539282026145, 514197911628890 +#else + 57807776, 19360604, 30609525, 30504889, 41933794, 32270679, + 51867297, 24028707, 64875610, 7662145 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 118352772338543, 1067608711804704, 1434796676193498, + 1683240170548391, 230866769907437 +#else + 49550191, 1763593, 33994528, 15908609, 37067994, 21380136, + 7335079, 25082233, 63934189, 3440182 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1850689576796636, 1601590730430274, 1139674615958142, + 1954384401440257, 76039205311 +#else + 47219164, 27577423, 42997570, 23865561, 10799742, 16982475, + 40449, 29122597, 4862399, 1133 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1723387471374172, 997301467038410, 533927635123657, + 20928644693965, 1756575222802513 +#else + 34252636, 25680474, 61686474, 14860949, 50789833, 7956141, + 7258061, 311861, 36513873, 26175010 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2146711623855116, 503278928021499, 625853062251406, + 1109121378393107, 1033853809911861 +#else + 63335436, 31988495, 28985339, 7499440, 24445838, 9325937, + 29727763, 16527196, 18278453, 15405622 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 571005965509422, 2005213373292546, 1016697270349626, + 56607856974274, 914438579435146 +#else + 62726958, 8508651, 47210498, 29880007, 61124410, 15149969, + 53795266, 843522, 45233802, 13626196 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1346698876211176, 2076651707527589, 1084761571110205, + 265334478828406, 1068954492309671 +#else + 2281448, 20067377, 56193445, 30944521, 1879357, 16164207, + 56324982, 3953791, 13340839, 15928663 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1769967932677654, 1695893319756416, 1151863389675920, + 1781042784397689, 400287774418285 +#else + 31727126, 26374577, 48671360, 25270779, 2875792, 17164102, + 41838969, 26539605, 43656557, 5964752 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1851867764003121, 403841933237558, 820549523771987, + 761292590207581, 1743735048551143 +#else + 4100401, 27594980, 49929526, 6017713, 48403027, 12227140, + 40424029, 11344143, 2538215, 25983677 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 410915148140008, 2107072311871739, 1004367461876503, + 99684895396761, 1180818713503224 +#else + 57675240, 6123112, 11159803, 31397824, 30016279, 14966241, + 46633881, 1485420, 66479608, 17595569 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 285945406881439, 648174397347453, 1098403762631981, + 1366547441102991, 1505876883139217 +#else + 40304287, 4260918, 11851389, 9658551, 35091757, 16367491, + 46903439, 20363143, 11659921, 22439314 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 672095903120153, 1675918957959872, 636236529315028, + 1569297300327696, 2164144194785875 +#else + 26180377, 10015009, 36264640, 24973138, 5418196, 9480663, + 2231568, 23384352, 33100371, 32248261 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1902708175321798, 1035343530915438, 1178560808893263, + 301095684058146, 1280977479761118 +#else + 15121094, 28352561, 56718958, 15427820, 39598927, 17561924, + 21670946, 4486675, 61177054, 19088051 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1615357281742403, 404257611616381, 2160201349780978, + 1160947379188955, 1578038619549541 +#else + 16166467, 24070699, 56004733, 6023907, 35182066, 32189508, + 2340059, 17299464, 56373093, 23514607 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2013087639791217, 822734930507457, 1785668418619014, + 1668650702946164, 389450875221715 +#else + 28042865, 29997343, 54982337, 12259705, 63391366, 26608532, + 6766452, 24864833, 18036435, 5803270 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 453918449698368, 106406819929001, 2072540975937135, + 308588860670238, 1304394580755385 +#else + 66291264, 6763911, 11803561, 1585585, 10958447, 30883267, + 23855390, 4598332, 60949433, 19436993 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1295082798350326, 2091844511495996, 1851348972587817, + 3375039684596, 789440738712837 +#else + 36077558, 19298237, 17332028, 31170912, 31312681, 27587249, + 696308, 50292, 47013125, 11763583 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2083069137186154, 848523102004566, 993982213589257, + 1405313299916317, 1532824818698468 +#else + 66514282, 31040148, 34874710, 12643979, 12650761, 14811489, + 665117, 20940800, 47335652, 22840869 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1495961298852430, 1397203457344779, 1774950217066942, + 139302743555696, 66603584342787 +#else + 30464590, 22291560, 62981387, 20819953, 19835326, 26448819, + 42712688, 2075772, 50088707, 992470 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1782411379088302, 1096724939964781, 27593390721418, + 542241850291353, 1540337798439873 +#else + 18357166, 26559999, 7766381, 16342475, 37783946, 411173, + 14578841, 8080033, 55534529, 22952821 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 693543956581437, 171507720360750, 1557908942697227, + 1074697073443438, 1104093109037196 +#else + 19598397, 10334610, 12555054, 2555664, 18821899, 23214652, + 21873262, 16014234, 26224780, 16452269 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 345288228393419, 1099643569747172, 134881908403743, + 1740551994106740, 248212179299770 +#else + 36884939, 5145195, 5944548, 16385966, 3976735, 2009897, + 55731060, 25936245, 46575034, 3698649 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 231429562203065, 1526290236421172, 2021375064026423, + 1520954495658041, 806337791525116 +#else + 14187449, 3448569, 56472628, 22743496, 44444983, 30120835, + 7268409, 22663988, 27394300, 12015369 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1079623667189886, 872403650198613, 766894200588288, + 2163700860774109, 2023464507911816 +#else + 19695742, 16087646, 28032085, 12999827, 6817792, 11427614, + 20244189, 32241655, 53849736, 30151970 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 854645372543796, 1936406001954827, 151460662541253, + 825325739271555, 1554306377287556 +#else + 30860084, 12735208, 65220619, 28854697, 50133957, 2256939, + 58942851, 12298311, 58558340, 23160969 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1497138821904622, 1044820250515590, 1742593886423484, + 1237204112746837, 849047450816987 +#else + 61389038, 22309106, 65198214, 15569034, 26642876, 25966672, + 61319509, 18435777, 62132699, 12651792 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 667962773375330, 1897271816877105, 1399712621683474, + 1143302161683099, 2081798441209593 +#else + 64260450, 9953420, 11531313, 28271553, 26895122, 20857343, + 53990043, 17036529, 9768697, 31021214 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 127147851567005, 1936114012888110, 1704424366552046, + 856674880716312, 716603621335359 +#else + 42389405, 1894650, 66821166, 28850346, 15348718, 25397902, + 32767512, 12765450, 4940095, 10678226 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1072409664800960, 2146937497077528, 1508780108920651, + 935767602384853, 1112800433544068 +#else + 18860224, 15980149, 48121624, 31991861, 40875851, 22482575, + 59264981, 13944023, 42736516, 16582018 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 333549023751292, 280219272863308, 2104176666454852, + 1036466864875785, 536135186520207 +#else + 51604604, 4970267, 37215820, 4175592, 46115652, 31354675, + 55404809, 15444559, 56105103, 7989036 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 373666279883137, 146457241530109, 304116267127857, + 416088749147715, 1258577131183391 +#else + 31490433, 5568061, 64696061, 2182382, 34772017, 4531685, + 35030595, 6200205, 47422751, 18754260 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1186115062588401, 2251609796968486, 1098944457878953, + 1153112761201374, 1791625503417267 +#else + 49800177, 17674491, 35586086, 33551600, 34221481, 16375548, + 8680158, 17182719, 28550067, 26697300 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1870078460219737, 2129630962183380, 852283639691142, + 292865602592851, 401904317342226 +#else + 38981977, 27866340, 16837844, 31733974, 60258182, 12700015, + 37068883, 4364037, 1155602, 5988841 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1361070124828035, 815664541425524, 1026798897364671, + 1951790935390647, 555874891834790 +#else + 21890435, 20281525, 54484852, 12154348, 59276991, 15300495, + 23148983, 29083951, 24618406, 8283181 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1546301003424277, 459094500062839, 1097668518375311, + 1780297770129643, 720763293687608 +#else + 33972757, 23041680, 9975415, 6841041, 35549071, 16356535, + 3070187, 26528504, 1466168, 10740210 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1212405311403990, 1536693382542438, 61028431067459, + 1863929423417129, 1223219538638038 +#else + 65599446, 18066246, 53605478, 22898515, 32799043, 909394, + 53169961, 27774712, 34944214, 18227391 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1294303766540260, 1183557465955093, 882271357233093, + 63854569425375, 2213283684565087 +#else + 3960804, 19286629, 39082773, 17636380, 47704005, 13146867, + 15567327, 951507, 63848543, 32980496 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 339050984211414, 601386726509773, 413735232134068, + 966191255137228, 1839475899458159 +#else + 24740822, 5052253, 37014733, 8961360, 25877428, 6165135, + 42740684, 14397371, 59728495, 27410326 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 235605972169408, 2174055643032978, 1538335001838863, + 1281866796917192, 1815940222628465 +#else + 38220480, 3510802, 39005586, 32395953, 55870735, 22922977, + 51667400, 19101303, 65483377, 27059617 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1632352921721536, 1833328609514701, 2092779091951987, + 1923956201873226, 2210068022482919 +#else + 793280, 24323954, 8836301, 27318725, 39747955, 31184838, + 33152842, 28669181, 57202663, 32932579 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 35271216625062, 1712350667021807, 983664255668860, + 98571260373038, 1232645608559836 +#else + 5666214, 525582, 20782575, 25516013, 42570364, 14657739, + 16099374, 1468826, 60937436, 18367850 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1998172393429622, 1798947921427073, 784387737563581, + 1589352214827263, 1589861734168180 +#else + 62249590, 29775088, 64191105, 26806412, 7778749, 11688288, + 36704511, 23683193, 65549940, 23690785 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1733739258725305, 31715717059538, 201969945218860, + 992093044556990, 1194308773174556 +#else + 10896313, 25834728, 824274, 472601, 47648556, 3009586, 25248958, + 14783338, 36527388, 17796587 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 846415389605137, 746163495539180, 829658752826080, + 592067705956946, 957242537821393 +#else + 10566929, 12612572, 35164652, 11118702, 54475488, 12362878, + 21752402, 8822496, 24003793, 14264025 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1758148849754419, 619249044817679, 168089007997045, + 1371497636330523, 1867101418880350 +#else + 27713843, 26198459, 56100623, 9227529, 27050101, 2504721, + 23886875, 20436907, 13958494, 27821979 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 326633984209635, 261759506071016, 1700682323676193, + 1577907266349064, 1217647663383016 +#else + 43627235, 4867225, 39861736, 3900520, 29838369, 25342141, + 35219464, 23512650, 7340520, 18144364 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1714182387328607, 1477856482074168, 574895689942184, + 2159118410227270, 1555532449716575 +#else + 4646495, 25543308, 44342840, 22021777, 23184552, 8566613, + 31366726, 32173371, 52042079, 23179239 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 853828206885131, 998498946036955, 1835887550391235, + 207627336608048, 258363815956050 +#else + 49838347, 12723031, 50115803, 14878793, 21619651, 27356856, + 27584816, 3093888, 58265170, 3849920 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 141141474651677, 1236728744905256, 643101419899887, + 1646615130509173, 1208239602291765 +#else + 58043933, 2103171, 25561640, 18428694, 61869039, 9582957, + 32477045, 24536477, 5002293, 18004173 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1501663228068911, 1354879465566912, 1444432675498247, + 897812463852601, 855062598754348 +#else + 55051311, 22376525, 21115584, 20189277, 8808711, 21523724, + 16489529, 13378448, 41263148, 12741425 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 714380763546606, 1032824444965790, 1774073483745338, + 1063840874947367, 1738680636537158 +#else + 61162478, 10645102, 36197278, 15390283, 63821882, 26435754, + 24306471, 15852464, 28834118, 25908360 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1640635546696252, 633168953192112, 2212651044092396, + 30590958583852, 368515260889378 +#else + 49773116, 24447374, 42577584, 9434952, 58636780, 32971069, + 54018092, 455840, 20461858, 5491305 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1171650314802029, 1567085444565577, 1453660792008405, + 757914533009261, 1619511342778196 +#else + 13669229, 17458950, 54626889, 23351392, 52539093, 21661233, + 42112877, 11293806, 38520660, 24132599 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 420958967093237, 971103481109486, 2169549185607107, + 1301191633558497, 1661514101014240 +#else + 28497909, 6272777, 34085870, 14470569, 8906179, 32328802, + 18504673, 19389266, 29867744, 24758489 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 907123651818302, 1332556122804146, 1824055253424487, + 1367614217442959, 1982558335973172 +#else + 50901822, 13517195, 39309234, 19856633, 24009063, 27180541, + 60741263, 20379039, 22853428, 29542421 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1121533090144639, 1021251337022187, 110469995947421, + 1511059774758394, 2110035908131662 +#else + 24191359, 16712145, 53177067, 15217830, 14542237, 1646131, + 18603514, 22516545, 12876622, 31441985 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 303213233384524, 2061932261128138, 352862124777736, + 40828818670255, 249879468482660 +#else + 17902668, 4518229, 66697162, 30725184, 26878216, 5258055, + 54248111, 608396, 16031844, 3723494 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 856559257852200, 508517664949010, 1378193767894916, + 1723459126947129, 1962275756614521 +#else + 38476072, 12763727, 46662418, 7577503, 33001348, 20536687, + 17558841, 25681542, 23896953, 29240187 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1445691340537320, 40614383122127, 402104303144865, + 485134269878232, 1659439323587426 +#else + 47103464, 21542479, 31520463, 605201, 2543521, 5991821, + 64163800, 7229063, 57189218, 24727572 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 20057458979482, 1183363722525800, 2140003847237215, + 2053873950687614, 2112017736174909 +#else + 28816026, 298879, 38943848, 17633493, 19000927, 31888542, + 54428030, 30605106, 49057085, 31471516 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2228654250927986, 1483591363415267, 1368661293910956, + 1076511285177291, 526650682059608 +#else + 16000882, 33209536, 3493091, 22107234, 37604268, 20394642, + 12577739, 16041268, 47393624, 7847706 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 709481497028540, 531682216165724, 316963769431931, + 1814315888453765, 258560242424104 +#else + 10151868, 10572098, 27312476, 7922682, 14825339, 4723128, + 34252933, 27035413, 57088296, 3852847 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1053447823660455, 1955135194248683, 1010900954918985, + 1182614026976701, 1240051576966610 +#else + 55678375, 15697595, 45987307, 29133784, 5386313, 15063598, + 16514493, 17622322, 29330898, 18478208 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1957943897155497, 1788667368028035, 137692910029106, + 1039519607062, 826404763313028 +#else + 41609129, 29175637, 51885955, 26653220, 16615730, 2051784, + 3303702, 15490, 39560068, 12314390 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1848942433095597, 1582009882530495, 1849292741020143, + 1068498323302788, 2001402229799484 +#else + 15683501, 27551389, 18109119, 23573784, 15337967, 27556609, + 50391428, 15921865, 16103996, 29823217 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1528282417624269, 2142492439828191, 2179662545816034, + 362568973150328, 1591374675250271 +#else + 43939021, 22773182, 13588191, 31925625, 63310306, 32479502, + 47835256, 5402698, 37293151, 23713330 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 160026679434388, 232341189218716, 2149181472355545, + 598041771119831, 183859001910173 +#else + 23190676, 2384583, 34394524, 3462153, 37205209, 32025299, + 55842007, 8911516, 41903005, 2739712 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2013278155187349, 662660471354454, 793981225706267, + 411706605985744, 804490933124791 +#else + 21374101, 30000182, 33584214, 9874410, 15377179, 11831242, + 33578960, 6134906, 4931255, 11987849 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2051892037280204, 488391251096321, 2230187337030708, + 930221970662692, 679002758255210 +#else + 67101132, 30575573, 50885377, 7277596, 105524, 33232381, + 35628324, 13861387, 37032554, 10117929 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1530723630438670, 875873929577927, 341560134269988, + 449903119530753, 1055551308214179 +#else + 37607694, 22809559, 40945095, 13051538, 41483300, 5089642, + 60783361, 6704078, 12890019, 15728940 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1461835919309432, 1955256480136428, 180866187813063, + 1551979252664528, 557743861963950 +#else + 45136504, 21783052, 66157804, 29135591, 14704839, 2695116, + 903376, 23126293, 12885166, 8311031 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 359179641731115, 1324915145732949, 902828372691474, + 294254275669987, 1887036027752957 +#else + 49592363, 5352193, 10384213, 19742774, 7506450, 13453191, + 26423267, 4384730, 1888765, 28119028 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2043271609454323, 2038225437857464, 1317528426475850, + 1398989128982787, 2027639881006861 +#else + 41291507, 30447119, 53614264, 30371925, 30896458, 19632703, + 34857219, 20846562, 47644429, 30214188 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2072902725256516, 312132452743412, 309930885642209, + 996244312618453, 1590501300352303 +#else + 43500868, 30888657, 66582772, 4651135, 5765089, 4618330, + 6092245, 14845197, 17151279, 23700316 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1397254305160710, 695734355138021, 2233992044438756, + 1776180593969996, 1085588199351115 +#else + 42278406, 20820711, 51942885, 10367249, 37577956, 33289075, + 22825804, 26467153, 50242379, 16176524 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 440567051331029, 254894786356681, 493869224930222, + 1556322069683366, 1567456540319218 +#else + 43525589, 6564960, 20063689, 3798228, 62368686, 7359224, + 2006182, 23191006, 38362610, 23356922 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1950722461391320, 1907845598854797, 1822757481635527, + 2121567704750244, 73811931471221 +#else + 56482264, 29068029, 53788301, 28429114, 3432135, 27161203, + 23632036, 31613822, 32808309, 1099883 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 387139307395758, 2058036430315676, 1220915649965325, + 1794832055328951, 1230009312169328 +#else + 15030958, 5768825, 39657628, 30667132, 60681485, 18193060, + 51830967, 26745081, 2051440, 18328567 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1765973779329517, 659344059446977, 19821901606666, + 1301928341311214, 1116266004075885 +#else + 63746541, 26315059, 7517889, 9824992, 23555850, 295369, 5148398, + 19400244, 44422509, 16633659 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1127572801181483, 1224743760571696, 1276219889847274, + 1529738721702581, 1589819666871853 +#else + 4577067, 16802144, 13249840, 18250104, 19958762, 19017158, + 18559669, 22794883, 8402477, 23690159 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2181229378964934, 2190885205260020, 1511536077659137, + 1246504208580490, 668883326494241 +#else + 38702534, 32502850, 40318708, 32646733, 49896449, 22523642, + 9453450, 18574360, 17983009, 9967138 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 437866655573314, 669026411194768, 81896997980338, + 523874406393178, 245052060935236 +#else + 41346370, 6524721, 26585488, 9969270, 24709298, 1220360, + 65430874, 7806336, 17507396, 3651560 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1975438052228868, 1071801519999806, 594652299224319, + 1877697652668809, 1489635366987285 +#else + 56688388, 29436320, 14584638, 15971087, 51340543, 8861009, + 26556809, 27979875, 48555541, 22197296 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 958592545673770, 233048016518599, 851568750216589, + 567703851596087, 1740300006094761 +#else + 2839082, 14284142, 4029895, 3472686, 14402957, 12689363, + 40466743, 8459446, 61503401, 25932490 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2014540178270324, 192672779514432, 213877182641530, + 2194819933853411, 1716422829364835 +#else + 62269556, 30018987, 9744960, 2871048, 25113978, 3187018, + 41998051, 32705365, 17258083, 25576693 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1540769606609725, 2148289943846077, 1597804156127445, + 1230603716683868, 815423458809453 +#else + 18164541, 22959256, 49953981, 32012014, 19237077, 23809137, + 23357532, 18337424, 26908269, 12150756 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1738560251245018, 1779576754536888, 1783765347671392, + 1880170990446751, 1088225159617541 +#else + 36843994, 25906566, 5112248, 26517760, 65609056, 26580174, + 43167, 28016731, 34806789, 16215818 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 659303913929492, 1956447718227573, 1830568515922666, + 841069049744408, 1669607124206368 +#else + 60209940, 9824393, 54804085, 29153342, 35711722, 27277596, + 32574488, 12532905, 59605792, 24879084 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1143465490433355, 1532194726196059, 1093276745494697, + 481041706116088, 2121405433561163 +#else + 39765323, 17038963, 39957339, 22831480, 946345, 16291093, + 254968, 7168080, 21676107, 31611404 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1686424298744462, 1451806974487153, 266296068846582, + 1834686947542675, 1720762336132256 +#else + 21260942, 25129680, 50276977, 21633609, 43430902, 3968120, + 63456915, 27338965, 63552672, 25641356 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 889217026388959, 1043290623284660, 856125087551909, + 1669272323124636, 1603340330827879 +#else + 16544735, 13250366, 50304436, 15546241, 62525861, 12757257, + 64646556, 24874095, 48201831, 23891632 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1206396181488998, 333158148435054, 1402633492821422, + 1120091191722026, 1945474114550509 +#else + 64693606, 17976703, 18312302, 4964443, 51836334, 20900867, + 26820650, 16690659, 25459437, 28989823 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 766720088232571, 1512222781191002, 1189719893490790, + 2091302129467914, 2141418006894941 +#else + 41964155, 11425019, 28423002, 22533875, 60963942, 17728207, + 9142794, 31162830, 60676445, 31909614 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 419663647306612, 1998875112167987, 1426599870253707, + 1154928355379510, 486538532138187 +#else + 44004212, 6253475, 16964147, 29785560, 41994891, 21257994, + 39651638, 17209773, 6335691, 7249989 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 938160078005954, 1421776319053174, 1941643234741774, + 180002183320818, 1414380336750546 +#else + 36775618, 13979674, 7503222, 21186118, 55152142, 28932738, + 36836594, 2682241, 25993170, 21075909 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 398001940109652, 1577721237663248, 1012748649830402, + 1540516006905144, 1011684812884559 +#else + 4364628, 5930691, 32304656, 23509878, 59054082, 15091130, + 22857016, 22955477, 31820367, 15075278 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1653276489969630, 6081825167624, 1921777941170836, + 1604139841794531, 861211053640641 +#else + 31879134, 24635739, 17258760, 90626, 59067028, 28636722, + 24162787, 23903546, 49138625, 12833044 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 996661541407379, 1455877387952927, 744312806857277, + 139213896196746, 1000282908547789 +#else + 19073683, 14851414, 42705695, 21694263, 7625277, 11091125, + 47489674, 2074448, 57694925, 14905376 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1450817495603008, 1476865707053229, 1030490562252053, + 620966950353376, 1744760161539058 +#else + 24483648, 21618865, 64589997, 22007013, 65555733, 15355505, + 41826784, 9253128, 27628530, 25998952 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 559728410002599, 37056661641185, 2038622963352006, + 1637244893271723, 1026565352238948 +#else + 17597607, 8340603, 19355617, 552187, 26198470, 30377849, + 4593323, 24396850, 52997988, 15297015 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 962165956135846, 1116599660248791, 182090178006815, + 1455605467021751, 196053588803284 +#else + 510886, 14337390, 35323607, 16638631, 6328095, 2713355, + 46891447, 21690211, 8683220, 2921426 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 796863823080135, 1897365583584155, 420466939481601, + 2165972651724672, 932177357788289 +#else + 18606791, 11874196, 27155355, 28272950, 43077121, 6265445, + 41930624, 32275507, 4674689, 13890525 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 877047233620632, 1375632631944375, 643773611882121, + 660022738847877, 19353932331831 +#else + 13609624, 13069022, 39736503, 20498523, 24360585, 9592974, + 14977157, 9835105, 4389687, 288396 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2216943882299338, 394841323190322, 2222656898319671, + 558186553950529, 1077236877025190 +#else + 9922506, 33035038, 13613106, 5883594, 48350519, 33120168, + 54804801, 8317627, 23388070, 16052080 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 801118384953213, 1914330175515892, 574541023311511, + 1471123787903705, 1526158900256288 +#else + 12719997, 11937594, 35138804, 28525742, 26900119, 8561328, + 46953177, 21921452, 52354592, 22741539 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 949617889087234, 2207116611267331, 912920039141287, + 501158539198789, 62362560771472 +#else + 15961858, 14150409, 26716931, 32888600, 44314535, 13603568, + 11829573, 7467844, 38286736, 929274 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1474518386765335, 1760793622169197, 1157399790472736, + 1622864308058898, 165428294422792 +#else + 11038231, 21972036, 39798381, 26237869, 56610336, 17246600, + 43629330, 24182562, 45715720, 2465073 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1961673048027128, 102619413083113, 1051982726768458, + 1603657989805485, 1941613251499678 +#else + 20017144, 29231206, 27915241, 1529148, 12396362, 15675764, + 13817261, 23896366, 2463390, 28932292 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1401939116319266, 335306339903072, 72046196085786, + 862423201496006, 850518754531384 +#else + 50749986, 20890520, 55043680, 4996453, 65852442, 1073571, + 9583558, 12851107, 4003896, 12673717 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1234706593321979, 1083343891215917, 898273974314935, + 1640859118399498, 157578398571149 +#else + 65377275, 18398561, 63845933, 16143081, 19294135, 13385325, + 14741514, 24450706, 7903885, 2348101 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1143483057726416, 1992614991758919, 674268662140796, + 1773370048077526, 674318359920189 +#else + 24536016, 17039225, 12715591, 29692277, 1511292, 10047386, + 63266518, 26425272, 38731325, 10048126 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1835401379538542, 173900035308392, 818247630716732, + 1762100412152786, 1021506399448291 +#else + 54486638, 27349611, 30718824, 2591312, 56491836, 12192839, + 18873298, 26257342, 34811107, 15221631 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1506632088156630, 2127481795522179, 513812919490255, + 140643715928370, 442476620300318 +#else + 40630742, 22450567, 11546243, 31701949, 9180879, 7656409, + 45764914, 2095754, 29769758, 6593415 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2056683376856736, 219094741662735, 2193541883188309, + 1841182310235800, 556477468664293 +#else + 35114656, 30646970, 4176911, 3264766, 12538965, 32686321, + 26312344, 27435754, 30958053, 8292160 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1315019427910827, 1049075855992603, 2066573052986543, + 266904467185534, 2040482348591520 +#else + 31429803, 19595316, 29173531, 15632448, 12174511, 30794338, + 32808830, 3977186, 26143136, 30405556 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 94096246544434, 922482381166992, 24517828745563, + 2139430508542503, 2097139044231004 +#else + 22648882, 1402143, 44308880, 13746058, 7936347, 365344, + 58440231, 31879998, 63350620, 31249806 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 537697207950515, 1399352016347350, 1563663552106345, + 2148749520888918, 549922092988516 +#else + 51616947, 8012312, 64594134, 20851969, 43143017, 23300402, + 65496150, 32018862, 50444388, 8194477 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1747985413252434, 680511052635695, 1809559829982725, + 594274250930054, 201673170745982 +#else + 27338066, 26047012, 59694639, 10140404, 48082437, 26964542, + 27277190, 8855376, 28572286, 3005164 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 323583936109569, 1973572998577657, 1192219029966558, + 79354804385273, 1374043025560347 +#else + 26287105, 4821776, 25476601, 29408529, 63344350, 17765447, + 49100281, 1182478, 41014043, 20474836 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 213277331329947, 416202017849623, 1950535221091783, + 1313441578103244, 2171386783823658 +#else + 59937691, 3178079, 23970071, 6201893, 49913287, 29065239, + 45232588, 19571804, 32208682, 32356184 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 189088804229831, 993969372859110, 895870121536987, + 1547301535298256, 1477373024911350 +#else + 50451143, 2817642, 56822502, 14811297, 6024667, 13349505, + 39793360, 23056589, 39436278, 22014573 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1620578418245010, 541035331188469, 2235785724453865, + 2154865809088198, 1974627268751826 +#else + 15941010, 24148500, 45741813, 8062054, 31876073, 33315803, + 51830470, 32110002, 15397330, 29424239 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1346805451740245, 1350981335690626, 942744349501813, + 2155094562545502, 1012483751693409 +#else + 8934485, 20068965, 43822466, 20131190, 34662773, 14047985, + 31170398, 32113411, 39603297, 15087183 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2107080134091762, 1132567062788208, 1824935377687210, + 769194804343737, 1857941799971888 +#else + 48751602, 31397940, 24524912, 16876564, 15520426, 27193656, + 51606457, 11461895, 16788528, 27685490 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1074666112436467, 249279386739593, 1174337926625354, + 1559013532006480, 1472287775519121 +#else + 65161459, 16013772, 21750665, 3714552, 49707082, 17498998, + 63338576, 23231111, 31322513, 21938797 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1872620123779532, 1892932666768992, 1921559078394978, + 1270573311796160, 1438913646755037 +#else + 21426636, 27904214, 53460576, 28206894, 38296674, 28633461, + 48833472, 18933017, 13040861, 21441484 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 837390187648199, 1012253300223599, 989780015893987, + 1351393287739814, 328627746545550 +#else + 11293895, 12478086, 39972463, 15083749, 37801443, 14748871, + 14555558, 20137329, 1613710, 4896935 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1028328827183114, 1711043289969857, 1350832470374933, + 1923164689604327, 1495656368846911 +#else + 41213962, 15323293, 58619073, 25496531, 25967125, 20128972, + 2825959, 28657387, 43137087, 22287016 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1900828492104143, 430212361082163, 687437570852799, + 832514536673512, 1685641495940794 +#else + 51184079, 28324551, 49665331, 6410663, 3622847, 10243618, + 20615400, 12405433, 43355834, 25118015 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 842632847936398, 605670026766216, 290836444839585, + 163210774892356, 2213815011799645 +#else + 60017550, 12556207, 46917512, 9025186, 50036385, 4333800, + 4378436, 2432030, 23097949, 32988414 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1176336383453996, 1725477294339771, 12700622672454, + 678015708818208, 162724078519879 +#else + 4565804, 17528778, 20084411, 25711615, 1724998, 189254, + 24767264, 10103221, 48596551, 2424777 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1448049969043497, 1789411762943521, 385587766217753, + 90201620913498, 832999441066823 +#else + 366633, 21577626, 8173089, 26664313, 30788633, 5745705, + 59940186, 1344108, 63466311, 12412658 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 516086333293313, 2240508292484616, 1351669528166508, + 1223255565316488, 750235824427138 +#else + 43107073, 7690285, 14929416, 33386175, 34898028, 20141445, + 24162696, 18227928, 63967362, 11179384 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1263624896582495, 1102602401673328, 526302183714372, + 2152015839128799, 1483839308490010 +#else + 18289503, 18829478, 8056944, 16430056, 45379140, 7842513, + 61107423, 32067534, 48424218, 22110928 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 442991718646863, 1599275157036458, 1925389027579192, + 899514691371390, 350263251085160 +#else + 476239, 6601091, 60956074, 23831056, 17503544, 28690532, + 27672958, 13403813, 11052904, 5219329 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1689713572022143, 593854559254373, 978095044791970, + 1985127338729499, 1676069120347625 +#else + 20678527, 25178694, 34436965, 8849122, 62099106, 14574751, + 31186971, 29580702, 9014761, 24975376 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1557207018622683, 340631692799603, 1477725909476187, + 614735951619419, 2033237123746766 +#else + 53464795, 23204192, 51146355, 5075807, 65594203, 22019831, + 34006363, 9160279, 8473550, 30297594 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 968764929340557, 1225534776710944, 662967304013036, + 1155521416178595, 791142883466590 +#else + 24900749, 14435722, 17209120, 18261891, 44516588, 9878982, + 59419555, 17218610, 42540382, 11788947 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1487081286167458, 993039441814934, 1792378982844640, + 698652444999874, 2153908693179754 +#else + 63990690, 22159237, 53306774, 14797440, 9652448, 26708528, + 47071426, 10410732, 42540394, 32095740 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1123181311102823, 685575944875442, 507605465509927, + 1412590462117473, 568017325228626 +#else + 51449703, 16736705, 44641714, 10215877, 58011687, 7563910, + 11871841, 21049238, 48595538, 8464117 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 560258797465417, 2193971151466401, 1824086900849026, + 579056363542056, 1690063960036441 +#else + 43708233, 8348506, 52522913, 32692717, 63158658, 27181012, + 14325288, 8628612, 33313881, 25183915 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1918407319222416, 353767553059963, 1930426334528099, + 1564816146005724, 1861342381708096 +#else + 46921872, 28586496, 22367355, 5271547, 66011747, 28765593, + 42303196, 23317577, 58168128, 27736162 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2131325168777276, 1176636658428908, 1756922641512981, + 1390243617176012, 1966325177038383 +#else + 60160060, 31759219, 34483180, 17533252, 32635413, 26180187, + 15989196, 20716244, 28358191, 29300528 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2063958120364491, 2140267332393533, 699896251574968, + 273268351312140, 375580724713232 +#else + 43547083, 30755372, 34757181, 31892468, 57961144, 10429266, + 50471180, 4072015, 61757200, 5596588 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2024297515263178, 416959329722687, 1079014235017302, + 171612225573183, 1031677520051053 +#else + 38872266, 30164383, 12312895, 6213178, 3117142, 16078565, + 29266239, 2557221, 1768301, 15373193 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2033900009388450, 1744902869870788, 2190580087917640, + 1949474984254121, 231049754293748 +#else + 59865506, 30307471, 62515396, 26001078, 66980936, 32642186, + 66017961, 29049440, 42448372, 3442909 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 343868674606581, 550155864008088, 1450580864229630, + 481603765195050, 896972360018042 +#else + 36898293, 5124042, 14181784, 8197961, 18964734, 21615339, + 22597930, 7176455, 48523386, 13365929 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2151139328380127, 314745882084928, 59756825775204, + 1676664391494651, 2048348075599360 +#else + 59231455, 32054473, 8324672, 4690079, 6261860, 890446, 24538107, + 24984246, 57419264, 30522764 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1528930066340597, 1605003907059576, 1055061081337675, + 1458319101947665, 1234195845213142 +#else + 25008885, 22782833, 62803832, 23916421, 16265035, 15721635, + 683793, 21730648, 15723478, 18390951 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 830430507734812, 1780282976102377, 1425386760709037, + 362399353095425, 2168861579799910 +#else + 57448220, 12374378, 40101865, 26528283, 59384749, 21239917, + 11879681, 5400171, 519526, 32318556 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1155762232730333, 980662895504006, 2053766700883521, + 490966214077606, 510405877041357 +#else + 22258397, 17222199, 59239046, 14613015, 44588609, 30603508, + 46754982, 7315966, 16648397, 7605640 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1683750316716132, 652278688286128, 1221798761193539, + 1897360681476669, 319658166027343 +#else + 59027556, 25089834, 58885552, 9719709, 19259459, 18206220, + 23994941, 28272877, 57640015, 4763277 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 618808732869972, 72755186759744, 2060379135624181, + 1730731526741822, 48862757828238 +#else + 45409620, 9220968, 51378240, 1084136, 41632757, 30702041, + 31088446, 25789909, 55752334, 728111 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1463171970593505, 1143040711767452, 614590986558883, + 1409210575145591, 1882816996436803 +#else + 26047201, 21802961, 60208540, 17032633, 24092067, 9158119, + 62835319, 20998873, 37743427, 28056159 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2230133264691131, 563950955091024, 2042915975426398, + 827314356293472, 672028980152815 +#else + 17510331, 33231575, 5854288, 8403524, 17133918, 30441820, + 38997856, 12327944, 10750447, 10014012 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 264204366029760, 1654686424479449, 2185050199932931, + 2207056159091748, 506015669043634 +#else + 56796096, 3936951, 9156313, 24656749, 16498691, 32559785, + 39627812, 32887699, 3424690, 7540221 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1784446333136569, 1973746527984364, 334856327359575, + 1156769775884610, 1023950124675478 +#else + 30322361, 26590322, 11361004, 29411115, 7433303, 4989748, + 60037442, 17237212, 57864598, 15258045 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2065270940578383, 31477096270353, 306421879113491, + 181958643936686, 1907105536686083 +#else + 13054543, 30774935, 19155473, 469045, 54626067, 4566041, + 5631406, 2711395, 1062915, 28418087 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1496516440779464, 1748485652986458, 872778352227340, + 818358834654919, 97932669284220 +#else + 47868616, 22299832, 37599834, 26054466, 61273100, 13005410, + 61042375, 12194496, 32960380, 1459310 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 471636015770351, 672455402793577, 1804995246884103, + 1842309243470804, 1501862504981682 +#else + 19852015, 7027924, 23669353, 10020366, 8586503, 26896525, + 394196, 27452547, 18638002, 22379495 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1013216974933691, 538921919682598, 1915776722521558, + 1742822441583877, 1886550687916656 +#else + 31395515, 15098109, 26581030, 8030562, 50580950, 28547297, + 9012485, 25970078, 60465776, 28111795 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2094270000643336, 303971879192276, 40801275554748, + 649448917027930, 1818544418535447 +#else + 57916680, 31207054, 65111764, 4529533, 25766844, 607986, + 67095642, 9677542, 34813975, 27098423 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2241737709499165, 549397817447461, 838180519319392, + 1725686958520781, 1705639080897747 +#else + 64664349, 33404494, 29348901, 8186665, 1873760, 12489863, + 36174285, 25714739, 59256019, 25416002 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1216074541925116, 50120933933509, 1565829004133810, + 721728156134580, 349206064666188 +#else + 51872508, 18120922, 7766469, 746860, 26346930, 23332670, + 39775412, 10754587, 57677388, 5203575 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 948617110470858, 346222547451945, 1126511960599975, + 1759386906004538, 493053284802266 +#else + 31834314, 14135496, 66338857, 5159117, 20917671, 16786336, + 59640890, 26216907, 31809242, 7347066 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1454933046815146, 874696014266362, 1467170975468588, + 1432316382418897, 2111710746366763 +#else + 57502122, 21680191, 20414458, 13033986, 13716524, 21862551, + 19797969, 21343177, 15192875, 31466942 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2105387117364450, 1996463405126433, 1303008614294500, + 851908115948209, 1353742049788635 +#else + 54445282, 31372712, 1168161, 29749623, 26747876, 19416341, + 10609329, 12694420, 33473243, 20172328 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 750300956351719, 1487736556065813, 15158817002104, + 1511998221598392, 971739901354129 +#else + 33184999, 11180355, 15832085, 22169002, 65475192, 225883, + 15089336, 22530529, 60973201, 14480052 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1874648163531693, 2124487685930551, 1810030029384882, + 918400043048335, 586348627300650 +#else + 31308717, 27934434, 31030839, 31657333, 15674546, 26971549, + 5496207, 13685227, 27595050, 8737275 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1235084464747900, 1166111146432082, 1745394857881591, + 1405516473883040, 4463504151617 +#else + 46790012, 18404192, 10933842, 17376410, 8335351, 26008410, + 36100512, 20943827, 26498113, 66511 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1663810156463827, 327797390285791, 1341846161759410, + 1964121122800605, 1747470312055380 +#else + 22644435, 24792703, 50437087, 4884561, 64003250, 19995065, + 30540765, 29267685, 53781076, 26039336 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 660005247548233, 2071860029952887, 1358748199950107, + 911703252219107, 1014379923023831 +#else + 39091017, 9834844, 18617207, 30873120, 63706907, 20246925, + 8205539, 13585437, 49981399, 15115438 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2206641276178231, 1690587809721504, 1600173622825126, + 2156096097634421, 1106822408548216 +#else + 23711543, 32881517, 31206560, 25191721, 6164646, 23844445, + 33572981, 32128335, 8236920, 16492939 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1344788193552206, 1949552134239140, 1735915881729557, + 675891104100469, 1834220014427292 +#else + 43198286, 20038905, 40809380, 29050590, 25005589, 25867162, + 19574901, 10071562, 6708380, 27332008 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1920949492387964, 158885288387530, 70308263664033, + 626038464897817, 1468081726101009 +#else + 2101372, 28624378, 19702730, 2367575, 51681697, 1047674, + 5301017, 9328700, 29955601, 21876122 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 622221042073383, 1210146474039168, 1742246422343683, + 1403839361379025, 417189490895736 +#else + 3096359, 9271816, 45488000, 18032587, 52260867, 25961494, + 41216721, 20918836, 57191288, 6216607 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 22727256592983, 168471543384997, 1324340989803650, + 1839310709638189, 504999476432775 +#else + 34493015, 338662, 41913253, 2510421, 37895298, 19734218, + 24822829, 27407865, 40341383, 7525078 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1313240518756327, 1721896294296942, 52263574587266, + 2065069734239232, 804910473424630 +#else + 44042215, 19568808, 16133486, 25658254, 63719298, 778787, + 66198528, 30771936, 47722230, 11994100 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1337466662091884, 1287645354669772, 2018019646776184, + 652181229374245, 898011753211715 +#else + 21691500, 19929806, 66467532, 19187410, 3285880, 30070836, + 42044197, 9718257, 59631427, 13381417 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1969792547910734, 779969968247557, 2011350094423418, + 1823964252907487, 1058949448296945 +#else + 18445390, 29352196, 14979845, 11622458, 65381754, 29971451, + 23111647, 27179185, 28535281, 15779576 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 207343737062002, 1118176942430253, 758894594548164, + 806764629546266, 1157700123092949 +#else + 30098034, 3089662, 57874477, 16662134, 45801924, 11308410, + 53040410, 12021729, 9955285, 17251076 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1273565321399022, 1638509681964574, 759235866488935, + 666015124346707, 897983460943405 +#else + 9734894, 18977602, 59635230, 24415696, 2060391, 11313496, + 48682835, 9924398, 20194861, 13380996 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1717263794012298, 1059601762860786, 1837819172257618, + 1054130665797229, 680893204263559 +#else + 40730762, 25589224, 44941042, 15789296, 49053522, 27385639, + 65123949, 15707770, 26342023, 10146099 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2237039662793603, 2249022333361206, 2058613546633703, + 149454094845279, 2215176649164582 +#else + 41091971, 33334488, 21339190, 33513044, 19745255, 30675732, + 37471583, 2227039, 21612326, 33008704 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 79472182719605, 1851130257050174, 1825744808933107, + 821667333481068, 781795293511946 +#else + 54031477, 1184227, 23562814, 27583990, 46757619, 27205717, + 25764460, 12243797, 46252298, 11649657 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 755822026485370, 152464789723500, 1178207602290608, + 410307889503239, 156581253571278 +#else + 57077370, 11262625, 27384172, 2271902, 26947504, 17556661, + 39943, 6114064, 33514190, 2333242 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1418185496130297, 484520167728613, 1646737281442950, + 1401487684670265, 1349185550126961 +#else + 45675257, 21132610, 8119781, 7219913, 45278342, 24538297, + 60429113, 20883793, 24350577, 20104431 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1495380034400429, 325049476417173, 46346894893933, + 1553408840354856, 828980101835683 +#else + 62992557, 22282898, 43222677, 4843614, 37020525, 690622, + 35572776, 23147595, 8317859, 12352766 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1280337889310282, 2070832742866672, 1640940617225222, + 2098284908289951, 450929509534434 +#else + 18200138, 19078521, 34021104, 30857812, 43406342, 24451920, + 43556767, 31266881, 20712162, 6719373 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 407703353998781, 126572141483652, 286039827513621, + 1999255076709338, 2030511179441770 +#else + 26656189, 6075253, 59250308, 1886071, 38764821, 4262325, + 11117530, 29791222, 26224234, 30256974 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1254958221100483, 1153235960999843, 942907704968834, + 637105404087392, 1149293270147267 +#else + 49939907, 18700334, 63713187, 17184554, 47154818, 14050419, + 21728352, 9493610, 18620611, 17125804 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 894249020470196, 400291701616810, 406878712230981, + 1599128793487393, 1145868722604026 +#else + 53785524, 13325348, 11432106, 5964811, 18609221, 6062965, + 61839393, 23828875, 36407290, 17074774 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1497955250203334, 110116344653260, 1128535642171976, + 1900106496009660, 129792717460909 +#else + 43248326, 22321272, 26961356, 1640861, 34695752, 16816491, + 12248508, 28313793, 13735341, 1934062 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 452487513298665, 1352120549024569, 1173495883910956, + 1999111705922009, 367328130454226 +#else + 25089769, 6742589, 17081145, 20148166, 21909292, 17486451, + 51972569, 29789085, 45830866, 5473615 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1717539401269642, 1475188995688487, 891921989653942, + 836824441505699, 1885988485608364 +#else + 31883658, 25593331, 1083431, 21982029, 22828470, 13290673, + 59983779, 12469655, 29111212, 28103418 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1241784121422547, 187337051947583, 1118481812236193, + 428747751936362, 30358898927325 +#else + 24244947, 18504025, 40845887, 2791539, 52111265, 16666677, + 24367466, 6388839, 56813277, 452382 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2022432361201842, 1088816090685051, 1977843398539868, + 1854834215890724, 564238862029357 +#else + 41468082, 30136590, 5217915, 16224624, 19987036, 29472163, + 42872612, 27639183, 15766061, 8407814 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 938868489100585, 1100285072929025, 1017806255688848, + 1957262154788833, 152787950560442 +#else + 46701865, 13990230, 15495425, 16395525, 5377168, 15166495, + 58191841, 29165478, 59040954, 2276717 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 867319417678923, 620471962942542, 226032203305716, + 342001443957629, 1761675818237336 +#else + 30157899, 12924066, 49396814, 9245752, 19895028, 3368142, + 43281277, 5096218, 22740376, 26251015 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1295072362439987, 931227904689414, 1355731432641687, + 922235735834035, 892227229410209 +#else + 2041139, 19298082, 7783686, 13876377, 41161879, 20201972, + 24051123, 13742383, 51471265, 13295221 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1680989767906154, 535362787031440, 2136691276706570, + 1942228485381244, 1267350086882274 +#else + 33338218, 25048699, 12532112, 7977527, 9106186, 31839181, + 49388668, 28941459, 62657506, 18884987 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 366018233770527, 432660629755596, 126409707644535, + 1973842949591662, 645627343442376 +#else + 47063583, 5454096, 52762316, 6447145, 28862071, 1883651, + 64639598, 29412551, 7770568, 9620597 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 535509430575217, 546885533737322, 1524675609547799, + 2138095752851703, 1260738089896827 +#else + 23208049, 7979712, 33071466, 8149229, 1758231, 22719437, + 30945527, 31860109, 33606523, 18786461 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1159906385590467, 2198530004321610, 714559485023225, + 81880727882151, 1484020820037082 +#else + 1439939, 17283952, 66028874, 32760649, 4625401, 10647766, + 62065063, 1220117, 30494170, 22113633 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1377485731340769, 2046328105512000, 1802058637158797, + 62146136768173, 1356993908853901 +#else + 62071265, 20526136, 64138304, 30492664, 15640973, 26852766, + 40369837, 926049, 65424525, 20220784 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2013612215646735, 1830770575920375, 536135310219832, + 609272325580394, 270684344495013 +#else + 13908495, 30005160, 30919927, 27280607, 45587000, 7989038, + 9021034, 9078865, 3353509, 4033511 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1237542585982777, 2228682050256790, 1385281931622824, + 593183794882890, 493654978552689 +#else + 37445433, 18440821, 32259990, 33209950, 24295848, 20642309, + 23161162, 8839127, 27485041, 7356032 +#endif + }}, + }, + }, + { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 47341488007760, 1891414891220257, 983894663308928, + 176161768286818, 1126261115179708 +#else + 9661008, 705443, 11980065, 28184278, 65480320, 14661172, + 60762722, 2625014, 28431036, 16782598 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1694030170963455, 502038567066200, 1691160065225467, + 949628319562187, 275110186693066 +#else + 43269631, 25243016, 41163352, 7480957, 49427195, 25200248, + 44562891, 14150564, 15970762, 4099461 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1124515748676336, 1661673816593408, 1499640319059718, + 1584929449166988, 558148594103306 +#else + 29262576, 16756590, 26350592, 24760869, 8529670, 22346382, + 13617292, 23617289, 11465738, 8317062 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1784525599998356, 1619698033617383, 2097300287550715, + 258265458103756, 1905684794832758 +#else + 41615764, 26591503, 32500199, 24135381, 44070139, 31252209, + 14898636, 3848455, 20969334, 28396916 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1288941072872766, 931787902039402, 190731008859042, + 2006859954667190, 1005931482221702 +#else + 46724414, 19206718, 48772458, 13884721, 34069410, 2842113, + 45498038, 29904543, 11177094, 14989547 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1465551264822703, 152905080555927, 680334307368453, + 173227184634745, 666407097159852 +#else + 42612143, 21838415, 16959895, 2278463, 12066309, 10137771, + 13515641, 2581286, 38621356, 9930239 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2111017076203943, 1378760485794347, 1248583954016456, + 1352289194864422, 1895180776543896 +#else + 49357223, 31456605, 16544299, 20545132, 51194056, 18605350, + 18345766, 20150679, 16291480, 28240394 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 171348223915638, 662766099800389, 462338943760497, + 466917763340314, 656911292869115 +#else + 33879670, 2553287, 32678213, 9875984, 8534129, 6889387, + 57432090, 6957616, 4368891, 9788741 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 488623681976577, 866497561541722, 1708105560937768, + 1673781214218839, 1506146329818807 +#else + 16660737, 7281060, 56278106, 12911819, 20108584, 25452756, + 45386327, 24941283, 16250551, 22443329 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 160425464456957, 950394373239689, 430497123340934, + 711676555398832, 320964687779005 +#else + 47343357, 2390525, 50557833, 14161979, 1905286, 6414907, + 4689584, 10604807, 36918461, 4782746 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 988979367990485, 1359729327576302, 1301834257246029, + 294141160829308, 29348272277475 +#else + 65754325, 14736940, 59741422, 20261545, 7710541, 19398842, + 57127292, 4383044, 22546403, 437323 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1434382743317910, 100082049942065, 221102347892623, + 186982837860588, 1305765053501834 +#else + 31665558, 21373968, 50922033, 1491338, 48740239, 3294681, + 27343084, 2786261, 36475274, 19457415 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2205916462268190, 499863829790820, 961960554686616, + 158062762756985, 1841471168298305 +#else + 52641566, 32870716, 33734756, 7448551, 19294360, 14334329, + 47418233, 2355318, 47824193, 27440058 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1191737341426592, 1847042034978363, 1382213545049056, + 1039952395710448, 788812858896859 +#else + 15121312, 17758270, 6377019, 27523071, 56310752, 20596586, + 18952176, 15496498, 37728731, 11754227 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1346965964571152, 1291881610839830, 2142916164336056, + 786821641205979, 1571709146321039 +#else + 64471568, 20071356, 8488726, 19250536, 12728760, 31931939, + 7141595, 11724556, 22761615, 23420291 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 787164375951248, 202869205373189, 1356590421032140, + 1431233331032510, 786341368775957 +#else + 16918416, 11729663, 49025285, 3022986, 36093132, 20214772, + 38367678, 21327038, 32851221, 11717399 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 492448143532951, 304105152670757, 1761767168301056, + 233782684697790, 1981295323106089 +#else + 11166615, 7338049, 60386341, 4531519, 37640192, 26252376, + 31474878, 3483633, 65915689, 29523600 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 665807507761866, 1343384868355425, 895831046139653, + 439338948736892, 1986828765695105 +#else + 66923210, 9921304, 31456609, 20017994, 55095045, 13348922, + 33142652, 6546660, 47123585, 29606055 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 756096210874553, 1721699973539149, 258765301727885, + 1390588532210645, 1212530909934781 +#else + 34648249, 11266711, 55911757, 25655328, 31703693, 3855903, + 58571733, 20721383, 36336829, 18068118 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 852891097972275, 1816988871354562, 1543772755726524, + 1174710635522444, 202129090724628 +#else + 49102387, 12709067, 3991746, 27075244, 45617340, 23004006, + 35973516, 17504552, 10928916, 3011958 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1205281565824323, 22430498399418, 992947814485516, + 1392458699738672, 688441466734558 +#else + 60151107, 17960094, 31696058, 334240, 29576716, 14796075, + 36277808, 20749251, 18008030, 10258577 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1050627428414972, 1955849529137135, 2171162376368357, + 91745868298214, 447733118757826 +#else + 44660220, 15655568, 7018479, 29144429, 36794597, 32352840, + 65255398, 1367119, 25127874, 6671743 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1287181461435438, 622722465530711, 880952150571872, + 741035693459198, 311565274989772 +#else + 29701166, 19180498, 56230743, 9279287, 67091296, 13127209, + 21382910, 11042292, 25838796, 4642684 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1003649078149734, 545233927396469, 1849786171789880, + 1318943684880434, 280345687170552 +#else + 46678630, 14955536, 42982517, 8124618, 61739576, 27563961, + 30468146, 19653792, 18423288, 4177476 +#endif + }}, + }, + }, +}; + +#endif // OPENSSL_SMALL + +// Bi[i] = (2*i+1)*B +static const ge_precomp Bi[8] = { + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1288382639258501, 245678601348599, 269427782077623, + 1462984067271730, 137412439391563 +#else + 25967493, 19198397, 29566455, 3660896, 54414519, 4014786, 27544626, + 21800161, 61029707, 2047604 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 62697248952638, 204681361388450, 631292143396476, 338455783676468, + 1213667448819585 +#else + 54563134, 934261, 64385954, 3049989, 66381436, 9406985, 12720692, + 5043384, 19500929, 18085054 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 301289933810280, 1259582250014073, 1422107436869536, + 796239922652654, 1953934009299142 +#else + 58370664, 4489569, 9688441, 18769238, 10184608, 21191052, 29287918, + 11864899, 42594502, 29115885 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1601611775252272, 1720807796594148, 1132070835939856, + 1260455018889551, 2147779492816911 +#else + 15636272, 23865875, 24204772, 25642034, 616976, 16869170, 27787599, + 18782243, 28944399, 32004408 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 316559037616741, 2177824224946892, 1459442586438991, + 1461528397712656, 751590696113597 +#else + 16568933, 4717097, 55552716, 32452109, 15682895, 21747389, 16354576, + 21778470, 7689661, 11199574 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1850748884277385, 1200145853858453, 1068094770532492, + 672251375690438, 1586055907191707 +#else + 30464137, 27578307, 55329429, 17883566, 23220364, 15915852, 7512774, + 10017326, 49359771, 23634074 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 769950342298419, 132954430919746, 844085933195555, 974092374476333, + 726076285546016 +#else + 10861363, 11473154, 27284546, 1981175, 37044515, 12577860, 32867885, + 14515107, 51670560, 10819379 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 425251763115706, 608463272472562, 442562545713235, 837766094556764, + 374555092627893 +#else + 4708026, 6336745, 20377586, 9066809, 55836755, 6594695, 41455196, + 12483687, 54440373, 5581305 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1086255230780037, 274979815921559, 1960002765731872, + 929474102396301, 1190409889297339 +#else + 19563141, 16186464, 37722007, 4097518, 10237984, 29206317, 28542349, + 13850243, 43430843, 17738489 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 665000864555967, 2065379846933859, 370231110385876, 350988370788628, + 1233371373142985 +#else + 5153727, 9909285, 1723747, 30776558, 30523604, 5516873, 19480852, + 5230134, 43156425, 18378665 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2019367628972465, 676711900706637, 110710997811333, + 1108646842542025, 517791959672113 +#else + 36839857, 30090922, 7665485, 10083793, 28475525, 1649722, 20654025, + 16520125, 30598449, 7715701 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 965130719900578, 247011430587952, 526356006571389, 91986625355052, + 2157223321444601 +#else + 28881826, 14381568, 9657904, 3680757, 46927229, 7843315, 35708204, + 1370707, 29794553, 32145132 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1802695059465007, 1664899123557221, 593559490740857, + 2160434469266659, 927570450755031 +#else + 44589871, 26862249, 14201701, 24808930, 43598457, 8844725, 18474211, + 32192982, 54046167, 13821876 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1725674970513508, 1933645953859181, 1542344539275782, + 1767788773573747, 1297447965928905 +#else + 60653668, 25714560, 3374701, 28813570, 40010246, 22982724, 31655027, + 26342105, 18853321, 19333481 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1381809363726107, 1430341051343062, 2061843536018959, + 1551778050872521, 2036394857967624 +#else + 4566811, 20590564, 38133974, 21313742, 59506191, 30723862, 58594505, + 23123294, 2207752, 30344648 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1970894096313054, 528066325833207, 1619374932191227, + 2207306624415883, 1169170329061080 +#else + 41954014, 29368610, 29681143, 7868801, 60254203, 24130566, 54671499, + 32891431, 35997400, 17421995 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 2070390218572616, 1458919061857835, 624171843017421, + 1055332792707765, 433987520732508 +#else + 25576264, 30851218, 7349803, 21739588, 16472781, 9300885, 3844789, + 15725684, 171356, 6466918 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 893653801273833, 1168026499324677, 1242553501121234, + 1306366254304474, 1086752658510815 +#else + 23103977, 13316479, 9739013, 17404951, 817874, 18515490, 8965338, + 19466374, 36393951, 16193876 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 213454002618221, 939771523987438, 1159882208056014, 317388369627517, + 621213314200687 +#else + 33587053, 3180712, 64714734, 14003686, 50205390, 17283591, 17238397, + 4729455, 49034351, 9256799 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1971678598905747, 338026507889165, 762398079972271, 655096486107477, + 42299032696322 +#else + 41926547, 29380300, 32336397, 5036987, 45872047, 11360616, 22616405, + 9761698, 47281666, 630304 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 177130678690680, 1754759263300204, 1864311296286618, + 1180675631479880, 1292726903152791 +#else + 53388152, 2639452, 42871404, 26147950, 9494426, 27780403, 60554312, + 17593437, 64659607, 19263131 +#endif + }}, + }, + { + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1913163449625248, 460779200291993, 2193883288642314, + 1008900146920800, 1721983679009502 +#else + 63957664, 28508356, 9282713, 6866145, 35201802, 32691408, 48168288, + 15033783, 25105118, 25659556 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 1070401523076875, 1272492007800961, 1910153608563310, + 2075579521696771, 1191169788841221 +#else + 42782475, 15950225, 35307649, 18961608, 55446126, 28463506, 1573891, + 30928545, 2198789, 17749813 +#endif + }}, + {{ +#if defined(BORINGSSL_CURVE25519_64BIT) + 692896803108118, 500174642072499, 2068223309439677, + 1162190621851337, 1426986007309901 +#else + 64009494, 10324966, 64867251, 7453182, 61661885, 30818928, 53296841, + 17317989, 34647629, 21263748 +#endif + }}, + }, +}; diff --git a/vendor/ring/crypto/curve25519/internal.h b/vendor/ring/crypto/curve25519/internal.h new file mode 100644 index 00000000..60f2f615 --- /dev/null +++ b/vendor/ring/crypto/curve25519/internal.h @@ -0,0 +1,116 @@ +/* Copyright (c) 2020, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +#ifndef OPENSSL_HEADER_CURVE25519_INTERNAL_H +#define OPENSSL_HEADER_CURVE25519_INTERNAL_H + +#include + +#include "../internal.h" + + +#if defined(OPENSSL_ARM) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_APPLE) +#define BORINGSSL_X25519_NEON + +// x25519_NEON is defined in asm/x25519-arm.S. +void GFp_x25519_NEON(uint8_t out[32], const uint8_t scalar[32], + const uint8_t point[32]); +#endif + +#if defined(BORINGSSL_HAS_UINT128) +#define BORINGSSL_CURVE25519_64BIT +#endif + +#if defined(BORINGSSL_CURVE25519_64BIT) +// An element t, +// entries t[0]...t[4], represents the integer t[0]+2^51 t[1]+2^102 t[2]+2^153 +// t[3]+2^204 t[4]. +// fe limbs are bounded by 1.125*2^51. +// fe_loose limbs are bounded by 3.375*2^51. +typedef uint64_t fe_limb_t; +#define FE_NUM_LIMBS 5 +#else +// An element t, +// entries t[0]...t[9], represents the integer t[0]+2^26 t[1]+2^51 t[2]+2^77 +// t[3]+2^102 t[4]+...+2^230 t[9]. +// fe limbs are bounded by 1.125*2^26,1.125*2^25,1.125*2^26,1.125*2^25,etc. +// fe_loose limbs are bounded by 3.375*2^26,3.375*2^25,3.375*2^26,3.375*2^25,etc. +typedef uint32_t fe_limb_t; +#define FE_NUM_LIMBS 10 +#endif + +// fe means field element. Here the field is \Z/(2^255-19). +// Multiplication and carrying produce fe from fe_loose. +// Keep in sync with `Elem` and `ELEM_LIMBS` in curve25519/ops.rs. +typedef struct fe { fe_limb_t v[FE_NUM_LIMBS]; } fe; + +// Addition and subtraction produce fe_loose from (fe, fe). +// Keep in sync with `Elem` and `ELEM_LIMBS` in curve25519/ops.rs. +typedef struct fe_loose { fe_limb_t v[FE_NUM_LIMBS]; } fe_loose; + +static inline void fe_limbs_copy(fe_limb_t r[], const fe_limb_t a[]) { + for (size_t i = 0; i < FE_NUM_LIMBS; ++i) { + r[i] = a[i]; + } +} + +// ge means group element. +// +// Here the group is the set of pairs (x,y) of field elements (see fe.h) +// satisfying -x^2 + y^2 = 1 + d x^2y^2 +// where d = -121665/121666. +// +// Representations: +// ge_p2 (projective): (X:Y:Z) satisfying x=X/Z, y=Y/Z +// ge_p3 (extended): (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT +// ge_p1p1 (completed): ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T +// ge_precomp (Duif): (y+x,y-x,2dxy) + +// Keep in sync with `Point` in curve25519/ops.rs. +typedef struct { + fe X; + fe Y; + fe Z; +} ge_p2; + + +// Keep in sync with `ExtPoint` in curve25519/ops.rs. +typedef struct { + fe X; + fe Y; + fe Z; + fe T; +} ge_p3; + +typedef struct { + fe_loose X; + fe_loose Y; + fe_loose Z; + fe_loose T; +} ge_p1p1; + +typedef struct { + fe_loose yplusx; + fe_loose yminusx; + fe_loose xy2d; +} ge_precomp; + +typedef struct { + fe_loose YplusX; + fe_loose YminusX; + fe_loose Z; + fe_loose T2d; +} ge_cached; + +#endif // OPENSSL_HEADER_CURVE25519_INTERNAL_H diff --git a/vendor/ring/crypto/curve25519/make_curve25519_tables.py b/vendor/ring/crypto/curve25519/make_curve25519_tables.py new file mode 100755 index 00000000..50dee2a9 --- /dev/null +++ b/vendor/ring/crypto/curve25519/make_curve25519_tables.py @@ -0,0 +1,222 @@ +#!/usr/bin/env python +# coding=utf-8 +# Copyright (c) 2020, Google Inc. +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +import StringIO +import subprocess + +# Base field Z_p +p = 2**255 - 19 + +def modp_inv(x): + return pow(x, p-2, p) + +# Square root of -1 +modp_sqrt_m1 = pow(2, (p-1) // 4, p) + +# Compute corresponding x-coordinate, with low bit corresponding to +# sign, or return None on failure +def recover_x(y, sign): + if y >= p: + return None + x2 = (y*y-1) * modp_inv(d*y*y+1) + if x2 == 0: + if sign: + return None + else: + return 0 + + # Compute square root of x2 + x = pow(x2, (p+3) // 8, p) + if (x*x - x2) % p != 0: + x = x * modp_sqrt_m1 % p + if (x*x - x2) % p != 0: + return None + + if (x & 1) != sign: + x = p - x + return x + +# Curve constant +d = -121665 * modp_inv(121666) % p + +# Base point +g_y = 4 * modp_inv(5) % p +g_x = recover_x(g_y, 0) + +# Points are represented as affine tuples (x, y). + +def point_add(P, Q): + x1, y1 = P + x2, y2 = Q + x3 = ((x1*y2 + y1*x2) * modp_inv(1 + d*x1*x2*y1*y2)) % p + y3 = ((y1*y2 + x1*x2) * modp_inv(1 - d*x1*x2*y1*y2)) % p + return (x3, y3) + +# Computes Q = s * P +def point_mul(s, P): + Q = (0, 1) # Neutral element + while s > 0: + if s & 1: + Q = point_add(Q, P) + P = point_add(P, P) + s >>= 1 + return Q + +def to_bytes(x): + ret = bytearray(32) + for i in range(len(ret)): + ret[i] = x % 256 + x >>= 8 + assert x == 0 + return ret + +def to_ge_precomp(P): + # typedef struct { + # fe_loose yplusx; + # fe_loose yminusx; + # fe_loose xy2d; + # } ge_precomp; + x, y = P + return ((y + x) % p, (y - x) % p, (x * y * 2 * d) % p) + +def to_base_25_5(x): + limbs = (26, 25, 26, 25, 26, 25, 26, 25, 26, 25) + ret = [] + for l in limbs: + ret.append(x & ((1<>= l + assert x == 0 + return ret + +def to_base_51(x): + ret = [] + for _ in range(5): + ret.append(x & ((1<<51) - 1)) + x >>= 51 + assert x == 0 + return ret + +def to_literal(x): + ret = "{{\n#if defined(BORINGSSL_CURVE25519_64BIT)\n" + ret += ", ".join(map(str, to_base_51(x))) + ret += "\n#else\n" + ret += ", ".join(map(str, to_base_25_5(x))) + ret += "\n#endif\n}}" + return ret + +def main(): + d2 = (2 * d) % p + + small_precomp = bytearray() + for i in range(1, 16): + s = (i&1) | ((i&2) << (64-1)) | ((i&4) << (128-2)) | ((i&8) << (192-3)) + P = point_mul(s, (g_x, g_y)) + small_precomp += to_bytes(P[0]) + small_precomp += to_bytes(P[1]) + + large_precomp = [] + for i in range(32): + large_precomp.append([]) + for j in range(8): + P = point_mul((j + 1) << (i * 8), (g_x, g_y)) + large_precomp[-1].append(to_ge_precomp(P)) + + bi_precomp = [] + for i in range(8): + P = point_mul(2*i + 1, (g_x, g_y)) + bi_precomp.append(to_ge_precomp(P)) + + + buf = StringIO.StringIO() + buf.write("""/* Copyright (c) 2020, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +// This file is generated from +// ./make_curve25519_tables.py > curve25519_tables.h + + +static const fe d = """) + buf.write(to_literal(d)) + buf.write("""; + +static const fe sqrtm1 = """) + buf.write(to_literal(modp_sqrt_m1)) + buf.write("""; + +static const fe d2 = """) + buf.write(to_literal(d2)) + buf.write("""; + +#if defined(OPENSSL_SMALL) + +// This block of code replaces the standard base-point table with a much smaller +// one. The standard table is 30,720 bytes while this one is just 960. +// +// This table contains 15 pairs of group elements, (x, y), where each field +// element is serialised with |fe_tobytes|. If |i| is the index of the group +// element then consider i+1 as a four-bit number: (iâ‚€, iâ‚, iâ‚‚, i₃) (where iâ‚€ +// is the most significant bit). The value of the group element is then: +// (i₀×2^192 + iâ‚×2^128 + i₂×2^64 + i₃)G, where G is the generator. +static const uint8_t k25519SmallPrecomp[15 * 2 * 32] = {""") + for i, b in enumerate(small_precomp): + buf.write("0x%02x, " % b) + buf.write(""" +}; + +#else + +// k25519Precomp[i][j] = (j+1)*256^i*B +static const ge_precomp k25519Precomp[32][8] = { +""") + for child in large_precomp: + buf.write("{\n") + for val in child: + buf.write("{\n") + for term in val: + buf.write(to_literal(term) + ",\n") + buf.write("},\n") + buf.write("},\n") + buf.write("""}; + +#endif // OPENSSL_SMALL + +// Bi[i] = (2*i+1)*B +static const ge_precomp Bi[8] = { +""") + for val in bi_precomp: + buf.write("{\n") + for term in val: + buf.write(to_literal(term) + ",\n") + buf.write("},\n") + buf.write("""}; +""") + + proc = subprocess.Popen(["clang-format"], stdin=subprocess.PIPE) + proc.communicate(buf.getvalue()) + +if __name__ == "__main__": + main() diff --git a/vendor/ring/crypto/fipsmodule/aes/aes_nohw.c b/vendor/ring/crypto/fipsmodule/aes/aes_nohw.c new file mode 100644 index 00000000..19b019e7 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/aes/aes_nohw.c @@ -0,0 +1,961 @@ +/* Copyright (c) 2019, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +#include + +#include "../../internal.h" + +#if defined(OPENSSL_SSE2) +#include +#endif + + +// This file contains a constant-time implementation of AES, bitsliced with +// 32-bit, 64-bit, or 128-bit words, operating on two-, four-, and eight-block +// batches, respectively. The 128-bit implementation requires SSE2 intrinsics. +// +// This implementation is based on the algorithms described in the following +// references: +// - https://bearssl.org/constanttime.html#aes +// - https://eprint.iacr.org/2009/129.pdf +// - https://eprint.iacr.org/2009/191.pdf + + +// Word operations. +// +// An aes_word_t is the word used for this AES implementation. Throughout this +// file, bits and bytes are ordered little-endian, though "left" and "right" +// shifts match the operations themselves, which makes them reversed in a +// little-endian, left-to-right reading. +// +// Eight |aes_word_t|s contain |AES_NOHW_BATCH_SIZE| blocks. The bits in an +// |aes_word_t| are divided into 16 consecutive groups of |AES_NOHW_BATCH_SIZE| +// bits each, each corresponding to a byte in an AES block in column-major +// order (AES's byte order). We refer to these as "logical bytes". Note, in the +// 32-bit and 64-bit implementations, they are smaller than a byte. (The +// contents of a logical byte will be described later.) +// +// MSVC does not support C bit operators on |__m128i|, so the wrapper functions +// |aes_nohw_and|, etc., should be used instead. Note |aes_nohw_shift_left| and +// |aes_nohw_shift_right| measure the shift in logical bytes. That is, the shift +// value ranges from 0 to 15 independent of |aes_word_t| and +// |AES_NOHW_BATCH_SIZE|. +// +// This ordering is different from https://eprint.iacr.org/2009/129.pdf, which +// uses row-major order. Matching the AES order was easier to reason about, and +// we do not have PSHUFB available to arbitrarily permute bytes. + +#if defined(OPENSSL_SSE2) +typedef __m128i aes_word_t; +// AES_NOHW_WORD_SIZE is sizeof(aes_word_t). alignas(sizeof(T)) does not work in +// MSVC, so we define a constant. +#define AES_NOHW_WORD_SIZE 16 +#define AES_NOHW_BATCH_SIZE 8 +#define AES_NOHW_ROW0_MASK \ + _mm_set_epi32(0x000000ff, 0x000000ff, 0x000000ff, 0x000000ff) +#define AES_NOHW_ROW1_MASK \ + _mm_set_epi32(0x0000ff00, 0x0000ff00, 0x0000ff00, 0x0000ff00) +#define AES_NOHW_ROW2_MASK \ + _mm_set_epi32(0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000) +#define AES_NOHW_ROW3_MASK \ + _mm_set_epi32(0xff000000, 0xff000000, 0xff000000, 0xff000000) +#define AES_NOHW_COL01_MASK \ + _mm_set_epi32(0x00000000, 0x00000000, 0xffffffff, 0xffffffff) +#define AES_NOHW_COL2_MASK \ + _mm_set_epi32(0x00000000, 0xffffffff, 0x00000000, 0x00000000) +#define AES_NOHW_COL3_MASK \ + _mm_set_epi32(0xffffffff, 0x00000000, 0x00000000, 0x00000000) + +static inline aes_word_t aes_nohw_and(aes_word_t a, aes_word_t b) { + return _mm_and_si128(a, b); +} + +static inline aes_word_t aes_nohw_or(aes_word_t a, aes_word_t b) { + return _mm_or_si128(a, b); +} + +static inline aes_word_t aes_nohw_xor(aes_word_t a, aes_word_t b) { + return _mm_xor_si128(a, b); +} + +static inline aes_word_t aes_nohw_not(aes_word_t a) { + return _mm_xor_si128( + a, _mm_set_epi32(0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff)); +} + +// These are macros because parameters to |_mm_slli_si128| and |_mm_srli_si128| +// must be constants. +#define aes_nohw_shift_left(/* aes_word_t */ a, /* const */ i) \ + _mm_slli_si128((a), (i)) +#define aes_nohw_shift_right(/* aes_word_t */ a, /* const */ i) \ + _mm_srli_si128((a), (i)) +#else // !OPENSSL_SSE2 +#if defined(OPENSSL_64_BIT) +typedef uint64_t aes_word_t; +#define AES_NOHW_WORD_SIZE 8 +#define AES_NOHW_BATCH_SIZE 4 +#define AES_NOHW_ROW0_MASK UINT64_C(0x000f000f000f000f) +#define AES_NOHW_ROW1_MASK UINT64_C(0x00f000f000f000f0) +#define AES_NOHW_ROW2_MASK UINT64_C(0x0f000f000f000f00) +#define AES_NOHW_ROW3_MASK UINT64_C(0xf000f000f000f000) +#define AES_NOHW_COL01_MASK UINT64_C(0x00000000ffffffff) +#define AES_NOHW_COL2_MASK UINT64_C(0x0000ffff00000000) +#define AES_NOHW_COL3_MASK UINT64_C(0xffff000000000000) +#else // !OPENSSL_64_BIT +typedef uint32_t aes_word_t; +#define AES_NOHW_WORD_SIZE 4 +#define AES_NOHW_BATCH_SIZE 2 +#define AES_NOHW_ROW0_MASK 0x03030303 +#define AES_NOHW_ROW1_MASK 0x0c0c0c0c +#define AES_NOHW_ROW2_MASK 0x30303030 +#define AES_NOHW_ROW3_MASK 0xc0c0c0c0 +#define AES_NOHW_COL01_MASK 0x0000ffff +#define AES_NOHW_COL2_MASK 0x00ff0000 +#define AES_NOHW_COL3_MASK 0xff000000 +#endif // OPENSSL_64_BIT + +static inline aes_word_t aes_nohw_and(aes_word_t a, aes_word_t b) { + return a & b; +} + +static inline aes_word_t aes_nohw_or(aes_word_t a, aes_word_t b) { + return a | b; +} + +static inline aes_word_t aes_nohw_xor(aes_word_t a, aes_word_t b) { + return a ^ b; +} + +static inline aes_word_t aes_nohw_not(aes_word_t a) { return ~a; } + +static inline aes_word_t aes_nohw_shift_left(aes_word_t a, aes_word_t i) { + return a << (i * AES_NOHW_BATCH_SIZE); +} + +static inline aes_word_t aes_nohw_shift_right(aes_word_t a, aes_word_t i) { + return a >> (i * AES_NOHW_BATCH_SIZE); +} +#endif // OPENSSL_SSE2 + +OPENSSL_STATIC_ASSERT(AES_NOHW_BATCH_SIZE * 128 == 8 * 8 * sizeof(aes_word_t), + "batch size does not match word size"); +OPENSSL_STATIC_ASSERT(AES_NOHW_WORD_SIZE == sizeof(aes_word_t), + "AES_NOHW_WORD_SIZE is incorrect"); + + +// Block representations. +// +// This implementation uses three representations for AES blocks. First, the +// public API represents blocks as uint8_t[16] in the usual way. Second, most +// AES steps are evaluated in bitsliced form, stored in an |AES_NOHW_BATCH|. +// This stores |AES_NOHW_BATCH_SIZE| blocks in bitsliced order. For 64-bit words +// containing bitsliced blocks a, b, c, d, this would be as follows (vertical +// bars divide logical bytes): +// +// batch.w[0] = a0 b0 c0 d0 | a8 b8 c8 d8 | a16 b16 c16 d16 ... +// batch.w[1] = a1 b1 c1 d1 | a9 b9 c9 d9 | a17 b17 c17 d17 ... +// batch.w[2] = a2 b2 c2 d2 | a10 b10 c10 d10 | a18 b18 c18 d18 ... +// batch.w[3] = a3 b3 c3 d3 | a11 b11 c11 d11 | a19 b19 c19 d19 ... +// ... +// +// Finally, an individual block may be stored as an intermediate form in an +// aes_word_t[AES_NOHW_BLOCK_WORDS]. In this form, we permute the bits in each +// block, so that block[0]'s ith logical byte contains least-significant +// |AES_NOHW_BATCH_SIZE| bits of byte i, block[1] contains the next group of +// |AES_NOHW_BATCH_SIZE| bits, and so on. We refer to this transformation as +// "compacting" the block. Note this is no-op with 128-bit words because then +// |AES_NOHW_BLOCK_WORDS| is one and |AES_NOHW_BATCH_SIZE| is eight. For 64-bit +// words, one block would be stored in two words: +// +// block[0] = a0 a1 a2 a3 | a8 a9 a10 a11 | a16 a17 a18 a19 ... +// block[1] = a4 a5 a6 a7 | a12 a13 a14 a15 | a20 a21 a22 a23 ... +// +// Observe that the distances between corresponding bits in bitsliced and +// compact bit orders match. If we line up corresponding words of each block, +// the bitsliced and compact representations may be converted by tranposing bits +// in corresponding logical bytes. Continuing the 64-bit example: +// +// block_a[0] = a0 a1 a2 a3 | a8 a9 a10 a11 | a16 a17 a18 a19 ... +// block_b[0] = b0 b1 b2 b3 | b8 b9 b10 b11 | b16 b17 b18 b19 ... +// block_c[0] = c0 c1 c2 c3 | c8 c9 c10 c11 | c16 c17 c18 c19 ... +// block_d[0] = d0 d1 d2 d3 | d8 d9 d10 d11 | d16 d17 d18 d19 ... +// +// batch.w[0] = a0 b0 c0 d0 | a8 b8 c8 d8 | a16 b16 c16 d16 ... +// batch.w[1] = a1 b1 c1 d1 | a9 b9 c9 d9 | a17 b17 c17 d17 ... +// batch.w[2] = a2 b2 c2 d2 | a10 b10 c10 d10 | a18 b18 c18 d18 ... +// batch.w[3] = a3 b3 c3 d3 | a11 b11 c11 d11 | a19 b19 c19 d19 ... +// +// Note also that bitwise operations and (logical) byte permutations on an +// |aes_word_t| work equally for the bitsliced and compact words. +// +// We use the compact form in the |AES_KEY| representation to save work +// inflating round keys into |AES_NOHW_BATCH|. The compact form also exists +// temporarily while moving blocks in or out of an |AES_NOHW_BATCH|, immediately +// before or after |aes_nohw_transpose|. + +#define AES_NOHW_BLOCK_WORDS (16 / sizeof(aes_word_t)) + +// An AES_NOHW_BATCH stores |AES_NOHW_BATCH_SIZE| blocks. Unless otherwise +// specified, it is in bitsliced form. +typedef struct { + aes_word_t w[8]; +} AES_NOHW_BATCH; + +// An AES_NOHW_SCHEDULE is an expanded bitsliced AES key schedule. It is +// suitable for encryption or decryption. It is as large as |AES_NOHW_BATCH| +// |AES_KEY|s so it should not be used as a long-term key representation. +typedef struct { + // keys is an array of batches, one for each round key. Each batch stores + // |AES_NOHW_BATCH_SIZE| copies of the round key in bitsliced form. + AES_NOHW_BATCH keys[AES_MAXNR + 1]; +} AES_NOHW_SCHEDULE; + +// aes_nohw_batch_set sets the |i|th block of |batch| to |in|. |batch| is in +// compact form. +static inline void aes_nohw_batch_set(AES_NOHW_BATCH *batch, + const aes_word_t in[AES_NOHW_BLOCK_WORDS], + size_t i) { + // Note the words are interleaved. The order comes from |aes_nohw_transpose|. + // If |i| is zero and this is the 64-bit implementation, in[0] contains bits + // 0-3 and in[1] contains bits 4-7. We place in[0] at w[0] and in[1] at + // w[4] so that bits 0 and 4 are in the correct position. (In general, bits + // along diagonals of |AES_NOHW_BATCH_SIZE| by |AES_NOHW_BATCH_SIZE| squares + // will be correctly placed.) + dev_assert_secret(i < AES_NOHW_BATCH_SIZE); +#if defined(OPENSSL_SSE2) + batch->w[i] = in[0]; +#elif defined(OPENSSL_64_BIT) + batch->w[i] = in[0]; + batch->w[i + 4] = in[1]; +#else + batch->w[i] = in[0]; + batch->w[i + 2] = in[1]; + batch->w[i + 4] = in[2]; + batch->w[i + 6] = in[3]; +#endif +} + +// aes_nohw_batch_get writes the |i|th block of |batch| to |out|. |batch| is in +// compact form. +static inline void aes_nohw_batch_get(const AES_NOHW_BATCH *batch, + aes_word_t out[AES_NOHW_BLOCK_WORDS], + size_t i) { + dev_assert_secret(i < AES_NOHW_BATCH_SIZE); +#if defined(OPENSSL_SSE2) + out[0] = batch->w[i]; +#elif defined(OPENSSL_64_BIT) + out[0] = batch->w[i]; + out[1] = batch->w[i + 4]; +#else + out[0] = batch->w[i]; + out[1] = batch->w[i + 2]; + out[2] = batch->w[i + 4]; + out[3] = batch->w[i + 6]; +#endif +} + +#if !defined(OPENSSL_SSE2) +// aes_nohw_delta_swap returns |a| with bits |a & mask| and +// |a & (mask << shift)| swapped. |mask| and |mask << shift| may not overlap. +static inline aes_word_t aes_nohw_delta_swap(aes_word_t a, aes_word_t mask, + aes_word_t shift) { + // See + // https://reflectionsonsecurity.wordpress.com/2014/05/11/efficient-bit-permutation-using-delta-swaps/ + aes_word_t b = (a ^ (a >> shift)) & mask; + return a ^ b ^ (b << shift); +} + +// In the 32-bit and 64-bit implementations, a block spans multiple words. +// |aes_nohw_compact_block| must permute bits across different words. First we +// implement |aes_nohw_compact_word| which performs a smaller version of the +// transformation which stays within a single word. +// +// These transformations are generalizations of the output of +// http://programming.sirrida.de/calcperm.php on smaller inputs. +#if defined(OPENSSL_64_BIT) +static inline uint64_t aes_nohw_compact_word(uint64_t a) { + // Numbering the 64/2 = 16 4-bit chunks, least to most significant, we swap + // quartets of those chunks: + // 0 1 2 3 | 4 5 6 7 | 8 9 10 11 | 12 13 14 15 => + // 0 2 1 3 | 4 6 5 7 | 8 10 9 11 | 12 14 13 15 + a = aes_nohw_delta_swap(a, UINT64_C(0x00f000f000f000f0), 4); + // Swap quartets of 8-bit chunks (still numbering by 4-bit chunks): + // 0 2 1 3 | 4 6 5 7 | 8 10 9 11 | 12 14 13 15 => + // 0 2 4 6 | 1 3 5 7 | 8 10 12 14 | 9 11 13 15 + a = aes_nohw_delta_swap(a, UINT64_C(0x0000ff000000ff00), 8); + // Swap quartets of 16-bit chunks (still numbering by 4-bit chunks): + // 0 2 4 6 | 1 3 5 7 | 8 10 12 14 | 9 11 13 15 => + // 0 2 4 6 | 8 10 12 14 | 1 3 5 7 | 9 11 13 15 + a = aes_nohw_delta_swap(a, UINT64_C(0x00000000ffff0000), 16); + return a; +} + +static inline uint64_t aes_nohw_uncompact_word(uint64_t a) { + // Reverse the steps of |aes_nohw_uncompact_word|. + a = aes_nohw_delta_swap(a, UINT64_C(0x00000000ffff0000), 16); + a = aes_nohw_delta_swap(a, UINT64_C(0x0000ff000000ff00), 8); + a = aes_nohw_delta_swap(a, UINT64_C(0x00f000f000f000f0), 4); + return a; +} +#else // !OPENSSL_64_BIT +static inline uint32_t aes_nohw_compact_word(uint32_t a) { + // Numbering the 32/2 = 16 pairs of bits, least to most significant, we swap: + // 0 1 2 3 | 4 5 6 7 | 8 9 10 11 | 12 13 14 15 => + // 0 4 2 6 | 1 5 3 7 | 8 12 10 14 | 9 13 11 15 + // Note: 0x00cc = 0b0000_0000_1100_1100 + // 0x00cc << 6 = 0b0011_0011_0000_0000 + a = aes_nohw_delta_swap(a, 0x00cc00cc, 6); + // Now we swap groups of four bits (still numbering by pairs): + // 0 4 2 6 | 1 5 3 7 | 8 12 10 14 | 9 13 11 15 => + // 0 4 8 12 | 1 5 9 13 | 2 6 10 14 | 3 7 11 15 + // Note: 0x0000_f0f0 << 12 = 0x0f0f_0000 + a = aes_nohw_delta_swap(a, 0x0000f0f0, 12); + return a; +} + +static inline uint32_t aes_nohw_uncompact_word(uint32_t a) { + // Reverse the steps of |aes_nohw_uncompact_word|. + a = aes_nohw_delta_swap(a, 0x0000f0f0, 12); + a = aes_nohw_delta_swap(a, 0x00cc00cc, 6); + return a; +} + +static inline uint32_t aes_nohw_word_from_bytes(uint8_t a0, uint8_t a1, + uint8_t a2, uint8_t a3) { + return (uint32_t)a0 | ((uint32_t)a1 << 8) | ((uint32_t)a2 << 16) | + ((uint32_t)a3 << 24); +} + +static inline uint8_t lo(uint32_t a) { + return (uint8_t)a; +} + +#endif // OPENSSL_64_BIT +#endif // !OPENSSL_SSE2 + +static inline void aes_nohw_compact_block(aes_word_t out[AES_NOHW_BLOCK_WORDS], + const uint8_t in[16]) { + GFp_memcpy(out, in, 16); +#if defined(OPENSSL_SSE2) + // No conversions needed. +#elif defined(OPENSSL_64_BIT) + uint64_t a0 = aes_nohw_compact_word(out[0]); + uint64_t a1 = aes_nohw_compact_word(out[1]); + out[0] = (a0 & UINT64_C(0x00000000ffffffff)) | (a1 << 32); + out[1] = (a1 & UINT64_C(0xffffffff00000000)) | (a0 >> 32); +#else + uint32_t a0 = aes_nohw_compact_word(out[0]); + uint32_t a1 = aes_nohw_compact_word(out[1]); + uint32_t a2 = aes_nohw_compact_word(out[2]); + uint32_t a3 = aes_nohw_compact_word(out[3]); + // Note clang, when building for ARM Thumb2, will sometimes miscompile + // expressions such as (a0 & 0x0000ff00) << 8, particularly when building + // without optimizations. This bug was introduced in + // https://reviews.llvm.org/rL340261 and fixed in + // https://reviews.llvm.org/rL351310. The following is written to avoid this. + out[0] = aes_nohw_word_from_bytes(lo(a0), lo(a1), lo(a2), lo(a3)); + out[1] = aes_nohw_word_from_bytes(lo(a0 >> 8), lo(a1 >> 8), lo(a2 >> 8), lo(a3 >> 8)); + out[2] = aes_nohw_word_from_bytes(lo(a0 >> 16), lo(a1 >> 16), lo(a2 >> 16), lo(a3 >> 16)); + out[3] = aes_nohw_word_from_bytes(lo(a0 >> 24), lo(a1 >> 24), lo(a2 >> 24), lo(a3 >> 24)); +#endif +} + +static inline void aes_nohw_uncompact_block( + uint8_t out[16], const aes_word_t in[AES_NOHW_BLOCK_WORDS]) { +#if defined(OPENSSL_SSE2) + GFp_memcpy(out, in, 16); // No conversions needed. +#elif defined(OPENSSL_64_BIT) + uint64_t a0 = in[0]; + uint64_t a1 = in[1]; + uint64_t b0 = + aes_nohw_uncompact_word((a0 & UINT64_C(0x00000000ffffffff)) | (a1 << 32)); + uint64_t b1 = + aes_nohw_uncompact_word((a1 & UINT64_C(0xffffffff00000000)) | (a0 >> 32)); + GFp_memcpy(out, &b0, 8); + GFp_memcpy(out + 8, &b1, 8); +#else + uint32_t a0 = in[0]; + uint32_t a1 = in[1]; + uint32_t a2 = in[2]; + uint32_t a3 = in[3]; + // Note clang, when building for ARM Thumb2, will sometimes miscompile + // expressions such as (a0 & 0x0000ff00) << 8, particularly when building + // without optimizations. This bug was introduced in + // https://reviews.llvm.org/rL340261 and fixed in + // https://reviews.llvm.org/rL351310. The following is written to avoid this. + uint32_t b0 = aes_nohw_word_from_bytes(lo(a0), lo(a1), lo(a2), lo(a3)); + uint32_t b1 = aes_nohw_word_from_bytes(lo(a0 >> 8), lo(a1 >> 8), lo(a2 >> 8), lo(a3 >> 8)); + uint32_t b2 = + aes_nohw_word_from_bytes(lo(a0 >> 16), lo(a1 >> 16), lo(a2 >> 16), lo(a3 >> 16)); + uint32_t b3 = + aes_nohw_word_from_bytes(lo(a0 >> 24), lo(a1 >> 24), lo(a2 >> 24), lo(a3 >> 24)); + b0 = aes_nohw_uncompact_word(b0); + b1 = aes_nohw_uncompact_word(b1); + b2 = aes_nohw_uncompact_word(b2); + b3 = aes_nohw_uncompact_word(b3); + GFp_memcpy(out, &b0, 4); + GFp_memcpy(out + 4, &b1, 4); + GFp_memcpy(out + 8, &b2, 4); + GFp_memcpy(out + 12, &b3, 4); +#endif +} + +// aes_nohw_swap_bits is a variation on a delta swap. It swaps the bits in +// |*a & (mask << shift)| with the bits in |*b & mask|. |mask| and +// |mask << shift| must not overlap. |mask| is specified as a |uint32_t|, but it +// is repeated to the full width of |aes_word_t|. +#if defined(OPENSSL_SSE2) +// This must be a macro because |_mm_srli_epi32| and |_mm_slli_epi32| require +// constant shift values. +#define aes_nohw_swap_bits(/*__m128i* */ a, /*__m128i* */ b, \ + /* uint32_t */ mask, /* const */ shift) \ + do { \ + __m128i swap = \ + _mm_and_si128(_mm_xor_si128(_mm_srli_epi32(*(a), (shift)), *(b)), \ + _mm_set_epi32((mask), (mask), (mask), (mask))); \ + *(a) = _mm_xor_si128(*(a), _mm_slli_epi32(swap, (shift))); \ + *(b) = _mm_xor_si128(*(b), swap); \ + \ + } while (0) +#else +static inline void aes_nohw_swap_bits(aes_word_t *a, aes_word_t *b, + uint32_t mask, aes_word_t shift) { +#if defined(OPENSSL_64_BIT) + aes_word_t mask_w = (((uint64_t)mask) << 32) | mask; +#else + aes_word_t mask_w = mask; +#endif + // This is a variation on a delta swap. + aes_word_t swap = ((*a >> shift) ^ *b) & mask_w; + *a ^= swap << shift; + *b ^= swap; +} +#endif // OPENSSL_SSE2 + +// aes_nohw_transpose converts |batch| to and from bitsliced form. It divides +// the 8 × word_size bits into AES_NOHW_BATCH_SIZE × AES_NOHW_BATCH_SIZE squares +// and transposes each square. +static void aes_nohw_transpose(AES_NOHW_BATCH *batch) { + // Swap bits with index 0 and 1 mod 2 (0x55 = 0b01010101). + aes_nohw_swap_bits(&batch->w[0], &batch->w[1], 0x55555555, 1); + aes_nohw_swap_bits(&batch->w[2], &batch->w[3], 0x55555555, 1); + aes_nohw_swap_bits(&batch->w[4], &batch->w[5], 0x55555555, 1); + aes_nohw_swap_bits(&batch->w[6], &batch->w[7], 0x55555555, 1); + +#if AES_NOHW_BATCH_SIZE >= 4 + // Swap bits with index 0-1 and 2-3 mod 4 (0x33 = 0b00110011). + aes_nohw_swap_bits(&batch->w[0], &batch->w[2], 0x33333333, 2); + aes_nohw_swap_bits(&batch->w[1], &batch->w[3], 0x33333333, 2); + aes_nohw_swap_bits(&batch->w[4], &batch->w[6], 0x33333333, 2); + aes_nohw_swap_bits(&batch->w[5], &batch->w[7], 0x33333333, 2); +#endif + +#if AES_NOHW_BATCH_SIZE >= 8 + // Swap bits with index 0-3 and 4-7 mod 8 (0x0f = 0b00001111). + aes_nohw_swap_bits(&batch->w[0], &batch->w[4], 0x0f0f0f0f, 4); + aes_nohw_swap_bits(&batch->w[1], &batch->w[5], 0x0f0f0f0f, 4); + aes_nohw_swap_bits(&batch->w[2], &batch->w[6], 0x0f0f0f0f, 4); + aes_nohw_swap_bits(&batch->w[3], &batch->w[7], 0x0f0f0f0f, 4); +#endif +} + +// aes_nohw_to_batch initializes |out| with the |num_blocks| blocks from |in|. +// |num_blocks| must be at most |AES_NOHW_BATCH|. +static void aes_nohw_to_batch(AES_NOHW_BATCH *out, const uint8_t *in, + size_t num_blocks) { + // Don't leave unused blocks uninitialized. + GFp_memset(out, 0, sizeof(AES_NOHW_BATCH)); + debug_assert_nonsecret(num_blocks <= AES_NOHW_BATCH_SIZE); + for (size_t i = 0; i < num_blocks; i++) { + aes_word_t block[AES_NOHW_BLOCK_WORDS]; + aes_nohw_compact_block(block, in + 16 * i); + aes_nohw_batch_set(out, block, i); + } + + aes_nohw_transpose(out); +} + +// aes_nohw_to_batch writes the first |num_blocks| blocks in |batch| to |out|. +// |num_blocks| must be at most |AES_NOHW_BATCH|. +static void aes_nohw_from_batch(uint8_t *out, size_t num_blocks, + const AES_NOHW_BATCH *batch) { + AES_NOHW_BATCH copy = *batch; + aes_nohw_transpose(©); + + debug_assert_nonsecret(num_blocks <= AES_NOHW_BATCH_SIZE); + for (size_t i = 0; i < num_blocks; i++) { + aes_word_t block[AES_NOHW_BLOCK_WORDS]; + aes_nohw_batch_get(©, block, i); + aes_nohw_uncompact_block(out + 16 * i, block); + } +} + + +// AES round steps. + +static void aes_nohw_add_round_key(AES_NOHW_BATCH *batch, + const AES_NOHW_BATCH *key) { + for (size_t i = 0; i < 8; i++) { + batch->w[i] = aes_nohw_xor(batch->w[i], key->w[i]); + } +} + +static void aes_nohw_sub_bytes(AES_NOHW_BATCH *batch) { + // See https://eprint.iacr.org/2009/191.pdf, Appendix C. + aes_word_t x0 = batch->w[7]; + aes_word_t x1 = batch->w[6]; + aes_word_t x2 = batch->w[5]; + aes_word_t x3 = batch->w[4]; + aes_word_t x4 = batch->w[3]; + aes_word_t x5 = batch->w[2]; + aes_word_t x6 = batch->w[1]; + aes_word_t x7 = batch->w[0]; + + // Figure 2, the top linear transformation. + aes_word_t y14 = aes_nohw_xor(x3, x5); + aes_word_t y13 = aes_nohw_xor(x0, x6); + aes_word_t y9 = aes_nohw_xor(x0, x3); + aes_word_t y8 = aes_nohw_xor(x0, x5); + aes_word_t t0 = aes_nohw_xor(x1, x2); + aes_word_t y1 = aes_nohw_xor(t0, x7); + aes_word_t y4 = aes_nohw_xor(y1, x3); + aes_word_t y12 = aes_nohw_xor(y13, y14); + aes_word_t y2 = aes_nohw_xor(y1, x0); + aes_word_t y5 = aes_nohw_xor(y1, x6); + aes_word_t y3 = aes_nohw_xor(y5, y8); + aes_word_t t1 = aes_nohw_xor(x4, y12); + aes_word_t y15 = aes_nohw_xor(t1, x5); + aes_word_t y20 = aes_nohw_xor(t1, x1); + aes_word_t y6 = aes_nohw_xor(y15, x7); + aes_word_t y10 = aes_nohw_xor(y15, t0); + aes_word_t y11 = aes_nohw_xor(y20, y9); + aes_word_t y7 = aes_nohw_xor(x7, y11); + aes_word_t y17 = aes_nohw_xor(y10, y11); + aes_word_t y19 = aes_nohw_xor(y10, y8); + aes_word_t y16 = aes_nohw_xor(t0, y11); + aes_word_t y21 = aes_nohw_xor(y13, y16); + aes_word_t y18 = aes_nohw_xor(x0, y16); + + // Figure 3, the middle non-linear section. + aes_word_t t2 = aes_nohw_and(y12, y15); + aes_word_t t3 = aes_nohw_and(y3, y6); + aes_word_t t4 = aes_nohw_xor(t3, t2); + aes_word_t t5 = aes_nohw_and(y4, x7); + aes_word_t t6 = aes_nohw_xor(t5, t2); + aes_word_t t7 = aes_nohw_and(y13, y16); + aes_word_t t8 = aes_nohw_and(y5, y1); + aes_word_t t9 = aes_nohw_xor(t8, t7); + aes_word_t t10 = aes_nohw_and(y2, y7); + aes_word_t t11 = aes_nohw_xor(t10, t7); + aes_word_t t12 = aes_nohw_and(y9, y11); + aes_word_t t13 = aes_nohw_and(y14, y17); + aes_word_t t14 = aes_nohw_xor(t13, t12); + aes_word_t t15 = aes_nohw_and(y8, y10); + aes_word_t t16 = aes_nohw_xor(t15, t12); + aes_word_t t17 = aes_nohw_xor(t4, t14); + aes_word_t t18 = aes_nohw_xor(t6, t16); + aes_word_t t19 = aes_nohw_xor(t9, t14); + aes_word_t t20 = aes_nohw_xor(t11, t16); + aes_word_t t21 = aes_nohw_xor(t17, y20); + aes_word_t t22 = aes_nohw_xor(t18, y19); + aes_word_t t23 = aes_nohw_xor(t19, y21); + aes_word_t t24 = aes_nohw_xor(t20, y18); + aes_word_t t25 = aes_nohw_xor(t21, t22); + aes_word_t t26 = aes_nohw_and(t21, t23); + aes_word_t t27 = aes_nohw_xor(t24, t26); + aes_word_t t28 = aes_nohw_and(t25, t27); + aes_word_t t29 = aes_nohw_xor(t28, t22); + aes_word_t t30 = aes_nohw_xor(t23, t24); + aes_word_t t31 = aes_nohw_xor(t22, t26); + aes_word_t t32 = aes_nohw_and(t31, t30); + aes_word_t t33 = aes_nohw_xor(t32, t24); + aes_word_t t34 = aes_nohw_xor(t23, t33); + aes_word_t t35 = aes_nohw_xor(t27, t33); + aes_word_t t36 = aes_nohw_and(t24, t35); + aes_word_t t37 = aes_nohw_xor(t36, t34); + aes_word_t t38 = aes_nohw_xor(t27, t36); + aes_word_t t39 = aes_nohw_and(t29, t38); + aes_word_t t40 = aes_nohw_xor(t25, t39); + aes_word_t t41 = aes_nohw_xor(t40, t37); + aes_word_t t42 = aes_nohw_xor(t29, t33); + aes_word_t t43 = aes_nohw_xor(t29, t40); + aes_word_t t44 = aes_nohw_xor(t33, t37); + aes_word_t t45 = aes_nohw_xor(t42, t41); + aes_word_t z0 = aes_nohw_and(t44, y15); + aes_word_t z1 = aes_nohw_and(t37, y6); + aes_word_t z2 = aes_nohw_and(t33, x7); + aes_word_t z3 = aes_nohw_and(t43, y16); + aes_word_t z4 = aes_nohw_and(t40, y1); + aes_word_t z5 = aes_nohw_and(t29, y7); + aes_word_t z6 = aes_nohw_and(t42, y11); + aes_word_t z7 = aes_nohw_and(t45, y17); + aes_word_t z8 = aes_nohw_and(t41, y10); + aes_word_t z9 = aes_nohw_and(t44, y12); + aes_word_t z10 = aes_nohw_and(t37, y3); + aes_word_t z11 = aes_nohw_and(t33, y4); + aes_word_t z12 = aes_nohw_and(t43, y13); + aes_word_t z13 = aes_nohw_and(t40, y5); + aes_word_t z14 = aes_nohw_and(t29, y2); + aes_word_t z15 = aes_nohw_and(t42, y9); + aes_word_t z16 = aes_nohw_and(t45, y14); + aes_word_t z17 = aes_nohw_and(t41, y8); + + // Figure 4, bottom linear transformation. + aes_word_t t46 = aes_nohw_xor(z15, z16); + aes_word_t t47 = aes_nohw_xor(z10, z11); + aes_word_t t48 = aes_nohw_xor(z5, z13); + aes_word_t t49 = aes_nohw_xor(z9, z10); + aes_word_t t50 = aes_nohw_xor(z2, z12); + aes_word_t t51 = aes_nohw_xor(z2, z5); + aes_word_t t52 = aes_nohw_xor(z7, z8); + aes_word_t t53 = aes_nohw_xor(z0, z3); + aes_word_t t54 = aes_nohw_xor(z6, z7); + aes_word_t t55 = aes_nohw_xor(z16, z17); + aes_word_t t56 = aes_nohw_xor(z12, t48); + aes_word_t t57 = aes_nohw_xor(t50, t53); + aes_word_t t58 = aes_nohw_xor(z4, t46); + aes_word_t t59 = aes_nohw_xor(z3, t54); + aes_word_t t60 = aes_nohw_xor(t46, t57); + aes_word_t t61 = aes_nohw_xor(z14, t57); + aes_word_t t62 = aes_nohw_xor(t52, t58); + aes_word_t t63 = aes_nohw_xor(t49, t58); + aes_word_t t64 = aes_nohw_xor(z4, t59); + aes_word_t t65 = aes_nohw_xor(t61, t62); + aes_word_t t66 = aes_nohw_xor(z1, t63); + aes_word_t s0 = aes_nohw_xor(t59, t63); + aes_word_t s6 = aes_nohw_xor(t56, aes_nohw_not(t62)); + aes_word_t s7 = aes_nohw_xor(t48, aes_nohw_not(t60)); + aes_word_t t67 = aes_nohw_xor(t64, t65); + aes_word_t s3 = aes_nohw_xor(t53, t66); + aes_word_t s4 = aes_nohw_xor(t51, t66); + aes_word_t s5 = aes_nohw_xor(t47, t65); + aes_word_t s1 = aes_nohw_xor(t64, aes_nohw_not(s3)); + aes_word_t s2 = aes_nohw_xor(t55, aes_nohw_not(t67)); + + batch->w[0] = s7; + batch->w[1] = s6; + batch->w[2] = s5; + batch->w[3] = s4; + batch->w[4] = s3; + batch->w[5] = s2; + batch->w[6] = s1; + batch->w[7] = s0; +} + +// aes_nohw_rotate_cols_right returns |v| with the columns in each row rotated +// to the right by |n|. This is a macro because |aes_nohw_shift_*| require +// constant shift counts in the SSE2 implementation. +#define aes_nohw_rotate_cols_right(/* aes_word_t */ v, /* const */ n) \ + (aes_nohw_or(aes_nohw_shift_right((v), (n)*4), \ + aes_nohw_shift_left((v), 16 - (n)*4))) + +static void aes_nohw_shift_rows(AES_NOHW_BATCH *batch) { + for (size_t i = 0; i < 8; i++) { + aes_word_t row0 = aes_nohw_and(batch->w[i], AES_NOHW_ROW0_MASK); + aes_word_t row1 = aes_nohw_and(batch->w[i], AES_NOHW_ROW1_MASK); + aes_word_t row2 = aes_nohw_and(batch->w[i], AES_NOHW_ROW2_MASK); + aes_word_t row3 = aes_nohw_and(batch->w[i], AES_NOHW_ROW3_MASK); + row1 = aes_nohw_rotate_cols_right(row1, 1); + row2 = aes_nohw_rotate_cols_right(row2, 2); + row3 = aes_nohw_rotate_cols_right(row3, 3); + batch->w[i] = aes_nohw_or(aes_nohw_or(row0, row1), aes_nohw_or(row2, row3)); + } +} + +// aes_nohw_rotate_rows_down returns |v| with the rows in each column rotated +// down by one. +static inline aes_word_t aes_nohw_rotate_rows_down(aes_word_t v) { +#if defined(OPENSSL_SSE2) + return _mm_or_si128(_mm_srli_epi32(v, 8), _mm_slli_epi32(v, 24)); +#elif defined(OPENSSL_64_BIT) + return ((v >> 4) & UINT64_C(0x0fff0fff0fff0fff)) | + ((v << 12) & UINT64_C(0xf000f000f000f000)); +#else + return ((v >> 2) & 0x3f3f3f3f) | ((v << 6) & 0xc0c0c0c0); +#endif +} + +// aes_nohw_rotate_rows_twice returns |v| with the rows in each column rotated +// by two. +static inline aes_word_t aes_nohw_rotate_rows_twice(aes_word_t v) { +#if defined(OPENSSL_SSE2) + return _mm_or_si128(_mm_srli_epi32(v, 16), _mm_slli_epi32(v, 16)); +#elif defined(OPENSSL_64_BIT) + return ((v >> 8) & UINT64_C(0x00ff00ff00ff00ff)) | + ((v << 8) & UINT64_C(0xff00ff00ff00ff00)); +#else + return ((v >> 4) & 0x0f0f0f0f) | ((v << 4) & 0xf0f0f0f0); +#endif +} + +static void aes_nohw_mix_columns(AES_NOHW_BATCH *batch) { + // See https://eprint.iacr.org/2009/129.pdf, section 4.4 and appendix A. + aes_word_t a0 = batch->w[0]; + aes_word_t a1 = batch->w[1]; + aes_word_t a2 = batch->w[2]; + aes_word_t a3 = batch->w[3]; + aes_word_t a4 = batch->w[4]; + aes_word_t a5 = batch->w[5]; + aes_word_t a6 = batch->w[6]; + aes_word_t a7 = batch->w[7]; + + aes_word_t r0 = aes_nohw_rotate_rows_down(a0); + aes_word_t a0_r0 = aes_nohw_xor(a0, r0); + aes_word_t r1 = aes_nohw_rotate_rows_down(a1); + aes_word_t a1_r1 = aes_nohw_xor(a1, r1); + aes_word_t r2 = aes_nohw_rotate_rows_down(a2); + aes_word_t a2_r2 = aes_nohw_xor(a2, r2); + aes_word_t r3 = aes_nohw_rotate_rows_down(a3); + aes_word_t a3_r3 = aes_nohw_xor(a3, r3); + aes_word_t r4 = aes_nohw_rotate_rows_down(a4); + aes_word_t a4_r4 = aes_nohw_xor(a4, r4); + aes_word_t r5 = aes_nohw_rotate_rows_down(a5); + aes_word_t a5_r5 = aes_nohw_xor(a5, r5); + aes_word_t r6 = aes_nohw_rotate_rows_down(a6); + aes_word_t a6_r6 = aes_nohw_xor(a6, r6); + aes_word_t r7 = aes_nohw_rotate_rows_down(a7); + aes_word_t a7_r7 = aes_nohw_xor(a7, r7); + + batch->w[0] = + aes_nohw_xor(aes_nohw_xor(a7_r7, r0), aes_nohw_rotate_rows_twice(a0_r0)); + batch->w[1] = + aes_nohw_xor(aes_nohw_xor(a0_r0, a7_r7), + aes_nohw_xor(r1, aes_nohw_rotate_rows_twice(a1_r1))); + batch->w[2] = + aes_nohw_xor(aes_nohw_xor(a1_r1, r2), aes_nohw_rotate_rows_twice(a2_r2)); + batch->w[3] = + aes_nohw_xor(aes_nohw_xor(a2_r2, a7_r7), + aes_nohw_xor(r3, aes_nohw_rotate_rows_twice(a3_r3))); + batch->w[4] = + aes_nohw_xor(aes_nohw_xor(a3_r3, a7_r7), + aes_nohw_xor(r4, aes_nohw_rotate_rows_twice(a4_r4))); + batch->w[5] = + aes_nohw_xor(aes_nohw_xor(a4_r4, r5), aes_nohw_rotate_rows_twice(a5_r5)); + batch->w[6] = + aes_nohw_xor(aes_nohw_xor(a5_r5, r6), aes_nohw_rotate_rows_twice(a6_r6)); + batch->w[7] = + aes_nohw_xor(aes_nohw_xor(a6_r6, r7), aes_nohw_rotate_rows_twice(a7_r7)); +} + +static void aes_nohw_encrypt_batch(const AES_NOHW_SCHEDULE *key, + size_t num_rounds, AES_NOHW_BATCH *batch) { + aes_nohw_add_round_key(batch, &key->keys[0]); + for (size_t i = 1; i < num_rounds; i++) { + aes_nohw_sub_bytes(batch); + aes_nohw_shift_rows(batch); + aes_nohw_mix_columns(batch); + aes_nohw_add_round_key(batch, &key->keys[i]); + } + aes_nohw_sub_bytes(batch); + aes_nohw_shift_rows(batch); + aes_nohw_add_round_key(batch, &key->keys[num_rounds]); +} + +// Key schedule. + +static void aes_nohw_expand_round_keys(AES_NOHW_SCHEDULE *out, + const AES_KEY *key) { + for (unsigned i = 0; i <= key->rounds; i++) { + // Copy the round key into each block in the batch. + for (size_t j = 0; j < AES_NOHW_BATCH_SIZE; j++) { + aes_word_t tmp[AES_NOHW_BLOCK_WORDS]; + GFp_memcpy(tmp, key->rd_key + 4 * i, 16); + aes_nohw_batch_set(&out->keys[i], tmp, j); + } + aes_nohw_transpose(&out->keys[i]); + } +} + +static const uint8_t aes_nohw_rcon[10] = {0x01, 0x02, 0x04, 0x08, 0x10, + 0x20, 0x40, 0x80, 0x1b, 0x36}; + +// aes_nohw_rcon_slice returns the |i|th group of |AES_NOHW_BATCH_SIZE| bits in +// |rcon|, stored in a |aes_word_t|. +static inline aes_word_t aes_nohw_rcon_slice(uint8_t rcon, size_t i) { + rcon = (rcon >> (i * AES_NOHW_BATCH_SIZE)) & ((1 << AES_NOHW_BATCH_SIZE) - 1); +#if defined(OPENSSL_SSE2) + return _mm_set_epi32(0, 0, 0, rcon); +#else + return ((aes_word_t)rcon); +#endif +} + +static void aes_nohw_sub_block(aes_word_t out[AES_NOHW_BLOCK_WORDS], + const aes_word_t in[AES_NOHW_BLOCK_WORDS]) { + AES_NOHW_BATCH batch; + GFp_memset(&batch, 0, sizeof(batch)); + aes_nohw_batch_set(&batch, in, 0); + aes_nohw_transpose(&batch); + aes_nohw_sub_bytes(&batch); + aes_nohw_transpose(&batch); + aes_nohw_batch_get(&batch, out, 0); +} + +static void aes_nohw_setup_key_128(AES_KEY *key, const uint8_t in[16]) { + key->rounds = 10; + + aes_word_t block[AES_NOHW_BLOCK_WORDS]; + aes_nohw_compact_block(block, in); + GFp_memcpy(key->rd_key, block, 16); + + for (size_t i = 1; i <= 10; i++) { + aes_word_t sub[AES_NOHW_BLOCK_WORDS]; + aes_nohw_sub_block(sub, block); + uint8_t rcon = aes_nohw_rcon[i - 1]; + for (size_t j = 0; j < AES_NOHW_BLOCK_WORDS; j++) { + // Incorporate |rcon| and the transformed word into the first word. + block[j] = aes_nohw_xor(block[j], aes_nohw_rcon_slice(rcon, j)); + block[j] = aes_nohw_xor( + block[j], + aes_nohw_shift_right(aes_nohw_rotate_rows_down(sub[j]), 12)); + // Propagate to the remaining words. Note this is reordered from the usual + // formulation to avoid needing masks. + aes_word_t v = block[j]; + block[j] = aes_nohw_xor(block[j], aes_nohw_shift_left(v, 4)); + block[j] = aes_nohw_xor(block[j], aes_nohw_shift_left(v, 8)); + block[j] = aes_nohw_xor(block[j], aes_nohw_shift_left(v, 12)); + } + GFp_memcpy(key->rd_key + 4 * i, block, 16); + } +} + +static void aes_nohw_setup_key_256(AES_KEY *key, const uint8_t in[32]) { + key->rounds = 14; + + // Each key schedule iteration produces two round keys. + aes_word_t block1[AES_NOHW_BLOCK_WORDS], block2[AES_NOHW_BLOCK_WORDS]; + aes_nohw_compact_block(block1, in); + GFp_memcpy(key->rd_key, block1, 16); + + aes_nohw_compact_block(block2, in + 16); + GFp_memcpy(key->rd_key + 4, block2, 16); + + for (size_t i = 2; i <= 14; i += 2) { + aes_word_t sub[AES_NOHW_BLOCK_WORDS]; + aes_nohw_sub_block(sub, block2); + uint8_t rcon = aes_nohw_rcon[i / 2 - 1]; + for (size_t j = 0; j < AES_NOHW_BLOCK_WORDS; j++) { + // Incorporate |rcon| and the transformed word into the first word. + block1[j] = aes_nohw_xor(block1[j], aes_nohw_rcon_slice(rcon, j)); + block1[j] = aes_nohw_xor( + block1[j], + aes_nohw_shift_right(aes_nohw_rotate_rows_down(sub[j]), 12)); + // Propagate to the remaining words. + aes_word_t v = block1[j]; + block1[j] = aes_nohw_xor(block1[j], aes_nohw_shift_left(v, 4)); + block1[j] = aes_nohw_xor(block1[j], aes_nohw_shift_left(v, 8)); + block1[j] = aes_nohw_xor(block1[j], aes_nohw_shift_left(v, 12)); + } + GFp_memcpy(key->rd_key + 4 * i, block1, 16); + + if (i == 14) { + break; + } + + aes_nohw_sub_block(sub, block1); + for (size_t j = 0; j < AES_NOHW_BLOCK_WORDS; j++) { + // Incorporate the transformed word into the first word. + block2[j] = aes_nohw_xor(block2[j], aes_nohw_shift_right(sub[j], 12)); + // Propagate to the remaining words. + aes_word_t v = block2[j]; + block2[j] = aes_nohw_xor(block2[j], aes_nohw_shift_left(v, 4)); + block2[j] = aes_nohw_xor(block2[j], aes_nohw_shift_left(v, 8)); + block2[j] = aes_nohw_xor(block2[j], aes_nohw_shift_left(v, 12)); + } + GFp_memcpy(key->rd_key + 4 * (i + 1), block2, 16); + } +} + + +// External API. + +int GFp_aes_nohw_set_encrypt_key(const uint8_t *key, unsigned bits, + AES_KEY *aeskey) { + switch (bits) { + case 128: + aes_nohw_setup_key_128(aeskey, key); + return 0; + case 256: + aes_nohw_setup_key_256(aeskey, key); + return 0; + } + return 1; +} + +void GFp_aes_nohw_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) { + AES_NOHW_SCHEDULE sched; + aes_nohw_expand_round_keys(&sched, key); + AES_NOHW_BATCH batch; + aes_nohw_to_batch(&batch, in, /*num_blocks=*/1); + aes_nohw_encrypt_batch(&sched, key->rounds, &batch); + aes_nohw_from_batch(out, /*num_blocks=*/1, &batch); +} + +static inline void aes_nohw_xor_block(uint8_t out[16], const uint8_t a[16], + const uint8_t b[16]) { + for (size_t i = 0; i < 16; i += sizeof(aes_word_t)) { + aes_word_t x, y; + GFp_memcpy(&x, a + i, sizeof(aes_word_t)); + GFp_memcpy(&y, b + i, sizeof(aes_word_t)); + x = aes_nohw_xor(x, y); + GFp_memcpy(out + i, &x, sizeof(aes_word_t)); + } +} + +void GFp_aes_nohw_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, + size_t blocks, const AES_KEY *key, + const uint8_t ivec[16]) { + if (blocks == 0) { + return; + } + + AES_NOHW_SCHEDULE sched; + aes_nohw_expand_round_keys(&sched, key); + + // Make |AES_NOHW_BATCH_SIZE| copies of |ivec|. + alignas(AES_NOHW_WORD_SIZE) union { + uint32_t u32[AES_NOHW_BATCH_SIZE * 4]; + uint8_t u8[AES_NOHW_BATCH_SIZE * 16]; + } ivs, enc_ivs; + for (size_t i = 0; i < AES_NOHW_BATCH_SIZE; i++) { + GFp_memcpy(ivs.u8 + 16 * i, ivec, 16); + } + + uint32_t ctr = CRYPTO_bswap4(ivs.u32[3]); + for (;;) { + // Update counters. + for (uint32_t i = 0; i < AES_NOHW_BATCH_SIZE; i++) { + ivs.u32[4 * i + 3] = CRYPTO_bswap4(ctr + i); + } + + size_t todo = blocks >= AES_NOHW_BATCH_SIZE ? AES_NOHW_BATCH_SIZE : blocks; + AES_NOHW_BATCH batch; + aes_nohw_to_batch(&batch, ivs.u8, todo); + aes_nohw_encrypt_batch(&sched, key->rounds, &batch); + aes_nohw_from_batch(enc_ivs.u8, todo, &batch); + + for (size_t i = 0; i < todo; i++) { + aes_nohw_xor_block(out + 16 * i, in + 16 * i, enc_ivs.u8 + 16 * i); + } + + blocks -= todo; + if (blocks == 0) { + break; + } + + in += 16 * AES_NOHW_BATCH_SIZE; + out += 16 * AES_NOHW_BATCH_SIZE; + ctr += AES_NOHW_BATCH_SIZE; + } +} diff --git a/vendor/ring/crypto/fipsmodule/aes/asm/aesni-x86.pl b/vendor/ring/crypto/fipsmodule/aes/asm/aesni-x86.pl new file mode 100644 index 00000000..aee1f5ff --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/aes/asm/aesni-x86.pl @@ -0,0 +1,971 @@ +#! /usr/bin/env perl +# Copyright 2009-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# This module implements support for Intel AES-NI extension. In +# OpenSSL context it's used with Intel engine, but can also be used as +# drop-in replacement for crypto/aes/asm/aes-586.pl [see below for +# details]. +# +# Performance. +# +# To start with see corresponding paragraph in aesni-x86_64.pl... +# Instead of filling table similar to one found there I've chosen to +# summarize *comparison* results for raw ECB, CTR and CBC benchmarks. +# The simplified table below represents 32-bit performance relative +# to 64-bit one in every given point. Ratios vary for different +# encryption modes, therefore interval values. +# +# 16-byte 64-byte 256-byte 1-KB 8-KB +# 53-67% 67-84% 91-94% 95-98% 97-99.5% +# +# Lower ratios for smaller block sizes are perfectly understandable, +# because function call overhead is higher in 32-bit mode. Largest +# 8-KB block performance is virtually same: 32-bit code is less than +# 1% slower for ECB, CBC and CCM, and ~3% slower otherwise. + +# January 2011 +# +# See aesni-x86_64.pl for details. Unlike x86_64 version this module +# interleaves at most 6 aes[enc|dec] instructions, because there are +# not enough registers for 8x interleave [which should be optimal for +# Sandy Bridge]. Actually, performance results for 6x interleave +# factor presented in aesni-x86_64.pl (except for CTR) are for this +# module. + +# April 2011 +# +# Add aesni_xts_[en|de]crypt. Westmere spends 1.50 cycles processing +# one byte out of 8KB with 128-bit key, Sandy Bridge - 1.09. + +# November 2015 +# +# Add aesni_ocb_[en|de]crypt. [Removed in BoringSSL] + +###################################################################### +# Current large-block performance in cycles per byte processed with +# 128-bit key (less is better). +# +# CBC en-/decrypt CTR XTS ECB OCB +# Westmere 3.77/1.37 1.37 1.52 1.27 +# * Bridge 5.07/0.98 0.99 1.09 0.91 1.10 +# Haswell 4.44/0.80 0.97 1.03 0.72 0.76 +# Skylake 2.68/0.65 0.65 0.66 0.64 0.66 +# Silvermont 5.77/3.56 3.67 4.03 3.46 4.03 +# Goldmont 3.84/1.39 1.39 1.63 1.31 1.70 +# Bulldozer 5.80/0.98 1.05 1.24 0.93 1.23 + +$PREFIX="GFp_aes_hw"; # if $PREFIX is set to "AES", the script + # generates drop-in replacement for + # crypto/aes/asm/aes-586.pl:-) +$AESNI_PREFIX="GFp_aes_hw"; +$inline=1; # inline _aesni_[en|de]crypt + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +push(@INC,"${dir}","${dir}../../../perlasm"); +require "x86asm.pl"; + +$output = pop; +open OUT,">$output"; +*STDOUT=*OUT; + +&asm_init($ARGV[0]); + +&external_label("GFp_ia32cap_P"); +&static_label("key_const"); + +if ($PREFIX eq $AESNI_PREFIX) { $movekey=\&movups; } +else { $movekey=\&movups; } + +$len="eax"; +$rounds="ecx"; +$key="edx"; +$inp="esi"; +$out="edi"; +$rounds_="ebx"; # backup copy for $rounds +$key_="ebp"; # backup copy for $key + +$rndkey0="xmm0"; +$rndkey1="xmm1"; +$inout0="xmm2"; +$inout1="xmm3"; +$inout2="xmm4"; +$inout3="xmm5"; $in1="xmm5"; +$inout4="xmm6"; $in0="xmm6"; +$inout5="xmm7"; $ivec="xmm7"; + +# AESNI extension +sub aeskeygenassist +{ my($dst,$src,$imm)=@_; + if ("$dst:$src" =~ /xmm([0-7]):xmm([0-7])/) + { &data_byte(0x66,0x0f,0x3a,0xdf,0xc0|($1<<3)|$2,$imm); } +} +sub aescommon +{ my($opcodelet,$dst,$src)=@_; + if ("$dst:$src" =~ /xmm([0-7]):xmm([0-7])/) + { &data_byte(0x66,0x0f,0x38,$opcodelet,0xc0|($1<<3)|$2);} +} +sub aesimc { aescommon(0xdb,@_); } +sub aesenc { aescommon(0xdc,@_); } +sub aesenclast { aescommon(0xdd,@_); } + +# Inline version of internal aesni_[en|de]crypt1 +{ my $sn; +sub aesni_inline_generate1 +{ my ($p,$inout,$ivec)=@_; $inout=$inout0 if (!defined($inout)); + $sn++; + + &$movekey ($rndkey0,&QWP(0,$key)); + &$movekey ($rndkey1,&QWP(16,$key)); + &xorps ($ivec,$rndkey0) if (defined($ivec)); + &lea ($key,&DWP(32,$key)); + &xorps ($inout,$ivec) if (defined($ivec)); + &xorps ($inout,$rndkey0) if (!defined($ivec)); + &set_label("${p}1_loop_$sn"); + eval"&aes${p} ($inout,$rndkey1)"; + &dec ($rounds); + &$movekey ($rndkey1,&QWP(0,$key)); + &lea ($key,&DWP(16,$key)); + &jnz (&label("${p}1_loop_$sn")); + eval"&aes${p}last ($inout,$rndkey1)"; +}} + +sub aesni_generate1 # fully unrolled loop +{ my ($p,$inout)=@_; $inout=$inout0 if (!defined($inout)); + + &function_begin_B("_aesni_${p}rypt1"); + &movups ($rndkey0,&QWP(0,$key)); + &$movekey ($rndkey1,&QWP(0x10,$key)); + &xorps ($inout,$rndkey0); + &$movekey ($rndkey0,&QWP(0x20,$key)); + &lea ($key,&DWP(0x30,$key)); + &cmp ($rounds,11); + &jb (&label("${p}128")); + &lea ($key,&DWP(0x40,$key)); + # 192-bit key support was removed. + + eval"&aes${p} ($inout,$rndkey1)"; + &$movekey ($rndkey1,&QWP(-0x40,$key)); + eval"&aes${p} ($inout,$rndkey0)"; + &$movekey ($rndkey0,&QWP(-0x30,$key)); + + # 192-bit key support was removed. + eval"&aes${p} ($inout,$rndkey1)"; + &$movekey ($rndkey1,&QWP(-0x20,$key)); + eval"&aes${p} ($inout,$rndkey0)"; + &$movekey ($rndkey0,&QWP(-0x10,$key)); + &set_label("${p}128"); + eval"&aes${p} ($inout,$rndkey1)"; + &$movekey ($rndkey1,&QWP(0,$key)); + eval"&aes${p} ($inout,$rndkey0)"; + &$movekey ($rndkey0,&QWP(0x10,$key)); + eval"&aes${p} ($inout,$rndkey1)"; + &$movekey ($rndkey1,&QWP(0x20,$key)); + eval"&aes${p} ($inout,$rndkey0)"; + &$movekey ($rndkey0,&QWP(0x30,$key)); + eval"&aes${p} ($inout,$rndkey1)"; + &$movekey ($rndkey1,&QWP(0x40,$key)); + eval"&aes${p} ($inout,$rndkey0)"; + &$movekey ($rndkey0,&QWP(0x50,$key)); + eval"&aes${p} ($inout,$rndkey1)"; + &$movekey ($rndkey1,&QWP(0x60,$key)); + eval"&aes${p} ($inout,$rndkey0)"; + &$movekey ($rndkey0,&QWP(0x70,$key)); + eval"&aes${p} ($inout,$rndkey1)"; + eval"&aes${p}last ($inout,$rndkey0)"; + &ret(); + &function_end_B("_aesni_${p}rypt1"); +} + +# void $PREFIX_encrypt (const void *inp,void *out,const AES_KEY *key); +&aesni_generate1("enc") if (!$inline); +&function_begin_B("${PREFIX}_encrypt"); + &mov ("eax",&wparam(0)); + &mov ($key,&wparam(2)); + &movups ($inout0,&QWP(0,"eax")); + &mov ($rounds,&DWP(240,$key)); + &mov ("eax",&wparam(1)); + if ($inline) + { &aesni_inline_generate1("enc"); } + else + { &call ("_aesni_encrypt1"); } + &pxor ($rndkey0,$rndkey0); # clear register bank + &pxor ($rndkey1,$rndkey1); + &movups (&QWP(0,"eax"),$inout0); + &pxor ($inout0,$inout0); + &ret (); +&function_end_B("${PREFIX}_encrypt"); + +# _aesni_[en|de]cryptN are private interfaces, N denotes interleave +# factor. Why 3x subroutine were originally used in loops? Even though +# aes[enc|dec] latency was originally 6, it could be scheduled only +# every *2nd* cycle. Thus 3x interleave was the one providing optimal +# utilization, i.e. when subroutine's throughput is virtually same as +# of non-interleaved subroutine [for number of input blocks up to 3]. +# This is why it originally made no sense to implement 2x subroutine. +# But times change and it became appropriate to spend extra 192 bytes +# on 2x subroutine on Atom Silvermont account. For processors that +# can schedule aes[enc|dec] every cycle optimal interleave factor +# equals to corresponding instructions latency. 8x is optimal for +# * Bridge, but it's unfeasible to accommodate such implementation +# in XMM registers addressable in 32-bit mode and therefore maximum +# of 6x is used instead... + +sub aesni_generate2 +{ my $p=shift; + + &function_begin_B("_aesni_${p}rypt2"); + &$movekey ($rndkey0,&QWP(0,$key)); + &shl ($rounds,4); + &$movekey ($rndkey1,&QWP(16,$key)); + &xorps ($inout0,$rndkey0); + &pxor ($inout1,$rndkey0); + &$movekey ($rndkey0,&QWP(32,$key)); + &lea ($key,&DWP(32,$key,$rounds)); + &neg ($rounds); + &add ($rounds,16); + + &set_label("${p}2_loop"); + eval"&aes${p} ($inout0,$rndkey1)"; + eval"&aes${p} ($inout1,$rndkey1)"; + &$movekey ($rndkey1,&QWP(0,$key,$rounds)); + &add ($rounds,32); + eval"&aes${p} ($inout0,$rndkey0)"; + eval"&aes${p} ($inout1,$rndkey0)"; + &$movekey ($rndkey0,&QWP(-16,$key,$rounds)); + &jnz (&label("${p}2_loop")); + eval"&aes${p} ($inout0,$rndkey1)"; + eval"&aes${p} ($inout1,$rndkey1)"; + eval"&aes${p}last ($inout0,$rndkey0)"; + eval"&aes${p}last ($inout1,$rndkey0)"; + &ret(); + &function_end_B("_aesni_${p}rypt2"); +} + +sub aesni_generate3 +{ my $p=shift; + + &function_begin_B("_aesni_${p}rypt3"); + &$movekey ($rndkey0,&QWP(0,$key)); + &shl ($rounds,4); + &$movekey ($rndkey1,&QWP(16,$key)); + &xorps ($inout0,$rndkey0); + &pxor ($inout1,$rndkey0); + &pxor ($inout2,$rndkey0); + &$movekey ($rndkey0,&QWP(32,$key)); + &lea ($key,&DWP(32,$key,$rounds)); + &neg ($rounds); + &add ($rounds,16); + + &set_label("${p}3_loop"); + eval"&aes${p} ($inout0,$rndkey1)"; + eval"&aes${p} ($inout1,$rndkey1)"; + eval"&aes${p} ($inout2,$rndkey1)"; + &$movekey ($rndkey1,&QWP(0,$key,$rounds)); + &add ($rounds,32); + eval"&aes${p} ($inout0,$rndkey0)"; + eval"&aes${p} ($inout1,$rndkey0)"; + eval"&aes${p} ($inout2,$rndkey0)"; + &$movekey ($rndkey0,&QWP(-16,$key,$rounds)); + &jnz (&label("${p}3_loop")); + eval"&aes${p} ($inout0,$rndkey1)"; + eval"&aes${p} ($inout1,$rndkey1)"; + eval"&aes${p} ($inout2,$rndkey1)"; + eval"&aes${p}last ($inout0,$rndkey0)"; + eval"&aes${p}last ($inout1,$rndkey0)"; + eval"&aes${p}last ($inout2,$rndkey0)"; + &ret(); + &function_end_B("_aesni_${p}rypt3"); +} + +# 4x interleave is implemented to improve small block performance, +# most notably [and naturally] 4 block by ~30%. One can argue that one +# should have implemented 5x as well, but improvement would be <20%, +# so it's not worth it... +sub aesni_generate4 +{ my $p=shift; + + &function_begin_B("_aesni_${p}rypt4"); + &$movekey ($rndkey0,&QWP(0,$key)); + &$movekey ($rndkey1,&QWP(16,$key)); + &shl ($rounds,4); + &xorps ($inout0,$rndkey0); + &pxor ($inout1,$rndkey0); + &pxor ($inout2,$rndkey0); + &pxor ($inout3,$rndkey0); + &$movekey ($rndkey0,&QWP(32,$key)); + &lea ($key,&DWP(32,$key,$rounds)); + &neg ($rounds); + &data_byte (0x0f,0x1f,0x40,0x00); + &add ($rounds,16); + + &set_label("${p}4_loop"); + eval"&aes${p} ($inout0,$rndkey1)"; + eval"&aes${p} ($inout1,$rndkey1)"; + eval"&aes${p} ($inout2,$rndkey1)"; + eval"&aes${p} ($inout3,$rndkey1)"; + &$movekey ($rndkey1,&QWP(0,$key,$rounds)); + &add ($rounds,32); + eval"&aes${p} ($inout0,$rndkey0)"; + eval"&aes${p} ($inout1,$rndkey0)"; + eval"&aes${p} ($inout2,$rndkey0)"; + eval"&aes${p} ($inout3,$rndkey0)"; + &$movekey ($rndkey0,&QWP(-16,$key,$rounds)); + &jnz (&label("${p}4_loop")); + + eval"&aes${p} ($inout0,$rndkey1)"; + eval"&aes${p} ($inout1,$rndkey1)"; + eval"&aes${p} ($inout2,$rndkey1)"; + eval"&aes${p} ($inout3,$rndkey1)"; + eval"&aes${p}last ($inout0,$rndkey0)"; + eval"&aes${p}last ($inout1,$rndkey0)"; + eval"&aes${p}last ($inout2,$rndkey0)"; + eval"&aes${p}last ($inout3,$rndkey0)"; + &ret(); + &function_end_B("_aesni_${p}rypt4"); +} + +sub aesni_generate6 +{ my $p=shift; + + &function_begin_B("_aesni_${p}rypt6"); + &static_label("_aesni_${p}rypt6_enter"); + &$movekey ($rndkey0,&QWP(0,$key)); + &shl ($rounds,4); + &$movekey ($rndkey1,&QWP(16,$key)); + &xorps ($inout0,$rndkey0); + &pxor ($inout1,$rndkey0); # pxor does better here + &pxor ($inout2,$rndkey0); + eval"&aes${p} ($inout0,$rndkey1)"; + &pxor ($inout3,$rndkey0); + &pxor ($inout4,$rndkey0); + eval"&aes${p} ($inout1,$rndkey1)"; + &lea ($key,&DWP(32,$key,$rounds)); + &neg ($rounds); + eval"&aes${p} ($inout2,$rndkey1)"; + &pxor ($inout5,$rndkey0); + &$movekey ($rndkey0,&QWP(0,$key,$rounds)); + &add ($rounds,16); + &jmp (&label("_aesni_${p}rypt6_inner")); + + &set_label("${p}6_loop",16); + eval"&aes${p} ($inout0,$rndkey1)"; + eval"&aes${p} ($inout1,$rndkey1)"; + eval"&aes${p} ($inout2,$rndkey1)"; + &set_label("_aesni_${p}rypt6_inner"); + eval"&aes${p} ($inout3,$rndkey1)"; + eval"&aes${p} ($inout4,$rndkey1)"; + eval"&aes${p} ($inout5,$rndkey1)"; + &set_label("_aesni_${p}rypt6_enter"); + &$movekey ($rndkey1,&QWP(0,$key,$rounds)); + &add ($rounds,32); + eval"&aes${p} ($inout0,$rndkey0)"; + eval"&aes${p} ($inout1,$rndkey0)"; + eval"&aes${p} ($inout2,$rndkey0)"; + eval"&aes${p} ($inout3,$rndkey0)"; + eval"&aes${p} ($inout4,$rndkey0)"; + eval"&aes${p} ($inout5,$rndkey0)"; + &$movekey ($rndkey0,&QWP(-16,$key,$rounds)); + &jnz (&label("${p}6_loop")); + + eval"&aes${p} ($inout0,$rndkey1)"; + eval"&aes${p} ($inout1,$rndkey1)"; + eval"&aes${p} ($inout2,$rndkey1)"; + eval"&aes${p} ($inout3,$rndkey1)"; + eval"&aes${p} ($inout4,$rndkey1)"; + eval"&aes${p} ($inout5,$rndkey1)"; + eval"&aes${p}last ($inout0,$rndkey0)"; + eval"&aes${p}last ($inout1,$rndkey0)"; + eval"&aes${p}last ($inout2,$rndkey0)"; + eval"&aes${p}last ($inout3,$rndkey0)"; + eval"&aes${p}last ($inout4,$rndkey0)"; + eval"&aes${p}last ($inout5,$rndkey0)"; + &ret(); + &function_end_B("_aesni_${p}rypt6"); +} +&aesni_generate2("enc") if ($PREFIX eq $AESNI_PREFIX); +&aesni_generate3("enc") if ($PREFIX eq $AESNI_PREFIX); +&aesni_generate4("enc") if ($PREFIX eq $AESNI_PREFIX); +&aesni_generate6("enc") if ($PREFIX eq $AESNI_PREFIX); + +if ($PREFIX eq $AESNI_PREFIX) { + +###################################################################### +# void aes_hw_ctr32_encrypt_blocks (const void *in, void *out, +# size_t blocks, const AES_KEY *key, +# const char *ivec); +# +# Handles only complete blocks, operates on 32-bit counter and +# does not update *ivec! (see crypto/modes/ctr128.c for details) +# +# stack layout: +# 0 pshufb mask +# 16 vector addend: 0,6,6,6 +# 32 counter-less ivec +# 48 1st triplet of counter vector +# 64 2nd triplet of counter vector +# 80 saved %esp + +&function_begin("${PREFIX}_ctr32_encrypt_blocks"); + &mov ($inp,&wparam(0)); + &mov ($out,&wparam(1)); + &mov ($len,&wparam(2)); + &mov ($key,&wparam(3)); + &mov ($rounds_,&wparam(4)); + &mov ($key_,"esp"); + &sub ("esp",88); + &and ("esp",-16); # align stack + &mov (&DWP(80,"esp"),$key_); + + &cmp ($len,1); + &je (&label("ctr32_one_shortcut")); + + &movdqu ($inout5,&QWP(0,$rounds_)); # load ivec + + # compose byte-swap control mask for pshufb on stack + &mov (&DWP(0,"esp"),0x0c0d0e0f); + &mov (&DWP(4,"esp"),0x08090a0b); + &mov (&DWP(8,"esp"),0x04050607); + &mov (&DWP(12,"esp"),0x00010203); + + # compose counter increment vector on stack + &mov ($rounds,6); + &xor ($key_,$key_); + &mov (&DWP(16,"esp"),$rounds); + &mov (&DWP(20,"esp"),$rounds); + &mov (&DWP(24,"esp"),$rounds); + &mov (&DWP(28,"esp"),$key_); + + &pextrd ($rounds_,$inout5,3); # pull 32-bit counter + &pinsrd ($inout5,$key_,3); # wipe 32-bit counter + + &mov ($rounds,&DWP(240,$key)); # key->rounds + + # compose 2 vectors of 3x32-bit counters + &bswap ($rounds_); + &pxor ($rndkey0,$rndkey0); + &pxor ($rndkey1,$rndkey1); + &movdqa ($inout0,&QWP(0,"esp")); # load byte-swap mask + &pinsrd ($rndkey0,$rounds_,0); + &lea ($key_,&DWP(3,$rounds_)); + &pinsrd ($rndkey1,$key_,0); + &inc ($rounds_); + &pinsrd ($rndkey0,$rounds_,1); + &inc ($key_); + &pinsrd ($rndkey1,$key_,1); + &inc ($rounds_); + &pinsrd ($rndkey0,$rounds_,2); + &inc ($key_); + &pinsrd ($rndkey1,$key_,2); + &movdqa (&QWP(48,"esp"),$rndkey0); # save 1st triplet + &pshufb ($rndkey0,$inout0); # byte swap + &movdqu ($inout4,&QWP(0,$key)); # key[0] + &movdqa (&QWP(64,"esp"),$rndkey1); # save 2nd triplet + &pshufb ($rndkey1,$inout0); # byte swap + + &pshufd ($inout0,$rndkey0,3<<6); # place counter to upper dword + &pshufd ($inout1,$rndkey0,2<<6); + &cmp ($len,6); + &jb (&label("ctr32_tail")); + &pxor ($inout5,$inout4); # counter-less ivec^key[0] + &shl ($rounds,4); + &mov ($rounds_,16); + &movdqa (&QWP(32,"esp"),$inout5); # save counter-less ivec^key[0] + &mov ($key_,$key); # backup $key + &sub ($rounds_,$rounds); # backup twisted $rounds + &lea ($key,&DWP(32,$key,$rounds)); + &sub ($len,6); + &jmp (&label("ctr32_loop6")); + +&set_label("ctr32_loop6",16); + # inlining _aesni_encrypt6's prologue gives ~6% improvement... + &pshufd ($inout2,$rndkey0,1<<6); + &movdqa ($rndkey0,&QWP(32,"esp")); # pull counter-less ivec + &pshufd ($inout3,$rndkey1,3<<6); + &pxor ($inout0,$rndkey0); # merge counter-less ivec + &pshufd ($inout4,$rndkey1,2<<6); + &pxor ($inout1,$rndkey0); + &pshufd ($inout5,$rndkey1,1<<6); + &$movekey ($rndkey1,&QWP(16,$key_)); + &pxor ($inout2,$rndkey0); + &pxor ($inout3,$rndkey0); + &aesenc ($inout0,$rndkey1); + &pxor ($inout4,$rndkey0); + &pxor ($inout5,$rndkey0); + &aesenc ($inout1,$rndkey1); + &$movekey ($rndkey0,&QWP(32,$key_)); + &mov ($rounds,$rounds_); + &aesenc ($inout2,$rndkey1); + &aesenc ($inout3,$rndkey1); + &aesenc ($inout4,$rndkey1); + &aesenc ($inout5,$rndkey1); + + &call (&label("_aesni_encrypt6_enter")); + + &movups ($rndkey1,&QWP(0,$inp)); + &movups ($rndkey0,&QWP(0x10,$inp)); + &xorps ($inout0,$rndkey1); + &movups ($rndkey1,&QWP(0x20,$inp)); + &xorps ($inout1,$rndkey0); + &movups (&QWP(0,$out),$inout0); + &movdqa ($rndkey0,&QWP(16,"esp")); # load increment + &xorps ($inout2,$rndkey1); + &movdqa ($rndkey1,&QWP(64,"esp")); # load 2nd triplet + &movups (&QWP(0x10,$out),$inout1); + &movups (&QWP(0x20,$out),$inout2); + + &paddd ($rndkey1,$rndkey0); # 2nd triplet increment + &paddd ($rndkey0,&QWP(48,"esp")); # 1st triplet increment + &movdqa ($inout0,&QWP(0,"esp")); # load byte swap mask + + &movups ($inout1,&QWP(0x30,$inp)); + &movups ($inout2,&QWP(0x40,$inp)); + &xorps ($inout3,$inout1); + &movups ($inout1,&QWP(0x50,$inp)); + &lea ($inp,&DWP(0x60,$inp)); + &movdqa (&QWP(48,"esp"),$rndkey0); # save 1st triplet + &pshufb ($rndkey0,$inout0); # byte swap + &xorps ($inout4,$inout2); + &movups (&QWP(0x30,$out),$inout3); + &xorps ($inout5,$inout1); + &movdqa (&QWP(64,"esp"),$rndkey1); # save 2nd triplet + &pshufb ($rndkey1,$inout0); # byte swap + &movups (&QWP(0x40,$out),$inout4); + &pshufd ($inout0,$rndkey0,3<<6); + &movups (&QWP(0x50,$out),$inout5); + &lea ($out,&DWP(0x60,$out)); + + &pshufd ($inout1,$rndkey0,2<<6); + &sub ($len,6); + &jnc (&label("ctr32_loop6")); + + &add ($len,6); + &jz (&label("ctr32_ret")); + &movdqu ($inout5,&QWP(0,$key_)); + &mov ($key,$key_); + &pxor ($inout5,&QWP(32,"esp")); # restore count-less ivec + &mov ($rounds,&DWP(240,$key_)); # restore $rounds + +&set_label("ctr32_tail"); + &por ($inout0,$inout5); + &cmp ($len,2); + &jb (&label("ctr32_one")); + + &pshufd ($inout2,$rndkey0,1<<6); + &por ($inout1,$inout5); + &je (&label("ctr32_two")); + + &pshufd ($inout3,$rndkey1,3<<6); + &por ($inout2,$inout5); + &cmp ($len,4); + &jb (&label("ctr32_three")); + + &pshufd ($inout4,$rndkey1,2<<6); + &por ($inout3,$inout5); + &je (&label("ctr32_four")); + + &por ($inout4,$inout5); + &call ("_aesni_encrypt6"); + &movups ($rndkey1,&QWP(0,$inp)); + &movups ($rndkey0,&QWP(0x10,$inp)); + &xorps ($inout0,$rndkey1); + &movups ($rndkey1,&QWP(0x20,$inp)); + &xorps ($inout1,$rndkey0); + &movups ($rndkey0,&QWP(0x30,$inp)); + &xorps ($inout2,$rndkey1); + &movups ($rndkey1,&QWP(0x40,$inp)); + &xorps ($inout3,$rndkey0); + &movups (&QWP(0,$out),$inout0); + &xorps ($inout4,$rndkey1); + &movups (&QWP(0x10,$out),$inout1); + &movups (&QWP(0x20,$out),$inout2); + &movups (&QWP(0x30,$out),$inout3); + &movups (&QWP(0x40,$out),$inout4); + &jmp (&label("ctr32_ret")); + +&set_label("ctr32_one_shortcut",16); + &movups ($inout0,&QWP(0,$rounds_)); # load ivec + &mov ($rounds,&DWP(240,$key)); + +&set_label("ctr32_one"); + if ($inline) + { &aesni_inline_generate1("enc"); } + else + { &call ("_aesni_encrypt1"); } + &movups ($in0,&QWP(0,$inp)); + &xorps ($in0,$inout0); + &movups (&QWP(0,$out),$in0); + &jmp (&label("ctr32_ret")); + +&set_label("ctr32_two",16); + &call ("_aesni_encrypt2"); + &movups ($inout3,&QWP(0,$inp)); + &movups ($inout4,&QWP(0x10,$inp)); + &xorps ($inout0,$inout3); + &xorps ($inout1,$inout4); + &movups (&QWP(0,$out),$inout0); + &movups (&QWP(0x10,$out),$inout1); + &jmp (&label("ctr32_ret")); + +&set_label("ctr32_three",16); + &call ("_aesni_encrypt3"); + &movups ($inout3,&QWP(0,$inp)); + &movups ($inout4,&QWP(0x10,$inp)); + &xorps ($inout0,$inout3); + &movups ($inout5,&QWP(0x20,$inp)); + &xorps ($inout1,$inout4); + &movups (&QWP(0,$out),$inout0); + &xorps ($inout2,$inout5); + &movups (&QWP(0x10,$out),$inout1); + &movups (&QWP(0x20,$out),$inout2); + &jmp (&label("ctr32_ret")); + +&set_label("ctr32_four",16); + &call ("_aesni_encrypt4"); + &movups ($inout4,&QWP(0,$inp)); + &movups ($inout5,&QWP(0x10,$inp)); + &movups ($rndkey1,&QWP(0x20,$inp)); + &xorps ($inout0,$inout4); + &movups ($rndkey0,&QWP(0x30,$inp)); + &xorps ($inout1,$inout5); + &movups (&QWP(0,$out),$inout0); + &xorps ($inout2,$rndkey1); + &movups (&QWP(0x10,$out),$inout1); + &xorps ($inout3,$rndkey0); + &movups (&QWP(0x20,$out),$inout2); + &movups (&QWP(0x30,$out),$inout3); + +&set_label("ctr32_ret"); + &pxor ("xmm0","xmm0"); # clear register bank + &pxor ("xmm1","xmm1"); + &pxor ("xmm2","xmm2"); + &pxor ("xmm3","xmm3"); + &pxor ("xmm4","xmm4"); + &movdqa (&QWP(32,"esp"),"xmm0"); # clear stack + &pxor ("xmm5","xmm5"); + &movdqa (&QWP(48,"esp"),"xmm0"); + &pxor ("xmm6","xmm6"); + &movdqa (&QWP(64,"esp"),"xmm0"); + &pxor ("xmm7","xmm7"); + &mov ("esp",&DWP(80,"esp")); +&function_end("${PREFIX}_ctr32_encrypt_blocks"); +} + +###################################################################### +# Mechanical port from aesni-x86_64.pl. +# +# _aesni_set_encrypt_key is private interface, +# input: +# "eax" const unsigned char *userKey +# $rounds int bits +# $key AES_KEY *key +# output: +# "eax" return code +# $round rounds + +&function_begin_B("_aesni_set_encrypt_key"); + &push ("ebp"); + &push ("ebx"); + &test ("eax","eax"); + &jz (&label("bad_pointer")); + &test ($key,$key); + &jz (&label("bad_pointer")); + + &call (&label("pic")); +&set_label("pic"); + &blindpop("ebx"); + &lea ("ebx",&DWP(&label("key_const")."-".&label("pic"),"ebx")); + + &picmeup("ebp","GFp_ia32cap_P","ebx",&label("key_const")); + &movups ("xmm0",&QWP(0,"eax")); # pull first 128 bits of *userKey + &xorps ("xmm4","xmm4"); # low dword of xmm4 is assumed 0 + &mov ("ebp",&DWP(4,"ebp")); + &lea ($key,&DWP(16,$key)); + &and ("ebp",1<<28|1<<11); # AVX and XOP bits + &cmp ($rounds,256); + &je (&label("14rounds")); + # 192-bit key support was removed. + &cmp ($rounds,128); + &jne (&label("bad_keybits")); + +&set_label("10rounds",16); + &cmp ("ebp",1<<28); + &je (&label("10rounds_alt")); + + &mov ($rounds,9); + &$movekey (&QWP(-16,$key),"xmm0"); # round 0 + &aeskeygenassist("xmm1","xmm0",0x01); # round 1 + &call (&label("key_128_cold")); + &aeskeygenassist("xmm1","xmm0",0x2); # round 2 + &call (&label("key_128")); + &aeskeygenassist("xmm1","xmm0",0x04); # round 3 + &call (&label("key_128")); + &aeskeygenassist("xmm1","xmm0",0x08); # round 4 + &call (&label("key_128")); + &aeskeygenassist("xmm1","xmm0",0x10); # round 5 + &call (&label("key_128")); + &aeskeygenassist("xmm1","xmm0",0x20); # round 6 + &call (&label("key_128")); + &aeskeygenassist("xmm1","xmm0",0x40); # round 7 + &call (&label("key_128")); + &aeskeygenassist("xmm1","xmm0",0x80); # round 8 + &call (&label("key_128")); + &aeskeygenassist("xmm1","xmm0",0x1b); # round 9 + &call (&label("key_128")); + &aeskeygenassist("xmm1","xmm0",0x36); # round 10 + &call (&label("key_128")); + &$movekey (&QWP(0,$key),"xmm0"); + &mov (&DWP(80,$key),$rounds); + + &jmp (&label("good_key")); + +&set_label("key_128",16); + &$movekey (&QWP(0,$key),"xmm0"); + &lea ($key,&DWP(16,$key)); +&set_label("key_128_cold"); + &shufps ("xmm4","xmm0",0b00010000); + &xorps ("xmm0","xmm4"); + &shufps ("xmm4","xmm0",0b10001100); + &xorps ("xmm0","xmm4"); + &shufps ("xmm1","xmm1",0b11111111); # critical path + &xorps ("xmm0","xmm1"); + &ret(); + +&set_label("10rounds_alt",16); + &movdqa ("xmm5",&QWP(0x00,"ebx")); + &mov ($rounds,8); + &movdqa ("xmm4",&QWP(0x20,"ebx")); + &movdqa ("xmm2","xmm0"); + &movdqu (&QWP(-16,$key),"xmm0"); + +&set_label("loop_key128"); + &pshufb ("xmm0","xmm5"); + &aesenclast ("xmm0","xmm4"); + &pslld ("xmm4",1); + &lea ($key,&DWP(16,$key)); + + &movdqa ("xmm3","xmm2"); + &pslldq ("xmm2",4); + &pxor ("xmm3","xmm2"); + &pslldq ("xmm2",4); + &pxor ("xmm3","xmm2"); + &pslldq ("xmm2",4); + &pxor ("xmm2","xmm3"); + + &pxor ("xmm0","xmm2"); + &movdqu (&QWP(-16,$key),"xmm0"); + &movdqa ("xmm2","xmm0"); + + &dec ($rounds); + &jnz (&label("loop_key128")); + + &movdqa ("xmm4",&QWP(0x30,"ebx")); + + &pshufb ("xmm0","xmm5"); + &aesenclast ("xmm0","xmm4"); + &pslld ("xmm4",1); + + &movdqa ("xmm3","xmm2"); + &pslldq ("xmm2",4); + &pxor ("xmm3","xmm2"); + &pslldq ("xmm2",4); + &pxor ("xmm3","xmm2"); + &pslldq ("xmm2",4); + &pxor ("xmm2","xmm3"); + + &pxor ("xmm0","xmm2"); + &movdqu (&QWP(0,$key),"xmm0"); + + &movdqa ("xmm2","xmm0"); + &pshufb ("xmm0","xmm5"); + &aesenclast ("xmm0","xmm4"); + + &movdqa ("xmm3","xmm2"); + &pslldq ("xmm2",4); + &pxor ("xmm3","xmm2"); + &pslldq ("xmm2",4); + &pxor ("xmm3","xmm2"); + &pslldq ("xmm2",4); + &pxor ("xmm2","xmm3"); + + &pxor ("xmm0","xmm2"); + &movdqu (&QWP(16,$key),"xmm0"); + + &mov ($rounds,9); + &mov (&DWP(96,$key),$rounds); + + &jmp (&label("good_key")); + +# 192-bit key support was removed. + +&set_label("14rounds",16); + &movups ("xmm2",&QWP(16,"eax")); # remaining half of *userKey + &lea ($key,&DWP(16,$key)); + &cmp ("ebp",1<<28); + &je (&label("14rounds_alt")); + + &mov ($rounds,13); + &$movekey (&QWP(-32,$key),"xmm0"); # round 0 + &$movekey (&QWP(-16,$key),"xmm2"); # round 1 + &aeskeygenassist("xmm1","xmm2",0x01); # round 2 + &call (&label("key_256a_cold")); + &aeskeygenassist("xmm1","xmm0",0x01); # round 3 + &call (&label("key_256b")); + &aeskeygenassist("xmm1","xmm2",0x02); # round 4 + &call (&label("key_256a")); + &aeskeygenassist("xmm1","xmm0",0x02); # round 5 + &call (&label("key_256b")); + &aeskeygenassist("xmm1","xmm2",0x04); # round 6 + &call (&label("key_256a")); + &aeskeygenassist("xmm1","xmm0",0x04); # round 7 + &call (&label("key_256b")); + &aeskeygenassist("xmm1","xmm2",0x08); # round 8 + &call (&label("key_256a")); + &aeskeygenassist("xmm1","xmm0",0x08); # round 9 + &call (&label("key_256b")); + &aeskeygenassist("xmm1","xmm2",0x10); # round 10 + &call (&label("key_256a")); + &aeskeygenassist("xmm1","xmm0",0x10); # round 11 + &call (&label("key_256b")); + &aeskeygenassist("xmm1","xmm2",0x20); # round 12 + &call (&label("key_256a")); + &aeskeygenassist("xmm1","xmm0",0x20); # round 13 + &call (&label("key_256b")); + &aeskeygenassist("xmm1","xmm2",0x40); # round 14 + &call (&label("key_256a")); + &$movekey (&QWP(0,$key),"xmm0"); + &mov (&DWP(16,$key),$rounds); + &xor ("eax","eax"); + + &jmp (&label("good_key")); + +&set_label("key_256a",16); + &$movekey (&QWP(0,$key),"xmm2"); + &lea ($key,&DWP(16,$key)); +&set_label("key_256a_cold"); + &shufps ("xmm4","xmm0",0b00010000); + &xorps ("xmm0","xmm4"); + &shufps ("xmm4","xmm0",0b10001100); + &xorps ("xmm0","xmm4"); + &shufps ("xmm1","xmm1",0b11111111); # critical path + &xorps ("xmm0","xmm1"); + &ret(); + +&set_label("key_256b",16); + &$movekey (&QWP(0,$key),"xmm0"); + &lea ($key,&DWP(16,$key)); + + &shufps ("xmm4","xmm2",0b00010000); + &xorps ("xmm2","xmm4"); + &shufps ("xmm4","xmm2",0b10001100); + &xorps ("xmm2","xmm4"); + &shufps ("xmm1","xmm1",0b10101010); # critical path + &xorps ("xmm2","xmm1"); + &ret(); + +&set_label("14rounds_alt",16); + &movdqa ("xmm5",&QWP(0x00,"ebx")); + &movdqa ("xmm4",&QWP(0x20,"ebx")); + &mov ($rounds,7); + &movdqu (&QWP(-32,$key),"xmm0"); + &movdqa ("xmm1","xmm2"); + &movdqu (&QWP(-16,$key),"xmm2"); + +&set_label("loop_key256"); + &pshufb ("xmm2","xmm5"); + &aesenclast ("xmm2","xmm4"); + + &movdqa ("xmm3","xmm0"); + &pslldq ("xmm0",4); + &pxor ("xmm3","xmm0"); + &pslldq ("xmm0",4); + &pxor ("xmm3","xmm0"); + &pslldq ("xmm0",4); + &pxor ("xmm0","xmm3"); + &pslld ("xmm4",1); + + &pxor ("xmm0","xmm2"); + &movdqu (&QWP(0,$key),"xmm0"); + + &dec ($rounds); + &jz (&label("done_key256")); + + &pshufd ("xmm2","xmm0",0xff); + &pxor ("xmm3","xmm3"); + &aesenclast ("xmm2","xmm3"); + + &movdqa ("xmm3","xmm1"); + &pslldq ("xmm1",4); + &pxor ("xmm3","xmm1"); + &pslldq ("xmm1",4); + &pxor ("xmm3","xmm1"); + &pslldq ("xmm1",4); + &pxor ("xmm1","xmm3"); + + &pxor ("xmm2","xmm1"); + &movdqu (&QWP(16,$key),"xmm2"); + &lea ($key,&DWP(32,$key)); + &movdqa ("xmm1","xmm2"); + &jmp (&label("loop_key256")); + +&set_label("done_key256"); + &mov ($rounds,13); + &mov (&DWP(16,$key),$rounds); + +&set_label("good_key"); + &pxor ("xmm0","xmm0"); + &pxor ("xmm1","xmm1"); + &pxor ("xmm2","xmm2"); + &pxor ("xmm3","xmm3"); + &pxor ("xmm4","xmm4"); + &pxor ("xmm5","xmm5"); + &xor ("eax","eax"); + &pop ("ebx"); + &pop ("ebp"); + &ret (); + +&set_label("bad_pointer",4); + &mov ("eax",-1); + &pop ("ebx"); + &pop ("ebp"); + &ret (); +&set_label("bad_keybits",4); + &pxor ("xmm0","xmm0"); + &mov ("eax",-2); + &pop ("ebx"); + &pop ("ebp"); + &ret (); +&function_end_B("_aesni_set_encrypt_key"); + +# int $PREFIX_set_encrypt_key (const unsigned char *userKey, int bits, +# AES_KEY *key) +&function_begin_B("${PREFIX}_set_encrypt_key"); + &mov ("eax",&wparam(0)); + &mov ($rounds,&wparam(1)); + &mov ($key,&wparam(2)); + &call ("_aesni_set_encrypt_key"); + &ret (); +&function_end_B("${PREFIX}_set_encrypt_key"); + +&set_label("key_const",64); +&data_word(0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d); +&data_word(0x04070605,0x04070605,0x04070605,0x04070605); +&data_word(1,1,1,1); +&data_word(0x1b,0x1b,0x1b,0x1b); +&asciz("AES for Intel AES-NI, CRYPTOGAMS by "); + +&asm_finish(); + +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/fipsmodule/aes/asm/aesni-x86_64.pl b/vendor/ring/crypto/fipsmodule/aes/asm/aesni-x86_64.pl new file mode 100644 index 00000000..7ad0a89a --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/aes/asm/aesni-x86_64.pl @@ -0,0 +1,1704 @@ +#! /usr/bin/env perl +# Copyright 2009-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# This module implements support for Intel AES-NI extension. In +# OpenSSL context it's used with Intel engine, but can also be used as +# drop-in replacement for crypto/aes/asm/aes-x86_64.pl [see below for +# details]. +# +# Performance. +# +# Given aes(enc|dec) instructions' latency asymptotic performance for +# non-parallelizable modes such as CBC encrypt is 3.75 cycles per byte +# processed with 128-bit key. And given their throughput asymptotic +# performance for parallelizable modes is 1.25 cycles per byte. Being +# asymptotic limit it's not something you commonly achieve in reality, +# but how close does one get? Below are results collected for +# different modes and block sized. Pairs of numbers are for en-/ +# decryption. +# +# 16-byte 64-byte 256-byte 1-KB 8-KB +# ECB 4.25/4.25 1.38/1.38 1.28/1.28 1.26/1.26 1.26/1.26 +# CTR 5.42/5.42 1.92/1.92 1.44/1.44 1.28/1.28 1.26/1.26 +# CBC 4.38/4.43 4.15/1.43 4.07/1.32 4.07/1.29 4.06/1.28 +# CCM 5.66/9.42 4.42/5.41 4.16/4.40 4.09/4.15 4.06/4.07 +# OFB 5.42/5.42 4.64/4.64 4.44/4.44 4.39/4.39 4.38/4.38 +# CFB 5.73/5.85 5.56/5.62 5.48/5.56 5.47/5.55 5.47/5.55 +# +# ECB, CTR, CBC and CCM results are free from EVP overhead. This means +# that otherwise used 'openssl speed -evp aes-128-??? -engine aesni +# [-decrypt]' will exhibit 10-15% worse results for smaller blocks. +# The results were collected with specially crafted speed.c benchmark +# in order to compare them with results reported in "Intel Advanced +# Encryption Standard (AES) New Instruction Set" White Paper Revision +# 3.0 dated May 2010. All above results are consistently better. This +# module also provides better performance for block sizes smaller than +# 128 bytes in points *not* represented in the above table. +# +# Looking at the results for 8-KB buffer. +# +# CFB and OFB results are far from the limit, because implementation +# uses "generic" CRYPTO_[c|o]fb128_encrypt interfaces relying on +# single-block aesni_encrypt, which is not the most optimal way to go. +# CBC encrypt result is unexpectedly high and there is no documented +# explanation for it. Seemingly there is a small penalty for feeding +# the result back to AES unit the way it's done in CBC mode. There is +# nothing one can do and the result appears optimal. CCM result is +# identical to CBC, because CBC-MAC is essentially CBC encrypt without +# saving output. CCM CTR "stays invisible," because it's neatly +# interleaved wih CBC-MAC. This provides ~30% improvement over +# "straightforward" CCM implementation with CTR and CBC-MAC performed +# disjointly. Parallelizable modes practically achieve the theoretical +# limit. +# +# Looking at how results vary with buffer size. +# +# Curves are practically saturated at 1-KB buffer size. In most cases +# "256-byte" performance is >95%, and "64-byte" is ~90% of "8-KB" one. +# CTR curve doesn't follow this pattern and is "slowest" changing one +# with "256-byte" result being 87% of "8-KB." This is because overhead +# in CTR mode is most computationally intensive. Small-block CCM +# decrypt is slower than encrypt, because first CTR and last CBC-MAC +# iterations can't be interleaved. +# +# Results for 192- and 256-bit keys. +# +# EVP-free results were observed to scale perfectly with number of +# rounds for larger block sizes, i.e. 192-bit result being 10/12 times +# lower and 256-bit one - 10/14. Well, in CBC encrypt case differences +# are a tad smaller, because the above mentioned penalty biases all +# results by same constant value. In similar way function call +# overhead affects small-block performance, as well as OFB and CFB +# results. Differences are not large, most common coefficients are +# 10/11.7 and 10/13.4 (as opposite to 10/12.0 and 10/14.0), but one +# observe even 10/11.2 and 10/12.4 (CTR, OFB, CFB)... + +# January 2011 +# +# While Westmere processor features 6 cycles latency for aes[enc|dec] +# instructions, which can be scheduled every second cycle, Sandy +# Bridge spends 8 cycles per instruction, but it can schedule them +# every cycle. This means that code targeting Westmere would perform +# suboptimally on Sandy Bridge. Therefore this update. +# +# In addition, non-parallelizable CBC encrypt (as well as CCM) is +# optimized. Relative improvement might appear modest, 8% on Westmere, +# but in absolute terms it's 3.77 cycles per byte encrypted with +# 128-bit key on Westmere, and 5.07 - on Sandy Bridge. These numbers +# should be compared to asymptotic limits of 3.75 for Westmere and +# 5.00 for Sandy Bridge. Actually, the fact that they get this close +# to asymptotic limits is quite amazing. Indeed, the limit is +# calculated as latency times number of rounds, 10 for 128-bit key, +# and divided by 16, the number of bytes in block, or in other words +# it accounts *solely* for aesenc instructions. But there are extra +# instructions, and numbers so close to the asymptotic limits mean +# that it's as if it takes as little as *one* additional cycle to +# execute all of them. How is it possible? It is possible thanks to +# out-of-order execution logic, which manages to overlap post- +# processing of previous block, things like saving the output, with +# actual encryption of current block, as well as pre-processing of +# current block, things like fetching input and xor-ing it with +# 0-round element of the key schedule, with actual encryption of +# previous block. Keep this in mind... +# +# For parallelizable modes, such as ECB, CBC decrypt, CTR, higher +# performance is achieved by interleaving instructions working on +# independent blocks. In which case asymptotic limit for such modes +# can be obtained by dividing above mentioned numbers by AES +# instructions' interleave factor. Westmere can execute at most 3 +# instructions at a time, meaning that optimal interleave factor is 3, +# and that's where the "magic" number of 1.25 come from. "Optimal +# interleave factor" means that increase of interleave factor does +# not improve performance. The formula has proven to reflect reality +# pretty well on Westmere... Sandy Bridge on the other hand can +# execute up to 8 AES instructions at a time, so how does varying +# interleave factor affect the performance? Here is table for ECB +# (numbers are cycles per byte processed with 128-bit key): +# +# instruction interleave factor 3x 6x 8x +# theoretical asymptotic limit 1.67 0.83 0.625 +# measured performance for 8KB block 1.05 0.86 0.84 +# +# "as if" interleave factor 4.7x 5.8x 6.0x +# +# Further data for other parallelizable modes: +# +# CBC decrypt 1.16 0.93 0.74 +# CTR 1.14 0.91 0.74 +# +# Well, given 3x column it's probably inappropriate to call the limit +# asymptotic, if it can be surpassed, isn't it? What happens there? +# Rewind to CBC paragraph for the answer. Yes, out-of-order execution +# magic is responsible for this. Processor overlaps not only the +# additional instructions with AES ones, but even AES instructions +# processing adjacent triplets of independent blocks. In the 6x case +# additional instructions still claim disproportionally small amount +# of additional cycles, but in 8x case number of instructions must be +# a tad too high for out-of-order logic to cope with, and AES unit +# remains underutilized... As you can see 8x interleave is hardly +# justifiable, so there no need to feel bad that 32-bit aesni-x86.pl +# utilizes 6x interleave because of limited register bank capacity. +# +# Higher interleave factors do have negative impact on Westmere +# performance. While for ECB mode it's negligible ~1.5%, other +# parallelizables perform ~5% worse, which is outweighed by ~25% +# improvement on Sandy Bridge. To balance regression on Westmere +# CTR mode was implemented with 6x aesenc interleave factor. + +# April 2011 +# +# Add aesni_xts_[en|de]crypt. Westmere spends 1.25 cycles processing +# one byte out of 8KB with 128-bit key, Sandy Bridge - 0.90. Just like +# in CTR mode AES instruction interleave factor was chosen to be 6x. + +###################################################################### +# Current large-block performance in cycles per byte processed with +# 128-bit key (less is better). +# +# CBC en-/decrypt CTR XTS ECB OCB +# Westmere 3.77/1.25 1.25 1.25 1.26 +# * Bridge 5.07/0.74 0.75 0.90 0.85 0.98 +# Haswell 4.44/0.63 0.63 0.73 0.63 0.70 +# Skylake 2.62/0.63 0.63 0.63 0.63 +# Silvermont 5.75/3.54 3.56 4.12 3.87(*) 4.11 +# Knights L 2.54/0.77 0.78 0.85 - 1.50 +# Goldmont 3.82/1.26 1.26 1.29 1.29 1.50 +# Bulldozer 5.77/0.70 0.72 0.90 0.70 0.95 +# Ryzen 2.71/0.35 0.35 0.44 0.38 0.49 +# +# (*) Atom Silvermont ECB result is suboptimal because of penalties +# incurred by operations on %xmm8-15. As ECB is not considered +# critical, nothing was done to mitigate the problem. + +$PREFIX="aes_hw"; # if $PREFIX is set to "AES", the script + # generates drop-in replacement for + # crypto/aes/asm/aes-x86_64.pl:-) + +$flavour = shift; +$output = shift; +if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } + +$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/); + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../../perlasm/x86_64-xlate.pl" and -f $xlate) or +die "can't locate x86_64-xlate.pl"; + +open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""; +*STDOUT=*OUT; + +$movkey = $PREFIX eq "aes_hw" ? "movups" : "movups"; +@_4args=$win64? ("%rcx","%rdx","%r8", "%r9") : # Win64 order + ("%rdi","%rsi","%rdx","%rcx"); # Unix order + +$code=".text\n"; +$code.=".extern GFp_ia32cap_P\n"; + +$rounds="%eax"; # input to and changed by aesni_[en|de]cryptN !!! +# this is natural Unix argument order for public $PREFIX_[ecb|cbc]_encrypt ... +$inp="%rdi"; +$out="%rsi"; +$len="%rdx"; +$key="%rcx"; # input to and changed by aesni_[en|de]cryptN !!! +$ivp="%r8"; # cbc, ctr, ... + +$rnds_="%r10d"; # backup copy for $rounds +$key_="%r11"; # backup copy for $key + +# %xmm register layout +$rndkey0="%xmm0"; $rndkey1="%xmm1"; +$inout0="%xmm2"; $inout1="%xmm3"; +$inout2="%xmm4"; $inout3="%xmm5"; +$inout4="%xmm6"; $inout5="%xmm7"; +$inout6="%xmm8"; $inout7="%xmm9"; + +$in2="%xmm6"; $in1="%xmm7"; # used in CBC decrypt, CTR, ... +$in0="%xmm8"; $iv="%xmm9"; + +# Inline version of internal aesni_[en|de]crypt1. +# +# Why folded loop? Because aes[enc|dec] is slow enough to accommodate +# cycles which take care of loop variables... +{ my $sn; +sub aesni_generate1 { +my ($p,$key,$rounds,$inout,$ivec)=@_; $inout=$inout0 if (!defined($inout)); +++$sn; +$code.=<<___; + $movkey ($key),$rndkey0 + $movkey 16($key),$rndkey1 +___ +$code.=<<___ if (defined($ivec)); + xorps $rndkey0,$ivec + lea 32($key),$key + xorps $ivec,$inout +___ +$code.=<<___ if (!defined($ivec)); + lea 32($key),$key + xorps $rndkey0,$inout +___ +$code.=<<___; +.Loop_${p}1_$sn: + aes${p} $rndkey1,$inout + dec $rounds + $movkey ($key),$rndkey1 + lea 16($key),$key + jnz .Loop_${p}1_$sn # loop body is 16 bytes + aes${p}last $rndkey1,$inout +___ +}} +# void $PREFIX_[en|de]crypt (const void *inp,void *out,const AES_KEY *key); +# +{ my ($inp,$out,$key) = @_4args; + +$code.=<<___; +.globl GFp_${PREFIX}_encrypt +.type GFp_${PREFIX}_encrypt,\@abi-omnipotent +.align 16 +GFp_${PREFIX}_encrypt: +.cfi_startproc + movups ($inp),$inout0 # load input + mov 240($key),$rounds # key->rounds +___ + &aesni_generate1("enc",$key,$rounds); +$code.=<<___; + pxor $rndkey0,$rndkey0 # clear register bank + pxor $rndkey1,$rndkey1 + movups $inout0,($out) # output + pxor $inout0,$inout0 + ret +.cfi_endproc +.size GFp_${PREFIX}_encrypt,.-GFp_${PREFIX}_encrypt +___ +} + +# _aesni_[en|de]cryptN are private interfaces, N denotes interleave +# factor. Why 3x subroutine were originally used in loops? Even though +# aes[enc|dec] latency was originally 6, it could be scheduled only +# every *2nd* cycle. Thus 3x interleave was the one providing optimal +# utilization, i.e. when subroutine's throughput is virtually same as +# of non-interleaved subroutine [for number of input blocks up to 3]. +# This is why it originally made no sense to implement 2x subroutine. +# But times change and it became appropriate to spend extra 192 bytes +# on 2x subroutine on Atom Silvermont account. For processors that +# can schedule aes[enc|dec] every cycle optimal interleave factor +# equals to corresponding instructions latency. 8x is optimal for +# * Bridge and "super-optimal" for other Intel CPUs... + +sub aesni_generate2 { +my $dir=shift; +# As already mentioned it takes in $key and $rounds, which are *not* +# preserved. $inout[0-1] is cipher/clear text... +$code.=<<___; +.type _aesni_${dir}rypt2,\@abi-omnipotent +.align 16 +_aesni_${dir}rypt2: +.cfi_startproc + $movkey ($key),$rndkey0 + shl \$4,$rounds + $movkey 16($key),$rndkey1 + xorps $rndkey0,$inout0 + xorps $rndkey0,$inout1 + $movkey 32($key),$rndkey0 + lea 32($key,$rounds),$key + neg %rax # $rounds + add \$16,%rax + +.L${dir}_loop2: + aes${dir} $rndkey1,$inout0 + aes${dir} $rndkey1,$inout1 + $movkey ($key,%rax),$rndkey1 + add \$32,%rax + aes${dir} $rndkey0,$inout0 + aes${dir} $rndkey0,$inout1 + $movkey -16($key,%rax),$rndkey0 + jnz .L${dir}_loop2 + + aes${dir} $rndkey1,$inout0 + aes${dir} $rndkey1,$inout1 + aes${dir}last $rndkey0,$inout0 + aes${dir}last $rndkey0,$inout1 + ret +.cfi_endproc +.size _aesni_${dir}rypt2,.-_aesni_${dir}rypt2 +___ +} +sub aesni_generate3 { +my $dir=shift; +# As already mentioned it takes in $key and $rounds, which are *not* +# preserved. $inout[0-2] is cipher/clear text... +$code.=<<___; +.type _aesni_${dir}rypt3,\@abi-omnipotent +.align 16 +_aesni_${dir}rypt3: +.cfi_startproc + $movkey ($key),$rndkey0 + shl \$4,$rounds + $movkey 16($key),$rndkey1 + xorps $rndkey0,$inout0 + xorps $rndkey0,$inout1 + xorps $rndkey0,$inout2 + $movkey 32($key),$rndkey0 + lea 32($key,$rounds),$key + neg %rax # $rounds + add \$16,%rax + +.L${dir}_loop3: + aes${dir} $rndkey1,$inout0 + aes${dir} $rndkey1,$inout1 + aes${dir} $rndkey1,$inout2 + $movkey ($key,%rax),$rndkey1 + add \$32,%rax + aes${dir} $rndkey0,$inout0 + aes${dir} $rndkey0,$inout1 + aes${dir} $rndkey0,$inout2 + $movkey -16($key,%rax),$rndkey0 + jnz .L${dir}_loop3 + + aes${dir} $rndkey1,$inout0 + aes${dir} $rndkey1,$inout1 + aes${dir} $rndkey1,$inout2 + aes${dir}last $rndkey0,$inout0 + aes${dir}last $rndkey0,$inout1 + aes${dir}last $rndkey0,$inout2 + ret +.cfi_endproc +.size _aesni_${dir}rypt3,.-_aesni_${dir}rypt3 +___ +} +# 4x interleave is implemented to improve small block performance, +# most notably [and naturally] 4 block by ~30%. One can argue that one +# should have implemented 5x as well, but improvement would be <20%, +# so it's not worth it... +sub aesni_generate4 { +my $dir=shift; +# As already mentioned it takes in $key and $rounds, which are *not* +# preserved. $inout[0-3] is cipher/clear text... +$code.=<<___; +.type _aesni_${dir}rypt4,\@abi-omnipotent +.align 16 +_aesni_${dir}rypt4: +.cfi_startproc + $movkey ($key),$rndkey0 + shl \$4,$rounds + $movkey 16($key),$rndkey1 + xorps $rndkey0,$inout0 + xorps $rndkey0,$inout1 + xorps $rndkey0,$inout2 + xorps $rndkey0,$inout3 + $movkey 32($key),$rndkey0 + lea 32($key,$rounds),$key + neg %rax # $rounds + .byte 0x0f,0x1f,0x00 + add \$16,%rax + +.L${dir}_loop4: + aes${dir} $rndkey1,$inout0 + aes${dir} $rndkey1,$inout1 + aes${dir} $rndkey1,$inout2 + aes${dir} $rndkey1,$inout3 + $movkey ($key,%rax),$rndkey1 + add \$32,%rax + aes${dir} $rndkey0,$inout0 + aes${dir} $rndkey0,$inout1 + aes${dir} $rndkey0,$inout2 + aes${dir} $rndkey0,$inout3 + $movkey -16($key,%rax),$rndkey0 + jnz .L${dir}_loop4 + + aes${dir} $rndkey1,$inout0 + aes${dir} $rndkey1,$inout1 + aes${dir} $rndkey1,$inout2 + aes${dir} $rndkey1,$inout3 + aes${dir}last $rndkey0,$inout0 + aes${dir}last $rndkey0,$inout1 + aes${dir}last $rndkey0,$inout2 + aes${dir}last $rndkey0,$inout3 + ret +.cfi_endproc +.size _aesni_${dir}rypt4,.-_aesni_${dir}rypt4 +___ +} +sub aesni_generate6 { +my $dir=shift; +# As already mentioned it takes in $key and $rounds, which are *not* +# preserved. $inout[0-5] is cipher/clear text... +$code.=<<___; +.type _aesni_${dir}rypt6,\@abi-omnipotent +.align 16 +_aesni_${dir}rypt6: +.cfi_startproc + $movkey ($key),$rndkey0 + shl \$4,$rounds + $movkey 16($key),$rndkey1 + xorps $rndkey0,$inout0 + pxor $rndkey0,$inout1 + pxor $rndkey0,$inout2 + aes${dir} $rndkey1,$inout0 + lea 32($key,$rounds),$key + neg %rax # $rounds + aes${dir} $rndkey1,$inout1 + pxor $rndkey0,$inout3 + pxor $rndkey0,$inout4 + aes${dir} $rndkey1,$inout2 + pxor $rndkey0,$inout5 + $movkey ($key,%rax),$rndkey0 + add \$16,%rax + jmp .L${dir}_loop6_enter +.align 16 +.L${dir}_loop6: + aes${dir} $rndkey1,$inout0 + aes${dir} $rndkey1,$inout1 + aes${dir} $rndkey1,$inout2 +.L${dir}_loop6_enter: + aes${dir} $rndkey1,$inout3 + aes${dir} $rndkey1,$inout4 + aes${dir} $rndkey1,$inout5 + $movkey ($key,%rax),$rndkey1 + add \$32,%rax + aes${dir} $rndkey0,$inout0 + aes${dir} $rndkey0,$inout1 + aes${dir} $rndkey0,$inout2 + aes${dir} $rndkey0,$inout3 + aes${dir} $rndkey0,$inout4 + aes${dir} $rndkey0,$inout5 + $movkey -16($key,%rax),$rndkey0 + jnz .L${dir}_loop6 + + aes${dir} $rndkey1,$inout0 + aes${dir} $rndkey1,$inout1 + aes${dir} $rndkey1,$inout2 + aes${dir} $rndkey1,$inout3 + aes${dir} $rndkey1,$inout4 + aes${dir} $rndkey1,$inout5 + aes${dir}last $rndkey0,$inout0 + aes${dir}last $rndkey0,$inout1 + aes${dir}last $rndkey0,$inout2 + aes${dir}last $rndkey0,$inout3 + aes${dir}last $rndkey0,$inout4 + aes${dir}last $rndkey0,$inout5 + ret +.cfi_endproc +.size _aesni_${dir}rypt6,.-_aesni_${dir}rypt6 +___ +} +sub aesni_generate8 { +my $dir=shift; +# As already mentioned it takes in $key and $rounds, which are *not* +# preserved. $inout[0-7] is cipher/clear text... +$code.=<<___; +.type _aesni_${dir}rypt8,\@abi-omnipotent +.align 16 +_aesni_${dir}rypt8: +.cfi_startproc + $movkey ($key),$rndkey0 + shl \$4,$rounds + $movkey 16($key),$rndkey1 + xorps $rndkey0,$inout0 + xorps $rndkey0,$inout1 + pxor $rndkey0,$inout2 + pxor $rndkey0,$inout3 + pxor $rndkey0,$inout4 + lea 32($key,$rounds),$key + neg %rax # $rounds + aes${dir} $rndkey1,$inout0 + pxor $rndkey0,$inout5 + pxor $rndkey0,$inout6 + aes${dir} $rndkey1,$inout1 + pxor $rndkey0,$inout7 + $movkey ($key,%rax),$rndkey0 + add \$16,%rax + jmp .L${dir}_loop8_inner +.align 16 +.L${dir}_loop8: + aes${dir} $rndkey1,$inout0 + aes${dir} $rndkey1,$inout1 +.L${dir}_loop8_inner: + aes${dir} $rndkey1,$inout2 + aes${dir} $rndkey1,$inout3 + aes${dir} $rndkey1,$inout4 + aes${dir} $rndkey1,$inout5 + aes${dir} $rndkey1,$inout6 + aes${dir} $rndkey1,$inout7 +.L${dir}_loop8_enter: + $movkey ($key,%rax),$rndkey1 + add \$32,%rax + aes${dir} $rndkey0,$inout0 + aes${dir} $rndkey0,$inout1 + aes${dir} $rndkey0,$inout2 + aes${dir} $rndkey0,$inout3 + aes${dir} $rndkey0,$inout4 + aes${dir} $rndkey0,$inout5 + aes${dir} $rndkey0,$inout6 + aes${dir} $rndkey0,$inout7 + $movkey -16($key,%rax),$rndkey0 + jnz .L${dir}_loop8 + + aes${dir} $rndkey1,$inout0 + aes${dir} $rndkey1,$inout1 + aes${dir} $rndkey1,$inout2 + aes${dir} $rndkey1,$inout3 + aes${dir} $rndkey1,$inout4 + aes${dir} $rndkey1,$inout5 + aes${dir} $rndkey1,$inout6 + aes${dir} $rndkey1,$inout7 + aes${dir}last $rndkey0,$inout0 + aes${dir}last $rndkey0,$inout1 + aes${dir}last $rndkey0,$inout2 + aes${dir}last $rndkey0,$inout3 + aes${dir}last $rndkey0,$inout4 + aes${dir}last $rndkey0,$inout5 + aes${dir}last $rndkey0,$inout6 + aes${dir}last $rndkey0,$inout7 + ret +.cfi_endproc +.size _aesni_${dir}rypt8,.-_aesni_${dir}rypt8 +___ +} +&aesni_generate2("enc") if ($PREFIX eq "aes_hw"); +&aesni_generate3("enc") if ($PREFIX eq "aes_hw"); +&aesni_generate4("enc") if ($PREFIX eq "aes_hw"); +&aesni_generate6("enc") if ($PREFIX eq "aes_hw"); +&aesni_generate8("enc") if ($PREFIX eq "aes_hw"); + +if ($PREFIX eq "aes_hw") { +{ +###################################################################### +# void GFp_aes_hw_ctr32_encrypt_blocks (const void *in, void *out, +# size_t blocks, const AES_KEY *key, +# const char *ivec); +# +# Handles only complete blocks, operates on 32-bit counter and +# does not update *ivec! (see crypto/modes/ctr128.c for details) +# +# Overhaul based on suggestions from Shay Gueron and Vlad Krasnov, +# http://rt.openssl.org/Ticket/Display.html?id=3021&user=guest&pass=guest. +# Keywords are full unroll and modulo-schedule counter calculations +# with zero-round key xor. +{ +my ($in0,$in1,$in2,$in3,$in4,$in5)=map("%xmm$_",(10..15)); +my ($key0,$ctr)=("%ebp","${ivp}d"); +my $frame_size = 0x80 + ($win64?160:0); + +$code.=<<___; +.globl GFp_${PREFIX}_ctr32_encrypt_blocks +.type GFp_${PREFIX}_ctr32_encrypt_blocks,\@function,5 +.align 16 +GFp_${PREFIX}_ctr32_encrypt_blocks: +.cfi_startproc + cmp \$1,$len + jne .Lctr32_bulk + + # handle single block without allocating stack frame, + # useful when handling edges + movups ($ivp),$inout0 + movups ($inp),$inout1 + mov 240($key),%edx # key->rounds +___ + &aesni_generate1("enc",$key,"%edx"); +$code.=<<___; + pxor $rndkey0,$rndkey0 # clear register bank + pxor $rndkey1,$rndkey1 + xorps $inout1,$inout0 + pxor $inout1,$inout1 + movups $inout0,($out) + xorps $inout0,$inout0 + jmp .Lctr32_epilogue + +.align 16 +.Lctr32_bulk: + lea (%rsp),$key_ # use $key_ as frame pointer +.cfi_def_cfa_register $key_ + push %rbp +.cfi_push %rbp + sub \$$frame_size,%rsp + and \$-16,%rsp # Linux kernel stack can be incorrectly seeded +___ +$code.=<<___ if ($win64); + movaps %xmm6,-0xa8($key_) # offload everything + movaps %xmm7,-0x98($key_) + movaps %xmm8,-0x88($key_) + movaps %xmm9,-0x78($key_) + movaps %xmm10,-0x68($key_) + movaps %xmm11,-0x58($key_) + movaps %xmm12,-0x48($key_) + movaps %xmm13,-0x38($key_) + movaps %xmm14,-0x28($key_) + movaps %xmm15,-0x18($key_) +.Lctr32_body: +___ +$code.=<<___; + + # 8 16-byte words on top of stack are counter values + # xor-ed with zero-round key + + movdqu ($ivp),$inout0 + movdqu ($key),$rndkey0 + mov 12($ivp),$ctr # counter LSB + pxor $rndkey0,$inout0 + mov 12($key),$key0 # 0-round key LSB + movdqa $inout0,0x00(%rsp) # populate counter block + bswap $ctr + movdqa $inout0,$inout1 + movdqa $inout0,$inout2 + movdqa $inout0,$inout3 + movdqa $inout0,0x40(%rsp) + movdqa $inout0,0x50(%rsp) + movdqa $inout0,0x60(%rsp) + mov %rdx,%r10 # about to borrow %rdx + movdqa $inout0,0x70(%rsp) + + lea 1($ctr),%rax + lea 2($ctr),%rdx + bswap %eax + bswap %edx + xor $key0,%eax + xor $key0,%edx + pinsrd \$3,%eax,$inout1 + lea 3($ctr),%rax + movdqa $inout1,0x10(%rsp) + pinsrd \$3,%edx,$inout2 + bswap %eax + mov %r10,%rdx # restore %rdx + lea 4($ctr),%r10 + movdqa $inout2,0x20(%rsp) + xor $key0,%eax + bswap %r10d + pinsrd \$3,%eax,$inout3 + xor $key0,%r10d + movdqa $inout3,0x30(%rsp) + lea 5($ctr),%r9 + mov %r10d,0x40+12(%rsp) + bswap %r9d + lea 6($ctr),%r10 + mov 240($key),$rounds # key->rounds + xor $key0,%r9d + bswap %r10d + mov %r9d,0x50+12(%rsp) + xor $key0,%r10d + lea 7($ctr),%r9 + mov %r10d,0x60+12(%rsp) + bswap %r9d + leaq GFp_ia32cap_P(%rip),%r10 + mov 4(%r10),%r10d + xor $key0,%r9d + and \$`1<<26|1<<22`,%r10d # isolate XSAVE+MOVBE + mov %r9d,0x70+12(%rsp) + + $movkey 0x10($key),$rndkey1 + + movdqa 0x40(%rsp),$inout4 + movdqa 0x50(%rsp),$inout5 + + cmp \$8,$len # $len is in blocks + jb .Lctr32_tail # short input if ($len<8) + + sub \$6,$len # $len is biased by -6 + cmp \$`1<<22`,%r10d # check for MOVBE without XSAVE + je .Lctr32_6x # [which denotes Atom Silvermont] + + lea 0x80($key),$key # size optimization + sub \$2,$len # $len is biased by -8 + jmp .Lctr32_loop8 + +.align 16 +.Lctr32_6x: + shl \$4,$rounds + mov \$48,$rnds_ + bswap $key0 + lea 32($key,$rounds),$key # end of key schedule + sub %rax,%r10 # twisted $rounds + jmp .Lctr32_loop6 + +.align 16 +.Lctr32_loop6: + add \$6,$ctr # next counter value + $movkey -48($key,$rnds_),$rndkey0 + aesenc $rndkey1,$inout0 + mov $ctr,%eax + xor $key0,%eax + aesenc $rndkey1,$inout1 + movbe %eax,`0x00+12`(%rsp) # store next counter value + lea 1($ctr),%eax + aesenc $rndkey1,$inout2 + xor $key0,%eax + movbe %eax,`0x10+12`(%rsp) + aesenc $rndkey1,$inout3 + lea 2($ctr),%eax + xor $key0,%eax + aesenc $rndkey1,$inout4 + movbe %eax,`0x20+12`(%rsp) + lea 3($ctr),%eax + aesenc $rndkey1,$inout5 + $movkey -32($key,$rnds_),$rndkey1 + xor $key0,%eax + + aesenc $rndkey0,$inout0 + movbe %eax,`0x30+12`(%rsp) + lea 4($ctr),%eax + aesenc $rndkey0,$inout1 + xor $key0,%eax + movbe %eax,`0x40+12`(%rsp) + aesenc $rndkey0,$inout2 + lea 5($ctr),%eax + xor $key0,%eax + aesenc $rndkey0,$inout3 + movbe %eax,`0x50+12`(%rsp) + mov %r10,%rax # mov $rnds_,$rounds + aesenc $rndkey0,$inout4 + aesenc $rndkey0,$inout5 + $movkey -16($key,$rnds_),$rndkey0 + + call .Lenc_loop6 + + movdqu ($inp),$inout6 # load 6 input blocks + movdqu 0x10($inp),$inout7 + movdqu 0x20($inp),$in0 + movdqu 0x30($inp),$in1 + movdqu 0x40($inp),$in2 + movdqu 0x50($inp),$in3 + lea 0x60($inp),$inp # $inp+=6*16 + $movkey -64($key,$rnds_),$rndkey1 + pxor $inout0,$inout6 # inp^=E(ctr) + movaps 0x00(%rsp),$inout0 # load next counter [xor-ed with 0 round] + pxor $inout1,$inout7 + movaps 0x10(%rsp),$inout1 + pxor $inout2,$in0 + movaps 0x20(%rsp),$inout2 + pxor $inout3,$in1 + movaps 0x30(%rsp),$inout3 + pxor $inout4,$in2 + movaps 0x40(%rsp),$inout4 + pxor $inout5,$in3 + movaps 0x50(%rsp),$inout5 + movdqu $inout6,($out) # store 6 output blocks + movdqu $inout7,0x10($out) + movdqu $in0,0x20($out) + movdqu $in1,0x30($out) + movdqu $in2,0x40($out) + movdqu $in3,0x50($out) + lea 0x60($out),$out # $out+=6*16 + + sub \$6,$len + jnc .Lctr32_loop6 # loop if $len-=6 didn't borrow + + add \$6,$len # restore real remaining $len + jz .Lctr32_done # done if ($len==0) + + lea -48($rnds_),$rounds + lea -80($key,$rnds_),$key # restore $key + neg $rounds + shr \$4,$rounds # restore $rounds + jmp .Lctr32_tail + +.align 32 +.Lctr32_loop8: + add \$8,$ctr # next counter value + movdqa 0x60(%rsp),$inout6 + aesenc $rndkey1,$inout0 + mov $ctr,%r9d + movdqa 0x70(%rsp),$inout7 + aesenc $rndkey1,$inout1 + bswap %r9d + $movkey 0x20-0x80($key),$rndkey0 + aesenc $rndkey1,$inout2 + xor $key0,%r9d + nop + aesenc $rndkey1,$inout3 + mov %r9d,0x00+12(%rsp) # store next counter value + lea 1($ctr),%r9 + aesenc $rndkey1,$inout4 + aesenc $rndkey1,$inout5 + aesenc $rndkey1,$inout6 + aesenc $rndkey1,$inout7 + $movkey 0x30-0x80($key),$rndkey1 +___ +for($i=2;$i<8;$i++) { +my $rndkeyx = ($i&1)?$rndkey1:$rndkey0; +$code.=<<___; + bswap %r9d + aesenc $rndkeyx,$inout0 + aesenc $rndkeyx,$inout1 + xor $key0,%r9d + .byte 0x66,0x90 + aesenc $rndkeyx,$inout2 + aesenc $rndkeyx,$inout3 + mov %r9d,`0x10*($i-1)`+12(%rsp) + lea $i($ctr),%r9 + aesenc $rndkeyx,$inout4 + aesenc $rndkeyx,$inout5 + aesenc $rndkeyx,$inout6 + aesenc $rndkeyx,$inout7 + $movkey `0x20+0x10*$i`-0x80($key),$rndkeyx +___ +} +$code.=<<___; + bswap %r9d + aesenc $rndkey0,$inout0 + aesenc $rndkey0,$inout1 + aesenc $rndkey0,$inout2 + xor $key0,%r9d + movdqu 0x00($inp),$in0 # start loading input + aesenc $rndkey0,$inout3 + mov %r9d,0x70+12(%rsp) + cmp \$11,$rounds + aesenc $rndkey0,$inout4 + aesenc $rndkey0,$inout5 + aesenc $rndkey0,$inout6 + aesenc $rndkey0,$inout7 + $movkey 0xa0-0x80($key),$rndkey0 + + jb .Lctr32_enc_done + + aesenc $rndkey1,$inout0 + aesenc $rndkey1,$inout1 + aesenc $rndkey1,$inout2 + aesenc $rndkey1,$inout3 + aesenc $rndkey1,$inout4 + aesenc $rndkey1,$inout5 + aesenc $rndkey1,$inout6 + aesenc $rndkey1,$inout7 + $movkey 0xb0-0x80($key),$rndkey1 + + aesenc $rndkey0,$inout0 + aesenc $rndkey0,$inout1 + aesenc $rndkey0,$inout2 + aesenc $rndkey0,$inout3 + aesenc $rndkey0,$inout4 + aesenc $rndkey0,$inout5 + aesenc $rndkey0,$inout6 + aesenc $rndkey0,$inout7 + $movkey 0xc0-0x80($key),$rndkey0 + + # 192-bit key support was removed. + + aesenc $rndkey1,$inout0 + aesenc $rndkey1,$inout1 + aesenc $rndkey1,$inout2 + aesenc $rndkey1,$inout3 + aesenc $rndkey1,$inout4 + aesenc $rndkey1,$inout5 + aesenc $rndkey1,$inout6 + aesenc $rndkey1,$inout7 + $movkey 0xd0-0x80($key),$rndkey1 + + aesenc $rndkey0,$inout0 + aesenc $rndkey0,$inout1 + aesenc $rndkey0,$inout2 + aesenc $rndkey0,$inout3 + aesenc $rndkey0,$inout4 + aesenc $rndkey0,$inout5 + aesenc $rndkey0,$inout6 + aesenc $rndkey0,$inout7 + $movkey 0xe0-0x80($key),$rndkey0 + jmp .Lctr32_enc_done + +.align 16 +.Lctr32_enc_done: + movdqu 0x10($inp),$in1 + pxor $rndkey0,$in0 # input^=round[last] + movdqu 0x20($inp),$in2 + pxor $rndkey0,$in1 + movdqu 0x30($inp),$in3 + pxor $rndkey0,$in2 + movdqu 0x40($inp),$in4 + pxor $rndkey0,$in3 + movdqu 0x50($inp),$in5 + pxor $rndkey0,$in4 + pxor $rndkey0,$in5 + aesenc $rndkey1,$inout0 + aesenc $rndkey1,$inout1 + aesenc $rndkey1,$inout2 + aesenc $rndkey1,$inout3 + aesenc $rndkey1,$inout4 + aesenc $rndkey1,$inout5 + aesenc $rndkey1,$inout6 + aesenc $rndkey1,$inout7 + movdqu 0x60($inp),$rndkey1 # borrow $rndkey1 for inp[6] + lea 0x80($inp),$inp # $inp+=8*16 + + aesenclast $in0,$inout0 # $inN is inp[N]^round[last] + pxor $rndkey0,$rndkey1 # borrowed $rndkey + movdqu 0x70-0x80($inp),$in0 + aesenclast $in1,$inout1 + pxor $rndkey0,$in0 + movdqa 0x00(%rsp),$in1 # load next counter block + aesenclast $in2,$inout2 + aesenclast $in3,$inout3 + movdqa 0x10(%rsp),$in2 + movdqa 0x20(%rsp),$in3 + aesenclast $in4,$inout4 + aesenclast $in5,$inout5 + movdqa 0x30(%rsp),$in4 + movdqa 0x40(%rsp),$in5 + aesenclast $rndkey1,$inout6 + movdqa 0x50(%rsp),$rndkey0 + $movkey 0x10-0x80($key),$rndkey1#real 1st-round key + aesenclast $in0,$inout7 + + movups $inout0,($out) # store 8 output blocks + movdqa $in1,$inout0 + movups $inout1,0x10($out) + movdqa $in2,$inout1 + movups $inout2,0x20($out) + movdqa $in3,$inout2 + movups $inout3,0x30($out) + movdqa $in4,$inout3 + movups $inout4,0x40($out) + movdqa $in5,$inout4 + movups $inout5,0x50($out) + movdqa $rndkey0,$inout5 + movups $inout6,0x60($out) + movups $inout7,0x70($out) + lea 0x80($out),$out # $out+=8*16 + + sub \$8,$len + jnc .Lctr32_loop8 # loop if $len-=8 didn't borrow + + add \$8,$len # restore real remaining $len + jz .Lctr32_done # done if ($len==0) + lea -0x80($key),$key + +.Lctr32_tail: + # note that at this point $inout0..5 are populated with + # counter values xor-ed with 0-round key + lea 16($key),$key + cmp \$4,$len + jb .Lctr32_loop3 + je .Lctr32_loop4 + + # if ($len>4) compute 7 E(counter) + shl \$4,$rounds + movdqa 0x60(%rsp),$inout6 + pxor $inout7,$inout7 + + $movkey 16($key),$rndkey0 + aesenc $rndkey1,$inout0 + aesenc $rndkey1,$inout1 + lea 32-16($key,$rounds),$key# prepare for .Lenc_loop8_enter + neg %rax + aesenc $rndkey1,$inout2 + add \$16,%rax # prepare for .Lenc_loop8_enter + movups ($inp),$in0 + aesenc $rndkey1,$inout3 + aesenc $rndkey1,$inout4 + movups 0x10($inp),$in1 # pre-load input + movups 0x20($inp),$in2 + aesenc $rndkey1,$inout5 + aesenc $rndkey1,$inout6 + + call .Lenc_loop8_enter + + movdqu 0x30($inp),$in3 + pxor $in0,$inout0 + movdqu 0x40($inp),$in0 + pxor $in1,$inout1 + movdqu $inout0,($out) # store output + pxor $in2,$inout2 + movdqu $inout1,0x10($out) + pxor $in3,$inout3 + movdqu $inout2,0x20($out) + pxor $in0,$inout4 + movdqu $inout3,0x30($out) + movdqu $inout4,0x40($out) + cmp \$6,$len + jb .Lctr32_done # $len was 5, stop store + + movups 0x50($inp),$in1 + xorps $in1,$inout5 + movups $inout5,0x50($out) + je .Lctr32_done # $len was 6, stop store + + movups 0x60($inp),$in2 + xorps $in2,$inout6 + movups $inout6,0x60($out) + jmp .Lctr32_done # $len was 7, stop store + +.align 32 +.Lctr32_loop4: + aesenc $rndkey1,$inout0 + lea 16($key),$key + dec $rounds + aesenc $rndkey1,$inout1 + aesenc $rndkey1,$inout2 + aesenc $rndkey1,$inout3 + $movkey ($key),$rndkey1 + jnz .Lctr32_loop4 + aesenclast $rndkey1,$inout0 + aesenclast $rndkey1,$inout1 + movups ($inp),$in0 # load input + movups 0x10($inp),$in1 + aesenclast $rndkey1,$inout2 + aesenclast $rndkey1,$inout3 + movups 0x20($inp),$in2 + movups 0x30($inp),$in3 + + xorps $in0,$inout0 + movups $inout0,($out) # store output + xorps $in1,$inout1 + movups $inout1,0x10($out) + pxor $in2,$inout2 + movdqu $inout2,0x20($out) + pxor $in3,$inout3 + movdqu $inout3,0x30($out) + jmp .Lctr32_done # $len was 4, stop store + +.align 32 +.Lctr32_loop3: + aesenc $rndkey1,$inout0 + lea 16($key),$key + dec $rounds + aesenc $rndkey1,$inout1 + aesenc $rndkey1,$inout2 + $movkey ($key),$rndkey1 + jnz .Lctr32_loop3 + aesenclast $rndkey1,$inout0 + aesenclast $rndkey1,$inout1 + aesenclast $rndkey1,$inout2 + + movups ($inp),$in0 # load input + xorps $in0,$inout0 + movups $inout0,($out) # store output + cmp \$2,$len + jb .Lctr32_done # $len was 1, stop store + + movups 0x10($inp),$in1 + xorps $in1,$inout1 + movups $inout1,0x10($out) + je .Lctr32_done # $len was 2, stop store + + movups 0x20($inp),$in2 + xorps $in2,$inout2 + movups $inout2,0x20($out) # $len was 3, stop store + +.Lctr32_done: + xorps %xmm0,%xmm0 # clear register bank + xor $key0,$key0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 +___ +$code.=<<___ if (!$win64); + pxor %xmm6,%xmm6 + pxor %xmm7,%xmm7 + movaps %xmm0,0x00(%rsp) # clear stack + pxor %xmm8,%xmm8 + movaps %xmm0,0x10(%rsp) + pxor %xmm9,%xmm9 + movaps %xmm0,0x20(%rsp) + pxor %xmm10,%xmm10 + movaps %xmm0,0x30(%rsp) + pxor %xmm11,%xmm11 + movaps %xmm0,0x40(%rsp) + pxor %xmm12,%xmm12 + movaps %xmm0,0x50(%rsp) + pxor %xmm13,%xmm13 + movaps %xmm0,0x60(%rsp) + pxor %xmm14,%xmm14 + movaps %xmm0,0x70(%rsp) + pxor %xmm15,%xmm15 +___ +$code.=<<___ if ($win64); + movaps -0xa8($key_),%xmm6 + movaps %xmm0,-0xa8($key_) # clear stack + movaps -0x98($key_),%xmm7 + movaps %xmm0,-0x98($key_) + movaps -0x88($key_),%xmm8 + movaps %xmm0,-0x88($key_) + movaps -0x78($key_),%xmm9 + movaps %xmm0,-0x78($key_) + movaps -0x68($key_),%xmm10 + movaps %xmm0,-0x68($key_) + movaps -0x58($key_),%xmm11 + movaps %xmm0,-0x58($key_) + movaps -0x48($key_),%xmm12 + movaps %xmm0,-0x48($key_) + movaps -0x38($key_),%xmm13 + movaps %xmm0,-0x38($key_) + movaps -0x28($key_),%xmm14 + movaps %xmm0,-0x28($key_) + movaps -0x18($key_),%xmm15 + movaps %xmm0,-0x18($key_) + movaps %xmm0,0x00(%rsp) + movaps %xmm0,0x10(%rsp) + movaps %xmm0,0x20(%rsp) + movaps %xmm0,0x30(%rsp) + movaps %xmm0,0x40(%rsp) + movaps %xmm0,0x50(%rsp) + movaps %xmm0,0x60(%rsp) + movaps %xmm0,0x70(%rsp) +___ +$code.=<<___; + mov -8($key_),%rbp +.cfi_restore %rbp + lea ($key_),%rsp +.cfi_def_cfa_register %rsp +.Lctr32_epilogue: + ret +.cfi_endproc +.size GFp_${PREFIX}_ctr32_encrypt_blocks,.-GFp_${PREFIX}_ctr32_encrypt_blocks +___ +} }} + +{ my ($inp,$bits,$key) = @_4args; + $bits =~ s/%r/%e/; + +# This is based on submission by +# +# Huang Ying +# Vinodh Gopal +# Kahraman Akdemir +# +# Aggressively optimized in respect to aeskeygenassist's critical path +# and is contained in %xmm0-5 to meet Win64 ABI requirement. +# +# int GFp_${PREFIX}_set_encrypt_key(const unsigned char *inp, +# int bits, AES_KEY * const key); +# +# input: $inp user-supplied key +# $bits $inp length in bits +# $key pointer to key schedule +# output: %eax 0 denoting success, -1 or -2 - failure (see C) +# $bits rounds-1 (used in aesni_set_decrypt_key) +# *$key key schedule +# $key pointer to key schedule (used in +# aesni_set_decrypt_key) +# +# Subroutine is frame-less, which means that only volatile registers +# are used. Note that it's declared "abi-omnipotent", which means that +# amount of volatile registers is smaller on Windows. +# +$code.=<<___; +.globl GFp_${PREFIX}_set_encrypt_key +.type GFp_${PREFIX}_set_encrypt_key,\@abi-omnipotent +.align 16 +GFp_${PREFIX}_set_encrypt_key: +__aesni_set_encrypt_key: +.cfi_startproc + .byte 0x48,0x83,0xEC,0x08 # sub rsp,8 +.cfi_adjust_cfa_offset 8 + mov \$-1,%rax + test $inp,$inp + jz .Lenc_key_ret + test $key,$key + jz .Lenc_key_ret + + movups ($inp),%xmm0 # pull first 128 bits of *userKey + xorps %xmm4,%xmm4 # low dword of xmm4 is assumed 0 + leaq GFp_ia32cap_P(%rip),%r10 + movl 4(%r10),%r10d + and \$`1<<28|1<<11`,%r10d # AVX and XOP bits + lea 16($key),%rax # %rax is used as modifiable copy of $key + cmp \$256,$bits + je .L14rounds + # 192-bit key support was removed. + cmp \$128,$bits + jne .Lbad_keybits + +.L10rounds: + mov \$9,$bits # 10 rounds for 128-bit key + cmp \$`1<<28`,%r10d # AVX, bit no XOP + je .L10rounds_alt + + $movkey %xmm0,($key) # round 0 + aeskeygenassist \$0x1,%xmm0,%xmm1 # round 1 + call .Lkey_expansion_128_cold + aeskeygenassist \$0x2,%xmm0,%xmm1 # round 2 + call .Lkey_expansion_128 + aeskeygenassist \$0x4,%xmm0,%xmm1 # round 3 + call .Lkey_expansion_128 + aeskeygenassist \$0x8,%xmm0,%xmm1 # round 4 + call .Lkey_expansion_128 + aeskeygenassist \$0x10,%xmm0,%xmm1 # round 5 + call .Lkey_expansion_128 + aeskeygenassist \$0x20,%xmm0,%xmm1 # round 6 + call .Lkey_expansion_128 + aeskeygenassist \$0x40,%xmm0,%xmm1 # round 7 + call .Lkey_expansion_128 + aeskeygenassist \$0x80,%xmm0,%xmm1 # round 8 + call .Lkey_expansion_128 + aeskeygenassist \$0x1b,%xmm0,%xmm1 # round 9 + call .Lkey_expansion_128 + aeskeygenassist \$0x36,%xmm0,%xmm1 # round 10 + call .Lkey_expansion_128 + $movkey %xmm0,(%rax) + mov $bits,80(%rax) # 240(%rdx) + xor %eax,%eax + jmp .Lenc_key_ret + +.align 16 +.L10rounds_alt: + movdqa .Lkey_rotate(%rip),%xmm5 + mov \$8,%r10d + movdqa .Lkey_rcon1(%rip),%xmm4 + movdqa %xmm0,%xmm2 + movdqu %xmm0,($key) + jmp .Loop_key128 + +.align 16 +.Loop_key128: + pshufb %xmm5,%xmm0 + aesenclast %xmm4,%xmm0 + pslld \$1,%xmm4 + lea 16(%rax),%rax + + movdqa %xmm2,%xmm3 + pslldq \$4,%xmm2 + pxor %xmm2,%xmm3 + pslldq \$4,%xmm2 + pxor %xmm2,%xmm3 + pslldq \$4,%xmm2 + pxor %xmm3,%xmm2 + + pxor %xmm2,%xmm0 + movdqu %xmm0,-16(%rax) + movdqa %xmm0,%xmm2 + + dec %r10d + jnz .Loop_key128 + + movdqa .Lkey_rcon1b(%rip),%xmm4 + + pshufb %xmm5,%xmm0 + aesenclast %xmm4,%xmm0 + pslld \$1,%xmm4 + + movdqa %xmm2,%xmm3 + pslldq \$4,%xmm2 + pxor %xmm2,%xmm3 + pslldq \$4,%xmm2 + pxor %xmm2,%xmm3 + pslldq \$4,%xmm2 + pxor %xmm3,%xmm2 + + pxor %xmm2,%xmm0 + movdqu %xmm0,(%rax) + + movdqa %xmm0,%xmm2 + pshufb %xmm5,%xmm0 + aesenclast %xmm4,%xmm0 + + movdqa %xmm2,%xmm3 + pslldq \$4,%xmm2 + pxor %xmm2,%xmm3 + pslldq \$4,%xmm2 + pxor %xmm2,%xmm3 + pslldq \$4,%xmm2 + pxor %xmm3,%xmm2 + + pxor %xmm2,%xmm0 + movdqu %xmm0,16(%rax) + + mov $bits,96(%rax) # 240($key) + xor %eax,%eax + jmp .Lenc_key_ret + +# 192-bit key support was removed. + +.align 16 +.L14rounds: + movups 16($inp),%xmm2 # remaining half of *userKey + mov \$13,$bits # 14 rounds for 256 + lea 16(%rax),%rax + cmp \$`1<<28`,%r10d # AVX, but no XOP + je .L14rounds_alt + + $movkey %xmm0,($key) # round 0 + $movkey %xmm2,16($key) # round 1 + aeskeygenassist \$0x1,%xmm2,%xmm1 # round 2 + call .Lkey_expansion_256a_cold + aeskeygenassist \$0x1,%xmm0,%xmm1 # round 3 + call .Lkey_expansion_256b + aeskeygenassist \$0x2,%xmm2,%xmm1 # round 4 + call .Lkey_expansion_256a + aeskeygenassist \$0x2,%xmm0,%xmm1 # round 5 + call .Lkey_expansion_256b + aeskeygenassist \$0x4,%xmm2,%xmm1 # round 6 + call .Lkey_expansion_256a + aeskeygenassist \$0x4,%xmm0,%xmm1 # round 7 + call .Lkey_expansion_256b + aeskeygenassist \$0x8,%xmm2,%xmm1 # round 8 + call .Lkey_expansion_256a + aeskeygenassist \$0x8,%xmm0,%xmm1 # round 9 + call .Lkey_expansion_256b + aeskeygenassist \$0x10,%xmm2,%xmm1 # round 10 + call .Lkey_expansion_256a + aeskeygenassist \$0x10,%xmm0,%xmm1 # round 11 + call .Lkey_expansion_256b + aeskeygenassist \$0x20,%xmm2,%xmm1 # round 12 + call .Lkey_expansion_256a + aeskeygenassist \$0x20,%xmm0,%xmm1 # round 13 + call .Lkey_expansion_256b + aeskeygenassist \$0x40,%xmm2,%xmm1 # round 14 + call .Lkey_expansion_256a + $movkey %xmm0,(%rax) + mov $bits,16(%rax) # 240(%rdx) + xor %rax,%rax + jmp .Lenc_key_ret + +.align 16 +.L14rounds_alt: + movdqa .Lkey_rotate(%rip),%xmm5 + movdqa .Lkey_rcon1(%rip),%xmm4 + mov \$7,%r10d + movdqu %xmm0,0($key) + movdqa %xmm2,%xmm1 + movdqu %xmm2,16($key) + jmp .Loop_key256 + +.align 16 +.Loop_key256: + pshufb %xmm5,%xmm2 + aesenclast %xmm4,%xmm2 + + movdqa %xmm0,%xmm3 + pslldq \$4,%xmm0 + pxor %xmm0,%xmm3 + pslldq \$4,%xmm0 + pxor %xmm0,%xmm3 + pslldq \$4,%xmm0 + pxor %xmm3,%xmm0 + pslld \$1,%xmm4 + + pxor %xmm2,%xmm0 + movdqu %xmm0,(%rax) + + dec %r10d + jz .Ldone_key256 + + pshufd \$0xff,%xmm0,%xmm2 + pxor %xmm3,%xmm3 + aesenclast %xmm3,%xmm2 + + movdqa %xmm1,%xmm3 + pslldq \$4,%xmm1 + pxor %xmm1,%xmm3 + pslldq \$4,%xmm1 + pxor %xmm1,%xmm3 + pslldq \$4,%xmm1 + pxor %xmm3,%xmm1 + + pxor %xmm1,%xmm2 + movdqu %xmm2,16(%rax) + lea 32(%rax),%rax + movdqa %xmm2,%xmm1 + + jmp .Loop_key256 + +.Ldone_key256: + mov $bits,16(%rax) # 240($key) + xor %eax,%eax + jmp .Lenc_key_ret + +.align 16 +.Lbad_keybits: + mov \$-2,%rax +.Lenc_key_ret: + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + add \$8,%rsp +.cfi_adjust_cfa_offset -8 + ret +.cfi_endproc +.LSEH_end_GFp_set_encrypt_key: + +.align 16 +.Lkey_expansion_128: + $movkey %xmm0,(%rax) + lea 16(%rax),%rax +.Lkey_expansion_128_cold: + shufps \$0b00010000,%xmm0,%xmm4 + xorps %xmm4, %xmm0 + shufps \$0b10001100,%xmm0,%xmm4 + xorps %xmm4, %xmm0 + shufps \$0b11111111,%xmm1,%xmm1 # critical path + xorps %xmm1,%xmm0 + ret + +.align 16 +.Lkey_expansion_192a: + $movkey %xmm0,(%rax) + lea 16(%rax),%rax +.Lkey_expansion_192a_cold: + movaps %xmm2, %xmm5 +.Lkey_expansion_192b_warm: + shufps \$0b00010000,%xmm0,%xmm4 + movdqa %xmm2,%xmm3 + xorps %xmm4,%xmm0 + shufps \$0b10001100,%xmm0,%xmm4 + pslldq \$4,%xmm3 + xorps %xmm4,%xmm0 + pshufd \$0b01010101,%xmm1,%xmm1 # critical path + pxor %xmm3,%xmm2 + pxor %xmm1,%xmm0 + pshufd \$0b11111111,%xmm0,%xmm3 + pxor %xmm3,%xmm2 + ret + +.align 16 +.Lkey_expansion_192b: + movaps %xmm0,%xmm3 + shufps \$0b01000100,%xmm0,%xmm5 + $movkey %xmm5,(%rax) + shufps \$0b01001110,%xmm2,%xmm3 + $movkey %xmm3,16(%rax) + lea 32(%rax),%rax + jmp .Lkey_expansion_192b_warm + +.align 16 +.Lkey_expansion_256a: + $movkey %xmm2,(%rax) + lea 16(%rax),%rax +.Lkey_expansion_256a_cold: + shufps \$0b00010000,%xmm0,%xmm4 + xorps %xmm4,%xmm0 + shufps \$0b10001100,%xmm0,%xmm4 + xorps %xmm4,%xmm0 + shufps \$0b11111111,%xmm1,%xmm1 # critical path + xorps %xmm1,%xmm0 + ret + +.align 16 +.Lkey_expansion_256b: + $movkey %xmm0,(%rax) + lea 16(%rax),%rax + + shufps \$0b00010000,%xmm2,%xmm4 + xorps %xmm4,%xmm2 + shufps \$0b10001100,%xmm2,%xmm4 + xorps %xmm4,%xmm2 + shufps \$0b10101010,%xmm1,%xmm1 # critical path + xorps %xmm1,%xmm2 + ret +.size GFp_${PREFIX}_set_encrypt_key,.-GFp_${PREFIX}_set_encrypt_key +.size __aesni_set_encrypt_key,.-__aesni_set_encrypt_key +___ +} + +$code.=<<___; +.align 64 +.Lbswap_mask: + .byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 +.Lincrement32: + .long 6,6,6,0 +.Lincrement64: + .long 1,0,0,0 +.Lincrement1: + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +.Lkey_rotate: + .long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d +.Lkey_rotate192: + .long 0x04070605,0x04070605,0x04070605,0x04070605 +.Lkey_rcon1: + .long 1,1,1,1 +.Lkey_rcon1b: + .long 0x1b,0x1b,0x1b,0x1b + +.asciz "AES for Intel AES-NI, CRYPTOGAMS by " +.align 64 +___ + +# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame, +# CONTEXT *context,DISPATCHER_CONTEXT *disp) +if ($win64) { +$rec="%rcx"; +$frame="%rdx"; +$context="%r8"; +$disp="%r9"; + +$code.=<<___; +.extern __imp_RtlVirtualUnwind +___ +$code.=<<___ if ($PREFIX eq "aes_hw"); +.type ctr_xts_se_handler,\@abi-omnipotent +.align 16 +ctr_xts_se_handler: + push %rsi + push %rdi + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + pushfq + sub \$64,%rsp + + mov 120($context),%rax # pull context->Rax + mov 248($context),%rbx # pull context->Rip + + mov 8($disp),%rsi # disp->ImageBase + mov 56($disp),%r11 # disp->HandlerData + + mov 0(%r11),%r10d # HandlerData[0] + lea (%rsi,%r10),%r10 # prologue lable + cmp %r10,%rbx # context->RipRsp + + mov 4(%r11),%r10d # HandlerData[1] + lea (%rsi,%r10),%r10 # epilogue label + cmp %r10,%rbx # context->Rip>=epilogue label + jae .Lcommon_seh_tail + + mov 208($context),%rax # pull context->R11 + + lea -0xa8(%rax),%rsi # %xmm save area + lea 512($context),%rdi # & context.Xmm6 + mov \$20,%ecx # 10*sizeof(%xmm0)/sizeof(%rax) + .long 0xa548f3fc # cld; rep movsq + + mov -8(%rax),%rbp # restore saved %rbp + mov %rbp,160($context) # restore context->Rbp + + +.Lcommon_seh_tail: + mov 8(%rax),%rdi + mov 16(%rax),%rsi + mov %rax,152($context) # restore context->Rsp + mov %rsi,168($context) # restore context->Rsi + mov %rdi,176($context) # restore context->Rdi + + mov 40($disp),%rdi # disp->ContextRecord + mov $context,%rsi # context + mov \$154,%ecx # sizeof(CONTEXT) + .long 0xa548f3fc # cld; rep movsq + + mov $disp,%rsi + xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER + mov 8(%rsi),%rdx # arg2, disp->ImageBase + mov 0(%rsi),%r8 # arg3, disp->ControlPc + mov 16(%rsi),%r9 # arg4, disp->FunctionEntry + mov 40(%rsi),%r10 # disp->ContextRecord + lea 56(%rsi),%r11 # &disp->HandlerData + lea 24(%rsi),%r12 # &disp->EstablisherFrame + mov %r10,32(%rsp) # arg5 + mov %r11,40(%rsp) # arg6 + mov %r12,48(%rsp) # arg7 + mov %rcx,56(%rsp) # arg8, (NULL) + call *__imp_RtlVirtualUnwind(%rip) + + mov \$1,%eax # ExceptionContinueSearch + add \$64,%rsp + popfq + pop %r15 + pop %r14 + pop %r13 + pop %r12 + pop %rbp + pop %rbx + pop %rdi + pop %rsi + ret +.size ctr_xts_se_handler,.-ctr_xts_se_handler + +.section .pdata +.align 4 +___ +$code.=<<___ if ($PREFIX eq "aes_hw"); + .rva .LSEH_begin_GFp_${PREFIX}_ctr32_encrypt_blocks + .rva .LSEH_end_GFp_${PREFIX}_ctr32_encrypt_blocks + .rva .LSEH_info_GFp_ctr32 +___ +$code.=<<___; + .rva GFp_${PREFIX}_set_encrypt_key + .rva .LSEH_end_GFp_set_encrypt_key + .rva .LSEH_info_GFp_key +.section .xdata +.align 8 +___ +$code.=<<___ if ($PREFIX eq "aes_hw"); +.LSEH_info_GFp_ctr32: + .byte 9,0,0,0 + .rva ctr_xts_se_handler + .rva .Lctr32_body,.Lctr32_epilogue # HandlerData[] +___ +$code.=<<___; +.LSEH_info_GFp_key: + .byte 0x01,0x04,0x01,0x00 + .byte 0x04,0x02,0x00,0x00 # sub rsp,8 +___ +} + +sub rex { + local *opcode=shift; + my ($dst,$src)=@_; + my $rex=0; + + $rex|=0x04 if($dst>=8); + $rex|=0x01 if($src>=8); + push @opcode,$rex|0x40 if($rex); +} + +sub aesni { + my $line=shift; + my @opcode=(0x66); + + if ($line=~/(aeskeygenassist)\s+\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) { + rex(\@opcode,$4,$3); + push @opcode,0x0f,0x3a,0xdf; + push @opcode,0xc0|($3&7)|(($4&7)<<3); # ModR/M + my $c=$2; + push @opcode,$c=~/^0/?oct($c):$c; + return ".byte\t".join(',',@opcode); + } + elsif ($line=~/(aes[a-z]+)\s+%xmm([0-9]+),\s*%xmm([0-9]+)/) { + my %opcodelet = ( + "aesimc" => 0xdb, + "aesenc" => 0xdc, "aesenclast" => 0xdd, + "aesdec" => 0xde, "aesdeclast" => 0xdf + ); + return undef if (!defined($opcodelet{$1})); + rex(\@opcode,$3,$2); + push @opcode,0x0f,0x38,$opcodelet{$1}; + push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M + return ".byte\t".join(',',@opcode); + } + elsif ($line=~/(aes[a-z]+)\s+([0x1-9a-fA-F]*)\(%rsp\),\s*%xmm([0-9]+)/) { + my %opcodelet = ( + "aesenc" => 0xdc, "aesenclast" => 0xdd, + "aesdec" => 0xde, "aesdeclast" => 0xdf + ); + return undef if (!defined($opcodelet{$1})); + my $off = $2; + push @opcode,0x44 if ($3>=8); + push @opcode,0x0f,0x38,$opcodelet{$1}; + push @opcode,0x44|(($3&7)<<3),0x24; # ModR/M + push @opcode,($off=~/^0/?oct($off):$off)&0xff; + return ".byte\t".join(',',@opcode); + } + return $line; +} + +sub movbe { + ".byte 0x0f,0x38,0xf1,0x44,0x24,".shift; +} + +$code =~ s/\`([^\`]*)\`/eval($1)/gem; +$code =~ s/\b(aes.*%xmm[0-9]+).*$/aesni($1)/gem; +#$code =~ s/\bmovbe\s+%eax/bswap %eax; mov %eax/gm; # debugging artefact +$code =~ s/\bmovbe\s+%eax,\s*([0-9]+)\(%rsp\)/movbe($1)/gem; + +print $code; + +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/fipsmodule/aes/asm/aesv8-armx.pl b/vendor/ring/crypto/fipsmodule/aes/asm/aesv8-armx.pl new file mode 100644 index 00000000..804df818 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/aes/asm/aesv8-armx.pl @@ -0,0 +1,630 @@ +#! /usr/bin/env perl +# Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# This module implements support for ARMv8 AES instructions. The +# module is endian-agnostic in sense that it supports both big- and +# little-endian cases. As does it support both 32- and 64-bit modes +# of operation. Latter is achieved by limiting amount of utilized +# registers to 16, which implies additional NEON load and integer +# instructions. This has no effect on mighty Apple A7, where results +# are literally equal to the theoretical estimates based on AES +# instruction latencies and issue rates. On Cortex-A53, an in-order +# execution core, this costs up to 10-15%, which is partially +# compensated by implementing dedicated code path for 128-bit +# CBC encrypt case. On Cortex-A57 parallelizable mode performance +# seems to be limited by sheer amount of NEON instructions... +# +# Performance in cycles per byte processed with 128-bit key: +# +# CBC enc CBC dec CTR +# Apple A7 2.39 1.20 1.20 +# Cortex-A53 1.32 1.29 1.46 +# Cortex-A57(*) 1.95 0.85 0.93 +# Denver 1.96 0.86 0.80 +# Mongoose 1.33 1.20 1.20 +# +# (*) original 3.64/1.34/1.32 results were for r0p0 revision +# and are still same even for updated module; + +$flavour = shift; +$output = shift; + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or +die "can't locate arm-xlate.pl"; + +open OUT,"| \"$^X\" $xlate $flavour $output"; +*STDOUT=*OUT; + +$prefix="aes_hw"; + +$code=<<___; +#include + +#if __ARM_MAX_ARCH__>=7 +.text +___ +$code.=".arch armv8-a+crypto\n" if ($flavour =~ /64/); +$code.=<<___ if ($flavour !~ /64/); +.arch armv7-a // don't confuse not-so-latest binutils with argv8 :-) +.fpu neon +.code 32 +#undef __thumb2__ +___ + +# Assembler mnemonics are an eclectic mix of 32- and 64-bit syntax, +# NEON is mostly 32-bit mnemonics, integer - mostly 64. Goal is to +# maintain both 32- and 64-bit codes within single module and +# transliterate common code to either flavour with regex vodoo. +# +{{{ +my ($inp,$bits,$out,$ptr,$rounds)=("x0","w1","x2","x3","w12"); +my ($zero,$rcon,$mask,$in0,$in1,$tmp,$key)= + $flavour=~/64/? map("q$_",(0..6)) : map("q$_",(0..3,8..10)); + + +# On AArch64, put the data .rodata and use adrp + add for compatibility with +# execute-only memory. On AArch32, put it in .text and use adr. +$code.= ".section .rodata\n" if ($flavour =~ /64/); +$code.=<<___; +.align 5 +.Lrcon: +.long 0x01,0x01,0x01,0x01 +.long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d // rotate-n-splat +.long 0x1b,0x1b,0x1b,0x1b + +.text + +.globl GFp_${prefix}_set_encrypt_key +.type GFp_${prefix}_set_encrypt_key,%function +.align 5 +GFp_${prefix}_set_encrypt_key: +.Lenc_key: +___ +$code.=<<___ if ($flavour =~ /64/); + // Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later. + AARCH64_VALID_CALL_TARGET + stp x29,x30,[sp,#-16]! + add x29,sp,#0 +___ +$code.=<<___; + mov $ptr,#-1 + cmp $inp,#0 + b.eq .Lenc_key_abort + cmp $out,#0 + b.eq .Lenc_key_abort + mov $ptr,#-2 + cmp $bits,#128 + b.lt .Lenc_key_abort + cmp $bits,#256 + b.gt .Lenc_key_abort + tst $bits,#0x3f + b.ne .Lenc_key_abort + +___ +$code.=<<___ if ($flavour =~ /64/); + adrp $ptr,:pg_hi21:.Lrcon + add $ptr,$ptr,:lo12:.Lrcon +___ +$code.=<<___ if ($flavour !~ /64/); + adr $ptr,.Lrcon +___ +$code.=<<___; + cmp $bits,#192 + + veor $zero,$zero,$zero + vld1.8 {$in0},[$inp],#16 + mov $bits,#8 // reuse $bits + vld1.32 {$rcon,$mask},[$ptr],#32 + + b.lt .Loop128 + // 192-bit key support was removed. + b .L256 + +.align 4 +.Loop128: + vtbl.8 $key,{$in0},$mask + vext.8 $tmp,$zero,$in0,#12 + vst1.32 {$in0},[$out],#16 + aese $key,$zero + subs $bits,$bits,#1 + + veor $in0,$in0,$tmp + vext.8 $tmp,$zero,$tmp,#12 + veor $in0,$in0,$tmp + vext.8 $tmp,$zero,$tmp,#12 + veor $key,$key,$rcon + veor $in0,$in0,$tmp + vshl.u8 $rcon,$rcon,#1 + veor $in0,$in0,$key + b.ne .Loop128 + + vld1.32 {$rcon},[$ptr] + + vtbl.8 $key,{$in0},$mask + vext.8 $tmp,$zero,$in0,#12 + vst1.32 {$in0},[$out],#16 + aese $key,$zero + + veor $in0,$in0,$tmp + vext.8 $tmp,$zero,$tmp,#12 + veor $in0,$in0,$tmp + vext.8 $tmp,$zero,$tmp,#12 + veor $key,$key,$rcon + veor $in0,$in0,$tmp + vshl.u8 $rcon,$rcon,#1 + veor $in0,$in0,$key + + vtbl.8 $key,{$in0},$mask + vext.8 $tmp,$zero,$in0,#12 + vst1.32 {$in0},[$out],#16 + aese $key,$zero + + veor $in0,$in0,$tmp + vext.8 $tmp,$zero,$tmp,#12 + veor $in0,$in0,$tmp + vext.8 $tmp,$zero,$tmp,#12 + veor $key,$key,$rcon + veor $in0,$in0,$tmp + veor $in0,$in0,$key + vst1.32 {$in0},[$out] + add $out,$out,#0x50 + + mov $rounds,#10 + b .Ldone + +// 192-bit key support was removed. + +.align 4 +.L256: + vld1.8 {$in1},[$inp] + mov $bits,#7 + mov $rounds,#14 + vst1.32 {$in0},[$out],#16 + +.Loop256: + vtbl.8 $key,{$in1},$mask + vext.8 $tmp,$zero,$in0,#12 + vst1.32 {$in1},[$out],#16 + aese $key,$zero + subs $bits,$bits,#1 + + veor $in0,$in0,$tmp + vext.8 $tmp,$zero,$tmp,#12 + veor $in0,$in0,$tmp + vext.8 $tmp,$zero,$tmp,#12 + veor $key,$key,$rcon + veor $in0,$in0,$tmp + vshl.u8 $rcon,$rcon,#1 + veor $in0,$in0,$key + vst1.32 {$in0},[$out],#16 + b.eq .Ldone + + vdup.32 $key,${in0}[3] // just splat + vext.8 $tmp,$zero,$in1,#12 + aese $key,$zero + + veor $in1,$in1,$tmp + vext.8 $tmp,$zero,$tmp,#12 + veor $in1,$in1,$tmp + vext.8 $tmp,$zero,$tmp,#12 + veor $in1,$in1,$tmp + + veor $in1,$in1,$key + b .Loop256 + +.Ldone: + str $rounds,[$out] + mov $ptr,#0 + +.Lenc_key_abort: + mov x0,$ptr // return value + `"ldr x29,[sp],#16" if ($flavour =~ /64/)` + ret +.size GFp_${prefix}_set_encrypt_key,.-GFp_${prefix}_set_encrypt_key +___ +}}} +{{{ +sub gen_block () { +my $dir = shift; +my ($e,$mc) = $dir eq "en" ? ("e","mc") : ("d","imc"); +my ($inp,$out,$key)=map("x$_",(0..2)); +my $rounds="w3"; +my ($rndkey0,$rndkey1,$inout)=map("q$_",(0..3)); + +$code.=<<___; +.globl GFp_${prefix}_${dir}crypt +.type GFp_${prefix}_${dir}crypt,%function +.align 5 +GFp_${prefix}_${dir}crypt: + AARCH64_VALID_CALL_TARGET + ldr $rounds,[$key,#240] + vld1.32 {$rndkey0},[$key],#16 + vld1.8 {$inout},[$inp] + sub $rounds,$rounds,#2 + vld1.32 {$rndkey1},[$key],#16 + +.Loop_${dir}c: + aes$e $inout,$rndkey0 + aes$mc $inout,$inout + vld1.32 {$rndkey0},[$key],#16 + subs $rounds,$rounds,#2 + aes$e $inout,$rndkey1 + aes$mc $inout,$inout + vld1.32 {$rndkey1},[$key],#16 + b.gt .Loop_${dir}c + + aes$e $inout,$rndkey0 + aes$mc $inout,$inout + vld1.32 {$rndkey0},[$key] + aes$e $inout,$rndkey1 + veor $inout,$inout,$rndkey0 + + vst1.8 {$inout},[$out] + ret +.size GFp_${prefix}_${dir}crypt,.-GFp_${prefix}_${dir}crypt +___ +} +&gen_block("en"); +&gen_block("de"); +}}} +{{{ +my ($inp,$out,$len,$key,$ivp)=map("x$_",(0..4)); +my ($rounds,$cnt,$key_)=("w5","w6","x7"); +my ($ctr,$tctr0,$tctr1,$tctr2)=map("w$_",(8..10,12)); +my $step="x12"; # aliases with $tctr2 + +my ($dat0,$dat1,$in0,$in1,$tmp0,$tmp1,$ivec,$rndlast)=map("q$_",(0..7)); +my ($dat2,$in2,$tmp2)=map("q$_",(10,11,9)); + +my ($dat,$tmp)=($dat0,$tmp0); + +### q8-q15 preloaded key schedule + +$code.=<<___; +.globl GFp_${prefix}_ctr32_encrypt_blocks +.type GFp_${prefix}_ctr32_encrypt_blocks,%function +.align 5 +GFp_${prefix}_ctr32_encrypt_blocks: +___ +$code.=<<___ if ($flavour =~ /64/); + // Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later. + AARCH64_VALID_CALL_TARGET + stp x29,x30,[sp,#-16]! + add x29,sp,#0 +___ +$code.=<<___ if ($flavour !~ /64/); + mov ip,sp + stmdb sp!,{r4-r10,lr} + vstmdb sp!,{d8-d15} @ ABI specification says so + ldr r4, [ip] @ load remaining arg +___ +$code.=<<___; + ldr $rounds,[$key,#240] + + ldr $ctr, [$ivp, #12] + vld1.32 {$dat0},[$ivp] + + vld1.32 {q8-q9},[$key] // load key schedule... + sub $rounds,$rounds,#4 + mov $step,#16 + cmp $len,#2 + add $key_,$key,x5,lsl#4 // pointer to last 5 round keys + sub $rounds,$rounds,#2 + vld1.32 {q12-q13},[$key_],#32 + vld1.32 {q14-q15},[$key_],#32 + vld1.32 {$rndlast},[$key_] + add $key_,$key,#32 + mov $cnt,$rounds + cclr $step,lo + + // ARM Cortex-A57 and Cortex-A72 cores running in 32-bit mode are + // affected by silicon errata #1742098 [0] and #1655431 [1], + // respectively, where the second instruction of an aese/aesmc + // instruction pair may execute twice if an interrupt is taken right + // after the first instruction consumes an input register of which a + // single 32-bit lane has been updated the last time it was modified. + // + // This function uses a counter in one 32-bit lane. The vmov.32 lines + // could write to $dat1 and $dat2 directly, but that trips this bugs. + // We write to $ivec and copy to the final register as a workaround. + // + // [0] ARM-EPM-049219 v23 Cortex-A57 MPCore Software Developers Errata Notice + // [1] ARM-EPM-012079 v11.0 Cortex-A72 MPCore Software Developers Errata Notice +#ifndef __ARMEB__ + rev $ctr, $ctr +#endif + add $tctr1, $ctr, #1 + vorr $ivec,$dat0,$dat0 + rev $tctr1, $tctr1 + vmov.32 ${ivec}[3],$tctr1 + add $ctr, $ctr, #2 + vorr $dat1,$ivec,$ivec + b.ls .Lctr32_tail + rev $tctr2, $ctr + vmov.32 ${ivec}[3],$tctr2 + sub $len,$len,#3 // bias + vorr $dat2,$ivec,$ivec + b .Loop3x_ctr32 + +.align 4 +.Loop3x_ctr32: + aese $dat0,q8 + aesmc $dat0,$dat0 + aese $dat1,q8 + aesmc $dat1,$dat1 + aese $dat2,q8 + aesmc $dat2,$dat2 + vld1.32 {q8},[$key_],#16 + subs $cnt,$cnt,#2 + aese $dat0,q9 + aesmc $dat0,$dat0 + aese $dat1,q9 + aesmc $dat1,$dat1 + aese $dat2,q9 + aesmc $dat2,$dat2 + vld1.32 {q9},[$key_],#16 + b.gt .Loop3x_ctr32 + + aese $dat0,q8 + aesmc $tmp0,$dat0 + aese $dat1,q8 + aesmc $tmp1,$dat1 + vld1.8 {$in0},[$inp],#16 + add $tctr0,$ctr,#1 + aese $dat2,q8 + aesmc $dat2,$dat2 + vld1.8 {$in1},[$inp],#16 + rev $tctr0,$tctr0 + aese $tmp0,q9 + aesmc $tmp0,$tmp0 + aese $tmp1,q9 + aesmc $tmp1,$tmp1 + vld1.8 {$in2},[$inp],#16 + mov $key_,$key + aese $dat2,q9 + aesmc $tmp2,$dat2 + aese $tmp0,q12 + aesmc $tmp0,$tmp0 + aese $tmp1,q12 + aesmc $tmp1,$tmp1 + veor $in0,$in0,$rndlast + add $tctr1,$ctr,#2 + aese $tmp2,q12 + aesmc $tmp2,$tmp2 + veor $in1,$in1,$rndlast + add $ctr,$ctr,#3 + aese $tmp0,q13 + aesmc $tmp0,$tmp0 + aese $tmp1,q13 + aesmc $tmp1,$tmp1 + // Note the logic to update $dat0, $dat1, and $dat1 is written to work + // around a bug in ARM Cortex-A57 and Cortex-A72 cores running in + // 32-bit mode. See the comment above. + veor $in2,$in2,$rndlast + vmov.32 ${ivec}[3], $tctr0 + aese $tmp2,q13 + aesmc $tmp2,$tmp2 + vorr $dat0,$ivec,$ivec + rev $tctr1,$tctr1 + aese $tmp0,q14 + aesmc $tmp0,$tmp0 + vmov.32 ${ivec}[3], $tctr1 + rev $tctr2,$ctr + aese $tmp1,q14 + aesmc $tmp1,$tmp1 + vorr $dat1,$ivec,$ivec + vmov.32 ${ivec}[3], $tctr2 + aese $tmp2,q14 + aesmc $tmp2,$tmp2 + vorr $dat2,$ivec,$ivec + subs $len,$len,#3 + aese $tmp0,q15 + aese $tmp1,q15 + aese $tmp2,q15 + + veor $in0,$in0,$tmp0 + vld1.32 {q8},[$key_],#16 // re-pre-load rndkey[0] + vst1.8 {$in0},[$out],#16 + veor $in1,$in1,$tmp1 + mov $cnt,$rounds + vst1.8 {$in1},[$out],#16 + veor $in2,$in2,$tmp2 + vld1.32 {q9},[$key_],#16 // re-pre-load rndkey[1] + vst1.8 {$in2},[$out],#16 + b.hs .Loop3x_ctr32 + + adds $len,$len,#3 + b.eq .Lctr32_done + cmp $len,#1 + mov $step,#16 + cclr $step,eq + +.Lctr32_tail: + aese $dat0,q8 + aesmc $dat0,$dat0 + aese $dat1,q8 + aesmc $dat1,$dat1 + vld1.32 {q8},[$key_],#16 + subs $cnt,$cnt,#2 + aese $dat0,q9 + aesmc $dat0,$dat0 + aese $dat1,q9 + aesmc $dat1,$dat1 + vld1.32 {q9},[$key_],#16 + b.gt .Lctr32_tail + + aese $dat0,q8 + aesmc $dat0,$dat0 + aese $dat1,q8 + aesmc $dat1,$dat1 + aese $dat0,q9 + aesmc $dat0,$dat0 + aese $dat1,q9 + aesmc $dat1,$dat1 + vld1.8 {$in0},[$inp],$step + aese $dat0,q12 + aesmc $dat0,$dat0 + aese $dat1,q12 + aesmc $dat1,$dat1 + vld1.8 {$in1},[$inp] + aese $dat0,q13 + aesmc $dat0,$dat0 + aese $dat1,q13 + aesmc $dat1,$dat1 + veor $in0,$in0,$rndlast + aese $dat0,q14 + aesmc $dat0,$dat0 + aese $dat1,q14 + aesmc $dat1,$dat1 + veor $in1,$in1,$rndlast + aese $dat0,q15 + aese $dat1,q15 + + cmp $len,#1 + veor $in0,$in0,$dat0 + veor $in1,$in1,$dat1 + vst1.8 {$in0},[$out],#16 + b.eq .Lctr32_done + vst1.8 {$in1},[$out] + +.Lctr32_done: +___ +$code.=<<___ if ($flavour !~ /64/); + vldmia sp!,{d8-d15} + ldmia sp!,{r4-r10,pc} +___ +$code.=<<___ if ($flavour =~ /64/); + ldr x29,[sp],#16 + ret +___ +$code.=<<___; +.size GFp_${prefix}_ctr32_encrypt_blocks,.-GFp_${prefix}_ctr32_encrypt_blocks +___ +}}} +$code.=<<___; +#endif +___ +######################################## +if ($flavour =~ /64/) { ######## 64-bit code + my %opcode = ( + "aesd" => 0x4e285800, "aese" => 0x4e284800, + "aesimc"=> 0x4e287800, "aesmc" => 0x4e286800 ); + + local *unaes = sub { + my ($mnemonic,$arg)=@_; + + $arg =~ m/[qv]([0-9]+)[^,]*,\s*[qv]([0-9]+)/o && + sprintf ".inst\t0x%08x\t//%s %s", + $opcode{$mnemonic}|$1|($2<<5), + $mnemonic,$arg; + }; + + foreach(split("\n",$code)) { + s/\`([^\`]*)\`/eval($1)/geo; + + s/\bq([0-9]+)\b/"v".($1<8?$1:$1+8).".16b"/geo; # old->new registers + s/@\s/\/\//o; # old->new style commentary + + #s/[v]?(aes\w+)\s+([qv].*)/unaes($1,$2)/geo or + s/cclr\s+([wx])([^,]+),\s*([a-z]+)/csel $1$2,$1zr,$1$2,$3/o or + s/mov\.([a-z]+)\s+([wx][0-9]+),\s*([wx][0-9]+)/csel $2,$3,$2,$1/o or + s/vmov\.i8/movi/o or # fix up legacy mnemonics + s/vext\.8/ext/o or + s/vrev32\.8/rev32/o or + s/vtst\.8/cmtst/o or + s/vshr/ushr/o or + s/^(\s+)v/$1/o or # strip off v prefix + s/\bbx\s+lr\b/ret/o; + + # fix up remaining legacy suffixes + s/\.[ui]?8//o; + m/\],#8/o and s/\.16b/\.8b/go; + s/\.[ui]?32//o and s/\.16b/\.4s/go; + s/\.[ui]?64//o and s/\.16b/\.2d/go; + s/\.[42]([sd])\[([0-3])\]/\.$1\[$2\]/o; + + print $_,"\n"; + } +} else { ######## 32-bit code + my %opcode = ( + "aesd" => 0xf3b00340, "aese" => 0xf3b00300, + "aesimc"=> 0xf3b003c0, "aesmc" => 0xf3b00380 ); + + local *unaes = sub { + my ($mnemonic,$arg)=@_; + + if ($arg =~ m/[qv]([0-9]+)[^,]*,\s*[qv]([0-9]+)/o) { + my $word = $opcode{$mnemonic}|(($1&7)<<13)|(($1&8)<<19) + |(($2&7)<<1) |(($2&8)<<2); + # since ARMv7 instructions are always encoded little-endian. + # correct solution is to use .inst directive, but older + # assemblers don't implement it:-( + sprintf ".byte\t0x%02x,0x%02x,0x%02x,0x%02x\t@ %s %s", + $word&0xff,($word>>8)&0xff, + ($word>>16)&0xff,($word>>24)&0xff, + $mnemonic,$arg; + } + }; + + sub unvtbl { + my $arg=shift; + + $arg =~ m/q([0-9]+),\s*\{q([0-9]+)\},\s*q([0-9]+)/o && + sprintf "vtbl.8 d%d,{q%d},d%d\n\t". + "vtbl.8 d%d,{q%d},d%d", 2*$1,$2,2*$3, 2*$1+1,$2,2*$3+1; + } + + sub unvdup32 { + my $arg=shift; + + $arg =~ m/q([0-9]+),\s*q([0-9]+)\[([0-3])\]/o && + sprintf "vdup.32 q%d,d%d[%d]",$1,2*$2+($3>>1),$3&1; + } + + sub unvmov32 { + my $arg=shift; + + $arg =~ m/q([0-9]+)\[([0-3])\],(.*)/o && + sprintf "vmov.32 d%d[%d],%s",2*$1+($2>>1),$2&1,$3; + } + + foreach(split("\n",$code)) { + s/\`([^\`]*)\`/eval($1)/geo; + + s/\b[wx]([0-9]+)\b/r$1/go; # new->old registers + s/\bv([0-9])\.[12468]+[bsd]\b/q$1/go; # new->old registers + s/\/\/\s?/@ /o; # new->old style commentary + + # fix up remaining new-style suffixes + s/\{q([0-9]+)\},\s*\[(.+)\],#8/sprintf "{d%d},[$2]!",2*$1/eo or + s/\],#[0-9]+/]!/o; + + s/[v]?(aes\w+)\s+([qv].*)/unaes($1,$2)/geo or + s/cclr\s+([^,]+),\s*([a-z]+)/mov$2 $1,#0/o or + s/vtbl\.8\s+(.*)/unvtbl($1)/geo or + s/vdup\.32\s+(.*)/unvdup32($1)/geo or + s/vmov\.32\s+(.*)/unvmov32($1)/geo or + s/^(\s+)b\./$1b/o or + s/^(\s+)mov\./$1mov/o or + s/^(\s+)ret/$1bx\tlr/o; + + print $_,"\n"; + } +} + +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/fipsmodule/aes/asm/bsaes-armv7.pl b/vendor/ring/crypto/fipsmodule/aes/asm/bsaes-armv7.pl new file mode 100644 index 00000000..2804d61a --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/aes/asm/bsaes-armv7.pl @@ -0,0 +1,1142 @@ +#! /usr/bin/env perl +# Copyright 2012-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# +# Specific modes and adaptation for Linux kernel by Ard Biesheuvel +# of Linaro. Permission to use under GPL terms is granted. +# ==================================================================== + +# Bit-sliced AES for ARM NEON +# +# February 2012. +# +# This implementation is direct adaptation of bsaes-x86_64 module for +# ARM NEON. Except that this module is endian-neutral [in sense that +# it can be compiled for either endianness] by courtesy of vld1.8's +# neutrality. Initial version doesn't implement interface to OpenSSL, +# only low-level primitives and unsupported entry points, just enough +# to collect performance results, which for Cortex-A8 core are: +# +# encrypt 19.5 cycles per byte processed with 128-bit key +# decrypt 22.1 cycles per byte processed with 128-bit key +# key conv. 440 cycles per 128-bit key/0.18 of 8x block +# +# Snapdragon S4 encrypts byte in 17.6 cycles and decrypts in 19.7, +# which is [much] worse than anticipated (for further details see +# http://www.openssl.org/~appro/Snapdragon-S4.html). +# +# Cortex-A15 manages in 14.2/16.1 cycles [when integer-only code +# manages in 20.0 cycles]. +# +# When comparing to x86_64 results keep in mind that NEON unit is +# [mostly] single-issue and thus can't [fully] benefit from +# instruction-level parallelism. And when comparing to aes-armv4 +# results keep in mind key schedule conversion overhead (see +# bsaes-x86_64.pl for further details)... +# +# + +# April-August 2013 +# Add CBC, CTR and XTS subroutines and adapt for kernel use; courtesy of Ard. + +$flavour = shift; +if ($flavour=~/\w[\w\-]*\.\w+$/) { $output=$flavour; undef $flavour; } +else { while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} } + +if ($flavour && $flavour ne "void") { + $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; + ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or + ( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or + die "can't locate arm-xlate.pl"; + + open OUT,"| \"$^X\" $xlate $flavour $output"; + *STDOUT=*OUT; +} else { + open OUT,">$output"; + *STDOUT=*OUT; +} + +my ($inp,$out,$len,$key)=("r0","r1","r2","r3"); +my @XMM=map("q$_",(0..15)); + +{ +my ($key,$rounds,$const)=("r4","r5","r6"); + +sub Dlo() { shift=~m|q([1]?[0-9])|?"d".($1*2):""; } +sub Dhi() { shift=~m|q([1]?[0-9])|?"d".($1*2+1):""; } + +sub Sbox { +# input in lsb > [b0, b1, b2, b3, b4, b5, b6, b7] < msb +# output in lsb > [b0, b1, b4, b6, b3, b7, b2, b5] < msb +my @b=@_[0..7]; +my @t=@_[8..11]; +my @s=@_[12..15]; + &InBasisChange (@b); + &Inv_GF256 (@b[6,5,0,3,7,1,4,2],@t,@s); + &OutBasisChange (@b[7,1,4,2,6,5,0,3]); +} + +sub InBasisChange { +# input in lsb > [b0, b1, b2, b3, b4, b5, b6, b7] < msb +# output in lsb > [b6, b5, b0, b3, b7, b1, b4, b2] < msb +my @b=@_[0..7]; +$code.=<<___; + veor @b[2], @b[2], @b[1] + veor @b[5], @b[5], @b[6] + veor @b[3], @b[3], @b[0] + veor @b[6], @b[6], @b[2] + veor @b[5], @b[5], @b[0] + + veor @b[6], @b[6], @b[3] + veor @b[3], @b[3], @b[7] + veor @b[7], @b[7], @b[5] + veor @b[3], @b[3], @b[4] + veor @b[4], @b[4], @b[5] + + veor @b[2], @b[2], @b[7] + veor @b[3], @b[3], @b[1] + veor @b[1], @b[1], @b[5] +___ +} + +sub OutBasisChange { +# input in lsb > [b0, b1, b2, b3, b4, b5, b6, b7] < msb +# output in lsb > [b6, b1, b2, b4, b7, b0, b3, b5] < msb +my @b=@_[0..7]; +$code.=<<___; + veor @b[0], @b[0], @b[6] + veor @b[1], @b[1], @b[4] + veor @b[4], @b[4], @b[6] + veor @b[2], @b[2], @b[0] + veor @b[6], @b[6], @b[1] + + veor @b[1], @b[1], @b[5] + veor @b[5], @b[5], @b[3] + veor @b[3], @b[3], @b[7] + veor @b[7], @b[7], @b[5] + veor @b[2], @b[2], @b[5] + + veor @b[4], @b[4], @b[7] +___ +} + +sub InvSbox { +# input in lsb > [b0, b1, b2, b3, b4, b5, b6, b7] < msb +# output in lsb > [b0, b1, b6, b4, b2, b7, b3, b5] < msb +my @b=@_[0..7]; +my @t=@_[8..11]; +my @s=@_[12..15]; + &InvInBasisChange (@b); + &Inv_GF256 (@b[5,1,2,6,3,7,0,4],@t,@s); + &InvOutBasisChange (@b[3,7,0,4,5,1,2,6]); +} + +sub InvInBasisChange { # OutBasisChange in reverse (with twist) +my @b=@_[5,1,2,6,3,7,0,4]; +$code.=<<___ + veor @b[1], @b[1], @b[7] + veor @b[4], @b[4], @b[7] + + veor @b[7], @b[7], @b[5] + veor @b[1], @b[1], @b[3] + veor @b[2], @b[2], @b[5] + veor @b[3], @b[3], @b[7] + + veor @b[6], @b[6], @b[1] + veor @b[2], @b[2], @b[0] + veor @b[5], @b[5], @b[3] + veor @b[4], @b[4], @b[6] + veor @b[0], @b[0], @b[6] + veor @b[1], @b[1], @b[4] +___ +} + +sub InvOutBasisChange { # InBasisChange in reverse +my @b=@_[2,5,7,3,6,1,0,4]; +$code.=<<___; + veor @b[1], @b[1], @b[5] + veor @b[2], @b[2], @b[7] + + veor @b[3], @b[3], @b[1] + veor @b[4], @b[4], @b[5] + veor @b[7], @b[7], @b[5] + veor @b[3], @b[3], @b[4] + veor @b[5], @b[5], @b[0] + veor @b[3], @b[3], @b[7] + veor @b[6], @b[6], @b[2] + veor @b[2], @b[2], @b[1] + veor @b[6], @b[6], @b[3] + + veor @b[3], @b[3], @b[0] + veor @b[5], @b[5], @b[6] +___ +} + +sub Mul_GF4 { +#;************************************************************* +#;* Mul_GF4: Input x0-x1,y0-y1 Output x0-x1 Temp t0 (8) * +#;************************************************************* +my ($x0,$x1,$y0,$y1,$t0,$t1)=@_; +$code.=<<___; + veor $t0, $y0, $y1 + vand $t0, $t0, $x0 + veor $x0, $x0, $x1 + vand $t1, $x1, $y0 + vand $x0, $x0, $y1 + veor $x1, $t1, $t0 + veor $x0, $x0, $t1 +___ +} + +sub Mul_GF4_N { # not used, see next subroutine +# multiply and scale by N +my ($x0,$x1,$y0,$y1,$t0)=@_; +$code.=<<___; + veor $t0, $y0, $y1 + vand $t0, $t0, $x0 + veor $x0, $x0, $x1 + vand $x1, $x1, $y0 + vand $x0, $x0, $y1 + veor $x1, $x1, $x0 + veor $x0, $x0, $t0 +___ +} + +sub Mul_GF4_N_GF4 { +# interleaved Mul_GF4_N and Mul_GF4 +my ($x0,$x1,$y0,$y1,$t0, + $x2,$x3,$y2,$y3,$t1)=@_; +$code.=<<___; + veor $t0, $y0, $y1 + veor $t1, $y2, $y3 + vand $t0, $t0, $x0 + vand $t1, $t1, $x2 + veor $x0, $x0, $x1 + veor $x2, $x2, $x3 + vand $x1, $x1, $y0 + vand $x3, $x3, $y2 + vand $x0, $x0, $y1 + vand $x2, $x2, $y3 + veor $x1, $x1, $x0 + veor $x2, $x2, $x3 + veor $x0, $x0, $t0 + veor $x3, $x3, $t1 +___ +} +sub Mul_GF16_2 { +my @x=@_[0..7]; +my @y=@_[8..11]; +my @t=@_[12..15]; +$code.=<<___; + veor @t[0], @x[0], @x[2] + veor @t[1], @x[1], @x[3] +___ + &Mul_GF4 (@x[0], @x[1], @y[0], @y[1], @t[2..3]); +$code.=<<___; + veor @y[0], @y[0], @y[2] + veor @y[1], @y[1], @y[3] +___ + Mul_GF4_N_GF4 (@t[0], @t[1], @y[0], @y[1], @t[3], + @x[2], @x[3], @y[2], @y[3], @t[2]); +$code.=<<___; + veor @x[0], @x[0], @t[0] + veor @x[2], @x[2], @t[0] + veor @x[1], @x[1], @t[1] + veor @x[3], @x[3], @t[1] + + veor @t[0], @x[4], @x[6] + veor @t[1], @x[5], @x[7] +___ + &Mul_GF4_N_GF4 (@t[0], @t[1], @y[0], @y[1], @t[3], + @x[6], @x[7], @y[2], @y[3], @t[2]); +$code.=<<___; + veor @y[0], @y[0], @y[2] + veor @y[1], @y[1], @y[3] +___ + &Mul_GF4 (@x[4], @x[5], @y[0], @y[1], @t[2..3]); +$code.=<<___; + veor @x[4], @x[4], @t[0] + veor @x[6], @x[6], @t[0] + veor @x[5], @x[5], @t[1] + veor @x[7], @x[7], @t[1] +___ +} +sub Inv_GF256 { +#;******************************************************************** +#;* Inv_GF256: Input x0-x7 Output x0-x7 Temp t0-t3,s0-s3 (144) * +#;******************************************************************** +my @x=@_[0..7]; +my @t=@_[8..11]; +my @s=@_[12..15]; +# direct optimizations from hardware +$code.=<<___; + veor @t[3], @x[4], @x[6] + veor @t[2], @x[5], @x[7] + veor @t[1], @x[1], @x[3] + veor @s[1], @x[7], @x[6] + vmov @t[0], @t[2] + veor @s[0], @x[0], @x[2] + + vorr @t[2], @t[2], @t[1] + veor @s[3], @t[3], @t[0] + vand @s[2], @t[3], @s[0] + vorr @t[3], @t[3], @s[0] + veor @s[0], @s[0], @t[1] + vand @t[0], @t[0], @t[1] + veor @t[1], @x[3], @x[2] + vand @s[3], @s[3], @s[0] + vand @s[1], @s[1], @t[1] + veor @t[1], @x[4], @x[5] + veor @s[0], @x[1], @x[0] + veor @t[3], @t[3], @s[1] + veor @t[2], @t[2], @s[1] + vand @s[1], @t[1], @s[0] + vorr @t[1], @t[1], @s[0] + veor @t[3], @t[3], @s[3] + veor @t[0], @t[0], @s[1] + veor @t[2], @t[2], @s[2] + veor @t[1], @t[1], @s[3] + veor @t[0], @t[0], @s[2] + vand @s[0], @x[7], @x[3] + veor @t[1], @t[1], @s[2] + vand @s[1], @x[6], @x[2] + vand @s[2], @x[5], @x[1] + vorr @s[3], @x[4], @x[0] + veor @t[3], @t[3], @s[0] + veor @t[1], @t[1], @s[2] + veor @t[0], @t[0], @s[3] + veor @t[2], @t[2], @s[1] + + @ Inv_GF16 \t0, \t1, \t2, \t3, \s0, \s1, \s2, \s3 + + @ new smaller inversion + + vand @s[2], @t[3], @t[1] + vmov @s[0], @t[0] + + veor @s[1], @t[2], @s[2] + veor @s[3], @t[0], @s[2] + veor @s[2], @t[0], @s[2] @ @s[2]=@s[3] + + vbsl @s[1], @t[1], @t[0] + vbsl @s[3], @t[3], @t[2] + veor @t[3], @t[3], @t[2] + + vbsl @s[0], @s[1], @s[2] + vbsl @t[0], @s[2], @s[1] + + vand @s[2], @s[0], @s[3] + veor @t[1], @t[1], @t[0] + + veor @s[2], @s[2], @t[3] +___ +# output in s3, s2, s1, t1 + +# Mul_GF16_2 \x0, \x1, \x2, \x3, \x4, \x5, \x6, \x7, \t2, \t3, \t0, \t1, \s0, \s1, \s2, \s3 + +# Mul_GF16_2 \x0, \x1, \x2, \x3, \x4, \x5, \x6, \x7, \s3, \s2, \s1, \t1, \s0, \t0, \t2, \t3 + &Mul_GF16_2(@x,@s[3,2,1],@t[1],@s[0],@t[0,2,3]); + +### output msb > [x3,x2,x1,x0,x7,x6,x5,x4] < lsb +} + +# AES linear components + +sub ShiftRows { +my @x=@_[0..7]; +my @t=@_[8..11]; +my $mask=pop; +$code.=<<___; + vldmia $key!, {@t[0]-@t[3]} + veor @t[0], @t[0], @x[0] + veor @t[1], @t[1], @x[1] + vtbl.8 `&Dlo(@x[0])`, {@t[0]}, `&Dlo($mask)` + vtbl.8 `&Dhi(@x[0])`, {@t[0]}, `&Dhi($mask)` + vldmia $key!, {@t[0]} + veor @t[2], @t[2], @x[2] + vtbl.8 `&Dlo(@x[1])`, {@t[1]}, `&Dlo($mask)` + vtbl.8 `&Dhi(@x[1])`, {@t[1]}, `&Dhi($mask)` + vldmia $key!, {@t[1]} + veor @t[3], @t[3], @x[3] + vtbl.8 `&Dlo(@x[2])`, {@t[2]}, `&Dlo($mask)` + vtbl.8 `&Dhi(@x[2])`, {@t[2]}, `&Dhi($mask)` + vldmia $key!, {@t[2]} + vtbl.8 `&Dlo(@x[3])`, {@t[3]}, `&Dlo($mask)` + vtbl.8 `&Dhi(@x[3])`, {@t[3]}, `&Dhi($mask)` + vldmia $key!, {@t[3]} + veor @t[0], @t[0], @x[4] + veor @t[1], @t[1], @x[5] + vtbl.8 `&Dlo(@x[4])`, {@t[0]}, `&Dlo($mask)` + vtbl.8 `&Dhi(@x[4])`, {@t[0]}, `&Dhi($mask)` + veor @t[2], @t[2], @x[6] + vtbl.8 `&Dlo(@x[5])`, {@t[1]}, `&Dlo($mask)` + vtbl.8 `&Dhi(@x[5])`, {@t[1]}, `&Dhi($mask)` + veor @t[3], @t[3], @x[7] + vtbl.8 `&Dlo(@x[6])`, {@t[2]}, `&Dlo($mask)` + vtbl.8 `&Dhi(@x[6])`, {@t[2]}, `&Dhi($mask)` + vtbl.8 `&Dlo(@x[7])`, {@t[3]}, `&Dlo($mask)` + vtbl.8 `&Dhi(@x[7])`, {@t[3]}, `&Dhi($mask)` +___ +} + +sub MixColumns { +# modified to emit output in order suitable for feeding back to aesenc[last] +my @x=@_[0..7]; +my @t=@_[8..15]; +my $inv=@_[16]; # optional +$code.=<<___; + vext.8 @t[0], @x[0], @x[0], #12 @ x0 <<< 32 + vext.8 @t[1], @x[1], @x[1], #12 + veor @x[0], @x[0], @t[0] @ x0 ^ (x0 <<< 32) + vext.8 @t[2], @x[2], @x[2], #12 + veor @x[1], @x[1], @t[1] + vext.8 @t[3], @x[3], @x[3], #12 + veor @x[2], @x[2], @t[2] + vext.8 @t[4], @x[4], @x[4], #12 + veor @x[3], @x[3], @t[3] + vext.8 @t[5], @x[5], @x[5], #12 + veor @x[4], @x[4], @t[4] + vext.8 @t[6], @x[6], @x[6], #12 + veor @x[5], @x[5], @t[5] + vext.8 @t[7], @x[7], @x[7], #12 + veor @x[6], @x[6], @t[6] + + veor @t[1], @t[1], @x[0] + veor @x[7], @x[7], @t[7] + vext.8 @x[0], @x[0], @x[0], #8 @ (x0 ^ (x0 <<< 32)) <<< 64) + veor @t[2], @t[2], @x[1] + veor @t[0], @t[0], @x[7] + veor @t[1], @t[1], @x[7] + vext.8 @x[1], @x[1], @x[1], #8 + veor @t[5], @t[5], @x[4] + veor @x[0], @x[0], @t[0] + veor @t[6], @t[6], @x[5] + veor @x[1], @x[1], @t[1] + vext.8 @t[0], @x[4], @x[4], #8 + veor @t[4], @t[4], @x[3] + vext.8 @t[1], @x[5], @x[5], #8 + veor @t[7], @t[7], @x[6] + vext.8 @x[4], @x[3], @x[3], #8 + veor @t[3], @t[3], @x[2] + vext.8 @x[5], @x[7], @x[7], #8 + veor @t[4], @t[4], @x[7] + vext.8 @x[3], @x[6], @x[6], #8 + veor @t[3], @t[3], @x[7] + vext.8 @x[6], @x[2], @x[2], #8 + veor @x[7], @t[1], @t[5] +___ +$code.=<<___ if (!$inv); + veor @x[2], @t[0], @t[4] + veor @x[4], @x[4], @t[3] + veor @x[5], @x[5], @t[7] + veor @x[3], @x[3], @t[6] + @ vmov @x[2], @t[0] + veor @x[6], @x[6], @t[2] + @ vmov @x[7], @t[1] +___ +$code.=<<___ if ($inv); + veor @t[3], @t[3], @x[4] + veor @x[5], @x[5], @t[7] + veor @x[2], @x[3], @t[6] + veor @x[3], @t[0], @t[4] + veor @x[4], @x[6], @t[2] + vmov @x[6], @t[3] + @ vmov @x[7], @t[1] +___ +} + +sub InvMixColumns_orig { +my @x=@_[0..7]; +my @t=@_[8..15]; + +$code.=<<___; + @ multiplication by 0x0e + vext.8 @t[7], @x[7], @x[7], #12 + vmov @t[2], @x[2] + veor @x[2], @x[2], @x[5] @ 2 5 + veor @x[7], @x[7], @x[5] @ 7 5 + vext.8 @t[0], @x[0], @x[0], #12 + vmov @t[5], @x[5] + veor @x[5], @x[5], @x[0] @ 5 0 [1] + veor @x[0], @x[0], @x[1] @ 0 1 + vext.8 @t[1], @x[1], @x[1], #12 + veor @x[1], @x[1], @x[2] @ 1 25 + veor @x[0], @x[0], @x[6] @ 01 6 [2] + vext.8 @t[3], @x[3], @x[3], #12 + veor @x[1], @x[1], @x[3] @ 125 3 [4] + veor @x[2], @x[2], @x[0] @ 25 016 [3] + veor @x[3], @x[3], @x[7] @ 3 75 + veor @x[7], @x[7], @x[6] @ 75 6 [0] + vext.8 @t[6], @x[6], @x[6], #12 + vmov @t[4], @x[4] + veor @x[6], @x[6], @x[4] @ 6 4 + veor @x[4], @x[4], @x[3] @ 4 375 [6] + veor @x[3], @x[3], @x[7] @ 375 756=36 + veor @x[6], @x[6], @t[5] @ 64 5 [7] + veor @x[3], @x[3], @t[2] @ 36 2 + vext.8 @t[5], @t[5], @t[5], #12 + veor @x[3], @x[3], @t[4] @ 362 4 [5] +___ + my @y = @x[7,5,0,2,1,3,4,6]; +$code.=<<___; + @ multiplication by 0x0b + veor @y[1], @y[1], @y[0] + veor @y[0], @y[0], @t[0] + vext.8 @t[2], @t[2], @t[2], #12 + veor @y[1], @y[1], @t[1] + veor @y[0], @y[0], @t[5] + vext.8 @t[4], @t[4], @t[4], #12 + veor @y[1], @y[1], @t[6] + veor @y[0], @y[0], @t[7] + veor @t[7], @t[7], @t[6] @ clobber t[7] + + veor @y[3], @y[3], @t[0] + veor @y[1], @y[1], @y[0] + vext.8 @t[0], @t[0], @t[0], #12 + veor @y[2], @y[2], @t[1] + veor @y[4], @y[4], @t[1] + vext.8 @t[1], @t[1], @t[1], #12 + veor @y[2], @y[2], @t[2] + veor @y[3], @y[3], @t[2] + veor @y[5], @y[5], @t[2] + veor @y[2], @y[2], @t[7] + vext.8 @t[2], @t[2], @t[2], #12 + veor @y[3], @y[3], @t[3] + veor @y[6], @y[6], @t[3] + veor @y[4], @y[4], @t[3] + veor @y[7], @y[7], @t[4] + vext.8 @t[3], @t[3], @t[3], #12 + veor @y[5], @y[5], @t[4] + veor @y[7], @y[7], @t[7] + veor @t[7], @t[7], @t[5] @ clobber t[7] even more + veor @y[3], @y[3], @t[5] + veor @y[4], @y[4], @t[4] + + veor @y[5], @y[5], @t[7] + vext.8 @t[4], @t[4], @t[4], #12 + veor @y[6], @y[6], @t[7] + veor @y[4], @y[4], @t[7] + + veor @t[7], @t[7], @t[5] + vext.8 @t[5], @t[5], @t[5], #12 + + @ multiplication by 0x0d + veor @y[4], @y[4], @y[7] + veor @t[7], @t[7], @t[6] @ restore t[7] + veor @y[7], @y[7], @t[4] + vext.8 @t[6], @t[6], @t[6], #12 + veor @y[2], @y[2], @t[0] + veor @y[7], @y[7], @t[5] + vext.8 @t[7], @t[7], @t[7], #12 + veor @y[2], @y[2], @t[2] + + veor @y[3], @y[3], @y[1] + veor @y[1], @y[1], @t[1] + veor @y[0], @y[0], @t[0] + veor @y[3], @y[3], @t[0] + veor @y[1], @y[1], @t[5] + veor @y[0], @y[0], @t[5] + vext.8 @t[0], @t[0], @t[0], #12 + veor @y[1], @y[1], @t[7] + veor @y[0], @y[0], @t[6] + veor @y[3], @y[3], @y[1] + veor @y[4], @y[4], @t[1] + vext.8 @t[1], @t[1], @t[1], #12 + + veor @y[7], @y[7], @t[7] + veor @y[4], @y[4], @t[2] + veor @y[5], @y[5], @t[2] + veor @y[2], @y[2], @t[6] + veor @t[6], @t[6], @t[3] @ clobber t[6] + vext.8 @t[2], @t[2], @t[2], #12 + veor @y[4], @y[4], @y[7] + veor @y[3], @y[3], @t[6] + + veor @y[6], @y[6], @t[6] + veor @y[5], @y[5], @t[5] + vext.8 @t[5], @t[5], @t[5], #12 + veor @y[6], @y[6], @t[4] + vext.8 @t[4], @t[4], @t[4], #12 + veor @y[5], @y[5], @t[6] + veor @y[6], @y[6], @t[7] + vext.8 @t[7], @t[7], @t[7], #12 + veor @t[6], @t[6], @t[3] @ restore t[6] + vext.8 @t[3], @t[3], @t[3], #12 + + @ multiplication by 0x09 + veor @y[4], @y[4], @y[1] + veor @t[1], @t[1], @y[1] @ t[1]=y[1] + veor @t[0], @t[0], @t[5] @ clobber t[0] + vext.8 @t[6], @t[6], @t[6], #12 + veor @t[1], @t[1], @t[5] + veor @y[3], @y[3], @t[0] + veor @t[0], @t[0], @y[0] @ t[0]=y[0] + veor @t[1], @t[1], @t[6] + veor @t[6], @t[6], @t[7] @ clobber t[6] + veor @y[4], @y[4], @t[1] + veor @y[7], @y[7], @t[4] + veor @y[6], @y[6], @t[3] + veor @y[5], @y[5], @t[2] + veor @t[4], @t[4], @y[4] @ t[4]=y[4] + veor @t[3], @t[3], @y[3] @ t[3]=y[3] + veor @t[5], @t[5], @y[5] @ t[5]=y[5] + veor @t[2], @t[2], @y[2] @ t[2]=y[2] + veor @t[3], @t[3], @t[7] + veor @XMM[5], @t[5], @t[6] + veor @XMM[6], @t[6], @y[6] @ t[6]=y[6] + veor @XMM[2], @t[2], @t[6] + veor @XMM[7], @t[7], @y[7] @ t[7]=y[7] + + vmov @XMM[0], @t[0] + vmov @XMM[1], @t[1] + @ vmov @XMM[2], @t[2] + vmov @XMM[3], @t[3] + vmov @XMM[4], @t[4] + @ vmov @XMM[5], @t[5] + @ vmov @XMM[6], @t[6] + @ vmov @XMM[7], @t[7] +___ +} + +sub InvMixColumns { +my @x=@_[0..7]; +my @t=@_[8..15]; + +# Thanks to Jussi Kivilinna for providing pointer to +# +# | 0e 0b 0d 09 | | 02 03 01 01 | | 05 00 04 00 | +# | 09 0e 0b 0d | = | 01 02 03 01 | x | 00 05 00 04 | +# | 0d 09 0e 0b | | 01 01 02 03 | | 04 00 05 00 | +# | 0b 0d 09 0e | | 03 01 01 02 | | 00 04 00 05 | + +$code.=<<___; + @ multiplication by 0x05-0x00-0x04-0x00 + vext.8 @t[0], @x[0], @x[0], #8 + vext.8 @t[6], @x[6], @x[6], #8 + vext.8 @t[7], @x[7], @x[7], #8 + veor @t[0], @t[0], @x[0] + vext.8 @t[1], @x[1], @x[1], #8 + veor @t[6], @t[6], @x[6] + vext.8 @t[2], @x[2], @x[2], #8 + veor @t[7], @t[7], @x[7] + vext.8 @t[3], @x[3], @x[3], #8 + veor @t[1], @t[1], @x[1] + vext.8 @t[4], @x[4], @x[4], #8 + veor @t[2], @t[2], @x[2] + vext.8 @t[5], @x[5], @x[5], #8 + veor @t[3], @t[3], @x[3] + veor @t[4], @t[4], @x[4] + veor @t[5], @t[5], @x[5] + + veor @x[0], @x[0], @t[6] + veor @x[1], @x[1], @t[6] + veor @x[2], @x[2], @t[0] + veor @x[4], @x[4], @t[2] + veor @x[3], @x[3], @t[1] + veor @x[1], @x[1], @t[7] + veor @x[2], @x[2], @t[7] + veor @x[4], @x[4], @t[6] + veor @x[5], @x[5], @t[3] + veor @x[3], @x[3], @t[6] + veor @x[6], @x[6], @t[4] + veor @x[4], @x[4], @t[7] + veor @x[5], @x[5], @t[7] + veor @x[7], @x[7], @t[5] +___ + &MixColumns (@x,@t,1); # flipped 2<->3 and 4<->6 +} + +sub swapmove { +my ($a,$b,$n,$mask,$t)=@_; +$code.=<<___; + vshr.u64 $t, $b, #$n + veor $t, $t, $a + vand $t, $t, $mask + veor $a, $a, $t + vshl.u64 $t, $t, #$n + veor $b, $b, $t +___ +} +sub swapmove2x { +my ($a0,$b0,$a1,$b1,$n,$mask,$t0,$t1)=@_; +$code.=<<___; + vshr.u64 $t0, $b0, #$n + vshr.u64 $t1, $b1, #$n + veor $t0, $t0, $a0 + veor $t1, $t1, $a1 + vand $t0, $t0, $mask + vand $t1, $t1, $mask + veor $a0, $a0, $t0 + vshl.u64 $t0, $t0, #$n + veor $a1, $a1, $t1 + vshl.u64 $t1, $t1, #$n + veor $b0, $b0, $t0 + veor $b1, $b1, $t1 +___ +} + +sub bitslice { +my @x=reverse(@_[0..7]); +my ($t0,$t1,$t2,$t3)=@_[8..11]; +$code.=<<___; + vmov.i8 $t0,#0x55 @ compose .LBS0 + vmov.i8 $t1,#0x33 @ compose .LBS1 +___ + &swapmove2x(@x[0,1,2,3],1,$t0,$t2,$t3); + &swapmove2x(@x[4,5,6,7],1,$t0,$t2,$t3); +$code.=<<___; + vmov.i8 $t0,#0x0f @ compose .LBS2 +___ + &swapmove2x(@x[0,2,1,3],2,$t1,$t2,$t3); + &swapmove2x(@x[4,6,5,7],2,$t1,$t2,$t3); + + &swapmove2x(@x[0,4,1,5],4,$t0,$t2,$t3); + &swapmove2x(@x[2,6,3,7],4,$t0,$t2,$t3); +} + +$code.=<<___; +#ifndef __KERNEL__ +# include + +# define VFP_ABI_PUSH vstmdb sp!,{d8-d15} +# define VFP_ABI_POP vldmia sp!,{d8-d15} +# define VFP_ABI_FRAME 0x40 +#else +# define VFP_ABI_PUSH +# define VFP_ABI_POP +# define VFP_ABI_FRAME 0 +# define BSAES_ASM_EXTENDED_KEY +# define __ARM_ARCH__ __LINUX_ARM_ARCH__ +# define __ARM_MAX_ARCH__ 7 +#endif + +#ifdef __thumb__ +# define adrl adr +#endif + +#if __ARM_MAX_ARCH__>=7 +.arch armv7-a +.fpu neon + +.text +.syntax unified @ ARMv7-capable assembler is expected to handle this +#if defined(__thumb2__) && !defined(__APPLE__) +.thumb +#else +.code 32 +# undef __thumb2__ +#endif + +.type _bsaes_const,%object +.align 6 +_bsaes_const: +.LM0ISR: @ InvShiftRows constants + .quad 0x0a0e0206070b0f03, 0x0004080c0d010509 +.LISR: + .quad 0x0504070602010003, 0x0f0e0d0c080b0a09 +.LISRM0: + .quad 0x01040b0e0205080f, 0x0306090c00070a0d +.LM0SR: @ ShiftRows constants + .quad 0x0a0e02060f03070b, 0x0004080c05090d01 +.LSR: + .quad 0x0504070600030201, 0x0f0e0d0c0a09080b +.LSRM0: + .quad 0x0304090e00050a0f, 0x01060b0c0207080d +.LM0: + .quad 0x02060a0e03070b0f, 0x0004080c0105090d +.LREVM0SR: + .quad 0x090d01050c000408, 0x03070b0f060a0e02 +.asciz "Bit-sliced AES for NEON, CRYPTOGAMS by " +.align 6 +.size _bsaes_const,.-_bsaes_const + +.type _bsaes_encrypt8,%function +.align 4 +_bsaes_encrypt8: + adr $const,. + vldmia $key!, {@XMM[9]} @ round 0 key +#if defined(__thumb2__) || defined(__APPLE__) + adr $const,.LM0SR +#else + sub $const,$const,#_bsaes_encrypt8-.LM0SR +#endif + + vldmia $const!, {@XMM[8]} @ .LM0SR +_bsaes_encrypt8_alt: + veor @XMM[10], @XMM[0], @XMM[9] @ xor with round0 key + veor @XMM[11], @XMM[1], @XMM[9] + vtbl.8 `&Dlo(@XMM[0])`, {@XMM[10]}, `&Dlo(@XMM[8])` + vtbl.8 `&Dhi(@XMM[0])`, {@XMM[10]}, `&Dhi(@XMM[8])` + veor @XMM[12], @XMM[2], @XMM[9] + vtbl.8 `&Dlo(@XMM[1])`, {@XMM[11]}, `&Dlo(@XMM[8])` + vtbl.8 `&Dhi(@XMM[1])`, {@XMM[11]}, `&Dhi(@XMM[8])` + veor @XMM[13], @XMM[3], @XMM[9] + vtbl.8 `&Dlo(@XMM[2])`, {@XMM[12]}, `&Dlo(@XMM[8])` + vtbl.8 `&Dhi(@XMM[2])`, {@XMM[12]}, `&Dhi(@XMM[8])` + veor @XMM[14], @XMM[4], @XMM[9] + vtbl.8 `&Dlo(@XMM[3])`, {@XMM[13]}, `&Dlo(@XMM[8])` + vtbl.8 `&Dhi(@XMM[3])`, {@XMM[13]}, `&Dhi(@XMM[8])` + veor @XMM[15], @XMM[5], @XMM[9] + vtbl.8 `&Dlo(@XMM[4])`, {@XMM[14]}, `&Dlo(@XMM[8])` + vtbl.8 `&Dhi(@XMM[4])`, {@XMM[14]}, `&Dhi(@XMM[8])` + veor @XMM[10], @XMM[6], @XMM[9] + vtbl.8 `&Dlo(@XMM[5])`, {@XMM[15]}, `&Dlo(@XMM[8])` + vtbl.8 `&Dhi(@XMM[5])`, {@XMM[15]}, `&Dhi(@XMM[8])` + veor @XMM[11], @XMM[7], @XMM[9] + vtbl.8 `&Dlo(@XMM[6])`, {@XMM[10]}, `&Dlo(@XMM[8])` + vtbl.8 `&Dhi(@XMM[6])`, {@XMM[10]}, `&Dhi(@XMM[8])` + vtbl.8 `&Dlo(@XMM[7])`, {@XMM[11]}, `&Dlo(@XMM[8])` + vtbl.8 `&Dhi(@XMM[7])`, {@XMM[11]}, `&Dhi(@XMM[8])` +_bsaes_encrypt8_bitslice: +___ + &bitslice (@XMM[0..7, 8..11]); +$code.=<<___; + sub $rounds,$rounds,#1 + b .Lenc_sbox +.align 4 +.Lenc_loop: +___ + &ShiftRows (@XMM[0..7, 8..12]); +$code.=".Lenc_sbox:\n"; + &Sbox (@XMM[0..7, 8..15]); +$code.=<<___; + subs $rounds,$rounds,#1 + bcc .Lenc_done +___ + &MixColumns (@XMM[0,1,4,6,3,7,2,5, 8..15]); +$code.=<<___; + vldmia $const, {@XMM[12]} @ .LSR + ite eq @ Thumb2 thing, samity check in ARM + addeq $const,$const,#0x10 + bne .Lenc_loop + vldmia $const, {@XMM[12]} @ .LSRM0 + b .Lenc_loop +.align 4 +.Lenc_done: +___ + # output in lsb > [t0, t1, t4, t6, t3, t7, t2, t5] < msb + &bitslice (@XMM[0,1,4,6,3,7,2,5, 8..11]); +$code.=<<___; + vldmia $key, {@XMM[8]} @ last round key + veor @XMM[4], @XMM[4], @XMM[8] + veor @XMM[6], @XMM[6], @XMM[8] + veor @XMM[3], @XMM[3], @XMM[8] + veor @XMM[7], @XMM[7], @XMM[8] + veor @XMM[2], @XMM[2], @XMM[8] + veor @XMM[5], @XMM[5], @XMM[8] + veor @XMM[0], @XMM[0], @XMM[8] + veor @XMM[1], @XMM[1], @XMM[8] + bx lr +.size _bsaes_encrypt8,.-_bsaes_encrypt8 +___ +} +{ +my ($out,$inp,$rounds,$const)=("r12","r4","r5","r6"); + +sub bitslice_key { +my @x=reverse(@_[0..7]); +my ($bs0,$bs1,$bs2,$t2,$t3)=@_[8..12]; + + &swapmove (@x[0,1],1,$bs0,$t2,$t3); +$code.=<<___; + @ &swapmove(@x[2,3],1,$t0,$t2,$t3); + vmov @x[2], @x[0] + vmov @x[3], @x[1] +___ + #&swapmove2x(@x[4,5,6,7],1,$t0,$t2,$t3); + + &swapmove2x (@x[0,2,1,3],2,$bs1,$t2,$t3); +$code.=<<___; + @ &swapmove2x(@x[4,6,5,7],2,$t1,$t2,$t3); + vmov @x[4], @x[0] + vmov @x[6], @x[2] + vmov @x[5], @x[1] + vmov @x[7], @x[3] +___ + &swapmove2x (@x[0,4,1,5],4,$bs2,$t2,$t3); + &swapmove2x (@x[2,6,3,7],4,$bs2,$t2,$t3); +} + +$code.=<<___; +.type _bsaes_key_convert,%function +.align 4 +_bsaes_key_convert: + adr $const,. + vld1.8 {@XMM[7]}, [$inp]! @ load round 0 key +#if defined(__thumb2__) || defined(__APPLE__) + adr $const,.LM0 +#else + sub $const,$const,#_bsaes_key_convert-.LM0 +#endif + vld1.8 {@XMM[15]}, [$inp]! @ load round 1 key + + vmov.i8 @XMM[8], #0x01 @ bit masks + vmov.i8 @XMM[9], #0x02 + vmov.i8 @XMM[10], #0x04 + vmov.i8 @XMM[11], #0x08 + vmov.i8 @XMM[12], #0x10 + vmov.i8 @XMM[13], #0x20 + vldmia $const, {@XMM[14]} @ .LM0 + +#ifdef __ARMEL__ + vrev32.8 @XMM[7], @XMM[7] + vrev32.8 @XMM[15], @XMM[15] +#endif + sub $rounds,$rounds,#1 + vstmia $out!, {@XMM[7]} @ save round 0 key + b .Lkey_loop + +.align 4 +.Lkey_loop: + vtbl.8 `&Dlo(@XMM[7])`,{@XMM[15]},`&Dlo(@XMM[14])` + vtbl.8 `&Dhi(@XMM[7])`,{@XMM[15]},`&Dhi(@XMM[14])` + vmov.i8 @XMM[6], #0x40 + vmov.i8 @XMM[15], #0x80 + + vtst.8 @XMM[0], @XMM[7], @XMM[8] + vtst.8 @XMM[1], @XMM[7], @XMM[9] + vtst.8 @XMM[2], @XMM[7], @XMM[10] + vtst.8 @XMM[3], @XMM[7], @XMM[11] + vtst.8 @XMM[4], @XMM[7], @XMM[12] + vtst.8 @XMM[5], @XMM[7], @XMM[13] + vtst.8 @XMM[6], @XMM[7], @XMM[6] + vtst.8 @XMM[7], @XMM[7], @XMM[15] + vld1.8 {@XMM[15]}, [$inp]! @ load next round key + vmvn @XMM[0], @XMM[0] @ "pnot" + vmvn @XMM[1], @XMM[1] + vmvn @XMM[5], @XMM[5] + vmvn @XMM[6], @XMM[6] +#ifdef __ARMEL__ + vrev32.8 @XMM[15], @XMM[15] +#endif + subs $rounds,$rounds,#1 + vstmia $out!,{@XMM[0]-@XMM[7]} @ write bit-sliced round key + bne .Lkey_loop + + vmov.i8 @XMM[7],#0x63 @ compose .L63 + @ don't save last round key + bx lr +.size _bsaes_key_convert,.-_bsaes_key_convert +___ +} + +{ +my ($inp,$out,$len,$key, $ctr,$fp,$rounds)=(map("r$_",(0..3,8..10))); +my $const = "r6"; # shared with _bsaes_encrypt8_alt +my $keysched = "sp"; + +$code.=<<___; +.global GFp_bsaes_ctr32_encrypt_blocks +.type GFp_bsaes_ctr32_encrypt_blocks,%function +.align 5 +GFp_bsaes_ctr32_encrypt_blocks: + @ In OpenSSL, short inputs fall back to aes_nohw_* here. We patch this + @ out to retain a constant-time implementation. + mov ip, sp + stmdb sp!, {r4-r10, lr} + VFP_ABI_PUSH + ldr $ctr, [ip] @ ctr is 1st arg on the stack + sub sp, sp, #0x10 @ scratch space to carry over the ctr + mov $fp, sp @ save sp + + ldr $rounds, [$key, #240] @ get # of rounds +#ifndef BSAES_ASM_EXTENDED_KEY + @ allocate the key schedule on the stack + sub r12, sp, $rounds, lsl#7 @ 128 bytes per inner round key + add r12, #`128-32` @ size of bit-sliced key schedule + + @ populate the key schedule + mov r4, $key @ pass key + mov r5, $rounds @ pass # of rounds + mov sp, r12 @ sp is $keysched + bl _bsaes_key_convert + veor @XMM[7],@XMM[7],@XMM[15] @ fix up last round key + vstmia r12, {@XMM[7]} @ save last round key + + vld1.8 {@XMM[0]}, [$ctr] @ load counter +#ifdef __APPLE__ + mov $ctr, #:lower16:(.LREVM0SR-.LM0) + add $ctr, $const, $ctr +#else + add $ctr, $const, #.LREVM0SR-.LM0 @ borrow $ctr +#endif + vldmia $keysched, {@XMM[4]} @ load round0 key +#else + ldr r12, [$key, #244] + eors r12, #1 + beq 0f + + @ populate the key schedule + str r12, [$key, #244] + mov r4, $key @ pass key + mov r5, $rounds @ pass # of rounds + add r12, $key, #248 @ pass key schedule + bl _bsaes_key_convert + veor @XMM[7],@XMM[7],@XMM[15] @ fix up last round key + vstmia r12, {@XMM[7]} @ save last round key + +.align 2 +0: add r12, $key, #248 + vld1.8 {@XMM[0]}, [$ctr] @ load counter + adrl $ctr, .LREVM0SR @ borrow $ctr + vldmia r12, {@XMM[4]} @ load round0 key + sub sp, #0x10 @ place for adjusted round0 key +#endif + + vmov.i32 @XMM[8],#1 @ compose 1<<96 + veor @XMM[9],@XMM[9],@XMM[9] + vrev32.8 @XMM[0],@XMM[0] + vext.8 @XMM[8],@XMM[9],@XMM[8],#4 + vrev32.8 @XMM[4],@XMM[4] + vadd.u32 @XMM[9],@XMM[8],@XMM[8] @ compose 2<<96 + vstmia $keysched, {@XMM[4]} @ save adjusted round0 key + b .Lctr_enc_loop + +.align 4 +.Lctr_enc_loop: + vadd.u32 @XMM[10], @XMM[8], @XMM[9] @ compose 3<<96 + vadd.u32 @XMM[1], @XMM[0], @XMM[8] @ +1 + vadd.u32 @XMM[2], @XMM[0], @XMM[9] @ +2 + vadd.u32 @XMM[3], @XMM[0], @XMM[10] @ +3 + vadd.u32 @XMM[4], @XMM[1], @XMM[10] + vadd.u32 @XMM[5], @XMM[2], @XMM[10] + vadd.u32 @XMM[6], @XMM[3], @XMM[10] + vadd.u32 @XMM[7], @XMM[4], @XMM[10] + vadd.u32 @XMM[10], @XMM[5], @XMM[10] @ next counter + + @ Borrow prologue from _bsaes_encrypt8 to use the opportunity + @ to flip byte order in 32-bit counter + + vldmia $keysched, {@XMM[9]} @ load round0 key +#ifndef BSAES_ASM_EXTENDED_KEY + add r4, $keysched, #0x10 @ pass next round key +#else + add r4, $key, #`248+16` +#endif + vldmia $ctr, {@XMM[8]} @ .LREVM0SR + mov r5, $rounds @ pass rounds + vstmia $fp, {@XMM[10]} @ save next counter +#ifdef __APPLE__ + mov $const, #:lower16:(.LREVM0SR-.LSR) + sub $const, $ctr, $const +#else + sub $const, $ctr, #.LREVM0SR-.LSR @ pass constants +#endif + + bl _bsaes_encrypt8_alt + + subs $len, $len, #8 + blo .Lctr_enc_loop_done + + vld1.8 {@XMM[8]-@XMM[9]}, [$inp]! @ load input + vld1.8 {@XMM[10]-@XMM[11]}, [$inp]! + veor @XMM[0], @XMM[8] + veor @XMM[1], @XMM[9] + vld1.8 {@XMM[12]-@XMM[13]}, [$inp]! + veor @XMM[4], @XMM[10] + veor @XMM[6], @XMM[11] + vld1.8 {@XMM[14]-@XMM[15]}, [$inp]! + veor @XMM[3], @XMM[12] + vst1.8 {@XMM[0]-@XMM[1]}, [$out]! @ write output + veor @XMM[7], @XMM[13] + veor @XMM[2], @XMM[14] + vst1.8 {@XMM[4]}, [$out]! + veor @XMM[5], @XMM[15] + vst1.8 {@XMM[6]}, [$out]! + vmov.i32 @XMM[8], #1 @ compose 1<<96 + vst1.8 {@XMM[3]}, [$out]! + veor @XMM[9], @XMM[9], @XMM[9] + vst1.8 {@XMM[7]}, [$out]! + vext.8 @XMM[8], @XMM[9], @XMM[8], #4 + vst1.8 {@XMM[2]}, [$out]! + vadd.u32 @XMM[9],@XMM[8],@XMM[8] @ compose 2<<96 + vst1.8 {@XMM[5]}, [$out]! + vldmia $fp, {@XMM[0]} @ load counter + + bne .Lctr_enc_loop + b .Lctr_enc_done + +.align 4 +.Lctr_enc_loop_done: + add $len, $len, #8 + vld1.8 {@XMM[8]}, [$inp]! @ load input + veor @XMM[0], @XMM[8] + vst1.8 {@XMM[0]}, [$out]! @ write output + cmp $len, #2 + blo .Lctr_enc_done + vld1.8 {@XMM[9]}, [$inp]! + veor @XMM[1], @XMM[9] + vst1.8 {@XMM[1]}, [$out]! + beq .Lctr_enc_done + vld1.8 {@XMM[10]}, [$inp]! + veor @XMM[4], @XMM[10] + vst1.8 {@XMM[4]}, [$out]! + cmp $len, #4 + blo .Lctr_enc_done + vld1.8 {@XMM[11]}, [$inp]! + veor @XMM[6], @XMM[11] + vst1.8 {@XMM[6]}, [$out]! + beq .Lctr_enc_done + vld1.8 {@XMM[12]}, [$inp]! + veor @XMM[3], @XMM[12] + vst1.8 {@XMM[3]}, [$out]! + cmp $len, #6 + blo .Lctr_enc_done + vld1.8 {@XMM[13]}, [$inp]! + veor @XMM[7], @XMM[13] + vst1.8 {@XMM[7]}, [$out]! + beq .Lctr_enc_done + vld1.8 {@XMM[14]}, [$inp] + veor @XMM[2], @XMM[14] + vst1.8 {@XMM[2]}, [$out]! + +.Lctr_enc_done: + vmov.i32 q0, #0 + vmov.i32 q1, #0 +#ifndef BSAES_ASM_EXTENDED_KEY +.Lctr_enc_bzero: @ wipe key schedule [if any] + vstmia $keysched!, {q0-q1} + cmp $keysched, $fp + bne .Lctr_enc_bzero +#else + vstmia $keysched, {q0-q1} +#endif + + mov sp, $fp + add sp, #0x10 @ add sp,$fp,#0x10 is no good for thumb + VFP_ABI_POP + ldmia sp!, {r4-r10, pc} @ return + + @ OpenSSL contains aes_nohw_* fallback code here. We patch this + @ out to retain a constant-time implementation. +.size GFp_bsaes_ctr32_encrypt_blocks,.-GFp_bsaes_ctr32_encrypt_blocks +___ +} +$code.=<<___; +#endif +___ + +$code =~ s/\`([^\`]*)\`/eval($1)/gem; + +open SELF,$0; +while() { + next if (/^#!/); + last if (!s/^#/@/ and !/^$/); + print; +} +close SELF; + +print $code; + +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/fipsmodule/aes/asm/vpaes-armv7.pl b/vendor/ring/crypto/fipsmodule/aes/asm/vpaes-armv7.pl new file mode 100644 index 00000000..d36a97a9 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/aes/asm/vpaes-armv7.pl @@ -0,0 +1,896 @@ +#! /usr/bin/env perl +# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +###################################################################### +## Constant-time SSSE3 AES core implementation. +## version 0.1 +## +## By Mike Hamburg (Stanford University), 2009 +## Public domain. +## +## For details see http://shiftleft.org/papers/vector_aes/ and +## http://crypto.stanford.edu/vpaes/. +## +###################################################################### +# Adapted from the original x86_64 version and 's ARMv8 +# version. +# +# armv7, aarch64, and x86_64 differ in several ways: +# +# * x86_64 SSSE3 instructions are two-address (destination operand is also a +# source), while NEON is three-address (destination operand is separate from +# two sources). +# +# * aarch64 has 32 SIMD registers available, while x86_64 and armv7 have 16. +# +# * x86_64 instructions can take memory references, while ARM is a load/store +# architecture. This means we sometimes need a spare register. +# +# * aarch64 and x86_64 have 128-bit byte shuffle instructions (tbl and pshufb), +# while armv7 only has a 64-bit byte shuffle (vtbl). +# +# This means this armv7 version must be a mix of both aarch64 and x86_64 +# implementations. armv7 and aarch64 have analogous SIMD instructions, so we +# base the instructions on aarch64. However, we cannot use aarch64's register +# allocation. x86_64's register count matches, but x86_64 is two-address. +# vpaes-armv8.pl already accounts for this in the comments, which use +# three-address AVX instructions instead of the original SSSE3 ones. We base +# register usage on these comments, which are preserved in this file. +# +# This means we do not use separate input and output registers as in aarch64 and +# cannot pin as many constants in the preheat functions. However, the load/store +# architecture means we must still deviate from x86_64 in places. +# +# Next, we account for the byte shuffle instructions. vtbl takes 64-bit source +# and destination and 128-bit table. Fortunately, armv7 also allows addressing +# upper and lower halves of each 128-bit register. The lower half of q{N} is +# d{2*N}. The upper half is d{2*N+1}. Instead of the following non-existent +# instruction, +# +# vtbl.8 q0, q1, q2 @ Index each of q2's 16 bytes into q1. Store in q0. +# +# we write: +# +# vtbl.8 d0, q1, d4 @ Index each of d4's 8 bytes into q1. Store in d0. +# vtbl.8 d1, q1, d5 @ Index each of d5's 8 bytes into q1. Store in d1. +# +# For readability, we write d0 and d1 as q0#lo and q0#hi, respectively and +# post-process before outputting. (This is adapted from ghash-armv4.pl.) Note, +# however, that destination (q0) and table (q1) registers may no longer match. +# We adjust the register usage from x86_64 to avoid this. (Unfortunately, the +# two-address pshufb always matched these operands, so this is common.) +# +# This file also runs against the limit of ARMv7's ADR pseudo-instruction. ADR +# expands to an ADD or SUB of the pc register to find an address. That immediate +# must fit in ARM's encoding scheme: 8 bits of constant and 4 bits of rotation. +# This means larger values must be more aligned. +# +# ARM additionally has two encodings, ARM and Thumb mode. Our assembly files may +# use either encoding (do we actually need to support this?). In ARM mode, the +# distances get large enough to require 16-byte alignment. Moving constants +# closer to their use resolves most of this, but common constants in +# _vpaes_consts are used by the whole file. Affected ADR instructions must be +# placed at 8 mod 16 (the pc register is 8 ahead). Instructions with this +# constraint have been commented. +# +# For details on ARM's immediate value encoding scheme, see +# https://alisdair.mcdiarmid.org/arm-immediate-value-encoding/ +# +# Finally, a summary of armv7 and aarch64 SIMD syntax differences: +# +# * armv7 prefixes SIMD instructions with 'v', while aarch64 does not. +# +# * armv7 SIMD registers are named like q0 (and d0 for the half-width ones). +# aarch64 names registers like v0, and denotes half-width operations in an +# instruction suffix (see below). +# +# * aarch64 embeds size and lane information in register suffixes. v0.16b is +# 16 bytes, v0.8h is eight u16s, v0.4s is four u32s, and v0.2d is two u64s. +# armv7 embeds the total size in the register name (see above) and the size of +# each element in an instruction suffix, which may look like vmov.i8, +# vshr.u8, or vtbl.8, depending on instruction. + +use strict; + +my $flavour = shift; +my $output; +while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; +my $dir=$1; +my $xlate; +( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or +die "can't locate arm-xlate.pl"; + +open OUT,"| \"$^X\" $xlate $flavour $output"; +*STDOUT=*OUT; + +my $code = ""; + +$code.=<<___; +.syntax unified + +.arch armv7-a +.fpu neon + +#if defined(__thumb2__) +.thumb +#else +.code 32 +#endif + +.text + +.type _vpaes_consts,%object +.align 7 @ totally strategic alignment +_vpaes_consts: +.Lk_mc_forward: @ mc_forward + .quad 0x0407060500030201, 0x0C0F0E0D080B0A09 + .quad 0x080B0A0904070605, 0x000302010C0F0E0D + .quad 0x0C0F0E0D080B0A09, 0x0407060500030201 + .quad 0x000302010C0F0E0D, 0x080B0A0904070605 +.Lk_mc_backward:@ mc_backward + .quad 0x0605040702010003, 0x0E0D0C0F0A09080B + .quad 0x020100030E0D0C0F, 0x0A09080B06050407 + .quad 0x0E0D0C0F0A09080B, 0x0605040702010003 + .quad 0x0A09080B06050407, 0x020100030E0D0C0F +.Lk_sr: @ sr + .quad 0x0706050403020100, 0x0F0E0D0C0B0A0908 + .quad 0x030E09040F0A0500, 0x0B06010C07020D08 + .quad 0x0F060D040B020900, 0x070E050C030A0108 + .quad 0x0B0E0104070A0D00, 0x0306090C0F020508 + +@ +@ "Hot" constants +@ +.Lk_inv: @ inv, inva + .quad 0x0E05060F0D080180, 0x040703090A0B0C02 + .quad 0x01040A060F0B0780, 0x030D0E0C02050809 +.Lk_ipt: @ input transform (lo, hi) + .quad 0xC2B2E8985A2A7000, 0xCABAE09052227808 + .quad 0x4C01307D317C4D00, 0xCD80B1FCB0FDCC81 +.Lk_sbo: @ sbou, sbot + .quad 0xD0D26D176FBDC700, 0x15AABF7AC502A878 + .quad 0xCFE474A55FBB6A00, 0x8E1E90D1412B35FA +.Lk_sb1: @ sb1u, sb1t + .quad 0x3618D415FAE22300, 0x3BF7CCC10D2ED9EF + .quad 0xB19BE18FCB503E00, 0xA5DF7A6E142AF544 +.Lk_sb2: @ sb2u, sb2t + .quad 0x69EB88400AE12900, 0xC2A163C8AB82234A + .quad 0xE27A93C60B712400, 0x5EB7E955BC982FCD + +.asciz "Vector Permutation AES for ARMv7 NEON, Mike Hamburg (Stanford University)" +.size _vpaes_consts,.-_vpaes_consts +.align 6 +___ + +{ +my ($inp,$out,$key) = map("r$_", (0..2)); + +my ($invlo,$invhi) = map("q$_", (10..11)); +my ($sb1u,$sb1t,$sb2u,$sb2t) = map("q$_", (12..15)); + +$code.=<<___; +@@ +@@ _aes_preheat +@@ +@@ Fills q9-q15 as specified below. +@@ +.type _vpaes_preheat,%function +.align 4 +_vpaes_preheat: + adr r10, .Lk_inv + vmov.i8 q9, #0x0f @ .Lk_s0F + vld1.64 {q10,q11}, [r10]! @ .Lk_inv + add r10, r10, #64 @ Skip .Lk_ipt, .Lk_sbo + vld1.64 {q12,q13}, [r10]! @ .Lk_sb1 + vld1.64 {q14,q15}, [r10] @ .Lk_sb2 + bx lr + +@@ +@@ _aes_encrypt_core +@@ +@@ AES-encrypt q0. +@@ +@@ Inputs: +@@ q0 = input +@@ q9-q15 as in _vpaes_preheat +@@ [$key] = scheduled keys +@@ +@@ Output in q0 +@@ Clobbers q1-q5, r8-r11 +@@ Preserves q6-q8 so you get some local vectors +@@ +@@ +.type _vpaes_encrypt_core,%function +.align 4 +_vpaes_encrypt_core: + mov r9, $key + ldr r8, [$key,#240] @ pull rounds + adr r11, .Lk_ipt + @ vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo + @ vmovdqa .Lk_ipt+16(%rip), %xmm3 # ipthi + vld1.64 {q2, q3}, [r11] + adr r11, .Lk_mc_forward+16 + vld1.64 {q5}, [r9]! @ vmovdqu (%r9), %xmm5 # round0 key + vand q1, q0, q9 @ vpand %xmm9, %xmm0, %xmm1 + vshr.u8 q0, q0, #4 @ vpsrlb \$4, %xmm0, %xmm0 + vtbl.8 q1#lo, {q2}, q1#lo @ vpshufb %xmm1, %xmm2, %xmm1 + vtbl.8 q1#hi, {q2}, q1#hi + vtbl.8 q2#lo, {q3}, q0#lo @ vpshufb %xmm0, %xmm3, %xmm2 + vtbl.8 q2#hi, {q3}, q0#hi + veor q0, q1, q5 @ vpxor %xmm5, %xmm1, %xmm0 + veor q0, q0, q2 @ vpxor %xmm2, %xmm0, %xmm0 + + @ .Lenc_entry ends with a bnz instruction which is normally paired with + @ subs in .Lenc_loop. + tst r8, r8 + b .Lenc_entry + +.align 4 +.Lenc_loop: + @ middle of middle round + add r10, r11, #0x40 + vtbl.8 q4#lo, {$sb1t}, q2#lo @ vpshufb %xmm2, %xmm13, %xmm4 # 4 = sb1u + vtbl.8 q4#hi, {$sb1t}, q2#hi + vld1.64 {q1}, [r11]! @ vmovdqa -0x40(%r11,%r10), %xmm1 # .Lk_mc_forward[] + vtbl.8 q0#lo, {$sb1u}, q3#lo @ vpshufb %xmm3, %xmm12, %xmm0 # 0 = sb1t + vtbl.8 q0#hi, {$sb1u}, q3#hi + veor q4, q4, q5 @ vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k + vtbl.8 q5#lo, {$sb2t}, q2#lo @ vpshufb %xmm2, %xmm15, %xmm5 # 4 = sb2u + vtbl.8 q5#hi, {$sb2t}, q2#hi + veor q0, q0, q4 @ vpxor %xmm4, %xmm0, %xmm0 # 0 = A + vtbl.8 q2#lo, {$sb2u}, q3#lo @ vpshufb %xmm3, %xmm14, %xmm2 # 2 = sb2t + vtbl.8 q2#hi, {$sb2u}, q3#hi + vld1.64 {q4}, [r10] @ vmovdqa (%r11,%r10), %xmm4 # .Lk_mc_backward[] + vtbl.8 q3#lo, {q0}, q1#lo @ vpshufb %xmm1, %xmm0, %xmm3 # 0 = B + vtbl.8 q3#hi, {q0}, q1#hi + veor q2, q2, q5 @ vpxor %xmm5, %xmm2, %xmm2 # 2 = 2A + @ Write to q5 instead of q0, so the table and destination registers do + @ not overlap. + vtbl.8 q5#lo, {q0}, q4#lo @ vpshufb %xmm4, %xmm0, %xmm0 # 3 = D + vtbl.8 q5#hi, {q0}, q4#hi + veor q3, q3, q2 @ vpxor %xmm2, %xmm3, %xmm3 # 0 = 2A+B + vtbl.8 q4#lo, {q3}, q1#lo @ vpshufb %xmm1, %xmm3, %xmm4 # 0 = 2B+C + vtbl.8 q4#hi, {q3}, q1#hi + @ Here we restore the original q0/q5 usage. + veor q0, q5, q3 @ vpxor %xmm3, %xmm0, %xmm0 # 3 = 2A+B+D + and r11, r11, #~(1<<6) @ and \$0x30, %r11 # ... mod 4 + veor q0, q0, q4 @ vpxor %xmm4, %xmm0, %xmm0 # 0 = 2A+3B+C+D + subs r8, r8, #1 @ nr-- + +.Lenc_entry: + @ top of round + vand q1, q0, q9 @ vpand %xmm0, %xmm9, %xmm1 # 0 = k + vshr.u8 q0, q0, #4 @ vpsrlb \$4, %xmm0, %xmm0 # 1 = i + vtbl.8 q5#lo, {$invhi}, q1#lo @ vpshufb %xmm1, %xmm11, %xmm5 # 2 = a/k + vtbl.8 q5#hi, {$invhi}, q1#hi + veor q1, q1, q0 @ vpxor %xmm0, %xmm1, %xmm1 # 0 = j + vtbl.8 q3#lo, {$invlo}, q0#lo @ vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i + vtbl.8 q3#hi, {$invlo}, q0#hi + vtbl.8 q4#lo, {$invlo}, q1#lo @ vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j + vtbl.8 q4#hi, {$invlo}, q1#hi + veor q3, q3, q5 @ vpxor %xmm5, %xmm3, %xmm3 # 3 = iak = 1/i + a/k + veor q4, q4, q5 @ vpxor %xmm5, %xmm4, %xmm4 # 4 = jak = 1/j + a/k + vtbl.8 q2#lo, {$invlo}, q3#lo @ vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak + vtbl.8 q2#hi, {$invlo}, q3#hi + vtbl.8 q3#lo, {$invlo}, q4#lo @ vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak + vtbl.8 q3#hi, {$invlo}, q4#hi + veor q2, q2, q1 @ vpxor %xmm1, %xmm2, %xmm2 # 2 = io + veor q3, q3, q0 @ vpxor %xmm0, %xmm3, %xmm3 # 3 = jo + vld1.64 {q5}, [r9]! @ vmovdqu (%r9), %xmm5 + bne .Lenc_loop + + @ middle of last round + add r10, r11, #0x80 + + adr r11, .Lk_sbo + @ Read to q1 instead of q4, so the vtbl.8 instruction below does not + @ overlap table and destination registers. + vld1.64 {q1}, [r11]! @ vmovdqa -0x60(%r10), %xmm4 # 3 : sbou + vld1.64 {q0}, [r11] @ vmovdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16 + vtbl.8 q4#lo, {q1}, q2#lo @ vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou + vtbl.8 q4#hi, {q1}, q2#hi + vld1.64 {q1}, [r10] @ vmovdqa 0x40(%r11,%r10), %xmm1 # .Lk_sr[] + @ Write to q2 instead of q0 below, to avoid overlapping table and + @ destination registers. + vtbl.8 q2#lo, {q0}, q3#lo @ vpshufb %xmm3, %xmm0, %xmm0 # 0 = sb1t + vtbl.8 q2#hi, {q0}, q3#hi + veor q4, q4, q5 @ vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k + veor q2, q2, q4 @ vpxor %xmm4, %xmm0, %xmm0 # 0 = A + @ Here we restore the original q0/q2 usage. + vtbl.8 q0#lo, {q2}, q1#lo @ vpshufb %xmm1, %xmm0, %xmm0 + vtbl.8 q0#hi, {q2}, q1#hi + bx lr +.size _vpaes_encrypt_core,.-_vpaes_encrypt_core + +.globl GFp_vpaes_encrypt +.type GFp_vpaes_encrypt,%function +.align 4 +GFp_vpaes_encrypt: + @ _vpaes_encrypt_core uses r8-r11. Round up to r7-r11 to maintain stack + @ alignment. + stmdb sp!, {r7-r11,lr} + @ _vpaes_encrypt_core uses q4-q5 (d8-d11), which are callee-saved. + vstmdb sp!, {d8-d11} + + vld1.64 {q0}, [$inp] + bl _vpaes_preheat + bl _vpaes_encrypt_core + vst1.64 {q0}, [$out] + + vldmia sp!, {d8-d11} + ldmia sp!, {r7-r11, pc} @ return +.size GFp_vpaes_encrypt,.-GFp_vpaes_encrypt +___ +} +{ +my ($inp,$bits,$out,$dir)=("r0","r1","r2","r3"); +my ($rcon,$s0F,$invlo,$invhi,$s63) = map("q$_",(8..12)); + +$code.=<<___; +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@@ @@ +@@ AES key schedule @@ +@@ @@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + +@ This function diverges from both x86_64 and armv7 in which constants are +@ pinned. x86_64 has a common preheat function for all operations. aarch64 +@ separates them because it has enough registers to pin nearly all constants. +@ armv7 does not have enough registers, but needing explicit loads and stores +@ also complicates using x86_64's register allocation directly. +@ +@ We pin some constants for convenience and leave q14 and q15 free to load +@ others on demand. + +@ +@ Key schedule constants +@ +.type _vpaes_key_consts,%object +.align 4 +_vpaes_key_consts: +.Lk_rcon: @ rcon + .quad 0x1F8391B9AF9DEEB6, 0x702A98084D7C7D81 + +.Lk_opt: @ output transform + .quad 0xFF9F4929D6B66000, 0xF7974121DEBE6808 + .quad 0x01EDBD5150BCEC00, 0xE10D5DB1B05C0CE0 +.Lk_deskew: @ deskew tables: inverts the sbox's "skew" + .quad 0x07E4A34047A4E300, 0x1DFEB95A5DBEF91A + .quad 0x5F36B5DC83EA6900, 0x2841C2ABF49D1E77 +.size _vpaes_key_consts,.-_vpaes_key_consts + +.type _vpaes_key_preheat,%function +.align 4 +_vpaes_key_preheat: + adr r11, .Lk_rcon + vmov.i8 $s63, #0x5b @ .Lk_s63 + adr r10, .Lk_inv @ Must be aligned to 8 mod 16. + vmov.i8 $s0F, #0x0f @ .Lk_s0F + vld1.64 {$invlo,$invhi}, [r10] @ .Lk_inv + vld1.64 {$rcon}, [r11] @ .Lk_rcon + bx lr +.size _vpaes_key_preheat,.-_vpaes_key_preheat + +.type _vpaes_schedule_core,%function +.align 4 +_vpaes_schedule_core: + @ We only need to save lr, but ARM requires an 8-byte stack alignment, + @ so save an extra register. + stmdb sp!, {r3,lr} + + bl _vpaes_key_preheat @ load the tables + + adr r11, .Lk_ipt @ Must be aligned to 8 mod 16. + vld1.64 {q0}, [$inp]! @ vmovdqu (%rdi), %xmm0 # load key (unaligned) + + @ input transform + @ Use q4 here rather than q3 so .Lschedule_am_decrypting does not + @ overlap table and destination. + vmov q4, q0 @ vmovdqa %xmm0, %xmm3 + bl _vpaes_schedule_transform + adr r10, .Lk_sr @ Must be aligned to 8 mod 16. + vmov q7, q0 @ vmovdqa %xmm0, %xmm7 + + add r8, r8, r10 + + @ encrypting, output zeroth round key after transform + vst1.64 {q0}, [$out] @ vmovdqu %xmm0, (%rdx) + + @ *ring*: Decryption removed. + +.Lschedule_go: + cmp $bits, #192 @ cmp \$192, %esi + bhi .Lschedule_256 + @ 128: fall though + +@@ +@@ .schedule_128 +@@ +@@ 128-bit specific part of key schedule. +@@ +@@ This schedule is really simple, because all its parts +@@ are accomplished by the subroutines. +@@ +.Lschedule_128: + mov $inp, #10 @ mov \$10, %esi + +.Loop_schedule_128: + bl _vpaes_schedule_round + subs $inp, $inp, #1 @ dec %esi + beq .Lschedule_mangle_last + bl _vpaes_schedule_mangle @ write output + b .Loop_schedule_128 + +@@ +@@ .aes_schedule_256 +@@ +@@ 256-bit specific part of key schedule. +@@ +@@ The structure here is very similar to the 128-bit +@@ schedule, but with an additional "low side" in +@@ q6. The low side's rounds are the same as the +@@ high side's, except no rcon and no rotation. +@@ +.align 4 +.Lschedule_256: + vld1.64 {q0}, [$inp] @ vmovdqu 16(%rdi),%xmm0 # load key part 2 (unaligned) + bl _vpaes_schedule_transform @ input transform + mov $inp, #7 @ mov \$7, %esi + +.Loop_schedule_256: + bl _vpaes_schedule_mangle @ output low result + vmov q6, q0 @ vmovdqa %xmm0, %xmm6 # save cur_lo in xmm6 + + @ high round + bl _vpaes_schedule_round + subs $inp, $inp, #1 @ dec %esi + beq .Lschedule_mangle_last + bl _vpaes_schedule_mangle + + @ low round. swap xmm7 and xmm6 + vdup.32 q0, q0#hi[1] @ vpshufd \$0xFF, %xmm0, %xmm0 + vmov.i8 q4, #0 + vmov q5, q7 @ vmovdqa %xmm7, %xmm5 + vmov q7, q6 @ vmovdqa %xmm6, %xmm7 + bl _vpaes_schedule_low_round + vmov q7, q5 @ vmovdqa %xmm5, %xmm7 + + b .Loop_schedule_256 + +@@ +@@ .aes_schedule_mangle_last +@@ +@@ Mangler for last round of key schedule +@@ Mangles q0 +@@ when encrypting, outputs out(q0) ^ 63 +@@ when decrypting, outputs unskew(q0) +@@ +@@ Always called right before return... jumps to cleanup and exits +@@ +.align 4 +.Lschedule_mangle_last: + @ schedule last round key from xmm0 + adr r11, .Lk_deskew @ lea .Lk_deskew(%rip),%r11 # prepare to deskew + + @ encrypting + vld1.64 {q1}, [r8] @ vmovdqa (%r8,%r10),%xmm1 + adr r11, .Lk_opt @ lea .Lk_opt(%rip), %r11 # prepare to output transform + add $out, $out, #32 @ add \$32, %rdx + vmov q2, q0 + vtbl.8 q0#lo, {q2}, q1#lo @ vpshufb %xmm1, %xmm0, %xmm0 # output permute + vtbl.8 q0#hi, {q2}, q1#hi + +.Lschedule_mangle_last_dec: + sub $out, $out, #16 @ add \$-16, %rdx + veor q0, q0, $s63 @ vpxor .Lk_s63(%rip), %xmm0, %xmm0 + bl _vpaes_schedule_transform @ output transform + vst1.64 {q0}, [$out] @ vmovdqu %xmm0, (%rdx) # save last key + + @ cleanup + veor q0, q0, q0 @ vpxor %xmm0, %xmm0, %xmm0 + veor q1, q1, q1 @ vpxor %xmm1, %xmm1, %xmm1 + veor q2, q2, q2 @ vpxor %xmm2, %xmm2, %xmm2 + veor q3, q3, q3 @ vpxor %xmm3, %xmm3, %xmm3 + veor q4, q4, q4 @ vpxor %xmm4, %xmm4, %xmm4 + veor q5, q5, q5 @ vpxor %xmm5, %xmm5, %xmm5 + veor q6, q6, q6 @ vpxor %xmm6, %xmm6, %xmm6 + veor q7, q7, q7 @ vpxor %xmm7, %xmm7, %xmm7 + ldmia sp!, {r3,pc} @ return +.size _vpaes_schedule_core,.-_vpaes_schedule_core + +@@ +@@ .aes_schedule_round +@@ +@@ Runs one main round of the key schedule on q0, q7 +@@ +@@ Specifically, runs subbytes on the high dword of q0 +@@ then rotates it by one byte and xors into the low dword of +@@ q7. +@@ +@@ Adds rcon from low byte of q8, then rotates q8 for +@@ next rcon. +@@ +@@ Smears the dwords of q7 by xoring the low into the +@@ second low, result into third, result into highest. +@@ +@@ Returns results in q7 = q0. +@@ Clobbers q1-q4, r11. +@@ +.type _vpaes_schedule_round,%function +.align 4 +_vpaes_schedule_round: + @ extract rcon from xmm8 + vmov.i8 q4, #0 @ vpxor %xmm4, %xmm4, %xmm4 + vext.8 q1, $rcon, q4, #15 @ vpalignr \$15, %xmm8, %xmm4, %xmm1 + vext.8 $rcon, $rcon, $rcon, #15 @ vpalignr \$15, %xmm8, %xmm8, %xmm8 + veor q7, q7, q1 @ vpxor %xmm1, %xmm7, %xmm7 + + @ rotate + vdup.32 q0, q0#hi[1] @ vpshufd \$0xFF, %xmm0, %xmm0 + vext.8 q0, q0, q0, #1 @ vpalignr \$1, %xmm0, %xmm0, %xmm0 + + @ fall through... + + @ low round: same as high round, but no rotation and no rcon. +_vpaes_schedule_low_round: + @ The x86_64 version pins .Lk_sb1 in %xmm13 and .Lk_sb1+16 in %xmm12. + @ We pin other values in _vpaes_key_preheat, so load them now. + adr r11, .Lk_sb1 + vld1.64 {q14,q15}, [r11] + + @ smear xmm7 + vext.8 q1, q4, q7, #12 @ vpslldq \$4, %xmm7, %xmm1 + veor q7, q7, q1 @ vpxor %xmm1, %xmm7, %xmm7 + vext.8 q4, q4, q7, #8 @ vpslldq \$8, %xmm7, %xmm4 + + @ subbytes + vand q1, q0, $s0F @ vpand %xmm9, %xmm0, %xmm1 # 0 = k + vshr.u8 q0, q0, #4 @ vpsrlb \$4, %xmm0, %xmm0 # 1 = i + veor q7, q7, q4 @ vpxor %xmm4, %xmm7, %xmm7 + vtbl.8 q2#lo, {$invhi}, q1#lo @ vpshufb %xmm1, %xmm11, %xmm2 # 2 = a/k + vtbl.8 q2#hi, {$invhi}, q1#hi + veor q1, q1, q0 @ vpxor %xmm0, %xmm1, %xmm1 # 0 = j + vtbl.8 q3#lo, {$invlo}, q0#lo @ vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i + vtbl.8 q3#hi, {$invlo}, q0#hi + veor q3, q3, q2 @ vpxor %xmm2, %xmm3, %xmm3 # 3 = iak = 1/i + a/k + vtbl.8 q4#lo, {$invlo}, q1#lo @ vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j + vtbl.8 q4#hi, {$invlo}, q1#hi + veor q7, q7, $s63 @ vpxor .Lk_s63(%rip), %xmm7, %xmm7 + vtbl.8 q3#lo, {$invlo}, q3#lo @ vpshufb %xmm3, %xmm10, %xmm3 # 2 = 1/iak + vtbl.8 q3#hi, {$invlo}, q3#hi + veor q4, q4, q2 @ vpxor %xmm2, %xmm4, %xmm4 # 4 = jak = 1/j + a/k + vtbl.8 q2#lo, {$invlo}, q4#lo @ vpshufb %xmm4, %xmm10, %xmm2 # 3 = 1/jak + vtbl.8 q2#hi, {$invlo}, q4#hi + veor q3, q3, q1 @ vpxor %xmm1, %xmm3, %xmm3 # 2 = io + veor q2, q2, q0 @ vpxor %xmm0, %xmm2, %xmm2 # 3 = jo + vtbl.8 q4#lo, {q15}, q3#lo @ vpshufb %xmm3, %xmm13, %xmm4 # 4 = sbou + vtbl.8 q4#hi, {q15}, q3#hi + vtbl.8 q1#lo, {q14}, q2#lo @ vpshufb %xmm2, %xmm12, %xmm1 # 0 = sb1t + vtbl.8 q1#hi, {q14}, q2#hi + veor q1, q1, q4 @ vpxor %xmm4, %xmm1, %xmm1 # 0 = sbox output + + @ add in smeared stuff + veor q0, q1, q7 @ vpxor %xmm7, %xmm1, %xmm0 + veor q7, q1, q7 @ vmovdqa %xmm0, %xmm7 + bx lr +.size _vpaes_schedule_round,.-_vpaes_schedule_round + +@@ +@@ .aes_schedule_transform +@@ +@@ Linear-transform q0 according to tables at [r11] +@@ +@@ Requires that q9 = 0x0F0F... as in preheat +@@ Output in q0 +@@ Clobbers q1, q2, q14, q15 +@@ +.type _vpaes_schedule_transform,%function +.align 4 +_vpaes_schedule_transform: + vld1.64 {q14,q15}, [r11] @ vmovdqa (%r11), %xmm2 # lo + @ vmovdqa 16(%r11), %xmm1 # hi + vand q1, q0, $s0F @ vpand %xmm9, %xmm0, %xmm1 + vshr.u8 q0, q0, #4 @ vpsrlb \$4, %xmm0, %xmm0 + vtbl.8 q2#lo, {q14}, q1#lo @ vpshufb %xmm1, %xmm2, %xmm2 + vtbl.8 q2#hi, {q14}, q1#hi + vtbl.8 q0#lo, {q15}, q0#lo @ vpshufb %xmm0, %xmm1, %xmm0 + vtbl.8 q0#hi, {q15}, q0#hi + veor q0, q0, q2 @ vpxor %xmm2, %xmm0, %xmm0 + bx lr +.size _vpaes_schedule_transform,.-_vpaes_schedule_transform + +@@ +@@ .aes_schedule_mangle +@@ +@@ Mangles q0 from (basis-transformed) standard version +@@ to our version. +@@ +@@ On encrypt, +@@ xor with 0x63 +@@ multiply by circulant 0,1,1,1 +@@ apply shiftrows transform +@@ +@@ On decrypt, +@@ xor with 0x63 +@@ multiply by "inverse mixcolumns" circulant E,B,D,9 +@@ deskew +@@ apply shiftrows transform +@@ +@@ +@@ Writes out to [r2], and increments or decrements it +@@ Keeps track of round number mod 4 in r8 +@@ Preserves q0 +@@ Clobbers q1-q5 +@@ +.type _vpaes_schedule_mangle,%function +.align 4 +_vpaes_schedule_mangle: + tst $dir, $dir + vmov q4, q0 @ vmovdqa %xmm0, %xmm4 # save xmm0 for later + adr r11, .Lk_mc_forward @ Must be aligned to 8 mod 16. + vld1.64 {q5}, [r11] @ vmovdqa .Lk_mc_forward(%rip),%xmm5 + + @ encrypting + @ Write to q2 so we do not overlap table and destination below. + veor q2, q0, $s63 @ vpxor .Lk_s63(%rip), %xmm0, %xmm4 + add $out, $out, #16 @ add \$16, %rdx + vtbl.8 q4#lo, {q2}, q5#lo @ vpshufb %xmm5, %xmm4, %xmm4 + vtbl.8 q4#hi, {q2}, q5#hi + vtbl.8 q1#lo, {q4}, q5#lo @ vpshufb %xmm5, %xmm4, %xmm1 + vtbl.8 q1#hi, {q4}, q5#hi + vtbl.8 q3#lo, {q1}, q5#lo @ vpshufb %xmm5, %xmm1, %xmm3 + vtbl.8 q3#hi, {q1}, q5#hi + veor q4, q4, q1 @ vpxor %xmm1, %xmm4, %xmm4 + vld1.64 {q1}, [r8] @ vmovdqa (%r8,%r10), %xmm1 + veor q3, q3, q4 @ vpxor %xmm4, %xmm3, %xmm3 + +.Lschedule_mangle_both: + @ Write to q2 so table and destination do not overlap. + vtbl.8 q2#lo, {q3}, q1#lo @ vpshufb %xmm1, %xmm3, %xmm3 + vtbl.8 q2#hi, {q3}, q1#hi + add r8, r8, #64-16 @ add \$-16, %r8 + and r8, r8, #~(1<<6) @ and \$0x30, %r8 + vst1.64 {q2}, [$out] @ vmovdqu %xmm3, (%rdx) + bx lr +.size _vpaes_schedule_mangle,.-_vpaes_schedule_mangle + +.globl GFp_vpaes_set_encrypt_key +.type GFp_vpaes_set_encrypt_key,%function +.align 4 +GFp_vpaes_set_encrypt_key: + stmdb sp!, {r7-r11, lr} + vstmdb sp!, {d8-d15} + + lsr r9, $bits, #5 @ shr \$5,%eax + add r9, r9, #5 @ \$5,%eax + str r9, [$out,#240] @ mov %eax,240(%rdx) # AES_KEY->rounds = nbits/32+5; + + mov $dir, #0 @ mov \$0,%ecx + mov r8, #0x30 @ mov \$0x30,%r8d + bl _vpaes_schedule_core + eor r0, r0, r0 + + vldmia sp!, {d8-d15} + ldmia sp!, {r7-r11, pc} @ return +.size GFp_vpaes_set_encrypt_key,.-GFp_vpaes_set_encrypt_key +___ +} + +{ +my ($out, $inp) = map("r$_", (0..1)); +my ($s0F, $s63, $s63_raw, $mc_forward) = map("q$_", (9..12)); + +$code .= <<___; + +@ Additional constants for converting to bsaes. +.type _vpaes_convert_consts,%object +.align 4 +_vpaes_convert_consts: +@ .Lk_opt_then_skew applies skew(opt(x)) XOR 0x63, where skew is the linear +@ transform in the AES S-box. 0x63 is incorporated into the low half of the +@ table. This was computed with the following script: +@ +@ def u64s_to_u128(x, y): +@ return x | (y << 64) +@ def u128_to_u64s(w): +@ return w & ((1<<64)-1), w >> 64 +@ def get_byte(w, i): +@ return (w >> (i*8)) & 0xff +@ def apply_table(table, b): +@ lo = b & 0xf +@ hi = b >> 4 +@ return get_byte(table[0], lo) ^ get_byte(table[1], hi) +@ def opt(b): +@ table = [ +@ u64s_to_u128(0xFF9F4929D6B66000, 0xF7974121DEBE6808), +@ u64s_to_u128(0x01EDBD5150BCEC00, 0xE10D5DB1B05C0CE0), +@ ] +@ return apply_table(table, b) +@ def rot_byte(b, n): +@ return 0xff & ((b << n) | (b >> (8-n))) +@ def skew(x): +@ return (x ^ rot_byte(x, 1) ^ rot_byte(x, 2) ^ rot_byte(x, 3) ^ +@ rot_byte(x, 4)) +@ table = [0, 0] +@ for i in range(16): +@ table[0] |= (skew(opt(i)) ^ 0x63) << (i*8) +@ table[1] |= skew(opt(i<<4)) << (i*8) +@ print("\t.quad\t0x%016x, 0x%016x" % u128_to_u64s(table[0])) +@ print("\t.quad\t0x%016x, 0x%016x" % u128_to_u64s(table[1])) +.Lk_opt_then_skew: + .quad 0x9cb8436798bc4763, 0x6440bb9f6044bf9b + .quad 0x1f30062936192f00, 0xb49bad829db284ab + +@ void GFp_vpaes_encrypt_key_to_bsaes(AES_KEY *bsaes, const AES_KEY *vpaes); +.globl GFp_vpaes_encrypt_key_to_bsaes +.type GFp_vpaes_encrypt_key_to_bsaes,%function +.align 4 +GFp_vpaes_encrypt_key_to_bsaes: + stmdb sp!, {r11, lr} + + @ See _vpaes_schedule_core for the key schedule logic. In particular, + @ _vpaes_schedule_transform(.Lk_ipt) (section 2.2 of the paper), + @ _vpaes_schedule_mangle (section 4.3), and .Lschedule_mangle_last + @ contain the transformations not in the bsaes representation. This + @ function inverts those transforms. + @ + @ Note also that bsaes-armv7.pl expects aes-armv4.pl's key + @ representation, which does not match the other aes_nohw_* + @ implementations. The ARM aes_nohw_* stores each 32-bit word + @ byteswapped, as a convenience for (unsupported) big-endian ARM, at the + @ cost of extra REV and VREV32 operations in little-endian ARM. + + vmov.i8 $s0F, #0x0f @ Required by _vpaes_schedule_transform + adr r2, .Lk_mc_forward @ Must be aligned to 8 mod 16. + add r3, r2, 0x90 @ .Lk_sr+0x10-.Lk_mc_forward = 0x90 (Apple's toolchain doesn't support the expression) + + vld1.64 {$mc_forward}, [r2] + vmov.i8 $s63, #0x5b @ .Lk_s63 from vpaes-x86_64 + adr r11, .Lk_opt @ Must be aligned to 8 mod 16. + vmov.i8 $s63_raw, #0x63 @ .LK_s63 without .Lk_ipt applied + + @ vpaes stores one fewer round count than bsaes, but the number of keys + @ is the same. + ldr r2, [$inp,#240] + add r2, r2, #1 + str r2, [$out,#240] + + @ The first key is transformed with _vpaes_schedule_transform(.Lk_ipt). + @ Invert this with .Lk_opt. + vld1.64 {q0}, [$inp]! + bl _vpaes_schedule_transform + vrev32.8 q0, q0 + vst1.64 {q0}, [$out]! + + @ The middle keys have _vpaes_schedule_transform(.Lk_ipt) applied, + @ followed by _vpaes_schedule_mangle. _vpaes_schedule_mangle XORs 0x63, + @ multiplies by the circulant 0,1,1,1, then applies ShiftRows. +.Loop_enc_key_to_bsaes: + vld1.64 {q0}, [$inp]! + + @ Invert the ShiftRows step (see .Lschedule_mangle_both). Note we cycle + @ r3 in the opposite direction and start at .Lk_sr+0x10 instead of 0x30. + @ We use r3 rather than r8 to avoid a callee-saved register. + vld1.64 {q1}, [r3] + vtbl.8 q2#lo, {q0}, q1#lo + vtbl.8 q2#hi, {q0}, q1#hi + add r3, r3, #16 + and r3, r3, #~(1<<6) + vmov q0, q2 + + @ Handle the last key differently. + subs r2, r2, #1 + beq .Loop_enc_key_to_bsaes_last + + @ Multiply by the circulant. This is its own inverse. + vtbl.8 q1#lo, {q0}, $mc_forward#lo + vtbl.8 q1#hi, {q0}, $mc_forward#hi + vmov q0, q1 + vtbl.8 q2#lo, {q1}, $mc_forward#lo + vtbl.8 q2#hi, {q1}, $mc_forward#hi + veor q0, q0, q2 + vtbl.8 q1#lo, {q2}, $mc_forward#lo + vtbl.8 q1#hi, {q2}, $mc_forward#hi + veor q0, q0, q1 + + @ XOR and finish. + veor q0, q0, $s63 + bl _vpaes_schedule_transform + vrev32.8 q0, q0 + vst1.64 {q0}, [$out]! + b .Loop_enc_key_to_bsaes + +.Loop_enc_key_to_bsaes_last: + @ The final key does not have a basis transform (note + @ .Lschedule_mangle_last inverts the original transform). It only XORs + @ 0x63 and applies ShiftRows. The latter was already inverted in the + @ loop. Note that, because we act on the original representation, we use + @ $s63_raw, not $s63. + veor q0, q0, $s63_raw + vrev32.8 q0, q0 + vst1.64 {q0}, [$out] + + @ Wipe registers which contained key material. + veor q0, q0, q0 + veor q1, q1, q1 + veor q2, q2, q2 + + ldmia sp!, {r11, pc} @ return +.size GFp_vpaes_encrypt_key_to_bsaes,.-GFp_vpaes_encrypt_key_to_bsaes +___ +} + +{ +# Register-passed parameters. +my ($inp, $out, $len, $key) = map("r$_", 0..3); +# Temporaries. _vpaes_encrypt_core already uses r8..r11, so overlap $ivec and +# $tmp. $ctr is r7 because it must be preserved across calls. +my ($ctr, $ivec, $tmp) = map("r$_", 7..9); + +# void vpaes_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, size_t len, +# const AES_KEY *key, const uint8_t ivec[16]); +$code .= <<___; +.globl GFp_vpaes_ctr32_encrypt_blocks +.type GFp_vpaes_ctr32_encrypt_blocks,%function +.align 4 +GFp_vpaes_ctr32_encrypt_blocks: + mov ip, sp + stmdb sp!, {r7-r11, lr} + @ This function uses q4-q7 (d8-d15), which are callee-saved. + vstmdb sp!, {d8-d15} + + cmp $len, #0 + @ $ivec is passed on the stack. + ldr $ivec, [ip] + beq .Lctr32_done + + @ _vpaes_encrypt_core expects the key in r2, so swap $len and $key. + mov $tmp, $key + mov $key, $len + mov $len, $tmp +___ +my ($len, $key) = ($key, $len); +$code .= <<___; + + @ Load the IV and counter portion. + ldr $ctr, [$ivec, #12] + vld1.8 {q7}, [$ivec] + + bl _vpaes_preheat + rev $ctr, $ctr @ The counter is big-endian. + +.Lctr32_loop: + vmov q0, q7 + vld1.8 {q6}, [$inp]! @ Load input ahead of time + bl _vpaes_encrypt_core + veor q0, q0, q6 @ XOR input and result + vst1.8 {q0}, [$out]! + subs $len, $len, #1 + @ Update the counter. + add $ctr, $ctr, #1 + rev $tmp, $ctr + vmov.32 q7#hi[1], $tmp + bne .Lctr32_loop + +.Lctr32_done: + vldmia sp!, {d8-d15} + ldmia sp!, {r7-r11, pc} @ return +.size GFp_vpaes_ctr32_encrypt_blocks,.-GFp_vpaes_ctr32_encrypt_blocks +___ +} + +foreach (split("\n",$code)) { + s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/geo; + print $_,"\n"; +} + +close STDOUT; diff --git a/vendor/ring/crypto/fipsmodule/aes/asm/vpaes-armv8.pl b/vendor/ring/crypto/fipsmodule/aes/asm/vpaes-armv8.pl new file mode 100755 index 00000000..e70dfa0f --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/aes/asm/vpaes-armv8.pl @@ -0,0 +1,837 @@ +#! /usr/bin/env perl +# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +###################################################################### +## Constant-time SSSE3 AES core implementation. +## version 0.1 +## +## By Mike Hamburg (Stanford University), 2009 +## Public domain. +## +## For details see http://shiftleft.org/papers/vector_aes/ and +## http://crypto.stanford.edu/vpaes/. +## +###################################################################### +# ARMv8 NEON adaptation by +# +# Reason for undertaken effort is that there is at least one popular +# SoC based on Cortex-A53 that doesn't have crypto extensions. +# +# CBC enc ECB enc/dec(*) [bit-sliced enc/dec] +# Cortex-A53 21.5 18.1/20.6 [17.5/19.8 ] +# Cortex-A57 36.0(**) 20.4/24.9(**) [14.4/16.6 ] +# X-Gene 45.9(**) 45.8/57.7(**) [33.1/37.6(**) ] +# Denver(***) 16.6(**) 15.1/17.8(**) [8.80/9.93 ] +# Apple A7(***) 22.7(**) 10.9/14.3 [8.45/10.0 ] +# Mongoose(***) 26.3(**) 21.0/25.0(**) [13.3/16.8 ] +# +# (*) ECB denotes approximate result for parallelizable modes +# such as CBC decrypt, CTR, etc.; +# (**) these results are worse than scalar compiler-generated +# code, but it's constant-time and therefore preferred; +# (***) presented for reference/comparison purposes; + +$flavour = shift; +while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or +die "can't locate arm-xlate.pl"; + +open OUT,"| \"$^X\" $xlate $flavour $output"; +*STDOUT=*OUT; + +$code.=<<___; +#include + +.section .rodata + +.type _vpaes_consts,%object +.align 7 // totally strategic alignment +_vpaes_consts: +.Lk_mc_forward: // mc_forward + .quad 0x0407060500030201, 0x0C0F0E0D080B0A09 + .quad 0x080B0A0904070605, 0x000302010C0F0E0D + .quad 0x0C0F0E0D080B0A09, 0x0407060500030201 + .quad 0x000302010C0F0E0D, 0x080B0A0904070605 +.Lk_mc_backward:// mc_backward + .quad 0x0605040702010003, 0x0E0D0C0F0A09080B + .quad 0x020100030E0D0C0F, 0x0A09080B06050407 + .quad 0x0E0D0C0F0A09080B, 0x0605040702010003 + .quad 0x0A09080B06050407, 0x020100030E0D0C0F +.Lk_sr: // sr + .quad 0x0706050403020100, 0x0F0E0D0C0B0A0908 + .quad 0x030E09040F0A0500, 0x0B06010C07020D08 + .quad 0x0F060D040B020900, 0x070E050C030A0108 + .quad 0x0B0E0104070A0D00, 0x0306090C0F020508 + +// +// "Hot" constants +// +.Lk_inv: // inv, inva + .quad 0x0E05060F0D080180, 0x040703090A0B0C02 + .quad 0x01040A060F0B0780, 0x030D0E0C02050809 +.Lk_ipt: // input transform (lo, hi) + .quad 0xC2B2E8985A2A7000, 0xCABAE09052227808 + .quad 0x4C01307D317C4D00, 0xCD80B1FCB0FDCC81 +.Lk_sbo: // sbou, sbot + .quad 0xD0D26D176FBDC700, 0x15AABF7AC502A878 + .quad 0xCFE474A55FBB6A00, 0x8E1E90D1412B35FA +.Lk_sb1: // sb1u, sb1t + .quad 0x3618D415FAE22300, 0x3BF7CCC10D2ED9EF + .quad 0xB19BE18FCB503E00, 0xA5DF7A6E142AF544 +.Lk_sb2: // sb2u, sb2t + .quad 0x69EB88400AE12900, 0xC2A163C8AB82234A + .quad 0xE27A93C60B712400, 0x5EB7E955BC982FCD + +// +// Key schedule constants +// +.Lk_dksd: // decryption key schedule: invskew x*D + .quad 0xFEB91A5DA3E44700, 0x0740E3A45A1DBEF9 + .quad 0x41C277F4B5368300, 0x5FDC69EAAB289D1E +.Lk_dksb: // decryption key schedule: invskew x*B + .quad 0x9A4FCA1F8550D500, 0x03D653861CC94C99 + .quad 0x115BEDA7B6FC4A00, 0xD993256F7E3482C8 +.Lk_dkse: // decryption key schedule: invskew x*E + 0x63 + .quad 0xD5031CCA1FC9D600, 0x53859A4C994F5086 + .quad 0xA23196054FDC7BE8, 0xCD5EF96A20B31487 +.Lk_dks9: // decryption key schedule: invskew x*9 + .quad 0xB6116FC87ED9A700, 0x4AED933482255BFC + .quad 0x4576516227143300, 0x8BB89FACE9DAFDCE + +.Lk_rcon: // rcon + .quad 0x1F8391B9AF9DEEB6, 0x702A98084D7C7D81 + +.Lk_opt: // output transform + .quad 0xFF9F4929D6B66000, 0xF7974121DEBE6808 + .quad 0x01EDBD5150BCEC00, 0xE10D5DB1B05C0CE0 +.Lk_deskew: // deskew tables: inverts the sbox's "skew" + .quad 0x07E4A34047A4E300, 0x1DFEB95A5DBEF91A + .quad 0x5F36B5DC83EA6900, 0x2841C2ABF49D1E77 + +.asciz "Vector Permutation AES for ARMv8, Mike Hamburg (Stanford University)" +.size _vpaes_consts,.-_vpaes_consts +.align 6 + +.text +___ + +{ +my ($inp,$out,$key) = map("x$_",(0..2)); + +my ($invlo,$invhi,$iptlo,$ipthi,$sbou,$sbot) = map("v$_.16b",(18..23)); +my ($sb1u,$sb1t,$sb2u,$sb2t) = map("v$_.16b",(24..27)); +my ($sb9u,$sb9t,$sbdu,$sbdt,$sbbu,$sbbt,$sbeu,$sbet)=map("v$_.16b",(24..31)); + +$code.=<<___; +## +## _aes_preheat +## +## Fills register %r10 -> .aes_consts (so you can -fPIC) +## and %xmm9-%xmm15 as specified below. +## +.type _vpaes_encrypt_preheat,%function +.align 4 +_vpaes_encrypt_preheat: + adrp x10, :pg_hi21:.Lk_inv + add x10, x10, :lo12:.Lk_inv + movi v17.16b, #0x0f + ld1 {v18.2d-v19.2d}, [x10],#32 // .Lk_inv + ld1 {v20.2d-v23.2d}, [x10],#64 // .Lk_ipt, .Lk_sbo + ld1 {v24.2d-v27.2d}, [x10] // .Lk_sb1, .Lk_sb2 + ret +.size _vpaes_encrypt_preheat,.-_vpaes_encrypt_preheat + +## +## _aes_encrypt_core +## +## AES-encrypt %xmm0. +## +## Inputs: +## %xmm0 = input +## %xmm9-%xmm15 as in _vpaes_preheat +## (%rdx) = scheduled keys +## +## Output in %xmm0 +## Clobbers %xmm1-%xmm5, %r9, %r10, %r11, %rax +## Preserves %xmm6 - %xmm8 so you get some local vectors +## +## +.type _vpaes_encrypt_core,%function +.align 4 +_vpaes_encrypt_core: + mov x9, $key + ldr w8, [$key,#240] // pull rounds + adrp x11, :pg_hi21:.Lk_mc_forward+16 + add x11, x11, :lo12:.Lk_mc_forward+16 + // vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo + ld1 {v16.2d}, [x9], #16 // vmovdqu (%r9), %xmm5 # round0 key + and v1.16b, v7.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 + ushr v0.16b, v7.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 + tbl v1.16b, {$iptlo}, v1.16b // vpshufb %xmm1, %xmm2, %xmm1 + // vmovdqa .Lk_ipt+16(%rip), %xmm3 # ipthi + tbl v2.16b, {$ipthi}, v0.16b // vpshufb %xmm0, %xmm3, %xmm2 + eor v0.16b, v1.16b, v16.16b // vpxor %xmm5, %xmm1, %xmm0 + eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0 + b .Lenc_entry + +.align 4 +.Lenc_loop: + // middle of middle round + add x10, x11, #0x40 + tbl v4.16b, {$sb1t}, v2.16b // vpshufb %xmm2, %xmm13, %xmm4 # 4 = sb1u + ld1 {v1.2d}, [x11], #16 // vmovdqa -0x40(%r11,%r10), %xmm1 # .Lk_mc_forward[] + tbl v0.16b, {$sb1u}, v3.16b // vpshufb %xmm3, %xmm12, %xmm0 # 0 = sb1t + eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k + tbl v5.16b, {$sb2t}, v2.16b // vpshufb %xmm2, %xmm15, %xmm5 # 4 = sb2u + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A + tbl v2.16b, {$sb2u}, v3.16b // vpshufb %xmm3, %xmm14, %xmm2 # 2 = sb2t + ld1 {v4.2d}, [x10] // vmovdqa (%r11,%r10), %xmm4 # .Lk_mc_backward[] + tbl v3.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm3 # 0 = B + eor v2.16b, v2.16b, v5.16b // vpxor %xmm5, %xmm2, %xmm2 # 2 = 2A + tbl v0.16b, {v0.16b}, v4.16b // vpshufb %xmm4, %xmm0, %xmm0 # 3 = D + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 0 = 2A+B + tbl v4.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm4 # 0 = 2B+C + eor v0.16b, v0.16b, v3.16b // vpxor %xmm3, %xmm0, %xmm0 # 3 = 2A+B+D + and x11, x11, #~(1<<6) // and \$0x30, %r11 # ... mod 4 + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = 2A+3B+C+D + sub w8, w8, #1 // nr-- + +.Lenc_entry: + // top of round + and v1.16b, v0.16b, v17.16b // vpand %xmm0, %xmm9, %xmm1 # 0 = k + ushr v0.16b, v0.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 # 1 = i + tbl v5.16b, {$invhi}, v1.16b // vpshufb %xmm1, %xmm11, %xmm5 # 2 = a/k + eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j + tbl v3.16b, {$invlo}, v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i + tbl v4.16b, {$invlo}, v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j + eor v3.16b, v3.16b, v5.16b // vpxor %xmm5, %xmm3, %xmm3 # 3 = iak = 1/i + a/k + eor v4.16b, v4.16b, v5.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = jak = 1/j + a/k + tbl v2.16b, {$invlo}, v3.16b // vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak + tbl v3.16b, {$invlo}, v4.16b // vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak + eor v2.16b, v2.16b, v1.16b // vpxor %xmm1, %xmm2, %xmm2 # 2 = io + eor v3.16b, v3.16b, v0.16b // vpxor %xmm0, %xmm3, %xmm3 # 3 = jo + ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm5 + cbnz w8, .Lenc_loop + + // middle of last round + add x10, x11, #0x80 + // vmovdqa -0x60(%r10), %xmm4 # 3 : sbou .Lk_sbo + // vmovdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16 + tbl v4.16b, {$sbou}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou + ld1 {v1.2d}, [x10] // vmovdqa 0x40(%r11,%r10), %xmm1 # .Lk_sr[] + tbl v0.16b, {$sbot}, v3.16b // vpshufb %xmm3, %xmm0, %xmm0 # 0 = sb1t + eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A + tbl v0.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm0 + ret +.size _vpaes_encrypt_core,.-_vpaes_encrypt_core + +.globl GFp_vpaes_encrypt +.type GFp_vpaes_encrypt,%function +.align 4 +GFp_vpaes_encrypt: + AARCH64_SIGN_LINK_REGISTER + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ld1 {v7.16b}, [$inp] + bl _vpaes_encrypt_preheat + bl _vpaes_encrypt_core + st1 {v0.16b}, [$out] + + ldp x29,x30,[sp],#16 + AARCH64_VALIDATE_LINK_REGISTER + ret +.size GFp_vpaes_encrypt,.-GFp_vpaes_encrypt + +.type _vpaes_encrypt_2x,%function +.align 4 +_vpaes_encrypt_2x: + mov x9, $key + ldr w8, [$key,#240] // pull rounds + adrp x11, :pg_hi21:.Lk_mc_forward+16 + add x11, x11, :lo12:.Lk_mc_forward+16 + // vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo + ld1 {v16.2d}, [x9], #16 // vmovdqu (%r9), %xmm5 # round0 key + and v1.16b, v14.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 + ushr v0.16b, v14.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 + and v9.16b, v15.16b, v17.16b + ushr v8.16b, v15.16b, #4 + tbl v1.16b, {$iptlo}, v1.16b // vpshufb %xmm1, %xmm2, %xmm1 + tbl v9.16b, {$iptlo}, v9.16b + // vmovdqa .Lk_ipt+16(%rip), %xmm3 # ipthi + tbl v2.16b, {$ipthi}, v0.16b // vpshufb %xmm0, %xmm3, %xmm2 + tbl v10.16b, {$ipthi}, v8.16b + eor v0.16b, v1.16b, v16.16b // vpxor %xmm5, %xmm1, %xmm0 + eor v8.16b, v9.16b, v16.16b + eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0 + eor v8.16b, v8.16b, v10.16b + b .Lenc_2x_entry + +.align 4 +.Lenc_2x_loop: + // middle of middle round + add x10, x11, #0x40 + tbl v4.16b, {$sb1t}, v2.16b // vpshufb %xmm2, %xmm13, %xmm4 # 4 = sb1u + tbl v12.16b, {$sb1t}, v10.16b + ld1 {v1.2d}, [x11], #16 // vmovdqa -0x40(%r11,%r10), %xmm1 # .Lk_mc_forward[] + tbl v0.16b, {$sb1u}, v3.16b // vpshufb %xmm3, %xmm12, %xmm0 # 0 = sb1t + tbl v8.16b, {$sb1u}, v11.16b + eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k + eor v12.16b, v12.16b, v16.16b + tbl v5.16b, {$sb2t}, v2.16b // vpshufb %xmm2, %xmm15, %xmm5 # 4 = sb2u + tbl v13.16b, {$sb2t}, v10.16b + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A + eor v8.16b, v8.16b, v12.16b + tbl v2.16b, {$sb2u}, v3.16b // vpshufb %xmm3, %xmm14, %xmm2 # 2 = sb2t + tbl v10.16b, {$sb2u}, v11.16b + ld1 {v4.2d}, [x10] // vmovdqa (%r11,%r10), %xmm4 # .Lk_mc_backward[] + tbl v3.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm3 # 0 = B + tbl v11.16b, {v8.16b}, v1.16b + eor v2.16b, v2.16b, v5.16b // vpxor %xmm5, %xmm2, %xmm2 # 2 = 2A + eor v10.16b, v10.16b, v13.16b + tbl v0.16b, {v0.16b}, v4.16b // vpshufb %xmm4, %xmm0, %xmm0 # 3 = D + tbl v8.16b, {v8.16b}, v4.16b + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 0 = 2A+B + eor v11.16b, v11.16b, v10.16b + tbl v4.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm4 # 0 = 2B+C + tbl v12.16b, {v11.16b},v1.16b + eor v0.16b, v0.16b, v3.16b // vpxor %xmm3, %xmm0, %xmm0 # 3 = 2A+B+D + eor v8.16b, v8.16b, v11.16b + and x11, x11, #~(1<<6) // and \$0x30, %r11 # ... mod 4 + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = 2A+3B+C+D + eor v8.16b, v8.16b, v12.16b + sub w8, w8, #1 // nr-- + +.Lenc_2x_entry: + // top of round + and v1.16b, v0.16b, v17.16b // vpand %xmm0, %xmm9, %xmm1 # 0 = k + ushr v0.16b, v0.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 # 1 = i + and v9.16b, v8.16b, v17.16b + ushr v8.16b, v8.16b, #4 + tbl v5.16b, {$invhi},v1.16b // vpshufb %xmm1, %xmm11, %xmm5 # 2 = a/k + tbl v13.16b, {$invhi},v9.16b + eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j + eor v9.16b, v9.16b, v8.16b + tbl v3.16b, {$invlo},v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i + tbl v11.16b, {$invlo},v8.16b + tbl v4.16b, {$invlo},v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j + tbl v12.16b, {$invlo},v9.16b + eor v3.16b, v3.16b, v5.16b // vpxor %xmm5, %xmm3, %xmm3 # 3 = iak = 1/i + a/k + eor v11.16b, v11.16b, v13.16b + eor v4.16b, v4.16b, v5.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = jak = 1/j + a/k + eor v12.16b, v12.16b, v13.16b + tbl v2.16b, {$invlo},v3.16b // vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak + tbl v10.16b, {$invlo},v11.16b + tbl v3.16b, {$invlo},v4.16b // vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak + tbl v11.16b, {$invlo},v12.16b + eor v2.16b, v2.16b, v1.16b // vpxor %xmm1, %xmm2, %xmm2 # 2 = io + eor v10.16b, v10.16b, v9.16b + eor v3.16b, v3.16b, v0.16b // vpxor %xmm0, %xmm3, %xmm3 # 3 = jo + eor v11.16b, v11.16b, v8.16b + ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm5 + cbnz w8, .Lenc_2x_loop + + // middle of last round + add x10, x11, #0x80 + // vmovdqa -0x60(%r10), %xmm4 # 3 : sbou .Lk_sbo + // vmovdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16 + tbl v4.16b, {$sbou}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou + tbl v12.16b, {$sbou}, v10.16b + ld1 {v1.2d}, [x10] // vmovdqa 0x40(%r11,%r10), %xmm1 # .Lk_sr[] + tbl v0.16b, {$sbot}, v3.16b // vpshufb %xmm3, %xmm0, %xmm0 # 0 = sb1t + tbl v8.16b, {$sbot}, v11.16b + eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k + eor v12.16b, v12.16b, v16.16b + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A + eor v8.16b, v8.16b, v12.16b + tbl v0.16b, {v0.16b},v1.16b // vpshufb %xmm1, %xmm0, %xmm0 + tbl v1.16b, {v8.16b},v1.16b + ret +.size _vpaes_encrypt_2x,.-_vpaes_encrypt_2x +___ +} +{ +my ($inp,$bits,$out,$dir)=("x0","w1","x2","w3"); +my ($invlo,$invhi,$iptlo,$ipthi,$rcon) = map("v$_.16b",(18..21,8)); + +$code.=<<___; +######################################################## +## ## +## AES key schedule ## +## ## +######################################################## +.type _vpaes_key_preheat,%function +.align 4 +_vpaes_key_preheat: + adrp x10, :pg_hi21:.Lk_inv + add x10, x10, :lo12:.Lk_inv + movi v16.16b, #0x5b // .Lk_s63 + adrp x11, :pg_hi21:.Lk_sb1 + add x11, x11, :lo12:.Lk_sb1 + movi v17.16b, #0x0f // .Lk_s0F + ld1 {v18.2d-v21.2d}, [x10] // .Lk_inv, .Lk_ipt + adrp x10, :pg_hi21:.Lk_dksd + add x10, x10, :lo12:.Lk_dksd + ld1 {v22.2d-v23.2d}, [x11] // .Lk_sb1 + adrp x11, :pg_hi21:.Lk_mc_forward + add x11, x11, :lo12:.Lk_mc_forward + ld1 {v24.2d-v27.2d}, [x10],#64 // .Lk_dksd, .Lk_dksb + ld1 {v28.2d-v31.2d}, [x10],#64 // .Lk_dkse, .Lk_dks9 + ld1 {v8.2d}, [x10] // .Lk_rcon + ld1 {v9.2d}, [x11] // .Lk_mc_forward[0] + ret +.size _vpaes_key_preheat,.-_vpaes_key_preheat + +.type _vpaes_schedule_core,%function +.align 4 +_vpaes_schedule_core: + AARCH64_SIGN_LINK_REGISTER + stp x29, x30, [sp,#-16]! + add x29,sp,#0 + + bl _vpaes_key_preheat // load the tables + + ld1 {v0.16b}, [$inp],#16 // vmovdqu (%rdi), %xmm0 # load key (unaligned) + + // input transform + mov v3.16b, v0.16b // vmovdqa %xmm0, %xmm3 + bl _vpaes_schedule_transform + mov v7.16b, v0.16b // vmovdqa %xmm0, %xmm7 + + adrp x10, :pg_hi21:.Lk_sr // lea .Lk_sr(%rip),%r10 + add x10, x10, :lo12:.Lk_sr + + add x8, x8, x10 + + // encrypting, output zeroth round key after transform + st1 {v0.2d}, [$out] // vmovdqu %xmm0, (%rdx) + + cmp $bits, #192 // cmp \$192, %esi + b.hi .Lschedule_256 + b.eq .Lschedule_192 + // 128: fall though + +## +## .schedule_128 +## +## 128-bit specific part of key schedule. +## +## This schedule is really simple, because all its parts +## are accomplished by the subroutines. +## +.Lschedule_128: + mov $inp, #10 // mov \$10, %esi + +.Loop_schedule_128: + sub $inp, $inp, #1 // dec %esi + bl _vpaes_schedule_round + cbz $inp, .Lschedule_mangle_last + bl _vpaes_schedule_mangle // write output + b .Loop_schedule_128 + +## +## .aes_schedule_192 +## +## 192-bit specific part of key schedule. +## +## The main body of this schedule is the same as the 128-bit +## schedule, but with more smearing. The long, high side is +## stored in %xmm7 as before, and the short, low side is in +## the high bits of %xmm6. +## +## This schedule is somewhat nastier, however, because each +## round produces 192 bits of key material, or 1.5 round keys. +## Therefore, on each cycle we do 2 rounds and produce 3 round +## keys. +## +.align 4 +.Lschedule_192: + sub $inp, $inp, #8 + ld1 {v0.16b}, [$inp] // vmovdqu 8(%rdi),%xmm0 # load key part 2 (very unaligned) + bl _vpaes_schedule_transform // input transform + mov v6.16b, v0.16b // vmovdqa %xmm0, %xmm6 # save short part + eor v4.16b, v4.16b, v4.16b // vpxor %xmm4, %xmm4, %xmm4 # clear 4 + ins v6.d[0], v4.d[0] // vmovhlps %xmm4, %xmm6, %xmm6 # clobber low side with zeros + mov $inp, #4 // mov \$4, %esi + +.Loop_schedule_192: + sub $inp, $inp, #1 // dec %esi + bl _vpaes_schedule_round + ext v0.16b, v6.16b, v0.16b, #8 // vpalignr \$8,%xmm6,%xmm0,%xmm0 + bl _vpaes_schedule_mangle // save key n + bl _vpaes_schedule_192_smear + bl _vpaes_schedule_mangle // save key n+1 + bl _vpaes_schedule_round + cbz $inp, .Lschedule_mangle_last + bl _vpaes_schedule_mangle // save key n+2 + bl _vpaes_schedule_192_smear + b .Loop_schedule_192 + +## +## .aes_schedule_256 +## +## 256-bit specific part of key schedule. +## +## The structure here is very similar to the 128-bit +## schedule, but with an additional "low side" in +## %xmm6. The low side's rounds are the same as the +## high side's, except no rcon and no rotation. +## +.align 4 +.Lschedule_256: + ld1 {v0.16b}, [$inp] // vmovdqu 16(%rdi),%xmm0 # load key part 2 (unaligned) + bl _vpaes_schedule_transform // input transform + mov $inp, #7 // mov \$7, %esi + +.Loop_schedule_256: + sub $inp, $inp, #1 // dec %esi + bl _vpaes_schedule_mangle // output low result + mov v6.16b, v0.16b // vmovdqa %xmm0, %xmm6 # save cur_lo in xmm6 + + // high round + bl _vpaes_schedule_round + cbz $inp, .Lschedule_mangle_last + bl _vpaes_schedule_mangle + + // low round. swap xmm7 and xmm6 + dup v0.4s, v0.s[3] // vpshufd \$0xFF, %xmm0, %xmm0 + movi v4.16b, #0 + mov v5.16b, v7.16b // vmovdqa %xmm7, %xmm5 + mov v7.16b, v6.16b // vmovdqa %xmm6, %xmm7 + bl _vpaes_schedule_low_round + mov v7.16b, v5.16b // vmovdqa %xmm5, %xmm7 + + b .Loop_schedule_256 + +## +## .aes_schedule_mangle_last +## +## Mangler for last round of key schedule +## Mangles %xmm0 +## when encrypting, outputs out(%xmm0) ^ 63 +## when decrypting, outputs unskew(%xmm0) +## +## Always called right before return... jumps to cleanup and exits +## +.align 4 +.Lschedule_mangle_last: + // schedule last round key from xmm0 + adrp x11, :pg_hi21:.Lk_deskew // lea .Lk_deskew(%rip),%r11 # prepare to deskew + add x11, x11, :lo12:.Lk_deskew + + cbnz $dir, .Lschedule_mangle_last_dec + + // encrypting + ld1 {v1.2d}, [x8] // vmovdqa (%r8,%r10),%xmm1 + adrp x11, :pg_hi21:.Lk_opt // lea .Lk_opt(%rip), %r11 # prepare to output transform + add x11, x11, :lo12:.Lk_opt + add $out, $out, #32 // add \$32, %rdx + tbl v0.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm0 # output permute + +.Lschedule_mangle_last_dec: + ld1 {v20.2d-v21.2d}, [x11] // reload constants + sub $out, $out, #16 // add \$-16, %rdx + eor v0.16b, v0.16b, v16.16b // vpxor .Lk_s63(%rip), %xmm0, %xmm0 + bl _vpaes_schedule_transform // output transform + st1 {v0.2d}, [$out] // vmovdqu %xmm0, (%rdx) # save last key + + // cleanup + eor v0.16b, v0.16b, v0.16b // vpxor %xmm0, %xmm0, %xmm0 + eor v1.16b, v1.16b, v1.16b // vpxor %xmm1, %xmm1, %xmm1 + eor v2.16b, v2.16b, v2.16b // vpxor %xmm2, %xmm2, %xmm2 + eor v3.16b, v3.16b, v3.16b // vpxor %xmm3, %xmm3, %xmm3 + eor v4.16b, v4.16b, v4.16b // vpxor %xmm4, %xmm4, %xmm4 + eor v5.16b, v5.16b, v5.16b // vpxor %xmm5, %xmm5, %xmm5 + eor v6.16b, v6.16b, v6.16b // vpxor %xmm6, %xmm6, %xmm6 + eor v7.16b, v7.16b, v7.16b // vpxor %xmm7, %xmm7, %xmm7 + ldp x29, x30, [sp],#16 + AARCH64_VALIDATE_LINK_REGISTER + ret +.size _vpaes_schedule_core,.-_vpaes_schedule_core + +## +## .aes_schedule_192_smear +## +## Smear the short, low side in the 192-bit key schedule. +## +## Inputs: +## %xmm7: high side, b a x y +## %xmm6: low side, d c 0 0 +## %xmm13: 0 +## +## Outputs: +## %xmm6: b+c+d b+c 0 0 +## %xmm0: b+c+d b+c b a +## +.type _vpaes_schedule_192_smear,%function +.align 4 +_vpaes_schedule_192_smear: + movi v1.16b, #0 + dup v0.4s, v7.s[3] + ins v1.s[3], v6.s[2] // vpshufd \$0x80, %xmm6, %xmm1 # d c 0 0 -> c 0 0 0 + ins v0.s[0], v7.s[2] // vpshufd \$0xFE, %xmm7, %xmm0 # b a _ _ -> b b b a + eor v6.16b, v6.16b, v1.16b // vpxor %xmm1, %xmm6, %xmm6 # -> c+d c 0 0 + eor v1.16b, v1.16b, v1.16b // vpxor %xmm1, %xmm1, %xmm1 + eor v6.16b, v6.16b, v0.16b // vpxor %xmm0, %xmm6, %xmm6 # -> b+c+d b+c b a + mov v0.16b, v6.16b // vmovdqa %xmm6, %xmm0 + ins v6.d[0], v1.d[0] // vmovhlps %xmm1, %xmm6, %xmm6 # clobber low side with zeros + ret +.size _vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear + +## +## .aes_schedule_round +## +## Runs one main round of the key schedule on %xmm0, %xmm7 +## +## Specifically, runs subbytes on the high dword of %xmm0 +## then rotates it by one byte and xors into the low dword of +## %xmm7. +## +## Adds rcon from low byte of %xmm8, then rotates %xmm8 for +## next rcon. +## +## Smears the dwords of %xmm7 by xoring the low into the +## second low, result into third, result into highest. +## +## Returns results in %xmm7 = %xmm0. +## Clobbers %xmm1-%xmm4, %r11. +## +.type _vpaes_schedule_round,%function +.align 4 +_vpaes_schedule_round: + // extract rcon from xmm8 + movi v4.16b, #0 // vpxor %xmm4, %xmm4, %xmm4 + ext v1.16b, $rcon, v4.16b, #15 // vpalignr \$15, %xmm8, %xmm4, %xmm1 + ext $rcon, $rcon, $rcon, #15 // vpalignr \$15, %xmm8, %xmm8, %xmm8 + eor v7.16b, v7.16b, v1.16b // vpxor %xmm1, %xmm7, %xmm7 + + // rotate + dup v0.4s, v0.s[3] // vpshufd \$0xFF, %xmm0, %xmm0 + ext v0.16b, v0.16b, v0.16b, #1 // vpalignr \$1, %xmm0, %xmm0, %xmm0 + + // fall through... + + // low round: same as high round, but no rotation and no rcon. +_vpaes_schedule_low_round: + // smear xmm7 + ext v1.16b, v4.16b, v7.16b, #12 // vpslldq \$4, %xmm7, %xmm1 + eor v7.16b, v7.16b, v1.16b // vpxor %xmm1, %xmm7, %xmm7 + ext v4.16b, v4.16b, v7.16b, #8 // vpslldq \$8, %xmm7, %xmm4 + + // subbytes + and v1.16b, v0.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 # 0 = k + ushr v0.16b, v0.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 # 1 = i + eor v7.16b, v7.16b, v4.16b // vpxor %xmm4, %xmm7, %xmm7 + tbl v2.16b, {$invhi}, v1.16b // vpshufb %xmm1, %xmm11, %xmm2 # 2 = a/k + eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j + tbl v3.16b, {$invlo}, v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 3 = iak = 1/i + a/k + tbl v4.16b, {$invlo}, v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j + eor v7.16b, v7.16b, v16.16b // vpxor .Lk_s63(%rip), %xmm7, %xmm7 + tbl v3.16b, {$invlo}, v3.16b // vpshufb %xmm3, %xmm10, %xmm3 # 2 = 1/iak + eor v4.16b, v4.16b, v2.16b // vpxor %xmm2, %xmm4, %xmm4 # 4 = jak = 1/j + a/k + tbl v2.16b, {$invlo}, v4.16b // vpshufb %xmm4, %xmm10, %xmm2 # 3 = 1/jak + eor v3.16b, v3.16b, v1.16b // vpxor %xmm1, %xmm3, %xmm3 # 2 = io + eor v2.16b, v2.16b, v0.16b // vpxor %xmm0, %xmm2, %xmm2 # 3 = jo + tbl v4.16b, {v23.16b}, v3.16b // vpshufb %xmm3, %xmm13, %xmm4 # 4 = sbou + tbl v1.16b, {v22.16b}, v2.16b // vpshufb %xmm2, %xmm12, %xmm1 # 0 = sb1t + eor v1.16b, v1.16b, v4.16b // vpxor %xmm4, %xmm1, %xmm1 # 0 = sbox output + + // add in smeared stuff + eor v0.16b, v1.16b, v7.16b // vpxor %xmm7, %xmm1, %xmm0 + eor v7.16b, v1.16b, v7.16b // vmovdqa %xmm0, %xmm7 + ret +.size _vpaes_schedule_round,.-_vpaes_schedule_round + +## +## .aes_schedule_transform +## +## Linear-transform %xmm0 according to tables at (%r11) +## +## Requires that %xmm9 = 0x0F0F... as in preheat +## Output in %xmm0 +## Clobbers %xmm1, %xmm2 +## +.type _vpaes_schedule_transform,%function +.align 4 +_vpaes_schedule_transform: + and v1.16b, v0.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 + ushr v0.16b, v0.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 + // vmovdqa (%r11), %xmm2 # lo + tbl v2.16b, {$iptlo}, v1.16b // vpshufb %xmm1, %xmm2, %xmm2 + // vmovdqa 16(%r11), %xmm1 # hi + tbl v0.16b, {$ipthi}, v0.16b // vpshufb %xmm0, %xmm1, %xmm0 + eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0 + ret +.size _vpaes_schedule_transform,.-_vpaes_schedule_transform + +## +## .aes_schedule_mangle +## +## Mangle xmm0 from (basis-transformed) standard version +## to our version. +## +## On encrypt, +## xor with 0x63 +## multiply by circulant 0,1,1,1 +## apply shiftrows transform +## +## On decrypt, +## xor with 0x63 +## multiply by "inverse mixcolumns" circulant E,B,D,9 +## deskew +## apply shiftrows transform +## +## +## Writes out to (%rdx), and increments or decrements it +## Keeps track of round number mod 4 in %r8 +## Preserves xmm0 +## Clobbers xmm1-xmm5 +## +.type _vpaes_schedule_mangle,%function +.align 4 +_vpaes_schedule_mangle: + mov v4.16b, v0.16b // vmovdqa %xmm0, %xmm4 # save xmm0 for later + // vmovdqa .Lk_mc_forward(%rip),%xmm5 + + // encrypting + eor v4.16b, v0.16b, v16.16b // vpxor .Lk_s63(%rip), %xmm0, %xmm4 + add $out, $out, #16 // add \$16, %rdx + tbl v4.16b, {v4.16b}, v9.16b // vpshufb %xmm5, %xmm4, %xmm4 + tbl v1.16b, {v4.16b}, v9.16b // vpshufb %xmm5, %xmm4, %xmm1 + tbl v3.16b, {v1.16b}, v9.16b // vpshufb %xmm5, %xmm1, %xmm3 + eor v4.16b, v4.16b, v1.16b // vpxor %xmm1, %xmm4, %xmm4 + ld1 {v1.2d}, [x8] // vmovdqa (%r8,%r10), %xmm1 + eor v3.16b, v3.16b, v4.16b // vpxor %xmm4, %xmm3, %xmm3 + +.Lschedule_mangle_both: + tbl v3.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm3 + add x8, x8, #48 // add \$-16, %r8 + and x8, x8, #~(1<<6) // and \$0x30, %r8 + st1 {v3.2d}, [$out] // vmovdqu %xmm3, (%rdx) + ret +.size _vpaes_schedule_mangle,.-_vpaes_schedule_mangle + +.globl GFp_vpaes_set_encrypt_key +.type GFp_vpaes_set_encrypt_key,%function +.align 4 +GFp_vpaes_set_encrypt_key: + AARCH64_SIGN_LINK_REGISTER + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + stp d8,d9,[sp,#-16]! // ABI spec says so + + lsr w9, $bits, #5 // shr \$5,%eax + add w9, w9, #5 // \$5,%eax + str w9, [$out,#240] // mov %eax,240(%rdx) # AES_KEY->rounds = nbits/32+5; + + mov $dir, #0 // mov \$0,%ecx + mov x8, #0x30 // mov \$0x30,%r8d + bl _vpaes_schedule_core + eor x0, x0, x0 + + ldp d8,d9,[sp],#16 + ldp x29,x30,[sp],#16 + AARCH64_VALIDATE_LINK_REGISTER + ret +.size GFp_vpaes_set_encrypt_key,.-GFp_vpaes_set_encrypt_key +___ +} +{ +my ($inp,$out,$len,$key,$ivec) = map("x$_",(0..4)); +my ($ctr, $ctr_tmp) = ("w6", "w7"); + +# void GFp_vpaes_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, size_t len, +# const AES_KEY *key, const uint8_t ivec[16]); +$code.=<<___; +.globl GFp_vpaes_ctr32_encrypt_blocks +.type GFp_vpaes_ctr32_encrypt_blocks,%function +.align 4 +GFp_vpaes_ctr32_encrypt_blocks: + AARCH64_SIGN_LINK_REGISTER + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + stp d8,d9,[sp,#-16]! // ABI spec says so + stp d10,d11,[sp,#-16]! + stp d12,d13,[sp,#-16]! + stp d14,d15,[sp,#-16]! + + cbz $len, .Lctr32_done + + // Note, unlike the other functions, $len here is measured in blocks, + // not bytes. + mov x17, $len + mov x2, $key + + // Load the IV and counter portion. + ldr $ctr, [$ivec, #12] + ld1 {v7.16b}, [$ivec] + + bl _vpaes_encrypt_preheat + tst x17, #1 + rev $ctr, $ctr // The counter is big-endian. + b.eq .Lctr32_prep_loop + + // Handle one block so the remaining block count is even for + // _vpaes_encrypt_2x. + ld1 {v6.16b}, [$inp], #16 // Load input ahead of time + bl _vpaes_encrypt_core + eor v0.16b, v0.16b, v6.16b // XOR input and result + st1 {v0.16b}, [$out], #16 + subs x17, x17, #1 + // Update the counter. + add $ctr, $ctr, #1 + rev $ctr_tmp, $ctr + mov v7.s[3], $ctr_tmp + b.ls .Lctr32_done + +.Lctr32_prep_loop: + // _vpaes_encrypt_core takes its input from v7, while _vpaes_encrypt_2x + // uses v14 and v15. + mov v15.16b, v7.16b + mov v14.16b, v7.16b + add $ctr, $ctr, #1 + rev $ctr_tmp, $ctr + mov v15.s[3], $ctr_tmp + +.Lctr32_loop: + ld1 {v6.16b,v7.16b}, [$inp], #32 // Load input ahead of time + bl _vpaes_encrypt_2x + eor v0.16b, v0.16b, v6.16b // XOR input and result + eor v1.16b, v1.16b, v7.16b // XOR input and result (#2) + st1 {v0.16b,v1.16b}, [$out], #32 + subs x17, x17, #2 + // Update the counter. + add $ctr_tmp, $ctr, #1 + add $ctr, $ctr, #2 + rev $ctr_tmp, $ctr_tmp + mov v14.s[3], $ctr_tmp + rev $ctr_tmp, $ctr + mov v15.s[3], $ctr_tmp + b.hi .Lctr32_loop + +.Lctr32_done: + ldp d14,d15,[sp],#16 + ldp d12,d13,[sp],#16 + ldp d10,d11,[sp],#16 + ldp d8,d9,[sp],#16 + ldp x29,x30,[sp],#16 + AARCH64_VALIDATE_LINK_REGISTER + ret +.size GFp_vpaes_ctr32_encrypt_blocks,.-GFp_vpaes_ctr32_encrypt_blocks +___ +} + +print $code; + +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/fipsmodule/aes/asm/vpaes-x86.pl b/vendor/ring/crypto/fipsmodule/aes/asm/vpaes-x86.pl new file mode 100644 index 00000000..1418869e --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/aes/asm/vpaes-x86.pl @@ -0,0 +1,603 @@ +#! /usr/bin/env perl +# Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +###################################################################### +## Constant-time SSSE3 AES core implementation. +## version 0.1 +## +## By Mike Hamburg (Stanford University), 2009 +## Public domain. +## +## For details see http://shiftleft.org/papers/vector_aes/ and +## http://crypto.stanford.edu/vpaes/. + +###################################################################### +# September 2011. +# +# Port vpaes-x86_64.pl as 32-bit "almost" drop-in replacement for +# aes-586.pl. "Almost" refers to the fact that AES_cbc_encrypt +# doesn't handle partial vectors (doesn't have to if called from +# EVP only). "Drop-in" implies that this module doesn't share key +# schedule structure with the original nor does it make assumption +# about its alignment... +# +# Performance summary. aes-586.pl column lists large-block CBC +# encrypt/decrypt/with-hyper-threading-off(*) results in cycles per +# byte processed with 128-bit key, and vpaes-x86.pl column - [also +# large-block CBC] encrypt/decrypt. +# +# aes-586.pl vpaes-x86.pl +# +# Core 2(**) 28.1/41.4/18.3 21.9/25.2(***) +# Nehalem 27.9/40.4/18.1 10.2/11.9 +# Atom 70.7/92.1/60.1 61.1/75.4(***) +# Silvermont 45.4/62.9/24.1 49.2/61.1(***) +# +# (*) "Hyper-threading" in the context refers rather to cache shared +# among multiple cores, than to specifically Intel HTT. As vast +# majority of contemporary cores share cache, slower code path +# is common place. In other words "with-hyper-threading-off" +# results are presented mostly for reference purposes. +# +# (**) "Core 2" refers to initial 65nm design, a.k.a. Conroe. +# +# (***) Less impressive improvement on Core 2 and Atom is due to slow +# pshufb, yet it's respectable +28%/64% improvement on Core 2 +# and +15% on Atom (as implied, over "hyper-threading-safe" +# code path). +# +# + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +push(@INC,"${dir}","${dir}../../../perlasm"); +require "x86asm.pl"; + +$output = pop; +open OUT,">$output"; +*STDOUT=*OUT; + +&asm_init($ARGV[0],$x86only = $ARGV[$#ARGV] eq "386"); + +$PREFIX="vpaes"; + +my ($round, $base, $magic, $key, $const, $inp, $out)= + ("eax", "ebx", "ecx", "edx","ebp", "esi","edi"); + +&static_label("_vpaes_consts"); +&static_label("_vpaes_schedule_low_round"); + +&set_label("_vpaes_consts",64); +$k_inv=-0x30; # inv, inva + &data_word(0x0D080180,0x0E05060F,0x0A0B0C02,0x04070309); + &data_word(0x0F0B0780,0x01040A06,0x02050809,0x030D0E0C); + +$k_s0F=-0x10; # s0F + &data_word(0x0F0F0F0F,0x0F0F0F0F,0x0F0F0F0F,0x0F0F0F0F); + +$k_ipt=0x00; # input transform (lo, hi) + &data_word(0x5A2A7000,0xC2B2E898,0x52227808,0xCABAE090); + &data_word(0x317C4D00,0x4C01307D,0xB0FDCC81,0xCD80B1FC); + +$k_sb1=0x20; # sb1u, sb1t + &data_word(0xCB503E00,0xB19BE18F,0x142AF544,0xA5DF7A6E); + &data_word(0xFAE22300,0x3618D415,0x0D2ED9EF,0x3BF7CCC1); +$k_sb2=0x40; # sb2u, sb2t + &data_word(0x0B712400,0xE27A93C6,0xBC982FCD,0x5EB7E955); + &data_word(0x0AE12900,0x69EB8840,0xAB82234A,0xC2A163C8); +$k_sbo=0x60; # sbou, sbot + &data_word(0x6FBDC700,0xD0D26D17,0xC502A878,0x15AABF7A); + &data_word(0x5FBB6A00,0xCFE474A5,0x412B35FA,0x8E1E90D1); + +$k_mc_forward=0x80; # mc_forward + &data_word(0x00030201,0x04070605,0x080B0A09,0x0C0F0E0D); + &data_word(0x04070605,0x080B0A09,0x0C0F0E0D,0x00030201); + &data_word(0x080B0A09,0x0C0F0E0D,0x00030201,0x04070605); + &data_word(0x0C0F0E0D,0x00030201,0x04070605,0x080B0A09); + +$k_mc_backward=0xc0; # mc_backward + &data_word(0x02010003,0x06050407,0x0A09080B,0x0E0D0C0F); + &data_word(0x0E0D0C0F,0x02010003,0x06050407,0x0A09080B); + &data_word(0x0A09080B,0x0E0D0C0F,0x02010003,0x06050407); + &data_word(0x06050407,0x0A09080B,0x0E0D0C0F,0x02010003); + +$k_sr=0x100; # sr + &data_word(0x03020100,0x07060504,0x0B0A0908,0x0F0E0D0C); + &data_word(0x0F0A0500,0x030E0904,0x07020D08,0x0B06010C); + &data_word(0x0B020900,0x0F060D04,0x030A0108,0x070E050C); + &data_word(0x070A0D00,0x0B0E0104,0x0F020508,0x0306090C); + +$k_rcon=0x140; # rcon + &data_word(0xAF9DEEB6,0x1F8391B9,0x4D7C7D81,0x702A9808); + +$k_s63=0x150; # s63: all equal to 0x63 transformed + &data_word(0x5B5B5B5B,0x5B5B5B5B,0x5B5B5B5B,0x5B5B5B5B); + +$k_opt=0x160; # output transform + &data_word(0xD6B66000,0xFF9F4929,0xDEBE6808,0xF7974121); + &data_word(0x50BCEC00,0x01EDBD51,0xB05C0CE0,0xE10D5DB1); + +$k_deskew=0x180; # deskew tables: inverts the sbox's "skew" + &data_word(0x47A4E300,0x07E4A340,0x5DBEF91A,0x1DFEB95A); + &data_word(0x83EA6900,0x5F36B5DC,0xF49D1E77,0x2841C2AB); + +&asciz ("Vector Permutation AES for x86/SSSE3, Mike Hamburg (Stanford University)"); +&align (64); + +&function_begin_B("_vpaes_preheat"); + &add ($const,&DWP(0,"esp")); + &movdqa ("xmm7",&QWP($k_inv,$const)); + &movdqa ("xmm6",&QWP($k_s0F,$const)); + &ret (); +&function_end_B("_vpaes_preheat"); + +## +## _aes_encrypt_core +## +## AES-encrypt %xmm0. +## +## Inputs: +## %xmm0 = input +## %xmm6-%xmm7 as in _vpaes_preheat +## (%edx) = scheduled keys +## +## Output in %xmm0 +## Clobbers %xmm1-%xmm5, %eax, %ebx, %ecx, %edx +## +## +&function_begin_B("_vpaes_encrypt_core"); + &mov ($magic,16); + &mov ($round,&DWP(240,$key)); + &movdqa ("xmm1","xmm6") + &movdqa ("xmm2",&QWP($k_ipt,$const)); + &pandn ("xmm1","xmm0"); + &pand ("xmm0","xmm6"); + &movdqu ("xmm5",&QWP(0,$key)); + &pshufb ("xmm2","xmm0"); + &movdqa ("xmm0",&QWP($k_ipt+16,$const)); + &pxor ("xmm2","xmm5"); + &psrld ("xmm1",4); + &add ($key,16); + &pshufb ("xmm0","xmm1"); + &lea ($base,&DWP($k_mc_backward,$const)); + &pxor ("xmm0","xmm2"); + &jmp (&label("enc_entry")); + + +&set_label("enc_loop",16); + # middle of middle round + &movdqa ("xmm4",&QWP($k_sb1,$const)); # 4 : sb1u + &movdqa ("xmm0",&QWP($k_sb1+16,$const));# 0 : sb1t + &pshufb ("xmm4","xmm2"); # 4 = sb1u + &pshufb ("xmm0","xmm3"); # 0 = sb1t + &pxor ("xmm4","xmm5"); # 4 = sb1u + k + &movdqa ("xmm5",&QWP($k_sb2,$const)); # 4 : sb2u + &pxor ("xmm0","xmm4"); # 0 = A + &movdqa ("xmm1",&QWP(-0x40,$base,$magic));# .Lk_mc_forward[] + &pshufb ("xmm5","xmm2"); # 4 = sb2u + &movdqa ("xmm2",&QWP($k_sb2+16,$const));# 2 : sb2t + &movdqa ("xmm4",&QWP(0,$base,$magic)); # .Lk_mc_backward[] + &pshufb ("xmm2","xmm3"); # 2 = sb2t + &movdqa ("xmm3","xmm0"); # 3 = A + &pxor ("xmm2","xmm5"); # 2 = 2A + &pshufb ("xmm0","xmm1"); # 0 = B + &add ($key,16); # next key + &pxor ("xmm0","xmm2"); # 0 = 2A+B + &pshufb ("xmm3","xmm4"); # 3 = D + &add ($magic,16); # next mc + &pxor ("xmm3","xmm0"); # 3 = 2A+B+D + &pshufb ("xmm0","xmm1"); # 0 = 2B+C + &and ($magic,0x30); # ... mod 4 + &sub ($round,1); # nr-- + &pxor ("xmm0","xmm3"); # 0 = 2A+3B+C+D + +&set_label("enc_entry"); + # top of round + &movdqa ("xmm1","xmm6"); # 1 : i + &movdqa ("xmm5",&QWP($k_inv+16,$const));# 2 : a/k + &pandn ("xmm1","xmm0"); # 1 = i<<4 + &psrld ("xmm1",4); # 1 = i + &pand ("xmm0","xmm6"); # 0 = k + &pshufb ("xmm5","xmm0"); # 2 = a/k + &movdqa ("xmm3","xmm7"); # 3 : 1/i + &pxor ("xmm0","xmm1"); # 0 = j + &pshufb ("xmm3","xmm1"); # 3 = 1/i + &movdqa ("xmm4","xmm7"); # 4 : 1/j + &pxor ("xmm3","xmm5"); # 3 = iak = 1/i + a/k + &pshufb ("xmm4","xmm0"); # 4 = 1/j + &movdqa ("xmm2","xmm7"); # 2 : 1/iak + &pxor ("xmm4","xmm5"); # 4 = jak = 1/j + a/k + &pshufb ("xmm2","xmm3"); # 2 = 1/iak + &movdqa ("xmm3","xmm7"); # 3 : 1/jak + &pxor ("xmm2","xmm0"); # 2 = io + &pshufb ("xmm3","xmm4"); # 3 = 1/jak + &movdqu ("xmm5",&QWP(0,$key)); + &pxor ("xmm3","xmm1"); # 3 = jo + &jnz (&label("enc_loop")); + + # middle of last round + &movdqa ("xmm4",&QWP($k_sbo,$const)); # 3 : sbou .Lk_sbo + &movdqa ("xmm0",&QWP($k_sbo+16,$const));# 3 : sbot .Lk_sbo+16 + &pshufb ("xmm4","xmm2"); # 4 = sbou + &pxor ("xmm4","xmm5"); # 4 = sb1u + k + &pshufb ("xmm0","xmm3"); # 0 = sb1t + &movdqa ("xmm1",&QWP(0x40,$base,$magic));# .Lk_sr[] + &pxor ("xmm0","xmm4"); # 0 = A + &pshufb ("xmm0","xmm1"); + &ret (); +&function_end_B("_vpaes_encrypt_core"); + +######################################################## +## ## +## AES key schedule ## +## ## +######################################################## +&function_begin_B("_vpaes_schedule_core"); + &add ($const,&DWP(0,"esp")); + &movdqu ("xmm0",&QWP(0,$inp)); # load key (unaligned) + &movdqa ("xmm2",&QWP($k_rcon,$const)); # load rcon + + # input transform + &movdqa ("xmm3","xmm0"); + &lea ($base,&DWP($k_ipt,$const)); + &movdqa (&QWP(4,"esp"),"xmm2"); # xmm8 + &call ("_vpaes_schedule_transform"); + &movdqa ("xmm7","xmm0"); + + &test ($out,$out); + &jnz (&label("schedule_am_decrypting")); + + # encrypting, output zeroth round key after transform + &movdqu (&QWP(0,$key),"xmm0"); + &jmp (&label("schedule_go")); + +&set_label("schedule_am_decrypting"); + # decrypting, output zeroth round key after shiftrows + &movdqa ("xmm1",&QWP($k_sr,$const,$magic)); + &pshufb ("xmm3","xmm1"); + &movdqu (&QWP(0,$key),"xmm3"); + &xor ($magic,0x30); + +&set_label("schedule_go"); + &cmp ($round,192); + &ja (&label("schedule_256")); + # 192-bit key support was removed. + # 128: fall though + +## +## .schedule_128 +## +## 128-bit specific part of key schedule. +## +## This schedule is really simple, because all its parts +## are accomplished by the subroutines. +## +&set_label("schedule_128"); + &mov ($round,10); + +&set_label("loop_schedule_128"); + &call ("_vpaes_schedule_round"); + &dec ($round); + &jz (&label("schedule_mangle_last")); + &call ("_vpaes_schedule_mangle"); # write output + &jmp (&label("loop_schedule_128")); + +## +## .aes_schedule_256 +## +## 256-bit specific part of key schedule. +## +## The structure here is very similar to the 128-bit +## schedule, but with an additional "low side" in +## %xmm6. The low side's rounds are the same as the +## high side's, except no rcon and no rotation. +## +&set_label("schedule_256",16); + &movdqu ("xmm0",&QWP(16,$inp)); # load key part 2 (unaligned) + &call ("_vpaes_schedule_transform"); # input transform + &mov ($round,7); + +&set_label("loop_schedule_256"); + &call ("_vpaes_schedule_mangle"); # output low result + &movdqa ("xmm6","xmm0"); # save cur_lo in xmm6 + + # high round + &call ("_vpaes_schedule_round"); + &dec ($round); + &jz (&label("schedule_mangle_last")); + &call ("_vpaes_schedule_mangle"); + + # low round. swap xmm7 and xmm6 + &pshufd ("xmm0","xmm0",0xFF); + &movdqa (&QWP(20,"esp"),"xmm7"); + &movdqa ("xmm7","xmm6"); + &call ("_vpaes_schedule_low_round"); + &movdqa ("xmm7",&QWP(20,"esp")); + + &jmp (&label("loop_schedule_256")); + +## +## .aes_schedule_mangle_last +## +## Mangler for last round of key schedule +## Mangles %xmm0 +## when encrypting, outputs out(%xmm0) ^ 63 +## when decrypting, outputs unskew(%xmm0) +## +## Always called right before return... jumps to cleanup and exits +## +&set_label("schedule_mangle_last",16); + # schedule last round key from xmm0 + &lea ($base,&DWP($k_deskew,$const)); + &test ($out,$out); + &jnz (&label("schedule_mangle_last_dec")); + + # encrypting + &movdqa ("xmm1",&QWP($k_sr,$const,$magic)); + &pshufb ("xmm0","xmm1"); # output permute + &lea ($base,&DWP($k_opt,$const)); # prepare to output transform + &add ($key,32); + +&set_label("schedule_mangle_last_dec"); + &add ($key,-16); + &pxor ("xmm0",&QWP($k_s63,$const)); + &call ("_vpaes_schedule_transform"); # output transform + &movdqu (&QWP(0,$key),"xmm0"); # save last key + + # cleanup + &pxor ("xmm0","xmm0"); + &pxor ("xmm1","xmm1"); + &pxor ("xmm2","xmm2"); + &pxor ("xmm3","xmm3"); + &pxor ("xmm4","xmm4"); + &pxor ("xmm5","xmm5"); + &pxor ("xmm6","xmm6"); + &pxor ("xmm7","xmm7"); + &ret (); +&function_end_B("_vpaes_schedule_core"); + +## +## .aes_schedule_round +## +## Runs one main round of the key schedule on %xmm0, %xmm7 +## +## Specifically, runs subbytes on the high dword of %xmm0 +## then rotates it by one byte and xors into the low dword of +## %xmm7. +## +## Adds rcon from low byte of %xmm8, then rotates %xmm8 for +## next rcon. +## +## Smears the dwords of %xmm7 by xoring the low into the +## second low, result into third, result into highest. +## +## Returns results in %xmm7 = %xmm0. +## Clobbers %xmm1-%xmm5. +## +&function_begin_B("_vpaes_schedule_round"); + # extract rcon from xmm8 + &movdqa ("xmm2",&QWP(8,"esp")); # xmm8 + &pxor ("xmm1","xmm1"); + &palignr("xmm1","xmm2",15); + &palignr("xmm2","xmm2",15); + &pxor ("xmm7","xmm1"); + + # rotate + &pshufd ("xmm0","xmm0",0xFF); + &palignr("xmm0","xmm0",1); + + # fall through... + &movdqa (&QWP(8,"esp"),"xmm2"); # xmm8 + + # low round: same as high round, but no rotation and no rcon. +&set_label("_vpaes_schedule_low_round"); + # smear xmm7 + &movdqa ("xmm1","xmm7"); + &pslldq ("xmm7",4); + &pxor ("xmm7","xmm1"); + &movdqa ("xmm1","xmm7"); + &pslldq ("xmm7",8); + &pxor ("xmm7","xmm1"); + &pxor ("xmm7",&QWP($k_s63,$const)); + + # subbyte + &movdqa ("xmm4",&QWP($k_s0F,$const)); + &movdqa ("xmm5",&QWP($k_inv,$const)); # 4 : 1/j + &movdqa ("xmm1","xmm4"); + &pandn ("xmm1","xmm0"); + &psrld ("xmm1",4); # 1 = i + &pand ("xmm0","xmm4"); # 0 = k + &movdqa ("xmm2",&QWP($k_inv+16,$const));# 2 : a/k + &pshufb ("xmm2","xmm0"); # 2 = a/k + &pxor ("xmm0","xmm1"); # 0 = j + &movdqa ("xmm3","xmm5"); # 3 : 1/i + &pshufb ("xmm3","xmm1"); # 3 = 1/i + &pxor ("xmm3","xmm2"); # 3 = iak = 1/i + a/k + &movdqa ("xmm4","xmm5"); # 4 : 1/j + &pshufb ("xmm4","xmm0"); # 4 = 1/j + &pxor ("xmm4","xmm2"); # 4 = jak = 1/j + a/k + &movdqa ("xmm2","xmm5"); # 2 : 1/iak + &pshufb ("xmm2","xmm3"); # 2 = 1/iak + &pxor ("xmm2","xmm0"); # 2 = io + &movdqa ("xmm3","xmm5"); # 3 : 1/jak + &pshufb ("xmm3","xmm4"); # 3 = 1/jak + &pxor ("xmm3","xmm1"); # 3 = jo + &movdqa ("xmm4",&QWP($k_sb1,$const)); # 4 : sbou + &pshufb ("xmm4","xmm2"); # 4 = sbou + &movdqa ("xmm0",&QWP($k_sb1+16,$const));# 0 : sbot + &pshufb ("xmm0","xmm3"); # 0 = sb1t + &pxor ("xmm0","xmm4"); # 0 = sbox output + + # add in smeared stuff + &pxor ("xmm0","xmm7"); + &movdqa ("xmm7","xmm0"); + &ret (); +&function_end_B("_vpaes_schedule_round"); + +## +## .aes_schedule_transform +## +## Linear-transform %xmm0 according to tables at (%ebx) +## +## Output in %xmm0 +## Clobbers %xmm1, %xmm2 +## +&function_begin_B("_vpaes_schedule_transform"); + &movdqa ("xmm2",&QWP($k_s0F,$const)); + &movdqa ("xmm1","xmm2"); + &pandn ("xmm1","xmm0"); + &psrld ("xmm1",4); + &pand ("xmm0","xmm2"); + &movdqa ("xmm2",&QWP(0,$base)); + &pshufb ("xmm2","xmm0"); + &movdqa ("xmm0",&QWP(16,$base)); + &pshufb ("xmm0","xmm1"); + &pxor ("xmm0","xmm2"); + &ret (); +&function_end_B("_vpaes_schedule_transform"); + +## +## .aes_schedule_mangle +## +## Mangle xmm0 from (basis-transformed) standard version +## to our version. +## +## On encrypt, +## xor with 0x63 +## multiply by circulant 0,1,1,1 +## apply shiftrows transform +## +## On decrypt, +## xor with 0x63 +## multiply by "inverse mixcolumns" circulant E,B,D,9 +## deskew +## apply shiftrows transform +## +## +## Writes out to (%edx), and increments or decrements it +## Keeps track of round number mod 4 in %ecx +## Preserves xmm0 +## Clobbers xmm1-xmm5 +## +&function_begin_B("_vpaes_schedule_mangle"); + &movdqa ("xmm4","xmm0"); # save xmm0 for later + &movdqa ("xmm5",&QWP($k_mc_forward,$const)); + &test ($out,$out); + &jnz (&label("schedule_mangle_dec")); + + # encrypting + &add ($key,16); + &pxor ("xmm4",&QWP($k_s63,$const)); + &pshufb ("xmm4","xmm5"); + &movdqa ("xmm3","xmm4"); + &pshufb ("xmm4","xmm5"); + &pxor ("xmm3","xmm4"); + &pshufb ("xmm4","xmm5"); + &pxor ("xmm3","xmm4"); + + &jmp (&label("schedule_mangle_both")); + +&set_label("schedule_mangle_dec",16); + # inverse mix columns + &movdqa ("xmm2",&QWP($k_s0F,$const)); + &lea ($inp,&DWP($k_dksd,$const)); + &movdqa ("xmm1","xmm2"); + &pandn ("xmm1","xmm4"); + &psrld ("xmm1",4); # 1 = hi + &pand ("xmm4","xmm2"); # 4 = lo + + &movdqa ("xmm2",&QWP(0,$inp)); + &pshufb ("xmm2","xmm4"); + &movdqa ("xmm3",&QWP(0x10,$inp)); + &pshufb ("xmm3","xmm1"); + &pxor ("xmm3","xmm2"); + &pshufb ("xmm3","xmm5"); + + &movdqa ("xmm2",&QWP(0x20,$inp)); + &pshufb ("xmm2","xmm4"); + &pxor ("xmm2","xmm3"); + &movdqa ("xmm3",&QWP(0x30,$inp)); + &pshufb ("xmm3","xmm1"); + &pxor ("xmm3","xmm2"); + &pshufb ("xmm3","xmm5"); + + &movdqa ("xmm2",&QWP(0x40,$inp)); + &pshufb ("xmm2","xmm4"); + &pxor ("xmm2","xmm3"); + &movdqa ("xmm3",&QWP(0x50,$inp)); + &pshufb ("xmm3","xmm1"); + &pxor ("xmm3","xmm2"); + &pshufb ("xmm3","xmm5"); + + &movdqa ("xmm2",&QWP(0x60,$inp)); + &pshufb ("xmm2","xmm4"); + &pxor ("xmm2","xmm3"); + &movdqa ("xmm3",&QWP(0x70,$inp)); + &pshufb ("xmm3","xmm1"); + &pxor ("xmm3","xmm2"); + + &add ($key,-16); + +&set_label("schedule_mangle_both"); + &movdqa ("xmm1",&QWP($k_sr,$const,$magic)); + &pshufb ("xmm3","xmm1"); + &add ($magic,-16); + &and ($magic,0x30); + &movdqu (&QWP(0,$key),"xmm3"); + &ret (); +&function_end_B("_vpaes_schedule_mangle"); + +# +# Interface to OpenSSL +# +&function_begin("GFp_${PREFIX}_set_encrypt_key"); + &mov ($inp,&wparam(0)); # inp + &lea ($base,&DWP(-56,"esp")); + &mov ($round,&wparam(1)); # bits + &and ($base,-16); + &mov ($key,&wparam(2)); # key + &xchg ($base,"esp"); # alloca + &mov (&DWP(48,"esp"),$base); + + &mov ($base,$round); + &shr ($base,5); + &add ($base,5); + &mov (&DWP(240,$key),$base); # AES_KEY->rounds = nbits/32+5; + &mov ($magic,0x30); + &mov ($out,0); + + &lea ($const,&DWP(&label("_vpaes_consts")."+0x30-".&label("pic_point"))); + &call ("_vpaes_schedule_core"); +&set_label("pic_point"); + + &mov ("esp",&DWP(48,"esp")); + &xor ("eax","eax"); +&function_end("GFp_${PREFIX}_set_encrypt_key"); + +&function_begin("GFp_${PREFIX}_encrypt"); + &lea ($const,&DWP(&label("_vpaes_consts")."+0x30-".&label("pic_point"))); + &call ("_vpaes_preheat"); +&set_label("pic_point"); + &mov ($inp,&wparam(0)); # inp + &lea ($base,&DWP(-56,"esp")); + &mov ($out,&wparam(1)); # out + &and ($base,-16); + &mov ($key,&wparam(2)); # key + &xchg ($base,"esp"); # alloca + &mov (&DWP(48,"esp"),$base); + + &movdqu ("xmm0",&QWP(0,$inp)); + &call ("_vpaes_encrypt_core"); + &movdqu (&QWP(0,$out),"xmm0"); + + &mov ("esp",&DWP(48,"esp")); +&function_end("GFp_${PREFIX}_encrypt"); + +&asm_finish(); + +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/fipsmodule/aes/asm/vpaes-x86_64.pl b/vendor/ring/crypto/fipsmodule/aes/asm/vpaes-x86_64.pl new file mode 100644 index 00000000..6b93a45a --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/aes/asm/vpaes-x86_64.pl @@ -0,0 +1,1064 @@ +#! /usr/bin/env perl +# Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +###################################################################### +## Constant-time SSSE3 AES core implementation. +## version 0.1 +## +## By Mike Hamburg (Stanford University), 2009 +## Public domain. +## +## For details see http://shiftleft.org/papers/vector_aes/ and +## http://crypto.stanford.edu/vpaes/. + +###################################################################### +# September 2011. +# +# Interface to OpenSSL as "almost" drop-in replacement for +# aes-x86_64.pl. "Almost" refers to the fact that AES_cbc_encrypt +# doesn't handle partial vectors (doesn't have to if called from +# EVP only). "Drop-in" implies that this module doesn't share key +# schedule structure with the original nor does it make assumption +# about its alignment... +# +# Performance summary. aes-x86_64.pl column lists large-block CBC +# encrypt/decrypt/with-hyper-threading-off(*) results in cycles per +# byte processed with 128-bit key, and vpaes-x86_64.pl column - +# [also large-block CBC] encrypt/decrypt. +# +# aes-x86_64.pl vpaes-x86_64.pl +# +# Core 2(**) 29.6/41.1/14.3 21.9/25.2(***) +# Nehalem 29.6/40.3/14.6 10.0/11.8 +# Atom 57.3/74.2/32.1 60.9/77.2(***) +# Silvermont 52.7/64.0/19.5 48.8/60.8(***) +# Goldmont 38.9/49.0/17.8 10.6/12.6 +# +# (*) "Hyper-threading" in the context refers rather to cache shared +# among multiple cores, than to specifically Intel HTT. As vast +# majority of contemporary cores share cache, slower code path +# is common place. In other words "with-hyper-threading-off" +# results are presented mostly for reference purposes. +# +# (**) "Core 2" refers to initial 65nm design, a.k.a. Conroe. +# +# (***) Less impressive improvement on Core 2 and Atom is due to slow +# pshufb, yet it's respectable +36%/62% improvement on Core 2 +# (as implied, over "hyper-threading-safe" code path). +# +# + +$flavour = shift; +$output = shift; +if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } + +$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/); + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../../perlasm/x86_64-xlate.pl" and -f $xlate) or +die "can't locate x86_64-xlate.pl"; + +open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""; +*STDOUT=*OUT; + +$PREFIX="vpaes"; + +$code.=<<___; +.text + +## +## _aes_encrypt_core +## +## AES-encrypt %xmm0. +## +## Inputs: +## %xmm0 = input +## %xmm9-%xmm15 as in _vpaes_preheat +## (%rdx) = scheduled keys +## +## Output in %xmm0 +## Clobbers %xmm1-%xmm5, %r9, %r10, %r11, %rax +## Preserves %xmm6 - %xmm8 so you get some local vectors +## +## +.type _vpaes_encrypt_core,\@abi-omnipotent +.align 16 +_vpaes_encrypt_core: +.cfi_startproc + mov %rdx, %r9 + mov \$16, %r11 + mov 240(%rdx),%eax + movdqa %xmm9, %xmm1 + movdqa .Lk_ipt(%rip), %xmm2 # iptlo + pandn %xmm0, %xmm1 + movdqu (%r9), %xmm5 # round0 key + psrld \$4, %xmm1 + pand %xmm9, %xmm0 + pshufb %xmm0, %xmm2 + movdqa .Lk_ipt+16(%rip), %xmm0 # ipthi + pshufb %xmm1, %xmm0 + pxor %xmm5, %xmm2 + add \$16, %r9 + pxor %xmm2, %xmm0 + lea .Lk_mc_backward(%rip),%r10 + jmp .Lenc_entry + +.align 16 +.Lenc_loop: + # middle of middle round + movdqa %xmm13, %xmm4 # 4 : sb1u + movdqa %xmm12, %xmm0 # 0 : sb1t + pshufb %xmm2, %xmm4 # 4 = sb1u + pshufb %xmm3, %xmm0 # 0 = sb1t + pxor %xmm5, %xmm4 # 4 = sb1u + k + movdqa %xmm15, %xmm5 # 4 : sb2u + pxor %xmm4, %xmm0 # 0 = A + movdqa -0x40(%r11,%r10), %xmm1 # .Lk_mc_forward[] + pshufb %xmm2, %xmm5 # 4 = sb2u + movdqa (%r11,%r10), %xmm4 # .Lk_mc_backward[] + movdqa %xmm14, %xmm2 # 2 : sb2t + pshufb %xmm3, %xmm2 # 2 = sb2t + movdqa %xmm0, %xmm3 # 3 = A + pxor %xmm5, %xmm2 # 2 = 2A + pshufb %xmm1, %xmm0 # 0 = B + add \$16, %r9 # next key + pxor %xmm2, %xmm0 # 0 = 2A+B + pshufb %xmm4, %xmm3 # 3 = D + add \$16, %r11 # next mc + pxor %xmm0, %xmm3 # 3 = 2A+B+D + pshufb %xmm1, %xmm0 # 0 = 2B+C + and \$0x30, %r11 # ... mod 4 + sub \$1,%rax # nr-- + pxor %xmm3, %xmm0 # 0 = 2A+3B+C+D + +.Lenc_entry: + # top of round + movdqa %xmm9, %xmm1 # 1 : i + movdqa %xmm11, %xmm5 # 2 : a/k + pandn %xmm0, %xmm1 # 1 = i<<4 + psrld \$4, %xmm1 # 1 = i + pand %xmm9, %xmm0 # 0 = k + pshufb %xmm0, %xmm5 # 2 = a/k + movdqa %xmm10, %xmm3 # 3 : 1/i + pxor %xmm1, %xmm0 # 0 = j + pshufb %xmm1, %xmm3 # 3 = 1/i + movdqa %xmm10, %xmm4 # 4 : 1/j + pxor %xmm5, %xmm3 # 3 = iak = 1/i + a/k + pshufb %xmm0, %xmm4 # 4 = 1/j + movdqa %xmm10, %xmm2 # 2 : 1/iak + pxor %xmm5, %xmm4 # 4 = jak = 1/j + a/k + pshufb %xmm3, %xmm2 # 2 = 1/iak + movdqa %xmm10, %xmm3 # 3 : 1/jak + pxor %xmm0, %xmm2 # 2 = io + pshufb %xmm4, %xmm3 # 3 = 1/jak + movdqu (%r9), %xmm5 + pxor %xmm1, %xmm3 # 3 = jo + jnz .Lenc_loop + + # middle of last round + movdqa -0x60(%r10), %xmm4 # 3 : sbou .Lk_sbo + movdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16 + pshufb %xmm2, %xmm4 # 4 = sbou + pxor %xmm5, %xmm4 # 4 = sb1u + k + pshufb %xmm3, %xmm0 # 0 = sb1t + movdqa 0x40(%r11,%r10), %xmm1 # .Lk_sr[] + pxor %xmm4, %xmm0 # 0 = A + pshufb %xmm1, %xmm0 + ret +.cfi_endproc +.size _vpaes_encrypt_core,.-_vpaes_encrypt_core + +## +## _aes_encrypt_core_2x +## +## AES-encrypt %xmm0 and %xmm6 in parallel. +## +## Inputs: +## %xmm0 and %xmm6 = input +## %xmm9 and %xmm10 as in _vpaes_preheat +## (%rdx) = scheduled keys +## +## Output in %xmm0 and %xmm6 +## Clobbers %xmm1-%xmm5, %xmm7, %xmm8, %xmm11-%xmm13, %r9, %r10, %r11, %rax +## Preserves %xmm14 and %xmm15 +## +## This function stitches two parallel instances of _vpaes_encrypt_core. x86_64 +## provides 16 XMM registers. _vpaes_encrypt_core computes over six registers +## (%xmm0-%xmm5) and additionally uses seven registers with preloaded constants +## from _vpaes_preheat (%xmm9-%xmm15). This does not quite fit two instances, +## so we spill some of %xmm9 through %xmm15 back to memory. We keep %xmm9 and +## %xmm10 in registers as these values are used several times in a row. The +## remainder are read once per round and are spilled to memory. This leaves two +## registers preserved for the caller. +## +## Thus, of the two _vpaes_encrypt_core instances, the first uses (%xmm0-%xmm5) +## as before. The second uses %xmm6-%xmm8,%xmm11-%xmm13. (Add 6 to %xmm2 and +## below. Add 8 to %xmm3 and up.) Instructions in the second instance are +## indented by one space. +## +## +.type _vpaes_encrypt_core_2x,\@abi-omnipotent +.align 16 +_vpaes_encrypt_core_2x: +.cfi_startproc + mov %rdx, %r9 + mov \$16, %r11 + mov 240(%rdx),%eax + movdqa %xmm9, %xmm1 + movdqa %xmm9, %xmm7 + movdqa .Lk_ipt(%rip), %xmm2 # iptlo + movdqa %xmm2, %xmm8 + pandn %xmm0, %xmm1 + pandn %xmm6, %xmm7 + movdqu (%r9), %xmm5 # round0 key + # Also use %xmm5 in the second instance. + psrld \$4, %xmm1 + psrld \$4, %xmm7 + pand %xmm9, %xmm0 + pand %xmm9, %xmm6 + pshufb %xmm0, %xmm2 + pshufb %xmm6, %xmm8 + movdqa .Lk_ipt+16(%rip), %xmm0 # ipthi + movdqa %xmm0, %xmm6 + pshufb %xmm1, %xmm0 + pshufb %xmm7, %xmm6 + pxor %xmm5, %xmm2 + pxor %xmm5, %xmm8 + add \$16, %r9 + pxor %xmm2, %xmm0 + pxor %xmm8, %xmm6 + lea .Lk_mc_backward(%rip),%r10 + jmp .Lenc2x_entry + +.align 16 +.Lenc2x_loop: + # middle of middle round + movdqa .Lk_sb1(%rip), %xmm4 # 4 : sb1u + movdqa .Lk_sb1+16(%rip),%xmm0 # 0 : sb1t + movdqa %xmm4, %xmm12 + movdqa %xmm0, %xmm6 + pshufb %xmm2, %xmm4 # 4 = sb1u + pshufb %xmm8, %xmm12 + pshufb %xmm3, %xmm0 # 0 = sb1t + pshufb %xmm11, %xmm6 + pxor %xmm5, %xmm4 # 4 = sb1u + k + pxor %xmm5, %xmm12 + movdqa .Lk_sb2(%rip), %xmm5 # 4 : sb2u + movdqa %xmm5, %xmm13 + pxor %xmm4, %xmm0 # 0 = A + pxor %xmm12, %xmm6 + movdqa -0x40(%r11,%r10), %xmm1 # .Lk_mc_forward[] + # Also use %xmm1 in the second instance. + pshufb %xmm2, %xmm5 # 4 = sb2u + pshufb %xmm8, %xmm13 + movdqa (%r11,%r10), %xmm4 # .Lk_mc_backward[] + # Also use %xmm4 in the second instance. + movdqa .Lk_sb2+16(%rip), %xmm2 # 2 : sb2t + movdqa %xmm2, %xmm8 + pshufb %xmm3, %xmm2 # 2 = sb2t + pshufb %xmm11, %xmm8 + movdqa %xmm0, %xmm3 # 3 = A + movdqa %xmm6, %xmm11 + pxor %xmm5, %xmm2 # 2 = 2A + pxor %xmm13, %xmm8 + pshufb %xmm1, %xmm0 # 0 = B + pshufb %xmm1, %xmm6 + add \$16, %r9 # next key + pxor %xmm2, %xmm0 # 0 = 2A+B + pxor %xmm8, %xmm6 + pshufb %xmm4, %xmm3 # 3 = D + pshufb %xmm4, %xmm11 + add \$16, %r11 # next mc + pxor %xmm0, %xmm3 # 3 = 2A+B+D + pxor %xmm6, %xmm11 + pshufb %xmm1, %xmm0 # 0 = 2B+C + pshufb %xmm1, %xmm6 + and \$0x30, %r11 # ... mod 4 + sub \$1,%rax # nr-- + pxor %xmm3, %xmm0 # 0 = 2A+3B+C+D + pxor %xmm11, %xmm6 + +.Lenc2x_entry: + # top of round + movdqa %xmm9, %xmm1 # 1 : i + movdqa %xmm9, %xmm7 + movdqa .Lk_inv+16(%rip), %xmm5 # 2 : a/k + movdqa %xmm5, %xmm13 + pandn %xmm0, %xmm1 # 1 = i<<4 + pandn %xmm6, %xmm7 + psrld \$4, %xmm1 # 1 = i + psrld \$4, %xmm7 + pand %xmm9, %xmm0 # 0 = k + pand %xmm9, %xmm6 + pshufb %xmm0, %xmm5 # 2 = a/k + pshufb %xmm6, %xmm13 + movdqa %xmm10, %xmm3 # 3 : 1/i + movdqa %xmm10, %xmm11 + pxor %xmm1, %xmm0 # 0 = j + pxor %xmm7, %xmm6 + pshufb %xmm1, %xmm3 # 3 = 1/i + pshufb %xmm7, %xmm11 + movdqa %xmm10, %xmm4 # 4 : 1/j + movdqa %xmm10, %xmm12 + pxor %xmm5, %xmm3 # 3 = iak = 1/i + a/k + pxor %xmm13, %xmm11 + pshufb %xmm0, %xmm4 # 4 = 1/j + pshufb %xmm6, %xmm12 + movdqa %xmm10, %xmm2 # 2 : 1/iak + movdqa %xmm10, %xmm8 + pxor %xmm5, %xmm4 # 4 = jak = 1/j + a/k + pxor %xmm13, %xmm12 + pshufb %xmm3, %xmm2 # 2 = 1/iak + pshufb %xmm11, %xmm8 + movdqa %xmm10, %xmm3 # 3 : 1/jak + movdqa %xmm10, %xmm11 + pxor %xmm0, %xmm2 # 2 = io + pxor %xmm6, %xmm8 + pshufb %xmm4, %xmm3 # 3 = 1/jak + pshufb %xmm12, %xmm11 + movdqu (%r9), %xmm5 + # Also use %xmm5 in the second instance. + pxor %xmm1, %xmm3 # 3 = jo + pxor %xmm7, %xmm11 + jnz .Lenc2x_loop + + # middle of last round + movdqa -0x60(%r10), %xmm4 # 3 : sbou .Lk_sbo + movdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16 + movdqa %xmm4, %xmm12 + movdqa %xmm0, %xmm6 + pshufb %xmm2, %xmm4 # 4 = sbou + pshufb %xmm8, %xmm12 + pxor %xmm5, %xmm4 # 4 = sb1u + k + pxor %xmm5, %xmm12 + pshufb %xmm3, %xmm0 # 0 = sb1t + pshufb %xmm11, %xmm6 + movdqa 0x40(%r11,%r10), %xmm1 # .Lk_sr[] + # Also use %xmm1 in the second instance. + pxor %xmm4, %xmm0 # 0 = A + pxor %xmm12, %xmm6 + pshufb %xmm1, %xmm0 + pshufb %xmm1, %xmm6 + ret +.cfi_endproc +.size _vpaes_encrypt_core_2x,.-_vpaes_encrypt_core_2x + +######################################################## +## ## +## AES key schedule ## +## ## +######################################################## +.type _vpaes_schedule_core,\@abi-omnipotent +.align 16 +_vpaes_schedule_core: +.cfi_startproc + # rdi = key + # rsi = size in bits + # rdx = buffer + # rcx = direction. 0=encrypt, 1=decrypt + + call _vpaes_preheat # load the tables + movdqa .Lk_rcon(%rip), %xmm8 # load rcon + movdqu (%rdi), %xmm0 # load key (unaligned) + + # input transform + movdqa %xmm0, %xmm3 + lea .Lk_ipt(%rip), %r11 + call _vpaes_schedule_transform + movdqa %xmm0, %xmm7 + + lea .Lk_sr(%rip),%r10 + + # encrypting, output zeroth round key after transform + movdqu %xmm0, (%rdx) + +.Lschedule_go: + cmp \$192, %esi + ja .Lschedule_256 + # 192-bit key support was removed. + # 128: fall though + +## +## .schedule_128 +## +## 128-bit specific part of key schedule. +## +## This schedule is really simple, because all its parts +## are accomplished by the subroutines. +## +.Lschedule_128: + mov \$10, %esi + +.Loop_schedule_128: + call _vpaes_schedule_round + dec %rsi + jz .Lschedule_mangle_last + call _vpaes_schedule_mangle # write output + jmp .Loop_schedule_128 + +## +## .aes_schedule_256 +## +## 256-bit specific part of key schedule. +## +## The structure here is very similar to the 128-bit +## schedule, but with an additional "low side" in +## %xmm6. The low side's rounds are the same as the +## high side's, except no rcon and no rotation. +## +.align 16 +.Lschedule_256: + movdqu 16(%rdi),%xmm0 # load key part 2 (unaligned) + call _vpaes_schedule_transform # input transform + mov \$7, %esi + +.Loop_schedule_256: + call _vpaes_schedule_mangle # output low result + movdqa %xmm0, %xmm6 # save cur_lo in xmm6 + + # high round + call _vpaes_schedule_round + dec %rsi + jz .Lschedule_mangle_last + call _vpaes_schedule_mangle + + # low round. swap xmm7 and xmm6 + pshufd \$0xFF, %xmm0, %xmm0 + movdqa %xmm7, %xmm5 + movdqa %xmm6, %xmm7 + call _vpaes_schedule_low_round + movdqa %xmm5, %xmm7 + + jmp .Loop_schedule_256 + + +## +## .aes_schedule_mangle_last +## +## Mangler for last round of key schedule +## Mangles %xmm0 +## when encrypting, outputs out(%xmm0) ^ 63 +## when decrypting, outputs unskew(%xmm0) +## +## Always called right before return... jumps to cleanup and exits +## +.align 16 +.Lschedule_mangle_last: + # schedule last round key from xmm0 + lea .Lk_deskew(%rip),%r11 # prepare to deskew + + # encrypting + movdqa (%r8,%r10),%xmm1 + pshufb %xmm1, %xmm0 # output permute + lea .Lk_opt(%rip), %r11 # prepare to output transform + add \$32, %rdx + +.Lschedule_mangle_last_dec: + add \$-16, %rdx + pxor .Lk_s63(%rip), %xmm0 + call _vpaes_schedule_transform # output transform + movdqu %xmm0, (%rdx) # save last key + + # cleanup + pxor %xmm0, %xmm0 + pxor %xmm1, %xmm1 + pxor %xmm2, %xmm2 + pxor %xmm3, %xmm3 + pxor %xmm4, %xmm4 + pxor %xmm5, %xmm5 + pxor %xmm6, %xmm6 + pxor %xmm7, %xmm7 + ret +.cfi_endproc +.size _vpaes_schedule_core,.-_vpaes_schedule_core + +## +## .aes_schedule_round +## +## Runs one main round of the key schedule on %xmm0, %xmm7 +## +## Specifically, runs subbytes on the high dword of %xmm0 +## then rotates it by one byte and xors into the low dword of +## %xmm7. +## +## Adds rcon from low byte of %xmm8, then rotates %xmm8 for +## next rcon. +## +## Smears the dwords of %xmm7 by xoring the low into the +## second low, result into third, result into highest. +## +## Returns results in %xmm7 = %xmm0. +## Clobbers %xmm1-%xmm4, %r11. +## +.type _vpaes_schedule_round,\@abi-omnipotent +.align 16 +_vpaes_schedule_round: +.cfi_startproc + # extract rcon from xmm8 + pxor %xmm1, %xmm1 + palignr \$15, %xmm8, %xmm1 + palignr \$15, %xmm8, %xmm8 + pxor %xmm1, %xmm7 + + # rotate + pshufd \$0xFF, %xmm0, %xmm0 + palignr \$1, %xmm0, %xmm0 + + # fall through... + + # low round: same as high round, but no rotation and no rcon. +_vpaes_schedule_low_round: + # smear xmm7 + movdqa %xmm7, %xmm1 + pslldq \$4, %xmm7 + pxor %xmm1, %xmm7 + movdqa %xmm7, %xmm1 + pslldq \$8, %xmm7 + pxor %xmm1, %xmm7 + pxor .Lk_s63(%rip), %xmm7 + + # subbytes + movdqa %xmm9, %xmm1 + pandn %xmm0, %xmm1 + psrld \$4, %xmm1 # 1 = i + pand %xmm9, %xmm0 # 0 = k + movdqa %xmm11, %xmm2 # 2 : a/k + pshufb %xmm0, %xmm2 # 2 = a/k + pxor %xmm1, %xmm0 # 0 = j + movdqa %xmm10, %xmm3 # 3 : 1/i + pshufb %xmm1, %xmm3 # 3 = 1/i + pxor %xmm2, %xmm3 # 3 = iak = 1/i + a/k + movdqa %xmm10, %xmm4 # 4 : 1/j + pshufb %xmm0, %xmm4 # 4 = 1/j + pxor %xmm2, %xmm4 # 4 = jak = 1/j + a/k + movdqa %xmm10, %xmm2 # 2 : 1/iak + pshufb %xmm3, %xmm2 # 2 = 1/iak + pxor %xmm0, %xmm2 # 2 = io + movdqa %xmm10, %xmm3 # 3 : 1/jak + pshufb %xmm4, %xmm3 # 3 = 1/jak + pxor %xmm1, %xmm3 # 3 = jo + movdqa %xmm13, %xmm4 # 4 : sbou + pshufb %xmm2, %xmm4 # 4 = sbou + movdqa %xmm12, %xmm0 # 0 : sbot + pshufb %xmm3, %xmm0 # 0 = sb1t + pxor %xmm4, %xmm0 # 0 = sbox output + + # add in smeared stuff + pxor %xmm7, %xmm0 + movdqa %xmm0, %xmm7 + ret +.cfi_endproc +.size _vpaes_schedule_round,.-_vpaes_schedule_round + +## +## .aes_schedule_transform +## +## Linear-transform %xmm0 according to tables at (%r11) +## +## Requires that %xmm9 = 0x0F0F... as in preheat +## Output in %xmm0 +## Clobbers %xmm1, %xmm2 +## +.type _vpaes_schedule_transform,\@abi-omnipotent +.align 16 +_vpaes_schedule_transform: +.cfi_startproc + movdqa %xmm9, %xmm1 + pandn %xmm0, %xmm1 + psrld \$4, %xmm1 + pand %xmm9, %xmm0 + movdqa (%r11), %xmm2 # lo + pshufb %xmm0, %xmm2 + movdqa 16(%r11), %xmm0 # hi + pshufb %xmm1, %xmm0 + pxor %xmm2, %xmm0 + ret +.cfi_endproc +.size _vpaes_schedule_transform,.-_vpaes_schedule_transform + +## +## .aes_schedule_mangle +## +## Mangle xmm0 from (basis-transformed) standard version +## to our version. +## +## On encrypt, +## xor with 0x63 +## multiply by circulant 0,1,1,1 +## apply shiftrows transform +## +## On decrypt, +## xor with 0x63 +## multiply by "inverse mixcolumns" circulant E,B,D,9 +## deskew +## apply shiftrows transform +## +## +## Writes out to (%rdx), and increments or decrements it +## Keeps track of round number mod 4 in %r8 +## Preserves xmm0 +## Clobbers xmm1-xmm5 +## +.type _vpaes_schedule_mangle,\@abi-omnipotent +.align 16 +_vpaes_schedule_mangle: +.cfi_startproc + movdqa %xmm0, %xmm4 # save xmm0 for later + movdqa .Lk_mc_forward(%rip),%xmm5 + + # encrypting + add \$16, %rdx + pxor .Lk_s63(%rip),%xmm4 + pshufb %xmm5, %xmm4 + movdqa %xmm4, %xmm3 + pshufb %xmm5, %xmm4 + pxor %xmm4, %xmm3 + pshufb %xmm5, %xmm4 + pxor %xmm4, %xmm3 + +.Lschedule_mangle_both: + movdqa (%r8,%r10),%xmm1 + pshufb %xmm1,%xmm3 + add \$-16, %r8 + and \$0x30, %r8 + movdqu %xmm3, (%rdx) + ret +.cfi_endproc +.size _vpaes_schedule_mangle,.-_vpaes_schedule_mangle + +# +# Interface to OpenSSL +# +.globl GFp_${PREFIX}_set_encrypt_key +.type GFp_${PREFIX}_set_encrypt_key,\@function,3 +.align 16 +GFp_${PREFIX}_set_encrypt_key: +.cfi_startproc +#ifdef BORINGSSL_DISPATCH_TEST +.extern BORINGSSL_function_hit + movb \$1, BORINGSSL_function_hit+5(%rip) +#endif + +___ +$code.=<<___ if ($win64); + lea -0xb8(%rsp),%rsp + movaps %xmm6,0x10(%rsp) + movaps %xmm7,0x20(%rsp) + movaps %xmm8,0x30(%rsp) + movaps %xmm9,0x40(%rsp) + movaps %xmm10,0x50(%rsp) + movaps %xmm11,0x60(%rsp) + movaps %xmm12,0x70(%rsp) + movaps %xmm13,0x80(%rsp) + movaps %xmm14,0x90(%rsp) + movaps %xmm15,0xa0(%rsp) +.Lenc_key_body: +___ +$code.=<<___; + mov %esi,%eax + shr \$5,%eax + add \$5,%eax + mov %eax,240(%rdx) # AES_KEY->rounds = nbits/32+5; + + mov \$0,%ecx + mov \$0x30,%r8d + call _vpaes_schedule_core +___ +$code.=<<___ if ($win64); + movaps 0x10(%rsp),%xmm6 + movaps 0x20(%rsp),%xmm7 + movaps 0x30(%rsp),%xmm8 + movaps 0x40(%rsp),%xmm9 + movaps 0x50(%rsp),%xmm10 + movaps 0x60(%rsp),%xmm11 + movaps 0x70(%rsp),%xmm12 + movaps 0x80(%rsp),%xmm13 + movaps 0x90(%rsp),%xmm14 + movaps 0xa0(%rsp),%xmm15 + lea 0xb8(%rsp),%rsp +.Lenc_key_epilogue: +___ +$code.=<<___; + xor %eax,%eax + ret +.cfi_endproc +.size GFp_${PREFIX}_set_encrypt_key,.-GFp_${PREFIX}_set_encrypt_key + +.globl GFp_${PREFIX}_encrypt +.type GFp_${PREFIX}_encrypt,\@function,3 +.align 16 +GFp_${PREFIX}_encrypt: +.cfi_startproc +___ +$code.=<<___ if ($win64); + lea -0xb8(%rsp),%rsp + movaps %xmm6,0x10(%rsp) + movaps %xmm7,0x20(%rsp) + movaps %xmm8,0x30(%rsp) + movaps %xmm9,0x40(%rsp) + movaps %xmm10,0x50(%rsp) + movaps %xmm11,0x60(%rsp) + movaps %xmm12,0x70(%rsp) + movaps %xmm13,0x80(%rsp) + movaps %xmm14,0x90(%rsp) + movaps %xmm15,0xa0(%rsp) +.Lenc_body: +___ +$code.=<<___; + movdqu (%rdi),%xmm0 + call _vpaes_preheat + call _vpaes_encrypt_core + movdqu %xmm0,(%rsi) +___ +$code.=<<___ if ($win64); + movaps 0x10(%rsp),%xmm6 + movaps 0x20(%rsp),%xmm7 + movaps 0x30(%rsp),%xmm8 + movaps 0x40(%rsp),%xmm9 + movaps 0x50(%rsp),%xmm10 + movaps 0x60(%rsp),%xmm11 + movaps 0x70(%rsp),%xmm12 + movaps 0x80(%rsp),%xmm13 + movaps 0x90(%rsp),%xmm14 + movaps 0xa0(%rsp),%xmm15 + lea 0xb8(%rsp),%rsp +.Lenc_epilogue: +___ +$code.=<<___; + ret +.cfi_endproc +.size GFp_${PREFIX}_encrypt,.-GFp_${PREFIX}_encrypt +___ +{ +my ($inp,$out,$blocks,$key,$ivp)=("%rdi","%rsi","%rdx","%rcx","%r8"); +# void GFp_vpaes_ctr32_encrypt_blocks(const uint8_t *inp, uint8_t *out, +# size_t blocks, const AES_KEY *key, +# const uint8_t ivp[16]); +$code.=<<___; +.globl GFp_${PREFIX}_ctr32_encrypt_blocks +.type GFp_${PREFIX}_ctr32_encrypt_blocks,\@function,5 +.align 16 +GFp_${PREFIX}_ctr32_encrypt_blocks: +.cfi_startproc + # _vpaes_encrypt_core and _vpaes_encrypt_core_2x expect the key in %rdx. + xchg $key, $blocks +___ +($blocks,$key)=($key,$blocks); +$code.=<<___; + test $blocks, $blocks + jz .Lctr32_abort +___ +$code.=<<___ if ($win64); + lea -0xb8(%rsp),%rsp + movaps %xmm6,0x10(%rsp) + movaps %xmm7,0x20(%rsp) + movaps %xmm8,0x30(%rsp) + movaps %xmm9,0x40(%rsp) + movaps %xmm10,0x50(%rsp) + movaps %xmm11,0x60(%rsp) + movaps %xmm12,0x70(%rsp) + movaps %xmm13,0x80(%rsp) + movaps %xmm14,0x90(%rsp) + movaps %xmm15,0xa0(%rsp) +.Lctr32_body: +___ +$code.=<<___; + movdqu ($ivp), %xmm0 # Load IV. + movdqa .Lctr_add_one(%rip), %xmm8 + sub $inp, $out # This allows only incrementing $inp. + call _vpaes_preheat + movdqa %xmm0, %xmm6 + pshufb .Lrev_ctr(%rip), %xmm6 + + test \$1, $blocks + jz .Lctr32_prep_loop + + # Handle one block so the remaining block count is even for + # _vpaes_encrypt_core_2x. + movdqu ($inp), %xmm7 # Load input. + call _vpaes_encrypt_core + pxor %xmm7, %xmm0 + paddd %xmm8, %xmm6 + movdqu %xmm0, ($out,$inp) + sub \$1, $blocks + lea 16($inp), $inp + jz .Lctr32_done + +.Lctr32_prep_loop: + # _vpaes_encrypt_core_2x leaves only %xmm14 and %xmm15 as spare + # registers. We maintain two byte-swapped counters in them. + movdqa %xmm6, %xmm14 + movdqa %xmm6, %xmm15 + paddd %xmm8, %xmm15 + +.Lctr32_loop: + movdqa .Lrev_ctr(%rip), %xmm1 # Set up counters. + movdqa %xmm14, %xmm0 + movdqa %xmm15, %xmm6 + pshufb %xmm1, %xmm0 + pshufb %xmm1, %xmm6 + call _vpaes_encrypt_core_2x + movdqu ($inp), %xmm1 # Load input. + movdqu 16($inp), %xmm2 + movdqa .Lctr_add_two(%rip), %xmm3 + pxor %xmm1, %xmm0 # XOR input. + pxor %xmm2, %xmm6 + paddd %xmm3, %xmm14 # Increment counters. + paddd %xmm3, %xmm15 + movdqu %xmm0, ($out,$inp) # Write output. + movdqu %xmm6, 16($out,$inp) + sub \$2, $blocks # Advance loop. + lea 32($inp), $inp + jnz .Lctr32_loop + +.Lctr32_done: +___ +$code.=<<___ if ($win64); + movaps 0x10(%rsp),%xmm6 + movaps 0x20(%rsp),%xmm7 + movaps 0x30(%rsp),%xmm8 + movaps 0x40(%rsp),%xmm9 + movaps 0x50(%rsp),%xmm10 + movaps 0x60(%rsp),%xmm11 + movaps 0x70(%rsp),%xmm12 + movaps 0x80(%rsp),%xmm13 + movaps 0x90(%rsp),%xmm14 + movaps 0xa0(%rsp),%xmm15 + lea 0xb8(%rsp),%rsp +.Lctr32_epilogue: +___ +$code.=<<___; +.Lctr32_abort: + ret +.cfi_endproc +.size GFp_${PREFIX}_ctr32_encrypt_blocks,.-GFp_${PREFIX}_ctr32_encrypt_blocks +___ +} +$code.=<<___; +## +## _aes_preheat +## +## Fills register %r10 -> .aes_consts (so you can -fPIC) +## and %xmm9-%xmm15 as specified below. +## +.type _vpaes_preheat,\@abi-omnipotent +.align 16 +_vpaes_preheat: +.cfi_startproc + lea .Lk_s0F(%rip), %r10 + movdqa -0x20(%r10), %xmm10 # .Lk_inv + movdqa -0x10(%r10), %xmm11 # .Lk_inv+16 + movdqa 0x00(%r10), %xmm9 # .Lk_s0F + movdqa 0x30(%r10), %xmm13 # .Lk_sb1 + movdqa 0x40(%r10), %xmm12 # .Lk_sb1+16 + movdqa 0x50(%r10), %xmm15 # .Lk_sb2 + movdqa 0x60(%r10), %xmm14 # .Lk_sb2+16 + ret +.cfi_endproc +.size _vpaes_preheat,.-_vpaes_preheat +######################################################## +## ## +## Constants ## +## ## +######################################################## +.type _vpaes_consts,\@object +.align 64 +_vpaes_consts: +.Lk_inv: # inv, inva + .quad 0x0E05060F0D080180, 0x040703090A0B0C02 + .quad 0x01040A060F0B0780, 0x030D0E0C02050809 + +.Lk_s0F: # s0F + .quad 0x0F0F0F0F0F0F0F0F, 0x0F0F0F0F0F0F0F0F + +.Lk_ipt: # input transform (lo, hi) + .quad 0xC2B2E8985A2A7000, 0xCABAE09052227808 + .quad 0x4C01307D317C4D00, 0xCD80B1FCB0FDCC81 + +.Lk_sb1: # sb1u, sb1t + .quad 0xB19BE18FCB503E00, 0xA5DF7A6E142AF544 + .quad 0x3618D415FAE22300, 0x3BF7CCC10D2ED9EF +.Lk_sb2: # sb2u, sb2t + .quad 0xE27A93C60B712400, 0x5EB7E955BC982FCD + .quad 0x69EB88400AE12900, 0xC2A163C8AB82234A +.Lk_sbo: # sbou, sbot + .quad 0xD0D26D176FBDC700, 0x15AABF7AC502A878 + .quad 0xCFE474A55FBB6A00, 0x8E1E90D1412B35FA + +.Lk_mc_forward: # mc_forward + .quad 0x0407060500030201, 0x0C0F0E0D080B0A09 + .quad 0x080B0A0904070605, 0x000302010C0F0E0D + .quad 0x0C0F0E0D080B0A09, 0x0407060500030201 + .quad 0x000302010C0F0E0D, 0x080B0A0904070605 + +.Lk_mc_backward:# mc_backward + .quad 0x0605040702010003, 0x0E0D0C0F0A09080B + .quad 0x020100030E0D0C0F, 0x0A09080B06050407 + .quad 0x0E0D0C0F0A09080B, 0x0605040702010003 + .quad 0x0A09080B06050407, 0x020100030E0D0C0F + +.Lk_sr: # sr + .quad 0x0706050403020100, 0x0F0E0D0C0B0A0908 + .quad 0x030E09040F0A0500, 0x0B06010C07020D08 + .quad 0x0F060D040B020900, 0x070E050C030A0108 + .quad 0x0B0E0104070A0D00, 0x0306090C0F020508 + +.Lk_rcon: # rcon + .quad 0x1F8391B9AF9DEEB6, 0x702A98084D7C7D81 + +.Lk_s63: # s63: all equal to 0x63 transformed + .quad 0x5B5B5B5B5B5B5B5B, 0x5B5B5B5B5B5B5B5B + +.Lk_opt: # output transform + .quad 0xFF9F4929D6B66000, 0xF7974121DEBE6808 + .quad 0x01EDBD5150BCEC00, 0xE10D5DB1B05C0CE0 + +.Lk_deskew: # deskew tables: inverts the sbox's "skew" + .quad 0x07E4A34047A4E300, 0x1DFEB95A5DBEF91A + .quad 0x5F36B5DC83EA6900, 0x2841C2ABF49D1E77 + +# .Lrev_ctr is a permutation which byte-swaps the counter portion of the IV. +.Lrev_ctr: + .quad 0x0706050403020100, 0x0c0d0e0f0b0a0908 +# .Lctr_add_* may be added to a byte-swapped xmm register to increment the +# counter. The register must be byte-swapped again to form the actual input. +.Lctr_add_one: + .quad 0x0000000000000000, 0x0000000100000000 +.Lctr_add_two: + .quad 0x0000000000000000, 0x0000000200000000 + +.asciz "Vector Permutation AES for x86_64/SSSE3, Mike Hamburg (Stanford University)" +.align 64 +.size _vpaes_consts,.-_vpaes_consts +___ + +if ($win64) { +# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame, +# CONTEXT *context,DISPATCHER_CONTEXT *disp) +$rec="%rcx"; +$frame="%rdx"; +$context="%r8"; +$disp="%r9"; + +$code.=<<___; +.extern __imp_RtlVirtualUnwind +.type se_handler,\@abi-omnipotent +.align 16 +se_handler: + push %rsi + push %rdi + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + pushfq + sub \$64,%rsp + + mov 120($context),%rax # pull context->Rax + mov 248($context),%rbx # pull context->Rip + + mov 8($disp),%rsi # disp->ImageBase + mov 56($disp),%r11 # disp->HandlerData + + mov 0(%r11),%r10d # HandlerData[0] + lea (%rsi,%r10),%r10 # prologue label + cmp %r10,%rbx # context->RipRsp + + mov 4(%r11),%r10d # HandlerData[1] + lea (%rsi,%r10),%r10 # epilogue label + cmp %r10,%rbx # context->Rip>=epilogue label + jae .Lin_prologue + + lea 16(%rax),%rsi # %xmm save area + lea 512($context),%rdi # &context.Xmm6 + mov \$20,%ecx # 10*sizeof(%xmm0)/sizeof(%rax) + .long 0xa548f3fc # cld; rep movsq + lea 0xb8(%rax),%rax # adjust stack pointer + +.Lin_prologue: + mov 8(%rax),%rdi + mov 16(%rax),%rsi + mov %rax,152($context) # restore context->Rsp + mov %rsi,168($context) # restore context->Rsi + mov %rdi,176($context) # restore context->Rdi + + mov 40($disp),%rdi # disp->ContextRecord + mov $context,%rsi # context + mov \$`1232/8`,%ecx # sizeof(CONTEXT) + .long 0xa548f3fc # cld; rep movsq + + mov $disp,%rsi + xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER + mov 8(%rsi),%rdx # arg2, disp->ImageBase + mov 0(%rsi),%r8 # arg3, disp->ControlPc + mov 16(%rsi),%r9 # arg4, disp->FunctionEntry + mov 40(%rsi),%r10 # disp->ContextRecord + lea 56(%rsi),%r11 # &disp->HandlerData + lea 24(%rsi),%r12 # &disp->EstablisherFrame + mov %r10,32(%rsp) # arg5 + mov %r11,40(%rsp) # arg6 + mov %r12,48(%rsp) # arg7 + mov %rcx,56(%rsp) # arg8, (NULL) + call *__imp_RtlVirtualUnwind(%rip) + + mov \$1,%eax # ExceptionContinueSearch + add \$64,%rsp + popfq + pop %r15 + pop %r14 + pop %r13 + pop %r12 + pop %rbp + pop %rbx + pop %rdi + pop %rsi + ret +.size se_handler,.-se_handler + +.section .pdata +.align 4 + .rva .LSEH_begin_GFp_${PREFIX}_set_encrypt_key + .rva .LSEH_end_GFp_${PREFIX}_set_encrypt_key + .rva .LSEH_info_GFp_${PREFIX}_set_encrypt_key + + .rva .LSEH_begin_GFp_${PREFIX}_encrypt + .rva .LSEH_end_GFp_${PREFIX}_encrypt + .rva .LSEH_info_GFp_${PREFIX}_encrypt + .rva .LSEH_begin_GFp_${PREFIX}_ctr32_encrypt_blocks + .rva .LSEH_end_GFp_${PREFIX}_ctr32_encrypt_blocks + .rva .LSEH_info_GFp_${PREFIX}_ctr32_encrypt_blocks + +.section .xdata +.align 8 +.LSEH_info_GFp_${PREFIX}_set_encrypt_key: + .byte 9,0,0,0 + .rva se_handler + .rva .Lenc_key_body,.Lenc_key_epilogue # HandlerData[] +.LSEH_info_GFp_${PREFIX}_encrypt: + .byte 9,0,0,0 + .rva se_handler + .rva .Lenc_body,.Lenc_epilogue # HandlerData[] +.LSEH_info_GFp_${PREFIX}_ctr32_encrypt_blocks: + .byte 9,0,0,0 + .rva se_handler + .rva .Lctr32_body,.Lctr32_epilogue # HandlerData[] +___ +} + +$code =~ s/\`([^\`]*)\`/eval($1)/gem; + +print $code; + +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/fipsmodule/bn/asm/armv4-mont.pl b/vendor/ring/crypto/fipsmodule/bn/asm/armv4-mont.pl new file mode 100644 index 00000000..dbc28b51 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/bn/asm/armv4-mont.pl @@ -0,0 +1,761 @@ +#! /usr/bin/env perl +# Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== + +# January 2007. + +# Montgomery multiplication for ARMv4. +# +# Performance improvement naturally varies among CPU implementations +# and compilers. The code was observed to provide +65-35% improvement +# [depending on key length, less for longer keys] on ARM920T, and +# +115-80% on Intel IXP425. This is compared to pre-bn_mul_mont code +# base and compiler generated code with in-lined umull and even umlal +# instructions. The latter means that this code didn't really have an +# "advantage" of utilizing some "secret" instruction. +# +# The code is interoperable with Thumb ISA and is rather compact, less +# than 1/2KB. Windows CE port would be trivial, as it's exclusively +# about decorations, ABI and instruction syntax are identical. + +# November 2013 +# +# Add NEON code path, which handles lengths divisible by 8. RSA/DSA +# performance improvement on Cortex-A8 is ~45-100% depending on key +# length, more for longer keys. On Cortex-A15 the span is ~10-105%. +# On Snapdragon S4 improvement was measured to vary from ~70% to +# incredible ~380%, yes, 4.8x faster, for RSA4096 sign. But this is +# rather because original integer-only code seems to perform +# suboptimally on S4. Situation on Cortex-A9 is unfortunately +# different. It's being looked into, but the trouble is that +# performance for vectors longer than 256 bits is actually couple +# of percent worse than for integer-only code. The code is chosen +# for execution on all NEON-capable processors, because gain on +# others outweighs the marginal loss on Cortex-A9. + +# September 2015 +# +# Align Cortex-A9 performance with November 2013 improvements, i.e. +# NEON code is now ~20-105% faster than integer-only one on this +# processor. But this optimization further improved performance even +# on other processors: NEON code path is ~45-180% faster than original +# integer-only on Cortex-A8, ~10-210% on Cortex-A15, ~70-450% on +# Snapdragon S4. + +$flavour = shift; +if ($flavour=~/\w[\w\-]*\.\w+$/) { $output=$flavour; undef $flavour; } +else { while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} } + +if ($flavour && $flavour ne "void") { + $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; + ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or + ( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or + die "can't locate arm-xlate.pl"; + + open OUT,"| \"$^X\" $xlate $flavour $output"; + *STDOUT=*OUT; +} else { + open OUT,">$output"; + *STDOUT=*OUT; +} + +$num="r0"; # starts as num argument, but holds &tp[num-1] +$ap="r1"; +$bp="r2"; $bi="r2"; $rp="r2"; +$np="r3"; +$tp="r4"; +$aj="r5"; +$nj="r6"; +$tj="r7"; +$n0="r8"; +########### # r9 is reserved by ELF as platform specific, e.g. TLS pointer +$alo="r10"; # sl, gcc uses it to keep @GOT +$ahi="r11"; # fp +$nlo="r12"; # ip +########### # r13 is stack pointer +$nhi="r14"; # lr +########### # r15 is program counter + +#### argument block layout relative to &tp[num-1], a.k.a. $num +$_rp="$num,#12*4"; +# ap permanently resides in r1 +$_bp="$num,#13*4"; +# np permanently resides in r3 +$_n0="$num,#14*4"; +$_num="$num,#15*4"; $_bpend=$_num; + +$code=<<___; +#include + +@ Silence ARMv8 deprecated IT instruction warnings. This file is used by both +@ ARMv7 and ARMv8 processors and does not use ARMv8 instructions. +.arch armv7-a + +.text +#if defined(__thumb2__) +.syntax unified +.thumb +#else +.code 32 +#endif + +#if __ARM_MAX_ARCH__>=7 +.extern GFp_armcap_P +.hidden GFp_armcap_P +.align 5 +.LOPENSSL_armcap: +.word GFp_armcap_P-.Lbn_mul_mont +#endif + +.global GFp_bn_mul_mont +.type GFp_bn_mul_mont,%function + +.align 5 +GFp_bn_mul_mont: +.Lbn_mul_mont: + ldr ip,[sp,#4] @ load num + stmdb sp!,{r0,r2} @ sp points at argument block +#if __ARM_MAX_ARCH__>=7 + tst ip,#7 + bne .Lialu + adr r0,.Lbn_mul_mont + ldr r2,.LOPENSSL_armcap + ldr r0,[r0,r2] +#ifdef __APPLE__ + ldr r0,[r0] +#endif + tst r0,#ARMV7_NEON @ NEON available? + ldmia sp, {r0,r2} + beq .Lialu + add sp,sp,#8 + b bn_mul8x_mont_neon +.align 4 +.Lialu: +#endif + cmp ip,#2 + mov $num,ip @ load num +#ifdef __thumb2__ + ittt lt +#endif + movlt r0,#0 + addlt sp,sp,#2*4 + blt .Labrt + + stmdb sp!,{r4-r12,lr} @ save 10 registers + + mov $num,$num,lsl#2 @ rescale $num for byte count + sub sp,sp,$num @ alloca(4*num) + sub sp,sp,#4 @ +extra dword + sub $num,$num,#4 @ "num=num-1" + add $tp,$bp,$num @ &bp[num-1] + + add $num,sp,$num @ $num to point at &tp[num-1] + ldr $n0,[$_n0] @ &n0 + ldr $bi,[$bp] @ bp[0] + ldr $aj,[$ap],#4 @ ap[0],ap++ + ldr $nj,[$np],#4 @ np[0],np++ + ldr $n0,[$n0] @ *n0 + str $tp,[$_bpend] @ save &bp[num] + + umull $alo,$ahi,$aj,$bi @ ap[0]*bp[0] + str $n0,[$_n0] @ save n0 value + mul $n0,$alo,$n0 @ "tp[0]"*n0 + mov $nlo,#0 + umlal $alo,$nlo,$nj,$n0 @ np[0]*n0+"t[0]" + mov $tp,sp + +.L1st: + ldr $aj,[$ap],#4 @ ap[j],ap++ + mov $alo,$ahi + ldr $nj,[$np],#4 @ np[j],np++ + mov $ahi,#0 + umlal $alo,$ahi,$aj,$bi @ ap[j]*bp[0] + mov $nhi,#0 + umlal $nlo,$nhi,$nj,$n0 @ np[j]*n0 + adds $nlo,$nlo,$alo + str $nlo,[$tp],#4 @ tp[j-1]=,tp++ + adc $nlo,$nhi,#0 + cmp $tp,$num + bne .L1st + + adds $nlo,$nlo,$ahi + ldr $tp,[$_bp] @ restore bp + mov $nhi,#0 + ldr $n0,[$_n0] @ restore n0 + adc $nhi,$nhi,#0 + str $nlo,[$num] @ tp[num-1]= + mov $tj,sp + str $nhi,[$num,#4] @ tp[num]= + +.Louter: + sub $tj,$num,$tj @ "original" $num-1 value + sub $ap,$ap,$tj @ "rewind" ap to &ap[1] + ldr $bi,[$tp,#4]! @ *(++bp) + sub $np,$np,$tj @ "rewind" np to &np[1] + ldr $aj,[$ap,#-4] @ ap[0] + ldr $alo,[sp] @ tp[0] + ldr $nj,[$np,#-4] @ np[0] + ldr $tj,[sp,#4] @ tp[1] + + mov $ahi,#0 + umlal $alo,$ahi,$aj,$bi @ ap[0]*bp[i]+tp[0] + str $tp,[$_bp] @ save bp + mul $n0,$alo,$n0 + mov $nlo,#0 + umlal $alo,$nlo,$nj,$n0 @ np[0]*n0+"tp[0]" + mov $tp,sp + +.Linner: + ldr $aj,[$ap],#4 @ ap[j],ap++ + adds $alo,$ahi,$tj @ +=tp[j] + ldr $nj,[$np],#4 @ np[j],np++ + mov $ahi,#0 + umlal $alo,$ahi,$aj,$bi @ ap[j]*bp[i] + mov $nhi,#0 + umlal $nlo,$nhi,$nj,$n0 @ np[j]*n0 + adc $ahi,$ahi,#0 + ldr $tj,[$tp,#8] @ tp[j+1] + adds $nlo,$nlo,$alo + str $nlo,[$tp],#4 @ tp[j-1]=,tp++ + adc $nlo,$nhi,#0 + cmp $tp,$num + bne .Linner + + adds $nlo,$nlo,$ahi + mov $nhi,#0 + ldr $tp,[$_bp] @ restore bp + adc $nhi,$nhi,#0 + ldr $n0,[$_n0] @ restore n0 + adds $nlo,$nlo,$tj + ldr $tj,[$_bpend] @ restore &bp[num] + adc $nhi,$nhi,#0 + str $nlo,[$num] @ tp[num-1]= + str $nhi,[$num,#4] @ tp[num]= + + cmp $tp,$tj +#ifdef __thumb2__ + itt ne +#endif + movne $tj,sp + bne .Louter + + ldr $rp,[$_rp] @ pull rp + mov $aj,sp + add $num,$num,#4 @ $num to point at &tp[num] + sub $aj,$num,$aj @ "original" num value + mov $tp,sp @ "rewind" $tp + mov $ap,$tp @ "borrow" $ap + sub $np,$np,$aj @ "rewind" $np to &np[0] + + subs $tj,$tj,$tj @ "clear" carry flag +.Lsub: ldr $tj,[$tp],#4 + ldr $nj,[$np],#4 + sbcs $tj,$tj,$nj @ tp[j]-np[j] + str $tj,[$rp],#4 @ rp[j]= + teq $tp,$num @ preserve carry + bne .Lsub + sbcs $nhi,$nhi,#0 @ upmost carry + mov $tp,sp @ "rewind" $tp + sub $rp,$rp,$aj @ "rewind" $rp + +.Lcopy: ldr $tj,[$tp] @ conditional copy + ldr $aj,[$rp] + str sp,[$tp],#4 @ zap tp +#ifdef __thumb2__ + it cc +#endif + movcc $aj,$tj + str $aj,[$rp],#4 + teq $tp,$num @ preserve carry + bne .Lcopy + + mov sp,$num + add sp,sp,#4 @ skip over tp[num+1] + ldmia sp!,{r4-r12,lr} @ restore registers + add sp,sp,#2*4 @ skip over {r0,r2} + mov r0,#1 +.Labrt: +#if __ARM_ARCH__>=5 + ret @ bx lr +#else + tst lr,#1 + moveq pc,lr @ be binary compatible with V4, yet + bx lr @ interoperable with Thumb ISA:-) +#endif +.size GFp_bn_mul_mont,.-GFp_bn_mul_mont +___ +{ +my ($A0,$A1,$A2,$A3)=map("d$_",(0..3)); +my ($N0,$N1,$N2,$N3)=map("d$_",(4..7)); +my ($Z,$Temp)=("q4","q5"); +my @ACC=map("q$_",(6..13)); +my ($Bi,$Ni,$M0)=map("d$_",(28..31)); +my $zero="$Z#lo"; +my $temp="$Temp#lo"; + +my ($rptr,$aptr,$bptr,$nptr,$n0,$num)=map("r$_",(0..5)); +my ($tinptr,$toutptr,$inner,$outer,$bnptr)=map("r$_",(6..11)); + +$code.=<<___; +#if __ARM_MAX_ARCH__>=7 +.arch armv7-a +.fpu neon + +.type bn_mul8x_mont_neon,%function +.align 5 +bn_mul8x_mont_neon: + mov ip,sp + stmdb sp!,{r4-r11} + vstmdb sp!,{d8-d15} @ ABI specification says so + ldmia ip,{r4-r5} @ load rest of parameter block + mov ip,sp + + cmp $num,#8 + bhi .LNEON_8n + + @ special case for $num==8, everything is in register bank... + + vld1.32 {${Bi}[0]}, [$bptr,:32]! + veor $zero,$zero,$zero + sub $toutptr,sp,$num,lsl#4 + vld1.32 {$A0-$A3}, [$aptr]! @ can't specify :32 :-( + and $toutptr,$toutptr,#-64 + vld1.32 {${M0}[0]}, [$n0,:32] + mov sp,$toutptr @ alloca + vzip.16 $Bi,$zero + + vmull.u32 @ACC[0],$Bi,${A0}[0] + vmull.u32 @ACC[1],$Bi,${A0}[1] + vmull.u32 @ACC[2],$Bi,${A1}[0] + vshl.i64 $Ni,@ACC[0]#hi,#16 + vmull.u32 @ACC[3],$Bi,${A1}[1] + + vadd.u64 $Ni,$Ni,@ACC[0]#lo + veor $zero,$zero,$zero + vmul.u32 $Ni,$Ni,$M0 + + vmull.u32 @ACC[4],$Bi,${A2}[0] + vld1.32 {$N0-$N3}, [$nptr]! + vmull.u32 @ACC[5],$Bi,${A2}[1] + vmull.u32 @ACC[6],$Bi,${A3}[0] + vzip.16 $Ni,$zero + vmull.u32 @ACC[7],$Bi,${A3}[1] + + vmlal.u32 @ACC[0],$Ni,${N0}[0] + sub $outer,$num,#1 + vmlal.u32 @ACC[1],$Ni,${N0}[1] + vmlal.u32 @ACC[2],$Ni,${N1}[0] + vmlal.u32 @ACC[3],$Ni,${N1}[1] + + vmlal.u32 @ACC[4],$Ni,${N2}[0] + vmov $Temp,@ACC[0] + vmlal.u32 @ACC[5],$Ni,${N2}[1] + vmov @ACC[0],@ACC[1] + vmlal.u32 @ACC[6],$Ni,${N3}[0] + vmov @ACC[1],@ACC[2] + vmlal.u32 @ACC[7],$Ni,${N3}[1] + vmov @ACC[2],@ACC[3] + vmov @ACC[3],@ACC[4] + vshr.u64 $temp,$temp,#16 + vmov @ACC[4],@ACC[5] + vmov @ACC[5],@ACC[6] + vadd.u64 $temp,$temp,$Temp#hi + vmov @ACC[6],@ACC[7] + veor @ACC[7],@ACC[7] + vshr.u64 $temp,$temp,#16 + + b .LNEON_outer8 + +.align 4 +.LNEON_outer8: + vld1.32 {${Bi}[0]}, [$bptr,:32]! + veor $zero,$zero,$zero + vzip.16 $Bi,$zero + vadd.u64 @ACC[0]#lo,@ACC[0]#lo,$temp + + vmlal.u32 @ACC[0],$Bi,${A0}[0] + vmlal.u32 @ACC[1],$Bi,${A0}[1] + vmlal.u32 @ACC[2],$Bi,${A1}[0] + vshl.i64 $Ni,@ACC[0]#hi,#16 + vmlal.u32 @ACC[3],$Bi,${A1}[1] + + vadd.u64 $Ni,$Ni,@ACC[0]#lo + veor $zero,$zero,$zero + subs $outer,$outer,#1 + vmul.u32 $Ni,$Ni,$M0 + + vmlal.u32 @ACC[4],$Bi,${A2}[0] + vmlal.u32 @ACC[5],$Bi,${A2}[1] + vmlal.u32 @ACC[6],$Bi,${A3}[0] + vzip.16 $Ni,$zero + vmlal.u32 @ACC[7],$Bi,${A3}[1] + + vmlal.u32 @ACC[0],$Ni,${N0}[0] + vmlal.u32 @ACC[1],$Ni,${N0}[1] + vmlal.u32 @ACC[2],$Ni,${N1}[0] + vmlal.u32 @ACC[3],$Ni,${N1}[1] + + vmlal.u32 @ACC[4],$Ni,${N2}[0] + vmov $Temp,@ACC[0] + vmlal.u32 @ACC[5],$Ni,${N2}[1] + vmov @ACC[0],@ACC[1] + vmlal.u32 @ACC[6],$Ni,${N3}[0] + vmov @ACC[1],@ACC[2] + vmlal.u32 @ACC[7],$Ni,${N3}[1] + vmov @ACC[2],@ACC[3] + vmov @ACC[3],@ACC[4] + vshr.u64 $temp,$temp,#16 + vmov @ACC[4],@ACC[5] + vmov @ACC[5],@ACC[6] + vadd.u64 $temp,$temp,$Temp#hi + vmov @ACC[6],@ACC[7] + veor @ACC[7],@ACC[7] + vshr.u64 $temp,$temp,#16 + + bne .LNEON_outer8 + + vadd.u64 @ACC[0]#lo,@ACC[0]#lo,$temp + mov $toutptr,sp + vshr.u64 $temp,@ACC[0]#lo,#16 + mov $inner,$num + vadd.u64 @ACC[0]#hi,@ACC[0]#hi,$temp + add $tinptr,sp,#96 + vshr.u64 $temp,@ACC[0]#hi,#16 + vzip.16 @ACC[0]#lo,@ACC[0]#hi + + b .LNEON_tail_entry + +.align 4 +.LNEON_8n: + veor @ACC[0],@ACC[0],@ACC[0] + sub $toutptr,sp,#128 + veor @ACC[1],@ACC[1],@ACC[1] + sub $toutptr,$toutptr,$num,lsl#4 + veor @ACC[2],@ACC[2],@ACC[2] + and $toutptr,$toutptr,#-64 + veor @ACC[3],@ACC[3],@ACC[3] + mov sp,$toutptr @ alloca + veor @ACC[4],@ACC[4],@ACC[4] + add $toutptr,$toutptr,#256 + veor @ACC[5],@ACC[5],@ACC[5] + sub $inner,$num,#8 + veor @ACC[6],@ACC[6],@ACC[6] + veor @ACC[7],@ACC[7],@ACC[7] + +.LNEON_8n_init: + vst1.64 {@ACC[0]-@ACC[1]},[$toutptr,:256]! + subs $inner,$inner,#8 + vst1.64 {@ACC[2]-@ACC[3]},[$toutptr,:256]! + vst1.64 {@ACC[4]-@ACC[5]},[$toutptr,:256]! + vst1.64 {@ACC[6]-@ACC[7]},[$toutptr,:256]! + bne .LNEON_8n_init + + add $tinptr,sp,#256 + vld1.32 {$A0-$A3},[$aptr]! + add $bnptr,sp,#8 + vld1.32 {${M0}[0]},[$n0,:32] + mov $outer,$num + b .LNEON_8n_outer + +.align 4 +.LNEON_8n_outer: + vld1.32 {${Bi}[0]},[$bptr,:32]! @ *b++ + veor $zero,$zero,$zero + vzip.16 $Bi,$zero + add $toutptr,sp,#128 + vld1.32 {$N0-$N3},[$nptr]! + + vmlal.u32 @ACC[0],$Bi,${A0}[0] + vmlal.u32 @ACC[1],$Bi,${A0}[1] + veor $zero,$zero,$zero + vmlal.u32 @ACC[2],$Bi,${A1}[0] + vshl.i64 $Ni,@ACC[0]#hi,#16 + vmlal.u32 @ACC[3],$Bi,${A1}[1] + vadd.u64 $Ni,$Ni,@ACC[0]#lo + vmlal.u32 @ACC[4],$Bi,${A2}[0] + vmul.u32 $Ni,$Ni,$M0 + vmlal.u32 @ACC[5],$Bi,${A2}[1] + vst1.32 {$Bi},[sp,:64] @ put aside smashed b[8*i+0] + vmlal.u32 @ACC[6],$Bi,${A3}[0] + vzip.16 $Ni,$zero + vmlal.u32 @ACC[7],$Bi,${A3}[1] +___ +for ($i=0; $i<7;) { +$code.=<<___; + vld1.32 {${Bi}[0]},[$bptr,:32]! @ *b++ + vmlal.u32 @ACC[0],$Ni,${N0}[0] + veor $temp,$temp,$temp + vmlal.u32 @ACC[1],$Ni,${N0}[1] + vzip.16 $Bi,$temp + vmlal.u32 @ACC[2],$Ni,${N1}[0] + vshr.u64 @ACC[0]#lo,@ACC[0]#lo,#16 + vmlal.u32 @ACC[3],$Ni,${N1}[1] + vmlal.u32 @ACC[4],$Ni,${N2}[0] + vadd.u64 @ACC[0]#lo,@ACC[0]#lo,@ACC[0]#hi + vmlal.u32 @ACC[5],$Ni,${N2}[1] + vshr.u64 @ACC[0]#lo,@ACC[0]#lo,#16 + vmlal.u32 @ACC[6],$Ni,${N3}[0] + vmlal.u32 @ACC[7],$Ni,${N3}[1] + vadd.u64 @ACC[1]#lo,@ACC[1]#lo,@ACC[0]#lo + vst1.32 {$Ni},[$bnptr,:64]! @ put aside smashed m[8*i+$i] +___ + push(@ACC,shift(@ACC)); $i++; +$code.=<<___; + vmlal.u32 @ACC[0],$Bi,${A0}[0] + vld1.64 {@ACC[7]},[$tinptr,:128]! + vmlal.u32 @ACC[1],$Bi,${A0}[1] + veor $zero,$zero,$zero + vmlal.u32 @ACC[2],$Bi,${A1}[0] + vshl.i64 $Ni,@ACC[0]#hi,#16 + vmlal.u32 @ACC[3],$Bi,${A1}[1] + vadd.u64 $Ni,$Ni,@ACC[0]#lo + vmlal.u32 @ACC[4],$Bi,${A2}[0] + vmul.u32 $Ni,$Ni,$M0 + vmlal.u32 @ACC[5],$Bi,${A2}[1] + vst1.32 {$Bi},[$bnptr,:64]! @ put aside smashed b[8*i+$i] + vmlal.u32 @ACC[6],$Bi,${A3}[0] + vzip.16 $Ni,$zero + vmlal.u32 @ACC[7],$Bi,${A3}[1] +___ +} +$code.=<<___; + vld1.32 {$Bi},[sp,:64] @ pull smashed b[8*i+0] + vmlal.u32 @ACC[0],$Ni,${N0}[0] + vld1.32 {$A0-$A3},[$aptr]! + vmlal.u32 @ACC[1],$Ni,${N0}[1] + vmlal.u32 @ACC[2],$Ni,${N1}[0] + vshr.u64 @ACC[0]#lo,@ACC[0]#lo,#16 + vmlal.u32 @ACC[3],$Ni,${N1}[1] + vmlal.u32 @ACC[4],$Ni,${N2}[0] + vadd.u64 @ACC[0]#lo,@ACC[0]#lo,@ACC[0]#hi + vmlal.u32 @ACC[5],$Ni,${N2}[1] + vshr.u64 @ACC[0]#lo,@ACC[0]#lo,#16 + vmlal.u32 @ACC[6],$Ni,${N3}[0] + vmlal.u32 @ACC[7],$Ni,${N3}[1] + vadd.u64 @ACC[1]#lo,@ACC[1]#lo,@ACC[0]#lo + vst1.32 {$Ni},[$bnptr,:64] @ put aside smashed m[8*i+$i] + add $bnptr,sp,#8 @ rewind +___ + push(@ACC,shift(@ACC)); +$code.=<<___; + sub $inner,$num,#8 + b .LNEON_8n_inner + +.align 4 +.LNEON_8n_inner: + subs $inner,$inner,#8 + vmlal.u32 @ACC[0],$Bi,${A0}[0] + vld1.64 {@ACC[7]},[$tinptr,:128] + vmlal.u32 @ACC[1],$Bi,${A0}[1] + vld1.32 {$Ni},[$bnptr,:64]! @ pull smashed m[8*i+0] + vmlal.u32 @ACC[2],$Bi,${A1}[0] + vld1.32 {$N0-$N3},[$nptr]! + vmlal.u32 @ACC[3],$Bi,${A1}[1] + it ne + addne $tinptr,$tinptr,#16 @ don't advance in last iteration + vmlal.u32 @ACC[4],$Bi,${A2}[0] + vmlal.u32 @ACC[5],$Bi,${A2}[1] + vmlal.u32 @ACC[6],$Bi,${A3}[0] + vmlal.u32 @ACC[7],$Bi,${A3}[1] +___ +for ($i=1; $i<8; $i++) { +$code.=<<___; + vld1.32 {$Bi},[$bnptr,:64]! @ pull smashed b[8*i+$i] + vmlal.u32 @ACC[0],$Ni,${N0}[0] + vmlal.u32 @ACC[1],$Ni,${N0}[1] + vmlal.u32 @ACC[2],$Ni,${N1}[0] + vmlal.u32 @ACC[3],$Ni,${N1}[1] + vmlal.u32 @ACC[4],$Ni,${N2}[0] + vmlal.u32 @ACC[5],$Ni,${N2}[1] + vmlal.u32 @ACC[6],$Ni,${N3}[0] + vmlal.u32 @ACC[7],$Ni,${N3}[1] + vst1.64 {@ACC[0]},[$toutptr,:128]! +___ + push(@ACC,shift(@ACC)); +$code.=<<___; + vmlal.u32 @ACC[0],$Bi,${A0}[0] + vld1.64 {@ACC[7]},[$tinptr,:128] + vmlal.u32 @ACC[1],$Bi,${A0}[1] + vld1.32 {$Ni},[$bnptr,:64]! @ pull smashed m[8*i+$i] + vmlal.u32 @ACC[2],$Bi,${A1}[0] + it ne + addne $tinptr,$tinptr,#16 @ don't advance in last iteration + vmlal.u32 @ACC[3],$Bi,${A1}[1] + vmlal.u32 @ACC[4],$Bi,${A2}[0] + vmlal.u32 @ACC[5],$Bi,${A2}[1] + vmlal.u32 @ACC[6],$Bi,${A3}[0] + vmlal.u32 @ACC[7],$Bi,${A3}[1] +___ +} +$code.=<<___; + it eq + subeq $aptr,$aptr,$num,lsl#2 @ rewind + vmlal.u32 @ACC[0],$Ni,${N0}[0] + vld1.32 {$Bi},[sp,:64] @ pull smashed b[8*i+0] + vmlal.u32 @ACC[1],$Ni,${N0}[1] + vld1.32 {$A0-$A3},[$aptr]! + vmlal.u32 @ACC[2],$Ni,${N1}[0] + add $bnptr,sp,#8 @ rewind + vmlal.u32 @ACC[3],$Ni,${N1}[1] + vmlal.u32 @ACC[4],$Ni,${N2}[0] + vmlal.u32 @ACC[5],$Ni,${N2}[1] + vmlal.u32 @ACC[6],$Ni,${N3}[0] + vst1.64 {@ACC[0]},[$toutptr,:128]! + vmlal.u32 @ACC[7],$Ni,${N3}[1] + + bne .LNEON_8n_inner +___ + push(@ACC,shift(@ACC)); +$code.=<<___; + add $tinptr,sp,#128 + vst1.64 {@ACC[0]-@ACC[1]},[$toutptr,:256]! + veor q2,q2,q2 @ $N0-$N1 + vst1.64 {@ACC[2]-@ACC[3]},[$toutptr,:256]! + veor q3,q3,q3 @ $N2-$N3 + vst1.64 {@ACC[4]-@ACC[5]},[$toutptr,:256]! + vst1.64 {@ACC[6]},[$toutptr,:128] + + subs $outer,$outer,#8 + vld1.64 {@ACC[0]-@ACC[1]},[$tinptr,:256]! + vld1.64 {@ACC[2]-@ACC[3]},[$tinptr,:256]! + vld1.64 {@ACC[4]-@ACC[5]},[$tinptr,:256]! + vld1.64 {@ACC[6]-@ACC[7]},[$tinptr,:256]! + + itt ne + subne $nptr,$nptr,$num,lsl#2 @ rewind + bne .LNEON_8n_outer + + add $toutptr,sp,#128 + vst1.64 {q2-q3}, [sp,:256]! @ start wiping stack frame + vshr.u64 $temp,@ACC[0]#lo,#16 + vst1.64 {q2-q3},[sp,:256]! + vadd.u64 @ACC[0]#hi,@ACC[0]#hi,$temp + vst1.64 {q2-q3}, [sp,:256]! + vshr.u64 $temp,@ACC[0]#hi,#16 + vst1.64 {q2-q3}, [sp,:256]! + vzip.16 @ACC[0]#lo,@ACC[0]#hi + + mov $inner,$num + b .LNEON_tail_entry + +.align 4 +.LNEON_tail: + vadd.u64 @ACC[0]#lo,@ACC[0]#lo,$temp + vshr.u64 $temp,@ACC[0]#lo,#16 + vld1.64 {@ACC[2]-@ACC[3]}, [$tinptr, :256]! + vadd.u64 @ACC[0]#hi,@ACC[0]#hi,$temp + vld1.64 {@ACC[4]-@ACC[5]}, [$tinptr, :256]! + vshr.u64 $temp,@ACC[0]#hi,#16 + vld1.64 {@ACC[6]-@ACC[7]}, [$tinptr, :256]! + vzip.16 @ACC[0]#lo,@ACC[0]#hi + +.LNEON_tail_entry: +___ +for ($i=1; $i<8; $i++) { +$code.=<<___; + vadd.u64 @ACC[1]#lo,@ACC[1]#lo,$temp + vst1.32 {@ACC[0]#lo[0]}, [$toutptr, :32]! + vshr.u64 $temp,@ACC[1]#lo,#16 + vadd.u64 @ACC[1]#hi,@ACC[1]#hi,$temp + vshr.u64 $temp,@ACC[1]#hi,#16 + vzip.16 @ACC[1]#lo,@ACC[1]#hi +___ + push(@ACC,shift(@ACC)); +} + push(@ACC,shift(@ACC)); +$code.=<<___; + vld1.64 {@ACC[0]-@ACC[1]}, [$tinptr, :256]! + subs $inner,$inner,#8 + vst1.32 {@ACC[7]#lo[0]}, [$toutptr, :32]! + bne .LNEON_tail + + vst1.32 {${temp}[0]}, [$toutptr, :32] @ top-most bit + sub $nptr,$nptr,$num,lsl#2 @ rewind $nptr + subs $aptr,sp,#0 @ clear carry flag + add $bptr,sp,$num,lsl#2 + +.LNEON_sub: + ldmia $aptr!, {r4-r7} + ldmia $nptr!, {r8-r11} + sbcs r8, r4,r8 + sbcs r9, r5,r9 + sbcs r10,r6,r10 + sbcs r11,r7,r11 + teq $aptr,$bptr @ preserves carry + stmia $rptr!, {r8-r11} + bne .LNEON_sub + + ldr r10, [$aptr] @ load top-most bit + mov r11,sp + veor q0,q0,q0 + sub r11,$bptr,r11 @ this is num*4 + veor q1,q1,q1 + mov $aptr,sp + sub $rptr,$rptr,r11 @ rewind $rptr + mov $nptr,$bptr @ second 3/4th of frame + sbcs r10,r10,#0 @ result is carry flag + +.LNEON_copy_n_zap: + ldmia $aptr!, {r4-r7} + ldmia $rptr, {r8-r11} + it cc + movcc r8, r4 + vst1.64 {q0-q1}, [$nptr,:256]! @ wipe + itt cc + movcc r9, r5 + movcc r10,r6 + vst1.64 {q0-q1}, [$nptr,:256]! @ wipe + it cc + movcc r11,r7 + ldmia $aptr, {r4-r7} + stmia $rptr!, {r8-r11} + sub $aptr,$aptr,#16 + ldmia $rptr, {r8-r11} + it cc + movcc r8, r4 + vst1.64 {q0-q1}, [$aptr,:256]! @ wipe + itt cc + movcc r9, r5 + movcc r10,r6 + vst1.64 {q0-q1}, [$nptr,:256]! @ wipe + it cc + movcc r11,r7 + teq $aptr,$bptr @ preserves carry + stmia $rptr!, {r8-r11} + bne .LNEON_copy_n_zap + + mov sp,ip + vldmia sp!,{d8-d15} + ldmia sp!,{r4-r11} + ret @ bx lr +.size bn_mul8x_mont_neon,.-bn_mul8x_mont_neon +#endif +___ +} +$code.=<<___; +.asciz "Montgomery multiplication for ARMv4/NEON, CRYPTOGAMS by " +___ + +foreach (split("\n",$code)) { + s/\`([^\`]*)\`/eval $1/ge; + + s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/ge or + s/\bret\b/bx lr/g or + s/\bbx\s+lr\b/.word\t0xe12fff1e/g; # make it possible to compile with -march=armv4 + + print $_,"\n"; +} + +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/fipsmodule/bn/asm/armv8-mont.pl b/vendor/ring/crypto/fipsmodule/bn/asm/armv8-mont.pl new file mode 100644 index 00000000..717ea68c --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/bn/asm/armv8-mont.pl @@ -0,0 +1,1523 @@ +#! /usr/bin/env perl +# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== + +# March 2015 +# +# "Teaser" Montgomery multiplication module for ARMv8. Needs more +# work. While it does improve RSA sign performance by 20-30% (less for +# longer keys) on most processors, for some reason RSA2048 is not +# faster and RSA4096 goes 15-20% slower on Cortex-A57. Multiplication +# instruction issue rate is limited on processor in question, meaning +# that dedicated squaring procedure is a must. Well, actually all +# contemporary AArch64 processors seem to have limited multiplication +# issue rate, i.e. they can't issue multiplication every cycle, which +# explains moderate improvement coefficients in comparison to +# compiler-generated code. Recall that compiler is instructed to use +# umulh and therefore uses same amount of multiplication instructions +# to do the job. Assembly's edge is to minimize number of "collateral" +# instructions and of course instruction scheduling. +# +# April 2015 +# +# Squaring procedure that handles lengths divisible by 8 improves +# RSA/DSA performance by 25-40-60% depending on processor and key +# length. Overall improvement coefficients are always positive in +# comparison to compiler-generated code. On Cortex-A57 improvement +# is still modest on longest key lengths, while others exhibit e.g. +# 50-70% improvement for RSA4096 sign. RSA2048 sign is ~25% faster +# on Cortex-A57 and ~60-100% faster on others. + +$flavour = shift; +$output = shift; + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or +die "can't locate arm-xlate.pl"; + +open OUT,"| \"$^X\" $xlate $flavour $output"; +*STDOUT=*OUT; + +($lo0,$hi0,$aj,$m0,$alo,$ahi, + $lo1,$hi1,$nj,$m1,$nlo,$nhi, + $ovf, $i,$j,$tp,$tj) = map("x$_",6..17,19..24); + +# int GFp_bn_mul_mont( +$rp="x0"; # BN_ULONG *rp, +$ap="x1"; # const BN_ULONG *ap, +$bp="x2"; # const BN_ULONG *bp, +$np="x3"; # const BN_ULONG *np, +$n0="x4"; # const BN_ULONG *n0, +$num="x5"; # size_t num); + +$code.=<<___; +#include + +.text + +.globl GFp_bn_mul_mont +.type GFp_bn_mul_mont,%function +.align 5 +GFp_bn_mul_mont: + AARCH64_SIGN_LINK_REGISTER + tst $num,#7 + b.eq __bn_sqr8x_mont + tst $num,#3 + b.eq __bn_mul4x_mont +.Lmul_mont: + stp x29,x30,[sp,#-64]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + + ldr $m0,[$bp],#8 // bp[0] + sub $tp,sp,$num,lsl#3 + ldp $hi0,$aj,[$ap],#16 // ap[0..1] + lsl $num,$num,#3 + ldr $n0,[$n0] // *n0 + and $tp,$tp,#-16 // ABI says so + ldp $hi1,$nj,[$np],#16 // np[0..1] + + mul $lo0,$hi0,$m0 // ap[0]*bp[0] + sub $j,$num,#16 // j=num-2 + umulh $hi0,$hi0,$m0 + mul $alo,$aj,$m0 // ap[1]*bp[0] + umulh $ahi,$aj,$m0 + + mul $m1,$lo0,$n0 // "tp[0]"*n0 + mov sp,$tp // alloca + + // (*) mul $lo1,$hi1,$m1 // np[0]*m1 + umulh $hi1,$hi1,$m1 + mul $nlo,$nj,$m1 // np[1]*m1 + // (*) adds $lo1,$lo1,$lo0 // discarded + // (*) As for removal of first multiplication and addition + // instructions. The outcome of first addition is + // guaranteed to be zero, which leaves two computationally + // significant outcomes: it either carries or not. Then + // question is when does it carry? Is there alternative + // way to deduce it? If you follow operations, you can + // observe that condition for carry is quite simple: + // $lo0 being non-zero. So that carry can be calculated + // by adding -1 to $lo0. That's what next instruction does. + subs xzr,$lo0,#1 // (*) + umulh $nhi,$nj,$m1 + adc $hi1,$hi1,xzr + cbz $j,.L1st_skip + +.L1st: + ldr $aj,[$ap],#8 + adds $lo0,$alo,$hi0 + sub $j,$j,#8 // j-- + adc $hi0,$ahi,xzr + + ldr $nj,[$np],#8 + adds $lo1,$nlo,$hi1 + mul $alo,$aj,$m0 // ap[j]*bp[0] + adc $hi1,$nhi,xzr + umulh $ahi,$aj,$m0 + + adds $lo1,$lo1,$lo0 + mul $nlo,$nj,$m1 // np[j]*m1 + adc $hi1,$hi1,xzr + umulh $nhi,$nj,$m1 + str $lo1,[$tp],#8 // tp[j-1] + cbnz $j,.L1st + +.L1st_skip: + adds $lo0,$alo,$hi0 + sub $ap,$ap,$num // rewind $ap + adc $hi0,$ahi,xzr + + adds $lo1,$nlo,$hi1 + sub $np,$np,$num // rewind $np + adc $hi1,$nhi,xzr + + adds $lo1,$lo1,$lo0 + sub $i,$num,#8 // i=num-1 + adcs $hi1,$hi1,$hi0 + + adc $ovf,xzr,xzr // upmost overflow bit + stp $lo1,$hi1,[$tp] + +.Louter: + ldr $m0,[$bp],#8 // bp[i] + ldp $hi0,$aj,[$ap],#16 + ldr $tj,[sp] // tp[0] + add $tp,sp,#8 + + mul $lo0,$hi0,$m0 // ap[0]*bp[i] + sub $j,$num,#16 // j=num-2 + umulh $hi0,$hi0,$m0 + ldp $hi1,$nj,[$np],#16 + mul $alo,$aj,$m0 // ap[1]*bp[i] + adds $lo0,$lo0,$tj + umulh $ahi,$aj,$m0 + adc $hi0,$hi0,xzr + + mul $m1,$lo0,$n0 + sub $i,$i,#8 // i-- + + // (*) mul $lo1,$hi1,$m1 // np[0]*m1 + umulh $hi1,$hi1,$m1 + mul $nlo,$nj,$m1 // np[1]*m1 + // (*) adds $lo1,$lo1,$lo0 + subs xzr,$lo0,#1 // (*) + umulh $nhi,$nj,$m1 + cbz $j,.Linner_skip + +.Linner: + ldr $aj,[$ap],#8 + adc $hi1,$hi1,xzr + ldr $tj,[$tp],#8 // tp[j] + adds $lo0,$alo,$hi0 + sub $j,$j,#8 // j-- + adc $hi0,$ahi,xzr + + adds $lo1,$nlo,$hi1 + ldr $nj,[$np],#8 + adc $hi1,$nhi,xzr + + mul $alo,$aj,$m0 // ap[j]*bp[i] + adds $lo0,$lo0,$tj + umulh $ahi,$aj,$m0 + adc $hi0,$hi0,xzr + + mul $nlo,$nj,$m1 // np[j]*m1 + adds $lo1,$lo1,$lo0 + umulh $nhi,$nj,$m1 + str $lo1,[$tp,#-16] // tp[j-1] + cbnz $j,.Linner + +.Linner_skip: + ldr $tj,[$tp],#8 // tp[j] + adc $hi1,$hi1,xzr + adds $lo0,$alo,$hi0 + sub $ap,$ap,$num // rewind $ap + adc $hi0,$ahi,xzr + + adds $lo1,$nlo,$hi1 + sub $np,$np,$num // rewind $np + adcs $hi1,$nhi,$ovf + adc $ovf,xzr,xzr + + adds $lo0,$lo0,$tj + adc $hi0,$hi0,xzr + + adds $lo1,$lo1,$lo0 + adcs $hi1,$hi1,$hi0 + adc $ovf,$ovf,xzr // upmost overflow bit + stp $lo1,$hi1,[$tp,#-16] + + cbnz $i,.Louter + + // Final step. We see if result is larger than modulus, and + // if it is, subtract the modulus. But comparison implies + // subtraction. So we subtract modulus, see if it borrowed, + // and conditionally copy original value. + ldr $tj,[sp] // tp[0] + add $tp,sp,#8 + ldr $nj,[$np],#8 // np[0] + subs $j,$num,#8 // j=num-1 and clear borrow + mov $ap,$rp +.Lsub: + sbcs $aj,$tj,$nj // tp[j]-np[j] + ldr $tj,[$tp],#8 + sub $j,$j,#8 // j-- + ldr $nj,[$np],#8 + str $aj,[$ap],#8 // rp[j]=tp[j]-np[j] + cbnz $j,.Lsub + + sbcs $aj,$tj,$nj + sbcs $ovf,$ovf,xzr // did it borrow? + str $aj,[$ap],#8 // rp[num-1] + + ldr $tj,[sp] // tp[0] + add $tp,sp,#8 + ldr $aj,[$rp],#8 // rp[0] + sub $num,$num,#8 // num-- + nop +.Lcond_copy: + sub $num,$num,#8 // num-- + csel $nj,$tj,$aj,lo // did it borrow? + ldr $tj,[$tp],#8 + ldr $aj,[$rp],#8 + str xzr,[$tp,#-16] // wipe tp + str $nj,[$rp,#-16] + cbnz $num,.Lcond_copy + + csel $nj,$tj,$aj,lo + str xzr,[$tp,#-8] // wipe tp + str $nj,[$rp,#-8] + + ldp x19,x20,[x29,#16] + mov sp,x29 + ldp x21,x22,[x29,#32] + mov x0,#1 + ldp x23,x24,[x29,#48] + ldr x29,[sp],#64 + AARCH64_VALIDATE_LINK_REGISTER + ret +.size GFp_bn_mul_mont,.-GFp_bn_mul_mont +___ +{ +######################################################################## +# Following is ARMv8 adaptation of sqrx8x_mont from x86_64-mont5 module. + +my ($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7)=map("x$_",(6..13)); +my ($t0,$t1,$t2,$t3)=map("x$_",(14..17)); +my ($acc0,$acc1,$acc2,$acc3,$acc4,$acc5,$acc6,$acc7)=map("x$_",(19..26)); +my ($cnt,$carry,$topmost)=("x27","x28","x30"); +my ($tp,$ap_end,$na0)=($bp,$np,$carry); + +$code.=<<___; +.type __bn_sqr8x_mont,%function +.align 5 +__bn_sqr8x_mont: + // Not adding AARCH64_SIGN_LINK_REGISTER here because __bn_sqr8x_mont is jumped to + // only from bn_mul_mont which has already signed the return address. + cmp $ap,$bp + b.ne __bn_mul4x_mont +.Lsqr8x_mont: + stp x29,x30,[sp,#-128]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + stp $rp,$np,[sp,#96] // offload rp and np + + ldp $a0,$a1,[$ap,#8*0] + ldp $a2,$a3,[$ap,#8*2] + ldp $a4,$a5,[$ap,#8*4] + ldp $a6,$a7,[$ap,#8*6] + + sub $tp,sp,$num,lsl#4 + lsl $num,$num,#3 + ldr $n0,[$n0] // *n0 + mov sp,$tp // alloca + sub $cnt,$num,#8*8 + b .Lsqr8x_zero_start + +.Lsqr8x_zero: + sub $cnt,$cnt,#8*8 + stp xzr,xzr,[$tp,#8*0] + stp xzr,xzr,[$tp,#8*2] + stp xzr,xzr,[$tp,#8*4] + stp xzr,xzr,[$tp,#8*6] +.Lsqr8x_zero_start: + stp xzr,xzr,[$tp,#8*8] + stp xzr,xzr,[$tp,#8*10] + stp xzr,xzr,[$tp,#8*12] + stp xzr,xzr,[$tp,#8*14] + add $tp,$tp,#8*16 + cbnz $cnt,.Lsqr8x_zero + + add $ap_end,$ap,$num + add $ap,$ap,#8*8 + mov $acc0,xzr + mov $acc1,xzr + mov $acc2,xzr + mov $acc3,xzr + mov $acc4,xzr + mov $acc5,xzr + mov $acc6,xzr + mov $acc7,xzr + mov $tp,sp + str $n0,[x29,#112] // offload n0 + + // Multiply everything but a[i]*a[i] +.align 4 +.Lsqr8x_outer_loop: + // a[1]a[0] (i) + // a[2]a[0] + // a[3]a[0] + // a[4]a[0] + // a[5]a[0] + // a[6]a[0] + // a[7]a[0] + // a[2]a[1] (ii) + // a[3]a[1] + // a[4]a[1] + // a[5]a[1] + // a[6]a[1] + // a[7]a[1] + // a[3]a[2] (iii) + // a[4]a[2] + // a[5]a[2] + // a[6]a[2] + // a[7]a[2] + // a[4]a[3] (iv) + // a[5]a[3] + // a[6]a[3] + // a[7]a[3] + // a[5]a[4] (v) + // a[6]a[4] + // a[7]a[4] + // a[6]a[5] (vi) + // a[7]a[5] + // a[7]a[6] (vii) + + mul $t0,$a1,$a0 // lo(a[1..7]*a[0]) (i) + mul $t1,$a2,$a0 + mul $t2,$a3,$a0 + mul $t3,$a4,$a0 + adds $acc1,$acc1,$t0 // t[1]+lo(a[1]*a[0]) + mul $t0,$a5,$a0 + adcs $acc2,$acc2,$t1 + mul $t1,$a6,$a0 + adcs $acc3,$acc3,$t2 + mul $t2,$a7,$a0 + adcs $acc4,$acc4,$t3 + umulh $t3,$a1,$a0 // hi(a[1..7]*a[0]) + adcs $acc5,$acc5,$t0 + umulh $t0,$a2,$a0 + adcs $acc6,$acc6,$t1 + umulh $t1,$a3,$a0 + adcs $acc7,$acc7,$t2 + umulh $t2,$a4,$a0 + stp $acc0,$acc1,[$tp],#8*2 // t[0..1] + adc $acc0,xzr,xzr // t[8] + adds $acc2,$acc2,$t3 // t[2]+lo(a[1]*a[0]) + umulh $t3,$a5,$a0 + adcs $acc3,$acc3,$t0 + umulh $t0,$a6,$a0 + adcs $acc4,$acc4,$t1 + umulh $t1,$a7,$a0 + adcs $acc5,$acc5,$t2 + mul $t2,$a2,$a1 // lo(a[2..7]*a[1]) (ii) + adcs $acc6,$acc6,$t3 + mul $t3,$a3,$a1 + adcs $acc7,$acc7,$t0 + mul $t0,$a4,$a1 + adc $acc0,$acc0,$t1 + + mul $t1,$a5,$a1 + adds $acc3,$acc3,$t2 + mul $t2,$a6,$a1 + adcs $acc4,$acc4,$t3 + mul $t3,$a7,$a1 + adcs $acc5,$acc5,$t0 + umulh $t0,$a2,$a1 // hi(a[2..7]*a[1]) + adcs $acc6,$acc6,$t1 + umulh $t1,$a3,$a1 + adcs $acc7,$acc7,$t2 + umulh $t2,$a4,$a1 + adcs $acc0,$acc0,$t3 + umulh $t3,$a5,$a1 + stp $acc2,$acc3,[$tp],#8*2 // t[2..3] + adc $acc1,xzr,xzr // t[9] + adds $acc4,$acc4,$t0 + umulh $t0,$a6,$a1 + adcs $acc5,$acc5,$t1 + umulh $t1,$a7,$a1 + adcs $acc6,$acc6,$t2 + mul $t2,$a3,$a2 // lo(a[3..7]*a[2]) (iii) + adcs $acc7,$acc7,$t3 + mul $t3,$a4,$a2 + adcs $acc0,$acc0,$t0 + mul $t0,$a5,$a2 + adc $acc1,$acc1,$t1 + + mul $t1,$a6,$a2 + adds $acc5,$acc5,$t2 + mul $t2,$a7,$a2 + adcs $acc6,$acc6,$t3 + umulh $t3,$a3,$a2 // hi(a[3..7]*a[2]) + adcs $acc7,$acc7,$t0 + umulh $t0,$a4,$a2 + adcs $acc0,$acc0,$t1 + umulh $t1,$a5,$a2 + adcs $acc1,$acc1,$t2 + umulh $t2,$a6,$a2 + stp $acc4,$acc5,[$tp],#8*2 // t[4..5] + adc $acc2,xzr,xzr // t[10] + adds $acc6,$acc6,$t3 + umulh $t3,$a7,$a2 + adcs $acc7,$acc7,$t0 + mul $t0,$a4,$a3 // lo(a[4..7]*a[3]) (iv) + adcs $acc0,$acc0,$t1 + mul $t1,$a5,$a3 + adcs $acc1,$acc1,$t2 + mul $t2,$a6,$a3 + adc $acc2,$acc2,$t3 + + mul $t3,$a7,$a3 + adds $acc7,$acc7,$t0 + umulh $t0,$a4,$a3 // hi(a[4..7]*a[3]) + adcs $acc0,$acc0,$t1 + umulh $t1,$a5,$a3 + adcs $acc1,$acc1,$t2 + umulh $t2,$a6,$a3 + adcs $acc2,$acc2,$t3 + umulh $t3,$a7,$a3 + stp $acc6,$acc7,[$tp],#8*2 // t[6..7] + adc $acc3,xzr,xzr // t[11] + adds $acc0,$acc0,$t0 + mul $t0,$a5,$a4 // lo(a[5..7]*a[4]) (v) + adcs $acc1,$acc1,$t1 + mul $t1,$a6,$a4 + adcs $acc2,$acc2,$t2 + mul $t2,$a7,$a4 + adc $acc3,$acc3,$t3 + + umulh $t3,$a5,$a4 // hi(a[5..7]*a[4]) + adds $acc1,$acc1,$t0 + umulh $t0,$a6,$a4 + adcs $acc2,$acc2,$t1 + umulh $t1,$a7,$a4 + adcs $acc3,$acc3,$t2 + mul $t2,$a6,$a5 // lo(a[6..7]*a[5]) (vi) + adc $acc4,xzr,xzr // t[12] + adds $acc2,$acc2,$t3 + mul $t3,$a7,$a5 + adcs $acc3,$acc3,$t0 + umulh $t0,$a6,$a5 // hi(a[6..7]*a[5]) + adc $acc4,$acc4,$t1 + + umulh $t1,$a7,$a5 + adds $acc3,$acc3,$t2 + mul $t2,$a7,$a6 // lo(a[7]*a[6]) (vii) + adcs $acc4,$acc4,$t3 + umulh $t3,$a7,$a6 // hi(a[7]*a[6]) + adc $acc5,xzr,xzr // t[13] + adds $acc4,$acc4,$t0 + sub $cnt,$ap_end,$ap // done yet? + adc $acc5,$acc5,$t1 + + adds $acc5,$acc5,$t2 + sub $t0,$ap_end,$num // rewinded ap + adc $acc6,xzr,xzr // t[14] + add $acc6,$acc6,$t3 + + cbz $cnt,.Lsqr8x_outer_break + + mov $n0,$a0 + ldp $a0,$a1,[$tp,#8*0] + ldp $a2,$a3,[$tp,#8*2] + ldp $a4,$a5,[$tp,#8*4] + ldp $a6,$a7,[$tp,#8*6] + adds $acc0,$acc0,$a0 + adcs $acc1,$acc1,$a1 + ldp $a0,$a1,[$ap,#8*0] + adcs $acc2,$acc2,$a2 + adcs $acc3,$acc3,$a3 + ldp $a2,$a3,[$ap,#8*2] + adcs $acc4,$acc4,$a4 + adcs $acc5,$acc5,$a5 + ldp $a4,$a5,[$ap,#8*4] + adcs $acc6,$acc6,$a6 + mov $rp,$ap + adcs $acc7,xzr,$a7 + ldp $a6,$a7,[$ap,#8*6] + add $ap,$ap,#8*8 + //adc $carry,xzr,xzr // moved below + mov $cnt,#-8*8 + + // a[8]a[0] + // a[9]a[0] + // a[a]a[0] + // a[b]a[0] + // a[c]a[0] + // a[d]a[0] + // a[e]a[0] + // a[f]a[0] + // a[8]a[1] + // a[f]a[1]........................ + // a[8]a[2] + // a[f]a[2]........................ + // a[8]a[3] + // a[f]a[3]........................ + // a[8]a[4] + // a[f]a[4]........................ + // a[8]a[5] + // a[f]a[5]........................ + // a[8]a[6] + // a[f]a[6]........................ + // a[8]a[7] + // a[f]a[7]........................ +.Lsqr8x_mul: + mul $t0,$a0,$n0 + adc $carry,xzr,xzr // carry bit, modulo-scheduled + mul $t1,$a1,$n0 + add $cnt,$cnt,#8 + mul $t2,$a2,$n0 + mul $t3,$a3,$n0 + adds $acc0,$acc0,$t0 + mul $t0,$a4,$n0 + adcs $acc1,$acc1,$t1 + mul $t1,$a5,$n0 + adcs $acc2,$acc2,$t2 + mul $t2,$a6,$n0 + adcs $acc3,$acc3,$t3 + mul $t3,$a7,$n0 + adcs $acc4,$acc4,$t0 + umulh $t0,$a0,$n0 + adcs $acc5,$acc5,$t1 + umulh $t1,$a1,$n0 + adcs $acc6,$acc6,$t2 + umulh $t2,$a2,$n0 + adcs $acc7,$acc7,$t3 + umulh $t3,$a3,$n0 + adc $carry,$carry,xzr + str $acc0,[$tp],#8 + adds $acc0,$acc1,$t0 + umulh $t0,$a4,$n0 + adcs $acc1,$acc2,$t1 + umulh $t1,$a5,$n0 + adcs $acc2,$acc3,$t2 + umulh $t2,$a6,$n0 + adcs $acc3,$acc4,$t3 + umulh $t3,$a7,$n0 + ldr $n0,[$rp,$cnt] + adcs $acc4,$acc5,$t0 + adcs $acc5,$acc6,$t1 + adcs $acc6,$acc7,$t2 + adcs $acc7,$carry,$t3 + //adc $carry,xzr,xzr // moved above + cbnz $cnt,.Lsqr8x_mul + // note that carry flag is guaranteed + // to be zero at this point + cmp $ap,$ap_end // done yet? + b.eq .Lsqr8x_break + + ldp $a0,$a1,[$tp,#8*0] + ldp $a2,$a3,[$tp,#8*2] + ldp $a4,$a5,[$tp,#8*4] + ldp $a6,$a7,[$tp,#8*6] + adds $acc0,$acc0,$a0 + ldr $n0,[$rp,#-8*8] + adcs $acc1,$acc1,$a1 + ldp $a0,$a1,[$ap,#8*0] + adcs $acc2,$acc2,$a2 + adcs $acc3,$acc3,$a3 + ldp $a2,$a3,[$ap,#8*2] + adcs $acc4,$acc4,$a4 + adcs $acc5,$acc5,$a5 + ldp $a4,$a5,[$ap,#8*4] + adcs $acc6,$acc6,$a6 + mov $cnt,#-8*8 + adcs $acc7,$acc7,$a7 + ldp $a6,$a7,[$ap,#8*6] + add $ap,$ap,#8*8 + //adc $carry,xzr,xzr // moved above + b .Lsqr8x_mul + +.align 4 +.Lsqr8x_break: + ldp $a0,$a1,[$rp,#8*0] + add $ap,$rp,#8*8 + ldp $a2,$a3,[$rp,#8*2] + sub $t0,$ap_end,$ap // is it last iteration? + ldp $a4,$a5,[$rp,#8*4] + sub $t1,$tp,$t0 + ldp $a6,$a7,[$rp,#8*6] + cbz $t0,.Lsqr8x_outer_loop + + stp $acc0,$acc1,[$tp,#8*0] + ldp $acc0,$acc1,[$t1,#8*0] + stp $acc2,$acc3,[$tp,#8*2] + ldp $acc2,$acc3,[$t1,#8*2] + stp $acc4,$acc5,[$tp,#8*4] + ldp $acc4,$acc5,[$t1,#8*4] + stp $acc6,$acc7,[$tp,#8*6] + mov $tp,$t1 + ldp $acc6,$acc7,[$t1,#8*6] + b .Lsqr8x_outer_loop + +.align 4 +.Lsqr8x_outer_break: + // Now multiply above result by 2 and add a[n-1]*a[n-1]|...|a[0]*a[0] + ldp $a1,$a3,[$t0,#8*0] // recall that $t0 is &a[0] + ldp $t1,$t2,[sp,#8*1] + ldp $a5,$a7,[$t0,#8*2] + add $ap,$t0,#8*4 + ldp $t3,$t0,[sp,#8*3] + + stp $acc0,$acc1,[$tp,#8*0] + mul $acc0,$a1,$a1 + stp $acc2,$acc3,[$tp,#8*2] + umulh $a1,$a1,$a1 + stp $acc4,$acc5,[$tp,#8*4] + mul $a2,$a3,$a3 + stp $acc6,$acc7,[$tp,#8*6] + mov $tp,sp + umulh $a3,$a3,$a3 + adds $acc1,$a1,$t1,lsl#1 + extr $t1,$t2,$t1,#63 + sub $cnt,$num,#8*4 + +.Lsqr4x_shift_n_add: + adcs $acc2,$a2,$t1 + extr $t2,$t3,$t2,#63 + sub $cnt,$cnt,#8*4 + adcs $acc3,$a3,$t2 + ldp $t1,$t2,[$tp,#8*5] + mul $a4,$a5,$a5 + ldp $a1,$a3,[$ap],#8*2 + umulh $a5,$a5,$a5 + mul $a6,$a7,$a7 + umulh $a7,$a7,$a7 + extr $t3,$t0,$t3,#63 + stp $acc0,$acc1,[$tp,#8*0] + adcs $acc4,$a4,$t3 + extr $t0,$t1,$t0,#63 + stp $acc2,$acc3,[$tp,#8*2] + adcs $acc5,$a5,$t0 + ldp $t3,$t0,[$tp,#8*7] + extr $t1,$t2,$t1,#63 + adcs $acc6,$a6,$t1 + extr $t2,$t3,$t2,#63 + adcs $acc7,$a7,$t2 + ldp $t1,$t2,[$tp,#8*9] + mul $a0,$a1,$a1 + ldp $a5,$a7,[$ap],#8*2 + umulh $a1,$a1,$a1 + mul $a2,$a3,$a3 + umulh $a3,$a3,$a3 + stp $acc4,$acc5,[$tp,#8*4] + extr $t3,$t0,$t3,#63 + stp $acc6,$acc7,[$tp,#8*6] + add $tp,$tp,#8*8 + adcs $acc0,$a0,$t3 + extr $t0,$t1,$t0,#63 + adcs $acc1,$a1,$t0 + ldp $t3,$t0,[$tp,#8*3] + extr $t1,$t2,$t1,#63 + cbnz $cnt,.Lsqr4x_shift_n_add +___ +my ($np,$np_end)=($ap,$ap_end); +$code.=<<___; + ldp $np,$n0,[x29,#104] // pull np and n0 + + adcs $acc2,$a2,$t1 + extr $t2,$t3,$t2,#63 + adcs $acc3,$a3,$t2 + ldp $t1,$t2,[$tp,#8*5] + mul $a4,$a5,$a5 + umulh $a5,$a5,$a5 + stp $acc0,$acc1,[$tp,#8*0] + mul $a6,$a7,$a7 + umulh $a7,$a7,$a7 + stp $acc2,$acc3,[$tp,#8*2] + extr $t3,$t0,$t3,#63 + adcs $acc4,$a4,$t3 + extr $t0,$t1,$t0,#63 + ldp $acc0,$acc1,[sp,#8*0] + adcs $acc5,$a5,$t0 + extr $t1,$t2,$t1,#63 + ldp $a0,$a1,[$np,#8*0] + adcs $acc6,$a6,$t1 + extr $t2,xzr,$t2,#63 + ldp $a2,$a3,[$np,#8*2] + adc $acc7,$a7,$t2 + ldp $a4,$a5,[$np,#8*4] + + // Reduce by 512 bits per iteration + mul $na0,$n0,$acc0 // t[0]*n0 + ldp $a6,$a7,[$np,#8*6] + add $np_end,$np,$num + ldp $acc2,$acc3,[sp,#8*2] + stp $acc4,$acc5,[$tp,#8*4] + ldp $acc4,$acc5,[sp,#8*4] + stp $acc6,$acc7,[$tp,#8*6] + ldp $acc6,$acc7,[sp,#8*6] + add $np,$np,#8*8 + mov $topmost,xzr // initial top-most carry + mov $tp,sp + mov $cnt,#8 + +.Lsqr8x_reduction: + // (*) mul $t0,$a0,$na0 // lo(n[0-7])*lo(t[0]*n0) + mul $t1,$a1,$na0 + sub $cnt,$cnt,#1 + mul $t2,$a2,$na0 + str $na0,[$tp],#8 // put aside t[0]*n0 for tail processing + mul $t3,$a3,$na0 + // (*) adds xzr,$acc0,$t0 + subs xzr,$acc0,#1 // (*) + mul $t0,$a4,$na0 + adcs $acc0,$acc1,$t1 + mul $t1,$a5,$na0 + adcs $acc1,$acc2,$t2 + mul $t2,$a6,$na0 + adcs $acc2,$acc3,$t3 + mul $t3,$a7,$na0 + adcs $acc3,$acc4,$t0 + umulh $t0,$a0,$na0 // hi(n[0-7])*lo(t[0]*n0) + adcs $acc4,$acc5,$t1 + umulh $t1,$a1,$na0 + adcs $acc5,$acc6,$t2 + umulh $t2,$a2,$na0 + adcs $acc6,$acc7,$t3 + umulh $t3,$a3,$na0 + adc $acc7,xzr,xzr + adds $acc0,$acc0,$t0 + umulh $t0,$a4,$na0 + adcs $acc1,$acc1,$t1 + umulh $t1,$a5,$na0 + adcs $acc2,$acc2,$t2 + umulh $t2,$a6,$na0 + adcs $acc3,$acc3,$t3 + umulh $t3,$a7,$na0 + mul $na0,$n0,$acc0 // next t[0]*n0 + adcs $acc4,$acc4,$t0 + adcs $acc5,$acc5,$t1 + adcs $acc6,$acc6,$t2 + adc $acc7,$acc7,$t3 + cbnz $cnt,.Lsqr8x_reduction + + ldp $t0,$t1,[$tp,#8*0] + ldp $t2,$t3,[$tp,#8*2] + mov $rp,$tp + sub $cnt,$np_end,$np // done yet? + adds $acc0,$acc0,$t0 + adcs $acc1,$acc1,$t1 + ldp $t0,$t1,[$tp,#8*4] + adcs $acc2,$acc2,$t2 + adcs $acc3,$acc3,$t3 + ldp $t2,$t3,[$tp,#8*6] + adcs $acc4,$acc4,$t0 + adcs $acc5,$acc5,$t1 + adcs $acc6,$acc6,$t2 + adcs $acc7,$acc7,$t3 + //adc $carry,xzr,xzr // moved below + cbz $cnt,.Lsqr8x8_post_condition + + ldr $n0,[$tp,#-8*8] + ldp $a0,$a1,[$np,#8*0] + ldp $a2,$a3,[$np,#8*2] + ldp $a4,$a5,[$np,#8*4] + mov $cnt,#-8*8 + ldp $a6,$a7,[$np,#8*6] + add $np,$np,#8*8 + +.Lsqr8x_tail: + mul $t0,$a0,$n0 + adc $carry,xzr,xzr // carry bit, modulo-scheduled + mul $t1,$a1,$n0 + add $cnt,$cnt,#8 + mul $t2,$a2,$n0 + mul $t3,$a3,$n0 + adds $acc0,$acc0,$t0 + mul $t0,$a4,$n0 + adcs $acc1,$acc1,$t1 + mul $t1,$a5,$n0 + adcs $acc2,$acc2,$t2 + mul $t2,$a6,$n0 + adcs $acc3,$acc3,$t3 + mul $t3,$a7,$n0 + adcs $acc4,$acc4,$t0 + umulh $t0,$a0,$n0 + adcs $acc5,$acc5,$t1 + umulh $t1,$a1,$n0 + adcs $acc6,$acc6,$t2 + umulh $t2,$a2,$n0 + adcs $acc7,$acc7,$t3 + umulh $t3,$a3,$n0 + adc $carry,$carry,xzr + str $acc0,[$tp],#8 + adds $acc0,$acc1,$t0 + umulh $t0,$a4,$n0 + adcs $acc1,$acc2,$t1 + umulh $t1,$a5,$n0 + adcs $acc2,$acc3,$t2 + umulh $t2,$a6,$n0 + adcs $acc3,$acc4,$t3 + umulh $t3,$a7,$n0 + ldr $n0,[$rp,$cnt] + adcs $acc4,$acc5,$t0 + adcs $acc5,$acc6,$t1 + adcs $acc6,$acc7,$t2 + adcs $acc7,$carry,$t3 + //adc $carry,xzr,xzr // moved above + cbnz $cnt,.Lsqr8x_tail + // note that carry flag is guaranteed + // to be zero at this point + ldp $a0,$a1,[$tp,#8*0] + sub $cnt,$np_end,$np // done yet? + sub $t2,$np_end,$num // rewinded np + ldp $a2,$a3,[$tp,#8*2] + ldp $a4,$a5,[$tp,#8*4] + ldp $a6,$a7,[$tp,#8*6] + cbz $cnt,.Lsqr8x_tail_break + + ldr $n0,[$rp,#-8*8] + adds $acc0,$acc0,$a0 + adcs $acc1,$acc1,$a1 + ldp $a0,$a1,[$np,#8*0] + adcs $acc2,$acc2,$a2 + adcs $acc3,$acc3,$a3 + ldp $a2,$a3,[$np,#8*2] + adcs $acc4,$acc4,$a4 + adcs $acc5,$acc5,$a5 + ldp $a4,$a5,[$np,#8*4] + adcs $acc6,$acc6,$a6 + mov $cnt,#-8*8 + adcs $acc7,$acc7,$a7 + ldp $a6,$a7,[$np,#8*6] + add $np,$np,#8*8 + //adc $carry,xzr,xzr // moved above + b .Lsqr8x_tail + +.align 4 +.Lsqr8x_tail_break: + ldr $n0,[x29,#112] // pull n0 + add $cnt,$tp,#8*8 // end of current t[num] window + + subs xzr,$topmost,#1 // "move" top-most carry to carry bit + adcs $t0,$acc0,$a0 + adcs $t1,$acc1,$a1 + ldp $acc0,$acc1,[$rp,#8*0] + adcs $acc2,$acc2,$a2 + ldp $a0,$a1,[$t2,#8*0] // recall that $t2 is &n[0] + adcs $acc3,$acc3,$a3 + ldp $a2,$a3,[$t2,#8*2] + adcs $acc4,$acc4,$a4 + adcs $acc5,$acc5,$a5 + ldp $a4,$a5,[$t2,#8*4] + adcs $acc6,$acc6,$a6 + adcs $acc7,$acc7,$a7 + ldp $a6,$a7,[$t2,#8*6] + add $np,$t2,#8*8 + adc $topmost,xzr,xzr // top-most carry + mul $na0,$n0,$acc0 + stp $t0,$t1,[$tp,#8*0] + stp $acc2,$acc3,[$tp,#8*2] + ldp $acc2,$acc3,[$rp,#8*2] + stp $acc4,$acc5,[$tp,#8*4] + ldp $acc4,$acc5,[$rp,#8*4] + cmp $cnt,x29 // did we hit the bottom? + stp $acc6,$acc7,[$tp,#8*6] + mov $tp,$rp // slide the window + ldp $acc6,$acc7,[$rp,#8*6] + mov $cnt,#8 + b.ne .Lsqr8x_reduction + + // Final step. We see if result is larger than modulus, and + // if it is, subtract the modulus. But comparison implies + // subtraction. So we subtract modulus, see if it borrowed, + // and conditionally copy original value. + ldr $rp,[x29,#96] // pull rp + add $tp,$tp,#8*8 + subs $t0,$acc0,$a0 + sbcs $t1,$acc1,$a1 + sub $cnt,$num,#8*8 + mov $ap_end,$rp // $rp copy + +.Lsqr8x_sub: + sbcs $t2,$acc2,$a2 + ldp $a0,$a1,[$np,#8*0] + sbcs $t3,$acc3,$a3 + stp $t0,$t1,[$rp,#8*0] + sbcs $t0,$acc4,$a4 + ldp $a2,$a3,[$np,#8*2] + sbcs $t1,$acc5,$a5 + stp $t2,$t3,[$rp,#8*2] + sbcs $t2,$acc6,$a6 + ldp $a4,$a5,[$np,#8*4] + sbcs $t3,$acc7,$a7 + ldp $a6,$a7,[$np,#8*6] + add $np,$np,#8*8 + ldp $acc0,$acc1,[$tp,#8*0] + sub $cnt,$cnt,#8*8 + ldp $acc2,$acc3,[$tp,#8*2] + ldp $acc4,$acc5,[$tp,#8*4] + ldp $acc6,$acc7,[$tp,#8*6] + add $tp,$tp,#8*8 + stp $t0,$t1,[$rp,#8*4] + sbcs $t0,$acc0,$a0 + stp $t2,$t3,[$rp,#8*6] + add $rp,$rp,#8*8 + sbcs $t1,$acc1,$a1 + cbnz $cnt,.Lsqr8x_sub + + sbcs $t2,$acc2,$a2 + mov $tp,sp + add $ap,sp,$num + ldp $a0,$a1,[$ap_end,#8*0] + sbcs $t3,$acc3,$a3 + stp $t0,$t1,[$rp,#8*0] + sbcs $t0,$acc4,$a4 + ldp $a2,$a3,[$ap_end,#8*2] + sbcs $t1,$acc5,$a5 + stp $t2,$t3,[$rp,#8*2] + sbcs $t2,$acc6,$a6 + ldp $acc0,$acc1,[$ap,#8*0] + sbcs $t3,$acc7,$a7 + ldp $acc2,$acc3,[$ap,#8*2] + sbcs xzr,$topmost,xzr // did it borrow? + ldr x30,[x29,#8] // pull return address + stp $t0,$t1,[$rp,#8*4] + stp $t2,$t3,[$rp,#8*6] + + sub $cnt,$num,#8*4 +.Lsqr4x_cond_copy: + sub $cnt,$cnt,#8*4 + csel $t0,$acc0,$a0,lo + stp xzr,xzr,[$tp,#8*0] + csel $t1,$acc1,$a1,lo + ldp $a0,$a1,[$ap_end,#8*4] + ldp $acc0,$acc1,[$ap,#8*4] + csel $t2,$acc2,$a2,lo + stp xzr,xzr,[$tp,#8*2] + add $tp,$tp,#8*4 + csel $t3,$acc3,$a3,lo + ldp $a2,$a3,[$ap_end,#8*6] + ldp $acc2,$acc3,[$ap,#8*6] + add $ap,$ap,#8*4 + stp $t0,$t1,[$ap_end,#8*0] + stp $t2,$t3,[$ap_end,#8*2] + add $ap_end,$ap_end,#8*4 + stp xzr,xzr,[$ap,#8*0] + stp xzr,xzr,[$ap,#8*2] + cbnz $cnt,.Lsqr4x_cond_copy + + csel $t0,$acc0,$a0,lo + stp xzr,xzr,[$tp,#8*0] + csel $t1,$acc1,$a1,lo + stp xzr,xzr,[$tp,#8*2] + csel $t2,$acc2,$a2,lo + csel $t3,$acc3,$a3,lo + stp $t0,$t1,[$ap_end,#8*0] + stp $t2,$t3,[$ap_end,#8*2] + + b .Lsqr8x_done + +.align 4 +.Lsqr8x8_post_condition: + adc $carry,xzr,xzr + ldr x30,[x29,#8] // pull return address + // $acc0-7,$carry hold result, $a0-7 hold modulus + subs $a0,$acc0,$a0 + ldr $ap,[x29,#96] // pull rp + sbcs $a1,$acc1,$a1 + stp xzr,xzr,[sp,#8*0] + sbcs $a2,$acc2,$a2 + stp xzr,xzr,[sp,#8*2] + sbcs $a3,$acc3,$a3 + stp xzr,xzr,[sp,#8*4] + sbcs $a4,$acc4,$a4 + stp xzr,xzr,[sp,#8*6] + sbcs $a5,$acc5,$a5 + stp xzr,xzr,[sp,#8*8] + sbcs $a6,$acc6,$a6 + stp xzr,xzr,[sp,#8*10] + sbcs $a7,$acc7,$a7 + stp xzr,xzr,[sp,#8*12] + sbcs $carry,$carry,xzr // did it borrow? + stp xzr,xzr,[sp,#8*14] + + // $a0-7 hold result-modulus + csel $a0,$acc0,$a0,lo + csel $a1,$acc1,$a1,lo + csel $a2,$acc2,$a2,lo + csel $a3,$acc3,$a3,lo + stp $a0,$a1,[$ap,#8*0] + csel $a4,$acc4,$a4,lo + csel $a5,$acc5,$a5,lo + stp $a2,$a3,[$ap,#8*2] + csel $a6,$acc6,$a6,lo + csel $a7,$acc7,$a7,lo + stp $a4,$a5,[$ap,#8*4] + stp $a6,$a7,[$ap,#8*6] + +.Lsqr8x_done: + ldp x19,x20,[x29,#16] + mov sp,x29 + ldp x21,x22,[x29,#32] + mov x0,#1 + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldr x29,[sp],#128 + // x30 is popped earlier + AARCH64_VALIDATE_LINK_REGISTER + ret +.size __bn_sqr8x_mont,.-__bn_sqr8x_mont +___ +} + +{ +######################################################################## +# Even though this might look as ARMv8 adaptation of mulx4x_mont from +# x86_64-mont5 module, it's different in sense that it performs +# reduction 256 bits at a time. + +my ($a0,$a1,$a2,$a3, + $t0,$t1,$t2,$t3, + $m0,$m1,$m2,$m3, + $acc0,$acc1,$acc2,$acc3,$acc4, + $bi,$mi,$tp,$ap_end,$cnt) = map("x$_",(6..17,19..28)); +my $bp_end=$rp; +my ($carry,$topmost) = ($rp,"x30"); + +$code.=<<___; +.type __bn_mul4x_mont,%function +.align 5 +__bn_mul4x_mont: + // Not adding AARCH64_SIGN_LINK_REGISTER here because __bn_mul4x_mont is jumped to + // only from bn_mul_mont or __bn_mul8x_mont which have already signed the + // return address. + stp x29,x30,[sp,#-128]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + + sub $tp,sp,$num,lsl#3 + lsl $num,$num,#3 + ldr $n0,[$n0] // *n0 + sub sp,$tp,#8*4 // alloca + + add $t0,$bp,$num + add $ap_end,$ap,$num + stp $rp,$t0,[x29,#96] // offload rp and &b[num] + + ldr $bi,[$bp,#8*0] // b[0] + ldp $a0,$a1,[$ap,#8*0] // a[0..3] + ldp $a2,$a3,[$ap,#8*2] + add $ap,$ap,#8*4 + mov $acc0,xzr + mov $acc1,xzr + mov $acc2,xzr + mov $acc3,xzr + ldp $m0,$m1,[$np,#8*0] // n[0..3] + ldp $m2,$m3,[$np,#8*2] + adds $np,$np,#8*4 // clear carry bit + mov $carry,xzr + mov $cnt,#0 + mov $tp,sp + +.Loop_mul4x_1st_reduction: + mul $t0,$a0,$bi // lo(a[0..3]*b[0]) + adc $carry,$carry,xzr // modulo-scheduled + mul $t1,$a1,$bi + add $cnt,$cnt,#8 + mul $t2,$a2,$bi + and $cnt,$cnt,#31 + mul $t3,$a3,$bi + adds $acc0,$acc0,$t0 + umulh $t0,$a0,$bi // hi(a[0..3]*b[0]) + adcs $acc1,$acc1,$t1 + mul $mi,$acc0,$n0 // t[0]*n0 + adcs $acc2,$acc2,$t2 + umulh $t1,$a1,$bi + adcs $acc3,$acc3,$t3 + umulh $t2,$a2,$bi + adc $acc4,xzr,xzr + umulh $t3,$a3,$bi + ldr $bi,[$bp,$cnt] // next b[i] (or b[0]) + adds $acc1,$acc1,$t0 + // (*) mul $t0,$m0,$mi // lo(n[0..3]*t[0]*n0) + str $mi,[$tp],#8 // put aside t[0]*n0 for tail processing + adcs $acc2,$acc2,$t1 + mul $t1,$m1,$mi + adcs $acc3,$acc3,$t2 + mul $t2,$m2,$mi + adc $acc4,$acc4,$t3 // can't overflow + mul $t3,$m3,$mi + // (*) adds xzr,$acc0,$t0 + subs xzr,$acc0,#1 // (*) + umulh $t0,$m0,$mi // hi(n[0..3]*t[0]*n0) + adcs $acc0,$acc1,$t1 + umulh $t1,$m1,$mi + adcs $acc1,$acc2,$t2 + umulh $t2,$m2,$mi + adcs $acc2,$acc3,$t3 + umulh $t3,$m3,$mi + adcs $acc3,$acc4,$carry + adc $carry,xzr,xzr + adds $acc0,$acc0,$t0 + sub $t0,$ap_end,$ap + adcs $acc1,$acc1,$t1 + adcs $acc2,$acc2,$t2 + adcs $acc3,$acc3,$t3 + //adc $carry,$carry,xzr + cbnz $cnt,.Loop_mul4x_1st_reduction + + cbz $t0,.Lmul4x4_post_condition + + ldp $a0,$a1,[$ap,#8*0] // a[4..7] + ldp $a2,$a3,[$ap,#8*2] + add $ap,$ap,#8*4 + ldr $mi,[sp] // a[0]*n0 + ldp $m0,$m1,[$np,#8*0] // n[4..7] + ldp $m2,$m3,[$np,#8*2] + add $np,$np,#8*4 + +.Loop_mul4x_1st_tail: + mul $t0,$a0,$bi // lo(a[4..7]*b[i]) + adc $carry,$carry,xzr // modulo-scheduled + mul $t1,$a1,$bi + add $cnt,$cnt,#8 + mul $t2,$a2,$bi + and $cnt,$cnt,#31 + mul $t3,$a3,$bi + adds $acc0,$acc0,$t0 + umulh $t0,$a0,$bi // hi(a[4..7]*b[i]) + adcs $acc1,$acc1,$t1 + umulh $t1,$a1,$bi + adcs $acc2,$acc2,$t2 + umulh $t2,$a2,$bi + adcs $acc3,$acc3,$t3 + umulh $t3,$a3,$bi + adc $acc4,xzr,xzr + ldr $bi,[$bp,$cnt] // next b[i] (or b[0]) + adds $acc1,$acc1,$t0 + mul $t0,$m0,$mi // lo(n[4..7]*a[0]*n0) + adcs $acc2,$acc2,$t1 + mul $t1,$m1,$mi + adcs $acc3,$acc3,$t2 + mul $t2,$m2,$mi + adc $acc4,$acc4,$t3 // can't overflow + mul $t3,$m3,$mi + adds $acc0,$acc0,$t0 + umulh $t0,$m0,$mi // hi(n[4..7]*a[0]*n0) + adcs $acc1,$acc1,$t1 + umulh $t1,$m1,$mi + adcs $acc2,$acc2,$t2 + umulh $t2,$m2,$mi + adcs $acc3,$acc3,$t3 + adcs $acc4,$acc4,$carry + umulh $t3,$m3,$mi + adc $carry,xzr,xzr + ldr $mi,[sp,$cnt] // next t[0]*n0 + str $acc0,[$tp],#8 // result!!! + adds $acc0,$acc1,$t0 + sub $t0,$ap_end,$ap // done yet? + adcs $acc1,$acc2,$t1 + adcs $acc2,$acc3,$t2 + adcs $acc3,$acc4,$t3 + //adc $carry,$carry,xzr + cbnz $cnt,.Loop_mul4x_1st_tail + + sub $t1,$ap_end,$num // rewinded $ap + cbz $t0,.Lmul4x_proceed + + ldp $a0,$a1,[$ap,#8*0] + ldp $a2,$a3,[$ap,#8*2] + add $ap,$ap,#8*4 + ldp $m0,$m1,[$np,#8*0] + ldp $m2,$m3,[$np,#8*2] + add $np,$np,#8*4 + b .Loop_mul4x_1st_tail + +.align 5 +.Lmul4x_proceed: + ldr $bi,[$bp,#8*4]! // *++b + adc $topmost,$carry,xzr + ldp $a0,$a1,[$t1,#8*0] // a[0..3] + sub $np,$np,$num // rewind np + ldp $a2,$a3,[$t1,#8*2] + add $ap,$t1,#8*4 + + stp $acc0,$acc1,[$tp,#8*0] // result!!! + ldp $acc0,$acc1,[sp,#8*4] // t[0..3] + stp $acc2,$acc3,[$tp,#8*2] // result!!! + ldp $acc2,$acc3,[sp,#8*6] + + ldp $m0,$m1,[$np,#8*0] // n[0..3] + mov $tp,sp + ldp $m2,$m3,[$np,#8*2] + adds $np,$np,#8*4 // clear carry bit + mov $carry,xzr + +.align 4 +.Loop_mul4x_reduction: + mul $t0,$a0,$bi // lo(a[0..3]*b[4]) + adc $carry,$carry,xzr // modulo-scheduled + mul $t1,$a1,$bi + add $cnt,$cnt,#8 + mul $t2,$a2,$bi + and $cnt,$cnt,#31 + mul $t3,$a3,$bi + adds $acc0,$acc0,$t0 + umulh $t0,$a0,$bi // hi(a[0..3]*b[4]) + adcs $acc1,$acc1,$t1 + mul $mi,$acc0,$n0 // t[0]*n0 + adcs $acc2,$acc2,$t2 + umulh $t1,$a1,$bi + adcs $acc3,$acc3,$t3 + umulh $t2,$a2,$bi + adc $acc4,xzr,xzr + umulh $t3,$a3,$bi + ldr $bi,[$bp,$cnt] // next b[i] + adds $acc1,$acc1,$t0 + // (*) mul $t0,$m0,$mi + str $mi,[$tp],#8 // put aside t[0]*n0 for tail processing + adcs $acc2,$acc2,$t1 + mul $t1,$m1,$mi // lo(n[0..3]*t[0]*n0 + adcs $acc3,$acc3,$t2 + mul $t2,$m2,$mi + adc $acc4,$acc4,$t3 // can't overflow + mul $t3,$m3,$mi + // (*) adds xzr,$acc0,$t0 + subs xzr,$acc0,#1 // (*) + umulh $t0,$m0,$mi // hi(n[0..3]*t[0]*n0 + adcs $acc0,$acc1,$t1 + umulh $t1,$m1,$mi + adcs $acc1,$acc2,$t2 + umulh $t2,$m2,$mi + adcs $acc2,$acc3,$t3 + umulh $t3,$m3,$mi + adcs $acc3,$acc4,$carry + adc $carry,xzr,xzr + adds $acc0,$acc0,$t0 + adcs $acc1,$acc1,$t1 + adcs $acc2,$acc2,$t2 + adcs $acc3,$acc3,$t3 + //adc $carry,$carry,xzr + cbnz $cnt,.Loop_mul4x_reduction + + adc $carry,$carry,xzr + ldp $t0,$t1,[$tp,#8*4] // t[4..7] + ldp $t2,$t3,[$tp,#8*6] + ldp $a0,$a1,[$ap,#8*0] // a[4..7] + ldp $a2,$a3,[$ap,#8*2] + add $ap,$ap,#8*4 + adds $acc0,$acc0,$t0 + adcs $acc1,$acc1,$t1 + adcs $acc2,$acc2,$t2 + adcs $acc3,$acc3,$t3 + //adc $carry,$carry,xzr + + ldr $mi,[sp] // t[0]*n0 + ldp $m0,$m1,[$np,#8*0] // n[4..7] + ldp $m2,$m3,[$np,#8*2] + add $np,$np,#8*4 + +.align 4 +.Loop_mul4x_tail: + mul $t0,$a0,$bi // lo(a[4..7]*b[4]) + adc $carry,$carry,xzr // modulo-scheduled + mul $t1,$a1,$bi + add $cnt,$cnt,#8 + mul $t2,$a2,$bi + and $cnt,$cnt,#31 + mul $t3,$a3,$bi + adds $acc0,$acc0,$t0 + umulh $t0,$a0,$bi // hi(a[4..7]*b[4]) + adcs $acc1,$acc1,$t1 + umulh $t1,$a1,$bi + adcs $acc2,$acc2,$t2 + umulh $t2,$a2,$bi + adcs $acc3,$acc3,$t3 + umulh $t3,$a3,$bi + adc $acc4,xzr,xzr + ldr $bi,[$bp,$cnt] // next b[i] + adds $acc1,$acc1,$t0 + mul $t0,$m0,$mi // lo(n[4..7]*t[0]*n0) + adcs $acc2,$acc2,$t1 + mul $t1,$m1,$mi + adcs $acc3,$acc3,$t2 + mul $t2,$m2,$mi + adc $acc4,$acc4,$t3 // can't overflow + mul $t3,$m3,$mi + adds $acc0,$acc0,$t0 + umulh $t0,$m0,$mi // hi(n[4..7]*t[0]*n0) + adcs $acc1,$acc1,$t1 + umulh $t1,$m1,$mi + adcs $acc2,$acc2,$t2 + umulh $t2,$m2,$mi + adcs $acc3,$acc3,$t3 + umulh $t3,$m3,$mi + adcs $acc4,$acc4,$carry + ldr $mi,[sp,$cnt] // next a[0]*n0 + adc $carry,xzr,xzr + str $acc0,[$tp],#8 // result!!! + adds $acc0,$acc1,$t0 + sub $t0,$ap_end,$ap // done yet? + adcs $acc1,$acc2,$t1 + adcs $acc2,$acc3,$t2 + adcs $acc3,$acc4,$t3 + //adc $carry,$carry,xzr + cbnz $cnt,.Loop_mul4x_tail + + sub $t1,$np,$num // rewinded np? + adc $carry,$carry,xzr + cbz $t0,.Loop_mul4x_break + + ldp $t0,$t1,[$tp,#8*4] + ldp $t2,$t3,[$tp,#8*6] + ldp $a0,$a1,[$ap,#8*0] + ldp $a2,$a3,[$ap,#8*2] + add $ap,$ap,#8*4 + adds $acc0,$acc0,$t0 + adcs $acc1,$acc1,$t1 + adcs $acc2,$acc2,$t2 + adcs $acc3,$acc3,$t3 + //adc $carry,$carry,xzr + ldp $m0,$m1,[$np,#8*0] + ldp $m2,$m3,[$np,#8*2] + add $np,$np,#8*4 + b .Loop_mul4x_tail + +.align 4 +.Loop_mul4x_break: + ldp $t2,$t3,[x29,#96] // pull rp and &b[num] + adds $acc0,$acc0,$topmost + add $bp,$bp,#8*4 // bp++ + adcs $acc1,$acc1,xzr + sub $ap,$ap,$num // rewind ap + adcs $acc2,$acc2,xzr + stp $acc0,$acc1,[$tp,#8*0] // result!!! + adcs $acc3,$acc3,xzr + ldp $acc0,$acc1,[sp,#8*4] // t[0..3] + adc $topmost,$carry,xzr + stp $acc2,$acc3,[$tp,#8*2] // result!!! + cmp $bp,$t3 // done yet? + ldp $acc2,$acc3,[sp,#8*6] + ldp $m0,$m1,[$t1,#8*0] // n[0..3] + ldp $m2,$m3,[$t1,#8*2] + add $np,$t1,#8*4 + b.eq .Lmul4x_post + + ldr $bi,[$bp] + ldp $a0,$a1,[$ap,#8*0] // a[0..3] + ldp $a2,$a3,[$ap,#8*2] + adds $ap,$ap,#8*4 // clear carry bit + mov $carry,xzr + mov $tp,sp + b .Loop_mul4x_reduction + +.align 4 +.Lmul4x_post: + // Final step. We see if result is larger than modulus, and + // if it is, subtract the modulus. But comparison implies + // subtraction. So we subtract modulus, see if it borrowed, + // and conditionally copy original value. + mov $rp,$t2 + mov $ap_end,$t2 // $rp copy + subs $t0,$acc0,$m0 + add $tp,sp,#8*8 + sbcs $t1,$acc1,$m1 + sub $cnt,$num,#8*4 + +.Lmul4x_sub: + sbcs $t2,$acc2,$m2 + ldp $m0,$m1,[$np,#8*0] + sub $cnt,$cnt,#8*4 + ldp $acc0,$acc1,[$tp,#8*0] + sbcs $t3,$acc3,$m3 + ldp $m2,$m3,[$np,#8*2] + add $np,$np,#8*4 + ldp $acc2,$acc3,[$tp,#8*2] + add $tp,$tp,#8*4 + stp $t0,$t1,[$rp,#8*0] + sbcs $t0,$acc0,$m0 + stp $t2,$t3,[$rp,#8*2] + add $rp,$rp,#8*4 + sbcs $t1,$acc1,$m1 + cbnz $cnt,.Lmul4x_sub + + sbcs $t2,$acc2,$m2 + mov $tp,sp + add $ap,sp,#8*4 + ldp $a0,$a1,[$ap_end,#8*0] + sbcs $t3,$acc3,$m3 + stp $t0,$t1,[$rp,#8*0] + ldp $a2,$a3,[$ap_end,#8*2] + stp $t2,$t3,[$rp,#8*2] + ldp $acc0,$acc1,[$ap,#8*0] + ldp $acc2,$acc3,[$ap,#8*2] + sbcs xzr,$topmost,xzr // did it borrow? + ldr x30,[x29,#8] // pull return address + + sub $cnt,$num,#8*4 +.Lmul4x_cond_copy: + sub $cnt,$cnt,#8*4 + csel $t0,$acc0,$a0,lo + stp xzr,xzr,[$tp,#8*0] + csel $t1,$acc1,$a1,lo + ldp $a0,$a1,[$ap_end,#8*4] + ldp $acc0,$acc1,[$ap,#8*4] + csel $t2,$acc2,$a2,lo + stp xzr,xzr,[$tp,#8*2] + add $tp,$tp,#8*4 + csel $t3,$acc3,$a3,lo + ldp $a2,$a3,[$ap_end,#8*6] + ldp $acc2,$acc3,[$ap,#8*6] + add $ap,$ap,#8*4 + stp $t0,$t1,[$ap_end,#8*0] + stp $t2,$t3,[$ap_end,#8*2] + add $ap_end,$ap_end,#8*4 + cbnz $cnt,.Lmul4x_cond_copy + + csel $t0,$acc0,$a0,lo + stp xzr,xzr,[$tp,#8*0] + csel $t1,$acc1,$a1,lo + stp xzr,xzr,[$tp,#8*2] + csel $t2,$acc2,$a2,lo + stp xzr,xzr,[$tp,#8*3] + csel $t3,$acc3,$a3,lo + stp xzr,xzr,[$tp,#8*4] + stp $t0,$t1,[$ap_end,#8*0] + stp $t2,$t3,[$ap_end,#8*2] + + b .Lmul4x_done + +.align 4 +.Lmul4x4_post_condition: + adc $carry,$carry,xzr + ldr $ap,[x29,#96] // pull rp + // $acc0-3,$carry hold result, $m0-7 hold modulus + subs $a0,$acc0,$m0 + ldr x30,[x29,#8] // pull return address + sbcs $a1,$acc1,$m1 + stp xzr,xzr,[sp,#8*0] + sbcs $a2,$acc2,$m2 + stp xzr,xzr,[sp,#8*2] + sbcs $a3,$acc3,$m3 + stp xzr,xzr,[sp,#8*4] + sbcs xzr,$carry,xzr // did it borrow? + stp xzr,xzr,[sp,#8*6] + + // $a0-3 hold result-modulus + csel $a0,$acc0,$a0,lo + csel $a1,$acc1,$a1,lo + csel $a2,$acc2,$a2,lo + csel $a3,$acc3,$a3,lo + stp $a0,$a1,[$ap,#8*0] + stp $a2,$a3,[$ap,#8*2] + +.Lmul4x_done: + ldp x19,x20,[x29,#16] + mov sp,x29 + ldp x21,x22,[x29,#32] + mov x0,#1 + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldr x29,[sp],#128 + // x30 is popped earlier + AARCH64_VALIDATE_LINK_REGISTER + ret +.size __bn_mul4x_mont,.-__bn_mul4x_mont +___ +} +$code.=<<___; +.asciz "Montgomery Multiplication for ARMv8, CRYPTOGAMS by " +.align 4 +___ + +print $code; + +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/fipsmodule/bn/asm/x86-mont.pl b/vendor/ring/crypto/fipsmodule/bn/asm/x86-mont.pl new file mode 100755 index 00000000..7b1e94bf --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/bn/asm/x86-mont.pl @@ -0,0 +1,336 @@ +#! /usr/bin/env perl +# Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== + +# October 2005 +# +# This is a "teaser" code, as it can be improved in several ways... +# First of all non-SSE2 path should be implemented (yes, for now it +# performs Montgomery multiplication/convolution only on SSE2-capable +# CPUs such as P4, others fall down to original code). Then inner loop +# can be unrolled and modulo-scheduled to improve ILP and possibly +# moved to 128-bit XMM register bank (though it would require input +# rearrangement and/or increase bus bandwidth utilization). Dedicated +# squaring procedure should give further performance improvement... +# Yet, for being draft, the code improves rsa512 *sign* benchmark by +# 110%(!), rsa1024 one - by 70% and rsa4096 - by 20%:-) + +# December 2006 +# +# Modulo-scheduling SSE2 loops results in further 15-20% improvement. +# Integer-only code [being equipped with dedicated squaring procedure] +# gives ~40% on rsa512 sign benchmark... + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +push(@INC,"${dir}","${dir}../../../perlasm"); +require "x86asm.pl"; + +$output = pop; +open STDOUT,">$output"; + +&asm_init($ARGV[0]); + +$sse2=0; +for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } + +&external_label("GFp_ia32cap_P") if ($sse2); + +&function_begin("GFp_bn_mul_mont"); + +$i="edx"; +$j="ecx"; +$ap="esi"; $tp="esi"; # overlapping variables!!! +$rp="edi"; $bp="edi"; # overlapping variables!!! +$np="ebp"; +$num="ebx"; + +$_num=&DWP(4*0,"esp"); # stack top layout +$_rp=&DWP(4*1,"esp"); +$_ap=&DWP(4*2,"esp"); +$_bp=&DWP(4*3,"esp"); +$_np=&DWP(4*4,"esp"); +$_n0=&DWP(4*5,"esp"); $_n0q=&QWP(4*5,"esp"); +$_sp=&DWP(4*6,"esp"); +$_bpend=&DWP(4*7,"esp"); +$frame=32; # size of above frame rounded up to 16n + + &xor ("eax","eax"); + &mov ("edi",&wparam(5)); # int num + + &lea ("esi",&wparam(0)); # put aside pointer to argument block + &lea ("edx",&wparam(1)); # load ap + &add ("edi",2); # extra two words on top of tp + &neg ("edi"); + &lea ("ebp",&DWP(-$frame,"esp","edi",4)); # future alloca($frame+4*(num+2)) + &neg ("edi"); + + # minimize cache contention by arranging 2K window between stack + # pointer and ap argument [np is also position sensitive vector, + # but it's assumed to be near ap, as it's allocated at ~same + # time]. + &mov ("eax","ebp"); + &sub ("eax","edx"); + &and ("eax",2047); + &sub ("ebp","eax"); # this aligns sp and ap modulo 2048 + + &xor ("edx","ebp"); + &and ("edx",2048); + &xor ("edx",2048); + &sub ("ebp","edx"); # this splits them apart modulo 4096 + + &and ("ebp",-64); # align to cache line + + # An OS-agnostic version of __chkstk. + # + # Some OSes (Windows) insist on stack being "wired" to + # physical memory in strictly sequential manner, i.e. if stack + # allocation spans two pages, then reference to farmost one can + # be punishable by SEGV. But page walking can do good even on + # other OSes, because it guarantees that villain thread hits + # the guard page before it can make damage to innocent one... + &mov ("eax","esp"); + &sub ("eax","ebp"); + &and ("eax",-4096); + &mov ("edx","esp"); # saved stack pointer! + &lea ("esp",&DWP(0,"ebp","eax")); + &mov ("eax",&DWP(0,"esp")); + &cmp ("esp","ebp"); + &ja (&label("page_walk")); + &jmp (&label("page_walk_done")); + +&set_label("page_walk",16); + &lea ("esp",&DWP(-4096,"esp")); + &mov ("eax",&DWP(0,"esp")); + &cmp ("esp","ebp"); + &ja (&label("page_walk")); +&set_label("page_walk_done"); + + ################################# load argument block... + &mov ("eax",&DWP(0*4,"esi"));# BN_ULONG *rp + &mov ("ebx",&DWP(1*4,"esi"));# const BN_ULONG *ap + &mov ("ecx",&DWP(2*4,"esi"));# const BN_ULONG *bp + &mov ("ebp",&DWP(3*4,"esi"));# const BN_ULONG *np + &mov ("esi",&DWP(4*4,"esi"));# const BN_ULONG *n0 + #&mov ("edi",&DWP(5*4,"esi"));# int num + + &mov ("esi",&DWP(0,"esi")); # pull n0[0] + &mov ($_rp,"eax"); # ... save a copy of argument block + &mov ($_ap,"ebx"); + &mov ($_bp,"ecx"); + &mov ($_np,"ebp"); + &mov ($_n0,"esi"); + &lea ($num,&DWP(-3,"edi")); # num=num-1 to assist modulo-scheduling + #&mov ($_num,$num); # redundant as $num is not reused + &mov ($_sp,"edx"); # saved stack pointer! + +if($sse2) { +$acc0="mm0"; # mmx register bank layout +$acc1="mm1"; +$car0="mm2"; +$car1="mm3"; +$mul0="mm4"; +$mul1="mm5"; +$temp="mm6"; +$mask="mm7"; + + &picmeup("eax","GFp_ia32cap_P"); + &bt (&DWP(0,"eax"),26); + # The non-SSE2 code was removed. + + &mov ("eax",-1); + &movd ($mask,"eax"); # mask 32 lower bits + + &mov ($ap,$_ap); # load input pointers + &mov ($bp,$_bp); + &mov ($np,$_np); + + &xor ($i,$i); # i=0 + &xor ($j,$j); # j=0 + + &movd ($mul0,&DWP(0,$bp)); # bp[0] + &movd ($mul1,&DWP(0,$ap)); # ap[0] + &movd ($car1,&DWP(0,$np)); # np[0] + + &pmuludq($mul1,$mul0); # ap[0]*bp[0] + &movq ($car0,$mul1); + &movq ($acc0,$mul1); # I wish movd worked for + &pand ($acc0,$mask); # inter-register transfers + + &pmuludq($mul1,$_n0q); # *=n0 + + &pmuludq($car1,$mul1); # "t[0]"*np[0]*n0 + &paddq ($car1,$acc0); + + &movd ($acc1,&DWP(4,$np)); # np[1] + &movd ($acc0,&DWP(4,$ap)); # ap[1] + + &psrlq ($car0,32); + &psrlq ($car1,32); + + &inc ($j); # j++ +&set_label("1st",16); + &pmuludq($acc0,$mul0); # ap[j]*bp[0] + &pmuludq($acc1,$mul1); # np[j]*m1 + &paddq ($car0,$acc0); # +=c0 + &paddq ($car1,$acc1); # +=c1 + + &movq ($acc0,$car0); + &pand ($acc0,$mask); + &movd ($acc1,&DWP(4,$np,$j,4)); # np[j+1] + &paddq ($car1,$acc0); # +=ap[j]*bp[0]; + &movd ($acc0,&DWP(4,$ap,$j,4)); # ap[j+1] + &psrlq ($car0,32); + &movd (&DWP($frame-4,"esp",$j,4),$car1); # tp[j-1]= + &psrlq ($car1,32); + + &lea ($j,&DWP(1,$j)); + &cmp ($j,$num); + &jl (&label("1st")); + + &pmuludq($acc0,$mul0); # ap[num-1]*bp[0] + &pmuludq($acc1,$mul1); # np[num-1]*m1 + &paddq ($car0,$acc0); # +=c0 + &paddq ($car1,$acc1); # +=c1 + + &movq ($acc0,$car0); + &pand ($acc0,$mask); + &paddq ($car1,$acc0); # +=ap[num-1]*bp[0]; + &movd (&DWP($frame-4,"esp",$j,4),$car1); # tp[num-2]= + + &psrlq ($car0,32); + &psrlq ($car1,32); + + &paddq ($car1,$car0); + &movq (&QWP($frame,"esp",$num,4),$car1); # tp[num].tp[num-1] + + &inc ($i); # i++ +&set_label("outer"); + &xor ($j,$j); # j=0 + + &movd ($mul0,&DWP(0,$bp,$i,4)); # bp[i] + &movd ($mul1,&DWP(0,$ap)); # ap[0] + &movd ($temp,&DWP($frame,"esp")); # tp[0] + &movd ($car1,&DWP(0,$np)); # np[0] + &pmuludq($mul1,$mul0); # ap[0]*bp[i] + + &paddq ($mul1,$temp); # +=tp[0] + &movq ($acc0,$mul1); + &movq ($car0,$mul1); + &pand ($acc0,$mask); + + &pmuludq($mul1,$_n0q); # *=n0 + + &pmuludq($car1,$mul1); + &paddq ($car1,$acc0); + + &movd ($temp,&DWP($frame+4,"esp")); # tp[1] + &movd ($acc1,&DWP(4,$np)); # np[1] + &movd ($acc0,&DWP(4,$ap)); # ap[1] + + &psrlq ($car0,32); + &psrlq ($car1,32); + &paddq ($car0,$temp); # +=tp[1] + + &inc ($j); # j++ + &dec ($num); +&set_label("inner"); + &pmuludq($acc0,$mul0); # ap[j]*bp[i] + &pmuludq($acc1,$mul1); # np[j]*m1 + &paddq ($car0,$acc0); # +=c0 + &paddq ($car1,$acc1); # +=c1 + + &movq ($acc0,$car0); + &movd ($temp,&DWP($frame+4,"esp",$j,4));# tp[j+1] + &pand ($acc0,$mask); + &movd ($acc1,&DWP(4,$np,$j,4)); # np[j+1] + &paddq ($car1,$acc0); # +=ap[j]*bp[i]+tp[j] + &movd ($acc0,&DWP(4,$ap,$j,4)); # ap[j+1] + &psrlq ($car0,32); + &movd (&DWP($frame-4,"esp",$j,4),$car1);# tp[j-1]= + &psrlq ($car1,32); + &paddq ($car0,$temp); # +=tp[j+1] + + &dec ($num); + &lea ($j,&DWP(1,$j)); # j++ + &jnz (&label("inner")); + + &mov ($num,$j); + &pmuludq($acc0,$mul0); # ap[num-1]*bp[i] + &pmuludq($acc1,$mul1); # np[num-1]*m1 + &paddq ($car0,$acc0); # +=c0 + &paddq ($car1,$acc1); # +=c1 + + &movq ($acc0,$car0); + &pand ($acc0,$mask); + &paddq ($car1,$acc0); # +=ap[num-1]*bp[i]+tp[num-1] + &movd (&DWP($frame-4,"esp",$j,4),$car1); # tp[num-2]= + &psrlq ($car0,32); + &psrlq ($car1,32); + + &movd ($temp,&DWP($frame+4,"esp",$num,4)); # += tp[num] + &paddq ($car1,$car0); + &paddq ($car1,$temp); + &movq (&QWP($frame,"esp",$num,4),$car1); # tp[num].tp[num-1] + + &lea ($i,&DWP(1,$i)); # i++ + &cmp ($i,$num); + &jle (&label("outer")); + + &emms (); # done with mmx bank + +} # The non-SSE2 code was removed. + +&set_label("common_tail",16); + &mov ($np,$_np); # load modulus pointer + &mov ($rp,$_rp); # load result pointer + &lea ($tp,&DWP($frame,"esp")); # [$ap and $bp are zapped] + + &mov ("eax",&DWP(0,$tp)); # tp[0] + &mov ($j,$num); # j=num-1 + &xor ($i,$i); # i=0 and clear CF! + +&set_label("sub",16); + &sbb ("eax",&DWP(0,$np,$i,4)); + &mov (&DWP(0,$rp,$i,4),"eax"); # rp[i]=tp[i]-np[i] + &dec ($j); # doesn't affect CF! + &mov ("eax",&DWP(4,$tp,$i,4)); # tp[i+1] + &lea ($i,&DWP(1,$i)); # i++ + &jge (&label("sub")); + + &sbb ("eax",0); # handle upmost overflow bit + &mov ("edx",-1); + &xor ("edx","eax"); + &jmp (&label("copy")); + +&set_label("copy",16); # conditional copy + &mov ($tp,&DWP($frame,"esp",$num,4)); + &mov ($np,&DWP(0,$rp,$num,4)); + &mov (&DWP($frame,"esp",$num,4),$j); # zap temporary vector + &and ($tp,"eax"); + &and ($np,"edx"); + &or ($np,$tp); + &mov (&DWP(0,$rp,$num,4),$np); + &dec ($num); + &jge (&label("copy")); + + &mov ("esp",$_sp); # pull saved stack pointer + &mov ("eax",1); +&function_end("GFp_bn_mul_mont"); + +&asciz("Montgomery Multiplication for x86, CRYPTOGAMS by "); + +&asm_finish(); + +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/fipsmodule/bn/asm/x86_64-mont.pl b/vendor/ring/crypto/fipsmodule/bn/asm/x86_64-mont.pl new file mode 100755 index 00000000..e0ad0b9a --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/bn/asm/x86_64-mont.pl @@ -0,0 +1,1579 @@ +#! /usr/bin/env perl +# Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== + +# October 2005. +# +# Montgomery multiplication routine for x86_64. While it gives modest +# 9% improvement of rsa4096 sign on Opteron, rsa512 sign runs more +# than twice, >2x, as fast. Most common rsa1024 sign is improved by +# respectful 50%. It remains to be seen if loop unrolling and +# dedicated squaring routine can provide further improvement... + +# July 2011. +# +# Add dedicated squaring procedure. Performance improvement varies +# from platform to platform, but in average it's ~5%/15%/25%/33% +# for 512-/1024-/2048-/4096-bit RSA *sign* benchmarks respectively. + +# August 2011. +# +# Unroll and modulo-schedule inner loops in such manner that they +# are "fallen through" for input lengths of 8, which is critical for +# 1024-bit RSA *sign*. Average performance improvement in comparison +# to *initial* version of this module from 2005 is ~0%/30%/40%/45% +# for 512-/1024-/2048-/4096-bit RSA *sign* benchmarks respectively. + +# June 2013. +# +# Optimize reduction in squaring procedure and improve 1024+-bit RSA +# sign performance by 10-16% on Intel Sandy Bridge and later +# (virtually same on non-Intel processors). + +# August 2013. +# +# Add MULX/ADOX/ADCX code path. + +$flavour = shift; +$output = shift; +if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } + +$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/); + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../../perlasm/x86_64-xlate.pl" and -f $xlate) or +die "can't locate x86_64-xlate.pl"; + +open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""; +*STDOUT=*OUT; + +# In upstream, this is controlled by shelling out to the compiler to check +# versions, but BoringSSL is intended to be used with pre-generated perlasm +# output, so this isn't useful anyway. +$addx = 1; + +# void GFp_bn_mul_mont( +$rp="%rdi"; # BN_ULONG *rp, +$ap="%rsi"; # const BN_ULONG *ap, +$bp="%rdx"; # const BN_ULONG *bp, +$np="%rcx"; # const BN_ULONG *np, +$n0="%r8"; # const BN_ULONG *n0, +# TODO(davidben): The code below treats $num as an int, but C passes in a +# size_t. +$num="%r9"; # size_t num); +$lo0="%r10"; +$hi0="%r11"; +$hi1="%r13"; +$i="%r14"; +$j="%r15"; +$m0="%rbx"; +$m1="%rbp"; + +$code=<<___; +.text + +.extern GFp_ia32cap_P + +.globl GFp_bn_mul_mont +.type GFp_bn_mul_mont,\@function,6 +.align 16 +GFp_bn_mul_mont: +.cfi_startproc + mov ${num}d,${num}d + mov %rsp,%rax +.cfi_def_cfa_register %rax + test \$3,${num}d + jnz .Lmul_enter + cmp \$8,${num}d + jb .Lmul_enter +___ +$code.=<<___ if ($addx); + mov GFp_ia32cap_P+8(%rip),%r11d +___ +$code.=<<___; + cmp $ap,$bp + jne .Lmul4x_enter + test \$7,${num}d + jz .Lsqr8x_enter + jmp .Lmul4x_enter + +.align 16 +.Lmul_enter: + push %rbx +.cfi_push %rbx + push %rbp +.cfi_push %rbp + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 + + neg $num + mov %rsp,%r11 + lea -16(%rsp,$num,8),%r10 # future alloca(8*(num+2)) + neg $num # restore $num + and \$-1024,%r10 # minimize TLB usage + + # An OS-agnostic version of __chkstk. + # + # Some OSes (Windows) insist on stack being "wired" to + # physical memory in strictly sequential manner, i.e. if stack + # allocation spans two pages, then reference to farmost one can + # be punishable by SEGV. But page walking can do good even on + # other OSes, because it guarantees that villain thread hits + # the guard page before it can make damage to innocent one... + sub %r10,%r11 + and \$-4096,%r11 + lea (%r10,%r11),%rsp + mov (%rsp),%r11 + cmp %r10,%rsp + ja .Lmul_page_walk + jmp .Lmul_page_walk_done + +.align 16 +.Lmul_page_walk: + lea -4096(%rsp),%rsp + mov (%rsp),%r11 + cmp %r10,%rsp + ja .Lmul_page_walk +.Lmul_page_walk_done: + + mov %rax,8(%rsp,$num,8) # tp[num+1]=%rsp +.cfi_cfa_expression %rsp+8,$num,8,mul,plus,deref,+8 +.Lmul_body: + mov $bp,%r12 # reassign $bp +___ + $bp="%r12"; +$code.=<<___; + mov ($n0),$n0 # pull n0[0] value + mov ($bp),$m0 # m0=bp[0] + mov ($ap),%rax + + xor $i,$i # i=0 + xor $j,$j # j=0 + + mov $n0,$m1 + mulq $m0 # ap[0]*bp[0] + mov %rax,$lo0 + mov ($np),%rax + + imulq $lo0,$m1 # "tp[0]"*n0 + mov %rdx,$hi0 + + mulq $m1 # np[0]*m1 + add %rax,$lo0 # discarded + mov 8($ap),%rax + adc \$0,%rdx + mov %rdx,$hi1 + + lea 1($j),$j # j++ + jmp .L1st_enter + +.align 16 +.L1st: + add %rax,$hi1 + mov ($ap,$j,8),%rax + adc \$0,%rdx + add $hi0,$hi1 # np[j]*m1+ap[j]*bp[0] + mov $lo0,$hi0 + adc \$0,%rdx + mov $hi1,-16(%rsp,$j,8) # tp[j-1] + mov %rdx,$hi1 + +.L1st_enter: + mulq $m0 # ap[j]*bp[0] + add %rax,$hi0 + mov ($np,$j,8),%rax + adc \$0,%rdx + lea 1($j),$j # j++ + mov %rdx,$lo0 + + mulq $m1 # np[j]*m1 + cmp $num,$j + jne .L1st + + add %rax,$hi1 + mov ($ap),%rax # ap[0] + adc \$0,%rdx + add $hi0,$hi1 # np[j]*m1+ap[j]*bp[0] + adc \$0,%rdx + mov $hi1,-16(%rsp,$j,8) # tp[j-1] + mov %rdx,$hi1 + mov $lo0,$hi0 + + xor %rdx,%rdx + add $hi0,$hi1 + adc \$0,%rdx + mov $hi1,-8(%rsp,$num,8) + mov %rdx,(%rsp,$num,8) # store upmost overflow bit + + lea 1($i),$i # i++ + jmp .Louter +.align 16 +.Louter: + mov ($bp,$i,8),$m0 # m0=bp[i] + xor $j,$j # j=0 + mov $n0,$m1 + mov (%rsp),$lo0 + mulq $m0 # ap[0]*bp[i] + add %rax,$lo0 # ap[0]*bp[i]+tp[0] + mov ($np),%rax + adc \$0,%rdx + + imulq $lo0,$m1 # tp[0]*n0 + mov %rdx,$hi0 + + mulq $m1 # np[0]*m1 + add %rax,$lo0 # discarded + mov 8($ap),%rax + adc \$0,%rdx + mov 8(%rsp),$lo0 # tp[1] + mov %rdx,$hi1 + + lea 1($j),$j # j++ + jmp .Linner_enter + +.align 16 +.Linner: + add %rax,$hi1 + mov ($ap,$j,8),%rax + adc \$0,%rdx + add $lo0,$hi1 # np[j]*m1+ap[j]*bp[i]+tp[j] + mov (%rsp,$j,8),$lo0 + adc \$0,%rdx + mov $hi1,-16(%rsp,$j,8) # tp[j-1] + mov %rdx,$hi1 + +.Linner_enter: + mulq $m0 # ap[j]*bp[i] + add %rax,$hi0 + mov ($np,$j,8),%rax + adc \$0,%rdx + add $hi0,$lo0 # ap[j]*bp[i]+tp[j] + mov %rdx,$hi0 + adc \$0,$hi0 + lea 1($j),$j # j++ + + mulq $m1 # np[j]*m1 + cmp $num,$j + jne .Linner + + add %rax,$hi1 + mov ($ap),%rax # ap[0] + adc \$0,%rdx + add $lo0,$hi1 # np[j]*m1+ap[j]*bp[i]+tp[j] + mov (%rsp,$j,8),$lo0 + adc \$0,%rdx + mov $hi1,-16(%rsp,$j,8) # tp[j-1] + mov %rdx,$hi1 + + xor %rdx,%rdx + add $hi0,$hi1 + adc \$0,%rdx + add $lo0,$hi1 # pull upmost overflow bit + adc \$0,%rdx + mov $hi1,-8(%rsp,$num,8) + mov %rdx,(%rsp,$num,8) # store upmost overflow bit + + lea 1($i),$i # i++ + cmp $num,$i + jb .Louter + + xor $i,$i # i=0 and clear CF! + mov (%rsp),%rax # tp[0] + mov $num,$j # j=num + +.align 16 +.Lsub: sbb ($np,$i,8),%rax + mov %rax,($rp,$i,8) # rp[i]=tp[i]-np[i] + mov 8(%rsp,$i,8),%rax # tp[i+1] + lea 1($i),$i # i++ + dec $j # doesn't affect CF! + jnz .Lsub + + sbb \$0,%rax # handle upmost overflow bit + mov \$-1,%rbx + xor %rax,%rbx # not %rax + xor $i,$i + mov $num,$j # j=num + +.Lcopy: # conditional copy + mov ($rp,$i,8),%rcx + mov (%rsp,$i,8),%rdx + and %rbx,%rcx + and %rax,%rdx + mov $num,(%rsp,$i,8) # zap temporary vector + or %rcx,%rdx + mov %rdx,($rp,$i,8) # rp[i]=tp[i] + lea 1($i),$i + sub \$1,$j + jnz .Lcopy + + mov 8(%rsp,$num,8),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 + mov \$1,%rax + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lmul_epilogue: + ret +.cfi_endproc +.size GFp_bn_mul_mont,.-GFp_bn_mul_mont +___ +{{{ +my @A=("%r10","%r11"); +my @N=("%r13","%rdi"); +$code.=<<___; +.type bn_mul4x_mont,\@function,6 +.align 16 +bn_mul4x_mont: +.cfi_startproc + mov ${num}d,${num}d + mov %rsp,%rax +.cfi_def_cfa_register %rax +.Lmul4x_enter: +___ +$code.=<<___ if ($addx); + and \$0x80100,%r11d + cmp \$0x80100,%r11d + je .Lmulx4x_enter +___ +$code.=<<___; + push %rbx +.cfi_push %rbx + push %rbp +.cfi_push %rbp + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 + + neg $num + mov %rsp,%r11 + lea -32(%rsp,$num,8),%r10 # future alloca(8*(num+4)) + neg $num # restore + and \$-1024,%r10 # minimize TLB usage + + sub %r10,%r11 + and \$-4096,%r11 + lea (%r10,%r11),%rsp + mov (%rsp),%r11 + cmp %r10,%rsp + ja .Lmul4x_page_walk + jmp .Lmul4x_page_walk_done + +.Lmul4x_page_walk: + lea -4096(%rsp),%rsp + mov (%rsp),%r11 + cmp %r10,%rsp + ja .Lmul4x_page_walk +.Lmul4x_page_walk_done: + + mov %rax,8(%rsp,$num,8) # tp[num+1]=%rsp +.cfi_cfa_expression %rsp+8,$num,8,mul,plus,deref,+8 +.Lmul4x_body: + mov $rp,16(%rsp,$num,8) # tp[num+2]=$rp + mov %rdx,%r12 # reassign $bp +___ + $bp="%r12"; +$code.=<<___; + mov ($n0),$n0 # pull n0[0] value + mov ($bp),$m0 # m0=bp[0] + mov ($ap),%rax + + xor $i,$i # i=0 + xor $j,$j # j=0 + + mov $n0,$m1 + mulq $m0 # ap[0]*bp[0] + mov %rax,$A[0] + mov ($np),%rax + + imulq $A[0],$m1 # "tp[0]"*n0 + mov %rdx,$A[1] + + mulq $m1 # np[0]*m1 + add %rax,$A[0] # discarded + mov 8($ap),%rax + adc \$0,%rdx + mov %rdx,$N[1] + + mulq $m0 + add %rax,$A[1] + mov 8($np),%rax + adc \$0,%rdx + mov %rdx,$A[0] + + mulq $m1 + add %rax,$N[1] + mov 16($ap),%rax + adc \$0,%rdx + add $A[1],$N[1] + lea 4($j),$j # j++ + adc \$0,%rdx + mov $N[1],(%rsp) + mov %rdx,$N[0] + jmp .L1st4x +.align 16 +.L1st4x: + mulq $m0 # ap[j]*bp[0] + add %rax,$A[0] + mov -16($np,$j,8),%rax + adc \$0,%rdx + mov %rdx,$A[1] + + mulq $m1 # np[j]*m1 + add %rax,$N[0] + mov -8($ap,$j,8),%rax + adc \$0,%rdx + add $A[0],$N[0] # np[j]*m1+ap[j]*bp[0] + adc \$0,%rdx + mov $N[0],-24(%rsp,$j,8) # tp[j-1] + mov %rdx,$N[1] + + mulq $m0 # ap[j]*bp[0] + add %rax,$A[1] + mov -8($np,$j,8),%rax + adc \$0,%rdx + mov %rdx,$A[0] + + mulq $m1 # np[j]*m1 + add %rax,$N[1] + mov ($ap,$j,8),%rax + adc \$0,%rdx + add $A[1],$N[1] # np[j]*m1+ap[j]*bp[0] + adc \$0,%rdx + mov $N[1],-16(%rsp,$j,8) # tp[j-1] + mov %rdx,$N[0] + + mulq $m0 # ap[j]*bp[0] + add %rax,$A[0] + mov ($np,$j,8),%rax + adc \$0,%rdx + mov %rdx,$A[1] + + mulq $m1 # np[j]*m1 + add %rax,$N[0] + mov 8($ap,$j,8),%rax + adc \$0,%rdx + add $A[0],$N[0] # np[j]*m1+ap[j]*bp[0] + adc \$0,%rdx + mov $N[0],-8(%rsp,$j,8) # tp[j-1] + mov %rdx,$N[1] + + mulq $m0 # ap[j]*bp[0] + add %rax,$A[1] + mov 8($np,$j,8),%rax + adc \$0,%rdx + lea 4($j),$j # j++ + mov %rdx,$A[0] + + mulq $m1 # np[j]*m1 + add %rax,$N[1] + mov -16($ap,$j,8),%rax + adc \$0,%rdx + add $A[1],$N[1] # np[j]*m1+ap[j]*bp[0] + adc \$0,%rdx + mov $N[1],-32(%rsp,$j,8) # tp[j-1] + mov %rdx,$N[0] + cmp $num,$j + jb .L1st4x + + mulq $m0 # ap[j]*bp[0] + add %rax,$A[0] + mov -16($np,$j,8),%rax + adc \$0,%rdx + mov %rdx,$A[1] + + mulq $m1 # np[j]*m1 + add %rax,$N[0] + mov -8($ap,$j,8),%rax + adc \$0,%rdx + add $A[0],$N[0] # np[j]*m1+ap[j]*bp[0] + adc \$0,%rdx + mov $N[0],-24(%rsp,$j,8) # tp[j-1] + mov %rdx,$N[1] + + mulq $m0 # ap[j]*bp[0] + add %rax,$A[1] + mov -8($np,$j,8),%rax + adc \$0,%rdx + mov %rdx,$A[0] + + mulq $m1 # np[j]*m1 + add %rax,$N[1] + mov ($ap),%rax # ap[0] + adc \$0,%rdx + add $A[1],$N[1] # np[j]*m1+ap[j]*bp[0] + adc \$0,%rdx + mov $N[1],-16(%rsp,$j,8) # tp[j-1] + mov %rdx,$N[0] + + xor $N[1],$N[1] + add $A[0],$N[0] + adc \$0,$N[1] + mov $N[0],-8(%rsp,$j,8) + mov $N[1],(%rsp,$j,8) # store upmost overflow bit + + lea 1($i),$i # i++ +.align 4 +.Louter4x: + mov ($bp,$i,8),$m0 # m0=bp[i] + xor $j,$j # j=0 + mov (%rsp),$A[0] + mov $n0,$m1 + mulq $m0 # ap[0]*bp[i] + add %rax,$A[0] # ap[0]*bp[i]+tp[0] + mov ($np),%rax + adc \$0,%rdx + + imulq $A[0],$m1 # tp[0]*n0 + mov %rdx,$A[1] + + mulq $m1 # np[0]*m1 + add %rax,$A[0] # "$N[0]", discarded + mov 8($ap),%rax + adc \$0,%rdx + mov %rdx,$N[1] + + mulq $m0 # ap[j]*bp[i] + add %rax,$A[1] + mov 8($np),%rax + adc \$0,%rdx + add 8(%rsp),$A[1] # +tp[1] + adc \$0,%rdx + mov %rdx,$A[0] + + mulq $m1 # np[j]*m1 + add %rax,$N[1] + mov 16($ap),%rax + adc \$0,%rdx + add $A[1],$N[1] # np[j]*m1+ap[j]*bp[i]+tp[j] + lea 4($j),$j # j+=2 + adc \$0,%rdx + mov $N[1],(%rsp) # tp[j-1] + mov %rdx,$N[0] + jmp .Linner4x +.align 16 +.Linner4x: + mulq $m0 # ap[j]*bp[i] + add %rax,$A[0] + mov -16($np,$j,8),%rax + adc \$0,%rdx + add -16(%rsp,$j,8),$A[0] # ap[j]*bp[i]+tp[j] + adc \$0,%rdx + mov %rdx,$A[1] + + mulq $m1 # np[j]*m1 + add %rax,$N[0] + mov -8($ap,$j,8),%rax + adc \$0,%rdx + add $A[0],$N[0] + adc \$0,%rdx + mov $N[0],-24(%rsp,$j,8) # tp[j-1] + mov %rdx,$N[1] + + mulq $m0 # ap[j]*bp[i] + add %rax,$A[1] + mov -8($np,$j,8),%rax + adc \$0,%rdx + add -8(%rsp,$j,8),$A[1] + adc \$0,%rdx + mov %rdx,$A[0] + + mulq $m1 # np[j]*m1 + add %rax,$N[1] + mov ($ap,$j,8),%rax + adc \$0,%rdx + add $A[1],$N[1] + adc \$0,%rdx + mov $N[1],-16(%rsp,$j,8) # tp[j-1] + mov %rdx,$N[0] + + mulq $m0 # ap[j]*bp[i] + add %rax,$A[0] + mov ($np,$j,8),%rax + adc \$0,%rdx + add (%rsp,$j,8),$A[0] # ap[j]*bp[i]+tp[j] + adc \$0,%rdx + mov %rdx,$A[1] + + mulq $m1 # np[j]*m1 + add %rax,$N[0] + mov 8($ap,$j,8),%rax + adc \$0,%rdx + add $A[0],$N[0] + adc \$0,%rdx + mov $N[0],-8(%rsp,$j,8) # tp[j-1] + mov %rdx,$N[1] + + mulq $m0 # ap[j]*bp[i] + add %rax,$A[1] + mov 8($np,$j,8),%rax + adc \$0,%rdx + add 8(%rsp,$j,8),$A[1] + adc \$0,%rdx + lea 4($j),$j # j++ + mov %rdx,$A[0] + + mulq $m1 # np[j]*m1 + add %rax,$N[1] + mov -16($ap,$j,8),%rax + adc \$0,%rdx + add $A[1],$N[1] + adc \$0,%rdx + mov $N[1],-32(%rsp,$j,8) # tp[j-1] + mov %rdx,$N[0] + cmp $num,$j + jb .Linner4x + + mulq $m0 # ap[j]*bp[i] + add %rax,$A[0] + mov -16($np,$j,8),%rax + adc \$0,%rdx + add -16(%rsp,$j,8),$A[0] # ap[j]*bp[i]+tp[j] + adc \$0,%rdx + mov %rdx,$A[1] + + mulq $m1 # np[j]*m1 + add %rax,$N[0] + mov -8($ap,$j,8),%rax + adc \$0,%rdx + add $A[0],$N[0] + adc \$0,%rdx + mov $N[0],-24(%rsp,$j,8) # tp[j-1] + mov %rdx,$N[1] + + mulq $m0 # ap[j]*bp[i] + add %rax,$A[1] + mov -8($np,$j,8),%rax + adc \$0,%rdx + add -8(%rsp,$j,8),$A[1] + adc \$0,%rdx + lea 1($i),$i # i++ + mov %rdx,$A[0] + + mulq $m1 # np[j]*m1 + add %rax,$N[1] + mov ($ap),%rax # ap[0] + adc \$0,%rdx + add $A[1],$N[1] + adc \$0,%rdx + mov $N[1],-16(%rsp,$j,8) # tp[j-1] + mov %rdx,$N[0] + + xor $N[1],$N[1] + add $A[0],$N[0] + adc \$0,$N[1] + add (%rsp,$num,8),$N[0] # pull upmost overflow bit + adc \$0,$N[1] + mov $N[0],-8(%rsp,$j,8) + mov $N[1],(%rsp,$j,8) # store upmost overflow bit + + cmp $num,$i + jb .Louter4x +___ +{ +my @ri=("%rax","%rdx",$m0,$m1); +$code.=<<___; + mov 16(%rsp,$num,8),$rp # restore $rp + lea -4($num),$j + mov 0(%rsp),@ri[0] # tp[0] + mov 8(%rsp),@ri[1] # tp[1] + shr \$2,$j # j=num/4-1 + lea (%rsp),$ap # borrow ap for tp + xor $i,$i # i=0 and clear CF! + + sub 0($np),@ri[0] + mov 16($ap),@ri[2] # tp[2] + mov 24($ap),@ri[3] # tp[3] + sbb 8($np),@ri[1] + +.Lsub4x: + mov @ri[0],0($rp,$i,8) # rp[i]=tp[i]-np[i] + mov @ri[1],8($rp,$i,8) # rp[i]=tp[i]-np[i] + sbb 16($np,$i,8),@ri[2] + mov 32($ap,$i,8),@ri[0] # tp[i+1] + mov 40($ap,$i,8),@ri[1] + sbb 24($np,$i,8),@ri[3] + mov @ri[2],16($rp,$i,8) # rp[i]=tp[i]-np[i] + mov @ri[3],24($rp,$i,8) # rp[i]=tp[i]-np[i] + sbb 32($np,$i,8),@ri[0] + mov 48($ap,$i,8),@ri[2] + mov 56($ap,$i,8),@ri[3] + sbb 40($np,$i,8),@ri[1] + lea 4($i),$i # i++ + dec $j # doesn't affect CF! + jnz .Lsub4x + + mov @ri[0],0($rp,$i,8) # rp[i]=tp[i]-np[i] + mov 32($ap,$i,8),@ri[0] # load overflow bit + sbb 16($np,$i,8),@ri[2] + mov @ri[1],8($rp,$i,8) # rp[i]=tp[i]-np[i] + sbb 24($np,$i,8),@ri[3] + mov @ri[2],16($rp,$i,8) # rp[i]=tp[i]-np[i] + + sbb \$0,@ri[0] # handle upmost overflow bit + mov @ri[3],24($rp,$i,8) # rp[i]=tp[i]-np[i] + pxor %xmm0,%xmm0 + movq @ri[0],%xmm4 + pcmpeqd %xmm5,%xmm5 + pshufd \$0,%xmm4,%xmm4 + mov $num,$j + pxor %xmm4,%xmm5 + shr \$2,$j # j=num/4 + xor %eax,%eax # i=0 + + jmp .Lcopy4x +.align 16 +.Lcopy4x: # conditional copy + movdqa (%rsp,%rax),%xmm1 + movdqu ($rp,%rax),%xmm2 + pand %xmm4,%xmm1 + pand %xmm5,%xmm2 + movdqa 16(%rsp,%rax),%xmm3 + movdqa %xmm0,(%rsp,%rax) + por %xmm2,%xmm1 + movdqu 16($rp,%rax),%xmm2 + movdqu %xmm1,($rp,%rax) + pand %xmm4,%xmm3 + pand %xmm5,%xmm2 + movdqa %xmm0,16(%rsp,%rax) + por %xmm2,%xmm3 + movdqu %xmm3,16($rp,%rax) + lea 32(%rax),%rax + dec $j + jnz .Lcopy4x +___ +} +$code.=<<___; + mov 8(%rsp,$num,8),%rsi # restore %rsp +.cfi_def_cfa %rsi, 8 + mov \$1,%rax + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lmul4x_epilogue: + ret +.cfi_endproc +.size bn_mul4x_mont,.-bn_mul4x_mont +___ +}}} + {{{ +###################################################################### +# void bn_sqr8x_mont( +my $rptr="%rdi"; # const BN_ULONG *rptr, +my $aptr="%rsi"; # const BN_ULONG *aptr, +my $bptr="%rdx"; # not used +my $nptr="%rcx"; # const BN_ULONG *nptr, +my $n0 ="%r8"; # const BN_ULONG *n0); +my $num ="%r9"; # int num, has to be divisible by 8 + +my ($i,$j,$tptr)=("%rbp","%rcx",$rptr); +my @A0=("%r10","%r11"); +my @A1=("%r12","%r13"); +my ($a0,$a1,$ai)=("%r14","%r15","%rbx"); + +$code.=<<___ if ($addx); +.extern GFp_bn_sqrx8x_internal # see x86_64-mont5 module +___ +$code.=<<___; +.extern GFp_bn_sqr8x_internal # see x86_64-mont5 module + +.type bn_sqr8x_mont,\@function,6 +.align 32 +bn_sqr8x_mont: +.cfi_startproc + mov %rsp,%rax +.cfi_def_cfa_register %rax +.Lsqr8x_enter: + push %rbx +.cfi_push %rbx + push %rbp +.cfi_push %rbp + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +.Lsqr8x_prologue: + + mov ${num}d,%r10d + shl \$3,${num}d # convert $num to bytes + shl \$3+2,%r10 # 4*$num + neg $num + + ############################################################## + # ensure that stack frame doesn't alias with $aptr modulo + # 4096. this is done to allow memory disambiguation logic + # do its job. + # + lea -64(%rsp,$num,2),%r11 + mov %rsp,%rbp + mov ($n0),$n0 # *n0 + sub $aptr,%r11 + and \$4095,%r11 + cmp %r11,%r10 + jb .Lsqr8x_sp_alt + sub %r11,%rbp # align with $aptr + lea -64(%rbp,$num,2),%rbp # future alloca(frame+2*$num) + jmp .Lsqr8x_sp_done + +.align 32 +.Lsqr8x_sp_alt: + lea 4096-64(,$num,2),%r10 # 4096-frame-2*$num + lea -64(%rbp,$num,2),%rbp # future alloca(frame+2*$num) + sub %r10,%r11 + mov \$0,%r10 + cmovc %r10,%r11 + sub %r11,%rbp +.Lsqr8x_sp_done: + and \$-64,%rbp + mov %rsp,%r11 + sub %rbp,%r11 + and \$-4096,%r11 + lea (%rbp,%r11),%rsp + mov (%rsp),%r10 + cmp %rbp,%rsp + ja .Lsqr8x_page_walk + jmp .Lsqr8x_page_walk_done + +.align 16 +.Lsqr8x_page_walk: + lea -4096(%rsp),%rsp + mov (%rsp),%r10 + cmp %rbp,%rsp + ja .Lsqr8x_page_walk +.Lsqr8x_page_walk_done: + + mov $num,%r10 + neg $num + + mov $n0, 32(%rsp) + mov %rax, 40(%rsp) # save original %rsp +.cfi_cfa_expression %rsp+40,deref,+8 +.Lsqr8x_body: + + movq $nptr, %xmm2 # save pointer to modulus + pxor %xmm0,%xmm0 + movq $rptr,%xmm1 # save $rptr + movq %r10, %xmm3 # -$num +___ +$code.=<<___ if ($addx); + mov GFp_ia32cap_P+8(%rip),%eax + and \$0x80100,%eax + cmp \$0x80100,%eax + jne .Lsqr8x_nox + + call GFp_bn_sqrx8x_internal # see x86_64-mont5 module + # %rax top-most carry + # %rbp nptr + # %rcx -8*num + # %r8 end of tp[2*num] + lea (%r8,%rcx),%rbx + mov %rcx,$num + mov %rcx,%rdx + movq %xmm1,$rptr + sar \$3+2,%rcx # %cf=0 + jmp .Lsqr8x_sub + +.align 32 +.Lsqr8x_nox: +___ +$code.=<<___; + call GFp_bn_sqr8x_internal # see x86_64-mont5 module + # %rax top-most carry + # %rbp nptr + # %r8 -8*num + # %rdi end of tp[2*num] + lea (%rdi,$num),%rbx + mov $num,%rcx + mov $num,%rdx + movq %xmm1,$rptr + sar \$3+2,%rcx # %cf=0 + jmp .Lsqr8x_sub + +.align 32 +.Lsqr8x_sub: + mov 8*0(%rbx),%r12 + mov 8*1(%rbx),%r13 + mov 8*2(%rbx),%r14 + mov 8*3(%rbx),%r15 + lea 8*4(%rbx),%rbx + sbb 8*0(%rbp),%r12 + sbb 8*1(%rbp),%r13 + sbb 8*2(%rbp),%r14 + sbb 8*3(%rbp),%r15 + lea 8*4(%rbp),%rbp + mov %r12,8*0($rptr) + mov %r13,8*1($rptr) + mov %r14,8*2($rptr) + mov %r15,8*3($rptr) + lea 8*4($rptr),$rptr + inc %rcx # preserves %cf + jnz .Lsqr8x_sub + + sbb \$0,%rax # top-most carry + lea (%rbx,$num),%rbx # rewind + lea ($rptr,$num),$rptr # rewind + + movq %rax,%xmm1 + pxor %xmm0,%xmm0 + pshufd \$0,%xmm1,%xmm1 + mov 40(%rsp),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 + jmp .Lsqr8x_cond_copy + +.align 32 +.Lsqr8x_cond_copy: + movdqa 16*0(%rbx),%xmm2 + movdqa 16*1(%rbx),%xmm3 + lea 16*2(%rbx),%rbx + movdqu 16*0($rptr),%xmm4 + movdqu 16*1($rptr),%xmm5 + lea 16*2($rptr),$rptr + movdqa %xmm0,-16*2(%rbx) # zero tp + movdqa %xmm0,-16*1(%rbx) + movdqa %xmm0,-16*2(%rbx,%rdx) + movdqa %xmm0,-16*1(%rbx,%rdx) + pcmpeqd %xmm1,%xmm0 + pand %xmm1,%xmm2 + pand %xmm1,%xmm3 + pand %xmm0,%xmm4 + pand %xmm0,%xmm5 + pxor %xmm0,%xmm0 + por %xmm2,%xmm4 + por %xmm3,%xmm5 + movdqu %xmm4,-16*2($rptr) + movdqu %xmm5,-16*1($rptr) + add \$32,$num + jnz .Lsqr8x_cond_copy + + mov \$1,%rax + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lsqr8x_epilogue: + ret +.cfi_endproc +.size bn_sqr8x_mont,.-bn_sqr8x_mont +___ +}}} + +if ($addx) {{{ +my $bp="%rdx"; # original value + +$code.=<<___; +.type bn_mulx4x_mont,\@function,6 +.align 32 +bn_mulx4x_mont: +.cfi_startproc + mov %rsp,%rax +.cfi_def_cfa_register %rax +.Lmulx4x_enter: + push %rbx +.cfi_push %rbx + push %rbp +.cfi_push %rbp + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +.Lmulx4x_prologue: + + shl \$3,${num}d # convert $num to bytes + xor %r10,%r10 + sub $num,%r10 # -$num + mov ($n0),$n0 # *n0 + lea -72(%rsp,%r10),%rbp # future alloca(frame+$num+8) + and \$-128,%rbp + mov %rsp,%r11 + sub %rbp,%r11 + and \$-4096,%r11 + lea (%rbp,%r11),%rsp + mov (%rsp),%r10 + cmp %rbp,%rsp + ja .Lmulx4x_page_walk + jmp .Lmulx4x_page_walk_done + +.align 16 +.Lmulx4x_page_walk: + lea -4096(%rsp),%rsp + mov (%rsp),%r10 + cmp %rbp,%rsp + ja .Lmulx4x_page_walk +.Lmulx4x_page_walk_done: + + lea ($bp,$num),%r10 + ############################################################## + # Stack layout + # +0 num + # +8 off-loaded &b[i] + # +16 end of b[num] + # +24 saved n0 + # +32 saved rp + # +40 saved %rsp + # +48 inner counter + # +56 + # +64 tmp[num+1] + # + mov $num,0(%rsp) # save $num + shr \$5,$num + mov %r10,16(%rsp) # end of b[num] + sub \$1,$num + mov $n0, 24(%rsp) # save *n0 + mov $rp, 32(%rsp) # save $rp + mov %rax,40(%rsp) # save original %rsp +.cfi_cfa_expression %rsp+40,deref,+8 + mov $num,48(%rsp) # inner counter + jmp .Lmulx4x_body + +.align 32 +.Lmulx4x_body: +___ +my ($aptr, $bptr, $nptr, $tptr, $mi, $bi, $zero, $num)= + ("%rsi","%rdi","%rcx","%rbx","%r8","%r9","%rbp","%rax"); +my $rptr=$bptr; +$code.=<<___; + lea 8($bp),$bptr + mov ($bp),%rdx # b[0], $bp==%rdx actually + lea 64+32(%rsp),$tptr + mov %rdx,$bi + + mulx 0*8($aptr),$mi,%rax # a[0]*b[0] + mulx 1*8($aptr),%r11,%r14 # a[1]*b[0] + add %rax,%r11 + mov $bptr,8(%rsp) # off-load &b[i] + mulx 2*8($aptr),%r12,%r13 # ... + adc %r14,%r12 + adc \$0,%r13 + + mov $mi,$bptr # borrow $bptr + imulq 24(%rsp),$mi # "t[0]"*n0 + xor $zero,$zero # cf=0, of=0 + + mulx 3*8($aptr),%rax,%r14 + mov $mi,%rdx + lea 4*8($aptr),$aptr + adcx %rax,%r13 + adcx $zero,%r14 # cf=0 + + mulx 0*8($nptr),%rax,%r10 + adcx %rax,$bptr # discarded + adox %r11,%r10 + mulx 1*8($nptr),%rax,%r11 + adcx %rax,%r10 + adox %r12,%r11 + .byte 0xc4,0x62,0xfb,0xf6,0xa1,0x10,0x00,0x00,0x00 # mulx 2*8($nptr),%rax,%r12 + mov 48(%rsp),$bptr # counter value + mov %r10,-4*8($tptr) + adcx %rax,%r11 + adox %r13,%r12 + mulx 3*8($nptr),%rax,%r15 + mov $bi,%rdx + mov %r11,-3*8($tptr) + adcx %rax,%r12 + adox $zero,%r15 # of=0 + lea 4*8($nptr),$nptr + mov %r12,-2*8($tptr) + + jmp .Lmulx4x_1st + +.align 32 +.Lmulx4x_1st: + adcx $zero,%r15 # cf=0, modulo-scheduled + mulx 0*8($aptr),%r10,%rax # a[4]*b[0] + adcx %r14,%r10 + mulx 1*8($aptr),%r11,%r14 # a[5]*b[0] + adcx %rax,%r11 + mulx 2*8($aptr),%r12,%rax # ... + adcx %r14,%r12 + mulx 3*8($aptr),%r13,%r14 + .byte 0x67,0x67 + mov $mi,%rdx + adcx %rax,%r13 + adcx $zero,%r14 # cf=0 + lea 4*8($aptr),$aptr + lea 4*8($tptr),$tptr + + adox %r15,%r10 + mulx 0*8($nptr),%rax,%r15 + adcx %rax,%r10 + adox %r15,%r11 + mulx 1*8($nptr),%rax,%r15 + adcx %rax,%r11 + adox %r15,%r12 + mulx 2*8($nptr),%rax,%r15 + mov %r10,-5*8($tptr) + adcx %rax,%r12 + mov %r11,-4*8($tptr) + adox %r15,%r13 + mulx 3*8($nptr),%rax,%r15 + mov $bi,%rdx + mov %r12,-3*8($tptr) + adcx %rax,%r13 + adox $zero,%r15 + lea 4*8($nptr),$nptr + mov %r13,-2*8($tptr) + + dec $bptr # of=0, pass cf + jnz .Lmulx4x_1st + + mov 0(%rsp),$num # load num + mov 8(%rsp),$bptr # re-load &b[i] + adc $zero,%r15 # modulo-scheduled + add %r15,%r14 + sbb %r15,%r15 # top-most carry + mov %r14,-1*8($tptr) + jmp .Lmulx4x_outer + +.align 32 +.Lmulx4x_outer: + mov ($bptr),%rdx # b[i] + lea 8($bptr),$bptr # b++ + sub $num,$aptr # rewind $aptr + mov %r15,($tptr) # save top-most carry + lea 64+4*8(%rsp),$tptr + sub $num,$nptr # rewind $nptr + + mulx 0*8($aptr),$mi,%r11 # a[0]*b[i] + xor %ebp,%ebp # xor $zero,$zero # cf=0, of=0 + mov %rdx,$bi + mulx 1*8($aptr),%r14,%r12 # a[1]*b[i] + adox -4*8($tptr),$mi + adcx %r14,%r11 + mulx 2*8($aptr),%r15,%r13 # ... + adox -3*8($tptr),%r11 + adcx %r15,%r12 + adox -2*8($tptr),%r12 + adcx $zero,%r13 + adox $zero,%r13 + + mov $bptr,8(%rsp) # off-load &b[i] + mov $mi,%r15 + imulq 24(%rsp),$mi # "t[0]"*n0 + xor %ebp,%ebp # xor $zero,$zero # cf=0, of=0 + + mulx 3*8($aptr),%rax,%r14 + mov $mi,%rdx + adcx %rax,%r13 + adox -1*8($tptr),%r13 + adcx $zero,%r14 + lea 4*8($aptr),$aptr + adox $zero,%r14 + + mulx 0*8($nptr),%rax,%r10 + adcx %rax,%r15 # discarded + adox %r11,%r10 + mulx 1*8($nptr),%rax,%r11 + adcx %rax,%r10 + adox %r12,%r11 + mulx 2*8($nptr),%rax,%r12 + mov %r10,-4*8($tptr) + adcx %rax,%r11 + adox %r13,%r12 + mulx 3*8($nptr),%rax,%r15 + mov $bi,%rdx + mov %r11,-3*8($tptr) + lea 4*8($nptr),$nptr + adcx %rax,%r12 + adox $zero,%r15 # of=0 + mov 48(%rsp),$bptr # counter value + mov %r12,-2*8($tptr) + + jmp .Lmulx4x_inner + +.align 32 +.Lmulx4x_inner: + mulx 0*8($aptr),%r10,%rax # a[4]*b[i] + adcx $zero,%r15 # cf=0, modulo-scheduled + adox %r14,%r10 + mulx 1*8($aptr),%r11,%r14 # a[5]*b[i] + adcx 0*8($tptr),%r10 + adox %rax,%r11 + mulx 2*8($aptr),%r12,%rax # ... + adcx 1*8($tptr),%r11 + adox %r14,%r12 + mulx 3*8($aptr),%r13,%r14 + mov $mi,%rdx + adcx 2*8($tptr),%r12 + adox %rax,%r13 + adcx 3*8($tptr),%r13 + adox $zero,%r14 # of=0 + lea 4*8($aptr),$aptr + lea 4*8($tptr),$tptr + adcx $zero,%r14 # cf=0 + + adox %r15,%r10 + mulx 0*8($nptr),%rax,%r15 + adcx %rax,%r10 + adox %r15,%r11 + mulx 1*8($nptr),%rax,%r15 + adcx %rax,%r11 + adox %r15,%r12 + mulx 2*8($nptr),%rax,%r15 + mov %r10,-5*8($tptr) + adcx %rax,%r12 + adox %r15,%r13 + mulx 3*8($nptr),%rax,%r15 + mov $bi,%rdx + mov %r11,-4*8($tptr) + mov %r12,-3*8($tptr) + adcx %rax,%r13 + adox $zero,%r15 + lea 4*8($nptr),$nptr + mov %r13,-2*8($tptr) + + dec $bptr # of=0, pass cf + jnz .Lmulx4x_inner + + mov 0(%rsp),$num # load num + mov 8(%rsp),$bptr # re-load &b[i] + adc $zero,%r15 # modulo-scheduled + sub 0*8($tptr),$zero # pull top-most carry + adc %r15,%r14 + sbb %r15,%r15 # top-most carry + mov %r14,-1*8($tptr) + + cmp 16(%rsp),$bptr + jne .Lmulx4x_outer + + lea 64(%rsp),$tptr + sub $num,$nptr # rewind $nptr + neg %r15 + mov $num,%rdx + shr \$3+2,$num # %cf=0 + mov 32(%rsp),$rptr # restore rp + jmp .Lmulx4x_sub + +.align 32 +.Lmulx4x_sub: + mov 8*0($tptr),%r11 + mov 8*1($tptr),%r12 + mov 8*2($tptr),%r13 + mov 8*3($tptr),%r14 + lea 8*4($tptr),$tptr + sbb 8*0($nptr),%r11 + sbb 8*1($nptr),%r12 + sbb 8*2($nptr),%r13 + sbb 8*3($nptr),%r14 + lea 8*4($nptr),$nptr + mov %r11,8*0($rptr) + mov %r12,8*1($rptr) + mov %r13,8*2($rptr) + mov %r14,8*3($rptr) + lea 8*4($rptr),$rptr + dec $num # preserves %cf + jnz .Lmulx4x_sub + + sbb \$0,%r15 # top-most carry + lea 64(%rsp),$tptr + sub %rdx,$rptr # rewind + + movq %r15,%xmm1 + pxor %xmm0,%xmm0 + pshufd \$0,%xmm1,%xmm1 + mov 40(%rsp),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 + jmp .Lmulx4x_cond_copy + +.align 32 +.Lmulx4x_cond_copy: + movdqa 16*0($tptr),%xmm2 + movdqa 16*1($tptr),%xmm3 + lea 16*2($tptr),$tptr + movdqu 16*0($rptr),%xmm4 + movdqu 16*1($rptr),%xmm5 + lea 16*2($rptr),$rptr + movdqa %xmm0,-16*2($tptr) # zero tp + movdqa %xmm0,-16*1($tptr) + pcmpeqd %xmm1,%xmm0 + pand %xmm1,%xmm2 + pand %xmm1,%xmm3 + pand %xmm0,%xmm4 + pand %xmm0,%xmm5 + pxor %xmm0,%xmm0 + por %xmm2,%xmm4 + por %xmm3,%xmm5 + movdqu %xmm4,-16*2($rptr) + movdqu %xmm5,-16*1($rptr) + sub \$32,%rdx + jnz .Lmulx4x_cond_copy + + mov %rdx,($tptr) + + mov \$1,%rax + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lmulx4x_epilogue: + ret +.cfi_endproc +.size bn_mulx4x_mont,.-bn_mulx4x_mont +___ +}}} +$code.=<<___; +.asciz "Montgomery Multiplication for x86_64, CRYPTOGAMS by " +.align 16 +___ + +# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame, +# CONTEXT *context,DISPATCHER_CONTEXT *disp) +if ($win64) { +$rec="%rcx"; +$frame="%rdx"; +$context="%r8"; +$disp="%r9"; + +$code.=<<___; +.extern __imp_RtlVirtualUnwind +.type mul_handler,\@abi-omnipotent +.align 16 +mul_handler: + push %rsi + push %rdi + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + pushfq + sub \$64,%rsp + + mov 120($context),%rax # pull context->Rax + mov 248($context),%rbx # pull context->Rip + + mov 8($disp),%rsi # disp->ImageBase + mov 56($disp),%r11 # disp->HandlerData + + mov 0(%r11),%r10d # HandlerData[0] + lea (%rsi,%r10),%r10 # end of prologue label + cmp %r10,%rbx # context->RipRsp + + mov 4(%r11),%r10d # HandlerData[1] + lea (%rsi,%r10),%r10 # epilogue label + cmp %r10,%rbx # context->Rip>=epilogue label + jae .Lcommon_seh_tail + + mov 192($context),%r10 # pull $num + mov 8(%rax,%r10,8),%rax # pull saved stack pointer + + jmp .Lcommon_pop_regs +.size mul_handler,.-mul_handler + +.type sqr_handler,\@abi-omnipotent +.align 16 +sqr_handler: + push %rsi + push %rdi + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + pushfq + sub \$64,%rsp + + mov 120($context),%rax # pull context->Rax + mov 248($context),%rbx # pull context->Rip + + mov 8($disp),%rsi # disp->ImageBase + mov 56($disp),%r11 # disp->HandlerData + + mov 0(%r11),%r10d # HandlerData[0] + lea (%rsi,%r10),%r10 # end of prologue label + cmp %r10,%rbx # context->Rip<.Lsqr_prologue + jb .Lcommon_seh_tail + + mov 4(%r11),%r10d # HandlerData[1] + lea (%rsi,%r10),%r10 # body label + cmp %r10,%rbx # context->Rip<.Lsqr_body + jb .Lcommon_pop_regs + + mov 152($context),%rax # pull context->Rsp + + mov 8(%r11),%r10d # HandlerData[2] + lea (%rsi,%r10),%r10 # epilogue label + cmp %r10,%rbx # context->Rip>=.Lsqr_epilogue + jae .Lcommon_seh_tail + + mov 40(%rax),%rax # pull saved stack pointer + +.Lcommon_pop_regs: + mov -8(%rax),%rbx + mov -16(%rax),%rbp + mov -24(%rax),%r12 + mov -32(%rax),%r13 + mov -40(%rax),%r14 + mov -48(%rax),%r15 + mov %rbx,144($context) # restore context->Rbx + mov %rbp,160($context) # restore context->Rbp + mov %r12,216($context) # restore context->R12 + mov %r13,224($context) # restore context->R13 + mov %r14,232($context) # restore context->R14 + mov %r15,240($context) # restore context->R15 + +.Lcommon_seh_tail: + mov 8(%rax),%rdi + mov 16(%rax),%rsi + mov %rax,152($context) # restore context->Rsp + mov %rsi,168($context) # restore context->Rsi + mov %rdi,176($context) # restore context->Rdi + + mov 40($disp),%rdi # disp->ContextRecord + mov $context,%rsi # context + mov \$154,%ecx # sizeof(CONTEXT) + .long 0xa548f3fc # cld; rep movsq + + mov $disp,%rsi + xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER + mov 8(%rsi),%rdx # arg2, disp->ImageBase + mov 0(%rsi),%r8 # arg3, disp->ControlPc + mov 16(%rsi),%r9 # arg4, disp->FunctionEntry + mov 40(%rsi),%r10 # disp->ContextRecord + lea 56(%rsi),%r11 # &disp->HandlerData + lea 24(%rsi),%r12 # &disp->EstablisherFrame + mov %r10,32(%rsp) # arg5 + mov %r11,40(%rsp) # arg6 + mov %r12,48(%rsp) # arg7 + mov %rcx,56(%rsp) # arg8, (NULL) + call *__imp_RtlVirtualUnwind(%rip) + + mov \$1,%eax # ExceptionContinueSearch + add \$64,%rsp + popfq + pop %r15 + pop %r14 + pop %r13 + pop %r12 + pop %rbp + pop %rbx + pop %rdi + pop %rsi + ret +.size sqr_handler,.-sqr_handler + +.section .pdata +.align 4 + .rva .LSEH_begin_GFp_bn_mul_mont + .rva .LSEH_end_GFp_bn_mul_mont + .rva .LSEH_info_GFp_bn_mul_mont + + .rva .LSEH_begin_bn_mul4x_mont + .rva .LSEH_end_bn_mul4x_mont + .rva .LSEH_info_bn_mul4x_mont + + .rva .LSEH_begin_bn_sqr8x_mont + .rva .LSEH_end_bn_sqr8x_mont + .rva .LSEH_info_bn_sqr8x_mont +___ +$code.=<<___ if ($addx); + .rva .LSEH_begin_bn_mulx4x_mont + .rva .LSEH_end_bn_mulx4x_mont + .rva .LSEH_info_bn_mulx4x_mont +___ +$code.=<<___; +.section .xdata +.align 8 +.LSEH_info_GFp_bn_mul_mont: + .byte 9,0,0,0 + .rva mul_handler + .rva .Lmul_body,.Lmul_epilogue # HandlerData[] +.LSEH_info_bn_mul4x_mont: + .byte 9,0,0,0 + .rva mul_handler + .rva .Lmul4x_body,.Lmul4x_epilogue # HandlerData[] +.LSEH_info_bn_sqr8x_mont: + .byte 9,0,0,0 + .rva sqr_handler + .rva .Lsqr8x_prologue,.Lsqr8x_body,.Lsqr8x_epilogue # HandlerData[] +.align 8 +___ +$code.=<<___ if ($addx); +.LSEH_info_bn_mulx4x_mont: + .byte 9,0,0,0 + .rva sqr_handler + .rva .Lmulx4x_prologue,.Lmulx4x_body,.Lmulx4x_epilogue # HandlerData[] +.align 8 +___ +} + +print $code; +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/fipsmodule/bn/asm/x86_64-mont5.pl b/vendor/ring/crypto/fipsmodule/bn/asm/x86_64-mont5.pl new file mode 100755 index 00000000..b79b4033 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/bn/asm/x86_64-mont5.pl @@ -0,0 +1,3932 @@ +#! /usr/bin/env perl +# Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== + +# August 2011. +# +# Companion to x86_64-mont.pl that optimizes cache-timing attack +# countermeasures. The subroutines are produced by replacing bp[i] +# references in their x86_64-mont.pl counterparts with cache-neutral +# references to powers table computed in BN_mod_exp_mont_consttime. +# In addition subroutine that scatters elements of the powers table +# is implemented, so that scatter-/gathering can be tuned without +# bn_exp.c modifications. + +# August 2013. +# +# Add MULX/AD*X code paths and additional interfaces to optimize for +# branch prediction unit. For input lengths that are multiples of 8 +# the np argument is not just modulus value, but one interleaved +# with 0. This is to optimize post-condition... + +$flavour = shift; +$output = shift; +if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } + +$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/); + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../../perlasm/x86_64-xlate.pl" and -f $xlate) or +die "can't locate x86_64-xlate.pl"; + +open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""; +*STDOUT=*OUT; + +# In upstream, this is controlled by shelling out to the compiler to check +# versions, but BoringSSL is intended to be used with pre-generated perlasm +# output, so this isn't useful anyway. +$addx = 1; + +# int GFp_bn_mul_mont_gather5( +$rp="%rdi"; # BN_ULONG *rp, +$ap="%rsi"; # const BN_ULONG *ap, +$bp="%rdx"; # const BN_ULONG *bp, +$np="%rcx"; # const BN_ULONG *np, +$n0="%r8"; # const BN_ULONG *n0, +$num="%r9"; # int num, + # int idx); # 0 to 2^5-1, "index" in $bp holding + # pre-computed powers of a', interlaced + # in such manner that b[0] is $bp[idx], + # b[1] is [2^5+idx], etc. +$lo0="%r10"; +$hi0="%r11"; +$hi1="%r13"; +$i="%r14"; +$j="%r15"; +$m0="%rbx"; +$m1="%rbp"; + +$code=<<___; +.text + +.extern GFp_ia32cap_P + +.globl GFp_bn_mul_mont_gather5 +.type GFp_bn_mul_mont_gather5,\@function,6 +.align 64 +GFp_bn_mul_mont_gather5: +.cfi_startproc + mov ${num}d,${num}d + mov %rsp,%rax +.cfi_def_cfa_register %rax + test \$7,${num}d + jnz .Lmul_enter +___ +$code.=<<___ if ($addx); + leaq GFp_ia32cap_P(%rip),%r11 + mov 8(%r11),%r11d +___ +$code.=<<___; + jmp .Lmul4x_enter + +.align 16 +.Lmul_enter: + movd `($win64?56:8)`(%rsp),%xmm5 # load 7th argument + push %rbx +.cfi_push %rbx + push %rbp +.cfi_push %rbp + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 + + neg $num + mov %rsp,%r11 + lea -280(%rsp,$num,8),%r10 # future alloca(8*(num+2)+256+8) + neg $num # restore $num + and \$-1024,%r10 # minimize TLB usage + + # An OS-agnostic version of __chkstk. + # + # Some OSes (Windows) insist on stack being "wired" to + # physical memory in strictly sequential manner, i.e. if stack + # allocation spans two pages, then reference to farmost one can + # be punishable by SEGV. But page walking can do good even on + # other OSes, because it guarantees that villain thread hits + # the guard page before it can make damage to innocent one... + sub %r10,%r11 + and \$-4096,%r11 + lea (%r10,%r11),%rsp + mov (%rsp),%r11 + cmp %r10,%rsp + ja .Lmul_page_walk + jmp .Lmul_page_walk_done + +.Lmul_page_walk: + lea -4096(%rsp),%rsp + mov (%rsp),%r11 + cmp %r10,%rsp + ja .Lmul_page_walk +.Lmul_page_walk_done: + + lea .Linc(%rip),%r10 + mov %rax,8(%rsp,$num,8) # tp[num+1]=%rsp +.cfi_cfa_expression %rsp+8,$num,8,mul,plus,deref,+8 +.Lmul_body: + + lea 128($bp),%r12 # reassign $bp (+size optimization) +___ + $bp="%r12"; + $STRIDE=2**5*8; # 5 is "window size" + $N=$STRIDE/4; # should match cache line size +$code.=<<___; + movdqa 0(%r10),%xmm0 # 00000001000000010000000000000000 + movdqa 16(%r10),%xmm1 # 00000002000000020000000200000002 + lea 24-112(%rsp,$num,8),%r10# place the mask after tp[num+3] (+ICache optimization) + and \$-16,%r10 + + pshufd \$0,%xmm5,%xmm5 # broadcast index + movdqa %xmm1,%xmm4 + movdqa %xmm1,%xmm2 +___ +######################################################################## +# calculate mask by comparing 0..31 to index and save result to stack +# +$code.=<<___; + paddd %xmm0,%xmm1 + pcmpeqd %xmm5,%xmm0 # compare to 1,0 + .byte 0x67 + movdqa %xmm4,%xmm3 +___ +for($k=0;$k<$STRIDE/16-4;$k+=4) { +$code.=<<___; + paddd %xmm1,%xmm2 + pcmpeqd %xmm5,%xmm1 # compare to 3,2 + movdqa %xmm0,`16*($k+0)+112`(%r10) + movdqa %xmm4,%xmm0 + + paddd %xmm2,%xmm3 + pcmpeqd %xmm5,%xmm2 # compare to 5,4 + movdqa %xmm1,`16*($k+1)+112`(%r10) + movdqa %xmm4,%xmm1 + + paddd %xmm3,%xmm0 + pcmpeqd %xmm5,%xmm3 # compare to 7,6 + movdqa %xmm2,`16*($k+2)+112`(%r10) + movdqa %xmm4,%xmm2 + + paddd %xmm0,%xmm1 + pcmpeqd %xmm5,%xmm0 + movdqa %xmm3,`16*($k+3)+112`(%r10) + movdqa %xmm4,%xmm3 +___ +} +$code.=<<___; # last iteration can be optimized + paddd %xmm1,%xmm2 + pcmpeqd %xmm5,%xmm1 + movdqa %xmm0,`16*($k+0)+112`(%r10) + + paddd %xmm2,%xmm3 + .byte 0x67 + pcmpeqd %xmm5,%xmm2 + movdqa %xmm1,`16*($k+1)+112`(%r10) + + pcmpeqd %xmm5,%xmm3 + movdqa %xmm2,`16*($k+2)+112`(%r10) + pand `16*($k+0)-128`($bp),%xmm0 # while it's still in register + + pand `16*($k+1)-128`($bp),%xmm1 + pand `16*($k+2)-128`($bp),%xmm2 + movdqa %xmm3,`16*($k+3)+112`(%r10) + pand `16*($k+3)-128`($bp),%xmm3 + por %xmm2,%xmm0 + por %xmm3,%xmm1 +___ +for($k=0;$k<$STRIDE/16-4;$k+=4) { +$code.=<<___; + movdqa `16*($k+0)-128`($bp),%xmm4 + movdqa `16*($k+1)-128`($bp),%xmm5 + movdqa `16*($k+2)-128`($bp),%xmm2 + pand `16*($k+0)+112`(%r10),%xmm4 + movdqa `16*($k+3)-128`($bp),%xmm3 + pand `16*($k+1)+112`(%r10),%xmm5 + por %xmm4,%xmm0 + pand `16*($k+2)+112`(%r10),%xmm2 + por %xmm5,%xmm1 + pand `16*($k+3)+112`(%r10),%xmm3 + por %xmm2,%xmm0 + por %xmm3,%xmm1 +___ +} +$code.=<<___; + por %xmm1,%xmm0 + pshufd \$0x4e,%xmm0,%xmm1 + por %xmm1,%xmm0 + lea $STRIDE($bp),$bp + movq %xmm0,$m0 # m0=bp[0] + + mov ($n0),$n0 # pull n0[0] value + mov ($ap),%rax + + xor $i,$i # i=0 + xor $j,$j # j=0 + + mov $n0,$m1 + mulq $m0 # ap[0]*bp[0] + mov %rax,$lo0 + mov ($np),%rax + + imulq $lo0,$m1 # "tp[0]"*n0 + mov %rdx,$hi0 + + mulq $m1 # np[0]*m1 + add %rax,$lo0 # discarded + mov 8($ap),%rax + adc \$0,%rdx + mov %rdx,$hi1 + + lea 1($j),$j # j++ + jmp .L1st_enter + +.align 16 +.L1st: + add %rax,$hi1 + mov ($ap,$j,8),%rax + adc \$0,%rdx + add $hi0,$hi1 # np[j]*m1+ap[j]*bp[0] + mov $lo0,$hi0 + adc \$0,%rdx + mov $hi1,-16(%rsp,$j,8) # tp[j-1] + mov %rdx,$hi1 + +.L1st_enter: + mulq $m0 # ap[j]*bp[0] + add %rax,$hi0 + mov ($np,$j,8),%rax + adc \$0,%rdx + lea 1($j),$j # j++ + mov %rdx,$lo0 + + mulq $m1 # np[j]*m1 + cmp $num,$j + jne .L1st # note that upon exit $j==$num, so + # they can be used interchangeably + + add %rax,$hi1 + adc \$0,%rdx + add $hi0,$hi1 # np[j]*m1+ap[j]*bp[0] + adc \$0,%rdx + mov $hi1,-16(%rsp,$num,8) # tp[num-1] + mov %rdx,$hi1 + mov $lo0,$hi0 + + xor %rdx,%rdx + add $hi0,$hi1 + adc \$0,%rdx + mov $hi1,-8(%rsp,$num,8) + mov %rdx,(%rsp,$num,8) # store upmost overflow bit + + lea 1($i),$i # i++ + jmp .Louter +.align 16 +.Louter: + lea 24+128(%rsp,$num,8),%rdx # where 256-byte mask is (+size optimization) + and \$-16,%rdx + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 +___ +for($k=0;$k<$STRIDE/16;$k+=4) { +$code.=<<___; + movdqa `16*($k+0)-128`($bp),%xmm0 + movdqa `16*($k+1)-128`($bp),%xmm1 + movdqa `16*($k+2)-128`($bp),%xmm2 + movdqa `16*($k+3)-128`($bp),%xmm3 + pand `16*($k+0)-128`(%rdx),%xmm0 + pand `16*($k+1)-128`(%rdx),%xmm1 + por %xmm0,%xmm4 + pand `16*($k+2)-128`(%rdx),%xmm2 + por %xmm1,%xmm5 + pand `16*($k+3)-128`(%rdx),%xmm3 + por %xmm2,%xmm4 + por %xmm3,%xmm5 +___ +} +$code.=<<___; + por %xmm5,%xmm4 + pshufd \$0x4e,%xmm4,%xmm0 + por %xmm4,%xmm0 + lea $STRIDE($bp),$bp + + mov ($ap),%rax # ap[0] + movq %xmm0,$m0 # m0=bp[i] + + xor $j,$j # j=0 + mov $n0,$m1 + mov (%rsp),$lo0 + + mulq $m0 # ap[0]*bp[i] + add %rax,$lo0 # ap[0]*bp[i]+tp[0] + mov ($np),%rax + adc \$0,%rdx + + imulq $lo0,$m1 # tp[0]*n0 + mov %rdx,$hi0 + + mulq $m1 # np[0]*m1 + add %rax,$lo0 # discarded + mov 8($ap),%rax + adc \$0,%rdx + mov 8(%rsp),$lo0 # tp[1] + mov %rdx,$hi1 + + lea 1($j),$j # j++ + jmp .Linner_enter + +.align 16 +.Linner: + add %rax,$hi1 + mov ($ap,$j,8),%rax + adc \$0,%rdx + add $lo0,$hi1 # np[j]*m1+ap[j]*bp[i]+tp[j] + mov (%rsp,$j,8),$lo0 + adc \$0,%rdx + mov $hi1,-16(%rsp,$j,8) # tp[j-1] + mov %rdx,$hi1 + +.Linner_enter: + mulq $m0 # ap[j]*bp[i] + add %rax,$hi0 + mov ($np,$j,8),%rax + adc \$0,%rdx + add $hi0,$lo0 # ap[j]*bp[i]+tp[j] + mov %rdx,$hi0 + adc \$0,$hi0 + lea 1($j),$j # j++ + + mulq $m1 # np[j]*m1 + cmp $num,$j + jne .Linner # note that upon exit $j==$num, so + # they can be used interchangeably + add %rax,$hi1 + adc \$0,%rdx + add $lo0,$hi1 # np[j]*m1+ap[j]*bp[i]+tp[j] + mov (%rsp,$num,8),$lo0 + adc \$0,%rdx + mov $hi1,-16(%rsp,$num,8) # tp[num-1] + mov %rdx,$hi1 + + xor %rdx,%rdx + add $hi0,$hi1 + adc \$0,%rdx + add $lo0,$hi1 # pull upmost overflow bit + adc \$0,%rdx + mov $hi1,-8(%rsp,$num,8) + mov %rdx,(%rsp,$num,8) # store upmost overflow bit + + lea 1($i),$i # i++ + cmp $num,$i + jb .Louter + + xor $i,$i # i=0 and clear CF! + mov (%rsp),%rax # tp[0] + lea (%rsp),$ap # borrow ap for tp + mov $num,$j # j=num + jmp .Lsub +.align 16 +.Lsub: sbb ($np,$i,8),%rax + mov %rax,($rp,$i,8) # rp[i]=tp[i]-np[i] + mov 8($ap,$i,8),%rax # tp[i+1] + lea 1($i),$i # i++ + dec $j # doesn't affect CF! + jnz .Lsub + + sbb \$0,%rax # handle upmost overflow bit + mov \$-1,%rbx + xor %rax,%rbx + xor $i,$i + mov $num,$j # j=num + +.Lcopy: # conditional copy + mov ($rp,$i,8),%rcx + mov (%rsp,$i,8),%rdx + and %rbx,%rcx + and %rax,%rdx + mov $i,(%rsp,$i,8) # zap temporary vector + or %rcx,%rdx + mov %rdx,($rp,$i,8) # rp[i]=tp[i] + lea 1($i),$i + sub \$1,$j + jnz .Lcopy + + mov 8(%rsp,$num,8),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 + mov \$1,%rax + + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lmul_epilogue: + ret +.cfi_endproc +.size GFp_bn_mul_mont_gather5,.-GFp_bn_mul_mont_gather5 +___ +{{{ +my @A=("%r10","%r11"); +my @N=("%r13","%rdi"); +$code.=<<___; +.type bn_mul4x_mont_gather5,\@function,6 +.align 32 +bn_mul4x_mont_gather5: +.cfi_startproc + .byte 0x67 + mov %rsp,%rax +.cfi_def_cfa_register %rax +.Lmul4x_enter: +___ +$code.=<<___ if ($addx); + and \$0x80108,%r11d + cmp \$0x80108,%r11d # check for AD*X+BMI2+BMI1 + je .Lmulx4x_enter +___ +$code.=<<___; + push %rbx +.cfi_push %rbx + push %rbp +.cfi_push %rbp + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +.Lmul4x_prologue: + + .byte 0x67 + shl \$3,${num}d # convert $num to bytes + lea ($num,$num,2),%r10 # 3*$num in bytes + neg $num # -$num + + ############################################################## + # Ensure that stack frame doesn't alias with $rptr+3*$num + # modulo 4096, which covers ret[num], am[num] and n[num] + # (see bn_exp.c). This is done to allow memory disambiguation + # logic do its magic. [Extra [num] is allocated in order + # to align with GFp_bn_power5's frame, which is cleansed after + # completing exponentiation. Extra 256 bytes is for power mask + # calculated from 7th argument, the index.] + # + lea -320(%rsp,$num,2),%r11 + mov %rsp,%rbp + sub $rp,%r11 + and \$4095,%r11 + cmp %r11,%r10 + jb .Lmul4xsp_alt + sub %r11,%rbp # align with $rp + lea -320(%rbp,$num,2),%rbp # future alloca(frame+2*num*8+256) + jmp .Lmul4xsp_done + +.align 32 +.Lmul4xsp_alt: + lea 4096-320(,$num,2),%r10 + lea -320(%rbp,$num,2),%rbp # future alloca(frame+2*num*8+256) + sub %r10,%r11 + mov \$0,%r10 + cmovc %r10,%r11 + sub %r11,%rbp +.Lmul4xsp_done: + and \$-64,%rbp + mov %rsp,%r11 + sub %rbp,%r11 + and \$-4096,%r11 + lea (%rbp,%r11),%rsp + mov (%rsp),%r10 + cmp %rbp,%rsp + ja .Lmul4x_page_walk + jmp .Lmul4x_page_walk_done + +.Lmul4x_page_walk: + lea -4096(%rsp),%rsp + mov (%rsp),%r10 + cmp %rbp,%rsp + ja .Lmul4x_page_walk +.Lmul4x_page_walk_done: + + neg $num + + mov %rax,40(%rsp) +.cfi_cfa_expression %rsp+40,deref,+8 +.Lmul4x_body: + + call mul4x_internal + + mov 40(%rsp),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 + mov \$1,%rax + + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lmul4x_epilogue: + ret +.cfi_endproc +.size bn_mul4x_mont_gather5,.-bn_mul4x_mont_gather5 + +.type mul4x_internal,\@abi-omnipotent +.align 32 +mul4x_internal: +.cfi_startproc + shl \$5,$num # $num was in bytes + movd `($win64?56:8)`(%rax),%xmm5 # load 7th argument, index + lea .Linc(%rip),%rax + lea 128(%rdx,$num),%r13 # end of powers table (+size optimization) + shr \$5,$num # restore $num +___ + $bp="%r12"; + $STRIDE=2**5*8; # 5 is "window size" + $N=$STRIDE/4; # should match cache line size + $tp=$i; +$code.=<<___; + movdqa 0(%rax),%xmm0 # 00000001000000010000000000000000 + movdqa 16(%rax),%xmm1 # 00000002000000020000000200000002 + lea 88-112(%rsp,$num),%r10 # place the mask after tp[num+1] (+ICache optimization) + lea 128(%rdx),$bp # size optimization + + pshufd \$0,%xmm5,%xmm5 # broadcast index + movdqa %xmm1,%xmm4 + .byte 0x67,0x67 + movdqa %xmm1,%xmm2 +___ +######################################################################## +# calculate mask by comparing 0..31 to index and save result to stack +# +$code.=<<___; + paddd %xmm0,%xmm1 + pcmpeqd %xmm5,%xmm0 # compare to 1,0 + .byte 0x67 + movdqa %xmm4,%xmm3 +___ +for($i=0;$i<$STRIDE/16-4;$i+=4) { +$code.=<<___; + paddd %xmm1,%xmm2 + pcmpeqd %xmm5,%xmm1 # compare to 3,2 + movdqa %xmm0,`16*($i+0)+112`(%r10) + movdqa %xmm4,%xmm0 + + paddd %xmm2,%xmm3 + pcmpeqd %xmm5,%xmm2 # compare to 5,4 + movdqa %xmm1,`16*($i+1)+112`(%r10) + movdqa %xmm4,%xmm1 + + paddd %xmm3,%xmm0 + pcmpeqd %xmm5,%xmm3 # compare to 7,6 + movdqa %xmm2,`16*($i+2)+112`(%r10) + movdqa %xmm4,%xmm2 + + paddd %xmm0,%xmm1 + pcmpeqd %xmm5,%xmm0 + movdqa %xmm3,`16*($i+3)+112`(%r10) + movdqa %xmm4,%xmm3 +___ +} +$code.=<<___; # last iteration can be optimized + paddd %xmm1,%xmm2 + pcmpeqd %xmm5,%xmm1 + movdqa %xmm0,`16*($i+0)+112`(%r10) + + paddd %xmm2,%xmm3 + .byte 0x67 + pcmpeqd %xmm5,%xmm2 + movdqa %xmm1,`16*($i+1)+112`(%r10) + + pcmpeqd %xmm5,%xmm3 + movdqa %xmm2,`16*($i+2)+112`(%r10) + pand `16*($i+0)-128`($bp),%xmm0 # while it's still in register + + pand `16*($i+1)-128`($bp),%xmm1 + pand `16*($i+2)-128`($bp),%xmm2 + movdqa %xmm3,`16*($i+3)+112`(%r10) + pand `16*($i+3)-128`($bp),%xmm3 + por %xmm2,%xmm0 + por %xmm3,%xmm1 +___ +for($i=0;$i<$STRIDE/16-4;$i+=4) { +$code.=<<___; + movdqa `16*($i+0)-128`($bp),%xmm4 + movdqa `16*($i+1)-128`($bp),%xmm5 + movdqa `16*($i+2)-128`($bp),%xmm2 + pand `16*($i+0)+112`(%r10),%xmm4 + movdqa `16*($i+3)-128`($bp),%xmm3 + pand `16*($i+1)+112`(%r10),%xmm5 + por %xmm4,%xmm0 + pand `16*($i+2)+112`(%r10),%xmm2 + por %xmm5,%xmm1 + pand `16*($i+3)+112`(%r10),%xmm3 + por %xmm2,%xmm0 + por %xmm3,%xmm1 +___ +} +$code.=<<___; + por %xmm1,%xmm0 + pshufd \$0x4e,%xmm0,%xmm1 + por %xmm1,%xmm0 + lea $STRIDE($bp),$bp + movq %xmm0,$m0 # m0=bp[0] + + mov %r13,16+8(%rsp) # save end of b[num] + mov $rp, 56+8(%rsp) # save $rp + + mov ($n0),$n0 # pull n0[0] value + mov ($ap),%rax + lea ($ap,$num),$ap # end of a[num] + neg $num + + mov $n0,$m1 + mulq $m0 # ap[0]*bp[0] + mov %rax,$A[0] + mov ($np),%rax + + imulq $A[0],$m1 # "tp[0]"*n0 + lea 64+8(%rsp),$tp + mov %rdx,$A[1] + + mulq $m1 # np[0]*m1 + add %rax,$A[0] # discarded + mov 8($ap,$num),%rax + adc \$0,%rdx + mov %rdx,$N[1] + + mulq $m0 + add %rax,$A[1] + mov 8*1($np),%rax + adc \$0,%rdx + mov %rdx,$A[0] + + mulq $m1 + add %rax,$N[1] + mov 16($ap,$num),%rax + adc \$0,%rdx + add $A[1],$N[1] + lea 4*8($num),$j # j=4 + lea 8*4($np),$np + adc \$0,%rdx + mov $N[1],($tp) + mov %rdx,$N[0] + jmp .L1st4x + +.align 32 +.L1st4x: + mulq $m0 # ap[j]*bp[0] + add %rax,$A[0] + mov -8*2($np),%rax + lea 32($tp),$tp + adc \$0,%rdx + mov %rdx,$A[1] + + mulq $m1 # np[j]*m1 + add %rax,$N[0] + mov -8($ap,$j),%rax + adc \$0,%rdx + add $A[0],$N[0] # np[j]*m1+ap[j]*bp[0] + adc \$0,%rdx + mov $N[0],-24($tp) # tp[j-1] + mov %rdx,$N[1] + + mulq $m0 # ap[j]*bp[0] + add %rax,$A[1] + mov -8*1($np),%rax + adc \$0,%rdx + mov %rdx,$A[0] + + mulq $m1 # np[j]*m1 + add %rax,$N[1] + mov ($ap,$j),%rax + adc \$0,%rdx + add $A[1],$N[1] # np[j]*m1+ap[j]*bp[0] + adc \$0,%rdx + mov $N[1],-16($tp) # tp[j-1] + mov %rdx,$N[0] + + mulq $m0 # ap[j]*bp[0] + add %rax,$A[0] + mov 8*0($np),%rax + adc \$0,%rdx + mov %rdx,$A[1] + + mulq $m1 # np[j]*m1 + add %rax,$N[0] + mov 8($ap,$j),%rax + adc \$0,%rdx + add $A[0],$N[0] # np[j]*m1+ap[j]*bp[0] + adc \$0,%rdx + mov $N[0],-8($tp) # tp[j-1] + mov %rdx,$N[1] + + mulq $m0 # ap[j]*bp[0] + add %rax,$A[1] + mov 8*1($np),%rax + adc \$0,%rdx + mov %rdx,$A[0] + + mulq $m1 # np[j]*m1 + add %rax,$N[1] + mov 16($ap,$j),%rax + adc \$0,%rdx + add $A[1],$N[1] # np[j]*m1+ap[j]*bp[0] + lea 8*4($np),$np + adc \$0,%rdx + mov $N[1],($tp) # tp[j-1] + mov %rdx,$N[0] + + add \$32,$j # j+=4 + jnz .L1st4x + + mulq $m0 # ap[j]*bp[0] + add %rax,$A[0] + mov -8*2($np),%rax + lea 32($tp),$tp + adc \$0,%rdx + mov %rdx,$A[1] + + mulq $m1 # np[j]*m1 + add %rax,$N[0] + mov -8($ap),%rax + adc \$0,%rdx + add $A[0],$N[0] # np[j]*m1+ap[j]*bp[0] + adc \$0,%rdx + mov $N[0],-24($tp) # tp[j-1] + mov %rdx,$N[1] + + mulq $m0 # ap[j]*bp[0] + add %rax,$A[1] + mov -8*1($np),%rax + adc \$0,%rdx + mov %rdx,$A[0] + + mulq $m1 # np[j]*m1 + add %rax,$N[1] + mov ($ap,$num),%rax # ap[0] + adc \$0,%rdx + add $A[1],$N[1] # np[j]*m1+ap[j]*bp[0] + adc \$0,%rdx + mov $N[1],-16($tp) # tp[j-1] + mov %rdx,$N[0] + + lea ($np,$num),$np # rewind $np + + xor $N[1],$N[1] + add $A[0],$N[0] + adc \$0,$N[1] + mov $N[0],-8($tp) + + jmp .Louter4x + +.align 32 +.Louter4x: + lea 16+128($tp),%rdx # where 256-byte mask is (+size optimization) + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 +___ +for($i=0;$i<$STRIDE/16;$i+=4) { +$code.=<<___; + movdqa `16*($i+0)-128`($bp),%xmm0 + movdqa `16*($i+1)-128`($bp),%xmm1 + movdqa `16*($i+2)-128`($bp),%xmm2 + movdqa `16*($i+3)-128`($bp),%xmm3 + pand `16*($i+0)-128`(%rdx),%xmm0 + pand `16*($i+1)-128`(%rdx),%xmm1 + por %xmm0,%xmm4 + pand `16*($i+2)-128`(%rdx),%xmm2 + por %xmm1,%xmm5 + pand `16*($i+3)-128`(%rdx),%xmm3 + por %xmm2,%xmm4 + por %xmm3,%xmm5 +___ +} +$code.=<<___; + por %xmm5,%xmm4 + pshufd \$0x4e,%xmm4,%xmm0 + por %xmm4,%xmm0 + lea $STRIDE($bp),$bp + movq %xmm0,$m0 # m0=bp[i] + + mov ($tp,$num),$A[0] + mov $n0,$m1 + mulq $m0 # ap[0]*bp[i] + add %rax,$A[0] # ap[0]*bp[i]+tp[0] + mov ($np),%rax + adc \$0,%rdx + + imulq $A[0],$m1 # tp[0]*n0 + mov %rdx,$A[1] + mov $N[1],($tp) # store upmost overflow bit + + lea ($tp,$num),$tp # rewind $tp + + mulq $m1 # np[0]*m1 + add %rax,$A[0] # "$N[0]", discarded + mov 8($ap,$num),%rax + adc \$0,%rdx + mov %rdx,$N[1] + + mulq $m0 # ap[j]*bp[i] + add %rax,$A[1] + mov 8*1($np),%rax + adc \$0,%rdx + add 8($tp),$A[1] # +tp[1] + adc \$0,%rdx + mov %rdx,$A[0] + + mulq $m1 # np[j]*m1 + add %rax,$N[1] + mov 16($ap,$num),%rax + adc \$0,%rdx + add $A[1],$N[1] # np[j]*m1+ap[j]*bp[i]+tp[j] + lea 4*8($num),$j # j=4 + lea 8*4($np),$np + adc \$0,%rdx + mov %rdx,$N[0] + jmp .Linner4x + +.align 32 +.Linner4x: + mulq $m0 # ap[j]*bp[i] + add %rax,$A[0] + mov -8*2($np),%rax + adc \$0,%rdx + add 16($tp),$A[0] # ap[j]*bp[i]+tp[j] + lea 32($tp),$tp + adc \$0,%rdx + mov %rdx,$A[1] + + mulq $m1 # np[j]*m1 + add %rax,$N[0] + mov -8($ap,$j),%rax + adc \$0,%rdx + add $A[0],$N[0] + adc \$0,%rdx + mov $N[1],-32($tp) # tp[j-1] + mov %rdx,$N[1] + + mulq $m0 # ap[j]*bp[i] + add %rax,$A[1] + mov -8*1($np),%rax + adc \$0,%rdx + add -8($tp),$A[1] + adc \$0,%rdx + mov %rdx,$A[0] + + mulq $m1 # np[j]*m1 + add %rax,$N[1] + mov ($ap,$j),%rax + adc \$0,%rdx + add $A[1],$N[1] + adc \$0,%rdx + mov $N[0],-24($tp) # tp[j-1] + mov %rdx,$N[0] + + mulq $m0 # ap[j]*bp[i] + add %rax,$A[0] + mov 8*0($np),%rax + adc \$0,%rdx + add ($tp),$A[0] # ap[j]*bp[i]+tp[j] + adc \$0,%rdx + mov %rdx,$A[1] + + mulq $m1 # np[j]*m1 + add %rax,$N[0] + mov 8($ap,$j),%rax + adc \$0,%rdx + add $A[0],$N[0] + adc \$0,%rdx + mov $N[1],-16($tp) # tp[j-1] + mov %rdx,$N[1] + + mulq $m0 # ap[j]*bp[i] + add %rax,$A[1] + mov 8*1($np),%rax + adc \$0,%rdx + add 8($tp),$A[1] + adc \$0,%rdx + mov %rdx,$A[0] + + mulq $m1 # np[j]*m1 + add %rax,$N[1] + mov 16($ap,$j),%rax + adc \$0,%rdx + add $A[1],$N[1] + lea 8*4($np),$np + adc \$0,%rdx + mov $N[0],-8($tp) # tp[j-1] + mov %rdx,$N[0] + + add \$32,$j # j+=4 + jnz .Linner4x + + mulq $m0 # ap[j]*bp[i] + add %rax,$A[0] + mov -8*2($np),%rax + adc \$0,%rdx + add 16($tp),$A[0] # ap[j]*bp[i]+tp[j] + lea 32($tp),$tp + adc \$0,%rdx + mov %rdx,$A[1] + + mulq $m1 # np[j]*m1 + add %rax,$N[0] + mov -8($ap),%rax + adc \$0,%rdx + add $A[0],$N[0] + adc \$0,%rdx + mov $N[1],-32($tp) # tp[j-1] + mov %rdx,$N[1] + + mulq $m0 # ap[j]*bp[i] + add %rax,$A[1] + mov $m1,%rax + mov -8*1($np),$m1 + adc \$0,%rdx + add -8($tp),$A[1] + adc \$0,%rdx + mov %rdx,$A[0] + + mulq $m1 # np[j]*m1 + add %rax,$N[1] + mov ($ap,$num),%rax # ap[0] + adc \$0,%rdx + add $A[1],$N[1] + adc \$0,%rdx + mov $N[0],-24($tp) # tp[j-1] + mov %rdx,$N[0] + + mov $N[1],-16($tp) # tp[j-1] + lea ($np,$num),$np # rewind $np + + xor $N[1],$N[1] + add $A[0],$N[0] + adc \$0,$N[1] + add ($tp),$N[0] # pull upmost overflow bit + adc \$0,$N[1] # upmost overflow bit + mov $N[0],-8($tp) + + cmp 16+8(%rsp),$bp + jb .Louter4x +___ +if (1) { +$code.=<<___; + xor %rax,%rax + sub $N[0],$m1 # compare top-most words + adc $j,$j # $j is zero + or $j,$N[1] + sub $N[1],%rax # %rax=-$N[1] + lea ($tp,$num),%rbx # tptr in .sqr4x_sub + mov ($np),%r12 + lea ($np),%rbp # nptr in .sqr4x_sub + mov %r9,%rcx + sar \$3+2,%rcx + mov 56+8(%rsp),%rdi # rptr in .sqr4x_sub + dec %r12 # so that after 'not' we get -n[0] + xor %r10,%r10 + mov 8*1(%rbp),%r13 + mov 8*2(%rbp),%r14 + mov 8*3(%rbp),%r15 + jmp .Lsqr4x_sub_entry +___ +} else { +my @ri=("%rax",$bp,$m0,$m1); +my $rp="%rdx"; +$code.=<<___ + xor \$1,$N[1] + lea ($tp,$num),$tp # rewind $tp + sar \$5,$num # cf=0 + lea ($np,$N[1],8),$np + mov 56+8(%rsp),$rp # restore $rp + jmp .Lsub4x + +.align 32 +.Lsub4x: + .byte 0x66 + mov 8*0($tp),@ri[0] + mov 8*1($tp),@ri[1] + .byte 0x66 + sbb 16*0($np),@ri[0] + mov 8*2($tp),@ri[2] + sbb 16*1($np),@ri[1] + mov 3*8($tp),@ri[3] + lea 4*8($tp),$tp + sbb 16*2($np),@ri[2] + mov @ri[0],8*0($rp) + sbb 16*3($np),@ri[3] + lea 16*4($np),$np + mov @ri[1],8*1($rp) + mov @ri[2],8*2($rp) + mov @ri[3],8*3($rp) + lea 8*4($rp),$rp + + inc $num + jnz .Lsub4x + + ret +___ +} +$code.=<<___; +.cfi_endproc +.size mul4x_internal,.-mul4x_internal +___ +}}} + {{{ +###################################################################### +# void GFp_bn_power5( +my $rptr="%rdi"; # BN_ULONG *rptr, +my $aptr="%rsi"; # const BN_ULONG *aptr, +my $bptr="%rdx"; # const void *table, +my $nptr="%rcx"; # const BN_ULONG *nptr, +my $n0 ="%r8"; # const BN_ULONG *n0); +my $num ="%r9"; # int num, has to be divisible by 8 + # int pwr + +my ($i,$j,$tptr)=("%rbp","%rcx",$rptr); +my @A0=("%r10","%r11"); +my @A1=("%r12","%r13"); +my ($a0,$a1,$ai)=("%r14","%r15","%rbx"); + +$code.=<<___; +.globl GFp_bn_power5 +.type GFp_bn_power5,\@function,6 +.align 32 +GFp_bn_power5: +.cfi_startproc + mov %rsp,%rax +.cfi_def_cfa_register %rax +___ +$code.=<<___ if ($addx); + leaq GFp_ia32cap_P(%rip),%r11 + mov 8(%r11),%r11d + and \$0x80108,%r11d + cmp \$0x80108,%r11d # check for AD*X+BMI2+BMI1 + je .Lpowerx5_enter +___ +$code.=<<___; + push %rbx +.cfi_push %rbx + push %rbp +.cfi_push %rbp + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +.Lpower5_prologue: + + shl \$3,${num}d # convert $num to bytes + lea ($num,$num,2),%r10d # 3*$num + neg $num + mov ($n0),$n0 # *n0 + + ############################################################## + # Ensure that stack frame doesn't alias with $rptr+3*$num + # modulo 4096, which covers ret[num], am[num] and n[num] + # (see bn_exp.c). This is done to allow memory disambiguation + # logic do its magic. [Extra 256 bytes is for power mask + # calculated from 7th argument, the index.] + # + lea -320(%rsp,$num,2),%r11 + mov %rsp,%rbp + sub $rptr,%r11 + and \$4095,%r11 + cmp %r11,%r10 + jb .Lpwr_sp_alt + sub %r11,%rbp # align with $aptr + lea -320(%rbp,$num,2),%rbp # future alloca(frame+2*num*8+256) + jmp .Lpwr_sp_done + +.align 32 +.Lpwr_sp_alt: + lea 4096-320(,$num,2),%r10 + lea -320(%rbp,$num,2),%rbp # future alloca(frame+2*num*8+256) + sub %r10,%r11 + mov \$0,%r10 + cmovc %r10,%r11 + sub %r11,%rbp +.Lpwr_sp_done: + and \$-64,%rbp + mov %rsp,%r11 + sub %rbp,%r11 + and \$-4096,%r11 + lea (%rbp,%r11),%rsp + mov (%rsp),%r10 + cmp %rbp,%rsp + ja .Lpwr_page_walk + jmp .Lpwr_page_walk_done + +.Lpwr_page_walk: + lea -4096(%rsp),%rsp + mov (%rsp),%r10 + cmp %rbp,%rsp + ja .Lpwr_page_walk +.Lpwr_page_walk_done: + + mov $num,%r10 + neg $num + + ############################################################## + # Stack layout + # + # +0 saved $num, used in reduction section + # +8 &t[2*$num], used in reduction section + # +32 saved *n0 + # +40 saved %rsp + # +48 t[2*$num] + # + mov $n0, 32(%rsp) + mov %rax, 40(%rsp) # save original %rsp +.cfi_cfa_expression %rsp+40,deref,+8 +.Lpower5_body: + movq $rptr,%xmm1 # save $rptr, used in sqr8x + movq $nptr,%xmm2 # save $nptr + movq %r10, %xmm3 # -$num, used in sqr8x + movq $bptr,%xmm4 + + call __bn_sqr8x_internal + call __bn_post4x_internal + call __bn_sqr8x_internal + call __bn_post4x_internal + call __bn_sqr8x_internal + call __bn_post4x_internal + call __bn_sqr8x_internal + call __bn_post4x_internal + call __bn_sqr8x_internal + call __bn_post4x_internal + + movq %xmm2,$nptr + movq %xmm4,$bptr + mov $aptr,$rptr + mov 40(%rsp),%rax + lea 32(%rsp),$n0 + + call mul4x_internal + + mov 40(%rsp),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 + mov \$1,%rax + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lpower5_epilogue: + ret +.cfi_endproc +.size GFp_bn_power5,.-GFp_bn_power5 + +.globl GFp_bn_sqr8x_internal +.hidden GFp_bn_sqr8x_internal +.type GFp_bn_sqr8x_internal,\@abi-omnipotent +.align 32 +GFp_bn_sqr8x_internal: +__bn_sqr8x_internal: +.cfi_startproc + ############################################################## + # Squaring part: + # + # a) multiply-n-add everything but a[i]*a[i]; + # b) shift result of a) by 1 to the left and accumulate + # a[i]*a[i] products; + # + ############################################################## + # a[1]a[0] + # a[2]a[0] + # a[3]a[0] + # a[2]a[1] + # a[4]a[0] + # a[3]a[1] + # a[5]a[0] + # a[4]a[1] + # a[3]a[2] + # a[6]a[0] + # a[5]a[1] + # a[4]a[2] + # a[7]a[0] + # a[6]a[1] + # a[5]a[2] + # a[4]a[3] + # a[7]a[1] + # a[6]a[2] + # a[5]a[3] + # a[7]a[2] + # a[6]a[3] + # a[5]a[4] + # a[7]a[3] + # a[6]a[4] + # a[7]a[4] + # a[6]a[5] + # a[7]a[5] + # a[7]a[6] + # a[1]a[0] + # a[2]a[0] + # a[3]a[0] + # a[4]a[0] + # a[5]a[0] + # a[6]a[0] + # a[7]a[0] + # a[2]a[1] + # a[3]a[1] + # a[4]a[1] + # a[5]a[1] + # a[6]a[1] + # a[7]a[1] + # a[3]a[2] + # a[4]a[2] + # a[5]a[2] + # a[6]a[2] + # a[7]a[2] + # a[4]a[3] + # a[5]a[3] + # a[6]a[3] + # a[7]a[3] + # a[5]a[4] + # a[6]a[4] + # a[7]a[4] + # a[6]a[5] + # a[7]a[5] + # a[7]a[6] + # a[0]a[0] + # a[1]a[1] + # a[2]a[2] + # a[3]a[3] + # a[4]a[4] + # a[5]a[5] + # a[6]a[6] + # a[7]a[7] + + lea 32(%r10),$i # $i=-($num-32) + lea ($aptr,$num),$aptr # end of a[] buffer, ($aptr,$i)=&ap[2] + + mov $num,$j # $j=$num + + # comments apply to $num==8 case + mov -32($aptr,$i),$a0 # a[0] + lea 48+8(%rsp,$num,2),$tptr # end of tp[] buffer, &tp[2*$num] + mov -24($aptr,$i),%rax # a[1] + lea -32($tptr,$i),$tptr # end of tp[] window, &tp[2*$num-"$i"] + mov -16($aptr,$i),$ai # a[2] + mov %rax,$a1 + + mul $a0 # a[1]*a[0] + mov %rax,$A0[0] # a[1]*a[0] + mov $ai,%rax # a[2] + mov %rdx,$A0[1] + mov $A0[0],-24($tptr,$i) # t[1] + + mul $a0 # a[2]*a[0] + add %rax,$A0[1] + mov $ai,%rax + adc \$0,%rdx + mov $A0[1],-16($tptr,$i) # t[2] + mov %rdx,$A0[0] + + + mov -8($aptr,$i),$ai # a[3] + mul $a1 # a[2]*a[1] + mov %rax,$A1[0] # a[2]*a[1]+t[3] + mov $ai,%rax + mov %rdx,$A1[1] + + lea ($i),$j + mul $a0 # a[3]*a[0] + add %rax,$A0[0] # a[3]*a[0]+a[2]*a[1]+t[3] + mov $ai,%rax + mov %rdx,$A0[1] + adc \$0,$A0[1] + add $A1[0],$A0[0] + adc \$0,$A0[1] + mov $A0[0],-8($tptr,$j) # t[3] + jmp .Lsqr4x_1st + +.align 32 +.Lsqr4x_1st: + mov ($aptr,$j),$ai # a[4] + mul $a1 # a[3]*a[1] + add %rax,$A1[1] # a[3]*a[1]+t[4] + mov $ai,%rax + mov %rdx,$A1[0] + adc \$0,$A1[0] + + mul $a0 # a[4]*a[0] + add %rax,$A0[1] # a[4]*a[0]+a[3]*a[1]+t[4] + mov $ai,%rax # a[3] + mov 8($aptr,$j),$ai # a[5] + mov %rdx,$A0[0] + adc \$0,$A0[0] + add $A1[1],$A0[1] + adc \$0,$A0[0] + + + mul $a1 # a[4]*a[3] + add %rax,$A1[0] # a[4]*a[3]+t[5] + mov $ai,%rax + mov $A0[1],($tptr,$j) # t[4] + mov %rdx,$A1[1] + adc \$0,$A1[1] + + mul $a0 # a[5]*a[2] + add %rax,$A0[0] # a[5]*a[2]+a[4]*a[3]+t[5] + mov $ai,%rax + mov 16($aptr,$j),$ai # a[6] + mov %rdx,$A0[1] + adc \$0,$A0[1] + add $A1[0],$A0[0] + adc \$0,$A0[1] + + mul $a1 # a[5]*a[3] + add %rax,$A1[1] # a[5]*a[3]+t[6] + mov $ai,%rax + mov $A0[0],8($tptr,$j) # t[5] + mov %rdx,$A1[0] + adc \$0,$A1[0] + + mul $a0 # a[6]*a[2] + add %rax,$A0[1] # a[6]*a[2]+a[5]*a[3]+t[6] + mov $ai,%rax # a[3] + mov 24($aptr,$j),$ai # a[7] + mov %rdx,$A0[0] + adc \$0,$A0[0] + add $A1[1],$A0[1] + adc \$0,$A0[0] + + + mul $a1 # a[6]*a[5] + add %rax,$A1[0] # a[6]*a[5]+t[7] + mov $ai,%rax + mov $A0[1],16($tptr,$j) # t[6] + mov %rdx,$A1[1] + adc \$0,$A1[1] + lea 32($j),$j + + mul $a0 # a[7]*a[4] + add %rax,$A0[0] # a[7]*a[4]+a[6]*a[5]+t[6] + mov $ai,%rax + mov %rdx,$A0[1] + adc \$0,$A0[1] + add $A1[0],$A0[0] + adc \$0,$A0[1] + mov $A0[0],-8($tptr,$j) # t[7] + + cmp \$0,$j + jne .Lsqr4x_1st + + mul $a1 # a[7]*a[5] + add %rax,$A1[1] + lea 16($i),$i + adc \$0,%rdx + add $A0[1],$A1[1] + adc \$0,%rdx + + mov $A1[1],($tptr) # t[8] + mov %rdx,$A1[0] + mov %rdx,8($tptr) # t[9] + jmp .Lsqr4x_outer + +.align 32 +.Lsqr4x_outer: # comments apply to $num==6 case + mov -32($aptr,$i),$a0 # a[0] + lea 48+8(%rsp,$num,2),$tptr # end of tp[] buffer, &tp[2*$num] + mov -24($aptr,$i),%rax # a[1] + lea -32($tptr,$i),$tptr # end of tp[] window, &tp[2*$num-"$i"] + mov -16($aptr,$i),$ai # a[2] + mov %rax,$a1 + + mul $a0 # a[1]*a[0] + mov -24($tptr,$i),$A0[0] # t[1] + add %rax,$A0[0] # a[1]*a[0]+t[1] + mov $ai,%rax # a[2] + adc \$0,%rdx + mov $A0[0],-24($tptr,$i) # t[1] + mov %rdx,$A0[1] + + mul $a0 # a[2]*a[0] + add %rax,$A0[1] + mov $ai,%rax + adc \$0,%rdx + add -16($tptr,$i),$A0[1] # a[2]*a[0]+t[2] + mov %rdx,$A0[0] + adc \$0,$A0[0] + mov $A0[1],-16($tptr,$i) # t[2] + + xor $A1[0],$A1[0] + + mov -8($aptr,$i),$ai # a[3] + mul $a1 # a[2]*a[1] + add %rax,$A1[0] # a[2]*a[1]+t[3] + mov $ai,%rax + adc \$0,%rdx + add -8($tptr,$i),$A1[0] + mov %rdx,$A1[1] + adc \$0,$A1[1] + + mul $a0 # a[3]*a[0] + add %rax,$A0[0] # a[3]*a[0]+a[2]*a[1]+t[3] + mov $ai,%rax + adc \$0,%rdx + add $A1[0],$A0[0] + mov %rdx,$A0[1] + adc \$0,$A0[1] + mov $A0[0],-8($tptr,$i) # t[3] + + lea ($i),$j + jmp .Lsqr4x_inner + +.align 32 +.Lsqr4x_inner: + mov ($aptr,$j),$ai # a[4] + mul $a1 # a[3]*a[1] + add %rax,$A1[1] # a[3]*a[1]+t[4] + mov $ai,%rax + mov %rdx,$A1[0] + adc \$0,$A1[0] + add ($tptr,$j),$A1[1] + adc \$0,$A1[0] + + .byte 0x67 + mul $a0 # a[4]*a[0] + add %rax,$A0[1] # a[4]*a[0]+a[3]*a[1]+t[4] + mov $ai,%rax # a[3] + mov 8($aptr,$j),$ai # a[5] + mov %rdx,$A0[0] + adc \$0,$A0[0] + add $A1[1],$A0[1] + adc \$0,$A0[0] + + mul $a1 # a[4]*a[3] + add %rax,$A1[0] # a[4]*a[3]+t[5] + mov $A0[1],($tptr,$j) # t[4] + mov $ai,%rax + mov %rdx,$A1[1] + adc \$0,$A1[1] + add 8($tptr,$j),$A1[0] + lea 16($j),$j # j++ + adc \$0,$A1[1] + + mul $a0 # a[5]*a[2] + add %rax,$A0[0] # a[5]*a[2]+a[4]*a[3]+t[5] + mov $ai,%rax + adc \$0,%rdx + add $A1[0],$A0[0] + mov %rdx,$A0[1] + adc \$0,$A0[1] + mov $A0[0],-8($tptr,$j) # t[5], "preloaded t[1]" below + + cmp \$0,$j + jne .Lsqr4x_inner + + .byte 0x67 + mul $a1 # a[5]*a[3] + add %rax,$A1[1] + adc \$0,%rdx + add $A0[1],$A1[1] + adc \$0,%rdx + + mov $A1[1],($tptr) # t[6], "preloaded t[2]" below + mov %rdx,$A1[0] + mov %rdx,8($tptr) # t[7], "preloaded t[3]" below + + add \$16,$i + jnz .Lsqr4x_outer + + # comments apply to $num==4 case + mov -32($aptr),$a0 # a[0] + lea 48+8(%rsp,$num,2),$tptr # end of tp[] buffer, &tp[2*$num] + mov -24($aptr),%rax # a[1] + lea -32($tptr,$i),$tptr # end of tp[] window, &tp[2*$num-"$i"] + mov -16($aptr),$ai # a[2] + mov %rax,$a1 + + mul $a0 # a[1]*a[0] + add %rax,$A0[0] # a[1]*a[0]+t[1], preloaded t[1] + mov $ai,%rax # a[2] + mov %rdx,$A0[1] + adc \$0,$A0[1] + + mul $a0 # a[2]*a[0] + add %rax,$A0[1] + mov $ai,%rax + mov $A0[0],-24($tptr) # t[1] + mov %rdx,$A0[0] + adc \$0,$A0[0] + add $A1[1],$A0[1] # a[2]*a[0]+t[2], preloaded t[2] + mov -8($aptr),$ai # a[3] + adc \$0,$A0[0] + + mul $a1 # a[2]*a[1] + add %rax,$A1[0] # a[2]*a[1]+t[3], preloaded t[3] + mov $ai,%rax + mov $A0[1],-16($tptr) # t[2] + mov %rdx,$A1[1] + adc \$0,$A1[1] + + mul $a0 # a[3]*a[0] + add %rax,$A0[0] # a[3]*a[0]+a[2]*a[1]+t[3] + mov $ai,%rax + mov %rdx,$A0[1] + adc \$0,$A0[1] + add $A1[0],$A0[0] + adc \$0,$A0[1] + mov $A0[0],-8($tptr) # t[3] + + mul $a1 # a[3]*a[1] + add %rax,$A1[1] + mov -16($aptr),%rax # a[2] + adc \$0,%rdx + add $A0[1],$A1[1] + adc \$0,%rdx + + mov $A1[1],($tptr) # t[4] + mov %rdx,$A1[0] + mov %rdx,8($tptr) # t[5] + + mul $ai # a[2]*a[3] +___ +{ +my ($shift,$carry)=($a0,$a1); +my @S=(@A1,$ai,$n0); +$code.=<<___; + add \$16,$i + xor $shift,$shift + sub $num,$i # $i=16-$num + xor $carry,$carry + + add $A1[0],%rax # t[5] + adc \$0,%rdx + mov %rax,8($tptr) # t[5] + mov %rdx,16($tptr) # t[6] + mov $carry,24($tptr) # t[7] + + mov -16($aptr,$i),%rax # a[0] + lea 48+8(%rsp),$tptr + xor $A0[0],$A0[0] # t[0] + mov 8($tptr),$A0[1] # t[1] + + lea ($shift,$A0[0],2),$S[0] # t[2*i]<<1 | shift + shr \$63,$A0[0] + lea ($j,$A0[1],2),$S[1] # t[2*i+1]<<1 | + shr \$63,$A0[1] + or $A0[0],$S[1] # | t[2*i]>>63 + mov 16($tptr),$A0[0] # t[2*i+2] # prefetch + mov $A0[1],$shift # shift=t[2*i+1]>>63 + mul %rax # a[i]*a[i] + neg $carry # mov $carry,cf + mov 24($tptr),$A0[1] # t[2*i+2+1] # prefetch + adc %rax,$S[0] + mov -8($aptr,$i),%rax # a[i+1] # prefetch + mov $S[0],($tptr) + adc %rdx,$S[1] + + lea ($shift,$A0[0],2),$S[2] # t[2*i]<<1 | shift + mov $S[1],8($tptr) + sbb $carry,$carry # mov cf,$carry + shr \$63,$A0[0] + lea ($j,$A0[1],2),$S[3] # t[2*i+1]<<1 | + shr \$63,$A0[1] + or $A0[0],$S[3] # | t[2*i]>>63 + mov 32($tptr),$A0[0] # t[2*i+2] # prefetch + mov $A0[1],$shift # shift=t[2*i+1]>>63 + mul %rax # a[i]*a[i] + neg $carry # mov $carry,cf + mov 40($tptr),$A0[1] # t[2*i+2+1] # prefetch + adc %rax,$S[2] + mov 0($aptr,$i),%rax # a[i+1] # prefetch + mov $S[2],16($tptr) + adc %rdx,$S[3] + lea 16($i),$i + mov $S[3],24($tptr) + sbb $carry,$carry # mov cf,$carry + lea 64($tptr),$tptr + jmp .Lsqr4x_shift_n_add + +.align 32 +.Lsqr4x_shift_n_add: + lea ($shift,$A0[0],2),$S[0] # t[2*i]<<1 | shift + shr \$63,$A0[0] + lea ($j,$A0[1],2),$S[1] # t[2*i+1]<<1 | + shr \$63,$A0[1] + or $A0[0],$S[1] # | t[2*i]>>63 + mov -16($tptr),$A0[0] # t[2*i+2] # prefetch + mov $A0[1],$shift # shift=t[2*i+1]>>63 + mul %rax # a[i]*a[i] + neg $carry # mov $carry,cf + mov -8($tptr),$A0[1] # t[2*i+2+1] # prefetch + adc %rax,$S[0] + mov -8($aptr,$i),%rax # a[i+1] # prefetch + mov $S[0],-32($tptr) + adc %rdx,$S[1] + + lea ($shift,$A0[0],2),$S[2] # t[2*i]<<1 | shift + mov $S[1],-24($tptr) + sbb $carry,$carry # mov cf,$carry + shr \$63,$A0[0] + lea ($j,$A0[1],2),$S[3] # t[2*i+1]<<1 | + shr \$63,$A0[1] + or $A0[0],$S[3] # | t[2*i]>>63 + mov 0($tptr),$A0[0] # t[2*i+2] # prefetch + mov $A0[1],$shift # shift=t[2*i+1]>>63 + mul %rax # a[i]*a[i] + neg $carry # mov $carry,cf + mov 8($tptr),$A0[1] # t[2*i+2+1] # prefetch + adc %rax,$S[2] + mov 0($aptr,$i),%rax # a[i+1] # prefetch + mov $S[2],-16($tptr) + adc %rdx,$S[3] + + lea ($shift,$A0[0],2),$S[0] # t[2*i]<<1 | shift + mov $S[3],-8($tptr) + sbb $carry,$carry # mov cf,$carry + shr \$63,$A0[0] + lea ($j,$A0[1],2),$S[1] # t[2*i+1]<<1 | + shr \$63,$A0[1] + or $A0[0],$S[1] # | t[2*i]>>63 + mov 16($tptr),$A0[0] # t[2*i+2] # prefetch + mov $A0[1],$shift # shift=t[2*i+1]>>63 + mul %rax # a[i]*a[i] + neg $carry # mov $carry,cf + mov 24($tptr),$A0[1] # t[2*i+2+1] # prefetch + adc %rax,$S[0] + mov 8($aptr,$i),%rax # a[i+1] # prefetch + mov $S[0],0($tptr) + adc %rdx,$S[1] + + lea ($shift,$A0[0],2),$S[2] # t[2*i]<<1 | shift + mov $S[1],8($tptr) + sbb $carry,$carry # mov cf,$carry + shr \$63,$A0[0] + lea ($j,$A0[1],2),$S[3] # t[2*i+1]<<1 | + shr \$63,$A0[1] + or $A0[0],$S[3] # | t[2*i]>>63 + mov 32($tptr),$A0[0] # t[2*i+2] # prefetch + mov $A0[1],$shift # shift=t[2*i+1]>>63 + mul %rax # a[i]*a[i] + neg $carry # mov $carry,cf + mov 40($tptr),$A0[1] # t[2*i+2+1] # prefetch + adc %rax,$S[2] + mov 16($aptr,$i),%rax # a[i+1] # prefetch + mov $S[2],16($tptr) + adc %rdx,$S[3] + mov $S[3],24($tptr) + sbb $carry,$carry # mov cf,$carry + lea 64($tptr),$tptr + add \$32,$i + jnz .Lsqr4x_shift_n_add + + lea ($shift,$A0[0],2),$S[0] # t[2*i]<<1 | shift + .byte 0x67 + shr \$63,$A0[0] + lea ($j,$A0[1],2),$S[1] # t[2*i+1]<<1 | + shr \$63,$A0[1] + or $A0[0],$S[1] # | t[2*i]>>63 + mov -16($tptr),$A0[0] # t[2*i+2] # prefetch + mov $A0[1],$shift # shift=t[2*i+1]>>63 + mul %rax # a[i]*a[i] + neg $carry # mov $carry,cf + mov -8($tptr),$A0[1] # t[2*i+2+1] # prefetch + adc %rax,$S[0] + mov -8($aptr),%rax # a[i+1] # prefetch + mov $S[0],-32($tptr) + adc %rdx,$S[1] + + lea ($shift,$A0[0],2),$S[2] # t[2*i]<<1|shift + mov $S[1],-24($tptr) + sbb $carry,$carry # mov cf,$carry + shr \$63,$A0[0] + lea ($j,$A0[1],2),$S[3] # t[2*i+1]<<1 | + shr \$63,$A0[1] + or $A0[0],$S[3] # | t[2*i]>>63 + mul %rax # a[i]*a[i] + neg $carry # mov $carry,cf + adc %rax,$S[2] + adc %rdx,$S[3] + mov $S[2],-16($tptr) + mov $S[3],-8($tptr) +___ +} +###################################################################### +# Montgomery reduction part, "word-by-word" algorithm. +# +# This new path is inspired by multiple submissions from Intel, by +# Shay Gueron, Vlad Krasnov, Erdinc Ozturk, James Guilford, +# Vinodh Gopal... +{ +my ($nptr,$tptr,$carry,$m0)=("%rbp","%rdi","%rsi","%rbx"); + +$code.=<<___; + movq %xmm2,$nptr +__bn_sqr8x_reduction: + xor %rax,%rax + lea ($nptr,$num),%rcx # end of n[] + lea 48+8(%rsp,$num,2),%rdx # end of t[] buffer + mov %rcx,0+8(%rsp) + lea 48+8(%rsp,$num),$tptr # end of initial t[] window + mov %rdx,8+8(%rsp) + neg $num + jmp .L8x_reduction_loop + +.align 32 +.L8x_reduction_loop: + lea ($tptr,$num),$tptr # start of current t[] window + .byte 0x66 + mov 8*0($tptr),$m0 + mov 8*1($tptr),%r9 + mov 8*2($tptr),%r10 + mov 8*3($tptr),%r11 + mov 8*4($tptr),%r12 + mov 8*5($tptr),%r13 + mov 8*6($tptr),%r14 + mov 8*7($tptr),%r15 + mov %rax,(%rdx) # store top-most carry bit + lea 8*8($tptr),$tptr + + .byte 0x67 + mov $m0,%r8 + imulq 32+8(%rsp),$m0 # n0*a[0] + mov 8*0($nptr),%rax # n[0] + mov \$8,%ecx + jmp .L8x_reduce + +.align 32 +.L8x_reduce: + mulq $m0 + mov 8*1($nptr),%rax # n[1] + neg %r8 + mov %rdx,%r8 + adc \$0,%r8 + + mulq $m0 + add %rax,%r9 + mov 8*2($nptr),%rax + adc \$0,%rdx + add %r9,%r8 + mov $m0,48-8+8(%rsp,%rcx,8) # put aside n0*a[i] + mov %rdx,%r9 + adc \$0,%r9 + + mulq $m0 + add %rax,%r10 + mov 8*3($nptr),%rax + adc \$0,%rdx + add %r10,%r9 + mov 32+8(%rsp),$carry # pull n0, borrow $carry + mov %rdx,%r10 + adc \$0,%r10 + + mulq $m0 + add %rax,%r11 + mov 8*4($nptr),%rax + adc \$0,%rdx + imulq %r8,$carry # modulo-scheduled + add %r11,%r10 + mov %rdx,%r11 + adc \$0,%r11 + + mulq $m0 + add %rax,%r12 + mov 8*5($nptr),%rax + adc \$0,%rdx + add %r12,%r11 + mov %rdx,%r12 + adc \$0,%r12 + + mulq $m0 + add %rax,%r13 + mov 8*6($nptr),%rax + adc \$0,%rdx + add %r13,%r12 + mov %rdx,%r13 + adc \$0,%r13 + + mulq $m0 + add %rax,%r14 + mov 8*7($nptr),%rax + adc \$0,%rdx + add %r14,%r13 + mov %rdx,%r14 + adc \$0,%r14 + + mulq $m0 + mov $carry,$m0 # n0*a[i] + add %rax,%r15 + mov 8*0($nptr),%rax # n[0] + adc \$0,%rdx + add %r15,%r14 + mov %rdx,%r15 + adc \$0,%r15 + + dec %ecx + jnz .L8x_reduce + + lea 8*8($nptr),$nptr + xor %rax,%rax + mov 8+8(%rsp),%rdx # pull end of t[] + cmp 0+8(%rsp),$nptr # end of n[]? + jae .L8x_no_tail + + .byte 0x66 + add 8*0($tptr),%r8 + adc 8*1($tptr),%r9 + adc 8*2($tptr),%r10 + adc 8*3($tptr),%r11 + adc 8*4($tptr),%r12 + adc 8*5($tptr),%r13 + adc 8*6($tptr),%r14 + adc 8*7($tptr),%r15 + sbb $carry,$carry # top carry + + mov 48+56+8(%rsp),$m0 # pull n0*a[0] + mov \$8,%ecx + mov 8*0($nptr),%rax + jmp .L8x_tail + +.align 32 +.L8x_tail: + mulq $m0 + add %rax,%r8 + mov 8*1($nptr),%rax + mov %r8,($tptr) # save result + mov %rdx,%r8 + adc \$0,%r8 + + mulq $m0 + add %rax,%r9 + mov 8*2($nptr),%rax + adc \$0,%rdx + add %r9,%r8 + lea 8($tptr),$tptr # $tptr++ + mov %rdx,%r9 + adc \$0,%r9 + + mulq $m0 + add %rax,%r10 + mov 8*3($nptr),%rax + adc \$0,%rdx + add %r10,%r9 + mov %rdx,%r10 + adc \$0,%r10 + + mulq $m0 + add %rax,%r11 + mov 8*4($nptr),%rax + adc \$0,%rdx + add %r11,%r10 + mov %rdx,%r11 + adc \$0,%r11 + + mulq $m0 + add %rax,%r12 + mov 8*5($nptr),%rax + adc \$0,%rdx + add %r12,%r11 + mov %rdx,%r12 + adc \$0,%r12 + + mulq $m0 + add %rax,%r13 + mov 8*6($nptr),%rax + adc \$0,%rdx + add %r13,%r12 + mov %rdx,%r13 + adc \$0,%r13 + + mulq $m0 + add %rax,%r14 + mov 8*7($nptr),%rax + adc \$0,%rdx + add %r14,%r13 + mov %rdx,%r14 + adc \$0,%r14 + + mulq $m0 + mov 48-16+8(%rsp,%rcx,8),$m0# pull n0*a[i] + add %rax,%r15 + adc \$0,%rdx + add %r15,%r14 + mov 8*0($nptr),%rax # pull n[0] + mov %rdx,%r15 + adc \$0,%r15 + + dec %ecx + jnz .L8x_tail + + lea 8*8($nptr),$nptr + mov 8+8(%rsp),%rdx # pull end of t[] + cmp 0+8(%rsp),$nptr # end of n[]? + jae .L8x_tail_done # break out of loop + + mov 48+56+8(%rsp),$m0 # pull n0*a[0] + neg $carry + mov 8*0($nptr),%rax # pull n[0] + adc 8*0($tptr),%r8 + adc 8*1($tptr),%r9 + adc 8*2($tptr),%r10 + adc 8*3($tptr),%r11 + adc 8*4($tptr),%r12 + adc 8*5($tptr),%r13 + adc 8*6($tptr),%r14 + adc 8*7($tptr),%r15 + sbb $carry,$carry # top carry + + mov \$8,%ecx + jmp .L8x_tail + +.align 32 +.L8x_tail_done: + xor %rax,%rax + add (%rdx),%r8 # can this overflow? + adc \$0,%r9 + adc \$0,%r10 + adc \$0,%r11 + adc \$0,%r12 + adc \$0,%r13 + adc \$0,%r14 + adc \$0,%r15 + adc \$0,%rax + + neg $carry +.L8x_no_tail: + adc 8*0($tptr),%r8 + adc 8*1($tptr),%r9 + adc 8*2($tptr),%r10 + adc 8*3($tptr),%r11 + adc 8*4($tptr),%r12 + adc 8*5($tptr),%r13 + adc 8*6($tptr),%r14 + adc 8*7($tptr),%r15 + adc \$0,%rax # top-most carry + mov -8($nptr),%rcx # np[num-1] + xor $carry,$carry + + movq %xmm2,$nptr # restore $nptr + + mov %r8,8*0($tptr) # store top 512 bits + mov %r9,8*1($tptr) + movq %xmm3,$num # $num is %r9, can't be moved upwards + mov %r10,8*2($tptr) + mov %r11,8*3($tptr) + mov %r12,8*4($tptr) + mov %r13,8*5($tptr) + mov %r14,8*6($tptr) + mov %r15,8*7($tptr) + lea 8*8($tptr),$tptr + + cmp %rdx,$tptr # end of t[]? + jb .L8x_reduction_loop + ret +.cfi_endproc +.size GFp_bn_sqr8x_internal,.-GFp_bn_sqr8x_internal +___ +} +############################################################## +# Post-condition, 4x unrolled +# +{ +my ($tptr,$nptr)=("%rbx","%rbp"); +$code.=<<___; +.type __bn_post4x_internal,\@abi-omnipotent +.align 32 +__bn_post4x_internal: +.cfi_startproc + mov 8*0($nptr),%r12 + lea (%rdi,$num),$tptr # %rdi was $tptr above + mov $num,%rcx + movq %xmm1,$rptr # restore $rptr + neg %rax + movq %xmm1,$aptr # prepare for back-to-back call + sar \$3+2,%rcx + dec %r12 # so that after 'not' we get -n[0] + xor %r10,%r10 + mov 8*1($nptr),%r13 + mov 8*2($nptr),%r14 + mov 8*3($nptr),%r15 + jmp .Lsqr4x_sub_entry + +.align 16 +.Lsqr4x_sub: + mov 8*0($nptr),%r12 + mov 8*1($nptr),%r13 + mov 8*2($nptr),%r14 + mov 8*3($nptr),%r15 +.Lsqr4x_sub_entry: + lea 8*4($nptr),$nptr + not %r12 + not %r13 + not %r14 + not %r15 + and %rax,%r12 + and %rax,%r13 + and %rax,%r14 + and %rax,%r15 + + neg %r10 # mov %r10,%cf + adc 8*0($tptr),%r12 + adc 8*1($tptr),%r13 + adc 8*2($tptr),%r14 + adc 8*3($tptr),%r15 + mov %r12,8*0($rptr) + lea 8*4($tptr),$tptr + mov %r13,8*1($rptr) + sbb %r10,%r10 # mov %cf,%r10 + mov %r14,8*2($rptr) + mov %r15,8*3($rptr) + lea 8*4($rptr),$rptr + + inc %rcx # pass %cf + jnz .Lsqr4x_sub + + mov $num,%r10 # prepare for back-to-back call + neg $num # restore $num + ret +.cfi_endproc +.size __bn_post4x_internal,.-__bn_post4x_internal +___ +} +{ +$code.=<<___; +.globl GFp_bn_from_montgomery +.type GFp_bn_from_montgomery,\@abi-omnipotent +.align 32 +GFp_bn_from_montgomery: +.cfi_startproc + testl \$7,`($win64?"48(%rsp)":"%r9d")` + jz bn_from_mont8x + xor %eax,%eax + ret +.cfi_endproc +.size GFp_bn_from_montgomery,.-GFp_bn_from_montgomery + +.type bn_from_mont8x,\@function,6 +.align 32 +bn_from_mont8x: +.cfi_startproc + .byte 0x67 + mov %rsp,%rax +.cfi_def_cfa_register %rax + push %rbx +.cfi_push %rbx + push %rbp +.cfi_push %rbp + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +.Lfrom_prologue: + + shl \$3,${num}d # convert $num to bytes + lea ($num,$num,2),%r10 # 3*$num in bytes + neg $num + mov ($n0),$n0 # *n0 + + ############################################################## + # Ensure that stack frame doesn't alias with $rptr+3*$num + # modulo 4096, which covers ret[num], am[num] and n[num] + # (see bn_exp.c). The stack is allocated to aligned with + # GFp_bn_power5's frame, and as GFp_bn_from_montgomery happens to be + # last operation, we use the opportunity to cleanse it. + # + lea -320(%rsp,$num,2),%r11 + mov %rsp,%rbp + sub $rptr,%r11 + and \$4095,%r11 + cmp %r11,%r10 + jb .Lfrom_sp_alt + sub %r11,%rbp # align with $aptr + lea -320(%rbp,$num,2),%rbp # future alloca(frame+2*$num*8+256) + jmp .Lfrom_sp_done + +.align 32 +.Lfrom_sp_alt: + lea 4096-320(,$num,2),%r10 + lea -320(%rbp,$num,2),%rbp # future alloca(frame+2*$num*8+256) + sub %r10,%r11 + mov \$0,%r10 + cmovc %r10,%r11 + sub %r11,%rbp +.Lfrom_sp_done: + and \$-64,%rbp + mov %rsp,%r11 + sub %rbp,%r11 + and \$-4096,%r11 + lea (%rbp,%r11),%rsp + mov (%rsp),%r10 + cmp %rbp,%rsp + ja .Lfrom_page_walk + jmp .Lfrom_page_walk_done + +.Lfrom_page_walk: + lea -4096(%rsp),%rsp + mov (%rsp),%r10 + cmp %rbp,%rsp + ja .Lfrom_page_walk +.Lfrom_page_walk_done: + + mov $num,%r10 + neg $num + + ############################################################## + # Stack layout + # + # +0 saved $num, used in reduction section + # +8 &t[2*$num], used in reduction section + # +32 saved *n0 + # +40 saved %rsp + # +48 t[2*$num] + # + mov $n0, 32(%rsp) + mov %rax, 40(%rsp) # save original %rsp +.cfi_cfa_expression %rsp+40,deref,+8 +.Lfrom_body: + mov $num,%r11 + lea 48(%rsp),%rax + pxor %xmm0,%xmm0 + jmp .Lmul_by_1 + +.align 32 +.Lmul_by_1: + movdqu ($aptr),%xmm1 + movdqu 16($aptr),%xmm2 + movdqu 32($aptr),%xmm3 + movdqa %xmm0,(%rax,$num) + movdqu 48($aptr),%xmm4 + movdqa %xmm0,16(%rax,$num) + .byte 0x48,0x8d,0xb6,0x40,0x00,0x00,0x00 # lea 64($aptr),$aptr + movdqa %xmm1,(%rax) + movdqa %xmm0,32(%rax,$num) + movdqa %xmm2,16(%rax) + movdqa %xmm0,48(%rax,$num) + movdqa %xmm3,32(%rax) + movdqa %xmm4,48(%rax) + lea 64(%rax),%rax + sub \$64,%r11 + jnz .Lmul_by_1 + + movq $rptr,%xmm1 + movq $nptr,%xmm2 + .byte 0x67 + mov $nptr,%rbp + movq %r10, %xmm3 # -num +___ +$code.=<<___ if ($addx); + leaq GFp_ia32cap_P(%rip),%r11 + mov 8(%r11),%r11d + and \$0x80108,%r11d + cmp \$0x80108,%r11d # check for AD*X+BMI2+BMI1 + jne .Lfrom_mont_nox + + lea (%rax,$num),$rptr + call __bn_sqrx8x_reduction + call __bn_postx4x_internal + + pxor %xmm0,%xmm0 + lea 48(%rsp),%rax + jmp .Lfrom_mont_zero + +.align 32 +.Lfrom_mont_nox: +___ +$code.=<<___; + call __bn_sqr8x_reduction + call __bn_post4x_internal + + pxor %xmm0,%xmm0 + lea 48(%rsp),%rax + jmp .Lfrom_mont_zero + +.align 32 +.Lfrom_mont_zero: + mov 40(%rsp),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 + movdqa %xmm0,16*0(%rax) + movdqa %xmm0,16*1(%rax) + movdqa %xmm0,16*2(%rax) + movdqa %xmm0,16*3(%rax) + lea 16*4(%rax),%rax + sub \$32,$num + jnz .Lfrom_mont_zero + + mov \$1,%rax + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lfrom_epilogue: + ret +.cfi_endproc +.size bn_from_mont8x,.-bn_from_mont8x +___ +} +}}} + +if ($addx) {{{ +my $bp="%rdx"; # restore original value + +$code.=<<___; +.type bn_mulx4x_mont_gather5,\@function,6 +.align 32 +bn_mulx4x_mont_gather5: +.cfi_startproc + mov %rsp,%rax +.cfi_def_cfa_register %rax +.Lmulx4x_enter: + push %rbx +.cfi_push %rbx + push %rbp +.cfi_push %rbp + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +.Lmulx4x_prologue: + + shl \$3,${num}d # convert $num to bytes + lea ($num,$num,2),%r10 # 3*$num in bytes + neg $num # -$num + mov ($n0),$n0 # *n0 + + ############################################################## + # Ensure that stack frame doesn't alias with $rptr+3*$num + # modulo 4096, which covers ret[num], am[num] and n[num] + # (see bn_exp.c). This is done to allow memory disambiguation + # logic do its magic. [Extra [num] is allocated in order + # to align with GFp_bn_power5's frame, which is cleansed after + # completing exponentiation. Extra 256 bytes is for power mask + # calculated from 7th argument, the index.] + # + lea -320(%rsp,$num,2),%r11 + mov %rsp,%rbp + sub $rp,%r11 + and \$4095,%r11 + cmp %r11,%r10 + jb .Lmulx4xsp_alt + sub %r11,%rbp # align with $aptr + lea -320(%rbp,$num,2),%rbp # future alloca(frame+2*$num*8+256) + jmp .Lmulx4xsp_done + +.Lmulx4xsp_alt: + lea 4096-320(,$num,2),%r10 + lea -320(%rbp,$num,2),%rbp # future alloca(frame+2*$num*8+256) + sub %r10,%r11 + mov \$0,%r10 + cmovc %r10,%r11 + sub %r11,%rbp +.Lmulx4xsp_done: + and \$-64,%rbp # ensure alignment + mov %rsp,%r11 + sub %rbp,%r11 + and \$-4096,%r11 + lea (%rbp,%r11),%rsp + mov (%rsp),%r10 + cmp %rbp,%rsp + ja .Lmulx4x_page_walk + jmp .Lmulx4x_page_walk_done + +.Lmulx4x_page_walk: + lea -4096(%rsp),%rsp + mov (%rsp),%r10 + cmp %rbp,%rsp + ja .Lmulx4x_page_walk +.Lmulx4x_page_walk_done: + + ############################################################## + # Stack layout + # +0 -num + # +8 off-loaded &b[i] + # +16 end of b[num] + # +24 inner counter + # +32 saved n0 + # +40 saved %rsp + # +48 + # +56 saved rp + # +64 tmp[num+1] + # + mov $n0, 32(%rsp) # save *n0 + mov %rax,40(%rsp) # save original %rsp +.cfi_cfa_expression %rsp+40,deref,+8 +.Lmulx4x_body: + call mulx4x_internal + + mov 40(%rsp),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 + mov \$1,%rax + + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lmulx4x_epilogue: + ret +.cfi_endproc +.size bn_mulx4x_mont_gather5,.-bn_mulx4x_mont_gather5 + +.type mulx4x_internal,\@abi-omnipotent +.align 32 +mulx4x_internal: +.cfi_startproc + mov $num,8(%rsp) # save -$num (it was in bytes) + mov $num,%r10 + neg $num # restore $num + shl \$5,$num + neg %r10 # restore $num + lea 128($bp,$num),%r13 # end of powers table (+size optimization) + shr \$5+5,$num + movd `($win64?56:8)`(%rax),%xmm5 # load 7th argument + sub \$1,$num + lea .Linc(%rip),%rax + mov %r13,16+8(%rsp) # end of b[num] + mov $num,24+8(%rsp) # inner counter + mov $rp, 56+8(%rsp) # save $rp +___ +my ($aptr, $bptr, $nptr, $tptr, $mi, $bi, $zero, $num)= + ("%rsi","%rdi","%rcx","%rbx","%r8","%r9","%rbp","%rax"); +my $rptr=$bptr; +my $STRIDE=2**5*8; # 5 is "window size" +my $N=$STRIDE/4; # should match cache line size +$code.=<<___; + movdqa 0(%rax),%xmm0 # 00000001000000010000000000000000 + movdqa 16(%rax),%xmm1 # 00000002000000020000000200000002 + lea 88-112(%rsp,%r10),%r10 # place the mask after tp[num+1] (+ICache optimization) + lea 128($bp),$bptr # size optimization + + pshufd \$0,%xmm5,%xmm5 # broadcast index + movdqa %xmm1,%xmm4 + .byte 0x67 + movdqa %xmm1,%xmm2 +___ +######################################################################## +# calculate mask by comparing 0..31 to index and save result to stack +# +$code.=<<___; + .byte 0x67 + paddd %xmm0,%xmm1 + pcmpeqd %xmm5,%xmm0 # compare to 1,0 + movdqa %xmm4,%xmm3 +___ +for($i=0;$i<$STRIDE/16-4;$i+=4) { +$code.=<<___; + paddd %xmm1,%xmm2 + pcmpeqd %xmm5,%xmm1 # compare to 3,2 + movdqa %xmm0,`16*($i+0)+112`(%r10) + movdqa %xmm4,%xmm0 + + paddd %xmm2,%xmm3 + pcmpeqd %xmm5,%xmm2 # compare to 5,4 + movdqa %xmm1,`16*($i+1)+112`(%r10) + movdqa %xmm4,%xmm1 + + paddd %xmm3,%xmm0 + pcmpeqd %xmm5,%xmm3 # compare to 7,6 + movdqa %xmm2,`16*($i+2)+112`(%r10) + movdqa %xmm4,%xmm2 + + paddd %xmm0,%xmm1 + pcmpeqd %xmm5,%xmm0 + movdqa %xmm3,`16*($i+3)+112`(%r10) + movdqa %xmm4,%xmm3 +___ +} +$code.=<<___; # last iteration can be optimized + .byte 0x67 + paddd %xmm1,%xmm2 + pcmpeqd %xmm5,%xmm1 + movdqa %xmm0,`16*($i+0)+112`(%r10) + + paddd %xmm2,%xmm3 + pcmpeqd %xmm5,%xmm2 + movdqa %xmm1,`16*($i+1)+112`(%r10) + + pcmpeqd %xmm5,%xmm3 + movdqa %xmm2,`16*($i+2)+112`(%r10) + + pand `16*($i+0)-128`($bptr),%xmm0 # while it's still in register + pand `16*($i+1)-128`($bptr),%xmm1 + pand `16*($i+2)-128`($bptr),%xmm2 + movdqa %xmm3,`16*($i+3)+112`(%r10) + pand `16*($i+3)-128`($bptr),%xmm3 + por %xmm2,%xmm0 + por %xmm3,%xmm1 +___ +for($i=0;$i<$STRIDE/16-4;$i+=4) { +$code.=<<___; + movdqa `16*($i+0)-128`($bptr),%xmm4 + movdqa `16*($i+1)-128`($bptr),%xmm5 + movdqa `16*($i+2)-128`($bptr),%xmm2 + pand `16*($i+0)+112`(%r10),%xmm4 + movdqa `16*($i+3)-128`($bptr),%xmm3 + pand `16*($i+1)+112`(%r10),%xmm5 + por %xmm4,%xmm0 + pand `16*($i+2)+112`(%r10),%xmm2 + por %xmm5,%xmm1 + pand `16*($i+3)+112`(%r10),%xmm3 + por %xmm2,%xmm0 + por %xmm3,%xmm1 +___ +} +$code.=<<___; + pxor %xmm1,%xmm0 + pshufd \$0x4e,%xmm0,%xmm1 + por %xmm1,%xmm0 + lea $STRIDE($bptr),$bptr + movq %xmm0,%rdx # bp[0] + lea 64+8*4+8(%rsp),$tptr + + mov %rdx,$bi + mulx 0*8($aptr),$mi,%rax # a[0]*b[0] + mulx 1*8($aptr),%r11,%r12 # a[1]*b[0] + add %rax,%r11 + mulx 2*8($aptr),%rax,%r13 # ... + adc %rax,%r12 + adc \$0,%r13 + mulx 3*8($aptr),%rax,%r14 + + mov $mi,%r15 + imulq 32+8(%rsp),$mi # "t[0]"*n0 + xor $zero,$zero # cf=0, of=0 + mov $mi,%rdx + + mov $bptr,8+8(%rsp) # off-load &b[i] + + lea 4*8($aptr),$aptr + adcx %rax,%r13 + adcx $zero,%r14 # cf=0 + + mulx 0*8($nptr),%rax,%r10 + adcx %rax,%r15 # discarded + adox %r11,%r10 + mulx 1*8($nptr),%rax,%r11 + adcx %rax,%r10 + adox %r12,%r11 + mulx 2*8($nptr),%rax,%r12 + mov 24+8(%rsp),$bptr # counter value + mov %r10,-8*4($tptr) + adcx %rax,%r11 + adox %r13,%r12 + mulx 3*8($nptr),%rax,%r15 + mov $bi,%rdx + mov %r11,-8*3($tptr) + adcx %rax,%r12 + adox $zero,%r15 # of=0 + lea 4*8($nptr),$nptr + mov %r12,-8*2($tptr) + jmp .Lmulx4x_1st + +.align 32 +.Lmulx4x_1st: + adcx $zero,%r15 # cf=0, modulo-scheduled + mulx 0*8($aptr),%r10,%rax # a[4]*b[0] + adcx %r14,%r10 + mulx 1*8($aptr),%r11,%r14 # a[5]*b[0] + adcx %rax,%r11 + mulx 2*8($aptr),%r12,%rax # ... + adcx %r14,%r12 + mulx 3*8($aptr),%r13,%r14 + .byte 0x67,0x67 + mov $mi,%rdx + adcx %rax,%r13 + adcx $zero,%r14 # cf=0 + lea 4*8($aptr),$aptr + lea 4*8($tptr),$tptr + + adox %r15,%r10 + mulx 0*8($nptr),%rax,%r15 + adcx %rax,%r10 + adox %r15,%r11 + mulx 1*8($nptr),%rax,%r15 + adcx %rax,%r11 + adox %r15,%r12 + mulx 2*8($nptr),%rax,%r15 + mov %r10,-5*8($tptr) + adcx %rax,%r12 + mov %r11,-4*8($tptr) + adox %r15,%r13 + mulx 3*8($nptr),%rax,%r15 + mov $bi,%rdx + mov %r12,-3*8($tptr) + adcx %rax,%r13 + adox $zero,%r15 + lea 4*8($nptr),$nptr + mov %r13,-2*8($tptr) + + dec $bptr # of=0, pass cf + jnz .Lmulx4x_1st + + mov 8(%rsp),$num # load -num + adc $zero,%r15 # modulo-scheduled + lea ($aptr,$num),$aptr # rewind $aptr + add %r15,%r14 + mov 8+8(%rsp),$bptr # re-load &b[i] + adc $zero,$zero # top-most carry + mov %r14,-1*8($tptr) + jmp .Lmulx4x_outer + +.align 32 +.Lmulx4x_outer: + lea 16-256($tptr),%r10 # where 256-byte mask is (+density control) + pxor %xmm4,%xmm4 + .byte 0x67,0x67 + pxor %xmm5,%xmm5 +___ +for($i=0;$i<$STRIDE/16;$i+=4) { +$code.=<<___; + movdqa `16*($i+0)-128`($bptr),%xmm0 + movdqa `16*($i+1)-128`($bptr),%xmm1 + movdqa `16*($i+2)-128`($bptr),%xmm2 + pand `16*($i+0)+256`(%r10),%xmm0 + movdqa `16*($i+3)-128`($bptr),%xmm3 + pand `16*($i+1)+256`(%r10),%xmm1 + por %xmm0,%xmm4 + pand `16*($i+2)+256`(%r10),%xmm2 + por %xmm1,%xmm5 + pand `16*($i+3)+256`(%r10),%xmm3 + por %xmm2,%xmm4 + por %xmm3,%xmm5 +___ +} +$code.=<<___; + por %xmm5,%xmm4 + pshufd \$0x4e,%xmm4,%xmm0 + por %xmm4,%xmm0 + lea $STRIDE($bptr),$bptr + movq %xmm0,%rdx # m0=bp[i] + + mov $zero,($tptr) # save top-most carry + lea 4*8($tptr,$num),$tptr # rewind $tptr + mulx 0*8($aptr),$mi,%r11 # a[0]*b[i] + xor $zero,$zero # cf=0, of=0 + mov %rdx,$bi + mulx 1*8($aptr),%r14,%r12 # a[1]*b[i] + adox -4*8($tptr),$mi # +t[0] + adcx %r14,%r11 + mulx 2*8($aptr),%r15,%r13 # ... + adox -3*8($tptr),%r11 + adcx %r15,%r12 + mulx 3*8($aptr),%rdx,%r14 + adox -2*8($tptr),%r12 + adcx %rdx,%r13 + lea ($nptr,$num),$nptr # rewind $nptr + lea 4*8($aptr),$aptr + adox -1*8($tptr),%r13 + adcx $zero,%r14 + adox $zero,%r14 + + mov $mi,%r15 + imulq 32+8(%rsp),$mi # "t[0]"*n0 + + mov $mi,%rdx + xor $zero,$zero # cf=0, of=0 + mov $bptr,8+8(%rsp) # off-load &b[i] + + mulx 0*8($nptr),%rax,%r10 + adcx %rax,%r15 # discarded + adox %r11,%r10 + mulx 1*8($nptr),%rax,%r11 + adcx %rax,%r10 + adox %r12,%r11 + mulx 2*8($nptr),%rax,%r12 + adcx %rax,%r11 + adox %r13,%r12 + mulx 3*8($nptr),%rax,%r15 + mov $bi,%rdx + mov 24+8(%rsp),$bptr # counter value + mov %r10,-8*4($tptr) + adcx %rax,%r12 + mov %r11,-8*3($tptr) + adox $zero,%r15 # of=0 + mov %r12,-8*2($tptr) + lea 4*8($nptr),$nptr + jmp .Lmulx4x_inner + +.align 32 +.Lmulx4x_inner: + mulx 0*8($aptr),%r10,%rax # a[4]*b[i] + adcx $zero,%r15 # cf=0, modulo-scheduled + adox %r14,%r10 + mulx 1*8($aptr),%r11,%r14 # a[5]*b[i] + adcx 0*8($tptr),%r10 + adox %rax,%r11 + mulx 2*8($aptr),%r12,%rax # ... + adcx 1*8($tptr),%r11 + adox %r14,%r12 + mulx 3*8($aptr),%r13,%r14 + mov $mi,%rdx + adcx 2*8($tptr),%r12 + adox %rax,%r13 + adcx 3*8($tptr),%r13 + adox $zero,%r14 # of=0 + lea 4*8($aptr),$aptr + lea 4*8($tptr),$tptr + adcx $zero,%r14 # cf=0 + + adox %r15,%r10 + mulx 0*8($nptr),%rax,%r15 + adcx %rax,%r10 + adox %r15,%r11 + mulx 1*8($nptr),%rax,%r15 + adcx %rax,%r11 + adox %r15,%r12 + mulx 2*8($nptr),%rax,%r15 + mov %r10,-5*8($tptr) + adcx %rax,%r12 + adox %r15,%r13 + mov %r11,-4*8($tptr) + mulx 3*8($nptr),%rax,%r15 + mov $bi,%rdx + lea 4*8($nptr),$nptr + mov %r12,-3*8($tptr) + adcx %rax,%r13 + adox $zero,%r15 + mov %r13,-2*8($tptr) + + dec $bptr # of=0, pass cf + jnz .Lmulx4x_inner + + mov 0+8(%rsp),$num # load -num + adc $zero,%r15 # modulo-scheduled + sub 0*8($tptr),$bptr # pull top-most carry to %cf + mov 8+8(%rsp),$bptr # re-load &b[i] + mov 16+8(%rsp),%r10 + adc %r15,%r14 + lea ($aptr,$num),$aptr # rewind $aptr + adc $zero,$zero # top-most carry + mov %r14,-1*8($tptr) + + cmp %r10,$bptr + jb .Lmulx4x_outer + + mov -8($nptr),%r10 + mov $zero,%r8 + mov ($nptr,$num),%r12 + lea ($nptr,$num),%rbp # rewind $nptr + mov $num,%rcx + lea ($tptr,$num),%rdi # rewind $tptr + xor %eax,%eax + xor %r15,%r15 + sub %r14,%r10 # compare top-most words + adc %r15,%r15 + or %r15,%r8 + sar \$3+2,%rcx + sub %r8,%rax # %rax=-%r8 + mov 56+8(%rsp),%rdx # restore rp + dec %r12 # so that after 'not' we get -n[0] + mov 8*1(%rbp),%r13 + xor %r8,%r8 + mov 8*2(%rbp),%r14 + mov 8*3(%rbp),%r15 + jmp .Lsqrx4x_sub_entry # common post-condition +.cfi_endproc +.size mulx4x_internal,.-mulx4x_internal +___ +} { +###################################################################### +# void GFp_bn_power5( +my $rptr="%rdi"; # BN_ULONG *rptr, +my $aptr="%rsi"; # const BN_ULONG *aptr, +my $bptr="%rdx"; # const void *table, +my $nptr="%rcx"; # const BN_ULONG *nptr, +my $n0 ="%r8"; # const BN_ULONG *n0); +my $num ="%r9"; # int num, has to be divisible by 8 + # int pwr); + +my ($i,$j,$tptr)=("%rbp","%rcx",$rptr); +my @A0=("%r10","%r11"); +my @A1=("%r12","%r13"); +my ($a0,$a1,$ai)=("%r14","%r15","%rbx"); + +$code.=<<___; +.type bn_powerx5,\@function,6 +.align 32 +bn_powerx5: +.cfi_startproc + mov %rsp,%rax +.cfi_def_cfa_register %rax +.Lpowerx5_enter: + push %rbx +.cfi_push %rbx + push %rbp +.cfi_push %rbp + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +.Lpowerx5_prologue: + + shl \$3,${num}d # convert $num to bytes + lea ($num,$num,2),%r10 # 3*$num in bytes + neg $num + mov ($n0),$n0 # *n0 + + ############################################################## + # Ensure that stack frame doesn't alias with $rptr+3*$num + # modulo 4096, which covers ret[num], am[num] and n[num] + # (see bn_exp.c). This is done to allow memory disambiguation + # logic do its magic. [Extra 256 bytes is for power mask + # calculated from 7th argument, the index.] + # + lea -320(%rsp,$num,2),%r11 + mov %rsp,%rbp + sub $rptr,%r11 + and \$4095,%r11 + cmp %r11,%r10 + jb .Lpwrx_sp_alt + sub %r11,%rbp # align with $aptr + lea -320(%rbp,$num,2),%rbp # future alloca(frame+2*$num*8+256) + jmp .Lpwrx_sp_done + +.align 32 +.Lpwrx_sp_alt: + lea 4096-320(,$num,2),%r10 + lea -320(%rbp,$num,2),%rbp # alloca(frame+2*$num*8+256) + sub %r10,%r11 + mov \$0,%r10 + cmovc %r10,%r11 + sub %r11,%rbp +.Lpwrx_sp_done: + and \$-64,%rbp + mov %rsp,%r11 + sub %rbp,%r11 + and \$-4096,%r11 + lea (%rbp,%r11),%rsp + mov (%rsp),%r10 + cmp %rbp,%rsp + ja .Lpwrx_page_walk + jmp .Lpwrx_page_walk_done + +.Lpwrx_page_walk: + lea -4096(%rsp),%rsp + mov (%rsp),%r10 + cmp %rbp,%rsp + ja .Lpwrx_page_walk +.Lpwrx_page_walk_done: + + mov $num,%r10 + neg $num + + ############################################################## + # Stack layout + # + # +0 saved $num, used in reduction section + # +8 &t[2*$num], used in reduction section + # +16 intermediate carry bit + # +24 top-most carry bit, used in reduction section + # +32 saved *n0 + # +40 saved %rsp + # +48 t[2*$num] + # + pxor %xmm0,%xmm0 + movq $rptr,%xmm1 # save $rptr + movq $nptr,%xmm2 # save $nptr + movq %r10, %xmm3 # -$num + movq $bptr,%xmm4 + mov $n0, 32(%rsp) + mov %rax, 40(%rsp) # save original %rsp +.cfi_cfa_expression %rsp+40,deref,+8 +.Lpowerx5_body: + + call __bn_sqrx8x_internal + call __bn_postx4x_internal + call __bn_sqrx8x_internal + call __bn_postx4x_internal + call __bn_sqrx8x_internal + call __bn_postx4x_internal + call __bn_sqrx8x_internal + call __bn_postx4x_internal + call __bn_sqrx8x_internal + call __bn_postx4x_internal + + mov %r10,$num # -num + mov $aptr,$rptr + movq %xmm2,$nptr + movq %xmm4,$bptr + mov 40(%rsp),%rax + + call mulx4x_internal + + mov 40(%rsp),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 + mov \$1,%rax + + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lpowerx5_epilogue: + ret +.cfi_endproc +.size bn_powerx5,.-bn_powerx5 + +.globl GFp_bn_sqrx8x_internal +.type GFp_bn_sqrx8x_internal,\@abi-omnipotent +.align 32 +GFp_bn_sqrx8x_internal: +__bn_sqrx8x_internal: +.cfi_startproc + ################################################################## + # Squaring part: + # + # a) multiply-n-add everything but a[i]*a[i]; + # b) shift result of a) by 1 to the left and accumulate + # a[i]*a[i] products; + # + ################################################################## + # a[7]a[7]a[6]a[6]a[5]a[5]a[4]a[4]a[3]a[3]a[2]a[2]a[1]a[1]a[0]a[0] + # a[1]a[0] + # a[2]a[0] + # a[3]a[0] + # a[2]a[1] + # a[3]a[1] + # a[3]a[2] + # + # a[4]a[0] + # a[5]a[0] + # a[6]a[0] + # a[7]a[0] + # a[4]a[1] + # a[5]a[1] + # a[6]a[1] + # a[7]a[1] + # a[4]a[2] + # a[5]a[2] + # a[6]a[2] + # a[7]a[2] + # a[4]a[3] + # a[5]a[3] + # a[6]a[3] + # a[7]a[3] + # + # a[5]a[4] + # a[6]a[4] + # a[7]a[4] + # a[6]a[5] + # a[7]a[5] + # a[7]a[6] + # a[7]a[7]a[6]a[6]a[5]a[5]a[4]a[4]a[3]a[3]a[2]a[2]a[1]a[1]a[0]a[0] +___ +{ +my ($zero,$carry)=("%rbp","%rcx"); +my $aaptr=$zero; +$code.=<<___; + lea 48+8(%rsp),$tptr + lea ($aptr,$num),$aaptr + mov $num,0+8(%rsp) # save $num + mov $aaptr,8+8(%rsp) # save end of $aptr + jmp .Lsqr8x_zero_start + +.align 32 +.byte 0x66,0x66,0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00 +.Lsqrx8x_zero: + .byte 0x3e + movdqa %xmm0,0*8($tptr) + movdqa %xmm0,2*8($tptr) + movdqa %xmm0,4*8($tptr) + movdqa %xmm0,6*8($tptr) +.Lsqr8x_zero_start: # aligned at 32 + movdqa %xmm0,8*8($tptr) + movdqa %xmm0,10*8($tptr) + movdqa %xmm0,12*8($tptr) + movdqa %xmm0,14*8($tptr) + lea 16*8($tptr),$tptr + sub \$64,$num + jnz .Lsqrx8x_zero + + mov 0*8($aptr),%rdx # a[0], modulo-scheduled + #xor %r9,%r9 # t[1], ex-$num, zero already + xor %r10,%r10 + xor %r11,%r11 + xor %r12,%r12 + xor %r13,%r13 + xor %r14,%r14 + xor %r15,%r15 + lea 48+8(%rsp),$tptr + xor $zero,$zero # cf=0, cf=0 + jmp .Lsqrx8x_outer_loop + +.align 32 +.Lsqrx8x_outer_loop: + mulx 1*8($aptr),%r8,%rax # a[1]*a[0] + adcx %r9,%r8 # a[1]*a[0]+=t[1] + adox %rax,%r10 + mulx 2*8($aptr),%r9,%rax # a[2]*a[0] + adcx %r10,%r9 + adox %rax,%r11 + .byte 0xc4,0xe2,0xab,0xf6,0x86,0x18,0x00,0x00,0x00 # mulx 3*8($aptr),%r10,%rax # ... + adcx %r11,%r10 + adox %rax,%r12 + .byte 0xc4,0xe2,0xa3,0xf6,0x86,0x20,0x00,0x00,0x00 # mulx 4*8($aptr),%r11,%rax + adcx %r12,%r11 + adox %rax,%r13 + mulx 5*8($aptr),%r12,%rax + adcx %r13,%r12 + adox %rax,%r14 + mulx 6*8($aptr),%r13,%rax + adcx %r14,%r13 + adox %r15,%rax + mulx 7*8($aptr),%r14,%r15 + mov 1*8($aptr),%rdx # a[1] + adcx %rax,%r14 + adox $zero,%r15 + adc 8*8($tptr),%r15 + mov %r8,1*8($tptr) # t[1] + mov %r9,2*8($tptr) # t[2] + sbb $carry,$carry # mov %cf,$carry + xor $zero,$zero # cf=0, of=0 + + + mulx 2*8($aptr),%r8,%rbx # a[2]*a[1] + mulx 3*8($aptr),%r9,%rax # a[3]*a[1] + adcx %r10,%r8 + adox %rbx,%r9 + mulx 4*8($aptr),%r10,%rbx # ... + adcx %r11,%r9 + adox %rax,%r10 + .byte 0xc4,0xe2,0xa3,0xf6,0x86,0x28,0x00,0x00,0x00 # mulx 5*8($aptr),%r11,%rax + adcx %r12,%r10 + adox %rbx,%r11 + .byte 0xc4,0xe2,0x9b,0xf6,0x9e,0x30,0x00,0x00,0x00 # mulx 6*8($aptr),%r12,%rbx + adcx %r13,%r11 + adox %r14,%r12 + .byte 0xc4,0x62,0x93,0xf6,0xb6,0x38,0x00,0x00,0x00 # mulx 7*8($aptr),%r13,%r14 + mov 2*8($aptr),%rdx # a[2] + adcx %rax,%r12 + adox %rbx,%r13 + adcx %r15,%r13 + adox $zero,%r14 # of=0 + adcx $zero,%r14 # cf=0 + + mov %r8,3*8($tptr) # t[3] + mov %r9,4*8($tptr) # t[4] + + mulx 3*8($aptr),%r8,%rbx # a[3]*a[2] + mulx 4*8($aptr),%r9,%rax # a[4]*a[2] + adcx %r10,%r8 + adox %rbx,%r9 + mulx 5*8($aptr),%r10,%rbx # ... + adcx %r11,%r9 + adox %rax,%r10 + .byte 0xc4,0xe2,0xa3,0xf6,0x86,0x30,0x00,0x00,0x00 # mulx 6*8($aptr),%r11,%rax + adcx %r12,%r10 + adox %r13,%r11 + .byte 0xc4,0x62,0x9b,0xf6,0xae,0x38,0x00,0x00,0x00 # mulx 7*8($aptr),%r12,%r13 + .byte 0x3e + mov 3*8($aptr),%rdx # a[3] + adcx %rbx,%r11 + adox %rax,%r12 + adcx %r14,%r12 + mov %r8,5*8($tptr) # t[5] + mov %r9,6*8($tptr) # t[6] + mulx 4*8($aptr),%r8,%rax # a[4]*a[3] + adox $zero,%r13 # of=0 + adcx $zero,%r13 # cf=0 + + mulx 5*8($aptr),%r9,%rbx # a[5]*a[3] + adcx %r10,%r8 + adox %rax,%r9 + mulx 6*8($aptr),%r10,%rax # ... + adcx %r11,%r9 + adox %r12,%r10 + mulx 7*8($aptr),%r11,%r12 + mov 4*8($aptr),%rdx # a[4] + mov 5*8($aptr),%r14 # a[5] + adcx %rbx,%r10 + adox %rax,%r11 + mov 6*8($aptr),%r15 # a[6] + adcx %r13,%r11 + adox $zero,%r12 # of=0 + adcx $zero,%r12 # cf=0 + + mov %r8,7*8($tptr) # t[7] + mov %r9,8*8($tptr) # t[8] + + mulx %r14,%r9,%rax # a[5]*a[4] + mov 7*8($aptr),%r8 # a[7] + adcx %r10,%r9 + mulx %r15,%r10,%rbx # a[6]*a[4] + adox %rax,%r10 + adcx %r11,%r10 + mulx %r8,%r11,%rax # a[7]*a[4] + mov %r14,%rdx # a[5] + adox %rbx,%r11 + adcx %r12,%r11 + #adox $zero,%rax # of=0 + adcx $zero,%rax # cf=0 + + mulx %r15,%r14,%rbx # a[6]*a[5] + mulx %r8,%r12,%r13 # a[7]*a[5] + mov %r15,%rdx # a[6] + lea 8*8($aptr),$aptr + adcx %r14,%r11 + adox %rbx,%r12 + adcx %rax,%r12 + adox $zero,%r13 + + .byte 0x67,0x67 + mulx %r8,%r8,%r14 # a[7]*a[6] + adcx %r8,%r13 + adcx $zero,%r14 + + cmp 8+8(%rsp),$aptr + je .Lsqrx8x_outer_break + + neg $carry # mov $carry,%cf + mov \$-8,%rcx + mov $zero,%r15 + mov 8*8($tptr),%r8 + adcx 9*8($tptr),%r9 # +=t[9] + adcx 10*8($tptr),%r10 # ... + adcx 11*8($tptr),%r11 + adc 12*8($tptr),%r12 + adc 13*8($tptr),%r13 + adc 14*8($tptr),%r14 + adc 15*8($tptr),%r15 + lea ($aptr),$aaptr + lea 2*64($tptr),$tptr + sbb %rax,%rax # mov %cf,$carry + + mov -64($aptr),%rdx # a[0] + mov %rax,16+8(%rsp) # offload $carry + mov $tptr,24+8(%rsp) + + #lea 8*8($tptr),$tptr # see 2*8*8($tptr) above + xor %eax,%eax # cf=0, of=0 + jmp .Lsqrx8x_loop + +.align 32 +.Lsqrx8x_loop: + mov %r8,%rbx + mulx 0*8($aaptr),%rax,%r8 # a[8]*a[i] + adcx %rax,%rbx # +=t[8] + adox %r9,%r8 + + mulx 1*8($aaptr),%rax,%r9 # ... + adcx %rax,%r8 + adox %r10,%r9 + + mulx 2*8($aaptr),%rax,%r10 + adcx %rax,%r9 + adox %r11,%r10 + + mulx 3*8($aaptr),%rax,%r11 + adcx %rax,%r10 + adox %r12,%r11 + + .byte 0xc4,0x62,0xfb,0xf6,0xa5,0x20,0x00,0x00,0x00 # mulx 4*8($aaptr),%rax,%r12 + adcx %rax,%r11 + adox %r13,%r12 + + mulx 5*8($aaptr),%rax,%r13 + adcx %rax,%r12 + adox %r14,%r13 + + mulx 6*8($aaptr),%rax,%r14 + mov %rbx,($tptr,%rcx,8) # store t[8+i] + mov \$0,%ebx + adcx %rax,%r13 + adox %r15,%r14 + + .byte 0xc4,0x62,0xfb,0xf6,0xbd,0x38,0x00,0x00,0x00 # mulx 7*8($aaptr),%rax,%r15 + mov 8($aptr,%rcx,8),%rdx # a[i] + adcx %rax,%r14 + adox %rbx,%r15 # %rbx is 0, of=0 + adcx %rbx,%r15 # cf=0 + + .byte 0x67 + inc %rcx # of=0 + jnz .Lsqrx8x_loop + + lea 8*8($aaptr),$aaptr + mov \$-8,%rcx + cmp 8+8(%rsp),$aaptr # done? + je .Lsqrx8x_break + + sub 16+8(%rsp),%rbx # mov 16(%rsp),%cf + .byte 0x66 + mov -64($aptr),%rdx + adcx 0*8($tptr),%r8 + adcx 1*8($tptr),%r9 + adc 2*8($tptr),%r10 + adc 3*8($tptr),%r11 + adc 4*8($tptr),%r12 + adc 5*8($tptr),%r13 + adc 6*8($tptr),%r14 + adc 7*8($tptr),%r15 + lea 8*8($tptr),$tptr + .byte 0x67 + sbb %rax,%rax # mov %cf,%rax + xor %ebx,%ebx # cf=0, of=0 + mov %rax,16+8(%rsp) # offload carry + jmp .Lsqrx8x_loop + +.align 32 +.Lsqrx8x_break: + xor $zero,$zero + sub 16+8(%rsp),%rbx # mov 16(%rsp),%cf + adcx $zero,%r8 + mov 24+8(%rsp),$carry # initial $tptr, borrow $carry + adcx $zero,%r9 + mov 0*8($aptr),%rdx # a[8], modulo-scheduled + adc \$0,%r10 + mov %r8,0*8($tptr) + adc \$0,%r11 + adc \$0,%r12 + adc \$0,%r13 + adc \$0,%r14 + adc \$0,%r15 + cmp $carry,$tptr # cf=0, of=0 + je .Lsqrx8x_outer_loop + + mov %r9,1*8($tptr) + mov 1*8($carry),%r9 + mov %r10,2*8($tptr) + mov 2*8($carry),%r10 + mov %r11,3*8($tptr) + mov 3*8($carry),%r11 + mov %r12,4*8($tptr) + mov 4*8($carry),%r12 + mov %r13,5*8($tptr) + mov 5*8($carry),%r13 + mov %r14,6*8($tptr) + mov 6*8($carry),%r14 + mov %r15,7*8($tptr) + mov 7*8($carry),%r15 + mov $carry,$tptr + jmp .Lsqrx8x_outer_loop + +.align 32 +.Lsqrx8x_outer_break: + mov %r9,9*8($tptr) # t[9] + movq %xmm3,%rcx # -$num + mov %r10,10*8($tptr) # ... + mov %r11,11*8($tptr) + mov %r12,12*8($tptr) + mov %r13,13*8($tptr) + mov %r14,14*8($tptr) +___ +} { +my $i="%rcx"; +$code.=<<___; + lea 48+8(%rsp),$tptr + mov ($aptr,$i),%rdx # a[0] + + mov 8($tptr),$A0[1] # t[1] + xor $A0[0],$A0[0] # t[0], of=0, cf=0 + mov 0+8(%rsp),$num # restore $num + adox $A0[1],$A0[1] + mov 16($tptr),$A1[0] # t[2] # prefetch + mov 24($tptr),$A1[1] # t[3] # prefetch + #jmp .Lsqrx4x_shift_n_add # happens to be aligned + +.align 32 +.Lsqrx4x_shift_n_add: + mulx %rdx,%rax,%rbx + adox $A1[0],$A1[0] + adcx $A0[0],%rax + .byte 0x48,0x8b,0x94,0x0e,0x08,0x00,0x00,0x00 # mov 8($aptr,$i),%rdx # a[i+1] # prefetch + .byte 0x4c,0x8b,0x97,0x20,0x00,0x00,0x00 # mov 32($tptr),$A0[0] # t[2*i+4] # prefetch + adox $A1[1],$A1[1] + adcx $A0[1],%rbx + mov 40($tptr),$A0[1] # t[2*i+4+1] # prefetch + mov %rax,0($tptr) + mov %rbx,8($tptr) + + mulx %rdx,%rax,%rbx + adox $A0[0],$A0[0] + adcx $A1[0],%rax + mov 16($aptr,$i),%rdx # a[i+2] # prefetch + mov 48($tptr),$A1[0] # t[2*i+6] # prefetch + adox $A0[1],$A0[1] + adcx $A1[1],%rbx + mov 56($tptr),$A1[1] # t[2*i+6+1] # prefetch + mov %rax,16($tptr) + mov %rbx,24($tptr) + + mulx %rdx,%rax,%rbx + adox $A1[0],$A1[0] + adcx $A0[0],%rax + mov 24($aptr,$i),%rdx # a[i+3] # prefetch + lea 32($i),$i + mov 64($tptr),$A0[0] # t[2*i+8] # prefetch + adox $A1[1],$A1[1] + adcx $A0[1],%rbx + mov 72($tptr),$A0[1] # t[2*i+8+1] # prefetch + mov %rax,32($tptr) + mov %rbx,40($tptr) + + mulx %rdx,%rax,%rbx + adox $A0[0],$A0[0] + adcx $A1[0],%rax + jrcxz .Lsqrx4x_shift_n_add_break + .byte 0x48,0x8b,0x94,0x0e,0x00,0x00,0x00,0x00 # mov 0($aptr,$i),%rdx # a[i+4] # prefetch + adox $A0[1],$A0[1] + adcx $A1[1],%rbx + mov 80($tptr),$A1[0] # t[2*i+10] # prefetch + mov 88($tptr),$A1[1] # t[2*i+10+1] # prefetch + mov %rax,48($tptr) + mov %rbx,56($tptr) + lea 64($tptr),$tptr + nop + jmp .Lsqrx4x_shift_n_add + +.align 32 +.Lsqrx4x_shift_n_add_break: + adcx $A1[1],%rbx + mov %rax,48($tptr) + mov %rbx,56($tptr) + lea 64($tptr),$tptr # end of t[] buffer +___ +} +###################################################################### +# Montgomery reduction part, "word-by-word" algorithm. +# +# This new path is inspired by multiple submissions from Intel, by +# Shay Gueron, Vlad Krasnov, Erdinc Ozturk, James Guilford, +# Vinodh Gopal... +{ +my ($nptr,$carry,$m0)=("%rbp","%rsi","%rdx"); + +$code.=<<___; + movq %xmm2,$nptr +__bn_sqrx8x_reduction: + xor %eax,%eax # initial top-most carry bit + mov 32+8(%rsp),%rbx # n0 + mov 48+8(%rsp),%rdx # "%r8", 8*0($tptr) + lea -8*8($nptr,$num),%rcx # end of n[] + #lea 48+8(%rsp,$num,2),$tptr # end of t[] buffer + mov %rcx, 0+8(%rsp) # save end of n[] + mov $tptr,8+8(%rsp) # save end of t[] + + lea 48+8(%rsp),$tptr # initial t[] window + jmp .Lsqrx8x_reduction_loop + +.align 32 +.Lsqrx8x_reduction_loop: + mov 8*1($tptr),%r9 + mov 8*2($tptr),%r10 + mov 8*3($tptr),%r11 + mov 8*4($tptr),%r12 + mov %rdx,%r8 + imulq %rbx,%rdx # n0*a[i] + mov 8*5($tptr),%r13 + mov 8*6($tptr),%r14 + mov 8*7($tptr),%r15 + mov %rax,24+8(%rsp) # store top-most carry bit + + lea 8*8($tptr),$tptr + xor $carry,$carry # cf=0,of=0 + mov \$-8,%rcx + jmp .Lsqrx8x_reduce + +.align 32 +.Lsqrx8x_reduce: + mov %r8, %rbx + mulx 8*0($nptr),%rax,%r8 # n[0] + adcx %rbx,%rax # discarded + adox %r9,%r8 + + mulx 8*1($nptr),%rbx,%r9 # n[1] + adcx %rbx,%r8 + adox %r10,%r9 + + mulx 8*2($nptr),%rbx,%r10 + adcx %rbx,%r9 + adox %r11,%r10 + + mulx 8*3($nptr),%rbx,%r11 + adcx %rbx,%r10 + adox %r12,%r11 + + .byte 0xc4,0x62,0xe3,0xf6,0xa5,0x20,0x00,0x00,0x00 # mulx 8*4($nptr),%rbx,%r12 + mov %rdx,%rax + mov %r8,%rdx + adcx %rbx,%r11 + adox %r13,%r12 + + mulx 32+8(%rsp),%rbx,%rdx # %rdx discarded + mov %rax,%rdx + mov %rax,64+48+8(%rsp,%rcx,8) # put aside n0*a[i] + + mulx 8*5($nptr),%rax,%r13 + adcx %rax,%r12 + adox %r14,%r13 + + mulx 8*6($nptr),%rax,%r14 + adcx %rax,%r13 + adox %r15,%r14 + + mulx 8*7($nptr),%rax,%r15 + mov %rbx,%rdx + adcx %rax,%r14 + adox $carry,%r15 # $carry is 0 + adcx $carry,%r15 # cf=0 + + .byte 0x67,0x67,0x67 + inc %rcx # of=0 + jnz .Lsqrx8x_reduce + + mov $carry,%rax # xor %rax,%rax + cmp 0+8(%rsp),$nptr # end of n[]? + jae .Lsqrx8x_no_tail + + mov 48+8(%rsp),%rdx # pull n0*a[0] + add 8*0($tptr),%r8 + lea 8*8($nptr),$nptr + mov \$-8,%rcx + adcx 8*1($tptr),%r9 + adcx 8*2($tptr),%r10 + adc 8*3($tptr),%r11 + adc 8*4($tptr),%r12 + adc 8*5($tptr),%r13 + adc 8*6($tptr),%r14 + adc 8*7($tptr),%r15 + lea 8*8($tptr),$tptr + sbb %rax,%rax # top carry + + xor $carry,$carry # of=0, cf=0 + mov %rax,16+8(%rsp) + jmp .Lsqrx8x_tail + +.align 32 +.Lsqrx8x_tail: + mov %r8,%rbx + mulx 8*0($nptr),%rax,%r8 + adcx %rax,%rbx + adox %r9,%r8 + + mulx 8*1($nptr),%rax,%r9 + adcx %rax,%r8 + adox %r10,%r9 + + mulx 8*2($nptr),%rax,%r10 + adcx %rax,%r9 + adox %r11,%r10 + + mulx 8*3($nptr),%rax,%r11 + adcx %rax,%r10 + adox %r12,%r11 + + .byte 0xc4,0x62,0xfb,0xf6,0xa5,0x20,0x00,0x00,0x00 # mulx 8*4($nptr),%rax,%r12 + adcx %rax,%r11 + adox %r13,%r12 + + mulx 8*5($nptr),%rax,%r13 + adcx %rax,%r12 + adox %r14,%r13 + + mulx 8*6($nptr),%rax,%r14 + adcx %rax,%r13 + adox %r15,%r14 + + mulx 8*7($nptr),%rax,%r15 + mov 72+48+8(%rsp,%rcx,8),%rdx # pull n0*a[i] + adcx %rax,%r14 + adox $carry,%r15 + mov %rbx,($tptr,%rcx,8) # save result + mov %r8,%rbx + adcx $carry,%r15 # cf=0 + + inc %rcx # of=0 + jnz .Lsqrx8x_tail + + cmp 0+8(%rsp),$nptr # end of n[]? + jae .Lsqrx8x_tail_done # break out of loop + + sub 16+8(%rsp),$carry # mov 16(%rsp),%cf + mov 48+8(%rsp),%rdx # pull n0*a[0] + lea 8*8($nptr),$nptr + adc 8*0($tptr),%r8 + adc 8*1($tptr),%r9 + adc 8*2($tptr),%r10 + adc 8*3($tptr),%r11 + adc 8*4($tptr),%r12 + adc 8*5($tptr),%r13 + adc 8*6($tptr),%r14 + adc 8*7($tptr),%r15 + lea 8*8($tptr),$tptr + sbb %rax,%rax + sub \$8,%rcx # mov \$-8,%rcx + + xor $carry,$carry # of=0, cf=0 + mov %rax,16+8(%rsp) + jmp .Lsqrx8x_tail + +.align 32 +.Lsqrx8x_tail_done: + xor %rax,%rax + add 24+8(%rsp),%r8 # can this overflow? + adc \$0,%r9 + adc \$0,%r10 + adc \$0,%r11 + adc \$0,%r12 + adc \$0,%r13 + adc \$0,%r14 + adc \$0,%r15 + adc \$0,%rax + + sub 16+8(%rsp),$carry # mov 16(%rsp),%cf +.Lsqrx8x_no_tail: # %cf is 0 if jumped here + adc 8*0($tptr),%r8 + movq %xmm3,%rcx + adc 8*1($tptr),%r9 + mov 8*7($nptr),$carry + movq %xmm2,$nptr # restore $nptr + adc 8*2($tptr),%r10 + adc 8*3($tptr),%r11 + adc 8*4($tptr),%r12 + adc 8*5($tptr),%r13 + adc 8*6($tptr),%r14 + adc 8*7($tptr),%r15 + adc \$0,%rax # top-most carry + + mov 32+8(%rsp),%rbx # n0 + mov 8*8($tptr,%rcx),%rdx # modulo-scheduled "%r8" + + mov %r8,8*0($tptr) # store top 512 bits + lea 8*8($tptr),%r8 # borrow %r8 + mov %r9,8*1($tptr) + mov %r10,8*2($tptr) + mov %r11,8*3($tptr) + mov %r12,8*4($tptr) + mov %r13,8*5($tptr) + mov %r14,8*6($tptr) + mov %r15,8*7($tptr) + + lea 8*8($tptr,%rcx),$tptr # start of current t[] window + cmp 8+8(%rsp),%r8 # end of t[]? + jb .Lsqrx8x_reduction_loop + ret +.cfi_endproc +.size GFp_bn_sqrx8x_internal,.-GFp_bn_sqrx8x_internal +___ +} +############################################################## +# Post-condition, 4x unrolled +# +{ +my ($rptr,$nptr)=("%rdx","%rbp"); +$code.=<<___; +.align 32 +.type __bn_postx4x_internal,\@abi-omnipotent +__bn_postx4x_internal: +.cfi_startproc + mov 8*0($nptr),%r12 + mov %rcx,%r10 # -$num + mov %rcx,%r9 # -$num + neg %rax + sar \$3+2,%rcx + #lea 48+8(%rsp,%r9),$tptr + movq %xmm1,$rptr # restore $rptr + movq %xmm1,$aptr # prepare for back-to-back call + dec %r12 # so that after 'not' we get -n[0] + mov 8*1($nptr),%r13 + xor %r8,%r8 + mov 8*2($nptr),%r14 + mov 8*3($nptr),%r15 + jmp .Lsqrx4x_sub_entry + +.align 16 +.Lsqrx4x_sub: + mov 8*0($nptr),%r12 + mov 8*1($nptr),%r13 + mov 8*2($nptr),%r14 + mov 8*3($nptr),%r15 +.Lsqrx4x_sub_entry: + andn %rax,%r12,%r12 + lea 8*4($nptr),$nptr + andn %rax,%r13,%r13 + andn %rax,%r14,%r14 + andn %rax,%r15,%r15 + + neg %r8 # mov %r8,%cf + adc 8*0($tptr),%r12 + adc 8*1($tptr),%r13 + adc 8*2($tptr),%r14 + adc 8*3($tptr),%r15 + mov %r12,8*0($rptr) + lea 8*4($tptr),$tptr + mov %r13,8*1($rptr) + sbb %r8,%r8 # mov %cf,%r8 + mov %r14,8*2($rptr) + mov %r15,8*3($rptr) + lea 8*4($rptr),$rptr + + inc %rcx + jnz .Lsqrx4x_sub + + neg %r9 # restore $num + + ret +.cfi_endproc +.size __bn_postx4x_internal,.-__bn_postx4x_internal +___ +} +}}} +{ +my ($inp,$num,$tbl,$idx)=$win64?("%rcx","%edx","%r8", "%r9d") : # Win64 order + ("%rdi","%esi","%rdx","%ecx"); # Unix order +my $out=$inp; +my $STRIDE=2**5*8; +my $N=$STRIDE/4; + +$code.=<<___; +.globl GFp_bn_scatter5 +.type GFp_bn_scatter5,\@abi-omnipotent +.align 16 +GFp_bn_scatter5: +.cfi_startproc + cmp \$0, $num + jz .Lscatter_epilogue + lea ($tbl,$idx,8),$tbl +.Lscatter: + mov ($inp),%rax + lea 8($inp),$inp + mov %rax,($tbl) + lea 32*8($tbl),$tbl + sub \$1,$num + jnz .Lscatter +.Lscatter_epilogue: + ret +.cfi_endproc +.size GFp_bn_scatter5,.-GFp_bn_scatter5 + +.globl GFp_bn_gather5 +.type GFp_bn_gather5,\@abi-omnipotent +.align 32 +GFp_bn_gather5: +.cfi_startproc +.LSEH_begin_GFp_bn_gather5: # Win64 thing, but harmless in other cases + # I can't trust assembler to use specific encoding:-( + .byte 0x4c,0x8d,0x14,0x24 #lea (%rsp),%r10 +.cfi_def_cfa_register %r10 + .byte 0x48,0x81,0xec,0x08,0x01,0x00,0x00 #sub $0x108,%rsp + lea .Linc(%rip),%rax + and \$-16,%rsp # shouldn't be formally required + + movd $idx,%xmm5 + movdqa 0(%rax),%xmm0 # 00000001000000010000000000000000 + movdqa 16(%rax),%xmm1 # 00000002000000020000000200000002 + lea 128($tbl),%r11 # size optimization + lea 128(%rsp),%rax # size optimization + + pshufd \$0,%xmm5,%xmm5 # broadcast $idx + movdqa %xmm1,%xmm4 + movdqa %xmm1,%xmm2 +___ +######################################################################## +# calculate mask by comparing 0..31 to $idx and save result to stack +# +for($i=0;$i<$STRIDE/16;$i+=4) { +$code.=<<___; + paddd %xmm0,%xmm1 + pcmpeqd %xmm5,%xmm0 # compare to 1,0 +___ +$code.=<<___ if ($i); + movdqa %xmm3,`16*($i-1)-128`(%rax) +___ +$code.=<<___; + movdqa %xmm4,%xmm3 + + paddd %xmm1,%xmm2 + pcmpeqd %xmm5,%xmm1 # compare to 3,2 + movdqa %xmm0,`16*($i+0)-128`(%rax) + movdqa %xmm4,%xmm0 + + paddd %xmm2,%xmm3 + pcmpeqd %xmm5,%xmm2 # compare to 5,4 + movdqa %xmm1,`16*($i+1)-128`(%rax) + movdqa %xmm4,%xmm1 + + paddd %xmm3,%xmm0 + pcmpeqd %xmm5,%xmm3 # compare to 7,6 + movdqa %xmm2,`16*($i+2)-128`(%rax) + movdqa %xmm4,%xmm2 +___ +} +$code.=<<___; + movdqa %xmm3,`16*($i-1)-128`(%rax) + jmp .Lgather + +.align 32 +.Lgather: + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 +___ +for($i=0;$i<$STRIDE/16;$i+=4) { +$code.=<<___; + movdqa `16*($i+0)-128`(%r11),%xmm0 + movdqa `16*($i+1)-128`(%r11),%xmm1 + movdqa `16*($i+2)-128`(%r11),%xmm2 + pand `16*($i+0)-128`(%rax),%xmm0 + movdqa `16*($i+3)-128`(%r11),%xmm3 + pand `16*($i+1)-128`(%rax),%xmm1 + por %xmm0,%xmm4 + pand `16*($i+2)-128`(%rax),%xmm2 + por %xmm1,%xmm5 + pand `16*($i+3)-128`(%rax),%xmm3 + por %xmm2,%xmm4 + por %xmm3,%xmm5 +___ +} +$code.=<<___; + por %xmm5,%xmm4 + lea $STRIDE(%r11),%r11 + pshufd \$0x4e,%xmm4,%xmm0 + por %xmm4,%xmm0 + movq %xmm0,($out) # m0=bp[0] + lea 8($out),$out + sub \$1,$num + jnz .Lgather + + lea (%r10),%rsp +.cfi_def_cfa_register %rsp + ret +.LSEH_end_GFp_bn_gather5: +.cfi_endproc +.size GFp_bn_gather5,.-GFp_bn_gather5 +___ +} +$code.=<<___; +.align 64 +.Linc: + .long 0,0, 1,1 + .long 2,2, 2,2 +.asciz "Montgomery Multiplication with scatter/gather for x86_64, CRYPTOGAMS by " +___ + +# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame, +# CONTEXT *context,DISPATCHER_CONTEXT *disp) +if ($win64) { +$rec="%rcx"; +$frame="%rdx"; +$context="%r8"; +$disp="%r9"; + +$code.=<<___; +.extern __imp_RtlVirtualUnwind +.type mul_handler,\@abi-omnipotent +.align 16 +mul_handler: + push %rsi + push %rdi + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + pushfq + sub \$64,%rsp + + mov 120($context),%rax # pull context->Rax + mov 248($context),%rbx # pull context->Rip + + mov 8($disp),%rsi # disp->ImageBase + mov 56($disp),%r11 # disp->HandlerData + + mov 0(%r11),%r10d # HandlerData[0] + lea (%rsi,%r10),%r10 # end of prologue label + cmp %r10,%rbx # context->RipRipRsp + + mov 8(%r11),%r10d # HandlerData[2] + lea (%rsi,%r10),%r10 # epilogue label + cmp %r10,%rbx # context->Rip>=epilogue label + jae .Lcommon_seh_tail + + lea .Lmul_epilogue(%rip),%r10 + cmp %r10,%rbx + ja .Lbody_40 + + mov 192($context),%r10 # pull $num + mov 8(%rax,%r10,8),%rax # pull saved stack pointer + + jmp .Lcommon_pop_regs + +.Lbody_40: + mov 40(%rax),%rax # pull saved stack pointer +.Lcommon_pop_regs: + mov -8(%rax),%rbx + mov -16(%rax),%rbp + mov -24(%rax),%r12 + mov -32(%rax),%r13 + mov -40(%rax),%r14 + mov -48(%rax),%r15 + mov %rbx,144($context) # restore context->Rbx + mov %rbp,160($context) # restore context->Rbp + mov %r12,216($context) # restore context->R12 + mov %r13,224($context) # restore context->R13 + mov %r14,232($context) # restore context->R14 + mov %r15,240($context) # restore context->R15 + +.Lcommon_seh_tail: + mov 8(%rax),%rdi + mov 16(%rax),%rsi + mov %rax,152($context) # restore context->Rsp + mov %rsi,168($context) # restore context->Rsi + mov %rdi,176($context) # restore context->Rdi + + mov 40($disp),%rdi # disp->ContextRecord + mov $context,%rsi # context + mov \$154,%ecx # sizeof(CONTEXT) + .long 0xa548f3fc # cld; rep movsq + + mov $disp,%rsi + xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER + mov 8(%rsi),%rdx # arg2, disp->ImageBase + mov 0(%rsi),%r8 # arg3, disp->ControlPc + mov 16(%rsi),%r9 # arg4, disp->FunctionEntry + mov 40(%rsi),%r10 # disp->ContextRecord + lea 56(%rsi),%r11 # &disp->HandlerData + lea 24(%rsi),%r12 # &disp->EstablisherFrame + mov %r10,32(%rsp) # arg5 + mov %r11,40(%rsp) # arg6 + mov %r12,48(%rsp) # arg7 + mov %rcx,56(%rsp) # arg8, (NULL) + call *__imp_RtlVirtualUnwind(%rip) + + mov \$1,%eax # ExceptionContinueSearch + add \$64,%rsp + popfq + pop %r15 + pop %r14 + pop %r13 + pop %r12 + pop %rbp + pop %rbx + pop %rdi + pop %rsi + ret +.size mul_handler,.-mul_handler + +.section .pdata +.align 4 + .rva .LSEH_begin_GFp_bn_mul_mont_gather5 + .rva .LSEH_end_GFp_bn_mul_mont_gather5 + .rva .LSEH_info_GFp_bn_mul_mont_gather5 + + .rva .LSEH_begin_bn_mul4x_mont_gather5 + .rva .LSEH_end_bn_mul4x_mont_gather5 + .rva .LSEH_info_bn_mul4x_mont_gather5 + + .rva .LSEH_begin_GFp_bn_power5 + .rva .LSEH_end_GFp_bn_power5 + .rva .LSEH_info_GFp_bn_power5 + + .rva .LSEH_begin_bn_from_mont8x + .rva .LSEH_end_bn_from_mont8x + .rva .LSEH_info_bn_from_mont8x +___ +$code.=<<___ if ($addx); + .rva .LSEH_begin_bn_mulx4x_mont_gather5 + .rva .LSEH_end_bn_mulx4x_mont_gather5 + .rva .LSEH_info_bn_mulx4x_mont_gather5 + + .rva .LSEH_begin_bn_powerx5 + .rva .LSEH_end_bn_powerx5 + .rva .LSEH_info_GFp_bn_powerx5 +___ +$code.=<<___; + .rva .LSEH_begin_GFp_bn_gather5 + .rva .LSEH_end_GFp_bn_gather5 + .rva .LSEH_info_GFp_bn_gather5 + +.section .xdata +.align 8 +.LSEH_info_GFp_bn_mul_mont_gather5: + .byte 9,0,0,0 + .rva mul_handler + .rva .Lmul_body,.Lmul_body,.Lmul_epilogue # HandlerData[] +.align 8 +.LSEH_info_bn_mul4x_mont_gather5: + .byte 9,0,0,0 + .rva mul_handler + .rva .Lmul4x_prologue,.Lmul4x_body,.Lmul4x_epilogue # HandlerData[] +.align 8 +.LSEH_info_GFp_bn_power5: + .byte 9,0,0,0 + .rva mul_handler + .rva .Lpower5_prologue,.Lpower5_body,.Lpower5_epilogue # HandlerData[] +.align 8 +.LSEH_info_bn_from_mont8x: + .byte 9,0,0,0 + .rva mul_handler + .rva .Lfrom_prologue,.Lfrom_body,.Lfrom_epilogue # HandlerData[] +___ +$code.=<<___ if ($addx); +.align 8 +.LSEH_info_bn_mulx4x_mont_gather5: + .byte 9,0,0,0 + .rva mul_handler + .rva .Lmulx4x_prologue,.Lmulx4x_body,.Lmulx4x_epilogue # HandlerData[] +.align 8 +.LSEH_info_GFp_bn_powerx5: + .byte 9,0,0,0 + .rva mul_handler + .rva .Lpowerx5_prologue,.Lpowerx5_body,.Lpowerx5_epilogue # HandlerData[] +___ +$code.=<<___; +.align 8 +.LSEH_info_GFp_bn_gather5: + .byte 0x01,0x0b,0x03,0x0a + .byte 0x0b,0x01,0x21,0x00 # sub rsp,0x108 + .byte 0x04,0xa3,0x00,0x00 # lea r10,(rsp) +.align 8 +___ +} + +$code =~ s/\`([^\`]*)\`/eval($1)/gem; + +print $code; +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/fipsmodule/bn/internal.h b/vendor/ring/crypto/fipsmodule/bn/internal.h new file mode 100644 index 00000000..044e4e86 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/bn/internal.h @@ -0,0 +1,197 @@ +/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +/* ==================================================================== + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * + * Portions of the attached software ("Contribution") are developed by + * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. + * + * The Contribution is licensed pursuant to the Eric Young open source + * license provided above. + * + * The binary polynomial arithmetic software is originally written by + * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems + * Laboratories. */ + +#ifndef OPENSSL_HEADER_BN_INTERNAL_H +#define OPENSSL_HEADER_BN_INTERNAL_H + +#include + +#if defined(OPENSSL_X86_64) && defined(_MSC_VER) && !defined(__clang__) +#pragma warning(push, 3) +#include +#pragma warning(pop) +#pragma intrinsic(_umul128) +#endif + +#include "../../internal.h" + +typedef crypto_word BN_ULONG; + +#if defined(OPENSSL_64_BIT) + +#if defined(BORINGSSL_HAS_UINT128) +// MSVC doesn't support two-word integers on 64-bit. +#define BN_ULLONG uint128_t +#endif + +#define BN_BITS2 64 +#define BN_MONT_CTX_N0_LIMBS 1 +#define BN_MONT_CTX_N0(hi, lo) TOBN(hi, lo), 0 +#define TOBN(hi, lo) ((BN_ULONG)(hi) << 32 | (lo)) + +#elif defined(OPENSSL_32_BIT) + +#define BN_ULLONG uint64_t +#define BN_BITS2 32 +// On some 32-bit platforms, Montgomery multiplication is done using 64-bit +// arithmetic with SIMD instructions. On such platforms, |BN_MONT_CTX::n0| +// needs to be two words long. Only certain 32-bit platforms actually make use +// of n0[1] and shorter R value would suffice for the others. However, +// currently only the assembly files know which is which. +#define BN_MONT_CTX_N0_LIMBS 2 +#define BN_MONT_CTX_N0(hi, lo) TOBN(hi, lo) +#define TOBN(hi, lo) (lo), (hi) + +#else +#error "Must define either OPENSSL_32_BIT or OPENSSL_64_BIT" +#endif + + +// |num| must be at least 4, at least on x86. +// +// In other forks, |bn_mul_mont| returns an |int| indicating whether it +// actually did the multiplication. All our implementations always do the +// multiplication, and forcing callers to deal with the possibility of it +// failing just leads to further problems. +// +// In other forks, |bn_mod_mul|'s `num` argument has type |int| but it is +// implicitly treated as a |size_t|; when |int| is smaller than |size_t| +// then the |movq 48(%rsp),%r9| done by x86_64-xlate.pl implicitly does the +// conversion. +OPENSSL_STATIC_ASSERT(sizeof(int) == sizeof(size_t) || + (sizeof(int) == 4 && sizeof(size_t) == 8), + "int and size_t ABI mismatch"); +void GFp_bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, + const BN_ULONG *np, const BN_ULONG *n0, size_t num); + +static inline void bn_umult_lohi(BN_ULONG *low_out, BN_ULONG *high_out, + BN_ULONG a, BN_ULONG b) { +#if defined(OPENSSL_X86_64) && defined(_MSC_VER) && !defined(__clang__) + *low_out = _umul128(a, b, high_out); +#else + BN_ULLONG result = (BN_ULLONG)a * b; + *low_out = (BN_ULONG)result; + *high_out = (BN_ULONG)(result >> BN_BITS2); +#endif +} + +#endif // OPENSSL_HEADER_BN_INTERNAL_H diff --git a/vendor/ring/crypto/fipsmodule/bn/montgomery.c b/vendor/ring/crypto/fipsmodule/bn/montgomery.c new file mode 100644 index 00000000..e13379ea --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/bn/montgomery.c @@ -0,0 +1,158 @@ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). */ + +#include "internal.h" +#include "../../internal.h" + +#include "../../limbs/limbs.h" +#include "../../limbs/limbs.inl" + +OPENSSL_STATIC_ASSERT(BN_MONT_CTX_N0_LIMBS == 1 || BN_MONT_CTX_N0_LIMBS == 2, + "BN_MONT_CTX_N0_LIMBS value is invalid"); +OPENSSL_STATIC_ASSERT( + sizeof(BN_ULONG) * BN_MONT_CTX_N0_LIMBS == sizeof(uint64_t), + "uint64_t is insufficient precision for n0"); + +int GFp_bn_from_montgomery_in_place(BN_ULONG r[], size_t num_r, BN_ULONG a[], + size_t num_a, const BN_ULONG n[], + size_t num_n, + const BN_ULONG n0_[BN_MONT_CTX_N0_LIMBS]) { + if (num_n == 0 || num_r != num_n || num_a != 2 * num_n) { + return 0; + } + + // Add multiples of |n| to |r| until R = 2^(nl * BN_BITS2) divides it. On + // input, we had |r| < |n| * R, so now |r| < 2 * |n| * R. Note that |r| + // includes |carry| which is stored separately. + BN_ULONG n0 = n0_[0]; + BN_ULONG carry = 0; + for (size_t i = 0; i < num_n; i++) { + BN_ULONG v = GFp_limbs_mul_add_limb(a + i, n, a[i] * n0, num_n); + v += carry + a[i + num_n]; + carry |= (v != a[i + num_n]); + carry &= (v <= a[i + num_n]); + a[i + num_n] = v; + } + + // Shift |num_n| words to divide by R. We have |a| < 2 * |n|. Note that |a| + // includes |carry| which is stored separately. + a += num_n; + + // |a| thus requires at most one additional subtraction |n| to be reduced. + // Subtract |n| and select the answer in constant time. + BN_ULONG v = limbs_sub(r, a, n, num_n) - carry; + // |v| is one if |a| - |n| underflowed or zero if it did not. Note |v| cannot + // be -1. That would imply the subtraction did not fit in |num_n| words, and + // we know at most one subtraction is needed. + v = 0u - v; + for (size_t i = 0; i < num_n; i++) { + r[i] = constant_time_select_w(v, a[i], r[i]); + a[i] = 0; + } + return 1; +} diff --git a/vendor/ring/crypto/fipsmodule/bn/montgomery_inv.c b/vendor/ring/crypto/fipsmodule/bn/montgomery_inv.c new file mode 100644 index 00000000..f32848f3 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/bn/montgomery_inv.c @@ -0,0 +1,105 @@ +/* Copyright 2016 Brian Smith. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +#include "internal.h" +#include "../../internal.h" + + +OPENSSL_STATIC_ASSERT(BN_MONT_CTX_N0_LIMBS == 1 || BN_MONT_CTX_N0_LIMBS == 2, + "BN_MONT_CTX_N0_LIMBS value is invalid"); +OPENSSL_STATIC_ASSERT(sizeof(BN_ULONG) * BN_MONT_CTX_N0_LIMBS == sizeof(uint64_t), + "uint64_t is insufficient precision for n0"); + +// LG_LITTLE_R is log_2(r). +#define LG_LITTLE_R (BN_MONT_CTX_N0_LIMBS * BN_BITS2) + +// bn_neg_inv_r_mod_n_u64 calculates the -1/n mod r; i.e. it calculates |v| +// such that u*r - v*n == 1. |r| is the constant defined in |bn_mont_n0|. |n| +// must be odd. +// +// This is derived from |xbinGCD| in Henry S. Warren, Jr.'s "Montgomery +// Multiplication" (http://www.hackersdelight.org/MontgomeryMultiplication.pdf). +// It is very similar to the MODULAR-INVERSE function in Stephen R. Dussé's and +// Burton S. Kaliski Jr.'s "A Cryptographic Library for the Motorola DSP56000" +// (http://link.springer.com/chapter/10.1007%2F3-540-46877-3_21). +// +// This is inspired by Joppe W. Bos's "Constant Time Modular Inversion" +// (http://www.joppebos.com/files/CTInversion.pdf) so that the inversion is +// constant-time with respect to |n|. We assume uint64_t additions, +// subtractions, shifts, and bitwise operations are all constant time, which +// may be a large leap of faith on 32-bit targets. We avoid division and +// multiplication, which tend to be the most problematic in terms of timing +// leaks. +// +// Most GCD implementations return values such that |u*r + v*n == 1|, so the +// caller would have to negate the resultant |v| for the purpose of Montgomery +// multiplication. This implementation does the negation implicitly by doing +// the computations as a difference instead of a sum. +uint64_t GFp_bn_neg_inv_mod_r_u64(uint64_t n) { + dev_assert_secret(n % 2 == 1); + + // alpha == 2**(lg r - 1) == r / 2. + static const uint64_t alpha = UINT64_C(1) << (LG_LITTLE_R - 1); + + const uint64_t beta = n; + + uint64_t u = 1; + uint64_t v = 0; + + // The invariant maintained from here on is: + // 2**(lg r - i) == u*2*alpha - v*beta. + for (size_t i = 0; i < LG_LITTLE_R; ++i) { +#if BN_BITS2 == 64 && defined(BN_ULLONG) + dev_assert_secret((BN_ULLONG)(1) << (LG_LITTLE_R - i) == + ((BN_ULLONG)u * 2 * alpha) - ((BN_ULLONG)v * beta)); +#endif + + // Delete a common factor of 2 in u and v if |u| is even. Otherwise, set + // |u = (u + beta) / 2| and |v = (v / 2) + alpha|. + + uint64_t u_is_odd = UINT64_C(0) - (u & 1); // Either 0xff..ff or 0. + + // The addition can overflow, so use Dietz's method for it. + // + // Dietz calculates (x+y)/2 by (x xor y)>>1 + x&y. This is valid for all + // (unsigned) x and y, even when x+y overflows. Evidence for 32-bit values + // (embedded in 64 bits to so that overflow can be ignored): + // + // (declare-fun x () (_ BitVec 64)) + // (declare-fun y () (_ BitVec 64)) + // (assert (let ( + // (one (_ bv1 64)) + // (thirtyTwo (_ bv32 64))) + // (and + // (bvult x (bvshl one thirtyTwo)) + // (bvult y (bvshl one thirtyTwo)) + // (not (= + // (bvadd (bvlshr (bvxor x y) one) (bvand x y)) + // (bvlshr (bvadd x y) one))) + // ))) + // (check-sat) + uint64_t beta_if_u_is_odd = beta & u_is_odd; // Either |beta| or 0. + u = ((u ^ beta_if_u_is_odd) >> 1) + (u & beta_if_u_is_odd); + + uint64_t alpha_if_u_is_odd = alpha & u_is_odd; /* Either |alpha| or 0. */ + v = (v >> 1) + alpha_if_u_is_odd; + } + + // The invariant now shows that u*r - v*n == 1 since r == 2 * alpha. +#if BN_BITS2 == 64 && defined(BN_ULLONG) + dev_assert_secret(1 == ((BN_ULLONG)u * 2 * alpha) - ((BN_ULLONG)v * beta)); +#endif + + return v; +} diff --git a/vendor/ring/crypto/fipsmodule/ec/.gitattributes b/vendor/ring/crypto/fipsmodule/ec/.gitattributes new file mode 100644 index 00000000..6829818b --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/ec/.gitattributes @@ -0,0 +1,2 @@ +p256-x86_64-table.h linguist-generated=true +p256_table.h linguist-generated=true diff --git a/vendor/ring/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl b/vendor/ring/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl new file mode 100755 index 00000000..454f93bc --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl @@ -0,0 +1,4145 @@ +#! /usr/bin/env perl +# Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +# Copyright (c) 2014, Intel Corporation. All Rights Reserved. +# Copyright (c) 2015 CloudFlare, Inc. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html +# +# Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1, 3) +# (1) Intel Corporation, Israel Development Center, Haifa, Israel +# (2) University of Haifa, Israel +# (3) CloudFlare, Inc. +# +# Reference: +# S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with +# 256 Bit Primes" + +# Further optimization by : +# +# this/original with/without -DECP_NISTZ256_ASM(*) +# Opteron +15-49% +150-195% +# Bulldozer +18-45% +175-240% +# P4 +24-46% +100-150% +# Westmere +18-34% +87-160% +# Sandy Bridge +14-35% +120-185% +# Ivy Bridge +11-35% +125-180% +# Haswell +10-37% +160-200% +# Broadwell +24-58% +210-270% +# Atom +20-50% +180-240% +# VIA Nano +50-160% +480-480% +# +# (*) "without -DECP_NISTZ256_ASM" refers to build with +# "enable-ec_nistp_64_gcc_128"; +# +# Ranges denote minimum and maximum improvement coefficients depending +# on benchmark. In "this/original" column lower coefficient is for +# ECDSA sign, while in "with/without" - for ECDH key agreement, and +# higher - for ECDSA sign, relatively fastest server-side operation. +# Keep in mind that +100% means 2x improvement. + +$flavour = shift; +$output = shift; +if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } + +$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/); + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../../perlasm/x86_64-xlate.pl" and -f $xlate) or +die "can't locate x86_64-xlate.pl"; + +open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""; +*STDOUT=*OUT; + +$avx = 2; +$addx = 1; + +$code.=<<___; +.text +.extern GFp_ia32cap_P + +# The polynomial +.align 64 +.Lpoly: +.quad 0xffffffffffffffff, 0x00000000ffffffff, 0x0000000000000000, 0xffffffff00000001 + +.LOne: +.long 1,1,1,1,1,1,1,1 +.LTwo: +.long 2,2,2,2,2,2,2,2 +.LThree: +.long 3,3,3,3,3,3,3,3 +.LONE_mont: +.quad 0x0000000000000001, 0xffffffff00000000, 0xffffffffffffffff, 0x00000000fffffffe + +# Constants for computations modulo ord(p256) +.Lord: +.quad 0xf3b9cac2fc632551, 0xbce6faada7179e84, 0xffffffffffffffff, 0xffffffff00000000 +.LordK: +.quad 0xccd1c8aaee00bc4f +___ + +{ +my ($a0,$a1,$a2,$a3)=map("%r$_",(8..11)); +my ($t0,$t1,$t2,$t3,$t4)=("%rax","%rdx","%rcx","%r12","%r13"); +my ($r_ptr,$a_ptr,$b_ptr)=("%rdi","%rsi","%rdx"); + +$code.=<<___; + +################################################################################ +# void GFp_nistz256_neg(uint64_t res[4], uint64_t a[4]); +.globl GFp_nistz256_neg +.type GFp_nistz256_neg,\@function,2 +.align 32 +GFp_nistz256_neg: +.cfi_startproc + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 +.Lneg_body: + + xor $a0, $a0 + xor $a1, $a1 + xor $a2, $a2 + xor $a3, $a3 + xor $t4, $t4 + + sub 8*0($a_ptr), $a0 + sbb 8*1($a_ptr), $a1 + sbb 8*2($a_ptr), $a2 + mov $a0, $t0 + sbb 8*3($a_ptr), $a3 + lea .Lpoly(%rip), $a_ptr + mov $a1, $t1 + sbb \$0, $t4 + + add 8*0($a_ptr), $a0 + mov $a2, $t2 + adc 8*1($a_ptr), $a1 + adc 8*2($a_ptr), $a2 + mov $a3, $t3 + adc 8*3($a_ptr), $a3 + test $t4, $t4 + + cmovz $t0, $a0 + cmovz $t1, $a1 + mov $a0, 8*0($r_ptr) + cmovz $t2, $a2 + mov $a1, 8*1($r_ptr) + cmovz $t3, $a3 + mov $a2, 8*2($r_ptr) + mov $a3, 8*3($r_ptr) + + mov 0(%rsp),%r13 +.cfi_restore %r13 + mov 8(%rsp),%r12 +.cfi_restore %r12 + lea 16(%rsp),%rsp +.cfi_adjust_cfa_offset -16 +.Lneg_epilogue: + ret +.cfi_endproc +.size GFp_nistz256_neg,.-GFp_nistz256_neg +___ +} +{ +my ($r_ptr,$a_ptr,$b_org,$b_ptr)=("%rdi","%rsi","%rdx","%rbx"); +my ($acc0,$acc1,$acc2,$acc3,$acc4,$acc5,$acc6,$acc7)=map("%r$_",(8..15)); +my ($t0,$t1,$t2,$t3,$t4)=("%rcx","%rbp","%rbx","%rdx","%rax"); +my ($poly1,$poly3)=($acc6,$acc7); + +$code.=<<___; +################################################################################ +# void GFp_p256_scalar_mul_mont( +# uint64_t res[4], +# uint64_t a[4], +# uint64_t b[4]); + +.globl GFp_p256_scalar_mul_mont +.type GFp_p256_scalar_mul_mont,\@function,3 +.align 32 +GFp_p256_scalar_mul_mont: +.cfi_startproc +___ +$code.=<<___ if ($addx); + leaq GFp_ia32cap_P(%rip), %rcx + mov 8(%rcx), %rcx + and \$0x80100, %ecx + cmp \$0x80100, %ecx + je .Lecp_nistz256_ord_mul_montx +___ +$code.=<<___; + push %rbp +.cfi_push %rbp + push %rbx +.cfi_push %rbx + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +.Lord_mul_body: + + mov 8*0($b_org), %rax + mov $b_org, $b_ptr + lea .Lord(%rip), %r14 + mov .LordK(%rip), %r15 + + ################################# * b[0] + mov %rax, $t0 + mulq 8*0($a_ptr) + mov %rax, $acc0 + mov $t0, %rax + mov %rdx, $acc1 + + mulq 8*1($a_ptr) + add %rax, $acc1 + mov $t0, %rax + adc \$0, %rdx + mov %rdx, $acc2 + + mulq 8*2($a_ptr) + add %rax, $acc2 + mov $t0, %rax + adc \$0, %rdx + + mov $acc0, $acc5 + imulq %r15,$acc0 + + mov %rdx, $acc3 + mulq 8*3($a_ptr) + add %rax, $acc3 + mov $acc0, %rax + adc \$0, %rdx + mov %rdx, $acc4 + + ################################# First reduction step + mulq 8*0(%r14) + mov $acc0, $t1 + add %rax, $acc5 # guaranteed to be zero + mov $acc0, %rax + adc \$0, %rdx + mov %rdx, $t0 + + sub $acc0, $acc2 + sbb \$0, $acc0 # can't borrow + + mulq 8*1(%r14) + add $t0, $acc1 + adc \$0, %rdx + add %rax, $acc1 + mov $t1, %rax + adc %rdx, $acc2 + mov $t1, %rdx + adc \$0, $acc0 # can't overflow + + shl \$32, %rax + shr \$32, %rdx + sub %rax, $acc3 + mov 8*1($b_ptr), %rax + sbb %rdx, $t1 # can't borrow + + add $acc0, $acc3 + adc $t1, $acc4 + adc \$0, $acc5 + + ################################# * b[1] + mov %rax, $t0 + mulq 8*0($a_ptr) + add %rax, $acc1 + mov $t0, %rax + adc \$0, %rdx + mov %rdx, $t1 + + mulq 8*1($a_ptr) + add $t1, $acc2 + adc \$0, %rdx + add %rax, $acc2 + mov $t0, %rax + adc \$0, %rdx + mov %rdx, $t1 + + mulq 8*2($a_ptr) + add $t1, $acc3 + adc \$0, %rdx + add %rax, $acc3 + mov $t0, %rax + adc \$0, %rdx + + mov $acc1, $t0 + imulq %r15, $acc1 + + mov %rdx, $t1 + mulq 8*3($a_ptr) + add $t1, $acc4 + adc \$0, %rdx + xor $acc0, $acc0 + add %rax, $acc4 + mov $acc1, %rax + adc %rdx, $acc5 + adc \$0, $acc0 + + ################################# Second reduction step + mulq 8*0(%r14) + mov $acc1, $t1 + add %rax, $t0 # guaranteed to be zero + mov $acc1, %rax + adc %rdx, $t0 + + sub $acc1, $acc3 + sbb \$0, $acc1 # can't borrow + + mulq 8*1(%r14) + add $t0, $acc2 + adc \$0, %rdx + add %rax, $acc2 + mov $t1, %rax + adc %rdx, $acc3 + mov $t1, %rdx + adc \$0, $acc1 # can't overflow + + shl \$32, %rax + shr \$32, %rdx + sub %rax, $acc4 + mov 8*2($b_ptr), %rax + sbb %rdx, $t1 # can't borrow + + add $acc1, $acc4 + adc $t1, $acc5 + adc \$0, $acc0 + + ################################## * b[2] + mov %rax, $t0 + mulq 8*0($a_ptr) + add %rax, $acc2 + mov $t0, %rax + adc \$0, %rdx + mov %rdx, $t1 + + mulq 8*1($a_ptr) + add $t1, $acc3 + adc \$0, %rdx + add %rax, $acc3 + mov $t0, %rax + adc \$0, %rdx + mov %rdx, $t1 + + mulq 8*2($a_ptr) + add $t1, $acc4 + adc \$0, %rdx + add %rax, $acc4 + mov $t0, %rax + adc \$0, %rdx + + mov $acc2, $t0 + imulq %r15, $acc2 + + mov %rdx, $t1 + mulq 8*3($a_ptr) + add $t1, $acc5 + adc \$0, %rdx + xor $acc1, $acc1 + add %rax, $acc5 + mov $acc2, %rax + adc %rdx, $acc0 + adc \$0, $acc1 + + ################################# Third reduction step + mulq 8*0(%r14) + mov $acc2, $t1 + add %rax, $t0 # guaranteed to be zero + mov $acc2, %rax + adc %rdx, $t0 + + sub $acc2, $acc4 + sbb \$0, $acc2 # can't borrow + + mulq 8*1(%r14) + add $t0, $acc3 + adc \$0, %rdx + add %rax, $acc3 + mov $t1, %rax + adc %rdx, $acc4 + mov $t1, %rdx + adc \$0, $acc2 # can't overflow + + shl \$32, %rax + shr \$32, %rdx + sub %rax, $acc5 + mov 8*3($b_ptr), %rax + sbb %rdx, $t1 # can't borrow + + add $acc2, $acc5 + adc $t1, $acc0 + adc \$0, $acc1 + + ################################# * b[3] + mov %rax, $t0 + mulq 8*0($a_ptr) + add %rax, $acc3 + mov $t0, %rax + adc \$0, %rdx + mov %rdx, $t1 + + mulq 8*1($a_ptr) + add $t1, $acc4 + adc \$0, %rdx + add %rax, $acc4 + mov $t0, %rax + adc \$0, %rdx + mov %rdx, $t1 + + mulq 8*2($a_ptr) + add $t1, $acc5 + adc \$0, %rdx + add %rax, $acc5 + mov $t0, %rax + adc \$0, %rdx + + mov $acc3, $t0 + imulq %r15, $acc3 + + mov %rdx, $t1 + mulq 8*3($a_ptr) + add $t1, $acc0 + adc \$0, %rdx + xor $acc2, $acc2 + add %rax, $acc0 + mov $acc3, %rax + adc %rdx, $acc1 + adc \$0, $acc2 + + ################################# Last reduction step + mulq 8*0(%r14) + mov $acc3, $t1 + add %rax, $t0 # guaranteed to be zero + mov $acc3, %rax + adc %rdx, $t0 + + sub $acc3, $acc5 + sbb \$0, $acc3 # can't borrow + + mulq 8*1(%r14) + add $t0, $acc4 + adc \$0, %rdx + add %rax, $acc4 + mov $t1, %rax + adc %rdx, $acc5 + mov $t1, %rdx + adc \$0, $acc3 # can't overflow + + shl \$32, %rax + shr \$32, %rdx + sub %rax, $acc0 + sbb %rdx, $t1 # can't borrow + + add $acc3, $acc0 + adc $t1, $acc1 + adc \$0, $acc2 + + ################################# Subtract ord + mov $acc4, $a_ptr + sub 8*0(%r14), $acc4 + mov $acc5, $acc3 + sbb 8*1(%r14), $acc5 + mov $acc0, $t0 + sbb 8*2(%r14), $acc0 + mov $acc1, $t1 + sbb 8*3(%r14), $acc1 + sbb \$0, $acc2 + + cmovc $a_ptr, $acc4 + cmovc $acc3, $acc5 + cmovc $t0, $acc0 + cmovc $t1, $acc1 + + mov $acc4, 8*0($r_ptr) + mov $acc5, 8*1($r_ptr) + mov $acc0, 8*2($r_ptr) + mov $acc1, 8*3($r_ptr) + + mov 0(%rsp),%r15 +.cfi_restore %r15 + mov 8(%rsp),%r14 +.cfi_restore %r14 + mov 16(%rsp),%r13 +.cfi_restore %r13 + mov 24(%rsp),%r12 +.cfi_restore %r12 + mov 32(%rsp),%rbx +.cfi_restore %rbx + mov 40(%rsp),%rbp +.cfi_restore %rbp + lea 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 +.Lord_mul_epilogue: + ret +.cfi_endproc +.size GFp_p256_scalar_mul_mont,.-GFp_p256_scalar_mul_mont + +################################################################################ +# void GFp_p256_scalar_sqr_rep_mont( +# uint64_t res[4], +# uint64_t a[4], +# uint64_t rep); + +.globl GFp_p256_scalar_sqr_rep_mont +.type GFp_p256_scalar_sqr_rep_mont,\@function,3 +.align 32 +GFp_p256_scalar_sqr_rep_mont: +.cfi_startproc +___ +$code.=<<___ if ($addx); + leaq GFp_ia32cap_P(%rip), %rcx + mov 8(%rcx), %rcx + and \$0x80100, %ecx + cmp \$0x80100, %ecx + je .Lecp_nistz256_ord_sqr_montx +___ +$code.=<<___; + push %rbp +.cfi_push %rbp + push %rbx +.cfi_push %rbx + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +.Lord_sqr_body: + + mov 8*0($a_ptr), $acc0 + mov 8*1($a_ptr), %rax + mov 8*2($a_ptr), $acc6 + mov 8*3($a_ptr), $acc7 + lea .Lord(%rip), $a_ptr # pointer to modulus + mov $b_org, $b_ptr + jmp .Loop_ord_sqr + +.align 32 +.Loop_ord_sqr: + ################################# a[1:] * a[0] + mov %rax, $t1 # put aside a[1] + mul $acc0 # a[1] * a[0] + mov %rax, $acc1 + movq $t1, %xmm1 # offload a[1] + mov $acc6, %rax + mov %rdx, $acc2 + + mul $acc0 # a[2] * a[0] + add %rax, $acc2 + mov $acc7, %rax + movq $acc6, %xmm2 # offload a[2] + adc \$0, %rdx + mov %rdx, $acc3 + + mul $acc0 # a[3] * a[0] + add %rax, $acc3 + mov $acc7, %rax + movq $acc7, %xmm3 # offload a[3] + adc \$0, %rdx + mov %rdx, $acc4 + + ################################# a[3] * a[2] + mul $acc6 # a[3] * a[2] + mov %rax, $acc5 + mov $acc6, %rax + mov %rdx, $acc6 + + ################################# a[2:] * a[1] + mul $t1 # a[2] * a[1] + add %rax, $acc3 + mov $acc7, %rax + adc \$0, %rdx + mov %rdx, $acc7 + + mul $t1 # a[3] * a[1] + add %rax, $acc4 + adc \$0, %rdx + + add $acc7, $acc4 + adc %rdx, $acc5 + adc \$0, $acc6 # can't overflow + + ################################# *2 + xor $acc7, $acc7 + mov $acc0, %rax + add $acc1, $acc1 + adc $acc2, $acc2 + adc $acc3, $acc3 + adc $acc4, $acc4 + adc $acc5, $acc5 + adc $acc6, $acc6 + adc \$0, $acc7 + + ################################# Missing products + mul %rax # a[0] * a[0] + mov %rax, $acc0 + movq %xmm1, %rax + mov %rdx, $t1 + + mul %rax # a[1] * a[1] + add $t1, $acc1 + adc %rax, $acc2 + movq %xmm2, %rax + adc \$0, %rdx + mov %rdx, $t1 + + mul %rax # a[2] * a[2] + add $t1, $acc3 + adc %rax, $acc4 + movq %xmm3, %rax + adc \$0, %rdx + mov %rdx, $t1 + + mov $acc0, $t0 + imulq 8*4($a_ptr), $acc0 # *= .LordK + + mul %rax # a[3] * a[3] + add $t1, $acc5 + adc %rax, $acc6 + mov 8*0($a_ptr), %rax # modulus[0] + adc %rdx, $acc7 # can't overflow + + ################################# First reduction step + mul $acc0 + mov $acc0, $t1 + add %rax, $t0 # guaranteed to be zero + mov 8*1($a_ptr), %rax # modulus[1] + adc %rdx, $t0 + + sub $acc0, $acc2 + sbb \$0, $t1 # can't borrow + + mul $acc0 + add $t0, $acc1 + adc \$0, %rdx + add %rax, $acc1 + mov $acc0, %rax + adc %rdx, $acc2 + mov $acc0, %rdx + adc \$0, $t1 # can't overflow + + mov $acc1, $t0 + imulq 8*4($a_ptr), $acc1 # *= .LordK + + shl \$32, %rax + shr \$32, %rdx + sub %rax, $acc3 + mov 8*0($a_ptr), %rax + sbb %rdx, $acc0 # can't borrow + + add $t1, $acc3 + adc \$0, $acc0 # can't overflow + + ################################# Second reduction step + mul $acc1 + mov $acc1, $t1 + add %rax, $t0 # guaranteed to be zero + mov 8*1($a_ptr), %rax + adc %rdx, $t0 + + sub $acc1, $acc3 + sbb \$0, $t1 # can't borrow + + mul $acc1 + add $t0, $acc2 + adc \$0, %rdx + add %rax, $acc2 + mov $acc1, %rax + adc %rdx, $acc3 + mov $acc1, %rdx + adc \$0, $t1 # can't overflow + + mov $acc2, $t0 + imulq 8*4($a_ptr), $acc2 # *= .LordK + + shl \$32, %rax + shr \$32, %rdx + sub %rax, $acc0 + mov 8*0($a_ptr), %rax + sbb %rdx, $acc1 # can't borrow + + add $t1, $acc0 + adc \$0, $acc1 # can't overflow + + ################################# Third reduction step + mul $acc2 + mov $acc2, $t1 + add %rax, $t0 # guaranteed to be zero + mov 8*1($a_ptr), %rax + adc %rdx, $t0 + + sub $acc2, $acc0 + sbb \$0, $t1 # can't borrow + + mul $acc2 + add $t0, $acc3 + adc \$0, %rdx + add %rax, $acc3 + mov $acc2, %rax + adc %rdx, $acc0 + mov $acc2, %rdx + adc \$0, $t1 # can't overflow + + mov $acc3, $t0 + imulq 8*4($a_ptr), $acc3 # *= .LordK + + shl \$32, %rax + shr \$32, %rdx + sub %rax, $acc1 + mov 8*0($a_ptr), %rax + sbb %rdx, $acc2 # can't borrow + + add $t1, $acc1 + adc \$0, $acc2 # can't overflow + + ################################# Last reduction step + mul $acc3 + mov $acc3, $t1 + add %rax, $t0 # guaranteed to be zero + mov 8*1($a_ptr), %rax + adc %rdx, $t0 + + sub $acc3, $acc1 + sbb \$0, $t1 # can't borrow + + mul $acc3 + add $t0, $acc0 + adc \$0, %rdx + add %rax, $acc0 + mov $acc3, %rax + adc %rdx, $acc1 + mov $acc3, %rdx + adc \$0, $t1 # can't overflow + + shl \$32, %rax + shr \$32, %rdx + sub %rax, $acc2 + sbb %rdx, $acc3 # can't borrow + + add $t1, $acc2 + adc \$0, $acc3 # can't overflow + + ################################# Add bits [511:256] of the sqr result + xor %rdx, %rdx + add $acc4, $acc0 + adc $acc5, $acc1 + mov $acc0, $acc4 + adc $acc6, $acc2 + adc $acc7, $acc3 + mov $acc1, %rax + adc \$0, %rdx + + ################################# Compare to modulus + sub 8*0($a_ptr), $acc0 + mov $acc2, $acc6 + sbb 8*1($a_ptr), $acc1 + sbb 8*2($a_ptr), $acc2 + mov $acc3, $acc7 + sbb 8*3($a_ptr), $acc3 + sbb \$0, %rdx + + cmovc $acc4, $acc0 + cmovnc $acc1, %rax + cmovnc $acc2, $acc6 + cmovnc $acc3, $acc7 + + dec $b_ptr + jnz .Loop_ord_sqr + + mov $acc0, 8*0($r_ptr) + mov %rax, 8*1($r_ptr) + pxor %xmm1, %xmm1 + mov $acc6, 8*2($r_ptr) + pxor %xmm2, %xmm2 + mov $acc7, 8*3($r_ptr) + pxor %xmm3, %xmm3 + + mov 0(%rsp),%r15 +.cfi_restore %r15 + mov 8(%rsp),%r14 +.cfi_restore %r14 + mov 16(%rsp),%r13 +.cfi_restore %r13 + mov 24(%rsp),%r12 +.cfi_restore %r12 + mov 32(%rsp),%rbx +.cfi_restore %rbx + mov 40(%rsp),%rbp +.cfi_restore %rbp + lea 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 +.Lord_sqr_epilogue: + ret +.cfi_endproc +.size GFp_p256_scalar_sqr_rep_mont,.-GFp_p256_scalar_sqr_rep_mont +___ + +$code.=<<___ if ($addx); +################################################################################ +.type ecp_nistz256_ord_mul_montx,\@function,3 +.align 32 +ecp_nistz256_ord_mul_montx: +.cfi_startproc +.Lecp_nistz256_ord_mul_montx: + push %rbp +.cfi_push %rbp + push %rbx +.cfi_push %rbx + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +.Lord_mulx_body: + + mov $b_org, $b_ptr + mov 8*0($b_org), %rdx + mov 8*0($a_ptr), $acc1 + mov 8*1($a_ptr), $acc2 + mov 8*2($a_ptr), $acc3 + mov 8*3($a_ptr), $acc4 + lea -128($a_ptr), $a_ptr # control u-op density + lea .Lord-128(%rip), %r14 + mov .LordK(%rip), %r15 + + ################################# Multiply by b[0] + mulx $acc1, $acc0, $acc1 + mulx $acc2, $t0, $acc2 + mulx $acc3, $t1, $acc3 + add $t0, $acc1 + mulx $acc4, $t0, $acc4 + mov $acc0, %rdx + mulx %r15, %rdx, %rax + adc $t1, $acc2 + adc $t0, $acc3 + adc \$0, $acc4 + + ################################# reduction + xor $acc5, $acc5 # $acc5=0, cf=0, of=0 + mulx 8*0+128(%r14), $t0, $t1 + adcx $t0, $acc0 # guaranteed to be zero + adox $t1, $acc1 + + mulx 8*1+128(%r14), $t0, $t1 + adcx $t0, $acc1 + adox $t1, $acc2 + + mulx 8*2+128(%r14), $t0, $t1 + adcx $t0, $acc2 + adox $t1, $acc3 + + mulx 8*3+128(%r14), $t0, $t1 + mov 8*1($b_ptr), %rdx + adcx $t0, $acc3 + adox $t1, $acc4 + adcx $acc0, $acc4 + adox $acc0, $acc5 + adc \$0, $acc5 # cf=0, of=0 + + ################################# Multiply by b[1] + mulx 8*0+128($a_ptr), $t0, $t1 + adcx $t0, $acc1 + adox $t1, $acc2 + + mulx 8*1+128($a_ptr), $t0, $t1 + adcx $t0, $acc2 + adox $t1, $acc3 + + mulx 8*2+128($a_ptr), $t0, $t1 + adcx $t0, $acc3 + adox $t1, $acc4 + + mulx 8*3+128($a_ptr), $t0, $t1 + mov $acc1, %rdx + mulx %r15, %rdx, %rax + adcx $t0, $acc4 + adox $t1, $acc5 + + adcx $acc0, $acc5 + adox $acc0, $acc0 + adc \$0, $acc0 # cf=0, of=0 + + ################################# reduction + mulx 8*0+128(%r14), $t0, $t1 + adcx $t0, $acc1 # guaranteed to be zero + adox $t1, $acc2 + + mulx 8*1+128(%r14), $t0, $t1 + adcx $t0, $acc2 + adox $t1, $acc3 + + mulx 8*2+128(%r14), $t0, $t1 + adcx $t0, $acc3 + adox $t1, $acc4 + + mulx 8*3+128(%r14), $t0, $t1 + mov 8*2($b_ptr), %rdx + adcx $t0, $acc4 + adox $t1, $acc5 + adcx $acc1, $acc5 + adox $acc1, $acc0 + adc \$0, $acc0 # cf=0, of=0 + + ################################# Multiply by b[2] + mulx 8*0+128($a_ptr), $t0, $t1 + adcx $t0, $acc2 + adox $t1, $acc3 + + mulx 8*1+128($a_ptr), $t0, $t1 + adcx $t0, $acc3 + adox $t1, $acc4 + + mulx 8*2+128($a_ptr), $t0, $t1 + adcx $t0, $acc4 + adox $t1, $acc5 + + mulx 8*3+128($a_ptr), $t0, $t1 + mov $acc2, %rdx + mulx %r15, %rdx, %rax + adcx $t0, $acc5 + adox $t1, $acc0 + + adcx $acc1, $acc0 + adox $acc1, $acc1 + adc \$0, $acc1 # cf=0, of=0 + + ################################# reduction + mulx 8*0+128(%r14), $t0, $t1 + adcx $t0, $acc2 # guaranteed to be zero + adox $t1, $acc3 + + mulx 8*1+128(%r14), $t0, $t1 + adcx $t0, $acc3 + adox $t1, $acc4 + + mulx 8*2+128(%r14), $t0, $t1 + adcx $t0, $acc4 + adox $t1, $acc5 + + mulx 8*3+128(%r14), $t0, $t1 + mov 8*3($b_ptr), %rdx + adcx $t0, $acc5 + adox $t1, $acc0 + adcx $acc2, $acc0 + adox $acc2, $acc1 + adc \$0, $acc1 # cf=0, of=0 + + ################################# Multiply by b[3] + mulx 8*0+128($a_ptr), $t0, $t1 + adcx $t0, $acc3 + adox $t1, $acc4 + + mulx 8*1+128($a_ptr), $t0, $t1 + adcx $t0, $acc4 + adox $t1, $acc5 + + mulx 8*2+128($a_ptr), $t0, $t1 + adcx $t0, $acc5 + adox $t1, $acc0 + + mulx 8*3+128($a_ptr), $t0, $t1 + mov $acc3, %rdx + mulx %r15, %rdx, %rax + adcx $t0, $acc0 + adox $t1, $acc1 + + adcx $acc2, $acc1 + adox $acc2, $acc2 + adc \$0, $acc2 # cf=0, of=0 + + ################################# reduction + mulx 8*0+128(%r14), $t0, $t1 + adcx $t0, $acc3 # guranteed to be zero + adox $t1, $acc4 + + mulx 8*1+128(%r14), $t0, $t1 + adcx $t0, $acc4 + adox $t1, $acc5 + + mulx 8*2+128(%r14), $t0, $t1 + adcx $t0, $acc5 + adox $t1, $acc0 + + mulx 8*3+128(%r14), $t0, $t1 + lea 128(%r14),%r14 + mov $acc4, $t2 + adcx $t0, $acc0 + adox $t1, $acc1 + mov $acc5, $t3 + adcx $acc3, $acc1 + adox $acc3, $acc2 + adc \$0, $acc2 + + ################################# + # Branch-less conditional subtraction of P + mov $acc0, $t0 + sub 8*0(%r14), $acc4 + sbb 8*1(%r14), $acc5 + sbb 8*2(%r14), $acc0 + mov $acc1, $t1 + sbb 8*3(%r14), $acc1 + sbb \$0, $acc2 + + cmovc $t2, $acc4 + cmovc $t3, $acc5 + cmovc $t0, $acc0 + cmovc $t1, $acc1 + + mov $acc4, 8*0($r_ptr) + mov $acc5, 8*1($r_ptr) + mov $acc0, 8*2($r_ptr) + mov $acc1, 8*3($r_ptr) + + mov 0(%rsp),%r15 +.cfi_restore %r15 + mov 8(%rsp),%r14 +.cfi_restore %r14 + mov 16(%rsp),%r13 +.cfi_restore %r13 + mov 24(%rsp),%r12 +.cfi_restore %r12 + mov 32(%rsp),%rbx +.cfi_restore %rbx + mov 40(%rsp),%rbp +.cfi_restore %rbp + lea 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 +.Lord_mulx_epilogue: + ret +.cfi_endproc +.size ecp_nistz256_ord_mul_montx,.-ecp_nistz256_ord_mul_montx + +.type ecp_nistz256_ord_sqr_montx,\@function,3 +.align 32 +ecp_nistz256_ord_sqr_montx: +.cfi_startproc +.Lecp_nistz256_ord_sqr_montx: + push %rbp +.cfi_push %rbp + push %rbx +.cfi_push %rbx + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +.Lord_sqrx_body: + + mov $b_org, $b_ptr + mov 8*0($a_ptr), %rdx + mov 8*1($a_ptr), $acc6 + mov 8*2($a_ptr), $acc7 + mov 8*3($a_ptr), $acc0 + lea .Lord(%rip), $a_ptr + jmp .Loop_ord_sqrx + +.align 32 +.Loop_ord_sqrx: + mulx $acc6, $acc1, $acc2 # a[0]*a[1] + mulx $acc7, $t0, $acc3 # a[0]*a[2] + mov %rdx, %rax # offload a[0] + movq $acc6, %xmm1 # offload a[1] + mulx $acc0, $t1, $acc4 # a[0]*a[3] + mov $acc6, %rdx + add $t0, $acc2 + movq $acc7, %xmm2 # offload a[2] + adc $t1, $acc3 + adc \$0, $acc4 + xor $acc5, $acc5 # $acc5=0,cf=0,of=0 + ################################# + mulx $acc7, $t0, $t1 # a[1]*a[2] + adcx $t0, $acc3 + adox $t1, $acc4 + + mulx $acc0, $t0, $t1 # a[1]*a[3] + mov $acc7, %rdx + adcx $t0, $acc4 + adox $t1, $acc5 + adc \$0, $acc5 + ################################# + mulx $acc0, $t0, $acc6 # a[2]*a[3] + mov %rax, %rdx + movq $acc0, %xmm3 # offload a[3] + xor $acc7, $acc7 # $acc7=0,cf=0,of=0 + adcx $acc1, $acc1 # acc1:6<<1 + adox $t0, $acc5 + adcx $acc2, $acc2 + adox $acc7, $acc6 # of=0 + + ################################# a[i]*a[i] + mulx %rdx, $acc0, $t1 + movq %xmm1, %rdx + adcx $acc3, $acc3 + adox $t1, $acc1 + adcx $acc4, $acc4 + mulx %rdx, $t0, $t4 + movq %xmm2, %rdx + adcx $acc5, $acc5 + adox $t0, $acc2 + adcx $acc6, $acc6 + mulx %rdx, $t0, $t1 + .byte 0x67 + movq %xmm3, %rdx + adox $t4, $acc3 + adcx $acc7, $acc7 + adox $t0, $acc4 + adox $t1, $acc5 + mulx %rdx, $t0, $t4 + adox $t0, $acc6 + adox $t4, $acc7 + + ################################# reduction + mov $acc0, %rdx + mulx 8*4($a_ptr), %rdx, $t0 + + xor %rax, %rax # cf=0, of=0 + mulx 8*0($a_ptr), $t0, $t1 + adcx $t0, $acc0 # guaranteed to be zero + adox $t1, $acc1 + mulx 8*1($a_ptr), $t0, $t1 + adcx $t0, $acc1 + adox $t1, $acc2 + mulx 8*2($a_ptr), $t0, $t1 + adcx $t0, $acc2 + adox $t1, $acc3 + mulx 8*3($a_ptr), $t0, $t1 + adcx $t0, $acc3 + adox $t1, $acc0 # of=0 + adcx %rax, $acc0 # cf=0 + + ################################# + mov $acc1, %rdx + mulx 8*4($a_ptr), %rdx, $t0 + + mulx 8*0($a_ptr), $t0, $t1 + adox $t0, $acc1 # guaranteed to be zero + adcx $t1, $acc2 + mulx 8*1($a_ptr), $t0, $t1 + adox $t0, $acc2 + adcx $t1, $acc3 + mulx 8*2($a_ptr), $t0, $t1 + adox $t0, $acc3 + adcx $t1, $acc0 + mulx 8*3($a_ptr), $t0, $t1 + adox $t0, $acc0 + adcx $t1, $acc1 # cf=0 + adox %rax, $acc1 # of=0 + + ################################# + mov $acc2, %rdx + mulx 8*4($a_ptr), %rdx, $t0 + + mulx 8*0($a_ptr), $t0, $t1 + adcx $t0, $acc2 # guaranteed to be zero + adox $t1, $acc3 + mulx 8*1($a_ptr), $t0, $t1 + adcx $t0, $acc3 + adox $t1, $acc0 + mulx 8*2($a_ptr), $t0, $t1 + adcx $t0, $acc0 + adox $t1, $acc1 + mulx 8*3($a_ptr), $t0, $t1 + adcx $t0, $acc1 + adox $t1, $acc2 # of=0 + adcx %rax, $acc2 # cf=0 + + ################################# + mov $acc3, %rdx + mulx 8*4($a_ptr), %rdx, $t0 + + mulx 8*0($a_ptr), $t0, $t1 + adox $t0, $acc3 # guaranteed to be zero + adcx $t1, $acc0 + mulx 8*1($a_ptr), $t0, $t1 + adox $t0, $acc0 + adcx $t1, $acc1 + mulx 8*2($a_ptr), $t0, $t1 + adox $t0, $acc1 + adcx $t1, $acc2 + mulx 8*3($a_ptr), $t0, $t1 + adox $t0, $acc2 + adcx $t1, $acc3 + adox %rax, $acc3 + + ################################# accumulate upper half + add $acc0, $acc4 # add $acc4, $acc0 + adc $acc5, $acc1 + mov $acc4, %rdx + adc $acc6, $acc2 + adc $acc7, $acc3 + mov $acc1, $acc6 + adc \$0, %rax + + ################################# compare to modulus + sub 8*0($a_ptr), $acc4 + mov $acc2, $acc7 + sbb 8*1($a_ptr), $acc1 + sbb 8*2($a_ptr), $acc2 + mov $acc3, $acc0 + sbb 8*3($a_ptr), $acc3 + sbb \$0, %rax + + cmovnc $acc4, %rdx + cmovnc $acc1, $acc6 + cmovnc $acc2, $acc7 + cmovnc $acc3, $acc0 + + dec $b_ptr + jnz .Loop_ord_sqrx + + mov %rdx, 8*0($r_ptr) + mov $acc6, 8*1($r_ptr) + pxor %xmm1, %xmm1 + mov $acc7, 8*2($r_ptr) + pxor %xmm2, %xmm2 + mov $acc0, 8*3($r_ptr) + pxor %xmm3, %xmm3 + + mov 0(%rsp),%r15 +.cfi_restore %r15 + mov 8(%rsp),%r14 +.cfi_restore %r14 + mov 16(%rsp),%r13 +.cfi_restore %r13 + mov 24(%rsp),%r12 +.cfi_restore %r12 + mov 32(%rsp),%rbx +.cfi_restore %rbx + mov 40(%rsp),%rbp +.cfi_restore %rbp + lea 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 +.Lord_sqrx_epilogue: + ret +.cfi_endproc +.size ecp_nistz256_ord_sqr_montx,.-ecp_nistz256_ord_sqr_montx +___ + +$code.=<<___; +################################################################################ +# void GFp_p256_mul_mont( +# uint64_t res[4], +# uint64_t a[4], +# uint64_t b[4]); + +.globl GFp_p256_mul_mont +.type GFp_p256_mul_mont,\@function,3 +.align 32 +GFp_p256_mul_mont: +.cfi_startproc +___ +$code.=<<___ if ($addx); + leaq GFp_ia32cap_P(%rip), %rcx + mov 8(%rcx), %rcx + and \$0x80100, %ecx +___ +$code.=<<___; +.Lmul_mont: + push %rbp +.cfi_push %rbp + push %rbx +.cfi_push %rbx + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +.Lmul_body: +___ +$code.=<<___ if ($addx); + cmp \$0x80100, %ecx + je .Lmul_montx +___ +$code.=<<___; + mov $b_org, $b_ptr + mov 8*0($b_org), %rax + mov 8*0($a_ptr), $acc1 + mov 8*1($a_ptr), $acc2 + mov 8*2($a_ptr), $acc3 + mov 8*3($a_ptr), $acc4 + + call __ecp_nistz256_mul_montq +___ +$code.=<<___ if ($addx); + jmp .Lmul_mont_done + +.align 32 +.Lmul_montx: + mov $b_org, $b_ptr + mov 8*0($b_org), %rdx + mov 8*0($a_ptr), $acc1 + mov 8*1($a_ptr), $acc2 + mov 8*2($a_ptr), $acc3 + mov 8*3($a_ptr), $acc4 + lea -128($a_ptr), $a_ptr # control u-op density + + call __ecp_nistz256_mul_montx +___ +$code.=<<___; +.Lmul_mont_done: + mov 0(%rsp),%r15 +.cfi_restore %r15 + mov 8(%rsp),%r14 +.cfi_restore %r14 + mov 16(%rsp),%r13 +.cfi_restore %r13 + mov 24(%rsp),%r12 +.cfi_restore %r12 + mov 32(%rsp),%rbx +.cfi_restore %rbx + mov 40(%rsp),%rbp +.cfi_restore %rbp + lea 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 +.Lmul_epilogue: + ret +.cfi_endproc +.size GFp_p256_mul_mont,.-GFp_p256_mul_mont + +.type __ecp_nistz256_mul_montq,\@abi-omnipotent +.align 32 +__ecp_nistz256_mul_montq: +.cfi_startproc + ######################################################################## + # Multiply a by b[0] + mov %rax, $t1 + mulq $acc1 + mov .Lpoly+8*1(%rip),$poly1 + mov %rax, $acc0 + mov $t1, %rax + mov %rdx, $acc1 + + mulq $acc2 + mov .Lpoly+8*3(%rip),$poly3 + add %rax, $acc1 + mov $t1, %rax + adc \$0, %rdx + mov %rdx, $acc2 + + mulq $acc3 + add %rax, $acc2 + mov $t1, %rax + adc \$0, %rdx + mov %rdx, $acc3 + + mulq $acc4 + add %rax, $acc3 + mov $acc0, %rax + adc \$0, %rdx + xor $acc5, $acc5 + mov %rdx, $acc4 + + ######################################################################## + # First reduction step + # Basically now we want to multiply acc[0] by p256, + # and add the result to the acc. + # Due to the special form of p256 we do some optimizations + # + # acc[0] x p256[0..1] = acc[0] x 2^96 - acc[0] + # then we add acc[0] and get acc[0] x 2^96 + + mov $acc0, $t1 + shl \$32, $acc0 + mulq $poly3 + shr \$32, $t1 + add $acc0, $acc1 # +=acc[0]<<96 + adc $t1, $acc2 + adc %rax, $acc3 + mov 8*1($b_ptr), %rax + adc %rdx, $acc4 + adc \$0, $acc5 + xor $acc0, $acc0 + + ######################################################################## + # Multiply by b[1] + mov %rax, $t1 + mulq 8*0($a_ptr) + add %rax, $acc1 + mov $t1, %rax + adc \$0, %rdx + mov %rdx, $t0 + + mulq 8*1($a_ptr) + add $t0, $acc2 + adc \$0, %rdx + add %rax, $acc2 + mov $t1, %rax + adc \$0, %rdx + mov %rdx, $t0 + + mulq 8*2($a_ptr) + add $t0, $acc3 + adc \$0, %rdx + add %rax, $acc3 + mov $t1, %rax + adc \$0, %rdx + mov %rdx, $t0 + + mulq 8*3($a_ptr) + add $t0, $acc4 + adc \$0, %rdx + add %rax, $acc4 + mov $acc1, %rax + adc %rdx, $acc5 + adc \$0, $acc0 + + ######################################################################## + # Second reduction step + mov $acc1, $t1 + shl \$32, $acc1 + mulq $poly3 + shr \$32, $t1 + add $acc1, $acc2 + adc $t1, $acc3 + adc %rax, $acc4 + mov 8*2($b_ptr), %rax + adc %rdx, $acc5 + adc \$0, $acc0 + xor $acc1, $acc1 + + ######################################################################## + # Multiply by b[2] + mov %rax, $t1 + mulq 8*0($a_ptr) + add %rax, $acc2 + mov $t1, %rax + adc \$0, %rdx + mov %rdx, $t0 + + mulq 8*1($a_ptr) + add $t0, $acc3 + adc \$0, %rdx + add %rax, $acc3 + mov $t1, %rax + adc \$0, %rdx + mov %rdx, $t0 + + mulq 8*2($a_ptr) + add $t0, $acc4 + adc \$0, %rdx + add %rax, $acc4 + mov $t1, %rax + adc \$0, %rdx + mov %rdx, $t0 + + mulq 8*3($a_ptr) + add $t0, $acc5 + adc \$0, %rdx + add %rax, $acc5 + mov $acc2, %rax + adc %rdx, $acc0 + adc \$0, $acc1 + + ######################################################################## + # Third reduction step + mov $acc2, $t1 + shl \$32, $acc2 + mulq $poly3 + shr \$32, $t1 + add $acc2, $acc3 + adc $t1, $acc4 + adc %rax, $acc5 + mov 8*3($b_ptr), %rax + adc %rdx, $acc0 + adc \$0, $acc1 + xor $acc2, $acc2 + + ######################################################################## + # Multiply by b[3] + mov %rax, $t1 + mulq 8*0($a_ptr) + add %rax, $acc3 + mov $t1, %rax + adc \$0, %rdx + mov %rdx, $t0 + + mulq 8*1($a_ptr) + add $t0, $acc4 + adc \$0, %rdx + add %rax, $acc4 + mov $t1, %rax + adc \$0, %rdx + mov %rdx, $t0 + + mulq 8*2($a_ptr) + add $t0, $acc5 + adc \$0, %rdx + add %rax, $acc5 + mov $t1, %rax + adc \$0, %rdx + mov %rdx, $t0 + + mulq 8*3($a_ptr) + add $t0, $acc0 + adc \$0, %rdx + add %rax, $acc0 + mov $acc3, %rax + adc %rdx, $acc1 + adc \$0, $acc2 + + ######################################################################## + # Final reduction step + mov $acc3, $t1 + shl \$32, $acc3 + mulq $poly3 + shr \$32, $t1 + add $acc3, $acc4 + adc $t1, $acc5 + mov $acc4, $t0 + adc %rax, $acc0 + adc %rdx, $acc1 + mov $acc5, $t1 + adc \$0, $acc2 + + ######################################################################## + # Branch-less conditional subtraction of P + sub \$-1, $acc4 # .Lpoly[0] + mov $acc0, $t2 + sbb $poly1, $acc5 # .Lpoly[1] + sbb \$0, $acc0 # .Lpoly[2] + mov $acc1, $t3 + sbb $poly3, $acc1 # .Lpoly[3] + sbb \$0, $acc2 + + cmovc $t0, $acc4 + cmovc $t1, $acc5 + mov $acc4, 8*0($r_ptr) + cmovc $t2, $acc0 + mov $acc5, 8*1($r_ptr) + cmovc $t3, $acc1 + mov $acc0, 8*2($r_ptr) + mov $acc1, 8*3($r_ptr) + + ret +.cfi_endproc +.size __ecp_nistz256_mul_montq,.-__ecp_nistz256_mul_montq + +################################################################################ +# void GFp_p256_sqr_mont( +# uint64_t res[4], +# uint64_t a[4]); + +# we optimize the square according to S.Gueron and V.Krasnov, +# "Speeding up Big-Number Squaring" +.globl GFp_p256_sqr_mont +.type GFp_p256_sqr_mont,\@function,2 +.align 32 +GFp_p256_sqr_mont: +.cfi_startproc +___ +$code.=<<___ if ($addx); + leaq GFp_ia32cap_P(%rip), %rcx + mov 8(%rcx), %rcx + and \$0x80100, %ecx +___ +$code.=<<___; + push %rbp +.cfi_push %rbp + push %rbx +.cfi_push %rbx + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +.Lsqr_body: +___ +$code.=<<___ if ($addx); + cmp \$0x80100, %ecx + je .Lsqr_montx +___ +$code.=<<___; + mov 8*0($a_ptr), %rax + mov 8*1($a_ptr), $acc6 + mov 8*2($a_ptr), $acc7 + mov 8*3($a_ptr), $acc0 + + call __ecp_nistz256_sqr_montq +___ +$code.=<<___ if ($addx); + jmp .Lsqr_mont_done + +.align 32 +.Lsqr_montx: + mov 8*0($a_ptr), %rdx + mov 8*1($a_ptr), $acc6 + mov 8*2($a_ptr), $acc7 + mov 8*3($a_ptr), $acc0 + lea -128($a_ptr), $a_ptr # control u-op density + + call __ecp_nistz256_sqr_montx +___ +$code.=<<___; +.Lsqr_mont_done: + mov 0(%rsp),%r15 +.cfi_restore %r15 + mov 8(%rsp),%r14 +.cfi_restore %r14 + mov 16(%rsp),%r13 +.cfi_restore %r13 + mov 24(%rsp),%r12 +.cfi_restore %r12 + mov 32(%rsp),%rbx +.cfi_restore %rbx + mov 40(%rsp),%rbp +.cfi_restore %rbp + lea 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 +.Lsqr_epilogue: + ret +.cfi_endproc +.size GFp_p256_sqr_mont,.-GFp_p256_sqr_mont + +.type __ecp_nistz256_sqr_montq,\@abi-omnipotent +.align 32 +__ecp_nistz256_sqr_montq: +.cfi_startproc + mov %rax, $acc5 + mulq $acc6 # a[1]*a[0] + mov %rax, $acc1 + mov $acc7, %rax + mov %rdx, $acc2 + + mulq $acc5 # a[0]*a[2] + add %rax, $acc2 + mov $acc0, %rax + adc \$0, %rdx + mov %rdx, $acc3 + + mulq $acc5 # a[0]*a[3] + add %rax, $acc3 + mov $acc7, %rax + adc \$0, %rdx + mov %rdx, $acc4 + + ################################# + mulq $acc6 # a[1]*a[2] + add %rax, $acc3 + mov $acc0, %rax + adc \$0, %rdx + mov %rdx, $t1 + + mulq $acc6 # a[1]*a[3] + add %rax, $acc4 + mov $acc0, %rax + adc \$0, %rdx + add $t1, $acc4 + mov %rdx, $acc5 + adc \$0, $acc5 + + ################################# + mulq $acc7 # a[2]*a[3] + xor $acc7, $acc7 + add %rax, $acc5 + mov 8*0($a_ptr), %rax + mov %rdx, $acc6 + adc \$0, $acc6 + + add $acc1, $acc1 # acc1:6<<1 + adc $acc2, $acc2 + adc $acc3, $acc3 + adc $acc4, $acc4 + adc $acc5, $acc5 + adc $acc6, $acc6 + adc \$0, $acc7 + + mulq %rax + mov %rax, $acc0 + mov 8*1($a_ptr), %rax + mov %rdx, $t0 + + mulq %rax + add $t0, $acc1 + adc %rax, $acc2 + mov 8*2($a_ptr), %rax + adc \$0, %rdx + mov %rdx, $t0 + + mulq %rax + add $t0, $acc3 + adc %rax, $acc4 + mov 8*3($a_ptr), %rax + adc \$0, %rdx + mov %rdx, $t0 + + mulq %rax + add $t0, $acc5 + adc %rax, $acc6 + mov $acc0, %rax + adc %rdx, $acc7 + + mov .Lpoly+8*1(%rip), $a_ptr + mov .Lpoly+8*3(%rip), $t1 + + ########################################## + # Now the reduction + # First iteration + mov $acc0, $t0 + shl \$32, $acc0 + mulq $t1 + shr \$32, $t0 + add $acc0, $acc1 # +=acc[0]<<96 + adc $t0, $acc2 + adc %rax, $acc3 + mov $acc1, %rax + adc \$0, %rdx + + ########################################## + # Second iteration + mov $acc1, $t0 + shl \$32, $acc1 + mov %rdx, $acc0 + mulq $t1 + shr \$32, $t0 + add $acc1, $acc2 + adc $t0, $acc3 + adc %rax, $acc0 + mov $acc2, %rax + adc \$0, %rdx + + ########################################## + # Third iteration + mov $acc2, $t0 + shl \$32, $acc2 + mov %rdx, $acc1 + mulq $t1 + shr \$32, $t0 + add $acc2, $acc3 + adc $t0, $acc0 + adc %rax, $acc1 + mov $acc3, %rax + adc \$0, %rdx + + ########################################### + # Last iteration + mov $acc3, $t0 + shl \$32, $acc3 + mov %rdx, $acc2 + mulq $t1 + shr \$32, $t0 + add $acc3, $acc0 + adc $t0, $acc1 + adc %rax, $acc2 + adc \$0, %rdx + xor $acc3, $acc3 + + ############################################ + # Add the rest of the acc + add $acc0, $acc4 + adc $acc1, $acc5 + mov $acc4, $acc0 + adc $acc2, $acc6 + adc %rdx, $acc7 + mov $acc5, $acc1 + adc \$0, $acc3 + + sub \$-1, $acc4 # .Lpoly[0] + mov $acc6, $acc2 + sbb $a_ptr, $acc5 # .Lpoly[1] + sbb \$0, $acc6 # .Lpoly[2] + mov $acc7, $t0 + sbb $t1, $acc7 # .Lpoly[3] + sbb \$0, $acc3 + + cmovc $acc0, $acc4 + cmovc $acc1, $acc5 + mov $acc4, 8*0($r_ptr) + cmovc $acc2, $acc6 + mov $acc5, 8*1($r_ptr) + cmovc $t0, $acc7 + mov $acc6, 8*2($r_ptr) + mov $acc7, 8*3($r_ptr) + + ret +.cfi_endproc +.size __ecp_nistz256_sqr_montq,.-__ecp_nistz256_sqr_montq +___ + +if ($addx) { +$code.=<<___; +.type __ecp_nistz256_mul_montx,\@abi-omnipotent +.align 32 +__ecp_nistz256_mul_montx: +.cfi_startproc + ######################################################################## + # Multiply by b[0] + mulx $acc1, $acc0, $acc1 + mulx $acc2, $t0, $acc2 + mov \$32, $poly1 + xor $acc5, $acc5 # cf=0 + mulx $acc3, $t1, $acc3 + mov .Lpoly+8*3(%rip), $poly3 + adc $t0, $acc1 + mulx $acc4, $t0, $acc4 + mov $acc0, %rdx + adc $t1, $acc2 + shlx $poly1,$acc0,$t1 + adc $t0, $acc3 + shrx $poly1,$acc0,$t0 + adc \$0, $acc4 + + ######################################################################## + # First reduction step + add $t1, $acc1 + adc $t0, $acc2 + + mulx $poly3, $t0, $t1 + mov 8*1($b_ptr), %rdx + adc $t0, $acc3 + adc $t1, $acc4 + adc \$0, $acc5 + xor $acc0, $acc0 # $acc0=0,cf=0,of=0 + + ######################################################################## + # Multiply by b[1] + mulx 8*0+128($a_ptr), $t0, $t1 + adcx $t0, $acc1 + adox $t1, $acc2 + + mulx 8*1+128($a_ptr), $t0, $t1 + adcx $t0, $acc2 + adox $t1, $acc3 + + mulx 8*2+128($a_ptr), $t0, $t1 + adcx $t0, $acc3 + adox $t1, $acc4 + + mulx 8*3+128($a_ptr), $t0, $t1 + mov $acc1, %rdx + adcx $t0, $acc4 + shlx $poly1, $acc1, $t0 + adox $t1, $acc5 + shrx $poly1, $acc1, $t1 + + adcx $acc0, $acc5 + adox $acc0, $acc0 + adc \$0, $acc0 + + ######################################################################## + # Second reduction step + add $t0, $acc2 + adc $t1, $acc3 + + mulx $poly3, $t0, $t1 + mov 8*2($b_ptr), %rdx + adc $t0, $acc4 + adc $t1, $acc5 + adc \$0, $acc0 + xor $acc1 ,$acc1 # $acc1=0,cf=0,of=0 + + ######################################################################## + # Multiply by b[2] + mulx 8*0+128($a_ptr), $t0, $t1 + adcx $t0, $acc2 + adox $t1, $acc3 + + mulx 8*1+128($a_ptr), $t0, $t1 + adcx $t0, $acc3 + adox $t1, $acc4 + + mulx 8*2+128($a_ptr), $t0, $t1 + adcx $t0, $acc4 + adox $t1, $acc5 + + mulx 8*3+128($a_ptr), $t0, $t1 + mov $acc2, %rdx + adcx $t0, $acc5 + shlx $poly1, $acc2, $t0 + adox $t1, $acc0 + shrx $poly1, $acc2, $t1 + + adcx $acc1, $acc0 + adox $acc1, $acc1 + adc \$0, $acc1 + + ######################################################################## + # Third reduction step + add $t0, $acc3 + adc $t1, $acc4 + + mulx $poly3, $t0, $t1 + mov 8*3($b_ptr), %rdx + adc $t0, $acc5 + adc $t1, $acc0 + adc \$0, $acc1 + xor $acc2, $acc2 # $acc2=0,cf=0,of=0 + + ######################################################################## + # Multiply by b[3] + mulx 8*0+128($a_ptr), $t0, $t1 + adcx $t0, $acc3 + adox $t1, $acc4 + + mulx 8*1+128($a_ptr), $t0, $t1 + adcx $t0, $acc4 + adox $t1, $acc5 + + mulx 8*2+128($a_ptr), $t0, $t1 + adcx $t0, $acc5 + adox $t1, $acc0 + + mulx 8*3+128($a_ptr), $t0, $t1 + mov $acc3, %rdx + adcx $t0, $acc0 + shlx $poly1, $acc3, $t0 + adox $t1, $acc1 + shrx $poly1, $acc3, $t1 + + adcx $acc2, $acc1 + adox $acc2, $acc2 + adc \$0, $acc2 + + ######################################################################## + # Fourth reduction step + add $t0, $acc4 + adc $t1, $acc5 + + mulx $poly3, $t0, $t1 + mov $acc4, $t2 + mov .Lpoly+8*1(%rip), $poly1 + adc $t0, $acc0 + mov $acc5, $t3 + adc $t1, $acc1 + adc \$0, $acc2 + + ######################################################################## + # Branch-less conditional subtraction of P + xor %eax, %eax + mov $acc0, $t0 + sbb \$-1, $acc4 # .Lpoly[0] + sbb $poly1, $acc5 # .Lpoly[1] + sbb \$0, $acc0 # .Lpoly[2] + mov $acc1, $t1 + sbb $poly3, $acc1 # .Lpoly[3] + sbb \$0, $acc2 + + cmovc $t2, $acc4 + cmovc $t3, $acc5 + mov $acc4, 8*0($r_ptr) + cmovc $t0, $acc0 + mov $acc5, 8*1($r_ptr) + cmovc $t1, $acc1 + mov $acc0, 8*2($r_ptr) + mov $acc1, 8*3($r_ptr) + + ret +.cfi_endproc +.size __ecp_nistz256_mul_montx,.-__ecp_nistz256_mul_montx + +.type __ecp_nistz256_sqr_montx,\@abi-omnipotent +.align 32 +__ecp_nistz256_sqr_montx: +.cfi_startproc + mulx $acc6, $acc1, $acc2 # a[0]*a[1] + mulx $acc7, $t0, $acc3 # a[0]*a[2] + xor %eax, %eax + adc $t0, $acc2 + mulx $acc0, $t1, $acc4 # a[0]*a[3] + mov $acc6, %rdx + adc $t1, $acc3 + adc \$0, $acc4 + xor $acc5, $acc5 # $acc5=0,cf=0,of=0 + + ################################# + mulx $acc7, $t0, $t1 # a[1]*a[2] + adcx $t0, $acc3 + adox $t1, $acc4 + + mulx $acc0, $t0, $t1 # a[1]*a[3] + mov $acc7, %rdx + adcx $t0, $acc4 + adox $t1, $acc5 + adc \$0, $acc5 + + ################################# + mulx $acc0, $t0, $acc6 # a[2]*a[3] + mov 8*0+128($a_ptr), %rdx + xor $acc7, $acc7 # $acc7=0,cf=0,of=0 + adcx $acc1, $acc1 # acc1:6<<1 + adox $t0, $acc5 + adcx $acc2, $acc2 + adox $acc7, $acc6 # of=0 + + mulx %rdx, $acc0, $t1 + mov 8*1+128($a_ptr), %rdx + adcx $acc3, $acc3 + adox $t1, $acc1 + adcx $acc4, $acc4 + mulx %rdx, $t0, $t4 + mov 8*2+128($a_ptr), %rdx + adcx $acc5, $acc5 + adox $t0, $acc2 + adcx $acc6, $acc6 + .byte 0x67 + mulx %rdx, $t0, $t1 + mov 8*3+128($a_ptr), %rdx + adox $t4, $acc3 + adcx $acc7, $acc7 + adox $t0, $acc4 + mov \$32, $a_ptr + adox $t1, $acc5 + .byte 0x67,0x67 + mulx %rdx, $t0, $t4 + mov .Lpoly+8*3(%rip), %rdx + adox $t0, $acc6 + shlx $a_ptr, $acc0, $t0 + adox $t4, $acc7 + shrx $a_ptr, $acc0, $t4 + mov %rdx,$t1 + + # reduction step 1 + add $t0, $acc1 + adc $t4, $acc2 + + mulx $acc0, $t0, $acc0 + adc $t0, $acc3 + shlx $a_ptr, $acc1, $t0 + adc \$0, $acc0 + shrx $a_ptr, $acc1, $t4 + + # reduction step 2 + add $t0, $acc2 + adc $t4, $acc3 + + mulx $acc1, $t0, $acc1 + adc $t0, $acc0 + shlx $a_ptr, $acc2, $t0 + adc \$0, $acc1 + shrx $a_ptr, $acc2, $t4 + + # reduction step 3 + add $t0, $acc3 + adc $t4, $acc0 + + mulx $acc2, $t0, $acc2 + adc $t0, $acc1 + shlx $a_ptr, $acc3, $t0 + adc \$0, $acc2 + shrx $a_ptr, $acc3, $t4 + + # reduction step 4 + add $t0, $acc0 + adc $t4, $acc1 + + mulx $acc3, $t0, $acc3 + adc $t0, $acc2 + adc \$0, $acc3 + + xor $t3, $t3 + add $acc0, $acc4 # accumulate upper half + mov .Lpoly+8*1(%rip), $a_ptr + adc $acc1, $acc5 + mov $acc4, $acc0 + adc $acc2, $acc6 + adc $acc3, $acc7 + mov $acc5, $acc1 + adc \$0, $t3 + + sub \$-1, $acc4 # .Lpoly[0] + mov $acc6, $acc2 + sbb $a_ptr, $acc5 # .Lpoly[1] + sbb \$0, $acc6 # .Lpoly[2] + mov $acc7, $acc3 + sbb $t1, $acc7 # .Lpoly[3] + sbb \$0, $t3 + + cmovc $acc0, $acc4 + cmovc $acc1, $acc5 + mov $acc4, 8*0($r_ptr) + cmovc $acc2, $acc6 + mov $acc5, 8*1($r_ptr) + cmovc $acc3, $acc7 + mov $acc6, 8*2($r_ptr) + mov $acc7, 8*3($r_ptr) + + ret +.cfi_endproc +.size __ecp_nistz256_sqr_montx,.-__ecp_nistz256_sqr_montx +___ +} +} +{ +my ($val,$in_t,$index)=$win64?("%rcx","%rdx","%r8d"):("%rdi","%rsi","%edx"); +my ($ONE,$INDEX,$Ra,$Rb,$Rc,$Rd,$Re,$Rf)=map("%xmm$_",(0..7)); +my ($M0,$T0a,$T0b,$T0c,$T0d,$T0e,$T0f,$TMP0)=map("%xmm$_",(8..15)); +my ($M1,$T2a,$T2b,$TMP2,$M2,$T2a,$T2b,$TMP2)=map("%xmm$_",(8..15)); + +$code.=<<___; +################################################################################ +# void GFp_nistz256_select_w5(uint64_t *val, uint64_t *in_t, crypto_word index); +.globl GFp_nistz256_select_w5 +.type GFp_nistz256_select_w5,\@abi-omnipotent +.align 32 +GFp_nistz256_select_w5: +.cfi_startproc +___ +$code.=<<___ if ($avx>1); + leaq GFp_ia32cap_P(%rip), %rax + mov 8(%rax), %rax + test \$`1<<5`, %eax + jnz .Lavx2_select_w5 +___ +$code.=<<___ if ($win64); + lea -0x88(%rsp), %rax +.LSEH_begin_GFp_nistz256_select_w5: + .byte 0x48,0x8d,0x60,0xe0 #lea -0x20(%rax), %rsp + .byte 0x0f,0x29,0x70,0xe0 #movaps %xmm6, -0x20(%rax) + .byte 0x0f,0x29,0x78,0xf0 #movaps %xmm7, -0x10(%rax) + .byte 0x44,0x0f,0x29,0x00 #movaps %xmm8, 0(%rax) + .byte 0x44,0x0f,0x29,0x48,0x10 #movaps %xmm9, 0x10(%rax) + .byte 0x44,0x0f,0x29,0x50,0x20 #movaps %xmm10, 0x20(%rax) + .byte 0x44,0x0f,0x29,0x58,0x30 #movaps %xmm11, 0x30(%rax) + .byte 0x44,0x0f,0x29,0x60,0x40 #movaps %xmm12, 0x40(%rax) + .byte 0x44,0x0f,0x29,0x68,0x50 #movaps %xmm13, 0x50(%rax) + .byte 0x44,0x0f,0x29,0x70,0x60 #movaps %xmm14, 0x60(%rax) + .byte 0x44,0x0f,0x29,0x78,0x70 #movaps %xmm15, 0x70(%rax) +___ +$code.=<<___; + movdqa .LOne(%rip), $ONE + movd $index, $INDEX + + pxor $Ra, $Ra + pxor $Rb, $Rb + pxor $Rc, $Rc + pxor $Rd, $Rd + pxor $Re, $Re + pxor $Rf, $Rf + + movdqa $ONE, $M0 + pshufd \$0, $INDEX, $INDEX + + mov \$16, %rax +.Lselect_loop_sse_w5: + + movdqa $M0, $TMP0 + paddd $ONE, $M0 + pcmpeqd $INDEX, $TMP0 + + movdqa 16*0($in_t), $T0a + movdqa 16*1($in_t), $T0b + movdqa 16*2($in_t), $T0c + movdqa 16*3($in_t), $T0d + movdqa 16*4($in_t), $T0e + movdqa 16*5($in_t), $T0f + lea 16*6($in_t), $in_t + + pand $TMP0, $T0a + pand $TMP0, $T0b + por $T0a, $Ra + pand $TMP0, $T0c + por $T0b, $Rb + pand $TMP0, $T0d + por $T0c, $Rc + pand $TMP0, $T0e + por $T0d, $Rd + pand $TMP0, $T0f + por $T0e, $Re + por $T0f, $Rf + + dec %rax + jnz .Lselect_loop_sse_w5 + + movdqu $Ra, 16*0($val) + movdqu $Rb, 16*1($val) + movdqu $Rc, 16*2($val) + movdqu $Rd, 16*3($val) + movdqu $Re, 16*4($val) + movdqu $Rf, 16*5($val) +___ +$code.=<<___ if ($win64); + movaps (%rsp), %xmm6 + movaps 0x10(%rsp), %xmm7 + movaps 0x20(%rsp), %xmm8 + movaps 0x30(%rsp), %xmm9 + movaps 0x40(%rsp), %xmm10 + movaps 0x50(%rsp), %xmm11 + movaps 0x60(%rsp), %xmm12 + movaps 0x70(%rsp), %xmm13 + movaps 0x80(%rsp), %xmm14 + movaps 0x90(%rsp), %xmm15 + lea 0xa8(%rsp), %rsp +___ +$code.=<<___; + ret +.cfi_endproc +.LSEH_end_GFp_nistz256_select_w5: +.size GFp_nistz256_select_w5,.-GFp_nistz256_select_w5 + +################################################################################ +# void GFp_nistz256_select_w7(uint64_t *val, uint64_t *in_t, crypto_word index); +.globl GFp_nistz256_select_w7 +.type GFp_nistz256_select_w7,\@abi-omnipotent +.align 32 +GFp_nistz256_select_w7: +.cfi_startproc +___ +$code.=<<___ if ($avx>1); + leaq GFp_ia32cap_P(%rip), %rax + mov 8(%rax), %rax + test \$`1<<5`, %eax + jnz .Lavx2_select_w7 +___ +$code.=<<___ if ($win64); + lea -0x88(%rsp), %rax +.LSEH_begin_GFp_nistz256_select_w7: + .byte 0x48,0x8d,0x60,0xe0 #lea -0x20(%rax), %rsp + .byte 0x0f,0x29,0x70,0xe0 #movaps %xmm6, -0x20(%rax) + .byte 0x0f,0x29,0x78,0xf0 #movaps %xmm7, -0x10(%rax) + .byte 0x44,0x0f,0x29,0x00 #movaps %xmm8, 0(%rax) + .byte 0x44,0x0f,0x29,0x48,0x10 #movaps %xmm9, 0x10(%rax) + .byte 0x44,0x0f,0x29,0x50,0x20 #movaps %xmm10, 0x20(%rax) + .byte 0x44,0x0f,0x29,0x58,0x30 #movaps %xmm11, 0x30(%rax) + .byte 0x44,0x0f,0x29,0x60,0x40 #movaps %xmm12, 0x40(%rax) + .byte 0x44,0x0f,0x29,0x68,0x50 #movaps %xmm13, 0x50(%rax) + .byte 0x44,0x0f,0x29,0x70,0x60 #movaps %xmm14, 0x60(%rax) + .byte 0x44,0x0f,0x29,0x78,0x70 #movaps %xmm15, 0x70(%rax) +___ +$code.=<<___; + movdqa .LOne(%rip), $M0 + movd $index, $INDEX + + pxor $Ra, $Ra + pxor $Rb, $Rb + pxor $Rc, $Rc + pxor $Rd, $Rd + + movdqa $M0, $ONE + pshufd \$0, $INDEX, $INDEX + mov \$64, %rax + +.Lselect_loop_sse_w7: + movdqa $M0, $TMP0 + paddd $ONE, $M0 + movdqa 16*0($in_t), $T0a + movdqa 16*1($in_t), $T0b + pcmpeqd $INDEX, $TMP0 + movdqa 16*2($in_t), $T0c + movdqa 16*3($in_t), $T0d + lea 16*4($in_t), $in_t + + pand $TMP0, $T0a + pand $TMP0, $T0b + por $T0a, $Ra + pand $TMP0, $T0c + por $T0b, $Rb + pand $TMP0, $T0d + por $T0c, $Rc + prefetcht0 255($in_t) + por $T0d, $Rd + + dec %rax + jnz .Lselect_loop_sse_w7 + + movdqu $Ra, 16*0($val) + movdqu $Rb, 16*1($val) + movdqu $Rc, 16*2($val) + movdqu $Rd, 16*3($val) +___ +$code.=<<___ if ($win64); + movaps (%rsp), %xmm6 + movaps 0x10(%rsp), %xmm7 + movaps 0x20(%rsp), %xmm8 + movaps 0x30(%rsp), %xmm9 + movaps 0x40(%rsp), %xmm10 + movaps 0x50(%rsp), %xmm11 + movaps 0x60(%rsp), %xmm12 + movaps 0x70(%rsp), %xmm13 + movaps 0x80(%rsp), %xmm14 + movaps 0x90(%rsp), %xmm15 + lea 0xa8(%rsp), %rsp +___ +$code.=<<___; + ret +.cfi_endproc +.LSEH_end_GFp_nistz256_select_w7: +.size GFp_nistz256_select_w7,.-GFp_nistz256_select_w7 +___ +} +if ($avx>1) { +my ($val,$in_t,$index)=$win64?("%rcx","%rdx","%r8d"):("%rdi","%rsi","%edx"); +my ($TWO,$INDEX,$Ra,$Rb,$Rc)=map("%ymm$_",(0..4)); +my ($M0,$T0a,$T0b,$T0c,$TMP0)=map("%ymm$_",(5..9)); +my ($M1,$T1a,$T1b,$T1c,$TMP1)=map("%ymm$_",(10..14)); + +$code.=<<___; +################################################################################ +# void ecp_nistz256_avx2_select_w5(uint64_t *val, uint64_t *in_t, int index); +.type ecp_nistz256_avx2_select_w5,\@abi-omnipotent +.align 32 +ecp_nistz256_avx2_select_w5: +.cfi_startproc +.Lavx2_select_w5: + vzeroupper +___ +$code.=<<___ if ($win64); + lea -0x88(%rsp), %rax + mov %rsp,%r11 +.LSEH_begin_ecp_nistz256_avx2_select_w5: + .byte 0x48,0x8d,0x60,0xe0 # lea -0x20(%rax), %rsp + .byte 0xc5,0xf8,0x29,0x70,0xe0 # vmovaps %xmm6, -0x20(%rax) + .byte 0xc5,0xf8,0x29,0x78,0xf0 # vmovaps %xmm7, -0x10(%rax) + .byte 0xc5,0x78,0x29,0x40,0x00 # vmovaps %xmm8, 8(%rax) + .byte 0xc5,0x78,0x29,0x48,0x10 # vmovaps %xmm9, 0x10(%rax) + .byte 0xc5,0x78,0x29,0x50,0x20 # vmovaps %xmm10, 0x20(%rax) + .byte 0xc5,0x78,0x29,0x58,0x30 # vmovaps %xmm11, 0x30(%rax) + .byte 0xc5,0x78,0x29,0x60,0x40 # vmovaps %xmm12, 0x40(%rax) + .byte 0xc5,0x78,0x29,0x68,0x50 # vmovaps %xmm13, 0x50(%rax) + .byte 0xc5,0x78,0x29,0x70,0x60 # vmovaps %xmm14, 0x60(%rax) + .byte 0xc5,0x78,0x29,0x78,0x70 # vmovaps %xmm15, 0x70(%rax) +___ +$code.=<<___; + vmovdqa .LTwo(%rip), $TWO + + vpxor $Ra, $Ra, $Ra + vpxor $Rb, $Rb, $Rb + vpxor $Rc, $Rc, $Rc + + vmovdqa .LOne(%rip), $M0 + vmovdqa .LTwo(%rip), $M1 + + vmovd $index, %xmm1 + vpermd $INDEX, $Ra, $INDEX + + mov \$8, %rax +.Lselect_loop_avx2_w5: + + vmovdqa 32*0($in_t), $T0a + vmovdqa 32*1($in_t), $T0b + vmovdqa 32*2($in_t), $T0c + + vmovdqa 32*3($in_t), $T1a + vmovdqa 32*4($in_t), $T1b + vmovdqa 32*5($in_t), $T1c + + vpcmpeqd $INDEX, $M0, $TMP0 + vpcmpeqd $INDEX, $M1, $TMP1 + + vpaddd $TWO, $M0, $M0 + vpaddd $TWO, $M1, $M1 + lea 32*6($in_t), $in_t + + vpand $TMP0, $T0a, $T0a + vpand $TMP0, $T0b, $T0b + vpand $TMP0, $T0c, $T0c + vpand $TMP1, $T1a, $T1a + vpand $TMP1, $T1b, $T1b + vpand $TMP1, $T1c, $T1c + + vpxor $T0a, $Ra, $Ra + vpxor $T0b, $Rb, $Rb + vpxor $T0c, $Rc, $Rc + vpxor $T1a, $Ra, $Ra + vpxor $T1b, $Rb, $Rb + vpxor $T1c, $Rc, $Rc + + dec %rax + jnz .Lselect_loop_avx2_w5 + + vmovdqu $Ra, 32*0($val) + vmovdqu $Rb, 32*1($val) + vmovdqu $Rc, 32*2($val) + vzeroupper +___ +$code.=<<___ if ($win64); + movaps (%rsp), %xmm6 + movaps 0x10(%rsp), %xmm7 + movaps 0x20(%rsp), %xmm8 + movaps 0x30(%rsp), %xmm9 + movaps 0x40(%rsp), %xmm10 + movaps 0x50(%rsp), %xmm11 + movaps 0x60(%rsp), %xmm12 + movaps 0x70(%rsp), %xmm13 + movaps 0x80(%rsp), %xmm14 + movaps 0x90(%rsp), %xmm15 + lea (%r11), %rsp +___ +$code.=<<___; + ret +.cfi_endproc +.LSEH_end_ecp_nistz256_avx2_select_w5: +.size ecp_nistz256_avx2_select_w5,.-ecp_nistz256_avx2_select_w5 +___ +} +if ($avx>1) { +my ($val,$in_t,$index)=$win64?("%rcx","%rdx","%r8d"):("%rdi","%rsi","%edx"); +my ($THREE,$INDEX,$Ra,$Rb)=map("%ymm$_",(0..3)); +my ($M0,$T0a,$T0b,$TMP0)=map("%ymm$_",(4..7)); +my ($M1,$T1a,$T1b,$TMP1)=map("%ymm$_",(8..11)); +my ($M2,$T2a,$T2b,$TMP2)=map("%ymm$_",(12..15)); + +$code.=<<___; + +################################################################################ +# void ecp_nistz256_avx2_select_w7(uint64_t *val, uint64_t *in_t, int index); +.type ecp_nistz256_avx2_select_w7,\@abi-omnipotent +.align 32 +ecp_nistz256_avx2_select_w7: +.cfi_startproc +.Lavx2_select_w7: + vzeroupper +___ +$code.=<<___ if ($win64); + mov %rsp,%r11 + lea -0x88(%rsp), %rax +.LSEH_begin_ecp_nistz256_avx2_select_w7: + .byte 0x48,0x8d,0x60,0xe0 # lea -0x20(%rax), %rsp + .byte 0xc5,0xf8,0x29,0x70,0xe0 # vmovaps %xmm6, -0x20(%rax) + .byte 0xc5,0xf8,0x29,0x78,0xf0 # vmovaps %xmm7, -0x10(%rax) + .byte 0xc5,0x78,0x29,0x40,0x00 # vmovaps %xmm8, 8(%rax) + .byte 0xc5,0x78,0x29,0x48,0x10 # vmovaps %xmm9, 0x10(%rax) + .byte 0xc5,0x78,0x29,0x50,0x20 # vmovaps %xmm10, 0x20(%rax) + .byte 0xc5,0x78,0x29,0x58,0x30 # vmovaps %xmm11, 0x30(%rax) + .byte 0xc5,0x78,0x29,0x60,0x40 # vmovaps %xmm12, 0x40(%rax) + .byte 0xc5,0x78,0x29,0x68,0x50 # vmovaps %xmm13, 0x50(%rax) + .byte 0xc5,0x78,0x29,0x70,0x60 # vmovaps %xmm14, 0x60(%rax) + .byte 0xc5,0x78,0x29,0x78,0x70 # vmovaps %xmm15, 0x70(%rax) +___ +$code.=<<___; + vmovdqa .LThree(%rip), $THREE + + vpxor $Ra, $Ra, $Ra + vpxor $Rb, $Rb, $Rb + + vmovdqa .LOne(%rip), $M0 + vmovdqa .LTwo(%rip), $M1 + vmovdqa .LThree(%rip), $M2 + + vmovd $index, %xmm1 + vpermd $INDEX, $Ra, $INDEX + # Skip index = 0, because it is implicitly the point at infinity + + mov \$21, %rax +.Lselect_loop_avx2_w7: + + vmovdqa 32*0($in_t), $T0a + vmovdqa 32*1($in_t), $T0b + + vmovdqa 32*2($in_t), $T1a + vmovdqa 32*3($in_t), $T1b + + vmovdqa 32*4($in_t), $T2a + vmovdqa 32*5($in_t), $T2b + + vpcmpeqd $INDEX, $M0, $TMP0 + vpcmpeqd $INDEX, $M1, $TMP1 + vpcmpeqd $INDEX, $M2, $TMP2 + + vpaddd $THREE, $M0, $M0 + vpaddd $THREE, $M1, $M1 + vpaddd $THREE, $M2, $M2 + lea 32*6($in_t), $in_t + + vpand $TMP0, $T0a, $T0a + vpand $TMP0, $T0b, $T0b + vpand $TMP1, $T1a, $T1a + vpand $TMP1, $T1b, $T1b + vpand $TMP2, $T2a, $T2a + vpand $TMP2, $T2b, $T2b + + vpxor $T0a, $Ra, $Ra + vpxor $T0b, $Rb, $Rb + vpxor $T1a, $Ra, $Ra + vpxor $T1b, $Rb, $Rb + vpxor $T2a, $Ra, $Ra + vpxor $T2b, $Rb, $Rb + + dec %rax + jnz .Lselect_loop_avx2_w7 + + + vmovdqa 32*0($in_t), $T0a + vmovdqa 32*1($in_t), $T0b + + vpcmpeqd $INDEX, $M0, $TMP0 + + vpand $TMP0, $T0a, $T0a + vpand $TMP0, $T0b, $T0b + + vpxor $T0a, $Ra, $Ra + vpxor $T0b, $Rb, $Rb + + vmovdqu $Ra, 32*0($val) + vmovdqu $Rb, 32*1($val) + vzeroupper +___ +$code.=<<___ if ($win64); + movaps (%rsp), %xmm6 + movaps 0x10(%rsp), %xmm7 + movaps 0x20(%rsp), %xmm8 + movaps 0x30(%rsp), %xmm9 + movaps 0x40(%rsp), %xmm10 + movaps 0x50(%rsp), %xmm11 + movaps 0x60(%rsp), %xmm12 + movaps 0x70(%rsp), %xmm13 + movaps 0x80(%rsp), %xmm14 + movaps 0x90(%rsp), %xmm15 + lea (%r11), %rsp +___ +$code.=<<___; + ret +.cfi_endproc +.LSEH_end_ecp_nistz256_avx2_select_w7: +.size ecp_nistz256_avx2_select_w7,.-ecp_nistz256_avx2_select_w7 +___ +} +{{{ +######################################################################## +# This block implements higher level point_double, point_add and +# point_add_affine. The key to performance in this case is to allow +# out-of-order execution logic to overlap computations from next step +# with tail processing from current step. By using tailored calling +# sequence we minimize inter-step overhead to give processor better +# shot at overlapping operations... +# +# You will notice that input data is copied to stack. Trouble is that +# there are no registers to spare for holding original pointers and +# reloading them, pointers, would create undesired dependencies on +# effective addresses calculation paths. In other words it's too done +# to favour out-of-order execution logic. +# + +my ($r_ptr,$a_ptr,$b_org,$b_ptr)=("%rdi","%rsi","%rdx","%rbx"); +my ($acc0,$acc1,$acc2,$acc3,$acc4,$acc5,$acc6,$acc7)=map("%r$_",(8..15)); +my ($t0,$t1,$t2,$t3,$t4)=("%rax","%rbp","%rcx",$acc4,$acc4); +my ($poly1,$poly3)=($acc6,$acc7); + +sub load_for_mul () { +my ($a,$b,$src0) = @_; +my $bias = $src0 eq "%rax" ? 0 : -128; + +" mov $b, $src0 + lea $b, $b_ptr + mov 8*0+$a, $acc1 + mov 8*1+$a, $acc2 + lea $bias+$a, $a_ptr + mov 8*2+$a, $acc3 + mov 8*3+$a, $acc4" +} + +sub load_for_sqr () { +my ($a,$src0) = @_; +my $bias = $src0 eq "%rax" ? 0 : -128; + +" mov 8*0+$a, $src0 + mov 8*1+$a, $acc6 + lea $bias+$a, $a_ptr + mov 8*2+$a, $acc7 + mov 8*3+$a, $acc0" +} + + { +######################################################################## +# operate in 4-5-0-1 "name space" that matches multiplication output +# +my ($a0,$a1,$a2,$a3,$t3,$t4)=($acc4,$acc5,$acc0,$acc1,$acc2,$acc3); + +$code.=<<___; +.type __ecp_nistz256_add_toq,\@abi-omnipotent +.align 32 +__ecp_nistz256_add_toq: +.cfi_startproc + xor $t4,$t4 + add 8*0($b_ptr), $a0 + adc 8*1($b_ptr), $a1 + mov $a0, $t0 + adc 8*2($b_ptr), $a2 + adc 8*3($b_ptr), $a3 + mov $a1, $t1 + adc \$0, $t4 + + sub \$-1, $a0 + mov $a2, $t2 + sbb $poly1, $a1 + sbb \$0, $a2 + mov $a3, $t3 + sbb $poly3, $a3 + sbb \$0, $t4 + + cmovc $t0, $a0 + cmovc $t1, $a1 + mov $a0, 8*0($r_ptr) + cmovc $t2, $a2 + mov $a1, 8*1($r_ptr) + cmovc $t3, $a3 + mov $a2, 8*2($r_ptr) + mov $a3, 8*3($r_ptr) + + ret +.cfi_endproc +.size __ecp_nistz256_add_toq,.-__ecp_nistz256_add_toq + +.type __ecp_nistz256_sub_fromq,\@abi-omnipotent +.align 32 +__ecp_nistz256_sub_fromq: +.cfi_startproc + sub 8*0($b_ptr), $a0 + sbb 8*1($b_ptr), $a1 + mov $a0, $t0 + sbb 8*2($b_ptr), $a2 + sbb 8*3($b_ptr), $a3 + mov $a1, $t1 + sbb $t4, $t4 + + add \$-1, $a0 + mov $a2, $t2 + adc $poly1, $a1 + adc \$0, $a2 + mov $a3, $t3 + adc $poly3, $a3 + test $t4, $t4 + + cmovz $t0, $a0 + cmovz $t1, $a1 + mov $a0, 8*0($r_ptr) + cmovz $t2, $a2 + mov $a1, 8*1($r_ptr) + cmovz $t3, $a3 + mov $a2, 8*2($r_ptr) + mov $a3, 8*3($r_ptr) + + ret +.cfi_endproc +.size __ecp_nistz256_sub_fromq,.-__ecp_nistz256_sub_fromq + +.type __ecp_nistz256_subq,\@abi-omnipotent +.align 32 +__ecp_nistz256_subq: +.cfi_startproc + sub $a0, $t0 + sbb $a1, $t1 + mov $t0, $a0 + sbb $a2, $t2 + sbb $a3, $t3 + mov $t1, $a1 + sbb $t4, $t4 + + add \$-1, $t0 + mov $t2, $a2 + adc $poly1, $t1 + adc \$0, $t2 + mov $t3, $a3 + adc $poly3, $t3 + test $t4, $t4 + + cmovnz $t0, $a0 + cmovnz $t1, $a1 + cmovnz $t2, $a2 + cmovnz $t3, $a3 + + ret +.cfi_endproc +.size __ecp_nistz256_subq,.-__ecp_nistz256_subq + +.type __ecp_nistz256_mul_by_2q,\@abi-omnipotent +.align 32 +__ecp_nistz256_mul_by_2q: +.cfi_startproc + xor $t4, $t4 + add $a0, $a0 # a0:a3+a0:a3 + adc $a1, $a1 + mov $a0, $t0 + adc $a2, $a2 + adc $a3, $a3 + mov $a1, $t1 + adc \$0, $t4 + + sub \$-1, $a0 + mov $a2, $t2 + sbb $poly1, $a1 + sbb \$0, $a2 + mov $a3, $t3 + sbb $poly3, $a3 + sbb \$0, $t4 + + cmovc $t0, $a0 + cmovc $t1, $a1 + mov $a0, 8*0($r_ptr) + cmovc $t2, $a2 + mov $a1, 8*1($r_ptr) + cmovc $t3, $a3 + mov $a2, 8*2($r_ptr) + mov $a3, 8*3($r_ptr) + + ret +.cfi_endproc +.size __ecp_nistz256_mul_by_2q,.-__ecp_nistz256_mul_by_2q +___ + } +sub gen_double () { + my $x = shift; + my ($src0,$sfx,$bias); + my ($S,$M,$Zsqr,$in_x,$tmp0)=map(32*$_,(0..4)); + + if ($x ne "x") { + $src0 = "%rax"; + $sfx = ""; + $bias = 0; + +$code.=<<___; +.globl GFp_p256_point_double +.type GFp_p256_point_double,\@function,2 +.align 32 +GFp_p256_point_double: +.cfi_startproc +___ +$code.=<<___ if ($addx); + leaq GFp_ia32cap_P(%rip), %rcx + mov 8(%rcx), %rcx + and \$0x80100, %ecx + cmp \$0x80100, %ecx + je .Lpoint_doublex +___ + } else { + $src0 = "%rdx"; + $sfx = "x"; + $bias = 128; + +$code.=<<___; +.type GFp_p256_point_doublex,\@function,2 +.align 32 +GFp_p256_point_doublex: +.cfi_startproc +.Lpoint_doublex: +___ + } +$code.=<<___; + push %rbp +.cfi_push %rbp + push %rbx +.cfi_push %rbx + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 + sub \$32*5+8, %rsp +.cfi_adjust_cfa_offset 32*5+8 +.Lpoint_double${x}_body: + +.Lpoint_double_shortcut$x: + movdqu 0x00($a_ptr), %xmm0 # copy *(P256_POINT *)$a_ptr.x + mov $a_ptr, $b_ptr # backup copy + movdqu 0x10($a_ptr), %xmm1 + mov 0x20+8*0($a_ptr), $acc4 # load in_y in "5-4-0-1" order + mov 0x20+8*1($a_ptr), $acc5 + mov 0x20+8*2($a_ptr), $acc0 + mov 0x20+8*3($a_ptr), $acc1 + mov .Lpoly+8*1(%rip), $poly1 + mov .Lpoly+8*3(%rip), $poly3 + movdqa %xmm0, $in_x(%rsp) + movdqa %xmm1, $in_x+0x10(%rsp) + lea 0x20($r_ptr), $acc2 + lea 0x40($r_ptr), $acc3 + movq $r_ptr, %xmm0 + movq $acc2, %xmm1 + movq $acc3, %xmm2 + + lea $S(%rsp), $r_ptr + call __ecp_nistz256_mul_by_2$x # p256_mul_by_2(S, in_y); + + mov 0x40+8*0($a_ptr), $src0 + mov 0x40+8*1($a_ptr), $acc6 + mov 0x40+8*2($a_ptr), $acc7 + mov 0x40+8*3($a_ptr), $acc0 + lea 0x40-$bias($a_ptr), $a_ptr + lea $Zsqr(%rsp), $r_ptr + call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(Zsqr, in_z); + + `&load_for_sqr("$S(%rsp)", "$src0")` + lea $S(%rsp), $r_ptr + call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(S, S); + + mov 0x20($b_ptr), $src0 # $b_ptr is still valid + mov 0x40+8*0($b_ptr), $acc1 + mov 0x40+8*1($b_ptr), $acc2 + mov 0x40+8*2($b_ptr), $acc3 + mov 0x40+8*3($b_ptr), $acc4 + lea 0x40-$bias($b_ptr), $a_ptr + lea 0x20($b_ptr), $b_ptr + movq %xmm2, $r_ptr + call __ecp_nistz256_mul_mont$x # p256_mul_mont(res_z, in_z, in_y); + call __ecp_nistz256_mul_by_2$x # p256_mul_by_2(res_z, res_z); + + mov $in_x+8*0(%rsp), $acc4 # "5-4-0-1" order + mov $in_x+8*1(%rsp), $acc5 + lea $Zsqr(%rsp), $b_ptr + mov $in_x+8*2(%rsp), $acc0 + mov $in_x+8*3(%rsp), $acc1 + lea $M(%rsp), $r_ptr + call __ecp_nistz256_add_to$x # p256_add(M, in_x, Zsqr); + + mov $in_x+8*0(%rsp), $acc4 # "5-4-0-1" order + mov $in_x+8*1(%rsp), $acc5 + lea $Zsqr(%rsp), $b_ptr + mov $in_x+8*2(%rsp), $acc0 + mov $in_x+8*3(%rsp), $acc1 + lea $Zsqr(%rsp), $r_ptr + call __ecp_nistz256_sub_from$x # p256_sub(Zsqr, in_x, Zsqr); + + `&load_for_sqr("$S(%rsp)", "$src0")` + movq %xmm1, $r_ptr + call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(res_y, S); +___ +{ +######## ecp_nistz256_div_by_2(res_y, res_y); ########################## +# operate in 4-5-6-7 "name space" that matches squaring output +# +my ($poly1,$poly3)=($a_ptr,$t1); +my ($a0,$a1,$a2,$a3,$t3,$t4,$t1)=($acc4,$acc5,$acc6,$acc7,$acc0,$acc1,$acc2); + +$code.=<<___; + xor $t4, $t4 + mov $a0, $t0 + add \$-1, $a0 + mov $a1, $t1 + adc $poly1, $a1 + mov $a2, $t2 + adc \$0, $a2 + mov $a3, $t3 + adc $poly3, $a3 + adc \$0, $t4 + xor $a_ptr, $a_ptr # borrow $a_ptr + test \$1, $t0 + + cmovz $t0, $a0 + cmovz $t1, $a1 + cmovz $t2, $a2 + cmovz $t3, $a3 + cmovz $a_ptr, $t4 + + mov $a1, $t0 # a0:a3>>1 + shr \$1, $a0 + shl \$63, $t0 + mov $a2, $t1 + shr \$1, $a1 + or $t0, $a0 + shl \$63, $t1 + mov $a3, $t2 + shr \$1, $a2 + or $t1, $a1 + shl \$63, $t2 + mov $a0, 8*0($r_ptr) + shr \$1, $a3 + mov $a1, 8*1($r_ptr) + shl \$63, $t4 + or $t2, $a2 + or $t4, $a3 + mov $a2, 8*2($r_ptr) + mov $a3, 8*3($r_ptr) +___ +} +$code.=<<___; + `&load_for_mul("$M(%rsp)", "$Zsqr(%rsp)", "$src0")` + lea $M(%rsp), $r_ptr + call __ecp_nistz256_mul_mont$x # p256_mul_mont(M, M, Zsqr); + + lea $tmp0(%rsp), $r_ptr + call __ecp_nistz256_mul_by_2$x + + lea $M(%rsp), $b_ptr + lea $M(%rsp), $r_ptr + call __ecp_nistz256_add_to$x # p256_mul_by_3(M, M); + + `&load_for_mul("$S(%rsp)", "$in_x(%rsp)", "$src0")` + lea $S(%rsp), $r_ptr + call __ecp_nistz256_mul_mont$x # p256_mul_mont(S, S, in_x); + + lea $tmp0(%rsp), $r_ptr + call __ecp_nistz256_mul_by_2$x # p256_mul_by_2(tmp0, S); + + `&load_for_sqr("$M(%rsp)", "$src0")` + movq %xmm0, $r_ptr + call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(res_x, M); + + lea $tmp0(%rsp), $b_ptr + mov $acc6, $acc0 # harmonize sqr output and sub input + mov $acc7, $acc1 + mov $a_ptr, $poly1 + mov $t1, $poly3 + call __ecp_nistz256_sub_from$x # p256_sub(res_x, res_x, tmp0); + + mov $S+8*0(%rsp), $t0 + mov $S+8*1(%rsp), $t1 + mov $S+8*2(%rsp), $t2 + mov $S+8*3(%rsp), $acc2 # "4-5-0-1" order + lea $S(%rsp), $r_ptr + call __ecp_nistz256_sub$x # p256_sub(S, S, res_x); + + mov $M(%rsp), $src0 + lea $M(%rsp), $b_ptr + mov $acc4, $acc6 # harmonize sub output and mul input + xor %ecx, %ecx + mov $acc4, $S+8*0(%rsp) # have to save:-( + mov $acc5, $acc2 + mov $acc5, $S+8*1(%rsp) + cmovz $acc0, $acc3 + mov $acc0, $S+8*2(%rsp) + lea $S-$bias(%rsp), $a_ptr + cmovz $acc1, $acc4 + mov $acc1, $S+8*3(%rsp) + mov $acc6, $acc1 + lea $S(%rsp), $r_ptr + call __ecp_nistz256_mul_mont$x # p256_mul_mont(S, S, M); + + movq %xmm1, $b_ptr + movq %xmm1, $r_ptr + call __ecp_nistz256_sub_from$x # p256_sub(res_y, S, res_y); + + lea 32*5+56(%rsp), %rsi +.cfi_def_cfa %rsi,8 + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbx +.cfi_restore %rbx + mov -8(%rsi),%rbp +.cfi_restore %rbp + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lpoint_double${x}_epilogue: + ret +.cfi_endproc +.size GFp_p256_point_double$sfx,.-GFp_p256_point_double$sfx +___ +} +&gen_double("q"); + +sub gen_add () { + my $x = shift; + my ($src0,$sfx,$bias); + my ($H,$Hsqr,$R,$Rsqr,$Hcub, + $U1,$U2,$S1,$S2, + $res_x,$res_y,$res_z, + $in1_x,$in1_y,$in1_z, + $in2_x,$in2_y,$in2_z)=map(32*$_,(0..17)); + my ($Z1sqr, $Z2sqr) = ($Hsqr, $Rsqr); + + if ($x ne "x") { + $src0 = "%rax"; + $sfx = ""; + $bias = 0; + +$code.=<<___; +.globl GFp_p256_point_add +.type GFp_p256_point_add,\@function,3 +.align 32 +GFp_p256_point_add: +.cfi_startproc +___ +$code.=<<___ if ($addx); + leaq GFp_ia32cap_P(%rip), %rcx + mov 8(%rcx), %rcx + and \$0x80100, %ecx + cmp \$0x80100, %ecx + je .Lpoint_addx +___ + } else { + $src0 = "%rdx"; + $sfx = "x"; + $bias = 128; + +$code.=<<___; +.type GFp_p256_point_addx,\@function,3 +.align 32 +GFp_p256_point_addx: +.cfi_startproc +.Lpoint_addx: +___ + } +$code.=<<___; + push %rbp +.cfi_push %rbp + push %rbx +.cfi_push %rbx + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 + sub \$32*18+8, %rsp +.cfi_adjust_cfa_offset 32*18+8 +.Lpoint_add${x}_body: + + movdqu 0x00($a_ptr), %xmm0 # copy *(P256_POINT *)$a_ptr + movdqu 0x10($a_ptr), %xmm1 + movdqu 0x20($a_ptr), %xmm2 + movdqu 0x30($a_ptr), %xmm3 + movdqu 0x40($a_ptr), %xmm4 + movdqu 0x50($a_ptr), %xmm5 + mov $a_ptr, $b_ptr # reassign + mov $b_org, $a_ptr # reassign + movdqa %xmm0, $in1_x(%rsp) + movdqa %xmm1, $in1_x+0x10(%rsp) + movdqa %xmm2, $in1_y(%rsp) + movdqa %xmm3, $in1_y+0x10(%rsp) + movdqa %xmm4, $in1_z(%rsp) + movdqa %xmm5, $in1_z+0x10(%rsp) + por %xmm4, %xmm5 + + movdqu 0x00($a_ptr), %xmm0 # copy *(P256_POINT *)$b_ptr + pshufd \$0xb1, %xmm5, %xmm3 + movdqu 0x10($a_ptr), %xmm1 + movdqu 0x20($a_ptr), %xmm2 + por %xmm3, %xmm5 + movdqu 0x30($a_ptr), %xmm3 + mov 0x40+8*0($a_ptr), $src0 # load original in2_z + mov 0x40+8*1($a_ptr), $acc6 + mov 0x40+8*2($a_ptr), $acc7 + mov 0x40+8*3($a_ptr), $acc0 + movdqa %xmm0, $in2_x(%rsp) + pshufd \$0x1e, %xmm5, %xmm4 + movdqa %xmm1, $in2_x+0x10(%rsp) + movdqu 0x40($a_ptr),%xmm0 # in2_z again + movdqu 0x50($a_ptr),%xmm1 + movdqa %xmm2, $in2_y(%rsp) + movdqa %xmm3, $in2_y+0x10(%rsp) + por %xmm4, %xmm5 + pxor %xmm4, %xmm4 + por %xmm0, %xmm1 + movq $r_ptr, %xmm0 # save $r_ptr + + lea 0x40-$bias($a_ptr), $a_ptr # $a_ptr is still valid + mov $src0, $in2_z+8*0(%rsp) # make in2_z copy + mov $acc6, $in2_z+8*1(%rsp) + mov $acc7, $in2_z+8*2(%rsp) + mov $acc0, $in2_z+8*3(%rsp) + lea $Z2sqr(%rsp), $r_ptr # Z2^2 + call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(Z2sqr, in2_z); + + pcmpeqd %xmm4, %xmm5 + pshufd \$0xb1, %xmm1, %xmm4 + por %xmm1, %xmm4 + pshufd \$0, %xmm5, %xmm5 # in1infty + pshufd \$0x1e, %xmm4, %xmm3 + por %xmm3, %xmm4 + pxor %xmm3, %xmm3 + pcmpeqd %xmm3, %xmm4 + pshufd \$0, %xmm4, %xmm4 # in2infty + mov 0x40+8*0($b_ptr), $src0 # load original in1_z + mov 0x40+8*1($b_ptr), $acc6 + mov 0x40+8*2($b_ptr), $acc7 + mov 0x40+8*3($b_ptr), $acc0 + movq $b_ptr, %xmm1 + + lea 0x40-$bias($b_ptr), $a_ptr + lea $Z1sqr(%rsp), $r_ptr # Z1^2 + call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(Z1sqr, in1_z); + + `&load_for_mul("$Z2sqr(%rsp)", "$in2_z(%rsp)", "$src0")` + lea $S1(%rsp), $r_ptr # S1 = Z2^3 + call __ecp_nistz256_mul_mont$x # p256_mul_mont(S1, Z2sqr, in2_z); + + `&load_for_mul("$Z1sqr(%rsp)", "$in1_z(%rsp)", "$src0")` + lea $S2(%rsp), $r_ptr # S2 = Z1^3 + call __ecp_nistz256_mul_mont$x # p256_mul_mont(S2, Z1sqr, in1_z); + + `&load_for_mul("$S1(%rsp)", "$in1_y(%rsp)", "$src0")` + lea $S1(%rsp), $r_ptr # S1 = Y1*Z2^3 + call __ecp_nistz256_mul_mont$x # p256_mul_mont(S1, S1, in1_y); + + `&load_for_mul("$S2(%rsp)", "$in2_y(%rsp)", "$src0")` + lea $S2(%rsp), $r_ptr # S2 = Y2*Z1^3 + call __ecp_nistz256_mul_mont$x # p256_mul_mont(S2, S2, in2_y); + + lea $S1(%rsp), $b_ptr + lea $R(%rsp), $r_ptr # R = S2 - S1 + call __ecp_nistz256_sub_from$x # p256_sub(R, S2, S1); + + or $acc5, $acc4 # see if result is zero + movdqa %xmm4, %xmm2 + or $acc0, $acc4 + or $acc1, $acc4 + por %xmm5, %xmm2 # in1infty || in2infty + movq $acc4, %xmm3 + + `&load_for_mul("$Z2sqr(%rsp)", "$in1_x(%rsp)", "$src0")` + lea $U1(%rsp), $r_ptr # U1 = X1*Z2^2 + call __ecp_nistz256_mul_mont$x # p256_mul_mont(U1, in1_x, Z2sqr); + + `&load_for_mul("$Z1sqr(%rsp)", "$in2_x(%rsp)", "$src0")` + lea $U2(%rsp), $r_ptr # U2 = X2*Z1^2 + call __ecp_nistz256_mul_mont$x # p256_mul_mont(U2, in2_x, Z1sqr); + + lea $U1(%rsp), $b_ptr + lea $H(%rsp), $r_ptr # H = U2 - U1 + call __ecp_nistz256_sub_from$x # p256_sub(H, U2, U1); + + or $acc5, $acc4 # see if result is zero + or $acc0, $acc4 + or $acc1, $acc4 # !is_equal(U1, U2) + + movq %xmm2, $acc0 + movq %xmm3, $acc1 + or $acc0, $acc4 + .byte 0x3e # predict taken + jnz .Ladd_proceed$x # !is_equal(U1, U2) || in1infty || in2infty + + # We now know A = B or A = -B and neither is infinity. Compare the + # y-coordinates via S1 and S2. + test $acc1, $acc1 + jz .Ladd_double$x # is_equal(S1, S2) + + # A = -B, so the result is infinity. + # + # TODO(davidben): Does .Ladd_proceed handle this case? It seems to, in + # which case we should eliminate this special-case and simplify the + # timing analysis. + movq %xmm0, $r_ptr # restore $r_ptr + pxor %xmm0, %xmm0 + movdqu %xmm0, 0x00($r_ptr) + movdqu %xmm0, 0x10($r_ptr) + movdqu %xmm0, 0x20($r_ptr) + movdqu %xmm0, 0x30($r_ptr) + movdqu %xmm0, 0x40($r_ptr) + movdqu %xmm0, 0x50($r_ptr) + jmp .Ladd_done$x + +.align 32 +.Ladd_double$x: + movq %xmm1, $a_ptr # restore $a_ptr + movq %xmm0, $r_ptr # restore $r_ptr + add \$`32*(18-5)`, %rsp # difference in frame sizes +.cfi_adjust_cfa_offset `-32*(18-5)` + jmp .Lpoint_double_shortcut$x +.cfi_adjust_cfa_offset `32*(18-5)` + +.align 32 +.Ladd_proceed$x: + `&load_for_sqr("$R(%rsp)", "$src0")` + lea $Rsqr(%rsp), $r_ptr # R^2 + call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(Rsqr, R); + + `&load_for_mul("$H(%rsp)", "$in1_z(%rsp)", "$src0")` + lea $res_z(%rsp), $r_ptr # Z3 = H*Z1*Z2 + call __ecp_nistz256_mul_mont$x # p256_mul_mont(res_z, H, in1_z); + + `&load_for_sqr("$H(%rsp)", "$src0")` + lea $Hsqr(%rsp), $r_ptr # H^2 + call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(Hsqr, H); + + `&load_for_mul("$res_z(%rsp)", "$in2_z(%rsp)", "$src0")` + lea $res_z(%rsp), $r_ptr # Z3 = H*Z1*Z2 + call __ecp_nistz256_mul_mont$x # p256_mul_mont(res_z, res_z, in2_z); + + `&load_for_mul("$Hsqr(%rsp)", "$H(%rsp)", "$src0")` + lea $Hcub(%rsp), $r_ptr # H^3 + call __ecp_nistz256_mul_mont$x # p256_mul_mont(Hcub, Hsqr, H); + + `&load_for_mul("$Hsqr(%rsp)", "$U1(%rsp)", "$src0")` + lea $U2(%rsp), $r_ptr # U1*H^2 + call __ecp_nistz256_mul_mont$x # p256_mul_mont(U2, U1, Hsqr); +___ +{ +####################################################################### +# operate in 4-5-0-1 "name space" that matches multiplication output +# +my ($acc0,$acc1,$acc2,$acc3,$t3,$t4)=($acc4,$acc5,$acc0,$acc1,$acc2,$acc3); +my ($poly1, $poly3)=($acc6,$acc7); + +$code.=<<___; + #lea $U2(%rsp), $a_ptr + #lea $Hsqr(%rsp), $r_ptr # 2*U1*H^2 + #call __ecp_nistz256_mul_by_2 # ecp_nistz256_mul_by_2(Hsqr, U2); + + xor $t4, $t4 + add $acc0, $acc0 # a0:a3+a0:a3 + lea $Rsqr(%rsp), $a_ptr + adc $acc1, $acc1 + mov $acc0, $t0 + adc $acc2, $acc2 + adc $acc3, $acc3 + mov $acc1, $t1 + adc \$0, $t4 + + sub \$-1, $acc0 + mov $acc2, $t2 + sbb $poly1, $acc1 + sbb \$0, $acc2 + mov $acc3, $t3 + sbb $poly3, $acc3 + sbb \$0, $t4 + + cmovc $t0, $acc0 + mov 8*0($a_ptr), $t0 + cmovc $t1, $acc1 + mov 8*1($a_ptr), $t1 + cmovc $t2, $acc2 + mov 8*2($a_ptr), $t2 + cmovc $t3, $acc3 + mov 8*3($a_ptr), $t3 + + call __ecp_nistz256_sub$x # p256_sub(res_x, Rsqr, Hsqr); + + lea $Hcub(%rsp), $b_ptr + lea $res_x(%rsp), $r_ptr + call __ecp_nistz256_sub_from$x # p256_sub(res_x, res_x, Hcub); + + mov $U2+8*0(%rsp), $t0 + mov $U2+8*1(%rsp), $t1 + mov $U2+8*2(%rsp), $t2 + mov $U2+8*3(%rsp), $t3 + lea $res_y(%rsp), $r_ptr + + call __ecp_nistz256_sub$x # p256_sub(res_y, U2, res_x); + + mov $acc0, 8*0($r_ptr) # save the result, as + mov $acc1, 8*1($r_ptr) # __ecp_nistz256_sub doesn't + mov $acc2, 8*2($r_ptr) + mov $acc3, 8*3($r_ptr) +___ +} +$code.=<<___; + `&load_for_mul("$S1(%rsp)", "$Hcub(%rsp)", "$src0")` + lea $S2(%rsp), $r_ptr + call __ecp_nistz256_mul_mont$x # p256_mul_mont(S2, S1, Hcub); + + `&load_for_mul("$R(%rsp)", "$res_y(%rsp)", "$src0")` + lea $res_y(%rsp), $r_ptr + call __ecp_nistz256_mul_mont$x # p256_mul_mont(res_y, R, res_y); + + lea $S2(%rsp), $b_ptr + lea $res_y(%rsp), $r_ptr + call __ecp_nistz256_sub_from$x # p256_sub(res_y, res_y, S2); + + movq %xmm0, $r_ptr # restore $r_ptr + + movdqa %xmm5, %xmm0 # copy_conditional(res_z, in2_z, in1infty); + movdqa %xmm5, %xmm1 + pandn $res_z(%rsp), %xmm0 + movdqa %xmm5, %xmm2 + pandn $res_z+0x10(%rsp), %xmm1 + movdqa %xmm5, %xmm3 + pand $in2_z(%rsp), %xmm2 + pand $in2_z+0x10(%rsp), %xmm3 + por %xmm0, %xmm2 + por %xmm1, %xmm3 + + movdqa %xmm4, %xmm0 # copy_conditional(res_z, in1_z, in2infty); + movdqa %xmm4, %xmm1 + pandn %xmm2, %xmm0 + movdqa %xmm4, %xmm2 + pandn %xmm3, %xmm1 + movdqa %xmm4, %xmm3 + pand $in1_z(%rsp), %xmm2 + pand $in1_z+0x10(%rsp), %xmm3 + por %xmm0, %xmm2 + por %xmm1, %xmm3 + movdqu %xmm2, 0x40($r_ptr) + movdqu %xmm3, 0x50($r_ptr) + + movdqa %xmm5, %xmm0 # copy_conditional(res_x, in2_x, in1infty); + movdqa %xmm5, %xmm1 + pandn $res_x(%rsp), %xmm0 + movdqa %xmm5, %xmm2 + pandn $res_x+0x10(%rsp), %xmm1 + movdqa %xmm5, %xmm3 + pand $in2_x(%rsp), %xmm2 + pand $in2_x+0x10(%rsp), %xmm3 + por %xmm0, %xmm2 + por %xmm1, %xmm3 + + movdqa %xmm4, %xmm0 # copy_conditional(res_x, in1_x, in2infty); + movdqa %xmm4, %xmm1 + pandn %xmm2, %xmm0 + movdqa %xmm4, %xmm2 + pandn %xmm3, %xmm1 + movdqa %xmm4, %xmm3 + pand $in1_x(%rsp), %xmm2 + pand $in1_x+0x10(%rsp), %xmm3 + por %xmm0, %xmm2 + por %xmm1, %xmm3 + movdqu %xmm2, 0x00($r_ptr) + movdqu %xmm3, 0x10($r_ptr) + + movdqa %xmm5, %xmm0 # copy_conditional(res_y, in2_y, in1infty); + movdqa %xmm5, %xmm1 + pandn $res_y(%rsp), %xmm0 + movdqa %xmm5, %xmm2 + pandn $res_y+0x10(%rsp), %xmm1 + movdqa %xmm5, %xmm3 + pand $in2_y(%rsp), %xmm2 + pand $in2_y+0x10(%rsp), %xmm3 + por %xmm0, %xmm2 + por %xmm1, %xmm3 + + movdqa %xmm4, %xmm0 # copy_conditional(res_y, in1_y, in2infty); + movdqa %xmm4, %xmm1 + pandn %xmm2, %xmm0 + movdqa %xmm4, %xmm2 + pandn %xmm3, %xmm1 + movdqa %xmm4, %xmm3 + pand $in1_y(%rsp), %xmm2 + pand $in1_y+0x10(%rsp), %xmm3 + por %xmm0, %xmm2 + por %xmm1, %xmm3 + movdqu %xmm2, 0x20($r_ptr) + movdqu %xmm3, 0x30($r_ptr) + +.Ladd_done$x: + lea 32*18+56(%rsp), %rsi +.cfi_def_cfa %rsi,8 + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbx +.cfi_restore %rbx + mov -8(%rsi),%rbp +.cfi_restore %rbp + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lpoint_add${x}_epilogue: + ret +.cfi_endproc +.size GFp_p256_point_add$sfx,.-GFp_p256_point_add$sfx +___ +} +&gen_add("q"); + +sub gen_add_affine () { + my $x = shift; + my ($src0,$sfx,$bias); + my ($U2,$S2,$H,$R,$Hsqr,$Hcub,$Rsqr, + $res_x,$res_y,$res_z, + $in1_x,$in1_y,$in1_z, + $in2_x,$in2_y)=map(32*$_,(0..14)); + my $Z1sqr = $S2; + + if ($x ne "x") { + $src0 = "%rax"; + $sfx = ""; + $bias = 0; + +$code.=<<___; +.globl GFp_p256_point_add_affine +.type GFp_p256_point_add_affine,\@function,3 +.align 32 +GFp_p256_point_add_affine: +.cfi_startproc +___ +$code.=<<___ if ($addx); + leaq GFp_ia32cap_P(%rip), %rcx + mov 8(%rcx), %rcx + and \$0x80100, %ecx + cmp \$0x80100, %ecx + je .Lpoint_add_affinex +___ + } else { + $src0 = "%rdx"; + $sfx = "x"; + $bias = 128; + +$code.=<<___; +.type GFp_p256_point_add_affinex,\@function,3 +.align 32 +GFp_p256_point_add_affinex: +.cfi_startproc +.Lpoint_add_affinex: +___ + } +$code.=<<___; + push %rbp +.cfi_push %rbp + push %rbx +.cfi_push %rbx + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 + sub \$32*15+8, %rsp +.cfi_adjust_cfa_offset 32*15+8 +.Ladd_affine${x}_body: + + movdqu 0x00($a_ptr), %xmm0 # copy *(P256_POINT *)$a_ptr + mov $b_org, $b_ptr # reassign + movdqu 0x10($a_ptr), %xmm1 + movdqu 0x20($a_ptr), %xmm2 + movdqu 0x30($a_ptr), %xmm3 + movdqu 0x40($a_ptr), %xmm4 + movdqu 0x50($a_ptr), %xmm5 + mov 0x40+8*0($a_ptr), $src0 # load original in1_z + mov 0x40+8*1($a_ptr), $acc6 + mov 0x40+8*2($a_ptr), $acc7 + mov 0x40+8*3($a_ptr), $acc0 + movdqa %xmm0, $in1_x(%rsp) + movdqa %xmm1, $in1_x+0x10(%rsp) + movdqa %xmm2, $in1_y(%rsp) + movdqa %xmm3, $in1_y+0x10(%rsp) + movdqa %xmm4, $in1_z(%rsp) + movdqa %xmm5, $in1_z+0x10(%rsp) + por %xmm4, %xmm5 + + movdqu 0x00($b_ptr), %xmm0 # copy *(P256_POINT_AFFINE *)$b_ptr + pshufd \$0xb1, %xmm5, %xmm3 + movdqu 0x10($b_ptr), %xmm1 + movdqu 0x20($b_ptr), %xmm2 + por %xmm3, %xmm5 + movdqu 0x30($b_ptr), %xmm3 + movdqa %xmm0, $in2_x(%rsp) + pshufd \$0x1e, %xmm5, %xmm4 + movdqa %xmm1, $in2_x+0x10(%rsp) + por %xmm0, %xmm1 + movq $r_ptr, %xmm0 # save $r_ptr + movdqa %xmm2, $in2_y(%rsp) + movdqa %xmm3, $in2_y+0x10(%rsp) + por %xmm2, %xmm3 + por %xmm4, %xmm5 + pxor %xmm4, %xmm4 + por %xmm1, %xmm3 + + lea 0x40-$bias($a_ptr), $a_ptr # $a_ptr is still valid + lea $Z1sqr(%rsp), $r_ptr # Z1^2 + call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(Z1sqr, in1_z); + + pcmpeqd %xmm4, %xmm5 + pshufd \$0xb1, %xmm3, %xmm4 + mov 0x00($b_ptr), $src0 # $b_ptr is still valid + #lea 0x00($b_ptr), $b_ptr + mov $acc4, $acc1 # harmonize sqr output and mul input + por %xmm3, %xmm4 + pshufd \$0, %xmm5, %xmm5 # in1infty + pshufd \$0x1e, %xmm4, %xmm3 + mov $acc5, $acc2 + por %xmm3, %xmm4 + pxor %xmm3, %xmm3 + mov $acc6, $acc3 + pcmpeqd %xmm3, %xmm4 + pshufd \$0, %xmm4, %xmm4 # in2infty + + lea $Z1sqr-$bias(%rsp), $a_ptr + mov $acc7, $acc4 + lea $U2(%rsp), $r_ptr # U2 = X2*Z1^2 + call __ecp_nistz256_mul_mont$x # p256_mul_mont(U2, Z1sqr, in2_x); + + lea $in1_x(%rsp), $b_ptr + lea $H(%rsp), $r_ptr # H = U2 - U1 + call __ecp_nistz256_sub_from$x # p256_sub(H, U2, in1_x); + + `&load_for_mul("$Z1sqr(%rsp)", "$in1_z(%rsp)", "$src0")` + lea $S2(%rsp), $r_ptr # S2 = Z1^3 + call __ecp_nistz256_mul_mont$x # p256_mul_mont(S2, Z1sqr, in1_z); + + `&load_for_mul("$H(%rsp)", "$in1_z(%rsp)", "$src0")` + lea $res_z(%rsp), $r_ptr # Z3 = H*Z1*Z2 + call __ecp_nistz256_mul_mont$x # p256_mul_mont(res_z, H, in1_z); + + `&load_for_mul("$S2(%rsp)", "$in2_y(%rsp)", "$src0")` + lea $S2(%rsp), $r_ptr # S2 = Y2*Z1^3 + call __ecp_nistz256_mul_mont$x # p256_mul_mont(S2, S2, in2_y); + + lea $in1_y(%rsp), $b_ptr + lea $R(%rsp), $r_ptr # R = S2 - S1 + call __ecp_nistz256_sub_from$x # p256_sub(R, S2, in1_y); + + `&load_for_sqr("$H(%rsp)", "$src0")` + lea $Hsqr(%rsp), $r_ptr # H^2 + call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(Hsqr, H); + + `&load_for_sqr("$R(%rsp)", "$src0")` + lea $Rsqr(%rsp), $r_ptr # R^2 + call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(Rsqr, R); + + `&load_for_mul("$H(%rsp)", "$Hsqr(%rsp)", "$src0")` + lea $Hcub(%rsp), $r_ptr # H^3 + call __ecp_nistz256_mul_mont$x # p256_mul_mont(Hcub, Hsqr, H); + + `&load_for_mul("$Hsqr(%rsp)", "$in1_x(%rsp)", "$src0")` + lea $U2(%rsp), $r_ptr # U1*H^2 + call __ecp_nistz256_mul_mont$x # p256_mul_mont(U2, in1_x, Hsqr); +___ +{ +####################################################################### +# operate in 4-5-0-1 "name space" that matches multiplication output +# +my ($acc0,$acc1,$acc2,$acc3,$t3,$t4)=($acc4,$acc5,$acc0,$acc1,$acc2,$acc3); +my ($poly1, $poly3)=($acc6,$acc7); + +$code.=<<___; + #lea $U2(%rsp), $a_ptr + #lea $Hsqr(%rsp), $r_ptr # 2*U1*H^2 + #call __ecp_nistz256_mul_by_2 # ecp_nistz256_mul_by_2(Hsqr, U2); + + xor $t4, $t4 + add $acc0, $acc0 # a0:a3+a0:a3 + lea $Rsqr(%rsp), $a_ptr + adc $acc1, $acc1 + mov $acc0, $t0 + adc $acc2, $acc2 + adc $acc3, $acc3 + mov $acc1, $t1 + adc \$0, $t4 + + sub \$-1, $acc0 + mov $acc2, $t2 + sbb $poly1, $acc1 + sbb \$0, $acc2 + mov $acc3, $t3 + sbb $poly3, $acc3 + sbb \$0, $t4 + + cmovc $t0, $acc0 + mov 8*0($a_ptr), $t0 + cmovc $t1, $acc1 + mov 8*1($a_ptr), $t1 + cmovc $t2, $acc2 + mov 8*2($a_ptr), $t2 + cmovc $t3, $acc3 + mov 8*3($a_ptr), $t3 + + call __ecp_nistz256_sub$x # p256_sub(res_x, Rsqr, Hsqr); + + lea $Hcub(%rsp), $b_ptr + lea $res_x(%rsp), $r_ptr + call __ecp_nistz256_sub_from$x # p256_sub(res_x, res_x, Hcub); + + mov $U2+8*0(%rsp), $t0 + mov $U2+8*1(%rsp), $t1 + mov $U2+8*2(%rsp), $t2 + mov $U2+8*3(%rsp), $t3 + lea $H(%rsp), $r_ptr + + call __ecp_nistz256_sub$x # p256_sub(H, U2, res_x); + + mov $acc0, 8*0($r_ptr) # save the result, as + mov $acc1, 8*1($r_ptr) # __ecp_nistz256_sub doesn't + mov $acc2, 8*2($r_ptr) + mov $acc3, 8*3($r_ptr) +___ +} +$code.=<<___; + `&load_for_mul("$Hcub(%rsp)", "$in1_y(%rsp)", "$src0")` + lea $S2(%rsp), $r_ptr + call __ecp_nistz256_mul_mont$x # p256_mul_mont(S2, Hcub, in1_y); + + `&load_for_mul("$H(%rsp)", "$R(%rsp)", "$src0")` + lea $H(%rsp), $r_ptr + call __ecp_nistz256_mul_mont$x # p256_mul_mont(H, H, R); + + lea $S2(%rsp), $b_ptr + lea $res_y(%rsp), $r_ptr + call __ecp_nistz256_sub_from$x # p256_sub(res_y, H, S2); + + movq %xmm0, $r_ptr # restore $r_ptr + + movdqa %xmm5, %xmm0 # copy_conditional(res_z, ONE, in1infty); + movdqa %xmm5, %xmm1 + pandn $res_z(%rsp), %xmm0 + movdqa %xmm5, %xmm2 + pandn $res_z+0x10(%rsp), %xmm1 + movdqa %xmm5, %xmm3 + pand .LONE_mont(%rip), %xmm2 + pand .LONE_mont+0x10(%rip), %xmm3 + por %xmm0, %xmm2 + por %xmm1, %xmm3 + + movdqa %xmm4, %xmm0 # copy_conditional(res_z, in1_z, in2infty); + movdqa %xmm4, %xmm1 + pandn %xmm2, %xmm0 + movdqa %xmm4, %xmm2 + pandn %xmm3, %xmm1 + movdqa %xmm4, %xmm3 + pand $in1_z(%rsp), %xmm2 + pand $in1_z+0x10(%rsp), %xmm3 + por %xmm0, %xmm2 + por %xmm1, %xmm3 + movdqu %xmm2, 0x40($r_ptr) + movdqu %xmm3, 0x50($r_ptr) + + movdqa %xmm5, %xmm0 # copy_conditional(res_x, in2_x, in1infty); + movdqa %xmm5, %xmm1 + pandn $res_x(%rsp), %xmm0 + movdqa %xmm5, %xmm2 + pandn $res_x+0x10(%rsp), %xmm1 + movdqa %xmm5, %xmm3 + pand $in2_x(%rsp), %xmm2 + pand $in2_x+0x10(%rsp), %xmm3 + por %xmm0, %xmm2 + por %xmm1, %xmm3 + + movdqa %xmm4, %xmm0 # copy_conditional(res_x, in1_x, in2infty); + movdqa %xmm4, %xmm1 + pandn %xmm2, %xmm0 + movdqa %xmm4, %xmm2 + pandn %xmm3, %xmm1 + movdqa %xmm4, %xmm3 + pand $in1_x(%rsp), %xmm2 + pand $in1_x+0x10(%rsp), %xmm3 + por %xmm0, %xmm2 + por %xmm1, %xmm3 + movdqu %xmm2, 0x00($r_ptr) + movdqu %xmm3, 0x10($r_ptr) + + movdqa %xmm5, %xmm0 # copy_conditional(res_y, in2_y, in1infty); + movdqa %xmm5, %xmm1 + pandn $res_y(%rsp), %xmm0 + movdqa %xmm5, %xmm2 + pandn $res_y+0x10(%rsp), %xmm1 + movdqa %xmm5, %xmm3 + pand $in2_y(%rsp), %xmm2 + pand $in2_y+0x10(%rsp), %xmm3 + por %xmm0, %xmm2 + por %xmm1, %xmm3 + + movdqa %xmm4, %xmm0 # copy_conditional(res_y, in1_y, in2infty); + movdqa %xmm4, %xmm1 + pandn %xmm2, %xmm0 + movdqa %xmm4, %xmm2 + pandn %xmm3, %xmm1 + movdqa %xmm4, %xmm3 + pand $in1_y(%rsp), %xmm2 + pand $in1_y+0x10(%rsp), %xmm3 + por %xmm0, %xmm2 + por %xmm1, %xmm3 + movdqu %xmm2, 0x20($r_ptr) + movdqu %xmm3, 0x30($r_ptr) + + lea 32*15+56(%rsp), %rsi +.cfi_def_cfa %rsi,8 + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbx +.cfi_restore %rbx + mov -8(%rsi),%rbp +.cfi_restore %rbp + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Ladd_affine${x}_epilogue: + ret +.cfi_endproc +.size GFp_p256_point_add_affine$sfx,.-GFp_p256_point_add_affine$sfx +___ +} +&gen_add_affine("q"); + +######################################################################## +# AD*X magic +# +if ($addx) { { +######################################################################## +# operate in 4-5-0-1 "name space" that matches multiplication output +# +my ($a0,$a1,$a2,$a3,$t3,$t4)=($acc4,$acc5,$acc0,$acc1,$acc2,$acc3); + +$code.=<<___; +.type __ecp_nistz256_add_tox,\@abi-omnipotent +.align 32 +__ecp_nistz256_add_tox: +.cfi_startproc + xor $t4, $t4 + adc 8*0($b_ptr), $a0 + adc 8*1($b_ptr), $a1 + mov $a0, $t0 + adc 8*2($b_ptr), $a2 + adc 8*3($b_ptr), $a3 + mov $a1, $t1 + adc \$0, $t4 + + xor $t3, $t3 + sbb \$-1, $a0 + mov $a2, $t2 + sbb $poly1, $a1 + sbb \$0, $a2 + mov $a3, $t3 + sbb $poly3, $a3 + sbb \$0, $t4 + + cmovc $t0, $a0 + cmovc $t1, $a1 + mov $a0, 8*0($r_ptr) + cmovc $t2, $a2 + mov $a1, 8*1($r_ptr) + cmovc $t3, $a3 + mov $a2, 8*2($r_ptr) + mov $a3, 8*3($r_ptr) + + ret +.cfi_endproc +.size __ecp_nistz256_add_tox,.-__ecp_nistz256_add_tox + +.type __ecp_nistz256_sub_fromx,\@abi-omnipotent +.align 32 +__ecp_nistz256_sub_fromx: +.cfi_startproc + xor $t4, $t4 + sbb 8*0($b_ptr), $a0 + sbb 8*1($b_ptr), $a1 + mov $a0, $t0 + sbb 8*2($b_ptr), $a2 + sbb 8*3($b_ptr), $a3 + mov $a1, $t1 + sbb \$0, $t4 + + xor $t3, $t3 + adc \$-1, $a0 + mov $a2, $t2 + adc $poly1, $a1 + adc \$0, $a2 + mov $a3, $t3 + adc $poly3, $a3 + + bt \$0, $t4 + cmovnc $t0, $a0 + cmovnc $t1, $a1 + mov $a0, 8*0($r_ptr) + cmovnc $t2, $a2 + mov $a1, 8*1($r_ptr) + cmovnc $t3, $a3 + mov $a2, 8*2($r_ptr) + mov $a3, 8*3($r_ptr) + + ret +.cfi_endproc +.size __ecp_nistz256_sub_fromx,.-__ecp_nistz256_sub_fromx + +.type __ecp_nistz256_subx,\@abi-omnipotent +.align 32 +__ecp_nistz256_subx: +.cfi_startproc + xor $t4, $t4 + sbb $a0, $t0 + sbb $a1, $t1 + mov $t0, $a0 + sbb $a2, $t2 + sbb $a3, $t3 + mov $t1, $a1 + sbb \$0, $t4 + + xor $a3 ,$a3 + adc \$-1, $t0 + mov $t2, $a2 + adc $poly1, $t1 + adc \$0, $t2 + mov $t3, $a3 + adc $poly3, $t3 + + bt \$0, $t4 + cmovc $t0, $a0 + cmovc $t1, $a1 + cmovc $t2, $a2 + cmovc $t3, $a3 + + ret +.cfi_endproc +.size __ecp_nistz256_subx,.-__ecp_nistz256_subx + +.type __ecp_nistz256_mul_by_2x,\@abi-omnipotent +.align 32 +__ecp_nistz256_mul_by_2x: +.cfi_startproc + xor $t4, $t4 + adc $a0, $a0 # a0:a3+a0:a3 + adc $a1, $a1 + mov $a0, $t0 + adc $a2, $a2 + adc $a3, $a3 + mov $a1, $t1 + adc \$0, $t4 + + xor $t3, $t3 + sbb \$-1, $a0 + mov $a2, $t2 + sbb $poly1, $a1 + sbb \$0, $a2 + mov $a3, $t3 + sbb $poly3, $a3 + sbb \$0, $t4 + + cmovc $t0, $a0 + cmovc $t1, $a1 + mov $a0, 8*0($r_ptr) + cmovc $t2, $a2 + mov $a1, 8*1($r_ptr) + cmovc $t3, $a3 + mov $a2, 8*2($r_ptr) + mov $a3, 8*3($r_ptr) + + ret +.cfi_endproc +.size __ecp_nistz256_mul_by_2x,.-__ecp_nistz256_mul_by_2x +___ + } +&gen_double("x"); +&gen_add("x"); +&gen_add_affine("x"); +} +}}} + +# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame, +# CONTEXT *context,DISPATCHER_CONTEXT *disp) +if ($win64) { +$rec="%rcx"; +$frame="%rdx"; +$context="%r8"; +$disp="%r9"; + +$code.=<<___; +.extern __imp_RtlVirtualUnwind + +.type short_handler,\@abi-omnipotent +.align 16 +short_handler: + push %rsi + push %rdi + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + pushfq + sub \$64,%rsp + + mov 120($context),%rax # pull context->Rax + mov 248($context),%rbx # pull context->Rip + + mov 8($disp),%rsi # disp->ImageBase + mov 56($disp),%r11 # disp->HandlerData + + mov 0(%r11),%r10d # HandlerData[0] + lea (%rsi,%r10),%r10 # end of prologue label + cmp %r10,%rbx # context->RipRsp + + mov 4(%r11),%r10d # HandlerData[1] + lea (%rsi,%r10),%r10 # epilogue label + cmp %r10,%rbx # context->Rip>=epilogue label + jae .Lcommon_seh_tail + + lea 16(%rax),%rax + + mov -8(%rax),%r12 + mov -16(%rax),%r13 + mov %r12,216($context) # restore context->R12 + mov %r13,224($context) # restore context->R13 + + jmp .Lcommon_seh_tail +.size short_handler,.-short_handler + +.type full_handler,\@abi-omnipotent +.align 16 +full_handler: + push %rsi + push %rdi + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + pushfq + sub \$64,%rsp + + mov 120($context),%rax # pull context->Rax + mov 248($context),%rbx # pull context->Rip + + mov 8($disp),%rsi # disp->ImageBase + mov 56($disp),%r11 # disp->HandlerData + + mov 0(%r11),%r10d # HandlerData[0] + lea (%rsi,%r10),%r10 # end of prologue label + cmp %r10,%rbx # context->RipRsp + + mov 4(%r11),%r10d # HandlerData[1] + lea (%rsi,%r10),%r10 # epilogue label + cmp %r10,%rbx # context->Rip>=epilogue label + jae .Lcommon_seh_tail + + mov 8(%r11),%r10d # HandlerData[2] + lea (%rax,%r10),%rax + + mov -8(%rax),%rbp + mov -16(%rax),%rbx + mov -24(%rax),%r12 + mov -32(%rax),%r13 + mov -40(%rax),%r14 + mov -48(%rax),%r15 + mov %rbx,144($context) # restore context->Rbx + mov %rbp,160($context) # restore context->Rbp + mov %r12,216($context) # restore context->R12 + mov %r13,224($context) # restore context->R13 + mov %r14,232($context) # restore context->R14 + mov %r15,240($context) # restore context->R15 + +.Lcommon_seh_tail: + mov 8(%rax),%rdi + mov 16(%rax),%rsi + mov %rax,152($context) # restore context->Rsp + mov %rsi,168($context) # restore context->Rsi + mov %rdi,176($context) # restore context->Rdi + + mov 40($disp),%rdi # disp->ContextRecord + mov $context,%rsi # context + mov \$154,%ecx # sizeof(CONTEXT) + .long 0xa548f3fc # cld; rep movsq + + mov $disp,%rsi + xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER + mov 8(%rsi),%rdx # arg2, disp->ImageBase + mov 0(%rsi),%r8 # arg3, disp->ControlPc + mov 16(%rsi),%r9 # arg4, disp->FunctionEntry + mov 40(%rsi),%r10 # disp->ContextRecord + lea 56(%rsi),%r11 # &disp->HandlerData + lea 24(%rsi),%r12 # &disp->EstablisherFrame + mov %r10,32(%rsp) # arg5 + mov %r11,40(%rsp) # arg6 + mov %r12,48(%rsp) # arg7 + mov %rcx,56(%rsp) # arg8, (NULL) + call *__imp_RtlVirtualUnwind(%rip) + + mov \$1,%eax # ExceptionContinueSearch + add \$64,%rsp + popfq + pop %r15 + pop %r14 + pop %r13 + pop %r12 + pop %rbp + pop %rbx + pop %rdi + pop %rsi + ret +.size full_handler,.-full_handler + +.section .pdata +.align 4 + .rva .LSEH_begin_GFp_nistz256_neg + .rva .LSEH_end_GFp_nistz256_neg + .rva .LSEH_info_GFp_nistz256_neg + + .rva .LSEH_begin_GFp_p256_scalar_mul_mont + .rva .LSEH_end_GFp_p256_scalar_mul_mont + .rva .LSEH_info_GFp_p256_scalar_mul_mont + + .rva .LSEH_begin_GFp_p256_scalar_sqr_rep_mont + .rva .LSEH_end_GFp_p256_scalar_sqr_rep_mont + .rva .LSEH_info_GFp_p256_scalar_sqr_rep_mont +___ +$code.=<<___ if ($addx); + .rva .LSEH_begin_ecp_nistz256_ord_mul_montx + .rva .LSEH_end_ecp_nistz256_ord_mul_montx + .rva .LSEH_info_ecp_nistz256_ord_mul_montx + + .rva .LSEH_begin_ecp_nistz256_ord_sqr_montx + .rva .LSEH_end_ecp_nistz256_ord_sqr_montx + .rva .LSEH_info_ecp_nistz256_ord_sqr_montx +___ +$code.=<<___; + .rva .LSEH_begin_GFp_p256_mul_mont + .rva .LSEH_end_GFp_p256_mul_mont + .rva .LSEH_info_GFp_p256_mul_mont + + .rva .LSEH_begin_GFp_p256_sqr_mont + .rva .LSEH_end_GFp_p256_sqr_mont + .rva .LSEH_info_GFp_p256_sqr_mont + + .rva .LSEH_begin_GFp_nistz256_select_w5 + .rva .LSEH_end_GFp_nistz256_select_w5 + .rva .LSEH_info_ecp_nistz256_select_wX + + .rva .LSEH_begin_GFp_nistz256_select_w7 + .rva .LSEH_end_GFp_nistz256_select_w7 + .rva .LSEH_info_ecp_nistz256_select_wX +___ +$code.=<<___ if ($avx>1); + .rva .LSEH_begin_ecp_nistz256_avx2_select_w5 + .rva .LSEH_end_ecp_nistz256_avx2_select_w5 + .rva .LSEH_info_ecp_nistz256_avx2_select_wX + + .rva .LSEH_begin_ecp_nistz256_avx2_select_w7 + .rva .LSEH_end_ecp_nistz256_avx2_select_w7 + .rva .LSEH_info_ecp_nistz256_avx2_select_wX +___ +$code.=<<___; + .rva .LSEH_begin_GFp_p256_point_double + .rva .LSEH_end_GFp_p256_point_double + .rva .LSEH_info_GFp_p256_point_double + + .rva .LSEH_begin_GFp_p256_point_add + .rva .LSEH_end_GFp_p256_point_add + .rva .LSEH_info_GFp_p256_point_add + + .rva .LSEH_begin_GFp_p256_point_add_affine + .rva .LSEH_end_GFp_p256_point_add_affine + .rva .LSEH_info_GFp_p256_point_add_affine +___ +$code.=<<___ if ($addx); + .rva .LSEH_begin_GFp_p256_point_doublex + .rva .LSEH_end_GFp_p256_point_doublex + .rva .LSEH_info_GFp_p256_point_doublex + + .rva .LSEH_begin_GFp_p256_point_addx + .rva .LSEH_end_GFp_p256_point_addx + .rva .LSEH_info_GFp_p256_point_addx + + .rva .LSEH_begin_GFp_p256_point_add_affinex + .rva .LSEH_end_GFp_p256_point_add_affinex + .rva .LSEH_info_GFp_p256_point_add_affinex +___ +$code.=<<___; + +.section .xdata +.align 8 +.LSEH_info_GFp_nistz256_neg: + .byte 9,0,0,0 + .rva short_handler + .rva .Lneg_body,.Lneg_epilogue # HandlerData[] +.LSEH_info_GFp_p256_scalar_mul_mont: + .byte 9,0,0,0 + .rva full_handler + .rva .Lord_mul_body,.Lord_mul_epilogue # HandlerData[] + .long 48,0 +.LSEH_info_GFp_p256_scalar_sqr_rep_mont: + .byte 9,0,0,0 + .rva full_handler + .rva .Lord_sqr_body,.Lord_sqr_epilogue # HandlerData[] + .long 48,0 +___ +$code.=<<___ if ($addx); +.LSEH_info_ecp_nistz256_ord_mul_montx: + .byte 9,0,0,0 + .rva full_handler + .rva .Lord_mulx_body,.Lord_mulx_epilogue # HandlerData[] + .long 48,0 +.LSEH_info_ecp_nistz256_ord_sqr_montx: + .byte 9,0,0,0 + .rva full_handler + .rva .Lord_sqrx_body,.Lord_sqrx_epilogue # HandlerData[] + .long 48,0 +___ +$code.=<<___; +.LSEH_info_GFp_p256_mul_mont: + .byte 9,0,0,0 + .rva full_handler + .rva .Lmul_body,.Lmul_epilogue # HandlerData[] + .long 48,0 +.LSEH_info_GFp_p256_sqr_mont: + .byte 9,0,0,0 + .rva full_handler + .rva .Lsqr_body,.Lsqr_epilogue # HandlerData[] + .long 48,0 +.LSEH_info_ecp_nistz256_select_wX: + .byte 0x01,0x33,0x16,0x00 + .byte 0x33,0xf8,0x09,0x00 #movaps 0x90(rsp),xmm15 + .byte 0x2e,0xe8,0x08,0x00 #movaps 0x80(rsp),xmm14 + .byte 0x29,0xd8,0x07,0x00 #movaps 0x70(rsp),xmm13 + .byte 0x24,0xc8,0x06,0x00 #movaps 0x60(rsp),xmm12 + .byte 0x1f,0xb8,0x05,0x00 #movaps 0x50(rsp),xmm11 + .byte 0x1a,0xa8,0x04,0x00 #movaps 0x40(rsp),xmm10 + .byte 0x15,0x98,0x03,0x00 #movaps 0x30(rsp),xmm9 + .byte 0x10,0x88,0x02,0x00 #movaps 0x20(rsp),xmm8 + .byte 0x0c,0x78,0x01,0x00 #movaps 0x10(rsp),xmm7 + .byte 0x08,0x68,0x00,0x00 #movaps 0x00(rsp),xmm6 + .byte 0x04,0x01,0x15,0x00 #sub rsp,0xa8 + .align 8 +___ +$code.=<<___ if ($avx>1); +.LSEH_info_ecp_nistz256_avx2_select_wX: + .byte 0x01,0x36,0x17,0x0b + .byte 0x36,0xf8,0x09,0x00 # vmovaps 0x90(rsp),xmm15 + .byte 0x31,0xe8,0x08,0x00 # vmovaps 0x80(rsp),xmm14 + .byte 0x2c,0xd8,0x07,0x00 # vmovaps 0x70(rsp),xmm13 + .byte 0x27,0xc8,0x06,0x00 # vmovaps 0x60(rsp),xmm12 + .byte 0x22,0xb8,0x05,0x00 # vmovaps 0x50(rsp),xmm11 + .byte 0x1d,0xa8,0x04,0x00 # vmovaps 0x40(rsp),xmm10 + .byte 0x18,0x98,0x03,0x00 # vmovaps 0x30(rsp),xmm9 + .byte 0x13,0x88,0x02,0x00 # vmovaps 0x20(rsp),xmm8 + .byte 0x0e,0x78,0x01,0x00 # vmovaps 0x10(rsp),xmm7 + .byte 0x09,0x68,0x00,0x00 # vmovaps 0x00(rsp),xmm6 + .byte 0x04,0x01,0x15,0x00 # sub rsp,0xa8 + .byte 0x00,0xb3,0x00,0x00 # set_frame r11 + .align 8 +___ +$code.=<<___; +.LSEH_info_GFp_p256_point_double: + .byte 9,0,0,0 + .rva full_handler + .rva .Lpoint_doubleq_body,.Lpoint_doubleq_epilogue # HandlerData[] + .long 32*5+56,0 +.LSEH_info_GFp_p256_point_add: + .byte 9,0,0,0 + .rva full_handler + .rva .Lpoint_addq_body,.Lpoint_addq_epilogue # HandlerData[] + .long 32*18+56,0 +.LSEH_info_GFp_p256_point_add_affine: + .byte 9,0,0,0 + .rva full_handler + .rva .Ladd_affineq_body,.Ladd_affineq_epilogue # HandlerData[] + .long 32*15+56,0 +___ +$code.=<<___ if ($addx); +.align 8 +.LSEH_info_GFp_p256_point_doublex: + .byte 9,0,0,0 + .rva full_handler + .rva .Lpoint_doublex_body,.Lpoint_doublex_epilogue # HandlerData[] + .long 32*5+56,0 +.LSEH_info_GFp_p256_point_addx: + .byte 9,0,0,0 + .rva full_handler + .rva .Lpoint_addx_body,.Lpoint_addx_epilogue # HandlerData[] + .long 32*18+56,0 +.LSEH_info_GFp_p256_point_add_affinex: + .byte 9,0,0,0 + .rva full_handler + .rva .Ladd_affinex_body,.Ladd_affinex_epilogue # HandlerData[] + .long 32*15+56,0 +___ +} + +$code =~ s/\`([^\`]*)\`/eval $1/gem; +print $code; +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/fipsmodule/ec/ecp_nistz.c b/vendor/ring/crypto/fipsmodule/ec/ecp_nistz.c new file mode 100644 index 00000000..ebbbf33c --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/ec/ecp_nistz.c @@ -0,0 +1,52 @@ +/* Copyright (c) 2014, Intel Corporation. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +#include "ecp_nistz.h" + +#if defined(__GNUC__) +#pragma GCC diagnostic ignored "-Wconversion" +#endif + +/* Fills |str| with the bytewise little-endian encoding of |scalar|, where + * |scalar| has |num_limbs| limbs. |str| is padded with zeros at the end up + * to |str_len| bytes. Actually, |str_len| must be exactly one byte more than + * needed to encode |num_limbs| losslessly, so that there is an extra byte at + * the end. The extra byte is useful because the caller will be breaking |str| + * up into windows of a number of bits (5 or 7) that isn't divisible by 8, and + * so it is useful for it to be able to read an extra zero byte. */ +void gfp_little_endian_bytes_from_scalar(uint8_t str[], size_t str_len, + const Limb scalar[], + size_t num_limbs) { + debug_assert_nonsecret(str_len == (num_limbs * sizeof(Limb)) + 1); + + size_t i; + for (i = 0; i < num_limbs * sizeof(Limb); i += sizeof(Limb)) { + Limb d = scalar[i / sizeof(Limb)]; + + str[i + 0] = d & 0xff; + str[i + 1] = (d >> 8) & 0xff; + str[i + 2] = (d >> 16) & 0xff; + str[i + 3] = (d >>= 24) & 0xff; + if (sizeof(Limb) == 8) { + d >>= 8; + str[i + 4] = d & 0xff; + str[i + 5] = (d >> 8) & 0xff; + str[i + 6] = (d >> 16) & 0xff; + str[i + 7] = (d >> 24) & 0xff; + } + } + for (; i < str_len; i++) { + str[i] = 0; + } +} diff --git a/vendor/ring/crypto/fipsmodule/ec/ecp_nistz.h b/vendor/ring/crypto/fipsmodule/ec/ecp_nistz.h new file mode 100644 index 00000000..2bcf4b5d --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/ec/ecp_nistz.h @@ -0,0 +1,274 @@ +/* Copyright (c) 2015, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +#ifndef OPENSSL_HEADER_EC_ECP_NISTZ_H +#define OPENSSL_HEADER_EC_ECP_NISTZ_H + +#include + +#include "../../limbs/limbs.h" + +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wsign-conversion" +#endif + +// This function looks at `w + 1` scalar bits (`w` current, 1 adjacent less +// significant bit), and recodes them into a signed digit for use in fast point +// multiplication: the use of signed rather than unsigned digits means that +// fewer points need to be precomputed, given that point inversion is easy (a +// precomputed point dP makes -dP available as well). +// +// BACKGROUND: +// +// Signed digits for multiplication were introduced by Booth ("A signed binary +// multiplication technique", Quart. Journ. Mech. and Applied Math., vol. IV, +// pt. 2 (1951), pp. 236-240), in that case for multiplication of integers. +// Booth's original encoding did not generally improve the density of nonzero +// digits over the binary representation, and was merely meant to simplify the +// handling of signed factors given in two's complement; but it has since been +// shown to be the basis of various signed-digit representations that do have +// further advantages, including the wNAF, using the following general +// approach: +// +// (1) Given a binary representation +// +// b_k ... b_2 b_1 b_0, +// +// of a nonnegative integer (b_k in {0, 1}), rewrite it in digits 0, 1, -1 +// by using bit-wise subtraction as follows: +// +// b_k b_(k-1) ... b_2 b_1 b_0 +// - b_k ... b_3 b_2 b_1 b_0 +// ----------------------------------------- +// s_(k+1) s_k ... s_3 s_2 s_1 s_0 +// +// A left-shift followed by subtraction of the original value yields a new +// representation of the same value, using signed bits s_i = b_(i-1) - b_i. +// This representation from Booth's paper has since appeared in the +// literature under a variety of different names including "reversed binary +// form", "alternating greedy expansion", "mutual opposite form", and +// "sign-alternating {+-1}-representation". +// +// An interesting property is that among the nonzero bits, values 1 and -1 +// strictly alternate. +// +// (2) Various window schemes can be applied to the Booth representation of +// integers: for example, right-to-left sliding windows yield the wNAF +// (a signed-digit encoding independently discovered by various researchers +// in the 1990s), and left-to-right sliding windows yield a left-to-right +// equivalent of the wNAF (independently discovered by various researchers +// around 2004). +// +// To prevent leaking information through side channels in point multiplication, +// we need to recode the given integer into a regular pattern: sliding windows +// as in wNAFs won't do, we need their fixed-window equivalent -- which is a few +// decades older: we'll be using the so-called "modified Booth encoding" due to +// MacSorley ("High-speed arithmetic in binary computers", Proc. IRE, vol. 49 +// (1961), pp. 67-91), in a radix-2**w setting. That is, we always combine `w` +// signed bits into a signed digit, e.g. (for `w == 5`): +// +// s_(5j + 4) s_(5j + 3) s_(5j + 2) s_(5j + 1) s_(5j) +// +// The sign-alternating property implies that the resulting digit values are +// integers from `-2**(w-1)` to `2**(w-1)`, e.g. -16 to 16 for `w == 5`. +// +// Of course, we don't actually need to compute the signed digits s_i as an +// intermediate step (that's just a nice way to see how this scheme relates +// to the wNAF): a direct computation obtains the recoded digit from the +// six bits b_(5j + 4) ... b_(5j - 1). +// +// This function takes those `w` bits as an integer (e.g. 0 .. 63), writing the +// recoded digit to *sign (0 for positive, 1 for negative) and *digit (absolute +// value, in the range 0 .. 2**(w-1). Note that this integer essentially provides +// the input bits "shifted to the left" by one position: for example, the input +// to compute the least significant recoded digit, given that there's no bit +// b_-1, has to be b_4 b_3 b_2 b_1 b_0 0. +// +// DOUBLING CASE: +// +// Point addition formulas for short Weierstrass curves are often incomplete. +// Edge cases such as P + P or P + ∞ must be handled separately. This +// complicates constant-time requirements. P + ∞ cannot be avoided (any window +// may be zero) and is handled with constant-time selects. P + P (where P is not +// ∞) usually is not. Instead, windowing strategies are chosen to avoid this +// case. Whether this happens depends on the group order. +// +// Let w be the window width (in this function, w = 5). The non-trivial doubling +// case in single-point scalar multiplication may occur if and only if the +// 2^(w-1) bit of the group order is zero. +// +// Note the above only holds if the scalar is fully reduced and the group order +// is a prime that is much larger than 2^w. It also only holds when windows +// are applied from most significant to least significant, doubling between each +// window. It does not apply to more complex table strategies such as +// |EC_GFp_nistz256_method|. +// +// PROOF: +// +// Let n be the group order. Let l be the number of bits needed to represent n. +// Assume there exists some 0 <= k < n such that signed w-bit windowed +// multiplication hits the doubling case. +// +// Windowed multiplication consists of iterating over groups of s_i (defined +// above based on k's binary representation) from most to least significant. At +// iteration i (for i = ..., 3w, 2w, w, 0, starting from the most significant +// window), we: +// +// 1. Double the accumulator A, w times. Let A_i be the value of A at this +// point. +// +// 2. Set A to T_i + A_i, where T_i is a precomputed multiple of P +// corresponding to the window s_(i+w-1) ... s_i. +// +// Let j be the index such that A_j = T_j ≠ ∞. Looking at A_i and T_i as +// multiples of P, define a_i and t_i to be scalar coefficients of A_i and T_i. +// Thus a_j = t_j ≠ 0 (mod n). Note a_i and t_i may not be reduced mod n. t_i is +// the value of the w signed bits s_(i+w-1) ... s_i. a_i is computed as a_i = +// 2^w * (a_(i+w) + t_(i+w)). +// +// t_i is bounded by -2^(w-1) <= t_i <= 2^(w-1). Additionally, we may write it +// in terms of unsigned bits b_i. t_i consists of signed bits s_(i+w-1) ... s_i. +// This is computed as: +// +// b_(i+w-2) b_(i+w-3) ... b_i b_(i-1) +// - b_(i+w-1) b_(i+w-2) ... b_(i+1) b_i +// -------------------------------------------- +// t_i = s_(i+w-1) s_(i+w-2) ... s_(i+1) s_i +// +// Observe that b_(i+w-2) through b_i occur in both terms. Let x be the integer +// represented by that bit string, i.e. 2^(w-2)*b_(i+w-2) + ... + b_i. +// +// t_i = (2*x + b_(i-1)) - (2^(w-1)*b_(i+w-1) + x) +// = x - 2^(w-1)*b_(i+w-1) + b_(i-1) +// +// Or, using C notation for bit operations: +// +// t_i = (k>>i) & ((1<<(w-1)) - 1) - (k>>i) & (1<<(w-1)) + (k>>(i-1)) & 1 +// +// Note b_(i-1) is added in left-shifted by one (or doubled) from its place. +// This is compensated by t_(i-w)'s subtraction term. Thus, a_i may be computed +// by adding b_l b_(l-1) ... b_(i+1) b_i and an extra copy of b_(i-1). In C +// notation, this is: +// +// a_i = (k>>(i+w)) << w + ((k>>(i+w-1)) & 1) << w +// +// Observe that, while t_i may be positive or negative, a_i is bounded by +// 0 <= a_i < n + 2^w. Additionally, a_i can only be zero if b_(i+w-1) and up +// are all zero. (Note this implies a non-trivial P + (-P) is unreachable for +// all groups. That would imply the subsequent a_i is zero, which means all +// terms thus far were zero.) +// +// Returning to our doubling position, we have a_j = t_j (mod n). We now +// determine the value of a_j - t_j, which must be divisible by n. Our bounds on +// a_j and t_j imply a_j - t_j is 0 or n. If it is 0, a_j = t_j. However, 2^w +// divides a_j and -2^(w-1) <= t_j <= 2^(w-1), so this can only happen if +// a_j = t_j = 0, which is a trivial doubling. Therefore, a_j - t_j = n. +// +// Now we determine j. Suppose j > 0. w divides j, so j >= w. Then, +// +// n = a_j - t_j = (k>>(j+w)) << w + ((k>>(j+w-1)) & 1) << w - t_j +// <= k/2^j + 2^w - t_j +// < n/2^w + 2^w + 2^(w-1) +// +// n is much larger than 2^w, so this is impossible. Thus, j = 0: only the final +// addition may hit the doubling case. +// +// Finally, we consider bit patterns for n and k. Divide k into k_H + k_M + k_L +// such that k_H is the contribution from b_(l-1) .. b_w, k_M is the +// contribution from b_(w-1), and k_L is the contribution from b_(w-2) ... b_0. +// That is: +// +// - 2^w divides k_H +// - k_M is 0 or 2^(w-1) +// - 0 <= k_L < 2^(w-1) +// +// Divide n into n_H + n_M + n_L similarly. We thus have: +// +// t_0 = (k>>0) & ((1<<(w-1)) - 1) - (k>>0) & (1<<(w-1)) + (k>>(0-1)) & 1 +// = k & ((1<<(w-1)) - 1) - k & (1<<(w-1)) +// = k_L - k_M +// +// a_0 = (k>>(0+w)) << w + ((k>>(0+w-1)) & 1) << w +// = (k>>w) << w + ((k>>(w-1)) & 1) << w +// = k_H + 2*k_M +// +// n = a_0 - t_0 +// n_H + n_M + n_L = (k_H + 2*k_M) - (k_L - k_M) +// = k_H + 3*k_M - k_L +// +// k_H - k_L < k and k < n, so k_H - k_L ≠ n. Therefore k_M is not 0 and must be +// 2^(w-1). Now we consider k_H and n_H. We know k_H <= n_H. Suppose k_H = n_H. +// Then, +// +// n_M + n_L = 3*(2^(w-1)) - k_L +// > 3*(2^(w-1)) - 2^(w-1) +// = 2^w +// +// Contradiction (n_M + n_L is the bottom w bits of n). Thus k_H < n_H. Suppose +// k_H < n_H - 2*2^w. Then, +// +// n_H + n_M + n_L = k_H + 3*(2^(w-1)) - k_L +// < n_H - 2*2^w + 3*(2^(w-1)) - k_L +// n_M + n_L < -2^(w-1) - k_L +// +// Contradiction. Thus, k_H = n_H - 2^w. (Note 2^w divides n_H and k_H.) Thus, +// +// n_H + n_M + n_L = k_H + 3*(2^(w-1)) - k_L +// = n_H - 2^w + 3*(2^(w-1)) - k_L +// n_M + n_L = 2^(w-1) - k_L +// <= 2^(w-1) +// +// Equality would mean 2^(w-1) divides n, which is impossible if n is prime. +// Thus n_M + n_L < 2^(w-1), so n_M is zero, proving our condition. +// +// This proof constructs k, so, to show the converse, let k_H = n_H - 2^w, +// k_M = 2^(w-1), k_L = 2^(w-1) - n_L. This will result in a non-trivial point +// doubling in the final addition and is the only such scalar. +// +// COMMON CURVES: +// +// The group orders for common curves end in the following bit patterns: +// +// P-521: ...00001001; w = 4 is okay +// P-384: ...01110011; w = 2, 5, 6, 7 are okay +// P-256: ...01010001; w = 5, 7 are okay +// P-224: ...00111101; w = 3, 4, 5, 6 are okay +static inline void booth_recode(crypto_word *is_negative, crypto_word *digit, + crypto_word in, crypto_word w) { + debug_assert_nonsecret(w >= 2); + debug_assert_nonsecret(w <= 7); + + // Set all bits of `s` to MSB(in), similar to |constant_time_msb_s|, + // but 'in' seen as (`w+1`)-bit value. + crypto_word s = ~((in >> w) - 1); + crypto_word d; + d = ((crypto_word)1u << (w + 1)) - in - 1; + d = (d & s) | (in & ~s); + d = (d >> 1) + (d & 1); + + *is_negative = constant_time_is_nonzero_w(s & 1); + *digit = d; +} + +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif + +void gfp_little_endian_bytes_from_scalar(uint8_t str[], size_t str_len, + const Limb scalar[], + size_t num_limbs); + +#endif // OPENSSL_HEADER_EC_ECP_NISTZ_H diff --git a/vendor/ring/crypto/fipsmodule/ec/ecp_nistz384.h b/vendor/ring/crypto/fipsmodule/ec/ecp_nistz384.h new file mode 100644 index 00000000..ca87e607 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/ec/ecp_nistz384.h @@ -0,0 +1,34 @@ +/* Copyright (c) 2014, Intel Corporation. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +#ifndef OPENSSL_HEADER_EC_ECP_NISTZ384_H +#define OPENSSL_HEADER_EC_ECP_NISTZ384_H + +#include "../../limbs/limbs.h" + +#define P384_LIMBS (384u / LIMB_BITS) + +typedef struct { + Limb X[P384_LIMBS]; + Limb Y[P384_LIMBS]; + Limb Z[P384_LIMBS]; +} P384_POINT; + +typedef struct { + Limb X[P384_LIMBS]; + Limb Y[P384_LIMBS]; +} P384_POINT_AFFINE; + + +#endif // OPENSSL_HEADER_EC_ECP_NISTZ384_H diff --git a/vendor/ring/crypto/fipsmodule/ec/ecp_nistz384.inl b/vendor/ring/crypto/fipsmodule/ec/ecp_nistz384.inl new file mode 100644 index 00000000..12fc9d9d --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/ec/ecp_nistz384.inl @@ -0,0 +1,257 @@ +/* Copyright (c) 2014, Intel Corporation. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +/* Developers and authors: + * Shay Gueron (1, 2), and Vlad Krasnov (1) + * (1) Intel Corporation, Israel Development Center + * (2) University of Haifa + * Reference: + * Shay Gueron and Vlad Krasnov + * "Fast Prime Field Elliptic Curve Cryptography with 256 Bit Primes" + * http://eprint.iacr.org/2013/816 */ + +#include "ecp_nistz.h" + +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" +#endif + +/* Point double: r = 2*a */ +void GFp_nistz384_point_double(P384_POINT *r, const P384_POINT *a) { + BN_ULONG S[P384_LIMBS]; + BN_ULONG M[P384_LIMBS]; + BN_ULONG Zsqr[P384_LIMBS]; + BN_ULONG tmp0[P384_LIMBS]; + + const BN_ULONG *in_x = a->X; + const BN_ULONG *in_y = a->Y; + const BN_ULONG *in_z = a->Z; + + BN_ULONG *res_x = r->X; + BN_ULONG *res_y = r->Y; + BN_ULONG *res_z = r->Z; + + elem_mul_by_2(S, in_y); + + elem_sqr_mont(Zsqr, in_z); + + elem_sqr_mont(S, S); + + elem_mul_mont(res_z, in_z, in_y); + elem_mul_by_2(res_z, res_z); + + elem_add(M, in_x, Zsqr); + elem_sub(Zsqr, in_x, Zsqr); + + elem_sqr_mont(res_y, S); + elem_div_by_2(res_y, res_y); + + elem_mul_mont(M, M, Zsqr); + elem_mul_by_3(M, M); + + elem_mul_mont(S, S, in_x); + elem_mul_by_2(tmp0, S); + + elem_sqr_mont(res_x, M); + + elem_sub(res_x, res_x, tmp0); + elem_sub(S, S, res_x); + + elem_mul_mont(S, S, M); + elem_sub(res_y, S, res_y); +} + +/* Point addition: r = a+b */ +void GFp_nistz384_point_add(P384_POINT *r, const P384_POINT *a, + const P384_POINT *b) { + BN_ULONG U2[P384_LIMBS], S2[P384_LIMBS]; + BN_ULONG U1[P384_LIMBS], S1[P384_LIMBS]; + BN_ULONG Z1sqr[P384_LIMBS]; + BN_ULONG Z2sqr[P384_LIMBS]; + BN_ULONG H[P384_LIMBS], R[P384_LIMBS]; + BN_ULONG Hsqr[P384_LIMBS]; + BN_ULONG Rsqr[P384_LIMBS]; + BN_ULONG Hcub[P384_LIMBS]; + + BN_ULONG res_x[P384_LIMBS]; + BN_ULONG res_y[P384_LIMBS]; + BN_ULONG res_z[P384_LIMBS]; + + const BN_ULONG *in1_x = a->X; + const BN_ULONG *in1_y = a->Y; + const BN_ULONG *in1_z = a->Z; + + const BN_ULONG *in2_x = b->X; + const BN_ULONG *in2_y = b->Y; + const BN_ULONG *in2_z = b->Z; + + BN_ULONG in1infty = is_zero(a->Z); + BN_ULONG in2infty = is_zero(b->Z); + + elem_sqr_mont(Z2sqr, in2_z); /* Z2^2 */ + elem_sqr_mont(Z1sqr, in1_z); /* Z1^2 */ + + elem_mul_mont(S1, Z2sqr, in2_z); /* S1 = Z2^3 */ + elem_mul_mont(S2, Z1sqr, in1_z); /* S2 = Z1^3 */ + + elem_mul_mont(S1, S1, in1_y); /* S1 = Y1*Z2^3 */ + elem_mul_mont(S2, S2, in2_y); /* S2 = Y2*Z1^3 */ + elem_sub(R, S2, S1); /* R = S2 - S1 */ + + elem_mul_mont(U1, in1_x, Z2sqr); /* U1 = X1*Z2^2 */ + elem_mul_mont(U2, in2_x, Z1sqr); /* U2 = X2*Z1^2 */ + elem_sub(H, U2, U1); /* H = U2 - U1 */ + + BN_ULONG is_exceptional = is_equal(U1, U2) & ~in1infty & ~in2infty; + if (is_exceptional) { + if (is_equal(S1, S2)) { + GFp_nistz384_point_double(r, a); + } else { + limbs_zero(r->X, P384_LIMBS); + limbs_zero(r->Y, P384_LIMBS); + limbs_zero(r->Z, P384_LIMBS); + } + return; + } + + elem_sqr_mont(Rsqr, R); /* R^2 */ + elem_mul_mont(res_z, H, in1_z); /* Z3 = H*Z1*Z2 */ + elem_sqr_mont(Hsqr, H); /* H^2 */ + elem_mul_mont(res_z, res_z, in2_z); /* Z3 = H*Z1*Z2 */ + elem_mul_mont(Hcub, Hsqr, H); /* H^3 */ + + elem_mul_mont(U2, U1, Hsqr); /* U1*H^2 */ + elem_mul_by_2(Hsqr, U2); /* 2*U1*H^2 */ + + elem_sub(res_x, Rsqr, Hsqr); + elem_sub(res_x, res_x, Hcub); + + elem_sub(res_y, U2, res_x); + + elem_mul_mont(S2, S1, Hcub); + elem_mul_mont(res_y, R, res_y); + elem_sub(res_y, res_y, S2); + + copy_conditional(res_x, in2_x, in1infty); + copy_conditional(res_y, in2_y, in1infty); + copy_conditional(res_z, in2_z, in1infty); + + copy_conditional(res_x, in1_x, in2infty); + copy_conditional(res_y, in1_y, in2infty); + copy_conditional(res_z, in1_z, in2infty); + + limbs_copy(r->X, res_x, P384_LIMBS); + limbs_copy(r->Y, res_y, P384_LIMBS); + limbs_copy(r->Z, res_z, P384_LIMBS); +} + +static void add_precomputed_w5(P384_POINT *r, crypto_word wvalue, + const P384_POINT table[16]) { + crypto_word recoded_is_negative; + crypto_word recoded; + booth_recode(&recoded_is_negative, &recoded, wvalue, 5); + + alignas(64) P384_POINT h; + gfp_p384_point_select_w5(&h, table, recoded); + + alignas(64) BN_ULONG tmp[P384_LIMBS]; + GFp_p384_elem_neg(tmp, h.Y); + copy_conditional(h.Y, tmp, recoded_is_negative); + + GFp_nistz384_point_add(r, r, &h); +} + +/* r = p * p_scalar */ +void GFp_nistz384_point_mul(P384_POINT *r, const BN_ULONG p_scalar[P384_LIMBS], + const BN_ULONG p_x[P384_LIMBS], + const BN_ULONG p_y[P384_LIMBS]) { + static const size_t kWindowSize = 5; + static const crypto_word kMask = (1 << (5 /* kWindowSize */ + 1)) - 1; + + uint8_t p_str[(P384_LIMBS * sizeof(Limb)) + 1]; + gfp_little_endian_bytes_from_scalar(p_str, sizeof(p_str) / sizeof(p_str[0]), + p_scalar, P384_LIMBS); + + /* A |P384_POINT| is (3 * 48) = 144 bytes, and the 64-byte alignment should + * add no more than 63 bytes of overhead. Thus, |table| should require + * ~2367 ((144 * 16) + 63) bytes of stack space. */ + alignas(64) P384_POINT table[16]; + + /* table[0] is implicitly (0,0,0) (the point at infinity), therefore it is + * not stored. All other values are actually stored with an offset of -1 in + * table. */ + P384_POINT *row = table; + + limbs_copy(row[1 - 1].X, p_x, P384_LIMBS); + limbs_copy(row[1 - 1].Y, p_y, P384_LIMBS); + limbs_copy(row[1 - 1].Z, ONE, P384_LIMBS); + + GFp_nistz384_point_double(&row[2 - 1], &row[1 - 1]); + GFp_nistz384_point_add(&row[3 - 1], &row[2 - 1], &row[1 - 1]); + GFp_nistz384_point_double(&row[4 - 1], &row[2 - 1]); + GFp_nistz384_point_double(&row[6 - 1], &row[3 - 1]); + GFp_nistz384_point_double(&row[8 - 1], &row[4 - 1]); + GFp_nistz384_point_double(&row[12 - 1], &row[6 - 1]); + GFp_nistz384_point_add(&row[5 - 1], &row[4 - 1], &row[1 - 1]); + GFp_nistz384_point_add(&row[7 - 1], &row[6 - 1], &row[1 - 1]); + GFp_nistz384_point_add(&row[9 - 1], &row[8 - 1], &row[1 - 1]); + GFp_nistz384_point_add(&row[13 - 1], &row[12 - 1], &row[1 - 1]); + GFp_nistz384_point_double(&row[14 - 1], &row[7 - 1]); + GFp_nistz384_point_double(&row[10 - 1], &row[5 - 1]); + GFp_nistz384_point_add(&row[15 - 1], &row[14 - 1], &row[1 - 1]); + GFp_nistz384_point_add(&row[11 - 1], &row[10 - 1], &row[1 - 1]); + GFp_nistz384_point_double(&row[16 - 1], &row[8 - 1]); + + static const size_t START_INDEX = 384 - 4; + size_t index = START_INDEX; + + BN_ULONG recoded_is_negative; + crypto_word recoded; + + crypto_word wvalue = p_str[(index - 1) / 8]; + wvalue = (wvalue >> ((index - 1) % 8)) & kMask; + + booth_recode(&recoded_is_negative, &recoded, wvalue, 5); + dev_assert_secret(!recoded_is_negative); + + gfp_p384_point_select_w5(r, table, recoded); + + while (index >= kWindowSize) { + if (index != START_INDEX) { + size_t off = (index - 1) / 8; + + wvalue = p_str[off] | p_str[off + 1] << 8; + wvalue = (wvalue >> ((index - 1) % 8)) & kMask; + add_precomputed_w5(r, wvalue, table); + } + + index -= kWindowSize; + + GFp_nistz384_point_double(r, r); + GFp_nistz384_point_double(r, r); + GFp_nistz384_point_double(r, r); + GFp_nistz384_point_double(r, r); + GFp_nistz384_point_double(r, r); + } + + /* Final window */ + wvalue = p_str[0]; + wvalue = (wvalue << 1) & kMask; + add_precomputed_w5(r, wvalue, table); +} + +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif diff --git a/vendor/ring/crypto/fipsmodule/ec/gfp_p256.c b/vendor/ring/crypto/fipsmodule/ec/gfp_p256.c new file mode 100644 index 00000000..451c5fa4 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/ec/gfp_p256.c @@ -0,0 +1,50 @@ +/* Copyright 2016 Brian Smith. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +#include "./p256_shared.h" + +#include "../../limbs/limbs.h" + +#if !defined(OPENSSL_USE_NISTZ256) + +typedef Limb ScalarMont[P256_LIMBS]; +typedef Limb Scalar[P256_LIMBS]; + +#include "../bn/internal.h" + +void GFp_p256_scalar_mul_mont(ScalarMont r, const ScalarMont a, + const ScalarMont b) { + static const BN_ULONG N[] = { + TOBN(0xf3b9cac2, 0xfc632551), + TOBN(0xbce6faad, 0xa7179e84), + TOBN(0xffffffff, 0xffffffff), + TOBN(0xffffffff, 0x00000000), + }; + static const BN_ULONG N_N0[] = { + BN_MONT_CTX_N0(0xccd1c8aa, 0xee00bc4f) + }; + /* XXX: Inefficient. TODO: optimize with dedicated multiplication routine. */ + GFp_bn_mul_mont(r, a, b, N, N_N0, P256_LIMBS); +} + +/* XXX: Inefficient. TODO: optimize with dedicated squaring routine. */ +void GFp_p256_scalar_sqr_rep_mont(ScalarMont r, const ScalarMont a, Limb rep) { + dev_assert_secret(rep >= 1); + GFp_p256_scalar_mul_mont(r, a, a); + for (Limb i = 1; i < rep; ++i) { + GFp_p256_scalar_mul_mont(r, r, r); + } +} + +#endif diff --git a/vendor/ring/crypto/fipsmodule/ec/gfp_p384.c b/vendor/ring/crypto/fipsmodule/ec/gfp_p384.c new file mode 100644 index 00000000..23d81f6b --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/ec/gfp_p384.c @@ -0,0 +1,238 @@ +/* Copyright 2016 Brian Smith. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +#include "../../limbs/limbs.h" + +#include "ecp_nistz384.h" +#include "../bn/internal.h" +#include "../../internal.h" + +#include "../../limbs/limbs.inl" + + /* XXX: Here we assume that the conversion from |Carry| to |Limb| is + * constant-time, but we haven't verified that assumption. TODO: Fix it so + * we don't need to make that assumption. */ + + +typedef Limb Elem[P384_LIMBS]; +typedef Limb ScalarMont[P384_LIMBS]; +typedef Limb Scalar[P384_LIMBS]; + + +static const BN_ULONG Q[P384_LIMBS] = { + TOBN(0x00000000, 0xffffffff), + TOBN(0xffffffff, 0x00000000), + TOBN(0xffffffff, 0xfffffffe), + TOBN(0xffffffff, 0xffffffff), + TOBN(0xffffffff, 0xffffffff), + TOBN(0xffffffff, 0xffffffff), +}; + +static const BN_ULONG N[P384_LIMBS] = { + TOBN(0xecec196a, 0xccc52973), + TOBN(0x581a0db2, 0x48b0a77a), + TOBN(0xc7634d81, 0xf4372ddf), + TOBN(0xffffffff, 0xffffffff), + TOBN(0xffffffff, 0xffffffff), + TOBN(0xffffffff, 0xffffffff), +}; + + +static const BN_ULONG ONE[P384_LIMBS] = { + TOBN(0xffffffff, 1), TOBN(0, 0xffffffff), TOBN(0, 1), TOBN(0, 0), TOBN(0, 0), + TOBN(0, 0), +}; + + +/* XXX: MSVC for x86 warns when it fails to inline these functions it should + * probably inline. */ +#if defined(_MSC_VER) && !defined(__clang__) && defined(OPENSSL_X86) +#define INLINE_IF_POSSIBLE __forceinline +#else +#define INLINE_IF_POSSIBLE inline +#endif + +static inline Limb is_equal(const Elem a, const Elem b) { + return LIMBS_equal(a, b, P384_LIMBS); +} + +static inline Limb is_zero(const BN_ULONG a[P384_LIMBS]) { + return LIMBS_are_zero(a, P384_LIMBS); +} + +static inline void copy_conditional(Elem r, const Elem a, + const Limb condition) { + for (size_t i = 0; i < P384_LIMBS; ++i) { + r[i] = constant_time_select_w(condition, a[i], r[i]); + } +} + + +static inline void elem_add(Elem r, const Elem a, const Elem b) { + LIMBS_add_mod(r, a, b, Q, P384_LIMBS); +} + +static inline void elem_sub(Elem r, const Elem a, const Elem b) { + LIMBS_sub_mod(r, a, b, Q, P384_LIMBS); +} + +static void elem_div_by_2(Elem r, const Elem a) { + /* Consider the case where `a` is even. Then we can shift `a` right one bit + * and the result will still be valid because we didn't lose any bits and so + * `(a >> 1) * 2 == a (mod q)`, which is the invariant we must satisfy. + * + * The remainder of this comment is considering the case where `a` is odd. + * + * Since `a` is odd, it isn't the case that `(a >> 1) * 2 == a (mod q)` + * because the lowest bit is lost during the shift. For example, consider: + * + * ```python + * q = 2**384 - 2**128 - 2**96 + 2**32 - 1 + * a = 2**383 + * two_a = a * 2 % q + * assert two_a == 0x100000000ffffffffffffffff00000001 + * ``` + * + * Notice there how `(2 * a) % q` wrapped around to a smaller odd value. When + * we divide `two_a` by two (mod q), we need to get the value `2**383`, which + * we obviously can't get with just a right shift. + * + * `q` is odd, and `a` is odd, so `a + q` is even. We could calculate + * `(a + q) >> 1` and then reduce it mod `q`. However, then we would have to + * keep track of an extra most significant bit. We can avoid that by instead + * calculating `(a >> 1) + ((q + 1) >> 1)`. The `1` in `q + 1` is the least + * significant bit of `a`. `q + 1` is even, which means it can be shifted + * without losing any bits. Since `q` is odd, `q - 1` is even, so the largest + * odd field element is `q - 2`. Thus we know that `a <= q - 2`. We know + * `(q + 1) >> 1` is `(q + 1) / 2` since (`q + 1`) is even. The value of + * `a >> 1` is `(a - 1)/2` since the shift will drop the least significant + * bit of `a`, which is 1. Thus: + * + * sum = ((q + 1) >> 1) + (a >> 1) + * sum = (q + 1)/2 + (a >> 1) (substituting (q + 1)/2) + * <= (q + 1)/2 + (q - 2 - 1)/2 (substituting a <= q - 2) + * <= (q + 1)/2 + (q - 3)/2 (simplifying) + * <= (q + 1 + q - 3)/2 (factoring out the common divisor) + * <= (2q - 2)/2 (simplifying) + * <= q - 1 (simplifying) + * + * Thus, no reduction of the sum mod `q` is necessary. */ + + Limb is_odd = constant_time_is_nonzero_w(a[0] & 1); + + /* r = a >> 1. */ + Limb carry = a[P384_LIMBS - 1] & 1; + r[P384_LIMBS - 1] = a[P384_LIMBS - 1] >> 1; + for (size_t i = 1; i < P384_LIMBS; ++i) { + Limb new_carry = a[P384_LIMBS - i - 1]; + r[P384_LIMBS - i - 1] = + (a[P384_LIMBS - i - 1] >> 1) | (carry << (LIMB_BITS - 1)); + carry = new_carry; + } + + static const Elem Q_PLUS_1_SHR_1 = { + TOBN(0x00000000, 0x80000000), TOBN(0x7fffffff, 0x80000000), + TOBN(0xffffffff, 0xffffffff), TOBN(0xffffffff, 0xffffffff), + TOBN(0xffffffff, 0xffffffff), TOBN(0x7fffffff, 0xffffffff), + }; + + Elem adjusted; + BN_ULONG carry2 = limbs_add(adjusted, r, Q_PLUS_1_SHR_1, P384_LIMBS); + dev_assert_secret(carry2 == 0); + (void)carry2; + copy_conditional(r, adjusted, is_odd); +} + +static inline void elem_mul_mont(Elem r, const Elem a, const Elem b) { + static const BN_ULONG Q_N0[] = { + BN_MONT_CTX_N0(0x1, 0x1) + }; + /* XXX: Not (clearly) constant-time; inefficient.*/ + GFp_bn_mul_mont(r, a, b, Q, Q_N0, P384_LIMBS); +} + +static inline void elem_mul_by_2(Elem r, const Elem a) { + LIMBS_shl_mod(r, a, Q, P384_LIMBS); +} + +static INLINE_IF_POSSIBLE void elem_mul_by_3(Elem r, const Elem a) { + /* XXX: inefficient. TODO: Replace with an integrated shift + add. */ + Elem doubled; + elem_add(doubled, a, a); + elem_add(r, doubled, a); +} + +static inline void elem_sqr_mont(Elem r, const Elem a) { + /* XXX: Inefficient. TODO: Add a dedicated squaring routine. */ + elem_mul_mont(r, a, a); +} + +void GFp_p384_elem_sub(Elem r, const Elem a, const Elem b) { + elem_sub(r, a, b); +} + +void GFp_p384_elem_div_by_2(Elem r, const Elem a) { + elem_div_by_2(r, a); +} + +void GFp_p384_elem_mul_mont(Elem r, const Elem a, const Elem b) { + elem_mul_mont(r, a, b); +} + +void GFp_p384_elem_neg(Elem r, const Elem a) { + Limb is_zero = LIMBS_are_zero(a, P384_LIMBS); + Carry borrow = limbs_sub(r, Q, a, P384_LIMBS); + dev_assert_secret(borrow == 0); + (void)borrow; + for (size_t i = 0; i < P384_LIMBS; ++i) { + r[i] = constant_time_select_w(is_zero, 0, r[i]); + } +} + + +void GFp_p384_scalar_mul_mont(ScalarMont r, const ScalarMont a, + const ScalarMont b) { + static const BN_ULONG N_N0[] = { + BN_MONT_CTX_N0(0x6ed46089, 0xe88fdc45) + }; + /* XXX: Inefficient. TODO: Add dedicated multiplication routine. */ + GFp_bn_mul_mont(r, a, b, N, N_N0, P384_LIMBS); +} + + +/* TODO(perf): Optimize this. */ + +static void gfp_p384_point_select_w5(P384_POINT *out, + const P384_POINT table[16], size_t index) { + Elem x; limbs_zero(x, P384_LIMBS); + Elem y; limbs_zero(y, P384_LIMBS); + Elem z; limbs_zero(z, P384_LIMBS); + + // TODO: Rewrite in terms of |limbs_select|. + for (size_t i = 0; i < 16; ++i) { + crypto_word equal = constant_time_eq_w(index, (crypto_word)i + 1); + for (size_t j = 0; j < P384_LIMBS; ++j) { + x[j] = constant_time_select_w(equal, table[i].X[j], x[j]); + y[j] = constant_time_select_w(equal, table[i].Y[j], y[j]); + z[j] = constant_time_select_w(equal, table[i].Z[j], z[j]); + } + } + + limbs_copy(out->X, x, P384_LIMBS); + limbs_copy(out->Y, y, P384_LIMBS); + limbs_copy(out->Z, z, P384_LIMBS); +} + + +#include "ecp_nistz384.inl" diff --git a/vendor/ring/crypto/fipsmodule/ec/make_tables.go b/vendor/ring/crypto/fipsmodule/ec/make_tables.go new file mode 100644 index 00000000..34e8c23a --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/ec/make_tables.go @@ -0,0 +1,406 @@ +/* Copyright (c) 2020, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +package main + +import ( + "crypto/elliptic" + "fmt" + "io" + "math/big" + "os" +) + +func main() { + if err := writeP256X86_64Table("p256-x86_64-table.h"); err != nil { + fmt.Fprintf(os.Stderr, "Error writing p256-x86_64-table.h: %s\n", err) + os.Exit(1) + } + + if err := writeP256Table("p256_table.h"); err != nil { + fmt.Fprintf(os.Stderr, "Error writing p256_table.h: %s\n", err) + os.Exit(1) + } +} + +func writeP256X86_64Table(path string) error { + curve := elliptic.P256() + tables := make([][][2]*big.Int, 0, 37) + for shift := 0; shift < 256; shift += 7 { + row := makeMultiples(curve, 64, shift) + tables = append(tables, row) + } + + f, err := os.Create(path) + if err != nil { + return err + } + defer f.Close() + + const fileHeader = `/* + * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2015, Intel Inc. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +// This is the precomputed constant time access table for the code in +// p256-x86_64.c, for the default generator. The table consists of 37 +// subtables, each subtable contains 64 affine points. The affine points are +// encoded as eight uint64's, four for the x coordinate and four for the y. +// Both values are in little-endian order. There are 37 tables because a +// signed, 6-bit wNAF form of the scalar is used and ceil(256/(6 + 1)) = 37. +// Within each table there are 64 values because the 6-bit wNAF value can take +// 64 values, ignoring the sign bit, which is implemented by performing a +// negation of the affine point when required. We would like to align it to 2MB +// in order to increase the chances of using a large page but that appears to +// lead to invalid ELF files being produced. + +// This file is generated by make_tables.go. + +static const alignas(4096) PRECOMP256_ROW ecp_nistz256_precomputed[37] = ` + if _, err := f.WriteString(fileHeader); err != nil { + return err + } + if err := writeTables(f, curve, tables, true, 4, writeBNMont); err != nil { + return err + } + if _, err := f.WriteString(";\n"); err != nil { + return err + } + + return nil +} + +func writeP256Table(path string) error { + curve := elliptic.P256() + tables := [][][2]*big.Int{ + makeComb(curve, 64, 4, 0), + makeComb(curve, 64, 4, 32), + } + + f, err := os.Create(path) + if err != nil { + return err + } + defer f.Close() + + const fileHeader = `/* Copyright (c) 2020, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +// This file is generated by make_tables.go. + +// Base point pre computation +// -------------------------- +// +// Two different sorts of precomputed tables are used in the following code. +// Each contain various points on the curve, where each point is three field +// elements (x, y, z). +// +// For the base point table, z is usually 1 (0 for the point at infinity). +// This table has 2 * 16 elements, starting with the following: +// index | bits | point +// ------+---------+------------------------------ +// 0 | 0 0 0 0 | 0G +// 1 | 0 0 0 1 | 1G +// 2 | 0 0 1 0 | 2^64G +// 3 | 0 0 1 1 | (2^64 + 1)G +// 4 | 0 1 0 0 | 2^128G +// 5 | 0 1 0 1 | (2^128 + 1)G +// 6 | 0 1 1 0 | (2^128 + 2^64)G +// 7 | 0 1 1 1 | (2^128 + 2^64 + 1)G +// 8 | 1 0 0 0 | 2^192G +// 9 | 1 0 0 1 | (2^192 + 1)G +// 10 | 1 0 1 0 | (2^192 + 2^64)G +// 11 | 1 0 1 1 | (2^192 + 2^64 + 1)G +// 12 | 1 1 0 0 | (2^192 + 2^128)G +// 13 | 1 1 0 1 | (2^192 + 2^128 + 1)G +// 14 | 1 1 1 0 | (2^192 + 2^128 + 2^64)G +// 15 | 1 1 1 1 | (2^192 + 2^128 + 2^64 + 1)G +// followed by a copy of this with each element multiplied by 2^32. +// +// The reason for this is so that we can clock bits into four different +// locations when doing simple scalar multiplies against the base point, +// and then another four locations using the second 16 elements. +// +// Tables for other points have table[i] = iG for i in 0 .. 16. + +// fiat_p256_g_pre_comp is the table of precomputed base points +#if defined(BORINGSSL_NISTP256_64BIT) +static const fiat_p256_felem fiat_p256_g_pre_comp[2][15][2] = ` + if _, err := f.WriteString(fileHeader); err != nil { + return err + } + if err := writeTables(f, curve, tables, true, 4, writeU64Mont); err != nil { + return err + } + if _, err := f.WriteString(";\n#else\nstatic const fiat_p256_felem fiat_p256_g_pre_comp[2][15][2] = "); err != nil { + return err + } + if err := writeTables(f, curve, tables, true, 4, writeU32Mont); err != nil { + return err + } + if _, err := f.WriteString(";\n#endif\n"); err != nil { + return err + } + + return nil +} + +// makeMultiples returns a table of the first n multiples of 2^shift * G, +// starting from 1 * 2^shift * G. +func makeMultiples(curve elliptic.Curve, n, shift int) [][2]*big.Int { + ret := make([][2]*big.Int, n) + x, y := curve.Params().Gx, curve.Params().Gy + for j := 0; j < shift; j++ { + x, y = curve.Double(x, y) + } + ret[1-1] = [2]*big.Int{x, y} + for i := 2; i <= n; i++ { + if i&1 == 0 { + x, y := curve.Double(ret[i/2-1][0], ret[i/2-1][1]) + ret[i-1] = [2]*big.Int{x, y} + } else { + x, y := curve.Add(ret[i-1-1][0], ret[i-1-1][1], ret[1-1][0], ret[1-1][1]) + ret[i-1] = [2]*big.Int{x, y} + } + } + return ret +} + +// makeComb returns a table of 2^size - 1 points. The i-1th entry is k*G. +// If i is represented in binary by b0*2^0 + b1*2^1 + ... bn*2^n, k is +// b0*2^(shift + 0*stride) + b1*2^(shift + 1*stride) + ... + bn*2^(shift + n*stride). +// The entry for i = 0 is omitted because it is always the point at infinity. +func makeComb(curve elliptic.Curve, stride, size, shift int) [][2]*big.Int { + ret := make([][2]*big.Int, 1< 0 { + if i%wrap == 0 { + if _, err := io.WriteString(w, ",\n"); err != nil { + return err + } + if err := writeIndent(w, indent+1); err != nil { + return err + } + } else { + if _, err := io.WriteString(w, ", "); err != nil { + return err + } + } + } + if _, err := io.WriteString(w, format(word)); err != nil { + return err + } + } + if _, err := io.WriteString(w, "}"); err != nil { + return err + } + return nil +} + +func writeBNMont(w io.Writer, curve elliptic.Curve, n *big.Int, indent int) error { + n = toMontgomery(curve, n) + return writeWords(w, bigIntToU64s(curve, n), 2, indent, func(word uint64) string { + return fmt.Sprintf("TOBN(0x%08x, 0x%08x)", uint32(word>>32), uint32(word)) + }) +} + +func writeU64Mont(w io.Writer, curve elliptic.Curve, n *big.Int, indent int) error { + n = toMontgomery(curve, n) + return writeWords(w, bigIntToU64s(curve, n), 3, indent, func(word uint64) string { + return fmt.Sprintf("0x%016x", word) + }) +} + +func writeU32Mont(w io.Writer, curve elliptic.Curve, n *big.Int, indent int) error { + n = toMontgomery(curve, n) + return writeWords(w, bigIntToU32s(curve, n), 6, indent, func(word uint64) string { + if word >= 1<<32 { + panic(fmt.Sprintf("word too large: 0x%x", word)) + } + return fmt.Sprintf("0x%08x", word) + }) +} + +type writeBigIntFunc func(w io.Writer, curve elliptic.Curve, n *big.Int, indent int) error + +func writeTable(w io.Writer, curve elliptic.Curve, table [][2]*big.Int, isRoot bool, indent int, writeBigInt writeBigIntFunc) error { + if _, err := io.WriteString(w, "{"); err != nil { + return err + } + if isRoot { + if _, err := io.WriteString(w, "\n"); err != nil { + return err + } + if err := writeIndent(w, indent); err != nil { + return err + } + } else { + indent++ + } + for i, point := range table { + if i != 0 { + if _, err := io.WriteString(w, ",\n"); err != nil { + return err + } + if err := writeIndent(w, indent); err != nil { + return err + } + } + if _, err := io.WriteString(w, "{"); err != nil { + return err + } + if err := writeBigInt(w, curve, point[0], indent+1); err != nil { + return err + } + if _, err := io.WriteString(w, ",\n"); err != nil { + return err + } + if err := writeIndent(w, indent+1); err != nil { + return err + } + if err := writeBigInt(w, curve, point[1], indent+1); err != nil { + return err + } + if _, err := io.WriteString(w, "}"); err != nil { + return err + } + } + if _, err := io.WriteString(w, "}"); err != nil { + return err + } + return nil +} + +func writeTables(w io.Writer, curve elliptic.Curve, tables [][][2]*big.Int, isRoot bool, indent int, writeBigInt writeBigIntFunc) error { + if _, err := io.WriteString(w, "{"); err != nil { + return err + } + if isRoot { + if _, err := io.WriteString(w, "\n"); err != nil { + return err + } + if err := writeIndent(w, indent); err != nil { + return err + } + } else { + indent++ + } + for i, table := range tables { + if i != 0 { + if _, err := io.WriteString(w, ",\n"); err != nil { + return err + } + if err := writeIndent(w, indent); err != nil { + return err + } + } + if err := writeTable(w, curve, table, false, indent, writeBigInt); err != nil { + return err + } + } + if _, err := io.WriteString(w, "}"); err != nil { + return err + } + return nil +} diff --git a/vendor/ring/crypto/fipsmodule/ec/p256-x86_64-table.h b/vendor/ring/crypto/fipsmodule/ec/p256-x86_64-table.h new file mode 100644 index 00000000..3af0b016 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/ec/p256-x86_64-table.h @@ -0,0 +1,9497 @@ +/* + * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2015, Intel Inc. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +// This is the precomputed constant time access table for the code in +// p256-x86_64.c, for the default generator. The table consists of 37 +// subtables, each subtable contains 64 affine points. The affine points are +// encoded as eight uint64's, four for the x coordinate and four for the y. +// Both values are in little-endian order. There are 37 tables because a +// signed, 6-bit wNAF form of the scalar is used and ceil(256/(6 + 1)) = 37. +// Within each table there are 64 values because the 6-bit wNAF value can take +// 64 values, ignoring the sign bit, which is implemented by performing a +// negation of the affine point when required. We would like to align it to 2MB +// in order to increase the chances of using a large page but that appears to +// lead to invalid ELF files being produced. + +// This file is generated by make_tables.go. + +static const alignas(4096) PRECOMP256_ROW ecp_nistz256_precomputed[37] = { + {{{TOBN(0x79e730d4, 0x18a9143c), TOBN(0x75ba95fc, 0x5fedb601), + TOBN(0x79fb732b, 0x77622510), TOBN(0x18905f76, 0xa53755c6)}, + {TOBN(0xddf25357, 0xce95560a), TOBN(0x8b4ab8e4, 0xba19e45c), + TOBN(0xd2e88688, 0xdd21f325), TOBN(0x8571ff18, 0x25885d85)}}, + {{TOBN(0x850046d4, 0x10ddd64d), TOBN(0xaa6ae3c1, 0xa433827d), + TOBN(0x73220503, 0x8d1490d9), TOBN(0xf6bb32e4, 0x3dcf3a3b)}, + {TOBN(0x2f3648d3, 0x61bee1a5), TOBN(0x152cd7cb, 0xeb236ff8), + TOBN(0x19a8fb0e, 0x92042dbe), TOBN(0x78c57751, 0x0a5b8a3b)}}, + {{TOBN(0xffac3f90, 0x4eebc127), TOBN(0xb027f84a, 0x087d81fb), + TOBN(0x66ad77dd, 0x87cbbc98), TOBN(0x26936a3f, 0xb6ff747e)}, + {TOBN(0xb04c5c1f, 0xc983a7eb), TOBN(0x583e47ad, 0x0861fe1a), + TOBN(0x78820831, 0x1a2ee98e), TOBN(0xd5f06a29, 0xe587cc07)}}, + {{TOBN(0x74b0b50d, 0x46918dcc), TOBN(0x4650a6ed, 0xc623c173), + TOBN(0x0cdaacac, 0xe8100af2), TOBN(0x577362f5, 0x41b0176b)}, + {TOBN(0x2d96f24c, 0xe4cbaba6), TOBN(0x17628471, 0xfad6f447), + TOBN(0x6b6c36de, 0xe5ddd22e), TOBN(0x84b14c39, 0x4c5ab863)}}, + {{TOBN(0xbe1b8aae, 0xc45c61f5), TOBN(0x90ec649a, 0x94b9537d), + TOBN(0x941cb5aa, 0xd076c20c), TOBN(0xc9079605, 0x890523c8)}, + {TOBN(0xeb309b4a, 0xe7ba4f10), TOBN(0x73c568ef, 0xe5eb882b), + TOBN(0x3540a987, 0x7e7a1f68), TOBN(0x73a076bb, 0x2dd1e916)}}, + {{TOBN(0x40394737, 0x3e77664a), TOBN(0x55ae744f, 0x346cee3e), + TOBN(0xd50a961a, 0x5b17a3ad), TOBN(0x13074b59, 0x54213673)}, + {TOBN(0x93d36220, 0xd377e44b), TOBN(0x299c2b53, 0xadff14b5), + TOBN(0xf424d44c, 0xef639f11), TOBN(0xa4c9916d, 0x4a07f75f)}}, + {{TOBN(0x0746354e, 0xa0173b4f), TOBN(0x2bd20213, 0xd23c00f7), + TOBN(0xf43eaab5, 0x0c23bb08), TOBN(0x13ba5119, 0xc3123e03)}, + {TOBN(0x2847d030, 0x3f5b9d4d), TOBN(0x6742f2f2, 0x5da67bdd), + TOBN(0xef933bdc, 0x77c94195), TOBN(0xeaedd915, 0x6e240867)}}, + {{TOBN(0x27f14cd1, 0x9499a78f), TOBN(0x462ab5c5, 0x6f9b3455), + TOBN(0x8f90f02a, 0xf02cfc6b), TOBN(0xb763891e, 0xb265230d)}, + {TOBN(0xf59da3a9, 0x532d4977), TOBN(0x21e3327d, 0xcf9eba15), + TOBN(0x123c7b84, 0xbe60bbf0), TOBN(0x56ec12f2, 0x7706df76)}}, + {{TOBN(0x75c96e8f, 0x264e20e8), TOBN(0xabe6bfed, 0x59a7a841), + TOBN(0x2cc09c04, 0x44c8eb00), TOBN(0xe05b3080, 0xf0c4e16b)}, + {TOBN(0x1eb7777a, 0xa45f3314), TOBN(0x56af7bed, 0xce5d45e3), + TOBN(0x2b6e019a, 0x88b12f1a), TOBN(0x086659cd, 0xfd835f9b)}}, + {{TOBN(0x2c18dbd1, 0x9dc21ec8), TOBN(0x98f9868a, 0x0fcf8139), + TOBN(0x737d2cd6, 0x48250b49), TOBN(0xcc61c947, 0x24b3428f)}, + {TOBN(0x0c2b4078, 0x80dd9e76), TOBN(0xc43a8991, 0x383fbe08), + TOBN(0x5f7d2d65, 0x779be5d2), TOBN(0x78719a54, 0xeb3b4ab5)}}, + {{TOBN(0xea7d260a, 0x6245e404), TOBN(0x9de40795, 0x6e7fdfe0), + TOBN(0x1ff3a415, 0x8dac1ab5), TOBN(0x3e7090f1, 0x649c9073)}, + {TOBN(0x1a768561, 0x2b944e88), TOBN(0x250f939e, 0xe57f61c8), + TOBN(0x0c0daa89, 0x1ead643d), TOBN(0x68930023, 0xe125b88e)}}, + {{TOBN(0x04b71aa7, 0xd2697768), TOBN(0xabdedef5, 0xca345a33), + TOBN(0x2409d29d, 0xee37385e), TOBN(0x4ee1df77, 0xcb83e156)}, + {TOBN(0x0cac12d9, 0x1cbb5b43), TOBN(0x170ed2f6, 0xca895637), + TOBN(0x28228cfa, 0x8ade6d66), TOBN(0x7ff57c95, 0x53238aca)}}, + {{TOBN(0xccc42563, 0x4b2ed709), TOBN(0x0e356769, 0x856fd30d), + TOBN(0xbcbcd43f, 0x559e9811), TOBN(0x738477ac, 0x5395b759)}, + {TOBN(0x35752b90, 0xc00ee17f), TOBN(0x68748390, 0x742ed2e3), + TOBN(0x7cd06422, 0xbd1f5bc1), TOBN(0xfbc08769, 0xc9e7b797)}}, + {{TOBN(0xa242a35b, 0xb0cf664a), TOBN(0x126e48f7, 0x7f9707e3), + TOBN(0x1717bf54, 0xc6832660), TOBN(0xfaae7332, 0xfd12c72e)}, + {TOBN(0x27b52db7, 0x995d586b), TOBN(0xbe29569e, 0x832237c2), + TOBN(0xe8e4193e, 0x2a65e7db), TOBN(0x152706dc, 0x2eaa1bbb)}}, + {{TOBN(0x72bcd8b7, 0xbc60055b), TOBN(0x03cc23ee, 0x56e27e4b), + TOBN(0xee337424, 0xe4819370), TOBN(0xe2aa0e43, 0x0ad3da09)}, + {TOBN(0x40b8524f, 0x6383c45d), TOBN(0xd7663554, 0x42a41b25), + TOBN(0x64efa6de, 0x778a4797), TOBN(0x2042170a, 0x7079adf4)}}, + {{TOBN(0x808b0b65, 0x0bc6fb80), TOBN(0x5882e075, 0x3ffe2e6b), + TOBN(0xd5ef2f7c, 0x2c83f549), TOBN(0x54d63c80, 0x9103b723)}, + {TOBN(0xf2f11bd6, 0x52a23f9b), TOBN(0x3670c319, 0x4b0b6587), + TOBN(0x55c4623b, 0xb1580e9e), TOBN(0x64edf7b2, 0x01efe220)}}, + {{TOBN(0x97091dcb, 0xd53c5c9d), TOBN(0xf17624b6, 0xac0a177b), + TOBN(0xb0f13975, 0x2cfe2dff), TOBN(0xc1a35c0a, 0x6c7a574e)}, + {TOBN(0x227d3146, 0x93e79987), TOBN(0x0575bf30, 0xe89cb80e), + TOBN(0x2f4e247f, 0x0d1883bb), TOBN(0xebd51226, 0x3274c3d0)}}, + {{TOBN(0x5f3e51c8, 0x56ada97a), TOBN(0x4afc964d, 0x8f8b403e), + TOBN(0xa6f247ab, 0x412e2979), TOBN(0x675abd1b, 0x6f80ebda)}, + {TOBN(0x66a2bd72, 0x5e485a1d), TOBN(0x4b2a5caf, 0x8f4f0b3c), + TOBN(0x2626927f, 0x1b847bba), TOBN(0x6c6fc7d9, 0x0502394d)}}, + {{TOBN(0xfea912ba, 0xa5659ae8), TOBN(0x68363aba, 0x25e1a16e), + TOBN(0xb8842277, 0x752c41ac), TOBN(0xfe545c28, 0x2897c3fc)}, + {TOBN(0x2d36e9e7, 0xdc4c696b), TOBN(0x5806244a, 0xfba977c5), + TOBN(0x85665e9b, 0xe39508c1), TOBN(0xf720ee25, 0x6d12597b)}}, + {{TOBN(0x8a979129, 0xd2337a31), TOBN(0x5916868f, 0x0f862bdc), + TOBN(0x048099d9, 0x5dd283ba), TOBN(0xe2d1eeb6, 0xfe5bfb4e)}, + {TOBN(0x82ef1c41, 0x7884005d), TOBN(0xa2d4ec17, 0xffffcbae), + TOBN(0x9161c53f, 0x8aa95e66), TOBN(0x5ee104e1, 0xc5fee0d0)}}, + {{TOBN(0x562e4cec, 0xc135b208), TOBN(0x74e1b265, 0x4783f47d), + TOBN(0x6d2a506c, 0x5a3f3b30), TOBN(0xecead9f4, 0xc16762fc)}, + {TOBN(0xf29dd4b2, 0xe286e5b9), TOBN(0x1b0fadc0, 0x83bb3c61), + TOBN(0x7a75023e, 0x7fac29a4), TOBN(0xc086d5f1, 0xc9477fa3)}}, + {{TOBN(0x0fc61135, 0x2f6f3076), TOBN(0xc99ffa23, 0xe3912a9a), + TOBN(0x6a0b0685, 0xd2f8ba3d), TOBN(0xfdc777e8, 0xe93358a4)}, + {TOBN(0x94a787bb, 0x35415f04), TOBN(0x640c2d6a, 0x4d23fea4), + TOBN(0x9de917da, 0x153a35b5), TOBN(0x793e8d07, 0x5d5cd074)}}, + {{TOBN(0xf4f87653, 0x2de45068), TOBN(0x37c7a7e8, 0x9e2e1f6e), + TOBN(0xd0825fa2, 0xa3584069), TOBN(0xaf2cea7c, 0x1727bf42)}, + {TOBN(0x0360a4fb, 0x9e4785a9), TOBN(0xe5fda49c, 0x27299f4a), + TOBN(0x48068e13, 0x71ac2f71), TOBN(0x83d0687b, 0x9077666f)}}, + {{TOBN(0x6d3883b2, 0x15d02819), TOBN(0x6d0d7550, 0x40dd9a35), + TOBN(0x61d7cbf9, 0x1d2b469f), TOBN(0xf97b232f, 0x2efc3115)}, + {TOBN(0xa551d750, 0xb24bcbc7), TOBN(0x11ea4949, 0x88a1e356), + TOBN(0x7669f031, 0x93cb7501), TOBN(0x595dc55e, 0xca737b8a)}}, + {{TOBN(0xa4a319ac, 0xd837879f), TOBN(0x6fc1b49e, 0xed6b67b0), + TOBN(0xe3959933, 0x32f1f3af), TOBN(0x966742eb, 0x65432a2e)}, + {TOBN(0x4b8dc9fe, 0xb4966228), TOBN(0x96cc6312, 0x43f43950), + TOBN(0x12068859, 0xc9b731ee), TOBN(0x7b948dc3, 0x56f79968)}}, + {{TOBN(0x61e4ad32, 0xed1f8008), TOBN(0xe6c9267a, 0xd8b17538), + TOBN(0x1ac7c5eb, 0x857ff6fb), TOBN(0x994baaa8, 0x55f2fb10)}, + {TOBN(0x84cf14e1, 0x1d248018), TOBN(0x5a39898b, 0x628ac508), + TOBN(0x14fde97b, 0x5fa944f5), TOBN(0xed178030, 0xd12e5ac7)}}, + {{TOBN(0x042c2af4, 0x97e2feb4), TOBN(0xd36a42d7, 0xaebf7313), + TOBN(0x49d2c9eb, 0x084ffdd7), TOBN(0x9f8aa54b, 0x2ef7c76a)}, + {TOBN(0x9200b7ba, 0x09895e70), TOBN(0x3bd0c66f, 0xddb7fb58), + TOBN(0x2d97d108, 0x78eb4cbb), TOBN(0x2d431068, 0xd84bde31)}}, + {{TOBN(0x4b523eb7, 0x172ccd1f), TOBN(0x7323cb28, 0x30a6a892), + TOBN(0x97082ec0, 0xcfe153eb), TOBN(0xe97f6b6a, 0xf2aadb97)}, + {TOBN(0x1d3d393e, 0xd1a83da1), TOBN(0xa6a7f9c7, 0x804b2a68), + TOBN(0x4a688b48, 0x2d0cb71e), TOBN(0xa9b4cc5f, 0x40585278)}}, + {{TOBN(0x5e5db46a, 0xcb66e132), TOBN(0xf1be963a, 0x0d925880), + TOBN(0x944a7027, 0x0317b9e2), TOBN(0xe266f959, 0x48603d48)}, + {TOBN(0x98db6673, 0x5c208899), TOBN(0x90472447, 0xa2fb18a3), + TOBN(0x8a966939, 0x777c619f), TOBN(0x3798142a, 0x2a3be21b)}}, + {{TOBN(0xb4241cb1, 0x3298b343), TOBN(0xa3a14e49, 0xb44f65a1), + TOBN(0xc5f4d6cd, 0x3ac77acd), TOBN(0xd0288cb5, 0x52b6fc3c)}, + {TOBN(0xd5cc8c2f, 0x1c040abc), TOBN(0xb675511e, 0x06bf9b4a), + TOBN(0xd667da37, 0x9b3aa441), TOBN(0x460d45ce, 0x51601f72)}}, + {{TOBN(0xe2f73c69, 0x6755ff89), TOBN(0xdd3cf7e7, 0x473017e6), + TOBN(0x8ef5689d, 0x3cf7600d), TOBN(0x948dc4f8, 0xb1fc87b4)}, + {TOBN(0xd9e9fe81, 0x4ea53299), TOBN(0x2d921ca2, 0x98eb6028), + TOBN(0xfaecedfd, 0x0c9803fc), TOBN(0xf38ae891, 0x4d7b4745)}}, + {{TOBN(0xd8c5fccf, 0xc5e3a3d8), TOBN(0xbefd904c, 0x4079dfbf), + TOBN(0xbc6d6a58, 0xfead0197), TOBN(0x39227077, 0x695532a4)}, + {TOBN(0x09e23e6d, 0xdbef42f5), TOBN(0x7e449b64, 0x480a9908), + TOBN(0x7b969c1a, 0xad9a2e40), TOBN(0x6231d792, 0x9591c2a4)}}, + {{TOBN(0x87151456, 0x0f664534), TOBN(0x85ceae7c, 0x4b68f103), + TOBN(0xac09c4ae, 0x65578ab9), TOBN(0x33ec6868, 0xf044b10c)}, + {TOBN(0x6ac4832b, 0x3a8ec1f1), TOBN(0x5509d128, 0x5847d5ef), + TOBN(0xf909604f, 0x763f1574), TOBN(0xb16c4303, 0xc32f63c4)}}, + {{TOBN(0xb6ab2014, 0x7ca23cd3), TOBN(0xcaa7a5c6, 0xa391849d), + TOBN(0x5b0673a3, 0x75678d94), TOBN(0xc982ddd4, 0xdd303e64)}, + {TOBN(0xfd7b000b, 0x5db6f971), TOBN(0xbba2cb1f, 0x6f876f92), + TOBN(0xc77332a3, 0x3c569426), TOBN(0xa159100c, 0x570d74f8)}}, + {{TOBN(0xfd16847f, 0xdec67ef5), TOBN(0x742ee464, 0x233e76b7), + TOBN(0x0b8e4134, 0xefc2b4c8), TOBN(0xca640b86, 0x42a3e521)}, + {TOBN(0x653a0190, 0x8ceb6aa9), TOBN(0x313c300c, 0x547852d5), + TOBN(0x24e4ab12, 0x6b237af7), TOBN(0x2ba90162, 0x8bb47af8)}}, + {{TOBN(0x3d5e58d6, 0xa8219bb7), TOBN(0xc691d0bd, 0x1b06c57f), + TOBN(0x0ae4cb10, 0xd257576e), TOBN(0x3569656c, 0xd54a3dc3)}, + {TOBN(0xe5ebaebd, 0x94cda03a), TOBN(0x934e82d3, 0x162bfe13), + TOBN(0x450ac0ba, 0xe251a0c6), TOBN(0x480b9e11, 0xdd6da526)}}, + {{TOBN(0x00467bc5, 0x8cce08b5), TOBN(0xb636458c, 0x7f178d55), + TOBN(0xc5748bae, 0xa677d806), TOBN(0x2763a387, 0xdfa394eb)}, + {TOBN(0xa12b448a, 0x7d3cebb6), TOBN(0xe7adda3e, 0x6f20d850), + TOBN(0xf63ebce5, 0x1558462c), TOBN(0x58b36143, 0x620088a8)}}, + {{TOBN(0x8a2cc3ca, 0x4d63c0ee), TOBN(0x51233117, 0x0fe948ce), + TOBN(0x7463fd85, 0x222ef33b), TOBN(0xadf0c7dc, 0x7c603d6c)}, + {TOBN(0x0ec32d3b, 0xfe7765e5), TOBN(0xccaab359, 0xbf380409), + TOBN(0xbdaa84d6, 0x8e59319c), TOBN(0xd9a4c280, 0x9c80c34d)}}, + {{TOBN(0xa9d89488, 0xa059c142), TOBN(0x6f5ae714, 0xff0b9346), + TOBN(0x068f237d, 0x16fb3664), TOBN(0x5853e4c4, 0x363186ac)}, + {TOBN(0xe2d87d23, 0x63c52f98), TOBN(0x2ec4a766, 0x81828876), + TOBN(0x47b864fa, 0xe14e7b1c), TOBN(0x0c0bc0e5, 0x69192408)}}, + {{TOBN(0xe4d7681d, 0xb82e9f3e), TOBN(0x83200f0b, 0xdf25e13c), + TOBN(0x8909984c, 0x66f27280), TOBN(0x462d7b00, 0x75f73227)}, + {TOBN(0xd90ba188, 0xf2651798), TOBN(0x74c6e18c, 0x36ab1c34), + TOBN(0xab256ea3, 0x5ef54359), TOBN(0x03466612, 0xd1aa702f)}}, + {{TOBN(0x624d6049, 0x2ed22e91), TOBN(0x6fdfe0b5, 0x6f072822), + TOBN(0xeeca1115, 0x39ce2271), TOBN(0x98100a4f, 0xdb01614f)}, + {TOBN(0xb6b0daa2, 0xa35c628f), TOBN(0xb6f94d2e, 0xc87e9a47), + TOBN(0xc6773259, 0x1d57d9ce), TOBN(0xf70bfeec, 0x03884a7b)}}, + {{TOBN(0x5fb35ccf, 0xed2bad01), TOBN(0xa155cbe3, 0x1da6a5c7), + TOBN(0xc2e2594c, 0x30a92f8f), TOBN(0x649c89ce, 0x5bfafe43)}, + {TOBN(0xd158667d, 0xe9ff257a), TOBN(0x9b359611, 0xf32c50ae), + TOBN(0x4b00b20b, 0x906014cf), TOBN(0xf3a8cfe3, 0x89bc7d3d)}}, + {{TOBN(0x4ff23ffd, 0x248a7d06), TOBN(0x80c5bfb4, 0x878873fa), + TOBN(0xb7d9ad90, 0x05745981), TOBN(0x179c85db, 0x3db01994)}, + {TOBN(0xba41b062, 0x61a6966c), TOBN(0x4d82d052, 0xeadce5a8), + TOBN(0x9e91cd3b, 0xa5e6a318), TOBN(0x47795f4f, 0x95b2dda0)}}, + {{TOBN(0xecfd7c1f, 0xd55a897c), TOBN(0x009194ab, 0xb29110fb), + TOBN(0x5f0e2046, 0xe381d3b0), TOBN(0x5f3425f6, 0xa98dd291)}, + {TOBN(0xbfa06687, 0x730d50da), TOBN(0x0423446c, 0x4b083b7f), + TOBN(0x397a247d, 0xd69d3417), TOBN(0xeb629f90, 0x387ba42a)}}, + {{TOBN(0x1ee426cc, 0xd5cd79bf), TOBN(0x0032940b, 0x946c6e18), + TOBN(0x1b1e8ae0, 0x57477f58), TOBN(0xe94f7d34, 0x6d823278)}, + {TOBN(0xc747cb96, 0x782ba21a), TOBN(0xc5254469, 0xf72b33a5), + TOBN(0x772ef6de, 0xc7f80c81), TOBN(0xd73acbfe, 0x2cd9e6b5)}}, + {{TOBN(0x4075b5b1, 0x49ee90d9), TOBN(0x785c339a, 0xa06e9eba), + TOBN(0xa1030d5b, 0xabf825e0), TOBN(0xcec684c3, 0xa42931dc)}, + {TOBN(0x42ab62c9, 0xc1586e63), TOBN(0x45431d66, 0x5ab43f2b), + TOBN(0x57c8b2c0, 0x55f7835d), TOBN(0x033da338, 0xc1b7f865)}}, + {{TOBN(0x283c7513, 0xcaa76097), TOBN(0x0a624fa9, 0x36c83906), + TOBN(0x6b20afec, 0x715af2c7), TOBN(0x4b969974, 0xeba78bfd)}, + {TOBN(0x220755cc, 0xd921d60e), TOBN(0x9b944e10, 0x7baeca13), + TOBN(0x04819d51, 0x5ded93d4), TOBN(0x9bbff86e, 0x6dddfd27)}}, + {{TOBN(0x6b344130, 0x77adc612), TOBN(0xa7496529, 0xbbd803a0), + TOBN(0x1a1baaa7, 0x6d8805bd), TOBN(0xc8403902, 0x470343ad)}, + {TOBN(0x39f59f66, 0x175adff1), TOBN(0x0b26d7fb, 0xb7d8c5b7), + TOBN(0xa875f5ce, 0x529d75e3), TOBN(0x85efc7e9, 0x41325cc2)}}, + {{TOBN(0x21950b42, 0x1ff6acd3), TOBN(0xffe70484, 0x53dc6909), + TOBN(0xff4cd0b2, 0x28766127), TOBN(0xabdbe608, 0x4fb7db2b)}, + {TOBN(0x837c9228, 0x5e1109e8), TOBN(0x26147d27, 0xf4645b5a), + TOBN(0x4d78f592, 0xf7818ed8), TOBN(0xd394077e, 0xf247fa36)}}, + {{TOBN(0x0fb9c2d0, 0x488c171a), TOBN(0xa78bfbaa, 0x13685278), + TOBN(0xedfbe268, 0xd5b1fa6a), TOBN(0x0dceb8db, 0x2b7eaba7)}, + {TOBN(0xbf9e8089, 0x9ae2b710), TOBN(0xefde7ae6, 0xa4449c96), + TOBN(0x43b7716b, 0xcc143a46), TOBN(0xd7d34194, 0xc3628c13)}}, + {{TOBN(0x508cec1c, 0x3b3f64c9), TOBN(0xe20bc0ba, 0x1e5edf3f), + TOBN(0xda1deb85, 0x2f4318d4), TOBN(0xd20ebe0d, 0x5c3fa443)}, + {TOBN(0x370b4ea7, 0x73241ea3), TOBN(0x61f1511c, 0x5e1a5f65), + TOBN(0x99a5e23d, 0x82681c62), TOBN(0xd731e383, 0xa2f54c2d)}}, + {{TOBN(0x2692f36e, 0x83445904), TOBN(0x2e0ec469, 0xaf45f9c0), + TOBN(0x905a3201, 0xc67528b7), TOBN(0x88f77f34, 0xd0e5e542)}, + {TOBN(0xf67a8d29, 0x5864687c), TOBN(0x23b92eae, 0x22df3562), + TOBN(0x5c27014b, 0x9bbec39e), TOBN(0x7ef2f226, 0x9c0f0f8d)}}, + {{TOBN(0x97359638, 0x546c4d8d), TOBN(0x5f9c3fc4, 0x92f24679), + TOBN(0x912e8bed, 0xa8c8acd9), TOBN(0xec3a318d, 0x306634b0)}, + {TOBN(0x80167f41, 0xc31cb264), TOBN(0x3db82f6f, 0x522113f2), + TOBN(0xb155bcd2, 0xdcafe197), TOBN(0xfba1da59, 0x43465283)}}, + {{TOBN(0xa0425b8e, 0xb212cf53), TOBN(0x4f2e512e, 0xf8557c5f), + TOBN(0xc1286ff9, 0x25c4d56c), TOBN(0xbb8a0fea, 0xee26c851)}, + {TOBN(0xc28f70d2, 0xe7d6107e), TOBN(0x7ee0c444, 0xe76265aa), + TOBN(0x3df277a4, 0x1d1936b1), TOBN(0x1a556e3f, 0xea9595eb)}}, + {{TOBN(0x258bbbf9, 0xe7305683), TOBN(0x31eea5bf, 0x07ef5be6), + TOBN(0x0deb0e4a, 0x46c814c1), TOBN(0x5cee8449, 0xa7b730dd)}, + {TOBN(0xeab495c5, 0xa0182bde), TOBN(0xee759f87, 0x9e27a6b4), + TOBN(0xc2cf6a68, 0x80e518ca), TOBN(0x25e8013f, 0xf14cf3f4)}}, + {{TOBN(0x8fc44140, 0x7e8d7a14), TOBN(0xbb1ff3ca, 0x9556f36a), + TOBN(0x6a844385, 0x14600044), TOBN(0xba3f0c4a, 0x7451ae63)}, + {TOBN(0xdfcac25b, 0x1f9af32a), TOBN(0x01e0db86, 0xb1f2214b), + TOBN(0x4e9a5bc2, 0xa4b596ac), TOBN(0x83927681, 0x026c2c08)}}, + {{TOBN(0x3ec832e7, 0x7acaca28), TOBN(0x1bfeea57, 0xc7385b29), + TOBN(0x068212e3, 0xfd1eaf38), TOBN(0xc1329830, 0x6acf8ccc)}, + {TOBN(0xb909f2db, 0x2aac9e59), TOBN(0x5748060d, 0xb661782a), + TOBN(0xc5ab2632, 0xc79b7a01), TOBN(0xda44c6c6, 0x00017626)}}, + {{TOBN(0xf26c00e8, 0xa7ea82f0), TOBN(0x99cac80d, 0xe4299aaf), + TOBN(0xd66fe3b6, 0x7ed78be1), TOBN(0x305f725f, 0x648d02cd)}, + {TOBN(0x33ed1bc4, 0x623fb21b), TOBN(0xfa70533e, 0x7a6319ad), + TOBN(0x17ab562d, 0xbe5ffb3e), TOBN(0x06374994, 0x56674741)}}, + {{TOBN(0x69d44ed6, 0x5c46aa8e), TOBN(0x2100d5d3, 0xa8d063d1), + TOBN(0xcb9727ea, 0xa2d17c36), TOBN(0x4c2bab1b, 0x8add53b7)}, + {TOBN(0xa084e90c, 0x15426704), TOBN(0x778afcd3, 0xa837ebea), + TOBN(0x6651f701, 0x7ce477f8), TOBN(0xa0624998, 0x46fb7a8b)}}, + {{TOBN(0xdc1e6828, 0xed8a6e19), TOBN(0x33fc2336, 0x4189d9c7), + TOBN(0x026f8fe2, 0x671c39bc), TOBN(0xd40c4ccd, 0xbc6f9915)}, + {TOBN(0xafa135bb, 0xf80e75ca), TOBN(0x12c651a0, 0x22adff2c), + TOBN(0xc40a04bd, 0x4f51ad96), TOBN(0x04820109, 0xbbe4e832)}}, + {{TOBN(0x3667eb1a, 0x7f4c04cc), TOBN(0x59556621, 0xa9404f84), + TOBN(0x71cdf653, 0x7eceb50a), TOBN(0x994a44a6, 0x9b8335fa)}, + {TOBN(0xd7faf819, 0xdbeb9b69), TOBN(0x473c5680, 0xeed4350d), + TOBN(0xb6658466, 0xda44bba2), TOBN(0x0d1bc780, 0x872bdbf3)}}, + {{TOBN(0xe535f175, 0xa1962f91), TOBN(0x6ed7e061, 0xed58f5a7), + TOBN(0x177aa4c0, 0x2089a233), TOBN(0x0dbcb03a, 0xe539b413)}, + {TOBN(0xe3dc424e, 0xbb32e38e), TOBN(0x6472e5ef, 0x6806701e), + TOBN(0xdd47ff98, 0x814be9ee), TOBN(0x6b60cfff, 0x35ace009)}}, + {{TOBN(0xb8d3d931, 0x9ff91fe5), TOBN(0x039c4800, 0xf0518eed), + TOBN(0x95c37632, 0x9182cb26), TOBN(0x0763a434, 0x82fc568d)}, + {TOBN(0x707c04d5, 0x383e76ba), TOBN(0xac98b930, 0x824e8197), + TOBN(0x92bf7c8f, 0x91230de0), TOBN(0x90876a01, 0x40959b70)}}, + {{TOBN(0xdb6d96f3, 0x05968b80), TOBN(0x380a0913, 0x089f73b9), + TOBN(0x7da70b83, 0xc2c61e01), TOBN(0x95fb8394, 0x569b38c7)}, + {TOBN(0x9a3c6512, 0x80edfe2f), TOBN(0x8f726bb9, 0x8faeaf82), + TOBN(0x8010a4a0, 0x78424bf8), TOBN(0x29672044, 0x0e844970)}}}, + {{{TOBN(0x63c5cb81, 0x7a2ad62a), TOBN(0x7ef2b6b9, 0xac62ff54), + TOBN(0x3749bba4, 0xb3ad9db5), TOBN(0xad311f2c, 0x46d5a617)}, + {TOBN(0xb77a8087, 0xc2ff3b6d), TOBN(0xb46feaf3, 0x367834ff), + TOBN(0xf8aa266d, 0x75d6b138), TOBN(0xfa38d320, 0xec008188)}}, + {{TOBN(0x486d8ffa, 0x696946fc), TOBN(0x50fbc6d8, 0xb9cba56d), + TOBN(0x7e3d423e, 0x90f35a15), TOBN(0x7c3da195, 0xc0dd962c)}, + {TOBN(0xe673fdb0, 0x3cfd5d8b), TOBN(0x0704b7c2, 0x889dfca5), + TOBN(0xf6ce581f, 0xf52305aa), TOBN(0x399d49eb, 0x914d5e53)}}, + {{TOBN(0x380a496d, 0x6ec293cd), TOBN(0x733dbda7, 0x8e7051f5), + TOBN(0x037e388d, 0xb849140a), TOBN(0xee4b32b0, 0x5946dbf6)}, + {TOBN(0xb1c4fda9, 0xcae368d1), TOBN(0x5001a7b0, 0xfdb0b2f3), + TOBN(0x6df59374, 0x2e3ac46e), TOBN(0x4af675f2, 0x39b3e656)}}, + {{TOBN(0x44e38110, 0x39949296), TOBN(0x5b63827b, 0x361db1b5), + TOBN(0x3e5323ed, 0x206eaff5), TOBN(0x942370d2, 0xc21f4290)}, + {TOBN(0xf2caaf2e, 0xe0d985a1), TOBN(0x192cc64b, 0x7239846d), + TOBN(0x7c0b8f47, 0xae6312f8), TOBN(0x7dc61f91, 0x96620108)}}, + {{TOBN(0xb830fb5b, 0xc2da7de9), TOBN(0xd0e643df, 0x0ff8d3be), + TOBN(0x31ee77ba, 0x188a9641), TOBN(0x4e8aa3aa, 0xbcf6d502)}, + {TOBN(0xf9fb6532, 0x9a49110f), TOBN(0xd18317f6, 0x2dd6b220), + TOBN(0x7e3ced41, 0x52c3ea5a), TOBN(0x0d296a14, 0x7d579c4a)}}, + {{TOBN(0x35d6a53e, 0xed4c3717), TOBN(0x9f8240cf, 0x3d0ed2a3), + TOBN(0x8c0d4d05, 0xe5543aa5), TOBN(0x45d5bbfb, 0xdd33b4b4)}, + {TOBN(0xfa04cc73, 0x137fd28e), TOBN(0x862ac6ef, 0xc73b3ffd), + TOBN(0x403ff9f5, 0x31f51ef2), TOBN(0x34d5e0fc, 0xbc73f5a2)}}, + {{TOBN(0xf2526820, 0x08913f4f), TOBN(0xea20ed61, 0xeac93d95), + TOBN(0x51ed38b4, 0x6ca6b26c), TOBN(0x8662dcbc, 0xea4327b0)}, + {TOBN(0x6daf295c, 0x725d2aaa), TOBN(0xbad2752f, 0x8e52dcda), + TOBN(0x2210e721, 0x0b17dacc), TOBN(0xa37f7912, 0xd51e8232)}}, + {{TOBN(0x4f7081e1, 0x44cc3add), TOBN(0xd5ffa1d6, 0x87be82cf), + TOBN(0x89890b6c, 0x0edd6472), TOBN(0xada26e1a, 0x3ed17863)}, + {TOBN(0x276f2715, 0x63483caa), TOBN(0xe6924cd9, 0x2f6077fd), + TOBN(0x05a7fe98, 0x0a466e3c), TOBN(0xf1c794b0, 0xb1902d1f)}}, + {{TOBN(0xe5213688, 0x82a8042c), TOBN(0xd931cfaf, 0xcd278298), + TOBN(0x069a0ae0, 0xf597a740), TOBN(0x0adbb3f3, 0xeb59107c)}, + {TOBN(0x983e951e, 0x5eaa8eb8), TOBN(0xe663a8b5, 0x11b48e78), + TOBN(0x1631cc0d, 0x8a03f2c5), TOBN(0x7577c11e, 0x11e271e2)}}, + {{TOBN(0x33b2385c, 0x08369a90), TOBN(0x2990c59b, 0x190eb4f8), + TOBN(0x819a6145, 0xc68eac80), TOBN(0x7a786d62, 0x2ec4a014)}, + {TOBN(0x33faadbe, 0x20ac3a8d), TOBN(0x31a21781, 0x5aba2d30), + TOBN(0x209d2742, 0xdba4f565), TOBN(0xdb2ce9e3, 0x55aa0fbb)}}, + {{TOBN(0x8cef334b, 0x168984df), TOBN(0xe81dce17, 0x33879638), + TOBN(0xf6e6949c, 0x263720f0), TOBN(0x5c56feaf, 0xf593cbec)}, + {TOBN(0x8bff5601, 0xfde58c84), TOBN(0x74e24117, 0x2eccb314), + TOBN(0xbcf01b61, 0x4c9a8a78), TOBN(0xa233e35e, 0x544c9868)}}, + {{TOBN(0xb3156bf3, 0x8bd7aff1), TOBN(0x1b5ee4cb, 0x1d81b146), + TOBN(0x7ba1ac41, 0xd628a915), TOBN(0x8f3a8f9c, 0xfd89699e)}, + {TOBN(0x7329b9c9, 0xa0748be7), TOBN(0x1d391c95, 0xa92e621f), + TOBN(0xe51e6b21, 0x4d10a837), TOBN(0xd255f53a, 0x4947b435)}}, + {{TOBN(0x07669e04, 0xf1788ee3), TOBN(0xc14f27af, 0xa86938a2), + TOBN(0x8b47a334, 0xe93a01c0), TOBN(0xff627438, 0xd9366808)}, + {TOBN(0x7a0985d8, 0xca2a5965), TOBN(0x3d9a5542, 0xd6e9b9b3), + TOBN(0xc23eb80b, 0x4cf972e8), TOBN(0x5c1c33bb, 0x4fdf72fd)}}, + {{TOBN(0x0c4a58d4, 0x74a86108), TOBN(0xf8048a8f, 0xee4c5d90), + TOBN(0xe3c7c924, 0xe86d4c80), TOBN(0x28c889de, 0x056a1e60)}, + {TOBN(0x57e2662e, 0xb214a040), TOBN(0xe8c48e98, 0x37e10347), + TOBN(0x87742862, 0x80ac748a), TOBN(0xf1c24022, 0x186b06f2)}}, + {{TOBN(0xac2dd4c3, 0x5f74040a), TOBN(0x409aeb71, 0xfceac957), + TOBN(0x4fbad782, 0x55c4ec23), TOBN(0xb359ed61, 0x8a7b76ec)}, + {TOBN(0x12744926, 0xed6f4a60), TOBN(0xe21e8d7f, 0x4b912de3), + TOBN(0xe2575a59, 0xfc705a59), TOBN(0x72f1d4de, 0xed2dbc0e)}}, + {{TOBN(0x3d2b24b9, 0xeb7926b8), TOBN(0xbff88cb3, 0xcdbe5509), + TOBN(0xd0f399af, 0xe4dd640b), TOBN(0x3c5fe130, 0x2f76ed45)}, + {TOBN(0x6f3562f4, 0x3764fb3d), TOBN(0x7b5af318, 0x3151b62d), + TOBN(0xd5bd0bc7, 0xd79ce5f3), TOBN(0xfdaf6b20, 0xec66890f)}}, + {{TOBN(0x735c67ec, 0x6063540c), TOBN(0x50b259c2, 0xe5f9cb8f), + TOBN(0xb8734f9a, 0x3f99c6ab), TOBN(0xf8cc13d5, 0xa3a7bc85)}, + {TOBN(0x80c1b305, 0xc5217659), TOBN(0xfe5364d4, 0x4ec12a54), + TOBN(0xbd87045e, 0x681345fe), TOBN(0x7f8efeb1, 0x582f897f)}}, + {{TOBN(0xe8cbf1e5, 0xd5923359), TOBN(0xdb0cea9d, 0x539b9fb0), + TOBN(0x0c5b34cf, 0x49859b98), TOBN(0x5e583c56, 0xa4403cc6)}, + {TOBN(0x11fc1a2d, 0xd48185b7), TOBN(0xc93fbc7e, 0x6e521787), + TOBN(0x47e7a058, 0x05105b8b), TOBN(0x7b4d4d58, 0xdb8260c8)}}, + {{TOBN(0xe33930b0, 0x46eb842a), TOBN(0x8e844a9a, 0x7bdae56d), + TOBN(0x34ef3a9e, 0x13f7fdfc), TOBN(0xb3768f82, 0x636ca176)}, + {TOBN(0x2821f4e0, 0x4e09e61c), TOBN(0x414dc3a1, 0xa0c7cddc), + TOBN(0xd5379437, 0x54945fcd), TOBN(0x151b6eef, 0xb3555ff1)}}, + {{TOBN(0xb31bd613, 0x6339c083), TOBN(0x39ff8155, 0xdfb64701), + TOBN(0x7c3388d2, 0xe29604ab), TOBN(0x1e19084b, 0xa6b10442)}, + {TOBN(0x17cf54c0, 0xeccd47ef), TOBN(0x89693385, 0x4a5dfb30), + TOBN(0x69d023fb, 0x47daf9f6), TOBN(0x9222840b, 0x7d91d959)}}, + {{TOBN(0x439108f5, 0x803bac62), TOBN(0x0b7dd91d, 0x379bd45f), + TOBN(0xd651e827, 0xca63c581), TOBN(0x5c5d75f6, 0x509c104f)}, + {TOBN(0x7d5fc738, 0x1f2dc308), TOBN(0x20faa7bf, 0xd98454be), + TOBN(0x95374bee, 0xa517b031), TOBN(0xf036b9b1, 0x642692ac)}}, + {{TOBN(0xc5106109, 0x39842194), TOBN(0xb7e2353e, 0x49d05295), + TOBN(0xfc8c1d5c, 0xefb42ee0), TOBN(0xe04884eb, 0x08ce811c)}, + {TOBN(0xf1f75d81, 0x7419f40e), TOBN(0x5b0ac162, 0xa995c241), + TOBN(0x120921bb, 0xc4c55646), TOBN(0x713520c2, 0x8d33cf97)}}, + {{TOBN(0xb4a65a5c, 0xe98c5100), TOBN(0x6cec871d, 0x2ddd0f5a), + TOBN(0x251f0b7f, 0x9ba2e78b), TOBN(0x224a8434, 0xce3a2a5f)}, + {TOBN(0x26827f61, 0x25f5c46f), TOBN(0x6a22bedc, 0x48545ec0), + TOBN(0x25ae5fa0, 0xb1bb5cdc), TOBN(0xd693682f, 0xfcb9b98f)}}, + {{TOBN(0x32027fe8, 0x91e5d7d3), TOBN(0xf14b7d17, 0x73a07678), + TOBN(0xf88497b3, 0xc0dfdd61), TOBN(0xf7c2eec0, 0x2a8c4f48)}, + {TOBN(0xaa5573f4, 0x3756e621), TOBN(0xc013a240, 0x1825b948), + TOBN(0x1c03b345, 0x63878572), TOBN(0xa0472bea, 0x653a4184)}}, + {{TOBN(0xf4222e27, 0x0ac69a80), TOBN(0x34096d25, 0xf51e54f6), + TOBN(0x00a648cb, 0x8fffa591), TOBN(0x4e87acdc, 0x69b6527f)}, + {TOBN(0x0575e037, 0xe285ccb4), TOBN(0x188089e4, 0x50ddcf52), + TOBN(0xaa96c9a8, 0x870ff719), TOBN(0x74a56cd8, 0x1fc7e369)}}, + {{TOBN(0x41d04ee2, 0x1726931a), TOBN(0x0bbbb2c8, 0x3660ecfd), + TOBN(0xa6ef6de5, 0x24818e18), TOBN(0xe421cc51, 0xe7d57887)}, + {TOBN(0xf127d208, 0xbea87be6), TOBN(0x16a475d3, 0xb1cdd682), + TOBN(0x9db1b684, 0x439b63f7), TOBN(0x5359b3db, 0xf0f113b6)}}, + {{TOBN(0xdfccf1de, 0x8bf06e31), TOBN(0x1fdf8f44, 0xdd383901), + TOBN(0x10775cad, 0x5017e7d2), TOBN(0xdfc3a597, 0x58d11eef)}, + {TOBN(0x6ec9c8a0, 0xb1ecff10), TOBN(0xee6ed6cc, 0x28400549), + TOBN(0xb5ad7bae, 0x1b4f8d73), TOBN(0x61b4f11d, 0xe00aaab9)}}, + {{TOBN(0x7b32d69b, 0xd4eff2d7), TOBN(0x88ae6771, 0x4288b60f), + TOBN(0x159461b4, 0x37a1e723), TOBN(0x1f3d4789, 0x570aae8c)}, + {TOBN(0x869118c0, 0x7f9871da), TOBN(0x35fbda78, 0xf635e278), + TOBN(0x738f3641, 0xe1541dac), TOBN(0x6794b13a, 0xc0dae45f)}}, + {{TOBN(0x065064ac, 0x09cc0917), TOBN(0x27c53729, 0xc68540fd), + TOBN(0x0d2d4c8e, 0xef227671), TOBN(0xd23a9f80, 0xa1785a04)}, + {TOBN(0x98c59528, 0x52650359), TOBN(0xfa09ad01, 0x74a1acad), + TOBN(0x082d5a29, 0x0b55bf5c), TOBN(0xa40f1c67, 0x419b8084)}}, + {{TOBN(0x3a5c752e, 0xdcc18770), TOBN(0x4baf1f2f, 0x8825c3a5), + TOBN(0xebd63f74, 0x21b153ed), TOBN(0xa2383e47, 0xb2f64723)}, + {TOBN(0xe7bf620a, 0x2646d19a), TOBN(0x56cb44ec, 0x03c83ffd), + TOBN(0xaf7267c9, 0x4f6be9f1), TOBN(0x8b2dfd7b, 0xc06bb5e9)}}, + {{TOBN(0xb87072f2, 0xa672c5c7), TOBN(0xeacb11c8, 0x0d53c5e2), + TOBN(0x22dac29d, 0xff435932), TOBN(0x37bdb99d, 0x4408693c)}, + {TOBN(0xf6e62fb6, 0x2899c20f), TOBN(0x3535d512, 0x447ece24), + TOBN(0xfbdc6b88, 0xff577ce3), TOBN(0x726693bd, 0x190575f2)}}, + {{TOBN(0x6772b0e5, 0xab4b35a2), TOBN(0x1d8b6001, 0xf5eeaacf), + TOBN(0x728f7ce4, 0x795b9580), TOBN(0x4a20ed2a, 0x41fb81da)}, + {TOBN(0x9f685cd4, 0x4fec01e6), TOBN(0x3ed7ddcc, 0xa7ff50ad), + TOBN(0x460fd264, 0x0c2d97fd), TOBN(0x3a241426, 0xeb82f4f9)}}, + {{TOBN(0x17d1df2c, 0x6a8ea820), TOBN(0xb2b50d3b, 0xf22cc254), + TOBN(0x03856cba, 0xb7291426), TOBN(0x87fd26ae, 0x04f5ee39)}, + {TOBN(0x9cb696cc, 0x02bee4ba), TOBN(0x53121804, 0x06820fd6), + TOBN(0xa5dfc269, 0x0212e985), TOBN(0x666f7ffa, 0x160f9a09)}}, + {{TOBN(0xc503cd33, 0xbccd9617), TOBN(0x365dede4, 0xba7730a3), + TOBN(0x798c6355, 0x5ddb0786), TOBN(0xa6c3200e, 0xfc9cd3bc)}, + {TOBN(0x060ffb2c, 0xe5e35efd), TOBN(0x99a4e25b, 0x5555a1c1), + TOBN(0x11d95375, 0xf70b3751), TOBN(0x0a57354a, 0x160e1bf6)}}, + {{TOBN(0xecb3ae4b, 0xf8e4b065), TOBN(0x07a834c4, 0x2e53022b), + TOBN(0x1cd300b3, 0x8692ed96), TOBN(0x16a6f792, 0x61ee14ec)}, + {TOBN(0x8f1063c6, 0x6a8649ed), TOBN(0xfbcdfcfe, 0x869f3e14), + TOBN(0x2cfb97c1, 0x00a7b3ec), TOBN(0xcea49b3c, 0x7130c2f1)}}, + {{TOBN(0x462d044f, 0xe9d96488), TOBN(0x4b53d52e, 0x8182a0c1), + TOBN(0x84b6ddd3, 0x0391e9e9), TOBN(0x80ab7b48, 0xb1741a09)}, + {TOBN(0xec0e15d4, 0x27d3317f), TOBN(0x8dfc1ddb, 0x1a64671e), + TOBN(0x93cc5d5f, 0xd49c5b92), TOBN(0xc995d53d, 0x3674a331)}}, + {{TOBN(0x302e41ec, 0x090090ae), TOBN(0x2278a0cc, 0xedb06830), + TOBN(0x1d025932, 0xfbc99690), TOBN(0x0c32fbd2, 0xb80d68da)}, + {TOBN(0xd79146da, 0xf341a6c1), TOBN(0xae0ba139, 0x1bef68a0), + TOBN(0xc6b8a563, 0x8d774b3a), TOBN(0x1cf307bd, 0x880ba4d7)}}, + {{TOBN(0xc033bdc7, 0x19803511), TOBN(0xa9f97b3b, 0x8888c3be), + TOBN(0x3d68aebc, 0x85c6d05e), TOBN(0xc3b88a9d, 0x193919eb)}, + {TOBN(0x2d300748, 0xc48b0ee3), TOBN(0x7506bc7c, 0x07a746c1), + TOBN(0xfc48437c, 0x6e6d57f3), TOBN(0x5bd71587, 0xcfeaa91a)}}, + {{TOBN(0xa4ed0408, 0xc1bc5225), TOBN(0xd0b946db, 0x2719226d), + TOBN(0x109ecd62, 0x758d2d43), TOBN(0x75c8485a, 0x2751759b)}, + {TOBN(0xb0b75f49, 0x9ce4177a), TOBN(0x4fa61a1e, 0x79c10c3d), + TOBN(0xc062d300, 0xa167fcd7), TOBN(0x4df3874c, 0x750f0fa8)}}, + {{TOBN(0x29ae2cf9, 0x83dfedc9), TOBN(0xf8437134, 0x8d87631a), + TOBN(0xaf571711, 0x7429c8d2), TOBN(0x18d15867, 0x146d9272)}, + {TOBN(0x83053ecf, 0x69769bb7), TOBN(0xc55eb856, 0xc479ab82), + TOBN(0x5ef7791c, 0x21b0f4b2), TOBN(0xaa5956ba, 0x3d491525)}}, + {{TOBN(0x407a96c2, 0x9fe20eba), TOBN(0xf27168bb, 0xe52a5ad3), + TOBN(0x43b60ab3, 0xbf1d9d89), TOBN(0xe45c51ef, 0x710e727a)}, + {TOBN(0xdfca5276, 0x099b4221), TOBN(0x8dc6407c, 0x2557a159), + TOBN(0x0ead8335, 0x91035895), TOBN(0x0a9db957, 0x9c55dc32)}}, + {{TOBN(0xe40736d3, 0xdf61bc76), TOBN(0x13a619c0, 0x3f778cdb), + TOBN(0x6dd921a4, 0xc56ea28f), TOBN(0x76a52433, 0x2fa647b4)}, + {TOBN(0x23591891, 0xac5bdc5d), TOBN(0xff4a1a72, 0xbac7dc01), + TOBN(0x9905e261, 0x62df8453), TOBN(0x3ac045df, 0xe63b265f)}}, + {{TOBN(0x8a3f341b, 0xad53dba7), TOBN(0x8ec269cc, 0x837b625a), + TOBN(0xd71a2782, 0x3ae31189), TOBN(0x8fb4f9a3, 0x55e96120)}, + {TOBN(0x804af823, 0xff9875cf), TOBN(0x23224f57, 0x5d442a9b), + TOBN(0x1c4d3b9e, 0xecc62679), TOBN(0x91da22fb, 0xa0e7ddb1)}}, + {{TOBN(0xa370324d, 0x6c04a661), TOBN(0x9710d3b6, 0x5e376d17), + TOBN(0xed8c98f0, 0x3044e357), TOBN(0xc364ebbe, 0x6422701c)}, + {TOBN(0x347f5d51, 0x7733d61c), TOBN(0xd55644b9, 0xcea826c3), + TOBN(0x80c6e0ad, 0x55a25548), TOBN(0x0aa7641d, 0x844220a7)}}, + {{TOBN(0x1438ec81, 0x31810660), TOBN(0x9dfa6507, 0xde4b4043), + TOBN(0x10b515d8, 0xcc3e0273), TOBN(0x1b6066dd, 0x28d8cfb2)}, + {TOBN(0xd3b04591, 0x9c9efebd), TOBN(0x425d4bdf, 0xa21c1ff4), + TOBN(0x5fe5af19, 0xd57607d3), TOBN(0xbbf773f7, 0x54481084)}}, + {{TOBN(0x8435bd69, 0x94b03ed1), TOBN(0xd9ad1de3, 0x634cc546), + TOBN(0x2cf423fc, 0x00e420ca), TOBN(0xeed26d80, 0xa03096dd)}, + {TOBN(0xd7f60be7, 0xa4db09d2), TOBN(0xf47f569d, 0x960622f7), + TOBN(0xe5925fd7, 0x7296c729), TOBN(0xeff2db26, 0x26ca2715)}}, + {{TOBN(0xa6fcd014, 0xb913e759), TOBN(0x53da4786, 0x8ff4de93), + TOBN(0x14616d79, 0xc32068e1), TOBN(0xb187d664, 0xccdf352e)}, + {TOBN(0xf7afb650, 0x1dc90b59), TOBN(0x8170e943, 0x7daa1b26), + TOBN(0xc8e3bdd8, 0x700c0a84), TOBN(0x6e8d345f, 0x6482bdfa)}}, + {{TOBN(0x84cfbfa1, 0xc5c5ea50), TOBN(0xd3baf14c, 0x67960681), + TOBN(0x26398403, 0x0dd50942), TOBN(0xe4b7839c, 0x4716a663)}, + {TOBN(0xd5f1f794, 0xe7de6dc0), TOBN(0x5cd0f4d4, 0x622aa7ce), + TOBN(0x5295f3f1, 0x59acfeec), TOBN(0x8d933552, 0x953e0607)}}, + {{TOBN(0xc7db8ec5, 0x776c5722), TOBN(0xdc467e62, 0x2b5f290c), + TOBN(0xd4297e70, 0x4ff425a9), TOBN(0x4be924c1, 0x0cf7bb72)}, + {TOBN(0x0d5dc5ae, 0xa1892131), TOBN(0x8bf8a8e3, 0xa705c992), + TOBN(0x73a0b064, 0x7a305ac5), TOBN(0x00c9ca4e, 0x9a8c77a8)}}, + {{TOBN(0x5dfee80f, 0x83774bdd), TOBN(0x63131602, 0x85734485), + TOBN(0xa1b524ae, 0x914a69a9), TOBN(0xebc2ffaf, 0xd4e300d7)}, + {TOBN(0x52c93db7, 0x7cfa46a5), TOBN(0x71e6161f, 0x21653b50), + TOBN(0x3574fc57, 0xa4bc580a), TOBN(0xc09015dd, 0xe1bc1253)}}, + {{TOBN(0x4b7b47b2, 0xd174d7aa), TOBN(0x4072d8e8, 0xf3a15d04), + TOBN(0xeeb7d47f, 0xd6fa07ed), TOBN(0x6f2b9ff9, 0xedbdafb1)}, + {TOBN(0x18c51615, 0x3760fe8a), TOBN(0x7a96e6bf, 0xf06c6c13), + TOBN(0x4d7a0410, 0x0ea2d071), TOBN(0xa1914e9b, 0x0be2a5ce)}}, + {{TOBN(0x5726e357, 0xd8a3c5cf), TOBN(0x1197ecc3, 0x2abb2b13), + TOBN(0x6c0d7f7f, 0x31ae88dd), TOBN(0x15b20d1a, 0xfdbb3efe)}, + {TOBN(0xcd06aa26, 0x70584039), TOBN(0x2277c969, 0xa7dc9747), + TOBN(0xbca69587, 0x7855d815), TOBN(0x899ea238, 0x5188b32a)}}, + {{TOBN(0x37d9228b, 0x760c1c9d), TOBN(0xc7efbb11, 0x9b5c18da), + TOBN(0x7f0d1bc8, 0x19f6dbc5), TOBN(0x4875384b, 0x07e6905b)}, + {TOBN(0xc7c50baa, 0x3ba8cd86), TOBN(0xb0ce40fb, 0xc2905de0), + TOBN(0x70840673, 0x7a231952), TOBN(0xa912a262, 0xcf43de26)}}, + {{TOBN(0x9c38ddcc, 0xeb5b76c1), TOBN(0x746f5285, 0x26fc0ab4), + TOBN(0x52a63a50, 0xd62c269f), TOBN(0x60049c55, 0x99458621)}, + {TOBN(0xe7f48f82, 0x3c2f7c9e), TOBN(0x6bd99043, 0x917d5cf3), + TOBN(0xeb1317a8, 0x8701f469), TOBN(0xbd3fe2ed, 0x9a449fe0)}}, + {{TOBN(0x421e79ca, 0x12ef3d36), TOBN(0x9ee3c36c, 0x3e7ea5de), + TOBN(0xe48198b5, 0xcdff36f7), TOBN(0xaff4f967, 0xc6b82228)}, + {TOBN(0x15e19dd0, 0xc47adb7e), TOBN(0x45699b23, 0x032e7dfa), + TOBN(0x40680c8b, 0x1fae026a), TOBN(0x5a347a48, 0x550dbf4d)}}, + {{TOBN(0xe652533b, 0x3cef0d7d), TOBN(0xd94f7b18, 0x2bbb4381), + TOBN(0x838752be, 0x0e80f500), TOBN(0x8e6e2488, 0x9e9c9bfb)}, + {TOBN(0xc9751697, 0x16caca6a), TOBN(0x866c49d8, 0x38531ad9), + TOBN(0xc917e239, 0x7151ade1), TOBN(0x2d016ec1, 0x6037c407)}}, + {{TOBN(0xa407ccc9, 0x00eac3f9), TOBN(0x835f6280, 0xe2ed4748), + TOBN(0xcc54c347, 0x1cc98e0d), TOBN(0x0e969937, 0xdcb572eb)}, + {TOBN(0x1b16c8e8, 0x8f30c9cb), TOBN(0xa606ae75, 0x373c4661), + TOBN(0x47aa689b, 0x35502cab), TOBN(0xf89014ae, 0x4d9bb64f)}}, + {{TOBN(0x202f6a9c, 0x31c71f7b), TOBN(0x01f95aa3, 0x296ffe5c), + TOBN(0x5fc06014, 0x53cec3a3), TOBN(0xeb991237, 0x5f498a45)}, + {TOBN(0xae9a935e, 0x5d91ba87), TOBN(0xc6ac6281, 0x0b564a19), + TOBN(0x8a8fe81c, 0x3bd44e69), TOBN(0x7c8b467f, 0x9dd11d45)}}, + {{TOBN(0xf772251f, 0xea5b8e69), TOBN(0xaeecb3bd, 0xc5b75fbc), + TOBN(0x1aca3331, 0x887ff0e5), TOBN(0xbe5d49ff, 0x19f0a131)}, + {TOBN(0x582c13aa, 0xe5c8646f), TOBN(0xdbaa12e8, 0x20e19980), + TOBN(0x8f40f31a, 0xf7abbd94), TOBN(0x1f13f5a8, 0x1dfc7663)}}, + {{TOBN(0x5d81f1ee, 0xaceb4fc0), TOBN(0x36256002, 0x5e6f0f42), + TOBN(0x4b67d6d7, 0x751370c8), TOBN(0x2608b698, 0x03e80589)}, + {TOBN(0xcfc0d2fc, 0x05268301), TOBN(0xa6943d39, 0x40309212), + TOBN(0x192a90c2, 0x1fd0e1c2), TOBN(0xb209f113, 0x37f1dc76)}}, + {{TOBN(0xefcc5e06, 0x97bf1298), TOBN(0xcbdb6730, 0x219d639e), + TOBN(0xd009c116, 0xb81e8c6f), TOBN(0xa3ffdde3, 0x1a7ce2e5)}, + {TOBN(0xc53fbaaa, 0xa914d3ba), TOBN(0x836d500f, 0x88df85ee), + TOBN(0xd98dc71b, 0x66ee0751), TOBN(0x5a3d7005, 0x714516fd)}}, + {{TOBN(0x21d3634d, 0x39eedbba), TOBN(0x35cd2e68, 0x0455a46d), + TOBN(0xc8cafe65, 0xf9d7eb0c), TOBN(0xbda3ce9e, 0x00cefb3e)}, + {TOBN(0xddc17a60, 0x2c9cf7a4), TOBN(0x01572ee4, 0x7bcb8773), + TOBN(0xa92b2b01, 0x8c7548df), TOBN(0x732fd309, 0xa84600e3)}}, + {{TOBN(0xe22109c7, 0x16543a40), TOBN(0x9acafd36, 0xfede3c6c), + TOBN(0xfb206852, 0x6824e614), TOBN(0x2a4544a9, 0xda25dca0)}, + {TOBN(0x25985262, 0x91d60b06), TOBN(0x281b7be9, 0x28753545), + TOBN(0xec667b1a, 0x90f13b27), TOBN(0x33a83aff, 0x940e2eb4)}}, + {{TOBN(0x80009862, 0xd5d721d5), TOBN(0x0c3357a3, 0x5bd3a182), + TOBN(0x27f3a83b, 0x7aa2cda4), TOBN(0xb58ae74e, 0xf6f83085)}, + {TOBN(0x2a911a81, 0x2e6dad6b), TOBN(0xde286051, 0xf43d6c5b), + TOBN(0x4bdccc41, 0xf996c4d8), TOBN(0xe7312ec0, 0x0ae1e24e)}}}, + {{{TOBN(0xf8d112e7, 0x6e6485b3), TOBN(0x4d3e24db, 0x771c52f8), + TOBN(0x48e3ee41, 0x684a2f6d), TOBN(0x7161957d, 0x21d95551)}, + {TOBN(0x19631283, 0xcdb12a6c), TOBN(0xbf3fa882, 0x2e50e164), + TOBN(0xf6254b63, 0x3166cc73), TOBN(0x3aefa7ae, 0xaee8cc38)}}, + {{TOBN(0x79b0fe62, 0x3b36f9fd), TOBN(0x26543b23, 0xfde19fc0), + TOBN(0x136e64a0, 0x958482ef), TOBN(0x23f63771, 0x9b095825)}, + {TOBN(0x14cfd596, 0xb6a1142e), TOBN(0x5ea6aac6, 0x335aac0b), + TOBN(0x86a0e8bd, 0xf3081dd5), TOBN(0x5fb89d79, 0x003dc12a)}}, + {{TOBN(0xf615c33a, 0xf72e34d4), TOBN(0x0bd9ea40, 0x110eec35), + TOBN(0x1c12bc5b, 0xc1dea34e), TOBN(0x686584c9, 0x49ae4699)}, + {TOBN(0x13ad95d3, 0x8c97b942), TOBN(0x4609561a, 0x4e5c7562), + TOBN(0x9e94a4ae, 0xf2737f89), TOBN(0xf57594c6, 0x371c78b6)}}, + {{TOBN(0x0f0165fc, 0xe3779ee3), TOBN(0xe00e7f9d, 0xbd495d9e), + TOBN(0x1fa4efa2, 0x20284e7a), TOBN(0x4564bade, 0x47ac6219)}, + {TOBN(0x90e6312a, 0xc4708e8e), TOBN(0x4f5725fb, 0xa71e9adf), + TOBN(0xe95f55ae, 0x3d684b9f), TOBN(0x47f7ccb1, 0x1e94b415)}}, + {{TOBN(0x7322851b, 0x8d946581), TOBN(0xf0d13133, 0xbdf4a012), + TOBN(0xa3510f69, 0x6584dae0), TOBN(0x03a7c171, 0x3c9f6c6d)}, + {TOBN(0x5be97f38, 0xe475381a), TOBN(0xca1ba422, 0x85823334), + TOBN(0xf83cc5c7, 0x0be17dda), TOBN(0x158b1494, 0x0b918c0f)}}, + {{TOBN(0xda3a77e5, 0x522e6b69), TOBN(0x69c908c3, 0xbbcd6c18), + TOBN(0x1f1b9e48, 0xd924fd56), TOBN(0x37c64e36, 0xaa4bb3f7)}, + {TOBN(0x5a4fdbdf, 0xee478d7d), TOBN(0xba75c8bc, 0x0193f7a0), + TOBN(0x84bc1e84, 0x56cd16df), TOBN(0x1fb08f08, 0x46fad151)}}, + {{TOBN(0x8a7cabf9, 0x842e9f30), TOBN(0xa331d4bf, 0x5eab83af), + TOBN(0xd272cfba, 0x017f2a6a), TOBN(0x27560abc, 0x83aba0e3)}, + {TOBN(0x94b83387, 0x0e3a6b75), TOBN(0x25c6aea2, 0x6b9f50f5), + TOBN(0x803d691d, 0xb5fdf6d0), TOBN(0x03b77509, 0xe6333514)}}, + {{TOBN(0x36178903, 0x61a341c1), TOBN(0x3604dc60, 0x0cfd6142), + TOBN(0x022295eb, 0x8533316c), TOBN(0x3dbde4ac, 0x44af2922)}, + {TOBN(0x898afc5d, 0x1c7eef69), TOBN(0x58896805, 0xd14f4fa1), + TOBN(0x05002160, 0x203c21ca), TOBN(0x6f0d1f30, 0x40ef730b)}}, + {{TOBN(0x8e8c44d4, 0x196224f8), TOBN(0x75a4ab95, 0x374d079d), + TOBN(0x79085ecc, 0x7d48f123), TOBN(0x56f04d31, 0x1bf65ad8)}, + {TOBN(0xe220bf1c, 0xbda602b2), TOBN(0x73ee1742, 0xf9612c69), + TOBN(0x76008fc8, 0x084fd06b), TOBN(0x4000ef9f, 0xf11380d1)}}, + {{TOBN(0x48201b4b, 0x12cfe297), TOBN(0x3eee129c, 0x292f74e5), + TOBN(0xe1fe114e, 0xc9e874e8), TOBN(0x899b055c, 0x92c5fc41)}, + {TOBN(0x4e477a64, 0x3a39c8cf), TOBN(0x82f09efe, 0x78963cc9), + TOBN(0x6fd3fd8f, 0xd333f863), TOBN(0x85132b2a, 0xdc949c63)}}, + {{TOBN(0x7e06a3ab, 0x516eb17b), TOBN(0x73bec06f, 0xd2c7372b), + TOBN(0xe4f74f55, 0xba896da6), TOBN(0xbb4afef8, 0x8e9eb40f)}, + {TOBN(0x2d75bec8, 0xe61d66b0), TOBN(0x02bda4b4, 0xef29300b), + TOBN(0x8bbaa8de, 0x026baa5a), TOBN(0xff54befd, 0xa07f4440)}}, + {{TOBN(0xbd9b8b1d, 0xbe7a2af3), TOBN(0xec51caa9, 0x4fb74a72), + TOBN(0xb9937a4b, 0x63879697), TOBN(0x7c9a9d20, 0xec2687d5)}, + {TOBN(0x1773e44f, 0x6ef5f014), TOBN(0x8abcf412, 0xe90c6900), + TOBN(0x387bd022, 0x8142161e), TOBN(0x50393755, 0xfcb6ff2a)}}, + {{TOBN(0x9813fd56, 0xed6def63), TOBN(0x53cf6482, 0x7d53106c), + TOBN(0x991a35bd, 0x431f7ac1), TOBN(0xf1e274dd, 0x63e65faf)}, + {TOBN(0xf63ffa3c, 0x44cc7880), TOBN(0x411a426b, 0x7c256981), + TOBN(0xb698b9fd, 0x93a420e0), TOBN(0x89fdddc0, 0xae53f8fe)}}, + {{TOBN(0x766e0722, 0x32398baa), TOBN(0x205fee42, 0x5cfca031), + TOBN(0xa49f5341, 0x7a029cf2), TOBN(0xa88c68b8, 0x4023890d)}, + {TOBN(0xbc275041, 0x7337aaa8), TOBN(0x9ed364ad, 0x0eb384f4), + TOBN(0xe0816f85, 0x29aba92f), TOBN(0x2e9e1941, 0x04e38a88)}}, + {{TOBN(0x57eef44a, 0x3dafd2d5), TOBN(0x35d1fae5, 0x97ed98d8), + TOBN(0x50628c09, 0x2307f9b1), TOBN(0x09d84aae, 0xd6cba5c6)}, + {TOBN(0x67071bc7, 0x88aaa691), TOBN(0x2dea57a9, 0xafe6cb03), + TOBN(0xdfe11bb4, 0x3d78ac01), TOBN(0x7286418c, 0x7fd7aa51)}}, + {{TOBN(0xfabf7709, 0x77f7195a), TOBN(0x8ec86167, 0xadeb838f), + TOBN(0xea1285a8, 0xbb4f012d), TOBN(0xd6883503, 0x9a3eab3f)}, + {TOBN(0xee5d24f8, 0x309004c2), TOBN(0xa96e4b76, 0x13ffe95e), + TOBN(0x0cdffe12, 0xbd223ea4), TOBN(0x8f5c2ee5, 0xb6739a53)}}, + {{TOBN(0x5cb4aaa5, 0xdd968198), TOBN(0xfa131c52, 0x72413a6c), + TOBN(0x53d46a90, 0x9536d903), TOBN(0xb270f0d3, 0x48606d8e)}, + {TOBN(0x518c7564, 0xa053a3bc), TOBN(0x088254b7, 0x1a86caef), + TOBN(0xb3ba8cb4, 0x0ab5efd0), TOBN(0x5c59900e, 0x4605945d)}}, + {{TOBN(0xecace1dd, 0xa1887395), TOBN(0x40960f36, 0x932a65de), + TOBN(0x9611ff5c, 0x3aa95529), TOBN(0xc58215b0, 0x7c1e5a36)}, + {TOBN(0xd48c9b58, 0xf0e1a524), TOBN(0xb406856b, 0xf590dfb8), + TOBN(0xc7605e04, 0x9cd95662), TOBN(0x0dd036ee, 0xa33ecf82)}}, + {{TOBN(0xa50171ac, 0xc33156b3), TOBN(0xf09d24ea, 0x4a80172e), + TOBN(0x4e1f72c6, 0x76dc8eef), TOBN(0xe60caadc, 0x5e3d44ee)}, + {TOBN(0x006ef8a6, 0x979b1d8f), TOBN(0x60908a1c, 0x97788d26), + TOBN(0x6e08f95b, 0x266feec0), TOBN(0x618427c2, 0x22e8c94e)}}, + {{TOBN(0x3d613339, 0x59145a65), TOBN(0xcd9bc368, 0xfa406337), + TOBN(0x82d11be3, 0x2d8a52a0), TOBN(0xf6877b27, 0x97a1c590)}, + {TOBN(0x837a819b, 0xf5cbdb25), TOBN(0x2a4fd1d8, 0xde090249), + TOBN(0x622a7de7, 0x74990e5f), TOBN(0x840fa5a0, 0x7945511b)}}, + {{TOBN(0x30b974be, 0x6558842d), TOBN(0x70df8c64, 0x17f3d0a6), + TOBN(0x7c803520, 0x7542e46d), TOBN(0x7251fe7f, 0xe4ecc823)}, + {TOBN(0xe59134cb, 0x5e9aac9a), TOBN(0x11bb0934, 0xf0045d71), + TOBN(0x53e5d9b5, 0xdbcb1d4e), TOBN(0x8d97a905, 0x92defc91)}}, + {{TOBN(0xfe289327, 0x7946d3f9), TOBN(0xe132bd24, 0x07472273), + TOBN(0xeeeb510c, 0x1eb6ae86), TOBN(0x777708c5, 0xf0595067)}, + {TOBN(0x18e2c8cd, 0x1297029e), TOBN(0x2c61095c, 0xbbf9305e), + TOBN(0xe466c258, 0x6b85d6d9), TOBN(0x8ac06c36, 0xda1ea530)}}, + {{TOBN(0xa365dc39, 0xa1304668), TOBN(0xe4a9c885, 0x07f89606), + TOBN(0x65a4898f, 0xacc7228d), TOBN(0x3e2347ff, 0x84ca8303)}, + {TOBN(0xa5f6fb77, 0xea7d23a3), TOBN(0x2fac257d, 0x672a71cd), + TOBN(0x6908bef8, 0x7e6a44d3), TOBN(0x8ff87566, 0x891d3d7a)}}, + {{TOBN(0xe58e90b3, 0x6b0cf82e), TOBN(0x6438d246, 0x2615b5e7), + TOBN(0x07b1f8fc, 0x669c145a), TOBN(0xb0d8b2da, 0x36f1e1cb)}, + {TOBN(0x54d5dadb, 0xd9184c4d), TOBN(0x3dbb18d5, 0xf93d9976), + TOBN(0x0a3e0f56, 0xd1147d47), TOBN(0x2afa8c8d, 0xa0a48609)}}, + {{TOBN(0x275353e8, 0xbc36742c), TOBN(0x898f427e, 0xeea0ed90), + TOBN(0x26f4947e, 0x3e477b00), TOBN(0x8ad8848a, 0x308741e3)}, + {TOBN(0x6c703c38, 0xd74a2a46), TOBN(0x5e3e05a9, 0x9ba17ba2), + TOBN(0xc1fa6f66, 0x4ab9a9e4), TOBN(0x474a2d9a, 0x3841d6ec)}}, + {{TOBN(0x871239ad, 0x653ae326), TOBN(0x14bcf72a, 0xa74cbb43), + TOBN(0x8737650e, 0x20d4c083), TOBN(0x3df86536, 0x110ed4af)}, + {TOBN(0xd2d86fe7, 0xb53ca555), TOBN(0x688cb00d, 0xabd5d538), + TOBN(0xcf81bda3, 0x1ad38468), TOBN(0x7ccfe3cc, 0xf01167b6)}}, + {{TOBN(0xcf4f47e0, 0x6c4c1fe6), TOBN(0x557e1f1a, 0x298bbb79), + TOBN(0xf93b974f, 0x30d45a14), TOBN(0x174a1d2d, 0x0baf97c4)}, + {TOBN(0x7a003b30, 0xc51fbf53), TOBN(0xd8940991, 0xee68b225), + TOBN(0x5b0aa7b7, 0x1c0f4173), TOBN(0x975797c9, 0xa20a7153)}}, + {{TOBN(0x26e08c07, 0xe3533d77), TOBN(0xd7222e6a, 0x2e341c99), + TOBN(0x9d60ec3d, 0x8d2dc4ed), TOBN(0xbdfe0d8f, 0x7c476cf8)}, + {TOBN(0x1fe59ab6, 0x1d056605), TOBN(0xa9ea9df6, 0x86a8551f), + TOBN(0x8489941e, 0x47fb8d8c), TOBN(0xfeb874eb, 0x4a7f1b10)}}, + {{TOBN(0xfe5fea86, 0x7ee0d98f), TOBN(0x201ad34b, 0xdbf61864), + TOBN(0x45d8fe47, 0x37c031d4), TOBN(0xd5f49fae, 0x795f0822)}, + {TOBN(0xdb0fb291, 0xc7f4a40c), TOBN(0x2e69d9c1, 0x730ddd92), + TOBN(0x754e1054, 0x49d76987), TOBN(0x8a24911d, 0x7662db87)}}, + {{TOBN(0x61fc1810, 0x60a71676), TOBN(0xe852d1a8, 0xf66a8ad1), + TOBN(0x172bbd65, 0x6417231e), TOBN(0x0d6de7bd, 0x3babb11f)}, + {TOBN(0x6fde6f88, 0xc8e347f8), TOBN(0x1c587547, 0x9bd99cc3), + TOBN(0x78e54ed0, 0x34076950), TOBN(0x97f0f334, 0x796e83ba)}}, + {{TOBN(0xe4dbe1ce, 0x4924867a), TOBN(0xbd5f51b0, 0x60b84917), + TOBN(0x37530040, 0x3cb09a79), TOBN(0xdb3fe0f8, 0xff1743d8)}, + {TOBN(0xed7894d8, 0x556fa9db), TOBN(0xfa262169, 0x23412fbf), + TOBN(0x563be0db, 0xba7b9291), TOBN(0x6ca8b8c0, 0x0c9fb234)}}, + {{TOBN(0xed406aa9, 0xbd763802), TOBN(0xc21486a0, 0x65303da1), + TOBN(0x61ae291e, 0xc7e62ec4), TOBN(0x622a0492, 0xdf99333e)}, + {TOBN(0x7fd80c9d, 0xbb7a8ee0), TOBN(0xdc2ed3bc, 0x6c01aedb), + TOBN(0x35c35a12, 0x08be74ec), TOBN(0xd540cb1a, 0x469f671f)}}, + {{TOBN(0xd16ced4e, 0xcf84f6c7), TOBN(0x8561fb9c, 0x2d090f43), + TOBN(0x7e693d79, 0x6f239db4), TOBN(0xa736f928, 0x77bd0d94)}, + {TOBN(0x07b4d929, 0x2c1950ee), TOBN(0xda177543, 0x56dc11b3), + TOBN(0xa5dfbbaa, 0x7a6a878e), TOBN(0x1c70cb29, 0x4decb08a)}}, + {{TOBN(0xfba28c8b, 0x6f0f7c50), TOBN(0xa8eba2b8, 0x854dcc6d), + TOBN(0x5ff8e89a, 0x36b78642), TOBN(0x070c1c8e, 0xf6873adf)}, + {TOBN(0xbbd3c371, 0x6484d2e4), TOBN(0xfb78318f, 0x0d414129), + TOBN(0x2621a39c, 0x6ad93b0b), TOBN(0x979d74c2, 0xa9e917f7)}}, + {{TOBN(0xfc195647, 0x61fb0428), TOBN(0x4d78954a, 0xbee624d4), + TOBN(0xb94896e0, 0xb8ae86fd), TOBN(0x6667ac0c, 0xc91c8b13)}, + {TOBN(0x9f180512, 0x43bcf832), TOBN(0xfbadf8b7, 0xa0010137), + TOBN(0xc69b4089, 0xb3ba8aa7), TOBN(0xfac4bacd, 0xe687ce85)}}, + {{TOBN(0x9164088d, 0x977eab40), TOBN(0x51f4c5b6, 0x2760b390), + TOBN(0xd238238f, 0x340dd553), TOBN(0x358566c3, 0xdb1d31c9)}, + {TOBN(0x3a5ad69e, 0x5068f5ff), TOBN(0xf31435fc, 0xdaff6b06), + TOBN(0xae549a5b, 0xd6debff0), TOBN(0x59e5f0b7, 0x75e01331)}}, + {{TOBN(0x5d492fb8, 0x98559acf), TOBN(0x96018c2e, 0x4db79b50), + TOBN(0x55f4a48f, 0x609f66aa), TOBN(0x1943b3af, 0x4900a14f)}, + {TOBN(0xc22496df, 0x15a40d39), TOBN(0xb2a44684, 0x4c20f7c5), + TOBN(0x76a35afa, 0x3b98404c), TOBN(0xbec75725, 0xff5d1b77)}}, + {{TOBN(0xb67aa163, 0xbea06444), TOBN(0x27e95bb2, 0xf724b6f2), + TOBN(0x3c20e3e9, 0xd238c8ab), TOBN(0x1213754e, 0xddd6ae17)}, + {TOBN(0x8c431020, 0x716e0f74), TOBN(0x6679c82e, 0xffc095c2), + TOBN(0x2eb3adf4, 0xd0ac2932), TOBN(0x2cc970d3, 0x01bb7a76)}}, + {{TOBN(0x70c71f2f, 0x740f0e66), TOBN(0x545c616b, 0x2b6b23cc), + TOBN(0x4528cfcb, 0xb40a8bd7), TOBN(0xff839633, 0x2ab27722)}, + {TOBN(0x049127d9, 0x025ac99a), TOBN(0xd314d4a0, 0x2b63e33b), + TOBN(0xc8c310e7, 0x28d84519), TOBN(0x0fcb8983, 0xb3bc84ba)}}, + {{TOBN(0x2cc52261, 0x38634818), TOBN(0x501814f4, 0xb44c2e0b), + TOBN(0xf7e181aa, 0x54dfdba3), TOBN(0xcfd58ff0, 0xe759718c)}, + {TOBN(0xf90cdb14, 0xd3b507a8), TOBN(0x57bd478e, 0xc50bdad8), + TOBN(0x29c197e2, 0x50e5f9aa), TOBN(0x4db6eef8, 0xe40bc855)}}, + {{TOBN(0x2cc8f21a, 0xd1fc0654), TOBN(0xc71cc963, 0x81269d73), + TOBN(0xecfbb204, 0x077f49f9), TOBN(0xdde92571, 0xca56b793)}, + {TOBN(0x9abed6a3, 0xf97ad8f7), TOBN(0xe6c19d3f, 0x924de3bd), + TOBN(0x8dce92f4, 0xa140a800), TOBN(0x85f44d1e, 0x1337af07)}}, + {{TOBN(0x5953c08b, 0x09d64c52), TOBN(0xa1b5e49f, 0xf5df9749), + TOBN(0x336a8fb8, 0x52735f7d), TOBN(0xb332b6db, 0x9add676b)}, + {TOBN(0x558b88a0, 0xb4511aa4), TOBN(0x09788752, 0xdbd5cc55), + TOBN(0x16b43b9c, 0xd8cd52bd), TOBN(0x7f0bc5a0, 0xc2a2696b)}}, + {{TOBN(0x146e12d4, 0xc11f61ef), TOBN(0x9ce10754, 0x3a83e79e), + TOBN(0x08ec73d9, 0x6cbfca15), TOBN(0x09ff29ad, 0x5b49653f)}, + {TOBN(0xe31b72bd, 0xe7da946e), TOBN(0xebf9eb3b, 0xee80a4f2), + TOBN(0xd1aabd08, 0x17598ce4), TOBN(0x18b5fef4, 0x53f37e80)}}, + {{TOBN(0xd5d5cdd3, 0x5958cd79), TOBN(0x3580a1b5, 0x1d373114), + TOBN(0xa36e4c91, 0xfa935726), TOBN(0xa38c534d, 0xef20d760)}, + {TOBN(0x7088e40a, 0x2ff5845b), TOBN(0xe5bb40bd, 0xbd78177f), + TOBN(0x4f06a7a8, 0x857f9920), TOBN(0xe3cc3e50, 0xe968f05d)}}, + {{TOBN(0x1d68b7fe, 0xe5682d26), TOBN(0x5206f76f, 0xaec7f87c), + TOBN(0x41110530, 0x041951ab), TOBN(0x58ec52c1, 0xd4b5a71a)}, + {TOBN(0xf3488f99, 0x0f75cf9a), TOBN(0xf411951f, 0xba82d0d5), + TOBN(0x27ee75be, 0x618895ab), TOBN(0xeae060d4, 0x6d8aab14)}}, + {{TOBN(0x9ae1df73, 0x7fb54dc2), TOBN(0x1f3e391b, 0x25963649), + TOBN(0x242ec32a, 0xfe055081), TOBN(0x5bd450ef, 0x8491c9bd)}, + {TOBN(0x367efc67, 0x981eb389), TOBN(0xed7e1928, 0x3a0550d5), + TOBN(0x362e776b, 0xab3ce75c), TOBN(0xe890e308, 0x1f24c523)}}, + {{TOBN(0xb961b682, 0xfeccef76), TOBN(0x8b8e11f5, 0x8bba6d92), + TOBN(0x8f2ccc4c, 0x2b2375c4), TOBN(0x0d7f7a52, 0xe2f86cfa)}, + {TOBN(0xfd94d30a, 0x9efe5633), TOBN(0x2d8d246b, 0x5451f934), + TOBN(0x2234c6e3, 0x244e6a00), TOBN(0xde2b5b0d, 0xddec8c50)}}, + {{TOBN(0x2ce53c5a, 0xbf776f5b), TOBN(0x6f724071, 0x60357b05), + TOBN(0xb2593717, 0x71bf3f7a), TOBN(0x87d2501c, 0x440c4a9f)}, + {TOBN(0x440552e1, 0x87b05340), TOBN(0xb7bf7cc8, 0x21624c32), + TOBN(0x4155a6ce, 0x22facddb), TOBN(0x5a4228cb, 0x889837ef)}}, + {{TOBN(0xef87d6d6, 0xfd4fd671), TOBN(0xa233687e, 0xc2daa10e), + TOBN(0x75622244, 0x03c0eb96), TOBN(0x7632d184, 0x8bf19be6)}, + {TOBN(0x05d0f8e9, 0x40735ff4), TOBN(0x3a3e6e13, 0xc00931f1), + TOBN(0x31ccde6a, 0xdafe3f18), TOBN(0xf381366a, 0xcfe51207)}}, + {{TOBN(0x24c222a9, 0x60167d92), TOBN(0x62f9d6f8, 0x7529f18c), + TOBN(0x412397c0, 0x0353b114), TOBN(0x334d89dc, 0xef808043)}, + {TOBN(0xd9ec63ba, 0x2a4383ce), TOBN(0xcec8e937, 0x5cf92ba0), + TOBN(0xfb8b4288, 0xc8be74c0), TOBN(0x67d6912f, 0x105d4391)}}, + {{TOBN(0x7b996c46, 0x1b913149), TOBN(0x36aae2ef, 0x3a4e02da), + TOBN(0xb68aa003, 0x972de594), TOBN(0x284ec70d, 0x4ec6d545)}, + {TOBN(0xf3d2b2d0, 0x61391d54), TOBN(0x69c5d5d6, 0xfe114e92), + TOBN(0xbe0f00b5, 0xb4482dff), TOBN(0xe1596fa5, 0xf5bf33c5)}}, + {{TOBN(0x10595b56, 0x96a71cba), TOBN(0x944938b2, 0xfdcadeb7), + TOBN(0xa282da4c, 0xfccd8471), TOBN(0x98ec05f3, 0x0d37bfe1)}, + {TOBN(0xe171ce1b, 0x0698304a), TOBN(0x2d691444, 0x21bdf79b), + TOBN(0xd0cd3b74, 0x1b21dec1), TOBN(0x712ecd8b, 0x16a15f71)}}, + {{TOBN(0x8d4c00a7, 0x00fd56e1), TOBN(0x02ec9692, 0xf9527c18), + TOBN(0x21c44937, 0x4a3e42e1), TOBN(0x9176fbab, 0x1392ae0a)}, + {TOBN(0x8726f1ba, 0x44b7b618), TOBN(0xb4d7aae9, 0xf1de491c), + TOBN(0xf91df7b9, 0x07b582c0), TOBN(0x7e116c30, 0xef60aa3a)}}, + {{TOBN(0x99270f81, 0x466265d7), TOBN(0xb15b6fe2, 0x4df7adf0), + TOBN(0xfe33b2d3, 0xf9738f7f), TOBN(0x48553ab9, 0xd6d70f95)}, + {TOBN(0x2cc72ac8, 0xc21e94db), TOBN(0x795ac38d, 0xbdc0bbee), + TOBN(0x0a1be449, 0x2e40478f), TOBN(0x81bd3394, 0x052bde55)}}, + {{TOBN(0x63c8dbe9, 0x56b3c4f2), TOBN(0x017a99cf, 0x904177cc), + TOBN(0x947bbddb, 0x4d010fc1), TOBN(0xacf9b00b, 0xbb2c9b21)}, + {TOBN(0x2970bc8d, 0x47173611), TOBN(0x1a4cbe08, 0xac7d756f), + TOBN(0x06d9f4aa, 0x67d541a2), TOBN(0xa3e8b689, 0x59c2cf44)}}, + {{TOBN(0xaad066da, 0x4d88f1dd), TOBN(0xc604f165, 0x7ad35dea), + TOBN(0x7edc0720, 0x4478ca67), TOBN(0xa10dfae0, 0xba02ce06)}, + {TOBN(0xeceb1c76, 0xaf36f4e4), TOBN(0x994b2292, 0xaf3f8f48), + TOBN(0xbf9ed77b, 0x77c8a68c), TOBN(0x74f544ea, 0x51744c9d)}}, + {{TOBN(0x82d05bb9, 0x8113a757), TOBN(0x4ef2d2b4, 0x8a9885e4), + TOBN(0x1e332be5, 0x1aa7865f), TOBN(0x22b76b18, 0x290d1a52)}, + {TOBN(0x308a2310, 0x44351683), TOBN(0x9d861896, 0xa3f22840), + TOBN(0x5959ddcd, 0x841ed947), TOBN(0x0def0c94, 0x154b73bf)}}, + {{TOBN(0xf0105417, 0x4c7c15e0), TOBN(0x539bfb02, 0x3a277c32), + TOBN(0xe699268e, 0xf9dccf5f), TOBN(0x9f5796a5, 0x0247a3bd)}, + {TOBN(0x8b839de8, 0x4f157269), TOBN(0xc825c1e5, 0x7a30196b), + TOBN(0x6ef0aabc, 0xdc8a5a91), TOBN(0xf4a8ce6c, 0x498b7fe6)}}, + {{TOBN(0x1cce35a7, 0x70cbac78), TOBN(0x83488e9b, 0xf6b23958), + TOBN(0x0341a070, 0xd76cb011), TOBN(0xda6c9d06, 0xae1b2658)}, + {TOBN(0xb701fb30, 0xdd648c52), TOBN(0x994ca02c, 0x52fb9fd1), + TOBN(0x06933117, 0x6f563086), TOBN(0x3d2b8100, 0x17856bab)}}, + {{TOBN(0xe89f48c8, 0x5963a46e), TOBN(0x658ab875, 0xa99e61c7), + TOBN(0x6e296f87, 0x4b8517b4), TOBN(0x36c4fcdc, 0xfc1bc656)}, + {TOBN(0xde5227a1, 0xa3906def), TOBN(0x9fe95f57, 0x62418945), + TOBN(0x20c91e81, 0xfdd96cde), TOBN(0x5adbe47e, 0xda4480de)}}, + {{TOBN(0xa009370f, 0x396de2b6), TOBN(0x98583d4b, 0xf0ecc7bd), + TOBN(0xf44f6b57, 0xe51d0672), TOBN(0x03d6b078, 0x556b1984)}, + {TOBN(0x27dbdd93, 0xb0b64912), TOBN(0x9b3a3434, 0x15687b09), + TOBN(0x0dba6461, 0x51ec20a9), TOBN(0xec93db7f, 0xff28187c)}}, + {{TOBN(0x00ff8c24, 0x66e48bdd), TOBN(0x2514f2f9, 0x11ccd78e), + TOBN(0xeba11f4f, 0xe1250603), TOBN(0x8a22cd41, 0x243fa156)}, + {TOBN(0xa4e58df4, 0xb283e4c6), TOBN(0x78c29859, 0x8b39783f), + TOBN(0x5235aee2, 0xa5259809), TOBN(0xc16284b5, 0x0e0227dd)}}, + {{TOBN(0xa5f57916, 0x1338830d), TOBN(0x6d4b8a6b, 0xd2123fca), + TOBN(0x236ea68a, 0xf9c546f8), TOBN(0xc1d36873, 0xfa608d36)}, + {TOBN(0xcd76e495, 0x8d436d13), TOBN(0xd4d9c221, 0x8fb080af), + TOBN(0x665c1728, 0xe8ad3fb5), TOBN(0xcf1ebe4d, 0xb3d572e0)}}, + {{TOBN(0xa7a8746a, 0x584c5e20), TOBN(0x267e4ea1, 0xb9dc7035), + TOBN(0x593a15cf, 0xb9548c9b), TOBN(0x5e6e2135, 0x4bd012f3)}, + {TOBN(0xdf31cc6a, 0x8c8f936e), TOBN(0x8af84d04, 0xb5c241dc), + TOBN(0x63990a6f, 0x345efb86), TOBN(0x6fef4e61, 0xb9b962cb)}}}, + {{{TOBN(0xf6368f09, 0x25722608), TOBN(0x131260db, 0x131cf5c6), + TOBN(0x40eb353b, 0xfab4f7ac), TOBN(0x85c78880, 0x37eee829)}, + {TOBN(0x4c1581ff, 0xc3bdf24e), TOBN(0x5bff75cb, 0xf5c3c5a8), + TOBN(0x35e8c83f, 0xa14e6f40), TOBN(0xb81d1c0f, 0x0295e0ca)}}, + {{TOBN(0xfcde7cc8, 0xf43a730f), TOBN(0xe89b6f3c, 0x33ab590e), + TOBN(0xc823f529, 0xad03240b), TOBN(0x82b79afe, 0x98bea5db)}, + {TOBN(0x568f2856, 0x962fe5de), TOBN(0x0c590adb, 0x60c591f3), + TOBN(0x1fc74a14, 0x4a28a858), TOBN(0x3b662498, 0xb3203f4c)}}, + {{TOBN(0x91e3cf0d, 0x6c39765a), TOBN(0xa2db3acd, 0xac3cca0b), + TOBN(0x288f2f08, 0xcb953b50), TOBN(0x2414582c, 0xcf43cf1a)}, + {TOBN(0x8dec8bbc, 0x60eee9a8), TOBN(0x54c79f02, 0x729aa042), + TOBN(0xd81cd5ec, 0x6532f5d5), TOBN(0xa672303a, 0xcf82e15f)}}, + {{TOBN(0x376aafa8, 0x719c0563), TOBN(0xcd8ad2dc, 0xbc5fc79f), + TOBN(0x303fdb9f, 0xcb750cd3), TOBN(0x14ff052f, 0x4418b08e)}, + {TOBN(0xf75084cf, 0x3e2d6520), TOBN(0x7ebdf0f8, 0x144ed509), + TOBN(0xf43bf0f2, 0xd3f25b98), TOBN(0x86ad71cf, 0xa354d837)}}, + {{TOBN(0xb827fe92, 0x26f43572), TOBN(0xdfd3ab5b, 0x5d824758), + TOBN(0x315dd23a, 0x539094c1), TOBN(0x85c0e37a, 0x66623d68)}, + {TOBN(0x575c7972, 0x7be19ae0), TOBN(0x616a3396, 0xdf0d36b5), + TOBN(0xa1ebb3c8, 0x26b1ff7e), TOBN(0x635b9485, 0x140ad453)}}, + {{TOBN(0x92bf3cda, 0xda430c0b), TOBN(0x4702850e, 0x3a96dac6), + TOBN(0xc91cf0a5, 0x15ac326a), TOBN(0x95de4f49, 0xab8c25e4)}, + {TOBN(0xb01bad09, 0xe265c17c), TOBN(0x24e45464, 0x087b3881), + TOBN(0xd43e583c, 0xe1fac5ca), TOBN(0xe17cb318, 0x6ead97a6)}}, + {{TOBN(0x6cc39243, 0x74dcec46), TOBN(0x33cfc02d, 0x54c2b73f), + TOBN(0x82917844, 0xf26cd99c), TOBN(0x8819dd95, 0xd1773f89)}, + {TOBN(0x09572aa6, 0x0871f427), TOBN(0x8e0cf365, 0xf6f01c34), + TOBN(0x7fa52988, 0xbff1f5af), TOBN(0x4eb357ea, 0xe75e8e50)}}, + {{TOBN(0xd9d0c8c4, 0x868af75d), TOBN(0xd7325cff, 0x45c8c7ea), + TOBN(0xab471996, 0xcc81ecb0), TOBN(0xff5d55f3, 0x611824ed)}, + {TOBN(0xbe314541, 0x1977a0ee), TOBN(0x5085c4c5, 0x722038c6), + TOBN(0x2d5335bf, 0xf94bb495), TOBN(0x894ad8a6, 0xc8e2a082)}}, + {{TOBN(0x5c3e2341, 0xada35438), TOBN(0xf4a9fc89, 0x049b8c4e), + TOBN(0xbeeb355a, 0x9f17cf34), TOBN(0x3f311e0e, 0x6c91fe10)}, + {TOBN(0xc2d20038, 0x92ab9891), TOBN(0x257bdcc1, 0x3e8ce9a9), + TOBN(0x1b2d9789, 0x88c53bee), TOBN(0x927ce89a, 0xcdba143a)}}, + {{TOBN(0xb0a32cca, 0x523db280), TOBN(0x5c889f8a, 0x50d43783), + TOBN(0x503e04b3, 0x4897d16f), TOBN(0x8cdb6e78, 0x08f5f2e8)}, + {TOBN(0x6ab91cf0, 0x179c8e74), TOBN(0xd8874e52, 0x48211d60), + TOBN(0xf948d4d5, 0xea851200), TOBN(0x4076d41e, 0xe6f9840a)}}, + {{TOBN(0xc20e263c, 0x47b517ea), TOBN(0x79a448fd, 0x30685e5e), + TOBN(0xe55f6f78, 0xf90631a0), TOBN(0x88a790b1, 0xa79e6346)}, + {TOBN(0x62160c7d, 0x80969fe8), TOBN(0x54f92fd4, 0x41491bb9), + TOBN(0xa6645c23, 0x5c957526), TOBN(0xf44cc5ae, 0xbea3ce7b)}}, + {{TOBN(0xf7628327, 0x8b1e68b7), TOBN(0xc731ad7a, 0x303f29d3), + TOBN(0xfe5a9ca9, 0x57d03ecb), TOBN(0x96c0d50c, 0x41bc97a7)}, + {TOBN(0xc4669fe7, 0x9b4f7f24), TOBN(0xfdd781d8, 0x3d9967ef), + TOBN(0x7892c7c3, 0x5d2c208d), TOBN(0x8bf64f7c, 0xae545cb3)}}, + {{TOBN(0xc01f862c, 0x467be912), TOBN(0xf4c85ee9, 0xc73d30cc), + TOBN(0x1fa6f4be, 0x6ab83ec7), TOBN(0xa07a3c1c, 0x4e3e3cf9)}, + {TOBN(0x87f8ef45, 0x0c00beb3), TOBN(0x30e2c2b3, 0x000d4c3e), + TOBN(0x1aa00b94, 0xfe08bf5b), TOBN(0x32c133aa, 0x9224ef52)}}, + {{TOBN(0x38df16bb, 0x32e5685d), TOBN(0x68a9e069, 0x58e6f544), + TOBN(0x495aaff7, 0xcdc5ebc6), TOBN(0xf894a645, 0x378b135f)}, + {TOBN(0xf316350a, 0x09e27ecf), TOBN(0xeced201e, 0x58f7179d), + TOBN(0x2eec273c, 0xe97861ba), TOBN(0x47ec2cae, 0xd693be2e)}}, + {{TOBN(0xfa4c97c4, 0xf68367ce), TOBN(0xe4f47d0b, 0xbe5a5755), + TOBN(0x17de815d, 0xb298a979), TOBN(0xd7eca659, 0xc177dc7d)}, + {TOBN(0x20fdbb71, 0x49ded0a3), TOBN(0x4cb2aad4, 0xfb34d3c5), + TOBN(0x2cf31d28, 0x60858a33), TOBN(0x3b6873ef, 0xa24aa40f)}}, + {{TOBN(0x540234b2, 0x2c11bb37), TOBN(0x2d0366dd, 0xed4c74a3), + TOBN(0xf9a968da, 0xeec5f25d), TOBN(0x36601068, 0x67b63142)}, + {TOBN(0x07cd6d2c, 0x68d7b6d4), TOBN(0xa8f74f09, 0x0c842942), + TOBN(0xe2751404, 0x7768b1ee), TOBN(0x4b5f7e89, 0xfe62aee4)}}, + {{TOBN(0xc6a77177, 0x89070d26), TOBN(0xa1f28e4e, 0xdd1c8bc7), + TOBN(0xea5f4f06, 0x469e1f17), TOBN(0x78fc242a, 0xfbdb78e0)}, + {TOBN(0xc9c7c592, 0x8b0588f1), TOBN(0xb6b7a0fd, 0x1535921e), + TOBN(0xcc5bdb91, 0xbde5ae35), TOBN(0xb42c485e, 0x12ff1864)}}, + {{TOBN(0xa1113e13, 0xdbab98aa), TOBN(0xde9d469b, 0xa17b1024), + TOBN(0x23f48b37, 0xc0462d3a), TOBN(0x3752e537, 0x7c5c078d)}, + {TOBN(0xe3a86add, 0x15544eb9), TOBN(0xf013aea7, 0x80fba279), + TOBN(0x8b5bb76c, 0xf22001b5), TOBN(0xe617ba14, 0xf02891ab)}}, + {{TOBN(0xd39182a6, 0x936219d3), TOBN(0x5ce1f194, 0xae51cb19), + TOBN(0xc78f8598, 0xbf07a74c), TOBN(0x6d7158f2, 0x22cbf1bc)}, + {TOBN(0x3b846b21, 0xe300ce18), TOBN(0x35fba630, 0x2d11275d), + TOBN(0x5fe25c36, 0xa0239b9b), TOBN(0xd8beb35d, 0xdf05d940)}}, + {{TOBN(0x4db02bb0, 0x1f7e320d), TOBN(0x0641c364, 0x6da320ea), + TOBN(0x6d95fa5d, 0x821389a3), TOBN(0x92699748, 0x8fcd8e3d)}, + {TOBN(0x316fef17, 0xceb6c143), TOBN(0x67fcb841, 0xd933762b), + TOBN(0xbb837e35, 0x118b17f8), TOBN(0x4b92552f, 0x9fd24821)}}, + {{TOBN(0xae6bc70e, 0x46aca793), TOBN(0x1cf0b0e4, 0xe579311b), + TOBN(0x8dc631be, 0x5802f716), TOBN(0x099bdc6f, 0xbddbee4d)}, + {TOBN(0xcc352bb2, 0x0caf8b05), TOBN(0xf74d505a, 0x72d63df2), + TOBN(0xb9876d4b, 0x91c4f408), TOBN(0x1ce18473, 0x9e229b2d)}}, + {{TOBN(0x49507597, 0x83abdb4a), TOBN(0x850fbcb6, 0xdee84b18), + TOBN(0x6325236e, 0x609e67dc), TOBN(0x04d831d9, 0x9336c6d8)}, + {TOBN(0x8deaae3b, 0xfa12d45d), TOBN(0xe425f8ce, 0x4746e246), + TOBN(0x8004c175, 0x24f5f31e), TOBN(0xaca16d8f, 0xad62c3b7)}}, + {{TOBN(0x0dc15a6a, 0x9152f934), TOBN(0xf1235e5d, 0xed0e12c1), + TOBN(0xc33c06ec, 0xda477dac), TOBN(0x76be8732, 0xb2ea0006)}, + {TOBN(0xcf3f7831, 0x0c0cd313), TOBN(0x3c524553, 0xa614260d), + TOBN(0x31a756f8, 0xcab22d15), TOBN(0x03ee10d1, 0x77827a20)}}, + {{TOBN(0xd1e059b2, 0x1994ef20), TOBN(0x2a653b69, 0x638ae318), + TOBN(0x70d5eb58, 0x2f699010), TOBN(0x279739f7, 0x09f5f84a)}, + {TOBN(0x5da4663c, 0x8b799336), TOBN(0xfdfdf14d, 0x203c37eb), + TOBN(0x32d8a9dc, 0xa1dbfb2d), TOBN(0xab40cff0, 0x77d48f9b)}}, + {{TOBN(0xc018b383, 0xd20b42d5), TOBN(0xf9a810ef, 0x9f78845f), + TOBN(0x40af3753, 0xbdba9df0), TOBN(0xb90bdcfc, 0x131dfdf9)}, + {TOBN(0x18720591, 0xf01ab782), TOBN(0xc823f211, 0x6af12a88), + TOBN(0xa51b80f3, 0x0dc14401), TOBN(0xde248f77, 0xfb2dfbe3)}}, + {{TOBN(0xef5a44e5, 0x0cafe751), TOBN(0x73997c9c, 0xd4dcd221), + TOBN(0x32fd86d1, 0xde854024), TOBN(0xd5b53adc, 0xa09b84bb)}, + {TOBN(0x008d7a11, 0xdcedd8d1), TOBN(0x406bd1c8, 0x74b32c84), + TOBN(0x5d4472ff, 0x05dde8b1), TOBN(0x2e25f2cd, 0xfce2b32f)}}, + {{TOBN(0xbec0dd5e, 0x29dfc254), TOBN(0x4455fcf6, 0x2b98b267), + TOBN(0x0b4d43a5, 0xc72df2ad), TOBN(0xea70e6be, 0x48a75397)}, + {TOBN(0x2aad6169, 0x5820f3bf), TOBN(0xf410d2dd, 0x9e37f68f), + TOBN(0x70fb7dba, 0x7be5ac83), TOBN(0x636bb645, 0x36ec3eec)}}, + {{TOBN(0x27104ea3, 0x9754e21c), TOBN(0xbc87a3e6, 0x8d63c373), + TOBN(0x483351d7, 0x4109db9a), TOBN(0x0fa724e3, 0x60134da7)}, + {TOBN(0x9ff44c29, 0xb0720b16), TOBN(0x2dd0cf13, 0x06aceead), + TOBN(0x5942758c, 0xe26929a6), TOBN(0x96c5db92, 0xb766a92b)}}, + {{TOBN(0xcec7d4c0, 0x5f18395e), TOBN(0xd3f22744, 0x1f80d032), + TOBN(0x7a68b37a, 0xcb86075b), TOBN(0x074764dd, 0xafef92db)}, + {TOBN(0xded1e950, 0x7bc7f389), TOBN(0xc580c850, 0xb9756460), + TOBN(0xaeeec2a4, 0x7da48157), TOBN(0x3f0b4e7f, 0x82c587b3)}}, + {{TOBN(0x231c6de8, 0xa9f19c53), TOBN(0x5717bd73, 0x6974e34e), + TOBN(0xd9e1d216, 0xf1508fa9), TOBN(0x9f112361, 0xdadaa124)}, + {TOBN(0x80145e31, 0x823b7348), TOBN(0x4dd8f0d5, 0xac634069), + TOBN(0xe3d82fc7, 0x2297c258), TOBN(0x276fcfee, 0x9cee7431)}}, + {{TOBN(0x8eb61b5e, 0x2bc0aea9), TOBN(0x4f668fd5, 0xde329431), + TOBN(0x03a32ab1, 0x38e4b87e), TOBN(0xe1374517, 0x73d0ef0b)}, + {TOBN(0x1a46f7e6, 0x853ac983), TOBN(0xc3bdf42e, 0x68e78a57), + TOBN(0xacf20785, 0x2ea96dd1), TOBN(0xa10649b9, 0xf1638460)}}, + {{TOBN(0xf2369f0b, 0x879fbbed), TOBN(0x0ff0ae86, 0xda9d1869), + TOBN(0x5251d759, 0x56766f45), TOBN(0x4984d8c0, 0x2be8d0fc)}, + {TOBN(0x7ecc95a6, 0xd21008f0), TOBN(0x29bd54a0, 0x3a1a1c49), + TOBN(0xab9828c5, 0xd26c50f3), TOBN(0x32c0087c, 0x51d0d251)}}, + {{TOBN(0x9bac3ce6, 0x0c1cdb26), TOBN(0xcd94d947, 0x557ca205), + TOBN(0x1b1bd598, 0x9db1fdcd), TOBN(0x0eda0108, 0xa3d8b149)}, + {TOBN(0x95066610, 0x56152fcc), TOBN(0xc2f037e6, 0xe7192b33), + TOBN(0xdeffb41a, 0xc92e05a4), TOBN(0x1105f6c2, 0xc2f6c62e)}}, + {{TOBN(0x68e73500, 0x8733913c), TOBN(0xcce86163, 0x3f3adc40), + TOBN(0xf407a942, 0x38a278e9), TOBN(0xd13c1b9d, 0x2ab21292)}, + {TOBN(0x93ed7ec7, 0x1c74cf5c), TOBN(0x8887dc48, 0xf1a4c1b4), + TOBN(0x3830ff30, 0x4b3a11f1), TOBN(0x358c5a3c, 0x58937cb6)}}, + {{TOBN(0x027dc404, 0x89022829), TOBN(0x40e93977, 0x3b798f79), + TOBN(0x90ad3337, 0x38be6ead), TOBN(0x9c23f6bc, 0xf34c0a5d)}, + {TOBN(0xd1711a35, 0xfbffd8bb), TOBN(0x60fcfb49, 0x1949d3dd), + TOBN(0x09c8ef4b, 0x7825d93a), TOBN(0x24233cff, 0xa0a8c968)}}, + {{TOBN(0x67ade46c, 0xe6d982af), TOBN(0xebb6bf3e, 0xe7544d7c), + TOBN(0xd6b9ba76, 0x3d8bd087), TOBN(0x46fe382d, 0x4dc61280)}, + {TOBN(0xbd39a7e8, 0xb5bdbd75), TOBN(0xab381331, 0xb8f228fe), + TOBN(0x0709a77c, 0xce1c4300), TOBN(0x6a247e56, 0xf337ceac)}}, + {{TOBN(0x8f34f21b, 0x636288be), TOBN(0x9dfdca74, 0xc8a7c305), + TOBN(0x6decfd1b, 0xea919e04), TOBN(0xcdf2688d, 0x8e1991f8)}, + {TOBN(0xe607df44, 0xd0f8a67e), TOBN(0xd985df4b, 0x0b58d010), + TOBN(0x57f834c5, 0x0c24f8f4), TOBN(0xe976ef56, 0xa0bf01ae)}}, + {{TOBN(0x536395ac, 0xa1c32373), TOBN(0x351027aa, 0x734c0a13), + TOBN(0xd2f1b5d6, 0x5e6bd5bc), TOBN(0x2b539e24, 0x223debed)}, + {TOBN(0xd4994cec, 0x0eaa1d71), TOBN(0x2a83381d, 0x661dcf65), + TOBN(0x5f1aed2f, 0x7b54c740), TOBN(0x0bea3fa5, 0xd6dda5ee)}}, + {{TOBN(0x9d4fb684, 0x36cc6134), TOBN(0x8eb9bbf3, 0xc0a443dd), + TOBN(0xfc500e2e, 0x383b7d2a), TOBN(0x7aad621c, 0x5b775257)}, + {TOBN(0x69284d74, 0x0a8f7cc0), TOBN(0xe820c2ce, 0x07562d65), + TOBN(0xbf9531b9, 0x499758ee), TOBN(0x73e95ca5, 0x6ee0cc2d)}}, + {{TOBN(0xf61790ab, 0xfbaf50a5), TOBN(0xdf55e76b, 0x684e0750), + TOBN(0xec516da7, 0xf176b005), TOBN(0x575553bb, 0x7a2dddc7)}, + {TOBN(0x37c87ca3, 0x553afa73), TOBN(0x315f3ffc, 0x4d55c251), + TOBN(0xe846442a, 0xaf3e5d35), TOBN(0x61b91149, 0x6495ff28)}}, + {{TOBN(0x23cc95d3, 0xfa326dc3), TOBN(0x1df4da1f, 0x18fc2cea), + TOBN(0x24bf9adc, 0xd0a37d59), TOBN(0xb6710053, 0x320d6e1e)}, + {TOBN(0x96f9667e, 0x618344d1), TOBN(0xcc7ce042, 0xa06445af), + TOBN(0xa02d8514, 0xd68dbc3a), TOBN(0x4ea109e4, 0x280b5a5b)}}, + {{TOBN(0x5741a7ac, 0xb40961bf), TOBN(0x4ada5937, 0x6aa56bfa), + TOBN(0x7feb9145, 0x02b765d1), TOBN(0x561e97be, 0xe6ad1582)}, + {TOBN(0xbbc4a5b6, 0xda3982f5), TOBN(0x0c2659ed, 0xb546f468), + TOBN(0xb8e7e6aa, 0x59612d20), TOBN(0xd83dfe20, 0xac19e8e0)}}, + {{TOBN(0x8530c45f, 0xb835398c), TOBN(0x6106a8bf, 0xb38a41c2), + TOBN(0x21e8f9a6, 0x35f5dcdb), TOBN(0x39707137, 0xcae498ed)}, + {TOBN(0x70c23834, 0xd8249f00), TOBN(0x9f14b58f, 0xab2537a0), + TOBN(0xd043c365, 0x5f61c0c2), TOBN(0xdc5926d6, 0x09a194a7)}}, + {{TOBN(0xddec0339, 0x8e77738a), TOBN(0xd07a63ef, 0xfba46426), + TOBN(0x2e58e79c, 0xee7f6e86), TOBN(0xe59b0459, 0xff32d241)}, + {TOBN(0xc5ec84e5, 0x20fa0338), TOBN(0x97939ac8, 0xeaff5ace), + TOBN(0x0310a4e3, 0xb4a38313), TOBN(0x9115fba2, 0x8f9d9885)}}, + {{TOBN(0x8dd710c2, 0x5fadf8c3), TOBN(0x66be38a2, 0xce19c0e2), + TOBN(0xd42a279c, 0x4cfe5022), TOBN(0x597bb530, 0x0e24e1b8)}, + {TOBN(0x3cde86b7, 0xc153ca7f), TOBN(0xa8d30fb3, 0x707d63bd), + TOBN(0xac905f92, 0xbd60d21e), TOBN(0x98e7ffb6, 0x7b9a54ab)}}, + {{TOBN(0xd7147df8, 0xe9726a30), TOBN(0xb5e216ff, 0xafce3533), + TOBN(0xb550b799, 0x2ff1ec40), TOBN(0x6b613b87, 0xa1e953fd)}, + {TOBN(0x87b88dba, 0x792d5610), TOBN(0x2ee1270a, 0xa190fbe1), + TOBN(0x02f4e2dc, 0x2ef581da), TOBN(0x016530e4, 0xeff82a95)}}, + {{TOBN(0xcbb93dfd, 0x8fd6ee89), TOBN(0x16d3d986, 0x46848fff), + TOBN(0x600eff24, 0x1da47adf), TOBN(0x1b9754a0, 0x0ad47a71)}, + {TOBN(0x8f9266df, 0x70c33b98), TOBN(0xaadc87ae, 0xdf34186e), + TOBN(0x0d2ce8e1, 0x4ad24132), TOBN(0x8a47cbfc, 0x19946eba)}}, + {{TOBN(0x47feeb66, 0x62b5f3af), TOBN(0xcefab561, 0x0abb3734), + TOBN(0x449de60e, 0x19f35cb1), TOBN(0x39f8db14, 0x157f0eb9)}, + {TOBN(0xffaecc5b, 0x3c61bfd6), TOBN(0xa5a4d41d, 0x41216703), + TOBN(0x7f8fabed, 0x224e1cc2), TOBN(0x0d5a8186, 0x871ad953)}}, + {{TOBN(0xf10774f7, 0xd22da9a9), TOBN(0x45b8a678, 0xcc8a9b0d), + TOBN(0xd9c2e722, 0xbdc32cff), TOBN(0xbf71b5f5, 0x337202a5)}, + {TOBN(0x95c57f2f, 0x69fc4db9), TOBN(0xb6dad34c, 0x765d01e1), + TOBN(0x7e0bd13f, 0xcb904635), TOBN(0x61751253, 0x763a588c)}}, + {{TOBN(0xd85c2997, 0x81af2c2d), TOBN(0xc0f7d9c4, 0x81b9d7da), + TOBN(0x838a34ae, 0x08533e8d), TOBN(0x15c4cb08, 0x311d8311)}, + {TOBN(0x97f83285, 0x8e121e14), TOBN(0xeea7dc1e, 0x85000a5f), + TOBN(0x0c6059b6, 0x5d256274), TOBN(0xec9beace, 0xb95075c0)}}, + {{TOBN(0x173daad7, 0x1df97828), TOBN(0xbf851cb5, 0xa8937877), + TOBN(0xb083c594, 0x01646f3c), TOBN(0x3bad30cf, 0x50c6d352)}, + {TOBN(0xfeb2b202, 0x496bbcea), TOBN(0x3cf9fd4f, 0x18a1e8ba), + TOBN(0xd26de7ff, 0x1c066029), TOBN(0x39c81e9e, 0x4e9ed4f8)}}, + {{TOBN(0xd8be0cb9, 0x7b390d35), TOBN(0x01df2bbd, 0x964aab27), + TOBN(0x3e8c1a65, 0xc3ef64f8), TOBN(0x567291d1, 0x716ed1dd)}, + {TOBN(0x95499c6c, 0x5f5406d3), TOBN(0x71fdda39, 0x5ba8e23f), + TOBN(0xcfeb320e, 0xd5096ece), TOBN(0xbe7ba92b, 0xca66dd16)}}, + {{TOBN(0x4608d36b, 0xc6fb5a7d), TOBN(0xe3eea15a, 0x6d2dd0e0), + TOBN(0x75b0a3eb, 0x8f97a36a), TOBN(0xf59814cc, 0x1c83de1e)}, + {TOBN(0x56c9c5b0, 0x1c33c23f), TOBN(0xa96c1da4, 0x6faa4136), + TOBN(0x46bf2074, 0xde316551), TOBN(0x3b866e7b, 0x1f756c8f)}}, + {{TOBN(0x727727d8, 0x1495ed6b), TOBN(0xb2394243, 0xb682dce7), + TOBN(0x8ab8454e, 0x758610f3), TOBN(0xc243ce84, 0x857d72a4)}, + {TOBN(0x7b320d71, 0xdbbf370f), TOBN(0xff9afa37, 0x78e0f7ca), + TOBN(0x0119d1e0, 0xea7b523f), TOBN(0xb997f8cb, 0x058c7d42)}}, + {{TOBN(0x285bcd2a, 0x37bbb184), TOBN(0x51dcec49, 0xa45d1fa6), + TOBN(0x6ade3b64, 0xe29634cb), TOBN(0x080c94a7, 0x26b86ef1)}, + {TOBN(0xba583db1, 0x2283fbe3), TOBN(0x902bddc8, 0x5a9315ed), + TOBN(0x07c1ccb3, 0x86964bec), TOBN(0x78f4eacf, 0xb6258301)}}, + {{TOBN(0x4bdf3a49, 0x56f90823), TOBN(0xba0f5080, 0x741d777b), + TOBN(0x091d71c3, 0xf38bf760), TOBN(0x9633d50f, 0x9b625b02)}, + {TOBN(0x03ecb743, 0xb8c9de61), TOBN(0xb4751254, 0x5de74720), + TOBN(0x9f9defc9, 0x74ce1cb2), TOBN(0x774a4f6a, 0x00bd32ef)}}, + {{TOBN(0xaca385f7, 0x73848f22), TOBN(0x53dad716, 0xf3f8558e), + TOBN(0xab7b34b0, 0x93c471f9), TOBN(0xf530e069, 0x19644bc7)}, + {TOBN(0x3d9fb1ff, 0xdd59d31a), TOBN(0x4382e0df, 0x08daa795), + TOBN(0x165c6f4b, 0xd5cc88d7), TOBN(0xeaa392d5, 0x4a18c900)}}, + {{TOBN(0x94203c67, 0x648024ee), TOBN(0x188763f2, 0x8c2fabcd), + TOBN(0xa80f87ac, 0xbbaec835), TOBN(0x632c96e0, 0xf29d8d54)}, + {TOBN(0x29b0a60e, 0x4c00a95e), TOBN(0x2ef17f40, 0xe011e9fa), + TOBN(0xf6c0e1d1, 0x15b77223), TOBN(0xaaec2c62, 0x14b04e32)}}, + {{TOBN(0xd35688d8, 0x3d84e58c), TOBN(0x2af5094c, 0x958571db), + TOBN(0x4fff7e19, 0x760682a6), TOBN(0x4cb27077, 0xe39a407c)}, + {TOBN(0x0f59c547, 0x4ff0e321), TOBN(0x169f34a6, 0x1b34c8ff), + TOBN(0x2bff1096, 0x52bc1ba7), TOBN(0xa25423b7, 0x83583544)}}, + {{TOBN(0x5d55d5d5, 0x0ac8b782), TOBN(0xff6622ec, 0x2db3c892), + TOBN(0x48fce741, 0x6b8bb642), TOBN(0x31d6998c, 0x69d7e3dc)}, + {TOBN(0xdbaf8004, 0xcadcaed0), TOBN(0x801b0142, 0xd81d053c), + TOBN(0x94b189fc, 0x59630ec6), TOBN(0x120e9934, 0xaf762c8e)}}, + {{TOBN(0x53a29aa4, 0xfdc6a404), TOBN(0x19d8e01e, 0xa1909948), + TOBN(0x3cfcabf1, 0xd7e89681), TOBN(0x3321a50d, 0x4e132d37)}, + {TOBN(0xd0496863, 0xe9a86111), TOBN(0x8c0cde61, 0x06a3bc65), + TOBN(0xaf866c49, 0xfc9f8eef), TOBN(0x2066350e, 0xff7f5141)}}, + {{TOBN(0x4f8a4689, 0xe56ddfbd), TOBN(0xea1b0c07, 0xfe32983a), + TOBN(0x2b317462, 0x873cb8cb), TOBN(0x658deddc, 0x2d93229f)}, + {TOBN(0x65efaf4d, 0x0f64ef58), TOBN(0xfe43287d, 0x730cc7a8), + TOBN(0xaebc0c72, 0x3d047d70), TOBN(0x92efa539, 0xd92d26c9)}}, + {{TOBN(0x06e78457, 0x94b56526), TOBN(0x415cb80f, 0x0961002d), + TOBN(0x89e5c565, 0x76dcb10f), TOBN(0x8bbb6982, 0xff9259fe)}, + {TOBN(0x4fe8795b, 0x9abc2668), TOBN(0xb5d4f534, 0x1e678fb1), + TOBN(0x6601f3be, 0x7b7da2b9), TOBN(0x98da59e2, 0xa13d6805)}}, + {{TOBN(0x190d8ea6, 0x01799a52), TOBN(0xa20cec41, 0xb86d2952), + TOBN(0x3062ffb2, 0x7fff2a7c), TOBN(0x741b32e5, 0x79f19d37)}, + {TOBN(0xf80d8181, 0x4eb57d47), TOBN(0x7a2d0ed4, 0x16aef06b), + TOBN(0x09735fb0, 0x1cecb588), TOBN(0x1641caaa, 0xc6061f5b)}}}, + {{{TOBN(0x7f99824f, 0x20151427), TOBN(0x206828b6, 0x92430206), + TOBN(0xaa9097d7, 0xe1112357), TOBN(0xacf9a2f2, 0x09e414ec)}, + {TOBN(0xdbdac9da, 0x27915356), TOBN(0x7e0734b7, 0x001efee3), + TOBN(0x54fab5bb, 0xd2b288e2), TOBN(0x4c630fc4, 0xf62dd09c)}}, + {{TOBN(0x8537107a, 0x1ac2703b), TOBN(0xb49258d8, 0x6bc857b5), + TOBN(0x57df14de, 0xbcdaccd1), TOBN(0x24ab68d7, 0xc4ae8529)}, + {TOBN(0x7ed8b5d4, 0x734e59d0), TOBN(0x5f8740c8, 0xc495cc80), + TOBN(0x84aedd5a, 0x291db9b3), TOBN(0x80b360f8, 0x4fb995be)}}, + {{TOBN(0xae915f5d, 0x5fa067d1), TOBN(0x4134b57f, 0x9668960c), + TOBN(0xbd3656d6, 0xa48edaac), TOBN(0xdac1e3e4, 0xfc1d7436)}, + {TOBN(0x674ff869, 0xd81fbb26), TOBN(0x449ed3ec, 0xb26c33d4), + TOBN(0x85138705, 0xd94203e8), TOBN(0xccde538b, 0xbeeb6f4a)}}, + {{TOBN(0x55d5c68d, 0xa61a76fa), TOBN(0x598b441d, 0xca1554dc), + TOBN(0xd39923b9, 0x773b279c), TOBN(0x33331d3c, 0x36bf9efc)}, + {TOBN(0x2d4c848e, 0x298de399), TOBN(0xcfdb8e77, 0xa1a27f56), + TOBN(0x94c855ea, 0x57b8ab70), TOBN(0xdcdb9dae, 0x6f7879ba)}}, + {{TOBN(0x7bdff8c2, 0x019f2a59), TOBN(0xb3ce5bb3, 0xcb4fbc74), + TOBN(0xea907f68, 0x8a9173dd), TOBN(0x6cd3d0d3, 0x95a75439)}, + {TOBN(0x92ecc4d6, 0xefed021c), TOBN(0x09a9f9b0, 0x6a77339a), + TOBN(0x87ca6b15, 0x7188c64a), TOBN(0x10c29968, 0x44899158)}}, + {{TOBN(0x5859a229, 0xed6e82ef), TOBN(0x16f338e3, 0x65ebaf4e), + TOBN(0x0cd31387, 0x5ead67ae), TOBN(0x1c73d228, 0x54ef0bb4)}, + {TOBN(0x4cb55131, 0x74a5c8c7), TOBN(0x01cd2970, 0x7f69ad6a), + TOBN(0xa04d00dd, 0xe966f87e), TOBN(0xd96fe447, 0x0b7b0321)}}, + {{TOBN(0x342ac06e, 0x88fbd381), TOBN(0x02cd4a84, 0x5c35a493), + TOBN(0xe8fa89de, 0x54f1bbcd), TOBN(0x341d6367, 0x2575ed4c)}, + {TOBN(0xebe357fb, 0xd238202b), TOBN(0x600b4d1a, 0xa984ead9), + TOBN(0xc35c9f44, 0x52436ea0), TOBN(0x96fe0a39, 0xa370751b)}}, + {{TOBN(0x4c4f0736, 0x7f636a38), TOBN(0x9f943fb7, 0x0e76d5cb), + TOBN(0xb03510ba, 0xa8b68b8b), TOBN(0xc246780a, 0x9ed07a1f)}, + {TOBN(0x3c051415, 0x6d549fc2), TOBN(0xc2953f31, 0x607781ca), + TOBN(0x955e2c69, 0xd8d95413), TOBN(0xb300fadc, 0x7bd282e3)}}, + {{TOBN(0x81fe7b50, 0x87e9189f), TOBN(0xdb17375c, 0xf42dda27), + TOBN(0x22f7d896, 0xcf0a5904), TOBN(0xa0e57c5a, 0xebe348e6)}, + {TOBN(0xa61011d3, 0xf40e3c80), TOBN(0xb1189321, 0x8db705c5), + TOBN(0x4ed9309e, 0x50fedec3), TOBN(0xdcf14a10, 0x4d6d5c1d)}}, + {{TOBN(0x056c265b, 0x55691342), TOBN(0xe8e08504, 0x91049dc7), + TOBN(0x131329f5, 0xc9bae20a), TOBN(0x96c8b3e8, 0xd9dccdb4)}, + {TOBN(0x8c5ff838, 0xfb4ee6b4), TOBN(0xfc5a9aeb, 0x41e8ccf0), + TOBN(0x7417b764, 0xfae050c6), TOBN(0x0953c3d7, 0x00452080)}}, + {{TOBN(0x21372682, 0x38dfe7e8), TOBN(0xea417e15, 0x2bb79d4b), + TOBN(0x59641f1c, 0x76e7cf2d), TOBN(0x271e3059, 0xea0bcfcc)}, + {TOBN(0x624c7dfd, 0x7253ecbd), TOBN(0x2f552e25, 0x4fca6186), + TOBN(0xcbf84ecd, 0x4d866e9c), TOBN(0x73967709, 0xf68d4610)}}, + {{TOBN(0xa14b1163, 0xc27901b4), TOBN(0xfd9236e0, 0x899b8bf3), + TOBN(0x42b091ec, 0xcbc6da0a), TOBN(0xbb1dac6f, 0x5ad1d297)}, + {TOBN(0x80e61d53, 0xa91cf76e), TOBN(0x4110a412, 0xd31f1ee7), + TOBN(0x2d87c3ba, 0x13efcf77), TOBN(0x1f374bb4, 0xdf450d76)}}, + {{TOBN(0x5e78e2f2, 0x0d188dab), TOBN(0xe3968ed0, 0xf4b885ef), + TOBN(0x46c0568e, 0x7314570f), TOBN(0x31616338, 0x01170521)}, + {TOBN(0x18e1e7e2, 0x4f0c8afe), TOBN(0x4caa75ff, 0xdeea78da), + TOBN(0x82db67f2, 0x7c5d8a51), TOBN(0x36a44d86, 0x6f505370)}}, + {{TOBN(0xd72c5bda, 0x0333974f), TOBN(0x5db516ae, 0x27a70146), + TOBN(0x34705281, 0x210ef921), TOBN(0xbff17a8f, 0x0c9c38e5)}, + {TOBN(0x78f4814e, 0x12476da1), TOBN(0xc1e16613, 0x33c16980), + TOBN(0x9e5b386f, 0x424d4bca), TOBN(0x4c274e87, 0xc85740de)}}, + {{TOBN(0xb6a9b88d, 0x6c2f5226), TOBN(0x14d1b944, 0x550d7ca8), + TOBN(0x580c85fc, 0x1fc41709), TOBN(0xc1da368b, 0x54c6d519)}, + {TOBN(0x2b0785ce, 0xd5113cf7), TOBN(0x0670f633, 0x5a34708f), + TOBN(0x46e23767, 0x15cc3f88), TOBN(0x1b480cfa, 0x50c72c8f)}}, + {{TOBN(0x20288602, 0x4147519a), TOBN(0xd0981eac, 0x26b372f0), + TOBN(0xa9d4a7ca, 0xa785ebc8), TOBN(0xd953c50d, 0xdbdf58e9)}, + {TOBN(0x9d6361cc, 0xfd590f8f), TOBN(0x72e9626b, 0x44e6c917), + TOBN(0x7fd96110, 0x22eb64cf), TOBN(0x863ebb7e, 0x9eb288f3)}}, + {{TOBN(0x6e6ab761, 0x6aca8ee7), TOBN(0x97d10b39, 0xd7b40358), + TOBN(0x1687d377, 0x1e5feb0d), TOBN(0xc83e50e4, 0x8265a27a)}, + {TOBN(0x8f75a9fe, 0xc954b313), TOBN(0xcc2e8f47, 0x310d1f61), + TOBN(0xf5ba81c5, 0x6557d0e0), TOBN(0x25f9680c, 0x3eaf6207)}}, + {{TOBN(0xf95c6609, 0x4354080b), TOBN(0x5225bfa5, 0x7bf2fe1c), + TOBN(0xc5c004e2, 0x5c7d98fa), TOBN(0x3561bf1c, 0x019aaf60)}, + {TOBN(0x5e6f9f17, 0xba151474), TOBN(0xdec2f934, 0xb04f6eca), + TOBN(0x64e368a1, 0x269acb1e), TOBN(0x1332d9e4, 0x0cdda493)}}, + {{TOBN(0x60d6cf69, 0xdf23de05), TOBN(0x66d17da2, 0x009339a0), + TOBN(0x9fcac985, 0x0a693923), TOBN(0xbcf057fc, 0xed7c6a6d)}, + {TOBN(0xc3c5c8c5, 0xf0b5662c), TOBN(0x25318dd8, 0xdcba4f24), + TOBN(0x60e8cb75, 0x082b69ff), TOBN(0x7c23b3ee, 0x1e728c01)}}, + {{TOBN(0x15e10a0a, 0x097e4403), TOBN(0xcb3d0a86, 0x19854665), + TOBN(0x88d8e211, 0xd67d4826), TOBN(0xb39af66e, 0x0b9d2839)}, + {TOBN(0xa5f94588, 0xbd475ca8), TOBN(0xe06b7966, 0xc077b80b), + TOBN(0xfedb1485, 0xda27c26c), TOBN(0xd290d33a, 0xfe0fd5e0)}}, + {{TOBN(0xa40bcc47, 0xf34fb0fa), TOBN(0xb4760cc8, 0x1fb1ab09), + TOBN(0x8fca0993, 0xa273bfe3), TOBN(0x13e4fe07, 0xf70b213c)}, + {TOBN(0x3bcdb992, 0xfdb05163), TOBN(0x8c484b11, 0x0c2b19b6), + TOBN(0x1acb815f, 0xaaf2e3e2), TOBN(0xc6905935, 0xb89ff1b4)}}, + {{TOBN(0xb2ad6f9d, 0x586e74e1), TOBN(0x488883ad, 0x67b80484), + TOBN(0x758aa2c7, 0x369c3ddb), TOBN(0x8ab74e69, 0x9f9afd31)}, + {TOBN(0x10fc2d28, 0x5e21beb1), TOBN(0x3484518a, 0x318c42f9), + TOBN(0x377427dc, 0x53cf40c3), TOBN(0x9de0781a, 0x391bc1d9)}}, + {{TOBN(0x8faee858, 0x693807e1), TOBN(0xa3865327, 0x4e81ccc7), + TOBN(0x02c30ff2, 0x6f835b84), TOBN(0xb604437b, 0x0d3d38d4)}, + {TOBN(0xb3fc8a98, 0x5ca1823d), TOBN(0xb82f7ec9, 0x03be0324), + TOBN(0xee36d761, 0xcf684a33), TOBN(0x5a01df0e, 0x9f29bf7d)}}, + {{TOBN(0x686202f3, 0x1306583d), TOBN(0x05b10da0, 0x437c622e), + TOBN(0xbf9aaa0f, 0x076a7bc8), TOBN(0x25e94efb, 0x8f8f4e43)}, + {TOBN(0x8a35c9b7, 0xfa3dc26d), TOBN(0xe0e5fb93, 0x96ff03c5), + TOBN(0xa77e3843, 0xebc394ce), TOBN(0xcede6595, 0x8361de60)}}, + {{TOBN(0xd27c22f6, 0xa1993545), TOBN(0xab01cc36, 0x24d671ba), + TOBN(0x63fa2877, 0xa169c28e), TOBN(0x925ef904, 0x2eb08376)}, + {TOBN(0x3b2fa3cf, 0x53aa0b32), TOBN(0xb27beb5b, 0x71c49d7a), + TOBN(0xb60e1834, 0xd105e27f), TOBN(0xd6089788, 0x4f68570d)}}, + {{TOBN(0x23094ce0, 0xd6fbc2ac), TOBN(0x738037a1, 0x815ff551), + TOBN(0xda73b1bb, 0x6bef119c), TOBN(0xdcf6c430, 0xeef506ba)}, + {TOBN(0x00e4fe7b, 0xe3ef104a), TOBN(0xebdd9a2c, 0x0a065628), + TOBN(0x853a81c3, 0x8792043e), TOBN(0x22ad6ece, 0xb3b59108)}}, + {{TOBN(0x9fb813c0, 0x39cd297d), TOBN(0x8ec7e16e, 0x05bda5d9), + TOBN(0x2834797c, 0x0d104b96), TOBN(0xcc11a2e7, 0x7c511510)}, + {TOBN(0x96ca5a53, 0x96ee6380), TOBN(0x054c8655, 0xcea38742), + TOBN(0xb5946852, 0xd54dfa7d), TOBN(0x97c422e7, 0x1f4ab207)}}, + {{TOBN(0xbf907509, 0x0c22b540), TOBN(0x2cde42aa, 0xb7c267d4), + TOBN(0xba18f9ed, 0x5ab0d693), TOBN(0x3ba62aa6, 0x6e4660d9)}, + {TOBN(0xb24bf97b, 0xab9ea96a), TOBN(0x5d039642, 0xe3b60e32), + TOBN(0x4e6a4506, 0x7c4d9bd5), TOBN(0x666c5b9e, 0x7ed4a6a4)}}, + {{TOBN(0xfa3fdcd9, 0x8edbd7cc), TOBN(0x4660bb87, 0xc6ccd753), + TOBN(0x9ae90820, 0x21e6b64f), TOBN(0x8a56a713, 0xb36bfb3f)}, + {TOBN(0xabfce096, 0x5726d47f), TOBN(0x9eed01b2, 0x0b1a9a7f), + TOBN(0x30e9cad4, 0x4eb74a37), TOBN(0x7b2524cc, 0x53e9666d)}}, + {{TOBN(0x6a29683b, 0x8f4b002f), TOBN(0xc2200d7a, 0x41f4fc20), + TOBN(0xcf3af47a, 0x3a338acc), TOBN(0x6539a4fb, 0xe7128975)}, + {TOBN(0xcec31c14, 0xc33c7fcf), TOBN(0x7eb6799b, 0xc7be322b), + TOBN(0x119ef4e9, 0x6646f623), TOBN(0x7b7a26a5, 0x54d7299b)}}, + {{TOBN(0xcb37f08d, 0x403f46f2), TOBN(0x94b8fc43, 0x1a0ec0c7), + TOBN(0xbb8514e3, 0xc332142f), TOBN(0xf3ed2c33, 0xe80d2a7a)}, + {TOBN(0x8d2080af, 0xb639126c), TOBN(0xf7b6be60, 0xe3553ade), + TOBN(0x3950aa9f, 0x1c7e2b09), TOBN(0x847ff958, 0x6410f02b)}}, + {{TOBN(0x877b7cf5, 0x678a31b0), TOBN(0xd50301ae, 0x3998b620), + TOBN(0x734257c5, 0xc00fb396), TOBN(0xf9fb18a0, 0x04e672a6)}, + {TOBN(0xff8bd8eb, 0xe8758851), TOBN(0x1e64e4c6, 0x5d99ba44), + TOBN(0x4b8eaedf, 0x7dfd93b7), TOBN(0xba2f2a98, 0x04e76b8c)}}, + {{TOBN(0x7d790cba, 0xe8053433), TOBN(0xc8e725a0, 0x3d2c9585), + TOBN(0x58c5c476, 0xcdd8f5ed), TOBN(0xd106b952, 0xefa9fe1d)}, + {TOBN(0x3c5c775b, 0x0eff13a9), TOBN(0x242442ba, 0xe057b930), + TOBN(0xe9f458d4, 0xc9b70cbd), TOBN(0x69b71448, 0xa3cdb89a)}}, + {{TOBN(0x41ee46f6, 0x0e2ed742), TOBN(0x573f1045, 0x40067493), + TOBN(0xb1e154ff, 0x9d54c304), TOBN(0x2ad0436a, 0x8d3a7502)}, + {TOBN(0xee4aaa2d, 0x431a8121), TOBN(0xcd38b3ab, 0x886f11ed), + TOBN(0x57d49ea6, 0x034a0eb7), TOBN(0xd2b773bd, 0xf7e85e58)}}, + {{TOBN(0x4a559ac4, 0x9b5c1f14), TOBN(0xc444be1a, 0x3e54df2b), + TOBN(0x13aad704, 0xeda41891), TOBN(0xcd927bec, 0x5eb5c788)}, + {TOBN(0xeb3c8516, 0xe48c8a34), TOBN(0x1b7ac812, 0x4b546669), + TOBN(0x1815f896, 0x594df8ec), TOBN(0x87c6a79c, 0x79227865)}}, + {{TOBN(0xae02a2f0, 0x9b56ddbd), TOBN(0x1339b5ac, 0x8a2f1cf3), + TOBN(0xf2b569c7, 0x839dff0d), TOBN(0xb0b9e864, 0xfee9a43d)}, + {TOBN(0x4ff8ca41, 0x77bb064e), TOBN(0x145a2812, 0xfd249f63), + TOBN(0x3ab7beac, 0xf86f689a), TOBN(0x9bafec27, 0x01d35f5e)}}, + {{TOBN(0x28054c65, 0x4265aa91), TOBN(0xa4b18304, 0x035efe42), + TOBN(0x6887b0e6, 0x9639dec7), TOBN(0xf4b8f6ad, 0x3d52aea5)}, + {TOBN(0xfb9293cc, 0x971a8a13), TOBN(0x3f159e5d, 0x4c934d07), + TOBN(0x2c50e9b1, 0x09acbc29), TOBN(0x08eb65e6, 0x7154d129)}}, + {{TOBN(0x4feff589, 0x30b75c3e), TOBN(0x0bb82fe2, 0x94491c93), + TOBN(0xd8ac377a, 0x89af62bb), TOBN(0xd7b51490, 0x9685e49f)}, + {TOBN(0xabca9a7b, 0x04497f19), TOBN(0x1b35ed0a, 0x1a7ad13f), + TOBN(0x6b601e21, 0x3ec86ed6), TOBN(0xda91fcb9, 0xce0c76f1)}}, + {{TOBN(0x9e28507b, 0xd7ab27e1), TOBN(0x7c19a555, 0x63945b7b), + TOBN(0x6b43f0a1, 0xaafc9827), TOBN(0x443b4fbd, 0x3aa55b91)}, + {TOBN(0x962b2e65, 0x6962c88f), TOBN(0x139da8d4, 0xce0db0ca), + TOBN(0xb93f05dd, 0x1b8d6c4f), TOBN(0x779cdff7, 0x180b9824)}}, + {{TOBN(0xbba23fdd, 0xae57c7b7), TOBN(0x345342f2, 0x1b932522), + TOBN(0xfd9c80fe, 0x556d4aa3), TOBN(0xa03907ba, 0x6525bb61)}, + {TOBN(0x38b010e1, 0xff218933), TOBN(0xc066b654, 0xaa52117b), + TOBN(0x8e141920, 0x94f2e6ea), TOBN(0x66a27dca, 0x0d32f2b2)}}, + {{TOBN(0x69c7f993, 0x048b3717), TOBN(0xbf5a989a, 0xb178ae1c), + TOBN(0x49fa9058, 0x564f1d6b), TOBN(0x27ec6e15, 0xd31fde4e)}, + {TOBN(0x4cce0373, 0x7276e7fc), TOBN(0x64086d79, 0x89d6bf02), + TOBN(0x5a72f046, 0x4ccdd979), TOBN(0x909c3566, 0x47775631)}}, + {{TOBN(0x1c07bc6b, 0x75dd7125), TOBN(0xb4c6bc97, 0x87a0428d), + TOBN(0x507ece52, 0xfdeb6b9d), TOBN(0xfca56512, 0xb2c95432)}, + {TOBN(0x15d97181, 0xd0e8bd06), TOBN(0x384dd317, 0xc6bb46ea), + TOBN(0x5441ea20, 0x3952b624), TOBN(0xbcf70dee, 0x4e7dc2fb)}}, + {{TOBN(0x372b016e, 0x6628e8c3), TOBN(0x07a0d667, 0xb60a7522), + TOBN(0xcf05751b, 0x0a344ee2), TOBN(0x0ec09a48, 0x118bdeec)}, + {TOBN(0x6e4b3d4e, 0xd83dce46), TOBN(0x43a6316d, 0x99d2fc6e), + TOBN(0xa99d8989, 0x56cf044c), TOBN(0x7c7f4454, 0xae3e5fb7)}}, + {{TOBN(0xb2e6b121, 0xfbabbe92), TOBN(0x281850fb, 0xe1330076), + TOBN(0x093581ec, 0x97890015), TOBN(0x69b1dded, 0x75ff77f5)}, + {TOBN(0x7cf0b18f, 0xab105105), TOBN(0x953ced31, 0xa89ccfef), + TOBN(0x3151f85f, 0xeb914009), TOBN(0x3c9f1b87, 0x88ed48ad)}}, + {{TOBN(0xc9aba1a1, 0x4a7eadcb), TOBN(0x928e7501, 0x522e71cf), + TOBN(0xeaede727, 0x3a2e4f83), TOBN(0x467e10d1, 0x1ce3bbd3)}, + {TOBN(0xf3442ac3, 0xb955dcf0), TOBN(0xba96307d, 0xd3d5e527), + TOBN(0xf763a10e, 0xfd77f474), TOBN(0x5d744bd0, 0x6a6e1ff0)}}, + {{TOBN(0xd287282a, 0xa777899e), TOBN(0xe20eda8f, 0xd03f3cde), + TOBN(0x6a7e75bb, 0x50b07d31), TOBN(0x0b7e2a94, 0x6f379de4)}, + {TOBN(0x31cb64ad, 0x19f593cf), TOBN(0x7b1a9e4f, 0x1e76ef1d), + TOBN(0xe18c9c9d, 0xb62d609c), TOBN(0x439bad6d, 0xe779a650)}}, + {{TOBN(0x219d9066, 0xe032f144), TOBN(0x1db632b8, 0xe8b2ec6a), + TOBN(0xff0d0fd4, 0xfda12f78), TOBN(0x56fb4c2d, 0x2a25d265)}, + {TOBN(0x5f4e2ee1, 0x255a03f1), TOBN(0x61cd6af2, 0xe96af176), + TOBN(0xe0317ba8, 0xd068bc97), TOBN(0x927d6bab, 0x264b988e)}}, + {{TOBN(0xa18f07e0, 0xe90fb21e), TOBN(0x00fd2b80, 0xbba7fca1), + TOBN(0x20387f27, 0x95cd67b5), TOBN(0x5b89a4e7, 0xd39707f7)}, + {TOBN(0x8f83ad3f, 0x894407ce), TOBN(0xa0025b94, 0x6c226132), + TOBN(0xc79563c7, 0xf906c13b), TOBN(0x5f548f31, 0x4e7bb025)}}, + {{TOBN(0x2b4c6b8f, 0xeac6d113), TOBN(0xa67e3f9c, 0x0e813c76), + TOBN(0x3982717c, 0x3fe1f4b9), TOBN(0x58865819, 0x26d8050e)}, + {TOBN(0x99f3640c, 0xf7f06f20), TOBN(0xdc610216, 0x2a66ebc2), + TOBN(0x52f2c175, 0x767a1e08), TOBN(0x05660e1a, 0x5999871b)}}, + {{TOBN(0x6b0f1762, 0x6d3c4693), TOBN(0xf0e7d627, 0x37ed7bea), + TOBN(0xc51758c7, 0xb75b226d), TOBN(0x40a88628, 0x1f91613b)}, + {TOBN(0x889dbaa7, 0xbbb38ce0), TOBN(0xe0404b65, 0xbddcad81), + TOBN(0xfebccd3a, 0x8bc9671f), TOBN(0xfbf9a357, 0xee1f5375)}}, + {{TOBN(0x5dc169b0, 0x28f33398), TOBN(0xb07ec11d, 0x72e90f65), + TOBN(0xae7f3b4a, 0xfaab1eb1), TOBN(0xd970195e, 0x5f17538a)}, + {TOBN(0x52b05cbe, 0x0181e640), TOBN(0xf5debd62, 0x2643313d), + TOBN(0x76148154, 0x5df31f82), TOBN(0x23e03b33, 0x3a9e13c5)}}, + {{TOBN(0xff758949, 0x4fde0c1f), TOBN(0xbf8a1abe, 0xe5b6ec20), + TOBN(0x702278fb, 0x87e1db6c), TOBN(0xc447ad7a, 0x35ed658f)}, + {TOBN(0x48d4aa38, 0x03d0ccf2), TOBN(0x80acb338, 0x819a7c03), + TOBN(0x9bc7c89e, 0x6e17cecc), TOBN(0x46736b8b, 0x03be1d82)}}, + {{TOBN(0xd65d7b60, 0xc0432f96), TOBN(0xddebe7a3, 0xdeb5442f), + TOBN(0x79a25307, 0x7dff69a2), TOBN(0x37a56d94, 0x02cf3122)}, + {TOBN(0x8bab8aed, 0xf2350d0a), TOBN(0x13c3f276, 0x037b0d9a), + TOBN(0xc664957c, 0x44c65cae), TOBN(0x88b44089, 0xc2e71a88)}}, + {{TOBN(0xdb88e5a3, 0x5cb02664), TOBN(0x5d4c0bf1, 0x8686c72e), + TOBN(0xea3d9b62, 0xa682d53e), TOBN(0x9b605ef4, 0x0b2ad431)}, + {TOBN(0x71bac202, 0xc69645d0), TOBN(0xa115f03a, 0x6a1b66e7), + TOBN(0xfe2c563a, 0x158f4dc4), TOBN(0xf715b3a0, 0x4d12a78c)}}, + {{TOBN(0x8f7f0a48, 0xd413213a), TOBN(0x2035806d, 0xc04becdb), + TOBN(0xecd34a99, 0x5d8587f5), TOBN(0x4d8c3079, 0x9f6d3a71)}, + {TOBN(0x1b2a2a67, 0x8d95a8f6), TOBN(0xc58c9d7d, 0xf2110d0d), + TOBN(0xdeee81d5, 0xcf8fba3f), TOBN(0xa42be3c0, 0x0c7cdf68)}}, + {{TOBN(0x2126f742, 0xd43b5eaa), TOBN(0x054a0766, 0xdfa59b85), + TOBN(0x9d0d5e36, 0x126bfd45), TOBN(0xa1f8fbd7, 0x384f8a8f)}, + {TOBN(0x317680f5, 0xd563fccc), TOBN(0x48ca5055, 0xf280a928), + TOBN(0xe00b81b2, 0x27b578cf), TOBN(0x10aad918, 0x2994a514)}}, + {{TOBN(0xd9e07b62, 0xb7bdc953), TOBN(0x9f0f6ff2, 0x5bc086dd), + TOBN(0x09d1ccff, 0x655eee77), TOBN(0x45475f79, 0x5bef7df1)}, + {TOBN(0x3faa28fa, 0x86f702cc), TOBN(0x92e60905, 0x0f021f07), + TOBN(0xe9e62968, 0x7f8fa8c6), TOBN(0xbd71419a, 0xf036ea2c)}}, + {{TOBN(0x171ee1cc, 0x6028da9a), TOBN(0x5352fe1a, 0xc251f573), + TOBN(0xf8ff236e, 0x3fa997f4), TOBN(0xd831b6c9, 0xa5749d5f)}, + {TOBN(0x7c872e1d, 0xe350e2c2), TOBN(0xc56240d9, 0x1e0ce403), + TOBN(0xf9deb077, 0x6974f5cb), TOBN(0x7d50ba87, 0x961c3728)}}, + {{TOBN(0xd6f89426, 0x5a3a2518), TOBN(0xcf817799, 0xc6303d43), + TOBN(0x510a0471, 0x619e5696), TOBN(0xab049ff6, 0x3a5e307b)}, + {TOBN(0xe4cdf9b0, 0xfeb13ec7), TOBN(0xd5e97117, 0x9d8ff90c), + TOBN(0xf6f64d06, 0x9afa96af), TOBN(0x00d0bf5e, 0x9d2012a2)}}, + {{TOBN(0xe63f301f, 0x358bcdc0), TOBN(0x07689e99, 0x0a9d47f8), + TOBN(0x1f689e2f, 0x4f43d43a), TOBN(0x4d542a16, 0x90920904)}, + {TOBN(0xaea293d5, 0x9ca0a707), TOBN(0xd061fe45, 0x8ac68065), + TOBN(0x1033bf1b, 0x0090008c), TOBN(0x29749558, 0xc08a6db6)}}, + {{TOBN(0x74b5fc59, 0xc1d5d034), TOBN(0xf712e9f6, 0x67e215e0), + TOBN(0xfd520cbd, 0x860200e6), TOBN(0x0229acb4, 0x3ea22588)}, + {TOBN(0x9cd1e14c, 0xfff0c82e), TOBN(0x87684b62, 0x59c69e73), + TOBN(0xda85e61c, 0x96ccb989), TOBN(0x2d5dbb02, 0xa3d06493)}}, + {{TOBN(0xf22ad33a, 0xe86b173c), TOBN(0xe8e41ea5, 0xa79ff0e3), + TOBN(0x01d2d725, 0xdd0d0c10), TOBN(0x31f39088, 0x032d28f9)}, + {TOBN(0x7b3f71e1, 0x7829839e), TOBN(0x0cf691b4, 0x4502ae58), + TOBN(0xef658dbd, 0xbefc6115), TOBN(0xa5cd6ee5, 0xb3ab5314)}}, + {{TOBN(0x206c8d7b, 0x5f1d2347), TOBN(0x794645ba, 0x4cc2253a), + TOBN(0xd517d8ff, 0x58389e08), TOBN(0x4fa20dee, 0x9f847288)}, + {TOBN(0xeba072d8, 0xd797770a), TOBN(0x7360c91d, 0xbf429e26), + TOBN(0x7200a3b3, 0x80af8279), TOBN(0x6a1c9150, 0x82dadce3)}}, + {{TOBN(0x0ee6d3a7, 0xc35d8794), TOBN(0x042e6558, 0x0356bae5), + TOBN(0x9f59698d, 0x643322fd), TOBN(0x9379ae15, 0x50a61967)}, + {TOBN(0x64b9ae62, 0xfcc9981e), TOBN(0xaed3d631, 0x6d2934c6), + TOBN(0x2454b302, 0x5e4e65eb), TOBN(0xab09f647, 0xf9950428)}}}, + {{{TOBN(0xb2083a12, 0x22248acc), TOBN(0x1f6ec0ef, 0x3264e366), + TOBN(0x5659b704, 0x5afdee28), TOBN(0x7a823a40, 0xe6430bb5)}, + {TOBN(0x24592a04, 0xe1900a79), TOBN(0xcde09d4a, 0xc9ee6576), + TOBN(0x52b6463f, 0x4b5ea54a), TOBN(0x1efe9ed3, 0xd3ca65a7)}}, + {{TOBN(0xe27a6dbe, 0x305406dd), TOBN(0x8eb7dc7f, 0xdd5d1957), + TOBN(0xf54a6876, 0x387d4d8f), TOBN(0x9c479409, 0xc7762de4)}, + {TOBN(0xbe4d5b5d, 0x99b30778), TOBN(0x25380c56, 0x6e793682), + TOBN(0x602d37f3, 0xdac740e3), TOBN(0x140deabe, 0x1566e4ae)}}, + {{TOBN(0x4481d067, 0xafd32acf), TOBN(0xd8f0fcca, 0xe1f71ccf), + TOBN(0xd208dd0c, 0xb596f2da), TOBN(0xd049d730, 0x9aad93f9)}, + {TOBN(0xc79f263d, 0x42ab580e), TOBN(0x09411bb1, 0x23f707b4), + TOBN(0x8cfde1ff, 0x835e0eda), TOBN(0x72707490, 0x90f03402)}}, + {{TOBN(0xeaee6126, 0xc49a861e), TOBN(0x024f3b65, 0xe14f0d06), + TOBN(0x51a3f1e8, 0xc69bfc17), TOBN(0xc3c3a8e9, 0xa7686381)}, + {TOBN(0x3400752c, 0xb103d4c8), TOBN(0x02bc4613, 0x9218b36b), + TOBN(0xc67f75eb, 0x7651504a), TOBN(0xd6848b56, 0xd02aebfa)}}, + {{TOBN(0xbd9802e6, 0xc30fa92b), TOBN(0x5a70d96d, 0x9a552784), + TOBN(0x9085c4ea, 0x3f83169b), TOBN(0xfa9423bb, 0x06908228)}, + {TOBN(0x2ffebe12, 0xfe97a5b9), TOBN(0x85da6049, 0x71b99118), + TOBN(0x9cbc2f7f, 0x63178846), TOBN(0xfd96bc70, 0x9153218e)}}, + {{TOBN(0x958381db, 0x1782269b), TOBN(0xae34bf79, 0x2597e550), + TOBN(0xbb5c6064, 0x5f385153), TOBN(0x6f0e96af, 0xe3088048)}, + {TOBN(0xbf6a0215, 0x77884456), TOBN(0xb3b5688c, 0x69310ea7), + TOBN(0x17c94295, 0x04fad2de), TOBN(0xe020f0e5, 0x17896d4d)}}, + {{TOBN(0x730ba0ab, 0x0976505f), TOBN(0x567f6813, 0x095e2ec5), + TOBN(0x47062010, 0x6331ab71), TOBN(0x72cfa977, 0x41d22b9f)}, + {TOBN(0x33e55ead, 0x8a2373da), TOBN(0xa8d0d5f4, 0x7ba45a68), + TOBN(0xba1d8f9c, 0x03029d15), TOBN(0x8f34f1cc, 0xfc55b9f3)}}, + {{TOBN(0xcca4428d, 0xbbe5a1a9), TOBN(0x8187fd5f, 0x3126bd67), + TOBN(0x0036973a, 0x48105826), TOBN(0xa39b6663, 0xb8bd61a0)}, + {TOBN(0x6d42deef, 0x2d65a808), TOBN(0x4969044f, 0x94636b19), + TOBN(0xf611ee47, 0xdd5d564c), TOBN(0x7b2f3a49, 0xd2873077)}}, + {{TOBN(0x94157d45, 0x300eb294), TOBN(0x2b2a656e, 0x169c1494), + TOBN(0xc000dd76, 0xd3a47aa9), TOBN(0xa2864e4f, 0xa6243ea4)}, + {TOBN(0x82716c47, 0xdb89842e), TOBN(0x12dfd7d7, 0x61479fb7), + TOBN(0x3b9a2c56, 0xe0b2f6dc), TOBN(0x46be862a, 0xd7f85d67)}}, + {{TOBN(0x03b0d8dd, 0x0f82b214), TOBN(0x460c34f9, 0xf103cbc6), + TOBN(0xf32e5c03, 0x18d79e19), TOBN(0x8b8888ba, 0xa84117f8)}, + {TOBN(0x8f3c37dc, 0xc0722677), TOBN(0x10d21be9, 0x1c1c0f27), + TOBN(0xd47c8468, 0xe0f7a0c6), TOBN(0x9bf02213, 0xadecc0e0)}}, + {{TOBN(0x0baa7d12, 0x42b48b99), TOBN(0x1bcb665d, 0x48424096), + TOBN(0x8b847cd6, 0xebfb5cfb), TOBN(0x87c2ae56, 0x9ad4d10d)}, + {TOBN(0xf1cbb122, 0x0de36726), TOBN(0xe7043c68, 0x3fdfbd21), + TOBN(0x4bd0826a, 0x4e79d460), TOBN(0x11f5e598, 0x4bd1a2cb)}}, + {{TOBN(0x97554160, 0xb7fe7b6e), TOBN(0x7d16189a, 0x400a3fb2), + TOBN(0xd73e9bea, 0xe328ca1e), TOBN(0x0dd04b97, 0xe793d8cc)}, + {TOBN(0xa9c83c9b, 0x506db8cc), TOBN(0x5cd47aae, 0xcf38814c), + TOBN(0x26fc430d, 0xb64b45e6), TOBN(0x079b5499, 0xd818ea84)}}, + {{TOBN(0xebb01102, 0xc1c24a3b), TOBN(0xca24e568, 0x1c161c1a), + TOBN(0x103eea69, 0x36f00a4a), TOBN(0x9ad76ee8, 0x76176c7b)}, + {TOBN(0x97451fc2, 0x538e0ff7), TOBN(0x94f89809, 0x6604b3b0), + TOBN(0x6311436e, 0x3249cfd7), TOBN(0x27b4a7bd, 0x41224f69)}}, + {{TOBN(0x03b5d21a, 0xe0ac2941), TOBN(0x279b0254, 0xc2d31937), + TOBN(0x3307c052, 0xcac992d0), TOBN(0x6aa7cb92, 0xefa8b1f3)}, + {TOBN(0x5a182580, 0x0d37c7a5), TOBN(0x13380c37, 0x342d5422), + TOBN(0x92ac2d66, 0xd5d2ef92), TOBN(0x035a70c9, 0x030c63c6)}}, + {{TOBN(0xc16025dd, 0x4ce4f152), TOBN(0x1f419a71, 0xf9df7c06), + TOBN(0x6d5b2214, 0x91e4bb14), TOBN(0xfc43c6cc, 0x839fb4ce)}, + {TOBN(0x49f06591, 0x925d6b2d), TOBN(0x4b37d9d3, 0x62186598), + TOBN(0x8c54a971, 0xd01b1629), TOBN(0xe1a9c29f, 0x51d50e05)}}, + {{TOBN(0x5109b785, 0x71ba1861), TOBN(0x48b22d5c, 0xd0c8f93d), + TOBN(0xe8fa84a7, 0x8633bb93), TOBN(0x53fba6ba, 0x5aebbd08)}, + {TOBN(0x7ff27df3, 0xe5eea7d8), TOBN(0x521c8796, 0x68ca7158), + TOBN(0xb9d5133b, 0xce6f1a05), TOBN(0x2d50cd53, 0xfd0ebee4)}}, + {{TOBN(0xc82115d6, 0xc5a3ef16), TOBN(0x993eff9d, 0xba079221), + TOBN(0xe4da2c5e, 0x4b5da81c), TOBN(0x9a89dbdb, 0x8033fd85)}, + {TOBN(0x60819ebf, 0x2b892891), TOBN(0x53902b21, 0x5d14a4d5), + TOBN(0x6ac35051, 0xd7fda421), TOBN(0xcc6ab885, 0x61c83284)}}, + {{TOBN(0x14eba133, 0xf74cff17), TOBN(0x240aaa03, 0xecb813f2), + TOBN(0xcfbb6540, 0x6f665bee), TOBN(0x084b1fe4, 0xa425ad73)}, + {TOBN(0x009d5d16, 0xd081f6a6), TOBN(0x35304fe8, 0xeef82c90), + TOBN(0xf20346d5, 0xaa9eaa22), TOBN(0x0ada9f07, 0xac1c91e3)}}, + {{TOBN(0xa6e21678, 0x968a6144), TOBN(0x54c1f77c, 0x07b31a1e), + TOBN(0xd6bb787e, 0x5781fbe1), TOBN(0x61bd2ee0, 0xe31f1c4a)}, + {TOBN(0xf25aa1e9, 0x781105fc), TOBN(0x9cf2971f, 0x7b2f8e80), + TOBN(0x26d15412, 0xcdff919b), TOBN(0x01db4ebe, 0x34bc896e)}}, + {{TOBN(0x7d9b3e23, 0xb40df1cf), TOBN(0x59337373, 0x94e971b4), + TOBN(0xbf57bd14, 0x669cf921), TOBN(0x865daedf, 0x0c1a1064)}, + {TOBN(0x3eb70bd3, 0x83279125), TOBN(0xbc3d5b9f, 0x34ecdaab), + TOBN(0x91e3ed7e, 0x5f755caf), TOBN(0x49699f54, 0xd41e6f02)}}, + {{TOBN(0x185770e1, 0xd4a7a15b), TOBN(0x08f3587a, 0xeaac87e7), + TOBN(0x352018db, 0x473133ea), TOBN(0x674ce719, 0x04fd30fc)}, + {TOBN(0x7b8d9835, 0x088b3e0e), TOBN(0x7a0356a9, 0x5d0d47a1), + TOBN(0x9d9e7659, 0x6474a3c4), TOBN(0x61ea48a7, 0xff66966c)}}, + {{TOBN(0x30417758, 0x0f3e4834), TOBN(0xfdbb21c2, 0x17a9afcb), + TOBN(0x756fa17f, 0x2f9a67b3), TOBN(0x2a6b2421, 0xa245c1a8)}, + {TOBN(0x64be2794, 0x4af02291), TOBN(0xade465c6, 0x2a5804fe), + TOBN(0x8dffbd39, 0xa6f08fd7), TOBN(0xc4efa84c, 0xaa14403b)}}, + {{TOBN(0xa1b91b2a, 0x442b0f5c), TOBN(0xb748e317, 0xcf997736), + TOBN(0x8d1b62bf, 0xcee90e16), TOBN(0x907ae271, 0x0b2078c0)}, + {TOBN(0xdf31534b, 0x0c9bcddd), TOBN(0x043fb054, 0x39adce83), + TOBN(0x99031043, 0xd826846a), TOBN(0x61a9c0d6, 0xb144f393)}}, + {{TOBN(0xdab48046, 0x47718427), TOBN(0xdf17ff9b, 0x6e830f8b), + TOBN(0x408d7ee8, 0xe49a1347), TOBN(0x6ac71e23, 0x91c1d4ae)}, + {TOBN(0xc8cbb9fd, 0x1defd73c), TOBN(0x19840657, 0xbbbbfec5), + TOBN(0x39db1cb5, 0x9e7ef8ea), TOBN(0x78aa8296, 0x64105f30)}}, + {{TOBN(0xa3d9b7f0, 0xa3738c29), TOBN(0x0a2f235a, 0xbc3250a3), + TOBN(0x55e506f6, 0x445e4caf), TOBN(0x0974f73d, 0x33475f7a)}, + {TOBN(0xd37dbba3, 0x5ba2f5a8), TOBN(0x542c6e63, 0x6af40066), + TOBN(0x26d99b53, 0xc5d73e2c), TOBN(0x06060d7d, 0x6c3ca33e)}}, + {{TOBN(0xcdbef1c2, 0x065fef4a), TOBN(0x77e60f7d, 0xfd5b92e3), + TOBN(0xd7c549f0, 0x26708350), TOBN(0x201b3ad0, 0x34f121bf)}, + {TOBN(0x5fcac2a1, 0x0334fc14), TOBN(0x8a9a9e09, 0x344552f6), + TOBN(0x7dd8a1d3, 0x97653082), TOBN(0x5fc0738f, 0x79d4f289)}}, + {{TOBN(0x787d244d, 0x17d2d8c3), TOBN(0xeffc6345, 0x70830684), + TOBN(0x5ddb96dd, 0xe4f73ae5), TOBN(0x8efb14b1, 0x172549a5)}, + {TOBN(0x6eb73eee, 0x2245ae7a), TOBN(0xbca4061e, 0xea11f13e), + TOBN(0xb577421d, 0x30b01f5d), TOBN(0xaa688b24, 0x782e152c)}}, + {{TOBN(0x67608e71, 0xbd3502ba), TOBN(0x4ef41f24, 0xb4de75a0), + TOBN(0xb08dde5e, 0xfd6125e5), TOBN(0xde484825, 0xa409543f)}, + {TOBN(0x1f198d98, 0x65cc2295), TOBN(0x428a3771, 0x6e0edfa2), + TOBN(0x4f9697a2, 0xadf35fc7), TOBN(0x01a43c79, 0xf7cac3c7)}}, + {{TOBN(0xb05d7059, 0x0fd3659a), TOBN(0x8927f30c, 0xbb7f2d9a), + TOBN(0x4023d1ac, 0x8cf984d3), TOBN(0x32125ed3, 0x02897a45)}, + {TOBN(0xfb572dad, 0x3d414205), TOBN(0x73000ef2, 0xe3fa82a9), + TOBN(0x4c0868e9, 0xf10a5581), TOBN(0x5b61fc67, 0x6b0b3ca5)}}, + {{TOBN(0xc1258d5b, 0x7cae440c), TOBN(0x21c08b41, 0x402b7531), + TOBN(0xf61a8955, 0xde932321), TOBN(0x3568faf8, 0x2d1408af)}, + {TOBN(0x71b15e99, 0x9ecf965b), TOBN(0xf14ed248, 0xe917276f), + TOBN(0xc6f4caa1, 0x820cf9e2), TOBN(0x681b20b2, 0x18d83c7e)}}, + {{TOBN(0x6cde738d, 0xc6c01120), TOBN(0x71db0813, 0xae70e0db), + TOBN(0x95fc0644, 0x74afe18c), TOBN(0x34619053, 0x129e2be7)}, + {TOBN(0x80615cea, 0xdb2a3b15), TOBN(0x0a49a19e, 0xdb4c7073), + TOBN(0x0e1b84c8, 0x8fd2d367), TOBN(0xd74bf462, 0x033fb8aa)}}, + {{TOBN(0x889f6d65, 0x533ef217), TOBN(0x7158c7e4, 0xc3ca2e87), + TOBN(0xfb670dfb, 0xdc2b4167), TOBN(0x75910a01, 0x844c257f)}, + {TOBN(0xf336bf07, 0xcf88577d), TOBN(0x22245250, 0xe45e2ace), + TOBN(0x2ed92e8d, 0x7ca23d85), TOBN(0x29f8be4c, 0x2b812f58)}}, + {{TOBN(0xdd9ebaa7, 0x076fe12b), TOBN(0x3f2400cb, 0xae1537f9), + TOBN(0x1aa93528, 0x17bdfb46), TOBN(0xc0f98430, 0x67883b41)}, + {TOBN(0x5590ede1, 0x0170911d), TOBN(0x7562f5bb, 0x34d4b17f), + TOBN(0xe1fa1df2, 0x1826b8d2), TOBN(0xb40b796a, 0x6bd80d59)}}, + {{TOBN(0xd65bf197, 0x3467ba92), TOBN(0x8c9b46db, 0xf70954b0), + TOBN(0x97c8a0f3, 0x0e78f15d), TOBN(0xa8f3a69a, 0x85a4c961)}, + {TOBN(0x4242660f, 0x61e4ce9b), TOBN(0xbf06aab3, 0x6ea6790c), + TOBN(0xc6706f8e, 0xec986416), TOBN(0x9e56dec1, 0x9a9fc225)}}, + {{TOBN(0x527c46f4, 0x9a9898d9), TOBN(0xd799e77b, 0x5633cdef), + TOBN(0x24eacc16, 0x7d9e4297), TOBN(0xabb61cea, 0x6b1cb734)}, + {TOBN(0xbee2e8a7, 0xf778443c), TOBN(0x3bb42bf1, 0x29de2fe6), + TOBN(0xcbed86a1, 0x3003bb6f), TOBN(0xd3918e6c, 0xd781cdf6)}}, + {{TOBN(0x4bee3271, 0x9a5103f1), TOBN(0x5243efc6, 0xf50eac06), + TOBN(0xb8e122cb, 0x6adcc119), TOBN(0x1b7faa84, 0xc0b80a08)}, + {TOBN(0x32c3d1bd, 0x6dfcd08c), TOBN(0x129dec4e, 0x0be427de), + TOBN(0x98ab679c, 0x1d263c83), TOBN(0xafc83cb7, 0xcef64eff)}}, + {{TOBN(0x85eb6088, 0x2fa6be76), TOBN(0x892585fb, 0x1328cbfe), + TOBN(0xc154d3ed, 0xcf618dda), TOBN(0xc44f601b, 0x3abaf26e)}, + {TOBN(0x7bf57d0b, 0x2be1fdfd), TOBN(0xa833bd2d, 0x21137fee), + TOBN(0x9353af36, 0x2db591a8), TOBN(0xc76f26dc, 0x5562a056)}}, + {{TOBN(0x1d87e47d, 0x3fdf5a51), TOBN(0x7afb5f93, 0x55c9cab0), + TOBN(0x91bbf58f, 0x89e0586e), TOBN(0x7c72c018, 0x0d843709)}, + {TOBN(0xa9a5aafb, 0x99b5c3dc), TOBN(0xa48a0f1d, 0x3844aeb0), + TOBN(0x7178b7dd, 0xb667e482), TOBN(0x453985e9, 0x6e23a59a)}}, + {{TOBN(0x4a54c860, 0x01b25dd8), TOBN(0x0dd37f48, 0xfb897c8a), + TOBN(0x5f8aa610, 0x0ea90cd9), TOBN(0xc8892c68, 0x16d5830d)}, + {TOBN(0xeb4befc0, 0xef514ca5), TOBN(0x478eb679, 0xe72c9ee6), + TOBN(0x9bca20da, 0xdbc40d5f), TOBN(0xf015de21, 0xdde4f64a)}}, + {{TOBN(0xaa6a4de0, 0xeaf4b8a5), TOBN(0x68cfd9ca, 0x4bc60e32), + TOBN(0x668a4b01, 0x7fd15e70), TOBN(0xd9f0694a, 0xf27dc09d)}, + {TOBN(0xf6c3cad5, 0xba708bcd), TOBN(0x5cd2ba69, 0x5bb95c2a), + TOBN(0xaa28c1d3, 0x33c0a58f), TOBN(0x23e274e3, 0xabc77870)}}, + {{TOBN(0x44c3692d, 0xdfd20a4a), TOBN(0x091c5fd3, 0x81a66653), + TOBN(0x6c0bb691, 0x09a0757d), TOBN(0x9072e8b9, 0x667343ea)}, + {TOBN(0x31d40eb0, 0x80848bec), TOBN(0x95bd480a, 0x79fd36cc), + TOBN(0x01a77c61, 0x65ed43f5), TOBN(0xafccd127, 0x2e0d40bf)}}, + {{TOBN(0xeccfc82d, 0x1cc1884b), TOBN(0xc85ac201, 0x5d4753b4), + TOBN(0xc7a6caac, 0x658e099f), TOBN(0xcf46369e, 0x04b27390)}, + {TOBN(0xe2e7d049, 0x506467ea), TOBN(0x481b63a2, 0x37cdeccc), + TOBN(0x4029abd8, 0xed80143a), TOBN(0x28bfe3c7, 0xbcb00b88)}}, + {{TOBN(0x3bec1009, 0x0643d84a), TOBN(0x885f3668, 0xabd11041), + TOBN(0xdb02432c, 0xf83a34d6), TOBN(0x32f7b360, 0x719ceebe)}, + {TOBN(0xf06c7837, 0xdad1fe7a), TOBN(0x60a157a9, 0x5441a0b0), + TOBN(0x704970e9, 0xe2d47550), TOBN(0xcd2bd553, 0x271b9020)}}, + {{TOBN(0xff57f82f, 0x33e24a0b), TOBN(0x9cbee23f, 0xf2565079), + TOBN(0x16353427, 0xeb5f5825), TOBN(0x276feec4, 0xe948d662)}, + {TOBN(0xd1b62bc6, 0xda10032b), TOBN(0x718351dd, 0xf0e72a53), + TOBN(0x93452076, 0x2420e7ba), TOBN(0x96368fff, 0x3a00118d)}}, + {{TOBN(0x00ce2d26, 0x150a49e4), TOBN(0x0c28b636, 0x3f04706b), + TOBN(0xbad65a46, 0x58b196d0), TOBN(0x6c8455fc, 0xec9f8b7c)}, + {TOBN(0xe90c895f, 0x2d71867e), TOBN(0x5c0be31b, 0xedf9f38c), + TOBN(0x2a37a15e, 0xd8f6ec04), TOBN(0x239639e7, 0x8cd85251)}}, + {{TOBN(0xd8975315, 0x9c7c4c6b), TOBN(0x603aa3c0, 0xd7409af7), + TOBN(0xb8d53d0c, 0x007132fb), TOBN(0x68d12af7, 0xa6849238)}, + {TOBN(0xbe0607e7, 0xbf5d9279), TOBN(0x9aa50055, 0xaada74ce), + TOBN(0xe81079cb, 0xba7e8ccb), TOBN(0x610c71d1, 0xa5f4ff5e)}}, + {{TOBN(0x9e2ee1a7, 0x5aa07093), TOBN(0xca84004b, 0xa75da47c), + TOBN(0x074d3951, 0x3de75401), TOBN(0xf938f756, 0xbb311592)}, + {TOBN(0x96197618, 0x00a43421), TOBN(0x39a25362, 0x07bc78c8), + TOBN(0x278f710a, 0x0a171276), TOBN(0xb28446ea, 0x8d1a8f08)}}, + {{TOBN(0x184781bf, 0xe3b6a661), TOBN(0x7751cb1d, 0xe6d279f7), + TOBN(0xf8ff95d6, 0xc59eb662), TOBN(0x186d90b7, 0x58d3dea7)}, + {TOBN(0x0e4bb6c1, 0xdfb4f754), TOBN(0x5c5cf56b, 0x2b2801dc), + TOBN(0xc561e452, 0x1f54564d), TOBN(0xb4fb8c60, 0xf0dd7f13)}}, + {{TOBN(0xf8849630, 0x33ff98c7), TOBN(0x9619fffa, 0xcf17769c), + TOBN(0xf8090bf6, 0x1bfdd80a), TOBN(0x14d9a149, 0x422cfe63)}, + {TOBN(0xb354c360, 0x6f6df9ea), TOBN(0xdbcf770d, 0x218f17ea), + TOBN(0x207db7c8, 0x79eb3480), TOBN(0x213dbda8, 0x559b6a26)}}, + {{TOBN(0xac4c200b, 0x29fc81b3), TOBN(0xebc3e09f, 0x171d87c1), + TOBN(0x91799530, 0x1481aa9e), TOBN(0x051b92e1, 0x92e114fa)}, + {TOBN(0xdf8f92e9, 0xecb5537f), TOBN(0x44b1b2cc, 0x290c7483), + TOBN(0xa711455a, 0x2adeb016), TOBN(0x964b6856, 0x81a10c2c)}}, + {{TOBN(0x4f159d99, 0xcec03623), TOBN(0x05532225, 0xef3271ea), + TOBN(0xb231bea3, 0xc5ee4849), TOBN(0x57a54f50, 0x7094f103)}, + {TOBN(0x3e2d421d, 0x9598b352), TOBN(0xe865a49c, 0x67412ab4), + TOBN(0xd2998a25, 0x1cc3a912), TOBN(0x5d092808, 0x0c74d65d)}}, + {{TOBN(0x73f45908, 0x4088567a), TOBN(0xeb6b280e, 0x1f214a61), + TOBN(0x8c9adc34, 0xcaf0c13d), TOBN(0x39d12938, 0xf561fb80)}, + {TOBN(0xb2dc3a5e, 0xbc6edfb4), TOBN(0x7485b1b1, 0xfe4d210e), + TOBN(0x062e0400, 0xe186ae72), TOBN(0x91e32d5c, 0x6eeb3b88)}}, + {{TOBN(0x6df574d7, 0x4be59224), TOBN(0xebc88ccc, 0x716d55f3), + TOBN(0x26c2e6d0, 0xcad6ed33), TOBN(0xc6e21e7d, 0x0d3e8b10)}, + {TOBN(0x2cc5840e, 0x5bcc36bb), TOBN(0x9292445e, 0x7da74f69), + TOBN(0x8be8d321, 0x4e5193a8), TOBN(0x3ec23629, 0x8df06413)}}, + {{TOBN(0xc7e9ae85, 0xb134defa), TOBN(0x6073b1d0, 0x1bb2d475), + TOBN(0xb9ad615e, 0x2863c00d), TOBN(0x9e29493d, 0x525f4ac4)}, + {TOBN(0xc32b1dea, 0x4e9acf4f), TOBN(0x3e1f01c8, 0xa50db88d), + TOBN(0xb05d70ea, 0x04da916c), TOBN(0x714b0d0a, 0xd865803e)}}, + {{TOBN(0x4bd493fc, 0x9920cb5e), TOBN(0x5b44b1f7, 0x92c7a3ac), + TOBN(0xa2a77293, 0xbcec9235), TOBN(0x5ee06e87, 0xcd378553)}, + {TOBN(0xceff8173, 0xda621607), TOBN(0x2bb03e4c, 0x99f5d290), + TOBN(0x2945106a, 0xa6f734ac), TOBN(0xb5056604, 0xd25c4732)}}, + {{TOBN(0x5945920c, 0xe079afee), TOBN(0x686e17a0, 0x6789831f), + TOBN(0x5966bee8, 0xb74a5ae5), TOBN(0x38a673a2, 0x1e258d46)}, + {TOBN(0xbd1cc1f2, 0x83141c95), TOBN(0x3b2ecf4f, 0x0e96e486), + TOBN(0xcd3aa896, 0x74e5fc78), TOBN(0x415ec10c, 0x2482fa7a)}}, + {{TOBN(0x15234419, 0x80503380), TOBN(0x513d917a, 0xd314b392), + TOBN(0xb0b52f4e, 0x63caecae), TOBN(0x07bf22ad, 0x2dc7780b)}, + {TOBN(0xe761e8a1, 0xe4306839), TOBN(0x1b3be962, 0x5dd7feaa), + TOBN(0x4fe728de, 0x74c778f1), TOBN(0xf1fa0bda, 0x5e0070f6)}}, + {{TOBN(0x85205a31, 0x6ec3f510), TOBN(0x2c7e4a14, 0xd2980475), + TOBN(0xde3c19c0, 0x6f30ebfd), TOBN(0xdb1c1f38, 0xd4b7e644)}, + {TOBN(0xfe291a75, 0x5dce364a), TOBN(0xb7b22a3c, 0x058f5be3), + TOBN(0x2cd2c302, 0x37fea38c), TOBN(0x2930967a, 0x2e17be17)}}, + {{TOBN(0x87f009de, 0x0c061c65), TOBN(0xcb014aac, 0xedc6ed44), + TOBN(0x49bd1cb4, 0x3bafb1eb), TOBN(0x81bd8b5c, 0x282d3688)}, + {TOBN(0x1cdab87e, 0xf01a17af), TOBN(0x21f37ac4, 0xe710063b), + TOBN(0x5a6c5676, 0x42fc8193), TOBN(0xf4753e70, 0x56a6015c)}}, + {{TOBN(0x020f795e, 0xa15b0a44), TOBN(0x8f37c8d7, 0x8958a958), + TOBN(0x63b7e89b, 0xa4b675b5), TOBN(0xb4fb0c0c, 0x0fc31aea)}, + {TOBN(0xed95e639, 0xa7ff1f2e), TOBN(0x9880f5a3, 0x619614fb), + TOBN(0xdeb6ff02, 0x947151ab), TOBN(0x5bc5118c, 0xa868dcdb)}}, + {{TOBN(0xd8da2055, 0x4c20cea5), TOBN(0xcac2776e, 0x14c4d69a), + TOBN(0xcccb22c1, 0x622d599b), TOBN(0xa4ddb653, 0x68a9bb50)}, + {TOBN(0x2c4ff151, 0x1b4941b4), TOBN(0xe1ff19b4, 0x6efba588), + TOBN(0x35034363, 0xc48345e0), TOBN(0x45542e3d, 0x1e29dfc4)}}, + {{TOBN(0xf197cb91, 0x349f7aed), TOBN(0x3b2b5a00, 0x8fca8420), + TOBN(0x7c175ee8, 0x23aaf6d8), TOBN(0x54dcf421, 0x35af32b6)}, + {TOBN(0x0ba14307, 0x27d6561e), TOBN(0x879d5ee4, 0xd175b1e2), + TOBN(0xc7c43673, 0x99807db5), TOBN(0x77a54455, 0x9cd55bcd)}}, + {{TOBN(0xe6c2ff13, 0x0105c072), TOBN(0x18f7a99f, 0x8dda7da4), + TOBN(0x4c301820, 0x0e2d35c1), TOBN(0x06a53ca0, 0xd9cc6c82)}, + {TOBN(0xaa21cc1e, 0xf1aa1d9e), TOBN(0x32414334, 0x4a75b1e8), + TOBN(0x2a6d1328, 0x0ebe9fdc), TOBN(0x16bd173f, 0x98a4755a)}}, + {{TOBN(0xfbb9b245, 0x2133ffd9), TOBN(0x39a8b2f1, 0x830f1a20), + TOBN(0x484bc97d, 0xd5a1f52a), TOBN(0xd6aebf56, 0xa40eddf8)}, + {TOBN(0x32257acb, 0x76ccdac6), TOBN(0xaf4d36ec, 0x1586ff27), + TOBN(0x8eaa8863, 0xf8de7dd1), TOBN(0x0045d5cf, 0x88647c16)}}}, + {{{TOBN(0xa6f3d574, 0xc005979d), TOBN(0xc2072b42, 0x6a40e350), + TOBN(0xfca5c156, 0x8de2ecf9), TOBN(0xa8c8bf5b, 0xa515344e)}, + {TOBN(0x97aee555, 0x114df14a), TOBN(0xd4374a4d, 0xfdc5ec6b), + TOBN(0x754cc28f, 0x2ca85418), TOBN(0x71cb9e27, 0xd3c41f78)}}, + {{TOBN(0x89105079, 0x03605c39), TOBN(0xf0843d9e, 0xa142c96c), + TOBN(0xf3744934, 0x16923684), TOBN(0x732caa2f, 0xfa0a2893)}, + {TOBN(0xb2e8c270, 0x61160170), TOBN(0xc32788cc, 0x437fbaa3), + TOBN(0x39cd818e, 0xa6eda3ac), TOBN(0xe2e94239, 0x9e2b2e07)}}, + {{TOBN(0x6967d39b, 0x0260e52a), TOBN(0xd42585cc, 0x90653325), + TOBN(0x0d9bd605, 0x21ca7954), TOBN(0x4fa20877, 0x81ed57b3)}, + {TOBN(0x60c1eff8, 0xe34a0bbe), TOBN(0x56b0040c, 0x84f6ef64), + TOBN(0x28be2b24, 0xb1af8483), TOBN(0xb2278163, 0xf5531614)}}, + {{TOBN(0x8df27545, 0x5922ac1c), TOBN(0xa7b3ef5c, 0xa52b3f63), + TOBN(0x8e77b214, 0x71de57c4), TOBN(0x31682c10, 0x834c008b)}, + {TOBN(0xc76824f0, 0x4bd55d31), TOBN(0xb6d1c086, 0x17b61c71), + TOBN(0x31db0903, 0xc2a5089d), TOBN(0x9c092172, 0x184e5d3f)}}, + {{TOBN(0xdd7ced5b, 0xc00cc638), TOBN(0x1a2015eb, 0x61278fc2), + TOBN(0x2e8e5288, 0x6a37f8d6), TOBN(0xc457786f, 0xe79933ad)}, + {TOBN(0xb3fe4cce, 0x2c51211a), TOBN(0xad9b10b2, 0x24c20498), + TOBN(0x90d87a4f, 0xd28db5e5), TOBN(0x698cd105, 0x3aca2fc3)}}, + {{TOBN(0x4f112d07, 0xe91b536d), TOBN(0xceb982f2, 0x9eba09d6), + TOBN(0x3c157b2c, 0x197c396f), TOBN(0xe23c2d41, 0x7b66eb24)}, + {TOBN(0x480c57d9, 0x3f330d37), TOBN(0xb3a4c8a1, 0x79108deb), + TOBN(0x702388de, 0xcb199ce5), TOBN(0x0b019211, 0xb944a8d4)}}, + {{TOBN(0x24f2a692, 0x840bb336), TOBN(0x7c353bdc, 0xa669fa7b), + TOBN(0xda20d6fc, 0xdec9c300), TOBN(0x625fbe2f, 0xa13a4f17)}, + {TOBN(0xa2b1b61a, 0xdbc17328), TOBN(0x008965bf, 0xa9515621), + TOBN(0x49690939, 0xc620ff46), TOBN(0x182dd27d, 0x8717e91c)}}, + {{TOBN(0x5ace5035, 0xea6c3997), TOBN(0x54259aaa, 0xc2610bef), + TOBN(0xef18bb3f, 0x3c80dd39), TOBN(0x6910b95b, 0x5fc3fa39)}, + {TOBN(0xfce2f510, 0x43e09aee), TOBN(0xced56c9f, 0xa7675665), + TOBN(0x10e265ac, 0xd872db61), TOBN(0x6982812e, 0xae9fce69)}}, + {{TOBN(0x29be11c6, 0xce800998), TOBN(0x72bb1752, 0xb90360d9), + TOBN(0x2c193197, 0x5a4ad590), TOBN(0x2ba2f548, 0x9fc1dbc0)}, + {TOBN(0x7fe4eebb, 0xe490ebe0), TOBN(0x12a0a4cd, 0x7fae11c0), + TOBN(0x7197cf81, 0xe903ba37), TOBN(0xcf7d4aa8, 0xde1c6dd8)}}, + {{TOBN(0x92af6bf4, 0x3fd5684c), TOBN(0x2b26eecf, 0x80360aa1), + TOBN(0xbd960f30, 0x00546a82), TOBN(0x407b3c43, 0xf59ad8fe)}, + {TOBN(0x86cae5fe, 0x249c82ba), TOBN(0x9e0faec7, 0x2463744c), + TOBN(0x87f551e8, 0x94916272), TOBN(0x033f9344, 0x6ceb0615)}}, + {{TOBN(0x1e5eb0d1, 0x8be82e84), TOBN(0x89967f0e, 0x7a582fef), + TOBN(0xbcf687d5, 0xa6e921fa), TOBN(0xdfee4cf3, 0xd37a09ba)}, + {TOBN(0x94f06965, 0xb493c465), TOBN(0x638b9a1c, 0x7635c030), + TOBN(0x76667864, 0x66f05e9f), TOBN(0xccaf6808, 0xc04da725)}}, + {{TOBN(0xca2eb690, 0x768fccfc), TOBN(0xf402d37d, 0xb835b362), + TOBN(0x0efac0d0, 0xe2fdfcce), TOBN(0xefc9cdef, 0xb638d990)}, + {TOBN(0x2af12b72, 0xd1669a8b), TOBN(0x33c536bc, 0x5774ccbd), + TOBN(0x30b21909, 0xfb34870e), TOBN(0xc38fa2f7, 0x7df25aca)}}, + {{TOBN(0x74c5f02b, 0xbf81f3f5), TOBN(0x0525a5ae, 0xaf7e4581), + TOBN(0x88d2aaba, 0x433c54ae), TOBN(0xed9775db, 0x806a56c5)}, + {TOBN(0xd320738a, 0xc0edb37d), TOBN(0x25fdb6ee, 0x66cc1f51), + TOBN(0xac661d17, 0x10600d76), TOBN(0x931ec1f3, 0xbdd1ed76)}}, + {{TOBN(0x65c11d62, 0x19ee43f1), TOBN(0x5cd57c3e, 0x60829d97), + TOBN(0xd26c91a3, 0x984be6e8), TOBN(0xf08d9309, 0x8b0c53bd)}, + {TOBN(0x94bc9e5b, 0xc016e4ea), TOBN(0xd3916839, 0x11d43d2b), + TOBN(0x886c5ad7, 0x73701155), TOBN(0xe0377626, 0x20b00715)}}, + {{TOBN(0x7f01c9ec, 0xaa80ba59), TOBN(0x3083411a, 0x68538e51), + TOBN(0x970370f1, 0xe88128af), TOBN(0x625cc3db, 0x91dec14b)}, + {TOBN(0xfef9666c, 0x01ac3107), TOBN(0xb2a8d577, 0xd5057ac3), + TOBN(0xb0f26299, 0x92be5df7), TOBN(0xf579c8e5, 0x00353924)}}, + {{TOBN(0xb8fa3d93, 0x1341ed7a), TOBN(0x4223272c, 0xa7b59d49), + TOBN(0x3dcb1947, 0x83b8c4a4), TOBN(0x4e413c01, 0xed1302e4)}, + {TOBN(0x6d999127, 0xe17e44ce), TOBN(0xee86bf75, 0x33b3adfb), + TOBN(0xf6902fe6, 0x25aa96ca), TOBN(0xb73540e4, 0xe5aae47d)}}, + {{TOBN(0x32801d7b, 0x1b4a158c), TOBN(0xe571c99e, 0x27e2a369), + TOBN(0x40cb76c0, 0x10d9f197), TOBN(0xc308c289, 0x3167c0ae)}, + {TOBN(0xa6ef9dd3, 0xeb7958f2), TOBN(0xa7226dfc, 0x300879b1), + TOBN(0x6cd0b362, 0x7edf0636), TOBN(0x4efbce6c, 0x7bc37eed)}}, + {{TOBN(0x75f92a05, 0x8d699021), TOBN(0x586d4c79, 0x772566e3), + TOBN(0x378ca5f1, 0x761ad23a), TOBN(0x650d86fc, 0x1465a8ac)}, + {TOBN(0x7a4ed457, 0x842ba251), TOBN(0x6b65e3e6, 0x42234933), + TOBN(0xaf1543b7, 0x31aad657), TOBN(0xa4cefe98, 0xcbfec369)}}, + {{TOBN(0xb587da90, 0x9f47befb), TOBN(0x6562e9fb, 0x41312d13), + TOBN(0xa691ea59, 0xeff1cefe), TOBN(0xcc30477a, 0x05fc4cf6)}, + {TOBN(0xa1632461, 0x0b0ffd3d), TOBN(0xa1f16f3b, 0x5b355956), + TOBN(0x5b148d53, 0x4224ec24), TOBN(0xdc834e7b, 0xf977012a)}}, + {{TOBN(0x7bfc5e75, 0xb2c69dbc), TOBN(0x3aa77a29, 0x03c3da6c), + TOBN(0xde0df03c, 0xca910271), TOBN(0xcbd5ca4a, 0x7806dc55)}, + {TOBN(0xe1ca5807, 0x6db476cb), TOBN(0xfde15d62, 0x5f37a31e), + TOBN(0xf49af520, 0xf41af416), TOBN(0x96c5c5b1, 0x7d342db5)}}, + {{TOBN(0x155c43b7, 0xeb4ceb9b), TOBN(0x2e993010, 0x4e77371a), + TOBN(0x1d2987da, 0x675d43af), TOBN(0xef2bc1c0, 0x8599fd72)}, + {TOBN(0x96894b7b, 0x9342f6b2), TOBN(0x201eadf2, 0x7c8e71f0), + TOBN(0xf3479d9f, 0x4a1f3efc), TOBN(0xe0f8a742, 0x702a9704)}}, + {{TOBN(0xeafd44b6, 0xb3eba40c), TOBN(0xf9739f29, 0xc1c1e0d0), + TOBN(0x0091471a, 0x619d505e), TOBN(0xc15f9c96, 0x9d7c263e)}, + {TOBN(0x5be47285, 0x83afbe33), TOBN(0xa3b6d6af, 0x04f1e092), + TOBN(0xe76526b9, 0x751a9d11), TOBN(0x2ec5b26d, 0x9a4ae4d2)}}, + {{TOBN(0xeb66f4d9, 0x02f6fb8d), TOBN(0x4063c561, 0x96912164), + TOBN(0xeb7050c1, 0x80ef3000), TOBN(0x288d1c33, 0xeaa5b3f0)}, + {TOBN(0xe87c68d6, 0x07806fd8), TOBN(0xb2f7f9d5, 0x4bbbf50f), + TOBN(0x25972f3a, 0xac8d6627), TOBN(0xf8547774, 0x10e8c13b)}}, + {{TOBN(0xcc50ef6c, 0x872b4a60), TOBN(0xab2a34a4, 0x4613521b), + TOBN(0x39c5c190, 0x983e15d1), TOBN(0x61dde5df, 0x59905512)}, + {TOBN(0xe417f621, 0x9f2275f3), TOBN(0x0750c8b6, 0x451d894b), + TOBN(0x75b04ab9, 0x78b0bdaa), TOBN(0x3bfd9fd4, 0x458589bd)}}, + {{TOBN(0xf1013e30, 0xee9120b6), TOBN(0x2b51af93, 0x23a4743e), + TOBN(0xea96ffae, 0x48d14d9e), TOBN(0x71dc0dbe, 0x698a1d32)}, + {TOBN(0x914962d2, 0x0180cca4), TOBN(0x1ae60677, 0xc3568963), + TOBN(0x8cf227b1, 0x437bc444), TOBN(0xc650c83b, 0xc9962c7a)}}, + {{TOBN(0x23c2c7dd, 0xfe7ccfc4), TOBN(0xf925c89d, 0x1b929d48), + TOBN(0x4460f74b, 0x06783c33), TOBN(0xac2c8d49, 0xa590475a)}, + {TOBN(0xfb40b407, 0xb807bba0), TOBN(0x9d1e362d, 0x69ff8f3a), + TOBN(0xa33e9681, 0xcbef64a4), TOBN(0x67ece5fa, 0x332fb4b2)}}, + {{TOBN(0x6900a99b, 0x739f10e3), TOBN(0xc3341ca9, 0xff525925), + TOBN(0xee18a626, 0xa9e2d041), TOBN(0xa5a83685, 0x29580ddd)}, + {TOBN(0xf3470c81, 0x9d7de3cd), TOBN(0xedf02586, 0x2062cf9c), + TOBN(0xf43522fa, 0xc010edb0), TOBN(0x30314135, 0x13a4b1ae)}}, + {{TOBN(0xc792e02a, 0xdb22b94b), TOBN(0x993d8ae9, 0xa1eaa45b), + TOBN(0x8aad6cd3, 0xcd1e1c63), TOBN(0x89529ca7, 0xc5ce688a)}, + {TOBN(0x2ccee3aa, 0xe572a253), TOBN(0xe02b6438, 0x02a21efb), + TOBN(0xa7091b6e, 0xc9430358), TOBN(0x06d1b1fa, 0x9d7db504)}}, + {{TOBN(0x58846d32, 0xc4744733), TOBN(0x40517c71, 0x379f9e34), + TOBN(0x2f65655f, 0x130ef6ca), TOBN(0x526e4488, 0xf1f3503f)}, + {TOBN(0x8467bd17, 0x7ee4a976), TOBN(0x1d9dc913, 0x921363d1), + TOBN(0xd8d24c33, 0xb069e041), TOBN(0x5eb5da0a, 0x2cdf7f51)}}, + {{TOBN(0x1c0f3cb1, 0x197b994f), TOBN(0x3c95a6c5, 0x2843eae9), + TOBN(0x7766ffc9, 0xa6097ea5), TOBN(0x7bea4093, 0xd723b867)}, + {TOBN(0xb48e1f73, 0x4db378f9), TOBN(0x70025b00, 0xe37b77ac), + TOBN(0x943dc8e7, 0xaf24ad46), TOBN(0xb98a15ac, 0x16d00a85)}}, + {{TOBN(0x3adc38ba, 0x2743b004), TOBN(0xb1c7f4f7, 0x334415ee), + TOBN(0xea43df8f, 0x1e62d05a), TOBN(0x32618905, 0x9d76a3b6)}, + {TOBN(0x2fbd0bb5, 0xa23a0f46), TOBN(0x5bc971db, 0x6a01918c), + TOBN(0x7801d94a, 0xb4743f94), TOBN(0xb94df65e, 0x676ae22b)}}, + {{TOBN(0xaafcbfab, 0xaf95894c), TOBN(0x7b9bdc07, 0x276b2241), + TOBN(0xeaf98362, 0x5bdda48b), TOBN(0x5977faf2, 0xa3fcb4df)}, + {TOBN(0xbed042ef, 0x052c4b5b), TOBN(0x9fe87f71, 0x067591f0), + TOBN(0xc89c73ca, 0x22f24ec7), TOBN(0x7d37fa9e, 0xe64a9f1b)}}, + {{TOBN(0x2710841a, 0x15562627), TOBN(0x2c01a613, 0xc243b034), + TOBN(0x1d135c56, 0x2bc68609), TOBN(0xc2ca1715, 0x8b03f1f6)}, + {TOBN(0xc9966c2d, 0x3eb81d82), TOBN(0xc02abf4a, 0x8f6df13e), + TOBN(0x77b34bd7, 0x8f72b43b), TOBN(0xaff6218f, 0x360c82b0)}}, + {{TOBN(0x0aa5726c, 0x8d55b9d2), TOBN(0xdc0adbe9, 0x99e9bffb), + TOBN(0x9097549c, 0xefb9e72a), TOBN(0x16755712, 0x9dfb3111)}, + {TOBN(0xdd8bf984, 0xf26847f9), TOBN(0xbcb8e387, 0xdfb30cb7), + TOBN(0xc1fd32a7, 0x5171ef9c), TOBN(0x977f3fc7, 0x389b363f)}}, + {{TOBN(0x116eaf2b, 0xf4babda0), TOBN(0xfeab68bd, 0xf7113c8e), + TOBN(0xd1e3f064, 0xb7def526), TOBN(0x1ac30885, 0xe0b3fa02)}, + {TOBN(0x1c5a6e7b, 0x40142d9d), TOBN(0x839b5603, 0x30921c0b), + TOBN(0x48f301fa, 0x36a116a3), TOBN(0x380e1107, 0xcfd9ee6d)}}, + {{TOBN(0x7945ead8, 0x58854be1), TOBN(0x4111c12e, 0xcbd4d49d), + TOBN(0xece3b1ec, 0x3a29c2ef), TOBN(0x6356d404, 0x8d3616f5)}, + {TOBN(0x9f0d6a8f, 0x594d320e), TOBN(0x0989316d, 0xf651ccd2), + TOBN(0x6c32117a, 0x0f8fdde4), TOBN(0x9abe5cc5, 0xa26a9bbc)}}, + {{TOBN(0xcff560fb, 0x9723f671), TOBN(0x21b2a12d, 0x7f3d593c), + TOBN(0xe4cb18da, 0x24ba0696), TOBN(0x186e2220, 0xc3543384)}, + {TOBN(0x722f64e0, 0x88312c29), TOBN(0x94282a99, 0x17dc7752), + TOBN(0x62467bbf, 0x5a85ee89), TOBN(0xf435c650, 0xf10076a0)}}, + {{TOBN(0xc9ff1539, 0x43b3a50b), TOBN(0x7132130c, 0x1a53efbc), + TOBN(0x31bfe063, 0xf7b0c5b7), TOBN(0xb0179a7d, 0x4ea994cc)}, + {TOBN(0x12d064b3, 0xc85f455b), TOBN(0x47259328, 0x8f6e0062), + TOBN(0xf64e590b, 0xb875d6d9), TOBN(0x22dd6225, 0xad92bcc7)}}, + {{TOBN(0xb658038e, 0xb9c3bd6d), TOBN(0x00cdb0d6, 0xfbba27c8), + TOBN(0x0c681337, 0x1062c45d), TOBN(0xd8515b8c, 0x2d33407d)}, + {TOBN(0xcb8f699e, 0x8cbb5ecf), TOBN(0x8c4347f8, 0xc608d7d8), + TOBN(0x2c11850a, 0xbb3e00db), TOBN(0x20a8dafd, 0xecb49d19)}}, + {{TOBN(0xbd781480, 0x45ee2f40), TOBN(0x75e354af, 0x416b60cf), + TOBN(0xde0b58a1, 0x8d49a8c4), TOBN(0xe40e94e2, 0xfa359536)}, + {TOBN(0xbd4fa59f, 0x62accd76), TOBN(0x05cf466a, 0x8c762837), + TOBN(0xb5abda99, 0x448c277b), TOBN(0x5a9e01bf, 0x48b13740)}}, + {{TOBN(0x9d457798, 0x326aad8d), TOBN(0xbdef4954, 0xc396f7e7), + TOBN(0x6fb274a2, 0xc253e292), TOBN(0x2800bf0a, 0x1cfe53e7)}, + {TOBN(0x22426d31, 0x44438fd4), TOBN(0xef233923, 0x5e259f9a), + TOBN(0x4188503c, 0x03f66264), TOBN(0x9e5e7f13, 0x7f9fdfab)}}, + {{TOBN(0x565eb76c, 0x5fcc1aba), TOBN(0xea632548, 0x59b5bff8), + TOBN(0x5587c087, 0xaab6d3fa), TOBN(0x92b639ea, 0x6ce39c1b)}, + {TOBN(0x0706e782, 0x953b135c), TOBN(0x7308912e, 0x425268ef), + TOBN(0x599e92c7, 0x090e7469), TOBN(0x83b90f52, 0x9bc35e75)}}, + {{TOBN(0x4750b3d0, 0x244975b3), TOBN(0xf3a44358, 0x11965d72), + TOBN(0x179c6774, 0x9c8dc751), TOBN(0xff18cdfe, 0xd23d9ff0)}, + {TOBN(0xc4013833, 0x2028e247), TOBN(0x96e280e2, 0xf3bfbc79), + TOBN(0xf60417bd, 0xd0880a84), TOBN(0x263c9f3d, 0x2a568151)}}, + {{TOBN(0x36be15b3, 0x2d2ce811), TOBN(0x846dc0c2, 0xf8291d21), + TOBN(0x5cfa0ecb, 0x789fcfdb), TOBN(0x45a0beed, 0xd7535b9a)}, + {TOBN(0xec8e9f07, 0x96d69af1), TOBN(0x31a7c5b8, 0x599ab6dc), + TOBN(0xd36d45ef, 0xf9e2e09f), TOBN(0x3cf49ef1, 0xdcee954b)}}, + {{TOBN(0x6be34cf3, 0x086cff9b), TOBN(0x88dbd491, 0x39a3360f), + TOBN(0x1e96b8cc, 0x0dbfbd1d), TOBN(0xc1e5f7bf, 0xcb7e2552)}, + {TOBN(0x0547b214, 0x28819d98), TOBN(0xc770dd9c, 0x7aea9dcb), + TOBN(0xaef0d4c7, 0x041d68c8), TOBN(0xcc2b9818, 0x13cb9ba8)}}, + {{TOBN(0x7fc7bc76, 0xfe86c607), TOBN(0x6b7b9337, 0x502a9a95), + TOBN(0x1948dc27, 0xd14dab63), TOBN(0x249dd198, 0xdae047be)}, + {TOBN(0xe8356584, 0xa981a202), TOBN(0x3531dd18, 0x3a893387), + TOBN(0x1be11f90, 0xc85c7209), TOBN(0x93d2fe1e, 0xe2a52b5a)}}, + {{TOBN(0x8225bfe2, 0xec6d6b97), TOBN(0x9cf6d6f4, 0xbd0aa5de), + TOBN(0x911459cb, 0x54779f5f), TOBN(0x5649cddb, 0x86aeb1f3)}, + {TOBN(0x32133579, 0x3f26ce5a), TOBN(0xc289a102, 0x550f431e), + TOBN(0x559dcfda, 0x73b84c6f), TOBN(0x84973819, 0xee3ac4d7)}}, + {{TOBN(0xb51e55e6, 0xf2606a82), TOBN(0xe25f7061, 0x90f2fb57), + TOBN(0xacef6c2a, 0xb1a4e37c), TOBN(0x864e359d, 0x5dcf2706)}, + {TOBN(0x479e6b18, 0x7ce57316), TOBN(0x2cab2500, 0x3a96b23d), + TOBN(0xed489862, 0x8ef16df7), TOBN(0x2056538c, 0xef3758b5)}}, + {{TOBN(0xa7df865e, 0xf15d3101), TOBN(0x80c5533a, 0x61b553d7), + TOBN(0x366e1997, 0x4ed14294), TOBN(0x6620741f, 0xb3c0bcd6)}, + {TOBN(0x21d1d9c4, 0xedc45418), TOBN(0x005b859e, 0xc1cc4a9d), + TOBN(0xdf01f630, 0xa1c462f0), TOBN(0x15d06cf3, 0xf26820c7)}}, + {{TOBN(0x9f7f24ee, 0x3484be47), TOBN(0x2ff33e96, 0x4a0c902f), + TOBN(0x00bdf457, 0x5a0bc453), TOBN(0x2378dfaf, 0x1aa238db)}, + {TOBN(0x272420ec, 0x856720f2), TOBN(0x2ad9d95b, 0x96797291), + TOBN(0xd1242cc6, 0x768a1558), TOBN(0x2e287f8b, 0x5cc86aa8)}}, + {{TOBN(0x796873d0, 0x990cecaa), TOBN(0xade55f81, 0x675d4080), + TOBN(0x2645eea3, 0x21f0cd84), TOBN(0x7a1efa0f, 0xb4e17d02)}, + {TOBN(0xf6858420, 0x037cc061), TOBN(0x682e05f0, 0xd5d43e12), + TOBN(0x59c36994, 0x27218710), TOBN(0x85cbba4d, 0x3f7cd2fc)}}, + {{TOBN(0x726f9729, 0x7a3cd22a), TOBN(0x9f8cd5dc, 0x4a628397), + TOBN(0x17b93ab9, 0xc23165ed), TOBN(0xff5f5dbf, 0x122823d4)}, + {TOBN(0xc1e4e4b5, 0x654a446d), TOBN(0xd1a9496f, 0x677257ba), + TOBN(0x6387ba94, 0xde766a56), TOBN(0x23608bc8, 0x521ec74a)}}, + {{TOBN(0x16a522d7, 0x6688c4d4), TOBN(0x9d6b4282, 0x07373abd), + TOBN(0xa62f07ac, 0xb42efaa3), TOBN(0xf73e00f7, 0xe3b90180)}, + {TOBN(0x36175fec, 0x49421c3e), TOBN(0xc4e44f9b, 0x3dcf2678), + TOBN(0x76df436b, 0x7220f09f), TOBN(0x172755fb, 0x3aa8b6cf)}}, + {{TOBN(0xbab89d57, 0x446139cc), TOBN(0x0a0a6e02, 0x5fe0208f), + TOBN(0xcdbb63e2, 0x11e5d399), TOBN(0x33ecaa12, 0xa8977f0b)}, + {TOBN(0x59598b21, 0xf7c42664), TOBN(0xb3e91b32, 0xab65d08a), + TOBN(0x035822ee, 0xf4502526), TOBN(0x1dcf0176, 0x720a82a9)}}, + {{TOBN(0x50f8598f, 0x3d589e02), TOBN(0xdf0478ff, 0xb1d63d2c), + TOBN(0x8b8068bd, 0x1571cd07), TOBN(0x30c3aa4f, 0xd79670cd)}, + {TOBN(0x25e8fd4b, 0x941ade7f), TOBN(0x3d1debdc, 0x32790011), + TOBN(0x65b6dcbd, 0x3a3f9ff0), TOBN(0x282736a4, 0x793de69c)}}, + {{TOBN(0xef69a0c3, 0xd41d3bd3), TOBN(0xb533b8c9, 0x07a26bde), + TOBN(0xe2801d97, 0xdb2edf9f), TOBN(0xdc4a8269, 0xe1877af0)}, + {TOBN(0x6c1c5851, 0x3d590dbe), TOBN(0x84632f6b, 0xee4e9357), + TOBN(0xd36d36b7, 0x79b33374), TOBN(0xb46833e3, 0x9bbca2e6)}}, + {{TOBN(0x37893913, 0xf7fc0586), TOBN(0x385315f7, 0x66bf4719), + TOBN(0x72c56293, 0xb31855dc), TOBN(0xd1416d4e, 0x849061fe)}, + {TOBN(0xbeb3ab78, 0x51047213), TOBN(0x447f6e61, 0xf040c996), + TOBN(0xd06d310d, 0x638b1d0c), TOBN(0xe28a413f, 0xbad1522e)}}, + {{TOBN(0x685a76cb, 0x82003f86), TOBN(0x610d07f7, 0x0bcdbca3), + TOBN(0x6ff66021, 0x9ca4c455), TOBN(0x7df39b87, 0xcea10eec)}, + {TOBN(0xb9255f96, 0xe22db218), TOBN(0x8cc6d9eb, 0x08a34c44), + TOBN(0xcd4ffb86, 0x859f9276), TOBN(0x8fa15eb2, 0x50d07335)}}, + {{TOBN(0xdf553845, 0xcf2c24b5), TOBN(0x89f66a9f, 0x52f9c3ba), + TOBN(0x8f22b5b9, 0xe4a7ceb3), TOBN(0xaffef809, 0x0e134686)}, + {TOBN(0x3e53e1c6, 0x8eb8fac2), TOBN(0x93c1e4eb, 0x28aec98e), + TOBN(0xb6b91ec5, 0x32a43bcb), TOBN(0x2dbfa947, 0xb2d74a51)}}, + {{TOBN(0xe065d190, 0xca84bad7), TOBN(0xfb13919f, 0xad58e65c), + TOBN(0x3c41718b, 0xf1cb6e31), TOBN(0x688969f0, 0x06d05c3f)}, + {TOBN(0xd4f94ce7, 0x21264d45), TOBN(0xfdfb65e9, 0x7367532b), + TOBN(0x5b1be8b1, 0x0945a39d), TOBN(0x229f789c, 0x2b8baf3b)}}, + {{TOBN(0xd8f41f3e, 0x6f49f15d), TOBN(0x678ce828, 0x907f0792), + TOBN(0xc69ace82, 0xfca6e867), TOBN(0x106451ae, 0xd01dcc89)}, + {TOBN(0x1bb4f7f0, 0x19fc32d2), TOBN(0x64633dfc, 0xb00c52d2), + TOBN(0x8f13549a, 0xad9ea445), TOBN(0x99a3bf50, 0xfb323705)}}, + {{TOBN(0x0c9625a2, 0x534d4dbc), TOBN(0x45b8f1d1, 0xc2a2fea3), + TOBN(0x76ec21a1, 0xa530fc1a), TOBN(0x4bac9c2a, 0x9e5bd734)}, + {TOBN(0x5996d76a, 0x7b4e3587), TOBN(0x0045cdee, 0x1182d9e3), + TOBN(0x1aee24b9, 0x1207f13d), TOBN(0x66452e97, 0x97345a41)}}, + {{TOBN(0x16e5b054, 0x9f950cd0), TOBN(0x9cc72fb1, 0xd7fdd075), + TOBN(0x6edd61e7, 0x66249663), TOBN(0xde4caa4d, 0xf043cccb)}, + {TOBN(0x11b1f57a, 0x55c7ac17), TOBN(0x779cbd44, 0x1a85e24d), + TOBN(0x78030f86, 0xe46081e7), TOBN(0xfd4a6032, 0x8e20f643)}}, + {{TOBN(0xcc7a6488, 0x0a750c0f), TOBN(0x39bacfe3, 0x4e548e83), + TOBN(0x3d418c76, 0x0c110f05), TOBN(0x3e4daa4c, 0xb1f11588)}, + {TOBN(0x2733e7b5, 0x5ffc69ff), TOBN(0x46f147bc, 0x92053127), + TOBN(0x885b2434, 0xd722df94), TOBN(0x6a444f65, 0xe6fc6b7c)}}}, + {{{TOBN(0x7a1a465a, 0xc3f16ea8), TOBN(0x115a461d, 0xb2f1d11c), + TOBN(0x4767dd95, 0x6c68a172), TOBN(0x3392f2eb, 0xd13a4698)}, + {TOBN(0xc7a99ccd, 0xe526cdc7), TOBN(0x8e537fdc, 0x22292b81), + TOBN(0x76d8cf69, 0xa6d39198), TOBN(0xffc5ff43, 0x2446852d)}}, + {{TOBN(0x97b14f7e, 0xa90567e6), TOBN(0x513257b7, 0xb6ae5cb7), + TOBN(0x85454a3c, 0x9f10903d), TOBN(0xd8d2c9ad, 0x69bc3724)}, + {TOBN(0x38da9324, 0x6b29cb44), TOBN(0xb540a21d, 0x77c8cbac), + TOBN(0x9bbfe435, 0x01918e42), TOBN(0xfffa707a, 0x56c3614e)}}, + {{TOBN(0x0ce4e3f1, 0xd4e353b7), TOBN(0x062d8a14, 0xef46b0a0), + TOBN(0x6408d5ab, 0x574b73fd), TOBN(0xbc41d1c9, 0xd3273ffd)}, + {TOBN(0x3538e1e7, 0x6be77800), TOBN(0x71fe8b37, 0xc5655031), + TOBN(0x1cd91621, 0x6b9b331a), TOBN(0xad825d0b, 0xbb388f73)}}, + {{TOBN(0x56c2e05b, 0x1cb76219), TOBN(0x0ec0bf91, 0x71567e7e), + TOBN(0xe7076f86, 0x61c4c910), TOBN(0xd67b085b, 0xbabc04d9)}, + {TOBN(0x9fb90459, 0x5e93a96a), TOBN(0x7526c1ea, 0xfbdc249a), + TOBN(0x0d44d367, 0xecdd0bb7), TOBN(0x95399917, 0x9dc0d695)}}, + {{TOBN(0x61360ee9, 0x9e240d18), TOBN(0x057cdcac, 0xb4b94466), + TOBN(0xe7667cd1, 0x2fe5325c), TOBN(0x1fa297b5, 0x21974e3b)}, + {TOBN(0xfa4081e7, 0xdb083d76), TOBN(0x31993be6, 0xf206bd15), + TOBN(0x8949269b, 0x14c19f8c), TOBN(0x21468d72, 0xa9d92357)}}, + {{TOBN(0x2ccbc583, 0xa4c506ec), TOBN(0x957ed188, 0xd1acfe97), + TOBN(0x8baed833, 0x12f1aea2), TOBN(0xef2a6cb4, 0x8325362d)}, + {TOBN(0x130dde42, 0x8e195c43), TOBN(0xc842025a, 0x0e6050c6), + TOBN(0x2da972a7, 0x08686a5d), TOBN(0xb52999a1, 0xe508b4a8)}}, + {{TOBN(0xd9f090b9, 0x10a5a8bd), TOBN(0xca91d249, 0x096864da), + TOBN(0x8e6a93be, 0x3f67dbc1), TOBN(0xacae6fba, 0xf5f4764c)}, + {TOBN(0x1563c6e0, 0xd21411a0), TOBN(0x28fa787f, 0xda0a4ad8), + TOBN(0xd524491c, 0x908c8030), TOBN(0x1257ba0e, 0x4c795f07)}}, + {{TOBN(0x83f49167, 0xceca9754), TOBN(0x426d2cf6, 0x4b7939a0), + TOBN(0x2555e355, 0x723fd0bf), TOBN(0xa96e6d06, 0xc4f144e2)}, + {TOBN(0x4768a8dd, 0x87880e61), TOBN(0x15543815, 0xe508e4d5), + TOBN(0x09d7e772, 0xb1b65e15), TOBN(0x63439dd6, 0xac302fa0)}}, + {{TOBN(0xb93f802f, 0xc14e35c2), TOBN(0x71735b7c, 0x4341333c), + TOBN(0x03a25104, 0x16d4f362), TOBN(0x3f4d069b, 0xbf433c8e)}, + {TOBN(0x0d83ae01, 0xf78f5a7c), TOBN(0x50a8ffbe, 0x7c4eed07), + TOBN(0xc74f8906, 0x76e10f83), TOBN(0x7d080966, 0x9ddaf8e1)}}, + {{TOBN(0xb11df8e1, 0x698e04cc), TOBN(0x877be203, 0x169005c8), + TOBN(0x32749e8c, 0x4f3c6179), TOBN(0x2dbc9d0a, 0x7853fc05)}, + {TOBN(0x187d4f93, 0x9454d937), TOBN(0xe682ce9d, 0xb4800e1b), + TOBN(0xa9129ad8, 0x165e68e8), TOBN(0x0fe29735, 0xbe7f785b)}}, + {{TOBN(0x5303f40c, 0x5b9e02b7), TOBN(0xa37c9692, 0x35ee04e8), + TOBN(0x5f46cc20, 0x34d6632b), TOBN(0x55ef72b2, 0x96ac545b)}, + {TOBN(0xabec5c1f, 0x7b91b062), TOBN(0x0a79e1c7, 0xbb33e821), + TOBN(0xbb04b428, 0x3a9f4117), TOBN(0x0de1f28f, 0xfd2a475a)}}, + {{TOBN(0x31019ccf, 0x3a4434b4), TOBN(0xa3458111, 0x1a7954dc), + TOBN(0xa9dac80d, 0xe34972a7), TOBN(0xb043d054, 0x74f6b8dd)}, + {TOBN(0x021c319e, 0x11137b1a), TOBN(0x00a754ce, 0xed5cc03f), + TOBN(0x0aa2c794, 0xcbea5ad4), TOBN(0x093e67f4, 0x70c015b6)}}, + {{TOBN(0x72cdfee9, 0xc97e3f6b), TOBN(0xc10bcab4, 0xb6da7461), + TOBN(0x3b02d2fc, 0xb59806b9), TOBN(0x85185e89, 0xa1de6f47)}, + {TOBN(0x39e6931f, 0x0eb6c4d4), TOBN(0x4d4440bd, 0xd4fa5b04), + TOBN(0x5418786e, 0x34be7eb8), TOBN(0x6380e521, 0x9d7259bc)}}, + {{TOBN(0x20ac0351, 0xd598d710), TOBN(0x272c4166, 0xcb3a4da4), + TOBN(0xdb82fe1a, 0xca71de1f), TOBN(0x746e79f2, 0xd8f54b0f)}, + {TOBN(0x6e7fc736, 0x4b573e9b), TOBN(0x75d03f46, 0xfd4b5040), + TOBN(0x5c1cc36d, 0x0b98d87b), TOBN(0x513ba3f1, 0x1f472da1)}}, + {{TOBN(0x79d0af26, 0xabb177dd), TOBN(0xf82ab568, 0x7891d564), + TOBN(0x2b6768a9, 0x72232173), TOBN(0xefbb3bb0, 0x8c1f6619)}, + {TOBN(0xb29c11db, 0xa6d18358), TOBN(0x519e2797, 0xb0916d3a), + TOBN(0xd4dc18f0, 0x9188e290), TOBN(0x648e86e3, 0x98b0ca7f)}}, + {{TOBN(0x859d3145, 0x983c38b5), TOBN(0xb14f176c, 0x637abc8b), + TOBN(0x2793fb9d, 0xcaff7be6), TOBN(0xebe5a55f, 0x35a66a5a)}, + {TOBN(0x7cec1dcd, 0x9f87dc59), TOBN(0x7c595cd3, 0xfbdbf560), + TOBN(0x5b543b22, 0x26eb3257), TOBN(0x69080646, 0xc4c935fd)}}, + {{TOBN(0x7f2e4403, 0x81e9ede3), TOBN(0x243c3894, 0xcaf6df0a), + TOBN(0x7c605bb1, 0x1c073b11), TOBN(0xcd06a541, 0xba6a4a62)}, + {TOBN(0x29168949, 0x49d4e2e5), TOBN(0x33649d07, 0x4af66880), + TOBN(0xbfc0c885, 0xe9a85035), TOBN(0xb4e52113, 0xfc410f4b)}}, + {{TOBN(0xdca3b706, 0x78a6513b), TOBN(0x92ea4a2a, 0x9edb1943), + TOBN(0x02642216, 0xdb6e2dd8), TOBN(0x9b45d0b4, 0x9fd57894)}, + {TOBN(0x114e70db, 0xc69d11ae), TOBN(0x1477dd19, 0x4c57595f), + TOBN(0xbc2208b4, 0xec77c272), TOBN(0x95c5b4d7, 0xdb68f59c)}}, + {{TOBN(0xb8c4fc63, 0x42e532b7), TOBN(0x386ba422, 0x9ae35290), + TOBN(0xfb5dda42, 0xd201ecbc), TOBN(0x2353dc8b, 0xa0e38fd6)}, + {TOBN(0x9a0b85ea, 0x68f7e978), TOBN(0x96ec5682, 0x2ad6d11f), + TOBN(0x5e279d6c, 0xe5f6886d), TOBN(0xd3fe03cd, 0x3cb1914d)}}, + {{TOBN(0xfe541fa4, 0x7ea67c77), TOBN(0x952bd2af, 0xe3ea810c), + TOBN(0x791fef56, 0x8d01d374), TOBN(0xa3a1c621, 0x0f11336e)}, + {TOBN(0x5ad0d5a9, 0xc7ec6d79), TOBN(0xff7038af, 0x3225c342), + TOBN(0x003c6689, 0xbc69601b), TOBN(0x25059bc7, 0x45e8747d)}}, + {{TOBN(0xfa4965b2, 0xf2086fbf), TOBN(0xf6840ea6, 0x86916078), + TOBN(0xd7ac7620, 0x70081d6c), TOBN(0xe600da31, 0xb5328645)}, + {TOBN(0x01916f63, 0x529b8a80), TOBN(0xe80e4858, 0x2d7d6f3e), + TOBN(0x29eb0fe8, 0xd664ca7c), TOBN(0xf017637b, 0xe7b43b0c)}}, + {{TOBN(0x9a75c806, 0x76cb2566), TOBN(0x8f76acb1, 0xb24892d9), + TOBN(0x7ae7b9cc, 0x1f08fe45), TOBN(0x19ef7329, 0x6a4907d8)}, + {TOBN(0x2db4ab71, 0x5f228bf0), TOBN(0xf3cdea39, 0x817032d7), + TOBN(0x0b1f482e, 0xdcabe3c0), TOBN(0x3baf76b4, 0xbb86325c)}}, + {{TOBN(0xd49065e0, 0x10089465), TOBN(0x3bab5d29, 0x8e77c596), + TOBN(0x7636c3a6, 0x193dbd95), TOBN(0xdef5d294, 0xb246e499)}, + {TOBN(0xb22c58b9, 0x286b2475), TOBN(0xa0b93939, 0xcd80862b), + TOBN(0x3002c83a, 0xf0992388), TOBN(0x6de01f9b, 0xeacbe14c)}}, + {{TOBN(0x6aac688e, 0xadd70482), TOBN(0x708de92a, 0x7b4a4e8a), + TOBN(0x75b6dd73, 0x758a6eef), TOBN(0xea4bf352, 0x725b3c43)}, + {TOBN(0x10041f2c, 0x87912868), TOBN(0xb1b1be95, 0xef09297a), + TOBN(0x19ae23c5, 0xa9f3860a), TOBN(0xc4f0f839, 0x515dcf4b)}}, + {{TOBN(0x3c7ecca3, 0x97f6306a), TOBN(0x744c44ae, 0x68a3a4b0), + TOBN(0x69cd13a0, 0xb3a1d8a2), TOBN(0x7cad0a1e, 0x5256b578)}, + {TOBN(0xea653fcd, 0x33791d9e), TOBN(0x9cc2a05d, 0x74b2e05f), + TOBN(0x73b391dc, 0xfd7affa2), TOBN(0xddb7091e, 0xb6b05442)}}, + {{TOBN(0xc71e27bf, 0x8538a5c6), TOBN(0x195c63dd, 0x89abff17), + TOBN(0xfd315285, 0x1b71e3da), TOBN(0x9cbdfda7, 0xfa680fa0)}, + {TOBN(0x9db876ca, 0x849d7eab), TOBN(0xebe2764b, 0x3c273271), + TOBN(0x663357e3, 0xf208dcea), TOBN(0x8c5bd833, 0x565b1b70)}}, + {{TOBN(0xccc3b4f5, 0x9837fc0d), TOBN(0x9b641ba8, 0xa79cf00f), + TOBN(0x7428243d, 0xdfdf3990), TOBN(0x83a594c4, 0x020786b1)}, + {TOBN(0xb712451a, 0x526c4502), TOBN(0x9d39438e, 0x6adb3f93), + TOBN(0xfdb261e3, 0xe9ff0ccd), TOBN(0x80344e3c, 0xe07af4c3)}}, + {{TOBN(0x75900d7c, 0x2fa4f126), TOBN(0x08a3b865, 0x5c99a232), + TOBN(0x2478b6bf, 0xdb25e0c3), TOBN(0x482cc2c2, 0x71db2edf)}, + {TOBN(0x37df7e64, 0x5f321bb8), TOBN(0x8a93821b, 0x9a8005b4), + TOBN(0x3fa2f10c, 0xcc8c1958), TOBN(0x0d332218, 0x2c269d0a)}}, + {{TOBN(0x20ab8119, 0xe246b0e6), TOBN(0xb39781e4, 0xd349fd17), + TOBN(0xd293231e, 0xb31aa100), TOBN(0x4b779c97, 0xbb032168)}, + {TOBN(0x4b3f19e1, 0xc8470500), TOBN(0x45b7efe9, 0x0c4c869d), + TOBN(0xdb84f38a, 0xa1a6bbcc), TOBN(0x3b59cb15, 0xb2fddbc1)}}, + {{TOBN(0xba5514df, 0x3fd165e8), TOBN(0x499fd6a9, 0x061f8811), + TOBN(0x72cd1fe0, 0xbfef9f00), TOBN(0x120a4bb9, 0x79ad7e8a)}, + {TOBN(0xf2ffd095, 0x5f4a5ac5), TOBN(0xcfd174f1, 0x95a7a2f0), + TOBN(0xd42301ba, 0x9d17baf1), TOBN(0xd2fa487a, 0x77f22089)}}, + {{TOBN(0x9cb09efe, 0xb1dc77e1), TOBN(0xe9566939, 0x21c99682), + TOBN(0x8c546901, 0x6c6067bb), TOBN(0xfd378574, 0x61c24456)}, + {TOBN(0x2b6a6cbe, 0x81796b33), TOBN(0x62d550f6, 0x58e87f8b), + TOBN(0x1b763e1c, 0x7f1b01b4), TOBN(0x4b93cfea, 0x1b1b5e12)}}, + {{TOBN(0xb9345238, 0x1d531696), TOBN(0x57201c00, 0x88cdde69), + TOBN(0xdde92251, 0x9a86afc7), TOBN(0xe3043895, 0xbd35cea8)}, + {TOBN(0x7608c1e1, 0x8555970d), TOBN(0x8267dfa9, 0x2535935e), + TOBN(0xd4c60a57, 0x322ea38b), TOBN(0xe0bf7977, 0x804ef8b5)}}, + {{TOBN(0x1a0dab28, 0xc06fece4), TOBN(0xd405991e, 0x94e7b49d), + TOBN(0xc542b6d2, 0x706dab28), TOBN(0xcb228da3, 0xa91618fb)}, + {TOBN(0x224e4164, 0x107d1cea), TOBN(0xeb9fdab3, 0xd0f5d8f1), + TOBN(0xc02ba386, 0x0d6e41cd), TOBN(0x676a72c5, 0x9b1f7146)}}, + {{TOBN(0xffd6dd98, 0x4d6cb00b), TOBN(0xcef9c5ca, 0xde2e8d7c), + TOBN(0xa1bbf5d7, 0x641c7936), TOBN(0x1b95b230, 0xee8f772e)}, + {TOBN(0xf765a92e, 0xe8ac25b1), TOBN(0xceb04cfc, 0x3a18b7c6), + TOBN(0x27944cef, 0x0acc8966), TOBN(0xcbb3c957, 0x434c1004)}}, + {{TOBN(0x9c9971a1, 0xa43ff93c), TOBN(0x5bc2db17, 0xa1e358a9), + TOBN(0x45b4862e, 0xa8d9bc82), TOBN(0x70ebfbfb, 0x2201e052)}, + {TOBN(0xafdf64c7, 0x92871591), TOBN(0xea5bcae6, 0xb42d0219), + TOBN(0xde536c55, 0x2ad8f03c), TOBN(0xcd6c3f4d, 0xa76aa33c)}}, + {{TOBN(0xbeb5f623, 0x0bca6de3), TOBN(0xdd20dd99, 0xb1e706fd), + TOBN(0x90b3ff9d, 0xac9059d4), TOBN(0x2d7b2902, 0x7ccccc4e)}, + {TOBN(0x8a090a59, 0xce98840f), TOBN(0xa5d947e0, 0x8410680a), + TOBN(0x49ae346a, 0x923379a5), TOBN(0x7dbc84f9, 0xb28a3156)}}, + {{TOBN(0xfd40d916, 0x54a1aff2), TOBN(0xabf318ba, 0x3a78fb9b), + TOBN(0x50152ed8, 0x3029f95e), TOBN(0x9fc1dd77, 0xc58ad7fa)}, + {TOBN(0x5fa57915, 0x13595c17), TOBN(0xb9504668, 0x8f62b3a9), + TOBN(0x907b5b24, 0xff3055b0), TOBN(0x2e995e35, 0x9a84f125)}}, + {{TOBN(0x87dacf69, 0x7e9bbcfb), TOBN(0x95d0c1d6, 0xe86d96e3), + TOBN(0x65726e3c, 0x2d95a75c), TOBN(0x2c3c9001, 0xacd27f21)}, + {TOBN(0x1deab561, 0x6c973f57), TOBN(0x108b7e2c, 0xa5221643), + TOBN(0x5fee9859, 0xc4ef79d4), TOBN(0xbd62b88a, 0x40d4b8c6)}}, + {{TOBN(0xb4dd29c4, 0x197c75d6), TOBN(0x266a6df2, 0xb7076feb), + TOBN(0x9512d0ea, 0x4bf2df11), TOBN(0x1320c24f, 0x6b0cc9ec)}, + {TOBN(0x6bb1e0e1, 0x01a59596), TOBN(0x8317c5bb, 0xeff9aaac), + TOBN(0x65bb405e, 0x385aa6c9), TOBN(0x613439c1, 0x8f07988f)}}, + {{TOBN(0xd730049f, 0x16a66e91), TOBN(0xe97f2820, 0xfa1b0e0d), + TOBN(0x4131e003, 0x304c28ea), TOBN(0x820ab732, 0x526bac62)}, + {TOBN(0xb2ac9ef9, 0x28714423), TOBN(0x54ecfffa, 0xadb10cb2), + TOBN(0x8781476e, 0xf886a4cc), TOBN(0x4b2c87b5, 0xdb2f8d49)}}, + {{TOBN(0xe857cd20, 0x0a44295d), TOBN(0x707d7d21, 0x58c6b044), + TOBN(0xae8521f9, 0xf596757c), TOBN(0x87448f03, 0x67b2b714)}, + {TOBN(0x13a9bc45, 0x5ebcd58d), TOBN(0x79bcced9, 0x9122d3c1), + TOBN(0x3c644247, 0x9e076642), TOBN(0x0cf22778, 0x2df4767d)}}, + {{TOBN(0x5e61aee4, 0x71d444b6), TOBN(0x211236bf, 0xc5084a1d), + TOBN(0x7e15bc9a, 0x4fd3eaf6), TOBN(0x68df2c34, 0xab622bf5)}, + {TOBN(0x9e674f0f, 0x59bf4f36), TOBN(0xf883669b, 0xd7f34d73), + TOBN(0xc48ac1b8, 0x31497b1d), TOBN(0x323b925d, 0x5106703b)}}, + {{TOBN(0x22156f42, 0x74082008), TOBN(0xeffc521a, 0xc8482bcb), + TOBN(0x5c6831bf, 0x12173479), TOBN(0xcaa2528f, 0xc4739490)}, + {TOBN(0x84d2102a, 0x8f1b3c4d), TOBN(0xcf64dfc1, 0x2d9bec0d), + TOBN(0x433febad, 0x78a546ef), TOBN(0x1f621ec3, 0x7b73cef1)}}, + {{TOBN(0x6aecd627, 0x37338615), TOBN(0x162082ab, 0x01d8edf6), + TOBN(0x833a8119, 0x19e86b66), TOBN(0x6023a251, 0xd299b5db)}, + {TOBN(0xf5bb0c3a, 0xbbf04b89), TOBN(0x6735eb69, 0xae749a44), + TOBN(0xd0e058c5, 0x4713de3b), TOBN(0xfdf2593e, 0x2c3d4ccd)}}, + {{TOBN(0x1b8f414e, 0xfdd23667), TOBN(0xdd52aaca, 0xfa2015ee), + TOBN(0x3e31b517, 0xbd9625ff), TOBN(0x5ec9322d, 0x8db5918c)}, + {TOBN(0xbc73ac85, 0xa96f5294), TOBN(0x82aa5bf3, 0x61a0666a), + TOBN(0x49755810, 0xbf08ac42), TOBN(0xd21cdfd5, 0x891cedfc)}}, + {{TOBN(0x918cb57b, 0x67f8be10), TOBN(0x365d1a7c, 0x56ffa726), + TOBN(0x2435c504, 0x6532de93), TOBN(0xc0fc5e10, 0x2674cd02)}, + {TOBN(0x6e51fcf8, 0x9cbbb142), TOBN(0x1d436e5a, 0xafc50692), + TOBN(0x766bffff, 0x3fbcae22), TOBN(0x3148c2fd, 0xfd55d3b8)}}, + {{TOBN(0x52c7fdc9, 0x233222fa), TOBN(0x89ff1092, 0xe419fb6b), + TOBN(0x3cd6db99, 0x25254977), TOBN(0x2e85a161, 0x1cf12ca7)}, + {TOBN(0xadd2547c, 0xdc810bc9), TOBN(0xea3f458f, 0x9d257c22), + TOBN(0x642c1fbe, 0x27d6b19b), TOBN(0xed07e6b5, 0x140481a6)}}, + {{TOBN(0x6ada1d42, 0x86d2e0f8), TOBN(0xe5920122, 0x0e8a9fd5), + TOBN(0x02c936af, 0x708c1b49), TOBN(0x60f30fee, 0x2b4bfaff)}, + {TOBN(0x6637ad06, 0x858e6a61), TOBN(0xce4c7767, 0x3fd374d0), + TOBN(0x39d54b2d, 0x7188defb), TOBN(0xa8c9d250, 0xf56a6b66)}}, + {{TOBN(0x58fc0f5e, 0xb24fe1dc), TOBN(0x9eaf9dee, 0x6b73f24c), + TOBN(0xa90d588b, 0x33650705), TOBN(0xde5b62c5, 0xaf2ec729)}, + {TOBN(0x5c72cfae, 0xd3c2b36e), TOBN(0x868c19d5, 0x034435da), + TOBN(0x88605f93, 0xe17ee145), TOBN(0xaa60c4ee, 0x77a5d5b1)}}, + {{TOBN(0xbcf5bfd2, 0x3b60c472), TOBN(0xaf4ef13c, 0xeb1d3049), + TOBN(0x373f44fc, 0xe13895c9), TOBN(0xf29b382f, 0x0cbc9822)}, + {TOBN(0x1bfcb853, 0x73efaef6), TOBN(0xcf56ac9c, 0xa8c96f40), + TOBN(0xd7adf109, 0x7a191e24), TOBN(0x98035f44, 0xbf8a8dc2)}}, + {{TOBN(0xf40a71b9, 0x1e750c84), TOBN(0xc57f7b0c, 0x5dc6c469), + TOBN(0x49a0e79c, 0x6fbc19c1), TOBN(0x6b0f5889, 0xa48ebdb8)}, + {TOBN(0x5d3fd084, 0xa07c4e9f), TOBN(0xc3830111, 0xab27de14), + TOBN(0x0e4929fe, 0x33e08dcc), TOBN(0xf4a5ad24, 0x40bb73a3)}}, + {{TOBN(0xde86c2bf, 0x490f97ca), TOBN(0x288f09c6, 0x67a1ce18), + TOBN(0x364bb886, 0x1844478d), TOBN(0x7840fa42, 0xceedb040)}, + {TOBN(0x1269fdd2, 0x5a631b37), TOBN(0x94761f1e, 0xa47c8b7d), + TOBN(0xfc0c2e17, 0x481c6266), TOBN(0x85e16ea2, 0x3daa5fa7)}}, + {{TOBN(0xccd86033, 0x92491048), TOBN(0x0c2f6963, 0xf4d402d7), + TOBN(0x6336f7df, 0xdf6a865c), TOBN(0x0a2a463c, 0xb5c02a87)}, + {TOBN(0xb0e29be7, 0xbf2f12ee), TOBN(0xf0a22002, 0x66bad988), + TOBN(0x27f87e03, 0x9123c1d7), TOBN(0x21669c55, 0x328a8c98)}}, + {{TOBN(0x186b9803, 0x92f14529), TOBN(0xd3d056cc, 0x63954df3), + TOBN(0x2f03fd58, 0x175a46f6), TOBN(0x63e34ebe, 0x11558558)}, + {TOBN(0xe13fedee, 0x5b80cfa5), TOBN(0xe872a120, 0xd401dbd1), + TOBN(0x52657616, 0xe8a9d667), TOBN(0xbc8da4b6, 0xe08d6693)}}, + {{TOBN(0x370fb9bb, 0x1b703e75), TOBN(0x6773b186, 0xd4338363), + TOBN(0x18dad378, 0xecef7bff), TOBN(0xaac787ed, 0x995677da)}, + {TOBN(0x4801ea8b, 0x0437164b), TOBN(0xf430ad20, 0x73fe795e), + TOBN(0xb164154d, 0x8ee5eb73), TOBN(0x0884ecd8, 0x108f7c0e)}}, + {{TOBN(0x0e6ec096, 0x5f520698), TOBN(0x640631fe, 0x44f7b8d9), + TOBN(0x92fd34fc, 0xa35a68b9), TOBN(0x9c5a4b66, 0x4d40cf4e)}, + {TOBN(0x949454bf, 0x80b6783d), TOBN(0x80e701fe, 0x3a320a10), + TOBN(0x8d1a564a, 0x1a0a39b2), TOBN(0x1436d53d, 0x320587db)}}, + {{TOBN(0xf5096e6d, 0x6556c362), TOBN(0xbc23a3c0, 0xe2455d7e), + TOBN(0x3a7aee54, 0x807230f9), TOBN(0x9ba1cfa6, 0x22ae82fd)}, + {TOBN(0x833a057a, 0x99c5d706), TOBN(0x8be85f4b, 0x842315c9), + TOBN(0xd083179a, 0x66a72f12), TOBN(0x2fc77d5d, 0xcdcc73cd)}}, + {{TOBN(0x22b88a80, 0x5616ee30), TOBN(0xfb09548f, 0xe7ab1083), + TOBN(0x8ad6ab0d, 0x511270cd), TOBN(0x61f6c57a, 0x6924d9ab)}, + {TOBN(0xa0f7bf72, 0x90aecb08), TOBN(0x849f87c9, 0x0df784a4), + TOBN(0x27c79c15, 0xcfaf1d03), TOBN(0xbbf9f675, 0xc463face)}}, + {{TOBN(0x91502c65, 0x765ba543), TOBN(0x18ce3cac, 0x42ea60dd), + TOBN(0xe5cee6ac, 0x6e43ecb3), TOBN(0x63e4e910, 0x68f2aeeb)}, + {TOBN(0x26234fa3, 0xc85932ee), TOBN(0x96883e8b, 0x4c90c44d), + TOBN(0x29b9e738, 0xa18a50f6), TOBN(0xbfc62b2a, 0x3f0420df)}}, + {{TOBN(0xd22a7d90, 0x6d3e1fa9), TOBN(0x17115618, 0xfe05b8a3), + TOBN(0x2a0c9926, 0xbb2b9c01), TOBN(0xc739fcc6, 0xe07e76a2)}, + {TOBN(0x540e9157, 0x165e439a), TOBN(0x06353a62, 0x6a9063d8), + TOBN(0x84d95594, 0x61e927a3), TOBN(0x013b9b26, 0xe2e0be7f)}}, + {{TOBN(0x4feaec3b, 0x973497f1), TOBN(0x15c0f94e, 0x093ebc2d), + TOBN(0x6af5f227, 0x33af0583), TOBN(0x0c2af206, 0xc61f3340)}, + {TOBN(0xd25dbdf1, 0x4457397c), TOBN(0x2e8ed017, 0xcabcbae0), + TOBN(0xe3010938, 0xc2815306), TOBN(0xbaa99337, 0xe8c6cd68)}}, + {{TOBN(0x08513182, 0x3b0ec7de), TOBN(0x1e1b822b, 0x58df05df), + TOBN(0x5c14842f, 0xa5c3b683), TOBN(0x98fe977e, 0x3eba34ce)}, + {TOBN(0xfd2316c2, 0x0d5e8873), TOBN(0xe48d839a, 0xbd0d427d), + TOBN(0x495b2218, 0x623fc961), TOBN(0x24ee56e7, 0xb46fba5e)}}, + {{TOBN(0x9184a55b, 0x91e4de58), TOBN(0xa7488ca5, 0xdfdea288), + TOBN(0xa723862e, 0xa8dcc943), TOBN(0x92d762b2, 0x849dc0fc)}, + {TOBN(0x3c444a12, 0x091ff4a9), TOBN(0x581113fa, 0x0cada274), + TOBN(0xb9de0a45, 0x30d8eae2), TOBN(0x5e0fcd85, 0xdf6b41ea)}}, + {{TOBN(0x6233ea68, 0xc094dbb5), TOBN(0xb77d062e, 0xd968d410), + TOBN(0x3e719bbc, 0x58b3002d), TOBN(0x68e7dd3d, 0x3dc49d58)}, + {TOBN(0x8d825740, 0x013a5e58), TOBN(0x21311747, 0x3c9e3c1b), + TOBN(0x0cb0a2a7, 0x7c99b6ab), TOBN(0x5c48a3b3, 0xc2f888f2)}}}, + {{{TOBN(0xc7913e91, 0x991724f3), TOBN(0x5eda799c, 0x39cbd686), + TOBN(0xddb595c7, 0x63d4fc1e), TOBN(0x6b63b80b, 0xac4fed54)}, + {TOBN(0x6ea0fc69, 0x7e5fb516), TOBN(0x737708ba, 0xd0f1c964), + TOBN(0x9628745f, 0x11a92ca5), TOBN(0x61f37958, 0x9a86967a)}}, + {{TOBN(0x9af39b2c, 0xaa665072), TOBN(0x78322fa4, 0xefd324ef), + TOBN(0x3d153394, 0xc327bd31), TOBN(0x81d5f271, 0x3129dab0)}, + {TOBN(0xc72e0c42, 0xf48027f5), TOBN(0xaa40cdbc, 0x8536e717), + TOBN(0xf45a657a, 0x2d369d0f), TOBN(0xb03bbfc4, 0xea7f74e6)}}, + {{TOBN(0x46a8c418, 0x0d738ded), TOBN(0x6f1a5bb0, 0xe0de5729), + TOBN(0xf10230b9, 0x8ba81675), TOBN(0x32c6f30c, 0x112b33d4)}, + {TOBN(0x7559129d, 0xd8fffb62), TOBN(0x6a281b47, 0xb459bf05), + TOBN(0x77c1bd3a, 0xfa3b6776), TOBN(0x0709b380, 0x7829973a)}}, + {{TOBN(0x8c26b232, 0xa3326505), TOBN(0x38d69272, 0xee1d41bf), + TOBN(0x0459453e, 0xffe32afa), TOBN(0xce8143ad, 0x7cb3ea87)}, + {TOBN(0x932ec1fa, 0x7e6ab666), TOBN(0x6cd2d230, 0x22286264), + TOBN(0x459a46fe, 0x6736f8ed), TOBN(0x50bf0d00, 0x9eca85bb)}}, + {{TOBN(0x0b825852, 0x877a21ec), TOBN(0x300414a7, 0x0f537a94), + TOBN(0x3f1cba40, 0x21a9a6a2), TOBN(0x50824eee, 0x76943c00)}, + {TOBN(0xa0dbfcec, 0xf83cba5d), TOBN(0xf9538148, 0x93b4f3c0), + TOBN(0x61744162, 0x48f24dd7), TOBN(0x5322d64d, 0xe4fb09dd)}}, + {{TOBN(0x57447384, 0x3d9325f3), TOBN(0xa9bef2d0, 0xf371cb84), + TOBN(0x77d2188b, 0xa61e36c5), TOBN(0xbbd6a7d7, 0xc602df72)}, + {TOBN(0xba3aa902, 0x8f61bc0b), TOBN(0xf49085ed, 0x6ed0b6a1), + TOBN(0x8bc625d6, 0xae6e8298), TOBN(0x832b0b1d, 0xa2e9c01d)}}, + {{TOBN(0xa337c447, 0xf1f0ced1), TOBN(0x800cc793, 0x9492dd2b), + TOBN(0x4b93151d, 0xbea08efa), TOBN(0x820cf3f8, 0xde0a741e)}, + {TOBN(0xff1982dc, 0x1c0f7d13), TOBN(0xef921960, 0x84dde6ca), + TOBN(0x1ad7d972, 0x45f96ee3), TOBN(0x319c8dbe, 0x29dea0c7)}}, + {{TOBN(0xd3ea3871, 0x7b82b99b), TOBN(0x75922d4d, 0x470eb624), + TOBN(0x8f66ec54, 0x3b95d466), TOBN(0x66e673cc, 0xbee1e346)}, + {TOBN(0x6afe67c4, 0xb5f2b89a), TOBN(0x3de9c1e6, 0x290e5cd3), + TOBN(0x8c278bb6, 0x310a2ada), TOBN(0x420fa384, 0x0bdb323b)}}, + {{TOBN(0x0ae1d63b, 0x0eb919b0), TOBN(0xd74ee51d, 0xa74b9620), + TOBN(0x395458d0, 0xa674290c), TOBN(0x324c930f, 0x4620a510)}, + {TOBN(0x2d1f4d19, 0xfbac27d4), TOBN(0x4086e8ca, 0x9bedeeac), + TOBN(0x0cdd211b, 0x9b679ab8), TOBN(0x5970167d, 0x7090fec4)}}, + {{TOBN(0x3420f2c9, 0xfaf1fc63), TOBN(0x616d333a, 0x328c8bb4), + TOBN(0x7d65364c, 0x57f1fe4a), TOBN(0x9343e877, 0x55e5c73a)}, + {TOBN(0x5795176b, 0xe970e78c), TOBN(0xa36ccebf, 0x60533627), + TOBN(0xfc7c7380, 0x09cdfc1b), TOBN(0xb39a2afe, 0xb3fec326)}}, + {{TOBN(0xb7ff1ba1, 0x6224408a), TOBN(0xcc856e92, 0x247cfc5e), + TOBN(0x01f102e7, 0xc18bc493), TOBN(0x4613ab74, 0x2091c727)}, + {TOBN(0xaa25e89c, 0xc420bf2b), TOBN(0x00a53176, 0x90337ec2), + TOBN(0xd2be9f43, 0x7d025fc7), TOBN(0x3316fb85, 0x6e6fe3dc)}}, + {{TOBN(0x27520af5, 0x9ac50814), TOBN(0xfdf95e78, 0x9a8e4223), + TOBN(0xb7e7df2a, 0x56bec5a0), TOBN(0xf7022f7d, 0xdf159e5d)}, + {TOBN(0x93eeeab1, 0xcac1fe8f), TOBN(0x8040188c, 0x37451168), + TOBN(0x7ee8aa8a, 0xd967dce6), TOBN(0xfa0e79e7, 0x3abc9299)}}, + {{TOBN(0x67332cfc, 0x2064cfd1), TOBN(0x339c31de, 0xb0651934), + TOBN(0x719b28d5, 0x2a3bcbea), TOBN(0xee74c82b, 0x9d6ae5c6)}, + {TOBN(0x0927d05e, 0xbaf28ee6), TOBN(0x82cecf2c, 0x9d719028), + TOBN(0x0b0d353e, 0xddb30289), TOBN(0xfe4bb977, 0xfddb2e29)}}, + {{TOBN(0xbb5bb990, 0x640bfd9e), TOBN(0xd226e277, 0x82f62108), + TOBN(0x4bf00985, 0x02ffdd56), TOBN(0x7756758a, 0x2ca1b1b5)}, + {TOBN(0xc32b62a3, 0x5285fe91), TOBN(0xedbc546a, 0x8c9cd140), + TOBN(0x1e47a013, 0xaf5cb008), TOBN(0xbca7e720, 0x073ce8f2)}}, + {{TOBN(0xe10b2ab8, 0x17a91cae), TOBN(0xb89aab65, 0x08e27f63), + TOBN(0x7b3074a7, 0xdba3ddf9), TOBN(0x1c20ce09, 0x330c2972)}, + {TOBN(0x6b9917b4, 0x5fcf7e33), TOBN(0xe6793743, 0x945ceb42), + TOBN(0x18fc2215, 0x5c633d19), TOBN(0xad1adb3c, 0xc7485474)}}, + {{TOBN(0x646f9679, 0x6424c49b), TOBN(0xf888dfe8, 0x67c241c9), + TOBN(0xe12d4b93, 0x24f68b49), TOBN(0x9a6b62d8, 0xa571df20)}, + {TOBN(0x81b4b26d, 0x179483cb), TOBN(0x666f9632, 0x9511fae2), + TOBN(0xd281b3e4, 0xd53aa51f), TOBN(0x7f96a765, 0x7f3dbd16)}}, + {{TOBN(0xa7f8b5bf, 0x074a30ce), TOBN(0xd7f52107, 0x005a32e6), + TOBN(0x6f9e0907, 0x50237ed4), TOBN(0x2f21da47, 0x8096fa2b)}, + {TOBN(0xf3e19cb4, 0xeec863a0), TOBN(0xd18f77fd, 0x9527620a), + TOBN(0x9505c81c, 0x407c1cf8), TOBN(0x9998db4e, 0x1b6ec284)}}, + {{TOBN(0x7e3389e5, 0xc247d44d), TOBN(0x12507141, 0x3f4f3d80), + TOBN(0xd4ba0110, 0x4a78a6c7), TOBN(0x312874a0, 0x767720be)}, + {TOBN(0xded059a6, 0x75944370), TOBN(0xd6123d90, 0x3b2c0bdd), + TOBN(0xa56b717b, 0x51c108e3), TOBN(0x9bb7940e, 0x070623e9)}}, + {{TOBN(0x794e2d59, 0x84ac066c), TOBN(0xf5954a92, 0xe68c69a0), + TOBN(0x28c52458, 0x4fd99dcc), TOBN(0x60e639fc, 0xb1012517)}, + {TOBN(0xc2e60125, 0x7de79248), TOBN(0xe9ef6404, 0xf12fc6d7), + TOBN(0x4c4f2808, 0x2a3b5d32), TOBN(0x865ad32e, 0xc768eb8a)}}, + {{TOBN(0xac02331b, 0x13fb70b6), TOBN(0x037b44c1, 0x95599b27), + TOBN(0x1a860fc4, 0x60bd082c), TOBN(0xa2e25745, 0xc980cd01)}, + {TOBN(0xee3387a8, 0x1da0263e), TOBN(0x931bfb95, 0x2d10f3d6), + TOBN(0x5b687270, 0xa1f24a32), TOBN(0xf140e65d, 0xca494b86)}}, + {{TOBN(0x4f4ddf91, 0xb2f1ac7a), TOBN(0xf99eaabb, 0x760fee27), + TOBN(0x57f4008a, 0x49c228e5), TOBN(0x090be440, 0x1cf713bb)}, + {TOBN(0xac91fbe4, 0x5004f022), TOBN(0xd838c2c2, 0x569e1af6), + TOBN(0xd6c7d20b, 0x0f1daaa5), TOBN(0xaa063ac1, 0x1bbb02c0)}}, + {{TOBN(0x0938a422, 0x59558a78), TOBN(0x5343c669, 0x8435da2f), + TOBN(0x96f67b18, 0x034410dc), TOBN(0x7cc1e424, 0x84510804)}, + {TOBN(0x86a1543f, 0x16dfbb7d), TOBN(0x921fa942, 0x5b5bd592), + TOBN(0x9dcccb6e, 0xb33dd03c), TOBN(0x8581ddd9, 0xb843f51e)}}, + {{TOBN(0x54935fcb, 0x81d73c9e), TOBN(0x6d07e979, 0x0a5e97ab), + TOBN(0x4dc7b30a, 0xcf3a6bab), TOBN(0x147ab1f3, 0x170bee11)}, + {TOBN(0x0aaf8e3d, 0x9fafdee4), TOBN(0xfab3dbcb, 0x538a8b95), + TOBN(0x405df4b3, 0x6ef13871), TOBN(0xf1f4e9cb, 0x088d5a49)}}, + {{TOBN(0x9bcd24d3, 0x66b33f1d), TOBN(0x3b97b820, 0x5ce445c0), + TOBN(0xe2926549, 0xba93ff61), TOBN(0xd9c341ce, 0x4dafe616)}, + {TOBN(0xfb30a76e, 0x16efb6f3), TOBN(0xdf24b8ca, 0x605b953c), + TOBN(0x8bd52afe, 0xc2fffb9f), TOBN(0xbbac5ff7, 0xe19d0b96)}}, + {{TOBN(0x43c01b87, 0x459afccd), TOBN(0x6bd45143, 0xb7432652), + TOBN(0x84734530, 0x55b5d78e), TOBN(0x81088fdb, 0x1554ba7d)}, + {TOBN(0xada0a52c, 0x1e269375), TOBN(0xf9f037c4, 0x2dc5ec10), + TOBN(0xc0660607, 0x94bfbc11), TOBN(0xc0a630bb, 0xc9c40d2f)}}, + {{TOBN(0x5efc797e, 0xab64c31e), TOBN(0xffdb1dab, 0x74507144), + TOBN(0xf6124287, 0x1ca6790c), TOBN(0xe9609d81, 0xe69bf1bf)}, + {TOBN(0xdb898595, 0x00d24fc9), TOBN(0x9c750333, 0xe51fb417), + TOBN(0x51830a91, 0xfef7bbde), TOBN(0x0ce67dc8, 0x945f585c)}}, + {{TOBN(0x9a730ed4, 0x4763eb50), TOBN(0x24a0e221, 0xc1ab0d66), + TOBN(0x643b6393, 0x648748f3), TOBN(0x1982daa1, 0x6d3c6291)}, + {TOBN(0x6f00a9f7, 0x8bbc5549), TOBN(0x7a1783e1, 0x7f36384e), + TOBN(0xe8346323, 0xde977f50), TOBN(0x91ab688d, 0xb245502a)}}, + {{TOBN(0x331ab6b5, 0x6d0bdd66), TOBN(0x0a6ef32e, 0x64b71229), + TOBN(0x1028150e, 0xfe7c352f), TOBN(0x27e04350, 0xce7b39d3)}, + {TOBN(0x2a3c8acd, 0xc1070c82), TOBN(0xfb2034d3, 0x80c9feef), + TOBN(0x2d729621, 0x709f3729), TOBN(0x8df290bf, 0x62cb4549)}}, + {{TOBN(0x02f99f33, 0xfc2e4326), TOBN(0x3b30076d, 0x5eddf032), + TOBN(0xbb21f8cf, 0x0c652fb5), TOBN(0x314fb49e, 0xed91cf7b)}, + {TOBN(0xa013eca5, 0x2f700750), TOBN(0x2b9e3c23, 0x712a4575), + TOBN(0xe5355557, 0xaf30fbb0), TOBN(0x1ada3516, 0x7c77e771)}}, + {{TOBN(0x45f6ecb2, 0x7b135670), TOBN(0xe85d19df, 0x7cfc202e), + TOBN(0x0f1b50c7, 0x58d1be9f), TOBN(0x5ebf2c0a, 0xead2e344)}, + {TOBN(0x1531fe4e, 0xabc199c9), TOBN(0xc7032592, 0x56bab0ae), + TOBN(0x16ab2e48, 0x6c1fec54), TOBN(0x0f87fda8, 0x04280188)}}, + {{TOBN(0xdc9f46fc, 0x609e4a74), TOBN(0x2a44a143, 0xba667f91), + TOBN(0xbc3d8b95, 0xb4d83436), TOBN(0xa01e4bd0, 0xc7bd2958)}, + {TOBN(0x7b182932, 0x73483c90), TOBN(0xa79c6aa1, 0xa7c7b598), + TOBN(0xbf3983c6, 0xeaaac07e), TOBN(0x8f18181e, 0x96e0d4e6)}}, + {{TOBN(0x8553d37c, 0x051af62b), TOBN(0xe9a998eb, 0x0bf94496), + TOBN(0xe0844f9f, 0xb0d59aa1), TOBN(0x983fd558, 0xe6afb813)}, + {TOBN(0x9670c0ca, 0x65d69804), TOBN(0x732b22de, 0x6ea5ff2d), + TOBN(0xd7640ba9, 0x5fd8623b), TOBN(0x9f619163, 0xa6351782)}}, + {{TOBN(0x0bfc27ee, 0xacee5043), TOBN(0xae419e73, 0x2eb10f02), + TOBN(0x19c028d1, 0x8943fb05), TOBN(0x71f01cf7, 0xff13aa2a)}, + {TOBN(0x7790737e, 0x8887a132), TOBN(0x67513309, 0x66318410), + TOBN(0x9819e8a3, 0x7ddb795e), TOBN(0xfecb8ef5, 0xdad100b2)}}, + {{TOBN(0x59f74a22, 0x3021926a), TOBN(0xb7c28a49, 0x6f9b4c1c), + TOBN(0xed1a733f, 0x912ad0ab), TOBN(0x42a910af, 0x01a5659c)}, + {TOBN(0x3842c6e0, 0x7bd68cab), TOBN(0x2b57fa38, 0x76d70ac8), + TOBN(0x8a6707a8, 0x3c53aaeb), TOBN(0x62c1c510, 0x65b4db18)}}, + {{TOBN(0x8de2c1fb, 0xb2d09dc7), TOBN(0xc3dfed12, 0x266bd23b), + TOBN(0x927d039b, 0xd5b27db6), TOBN(0x2fb2f0f1, 0x103243da)}, + {TOBN(0xf855a07b, 0x80be7399), TOBN(0xed9327ce, 0x1f9f27a8), + TOBN(0xa0bd99c7, 0x729bdef7), TOBN(0x2b67125e, 0x28250d88)}}, + {{TOBN(0x784b26e8, 0x8670ced7), TOBN(0xe3dfe41f, 0xc31bd3b4), + TOBN(0x9e353a06, 0xbcc85cbc), TOBN(0x302e2909, 0x60178a9d)}, + {TOBN(0x860abf11, 0xa6eac16e), TOBN(0x76447000, 0xaa2b3aac), + TOBN(0x46ff9d19, 0x850afdab), TOBN(0x35bdd6a5, 0xfdb2d4c1)}}, + {{TOBN(0xe82594b0, 0x7e5c9ce9), TOBN(0x0f379e53, 0x20af346e), + TOBN(0x608b31e3, 0xbc65ad4a), TOBN(0x710c6b12, 0x267c4826)}, + {TOBN(0x51c966f9, 0x71954cf1), TOBN(0xb1cec793, 0x0d0aa215), + TOBN(0x1f155989, 0x86bd23a8), TOBN(0xae2ff99c, 0xf9452e86)}}, + {{TOBN(0xd8dd953c, 0x340ceaa2), TOBN(0x26355275, 0x2e2e9333), + TOBN(0x15d4e5f9, 0x8586f06d), TOBN(0xd6bf94a8, 0xf7cab546)}, + {TOBN(0x33c59a0a, 0xb76a9af0), TOBN(0x52740ab3, 0xba095af7), + TOBN(0xc444de8a, 0x24389ca0), TOBN(0xcc6f9863, 0x706da0cb)}}, + {{TOBN(0xb5a741a7, 0x6b2515cf), TOBN(0x71c41601, 0x9585c749), + TOBN(0x78350d4f, 0xe683de97), TOBN(0x31d61524, 0x63d0b5f5)}, + {TOBN(0x7a0cc5e1, 0xfbce090b), TOBN(0xaac927ed, 0xfbcb2a5b), + TOBN(0xe920de49, 0x20d84c35), TOBN(0x8c06a0b6, 0x22b4de26)}}, + {{TOBN(0xd34dd58b, 0xafe7ddf3), TOBN(0x55851fed, 0xc1e6e55b), + TOBN(0xd1395616, 0x960696e7), TOBN(0x940304b2, 0x5f22705f)}, + {TOBN(0x6f43f861, 0xb0a2a860), TOBN(0xcf121282, 0x0e7cc981), + TOBN(0x12186212, 0x0ab64a96), TOBN(0x09215b9a, 0xb789383c)}}, + {{TOBN(0x311eb305, 0x37387c09), TOBN(0xc5832fce, 0xf03ee760), + TOBN(0x30358f58, 0x32f7ea19), TOBN(0xe01d3c34, 0x91d53551)}, + {TOBN(0x1ca5ee41, 0xda48ea80), TOBN(0x34e71e8e, 0xcf4fa4c1), + TOBN(0x312abd25, 0x7af1e1c7), TOBN(0xe3afcdeb, 0x2153f4a5)}}, + {{TOBN(0x9d5c84d7, 0x00235e9a), TOBN(0x0308d3f4, 0x8c4c836f), + TOBN(0xc0a66b04, 0x89332de5), TOBN(0x610dd399, 0x89e566ef)}, + {TOBN(0xf8eea460, 0xd1ac1635), TOBN(0x84cbb3fb, 0x20a2c0df), + TOBN(0x40afb488, 0xe74a48c5), TOBN(0x29738198, 0xd326b150)}}, + {{TOBN(0x2a17747f, 0xa6d74081), TOBN(0x60ea4c05, 0x55a26214), + TOBN(0x53514bb4, 0x1f88c5fe), TOBN(0xedd64567, 0x7e83426c)}, + {TOBN(0xd5d6cbec, 0x96460b25), TOBN(0xa12fd0ce, 0x68dc115e), + TOBN(0xc5bc3ed2, 0x697840ea), TOBN(0x969876a8, 0xa6331e31)}}, + {{TOBN(0x60c36217, 0x472ff580), TOBN(0xf4229705, 0x4ad41393), + TOBN(0x4bd99ef0, 0xa03b8b92), TOBN(0x501c7317, 0xc144f4f6)}, + {TOBN(0x159009b3, 0x18464945), TOBN(0x6d5e594c, 0x74c5c6be), + TOBN(0x2d587011, 0x321a3660), TOBN(0xd1e184b1, 0x3898d022)}}, + {{TOBN(0x5ba04752, 0x4c6a7e04), TOBN(0x47fa1e2b, 0x45550b65), + TOBN(0x9419daf0, 0x48c0a9a5), TOBN(0x66362953, 0x7c243236)}, + {TOBN(0xcd0744b1, 0x5cb12a88), TOBN(0x561b6f9a, 0x2b646188), + TOBN(0x599415a5, 0x66c2c0c0), TOBN(0xbe3f0859, 0x0f83f09a)}}, + {{TOBN(0x9141c5be, 0xb92041b8), TOBN(0x01ae38c7, 0x26477d0d), + TOBN(0xca8b71f3, 0xd12c7a94), TOBN(0xfab5b31f, 0x765c70db)}, + {TOBN(0x76ae7492, 0x487443e9), TOBN(0x8595a310, 0x990d1349), + TOBN(0xf8dbeda8, 0x7d460a37), TOBN(0x7f7ad082, 0x1e45a38f)}}, + {{TOBN(0xed1d4db6, 0x1059705a), TOBN(0xa3dd492a, 0xe6b9c697), + TOBN(0x4b92ee3a, 0x6eb38bd5), TOBN(0xbab2609d, 0x67cc0bb7)}, + {TOBN(0x7fc4fe89, 0x6e70ee82), TOBN(0xeff2c56e, 0x13e6b7e3), + TOBN(0x9b18959e, 0x34d26fca), TOBN(0x2517ab66, 0x889d6b45)}}, + {{TOBN(0xf167b4e0, 0xbdefdd4f), TOBN(0x69958465, 0xf366e401), + TOBN(0x5aa368ab, 0xa73bbec0), TOBN(0x12148709, 0x7b240c21)}, + {TOBN(0x378c3233, 0x18969006), TOBN(0xcb4d73ce, 0xe1fe53d1), + TOBN(0x5f50a80e, 0x130c4361), TOBN(0xd67f5951, 0x7ef5212b)}}, + {{TOBN(0xf145e21e, 0x9e70c72e), TOBN(0xb2e52e29, 0x5566d2fb), + TOBN(0x44eaba4a, 0x032397f5), TOBN(0x5e56937b, 0x7e31a7de)}, + {TOBN(0x68dcf517, 0x456c61e1), TOBN(0xbc2e954a, 0xa8b0a388), + TOBN(0xe3552fa7, 0x60a8b755), TOBN(0x03442dae, 0x73ad0cde)}}, + {{TOBN(0x37ffe747, 0xceb26210), TOBN(0x983545e8, 0x787baef9), + TOBN(0x8b8c8535, 0x86a3de31), TOBN(0xc621dbcb, 0xfacd46db)}, + {TOBN(0x82e442e9, 0x59266fbb), TOBN(0xa3514c37, 0x339d471c), + TOBN(0x3a11b771, 0x62cdad96), TOBN(0xf0cb3b3c, 0xecf9bdf0)}}, + {{TOBN(0x3fcbdbce, 0x478e2135), TOBN(0x7547b5cf, 0xbda35342), + TOBN(0xa97e81f1, 0x8a677af6), TOBN(0xc8c2bf83, 0x28817987)}, + {TOBN(0xdf07eaaf, 0x45580985), TOBN(0xc68d1f05, 0xc93b45cb), + TOBN(0x106aa2fe, 0xc77b4cac), TOBN(0x4c1d8afc, 0x04a7ae86)}}, + {{TOBN(0xdb41c3fd, 0x9eb45ab2), TOBN(0x5b234b5b, 0xd4b22e74), + TOBN(0xda253dec, 0xf215958a), TOBN(0x67e0606e, 0xa04edfa0)}, + {TOBN(0xabbbf070, 0xef751b11), TOBN(0xf352f175, 0xf6f06dce), + TOBN(0xdfc4b6af, 0x6839f6b4), TOBN(0x53ddf9a8, 0x9959848e)}}, + {{TOBN(0xda49c379, 0xc21520b0), TOBN(0x90864ff0, 0xdbd5d1b6), + TOBN(0x2f055d23, 0x5f49c7f7), TOBN(0xe51e4e6a, 0xa796b2d8)}, + {TOBN(0xc361a67f, 0x5c9dc340), TOBN(0x5ad53c37, 0xbca7c620), + TOBN(0xda1d6588, 0x32c756d0), TOBN(0xad60d911, 0x8bb67e13)}}, + {{TOBN(0xd6c47bdf, 0x0eeec8c6), TOBN(0x4a27fec1, 0x078a1821), + TOBN(0x081f7415, 0xc3099524), TOBN(0x8effdf0b, 0x82cd8060)}, + {TOBN(0xdb70ec1c, 0x65842df8), TOBN(0x8821b358, 0xd319a901), + TOBN(0x72ee56ee, 0xde42b529), TOBN(0x5bb39592, 0x236e4286)}}, + {{TOBN(0xd1183316, 0xfd6f7140), TOBN(0xf9fadb5b, 0xbd8e81f7), + TOBN(0x701d5e0c, 0x5a02d962), TOBN(0xfdee4dbf, 0x1b601324)}, + {TOBN(0xbed17407, 0x35d7620e), TOBN(0x04e3c2c3, 0xf48c0012), + TOBN(0x9ee29da7, 0x3455449a), TOBN(0x562cdef4, 0x91a836c4)}}, + {{TOBN(0x8f682a5f, 0x47701097), TOBN(0x617125d8, 0xff88d0c2), + TOBN(0x948fda24, 0x57bb86dd), TOBN(0x348abb8f, 0x289f7286)}, + {TOBN(0xeb10eab5, 0x99d94bbd), TOBN(0xd51ba28e, 0x4684d160), + TOBN(0xabe0e51c, 0x30c8f41a), TOBN(0x66588b45, 0x13254f4a)}}, + {{TOBN(0x147ebf01, 0xfad097a5), TOBN(0x49883ea8, 0x610e815d), + TOBN(0xe44d60ba, 0x8a11de56), TOBN(0xa970de6e, 0x827a7a6d)}, + {TOBN(0x2be41424, 0x5e17fc19), TOBN(0xd833c657, 0x01214057), + TOBN(0x1375813b, 0x363e723f), TOBN(0x6820bb88, 0xe6a52e9b)}}, + {{TOBN(0x7e7f6970, 0xd875d56a), TOBN(0xd6a0a9ac, 0x51fbf6bf), + TOBN(0x54ba8790, 0xa3083c12), TOBN(0xebaeb23d, 0x6ae7eb64)}, + {TOBN(0xa8685c3a, 0xb99a907a), TOBN(0xf1e74550, 0x026bf40b), + TOBN(0x7b73a027, 0xc802cd9e), TOBN(0x9a8a927c, 0x4fef4635)}}, + {{TOBN(0xe1b6f60c, 0x08191224), TOBN(0xc4126ebb, 0xde4ec091), + TOBN(0xe1dff4dc, 0x4ae38d84), TOBN(0xde3f57db, 0x4f2ef985)}, + {TOBN(0x34964337, 0xd446a1dd), TOBN(0x7bf217a0, 0x859e77f6), + TOBN(0x8ff10527, 0x8e1d13f5), TOBN(0xa304ef03, 0x74eeae27)}}, + {{TOBN(0xfc6f5e47, 0xd19dfa5a), TOBN(0xdb007de3, 0x7fad982b), + TOBN(0x28205ad1, 0x613715f5), TOBN(0x251e6729, 0x7889529e)}, + {TOBN(0x72705184, 0x1ae98e78), TOBN(0xf818537d, 0x271cac32), + TOBN(0xc8a15b7e, 0xb7f410f5), TOBN(0xc474356f, 0x81f62393)}}, + {{TOBN(0x92dbdc5a, 0xc242316b), TOBN(0xabe060ac, 0xdbf4aff5), + TOBN(0x6e8c38fe, 0x909a8ec6), TOBN(0x43e514e5, 0x6116cb94)}, + {TOBN(0x2078fa38, 0x07d784f9), TOBN(0x1161a880, 0xf4b5b357), + TOBN(0x5283ce79, 0x13adea3d), TOBN(0x0756c3e6, 0xcc6a910b)}}, + {{TOBN(0x60bcfe01, 0xaaa79697), TOBN(0x04a73b29, 0x56391db1), + TOBN(0xdd8dad47, 0x189b45a0), TOBN(0xbfac0dd0, 0x48d5b8d9)}, + {TOBN(0x34ab3af5, 0x7d3d2ec2), TOBN(0x6fa2fc2d, 0x207bd3af), + TOBN(0x9ff40092, 0x66550ded), TOBN(0x719b3e87, 0x1fd5b913)}}, + {{TOBN(0xa573a496, 0x6d17fbc7), TOBN(0x0cd1a70a, 0x73d2b24e), + TOBN(0x34e2c5ca, 0xb2676937), TOBN(0xe7050b06, 0xbf669f21)}, + {TOBN(0xfbe948b6, 0x1ede9046), TOBN(0xa0530051, 0x97662659), + TOBN(0x58cbd4ed, 0xf10124c5), TOBN(0xde2646e4, 0xdd6c06c8)}}, + {{TOBN(0x332f8108, 0x8cad38c0), TOBN(0x471b7e90, 0x6bd68ae2), + TOBN(0x56ac3fb2, 0x0d8e27a3), TOBN(0xb54660db, 0x136b4b0d)}, + {TOBN(0x123a1e11, 0xa6fd8de4), TOBN(0x44dbffea, 0xa37799ef), + TOBN(0x4540b977, 0xce6ac17c), TOBN(0x495173a8, 0xaf60acef)}}}, + {{{TOBN(0x9ebb284d, 0x391c2a82), TOBN(0xbcdd4863, 0x158308e8), + TOBN(0x006f16ec, 0x83f1edca), TOBN(0xa13e2c37, 0x695dc6c8)}, + {TOBN(0x2ab756f0, 0x4a057a87), TOBN(0xa8765500, 0xa6b48f98), + TOBN(0x4252face, 0x68651c44), TOBN(0xa52b540b, 0xe1765e02)}}, + {{TOBN(0x4f922fc5, 0x16a0d2bb), TOBN(0x0d5cc16c, 0x1a623499), + TOBN(0x9241cf3a, 0x57c62c8b), TOBN(0x2f5e6961, 0xfd1b667f)}, + {TOBN(0x5c15c70b, 0xf5a01797), TOBN(0x3d20b44d, 0x60956192), + TOBN(0x04911b37, 0x071fdb52), TOBN(0xf648f916, 0x8d6f0f7b)}}, + {{TOBN(0x6dc1acaf, 0xe60b7cf7), TOBN(0x25860a50, 0x84a9d869), + TOBN(0x56fc6f09, 0xe7ba8ac4), TOBN(0x828c5bd0, 0x6148d29e)}, + {TOBN(0xac6b435e, 0xdc55ae5f), TOBN(0xa527f56c, 0xc0117411), + TOBN(0x94d5045e, 0xfd24342c), TOBN(0x2c4c0a35, 0x70b67c0d)}}, + {{TOBN(0x027cc8b8, 0xfac61d9a), TOBN(0x7d25e062, 0xe3c6fe8a), + TOBN(0xe08805bf, 0xe5bff503), TOBN(0x13271e6c, 0x6ff632f7)}, + {TOBN(0x55dca6c0, 0x232f76a5), TOBN(0x8957c32d, 0x701ef426), + TOBN(0xee728bcb, 0xa10a5178), TOBN(0x5ea60411, 0xb62c5173)}}, + {{TOBN(0xfc4e964e, 0xd0b8892b), TOBN(0x9ea17683, 0x9301bb74), + TOBN(0x6265c5ae, 0xfcc48626), TOBN(0xe60cf82e, 0xbb3e9102)}, + {TOBN(0x57adf797, 0xd4df5531), TOBN(0x235b59a1, 0x8deeefe2), + TOBN(0x60adcf58, 0x3f306eb1), TOBN(0x105c2753, 0x3d09492d)}}, + {{TOBN(0x4090914b, 0xb5def996), TOBN(0x1cb69c83, 0x233dd1e7), + TOBN(0xc1e9c1d3, 0x9b3d5e76), TOBN(0x1f3338ed, 0xfccf6012)}, + {TOBN(0xb1e95d0d, 0x2f5378a8), TOBN(0xacf4c2c7, 0x2f00cd21), + TOBN(0x6e984240, 0xeb5fe290), TOBN(0xd66c038d, 0x248088ae)}}, + {{TOBN(0x804d264a, 0xf94d70cf), TOBN(0xbdb802ef, 0x7314bf7e), + TOBN(0x8fb54de2, 0x4333ed02), TOBN(0x740461e0, 0x285635d9)}, + {TOBN(0x4113b2c8, 0x365e9383), TOBN(0xea762c83, 0x3fdef652), + TOBN(0x4eec6e2e, 0x47b956c1), TOBN(0xa3d814be, 0x65620fa4)}}, + {{TOBN(0x9ad5462b, 0xb4d8bc50), TOBN(0x181c0b16, 0xa9195770), + TOBN(0xebd4fe1c, 0x78412a68), TOBN(0xae0341bc, 0xc0dff48c)}, + {TOBN(0xb6bc45cf, 0x7003e866), TOBN(0xf11a6dea, 0x8a24a41b), + TOBN(0x5407151a, 0xd04c24c2), TOBN(0x62c9d27d, 0xda5b7b68)}}, + {{TOBN(0x2e964235, 0x88cceff6), TOBN(0x8594c54f, 0x8b07ed69), + TOBN(0x1578e73c, 0xc84d0d0d), TOBN(0x7b4e1055, 0xff532868)}, + {TOBN(0xa348c0d5, 0xb5ec995a), TOBN(0xbf4b9d55, 0x14289a54), + TOBN(0x9ba155a6, 0x58fbd777), TOBN(0x186ed7a8, 0x1a84491d)}}, + {{TOBN(0xd4992b30, 0x614c0900), TOBN(0xda98d121, 0xbd00c24b), + TOBN(0x7f534dc8, 0x7ec4bfa1), TOBN(0x4a5ff674, 0x37dc34bc)}, + {TOBN(0x68c196b8, 0x1d7ea1d7), TOBN(0x38cf2893, 0x80a6d208), + TOBN(0xfd56cd09, 0xe3cbbd6e), TOBN(0xec72e27e, 0x4205a5b6)}}, + {{TOBN(0x15ea68f5, 0xa44f77f7), TOBN(0x7aa5f9fd, 0xb43c52bc), + TOBN(0x86ff676f, 0x94f0e609), TOBN(0xa4cde963, 0x2e2d432b)}, + {TOBN(0x8cafa0c0, 0xeee470af), TOBN(0x84137d0e, 0x8a3f5ec8), + TOBN(0xebb40411, 0xfaa31231), TOBN(0xa239c13f, 0x6f7f7ccf)}}, + {{TOBN(0x32865719, 0xa8afd30b), TOBN(0x86798328, 0x8a826dce), + TOBN(0xdf04e891, 0xc4a8fbe0), TOBN(0xbb6b6e1b, 0xebf56ad3)}, + {TOBN(0x0a695b11, 0x471f1ff0), TOBN(0xd76c3389, 0xbe15baf0), + TOBN(0x018edb95, 0xbe96c43e), TOBN(0xf2beaaf4, 0x90794158)}}, + {{TOBN(0x152db09e, 0xc3076a27), TOBN(0x5e82908e, 0xe416545d), + TOBN(0xa2c41272, 0x356d6f2e), TOBN(0xdc9c9642, 0x31fd74e1)}, + {TOBN(0x66ceb88d, 0x519bf615), TOBN(0xe29ecd76, 0x05a2274e), + TOBN(0x3a0473c4, 0xbf5e2fa0), TOBN(0x6b6eb671, 0x64284e67)}}, + {{TOBN(0xe8b97932, 0xb88756dd), TOBN(0xed4e8652, 0xf17e3e61), + TOBN(0xc2dd1499, 0x3ee1c4a4), TOBN(0xc0aaee17, 0x597f8c0e)}, + {TOBN(0x15c4edb9, 0x6c168af3), TOBN(0x6563c7bf, 0xb39ae875), + TOBN(0xadfadb6f, 0x20adb436), TOBN(0xad55e8c9, 0x9a042ac0)}}, + {{TOBN(0x975a1ed8, 0xb76da1f5), TOBN(0x10dfa466, 0xa58acb94), + TOBN(0x8dd7f7e3, 0xac060282), TOBN(0x6813e66a, 0x572a051e)}, + {TOBN(0xb4ccae1e, 0x350cb901), TOBN(0xb653d656, 0x50cb7822), + TOBN(0x42484710, 0xdfab3b87), TOBN(0xcd7ee537, 0x9b670fd0)}}, + {{TOBN(0x0a50b12e, 0x523b8bf6), TOBN(0x8009eb5b, 0x8f910c1b), + TOBN(0xf535af82, 0x4a167588), TOBN(0x0f835f9c, 0xfb2a2abd)}, + {TOBN(0xf59b2931, 0x2afceb62), TOBN(0xc797df2a, 0x169d383f), + TOBN(0xeb3f5fb0, 0x66ac02b0), TOBN(0x029d4c6f, 0xdaa2d0ca)}}, + {{TOBN(0xd4059bc1, 0xafab4bc5), TOBN(0x833f5c6f, 0x56783247), + TOBN(0xb5346630, 0x8d2d3605), TOBN(0x83387891, 0xd34d8433)}, + {TOBN(0xd973b30f, 0xadd9419a), TOBN(0xbcca1099, 0xafe3fce8), + TOBN(0x08178315, 0x0809aac6), TOBN(0x01b7f21a, 0x540f0f11)}}, + {{TOBN(0x65c29219, 0x909523c8), TOBN(0xa62f648f, 0xa3a1c741), + TOBN(0x88598d4f, 0x60c9e55a), TOBN(0xbce9141b, 0x0e4f347a)}, + {TOBN(0x9af97d84, 0x35f9b988), TOBN(0x0210da62, 0x320475b6), + TOBN(0x3c076e22, 0x9191476c), TOBN(0x7520dbd9, 0x44fc7834)}}, + {{TOBN(0x6a6b2cfe, 0xc1ab1bbd), TOBN(0xef8a65be, 0xdc650938), + TOBN(0x72855540, 0x805d7bc4), TOBN(0xda389396, 0xed11fdfd)}, + {TOBN(0xa9d5bd36, 0x74660876), TOBN(0x11d67c54, 0xb45dff35), + TOBN(0x6af7d148, 0xa4f5da94), TOBN(0xbb8d4c3f, 0xc0bbeb31)}}, + {{TOBN(0x87a7ebd1, 0xe0a1b12a), TOBN(0x1e4ef88d, 0x770ba95f), + TOBN(0x8c33345c, 0xdc2ae9cb), TOBN(0xcecf1276, 0x01cc8403)}, + {TOBN(0x687c012e, 0x1b39b80f), TOBN(0xfd90d0ad, 0x35c33ba4), + TOBN(0xa3ef5a67, 0x5c9661c2), TOBN(0x368fc88e, 0xe017429e)}}, + {{TOBN(0xd30c6761, 0x196a2fa2), TOBN(0x931b9817, 0xbd5b312e), + TOBN(0xba01000c, 0x72f54a31), TOBN(0xa203d2c8, 0x66eaa541)}, + {TOBN(0xf2abdee0, 0x98939db3), TOBN(0xe37d6c2c, 0x3e606c02), + TOBN(0xf2921574, 0x521ff643), TOBN(0x2781b3c4, 0xd7e2fca3)}}, + {{TOBN(0x664300b0, 0x7850ec06), TOBN(0xac5a38b9, 0x7d3a10cf), + TOBN(0x9233188d, 0xe34ab39d), TOBN(0xe77057e4, 0x5072cbb9)}, + {TOBN(0xbcf0c042, 0xb59e78df), TOBN(0x4cfc91e8, 0x1d97de52), + TOBN(0x4661a26c, 0x3ee0ca4a), TOBN(0x5620a4c1, 0xfb8507bc)}}, + {{TOBN(0x4b44d4aa, 0x049f842c), TOBN(0xceabc5d5, 0x1540e82b), + TOBN(0x306710fd, 0x15c6f156), TOBN(0xbe5ae52b, 0x63db1d72)}, + {TOBN(0x06f1e7e6, 0x334957f1), TOBN(0x57e388f0, 0x31144a70), + TOBN(0xfb69bb2f, 0xdf96447b), TOBN(0x0f78ebd3, 0x73e38a12)}}, + {{TOBN(0xb8222605, 0x2b7ce542), TOBN(0xe6d4ce99, 0x7472bde1), + TOBN(0x53e16ebe, 0x09d2f4da), TOBN(0x180ff42e, 0x53b92b2e)}, + {TOBN(0xc59bcc02, 0x2c34a1c6), TOBN(0x3803d6f9, 0x422c46c2), + TOBN(0x18aff74f, 0x5c14a8a2), TOBN(0x55aebf80, 0x10a08b28)}}, + {{TOBN(0x66097d58, 0x7135593f), TOBN(0x32e6eff7, 0x2be570cd), + TOBN(0x584e6a10, 0x2a8c860d), TOBN(0xcd185890, 0xa2eb4163)}, + {TOBN(0x7ceae99d, 0x6d97e134), TOBN(0xd42c6b70, 0xdd8447ce), + TOBN(0x59ddbb4a, 0xb8c50273), TOBN(0x03c612df, 0x3cf34e1e)}}, + {{TOBN(0x84b9ca15, 0x04b6c5a0), TOBN(0x35216f39, 0x18f0e3a3), + TOBN(0x3ec2d2bc, 0xbd986c00), TOBN(0x8bf546d9, 0xd19228fe)}, + {TOBN(0xd1c655a4, 0x4cd623c3), TOBN(0x366ce718, 0x502b8e5a), + TOBN(0x2cfc84b4, 0xeea0bfe7), TOBN(0xe01d5cee, 0xcf443e8e)}}, + {{TOBN(0x8ec045d9, 0x036520f8), TOBN(0xdfb3c3d1, 0x92d40e98), + TOBN(0x0bac4cce, 0xcc559a04), TOBN(0x35eccae5, 0x240ea6b1)}, + {TOBN(0x180b32db, 0xf8a5a0ac), TOBN(0x547972a5, 0xeb699700), + TOBN(0xa3765801, 0xca26bca0), TOBN(0x57e09d0e, 0xa647f25a)}}, + {{TOBN(0xb956970e, 0x2fdd23cc), TOBN(0xb80288bc, 0x5682e971), + TOBN(0xe6e6d91e, 0x9ae86ebc), TOBN(0x0564c83f, 0x8c9f1939)}, + {TOBN(0x551932a2, 0x39560368), TOBN(0xe893752b, 0x049c28e2), + TOBN(0x0b03cee5, 0xa6a158c3), TOBN(0xe12d656b, 0x04964263)}}, + {{TOBN(0x4b47554e, 0x63e3bc1d), TOBN(0xc719b6a2, 0x45044ff7), + TOBN(0x4f24d30a, 0xe48daa07), TOBN(0xa3f37556, 0xc8c1edc3)}, + {TOBN(0x9a47bf76, 0x0700d360), TOBN(0xbb1a1824, 0x822ae4e2), + TOBN(0x22e275a3, 0x89f1fb4c), TOBN(0x72b1aa23, 0x9968c5f5)}}, + {{TOBN(0xa75feaca, 0xbe063f64), TOBN(0x9b392f43, 0xbce47a09), + TOBN(0xd4241509, 0x1ad07aca), TOBN(0x4b0c591b, 0x8d26cd0f)}, + {TOBN(0x2d42ddfd, 0x92f1169a), TOBN(0x63aeb1ac, 0x4cbf2392), + TOBN(0x1de9e877, 0x0691a2af), TOBN(0xebe79af7, 0xd98021da)}}, + {{TOBN(0xcfdf2a4e, 0x40e50acf), TOBN(0xf0a98ad7, 0xaf01d665), + TOBN(0xefb640bf, 0x1831be1f), TOBN(0x6fe8bd2f, 0x80e9ada0)}, + {TOBN(0x94c103a1, 0x6cafbc91), TOBN(0x170f8759, 0x8308e08c), + TOBN(0x5de2d2ab, 0x9780ff4f), TOBN(0x666466bc, 0x45b201f2)}}, + {{TOBN(0x58af2010, 0xf5b343bc), TOBN(0x0f2e400a, 0xf2f142fe), + TOBN(0x3483bfde, 0xa85f4bdf), TOBN(0xf0b1d093, 0x03bfeaa9)}, + {TOBN(0x2ea01b95, 0xc7081603), TOBN(0xe943e4c9, 0x3dba1097), + TOBN(0x47be92ad, 0xb438f3a6), TOBN(0x00bb7742, 0xe5bf6636)}}, + {{TOBN(0x136b7083, 0x824297b4), TOBN(0x9d0e5580, 0x5584455f), + TOBN(0xab48cedc, 0xf1c7d69e), TOBN(0x53a9e481, 0x2a256e76)}, + {TOBN(0x0402b0e0, 0x65eb2413), TOBN(0xdadbbb84, 0x8fc407a7), + TOBN(0xa65cd5a4, 0x8d7f5492), TOBN(0x21d44293, 0x74bae294)}}, + {{TOBN(0x66917ce6, 0x3b5f1cc4), TOBN(0x37ae52ea, 0xce872e62), + TOBN(0xbb087b72, 0x2905f244), TOBN(0x12077086, 0x1e6af74f)}, + {TOBN(0x4b644e49, 0x1058edea), TOBN(0x827510e3, 0xb638ca1d), + TOBN(0x8cf2b704, 0x6038591c), TOBN(0xffc8b47a, 0xfe635063)}}, + {{TOBN(0x3ae220e6, 0x1b4d5e63), TOBN(0xbd864742, 0x9d961b4b), + TOBN(0x610c107e, 0x9bd16bed), TOBN(0x4270352a, 0x1127147b)}, + {TOBN(0x7d17ffe6, 0x64cfc50e), TOBN(0x50dee01a, 0x1e36cb42), + TOBN(0x068a7622, 0x35dc5f9a), TOBN(0x9a08d536, 0xdf53f62c)}}, + {{TOBN(0x4ed71457, 0x6be5f7de), TOBN(0xd93006f8, 0xc2263c9e), + TOBN(0xe073694c, 0xcacacb36), TOBN(0x2ff7a5b4, 0x3ae118ab)}, + {TOBN(0x3cce53f1, 0xcd871236), TOBN(0xf156a39d, 0xc2aa6d52), + TOBN(0x9cc5f271, 0xb198d76d), TOBN(0xbc615b6f, 0x81383d39)}}, + {{TOBN(0xa54538e8, 0xde3eee6b), TOBN(0x58c77538, 0xab910d91), + TOBN(0x31e5bdbc, 0x58d278bd), TOBN(0x3cde4adf, 0xb963acae)}, + {TOBN(0xb1881fd2, 0x5302169c), TOBN(0x8ca60fa0, 0xa989ed8b), + TOBN(0xa1999458, 0xff96a0ee), TOBN(0xc1141f03, 0xac6c283d)}}, + {{TOBN(0x7677408d, 0x6dfafed3), TOBN(0x33a01653, 0x39661588), + TOBN(0x3c9c15ec, 0x0b726fa0), TOBN(0x090cfd93, 0x6c9b56da)}, + {TOBN(0xe34f4bae, 0xa3c40af5), TOBN(0x3469eadb, 0xd21129f1), + TOBN(0xcc51674a, 0x1e207ce8), TOBN(0x1e293b24, 0xc83b1ef9)}}, + {{TOBN(0x17173d13, 0x1e6c0bb4), TOBN(0x19004695, 0x90776d35), + TOBN(0xe7980e34, 0x6de6f922), TOBN(0x873554cb, 0xf4dd9a22)}, + {TOBN(0x0316c627, 0xcbf18a51), TOBN(0x4d93651b, 0x3032c081), + TOBN(0x207f2771, 0x3946834d), TOBN(0x2c08d7b4, 0x30cdbf80)}}, + {{TOBN(0x137a4fb4, 0x86df2a61), TOBN(0xa1ed9c07, 0xecf7b4a2), + TOBN(0xb2e460e2, 0x7bd042ff), TOBN(0xb7f5e2fa, 0x5f62f5ec)}, + {TOBN(0x7aa6ec6b, 0xcc2423b7), TOBN(0x75ce0a7f, 0xba63eea7), + TOBN(0x67a45fb1, 0xf250a6e1), TOBN(0x93bc919c, 0xe53cdc9f)}}, + {{TOBN(0x9271f56f, 0x871942df), TOBN(0x2372ff6f, 0x7859ad66), + TOBN(0x5f4c2b96, 0x33cb1a78), TOBN(0xe3e29101, 0x5838aa83)}, + {TOBN(0xa7ed1611, 0xe4e8110c), TOBN(0x2a2d70d5, 0x330198ce), + TOBN(0xbdf132e8, 0x6720efe0), TOBN(0xe61a8962, 0x66a471bf)}}, + {{TOBN(0x796d3a85, 0x825808bd), TOBN(0x51dc3cb7, 0x3fd6e902), + TOBN(0x643c768a, 0x916219d1), TOBN(0x36cd7685, 0xa2ad7d32)}, + {TOBN(0xe3db9d05, 0xb22922a4), TOBN(0x6494c87e, 0xdba29660), + TOBN(0xf0ac91df, 0xbcd2ebc7), TOBN(0x4deb57a0, 0x45107f8d)}}, + {{TOBN(0x42271f59, 0xc3d12a73), TOBN(0x5f71687c, 0xa5c2c51d), + TOBN(0xcb1f50c6, 0x05797bcb), TOBN(0x29ed0ed9, 0xd6d34eb0)}, + {TOBN(0xe5fe5b47, 0x4683c2eb), TOBN(0x4956eeb5, 0x97447c46), + TOBN(0x5b163a43, 0x71207167), TOBN(0x93fa2fed, 0x0248c5ef)}}, + {{TOBN(0x67930af2, 0x31f63950), TOBN(0xa77797c1, 0x14caa2c9), + TOBN(0x526e80ee, 0x27ac7e62), TOBN(0xe1e6e626, 0x58b28aec)}, + {TOBN(0x636178b0, 0xb3c9fef0), TOBN(0xaf7752e0, 0x6d5f90be), + TOBN(0x94ecaf18, 0xeece51cf), TOBN(0x2864d0ed, 0xca806e1f)}}, + {{TOBN(0x6de2e383, 0x97c69134), TOBN(0x5a42c316, 0xeb291293), + TOBN(0xc7779219, 0x6a60bae0), TOBN(0xa24de346, 0x6b7599d1)}, + {TOBN(0x49d374aa, 0xb75d4941), TOBN(0x98900586, 0x2d501ff0), + TOBN(0x9f16d40e, 0xeb7974cf), TOBN(0x1033860b, 0xcdd8c115)}}, + {{TOBN(0xb6c69ac8, 0x2094cec3), TOBN(0x9976fb88, 0x403b770c), + TOBN(0x1dea026c, 0x4859590d), TOBN(0xb6acbb46, 0x8562d1fd)}, + {TOBN(0x7cd6c461, 0x44569d85), TOBN(0xc3190a36, 0x97f0891d), + TOBN(0xc6f53195, 0x48d5a17d), TOBN(0x7d919966, 0xd749abc8)}}, + {{TOBN(0x65104837, 0xdd1c8a20), TOBN(0x7e5410c8, 0x2f683419), + TOBN(0x958c3ca8, 0xbe94022e), TOBN(0x605c3197, 0x6145dac2)}, + {TOBN(0x3fc07501, 0x01683d54), TOBN(0x1d7127c5, 0x595b1234), + TOBN(0x10b8f87c, 0x9481277f), TOBN(0x677db2a8, 0xe65a1adb)}}, + {{TOBN(0xec2fccaa, 0xddce3345), TOBN(0x2a6811b7, 0x012a4350), + TOBN(0x96760ff1, 0xac598bdc), TOBN(0x054d652a, 0xd1bf4128)}, + {TOBN(0x0a1151d4, 0x92a21005), TOBN(0xad7f3971, 0x33110fdf), + TOBN(0x8c95928c, 0x1960100f), TOBN(0x6c91c825, 0x7bf03362)}}, + {{TOBN(0xc8c8b2a2, 0xce309f06), TOBN(0xfdb27b59, 0xca27204b), + TOBN(0xd223eaa5, 0x0848e32e), TOBN(0xb93e4b2e, 0xe7bfaf1e)}, + {TOBN(0xc5308ae6, 0x44aa3ded), TOBN(0x317a666a, 0xc015d573), + TOBN(0xc888ce23, 0x1a979707), TOBN(0xf141c1e6, 0x0d5c4958)}}, + {{TOBN(0xb53b7de5, 0x61906373), TOBN(0x858dbade, 0xeb999595), + TOBN(0x8cbb47b2, 0xa59e5c36), TOBN(0x660318b3, 0xdcf4e842)}, + {TOBN(0xbd161ccd, 0x12ba4b7a), TOBN(0xf399daab, 0xf8c8282a), + TOBN(0x1587633a, 0xeeb2130d), TOBN(0xa465311a, 0xda38dd7d)}}, + {{TOBN(0x5f75eec8, 0x64d3779b), TOBN(0x3c5d0476, 0xad64c171), + TOBN(0x87410371, 0x2a914428), TOBN(0x8096a891, 0x90e2fc29)}, + {TOBN(0xd3d2ae9d, 0x23b3ebc2), TOBN(0x90bdd6db, 0xa580cfd6), + TOBN(0x52dbb7f3, 0xc5b01f6c), TOBN(0xe68eded4, 0xe102a2dc)}}, + {{TOBN(0x17785b77, 0x99eb6df0), TOBN(0x26c3cc51, 0x7386b779), + TOBN(0x345ed988, 0x6417a48e), TOBN(0xe990b4e4, 0x07d6ef31)}, + {TOBN(0x0f456b7e, 0x2586abba), TOBN(0x239ca6a5, 0x59c96e9a), + TOBN(0xe327459c, 0xe2eb4206), TOBN(0x3a4c3313, 0xa002b90a)}}, + {{TOBN(0x2a114806, 0xf6a3f6fb), TOBN(0xad5cad2f, 0x85c251dd), + TOBN(0x92c1f613, 0xf5a784d3), TOBN(0xec7bfacf, 0x349766d5)}, + {TOBN(0x04b3cd33, 0x3e23cb3b), TOBN(0x3979fe84, 0xc5a64b2d), + TOBN(0x192e2720, 0x7e589106), TOBN(0xa60c43d1, 0xa15b527f)}}, + {{TOBN(0x2dae9082, 0xbe7cf3a6), TOBN(0xcc86ba92, 0xbc967274), + TOBN(0xf28a2ce8, 0xaea0a8a9), TOBN(0x404ca6d9, 0x6ee988b3)}, + {TOBN(0xfd7e9c5d, 0x005921b8), TOBN(0xf56297f1, 0x44e79bf9), + TOBN(0xa163b460, 0x0d75ddc2), TOBN(0x30b23616, 0xa1f2be87)}}, + {{TOBN(0x4b070d21, 0xbfe50e2b), TOBN(0x7ef8cfd0, 0xe1bfede1), + TOBN(0xadba0011, 0x2aac4ae0), TOBN(0x2a3e7d01, 0xb9ebd033)}, + {TOBN(0x995277ec, 0xe38d9d1c), TOBN(0xb500249e, 0x9c5d2de3), + TOBN(0x8912b820, 0xf13ca8c9), TOBN(0xc8798114, 0x877793af)}}, + {{TOBN(0x19e6125d, 0xec3f1dec), TOBN(0x07b1f040, 0x911178da), + TOBN(0xd93ededa, 0x904a6738), TOBN(0x55187a5a, 0x0bebedcd)}, + {TOBN(0xf7d04722, 0xeb329d41), TOBN(0xf449099e, 0xf170b391), + TOBN(0xfd317a69, 0xca99f828), TOBN(0x50c3db2b, 0x34a4976d)}}, + {{TOBN(0xe9ba7784, 0x3757b392), TOBN(0x326caefd, 0xaa3ca05a), + TOBN(0x78e5293b, 0xf1e593d4), TOBN(0x7842a937, 0x0d98fd13)}, + {TOBN(0xe694bf96, 0x5f96b10d), TOBN(0x373a9df6, 0x06a8cd05), + TOBN(0x997d1e51, 0xe8f0c7fc), TOBN(0x1d019790, 0x63fd972e)}}, + {{TOBN(0x0064d858, 0x5499fb32), TOBN(0x7b67bad9, 0x77a8aeb7), + TOBN(0x1d3eb977, 0x2d08eec5), TOBN(0x5fc047a6, 0xcbabae1d)}, + {TOBN(0x0577d159, 0xe54a64bb), TOBN(0x8862201b, 0xc43497e4), + TOBN(0xad6b4e28, 0x2ce0608d), TOBN(0x8b687b7d, 0x0b167aac)}}, + {{TOBN(0x6ed4d367, 0x8b2ecfa9), TOBN(0x24dfe62d, 0xa90c3c38), + TOBN(0xa1862e10, 0x3fe5c42b), TOBN(0x1ca73dca, 0xd5732a9f)}, + {TOBN(0x35f038b7, 0x76bb87ad), TOBN(0x674976ab, 0xf242b81f), + TOBN(0x4f2bde7e, 0xb0fd90cd), TOBN(0x6efc172e, 0xa7fdf092)}}, + {{TOBN(0x3806b69b, 0x92222f1f), TOBN(0x5a2459ca, 0x6cf7ae70), + TOBN(0x6789f69c, 0xa85217ee), TOBN(0x5f232b5e, 0xe3dc85ac)}, + {TOBN(0x660e3ec5, 0x48e9e516), TOBN(0x124b4e47, 0x3197eb31), + TOBN(0x10a0cb13, 0xaafcca23), TOBN(0x7bd63ba4, 0x8213224f)}}, + {{TOBN(0xaffad7cc, 0x290a7f4f), TOBN(0x6b409c9e, 0x0286b461), + TOBN(0x58ab809f, 0xffa407af), TOBN(0xc3122eed, 0xc68ac073)}, + {TOBN(0x17bf9e50, 0x4ef24d7e), TOBN(0x5d929794, 0x3e2a5811), + TOBN(0x519bc867, 0x02902e01), TOBN(0x76bba5da, 0x39c8a851)}}, + {{TOBN(0xe9f9669c, 0xda94951e), TOBN(0x4b6af58d, 0x66b8d418), + TOBN(0xfa321074, 0x17d426a4), TOBN(0xc78e66a9, 0x9dde6027)}, + {TOBN(0x0516c083, 0x4a53b964), TOBN(0xfc659d38, 0xff602330), + TOBN(0x0ab55e5c, 0x58c5c897), TOBN(0x985099b2, 0x838bc5df)}}, + {{TOBN(0x061d9efc, 0xc52fc238), TOBN(0x712b2728, 0x6ac1da3f), + TOBN(0xfb658149, 0x9283fe08), TOBN(0x4954ac94, 0xb8aaa2f7)}, + {TOBN(0x85c0ada4, 0x7fb2e74f), TOBN(0xee8ba98e, 0xb89926b0), + TOBN(0xe4f9d37d, 0x23d1af5b), TOBN(0x14ccdbf9, 0xba9b015e)}}, + {{TOBN(0xb674481b, 0x7bfe7178), TOBN(0x4e1debae, 0x65405868), + TOBN(0x061b2821, 0xc48c867d), TOBN(0x69c15b35, 0x513b30ea)}, + {TOBN(0x3b4a1666, 0x36871088), TOBN(0xe5e29f5d, 0x1220b1ff), + TOBN(0x4b82bb35, 0x233d9f4d), TOBN(0x4e076333, 0x18cdc675)}}}, + {{{TOBN(0x0d53f5c7, 0xa3e6fced), TOBN(0xe8cbbdd5, 0xf45fbdeb), + TOBN(0xf85c01df, 0x13339a70), TOBN(0x0ff71880, 0x142ceb81)}, + {TOBN(0x4c4e8774, 0xbd70437a), TOBN(0x5fb32891, 0xba0bda6a), + TOBN(0x1cdbebd2, 0xf18bd26e), TOBN(0x2f9526f1, 0x03a9d522)}}, + {{TOBN(0x40ce3051, 0x92c4d684), TOBN(0x8b04d725, 0x7612efcd), + TOBN(0xb9dcda36, 0x6f9cae20), TOBN(0x0edc4d24, 0xf058856c)}, + {TOBN(0x64f2e6bf, 0x85427900), TOBN(0x3de81295, 0xdc09dfea), + TOBN(0xd41b4487, 0x379bf26c), TOBN(0x50b62c6d, 0x6df135a9)}}, + {{TOBN(0xd4f8e3b4, 0xc72dfe67), TOBN(0xc416b0f6, 0x90e19fdf), + TOBN(0x18b9098d, 0x4c13bd35), TOBN(0xac11118a, 0x15b8cb9e)}, + {TOBN(0xf598a318, 0xf0062841), TOBN(0xbfe0602f, 0x89f356f4), + TOBN(0x7ae3637e, 0x30177a0c), TOBN(0x34097747, 0x61136537)}}, + {{TOBN(0x0db2fb5e, 0xd005832a), TOBN(0x5f5efd3b, 0x91042e4f), + TOBN(0x8c4ffdc6, 0xed70f8ca), TOBN(0xe4645d0b, 0xb52da9cc)}, + {TOBN(0x9596f58b, 0xc9001d1f), TOBN(0x52c8f0bc, 0x4e117205), + TOBN(0xfd4aa0d2, 0xe398a084), TOBN(0x815bfe3a, 0x104f49de)}}, + {{TOBN(0x97e5443f, 0x23885e5f), TOBN(0xf72f8f99, 0xe8433aab), + TOBN(0xbd00b154, 0xe4d4e604), TOBN(0xd0b35e6a, 0xe5e173ff)}, + {TOBN(0x57b2a048, 0x9164722d), TOBN(0x3e3c665b, 0x88761ec8), + TOBN(0x6bdd1397, 0x3da83832), TOBN(0x3c8b1a1e, 0x73dafe3b)}}, + {{TOBN(0x4497ace6, 0x54317cac), TOBN(0xbe600ab9, 0x521771b3), + TOBN(0xb42e409e, 0xb0dfe8b8), TOBN(0x386a67d7, 0x3942310f)}, + {TOBN(0x25548d8d, 0x4431cc28), TOBN(0xa7cff142, 0x985dc524), + TOBN(0x4d60f5a1, 0x93c4be32), TOBN(0x83ebd5c8, 0xd071c6e1)}}, + {{TOBN(0xba3a80a7, 0xb1fd2b0b), TOBN(0x9b3ad396, 0x5bec33e8), + TOBN(0xb3868d61, 0x79743fb3), TOBN(0xcfd169fc, 0xfdb462fa)}, + {TOBN(0xd3b499d7, 0x9ce0a6af), TOBN(0x55dc1cf1, 0xe42d3ff8), + TOBN(0x04fb9e6c, 0xc6c3e1b2), TOBN(0x47e6961d, 0x6f69a474)}}, + {{TOBN(0x54eb3acc, 0xe548b37b), TOBN(0xb38e7542, 0x84d40549), + TOBN(0x8c3daa51, 0x7b341b4f), TOBN(0x2f6928ec, 0x690bf7fa)}, + {TOBN(0x0496b323, 0x86ce6c41), TOBN(0x01be1c55, 0x10adadcd), + TOBN(0xc04e67e7, 0x4bb5faf9), TOBN(0x3cbaf678, 0xe15c9985)}}, + {{TOBN(0x8cd12145, 0x50ca4247), TOBN(0xba1aa47a, 0xe7dd30aa), + TOBN(0x2f81ddf1, 0xe58fee24), TOBN(0x03452936, 0xeec9b0e8)}, + {TOBN(0x8bdc3b81, 0x243aea96), TOBN(0x9a2919af, 0x15c3d0e5), + TOBN(0x9ea640ec, 0x10948361), TOBN(0x5ac86d5b, 0x6e0bcccf)}}, + {{TOBN(0xf892d918, 0xc36cf440), TOBN(0xaed3e837, 0xc939719c), + TOBN(0xb07b08d2, 0xc0218b64), TOBN(0x6f1bcbba, 0xce9790dd)}, + {TOBN(0x4a84d6ed, 0x60919b8e), TOBN(0xd8900791, 0x8ac1f9eb), + TOBN(0xf84941aa, 0x0dd5daef), TOBN(0xb22fe40a, 0x67fd62c5)}}, + {{TOBN(0x97e15ba2, 0x157f2db3), TOBN(0xbda2fc8f, 0x8e28ca9c), + TOBN(0x5d050da4, 0x37b9f454), TOBN(0x3d57eb57, 0x2379d72e)}, + {TOBN(0xe9b5eba2, 0xfb5ee997), TOBN(0x01648ca2, 0xe11538ca), + TOBN(0x32bb76f6, 0xf6327974), TOBN(0x338f14b8, 0xff3f4bb7)}}, + {{TOBN(0x524d226a, 0xd7ab9a2d), TOBN(0x9c00090d, 0x7dfae958), + TOBN(0x0ba5f539, 0x8751d8c2), TOBN(0x8afcbcdd, 0x3ab8262d)}, + {TOBN(0x57392729, 0xe99d043b), TOBN(0xef51263b, 0xaebc943a), + TOBN(0x9feace93, 0x20862935), TOBN(0x639efc03, 0xb06c817b)}}, + {{TOBN(0x1fe054b3, 0x66b4be7a), TOBN(0x3f25a9de, 0x84a37a1e), + TOBN(0xf39ef1ad, 0x78d75cd9), TOBN(0xd7b58f49, 0x5062c1b5)}, + {TOBN(0x6f74f9a9, 0xff563436), TOBN(0xf718ff29, 0xe8af51e7), + TOBN(0x5234d313, 0x15e97fec), TOBN(0xb6a8e2b1, 0x292f1c0a)}}, + {{TOBN(0xa7f53aa8, 0x327720c1), TOBN(0x956ca322, 0xba092cc8), + TOBN(0x8f03d64a, 0x28746c4d), TOBN(0x51fe1782, 0x66d0d392)}, + {TOBN(0xd19b34db, 0x3c832c80), TOBN(0x60dccc5c, 0x6da2e3b4), + TOBN(0x245dd62e, 0x0a104ccc), TOBN(0xa7ab1de1, 0x620b21fd)}}, + {{TOBN(0xb293ae0b, 0x3893d123), TOBN(0xf7b75783, 0xb15ee71c), + TOBN(0x5aa3c614, 0x42a9468b), TOBN(0xd686123c, 0xdb15d744)}, + {TOBN(0x8c616891, 0xa7ab4116), TOBN(0x6fcd72c8, 0xa4e6a459), + TOBN(0xac219110, 0x77e5fad7), TOBN(0xfb6a20e7, 0x704fa46b)}}, + {{TOBN(0xe839be7d, 0x341d81dc), TOBN(0xcddb6889, 0x32148379), + TOBN(0xda6211a1, 0xf7026ead), TOBN(0xf3b2575f, 0xf4d1cc5e)}, + {TOBN(0x40cfc8f6, 0xa7a73ae6), TOBN(0x83879a5e, 0x61d5b483), + TOBN(0xc5acb1ed, 0x41a50ebc), TOBN(0x59a60cc8, 0x3c07d8fa)}}, + {{TOBN(0x1b73bdce, 0xb1876262), TOBN(0x2b0d79f0, 0x12af4ee9), + TOBN(0x8bcf3b0b, 0xd46e1d07), TOBN(0x17d6af9d, 0xe45d152f)}, + {TOBN(0x73520461, 0x6d736451), TOBN(0x43cbbd97, 0x56b0bf5a), + TOBN(0xb0833a5b, 0xd5999b9d), TOBN(0x702614f0, 0xeb72e398)}}, + {{TOBN(0x0aadf01a, 0x59c3e9f8), TOBN(0x40200e77, 0xce6b3d16), + TOBN(0xda22bdd3, 0xdeddafad), TOBN(0x76dedaf4, 0x310d72e1)}, + {TOBN(0x49ef807c, 0x4bc2e88f), TOBN(0x6ba81291, 0x146dd5a5), + TOBN(0xa1a4077a, 0x7d8d59e9), TOBN(0x87b6a2e7, 0x802db349)}}, + {{TOBN(0xd5679997, 0x1b4e598e), TOBN(0xf499ef1f, 0x06fe4b1d), + TOBN(0x3978d3ae, 0xfcb267c5), TOBN(0xb582b557, 0x235786d0)}, + {TOBN(0x32b3b2ca, 0x1715cb07), TOBN(0x4c3de6a2, 0x8480241d), + TOBN(0x63b5ffed, 0xcb571ecd), TOBN(0xeaf53900, 0xed2fe9a9)}}, + {{TOBN(0xdec98d4a, 0xc3b81990), TOBN(0x1cb83722, 0x9e0cc8fe), + TOBN(0xfe0b0491, 0xd2b427b9), TOBN(0x0f2386ac, 0xe983a66c)}, + {TOBN(0x930c4d1e, 0xb3291213), TOBN(0xa2f82b2e, 0x59a62ae4), + TOBN(0x77233853, 0xf93e89e3), TOBN(0x7f8063ac, 0x11777c7f)}}, + {{TOBN(0xff0eb567, 0x59ad2877), TOBN(0x6f454642, 0x9865c754), + TOBN(0xe6fe701a, 0x236e9a84), TOBN(0xc586ef16, 0x06e40fc3)}, + {TOBN(0x3f62b6e0, 0x24bafad9), TOBN(0xc8b42bd2, 0x64da906a), + TOBN(0xc98e1eb4, 0xda3276a0), TOBN(0x30d0e5fc, 0x06cbf852)}}, + {{TOBN(0x1b6b2ae1, 0xe8b4dfd4), TOBN(0xd754d5c7, 0x8301cbac), + TOBN(0x66097629, 0x112a39ac), TOBN(0xf86b5999, 0x93ba4ab9)}, + {TOBN(0x26c9dea7, 0x99f9d581), TOBN(0x0473b1a8, 0xc2fafeaa), + TOBN(0x1469af55, 0x3b2505a5), TOBN(0x227d16d7, 0xd6a43323)}}, + {{TOBN(0x3316f73c, 0xad3d97f9), TOBN(0x52bf3bb5, 0x1f137455), + TOBN(0x953eafeb, 0x09954e7c), TOBN(0xa721dfed, 0xdd732411)}, + {TOBN(0xb4929821, 0x141d4579), TOBN(0x3411321c, 0xaa3bd435), + TOBN(0xafb355aa, 0x17fa6015), TOBN(0xb4e7ef4a, 0x18e42f0e)}}, + {{TOBN(0x604ac97c, 0x59371000), TOBN(0xe1c48c70, 0x7f759c18), + TOBN(0x3f62ecc5, 0xa5db6b65), TOBN(0x0a78b173, 0x38a21495)}, + {TOBN(0x6be1819d, 0xbcc8ad94), TOBN(0x70dc04f6, 0xd89c3400), + TOBN(0x462557b4, 0xa6b4840a), TOBN(0x544c6ade, 0x60bd21c0)}}, + {{TOBN(0x6a00f24e, 0x907a544b), TOBN(0xa7520dcb, 0x313da210), + TOBN(0xfe939b75, 0x11e4994b), TOBN(0x918b6ba6, 0xbc275d70)}, + {TOBN(0xd3e5e0fc, 0x644be892), TOBN(0x707a9816, 0xfdaf6c42), + TOBN(0x60145567, 0xf15c13fe), TOBN(0x4818ebaa, 0xe130a54a)}}, + {{TOBN(0x28aad3ad, 0x58d2f767), TOBN(0xdc5267fd, 0xd7e7c773), + TOBN(0x4919cc88, 0xc3afcc98), TOBN(0xaa2e6ab0, 0x2db8cd4b)}, + {TOBN(0xd46fec04, 0xd0c63eaa), TOBN(0xa1cb92c5, 0x19ffa832), + TOBN(0x678dd178, 0xe43a631f), TOBN(0xfb5ae1cd, 0x3dc788b3)}}, + {{TOBN(0x68b4fb90, 0x6e77de04), TOBN(0x7992bcf0, 0xf06dbb97), + TOBN(0x896e6a13, 0xc417c01d), TOBN(0x8d96332c, 0xb956be01)}, + {TOBN(0x902fc93a, 0x413aa2b9), TOBN(0x99a4d915, 0xfc98c8a5), + TOBN(0x52c29407, 0x565f1137), TOBN(0x4072690f, 0x21e4f281)}}, + {{TOBN(0x36e607cf, 0x02ff6072), TOBN(0xa47d2ca9, 0x8ad98cdc), + TOBN(0xbf471d1e, 0xf5f56609), TOBN(0xbcf86623, 0xf264ada0)}, + {TOBN(0xb70c0687, 0xaa9e5cb6), TOBN(0xc98124f2, 0x17401c6c), + TOBN(0x8189635f, 0xd4a61435), TOBN(0xd28fb8af, 0xa9d98ea6)}}, + {{TOBN(0xb9a67c2a, 0x40c251f8), TOBN(0x88cd5d87, 0xa2da44be), + TOBN(0x437deb96, 0xe09b5423), TOBN(0x150467db, 0x64287dc1)}, + {TOBN(0xe161debb, 0xcdabb839), TOBN(0xa79e9742, 0xf1839a3e), + TOBN(0xbb8dd3c2, 0x652d202b), TOBN(0x7b3e67f7, 0xe9f97d96)}}, + {{TOBN(0x5aa5d78f, 0xb1cb6ac9), TOBN(0xffa13e8e, 0xca1d0d45), + TOBN(0x369295dd, 0x2ba5bf95), TOBN(0xd68bd1f8, 0x39aff05e)}, + {TOBN(0xaf0d86f9, 0x26d783f2), TOBN(0x543a59b3, 0xfc3aafc1), + TOBN(0x3fcf81d2, 0x7b7da97c), TOBN(0xc990a056, 0xd25dee46)}}, + {{TOBN(0x3e6775b8, 0x519cce2c), TOBN(0xfc9af71f, 0xae13d863), + TOBN(0x774a4a6f, 0x47c1605c), TOBN(0x46ba4245, 0x2fd205e8)}, + {TOBN(0xa06feea4, 0xd3fd524d), TOBN(0x1e724641, 0x6de1acc2), + TOBN(0xf53816f1, 0x334e2b42), TOBN(0x49e5918e, 0x922f0024)}}, + {{TOBN(0x439530b6, 0x65c7322d), TOBN(0xcf12cc01, 0xb3c1b3fb), + TOBN(0xc70b0186, 0x0172f685), TOBN(0xb915ee22, 0x1b58391d)}, + {TOBN(0x9afdf03b, 0xa317db24), TOBN(0x87dec659, 0x17b8ffc4), + TOBN(0x7f46597b, 0xe4d3d050), TOBN(0x80a1c1ed, 0x006500e7)}}, + {{TOBN(0x84902a96, 0x78bf030e), TOBN(0xfb5e9c9a, 0x50560148), + TOBN(0x6dae0a92, 0x63362426), TOBN(0xdcaeecf4, 0xa9e30c40)}, + {TOBN(0xc0d887bb, 0x518d0c6b), TOBN(0x99181152, 0xcb985b9d), + TOBN(0xad186898, 0xef7bc381), TOBN(0x18168ffb, 0x9ee46201)}}, + {{TOBN(0x9a04cdaa, 0x2502753c), TOBN(0xbb279e26, 0x51407c41), + TOBN(0xeacb03aa, 0xf23564e5), TOBN(0x18336582, 0x71e61016)}, + {TOBN(0x8684b8c4, 0xeb809877), TOBN(0xb336e18d, 0xea0e672e), + TOBN(0xefb601f0, 0x34ee5867), TOBN(0x2733edbe, 0x1341cfd1)}}, + {{TOBN(0xb15e809a, 0x26025c3c), TOBN(0xe6e981a6, 0x9350df88), + TOBN(0x92376237, 0x8502fd8e), TOBN(0x4791f216, 0x0c12be9b)}, + {TOBN(0xb7256789, 0x25f02425), TOBN(0xec863194, 0x7a974443), + TOBN(0x7c0ce882, 0xfb41cc52), TOBN(0xc266ff7e, 0xf25c07f2)}}, + {{TOBN(0x3d4da8c3, 0x017025f3), TOBN(0xefcf628c, 0xfb9579b4), + TOBN(0x5c4d0016, 0x1f3716ec), TOBN(0x9c27ebc4, 0x6801116e)}, + {TOBN(0x5eba0ea1, 0x1da1767e), TOBN(0xfe151452, 0x47004c57), + TOBN(0x3ace6df6, 0x8c2373b7), TOBN(0x75c3dffe, 0x5dbc37ac)}}, + {{TOBN(0x3dc32a73, 0xddc925fc), TOBN(0xb679c841, 0x2f65ee0b), + TOBN(0x715a3295, 0x451cbfeb), TOBN(0xd9889768, 0xf76e9a29)}, + {TOBN(0xec20ce7f, 0xb28ad247), TOBN(0xe99146c4, 0x00894d79), + TOBN(0x71457d7c, 0x9f5e3ea7), TOBN(0x097b2662, 0x38030031)}}, + {{TOBN(0xdb7f6ae6, 0xcf9f82a8), TOBN(0x319decb9, 0x438f473a), + TOBN(0xa63ab386, 0x283856c3), TOBN(0x13e3172f, 0xb06a361b)}, + {TOBN(0x2959f8dc, 0x7d5a006c), TOBN(0x2dbc27c6, 0x75fba752), + TOBN(0xc1227ab2, 0x87c22c9e), TOBN(0x06f61f75, 0x71a268b2)}}, + {{TOBN(0x1b6bb971, 0x04779ce2), TOBN(0xaca83812, 0x0aadcb1d), + TOBN(0x297ae0bc, 0xaeaab2d5), TOBN(0xa5c14ee7, 0x5bfb9f13)}, + {TOBN(0xaa00c583, 0xf17a62c7), TOBN(0x39eb962c, 0x173759f6), + TOBN(0x1eeba1d4, 0x86c9a88f), TOBN(0x0ab6c37a, 0xdf016c5e)}}, + {{TOBN(0xa2a147db, 0xa28a0749), TOBN(0x246c20d6, 0xee519165), + TOBN(0x5068d1b1, 0xd3810715), TOBN(0xb1e7018c, 0x748160b9)}, + {TOBN(0x03f5b1fa, 0xf380ff62), TOBN(0xef7fb1dd, 0xf3cb2c1e), + TOBN(0xeab539a8, 0xfc91a7da), TOBN(0x83ddb707, 0xf3f9b561)}}, + {{TOBN(0xc550e211, 0xfe7df7a4), TOBN(0xa7cd07f2, 0x063f6f40), + TOBN(0xb0de3635, 0x2976879c), TOBN(0xb5f83f85, 0xe55741da)}, + {TOBN(0x4ea9d25e, 0xf3d8ac3d), TOBN(0x6fe2066f, 0x62819f02), + TOBN(0x4ab2b9c2, 0xcef4a564), TOBN(0x1e155d96, 0x5ffa2de3)}}, + {{TOBN(0x0eb0a19b, 0xc3a72d00), TOBN(0x4037665b, 0x8513c31b), + TOBN(0x2fb2b6bf, 0x04c64637), TOBN(0x45c34d6e, 0x08cdc639)}, + {TOBN(0x56f1e10f, 0xf01fd796), TOBN(0x4dfb8101, 0xfe3667b8), + TOBN(0xe0eda253, 0x9021d0c0), TOBN(0x7a94e9ff, 0x8a06c6ab)}}, + {{TOBN(0x2d3bb0d9, 0xbb9aa882), TOBN(0xea20e4e5, 0xec05fd10), + TOBN(0xed7eeb5f, 0x1a1ca64e), TOBN(0x2fa6b43c, 0xc6327cbd)}, + {TOBN(0xb577e3cf, 0x3aa91121), TOBN(0x8c6bd5ea, 0x3a34079b), + TOBN(0xd7e5ba39, 0x60e02fc0), TOBN(0xf16dd2c3, 0x90141bf8)}}, + {{TOBN(0xb57276d9, 0x80101b98), TOBN(0x760883fd, 0xb82f0f66), + TOBN(0x89d7de75, 0x4bc3eff3), TOBN(0x03b60643, 0x5dc2ab40)}, + {TOBN(0xcd6e53df, 0xe05beeac), TOBN(0xf2f1e862, 0xbc3325cd), + TOBN(0xdd0f7921, 0x774f03c3), TOBN(0x97ca7221, 0x4552cc1b)}}, + {{TOBN(0x5a0d6afe, 0x1cd19f72), TOBN(0xa20915dc, 0xf183fbeb), + TOBN(0x9fda4b40, 0x832c403c), TOBN(0x32738edd, 0xbe425442)}, + {TOBN(0x469a1df6, 0xb5eccf1a), TOBN(0x4b5aff42, 0x28bbe1f0), + TOBN(0x31359d7f, 0x570dfc93), TOBN(0xa18be235, 0xf0088628)}}, + {{TOBN(0xa5b30fba, 0xb00ed3a9), TOBN(0x34c61374, 0x73cdf8be), + TOBN(0x2c5c5f46, 0xabc56797), TOBN(0x5cecf93d, 0xb82a8ae2)}, + {TOBN(0x7d3dbe41, 0xa968fbf0), TOBN(0xd23d4583, 0x1a5c7f3d), + TOBN(0xf28f69a0, 0xc087a9c7), TOBN(0xc2d75471, 0x474471ca)}}, + {{TOBN(0x36ec9f4a, 0x4eb732ec), TOBN(0x6c943bbd, 0xb1ca6bed), + TOBN(0xd64535e1, 0xf2457892), TOBN(0x8b84a8ea, 0xf7e2ac06)}, + {TOBN(0xe0936cd3, 0x2499dd5f), TOBN(0x12053d7e, 0x0ed04e57), + TOBN(0x4bdd0076, 0xe4305d9d), TOBN(0x34a527b9, 0x1f67f0a2)}}, + {{TOBN(0xe79a4af0, 0x9cec46ea), TOBN(0xb15347a1, 0x658b9bc7), + TOBN(0x6bd2796f, 0x35af2f75), TOBN(0xac957990, 0x4051c435)}, + {TOBN(0x2669dda3, 0xc33a655d), TOBN(0x5d503c2e, 0x88514aa3), + TOBN(0xdfa11337, 0x3753dd41), TOBN(0x3f054673, 0x0b754f78)}}, + {{TOBN(0xbf185677, 0x496125bd), TOBN(0xfb0023c8, 0x3775006c), + TOBN(0xfa0f072f, 0x3a037899), TOBN(0x4222b6eb, 0x0e4aea57)}, + {TOBN(0x3dde5e76, 0x7866d25a), TOBN(0xb6eb04f8, 0x4837aa6f), + TOBN(0x5315591a, 0x2cf1cdb8), TOBN(0x6dfb4f41, 0x2d4e683c)}}, + {{TOBN(0x7e923ea4, 0x48ee1f3a), TOBN(0x9604d9f7, 0x05a2afd5), + TOBN(0xbe1d4a33, 0x40ea4948), TOBN(0x5b45f1f4, 0xb44cbd2f)}, + {TOBN(0x5faf8376, 0x4acc757e), TOBN(0xa7cf9ab8, 0x63d68ff7), + TOBN(0x8ad62f69, 0xdf0e404b), TOBN(0xd65f33c2, 0x12bdafdf)}}, + {{TOBN(0xc365de15, 0xa377b14e), TOBN(0x6bf5463b, 0x8e39f60c), + TOBN(0x62030d2d, 0x2ce68148), TOBN(0xd95867ef, 0xe6f843a8)}, + {TOBN(0xd39a0244, 0xef5ab017), TOBN(0x0bd2d8c1, 0x4ab55d12), + TOBN(0xc9503db3, 0x41639169), TOBN(0x2d4e25b0, 0xf7660c8a)}}, + {{TOBN(0x760cb3b5, 0xe224c5d7), TOBN(0xfa3baf8c, 0x68616919), + TOBN(0x9fbca113, 0x8d142552), TOBN(0x1ab18bf1, 0x7669ebf5)}, + {TOBN(0x55e6f53e, 0x9bdf25dd), TOBN(0x04cc0bf3, 0xcb6cd154), + TOBN(0x595bef49, 0x95e89080), TOBN(0xfe9459a8, 0x104a9ac1)}}, + {{TOBN(0xad2d89ca, 0xcce9bb32), TOBN(0xddea65e1, 0xf7de8285), + TOBN(0x62ed8c35, 0xb351bd4b), TOBN(0x4150ff36, 0x0c0e19a7)}, + {TOBN(0x86e3c801, 0x345f4e47), TOBN(0x3bf21f71, 0x203a266c), + TOBN(0x7ae110d4, 0x855b1f13), TOBN(0x5d6aaf6a, 0x07262517)}}, + {{TOBN(0x1e0f12e1, 0x813d28f1), TOBN(0x6000e11d, 0x7ad7a523), + TOBN(0xc7d8deef, 0xc744a17b), TOBN(0x1e990b48, 0x14c05a00)}, + {TOBN(0x68fddaee, 0x93e976d5), TOBN(0x696241d1, 0x46610d63), + TOBN(0xb204e7c3, 0x893dda88), TOBN(0x8bccfa65, 0x6a3a6946)}}, + {{TOBN(0xb59425b4, 0xc5cd1411), TOBN(0x701b4042, 0xff3658b1), + TOBN(0xe3e56bca, 0x4784cf93), TOBN(0x27de5f15, 0x8fe68d60)}, + {TOBN(0x4ab9cfce, 0xf8d53f19), TOBN(0xddb10311, 0xa40a730d), + TOBN(0x6fa73cd1, 0x4eee0a8a), TOBN(0xfd548748, 0x5249719d)}}, + {{TOBN(0x49d66316, 0xa8123ef0), TOBN(0x73c32db4, 0xe7f95438), + TOBN(0x2e2ed209, 0x0d9e7854), TOBN(0xf98a9329, 0x9d9f0507)}, + {TOBN(0xc5d33cf6, 0x0c6aa20a), TOBN(0x9a32ba14, 0x75279bb2), + TOBN(0x7e3202cb, 0x774a7307), TOBN(0x64ed4bc4, 0xe8c42dbd)}}, + {{TOBN(0xc20f1a06, 0xd4caed0d), TOBN(0xb8021407, 0x171d22b3), + TOBN(0xd426ca04, 0xd13268d7), TOBN(0x92377007, 0x25f4d126)}, + {TOBN(0x4204cbc3, 0x71f21a85), TOBN(0x18461b7a, 0xf82369ba), + TOBN(0xc0c07d31, 0x3fc858f9), TOBN(0x5deb5a50, 0xe2bab569)}}, + {{TOBN(0xd5959d46, 0xd5eea89e), TOBN(0xfdff8424, 0x08437f4b), + TOBN(0xf21071e4, 0x3cfe254f), TOBN(0x72417696, 0x95468321)}, + {TOBN(0x5d8288b9, 0x102cae3e), TOBN(0x2d143e3d, 0xf1965dff), + TOBN(0x00c9a376, 0xa078d847), TOBN(0x6fc0da31, 0x26028731)}}, + {{TOBN(0xa2baeadf, 0xe45083a2), TOBN(0x66bc7218, 0x5e5b4bcd), + TOBN(0x2c826442, 0xd04b8e7f), TOBN(0xc19f5451, 0x6c4b586b)}, + {TOBN(0x60182c49, 0x5b7eeed5), TOBN(0xd9954ecd, 0x7aa9dfa1), + TOBN(0xa403a8ec, 0xc73884ad), TOBN(0x7fb17de2, 0x9bb39041)}}, + {{TOBN(0x694b64c5, 0xabb020e8), TOBN(0x3d18c184, 0x19c4eec7), + TOBN(0x9c4673ef, 0x1c4793e5), TOBN(0xc7b8aeb5, 0x056092e6)}, + {TOBN(0x3aa1ca43, 0xf0f8c16b), TOBN(0x224ed5ec, 0xd679b2f6), + TOBN(0x0d56eeaf, 0x55a205c9), TOBN(0xbfe115ba, 0x4b8e028b)}}, + {{TOBN(0x97e60849, 0x3927f4fe), TOBN(0xf91fbf94, 0x759aa7c5), + TOBN(0x985af769, 0x6be90a51), TOBN(0xc1277b78, 0x78ccb823)}, + {TOBN(0x395b656e, 0xe7a75952), TOBN(0x00df7de0, 0x928da5f5), + TOBN(0x09c23175, 0x4ca4454f), TOBN(0x4ec971f4, 0x7aa2d3c1)}}, + {{TOBN(0x45c3c507, 0xe75d9ccc), TOBN(0x63b7be8a, 0x3dc90306), + TOBN(0x37e09c66, 0x5db44bdc), TOBN(0x50d60da1, 0x6841c6a2)}, + {TOBN(0x6f9b65ee, 0x08df1b12), TOBN(0x38734879, 0x7ff089df), + TOBN(0x9c331a66, 0x3fe8013d), TOBN(0x017f5de9, 0x5f42fcc8)}}, + {{TOBN(0x43077866, 0xe8e57567), TOBN(0xc9f781ce, 0xf9fcdb18), + TOBN(0x38131dda, 0x9b12e174), TOBN(0x25d84aa3, 0x8a03752a)}, + {TOBN(0x45e09e09, 0x4d0c0ce2), TOBN(0x1564008b, 0x92bebba5), + TOBN(0xf7e8ad31, 0xa87284c7), TOBN(0xb7c4b46c, 0x97e7bbaa)}}, + {{TOBN(0x3e22a7b3, 0x97acf4ec), TOBN(0x0426c400, 0x5ea8b640), + TOBN(0x5e3295a6, 0x4e969285), TOBN(0x22aabc59, 0xa6a45670)}, + {TOBN(0xb929714c, 0x5f5942bc), TOBN(0x9a6168bd, 0xfa3182ed), + TOBN(0x2216a665, 0x104152ba), TOBN(0x46908d03, 0xb6926368)}}}, + {{{TOBN(0xa9f5d874, 0x5a1251fb), TOBN(0x967747a8, 0xc72725c7), + TOBN(0x195c33e5, 0x31ffe89e), TOBN(0x609d210f, 0xe964935e)}, + {TOBN(0xcafd6ca8, 0x2fe12227), TOBN(0xaf9b5b96, 0x0426469d), + TOBN(0x2e9ee04c, 0x5693183c), TOBN(0x1084a333, 0xc8146fef)}}, + {{TOBN(0x96649933, 0xaed1d1f7), TOBN(0x566eaff3, 0x50563090), + TOBN(0x345057f0, 0xad2e39cf), TOBN(0x148ff65b, 0x1f832124)}, + {TOBN(0x042e89d4, 0xcf94cf0d), TOBN(0x319bec84, 0x520c58b3), + TOBN(0x2a267626, 0x5361aa0d), TOBN(0xc86fa302, 0x8fbc87ad)}}, + {{TOBN(0xfc83d2ab, 0x5c8b06d5), TOBN(0xb1a785a2, 0xfe4eac46), + TOBN(0xb99315bc, 0x846f7779), TOBN(0xcf31d816, 0xef9ea505)}, + {TOBN(0x2391fe6a, 0x15d7dc85), TOBN(0x2f132b04, 0xb4016b33), + TOBN(0x29547fe3, 0x181cb4c7), TOBN(0xdb66d8a6, 0x650155a1)}}, + {{TOBN(0x6b66d7e1, 0xadc1696f), TOBN(0x98ebe593, 0x0acd72d0), + TOBN(0x65f24550, 0xcc1b7435), TOBN(0xce231393, 0xb4b9a5ec)}, + {TOBN(0x234a22d4, 0xdb067df9), TOBN(0x98dda095, 0xcaff9b00), + TOBN(0x1bbc75a0, 0x6100c9c1), TOBN(0x1560a9c8, 0x939cf695)}}, + {{TOBN(0xcf006d3e, 0x99e0925f), TOBN(0x2dd74a96, 0x6322375a), + TOBN(0xc58b446a, 0xb56af5ba), TOBN(0x50292683, 0xe0b9b4f1)}, + {TOBN(0xe2c34cb4, 0x1aeaffa3), TOBN(0x8b17203f, 0x9b9587c1), + TOBN(0x6d559207, 0xead1350c), TOBN(0x2b66a215, 0xfb7f9604)}}, + {{TOBN(0x0850325e, 0xfe51bf74), TOBN(0x9c4f579e, 0x5e460094), + TOBN(0x5c87b92a, 0x76da2f25), TOBN(0x889de4e0, 0x6febef33)}, + {TOBN(0x6900ec06, 0x646083ce), TOBN(0xbe2a0335, 0xbfe12773), + TOBN(0xadd1da35, 0xc5344110), TOBN(0x757568b7, 0xb802cd20)}}, + {{TOBN(0x75559779, 0x00f7e6c8), TOBN(0x38e8b94f, 0x0facd2f0), + TOBN(0xfea1f3af, 0x03fde375), TOBN(0x5e11a1d8, 0x75881dfc)}, + {TOBN(0xb3a6b02e, 0xc1e2f2ef), TOBN(0x193d2bbb, 0xc605a6c5), + TOBN(0x325ffeee, 0x339a0b2d), TOBN(0x27b6a724, 0x9e0c8846)}}, + {{TOBN(0xe4050f1c, 0xf1c367ca), TOBN(0x9bc85a9b, 0xc90fbc7d), + TOBN(0xa373c4a2, 0xe1a11032), TOBN(0xb64232b7, 0xad0393a9)}, + {TOBN(0xf5577eb0, 0x167dad29), TOBN(0x1604f301, 0x94b78ab2), + TOBN(0x0baa94af, 0xe829348b), TOBN(0x77fbd8dd, 0x41654342)}}, + {{TOBN(0xdab50ea5, 0xb964e39a), TOBN(0xd4c29e3c, 0xd0d3c76e), + TOBN(0x80dae67c, 0x56d11964), TOBN(0x7307a8bf, 0xe5ffcc2f)}, + {TOBN(0x65bbc1aa, 0x91708c3b), TOBN(0xa151e62c, 0x28bf0eeb), + TOBN(0x6cb53381, 0x6fa34db7), TOBN(0x5139e05c, 0xa29403a8)}}, + {{TOBN(0x6ff651b4, 0x94a7cd2e), TOBN(0x5671ffd1, 0x0699336c), + TOBN(0x6f5fd2cc, 0x979a896a), TOBN(0x11e893a8, 0xd8148cef)}, + {TOBN(0x988906a1, 0x65cf7b10), TOBN(0x81b67178, 0xc50d8485), + TOBN(0x7c0deb35, 0x8a35b3de), TOBN(0x423ac855, 0xc1d29799)}}, + {{TOBN(0xaf580d87, 0xdac50b74), TOBN(0x28b2b89f, 0x5869734c), + TOBN(0x99a3b936, 0x874e28fb), TOBN(0xbb2c9190, 0x25f3f73a)}, + {TOBN(0x199f6918, 0x84a9d5b7), TOBN(0x7ebe2325, 0x7e770374), + TOBN(0xf442e107, 0x0738efe2), TOBN(0xcf9f3f56, 0xcf9082d2)}}, + {{TOBN(0x719f69e1, 0x09618708), TOBN(0xcc9e8364, 0xc183f9b1), + TOBN(0xec203a95, 0x366a21af), TOBN(0x6aec5d6d, 0x068b141f)}, + {TOBN(0xee2df78a, 0x994f04e9), TOBN(0xb39ccae8, 0x271245b0), + TOBN(0xb875a4a9, 0x97e43f4f), TOBN(0x507dfe11, 0xdb2cea98)}}, + {{TOBN(0x4fbf81cb, 0x489b03e9), TOBN(0xdb86ec5b, 0x6ec414fa), + TOBN(0xfad444f9, 0xf51b3ae5), TOBN(0xca7d33d6, 0x1914e3fe)}, + {TOBN(0xa9c32f5c, 0x0ae6c4d0), TOBN(0xa9ca1d1e, 0x73969568), + TOBN(0x98043c31, 0x1aa7467e), TOBN(0xe832e75c, 0xe21b5ac6)}}, + {{TOBN(0x314b7aea, 0x5232123d), TOBN(0x08307c8c, 0x65ae86db), + TOBN(0x06e7165c, 0xaa4668ed), TOBN(0xb170458b, 0xb4d3ec39)}, + {TOBN(0x4d2e3ec6, 0xc19bb986), TOBN(0xc5f34846, 0xae0304ed), + TOBN(0x917695a0, 0x6c9f9722), TOBN(0x6c7f7317, 0x4cab1c0a)}}, + {{TOBN(0x6295940e, 0x9d6d2e8b), TOBN(0xd318b8c1, 0x549f7c97), + TOBN(0x22453204, 0x97713885), TOBN(0x468d834b, 0xa8a440fe)}, + {TOBN(0xd81fe5b2, 0xbfba796e), TOBN(0x152364db, 0x6d71f116), + TOBN(0xbb8c7c59, 0xb5b66e53), TOBN(0x0b12c61b, 0x2641a192)}}, + {{TOBN(0x31f14802, 0xfcf0a7fd), TOBN(0x42fd0789, 0x5488b01e), + TOBN(0x71d78d6d, 0x9952b498), TOBN(0x8eb572d9, 0x07ac5201)}, + {TOBN(0xe0a2a44c, 0x4d194a88), TOBN(0xd2b63fd9, 0xba017e66), + TOBN(0x78efc6c8, 0xf888aefc), TOBN(0xb76f6bda, 0x4a881a11)}}, + {{TOBN(0x187f314b, 0xb46c2397), TOBN(0x004cf566, 0x5ded2819), + TOBN(0xa9ea5704, 0x38764d34), TOBN(0xbba45217, 0x78084709)}, + {TOBN(0x06474571, 0x1171121e), TOBN(0xad7b7eb1, 0xe7c9b671), + TOBN(0xdacfbc40, 0x730f7507), TOBN(0x178cd8c6, 0xc7ad7bd1)}}, + {{TOBN(0xbf0be101, 0xb2a67238), TOBN(0x3556d367, 0xaf9c14f2), + TOBN(0x104b7831, 0xa5662075), TOBN(0x58ca59bb, 0x79d9e60a)}, + {TOBN(0x4bc45392, 0xa569a73b), TOBN(0x517a52e8, 0x5698f6c9), + TOBN(0x85643da5, 0xaeadd755), TOBN(0x1aed0cd5, 0x2a581b84)}}, + {{TOBN(0xb9b4ff84, 0x80af1372), TOBN(0x244c3113, 0xf1ba5d1f), + TOBN(0x2a5dacbe, 0xf5f98d31), TOBN(0x2c3323e8, 0x4375bc2a)}, + {TOBN(0x17a3ab4a, 0x5594b1dd), TOBN(0xa1928bfb, 0xceb4797e), + TOBN(0xe83af245, 0xe4886a19), TOBN(0x8979d546, 0x72b5a74a)}}, + {{TOBN(0xa0f726bc, 0x19f9e967), TOBN(0xd9d03152, 0xe8fbbf4e), + TOBN(0xcfd6f51d, 0xb7707d40), TOBN(0x633084d9, 0x63f6e6e0)}, + {TOBN(0xedcd9cdc, 0x55667eaf), TOBN(0x73b7f92b, 0x2e44d56f), + TOBN(0xfb2e39b6, 0x4e962b14), TOBN(0x7d408f6e, 0xf671fcbf)}}, + {{TOBN(0xcc634ddc, 0x164a89bb), TOBN(0x74a42bb2, 0x3ef3bd05), + TOBN(0x1280dbb2, 0x428decbb), TOBN(0x6103f6bb, 0x402c8596)}, + {TOBN(0xfa2bf581, 0x355a5752), TOBN(0x562f96a8, 0x00946674), + TOBN(0x4e4ca16d, 0x6da0223b), TOBN(0xfe47819f, 0x28d3aa25)}}, + {{TOBN(0x9eea3075, 0xf8dfcf8a), TOBN(0xa284f0aa, 0x95669825), + TOBN(0xb3fca250, 0x867d3fd8), TOBN(0x20757b5f, 0x269d691e)}, + {TOBN(0xf2c24020, 0x93b8a5de), TOBN(0xd3f93359, 0xebc06da6), + TOBN(0x1178293e, 0xb2739c33), TOBN(0xd2a3e770, 0xbcd686e5)}}, + {{TOBN(0xa76f49f4, 0xcd941534), TOBN(0x0d37406b, 0xe3c71c0e), + TOBN(0x172d9397, 0x3b97f7e3), TOBN(0xec17e239, 0xbd7fd0de)}, + {TOBN(0xe3290551, 0x6f496ba2), TOBN(0x6a693172, 0x36ad50e7), + TOBN(0xc4e539a2, 0x83e7eff5), TOBN(0x752737e7, 0x18e1b4cf)}}, + {{TOBN(0xa2f7932c, 0x68af43ee), TOBN(0x5502468e, 0x703d00bd), + TOBN(0xe5dc978f, 0x2fb061f5), TOBN(0xc9a1904a, 0x28c815ad)}, + {TOBN(0xd3af538d, 0x470c56a4), TOBN(0x159abc5f, 0x193d8ced), + TOBN(0x2a37245f, 0x20108ef3), TOBN(0xfa17081e, 0x223f7178)}}, + {{TOBN(0x27b0fb2b, 0x10c8c0f5), TOBN(0x2102c3ea, 0x40650547), + TOBN(0x594564df, 0x8ac3bfa7), TOBN(0x98102033, 0x509dad96)}, + {TOBN(0x6989643f, 0xf1d18a13), TOBN(0x35eebd91, 0xd7fc5af0), + TOBN(0x078d096a, 0xfaeaafd8), TOBN(0xb7a89341, 0xdef3de98)}}, + {{TOBN(0x2a206e8d, 0xecf2a73a), TOBN(0x066a6397, 0x8e551994), + TOBN(0x3a6a088a, 0xb98d53a2), TOBN(0x0ce7c67c, 0x2d1124aa)}, + {TOBN(0x48cec671, 0x759a113c), TOBN(0xe3b373d3, 0x4f6f67fa), + TOBN(0x5455d479, 0xfd36727b), TOBN(0xe5a428ee, 0xa13c0d81)}}, + {{TOBN(0xb853dbc8, 0x1c86682b), TOBN(0xb78d2727, 0xb8d02b2a), + TOBN(0xaaf69bed, 0x8ebc329a), TOBN(0xdb6b40b3, 0x293b2148)}, + {TOBN(0xe42ea77d, 0xb8c4961f), TOBN(0xb1a12f7c, 0x20e5e0ab), + TOBN(0xa0ec5274, 0x79e8b05e), TOBN(0x68027391, 0xfab60a80)}}, + {{TOBN(0x6bfeea5f, 0x16b1bd5e), TOBN(0xf957e420, 0x4de30ad3), + TOBN(0xcbaf664e, 0x6a353b9e), TOBN(0x5c873312, 0x26d14feb)}, + {TOBN(0x4e87f98c, 0xb65f57cb), TOBN(0xdb60a621, 0x5e0cdd41), + TOBN(0x67c16865, 0xa6881440), TOBN(0x1093ef1a, 0x46ab52aa)}}, + {{TOBN(0xc095afb5, 0x3f4ece64), TOBN(0x6a6bb02e, 0x7604551a), + TOBN(0x55d44b4e, 0x0b26b8cd), TOBN(0xe5f9a999, 0xf971268a)}, + {TOBN(0xc08ec425, 0x11a7de84), TOBN(0x83568095, 0xfda469dd), + TOBN(0x737bfba1, 0x6c6c90a2), TOBN(0x1cb9c4a0, 0xbe229831)}}, + {{TOBN(0x93bccbba, 0xbb2eec64), TOBN(0xa0c23b64, 0xda03adbe), + TOBN(0x5f7aa00a, 0xe0e86ac4), TOBN(0x470b941e, 0xfc1401e6)}, + {TOBN(0x5ad8d679, 0x9df43574), TOBN(0x4ccfb8a9, 0x0f65d810), + TOBN(0x1bce80e3, 0xaa7fbd81), TOBN(0x273291ad, 0x9508d20a)}}, + {{TOBN(0xf5c4b46b, 0x42a92806), TOBN(0x810684ec, 0xa86ab44a), + TOBN(0x4591640b, 0xca0bc9f8), TOBN(0xb5efcdfc, 0x5c4b6054)}, + {TOBN(0x16fc8907, 0x6e9edd12), TOBN(0xe29d0b50, 0xd4d792f9), + TOBN(0xa45fd01c, 0x9b03116d), TOBN(0x85035235, 0xc81765a4)}}, + {{TOBN(0x1fe2a9b2, 0xb4b4b67c), TOBN(0xc1d10df0, 0xe8020604), + TOBN(0x9d64abfc, 0xbc8058d8), TOBN(0x8943b9b2, 0x712a0fbb)}, + {TOBN(0x90eed914, 0x3b3def04), TOBN(0x85ab3aa2, 0x4ce775ff), + TOBN(0x605fd4ca, 0x7bbc9040), TOBN(0x8b34a564, 0xe2c75dfb)}}, + {{TOBN(0x41ffc94a, 0x10358560), TOBN(0x2d8a5072, 0x9e5c28aa), + TOBN(0xe915a0fc, 0x4cc7eb15), TOBN(0xe9efab05, 0x8f6d0f5d)}, + {TOBN(0xdbab47a9, 0xd19e9b91), TOBN(0x8cfed745, 0x0276154c), + TOBN(0x154357ae, 0x2cfede0d), TOBN(0x520630df, 0x19f5a4ef)}}, + {{TOBN(0x25759f7c, 0xe382360f), TOBN(0xb6db05c9, 0x88bf5857), + TOBN(0x2917d61d, 0x6c58d46c), TOBN(0x14f8e491, 0xfd20cb7a)}, + {TOBN(0xb68a727a, 0x11c20340), TOBN(0x0386f86f, 0xaf7ccbb6), + TOBN(0x5c8bc6cc, 0xfee09a20), TOBN(0x7d76ff4a, 0xbb7eea35)}}, + {{TOBN(0xa7bdebe7, 0xdb15be7a), TOBN(0x67a08054, 0xd89f0302), + TOBN(0x56bf0ea9, 0xc1193364), TOBN(0xc8244467, 0x62837ebe)}, + {TOBN(0x32bd8e8b, 0x20d841b8), TOBN(0x127a0548, 0xdbb8a54f), + TOBN(0x83dd4ca6, 0x63b20236), TOBN(0x87714718, 0x203491fa)}}, + {{TOBN(0x4dabcaaa, 0xaa8a5288), TOBN(0x91cc0c8a, 0xaf23a1c9), + TOBN(0x34c72c6a, 0x3f220e0c), TOBN(0xbcc20bdf, 0x1232144a)}, + {TOBN(0x6e2f42da, 0xa20ede1b), TOBN(0xc441f00c, 0x74a00515), + TOBN(0xbf46a5b6, 0x734b8c4b), TOBN(0x57409503, 0x7b56c9a4)}}, + {{TOBN(0x9f735261, 0xe4585d45), TOBN(0x9231faed, 0x6734e642), + TOBN(0x1158a176, 0xbe70ee6c), TOBN(0x35f1068d, 0x7c3501bf)}, + {TOBN(0x6beef900, 0xa2d26115), TOBN(0x649406f2, 0xef0afee3), + TOBN(0x3f43a60a, 0xbc2420a1), TOBN(0x509002a7, 0xd5aee4ac)}}, + {{TOBN(0xb46836a5, 0x3ff3571b), TOBN(0x24f98b78, 0x837927c1), + TOBN(0x6254256a, 0x4533c716), TOBN(0xf27abb0b, 0xd07ee196)}, + {TOBN(0xd7cf64fc, 0x5c6d5bfd), TOBN(0x6915c751, 0xf0cd7a77), + TOBN(0xd9f59012, 0x8798f534), TOBN(0x772b0da8, 0xf81d8b5f)}}, + {{TOBN(0x1244260c, 0x2e03fa69), TOBN(0x36cf0e3a, 0x3be1a374), + TOBN(0x6e7c1633, 0xef06b960), TOBN(0xa71a4c55, 0x671f90f6)}, + {TOBN(0x7a941251, 0x33c673db), TOBN(0xc0bea510, 0x73e8c131), + TOBN(0x61a8a699, 0xd4f6c734), TOBN(0x25e78c88, 0x341ed001)}}, + {{TOBN(0x5c18acf8, 0x8e2f7d90), TOBN(0xfdbf33d7, 0x77be32cd), + TOBN(0x0a085cd7, 0xd2eb5ee9), TOBN(0x2d702cfb, 0xb3201115)}, + {TOBN(0xb6e0ebdb, 0x85c88ce8), TOBN(0x23a3ce3c, 0x1e01d617), + TOBN(0x3041618e, 0x567333ac), TOBN(0x9dd0fd8f, 0x157edb6b)}}, + {{TOBN(0x27f74702, 0xb57872b8), TOBN(0x2ef26b4f, 0x657d5fe1), + TOBN(0x95426f0a, 0x57cf3d40), TOBN(0x847e2ad1, 0x65a6067a)}, + {TOBN(0xd474d9a0, 0x09996a74), TOBN(0x16a56acd, 0x2a26115c), + TOBN(0x02a615c3, 0xd16f4d43), TOBN(0xcc3fc965, 0xaadb85b7)}}, + {{TOBN(0x386bda73, 0xce07d1b0), TOBN(0xd82910c2, 0x58ad4178), + TOBN(0x124f82cf, 0xcd2617f4), TOBN(0xcc2f5e8d, 0xef691770)}, + {TOBN(0x82702550, 0xb8c30ccc), TOBN(0x7b856aea, 0x1a8e575a), + TOBN(0xbb822fef, 0xb1ab9459), TOBN(0x085928bc, 0xec24e38e)}}, + {{TOBN(0x5d0402ec, 0xba8f4b4d), TOBN(0xc07cd4ba, 0x00b4d58b), + TOBN(0x5d8dffd5, 0x29227e7a), TOBN(0x61d44d0c, 0x31bf386f)}, + {TOBN(0xe486dc2b, 0x135e6f4d), TOBN(0x680962eb, 0xe79410ef), + TOBN(0xa61bd343, 0xf10088b5), TOBN(0x6aa76076, 0xe2e28686)}}, + {{TOBN(0x80463d11, 0x8fb98871), TOBN(0xcb26f5c3, 0xbbc76aff), + TOBN(0xd4ab8edd, 0xfbe03614), TOBN(0xc8eb579b, 0xc0cf2dee)}, + {TOBN(0xcc004c15, 0xc93bae41), TOBN(0x46fbae5d, 0x3aeca3b2), + TOBN(0x671235cf, 0x0f1e9ab1), TOBN(0xadfba934, 0x9ec285c1)}}, + {{TOBN(0x88ded013, 0xf216c980), TOBN(0xc8ac4fb8, 0xf79e0bc1), + TOBN(0xa29b89c6, 0xfb97a237), TOBN(0xb697b780, 0x9922d8e7)}, + {TOBN(0x3142c639, 0xddb945b5), TOBN(0x447b06c7, 0xe094c3a9), + TOBN(0xcdcb3642, 0x72266c90), TOBN(0x633aad08, 0xa9385046)}}, + {{TOBN(0xa36c936b, 0xb57c6477), TOBN(0x871f8b64, 0xe94dbcc6), + TOBN(0x28d0fb62, 0xa591a67b), TOBN(0x9d40e081, 0xc1d926f5)}, + {TOBN(0x3111eaf6, 0xf2d84b5a), TOBN(0x228993f9, 0xa565b644), + TOBN(0x0ccbf592, 0x2c83188b), TOBN(0xf87b30ab, 0x3df3e197)}}, + {{TOBN(0xb8658b31, 0x7642bca8), TOBN(0x1a032d7f, 0x52800f17), + TOBN(0x051dcae5, 0x79bf9445), TOBN(0xeba6b8ee, 0x54a2e253)}, + {TOBN(0x5c8b9cad, 0xd4485692), TOBN(0x84bda40e, 0x8986e9be), + TOBN(0xd16d16a4, 0x2f0db448), TOBN(0x8ec80050, 0xa14d4188)}}, + {{TOBN(0xb2b26107, 0x98fa7aaa), TOBN(0x41209ee4, 0xf073aa4e), + TOBN(0xf1570359, 0xf2d6b19b), TOBN(0xcbe6868c, 0xfc577caf)}, + {TOBN(0x186c4bdc, 0x32c04dd3), TOBN(0xa6c35fae, 0xcfeee397), + TOBN(0xb4a1b312, 0xf086c0cf), TOBN(0xe0a5ccc6, 0xd9461fe2)}}, + {{TOBN(0xc32278aa, 0x1536189f), TOBN(0x1126c55f, 0xba6df571), + TOBN(0x0f71a602, 0xb194560e), TOBN(0x8b2d7405, 0x324bd6e1)}, + {TOBN(0x8481939e, 0x3738be71), TOBN(0xb5090b1a, 0x1a4d97a9), + TOBN(0x116c65a3, 0xf05ba915), TOBN(0x21863ad3, 0xaae448aa)}}, + {{TOBN(0xd24e2679, 0xa7aae5d3), TOBN(0x7076013d, 0x0de5c1c4), + TOBN(0x2d50f8ba, 0xbb05b629), TOBN(0x73c1abe2, 0x6e66efbb)}, + {TOBN(0xefd4b422, 0xf2488af7), TOBN(0xe4105d02, 0x663ba575), + TOBN(0x7eb60a8b, 0x53a69457), TOBN(0x62210008, 0xc945973b)}}, + {{TOBN(0xfb255478, 0x77a50ec6), TOBN(0xbf0392f7, 0x0a37a72c), + TOBN(0xa0a7a19c, 0x4be18e7a), TOBN(0x90d8ea16, 0x25b1e0af)}, + {TOBN(0x7582a293, 0xef953f57), TOBN(0x90a64d05, 0xbdc5465a), + TOBN(0xca79c497, 0xe2510717), TOBN(0x560dbb7c, 0x18cb641f)}}, + {{TOBN(0x1d8e3286, 0x4b66abfb), TOBN(0xd26f52e5, 0x59030900), + TOBN(0x1ee3f643, 0x5584941a), TOBN(0x6d3b3730, 0x569f5958)}, + {TOBN(0x9ff2a62f, 0x4789dba5), TOBN(0x91fcb815, 0x72b5c9b7), + TOBN(0xf446cb7d, 0x6c8f9a0e), TOBN(0x48f625c1, 0x39b7ecb5)}}, + {{TOBN(0xbabae801, 0x1c6219b8), TOBN(0xe7a562d9, 0x28ac2f23), + TOBN(0xe1b48732, 0x26e20588), TOBN(0x06ee1cad, 0x775af051)}, + {TOBN(0xda29ae43, 0xfaff79f7), TOBN(0xc141a412, 0x652ee9e0), + TOBN(0x1e127f6f, 0x195f4bd0), TOBN(0x29c6ab4f, 0x072f34f8)}}, + {{TOBN(0x7b7c1477, 0x30448112), TOBN(0x82b51af1, 0xe4a38656), + TOBN(0x2bf2028a, 0x2f315010), TOBN(0xc9a4a01f, 0x6ea88cd4)}, + {TOBN(0xf63e95d8, 0x257e5818), TOBN(0xdd8efa10, 0xb4519b16), + TOBN(0xed8973e0, 0x0da910bf), TOBN(0xed49d077, 0x5c0fe4a9)}}, + {{TOBN(0xac3aac5e, 0xb7caee1e), TOBN(0x1033898d, 0xa7f4da57), + TOBN(0x42145c0e, 0x5c6669b9), TOBN(0x42daa688, 0xc1aa2aa0)}, + {TOBN(0x629cc15c, 0x1a1d885a), TOBN(0x25572ec0, 0xf4b76817), + TOBN(0x8312e435, 0x9c8f8f28), TOBN(0x8107f8cd, 0x81965490)}}, + {{TOBN(0x516ff3a3, 0x6fa6110c), TOBN(0x74fb1eb1, 0xfb93561f), + TOBN(0x6c0c9047, 0x8457522b), TOBN(0xcfd32104, 0x6bb8bdc6)}, + {TOBN(0x2d6884a2, 0xcc80ad57), TOBN(0x7c27fc35, 0x86a9b637), + TOBN(0x3461baed, 0xadf4e8cd), TOBN(0x1d56251a, 0x617242f0)}}, + {{TOBN(0x0b80d209, 0xc955bef4), TOBN(0xdf02cad2, 0x06adb047), + TOBN(0xf0d7cb91, 0x5ec74fee), TOBN(0xd2503375, 0x1111ba44)}, + {TOBN(0x9671755e, 0xdf53cb36), TOBN(0x54dcb612, 0x3368551b), + TOBN(0x66d69aac, 0xc8a025a4), TOBN(0x6be946c6, 0xe77ef445)}}, + {{TOBN(0x719946d1, 0xa995e094), TOBN(0x65e848f6, 0xe51e04d8), + TOBN(0xe62f3300, 0x6a1e3113), TOBN(0x1541c7c1, 0x501de503)}, + {TOBN(0x4daac9fa, 0xf4acfade), TOBN(0x0e585897, 0x44cd0b71), + TOBN(0x544fd869, 0x0a51cd77), TOBN(0x60fc20ed, 0x0031016d)}}, + {{TOBN(0x58b404ec, 0xa4276867), TOBN(0x46f6c3cc, 0x34f34993), + TOBN(0x477ca007, 0xc636e5bd), TOBN(0x8018f5e5, 0x7c458b47)}, + {TOBN(0xa1202270, 0xe47b668f), TOBN(0xcef48ccd, 0xee14f203), + TOBN(0x23f98bae, 0x62ff9b4d), TOBN(0x55acc035, 0xc589eddd)}}, + {{TOBN(0x3fe712af, 0x64db4444), TOBN(0x19e9d634, 0xbecdd480), + TOBN(0xe08bc047, 0xa930978a), TOBN(0x2dbf24ec, 0xa1280733)}, + {TOBN(0x3c0ae38c, 0x2cd706b2), TOBN(0x5b012a5b, 0x359017b9), + TOBN(0x3943c38c, 0x72e0f5ae), TOBN(0x786167ea, 0x57176fa3)}}, + {{TOBN(0xe5f9897d, 0x594881dc), TOBN(0x6b5efad8, 0xcfb820c1), + TOBN(0xb2179093, 0xd55018de), TOBN(0x39ad7d32, 0x0bac56ce)}, + {TOBN(0xb55122e0, 0x2cfc0e81), TOBN(0x117c4661, 0xf6d89daa), + TOBN(0x362d01e1, 0xcb64fa09), TOBN(0x6a309b4e, 0x3e9c4ddd)}}, + {{TOBN(0xfa979fb7, 0xabea49b1), TOBN(0xb4b1d27d, 0x10e2c6c5), + TOBN(0xbd61c2c4, 0x23afde7a), TOBN(0xeb6614f8, 0x9786d358)}, + {TOBN(0x4a5d816b, 0x7f6f7459), TOBN(0xe431a44f, 0x09360e7b), + TOBN(0x8c27a032, 0xc309914c), TOBN(0xcea5d68a, 0xcaede3d8)}}, + {{TOBN(0x3668f665, 0x3a0a3f95), TOBN(0x89369416, 0x7ceba27b), + TOBN(0x89981fad, 0xe4728fe9), TOBN(0x7102c8a0, 0x8a093562)}, + {TOBN(0xbb80310e, 0x235d21c8), TOBN(0x505e55d1, 0xbefb7f7b), + TOBN(0xa0a90811, 0x12958a67), TOBN(0xd67e106a, 0x4d851fef)}}, + {{TOBN(0xb84011a9, 0x431dd80e), TOBN(0xeb7c7cca, 0x73306cd9), + TOBN(0x20fadd29, 0xd1b3b730), TOBN(0x83858b5b, 0xfe37b3d3)}, + {TOBN(0xbf4cd193, 0xb6251d5c), TOBN(0x1cca1fd3, 0x1352d952), + TOBN(0xc66157a4, 0x90fbc051), TOBN(0x7990a638, 0x89b98636)}}}, + {{{TOBN(0xe5aa692a, 0x87dec0e1), TOBN(0x010ded8d, 0xf7b39d00), + TOBN(0x7b1b80c8, 0x54cfa0b5), TOBN(0x66beb876, 0xa0f8ea28)}, + {TOBN(0x50d7f531, 0x3476cd0e), TOBN(0xa63d0e65, 0xb08d3949), + TOBN(0x1a09eea9, 0x53479fc6), TOBN(0x82ae9891, 0xf499e742)}}, + {{TOBN(0xab58b910, 0x5ca7d866), TOBN(0x582967e2, 0x3adb3b34), + TOBN(0x89ae4447, 0xcceac0bc), TOBN(0x919c667c, 0x7bf56af5)}, + {TOBN(0x9aec17b1, 0x60f5dcd7), TOBN(0xec697b9f, 0xddcaadbc), + TOBN(0x0b98f341, 0x463467f5), TOBN(0xb187f1f7, 0xa967132f)}}, + {{TOBN(0x90fe7a1d, 0x214aeb18), TOBN(0x1506af3c, 0x741432f7), + TOBN(0xbb5565f9, 0xe591a0c4), TOBN(0x10d41a77, 0xb44f1bc3)}, + {TOBN(0xa09d65e4, 0xa84bde96), TOBN(0x42f060d8, 0xf20a6a1c), + TOBN(0x652a3bfd, 0xf27f9ce7), TOBN(0xb6bdb65c, 0x3b3d739f)}}, + {{TOBN(0xeb5ddcb6, 0xec7fae9f), TOBN(0x995f2714, 0xefb66e5a), + TOBN(0xdee95d8e, 0x69445d52), TOBN(0x1b6c2d46, 0x09e27620)}, + {TOBN(0x32621c31, 0x8129d716), TOBN(0xb03909f1, 0x0958c1aa), + TOBN(0x8c468ef9, 0x1af4af63), TOBN(0x162c429f, 0xfba5cdf6)}}, + {{TOBN(0x2f682343, 0x753b9371), TOBN(0x29cab45a, 0x5f1f9cd7), + TOBN(0x571623ab, 0xb245db96), TOBN(0xc507db09, 0x3fd79999)}, + {TOBN(0x4e2ef652, 0xaf036c32), TOBN(0x86f0cc78, 0x05018e5c), + TOBN(0xc10a73d4, 0xab8be350), TOBN(0x6519b397, 0x7e826327)}}, + {{TOBN(0xe8cb5eef, 0x9c053df7), TOBN(0x8de25b37, 0xb300ea6f), + TOBN(0xdb03fa92, 0xc849cffb), TOBN(0x242e43a7, 0xe84169bb)}, + {TOBN(0xe4fa51f4, 0xdd6f958e), TOBN(0x6925a77f, 0xf4445a8d), + TOBN(0xe6e72a50, 0xe90d8949), TOBN(0xc66648e3, 0x2b1f6390)}}, + {{TOBN(0xb2ab1957, 0x173e460c), TOBN(0x1bbbce75, 0x30704590), + TOBN(0xc0a90dbd, 0xdb1c7162), TOBN(0x505e399e, 0x15cdd65d)}, + {TOBN(0x68434dcb, 0x57797ab7), TOBN(0x60ad35ba, 0x6a2ca8e8), + TOBN(0x4bfdb1e0, 0xde3336c1), TOBN(0xbbef99eb, 0xd8b39015)}}, + {{TOBN(0x6c3b96f3, 0x1711ebec), TOBN(0x2da40f1f, 0xce98fdc4), + TOBN(0xb99774d3, 0x57b4411f), TOBN(0x87c8bdf4, 0x15b65bb6)}, + {TOBN(0xda3a89e3, 0xc2eef12d), TOBN(0xde95bb9b, 0x3c7471f3), + TOBN(0x600f225b, 0xd812c594), TOBN(0x54907c5d, 0x2b75a56b)}}, + {{TOBN(0xa93cc5f0, 0x8db60e35), TOBN(0x743e3cd6, 0xfa833319), + TOBN(0x7dad5c41, 0xf81683c9), TOBN(0x70c1e7d9, 0x9c34107e)}, + {TOBN(0x0edc4a39, 0xa6be0907), TOBN(0x36d47035, 0x86d0b7d3), + TOBN(0x8c76da03, 0x272bfa60), TOBN(0x0b4a07ea, 0x0f08a414)}}, + {{TOBN(0x699e4d29, 0x45c1dd53), TOBN(0xcadc5898, 0x231debb5), + TOBN(0xdf49fcc7, 0xa77f00e0), TOBN(0x93057bbf, 0xa73e5a0e)}, + {TOBN(0x2f8b7ecd, 0x027a4cd1), TOBN(0x114734b3, 0xc614011a), + TOBN(0xe7a01db7, 0x67677c68), TOBN(0x89d9be5e, 0x7e273f4f)}}, + {{TOBN(0xd225cb2e, 0x089808ef), TOBN(0xf1f7a27d, 0xd59e4107), + TOBN(0x53afc761, 0x8211b9c9), TOBN(0x0361bc67, 0xe6819159)}, + {TOBN(0x2a865d0b, 0x7f071426), TOBN(0x6a3c1810, 0xe7072567), + TOBN(0x3e3bca1e, 0x0d6bcabd), TOBN(0xa1b02bc1, 0x408591bc)}}, + {{TOBN(0xe0deee59, 0x31fba239), TOBN(0xf47424d3, 0x98bd91d1), + TOBN(0x0f8886f4, 0x071a3c1d), TOBN(0x3f7d41e8, 0xa819233b)}, + {TOBN(0x708623c2, 0xcf6eb998), TOBN(0x86bb49af, 0x609a287f), + TOBN(0x942bb249, 0x63c90762), TOBN(0x0ef6eea5, 0x55a9654b)}}, + {{TOBN(0x5f6d2d72, 0x36f5defe), TOBN(0xfa9922dc, 0x56f99176), + TOBN(0x6c8c5ece, 0xf78ce0c7), TOBN(0x7b44589d, 0xbe09b55e)}, + {TOBN(0xe11b3bca, 0x9ea83770), TOBN(0xd7fa2c7f, 0x2ab71547), + TOBN(0x2a3dd6fa, 0x2a1ddcc0), TOBN(0x09acb430, 0x5a7b7707)}}, + {{TOBN(0x4add4a2e, 0x649d4e57), TOBN(0xcd53a2b0, 0x1917526e), + TOBN(0xc5262330, 0x20b44ac4), TOBN(0x4028746a, 0xbaa2c31d)}, + {TOBN(0x51318390, 0x64291d4c), TOBN(0xbf48f151, 0xee5ad909), + TOBN(0xcce57f59, 0x7b185681), TOBN(0x7c3ac1b0, 0x4854d442)}}, + {{TOBN(0x65587dc3, 0xc093c171), TOBN(0xae7acb24, 0x24f42b65), + TOBN(0x5a338adb, 0x955996cb), TOBN(0xc8e65675, 0x6051f91b)}, + {TOBN(0x66711fba, 0x28b8d0b1), TOBN(0x15d74137, 0xb6c10a90), + TOBN(0x70cdd7eb, 0x3a232a80), TOBN(0xc9e2f07f, 0x6191ed24)}}, + {{TOBN(0xa80d1db6, 0xf79588c0), TOBN(0xfa52fc69, 0xb55768cc), + TOBN(0x0b4df1ae, 0x7f54438a), TOBN(0x0cadd1a7, 0xf9b46a4f)}, + {TOBN(0xb40ea6b3, 0x1803dd6f), TOBN(0x488e4fa5, 0x55eaae35), + TOBN(0x9f047d55, 0x382e4e16), TOBN(0xc9b5b7e0, 0x2f6e0c98)}}, + {{TOBN(0x6b1bd2d3, 0x95762649), TOBN(0xa9604ee7, 0xc7aea3f6), + TOBN(0x3646ff27, 0x6dc6f896), TOBN(0x9bf0e7f5, 0x2860bad1)}, + {TOBN(0x2d92c821, 0x7cb44b92), TOBN(0xa2f5ce63, 0xaea9c182), + TOBN(0xd0a2afb1, 0x9154a5fd), TOBN(0x482e474c, 0x95801da6)}}, + {{TOBN(0xc19972d0, 0xb611c24b), TOBN(0x1d468e65, 0x60a8f351), + TOBN(0xeb758069, 0x7bcf6421), TOBN(0xec9dd0ee, 0x88fbc491)}, + {TOBN(0x5b59d2bf, 0x956c2e32), TOBN(0x73dc6864, 0xdcddf94e), + TOBN(0xfd5e2321, 0xbcee7665), TOBN(0xa7b4f8ef, 0x5e9a06c4)}}, + {{TOBN(0xfba918dd, 0x7280f855), TOBN(0xbbaac260, 0x8baec688), + TOBN(0xa3b3f00f, 0x33400f42), TOBN(0x3d2dba29, 0x66f2e6e4)}, + {TOBN(0xb6f71a94, 0x98509375), TOBN(0x8f33031f, 0xcea423cc), + TOBN(0x009b8dd0, 0x4807e6fb), TOBN(0x5163cfe5, 0x5cdb954c)}}, + {{TOBN(0x03cc8f17, 0xcf41c6e8), TOBN(0xf1f03c2a, 0x037b925c), + TOBN(0xc39c19cc, 0x66d2427c), TOBN(0x823d24ba, 0x7b6c18e4)}, + {TOBN(0x32ef9013, 0x901f0b4f), TOBN(0x684360f1, 0xf8941c2e), + TOBN(0x0ebaff52, 0x2c28092e), TOBN(0x7891e4e3, 0x256c932f)}}, + {{TOBN(0x51264319, 0xac445e3d), TOBN(0x553432e7, 0x8ea74381), + TOBN(0xe6eeaa69, 0x67e9c50a), TOBN(0x27ced284, 0x62e628c7)}, + {TOBN(0x3f96d375, 0x7a4afa57), TOBN(0xde0a14c3, 0xe484c150), + TOBN(0x364a24eb, 0x38bd9923), TOBN(0x1df18da0, 0xe5177422)}}, + {{TOBN(0x174e8f82, 0xd8d38a9b), TOBN(0x2e97c600, 0xe7de1391), + TOBN(0xc5709850, 0xa1c175dd), TOBN(0x969041a0, 0x32ae5035)}, + {TOBN(0xcbfd533b, 0x76a2086b), TOBN(0xd6bba71b, 0xd7c2e8fe), + TOBN(0xb2d58ee6, 0x099dfb67), TOBN(0x3a8b342d, 0x064a85d9)}}, + {{TOBN(0x3bc07649, 0x522f9be3), TOBN(0x690c075b, 0xdf1f49a8), + TOBN(0x80e1aee8, 0x3854ec42), TOBN(0x2a7dbf44, 0x17689dc7)}, + {TOBN(0xc004fc0e, 0x3faf4078), TOBN(0xb2f02e9e, 0xdf11862c), + TOBN(0xf10a5e0f, 0xa0a1b7b3), TOBN(0x30aca623, 0x8936ec80)}}, + {{TOBN(0xf83cbf05, 0x02f40d9a), TOBN(0x4681c468, 0x2c318a4d), + TOBN(0x98575618, 0x0e9c2674), TOBN(0xbe79d046, 0x1847092e)}, + {TOBN(0xaf1e480a, 0x78bd01e0), TOBN(0x6dd359e4, 0x72a51db9), + TOBN(0x62ce3821, 0xe3afbab6), TOBN(0xc5cee5b6, 0x17733199)}}, + {{TOBN(0xe08b30d4, 0x6ffd9fbb), TOBN(0x6e5bc699, 0x36c610b7), + TOBN(0xf343cff2, 0x9ce262cf), TOBN(0xca2e4e35, 0x68b914c1)}, + {TOBN(0x011d64c0, 0x16de36c5), TOBN(0xe0b10fdd, 0x42e2b829), + TOBN(0x78942981, 0x6685aaf8), TOBN(0xe7511708, 0x230ede97)}}, + {{TOBN(0x671ed8fc, 0x3b922bf8), TOBN(0xe4d8c0a0, 0x4c29b133), + TOBN(0x87eb1239, 0x3b6e99c4), TOBN(0xaff3974c, 0x8793beba)}, + {TOBN(0x03749405, 0x2c18df9b), TOBN(0xc5c3a293, 0x91007139), + TOBN(0x6a77234f, 0xe37a0b95), TOBN(0x02c29a21, 0xb661c96b)}}, + {{TOBN(0xc3aaf1d6, 0x141ecf61), TOBN(0x9195509e, 0x3bb22f53), + TOBN(0x29597404, 0x22d51357), TOBN(0x1b083822, 0x537bed60)}, + {TOBN(0xcd7d6e35, 0xe07289f0), TOBN(0x1f94c48c, 0x6dd86eff), + TOBN(0xc8bb1f82, 0xeb0f9cfa), TOBN(0x9ee0b7e6, 0x1b2eb97d)}}, + {{TOBN(0x5a52fe2e, 0x34d74e31), TOBN(0xa352c310, 0x3bf79ab6), + TOBN(0x97ff6c5a, 0xabfeeb8f), TOBN(0xbfbe8fef, 0xf5c97305)}, + {TOBN(0xd6081ce6, 0xa7904608), TOBN(0x1f812f3a, 0xc4fca249), + TOBN(0x9b24bc9a, 0xb9e5e200), TOBN(0x91022c67, 0x38012ee8)}}, + {{TOBN(0xe83d9c5d, 0x30a713a1), TOBN(0x4876e3f0, 0x84ef0f93), + TOBN(0xc9777029, 0xc1fbf928), TOBN(0xef7a6bb3, 0xbce7d2a4)}, + {TOBN(0xb8067228, 0xdfa2a659), TOBN(0xd5cd3398, 0xd877a48f), + TOBN(0xbea4fd8f, 0x025d0f3f), TOBN(0xd67d2e35, 0x2eae7c2b)}}, + {{TOBN(0x184de7d7, 0xcc5f4394), TOBN(0xb5551b5c, 0x4536e142), + TOBN(0x2e89b212, 0xd34aa60a), TOBN(0x14a96fea, 0xf50051d5)}, + {TOBN(0x4e21ef74, 0x0d12bb0b), TOBN(0xc522f020, 0x60b9677e), + TOBN(0x8b12e467, 0x2df7731d), TOBN(0x39f80382, 0x7b326d31)}}, + {{TOBN(0xdfb8630c, 0x39024a94), TOBN(0xaacb96a8, 0x97319452), + TOBN(0xd68a3961, 0xeda3867c), TOBN(0x0c58e2b0, 0x77c4ffca)}, + {TOBN(0x3d545d63, 0x4da919fa), TOBN(0xef79b69a, 0xf15e2289), + TOBN(0x54bc3d3d, 0x808bab10), TOBN(0xc8ab3007, 0x45f82c37)}}, + {{TOBN(0xc12738b6, 0x7c4a658a), TOBN(0xb3c47639, 0x40e72182), + TOBN(0x3b77be46, 0x8798e44f), TOBN(0xdc047df2, 0x17a7f85f)}, + {TOBN(0x2439d4c5, 0x5e59d92d), TOBN(0xcedca475, 0xe8e64d8d), + TOBN(0xa724cd0d, 0x87ca9b16), TOBN(0x35e4fd59, 0xa5540dfe)}}, + {{TOBN(0xf8c1ff18, 0xe4bcf6b1), TOBN(0x856d6285, 0x295018fa), + TOBN(0x433f665c, 0x3263c949), TOBN(0xa6a76dd6, 0xa1f21409)}, + {TOBN(0x17d32334, 0xcc7b4f79), TOBN(0xa1d03122, 0x06720e4a), + TOBN(0xadb6661d, 0x81d9bed5), TOBN(0xf0d6fb02, 0x11db15d1)}}, + {{TOBN(0x7fd11ad5, 0x1fb747d2), TOBN(0xab50f959, 0x3033762b), + TOBN(0x2a7e711b, 0xfbefaf5a), TOBN(0xc7393278, 0x3fef2bbf)}, + {TOBN(0xe29fa244, 0x0df6f9be), TOBN(0x9092757b, 0x71efd215), + TOBN(0xee60e311, 0x4f3d6fd9), TOBN(0x338542d4, 0x0acfb78b)}}, + {{TOBN(0x44a23f08, 0x38961a0f), TOBN(0x1426eade, 0x986987ca), + TOBN(0x36e6ee2e, 0x4a863cc6), TOBN(0x48059420, 0x628b8b79)}, + {TOBN(0x30303ad8, 0x7396e1de), TOBN(0x5c8bdc48, 0x38c5aad1), + TOBN(0x3e40e11f, 0x5c8f5066), TOBN(0xabd6e768, 0x8d246bbd)}}, + {{TOBN(0x68aa40bb, 0x23330a01), TOBN(0xd23f5ee4, 0xc34eafa0), + TOBN(0x3bbee315, 0x5de02c21), TOBN(0x18dd4397, 0xd1d8dd06)}, + {TOBN(0x3ba1939a, 0x122d7b44), TOBN(0xe6d3b40a, 0xa33870d6), + TOBN(0x8e620f70, 0x1c4fe3f8), TOBN(0xf6bba1a5, 0xd3a50cbf)}}, + {{TOBN(0x4a78bde5, 0xcfc0aee0), TOBN(0x847edc46, 0xc08c50bd), + TOBN(0xbaa2439c, 0xad63c9b2), TOBN(0xceb4a728, 0x10fc2acb)}, + {TOBN(0xa419e40e, 0x26da033d), TOBN(0x6cc3889d, 0x03e02683), + TOBN(0x1cd28559, 0xfdccf725), TOBN(0x0fd7e0f1, 0x8d13d208)}}, + {{TOBN(0x01b9733b, 0x1f0df9d4), TOBN(0x8cc2c5f3, 0xa2b5e4f3), + TOBN(0x43053bfa, 0x3a304fd4), TOBN(0x8e87665c, 0x0a9f1aa7)}, + {TOBN(0x087f29ec, 0xd73dc965), TOBN(0x15ace455, 0x3e9023db), + TOBN(0x2370e309, 0x2bce28b4), TOBN(0xf9723442, 0xb6b1e84a)}}, + {{TOBN(0xbeee662e, 0xb72d9f26), TOBN(0xb19396de, 0xf0e47109), + TOBN(0x85b1fa73, 0xe13289d0), TOBN(0x436cf77e, 0x54e58e32)}, + {TOBN(0x0ec833b3, 0xe990ef77), TOBN(0x7373e3ed, 0x1b11fc25), + TOBN(0xbe0eda87, 0x0fc332ce), TOBN(0xced04970, 0x8d7ea856)}}, + {{TOBN(0xf85ff785, 0x7e977ca0), TOBN(0xb66ee8da, 0xdfdd5d2b), + TOBN(0xf5e37950, 0x905af461), TOBN(0x587b9090, 0x966d487c)}, + {TOBN(0x6a198a1b, 0x32ba0127), TOBN(0xa7720e07, 0x141615ac), + TOBN(0xa23f3499, 0x996ef2f2), TOBN(0xef5f64b4, 0x470bcb3d)}}, + {{TOBN(0xa526a962, 0x92b8c559), TOBN(0x0c14aac0, 0x69740a0f), + TOBN(0x0d41a9e3, 0xa6bdc0a5), TOBN(0x97d52106, 0x9c48aef4)}, + {TOBN(0xcf16bd30, 0x3e7c253b), TOBN(0xcc834b1a, 0x47fdedc1), + TOBN(0x7362c6e5, 0x373aab2e), TOBN(0x264ed85e, 0xc5f590ff)}}, + {{TOBN(0x7a46d9c0, 0x66d41870), TOBN(0xa50c20b1, 0x4787ba09), + TOBN(0x185e7e51, 0xe3d44635), TOBN(0xb3b3e080, 0x31e2d8dc)}, + {TOBN(0xbed1e558, 0xa179e9d9), TOBN(0x2daa3f79, 0x74a76781), + TOBN(0x4372baf2, 0x3a40864f), TOBN(0x46900c54, 0x4fe75cb5)}}, + {{TOBN(0xb95f171e, 0xf76765d0), TOBN(0x4ad726d2, 0x95c87502), + TOBN(0x2ec769da, 0x4d7c99bd), TOBN(0x5e2ddd19, 0xc36cdfa8)}, + {TOBN(0xc22117fc, 0xa93e6dea), TOBN(0xe8a2583b, 0x93771123), + TOBN(0xbe2f6089, 0xfa08a3a2), TOBN(0x4809d5ed, 0x8f0e1112)}}, + {{TOBN(0x3b414aa3, 0xda7a095e), TOBN(0x9049acf1, 0x26f5aadd), + TOBN(0x78d46a4d, 0x6be8b84a), TOBN(0xd66b1963, 0xb732b9b3)}, + {TOBN(0x5c2ac2a0, 0xde6e9555), TOBN(0xcf52d098, 0xb5bd8770), + TOBN(0x15a15fa6, 0x0fd28921), TOBN(0x56ccb81e, 0x8b27536d)}}, + {{TOBN(0x0f0d8ab8, 0x9f4ccbb8), TOBN(0xed5f44d2, 0xdb221729), + TOBN(0x43141988, 0x00bed10c), TOBN(0xc94348a4, 0x1d735b8b)}, + {TOBN(0x79f3e9c4, 0x29ef8479), TOBN(0x4c13a4e3, 0x614c693f), + TOBN(0x32c9af56, 0x8e143a14), TOBN(0xbc517799, 0xe29ac5c4)}}, + {{TOBN(0x05e17992, 0x2774856f), TOBN(0x6e52fb05, 0x6c1bf55f), + TOBN(0xaeda4225, 0xe4f19e16), TOBN(0x70f4728a, 0xaf5ccb26)}, + {TOBN(0x5d2118d1, 0xb2947f22), TOBN(0xc827ea16, 0x281d6fb9), + TOBN(0x8412328d, 0x8cf0eabd), TOBN(0x45ee9fb2, 0x03ef9dcf)}}, + {{TOBN(0x8e700421, 0xbb937d63), TOBN(0xdf8ff2d5, 0xcc4b37a6), + TOBN(0xa4c0d5b2, 0x5ced7b68), TOBN(0x6537c1ef, 0xc7308f59)}, + {TOBN(0x25ce6a26, 0x3b37f8e8), TOBN(0x170e9a9b, 0xdeebc6ce), + TOBN(0xdd037952, 0x8728d72c), TOBN(0x445b0e55, 0x850154bc)}}, + {{TOBN(0x4b7d0e06, 0x83a7337b), TOBN(0x1e3416d4, 0xffecf249), + TOBN(0x24840eff, 0x66a2b71f), TOBN(0xd0d9a50a, 0xb37cc26d)}, + {TOBN(0xe2198150, 0x6fe28ef7), TOBN(0x3cc5ef16, 0x23324c7f), + TOBN(0x220f3455, 0x769b5263), TOBN(0xe2ade2f1, 0xa10bf475)}}, + {{TOBN(0x28cd20fa, 0x458d3671), TOBN(0x1549722c, 0x2dc4847b), + TOBN(0x6dd01e55, 0x591941e3), TOBN(0x0e6fbcea, 0x27128ccb)}, + {TOBN(0xae1a1e6b, 0x3bef0262), TOBN(0xfa8c472c, 0x8f54e103), + TOBN(0x7539c0a8, 0x72c052ec), TOBN(0xd7b27369, 0x5a3490e9)}}, + {{TOBN(0x143fe1f1, 0x71684349), TOBN(0x36b4722e, 0x32e19b97), + TOBN(0xdc059227, 0x90980aff), TOBN(0x175c9c88, 0x9e13d674)}, + {TOBN(0xa7de5b22, 0x6e6bfdb1), TOBN(0x5ea5b7b2, 0xbedb4b46), + TOBN(0xd5570191, 0xd34a6e44), TOBN(0xfcf60d2e, 0xa24ff7e6)}}, + {{TOBN(0x614a392d, 0x677819e1), TOBN(0x7be74c7e, 0xaa5a29e8), + TOBN(0xab50fece, 0x63c85f3f), TOBN(0xaca2e2a9, 0x46cab337)}, + {TOBN(0x7f700388, 0x122a6fe3), TOBN(0xdb69f703, 0x882a04a8), + TOBN(0x9a77935d, 0xcf7aed57), TOBN(0xdf16207c, 0x8d91c86f)}}, + {{TOBN(0x2fca49ab, 0x63ed9998), TOBN(0xa3125c44, 0xa77ddf96), + TOBN(0x05dd8a86, 0x24344072), TOBN(0xa023dda2, 0xfec3fb56)}, + {TOBN(0x421b41fc, 0x0c743032), TOBN(0x4f2120c1, 0x5e438639), + TOBN(0xfb7cae51, 0xc83c1b07), TOBN(0xb2370caa, 0xcac2171a)}}, + {{TOBN(0x2eb2d962, 0x6cc820fb), TOBN(0x59feee5c, 0xb85a44bf), + TOBN(0x94620fca, 0x5b6598f0), TOBN(0x6b922cae, 0x7e314051)}, + {TOBN(0xff8745ad, 0x106bed4e), TOBN(0x546e71f5, 0xdfa1e9ab), + TOBN(0x935c1e48, 0x1ec29487), TOBN(0x9509216c, 0x4d936530)}}, + {{TOBN(0xc7ca3067, 0x85c9a2db), TOBN(0xd6ae5152, 0x6be8606f), + TOBN(0x09dbcae6, 0xe14c651d), TOBN(0xc9536e23, 0x9bc32f96)}, + {TOBN(0xa90535a9, 0x34521b03), TOBN(0xf39c526c, 0x878756ff), + TOBN(0x383172ec, 0x8aedf03c), TOBN(0x20a8075e, 0xefe0c034)}}, + {{TOBN(0xf22f9c62, 0x64026422), TOBN(0x8dd10780, 0x24b9d076), + TOBN(0x944c742a, 0x3bef2950), TOBN(0x55b9502e, 0x88a2b00b)}, + {TOBN(0xa59e14b4, 0x86a09817), TOBN(0xa39dd3ac, 0x47bb4071), + TOBN(0x55137f66, 0x3be0592f), TOBN(0x07fcafd4, 0xc9e63f5b)}}, + {{TOBN(0x963652ee, 0x346eb226), TOBN(0x7dfab085, 0xec2facb7), + TOBN(0x273bf2b8, 0x691add26), TOBN(0x30d74540, 0xf2b46c44)}, + {TOBN(0x05e8e73e, 0xf2c2d065), TOBN(0xff9b8a00, 0xd42eeac9), + TOBN(0x2fcbd205, 0x97209d22), TOBN(0xeb740ffa, 0xde14ea2c)}}, + {{TOBN(0xc71ff913, 0xa8aef518), TOBN(0x7bfc74bb, 0xfff4cfa2), + TOBN(0x1716680c, 0xb6b36048), TOBN(0x121b2cce, 0x9ef79af1)}, + {TOBN(0xbff3c836, 0xa01eb3d3), TOBN(0x50eb1c6a, 0x5f79077b), + TOBN(0xa48c32d6, 0xa004bbcf), TOBN(0x47a59316, 0x7d64f61d)}}, + {{TOBN(0x6068147f, 0x93102016), TOBN(0x12c5f654, 0x94d12576), + TOBN(0xefb071a7, 0xc9bc6b91), TOBN(0x7c2da0c5, 0x6e23ea95)}, + {TOBN(0xf4fd45b6, 0xd4a1dd5d), TOBN(0x3e7ad9b6, 0x9122b13c), + TOBN(0x342ca118, 0xe6f57a48), TOBN(0x1c2e94a7, 0x06f8288f)}}, + {{TOBN(0x99e68f07, 0x5a97d231), TOBN(0x7c80de97, 0x4d838758), + TOBN(0xbce0f5d0, 0x05872727), TOBN(0xbe5d95c2, 0x19c4d016)}, + {TOBN(0x921d5cb1, 0x9c2492ee), TOBN(0x42192dc1, 0x404d6fb3), + TOBN(0x4c84dcd1, 0x32f988d3), TOBN(0xde26d61f, 0xa17b8e85)}}, + {{TOBN(0xc466dcb6, 0x137c7408), TOBN(0x9a38d7b6, 0x36a266da), + TOBN(0x7ef5cb06, 0x83bebf1b), TOBN(0xe5cdcbbf, 0x0fd014e3)}, + {TOBN(0x30aa376d, 0xf65965a0), TOBN(0x60fe88c2, 0xebb3e95e), + TOBN(0x33fd0b61, 0x66ee6f20), TOBN(0x8827dcdb, 0x3f41f0a0)}}, + {{TOBN(0xbf8a9d24, 0x0c56c690), TOBN(0x40265dad, 0xddb7641d), + TOBN(0x522b05bf, 0x3a6b662b), TOBN(0x466d1dfe, 0xb1478c9b)}, + {TOBN(0xaa616962, 0x1484469b), TOBN(0x0db60549, 0x02df8f9f), + TOBN(0xc37bca02, 0x3cb8bf51), TOBN(0x5effe346, 0x21371ce8)}}, + {{TOBN(0xe8f65264, 0xff112c32), TOBN(0x8a9c736d, 0x7b971fb2), + TOBN(0xa4f19470, 0x7b75080d), TOBN(0xfc3f2c5a, 0x8839c59b)}, + {TOBN(0x1d6c777e, 0x5aeb49c2), TOBN(0xf3db034d, 0xda1addfe), + TOBN(0xd76fee5a, 0x5535affc), TOBN(0x0853ac70, 0xb92251fd)}}, + {{TOBN(0x37e3d594, 0x8b2a29d5), TOBN(0x28f1f457, 0x4de00ddb), + TOBN(0x8083c1b5, 0xf42c328b), TOBN(0xd8ef1d8f, 0xe493c73b)}, + {TOBN(0x96fb6260, 0x41dc61bd), TOBN(0xf74e8a9d, 0x27ee2f8a), + TOBN(0x7c605a80, 0x2c946a5d), TOBN(0xeed48d65, 0x3839ccfd)}}, + {{TOBN(0x9894344f, 0x3a29467a), TOBN(0xde81e949, 0xc51eba6d), + TOBN(0xdaea066b, 0xa5e5c2f2), TOBN(0x3fc8a614, 0x08c8c7b3)}, + {TOBN(0x7adff88f, 0x06d0de9f), TOBN(0xbbc11cf5, 0x3b75ce0a), + TOBN(0x9fbb7acc, 0xfbbc87d5), TOBN(0xa1458e26, 0x7badfde2)}}}, + {{{TOBN(0x1cb43668, 0xe039c256), TOBN(0x5f26fb8b, 0x7c17fd5d), + TOBN(0xeee426af, 0x79aa062b), TOBN(0x072002d0, 0xd78fbf04)}, + {TOBN(0x4c9ca237, 0xe84fb7e3), TOBN(0xb401d8a1, 0x0c82133d), + TOBN(0xaaa52592, 0x6d7e4181), TOBN(0xe9430833, 0x73dbb152)}}, + {{TOBN(0xf92dda31, 0xbe24319a), TOBN(0x03f7d28b, 0xe095a8e7), + TOBN(0xa52fe840, 0x98782185), TOBN(0x276ddafe, 0x29c24dbc)}, + {TOBN(0x80cd5496, 0x1d7a64eb), TOBN(0xe4360889, 0x7f1dbe42), + TOBN(0x2f81a877, 0x8438d2d5), TOBN(0x7e4d52a8, 0x85169036)}}, + {{TOBN(0x19e3d5b1, 0x1d59715d), TOBN(0xc7eaa762, 0xd788983e), + TOBN(0xe5a730b0, 0xabf1f248), TOBN(0xfbab8084, 0xfae3fd83)}, + {TOBN(0x65e50d21, 0x53765b2f), TOBN(0xbdd4e083, 0xfa127f3d), + TOBN(0x9cf3c074, 0x397b1b10), TOBN(0x59f8090c, 0xb1b59fd3)}}, + {{TOBN(0x7b15fd9d, 0x615faa8f), TOBN(0x8fa1eb40, 0x968554ed), + TOBN(0x7bb4447e, 0x7aa44882), TOBN(0x2bb2d0d1, 0x029fff32)}, + {TOBN(0x075e2a64, 0x6caa6d2f), TOBN(0x8eb879de, 0x22e7351b), + TOBN(0xbcd5624e, 0x9a506c62), TOBN(0x218eaef0, 0xa87e24dc)}}, + {{TOBN(0x37e56847, 0x44ddfa35), TOBN(0x9ccfc5c5, 0xdab3f747), + TOBN(0x9ac1df3f, 0x1ee96cf4), TOBN(0x0c0571a1, 0x3b480b8f)}, + {TOBN(0x2fbeb3d5, 0x4b3a7b3c), TOBN(0x35c03669, 0x5dcdbb99), + TOBN(0x52a0f5dc, 0xb2415b3a), TOBN(0xd57759b4, 0x4413ed9a)}}, + {{TOBN(0x1fe647d8, 0x3d30a2c5), TOBN(0x0857f77e, 0xf78a81dc), + TOBN(0x11d5a334, 0x131a4a9b), TOBN(0xc0a94af9, 0x29d393f5)}, + {TOBN(0xbc3a5c0b, 0xdaa6ec1a), TOBN(0xba9fe493, 0x88d2d7ed), + TOBN(0xbb4335b4, 0xbb614797), TOBN(0x991c4d68, 0x72f83533)}}, + {{TOBN(0x53258c28, 0xd2f01cb3), TOBN(0x93d6eaa3, 0xd75db0b1), + TOBN(0x419a2b0d, 0xe87d0db4), TOBN(0xa1e48f03, 0xd8fe8493)}, + {TOBN(0xf747faf6, 0xc508b23a), TOBN(0xf137571a, 0x35d53549), + TOBN(0x9f5e58e2, 0xfcf9b838), TOBN(0xc7186cee, 0xa7fd3cf5)}}, + {{TOBN(0x77b868ce, 0xe978a1d3), TOBN(0xe3a68b33, 0x7ab92d04), + TOBN(0x51029794, 0x87a5b862), TOBN(0x5f0606c3, 0x3a61d41d)}, + {TOBN(0x2814be27, 0x6f9326f1), TOBN(0x2f521c14, 0xc6fe3c2e), + TOBN(0x17464d7d, 0xacdf7351), TOBN(0x10f5f9d3, 0x777f7e44)}}, + {{TOBN(0xce8e616b, 0x269fb37d), TOBN(0xaaf73804, 0x7de62de5), + TOBN(0xaba11175, 0x4fdd4153), TOBN(0x515759ba, 0x3770b49b)}, + {TOBN(0x8b09ebf8, 0xaa423a61), TOBN(0x592245a1, 0xcd41fb92), + TOBN(0x1cba8ec1, 0x9b4c8936), TOBN(0xa87e91e3, 0xaf36710e)}}, + {{TOBN(0x1fd84ce4, 0x3d34a2e3), TOBN(0xee3759ce, 0xb43b5d61), + TOBN(0x895bc78c, 0x619186c7), TOBN(0xf19c3809, 0xcbb9725a)}, + {TOBN(0xc0be21aa, 0xde744b1f), TOBN(0xa7d222b0, 0x60f8056b), + TOBN(0x74be6157, 0xb23efe11), TOBN(0x6fab2b4f, 0x0cd68253)}}, + {{TOBN(0xad33ea5f, 0x4bf1d725), TOBN(0x9c1d8ee2, 0x4f6c950f), + TOBN(0x544ee78a, 0xa377af06), TOBN(0x54f489bb, 0x94a113e1)}, + {TOBN(0x8f11d634, 0x992fb7e8), TOBN(0x0169a7aa, 0xa2a44347), + TOBN(0x1d49d4af, 0x95020e00), TOBN(0x95945722, 0xe08e120b)}}, + {{TOBN(0xb6e33878, 0xa4d32282), TOBN(0xe36e029d, 0x48020ae7), + TOBN(0xe05847fb, 0x37a9b750), TOBN(0xf876812c, 0xb29e3819)}, + {TOBN(0x84ad138e, 0xd23a17f0), TOBN(0x6d7b4480, 0xf0b3950e), + TOBN(0xdfa8aef4, 0x2fd67ae0), TOBN(0x8d3eea24, 0x52333af6)}}, + {{TOBN(0x0d052075, 0xb15d5acc), TOBN(0xc6d9c79f, 0xbd815bc4), + TOBN(0x8dcafd88, 0xdfa36cf2), TOBN(0x908ccbe2, 0x38aa9070)}, + {TOBN(0x638722c4, 0xba35afce), TOBN(0x5a3da8b0, 0xfd6abf0b), + TOBN(0x2dce252c, 0xc9c335c1), TOBN(0x84e7f0de, 0x65aa799b)}}, + {{TOBN(0x2101a522, 0xb99a72cb), TOBN(0x06de6e67, 0x87618016), + TOBN(0x5ff8c7cd, 0xe6f3653e), TOBN(0x0a821ab5, 0xc7a6754a)}, + {TOBN(0x7e3fa52b, 0x7cb0b5a2), TOBN(0xa7fb121c, 0xc9048790), + TOBN(0x1a725020, 0x06ce053a), TOBN(0xb490a31f, 0x04e929b0)}}, + {{TOBN(0xe17be47d, 0x62dd61ad), TOBN(0x781a961c, 0x6be01371), + TOBN(0x1063bfd3, 0xdae3cbba), TOBN(0x35647406, 0x7f73c9ba)}, + {TOBN(0xf50e957b, 0x2736a129), TOBN(0xa6313702, 0xed13f256), + TOBN(0x9436ee65, 0x3a19fcc5), TOBN(0xcf2bdb29, 0xe7a4c8b6)}}, + {{TOBN(0xb06b1244, 0xc5f95cd8), TOBN(0xda8c8af0, 0xf4ab95f4), + TOBN(0x1bae59c2, 0xb9e5836d), TOBN(0x07d51e7e, 0x3acffffc)}, + {TOBN(0x01e15e6a, 0xc2ccbcda), TOBN(0x3bc1923f, 0x8528c3e0), + TOBN(0x43324577, 0xa49fead4), TOBN(0x61a1b884, 0x2aa7a711)}}, + {{TOBN(0xf9a86e08, 0x700230ef), TOBN(0x0af585a1, 0xbd19adf8), + TOBN(0x7645f361, 0xf55ad8f2), TOBN(0x6e676223, 0x46c3614c)}, + {TOBN(0x23cb257c, 0x4e774d3f), TOBN(0x82a38513, 0xac102d1b), + TOBN(0x9bcddd88, 0x7b126aa5), TOBN(0xe716998b, 0xeefd3ee4)}}, + {{TOBN(0x4239d571, 0xfb167583), TOBN(0xdd011c78, 0xd16c8f8a), + TOBN(0x271c2895, 0x69a27519), TOBN(0x9ce0a3b7, 0xd2d64b6a)}, + {TOBN(0x8c977289, 0xd5ec6738), TOBN(0xa3b49f9a, 0x8840ef6b), + TOBN(0x808c14c9, 0x9a453419), TOBN(0x5c00295b, 0x0cf0a2d5)}}, + {{TOBN(0x524414fb, 0x1d4bcc76), TOBN(0xb07691d2, 0x459a88f1), + TOBN(0x77f43263, 0xf70d110f), TOBN(0x64ada5e0, 0xb7abf9f3)}, + {TOBN(0xafd0f94e, 0x5b544cf5), TOBN(0xb4a13a15, 0xfd2713fe), + TOBN(0xb99b7d6e, 0x250c74f4), TOBN(0x097f2f73, 0x20324e45)}}, + {{TOBN(0x994b37d8, 0xaffa8208), TOBN(0xc3c31b0b, 0xdc29aafc), + TOBN(0x3da74651, 0x7a3a607f), TOBN(0xd8e1b8c1, 0xfe6955d6)}, + {TOBN(0x716e1815, 0xc8418682), TOBN(0x541d487f, 0x7dc91d97), + TOBN(0x48a04669, 0xc6996982), TOBN(0xf39cab15, 0x83a6502e)}}, + {{TOBN(0x025801a0, 0xe68db055), TOBN(0xf3569758, 0xba3338d5), + TOBN(0xb0c8c0aa, 0xee2afa84), TOBN(0x4f6985d3, 0xfb6562d1)}, + {TOBN(0x351f1f15, 0x132ed17a), TOBN(0x510ed0b4, 0xc04365fe), + TOBN(0xa3f98138, 0xe5b1f066), TOBN(0xbc9d95d6, 0x32df03dc)}}, + {{TOBN(0xa83ccf6e, 0x19abd09e), TOBN(0x0b4097c1, 0x4ff17edb), + TOBN(0x58a5c478, 0xd64a06ce), TOBN(0x2ddcc3fd, 0x544a58fd)}, + {TOBN(0xd449503d, 0x9e8153b8), TOBN(0x3324fd02, 0x7774179b), + TOBN(0xaf5d47c8, 0xdbd9120c), TOBN(0xeb860162, 0x34fa94db)}}, + {{TOBN(0x5817bdd1, 0x972f07f4), TOBN(0xe5579e2e, 0xd27bbceb), + TOBN(0x86847a1f, 0x5f11e5a6), TOBN(0xb39ed255, 0x7c3cf048)}, + {TOBN(0xe1076417, 0xa2f62e55), TOBN(0x6b9ab38f, 0x1bcf82a2), + TOBN(0x4bb7c319, 0x7aeb29f9), TOBN(0xf6d17da3, 0x17227a46)}}, + {{TOBN(0xab53ddbd, 0x0f968c00), TOBN(0xa03da7ec, 0x000c880b), + TOBN(0x7b239624, 0x6a9ad24d), TOBN(0x612c0401, 0x01ec60d0)}, + {TOBN(0x70d10493, 0x109f5df1), TOBN(0xfbda4030, 0x80af7550), + TOBN(0x30b93f95, 0xc6b9a9b3), TOBN(0x0c74ec71, 0x007d9418)}}, + {{TOBN(0x94175564, 0x6edb951f), TOBN(0x5f4a9d78, 0x7f22c282), + TOBN(0xb7870895, 0xb38d1196), TOBN(0xbc593df3, 0xa228ce7c)}, + {TOBN(0xc78c5bd4, 0x6af3641a), TOBN(0x7802200b, 0x3d9b3dcc), + TOBN(0x0dc73f32, 0x8be33304), TOBN(0x847ed87d, 0x61ffb79a)}}, + {{TOBN(0xf85c974e, 0x6d671192), TOBN(0x1e14100a, 0xde16f60f), + TOBN(0x45cb0d5a, 0x95c38797), TOBN(0x18923bba, 0x9b022da4)}, + {TOBN(0xef2be899, 0xbbe7e86e), TOBN(0x4a1510ee, 0x216067bf), + TOBN(0xd98c8154, 0x84d5ce3e), TOBN(0x1af777f0, 0xf92a2b90)}}, + {{TOBN(0x9fbcb400, 0x4ef65724), TOBN(0x3e04a4c9, 0x3c0ca6fe), + TOBN(0xfb3e2cb5, 0x55002994), TOBN(0x1f3a93c5, 0x5363ecab)}, + {TOBN(0x1fe00efe, 0x3923555b), TOBN(0x744bedd9, 0x1e1751ea), + TOBN(0x3fb2db59, 0x6ab69357), TOBN(0x8dbd7365, 0xf5e6618b)}}, + {{TOBN(0x99d53099, 0xdf1ea40e), TOBN(0xb3f24a0b, 0x57d61e64), + TOBN(0xd088a198, 0x596eb812), TOBN(0x22c8361b, 0x5762940b)}, + {TOBN(0x66f01f97, 0xf9c0d95c), TOBN(0x88461172, 0x8e43cdae), + TOBN(0x11599a7f, 0xb72b15c3), TOBN(0x135a7536, 0x420d95cc)}}, + {{TOBN(0x2dcdf0f7, 0x5f7ae2f6), TOBN(0x15fc6e1d, 0xd7fa6da2), + TOBN(0x81ca829a, 0xd1d441b6), TOBN(0x84c10cf8, 0x04a106b6)}, + {TOBN(0xa9b26c95, 0xa73fbbd0), TOBN(0x7f24e0cb, 0x4d8f6ee8), + TOBN(0x48b45937, 0x1e25a043), TOBN(0xf8a74fca, 0x036f3dfe)}}, + {{TOBN(0x1ed46585, 0xc9f84296), TOBN(0x7fbaa8fb, 0x3bc278b0), + TOBN(0xa8e96cd4, 0x6c4fcbd0), TOBN(0x940a1202, 0x73b60a5f)}, + {TOBN(0x34aae120, 0x55a4aec8), TOBN(0x550e9a74, 0xdbd742f0), + TOBN(0x794456d7, 0x228c68ab), TOBN(0x492f8868, 0xa4e25ec6)}}, + {{TOBN(0x682915ad, 0xb2d8f398), TOBN(0xf13b51cc, 0x5b84c953), + TOBN(0xcda90ab8, 0x5bb917d6), TOBN(0x4b615560, 0x4ea3dee1)}, + {TOBN(0x578b4e85, 0x0a52c1c8), TOBN(0xeab1a695, 0x20b75fc4), + TOBN(0x60c14f3c, 0xaa0bb3c6), TOBN(0x220f448a, 0xb8216094)}}, + {{TOBN(0x4fe7ee31, 0xb0e63d34), TOBN(0xf4600572, 0xa9e54fab), + TOBN(0xc0493334, 0xd5e7b5a4), TOBN(0x8589fb92, 0x06d54831)}, + {TOBN(0xaa70f5cc, 0x6583553a), TOBN(0x0879094a, 0xe25649e5), + TOBN(0xcc904507, 0x10044652), TOBN(0xebb0696d, 0x02541c4f)}}, + {{TOBN(0x5a171fde, 0xb9718710), TOBN(0x38f1bed8, 0xf374a9f5), + TOBN(0xc8c582e1, 0xba39bdc1), TOBN(0xfc457b0a, 0x908cc0ce)}, + {TOBN(0x9a187fd4, 0x883841e2), TOBN(0x8ec25b39, 0x38725381), + TOBN(0x2553ed05, 0x96f84395), TOBN(0x095c7661, 0x6f6c6897)}}, + {{TOBN(0x917ac85c, 0x4bdc5610), TOBN(0xb2885fe4, 0x179eb301), + TOBN(0x5fc65547, 0x8b78bdcc), TOBN(0x4a9fc893, 0xe59e4699)}, + {TOBN(0xbb7ff0cd, 0x3ce299af), TOBN(0x195be9b3, 0xadf38b20), + TOBN(0x6a929c87, 0xd38ddb8f), TOBN(0x55fcc99c, 0xb21a51b9)}}, + {{TOBN(0x2b695b4c, 0x721a4593), TOBN(0xed1e9a15, 0x768eaac2), + TOBN(0xfb63d71c, 0x7489f914), TOBN(0xf98ba31c, 0x78118910)}, + {TOBN(0x80291373, 0x9b128eb4), TOBN(0x7801214e, 0xd448af4a), + TOBN(0xdbd2e22b, 0x55418dd3), TOBN(0xeffb3c0d, 0xd3998242)}}, + {{TOBN(0xdfa6077c, 0xc7bf3827), TOBN(0xf2165bcb, 0x47f8238f), + TOBN(0xfe37cf68, 0x8564d554), TOBN(0xe5f825c4, 0x0a81fb98)}, + {TOBN(0x43cc4f67, 0xffed4d6f), TOBN(0xbc609578, 0xb50a34b0), + TOBN(0x8aa8fcf9, 0x5041faf1), TOBN(0x5659f053, 0x651773b6)}}, + {{TOBN(0xe87582c3, 0x6044d63b), TOBN(0xa6089409, 0x0cdb0ca0), + TOBN(0x8c993e0f, 0xbfb2bcf6), TOBN(0xfc64a719, 0x45985cfc)}, + {TOBN(0x15c4da80, 0x83dbedba), TOBN(0x804ae112, 0x2be67df7), + TOBN(0xda4c9658, 0xa23defde), TOBN(0x12002ddd, 0x5156e0d3)}}, + {{TOBN(0xe68eae89, 0x5dd21b96), TOBN(0x8b99f28b, 0xcf44624d), + TOBN(0x0ae00808, 0x1ec8897a), TOBN(0xdd0a9303, 0x6712f76e)}, + {TOBN(0x96237522, 0x4e233de4), TOBN(0x192445b1, 0x2b36a8a5), + TOBN(0xabf9ff74, 0x023993d9), TOBN(0x21f37bf4, 0x2aad4a8f)}}, + {{TOBN(0x340a4349, 0xf8bd2bbd), TOBN(0x1d902cd9, 0x4868195d), + TOBN(0x3d27bbf1, 0xe5fdb6f1), TOBN(0x7a5ab088, 0x124f9f1c)}, + {TOBN(0xc466ab06, 0xf7a09e03), TOBN(0x2f8a1977, 0x31f2c123), + TOBN(0xda355dc7, 0x041b6657), TOBN(0xcb840d12, 0x8ece2a7c)}}, + {{TOBN(0xb600ad9f, 0x7db32675), TOBN(0x78fea133, 0x07a06f1b), + TOBN(0x5d032269, 0xb31f6094), TOBN(0x07753ef5, 0x83ec37aa)}, + {TOBN(0x03485aed, 0x9c0bea78), TOBN(0x41bb3989, 0xbc3f4524), + TOBN(0x09403761, 0x697f726d), TOBN(0x6109beb3, 0xdf394820)}}, + {{TOBN(0x804111ea, 0x3b6d1145), TOBN(0xb6271ea9, 0xa8582654), + TOBN(0x619615e6, 0x24e66562), TOBN(0xa2554945, 0xd7b6ad9c)}, + {TOBN(0xd9c4985e, 0x99bfe35f), TOBN(0x9770ccc0, 0x7b51cdf6), + TOBN(0x7c327013, 0x92881832), TOBN(0x8777d45f, 0x286b26d1)}}, + {{TOBN(0x9bbeda22, 0xd847999d), TOBN(0x03aa33b6, 0xc3525d32), + TOBN(0x4b7b96d4, 0x28a959a1), TOBN(0xbb3786e5, 0x31e5d234)}, + {TOBN(0xaeb5d3ce, 0x6961f247), TOBN(0x20aa85af, 0x02f93d3f), + TOBN(0x9cd1ad3d, 0xd7a7ae4f), TOBN(0xbf6688f0, 0x781adaa8)}}, + {{TOBN(0xb1b40e86, 0x7469cead), TOBN(0x1904c524, 0x309fca48), + TOBN(0x9b7312af, 0x4b54bbc7), TOBN(0xbe24bf8f, 0x593affa2)}, + {TOBN(0xbe5e0790, 0xbd98764b), TOBN(0xa0f45f17, 0xa26e299e), + TOBN(0x4af0d2c2, 0x6b8fe4c7), TOBN(0xef170db1, 0x8ae8a3e6)}}, + {{TOBN(0x0e8d61a0, 0x29e0ccc1), TOBN(0xcd53e87e, 0x60ad36ca), + TOBN(0x328c6623, 0xc8173822), TOBN(0x7ee1767d, 0xa496be55)}, + {TOBN(0x89f13259, 0x648945af), TOBN(0x9e45a5fd, 0x25c8009c), + TOBN(0xaf2febd9, 0x1f61ab8c), TOBN(0x43f6bc86, 0x8a275385)}}, + {{TOBN(0x87792348, 0xf2142e79), TOBN(0x17d89259, 0xc6e6238a), + TOBN(0x7536d2f6, 0x4a839d9b), TOBN(0x1f428fce, 0x76a1fbdc)}, + {TOBN(0x1c109601, 0x0db06dfe), TOBN(0xbfc16bc1, 0x50a3a3cc), + TOBN(0xf9cbd9ec, 0x9b30f41b), TOBN(0x5b5da0d6, 0x00138cce)}}, + {{TOBN(0xec1d0a48, 0x56ef96a7), TOBN(0xb47eb848, 0x982bf842), + TOBN(0x66deae32, 0xec3f700d), TOBN(0x4e43c42c, 0xaa1181e0)}, + {TOBN(0xa1d72a31, 0xd1a4aa2a), TOBN(0x440d4668, 0xc004f3ce), + TOBN(0x0d6a2d3b, 0x45fe8a7a), TOBN(0x820e52e2, 0xfb128365)}}, + {{TOBN(0x29ac5fcf, 0x25e51b09), TOBN(0x180cd2bf, 0x2023d159), + TOBN(0xa9892171, 0xa1ebf90e), TOBN(0xf97c4c87, 0x7c132181)}, + {TOBN(0x9f1dc724, 0xc03dbb7e), TOBN(0xae043765, 0x018cbbe4), + TOBN(0xfb0b2a36, 0x0767d153), TOBN(0xa8e2f4d6, 0x249cbaeb)}}, + {{TOBN(0x172a5247, 0xd95ea168), TOBN(0x1758fada, 0x2970764a), + TOBN(0xac803a51, 0x1d978169), TOBN(0x299cfe2e, 0xde77e01b)}, + {TOBN(0x652a1e17, 0xb0a98927), TOBN(0x2e26e1d1, 0x20014495), + TOBN(0x7ae0af9f, 0x7175b56a), TOBN(0xc2e22a80, 0xd64b9f95)}}, + {{TOBN(0x4d0ff9fb, 0xd90a060a), TOBN(0x496a27db, 0xbaf38085), + TOBN(0x32305401, 0xda776bcf), TOBN(0xb8cdcef6, 0x725f209e)}, + {TOBN(0x61ba0f37, 0x436a0bba), TOBN(0x263fa108, 0x76860049), + TOBN(0x92beb98e, 0xda3542cf), TOBN(0xa2d4d14a, 0xd5849538)}}, + {{TOBN(0x989b9d68, 0x12e9a1bc), TOBN(0x61d9075c, 0x5f6e3268), + TOBN(0x352c6aa9, 0x99ace638), TOBN(0xde4e4a55, 0x920f43ff)}, + {TOBN(0xe5e4144a, 0xd673c017), TOBN(0x667417ae, 0x6f6e05ea), + TOBN(0x613416ae, 0xdcd1bd56), TOBN(0x5eb36201, 0x86693711)}}, + {{TOBN(0x2d7bc504, 0x3a1aa914), TOBN(0x175a1299, 0x76dc5975), + TOBN(0xe900e0f2, 0x3fc8125c), TOBN(0x569ef68c, 0x11198875)}, + {TOBN(0x9012db63, 0x63a113b4), TOBN(0xe3bd3f56, 0x98835766), + TOBN(0xa5c94a52, 0x76412dea), TOBN(0xad9e2a09, 0xaa735e5c)}}, + {{TOBN(0x405a984c, 0x508b65e9), TOBN(0xbde4a1d1, 0x6df1a0d1), + TOBN(0x1a9433a1, 0xdfba80da), TOBN(0xe9192ff9, 0x9440ad2e)}, + {TOBN(0x9f649696, 0x5099fe92), TOBN(0x25ddb65c, 0x0b27a54a), + TOBN(0x178279dd, 0xc590da61), TOBN(0x5479a999, 0xfbde681a)}}, + {{TOBN(0xd0e84e05, 0x013fe162), TOBN(0xbe11dc92, 0x632d471b), + TOBN(0xdf0b0c45, 0xfc0e089f), TOBN(0x04fb15b0, 0x4c144025)}, + {TOBN(0xa61d5fc2, 0x13c99927), TOBN(0xa033e9e0, 0x3de2eb35), + TOBN(0xf8185d5c, 0xb8dacbb4), TOBN(0x9a88e265, 0x8644549d)}}, + {{TOBN(0xf717af62, 0x54671ff6), TOBN(0x4bd4241b, 0x5fa58603), + TOBN(0x06fba40b, 0xe67773c0), TOBN(0xc1d933d2, 0x6a2847e9)}, + {TOBN(0xf4f5acf3, 0x689e2c70), TOBN(0x92aab0e7, 0x46bafd31), + TOBN(0x798d76aa, 0x3473f6e5), TOBN(0xcc6641db, 0x93141934)}}, + {{TOBN(0xcae27757, 0xd31e535e), TOBN(0x04cc43b6, 0x87c2ee11), + TOBN(0x8d1f9675, 0x2e029ffa), TOBN(0xc2150672, 0xe4cc7a2c)}, + {TOBN(0x3b03c1e0, 0x8d68b013), TOBN(0xa9d6816f, 0xedf298f3), + TOBN(0x1bfbb529, 0xa2804464), TOBN(0x95a52fae, 0x5db22125)}}, + {{TOBN(0x55b32160, 0x0e1cb64e), TOBN(0x004828f6, 0x7e7fc9fe), + TOBN(0x13394b82, 0x1bb0fb93), TOBN(0xb6293a2d, 0x35f1a920)}, + {TOBN(0xde35ef21, 0xd145d2d9), TOBN(0xbe6225b3, 0xbb8fa603), + TOBN(0x00fc8f6b, 0x32cf252d), TOBN(0xa28e52e6, 0x117cf8c2)}}, + {{TOBN(0x9d1dc89b, 0x4c371e6d), TOBN(0xcebe0675, 0x36ef0f28), + TOBN(0x5de05d09, 0xa4292f81), TOBN(0xa8303593, 0x353e3083)}, + {TOBN(0xa1715b0a, 0x7e37a9bb), TOBN(0x8c56f61e, 0x2b8faec3), + TOBN(0x52507431, 0x33c9b102), TOBN(0x0130cefc, 0xa44431f0)}}, + {{TOBN(0x56039fa0, 0xbd865cfb), TOBN(0x4b03e578, 0xbc5f1dd7), + TOBN(0x40edf2e4, 0xbabe7224), TOBN(0xc752496d, 0x3a1988f6)}, + {TOBN(0xd1572d3b, 0x564beb6b), TOBN(0x0db1d110, 0x39a1c608), + TOBN(0x568d1934, 0x16f60126), TOBN(0x05ae9668, 0xf354af33)}}, + {{TOBN(0x19de6d37, 0xc92544f2), TOBN(0xcc084353, 0xa35837d5), + TOBN(0xcbb6869c, 0x1a514ece), TOBN(0xb633e728, 0x2e1d1066)}, + {TOBN(0xf15dd69f, 0x936c581c), TOBN(0x96e7b8ce, 0x7439c4f9), + TOBN(0x5e676f48, 0x2e448a5b), TOBN(0xb2ca7d5b, 0xfd916bbb)}}, + {{TOBN(0xd55a2541, 0xf5024025), TOBN(0x47bc5769, 0xe4c2d937), + TOBN(0x7d31b92a, 0x0362189f), TOBN(0x83f3086e, 0xef7816f9)}, + {TOBN(0xf9f46d94, 0xb587579a), TOBN(0xec2d22d8, 0x30e76c5f), + TOBN(0x27d57461, 0xb000ffcf), TOBN(0xbb7e65f9, 0x364ffc2c)}}, + {{TOBN(0x7c7c9477, 0x6652a220), TOBN(0x61618f89, 0xd696c981), + TOBN(0x5021701d, 0x89effff3), TOBN(0xf2c8ff8e, 0x7c314163)}, + {TOBN(0x2da413ad, 0x8efb4d3e), TOBN(0x937b5adf, 0xce176d95), + TOBN(0x22867d34, 0x2a67d51c), TOBN(0x262b9b10, 0x18eb3ac9)}}, + {{TOBN(0x4e314fe4, 0xc43ff28b), TOBN(0x76476627, 0x6a664e7a), + TOBN(0x3e90e40b, 0xb7a565c2), TOBN(0x8588993a, 0xc1acf831)}, + {TOBN(0xd7b501d6, 0x8f938829), TOBN(0x996627ee, 0x3edd7d4c), + TOBN(0x37d44a62, 0x90cd34c7), TOBN(0xa8327499, 0xf3833e8d)}}, + {{TOBN(0x2e18917d, 0x4bf50353), TOBN(0x85dd726b, 0x556765fb), + TOBN(0x54fe65d6, 0x93d5ab66), TOBN(0x3ddbaced, 0x915c25fe)}, + {TOBN(0xa799d9a4, 0x12f22e85), TOBN(0xe2a24867, 0x6d06f6bc), + TOBN(0xf4f1ee56, 0x43ca1637), TOBN(0xfda2828b, 0x61ece30a)}}, + {{TOBN(0x758c1a3e, 0xa2dee7a6), TOBN(0xdcde2f3c, 0x734b2284), + TOBN(0xaba445d2, 0x4eaba6ad), TOBN(0x35aaf668, 0x76cee0a7)}, + {TOBN(0x7e0b04a9, 0xe5aa049a), TOBN(0xe74083ad, 0x91103e84), + TOBN(0xbeb183ce, 0x40afecc3), TOBN(0x6b89de9f, 0xea043f7a)}}}, + {{{TOBN(0x0e299d23, 0xfe67ba66), TOBN(0x91450760, 0x93cf2f34), + TOBN(0xf45b5ea9, 0x97fcf913), TOBN(0x5be00843, 0x8bd7ddda)}, + {TOBN(0x358c3e05, 0xd53ff04d), TOBN(0xbf7ccdc3, 0x5de91ef7), + TOBN(0xad684dbf, 0xb69ec1a0), TOBN(0x367e7cf2, 0x801fd997)}}, + {{TOBN(0x0ca1f3b7, 0xb0dc8595), TOBN(0x27de4608, 0x9f1d9f2e), + TOBN(0x1af3bf39, 0xbadd82a7), TOBN(0x79356a79, 0x65862448)}, + {TOBN(0xc0602345, 0xf5f9a052), TOBN(0x1a8b0f89, 0x139a42f9), + TOBN(0xb53eee42, 0x844d40fc), TOBN(0x93b0bfe5, 0x4e5b6368)}}, + {{TOBN(0x5434dd02, 0xc024789c), TOBN(0x90dca9ea, 0x41b57bfc), + TOBN(0x8aa898e2, 0x243398df), TOBN(0xf607c834, 0x894a94bb)}, + {TOBN(0xbb07be97, 0xc2c99b76), TOBN(0x6576ba67, 0x18c29302), + TOBN(0x3d79efcc, 0xe703a88c), TOBN(0xf259ced7, 0xb6a0d106)}}, + {{TOBN(0x0f893a5d, 0xc8de610b), TOBN(0xe8c515fb, 0x67e223ce), + TOBN(0x7774bfa6, 0x4ead6dc5), TOBN(0x89d20f95, 0x925c728f)}, + {TOBN(0x7a1e0966, 0x098583ce), TOBN(0xa2eedb94, 0x93f2a7d7), + TOBN(0x1b282097, 0x4c304d4a), TOBN(0x0842e3da, 0xc077282d)}}, + {{TOBN(0xe4d972a3, 0x3b9e2d7b), TOBN(0x7cc60b27, 0xc48218ff), + TOBN(0x8fc70838, 0x84149d91), TOBN(0x5c04346f, 0x2f461ecc)}, + {TOBN(0xebe9fdf2, 0x614650a9), TOBN(0x5e35b537, 0xc1f666ac), + TOBN(0x645613d1, 0x88babc83), TOBN(0x88cace3a, 0xc5e1c93e)}}, + {{TOBN(0x209ca375, 0x3de92e23), TOBN(0xccb03cc8, 0x5fbbb6e3), + TOBN(0xccb90f03, 0xd7b1487e), TOBN(0xfa9c2a38, 0xc710941f)}, + {TOBN(0x756c3823, 0x6724ceed), TOBN(0x3a902258, 0x192d0323), + TOBN(0xb150e519, 0xea5e038e), TOBN(0xdcba2865, 0xc7427591)}}, + {{TOBN(0xe549237f, 0x78890732), TOBN(0xc443bef9, 0x53fcb4d9), + TOBN(0x9884d8a6, 0xeb3480d6), TOBN(0x8a35b6a1, 0x3048b186)}, + {TOBN(0xb4e44716, 0x65e9a90a), TOBN(0x45bf380d, 0x653006c0), + TOBN(0x8f3f820d, 0x4fe9ae3b), TOBN(0x244a35a0, 0x979a3b71)}}, + {{TOBN(0xa1010e9d, 0x74cd06ff), TOBN(0x9c17c7df, 0xaca3eeac), + TOBN(0x74c86cd3, 0x8063aa2b), TOBN(0x8595c4b3, 0x734614ff)}, + {TOBN(0xa3de00ca, 0x990f62cc), TOBN(0xd9bed213, 0xca0c3be5), + TOBN(0x7886078a, 0xdf8ce9f5), TOBN(0xddb27ce3, 0x5cd44444)}}, + {{TOBN(0xed374a66, 0x58926ddd), TOBN(0x138b2d49, 0x908015b8), + TOBN(0x886c6579, 0xde1f7ab8), TOBN(0x888b9aa0, 0xc3020b7a)}, + {TOBN(0xd3ec034e, 0x3a96e355), TOBN(0xba65b0b8, 0xf30fbe9a), + TOBN(0x064c8e50, 0xff21367a), TOBN(0x1f508ea4, 0x0b04b46e)}}, + {{TOBN(0x98561a49, 0x747c866c), TOBN(0xbbb1e5fe, 0x0518a062), + TOBN(0x20ff4e8b, 0xecdc3608), TOBN(0x7f55cded, 0x20184027)}, + {TOBN(0x8d73ec95, 0xf38c85f0), TOBN(0x5b589fdf, 0x8bc3b8c3), + TOBN(0xbe95dd98, 0x0f12b66f), TOBN(0xf5bd1a09, 0x0e338e01)}}, + {{TOBN(0x65163ae5, 0x5e915918), TOBN(0x6158d6d9, 0x86f8a46b), + TOBN(0x8466b538, 0xeeebf99c), TOBN(0xca8761f6, 0xbca477ef)}, + {TOBN(0xaf3449c2, 0x9ebbc601), TOBN(0xef3b0f41, 0xe0c3ae2f), + TOBN(0xaa6c577d, 0x5de63752), TOBN(0xe9166601, 0x64682a51)}}, + {{TOBN(0x5a3097be, 0xfc15aa1e), TOBN(0x40d12548, 0xb54b0745), + TOBN(0x5bad4706, 0x519a5f12), TOBN(0xed03f717, 0xa439dee6)}, + {TOBN(0x0794bb6c, 0x4a02c499), TOBN(0xf725083d, 0xcffe71d2), + TOBN(0x2cad7519, 0x0f3adcaf), TOBN(0x7f68ea1c, 0x43729310)}}, + {{TOBN(0xe747c8c7, 0xb7ffd977), TOBN(0xec104c35, 0x80761a22), + TOBN(0x8395ebaf, 0x5a3ffb83), TOBN(0xfb3261f4, 0xe4b63db7)}, + {TOBN(0x53544960, 0xd883e544), TOBN(0x13520d70, 0x8cc2eeb8), + TOBN(0x08f6337b, 0xd3d65f99), TOBN(0x83997db2, 0x781cf95b)}}, + {{TOBN(0xce6ff106, 0x0dbd2c01), TOBN(0x4f8eea6b, 0x1f9ce934), + TOBN(0x546f7c4b, 0x0e993921), TOBN(0x6236a324, 0x5e753fc7)}, + {TOBN(0x65a41f84, 0xa16022e9), TOBN(0x0c18d878, 0x43d1dbb2), + TOBN(0x73c55640, 0x2d4cef9c), TOBN(0xa0428108, 0x70444c74)}}, + {{TOBN(0x68e4f15e, 0x9afdfb3c), TOBN(0x49a56143, 0x5bdfb6df), + TOBN(0xa9bc1bd4, 0x5f823d97), TOBN(0xbceb5970, 0xea111c2a)}, + {TOBN(0x366b455f, 0xb269bbc4), TOBN(0x7cd85e1e, 0xe9bc5d62), + TOBN(0xc743c41c, 0x4f18b086), TOBN(0xa4b40990, 0x95294fb9)}}, + {{TOBN(0x9c7c581d, 0x26ee8382), TOBN(0xcf17dcc5, 0x359d638e), + TOBN(0xee8273ab, 0xb728ae3d), TOBN(0x1d112926, 0xf821f047)}, + {TOBN(0x11498477, 0x50491a74), TOBN(0x687fa761, 0xfde0dfb9), + TOBN(0x2c258022, 0x7ea435ab), TOBN(0x6b8bdb94, 0x91ce7e3f)}}, + {{TOBN(0x4c5b5dc9, 0x3bf834aa), TOBN(0x04371819, 0x4f6c7e4b), + TOBN(0xc284e00a, 0x3736bcad), TOBN(0x0d881118, 0x21ae8f8d)}, + {TOBN(0xf9cf0f82, 0xf48c8e33), TOBN(0xa11fd075, 0xa1bf40db), + TOBN(0xdceab0de, 0xdc2733e5), TOBN(0xc560a8b5, 0x8e986bd7)}}, + {{TOBN(0x48dd1fe2, 0x3929d097), TOBN(0x3885b290, 0x92f188f1), + TOBN(0x0f2ae613, 0xda6fcdac), TOBN(0x9054303e, 0xb662a46c)}, + {TOBN(0xb6871e44, 0x0738042a), TOBN(0x98e6a977, 0xbdaf6449), + TOBN(0xd8bc0650, 0xd1c9df1b), TOBN(0xef3d6451, 0x36e098f9)}}, + {{TOBN(0x03fbae82, 0xb6d72d28), TOBN(0x77ca9db1, 0xf5d84080), + TOBN(0x8a112cff, 0xa58efc1c), TOBN(0x518d761c, 0xc564cb4a)}, + {TOBN(0x69b5740e, 0xf0d1b5ce), TOBN(0x717039cc, 0xe9eb1785), + TOBN(0x3fe29f90, 0x22f53382), TOBN(0x8e54ba56, 0x6bc7c95c)}}, + {{TOBN(0x9c806d8a, 0xf7f91d0f), TOBN(0x3b61b0f1, 0xa82a5728), + TOBN(0x4640032d, 0x94d76754), TOBN(0x273eb5de, 0x47d834c6)}, + {TOBN(0x2988abf7, 0x7b4e4d53), TOBN(0xb7ce66bf, 0xde401777), + TOBN(0x9fba6b32, 0x715071b3), TOBN(0x82413c24, 0xad3a1a98)}}, + {{TOBN(0x5b7fc8c4, 0xe0e8ad93), TOBN(0xb5679aee, 0x5fab868d), + TOBN(0xb1f9d2fa, 0x2b3946f3), TOBN(0x458897dc, 0x5685b50a)}, + {TOBN(0x1e98c930, 0x89d0caf3), TOBN(0x39564c5f, 0x78642e92), + TOBN(0x1b77729a, 0x0dbdaf18), TOBN(0xf9170722, 0x579e82e6)}}, + {{TOBN(0x680c0317, 0xe4515fa5), TOBN(0xf85cff84, 0xfb0c790f), + TOBN(0xc7a82aab, 0x6d2e0765), TOBN(0x7446bca9, 0x35c82b32)}, + {TOBN(0x5de607aa, 0x6d63184f), TOBN(0x7c1a46a8, 0x262803a6), + TOBN(0xd218313d, 0xaebe8035), TOBN(0x92113ffd, 0xc73c51f8)}}, + {{TOBN(0x4b38e083, 0x12e7e46c), TOBN(0x69d0a37a, 0x56126bd5), + TOBN(0xfb3f324b, 0x73c07e04), TOBN(0xa0c22f67, 0x8fda7267)}, + {TOBN(0x8f2c0051, 0x4d2c7d8f), TOBN(0xbc45ced3, 0xcbe2cae5), + TOBN(0xe1c6cf07, 0xa8f0f277), TOBN(0xbc392312, 0x1eb99a98)}}, + {{TOBN(0x75537b7e, 0x3cc8ac85), TOBN(0x8d725f57, 0xdd02753b), + TOBN(0xfd05ff64, 0xb737df2f), TOBN(0x55fe8712, 0xf6d2531d)}, + {TOBN(0x57ce04a9, 0x6ab6b01c), TOBN(0x69a02a89, 0x7cd93724), + TOBN(0x4f82ac35, 0xcf86699b), TOBN(0x8242d3ad, 0x9cb4b232)}}, + {{TOBN(0x713d0f65, 0xd62105e5), TOBN(0xbb222bfa, 0x2d29be61), + TOBN(0xf2f9a79e, 0x6cfbef09), TOBN(0xfc24d8d3, 0xd5d6782f)}, + {TOBN(0x5db77085, 0xd4129967), TOBN(0xdb81c3cc, 0xdc3c2a43), + TOBN(0x9d655fc0, 0x05d8d9a3), TOBN(0x3f5d057a, 0x54298026)}}, + {{TOBN(0x1157f56d, 0x88c54694), TOBN(0xb26baba5, 0x9b09573e), + TOBN(0x2cab03b0, 0x22adffd1), TOBN(0x60a412c8, 0xdd69f383)}, + {TOBN(0xed76e98b, 0x54b25039), TOBN(0xd4ee67d3, 0x687e714d), + TOBN(0x87739648, 0x7b00b594), TOBN(0xce419775, 0xc9ef709b)}}, + {{TOBN(0x40f76f85, 0x1c203a40), TOBN(0x30d352d6, 0xeafd8f91), + TOBN(0xaf196d3d, 0x95578dd2), TOBN(0xea4bb3d7, 0x77cc3f3d)}, + {TOBN(0x42a5bd03, 0xb98e782b), TOBN(0xac958c40, 0x0624920d), + TOBN(0xb838134c, 0xfc56fcc8), TOBN(0x86ec4ccf, 0x89572e5e)}}, + {{TOBN(0x69c43526, 0x9be47be0), TOBN(0x323b7dd8, 0xcb28fea1), + TOBN(0xfa5538ba, 0x3a6c67e5), TOBN(0xef921d70, 0x1d378e46)}, + {TOBN(0xf92961fc, 0x3c4b880e), TOBN(0x3f6f914e, 0x98940a67), + TOBN(0xa990eb0a, 0xfef0ff39), TOBN(0xa6c2920f, 0xf0eeff9c)}}, + {{TOBN(0xca804166, 0x51b8d9a3), TOBN(0x42531bc9, 0x0ffb0db1), + TOBN(0x72ce4718, 0xaa82e7ce), TOBN(0x6e199913, 0xdf574741)}, + {TOBN(0xd5f1b13d, 0xd5d36946), TOBN(0x8255dc65, 0xf68f0194), + TOBN(0xdc9df4cd, 0x8710d230), TOBN(0x3453c20f, 0x138c1988)}}, + {{TOBN(0x9af98dc0, 0x89a6ef01), TOBN(0x4dbcc3f0, 0x9857df85), + TOBN(0x34805601, 0x5c1ad924), TOBN(0x40448da5, 0xd0493046)}, + {TOBN(0xf629926d, 0x4ee343e2), TOBN(0x6343f1bd, 0x90e8a301), + TOBN(0xefc93491, 0x40815b3f), TOBN(0xf882a423, 0xde8f66fb)}}, + {{TOBN(0x3a12d5f4, 0xe7db9f57), TOBN(0x7dfba38a, 0x3c384c27), + TOBN(0x7a904bfd, 0x6fc660b1), TOBN(0xeb6c5db3, 0x2773b21c)}, + {TOBN(0xc350ee66, 0x1cdfe049), TOBN(0x9baac0ce, 0x44540f29), + TOBN(0xbc57b6ab, 0xa5ec6aad), TOBN(0x167ce8c3, 0x0a7c1baa)}}, + {{TOBN(0xb23a03a5, 0x53fb2b56), TOBN(0x6ce141e7, 0x4e057f78), + TOBN(0x796525c3, 0x89e490d9), TOBN(0x0bc95725, 0xa31a7e75)}, + {TOBN(0x1ec56791, 0x1220fd06), TOBN(0x716e3a3c, 0x408b0bd6), + TOBN(0x31cd6bf7, 0xe8ebeba9), TOBN(0xa7326ca6, 0xbee6b670)}}, + {{TOBN(0x3d9f851c, 0xcd090c43), TOBN(0x561e8f13, 0xf12c3988), + TOBN(0x50490b6a, 0x904b7be4), TOBN(0x61690ce1, 0x0410737b)}, + {TOBN(0x299e9a37, 0x0f009052), TOBN(0x258758f0, 0xf026092e), + TOBN(0x9fa255f3, 0xfdfcdc0f), TOBN(0xdbc9fb1f, 0xc0e1bcd2)}}, + {{TOBN(0x35f9dd6e, 0x24651840), TOBN(0xdca45a84, 0xa5c59abc), + TOBN(0x103d396f, 0xecca4938), TOBN(0x4532da0a, 0xb97b3f29)}, + {TOBN(0xc4135ea5, 0x1999a6bf), TOBN(0x3aa9505a, 0x5e6bf2ee), + TOBN(0xf77cef06, 0x3f5be093), TOBN(0x97d1a0f8, 0xa943152e)}}, + {{TOBN(0x2cb0ebba, 0x2e1c21dd), TOBN(0xf41b29fc, 0x2c6797c4), + TOBN(0xc6e17321, 0xb300101f), TOBN(0x4422b0e9, 0xd0d79a89)}, + {TOBN(0x49e4901c, 0x92f1bfc4), TOBN(0x06ab1f8f, 0xe1e10ed9), + TOBN(0x84d35577, 0xdb2926b8), TOBN(0xca349d39, 0x356e8ec2)}}, + {{TOBN(0x70b63d32, 0x343bf1a9), TOBN(0x8fd3bd28, 0x37d1a6b1), + TOBN(0x0454879c, 0x316865b4), TOBN(0xee959ff6, 0xc458efa2)}, + {TOBN(0x0461dcf8, 0x9706dc3f), TOBN(0x737db0e2, 0x164e4b2e), + TOBN(0x09262680, 0x2f8843c8), TOBN(0x54498bbc, 0x7745e6f6)}}, + {{TOBN(0x359473fa, 0xa29e24af), TOBN(0xfcc3c454, 0x70aa87a1), + TOBN(0xfd2c4bf5, 0x00573ace), TOBN(0xb65b514e, 0x28dd1965)}, + {TOBN(0xe46ae7cf, 0x2193e393), TOBN(0x60e9a4e1, 0xf5444d97), + TOBN(0xe7594e96, 0x00ff38ed), TOBN(0x43d84d2f, 0x0a0e0f02)}}, + {{TOBN(0x8b6db141, 0xee398a21), TOBN(0xb88a56ae, 0xe3bcc5be), + TOBN(0x0a1aa52f, 0x373460ea), TOBN(0x20da1a56, 0x160bb19b)}, + {TOBN(0xfb54999d, 0x65bf0384), TOBN(0x71a14d24, 0x5d5a180e), + TOBN(0xbc44db7b, 0x21737b04), TOBN(0xd84fcb18, 0x01dd8e92)}}, + {{TOBN(0x80de937b, 0xfa44b479), TOBN(0x53505499, 0x5c98fd4f), + TOBN(0x1edb12ab, 0x28f08727), TOBN(0x4c58b582, 0xa5f3ef53)}, + {TOBN(0xbfb236d8, 0x8327f246), TOBN(0xc3a3bfaa, 0x4d7df320), + TOBN(0xecd96c59, 0xb96024f2), TOBN(0xfc293a53, 0x7f4e0433)}}, + {{TOBN(0x5341352b, 0x5acf6e10), TOBN(0xc50343fd, 0xafe652c3), + TOBN(0x4af3792d, 0x18577a7f), TOBN(0xe1a4c617, 0xaf16823d)}, + {TOBN(0x9b26d0cd, 0x33425d0a), TOBN(0x306399ed, 0x9b7bc47f), + TOBN(0x2a792f33, 0x706bb20b), TOBN(0x31219614, 0x98111055)}}, + {{TOBN(0x864ec064, 0x87f5d28b), TOBN(0x11392d91, 0x962277fd), + TOBN(0xb5aa7942, 0xbb6aed5f), TOBN(0x080094dc, 0x47e799d9)}, + {TOBN(0x4afa588c, 0x208ba19b), TOBN(0xd3e7570f, 0x8512f284), + TOBN(0xcbae64e6, 0x02f5799a), TOBN(0xdeebe7ef, 0x514b9492)}}, + {{TOBN(0x30300f98, 0xe5c298ff), TOBN(0x17f561be, 0x3678361f), + TOBN(0xf52ff312, 0x98cb9a16), TOBN(0x6233c3bc, 0x5562d490)}, + {TOBN(0x7bfa15a1, 0x92e3a2cb), TOBN(0x961bcfd1, 0xe6365119), + TOBN(0x3bdd29bf, 0x2c8c53b1), TOBN(0x739704df, 0x822844ba)}}, + {{TOBN(0x7dacfb58, 0x7e7b754b), TOBN(0x23360791, 0xa806c9b9), + TOBN(0xe7eb88c9, 0x23504452), TOBN(0x2983e996, 0x852c1783)}, + {TOBN(0xdd4ae529, 0x958d881d), TOBN(0x026bae03, 0x262c7b3c), + TOBN(0x3a6f9193, 0x960b52d1), TOBN(0xd0980f90, 0x92696cfb)}}, + {{TOBN(0x4c1f428c, 0xd5f30851), TOBN(0x94dfed27, 0x2a4f6630), + TOBN(0x4df53772, 0xfc5d48a4), TOBN(0xdd2d5a2f, 0x933260ce)}, + {TOBN(0x574115bd, 0xd44cc7a5), TOBN(0x4ba6b20d, 0xbd12533a), + TOBN(0x30e93cb8, 0x243057c9), TOBN(0x794c486a, 0x14de320e)}}, + {{TOBN(0xe925d4ce, 0xf21496e4), TOBN(0xf951d198, 0xec696331), + TOBN(0x9810e2de, 0x3e8d812f), TOBN(0xd0a47259, 0x389294ab)}, + {TOBN(0x513ba2b5, 0x0e3bab66), TOBN(0x462caff5, 0xabad306f), + TOBN(0xe2dc6d59, 0xaf04c49e), TOBN(0x1aeb8750, 0xe0b84b0b)}}, + {{TOBN(0xc034f12f, 0x2f7d0ca2), TOBN(0x6d2e8128, 0xe06acf2f), + TOBN(0x801f4f83, 0x21facc2f), TOBN(0xa1170c03, 0xf40ef607)}, + {TOBN(0xfe0a1d4f, 0x7805a99c), TOBN(0xbde56a36, 0xcc26aba5), + TOBN(0x5b1629d0, 0x35531f40), TOBN(0xac212c2b, 0x9afa6108)}}, + {{TOBN(0x30a06bf3, 0x15697be5), TOBN(0x6f0545dc, 0x2c63c7c1), + TOBN(0x5d8cb842, 0x7ccdadaf), TOBN(0xd52e379b, 0xac7015bb)}, + {TOBN(0xc4f56147, 0xf462c23e), TOBN(0xd44a4298, 0x46bc24b0), + TOBN(0xbc73d23a, 0xe2856d4f), TOBN(0x61cedd8c, 0x0832bcdf)}}, + {{TOBN(0x60953556, 0x99f241d7), TOBN(0xee4adbd7, 0x001a349d), + TOBN(0x0b35bf6a, 0xaa89e491), TOBN(0x7f0076f4, 0x136f7546)}, + {TOBN(0xd19a18ba, 0x9264da3d), TOBN(0x6eb2d2cd, 0x62a7a28b), + TOBN(0xcdba941f, 0x8761c971), TOBN(0x1550518b, 0xa3be4a5d)}}, + {{TOBN(0xd0e8e2f0, 0x57d0b70c), TOBN(0xeea8612e, 0xcd133ba3), + TOBN(0x814670f0, 0x44416aec), TOBN(0x424db6c3, 0x30775061)}, + {TOBN(0xd96039d1, 0x16213fd1), TOBN(0xc61e7fa5, 0x18a3478f), + TOBN(0xa805bdcc, 0xcb0c5021), TOBN(0xbdd6f3a8, 0x0cc616dd)}}, + {{TOBN(0x06009667, 0x5d97f7e2), TOBN(0x31db0fc1, 0xaf0bf4b6), + TOBN(0x23680ed4, 0x5491627a), TOBN(0xb99a3c66, 0x7d741fb1)}, + {TOBN(0xe9bb5f55, 0x36b1ff92), TOBN(0x29738577, 0x512b388d), + TOBN(0xdb8a2ce7, 0x50fcf263), TOBN(0x385346d4, 0x6c4f7b47)}}, + {{TOBN(0xbe86c5ef, 0x31631f9e), TOBN(0xbf91da21, 0x03a57a29), + TOBN(0xc3b1f796, 0x7b23f821), TOBN(0x0f7d00d2, 0x770db354)}, + {TOBN(0x8ffc6c3b, 0xd8fe79da), TOBN(0xcc5e8c40, 0xd525c996), + TOBN(0x4640991d, 0xcfff632a), TOBN(0x64d97e8c, 0x67112528)}}, + {{TOBN(0xc232d973, 0x02f1cd1e), TOBN(0xce87eacb, 0x1dd212a4), + TOBN(0x6e4c8c73, 0xe69802f7), TOBN(0x12ef0290, 0x1fffddbd)}, + {TOBN(0x941ec74e, 0x1bcea6e2), TOBN(0xd0b54024, 0x3cb92cbb), + TOBN(0x809fb9d4, 0x7e8f9d05), TOBN(0x3bf16159, 0xf2992aae)}}, + {{TOBN(0xad40f279, 0xf8a7a838), TOBN(0x11aea631, 0x05615660), + TOBN(0xbf52e6f1, 0xa01f6fa1), TOBN(0xef046995, 0x3dc2aec9)}, + {TOBN(0x785dbec9, 0xd8080711), TOBN(0xe1aec60a, 0x9fdedf76), + TOBN(0xece797b5, 0xfa21c126), TOBN(0xc66e898f, 0x05e52732)}}, + {{TOBN(0x39bb69c4, 0x08811fdb), TOBN(0x8bfe1ef8, 0x2fc7f082), + TOBN(0xc8e7a393, 0x174f4138), TOBN(0xfba8ad1d, 0xd58d1f98)}, + {TOBN(0xbc21d0ce, 0xbfd2fd5b), TOBN(0x0b839a82, 0x6ee60d61), + TOBN(0xaacf7658, 0xafd22253), TOBN(0xb526bed8, 0xaae396b3)}}, + {{TOBN(0xccc1bbc2, 0x38564464), TOBN(0x9e3ff947, 0x8c45bc73), + TOBN(0xcde9bca3, 0x58188a78), TOBN(0x138b8ee0, 0xd73bf8f7)}, + {TOBN(0x5c7e234c, 0x4123c489), TOBN(0x66e69368, 0xfa643297), + TOBN(0x0629eeee, 0x39a15fa3), TOBN(0x95fab881, 0xa9e2a927)}}, + {{TOBN(0xb2497007, 0xeafbb1e1), TOBN(0xd75c9ce6, 0xe75b7a93), + TOBN(0x3558352d, 0xefb68d78), TOBN(0xa2f26699, 0x223f6396)}, + {TOBN(0xeb911ecf, 0xe469b17a), TOBN(0x62545779, 0xe72d3ec2), + TOBN(0x8ea47de7, 0x82cb113f), TOBN(0xebe4b086, 0x4e1fa98d)}}, + {{TOBN(0xec2d5ed7, 0x8cdfedb1), TOBN(0xa535c077, 0xfe211a74), + TOBN(0x9678109b, 0x11d244c5), TOBN(0xf17c8bfb, 0xbe299a76)}, + {TOBN(0xb651412e, 0xfb11fbc4), TOBN(0xea0b5482, 0x94ab3f65), + TOBN(0xd8dffd95, 0x0cf78243), TOBN(0x2e719e57, 0xce0361d4)}}, + {{TOBN(0x9007f085, 0x304ddc5b), TOBN(0x095e8c6d, 0x4daba2ea), + TOBN(0x5a33cdb4, 0x3f9d28a9), TOBN(0x85b95cd8, 0xe2283003)}, + {TOBN(0xbcd6c819, 0xb9744733), TOBN(0x29c5f538, 0xfc7f5783), + TOBN(0x6c49b2fa, 0xd59038e4), TOBN(0x68349cc1, 0x3bbe1018)}}, + {{TOBN(0xcc490c1d, 0x21830ee5), TOBN(0x36f9c4ee, 0xe9bfa297), + TOBN(0x58fd7294, 0x48de1a94), TOBN(0xaadb13a8, 0x4e8f2cdc)}, + {TOBN(0x515eaaa0, 0x81313dba), TOBN(0xc76bb468, 0xc2152dd8), + TOBN(0x357f8d75, 0xa653dbf8), TOBN(0xe4d8c4d1, 0xb14ac143)}}, + {{TOBN(0xbdb8e675, 0xb055cb40), TOBN(0x898f8e7b, 0x977b5167), + TOBN(0xecc65651, 0xb82fb863), TOBN(0x56544814, 0x6d88f01f)}, + {TOBN(0xb0928e95, 0x263a75a9), TOBN(0xcfb6836f, 0x1a22fcda), + TOBN(0x651d14db, 0x3f3bd37c), TOBN(0x1d3837fb, 0xb6ad4664)}}, + {{TOBN(0x7c5fb538, 0xff4f94ab), TOBN(0x7243c712, 0x6d7fb8f2), + TOBN(0xef13d60c, 0xa85c5287), TOBN(0x18cfb7c7, 0x4bb8dd1b)}, + {TOBN(0x82f9bfe6, 0x72908219), TOBN(0x35c4592b, 0x9d5144ab), + TOBN(0x52734f37, 0x9cf4b42f), TOBN(0x6bac55e7, 0x8c60ddc4)}}, + {{TOBN(0xb5cd811e, 0x94dea0f6), TOBN(0x259ecae4, 0xe18cc1a3), + TOBN(0x6a0e836e, 0x15e660f8), TOBN(0x6c639ea6, 0x0e02bff2)}, + {TOBN(0x8721b8cb, 0x7e1026fd), TOBN(0x9e73b50b, 0x63261942), + TOBN(0xb8c70974, 0x77f01da3), TOBN(0x1839e6a6, 0x8268f57f)}}, + {{TOBN(0x571b9415, 0x5150b805), TOBN(0x1892389e, 0xf92c7097), + TOBN(0x8d69c18e, 0x4a084b95), TOBN(0x7014c512, 0xbe5b495c)}, + {TOBN(0x4780db36, 0x1b07523c), TOBN(0x2f6219ce, 0x2c1c64fa), + TOBN(0xc38b81b0, 0x602c105a), TOBN(0xab4f4f20, 0x5dc8e360)}}, + {{TOBN(0x20d3c982, 0xcf7d62d2), TOBN(0x1f36e29d, 0x23ba8150), + TOBN(0x48ae0bf0, 0x92763f9e), TOBN(0x7a527e6b, 0x1d3a7007)}, + {TOBN(0xb4a89097, 0x581a85e3), TOBN(0x1f1a520f, 0xdc158be5), + TOBN(0xf98db37d, 0x167d726e), TOBN(0x8802786e, 0x1113e862)}}}, + {{{TOBN(0xefb2149e, 0x36f09ab0), TOBN(0x03f163ca, 0x4a10bb5b), + TOBN(0xd0297045, 0x06e20998), TOBN(0x56f0af00, 0x1b5a3bab)}, + {TOBN(0x7af4cfec, 0x70880e0d), TOBN(0x7332a66f, 0xbe3d913f), + TOBN(0x32e6c84a, 0x7eceb4bd), TOBN(0xedc4a79a, 0x9c228f55)}}, + {{TOBN(0xc37c7dd0, 0xc55c4496), TOBN(0xa6a96357, 0x25bbabd2), + TOBN(0x5b7e63f2, 0xadd7f363), TOBN(0x9dce3782, 0x2e73f1df)}, + {TOBN(0xe1e5a16a, 0xb2b91f71), TOBN(0xe4489823, 0x5ba0163c), + TOBN(0xf2759c32, 0xf6e515ad), TOBN(0xa5e2f1f8, 0x8615eecf)}}, + {{TOBN(0x74519be7, 0xabded551), TOBN(0x03d358b8, 0xc8b74410), + TOBN(0x4d00b10b, 0x0e10d9a9), TOBN(0x6392b0b1, 0x28da52b7)}, + {TOBN(0x6744a298, 0x0b75c904), TOBN(0xc305b0ae, 0xa8f7f96c), + TOBN(0x042e421d, 0x182cf932), TOBN(0xf6fc5d50, 0x9e4636ca)}}, + {{TOBN(0x795847c9, 0xd64cc78c), TOBN(0x6c50621b, 0x9b6cb27b), + TOBN(0x07099bf8, 0xdf8022ab), TOBN(0x48f862eb, 0xc04eda1d)}, + {TOBN(0xd12732ed, 0xe1603c16), TOBN(0x19a80e0f, 0x5c9a9450), + TOBN(0xe2257f54, 0xb429b4fc), TOBN(0x66d3b2c6, 0x45460515)}}, + {{TOBN(0x6ca4f87e, 0x822e37be), TOBN(0x73f237b4, 0x253bda4e), + TOBN(0xf747f3a2, 0x41190aeb), TOBN(0xf06fa36f, 0x804cf284)}, + {TOBN(0x0a6bbb6e, 0xfc621c12), TOBN(0x5d624b64, 0x40b80ec6), + TOBN(0x4b072425, 0x7ba556f3), TOBN(0x7fa0c354, 0x3e2d20a8)}}, + {{TOBN(0xe921fa31, 0xe3229d41), TOBN(0xa929c652, 0x94531bd4), + TOBN(0x84156027, 0xa6d38209), TOBN(0xf3d69f73, 0x6bdb97bd)}, + {TOBN(0x8906d19a, 0x16833631), TOBN(0x68a34c2e, 0x03d51be3), + TOBN(0xcb59583b, 0x0e511cd8), TOBN(0x99ce6bfd, 0xfdc132a8)}}, + {{TOBN(0x3facdaaa, 0xffcdb463), TOBN(0x658bbc1a, 0x34a38b08), + TOBN(0x12a801f8, 0xf1a9078d), TOBN(0x1567bcf9, 0x6ab855de)}, + {TOBN(0xe08498e0, 0x3572359b), TOBN(0xcf0353e5, 0x8659e68b), + TOBN(0xbb86e9c8, 0x7d23807c), TOBN(0xbc08728d, 0x2198e8a2)}}, + {{TOBN(0x8de2b7bc, 0x453cadd6), TOBN(0x203900a7, 0xbc0bc1f8), + TOBN(0xbcd86e47, 0xa6abd3af), TOBN(0x911cac12, 0x8502effb)}, + {TOBN(0x2d550242, 0xec965469), TOBN(0x0e9f7692, 0x29e0017e), + TOBN(0x633f078f, 0x65979885), TOBN(0xfb87d449, 0x4cf751ef)}}, + {{TOBN(0xe1790e4b, 0xfc25419a), TOBN(0x36467203, 0x4bff3cfd), + TOBN(0xc8db6386, 0x25b6e83f), TOBN(0x6cc69f23, 0x6cad6fd2)}, + {TOBN(0x0219e45a, 0x6bc68bb9), TOBN(0xe43d79b6, 0x297f7334), + TOBN(0x7d445368, 0x465dc97c), TOBN(0x4b9eea32, 0x2a0b949a)}}, + {{TOBN(0x1b96c6ba, 0x6102d021), TOBN(0xeaafac78, 0x2f4461ea), + TOBN(0xd4b85c41, 0xc49f19a8), TOBN(0x275c28e4, 0xcf538875)}, + {TOBN(0x35451a9d, 0xdd2e54e0), TOBN(0x6991adb5, 0x0605618b), + TOBN(0x5b8b4bcd, 0x7b36cd24), TOBN(0x372a4f8c, 0x56f37216)}}, + {{TOBN(0xc890bd73, 0xa6a5da60), TOBN(0x6f083da0, 0xdc4c9ff0), + TOBN(0xf4e14d94, 0xf0536e57), TOBN(0xf9ee1eda, 0xaaec8243)}, + {TOBN(0x571241ec, 0x8bdcf8e7), TOBN(0xa5db8271, 0x0b041e26), + TOBN(0x9a0b9a99, 0xe3fff040), TOBN(0xcaaf21dd, 0x7c271202)}}, + {{TOBN(0xb4e2b2e1, 0x4f0dd2e8), TOBN(0xe77e7c4f, 0x0a377ac7), + TOBN(0x69202c3f, 0x0d7a2198), TOBN(0xf759b7ff, 0x28200eb8)}, + {TOBN(0xc87526ed, 0xdcfe314e), TOBN(0xeb84c524, 0x53d5cf99), + TOBN(0xb1b52ace, 0x515138b6), TOBN(0x5aa7ff8c, 0x23fca3f4)}}, + {{TOBN(0xff0b13c3, 0xb9791a26), TOBN(0x960022da, 0xcdd58b16), + TOBN(0xdbd55c92, 0x57aad2de), TOBN(0x3baaaaa3, 0xf30fe619)}, + {TOBN(0x9a4b2346, 0x0d881efd), TOBN(0x506416c0, 0x46325e2a), + TOBN(0x91381e76, 0x035c18d4), TOBN(0xb3bb68be, 0xf27817b0)}}, + {{TOBN(0x15bfb8bf, 0x5116f937), TOBN(0x7c64a586, 0xc1268943), + TOBN(0x71e25cc3, 0x8419a2c8), TOBN(0x9fd6b0c4, 0x8335f463)}, + {TOBN(0x4bf0ba3c, 0xe8ee0e0e), TOBN(0x6f6fba60, 0x298c21fa), + TOBN(0x57d57b39, 0xae66bee0), TOBN(0x292d5130, 0x22672544)}}, + {{TOBN(0xf451105d, 0xbab093b3), TOBN(0x012f59b9, 0x02839986), + TOBN(0x8a915802, 0x3474a89c), TOBN(0x048c919c, 0x2de03e97)}, + {TOBN(0xc476a2b5, 0x91071cd5), TOBN(0x791ed89a, 0x034970a5), + TOBN(0x89bd9042, 0xe1b7994b), TOBN(0x8eaf5179, 0xa1057ffd)}}, + {{TOBN(0x6066e2a2, 0xd551ee10), TOBN(0x87a8f1d8, 0x727e09a6), + TOBN(0x00d08bab, 0x2c01148d), TOBN(0x6da8e4f1, 0x424f33fe)}, + {TOBN(0x466d17f0, 0xcf9a4e71), TOBN(0xff502010, 0x3bf5cb19), + TOBN(0xdccf97d8, 0xd062ecc0), TOBN(0x80c0d9af, 0x81d80ac4)}}, + {{TOBN(0xe87771d8, 0x033f2876), TOBN(0xb0186ec6, 0x7d5cc3db), + TOBN(0x58e8bb80, 0x3bc9bc1d), TOBN(0x4d1395cc, 0x6f6ef60e)}, + {TOBN(0xa73c62d6, 0x186244a0), TOBN(0x918e5f23, 0x110a5b53), + TOBN(0xed4878ca, 0x741b7eab), TOBN(0x3038d71a, 0xdbe03e51)}}, + {{TOBN(0x840204b7, 0xa93c3246), TOBN(0x21ab6069, 0xa0b9b4cd), + TOBN(0xf5fa6e2b, 0xb1d64218), TOBN(0x1de6ad0e, 0xf3d56191)}, + {TOBN(0x570aaa88, 0xff1929c7), TOBN(0xc6df4c6b, 0x640e87b5), + TOBN(0xde8a74f2, 0xc65f0ccc), TOBN(0x8b972fd5, 0xe6f6cc01)}}, + {{TOBN(0x3fff36b6, 0x0b846531), TOBN(0xba7e45e6, 0x10a5e475), + TOBN(0x84a1d10e, 0x4145b6c5), TOBN(0xf1f7f91a, 0x5e046d9d)}, + {TOBN(0x0317a692, 0x44de90d7), TOBN(0x951a1d4a, 0xf199c15e), + TOBN(0x91f78046, 0xc9d73deb), TOBN(0x74c82828, 0xfab8224f)}}, + {{TOBN(0xaa6778fc, 0xe7560b90), TOBN(0xb4073e61, 0xa7e824ce), + TOBN(0xff0d693c, 0xd642eba8), TOBN(0x7ce2e57a, 0x5dccef38)}, + {TOBN(0x89c2c789, 0x1df1ad46), TOBN(0x83a06922, 0x098346fd), + TOBN(0x2d715d72, 0xda2fc177), TOBN(0x7b6dd71d, 0x85b6cf1d)}}, + {{TOBN(0xc60a6d0a, 0x73fa9cb0), TOBN(0xedd3992e, 0x328bf5a9), + TOBN(0xc380ddd0, 0x832c8c82), TOBN(0xd182d410, 0xa2a0bf50)}, + {TOBN(0x7d9d7438, 0xd9a528db), TOBN(0xe8b1a0e9, 0xcaf53994), + TOBN(0xddd6e5fe, 0x0e19987c), TOBN(0xacb8df03, 0x190b059d)}}, + {{TOBN(0x53703a32, 0x8300129f), TOBN(0x1f637662, 0x68c43bfd), + TOBN(0xbcbd1913, 0x00e54051), TOBN(0x812fcc62, 0x7bf5a8c5)}, + {TOBN(0x3f969d5f, 0x29fb85da), TOBN(0x72f4e00a, 0x694759e8), + TOBN(0x426b6e52, 0x790726b7), TOBN(0x617bbc87, 0x3bdbb209)}}, + {{TOBN(0x511f8bb9, 0x97aee317), TOBN(0x812a4096, 0xe81536a8), + TOBN(0x137dfe59, 0x3ac09b9b), TOBN(0x0682238f, 0xba8c9a7a)}, + {TOBN(0x7072ead6, 0xaeccb4bd), TOBN(0x6a34e9aa, 0x692ba633), + TOBN(0xc82eaec2, 0x6fff9d33), TOBN(0xfb753512, 0x1d4d2b62)}}, + {{TOBN(0x1a0445ff, 0x1d7aadab), TOBN(0x65d38260, 0xd5f6a67c), + TOBN(0x6e62fb08, 0x91cfb26f), TOBN(0xef1e0fa5, 0x5c7d91d6)}, + {TOBN(0x47e7c7ba, 0x33db72cd), TOBN(0x017cbc09, 0xfa7c74b2), + TOBN(0x3c931590, 0xf50a503c), TOBN(0xcac54f60, 0x616baa42)}}, + {{TOBN(0x9b6cd380, 0xb2369f0f), TOBN(0x97d3a70d, 0x23c76151), + TOBN(0x5f9dd6fc, 0x9862a9c6), TOBN(0x044c4ab2, 0x12312f51)}, + {TOBN(0x035ea0fd, 0x834a2ddc), TOBN(0x49e6b862, 0xcc7b826d), + TOBN(0xb03d6883, 0x62fce490), TOBN(0x62f2497a, 0xb37e36e9)}}, + {{TOBN(0x04b005b6, 0xc6458293), TOBN(0x36bb5276, 0xe8d10af7), + TOBN(0xacf2dc13, 0x8ee617b8), TOBN(0x470d2d35, 0xb004b3d4)}, + {TOBN(0x06790832, 0xfeeb1b77), TOBN(0x2bb75c39, 0x85657f9c), + TOBN(0xd70bd4ed, 0xc0f60004), TOBN(0xfe797ecc, 0x219b018b)}}, + {{TOBN(0x9b5bec2a, 0x753aebcc), TOBN(0xdaf9f3dc, 0xc939eca5), + TOBN(0xd6bc6833, 0xd095ad09), TOBN(0x98abdd51, 0xdaa4d2fc)}, + {TOBN(0xd9840a31, 0x8d168be5), TOBN(0xcf7c10e0, 0x2325a23c), + TOBN(0xa5c02aa0, 0x7e6ecfaf), TOBN(0x2462e7e6, 0xb5bfdf18)}}, + {{TOBN(0xab2d8a8b, 0xa0cc3f12), TOBN(0x68dd485d, 0xbc672a29), + TOBN(0x72039752, 0x596f2cd3), TOBN(0x5d3eea67, 0xa0cf3d8d)}, + {TOBN(0x810a1a81, 0xe6602671), TOBN(0x8f144a40, 0x14026c0c), + TOBN(0xbc753a6d, 0x76b50f85), TOBN(0xc4dc21e8, 0x645cd4a4)}}, + {{TOBN(0xc5262dea, 0x521d0378), TOBN(0x802b8e0e, 0x05011c6f), + TOBN(0x1ba19cbb, 0x0b4c19ea), TOBN(0x21db64b5, 0xebf0aaec)}, + {TOBN(0x1f394ee9, 0x70342f9d), TOBN(0x93a10aee, 0x1bc44a14), + TOBN(0xa7eed31b, 0x3efd0baa), TOBN(0x6e7c824e, 0x1d154e65)}}, + {{TOBN(0xee23fa81, 0x9966e7ee), TOBN(0x64ec4aa8, 0x05b7920d), + TOBN(0x2d44462d, 0x2d90aad4), TOBN(0xf44dd195, 0xdf277ad5)}, + {TOBN(0x8d6471f1, 0xbb46b6a1), TOBN(0x1e65d313, 0xfd885090), + TOBN(0x33a800f5, 0x13a977b4), TOBN(0xaca9d721, 0x0797e1ef)}}, + {{TOBN(0x9a5a85a0, 0xfcff6a17), TOBN(0x9970a3f3, 0x1eca7cee), + TOBN(0xbb9f0d6b, 0xc9504be3), TOBN(0xe0c504be, 0xadd24ee2)}, + {TOBN(0x7e09d956, 0x77fcc2f4), TOBN(0xef1a5227, 0x65bb5fc4), + TOBN(0x145d4fb1, 0x8b9286aa), TOBN(0x66fd0c5d, 0x6649028b)}}, + {{TOBN(0x98857ceb, 0x1bf4581c), TOBN(0xe635e186, 0xaca7b166), + TOBN(0x278ddd22, 0x659722ac), TOBN(0xa0903c4c, 0x1db68007)}, + {TOBN(0x366e4589, 0x48f21402), TOBN(0x31b49c14, 0xb96abda2), + TOBN(0x329c4b09, 0xe0403190), TOBN(0x97197ca3, 0xd29f43fe)}}, + {{TOBN(0x8073dd1e, 0x274983d8), TOBN(0xda1a3bde, 0x55717c8f), + TOBN(0xfd3d4da2, 0x0361f9d1), TOBN(0x1332d081, 0x4c7de1ce)}, + {TOBN(0x9b7ef7a3, 0xaa6d0e10), TOBN(0x17db2e73, 0xf54f1c4a), + TOBN(0xaf3dffae, 0x4cd35567), TOBN(0xaaa2f406, 0xe56f4e71)}}, + {{TOBN(0x8966759e, 0x7ace3fc7), TOBN(0x9594eacf, 0x45a8d8c6), + TOBN(0x8de3bd8b, 0x91834e0e), TOBN(0xafe4ca53, 0x548c0421)}, + {TOBN(0xfdd7e856, 0xe6ee81c6), TOBN(0x8f671beb, 0x6b891a3a), + TOBN(0xf7a58f2b, 0xfae63829), TOBN(0x9ab186fb, 0x9c11ac9f)}}, + {{TOBN(0x8d6eb369, 0x10b5be76), TOBN(0x046b7739, 0xfb040bcd), + TOBN(0xccb4529f, 0xcb73de88), TOBN(0x1df0fefc, 0xcf26be03)}, + {TOBN(0xad7757a6, 0xbcfcd027), TOBN(0xa8786c75, 0xbb3165ca), + TOBN(0xe9db1e34, 0x7e99a4d9), TOBN(0x99ee86df, 0xb06c504b)}}, + {{TOBN(0x5b7c2ddd, 0xc15c9f0a), TOBN(0xdf87a734, 0x4295989e), + TOBN(0x59ece47c, 0x03d08fda), TOBN(0xb074d3dd, 0xad5fc702)}, + {TOBN(0x20407903, 0x51a03776), TOBN(0x2bb1f77b, 0x2a608007), + TOBN(0x25c58f4f, 0xe1153185), TOBN(0xe6df62f6, 0x766e6447)}}, + {{TOBN(0xefb3d1be, 0xed51275a), TOBN(0x5de47dc7, 0x2f0f483f), + TOBN(0x7932d98e, 0x97c2bedf), TOBN(0xd5c11927, 0x0219f8a1)}, + {TOBN(0x9d751200, 0xa73a294e), TOBN(0x5f88434a, 0x9dc20172), + TOBN(0xd28d9fd3, 0xa26f506a), TOBN(0xa890cd31, 0x9d1dcd48)}}, + {{TOBN(0x0aebaec1, 0x70f4d3b4), TOBN(0xfd1a1369, 0x0ffc8d00), + TOBN(0xb9d9c240, 0x57d57838), TOBN(0x45929d26, 0x68bac361)}, + {TOBN(0x5a2cd060, 0x25b15ca6), TOBN(0x4b3c83e1, 0x6e474446), + TOBN(0x1aac7578, 0xee1e5134), TOBN(0xa418f5d6, 0xc91e2f41)}}, + {{TOBN(0x6936fc8a, 0x213ed68b), TOBN(0x860ae7ed, 0x510a5224), + TOBN(0x63660335, 0xdef09b53), TOBN(0x641b2897, 0xcd79c98d)}, + {TOBN(0x29bd38e1, 0x01110f35), TOBN(0x79c26f42, 0x648b1937), + TOBN(0x64dae519, 0x9d9164f4), TOBN(0xd85a2310, 0x0265c273)}}, + {{TOBN(0x7173dd5d, 0x4b07e2b1), TOBN(0xd144c4cb, 0x8d9ea221), + TOBN(0xe8b04ea4, 0x1105ab14), TOBN(0x92dda542, 0xfe80d8f1)}, + {TOBN(0xe9982fa8, 0xcf03dce6), TOBN(0x8b5ea965, 0x1a22cffc), + TOBN(0xf7f4ea7f, 0x3fad88c4), TOBN(0x62db773e, 0x6a5ba95c)}}, + {{TOBN(0xd20f02fb, 0x93f24567), TOBN(0xfd46c69a, 0x315257ca), + TOBN(0x0ac74cc7, 0x8bcab987), TOBN(0x46f31c01, 0x5ceca2f5)}, + {TOBN(0x40aedb59, 0x888b219e), TOBN(0xe50ecc37, 0xe1fccd02), + TOBN(0x1bcd9dad, 0x911f816c), TOBN(0x583cc1ec, 0x8db9b00c)}}, + {{TOBN(0xf3cd2e66, 0xa483bf11), TOBN(0xfa08a6f5, 0xb1b2c169), + TOBN(0xf375e245, 0x4be9fa28), TOBN(0x99a7ffec, 0x5b6d011f)}, + {TOBN(0x6a3ebddb, 0xc4ae62da), TOBN(0x6cea00ae, 0x374aef5d), + TOBN(0xab5fb98d, 0x9d4d05bc), TOBN(0x7cba1423, 0xd560f252)}}, + {{TOBN(0x49b2cc21, 0x208490de), TOBN(0x1ca66ec3, 0xbcfb2879), + TOBN(0x7f1166b7, 0x1b6fb16f), TOBN(0xfff63e08, 0x65fe5db3)}, + {TOBN(0xb8345abe, 0x8b2610be), TOBN(0xb732ed80, 0x39de3df4), + TOBN(0x0e24ed50, 0x211c32b4), TOBN(0xd10d8a69, 0x848ff27d)}}, + {{TOBN(0xc1074398, 0xed4de248), TOBN(0xd7cedace, 0x10488927), + TOBN(0xa4aa6bf8, 0x85673e13), TOBN(0xb46bae91, 0x6daf30af)}, + {TOBN(0x07088472, 0xfcef7ad8), TOBN(0x61151608, 0xd4b35e97), + TOBN(0xbcfe8f26, 0xdde29986), TOBN(0xeb84c4c7, 0xd5a34c79)}}, + {{TOBN(0xc1eec55c, 0x164e1214), TOBN(0x891be86d, 0xa147bb03), + TOBN(0x9fab4d10, 0x0ba96835), TOBN(0xbf01e9b8, 0xa5c1ae9f)}, + {TOBN(0x6b4de139, 0xb186ebc0), TOBN(0xd5c74c26, 0x85b91bca), + TOBN(0x5086a99c, 0xc2d93854), TOBN(0xeed62a7b, 0xa7a9dfbc)}}, + {{TOBN(0x8778ed6f, 0x76b7618a), TOBN(0xbff750a5, 0x03b66062), + TOBN(0x4cb7be22, 0xb65186db), TOBN(0x369dfbf0, 0xcc3a6d13)}, + {TOBN(0xc7dab26c, 0x7191a321), TOBN(0x9edac3f9, 0x40ed718e), + TOBN(0xbc142b36, 0xd0cfd183), TOBN(0xc8af82f6, 0x7c991693)}}, + {{TOBN(0xb3d1e4d8, 0x97ce0b2a), TOBN(0xe6d7c87f, 0xc3a55cdf), + TOBN(0x35846b95, 0x68b81afe), TOBN(0x018d12af, 0xd3c239d8)}, + {TOBN(0x2b2c6208, 0x01206e15), TOBN(0xe0e42453, 0xa3b882c6), + TOBN(0x854470a3, 0xa50162d5), TOBN(0x08157478, 0x7017a62a)}}, + {{TOBN(0x18bd3fb4, 0x820357c7), TOBN(0x992039ae, 0x6f1458ad), + TOBN(0x9a1df3c5, 0x25b44aa1), TOBN(0x2d780357, 0xed3d5281)}, + {TOBN(0x58cf7e4d, 0xc77ad4d4), TOBN(0xd49a7998, 0xf9df4fc4), + TOBN(0x4465a8b5, 0x1d71205e), TOBN(0xa0ee0ea6, 0x649254aa)}}, + {{TOBN(0x4b5eeecf, 0xab7bd771), TOBN(0x6c873073, 0x35c262b9), + TOBN(0xdc5bd648, 0x3c9d61e7), TOBN(0x233d6d54, 0x321460d2)}, + {TOBN(0xd20c5626, 0xfc195bcc), TOBN(0x25445958, 0x04d78b63), + TOBN(0xe03fcb3d, 0x17ec8ef3), TOBN(0x54b690d1, 0x46b8f781)}}, + {{TOBN(0x82fa2c8a, 0x21230646), TOBN(0xf51aabb9, 0x084f418c), + TOBN(0xff4fbec1, 0x1a30ba43), TOBN(0x6a5acf73, 0x743c9df7)}, + {TOBN(0x1da2b357, 0xd635b4d5), TOBN(0xc3de68dd, 0xecd5c1da), + TOBN(0xa689080b, 0xd61af0dd), TOBN(0xdea5938a, 0xd665bf99)}}, + {{TOBN(0x0231d71a, 0xfe637294), TOBN(0x01968aa6, 0xa5a81cd8), + TOBN(0x11252d50, 0x048e63b5), TOBN(0xc446bc52, 0x6ca007e9)}, + {TOBN(0xef8c50a6, 0x96d6134b), TOBN(0x9361fbf5, 0x9e09a05c), + TOBN(0xf17f85a6, 0xdca3291a), TOBN(0xb178d548, 0xff251a21)}}, + {{TOBN(0x87f6374b, 0xa4df3915), TOBN(0x566ce1bf, 0x2fd5d608), + TOBN(0x425cba4d, 0x7de35102), TOBN(0x6b745f8f, 0x58c5d5e2)}, + {TOBN(0x88402af6, 0x63122edf), TOBN(0x3190f9ed, 0x3b989a89), + TOBN(0x4ad3d387, 0xebba3156), TOBN(0xef385ad9, 0xc7c469a5)}}, + {{TOBN(0xb08281de, 0x3f642c29), TOBN(0x20be0888, 0x910ffb88), + TOBN(0xf353dd4a, 0xd5292546), TOBN(0x3f1627de, 0x8377a262)}, + {TOBN(0xa5faa013, 0xeefcd638), TOBN(0x8f3bf626, 0x74cc77c3), + TOBN(0x32618f65, 0xa348f55e), TOBN(0x5787c0dc, 0x9fefeb9e)}}, + {{TOBN(0xf1673aa2, 0xd9a23e44), TOBN(0x88dfa993, 0x4e10690d), + TOBN(0x1ced1b36, 0x2bf91108), TOBN(0x9193ceca, 0x3af48649)}, + {TOBN(0xfb34327d, 0x2d738fc5), TOBN(0x6697b037, 0x975fee6c), + TOBN(0x2f485da0, 0xc04079a5), TOBN(0x2cdf5735, 0x2feaa1ac)}}, + {{TOBN(0x76944420, 0xbd55659e), TOBN(0x7973e32b, 0x4376090c), + TOBN(0x86bb4fe1, 0x163b591a), TOBN(0x10441aed, 0xc196f0ca)}, + {TOBN(0x3b431f4a, 0x045ad915), TOBN(0x6c11b437, 0xa4afacb1), + TOBN(0x30b0c7db, 0x71fdbbd8), TOBN(0xb642931f, 0xeda65acd)}}, + {{TOBN(0x4baae6e8, 0x9c92b235), TOBN(0xa73bbd0e, 0x6b3993a1), + TOBN(0xd06d60ec, 0x693dd031), TOBN(0x03cab91b, 0x7156881c)}, + {TOBN(0xd615862f, 0x1db3574b), TOBN(0x485b0185, 0x64bb061a), + TOBN(0x27434988, 0xa0181e06), TOBN(0x2cd61ad4, 0xc1c0c757)}}, + {{TOBN(0x3effed5a, 0x2ff9f403), TOBN(0x8dc98d8b, 0x62239029), + TOBN(0x2206021e, 0x1f17b70d), TOBN(0xafbec0ca, 0xbf510015)}, + {TOBN(0x9fed7164, 0x80130dfa), TOBN(0x306dc2b5, 0x8a02dcf5), + TOBN(0x48f06620, 0xfeb10fc0), TOBN(0x78d1e1d5, 0x5a57cf51)}}, + {{TOBN(0xadef8c5a, 0x192ef710), TOBN(0x88afbd4b, 0x3b7431f9), + TOBN(0x7e1f7407, 0x64250c9e), TOBN(0x6e31318d, 0xb58bec07)}, + {TOBN(0xfd4fc4b8, 0x24f89b4e), TOBN(0x65a5dd88, 0x48c36a2a), + TOBN(0x4f1eccff, 0xf024baa7), TOBN(0x22a21cf2, 0xcba94650)}}, + {{TOBN(0x95d29dee, 0x42a554f7), TOBN(0x828983a5, 0x002ec4ba), + TOBN(0x8112a1f7, 0x8badb73d), TOBN(0x79ea8897, 0xa27c1839)}, + {TOBN(0x8969a5a7, 0xd065fd83), TOBN(0xf49af791, 0xb262a0bc), + TOBN(0xfcdea8b6, 0xaf2b5127), TOBN(0x10e913e1, 0x564c2dbc)}}, + {{TOBN(0x51239d14, 0xbc21ef51), TOBN(0xe51c3ceb, 0x4ce57292), + TOBN(0x795ff068, 0x47bbcc3b), TOBN(0x86b46e1e, 0xbd7e11e6)}, + {TOBN(0x0ea6ba23, 0x80041ef4), TOBN(0xd72fe505, 0x6262342e), + TOBN(0x8abc6dfd, 0x31d294d4), TOBN(0xbbe017a2, 0x1278c2c9)}}, + {{TOBN(0xb1fcfa09, 0xb389328a), TOBN(0x322fbc62, 0xd01771b5), + TOBN(0x04c0d063, 0x60b045bf), TOBN(0xdb652edc, 0x10e52d01)}, + {TOBN(0x50ef932c, 0x03ec6627), TOBN(0xde1b3b2d, 0xc1ee50e3), + TOBN(0x5ab7bdc5, 0xdc37a90d), TOBN(0xfea67213, 0x31e33a96)}}, + {{TOBN(0x6482b5cb, 0x4f2999aa), TOBN(0x38476cc6, 0xb8cbf0dd), + TOBN(0x93ebfacb, 0x173405bb), TOBN(0x15cdafe7, 0xe52369ec)}, + {TOBN(0xd42d5ba4, 0xd935b7db), TOBN(0x648b6004, 0x1c99a4cd), + TOBN(0x785101bd, 0xa3b5545b), TOBN(0x4bf2c38a, 0x9dd67faf)}}, + {{TOBN(0xb1aadc63, 0x4442449c), TOBN(0xe0e9921a, 0x33ad4fb8), + TOBN(0x5c552313, 0xaa686d82), TOBN(0xdee635fa, 0x465d866c)}, + {TOBN(0xbc3c224a, 0x18ee6e8a), TOBN(0xeed748a6, 0xed42e02f), + TOBN(0xe70f930a, 0xd474cd08), TOBN(0x774ea6ec, 0xfff24adf)}}, + {{TOBN(0x03e2de1c, 0xf3480d4a), TOBN(0xf0d8edc7, 0xbc8acf1a), + TOBN(0xf23e3303, 0x68295a9c), TOBN(0xfadd5f68, 0xc546a97d)}, + {TOBN(0x895597ad, 0x96f8acb1), TOBN(0xbddd49d5, 0x671bdae2), + TOBN(0x16fcd528, 0x21dd43f4), TOBN(0xa5a45412, 0x6619141a)}}}, + {{{TOBN(0x8ce9b6bf, 0xc360e25a), TOBN(0xe6425195, 0x075a1a78), + TOBN(0x9dc756a8, 0x481732f4), TOBN(0x83c0440f, 0x5432b57a)}, + {TOBN(0xc670b3f1, 0xd720281f), TOBN(0x2205910e, 0xd135e051), + TOBN(0xded14b0e, 0xdb052be7), TOBN(0x697b3d27, 0xc568ea39)}}, + {{TOBN(0x2e599b9a, 0xfb3ff9ed), TOBN(0x28c2e0ab, 0x17f6515c), + TOBN(0x1cbee4fd, 0x474da449), TOBN(0x071279a4, 0x4f364452)}, + {TOBN(0x97abff66, 0x01fbe855), TOBN(0x3ee394e8, 0x5fda51c4), + TOBN(0x190385f6, 0x67597c0b), TOBN(0x6e9fccc6, 0xa27ee34b)}}, + {{TOBN(0x0b89de93, 0x14092ebb), TOBN(0xf17256bd, 0x428e240c), + TOBN(0xcf89a7f3, 0x93d2f064), TOBN(0x4f57841e, 0xe1ed3b14)}, + {TOBN(0x4ee14405, 0xe708d855), TOBN(0x856aae72, 0x03f1c3d0), + TOBN(0xc8e5424f, 0xbdd7eed5), TOBN(0x3333e4ef, 0x73ab4270)}}, + {{TOBN(0x3bc77ade, 0xdda492f8), TOBN(0xc11a3aea, 0x78297205), + TOBN(0x5e89a3e7, 0x34931b4c), TOBN(0x17512e2e, 0x9f5694bb)}, + {TOBN(0x5dc349f3, 0x177bf8b6), TOBN(0x232ea4ba, 0x08c7ff3e), + TOBN(0x9c4f9d16, 0xf511145d), TOBN(0xccf109a3, 0x33b379c3)}}, + {{TOBN(0xe75e7a88, 0xa1f25897), TOBN(0x7ac6961f, 0xa1b5d4d8), + TOBN(0xe3e10773, 0x08f3ed5c), TOBN(0x208a54ec, 0x0a892dfb)}, + {TOBN(0xbe826e19, 0x78660710), TOBN(0x0cf70a97, 0x237df2c8), + TOBN(0x418a7340, 0xed704da5), TOBN(0xa3eeb9a9, 0x08ca33fd)}}, + {{TOBN(0x49d96233, 0x169bca96), TOBN(0x04d286d4, 0x2da6aafb), + TOBN(0xc09606ec, 0xa0c2fa94), TOBN(0x8869d0d5, 0x23ff0fb3)}, + {TOBN(0xa99937e5, 0xd0150d65), TOBN(0xa92e2503, 0x240c14c9), + TOBN(0x656bf945, 0x108e2d49), TOBN(0x152a733a, 0xa2f59e2b)}}, + {{TOBN(0xb4323d58, 0x8434a920), TOBN(0xc0af8e93, 0x622103c5), + TOBN(0x667518ef, 0x938dbf9a), TOBN(0xa1843073, 0x83a9cdf2)}, + {TOBN(0x350a94aa, 0x5447ab80), TOBN(0xe5e5a325, 0xc75a3d61), + TOBN(0x74ba507f, 0x68411a9e), TOBN(0x10581fc1, 0x594f70c5)}}, + {{TOBN(0x60e28570, 0x80eb24a9), TOBN(0x7bedfb4d, 0x488e0cfd), + TOBN(0x721ebbd7, 0xc259cdb8), TOBN(0x0b0da855, 0xbc6390a9)}, + {TOBN(0x2b4d04db, 0xde314c70), TOBN(0xcdbf1fbc, 0x6c32e846), + TOBN(0x33833eab, 0xb162fc9e), TOBN(0x9939b48b, 0xb0dd3ab7)}}, + {{TOBN(0x5aaa98a7, 0xcb0c9c8c), TOBN(0x75105f30, 0x81c4375c), + TOBN(0xceee5057, 0x5ef1c90f), TOBN(0xb31e065f, 0xc23a17bf)}, + {TOBN(0x5364d275, 0xd4b6d45a), TOBN(0xd363f3ad, 0x62ec8996), + TOBN(0xb5d21239, 0x4391c65b), TOBN(0x84564765, 0xebb41b47)}}, + {{TOBN(0x20d18ecc, 0x37107c78), TOBN(0xacff3b6b, 0x570c2a66), + TOBN(0x22f975d9, 0x9bd0d845), TOBN(0xef0a0c46, 0xba178fa0)}, + {TOBN(0x1a419651, 0x76b6028e), TOBN(0xc49ec674, 0x248612d4), + TOBN(0x5b6ac4f2, 0x7338af55), TOBN(0x06145e62, 0x7bee5a36)}}, + {{TOBN(0x33e95d07, 0xe75746b5), TOBN(0x1c1e1f6d, 0xc40c78be), + TOBN(0x967833ef, 0x222ff8e2), TOBN(0x4bedcf6a, 0xb49180ad)}, + {TOBN(0x6b37e9c1, 0x3d7a4c8a), TOBN(0x2748887c, 0x6ddfe760), + TOBN(0xf7055123, 0xaa3a5bbc), TOBN(0x954ff225, 0x7bbb8e74)}}, + {{TOBN(0xc42b8ab1, 0x97c3dfb9), TOBN(0x55a549b0, 0xcf168154), + TOBN(0xad6748e7, 0xc1b50692), TOBN(0x2775780f, 0x6fc5cbcb)}, + {TOBN(0x4eab80b8, 0xe1c9d7c8), TOBN(0x8c69dae1, 0x3fdbcd56), + TOBN(0x47e6b4fb, 0x9969eace), TOBN(0x002f1085, 0xa705cb5a)}}, + {{TOBN(0x4e23ca44, 0x6d3fea55), TOBN(0xb4ae9c86, 0xf4810568), + TOBN(0x47bfb91b, 0x2a62f27d), TOBN(0x60deb4c9, 0xd9bac28c)}, + {TOBN(0xa892d894, 0x7de6c34c), TOBN(0x4ee68259, 0x4494587d), + TOBN(0x914ee14e, 0x1a3f8a5b), TOBN(0xbb113eaa, 0x28700385)}}, + {{TOBN(0x81ca03b9, 0x2115b4c9), TOBN(0x7c163d38, 0x8908cad1), + TOBN(0xc912a118, 0xaa18179a), TOBN(0xe09ed750, 0x886e3081)}, + {TOBN(0xa676e3fa, 0x26f516ca), TOBN(0x753cacf7, 0x8e732f91), + TOBN(0x51592aea, 0x833da8b4), TOBN(0xc626f42f, 0x4cbea8aa)}}, + {{TOBN(0xef9dc899, 0xa7b56eaf), TOBN(0x00c0e52c, 0x34ef7316), + TOBN(0x5b1e4e24, 0xfe818a86), TOBN(0x9d31e20d, 0xc538be47)}, + {TOBN(0x22eb932d, 0x3ed68974), TOBN(0xe44bbc08, 0x7c4e87c4), + TOBN(0x4121086e, 0x0dde9aef), TOBN(0x8e6b9cff, 0x134f4345)}}, + {{TOBN(0x96892c1f, 0x711b0eb9), TOBN(0xb905f2c8, 0x780ab954), + TOBN(0xace26309, 0xa20792db), TOBN(0xec8ac9b3, 0x0684e126)}, + {TOBN(0x486ad8b6, 0xb40a2447), TOBN(0x60121fc1, 0x9fe3fb24), + TOBN(0x5626fccf, 0x1a8e3b3f), TOBN(0x4e568622, 0x6ad1f394)}}, + {{TOBN(0xda7aae0d, 0x196aa5a1), TOBN(0xe0df8c77, 0x1041b5fb), + TOBN(0x451465d9, 0x26b318b7), TOBN(0xc29b6e55, 0x7ab136e9)}, + {TOBN(0x2c2ab48b, 0x71148463), TOBN(0xb5738de3, 0x64454a76), + TOBN(0x54ccf9a0, 0x5a03abe4), TOBN(0x377c0296, 0x0427d58e)}}, + {{TOBN(0x73f5f0b9, 0x2bb39c1f), TOBN(0x14373f2c, 0xe608d8c5), + TOBN(0xdcbfd314, 0x00fbb805), TOBN(0xdf18fb20, 0x83afdcfb)}, + {TOBN(0x81a57f42, 0x42b3523f), TOBN(0xe958532d, 0x87f650fb), + TOBN(0xaa8dc8b6, 0x8b0a7d7c), TOBN(0x1b75dfb7, 0x150166be)}}, + {{TOBN(0x90e4f7c9, 0x2d7d1413), TOBN(0x67e2d6b5, 0x9834f597), + TOBN(0x4fd4f4f9, 0xa808c3e8), TOBN(0xaf8237e0, 0xd5281ec1)}, + {TOBN(0x25ab5fdc, 0x84687cee), TOBN(0xc5ded6b1, 0xa5b26c09), + TOBN(0x8e4a5aec, 0xc8ea7650), TOBN(0x23b73e5c, 0x14cc417f)}}, + {{TOBN(0x2bfb4318, 0x3037bf52), TOBN(0xb61e6db5, 0x78c725d7), + TOBN(0x8efd4060, 0xbbb3e5d7), TOBN(0x2e014701, 0xdbac488e)}, + {TOBN(0xac75cf9a, 0x360aa449), TOBN(0xb70cfd05, 0x79634d08), + TOBN(0xa591536d, 0xfffb15ef), TOBN(0xb2c37582, 0xd07c106c)}}, + {{TOBN(0xb4293fdc, 0xf50225f9), TOBN(0xc52e175c, 0xb0e12b03), + TOBN(0xf649c3ba, 0xd0a8bf64), TOBN(0x745a8fef, 0xeb8ae3c6)}, + {TOBN(0x30d7e5a3, 0x58321bc3), TOBN(0xb1732be7, 0x0bc4df48), + TOBN(0x1f217993, 0xe9ea5058), TOBN(0xf7a71cde, 0x3e4fd745)}}, + {{TOBN(0x86cc533e, 0x894c5bbb), TOBN(0x6915c7d9, 0x69d83082), + TOBN(0xa6aa2d05, 0x5815c244), TOBN(0xaeeee592, 0x49b22ce5)}, + {TOBN(0x89e39d13, 0x78135486), TOBN(0x3a275c1f, 0x16b76f2f), + TOBN(0xdb6bcc1b, 0xe036e8f5), TOBN(0x4df69b21, 0x5e4709f5)}}, + {{TOBN(0xa188b250, 0x2d0f39aa), TOBN(0x622118bb, 0x15a85947), + TOBN(0x2ebf520f, 0xfde0f4fa), TOBN(0xa40e9f29, 0x4860e539)}, + {TOBN(0x7b6a51eb, 0x22b57f0f), TOBN(0x849a33b9, 0x7e80644a), + TOBN(0x50e5d16f, 0x1cf095fe), TOBN(0xd754b54e, 0xec55f002)}}, + {{TOBN(0x5cfbbb22, 0x236f4a98), TOBN(0x0b0c59e9, 0x066800bb), + TOBN(0x4ac69a8f, 0x5a9a7774), TOBN(0x2b33f804, 0xd6bec948)}, + {TOBN(0xb3729295, 0x32e6c466), TOBN(0x68956d0f, 0x4e599c73), + TOBN(0xa47a249f, 0x155c31cc), TOBN(0x24d80f0d, 0xe1ce284e)}}, + {{TOBN(0xcd821dfb, 0x988baf01), TOBN(0xe6331a7d, 0xdbb16647), + TOBN(0x1eb8ad33, 0x094cb960), TOBN(0x593cca38, 0xc91bbca5)}, + {TOBN(0x384aac8d, 0x26567456), TOBN(0x40fa0309, 0xc04b6490), + TOBN(0x97834cd6, 0xdab6c8f6), TOBN(0x68a7318d, 0x3f91e55f)}}, + {{TOBN(0xa00fd04e, 0xfc4d3157), TOBN(0xb56f8ab2, 0x2bf3bdea), + TOBN(0x014f5648, 0x4fa57172), TOBN(0x948c5860, 0x450abdb3)}, + {TOBN(0x342b5df0, 0x0ebd4f08), TOBN(0x3e5168cd, 0x0e82938e), + TOBN(0x7aedc1ce, 0xb0df5dd0), TOBN(0x6bbbc6d9, 0xe5732516)}}, + {{TOBN(0xc7bfd486, 0x605daaa6), TOBN(0x46fd72b7, 0xbb9a6c9e), + TOBN(0xe4847fb1, 0xa124fb89), TOBN(0x75959cbd, 0xa2d8ffbc)}, + {TOBN(0x42579f65, 0xc8a588ee), TOBN(0x368c92e6, 0xb80b499d), + TOBN(0xea4ef6cd, 0x999a5df1), TOBN(0xaa73bb7f, 0x936fe604)}}, + {{TOBN(0xf347a70d, 0x6457d188), TOBN(0x86eda86b, 0x8b7a388b), + TOBN(0xb7cdff06, 0x0ccd6013), TOBN(0xbeb1b6c7, 0xd0053fb2)}, + {TOBN(0x0b022387, 0x99240a9f), TOBN(0x1bbb384f, 0x776189b2), + TOBN(0x8695e71e, 0x9066193a), TOBN(0x2eb50097, 0x06ffac7e)}}, + {{TOBN(0x0654a9c0, 0x4a7d2caa), TOBN(0x6f3fb3d1, 0xa5aaa290), + TOBN(0x835db041, 0xff476e8f), TOBN(0x540b8b0b, 0xc42295e4)}, + {TOBN(0xa5c73ac9, 0x05e214f5), TOBN(0x9a74075a, 0x56a0b638), + TOBN(0x2e4b1090, 0xce9e680b), TOBN(0x57a5b479, 0x6b8d9afa)}}, + {{TOBN(0x0dca48e7, 0x26bfe65c), TOBN(0x097e391c, 0x7290c307), + TOBN(0x683c462e, 0x6669e72e), TOBN(0xf505be1e, 0x062559ac)}, + {TOBN(0x5fbe3ea1, 0xe3a3035a), TOBN(0x6431ebf6, 0x9cd50da8), + TOBN(0xfd169d5c, 0x1f6407f2), TOBN(0x8d838a95, 0x60fce6b8)}}, + {{TOBN(0x2a2bfa7f, 0x650006f0), TOBN(0xdfd7dad3, 0x50c0fbb2), + TOBN(0x92452495, 0xccf9ad96), TOBN(0x183bf494, 0xd95635f9)}, + {TOBN(0x02d5df43, 0x4a7bd989), TOBN(0x505385cc, 0xa5431095), + TOBN(0xdd98e67d, 0xfd43f53e), TOBN(0xd61e1a6c, 0x500c34a9)}}, + {{TOBN(0x5a4b46c6, 0x4a8a3d62), TOBN(0x8469c4d0, 0x247743d2), + TOBN(0x2bb3a13d, 0x88f7e433), TOBN(0x62b23a10, 0x01be5849)}, + {TOBN(0xe83596b4, 0xa63d1a4c), TOBN(0x454e7fea, 0x7d183f3e), + TOBN(0x643fce61, 0x17afb01c), TOBN(0x4e65e5e6, 0x1c4c3638)}}, + {{TOBN(0x41d85ea1, 0xef74c45b), TOBN(0x2cfbfa66, 0xae328506), + TOBN(0x98b078f5, 0x3ada7da9), TOBN(0xd985fe37, 0xec752fbb)}, + {TOBN(0xeece68fe, 0x5a0148b4), TOBN(0x6f9a55c7, 0x2d78136d), + TOBN(0x232dccc4, 0xd2b729ce), TOBN(0xa27e0dfd, 0x90aafbc4)}}, + {{TOBN(0x96474452, 0x12b4603e), TOBN(0xa876c551, 0x6b706d14), + TOBN(0xdf145fcf, 0x69a9d412), TOBN(0xe2ab75b7, 0x2d479c34)}, + {TOBN(0x12df9a76, 0x1a23ff97), TOBN(0xc6138992, 0x5d359d10), + TOBN(0x6e51c7ae, 0xfa835f22), TOBN(0x69a79cb1, 0xc0fcc4d9)}}, + {{TOBN(0xf57f350d, 0x594cc7e1), TOBN(0x3079ca63, 0x3350ab79), + TOBN(0x226fb614, 0x9aff594a), TOBN(0x35afec02, 0x6d59a62b)}, + {TOBN(0x9bee46f4, 0x06ed2c6e), TOBN(0x58da1735, 0x7d939a57), + TOBN(0x44c50402, 0x8fd1797e), TOBN(0xd8853e7c, 0x5ccea6ca)}}, + {{TOBN(0x4065508d, 0xa35fcd5f), TOBN(0x8965df8c, 0x495ccaeb), + TOBN(0x0f2da850, 0x12e1a962), TOBN(0xee471b94, 0xc1cf1cc4)}, + {TOBN(0xcef19bc8, 0x0a08fb75), TOBN(0x704958f5, 0x81de3591), + TOBN(0x2867f8b2, 0x3aef4f88), TOBN(0x8d749384, 0xea9f9a5f)}}, + {{TOBN(0x1b385537, 0x8c9049f4), TOBN(0x5be948f3, 0x7b92d8b6), + TOBN(0xd96f725d, 0xb6e2bd6b), TOBN(0x37a222bc, 0x958c454d)}, + {TOBN(0xe7c61abb, 0x8809bf61), TOBN(0x46f07fbc, 0x1346f18d), + TOBN(0xfb567a7a, 0xe87c0d1c), TOBN(0x84a461c8, 0x7ef3d07a)}}, + {{TOBN(0x0a5adce6, 0xd9278d98), TOBN(0x24d94813, 0x9dfc73e1), + TOBN(0x4f3528b6, 0x054321c3), TOBN(0x2e03fdde, 0x692ea706)}, + {TOBN(0x10e60619, 0x47b533c0), TOBN(0x1a8bc73f, 0x2ca3c055), + TOBN(0xae58d4b2, 0x1bb62b8f), TOBN(0xb2045a73, 0x584a24e3)}}, + {{TOBN(0x3ab3d5af, 0xbd76e195), TOBN(0x478dd1ad, 0x6938a810), + TOBN(0x6ffab393, 0x6ee3d5cb), TOBN(0xdfb693db, 0x22b361e4)}, + {TOBN(0xf9694496, 0x51dbf1a7), TOBN(0xcab4b4ef, 0x08a2e762), + TOBN(0xe8c92f25, 0xd39bba9a), TOBN(0x850e61bc, 0xf1464d96)}}, + {{TOBN(0xb7e830e3, 0xdc09508b), TOBN(0xfaf6d2cf, 0x74317655), + TOBN(0x72606ceb, 0xdf690355), TOBN(0x48bb92b3, 0xd0c3ded6)}, + {TOBN(0x65b75484, 0x5c7cf892), TOBN(0xf6cd7ac9, 0xd5d5f01f), + TOBN(0xc2c30a59, 0x96401d69), TOBN(0x91268650, 0xed921878)}}, + {{TOBN(0x380bf913, 0xb78c558f), TOBN(0x43c0baeb, 0xc8afdaa9), + TOBN(0x377f61d5, 0x54f169d3), TOBN(0xf8da07e3, 0xae5ff20b)}, + {TOBN(0xb676c49d, 0xa8a90ea8), TOBN(0x81c1ff2b, 0x83a29b21), + TOBN(0x383297ac, 0x2ad8d276), TOBN(0x3001122f, 0xba89f982)}}, + {{TOBN(0xe1d794be, 0x6718e448), TOBN(0x246c1482, 0x7c3e6e13), + TOBN(0x56646ef8, 0x5d26b5ef), TOBN(0x80f5091e, 0x88069cdd)}, + {TOBN(0xc5992e2f, 0x724bdd38), TOBN(0x02e915b4, 0x8471e8c7), + TOBN(0x96ff320a, 0x0d0ff2a9), TOBN(0xbf886487, 0x4384d1a0)}}, + {{TOBN(0xbbe1e6a6, 0xc93f72d6), TOBN(0xd5f75d12, 0xcad800ea), + TOBN(0xfa40a09f, 0xe7acf117), TOBN(0x32c8cdd5, 0x7581a355)}, + {TOBN(0x74221992, 0x7023c499), TOBN(0xa8afe5d7, 0x38ec3901), + TOBN(0x5691afcb, 0xa90e83f0), TOBN(0x41bcaa03, 0x0b8f8eac)}}, + {{TOBN(0xe38b5ff9, 0x8d2668d5), TOBN(0x0715281a, 0x7ad81965), + TOBN(0x1bc8fc7c, 0x03c6ce11), TOBN(0xcbbee6e2, 0x8b650436)}, + {TOBN(0x06b00fe8, 0x0cdb9808), TOBN(0x17d6e066, 0xfe3ed315), + TOBN(0x2e9d38c6, 0x4d0b5018), TOBN(0xab8bfd56, 0x844dcaef)}}, + {{TOBN(0x42894a59, 0x513aed8b), TOBN(0xf77f3b6d, 0x314bd07a), + TOBN(0xbbdecb8f, 0x8e42b582), TOBN(0xf10e2fa8, 0xd2390fe6)}, + {TOBN(0xefb95022, 0x62a2f201), TOBN(0x4d59ea50, 0x50ee32b0), + TOBN(0xd87f7728, 0x6da789a8), TOBN(0xcf98a2cf, 0xf79492c4)}}, + {{TOBN(0xf9577239, 0x720943c2), TOBN(0xba044cf5, 0x3990b9d0), + TOBN(0x5aa8e823, 0x95f2884a), TOBN(0x834de6ed, 0x0278a0af)}, + {TOBN(0xc8e1ee9a, 0x5f25bd12), TOBN(0x9259ceaa, 0x6f7ab271), + TOBN(0x7e6d97a2, 0x77d00b76), TOBN(0x5c0c6eea, 0xa437832a)}}, + {{TOBN(0x5232c20f, 0x5606b81d), TOBN(0xabd7b375, 0x0d991ee5), + TOBN(0x4d2bfe35, 0x8632d951), TOBN(0x78f85146, 0x98ed9364)}, + {TOBN(0x951873f0, 0xf30c3282), TOBN(0x0da8ac80, 0xa789230b), + TOBN(0x3ac7789c, 0x5398967f), TOBN(0xa69b8f7f, 0xbdda0fb5)}}, + {{TOBN(0xe5db7717, 0x6add8545), TOBN(0x1b71cb66, 0x72c49b66), + TOBN(0xd8560739, 0x68421d77), TOBN(0x03840fe8, 0x83e3afea)}, + {TOBN(0xb391dad5, 0x1ec69977), TOBN(0xae243fb9, 0x307f6726), + TOBN(0xc88ac87b, 0xe8ca160c), TOBN(0x5174cced, 0x4ce355f4)}}, + {{TOBN(0x98a35966, 0xe58ba37d), TOBN(0xfdcc8da2, 0x7817335d), + TOBN(0x5b752830, 0x83fbc7bf), TOBN(0x68e419d4, 0xd9c96984)}, + {TOBN(0x409a39f4, 0x02a40380), TOBN(0x88940faf, 0x1fe977bc), + TOBN(0xc640a94b, 0x8f8edea6), TOBN(0x1e22cd17, 0xed11547d)}}, + {{TOBN(0xe28568ce, 0x59ffc3e2), TOBN(0x60aa1b55, 0xc1dee4e7), + TOBN(0xc67497c8, 0x837cb363), TOBN(0x06fb438a, 0x105a2bf2)}, + {TOBN(0x30357ec4, 0x500d8e20), TOBN(0x1ad9095d, 0x0670db10), + TOBN(0x7f589a05, 0xc73b7cfd), TOBN(0xf544607d, 0x880d6d28)}}, + {{TOBN(0x17ba93b1, 0xa20ef103), TOBN(0xad859130, 0x6ba6577b), + TOBN(0x65c91cf6, 0x6fa214a0), TOBN(0xd7d49c6c, 0x27990da5)}, + {TOBN(0xecd9ec8d, 0x20bb569d), TOBN(0xbd4b2502, 0xeeffbc33), + TOBN(0x2056ca5a, 0x6bed0467), TOBN(0x7916a1f7, 0x5b63728c)}}, + {{TOBN(0xd4f9497d, 0x53a4f566), TOBN(0x89734664, 0x97b56810), + TOBN(0xf8e1da74, 0x0494a621), TOBN(0x82546a93, 0x8d011c68)}, + {TOBN(0x1f3acb19, 0xc61ac162), TOBN(0x52f8fa9c, 0xabad0d3e), + TOBN(0x15356523, 0xb4b7ea43), TOBN(0x5a16ad61, 0xae608125)}}, + {{TOBN(0xb0bcb87f, 0x4faed184), TOBN(0x5f236b1d, 0x5029f45f), + TOBN(0xd42c7607, 0x0bc6b1fc), TOBN(0xc644324e, 0x68aefce3)}, + {TOBN(0x8e191d59, 0x5c5d8446), TOBN(0xc0208077, 0x13ae1979), + TOBN(0xadcaee55, 0x3ba59cc7), TOBN(0x20ed6d6b, 0xa2cb81ba)}}, + {{TOBN(0x0952ba19, 0xb6efcffc), TOBN(0x60f12d68, 0x97c0b87c), + TOBN(0x4ee2c7c4, 0x9caa30bc), TOBN(0x767238b7, 0x97fbff4e)}, + {TOBN(0xebc73921, 0x501b5d92), TOBN(0x3279e3df, 0xc2a37737), + TOBN(0x9fc12bc8, 0x6d197543), TOBN(0xfa94dc6f, 0x0a40db4e)}}, + {{TOBN(0x7392b41a, 0x530ccbbd), TOBN(0x87c82146, 0xea823525), + TOBN(0xa52f984c, 0x05d98d0c), TOBN(0x2ae57d73, 0x5ef6974c)}, + {TOBN(0x9377f7bf, 0x3042a6dd), TOBN(0xb1a007c0, 0x19647a64), + TOBN(0xfaa9079a, 0x0cca9767), TOBN(0x3d81a25b, 0xf68f72d5)}}, + {{TOBN(0x752067f8, 0xff81578e), TOBN(0x78622150, 0x9045447d), + TOBN(0xc0c22fcf, 0x0505aa6f), TOBN(0x1030f0a6, 0x6bed1c77)}, + {TOBN(0x31f29f15, 0x1f0bd739), TOBN(0x2d7989c7, 0xe6debe85), + TOBN(0x5c070e72, 0x8e677e98), TOBN(0x0a817bd3, 0x06e81fd5)}}, + {{TOBN(0xc110d830, 0xb0f2ac95), TOBN(0x48d0995a, 0xab20e64e), + TOBN(0x0f3e00e1, 0x7729cd9a), TOBN(0x2a570c20, 0xdd556946)}, + {TOBN(0x912dbcfd, 0x4e86214d), TOBN(0x2d014ee2, 0xcf615498), + TOBN(0x55e2b1e6, 0x3530d76e), TOBN(0xc5135ae4, 0xfd0fd6d1)}}, + {{TOBN(0x0066273a, 0xd4f3049f), TOBN(0xbb8e9893, 0xe7087477), + TOBN(0x2dba1ddb, 0x14c6e5fd), TOBN(0xdba37886, 0x51f57e6c)}, + {TOBN(0x5aaee0a6, 0x5a72f2cf), TOBN(0x1208bfbf, 0x7bea5642), + TOBN(0xf5c6aa3b, 0x67872c37), TOBN(0xd726e083, 0x43f93224)}}, + {{TOBN(0x1854daa5, 0x061f1658), TOBN(0xc0016df1, 0xdf0cd2b3), + TOBN(0xc2a3f23e, 0x833d50de), TOBN(0x73b681d2, 0xbbbd3017)}, + {TOBN(0x2f046dc4, 0x3ac343c0), TOBN(0x9c847e7d, 0x85716421), + TOBN(0xe1e13c91, 0x0917eed4), TOBN(0x3fc9eebd, 0x63a1b9c6)}}, + {{TOBN(0x0f816a72, 0x7fe02299), TOBN(0x6335ccc2, 0x294f3319), + TOBN(0x3820179f, 0x4745c5be), TOBN(0xe647b782, 0x922f066e)}, + {TOBN(0xc22e49de, 0x02cafb8a), TOBN(0x299bc2ff, 0xfcc2eccc), + TOBN(0x9a8feea2, 0x6e0e8282), TOBN(0xa627278b, 0xfe893205)}}, + {{TOBN(0xa7e19733, 0x7933e47b), TOBN(0xf4ff6b13, 0x2e766402), + TOBN(0xa4d8be0a, 0x98440d9f), TOBN(0x658f5c2f, 0x38938808)}, + {TOBN(0x90b75677, 0xc95b3b3e), TOBN(0xfa044269, 0x3137b6ff), + TOBN(0x077b039b, 0x43c47c29), TOBN(0xcca95dd3, 0x8a6445b2)}}, + {{TOBN(0x0b498ba4, 0x2333fc4c), TOBN(0x274f8e68, 0xf736a1b1), + TOBN(0x6ca348fd, 0x5f1d4b2e), TOBN(0x24d3be78, 0xa8f10199)}, + {TOBN(0x8535f858, 0xca14f530), TOBN(0xa6e7f163, 0x5b982e51), + TOBN(0x847c8512, 0x36e1bf62), TOBN(0xf6a7c58e, 0x03448418)}}, + {{TOBN(0x583f3703, 0xf9374ab6), TOBN(0x864f9195, 0x6e564145), + TOBN(0x33bc3f48, 0x22526d50), TOBN(0x9f323c80, 0x1262a496)}, + {TOBN(0xaa97a7ae, 0x3f046a9a), TOBN(0x70da183e, 0xdf8a039a), + TOBN(0x5b68f71c, 0x52aa0ba6), TOBN(0x9be0fe51, 0x21459c2d)}}, + {{TOBN(0xc1e17eb6, 0xcbc613e5), TOBN(0x33131d55, 0x497ea61c), + TOBN(0x2f69d39e, 0xaf7eded5), TOBN(0x73c2f434, 0xde6af11b)}, + {TOBN(0x4ca52493, 0xa4a375fa), TOBN(0x5f06787c, 0xb833c5c2), + TOBN(0x814e091f, 0x3e6e71cf), TOBN(0x76451f57, 0x8b746666)}}}, + {{{TOBN(0x80f9bdef, 0x694db7e0), TOBN(0xedca8787, 0xb9fcddc6), + TOBN(0x51981c34, 0x03b8dce1), TOBN(0x4274dcf1, 0x70e10ba1)}, + {TOBN(0xf72743b8, 0x6def6d1a), TOBN(0xd25b1670, 0xebdb1866), + TOBN(0xc4491e8c, 0x050c6f58), TOBN(0x2be2b2ab, 0x87fbd7f5)}}, + {{TOBN(0x3e0e5c9d, 0xd111f8ec), TOBN(0xbcc33f8d, 0xb7c4e760), + TOBN(0x702f9a91, 0xbd392a51), TOBN(0x7da4a795, 0xc132e92d)}, + {TOBN(0x1a0b0ae3, 0x0bb1151b), TOBN(0x54febac8, 0x02e32251), + TOBN(0xea3a5082, 0x694e9e78), TOBN(0xe58ffec1, 0xe4fe40b8)}}, + {{TOBN(0xf85592fc, 0xd1e0cf9e), TOBN(0xdea75f0d, 0xc0e7b2e8), + TOBN(0xc04215cf, 0xc135584e), TOBN(0x174fc727, 0x2f57092a)}, + {TOBN(0xe7277877, 0xeb930bea), TOBN(0x504caccb, 0x5eb02a5a), + TOBN(0xf9fe08f7, 0xf5241b9b), TOBN(0xe7fb62f4, 0x8d5ca954)}}, + {{TOBN(0xfbb8349d, 0x29c4120b), TOBN(0x9f94391f, 0xc0d0d915), + TOBN(0xc4074fa7, 0x5410ba51), TOBN(0xa66adbf6, 0x150a5911)}, + {TOBN(0xc164543c, 0x34bfca38), TOBN(0xe0f27560, 0xb9e1ccfc), + TOBN(0x99da0f53, 0xe820219c), TOBN(0xe8234498, 0xc6b4997a)}}, + {{TOBN(0xcfb88b76, 0x9d4c5423), TOBN(0x9e56eb10, 0xb0521c49), + TOBN(0x418e0b5e, 0xbe8700a1), TOBN(0x00cbaad6, 0xf93cb58a)}, + {TOBN(0xe923fbde, 0xd92a5e67), TOBN(0xca4979ac, 0x1f347f11), + TOBN(0x89162d85, 0x6bc0585b), TOBN(0xdd6254af, 0xac3c70e3)}}, + {{TOBN(0x7b23c513, 0x516e19e4), TOBN(0x56e2e847, 0xc5c4d593), + TOBN(0x9f727d73, 0x5ce71ef6), TOBN(0x5b6304a6, 0xf79a44c5)}, + {TOBN(0x6638a736, 0x3ab7e433), TOBN(0x1adea470, 0xfe742f83), + TOBN(0xe054b854, 0x5b7fc19f), TOBN(0xf935381a, 0xba1d0698)}}, + {{TOBN(0x546eab2d, 0x799e9a74), TOBN(0x96239e0e, 0xa949f729), + TOBN(0xca274c6b, 0x7090055a), TOBN(0x835142c3, 0x9020c9b0)}, + {TOBN(0xa405667a, 0xa2e8807f), TOBN(0x29f2c085, 0x1aa3d39e), + TOBN(0xcc555d64, 0x42fc72f5), TOBN(0xe856e0e7, 0xfbeacb3c)}}, + {{TOBN(0xb5504f9d, 0x918e4936), TOBN(0x65035ef6, 0xb2513982), + TOBN(0x0553a0c2, 0x6f4d9cb9), TOBN(0x6cb10d56, 0xbea85509)}, + {TOBN(0x48d957b7, 0xa242da11), TOBN(0x16a4d3dd, 0x672b7268), + TOBN(0x3d7e637c, 0x8502a96b), TOBN(0x27c7032b, 0x730d463b)}}, + {{TOBN(0xbdc02b18, 0xe4136a14), TOBN(0xbacf969d, 0x678e32bf), + TOBN(0xc98d89a3, 0xdd9c3c03), TOBN(0x7b92420a, 0x23becc4f)}, + {TOBN(0xd4b41f78, 0xc64d565c), TOBN(0x9f969d00, 0x10f28295), + TOBN(0xec7f7f76, 0xb13d051a), TOBN(0x08945e1e, 0xa92da585)}}, + {{TOBN(0x55366b7d, 0x5846426f), TOBN(0xe7d09e89, 0x247d441d), + TOBN(0x510b404d, 0x736fbf48), TOBN(0x7fa003d0, 0xe784bd7d)}, + {TOBN(0x25f7614f, 0x17fd9596), TOBN(0x49e0e0a1, 0x35cb98db), + TOBN(0x2c65957b, 0x2e83a76a), TOBN(0x5d40da8d, 0xcddbe0f8)}}, + {{TOBN(0xf2b8c405, 0x050bad24), TOBN(0x8918426d, 0xc2aa4823), + TOBN(0x2aeab3dd, 0xa38365a7), TOBN(0x72031717, 0x7c91b690)}, + {TOBN(0x8b00d699, 0x60a94120), TOBN(0x478a255d, 0xe99eaeec), + TOBN(0xbf656a5f, 0x6f60aafd), TOBN(0xdfd7cb75, 0x5dee77b3)}}, + {{TOBN(0x37f68bb4, 0xa595939d), TOBN(0x03556479, 0x28740217), + TOBN(0x8e740e7c, 0x84ad7612), TOBN(0xd89bc843, 0x9044695f)}, + {TOBN(0xf7f3da5d, 0x85a9184d), TOBN(0x562563bb, 0x9fc0b074), + TOBN(0x06d2e6aa, 0xf88a888e), TOBN(0x612d8643, 0x161fbe7c)}}, + {{TOBN(0x465edba7, 0xf64085e7), TOBN(0xb230f304, 0x29aa8511), + TOBN(0x53388426, 0xcda2d188), TOBN(0x90885735, 0x4b666649)}, + {TOBN(0x6f02ff9a, 0x652f54f6), TOBN(0x65c82294, 0x5fae2bf0), + TOBN(0x7816ade0, 0x62f5eee3), TOBN(0xdcdbdf43, 0xfcc56d70)}}, + {{TOBN(0x9fb3bba3, 0x54530bb2), TOBN(0xbde3ef77, 0xcb0869ea), + TOBN(0x89bc9046, 0x0b431163), TOBN(0x4d03d7d2, 0xe4819a35)}, + {TOBN(0x33ae4f9e, 0x43b6a782), TOBN(0x216db307, 0x9c88a686), + TOBN(0x91dd88e0, 0x00ffedd9), TOBN(0xb280da9f, 0x12bd4840)}}, + {{TOBN(0x32a7cb8a, 0x1635e741), TOBN(0xfe14008a, 0x78be02a7), + TOBN(0x3fafb334, 0x1b7ae030), TOBN(0x7fd508e7, 0x5add0ce9)}, + {TOBN(0x72c83219, 0xd607ad51), TOBN(0x0f229c0a, 0x8d40964a), + TOBN(0x1be2c336, 0x1c878da2), TOBN(0xe0c96742, 0xeab2ab86)}}, + {{TOBN(0x458f8691, 0x3e538cd7), TOBN(0xa7001f6c, 0x8e08ad53), + TOBN(0x52b8c6e6, 0xbf5d15ff), TOBN(0x548234a4, 0x011215dd)}, + {TOBN(0xff5a9d2d, 0x3d5b4045), TOBN(0xb0ffeeb6, 0x4a904190), + TOBN(0x55a3aca4, 0x48607f8b), TOBN(0x8cbd665c, 0x30a0672a)}}, + {{TOBN(0x87f834e0, 0x42583068), TOBN(0x02da2aeb, 0xf3f6e683), + TOBN(0x6b763e5d, 0x05c12248), TOBN(0x7230378f, 0x65a8aefc)}, + {TOBN(0x93bd80b5, 0x71e8e5ca), TOBN(0x53ab041c, 0xb3b62524), + TOBN(0x1b860513, 0x6c9c552e), TOBN(0xe84d402c, 0xd5524e66)}}, + {{TOBN(0xa37f3573, 0xf37f5937), TOBN(0xeb0f6c7d, 0xd1e4fca5), + TOBN(0x2965a554, 0xac8ab0fc), TOBN(0x17fbf56c, 0x274676ac)}, + {TOBN(0x2e2f6bd9, 0xacf7d720), TOBN(0x41fc8f88, 0x10224766), + TOBN(0x517a14b3, 0x85d53bef), TOBN(0xdae327a5, 0x7d76a7d1)}}, + {{TOBN(0x6ad0a065, 0xc4818267), TOBN(0x33aa189b, 0x37c1bbc1), + TOBN(0x64970b52, 0x27392a92), TOBN(0x21699a1c, 0x2d1535ea)}, + {TOBN(0xcd20779c, 0xc2d7a7fd), TOBN(0xe3186059, 0x99c83cf2), + TOBN(0x9b69440b, 0x72c0b8c7), TOBN(0xa81497d7, 0x7b9e0e4d)}}, + {{TOBN(0x515d5c89, 0x1f5f82dc), TOBN(0x9a7f67d7, 0x6361079e), + TOBN(0xa8da81e3, 0x11a35330), TOBN(0xe44990c4, 0x4b18be1b)}, + {TOBN(0xc7d5ed95, 0xaf103e59), TOBN(0xece8aba7, 0x8dac9261), + TOBN(0xbe82b099, 0x9394b8d3), TOBN(0x6830f09a, 0x16adfe83)}}, + {{TOBN(0x250a29b4, 0x88172d01), TOBN(0x8b20bd65, 0xcaff9e02), + TOBN(0xb8a7661e, 0xe8a6329a), TOBN(0x4520304d, 0xd3fce920)}, + {TOBN(0xae45da1f, 0x2b47f7ef), TOBN(0xe07f5288, 0x5bffc540), + TOBN(0xf7997009, 0x3464f874), TOBN(0x2244c2cd, 0xa6fa1f38)}}, + {{TOBN(0x43c41ac1, 0x94d7d9b1), TOBN(0x5bafdd82, 0xc82e7f17), + TOBN(0xdf0614c1, 0x5fda0fca), TOBN(0x74b043a7, 0xa8ae37ad)}, + {TOBN(0x3ba6afa1, 0x9e71734c), TOBN(0x15d5437e, 0x9c450f2e), + TOBN(0x4a5883fe, 0x67e242b1), TOBN(0x5143bdc2, 0x2c1953c2)}}, + {{TOBN(0x542b8b53, 0xfc5e8920), TOBN(0x363bf9a8, 0x9a9cee08), + TOBN(0x02375f10, 0xc3486e08), TOBN(0x2037543b, 0x8c5e70d2)}, + {TOBN(0x7109bccc, 0x625640b4), TOBN(0xcbc1051e, 0x8bc62c3b), + TOBN(0xf8455fed, 0x803f26ea), TOBN(0x6badceab, 0xeb372424)}}, + {{TOBN(0xa2a9ce7c, 0x6b53f5f9), TOBN(0x64246595, 0x1b176d99), + TOBN(0xb1298d36, 0xb95c081b), TOBN(0x53505bb8, 0x1d9a9ee6)}, + {TOBN(0x3f6f9e61, 0xf2ba70b0), TOBN(0xd07e16c9, 0x8afad453), + TOBN(0x9f1694bb, 0xe7eb4a6a), TOBN(0xdfebced9, 0x3cb0bc8e)}}, + {{TOBN(0x92d3dcdc, 0x53868c8b), TOBN(0x174311a2, 0x386107a6), + TOBN(0x4109e07c, 0x689b4e64), TOBN(0x30e4587f, 0x2df3dcb6)}, + {TOBN(0x841aea31, 0x0811b3b2), TOBN(0x6144d41d, 0x0cce43ea), + TOBN(0x464c4581, 0x2a9a7803), TOBN(0xd03d371f, 0x3e158930)}}, + {{TOBN(0xc676d7f2, 0xb1f3390b), TOBN(0x9f7a1b8c, 0xa5b61272), + TOBN(0x4ebebfc9, 0xc2e127a9), TOBN(0x4602500c, 0x5dd997bf)}, + {TOBN(0x7f09771c, 0x4711230f), TOBN(0x058eb37c, 0x020f09c1), + TOBN(0xab693d4b, 0xfee5e38b), TOBN(0x9289eb1f, 0x4653cbc0)}}, + {{TOBN(0xbecf46ab, 0xd51b9cf5), TOBN(0xd2aa9c02, 0x9f0121af), + TOBN(0x36aaf7d2, 0xe90dc274), TOBN(0x909e4ea0, 0x48b95a3c)}, + {TOBN(0xe6b70496, 0x6f32dbdb), TOBN(0x672188a0, 0x8b030b3e), + TOBN(0xeeffe5b3, 0xcfb617e2), TOBN(0x87e947de, 0x7c82709e)}}, + {{TOBN(0xa44d2b39, 0x1770f5a7), TOBN(0xe4d4d791, 0x0e44eb82), + TOBN(0x42e69d1e, 0x3f69712a), TOBN(0xbf11c4d6, 0xac6a820e)}, + {TOBN(0xb5e7f3e5, 0x42c4224c), TOBN(0xd6b4e81c, 0x449d941c), + TOBN(0x5d72bd16, 0x5450e878), TOBN(0x6a61e28a, 0xee25ac54)}}, + {{TOBN(0x33272094, 0xe6f1cd95), TOBN(0x7512f30d, 0x0d18673f), + TOBN(0x32f7a4ca, 0x5afc1464), TOBN(0x2f095656, 0x6bbb977b)}, + {TOBN(0x586f47ca, 0xa8226200), TOBN(0x02c868ad, 0x1ac07369), + TOBN(0x4ef2b845, 0xc613acbe), TOBN(0x43d7563e, 0x0386054c)}}, + {{TOBN(0x54da9dc7, 0xab952578), TOBN(0xb5423df2, 0x26e84d0b), + TOBN(0xa8b64eeb, 0x9b872042), TOBN(0xac205782, 0x5990f6df)}, + {TOBN(0x4ff696eb, 0x21f4c77a), TOBN(0x1a79c3e4, 0xaab273af), + TOBN(0x29bc922e, 0x9436b3f1), TOBN(0xff807ef8, 0xd6d9a27a)}}, + {{TOBN(0x82acea3d, 0x778f22a0), TOBN(0xfb10b2e8, 0x5b5e7469), + TOBN(0xc0b16980, 0x2818ee7d), TOBN(0x011afff4, 0xc91c1a2f)}, + {TOBN(0x95a6d126, 0xad124418), TOBN(0x31c081a5, 0xe72e295f), + TOBN(0x36bb283a, 0xf2f4db75), TOBN(0xd115540f, 0x7acef462)}}, + {{TOBN(0xc7f3a8f8, 0x33f6746c), TOBN(0x21e46f65, 0xfea990ca), + TOBN(0x915fd5c5, 0xcaddb0a9), TOBN(0xbd41f016, 0x78614555)}, + {TOBN(0x346f4434, 0x426ffb58), TOBN(0x80559436, 0x14dbc204), + TOBN(0xf3dd20fe, 0x5a969b7f), TOBN(0x9d59e956, 0xe899a39a)}}, + {{TOBN(0xf1b0971c, 0x8ad4cf4b), TOBN(0x03448860, 0x2ffb8fb8), + TOBN(0xf071ac3c, 0x65340ba4), TOBN(0x408d0596, 0xb27fd758)}, + {TOBN(0xe7c78ea4, 0x98c364b0), TOBN(0xa4aac4a5, 0x051e8ab5), + TOBN(0xb9e1d560, 0x485d9002), TOBN(0x9acd518a, 0x88844455)}}, + {{TOBN(0xe4ca688f, 0xd06f56c0), TOBN(0xa48af70d, 0xdf027972), + TOBN(0x691f0f04, 0x5e9a609d), TOBN(0xa9dd82cd, 0xee61270e)}, + {TOBN(0x8903ca63, 0xa0ef18d3), TOBN(0x9fb7ee35, 0x3d6ca3bd), + TOBN(0xa7b4a09c, 0xabf47d03), TOBN(0x4cdada01, 0x1c67de8e)}}, + {{TOBN(0x52003749, 0x9355a244), TOBN(0xe77fd2b6, 0x4f2151a9), + TOBN(0x695d6cf6, 0x66b4efcb), TOBN(0xc5a0cacf, 0xda2cfe25)}, + {TOBN(0x104efe5c, 0xef811865), TOBN(0xf52813e8, 0x9ea5cc3d), + TOBN(0x855683dc, 0x40b58dbc), TOBN(0x0338ecde, 0x175fcb11)}}, + {{TOBN(0xf9a05637, 0x74921592), TOBN(0xb4f1261d, 0xb9bb9d31), + TOBN(0x551429b7, 0x4e9c5459), TOBN(0xbe182e6f, 0x6ea71f53)}, + {TOBN(0xd3a3b07c, 0xdfc50573), TOBN(0x9ba1afda, 0x62be8d44), + TOBN(0x9bcfd2cb, 0x52ab65d3), TOBN(0xdf11d547, 0xa9571802)}}, + {{TOBN(0x099403ee, 0x02a2404a), TOBN(0x497406f4, 0x21088a71), + TOBN(0x99479409, 0x5004ae71), TOBN(0xbdb42078, 0xa812c362)}, + {TOBN(0x2b72a30f, 0xd8828442), TOBN(0x283add27, 0xfcb5ed1c), + TOBN(0xf7c0e200, 0x66a40015), TOBN(0x3e3be641, 0x08b295ef)}}, + {{TOBN(0xac127dc1, 0xe038a675), TOBN(0x729deff3, 0x8c5c6320), + TOBN(0xb7df8fd4, 0xa90d2c53), TOBN(0x9b74b0ec, 0x681e7cd3)}, + {TOBN(0x5cb5a623, 0xdab407e5), TOBN(0xcdbd3615, 0x76b340c6), + TOBN(0xa184415a, 0x7d28392c), TOBN(0xc184c1d8, 0xe96f7830)}}, + {{TOBN(0xc3204f19, 0x81d3a80f), TOBN(0xfde0c841, 0xc8e02432), + TOBN(0x78203b3e, 0x8149e0c1), TOBN(0x5904bdbb, 0x08053a73)}, + {TOBN(0x30fc1dd1, 0x101b6805), TOBN(0x43c223bc, 0x49aa6d49), + TOBN(0x9ed67141, 0x7a174087), TOBN(0x311469a0, 0xd5997008)}}, + {{TOBN(0xb189b684, 0x5e43fc61), TOBN(0xf3282375, 0xe0d3ab57), + TOBN(0x4fa34b67, 0xb1181da8), TOBN(0x621ed0b2, 0x99ee52b8)}, + {TOBN(0x9b178de1, 0xad990676), TOBN(0xd51de67b, 0x56d54065), + TOBN(0x2a2c27c4, 0x7538c201), TOBN(0x33856ec8, 0x38a40f5c)}}, + {{TOBN(0x2522fc15, 0xbe6cdcde), TOBN(0x1e603f33, 0x9f0c6f89), + TOBN(0x7994edc3, 0x103e30a6), TOBN(0x033a00db, 0x220c853e)}, + {TOBN(0xd3cfa409, 0xf7bb7fd7), TOBN(0x70f8781e, 0x462d18f6), + TOBN(0xbbd82980, 0x687fe295), TOBN(0x6eef4c32, 0x595669f3)}}, + {{TOBN(0x86a9303b, 0x2f7e85c3), TOBN(0x5fce4621, 0x71988f9b), + TOBN(0x5b935bf6, 0xc138acb5), TOBN(0x30ea7d67, 0x25661212)}, + {TOBN(0xef1eb5f4, 0xe51ab9a2), TOBN(0x0587c98a, 0xae067c78), + TOBN(0xb3ce1b3c, 0x77ca9ca6), TOBN(0x2a553d4d, 0x54b5f057)}}, + {{TOBN(0xc7898236, 0x4da29ec2), TOBN(0xdbdd5d13, 0xb9c57316), + TOBN(0xc57d6e6b, 0x2cd80d47), TOBN(0x80b460cf, 0xfe9e7391)}, + {TOBN(0x98648cab, 0xf963c31e), TOBN(0x67f9f633, 0xcc4d32fd), + TOBN(0x0af42a9d, 0xfdf7c687), TOBN(0x55f292a3, 0x0b015ea7)}}, + {{TOBN(0x89e468b2, 0xcd21ab3d), TOBN(0xe504f022, 0xc393d392), + TOBN(0xab21e1d4, 0xa5013af9), TOBN(0xe3283f78, 0xc2c28acb)}, + {TOBN(0xf38b35f6, 0x226bf99f), TOBN(0xe8354274, 0x0e291e69), + TOBN(0x61673a15, 0xb20c162d), TOBN(0xc101dc75, 0xb04fbdbe)}}, + {{TOBN(0x8323b4c2, 0x255bd617), TOBN(0x6c969693, 0x6c2a9154), + TOBN(0xc6e65860, 0x62679387), TOBN(0x8e01db0c, 0xb8c88e23)}, + {TOBN(0x33c42873, 0x893a5559), TOBN(0x7630f04b, 0x47a3e149), + TOBN(0xb5d80805, 0xddcf35f8), TOBN(0x582ca080, 0x77dfe732)}}, + {{TOBN(0x2c7156e1, 0x0b1894a0), TOBN(0x92034001, 0xd81c68c0), + TOBN(0xed225d00, 0xc8b115b5), TOBN(0x237f9c22, 0x83b907f2)}, + {TOBN(0x0ea2f32f, 0x4470e2c0), TOBN(0xb725f7c1, 0x58be4e95), + TOBN(0x0f1dcafa, 0xb1ae5463), TOBN(0x59ed5187, 0x1ba2fc04)}}, + {{TOBN(0xf6e0f316, 0xd0115d4d), TOBN(0x5180b12f, 0xd3691599), + TOBN(0x157e32c9, 0x527f0a41), TOBN(0x7b0b081d, 0xa8e0ecc0)}, + {TOBN(0x6dbaaa8a, 0xbf4f0dd0), TOBN(0x99b289c7, 0x4d252696), + TOBN(0x79b7755e, 0xdbf864fe), TOBN(0x6974e2b1, 0x76cad3ab)}}, + {{TOBN(0x35dbbee2, 0x06ddd657), TOBN(0xe7cbdd11, 0x2ff3a96d), + TOBN(0x88381968, 0x076be758), TOBN(0x2d737e72, 0x08c91f5d)}, + {TOBN(0x5f83ab62, 0x86ec3776), TOBN(0x98aa649d, 0x945fa7a1), + TOBN(0xf477ec37, 0x72ef0933), TOBN(0x66f52b1e, 0x098c17b1)}}, + {{TOBN(0x9eec58fb, 0xd803738b), TOBN(0x91aaade7, 0xe4e86aa4), + TOBN(0x6b1ae617, 0xa5b51492), TOBN(0x63272121, 0xbbc45974)}, + {TOBN(0x7e0e28f0, 0x862c5129), TOBN(0x0a8f79a9, 0x3321a4a0), + TOBN(0xe26d1664, 0x5041c88f), TOBN(0x0571b805, 0x53233e3a)}}, + {{TOBN(0xd1b0ccde, 0xc9520711), TOBN(0x55a9e4ed, 0x3c8b84bf), + TOBN(0x9426bd39, 0xa1fef314), TOBN(0x4f5f638e, 0x6eb93f2b)}, + {TOBN(0xba2a1ed3, 0x2bf9341b), TOBN(0xd63c1321, 0x4d42d5a9), + TOBN(0xd2964a89, 0x316dc7c5), TOBN(0xd1759606, 0xca511851)}}, + {{TOBN(0xd8a9201f, 0xf9e6ed35), TOBN(0xb7b5ee45, 0x6736925a), + TOBN(0x0a83fbbc, 0x99581af7), TOBN(0x3076bc40, 0x64eeb051)}, + {TOBN(0x5511c98c, 0x02dec312), TOBN(0x270de898, 0x238dcb78), + TOBN(0x2cf4cf9c, 0x539c08c9), TOBN(0xa70cb65e, 0x38d3b06e)}}, + {{TOBN(0xb12ec10e, 0xcfe57bbd), TOBN(0x82c7b656, 0x35a0c2b5), + TOBN(0xddc7d5cd, 0x161c67bd), TOBN(0xe32e8985, 0xae3a32cc)}, + {TOBN(0x7aba9444, 0xd11a5529), TOBN(0xe964ed02, 0x2427fa1a), + TOBN(0x1528392d, 0x24a1770a), TOBN(0xa152ce2c, 0x12c72fcd)}}, + {{TOBN(0x714553a4, 0x8ec07649), TOBN(0x18b4c290, 0x459dd453), + TOBN(0xea32b714, 0x7b64b110), TOBN(0xb871bfa5, 0x2e6f07a2)}, + {TOBN(0xb67112e5, 0x9e2e3c9b), TOBN(0xfbf250e5, 0x44aa90f6), + TOBN(0xf77aedb8, 0xbd539006), TOBN(0x3b0cdf9a, 0xd172a66f)}}, + {{TOBN(0xedf69fea, 0xf8c51187), TOBN(0x05bb67ec, 0x741e4da7), + TOBN(0x47df0f32, 0x08114345), TOBN(0x56facb07, 0xbb9792b1)}, + {TOBN(0xf3e007e9, 0x8f6229e4), TOBN(0x62d103f4, 0x526fba0f), + TOBN(0x4f33bef7, 0xb0339d79), TOBN(0x9841357b, 0xb59bfec1)}}, + {{TOBN(0xfa8dbb59, 0xc34e6705), TOBN(0xc3c7180b, 0x7fdaa84c), + TOBN(0xf95872fc, 0xa4108537), TOBN(0x8750cc3b, 0x932a3e5a)}, + {TOBN(0xb61cc69d, 0xb7275d7d), TOBN(0xffa0168b, 0x2e59b2e9), + TOBN(0xca032abc, 0x6ecbb493), TOBN(0x1d86dbd3, 0x2c9082d8)}}, + {{TOBN(0xae1e0b67, 0xe28ef5ba), TOBN(0x2c9a4699, 0xcb18e169), + TOBN(0x0ecd0e33, 0x1e6bbd20), TOBN(0x571b360e, 0xaf5e81d2)}, + {TOBN(0xcd9fea58, 0x101c1d45), TOBN(0x6651788e, 0x18880452), + TOBN(0xa9972635, 0x1f8dd446), TOBN(0x44bed022, 0xe37281d0)}}, + {{TOBN(0x094b2b2d, 0x33da525d), TOBN(0xf193678e, 0x13144fd8), + TOBN(0xb8ab5ba4, 0xf4c1061d), TOBN(0x4343b5fa, 0xdccbe0f4)}, + {TOBN(0xa8702371, 0x63812713), TOBN(0x47bf6d2d, 0xf7611d93), + TOBN(0x46729b8c, 0xbd21e1d7), TOBN(0x7484d4e0, 0xd629e77d)}}, + {{TOBN(0x830e6eea, 0x60dbac1f), TOBN(0x23d8c484, 0xda06a2f7), + TOBN(0x896714b0, 0x50ca535b), TOBN(0xdc8d3644, 0xebd97a9b)}, + {TOBN(0x106ef9fa, 0xb12177b4), TOBN(0xf79bf464, 0x534d5d9c), + TOBN(0x2537a349, 0xa6ab360b), TOBN(0xc7c54253, 0xa00c744f)}}, + {{TOBN(0xb3c7a047, 0xe5911a76), TOBN(0x61ffa5c8, 0x647f1ee7), + TOBN(0x15aed36f, 0x8f56ab42), TOBN(0x6a0d41b0, 0xa3ff9ac9)}, + {TOBN(0x68f469f5, 0xcc30d357), TOBN(0xbe9adf81, 0x6b72be96), + TOBN(0x1cd926fe, 0x903ad461), TOBN(0x7e89e38f, 0xcaca441b)}}, + {{TOBN(0xf0f82de5, 0xfacf69d4), TOBN(0x363b7e76, 0x4775344c), + TOBN(0x6894f312, 0xb2e36d04), TOBN(0x3c6cb4fe, 0x11d1c9a5)}, + {TOBN(0x85d9c339, 0x4008e1f2), TOBN(0x5e9a85ea, 0x249f326c), + TOBN(0xdc35c60a, 0x678c5e06), TOBN(0xc08b944f, 0x9f86fba9)}}, + {{TOBN(0xde40c02c, 0x89f71f0f), TOBN(0xad8f3e31, 0xff3da3c0), + TOBN(0x3ea5096b, 0x42125ded), TOBN(0x13879cbf, 0xa7379183)}, + {TOBN(0x6f4714a5, 0x6b306a0b), TOBN(0x359c2ea6, 0x67646c5e), + TOBN(0xfacf8943, 0x07726368), TOBN(0x07a58935, 0x65ff431e)}}, + {{TOBN(0x24d661d1, 0x68754ab0), TOBN(0x801fce1d, 0x6f429a76), + TOBN(0xc068a85f, 0xa58ce769), TOBN(0xedc35c54, 0x5d5eca2b)}, + {TOBN(0xea31276f, 0xa3f660d1), TOBN(0xa0184ebe, 0xb8fc7167), + TOBN(0x0f20f21a, 0x1d8db0ae), TOBN(0xd96d095f, 0x56c35e12)}}, + {{TOBN(0xedf402b5, 0xf8c2a25b), TOBN(0x1bb772b9, 0x059204b6), + TOBN(0x50cbeae2, 0x19b4e34c), TOBN(0x93109d80, 0x3fa0845a)}, + {TOBN(0x54f7ccf7, 0x8ef59fb5), TOBN(0x3b438fe2, 0x88070963), + TOBN(0x9e28c659, 0x31f3ba9b), TOBN(0x9cc31b46, 0xead9da92)}}, + {{TOBN(0x3c2f0ba9, 0xb733aa5f), TOBN(0xdece47cb, 0xf05af235), + TOBN(0xf8e3f715, 0xa2ac82a5), TOBN(0xc97ba641, 0x2203f18a)}, + {TOBN(0xc3af5504, 0x09c11060), TOBN(0x56ea2c05, 0x46af512d), + TOBN(0xfac28daf, 0xf3f28146), TOBN(0x87fab43a, 0x959ef494)}}}, + {{{TOBN(0x09891641, 0xd4c5105f), TOBN(0x1ae80f8e, 0x6d7fbd65), + TOBN(0x9d67225f, 0xbee6bdb0), TOBN(0x3b433b59, 0x7fc4d860)}, + {TOBN(0x44e66db6, 0x93e85638), TOBN(0xf7b59252, 0xe3e9862f), + TOBN(0xdb785157, 0x665c32ec), TOBN(0x702fefd7, 0xae362f50)}}, + {{TOBN(0x3754475d, 0x0fefb0c3), TOBN(0xd48fb56b, 0x46d7c35d), + TOBN(0xa070b633, 0x363798a4), TOBN(0xae89f3d2, 0x8fdb98e6)}, + {TOBN(0x970b89c8, 0x6363d14c), TOBN(0x89817521, 0x67abd27d), + TOBN(0x9bf7d474, 0x44d5a021), TOBN(0xb3083baf, 0xcac72aee)}}, + {{TOBN(0x389741de, 0xbe949a44), TOBN(0x638e9388, 0x546a4fa5), + TOBN(0x3fe6419c, 0xa0047bdc), TOBN(0x7047f648, 0xaaea57ca)}, + {TOBN(0x54e48a90, 0x41fbab17), TOBN(0xda8e0b28, 0x576bdba2), + TOBN(0xe807eebc, 0xc72afddc), TOBN(0x07d3336d, 0xf42577bf)}}, + {{TOBN(0x62a8c244, 0xbfe20925), TOBN(0x91c19ac3, 0x8fdce867), + TOBN(0x5a96a5d5, 0xdd387063), TOBN(0x61d587d4, 0x21d324f6)}, + {TOBN(0xe87673a2, 0xa37173ea), TOBN(0x23848008, 0x53778b65), + TOBN(0x10f8441e, 0x05bab43e), TOBN(0xfa11fe12, 0x4621efbe)}}, + {{TOBN(0x047b772e, 0x81685d7b), TOBN(0x23f27d81, 0xbf34a976), + TOBN(0xc27608e2, 0x915f48ef), TOBN(0x3b0b43fa, 0xa521d5c3)}, + {TOBN(0x7613fb26, 0x63ca7284), TOBN(0x7f5729b4, 0x1d4db837), + TOBN(0x87b14898, 0x583b526b), TOBN(0x00b732a6, 0xbbadd3d1)}}, + {{TOBN(0x8e02f426, 0x2048e396), TOBN(0x436b50b6, 0x383d9de4), + TOBN(0xf78d3481, 0x471e85ad), TOBN(0x8b01ea6a, 0xd005c8d6)}, + {TOBN(0xd3c7afee, 0x97015c07), TOBN(0x46cdf1a9, 0x4e3ba2ae), + TOBN(0x7a42e501, 0x83d3a1d2), TOBN(0xd54b5268, 0xb541dff4)}}, + {{TOBN(0x3f24cf30, 0x4e23e9bc), TOBN(0x4387f816, 0x126e3624), + TOBN(0x26a46a03, 0x3b0b6d61), TOBN(0xaf1bc845, 0x8b2d777c)}, + {TOBN(0x25c401ba, 0x527de79c), TOBN(0x0e1346d4, 0x4261bbb6), + TOBN(0x4b96c44b, 0x287b4bc7), TOBN(0x658493c7, 0x5254562f)}}, + {{TOBN(0x23f949fe, 0xb8a24a20), TOBN(0x17ebfed1, 0xf52ca53f), + TOBN(0x9b691bbe, 0xbcfb4853), TOBN(0x5617ff6b, 0x6278a05d)}, + {TOBN(0x241b34c5, 0xe3c99ebd), TOBN(0xfc64242e, 0x1784156a), + TOBN(0x4206482f, 0x695d67df), TOBN(0xb967ce0e, 0xee27c011)}}, + {{TOBN(0x65db3751, 0x21c80b5d), TOBN(0x2e7a563c, 0xa31ecca0), + TOBN(0xe56ffc4e, 0x5238a07e), TOBN(0x3d6c2966, 0x32ced854)}, + {TOBN(0xe99d7d1a, 0xaf70b885), TOBN(0xafc3bad9, 0x2d686459), + TOBN(0x9c78bf46, 0x0cc8ba5b), TOBN(0x5a439519, 0x18955aa3)}}, + {{TOBN(0xf8b517a8, 0x5fe4e314), TOBN(0xe60234d0, 0xfcb8906f), + TOBN(0xffe542ac, 0xf2061b23), TOBN(0x287e191f, 0x6b4cb59c)}, + {TOBN(0x21857ddc, 0x09d877d8), TOBN(0x1c23478c, 0x14678941), + TOBN(0xbbf0c056, 0xb6e05ea4), TOBN(0x82da4b53, 0xb01594fe)}}, + {{TOBN(0xf7526791, 0xfadb8608), TOBN(0x049e832d, 0x7b74cdf6), + TOBN(0xa43581cc, 0xc2b90a34), TOBN(0x73639eb8, 0x9360b10c)}, + {TOBN(0x4fba331f, 0xe1e4a71b), TOBN(0x6ffd6b93, 0x8072f919), + TOBN(0x6e53271c, 0x65679032), TOBN(0x67206444, 0xf14272ce)}}, + {{TOBN(0xc0f734a3, 0xb2335834), TOBN(0x9526205a, 0x90ef6860), + TOBN(0xcb8be717, 0x04e2bb0d), TOBN(0x2418871e, 0x02f383fa)}, + {TOBN(0xd7177681, 0x4082c157), TOBN(0xcc914ad0, 0x29c20073), + TOBN(0xf186c1eb, 0xe587e728), TOBN(0x6fdb3c22, 0x61bcd5fd)}}, + {{TOBN(0x30d014a6, 0xf2f9f8e9), TOBN(0x963ece23, 0x4fec49d2), + TOBN(0x862025c5, 0x9605a8d9), TOBN(0x39874445, 0x19f8929a)}, + {TOBN(0x01b6ff65, 0x12bf476a), TOBN(0x598a64d8, 0x09cf7d91), + TOBN(0xd7ec7749, 0x93be56ca), TOBN(0x10899785, 0xcbb33615)}}, + {{TOBN(0xb8a092fd, 0x02eee3ad), TOBN(0xa86b3d35, 0x30145270), + TOBN(0x323d98c6, 0x8512b675), TOBN(0x4b8bc785, 0x62ebb40f)}, + {TOBN(0x7d301f54, 0x413f9cde), TOBN(0xa5e4fb4f, 0x2bab5664), + TOBN(0x1d2b252d, 0x1cbfec23), TOBN(0xfcd576bb, 0xe177120d)}}, + {{TOBN(0x04427d3e, 0x83731a34), TOBN(0x2bb9028e, 0xed836e8e), + TOBN(0xb36acff8, 0xb612ca7c), TOBN(0xb88fe5ef, 0xd3d9c73a)}, + {TOBN(0xbe2a6bc6, 0xedea4eb3), TOBN(0x43b93133, 0x488eec77), + TOBN(0xf41ff566, 0xb17106e1), TOBN(0x469e9172, 0x654efa32)}}, + {{TOBN(0xb4480f04, 0x41c23fa3), TOBN(0xb4712eb0, 0xc1989a2e), + TOBN(0x3ccbba0f, 0x93a29ca7), TOBN(0x6e205c14, 0xd619428c)}, + {TOBN(0x90db7957, 0xb3641686), TOBN(0x0432691d, 0x45ac8b4e), + TOBN(0x07a759ac, 0xf64e0350), TOBN(0x0514d89c, 0x9c972517)}}, + {{TOBN(0x1701147f, 0xa8e67fc3), TOBN(0x9e2e0b8b, 0xab2085be), + TOBN(0xd5651824, 0xac284e57), TOBN(0x890d4325, 0x74893664)}, + {TOBN(0x8a7c5e6e, 0xc55e68a3), TOBN(0xbf12e90b, 0x4339c85a), + TOBN(0x31846b85, 0xf922b655), TOBN(0x9a54ce4d, 0x0bf4d700)}}, + {{TOBN(0xd7f4e83a, 0xf1a14295), TOBN(0x916f955c, 0xb285d4f9), + TOBN(0xe57bb0e0, 0x99ffdaba), TOBN(0x28a43034, 0xeab0d152)}, + {TOBN(0x0a36ffa2, 0xb8a9cef8), TOBN(0x5517407e, 0xb9ec051a), + TOBN(0x9c796096, 0xea68e672), TOBN(0x853db5fb, 0xfb3c77fb)}}, + {{TOBN(0x21474ba9, 0xe864a51a), TOBN(0x6c267699, 0x6e8a1b8b), + TOBN(0x7c823626, 0x94120a28), TOBN(0xe61e9a48, 0x8383a5db)}, + {TOBN(0x7dd75003, 0x9f84216d), TOBN(0xab020d07, 0xad43cd85), + TOBN(0x9437ae48, 0xda12c659), TOBN(0x6449c2eb, 0xe65452ad)}}, + {{TOBN(0xcc7c4c1c, 0x2cf9d7c1), TOBN(0x1320886a, 0xee95e5ab), + TOBN(0xbb7b9056, 0xbeae170c), TOBN(0xc8a5b250, 0xdbc0d662)}, + {TOBN(0x4ed81432, 0xc11d2303), TOBN(0x7da66912, 0x1f03769f), + TOBN(0x3ac7a5fd, 0x84539828), TOBN(0x14dada94, 0x3bccdd02)}}, + {{TOBN(0x8b84c321, 0x7ef6b0d1), TOBN(0x52a9477a, 0x7c933f22), + TOBN(0x5ef6728a, 0xfd440b82), TOBN(0x5c3bd859, 0x6ce4bd5e)}, + {TOBN(0x918b80f5, 0xf22c2d3e), TOBN(0x368d5040, 0xb7bb6cc5), + TOBN(0xb66142a1, 0x2695a11c), TOBN(0x60ac583a, 0xeb19ea70)}}, + {{TOBN(0x317cbb98, 0x0eab2437), TOBN(0x8cc08c55, 0x5e2654c8), + TOBN(0xfe2d6520, 0xe6d8307f), TOBN(0xe9f147f3, 0x57428993)}, + {TOBN(0x5f9c7d14, 0xd2fd6cf1), TOBN(0xa3ecd064, 0x2d4fcbb0), + TOBN(0xad83fef0, 0x8e7341f7), TOBN(0x643f23a0, 0x3a63115c)}}, + {{TOBN(0xd38a78ab, 0xe65ab743), TOBN(0xbf7c75b1, 0x35edc89c), + TOBN(0x3dd8752e, 0x530df568), TOBN(0xf85c4a76, 0xe308c682)}, + {TOBN(0x4c9955b2, 0xe68acf37), TOBN(0xa544df3d, 0xab32af85), + TOBN(0x4b8ec3f5, 0xa25cf493), TOBN(0x4d8f2764, 0x1a622feb)}}, + {{TOBN(0x7bb4f7aa, 0xf0dcbc49), TOBN(0x7de551f9, 0x70bbb45b), + TOBN(0xcfd0f3e4, 0x9f2ca2e5), TOBN(0xece58709, 0x1f5c76ef)}, + {TOBN(0x32920edd, 0x167d79ae), TOBN(0x039df8a2, 0xfa7d7ec1), + TOBN(0xf46206c0, 0xbb30af91), TOBN(0x1ff5e2f5, 0x22676b59)}}, + {{TOBN(0x11f4a039, 0x6ea51d66), TOBN(0x506c1445, 0x807d7a26), + TOBN(0x60da5705, 0x755a9b24), TOBN(0x8fc8cc32, 0x1f1a319e)}, + {TOBN(0x83642d4d, 0x9433d67d), TOBN(0x7fa5cb8f, 0x6a7dd296), + TOBN(0x576591db, 0x9b7bde07), TOBN(0x13173d25, 0x419716fb)}}, + {{TOBN(0xea30599d, 0xd5b340ff), TOBN(0xfc6b5297, 0xb0fe76c5), + TOBN(0x1c6968c8, 0xab8f5adc), TOBN(0xf723c7f5, 0x901c928d)}, + {TOBN(0x4203c321, 0x9773d402), TOBN(0xdf7c6aa3, 0x1b51dd47), + TOBN(0x3d49e37a, 0x552be23c), TOBN(0x57febee8, 0x0b5a6e87)}}, + {{TOBN(0xc5ecbee4, 0x7bd8e739), TOBN(0x79d44994, 0xae63bf75), + TOBN(0x168bd00f, 0x38fb8923), TOBN(0x75d48ee4, 0xd0533130)}, + {TOBN(0x554f77aa, 0xdb5cdf33), TOBN(0x3396e896, 0x3c696769), + TOBN(0x2fdddbf2, 0xd3fd674e), TOBN(0xbbb8f6ee, 0x99d0e3e5)}}, + {{TOBN(0x51b90651, 0xcbae2f70), TOBN(0xefc4bc05, 0x93aaa8eb), + TOBN(0x8ecd8689, 0xdd1df499), TOBN(0x1aee99a8, 0x22f367a5)}, + {TOBN(0x95d485b9, 0xae8274c5), TOBN(0x6c14d445, 0x7d30b39c), + TOBN(0xbafea90b, 0xbcc1ef81), TOBN(0x7c5f317a, 0xa459a2ed)}}, + {{TOBN(0x01211075, 0x4ef44227), TOBN(0xa17bed6e, 0xdc20f496), + TOBN(0x0cdfe424, 0x819853cd), TOBN(0x13793298, 0xf71e2ce7)}, + {TOBN(0x3c1f3078, 0xdbbe307b), TOBN(0x6dd1c20e, 0x76ee9936), + TOBN(0x23ee4b57, 0x423caa20), TOBN(0x4ac3793b, 0x8efb840e)}}, + {{TOBN(0x934438eb, 0xed1f8ca0), TOBN(0x3e546658, 0x4ebb25a2), + TOBN(0xc415af0e, 0xc069896f), TOBN(0xc13eddb0, 0x9a5aa43d)}, + {TOBN(0x7a04204f, 0xd49eb8f6), TOBN(0xd0d5bdfc, 0xd74f1670), + TOBN(0x3697e286, 0x56fc0558), TOBN(0x10207371, 0x01cebade)}}, + {{TOBN(0x5f87e690, 0x0647a82b), TOBN(0x908e0ed4, 0x8f40054f), + TOBN(0xa9f633d4, 0x79853803), TOBN(0x8ed13c9a, 0x4a28b252)}, + {TOBN(0x3e2ef676, 0x1f460f64), TOBN(0x53930b9b, 0x36d06336), + TOBN(0x347073ac, 0x8fc4979b), TOBN(0x84380e0e, 0x5ecd5597)}}, + {{TOBN(0xe3b22c6b, 0xc4fe3c39), TOBN(0xba4a8153, 0x6c7bebdf), + TOBN(0xf23ab6b7, 0x25693459), TOBN(0x53bc3770, 0x14922b11)}, + {TOBN(0x4645c8ab, 0x5afc60db), TOBN(0xaa022355, 0x20b9f2a3), + TOBN(0x52a2954c, 0xce0fc507), TOBN(0x8c2731bb, 0x7ce1c2e7)}}, + {{TOBN(0xf39608ab, 0x18a0339d), TOBN(0xac7a658d, 0x3735436c), + TOBN(0xb22c2b07, 0xcd992b4f), TOBN(0x4e83daec, 0xf40dcfd4)}, + {TOBN(0x8a34c7be, 0x2f39ea3e), TOBN(0xef0c005f, 0xb0a56d2e), + TOBN(0x62731f6a, 0x6edd8038), TOBN(0x5721d740, 0x4e3cb075)}}, + {{TOBN(0x1ea41511, 0xfbeeee1b), TOBN(0xd1ef5e73, 0xef1d0c05), + TOBN(0x42feefd1, 0x73c07d35), TOBN(0xe530a00a, 0x8a329493)}, + {TOBN(0x5d55b7fe, 0xf15ebfb0), TOBN(0x549de03c, 0xd322491a), + TOBN(0xf7b5f602, 0x745b3237), TOBN(0x3632a3a2, 0x1ab6e2b6)}}, + {{TOBN(0x0d3bba89, 0x0ef59f78), TOBN(0x0dfc6443, 0xc9e52b9a), + TOBN(0x1dc79699, 0x72631447), TOBN(0xef033917, 0xb3be20b1)}, + {TOBN(0x0c92735d, 0xb1383948), TOBN(0xc1fc29a2, 0xc0dd7d7d), + TOBN(0x6485b697, 0x403ed068), TOBN(0x13bfaab3, 0xaac93bdc)}}, + {{TOBN(0x410dc6a9, 0x0deeaf52), TOBN(0xb003fb02, 0x4c641c15), + TOBN(0x1384978c, 0x5bc504c4), TOBN(0x37640487, 0x864a6a77)}, + {TOBN(0x05991bc6, 0x222a77da), TOBN(0x62260a57, 0x5e47eb11), + TOBN(0xc7af6613, 0xf21b432c), TOBN(0x22f3acc9, 0xab4953e9)}}, + {{TOBN(0x52934922, 0x8e41d155), TOBN(0x4d024568, 0x3ac059ef), + TOBN(0xb0201755, 0x4d884411), TOBN(0xce8055cf, 0xa59a178f)}, + {TOBN(0xcd77d1af, 0xf6204549), TOBN(0xa0a00a3e, 0xc7066759), + TOBN(0x471071ef, 0x0272c229), TOBN(0x009bcf6b, 0xd3c4b6b0)}}, + {{TOBN(0x2a2638a8, 0x22305177), TOBN(0xd51d59df, 0x41645bbf), + TOBN(0xa81142fd, 0xc0a7a3c0), TOBN(0xa17eca6d, 0x4c7063ee)}, + {TOBN(0x0bb887ed, 0x60d9dcec), TOBN(0xd6d28e51, 0x20ad2455), + TOBN(0xebed6308, 0xa67102ba), TOBN(0x042c3114, 0x8bffa408)}}, + {{TOBN(0xfd099ac5, 0x8aa68e30), TOBN(0x7a6a3d7c, 0x1483513e), + TOBN(0xffcc6b75, 0xba2d8f0c), TOBN(0x54dacf96, 0x1e78b954)}, + {TOBN(0xf645696f, 0xa4a9af89), TOBN(0x3a411940, 0x06ac98ec), + TOBN(0x41b8b3f6, 0x22a67a20), TOBN(0x2d0b1e0f, 0x99dec626)}}, + {{TOBN(0x27c89192, 0x40be34e8), TOBN(0xc7162b37, 0x91907f35), + TOBN(0x90188ec1, 0xa956702b), TOBN(0xca132f7d, 0xdf93769c)}, + {TOBN(0x3ece44f9, 0x0e2025b4), TOBN(0x67aaec69, 0x0c62f14c), + TOBN(0xad741418, 0x22e3cc11), TOBN(0xcf9b75c3, 0x7ff9a50e)}}, + {{TOBN(0x02fa2b16, 0x4d348272), TOBN(0xbd99d61a, 0x9959d56d), + TOBN(0xbc4f19db, 0x18762916), TOBN(0xcc7cce50, 0x49c1ac80)}, + {TOBN(0x4d59ebaa, 0xd846bd83), TOBN(0x8775a9dc, 0xa9202849), + TOBN(0x07ec4ae1, 0x6e1f4ca9), TOBN(0x27eb5875, 0xba893f11)}}, + {{TOBN(0x00284d51, 0x662cc565), TOBN(0x82353a6b, 0x0db4138d), + TOBN(0xd9c7aaaa, 0xaa32a594), TOBN(0xf5528b5e, 0xa5669c47)}, + {TOBN(0xf3220231, 0x2f23c5ff), TOBN(0xe3e8147a, 0x6affa3a1), + TOBN(0xfb423d5c, 0x202ddda0), TOBN(0x3d6414ac, 0x6b871bd4)}}, + {{TOBN(0x586f82e1, 0xa51a168a), TOBN(0xb712c671, 0x48ae5448), + TOBN(0x9a2e4bd1, 0x76233eb8), TOBN(0x0188223a, 0x78811ca9)}, + {TOBN(0x553c5e21, 0xf7c18de1), TOBN(0x7682e451, 0xb27bb286), + TOBN(0x3ed036b3, 0x0e51e929), TOBN(0xf487211b, 0xec9cb34f)}}, + {{TOBN(0x0d094277, 0x0c24efc8), TOBN(0x0349fd04, 0xbef737a4), + TOBN(0x6d1c9dd2, 0x514cdd28), TOBN(0x29c135ff, 0x30da9521)}, + {TOBN(0xea6e4508, 0xf78b0b6f), TOBN(0x176f5dd2, 0x678c143c), + TOBN(0x08148418, 0x4be21e65), TOBN(0x27f7525c, 0xe7df38c4)}}, + {{TOBN(0x1fb70e09, 0x748ab1a4), TOBN(0x9cba50a0, 0x5efe4433), + TOBN(0x7846c7a6, 0x15f75af2), TOBN(0x2a7c2c57, 0x5ee73ea8)}, + {TOBN(0x42e566a4, 0x3f0a449a), TOBN(0x45474c3b, 0xad90fc3d), + TOBN(0x7447be3d, 0x8b61d057), TOBN(0x3e9d1cf1, 0x3a4ec092)}}, + {{TOBN(0x1603e453, 0xf380a6e6), TOBN(0x0b86e431, 0x9b1437c2), + TOBN(0x7a4173f2, 0xef29610a), TOBN(0x8fa729a7, 0xf03d57f7)}, + {TOBN(0x3e186f6e, 0x6c9c217e), TOBN(0xbe1d3079, 0x91919524), + TOBN(0x92a62a70, 0x153d4fb1), TOBN(0x32ed3e34, 0xd68c2f71)}}, + {{TOBN(0xd785027f, 0x9eb1a8b7), TOBN(0xbc37eb77, 0xc5b22fe8), + TOBN(0x466b34f0, 0xb9d6a191), TOBN(0x008a89af, 0x9a05f816)}, + {TOBN(0x19b028fb, 0x7d42c10a), TOBN(0x7fe8c92f, 0x49b3f6b8), + TOBN(0x58907cc0, 0xa5a0ade3), TOBN(0xb3154f51, 0x559d1a7c)}}, + {{TOBN(0x5066efb6, 0xd9790ed6), TOBN(0xa77a0cbc, 0xa6aa793b), + TOBN(0x1a915f3c, 0x223e042e), TOBN(0x1c5def04, 0x69c5874b)}, + {TOBN(0x0e830078, 0x73b6c1da), TOBN(0x55cf85d2, 0xfcd8557a), + TOBN(0x0f7c7c76, 0x0460f3b1), TOBN(0x87052acb, 0x46e58063)}}, + {{TOBN(0x09212b80, 0x907eae66), TOBN(0x3cb068e0, 0x4d721c89), + TOBN(0xa87941ae, 0xdd45ac1c), TOBN(0xde8d5c0d, 0x0daa0dbb)}, + {TOBN(0xda421fdc, 0xe3502e6e), TOBN(0xc8944201, 0x4d89a084), + TOBN(0x7307ba5e, 0xf0c24bfb), TOBN(0xda212beb, 0x20bde0ef)}}, + {{TOBN(0xea2da24b, 0xf82ce682), TOBN(0x058d3816, 0x07f71fe4), + TOBN(0x35a02462, 0x5ffad8de), TOBN(0xcd7b05dc, 0xaadcefab)}, + {TOBN(0xd442f8ed, 0x1d9f54ec), TOBN(0x8be3d618, 0xb2d3b5ca), + TOBN(0xe2220ed0, 0xe06b2ce2), TOBN(0x82699a5f, 0x1b0da4c0)}}, + {{TOBN(0x3ff106f5, 0x71c0c3a7), TOBN(0x8f580f5a, 0x0d34180c), + TOBN(0x4ebb120e, 0x22d7d375), TOBN(0x5e5782cc, 0xe9513675)}, + {TOBN(0x2275580c, 0x99c82a70), TOBN(0xe8359fbf, 0x15ea8c4c), + TOBN(0x53b48db8, 0x7b415e70), TOBN(0xaacf2240, 0x100c6014)}}, + {{TOBN(0x9faaccf5, 0xe4652f1d), TOBN(0xbd6fdd2a, 0xd56157b2), + TOBN(0xa4f4fb1f, 0x6261ec50), TOBN(0x244e55ad, 0x476bcd52)}, + {TOBN(0x881c9305, 0x047d320b), TOBN(0x1ca983d5, 0x6181263f), + TOBN(0x354e9a44, 0x278fb8ee), TOBN(0xad2dbc0f, 0x396e4964)}}, + {{TOBN(0x723f3aa2, 0x9268b3de), TOBN(0x0d1ca29a, 0xe6e0609a), + TOBN(0x794866aa, 0x6cf44252), TOBN(0x0b59f3e3, 0x01af87ed)}, + {TOBN(0xe234e5ff, 0x7f4a6c51), TOBN(0xa8768fd2, 0x61dc2f7e), + TOBN(0xdafc7332, 0x0a94d81f), TOBN(0xd7f84282, 0x06938ce1)}}, + {{TOBN(0xae0b3c0e, 0x0546063e), TOBN(0x7fbadcb2, 0x5d61abc6), + TOBN(0xd5d7a2c9, 0x369ac400), TOBN(0xa5978d09, 0xae67d10c)}, + {TOBN(0x290f211e, 0x4f85eaac), TOBN(0xe61e2ad1, 0xfacac681), + TOBN(0xae125225, 0x388384cd), TOBN(0xa7fb68e9, 0xccfde30f)}}, + {{TOBN(0x7a59b936, 0x3daed4c2), TOBN(0x80a9aa40, 0x2606f789), + TOBN(0xb40c1ea5, 0xf6a6d90a), TOBN(0x948364d3, 0x514d5885)}, + {TOBN(0x062ebc60, 0x70985182), TOBN(0xa6db5b0e, 0x33310895), + TOBN(0x64a12175, 0xe329c2f5), TOBN(0xc5f25bd2, 0x90ea237e)}}, + {{TOBN(0x7915c524, 0x2d0a4c23), TOBN(0xeb5d26e4, 0x6bb3cc52), + TOBN(0x369a9116, 0xc09e2c92), TOBN(0x0c527f92, 0xcf182cf8)}, + {TOBN(0x9e591938, 0x2aede0ac), TOBN(0xb2922208, 0x6cc34939), + TOBN(0x3c9d8962, 0x99a34361), TOBN(0x3c81836d, 0xc1905fe6)}}, + {{TOBN(0x4bfeb57f, 0xa001ec5a), TOBN(0xe993f5bb, 0xa0dc5dba), + TOBN(0x47884109, 0x724a1380), TOBN(0x8a0369ab, 0x32fe9a04)}, + {TOBN(0xea068d60, 0x8c927db8), TOBN(0xbf5f37cf, 0x94655741), + TOBN(0x47d402a2, 0x04b6c7ea), TOBN(0x4551c295, 0x6af259cb)}}, + {{TOBN(0x698b71e7, 0xed77ee8b), TOBN(0xbddf7bd0, 0xf309d5c7), + TOBN(0x6201c22c, 0x34e780ca), TOBN(0xab04f7d8, 0x4c295ef4)}, + {TOBN(0x1c947294, 0x4313a8ce), TOBN(0xe532e4ac, 0x92ca4cfe), + TOBN(0x89738f80, 0xd0a7a97a), TOBN(0xec088c88, 0xa580fd5b)}}, + {{TOBN(0x612b1ecc, 0x42ce9e51), TOBN(0x8f9840fd, 0xb25fdd2a), + TOBN(0x3cda78c0, 0x01e7f839), TOBN(0x546b3d3a, 0xece05480)}, + {TOBN(0x271719a9, 0x80d30916), TOBN(0x45497107, 0x584c20c4), + TOBN(0xaf8f9478, 0x5bc78608), TOBN(0x28c7d484, 0x277e2a4c)}}, + {{TOBN(0xfce01767, 0x88a2ffe4), TOBN(0xdc506a35, 0x28e169a5), + TOBN(0x0ea10861, 0x7af9c93a), TOBN(0x1ed24361, 0x03fa0e08)}, + {TOBN(0x96eaaa92, 0xa3d694e7), TOBN(0xc0f43b4d, 0xef50bc74), + TOBN(0xce6aa58c, 0x64114db4), TOBN(0x8218e8ea, 0x7c000fd4)}}, + {{TOBN(0xac815dfb, 0x185f8844), TOBN(0xcd7e90cb, 0x1557abfb), + TOBN(0x23d16655, 0xafbfecdf), TOBN(0x80f3271f, 0x085cac4a)}, + {TOBN(0x7fc39aa7, 0xd0e62f47), TOBN(0x88d519d1, 0x460a48e5), + TOBN(0x59559ac4, 0xd28f101e), TOBN(0x7981d9e9, 0xca9ae816)}}, + {{TOBN(0x5c38652c, 0x9ac38203), TOBN(0x86eaf87f, 0x57657fe5), + TOBN(0x568fc472, 0xe21f5416), TOBN(0x2afff39c, 0xe7e597b5)}, + {TOBN(0x3adbbb07, 0x256d4eab), TOBN(0x22598692, 0x8285ab89), + TOBN(0x35f8112a, 0x041caefe), TOBN(0x95df02e3, 0xa5064c8b)}}, + {{TOBN(0x4d63356e, 0xc7004bf3), TOBN(0x230a08f4, 0xdb83c7de), + TOBN(0xca27b270, 0x8709a7b7), TOBN(0x0d1c4cc4, 0xcb9abd2d)}, + {TOBN(0x8a0bc66e, 0x7550fee8), TOBN(0x369cd4c7, 0x9cf7247e), + TOBN(0x75562e84, 0x92b5b7e7), TOBN(0x8fed0da0, 0x5802af7b)}}, + {{TOBN(0x6a7091c2, 0xe48fb889), TOBN(0x26882c13, 0x7b8a9d06), + TOBN(0xa2498663, 0x1b82a0e2), TOBN(0x844ed736, 0x3518152d)}, + {TOBN(0x282f476f, 0xd86e27c7), TOBN(0xa04edaca, 0x04afefdc), + TOBN(0x8b256ebc, 0x6119e34d), TOBN(0x56a413e9, 0x0787d78b)}}}, + {{{TOBN(0x82ee061d, 0x5a74be50), TOBN(0xe41781c4, 0xdea16ff5), + TOBN(0xe0b0c81e, 0x99bfc8a2), TOBN(0x624f4d69, 0x0b547e2d)}, + {TOBN(0x3a83545d, 0xbdcc9ae4), TOBN(0x2573dbb6, 0x409b1e8e), + TOBN(0x482960c4, 0xa6c93539), TOBN(0xf01059ad, 0x5ae18798)}}, + {{TOBN(0x715c9f97, 0x3112795f), TOBN(0xe8244437, 0x984e6ee1), + TOBN(0x55cb4858, 0xecb66bcd), TOBN(0x7c136735, 0xabaffbee)}, + {TOBN(0x54661595, 0x5dbec38e), TOBN(0x51c0782c, 0x388ad153), + TOBN(0x9ba4c53a, 0xc6e0952f), TOBN(0x27e6782a, 0x1b21dfa8)}}, + {{TOBN(0x682f903d, 0x4ed2dbc2), TOBN(0x0eba59c8, 0x7c3b2d83), + TOBN(0x8e9dc84d, 0x9c7e9335), TOBN(0x5f9b21b0, 0x0eb226d7)}, + {TOBN(0xe33bd394, 0xaf267bae), TOBN(0xaa86cc25, 0xbe2e15ae), + TOBN(0x4f0bf67d, 0x6a8ec500), TOBN(0x5846aa44, 0xf9630658)}}, + {{TOBN(0xfeb09740, 0xe2c2bf15), TOBN(0x627a2205, 0xa9e99704), + TOBN(0xec8d73d0, 0xc2fbc565), TOBN(0x223eed8f, 0xc20c8de8)}, + {TOBN(0x1ee32583, 0xa8363b49), TOBN(0x1a0b6cb9, 0xc9c2b0a6), + TOBN(0x49f7c3d2, 0x90dbc85c), TOBN(0xa8dfbb97, 0x1ef4c1ac)}}, + {{TOBN(0xafb34d4c, 0x65c7c2ab), TOBN(0x1d4610e7, 0xe2c5ea84), + TOBN(0x893f6d1b, 0x973c4ab5), TOBN(0xa3cdd7e9, 0x945ba5c4)}, + {TOBN(0x60514983, 0x064417ee), TOBN(0x1459b23c, 0xad6bdf2b), + TOBN(0x23b2c341, 0x5cf726c3), TOBN(0x3a829635, 0x32d6354a)}}, + {{TOBN(0x294f901f, 0xab192c18), TOBN(0xec5fcbfe, 0x7030164f), + TOBN(0xe2e2fcb7, 0xe2246ba6), TOBN(0x1e7c88b3, 0x221a1a0c)}, + {TOBN(0x72c7dd93, 0xc92d88c5), TOBN(0x41c2148e, 0x1106fb59), + TOBN(0x547dd4f5, 0xa0f60f14), TOBN(0xed9b52b2, 0x63960f31)}}, + {{TOBN(0x6c8349eb, 0xb0a5b358), TOBN(0xb154c5c2, 0x9e7e2ed6), + TOBN(0xcad5eccf, 0xeda462db), TOBN(0xf2d6dbe4, 0x2de66b69)}, + {TOBN(0x426aedf3, 0x8665e5b2), TOBN(0x488a8513, 0x7b7f5723), + TOBN(0x15cc43b3, 0x8bcbb386), TOBN(0x27ad0af3, 0xd791d879)}}, + {{TOBN(0xc16c236e, 0x846e364f), TOBN(0x7f33527c, 0xdea50ca0), + TOBN(0xc4810775, 0x0926b86d), TOBN(0x6c2a3609, 0x0598e70c)}, + {TOBN(0xa6755e52, 0xf024e924), TOBN(0xe0fa07a4, 0x9db4afca), + TOBN(0x15c3ce7d, 0x66831790), TOBN(0x5b4ef350, 0xa6cbb0d6)}}, + {{TOBN(0x2c4aafc4, 0xb6205969), TOBN(0x42563f02, 0xf6c7854f), + TOBN(0x016aced5, 0x1d983b48), TOBN(0xfeb356d8, 0x99949755)}, + {TOBN(0x8c2a2c81, 0xd1a39bd7), TOBN(0x8f44340f, 0xe6934ae9), + TOBN(0x148cf91c, 0x447904da), TOBN(0x7340185f, 0x0f51a926)}}, + {{TOBN(0x2f8f00fb, 0x7409ab46), TOBN(0x057e78e6, 0x80e289b2), + TOBN(0x03e5022c, 0xa888e5d1), TOBN(0x3c87111a, 0x9dede4e2)}, + {TOBN(0x5b9b0e1c, 0x7809460b), TOBN(0xe751c852, 0x71c9abc7), + TOBN(0x8b944e28, 0xc7cc1dc9), TOBN(0x4f201ffa, 0x1d3cfa08)}}, + {{TOBN(0x02fc905c, 0x3e6721ce), TOBN(0xd52d70da, 0xd0b3674c), + TOBN(0x5dc2e5ca, 0x18810da4), TOBN(0xa984b273, 0x5c69dd99)}, + {TOBN(0x63b92527, 0x84de5ca4), TOBN(0x2f1c9872, 0xc852dec4), + TOBN(0x18b03593, 0xc2e3de09), TOBN(0x19d70b01, 0x9813dc2f)}}, + {{TOBN(0x42806b2d, 0xa6dc1d29), TOBN(0xd3030009, 0xf871e144), + TOBN(0xa1feb333, 0xaaf49276), TOBN(0xb5583b9e, 0xc70bc04b)}, + {TOBN(0x1db0be78, 0x95695f20), TOBN(0xfc841811, 0x89d012b5), + TOBN(0x6409f272, 0x05f61643), TOBN(0x40d34174, 0xd5883128)}}, + {{TOBN(0xd79196f5, 0x67419833), TOBN(0x6059e252, 0x863b7b08), + TOBN(0x84da1817, 0x1c56700c), TOBN(0x5758ee56, 0xb28d3ec4)}, + {TOBN(0x7da2771d, 0x013b0ea6), TOBN(0xfddf524b, 0x54c5e9b9), + TOBN(0x7df4faf8, 0x24305d80), TOBN(0x58f5c1bf, 0x3a97763f)}}, + {{TOBN(0xa5af37f1, 0x7c696042), TOBN(0xd4cba22c, 0x4a2538de), + TOBN(0x211cb995, 0x9ea42600), TOBN(0xcd105f41, 0x7b069889)}, + {TOBN(0xb1e1cf19, 0xddb81e74), TOBN(0x472f2d89, 0x5157b8ca), + TOBN(0x086fb008, 0xee9db885), TOBN(0x365cd570, 0x0f26d131)}}, + {{TOBN(0x284b02bb, 0xa2be7053), TOBN(0xdcbbf7c6, 0x7ab9a6d6), + TOBN(0x4425559c, 0x20f7a530), TOBN(0x961f2dfa, 0x188767c8)}, + {TOBN(0xe2fd9435, 0x70dc80c4), TOBN(0x104d6b63, 0xf0784120), + TOBN(0x7f592bc1, 0x53567122), TOBN(0xf6bc1246, 0xf688ad77)}}, + {{TOBN(0x05214c05, 0x0f15dde9), TOBN(0xa47a76a8, 0x0d5f2b82), + TOBN(0xbb254d30, 0x62e82b62), TOBN(0x11a05fe0, 0x3ec955ee)}, + {TOBN(0x7eaff46e, 0x9d529b36), TOBN(0x55ab1301, 0x8f9e3df6), + TOBN(0xc463e371, 0x99317698), TOBN(0xfd251438, 0xccda47ad)}}, + {{TOBN(0xca9c3547, 0x23d695ea), TOBN(0x48ce626e, 0x16e589b5), + TOBN(0x6b5b64c7, 0xb187d086), TOBN(0xd02e1794, 0xb2207948)}, + {TOBN(0x8b58e98f, 0x7198111d), TOBN(0x90ca6305, 0xdcf9c3cc), + TOBN(0x5691fe72, 0xf34089b0), TOBN(0x60941af1, 0xfc7c80ff)}}, + {{TOBN(0xa09bc0a2, 0x22eb51e5), TOBN(0xc0bb7244, 0xaa9cf09a), + TOBN(0x36a8077f, 0x80159f06), TOBN(0x8b5c989e, 0xdddc560e)}, + {TOBN(0x19d2f316, 0x512e1f43), TOBN(0x02eac554, 0xad08ff62), + TOBN(0x012ab84c, 0x07d20b4e), TOBN(0x37d1e115, 0xd6d4e4e1)}}, + {{TOBN(0xb6443e1a, 0xab7b19a8), TOBN(0xf08d067e, 0xdef8cd45), + TOBN(0x63adf3e9, 0x685e03da), TOBN(0xcf15a10e, 0x4792b916)}, + {TOBN(0xf44bcce5, 0xb738a425), TOBN(0xebe131d5, 0x9636b2fd), + TOBN(0x94068841, 0x7850d605), TOBN(0x09684eaa, 0xb40d749d)}}, + {{TOBN(0x8c3c669c, 0x72ba075b), TOBN(0x89f78b55, 0xba469015), + TOBN(0x5706aade, 0x3e9f8ba8), TOBN(0x6d8bd565, 0xb32d7ed7)}, + {TOBN(0x25f4e63b, 0x805f08d6), TOBN(0x7f48200d, 0xc3bcc1b5), + TOBN(0x4e801968, 0xb025d847), TOBN(0x74afac04, 0x87cbe0a8)}}, + {{TOBN(0x43ed2c2b, 0x7e63d690), TOBN(0xefb6bbf0, 0x0223cdb8), + TOBN(0x4fec3cae, 0x2884d3fe), TOBN(0x065ecce6, 0xd75e25a4)}, + {TOBN(0x6c2294ce, 0x69f79071), TOBN(0x0d9a8e5f, 0x044b8666), + TOBN(0x5009f238, 0x17b69d8f), TOBN(0x3c29f8fe, 0xc5dfdaf7)}}, + {{TOBN(0x9067528f, 0xebae68c4), TOBN(0x5b385632, 0x30c5ba21), + TOBN(0x540df119, 0x1fdd1aec), TOBN(0xcf37825b, 0xcfba4c78)}, + {TOBN(0x77eff980, 0xbeb11454), TOBN(0x40a1a991, 0x60c1b066), + TOBN(0xe8018980, 0xf889a1c7), TOBN(0xb9c52ae9, 0x76c24be0)}}, + {{TOBN(0x05fbbcce, 0x45650ef4), TOBN(0xae000f10, 0x8aa29ac7), + TOBN(0x884b7172, 0x4f04c470), TOBN(0x7cd4fde2, 0x19bb5c25)}, + {TOBN(0x6477b22a, 0xe8840869), TOBN(0xa8868859, 0x5fbd0686), + TOBN(0xf23cc02e, 0x1116dfba), TOBN(0x76cd563f, 0xd87d7776)}}, + {{TOBN(0xe2a37598, 0xa9d82abf), TOBN(0x5f188ccb, 0xe6c170f5), + TOBN(0x81682200, 0x5066b087), TOBN(0xda22c212, 0xc7155ada)}, + {TOBN(0x151e5d3a, 0xfbddb479), TOBN(0x4b606b84, 0x6d715b99), + TOBN(0x4a73b54b, 0xf997cb2e), TOBN(0x9a1bfe43, 0x3ecd8b66)}}, + {{TOBN(0x1c312809, 0x2a67d48a), TOBN(0xcd6a671e, 0x031fa9e2), + TOBN(0xbec3312a, 0x0e43a34a), TOBN(0x1d935639, 0x55ef47d3)}, + {TOBN(0x5ea02489, 0x8fea73ea), TOBN(0x8247b364, 0xa035afb2), + TOBN(0xb58300a6, 0x5265b54c), TOBN(0x3286662f, 0x722c7148)}}, + {{TOBN(0xb77fd76b, 0xb4ec4c20), TOBN(0xf0a12fa7, 0x0f3fe3fd), + TOBN(0xf845bbf5, 0x41d8c7e8), TOBN(0xe4d969ca, 0x5ec10aa8)}, + {TOBN(0x4c0053b7, 0x43e232a3), TOBN(0xdc7a3fac, 0x37f8a45a), + TOBN(0x3c4261c5, 0x20d81c8f), TOBN(0xfd4b3453, 0xb00eab00)}}, + {{TOBN(0x76d48f86, 0xd36e3062), TOBN(0x626c5277, 0xa143ff02), + TOBN(0x538174de, 0xaf76f42e), TOBN(0x2267aa86, 0x6407ceac)}, + {TOBN(0xfad76351, 0x72e572d5), TOBN(0xab861af7, 0xba7330eb), + TOBN(0xa0a1c8c7, 0x418d8657), TOBN(0x988821cb, 0x20289a52)}}, + {{TOBN(0x79732522, 0xcccc18ad), TOBN(0xaadf3f8d, 0xf1a6e027), + TOBN(0xf7382c93, 0x17c2354d), TOBN(0x5ce1680c, 0xd818b689)}, + {TOBN(0x359ebbfc, 0xd9ecbee9), TOBN(0x4330689c, 0x1cae62ac), + TOBN(0xb55ce5b4, 0xc51ac38a), TOBN(0x7921dfea, 0xfe238ee8)}}, + {{TOBN(0x3972bef8, 0x271d1ca5), TOBN(0x3e423bc7, 0xe8aabd18), + TOBN(0x57b09f3f, 0x44a3e5e3), TOBN(0x5da886ae, 0x7b444d66)}, + {TOBN(0x68206634, 0xa9964375), TOBN(0x356a2fa3, 0x699cd0ff), + TOBN(0xaf0faa24, 0xdba515e9), TOBN(0x536e1f5c, 0xb321d79a)}}, + {{TOBN(0xd3b9913a, 0x5c04e4ea), TOBN(0xd549dcfe, 0xd6f11513), + TOBN(0xee227bf5, 0x79fd1d94), TOBN(0x9f35afee, 0xb43f2c67)}, + {TOBN(0xd2638d24, 0xf1314f53), TOBN(0x62baf948, 0xcabcd822), + TOBN(0x5542de29, 0x4ef48db0), TOBN(0xb3eb6a04, 0xfc5f6bb2)}}, + {{TOBN(0x23c110ae, 0x1208e16a), TOBN(0x1a4d15b5, 0xf8363e24), + TOBN(0x30716844, 0x164be00b), TOBN(0xa8e24824, 0xf6f4690d)}, + {TOBN(0x548773a2, 0x90b170cf), TOBN(0xa1bef331, 0x42f191f4), + TOBN(0x70f418d0, 0x9247aa97), TOBN(0xea06028e, 0x48be9147)}}, + {{TOBN(0xe13122f3, 0xdbfb894e), TOBN(0xbe9b79f6, 0xce274b18), + TOBN(0x85a49de5, 0xca58aadf), TOBN(0x24957758, 0x11487351)}, + {TOBN(0x111def61, 0xbb939099), TOBN(0x1d6a974a, 0x26d13694), + TOBN(0x4474b4ce, 0xd3fc253b), TOBN(0x3a1485e6, 0x4c5db15e)}}, + {{TOBN(0xe79667b4, 0x147c15b4), TOBN(0xe34f553b, 0x7bc61301), + TOBN(0x032b80f8, 0x17094381), TOBN(0x55d8bafd, 0x723eaa21)}, + {TOBN(0x5a987995, 0xf1c0e74e), TOBN(0x5a9b292e, 0xebba289c), + TOBN(0x413cd4b2, 0xeb4c8251), TOBN(0x98b5d243, 0xd162db0a)}}, + {{TOBN(0xbb47bf66, 0x68342520), TOBN(0x08d68949, 0xbaa862d1), + TOBN(0x11f349c7, 0xe906abcd), TOBN(0x454ce985, 0xed7bf00e)}, + {TOBN(0xacab5c9e, 0xb55b803b), TOBN(0xb03468ea, 0x31e3c16d), + TOBN(0x5c24213d, 0xd273bf12), TOBN(0x211538eb, 0x71587887)}}, + {{TOBN(0x198e4a2f, 0x731dea2d), TOBN(0xd5856cf2, 0x74ed7b2a), + TOBN(0x86a632eb, 0x13a664fe), TOBN(0x932cd909, 0xbda41291)}, + {TOBN(0x850e95d4, 0xc0c4ddc0), TOBN(0xc0f422f8, 0x347fc2c9), + TOBN(0xe68cbec4, 0x86076bcb), TOBN(0xf9e7c0c0, 0xcd6cd286)}}, + {{TOBN(0x65994ddb, 0x0f5f27ca), TOBN(0xe85461fb, 0xa80d59ff), + TOBN(0xff05481a, 0x66601023), TOBN(0xc665427a, 0xfc9ebbfb)}, + {TOBN(0xb0571a69, 0x7587fd52), TOBN(0x935289f8, 0x8d49efce), + TOBN(0x61becc60, 0xea420688), TOBN(0xb22639d9, 0x13a786af)}}, + {{TOBN(0x1a8e6220, 0x361ecf90), TOBN(0x001f23e0, 0x25506463), + TOBN(0xe4ae9b5d, 0x0a5c2b79), TOBN(0xebc9cdad, 0xd8149db5)}, + {TOBN(0xb33164a1, 0x934aa728), TOBN(0x750eb00e, 0xae9b60f3), + TOBN(0x5a91615b, 0x9b9cfbfd), TOBN(0x97015cbf, 0xef45f7f6)}}, + {{TOBN(0xb462c4a5, 0xbf5151df), TOBN(0x21adcc41, 0xb07118f2), + TOBN(0xd60c545b, 0x043fa42c), TOBN(0xfc21aa54, 0xe96be1ab)}, + {TOBN(0xe84bc32f, 0x4e51ea80), TOBN(0x3dae45f0, 0x259b5d8d), + TOBN(0xbb73c7eb, 0xc38f1b5e), TOBN(0xe405a74a, 0xe8ae617d)}}, + {{TOBN(0xbb1ae9c6, 0x9f1c56bd), TOBN(0x8c176b98, 0x49f196a4), + TOBN(0xc448f311, 0x6875092b), TOBN(0xb5afe3de, 0x9f976033)}, + {TOBN(0xa8dafd49, 0x145813e5), TOBN(0x687fc4d9, 0xe2b34226), + TOBN(0xf2dfc92d, 0x4c7ff57f), TOBN(0x004e3fc1, 0x401f1b46)}}, + {{TOBN(0x5afddab6, 0x1430c9ab), TOBN(0x0bdd41d3, 0x2238e997), + TOBN(0xf0947430, 0x418042ae), TOBN(0x71f9adda, 0xcdddc4cb)}, + {TOBN(0x7090c016, 0xc52dd907), TOBN(0xd9bdf44d, 0x29e2047f), + TOBN(0xe6f1fe80, 0x1b1011a6), TOBN(0xb63accbc, 0xd9acdc78)}}, + {{TOBN(0xcfc7e235, 0x1272a95b), TOBN(0x0c667717, 0xa6276ac8), + TOBN(0x3c0d3709, 0xe2d7eef7), TOBN(0x5add2b06, 0x9a685b3e)}, + {TOBN(0x363ad32d, 0x14ea5d65), TOBN(0xf8e01f06, 0x8d7dd506), + TOBN(0xc9ea2213, 0x75b4aac6), TOBN(0xed2a2bf9, 0x0d353466)}}, + {{TOBN(0x439d79b5, 0xe9d3a7c3), TOBN(0x8e0ee5a6, 0x81b7f34b), + TOBN(0xcf3dacf5, 0x1dc4ba75), TOBN(0x1d3d1773, 0xeb3310c7)}, + {TOBN(0xa8e67112, 0x7747ae83), TOBN(0x31f43160, 0x197d6b40), + TOBN(0x0521ccee, 0xcd961400), TOBN(0x67246f11, 0xf6535768)}}, + {{TOBN(0x702fcc5a, 0xef0c3133), TOBN(0x247cc45d, 0x7e16693b), + TOBN(0xfd484e49, 0xc729b749), TOBN(0x522cef7d, 0xb218320f)}, + {TOBN(0xe56ef405, 0x59ab93b3), TOBN(0x225fba11, 0x9f181071), + TOBN(0x33bd6595, 0x15330ed0), TOBN(0xc4be69d5, 0x1ddb32f7)}}, + {{TOBN(0x264c7668, 0x0448087c), TOBN(0xac30903f, 0x71432dae), + TOBN(0x3851b266, 0x00f9bf47), TOBN(0x400ed311, 0x6cdd6d03)}, + {TOBN(0x045e79fe, 0xf8fd2424), TOBN(0xfdfd974a, 0xfa6da98b), + TOBN(0x45c9f641, 0x0c1e673a), TOBN(0x76f2e733, 0x5b2c5168)}}, + {{TOBN(0x1adaebb5, 0x2a601753), TOBN(0xb286514c, 0xc57c2d49), + TOBN(0xd8769670, 0x1e0bfd24), TOBN(0x950c547e, 0x04478922)}, + {TOBN(0xd1d41969, 0xe5d32bfe), TOBN(0x30bc1472, 0x750d6c3e), + TOBN(0x8f3679fe, 0xe0e27f3a), TOBN(0x8f64a7dc, 0xa4a6ee0c)}}, + {{TOBN(0x2fe59937, 0x633dfb1f), TOBN(0xea82c395, 0x977f2547), + TOBN(0xcbdfdf1a, 0x661ea646), TOBN(0xc7ccc591, 0xb9085451)}, + {TOBN(0x82177962, 0x81761e13), TOBN(0xda57596f, 0x9196885c), + TOBN(0xbc17e849, 0x28ffbd70), TOBN(0x1e6e0a41, 0x2671d36f)}}, + {{TOBN(0x61ae872c, 0x4152fcf5), TOBN(0x441c87b0, 0x9e77e754), + TOBN(0xd0799dd5, 0xa34dff09), TOBN(0x766b4e44, 0x88a6b171)}, + {TOBN(0xdc06a512, 0x11f1c792), TOBN(0xea02ae93, 0x4be35c3e), + TOBN(0xe5ca4d6d, 0xe90c469e), TOBN(0x4df4368e, 0x56e4ff5c)}}, + {{TOBN(0x7817acab, 0x4baef62e), TOBN(0x9f5a2202, 0xa85b91e8), + TOBN(0x9666ebe6, 0x6ce57610), TOBN(0x32ad31f3, 0xf73bfe03)}, + {TOBN(0x628330a4, 0x25bcf4d6), TOBN(0xea950593, 0x515056e6), + TOBN(0x59811c89, 0xe1332156), TOBN(0xc89cf1fe, 0x8c11b2d7)}}, + {{TOBN(0x75b63913, 0x04e60cc0), TOBN(0xce811e8d, 0x4625d375), + TOBN(0x030e43fc, 0x2d26e562), TOBN(0xfbb30b4b, 0x608d36a0)}, + {TOBN(0x634ff82c, 0x48528118), TOBN(0x7c6fe085, 0xcd285911), + TOBN(0x7f2830c0, 0x99358f28), TOBN(0x2e60a95e, 0x665e6c09)}}, + {{TOBN(0x08407d3d, 0x9b785dbf), TOBN(0x530889ab, 0xa759bce7), + TOBN(0xf228e0e6, 0x52f61239), TOBN(0x2b6d1461, 0x6879be3c)}, + {TOBN(0xe6902c04, 0x51a7bbf7), TOBN(0x30ad99f0, 0x76f24a64), + TOBN(0x66d9317a, 0x98bc6da0), TOBN(0xf4f877f3, 0xcb596ac0)}}, + {{TOBN(0xb05ff62d, 0x4c44f119), TOBN(0x4555f536, 0xe9b77416), + TOBN(0xc7c0d059, 0x8caed63b), TOBN(0x0cd2b7ce, 0xc358b2a9)}, + {TOBN(0x3f33287b, 0x46945fa3), TOBN(0xf8785b20, 0xd67c8791), + TOBN(0xc54a7a61, 0x9637bd08), TOBN(0x54d4598c, 0x18be79d7)}}, + {{TOBN(0x889e5acb, 0xc46d7ce1), TOBN(0x9a515bb7, 0x8b085877), + TOBN(0xfac1a03d, 0x0b7a5050), TOBN(0x7d3e738a, 0xf2926035)}, + {TOBN(0x861cc2ce, 0x2a6cb0eb), TOBN(0x6f2e2955, 0x8f7adc79), + TOBN(0x61c4d451, 0x33016376), TOBN(0xd9fd2c80, 0x5ad59090)}}, + {{TOBN(0xe5a83738, 0xb2b836a1), TOBN(0x855b41a0, 0x7c0d6622), + TOBN(0x186fe317, 0x7cc19af1), TOBN(0x6465c1ff, 0xfdd99acb)}, + {TOBN(0x46e5c23f, 0x6974b99e), TOBN(0x75a7cf8b, 0xa2717cbe), + TOBN(0x4d2ebc3f, 0x062be658), TOBN(0x094b4447, 0x5f209c98)}}, + {{TOBN(0x4af285ed, 0xb940cb5a), TOBN(0x6706d792, 0x7cc82f10), + TOBN(0xc8c8776c, 0x030526fa), TOBN(0xfa8e6f76, 0xa0da9140)}, + {TOBN(0x77ea9d34, 0x591ee4f0), TOBN(0x5f46e337, 0x40274166), + TOBN(0x1bdf98bb, 0xea671457), TOBN(0xd7c08b46, 0x862a1fe2)}}, + {{TOBN(0x46cc303c, 0x1c08ad63), TOBN(0x99543440, 0x4c845e7b), + TOBN(0x1b8fbdb5, 0x48f36bf7), TOBN(0x5b82c392, 0x8c8273a7)}, + {TOBN(0x08f712c4, 0x928435d5), TOBN(0x071cf0f1, 0x79330380), + TOBN(0xc74c2d24, 0xa8da054a), TOBN(0xcb0e7201, 0x43c46b5c)}}, + {{TOBN(0x0ad7337a, 0xc0b7eff3), TOBN(0x8552225e, 0xc5e48b3c), + TOBN(0xe6f78b0c, 0x73f13a5f), TOBN(0x5e70062e, 0x82349cbe)}, + {TOBN(0x6b8d5048, 0xe7073969), TOBN(0x392d2a29, 0xc33cb3d2), + TOBN(0xee4f727c, 0x4ecaa20f), TOBN(0xa068c99e, 0x2ccde707)}}, + {{TOBN(0xfcd5651f, 0xb87a2913), TOBN(0xea3e3c15, 0x3cc252f0), + TOBN(0x777d92df, 0x3b6cd3e4), TOBN(0x7a414143, 0xc5a732e7)}, + {TOBN(0xa895951a, 0xa71ff493), TOBN(0xfe980c92, 0xbbd37cf6), + TOBN(0x45bd5e64, 0xdecfeeff), TOBN(0x910dc2a9, 0xa44c43e9)}}, + {{TOBN(0xcb403f26, 0xcca9f54d), TOBN(0x928bbdfb, 0x9303f6db), + TOBN(0x3c37951e, 0xa9eee67c), TOBN(0x3bd61a52, 0xf79961c3)}, + {TOBN(0x09a238e6, 0x395c9a79), TOBN(0x6940ca2d, 0x61eb352d), + TOBN(0x7d1e5c5e, 0xc1875631), TOBN(0x1e19742c, 0x1e1b20d1)}}, + {{TOBN(0x4633d908, 0x23fc2e6e), TOBN(0xa76e29a9, 0x08959149), + TOBN(0x61069d9c, 0x84ed7da5), TOBN(0x0baa11cf, 0x5dbcad51)}, + {TOBN(0xd01eec64, 0x961849da), TOBN(0x93b75f1f, 0xaf3d8c28), + TOBN(0x57bc4f9f, 0x1ca2ee44), TOBN(0x5a26322d, 0x00e00558)}}, + {{TOBN(0x1888d658, 0x61a023ef), TOBN(0x1d72aab4, 0xb9e5246e), + TOBN(0xa9a26348, 0xe5563ec0), TOBN(0xa0971963, 0xc3439a43)}, + {TOBN(0x567dd54b, 0xadb9b5b7), TOBN(0x73fac1a1, 0xc45a524b), + TOBN(0x8fe97ef7, 0xfe38e608), TOBN(0x608748d2, 0x3f384f48)}}, + {{TOBN(0xb0571794, 0xc486094f), TOBN(0x869254a3, 0x8bf3a8d6), + TOBN(0x148a8dd1, 0x310b0e25), TOBN(0x99ab9f3f, 0x9aa3f7d8)}, + {TOBN(0x0927c68a, 0x6706c02e), TOBN(0x22b5e76c, 0x69790e6c), + TOBN(0x6c325260, 0x6c71376c), TOBN(0x53a57690, 0x09ef6657)}}, + {{TOBN(0x8d63f852, 0xedffcf3a), TOBN(0xb4d2ed04, 0x3c0a6f55), + TOBN(0xdb3aa8de, 0x12519b9e), TOBN(0x5d38e9c4, 0x1e0a569a)}, + {TOBN(0x871528bf, 0x303747e2), TOBN(0xa208e77c, 0xf5b5c18d), + TOBN(0x9d129c88, 0xca6bf923), TOBN(0xbcbf197f, 0xbf02839f)}}, + {{TOBN(0x9b9bf030, 0x27323194), TOBN(0x3b055a8b, 0x339ca59d), + TOBN(0xb46b2312, 0x0f669520), TOBN(0x19789f1f, 0x497e5f24)}, + {TOBN(0x9c499468, 0xaaf01801), TOBN(0x72ee1190, 0x8b69d59c), + TOBN(0x8bd39595, 0xacf4c079), TOBN(0x3ee11ece, 0x8e0cd048)}}, + {{TOBN(0xebde86ec, 0x1ed66f18), TOBN(0x225d906b, 0xd61fce43), + TOBN(0x5cab07d6, 0xe8bed74d), TOBN(0x16e4617f, 0x27855ab7)}, + {TOBN(0x6568aadd, 0xb2fbc3dd), TOBN(0xedb5484f, 0x8aeddf5b), + TOBN(0x878f20e8, 0x6dcf2fad), TOBN(0x3516497c, 0x615f5699)}}}, + {{{TOBN(0xef0a3fec, 0xfa181e69), TOBN(0x9ea02f81, 0x30d69a98), + TOBN(0xb2e9cf8e, 0x66eab95d), TOBN(0x520f2beb, 0x24720021)}, + {TOBN(0x621c540a, 0x1df84361), TOBN(0x12037721, 0x71fa6d5d), + TOBN(0x6e3c7b51, 0x0ff5f6ff), TOBN(0x817a069b, 0xabb2bef3)}}, + {{TOBN(0x83572fb6, 0xb294cda6), TOBN(0x6ce9bf75, 0xb9039f34), + TOBN(0x20e012f0, 0x095cbb21), TOBN(0xa0aecc1b, 0xd063f0da)}, + {TOBN(0x57c21c3a, 0xf02909e5), TOBN(0xc7d59ecf, 0x48ce9cdc), + TOBN(0x2732b844, 0x8ae336f8), TOBN(0x056e3723, 0x3f4f85f4)}}, + {{TOBN(0x8a10b531, 0x89e800ca), TOBN(0x50fe0c17, 0x145208fd), + TOBN(0x9e43c0d3, 0xb714ba37), TOBN(0x427d200e, 0x34189acc)}, + {TOBN(0x05dee24f, 0xe616e2c0), TOBN(0x9c25f4c8, 0xee1854c1), + TOBN(0x4d3222a5, 0x8f342a73), TOBN(0x0807804f, 0xa027c952)}}, + {{TOBN(0xc222653a, 0x4f0d56f3), TOBN(0x961e4047, 0xca28b805), + TOBN(0x2c03f8b0, 0x4a73434b), TOBN(0x4c966787, 0xab712a19)}, + {TOBN(0xcc196c42, 0x864fee42), TOBN(0xc1be93da, 0x5b0ece5c), + TOBN(0xa87d9f22, 0xc131c159), TOBN(0x2bb6d593, 0xdce45655)}}, + {{TOBN(0x22c49ec9, 0xb809b7ce), TOBN(0x8a41486b, 0xe2c72c2c), + TOBN(0x813b9420, 0xfea0bf36), TOBN(0xb3d36ee9, 0xa66dac69)}, + {TOBN(0x6fddc08a, 0x328cc987), TOBN(0x0a3bcd2c, 0x3a326461), + TOBN(0x7103c49d, 0xd810dbba), TOBN(0xf9d81a28, 0x4b78a4c4)}}, + {{TOBN(0x3de865ad, 0xe4d55941), TOBN(0xdedafa5e, 0x30384087), + TOBN(0x6f414abb, 0x4ef18b9b), TOBN(0x9ee9ea42, 0xfaee5268)}, + {TOBN(0x260faa16, 0x37a55a4a), TOBN(0xeb19a514, 0x015f93b9), + TOBN(0x51d7ebd2, 0x9e9c3598), TOBN(0x523fc56d, 0x1932178e)}}, + {{TOBN(0x501d070c, 0xb98fe684), TOBN(0xd60fbe9a, 0x124a1458), + TOBN(0xa45761c8, 0x92bc6b3f), TOBN(0xf5384858, 0xfe6f27cb)}, + {TOBN(0x4b0271f7, 0xb59e763b), TOBN(0x3d4606a9, 0x5b5a8e5e), + TOBN(0x1eda5d9b, 0x05a48292), TOBN(0xda7731d0, 0xe6fec446)}}, + {{TOBN(0xa3e33693, 0x90d45871), TOBN(0xe9764040, 0x06166d8d), + TOBN(0xb5c33682, 0x89a90403), TOBN(0x4bd17983, 0x72f1d637)}, + {TOBN(0xa616679e, 0xd5d2c53a), TOBN(0x5ec4bcd8, 0xfdcf3b87), + TOBN(0xae6d7613, 0xb66a694e), TOBN(0x7460fc76, 0xe3fc27e5)}}, + {{TOBN(0x70469b82, 0x95caabee), TOBN(0xde024ca5, 0x889501e3), + TOBN(0x6bdadc06, 0x076ed265), TOBN(0x0cb1236b, 0x5a0ef8b2)}, + {TOBN(0x4065ddbf, 0x0972ebf9), TOBN(0xf1dd3875, 0x22aca432), + TOBN(0xa88b97cf, 0x744aff76), TOBN(0xd1359afd, 0xfe8e3d24)}}, + {{TOBN(0x52a3ba2b, 0x91502cf3), TOBN(0x2c3832a8, 0x084db75d), + TOBN(0x04a12ddd, 0xde30b1c9), TOBN(0x7802eabc, 0xe31fd60c)}, + {TOBN(0x33707327, 0xa37fddab), TOBN(0x65d6f2ab, 0xfaafa973), + TOBN(0x3525c5b8, 0x11e6f91a), TOBN(0x76aeb0c9, 0x5f46530b)}}, + {{TOBN(0xe8815ff6, 0x2f93a675), TOBN(0xa6ec9684, 0x05f48679), + TOBN(0x6dcbb556, 0x358ae884), TOBN(0x0af61472, 0xe19e3873)}, + {TOBN(0x72334372, 0xa5f696be), TOBN(0xc65e57ea, 0x6f22fb70), + TOBN(0x268da30c, 0x946cea90), TOBN(0x136a8a87, 0x65681b2a)}}, + {{TOBN(0xad5e81dc, 0x0f9f44d4), TOBN(0xf09a6960, 0x2c46585a), + TOBN(0xd1649164, 0xc447d1b1), TOBN(0x3b4b36c8, 0x879dc8b1)}, + {TOBN(0x20d4177b, 0x3b6b234c), TOBN(0x096a2505, 0x1730d9d0), + TOBN(0x0611b9b8, 0xef80531d), TOBN(0xba904b3b, 0x64bb495d)}}, + {{TOBN(0x1192d9d4, 0x93a3147a), TOBN(0x9f30a5dc, 0x9a565545), + TOBN(0x90b1f9cb, 0x6ef07212), TOBN(0x29958546, 0x0d87fc13)}, + {TOBN(0xd3323eff, 0xc17db9ba), TOBN(0xcb18548c, 0xcb1644a8), + TOBN(0x18a306d4, 0x4f49ffbc), TOBN(0x28d658f1, 0x4c2e8684)}}, + {{TOBN(0x44ba60cd, 0xa99f8c71), TOBN(0x67b7abdb, 0x4bf742ff), + TOBN(0x66310f9c, 0x914b3f99), TOBN(0xae430a32, 0xf412c161)}, + {TOBN(0x1e6776d3, 0x88ace52f), TOBN(0x4bc0fa24, 0x52d7067d), + TOBN(0x03c286aa, 0x8f07cd1b), TOBN(0x4cb8f38c, 0xa985b2c1)}}, + {{TOBN(0x83ccbe80, 0x8c3bff36), TOBN(0x005a0bd2, 0x5263e575), + TOBN(0x460d7dda, 0x259bdcd1), TOBN(0x4a1c5642, 0xfa5cab6b)}, + {TOBN(0x2b7bdbb9, 0x9fe4fc88), TOBN(0x09418e28, 0xcc97bbb5), + TOBN(0xd8274fb4, 0xa12321ae), TOBN(0xb137007d, 0x5c87b64e)}}, + {{TOBN(0x80531fe1, 0xc63c4962), TOBN(0x50541e89, 0x981fdb25), + TOBN(0xdc1291a1, 0xfd4c2b6b), TOBN(0xc0693a17, 0xa6df4fca)}, + {TOBN(0xb2c4604e, 0x0117f203), TOBN(0x245f1963, 0x0a99b8d0), + TOBN(0xaedc20aa, 0xc6212c44), TOBN(0xb1ed4e56, 0x520f52a8)}}, + {{TOBN(0xfe48f575, 0xf8547be3), TOBN(0x0a7033cd, 0xa9e45f98), + TOBN(0x4b45d3a9, 0x18c50100), TOBN(0xb2a6cd6a, 0xa61d41da)}, + {TOBN(0x60bbb4f5, 0x57933c6b), TOBN(0xa7538ebd, 0x2b0d7ffc), + TOBN(0x9ea3ab8d, 0x8cd626b6), TOBN(0x8273a484, 0x3601625a)}}, + {{TOBN(0x88859845, 0x0168e508), TOBN(0x8cbc9bb2, 0x99a94abd), + TOBN(0x713ac792, 0xfab0a671), TOBN(0xa3995b19, 0x6c9ebffc)}, + {TOBN(0xe711668e, 0x1239e152), TOBN(0x56892558, 0xbbb8dff4), + TOBN(0x8bfc7dab, 0xdbf17963), TOBN(0x5b59fe5a, 0xb3de1253)}}, + {{TOBN(0x7e3320eb, 0x34a9f7ae), TOBN(0xe5e8cf72, 0xd751efe4), + TOBN(0x7ea003bc, 0xd9be2f37), TOBN(0xc0f551a0, 0xb6c08ef7)}, + {TOBN(0x56606268, 0x038f6725), TOBN(0x1dd38e35, 0x6d92d3b6), + TOBN(0x07dfce7c, 0xc3cbd686), TOBN(0x4e549e04, 0x651c5da8)}}, + {{TOBN(0x4058f93b, 0x08b19340), TOBN(0xc2fae6f4, 0xcac6d89d), + TOBN(0x4bad8a8c, 0x8f159cc7), TOBN(0x0ddba4b3, 0xcb0b601c)}, + {TOBN(0xda4fc7b5, 0x1dd95f8c), TOBN(0x1d163cd7, 0xcea5c255), + TOBN(0x30707d06, 0x274a8c4c), TOBN(0x79d9e008, 0x2802e9ce)}}, + {{TOBN(0x02a29ebf, 0xe6ddd505), TOBN(0x37064e74, 0xb50bed1a), + TOBN(0x3f6bae65, 0xa7327d57), TOBN(0x3846f5f1, 0xf83920bc)}, + {TOBN(0x87c37491, 0x60df1b9b), TOBN(0x4cfb2895, 0x2d1da29f), + TOBN(0x10a478ca, 0x4ed1743c), TOBN(0x390c6030, 0x3edd47c6)}}, + {{TOBN(0x8f3e5312, 0x8c0a78de), TOBN(0xccd02bda, 0x1e85df70), + TOBN(0xd6c75c03, 0xa61b6582), TOBN(0x0762921c, 0xfc0eebd1)}, + {TOBN(0xd34d0823, 0xd85010c0), TOBN(0xd73aaacb, 0x0044cf1f), + TOBN(0xfb4159bb, 0xa3b5e78a), TOBN(0x2287c7f7, 0xe5826f3f)}}, + {{TOBN(0x4aeaf742, 0x580b1a01), TOBN(0xf080415d, 0x60423b79), + TOBN(0xe12622cd, 0xa7dea144), TOBN(0x49ea4996, 0x59d62472)}, + {TOBN(0xb42991ef, 0x571f3913), TOBN(0x0610f214, 0xf5b25a8a), + TOBN(0x47adc585, 0x30b79e8f), TOBN(0xf90e3df6, 0x07a065a2)}}, + {{TOBN(0x5d0a5deb, 0x43e2e034), TOBN(0x53fb5a34, 0x444024aa), + TOBN(0xa8628c68, 0x6b0c9f7f), TOBN(0x9c69c29c, 0xac563656)}, + {TOBN(0x5a231feb, 0xbace47b6), TOBN(0xbdce0289, 0x9ea5a2ec), + TOBN(0x05da1fac, 0x9463853e), TOBN(0x96812c52, 0x509e78aa)}}, + {{TOBN(0xd3fb5771, 0x57151692), TOBN(0xeb2721f8, 0xd98e1c44), + TOBN(0xc0506087, 0x32399be1), TOBN(0xda5a5511, 0xd979d8b8)}, + {TOBN(0x737ed55d, 0xc6f56780), TOBN(0xe20d3004, 0x0dc7a7f4), + TOBN(0x02ce7301, 0xf5941a03), TOBN(0x91ef5215, 0xed30f83a)}}, + {{TOBN(0x28727fc1, 0x4092d85f), TOBN(0x72d223c6, 0x5c49e41a), + TOBN(0xa7cf30a2, 0xba6a4d81), TOBN(0x7c086209, 0xb030d87d)}, + {TOBN(0x04844c7d, 0xfc588b09), TOBN(0x728cd499, 0x5874bbb0), + TOBN(0xcc1281ee, 0xe84c0495), TOBN(0x0769b5ba, 0xec31958f)}}, + {{TOBN(0x665c228b, 0xf99c2471), TOBN(0xf2d8a11b, 0x191eb110), + TOBN(0x4594f494, 0xd36d7024), TOBN(0x482ded8b, 0xcdcb25a1)}, + {TOBN(0xc958a9d8, 0xdadd4885), TOBN(0x7004477e, 0xf1d2b547), + TOBN(0x0a45f6ef, 0x2a0af550), TOBN(0x4fc739d6, 0x2f8d6351)}}, + {{TOBN(0x75cdaf27, 0x786f08a9), TOBN(0x8700bb26, 0x42c2737f), + TOBN(0x855a7141, 0x1c4e2670), TOBN(0x810188c1, 0x15076fef)}, + {TOBN(0xc251d0c9, 0xabcd3297), TOBN(0xae4c8967, 0xf48108eb), + TOBN(0xbd146de7, 0x18ceed30), TOBN(0xf9d4f07a, 0xc986bced)}}, + {{TOBN(0x5ad98ed5, 0x83fa1e08), TOBN(0x7780d33e, 0xbeabd1fb), + TOBN(0xe330513c, 0x903b1196), TOBN(0xba11de9e, 0xa47bc8c4)}, + {TOBN(0x684334da, 0x02c2d064), TOBN(0x7ecf360d, 0xa48de23b), + TOBN(0x57a1b474, 0x0a9089d8), TOBN(0xf28fa439, 0xff36734c)}}, + {{TOBN(0xf2a482cb, 0xea4570b3), TOBN(0xee65d68b, 0xa5ebcee9), + TOBN(0x988d0036, 0xb9694cd5), TOBN(0x53edd0e9, 0x37885d32)}, + {TOBN(0xe37e3307, 0xbeb9bc6d), TOBN(0xe9abb907, 0x9f5c6768), + TOBN(0x4396ccd5, 0x51f2160f), TOBN(0x2500888c, 0x47336da6)}}, + {{TOBN(0x383f9ed9, 0x926fce43), TOBN(0x809dd1c7, 0x04da2930), + TOBN(0x30f6f596, 0x8a4cb227), TOBN(0x0d700c7f, 0x73a56b38)}, + {TOBN(0x1825ea33, 0xab64a065), TOBN(0xaab9b735, 0x1338df80), + TOBN(0x1516100d, 0x9b63f57f), TOBN(0x2574395a, 0x27a6a634)}}, + {{TOBN(0xb5560fb6, 0x700a1acd), TOBN(0xe823fd73, 0xfd999681), + TOBN(0xda915d1f, 0x6cb4e1ba), TOBN(0x0d030118, 0x6ebe00a3)}, + {TOBN(0x744fb0c9, 0x89fca8cd), TOBN(0x970d01db, 0xf9da0e0b), + TOBN(0x0ad8c564, 0x7931d76f), TOBN(0xb15737bf, 0xf659b96a)}}, + {{TOBN(0xdc9933e8, 0xa8b484e7), TOBN(0xb2fdbdf9, 0x7a26dec7), + TOBN(0x2349e9a4, 0x9f1f0136), TOBN(0x7860368e, 0x70fddddb)}, + {TOBN(0xd93d2c1c, 0xf9ad3e18), TOBN(0x6d6c5f17, 0x689f4e79), + TOBN(0x7a544d91, 0xb24ff1b6), TOBN(0x3e12a5eb, 0xfe16cd8c)}}, + {{TOBN(0x543574e9, 0xa56b872f), TOBN(0xa1ad550c, 0xfcf68ea2), + TOBN(0x689e37d2, 0x3f560ef7), TOBN(0x8c54b9ca, 0xc9d47a8b)}, + {TOBN(0x46d40a4a, 0x088ac342), TOBN(0xec450c7c, 0x1576c6d0), + TOBN(0xb589e31c, 0x1f9689e9), TOBN(0xdacf2602, 0xb8781718)}}, + {{TOBN(0xa89237c6, 0xc8cb6b42), TOBN(0x1326fc93, 0xb96ef381), + TOBN(0x55d56c6d, 0xb5f07825), TOBN(0xacba2eea, 0x7449e22d)}, + {TOBN(0x74e0887a, 0x633c3000), TOBN(0xcb6cd172, 0xd7cbcf71), + TOBN(0x309e81de, 0xc36cf1be), TOBN(0x07a18a6d, 0x60ae399b)}}, + {{TOBN(0xb36c2679, 0x9edce57e), TOBN(0x52b892f4, 0xdf001d41), + TOBN(0xd884ae5d, 0x16a1f2c6), TOBN(0x9b329424, 0xefcc370a)}, + {TOBN(0x3120daf2, 0xbd2e21df), TOBN(0x55298d2d, 0x02470a99), + TOBN(0x0b78af6c, 0xa05db32e), TOBN(0x5c76a331, 0x601f5636)}}, + {{TOBN(0xaae861ff, 0xf8a4f29c), TOBN(0x70dc9240, 0xd68f8d49), + TOBN(0x960e649f, 0x81b1321c), TOBN(0x3d2c801b, 0x8792e4ce)}, + {TOBN(0xf479f772, 0x42521876), TOBN(0x0bed93bc, 0x416c79b1), + TOBN(0xa67fbc05, 0x263e5bc9), TOBN(0x01e8e630, 0x521db049)}}, + {{TOBN(0x76f26738, 0xc6f3431e), TOBN(0xe609cb02, 0xe3267541), + TOBN(0xb10cff2d, 0x818c877c), TOBN(0x1f0e75ce, 0x786a13cb)}, + {TOBN(0xf4fdca64, 0x1158544d), TOBN(0x5d777e89, 0x6cb71ed0), + TOBN(0x3c233737, 0xa9aa4755), TOBN(0x7b453192, 0xe527ab40)}}, + {{TOBN(0xdb59f688, 0x39f05ffe), TOBN(0x8f4f4be0, 0x6d82574e), + TOBN(0xcce3450c, 0xee292d1b), TOBN(0xaa448a12, 0x61ccd086)}, + {TOBN(0xabce91b3, 0xf7914967), TOBN(0x4537f09b, 0x1908a5ed), + TOBN(0xa812421e, 0xf51042e7), TOBN(0xfaf5cebc, 0xec0b3a34)}}, + {{TOBN(0x730ffd87, 0x4ca6b39a), TOBN(0x70fb72ed, 0x02efd342), + TOBN(0xeb4735f9, 0xd75c8edb), TOBN(0xc11f2157, 0xc278aa51)}, + {TOBN(0xc459f635, 0xbf3bfebf), TOBN(0x3a1ff0b4, 0x6bd9601f), + TOBN(0xc9d12823, 0xc420cb73), TOBN(0x3e9af3e2, 0x3c2915a3)}}, + {{TOBN(0xe0c82c72, 0xb41c3440), TOBN(0x175239e5, 0xe3039a5f), + TOBN(0xe1084b8a, 0x558795a3), TOBN(0x328d0a1d, 0xd01e5c60)}, + {TOBN(0x0a495f2e, 0xd3788a04), TOBN(0x25d8ff16, 0x66c11a9f), + TOBN(0xf5155f05, 0x9ed692d6), TOBN(0x954fa107, 0x4f425fe4)}}, + {{TOBN(0xd16aabf2, 0xe98aaa99), TOBN(0x90cd8ba0, 0x96b0f88a), + TOBN(0x957f4782, 0xc154026a), TOBN(0x54ee0734, 0x52af56d2)}, + {TOBN(0xbcf89e54, 0x45b4147a), TOBN(0x3d102f21, 0x9a52816c), + TOBN(0x6808517e, 0x39b62e77), TOBN(0x92e25421, 0x69169ad8)}}, + {{TOBN(0xd721d871, 0xbb608558), TOBN(0x60e4ebae, 0xf6d4ff9b), + TOBN(0x0ba10819, 0x41f2763e), TOBN(0xca2e45be, 0x51ee3247)}, + {TOBN(0x66d172ec, 0x2bfd7a5f), TOBN(0x528a8f2f, 0x74d0b12d), + TOBN(0xe17f1e38, 0xdabe70dc), TOBN(0x1d5d7316, 0x9f93983c)}}, + {{TOBN(0x51b2184a, 0xdf423e31), TOBN(0xcb417291, 0xaedb1a10), + TOBN(0x2054ca93, 0x625bcab9), TOBN(0x54396860, 0xa98998f0)}, + {TOBN(0x4e53f6c4, 0xa54ae57e), TOBN(0x0ffeb590, 0xee648e9d), + TOBN(0xfbbdaadc, 0x6afaf6bc), TOBN(0xf88ae796, 0xaa3bfb8a)}}, + {{TOBN(0x209f1d44, 0xd2359ed9), TOBN(0xac68dd03, 0xf3544ce2), + TOBN(0xf378da47, 0xfd51e569), TOBN(0xe1abd860, 0x2cc80097)}, + {TOBN(0x23ca18d9, 0x343b6e3a), TOBN(0x480797e8, 0xb40a1bae), + TOBN(0xd1f0c717, 0x533f3e67), TOBN(0x44896970, 0x06e6cdfc)}}, + {{TOBN(0x8ca21055, 0x52a82e8d), TOBN(0xb2caf785, 0x78460cdc), + TOBN(0x4c1b7b62, 0xe9037178), TOBN(0xefc09d2c, 0xdb514b58)}, + {TOBN(0x5f2df9ee, 0x9113be5c), TOBN(0x2fbda78f, 0xb3f9271c), + TOBN(0xe09a81af, 0x8f83fc54), TOBN(0x06b13866, 0x8afb5141)}}, + {{TOBN(0x38f6480f, 0x43e3865d), TOBN(0x72dd77a8, 0x1ddf47d9), + TOBN(0xf2a8e971, 0x4c205ff7), TOBN(0x46d449d8, 0x9d088ad8)}, + {TOBN(0x926619ea, 0x185d706f), TOBN(0xe47e02eb, 0xc7dd7f62), + TOBN(0xe7f120a7, 0x8cbc2031), TOBN(0xc18bef00, 0x998d4ac9)}}, + {{TOBN(0x18f37a9c, 0x6bdf22da), TOBN(0xefbc432f, 0x90dc82df), + TOBN(0xc52cef8e, 0x5d703651), TOBN(0x82887ba0, 0xd99881a5)}, + {TOBN(0x7cec9dda, 0xb920ec1d), TOBN(0xd0d7e8c3, 0xec3e8d3b), + TOBN(0x445bc395, 0x4ca88747), TOBN(0xedeaa2e0, 0x9fd53535)}}, + {{TOBN(0x461b1d93, 0x6cc87475), TOBN(0xd92a52e2, 0x6d2383bd), + TOBN(0xfabccb59, 0xd7903546), TOBN(0x6111a761, 0x3d14b112)}, + {TOBN(0x0ae584fe, 0xb3d5f612), TOBN(0x5ea69b8d, 0x60e828ec), + TOBN(0x6c078985, 0x54087030), TOBN(0x649cab04, 0xac4821fe)}}, + {{TOBN(0x25ecedcf, 0x8bdce214), TOBN(0xb5622f72, 0x86af7361), + TOBN(0x0e1227aa, 0x7038b9e2), TOBN(0xd0efb273, 0xac20fa77)}, + {TOBN(0x817ff88b, 0x79df975b), TOBN(0x856bf286, 0x1999503e), + TOBN(0xb4d5351f, 0x5038ec46), TOBN(0x740a52c5, 0xfc42af6e)}}, + {{TOBN(0x2e38bb15, 0x2cbb1a3f), TOBN(0xc3eb99fe, 0x17a83429), + TOBN(0xca4fcbf1, 0xdd66bb74), TOBN(0x880784d6, 0xcde5e8fc)}, + {TOBN(0xddc84c1c, 0xb4e7a0be), TOBN(0x8780510d, 0xbd15a72f), + TOBN(0x44bcf1af, 0x81ec30e1), TOBN(0x141e50a8, 0x0a61073e)}}, + {{TOBN(0x0d955718, 0x47be87ae), TOBN(0x68a61417, 0xf76a4372), + TOBN(0xf57e7e87, 0xc607c3d3), TOBN(0x043afaf8, 0x5252f332)}, + {TOBN(0xcc14e121, 0x1552a4d2), TOBN(0xb6dee692, 0xbb4d4ab4), + TOBN(0xb6ab74c8, 0xa03816a4), TOBN(0x84001ae4, 0x6f394a29)}}, + {{TOBN(0x5bed8344, 0xd795fb45), TOBN(0x57326e7d, 0xb79f55a5), + TOBN(0xc9533ce0, 0x4accdffc), TOBN(0x53473caf, 0x3993fa04)}, + {TOBN(0x7906eb93, 0xa13df4c8), TOBN(0xa73e51f6, 0x97cbe46f), + TOBN(0xd1ab3ae1, 0x0ae4ccf8), TOBN(0x25614508, 0x8a5b3dbc)}}, + {{TOBN(0x61eff962, 0x11a71b27), TOBN(0xdf71412b, 0x6bb7fa39), + TOBN(0xb31ba6b8, 0x2bd7f3ef), TOBN(0xb0b9c415, 0x69180d29)}, + {TOBN(0xeec14552, 0x014cdde5), TOBN(0x702c624b, 0x227b4bbb), + TOBN(0x2b15e8c2, 0xd3e988f3), TOBN(0xee3bcc6d, 0xa4f7fd04)}}, + {{TOBN(0x9d00822a, 0x42ac6c85), TOBN(0x2db0cea6, 0x1df9f2b7), + TOBN(0xd7cad2ab, 0x42de1e58), TOBN(0x346ed526, 0x2d6fbb61)}, + {TOBN(0xb3962995, 0x1a2faf09), TOBN(0x2fa8a580, 0x7c25612e), + TOBN(0x30ae04da, 0x7cf56490), TOBN(0x75662908, 0x0eea3961)}}, + {{TOBN(0x3609f5c5, 0x3d080847), TOBN(0xcb081d39, 0x5241d4f6), + TOBN(0xb4fb3810, 0x77961a63), TOBN(0xc20c5984, 0x2abb66fc)}, + {TOBN(0x3d40aa7c, 0xf902f245), TOBN(0x9cb12736, 0x4e536b1e), + TOBN(0x5eda24da, 0x99b3134f), TOBN(0xafbd9c69, 0x5cd011af)}}, + {{TOBN(0x9a16e30a, 0xc7088c7d), TOBN(0x5ab65710, 0x3207389f), + TOBN(0x1b09547f, 0xe7407a53), TOBN(0x2322f9d7, 0x4fdc6eab)}, + {TOBN(0xc0f2f22d, 0x7430de4d), TOBN(0x19382696, 0xe68ca9a9), + TOBN(0x17f1eff1, 0x918e5868), TOBN(0xe3b5b635, 0x586f4204)}}, + {{TOBN(0x146ef980, 0x3fbc4341), TOBN(0x359f2c80, 0x5b5eed4e), + TOBN(0x9f35744e, 0x7482e41d), TOBN(0x9a9ac3ec, 0xf3b224c2)}, + {TOBN(0x9161a6fe, 0x91fc50ae), TOBN(0x89ccc66b, 0xc613fa7c), + TOBN(0x89268b14, 0xc732f15a), TOBN(0x7cd6f4e2, 0xb467ed03)}}, + {{TOBN(0xfbf79869, 0xce56b40e), TOBN(0xf93e094c, 0xc02dde98), + TOBN(0xefe0c3a8, 0xedee2cd7), TOBN(0x90f3ffc0, 0xb268fd42)}, + {TOBN(0x81a7fd56, 0x08241aed), TOBN(0x95ab7ad8, 0x00b1afe8), + TOBN(0x40127056, 0x3e310d52), TOBN(0xd3ffdeb1, 0x09d9fc43)}}, + {{TOBN(0xc8f85c91, 0xd11a8594), TOBN(0x2e74d258, 0x31cf6db8), + TOBN(0x829c7ca3, 0x02b5dfd0), TOBN(0xe389cfbe, 0x69143c86)}, + {TOBN(0xd01b6405, 0x941768d8), TOBN(0x45103995, 0x03bf825d), + TOBN(0xcc4ee166, 0x56cd17e2), TOBN(0xbea3c283, 0xba037e79)}}, + {{TOBN(0x4e1ac06e, 0xd9a47520), TOBN(0xfbfe18aa, 0xaf852404), + TOBN(0x5615f8e2, 0x8087648a), TOBN(0x7301e47e, 0xb9d150d9)}, + {TOBN(0x79f9f9dd, 0xb299b977), TOBN(0x76697a7b, 0xa5b78314), + TOBN(0x10d67468, 0x7d7c90e7), TOBN(0x7afffe03, 0x937210b5)}}, + {{TOBN(0x5aef3e4b, 0x28c22cee), TOBN(0xefb0ecd8, 0x09fd55ae), + TOBN(0x4cea7132, 0x0d2a5d6a), TOBN(0x9cfb5fa1, 0x01db6357)}, + {TOBN(0x395e0b57, 0xf36e1ac5), TOBN(0x008fa9ad, 0x36cafb7d), + TOBN(0x8f6cdf70, 0x5308c4db), TOBN(0x51527a37, 0x95ed2477)}}, + {{TOBN(0xba0dee30, 0x5bd21311), TOBN(0x6ed41b22, 0x909c90d7), + TOBN(0xc5f6b758, 0x7c8696d3), TOBN(0x0db8eaa8, 0x3ce83a80)}, + {TOBN(0xd297fe37, 0xb24b4b6f), TOBN(0xfe58afe8, 0x522d1f0d), + TOBN(0x97358736, 0x8c98dbd9), TOBN(0x6bc226ca, 0x9454a527)}}, + {{TOBN(0xa12b384e, 0xce53c2d0), TOBN(0x779d897d, 0x5e4606da), + TOBN(0xa53e47b0, 0x73ec12b0), TOBN(0x462dbbba, 0x5756f1ad)}, + {TOBN(0x69fe09f2, 0xcafe37b6), TOBN(0x273d1ebf, 0xecce2e17), + TOBN(0x8ac1d538, 0x3cf607fd), TOBN(0x8035f7ff, 0x12e10c25)}}}, + {{{TOBN(0x854d34c7, 0x7e6c5520), TOBN(0xc27df9ef, 0xdcb9ea58), + TOBN(0x405f2369, 0xd686666d), TOBN(0x29d1febf, 0x0417aa85)}, + {TOBN(0x9846819e, 0x93470afe), TOBN(0x3e6a9669, 0xe2a27f9e), + TOBN(0x24d008a2, 0xe31e6504), TOBN(0xdba7cecf, 0x9cb7680a)}}, + {{TOBN(0xecaff541, 0x338d6e43), TOBN(0x56f7dd73, 0x4541d5cc), + TOBN(0xb5d426de, 0x96bc88ca), TOBN(0x48d94f6b, 0x9ed3a2c3)}, + {TOBN(0x6354a3bb, 0x2ef8279c), TOBN(0xd575465b, 0x0b1867f2), + TOBN(0xef99b0ff, 0x95225151), TOBN(0xf3e19d88, 0xf94500d8)}}, + {{TOBN(0x92a83268, 0xe32dd620), TOBN(0x913ec99f, 0x627849a2), + TOBN(0xedd8fdfa, 0x2c378882), TOBN(0xaf96f33e, 0xee6f8cfe)}, + {TOBN(0xc06737e5, 0xdc3fa8a5), TOBN(0x236bb531, 0xb0b03a1d), + TOBN(0x33e59f29, 0x89f037b0), TOBN(0x13f9b5a7, 0xd9a12a53)}}, + {{TOBN(0x0d0df6ce, 0x51efb310), TOBN(0xcb5b2eb4, 0x958df5be), + TOBN(0xd6459e29, 0x36158e59), TOBN(0x82aae2b9, 0x1466e336)}, + {TOBN(0xfb658a39, 0x411aa636), TOBN(0x7152ecc5, 0xd4c0a933), + TOBN(0xf10c758a, 0x49f026b7), TOBN(0xf4837f97, 0xcb09311f)}}, + {{TOBN(0xddfb02c4, 0xc753c45f), TOBN(0x18ca81b6, 0xf9c840fe), + TOBN(0x846fd09a, 0xb0f8a3e6), TOBN(0xb1162add, 0xe7733dbc)}, + {TOBN(0x7070ad20, 0x236e3ab6), TOBN(0xf88cdaf5, 0xb2a56326), + TOBN(0x05fc8719, 0x997cbc7a), TOBN(0x442cd452, 0x4b665272)}}, + {{TOBN(0x7807f364, 0xb71698f5), TOBN(0x6ba418d2, 0x9f7b605e), + TOBN(0xfd20b00f, 0xa03b2cbb), TOBN(0x883eca37, 0xda54386f)}, + {TOBN(0xff0be43f, 0xf3437f24), TOBN(0xe910b432, 0xa48bb33c), + TOBN(0x4963a128, 0x329df765), TOBN(0xac1dd556, 0xbe2fe6f7)}}, + {{TOBN(0x557610f9, 0x24a0a3fc), TOBN(0x38e17bf4, 0xe881c3f9), + TOBN(0x6ba84faf, 0xed0dac99), TOBN(0xd4a222c3, 0x59eeb918)}, + {TOBN(0xc79c1dbe, 0x13f542b6), TOBN(0x1fc65e0d, 0xe425d457), + TOBN(0xeffb754f, 0x1debb779), TOBN(0x638d8fd0, 0x9e08af60)}}, + {{TOBN(0x994f523a, 0x626332d5), TOBN(0x7bc38833, 0x5561bb44), + TOBN(0x005ed4b0, 0x3d845ea2), TOBN(0xd39d3ee1, 0xc2a1f08a)}, + {TOBN(0x6561fdd3, 0xe7676b0d), TOBN(0x620e35ff, 0xfb706017), + TOBN(0x36ce424f, 0xf264f9a8), TOBN(0xc4c3419f, 0xda2681f7)}}, + {{TOBN(0xfb6afd2f, 0x69beb6e8), TOBN(0x3a50b993, 0x6d700d03), + TOBN(0xc840b2ad, 0x0c83a14f), TOBN(0x573207be, 0x54085bef)}, + {TOBN(0x5af882e3, 0x09fe7e5b), TOBN(0x957678a4, 0x3b40a7e1), + TOBN(0x172d4bdd, 0x543056e2), TOBN(0x9c1b26b4, 0x0df13c0a)}}, + {{TOBN(0x1c30861c, 0xf405ff06), TOBN(0xebac86bd, 0x486e828b), + TOBN(0xe791a971, 0x636933fc), TOBN(0x50e7c2be, 0x7aeee947)}, + {TOBN(0xc3d4a095, 0xfa90d767), TOBN(0xae60eb7b, 0xe670ab7b), + TOBN(0x17633a64, 0x397b056d), TOBN(0x93a21f33, 0x105012aa)}}, + {{TOBN(0x663c370b, 0xabb88643), TOBN(0x91df36d7, 0x22e21599), + TOBN(0x183ba835, 0x8b761671), TOBN(0x381eea1d, 0x728f3bf1)}, + {TOBN(0xb9b2f1ba, 0x39966e6c), TOBN(0x7c464a28, 0xe7295492), + TOBN(0x0fd5f70a, 0x09b26b7f), TOBN(0xa9aba1f9, 0xfbe009df)}}, + {{TOBN(0x857c1f22, 0x369b87ad), TOBN(0x3c00e5d9, 0x32fca556), + TOBN(0x1ad74cab, 0x90b06466), TOBN(0xa7112386, 0x550faaf2)}, + {TOBN(0x7435e198, 0x6d9bd5f5), TOBN(0x2dcc7e38, 0x59c3463f), + TOBN(0xdc7df748, 0xca7bd4b2), TOBN(0x13cd4c08, 0x9dec2f31)}}, + {{TOBN(0x0d3b5df8, 0xe3237710), TOBN(0x0dadb26e, 0xcbd2f7b0), + TOBN(0x9f5966ab, 0xe4aa082b), TOBN(0x666ec8de, 0x350e966e)}, + {TOBN(0x1bfd1ed5, 0xee524216), TOBN(0xcd93c59b, 0x41dab0b6), + TOBN(0x658a8435, 0xd186d6ba), TOBN(0x1b7d34d2, 0x159d1195)}}, + {{TOBN(0x5936e460, 0x22caf46b), TOBN(0x6a45dd8f, 0x9a96fe4f), + TOBN(0xf7925434, 0xb98f474e), TOBN(0x41410412, 0x0053ef15)}, + {TOBN(0x71cf8d12, 0x41de97bf), TOBN(0xb8547b61, 0xbd80bef4), + TOBN(0xb47d3970, 0xc4db0037), TOBN(0xf1bcd328, 0xfef20dff)}}, + {{TOBN(0x31a92e09, 0x10caad67), TOBN(0x1f591960, 0x5531a1e1), + TOBN(0x3bb852e0, 0x5f4fc840), TOBN(0x63e297ca, 0x93a72c6c)}, + {TOBN(0x3c2b0b2e, 0x49abad67), TOBN(0x6ec405fc, 0xed3db0d9), + TOBN(0xdc14a530, 0x7fef1d40), TOBN(0xccd19846, 0x280896fc)}}, + {{TOBN(0x00f83176, 0x9bb81648), TOBN(0xd69eb485, 0x653120d0), + TOBN(0xd17d75f4, 0x4ccabc62), TOBN(0x34a07f82, 0xb749fcb1)}, + {TOBN(0x2c3af787, 0xbbfb5554), TOBN(0xb06ed4d0, 0x62e283f8), + TOBN(0x5722889f, 0xa19213a0), TOBN(0x162b085e, 0xdcf3c7b4)}}, + {{TOBN(0xbcaecb31, 0xe0dd3eca), TOBN(0xc6237fbc, 0xe52f13a5), + TOBN(0xcc2b6b03, 0x27bac297), TOBN(0x2ae1cac5, 0xb917f54a)}, + {TOBN(0x474807d4, 0x7845ae4f), TOBN(0xfec7dd92, 0xce5972e0), + TOBN(0xc3bd2541, 0x1d7915bb), TOBN(0x66f85dc4, 0xd94907ca)}}, + {{TOBN(0xd981b888, 0xbdbcf0ca), TOBN(0xd75f5da6, 0xdf279e9f), + TOBN(0x128bbf24, 0x7054e934), TOBN(0x3c6ff6e5, 0x81db134b)}, + {TOBN(0x795b7cf4, 0x047d26e4), TOBN(0xf370f7b8, 0x5049ec37), + TOBN(0xc6712d4d, 0xced945af), TOBN(0xdf30b5ec, 0x095642bc)}}, + {{TOBN(0x9b034c62, 0x4896246e), TOBN(0x5652c016, 0xee90bbd1), + TOBN(0xeb38636f, 0x87fedb73), TOBN(0x5e32f847, 0x0135a613)}, + {TOBN(0x0703b312, 0xcf933c83), TOBN(0xd05bb76e, 0x1a7f47e6), + TOBN(0x825e4f0c, 0x949c2415), TOBN(0x569e5622, 0x7250d6f8)}}, + {{TOBN(0xbbe9eb3a, 0x6568013e), TOBN(0x8dbd203f, 0x22f243fc), + TOBN(0x9dbd7694, 0xb342734a), TOBN(0x8f6d12f8, 0x46afa984)}, + {TOBN(0xb98610a2, 0xc9eade29), TOBN(0xbab4f323, 0x47dd0f18), + TOBN(0x5779737b, 0x671c0d46), TOBN(0x10b6a7c6, 0xd3e0a42a)}}, + {{TOBN(0xfb19ddf3, 0x3035b41c), TOBN(0xd336343f, 0x99c45895), + TOBN(0x61fe4938, 0x54c857e5), TOBN(0xc4d506be, 0xae4e57d5)}, + {TOBN(0x3cd8c8cb, 0xbbc33f75), TOBN(0x7281f08a, 0x9262c77d), + TOBN(0x083f4ea6, 0xf11a2823), TOBN(0x8895041e, 0x9fba2e33)}}, + {{TOBN(0xfcdfea49, 0x9c438edf), TOBN(0x7678dcc3, 0x91edba44), + TOBN(0xf07b3b87, 0xe2ba50f0), TOBN(0xc13888ef, 0x43948c1b)}, + {TOBN(0xc2135ad4, 0x1140af42), TOBN(0x8e5104f3, 0x926ed1a7), + TOBN(0xf24430cb, 0x88f6695f), TOBN(0x0ce0637b, 0x6d73c120)}}, + {{TOBN(0xb2db01e6, 0xfe631e8f), TOBN(0x1c5563d7, 0xd7bdd24b), + TOBN(0x8daea3ba, 0x369ad44f), TOBN(0x000c81b6, 0x8187a9f9)}, + {TOBN(0x5f48a951, 0xaae1fd9a), TOBN(0xe35626c7, 0x8d5aed8a), + TOBN(0x20952763, 0x0498c622), TOBN(0x76d17634, 0x773aa504)}}, + {{TOBN(0x36d90dda, 0xeb300f7a), TOBN(0x9dcf7dfc, 0xedb5e801), + TOBN(0x645cb268, 0x74d5244c), TOBN(0xa127ee79, 0x348e3aa2)}, + {TOBN(0x488acc53, 0x575f1dbb), TOBN(0x95037e85, 0x80e6161e), + TOBN(0x57e59283, 0x292650d0), TOBN(0xabe67d99, 0x14938216)}}, + {{TOBN(0x3c7f944b, 0x3f8e1065), TOBN(0xed908cb6, 0x330e8924), + TOBN(0x08ee8fd5, 0x6f530136), TOBN(0x2227b7d5, 0xd7ffc169)}, + {TOBN(0x4f55c893, 0xb5cd6dd5), TOBN(0x82225e11, 0xa62796e8), + TOBN(0x5c6cead1, 0xcb18e12c), TOBN(0x4381ae0c, 0x84f5a51a)}}, + {{TOBN(0x345913d3, 0x7fafa4c8), TOBN(0x3d918082, 0x0491aac0), + TOBN(0x9347871f, 0x3e69264c), TOBN(0xbea9dd3c, 0xb4f4f0cd)}, + {TOBN(0xbda5d067, 0x3eadd3e7), TOBN(0x0033c1b8, 0x0573bcd8), + TOBN(0x25589379, 0x5da2486c), TOBN(0xcb89ee5b, 0x86abbee7)}}, + {{TOBN(0x8fe0a8f3, 0x22532e5d), TOBN(0xb6410ff0, 0x727dfc4c), + TOBN(0x619b9d58, 0x226726db), TOBN(0x5ec25669, 0x7a2b2dc7)}, + {TOBN(0xaf4d2e06, 0x4c3beb01), TOBN(0x852123d0, 0x7acea556), + TOBN(0x0e9470fa, 0xf783487a), TOBN(0x75a7ea04, 0x5664b3eb)}}, + {{TOBN(0x4ad78f35, 0x6798e4ba), TOBN(0x9214e6e5, 0xc7d0e091), + TOBN(0xc420b488, 0xb1290403), TOBN(0x64049e0a, 0xfc295749)}, + {TOBN(0x03ef5af1, 0x3ae9841f), TOBN(0xdbe4ca19, 0xb0b662a6), + TOBN(0x46845c5f, 0xfa453458), TOBN(0xf8dabf19, 0x10b66722)}}, + {{TOBN(0xb650f0aa, 0xcce2793b), TOBN(0x71db851e, 0xc5ec47c1), + TOBN(0x3eb78f3e, 0x3b234fa9), TOBN(0xb0c60f35, 0xfc0106ce)}, + {TOBN(0x05427121, 0x774eadbd), TOBN(0x25367faf, 0xce323863), + TOBN(0x7541b5c9, 0xcd086976), TOBN(0x4ff069e2, 0xdc507ad1)}}, + {{TOBN(0x74145256, 0x8776e667), TOBN(0x6e76142c, 0xb23c6bb5), + TOBN(0xdbf30712, 0x1b3a8a87), TOBN(0x60e7363e, 0x98450836)}, + {TOBN(0x5741450e, 0xb7366d80), TOBN(0xe4ee14ca, 0x4837dbdf), + TOBN(0xa765eb9b, 0x69d4316f), TOBN(0x04548dca, 0x8ef43825)}}, + {{TOBN(0x9c9f4e4c, 0x5ae888eb), TOBN(0x733abb51, 0x56e9ac99), + TOBN(0xdaad3c20, 0xba6ac029), TOBN(0x9b8dd3d3, 0x2ba3e38e)}, + {TOBN(0xa9bb4c92, 0x0bc5d11a), TOBN(0xf20127a7, 0x9c5f88a3), + TOBN(0x4f52b06e, 0x161d3cb8), TOBN(0x26c1ff09, 0x6afaf0a6)}}, + {{TOBN(0x32670d2f, 0x7189e71f), TOBN(0xc6438748, 0x5ecf91e7), + TOBN(0x15758e57, 0xdb757a21), TOBN(0x427d09f8, 0x290a9ce5)}, + {TOBN(0x846a308f, 0x38384a7a), TOBN(0xaac3acb4, 0xb0732b99), + TOBN(0x9e941009, 0x17845819), TOBN(0x95cba111, 0xa7ce5e03)}}, + {{TOBN(0x6f3d4f7f, 0xb00009c4), TOBN(0xb8396c27, 0x8ff28b5f), + TOBN(0xb1a9ae43, 0x1c97975d), TOBN(0x9d7ba8af, 0xe5d9fed5)}, + {TOBN(0x338cf09f, 0x34f485b6), TOBN(0xbc0ddacc, 0x64122516), + TOBN(0xa450da12, 0x05d471fe), TOBN(0x4c3a6250, 0x628dd8c9)}}, + {{TOBN(0x69c7d103, 0xd1295837), TOBN(0xa2893e50, 0x3807eb2f), + TOBN(0xd6e1e1de, 0xbdb41491), TOBN(0xc630745b, 0x5e138235)}, + {TOBN(0xc892109e, 0x48661ae1), TOBN(0x8d17e7eb, 0xea2b2674), + TOBN(0x00ec0f87, 0xc328d6b5), TOBN(0x6d858645, 0xf079ff9e)}}, + {{TOBN(0x6cdf243e, 0x19115ead), TOBN(0x1ce1393e, 0x4bac4fcf), + TOBN(0x2c960ed0, 0x9c29f25b), TOBN(0x59be4d8e, 0x9d388a05)}, + {TOBN(0x0d46e06c, 0xd0def72b), TOBN(0xb923db5d, 0xe0342748), + TOBN(0xf7d3aacd, 0x936d4a3d), TOBN(0x558519cc, 0x0b0b099e)}}, + {{TOBN(0x3ea8ebf8, 0x827097ef), TOBN(0x259353db, 0xd054f55d), + TOBN(0x84c89abc, 0x6d2ed089), TOBN(0x5c548b69, 0x8e096a7c)}, + {TOBN(0xd587f616, 0x994b995d), TOBN(0x4d1531f6, 0xa5845601), + TOBN(0x792ab31e, 0x451fd9f0), TOBN(0xc8b57bb2, 0x65adf6ca)}}, + {{TOBN(0x68440fcb, 0x1cd5ad73), TOBN(0xb9c860e6, 0x6144da4f), + TOBN(0x2ab286aa, 0x8462beb8), TOBN(0xcc6b8fff, 0xef46797f)}, + {TOBN(0xac820da4, 0x20c8a471), TOBN(0x69ae05a1, 0x77ff7faf), + TOBN(0xb9163f39, 0xbfb5da77), TOBN(0xbd03e590, 0x2c73ab7a)}}, + {{TOBN(0x7e862b5e, 0xb2940d9e), TOBN(0x3c663d86, 0x4b9af564), + TOBN(0xd8309031, 0xbde3033d), TOBN(0x298231b2, 0xd42c5bc6)}, + {TOBN(0x42090d2c, 0x552ad093), TOBN(0xa4799d1c, 0xff854695), + TOBN(0x0a88b5d6, 0xd31f0d00), TOBN(0xf8b40825, 0xa2f26b46)}}, + {{TOBN(0xec29b1ed, 0xf1bd7218), TOBN(0xd491c53b, 0x4b24c86e), + TOBN(0xd2fe588f, 0x3395ea65), TOBN(0x6f3764f7, 0x4456ef15)}, + {TOBN(0xdb43116d, 0xcdc34800), TOBN(0xcdbcd456, 0xc1e33955), + TOBN(0xefdb5540, 0x74ab286b), TOBN(0x948c7a51, 0xd18c5d7c)}}, + {{TOBN(0xeb81aa37, 0x7378058e), TOBN(0x41c746a1, 0x04411154), + TOBN(0xa10c73bc, 0xfb828ac7), TOBN(0x6439be91, 0x9d972b29)}, + {TOBN(0x4bf3b4b0, 0x43a2fbad), TOBN(0x39e6dadf, 0x82b5e840), + TOBN(0x4f716408, 0x6397bd4c), TOBN(0x0f7de568, 0x7f1eeccb)}}, + {{TOBN(0x5865c5a1, 0xd2ffbfc1), TOBN(0xf74211fa, 0x4ccb6451), + TOBN(0x66368a88, 0xc0b32558), TOBN(0x5b539dc2, 0x9ad7812e)}, + {TOBN(0x579483d0, 0x2f3af6f6), TOBN(0x52132078, 0x99934ece), + TOBN(0x50b9650f, 0xdcc9e983), TOBN(0xca989ec9, 0xaee42b8a)}}, + {{TOBN(0x6a44c829, 0xd6f62f99), TOBN(0x8f06a309, 0x4c2a7c0c), + TOBN(0x4ea2b3a0, 0x98a0cb0a), TOBN(0x5c547b70, 0xbeee8364)}, + {TOBN(0x461d40e1, 0x682afe11), TOBN(0x9e0fc77a, 0x7b41c0a8), + TOBN(0x79e4aefd, 0xe20d5d36), TOBN(0x2916e520, 0x32dd9f63)}}, + {{TOBN(0xf59e52e8, 0x3f883faf), TOBN(0x396f9639, 0x2b868d35), + TOBN(0xc902a9df, 0x4ca19881), TOBN(0x0fc96822, 0xdb2401a6)}, + {TOBN(0x41237587, 0x66f1c68d), TOBN(0x10fc6de3, 0xfb476c0d), + TOBN(0xf8b6b579, 0x841f5d90), TOBN(0x2ba8446c, 0xfa24f44a)}}, + {{TOBN(0xa237b920, 0xef4a9975), TOBN(0x60bb6004, 0x2330435f), + TOBN(0xd6f4ab5a, 0xcfb7e7b5), TOBN(0xb2ac5097, 0x83435391)}, + {TOBN(0xf036ee2f, 0xb0d1ea67), TOBN(0xae779a6a, 0x74c56230), + TOBN(0x59bff8c8, 0xab838ae6), TOBN(0xcd83ca99, 0x9b38e6f0)}}, + {{TOBN(0xbb27bef5, 0xe33deed3), TOBN(0xe6356f6f, 0x001892a8), + TOBN(0xbf3be6cc, 0x7adfbd3e), TOBN(0xaecbc81c, 0x33d1ac9d)}, + {TOBN(0xe4feb909, 0xe6e861dc), TOBN(0x90a247a4, 0x53f5f801), + TOBN(0x01c50acb, 0x27346e57), TOBN(0xce29242e, 0x461acc1b)}}, + {{TOBN(0x04dd214a, 0x2f998a91), TOBN(0x271ee9b1, 0xd4baf27b), + TOBN(0x7e3027d1, 0xe8c26722), TOBN(0x21d1645c, 0x1820dce5)}, + {TOBN(0x086f242c, 0x7501779c), TOBN(0xf0061407, 0xfa0e8009), + TOBN(0xf23ce477, 0x60187129), TOBN(0x05bbdedb, 0x0fde9bd0)}}, + {{TOBN(0x682f4832, 0x25d98473), TOBN(0xf207fe85, 0x5c658427), + TOBN(0xb6fdd7ba, 0x4166ffa1), TOBN(0x0c314056, 0x9eed799d)}, + {TOBN(0x0db8048f, 0x4107e28f), TOBN(0x74ed3871, 0x41216840), + TOBN(0x74489f8f, 0x56a3c06e), TOBN(0x1e1c005b, 0x12777134)}}, + {{TOBN(0xdb332a73, 0xf37ec3c3), TOBN(0xc65259bd, 0xdd59eba0), + TOBN(0x2291709c, 0xdb4d3257), TOBN(0x9a793b25, 0xbd389390)}, + {TOBN(0xf39fe34b, 0xe43756f0), TOBN(0x2f76bdce, 0x9afb56c9), + TOBN(0x9f37867a, 0x61208b27), TOBN(0xea1d4307, 0x089972c3)}}, + {{TOBN(0x8c595330, 0x8bdf623a), TOBN(0x5f5accda, 0x8441fb7d), + TOBN(0xfafa9418, 0x32ddfd95), TOBN(0x6ad40c5a, 0x0fde9be7)}, + {TOBN(0x43faba89, 0xaeca8709), TOBN(0xc64a7cf1, 0x2c248a9d), + TOBN(0x16620252, 0x72637a76), TOBN(0xaee1c791, 0x22b8d1bb)}}, + {{TOBN(0xf0f798fd, 0x21a843b2), TOBN(0x56e4ed4d, 0x8d005cb1), + TOBN(0x355f7780, 0x1f0d8abe), TOBN(0x197b04cf, 0x34522326)}, + {TOBN(0x41f9b31f, 0xfd42c13f), TOBN(0x5ef7feb2, 0xb40f933d), + TOBN(0x27326f42, 0x5d60bad4), TOBN(0x027ecdb2, 0x8c92cf89)}}, + {{TOBN(0x04aae4d1, 0x4e3352fe), TOBN(0x08414d2f, 0x73591b90), + TOBN(0x5ed6124e, 0xb7da7d60), TOBN(0xb985b931, 0x4d13d4ec)}, + {TOBN(0xa592d3ab, 0x96bf36f9), TOBN(0x012dbed5, 0xbbdf51df), + TOBN(0xa57963c0, 0xdf6c177d), TOBN(0x010ec869, 0x87ca29cf)}}, + {{TOBN(0xba1700f6, 0xbf926dff), TOBN(0x7c9fdbd1, 0xf4bf6bc2), + TOBN(0xdc18dc8f, 0x64da11f5), TOBN(0xa6074b7a, 0xd938ae75)}, + {TOBN(0x14270066, 0xe84f44a4), TOBN(0x99998d38, 0xd27b954e), + TOBN(0xc1be8ab2, 0xb4f38e9a), TOBN(0x8bb55bbf, 0x15c01016)}}, + {{TOBN(0xf73472b4, 0x0ea2ab30), TOBN(0xd365a340, 0xf73d68dd), + TOBN(0xc01a7168, 0x19c2e1eb), TOBN(0x32f49e37, 0x34061719)}, + {TOBN(0xb73c57f1, 0x01d8b4d6), TOBN(0x03c8423c, 0x26b47700), + TOBN(0x321d0bc8, 0xa4d8826a), TOBN(0x6004213c, 0x4bc0e638)}}, + {{TOBN(0xf78c64a1, 0xc1c06681), TOBN(0x16e0a16f, 0xef018e50), + TOBN(0x31cbdf91, 0xdb42b2b3), TOBN(0xf8f4ffce, 0xe0d36f58)}, + {TOBN(0xcdcc71cd, 0x4cc5e3e0), TOBN(0xd55c7cfa, 0xa129e3e0), + TOBN(0xccdb6ba0, 0x0fb2cbf1), TOBN(0x6aba0005, 0xc4bce3cb)}}, + {{TOBN(0x501cdb30, 0xd232cfc4), TOBN(0x9ddcf12e, 0xd58a3cef), + TOBN(0x02d2cf9c, 0x87e09149), TOBN(0xdc5d7ec7, 0x2c976257)}, + {TOBN(0x6447986e, 0x0b50d7dd), TOBN(0x88fdbaf7, 0x807f112a), + TOBN(0x58c9822a, 0xb00ae9f6), TOBN(0x6abfb950, 0x6d3d27e0)}}, + {{TOBN(0xd0a74487, 0x8a429f4f), TOBN(0x0649712b, 0xdb516609), + TOBN(0xb826ba57, 0xe769b5df), TOBN(0x82335df2, 0x1fc7aaf2)}, + {TOBN(0x2389f067, 0x5c93d995), TOBN(0x59ac367a, 0x68677be6), + TOBN(0xa77985ff, 0x21d9951b), TOBN(0x038956fb, 0x85011cce)}}, + {{TOBN(0x608e48cb, 0xbb734e37), TOBN(0xc08c0bf2, 0x2be5b26f), + TOBN(0x17bbdd3b, 0xf9b1a0d9), TOBN(0xeac7d898, 0x10483319)}, + {TOBN(0xc95c4baf, 0xbc1a6dea), TOBN(0xfdd0e2bf, 0x172aafdb), + TOBN(0x40373cbc, 0x8235c41a), TOBN(0x14303f21, 0xfb6f41d5)}}, + {{TOBN(0xba063621, 0x0408f237), TOBN(0xcad3b09a, 0xecd2d1ed), + TOBN(0x4667855a, 0x52abb6a2), TOBN(0xba9157dc, 0xaa8b417b)}, + {TOBN(0xfe7f3507, 0x4f013efb), TOBN(0x1b112c4b, 0xaa38c4a2), + TOBN(0xa1406a60, 0x9ba64345), TOBN(0xe53cba33, 0x6993c80b)}}, + {{TOBN(0x45466063, 0xded40d23), TOBN(0x3d5f1f4d, 0x54908e25), + TOBN(0x9ebefe62, 0x403c3c31), TOBN(0x274ea0b5, 0x0672a624)}, + {TOBN(0xff818d99, 0x451d1b71), TOBN(0x80e82643, 0x8f79cf79), + TOBN(0xa165df13, 0x73ce37f5), TOBN(0xa744ef4f, 0xfe3a21fd)}}, + {{TOBN(0x73f1e7f5, 0xcf551396), TOBN(0xc616898e, 0x868c676b), + TOBN(0x671c28c7, 0x8c442c36), TOBN(0xcfe5e558, 0x5e0a317d)}, + {TOBN(0x1242d818, 0x7051f476), TOBN(0x56fad2a6, 0x14f03442), + TOBN(0x262068bc, 0x0a44d0f6), TOBN(0xdfa2cd6e, 0xce6edf4e)}}, + {{TOBN(0x0f43813a, 0xd15d1517), TOBN(0x61214cb2, 0x377d44f5), + TOBN(0xd399aa29, 0xc639b35f), TOBN(0x42136d71, 0x54c51c19)}, + {TOBN(0x9774711b, 0x08417221), TOBN(0x0a5546b3, 0x52545a57), + TOBN(0x80624c41, 0x1150582d), TOBN(0x9ec5c418, 0xfbc555bc)}}, + {{TOBN(0x2c87dcad, 0x771849f1), TOBN(0xb0c932c5, 0x01d7bf6f), + TOBN(0x6aa5cd3e, 0x89116eb2), TOBN(0xd378c25a, 0x51ca7bd3)}, + {TOBN(0xc612a0da, 0x9e6e3e31), TOBN(0x0417a54d, 0xb68ad5d0), + TOBN(0x00451e4a, 0x22c6edb8), TOBN(0x9fbfe019, 0xb42827ce)}}, + {{TOBN(0x2fa92505, 0xba9384a2), TOBN(0x21b8596e, 0x64ad69c1), + TOBN(0x8f4fcc49, 0x983b35a6), TOBN(0xde093760, 0x72754672)}, + {TOBN(0x2f14ccc8, 0xf7bffe6d), TOBN(0x27566bff, 0x5d94263d), + TOBN(0xb5b4e9c6, 0x2df3ec30), TOBN(0x94f1d7d5, 0x3e6ea6ba)}}, + {{TOBN(0x97b7851a, 0xaaca5e9b), TOBN(0x518aa521, 0x56713b97), + TOBN(0x3357e8c7, 0x150a61f6), TOBN(0x7842e7e2, 0xec2c2b69)}, + {TOBN(0x8dffaf65, 0x6868a548), TOBN(0xd963bd82, 0xe068fc81), + TOBN(0x64da5c8b, 0x65917733), TOBN(0x927090ff, 0x7b247328)}}}, + {{{TOBN(0x214bc9a7, 0xd298c241), TOBN(0xe3b697ba, 0x56807cfd), + TOBN(0xef1c7802, 0x4564eadb), TOBN(0xdde8cdcf, 0xb48149c5)}, + {TOBN(0x946bf0a7, 0x5a4d2604), TOBN(0x27154d7f, 0x6c1538af), + TOBN(0x95cc9230, 0xde5b1fcc), TOBN(0xd88519e9, 0x66864f82)}}, + {{TOBN(0xb828dd1a, 0x7cb1282c), TOBN(0xa08d7626, 0xbe46973a), + TOBN(0x6baf8d40, 0xe708d6b2), TOBN(0x72571fa1, 0x4daeb3f3)}, + {TOBN(0x85b1732f, 0xf22dfd98), TOBN(0x87ab01a7, 0x0087108d), + TOBN(0xaaaafea8, 0x5988207a), TOBN(0xccc832f8, 0x69f00755)}}, + {{TOBN(0x964d950e, 0x36ff3bf0), TOBN(0x8ad20f6f, 0xf0b34638), + TOBN(0x4d9177b3, 0xb5d7585f), TOBN(0xcf839760, 0xef3f019f)}, + {TOBN(0x582fc5b3, 0x8288c545), TOBN(0x2f8e4e9b, 0x13116bd1), + TOBN(0xf91e1b2f, 0x332120ef), TOBN(0xcf568724, 0x2a17dd23)}}, + {{TOBN(0x488f1185, 0xca8d9d1a), TOBN(0xadf2c77d, 0xd987ded2), + TOBN(0x5f3039f0, 0x60c46124), TOBN(0xe5d70b75, 0x71e095f4)}, + {TOBN(0x82d58650, 0x6260e70f), TOBN(0x39d75ea7, 0xf750d105), + TOBN(0x8cf3d0b1, 0x75bac364), TOBN(0xf3a7564d, 0x21d01329)}}, + {{TOBN(0x182f04cd, 0x2f52d2a7), TOBN(0x4fde149a, 0xe2df565a), + TOBN(0xb80c5eec, 0xa79fb2f7), TOBN(0xab491d7b, 0x22ddc897)}, + {TOBN(0x99d76c18, 0xc6312c7f), TOBN(0xca0d5f3d, 0x6aa41a57), + TOBN(0x71207325, 0xd15363a0), TOBN(0xe82aa265, 0xbeb252c2)}}, + {{TOBN(0x94ab4700, 0xec3128c2), TOBN(0x6c76d862, 0x8e383f49), + TOBN(0xdc36b150, 0xc03024eb), TOBN(0xfb439477, 0x53daac69)}, + {TOBN(0xfc68764a, 0x8dc79623), TOBN(0x5b86995d, 0xb440fbb2), + TOBN(0xd66879bf, 0xccc5ee0d), TOBN(0x05228942, 0x95aa8bd3)}}, + {{TOBN(0xb51a40a5, 0x1e6a75c1), TOBN(0x24327c76, 0x0ea7d817), + TOBN(0x06630182, 0x07774597), TOBN(0xd6fdbec3, 0x97fa7164)}, + {TOBN(0x20c99dfb, 0x13c90f48), TOBN(0xd6ac5273, 0x686ef263), + TOBN(0xc6a50bdc, 0xfef64eeb), TOBN(0xcd87b281, 0x86fdfc32)}}, + {{TOBN(0xb24aa43e, 0x3fcd3efc), TOBN(0xdd26c034, 0xb8088e9a), + TOBN(0xa5ef4dc9, 0xbd3d46ea), TOBN(0xa2f99d58, 0x8a4c6a6f)}, + {TOBN(0xddabd355, 0x2f1da46c), TOBN(0x72c3f8ce, 0x1afacdd1), + TOBN(0xd90c4eee, 0x92d40578), TOBN(0xd28bb41f, 0xca623b94)}}, + {{TOBN(0x50fc0711, 0x745edc11), TOBN(0x9dd9ad7d, 0x3dc87558), + TOBN(0xce6931fb, 0xb49d1e64), TOBN(0x6c77a0a2, 0xc98bd0f9)}, + {TOBN(0x62b9a629, 0x6baf7cb1), TOBN(0xcf065f91, 0xccf72d22), + TOBN(0x7203cce9, 0x79639071), TOBN(0x09ae4885, 0xf9cb732f)}}, + {{TOBN(0x5e7c3bec, 0xee8314f3), TOBN(0x1c068aed, 0xdbea298f), + TOBN(0x08d381f1, 0x7c80acec), TOBN(0x03b56be8, 0xe330495b)}, + {TOBN(0xaeffb8f2, 0x9222882d), TOBN(0x95ff38f6, 0xc4af8bf7), + TOBN(0x50e32d35, 0x1fc57d8c), TOBN(0x6635be52, 0x17b444f0)}}, + {{TOBN(0x04d15276, 0xa5177900), TOBN(0x4e1dbb47, 0xf6858752), + TOBN(0x5b475622, 0xc615796c), TOBN(0xa6fa0387, 0x691867bf)}, + {TOBN(0xed7f5d56, 0x2844c6d0), TOBN(0xc633cf9b, 0x03a2477d), + TOBN(0xf6be5c40, 0x2d3721d6), TOBN(0xaf312eb7, 0xe9fd68e6)}}, + {{TOBN(0x242792d2, 0xe7417ce1), TOBN(0xff42bc71, 0x970ee7f5), + TOBN(0x1ff4dc6d, 0x5c67a41e), TOBN(0x77709b7b, 0x20882a58)}, + {TOBN(0x3554731d, 0xbe217f2c), TOBN(0x2af2a8cd, 0x5bb72177), + TOBN(0x58eee769, 0x591dd059), TOBN(0xbb2930c9, 0x4bba6477)}}, + {{TOBN(0x863ee047, 0x7d930cfc), TOBN(0x4c262ad1, 0x396fd1f4), + TOBN(0xf4765bc8, 0x039af7e1), TOBN(0x2519834b, 0x5ba104f6)}, + {TOBN(0x7cd61b4c, 0xd105f961), TOBN(0xa5415da5, 0xd63bca54), + TOBN(0x778280a0, 0x88a1f17c), TOBN(0xc4968949, 0x2329512c)}}, + {{TOBN(0x174a9126, 0xcecdaa7a), TOBN(0xfc8c7e0e, 0x0b13247b), + TOBN(0x29c110d2, 0x3484c1c4), TOBN(0xf8eb8757, 0x831dfc3b)}, + {TOBN(0x022f0212, 0xc0067452), TOBN(0x3f6f69ee, 0x7b9b926c), + TOBN(0x09032da0, 0xef42daf4), TOBN(0x79f00ade, 0x83f80de4)}}, + {{TOBN(0x6210db71, 0x81236c97), TOBN(0x74f7685b, 0x3ee0781f), + TOBN(0x4df7da7b, 0xa3e41372), TOBN(0x2aae38b1, 0xb1a1553e)}, + {TOBN(0x1688e222, 0xf6dd9d1b), TOBN(0x57695448, 0x5b8b6487), + TOBN(0x478d2127, 0x4b2edeaa), TOBN(0xb2818fa5, 0x1e85956a)}}, + {{TOBN(0x1e6addda, 0xf176f2c0), TOBN(0x01ca4604, 0xe2572658), + TOBN(0x0a404ded, 0x85342ffb), TOBN(0x8cf60f96, 0x441838d6)}, + {TOBN(0x9bbc691c, 0xc9071c4a), TOBN(0xfd588744, 0x34442803), + TOBN(0x97101c85, 0x809c0d81), TOBN(0xa7fb754c, 0x8c456f7f)}}, + {{TOBN(0xc95f3c5c, 0xd51805e1), TOBN(0xab4ccd39, 0xb299dca8), + TOBN(0x3e03d20b, 0x47eaf500), TOBN(0xfa3165c1, 0xd7b80893)}, + {TOBN(0x005e8b54, 0xe160e552), TOBN(0xdc4972ba, 0x9019d11f), + TOBN(0x21a6972e, 0x0c9a4a7a), TOBN(0xa52c258f, 0x37840fd7)}}, + {{TOBN(0xf8559ff4, 0xc1e99d81), TOBN(0x08e1a7d6, 0xa3c617c0), + TOBN(0xb398fd43, 0x248c6ba7), TOBN(0x6ffedd91, 0xd1283794)}, + {TOBN(0x8a6a59d2, 0xd629d208), TOBN(0xa9d141d5, 0x3490530e), + TOBN(0x42f6fc18, 0x38505989), TOBN(0x09bf250d, 0x479d94ee)}}, + {{TOBN(0x223ad3b1, 0xb3822790), TOBN(0x6c5926c0, 0x93b8971c), + TOBN(0x609efc7e, 0x75f7fa62), TOBN(0x45d66a6d, 0x1ec2d989)}, + {TOBN(0x4422d663, 0x987d2792), TOBN(0x4a73caad, 0x3eb31d2b), + TOBN(0xf06c2ac1, 0xa32cb9e6), TOBN(0xd9445c5f, 0x91aeba84)}}, + {{TOBN(0x6af7a1d5, 0xaf71013f), TOBN(0xe68216e5, 0x0bedc946), + TOBN(0xf4cba30b, 0xd27370a0), TOBN(0x7981afbf, 0x870421cc)}, + {TOBN(0x02496a67, 0x9449f0e1), TOBN(0x86cfc4be, 0x0a47edae), + TOBN(0x3073c936, 0xb1feca22), TOBN(0xf5694612, 0x03f8f8fb)}}, + {{TOBN(0xd063b723, 0x901515ea), TOBN(0x4c6c77a5, 0x749cf038), + TOBN(0x6361e360, 0xab9e5059), TOBN(0x596cf171, 0xa76a37c0)}, + {TOBN(0x800f53fa, 0x6530ae7a), TOBN(0x0f5e631e, 0x0792a7a6), + TOBN(0x5cc29c24, 0xefdb81c9), TOBN(0xa269e868, 0x3f9c40ba)}}, + {{TOBN(0xec14f9e1, 0x2cb7191e), TOBN(0x78ea1bd8, 0xe5b08ea6), + TOBN(0x3c65aa9b, 0x46332bb9), TOBN(0x84cc22b3, 0xbf80ce25)}, + {TOBN(0x0098e9e9, 0xd49d5bf1), TOBN(0xcd4ec1c6, 0x19087da4), + TOBN(0x3c9d07c5, 0xaef6e357), TOBN(0x839a0268, 0x9f8f64b8)}}, + {{TOBN(0xc5e9eb62, 0xc6d8607f), TOBN(0x759689f5, 0x6aa995e4), + TOBN(0x70464669, 0xbbb48317), TOBN(0x921474bf, 0xe402417d)}, + {TOBN(0xcabe135b, 0x2a354c8c), TOBN(0xd51e52d2, 0x812fa4b5), + TOBN(0xec741096, 0x53311fe8), TOBN(0x4f774535, 0xb864514b)}}, + {{TOBN(0xbcadd671, 0x5bde48f8), TOBN(0xc9703873, 0x2189bc7d), + TOBN(0x5d45299e, 0xc709ee8a), TOBN(0xd1287ee2, 0x845aaff8)}, + {TOBN(0x7d1f8874, 0xdb1dbf1f), TOBN(0xea46588b, 0x990c88d6), + TOBN(0x60ba649a, 0x84368313), TOBN(0xd5fdcbce, 0x60d543ae)}}, + {{TOBN(0x90b46d43, 0x810d5ab0), TOBN(0x6739d8f9, 0x04d7e5cc), + TOBN(0x021c1a58, 0x0d337c33), TOBN(0x00a61162, 0x68e67c40)}, + {TOBN(0x95ef413b, 0x379f0a1f), TOBN(0xfe126605, 0xe9e2ab95), + TOBN(0x67578b85, 0x2f5f199c), TOBN(0xf5c00329, 0x2cb84913)}}, + {{TOBN(0xf7956430, 0x37577dd8), TOBN(0x83b82af4, 0x29c5fe88), + TOBN(0x9c1bea26, 0xcdbdc132), TOBN(0x589fa086, 0x9c04339e)}, + {TOBN(0x033e9538, 0xb13799df), TOBN(0x85fa8b21, 0xd295d034), + TOBN(0xdf17f73f, 0xbd9ddcca), TOBN(0xf32bd122, 0xddb66334)}}, + {{TOBN(0x55ef88a7, 0x858b044c), TOBN(0x1f0d69c2, 0x5aa9e397), + TOBN(0x55fd9cc3, 0x40d85559), TOBN(0xc774df72, 0x7785ddb2)}, + {TOBN(0x5dcce9f6, 0xd3bd2e1c), TOBN(0xeb30da20, 0xa85dfed0), + TOBN(0x5ed7f5bb, 0xd3ed09c4), TOBN(0x7d42a35c, 0x82a9c1bd)}}, + {{TOBN(0xcf3de995, 0x9890272d), TOBN(0x75f3432a, 0x3e713a10), + TOBN(0x5e13479f, 0xe28227b8), TOBN(0xb8561ea9, 0xfefacdc8)}, + {TOBN(0xa6a297a0, 0x8332aafd), TOBN(0x9b0d8bb5, 0x73809b62), + TOBN(0xd2fa1cfd, 0x0c63036f), TOBN(0x7a16eb55, 0xbd64bda8)}}, + {{TOBN(0x3f5cf5f6, 0x78e62ddc), TOBN(0x2267c454, 0x07fd752b), + TOBN(0x5e361b6b, 0x5e437bbe), TOBN(0x95c59501, 0x8354e075)}, + {TOBN(0xec725f85, 0xf2b254d9), TOBN(0x844b617d, 0x2cb52b4e), + TOBN(0xed8554f5, 0xcf425fb5), TOBN(0xab67703e, 0x2af9f312)}}, + {{TOBN(0x4cc34ec1, 0x3cf48283), TOBN(0xb09daa25, 0x9c8a705e), + TOBN(0xd1e9d0d0, 0x5b7d4f84), TOBN(0x4df6ef64, 0xdb38929d)}, + {TOBN(0xe16b0763, 0xaa21ba46), TOBN(0xc6b1d178, 0xa293f8fb), + TOBN(0x0ff5b602, 0xd520aabf), TOBN(0x94d671bd, 0xc339397a)}}, + {{TOBN(0x7c7d98cf, 0x4f5792fa), TOBN(0x7c5e0d67, 0x11215261), + TOBN(0x9b19a631, 0xa7c5a6d4), TOBN(0xc8511a62, 0x7a45274d)}, + {TOBN(0x0c16621c, 0xa5a60d99), TOBN(0xf7fbab88, 0xcf5e48cb), + TOBN(0xab1e6ca2, 0xf7ddee08), TOBN(0x83bd08ce, 0xe7867f3c)}}, + {{TOBN(0xf7e48e8a, 0x2ac13e27), TOBN(0x4494f6df, 0x4eb1a9f5), + TOBN(0xedbf84eb, 0x981f0a62), TOBN(0x49badc32, 0x536438f0)}, + {TOBN(0x50bea541, 0x004f7571), TOBN(0xbac67d10, 0xdf1c94ee), + TOBN(0x253d73a1, 0xb727bc31), TOBN(0xb3d01cf2, 0x30686e28)}}, + {{TOBN(0x51b77b1b, 0x55fd0b8b), TOBN(0xa099d183, 0xfeec3173), + TOBN(0x202b1fb7, 0x670e72b7), TOBN(0xadc88b33, 0xa8e1635f)}, + {TOBN(0x34e8216a, 0xf989d905), TOBN(0xc2e68d20, 0x29b58d01), + TOBN(0x11f81c92, 0x6fe55a93), TOBN(0x15f1462a, 0x8f296f40)}}, + {{TOBN(0x1915d375, 0xea3d62f2), TOBN(0xa17765a3, 0x01c8977d), + TOBN(0x7559710a, 0xe47b26f6), TOBN(0xe0bd29c8, 0x535077a5)}, + {TOBN(0x615f976d, 0x08d84858), TOBN(0x370dfe85, 0x69ced5c1), + TOBN(0xbbc7503c, 0xa734fa56), TOBN(0xfbb9f1ec, 0x91ac4574)}}, + {{TOBN(0x95d7ec53, 0x060dd7ef), TOBN(0xeef2dacd, 0x6e657979), + TOBN(0x54511af3, 0xe2a08235), TOBN(0x1e324aa4, 0x1f4aea3d)}, + {TOBN(0x550e7e71, 0xe6e67671), TOBN(0xbccd5190, 0xbf52faf7), + TOBN(0xf880d316, 0x223cc62a), TOBN(0x0d402c7e, 0x2b32eb5d)}}, + {{TOBN(0xa40bc039, 0x306a5a3b), TOBN(0x4e0a41fd, 0x96783a1b), + TOBN(0xa1e8d39a, 0x0253cdd4), TOBN(0x6480be26, 0xc7388638)}, + {TOBN(0xee365e1d, 0x2285f382), TOBN(0x188d8d8f, 0xec0b5c36), + TOBN(0x34ef1a48, 0x1f0f4d82), TOBN(0x1a8f43e1, 0xa487d29a)}}, + {{TOBN(0x8168226d, 0x77aefb3a), TOBN(0xf69a751e, 0x1e72c253), + TOBN(0x8e04359a, 0xe9594df1), TOBN(0x475ffd7d, 0xd14c0467)}, + {TOBN(0xb5a2c2b1, 0x3844e95c), TOBN(0x85caf647, 0xdd12ef94), + TOBN(0x1ecd2a9f, 0xf1063d00), TOBN(0x1dd2e229, 0x23843311)}}, + {{TOBN(0x38f0e09d, 0x73d17244), TOBN(0x3ede7746, 0x8fc653f1), + TOBN(0xae4459f5, 0xdc20e21c), TOBN(0x00db2ffa, 0x6a8599ea)}, + {TOBN(0x11682c39, 0x30cfd905), TOBN(0x4934d074, 0xa5c112a6), + TOBN(0xbdf063c5, 0x568bfe95), TOBN(0x779a440a, 0x016c441a)}}, + {{TOBN(0x0c23f218, 0x97d6fbdc), TOBN(0xd3a5cd87, 0xe0776aac), + TOBN(0xcee37f72, 0xd712e8db), TOBN(0xfb28c70d, 0x26f74e8d)}, + {TOBN(0xffe0c728, 0xb61301a0), TOBN(0xa6282168, 0xd3724354), + TOBN(0x7ff4cb00, 0x768ffedc), TOBN(0xc51b3088, 0x03b02de9)}}, + {{TOBN(0xa5a8147c, 0x3902dda5), TOBN(0x35d2f706, 0xfe6973b4), + TOBN(0x5ac2efcf, 0xc257457e), TOBN(0x933f48d4, 0x8700611b)}, + {TOBN(0xc365af88, 0x4912beb2), TOBN(0x7f5a4de6, 0x162edf94), + TOBN(0xc646ba7c, 0x0c32f34b), TOBN(0x632c6af3, 0xb2091074)}}, + {{TOBN(0x58d4f2e3, 0x753e43a9), TOBN(0x70e1d217, 0x24d4e23f), + TOBN(0xb24bf729, 0xafede6a6), TOBN(0x7f4a94d8, 0x710c8b60)}, + {TOBN(0xaad90a96, 0x8d4faa6a), TOBN(0xd9ed0b32, 0xb066b690), + TOBN(0x52fcd37b, 0x78b6dbfd), TOBN(0x0b64615e, 0x8bd2b431)}}, + {{TOBN(0x228e2048, 0xcfb9fad5), TOBN(0xbeaa386d, 0x240b76bd), + TOBN(0x2d6681c8, 0x90dad7bc), TOBN(0x3e553fc3, 0x06d38f5e)}, + {TOBN(0xf27cdb9b, 0x9d5f9750), TOBN(0x3e85c52a, 0xd28c5b0e), + TOBN(0x190795af, 0x5247c39b), TOBN(0x547831eb, 0xbddd6828)}}, + {{TOBN(0xf327a227, 0x4a82f424), TOBN(0x36919c78, 0x7e47f89d), + TOBN(0xe4783919, 0x43c7392c), TOBN(0xf101b9aa, 0x2316fefe)}, + {TOBN(0xbcdc9e9c, 0x1c5009d2), TOBN(0xfb55ea13, 0x9cd18345), + TOBN(0xf5b5e231, 0xa3ce77c7), TOBN(0xde6b4527, 0xd2f2cb3d)}}, + {{TOBN(0x10f6a333, 0x9bb26f5f), TOBN(0x1e85db8e, 0x044d85b6), + TOBN(0xc3697a08, 0x94197e54), TOBN(0x65e18cc0, 0xa7cb4ea8)}, + {TOBN(0xa38c4f50, 0xa471fe6e), TOBN(0xf031747a, 0x2f13439c), + TOBN(0x53c4a6ba, 0xc007318b), TOBN(0xa8da3ee5, 0x1deccb3d)}}, + {{TOBN(0x0555b31c, 0x558216b1), TOBN(0x90c7810c, 0x2f79e6c2), + TOBN(0x9b669f4d, 0xfe8eed3c), TOBN(0x70398ec8, 0xe0fac126)}, + {TOBN(0xa96a449e, 0xf701b235), TOBN(0x0ceecdb3, 0xeb94f395), + TOBN(0x285fc368, 0xd0cb7431), TOBN(0x0d37bb52, 0x16a18c64)}}, + {{TOBN(0x05110d38, 0xb880d2dd), TOBN(0xa60f177b, 0x65930d57), + TOBN(0x7da34a67, 0xf36235f5), TOBN(0x47f5e17c, 0x183816b9)}, + {TOBN(0xc7664b57, 0xdb394af4), TOBN(0x39ba215d, 0x7036f789), + TOBN(0x46d2ca0e, 0x2f27b472), TOBN(0xc42647ee, 0xf73a84b7)}}, + {{TOBN(0x44bc7545, 0x64488f1d), TOBN(0xaa922708, 0xf4cf85d5), + TOBN(0x721a01d5, 0x53e4df63), TOBN(0x649c0c51, 0x5db46ced)}, + {TOBN(0x6bf0d64e, 0x3cffcb6c), TOBN(0xe3bf93fe, 0x50f71d96), + TOBN(0x75044558, 0xbcc194a0), TOBN(0x16ae3372, 0x6afdc554)}}, + {{TOBN(0xbfc01adf, 0x5ca48f3f), TOBN(0x64352f06, 0xe22a9b84), + TOBN(0xcee54da1, 0xc1099e4a), TOBN(0xbbda54e8, 0xfa1b89c0)}, + {TOBN(0x166a3df5, 0x6f6e55fb), TOBN(0x1ca44a24, 0x20176f88), + TOBN(0x936afd88, 0xdfb7b5ff), TOBN(0xe34c2437, 0x8611d4a0)}}, + {{TOBN(0x7effbb75, 0x86142103), TOBN(0x6704ba1b, 0x1f34fc4d), + TOBN(0x7c2a468f, 0x10c1b122), TOBN(0x36b3a610, 0x8c6aace9)}, + {TOBN(0xabfcc0a7, 0x75a0d050), TOBN(0x066f9197, 0x3ce33e32), + TOBN(0xce905ef4, 0x29fe09be), TOBN(0x89ee25ba, 0xa8376351)}}, + {{TOBN(0x2a3ede22, 0xfd29dc76), TOBN(0x7fd32ed9, 0x36f17260), + TOBN(0x0cadcf68, 0x284b4126), TOBN(0x63422f08, 0xa7951fc8)}, + {TOBN(0x562b24f4, 0x0807e199), TOBN(0xfe9ce5d1, 0x22ad4490), + TOBN(0xc2f51b10, 0x0db2b1b4), TOBN(0xeb3613ff, 0xe4541d0d)}}, + {{TOBN(0xbd2c4a05, 0x2680813b), TOBN(0x527aa55d, 0x561b08d6), + TOBN(0xa9f8a40e, 0xa7205558), TOBN(0xe3eea56f, 0x243d0bec)}, + {TOBN(0x7b853817, 0xa0ff58b3), TOBN(0xb67d3f65, 0x1a69e627), + TOBN(0x0b76bbb9, 0xa869b5d6), TOBN(0xa3afeb82, 0x546723ed)}}, + {{TOBN(0x5f24416d, 0x3e554892), TOBN(0x8413b53d, 0x430e2a45), + TOBN(0x99c56aee, 0x9032a2a0), TOBN(0x09432bf6, 0xeec367b1)}, + {TOBN(0x552850c6, 0xdaf0ecc1), TOBN(0x49ebce55, 0x5bc92048), + TOBN(0xdfb66ba6, 0x54811307), TOBN(0x1b84f797, 0x6f298597)}}, + {{TOBN(0x79590481, 0x8d1d7a0d), TOBN(0xd9fabe03, 0x3a6fa556), + TOBN(0xa40f9c59, 0xba9e5d35), TOBN(0xcb1771c1, 0xf6247577)}, + {TOBN(0x542a47ca, 0xe9a6312b), TOBN(0xa34b3560, 0x552dd8c5), + TOBN(0xfdf94de0, 0x0d794716), TOBN(0xd46124a9, 0x9c623094)}}, + {{TOBN(0x56b7435d, 0x68afe8b4), TOBN(0x27f20540, 0x6c0d8ea1), + TOBN(0x12b77e14, 0x73186898), TOBN(0xdbc3dd46, 0x7479490f)}, + {TOBN(0x951a9842, 0xc03b0c05), TOBN(0x8b1b3bb3, 0x7921bc96), + TOBN(0xa573b346, 0x2b202e0a), TOBN(0x77e4665d, 0x47254d56)}}, + {{TOBN(0x08b70dfc, 0xd23e3984), TOBN(0xab86e8bc, 0xebd14236), + TOBN(0xaa3e07f8, 0x57114ba7), TOBN(0x5ac71689, 0xab0ef4f2)}, + {TOBN(0x88fca384, 0x0139d9af), TOBN(0x72733f88, 0x76644af0), + TOBN(0xf122f72a, 0x65d74f4a), TOBN(0x13931577, 0xa5626c7a)}}, + {{TOBN(0xd5b5d9eb, 0x70f8d5a4), TOBN(0x375adde7, 0xd7bbb228), + TOBN(0x31e88b86, 0x0c1c0b32), TOBN(0xd1f568c4, 0x173edbaa)}, + {TOBN(0x1592fc83, 0x5459df02), TOBN(0x2beac0fb, 0x0fcd9a7e), + TOBN(0xb0a6fdb8, 0x1b473b0a), TOBN(0xe3224c6f, 0x0fe8fc48)}}, + {{TOBN(0x680bd00e, 0xe87edf5b), TOBN(0x30385f02, 0x20e77cf5), + TOBN(0xe9ab98c0, 0x4d42d1b2), TOBN(0x72d191d2, 0xd3816d77)}, + {TOBN(0x1564daca, 0x0917d9e5), TOBN(0x394eab59, 0x1f8fed7f), + TOBN(0xa209aa8d, 0x7fbb3896), TOBN(0x5564f3b9, 0xbe6ac98e)}}, + {{TOBN(0xead21d05, 0xd73654ef), TOBN(0x68d1a9c4, 0x13d78d74), + TOBN(0x61e01708, 0x6d4973a0), TOBN(0x83da3500, 0x46e6d32a)}, + {TOBN(0x6a3dfca4, 0x68ae0118), TOBN(0xa1b9a4c9, 0xd02da069), + TOBN(0x0b2ff9c7, 0xebab8302), TOBN(0x98af07c3, 0x944ba436)}}, + {{TOBN(0x85997326, 0x995f0f9f), TOBN(0x467fade0, 0x71b58bc6), + TOBN(0x47e4495a, 0xbd625a2b), TOBN(0xfdd2d01d, 0x33c3b8cd)}, + {TOBN(0x2c38ae28, 0xc693f9fa), TOBN(0x48622329, 0x348f7999), + TOBN(0x97bf738e, 0x2161f583), TOBN(0x15ee2fa7, 0x565e8cc9)}}, + {{TOBN(0xa1a5c845, 0x5777e189), TOBN(0xcc10bee0, 0x456f2829), + TOBN(0x8ad95c56, 0xda762bd5), TOBN(0x152e2214, 0xe9d91da8)}, + {TOBN(0x975b0e72, 0x7cb23c74), TOBN(0xfd5d7670, 0xa90c66df), + TOBN(0xb5b5b8ad, 0x225ffc53), TOBN(0xab6dff73, 0xfaded2ae)}}, + {{TOBN(0xebd56781, 0x6f4cbe9d), TOBN(0x0ed8b249, 0x6a574bd7), + TOBN(0x41c246fe, 0x81a881fa), TOBN(0x91564805, 0xc3db9c70)}, + {TOBN(0xd7c12b08, 0x5b862809), TOBN(0x1facd1f1, 0x55858d7b), + TOBN(0x7693747c, 0xaf09e92a), TOBN(0x3b69dcba, 0x189a425f)}}, + {{TOBN(0x0be28e9f, 0x967365ef), TOBN(0x57300eb2, 0xe801f5c9), + TOBN(0x93b8ac6a, 0xd583352f), TOBN(0xa2cf1f89, 0xcd05b2b7)}, + {TOBN(0x7c0c9b74, 0x4dcc40cc), TOBN(0xfee38c45, 0xada523fb), + TOBN(0xb49a4dec, 0x1099cc4d), TOBN(0x325c377f, 0x69f069c6)}}, + {{TOBN(0xe12458ce, 0x476cc9ff), TOBN(0x580e0b6c, 0xc6d4cb63), + TOBN(0xd561c8b7, 0x9072289b), TOBN(0x0377f264, 0xa619e6da)}, + {TOBN(0x26685362, 0x88e591a5), TOBN(0xa453a7bd, 0x7523ca2b), + TOBN(0x8a9536d2, 0xc1df4533), TOBN(0xc8e50f2f, 0xbe972f79)}}, + {{TOBN(0xd433e50f, 0x6d3549cf), TOBN(0x6f33696f, 0xfacd665e), + TOBN(0x695bfdac, 0xce11fcb4), TOBN(0x810ee252, 0xaf7c9860)}, + {TOBN(0x65450fe1, 0x7159bb2c), TOBN(0xf7dfbebe, 0x758b357b), + TOBN(0x2b057e74, 0xd69fea72), TOBN(0xd485717a, 0x92731745)}}}, + {{{TOBN(0x896c42e8, 0xee36860c), TOBN(0xdaf04dfd, 0x4113c22d), + TOBN(0x1adbb7b7, 0x44104213), TOBN(0xe5fd5fa1, 0x1fd394ea)}, + {TOBN(0x68235d94, 0x1a4e0551), TOBN(0x6772cfbe, 0x18d10151), + TOBN(0x276071e3, 0x09984523), TOBN(0xe4e879de, 0x5a56ba98)}}, + {{TOBN(0xaaafafb0, 0x285b9491), TOBN(0x01a0be88, 0x1e4c705e), + TOBN(0xff1d4f5d, 0x2ad9caab), TOBN(0x6e349a4a, 0xc37a233f)}, + {TOBN(0xcf1c1246, 0x4a1c6a16), TOBN(0xd99e6b66, 0x29383260), + TOBN(0xea3d4366, 0x5f6d5471), TOBN(0x36974d04, 0xff8cc89b)}}, + {{TOBN(0xc26c49a1, 0xcfe89d80), TOBN(0xb42c026d, 0xda9c8371), + TOBN(0xca6c013a, 0xdad066d2), TOBN(0xfb8f7228, 0x56a4f3ee)}, + {TOBN(0x08b579ec, 0xd850935b), TOBN(0x34c1a74c, 0xd631e1b3), + TOBN(0xcb5fe596, 0xac198534), TOBN(0x39ff21f6, 0xe1f24f25)}}, + {{TOBN(0x27f29e14, 0x8f929057), TOBN(0x7a64ae06, 0xc0c853df), + TOBN(0x256cd183, 0x58e9c5ce), TOBN(0x9d9cce82, 0xded092a5)}, + {TOBN(0xcc6e5979, 0x6e93b7c7), TOBN(0xe1e47092, 0x31bb9e27), + TOBN(0xb70b3083, 0xaa9e29a0), TOBN(0xbf181a75, 0x3785e644)}}, + {{TOBN(0xf53f2c65, 0x8ead09f7), TOBN(0x1335e1d5, 0x9780d14d), + TOBN(0x69cc20e0, 0xcd1b66bc), TOBN(0x9b670a37, 0xbbe0bfc8)}, + {TOBN(0xce53dc81, 0x28efbeed), TOBN(0x0c74e77c, 0x8326a6e5), + TOBN(0x3604e0d2, 0xb88e9a63), TOBN(0xbab38fca, 0x13dc2248)}}, + {{TOBN(0x8ed6e8c8, 0x5c0a3f1e), TOBN(0xbcad2492, 0x7c87c37f), + TOBN(0xfdfb62bb, 0x9ee3b78d), TOBN(0xeba8e477, 0xcbceba46)}, + {TOBN(0x37d38cb0, 0xeeaede4b), TOBN(0x0bc498e8, 0x7976deb6), + TOBN(0xb2944c04, 0x6b6147fb), TOBN(0x8b123f35, 0xf71f9609)}}, + {{TOBN(0xa155dcc7, 0xde79dc24), TOBN(0xf1168a32, 0x558f69cd), + TOBN(0xbac21595, 0x0d1850df), TOBN(0x15c8295b, 0xb204c848)}, + {TOBN(0xf661aa36, 0x7d8184ff), TOBN(0xc396228e, 0x30447bdb), + TOBN(0x11cd5143, 0xbde4a59e), TOBN(0xe3a26e3b, 0x6beab5e6)}}, + {{TOBN(0xd3b3a13f, 0x1402b9d0), TOBN(0x573441c3, 0x2c7bc863), + TOBN(0x4b301ec4, 0x578c3e6e), TOBN(0xc26fc9c4, 0x0adaf57e)}, + {TOBN(0x96e71bfd, 0x7493cea3), TOBN(0xd05d4b3f, 0x1af81456), + TOBN(0xdaca2a8a, 0x6a8c608f), TOBN(0x53ef07f6, 0x0725b276)}}, + {{TOBN(0x07a5fbd2, 0x7824fc56), TOBN(0x34675218, 0x13289077), + TOBN(0x5bf69fd5, 0xe0c48349), TOBN(0xa613ddd3, 0xb6aa7875)}, + {TOBN(0x7f78c19c, 0x5450d866), TOBN(0x46f4409c, 0x8f84a481), + TOBN(0x9f1d1928, 0x90fce239), TOBN(0x016c4168, 0xb2ce44b9)}}, + {{TOBN(0xbae023f0, 0xc7435978), TOBN(0xb152c888, 0x20e30e19), + TOBN(0x9c241645, 0xe3fa6faf), TOBN(0x735d95c1, 0x84823e60)}, + {TOBN(0x03197573, 0x03955317), TOBN(0x0b4b02a9, 0xf03b4995), + TOBN(0x076bf559, 0x70274600), TOBN(0x32c5cc53, 0xaaf57508)}}, + {{TOBN(0xe8af6d1f, 0x60624129), TOBN(0xb7bc5d64, 0x9a5e2b5e), + TOBN(0x3814b048, 0x5f082d72), TOBN(0x76f267f2, 0xce19677a)}, + {TOBN(0x626c630f, 0xb36eed93), TOBN(0x55230cd7, 0x3bf56803), + TOBN(0x78837949, 0xce2736a0), TOBN(0x0d792d60, 0xaa6c55f1)}}, + {{TOBN(0x0318dbfd, 0xd5c7c5d2), TOBN(0xb38f8da7, 0x072b342d), + TOBN(0x3569bddc, 0x7b8de38a), TOBN(0xf25b5887, 0xa1c94842)}, + {TOBN(0xb2d5b284, 0x2946ad60), TOBN(0x854f29ad, 0xe9d1707e), + TOBN(0xaa5159dc, 0x2c6a4509), TOBN(0x899f94c0, 0x57189837)}}, + {{TOBN(0xcf6adc51, 0xf4a55b03), TOBN(0x261762de, 0x35e3b2d5), + TOBN(0x4cc43012, 0x04827b51), TOBN(0xcd22a113, 0xc6021442)}, + {TOBN(0xce2fd61a, 0x247c9569), TOBN(0x59a50973, 0xd152beca), + TOBN(0x6c835a11, 0x63a716d4), TOBN(0xc26455ed, 0x187dedcf)}}, + {{TOBN(0x27f536e0, 0x49ce89e7), TOBN(0x18908539, 0xcc890cb5), + TOBN(0x308909ab, 0xd83c2aa1), TOBN(0xecd3142b, 0x1ab73bd3)}, + {TOBN(0x6a85bf59, 0xb3f5ab84), TOBN(0x3c320a68, 0xf2bea4c6), + TOBN(0xad8dc538, 0x6da4541f), TOBN(0xeaf34eb0, 0xb7c41186)}}, + {{TOBN(0x1c780129, 0x977c97c4), TOBN(0x5ff9beeb, 0xc57eb9fa), + TOBN(0xa24d0524, 0xc822c478), TOBN(0xfd8eec2a, 0x461cd415)}, + {TOBN(0xfbde194e, 0xf027458c), TOBN(0xb4ff5319, 0x1d1be115), + TOBN(0x63f874d9, 0x4866d6f4), TOBN(0x35c75015, 0xb21ad0c9)}}, + {{TOBN(0xa6b5c9d6, 0x46ac49d2), TOBN(0x42c77c0b, 0x83137aa9), + TOBN(0x24d000fc, 0x68225a38), TOBN(0x0f63cfc8, 0x2fe1e907)}, + {TOBN(0x22d1b01b, 0xc6441f95), TOBN(0x7d38f719, 0xec8e448f), + TOBN(0x9b33fa5f, 0x787fb1ba), TOBN(0x94dcfda1, 0x190158df)}}, + {{TOBN(0xc47cb339, 0x5f6d4a09), TOBN(0x6b4f355c, 0xee52b826), + TOBN(0x3d100f5d, 0xf51b930a), TOBN(0xf4512fac, 0x9f668f69)}, + {TOBN(0x546781d5, 0x206c4c74), TOBN(0xd021d4d4, 0xcb4d2e48), + TOBN(0x494a54c2, 0xca085c2d), TOBN(0xf1dbaca4, 0x520850a8)}}, + {{TOBN(0x63c79326, 0x490a1aca), TOBN(0xcb64dd9c, 0x41526b02), + TOBN(0xbb772591, 0xa2979258), TOBN(0x3f582970, 0x48d97846)}, + {TOBN(0xd66b70d1, 0x7c213ba7), TOBN(0xc28febb5, 0xe8a0ced4), + TOBN(0x6b911831, 0xc10338c1), TOBN(0x0d54e389, 0xbf0126f3)}}, + {{TOBN(0x7048d460, 0x4af206ee), TOBN(0x786c88f6, 0x77e97cb9), + TOBN(0xd4375ae1, 0xac64802e), TOBN(0x469bcfe1, 0xd53ec11c)}, + {TOBN(0xfc9b340d, 0x47062230), TOBN(0xe743bb57, 0xc5b4a3ac), + TOBN(0xfe00b4aa, 0x59ef45ac), TOBN(0x29a4ef23, 0x59edf188)}}, + {{TOBN(0x40242efe, 0xb483689b), TOBN(0x2575d3f6, 0x513ac262), + TOBN(0xf30037c8, 0x0ca6db72), TOBN(0xc9fcce82, 0x98864be2)}, + {TOBN(0x84a112ff, 0x0149362d), TOBN(0x95e57582, 0x1c4ae971), + TOBN(0x1fa4b1a8, 0x945cf86c), TOBN(0x4525a734, 0x0b024a2f)}}, + {{TOBN(0xe76c8b62, 0x8f338360), TOBN(0x483ff593, 0x28edf32b), + TOBN(0x67e8e90a, 0x298b1aec), TOBN(0x9caab338, 0x736d9a21)}, + {TOBN(0x5c09d2fd, 0x66892709), TOBN(0x2496b4dc, 0xb55a1d41), + TOBN(0x93f5fb1a, 0xe24a4394), TOBN(0x08c75049, 0x6fa8f6c1)}}, + {{TOBN(0xcaead1c2, 0xc905d85f), TOBN(0xe9d7f790, 0x0733ae57), + TOBN(0x24c9a65c, 0xf07cdd94), TOBN(0x7389359c, 0xa4b55931)}, + {TOBN(0xf58709b7, 0x367e45f7), TOBN(0x1f203067, 0xcb7e7adc), + TOBN(0x82444bff, 0xc7b72818), TOBN(0x07303b35, 0xbaac8033)}}, + {{TOBN(0x1e1ee4e4, 0xd13b7ea1), TOBN(0xe6489b24, 0xe0e74180), + TOBN(0xa5f2c610, 0x7e70ef70), TOBN(0xa1655412, 0xbdd10894)}, + {TOBN(0x555ebefb, 0x7af4194e), TOBN(0x533c1c3c, 0x8e89bd9c), + TOBN(0x735b9b57, 0x89895856), TOBN(0x15fb3cd2, 0x567f5c15)}}, + {{TOBN(0x057fed45, 0x526f09fd), TOBN(0xe8a4f10c, 0x8128240a), + TOBN(0x9332efc4, 0xff2bfd8d), TOBN(0x214e77a0, 0xbd35aa31)}, + {TOBN(0x32896d73, 0x14faa40e), TOBN(0x767867ec, 0x01e5f186), + TOBN(0xc9adf8f1, 0x17a1813e), TOBN(0xcb6cda78, 0x54741795)}}, + {{TOBN(0xb7521b6d, 0x349d51aa), TOBN(0xf56b5a9e, 0xe3c7b8e9), + TOBN(0xc6f1e5c9, 0x32a096df), TOBN(0x083667c4, 0xa3635024)}, + {TOBN(0x365ea135, 0x18087f2f), TOBN(0xf1b8eaac, 0xd136e45d), + TOBN(0xc8a0e484, 0x73aec989), TOBN(0xd75a324b, 0x142c9259)}}, + {{TOBN(0xb7b4d001, 0x01dae185), TOBN(0x45434e0b, 0x9b7a94bc), + TOBN(0xf54339af, 0xfbd8cb0b), TOBN(0xdcc4569e, 0xe98ef49e)}, + {TOBN(0x7789318a, 0x09a51299), TOBN(0x81b4d206, 0xb2b025d8), + TOBN(0xf64aa418, 0xfae85792), TOBN(0x3e50258f, 0xacd7baf7)}}, + {{TOBN(0xdce84cdb, 0x2996864b), TOBN(0xa2e67089, 0x1f485fa4), + TOBN(0xb28b2bb6, 0x534c6a5a), TOBN(0x31a7ec6b, 0xc94b9d39)}, + {TOBN(0x1d217766, 0xd6bc20da), TOBN(0x4acdb5ec, 0x86761190), + TOBN(0x68726328, 0x73701063), TOBN(0x4d24ee7c, 0x2128c29b)}}, + {{TOBN(0xc072ebd3, 0xa19fd868), TOBN(0x612e481c, 0xdb8ddd3b), + TOBN(0xb4e1d754, 0x1a64d852), TOBN(0x00ef95ac, 0xc4c6c4ab)}, + {TOBN(0x1536d2ed, 0xaa0a6c46), TOBN(0x61294086, 0x43774790), + TOBN(0x54af25e8, 0x343fda10), TOBN(0x9ff9d98d, 0xfd25d6f2)}}, + {{TOBN(0x0746af7c, 0x468b8835), TOBN(0x977a31cb, 0x730ecea7), + TOBN(0xa5096b80, 0xc2cf4a81), TOBN(0xaa986833, 0x6458c37a)}, + {TOBN(0x6af29bf3, 0xa6bd9d34), TOBN(0x6a62fe9b, 0x33c5d854), + TOBN(0x50e6c304, 0xb7133b5e), TOBN(0x04b60159, 0x7d6e6848)}}, + {{TOBN(0x4cd296df, 0x5579bea4), TOBN(0x10e35ac8, 0x5ceedaf1), + TOBN(0x04c4c5fd, 0xe3bcc5b1), TOBN(0x95f9ee8a, 0x89412cf9)}, + {TOBN(0x2c9459ee, 0x82b6eb0f), TOBN(0x2e845765, 0x95c2aadd), + TOBN(0x774a84ae, 0xd327fcfe), TOBN(0xd8c93722, 0x0368d476)}}, + {{TOBN(0x0dbd5748, 0xf83e8a3b), TOBN(0xa579aa96, 0x8d2495f3), + TOBN(0x535996a0, 0xae496e9b), TOBN(0x07afbfe9, 0xb7f9bcc2)}, + {TOBN(0x3ac1dc6d, 0x5b7bd293), TOBN(0x3b592cff, 0x7022323d), + TOBN(0xba0deb98, 0x9c0a3e76), TOBN(0x18e78e9f, 0x4b197acb)}}, + {{TOBN(0x211cde10, 0x296c36ef), TOBN(0x7ee89672, 0x82c4da77), + TOBN(0xb617d270, 0xa57836da), TOBN(0xf0cd9c31, 0x9cb7560b)}, + {TOBN(0x01fdcbf7, 0xe455fe90), TOBN(0x3fb53cbb, 0x7e7334f3), + TOBN(0x781e2ea4, 0x4e7de4ec), TOBN(0x8adab3ad, 0x0b384fd0)}}, + {{TOBN(0x129eee2f, 0x53d64829), TOBN(0x7a471e17, 0xa261492b), + TOBN(0xe4f9adb9, 0xe4cb4a2c), TOBN(0x3d359f6f, 0x97ba2c2d)}, + {TOBN(0x346c6786, 0x0aacd697), TOBN(0x92b444c3, 0x75c2f8a8), + TOBN(0xc79fa117, 0xd85df44e), TOBN(0x56782372, 0x398ddf31)}}, + {{TOBN(0x60e690f2, 0xbbbab3b8), TOBN(0x4851f8ae, 0x8b04816b), + TOBN(0xc72046ab, 0x9c92e4d2), TOBN(0x518c74a1, 0x7cf3136b)}, + {TOBN(0xff4eb50a, 0xf9877d4c), TOBN(0x14578d90, 0xa919cabb), + TOBN(0x8218f8c4, 0xac5eb2b6), TOBN(0xa3ccc547, 0x542016e4)}}, + {{TOBN(0x025bf48e, 0x327f8349), TOBN(0xf3e97346, 0xf43cb641), + TOBN(0xdc2bafdf, 0x500f1085), TOBN(0x57167876, 0x2f063055)}, + {TOBN(0x5bd914b9, 0x411925a6), TOBN(0x7c078d48, 0xa1123de5), + TOBN(0xee6bf835, 0x182b165d), TOBN(0xb11b5e5b, 0xba519727)}}, + {{TOBN(0xe33ea76c, 0x1eea7b85), TOBN(0x2352b461, 0x92d4f85e), + TOBN(0xf101d334, 0xafe115bb), TOBN(0xfabc1294, 0x889175a3)}, + {TOBN(0x7f6bcdc0, 0x5233f925), TOBN(0xe0a802db, 0xe77fec55), + TOBN(0xbdb47b75, 0x8069b659), TOBN(0x1c5e12de, 0xf98fbd74)}}, + {{TOBN(0x869c58c6, 0x4b8457ee), TOBN(0xa5360f69, 0x4f7ea9f7), + TOBN(0xe576c09f, 0xf460b38f), TOBN(0x6b70d548, 0x22b7fb36)}, + {TOBN(0x3fd237f1, 0x3bfae315), TOBN(0x33797852, 0xcbdff369), + TOBN(0x97df25f5, 0x25b516f9), TOBN(0x46f388f2, 0xba38ad2d)}}, + {{TOBN(0x656c4658, 0x89d8ddbb), TOBN(0x8830b26e, 0x70f38ee8), + TOBN(0x4320fd5c, 0xde1212b0), TOBN(0xc34f30cf, 0xe4a2edb2)}, + {TOBN(0xabb131a3, 0x56ab64b8), TOBN(0x7f77f0cc, 0xd99c5d26), + TOBN(0x66856a37, 0xbf981d94), TOBN(0x19e76d09, 0x738bd76e)}}, + {{TOBN(0xe76c8ac3, 0x96238f39), TOBN(0xc0a482be, 0xa830b366), + TOBN(0xb7b8eaff, 0x0b4eb499), TOBN(0x8ecd83bc, 0x4bfb4865)}, + {TOBN(0x971b2cb7, 0xa2f3776f), TOBN(0xb42176a4, 0xf4b88adf), + TOBN(0xb9617df5, 0xbe1fa446), TOBN(0x8b32d508, 0xcd031bd2)}}, + {{TOBN(0x1c6bd47d, 0x53b618c0), TOBN(0xc424f46c, 0x6a227923), + TOBN(0x7303ffde, 0xdd92d964), TOBN(0xe9712878, 0x71b5abf2)}, + {TOBN(0x8f48a632, 0xf815561d), TOBN(0x85f48ff5, 0xd3c055d1), + TOBN(0x222a1427, 0x7525684f), TOBN(0xd0d841a0, 0x67360cc3)}}, + {{TOBN(0x4245a926, 0x0b9267c6), TOBN(0xc78913f1, 0xcf07f863), + TOBN(0xaa844c8e, 0x4d0d9e24), TOBN(0xa42ad522, 0x3d5f9017)}, + {TOBN(0xbd371749, 0xa2c989d5), TOBN(0x928292df, 0xe1f5e78e), + TOBN(0x493b383e, 0x0a1ea6da), TOBN(0x5136fd8d, 0x13aee529)}}, + {{TOBN(0x860c44b1, 0xf2c34a99), TOBN(0x3b00aca4, 0xbf5855ac), + TOBN(0xabf6aaa0, 0xfaaf37be), TOBN(0x65f43682, 0x2a53ec08)}, + {TOBN(0x1d9a5801, 0xa11b12e1), TOBN(0x78a7ab2c, 0xe20ed475), + TOBN(0x0de1067e, 0x9a41e0d5), TOBN(0x30473f5f, 0x305023ea)}}, + {{TOBN(0xdd3ae09d, 0x169c7d97), TOBN(0x5cd5baa4, 0xcfaef9cd), + TOBN(0x5cd7440b, 0x65a44803), TOBN(0xdc13966a, 0x47f364de)}, + {TOBN(0x077b2be8, 0x2b8357c1), TOBN(0x0cb1b4c5, 0xe9d57c2a), + TOBN(0x7a4ceb32, 0x05ff363e), TOBN(0xf310fa4d, 0xca35a9ef)}}, + {{TOBN(0xdbb7b352, 0xf97f68c6), TOBN(0x0c773b50, 0x0b02cf58), + TOBN(0xea2e4821, 0x3c1f96d9), TOBN(0xffb357b0, 0xeee01815)}, + {TOBN(0xb9c924cd, 0xe0f28039), TOBN(0x0b36c95a, 0x46a3fbe4), + TOBN(0x1faaaea4, 0x5e46db6c), TOBN(0xcae575c3, 0x1928aaff)}}, + {{TOBN(0x7f671302, 0xa70dab86), TOBN(0xfcbd12a9, 0x71c58cfc), + TOBN(0xcbef9acf, 0xbee0cb92), TOBN(0x573da0b9, 0xf8c1b583)}, + {TOBN(0x4752fcfe, 0x0d41d550), TOBN(0xe7eec0e3, 0x2155cffe), + TOBN(0x0fc39fcb, 0x545ae248), TOBN(0x522cb8d1, 0x8065f44e)}}, + {{TOBN(0x263c962a, 0x70cbb96c), TOBN(0xe034362a, 0xbcd124a9), + TOBN(0xf120db28, 0x3c2ae58d), TOBN(0xb9a38d49, 0xfef6d507)}, + {TOBN(0xb1fd2a82, 0x1ff140fd), TOBN(0xbd162f30, 0x20aee7e0), + TOBN(0x4e17a5d4, 0xcb251949), TOBN(0x2aebcb83, 0x4f7e1c3d)}}, + {{TOBN(0x608eb25f, 0x937b0527), TOBN(0xf42e1e47, 0xeb7d9997), + TOBN(0xeba699c4, 0xb8a53a29), TOBN(0x1f921c71, 0xe091b536)}, + {TOBN(0xcce29e7b, 0x5b26bbd5), TOBN(0x7a8ef5ed, 0x3b61a680), + TOBN(0xe5ef8043, 0xba1f1c7e), TOBN(0x16ea8217, 0x18158dda)}}, + {{TOBN(0x01778a2b, 0x599ff0f9), TOBN(0x68a923d7, 0x8104fc6b), + TOBN(0x5bfa44df, 0xda694ff3), TOBN(0x4f7199db, 0xf7667f12)}, + {TOBN(0xc06d8ff6, 0xe46f2a79), TOBN(0x08b5dead, 0xe9f8131d), + TOBN(0x02519a59, 0xabb4ce7c), TOBN(0xc4f710bc, 0xb42aec3e)}}, + {{TOBN(0x3d77b057, 0x78bde41a), TOBN(0x6474bf80, 0xb4186b5a), + TOBN(0x048b3f67, 0x88c65741), TOBN(0xc64519de, 0x03c7c154)}, + {TOBN(0xdf073846, 0x0edfcc4f), TOBN(0x319aa737, 0x48f1aa6b), + TOBN(0x8b9f8a02, 0xca909f77), TOBN(0x90258139, 0x7580bfef)}}, + {{TOBN(0xd8bfd3ca, 0xc0c22719), TOBN(0xc60209e4, 0xc9ca151e), + TOBN(0x7a744ab5, 0xd9a1a69c), TOBN(0x6de5048b, 0x14937f8f)}, + {TOBN(0x171938d8, 0xe115ac04), TOBN(0x7df70940, 0x1c6b16d2), + TOBN(0xa6aeb663, 0x7f8e94e7), TOBN(0xc130388e, 0x2a2cf094)}}, + {{TOBN(0x1850be84, 0x77f54e6e), TOBN(0x9f258a72, 0x65d60fe5), + TOBN(0xff7ff0c0, 0x6c9146d6), TOBN(0x039aaf90, 0xe63a830b)}, + {TOBN(0x38f27a73, 0x9460342f), TOBN(0x4703148c, 0x3f795f8a), + TOBN(0x1bb5467b, 0x9681a97e), TOBN(0x00931ba5, 0xecaeb594)}}, + {{TOBN(0xcdb6719d, 0x786f337c), TOBN(0xd9c01cd2, 0xe704397d), + TOBN(0x0f4a3f20, 0x555c2fef), TOBN(0x00452509, 0x7c0af223)}, + {TOBN(0x54a58047, 0x84db8e76), TOBN(0x3bacf1aa, 0x93c8aa06), + TOBN(0x11ca957c, 0xf7919422), TOBN(0x50641053, 0x78cdaa40)}}, + {{TOBN(0x7a303874, 0x9f7144ae), TOBN(0x170c963f, 0x43d4acfd), + TOBN(0x5e148149, 0x58ddd3ef), TOBN(0xa7bde582, 0x9e72dba8)}, + {TOBN(0x0769da8b, 0x6fa68750), TOBN(0xfa64e532, 0x572e0249), + TOBN(0xfcaadf9d, 0x2619ad31), TOBN(0x87882daa, 0xa7b349cd)}}, + {{TOBN(0x9f6eb731, 0x6c67a775), TOBN(0xcb10471a, 0xefc5d0b1), + TOBN(0xb433750c, 0xe1b806b2), TOBN(0x19c5714d, 0x57b1ae7e)}, + {TOBN(0xc0dc8b7b, 0xed03fd3f), TOBN(0xdd03344f, 0x31bc194e), + TOBN(0xa66c52a7, 0x8c6320b5), TOBN(0x8bc82ce3, 0xd0b6fd93)}}, + {{TOBN(0xf8e13501, 0xb35f1341), TOBN(0xe53156dd, 0x25a43e42), + TOBN(0xd3adf27e, 0x4daeb85c), TOBN(0xb81d8379, 0xbbeddeb5)}, + {TOBN(0x1b0b546e, 0x2e435867), TOBN(0x9020eb94, 0xeba5dd60), + TOBN(0x37d91161, 0x8210cb9d), TOBN(0x4c596b31, 0x5c91f1cf)}}, + {{TOBN(0xb228a90f, 0x0e0b040d), TOBN(0xbaf02d82, 0x45ff897f), + TOBN(0x2aac79e6, 0x00fa6122), TOBN(0x24828817, 0x8e36f557)}, + {TOBN(0xb9521d31, 0x113ec356), TOBN(0x9e48861e, 0x15eff1f8), + TOBN(0x2aa1d412, 0xe0d41715), TOBN(0x71f86203, 0x53f131b8)}}, + {{TOBN(0xf60da8da, 0x3fd19408), TOBN(0x4aa716dc, 0x278d9d99), + TOBN(0x394531f7, 0xa8c51c90), TOBN(0xb560b0e8, 0xf59db51c)}, + {TOBN(0xa28fc992, 0xfa34bdad), TOBN(0xf024fa14, 0x9cd4f8bd), + TOBN(0x5cf530f7, 0x23a9d0d3), TOBN(0x615ca193, 0xe28c9b56)}}, + {{TOBN(0x6d2a483d, 0x6f73c51e), TOBN(0xa4cb2412, 0xea0dc2dd), + TOBN(0x50663c41, 0x1eb917ff), TOBN(0x3d3a74cf, 0xeade299e)}, + {TOBN(0x29b3990f, 0x4a7a9202), TOBN(0xa9bccf59, 0xa7b15c3d), + TOBN(0x66a3ccdc, 0xa5df9208), TOBN(0x48027c14, 0x43f2f929)}}, + {{TOBN(0xd385377c, 0x40b557f0), TOBN(0xe001c366, 0xcd684660), + TOBN(0x1b18ed6b, 0xe2183a27), TOBN(0x879738d8, 0x63210329)}, + {TOBN(0xa687c74b, 0xbda94882), TOBN(0xd1bbcc48, 0xa684b299), + TOBN(0xaf6f1112, 0x863b3724), TOBN(0x6943d1b4, 0x2c8ce9f8)}}, + {{TOBN(0xe044a3bb, 0x098cafb4), TOBN(0x27ed2310, 0x60d48caf), + TOBN(0x542b5675, 0x3a31b84d), TOBN(0xcbf3dd50, 0xfcddbed7)}, + {TOBN(0x25031f16, 0x41b1d830), TOBN(0xa7ec851d, 0xcb0c1e27), + TOBN(0xac1c8fe0, 0xb5ae75db), TOBN(0xb24c7557, 0x08c52120)}}, + {{TOBN(0x57f811dc, 0x1d4636c3), TOBN(0xf8436526, 0x681a9939), + TOBN(0x1f6bc6d9, 0x9c81adb3), TOBN(0x840f8ac3, 0x5b7d80d4)}, + {TOBN(0x731a9811, 0xf4387f1a), TOBN(0x7c501cd3, 0xb5156880), + TOBN(0xa5ca4a07, 0xdfe68867), TOBN(0xf123d8f0, 0x5fcea120)}}, + {{TOBN(0x1fbb0e71, 0xd607039e), TOBN(0x2b70e215, 0xcd3a4546), + TOBN(0x32d2f01d, 0x53324091), TOBN(0xb796ff08, 0x180ab19b)}, + {TOBN(0x32d87a86, 0x3c57c4aa), TOBN(0x2aed9caf, 0xb7c49a27), + TOBN(0x9fb35eac, 0x31630d98), TOBN(0x338e8cdf, 0x5c3e20a3)}}, + {{TOBN(0x80f16182, 0x66cde8db), TOBN(0x4e159980, 0x2d72fd36), + TOBN(0xd7b8f13b, 0x9b6e5072), TOBN(0xf5213907, 0x3b7b5dc1)}, + {TOBN(0x4d431f1d, 0x8ce4396e), TOBN(0x37a1a680, 0xa7ed2142), + TOBN(0xbf375696, 0xd01aaf6b), TOBN(0xaa1c0c54, 0xe63aab66)}}, + {{TOBN(0x3014368b, 0x4ed80940), TOBN(0x67e6d056, 0x7a6fcedd), + TOBN(0x7c208c49, 0xca97579f), TOBN(0xfe3d7a81, 0xa23597f6)}, + {TOBN(0x5e203202, 0x7e096ae2), TOBN(0xb1f3e1e7, 0x24b39366), + TOBN(0x26da26f3, 0x2fdcdffc), TOBN(0x79422f1d, 0x6097be83)}}}, + {{{TOBN(0x263a2cfb, 0x9db3b381), TOBN(0x9c3a2dee, 0xd4df0a4b), + TOBN(0x728d06e9, 0x7d04e61f), TOBN(0x8b1adfbc, 0x42449325)}, + {TOBN(0x6ec1d939, 0x7e053a1b), TOBN(0xee2be5c7, 0x66daf707), + TOBN(0x80ba1e14, 0x810ac7ab), TOBN(0xdd2ae778, 0xf530f174)}}, + {{TOBN(0x0435d97a, 0x205b9d8b), TOBN(0x6eb8f064, 0x056756d4), + TOBN(0xd5e88a8b, 0xb6f8210e), TOBN(0x070ef12d, 0xec9fd9ea)}, + {TOBN(0x4d849505, 0x3bcc876a), TOBN(0x12a75338, 0xa7404ce3), + TOBN(0xd22b49e1, 0xb8a1db5e), TOBN(0xec1f2051, 0x14bfa5ad)}}, + {{TOBN(0xadbaeb79, 0xb6828f36), TOBN(0x9d7a0258, 0x01bd5b9e), + TOBN(0xeda01e0d, 0x1e844b0c), TOBN(0x4b625175, 0x887edfc9)}, + {TOBN(0x14109fdd, 0x9669b621), TOBN(0x88a2ca56, 0xf6f87b98), + TOBN(0xfe2eb788, 0x170df6bc), TOBN(0x0cea06f4, 0xffa473f9)}}, + {{TOBN(0x43ed81b5, 0xc4e83d33), TOBN(0xd9f35879, 0x5efd488b), + TOBN(0x164a620f, 0x9deb4d0f), TOBN(0xc6927bdb, 0xac6a7394)}, + {TOBN(0x45c28df7, 0x9f9e0f03), TOBN(0x2868661e, 0xfcd7e1a9), + TOBN(0x7cf4e8d0, 0xffa348f1), TOBN(0x6bd4c284, 0x398538e0)}}, + {{TOBN(0x2618a091, 0x289a8619), TOBN(0xef796e60, 0x6671b173), + TOBN(0x664e46e5, 0x9090c632), TOBN(0xa38062d4, 0x1e66f8fb)}, + {TOBN(0x6c744a20, 0x0573274e), TOBN(0xd07b67e4, 0xa9271394), + TOBN(0x391223b2, 0x6bdc0e20), TOBN(0xbe2d93f1, 0xeb0a05a7)}}, + {{TOBN(0xf23e2e53, 0x3f36d141), TOBN(0xe84bb3d4, 0x4dfca442), + TOBN(0xb804a48d, 0x6b7c023a), TOBN(0x1e16a8fa, 0x76431c3b)}, + {TOBN(0x1b5452ad, 0xddd472e0), TOBN(0x7d405ee7, 0x0d1ee127), + TOBN(0x50fc6f1d, 0xffa27599), TOBN(0x351ac53c, 0xbf391b35)}}, + {{TOBN(0x7efa14b8, 0x4444896b), TOBN(0x64974d2f, 0xf94027fb), + TOBN(0xefdcd0e8, 0xde84487d), TOBN(0x8c45b260, 0x2b48989b)}, + {TOBN(0xa8fcbbc2, 0xd8463487), TOBN(0xd1b2b3f7, 0x3fbc476c), + TOBN(0x21d005b7, 0xc8f443c0), TOBN(0x518f2e67, 0x40c0139c)}}, + {{TOBN(0x56036e8c, 0x06d75fc1), TOBN(0x2dcf7bb7, 0x3249a89f), + TOBN(0x81dd1d3d, 0xe245e7dd), TOBN(0xf578dc4b, 0xebd6e2a7)}, + {TOBN(0x4c028903, 0xdf2ce7a0), TOBN(0xaee36288, 0x9c39afac), + TOBN(0xdc847c31, 0x146404ab), TOBN(0x6304c0d8, 0xa4e97818)}}, + {{TOBN(0xae51dca2, 0xa91f6791), TOBN(0x2abe4190, 0x9baa9efc), + TOBN(0xd9d2e2f4, 0x559c7ac1), TOBN(0xe82f4b51, 0xfc9f773a)}, + {TOBN(0xa7713027, 0x4073e81c), TOBN(0xc0276fac, 0xfbb596fc), + TOBN(0x1d819fc9, 0xa684f70c), TOBN(0x29b47fdd, 0xc9f7b1e0)}}, + {{TOBN(0x358de103, 0x459b1940), TOBN(0xec881c59, 0x5b013e93), + TOBN(0x51574c93, 0x49532ad3), TOBN(0x2db1d445, 0xb37b46de)}, + {TOBN(0xc6445b87, 0xdf239fd8), TOBN(0xc718af75, 0x151d24ee), + TOBN(0xaea1c4a4, 0xf43c6259), TOBN(0x40c0e5d7, 0x70be02f7)}}, + {{TOBN(0x6a4590f4, 0x721b33f2), TOBN(0x2124f1fb, 0xfedf04ea), + TOBN(0xf8e53cde, 0x9745efe7), TOBN(0xe7e10432, 0x65f046d9)}, + {TOBN(0xc3fca28e, 0xe4d0c7e6), TOBN(0x847e339a, 0x87253b1b), + TOBN(0x9b595348, 0x3743e643), TOBN(0xcb6a0a0b, 0x4fd12fc5)}}, + {{TOBN(0xfb6836c3, 0x27d02dcc), TOBN(0x5ad00982, 0x7a68bcc2), + TOBN(0x1b24b44c, 0x005e912d), TOBN(0xcc83d20f, 0x811fdcfe)}, + {TOBN(0x36527ec1, 0x666fba0c), TOBN(0x69948197, 0x14754635), + TOBN(0xfcdcb1a8, 0x556da9c2), TOBN(0xa5934267, 0x81a732b2)}}, + {{TOBN(0xec1214ed, 0xa714181d), TOBN(0x609ac13b, 0x6067b341), + TOBN(0xff4b4c97, 0xa545df1f), TOBN(0xa1240501, 0x34d2076b)}, + {TOBN(0x6efa0c23, 0x1409ca97), TOBN(0x254cc1a8, 0x20638c43), + TOBN(0xd4e363af, 0xdcfb46cd), TOBN(0x62c2adc3, 0x03942a27)}}, + {{TOBN(0xc67b9df0, 0x56e46483), TOBN(0xa55abb20, 0x63736356), + TOBN(0xab93c098, 0xc551bc52), TOBN(0x382b49f9, 0xb15fe64b)}, + {TOBN(0x9ec221ad, 0x4dff8d47), TOBN(0x79caf615, 0x437df4d6), + TOBN(0x5f13dc64, 0xbb456509), TOBN(0xe4c589d9, 0x191f0714)}}, + {{TOBN(0x27b6a8ab, 0x3fd40e09), TOBN(0xe455842e, 0x77313ea9), + TOBN(0x8b51d1e2, 0x1f55988b), TOBN(0x5716dd73, 0x062bbbfc)}, + {TOBN(0x633c11e5, 0x4e8bf3de), TOBN(0x9a0e77b6, 0x1b85be3b), + TOBN(0x56510729, 0x0911cca6), TOBN(0x27e76495, 0xefa6590f)}}, + {{TOBN(0xe4ac8b33, 0x070d3aab), TOBN(0x2643672b, 0x9a2cd5e5), + TOBN(0x52eff79b, 0x1cfc9173), TOBN(0x665ca49b, 0x90a7c13f)}, + {TOBN(0x5a8dda59, 0xb3efb998), TOBN(0x8a5b922d, 0x052f1341), + TOBN(0xae9ebbab, 0x3cf9a530), TOBN(0x35986e7b, 0xf56da4d7)}}, + {{TOBN(0x3a636b5c, 0xff3513cc), TOBN(0xbb0cf8ba, 0x3198f7dd), + TOBN(0xb8d40522, 0x41f16f86), TOBN(0x760575d8, 0xde13a7bf)}, + {TOBN(0x36f74e16, 0x9f7aa181), TOBN(0x163a3ecf, 0xf509ed1c), + TOBN(0x6aead61f, 0x3c40a491), TOBN(0x158c95fc, 0xdfe8fcaa)}}, + {{TOBN(0xa3991b6e, 0x13cda46f), TOBN(0x79482415, 0x342faed0), + TOBN(0xf3ba5bde, 0x666b5970), TOBN(0x1d52e6bc, 0xb26ab6dd)}, + {TOBN(0x768ba1e7, 0x8608dd3d), TOBN(0x4930db2a, 0xea076586), + TOBN(0xd9575714, 0xe7dc1afa), TOBN(0x1fc7bf7d, 0xf7c58817)}}, + {{TOBN(0x6b47accd, 0xd9eee96c), TOBN(0x0ca277fb, 0xe58cec37), + TOBN(0x113fe413, 0xe702c42a), TOBN(0xdd1764ee, 0xc47cbe51)}, + {TOBN(0x041e7cde, 0x7b3ed739), TOBN(0x50cb7459, 0x5ce9e1c0), + TOBN(0x35568513, 0x2925b212), TOBN(0x7cff95c4, 0x001b081c)}}, + {{TOBN(0x63ee4cbd, 0x8088b454), TOBN(0xdb7f32f7, 0x9a9e0c8a), + TOBN(0xb377d418, 0x6b2447cb), TOBN(0xe3e982aa, 0xd370219b)}, + {TOBN(0x06ccc1e4, 0xc2a2a593), TOBN(0x72c36865, 0x0773f24f), + TOBN(0xa13b4da7, 0x95859423), TOBN(0x8bbf1d33, 0x75040c8f)}}, + {{TOBN(0x726f0973, 0xda50c991), TOBN(0x48afcd5b, 0x822d6ee2), + TOBN(0xe5fc718b, 0x20fd7771), TOBN(0xb9e8e77d, 0xfd0807a1)}, + {TOBN(0x7f5e0f44, 0x99a7703d), TOBN(0x6972930e, 0x618e36f3), + TOBN(0x2b7c77b8, 0x23807bbe), TOBN(0xe5b82405, 0xcb27ff50)}}, + {{TOBN(0xba8b8be3, 0xbd379062), TOBN(0xd64b7a1d, 0x2dce4a92), + TOBN(0x040a73c5, 0xb2952e37), TOBN(0x0a9e252e, 0xd438aeca)}, + {TOBN(0xdd43956b, 0xc39d3bcb), TOBN(0x1a31ca00, 0xb32b2d63), + TOBN(0xd67133b8, 0x5c417a18), TOBN(0xd08e4790, 0x2ef442c8)}}, + {{TOBN(0x98cb1ae9, 0x255c0980), TOBN(0x4bd86381, 0x2b4a739f), + TOBN(0x5a5c31e1, 0x1e4a45a1), TOBN(0x1e5d55fe, 0x9cb0db2f)}, + {TOBN(0x74661b06, 0x8ff5cc29), TOBN(0x026b389f, 0x0eb8a4f4), + TOBN(0x536b21a4, 0x58848c24), TOBN(0x2e5bf8ec, 0x81dc72b0)}}, + {{TOBN(0x03c187d0, 0xad886aac), TOBN(0x5c16878a, 0xb771b645), + TOBN(0xb07dfc6f, 0xc74045ab), TOBN(0x2c6360bf, 0x7800caed)}, + {TOBN(0x24295bb5, 0xb9c972a3), TOBN(0xc9e6f88e, 0x7c9a6dba), + TOBN(0x90ffbf24, 0x92a79aa6), TOBN(0xde29d50a, 0x41c26ac2)}}, + {{TOBN(0x9f0af483, 0xd309cbe6), TOBN(0x5b020d8a, 0xe0bced4f), + TOBN(0x606e986d, 0xb38023e3), TOBN(0xad8f2c9d, 0x1abc6933)}, + {TOBN(0x19292e1d, 0xe7400e93), TOBN(0xfe3e18a9, 0x52be5e4d), + TOBN(0xe8e9771d, 0x2e0680bf), TOBN(0x8c5bec98, 0xc54db063)}}, + {{TOBN(0x2af9662a, 0x74a55d1f), TOBN(0xe3fbf28f, 0x046f66d8), + TOBN(0xa3a72ab4, 0xd4dc4794), TOBN(0x09779f45, 0x5c7c2dd8)}, + {TOBN(0xd893bdaf, 0xc3d19d8d), TOBN(0xd5a75094, 0x57d6a6df), + TOBN(0x8cf8fef9, 0x952e6255), TOBN(0x3da67cfb, 0xda9a8aff)}}, + {{TOBN(0x4c23f62a, 0x2c160dcd), TOBN(0x34e6c5e3, 0x8f90eaef), + TOBN(0x35865519, 0xa9a65d5a), TOBN(0x07c48aae, 0x8fd38a3d)}, + {TOBN(0xb7e7aeda, 0x50068527), TOBN(0x2c09ef23, 0x1c90936a), + TOBN(0x31ecfeb6, 0xe879324c), TOBN(0xa0871f6b, 0xfb0ec938)}}, + {{TOBN(0xb1f0fb68, 0xd84d835d), TOBN(0xc90caf39, 0x861dc1e6), + TOBN(0x12e5b046, 0x7594f8d7), TOBN(0x26897ae2, 0x65012b92)}, + {TOBN(0xbcf68a08, 0xa4d6755d), TOBN(0x403ee41c, 0x0991fbda), + TOBN(0x733e343e, 0x3bbf17e8), TOBN(0xd2c7980d, 0x679b3d65)}}, + {{TOBN(0x33056232, 0xd2e11305), TOBN(0x966be492, 0xf3c07a6f), + TOBN(0x6a8878ff, 0xbb15509d), TOBN(0xff221101, 0x0a9b59a4)}, + {TOBN(0x6c9f564a, 0xabe30129), TOBN(0xc6f2c940, 0x336e64cf), + TOBN(0x0fe75262, 0x8b0c8022), TOBN(0xbe0267e9, 0x6ae8db87)}}, + {{TOBN(0x22e192f1, 0x93bc042b), TOBN(0xf085b534, 0xb237c458), + TOBN(0xa0d192bd, 0x832c4168), TOBN(0x7a76e9e3, 0xbdf6271d)}, + {TOBN(0x52a882fa, 0xb88911b5), TOBN(0xc85345e4, 0xb4db0eb5), + TOBN(0xa3be02a6, 0x81a7c3ff), TOBN(0x51889c8c, 0xf0ec0469)}}, + {{TOBN(0x9d031369, 0xa5e829e5), TOBN(0xcbb4c6fc, 0x1607aa41), + TOBN(0x75ac59a6, 0x241d84c1), TOBN(0xc043f2bf, 0x8829e0ee)}, + {TOBN(0x82a38f75, 0x8ea5e185), TOBN(0x8bda40b9, 0xd87cbd9f), + TOBN(0x9e65e75e, 0x2d8fc601), TOBN(0x3d515f74, 0xa35690b3)}}, + {{TOBN(0x534acf4f, 0xda79e5ac), TOBN(0x68b83b3a, 0x8630215f), + TOBN(0x5c748b2e, 0xd085756e), TOBN(0xb0317258, 0xe5d37cb2)}, + {TOBN(0x6735841a, 0xc5ccc2c4), TOBN(0x7d7dc96b, 0x3d9d5069), + TOBN(0xa147e410, 0xfd1754bd), TOBN(0x65296e94, 0xd399ddd5)}}, + {{TOBN(0xf6b5b2d0, 0xbc8fa5bc), TOBN(0x8a5ead67, 0x500c277b), + TOBN(0x214625e6, 0xdfa08a5d), TOBN(0x51fdfedc, 0x959cf047)}, + {TOBN(0x6bc9430b, 0x289fca32), TOBN(0xe36ff0cf, 0x9d9bdc3f), + TOBN(0x2fe187cb, 0x58ea0ede), TOBN(0xed66af20, 0x5a900b3f)}}, + {{TOBN(0x00e0968b, 0x5fa9f4d6), TOBN(0x2d4066ce, 0x37a362e7), + TOBN(0xa99a9748, 0xbd07e772), TOBN(0x710989c0, 0x06a4f1d0)}, + {TOBN(0xd5dedf35, 0xce40cbd8), TOBN(0xab55c5f0, 0x1743293d), + TOBN(0x766f1144, 0x8aa24e2c), TOBN(0x94d874f8, 0x605fbcb4)}}, + {{TOBN(0xa365f0e8, 0xa518001b), TOBN(0xee605eb6, 0x9d04ef0f), + TOBN(0x5a3915cd, 0xba8d4d25), TOBN(0x44c0e1b8, 0xb5113472)}, + {TOBN(0xcbb024e8, 0x8b6740dc), TOBN(0x89087a53, 0xee1d4f0c), + TOBN(0xa88fa05c, 0x1fc4e372), TOBN(0x8bf395cb, 0xaf8b3af2)}}, + {{TOBN(0x1e71c9a1, 0xdeb8568b), TOBN(0xa35daea0, 0x80fb3d32), + TOBN(0xe8b6f266, 0x2cf8fb81), TOBN(0x6d51afe8, 0x9490696a)}, + {TOBN(0x81beac6e, 0x51803a19), TOBN(0xe3d24b7f, 0x86219080), + TOBN(0x727cfd9d, 0xdf6f463c), TOBN(0x8c6865ca, 0x72284ee8)}}, + {{TOBN(0x32c88b7d, 0xb743f4ef), TOBN(0x3793909b, 0xe7d11dce), + TOBN(0xd398f922, 0x2ff2ebe8), TOBN(0x2c70ca44, 0xe5e49796)}, + {TOBN(0xdf4d9929, 0xcb1131b1), TOBN(0x7826f298, 0x25888e79), + TOBN(0x4d3a112c, 0xf1d8740a), TOBN(0x00384cb6, 0x270afa8b)}}, + {{TOBN(0xcb64125b, 0x3ab48095), TOBN(0x3451c256, 0x62d05106), + TOBN(0xd73d577d, 0xa4955845), TOBN(0x39570c16, 0xbf9f4433)}, + {TOBN(0xd7dfaad3, 0xadecf263), TOBN(0xf1c3d8d1, 0xdc76e102), + TOBN(0x5e774a58, 0x54c6a836), TOBN(0xdad4b672, 0x3e92d47b)}}, + {{TOBN(0xbe7e990f, 0xf0d796a0), TOBN(0x5fc62478, 0xdf0e8b02), + TOBN(0x8aae8bf4, 0x030c00ad), TOBN(0x3d2db93b, 0x9004ba0f)}, + {TOBN(0xe48c8a79, 0xd85d5ddc), TOBN(0xe907caa7, 0x6bb07f34), + TOBN(0x58db343a, 0xa39eaed5), TOBN(0x0ea6e007, 0xadaf5724)}}, + {{TOBN(0xe00df169, 0xd23233f3), TOBN(0x3e322796, 0x77cb637f), + TOBN(0x1f897c0e, 0x1da0cf6c), TOBN(0xa651f5d8, 0x31d6bbdd)}, + {TOBN(0xdd61af19, 0x1a230c76), TOBN(0xbd527272, 0xcdaa5e4a), + TOBN(0xca753636, 0xd0abcd7e), TOBN(0x78bdd37c, 0x370bd8dc)}}, + {{TOBN(0xc23916c2, 0x17cd93fe), TOBN(0x65b97a4d, 0xdadce6e2), + TOBN(0xe04ed4eb, 0x174e42f8), TOBN(0x1491ccaa, 0xbb21480a)}, + {TOBN(0x145a8280, 0x23196332), TOBN(0x3c3862d7, 0x587b479a), + TOBN(0x9f4a88a3, 0x01dcd0ed), TOBN(0x4da2b7ef, 0x3ea12f1f)}}, + {{TOBN(0xf8e7ae33, 0xb126e48e), TOBN(0x404a0b32, 0xf494e237), + TOBN(0x9beac474, 0xc55acadb), TOBN(0x4ee5cf3b, 0xcbec9fd9)}, + {TOBN(0x336b33b9, 0x7df3c8c3), TOBN(0xbd905fe3, 0xb76808fd), + TOBN(0x8f436981, 0xaa45c16a), TOBN(0x255c5bfa, 0x3dd27b62)}}, + {{TOBN(0x71965cbf, 0xc3dd9b4d), TOBN(0xce23edbf, 0xfc068a87), + TOBN(0xb78d4725, 0x745b029b), TOBN(0x74610713, 0xcefdd9bd)}, + {TOBN(0x7116f75f, 0x1266bf52), TOBN(0x02046722, 0x18e49bb6), + TOBN(0xdf43df9f, 0x3d6f19e3), TOBN(0xef1bc7d0, 0xe685cb2f)}}, + {{TOBN(0xcddb27c1, 0x7078c432), TOBN(0xe1961b9c, 0xb77fedb7), + TOBN(0x1edc2f5c, 0xc2290570), TOBN(0x2c3fefca, 0x19cbd886)}, + {TOBN(0xcf880a36, 0xc2af389a), TOBN(0x96c610fd, 0xbda71cea), + TOBN(0xf03977a9, 0x32aa8463), TOBN(0x8eb7763f, 0x8586d90a)}}, + {{TOBN(0x3f342454, 0x2a296e77), TOBN(0xc8718683, 0x42837a35), + TOBN(0x7dc71090, 0x6a09c731), TOBN(0x54778ffb, 0x51b816db)}, + {TOBN(0x6b33bfec, 0xaf06defd), TOBN(0xfe3c105f, 0x8592b70b), + TOBN(0xf937fda4, 0x61da6114), TOBN(0x3c13e651, 0x4c266ad7)}}, + {{TOBN(0xe363a829, 0x855938e8), TOBN(0x2eeb5d9e, 0x9de54b72), + TOBN(0xbeb93b0e, 0x20ccfab9), TOBN(0x3dffbb5f, 0x25e61a25)}, + {TOBN(0x7f655e43, 0x1acc093d), TOBN(0x0cb6cc3d, 0x3964ce61), + TOBN(0x6ab283a1, 0xe5e9b460), TOBN(0x55d787c5, 0xa1c7e72d)}}, + {{TOBN(0x4d2efd47, 0xdeadbf02), TOBN(0x11e80219, 0xac459068), + TOBN(0x810c7626, 0x71f311f0), TOBN(0xfa17ef8d, 0x4ab6ef53)}, + {TOBN(0xaf47fd25, 0x93e43bff), TOBN(0x5cb5ff3f, 0x0be40632), + TOBN(0x54687106, 0x8ee61da3), TOBN(0x7764196e, 0xb08afd0f)}}, + {{TOBN(0x831ab3ed, 0xf0290a8f), TOBN(0xcae81966, 0xcb47c387), + TOBN(0xaad7dece, 0x184efb4f), TOBN(0xdcfc53b3, 0x4749110e)}, + {TOBN(0x6698f23c, 0x4cb632f9), TOBN(0xc42a1ad6, 0xb91f8067), + TOBN(0xb116a81d, 0x6284180a), TOBN(0xebedf5f8, 0xe901326f)}}, + {{TOBN(0xf2274c9f, 0x97e3e044), TOBN(0x42018520, 0x11d09fc9), + TOBN(0x56a65f17, 0xd18e6e23), TOBN(0x2ea61e2a, 0x352b683c)}, + {TOBN(0x27d291bc, 0x575eaa94), TOBN(0x9e7bc721, 0xb8ff522d), + TOBN(0x5f7268bf, 0xa7f04d6f), TOBN(0x5868c73f, 0xaba41748)}}, + {{TOBN(0x9f85c2db, 0x7be0eead), TOBN(0x511e7842, 0xff719135), + TOBN(0x5a06b1e9, 0xc5ea90d7), TOBN(0x0c19e283, 0x26fab631)}, + {TOBN(0x8af8f0cf, 0xe9206c55), TOBN(0x89389cb4, 0x3553c06a), + TOBN(0x39dbed97, 0xf65f8004), TOBN(0x0621b037, 0xc508991d)}}, + {{TOBN(0x1c52e635, 0x96e78cc4), TOBN(0x5385c8b2, 0x0c06b4a8), + TOBN(0xd84ddfdb, 0xb0e87d03), TOBN(0xc49dfb66, 0x934bafad)}, + {TOBN(0x7071e170, 0x59f70772), TOBN(0x3a073a84, 0x3a1db56b), + TOBN(0x03494903, 0x3b8af190), TOBN(0x7d882de3, 0xd32920f0)}}, + {{TOBN(0x91633f0a, 0xb2cf8940), TOBN(0x72b0b178, 0x6f948f51), + TOBN(0x2d28dc30, 0x782653c8), TOBN(0x88829849, 0xdb903a05)}, + {TOBN(0xb8095d0c, 0x6a19d2bb), TOBN(0x4b9e7f0c, 0x86f782cb), + TOBN(0x7af73988, 0x2d907064), TOBN(0xd12be0fe, 0x8b32643c)}}, + {{TOBN(0x358ed23d, 0x0e165dc3), TOBN(0x3d47ce62, 0x4e2378ce), + TOBN(0x7e2bb0b9, 0xfeb8a087), TOBN(0x3246e8ae, 0xe29e10b9)}, + {TOBN(0x459f4ec7, 0x03ce2b4d), TOBN(0xe9b4ca1b, 0xbbc077cf), + TOBN(0x2613b4f2, 0x0e9940c1), TOBN(0xfc598bb9, 0x047d1eb1)}}, + {{TOBN(0x9744c62b, 0x45036099), TOBN(0xa9dee742, 0x167c65d8), + TOBN(0x0c511525, 0xdabe1943), TOBN(0xda110554, 0x93c6c624)}, + {TOBN(0xae00a52c, 0x651a3be2), TOBN(0xcda5111d, 0x884449a6), + TOBN(0x063c06f4, 0xff33bed1), TOBN(0x73baaf9a, 0x0d3d76b4)}}, + {{TOBN(0x52fb0c9d, 0x7fc63668), TOBN(0x6886c9dd, 0x0c039cde), + TOBN(0x602bd599, 0x55b22351), TOBN(0xb00cab02, 0x360c7c13)}, + {TOBN(0x8cb616bc, 0x81b69442), TOBN(0x41486700, 0xb55c3cee), + TOBN(0x71093281, 0xf49ba278), TOBN(0xad956d9c, 0x64a50710)}}, + {{TOBN(0x9561f28b, 0x638a7e81), TOBN(0x54155cdf, 0x5980ddc3), + TOBN(0xb2db4a96, 0xd26f247a), TOBN(0x9d774e4e, 0x4787d100)}, + {TOBN(0x1a9e6e2e, 0x078637d2), TOBN(0x1c363e2d, 0x5e0ae06a), + TOBN(0x7493483e, 0xe9cfa354), TOBN(0x76843cb3, 0x7f74b98d)}}, + {{TOBN(0xbaca6591, 0xd4b66947), TOBN(0xb452ce98, 0x04460a8c), + TOBN(0x6830d246, 0x43768f55), TOBN(0xf4197ed8, 0x7dff12df)}, + {TOBN(0x6521b472, 0x400dd0f7), TOBN(0x59f5ca8f, 0x4b1e7093), + TOBN(0x6feff11b, 0x080338ae), TOBN(0x0ada31f6, 0xa29ca3c6)}}, + {{TOBN(0x24794eb6, 0x94a2c215), TOBN(0xd83a43ab, 0x05a57ab4), + TOBN(0x264a543a, 0x2a6f89fe), TOBN(0x2c2a3868, 0xdd5ec7c2)}, + {TOBN(0xd3373940, 0x8439d9b2), TOBN(0x715ea672, 0x0acd1f11), + TOBN(0x42c1d235, 0xe7e6cc19), TOBN(0x81ce6e96, 0xb990585c)}}, + {{TOBN(0x04e5dfe0, 0xd809c7bd), TOBN(0xd7b2580c, 0x8f1050ab), + TOBN(0x6d91ad78, 0xd8a4176f), TOBN(0x0af556ee, 0x4e2e897c)}, + {TOBN(0x162a8b73, 0x921de0ac), TOBN(0x52ac9c22, 0x7ea78400), + TOBN(0xee2a4eea, 0xefce2174), TOBN(0xbe61844e, 0x6d637f79)}}, + {{TOBN(0x0491f1bc, 0x789a283b), TOBN(0x72d3ac3d, 0x880836f4), + TOBN(0xaa1c5ea3, 0x88e5402d), TOBN(0x1b192421, 0xd5cc473d)}, + {TOBN(0x5c0b9998, 0x9dc84cac), TOBN(0xb0a8482d, 0x9c6e75b8), + TOBN(0x639961d0, 0x3a191ce2), TOBN(0xda3bc865, 0x6d837930)}}, + {{TOBN(0xca990653, 0x056e6f8f), TOBN(0x84861c41, 0x64d133a7), + TOBN(0x8b403276, 0x746abe40), TOBN(0xb7b4d51a, 0xebf8e303)}, + {TOBN(0x05b43211, 0x220a255d), TOBN(0xc997152c, 0x02419e6e), + TOBN(0x76ff47b6, 0x630c2fea), TOBN(0x50518677, 0x281fdade)}}, + {{TOBN(0x3283b8ba, 0xcf902b0b), TOBN(0x8d4b4eb5, 0x37db303b), + TOBN(0xcc89f42d, 0x755011bc), TOBN(0xb43d74bb, 0xdd09d19b)}, + {TOBN(0x65746bc9, 0x8adba350), TOBN(0x364eaf8c, 0xb51c1927), + TOBN(0x13c76596, 0x10ad72ec), TOBN(0x30045121, 0xf8d40c20)}}, + {{TOBN(0x6d2d99b7, 0xea7b979b), TOBN(0xcd78cd74, 0xe6fb3bcd), + TOBN(0x11e45a9e, 0x86cffbfe), TOBN(0x78a61cf4, 0x637024f6)}, + {TOBN(0xd06bc872, 0x3d502295), TOBN(0xf1376854, 0x458cb288), + TOBN(0xb9db26a1, 0x342f8586), TOBN(0xf33effcf, 0x4beee09e)}}, + {{TOBN(0xd7e0c4cd, 0xb30cfb3a), TOBN(0x6d09b8c1, 0x6c9db4c8), + TOBN(0x40ba1a42, 0x07c8d9df), TOBN(0x6fd495f7, 0x1c52c66d)}, + {TOBN(0xfb0e169f, 0x275264da), TOBN(0x80c2b746, 0xe57d8362), + TOBN(0xedd987f7, 0x49ad7222), TOBN(0xfdc229af, 0x4398ec7b)}}}, + {{{TOBN(0xb0d1ed84, 0x52666a58), TOBN(0x4bcb6e00, 0xe6a9c3c2), + TOBN(0x3c57411c, 0x26906408), TOBN(0xcfc20755, 0x13556400)}, + {TOBN(0xa08b1c50, 0x5294dba3), TOBN(0xa30ba286, 0x8b7dd31e), + TOBN(0xd70ba90e, 0x991eca74), TOBN(0x094e142c, 0xe762c2b9)}}, + {{TOBN(0xb81d783e, 0x979f3925), TOBN(0x1efd130a, 0xaf4c89a7), + TOBN(0x525c2144, 0xfd1bf7fa), TOBN(0x4b296904, 0x1b265a9e)}, + {TOBN(0xed8e9634, 0xb9db65b6), TOBN(0x35c82e32, 0x03599d8a), + TOBN(0xdaa7a54f, 0x403563f3), TOBN(0x9df088ad, 0x022c38ab)}}, + {{TOBN(0xe5cfb066, 0xbb3fd30a), TOBN(0x429169da, 0xeff0354e), + TOBN(0x809cf852, 0x3524e36c), TOBN(0x136f4fb3, 0x0155be1d)}, + {TOBN(0x4826af01, 0x1fbba712), TOBN(0x6ef0f0b4, 0x506ba1a1), + TOBN(0xd9928b31, 0x77aea73e), TOBN(0xe2bf6af2, 0x5eaa244e)}}, + {{TOBN(0x8d084f12, 0x4237b64b), TOBN(0x688ebe99, 0xe3ecfd07), + TOBN(0x57b8a70c, 0xf6845dd8), TOBN(0x808fc59c, 0x5da4a325)}, + {TOBN(0xa9032b2b, 0xa3585862), TOBN(0xb66825d5, 0xedf29386), + TOBN(0xb5a5a8db, 0x431ec29b), TOBN(0xbb143a98, 0x3a1e8dc8)}}, + {{TOBN(0x35ee94ce, 0x12ae381b), TOBN(0x3a7f176c, 0x86ccda90), + TOBN(0xc63a657e, 0x4606eaca), TOBN(0x9ae5a380, 0x43cd04df)}, + {TOBN(0x9bec8d15, 0xed251b46), TOBN(0x1f5d6d30, 0xcaca5e64), + TOBN(0x347b3b35, 0x9ff20f07), TOBN(0x4d65f034, 0xf7e4b286)}}, + {{TOBN(0x9e93ba24, 0xf111661e), TOBN(0xedced484, 0xb105eb04), + TOBN(0x96dc9ba1, 0xf424b578), TOBN(0xbf8f66b7, 0xe83e9069)}, + {TOBN(0x872d4df4, 0xd7ed8216), TOBN(0xbf07f377, 0x8e2cbecf), + TOBN(0x4281d899, 0x98e73754), TOBN(0xfec85fbb, 0x8aab8708)}}, + {{TOBN(0x9a3c0dee, 0xa5ba5b0b), TOBN(0xe6a116ce, 0x42d05299), + TOBN(0xae9775fe, 0xe9b02d42), TOBN(0x72b05200, 0xa1545cb6)}, + {TOBN(0xbc506f7d, 0x31a3b4ea), TOBN(0xe5893078, 0x8bbd9b32), + TOBN(0xc8bc5f37, 0xe4b12a97), TOBN(0x6b000c06, 0x4a73b671)}}, + {{TOBN(0x13b5bf22, 0x765fa7d0), TOBN(0x59805bf0, 0x1d6a5370), + TOBN(0x67a5e29d, 0x4280db98), TOBN(0x4f53916f, 0x776b1ce3)}, + {TOBN(0x714ff61f, 0x33ddf626), TOBN(0x4206238e, 0xa085d103), + TOBN(0x1c50d4b7, 0xe5809ee3), TOBN(0x999f450d, 0x85f8eb1d)}}, + {{TOBN(0x658a6051, 0xe4c79e9b), TOBN(0x1394cb73, 0xc66a9fea), + TOBN(0x27f31ed5, 0xc6be7b23), TOBN(0xf4c88f36, 0x5aa6f8fe)}, + {TOBN(0x0fb0721f, 0x4aaa499e), TOBN(0x68b3a7d5, 0xe3fb2a6b), + TOBN(0xa788097d, 0x3a92851d), TOBN(0x060e7f8a, 0xe96f4913)}}, + {{TOBN(0x82eebe73, 0x1a3a93bc), TOBN(0x42bbf465, 0xa21adc1a), + TOBN(0xc10b6fa4, 0xef030efd), TOBN(0x247aa4c7, 0x87b097bb)}, + {TOBN(0x8b8dc632, 0xf60c77da), TOBN(0x6ffbc26a, 0xc223523e), + TOBN(0xa4f6ff11, 0x344579cf), TOBN(0x5825653c, 0x980250f6)}}, + {{TOBN(0xb2dd097e, 0xbc1aa2b9), TOBN(0x07889393, 0x37a0333a), + TOBN(0x1cf55e71, 0x37a0db38), TOBN(0x2648487f, 0x792c1613)}, + {TOBN(0xdad01336, 0x3fcef261), TOBN(0x6239c81d, 0x0eabf129), + TOBN(0x8ee761de, 0x9d276be2), TOBN(0x406a7a34, 0x1eda6ad3)}}, + {{TOBN(0x4bf367ba, 0x4a493b31), TOBN(0x54f20a52, 0x9bf7f026), + TOBN(0xb696e062, 0x9795914b), TOBN(0xcddab96d, 0x8bf236ac)}, + {TOBN(0x4ff2c70a, 0xed25ea13), TOBN(0xfa1d09eb, 0x81cbbbe7), + TOBN(0x88fc8c87, 0x468544c5), TOBN(0x847a670d, 0x696b3317)}}, + {{TOBN(0xf133421e, 0x64bcb626), TOBN(0xaea638c8, 0x26dee0b5), + TOBN(0xd6e7680b, 0xb310346c), TOBN(0xe06f4097, 0xd5d4ced3)}, + {TOBN(0x09961452, 0x7512a30b), TOBN(0xf3d867fd, 0xe589a59a), + TOBN(0x2e73254f, 0x52d0c180), TOBN(0x9063d8a3, 0x333c74ac)}}, + {{TOBN(0xeda6c595, 0xd314e7bc), TOBN(0x2ee7464b, 0x467899ed), + TOBN(0x1cef423c, 0x0a1ed5d3), TOBN(0x217e76ea, 0x69cc7613)}, + {TOBN(0x27ccce1f, 0xe7cda917), TOBN(0x12d8016b, 0x8a893f16), + TOBN(0xbcd6de84, 0x9fc74f6b), TOBN(0xfa5817e2, 0xf3144e61)}}, + {{TOBN(0x1f354164, 0x0821ee4c), TOBN(0x1583eab4, 0x0bc61992), + TOBN(0x7490caf6, 0x1d72879f), TOBN(0x998ad9f3, 0xf76ae7b2)}, + {TOBN(0x1e181950, 0xa41157f7), TOBN(0xa9d7e1e6, 0xe8da3a7e), + TOBN(0x963784eb, 0x8426b95f), TOBN(0x0ee4ed6e, 0x542e2a10)}}, + {{TOBN(0xb79d4cc5, 0xac751e7b), TOBN(0x93f96472, 0xfd4211bd), + TOBN(0x8c72d3d2, 0xc8de4fc6), TOBN(0x7b69cbf5, 0xdf44f064)}, + {TOBN(0x3da90ca2, 0xf4bf94e1), TOBN(0x1a5325f8, 0xf12894e2), + TOBN(0x0a437f6c, 0x7917d60b), TOBN(0x9be70486, 0x96c9cb5d)}}, + {{TOBN(0xb4d880bf, 0xe1dc5c05), TOBN(0xd738adda, 0xeebeeb57), + TOBN(0x6f0119d3, 0xdf0fe6a3), TOBN(0x5c686e55, 0x66eaaf5a)}, + {TOBN(0x9cb10b50, 0xdfd0b7ec), TOBN(0xbdd0264b, 0x6a497c21), + TOBN(0xfc093514, 0x8c546c96), TOBN(0x58a947fa, 0x79dbf42a)}}, + {{TOBN(0xc0b48d4e, 0x49ccd6d7), TOBN(0xff8fb02c, 0x88bd5580), + TOBN(0xc75235e9, 0x07d473b2), TOBN(0x4fab1ac5, 0xa2188af3)}, + {TOBN(0x030fa3bc, 0x97576ec0), TOBN(0xe8c946e8, 0x0b7e7d2f), + TOBN(0x40a5c9cc, 0x70305600), TOBN(0x6d8260a9, 0xc8b013b4)}}, + {{TOBN(0x0368304f, 0x70bba85c), TOBN(0xad090da1, 0xa4a0d311), + TOBN(0x7170e870, 0x2415eec1), TOBN(0xbfba35fe, 0x8461ea47)}, + {TOBN(0x6279019a, 0xc1e91938), TOBN(0xa47638f3, 0x1afc415f), + TOBN(0x36c65cbb, 0xbcba0e0f), TOBN(0x02160efb, 0x034e2c48)}}, + {{TOBN(0xe6c51073, 0x615cd9e4), TOBN(0x498ec047, 0xf1243c06), + TOBN(0x3e5a8809, 0xb17b3d8c), TOBN(0x5cd99e61, 0x0cc565f1)}, + {TOBN(0x81e312df, 0x7851dafe), TOBN(0xf156f5ba, 0xa79061e2), + TOBN(0x80d62b71, 0x880c590e), TOBN(0xbec9746f, 0x0a39faa1)}}, + {{TOBN(0x1d98a9c1, 0xc8ed1f7a), TOBN(0x09e43bb5, 0xa81d5ff2), + TOBN(0xd5f00f68, 0x0da0794a), TOBN(0x412050d9, 0x661aa836)}, + {TOBN(0xa89f7c4e, 0x90747e40), TOBN(0x6dc05ebb, 0xb62a3686), + TOBN(0xdf4de847, 0x308e3353), TOBN(0x53868fbb, 0x9fb53bb9)}}, + {{TOBN(0x2b09d2c3, 0xcfdcf7dd), TOBN(0x41a9fce3, 0x723fcab4), + TOBN(0x73d905f7, 0x07f57ca3), TOBN(0x080f9fb1, 0xac8e1555)}, + {TOBN(0x7c088e84, 0x9ba7a531), TOBN(0x07d35586, 0xed9a147f), + TOBN(0x602846ab, 0xaf48c336), TOBN(0x7320fd32, 0x0ccf0e79)}}, + {{TOBN(0xaa780798, 0xb18bd1ff), TOBN(0x52c2e300, 0xafdd2905), + TOBN(0xf27ea3d6, 0x434267cd), TOBN(0x8b96d16d, 0x15605b5f)}, + {TOBN(0x7bb31049, 0x4b45706b), TOBN(0xe7f58b8e, 0x743d25f8), + TOBN(0xe9b5e45b, 0x87f30076), TOBN(0xd19448d6, 0x5d053d5a)}}, + {{TOBN(0x1ecc8cb9, 0xd3210a04), TOBN(0x6bc7d463, 0xdafb5269), + TOBN(0x3e59b10a, 0x67c3489f), TOBN(0x1769788c, 0x65641e1b)}, + {TOBN(0x8a53b82d, 0xbd6cb838), TOBN(0x7066d6e6, 0x236d5f22), + TOBN(0x03aa1c61, 0x6908536e), TOBN(0xc971da0d, 0x66ae9809)}}, + {{TOBN(0x01b3a86b, 0xc49a2fac), TOBN(0x3b8420c0, 0x3092e77a), + TOBN(0x02057300, 0x7d6fb556), TOBN(0x6941b2a1, 0xbff40a87)}, + {TOBN(0x140b6308, 0x0658ff2a), TOBN(0x87804363, 0x3424ab36), + TOBN(0x0253bd51, 0x5751e299), TOBN(0xc75bcd76, 0x449c3e3a)}}, + {{TOBN(0x92eb4090, 0x7f8f875d), TOBN(0x9c9d754e, 0x56c26bbf), + TOBN(0x158cea61, 0x8110bbe7), TOBN(0x62a6b802, 0x745f91ea)}, + {TOBN(0xa79c41aa, 0xc6e7394b), TOBN(0x445b6a83, 0xad57ef10), + TOBN(0x0c5277eb, 0x6ea6f40c), TOBN(0x319fe96b, 0x88633365)}}, + {{TOBN(0x0b0fc61f, 0x385f63cb), TOBN(0x41250c84, 0x22bdd127), + TOBN(0x67d153f1, 0x09e942c2), TOBN(0x60920d08, 0xc021ad5d)}, + {TOBN(0x229f5746, 0x724d81a5), TOBN(0xb7ffb892, 0x5bba3299), + TOBN(0x518c51a1, 0xde413032), TOBN(0x2a9bfe77, 0x3c2fd94c)}}, + {{TOBN(0xcbcde239, 0x3191f4fd), TOBN(0x43093e16, 0xd3d6ada1), + TOBN(0x184579f3, 0x58769606), TOBN(0x2c94a8b3, 0xd236625c)}, + {TOBN(0x6922b9c0, 0x5c437d8e), TOBN(0x3d4ae423, 0xd8d9f3c8), + TOBN(0xf72c31c1, 0x2e7090a2), TOBN(0x4ac3f5f3, 0xd76a55bd)}}, + {{TOBN(0x342508fc, 0x6b6af991), TOBN(0x0d527100, 0x1b5cebbd), + TOBN(0xb84740d0, 0xdd440dd7), TOBN(0x748ef841, 0x780162fd)}, + {TOBN(0xa8dbfe0e, 0xdfc6fafb), TOBN(0xeadfdf05, 0xf7300f27), + TOBN(0x7d06555f, 0xfeba4ec9), TOBN(0x12c56f83, 0x9e25fa97)}}, + {{TOBN(0x77f84203, 0xd39b8c34), TOBN(0xed8b1be6, 0x3125eddb), + TOBN(0x5bbf2441, 0xf6e39dc5), TOBN(0xb00f6ee6, 0x6a5d678a)}, + {TOBN(0xba456ecf, 0x57d0ea99), TOBN(0xdcae0f58, 0x17e06c43), + TOBN(0x01643de4, 0x0f5b4baa), TOBN(0x2c324341, 0xd161b9be)}}, + {{TOBN(0x80177f55, 0xe126d468), TOBN(0xed325f1f, 0x76748e09), + TOBN(0x6116004a, 0xcfa9bdc2), TOBN(0x2d8607e6, 0x3a9fb468)}, + {TOBN(0x0e573e27, 0x6009d660), TOBN(0x3a525d2e, 0x8d10c5a1), + TOBN(0xd26cb45c, 0x3b9009a0), TOBN(0xb6b0cdc0, 0xde9d7448)}}, + {{TOBN(0x949c9976, 0xe1337c26), TOBN(0x6faadebd, 0xd73d68e5), + TOBN(0x9e158614, 0xf1b768d9), TOBN(0x22dfa557, 0x9cc4f069)}, + {TOBN(0xccd6da17, 0xbe93c6d6), TOBN(0x24866c61, 0xa504f5b9), + TOBN(0x2121353c, 0x8d694da1), TOBN(0x1c6ca580, 0x0140b8c6)}}, + {{TOBN(0xc245ad8c, 0xe964021e), TOBN(0xb83bffba, 0x032b82b3), + TOBN(0xfaa220c6, 0x47ef9898), TOBN(0x7e8d3ac6, 0x982c948a)}, + {TOBN(0x1faa2091, 0xbc2d124a), TOBN(0xbd54c3dd, 0x05b15ff4), + TOBN(0x386bf3ab, 0xc87c6fb7), TOBN(0xfb2b0563, 0xfdeb6f66)}}, + {{TOBN(0x4e77c557, 0x5b45afb4), TOBN(0xe9ded649, 0xefb8912d), + TOBN(0x7ec9bbf5, 0x42f6e557), TOBN(0x2570dfff, 0x62671f00)}, + {TOBN(0x2b3bfb78, 0x88e084bd), TOBN(0xa024b238, 0xf37fe5b4), + TOBN(0x44e7dc04, 0x95649aee), TOBN(0x498ca255, 0x5e7ec1d8)}}, + {{TOBN(0x3bc766ea, 0xaaa07e86), TOBN(0x0db6facb, 0xf3608586), + TOBN(0xbadd2549, 0xbdc259c8), TOBN(0x95af3c6e, 0x041c649f)}, + {TOBN(0xb36a928c, 0x02e30afb), TOBN(0x9b5356ad, 0x008a88b8), + TOBN(0x4b67a5f1, 0xcf1d9e9d), TOBN(0xc6542e47, 0xa5d8d8ce)}}, + {{TOBN(0x73061fe8, 0x7adfb6cc), TOBN(0xcc826fd3, 0x98678141), + TOBN(0x00e758b1, 0x3c80515a), TOBN(0x6afe3247, 0x41485083)}, + {TOBN(0x0fcb08b9, 0xb6ae8a75), TOBN(0xb8cf388d, 0x4acf51e1), + TOBN(0x344a5560, 0x6961b9d6), TOBN(0x1a6778b8, 0x6a97fd0c)}}, + {{TOBN(0xd840fdc1, 0xecc4c7e3), TOBN(0xde9fe47d, 0x16db68cc), + TOBN(0xe95f89de, 0xa3e216aa), TOBN(0x84f1a6a4, 0x9594a8be)}, + {TOBN(0x7ddc7d72, 0x5a7b162b), TOBN(0xc5cfda19, 0xadc817a3), + TOBN(0x80a5d350, 0x78b58d46), TOBN(0x93365b13, 0x82978f19)}}, + {{TOBN(0x2e44d225, 0x26a1fc90), TOBN(0x0d6d10d2, 0x4d70705d), + TOBN(0xd94b6b10, 0xd70c45f4), TOBN(0x0f201022, 0xb216c079)}, + {TOBN(0xcec966c5, 0x658fde41), TOBN(0xa8d2bc7d, 0x7e27601d), + TOBN(0xbfcce3e1, 0xff230be7), TOBN(0x3394ff6b, 0x0033ffb5)}}, + {{TOBN(0xd890c509, 0x8132c9af), TOBN(0xaac4b0eb, 0x361e7868), + TOBN(0x5194ded3, 0xe82d15aa), TOBN(0x4550bd2e, 0x23ae6b7d)}, + {TOBN(0x3fda318e, 0xea5399d4), TOBN(0xd989bffa, 0x91638b80), + TOBN(0x5ea124d0, 0xa14aa12d), TOBN(0x1fb1b899, 0x3667b944)}}, + {{TOBN(0x95ec7969, 0x44c44d6a), TOBN(0x91df144a, 0x57e86137), + TOBN(0x915fd620, 0x73adac44), TOBN(0x8f01732d, 0x59a83801)}, + {TOBN(0xec579d25, 0x3aa0a633), TOBN(0x06de5e7c, 0xc9d6d59c), + TOBN(0xc132f958, 0xb1ef8010), TOBN(0x29476f96, 0xe65c1a02)}}, + {{TOBN(0x336a77c0, 0xd34c3565), TOBN(0xef1105b2, 0x1b9f1e9e), + TOBN(0x63e6d08b, 0xf9e08002), TOBN(0x9aff2f21, 0xc613809e)}, + {TOBN(0xb5754f85, 0x3a80e75d), TOBN(0xde71853e, 0x6bbda681), + TOBN(0x86f041df, 0x8197fd7a), TOBN(0x8b332e08, 0x127817fa)}}, + {{TOBN(0x05d99be8, 0xb9c20cda), TOBN(0x89f7aad5, 0xd5cd0c98), + TOBN(0x7ef936fe, 0x5bb94183), TOBN(0x92ca0753, 0xb05cd7f2)}, + {TOBN(0x9d65db11, 0x74a1e035), TOBN(0x02628cc8, 0x13eaea92), + TOBN(0xf2d9e242, 0x49e4fbf2), TOBN(0x94fdfd9b, 0xe384f8b7)}}, + {{TOBN(0x65f56054, 0x63428c6b), TOBN(0x2f7205b2, 0x90b409a5), + TOBN(0xf778bb78, 0xff45ae11), TOBN(0xa13045be, 0xc5ee53b2)}, + {TOBN(0xe00a14ff, 0x03ef77fe), TOBN(0x689cd59f, 0xffef8bef), + TOBN(0x3578f0ed, 0x1e9ade22), TOBN(0xe99f3ec0, 0x6268b6a8)}}, + {{TOBN(0xa2057d91, 0xea1b3c3e), TOBN(0x2d1a7053, 0xb8823a4a), + TOBN(0xabbb336a, 0x2cca451e), TOBN(0xcd2466e3, 0x2218bb5d)}, + {TOBN(0x3ac1f42f, 0xc8cb762d), TOBN(0x7e312aae, 0x7690211f), + TOBN(0xebb9bd73, 0x45d07450), TOBN(0x207c4b82, 0x46c2213f)}}, + {{TOBN(0x99d425c1, 0x375913ec), TOBN(0x94e45e96, 0x67908220), + TOBN(0xc08f3087, 0xcd67dbf6), TOBN(0xa5670fbe, 0xc0887056)}, + {TOBN(0x6717b64a, 0x66f5b8fc), TOBN(0xd5a56aea, 0x786fec28), + TOBN(0xa8c3f55f, 0xc0ff4952), TOBN(0xa77fefae, 0x457ac49b)}}, + {{TOBN(0x29882d7c, 0x98379d44), TOBN(0xd000bdfb, 0x509edc8a), + TOBN(0xc6f95979, 0xe66fe464), TOBN(0x504a6115, 0xfa61bde0)}, + {TOBN(0x56b3b871, 0xeffea31a), TOBN(0x2d3de26d, 0xf0c21a54), + TOBN(0x21dbff31, 0x834753bf), TOBN(0xe67ecf49, 0x69269d86)}}, + {{TOBN(0x7a176952, 0x151fe690), TOBN(0x03515804, 0x7f2adb5f), + TOBN(0xee794b15, 0xd1b62a8d), TOBN(0xf004ceec, 0xaae454e6)}, + {TOBN(0x0897ea7c, 0xf0386fac), TOBN(0x3b62ff12, 0xd1fca751), + TOBN(0x154181df, 0x1b7a04ec), TOBN(0x2008e04a, 0xfb5847ec)}}, + {{TOBN(0xd147148e, 0x41dbd772), TOBN(0x2b419f73, 0x22942654), + TOBN(0x669f30d3, 0xe9c544f7), TOBN(0x52a2c223, 0xc8540149)}, + {TOBN(0x5da9ee14, 0x634dfb02), TOBN(0x5f074ff0, 0xf47869f3), + TOBN(0x74ee878d, 0xa3933acc), TOBN(0xe6510651, 0x4fe35ed1)}}, + {{TOBN(0xb3eb9482, 0xf1012e7a), TOBN(0x51013cc0, 0xa8a566ae), + TOBN(0xdd5e9243, 0x47c00d3b), TOBN(0x7fde089d, 0x946bb0e5)}, + {TOBN(0x030754fe, 0xc731b4b3), TOBN(0x12a136a4, 0x99fda062), + TOBN(0x7c1064b8, 0x5a1a35bc), TOBN(0xbf1f5763, 0x446c84ef)}}, + {{TOBN(0xed29a56d, 0xa16d4b34), TOBN(0x7fba9d09, 0xdca21c4f), + TOBN(0x66d7ac00, 0x6d8de486), TOBN(0x60061987, 0x73a2a5e1)}, + {TOBN(0x8b400f86, 0x9da28ff0), TOBN(0x3133f708, 0x43c4599c), + TOBN(0x9911c9b8, 0xee28cb0d), TOBN(0xcd7e2874, 0x8e0af61d)}}, + {{TOBN(0x5a85f0f2, 0x72ed91fc), TOBN(0x85214f31, 0x9cd4a373), + TOBN(0x881fe5be, 0x1925253c), TOBN(0xd8dc98e0, 0x91e8bc76)}, + {TOBN(0x7120affe, 0x585cc3a2), TOBN(0x724952ed, 0x735bf97a), + TOBN(0x5581e7dc, 0x3eb34581), TOBN(0x5cbff4f2, 0xe52ee57d)}}, + {{TOBN(0x8d320a0e, 0x87d8cc7b), TOBN(0x9beaa7f3, 0xf1d280d0), + TOBN(0x7a0b9571, 0x9beec704), TOBN(0x9126332e, 0x5b7f0057)}, + {TOBN(0x01fbc1b4, 0x8ed3bd6d), TOBN(0x35bb2c12, 0xd945eb24), + TOBN(0x6404694e, 0x9a8ae255), TOBN(0xb6092eec, 0x8d6abfb3)}}, + {{TOBN(0x4d76143f, 0xcc058865), TOBN(0x7b0a5af2, 0x6e249922), + TOBN(0x8aef9440, 0x6a50d353), TOBN(0xe11e4bcc, 0x64f0e07a)}, + {TOBN(0x4472993a, 0xa14a90fa), TOBN(0x7706e20c, 0xba0c51d4), + TOBN(0xf403292f, 0x1532672d), TOBN(0x52573bfa, 0x21829382)}}, + {{TOBN(0x6a7bb6a9, 0x3b5bdb83), TOBN(0x08da65c0, 0xa4a72318), + TOBN(0xc58d22aa, 0x63eb065f), TOBN(0x1717596c, 0x1b15d685)}, + {TOBN(0x112df0d0, 0xb266d88b), TOBN(0xf688ae97, 0x5941945a), + TOBN(0x487386e3, 0x7c292cac), TOBN(0x42f3b50d, 0x57d6985c)}}, + {{TOBN(0x6da4f998, 0x6a90fc34), TOBN(0xc8f257d3, 0x65ca8a8d), + TOBN(0xc2feabca, 0x6951f762), TOBN(0xe1bc81d0, 0x74c323ac)}, + {TOBN(0x1bc68f67, 0x251a2a12), TOBN(0x10d86587, 0xbe8a70dc), + TOBN(0xd648af7f, 0xf0f84d2e), TOBN(0xf0aa9ebc, 0x6a43ac92)}}, + {{TOBN(0x69e3be04, 0x27596893), TOBN(0xb6bb02a6, 0x45bf452b), + TOBN(0x0875c11a, 0xf4c698c8), TOBN(0x6652b5c7, 0xbece3794)}, + {TOBN(0x7b3755fd, 0x4f5c0499), TOBN(0x6ea16558, 0xb5532b38), + TOBN(0xd1c69889, 0xa2e96ef7), TOBN(0x9c773c3a, 0x61ed8f48)}}, + {{TOBN(0x2b653a40, 0x9b323abc), TOBN(0xe26605e1, 0xf0e1d791), + TOBN(0x45d41064, 0x4a87157a), TOBN(0x8f9a78b7, 0xcbbce616)}, + {TOBN(0xcf1e44aa, 0xc407eddd), TOBN(0x81ddd1d8, 0xa35b964f), + TOBN(0x473e339e, 0xfd083999), TOBN(0x6c94bdde, 0x8e796802)}}, + {{TOBN(0x5a304ada, 0x8545d185), TOBN(0x82ae44ea, 0x738bb8cb), + TOBN(0x628a35e3, 0xdf87e10e), TOBN(0xd3624f3d, 0xa15b9fe3)}, + {TOBN(0xcc44209b, 0x14be4254), TOBN(0x7d0efcbc, 0xbdbc2ea5), + TOBN(0x1f603362, 0x04c37bbe), TOBN(0x21f363f5, 0x56a5852c)}}, + {{TOBN(0xa1503d1c, 0xa8501550), TOBN(0x2251e0e1, 0xd8ab10bb), + TOBN(0xde129c96, 0x6961c51c), TOBN(0x1f7246a4, 0x81910f68)}, + {TOBN(0x2eb744ee, 0x5f2591f2), TOBN(0x3c47d33f, 0x5e627157), + TOBN(0x4d6d62c9, 0x22f3bd68), TOBN(0x6120a64b, 0xcb8df856)}}, + {{TOBN(0x3a9ac6c0, 0x7b5d07df), TOBN(0xa92b9558, 0x7ef39783), + TOBN(0xe128a134, 0xab3a9b4f), TOBN(0x41c18807, 0xb1252f05)}, + {TOBN(0xfc7ed089, 0x80ba9b1c), TOBN(0xac8dc6de, 0xc532a9dd), + TOBN(0xbf829cef, 0x55246809), TOBN(0x101b784f, 0x5b4ee80f)}}, + {{TOBN(0xc09945bb, 0xb6f11603), TOBN(0x57b09dbe, 0x41d2801e), + TOBN(0xfba5202f, 0xa97534a8), TOBN(0x7fd8ae5f, 0xc17b9614)}, + {TOBN(0xa50ba666, 0x78308435), TOBN(0x9572f77c, 0xd3868c4d), + TOBN(0x0cef7bfd, 0x2dd7aab0), TOBN(0xe7958e08, 0x2c7c79ff)}}, + {{TOBN(0x81262e42, 0x25346689), TOBN(0x716da290, 0xb07c7004), + TOBN(0x35f911ea, 0xb7950ee3), TOBN(0x6fd72969, 0x261d21b5)}, + {TOBN(0x52389803, 0x08b640d3), TOBN(0x5b0026ee, 0x887f12a1), + TOBN(0x20e21660, 0x742e9311), TOBN(0x0ef6d541, 0x5ff77ff7)}}, + {{TOBN(0x969127f0, 0xf9c41135), TOBN(0xf21d60c9, 0x68a64993), + TOBN(0x656e5d0c, 0xe541875c), TOBN(0xf1e0f84e, 0xa1d3c233)}, + {TOBN(0x9bcca359, 0x06002d60), TOBN(0xbe2da60c, 0x06191552), + TOBN(0x5da8bbae, 0x61181ec3), TOBN(0x9f04b823, 0x65806f19)}}, + {{TOBN(0xf1604a7d, 0xd4b79bb8), TOBN(0xaee806fb, 0x52c878c8), + TOBN(0x34144f11, 0x8d47b8e8), TOBN(0x72edf52b, 0x949f9054)}, + {TOBN(0xebfca84e, 0x2127015a), TOBN(0x9051d0c0, 0x9cb7cef3), + TOBN(0x86e8fe58, 0x296deec8), TOBN(0x33b28188, 0x41010d74)}}}, + {{{TOBN(0x01079383, 0x171b445f), TOBN(0x9bcf21e3, 0x8131ad4c), + TOBN(0x8cdfe205, 0xc93987e8), TOBN(0xe63f4152, 0xc92e8c8f)}, + {TOBN(0x729462a9, 0x30add43d), TOBN(0x62ebb143, 0xc980f05a), + TOBN(0x4f3954e5, 0x3b06e968), TOBN(0xfe1d75ad, 0x242cf6b1)}}, + {{TOBN(0x5f95c6c7, 0xaf8685c8), TOBN(0xd4c1c8ce, 0x2f8f01aa), + TOBN(0xc44bbe32, 0x2574692a), TOBN(0xb8003478, 0xd4a4a068)}, + {TOBN(0x7c8fc6e5, 0x2eca3cdb), TOBN(0xea1db16b, 0xec04d399), + TOBN(0xb05bc82e, 0x8f2bc5cf), TOBN(0x763d517f, 0xf44793d2)}}, + {{TOBN(0x4451c1b8, 0x08bd98d0), TOBN(0x644b1cd4, 0x6575f240), + TOBN(0x6907eb33, 0x7375d270), TOBN(0x56c8bebd, 0xfa2286bd)}, + {TOBN(0xc713d2ac, 0xc4632b46), TOBN(0x17da427a, 0xafd60242), + TOBN(0x313065b7, 0xc95c7546), TOBN(0xf8239898, 0xbf17a3de)}}, + {{TOBN(0xf3b7963f, 0x4c830320), TOBN(0x842c7aa0, 0x903203e3), + TOBN(0xaf22ca0a, 0xe7327afb), TOBN(0x38e13092, 0x967609b6)}, + {TOBN(0x73b8fb62, 0x757558f1), TOBN(0x3cc3e831, 0xf7eca8c1), + TOBN(0xe4174474, 0xf6331627), TOBN(0xa77989ca, 0xc3c40234)}}, + {{TOBN(0xe5fd17a1, 0x44a081e0), TOBN(0xd797fb7d, 0xb70e296a), + TOBN(0x2b472b30, 0x481f719c), TOBN(0x0e632a98, 0xfe6f8c52)}, + {TOBN(0x89ccd116, 0xc5f0c284), TOBN(0xf51088af, 0x2d987c62), + TOBN(0x2a2bccda, 0x4c2de6cf), TOBN(0x810f9efe, 0xf679f0f9)}}, + {{TOBN(0xb0f394b9, 0x7ffe4b3e), TOBN(0x0b691d21, 0xe5fa5d21), + TOBN(0xb0bd7747, 0x9dfbbc75), TOBN(0xd2830fda, 0xfaf78b00)}, + {TOBN(0xf78c249c, 0x52434f57), TOBN(0x4b1f7545, 0x98096dab), + TOBN(0x73bf6f94, 0x8ff8c0b3), TOBN(0x34aef03d, 0x454e134c)}}, + {{TOBN(0xf8d151f4, 0xb7ac7ec5), TOBN(0xd6ceb95a, 0xe50da7d5), + TOBN(0xa1b492b0, 0xdc3a0eb8), TOBN(0x75157b69, 0xb3dd2863)}, + {TOBN(0xe2c4c74e, 0xc5413d62), TOBN(0xbe329ff7, 0xbc5fc4c7), + TOBN(0x835a2aea, 0x60fa9dda), TOBN(0xf117f5ad, 0x7445cb87)}}, + {{TOBN(0xae8317f4, 0xb0166f7a), TOBN(0xfbd3e3f7, 0xceec74e6), + TOBN(0xfdb516ac, 0xe0874bfd), TOBN(0x3d846019, 0xc681f3a3)}, + {TOBN(0x0b12ee5c, 0x7c1620b0), TOBN(0xba68b4dd, 0x2b63c501), + TOBN(0xac03cd32, 0x6668c51e), TOBN(0x2a6279f7, 0x4e0bcb5b)}}, + {{TOBN(0x17bd69b0, 0x6ae85c10), TOBN(0x72946979, 0x1dfdd3a6), + TOBN(0xd9a03268, 0x2c078bec), TOBN(0x41c6a658, 0xbfd68a52)}, + {TOBN(0xcdea1024, 0x0e023900), TOBN(0xbaeec121, 0xb10d144d), + TOBN(0x5a600e74, 0x058ab8dc), TOBN(0x1333af21, 0xbb89ccdd)}}, + {{TOBN(0xdf25eae0, 0x3aaba1f1), TOBN(0x2cada16e, 0x3b7144cf), + TOBN(0x657ee27d, 0x71ab98bc), TOBN(0x99088b4c, 0x7a6fc96e)}, + {TOBN(0x05d5c0a0, 0x3549dbd4), TOBN(0x42cbdf8f, 0xf158c3ac), + TOBN(0x3fb6b3b0, 0x87edd685), TOBN(0x22071cf6, 0x86f064d0)}}, + {{TOBN(0xd2d6721f, 0xff2811e5), TOBN(0xdb81b703, 0xfe7fae8c), + TOBN(0x3cfb74ef, 0xd3f1f7bb), TOBN(0x0cdbcd76, 0x16cdeb5d)}, + {TOBN(0x4f39642a, 0x566a808c), TOBN(0x02b74454, 0x340064d6), + TOBN(0xfabbadca, 0x0528fa6f), TOBN(0xe4c3074c, 0xd3fc0bb6)}}, + {{TOBN(0xb32cb8b0, 0xb796d219), TOBN(0xc3e95f4f, 0x34741dd9), + TOBN(0x87212125, 0x68edf6f5), TOBN(0x7a03aee4, 0xa2b9cb8e)}, + {TOBN(0x0cd3c376, 0xf53a89aa), TOBN(0x0d8af9b1, 0x948a28dc), + TOBN(0xcf86a3f4, 0x902ab04f), TOBN(0x8aacb62a, 0x7f42002d)}}, + {{TOBN(0x106985eb, 0xf62ffd52), TOBN(0xe670b54e, 0x5797bf10), + TOBN(0x4b405209, 0xc5e30aef), TOBN(0x12c97a20, 0x4365b5e9)}, + {TOBN(0x104646ce, 0x1fe32093), TOBN(0x13cb4ff6, 0x3907a8c9), + TOBN(0x8b9f30d1, 0xd46e726b), TOBN(0xe1985e21, 0xaba0f499)}}, + {{TOBN(0xc573dea9, 0x10a230cd), TOBN(0x24f46a93, 0xcd30f947), + TOBN(0xf2623fcf, 0xabe2010a), TOBN(0x3f278cb2, 0x73f00e4f)}, + {TOBN(0xed55c67d, 0x50b920eb), TOBN(0xf1cb9a2d, 0x8e760571), + TOBN(0x7c50d109, 0x0895b709), TOBN(0x4207cf07, 0x190d4369)}}, + {{TOBN(0x3b027e81, 0xc4127fe1), TOBN(0xa9f8b9ad, 0x3ae9c566), + TOBN(0x5ab10851, 0xacbfbba5), TOBN(0xa747d648, 0x569556f5)}, + {TOBN(0xcc172b5c, 0x2ba97bf7), TOBN(0x15e0f77d, 0xbcfa3324), + TOBN(0xa345b797, 0x7686279d), TOBN(0x5a723480, 0xe38003d3)}}, + {{TOBN(0xfd8e139f, 0x8f5fcda8), TOBN(0xf3e558c4, 0xbdee5bfd), + TOBN(0xd76cbaf4, 0xe33f9f77), TOBN(0x3a4c97a4, 0x71771969)}, + {TOBN(0xda27e84b, 0xf6dce6a7), TOBN(0xff373d96, 0x13e6c2d1), + TOBN(0xf115193c, 0xd759a6e9), TOBN(0x3f9b7025, 0x63d2262c)}}, + {{TOBN(0xd9764a31, 0x317cd062), TOBN(0x30779d8e, 0x199f8332), + TOBN(0xd8074106, 0x16b11b0b), TOBN(0x7917ab9f, 0x78aeaed8)}, + {TOBN(0xb67a9cbe, 0x28fb1d8e), TOBN(0x2e313563, 0x136eda33), + TOBN(0x010b7069, 0xa371a86c), TOBN(0x44d90fa2, 0x6744e6b7)}}, + {{TOBN(0x68190867, 0xd6b3e243), TOBN(0x9fe6cd9d, 0x59048c48), + TOBN(0xb900b028, 0x95731538), TOBN(0xa012062f, 0x32cae04f)}, + {TOBN(0x8107c8bc, 0x9399d082), TOBN(0x47e8c54a, 0x41df12e2), + TOBN(0x14ba5117, 0xb6ef3f73), TOBN(0x22260bea, 0x81362f0b)}}, + {{TOBN(0x90ea261e, 0x1a18cc20), TOBN(0x2192999f, 0x2321d636), + TOBN(0xef64d314, 0xe311b6a0), TOBN(0xd7401e4c, 0x3b54a1f5)}, + {TOBN(0x19019983, 0x6fbca2ba), TOBN(0x46ad3293, 0x8fbffc4b), + TOBN(0xa142d3f6, 0x3786bf40), TOBN(0xeb5cbc26, 0xb67039fc)}}, + {{TOBN(0x9cb0ae6c, 0x252bd479), TOBN(0x05e0f88a, 0x12b5848f), + TOBN(0x78f6d2b2, 0xa5c97663), TOBN(0x6f6e149b, 0xc162225c)}, + {TOBN(0xe602235c, 0xde601a89), TOBN(0xd17bbe98, 0xf373be1f), + TOBN(0xcaf49a5b, 0xa8471827), TOBN(0x7e1a0a85, 0x18aaa116)}}, + {{TOBN(0x6c833196, 0x270580c3), TOBN(0x1e233839, 0xf1c98a14), + TOBN(0x67b2f7b4, 0xae34e0a5), TOBN(0x47ac8745, 0xd8ce7289)}, + {TOBN(0x2b74779a, 0x100dd467), TOBN(0x274a4337, 0x4ee50d09), + TOBN(0x603dcf13, 0x83608bc9), TOBN(0xcd9da6c3, 0xc89e8388)}}, + {{TOBN(0x2660199f, 0x355116ac), TOBN(0xcc38bb59, 0xb6d18eed), + TOBN(0x3075f31f, 0x2f4bc071), TOBN(0x9774457f, 0x265dc57e)}, + {TOBN(0x06a6a9c8, 0xc6db88bb), TOBN(0x6429d07f, 0x4ec98e04), + TOBN(0x8d05e57b, 0x05ecaa8b), TOBN(0x20f140b1, 0x7872ea7b)}}, + {{TOBN(0xdf8c0f09, 0xca494693), TOBN(0x48d3a020, 0xf252e909), + TOBN(0x4c5c29af, 0x57b14b12), TOBN(0x7e6fa37d, 0xbf47ad1c)}, + {TOBN(0x66e7b506, 0x49a0c938), TOBN(0xb72c0d48, 0x6be5f41f), + TOBN(0x6a6242b8, 0xb2359412), TOBN(0xcd35c774, 0x8e859480)}}, + {{TOBN(0x12536fea, 0x87baa627), TOBN(0x58c1fec1, 0xf72aa680), + TOBN(0x6c29b637, 0x601e5dc9), TOBN(0x9e3c3c1c, 0xde9e01b9)}, + {TOBN(0xefc8127b, 0x2bcfe0b0), TOBN(0x35107102, 0x2a12f50d), + TOBN(0x6ccd6cb1, 0x4879b397), TOBN(0xf792f804, 0xf8a82f21)}}, + {{TOBN(0x509d4804, 0xa9b46402), TOBN(0xedddf85d, 0xc10f0850), + TOBN(0x928410dc, 0x4b6208aa), TOBN(0xf6229c46, 0x391012dc)}, + {TOBN(0xc5a7c41e, 0x7727b9b6), TOBN(0x289e4e4b, 0xaa444842), + TOBN(0x049ba1d9, 0xe9a947ea), TOBN(0x44f9e47f, 0x83c8debc)}}, + {{TOBN(0xfa77a1fe, 0x611f8b8e), TOBN(0xfd2e416a, 0xf518f427), + TOBN(0xc5fffa70, 0x114ebac3), TOBN(0xfe57c4e9, 0x5d89697b)}, + {TOBN(0xfdd053ac, 0xb1aaf613), TOBN(0x31df210f, 0xea585a45), + TOBN(0x318cc10e, 0x24985034), TOBN(0x1a38efd1, 0x5f1d6130)}}, + {{TOBN(0xbf86f237, 0x0b1e9e21), TOBN(0xb258514d, 0x1dbe88aa), + TOBN(0x1e38a588, 0x90c1baf9), TOBN(0x2936a01e, 0xbdb9b692)}, + {TOBN(0xd576de98, 0x6dd5b20c), TOBN(0xb586bf71, 0x70f98ecf), + TOBN(0xcccf0f12, 0xc42d2fd7), TOBN(0x8717e61c, 0xfb35bd7b)}}, + {{TOBN(0x8b1e5722, 0x35e6fc06), TOBN(0x3477728f, 0x0b3e13d5), + TOBN(0x150c294d, 0xaa8a7372), TOBN(0xc0291d43, 0x3bfa528a)}, + {TOBN(0xc6c8bc67, 0xcec5a196), TOBN(0xdeeb31e4, 0x5c2e8a7c), + TOBN(0xba93e244, 0xfb6e1c51), TOBN(0xb9f8b71b, 0x2e28e156)}}, + {{TOBN(0xce65a287, 0x968a2ab9), TOBN(0xe3c5ce69, 0x46bbcb1f), + TOBN(0xf8c835b9, 0xe7ae3f30), TOBN(0x16bbee26, 0xff72b82b)}, + {TOBN(0x665e2017, 0xfd42cd22), TOBN(0x1e139970, 0xf8b1d2a0), + TOBN(0x125cda29, 0x79204932), TOBN(0x7aee94a5, 0x49c3bee5)}}, + {{TOBN(0x68c70160, 0x89821a66), TOBN(0xf7c37678, 0x8f981669), + TOBN(0xd90829fc, 0x48cc3645), TOBN(0x346af049, 0xd70addfc)}, + {TOBN(0x2057b232, 0x370bf29c), TOBN(0xf90c73ce, 0x42e650ee), + TOBN(0xe03386ea, 0xa126ab90), TOBN(0x0e266e7e, 0x975a087b)}}, + {{TOBN(0x80578eb9, 0x0fca65d9), TOBN(0x7e2989ea, 0x16af45b8), + TOBN(0x7438212d, 0xcac75a4e), TOBN(0x38c7ca39, 0x4fef36b8)}, + {TOBN(0x8650c494, 0xd402676a), TOBN(0x26ab5a66, 0xf72c7c48), + TOBN(0x4e6cb426, 0xce3a464e), TOBN(0xf8f99896, 0x2b72f841)}}, + {{TOBN(0x8c318491, 0x1a335cc8), TOBN(0x563459ba, 0x6a5913e4), + TOBN(0x1b920d61, 0xc7b32919), TOBN(0x805ab8b6, 0xa02425ad)}, + {TOBN(0x2ac512da, 0x8d006086), TOBN(0x6ca4846a, 0xbcf5c0fd), + TOBN(0xafea51d8, 0xac2138d7), TOBN(0xcb647545, 0x344cd443)}}, + {{TOBN(0x0429ee8f, 0xbd7d9040), TOBN(0xee66a2de, 0x819b9c96), + TOBN(0x54f9ec25, 0xdea7d744), TOBN(0x2ffea642, 0x671721bb)}, + {TOBN(0x4f19dbd1, 0x114344ea), TOBN(0x04304536, 0xfd0dbc8b), + TOBN(0x014b50aa, 0x29ec7f91), TOBN(0xb5fc22fe, 0xbb06014d)}}, + {{TOBN(0x60d963a9, 0x1ee682e0), TOBN(0xdf48abc0, 0xfe85c727), + TOBN(0x0cadba13, 0x2e707c2d), TOBN(0xde608d3a, 0xa645aeff)}, + {TOBN(0x05f1c28b, 0xedafd883), TOBN(0x3c362ede, 0xbd94de1f), + TOBN(0x8dd0629d, 0x13593e41), TOBN(0x0a5e736f, 0x766d6eaf)}}, + {{TOBN(0xbfa92311, 0xf68cf9d1), TOBN(0xa4f9ef87, 0xc1797556), + TOBN(0x10d75a1f, 0x5601c209), TOBN(0x651c374c, 0x09b07361)}, + {TOBN(0x49950b58, 0x88b5cead), TOBN(0x0ef00058, 0x6fa9dbaa), + TOBN(0xf51ddc26, 0x4e15f33a), TOBN(0x1f8b5ca6, 0x2ef46140)}}, + {{TOBN(0x343ac0a3, 0xee9523f0), TOBN(0xbb75eab2, 0x975ea978), + TOBN(0x1bccf332, 0x107387f4), TOBN(0x790f9259, 0x9ab0062e)}, + {TOBN(0xf1a363ad, 0x1e4f6a5f), TOBN(0x06e08b84, 0x62519a50), + TOBN(0x60915187, 0x7265f1ee), TOBN(0x6a80ca34, 0x93ae985e)}}, + {{TOBN(0x81b29768, 0xaaba4864), TOBN(0xb13cabf2, 0x8d52a7d6), + TOBN(0xb5c36348, 0x8ead03f1), TOBN(0xc932ad95, 0x81c7c1c0)}, + {TOBN(0x5452708e, 0xcae1e27b), TOBN(0x9dac4269, 0x1b0df648), + TOBN(0x233e3f0c, 0xdfcdb8bc), TOBN(0xe6ceccdf, 0xec540174)}}, + {{TOBN(0xbd0d845e, 0x95081181), TOBN(0xcc8a7920, 0x699355d5), + TOBN(0x111c0f6d, 0xc3b375a8), TOBN(0xfd95bc6b, 0xfd51e0dc)}, + {TOBN(0x4a106a26, 0x6888523a), TOBN(0x4d142bd6, 0xcb01a06d), + TOBN(0x79bfd289, 0xadb9b397), TOBN(0x0bdbfb94, 0xe9863914)}}, + {{TOBN(0x29d8a229, 0x1660f6a6), TOBN(0x7f6abcd6, 0x551c042d), + TOBN(0x13039deb, 0x0ac3ffe8), TOBN(0xa01be628, 0xec8523fb)}, + {TOBN(0x6ea34103, 0x0ca1c328), TOBN(0xc74114bd, 0xb903928e), + TOBN(0x8aa4ff4e, 0x9e9144b0), TOBN(0x7064091f, 0x7f9a4b17)}}, + {{TOBN(0xa3f4f521, 0xe447f2c4), TOBN(0x81b8da7a, 0x604291f0), + TOBN(0xd680bc46, 0x7d5926de), TOBN(0x84f21fd5, 0x34a1202f)}, + {TOBN(0x1d1e3181, 0x4e9df3d8), TOBN(0x1ca4861a, 0x39ab8d34), + TOBN(0x809ddeec, 0x5b19aa4a), TOBN(0x59f72f7e, 0x4d329366)}}, + {{TOBN(0xa2f93f41, 0x386d5087), TOBN(0x40bf739c, 0xdd67d64f), + TOBN(0xb4494205, 0x66702158), TOBN(0xc33c65be, 0x73b1e178)}, + {TOBN(0xcdcd657c, 0x38ca6153), TOBN(0x97f4519a, 0xdc791976), + TOBN(0xcc7c7f29, 0xcd6e1f39), TOBN(0x38de9cfb, 0x7e3c3932)}}, + {{TOBN(0xe448eba3, 0x7b793f85), TOBN(0xe9f8dbf9, 0xf067e914), + TOBN(0xc0390266, 0xf114ae87), TOBN(0x39ed75a7, 0xcd6a8e2a)}, + {TOBN(0xadb14848, 0x7ffba390), TOBN(0x67f8cb8b, 0x6af9bc09), + TOBN(0x322c3848, 0x9c7476db), TOBN(0xa320fecf, 0x52a538d6)}}, + {{TOBN(0xe0493002, 0xb2aced2b), TOBN(0xdfba1809, 0x616bd430), + TOBN(0x531c4644, 0xc331be70), TOBN(0xbc04d32e, 0x90d2e450)}, + {TOBN(0x1805a0d1, 0x0f9f142d), TOBN(0x2c44a0c5, 0x47ee5a23), + TOBN(0x31875a43, 0x3989b4e3), TOBN(0x6b1949fd, 0x0c063481)}}, + {{TOBN(0x2dfb9e08, 0xbe0f4492), TOBN(0x3ff0da03, 0xe9d5e517), + TOBN(0x03dbe9a1, 0xf79466a8), TOBN(0x0b87bcd0, 0x15ea9932)}, + {TOBN(0xeb64fc83, 0xab1f58ab), TOBN(0x6d9598da, 0x817edc8a), + TOBN(0x699cff66, 0x1d3b67e5), TOBN(0x645c0f29, 0x92635853)}}, + {{TOBN(0x253cdd82, 0xeabaf21c), TOBN(0x82b9602a, 0x2241659e), + TOBN(0x2cae07ec, 0x2d9f7091), TOBN(0xbe4c720c, 0x8b48cd9b)}, + {TOBN(0x6ce5bc03, 0x6f08d6c9), TOBN(0x36e8a997, 0xaf10bf40), + TOBN(0x83422d21, 0x3e10ff12), TOBN(0x7b26d3eb, 0xbcc12494)}}, + {{TOBN(0xb240d2d0, 0xc9469ad6), TOBN(0xc4a11b4d, 0x30afa05b), + TOBN(0x4b604ace, 0xdd6ba286), TOBN(0x18486600, 0x3ee2864c)}, + {TOBN(0x5869d6ba, 0x8d9ce5be), TOBN(0x0d8f68c5, 0xff4bfb0d), + TOBN(0xb69f210b, 0x5700cf73), TOBN(0x61f6653a, 0x6d37c135)}}, + {{TOBN(0xff3d432b, 0x5aff5a48), TOBN(0x0d81c4b9, 0x72ba3a69), + TOBN(0xee879ae9, 0xfa1899ef), TOBN(0xbac7e2a0, 0x2d6acafd)}, + {TOBN(0xd6d93f6c, 0x1c664399), TOBN(0x4c288de1, 0x5bcb135d), + TOBN(0x83031dab, 0x9dab7cbf), TOBN(0xfe23feb0, 0x3abbf5f0)}}, + {{TOBN(0x9f1b2466, 0xcdedca85), TOBN(0x140bb710, 0x1a09538c), + TOBN(0xac8ae851, 0x5e11115d), TOBN(0x0d63ff67, 0x6f03f59e)}, + {TOBN(0x755e5551, 0x7d234afb), TOBN(0x61c2db4e, 0x7e208fc1), + TOBN(0xaa9859ce, 0xf28a4b5d), TOBN(0xbdd6d4fc, 0x34af030f)}}, + {{TOBN(0xd1c4a26d, 0x3be01cb1), TOBN(0x9ba14ffc, 0x243aa07c), + TOBN(0xf95cd3a9, 0xb2503502), TOBN(0xe379bc06, 0x7d2a93ab)}, + {TOBN(0x3efc18e9, 0xd4ca8d68), TOBN(0x083558ec, 0x80bb412a), + TOBN(0xd903b940, 0x9645a968), TOBN(0xa499f0b6, 0x9ba6054f)}}, + {{TOBN(0x208b573c, 0xb8349abe), TOBN(0x3baab3e5, 0x30b4fc1c), + TOBN(0x87e978ba, 0xcb524990), TOBN(0x3524194e, 0xccdf0e80)}, + {TOBN(0x62711725, 0x7d4bcc42), TOBN(0xe90a3d9b, 0xb90109ba), + TOBN(0x3b1bdd57, 0x1323e1e0), TOBN(0xb78e9bd5, 0x5eae1599)}}, + {{TOBN(0x0794b746, 0x9e03d278), TOBN(0x80178605, 0xd70e6297), + TOBN(0x171792f8, 0x99c97855), TOBN(0x11b393ee, 0xf5a86b5c)}, + {TOBN(0x48ef6582, 0xd8884f27), TOBN(0xbd44737a, 0xbf19ba5f), + TOBN(0x8698de4c, 0xa42062c6), TOBN(0x8975eb80, 0x61ce9c54)}}, + {{TOBN(0xd50e57c7, 0xd7fe71f3), TOBN(0x15342190, 0xbc97ce38), + TOBN(0x51bda2de, 0x4df07b63), TOBN(0xba12aeae, 0x200eb87d)}, + {TOBN(0xabe135d2, 0xa9b4f8f6), TOBN(0x04619d65, 0xfad6d99c), + TOBN(0x4a6683a7, 0x7994937c), TOBN(0x7a778c8b, 0x6f94f09a)}}, + {{TOBN(0x8c508623, 0x20a71b89), TOBN(0x241a2aed, 0x1c229165), + TOBN(0x352be595, 0xaaf83a99), TOBN(0x9fbfee7f, 0x1562bac8)}, + {TOBN(0xeaf658b9, 0x5c4017e3), TOBN(0x1dc7f9e0, 0x15120b86), + TOBN(0xd84f13dd, 0x4c034d6f), TOBN(0x283dd737, 0xeaea3038)}}, + {{TOBN(0x197f2609, 0xcd85d6a2), TOBN(0x6ebbc345, 0xfae60177), + TOBN(0xb80f031b, 0x4e12fede), TOBN(0xde55d0c2, 0x07a2186b)}, + {TOBN(0x1fb3e37f, 0x24dcdd5a), TOBN(0x8d602da5, 0x7ed191fb), + TOBN(0x108fb056, 0x76023e0d), TOBN(0x70178c71, 0x459c20c0)}}, + {{TOBN(0xfad5a386, 0x3fe54cf0), TOBN(0xa4a3ec4f, 0x02bbb475), + TOBN(0x1aa5ec20, 0x919d94d7), TOBN(0x5d3b63b5, 0xa81e4ab3)}, + {TOBN(0x7fa733d8, 0x5ad3d2af), TOBN(0xfbc586dd, 0xd1ac7a37), + TOBN(0x282925de, 0x40779614), TOBN(0xfe0ffffb, 0xe74a242a)}}, + {{TOBN(0x3f39e67f, 0x906151e5), TOBN(0xcea27f5f, 0x55e10649), + TOBN(0xdca1d4e1, 0xc17cf7b7), TOBN(0x0c326d12, 0x2fe2362d)}, + {TOBN(0x05f7ac33, 0x7dd35df3), TOBN(0x0c3b7639, 0xc396dbdf), + TOBN(0x0912f5ac, 0x03b7db1c), TOBN(0x9dea4b70, 0x5c9ed4a9)}}, + {{TOBN(0x475e6e53, 0xaae3f639), TOBN(0xfaba0e7c, 0xfc278bac), + TOBN(0x16f9e221, 0x9490375f), TOBN(0xaebf9746, 0xa5a7ed0a)}, + {TOBN(0x45f9af3f, 0xf41ad5d6), TOBN(0x03c4623c, 0xb2e99224), + TOBN(0x82c5bb5c, 0xb3cf56aa), TOBN(0x64311819, 0x34567ed3)}}, + {{TOBN(0xec57f211, 0x8be489ac), TOBN(0x2821895d, 0xb9a1104b), + TOBN(0x610dc875, 0x6064e007), TOBN(0x8e526f3f, 0x5b20d0fe)}, + {TOBN(0x6e71ca77, 0x5b645aee), TOBN(0x3d1dcb9f, 0x800e10ff), + TOBN(0x36b51162, 0x189cf6de), TOBN(0x2c5a3e30, 0x6bb17353)}}, + {{TOBN(0xc186cd3e, 0x2a6c6fbf), TOBN(0xa74516fa, 0x4bf97906), + TOBN(0x5b4b8f4b, 0x279d6901), TOBN(0x0c4e57b4, 0x2b573743)}, + {TOBN(0x75fdb229, 0xb6e386b6), TOBN(0xb46793fd, 0x99deac27), + TOBN(0xeeec47ea, 0xcf712629), TOBN(0xe965f3c4, 0xcbc3b2dd)}}, + {{TOBN(0x8dd1fb83, 0x425c6559), TOBN(0x7fc00ee6, 0x0af06fda), + TOBN(0xe98c9225, 0x33d956df), TOBN(0x0f1ef335, 0x4fbdc8a2)}, + {TOBN(0x2abb5145, 0xb79b8ea2), TOBN(0x40fd2945, 0xbdbff288), + TOBN(0x6a814ac4, 0xd7185db7), TOBN(0xc4329d6f, 0xc084609a)}}, + {{TOBN(0xc9ba7b52, 0xed1be45d), TOBN(0x891dd20d, 0xe4cd2c74), + TOBN(0x5a4d4a7f, 0x824139b1), TOBN(0x66c17716, 0xb873c710)}, + {TOBN(0x5e5bc141, 0x2843c4e0), TOBN(0xd5ac4817, 0xb97eb5bf), + TOBN(0xc0f8af54, 0x450c95c7), TOBN(0xc91b3fa0, 0x318406c5)}}, + {{TOBN(0x360c340a, 0xab9d97f8), TOBN(0xfb57bd07, 0x90a2d611), + TOBN(0x4339ae3c, 0xa6a6f7e5), TOBN(0x9c1fcd2a, 0x2feb8a10)}, + {TOBN(0x972bcca9, 0xc7ea7432), TOBN(0x1b0b924c, 0x308076f6), + TOBN(0x80b2814a, 0x2a5b4ca5), TOBN(0x2f78f55b, 0x61ef3b29)}}, + {{TOBN(0xf838744a, 0xc18a414f), TOBN(0xc611eaae, 0x903d0a86), + TOBN(0x94dabc16, 0x2a453f55), TOBN(0xe6f2e3da, 0x14efb279)}, + {TOBN(0x5b7a6017, 0x9320dc3c), TOBN(0x692e382f, 0x8df6b5a4), + TOBN(0x3f5e15e0, 0x2d40fa90), TOBN(0xc87883ae, 0x643dd318)}}, + {{TOBN(0x511053e4, 0x53544774), TOBN(0x834d0ecc, 0x3adba2bc), + TOBN(0x4215d7f7, 0xbae371f5), TOBN(0xfcfd57bf, 0x6c8663bc)}, + {TOBN(0xded2383d, 0xd6901b1d), TOBN(0x3b49fbb4, 0xb5587dc3), + TOBN(0xfd44a08d, 0x07625f62), TOBN(0x3ee4d65b, 0x9de9b762)}}}, + {{{TOBN(0x64e5137d, 0x0d63d1fa), TOBN(0x658fc052, 0x02a9d89f), + TOBN(0x48894874, 0x50436309), TOBN(0xe9ae30f8, 0xd598da61)}, + {TOBN(0x2ed710d1, 0x818baf91), TOBN(0xe27e9e06, 0x8b6a0c20), + TOBN(0x1e28dcfb, 0x1c1a6b44), TOBN(0x883acb64, 0xd6ac57dc)}}, + {{TOBN(0x8735728d, 0xc2c6ff70), TOBN(0x79d6122f, 0xc5dc2235), + TOBN(0x23f5d003, 0x19e277f9), TOBN(0x7ee84e25, 0xdded8cc7)}, + {TOBN(0x91a8afb0, 0x63cd880a), TOBN(0x3f3ea7c6, 0x3574af60), + TOBN(0x0cfcdc84, 0x02de7f42), TOBN(0x62d0792f, 0xb31aa152)}}, + {{TOBN(0x8e1b4e43, 0x8a5807ce), TOBN(0xad283893, 0xe4109a7e), + TOBN(0xc30cc9cb, 0xafd59dda), TOBN(0xf65f36c6, 0x3d8d8093)}, + {TOBN(0xdf31469e, 0xa60d32b2), TOBN(0xee93df4b, 0x3e8191c8), + TOBN(0x9c1017c5, 0x355bdeb5), TOBN(0xd2623185, 0x8616aa28)}}, + {{TOBN(0xb02c83f9, 0xdec31a21), TOBN(0x988c8b23, 0x6ad9d573), + TOBN(0x53e983ae, 0xa57be365), TOBN(0xe968734d, 0x646f834e)}, + {TOBN(0x9137ea8f, 0x5da6309b), TOBN(0x10f3a624, 0xc1f1ce16), + TOBN(0x782a9ea2, 0xca440921), TOBN(0xdf94739e, 0x5b46f1b5)}}, + {{TOBN(0x9f9be006, 0xcce85c9b), TOBN(0x360e70d6, 0xa4c7c2d3), + TOBN(0x2cd5beea, 0xaefa1e60), TOBN(0x64cf63c0, 0x8c3d2b6d)}, + {TOBN(0xfb107fa3, 0xe1cf6f90), TOBN(0xb7e937c6, 0xd5e044e6), + TOBN(0x74e8ca78, 0xce34db9f), TOBN(0x4f8b36c1, 0x3e210bd0)}}, + {{TOBN(0x1df165a4, 0x34a35ea8), TOBN(0x3418e0f7, 0x4d4412f6), + TOBN(0x5af1f8af, 0x518836c3), TOBN(0x42ceef4d, 0x130e1965)}, + {TOBN(0x5560ca0b, 0x543a1957), TOBN(0xc33761e5, 0x886cb123), + TOBN(0x66624b1f, 0xfe98ed30), TOBN(0xf772f4bf, 0x1090997d)}}, + {{TOBN(0xf4e540bb, 0x4885d410), TOBN(0x7287f810, 0x9ba5f8d7), + TOBN(0x22d0d865, 0xde98dfb1), TOBN(0x49ff51a1, 0xbcfbb8a3)}, + {TOBN(0xb6b6fa53, 0x6bc3012e), TOBN(0x3d31fd72, 0x170d541d), + TOBN(0x8018724f, 0x4b0f4966), TOBN(0x79e7399f, 0x87dbde07)}}, + {{TOBN(0x56f8410e, 0xf4f8b16a), TOBN(0x97241afe, 0xc47b266a), + TOBN(0x0a406b8e, 0x6d9c87c1), TOBN(0x803f3e02, 0xcd42ab1b)}, + {TOBN(0x7f0309a8, 0x04dbec69), TOBN(0xa83b85f7, 0x3bbad05f), + TOBN(0xc6097273, 0xad8e197f), TOBN(0xc097440e, 0x5067adc1)}}, + {{TOBN(0x730eafb6, 0x3524ff16), TOBN(0xd7f9b51e, 0x823fc6ce), + TOBN(0x27bd0d32, 0x443e4ac0), TOBN(0x40c59ad9, 0x4d66f217)}, + {TOBN(0x6c33136f, 0x17c387a4), TOBN(0x5043b8d5, 0xeb86804d), + TOBN(0x74970312, 0x675a73c9), TOBN(0x838fdb31, 0xf16669b6)}}, + {{TOBN(0xc507b6dd, 0x418e7ddd), TOBN(0x39888d93, 0x472f19d6), + TOBN(0x7eae26be, 0x0c27eb4d), TOBN(0x17b53ed3, 0xfbabb884)}, + {TOBN(0xfc27021b, 0x2b01ae4f), TOBN(0x88462e87, 0xcf488682), + TOBN(0xbee096ec, 0x215e2d87), TOBN(0xeb2fea9a, 0xd242e29b)}}, + {{TOBN(0x5d985b5f, 0xb821fc28), TOBN(0x89d2e197, 0xdc1e2ad2), + TOBN(0x55b566b8, 0x9030ba62), TOBN(0xe3fd41b5, 0x4f41b1c6)}, + {TOBN(0xb738ac2e, 0xb9a96d61), TOBN(0x7f8567ca, 0x369443f4), + TOBN(0x8698622d, 0xf803a440), TOBN(0x2b586236, 0x8fe2f4dc)}}, + {{TOBN(0xbbcc00c7, 0x56b95bce), TOBN(0x5ec03906, 0x616da680), + TOBN(0x79162ee6, 0x72214252), TOBN(0x43132b63, 0x86a892d2)}, + {TOBN(0x4bdd3ff2, 0x2f3263bf), TOBN(0xd5b3733c, 0x9cd0a142), + TOBN(0x592eaa82, 0x44415ccb), TOBN(0x663e8924, 0x8d5474ea)}}, + {{TOBN(0x8058a25e, 0x5236344e), TOBN(0x82e8df9d, 0xbda76ee6), + TOBN(0xdcf6efd8, 0x11cc3d22), TOBN(0x00089cda, 0x3b4ab529)}, + {TOBN(0x91d3a071, 0xbd38a3db), TOBN(0x4ea97fc0, 0xef72b925), + TOBN(0x0c9fc15b, 0xea3edf75), TOBN(0x5a6297cd, 0xa4348ed3)}}, + {{TOBN(0x0d38ab35, 0xce7c42d4), TOBN(0x9fd493ef, 0x82feab10), + TOBN(0x46056b6d, 0x82111b45), TOBN(0xda11dae1, 0x73efc5c3)}, + {TOBN(0xdc740278, 0x5545a7fb), TOBN(0xbdb2601c, 0x40d507e6), + TOBN(0x121dfeeb, 0x7066fa58), TOBN(0x214369a8, 0x39ae8c2a)}}, + {{TOBN(0x195709cb, 0x06e0956c), TOBN(0x4c9d254f, 0x010cd34b), + TOBN(0xf51e13f7, 0x0471a532), TOBN(0xe19d6791, 0x1e73054d)}, + {TOBN(0xf702a628, 0xdb5c7be3), TOBN(0xc7141218, 0xb24dde05), + TOBN(0xdc18233c, 0xf29b2e2e), TOBN(0x3a6bd1e8, 0x85342dba)}}, + {{TOBN(0x3f747fa0, 0xb311898c), TOBN(0xe2a272e4, 0xcd0eac65), + TOBN(0x4bba5851, 0xf914d0bc), TOBN(0x7a1a9660, 0xc4a43ee3)}, + {TOBN(0xe5a367ce, 0xa1c8cde9), TOBN(0x9d958ba9, 0x7271abe3), + TOBN(0xf3ff7eb6, 0x3d1615cd), TOBN(0xa2280dce, 0xf5ae20b0)}}, + {{TOBN(0x56dba5c1, 0xcf640147), TOBN(0xea5a2e3d, 0x5e83d118), + TOBN(0x04cd6b6d, 0xda24c511), TOBN(0x1c0f4671, 0xe854d214)}, + {TOBN(0x91a6b7a9, 0x69565381), TOBN(0xdc966240, 0xdecf1f5b), + TOBN(0x1b22d21c, 0xfcf5d009), TOBN(0x2a05f641, 0x9021dbd5)}}, + {{TOBN(0x8c0ed566, 0xd4312483), TOBN(0x5179a95d, 0x643e216f), + TOBN(0xcc185fec, 0x17044493), TOBN(0xb3063339, 0x54991a21)}, + {TOBN(0xd801ecdb, 0x0081a726), TOBN(0x0149b0c6, 0x4fa89bbb), + TOBN(0xafe9065a, 0x4391b6b9), TOBN(0xedc92786, 0xd633f3a3)}}, + {{TOBN(0xe408c24a, 0xae6a8e13), TOBN(0x85833fde, 0x9f3897ab), + TOBN(0x43800e7e, 0xd81a0715), TOBN(0xde08e346, 0xb44ffc5f)}, + {TOBN(0x7094184c, 0xcdeff2e0), TOBN(0x49f9387b, 0x165eaed1), + TOBN(0x635d6129, 0x777c468a), TOBN(0x8c0dcfd1, 0x538c2dd8)}}, + {{TOBN(0xd6d9d9e3, 0x7a6a308b), TOBN(0x62375830, 0x4c2767d3), + TOBN(0x874a8bc6, 0xf38cbeb6), TOBN(0xd94d3f1a, 0xccb6fd9e)}, + {TOBN(0x92a9735b, 0xba21f248), TOBN(0x272ad0e5, 0x6cd1efb0), + TOBN(0x7437b69c, 0x05b03284), TOBN(0xe7f04702, 0x6948c225)}}, + {{TOBN(0x8a56c04a, 0xcba2ecec), TOBN(0x0c181270, 0xe3a73e41), + TOBN(0x6cb34e9d, 0x03e93725), TOBN(0xf77c8713, 0x496521a9)}, + {TOBN(0x94569183, 0xfa7f9f90), TOBN(0xf2e7aa4c, 0x8c9707ad), + TOBN(0xced2c9ba, 0x26c1c9a3), TOBN(0x9109fe96, 0x40197507)}}, + {{TOBN(0x9ae868a9, 0xe9adfe1c), TOBN(0x3984403d, 0x314e39bb), + TOBN(0xb5875720, 0xf2fe378f), TOBN(0x33f901e0, 0xba44a628)}, + {TOBN(0xea1125fe, 0x3652438c), TOBN(0xae9ec4e6, 0x9dd1f20b), + TOBN(0x1e740d9e, 0xbebf7fbd), TOBN(0x6dbd3ddc, 0x42dbe79c)}}, + {{TOBN(0x62082aec, 0xedd36776), TOBN(0xf612c478, 0xe9859039), + TOBN(0xa493b201, 0x032f7065), TOBN(0xebd4d8f2, 0x4ff9b211)}, + {TOBN(0x3f23a0aa, 0xaac4cb32), TOBN(0xea3aadb7, 0x15ed4005), + TOBN(0xacf17ea4, 0xafa27e63), TOBN(0x56125c1a, 0xc11fd66c)}}, + {{TOBN(0x266344a4, 0x3794f8dc), TOBN(0xdcca923a, 0x483c5c36), + TOBN(0x2d6b6bbf, 0x3f9d10a0), TOBN(0xb320c5ca, 0x81d9bdf3)}, + {TOBN(0x620e28ff, 0x47b50a95), TOBN(0x933e3b01, 0xcef03371), + TOBN(0xf081bf85, 0x99100153), TOBN(0x183be9a0, 0xc3a8c8d6)}}, + {{TOBN(0x4e3ddc5a, 0xd6bbe24d), TOBN(0xc6c74630, 0x53843795), + TOBN(0x78193dd7, 0x65ec2d4c), TOBN(0xb8df26cc, 0xcd3c89b2)}, + {TOBN(0x98dbe399, 0x5a483f8d), TOBN(0x72d8a957, 0x7dd3313a), + TOBN(0x65087294, 0xab0bd375), TOBN(0xfcd89248, 0x7c259d16)}}, + {{TOBN(0x8a9443d7, 0x7613aa81), TOBN(0x80100800, 0x85fe6584), + TOBN(0x70fc4dbc, 0x7fb10288), TOBN(0xf58280d3, 0xe86beee8)}, + {TOBN(0x14fdd82f, 0x7c978c38), TOBN(0xdf1204c1, 0x0de44d7b), + TOBN(0xa08a1c84, 0x4160252f), TOBN(0x591554ca, 0xc17646a5)}}, + {{TOBN(0x214a37d6, 0xa05bd525), TOBN(0x48d5f09b, 0x07957b3c), + TOBN(0x0247cdcb, 0xd7109bc9), TOBN(0x40f9e4bb, 0x30599ce7)}, + {TOBN(0xc325fa03, 0xf46ad2ec), TOBN(0x00f766cf, 0xc3e3f9ee), + TOBN(0xab556668, 0xd43a4577), TOBN(0x68d30a61, 0x3ee03b93)}}, + {{TOBN(0x7ddc81ea, 0x77b46a08), TOBN(0xcf5a6477, 0xc7480699), + TOBN(0x43a8cb34, 0x6633f683), TOBN(0x1b867e6b, 0x92363c60)}, + {TOBN(0x43921114, 0x1f60558e), TOBN(0xcdbcdd63, 0x2f41450e), + TOBN(0x7fc04601, 0xcc630e8b), TOBN(0xea7c66d5, 0x97038b43)}}, + {{TOBN(0x7259b8a5, 0x04e99fd8), TOBN(0x98a8dd12, 0x4785549a), + TOBN(0x0e459a7c, 0x840552e1), TOBN(0xcdfcf4d0, 0x4bb0909e)}, + {TOBN(0x34a86db2, 0x53758da7), TOBN(0xe643bb83, 0xeac997e1), + TOBN(0x96400bd7, 0x530c5b7e), TOBN(0x9f97af87, 0xb41c8b52)}}, + {{TOBN(0x34fc8820, 0xfbeee3f9), TOBN(0x93e53490, 0x49091afd), + TOBN(0x764b9be5, 0x9a31f35c), TOBN(0x71f37864, 0x57e3d924)}, + {TOBN(0x02fb34e0, 0x943aa75e), TOBN(0xa18c9c58, 0xab8ff6e4), + TOBN(0x080f31b1, 0x33cf0d19), TOBN(0x5c9682db, 0x083518a7)}}, + {{TOBN(0x873d4ca6, 0xb709c3de), TOBN(0x64a84262, 0x3575b8f0), + TOBN(0x6275da1f, 0x020154bb), TOBN(0x97678caa, 0xd17cf1ab)}, + {TOBN(0x8779795f, 0x951a95c3), TOBN(0xdd35b163, 0x50fccc08), + TOBN(0x32709627, 0x33d8f031), TOBN(0x3c5ab10a, 0x498dd85c)}}, + {{TOBN(0xb6c185c3, 0x41dca566), TOBN(0x7de7feda, 0xd8622aa3), + TOBN(0x99e84d92, 0x901b6dfb), TOBN(0x30a02b0e, 0x7c4ad288)}, + {TOBN(0xc7c81daa, 0x2fd3cf36), TOBN(0xd1319547, 0xdf89e59f), + TOBN(0xb2be8184, 0xcd496733), TOBN(0xd5f449eb, 0x93d3412b)}}, + {{TOBN(0x7ea41b1b, 0x25fe531d), TOBN(0xf9797432, 0x6a1d5646), + TOBN(0x86067f72, 0x2bde501a), TOBN(0xf91481c0, 0x0c85e89c)}, + {TOBN(0xca8ee465, 0xf8b05bc6), TOBN(0x1844e1cf, 0x02e83cda), + TOBN(0xca82114a, 0xb4dbe33b), TOBN(0x0f9f8769, 0x4eabfde2)}}, + {{TOBN(0x4936b1c0, 0x38b27fe2), TOBN(0x63b6359b, 0xaba402df), + TOBN(0x40c0ea2f, 0x656bdbab), TOBN(0x9c992a89, 0x6580c39c)}, + {TOBN(0x600e8f15, 0x2a60aed1), TOBN(0xeb089ca4, 0xe0bf49df), + TOBN(0x9c233d7d, 0x2d42d99a), TOBN(0x648d3f95, 0x4c6bc2fa)}}, + {{TOBN(0xdcc383a8, 0xe1add3f3), TOBN(0xf42c0c6a, 0x4f64a348), + TOBN(0x2abd176f, 0x0030dbdb), TOBN(0x4de501a3, 0x7d6c215e)}, + {TOBN(0x4a107c1f, 0x4b9a64bc), TOBN(0xa77f0ad3, 0x2496cd59), + TOBN(0xfb78ac62, 0x7688dffb), TOBN(0x7025a2ca, 0x67937d8e)}}, + {{TOBN(0xfde8b2d1, 0xd1a8f4e7), TOBN(0xf5b3da47, 0x7354927c), + TOBN(0xe48606a3, 0xd9205735), TOBN(0xac477cc6, 0xe177b917)}, + {TOBN(0xfb1f73d2, 0xa883239a), TOBN(0xe12572f6, 0xcc8b8357), + TOBN(0x9d355e9c, 0xfb1f4f86), TOBN(0x89b795f8, 0xd9f3ec6e)}}, + {{TOBN(0x27be56f1, 0xb54398dc), TOBN(0x1890efd7, 0x3fedeed5), + TOBN(0x62f77f1f, 0x9c6d0140), TOBN(0x7ef0e314, 0x596f0ee4)}, + {TOBN(0x50ca6631, 0xcc61dab3), TOBN(0x4a39801d, 0xf4866e4f), + TOBN(0x66c8d032, 0xae363b39), TOBN(0x22c591e5, 0x2ead66aa)}}, + {{TOBN(0x954ba308, 0xde02a53e), TOBN(0x2a6c060f, 0xd389f357), + TOBN(0xe6cfcde8, 0xfbf40b66), TOBN(0x8e02fc56, 0xc6340ce1)}, + {TOBN(0xe4957795, 0x73adb4ba), TOBN(0x7b86122c, 0xa7b03805), + TOBN(0x63f83512, 0x0c8e6fa6), TOBN(0x83660ea0, 0x057d7804)}}, + {{TOBN(0xbad79105, 0x21ba473c), TOBN(0xb6c50bee, 0xded5389d), + TOBN(0xee2caf4d, 0xaa7c9bc0), TOBN(0xd97b8de4, 0x8c4e98a7)}, + {TOBN(0xa9f63e70, 0xab3bbddb), TOBN(0x3898aabf, 0x2597815a), + TOBN(0x7659af89, 0xac15b3d9), TOBN(0xedf7725b, 0x703ce784)}}, + {{TOBN(0x25470fab, 0xe085116b), TOBN(0x04a43375, 0x87285310), + TOBN(0x4e39187e, 0xe2bfd52f), TOBN(0x36166b44, 0x7d9ebc74)}, + {TOBN(0x92ad433c, 0xfd4b322c), TOBN(0x726aa817, 0xba79ab51), + TOBN(0xf96eacd8, 0xc1db15eb), TOBN(0xfaf71e91, 0x0476be63)}}, + {{TOBN(0xdd69a640, 0x641fad98), TOBN(0xb7995918, 0x29622559), + TOBN(0x03c6daa5, 0xde4199dc), TOBN(0x92cadc97, 0xad545eb4)}, + {TOBN(0x1028238b, 0x256534e4), TOBN(0x73e80ce6, 0x8595409a), + TOBN(0x690d4c66, 0xd05dc59b), TOBN(0xc95f7b8f, 0x981dee80)}}, + {{TOBN(0xf4337014, 0xd856ac25), TOBN(0x441bd9dd, 0xac524dca), + TOBN(0x640b3d85, 0x5f0499f5), TOBN(0x39cf84a9, 0xd5fda182)}, + {TOBN(0x04e7b055, 0xb2aa95a0), TOBN(0x29e33f0a, 0x0ddf1860), + TOBN(0x082e74b5, 0x423f6b43), TOBN(0x217edeb9, 0x0aaa2b0f)}}, + {{TOBN(0x58b83f35, 0x83cbea55), TOBN(0xc485ee4d, 0xbc185d70), + TOBN(0x833ff03b, 0x1e5f6992), TOBN(0xb5b9b9cc, 0xcf0c0dd5)}, + {TOBN(0x7caaee8e, 0x4e9e8a50), TOBN(0x462e907b, 0x6269dafd), + TOBN(0x6ed5cee9, 0xfbe791c6), TOBN(0x68ca3259, 0xed430790)}}, + {{TOBN(0x2b72bdf2, 0x13b5ba88), TOBN(0x60294c8a, 0x35ef0ac4), + TOBN(0x9c3230ed, 0x19b99b08), TOBN(0x560fff17, 0x6c2589aa)}, + {TOBN(0x552b8487, 0xd6770374), TOBN(0xa373202d, 0x9a56f685), + TOBN(0xd3e7f907, 0x45f175d9), TOBN(0x3c2f315f, 0xd080d810)}}, + {{TOBN(0x1130e9dd, 0x7b9520e8), TOBN(0xc078f9e2, 0x0af037b5), + TOBN(0x38cd2ec7, 0x1e9c104c), TOBN(0x0f684368, 0xc472fe92)}, + {TOBN(0xd3f1b5ed, 0x6247e7ef), TOBN(0xb32d33a9, 0x396dfe21), + TOBN(0x46f59cf4, 0x4a9aa2c2), TOBN(0x69cd5168, 0xff0f7e41)}}, + {{TOBN(0x3f59da0f, 0x4b3234da), TOBN(0xcf0b0235, 0xb4579ebe), + TOBN(0x6d1cbb25, 0x6d2476c7), TOBN(0x4f0837e6, 0x9dc30f08)}, + {TOBN(0x9a4075bb, 0x906f6e98), TOBN(0x253bb434, 0xc761e7d1), + TOBN(0xde2e645f, 0x6e73af10), TOBN(0xb89a4060, 0x0c5f131c)}}, + {{TOBN(0xd12840c5, 0xb8cc037f), TOBN(0x3d093a5b, 0x7405bb47), + TOBN(0x6202c253, 0x206348b8), TOBN(0xbf5d57fc, 0xc55a3ca7)}, + {TOBN(0x89f6c90c, 0x8c3bef48), TOBN(0x23ac7623, 0x5a0a960a), + TOBN(0xdfbd3d6b, 0x552b42ab), TOBN(0x3ef22458, 0x132061f6)}}, + {{TOBN(0xd74e9bda, 0xc97e6516), TOBN(0x88779360, 0xc230f49e), + TOBN(0xa6ec1de3, 0x1e74ea49), TOBN(0x581dcee5, 0x3fb645a2)}, + {TOBN(0xbaef2391, 0x8f483f14), TOBN(0x6d2dddfc, 0xd137d13b), + TOBN(0x54cde50e, 0xd2743a42), TOBN(0x89a34fc5, 0xe4d97e67)}}, + {{TOBN(0x13f1f5b3, 0x12e08ce5), TOBN(0xa80540b8, 0xa7f0b2ca), + TOBN(0x854bcf77, 0x01982805), TOBN(0xb8653ffd, 0x233bea04)}, + {TOBN(0x8e7b8787, 0x02b0b4c9), TOBN(0x2675261f, 0x9acb170a), + TOBN(0x061a9d90, 0x930c14e5), TOBN(0xb59b30e0, 0xdef0abea)}}, + {{TOBN(0x1dc19ea6, 0x0200ec7d), TOBN(0xb6f4a3f9, 0x0bce132b), + TOBN(0xb8d5de90, 0xf13e27e0), TOBN(0xbaee5ef0, 0x1fade16f)}, + {TOBN(0x6f406aaa, 0xe4c6cf38), TOBN(0xab4cfe06, 0xd1369815), + TOBN(0x0dcffe87, 0xefd550c6), TOBN(0x9d4f59c7, 0x75ff7d39)}}, + {{TOBN(0xb02553b1, 0x51deb6ad), TOBN(0x812399a4, 0xb1877749), + TOBN(0xce90f71f, 0xca6006e1), TOBN(0xc32363a6, 0xb02b6e77)}, + {TOBN(0x02284fbe, 0xdc36c64d), TOBN(0x86c81e31, 0xa7e1ae61), + TOBN(0x2576c7e5, 0xb909d94a), TOBN(0x8b6f7d02, 0x818b2bb0)}}, + {{TOBN(0xeca3ed07, 0x56faa38a), TOBN(0xa3790e6c, 0x9305bb54), + TOBN(0xd784eeda, 0x7bc73061), TOBN(0xbd56d369, 0x6dd50614)}, + {TOBN(0xd6575949, 0x229a8aa9), TOBN(0xdcca8f47, 0x4595ec28), + TOBN(0x814305c1, 0x06ab4fe6), TOBN(0xc8c39768, 0x24f43f16)}}, + {{TOBN(0xe2a45f36, 0x523f2b36), TOBN(0x995c6493, 0x920d93bb), + TOBN(0xf8afdab7, 0x90f1632b), TOBN(0x79ebbecd, 0x1c295954)}, + {TOBN(0xc7bb3ddb, 0x79592f48), TOBN(0x67216a7b, 0x5f88e998), + TOBN(0xd91f098b, 0xbc01193e), TOBN(0xf7d928a5, 0xb1db83fc)}}, + {{TOBN(0x55e38417, 0xe991f600), TOBN(0x2a91113e, 0x2981a934), + TOBN(0xcbc9d648, 0x06b13bde), TOBN(0xb011b6ac, 0x0755ff44)}, + {TOBN(0x6f4cb518, 0x045ec613), TOBN(0x522d2d31, 0xc2f5930a), + TOBN(0x5acae1af, 0x382e65de), TOBN(0x57643067, 0x27bc966f)}}, + {{TOBN(0x5e12705d, 0x1c7193f0), TOBN(0xf0f32f47, 0x3be8858e), + TOBN(0x785c3d7d, 0x96c6dfc7), TOBN(0xd75b4a20, 0xbf31795d)}, + {TOBN(0x91acf17b, 0x342659d4), TOBN(0xe596ea34, 0x44f0378f), + TOBN(0x4515708f, 0xce52129d), TOBN(0x17387e1e, 0x79f2f585)}}, + {{TOBN(0x72cfd2e9, 0x49dee168), TOBN(0x1ae05223, 0x3e2af239), + TOBN(0x009e75be, 0x1d94066a), TOBN(0x6cca31c7, 0x38abf413)}, + {TOBN(0xb50bd61d, 0x9bc49908), TOBN(0x4a9b4a8c, 0xf5e2bc1e), + TOBN(0xeb6cc5f7, 0x946f83ac), TOBN(0x27da93fc, 0xebffab28)}}, + {{TOBN(0xea314c96, 0x4821c8c5), TOBN(0x8de49ded, 0xa83c15f4), + TOBN(0x7a64cf20, 0x7af33004), TOBN(0x45f1bfeb, 0xc9627e10)}, + {TOBN(0x878b0626, 0x54b9df60), TOBN(0x5e4fdc3c, 0xa95c0b33), + TOBN(0xe54a37ca, 0xc2035d8e), TOBN(0x9087cda9, 0x80f20b8c)}}, + {{TOBN(0x36f61c23, 0x8319ade4), TOBN(0x766f287a, 0xde8cfdf8), + TOBN(0x48821948, 0x346f3705), TOBN(0x49a7b853, 0x16e4f4a2)}, + {TOBN(0xb9b3f8a7, 0x5cedadfd), TOBN(0x8f562815, 0x8db2a815), + TOBN(0xc0b7d554, 0x01f68f95), TOBN(0x12971e27, 0x688a208e)}}, + {{TOBN(0xc9f8b696, 0xd0ff34fc), TOBN(0x20824de2, 0x1222718c), + TOBN(0x7213cf9f, 0x0c95284d), TOBN(0xe2ad741b, 0xdc158240)}, + {TOBN(0x0ee3a6df, 0x54043ccf), TOBN(0x16ff479b, 0xd84412b3), + TOBN(0xf6c74ee0, 0xdfc98af0), TOBN(0xa78a169f, 0x52fcd2fb)}}, + {{TOBN(0xd8ae8746, 0x99c930e9), TOBN(0x1d33e858, 0x49e117a5), + TOBN(0x7581fcb4, 0x6624759f), TOBN(0xde50644f, 0x5bedc01d)}, + {TOBN(0xbeec5d00, 0xcaf3155e), TOBN(0x672d66ac, 0xbc73e75f), + TOBN(0x86b9d8c6, 0x270b01db), TOBN(0xd249ef83, 0x50f55b79)}}, + {{TOBN(0x6131d6d4, 0x73978fe3), TOBN(0xcc4e4542, 0x754b00a1), + TOBN(0x4e05df05, 0x57dfcfe9), TOBN(0x94b29cdd, 0x51ef6bf0)}, + {TOBN(0xe4530cff, 0x9bc7edf2), TOBN(0x8ac236fd, 0xd3da65f3), + TOBN(0x0faf7d5f, 0xc8eb0b48), TOBN(0x4d2de14c, 0x660eb039)}}, + {{TOBN(0xc006bba7, 0x60430e54), TOBN(0x10a2d0d6, 0xda3289ab), + TOBN(0x9c037a5d, 0xd7979c59), TOBN(0x04d1f3d3, 0xa116d944)}, + {TOBN(0x9ff22473, 0x8a0983cd), TOBN(0x28e25b38, 0xc883cabb), + TOBN(0xe968dba5, 0x47a58995), TOBN(0x2c80b505, 0x774eebdf)}}, + {{TOBN(0xee763b71, 0x4a953beb), TOBN(0x502e223f, 0x1642e7f6), + TOBN(0x6fe4b641, 0x61d5e722), TOBN(0x9d37c5b0, 0xdbef5316)}, + {TOBN(0x0115ed70, 0xf8330bc7), TOBN(0x139850e6, 0x75a72789), + TOBN(0x27d7faec, 0xffceccc2), TOBN(0x3016a860, 0x4fd9f7f6)}}, + {{TOBN(0xc492ec64, 0x4cd8f64c), TOBN(0x58a2d790, 0x279d7b51), + TOBN(0x0ced1fc5, 0x1fc75256), TOBN(0x3e658aed, 0x8f433017)}, + {TOBN(0x0b61942e, 0x05da59eb), TOBN(0xba3d60a3, 0x0ddc3722), + TOBN(0x7c311cd1, 0x742e7f87), TOBN(0x6473ffee, 0xf6b01b6e)}}}, + {{{TOBN(0x8303604f, 0x692ac542), TOBN(0xf079ffe1, 0x227b91d3), + TOBN(0x19f63e63, 0x15aaf9bd), TOBN(0xf99ee565, 0xf1f344fb)}, + {TOBN(0x8a1d661f, 0xd6219199), TOBN(0x8c883bc6, 0xd48ce41c), + TOBN(0x1065118f, 0x3c74d904), TOBN(0x713889ee, 0x0faf8b1b)}}, + {{TOBN(0x972b3f8f, 0x81a1b3be), TOBN(0x4f3ce145, 0xce2764a0), + TOBN(0xe2d0f1cc, 0x28c4f5f7), TOBN(0xdeee0c0d, 0xc7f3985b)}, + {TOBN(0x7df4adc0, 0xd39e25c3), TOBN(0x40619820, 0xc467a080), + TOBN(0x440ebc93, 0x61cf5a58), TOBN(0x527729a6, 0x422ad600)}}, + {{TOBN(0xca6c0937, 0xb1b76ba6), TOBN(0x1a2eab85, 0x4d2026dc), + TOBN(0xb1715e15, 0x19d9ae0a), TOBN(0xf1ad9199, 0xbac4a026)}, + {TOBN(0x35b3dfb8, 0x07ea7b0e), TOBN(0xedf5496f, 0x3ed9eb89), + TOBN(0x8932e5ff, 0x2d6d08ab), TOBN(0xf314874e, 0x25bd2731)}}, + {{TOBN(0xefb26a75, 0x3f73f449), TOBN(0x1d1c94f8, 0x8d44fc79), + TOBN(0x49f0fbc5, 0x3bc0dc4d), TOBN(0xb747ea0b, 0x3698a0d0)}, + {TOBN(0x5218c3fe, 0x228d291e), TOBN(0x35b804b5, 0x43c129d6), + TOBN(0xfac859b8, 0xd1acc516), TOBN(0x6c10697d, 0x95d6e668)}}, + {{TOBN(0xc38e438f, 0x0876fd4e), TOBN(0x45f0c307, 0x83d2f383), + TOBN(0x203cc2ec, 0xb10934cb), TOBN(0x6a8f2439, 0x2c9d46ee)}, + {TOBN(0xf16b431b, 0x65ccde7b), TOBN(0x41e2cd18, 0x27e76a6f), + TOBN(0xb9c8cf8f, 0x4e3484d7), TOBN(0x64426efd, 0x8315244a)}}, + {{TOBN(0x1c0a8e44, 0xfc94dea3), TOBN(0x34c8cdbf, 0xdad6a0b0), + TOBN(0x919c3840, 0x04113cef), TOBN(0xfd32fba4, 0x15490ffa)}, + {TOBN(0x58d190f6, 0x795dcfb7), TOBN(0xfef01b03, 0x83588baf), + TOBN(0x9e6d1d63, 0xca1fc1c0), TOBN(0x53173f96, 0xf0a41ac9)}}, + {{TOBN(0x2b1d402a, 0xba16f73b), TOBN(0x2fb31014, 0x8cf9b9fc), + TOBN(0x2d51e60e, 0x446ef7bf), TOBN(0xc731021b, 0xb91e1745)}, + {TOBN(0x9d3b4724, 0x4fee99d4), TOBN(0x4bca48b6, 0xfac5c1ea), + TOBN(0x70f5f514, 0xbbea9af7), TOBN(0x751f55a5, 0x974c283a)}}, + {{TOBN(0x6e30251a, 0xcb452fdb), TOBN(0x31ee6965, 0x50f30650), + TOBN(0xb0b3e508, 0x933548d9), TOBN(0xb8949a4f, 0xf4b0ef5b)}, + {TOBN(0x208b8326, 0x3c88f3bd), TOBN(0xab147c30, 0xdb1d9989), + TOBN(0xed6515fd, 0x44d4df03), TOBN(0x17a12f75, 0xe72eb0c5)}}, + {{TOBN(0x3b59796d, 0x36cf69db), TOBN(0x1219eee9, 0x56670c18), + TOBN(0xfe3341f7, 0x7a070d8e), TOBN(0x9b70130b, 0xa327f90c)}, + {TOBN(0x36a32462, 0x0ae18e0e), TOBN(0x2021a623, 0x46c0a638), + TOBN(0x251b5817, 0xc62eb0d4), TOBN(0x87bfbcdf, 0x4c762293)}}, + {{TOBN(0xf78ab505, 0xcdd61d64), TOBN(0x8c7a53fc, 0xc8c18857), + TOBN(0xa653ce6f, 0x16147515), TOBN(0x9c923aa5, 0xea7d52d5)}, + {TOBN(0xc24709cb, 0x5c18871f), TOBN(0x7d53bec8, 0x73b3cc74), + TOBN(0x59264aff, 0xfdd1d4c4), TOBN(0x5555917e, 0x240da582)}}, + {{TOBN(0xcae8bbda, 0x548f5a0e), TOBN(0x1910eaba, 0x3bbfbbe1), + TOBN(0xae579685, 0x7677afc3), TOBN(0x49ea61f1, 0x73ff0b5c)}, + {TOBN(0x78655478, 0x4f7c3922), TOBN(0x95d337cd, 0x20c68eef), + TOBN(0x68f1e1e5, 0xdf779ab9), TOBN(0x14b491b0, 0xb5cf69a8)}}, + {{TOBN(0x7a6cbbe0, 0x28e3fe89), TOBN(0xe7e1fee4, 0xc5aac0eb), + TOBN(0x7f47eda5, 0x697e5140), TOBN(0x4f450137, 0xb454921f)}, + {TOBN(0xdb625f84, 0x95cd8185), TOBN(0x74be0ba1, 0xcdb2e583), + TOBN(0xaee4fd7c, 0xdd5e6de4), TOBN(0x4251437d, 0xe8101739)}}, + {{TOBN(0x686d72a0, 0xac620366), TOBN(0x4be3fb9c, 0xb6d59344), + TOBN(0x6e8b44e7, 0xa1eb75b9), TOBN(0x84e39da3, 0x91a5c10c)}, + {TOBN(0x37cc1490, 0xb38f0409), TOBN(0x02951943, 0x2c2ade82), + TOBN(0x9b688783, 0x1190a2d8), TOBN(0x25627d14, 0x231182ba)}}, + {{TOBN(0x6eb550aa, 0x658a6d87), TOBN(0x1405aaa7, 0xcf9c7325), + TOBN(0xd147142e, 0x5c8748c9), TOBN(0x7f637e4f, 0x53ede0e0)}, + {TOBN(0xf8ca2776, 0x14ffad2c), TOBN(0xe58fb1bd, 0xbafb6791), + TOBN(0x17158c23, 0xbf8f93fc), TOBN(0x7f15b373, 0x0a4a4655)}}, + {{TOBN(0x39d4add2, 0xd842ca72), TOBN(0xa71e4391, 0x3ed96305), + TOBN(0x5bb09cbe, 0x6700be14), TOBN(0x68d69d54, 0xd8befcf6)}, + {TOBN(0xa45f5367, 0x37183bcf), TOBN(0x7152b7bb, 0x3370dff7), + TOBN(0xcf887baa, 0xbf12525b), TOBN(0xe7ac7bdd, 0xd6d1e3cd)}}, + {{TOBN(0x25914f78, 0x81fdad90), TOBN(0xcf638f56, 0x0d2cf6ab), + TOBN(0xb90bc03f, 0xcc054de5), TOBN(0x932811a7, 0x18b06350)}, + {TOBN(0x2f00b330, 0x9bbd11ff), TOBN(0x76108a6f, 0xb4044974), + TOBN(0x801bb9e0, 0xa851d266), TOBN(0x0dd099be, 0xbf8990c1)}}, + {{TOBN(0x58c5aaaa, 0xabe32986), TOBN(0x0fe9dd2a, 0x50d59c27), + TOBN(0x84951ff4, 0x8d307305), TOBN(0x6c23f829, 0x86529b78)}, + {TOBN(0x50bb2218, 0x0b136a79), TOBN(0x7e2174de, 0x77a20996), + TOBN(0x6f00a4b9, 0xc0bb4da6), TOBN(0x89a25a17, 0xefdde8da)}}, + {{TOBN(0xf728a27e, 0xc11ee01d), TOBN(0xf900553a, 0xe5f10dfb), + TOBN(0x189a83c8, 0x02ec893c), TOBN(0x3ca5bdc1, 0x23f66d77)}, + {TOBN(0x98781537, 0x97eada9f), TOBN(0x59c50ab3, 0x10256230), + TOBN(0x346042d9, 0x323c69b3), TOBN(0x1b715a6d, 0x2c460449)}}, + {{TOBN(0xa41dd476, 0x6ae06e0b), TOBN(0xcdd7888e, 0x9d42e25f), + TOBN(0x0f395f74, 0x56b25a20), TOBN(0xeadfe0ae, 0x8700e27e)}, + {TOBN(0xb09d52a9, 0x69950093), TOBN(0x3525d9cb, 0x327f8d40), + TOBN(0xb8235a94, 0x67df886a), TOBN(0x77e4b0dd, 0x035faec2)}}, + {{TOBN(0x115eb20a, 0x517d7061), TOBN(0x77fe3433, 0x6c2df683), + TOBN(0x6870ddc7, 0xcdc6fc67), TOBN(0xb1610588, 0x0b87de83)}, + {TOBN(0x343584ca, 0xd9c4ddbe), TOBN(0xb3164f1c, 0x3d754be2), + TOBN(0x0731ed3a, 0xc1e6c894), TOBN(0x26327dec, 0x4f6b904c)}}, + {{TOBN(0x9d49c6de, 0x97b5cd32), TOBN(0x40835dae, 0xb5eceecd), + TOBN(0xc66350ed, 0xd9ded7fe), TOBN(0x8aeebb5c, 0x7a678804)}, + {TOBN(0x51d42fb7, 0x5b8ee9ec), TOBN(0xd7a17bdd, 0x8e3ca118), + TOBN(0x40d7511a, 0x2ef4400e), TOBN(0xc48990ac, 0x875a66f4)}}, + {{TOBN(0x8de07d2a, 0x2199e347), TOBN(0xbee75556, 0x2a39e051), + TOBN(0x56918786, 0x916e51dc), TOBN(0xeb191313, 0x4a2d89ec)}, + {TOBN(0x6679610d, 0x37d341ed), TOBN(0x434fbb41, 0x56d51c2b), + TOBN(0xe54b7ee7, 0xd7492dba), TOBN(0xaa33a79a, 0x59021493)}}, + {{TOBN(0x49fc5054, 0xe4bd6d3d), TOBN(0x09540f04, 0x5ab551d0), + TOBN(0x8acc9085, 0x4942d3a6), TOBN(0x231af02f, 0x2d28323b)}, + {TOBN(0x93458cac, 0x0992c163), TOBN(0x1fef8e71, 0x888e3bb4), + TOBN(0x27578da5, 0xbe8c268c), TOBN(0xcc8be792, 0xe805ec00)}}, + {{TOBN(0x29267bae, 0xc61c3855), TOBN(0xebff429d, 0x58c1fd3b), + TOBN(0x22d886c0, 0x8c0b93b8), TOBN(0xca5e00b2, 0x2ddb8953)}, + {TOBN(0xcf330117, 0xc3fed8b7), TOBN(0xd49ac6fa, 0x819c01f6), + TOBN(0x6ddaa6bd, 0x3c0fbd54), TOBN(0x91743068, 0x8049a2cf)}}, + {{TOBN(0xd67f981e, 0xaff2ef81), TOBN(0xc3654d35, 0x2818ae80), + TOBN(0x81d05044, 0x1b2aa892), TOBN(0x2db067bf, 0x3d099328)}, + {TOBN(0xe7c79e86, 0x703dcc97), TOBN(0xe66f9b37, 0xe133e215), + TOBN(0xcdf119a6, 0xe39a7a5c), TOBN(0x47c60de3, 0x876f1b61)}}, + {{TOBN(0x6e405939, 0xd860f1b2), TOBN(0x3e9a1dbc, 0xf5ed4d4a), + TOBN(0x3f23619e, 0xc9b6bcbd), TOBN(0x5ee790cf, 0x734e4497)}, + {TOBN(0xf0a834b1, 0x5bdaf9bb), TOBN(0x02cedda7, 0x4ca295f0), + TOBN(0x4619aa2b, 0xcb8e378c), TOBN(0xe5613244, 0xcc987ea4)}}, + {{TOBN(0x0bc022cc, 0x76b23a50), TOBN(0x4a2793ad, 0x0a6c21ce), + TOBN(0x38328780, 0x89cac3f5), TOBN(0x29176f1b, 0xcba26d56)}, + {TOBN(0x06296187, 0x4f6f59eb), TOBN(0x86e9bca9, 0x8bdc658e), + TOBN(0x2ca9c4d3, 0x57e30402), TOBN(0x5438b216, 0x516a09bb)}}, + {{TOBN(0x0a6a063c, 0x7672765a), TOBN(0x37a3ce64, 0x0547b9bf), + TOBN(0x42c099c8, 0x98b1a633), TOBN(0xb5ab800d, 0x05ee6961)}, + {TOBN(0xf1963f59, 0x11a5acd6), TOBN(0xbaee6157, 0x46201063), + TOBN(0x36d9a649, 0xa596210a), TOBN(0xaed04363, 0x1ba7138c)}}, + {{TOBN(0xcf817d1c, 0xa4a82b76), TOBN(0x5586960e, 0xf3806be9), + TOBN(0x7ab67c89, 0x09dc6bb5), TOBN(0x52ace7a0, 0x114fe7eb)}, + {TOBN(0xcd987618, 0xcbbc9b70), TOBN(0x4f06fd5a, 0x604ca5e1), + TOBN(0x90af14ca, 0x6dbde133), TOBN(0x1afe4322, 0x948a3264)}}, + {{TOBN(0xa70d2ca6, 0xc44b2c6c), TOBN(0xab726799, 0x0ef87dfe), + TOBN(0x310f64dc, 0x2e696377), TOBN(0x49b42e68, 0x4c8126a0)}, + {TOBN(0x0ea444c3, 0xcea0b176), TOBN(0x53a8ddf7, 0xcb269182), + TOBN(0xf3e674eb, 0xbbba9dcb), TOBN(0x0d2878a8, 0xd8669d33)}}, + {{TOBN(0x04b935d5, 0xd019b6a3), TOBN(0xbb5cf88e, 0x406f1e46), + TOBN(0xa1912d16, 0x5b57c111), TOBN(0x9803fc21, 0x19ebfd78)}, + {TOBN(0x4f231c9e, 0xc07764a9), TOBN(0xd93286ee, 0xb75bd055), + TOBN(0x83a9457d, 0x8ee6c9de), TOBN(0x04695915, 0x6087ec90)}}, + {{TOBN(0x14c6dd8a, 0x58d6cd46), TOBN(0x9cb633b5, 0x8e6634d2), + TOBN(0xc1305047, 0xf81bc328), TOBN(0x12ede0e2, 0x26a177e5)}, + {TOBN(0x332cca62, 0x065a6f4f), TOBN(0xc3a47ecd, 0x67be487b), + TOBN(0x741eb187, 0x0f47ed1c), TOBN(0x99e66e58, 0xe7598b14)}}, + {{TOBN(0x6f0544ca, 0x63d0ff12), TOBN(0xe5efc784, 0xb610a05f), + TOBN(0xf72917b1, 0x7cad7b47), TOBN(0x3ff6ea20, 0xf2cac0c0)}, + {TOBN(0xcc23791b, 0xf21db8b7), TOBN(0x7dac70b1, 0xd7d93565), + TOBN(0x682cda1d, 0x694bdaad), TOBN(0xeb88bb8c, 0x1023516d)}}, + {{TOBN(0xc4c634b4, 0xdfdbeb1b), TOBN(0x22f5ca72, 0xb4ee4dea), + TOBN(0x1045a368, 0xe6524821), TOBN(0xed9e8a3f, 0x052b18b2)}, + {TOBN(0x9b7f2cb1, 0xb961f49a), TOBN(0x7fee2ec1, 0x7b009670), + TOBN(0x350d8754, 0x22507a6d), TOBN(0x561bd711, 0x4db55f1d)}}, + {{TOBN(0x4c189ccc, 0x320bbcaf), TOBN(0x568434cf, 0xdf1de48c), + TOBN(0x6af1b00e, 0x0fa8f128), TOBN(0xf0ba9d02, 0x8907583c)}, + {TOBN(0x735a4004, 0x32ff9f60), TOBN(0x3dd8e4b6, 0xc25dcf33), + TOBN(0xf2230f16, 0x42c74cef), TOBN(0xd8117623, 0x013fa8ad)}}, + {{TOBN(0x36822876, 0xf51fe76e), TOBN(0x8a6811cc, 0x11d62589), + TOBN(0xc3fc7e65, 0x46225718), TOBN(0xb7df2c9f, 0xc82fdbcd)}, + {TOBN(0x3b1d4e52, 0xdd7b205b), TOBN(0xb6959478, 0x47a2e414), + TOBN(0x05e4d793, 0xefa91148), TOBN(0xb47ed446, 0xfd2e9675)}}, + {{TOBN(0x1a7098b9, 0x04c9d9bf), TOBN(0x661e2881, 0x1b793048), + TOBN(0xb1a16966, 0xb01ee461), TOBN(0xbc521308, 0x2954746f)}, + {TOBN(0xc909a0fc, 0x2477de50), TOBN(0xd80bb41c, 0x7dbd51ef), + TOBN(0xa85be7ec, 0x53294905), TOBN(0x6d465b18, 0x83958f97)}}, + {{TOBN(0x16f6f330, 0xfb6840fd), TOBN(0xfaaeb214, 0x3401e6c8), + TOBN(0xaf83d30f, 0xccb5b4f8), TOBN(0x22885739, 0x266dec4b)}, + {TOBN(0x51b4367c, 0x7bc467df), TOBN(0x926562e3, 0xd842d27a), + TOBN(0xdfcb6614, 0x0fea14a6), TOBN(0xeb394dae, 0xf2734cd9)}}, + {{TOBN(0x3eeae5d2, 0x11c0be98), TOBN(0xb1e6ed11, 0x814e8165), + TOBN(0x191086bc, 0xe52bce1c), TOBN(0x14b74cc6, 0xa75a04da)}, + {TOBN(0x63cf1186, 0x8c060985), TOBN(0x071047de, 0x2dbd7f7c), + TOBN(0x4e433b8b, 0xce0942ca), TOBN(0xecbac447, 0xd8fec61d)}}, + {{TOBN(0x8f0ed0e2, 0xebf3232f), TOBN(0xfff80f9e, 0xc52a2edd), + TOBN(0xad9ab433, 0x75b55fdb), TOBN(0x73ca7820, 0xe42e0c11)}, + {TOBN(0x6dace0a0, 0xe6251b46), TOBN(0x89bc6b5c, 0x4c0d932d), + TOBN(0x3438cd77, 0x095da19a), TOBN(0x2f24a939, 0x8d48bdfb)}}, + {{TOBN(0x99b47e46, 0x766561b7), TOBN(0x736600e6, 0x0ed0322a), + TOBN(0x06a47cb1, 0x638e1865), TOBN(0x927c1c2d, 0xcb136000)}, + {TOBN(0x29542337, 0x0cc5df69), TOBN(0x99b37c02, 0x09d649a9), + TOBN(0xc5f0043c, 0x6aefdb27), TOBN(0x6cdd9987, 0x1be95c27)}}, + {{TOBN(0x69850931, 0x390420d2), TOBN(0x299c40ac, 0x0983efa4), + TOBN(0x3a05e778, 0xaf39aead), TOBN(0x84274408, 0x43a45193)}, + {TOBN(0x6bcd0fb9, 0x91a711a0), TOBN(0x461592c8, 0x9f52ab17), + TOBN(0xb49302b4, 0xda3c6ed6), TOBN(0xc51fddc7, 0x330d7067)}}, + {{TOBN(0x94babeb6, 0xda50d531), TOBN(0x521b840d, 0xa6a7b9da), + TOBN(0x5305151e, 0x404bdc89), TOBN(0x1bcde201, 0xd0d07449)}, + {TOBN(0xf427a78b, 0x3b76a59a), TOBN(0xf84841ce, 0x07791a1b), + TOBN(0xebd314be, 0xbf91ed1c), TOBN(0x8e61d34c, 0xbf172943)}}, + {{TOBN(0x1d5dc451, 0x5541b892), TOBN(0xb186ee41, 0xfc9d9e54), + TOBN(0x9d9f345e, 0xd5bf610d), TOBN(0x3e7ba65d, 0xf6acca9f)}, + {TOBN(0x9dda787a, 0xa8369486), TOBN(0x09f9dab7, 0x8eb5ba53), + TOBN(0x5afb2033, 0xd6481bc3), TOBN(0x76f4ce30, 0xafa62104)}}, + {{TOBN(0xa8fa00cf, 0xf4f066b5), TOBN(0x89ab5143, 0x461dafc2), + TOBN(0x44339ed7, 0xa3389998), TOBN(0x2ff862f1, 0xbc214903)}, + {TOBN(0x2c88f985, 0xb05556e3), TOBN(0xcd96058e, 0x3467081e), + TOBN(0x7d6a4176, 0xedc637ea), TOBN(0xe1743d09, 0x36a5acdc)}}, + {{TOBN(0x66fd72e2, 0x7eb37726), TOBN(0xf7fa264e, 0x1481a037), + TOBN(0x9fbd3bde, 0x45f4aa79), TOBN(0xed1e0147, 0x767c3e22)}, + {TOBN(0x7621f979, 0x82e7abe2), TOBN(0x19eedc72, 0x45f633f8), + TOBN(0xe69b155e, 0x6137bf3a), TOBN(0xa0ad13ce, 0x414ee94e)}}, + {{TOBN(0x93e3d524, 0x1c0e651a), TOBN(0xab1a6e2a, 0x02ce227e), + TOBN(0xe7af1797, 0x4ab27eca), TOBN(0x245446de, 0xbd444f39)}, + {TOBN(0x59e22a21, 0x56c07613), TOBN(0x43deafce, 0xf4275498), + TOBN(0x10834ccb, 0x67fd0946), TOBN(0xa75841e5, 0x47406edf)}}, + {{TOBN(0xebd6a677, 0x7b0ac93d), TOBN(0xa6e37b0d, 0x78f5e0d7), + TOBN(0x2516c096, 0x76f5492b), TOBN(0x1e4bf888, 0x9ac05f3a)}, + {TOBN(0xcdb42ce0, 0x4df0ba2b), TOBN(0x935d5cfd, 0x5062341b), + TOBN(0x8a303333, 0x82acac20), TOBN(0x429438c4, 0x5198b00e)}}, + {{TOBN(0x1d083bc9, 0x049d33fa), TOBN(0x58b82dda, 0x946f67ff), + TOBN(0xac3e2db8, 0x67a1d6a3), TOBN(0x62e6bead, 0x1798aac8)}, + {TOBN(0xfc85980f, 0xde46c58c), TOBN(0xa7f69379, 0x69c8d7be), + TOBN(0x23557927, 0x837b35ec), TOBN(0x06a933d8, 0xe0790c0c)}}, + {{TOBN(0x827c0e9b, 0x077ff55d), TOBN(0x53977798, 0xbb26e680), + TOBN(0x59530874, 0x1d9cb54f), TOBN(0xcca3f449, 0x4aac53ef)}, + {TOBN(0x11dc5c87, 0xa07eda0f), TOBN(0xc138bccf, 0xfd6400c8), + TOBN(0x549680d3, 0x13e5da72), TOBN(0xc93eed82, 0x4540617e)}}, + {{TOBN(0xfd3db157, 0x4d0b75c0), TOBN(0x9716eb42, 0x6386075b), + TOBN(0x0639605c, 0x817b2c16), TOBN(0x09915109, 0xf1e4f201)}, + {TOBN(0x35c9a928, 0x5cca6c3b), TOBN(0xb25f7d1a, 0x3505c900), + TOBN(0xeb9f7d20, 0x630480c4), TOBN(0xc3c7b8c6, 0x2a1a501c)}}, + {{TOBN(0x3f99183c, 0x5a1f8e24), TOBN(0xfdb118fa, 0x9dd255f0), + TOBN(0xb9b18b90, 0xc27f62a6), TOBN(0xe8f732f7, 0x396ec191)}, + {TOBN(0x524a2d91, 0x0be786ab), TOBN(0x5d32adef, 0x0ac5a0f5), + TOBN(0x9b53d4d6, 0x9725f694), TOBN(0x032a76c6, 0x0510ba89)}}, + {{TOBN(0x840391a3, 0xebeb1544), TOBN(0x44b7b88c, 0x3ed73ac3), + TOBN(0xd24bae7a, 0x256cb8b3), TOBN(0x7ceb151a, 0xe394cb12)}, + {TOBN(0xbd6b66d0, 0x5bc1e6a8), TOBN(0xec70cecb, 0x090f07bf), + TOBN(0x270644ed, 0x7d937589), TOBN(0xee9e1a3d, 0x5f1dccfe)}}, + {{TOBN(0xb0d40a84, 0x745b98d2), TOBN(0xda429a21, 0x2556ed40), + TOBN(0xf676eced, 0x85148cb9), TOBN(0x5a22d40c, 0xded18936)}, + {TOBN(0x3bc4b9e5, 0x70e8a4ce), TOBN(0xbfd1445b, 0x9eae0379), + TOBN(0xf23f2c0c, 0x1a0bd47e), TOBN(0xa9c0bb31, 0xe1845531)}}, + {{TOBN(0x9ddc4d60, 0x0a4c3f6b), TOBN(0xbdfaad79, 0x2c15ef44), + TOBN(0xce55a236, 0x7f484acc), TOBN(0x08653ca7, 0x055b1f15)}, + {TOBN(0x2efa8724, 0x538873a3), TOBN(0x09299e5d, 0xace1c7e7), + TOBN(0x07afab66, 0xade332ba), TOBN(0x9be1fdf6, 0x92dd71b7)}}, + {{TOBN(0xa49b5d59, 0x5758b11c), TOBN(0x0b852893, 0xc8654f40), + TOBN(0xb63ef6f4, 0x52379447), TOBN(0xd4957d29, 0x105e690c)}, + {TOBN(0x7d484363, 0x646559b0), TOBN(0xf4a8273c, 0x49788a8e), + TOBN(0xee406cb8, 0x34ce54a9), TOBN(0x1e1c260f, 0xf86fda9b)}}, + {{TOBN(0xe150e228, 0xcf6a4a81), TOBN(0x1fa3b6a3, 0x1b488772), + TOBN(0x1e6ff110, 0xc5a9c15b), TOBN(0xc6133b91, 0x8ad6aa47)}, + {TOBN(0x8ac5d55c, 0x9dffa978), TOBN(0xba1d1c1d, 0x5f3965f2), + TOBN(0xf969f4e0, 0x7732b52f), TOBN(0xfceecdb5, 0xa5172a07)}}, + {{TOBN(0xb0120a5f, 0x10f2b8f5), TOBN(0xc83a6cdf, 0x5c4c2f63), + TOBN(0x4d47a491, 0xf8f9c213), TOBN(0xd9e1cce5, 0xd3f1bbd5)}, + {TOBN(0x0d91bc7c, 0xaba7e372), TOBN(0xfcdc74c8, 0xdfd1a2db), + TOBN(0x05efa800, 0x374618e5), TOBN(0x11216969, 0x15a7925e)}}, + {{TOBN(0xd4c89823, 0xf6021c5d), TOBN(0x880d5e84, 0xeff14423), + TOBN(0x6523bc5a, 0x6dcd1396), TOBN(0xd1acfdfc, 0x113c978b)}, + {TOBN(0xb0c164e8, 0xbbb66840), TOBN(0xf7f4301e, 0x72b58459), + TOBN(0xc29ad4a6, 0xa638e8ec), TOBN(0xf5ab8961, 0x46b78699)}}, + {{TOBN(0x9dbd7974, 0x0e954750), TOBN(0x0121de88, 0x64f9d2c6), + TOBN(0x2e597b42, 0xd985232e), TOBN(0x55b6c3c5, 0x53451777)}, + {TOBN(0xbb53e547, 0x519cb9fb), TOBN(0xf134019f, 0x8428600d), + TOBN(0x5a473176, 0xe081791a), TOBN(0x2f3e2263, 0x35fb0c08)}}, + {{TOBN(0xb28c3017, 0x73d273b0), TOBN(0xccd21076, 0x7721ef9a), + TOBN(0x054cc292, 0xb650dc39), TOBN(0x662246de, 0x6188045e)}, + {TOBN(0x904b52fa, 0x6b83c0d1), TOBN(0xa72df267, 0x97e9cd46), + TOBN(0x886b43cd, 0x899725e4), TOBN(0x2b651688, 0xd849ff22)}}, + {{TOBN(0x60479b79, 0x02f34533), TOBN(0x5e354c14, 0x0c77c148), + TOBN(0xb4bb7581, 0xa8537c78), TOBN(0x188043d7, 0xefe1495f)}, + {TOBN(0x9ba12f42, 0x8c1d5026), TOBN(0x2e0c8a26, 0x93d4aaab), + TOBN(0xbdba7b8b, 0xaa57c450), TOBN(0x140c9ad6, 0x9bbdafef)}}, + {{TOBN(0x2067aa42, 0x25ac0f18), TOBN(0xf7b1295b, 0x04d1fbf3), + TOBN(0x14829111, 0xa4b04824), TOBN(0x2ce3f192, 0x33bd5e91)}, + {TOBN(0x9c7a1d55, 0x8f2e1b72), TOBN(0xfe932286, 0x302aa243), + TOBN(0x497ca7b4, 0xd4be9554), TOBN(0xb8e821b8, 0xe0547a6e)}}, + {{TOBN(0xfb2838be, 0x67e573e0), TOBN(0x05891db9, 0x4084c44b), + TOBN(0x91311373, 0x96c1c2c5), TOBN(0x6aebfa3f, 0xd958444b)}, + {TOBN(0xac9cdce9, 0xe56e55c1), TOBN(0x7148ced3, 0x2caa46d0), + TOBN(0x2e10c7ef, 0xb61fe8eb), TOBN(0x9fd835da, 0xff97cf4d)}}}, + {{{TOBN(0xa36da109, 0x081e9387), TOBN(0xfb9780d7, 0x8c935828), + TOBN(0xd5940332, 0xe540b015), TOBN(0xc9d7b51b, 0xe0f466fa)}, + {TOBN(0xfaadcd41, 0xd6d9f671), TOBN(0xba6c1e28, 0xb1a2ac17), + TOBN(0x066a7833, 0xed201e5f), TOBN(0x19d99719, 0xf90f462b)}}, + {{TOBN(0xf431f462, 0x060b5f61), TOBN(0xa56f46b4, 0x7bd057c2), + TOBN(0x348dca6c, 0x47e1bf65), TOBN(0x9a38783e, 0x41bcf1ff)}, + {TOBN(0x7a5d33a9, 0xda710718), TOBN(0x5a779987, 0x2e0aeaf6), + TOBN(0xca87314d, 0x2d29d187), TOBN(0xfa0edc3e, 0xc687d733)}}, + {{TOBN(0x9df33621, 0x6a31e09b), TOBN(0xde89e44d, 0xc1350e35), + TOBN(0x29214871, 0x4ca0cf52), TOBN(0xdf379672, 0x0b88a538)}, + {TOBN(0xc92a510a, 0x2591d61b), TOBN(0x79aa87d7, 0x585b447b), + TOBN(0xf67db604, 0xe5287f77), TOBN(0x1697c8bf, 0x5efe7a80)}}, + {{TOBN(0x1c894849, 0xcb198ac7), TOBN(0xa884a93d, 0x0f264665), + TOBN(0x2da964ef, 0x9b200678), TOBN(0x3c351b87, 0x009834e6)}, + {TOBN(0xafb2ef9f, 0xe2c4b44b), TOBN(0x580f6c47, 0x3326790c), + TOBN(0xb8480521, 0x0b02264a), TOBN(0x8ba6f9e2, 0x42a194e2)}}, + {{TOBN(0xfc87975f, 0x8fb54738), TOBN(0x35160788, 0x27c3ead3), + TOBN(0x834116d2, 0xb74a085a), TOBN(0x53c99a73, 0xa62fe996)}, + {TOBN(0x87585be0, 0x5b81c51b), TOBN(0x925bafa8, 0xbe0852b7), + TOBN(0x76a4fafd, 0xa84d19a7), TOBN(0x39a45982, 0x585206d4)}}, + {{TOBN(0x499b6ab6, 0x5eb03c0e), TOBN(0xf19b7954, 0x72bc3fde), + TOBN(0xa86b5b9c, 0x6e3a80d2), TOBN(0xe4377508, 0x6d42819f)}, + {TOBN(0xc1663650, 0xbb3ee8a3), TOBN(0x75eb14fc, 0xb132075f), + TOBN(0xa8ccc906, 0x7ad834f6), TOBN(0xea6a2474, 0xe6e92ffd)}}, + {{TOBN(0x9d72fd95, 0x0f8d6758), TOBN(0xcb84e101, 0x408c07dd), + TOBN(0xb9114bfd, 0xa5e23221), TOBN(0x358b5fe2, 0xe94e742c)}, + {TOBN(0x1c0577ec, 0x95f40e75), TOBN(0xf0155451, 0x3d73f3d6), + TOBN(0x9d55cd67, 0xbd1b9b66), TOBN(0x63e86e78, 0xaf8d63c7)}}, + {{TOBN(0x39d934ab, 0xd3c095f1), TOBN(0x04b261be, 0xe4b76d71), + TOBN(0x1d2e6970, 0xe73e6984), TOBN(0x879fb23b, 0x5e5fcb11)}, + {TOBN(0x11506c72, 0xdfd75490), TOBN(0x3a97d085, 0x61bcf1c1), + TOBN(0x43201d82, 0xbf5e7007), TOBN(0x7f0ac52f, 0x798232a7)}}, + {{TOBN(0x2715cbc4, 0x6eb564d4), TOBN(0x8d6c752c, 0x9e570e29), + TOBN(0xf80247c8, 0x9ef5fd5d), TOBN(0xc3c66b46, 0xd53eb514)}, + {TOBN(0x9666b401, 0x0f87de56), TOBN(0xce62c06f, 0xc6c603b5), + TOBN(0xae7b4c60, 0x7e4fc942), TOBN(0x38ac0b77, 0x663a9c19)}}, + {{TOBN(0xcb4d20ee, 0x4b049136), TOBN(0x8b63bf12, 0x356a4613), + TOBN(0x1221aef6, 0x70e08128), TOBN(0xe62d8c51, 0x4acb6b16)}, + {TOBN(0x71f64a67, 0x379e7896), TOBN(0xb25237a2, 0xcafd7fa5), + TOBN(0xf077bd98, 0x3841ba6a), TOBN(0xc4ac0244, 0x3cd16e7e)}}, + {{TOBN(0x548ba869, 0x21fea4ca), TOBN(0xd36d0817, 0xf3dfdac1), + TOBN(0x09d8d71f, 0xf4685faf), TOBN(0x8eff66be, 0xc52c459a)}, + {TOBN(0x182faee7, 0x0b57235e), TOBN(0xee3c39b1, 0x0106712b), + TOBN(0x5107331f, 0xc0fcdcb0), TOBN(0x669fb9dc, 0xa51054ba)}}, + {{TOBN(0xb25101fb, 0x319d7682), TOBN(0xb0293129, 0x0a982fee), + TOBN(0x51c1c9b9, 0x0261b344), TOBN(0x0e008c5b, 0xbfd371fa)}, + {TOBN(0xd866dd1c, 0x0278ca33), TOBN(0x666f76a6, 0xe5aa53b1), + TOBN(0xe5cfb779, 0x6013a2cf), TOBN(0x1d3a1aad, 0xa3521836)}}, + {{TOBN(0xcedd2531, 0x73faa485), TOBN(0xc8ee6c4f, 0xc0a76878), + TOBN(0xddbccfc9, 0x2a11667d), TOBN(0x1a418ea9, 0x1c2f695a)}, + {TOBN(0xdb11bd92, 0x51f73971), TOBN(0x3e4b3c82, 0xda2ed89f), + TOBN(0x9a44f3f4, 0xe73e0319), TOBN(0xd1e3de0f, 0x303431af)}}, + {{TOBN(0x3c5604ff, 0x50f75f9c), TOBN(0x1d8eddf3, 0x7e752b22), + TOBN(0x0ef074dd, 0x3c9a1118), TOBN(0xd0ffc172, 0xccb86d7b)}, + {TOBN(0xabd1ece3, 0x037d90f2), TOBN(0xe3f307d6, 0x6055856c), + TOBN(0x422f9328, 0x7e4c6daf), TOBN(0x902aac66, 0x334879a0)}}, + {{TOBN(0xb6a1e7bf, 0x94cdfade), TOBN(0x6c97e1ed, 0x7fc6d634), + TOBN(0x662ad24d, 0xa2fb63f8), TOBN(0xf81be1b9, 0xa5928405)}, + {TOBN(0x86d765e4, 0xd14b4206), TOBN(0xbecc2e0e, 0x8fa0db65), + TOBN(0xa28838e0, 0xb17fc76c), TOBN(0xe49a602a, 0xe37cf24e)}}, + {{TOBN(0x76b4131a, 0x567193ec), TOBN(0xaf3c305a, 0xe5f6e70b), + TOBN(0x9587bd39, 0x031eebdd), TOBN(0x5709def8, 0x71bbe831)}, + {TOBN(0x57059983, 0x0eb2b669), TOBN(0x4d80ce1b, 0x875b7029), + TOBN(0x838a7da8, 0x0364ac16), TOBN(0x2f431d23, 0xbe1c83ab)}}, + {{TOBN(0xe56812a6, 0xf9294dd3), TOBN(0xb448d01f, 0x9b4b0d77), + TOBN(0xf3ae6061, 0x04e8305c), TOBN(0x2bead645, 0x94d8c63e)}, + {TOBN(0x0a85434d, 0x84fd8b07), TOBN(0x537b983f, 0xf7a9dee5), + TOBN(0xedcc5f18, 0xef55bd85), TOBN(0x2041af62, 0x21c6cf8b)}}, + {{TOBN(0x8e52874c, 0xb940c71e), TOBN(0x211935a9, 0xdb5f4b3a), + TOBN(0x94350492, 0x301b1dc3), TOBN(0x33d2646d, 0x29958620)}, + {TOBN(0x16b0d64b, 0xef911404), TOBN(0x9d1f25ea, 0x9a3c5ef4), + TOBN(0x20f200eb, 0x4a352c78), TOBN(0x43929f2c, 0x4bd0b428)}}, + {{TOBN(0xa5656667, 0xc7196e29), TOBN(0x7992c2f0, 0x9391be48), + TOBN(0xaaa97cbd, 0x9ee0cd6e), TOBN(0x51b0310c, 0x3dc8c9bf)}, + {TOBN(0x237f8acf, 0xdd9f22cb), TOBN(0xbb1d81a1, 0xb585d584), + TOBN(0x8d5d85f5, 0x8c416388), TOBN(0x0d6e5a5a, 0x42fe474f)}}, + {{TOBN(0xe7812766, 0x38235d4e), TOBN(0x1c62bd67, 0x496e3298), + TOBN(0x8378660c, 0x3f175bc8), TOBN(0x4d04e189, 0x17afdd4d)}, + {TOBN(0x32a81601, 0x85a8068c), TOBN(0xdb58e4e1, 0x92b29a85), + TOBN(0xe8a65b86, 0xc70d8a3b), TOBN(0x5f0e6f4e, 0x98a0403b)}}, + {{TOBN(0x08129684, 0x69ed2370), TOBN(0x34dc30bd, 0x0871ee26), + TOBN(0x3a5ce948, 0x7c9c5b05), TOBN(0x7d487b80, 0x43a90c87)}, + {TOBN(0x4089ba37, 0xdd0e7179), TOBN(0x45f80191, 0xb4041811), + TOBN(0x1c3e1058, 0x98747ba5), TOBN(0x98c4e13a, 0x6e1ae592)}}, + {{TOBN(0xd44636e6, 0xe82c9f9e), TOBN(0x711db87c, 0xc33a1043), + TOBN(0x6f431263, 0xaa8aec05), TOBN(0x43ff120d, 0x2744a4aa)}, + {TOBN(0xd3bd892f, 0xae77779b), TOBN(0xf0fe0cc9, 0x8cdc9f82), + TOBN(0xca5f7fe6, 0xf1c5b1bc), TOBN(0xcc63a682, 0x44929a72)}}, + {{TOBN(0xc7eaba0c, 0x09dbe19a), TOBN(0x2f3585ad, 0x6b5c73c2), + TOBN(0x8ab8924b, 0x0ae50c30), TOBN(0x17fcd27a, 0x638b30ba)}, + {TOBN(0xaf414d34, 0x10b3d5a5), TOBN(0x09c107d2, 0x2a9accf1), + TOBN(0x15dac49f, 0x946a6242), TOBN(0xaec3df2a, 0xd707d642)}}, + {{TOBN(0x2c2492b7, 0x3f894ae0), TOBN(0xf59df3e5, 0xb75f18ce), + TOBN(0x7cb740d2, 0x8f53cad0), TOBN(0x3eb585fb, 0xc4f01294)}, + {TOBN(0x17da0c86, 0x32c7f717), TOBN(0xeb8c795b, 0xaf943f4c), + TOBN(0x4ee23fb5, 0xf67c51d2), TOBN(0xef187575, 0x68889949)}}, + {{TOBN(0xa6b4bdb2, 0x0389168b), TOBN(0xc4ecd258, 0xea577d03), + TOBN(0x3a63782b, 0x55743082), TOBN(0x6f678f4c, 0xc72f08cd)}, + {TOBN(0x553511cf, 0x65e58dd8), TOBN(0xd53b4e3e, 0xd402c0cd), + TOBN(0x37de3e29, 0xa037c14c), TOBN(0x86b6c516, 0xc05712aa)}}, + {{TOBN(0x2834da3e, 0xb38dff6f), TOBN(0xbe012c52, 0xea636be8), + TOBN(0x292d238c, 0x61dd37f8), TOBN(0x0e54523f, 0x8f8142db)}, + {TOBN(0xe31eb436, 0x036a05d8), TOBN(0x83e3cdff, 0x1e93c0ff), + TOBN(0x3fd2fe0f, 0x50821ddf), TOBN(0xc8e19b0d, 0xff9eb33b)}}, + {{TOBN(0xc8cc943f, 0xb569a5fe), TOBN(0xad0090d4, 0xd4342d75), + TOBN(0x82090b4b, 0xcaeca000), TOBN(0xca39687f, 0x1bd410eb)}, + {TOBN(0xe7bb0df7, 0x65959d77), TOBN(0x39d78218, 0x9c964999), + TOBN(0xd87f62e8, 0xb2415451), TOBN(0xe5efb774, 0xbed76108)}}, + {{TOBN(0x3ea011a4, 0xe822f0d0), TOBN(0xbc647ad1, 0x5a8704f8), + TOBN(0xbb315b35, 0x50c6820f), TOBN(0x863dec3d, 0xb7e76bec)}, + {TOBN(0x01ff5d3a, 0xf017bfc7), TOBN(0x20054439, 0x976b8229), + TOBN(0x067fca37, 0x0bbd0d3b), TOBN(0xf63dde64, 0x7f5e3d0f)}}, + {{TOBN(0x22dbefb3, 0x2a4c94e9), TOBN(0xafbff0fe, 0x96f8278a), + TOBN(0x80aea0b1, 0x3503793d), TOBN(0xb2238029, 0x5f06cd29)}, + {TOBN(0x65703e57, 0x8ec3feca), TOBN(0x06c38314, 0x393e7053), + TOBN(0xa0b751eb, 0x7c6734c4), TOBN(0xd2e8a435, 0xc59f0f1e)}}, + {{TOBN(0x147d9052, 0x5e9ca895), TOBN(0x2f4dd31e, 0x972072df), + TOBN(0xa16fda8e, 0xe6c6755c), TOBN(0xc66826ff, 0xcf196558)}, + {TOBN(0x1f1a76a3, 0x0cf43895), TOBN(0xa9d604e0, 0x83c3097b), + TOBN(0xe1908309, 0x66390e0e), TOBN(0xa50bf753, 0xb3c85eff)}}, + {{TOBN(0x0696bdde, 0xf6a70251), TOBN(0x548b801b, 0x3c6ab16a), + TOBN(0x37fcf704, 0xa4d08762), TOBN(0x090b3def, 0xdff76c4e)}, + {TOBN(0x87e8cb89, 0x69cb9158), TOBN(0x44a90744, 0x995ece43), + TOBN(0xf85395f4, 0x0ad9fbf5), TOBN(0x49b0f6c5, 0x4fb0c82d)}}, + {{TOBN(0x75d9bc15, 0xadf7cccf), TOBN(0x81a3e5d6, 0xdfa1e1b0), + TOBN(0x8c39e444, 0x249bc17e), TOBN(0xf37dccb2, 0x8ea7fd43)}, + {TOBN(0xda654873, 0x907fba12), TOBN(0x35daa6da, 0x4a372904), + TOBN(0x0564cfc6, 0x6283a6c5), TOBN(0xd09fa4f6, 0x4a9395bf)}}, + {{TOBN(0x688e9ec9, 0xaeb19a36), TOBN(0xd913f1ce, 0xc7bfbfb4), + TOBN(0x797b9a3c, 0x61c2faa6), TOBN(0x2f979bec, 0x6a0a9c12)}, + {TOBN(0xb5969d0f, 0x359679ec), TOBN(0xebcf523d, 0x079b0460), + TOBN(0xfd6b0008, 0x10fab870), TOBN(0x3f2edcda, 0x9373a39c)}}, + {{TOBN(0x0d64f9a7, 0x6f568431), TOBN(0xf848c27c, 0x02f8898c), + TOBN(0xf418ade1, 0x260b5bd5), TOBN(0xc1f3e323, 0x6973dee8)}, + {TOBN(0x46e9319c, 0x26c185dd), TOBN(0x6d85b7d8, 0x546f0ac4), + TOBN(0x427965f2, 0x247f9d57), TOBN(0xb519b636, 0xb0035f48)}}, + {{TOBN(0x6b6163a9, 0xab87d59c), TOBN(0xff9f58c3, 0x39caaa11), + TOBN(0x4ac39cde, 0x3177387b), TOBN(0x5f6557c2, 0x873e77f9)}, + {TOBN(0x67504006, 0x36a83041), TOBN(0x9b1c96ca, 0x75ef196c), + TOBN(0xf34283de, 0xb08c7940), TOBN(0x7ea09644, 0x1128c316)}}, + {{TOBN(0xb510b3b5, 0x6aa39dff), TOBN(0x59b43da2, 0x9f8e4d8c), + TOBN(0xa8ce31fd, 0x9e4c4b9f), TOBN(0x0e20be26, 0xc1303c01)}, + {TOBN(0x18187182, 0xe8ee47c9), TOBN(0xd9687cdb, 0x7db98101), + TOBN(0x7a520e4d, 0xa1e14ff6), TOBN(0x429808ba, 0x8836d572)}}, + {{TOBN(0xa37ca60d, 0x4944b663), TOBN(0xf901f7a9, 0xa3f91ae5), + TOBN(0xe4e3e76e, 0x9e36e3b1), TOBN(0x9aa219cf, 0x29d93250)}, + {TOBN(0x347fe275, 0x056a2512), TOBN(0xa4d643d9, 0xde65d95c), + TOBN(0x9669d396, 0x699fc3ed), TOBN(0xb598dee2, 0xcf8c6bbe)}}, + {{TOBN(0x682ac1e5, 0xdda9e5c6), TOBN(0x4e0d3c72, 0xcaa9fc95), + TOBN(0x17faaade, 0x772bea44), TOBN(0x5ef8428c, 0xab0009c8)}, + {TOBN(0xcc4ce47a, 0x460ff016), TOBN(0xda6d12bf, 0x725281cb), + TOBN(0x44c67848, 0x0223aad2), TOBN(0x6e342afa, 0x36256e28)}}, + {{TOBN(0x1400bb0b, 0x93a37c04), TOBN(0x62b1bc9b, 0xdd10bd96), + TOBN(0x7251adeb, 0x0dac46b7), TOBN(0x7d33b92e, 0x7be4ef51)}, + {TOBN(0x28b2a94b, 0xe61fa29a), TOBN(0x4b2be13f, 0x06422233), + TOBN(0x36d6d062, 0x330d8d37), TOBN(0x5ef80e1e, 0xb28ca005)}}, + {{TOBN(0x174d4699, 0x6d16768e), TOBN(0x9fc4ff6a, 0x628bf217), + TOBN(0x77705a94, 0x154e490d), TOBN(0x9d96dd28, 0x8d2d997a)}, + {TOBN(0x77e2d9d8, 0xce5d72c4), TOBN(0x9d06c5a4, 0xc11c714f), + TOBN(0x02aa5136, 0x79e4a03e), TOBN(0x1386b3c2, 0x030ff28b)}}, + {{TOBN(0xfe82e8a6, 0xfb283f61), TOBN(0x7df203e5, 0xf3abc3fb), + TOBN(0xeec7c351, 0x3a4d3622), TOBN(0xf7d17dbf, 0xdf762761)}, + {TOBN(0xc3956e44, 0x522055f0), TOBN(0xde3012db, 0x8fa748db), + TOBN(0xca9fcb63, 0xbf1dcc14), TOBN(0xa56d9dcf, 0xbe4e2f3a)}}, + {{TOBN(0xb86186b6, 0x8bcec9c2), TOBN(0x7cf24df9, 0x680b9f06), + TOBN(0xc46b45ea, 0xc0d29281), TOBN(0xfff42bc5, 0x07b10e12)}, + {TOBN(0x12263c40, 0x4d289427), TOBN(0x3d5f1899, 0xb4848ec4), + TOBN(0x11f97010, 0xd040800c), TOBN(0xb4c5f529, 0x300feb20)}}, + {{TOBN(0xcc543f8f, 0xde94fdcb), TOBN(0xe96af739, 0xc7c2f05e), + TOBN(0xaa5e0036, 0x882692e1), TOBN(0x09c75b68, 0x950d4ae9)}, + {TOBN(0x62f63df2, 0xb5932a7a), TOBN(0x2658252e, 0xde0979ad), + TOBN(0x2a19343f, 0xb5e69631), TOBN(0x718c7501, 0x525b666b)}}, + {{TOBN(0x26a42d69, 0xea40dc3a), TOBN(0xdc84ad22, 0xaecc018f), + TOBN(0x25c36c7b, 0x3270f04a), TOBN(0x46ba6d47, 0x50fa72ed)}, + {TOBN(0x6c37d1c5, 0x93e58a8e), TOBN(0xa2394731, 0x120c088c), + TOBN(0xc3be4263, 0xcb6e86da), TOBN(0x2c417d36, 0x7126d038)}}, + {{TOBN(0x5b70f9c5, 0x8b6f8efa), TOBN(0x671a2faa, 0x37718536), + TOBN(0xd3ced3c6, 0xb539c92b), TOBN(0xe56f1bd9, 0xa31203c2)}, + {TOBN(0x8b096ec4, 0x9ff3c8eb), TOBN(0x2deae432, 0x43491cea), + TOBN(0x2465c6eb, 0x17943794), TOBN(0x5d267e66, 0x20586843)}}, + {{TOBN(0x9d3d116d, 0xb07159d0), TOBN(0xae07a67f, 0xc1896210), + TOBN(0x8fc84d87, 0xbb961579), TOBN(0x30009e49, 0x1c1f8dd6)}, + {TOBN(0x8a8caf22, 0xe3132819), TOBN(0xcffa197c, 0xf23ab4ff), + TOBN(0x58103a44, 0x205dd687), TOBN(0x57b796c3, 0x0ded67a2)}}, + {{TOBN(0x0b9c3a6c, 0xa1779ad7), TOBN(0xa33cfe2e, 0x357c09c5), + TOBN(0x2ea29315, 0x3db4a57e), TOBN(0x91959695, 0x8ebeb52e)}, + {TOBN(0x118db9a6, 0xe546c879), TOBN(0x8e996df4, 0x6295c8d6), + TOBN(0xdd990484, 0x55ec806b), TOBN(0x24f291ca, 0x165c1035)}}, + {{TOBN(0xcca523bb, 0x440e2229), TOBN(0x324673a2, 0x73ef4d04), + TOBN(0xaf3adf34, 0x3e11ec39), TOBN(0x6136d7f1, 0xdc5968d3)}, + {TOBN(0x7a7b2899, 0xb053a927), TOBN(0x3eaa2661, 0xae067ecd), + TOBN(0x8549b9c8, 0x02779cd9), TOBN(0x061d7940, 0xc53385ea)}}, + {{TOBN(0x3e0ba883, 0xf06d18bd), TOBN(0x4ba6de53, 0xb2700843), + TOBN(0xb966b668, 0x591a9e4d), TOBN(0x93f67567, 0x7f4fa0ed)}, + {TOBN(0x5a02711b, 0x4347237b), TOBN(0xbc041e2f, 0xe794608e), + TOBN(0x55af10f5, 0x70f73d8c), TOBN(0xd2d4d4f7, 0xbb7564f7)}}, + {{TOBN(0xd7d27a89, 0xb3e93ce7), TOBN(0xf7b5a875, 0x5d3a2c1b), + TOBN(0xb29e68a0, 0x255b218a), TOBN(0xb533837e, 0x8af76754)}, + {TOBN(0xd1b05a73, 0x579fab2e), TOBN(0xb41055a1, 0xecd74385), + TOBN(0xb2369274, 0x445e9115), TOBN(0x2972a7c4, 0xf520274e)}}, + {{TOBN(0x6c08334e, 0xf678e68a), TOBN(0x4e4160f0, 0x99b057ed), + TOBN(0x3cfe11b8, 0x52ccb69a), TOBN(0x2fd1823a, 0x21c8f772)}, + {TOBN(0xdf7f072f, 0x3298f055), TOBN(0x8c0566f9, 0xfec74a6e), + TOBN(0xe549e019, 0x5bb4d041), TOBN(0x7c3930ba, 0x9208d850)}}, + {{TOBN(0xe07141fc, 0xaaa2902b), TOBN(0x539ad799, 0xe4f69ad3), + TOBN(0xa6453f94, 0x813f9ffd), TOBN(0xc58d3c48, 0x375bc2f7)}, + {TOBN(0xb3326fad, 0x5dc64e96), TOBN(0x3aafcaa9, 0xb240e354), + TOBN(0x1d1b0903, 0xaca1e7a9), TOBN(0x4ceb9767, 0x1211b8a0)}}, + {{TOBN(0xeca83e49, 0xe32a858e), TOBN(0x4c32892e, 0xae907bad), + TOBN(0xd5b42ab6, 0x2eb9b494), TOBN(0x7fde3ee2, 0x1eabae1b)}, + {TOBN(0x13b5ab09, 0xcaf54957), TOBN(0xbfb028be, 0xe5f5d5d5), + TOBN(0x928a0650, 0x2003e2c0), TOBN(0x90793aac, 0x67476843)}}, + {{TOBN(0x5e942e79, 0xc81710a0), TOBN(0x557e4a36, 0x27ccadd4), + TOBN(0x72a2bc56, 0x4bcf6d0c), TOBN(0x09ee5f43, 0x26d7b80c)}, + {TOBN(0x6b70dbe9, 0xd4292f19), TOBN(0x56f74c26, 0x63f16b18), + TOBN(0xc23db0f7, 0x35fbb42a), TOBN(0xb606bdf6, 0x6ae10040)}}, + {{TOBN(0x1eb15d4d, 0x044573ac), TOBN(0x7dc3cf86, 0x556b0ba4), + TOBN(0x97af9a33, 0xc60df6f7), TOBN(0x0b1ef85c, 0xa716ce8c)}, + {TOBN(0x2922f884, 0xc96958be), TOBN(0x7c32fa94, 0x35690963), + TOBN(0x2d7f667c, 0xeaa00061), TOBN(0xeaaf7c17, 0x3547365c)}}, + {{TOBN(0x1eb4de46, 0x87032d58), TOBN(0xc54f3d83, 0x5e2c79e0), + TOBN(0x07818df4, 0x5d04ef23), TOBN(0x55faa9c8, 0x673d41b4)}, + {TOBN(0xced64f6f, 0x89b95355), TOBN(0x4860d2ea, 0xb7415c84), + TOBN(0x5fdb9bd2, 0x050ebad3), TOBN(0xdb53e0cc, 0x6685a5bf)}}, + {{TOBN(0xb830c031, 0x9feb6593), TOBN(0xdd87f310, 0x6accff17), + TOBN(0x2303ebab, 0x9f555c10), TOBN(0x94603695, 0x287e7065)}, + {TOBN(0xf88311c3, 0x2e83358c), TOBN(0x508dd9b4, 0xeefb0178), + TOBN(0x7ca23706, 0x2dba8652), TOBN(0x62aac5a3, 0x0047abe5)}}, + {{TOBN(0x9a61d2a0, 0x8b1ea7b3), TOBN(0xd495ab63, 0xae8b1485), + TOBN(0x38740f84, 0x87052f99), TOBN(0x178ebe5b, 0xb2974eea)}, + {TOBN(0x030bbcca, 0x5b36d17f), TOBN(0xb5e4cce3, 0xaaf86eea), + TOBN(0xb51a0220, 0x68f8e9e0), TOBN(0xa4348796, 0x09eb3e75)}}, + {{TOBN(0xbe592309, 0xeef1a752), TOBN(0x5d7162d7, 0x6f2aa1ed), + TOBN(0xaebfb5ed, 0x0f007dd2), TOBN(0x255e14b2, 0xc89edd22)}, + {TOBN(0xba85e072, 0x0303b697), TOBN(0xc5d17e25, 0xf05720ff), + TOBN(0x02b58d6e, 0x5128ebb6), TOBN(0x2c80242d, 0xd754e113)}}, + {{TOBN(0x919fca5f, 0xabfae1ca), TOBN(0x937afaac, 0x1a21459b), + TOBN(0x9e0ca91c, 0x1f66a4d2), TOBN(0x194cc7f3, 0x23ec1331)}, + {TOBN(0xad25143a, 0x8aa11690), TOBN(0xbe40ad8d, 0x09b59e08), + TOBN(0x37d60d9b, 0xe750860a), TOBN(0x6c53b008, 0xc6bf434c)}}, + {{TOBN(0xb572415d, 0x1356eb80), TOBN(0xb8bf9da3, 0x9578ded8), + TOBN(0x22658e36, 0x5e8fb38b), TOBN(0x9b70ce22, 0x5af8cb22)}, + {TOBN(0x7c00018a, 0x829a8180), TOBN(0x84329f93, 0xb81ed295), + TOBN(0x7c343ea2, 0x5f3cea83), TOBN(0x38f8655f, 0x67586536)}}, + {{TOBN(0xa661a0d0, 0x1d3ec517), TOBN(0x98744652, 0x512321ae), + TOBN(0x084ca591, 0xeca92598), TOBN(0xa9bb9dc9, 0x1dcb3feb)}, + {TOBN(0x14c54355, 0x78b4c240), TOBN(0x5ed62a3b, 0x610cafdc), + TOBN(0x07512f37, 0x1b38846b), TOBN(0x571bb70a, 0xb0e38161)}}, + {{TOBN(0xb556b95b, 0x2da705d2), TOBN(0x3ef8ada6, 0xb1a08f98), + TOBN(0x85302ca7, 0xddecfbe5), TOBN(0x0e530573, 0x943105cd)}, + {TOBN(0x60554d55, 0x21a9255d), TOBN(0x63a32fa1, 0xf2f3802a), + TOBN(0x35c8c5b0, 0xcd477875), TOBN(0x97f458ea, 0x6ad42da1)}}, + {{TOBN(0x832d7080, 0xeb6b242d), TOBN(0xd30bd023, 0x3b71e246), + TOBN(0x7027991b, 0xbe31139d), TOBN(0x68797e91, 0x462e4e53)}, + {TOBN(0x423fe20a, 0x6b4e185a), TOBN(0x82f2c67e, 0x42d9b707), + TOBN(0x25c81768, 0x4cf7811b), TOBN(0xbd53005e, 0x045bb95d)}}}, + {{{TOBN(0xe5f649be, 0x9d8e68fd), TOBN(0xdb0f0533, 0x1b044320), + TOBN(0xf6fde9b3, 0xe0c33398), TOBN(0x92f4209b, 0x66c8cfae)}, + {TOBN(0xe9d1afcc, 0x1a739d4b), TOBN(0x09aea75f, 0xa28ab8de), + TOBN(0x14375fb5, 0xeac6f1d0), TOBN(0x6420b560, 0x708f7aa5)}}, + {{TOBN(0x9eae499c, 0x6254dc41), TOBN(0x7e293924, 0x7a837e7e), + TOBN(0x74aec08c, 0x090524a7), TOBN(0xf82b9219, 0x8d6f55f2)}, + {TOBN(0x493c962e, 0x1402cec5), TOBN(0x9f17ca17, 0xfa2f30e7), + TOBN(0xbcd783e8, 0xe9b879cb), TOBN(0xea3d8c14, 0x5a6f145f)}}, + {{TOBN(0xdede15e7, 0x5e0dee6e), TOBN(0x74f24872, 0xdc628aa2), + TOBN(0xd3e9c4fe, 0x7861bb93), TOBN(0x56d4822a, 0x6187b2e0)}, + {TOBN(0xb66417cf, 0xc59826f9), TOBN(0xca260969, 0x2408169e), + TOBN(0xedf69d06, 0xc79ef885), TOBN(0x00031f8a, 0xdc7d138f)}}, + {{TOBN(0x103c46e6, 0x0ebcf726), TOBN(0x4482b831, 0x6231470e), + TOBN(0x6f6dfaca, 0x487c2109), TOBN(0x2e0ace97, 0x62e666ef)}, + {TOBN(0x3246a9d3, 0x1f8d1f42), TOBN(0x1b1e83f1, 0x574944d2), + TOBN(0x13dfa63a, 0xa57f334b), TOBN(0x0cf8daed, 0x9f025d81)}}, + {{TOBN(0x30d78ea8, 0x00ee11c1), TOBN(0xeb053cd4, 0xb5e3dd75), + TOBN(0x9b65b13e, 0xd58c43c5), TOBN(0xc3ad49bd, 0xbd151663)}, + {TOBN(0x99fd8e41, 0xb6427990), TOBN(0x12cf15bd, 0x707eae1e), + TOBN(0x29ad4f1b, 0x1aabb71e), TOBN(0x5143e74d, 0x07545d0e)}}, + {{TOBN(0x30266336, 0xc88bdee1), TOBN(0x25f29306, 0x5876767c), + TOBN(0x9c078571, 0xc6731996), TOBN(0xc88690b2, 0xed552951)}, + {TOBN(0x274f2c2d, 0x852705b4), TOBN(0xb0bf8d44, 0x4e09552d), + TOBN(0x7628beeb, 0x986575d1), TOBN(0x407be238, 0x7f864651)}}, + {{TOBN(0x0e5e3049, 0xa639fc6b), TOBN(0xe75c35d9, 0x86003625), + TOBN(0x0cf35bd8, 0x5dcc1646), TOBN(0x8bcaced2, 0x6c26273a)}, + {TOBN(0xe22ecf1d, 0xb5536742), TOBN(0x013dd897, 0x1a9e068b), + TOBN(0x17f411cb, 0x8a7909c5), TOBN(0x5757ac98, 0x861dd506)}}, + {{TOBN(0x85de1f0d, 0x1e935abb), TOBN(0xdefd10b4, 0x154de37a), + TOBN(0xb8d9e392, 0x369cebb5), TOBN(0x54d5ef9b, 0x761324be)}, + {TOBN(0x4d6341ba, 0x74f17e26), TOBN(0xc0a0e3c8, 0x78c1dde4), + TOBN(0xa6d77581, 0x87d918fd), TOBN(0x66876015, 0x02ca3a13)}}, + {{TOBN(0xc7313e9c, 0xf36658f0), TOBN(0xc433ef1c, 0x71f8057e), + TOBN(0x85326246, 0x1b6a835a), TOBN(0xc8f05398, 0x7c86394c)}, + {TOBN(0xff398cdf, 0xe983c4a1), TOBN(0xbf5e8162, 0x03b7b931), + TOBN(0x93193c46, 0xb7b9045b), TOBN(0x1e4ebf5d, 0xa4a6e46b)}}, + {{TOBN(0xf9942a60, 0x43a24fe7), TOBN(0x29c1191e, 0xffb3492b), + TOBN(0x9f662449, 0x902fde05), TOBN(0xc792a7ac, 0x6713c32d)}, + {TOBN(0x2fd88ad8, 0xb737982c), TOBN(0x7e3a0319, 0xa21e60e3), + TOBN(0x09b0de44, 0x7383591a), TOBN(0x6df141ee, 0x8310a456)}}, + {{TOBN(0xaec1a039, 0xe6d6f471), TOBN(0x14b2ba0f, 0x1198d12e), + TOBN(0xebc1a160, 0x3aeee5ac), TOBN(0x401f4836, 0xe0b964ce)}, + {TOBN(0x2ee43796, 0x4fd03f66), TOBN(0x3fdb4e49, 0xdd8f3f12), + TOBN(0x6ef267f6, 0x29380f18), TOBN(0x3e8e9670, 0x8da64d16)}}, + {{TOBN(0xbc19180c, 0x207674f1), TOBN(0x112e09a7, 0x33ae8fdb), + TOBN(0x99667554, 0x6aaeb71e), TOBN(0x79432af1, 0xe101b1c7)}, + {TOBN(0xd5eb558f, 0xde2ddec6), TOBN(0x81392d1f, 0x5357753f), + TOBN(0xa7a76b97, 0x3ae1158a), TOBN(0x416fbbff, 0x4a899991)}}, + {{TOBN(0x9e65fdfd, 0x0d4a9dcf), TOBN(0x7bc29e48, 0x944ddf12), + TOBN(0xbc1a92d9, 0x3c856866), TOBN(0x273c6905, 0x6e98dfe2)}, + {TOBN(0x69fce418, 0xcdfaa6b8), TOBN(0x606bd823, 0x5061c69f), + TOBN(0x42d495a0, 0x6af75e27), TOBN(0x8ed3d505, 0x6d873a1f)}}, + {{TOBN(0xaf552841, 0x6ab25b6a), TOBN(0xc6c0ffc7, 0x2b1a4523), + TOBN(0xab18827b, 0x21c99e03), TOBN(0x060e8648, 0x9034691b)}, + {TOBN(0x5207f90f, 0x93c7f398), TOBN(0x9f4a96cb, 0x82f8d10b), + TOBN(0xdd71cd79, 0x3ad0f9e3), TOBN(0x84f435d2, 0xfc3a54f5)}}, + {{TOBN(0x4b03c55b, 0x8e33787f), TOBN(0xef42f975, 0xa6384673), + TOBN(0xff7304f7, 0x5051b9f0), TOBN(0x18aca1dc, 0x741c87c2)}, + {TOBN(0x56f120a7, 0x2d4bfe80), TOBN(0xfd823b3d, 0x053e732c), + TOBN(0x11bccfe4, 0x7537ca16), TOBN(0xdf6c9c74, 0x1b5a996b)}}, + {{TOBN(0xee7332c7, 0x904fc3fa), TOBN(0x14a23f45, 0xc7e3636a), + TOBN(0xc38659c3, 0xf091d9aa), TOBN(0x4a995e5d, 0xb12d8540)}, + {TOBN(0x20a53bec, 0xf3a5598a), TOBN(0x56534b17, 0xb1eaa995), + TOBN(0x9ed3dca4, 0xbf04e03c), TOBN(0x716c563a, 0xd8d56268)}}, + {{TOBN(0x27ba77a4, 0x1d6178e7), TOBN(0xe4c80c40, 0x68a1ff8e), + TOBN(0x75011099, 0x0a13f63d), TOBN(0x7bf33521, 0xa61d46f3)}, + {TOBN(0x0aff218e, 0x10b365bb), TOBN(0x81021804, 0x0fd7ea75), + TOBN(0x05a3fd8a, 0xa4b3a925), TOBN(0xb829e75f, 0x9b3db4e6)}}, + {{TOBN(0x6bdc75a5, 0x4d53e5fb), TOBN(0x04a5dc02, 0xd52717e3), + TOBN(0x86af502f, 0xe9a42ec2), TOBN(0x8867e8fb, 0x2630e382)}, + {TOBN(0xbf845c6e, 0xbec9889b), TOBN(0x54f491f2, 0xcb47c98d), + TOBN(0xa3091fba, 0x790c2a12), TOBN(0xd7f6fd78, 0xc20f708b)}}, + {{TOBN(0xa569ac30, 0xacde5e17), TOBN(0xd0f996d0, 0x6852b4d7), + TOBN(0xe51d4bb5, 0x4609ae54), TOBN(0x3fa37d17, 0x0daed061)}, + {TOBN(0x62a88684, 0x34b8fb41), TOBN(0x99a2acbd, 0x9efb64f1), + TOBN(0xb75c1a5e, 0x6448e1f2), TOBN(0xfa99951a, 0x42b5a069)}}, + {{TOBN(0x6d956e89, 0x2f3b26e7), TOBN(0xf4709860, 0xda875247), + TOBN(0x3ad15179, 0x2482dda3), TOBN(0xd64110e3, 0x017d82f0)}, + {TOBN(0x14928d2c, 0xfad414e4), TOBN(0x2b155f58, 0x2ed02b24), + TOBN(0x481a141b, 0xcb821bf1), TOBN(0x12e3c770, 0x4f81f5da)}}, + {{TOBN(0xe49c5de5, 0x9fff8381), TOBN(0x11053232, 0x5bbec894), + TOBN(0xa0d051cc, 0x454d88c4), TOBN(0x4f6db89c, 0x1f8e531b)}, + {TOBN(0x34fe3fd6, 0xca563a44), TOBN(0x7f5c2215, 0x58da8ab9), + TOBN(0x8445016d, 0x9474f0a1), TOBN(0x17d34d61, 0xcb7d8a0a)}}, + {{TOBN(0x8e9d3910, 0x1c474019), TOBN(0xcaff2629, 0xd52ceefb), + TOBN(0xf9cf3e32, 0xc1622c2b), TOBN(0xd4b95e3c, 0xe9071a05)}, + {TOBN(0xfbbca61f, 0x1594438c), TOBN(0x1eb6e6a6, 0x04aadedf), + TOBN(0x853027f4, 0x68e14940), TOBN(0x221d322a, 0xdfabda9c)}}, + {{TOBN(0xed8ea9f6, 0xb7cb179a), TOBN(0xdc7b764d, 0xb7934dcc), + TOBN(0xfcb13940, 0x5e09180d), TOBN(0x6629a6bf, 0xb47dc2dd)}, + {TOBN(0xbfc55e4e, 0x9f5a915e), TOBN(0xb1db9d37, 0x6204441e), + TOBN(0xf82d68cf, 0x930c5f53), TOBN(0x17d3a142, 0xcbb605b1)}}, + {{TOBN(0xdd5944ea, 0x308780f2), TOBN(0xdc8de761, 0x3845f5e4), + TOBN(0x6beaba7d, 0x7624d7a3), TOBN(0x1e709afd, 0x304df11e)}, + {TOBN(0x95364376, 0x02170456), TOBN(0xbf204b3a, 0xc8f94b64), + TOBN(0x4e53af7c, 0x5680ca68), TOBN(0x0526074a, 0xe0c67574)}}, + {{TOBN(0x95d8cef8, 0xecd92af6), TOBN(0xe6b9fa7a, 0x6cd1745a), + TOBN(0x3d546d3d, 0xa325c3e4), TOBN(0x1f57691d, 0x9ae93aae)}, + {TOBN(0xe891f3fe, 0x9d2e1a33), TOBN(0xd430093f, 0xac063d35), + TOBN(0xeda59b12, 0x5513a327), TOBN(0xdc2134f3, 0x5536f18f)}}, + {{TOBN(0xaa51fe2c, 0x5c210286), TOBN(0x3f68aaee, 0x1cab658c), + TOBN(0x5a23a00b, 0xf9357292), TOBN(0x9a626f39, 0x7efdabed)}, + {TOBN(0xfe2b3bf3, 0x199d78e3), TOBN(0xb7a2af77, 0x71bbc345), + TOBN(0x3d19827a, 0x1e59802c), TOBN(0x823bbc15, 0xb487a51c)}}, + {{TOBN(0x856139f2, 0x99d0a422), TOBN(0x9ac3df65, 0xf456c6fb), + TOBN(0xaddf65c6, 0x701f8bd6), TOBN(0x149f321e, 0x3758df87)}, + {TOBN(0xb1ecf714, 0x721b7eba), TOBN(0xe17df098, 0x31a3312a), + TOBN(0xdb2fd6ec, 0xd5c4d581), TOBN(0xfd02996f, 0x8fcea1b3)}}, + {{TOBN(0xe29fa63e, 0x7882f14f), TOBN(0xc9f6dc35, 0x07c6cadc), + TOBN(0x46f22d6f, 0xb882bed0), TOBN(0x1a45755b, 0xd118e52c)}, + {TOBN(0x9f2c7c27, 0x7c4608cf), TOBN(0x7ccbdf32, 0x568012c2), + TOBN(0xfcb0aedd, 0x61729b0e), TOBN(0x7ca2ca9e, 0xf7d75dbf)}}, + {{TOBN(0xf58fecb1, 0x6f640f62), TOBN(0xe274b92b, 0x39f51946), + TOBN(0x7f4dfc04, 0x6288af44), TOBN(0x0a91f32a, 0xeac329e5)}, + {TOBN(0x43ad274b, 0xd6aaba31), TOBN(0x719a1640, 0x0f6884f9), + TOBN(0x685d29f6, 0xdaf91e20), TOBN(0x5ec1cc33, 0x27e49d52)}}, + {{TOBN(0x38f4de96, 0x3b54a059), TOBN(0x0e0015e5, 0xefbcfdb3), + TOBN(0x177d23d9, 0x4dbb8da6), TOBN(0x98724aa2, 0x97a617ad)}, + {TOBN(0x30f0885b, 0xfdb6558e), TOBN(0xf9f7a28a, 0xc7899a96), + TOBN(0xd2ae8ac8, 0x872dc112), TOBN(0xfa0642ca, 0x73c3c459)}}, + {{TOBN(0x15296981, 0xe7dfc8d6), TOBN(0x67cd4450, 0x1fb5b94a), + TOBN(0x0ec71cf1, 0x0eddfd37), TOBN(0xc7e5eeb3, 0x9a8eddc7)}, + {TOBN(0x02ac8e3d, 0x81d95028), TOBN(0x0088f172, 0x70b0e35d), + TOBN(0xec041fab, 0xe1881fe3), TOBN(0x62cf71b8, 0xd99e7faa)}}, + {{TOBN(0x5043dea7, 0xe0f222c2), TOBN(0x309d42ac, 0x72e65142), + TOBN(0x94fe9ddd, 0x9216cd30), TOBN(0xd6539c7d, 0x0f87feec)}, + {TOBN(0x03c5a57c, 0x432ac7d7), TOBN(0x72692cf0, 0x327fda10), + TOBN(0xec28c85f, 0x280698de), TOBN(0x2331fb46, 0x7ec283b1)}}, + {{TOBN(0xd34bfa32, 0x2867e633), TOBN(0x78709a82, 0x0a9cc815), + TOBN(0xb7fe6964, 0x875e2fa5), TOBN(0x25cc064f, 0x9e98bfb5)}, + {TOBN(0x9eb0151c, 0x493a65c5), TOBN(0x5fb5d941, 0x53182464), + TOBN(0x69e6f130, 0xf04618e2), TOBN(0xa8ecec22, 0xf89c8ab6)}}, + {{TOBN(0xcd6ac88b, 0xb96209bd), TOBN(0x65fa8cdb, 0xb3e1c9e0), + TOBN(0xa47d22f5, 0x4a8d8eac), TOBN(0x83895cdf, 0x8d33f963)}, + {TOBN(0xa8adca59, 0xb56cd3d1), TOBN(0x10c8350b, 0xdaf38232), + TOBN(0x2b161fb3, 0xa5080a9f), TOBN(0xbe7f5c64, 0x3af65b3a)}}, + {{TOBN(0x2c754039, 0x97403a11), TOBN(0x94626cf7, 0x121b96af), + TOBN(0x431de7c4, 0x6a983ec2), TOBN(0x3780dd3a, 0x52cc3df7)}, + {TOBN(0xe28a0e46, 0x2baf8e3b), TOBN(0xabe68aad, 0x51d299ae), + TOBN(0x603eb8f9, 0x647a2408), TOBN(0x14c61ed6, 0x5c750981)}}, + {{TOBN(0x88b34414, 0xc53352e7), TOBN(0x5a34889c, 0x1337d46e), + TOBN(0x612c1560, 0xf95f2bc8), TOBN(0x8a3f8441, 0xd4807a3a)}, + {TOBN(0x680d9e97, 0x5224da68), TOBN(0x60cd6e88, 0xc3eb00e9), + TOBN(0x3875a98e, 0x9a6bc375), TOBN(0xdc80f924, 0x4fd554c2)}}, + {{TOBN(0x6c4b3415, 0x6ac77407), TOBN(0xa1e5ea8f, 0x25420681), + TOBN(0x541bfa14, 0x4607a458), TOBN(0x5dbc7e7a, 0x96d7fbf9)}, + {TOBN(0x646a851b, 0x31590a47), TOBN(0x039e85ba, 0x15ee6df8), + TOBN(0xd19fa231, 0xd7b43fc0), TOBN(0x84bc8be8, 0x299a0e04)}}, + {{TOBN(0x2b9d2936, 0xf20df03a), TOBN(0x24054382, 0x8608d472), + TOBN(0x76b6ba04, 0x9149202a), TOBN(0xb21c3831, 0x3670e7b7)}, + {TOBN(0xddd93059, 0xd6fdee10), TOBN(0x9da47ad3, 0x78488e71), + TOBN(0x99cc1dfd, 0xa0fcfb25), TOBN(0x42abde10, 0x64696954)}}, + {{TOBN(0x14cc15fc, 0x17eab9fe), TOBN(0xd6e863e4, 0xd3e70972), + TOBN(0x29a7765c, 0x6432112c), TOBN(0x88660001, 0x5b0774d8)}, + {TOBN(0x3729175a, 0x2c088eae), TOBN(0x13afbcae, 0x8230b8d4), + TOBN(0x44768151, 0x915f4379), TOBN(0xf086431a, 0xd8d22812)}}, + {{TOBN(0x37461955, 0xc298b974), TOBN(0x905fb5f0, 0xf8711e04), + TOBN(0x787abf3a, 0xfe969d18), TOBN(0x392167c2, 0x6f6a494e)}, + {TOBN(0xfc7a0d2d, 0x28c511da), TOBN(0xf127c7dc, 0xb66a262d), + TOBN(0xf9c4bb95, 0xfd63fdf0), TOBN(0x90016589, 0x3913ef46)}}, + {{TOBN(0x74d2a73c, 0x11aa600d), TOBN(0x2f5379bd, 0x9fb5ab52), + TOBN(0xe49e53a4, 0x7fb70068), TOBN(0x68dd39e5, 0x404aa9a7)}, + {TOBN(0xb9b0cf57, 0x2ecaa9c3), TOBN(0xba0e103b, 0xe824826b), + TOBN(0x60c2198b, 0x4631a3c4), TOBN(0xc5ff84ab, 0xfa8966a2)}}, + {{TOBN(0x2d6ebe22, 0xac95aff8), TOBN(0x1c9bb6db, 0xb5a46d09), + TOBN(0x419062da, 0x53ee4f8d), TOBN(0x7b9042d0, 0xbb97efef)}, + {TOBN(0x0f87f080, 0x830cf6bd), TOBN(0x4861d19a, 0x6ec8a6c6), + TOBN(0xd3a0daa1, 0x202f01aa), TOBN(0xb0111674, 0xf25afbd5)}}, + {{TOBN(0x6d00d6cf, 0x1afb20d9), TOBN(0x13695000, 0x40671bc5), + TOBN(0x913ab0dc, 0x2485ea9b), TOBN(0x1f2bed06, 0x9eef61ac)}, + {TOBN(0x850c8217, 0x6d799e20), TOBN(0x93415f37, 0x3271c2de), + TOBN(0x5afb06e9, 0x6c4f5910), TOBN(0x688a52df, 0xc4e9e421)}}, + {{TOBN(0x30495ba3, 0xe2a9a6db), TOBN(0x4601303d, 0x58f9268b), + TOBN(0xbe3b0dad, 0x7eb0f04f), TOBN(0x4ea47250, 0x4456936d)}, + {TOBN(0x8caf8798, 0xd33fd3e7), TOBN(0x1ccd8a89, 0xeb433708), + TOBN(0x9effe3e8, 0x87fd50ad), TOBN(0xbe240a56, 0x6b29c4df)}}, + {{TOBN(0xec4ffd98, 0xca0e7ebd), TOBN(0xf586783a, 0xe748616e), + TOBN(0xa5b00d8f, 0xc77baa99), TOBN(0x0acada29, 0xb4f34c9c)}, + {TOBN(0x36dad67d, 0x0fe723ac), TOBN(0x1d8e53a5, 0x39c36c1e), + TOBN(0xe4dd342d, 0x1f4bea41), TOBN(0x64fd5e35, 0xebc9e4e0)}}, + {{TOBN(0x96f01f90, 0x57908805), TOBN(0xb5b9ea3d, 0x5ed480dd), + TOBN(0x366c5dc2, 0x3efd2dd0), TOBN(0xed2fe305, 0x6e9dfa27)}, + {TOBN(0x4575e892, 0x6e9197e2), TOBN(0x11719c09, 0xab502a5d), + TOBN(0x264c7bec, 0xe81f213f), TOBN(0x741b9241, 0x55f5c457)}}, + {{TOBN(0x78ac7b68, 0x49a5f4f4), TOBN(0xf91d70a2, 0x9fc45b7d), + TOBN(0x39b05544, 0xb0f5f355), TOBN(0x11f06bce, 0xeef930d9)}, + {TOBN(0xdb84d25d, 0x038d05e1), TOBN(0x04838ee5, 0xbacc1d51), + TOBN(0x9da3ce86, 0x9e8ee00b), TOBN(0xc3412057, 0xc36eda1f)}}, + {{TOBN(0xae80b913, 0x64d9c2f4), TOBN(0x7468bac3, 0xa010a8ff), + TOBN(0xdfd20037, 0x37359d41), TOBN(0x1a0f5ab8, 0x15efeacc)}, + {TOBN(0x7c25ad2f, 0x659d0ce0), TOBN(0x4011bcbb, 0x6785cff1), + TOBN(0x128b9912, 0x7e2192c7), TOBN(0xa549d8e1, 0x13ccb0e8)}}, + {{TOBN(0x805588d8, 0xc85438b1), TOBN(0x5680332d, 0xbc25cb27), + TOBN(0xdcd1bc96, 0x1a4bfdf4), TOBN(0x779ff428, 0x706f6566)}, + {TOBN(0x8bbee998, 0xf059987a), TOBN(0xf6ce8cf2, 0xcc686de7), + TOBN(0xf8ad3c4a, 0x953cfdb2), TOBN(0xd1d426d9, 0x2205da36)}}, + {{TOBN(0xb3c0f13f, 0xc781a241), TOBN(0x3e89360e, 0xd75362a8), + TOBN(0xccd05863, 0xc8a91184), TOBN(0x9bd0c9b7, 0xefa8a7f4)}, + {TOBN(0x97ee4d53, 0x8a912a4b), TOBN(0xde5e15f8, 0xbcf518fd), + TOBN(0x6a055bf8, 0xc467e1e0), TOBN(0x10be4b4b, 0x1587e256)}}, + {{TOBN(0xd90c14f2, 0x668621c9), TOBN(0xd5518f51, 0xab9c92c1), + TOBN(0x8e6a0100, 0xd6d47b3c), TOBN(0xcbe980dd, 0x66716175)}, + {TOBN(0x500d3f10, 0xddd83683), TOBN(0x3b6cb35d, 0x99cac73c), + TOBN(0x53730c8b, 0x6083d550), TOBN(0xcf159767, 0xdf0a1987)}}, + {{TOBN(0x84bfcf53, 0x43ad73b3), TOBN(0x1b528c20, 0x4f035a94), + TOBN(0x4294edf7, 0x33eeac69), TOBN(0xb6283e83, 0x817f3240)}, + {TOBN(0xc3fdc959, 0x0a5f25b1), TOBN(0xefaf8aa5, 0x5844ee22), + TOBN(0xde269ba5, 0xdbdde4de), TOBN(0xe3347160, 0xc56133bf)}}, + {{TOBN(0xc1184219, 0x8d9ea9f8), TOBN(0x090de5db, 0xf3fc1ab5), + TOBN(0x404c37b1, 0x0bf22cda), TOBN(0x7de20ec8, 0xf5618894)}, + {TOBN(0x754c588e, 0xecdaecab), TOBN(0x6ca4b0ed, 0x88342743), + TOBN(0x76f08bdd, 0xf4a938ec), TOBN(0xd182de89, 0x91493ccb)}}, + {{TOBN(0xd652c53e, 0xc8a4186a), TOBN(0xb3e878db, 0x946d8e33), + TOBN(0x088453c0, 0x5f37663c), TOBN(0x5cd9daaa, 0xb407748b)}, + {TOBN(0xa1f5197f, 0x586d5e72), TOBN(0x47500be8, 0xc443ca59), + TOBN(0x78ef35b2, 0xe2652424), TOBN(0x09c5d26f, 0x6dd7767d)}}, + {{TOBN(0x7175a79a, 0xa74d3f7b), TOBN(0x0428fd8d, 0xcf5ea459), + TOBN(0x511cb97c, 0xa5d1746d), TOBN(0x36363939, 0xe71d1278)}, + {TOBN(0xcf2df955, 0x10350bf4), TOBN(0xb3817439, 0x60aae782), + TOBN(0xa748c0e4, 0x3e688809), TOBN(0x98021fbf, 0xd7a5a006)}}, + {{TOBN(0x9076a70c, 0x0e367a98), TOBN(0xbea1bc15, 0x0f62b7c2), + TOBN(0x2645a68c, 0x30fe0343), TOBN(0xacaffa78, 0x699dc14f)}, + {TOBN(0xf4469964, 0x457bf9c4), TOBN(0x0db6407b, 0x0d2ead83), + TOBN(0x68d56cad, 0xb2c6f3eb), TOBN(0x3b512e73, 0xf376356c)}}, + {{TOBN(0xe43b0e1f, 0xfce10408), TOBN(0x89ddc003, 0x5a5e257d), + TOBN(0xb0ae0d12, 0x0362e5b3), TOBN(0x07f983c7, 0xb0519161)}, + {TOBN(0xc2e94d15, 0x5d5231e7), TOBN(0xcff22aed, 0x0b4f9513), + TOBN(0xb02588dd, 0x6ad0b0b5), TOBN(0xb967d1ac, 0x11d0dcd5)}}, + {{TOBN(0x8dac6bc6, 0xcf777b6c), TOBN(0x0062bdbd, 0x4c6d1959), + TOBN(0x53da71b5, 0x0ef5cc85), TOBN(0x07012c7d, 0x4006f14f)}, + {TOBN(0x4617f962, 0xac47800d), TOBN(0x53365f2b, 0xc102ed75), + TOBN(0xb422efcb, 0x4ab8c9d3), TOBN(0x195cb26b, 0x34af31c9)}}, + {{TOBN(0x3a926e29, 0x05f2c4ce), TOBN(0xbd2bdecb, 0x9856966c), + TOBN(0x5d16ab3a, 0x85527015), TOBN(0x9f81609e, 0x4486c231)}, + {TOBN(0xd8b96b2c, 0xda350002), TOBN(0xbd054690, 0xfa1b7d36), + TOBN(0xdc90ebf5, 0xe71d79bc), TOBN(0xf241b6f9, 0x08964e4e)}}, + {{TOBN(0x7c838643, 0x2fe3cd4c), TOBN(0xe0f33acb, 0xb4bc633c), + TOBN(0xb4a9ecec, 0x3d139f1f), TOBN(0x05ce69cd, 0xdc4a1f49)}, + {TOBN(0xa19d1b16, 0xf5f98aaf), TOBN(0x45bb71d6, 0x6f23e0ef), + TOBN(0x33789fcd, 0x46cdfdd3), TOBN(0x9b8e2978, 0xcee040ca)}}, + {{TOBN(0x9c69b246, 0xae0a6828), TOBN(0xba533d24, 0x7078d5aa), + TOBN(0x7a2e42c0, 0x7bb4fbdb), TOBN(0xcfb4879a, 0x7035385c)}, + {TOBN(0x8c3dd30b, 0x3281705b), TOBN(0x7e361c6c, 0x404fe081), + TOBN(0x7b21649c, 0x3f604edf), TOBN(0x5dbf6a3f, 0xe52ffe47)}}, + {{TOBN(0xc41b7c23, 0x4b54d9bf), TOBN(0x1374e681, 0x3511c3d9), + TOBN(0x1863bf16, 0xc1b2b758), TOBN(0x90e78507, 0x1e9e6a96)}, + {TOBN(0xab4bf98d, 0x5d86f174), TOBN(0xd74e0bd3, 0x85e96fe4), + TOBN(0x8afde39f, 0xcac5d344), TOBN(0x90946dbc, 0xbd91b847)}}, + {{TOBN(0xf5b42358, 0xfe1a838c), TOBN(0x05aae6c5, 0x620ac9d8), + TOBN(0x8e193bd8, 0xa1ce5a0b), TOBN(0x8f710571, 0x4dabfd72)}, + {TOBN(0x8d8fdd48, 0x182caaac), TOBN(0x8c4aeefa, 0x040745cf), + TOBN(0x73c6c30a, 0xf3b93e6d), TOBN(0x991241f3, 0x16f42011)}}, + {{TOBN(0xa0158eea, 0xe457a477), TOBN(0xd19857db, 0xee6ddc05), + TOBN(0xb3265224, 0x18c41671), TOBN(0x3ffdfc7e, 0x3c2c0d58)}, + {TOBN(0x3a3a5254, 0x26ee7cda), TOBN(0x341b0869, 0xdf02c3a8), + TOBN(0xa023bf42, 0x723bbfc8), TOBN(0x3d15002a, 0x14452691)}}}, + {{{TOBN(0x5ef7324c, 0x85edfa30), TOBN(0x25976554, 0x87d4f3da), + TOBN(0x352f5bc0, 0xdcb50c86), TOBN(0x8f6927b0, 0x4832a96c)}, + {TOBN(0xd08ee1ba, 0x55f2f94c), TOBN(0x6a996f99, 0x344b45fa), + TOBN(0xe133cb8d, 0xa8aa455d), TOBN(0x5d0721ec, 0x758dc1f7)}}, + {{TOBN(0x6ba7a920, 0x79e5fb67), TOBN(0xe1331feb, 0x70aa725e), + TOBN(0x5080ccf5, 0x7df5d837), TOBN(0xe4cae01d, 0x7ff72e21)}, + {TOBN(0xd9243ee6, 0x0412a77d), TOBN(0x06ff7cac, 0xdf449025), + TOBN(0xbe75f7cd, 0x23ef5a31), TOBN(0xbc957822, 0x0ddef7a8)}}, + {{TOBN(0x8cf7230c, 0xb0ce1c55), TOBN(0x5b534d05, 0x0bbfb607), + TOBN(0xee1ef113, 0x0e16363b), TOBN(0x27e0aa7a, 0xb4999e82)}, + {TOBN(0xce1dac2d, 0x79362c41), TOBN(0x67920c90, 0x91bb6cb0), + TOBN(0x1e648d63, 0x2223df24), TOBN(0x0f7d9eef, 0xe32e8f28)}}, + {{TOBN(0x6943f39a, 0xfa833834), TOBN(0x22951722, 0xa6328562), + TOBN(0x81d63dd5, 0x4170fc10), TOBN(0x9f5fa58f, 0xaecc2e6d)}, + {TOBN(0xb66c8725, 0xe77d9a3b), TOBN(0x11235cea, 0x6384ebe0), + TOBN(0x06a8c118, 0x5845e24a), TOBN(0x0137b286, 0xebd093b1)}}, + {{TOBN(0xc589e1ce, 0x44ace150), TOBN(0xe0f8d3d9, 0x4381e97c), + TOBN(0x59e99b11, 0x62c5a4b8), TOBN(0x90d262f7, 0xfd0ec9f9)}, + {TOBN(0xfbc854c9, 0x283e13c9), TOBN(0x2d04fde7, 0xaedc7085), + TOBN(0x057d7765, 0x47dcbecb), TOBN(0x8dbdf591, 0x9a76fa5f)}}, + {{TOBN(0xd0150695, 0x0de1e578), TOBN(0x2e1463e7, 0xe9f72bc6), + TOBN(0xffa68441, 0x1b39eca5), TOBN(0x673c8530, 0x7c037f2f)}, + {TOBN(0xd0d6a600, 0x747f91da), TOBN(0xb08d43e1, 0xc9cb78e9), + TOBN(0x0fc0c644, 0x27b5cef5), TOBN(0x5c1d160a, 0xa60a2fd6)}}, + {{TOBN(0xf98cae53, 0x28c8e13b), TOBN(0x375f10c4, 0xb2eddcd1), + TOBN(0xd4eb8b7f, 0x5cce06ad), TOBN(0xb4669f45, 0x80a2e1ef)}, + {TOBN(0xd593f9d0, 0x5bbd8699), TOBN(0x5528a4c9, 0xe7976d13), + TOBN(0x3923e095, 0x1c7e28d3), TOBN(0xb9293790, 0x3f6bb577)}}, + {{TOBN(0xdb567d6a, 0xc42bd6d2), TOBN(0x6df86468, 0xbb1f96ae), + TOBN(0x0efe5b1a, 0x4843b28e), TOBN(0x961bbb05, 0x6379b240)}, + {TOBN(0xb6caf5f0, 0x70a6a26b), TOBN(0x70686c0d, 0x328e6e39), + TOBN(0x80da06cf, 0x895fc8d3), TOBN(0x804d8810, 0xb363fdc9)}}, + {{TOBN(0xbe22877b, 0x207f1670), TOBN(0x9b0dd188, 0x4e615291), + TOBN(0x625ae8dc, 0x97a3c2bf), TOBN(0x08584ef7, 0x439b86e8)}, + {TOBN(0xde7190a5, 0xdcd898ff), TOBN(0x26286c40, 0x2058ee3d), + TOBN(0x3db0b217, 0x5f87b1c1), TOBN(0xcc334771, 0x102a6db5)}}, + {{TOBN(0xd99de954, 0x2f770fb1), TOBN(0x97c1c620, 0x4cd7535e), + TOBN(0xd3b6c448, 0x3f09cefc), TOBN(0xd725af15, 0x5a63b4f8)}, + {TOBN(0x0c95d24f, 0xc01e20ec), TOBN(0xdfd37494, 0x9ae7121f), + TOBN(0x7d6ddb72, 0xec77b7ec), TOBN(0xfe079d3b, 0x0353a4ae)}}, + {{TOBN(0x3066e70a, 0x2e6ac8d2), TOBN(0x9c6b5a43, 0x106e5c05), + TOBN(0x52d3c6f5, 0xede59b8c), TOBN(0x30d6a5c3, 0xfccec9ae)}, + {TOBN(0xedec7c22, 0x4fc0a9ef), TOBN(0x190ff083, 0x95c16ced), + TOBN(0xbe12ec8f, 0x94de0fde), TOBN(0x0d131ab8, 0x852d3433)}}, + {{TOBN(0x42ace07e, 0x85701291), TOBN(0x94793ed9, 0x194061a8), + TOBN(0x30e83ed6, 0xd7f4a485), TOBN(0x9eec7269, 0xf9eeff4d)}, + {TOBN(0x90acba59, 0x0c9d8005), TOBN(0x5feca458, 0x1e79b9d1), + TOBN(0x8fbe5427, 0x1d506a1e), TOBN(0xa32b2c8e, 0x2439cfa7)}}, + {{TOBN(0x1671c173, 0x73dd0b4e), TOBN(0x37a28214, 0x44a054c6), + TOBN(0x81760a1b, 0x4e8b53f1), TOBN(0xa6c04224, 0xf9f93b9e)}, + {TOBN(0x18784b34, 0xcf671e3c), TOBN(0x81bbecd2, 0xcda9b994), + TOBN(0x38831979, 0xb2ab3848), TOBN(0xef54feb7, 0xf2e03c2d)}}, + {{TOBN(0xcf197ca7, 0xfb8088fa), TOBN(0x01427247, 0x4ddc96c5), + TOBN(0xa2d2550a, 0x30777176), TOBN(0x53469898, 0x4d0cf71d)}, + {TOBN(0x6ce937b8, 0x3a2aaac6), TOBN(0xe9f91dc3, 0x5af38d9b), + TOBN(0x2598ad83, 0xc8bf2899), TOBN(0x8e706ac9, 0xb5536c16)}}, + {{TOBN(0x40dc7495, 0xf688dc98), TOBN(0x26490cd7, 0x124c4afc), + TOBN(0xe651ec84, 0x1f18775c), TOBN(0x393ea6c3, 0xb4fdaf4a)}, + {TOBN(0x1e1f3343, 0x7f338e0d), TOBN(0x39fb832b, 0x6053e7b5), + TOBN(0x46e702da, 0x619e14d5), TOBN(0x859cacd1, 0xcdeef6e0)}}, + {{TOBN(0x63b99ce7, 0x4462007d), TOBN(0xb8ab48a5, 0x4cb5f5b7), + TOBN(0x9ec673d2, 0xf55edde7), TOBN(0xd1567f74, 0x8cfaefda)}, + {TOBN(0x46381b6b, 0x0887bcec), TOBN(0x694497ce, 0xe178f3c2), + TOBN(0x5e6525e3, 0x1e6266cb), TOBN(0x5931de26, 0x697d6413)}}, + {{TOBN(0x87f8df7c, 0x0e58d493), TOBN(0xb1ae5ed0, 0x58b73f12), + TOBN(0xc368f784, 0xdea0c34d), TOBN(0x9bd0a120, 0x859a91a0)}, + {TOBN(0xb00d88b7, 0xcc863c68), TOBN(0x3a1cc11e, 0x3d1f4d65), + TOBN(0xea38e0e7, 0x0aa85593), TOBN(0x37f13e98, 0x7dc4aee8)}}, + {{TOBN(0x10d38667, 0xbc947bad), TOBN(0x738e07ce, 0x2a36ee2e), + TOBN(0xc93470cd, 0xc577fcac), TOBN(0xdee1b616, 0x2782470d)}, + {TOBN(0x36a25e67, 0x2e793d12), TOBN(0xd6aa6cae, 0xe0f186da), + TOBN(0x474d0fd9, 0x80e07af7), TOBN(0xf7cdc47d, 0xba8a5cd4)}}, + {{TOBN(0x28af6d9d, 0xab15247f), TOBN(0x7c789c10, 0x493a537f), + TOBN(0x7ac9b110, 0x23a334e7), TOBN(0x0236ac09, 0x12c9c277)}, + {TOBN(0xa7e5bd25, 0x1d7a5144), TOBN(0x098b9c2a, 0xf13ec4ec), + TOBN(0x3639daca, 0xd3f0abca), TOBN(0x642da81a, 0xa23960f9)}}, + {{TOBN(0x7d2e5c05, 0x4f7269b1), TOBN(0xfcf30777, 0xe287c385), + TOBN(0x10edc84f, 0xf2a46f21), TOBN(0x35441757, 0x4f43fa36)}, + {TOBN(0xf1327899, 0xfd703431), TOBN(0xa438d7a6, 0x16dd587a), + TOBN(0x65c34c57, 0xe9c8352d), TOBN(0xa728edab, 0x5cc5a24e)}}, + {{TOBN(0xaed78abc, 0x42531689), TOBN(0x0a51a0e8, 0x010963ef), + TOBN(0x5776fa0a, 0xd717d9b3), TOBN(0xf356c239, 0x7dd3428b)}, + {TOBN(0x29903fff, 0x8d3a3dac), TOBN(0x409597fa, 0x3d94491f), + TOBN(0x4cd7a5ff, 0xbf4a56a4), TOBN(0xe5096474, 0x8adab462)}}, + {{TOBN(0xa97b5126, 0x5c3427b0), TOBN(0x6401405c, 0xd282c9bd), + TOBN(0x3629f8d7, 0x222c5c45), TOBN(0xb1c02c16, 0xe8d50aed)}, + {TOBN(0xbea2ed75, 0xd9635bc9), TOBN(0x226790c7, 0x6e24552f), + TOBN(0x3c33f2a3, 0x65f1d066), TOBN(0x2a43463e, 0x6dfccc2e)}}, + {{TOBN(0x8cc3453a, 0xdb483761), TOBN(0xe7cc6085, 0x65d5672b), + TOBN(0x277ed6cb, 0xde3efc87), TOBN(0x19f2f368, 0x69234eaf)}, + {TOBN(0x9aaf4317, 0x5c0b800b), TOBN(0x1f1e7c89, 0x8b6da6e2), + TOBN(0x6cfb4715, 0xb94ec75e), TOBN(0xd590dd5f, 0x453118c2)}}, + {{TOBN(0x14e49da1, 0x1f17a34c), TOBN(0x5420ab39, 0x235a1456), + TOBN(0xb7637241, 0x2f50363b), TOBN(0x7b15d623, 0xc3fabb6e)}, + {TOBN(0xa0ef40b1, 0xe274e49c), TOBN(0x5cf50744, 0x96b1860a), + TOBN(0xd6583fbf, 0x66afe5a4), TOBN(0x44240510, 0xf47e3e9a)}}, + {{TOBN(0x99254343, 0x11b2d595), TOBN(0xf1367499, 0xeec8df57), + TOBN(0x3cb12c61, 0x3e73dd05), TOBN(0xd248c033, 0x7dac102a)}, + {TOBN(0xcf154f13, 0xa77739f5), TOBN(0xbf4288cb, 0x23d2af42), + TOBN(0xaa64c9b6, 0x32e4a1cf), TOBN(0xee8c07a8, 0xc8a208f3)}}, + {{TOBN(0xe10d4999, 0x6fe8393f), TOBN(0x0f809a3f, 0xe91f3a32), + TOBN(0x61096d1c, 0x802f63c8), TOBN(0x289e1462, 0x57750d3d)}, + {TOBN(0xed06167e, 0x9889feea), TOBN(0xd5c9c0e2, 0xe0993909), + TOBN(0x46fca0d8, 0x56508ac6), TOBN(0x91826047, 0x4f1b8e83)}}, + {{TOBN(0x4f2c877a, 0x9a4a2751), TOBN(0x71bd0072, 0xcae6fead), + TOBN(0x38df8dcc, 0x06aa1941), TOBN(0x5a074b4c, 0x63beeaa8)}, + {TOBN(0xd6d65934, 0xc1cec8ed), TOBN(0xa6ecb49e, 0xaabc03bd), + TOBN(0xaade91c2, 0xde8a8415), TOBN(0xcfb0efdf, 0x691136e0)}}, + {{TOBN(0x11af45ee, 0x23ab3495), TOBN(0xa132df88, 0x0b77463d), + TOBN(0x8923c15c, 0x815d06f4), TOBN(0xc3ceb3f5, 0x0d61a436)}, + {TOBN(0xaf52291d, 0xe88fb1da), TOBN(0xea057974, 0x1da12179), + TOBN(0xb0d7218c, 0xd2fef720), TOBN(0x6c0899c9, 0x8e1d8845)}}, + {{TOBN(0x98157504, 0x752ddad7), TOBN(0xd60bd74f, 0xa1a68a97), + TOBN(0x7047a3a9, 0xf658fb99), TOBN(0x1f5d86d6, 0x5f8511e4)}, + {TOBN(0xb8a4bc42, 0x4b5a6d88), TOBN(0x69eb2c33, 0x1abefa7d), + TOBN(0x95bf39e8, 0x13c9c510), TOBN(0xf571960a, 0xd48aab43)}}, + {{TOBN(0x7e8cfbcf, 0x704e23c6), TOBN(0xc71b7d22, 0x28aaa65b), + TOBN(0xa041b2bd, 0x245e3c83), TOBN(0x69b98834, 0xd21854ff)}, + {TOBN(0x89d227a3, 0x963bfeec), TOBN(0x99947aaa, 0xde7da7cb), + TOBN(0x1d9ee9db, 0xee68a9b1), TOBN(0x0a08f003, 0x698ec368)}}, + {{TOBN(0xe9ea4094, 0x78ef2487), TOBN(0xc8d2d415, 0x02cfec26), + TOBN(0xc52f9a6e, 0xb7dcf328), TOBN(0x0ed489e3, 0x85b6a937)}, + {TOBN(0x9b94986b, 0xbef3366e), TOBN(0x0de59c70, 0xedddddb8), + TOBN(0xffdb748c, 0xeadddbe2), TOBN(0x9b9784bb, 0x8266ea40)}}, + {{TOBN(0x142b5502, 0x1a93507a), TOBN(0xb4cd1187, 0x8d3c06cf), + TOBN(0xdf70e76a, 0x91ec3f40), TOBN(0x484e81ad, 0x4e7553c2)}, + {TOBN(0x830f87b5, 0x272e9d6e), TOBN(0xea1c93e5, 0xc6ff514a), + TOBN(0x67cc2adc, 0xc4192a8e), TOBN(0xc77e27e2, 0x42f4535a)}}, + {{TOBN(0x9cdbab36, 0xd2b713c5), TOBN(0x86274ea0, 0xcf7b0cd3), + TOBN(0x784680f3, 0x09af826b), TOBN(0xbfcc837a, 0x0c72dea3)}, + {TOBN(0xa8bdfe9d, 0xd6529b73), TOBN(0x708aa228, 0x63a88002), + TOBN(0x6c7a9a54, 0xc91d45b9), TOBN(0xdf1a38bb, 0xfd004f56)}}, + {{TOBN(0x2e8c9a26, 0xb8bad853), TOBN(0x2d52cea3, 0x3723eae7), + TOBN(0x054d6d81, 0x56ca2830), TOBN(0xa3317d14, 0x9a8dc411)}, + {TOBN(0xa08662fe, 0xfd4ddeda), TOBN(0xed2a153a, 0xb55d792b), + TOBN(0x7035c16a, 0xbfc6e944), TOBN(0xb6bc5834, 0x00171cf3)}}, + {{TOBN(0xe27152b3, 0x83d102b6), TOBN(0xfe695a47, 0x0646b848), + TOBN(0xa5bb09d8, 0x916e6d37), TOBN(0xb4269d64, 0x0d17015e)}, + {TOBN(0x8d8156a1, 0x0a1d2285), TOBN(0xfeef6c51, 0x46d26d72), + TOBN(0x9dac57c8, 0x4c5434a7), TOBN(0x0282e5be, 0x59d39e31)}}, + {{TOBN(0xedfff181, 0x721c486d), TOBN(0x301baf10, 0xbc58824e), + TOBN(0x8136a6aa, 0x00570031), TOBN(0x55aaf78c, 0x1cddde68)}, + {TOBN(0x26829371, 0x59c63952), TOBN(0x3a3bd274, 0x8bc25baf), + TOBN(0xecdf8657, 0xb7e52dc3), TOBN(0x2dd8c087, 0xfd78e6c8)}}, + {{TOBN(0x20553274, 0xf5531461), TOBN(0x8b4a1281, 0x5d95499b), + TOBN(0xe2c8763a, 0x1a80f9d2), TOBN(0xd1dbe32b, 0x4ddec758)}, + {TOBN(0xaf12210d, 0x30c34169), TOBN(0xba74a953, 0x78baa533), + TOBN(0x3d133c6e, 0xa438f254), TOBN(0xa431531a, 0x201bef5b)}}, + {{TOBN(0x15295e22, 0xf669d7ec), TOBN(0xca374f64, 0x357fb515), + TOBN(0x8a8406ff, 0xeaa3fdb3), TOBN(0x106ae448, 0xdf3f2da8)}, + {TOBN(0x8f9b0a90, 0x33c8e9a1), TOBN(0x234645e2, 0x71ad5885), + TOBN(0x3d083224, 0x1c0aed14), TOBN(0xf10a7d3e, 0x7a942d46)}}, + {{TOBN(0x7c11deee, 0x40d5c9be), TOBN(0xb2bae7ff, 0xba84ed98), + TOBN(0x93e97139, 0xaad58ddd), TOBN(0x3d872796, 0x3f6d1fa3)}, + {TOBN(0x483aca81, 0x8569ff13), TOBN(0x8b89a5fb, 0x9a600f72), + TOBN(0x4cbc27c3, 0xc06f2b86), TOBN(0x22130713, 0x63ad9c0b)}}, + {{TOBN(0xb5358b1e, 0x48ac2840), TOBN(0x18311294, 0xecba9477), + TOBN(0xda58f990, 0xa6946b43), TOBN(0x3098baf9, 0x9ab41819)}, + {TOBN(0x66c4c158, 0x4198da52), TOBN(0xab4fc17c, 0x146bfd1b), + TOBN(0x2f0a4c3c, 0xbf36a908), TOBN(0x2ae9e34b, 0x58cf7838)}}, + {{TOBN(0xf411529e, 0x3fa11b1f), TOBN(0x21e43677, 0x974af2b4), + TOBN(0x7c20958e, 0xc230793b), TOBN(0x710ea885, 0x16e840f3)}, + {TOBN(0xfc0b21fc, 0xc5dc67cf), TOBN(0x08d51647, 0x88405718), + TOBN(0xd955c21f, 0xcfe49eb7), TOBN(0x9722a5d5, 0x56dd4a1f)}}, + {{TOBN(0xc9ef50e2, 0xc861baa5), TOBN(0xc0c21a5d, 0x9505ac3e), + TOBN(0xaf6b9a33, 0x8b7c063f), TOBN(0xc6370339, 0x2f4779c1)}, + {TOBN(0x22df99c7, 0x638167c3), TOBN(0xfe6ffe76, 0x795db30c), + TOBN(0x2b822d33, 0xa4854989), TOBN(0xfef031dd, 0x30563aa5)}}, + {{TOBN(0x16b09f82, 0xd57c667f), TOBN(0xc70312ce, 0xcc0b76f1), + TOBN(0xbf04a9e6, 0xc9118aec), TOBN(0x82fcb419, 0x3409d133)}, + {TOBN(0x1a8ab385, 0xab45d44d), TOBN(0xfba07222, 0x617b83a3), + TOBN(0xb05f50dd, 0x58e81b52), TOBN(0x1d8db553, 0x21ce5aff)}}, + {{TOBN(0x3097b8d4, 0xe344a873), TOBN(0x7d8d116d, 0xfe36d53e), + TOBN(0x6db22f58, 0x7875e750), TOBN(0x2dc5e373, 0x43e144ea)}, + {TOBN(0xc05f32e6, 0xe799eb95), TOBN(0xe9e5f4df, 0x6899e6ec), + TOBN(0xbdc3bd68, 0x1fab23d5), TOBN(0xb72b8ab7, 0x73af60e6)}}, + {{TOBN(0x8db27ae0, 0x2cecc84a), TOBN(0x600016d8, 0x7bdb871c), + TOBN(0x42a44b13, 0xd7c46f58), TOBN(0xb8919727, 0xc3a77d39)}, + {TOBN(0xcfc6bbbd, 0xdafd6088), TOBN(0x1a740146, 0x6bd20d39), + TOBN(0x8c747abd, 0x98c41072), TOBN(0x4c91e765, 0xbdf68ea1)}}, + {{TOBN(0x7c95e5ca, 0x08819a78), TOBN(0xcf48b729, 0xc9587921), + TOBN(0x091c7c5f, 0xdebbcc7d), TOBN(0x6f287404, 0xf0e05149)}, + {TOBN(0xf83b5ac2, 0x26cd44ec), TOBN(0x88ae32a6, 0xcfea250e), + TOBN(0x6ac5047a, 0x1d06ebc5), TOBN(0xc7e550b4, 0xd434f781)}}, + {{TOBN(0x61ab1cf2, 0x5c727bd2), TOBN(0x2e4badb1, 0x1cf915b0), + TOBN(0x1b4dadec, 0xf69d3920), TOBN(0xe61b1ca6, 0xf14c1dfe)}, + {TOBN(0x90b479cc, 0xbd6bd51f), TOBN(0x8024e401, 0x8045ec30), + TOBN(0xcab29ca3, 0x25ef0e62), TOBN(0x4f2e9416, 0x49e4ebc0)}}, + {{TOBN(0x45eb40ec, 0x0ccced58), TOBN(0x25cd4b9c, 0x0da44f98), + TOBN(0x43e06458, 0x871812c6), TOBN(0x99f80d55, 0x16cef651)}, + {TOBN(0x571340c9, 0xce6dc153), TOBN(0x138d5117, 0xd8665521), + TOBN(0xacdb45bc, 0x4e07014d), TOBN(0x2f34bb38, 0x84b60b91)}}, + {{TOBN(0xf44a4fd2, 0x2ae8921e), TOBN(0xb039288e, 0x892ba1e2), + TOBN(0x9da50174, 0xb1c180b2), TOBN(0x6b70ab66, 0x1693dc87)}, + {TOBN(0x7e9babc9, 0xe7057481), TOBN(0x4581ddef, 0x9c80dc41), + TOBN(0x0c890da9, 0x51294682), TOBN(0x0b5629d3, 0x3f4736e5)}}, + {{TOBN(0x2340c79e, 0xb06f5b41), TOBN(0xa42e84ce, 0x4e243469), + TOBN(0xf9a20135, 0x045a71a9), TOBN(0xefbfb415, 0xd27b6fb6)}, + {TOBN(0x25ebea23, 0x9d33cd6f), TOBN(0x9caedb88, 0xaa6c0af8), + TOBN(0x53dc7e9a, 0xd9ce6f96), TOBN(0x3897f9fd, 0x51e0b15a)}}, + {{TOBN(0xf51cb1f8, 0x8e5d788e), TOBN(0x1aec7ba8, 0xe1d490ee), + TOBN(0x265991e0, 0xcc58cb3c), TOBN(0x9f306e8c, 0x9fc3ad31)}, + {TOBN(0x5fed006e, 0x5040a0ac), TOBN(0xca9d5043, 0xfb476f2e), + TOBN(0xa19c06e8, 0xbeea7a23), TOBN(0xd2865801, 0x0edabb63)}}, + {{TOBN(0xdb92293f, 0x6967469a), TOBN(0x2894d839, 0x8d8a8ed8), + TOBN(0x87c9e406, 0xbbc77122), TOBN(0x8671c6f1, 0x2ea3a26a)}, + {TOBN(0xe42df8d6, 0xd7de9853), TOBN(0x2e3ce346, 0xb1f2bcc7), + TOBN(0xda601dfc, 0x899d50cf), TOBN(0xbfc913de, 0xfb1b598f)}}, + {{TOBN(0x81c4909f, 0xe61f7908), TOBN(0x192e304f, 0x9bbc7b29), + TOBN(0xc3ed8738, 0xc104b338), TOBN(0xedbe9e47, 0x783f5d61)}, + {TOBN(0x0c06e9be, 0x2db30660), TOBN(0xda3e613f, 0xc0eb7d8e), + TOBN(0xd8fa3e97, 0x322e096e), TOBN(0xfebd91e8, 0xd336e247)}}, + {{TOBN(0x8f13ccc4, 0xdf655a49), TOBN(0xa9e00dfc, 0x5eb20210), + TOBN(0x84631d0f, 0xc656b6ea), TOBN(0x93a058cd, 0xd8c0d947)}, + {TOBN(0x6846904a, 0x67bd3448), TOBN(0x4a3d4e1a, 0xf394fd5c), + TOBN(0xc102c1a5, 0xdb225f52), TOBN(0xe3455bba, 0xfc4f5e9a)}}, + {{TOBN(0x6b36985b, 0x4b9ad1ce), TOBN(0xa9818536, 0x5bb7f793), + TOBN(0x6c25e1d0, 0x48b1a416), TOBN(0x1381dd53, 0x3c81bee7)}, + {TOBN(0xd2a30d61, 0x7a4a7620), TOBN(0xc8412926, 0x39b8944c), + TOBN(0x3c1c6fbe, 0x7a97c33a), TOBN(0x941e541d, 0x938664e7)}}, + {{TOBN(0x417499e8, 0x4a34f239), TOBN(0x15fdb83c, 0xb90402d5), + TOBN(0xb75f46bf, 0x433aa832), TOBN(0xb61e15af, 0x63215db1)}, + {TOBN(0xaabe59d4, 0xa127f89a), TOBN(0x5d541e0c, 0x07e816da), + TOBN(0xaaba0659, 0xa618b692), TOBN(0x55327733, 0x17266026)}}, + {{TOBN(0xaf53a0fc, 0x95f57552), TOBN(0x32947650, 0x6cacb0c9), + TOBN(0x253ff58d, 0xc821be01), TOBN(0xb0309531, 0xa06f1146)}, + {TOBN(0x59bbbdf5, 0x05c2e54d), TOBN(0x158f27ad, 0x26e8dd22), + TOBN(0xcc5b7ffb, 0x397e1e53), TOBN(0xae03f65b, 0x7fc1e50d)}}, + {{TOBN(0xa9784ebd, 0x9c95f0f9), TOBN(0x5ed9deb2, 0x24640771), + TOBN(0x31244af7, 0x035561c4), TOBN(0x87332f3a, 0x7ee857de)}, + {TOBN(0x09e16e9e, 0x2b9e0d88), TOBN(0x52d910f4, 0x56a06049), + TOBN(0x507ed477, 0xa9592f48), TOBN(0x85cb917b, 0x2365d678)}}, + {{TOBN(0xf8511c93, 0x4c8998d1), TOBN(0x2186a3f1, 0x730ea58f), + TOBN(0x50189626, 0xb2029db0), TOBN(0x9137a6d9, 0x02ceb75a)}, + {TOBN(0x2fe17f37, 0x748bc82c), TOBN(0x87c2e931, 0x80469f8c), + TOBN(0x850f71cd, 0xbf891aa2), TOBN(0x0ca1b89b, 0x75ec3d8d)}}, + {{TOBN(0x516c43aa, 0x5e1cd3cd), TOBN(0x89397808, 0x9a887c28), + TOBN(0x0059c699, 0xddea1f9f), TOBN(0x7737d6fa, 0x8e6868f7)}, + {TOBN(0x6d93746a, 0x60f1524b), TOBN(0x36985e55, 0xba052aa7), + TOBN(0x41b1d322, 0xed923ea5), TOBN(0x3429759f, 0x25852a11)}}, + {{TOBN(0xbeca6ec3, 0x092e9f41), TOBN(0x3a238c66, 0x62256bbd), + TOBN(0xd82958ea, 0x70ad487d), TOBN(0x4ac8aaf9, 0x65610d93)}, + {TOBN(0x3fa101b1, 0x5e4ccab0), TOBN(0x9bf430f2, 0x9de14bfb), + TOBN(0xa10f5cc6, 0x6531899d), TOBN(0x590005fb, 0xea8ce17d)}}, + {{TOBN(0xc437912f, 0x24544cb6), TOBN(0x9987b71a, 0xd79ac2e3), + TOBN(0x13e3d9dd, 0xc058a212), TOBN(0x00075aac, 0xd2de9606)}, + {TOBN(0x80ab508b, 0x6cac8369), TOBN(0x87842be7, 0xf54f6c89), + TOBN(0xa7ad663d, 0x6bc532a4), TOBN(0x67813de7, 0x78a91bc8)}}, + {{TOBN(0x5dcb61ce, 0xc3427239), TOBN(0x5f3c7cf0, 0xc56934d9), + TOBN(0xc079e0fb, 0xe3191591), TOBN(0xe40896bd, 0xb01aada7)}, + {TOBN(0x8d466791, 0x0492d25f), TOBN(0x8aeb30c9, 0xe7408276), + TOBN(0xe9437495, 0x9287aacc), TOBN(0x23d4708d, 0x79fe03d4)}}, + {{TOBN(0x8cda9cf2, 0xd0c05199), TOBN(0x502fbc22, 0xfae78454), + TOBN(0xc0bda9df, 0xf572a182), TOBN(0x5f9b71b8, 0x6158b372)}, + {TOBN(0xe0f33a59, 0x2b82dd07), TOBN(0x76302735, 0x9523032e), + TOBN(0x7fe1a721, 0xc4505a32), TOBN(0x7b6e3e82, 0xf796409f)}}}, + {{{TOBN(0xe3417bc0, 0x35d0b34a), TOBN(0x440b386b, 0x8327c0a7), + TOBN(0x8fb7262d, 0xac0362d1), TOBN(0x2c41114c, 0xe0cdf943)}, + {TOBN(0x2ba5cef1, 0xad95a0b1), TOBN(0xc09b37a8, 0x67d54362), + TOBN(0x26d6cdd2, 0x01e486c9), TOBN(0x20477abf, 0x42ff9297)}}, + {{TOBN(0xa004dcb3, 0x292a9287), TOBN(0xddc15cf6, 0x77b092c7), + TOBN(0x083a8464, 0x806c0605), TOBN(0x4a68df70, 0x3db997b0)}, + {TOBN(0x9c134e45, 0x05bf7dd0), TOBN(0xa4e63d39, 0x8ccf7f8c), + TOBN(0xa6e6517f, 0x41b5f8af), TOBN(0xaa8b9342, 0xad7bc1cc)}}, + {{TOBN(0x126f35b5, 0x1e706ad9), TOBN(0xb99cebb4, 0xc3a9ebdf), + TOBN(0xa75389af, 0xbf608d90), TOBN(0x76113c4f, 0xc6c89858)}, + {TOBN(0x80de8eb0, 0x97e2b5aa), TOBN(0x7e1022cc, 0x63b91304), + TOBN(0x3bdab605, 0x6ccc066c), TOBN(0x33cbb144, 0xb2edf900)}}, + {{TOBN(0xc4176471, 0x7af715d2), TOBN(0xe2f7f594, 0xd0134a96), + TOBN(0x2c1873ef, 0xa41ec956), TOBN(0xe4e7b4f6, 0x77821304)}, + {TOBN(0xe5c8ff97, 0x88d5374a), TOBN(0x2b915e63, 0x80823d5b), + TOBN(0xea6bc755, 0xb2ee8fe2), TOBN(0x6657624c, 0xe7112651)}}, + {{TOBN(0x157af101, 0xdace5aca), TOBN(0xc4fdbcf2, 0x11a6a267), + TOBN(0xdaddf340, 0xc49c8609), TOBN(0x97e49f52, 0xe9604a65)}, + {TOBN(0x9be8e790, 0x937e2ad5), TOBN(0x846e2508, 0x326e17f1), + TOBN(0x3f38007a, 0x0bbbc0dc), TOBN(0xcf03603f, 0xb11e16d6)}}, + {{TOBN(0xd6f800e0, 0x7442f1d5), TOBN(0x475607d1, 0x66e0e3ab), + TOBN(0x82807f16, 0xb7c64047), TOBN(0x8858e1e3, 0xa749883d)}, + {TOBN(0x5859120b, 0x8231ee10), TOBN(0x1b80e7eb, 0x638a1ece), + TOBN(0xcb72525a, 0xc6aa73a4), TOBN(0xa7cdea3d, 0x844423ac)}}, + {{TOBN(0x5ed0c007, 0xf8ae7c38), TOBN(0x6db07a5c, 0x3d740192), + TOBN(0xbe5e9c2a, 0x5fe36db3), TOBN(0xd5b9d57a, 0x76e95046)}, + {TOBN(0x54ac32e7, 0x8eba20f2), TOBN(0xef11ca8f, 0x71b9a352), + TOBN(0x305e373e, 0xff98a658), TOBN(0xffe5a100, 0x823eb667)}}, + {{TOBN(0x57477b11, 0xe51732d2), TOBN(0xdfd6eb28, 0x2538fc0e), + TOBN(0x5c43b0cc, 0x3b39eec5), TOBN(0x6af12778, 0xcb36cc57)}, + {TOBN(0x70b0852d, 0x06c425ae), TOBN(0x6df92f8c, 0x5c221b9b), + TOBN(0x6c8d4f9e, 0xce826d9c), TOBN(0xf59aba7b, 0xb49359c3)}}, + {{TOBN(0x5c8ed8d5, 0xda64309d), TOBN(0x61a6de56, 0x91b30704), + TOBN(0xd6b52f6a, 0x2f9b5808), TOBN(0x0eee4194, 0x98c958a7)}, + {TOBN(0xcddd9aab, 0x771e4caa), TOBN(0x83965dfd, 0x78bc21be), + TOBN(0x02affce3, 0xb3b504f5), TOBN(0x30847a21, 0x561c8291)}}, + {{TOBN(0xd2eb2cf1, 0x52bfda05), TOBN(0xe0e4c4e9, 0x6197b98c), + TOBN(0x1d35076c, 0xf8a1726f), TOBN(0x6c06085b, 0x2db11e3d)}, + {TOBN(0x15c0c4d7, 0x4463ba14), TOBN(0x9d292f83, 0x0030238c), + TOBN(0x1311ee8b, 0x3727536d), TOBN(0xfeea86ef, 0xbeaedc1e)}}, + {{TOBN(0xb9d18cd3, 0x66131e2e), TOBN(0xf31d974f, 0x80fe2682), + TOBN(0xb6e49e0f, 0xe4160289), TOBN(0x7c48ec0b, 0x08e92799)}, + {TOBN(0x818111d8, 0xd1989aa7), TOBN(0xb34fa0aa, 0xebf926f9), + TOBN(0xdb5fe2f5, 0xa245474a), TOBN(0xf80a6ebb, 0x3c7ca756)}}, + {{TOBN(0xa7f96054, 0xafa05dd8), TOBN(0x26dfcf21, 0xfcaf119e), + TOBN(0xe20ef2e3, 0x0564bb59), TOBN(0xef4dca50, 0x61cb02b8)}, + {TOBN(0xcda7838a, 0x65d30672), TOBN(0x8b08d534, 0xfd657e86), + TOBN(0x4c5b4395, 0x46d595c8), TOBN(0x39b58725, 0x425cb836)}}, + {{TOBN(0x8ea61059, 0x3de9abe3), TOBN(0x40434881, 0x9cdc03be), + TOBN(0x9b261245, 0xcfedce8c), TOBN(0x78c318b4, 0xcf5234a1)}, + {TOBN(0x510bcf16, 0xfde24c99), TOBN(0x2a77cb75, 0xa2c2ff5d), + TOBN(0x9c895c2b, 0x27960fb4), TOBN(0xd30ce975, 0xb0eda42b)}}, + {{TOBN(0xfda85393, 0x1a62cc26), TOBN(0x23c69b96, 0x50c0e052), + TOBN(0xa227df15, 0xbfc633f3), TOBN(0x2ac78848, 0x1bae7d48)}, + {TOBN(0x487878f9, 0x187d073d), TOBN(0x6c2be919, 0x967f807d), + TOBN(0x765861d8, 0x336e6d8f), TOBN(0x88b8974c, 0xce528a43)}}, + {{TOBN(0x09521177, 0xff57d051), TOBN(0x2ff38037, 0xfb6a1961), + TOBN(0xfc0aba74, 0xa3d76ad4), TOBN(0x7c764803, 0x25a7ec17)}, + {TOBN(0x7532d75f, 0x48879bc8), TOBN(0xea7eacc0, 0x58ce6bc1), + TOBN(0xc82176b4, 0x8e896c16), TOBN(0x9a30e0b2, 0x2c750fed)}}, + {{TOBN(0xc37e2c2e, 0x421d3aa4), TOBN(0xf926407c, 0xe84fa840), + TOBN(0x18abc03d, 0x1454e41c), TOBN(0x26605ecd, 0x3f7af644)}, + {TOBN(0x242341a6, 0xd6a5eabf), TOBN(0x1edb84f4, 0x216b668e), + TOBN(0xd836edb8, 0x04010102), TOBN(0x5b337ce7, 0x945e1d8c)}}, + {{TOBN(0xd2075c77, 0xc055dc14), TOBN(0x2a0ffa25, 0x81d89cdf), + TOBN(0x8ce815ea, 0x6ffdcbaf), TOBN(0xa3428878, 0xfb648867)}, + {TOBN(0x277699cf, 0x884655fb), TOBN(0xfa5b5bd6, 0x364d3e41), + TOBN(0x01f680c6, 0x441e1cb7), TOBN(0x3fd61e66, 0xb70a7d67)}}, + {{TOBN(0x666ba2dc, 0xcc78cf66), TOBN(0xb3018174, 0x6fdbff77), + TOBN(0x8d4dd0db, 0x168d4668), TOBN(0x259455d0, 0x1dab3a2a)}, + {TOBN(0xf58564c5, 0xcde3acec), TOBN(0x77141925, 0x13adb276), + TOBN(0x527d725d, 0x8a303f65), TOBN(0x55deb6c9, 0xe6f38f7b)}}, + {{TOBN(0xfd5bb657, 0xb1fa70fb), TOBN(0xfa07f50f, 0xd8073a00), + TOBN(0xf72e3aa7, 0xbca02500), TOBN(0xf68f895d, 0x9975740d)}, + {TOBN(0x30112060, 0x5cae2a6a), TOBN(0x01bd7218, 0x02874842), + TOBN(0x3d423891, 0x7ce47bd3), TOBN(0xa66663c1, 0x789544f6)}}, + {{TOBN(0x864d05d7, 0x3272d838), TOBN(0xe22924f9, 0xfa6295c5), + TOBN(0x8189593f, 0x6c2fda32), TOBN(0x330d7189, 0xb184b544)}, + {TOBN(0x79efa62c, 0xbde1f714), TOBN(0x35771c94, 0xe5cb1a63), + TOBN(0x2f4826b8, 0x641c8332), TOBN(0x00a894fb, 0xc8cee854)}}, + {{TOBN(0xb4b9a39b, 0x36194d40), TOBN(0xe857a7c5, 0x77612601), + TOBN(0xf4209dd2, 0x4ecf2f58), TOBN(0x82b9e66d, 0x5a033487)}, + {TOBN(0xc1e36934, 0xe4e8b9dd), TOBN(0xd2372c9d, 0xa42377d7), + TOBN(0x51dc94c7, 0x0e3ae43b), TOBN(0x4c57761e, 0x04474f6f)}}, + {{TOBN(0xdcdacd0a, 0x1058a318), TOBN(0x369cf3f5, 0x78053a9a), + TOBN(0xc6c3de50, 0x31c68de2), TOBN(0x4653a576, 0x3c4b6d9f)}, + {TOBN(0x1688dd5a, 0xaa4e5c97), TOBN(0x5be80aa1, 0xb7ab3c74), + TOBN(0x70cefe7c, 0xbc65c283), TOBN(0x57f95f13, 0x06867091)}}, + {{TOBN(0xa39114e2, 0x4415503b), TOBN(0xc08ff7c6, 0x4cbb17e9), + TOBN(0x1eff674d, 0xd7dec966), TOBN(0x6d4690af, 0x53376f63)}, + {TOBN(0xff6fe32e, 0xea74237b), TOBN(0xc436d17e, 0xcd57508e), + TOBN(0x15aa28e1, 0xedcc40fe), TOBN(0x0d769c04, 0x581bbb44)}}, + {{TOBN(0xc240b6de, 0x34eaacda), TOBN(0xd9e116e8, 0x2ba0f1de), + TOBN(0xcbe45ec7, 0x79438e55), TOBN(0x91787c9d, 0x96f752d7)}, + {TOBN(0x897f532b, 0xf129ac2f), TOBN(0xd307b7c8, 0x5a36e22c), + TOBN(0x91940675, 0x749fb8f3), TOBN(0xd14f95d0, 0x157fdb28)}}, + {{TOBN(0xfe51d029, 0x6ae55043), TOBN(0x8931e98f, 0x44a87de1), + TOBN(0xe57f1cc6, 0x09e4fee2), TOBN(0x0d063b67, 0x4e072d92)}, + {TOBN(0x70a998b9, 0xed0e4316), TOBN(0xe74a736b, 0x306aca46), + TOBN(0xecf0fbf2, 0x4fda97c7), TOBN(0xa40f65cb, 0x3e178d93)}}, + {{TOBN(0x16253604, 0x16df4285), TOBN(0xb0c9babb, 0xd0c56ae2), + TOBN(0x73032b19, 0xcfc5cfc3), TOBN(0xe497e5c3, 0x09752056)}, + {TOBN(0x12096bb4, 0x164bda96), TOBN(0x1ee42419, 0xa0b74da1), + TOBN(0x8fc36243, 0x403826ba), TOBN(0x0c8f0069, 0xdc09e660)}}, + {{TOBN(0x8667e981, 0xc27253c9), TOBN(0x05a6aefb, 0x92b36a45), + TOBN(0xa62c4b36, 0x9cb7bb46), TOBN(0x8394f375, 0x11f7027b)}, + {TOBN(0x747bc79c, 0x5f109d0f), TOBN(0xcad88a76, 0x5b8cc60a), + TOBN(0x80c5a66b, 0x58f09e68), TOBN(0xe753d451, 0xf6127eac)}}, + {{TOBN(0xc44b74a1, 0x5b0ec6f5), TOBN(0x47989fe4, 0x5289b2b8), + TOBN(0x745f8484, 0x58d6fc73), TOBN(0xec362a6f, 0xf61c70ab)}, + {TOBN(0x070c98a7, 0xb3a8ad41), TOBN(0x73a20fc0, 0x7b63db51), + TOBN(0xed2c2173, 0xf44c35f4), TOBN(0x8a56149d, 0x9acc9dca)}}, + {{TOBN(0x98f17881, 0x9ac6e0f4), TOBN(0x360fdeaf, 0xa413b5ed), + TOBN(0x0625b8f4, 0xa300b0fd), TOBN(0xf1f4d76a, 0x5b3222d3)}, + {TOBN(0x9d6f5109, 0x587f76b8), TOBN(0x8b4ee08d, 0x2317fdb5), + TOBN(0x88089bb7, 0x8c68b095), TOBN(0x95570e9a, 0x5808d9b9)}}, + {{TOBN(0xa395c36f, 0x35d33ae7), TOBN(0x200ea123, 0x50bb5a94), + TOBN(0x20c789bd, 0x0bafe84b), TOBN(0x243ef52d, 0x0919276a)}, + {TOBN(0x3934c577, 0xe23ae233), TOBN(0xb93807af, 0xa460d1ec), + TOBN(0xb72a53b1, 0xf8fa76a4), TOBN(0xd8914cb0, 0xc3ca4491)}}, + {{TOBN(0x2e128494, 0x3fb42622), TOBN(0x3b2700ac, 0x500907d5), + TOBN(0xf370fb09, 0x1a95ec63), TOBN(0xf8f30be2, 0x31b6dfbd)}, + {TOBN(0xf2b2f8d2, 0x69e55f15), TOBN(0x1fead851, 0xcc1323e9), + TOBN(0xfa366010, 0xd9e5eef6), TOBN(0x64d487b0, 0xe316107e)}}, + {{TOBN(0x4c076b86, 0xd23ddc82), TOBN(0x03fd344c, 0x7e0143f0), + TOBN(0xa95362ff, 0x317af2c5), TOBN(0x0add3db7, 0xe18b7a4f)}, + {TOBN(0x9c673e3f, 0x8260e01b), TOBN(0xfbeb49e5, 0x54a1cc91), + TOBN(0x91351bf2, 0x92f2e433), TOBN(0xc755e7ec, 0x851141eb)}}, + {{TOBN(0xc9a95139, 0x29607745), TOBN(0x0ca07420, 0xa26f2b28), + TOBN(0xcb2790e7, 0x4bc6f9dd), TOBN(0x345bbb58, 0xadcaffc0)}, + {TOBN(0xc65ea38c, 0xbe0f27a2), TOBN(0x67c24d7c, 0x641fcb56), + TOBN(0x2c25f0a7, 0xa9e2c757), TOBN(0x93f5cdb0, 0x16f16c49)}}, + {{TOBN(0x2ca5a9d7, 0xc5ee30a1), TOBN(0xd1593635, 0xb909b729), + TOBN(0x804ce9f3, 0xdadeff48), TOBN(0xec464751, 0xb07c30c3)}, + {TOBN(0x89d65ff3, 0x9e49af6a), TOBN(0xf2d6238a, 0x6f3d01bc), + TOBN(0x1095561e, 0x0bced843), TOBN(0x51789e12, 0xc8a13fd8)}}, + {{TOBN(0xd633f929, 0x763231df), TOBN(0x46df9f7d, 0xe7cbddef), + TOBN(0x01c889c0, 0xcb265da8), TOBN(0xfce1ad10, 0xaf4336d2)}, + {TOBN(0x8d110df6, 0xfc6a0a7e), TOBN(0xdd431b98, 0x6da425dc), + TOBN(0xcdc4aeab, 0x1834aabe), TOBN(0x84deb124, 0x8439b7fc)}}, + {{TOBN(0x8796f169, 0x3c2a5998), TOBN(0x9b9247b4, 0x7947190d), + TOBN(0x55b9d9a5, 0x11597014), TOBN(0x7e9dd70d, 0x7b1566ee)}, + {TOBN(0x94ad78f7, 0xcbcd5e64), TOBN(0x0359ac17, 0x9bd4c032), + TOBN(0x3b11baaf, 0x7cc222ae), TOBN(0xa6a6e284, 0xba78e812)}}, + {{TOBN(0x8392053f, 0x24cea1a0), TOBN(0xc97bce4a, 0x33621491), + TOBN(0x7eb1db34, 0x35399ee9), TOBN(0x473f78ef, 0xece81ad1)}, + {TOBN(0x41d72fe0, 0xf63d3d0d), TOBN(0xe620b880, 0xafab62fc), + TOBN(0x92096bc9, 0x93158383), TOBN(0x41a21357, 0x8f896f6c)}}, + {{TOBN(0x1b5ee2fa, 0xc7dcfcab), TOBN(0x650acfde, 0x9546e007), + TOBN(0xc081b749, 0xb1b02e07), TOBN(0xda9e41a0, 0xf9eca03d)}, + {TOBN(0x013ba727, 0x175a54ab), TOBN(0xca0cd190, 0xea5d8d10), + TOBN(0x85ea52c0, 0x95fd96a9), TOBN(0x2c591b9f, 0xbc5c3940)}}, + {{TOBN(0x6fb4d4e4, 0x2bad4d5f), TOBN(0xfa4c3590, 0xfef0059b), + TOBN(0x6a10218a, 0xf5122294), TOBN(0x9a78a81a, 0xa85751d1)}, + {TOBN(0x04f20579, 0xa98e84e7), TOBN(0xfe1242c0, 0x4997e5b5), + TOBN(0xe77a273b, 0xca21e1e4), TOBN(0xfcc8b1ef, 0x9411939d)}}, + {{TOBN(0xe20ea302, 0x92d0487a), TOBN(0x1442dbec, 0x294b91fe), + TOBN(0x1f7a4afe, 0xbb6b0e8f), TOBN(0x1700ef74, 0x6889c318)}, + {TOBN(0xf5bbffc3, 0x70f1fc62), TOBN(0x3b31d4b6, 0x69c79cca), + TOBN(0xe8bc2aab, 0xa7f6340d), TOBN(0xb0b08ab4, 0xa725e10a)}}, + {{TOBN(0x44f05701, 0xae340050), TOBN(0xba4b3016, 0x1cf0c569), + TOBN(0x5aa29f83, 0xfbe19a51), TOBN(0x1b9ed428, 0xb71d752e)}, + {TOBN(0x1666e54e, 0xeb4819f5), TOBN(0x616cdfed, 0x9e18b75b), + TOBN(0x112ed5be, 0x3ee27b0b), TOBN(0xfbf28319, 0x44c7de4d)}}, + {{TOBN(0xd685ec85, 0xe0e60d84), TOBN(0x68037e30, 0x1db7ee78), + TOBN(0x5b65bdcd, 0x003c4d6e), TOBN(0x33e7363a, 0x93e29a6a)}, + {TOBN(0x995b3a61, 0x08d0756c), TOBN(0xd727f85c, 0x2faf134b), + TOBN(0xfac6edf7, 0x1d337823), TOBN(0x99b9aa50, 0x0439b8b4)}}, + {{TOBN(0x722eb104, 0xe2b4e075), TOBN(0x49987295, 0x437c4926), + TOBN(0xb1e4c0e4, 0x46a9b82d), TOBN(0xd0cb3197, 0x57a006f5)}, + {TOBN(0xf3de0f7d, 0xd7808c56), TOBN(0xb5c54d8f, 0x51f89772), + TOBN(0x500a114a, 0xadbd31aa), TOBN(0x9afaaaa6, 0x295f6cab)}}, + {{TOBN(0x94705e21, 0x04cf667a), TOBN(0xfc2a811b, 0x9d3935d7), + TOBN(0x560b0280, 0x6d09267c), TOBN(0xf19ed119, 0xf780e53b)}, + {TOBN(0xf0227c09, 0x067b6269), TOBN(0x967b8533, 0x5caef599), + TOBN(0x155b9243, 0x68efeebc), TOBN(0xcd6d34f5, 0xc497bae6)}}, + {{TOBN(0x1dd8d5d3, 0x6cceb370), TOBN(0x2aeac579, 0xa78d7bf9), + TOBN(0x5d65017d, 0x70b67a62), TOBN(0x70c8e44f, 0x17c53f67)}, + {TOBN(0xd1fc0950, 0x86a34d09), TOBN(0xe0fca256, 0xe7134907), + TOBN(0xe24fa29c, 0x80fdd315), TOBN(0x2c4acd03, 0xd87499ad)}}, + {{TOBN(0xbaaf7517, 0x3b5a9ba6), TOBN(0xb9cbe1f6, 0x12e51a51), + TOBN(0xd88edae3, 0x5e154897), TOBN(0xe4309c3c, 0x77b66ca0)}, + {TOBN(0xf5555805, 0xf67f3746), TOBN(0x85fc37ba, 0xa36401ff), + TOBN(0xdf86e2ca, 0xd9499a53), TOBN(0x6270b2a3, 0xecbc955b)}}, + {{TOBN(0xafae64f5, 0x974ad33b), TOBN(0x04d85977, 0xfe7b2df1), + TOBN(0x2a3db3ff, 0x4ab03f73), TOBN(0x0b87878a, 0x8702740a)}, + {TOBN(0x6d263f01, 0x5a061732), TOBN(0xc25430ce, 0xa32a1901), + TOBN(0xf7ebab3d, 0xdb155018), TOBN(0x3a86f693, 0x63a9b78e)}}, + {{TOBN(0x349ae368, 0xda9f3804), TOBN(0x470f07fe, 0xa164349c), + TOBN(0xd52f4cc9, 0x8562baa5), TOBN(0xc74a9e86, 0x2b290df3)}, + {TOBN(0xd3a1aa35, 0x43471a24), TOBN(0x239446be, 0xb8194511), + TOBN(0xbec2dd00, 0x81dcd44d), TOBN(0xca3d7f0f, 0xc42ac82d)}}, + {{TOBN(0x1f3db085, 0xfdaf4520), TOBN(0xbb6d3e80, 0x4549daf2), + TOBN(0xf5969d8a, 0x19ad5c42), TOBN(0x7052b13d, 0xdbfd1511)}, + {TOBN(0x11890d1b, 0x682b9060), TOBN(0xa71d3883, 0xac34452c), + TOBN(0xa438055b, 0x783805b4), TOBN(0x43241277, 0x4725b23e)}}, + {{TOBN(0xf20cf96e, 0x4901bbed), TOBN(0x6419c710, 0xf432a2bb), + TOBN(0x57a0fbb9, 0xdfa9cd7d), TOBN(0x589111e4, 0x00daa249)}, + {TOBN(0x19809a33, 0x7b60554e), TOBN(0xea5f8887, 0xede283a4), + TOBN(0x2d713802, 0x503bfd35), TOBN(0x151bb0af, 0x585d2a53)}}, + {{TOBN(0x40b08f74, 0x43b30ca8), TOBN(0xe10b5bba, 0xd9934583), + TOBN(0xe8a546d6, 0xb51110ad), TOBN(0x1dd50e66, 0x28e0b6c5)}, + {TOBN(0x292e9d54, 0xcff2b821), TOBN(0x3882555d, 0x47281760), + TOBN(0x134838f8, 0x3724d6e3), TOBN(0xf2c679e0, 0x22ddcda1)}}, + {{TOBN(0x40ee8815, 0x6d2a5768), TOBN(0x7f227bd2, 0x1c1e7e2d), + TOBN(0x487ba134, 0xd04ff443), TOBN(0x76e2ff3d, 0xc614e54b)}, + {TOBN(0x36b88d6f, 0xa3177ec7), TOBN(0xbf731d51, 0x2328fff5), + TOBN(0x758caea2, 0x49ba158e), TOBN(0x5ab8ff4c, 0x02938188)}}, + {{TOBN(0x33e16056, 0x35edc56d), TOBN(0x5a69d349, 0x7e940d79), + TOBN(0x6c4fd001, 0x03866dcb), TOBN(0x20a38f57, 0x4893cdef)}, + {TOBN(0xfbf3e790, 0xfac3a15b), TOBN(0x6ed7ea2e, 0x7a4f8e6b), + TOBN(0xa663eb4f, 0xbc3aca86), TOBN(0x22061ea5, 0x080d53f7)}}, + {{TOBN(0x2480dfe6, 0xf546783f), TOBN(0xd38bc6da, 0x5a0a641e), + TOBN(0xfb093cd1, 0x2ede8965), TOBN(0x89654db4, 0xacb455cf)}, + {TOBN(0x413cbf9a, 0x26e1adee), TOBN(0x291f3764, 0x373294d4), + TOBN(0x00797257, 0x648083fe), TOBN(0x25f504d3, 0x208cc341)}}, + {{TOBN(0x635a8e5e, 0xc3a0ee43), TOBN(0x70aaebca, 0x679898ff), + TOBN(0x9ee9f547, 0x5dc63d56), TOBN(0xce987966, 0xffb34d00)}, + {TOBN(0xf9f86b19, 0x5e26310a), TOBN(0x9e435484, 0x382a8ca8), + TOBN(0x253bcb81, 0xc2352fe4), TOBN(0xa4eac8b0, 0x4474b571)}}, + {{TOBN(0xc1b97512, 0xc1ad8cf8), TOBN(0x193b4e9e, 0x99e0b697), + TOBN(0x939d2716, 0x01e85df0), TOBN(0x4fb265b3, 0xcd44eafd)}, + {TOBN(0x321e7dcd, 0xe51e1ae2), TOBN(0x8e3a8ca6, 0xe3d8b096), + TOBN(0x8de46cb0, 0x52604998), TOBN(0x91099ad8, 0x39072aa7)}}, + {{TOBN(0x2617f91c, 0x93aa96b8), TOBN(0x0fc8716b, 0x7fca2e13), + TOBN(0xa7106f5e, 0x95328723), TOBN(0xd1c9c40b, 0x262e6522)}, + {TOBN(0xb9bafe86, 0x42b7c094), TOBN(0x1873439d, 0x1543c021), + TOBN(0xe1baa5de, 0x5cbefd5d), TOBN(0xa363fc5e, 0x521e8aff)}}, + {{TOBN(0xefe6320d, 0xf862eaac), TOBN(0x14419c63, 0x22c647dc), + TOBN(0x0e06707c, 0x4e46d428), TOBN(0xcb6c834f, 0x4a178f8f)}, + {TOBN(0x0f993a45, 0xd30f917c), TOBN(0xd4c4b049, 0x9879afee), + TOBN(0xb6142a1e, 0x70500063), TOBN(0x7c9b41c3, 0xa5d9d605)}}, + {{TOBN(0xbc00fc2f, 0x2f8ba2c7), TOBN(0x0966eb2f, 0x7c67aa28), + TOBN(0x13f7b516, 0x5a786972), TOBN(0x3bfb7557, 0x8a2fbba0)}, + {TOBN(0x131c4f23, 0x5a2b9620), TOBN(0xbff3ed27, 0x6faf46be), + TOBN(0x9b4473d1, 0x7e172323), TOBN(0x421e8878, 0x339f6246)}}, + {{TOBN(0x0fa8587a, 0x25a41632), TOBN(0xc0814124, 0xa35b6c93), + TOBN(0x2b18a9f5, 0x59ebb8db), TOBN(0x264e3357, 0x76edb29c)}, + {TOBN(0xaf245ccd, 0xc87c51e2), TOBN(0x16b3015b, 0x501e6214), + TOBN(0xbb31c560, 0x0a3882ce), TOBN(0x6961bb94, 0xfec11e04)}}, + {{TOBN(0x3b825b8d, 0xeff7a3a0), TOBN(0xbec33738, 0xb1df7326), + TOBN(0x68ad747c, 0x99604a1f), TOBN(0xd154c934, 0x9a3bd499)}, + {TOBN(0xac33506f, 0x1cc7a906), TOBN(0x73bb5392, 0x6c560e8f), + TOBN(0x6428fcbe, 0x263e3944), TOBN(0xc11828d5, 0x1c387434)}}, + {{TOBN(0x3cd04be1, 0x3e4b12ff), TOBN(0xc3aad9f9, 0x2d88667c), + TOBN(0xc52ddcf8, 0x248120cf), TOBN(0x985a892e, 0x2a389532)}, + {TOBN(0xfbb4b21b, 0x3bb85fa0), TOBN(0xf95375e0, 0x8dfc6269), + TOBN(0xfb4fb06c, 0x7ee2acea), TOBN(0x6785426e, 0x309c4d1f)}}, + {{TOBN(0x659b17c8, 0xd8ceb147), TOBN(0x9b649eee, 0xb70a5554), + TOBN(0x6b7fa0b5, 0xac6bc634), TOBN(0xd99fe2c7, 0x1d6e732f)}, + {TOBN(0x30e6e762, 0x8d3abba2), TOBN(0x18fee6e7, 0xa797b799), + TOBN(0x5c9d360d, 0xc696464d), TOBN(0xe3baeb48, 0x27bfde12)}}, + {{TOBN(0x2bf5db47, 0xf23206d5), TOBN(0x2f6d3420, 0x1d260152), + TOBN(0x17b87653, 0x3f8ff89a), TOBN(0x5157c30c, 0x378fa458)}, + {TOBN(0x7517c5c5, 0x2d4fb936), TOBN(0xef22f7ac, 0xe6518cdc), + TOBN(0xdeb483e6, 0xbf847a64), TOBN(0xf5084558, 0x92e0fa89)}}}, + {{{TOBN(0xab9659d8, 0xdf7304d4), TOBN(0xb71bcf1b, 0xff210e8e), + TOBN(0xa9a2438b, 0xd73fbd60), TOBN(0x4595cd1f, 0x5d11b4de)}, + {TOBN(0x9c0d329a, 0x4835859d), TOBN(0x4a0f0d2d, 0x7dbb6e56), + TOBN(0xc6038e5e, 0xdf928a4e), TOBN(0xc9429621, 0x8f5ad154)}}, + {{TOBN(0x91213462, 0xf23f2d92), TOBN(0x6cab71bd, 0x60b94078), + TOBN(0x6bdd0a63, 0x176cde20), TOBN(0x54c9b20c, 0xee4d54bc)}, + {TOBN(0x3cd2d8aa, 0x9f2ac02f), TOBN(0x03f8e617, 0x206eedb0), + TOBN(0xc7f68e16, 0x93086434), TOBN(0x831469c5, 0x92dd3db9)}}, + {{TOBN(0x8521df24, 0x8f981354), TOBN(0x587e23ec, 0x3588a259), + TOBN(0xcbedf281, 0xd7a0992c), TOBN(0x06930a55, 0x38961407)}, + {TOBN(0x09320deb, 0xbe5bbe21), TOBN(0xa7ffa5b5, 0x2491817f), + TOBN(0xe6c8b4d9, 0x09065160), TOBN(0xac4f3992, 0xfff6d2a9)}}, + {{TOBN(0x7aa7a158, 0x3ae9c1bd), TOBN(0xe0af6d98, 0xe37ce240), + TOBN(0xe54342d9, 0x28ab38b4), TOBN(0xe8b75007, 0x0a1c98ca)}, + {TOBN(0xefce86af, 0xe02358f2), TOBN(0x31b8b856, 0xea921228), + TOBN(0x052a1912, 0x0a1c67fc), TOBN(0xb4069ea4, 0xe3aead59)}}, + {{TOBN(0x3232d6e2, 0x7fa03cb3), TOBN(0xdb938e5b, 0x0fdd7d88), + TOBN(0x04c1d2cd, 0x2ccbfc5d), TOBN(0xd2f45c12, 0xaf3a580f)}, + {TOBN(0x592620b5, 0x7883e614), TOBN(0x5fd27e68, 0xbe7c5f26), + TOBN(0x139e45a9, 0x1567e1e3), TOBN(0x2cc71d2d, 0x44d8aaaf)}}, + {{TOBN(0x4a9090cd, 0xe36d0757), TOBN(0xf722d7b1, 0xd9a29382), + TOBN(0xfb7fb04c, 0x04b48ddf), TOBN(0x628ad2a7, 0xebe16f43)}, + {TOBN(0xcd3fbfb5, 0x20226040), TOBN(0x6c34ecb1, 0x5104b6c4), + TOBN(0x30c0754e, 0xc903c188), TOBN(0xec336b08, 0x2d23cab0)}}, + {{TOBN(0x473d62a2, 0x1e206ee5), TOBN(0xf1e27480, 0x8c49a633), + TOBN(0x87ab956c, 0xe9f6b2c3), TOBN(0x61830b48, 0x62b606ea)}, + {TOBN(0x67cd6846, 0xe78e815f), TOBN(0xfe40139f, 0x4c02082a), + TOBN(0x52bbbfcb, 0x952ec365), TOBN(0x74c11642, 0x6b9836ab)}}, + {{TOBN(0x9f51439e, 0x558df019), TOBN(0x230da4ba, 0xac712b27), + TOBN(0x518919e3, 0x55185a24), TOBN(0x4dcefcdd, 0x84b78f50)}, + {TOBN(0xa7d90fb2, 0xa47d4c5a), TOBN(0x55ac9abf, 0xb30e009e), + TOBN(0xfd2fc359, 0x74eed273), TOBN(0xb72d824c, 0xdbea8faf)}}, + {{TOBN(0xce721a74, 0x4513e2ca), TOBN(0x0b418612, 0x38240b2c), + TOBN(0x05199968, 0xd5baa450), TOBN(0xeb1757ed, 0x2b0e8c25)}, + {TOBN(0x6ebc3e28, 0x3dfac6d5), TOBN(0xb2431e2e, 0x48a237f5), + TOBN(0x2acb5e23, 0x52f61499), TOBN(0x5558a2a7, 0xe06c936b)}}, + {{TOBN(0xd213f923, 0xcbb13d1b), TOBN(0x98799f42, 0x5bfb9bfe), + TOBN(0x1ae8ddc9, 0x701144a9), TOBN(0x0b8b3bb6, 0x4c5595ee)}, + {TOBN(0x0ea9ef2e, 0x3ecebb21), TOBN(0x17cb6c4b, 0x3671f9a7), + TOBN(0x47ef464f, 0x726f1d1f), TOBN(0x171b9484, 0x6943a276)}}, + {{TOBN(0x51a4ae2d, 0x7ef0329c), TOBN(0x08509222, 0x91c4402a), + TOBN(0x64a61d35, 0xafd45bbc), TOBN(0x38f096fe, 0x3035a851)}, + {TOBN(0xc7468b74, 0xa1dec027), TOBN(0xe8cf10e7, 0x4fc7dcba), + TOBN(0xea35ff40, 0xf4a06353), TOBN(0x0b4c0dfa, 0x8b77dd66)}}, + {{TOBN(0x779b8552, 0xde7e5c19), TOBN(0xfab28609, 0xc1c0256c), + TOBN(0x64f58eee, 0xabd4743d), TOBN(0x4e8ef838, 0x7b6cc93b)}, + {TOBN(0xee650d26, 0x4cb1bf3d), TOBN(0x4c1f9d09, 0x73dedf61), + TOBN(0xaef7c9d7, 0xbfb70ced), TOBN(0x1ec0507e, 0x1641de1e)}}, + {{TOBN(0xcd7e5cc7, 0xcde45079), TOBN(0xde173c9a, 0x516ac9e4), + TOBN(0x517a8494, 0xc170315c), TOBN(0x438fd905, 0x91d8e8fb)}, + {TOBN(0x5145c506, 0xc7d9630b), TOBN(0x6457a87b, 0xf47d4d75), + TOBN(0xd31646bf, 0x0d9a80e8), TOBN(0x453add2b, 0xcef3aabe)}}, + {{TOBN(0xc9941109, 0xa607419d), TOBN(0xfaa71e62, 0xbb6bca80), + TOBN(0x34158c13, 0x07c431f3), TOBN(0x594abebc, 0x992bc47a)}, + {TOBN(0x6dfea691, 0xeb78399f), TOBN(0x48aafb35, 0x3f42cba4), + TOBN(0xedcd65af, 0x077c04f0), TOBN(0x1a29a366, 0xe884491a)}}, + {{TOBN(0x023a40e5, 0x1c21f2bf), TOBN(0xf99a513c, 0xa5057aee), + TOBN(0xa3fe7e25, 0xbcab072e), TOBN(0x8568d2e1, 0x40e32bcf)}, + {TOBN(0x904594eb, 0xd3f69d9f), TOBN(0x181a9733, 0x07affab1), + TOBN(0xe4d68d76, 0xb6e330f4), TOBN(0x87a6dafb, 0xc75a7fc1)}}, + {{TOBN(0x549db2b5, 0xef7d9289), TOBN(0x2480d4a8, 0x197f015a), + TOBN(0x61d5590b, 0xc40493b6), TOBN(0x3a55b52e, 0x6f780331)}, + {TOBN(0x40eb8115, 0x309eadb0), TOBN(0xdea7de5a, 0x92e5c625), + TOBN(0x64d631f0, 0xcc6a3d5a), TOBN(0x9d5e9d7c, 0x93e8dd61)}}, + {{TOBN(0xf297bef5, 0x206d3ffc), TOBN(0x23d5e033, 0x7d808bd4), + TOBN(0x4a4f6912, 0xd24cf5ba), TOBN(0xe4d8163b, 0x09cdaa8a)}, + {TOBN(0x0e0de9ef, 0xd3082e8e), TOBN(0x4fe1246c, 0x0192f360), + TOBN(0x1f900150, 0x4b8eee0a), TOBN(0x5219da81, 0xf1da391b)}}, + {{TOBN(0x7bf6a5c1, 0xf7ea25aa), TOBN(0xd165e6bf, 0xfbb07d5f), + TOBN(0xe3539361, 0x89e78671), TOBN(0xa3fcac89, 0x2bac4219)}, + {TOBN(0xdfab6fd4, 0xf0baa8ab), TOBN(0x5a4adac1, 0xe2c1c2e5), + TOBN(0x6cd75e31, 0x40d85849), TOBN(0xce263fea, 0x19b39181)}}, + {{TOBN(0xcb6803d3, 0x07032c72), TOBN(0x7f40d5ce, 0x790968c8), + TOBN(0xa6de86bd, 0xdce978f0), TOBN(0x25547c4f, 0x368f751c)}, + {TOBN(0xb1e685fd, 0x65fb2a9e), TOBN(0xce69336f, 0x1eb9179c), + TOBN(0xb15d1c27, 0x12504442), TOBN(0xb7df465c, 0xb911a06b)}}, + {{TOBN(0xb8d804a3, 0x315980cd), TOBN(0x693bc492, 0xfa3bebf7), + TOBN(0x3578aeee, 0x2253c504), TOBN(0x158de498, 0xcd2474a2)}, + {TOBN(0x1331f5c7, 0xcfda8368), TOBN(0xd2d7bbb3, 0x78d7177e), + TOBN(0xdf61133a, 0xf3c1e46e), TOBN(0x5836ce7d, 0xd30e7be8)}}, + {{TOBN(0x83084f19, 0x94f834cb), TOBN(0xd35653d4, 0x429ed782), + TOBN(0xa542f16f, 0x59e58243), TOBN(0xc2b52f65, 0x0470a22d)}, + {TOBN(0xe3b6221b, 0x18f23d96), TOBN(0xcb05abac, 0x3f5252b4), + TOBN(0xca00938b, 0x87d61402), TOBN(0x2f186cdd, 0x411933e4)}}, + {{TOBN(0xe042ece5, 0x9a29a5c5), TOBN(0xb19b3c07, 0x3b6c8402), + TOBN(0xc97667c7, 0x19d92684), TOBN(0xb5624622, 0xebc66372)}, + {TOBN(0x0cb96e65, 0x3c04fa02), TOBN(0x83a7176c, 0x8eaa39aa), + TOBN(0x2033561d, 0xeaa1633f), TOBN(0x45a9d086, 0x4533df73)}}, + {{TOBN(0xe0542c1d, 0x3dc090bc), TOBN(0x82c996ef, 0xaa59c167), + TOBN(0xe3f735e8, 0x0ee7fc4d), TOBN(0x7b179393, 0x7c35db79)}, + {TOBN(0xb6419e25, 0xf8c5dbfd), TOBN(0x4d9d7a1e, 0x1f327b04), + TOBN(0x979f6f9b, 0x298dfca8), TOBN(0xc7c5dff1, 0x8de9366a)}}, + {{TOBN(0x1b7a588d, 0x04c82bdd), TOBN(0x68005534, 0xf8319dfd), + TOBN(0xde8a55b5, 0xd8eb9580), TOBN(0x5ea886da, 0x8d5bca81)}, + {TOBN(0xe8530a01, 0x252a0b4d), TOBN(0x1bffb4fe, 0x35eaa0a1), + TOBN(0x2ad828b1, 0xd8e99563), TOBN(0x7de96ef5, 0x95f9cd87)}}, + {{TOBN(0x4abb2d0c, 0xd77d970c), TOBN(0x03cfb933, 0xd33ef9cb), + TOBN(0xb0547c01, 0x8b211fe9), TOBN(0x2fe64809, 0xa56ed1c6)}, + {TOBN(0xcb7d5624, 0xc2ac98cc), TOBN(0x2a1372c0, 0x1a393e33), + TOBN(0xc8d1ec1c, 0x29660521), TOBN(0xf3d31b04, 0xb37ac3e9)}}, + {{TOBN(0xa29ae9df, 0x5ece6e7c), TOBN(0x0603ac8f, 0x0facfb55), + TOBN(0xcfe85b7a, 0xdda233a5), TOBN(0xe618919f, 0xbd75f0b8)}, + {TOBN(0xf555a3d2, 0x99bf1603), TOBN(0x1f43afc9, 0xf184255a), + TOBN(0xdcdaf341, 0x319a3e02), TOBN(0xd3b117ef, 0x03903a39)}}, + {{TOBN(0xe095da13, 0x65d1d131), TOBN(0x86f16367, 0xc37ad03e), + TOBN(0x5f37389e, 0x462cd8dd), TOBN(0xc103fa04, 0xd67a60e6)}, + {TOBN(0x57c34344, 0xf4b478f0), TOBN(0xce91edd8, 0xe117c98d), + TOBN(0x001777b0, 0x231fc12e), TOBN(0x11ae47f2, 0xb207bccb)}}, + {{TOBN(0xd983cf8d, 0x20f8a242), TOBN(0x7aff5b1d, 0xf22e1ad8), + TOBN(0x68fd11d0, 0x7fc4feb3), TOBN(0x5d53ae90, 0xb0f1c3e1)}, + {TOBN(0x50fb7905, 0xec041803), TOBN(0x85e3c977, 0x14404888), + TOBN(0x0e67faed, 0xac628d8f), TOBN(0x2e865150, 0x6668532c)}}, + {{TOBN(0x15acaaa4, 0x6a67a6b0), TOBN(0xf4cdee25, 0xb25cec41), + TOBN(0x49ee565a, 0xe4c6701e), TOBN(0x2a04ca66, 0xfc7d63d8)}, + {TOBN(0xeb105018, 0xef0543fb), TOBN(0xf709a4f5, 0xd1b0d81d), + TOBN(0x5b906ee6, 0x2915d333), TOBN(0xf4a87412, 0x96f1f0ab)}}, + {{TOBN(0xb6b82fa7, 0x4d82f4c2), TOBN(0x90725a60, 0x6804efb3), + TOBN(0xbc82ec46, 0xadc3425e), TOBN(0xb7b80581, 0x2787843e)}, + {TOBN(0xdf46d91c, 0xdd1fc74c), TOBN(0xdc1c62cb, 0xe783a6c4), + TOBN(0x59d1b9f3, 0x1a04cbba), TOBN(0xd87f6f72, 0x95e40764)}}, + {{TOBN(0x02b4cfc1, 0x317f4a76), TOBN(0x8d2703eb, 0x91036bce), + TOBN(0x98206cc6, 0xa5e72a56), TOBN(0x57be9ed1, 0xcf53fb0f)}, + {TOBN(0x09374571, 0xef0b17ac), TOBN(0x74b2655e, 0xd9181b38), + TOBN(0xc8f80ea8, 0x89935d0e), TOBN(0xc0d9e942, 0x91529936)}}, + {{TOBN(0x19686041, 0x1e84e0e5), TOBN(0xa5db84d3, 0xaea34c93), + TOBN(0xf9d5bb19, 0x7073a732), TOBN(0xb8d2fe56, 0x6bcfd7c0)}, + {TOBN(0x45775f36, 0xf3eb82fa), TOBN(0x8cb20ccc, 0xfdff8b58), + TOBN(0x1659b65f, 0x8374c110), TOBN(0xb8b4a422, 0x330c789a)}}, + {{TOBN(0x75e3c3ea, 0x6fe8208b), TOBN(0xbd74b9e4, 0x286e78fe), + TOBN(0x0be2e81b, 0xd7d93a1a), TOBN(0x7ed06e27, 0xdd0a5aae)}, + {TOBN(0x721f5a58, 0x6be8b800), TOBN(0x428299d1, 0xd846db28), + TOBN(0x95cb8e6b, 0x5be88ed3), TOBN(0xc3186b23, 0x1c034e11)}}, + {{TOBN(0xa6312c9e, 0x8977d99b), TOBN(0xbe944331, 0x83f531e7), + TOBN(0x8232c0c2, 0x18d3b1d4), TOBN(0x617aae8b, 0xe1247b73)}, + {TOBN(0x40153fc4, 0x282aec3b), TOBN(0xc6063d2f, 0xf7b8f823), + TOBN(0x68f10e58, 0x3304f94c), TOBN(0x31efae74, 0xee676346)}}, + {{TOBN(0xbadb6c6d, 0x40a9b97c), TOBN(0x14702c63, 0x4f666256), + TOBN(0xdeb954f1, 0x5184b2e3), TOBN(0x5184a526, 0x94b6ca40)}, + {TOBN(0xfff05337, 0x003c32ea), TOBN(0x5aa374dd, 0x205974c7), + TOBN(0x9a763854, 0x4b0dd71a), TOBN(0x459cd27f, 0xdeb947ec)}}, + {{TOBN(0xa6e28161, 0x459c2b92), TOBN(0x2f020fa8, 0x75ee8ef5), + TOBN(0xb132ec2d, 0x30b06310), TOBN(0xc3e15899, 0xbc6a4530)}, + {TOBN(0xdc5f53fe, 0xaa3f451a), TOBN(0x3a3c7f23, 0xc2d9acac), + TOBN(0x2ec2f892, 0x6b27e58b), TOBN(0x68466ee7, 0xd742799f)}}, + {{TOBN(0x98324dd4, 0x1fa26613), TOBN(0xa2dc6dab, 0xbdc29d63), + TOBN(0xf9675faa, 0xd712d657), TOBN(0x813994be, 0x21fd8d15)}, + {TOBN(0x5ccbb722, 0xfd4f7553), TOBN(0x5135ff8b, 0xf3a36b20), + TOBN(0x44be28af, 0x69559df5), TOBN(0x40b65bed, 0x9d41bf30)}}, + {{TOBN(0xd98bf2a4, 0x3734e520), TOBN(0x5e3abbe3, 0x209bdcba), + TOBN(0x77c76553, 0xbc945b35), TOBN(0x5331c093, 0xc6ef14aa)}, + {TOBN(0x518ffe29, 0x76b60c80), TOBN(0x2285593b, 0x7ace16f8), + TOBN(0xab1f64cc, 0xbe2b9784), TOBN(0xe8f2c0d9, 0xab2421b6)}}, + {{TOBN(0x617d7174, 0xc1df065c), TOBN(0xafeeb5ab, 0x5f6578fa), + TOBN(0x16ff1329, 0x263b54a8), TOBN(0x45c55808, 0xc990dce3)}, + {TOBN(0x42eab6c0, 0xecc8c177), TOBN(0x799ea9b5, 0x5982ecaa), + TOBN(0xf65da244, 0xb607ef8e), TOBN(0x8ab226ce, 0x32a3fc2c)}}, + {{TOBN(0x745741e5, 0x7ea973dc), TOBN(0x5c00ca70, 0x20888f2e), + TOBN(0x7cdce3cf, 0x45fd9cf1), TOBN(0x8a741ef1, 0x5507f872)}, + {TOBN(0x47c51c2f, 0x196b4cec), TOBN(0x70d08e43, 0xc97ea618), + TOBN(0x930da15c, 0x15b18a2b), TOBN(0x33b6c678, 0x2f610514)}}, + {{TOBN(0xc662e4f8, 0x07ac9794), TOBN(0x1eccf050, 0xba06cb79), + TOBN(0x1ff08623, 0xe7d954e5), TOBN(0x6ef2c5fb, 0x24cf71c3)}, + {TOBN(0xb2c063d2, 0x67978453), TOBN(0xa0cf3796, 0x1d654af8), + TOBN(0x7cb242ea, 0x7ebdaa37), TOBN(0x206e0b10, 0xb86747e0)}}, + {{TOBN(0x481dae5f, 0xd5ecfefc), TOBN(0x07084fd8, 0xc2bff8fc), + TOBN(0x8040a01a, 0xea324596), TOBN(0x4c646980, 0xd4de4036)}, + {TOBN(0x9eb8ab4e, 0xd65abfc3), TOBN(0xe01cb91f, 0x13541ec7), + TOBN(0x8f029adb, 0xfd695012), TOBN(0x9ae28483, 0x3c7569ec)}}, + {{TOBN(0xa5614c9e, 0xa66d80a1), TOBN(0x680a3e44, 0x75f5f911), + TOBN(0x0c07b14d, 0xceba4fc1), TOBN(0x891c285b, 0xa13071c1)}, + {TOBN(0xcac67ceb, 0x799ece3c), TOBN(0x29b910a9, 0x41e07e27), + TOBN(0x66bdb409, 0xf2e43123), TOBN(0x06f8b137, 0x7ac9ecbe)}}, + {{TOBN(0x5981fafd, 0x38547090), TOBN(0x19ab8b9f, 0x85e3415d), + TOBN(0xfc28c194, 0xc7e31b27), TOBN(0x843be0aa, 0x6fbcbb42)}, + {TOBN(0xf3b1ed43, 0xa6db836c), TOBN(0x2a1330e4, 0x01a45c05), + TOBN(0x4f19f3c5, 0x95c1a377), TOBN(0xa85f39d0, 0x44b5ee33)}}, + {{TOBN(0x3da18e6d, 0x4ae52834), TOBN(0x5a403b39, 0x7423dcb0), + TOBN(0xbb555e0a, 0xf2374aef), TOBN(0x2ad599c4, 0x1e8ca111)}, + {TOBN(0x1b3a2fb9, 0x014b3bf8), TOBN(0x73092684, 0xf66d5007), + TOBN(0x079f1426, 0xc4340102), TOBN(0x1827cf81, 0x8fddf4de)}}, + {{TOBN(0xc83605f6, 0xf10ff927), TOBN(0xd3871451, 0x23739fc6), + TOBN(0x6d163450, 0xcac1c2cc), TOBN(0x6b521296, 0xa2ec1ac5)}, + {TOBN(0x0606c4f9, 0x6e3cb4a5), TOBN(0xe47d3f41, 0x778abff7), + TOBN(0x425a8d5e, 0xbe8e3a45), TOBN(0x53ea9e97, 0xa6102160)}}, + {{TOBN(0x477a106e, 0x39cbb688), TOBN(0x532401d2, 0xf3386d32), + TOBN(0x8e564f64, 0xb1b9b421), TOBN(0xca9b8388, 0x81dad33f)}, + {TOBN(0xb1422b4e, 0x2093913e), TOBN(0x533d2f92, 0x69bc8112), + TOBN(0x3fa017be, 0xebe7b2c7), TOBN(0xb2767c4a, 0xcaf197c6)}}, + {{TOBN(0xc925ff87, 0xaedbae9f), TOBN(0x7daf0eb9, 0x36880a54), + TOBN(0x9284ddf5, 0x9c4d0e71), TOBN(0x1581cf93, 0x316f8cf5)}, + {TOBN(0x3eeca887, 0x3ac1f452), TOBN(0xb417fce9, 0xfb6aeffe), + TOBN(0xa5918046, 0xeefb8dc3), TOBN(0x73d318ac, 0x02209400)}}, + {{TOBN(0xe800400f, 0x728693e5), TOBN(0xe87d814b, 0x339927ed), + TOBN(0x93e94d3b, 0x57ea9910), TOBN(0xff8a35b6, 0x2245fb69)}, + {TOBN(0x043853d7, 0x7f200d34), TOBN(0x470f1e68, 0x0f653ce1), + TOBN(0x81ac05bd, 0x59a06379), TOBN(0xa14052c2, 0x03930c29)}}, + {{TOBN(0x6b72fab5, 0x26bc2797), TOBN(0x13670d16, 0x99f16771), + TOBN(0x00170052, 0x1e3e48d1), TOBN(0x978fe401, 0xb7adf678)}, + {TOBN(0x55ecfb92, 0xd41c5dd4), TOBN(0x5ff8e247, 0xc7b27da5), + TOBN(0xe7518272, 0x013fb606), TOBN(0x5768d7e5, 0x2f547a3c)}}, + {{TOBN(0xbb24eaa3, 0x60017a5f), TOBN(0x6b18e6e4, 0x9c64ce9b), + TOBN(0xc225c655, 0x103dde07), TOBN(0xfc3672ae, 0x7592f7ea)}, + {TOBN(0x9606ad77, 0xd06283a1), TOBN(0x542fc650, 0xe4d59d99), + TOBN(0xabb57c49, 0x2a40e7c2), TOBN(0xac948f13, 0xa8db9f55)}}, + {{TOBN(0x6d4c9682, 0xb04465c3), TOBN(0xe3d062fa, 0x6468bd15), + TOBN(0xa51729ac, 0x5f318d7e), TOBN(0x1fc87df6, 0x9eb6fc95)}, + {TOBN(0x63d146a8, 0x0591f652), TOBN(0xa861b8f7, 0x589621aa), + TOBN(0x59f5f15a, 0xce31348c), TOBN(0x8f663391, 0x440da6da)}}, + {{TOBN(0xcfa778ac, 0xb591ffa3), TOBN(0x027ca9c5, 0x4cdfebce), + TOBN(0xbe8e05a5, 0x444ea6b3), TOBN(0x8aab4e69, 0xa78d8254)}, + {TOBN(0x2437f04f, 0xb474d6b8), TOBN(0x6597ffd4, 0x045b3855), + TOBN(0xbb0aea4e, 0xca47ecaa), TOBN(0x568aae83, 0x85c7ebfc)}}, + {{TOBN(0x0e966e64, 0xc73b2383), TOBN(0x49eb3447, 0xd17d8762), + TOBN(0xde107821, 0x8da05dab), TOBN(0x443d8baa, 0x016b7236)}, + {TOBN(0x163b63a5, 0xea7610d6), TOBN(0xe47e4185, 0xce1ca979), + TOBN(0xae648b65, 0x80baa132), TOBN(0xebf53de2, 0x0e0d5b64)}}, + {{TOBN(0x8d3bfcb4, 0xd3c8c1ca), TOBN(0x0d914ef3, 0x5d04b309), + TOBN(0x55ef6415, 0x3de7d395), TOBN(0xbde1666f, 0x26b850e8)}, + {TOBN(0xdbe1ca6e, 0xd449ab19), TOBN(0x8902b322, 0xe89a2672), + TOBN(0xb1674b7e, 0xdacb7a53), TOBN(0x8e9faf6e, 0xf52523ff)}}, + {{TOBN(0x6ba535da, 0x9a85788b), TOBN(0xd21f03ae, 0xbd0626d4), + TOBN(0x099f8c47, 0xe873dc64), TOBN(0xcda8564d, 0x018ec97e)}, + {TOBN(0x3e8d7a5c, 0xde92c68c), TOBN(0x78e035a1, 0x73323cc4), + TOBN(0x3ef26275, 0xf880ff7c), TOBN(0xa4ee3dff, 0x273eedaa)}}, + {{TOBN(0x58823507, 0xaf4e18f8), TOBN(0x967ec9b5, 0x0672f328), + TOBN(0x9ded19d9, 0x559d3186), TOBN(0x5e2ab3de, 0x6cdce39c)}, + {TOBN(0xabad6e4d, 0x11c226df), TOBN(0xf9783f43, 0x87723014), + TOBN(0x9a49a0cf, 0x1a885719), TOBN(0xfc0c1a5a, 0x90da9dbf)}}, + {{TOBN(0x8bbaec49, 0x571d92ac), TOBN(0x569e85fe, 0x4692517f), + TOBN(0x8333b014, 0xa14ea4af), TOBN(0x32f2a62f, 0x12e5c5ad)}, + {TOBN(0x98c2ce3a, 0x06d89b85), TOBN(0xb90741aa, 0x2ff77a08), + TOBN(0x2530defc, 0x01f795a2), TOBN(0xd6e5ba0b, 0x84b3c199)}}, + {{TOBN(0x7d8e8451, 0x12e4c936), TOBN(0xae419f7d, 0xbd0be17b), + TOBN(0xa583fc8c, 0x22262bc9), TOBN(0x6b842ac7, 0x91bfe2bd)}, + {TOBN(0x33cef4e9, 0x440d6827), TOBN(0x5f69f4de, 0xef81fb14), + TOBN(0xf16cf6f6, 0x234fbb92), TOBN(0x76ae3fc3, 0xd9e7e158)}}, + {{TOBN(0x4e89f6c2, 0xe9740b33), TOBN(0x677bc85d, 0x4962d6a1), + TOBN(0x6c6d8a7f, 0x68d10d15), TOBN(0x5f9a7224, 0x0257b1cd)}, + {TOBN(0x7096b916, 0x4ad85961), TOBN(0x5f8c47f7, 0xe657ab4a), + TOBN(0xde57d7d0, 0xf7461d7e), TOBN(0x7eb6094d, 0x80ce5ee2)}}, + {{TOBN(0x0b1e1dfd, 0x34190547), TOBN(0x8a394f43, 0xf05dd150), + TOBN(0x0a9eb24d, 0x97df44e6), TOBN(0x78ca06bf, 0x87675719)}, + {TOBN(0x6f0b3462, 0x6ffeec22), TOBN(0x9d91bcea, 0x36cdd8fb), + TOBN(0xac83363c, 0xa105be47), TOBN(0x81ba76c1, 0x069710e3)}}, + {{TOBN(0x3d1b24cb, 0x28c682c6), TOBN(0x27f25228, 0x8612575b), + TOBN(0xb587c779, 0xe8e66e98), TOBN(0x7b0c03e9, 0x405eb1fe)}, + {TOBN(0xfdf0d030, 0x15b548e7), TOBN(0xa8be76e0, 0x38b36af7), + TOBN(0x4cdab04a, 0x4f310c40), TOBN(0x6287223e, 0xf47ecaec)}}, + {{TOBN(0x678e6055, 0x8b399320), TOBN(0x61fe3fa6, 0xc01e4646), + TOBN(0xc482866b, 0x03261a5e), TOBN(0xdfcf45b8, 0x5c2f244a)}, + {TOBN(0x8fab9a51, 0x2f684b43), TOBN(0xf796c654, 0xc7220a66), + TOBN(0x1d90707e, 0xf5afa58f), TOBN(0x2c421d97, 0x4fdbe0de)}}, + {{TOBN(0xc4f4cda3, 0xaf2ebc2f), TOBN(0xa0af843d, 0xcb4efe24), + TOBN(0x53b857c1, 0x9ccd10b1), TOBN(0xddc9d1eb, 0x914d3e04)}, + {TOBN(0x7bdec8bb, 0x62771deb), TOBN(0x829277aa, 0x91c5aa81), + TOBN(0x7af18dd6, 0x832391ae), TOBN(0x1740f316, 0xc71a84ca)}}}, + {{{TOBN(0x8928e99a, 0xeeaf8c49), TOBN(0xee7aa73d, 0x6e24d728), + TOBN(0x4c5007c2, 0xe72b156c), TOBN(0x5fcf57c5, 0xed408a1d)}, + {TOBN(0x9f719e39, 0xb6057604), TOBN(0x7d343c01, 0xc2868bbf), + TOBN(0x2cca254b, 0x7e103e2d), TOBN(0xe6eb38a9, 0xf131bea2)}}, + {{TOBN(0xb33e624f, 0x8be762b4), TOBN(0x2a9ee4d1, 0x058e3413), + TOBN(0x968e6369, 0x67d805fa), TOBN(0x9848949b, 0x7db8bfd7)}, + {TOBN(0x5308d7e5, 0xd23a8417), TOBN(0x892f3b1d, 0xf3e29da5), + TOBN(0xc95c139e, 0x3dee471f), TOBN(0x8631594d, 0xd757e089)}}, + {{TOBN(0xe0c82a3c, 0xde918dcc), TOBN(0x2e7b5994, 0x26fdcf4b), + TOBN(0x82c50249, 0x32cb1b2d), TOBN(0xea613a9d, 0x7657ae07)}, + {TOBN(0xc2eb5f6c, 0xf1fdc9f7), TOBN(0xb6eae8b8, 0x879fe682), + TOBN(0x253dfee0, 0x591cbc7f), TOBN(0x000da713, 0x3e1290e6)}}, + {{TOBN(0x1083e2ea, 0x1f095615), TOBN(0x0a28ad77, 0x14e68c33), + TOBN(0x6bfc0252, 0x3d8818be), TOBN(0xb585113a, 0xf35850cd)}, + {TOBN(0x7d935f0b, 0x30df8aa1), TOBN(0xaddda07c, 0x4ab7e3ac), + TOBN(0x92c34299, 0x552f00cb), TOBN(0xc33ed1de, 0x2909df6c)}}, + {{TOBN(0x22c2195d, 0x80e87766), TOBN(0x9e99e6d8, 0x9ddf4ac0), + TOBN(0x09642e4e, 0x65e74934), TOBN(0x2610ffa2, 0xff1ff241)}, + {TOBN(0x4d1d47d4, 0x751c8159), TOBN(0x697b4985, 0xaf3a9363), + TOBN(0x0318ca46, 0x87477c33), TOBN(0xa90cb565, 0x9441eff3)}}, + {{TOBN(0x58bb3848, 0x36f024cb), TOBN(0x85be1f77, 0x36016168), + TOBN(0x6c59587c, 0xdc7e07f1), TOBN(0x191be071, 0xaf1d8f02)}, + {TOBN(0xbf169fa5, 0xcca5e55c), TOBN(0x3864ba3c, 0xf7d04eac), + TOBN(0x915e367f, 0x8d7d05db), TOBN(0xb48a876d, 0xa6549e5d)}}, + {{TOBN(0xef89c656, 0x580e40a2), TOBN(0xf194ed8c, 0x728068bc), + TOBN(0x74528045, 0xa47990c9), TOBN(0xf53fc7d7, 0x5e1a4649)}, + {TOBN(0xbec5ae9b, 0x78593e7d), TOBN(0x2cac4ee3, 0x41db65d7), + TOBN(0xa8c1eb24, 0x04a3d39b), TOBN(0x53b7d634, 0x03f8f3ef)}}, + {{TOBN(0x2dc40d48, 0x3e07113c), TOBN(0x6e4a5d39, 0x7d8b63ae), + TOBN(0x5582a94b, 0x79684c2b), TOBN(0x932b33d4, 0x622da26c)}, + {TOBN(0xf534f651, 0x0dbbf08d), TOBN(0x211d07c9, 0x64c23a52), + TOBN(0x0eeece0f, 0xee5bdc9b), TOBN(0xdf178168, 0xf7015558)}}, + {{TOBN(0xd4294635, 0x0a712229), TOBN(0x93cbe448, 0x09273f8c), + TOBN(0x00b095ef, 0x8f13bc83), TOBN(0xbb741972, 0x8798978c)}, + {TOBN(0x9d7309a2, 0x56dbe6e7), TOBN(0xe578ec56, 0x5a5d39ec), + TOBN(0x3961151b, 0x851f9a31), TOBN(0x2da7715d, 0xe5709eb4)}}, + {{TOBN(0x867f3017, 0x53dfabf0), TOBN(0x728d2078, 0xb8e39259), + TOBN(0x5c75a0cd, 0x815d9958), TOBN(0xf84867a6, 0x16603be1)}, + {TOBN(0xc865b13d, 0x70e35b1c), TOBN(0x02414468, 0x19b03e2c), + TOBN(0xe46041da, 0xac1f3121), TOBN(0x7c9017ad, 0x6f028a7c)}}, + {{TOBN(0xabc96de9, 0x0a482873), TOBN(0x4265d6b1, 0xb77e54d4), + TOBN(0x68c38e79, 0xa57d88e7), TOBN(0xd461d766, 0x9ce82de3)}, + {TOBN(0x817a9ec5, 0x64a7e489), TOBN(0xcc5675cd, 0xa0def5f2), + TOBN(0x9a00e785, 0x985d494e), TOBN(0xc626833f, 0x1b03514a)}}, + {{TOBN(0xabe7905a, 0x83cdd60e), TOBN(0x50602fb5, 0xa1170184), + TOBN(0x689886cd, 0xb023642a), TOBN(0xd568d090, 0xa6e1fb00)}, + {TOBN(0x5b1922c7, 0x0259217f), TOBN(0x93831cd9, 0xc43141e4), + TOBN(0xdfca3587, 0x0c95f86e), TOBN(0xdec2057a, 0x568ae828)}}, + {{TOBN(0xc44ea599, 0xf98a759a), TOBN(0x55a0a7a2, 0xf7c23c1d), + TOBN(0xd5ffb6e6, 0x94c4f687), TOBN(0x3563cce2, 0x12848478)}, + {TOBN(0x812b3517, 0xe7b1fbe1), TOBN(0x8a7dc979, 0x4f7338e0), + TOBN(0x211ecee9, 0x52d048db), TOBN(0x2eea4056, 0xc86ea3b8)}}, + {{TOBN(0xd8cb68a7, 0xba772b34), TOBN(0xe16ed341, 0x5f4e2541), + TOBN(0x9b32f6a6, 0x0fec14db), TOBN(0xeee376f7, 0x391698be)}, + {TOBN(0xe9a7aa17, 0x83674c02), TOBN(0x65832f97, 0x5843022a), + TOBN(0x29f3a8da, 0x5ba4990f), TOBN(0x79a59c3a, 0xfb8e3216)}}, + {{TOBN(0x9cdc4d2e, 0xbd19bb16), TOBN(0xc6c7cfd0, 0xb3262d86), + TOBN(0xd4ce14d0, 0x969c0b47), TOBN(0x1fa352b7, 0x13e56128)}, + {TOBN(0x383d55b8, 0x973db6d3), TOBN(0x71836850, 0xe8e5b7bf), + TOBN(0xc7714596, 0xe6bb571f), TOBN(0x259df31f, 0x2d5b2dd2)}}, + {{TOBN(0x568f8925, 0x913cc16d), TOBN(0x18bc5b6d, 0xe1a26f5a), + TOBN(0xdfa413be, 0xf5f499ae), TOBN(0xf8835dec, 0xc3f0ae84)}, + {TOBN(0xb6e60bd8, 0x65a40ab0), TOBN(0x65596439, 0x194b377e), + TOBN(0xbcd85625, 0x92084a69), TOBN(0x5ce433b9, 0x4f23ede0)}}, + {{TOBN(0xe8e8f04f, 0x6ad65143), TOBN(0x11511827, 0xd6e14af6), + TOBN(0x3d390a10, 0x8295c0c7), TOBN(0x71e29ee4, 0x621eba16)}, + {TOBN(0xa588fc09, 0x63717b46), TOBN(0x02be02fe, 0xe06ad4a2), + TOBN(0x931558c6, 0x04c22b22), TOBN(0xbb4d4bd6, 0x12f3c849)}}, + {{TOBN(0x54a4f496, 0x20efd662), TOBN(0x92ba6d20, 0xc5952d14), + TOBN(0x2db8ea1e, 0xcc9784c2), TOBN(0x81cc10ca, 0x4b353644)}, + {TOBN(0x40b570ad, 0x4b4d7f6c), TOBN(0x5c9f1d96, 0x84a1dcd2), + TOBN(0x01379f81, 0x3147e797), TOBN(0xe5c6097b, 0x2bd499f5)}}, + {{TOBN(0x40dcafa6, 0x328e5e20), TOBN(0xf7b5244a, 0x54815550), + TOBN(0xb9a4f118, 0x47bfc978), TOBN(0x0ea0e79f, 0xd25825b1)}, + {TOBN(0xa50f96eb, 0x646c7ecf), TOBN(0xeb811493, 0x446dea9d), + TOBN(0x2af04677, 0xdfabcf69), TOBN(0xbe3a068f, 0xc713f6e8)}}, + {{TOBN(0x860d523d, 0x42e06189), TOBN(0xbf077941, 0x4e3aff13), + TOBN(0x0b616dca, 0xc1b20650), TOBN(0xe66dd6d1, 0x2131300d)}, + {TOBN(0xd4a0fd67, 0xff99abde), TOBN(0xc9903550, 0xc7aac50d), + TOBN(0x022ecf8b, 0x7c46b2d7), TOBN(0x3333b1e8, 0x3abf92af)}}, + {{TOBN(0x11cc113c, 0x6c491c14), TOBN(0x05976688, 0x80dd3f88), + TOBN(0xf5b4d9e7, 0x29d932ed), TOBN(0xe982aad8, 0xa2c38b6d)}, + {TOBN(0x6f925347, 0x8be0dcf0), TOBN(0x700080ae, 0x65ca53f2), + TOBN(0xd8131156, 0x443ca77f), TOBN(0xe92d6942, 0xec51f984)}}, + {{TOBN(0xd2a08af8, 0x85dfe9ae), TOBN(0xd825d9a5, 0x4d2a86ca), + TOBN(0x2c53988d, 0x39dff020), TOBN(0xf38b135a, 0x430cdc40)}, + {TOBN(0x0c918ae0, 0x62a7150b), TOBN(0xf31fd8de, 0x0c340e9b), + TOBN(0xafa0e7ae, 0x4dbbf02e), TOBN(0x5847fb2a, 0x5eba6239)}}, + {{TOBN(0x6b1647dc, 0xdccbac8b), TOBN(0xb642aa78, 0x06f485c8), + TOBN(0x873f3765, 0x7038ecdf), TOBN(0x2ce5e865, 0xfa49d3fe)}, + {TOBN(0xea223788, 0xc98c4400), TOBN(0x8104a8cd, 0xf1fa5279), + TOBN(0xbcf7cc7a, 0x06becfd7), TOBN(0x49424316, 0xc8f974ae)}}, + {{TOBN(0xc0da65e7, 0x84d6365d), TOBN(0xbcb7443f, 0x8f759fb8), + TOBN(0x35c712b1, 0x7ae81930), TOBN(0x80428dff, 0x4c6e08ab)}, + {TOBN(0xf19dafef, 0xa4faf843), TOBN(0xced8538d, 0xffa9855f), + TOBN(0x20ac409c, 0xbe3ac7ce), TOBN(0x358c1fb6, 0x882da71e)}}, + {{TOBN(0xafa9c0e5, 0xfd349961), TOBN(0x2b2cfa51, 0x8421c2fc), + TOBN(0x2a80db17, 0xf3a28d38), TOBN(0xa8aba539, 0x5d138e7e)}, + {TOBN(0x52012d1d, 0x6e96eb8d), TOBN(0x65d8dea0, 0xcbaf9622), + TOBN(0x57735447, 0xb264f56c), TOBN(0xbeebef3f, 0x1b6c8da2)}}, + {{TOBN(0xfc346d98, 0xce785254), TOBN(0xd50e8d72, 0xbb64a161), + TOBN(0xc03567c7, 0x49794add), TOBN(0x15a76065, 0x752c7ef6)}, + {TOBN(0x59f3a222, 0x961f23d6), TOBN(0x378e4438, 0x73ecc0b0), + TOBN(0xc74be434, 0x5a82fde4), TOBN(0xae509af2, 0xd8b9cf34)}}, + {{TOBN(0x4a61ee46, 0x577f44a1), TOBN(0xe09b748c, 0xb611deeb), + TOBN(0xc0481b2c, 0xf5f7b884), TOBN(0x35626678, 0x61acfa6b)}, + {TOBN(0x37f4c518, 0xbf8d21e6), TOBN(0x22d96531, 0xb205a76d), + TOBN(0x37fb85e1, 0x954073c0), TOBN(0xbceafe4f, 0x65b3a567)}}, + {{TOBN(0xefecdef7, 0xbe42a582), TOBN(0xd3fc6080, 0x65046be6), + TOBN(0xc9af13c8, 0x09e8dba9), TOBN(0x1e6c9847, 0x641491ff)}, + {TOBN(0x3b574925, 0xd30c31f7), TOBN(0xb7eb72ba, 0xac2a2122), + TOBN(0x776a0dac, 0xef0859e7), TOBN(0x06fec314, 0x21900942)}}, + {{TOBN(0x2464bc10, 0xf8c22049), TOBN(0x9bfbcce7, 0x875ebf69), + TOBN(0xd7a88e2a, 0x4336326b), TOBN(0xda05261c, 0x5bc2acfa)}, + {TOBN(0xc29f5bdc, 0xeba7efc8), TOBN(0x471237ca, 0x25dbbf2e), + TOBN(0xa72773f2, 0x2975f127), TOBN(0xdc744e8e, 0x04d0b326)}}, + {{TOBN(0x38a7ed16, 0xa56edb73), TOBN(0x64357e37, 0x2c007e70), + TOBN(0xa167d15b, 0x5080b400), TOBN(0x07b41164, 0x23de4be1)}, + {TOBN(0xb2d91e32, 0x74c89883), TOBN(0x3c162821, 0x2882e7ed), + TOBN(0xad6b36ba, 0x7503e482), TOBN(0x48434e8e, 0x0ea34331)}}, + {{TOBN(0x79f4f24f, 0x2c7ae0b9), TOBN(0xc46fbf81, 0x1939b44a), + TOBN(0x76fefae8, 0x56595eb1), TOBN(0x417b66ab, 0xcd5f29c7)}, + {TOBN(0x5f2332b2, 0xc5ceec20), TOBN(0xd69661ff, 0xe1a1cae2), + TOBN(0x5ede7e52, 0x9b0286e6), TOBN(0x9d062529, 0xe276b993)}}, + {{TOBN(0x324794b0, 0x7e50122b), TOBN(0xdd744f8b, 0x4af07ca5), + TOBN(0x30a12f08, 0xd63fc97b), TOBN(0x39650f1a, 0x76626d9d)}, + {TOBN(0x101b47f7, 0x1fa38477), TOBN(0x3d815f19, 0xd4dc124f), + TOBN(0x1569ae95, 0xb26eb58a), TOBN(0xc3cde188, 0x95fb1887)}}, + {{TOBN(0x54e9f37b, 0xf9539a48), TOBN(0xb0100e06, 0x7408c1a5), + TOBN(0x821d9811, 0xea580cbb), TOBN(0x8af52d35, 0x86e50c56)}, + {TOBN(0xdfbd9d47, 0xdbbf698b), TOBN(0x2961a1ea, 0x03dc1c73), + TOBN(0x203d38f8, 0xe76a5df8), TOBN(0x08a53a68, 0x6def707a)}}, + {{TOBN(0x26eefb48, 0x1bee45d4), TOBN(0xb3cee346, 0x3c688036), + TOBN(0x463c5315, 0xc42f2469), TOBN(0x19d84d2e, 0x81378162)}, + {TOBN(0x22d7c3c5, 0x1c4d349f), TOBN(0x65965844, 0x163d59c5), + TOBN(0xcf198c56, 0xb8abceae), TOBN(0x6fb1fb1b, 0x628559d5)}}, + {{TOBN(0x8bbffd06, 0x07bf8fe3), TOBN(0x46259c58, 0x3467734b), + TOBN(0xd8953cea, 0x35f7f0d3), TOBN(0x1f0bece2, 0xd65b0ff1)}, + {TOBN(0xf7d5b4b3, 0xf3c72914), TOBN(0x29e8ea95, 0x3cb53389), + TOBN(0x4a365626, 0x836b6d46), TOBN(0xe849f910, 0xea174fde)}}, + {{TOBN(0x7ec62fbb, 0xf4737f21), TOBN(0xd8dba5ab, 0x6209f5ac), + TOBN(0x24b5d7a9, 0xa5f9adbe), TOBN(0x707d28f7, 0xa61dc768)}, + {TOBN(0x7711460b, 0xcaa999ea), TOBN(0xba7b174d, 0x1c92e4cc), + TOBN(0x3c4bab66, 0x18d4bf2d), TOBN(0xb8f0c980, 0xeb8bd279)}}, + {{TOBN(0x024bea9a, 0x324b4737), TOBN(0xfba9e423, 0x32a83bca), + TOBN(0x6e635643, 0xa232dced), TOBN(0x99619367, 0x2571c8ba)}, + {TOBN(0xe8c9f357, 0x54b7032b), TOBN(0xf936b3ba, 0x2442d54a), + TOBN(0x2263f0f0, 0x8290c65a), TOBN(0x48989780, 0xee2c7fdb)}}, + {{TOBN(0xadc5d55a, 0x13d4f95e), TOBN(0x737cff85, 0xad9b8500), + TOBN(0x271c557b, 0x8a73f43d), TOBN(0xbed617a4, 0xe18bc476)}, + {TOBN(0x66245401, 0x7dfd8ab2), TOBN(0xae7b89ae, 0x3a2870aa), + TOBN(0x1b555f53, 0x23a7e545), TOBN(0x6791e247, 0xbe057e4c)}}, + {{TOBN(0x860136ad, 0x324fa34d), TOBN(0xea111447, 0x4cbeae28), + TOBN(0x023a4270, 0xbedd3299), TOBN(0x3d5c3a7f, 0xc1c35c34)}, + {TOBN(0xb0f6db67, 0x8d0412d2), TOBN(0xd92625e2, 0xfcdc6b9a), + TOBN(0x92ae5ccc, 0x4e28a982), TOBN(0xea251c36, 0x47a3ce7e)}}, + {{TOBN(0x9d658932, 0x790691bf), TOBN(0xed610589, 0x06b736ae), + TOBN(0x712c2f04, 0xc0d63b6e), TOBN(0x5cf06fd5, 0xc63d488f)}, + {TOBN(0x97363fac, 0xd9588e41), TOBN(0x1f9bf762, 0x2b93257e), + TOBN(0xa9d1ffc4, 0x667acace), TOBN(0x1cf4a1aa, 0x0a061ecf)}}, + {{TOBN(0x40e48a49, 0xdc1818d0), TOBN(0x0643ff39, 0xa3621ab0), + TOBN(0x5768640c, 0xe39ef639), TOBN(0x1fc099ea, 0x04d86854)}, + {TOBN(0x9130b9c3, 0xeccd28fd), TOBN(0xd743cbd2, 0x7eec54ab), + TOBN(0x052b146f, 0xe5b475b6), TOBN(0x058d9a82, 0x900a7d1f)}}, + {{TOBN(0x65e02292, 0x91262b72), TOBN(0x96f924f9, 0xbb0edf03), + TOBN(0x5cfa59c8, 0xfe206842), TOBN(0xf6037004, 0x5eafa720)}, + {TOBN(0x5f30699e, 0x18d7dd96), TOBN(0x381e8782, 0xcbab2495), + TOBN(0x91669b46, 0xdd8be949), TOBN(0xb40606f5, 0x26aae8ef)}}, + {{TOBN(0x2812b839, 0xfc6751a4), TOBN(0x16196214, 0xfba800ef), + TOBN(0x4398d5ca, 0x4c1a2875), TOBN(0x720c00ee, 0x653d8349)}, + {TOBN(0xc2699eb0, 0xd820007c), TOBN(0x880ee660, 0xa39b5825), + TOBN(0x70694694, 0x471f6984), TOBN(0xf7d16ea8, 0xe3dda99a)}}, + {{TOBN(0x28d675b2, 0xc0519a23), TOBN(0x9ebf94fe, 0x4f6952e3), + TOBN(0xf28bb767, 0xa2294a8a), TOBN(0x85512b4d, 0xfe0af3f5)}, + {TOBN(0x18958ba8, 0x99b16a0d), TOBN(0x95c2430c, 0xba7548a7), + TOBN(0xb30d1b10, 0xa16be615), TOBN(0xe3ebbb97, 0x85bfb74c)}}, + {{TOBN(0xa3273cfe, 0x18549fdb), TOBN(0xf6e200bf, 0x4fcdb792), + TOBN(0x54a76e18, 0x83aba56c), TOBN(0x73ec66f6, 0x89ef6aa2)}, + {TOBN(0x8d17add7, 0xd1b9a305), TOBN(0xa959c5b9, 0xb7ae1b9d), + TOBN(0x88643522, 0x6bcc094a), TOBN(0xcc5616c4, 0xd7d429b9)}}, + {{TOBN(0xa6dada01, 0xe6a33f7c), TOBN(0xc6217a07, 0x9d4e70ad), + TOBN(0xd619a818, 0x09c15b7c), TOBN(0xea06b329, 0x0e80c854)}, + {TOBN(0x174811ce, 0xa5f5e7b9), TOBN(0x66dfc310, 0x787c65f4), + TOBN(0x4ea7bd69, 0x3316ab54), TOBN(0xc12c4acb, 0x1dcc0f70)}}, + {{TOBN(0xe4308d1a, 0x1e407dd9), TOBN(0xe8a3587c, 0x91afa997), + TOBN(0xea296c12, 0xab77b7a5), TOBN(0xb5ad49e4, 0x673c0d52)}, + {TOBN(0x40f9b2b2, 0x7006085a), TOBN(0xa88ff340, 0x87bf6ec2), + TOBN(0x978603b1, 0x4e3066a6), TOBN(0xb3f99fc2, 0xb5e486e2)}}, + {{TOBN(0x07b53f5e, 0xb2e63645), TOBN(0xbe57e547, 0x84c84232), + TOBN(0xd779c216, 0x7214d5cf), TOBN(0x617969cd, 0x029a3aca)}, + {TOBN(0xd17668cd, 0x8a7017a0), TOBN(0x77b4d19a, 0xbe9b7ee8), + TOBN(0x58fd0e93, 0x9c161776), TOBN(0xa8c4f4ef, 0xd5968a72)}}, + {{TOBN(0x296071cc, 0x67b3de77), TOBN(0xae3c0b8e, 0x634f7905), + TOBN(0x67e440c2, 0x8a7100c9), TOBN(0xbb8c3c1b, 0xeb4b9b42)}, + {TOBN(0x6d71e8ea, 0xc51b3583), TOBN(0x7591f5af, 0x9525e642), + TOBN(0xf73a2f7b, 0x13f509f3), TOBN(0x618487aa, 0x5619ac9b)}}, + {{TOBN(0x3a72e5f7, 0x9d61718a), TOBN(0x00413bcc, 0x7592d28c), + TOBN(0x7d9b11d3, 0x963c35cf), TOBN(0x77623bcf, 0xb90a46ed)}, + {TOBN(0xdeef273b, 0xdcdd2a50), TOBN(0x4a741f9b, 0x0601846e), + TOBN(0x33b89e51, 0x0ec6e929), TOBN(0xcb02319f, 0x8b7f22cd)}}, + {{TOBN(0xbbe1500d, 0x084bae24), TOBN(0x2f0ae8d7, 0x343d2693), + TOBN(0xacffb5f2, 0x7cdef811), TOBN(0xaa0c030a, 0x263fb94f)}, + {TOBN(0x6eef0d61, 0xa0f442de), TOBN(0xf92e1817, 0x27b139d3), + TOBN(0x1ae6deb7, 0x0ad8bc28), TOBN(0xa89e38dc, 0xc0514130)}}, + {{TOBN(0x81eeb865, 0xd2fdca23), TOBN(0x5a15ee08, 0xcc8ef895), + TOBN(0x768fa10a, 0x01905614), TOBN(0xeff5b8ef, 0x880ee19b)}, + {TOBN(0xf0c0cabb, 0xcb1c8a0e), TOBN(0x2e1ee9cd, 0xb8c838f9), + TOBN(0x0587d8b8, 0x8a4a14c0), TOBN(0xf6f27896, 0x2ff698e5)}}, + {{TOBN(0xed38ef1c, 0x89ee6256), TOBN(0xf44ee1fe, 0x6b353b45), + TOBN(0x9115c0c7, 0x70e903b3), TOBN(0xc78ec0a1, 0x818f31df)}, + {TOBN(0x6c003324, 0xb7dccbc6), TOBN(0xd96dd1f3, 0x163bbc25), + TOBN(0x33aa82dd, 0x5cedd805), TOBN(0x123aae4f, 0x7f7eb2f1)}}, + {{TOBN(0x1723fcf5, 0xa26262cd), TOBN(0x1f7f4d5d, 0x0060ebd5), + TOBN(0xf19c5c01, 0xb2eaa3af), TOBN(0x2ccb9b14, 0x9790accf)}, + {TOBN(0x1f9c1cad, 0x52324aa6), TOBN(0x63200526, 0x7247df54), + TOBN(0x5732fe42, 0xbac96f82), TOBN(0x52fe771f, 0x01a1c384)}}, + {{TOBN(0x546ca13d, 0xb1001684), TOBN(0xb56b4eee, 0xa1709f75), + TOBN(0x266545a9, 0xd5db8672), TOBN(0xed971c90, 0x1e8f3cfb)}, + {TOBN(0x4e7d8691, 0xe3a07b29), TOBN(0x7570d9ec, 0xe4b696b9), + TOBN(0xdc5fa067, 0x7bc7e9ae), TOBN(0x68b44caf, 0xc82c4844)}}, + {{TOBN(0x519d34b3, 0xbf44da80), TOBN(0x283834f9, 0x5ab32e66), + TOBN(0x6e608797, 0x6278a000), TOBN(0x1e62960e, 0x627312f6)}, + {TOBN(0x9b87b27b, 0xe6901c55), TOBN(0x80e78538, 0x24fdbc1f), + TOBN(0xbbbc0951, 0x2facc27d), TOBN(0x06394239, 0xac143b5a)}}, + {{TOBN(0x35bb4a40, 0x376c1944), TOBN(0x7cb62694, 0x63da1511), + TOBN(0xafd29161, 0xb7148a3b), TOBN(0xa6f9d9ed, 0x4e2ea2ee)}, + {TOBN(0x15dc2ca2, 0x880dd212), TOBN(0x903c3813, 0xa61139a9), + TOBN(0x2aa7b46d, 0x6c0f8785), TOBN(0x36ce2871, 0x901c60ff)}}, + {{TOBN(0xc683b028, 0xe10d9c12), TOBN(0x7573baa2, 0x032f33d3), + TOBN(0x87a9b1f6, 0x67a31b58), TOBN(0xfd3ed11a, 0xf4ffae12)}, + {TOBN(0x83dcaa9a, 0x0cb2748e), TOBN(0x8239f018, 0x5d6fdf16), + TOBN(0xba67b49c, 0x72753941), TOBN(0x2beec455, 0xc321cb36)}}, + {{TOBN(0x88015606, 0x3f8b84ce), TOBN(0x76417083, 0x8d38c86f), + TOBN(0x054f1ca7, 0x598953dd), TOBN(0xc939e110, 0x4e8e7429)}, + {TOBN(0x9b1ac2b3, 0x5a914f2f), TOBN(0x39e35ed3, 0xe74b8f9c), + TOBN(0xd0debdb2, 0x781b2fb0), TOBN(0x1585638f, 0x2d997ba2)}}, + {{TOBN(0x9c4b646e, 0x9e2fce99), TOBN(0x68a21081, 0x1e80857f), + TOBN(0x06d54e44, 0x3643b52a), TOBN(0xde8d6d63, 0x0d8eb843)}, + {TOBN(0x70321563, 0x42146a0a), TOBN(0x8ba826f2, 0x5eaa3622), + TOBN(0x227a58bd, 0x86138787), TOBN(0x43b6c03c, 0x10281d37)}}, + {{TOBN(0x6326afbb, 0xb54dde39), TOBN(0x744e5e8a, 0xdb6f2d5f), + TOBN(0x48b2a99a, 0xcff158e1), TOBN(0xa93c8fa0, 0xef87918f)}, + {TOBN(0x2182f956, 0xde058c5c), TOBN(0x216235d2, 0x936f9e7a), + TOBN(0xace0c0db, 0xd2e31e67), TOBN(0xc96449bf, 0xf23ac3e7)}}, + {{TOBN(0x7e9a2874, 0x170693bd), TOBN(0xa28e14fd, 0xa45e6335), + TOBN(0x5757f6b3, 0x56427344), TOBN(0x822e4556, 0xacf8edf9)}, + {TOBN(0x2b7a6ee2, 0xe6a285cd), TOBN(0x5866f211, 0xa9df3af0), + TOBN(0x40dde2dd, 0xf845b844), TOBN(0x986c3726, 0x110e5e49)}}, + {{TOBN(0x73680c2a, 0xf7172277), TOBN(0x57b94f0f, 0x0cccb244), + TOBN(0xbdff7267, 0x2d438ca7), TOBN(0xbad1ce11, 0xcf4663fd)}, + {TOBN(0x9813ed9d, 0xd8f71cae), TOBN(0xf43272a6, 0x961fdaa6), + TOBN(0xbeff0119, 0xbd6d1637), TOBN(0xfebc4f91, 0x30361978)}}, + {{TOBN(0x02b37a95, 0x2f41deff), TOBN(0x0e44a59a, 0xe63b89b7), + TOBN(0x673257dc, 0x143ff951), TOBN(0x19c02205, 0xd752baf4)}, + {TOBN(0x46c23069, 0xc4b7d692), TOBN(0x2e6392c3, 0xfd1502ac), + TOBN(0x6057b1a2, 0x1b220846), TOBN(0xe51ff946, 0x0c1b5b63)}}}, + {{{TOBN(0x6e85cb51, 0x566c5c43), TOBN(0xcff9c919, 0x3597f046), + TOBN(0x9354e90c, 0x4994d94a), TOBN(0xe0a39332, 0x2147927d)}, + {TOBN(0x8427fac1, 0x0dc1eb2b), TOBN(0x88cfd8c2, 0x2ff319fa), + TOBN(0xe2d4e684, 0x01965274), TOBN(0xfa2e067d, 0x67aaa746)}}, + {{TOBN(0xb6d92a7f, 0x3e5f9f11), TOBN(0x9afe153a, 0xd6cb3b8e), + TOBN(0x4d1a6dd7, 0xddf800bd), TOBN(0xf6c13cc0, 0xcaf17e19)}, + {TOBN(0x15f6c58e, 0x325fc3ee), TOBN(0x71095400, 0xa31dc3b2), + TOBN(0x168e7c07, 0xafa3d3e7), TOBN(0x3f8417a1, 0x94c7ae2d)}}, + {{TOBN(0xec234772, 0x813b230d), TOBN(0x634d0f5f, 0x17344427), + TOBN(0x11548ab1, 0xd77fc56a), TOBN(0x7fab1750, 0xce06af77)}, + {TOBN(0xb62c10a7, 0x4f7c4f83), TOBN(0xa7d2edc4, 0x220a67d9), + TOBN(0x1c404170, 0x921209a0), TOBN(0x0b9815a0, 0xface59f0)}}, + {{TOBN(0x2842589b, 0x319540c3), TOBN(0x18490f59, 0xa283d6f8), + TOBN(0xa2731f84, 0xdaae9fcb), TOBN(0x3db6d960, 0xc3683ba0)}, + {TOBN(0xc85c63bb, 0x14611069), TOBN(0xb19436af, 0x0788bf05), + TOBN(0x905459df, 0x347460d2), TOBN(0x73f6e094, 0xe11a7db1)}}, + {{TOBN(0xdc7f938e, 0xb6357f37), TOBN(0xc5d00f79, 0x2bd8aa62), + TOBN(0xc878dcb9, 0x2ca979fc), TOBN(0x37e83ed9, 0xeb023a99)}, + {TOBN(0x6b23e273, 0x1560bf3d), TOBN(0x1086e459, 0x1d0fae61), + TOBN(0x78248316, 0x9a9414bd), TOBN(0x1b956bc0, 0xf0ea9ea1)}}, + {{TOBN(0x7b85bb91, 0xc31b9c38), TOBN(0x0c5aa90b, 0x48ef57b5), + TOBN(0xdedeb169, 0xaf3bab6f), TOBN(0xe610ad73, 0x2d373685)}, + {TOBN(0xf13870df, 0x02ba8e15), TOBN(0x0337edb6, 0x8ca7f771), + TOBN(0xe4acf747, 0xb62c036c), TOBN(0xd921d576, 0xb6b94e81)}}, + {{TOBN(0xdbc86439, 0x2c422f7a), TOBN(0xfb635362, 0xed348898), + TOBN(0x83084668, 0xc45bfcd1), TOBN(0xc357c9e3, 0x2b315e11)}, + {TOBN(0xb173b540, 0x5b2e5b8c), TOBN(0x7e946931, 0xe102b9a4), + TOBN(0x17c890eb, 0x7b0fb199), TOBN(0xec225a83, 0xd61b662b)}}, + {{TOBN(0xf306a3c8, 0xee3c76cb), TOBN(0x3cf11623, 0xd32a1f6e), + TOBN(0xe6d5ab64, 0x6863e956), TOBN(0x3b8a4cbe, 0x5c005c26)}, + {TOBN(0xdcd529a5, 0x9ce6bb27), TOBN(0xc4afaa52, 0x04d4b16f), + TOBN(0xb0624a26, 0x7923798d), TOBN(0x85e56df6, 0x6b307fab)}}, + {{TOBN(0x0281893c, 0x2bf29698), TOBN(0x91fc19a4, 0xd7ce7603), + TOBN(0x75a5dca3, 0xad9a558f), TOBN(0x40ceb3fa, 0x4d50bf77)}, + {TOBN(0x1baf6060, 0xbc9ba369), TOBN(0x927e1037, 0x597888c2), + TOBN(0xd936bf19, 0x86a34c07), TOBN(0xd4cf10c1, 0xc34ae980)}}, + {{TOBN(0x3a3e5334, 0x859dd614), TOBN(0x9c475b5b, 0x18d0c8ee), + TOBN(0x63080d1f, 0x07cd51d5), TOBN(0xc9c0d0a6, 0xb88b4326)}, + {TOBN(0x1ac98691, 0xc234296f), TOBN(0x2a0a83a4, 0x94887fb6), + TOBN(0x56511427, 0x0cea9cf2), TOBN(0x5230a6e8, 0xa24802f5)}}, + {{TOBN(0xf7a2bf0f, 0x72e3d5c1), TOBN(0x37717446, 0x4f21439e), + TOBN(0xfedcbf25, 0x9ce30334), TOBN(0xe0030a78, 0x7ce202f9)}, + {TOBN(0x6f2d9ebf, 0x1202e9ca), TOBN(0xe79dde6c, 0x75e6e591), + TOBN(0xf52072af, 0xf1dac4f8), TOBN(0x6c8d087e, 0xbb9b404d)}}, + {{TOBN(0xad0fc73d, 0xbce913af), TOBN(0x909e587b, 0x458a07cb), + TOBN(0x1300da84, 0xd4f00c8a), TOBN(0x425cd048, 0xb54466ac)}, + {TOBN(0xb59cb9be, 0x90e9d8bf), TOBN(0x991616db, 0x3e431b0e), + TOBN(0xd3aa117a, 0x531aecff), TOBN(0x91af92d3, 0x59f4dc3b)}}, + {{TOBN(0x9b1ec292, 0xe93fda29), TOBN(0x76bb6c17, 0xe97d91bc), + TOBN(0x7509d95f, 0xaface1e6), TOBN(0x3653fe47, 0xbe855ae3)}, + {TOBN(0x73180b28, 0x0f680e75), TOBN(0x75eefd1b, 0xeeb6c26c), + TOBN(0xa4cdf29f, 0xb66d4236), TOBN(0x2d70a997, 0x6b5821d8)}}, + {{TOBN(0x7a3ee207, 0x20445c36), TOBN(0x71d1ac82, 0x59877174), + TOBN(0x0fc539f7, 0x949f73e9), TOBN(0xd05cf3d7, 0x982e3081)}, + {TOBN(0x8758e20b, 0x7b1c7129), TOBN(0xffadcc20, 0x569e61f2), + TOBN(0xb05d3a2f, 0x59544c2d), TOBN(0xbe16f5c1, 0x9fff5e53)}}, + {{TOBN(0x73cf65b8, 0xaad58135), TOBN(0x622c2119, 0x037aa5be), + TOBN(0x79373b3f, 0x646fd6a0), TOBN(0x0e029db5, 0x0d3978cf)}, + {TOBN(0x8bdfc437, 0x94fba037), TOBN(0xaefbd687, 0x620797a6), + TOBN(0x3fa5382b, 0xbd30d38e), TOBN(0x7627cfbf, 0x585d7464)}}, + {{TOBN(0xb2330fef, 0x4e4ca463), TOBN(0xbcef7287, 0x3566cc63), + TOBN(0xd161d2ca, 0xcf780900), TOBN(0x135dc539, 0x5b54827d)}, + {TOBN(0x638f052e, 0x27bf1bc6), TOBN(0x10a224f0, 0x07dfa06c), + TOBN(0xe973586d, 0x6d3321da), TOBN(0x8b0c5738, 0x26152c8f)}}, + {{TOBN(0x07ef4f2a, 0x34606074), TOBN(0x80fe7fe8, 0xa0f7047a), + TOBN(0x3d1a8152, 0xe1a0e306), TOBN(0x32cf43d8, 0x88da5222)}, + {TOBN(0xbf89a95f, 0x5f02ffe6), TOBN(0x3d9eb9a4, 0x806ad3ea), + TOBN(0x012c17bb, 0x79c8e55e), TOBN(0xfdcd1a74, 0x99c81dac)}}, + {{TOBN(0x7043178b, 0xb9556098), TOBN(0x4090a1df, 0x801c3886), + TOBN(0x759800ff, 0x9b67b912), TOBN(0x3e5c0304, 0x232620c8)}, + {TOBN(0x4b9d3c4b, 0x70dceeca), TOBN(0xbb2d3c15, 0x181f648e), + TOBN(0xf981d837, 0x6e33345c), TOBN(0xb626289b, 0x0cf2297a)}}, + {{TOBN(0x766ac659, 0x8baebdcf), TOBN(0x1a28ae09, 0x75df01e5), + TOBN(0xb71283da, 0x375876d8), TOBN(0x4865a96d, 0x607b9800)}, + {TOBN(0x25dd1bcd, 0x237936b2), TOBN(0x332f4f4b, 0x60417494), + TOBN(0xd0923d68, 0x370a2147), TOBN(0x497f5dfb, 0xdc842203)}}, + {{TOBN(0x9dc74cbd, 0x32be5e0f), TOBN(0x7475bcb7, 0x17a01375), + TOBN(0x438477c9, 0x50d872b1), TOBN(0xcec67879, 0xffe1d63d)}, + {TOBN(0x9b006014, 0xd8578c70), TOBN(0xc9ad99a8, 0x78bb6b8b), + TOBN(0x6799008e, 0x11fb3806), TOBN(0xcfe81435, 0xcd44cab3)}}, + {{TOBN(0xa2ee1582, 0x2f4fb344), TOBN(0xb8823450, 0x483fa6eb), + TOBN(0x622d323d, 0x652c7749), TOBN(0xd8474a98, 0xbeb0a15b)}, + {TOBN(0xe43c154d, 0x5d1c00d0), TOBN(0x7fd581d9, 0x0e3e7aac), + TOBN(0x2b44c619, 0x2525ddf8), TOBN(0x67a033eb, 0xb8ae9739)}}, + {{TOBN(0x113ffec1, 0x9ef2d2e4), TOBN(0x1bf6767e, 0xd5a0ea7f), + TOBN(0x57fff75e, 0x03714c0a), TOBN(0xa23c422e, 0x0a23e9ee)}, + {TOBN(0xdd5f6b2d, 0x540f83af), TOBN(0xc2c2c27e, 0x55ea46a7), + TOBN(0xeb6b4246, 0x672a1208), TOBN(0xd13599f7, 0xae634f7a)}}, + {{TOBN(0xcf914b5c, 0xd7b32c6e), TOBN(0x61a5a640, 0xeaf61814), + TOBN(0x8dc3df8b, 0x208a1bbb), TOBN(0xef627fd6, 0xb6d79aa5)}, + {TOBN(0x44232ffc, 0xc4c86bc8), TOBN(0xe6f9231b, 0x061539fe), + TOBN(0x1d04f25a, 0x958b9533), TOBN(0x180cf934, 0x49e8c885)}}, + {{TOBN(0x89689595, 0x9884aaf7), TOBN(0xb1959be3, 0x07b348a6), + TOBN(0x96250e57, 0x3c147c87), TOBN(0xae0efb3a, 0xdd0c61f8)}, + {TOBN(0xed00745e, 0xca8c325e), TOBN(0x3c911696, 0xecff3f70), + TOBN(0x73acbc65, 0x319ad41d), TOBN(0x7b01a020, 0xf0b1c7ef)}}, + {{TOBN(0xea32b293, 0x63a1483f), TOBN(0x89eabe71, 0x7a248f96), + TOBN(0x9c6231d3, 0x343157e5), TOBN(0x93a375e5, 0xdf3c546d)}, + {TOBN(0xe76e9343, 0x6a2afe69), TOBN(0xc4f89100, 0xe166c88e), + TOBN(0x248efd0d, 0x4f872093), TOBN(0xae0eb3ea, 0x8fe0ea61)}}, + {{TOBN(0xaf89790d, 0x9d79046e), TOBN(0x4d650f2d, 0x6cee0976), + TOBN(0xa3935d9a, 0x43071eca), TOBN(0x66fcd2c9, 0x283b0bfe)}, + {TOBN(0x0e665eb5, 0x696605f1), TOBN(0xe77e5d07, 0xa54cd38d), + TOBN(0x90ee050a, 0x43d950cf), TOBN(0x86ddebda, 0xd32e69b5)}}, + {{TOBN(0x6ad94a3d, 0xfddf7415), TOBN(0xf7fa1309, 0x3f6e8d5a), + TOBN(0xc4831d1d, 0xe9957f75), TOBN(0x7de28501, 0xd5817447)}, + {TOBN(0x6f1d7078, 0x9e2aeb6b), TOBN(0xba2b9ff4, 0xf67a53c2), + TOBN(0x36963767, 0xdf9defc3), TOBN(0x479deed3, 0x0d38022c)}}, + {{TOBN(0xd2edb89b, 0x3a8631e8), TOBN(0x8de855de, 0x7a213746), + TOBN(0xb2056cb7, 0xb00c5f11), TOBN(0xdeaefbd0, 0x2c9b85e4)}, + {TOBN(0x03f39a8d, 0xd150892d), TOBN(0x37b84686, 0x218b7985), + TOBN(0x36296dd8, 0xb7375f1a), TOBN(0x472cd4b1, 0xb78e898e)}}, + {{TOBN(0x15dff651, 0xe9f05de9), TOBN(0xd4045069, 0x2ce98ba9), + TOBN(0x8466a7ae, 0x9b38024c), TOBN(0xb910e700, 0xe5a6b5ef)}, + {TOBN(0xae1c56ea, 0xb3aa8f0d), TOBN(0xbab2a507, 0x7eee74a6), + TOBN(0x0dca11e2, 0x4b4c4620), TOBN(0xfd896e2e, 0x4c47d1f4)}}, + {{TOBN(0xeb45ae53, 0x308fbd93), TOBN(0x46cd5a2e, 0x02c36fda), + TOBN(0x6a3d4e90, 0xbaa48385), TOBN(0xdd55e62e, 0x9dbe9960)}, + {TOBN(0xa1406aa0, 0x2a81ede7), TOBN(0x6860dd14, 0xf9274ea7), + TOBN(0xcfdcb0c2, 0x80414f86), TOBN(0xff410b10, 0x22f94327)}}, + {{TOBN(0x5a33cc38, 0x49ad467b), TOBN(0xefb48b6c, 0x0a7335f1), + TOBN(0x14fb54a4, 0xb153a360), TOBN(0x604aa9d2, 0xb52469cc)}, + {TOBN(0x5e9dc486, 0x754e48e9), TOBN(0x693cb455, 0x37471e8e), + TOBN(0xfb2fd7cd, 0x8d3b37b6), TOBN(0x63345e16, 0xcf09ff07)}}, + {{TOBN(0x9910ba6b, 0x23a5d896), TOBN(0x1fe19e35, 0x7fe4364e), + TOBN(0x6e1da8c3, 0x9a33c677), TOBN(0x15b4488b, 0x29fd9fd0)}, + {TOBN(0x1f439254, 0x1a1f22bf), TOBN(0x920a8a70, 0xab8163e8), + TOBN(0x3fd1b249, 0x07e5658e), TOBN(0xf2c4f79c, 0xb6ec839b)}}, + {{TOBN(0x1abbc3d0, 0x4aa38d1b), TOBN(0x3b0db35c, 0xb5d9510e), + TOBN(0x1754ac78, 0x3e60dec0), TOBN(0x53272fd7, 0xea099b33)}, + {TOBN(0x5fb0494f, 0x07a8e107), TOBN(0x4a89e137, 0x6a8191fa), + TOBN(0xa113b7f6, 0x3c4ad544), TOBN(0x88a2e909, 0x6cb9897b)}}, + {{TOBN(0x17d55de3, 0xb44a3f84), TOBN(0xacb2f344, 0x17c6c690), + TOBN(0x32088168, 0x10232390), TOBN(0xf2e8a61f, 0x6c733bf7)}, + {TOBN(0xa774aab6, 0x9c2d7652), TOBN(0xfb5307e3, 0xed95c5bc), + TOBN(0xa05c73c2, 0x4981f110), TOBN(0x1baae31c, 0xa39458c9)}}, + {{TOBN(0x1def185b, 0xcbea62e7), TOBN(0xe8ac9eae, 0xeaf63059), + TOBN(0x098a8cfd, 0x9921851c), TOBN(0xd959c3f1, 0x3abe2f5b)}, + {TOBN(0xa4f19525, 0x20e40ae5), TOBN(0x320789e3, 0x07a24aa1), + TOBN(0x259e6927, 0x7392b2bc), TOBN(0x58f6c667, 0x1918668b)}}, + {{TOBN(0xce1db2bb, 0xc55d2d8b), TOBN(0x41d58bb7, 0xf4f6ca56), + TOBN(0x7650b680, 0x8f877614), TOBN(0x905e16ba, 0xf4c349ed)}, + {TOBN(0xed415140, 0xf661acac), TOBN(0x3b8784f0, 0xcb2270af), + TOBN(0x3bc280ac, 0x8a402cba), TOBN(0xd53f7146, 0x0937921a)}}, + {{TOBN(0xc03c8ee5, 0xe5681e83), TOBN(0x62126105, 0xf6ac9e4a), + TOBN(0x9503a53f, 0x936b1a38), TOBN(0x3d45e2d4, 0x782fecbd)}, + {TOBN(0x69a5c439, 0x76e8ae98), TOBN(0xb53b2eeb, 0xbfb4b00e), + TOBN(0xf1674712, 0x72386c89), TOBN(0x30ca34a2, 0x4268bce4)}}, + {{TOBN(0x7f1ed86c, 0x78341730), TOBN(0x8ef5beb8, 0xb525e248), + TOBN(0xbbc489fd, 0xb74fbf38), TOBN(0x38a92a0e, 0x91a0b382)}, + {TOBN(0x7a77ba3f, 0x22433ccf), TOBN(0xde8362d6, 0xa29f05a9), + TOBN(0x7f6a30ea, 0x61189afc), TOBN(0x693b5505, 0x59ef114f)}}, + {{TOBN(0x50266bc0, 0xcd1797a1), TOBN(0xea17b47e, 0xf4b7af2d), + TOBN(0xd6c4025c, 0x3df9483e), TOBN(0x8cbb9d9f, 0xa37b18c9)}, + {TOBN(0x91cbfd9c, 0x4d8424cf), TOBN(0xdb7048f1, 0xab1c3506), + TOBN(0x9eaf641f, 0x028206a3), TOBN(0xf986f3f9, 0x25bdf6ce)}}, + {{TOBN(0x262143b5, 0x224c08dc), TOBN(0x2bbb09b4, 0x81b50c91), + TOBN(0xc16ed709, 0xaca8c84f), TOBN(0xa6210d9d, 0xb2850ca8)}, + {TOBN(0x6d8df67a, 0x09cb54d6), TOBN(0x91eef6e0, 0x500919a4), + TOBN(0x90f61381, 0x0f132857), TOBN(0x9acede47, 0xf8d5028b)}}, + {{TOBN(0x844d1b71, 0x90b771c3), TOBN(0x563b71e4, 0xba6426be), + TOBN(0x2efa2e83, 0xbdb802ff), TOBN(0x3410cbab, 0xab5b4a41)}, + {TOBN(0x555b2d26, 0x30da84dd), TOBN(0xd0711ae9, 0xee1cc29a), + TOBN(0xcf3e8c60, 0x2f547792), TOBN(0x03d7d5de, 0xdc678b35)}}, + {{TOBN(0x071a2fa8, 0xced806b8), TOBN(0x222e6134, 0x697f1478), + TOBN(0xdc16fd5d, 0xabfcdbbf), TOBN(0x44912ebf, 0x121b53b8)}, + {TOBN(0xac943674, 0x2496c27c), TOBN(0x8ea3176c, 0x1ffc26b0), + TOBN(0xb6e224ac, 0x13debf2c), TOBN(0x524cc235, 0xf372a832)}}, + {{TOBN(0xd706e1d8, 0x9f6f1b18), TOBN(0x2552f005, 0x44cce35b), + TOBN(0x8c8326c2, 0xa88e31fc), TOBN(0xb5468b2c, 0xf9552047)}, + {TOBN(0xce683e88, 0x3ff90f2b), TOBN(0x77947bdf, 0x2f0a5423), + TOBN(0xd0a1b28b, 0xed56e328), TOBN(0xaee35253, 0xc20134ac)}}, + {{TOBN(0x7e98367d, 0x3567962f), TOBN(0x379ed61f, 0x8188bffb), + TOBN(0x73bba348, 0xfaf130a1), TOBN(0x6c1f75e1, 0x904ed734)}, + {TOBN(0x18956642, 0x3b4a79fc), TOBN(0xf20bc83d, 0x54ef4493), + TOBN(0x836d425d, 0x9111eca1), TOBN(0xe5b5c318, 0x009a8dcf)}}, + {{TOBN(0x3360b25d, 0x13221bc5), TOBN(0x707baad2, 0x6b3eeaf7), + TOBN(0xd7279ed8, 0x743a95a1), TOBN(0x7450a875, 0x969e809f)}, + {TOBN(0x32b6bd53, 0xe5d0338f), TOBN(0x1e77f7af, 0x2b883bbc), + TOBN(0x90da12cc, 0x1063ecd0), TOBN(0xe2697b58, 0xc315be47)}}, + {{TOBN(0x2771a5bd, 0xda85d534), TOBN(0x53e78c1f, 0xff980eea), + TOBN(0xadf1cf84, 0x900385e7), TOBN(0x7d3b14f6, 0xc9387b62)}, + {TOBN(0x170e74b0, 0xcb8f2bd2), TOBN(0x2d50b486, 0x827fa993), + TOBN(0xcdbe8c9a, 0xf6f32bab), TOBN(0x55e906b0, 0xc3b93ab8)}}, + {{TOBN(0x747f22fc, 0x8fe280d1), TOBN(0xcd8e0de5, 0xb2e114ab), + TOBN(0x5ab7dbeb, 0xe10b68b0), TOBN(0x9dc63a9c, 0xa480d4b2)}, + {TOBN(0x78d4bc3b, 0x4be1495f), TOBN(0x25eb3db8, 0x9359122d), + TOBN(0x3f8ac05b, 0x0809cbdc), TOBN(0xbf4187bb, 0xd37c702f)}}, + {{TOBN(0x84cea069, 0x1416a6a5), TOBN(0x8f860c79, 0x43ef881c), + TOBN(0x41311f8a, 0x38038a5d), TOBN(0xe78c2ec0, 0xfc612067)}, + {TOBN(0x494d2e81, 0x5ad73581), TOBN(0xb4cc9e00, 0x59604097), + TOBN(0xff558aec, 0xf3612cba), TOBN(0x35beef7a, 0x9e36c39e)}}, + {{TOBN(0x1845c7cf, 0xdbcf41b9), TOBN(0x5703662a, 0xaea997c0), + TOBN(0x8b925afe, 0xe402f6d8), TOBN(0xd0a1b1ae, 0x4dd72162)}, + {TOBN(0x9f47b375, 0x03c41c4b), TOBN(0xa023829b, 0x0391d042), + TOBN(0x5f5045c3, 0x503b8b0a), TOBN(0x123c2688, 0x98c010e5)}}, + {{TOBN(0x324ec0cc, 0x36ba06ee), TOBN(0xface3115, 0x3dd2cc0c), + TOBN(0xb364f3be, 0xf333e91f), TOBN(0xef8aff73, 0x28e832b0)}, + {TOBN(0x1e9bad04, 0x2d05841b), TOBN(0x42f0e3df, 0x356a21e2), + TOBN(0xa3270bcb, 0x4add627e), TOBN(0xb09a8158, 0xd322e711)}}, + {{TOBN(0x86e326a1, 0x0fee104a), TOBN(0xad7788f8, 0x3703f65d), + TOBN(0x7e765430, 0x47bc4833), TOBN(0x6cee582b, 0x2b9b893a)}, + {TOBN(0x9cd2a167, 0xe8f55a7b), TOBN(0xefbee3c6, 0xd9e4190d), + TOBN(0x33ee7185, 0xd40c2e9d), TOBN(0x844cc9c5, 0xa380b548)}}, + {{TOBN(0x323f8ecd, 0x66926e04), TOBN(0x0001e38f, 0x8110c1ba), + TOBN(0x8dbcac12, 0xfc6a7f07), TOBN(0xd65e1d58, 0x0cec0827)}, + {TOBN(0xd2cd4141, 0xbe76ca2d), TOBN(0x7895cf5c, 0xe892f33a), + TOBN(0x956d230d, 0x367139d2), TOBN(0xa91abd3e, 0xd012c4c1)}}, + {{TOBN(0x34fa4883, 0x87eb36bf), TOBN(0xc5f07102, 0x914b8fb4), + TOBN(0x90f0e579, 0xadb9c95f), TOBN(0xfe6ea8cb, 0x28888195)}, + {TOBN(0x7b9b5065, 0xedfa9284), TOBN(0x6c510bd2, 0x2b8c8d65), + TOBN(0xd7b8ebef, 0xcbe8aafd), TOBN(0xedb3af98, 0x96b1da07)}}, + {{TOBN(0x28ff779d, 0x6295d426), TOBN(0x0c4f6ac7, 0x3fa3ad7b), + TOBN(0xec44d054, 0x8b8e2604), TOBN(0x9b32a66d, 0x8b0050e1)}, + {TOBN(0x1f943366, 0xf0476ce2), TOBN(0x7554d953, 0xa602c7b4), + TOBN(0xbe35aca6, 0x524f2809), TOBN(0xb6881229, 0xfd4edbea)}}, + {{TOBN(0xe8cd0c8f, 0x508efb63), TOBN(0x9eb5b5c8, 0x6abcefc7), + TOBN(0xf5621f5f, 0xb441ab4f), TOBN(0x79e6c046, 0xb76a2b22)}, + {TOBN(0x74a4792c, 0xe37a1f69), TOBN(0xcbd252cb, 0x03542b60), + TOBN(0x785f65d5, 0xb3c20bd3), TOBN(0x8dea6143, 0x4fabc60c)}}, + {{TOBN(0x45e21446, 0xde673629), TOBN(0x57f7aa1e, 0x703c2d21), + TOBN(0xa0e99b7f, 0x98c868c7), TOBN(0x4e42f66d, 0x8b641676)}, + {TOBN(0x602884dc, 0x91077896), TOBN(0xa0d690cf, 0xc2c9885b), + TOBN(0xfeb4da33, 0x3b9a5187), TOBN(0x5f789598, 0x153c87ee)}}, + {{TOBN(0x2192dd47, 0x52b16dba), TOBN(0xdeefc0e6, 0x3524c1b1), + TOBN(0x465ea76e, 0xe4383693), TOBN(0x79401711, 0x361b8d98)}, + {TOBN(0xa5f9ace9, 0xf21a15cb), TOBN(0x73d26163, 0xefee9aeb), + TOBN(0xcca844b3, 0xe677016c), TOBN(0x6c122b07, 0x57eaee06)}}, + {{TOBN(0xb782dce7, 0x15f09690), TOBN(0x508b9b12, 0x2dfc0fc9), + TOBN(0x9015ab4b, 0x65d89fc6), TOBN(0x5e79dab7, 0xd6d5bb0f)}, + {TOBN(0x64f021f0, 0x6c775aa2), TOBN(0xdf09d8cc, 0x37c7eca1), + TOBN(0x9a761367, 0xef2fa506), TOBN(0xed4ca476, 0x5b81eec6)}}, + {{TOBN(0x262ede36, 0x10bbb8b5), TOBN(0x0737ce83, 0x0641ada3), + TOBN(0x4c94288a, 0xe9831ccc), TOBN(0x487fc1ce, 0x8065e635)}, + {TOBN(0xb13d7ab3, 0xb8bb3659), TOBN(0xdea5df3e, 0x855e4120), + TOBN(0xb9a18573, 0x85eb0244), TOBN(0x1a1b8ea3, 0xa7cfe0a3)}}, + {{TOBN(0x3b837119, 0x67b0867c), TOBN(0x8d5e0d08, 0x9d364520), + TOBN(0x52dccc1e, 0xd930f0e3), TOBN(0xefbbcec7, 0xbf20bbaf)}, + {TOBN(0x99cffcab, 0x0263ad10), TOBN(0xd8199e6d, 0xfcd18f8a), + TOBN(0x64e2773f, 0xe9f10617), TOBN(0x0079e8e1, 0x08704848)}}, + {{TOBN(0x1169989f, 0x8a342283), TOBN(0x8097799c, 0xa83012e6), + TOBN(0xece966cb, 0x8a6a9001), TOBN(0x93b3afef, 0x072ac7fc)}, + {TOBN(0xe6893a2a, 0x2db3d5ba), TOBN(0x263dc462, 0x89bf4fdc), + TOBN(0x8852dfc9, 0xe0396673), TOBN(0x7ac70895, 0x3af362b6)}}, + {{TOBN(0xbb9cce4d, 0x5c2f342b), TOBN(0xbf80907a, 0xb52d7aae), + TOBN(0x97f3d3cd, 0x2161bcd0), TOBN(0xb25b0834, 0x0962744d)}, + {TOBN(0xc5b18ea5, 0x6c3a1dda), TOBN(0xfe4ec7eb, 0x06c92317), + TOBN(0xb787b890, 0xad1c4afe), TOBN(0xdccd9a92, 0x0ede801a)}}, + {{TOBN(0x9ac6ddda, 0xdb58da1f), TOBN(0x22bbc12f, 0xb8cae6ee), + TOBN(0xc6f8bced, 0x815c4a43), TOBN(0x8105a92c, 0xf96480c7)}, + {TOBN(0x0dc3dbf3, 0x7a859d51), TOBN(0xe3ec7ce6, 0x3041196b), + TOBN(0xd9f64b25, 0x0d1067c9), TOBN(0xf2321321, 0x3d1f8dd8)}}, + {{TOBN(0x8b5c619c, 0x76497ee8), TOBN(0x5d2b0ac6, 0xc717370e), + TOBN(0x98204cb6, 0x4fcf68e1), TOBN(0x0bdec211, 0x62bc6792)}, + {TOBN(0x6973ccef, 0xa63b1011), TOBN(0xf9e3fa97, 0xe0de1ac5), + TOBN(0x5efb693e, 0x3d0e0c8b), TOBN(0x037248e9, 0xd2d4fcb4)}}}, + {{{TOBN(0x80802dc9, 0x1ec34f9e), TOBN(0xd8772d35, 0x33810603), + TOBN(0x3f06d66c, 0x530cb4f3), TOBN(0x7be5ed0d, 0xc475c129)}, + {TOBN(0xcb9e3c19, 0x31e82b10), TOBN(0xc63d2857, 0xc9ff6b4c), + TOBN(0xb92118c6, 0x92a1b45e), TOBN(0x0aec4414, 0x7285bbca)}}, + {{TOBN(0xfc189ae7, 0x1e29a3ef), TOBN(0xcbe906f0, 0x4c93302e), + TOBN(0xd0107914, 0xceaae10e), TOBN(0xb7a23f34, 0xb68e19f8)}, + {TOBN(0xe9d875c2, 0xefd2119d), TOBN(0x03198c6e, 0xfcadc9c8), + TOBN(0x65591bf6, 0x4da17113), TOBN(0x3cf0bbf8, 0x3d443038)}}, + {{TOBN(0xae485bb7, 0x2b724759), TOBN(0x945353e1, 0xb2d4c63a), + TOBN(0x82159d07, 0xde7d6f2c), TOBN(0x389caef3, 0x4ec5b109)}, + {TOBN(0x4a8ebb53, 0xdb65ef14), TOBN(0x2dc2cb7e, 0xdd99de43), + TOBN(0x816fa3ed, 0x83f2405f), TOBN(0x73429bb9, 0xc14208a3)}}, + {{TOBN(0xb618d590, 0xb01e6e27), TOBN(0x047e2ccd, 0xe180b2dc), + TOBN(0xd1b299b5, 0x04aea4a9), TOBN(0x412c9e1e, 0x9fa403a4)}, + {TOBN(0x88d28a36, 0x79407552), TOBN(0x49c50136, 0xf332b8e3), + TOBN(0x3a1b6fcc, 0xe668de19), TOBN(0x178851bc, 0x75122b97)}}, + {{TOBN(0xb1e13752, 0xfb85fa4c), TOBN(0xd61257ce, 0x383c8ce9), + TOBN(0xd43da670, 0xd2f74dae), TOBN(0xa35aa23f, 0xbf846bbb)}, + {TOBN(0x5e74235d, 0x4421fc83), TOBN(0xf6df8ee0, 0xc363473b), + TOBN(0x34d7f52a, 0x3c4aa158), TOBN(0x50d05aab, 0x9bc6d22e)}}, + {{TOBN(0x8c56e735, 0xa64785f4), TOBN(0xbc56637b, 0x5f29cd07), + TOBN(0x53b2bb80, 0x3ee35067), TOBN(0x50235a0f, 0xdc919270)}, + {TOBN(0x191ab6d8, 0xf2c4aa65), TOBN(0xc3475831, 0x8396023b), + TOBN(0x80400ba5, 0xf0f805ba), TOBN(0x8881065b, 0x5ec0f80f)}}, + {{TOBN(0xc370e522, 0xcc1b5e83), TOBN(0xde2d4ad1, 0x860b8bfb), + TOBN(0xad364df0, 0x67b256df), TOBN(0x8f12502e, 0xe0138997)}, + {TOBN(0x503fa0dc, 0x7783920a), TOBN(0xe80014ad, 0xc0bc866a), + TOBN(0x3f89b744, 0xd3064ba6), TOBN(0x03511dcd, 0xcba5dba5)}}, + {{TOBN(0x197dd46d, 0x95a7b1a2), TOBN(0x9c4e7ad6, 0x3c6341fb), + TOBN(0x426eca29, 0x484c2ece), TOBN(0x9211e489, 0xde7f4f8a)}, + {TOBN(0x14997f6e, 0xc78ef1f4), TOBN(0x2b2c0910, 0x06574586), + TOBN(0x17286a6e, 0x1c3eede8), TOBN(0x25f92e47, 0x0f60e018)}}, + {{TOBN(0x805c5646, 0x31890a36), TOBN(0x703ef600, 0x57feea5b), + TOBN(0x389f747c, 0xaf3c3030), TOBN(0xe0e5daeb, 0x54dd3739)}, + {TOBN(0xfe24a4c3, 0xc9c9f155), TOBN(0x7e4bf176, 0xb5393962), + TOBN(0x37183de2, 0xaf20bf29), TOBN(0x4a1bd7b5, 0xf95a8c3b)}}, + {{TOBN(0xa83b9699, 0x46191d3d), TOBN(0x281fc8dd, 0x7b87f257), + TOBN(0xb18e2c13, 0x54107588), TOBN(0x6372def7, 0x9b2bafe8)}, + {TOBN(0xdaf4bb48, 0x0d8972ca), TOBN(0x3f2dd4b7, 0x56167a3f), + TOBN(0x1eace32d, 0x84310cf4), TOBN(0xe3bcefaf, 0xe42700aa)}}, + {{TOBN(0x5fe5691e, 0xd785e73d), TOBN(0xa5db5ab6, 0x2ea60467), + TOBN(0x02e23d41, 0xdfc6514a), TOBN(0x35e8048e, 0xe03c3665)}, + {TOBN(0x3f8b118f, 0x1adaa0f8), TOBN(0x28ec3b45, 0x84ce1a5a), + TOBN(0xe8cacc6e, 0x2c6646b8), TOBN(0x1343d185, 0xdbd0e40f)}}, + {{TOBN(0xe5d7f844, 0xcaaa358c), TOBN(0x1a1db7e4, 0x9924182a), + TOBN(0xd64cd42d, 0x9c875d9a), TOBN(0xb37b515f, 0x042eeec8)}, + {TOBN(0x4d4dd409, 0x7b165fbe), TOBN(0xfc322ed9, 0xe206eff3), + TOBN(0x7dee4102, 0x59b7e17e), TOBN(0x55a481c0, 0x8236ca00)}}, + {{TOBN(0x8c885312, 0xc23fc975), TOBN(0x15715806, 0x05d6297b), + TOBN(0xa078868e, 0xf78edd39), TOBN(0x956b31e0, 0x03c45e52)}, + {TOBN(0x470275d5, 0xff7b33a6), TOBN(0xc8d5dc3a, 0x0c7e673f), + TOBN(0x419227b4, 0x7e2f2598), TOBN(0x8b37b634, 0x4c14a975)}}, + {{TOBN(0xd0667ed6, 0x8b11888c), TOBN(0x5e0e8c3e, 0x803e25dc), + TOBN(0x34e5d0dc, 0xb987a24a), TOBN(0x9f40ac3b, 0xae920323)}, + {TOBN(0x5463de95, 0x34e0f63a), TOBN(0xa128bf92, 0x6b6328f9), + TOBN(0x491ccd7c, 0xda64f1b7), TOBN(0x7ef1ec27, 0xc47bde35)}}, + {{TOBN(0xa857240f, 0xa36a2737), TOBN(0x35dc1366, 0x63621bc1), + TOBN(0x7a3a6453, 0xd4fb6897), TOBN(0x80f1a439, 0xc929319d)}, + {TOBN(0xfc18274b, 0xf8cb0ba0), TOBN(0xb0b53766, 0x8078c5eb), + TOBN(0xfb0d4924, 0x1e01d0ef), TOBN(0x50d7c67d, 0x372ab09c)}}, + {{TOBN(0xb4e370af, 0x3aeac968), TOBN(0xe4f7fee9, 0xc4b63266), + TOBN(0xb4acd4c2, 0xe3ac5664), TOBN(0xf8910bd2, 0xceb38cbf)}, + {TOBN(0x1c3ae50c, 0xc9c0726e), TOBN(0x15309569, 0xd97b40bf), + TOBN(0x70884b7f, 0xfd5a5a1b), TOBN(0x3890896a, 0xef8314cd)}}, + {{TOBN(0x58e1515c, 0xa5618c93), TOBN(0xe665432b, 0x77d942d1), + TOBN(0xb32181bf, 0xb6f767a8), TOBN(0x753794e8, 0x3a604110)}, + {TOBN(0x09afeb7c, 0xe8c0dbcc), TOBN(0x31e02613, 0x598673a3), + TOBN(0x5d98e557, 0x7d46db00), TOBN(0xfc21fb8c, 0x9d985b28)}}, + {{TOBN(0xc9040116, 0xb0843e0b), TOBN(0x53b1b3a8, 0x69b04531), + TOBN(0xdd1649f0, 0x85d7d830), TOBN(0xbb3bcc87, 0xcb7427e8)}, + {TOBN(0x77261100, 0xc93dce83), TOBN(0x7e79da61, 0xa1922a2a), + TOBN(0x587a2b02, 0xf3149ce8), TOBN(0x147e1384, 0xde92ec83)}}, + {{TOBN(0x484c83d3, 0xaf077f30), TOBN(0xea78f844, 0x0658b53a), + TOBN(0x912076c2, 0x027aec53), TOBN(0xf34714e3, 0x93c8177d)}, + {TOBN(0x37ef5d15, 0xc2376c84), TOBN(0x8315b659, 0x3d1aa783), + TOBN(0x3a75c484, 0xef852a90), TOBN(0x0ba0c58a, 0x16086bd4)}}, + {{TOBN(0x29688d7a, 0x529a6d48), TOBN(0x9c7f250d, 0xc2f19203), + TOBN(0x123042fb, 0x682e2df9), TOBN(0x2b7587e7, 0xad8121bc)}, + {TOBN(0x30fc0233, 0xe0182a65), TOBN(0xb82ecf87, 0xe3e1128a), + TOBN(0x71682861, 0x93fb098f), TOBN(0x043e21ae, 0x85e9e6a7)}}, + {{TOBN(0xab5b49d6, 0x66c834ea), TOBN(0x3be43e18, 0x47414287), + TOBN(0xf40fb859, 0x219a2a47), TOBN(0x0e6559e9, 0xcc58df3c)}, + {TOBN(0xfe1dfe8e, 0x0c6615b4), TOBN(0x14abc8fd, 0x56459d70), + TOBN(0x7be0fa8e, 0x05de0386), TOBN(0x8e63ef68, 0xe9035c7c)}}, + {{TOBN(0x116401b4, 0x53b31e91), TOBN(0x0cba7ad4, 0x4436b4d8), + TOBN(0x9151f9a0, 0x107afd66), TOBN(0xafaca8d0, 0x1f0ee4c4)}, + {TOBN(0x75fe5c1d, 0x9ee9761c), TOBN(0x3497a16b, 0xf0c0588f), + TOBN(0x3ee2bebd, 0x0304804c), TOBN(0xa8fb9a60, 0xc2c990b9)}}, + {{TOBN(0xd14d32fe, 0x39251114), TOBN(0x36bf25bc, 0xcac73366), + TOBN(0xc9562c66, 0xdba7495c), TOBN(0x324d301b, 0x46ad348b)}, + {TOBN(0x9f46620c, 0xd670407e), TOBN(0x0ea8d4f1, 0xe3733a01), + TOBN(0xd396d532, 0xb0c324e0), TOBN(0x5b211a0e, 0x03c317cd)}}, + {{TOBN(0x090d7d20, 0x5ffe7b37), TOBN(0x3b7f3efb, 0x1747d2da), + TOBN(0xa2cb525f, 0xb54fc519), TOBN(0x6e220932, 0xf66a971e)}, + {TOBN(0xddc160df, 0xb486d440), TOBN(0x7fcfec46, 0x3fe13465), + TOBN(0x83da7e4e, 0x76e4c151), TOBN(0xd6fa48a1, 0xd8d302b5)}}, + {{TOBN(0xc6304f26, 0x5872cd88), TOBN(0x806c1d3c, 0x278b90a1), + TOBN(0x3553e725, 0xcaf0bc1c), TOBN(0xff59e603, 0xbb9d8d5c)}, + {TOBN(0xa4550f32, 0x7a0b85dd), TOBN(0xdec5720a, 0x93ecc217), + TOBN(0x0b88b741, 0x69d62213), TOBN(0x7212f245, 0x5b365955)}}, + {{TOBN(0x20764111, 0xb5cae787), TOBN(0x13cb7f58, 0x1dfd3124), + TOBN(0x2dca77da, 0x1175aefb), TOBN(0xeb75466b, 0xffaae775)}, + {TOBN(0x74d76f3b, 0xdb6cff32), TOBN(0x7440f37a, 0x61fcda9a), + TOBN(0x1bb3ac92, 0xb525028b), TOBN(0x20fbf8f7, 0xa1975f29)}}, + {{TOBN(0x982692e1, 0xdf83097f), TOBN(0x28738f6c, 0x554b0800), + TOBN(0xdc703717, 0xa2ce2f2f), TOBN(0x7913b93c, 0x40814194)}, + {TOBN(0x04924593, 0x1fe89636), TOBN(0x7b98443f, 0xf78834a6), + TOBN(0x11c6ab01, 0x5114a5a1), TOBN(0x60deb383, 0xffba5f4c)}}, + {{TOBN(0x4caa54c6, 0x01a982e6), TOBN(0x1dd35e11, 0x3491cd26), + TOBN(0x973c315f, 0x7cbd6b05), TOBN(0xcab00775, 0x52494724)}, + {TOBN(0x04659b1f, 0x6565e15a), TOBN(0xbf30f529, 0x8c8fb026), + TOBN(0xfc21641b, 0xa8a0de37), TOBN(0xe9c7a366, 0xfa5e5114)}}, + {{TOBN(0xdb849ca5, 0x52f03ad8), TOBN(0xc7e8dbe9, 0x024e35c0), + TOBN(0xa1a2bbac, 0xcfc3c789), TOBN(0xbf733e7d, 0x9c26f262)}, + {TOBN(0x882ffbf5, 0xb8444823), TOBN(0xb7224e88, 0x6bf8483b), + TOBN(0x53023b8b, 0x65bef640), TOBN(0xaabfec91, 0xd4d5f8cd)}}, + {{TOBN(0xa40e1510, 0x079ea1bd), TOBN(0x1ad9addc, 0xd05d5d26), + TOBN(0xdb3f2eab, 0x13e68d4f), TOBN(0x1cff1ae2, 0x640f803f)}, + {TOBN(0xe0e7b749, 0xd4cee117), TOBN(0x8e9f275b, 0x4036d909), + TOBN(0xce34e31d, 0x8f4d4c38), TOBN(0x22b37f69, 0xd75130fc)}}, + {{TOBN(0x83e0f1fd, 0xb4014604), TOBN(0xa8ce9919, 0x89415078), + TOBN(0x82375b75, 0x41792efe), TOBN(0x4f59bf5c, 0x97d4515b)}, + {TOBN(0xac4f324f, 0x923a277d), TOBN(0xd9bc9b7d, 0x650f3406), + TOBN(0xc6fa87d1, 0x8a39bc51), TOBN(0x82588530, 0x5ccc108f)}}, + {{TOBN(0x5ced3c9f, 0x82e4c634), TOBN(0x8efb8314, 0x3a4464f8), + TOBN(0xe706381b, 0x7a1dca25), TOBN(0x6cd15a3c, 0x5a2a412b)}, + {TOBN(0x9347a8fd, 0xbfcd8fb5), TOBN(0x31db2eef, 0x6e54cd22), + TOBN(0xc4aeb11e, 0xf8d8932f), TOBN(0x11e7c1ed, 0x344411af)}}, + {{TOBN(0x2653050c, 0xdc9a151e), TOBN(0x9edbfc08, 0x3bb0a859), + TOBN(0x926c81c7, 0xfd5691e7), TOBN(0x9c1b2342, 0x6f39019a)}, + {TOBN(0x64a81c8b, 0x7f8474b9), TOBN(0x90657c07, 0x01761819), + TOBN(0x390b3331, 0x55e0375a), TOBN(0xc676c626, 0xb6ebc47d)}}, + {{TOBN(0x51623247, 0xb7d6dee8), TOBN(0x0948d927, 0x79659313), + TOBN(0x99700161, 0xe9ab35ed), TOBN(0x06cc32b4, 0x8ddde408)}, + {TOBN(0x6f2fd664, 0x061ef338), TOBN(0x1606fa02, 0xc202e9ed), + TOBN(0x55388bc1, 0x929ba99b), TOBN(0xc4428c5e, 0x1e81df69)}}, + {{TOBN(0xce2028ae, 0xf91b0b2a), TOBN(0xce870a23, 0xf03dfd3f), + TOBN(0x66ec2c87, 0x0affe8ed), TOBN(0xb205fb46, 0x284d0c00)}, + {TOBN(0xbf5dffe7, 0x44cefa48), TOBN(0xb6fc37a8, 0xa19876d7), + TOBN(0xbecfa84c, 0x08b72863), TOBN(0xd7205ff5, 0x2576374f)}}, + {{TOBN(0x80330d32, 0x8887de41), TOBN(0x5de0df0c, 0x869ea534), + TOBN(0x13f42753, 0x3c56ea17), TOBN(0xeb1f6069, 0x452b1a78)}, + {TOBN(0x50474396, 0xe30ea15c), TOBN(0x575816a1, 0xc1494125), + TOBN(0xbe1ce55b, 0xfe6bb38f), TOBN(0xb901a948, 0x96ae30f7)}}, + {{TOBN(0xe5af0f08, 0xd8fc3548), TOBN(0x5010b5d0, 0xd73bfd08), + TOBN(0x993d2880, 0x53fe655a), TOBN(0x99f2630b, 0x1c1309fd)}, + {TOBN(0xd8677baf, 0xb4e3b76f), TOBN(0x14e51ddc, 0xb840784b), + TOBN(0x326c750c, 0xbf0092ce), TOBN(0xc83d306b, 0xf528320f)}}, + {{TOBN(0xc4456715, 0x77d4715c), TOBN(0xd30019f9, 0x6b703235), + TOBN(0x207ccb2e, 0xd669e986), TOBN(0x57c824af, 0xf6dbfc28)}, + {TOBN(0xf0eb532f, 0xd8f92a23), TOBN(0x4a557fd4, 0x9bb98fd2), + TOBN(0xa57acea7, 0xc1e6199a), TOBN(0x0c663820, 0x8b94b1ed)}}, + {{TOBN(0x9b42be8f, 0xf83a9266), TOBN(0xc7741c97, 0x0101bd45), + TOBN(0x95770c11, 0x07bd9ceb), TOBN(0x1f50250a, 0x8b2e0744)}, + {TOBN(0xf762eec8, 0x1477b654), TOBN(0xc65b900e, 0x15efe59a), + TOBN(0x88c96148, 0x9546a897), TOBN(0x7e8025b3, 0xc30b4d7c)}}, + {{TOBN(0xae4065ef, 0x12045cf9), TOBN(0x6fcb2caf, 0x9ccce8bd), + TOBN(0x1fa0ba4e, 0xf2cf6525), TOBN(0xf683125d, 0xcb72c312)}, + {TOBN(0xa01da4ea, 0xe312410e), TOBN(0x67e28677, 0x6cd8e830), + TOBN(0xabd95752, 0x98fb3f07), TOBN(0x05f11e11, 0xeef649a5)}}, + {{TOBN(0xba47faef, 0x9d3472c2), TOBN(0x3adff697, 0xc77d1345), + TOBN(0x4761fa04, 0xdd15afee), TOBN(0x64f1f61a, 0xb9e69462)}, + {TOBN(0xfa691fab, 0x9bfb9093), TOBN(0x3df8ae8f, 0xa1133dfe), + TOBN(0xcd5f8967, 0x58cc710d), TOBN(0xfbb88d50, 0x16c7fe79)}}, + {{TOBN(0x8e011b4c, 0xe88c50d1), TOBN(0x7532e807, 0xa8771c4f), + TOBN(0x64c78a48, 0xe2278ee4), TOBN(0x0b283e83, 0x3845072a)}, + {TOBN(0x98a6f291, 0x49e69274), TOBN(0xb96e9668, 0x1868b21c), + TOBN(0x38f0adc2, 0xb1a8908e), TOBN(0x90afcff7, 0x1feb829d)}}, + {{TOBN(0x9915a383, 0x210b0856), TOBN(0xa5a80602, 0xdef04889), + TOBN(0x800e9af9, 0x7c64d509), TOBN(0x81382d0b, 0xb8996f6f)}, + {TOBN(0x490eba53, 0x81927e27), TOBN(0x46c63b32, 0x4af50182), + TOBN(0x784c5fd9, 0xd3ad62ce), TOBN(0xe4fa1870, 0xf8ae8736)}}, + {{TOBN(0x4ec9d0bc, 0xd7466b25), TOBN(0x84ddbe1a, 0xdb235c65), + TOBN(0x5e2645ee, 0x163c1688), TOBN(0x570bd00e, 0x00eba747)}, + {TOBN(0xfa51b629, 0x128bfa0f), TOBN(0x92fce1bd, 0x6c1d3b68), + TOBN(0x3e7361dc, 0xb66778b1), TOBN(0x9c7d249d, 0x5561d2bb)}}, + {{TOBN(0xa40b28bf, 0x0bbc6229), TOBN(0x1c83c05e, 0xdfd91497), + TOBN(0x5f9f5154, 0xf083df05), TOBN(0xbac38b3c, 0xeee66c9d)}, + {TOBN(0xf71db7e3, 0xec0dfcfd), TOBN(0xf2ecda8e, 0x8b0a8416), + TOBN(0x52fddd86, 0x7812aa66), TOBN(0x2896ef10, 0x4e6f4272)}}, + {{TOBN(0xff27186a, 0x0fe9a745), TOBN(0x08249fcd, 0x49ca70db), + TOBN(0x7425a2e6, 0x441cac49), TOBN(0xf4a0885a, 0xece5ff57)}, + {TOBN(0x6e2cb731, 0x7d7ead58), TOBN(0xf96cf7d6, 0x1898d104), + TOBN(0xafe67c9d, 0x4f2c9a89), TOBN(0x89895a50, 0x1c7bf5bc)}}, + {{TOBN(0xdc7cb8e5, 0x573cecfa), TOBN(0x66497eae, 0xd15f03e6), + TOBN(0x6bc0de69, 0x3f084420), TOBN(0x323b9b36, 0xacd532b0)}, + {TOBN(0xcfed390a, 0x0115a3c1), TOBN(0x9414c40b, 0x2d65ca0e), + TOBN(0x641406bd, 0x2f530c78), TOBN(0x29369a44, 0x833438f2)}}, + {{TOBN(0x996884f5, 0x903fa271), TOBN(0xe6da0fd2, 0xb9da921e), + TOBN(0xa6f2f269, 0x5db01e54), TOBN(0x1ee3e9bd, 0x6876214e)}, + {TOBN(0xa26e181c, 0xe27a9497), TOBN(0x36d254e4, 0x8e215e04), + TOBN(0x42f32a6c, 0x252cabca), TOBN(0x99481487, 0x80b57614)}}, + {{TOBN(0x4c4dfe69, 0x40d9cae1), TOBN(0x05869580, 0x11a10f09), + TOBN(0xca287b57, 0x3491b64b), TOBN(0x77862d5d, 0x3fd4a53b)}, + {TOBN(0xbf94856e, 0x50349126), TOBN(0x2be30bd1, 0x71c5268f), + TOBN(0x10393f19, 0xcbb650a6), TOBN(0x639531fe, 0x778cf9fd)}}, + {{TOBN(0x02556a11, 0xb2935359), TOBN(0xda38aa96, 0xaf8c126e), + TOBN(0x47dbe6c2, 0x0960167f), TOBN(0x37bbabb6, 0x501901cd)}, + {TOBN(0xb6e979e0, 0x2c947778), TOBN(0xd69a5175, 0x7a1a1dc6), + TOBN(0xc3ed5095, 0x9d9faf0c), TOBN(0x4dd9c096, 0x1d5fa5f0)}}, + {{TOBN(0xa0c4304d, 0x64f16ea8), TOBN(0x8b1cac16, 0x7e718623), + TOBN(0x0b576546, 0x7c67f03e), TOBN(0x559cf5ad, 0xcbd88c01)}, + {TOBN(0x074877bb, 0x0e2af19a), TOBN(0x1f717ec1, 0xa1228c92), + TOBN(0x70bcb800, 0x326e8920), TOBN(0xec6e2c5c, 0x4f312804)}}, + {{TOBN(0x426aea7d, 0x3fca4752), TOBN(0xf12c0949, 0x2211f62a), + TOBN(0x24beecd8, 0x7be7b6b5), TOBN(0xb77eaf4c, 0x36d7a27d)}, + {TOBN(0x154c2781, 0xfda78fd3), TOBN(0x848a83b0, 0x264eeabe), + TOBN(0x81287ef0, 0x4ffe2bc4), TOBN(0x7b6d88c6, 0xb6b6fc2a)}}, + {{TOBN(0x805fb947, 0xce417d99), TOBN(0x4b93dcc3, 0x8b916cc4), + TOBN(0x72e65bb3, 0x21273323), TOBN(0xbcc1badd, 0x6ea9886e)}, + {TOBN(0x0e223011, 0x4bc5ee85), TOBN(0xa561be74, 0xc18ee1e4), + TOBN(0x762fd2d4, 0xa6bcf1f1), TOBN(0x50e6a5a4, 0x95231489)}}, + {{TOBN(0xca96001f, 0xa00b500b), TOBN(0x5c098cfc, 0x5d7dcdf5), + TOBN(0xa64e2d2e, 0x8c446a85), TOBN(0xbae9bcf1, 0x971f3c62)}, + {TOBN(0x4ec22683, 0x8435a2c5), TOBN(0x8ceaed6c, 0x4bad4643), + TOBN(0xe9f8fb47, 0xccccf4e3), TOBN(0xbd4f3fa4, 0x1ce3b21e)}}, + {{TOBN(0xd79fb110, 0xa3db3292), TOBN(0xe28a37da, 0xb536c66a), + TOBN(0x279ce87b, 0x8e49e6a9), TOBN(0x70ccfe8d, 0xfdcec8e3)}, + {TOBN(0x2193e4e0, 0x3ba464b2), TOBN(0x0f39d60e, 0xaca9a398), + TOBN(0x7d7932af, 0xf82c12ab), TOBN(0xd8ff50ed, 0x91e7e0f7)}}, + {{TOBN(0xea961058, 0xfa28a7e0), TOBN(0xc726cf25, 0x0bf5ec74), + TOBN(0xe74d55c8, 0xdb229666), TOBN(0x0bd9abbf, 0xa57f5799)}, + {TOBN(0x7479ef07, 0x4dfc47b3), TOBN(0xd9c65fc3, 0x0c52f91d), + TOBN(0x8e0283fe, 0x36a8bde2), TOBN(0xa32a8b5e, 0x7d4b7280)}}, + {{TOBN(0x6a677c61, 0x12e83233), TOBN(0x0fbb3512, 0xdcc9bf28), + TOBN(0x562e8ea5, 0x0d780f61), TOBN(0x0db8b22b, 0x1dc4e89c)}, + {TOBN(0x0a6fd1fb, 0x89be0144), TOBN(0x8c77d246, 0xca57113b), + TOBN(0x4639075d, 0xff09c91c), TOBN(0x5b47b17f, 0x5060824c)}}, + {{TOBN(0x58aea2b0, 0x16287b52), TOBN(0xa1343520, 0xd0cd8eb0), + TOBN(0x6148b4d0, 0xc5d58573), TOBN(0xdd2b6170, 0x291c68ae)}, + {TOBN(0xa61b3929, 0x1da3b3b7), TOBN(0x5f946d79, 0x08c4ac10), + TOBN(0x4105d4a5, 0x7217d583), TOBN(0x5061da3d, 0x25e6de5e)}}, + {{TOBN(0x3113940d, 0xec1b4991), TOBN(0xf12195e1, 0x36f485ae), + TOBN(0xa7507fb2, 0x731a2ee0), TOBN(0x95057a8e, 0x6e9e196e)}, + {TOBN(0xa3c2c911, 0x2e130136), TOBN(0x97dfbb36, 0x33c60d15), + TOBN(0xcaf3c581, 0xb300ee2b), TOBN(0x77f25d90, 0xf4bac8b8)}}, + {{TOBN(0xdb1c4f98, 0x6d840cd6), TOBN(0x471d62c0, 0xe634288c), + TOBN(0x8ec2f85e, 0xcec8a161), TOBN(0x41f37cbc, 0xfa6f4ae2)}, + {TOBN(0x6793a20f, 0x4b709985), TOBN(0x7a7bd33b, 0xefa8985b), + TOBN(0x2c6a3fbd, 0x938e6446), TOBN(0x19042619, 0x2a8d47c1)}}, + {{TOBN(0x16848667, 0xcc36975f), TOBN(0x02acf168, 0x9d5f1dfb), + TOBN(0x62d41ad4, 0x613baa94), TOBN(0xb56fbb92, 0x9f684670)}, + {TOBN(0xce610d0d, 0xe9e40569), TOBN(0x7b99c65f, 0x35489fef), + TOBN(0x0c88ad1b, 0x3df18b97), TOBN(0x81b7d9be, 0x5d0e9edb)}}, + {{TOBN(0xd85218c0, 0xc716cc0a), TOBN(0xf4b5ff90, 0x85691c49), + TOBN(0xa4fd666b, 0xce356ac6), TOBN(0x17c72895, 0x4b327a7a)}, + {TOBN(0xf93d5085, 0xda6be7de), TOBN(0xff71530e, 0x3301d34e), + TOBN(0x4cd96442, 0xd8f448e8), TOBN(0x9283d331, 0x2ed18ffa)}}, + {{TOBN(0x4d33dd99, 0x2a849870), TOBN(0xa716964b, 0x41576335), + TOBN(0xff5e3a9b, 0x179be0e5), TOBN(0x5b9d6b1b, 0x83b13632)}, + {TOBN(0x3b8bd7d4, 0xa52f313b), TOBN(0xc9dd95a0, 0x637a4660), + TOBN(0x30035962, 0x0b3e218f), TOBN(0xce1481a3, 0xc7b28a3c)}}, + {{TOBN(0xab41b43a, 0x43228d83), TOBN(0x24ae1c30, 0x4ad63f99), + TOBN(0x8e525f1a, 0x46a51229), TOBN(0x14af860f, 0xcd26d2b4)}, + {TOBN(0xd6baef61, 0x3f714aa1), TOBN(0xf51865ad, 0xeb78795e), + TOBN(0xd3e21fce, 0xe6a9d694), TOBN(0x82ceb1dd, 0x8a37b527)}}}}; diff --git a/vendor/ring/crypto/fipsmodule/ec/p256-x86_64.c b/vendor/ring/crypto/fipsmodule/ec/p256-x86_64.c new file mode 100644 index 00000000..787b950e --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/ec/p256-x86_64.c @@ -0,0 +1,279 @@ +/* + * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2014, Intel Corporation. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + * + * Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) + * (1) Intel Corporation, Israel Development Center, Haifa, Israel + * (2) University of Haifa, Israel + * + * Reference: + * S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with + * 256 Bit Primes" + */ + +#include + +#include "../../limbs/limbs.inl" + +#include + +#include "p256-x86_64.h" + +#if defined(OPENSSL_USE_NISTZ256) + +typedef P256_POINT_AFFINE PRECOMP256_ROW[64]; + +// One converted into the Montgomery domain +static const BN_ULONG ONE[P256_LIMBS] = { + TOBN(0x00000000, 0x00000001), TOBN(0xffffffff, 0x00000000), + TOBN(0xffffffff, 0xffffffff), TOBN(0x00000000, 0xfffffffe), +}; + +// Precomputed tables for the default generator +#include "p256-x86_64-table.h" + +// Recode window to a signed digit, see |GFp_nistp_recode_scalar_bits| in +// util.c for details +static crypto_word booth_recode_w5(crypto_word in) { + crypto_word s, d; + + s = ~((in >> 5) - 1); + d = (1 << 6) - in - 1; + d = (d & s) | (in & ~s); + d = (d >> 1) + (d & 1); + + return (d << 1) + (s & 1); +} + +static crypto_word booth_recode_w7(crypto_word in) { + crypto_word s, d; + + s = ~((in >> 7) - 1); + d = (1 << 8) - in - 1; + d = (d & s) | (in & ~s); + d = (d >> 1) + (d & 1); + + return (d << 1) + (s & 1); +} + +// copy_conditional copies |src| to |dst| if |move| is one and leaves it as-is +// if |move| is zero. +// +// WARNING: this breaks the usual convention of constant-time functions +// returning masks. +static void copy_conditional(BN_ULONG dst[P256_LIMBS], + const BN_ULONG src[P256_LIMBS], BN_ULONG move) { + BN_ULONG mask1 = ((BN_ULONG)0) - move; + BN_ULONG mask2 = ~mask1; + + dst[0] = (src[0] & mask1) ^ (dst[0] & mask2); + dst[1] = (src[1] & mask1) ^ (dst[1] & mask2); + dst[2] = (src[2] & mask1) ^ (dst[2] & mask2); + dst[3] = (src[3] & mask1) ^ (dst[3] & mask2); + if (P256_LIMBS == 8) { + dst[4] = (src[4] & mask1) ^ (dst[4] & mask2); + dst[5] = (src[5] & mask1) ^ (dst[5] & mask2); + dst[6] = (src[6] & mask1) ^ (dst[6] & mask2); + dst[7] = (src[7] & mask1) ^ (dst[7] & mask2); + } +} + +// is_not_zero returns one iff in != 0 and zero otherwise. +// +// WARNING: this breaks the usual convention of constant-time functions +// returning masks. +// +// (define-fun is_not_zero ((in (_ BitVec 64))) (_ BitVec 64) +// (bvlshr (bvor in (bvsub #x0000000000000000 in)) #x000000000000003f) +// ) +// +// (declare-fun x () (_ BitVec 64)) +// +// (assert (and (= x #x0000000000000000) (= (is_not_zero x) #x0000000000000001))) +// (check-sat) +// +// (assert (and (not (= x #x0000000000000000)) (= (is_not_zero x) #x0000000000000000))) +// (check-sat) +// +static BN_ULONG is_not_zero(BN_ULONG in) { + in |= (0 - in); + in >>= BN_BITS2 - 1; + return in; +} + + +// r = p * p_scalar +static void ecp_nistz256_windowed_mul(P256_POINT *r, + const BN_ULONG p_scalar[P256_LIMBS], + const BN_ULONG p_x[P256_LIMBS], + const BN_ULONG p_y[P256_LIMBS]) { + debug_assert_nonsecret(r != NULL); + debug_assert_nonsecret(p_scalar != NULL); + debug_assert_nonsecret(p_x != NULL); + debug_assert_nonsecret(p_y != NULL); + + static const size_t kWindowSize = 5; + static const crypto_word kMask = (1 << (5 /* kWindowSize */ + 1)) - 1; + + // A |P256_POINT| is (3 * 32) = 96 bytes, and the 64-byte alignment should + // add no more than 63 bytes of overhead. Thus, |table| should require + // ~1599 ((96 * 16) + 63) bytes of stack space. + alignas(64) P256_POINT table[16]; + P256_SCALAR_BYTES p_str; + p256_scalar_bytes_from_limbs(p_str, p_scalar); + + // table[0] is implicitly (0,0,0) (the point at infinity), therefore it is + // not stored. All other values are actually stored with an offset of -1 in + // table. + P256_POINT *row = table; + + limbs_copy(row[1 - 1].X, p_x, P256_LIMBS); + limbs_copy(row[1 - 1].Y, p_y, P256_LIMBS); + limbs_copy(row[1 - 1].Z, ONE, P256_LIMBS); + + ecp_nistz256_point_double(&row[2 - 1], &row[1 - 1]); + ecp_nistz256_point_add(&row[3 - 1], &row[2 - 1], &row[1 - 1]); + ecp_nistz256_point_double(&row[4 - 1], &row[2 - 1]); + ecp_nistz256_point_double(&row[6 - 1], &row[3 - 1]); + ecp_nistz256_point_double(&row[8 - 1], &row[4 - 1]); + ecp_nistz256_point_double(&row[12 - 1], &row[6 - 1]); + ecp_nistz256_point_add(&row[5 - 1], &row[4 - 1], &row[1 - 1]); + ecp_nistz256_point_add(&row[7 - 1], &row[6 - 1], &row[1 - 1]); + ecp_nistz256_point_add(&row[9 - 1], &row[8 - 1], &row[1 - 1]); + ecp_nistz256_point_add(&row[13 - 1], &row[12 - 1], &row[1 - 1]); + ecp_nistz256_point_double(&row[14 - 1], &row[7 - 1]); + ecp_nistz256_point_double(&row[10 - 1], &row[5 - 1]); + ecp_nistz256_point_add(&row[15 - 1], &row[14 - 1], &row[1 - 1]); + ecp_nistz256_point_add(&row[11 - 1], &row[10 - 1], &row[1 - 1]); + ecp_nistz256_point_double(&row[16 - 1], &row[8 - 1]); + + BN_ULONG tmp[P256_LIMBS]; + alignas(32) P256_POINT h; + size_t index = 255; + crypto_word wvalue = p_str[(index - 1) / 8]; + wvalue = (wvalue >> ((index - 1) % 8)) & kMask; + + ecp_nistz256_select_w5(r, table, booth_recode_w5(wvalue) >> 1); + + while (index >= 5) { + if (index != 255) { + size_t off = (index - 1) / 8; + + wvalue = (crypto_word)p_str[off] | (crypto_word)p_str[off + 1] << 8; + wvalue = (wvalue >> ((index - 1) % 8)) & kMask; + + wvalue = booth_recode_w5(wvalue); + + ecp_nistz256_select_w5(&h, table, wvalue >> 1); + + ecp_nistz256_neg(tmp, h.Y); + copy_conditional(h.Y, tmp, (wvalue & 1)); + + ecp_nistz256_point_add(r, r, &h); + } + + index -= kWindowSize; + + ecp_nistz256_point_double(r, r); + ecp_nistz256_point_double(r, r); + ecp_nistz256_point_double(r, r); + ecp_nistz256_point_double(r, r); + ecp_nistz256_point_double(r, r); + } + + // Final window + wvalue = p_str[0]; + wvalue = (wvalue << 1) & kMask; + + wvalue = booth_recode_w5(wvalue); + + ecp_nistz256_select_w5(&h, table, wvalue >> 1); + + ecp_nistz256_neg(tmp, h.Y); + copy_conditional(h.Y, tmp, wvalue & 1); + + ecp_nistz256_point_add(r, r, &h); +} + +typedef union { + P256_POINT p; + P256_POINT_AFFINE a; +} p256_point_union_t; + +static crypto_word calc_first_wvalue(size_t *index, const uint8_t p_str[33]) { + static const size_t kWindowSize = 7; + static const crypto_word kMask = (1 << (7 /* kWindowSize */ + 1)) - 1; + *index = kWindowSize; + + crypto_word wvalue = ((crypto_word)p_str[0] << 1) & kMask; + return booth_recode_w7(wvalue); +} + +static crypto_word calc_wvalue(size_t *index, const uint8_t p_str[33]) { + static const size_t kWindowSize = 7; + static const crypto_word kMask = (1 << (7 /* kWindowSize */ + 1)) - 1; + + const size_t off = (*index - 1) / 8; + crypto_word wvalue = + (crypto_word)p_str[off] | (crypto_word)p_str[off + 1] << 8; + wvalue = (wvalue >> ((*index - 1) % 8)) & kMask; + *index += kWindowSize; + + return booth_recode_w7(wvalue); +} + +void GFp_p256_point_mul(P256_POINT *r, const Limb p_scalar[P256_LIMBS], + const Limb p_x[P256_LIMBS], + const Limb p_y[P256_LIMBS]) { + alignas(32) P256_POINT out; + ecp_nistz256_windowed_mul(&out, p_scalar, p_x, p_y); + + limbs_copy(r->X, out.X, P256_LIMBS); + limbs_copy(r->Y, out.Y, P256_LIMBS); + limbs_copy(r->Z, out.Z, P256_LIMBS); +} + +void GFp_p256_point_mul_base(P256_POINT *r, const Limb scalar[P256_LIMBS]) { + alignas(32) p256_point_union_t t, p; + + P256_SCALAR_BYTES p_str; + p256_scalar_bytes_from_limbs(p_str, scalar); + + // First window + size_t index = 0; + crypto_word wvalue = calc_first_wvalue(&index, p_str); + + ecp_nistz256_select_w7(&p.a, ecp_nistz256_precomputed[0], wvalue >> 1); + ecp_nistz256_neg(p.p.Z, p.p.Y); + copy_conditional(p.p.Y, p.p.Z, wvalue & 1); + + // Convert |p| from affine to Jacobian coordinates. We set Z to zero if |p| + // is infinity and |ONE| otherwise. |p| was computed from the table, so it + // is infinity iff |wvalue >> 1| is zero. + GFp_memset(p.p.Z, 0, sizeof(p.p.Z)); + copy_conditional(p.p.Z, ONE, is_not_zero(wvalue >> 1)); + + for (int i = 1; i < 37; i++) { + wvalue = calc_wvalue(&index, p_str); + + ecp_nistz256_select_w7(&t.a, ecp_nistz256_precomputed[i], wvalue >> 1); + + ecp_nistz256_neg(t.p.Z, t.a.Y); + copy_conditional(t.a.Y, t.p.Z, wvalue & 1); + + // Note |ecp_nistz256_point_add_affine| does not work if |p.p| and |t.a| + // are the same non-infinity point. + ecp_nistz256_point_add_affine(&p.p, &p.p, &t.a); + } + + limbs_copy(r->X, p.p.X, P256_LIMBS); + limbs_copy(r->Y, p.p.Y, P256_LIMBS); + limbs_copy(r->Z, p.p.Z, P256_LIMBS); +} + +#endif /* defined(OPENSSL_USE_NISTZ256) */ diff --git a/vendor/ring/crypto/fipsmodule/ec/p256-x86_64.h b/vendor/ring/crypto/fipsmodule/ec/p256-x86_64.h new file mode 100644 index 00000000..651261c3 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/ec/p256-x86_64.h @@ -0,0 +1,109 @@ +/* + * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2014, Intel Corporation. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + * + * Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) + * (1) Intel Corporation, Israel Development Center, Haifa, Israel + * (2) University of Haifa, Israel + * + * Reference: + * S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with + * 256 Bit Primes" + */ + +#ifndef OPENSSL_HEADER_EC_P256_X86_64_H +#define OPENSSL_HEADER_EC_P256_X86_64_H + +#include + +#include "p256_shared.h" + +#include "../bn/internal.h" + +#if defined(OPENSSL_USE_NISTZ256) + +#define ecp_nistz256_neg GFp_nistz256_neg +#define ecp_nistz256_select_w5 GFp_nistz256_select_w5 +#define ecp_nistz256_select_w7 GFp_nistz256_select_w7 +#define ecp_nistz256_point_double GFp_p256_point_double +#define ecp_nistz256_point_add GFp_p256_point_add +#define ecp_nistz256_point_add_affine GFp_p256_point_add_affine + +// ecp_nistz256_neg sets |res| to -|a| mod P. +void ecp_nistz256_neg(BN_ULONG res[P256_LIMBS], const BN_ULONG a[P256_LIMBS]); + +// ecp_nistz256_mul_mont sets |res| to |a| * |b| * 2^-256 mod P. +void ecp_nistz256_mul_mont(BN_ULONG res[P256_LIMBS], + const BN_ULONG a[P256_LIMBS], + const BN_ULONG b[P256_LIMBS]); + +// ecp_nistz256_sqr_mont sets |res| to |a| * |a| * 2^-256 mod P. +void ecp_nistz256_sqr_mont(BN_ULONG res[P256_LIMBS], + const BN_ULONG a[P256_LIMBS]); + + +// P-256 scalar operations. +// +// The following functions compute modulo N, where N is the order of P-256. They +// take fully-reduced inputs and give fully-reduced outputs. + +// ecp_nistz256_ord_mul_mont sets |res| to |a| * |b| where inputs and outputs +// are in Montgomery form. That is, |res| is |a| * |b| * 2^-256 mod N. +void ecp_nistz256_ord_mul_mont(BN_ULONG res[P256_LIMBS], + const BN_ULONG a[P256_LIMBS], + const BN_ULONG b[P256_LIMBS]); + +// ecp_nistz256_ord_sqr_mont sets |res| to |a|^(2*|rep|) where inputs and +// outputs are in Montgomery form. That is, |res| is +// (|a| * 2^-256)^(2*|rep|) * 2^256 mod N. +void ecp_nistz256_ord_sqr_mont(BN_ULONG res[P256_LIMBS], + const BN_ULONG a[P256_LIMBS], BN_ULONG rep); + + + +// P-256 point operations. +// +// The following functions may be used in-place. All coordinates are in the +// Montgomery domain. + +// A P256_POINT_AFFINE represents a P-256 point in affine coordinates. Infinity +// is encoded as (0, 0). +typedef struct { + BN_ULONG X[P256_LIMBS]; + BN_ULONG Y[P256_LIMBS]; +} P256_POINT_AFFINE; + +// ecp_nistz256_select_w5 sets |*val| to |in_t[index-1]| if 1 <= |index| <= 16 +// and all zeros (the point at infinity) if |index| is 0. This is done in +// constant time. +void ecp_nistz256_select_w5(P256_POINT *val, const P256_POINT in_t[16], + crypto_word index); + +// ecp_nistz256_select_w7 sets |*val| to |in_t[index-1]| if 1 <= |index| <= 64 +// and all zeros (the point at infinity) if |index| is 0. This is done in +// constant time. +void ecp_nistz256_select_w7(P256_POINT_AFFINE *val, + const P256_POINT_AFFINE in_t[64], + crypto_word index); + +// ecp_nistz256_point_double sets |r| to |a| doubled. +void ecp_nistz256_point_double(P256_POINT *r, const P256_POINT *a); + +// ecp_nistz256_point_add adds |a| to |b| and places the result in |r|. +void ecp_nistz256_point_add(P256_POINT *r, const P256_POINT *a, + const P256_POINT *b); + +// ecp_nistz256_point_add_affine adds |a| to |b| and places the result in +// |r|. |a| and |b| must not represent the same point unless they are both +// infinity. +void ecp_nistz256_point_add_affine(P256_POINT *r, const P256_POINT *a, + const P256_POINT_AFFINE *b); + +#endif /* defined(OPENSSL_USE_NISTZ256) */ + +#endif // OPENSSL_HEADER_EC_P256_X86_64_H diff --git a/vendor/ring/crypto/fipsmodule/ec/p256.c b/vendor/ring/crypto/fipsmodule/ec/p256.c new file mode 100644 index 00000000..9090e699 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/ec/p256.c @@ -0,0 +1,494 @@ +/* Copyright (c) 2020, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +// An implementation of the NIST P-256 elliptic curve point multiplication. +// 256-bit Montgomery form for 64 and 32-bit. Field operations are generated by +// Fiat, which lives in //third_party/fiat. + +#include + +#include "../../limbs/limbs.h" +#include "../../limbs/limbs.inl" + +#include "p256_shared.h" + +#include "../../internal.h" +#include "./util.h" + +#if !defined(OPENSSL_USE_NISTZ256) + +#if defined(_MSC_VER) && !defined(__clang__) +// '=': conversion from 'int64_t' to 'int32_t', possible loss of data +#pragma warning(disable: 4242) +// '=': conversion from 'int32_t' to 'uint8_t', possible loss of data +#pragma warning(disable: 4244) +// 'initializing': conversion from 'size_t' to 'fiat_p256_limb_t' +#pragma warning(disable: 4267) +#endif + +#if defined(__GNUC__) +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wsign-conversion" +#endif + +// MSVC does not implement uint128_t, and crashes with intrinsics +#if defined(BORINGSSL_HAS_UINT128) +#if defined(__GNUC__) +#pragma GCC diagnostic ignored "-Wpedantic" +#endif +#define BORINGSSL_NISTP256_64BIT 1 +#include "../../../third_party/fiat/p256_64.h" +#else +#include "../../../third_party/fiat/p256_32.h" +#endif + + +// utility functions, handwritten + +#if defined(BORINGSSL_NISTP256_64BIT) +#define FIAT_P256_NLIMBS 4 +typedef uint64_t fiat_p256_limb_t; +typedef uint64_t fiat_p256_felem[FIAT_P256_NLIMBS]; +static const fiat_p256_felem fiat_p256_one = {0x1, 0xffffffff00000000, + 0xffffffffffffffff, 0xfffffffe}; +#else // 64BIT; else 32BIT +#define FIAT_P256_NLIMBS 8 +typedef uint32_t fiat_p256_limb_t; +typedef uint32_t fiat_p256_felem[FIAT_P256_NLIMBS]; +static const fiat_p256_felem fiat_p256_one = { + 0x1, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffffe, 0x0}; +#endif // 64BIT + + +static fiat_p256_limb_t fiat_p256_nz( + const fiat_p256_limb_t in1[FIAT_P256_NLIMBS]) { + fiat_p256_limb_t ret; + fiat_p256_nonzero(&ret, in1); + return ret; +} + +static void fiat_p256_copy(fiat_p256_limb_t out[FIAT_P256_NLIMBS], + const fiat_p256_limb_t in1[FIAT_P256_NLIMBS]) { + for (size_t i = 0; i < FIAT_P256_NLIMBS; i++) { + out[i] = in1[i]; + } +} + +static void fiat_p256_cmovznz(fiat_p256_limb_t out[FIAT_P256_NLIMBS], + fiat_p256_limb_t t, + const fiat_p256_limb_t z[FIAT_P256_NLIMBS], + const fiat_p256_limb_t nz[FIAT_P256_NLIMBS]) { + fiat_p256_selectznz(out, !!t, z, nz); +} + +// Group operations +// ---------------- +// +// Building on top of the field operations we have the operations on the +// elliptic curve group itself. Points on the curve are represented in Jacobian +// coordinates. +// +// Both operations were transcribed to Coq and proven to correspond to naive +// implementations using Affine coordinates, for all suitable fields. In the +// Coq proofs, issues of constant-time execution and memory layout (aliasing) +// conventions were not considered. Specification of affine coordinates: +// +// As a sanity check, a proof that these points form a commutative group: +// + +// fiat_p256_point_double calculates 2*(x_in, y_in, z_in) +// +// The method is taken from: +// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b +// +// Coq transcription and correctness proof: +// +// +// +// Outputs can equal corresponding inputs, i.e., x_out == x_in is allowed. +// while x_out == y_in is not (maybe this works, but it's not tested). +static void fiat_p256_point_double(fiat_p256_felem x_out, fiat_p256_felem y_out, + fiat_p256_felem z_out, + const fiat_p256_felem x_in, + const fiat_p256_felem y_in, + const fiat_p256_felem z_in) { + fiat_p256_felem delta, gamma, beta, ftmp, ftmp2, tmptmp, alpha, fourbeta; + // delta = z^2 + fiat_p256_square(delta, z_in); + // gamma = y^2 + fiat_p256_square(gamma, y_in); + // beta = x*gamma + fiat_p256_mul(beta, x_in, gamma); + + // alpha = 3*(x-delta)*(x+delta) + fiat_p256_sub(ftmp, x_in, delta); + fiat_p256_add(ftmp2, x_in, delta); + + fiat_p256_add(tmptmp, ftmp2, ftmp2); + fiat_p256_add(ftmp2, ftmp2, tmptmp); + fiat_p256_mul(alpha, ftmp, ftmp2); + + // x' = alpha^2 - 8*beta + fiat_p256_square(x_out, alpha); + fiat_p256_add(fourbeta, beta, beta); + fiat_p256_add(fourbeta, fourbeta, fourbeta); + fiat_p256_add(tmptmp, fourbeta, fourbeta); + fiat_p256_sub(x_out, x_out, tmptmp); + + // z' = (y + z)^2 - gamma - delta + fiat_p256_add(delta, gamma, delta); + fiat_p256_add(ftmp, y_in, z_in); + fiat_p256_square(z_out, ftmp); + fiat_p256_sub(z_out, z_out, delta); + + // y' = alpha*(4*beta - x') - 8*gamma^2 + fiat_p256_sub(y_out, fourbeta, x_out); + fiat_p256_add(gamma, gamma, gamma); + fiat_p256_square(gamma, gamma); + fiat_p256_mul(y_out, alpha, y_out); + fiat_p256_add(gamma, gamma, gamma); + fiat_p256_sub(y_out, y_out, gamma); +} + +// fiat_p256_point_add calculates (x1, y1, z1) + (x2, y2, z2) +// +// The method is taken from: +// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-add-2007-bl, +// adapted for mixed addition (z2 = 1, or z2 = 0 for the point at infinity). +// +// Coq transcription and correctness proof: +// +// +// +// This function includes a branch for checking whether the two input points +// are equal, (while not equal to the point at infinity). This case never +// happens during single point multiplication, so there is no timing leak for +// ECDH or ECDSA signing. +static void fiat_p256_point_add(fiat_p256_felem x3, fiat_p256_felem y3, + fiat_p256_felem z3, const fiat_p256_felem x1, + const fiat_p256_felem y1, + const fiat_p256_felem z1, const int mixed, + const fiat_p256_felem x2, + const fiat_p256_felem y2, + const fiat_p256_felem z2) { + fiat_p256_felem x_out, y_out, z_out; + fiat_p256_limb_t z1nz = fiat_p256_nz(z1); + fiat_p256_limb_t z2nz = fiat_p256_nz(z2); + + // z1z1 = z1z1 = z1**2 + fiat_p256_felem z1z1; + fiat_p256_square(z1z1, z1); + + fiat_p256_felem u1, s1, two_z1z2; + if (!mixed) { + // z2z2 = z2**2 + fiat_p256_felem z2z2; + fiat_p256_square(z2z2, z2); + + // u1 = x1*z2z2 + fiat_p256_mul(u1, x1, z2z2); + + // two_z1z2 = (z1 + z2)**2 - (z1z1 + z2z2) = 2z1z2 + fiat_p256_add(two_z1z2, z1, z2); + fiat_p256_square(two_z1z2, two_z1z2); + fiat_p256_sub(two_z1z2, two_z1z2, z1z1); + fiat_p256_sub(two_z1z2, two_z1z2, z2z2); + + // s1 = y1 * z2**3 + fiat_p256_mul(s1, z2, z2z2); + fiat_p256_mul(s1, s1, y1); + } else { + // We'll assume z2 = 1 (special case z2 = 0 is handled later). + + // u1 = x1*z2z2 + fiat_p256_copy(u1, x1); + // two_z1z2 = 2z1z2 + fiat_p256_add(two_z1z2, z1, z1); + // s1 = y1 * z2**3 + fiat_p256_copy(s1, y1); + } + + // u2 = x2*z1z1 + fiat_p256_felem u2; + fiat_p256_mul(u2, x2, z1z1); + + // h = u2 - u1 + fiat_p256_felem h; + fiat_p256_sub(h, u2, u1); + + fiat_p256_limb_t xneq = fiat_p256_nz(h); + + // z_out = two_z1z2 * h + fiat_p256_mul(z_out, h, two_z1z2); + + // z1z1z1 = z1 * z1z1 + fiat_p256_felem z1z1z1; + fiat_p256_mul(z1z1z1, z1, z1z1); + + // s2 = y2 * z1**3 + fiat_p256_felem s2; + fiat_p256_mul(s2, y2, z1z1z1); + + // r = (s2 - s1)*2 + fiat_p256_felem r; + fiat_p256_sub(r, s2, s1); + fiat_p256_add(r, r, r); + + fiat_p256_limb_t yneq = fiat_p256_nz(r); + + fiat_p256_limb_t is_nontrivial_double = constant_time_is_zero_w(xneq | yneq) & + ~constant_time_is_zero_w(z1nz) & + ~constant_time_is_zero_w(z2nz); + if (is_nontrivial_double) { + fiat_p256_point_double(x3, y3, z3, x1, y1, z1); + return; + } + + // I = (2h)**2 + fiat_p256_felem i; + fiat_p256_add(i, h, h); + fiat_p256_square(i, i); + + // J = h * I + fiat_p256_felem j; + fiat_p256_mul(j, h, i); + + // V = U1 * I + fiat_p256_felem v; + fiat_p256_mul(v, u1, i); + + // x_out = r**2 - J - 2V + fiat_p256_square(x_out, r); + fiat_p256_sub(x_out, x_out, j); + fiat_p256_sub(x_out, x_out, v); + fiat_p256_sub(x_out, x_out, v); + + // y_out = r(V-x_out) - 2 * s1 * J + fiat_p256_sub(y_out, v, x_out); + fiat_p256_mul(y_out, y_out, r); + fiat_p256_felem s1j; + fiat_p256_mul(s1j, s1, j); + fiat_p256_sub(y_out, y_out, s1j); + fiat_p256_sub(y_out, y_out, s1j); + + fiat_p256_cmovznz(x_out, z1nz, x2, x_out); + fiat_p256_cmovznz(x3, z2nz, x1, x_out); + fiat_p256_cmovznz(y_out, z1nz, y2, y_out); + fiat_p256_cmovznz(y3, z2nz, y1, y_out); + fiat_p256_cmovznz(z_out, z1nz, z2, z_out); + fiat_p256_cmovznz(z3, z2nz, z1, z_out); +} + +#include "./p256_table.h" + +// fiat_p256_select_point_affine selects the |idx-1|th point from a +// precomputation table and copies it to out. If |idx| is zero, the output is +// the point at infinity. +static void fiat_p256_select_point_affine( + const fiat_p256_limb_t idx, size_t size, + const fiat_p256_felem pre_comp[/*size*/][2], fiat_p256_felem out[3]) { + GFp_memset(out, 0, sizeof(fiat_p256_felem) * 3); + for (size_t i = 0; i < size; i++) { + fiat_p256_limb_t mismatch = i ^ (idx - 1); + fiat_p256_cmovznz(out[0], mismatch, pre_comp[i][0], out[0]); + fiat_p256_cmovznz(out[1], mismatch, pre_comp[i][1], out[1]); + } + fiat_p256_cmovznz(out[2], idx, out[2], fiat_p256_one); +} + +// fiat_p256_select_point selects the |idx|th point from a precomputation table +// and copies it to out. +static void fiat_p256_select_point(const fiat_p256_limb_t idx, size_t size, + const fiat_p256_felem pre_comp[/*size*/][3], + fiat_p256_felem out[3]) { + GFp_memset(out, 0, sizeof(fiat_p256_felem) * 3); + for (size_t i = 0; i < size; i++) { + fiat_p256_limb_t mismatch = i ^ idx; + fiat_p256_cmovznz(out[0], mismatch, pre_comp[i][0], out[0]); + fiat_p256_cmovznz(out[1], mismatch, pre_comp[i][1], out[1]); + fiat_p256_cmovznz(out[2], mismatch, pre_comp[i][2], out[2]); + } +} + +// fiat_p256_get_bit returns the |i|th bit in |in| +static crypto_word fiat_p256_get_bit(const uint8_t *in, int i) { + if (i < 0 || i >= 256) { + return 0; + } + return (in[i >> 3] >> (i & 7)) & 1; +} + +void GFp_p256_point_mul(P256_POINT *r, const Limb scalar[P256_LIMBS], + const Limb p_x[P256_LIMBS], const Limb p_y[P256_LIMBS]) { + debug_assert_nonsecret(r != NULL); + debug_assert_nonsecret(scalar != NULL); + debug_assert_nonsecret(p_x != NULL); + debug_assert_nonsecret(p_y != NULL); + + P256_SCALAR_BYTES scalar_bytes; + p256_scalar_bytes_from_limbs(scalar_bytes, scalar); + + fiat_p256_felem p_pre_comp[17][3]; + GFp_memset(&p_pre_comp, 0, sizeof(p_pre_comp)); + + // Precompute multiples. + limbs_copy(&p_pre_comp[1][0][0], p_x, P256_LIMBS); + limbs_copy(&p_pre_comp[1][1][0], p_y, P256_LIMBS); + limbs_copy(&p_pre_comp[1][2][0], fiat_p256_one, P256_LIMBS); + + for (size_t j = 2; j <= 16; ++j) { + if (j & 1) { + fiat_p256_point_add(p_pre_comp[j][0], p_pre_comp[j][1], p_pre_comp[j][2], + p_pre_comp[1][0], p_pre_comp[1][1], p_pre_comp[1][2], + 0, p_pre_comp[j - 1][0], p_pre_comp[j - 1][1], + p_pre_comp[j - 1][2]); + } else { + fiat_p256_point_double(p_pre_comp[j][0], p_pre_comp[j][1], + p_pre_comp[j][2], p_pre_comp[j / 2][0], + p_pre_comp[j / 2][1], p_pre_comp[j / 2][2]); + } + } + + // Set nq to the point at infinity. + fiat_p256_felem nq[3] = {{0}, {0}, {0}}, ftmp, tmp[3]; + + // Loop over |scalar| msb-to-lsb, incorporating |p_pre_comp| every 5th round. + int skip = 1; // Save two point operations in the first round. + for (size_t i = 255; i < 256; i--) { + // double + if (!skip) { + fiat_p256_point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]); + } + + // do other additions every 5 doublings + if (i % 5 == 0) { + crypto_word bits = fiat_p256_get_bit(scalar_bytes, i + 4) << 5; + bits |= fiat_p256_get_bit(scalar_bytes, i + 3) << 4; + bits |= fiat_p256_get_bit(scalar_bytes, i + 2) << 3; + bits |= fiat_p256_get_bit(scalar_bytes, i + 1) << 2; + bits |= fiat_p256_get_bit(scalar_bytes, i) << 1; + bits |= fiat_p256_get_bit(scalar_bytes, i - 1); + crypto_word sign, digit; + recode_scalar_bits(&sign, &digit, bits); + + // select the point to add or subtract, in constant time. + fiat_p256_select_point(digit, 17, + GFp_POINTLESS_ARRAY_CONST_CAST((const fiat_p256_felem(*)[3]))p_pre_comp, + tmp); + fiat_p256_opp(ftmp, tmp[1]); // (X, -Y, Z) is the negative point. + fiat_p256_cmovznz(tmp[1], sign, tmp[1], ftmp); + + if (!skip) { + fiat_p256_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], + 0 /* mixed */, tmp[0], tmp[1], tmp[2]); + } else { + fiat_p256_copy(nq[0], tmp[0]); + fiat_p256_copy(nq[1], tmp[1]); + fiat_p256_copy(nq[2], tmp[2]); + skip = 0; + } + } + } + + limbs_copy(r->X, nq[0], P256_LIMBS); + limbs_copy(r->Y, nq[1], P256_LIMBS); + limbs_copy(r->Z, nq[2], P256_LIMBS); +} + +void GFp_p256_point_mul_base(P256_POINT *r, const Limb scalar[P256_LIMBS]) { + P256_SCALAR_BYTES scalar_bytes; + p256_scalar_bytes_from_limbs(scalar_bytes, scalar); + + // Set nq to the point at infinity. + fiat_p256_felem nq[3] = {{0}, {0}, {0}}, tmp[3]; + + int skip = 1; // Save two point operations in the first round. + for (size_t i = 31; i < 32; i--) { + if (!skip) { + fiat_p256_point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]); + } + + // First, look 32 bits upwards. + crypto_word bits = fiat_p256_get_bit(scalar_bytes, i + 224) << 3; + bits |= fiat_p256_get_bit(scalar_bytes, i + 160) << 2; + bits |= fiat_p256_get_bit(scalar_bytes, i + 96) << 1; + bits |= fiat_p256_get_bit(scalar_bytes, i + 32); + // Select the point to add, in constant time. + fiat_p256_select_point_affine(bits, 15, fiat_p256_g_pre_comp[1], tmp); + + if (!skip) { + fiat_p256_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], + 1 /* mixed */, tmp[0], tmp[1], tmp[2]); + } else { + fiat_p256_copy(nq[0], tmp[0]); + fiat_p256_copy(nq[1], tmp[1]); + fiat_p256_copy(nq[2], tmp[2]); + skip = 0; + } + + // Second, look at the current position. + bits = fiat_p256_get_bit(scalar_bytes, i + 192) << 3; + bits |= fiat_p256_get_bit(scalar_bytes, i + 128) << 2; + bits |= fiat_p256_get_bit(scalar_bytes, i + 64) << 1; + bits |= fiat_p256_get_bit(scalar_bytes, i); + // Select the point to add, in constant time. + fiat_p256_select_point_affine(bits, 15, fiat_p256_g_pre_comp[0], tmp); + fiat_p256_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */, + tmp[0], tmp[1], tmp[2]); + } + + limbs_copy(r->X, nq[0], P256_LIMBS); + limbs_copy(r->Y, nq[1], P256_LIMBS); + limbs_copy(r->Z, nq[2], P256_LIMBS); +} + +void GFp_p256_mul_mont(Limb r[P256_LIMBS], const Limb a[P256_LIMBS], + const Limb b[P256_LIMBS]) { + fiat_p256_mul(r, a, b); +} + +void GFp_p256_sqr_mont(Limb r[P256_LIMBS], const Limb a[P256_LIMBS]) { + fiat_p256_square(r, a); +} + +void GFp_p256_point_add(P256_POINT *r, const P256_POINT *a, const P256_POINT *b) { + fiat_p256_point_add(r->X, r->Y, r->Z, + a->X, a->Y, a->Z, + 0, + b->X, b->Y, b->Z); +} + +void GFp_p256_point_double(P256_POINT *r, const P256_POINT *a) { + fiat_p256_point_double(r->X, r->Y, r->Z, + a->X, a->Y, a->Z); +} + +// For testing only. +void GFp_p256_point_add_affine(P256_POINT *r, const P256_POINT *a, + const BN_ULONG b[P256_LIMBS * 2]) { + const Limb *b_x = &b[0]; + const Limb *b_y = &b[P256_LIMBS]; + fiat_p256_felem b_z = {0}; + crypto_word b_is_inf = constant_time_select_w( + LIMBS_are_zero(b_x, P256_LIMBS), LIMBS_are_zero(b_y, P256_LIMBS), 0); + fiat_p256_cmovznz(b_z, constant_time_is_zero_w(b_is_inf), b_z, fiat_p256_one); + fiat_p256_point_add(r->X, r->Y, r->Z, + a->X, a->Y, a->Z, + 1, + b_x, b_y, b_z); +} + +#undef BORINGSSL_NISTP256_64BIT + +#endif /* !defined(OPENSSL_USE_NISTZ256) */ diff --git a/vendor/ring/crypto/fipsmodule/ec/p256_shared.h b/vendor/ring/crypto/fipsmodule/ec/p256_shared.h new file mode 100644 index 00000000..705d633a --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/ec/p256_shared.h @@ -0,0 +1,57 @@ +/* + * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2014, Intel Corporation. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + * + * Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) + * (1) Intel Corporation, Israel Development Center, Haifa, Israel + * (2) University of Haifa, Israel + * + * Reference: + * S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with + * 256 Bit Primes" + */ + +#ifndef OPENSSL_HEADER_EC_P256_SHARED_H +#define OPENSSL_HEADER_EC_P256_SHARED_H + +#include "GFp/base.h" + +#include "../bn/internal.h" + +#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64) && \ + !defined(OPENSSL_SMALL) +# define OPENSSL_USE_NISTZ256 +#endif + +// P-256 field operations. +// +// An element mod P in P-256 is represented as a little-endian array of +// |P256_LIMBS| |BN_ULONG|s, spanning the full range of values. +// +// The following functions take fully-reduced inputs mod P and give +// fully-reduced outputs. They may be used in-place. + +#define P256_LIMBS (256 / BN_BITS2) + +// A P256_POINT represents a P-256 point in Jacobian coordinates. +// All coordinates are in the Montgomery domain. +typedef struct { + BN_ULONG X[P256_LIMBS]; + BN_ULONG Y[P256_LIMBS]; + BN_ULONG Z[P256_LIMBS]; +} P256_POINT; + +typedef unsigned char P256_SCALAR_BYTES[33]; + +static inline void p256_scalar_bytes_from_limbs( + P256_SCALAR_BYTES bytes_out, const BN_ULONG limbs[P256_LIMBS]) { + GFp_memcpy(bytes_out, limbs, 32); + bytes_out[32] = 0; +} + +#endif diff --git a/vendor/ring/crypto/fipsmodule/ec/p256_table.h b/vendor/ring/crypto/fipsmodule/ec/p256_table.h new file mode 100644 index 00000000..14129a36 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/ec/p256_table.h @@ -0,0 +1,297 @@ +/* Copyright (c) 2020, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +// This file is generated by make_tables.go. + +// Base point pre computation +// -------------------------- +// +// Two different sorts of precomputed tables are used in the following code. +// Each contain various points on the curve, where each point is three field +// elements (x, y, z). +// +// For the base point table, z is usually 1 (0 for the point at infinity). +// This table has 2 * 16 elements, starting with the following: +// index | bits | point +// ------+---------+------------------------------ +// 0 | 0 0 0 0 | 0G +// 1 | 0 0 0 1 | 1G +// 2 | 0 0 1 0 | 2^64G +// 3 | 0 0 1 1 | (2^64 + 1)G +// 4 | 0 1 0 0 | 2^128G +// 5 | 0 1 0 1 | (2^128 + 1)G +// 6 | 0 1 1 0 | (2^128 + 2^64)G +// 7 | 0 1 1 1 | (2^128 + 2^64 + 1)G +// 8 | 1 0 0 0 | 2^192G +// 9 | 1 0 0 1 | (2^192 + 1)G +// 10 | 1 0 1 0 | (2^192 + 2^64)G +// 11 | 1 0 1 1 | (2^192 + 2^64 + 1)G +// 12 | 1 1 0 0 | (2^192 + 2^128)G +// 13 | 1 1 0 1 | (2^192 + 2^128 + 1)G +// 14 | 1 1 1 0 | (2^192 + 2^128 + 2^64)G +// 15 | 1 1 1 1 | (2^192 + 2^128 + 2^64 + 1)G +// followed by a copy of this with each element multiplied by 2^32. +// +// The reason for this is so that we can clock bits into four different +// locations when doing simple scalar multiplies against the base point, +// and then another four locations using the second 16 elements. +// +// Tables for other points have table[i] = iG for i in 0 .. 16. + +// fiat_p256_g_pre_comp is the table of precomputed base points +#if defined(BORINGSSL_NISTP256_64BIT) +static const fiat_p256_felem fiat_p256_g_pre_comp[2][15][2] = { + {{{0x79e730d418a9143c, 0x75ba95fc5fedb601, 0x79fb732b77622510, + 0x18905f76a53755c6}, + {0xddf25357ce95560a, 0x8b4ab8e4ba19e45c, 0xd2e88688dd21f325, + 0x8571ff1825885d85}}, + {{0x4f922fc516a0d2bb, 0x0d5cc16c1a623499, 0x9241cf3a57c62c8b, + 0x2f5e6961fd1b667f}, + {0x5c15c70bf5a01797, 0x3d20b44d60956192, 0x04911b37071fdb52, + 0xf648f9168d6f0f7b}}, + {{0x9e566847e137bbbc, 0xe434469e8a6a0bec, 0xb1c4276179d73463, + 0x5abe0285133d0015}, + {0x92aa837cc04c7dab, 0x573d9f4c43260c07, 0x0c93156278e6cc37, + 0x94bb725b6b6f7383}}, + {{0x62a8c244bfe20925, 0x91c19ac38fdce867, 0x5a96a5d5dd387063, + 0x61d587d421d324f6}, + {0xe87673a2a37173ea, 0x2384800853778b65, 0x10f8441e05bab43e, + 0xfa11fe124621efbe}}, + {{0x1c891f2b2cb19ffd, 0x01ba8d5bb1923c23, 0xb6d03d678ac5ca8e, + 0x586eb04c1f13bedc}, + {0x0c35c6e527e8ed09, 0x1e81a33c1819ede2, 0x278fd6c056c652fa, + 0x19d5ac0870864f11}}, + {{0x62577734d2b533d5, 0x673b8af6a1bdddc0, 0x577e7c9aa79ec293, + 0xbb6de651c3b266b1}, + {0xe7e9303ab65259b3, 0xd6a0afd3d03a7480, 0xc5ac83d19b3cfc27, + 0x60b4619a5d18b99b}}, + {{0xbd6a38e11ae5aa1c, 0xb8b7652b49e73658, 0x0b130014ee5f87ed, + 0x9d0f27b2aeebffcd}, + {0xca9246317a730a55, 0x9c955b2fddbbc83a, 0x07c1dfe0ac019a71, + 0x244a566d356ec48d}}, + {{0x56f8410ef4f8b16a, 0x97241afec47b266a, 0x0a406b8e6d9c87c1, + 0x803f3e02cd42ab1b}, + {0x7f0309a804dbec69, 0xa83b85f73bbad05f, 0xc6097273ad8e197f, + 0xc097440e5067adc1}}, + {{0x846a56f2c379ab34, 0xa8ee068b841df8d1, 0x20314459176c68ef, + 0xf1af32d5915f1f30}, + {0x99c375315d75bd50, 0x837cffbaf72f67bc, 0x0613a41848d7723f, + 0x23d0f130e2d41c8b}}, + {{0xed93e225d5be5a2b, 0x6fe799835934f3c6, 0x4314092622626ffc, + 0x50bbb4d97990216a}, + {0x378191c6e57ec63e, 0x65422c40181dcdb2, 0x41a8099b0236e0f6, + 0x2b10011801fe49c3}}, + {{0xfc68b5c59b391593, 0xc385f5a2598270fc, 0x7144f3aad19adcbb, + 0xdd55899983fbae0c}, + {0x93b88b8e74b82ff4, 0xd2e03c4071e734c9, 0x9a7a9eaf43c0322a, + 0xe6e4c551149d6041}}, + {{0x5fe14bfe80ec21fe, 0xf6ce116ac255be82, 0x98bc5a072f4a5d67, + 0xfad27148db7e63af}, + {0x90c0b6ac29ab05b3, 0x37a9a83c4e251ae6, 0x0a7dc875c2aade7d, + 0x77387de39f0e1a84}}, + {{0x1e9ecc49a56c0dd7, 0xa5cffcd846086c74, 0x8f7a1408f505aece, + 0xb37b85c0bef0c47e}, + {0x3596b6e4cc0e6a8f, 0xfd6d4bbf6b388f23, 0xaba453fac39cef4e, + 0x9c135ac8f9f628d5}}, + {{0x0a1c729495c8f8be, 0x2961c4803bf362bf, 0x9e418403df63d4ac, + 0xc109f9cb91ece900}, + {0xc2d095d058945705, 0xb9083d96ddeb85c0, 0x84692b8d7a40449b, + 0x9bc3344f2eee1ee1}}, + {{0x0d5ae35642913074, 0x55491b2748a542b1, 0x469ca665b310732a, + 0x29591d525f1a4cc1}, + {0xe76f5b6bb84f983f, 0xbe7eef419f5f84e1, 0x1200d49680baa189, + 0x6376551f18ef332c}}}, + {{{0x202886024147519a, 0xd0981eac26b372f0, 0xa9d4a7caa785ebc8, + 0xd953c50ddbdf58e9}, + {0x9d6361ccfd590f8f, 0x72e9626b44e6c917, 0x7fd9611022eb64cf, + 0x863ebb7e9eb288f3}}, + {{0x4fe7ee31b0e63d34, 0xf4600572a9e54fab, 0xc0493334d5e7b5a4, + 0x8589fb9206d54831}, + {0xaa70f5cc6583553a, 0x0879094ae25649e5, 0xcc90450710044652, + 0xebb0696d02541c4f}}, + {{0xabbaa0c03b89da99, 0xa6f2d79eb8284022, 0x27847862b81c05e8, + 0x337a4b5905e54d63}, + {0x3c67500d21f7794a, 0x207005b77d6d7f61, 0x0a5a378104cfd6e8, + 0x0d65e0d5f4c2fbd6}}, + {{0xd433e50f6d3549cf, 0x6f33696ffacd665e, 0x695bfdacce11fcb4, + 0x810ee252af7c9860}, + {0x65450fe17159bb2c, 0xf7dfbebe758b357b, 0x2b057e74d69fea72, + 0xd485717a92731745}}, + {{0xce1f69bbe83f7669, 0x09f8ae8272877d6b, 0x9548ae543244278d, + 0x207755dee3c2c19c}, + {0x87bd61d96fef1945, 0x18813cefb12d28c3, 0x9fbcd1d672df64aa, + 0x48dc5ee57154b00d}}, + {{0xef0f469ef49a3154, 0x3e85a5956e2b2e9a, 0x45aaec1eaa924a9c, + 0xaa12dfc8a09e4719}, + {0x26f272274df69f1d, 0xe0e4c82ca2ff5e73, 0xb9d8ce73b7a9dd44, + 0x6c036e73e48ca901}}, + {{0xe1e421e1a47153f0, 0xb86c3b79920418c9, 0x93bdce87705d7672, + 0xf25ae793cab79a77}, + {0x1f3194a36d869d0c, 0x9d55c8824986c264, 0x49fb5ea3096e945e, + 0x39b8e65313db0a3e}}, + {{0xe3417bc035d0b34a, 0x440b386b8327c0a7, 0x8fb7262dac0362d1, + 0x2c41114ce0cdf943}, + {0x2ba5cef1ad95a0b1, 0xc09b37a867d54362, 0x26d6cdd201e486c9, + 0x20477abf42ff9297}}, + {{0x0f121b41bc0a67d2, 0x62d4760a444d248a, 0x0e044f1d659b4737, + 0x08fde365250bb4a8}, + {0xaceec3da848bf287, 0xc2a62182d3369d6e, 0x3582dfdc92449482, + 0x2f7e2fd2565d6cd7}}, + {{0x0a0122b5178a876b, 0x51ff96ff085104b4, 0x050b31ab14f29f76, + 0x84abb28b5f87d4e6}, + {0xd5ed439f8270790a, 0x2d6cb59d85e3f46b, 0x75f55c1b6c1e2212, + 0xe5436f6717655640}}, + {{0xc2965ecc9aeb596d, 0x01ea03e7023c92b4, 0x4704b4b62e013961, + 0x0ca8fd3f905ea367}, + {0x92523a42551b2b61, 0x1eb7a89c390fcd06, 0xe7f1d2be0392a63e, + 0x96dca2644ddb0c33}}, + {{0x231c210e15339848, 0xe87a28e870778c8d, 0x9d1de6616956e170, + 0x4ac3c9382bb09c0b}, + {0x19be05516998987d, 0x8b2376c4ae09f4d6, 0x1de0b7651a3f933d, + 0x380d94c7e39705f4}}, + {{0x3685954b8c31c31d, 0x68533d005bf21a0c, 0x0bd7626e75c79ec9, + 0xca17754742c69d54}, + {0xcc6edafff6d2dbb2, 0xfd0d8cbd174a9d18, 0x875e8793aa4578e8, + 0xa976a7139cab2ce6}}, + {{0xce37ab11b43ea1db, 0x0a7ff1a95259d292, 0x851b02218f84f186, + 0xa7222beadefaad13}, + {0xa2ac78ec2b0a9144, 0x5a024051f2fa59c5, 0x91d1eca56147ce38, + 0xbe94d523bc2ac690}}, + {{0x2d8daefd79ec1a0f, 0x3bbcd6fdceb39c97, 0xf5575ffc58f61a95, + 0xdbd986c4adf7b420}, + {0x81aa881415f39eb7, 0x6ee2fcf5b98d976c, 0x5465475dcf2f717d, + 0x8e24d3c46860bbd0}}}}; +#else +static const fiat_p256_felem fiat_p256_g_pre_comp[2][15][2] = { + {{{0x18a9143c, 0x79e730d4, 0x5fedb601, 0x75ba95fc, 0x77622510, 0x79fb732b, + 0xa53755c6, 0x18905f76}, + {0xce95560a, 0xddf25357, 0xba19e45c, 0x8b4ab8e4, 0xdd21f325, 0xd2e88688, + 0x25885d85, 0x8571ff18}}, + {{0x16a0d2bb, 0x4f922fc5, 0x1a623499, 0x0d5cc16c, 0x57c62c8b, 0x9241cf3a, + 0xfd1b667f, 0x2f5e6961}, + {0xf5a01797, 0x5c15c70b, 0x60956192, 0x3d20b44d, 0x071fdb52, 0x04911b37, + 0x8d6f0f7b, 0xf648f916}}, + {{0xe137bbbc, 0x9e566847, 0x8a6a0bec, 0xe434469e, 0x79d73463, 0xb1c42761, + 0x133d0015, 0x5abe0285}, + {0xc04c7dab, 0x92aa837c, 0x43260c07, 0x573d9f4c, 0x78e6cc37, 0x0c931562, + 0x6b6f7383, 0x94bb725b}}, + {{0xbfe20925, 0x62a8c244, 0x8fdce867, 0x91c19ac3, 0xdd387063, 0x5a96a5d5, + 0x21d324f6, 0x61d587d4}, + {0xa37173ea, 0xe87673a2, 0x53778b65, 0x23848008, 0x05bab43e, 0x10f8441e, + 0x4621efbe, 0xfa11fe12}}, + {{0x2cb19ffd, 0x1c891f2b, 0xb1923c23, 0x01ba8d5b, 0x8ac5ca8e, 0xb6d03d67, + 0x1f13bedc, 0x586eb04c}, + {0x27e8ed09, 0x0c35c6e5, 0x1819ede2, 0x1e81a33c, 0x56c652fa, 0x278fd6c0, + 0x70864f11, 0x19d5ac08}}, + {{0xd2b533d5, 0x62577734, 0xa1bdddc0, 0x673b8af6, 0xa79ec293, 0x577e7c9a, + 0xc3b266b1, 0xbb6de651}, + {0xb65259b3, 0xe7e9303a, 0xd03a7480, 0xd6a0afd3, 0x9b3cfc27, 0xc5ac83d1, + 0x5d18b99b, 0x60b4619a}}, + {{0x1ae5aa1c, 0xbd6a38e1, 0x49e73658, 0xb8b7652b, 0xee5f87ed, 0x0b130014, + 0xaeebffcd, 0x9d0f27b2}, + {0x7a730a55, 0xca924631, 0xddbbc83a, 0x9c955b2f, 0xac019a71, 0x07c1dfe0, + 0x356ec48d, 0x244a566d}}, + {{0xf4f8b16a, 0x56f8410e, 0xc47b266a, 0x97241afe, 0x6d9c87c1, 0x0a406b8e, + 0xcd42ab1b, 0x803f3e02}, + {0x04dbec69, 0x7f0309a8, 0x3bbad05f, 0xa83b85f7, 0xad8e197f, 0xc6097273, + 0x5067adc1, 0xc097440e}}, + {{0xc379ab34, 0x846a56f2, 0x841df8d1, 0xa8ee068b, 0x176c68ef, 0x20314459, + 0x915f1f30, 0xf1af32d5}, + {0x5d75bd50, 0x99c37531, 0xf72f67bc, 0x837cffba, 0x48d7723f, 0x0613a418, + 0xe2d41c8b, 0x23d0f130}}, + {{0xd5be5a2b, 0xed93e225, 0x5934f3c6, 0x6fe79983, 0x22626ffc, 0x43140926, + 0x7990216a, 0x50bbb4d9}, + {0xe57ec63e, 0x378191c6, 0x181dcdb2, 0x65422c40, 0x0236e0f6, 0x41a8099b, + 0x01fe49c3, 0x2b100118}}, + {{0x9b391593, 0xfc68b5c5, 0x598270fc, 0xc385f5a2, 0xd19adcbb, 0x7144f3aa, + 0x83fbae0c, 0xdd558999}, + {0x74b82ff4, 0x93b88b8e, 0x71e734c9, 0xd2e03c40, 0x43c0322a, 0x9a7a9eaf, + 0x149d6041, 0xe6e4c551}}, + {{0x80ec21fe, 0x5fe14bfe, 0xc255be82, 0xf6ce116a, 0x2f4a5d67, 0x98bc5a07, + 0xdb7e63af, 0xfad27148}, + {0x29ab05b3, 0x90c0b6ac, 0x4e251ae6, 0x37a9a83c, 0xc2aade7d, 0x0a7dc875, + 0x9f0e1a84, 0x77387de3}}, + {{0xa56c0dd7, 0x1e9ecc49, 0x46086c74, 0xa5cffcd8, 0xf505aece, 0x8f7a1408, + 0xbef0c47e, 0xb37b85c0}, + {0xcc0e6a8f, 0x3596b6e4, 0x6b388f23, 0xfd6d4bbf, 0xc39cef4e, 0xaba453fa, + 0xf9f628d5, 0x9c135ac8}}, + {{0x95c8f8be, 0x0a1c7294, 0x3bf362bf, 0x2961c480, 0xdf63d4ac, 0x9e418403, + 0x91ece900, 0xc109f9cb}, + {0x58945705, 0xc2d095d0, 0xddeb85c0, 0xb9083d96, 0x7a40449b, 0x84692b8d, + 0x2eee1ee1, 0x9bc3344f}}, + {{0x42913074, 0x0d5ae356, 0x48a542b1, 0x55491b27, 0xb310732a, 0x469ca665, + 0x5f1a4cc1, 0x29591d52}, + {0xb84f983f, 0xe76f5b6b, 0x9f5f84e1, 0xbe7eef41, 0x80baa189, 0x1200d496, + 0x18ef332c, 0x6376551f}}}, + {{{0x4147519a, 0x20288602, 0x26b372f0, 0xd0981eac, 0xa785ebc8, 0xa9d4a7ca, + 0xdbdf58e9, 0xd953c50d}, + {0xfd590f8f, 0x9d6361cc, 0x44e6c917, 0x72e9626b, 0x22eb64cf, 0x7fd96110, + 0x9eb288f3, 0x863ebb7e}}, + {{0xb0e63d34, 0x4fe7ee31, 0xa9e54fab, 0xf4600572, 0xd5e7b5a4, 0xc0493334, + 0x06d54831, 0x8589fb92}, + {0x6583553a, 0xaa70f5cc, 0xe25649e5, 0x0879094a, 0x10044652, 0xcc904507, + 0x02541c4f, 0xebb0696d}}, + {{0x3b89da99, 0xabbaa0c0, 0xb8284022, 0xa6f2d79e, 0xb81c05e8, 0x27847862, + 0x05e54d63, 0x337a4b59}, + {0x21f7794a, 0x3c67500d, 0x7d6d7f61, 0x207005b7, 0x04cfd6e8, 0x0a5a3781, + 0xf4c2fbd6, 0x0d65e0d5}}, + {{0x6d3549cf, 0xd433e50f, 0xfacd665e, 0x6f33696f, 0xce11fcb4, 0x695bfdac, + 0xaf7c9860, 0x810ee252}, + {0x7159bb2c, 0x65450fe1, 0x758b357b, 0xf7dfbebe, 0xd69fea72, 0x2b057e74, + 0x92731745, 0xd485717a}}, + {{0xe83f7669, 0xce1f69bb, 0x72877d6b, 0x09f8ae82, 0x3244278d, 0x9548ae54, + 0xe3c2c19c, 0x207755de}, + {0x6fef1945, 0x87bd61d9, 0xb12d28c3, 0x18813cef, 0x72df64aa, 0x9fbcd1d6, + 0x7154b00d, 0x48dc5ee5}}, + {{0xf49a3154, 0xef0f469e, 0x6e2b2e9a, 0x3e85a595, 0xaa924a9c, 0x45aaec1e, + 0xa09e4719, 0xaa12dfc8}, + {0x4df69f1d, 0x26f27227, 0xa2ff5e73, 0xe0e4c82c, 0xb7a9dd44, 0xb9d8ce73, + 0xe48ca901, 0x6c036e73}}, + {{0xa47153f0, 0xe1e421e1, 0x920418c9, 0xb86c3b79, 0x705d7672, 0x93bdce87, + 0xcab79a77, 0xf25ae793}, + {0x6d869d0c, 0x1f3194a3, 0x4986c264, 0x9d55c882, 0x096e945e, 0x49fb5ea3, + 0x13db0a3e, 0x39b8e653}}, + {{0x35d0b34a, 0xe3417bc0, 0x8327c0a7, 0x440b386b, 0xac0362d1, 0x8fb7262d, + 0xe0cdf943, 0x2c41114c}, + {0xad95a0b1, 0x2ba5cef1, 0x67d54362, 0xc09b37a8, 0x01e486c9, 0x26d6cdd2, + 0x42ff9297, 0x20477abf}}, + {{0xbc0a67d2, 0x0f121b41, 0x444d248a, 0x62d4760a, 0x659b4737, 0x0e044f1d, + 0x250bb4a8, 0x08fde365}, + {0x848bf287, 0xaceec3da, 0xd3369d6e, 0xc2a62182, 0x92449482, 0x3582dfdc, + 0x565d6cd7, 0x2f7e2fd2}}, + {{0x178a876b, 0x0a0122b5, 0x085104b4, 0x51ff96ff, 0x14f29f76, 0x050b31ab, + 0x5f87d4e6, 0x84abb28b}, + {0x8270790a, 0xd5ed439f, 0x85e3f46b, 0x2d6cb59d, 0x6c1e2212, 0x75f55c1b, + 0x17655640, 0xe5436f67}}, + {{0x9aeb596d, 0xc2965ecc, 0x023c92b4, 0x01ea03e7, 0x2e013961, 0x4704b4b6, + 0x905ea367, 0x0ca8fd3f}, + {0x551b2b61, 0x92523a42, 0x390fcd06, 0x1eb7a89c, 0x0392a63e, 0xe7f1d2be, + 0x4ddb0c33, 0x96dca264}}, + {{0x15339848, 0x231c210e, 0x70778c8d, 0xe87a28e8, 0x6956e170, 0x9d1de661, + 0x2bb09c0b, 0x4ac3c938}, + {0x6998987d, 0x19be0551, 0xae09f4d6, 0x8b2376c4, 0x1a3f933d, 0x1de0b765, + 0xe39705f4, 0x380d94c7}}, + {{0x8c31c31d, 0x3685954b, 0x5bf21a0c, 0x68533d00, 0x75c79ec9, 0x0bd7626e, + 0x42c69d54, 0xca177547}, + {0xf6d2dbb2, 0xcc6edaff, 0x174a9d18, 0xfd0d8cbd, 0xaa4578e8, 0x875e8793, + 0x9cab2ce6, 0xa976a713}}, + {{0xb43ea1db, 0xce37ab11, 0x5259d292, 0x0a7ff1a9, 0x8f84f186, 0x851b0221, + 0xdefaad13, 0xa7222bea}, + {0x2b0a9144, 0xa2ac78ec, 0xf2fa59c5, 0x5a024051, 0x6147ce38, 0x91d1eca5, + 0xbc2ac690, 0xbe94d523}}, + {{0x79ec1a0f, 0x2d8daefd, 0xceb39c97, 0x3bbcd6fd, 0x58f61a95, 0xf5575ffc, + 0xadf7b420, 0xdbd986c4}, + {0x15f39eb7, 0x81aa8814, 0xb98d976c, 0x6ee2fcf5, 0xcf2f717d, 0x5465475d, + 0x6860bbd0, 0x8e24d3c4}}}}; +#endif diff --git a/vendor/ring/crypto/fipsmodule/ec/util.h b/vendor/ring/crypto/fipsmodule/ec/util.h new file mode 100644 index 00000000..90f9ea0b --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/ec/util.h @@ -0,0 +1,258 @@ +/* Copyright (c) 2015, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +#include + +#include "../../internal.h" + +#if defined(__GNUC__) +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wsign-conversion" +#endif + + +// This function looks at 5+1 scalar bits (5 current, 1 adjacent less +// significant bit), and recodes them into a signed digit for use in fast point +// multiplication: the use of signed rather than unsigned digits means that +// fewer points need to be precomputed, given that point inversion is easy (a +// precomputed point dP makes -dP available as well). +// +// BACKGROUND: +// +// Signed digits for multiplication were introduced by Booth ("A signed binary +// multiplication technique", Quart. Journ. Mech. and Applied Math., vol. IV, +// pt. 2 (1951), pp. 236-240), in that case for multiplication of integers. +// Booth's original encoding did not generally improve the density of nonzero +// digits over the binary representation, and was merely meant to simplify the +// handling of signed factors given in two's complement; but it has since been +// shown to be the basis of various signed-digit representations that do have +// further advantages, including the wNAF, using the following general +// approach: +// +// (1) Given a binary representation +// +// b_k ... b_2 b_1 b_0, +// +// of a nonnegative integer (b_k in {0, 1}), rewrite it in digits 0, 1, -1 +// by using bit-wise subtraction as follows: +// +// b_k b_(k-1) ... b_2 b_1 b_0 +// - b_k ... b_3 b_2 b_1 b_0 +// ----------------------------------------- +// s_(k+1) s_k ... s_3 s_2 s_1 s_0 +// +// A left-shift followed by subtraction of the original value yields a new +// representation of the same value, using signed bits s_i = b_(i-1) - b_i. +// This representation from Booth's paper has since appeared in the +// literature under a variety of different names including "reversed binary +// form", "alternating greedy expansion", "mutual opposite form", and +// "sign-alternating {+-1}-representation". +// +// An interesting property is that among the nonzero bits, values 1 and -1 +// strictly alternate. +// +// (2) Various window schemes can be applied to the Booth representation of +// integers: for example, right-to-left sliding windows yield the wNAF +// (a signed-digit encoding independently discovered by various researchers +// in the 1990s), and left-to-right sliding windows yield a left-to-right +// equivalent of the wNAF (independently discovered by various researchers +// around 2004). +// +// To prevent leaking information through side channels in point multiplication, +// we need to recode the given integer into a regular pattern: sliding windows +// as in wNAFs won't do, we need their fixed-window equivalent -- which is a few +// decades older: we'll be using the so-called "modified Booth encoding" due to +// MacSorley ("High-speed arithmetic in binary computers", Proc. IRE, vol. 49 +// (1961), pp. 67-91), in a radix-2^5 setting. That is, we always combine five +// signed bits into a signed digit: +// +// s_(5j + 4) s_(5j + 3) s_(5j + 2) s_(5j + 1) s_(5j) +// +// The sign-alternating property implies that the resulting digit values are +// integers from -16 to 16. +// +// Of course, we don't actually need to compute the signed digits s_i as an +// intermediate step (that's just a nice way to see how this scheme relates +// to the wNAF): a direct computation obtains the recoded digit from the +// six bits b_(5j + 4) ... b_(5j - 1). +// +// This function takes those six bits as an integer (0 .. 63), writing the +// recoded digit to *sign (0 for positive, 1 for negative) and *digit (absolute +// value, in the range 0 .. 16). Note that this integer essentially provides +// the input bits "shifted to the left" by one position: for example, the input +// to compute the least significant recoded digit, given that there's no bit +// b_-1, has to be b_4 b_3 b_2 b_1 b_0 0. +// +// DOUBLING CASE: +// +// Point addition formulas for short Weierstrass curves are often incomplete. +// Edge cases such as P + P or P + ∞ must be handled separately. This +// complicates constant-time requirements. P + ∞ cannot be avoided (any window +// may be zero) and is handled with constant-time selects. P + P (where P is not +// ∞) usually is not. Instead, windowing strategies are chosen to avoid this +// case. Whether this happens depends on the group order. +// +// Let w be the window width (in this function, w = 5). The non-trivial doubling +// case in single-point scalar multiplication may occur if and only if the +// 2^(w-1) bit of the group order is zero. +// +// Note the above only holds if the scalar is fully reduced and the group order +// is a prime that is much larger than 2^w. It also only holds when windows +// are applied from most significant to least significant, doubling between each +// window. It does not apply to more complex table strategies such as +// |EC_GFp_nistz256_method|. +// +// PROOF: +// +// Let n be the group order. Let l be the number of bits needed to represent n. +// Assume there exists some 0 <= k < n such that signed w-bit windowed +// multiplication hits the doubling case. +// +// Windowed multiplication consists of iterating over groups of s_i (defined +// above based on k's binary representation) from most to least significant. At +// iteration i (for i = ..., 3w, 2w, w, 0, starting from the most significant +// window), we: +// +// 1. Double the accumulator A, w times. Let A_i be the value of A at this +// point. +// +// 2. Set A to T_i + A_i, where T_i is a precomputed multiple of P +// corresponding to the window s_(i+w-1) ... s_i. +// +// Let j be the index such that A_j = T_j ≠ ∞. Looking at A_i and T_i as +// multiples of P, define a_i and t_i to be scalar coefficients of A_i and T_i. +// Thus a_j = t_j ≠ 0 (mod n). Note a_i and t_i may not be reduced mod n. t_i is +// the value of the w signed bits s_(i+w-1) ... s_i. a_i is computed as a_i = +// 2^w * (a_(i+w) + t_(i+w)). +// +// t_i is bounded by -2^(w-1) <= t_i <= 2^(w-1). Additionally, we may write it +// in terms of unsigned bits b_i. t_i consists of signed bits s_(i+w-1) ... s_i. +// This is computed as: +// +// b_(i+w-2) b_(i+w-3) ... b_i b_(i-1) +// - b_(i+w-1) b_(i+w-2) ... b_(i+1) b_i +// -------------------------------------------- +// t_i = s_(i+w-1) s_(i+w-2) ... s_(i+1) s_i +// +// Observe that b_(i+w-2) through b_i occur in both terms. Let x be the integer +// represented by that bit string, i.e. 2^(w-2)*b_(i+w-2) + ... + b_i. +// +// t_i = (2*x + b_(i-1)) - (2^(w-1)*b_(i+w-1) + x) +// = x - 2^(w-1)*b_(i+w-1) + b_(i-1) +// +// Or, using C notation for bit operations: +// +// t_i = (k>>i) & ((1<<(w-1)) - 1) - (k>>i) & (1<<(w-1)) + (k>>(i-1)) & 1 +// +// Note b_(i-1) is added in left-shifted by one (or doubled) from its place. +// This is compensated by t_(i-w)'s subtraction term. Thus, a_i may be computed +// by adding b_l b_(l-1) ... b_(i+1) b_i and an extra copy of b_(i-1). In C +// notation, this is: +// +// a_i = (k>>(i+w)) << w + ((k>>(i+w-1)) & 1) << w +// +// Observe that, while t_i may be positive or negative, a_i is bounded by +// 0 <= a_i < n + 2^w. Additionally, a_i can only be zero if b_(i+w-1) and up +// are all zero. (Note this implies a non-trivial P + (-P) is unreachable for +// all groups. That would imply the subsequent a_i is zero, which means all +// terms thus far were zero.) +// +// Returning to our doubling position, we have a_j = t_j (mod n). We now +// determine the value of a_j - t_j, which must be divisible by n. Our bounds on +// a_j and t_j imply a_j - t_j is 0 or n. If it is 0, a_j = t_j. However, 2^w +// divides a_j and -2^(w-1) <= t_j <= 2^(w-1), so this can only happen if +// a_j = t_j = 0, which is a trivial doubling. Therefore, a_j - t_j = n. +// +// Now we determine j. Suppose j > 0. w divides j, so j >= w. Then, +// +// n = a_j - t_j = (k>>(j+w)) << w + ((k>>(j+w-1)) & 1) << w - t_j +// <= k/2^j + 2^w - t_j +// < n/2^w + 2^w + 2^(w-1) +// +// n is much larger than 2^w, so this is impossible. Thus, j = 0: only the final +// addition may hit the doubling case. +// +// Finally, we consider bit patterns for n and k. Divide k into k_H + k_M + k_L +// such that k_H is the contribution from b_(l-1) .. b_w, k_M is the +// contribution from b_(w-1), and k_L is the contribution from b_(w-2) ... b_0. +// That is: +// +// - 2^w divides k_H +// - k_M is 0 or 2^(w-1) +// - 0 <= k_L < 2^(w-1) +// +// Divide n into n_H + n_M + n_L similarly. We thus have: +// +// t_0 = (k>>0) & ((1<<(w-1)) - 1) - (k>>0) & (1<<(w-1)) + (k>>(0-1)) & 1 +// = k & ((1<<(w-1)) - 1) - k & (1<<(w-1)) +// = k_L - k_M +// +// a_0 = (k>>(0+w)) << w + ((k>>(0+w-1)) & 1) << w +// = (k>>w) << w + ((k>>(w-1)) & 1) << w +// = k_H + 2*k_M +// +// n = a_0 - t_0 +// n_H + n_M + n_L = (k_H + 2*k_M) - (k_L - k_M) +// = k_H + 3*k_M - k_L +// +// k_H - k_L < k and k < n, so k_H - k_L ≠ n. Therefore k_M is not 0 and must be +// 2^(w-1). Now we consider k_H and n_H. We know k_H <= n_H. Suppose k_H = n_H. +// Then, +// +// n_M + n_L = 3*(2^(w-1)) - k_L +// > 3*(2^(w-1)) - 2^(w-1) +// = 2^w +// +// Contradiction (n_M + n_L is the bottom w bits of n). Thus k_H < n_H. Suppose +// k_H < n_H - 2*2^w. Then, +// +// n_H + n_M + n_L = k_H + 3*(2^(w-1)) - k_L +// < n_H - 2*2^w + 3*(2^(w-1)) - k_L +// n_M + n_L < -2^(w-1) - k_L +// +// Contradiction. Thus, k_H = n_H - 2^w. (Note 2^w divides n_H and k_H.) Thus, +// +// n_H + n_M + n_L = k_H + 3*(2^(w-1)) - k_L +// = n_H - 2^w + 3*(2^(w-1)) - k_L +// n_M + n_L = 2^(w-1) - k_L +// <= 2^(w-1) +// +// Equality would mean 2^(w-1) divides n, which is impossible if n is prime. +// Thus n_M + n_L < 2^(w-1), so n_M is zero, proving our condition. +// +// This proof constructs k, so, to show the converse, let k_H = n_H - 2^w, +// k_M = 2^(w-1), k_L = 2^(w-1) - n_L. This will result in a non-trivial point +// doubling in the final addition and is the only such scalar. +// +// COMMON CURVES: +// +// The group orders for common curves end in the following bit patterns: +// +// P-521: ...00001001; w = 4 is okay +// P-384: ...01110011; w = 2, 5, 6, 7 are okay +// P-256: ...01010001; w = 5, 7 are okay +// P-224: ...00111101; w = 3, 4, 5, 6 are okay +static inline void recode_scalar_bits(crypto_word *sign, crypto_word *digit, + crypto_word in) { + crypto_word s, d; + + s = ~((in >> 5) - 1); /* sets all bits to MSB(in), 'in' seen as + * 6-bit value */ + d = (1 << 6) - in - 1; + d = (d & s) | (in & ~s); + d = (d >> 1) + (d & 1); + + *sign = s & 1; + *digit = d; +} diff --git a/vendor/ring/crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt b/vendor/ring/crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt new file mode 100644 index 00000000..c00af6c9 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt @@ -0,0 +1,1362 @@ +# Tests from NIST CAVP 186-4 ECDSA2VS Test Vectors, Signature Verification Test +# http://csrc.nist.gov/groups/STM/cavp/documents/dss/186-3ecdsatestvectors.zip +# +# NIST's files provide message and digest pairs. Since this is a low-level test, +# the digests have been extracted. P-521 test vectors were fixed to have the +# right number of leading zeros. + +Curve = P-256 +X = 1198b3c409a8b47edb1347e0982d533cb1813e5cb2a92c824b2881b3cd2f3f4a +Y = 0bdbac5fa02e41e775f8d602446d58ecb2209b5a3d79ae69eef399016e992e87 +Digest = 01ed0c41d650479c47057f61433d7e8b24492649 +R = 9206d435f148f88c15b2effbf3c506e41b2c620102022b801e371d0767b54bea +S = cbc4e1674ae1af69873946ccf6275946e59e0107278749b2d0010795833d80fa +Invalid = Y + +Curve = P-256 +X = f7c6280aecd6b936513b0ca84e63346333dc41437a15442e605d46bba93ae101 +Y = 3c834cecc16167b07866a9478f9f2d882de7ef937da447cd837e60cb5ed65d81 +Digest = f91b4dfddd5eb33a875d2e50d1e949211ac819da +R = f615af212ab030c4bbf9362d9815a1462312df4beb4358a7ce80d820355420bf +S = d12ed715ef65cfe6fe6bf348364088a0e7f70927bbafe4c12fc4cb65c0cc51bc +Invalid = Y + +Curve = P-256 +X = 0e7632dbc4db879e10d1d80f2789d9fa414c1fe77a6c1e56d6667af43e36e610 +Y = 6f0dd2a5840e5a6f6ff7e23f656f5c945b7a493fbb0cfd5b9b531bf04435b1ef +Digest = 3905696f8bad8205fa1445df0e91ade3dbc413e6 +R = 2b0b9ab4a575732a168f28494b66a855fc1a757fb1177864bf3e4f0a000c4a86 +S = 54901ce2f92f55ac112afa0f8b62bc00b44c8c10fe0c863675bfd305d6dc0cd8 +Invalid = Y + +Curve = P-256 +X = 1613f12bae8e98d09b4bba53f5229596a0d417d2c625f41bb15f923b3c1e4b57 +Y = 411319fa85227997a4cf3b1756161485124d2cedc38c9c30d82f42dc2647d545 +Digest = 580d31ce22700a20c2db81bcdac37330b491c86f +R = ed058d476a77be99c1b0fc8502abe545541b4c0ff3eed3f558133ae2f02042b0 +S = c571b4895712a4f64f7220b0694cab767379b09f1824fe7874acd127deb2371e +Invalid = Y + +Curve = P-256 +X = 88bb041dcb1733a676a7f4ae8d3e407d72d5396547f07db77078485c1d5db077 +Y = 72cf2b55e596cd140c58228f1b0a19c34fca26ffac043528a417c5abb6fca9c9 +Digest = 7900a02f768b0718a13525c33adace583de15c50 +R = 87208734deb125dca68f0d33f9d369cf1b79cf5a021391b9c6c1727d2efe663a +S = b984f722de18f1ce407104342948f03f2b55413a096c4b5fca1e032a2c814a4a +Invalid = Y + +Curve = P-256 +X = 811eb5180def7fb60d632f8cb2cba831b88cee778aa2a82ec3a5fc3d80ff7fb6 +Y = db88d65b0fc35d9ba1f1ced0400434979ae895d371d1441d7c7a441a9fb1709b +Digest = 17b7451ea903125ccb293ffaa9d1a4ca1141a2c5 +R = c329fa28dac0018276c5af0cd770e60be50bc14e2562d5556991971edc7d4916 +S = 2d111d13837a02fa279fe835a7dc59a521864d92b26649ca4e24b36ae93878e8 +Invalid = Y + +Curve = P-256 +X = 4a6f1e7f7268174d23993b8b58aa60c2a87b18de79b36a750ec86dd6f9e12227 +Y = 572df22bd6487a863a51ca544b8c5de2b47f801372a881cb996a97d9a98aa825 +Digest = 54e9a048559f370425e9c8e54a460ec91bcc930a +R = 4a800e24de65e5c57d4cab4dd1ef7b6c38a2f0aa5cfd3a571a4b552fb1993e69 +S = d9c89fb983640a7e65edf632cacd1de0823b7efbc798fc1f7bbfacdda7398955 +Invalid = Y + +Curve = P-256 +X = f3033d1e548d245b5e45ff1147db8cd44db8a1f2823c3c164125be88f9a982c2 +Y = 3c078f6cee2f50e95e8916aa9c4e93de3fdf9b045abac6f707cfcb22d065638e +Digest = e8d38e4c6a905a814b04c2841d898ed6da023c34 +R = d4255db86a416a5a688de4e238071ef16e5f2a20e31b9490c03dee9ae6164c34 +S = 4e0ac1e1a6725bf7c6bd207439b2d370c5f2dea1ff4decf1650ab84c7769efc0 + +Curve = P-256 +X = 0ea0a6bb6c70966fad1a2307479c12de2322795bdecb70e4b286bd6200ba9c1a +Y = c40eda3947021348db691ac4086fb6c06b587ce37c155bb0a7d912b93226de81 +Digest = 3b08bf1b67abc03c1cd69b0e24743b5c2d49e506 +R = f5509deff7bfda3f3759800fa4033af6a84466b114ecb48eac37eff48d2ae1b3 +S = 8c4b62dce2082f80caf220cdbb1d02567bbdfab40564b90ef31d86e3e10ce80a +Invalid = Y + +Curve = P-256 +X = e7a57e0f6ec0fa9c7c34978034cf82f039f8fd62804070ad943573fc8efa5775 +Y = 87b2cc85dfff2dae5620fbe3e6256bd728de28fc9dc1b5eb6b5d7bd5d29186ad +Digest = a8c5dc0344b1442dfdb5f8836251893d6c4ecbe9 +R = 97642038932fdddbe2021ec1af53ae6b9af00ef9c8b9f26aea582892e80e6285 +S = 9cb14918359338041cf795cf6781e4905837fa5ce3b3e50ffafb5f13c73b5bc8 +Invalid = Y + +Curve = P-256 +X = be7a651be0c87278569987cf62d7fa1dd1b3d6e1b868d8f4dfb56135a9960eec +Y = b7a62c588a987760b915edbd7f95506870c60f042471de1d8b2d4cd9d6563391 +Digest = 2f93ee45db133a14c26d418c2ffd3470ae63bf50 +R = aa889fb608b6939f6eeacf2f64c3b2e3a6061f2834058c7e724321720b737a63 +S = 6cd6d0ef2b93a760daa914e11b9b414bd4d72457405f00a62ab63f36d76efb73 +Invalid = Y + +Curve = P-256 +X = 76ddc46d8db8d7ce2ce837f60cdabcee92b7c7817ee41c8f066f1ae65f85c318 +Y = bea47191f1c584c87250370ce337a1de1583bcfc20ccc23b7a82e83f19adaa88 +Digest = 2136a5470ff9d45214a0b2c300042efea8ff7266 +R = 84a42efbf7ec04166ad144d19cd98c120aa2e79d483b5eea6fbdfa7f1222e07b +S = e41531205e691e65668f69f518abc7b60f32c373434872a043b7358462babf83 +Invalid = Y + +Curve = P-256 +X = 2f71b932f770ba9daf7c1dd47444ab6cb8881f71a1c597e719845b15cb84ca35 +Y = ab928625b40ec0738d0fc8dbc4df4a1f65d20bc0447b69cfa13bb20b95bb41d4 +Digest = ae6093bb37c1264ca3ead439e4f678721912c8c4 +R = 63fca172bbca6197cd2802a9cb61d74c2b47cf35f6d35203e67ffbaa838be775 +S = e70ec283cd212df6ba3723e26b697501f112d7cf64e4f45185dae76055e09f1e + +Curve = P-256 +X = ce775648b928db82ac5edb3b009d32959a73b86c45e96d4b8d5b6e640b7c2790 +Y = 52455caf08ee94d86f0984e9ec9268d74823f2102dd97fced59638055f6af18e +Digest = 60054807acb29e3091a023c42b9885c4945249e1 +R = 2a64b29146588f3153fee1029a0131ac0a8a25ba2ecc494f697c166c7c91fc08 +S = 7b429bc12a72ca3d76c119eea9f4098633cc31c87831e54d5d93afd6e8d20f4f +Invalid = Y + +Curve = P-256 +X = cd2f29a53f0ce57e0e4a542c3256e65ebbdc30415f4de771d5d706d3aeacc852 +Y = dbbf2c129f30d11fe77d7816a24187764eae3fb2ff70c1ec745e876e26f5232f +Digest = 5f50e35b134942295c16d003742fd6bce5bdab45 +R = 2454c5ee84e4f77b554acd368dd412389db8c78429590a092f24db2da43cb761 +S = 63e870ce2fa4085d4ff1e360f7a5c101a1f8b288abe71cca56887e613ad034b7 + +Curve = P-256 +X = 843f6d83d777aac75b758d58c670f417c8deea8d339a440bb626114318c34f29 +Y = 83e0c70008521c8509044b724420463e3478e3c91874d424be44413d1ce555f3 +Digest = cda2c7ad9abb2a858c4981550f78974c69e41cc31fa33509e3e83dc2 +R = d08e9a5db411019d826b20ac889227ed245503a6d839494db1e8d7995a6b245b +S = 8d46a204054125d0dc776ab1055302ec4eb0f20b90bca6d205f21d3cefd29097 + +Curve = P-256 +X = f08b56f73f7a0e098444f6f0a02ad81ce0b914a11cafa15893d1c84704e1c564 +Y = bbee9aeb91cdc2d1d1437b4168df73acfd64e8b02962b14c85e67187e1ef80a4 +Digest = 5453c2656550e9b3dc6c40a3f1362a73522396bc35d383dd6451128f +R = 71b3ec982725a007ac18a5cf60587e1fd1beb57685a1f9df3cddd9df25dcbc18 +S = 407e41217325f92f8a031cfcc4eb64c1a4b17b0a7459c254af754a7ea9eac997 +Invalid = Y + +Curve = P-256 +X = 0b688e761e1ddda2305e002809da65bf5916dfe1356a5b99b61f5576a9b90efa +Y = 90ec958e2e3a676e7bbf8e9394f72742875836125a317b0ae38374953f746a91 +Digest = 7289573d6bb7486e428e086bec9da9d7ff3c5f8bd0db2ec209fed6ae +R = ef89df3bbf079fb250f7e882c4f85c0023fc3804e862d9ef4d9530a15f1013f0 +S = 4ba985e900e6737b8e07eac638f7b38277ead4faee6d2076a2eee90fd2a6bf0f +Invalid = Y + +Curve = P-256 +X = 0b64480783e260e1e9caef37b4cc9c650d2d57e2c594b1106314843d8d7ab74e +Y = 29d373d8522deffe40055aef539f53f38937eb799b44f05a8d8c0b381f12907f +Digest = 497656e780360ec3b4bd1be97570615e4a32467982cd9330bc6aa224 +R = c5c26b0b21eef0f7a0f1cff38d0079d890376759369b01d8d8e959c1c785e203 +S = fecc400bf0deab99d87da168b9d0dd31d2dfa3435b0fe9d38b5fb8efd45195a4 +Invalid = Y + +Curve = P-256 +X = 7f78a8fd880c509940e2b83de67c9ab553ab91489bae75cdc1d5b523b06ab7f5 +Y = 7786aee7032c373cdfad7d9ddb6fa09a026f6da30fd477ab014d30a289d542a1 +Digest = 6d88da9e83ae9457e233d7977172c062dfbdd17d365694515251e031 +R = c93ada69db326f76b1362d610cb8bcc6e7ef1dc03d3d11367e153c0e39d5dc86 +S = d0c02c71b14ef7a4af4e23bd207ce98449f5d6e7e5b3ec8cbbca9549e97d379d + +Curve = P-256 +X = e58cdc207c56f62e0bb7c0b55b7f7236a6b308f8fc4de3e61cdb3bf20ad2f62c +Y = 6056c0ee827e85ba284838954d0c6cc096df03b4611b1e0f7f9002bac86856d4 +Digest = 3f9a97b8ea807edc88788df8956c296b1daaed8dd12d50c712344091 +R = 2df3906527ad322000285bccdd11dd09130d633cf43534f5802604639eb847e0 +S = adaaad19b7c66836ef0f4afeff8ac5e898cd2523246a74a1a291a3a1ff583322 + +Curve = P-256 +X = 70b4bba10b7bbc6d4175ada8d485f3685b13916d0c992301f47e45b629c63d0e +Y = 257a93be31b09ff4cd22e3375e30b5a79f3bf3c74c80dde93e5d65e88c07c1c4 +Digest = cc3a0d3a5d4f28dc9144a3cdb276eb92265f1157a8d8192cf628673c +R = 6e714a737b07a4784d26bde0399d8eee81998a13363785e2e4fb527e6a5c9e4e +S = 94c0220f0f3fa66ff24f96717f464b66ae3a7b0f228ab6a0b5775038da13768a +Invalid = Y + +Curve = P-256 +X = 8b11b48d2397355000a5289d816b9892ae64dffc842abec02a2fb2db2bb34310 +Y = fc1a42528a0473cfc2c2e184b8bc5055096350fe1549d24b526d6536681026e8 +Digest = f340e491fa935be8945b8caa485d0699c66331e0e17c7407da1b018e +R = 61a91dd1c80049e70dc4aea84bda0efc6ec9c7b9dd16ecbccf687244c51184ce +S = e381e7b32bab49578c7e7ce7784ce19263e4a7dab4b614df411d20eaebfc391c +Invalid = Y + +Curve = P-256 +X = 7bad1b3d8bad4355a44511d2eb50daeae793af99418ada118327359936aa0e1d +Y = e7eff40334b7a5455f6b0d0ecdcdc513702857bb5bbb73c910c86746092bcd7d +Digest = 9cf84546c046b370c372c167ebba39af6aadd60463626453787bb058 +R = fd961b60b21be32b47abafa77e22197dc99af6825dcca46e0e3b1991a90aa202 +S = a0477f97b94a1c26a3b2d186791d7fc9dfa8130bbae79c28fa11ec93a3aeac0b +Invalid = Y + +Curve = P-256 +X = 407d92c9b28723602bf09f20f0de002afdf90e22cb709a8d38e3c51e82cba96c +Y = 4530659432e1dd74237768133e1f9808e62d0fbe5d1d979d1571baf645dcb84c +Digest = 0cf5cd48c93f45472d254196bebea4bddb272a2adff23bab8c3adf99 +R = a7dc65293ee3deb0008ae3e2d7ef9e9a4ebb8bf7b10d165f80ab8bed58d6fdef +S = 3e8300a3ee603a8d8234fe265c628e705015bf1903eb74c943323050626f701f +Invalid = Y + +Curve = P-256 +X = 26aea3dd5c53f984dbdaf415c7f26e1e73048658a548eb3b59dd5f721899919a +Y = dff15f57bd9b08644d49cbb214403647195725cd4d4511bc8a48b0770466ae9f +Digest = 75d6b6b575d0a2c89528b83c94ef864c825b66253ab662b36bb0e716 +R = 726af92afe53e8125b0b9f3659745be401a37ae658b7b1aa88c3cb97e9de22c3 +S = 794484c5837a419efe11a4e4293341a6fa36d21230925a0e5e135887302acca9 +Invalid = Y + +Curve = P-256 +X = e73418677ce044b331a6d60773cbae199221699d31e1bec4b68b9bc0b87e4cd0 +Y = 37215db4e3d9161f3351b385a61ddb2fcf1cec469d1659e7574610ed27fe879f +Digest = dcbb92e3be3951d37e37852d508f78da29c8183c5dbe59d6549f78ed +R = ac469290a8f61a2a8c6adc7533dd5cfe804e2e7bf101cc74e5f624f301bccd23 +S = 4c328c3bc259316641fff44753743afebe89b8627f904df7245e42adcff2dc76 +Invalid = Y + +Curve = P-256 +X = b0892b19c508b3543a5ae864ba9194084c8f7ae544760759550cc160972e87ff +Y = 9208e9b0c86ad6bc833e53026f233db9a42298cdb35d906326008377520b7d98 +Digest = 90333facb4f5068c1d05d1a478fb46d02f367e271a000474c06a5fec +R = a62dd0d1518c6b9c60de766b952312a8d8c6eaa36a68196d2a30a46fb17dc067 +S = b9ded660e978129277f74c1d436003d1e6d556dc8eed9d505bbaf4c67cb13d21 +Invalid = Y + +Curve = P-256 +X = 8c5c41cb07d828a6a86be4533aef791d3a70a95cb285aa2956b21feeac2f8c49 +Y = 84101581cad7a48b7d0596df7ffed47085d22e8a4af685cddbeeb32ea69ae190 +Digest = 8bb52bd045c985167f673c07b613a3402f435a54c122877bc0c5fe34 +R = 9812449df0a51f7a2a8f78aa9a589ca9644dce285f1e69658daaea759fa5bd7e +S = beb4c27c748a7944e37afe861576f76b5a749a8ccbbd7dec00838ba250ddfe1a +Invalid = Y + +Curve = P-256 +X = 788d7e54ab03020e4954f41259052ee5af68361492b180da31fbbe68d868aa95 +Y = 982a3ababa6d351649e56da3faeb7160b9de74e22fe93a06ead1bd9a8dffdf7e +Digest = 9870ae25b0f0403eff1079b94669cf95fb250fb098eeb885ff08f117 +R = 3ddea06bf8aa4a1b0c68674a2c4796def0bfb52236f4efb3332204a41fd8ea89 +S = 871237039431a41aeefcdd08f67848b2b09067e3a1344c8ed9b372d1b1c754a6 +Invalid = Y + +Curve = P-256 +X = 87f8f2b218f49845f6f10eec3877136269f5c1a54736dbdf69f89940cad41555 +Y = e15f369036f49842fac7a86c8a2b0557609776814448b8f5e84aa9f4395205e9 +Digest = a82c31412f537135d1c418bd7136fb5fde9426e70c70e7c2fb11f02f30fdeae2 +R = d19ff48b324915576416097d2544f7cbdf8768b1454ad20e0baac50e211f23b0 +S = a3e81e59311cdfff2d4784949f7a2cb50ba6c3a91fa54710568e61aca3e847c6 +Invalid = Y + +Curve = P-256 +X = 5cf02a00d205bdfee2016f7421807fc38ae69e6b7ccd064ee689fc1a94a9f7d2 +Y = ec530ce3cc5c9d1af463f264d685afe2b4db4b5828d7e61b748930f3ce622a85 +Digest = 5984eab8854d0a9aa5f0c70f96deeb510e5f9ff8c51befcdc3c41bac53577f22 +R = dc23d130c6117fb5751201455e99f36f59aba1a6a21cf2d0e7481a97451d6693 +S = d6ce7708c18dbf35d4f8aa7240922dc6823f2e7058cbc1484fcad1599db5018c +Invalid = Y + +Curve = P-256 +X = 2ddfd145767883ffbb0ac003ab4a44346d08fa2570b3120dcce94562422244cb +Y = 5f70c7d11ac2b7a435ccfbbae02c3df1ea6b532cc0e9db74f93fffca7c6f9a64 +Digest = 44b02ad3088076f997220a68ff0b27a58ecfa528b604427097cce5ca956274c5 +R = 9913111cff6f20c5bf453a99cd2c2019a4e749a49724a08774d14e4c113edda8 +S = 9467cd4cd21ecb56b0cab0a9a453b43386845459127a952421f5c6382866c5cc +Invalid = Y + +Curve = P-256 +X = e424dc61d4bb3cb7ef4344a7f8957a0c5134e16f7a67c074f82e6e12f49abf3c +Y = 970eed7aa2bc48651545949de1dddaf0127e5965ac85d1243d6f60e7dfaee927 +Digest = d1b8ef21eb4182ee270638061063a3f3c16c114e33937f69fb232cc833965a94 +R = bf96b99aa49c705c910be33142017c642ff540c76349b9dab72f981fd9347f4f +S = 17c55095819089c2e03b9cd415abdf12444e323075d98f31920b9e0f57ec871c + +Curve = P-256 +X = e0fc6a6f50e1c57475673ee54e3a57f9a49f3328e743bf52f335e3eeaa3d2864 +Y = 7f59d689c91e463607d9194d99faf316e25432870816dde63f5d4b373f12f22a +Digest = b9336a8d1f3e8ede001d19f41320bc7672d772a3d2cb0e435fff3c27d6804a2c +R = 1d75830cd36f4c9aa181b2c4221e87f176b7f05b7c87824e82e396c88315c407 +S = cb2acb01dac96efc53a32d4a0d85d0c2e48955214783ecf50a4f0414a319c05a + +Curve = P-256 +X = a849bef575cac3c6920fbce675c3b787136209f855de19ffe2e8d29b31a5ad86 +Y = bf5fe4f7858f9b805bd8dcc05ad5e7fb889de2f822f3d8b41694e6c55c16b471 +Digest = 640c13e290147a48c83e0ea75a0f92723cda125ee21a747e34c8d1b36f16cf2d +R = 25acc3aa9d9e84c7abf08f73fa4195acc506491d6fc37cb9074528a7db87b9d6 +S = 9b21d5b5259ed3f2ef07dfec6cc90d3a37855d1ce122a85ba6a333f307d31537 +Invalid = Y + +Curve = P-256 +X = 3dfb6f40f2471b29b77fdccba72d37c21bba019efa40c1c8f91ec405d7dcc5df +Y = f22f953f1e395a52ead7f3ae3fc47451b438117b1e04d613bc8555b7d6e6d1bb +Digest = 8a3e7ad7b9b1b0cdc48e58d1e651fe6d710fef1420addeb61582bdd982d2b44c +R = 548886278e5ec26bed811dbb72db1e154b6f17be70deb1b210107decb1ec2a5a +S = e93bfebd2f14f3d827ca32b464be6e69187f5edbd52def4f96599c37d58eee75 +Invalid = Y + +Curve = P-256 +X = 69b7667056e1e11d6caf6e45643f8b21e7a4bebda463c7fdbc13bc98efbd0214 +Y = d3f9b12eb46c7c6fda0da3fc85bc1fd831557f9abc902a3be3cb3e8be7d1aa2f +Digest = d80e9933e86769731ec16ff31e6821531bcf07fcbad9e2ac16ec9e6cb343a870 +R = 288f7a1cd391842cce21f00e6f15471c04dc182fe4b14d92dc18910879799790 +S = 247b3c4e89a3bcadfea73c7bfd361def43715fa382b8c3edf4ae15d6e55e9979 +Invalid = Y + +Curve = P-256 +X = bf02cbcf6d8cc26e91766d8af0b164fc5968535e84c158eb3bc4e2d79c3cc682 +Y = 069ba6cb06b49d60812066afa16ecf7b51352f2c03bd93ec220822b1f3dfba03 +Digest = 7c1048884558961c7e178b3a9b22583fca0d17f355a9887e2f96d363d2a776a3 +R = f5acb06c59c2b4927fb852faa07faf4b1852bbb5d06840935e849c4d293d1bad +S = 049dab79c89cc02f1484c437f523e080a75f134917fda752f2d5ca397addfe5d +Invalid = Y + +Curve = P-256 +X = 224a4d65b958f6d6afb2904863efd2a734b31798884801fcab5a590f4d6da9de +Y = 178d51fddada62806f097aa615d33b8f2404e6b1479f5fd4859d595734d6d2b9 +Digest = 4c8d1afb724ad0c2ec458d866ac1dbb4497e273bbf05f88153102987e376fa75 +R = 87b93ee2fecfda54deb8dff8e426f3c72c8864991f8ec2b3205bb3b416de93d2 +S = 4044a24df85be0cc76f21a4430b75b8e77b932a87f51e4eccbc45c263ebf8f66 +Invalid = Y + +Curve = P-256 +X = 43691c7795a57ead8c5c68536fe934538d46f12889680a9cb6d055a066228369 +Y = f8790110b3c3b281aa1eae037d4f1234aff587d903d93ba3af225c27ddc9ccac +Digest = 8581034ec7d7a6b163d71820923f616b362748f2846042c9896d8e4bf7577960 +R = 8acd62e8c262fa50dd9840480969f4ef70f218ebf8ef9584f199031132c6b1ce +S = cfca7ed3d4347fb2a29e526b43c348ae1ce6c60d44f3191b6d8ea3a2d9c92154 +Invalid = Y + +Curve = P-256 +X = 9157dbfcf8cf385f5bb1568ad5c6e2a8652ba6dfc63bc1753edf5268cb7eb596 +Y = 972570f4313d47fc96f7c02d5594d77d46f91e949808825b3d31f029e8296405 +Digest = e5b30e0041a33281210644938d9aaa15ef2c1247b4178f7ca1ee935ce23daabc +R = dfaea6f297fa320b707866125c2a7d5d515b51a503bee817de9faa343cc48eeb +S = 8f780ad713f9c3e5a4f7fa4c519833dfefc6a7432389b1e4af463961f09764f2 +Invalid = Y + +Curve = P-256 +X = 072b10c081a4c1713a294f248aef850e297991aca47fa96a7470abe3b8acfdda +Y = 9581145cca04a0fb94cedce752c8f0370861916d2a94e7c647c5373ce6a4c8f5 +Digest = edd72dc0aa91649e09e2489c37ec27efab3b61953762c6b4532a9b1cd08a500d +R = 09f5483eccec80f9d104815a1be9cc1a8e5b12b6eb482a65c6907b7480cf4f19 +S = a4f90e560c5e4eb8696cb276e5165b6a9d486345dedfb094a76e8442d026378d +Invalid = Y + +Curve = P-256 +X = 09308ea5bfad6e5adf408634b3d5ce9240d35442f7fe116452aaec0d25be8c24 +Y = f40c93e023ef494b1c3079b2d10ef67f3170740495ce2cc57f8ee4b0618b8ee5 +Digest = 0d06ba42d256062e16b319a0f3099109518a765f26bac3b9f56930d965617726 +R = 5cc8aa7c35743ec0c23dde88dabd5e4fcd0192d2116f6926fef788cddb754e73 +S = 9c9c045ebaa1b828c32f82ace0d18daebf5e156eb7cbfdc1eff4399a8a900ae7 +Invalid = Y + +Curve = P-256 +X = 2d98ea01f754d34bbc3003df5050200abf445ec728556d7ed7d5c54c55552b6d +Y = 9b52672742d637a32add056dfd6d8792f2a33c2e69dafabea09b960bc61e230a +Digest = 41007876926a20f821d72d9c6f2c9dae6c03954123ea6e6939d7e6e669438891 +R = 06108e525f845d0155bf60193222b3219c98e3d49424c2fb2a0987f825c17959 +S = 62b5cdd591e5b507e560167ba8f6f7cda74673eb315680cb89ccbc4eec477dce + +Curve = P-256 +X = 40ded13dbbe72c629c38f07f7f95cf75a50e2a524897604c84fafde5e4cafb9f +Y = a17202e92d7d6a37c438779349fd79567d75a40ef22b7d09ca21ccf4aec9a66c +Digest = 5aa8e8a6f0622b841416e1a70d79a54641d2c699a075b6960fe5dcf96301da8ca6f15b0948d4ededac30a42e00d3b310 +R = be34730c31730b4e412e6c52c23edbd36583ace2102b39afa11d24b6848cb77f +S = 03655202d5fd8c9e3ae971b6f080640c406112fd95e7015874e9b6ee77752b10 +Invalid = Y + +Curve = P-256 +X = 1f80e19ffeb51dd74f1c397ac3dfd3415ab16ebd0847ed119e6c3b15a1a884b8 +Y = 9b395787371dbfb55d1347d7bed1c261d2908121fb78de1d1bf2d00666a62aed +Digest = 244656186c11c2e67be88099d55e60f4b68e61fba0b214aac3399dc559cfccc02f9884e85623426dbdc3243f2b5374f7 +R = 249ca2c3eb6e04ac57334c2f75dc5e658bbb485bf187100774f5099dd13ef707 +S = 97363a05202b602d13166346694e38135bbce025be94950e9233f4c8013bf5bf +Invalid = Y + +Curve = P-256 +X = ce4dcfa7384c83443ace0fb82c4ac1adfa100a9b2c7bf09f093f8b6d084e50c2 +Y = d98ae7b91abee648d0bfde192703741ac21daad7262af418b50e406d825eb0d6 +Digest = adaeadda3f0e941fba1d3e206a84e6d7530d800e0f215b3ddd82022f27c5be44fed27bc73084c6f7ca55555532be2e3b +R = 597e1e04d93a6b444ccc447a48651f17657ff43fb65fe94461d2bf816b01af40 +S = 359fe3817963548e676d6da34c2d0866aa42499237b682002889eaf8893814d2 + +Curve = P-256 +X = 1b677f535ac69d1acd4592c0d12fac13c9131e5a6f8ab4f9d0afdcb3a3f327e0 +Y = 5dca2c73ec89e58ef8267cba2bb5eb0f551f412f9dc087c1a6944f0ce475277a +Digest = e34a541f87ff0eaa0c640f555caec6bf11a1320c74c47a8ff172c4e2ec902e48d499732b12a86189e750bbf4c0424c72 +R = df0b0cd76d2555d4c38b3d70bfdf964884d0beeb9f74385f0893e87d20c9642d +S = 128299aabf1f5496112be1fe04365f5f8215b08a040abdfeca4626f4d15c005b +Invalid = Y + +Curve = P-256 +X = 7ffc2853f3e17887dda13b0eb43f183ce50a5ac0f8bba75fb1921172484f9b94 +Y = 4cc523d14192f80bd5b27d30b3b41e064da87bfbae15572dd382b9a176c123a2 +Digest = 0689927a38486cccf28fe9454e08e0d74843424b89be4cdee8e48f39a69addec730184da72f914cea67231c765ee2574 +R = 3156176d52eb26f9391229de4251993a41b8172f78970bb70e32a245be4bb653 +S = 62827a29e12d2f29b00fb2d02dd5f2d5412e17a4455f4431a5c996881fdfc0ee +Invalid = Y + +Curve = P-256 +X = 5569f76dc94243cde819fb6fc85144ec67e2b5d49539f62e24d406d1b68f0058 +Y = 1208c38dbe25870deab53c486f793a1e250c9d1b8e7c147ea68b71196c440730 +Digest = 97f8f8cea435282ac746730ac744bf97d85d4e249c0b1d9c7b83c7e59aed172ffc3724d7e6fab7d6ab55ffb3a39c0775 +R = 706f2ba4025e7c06b66d6369a3f93b2fec46c51eceff42a158f7431919506cfb +S = b4e75ac34a96393237fc4337789e37168d79382705b248051c9c72bcbac5f516 +Invalid = Y + +Curve = P-256 +X = e4b470c65b2c04db060d7105ec6911589863d3c7f7ce48726ba3f369ea3467e8 +Y = 44c38d3ae098de05f5915a5868c17fee296a6e150beb1f000df5f3bec8fc4532 +Digest = 5b937a2af46dbf18b4a6fb042ea353a6878e0d4beac016002b3d91a42bcba52856c07a3f35c08dfecb4f03e1c0b9948e +R = c9c347ee5717e4c759ddaf09e86f4e1db2c8658593177cfda4e6514b5e3ecb87 +S = baae01e9e44a7b04d69c8eaaed77c9e3a36ce8962f95cc50a0db146b4e49eb40 +Invalid = Y + +Curve = P-256 +X = 96050c5fa2ddd1b2e5451d89ee74a0b7b54347364ddc0231715a6ef1146fe8dc +Y = e0888a9e78aeea87f6e1e9002b2651169f36c4ee53013cfc8c9912b7fd504858 +Digest = b123e07744f05ad523790ea5bfa3f848869a3bfdbf936a496c8606b577ed8427eb7ee888e0fe18d4e3cfac73baad883f +R = 2353d6cd3c21b8ea7dbc1cd940519812dbe365a3b15cd6aebba9d11cf269867a +S = 85f560273cd9e82e6801e4cb1c8cd29cdac34a020da211d77453756b604b8fa7 + +Curve = P-256 +X = 0c07bb79f44012299fbfd5a0f31397aaf7d757f8a38437407c1b09271c6551a0 +Y = 84fe7846d5d403dc92c0091fbd39f3c5cbca3f94c10b5cae44e2e96562131b13 +Digest = fb8d12652de59e63ef5297641dfbce084808de146720e9069c2ef814bcd80b6187f7422a6cd9c706f8d64ccf80e8bc54 +R = 49e9425f82d0a8c503009cead24e12adc9d48a08594094ca4f6d13ad1e3c571d +S = 1f1b70aaa30a8ff639aa0935944e9b88326a213ab8fce5194c1a9dec070eb433 +Invalid = Y + +Curve = P-256 +X = 71db1de1a1f38f356c91feaff5cfe395d1a5b9d23cf6aa19f38ae0bcc90a486d +Y = ecdd6ffb174a50f1cc792985c2f9608c399c98b8a64a69d2b5b7cdd9241f67e2 +Digest = 2d8c6585a3b6319a556e27b53d434f455f73e771c8fc6a115f5c92a8e9a81ce2b4336a5c3edf98910689d11f4c93632a +R = b0443b33a6f249470d2f943675009d21b9ccbead1525ae57815df86bb20470bf +S = 316dbee27d998e09128539c269e297ac8f34b9ef8249a0619168c3495c5c1198 +Invalid = Y + +Curve = P-256 +X = 8219b225aa15472262c648cac8de9aad4173d17a231ba24352a5a1c4eea70fad +Y = 0fee2b08ad39fbf0db0016ef2896ca99adc07efc8c415f640f3720498be26037 +Digest = a4cc3b23f54d9d48ba6b0ad3da3b2e3a0806f41348bd7844e9c9b8648753bdeef8a039e1fa4f5172c89148d65b14056f +R = 134fb689101aaad3954de2819d9fbd12072fe2bc36f496bbf0d13fa72114ab96 +S = e65c232bd915b59e087e7fd5ec90bf636cfa80526345c79a0adfd75003045d6f +Invalid = Y + +Curve = P-256 +X = c934195de33b60cf00461fc3c45dad068e9f5f7af5c7fa78591e95aeb04e2617 +Y = b588dd5f9965fdaa523b475c2812c251bc6973e2df21d9beaace976abf5728cb +Digest = b962b63a7743ad77f9072f2f08d277f6dda8cc3420ddd37d873746008895902bcce218fbfed1a8cb28406978dd8e5134 +R = 71f302440eb4ed2a939b69e33e905e6fdc545c743458d38f7e1a1d456e35f389 +S = 54eaa0eb9cd7503b19a9658f0a04955d9f0ab20ebc8a0877e33c89ee88ad068f +Invalid = Y + +Curve = P-256 +X = 9e1adcd48e2e3f0e4c213501808228e587c40558f52bb54ddbb6102d4048ea92 +Y = 34eff98704790938e7e0bdf87ae39807a6b77dfdc9ecdfe6dd0f241abae1aeb2 +Digest = 21b883fae159867731b123a2606e9b3320fb53a00e4a5dfe3bc3429dd53b8068197be3c7288c1e0bf28a4fc7b13bd70f +R = ce4f0d7480522c8dd1b02dd0eb382f22406642f038c1ede9411883d72b3e7ed0 +S = 8546e1ee3b77f9927cdaccbc2f1cf19d6b5576b0f738bb1b86a0c66b39ca56fb +Invalid = Y + +Curve = P-256 +X = 93edbecb0b019c2cc03060f54cb4904b920fdb34eb83badd752be9443036ae13 +Y = b494e9295e080a9080fe7e73249b3a5904aa84e1c028121eecd3e2cf1a55f598 +Digest = fcc17b88077570c053650e1de42ae6bb1522900b38996decc87704aab6a87ab01d52f83f6442875f378a262c22d23ab2 +R = eec2986d47b71995892b0915d3d5becc4dcb2ab55206d772e0189541b2184ddf +S = 8a6c1edeb6452627ad27c8319599c54ac44cdd831ea66f13f49d90affe6ad45b + +Curve = P-256 +X = 3205bae876f9bd50b0713959e72457165e826cbbe3895d67320909daa48b0ebc +Y = d1592562273e5e0f57bbfb92cedd9af7f133255684ee050af9b6f02019bbcafa +Digest = 299a6070d32a5557010753d7559dbd8d2bde8a8feae5417616ceb5b167997fd2fac0c2bd44264106d3a9720d5e805a04 +R = 0124f3f1c61ec458561a4eaa6c155bd29e59703d14556324924683db3a4cf43b +S = 688a5c5fc0c7ba92210c50cce5b512a468a880e05acc21ca56571d89f45f603a +Invalid = Y + +Curve = P-256 +X = 484e31e69ef70bb8527853c22c6b6b4cd2a51311dde66c7b63f097dbb6ab27bf +Y = e1ff8177f4061d4fbbacbbc70519f0fc8c8b6053d72af0fe4f048d615004f74e +Digest = f1e9cda2e096ece9a1fc57e55eeeb56b1c635380c0f9a1800a4a1a5f105d1fc0c60e776234daaa8a6f7c0f5286bb420b3f607e7cc0a7d840ad5dcbab26c797b0 +R = 91a303d8fe3ab4176070f6406267f6b79bfe5eb5f62ae6aeb374d90667858518 +S = e152119cefa26826ea07ec40a428869132d70812c5578c5a260e48d6800e046a +Invalid = Y + +Curve = P-256 +X = 8b75fc0129c9a78f8395c63ae9694b05cd6950665cf5da7d66118de451422624 +Y = b394171981d4896d6e1b4ef2336d9befe7d27e1eb87f1c14b8ddda622af379dc +Digest = 0527199fadea30f9e5e66166a3ebcdf6aedf906984535f48165e591eff36f1c0de6b0fa69aefb6399e8a213cc2ce53268fbe18c3471b7708bc27c426aaa769a4 +R = 17e298e67ad2af76f6892fdcead00a88256573868f79dc74431b55103058f0b0 +S = 881328cd91e43d30133f6e471e0b9b04353b17893fb7614fd7333d812a3df6b4 +Invalid = Y + +Curve = P-256 +X = 76e51086e078b2b116fd1e9c6fa3d53f675ae40252fb9f0cc62817bd9ce8831d +Y = ca7e609a0b1d14b7c9249b53da0b2050450e2a25cb6c8f81c5311974a7efb576 +Digest = c926a5026d8f83ffa2092caf863f2d8a886af391462969b13a11d3c6c5fa66bb4281bc6e60a1e99a2e1ae95d689a66282096a0f27aacc048f32d39297649a014 +R = 23b653faaa7d4552388771931803ce939dd5ee62d3fa72b019be1b2272c85592 +S = a03c6f5c54a10861d6b8922821708e9306fd6d5d10d566845a106539cbf4fadd +Invalid = Y + +Curve = P-256 +X = bc7c8e09bd093468f706740a4130c544374fdc924a535ef02e9d3be6c6d3bbfa +Y = af3f813ae6646f5b6dbfb0f261fd42537705c800bb1647386343428a9f2e10fc +Digest = 4d74631eb67fd1a6fa93ecb6e6112b6699e78c1d4c24ae81d0d5842efe5d93c2fd7a7863f8d45d1b2fafecbe41b7dc19c4b2bc208e014ffdc216e7eda0392a70 +R = 6bd7ce95af25abfbf14aef4b17392f1da877ab562eca38d785fe39682e9c9324 +S = 6688bea20c87bab34d420642da9bdd4c69456bdec50835887367bb4fb7cd8650 +Invalid = Y + +Curve = P-256 +X = 9cb0cf69303dafc761d4e4687b4ecf039e6d34ab964af80810d8d558a4a8d6f7 +Y = 2d51233a1788920a86ee08a1962c79efa317fb7879e297dad2146db995fa1c78 +Digest = 0250f93e6932887df519921f9a8dcff110be0768dc351ef73a940a579fae2d20061759e892e289c3e4ba5f7fe17d6ebb15c5931d48db55ebc81549f6637292fe +R = 4b9f91e4285287261a1d1c923cf619cd52c175cfe7f1be60a5258c610348ba3d +S = 28c45f901d71c41b298638ec0d6a85d7fcb0c33bbfec5a9c810846b639289a84 + +Curve = P-256 +X = e31096c2d512fbf84f81e9bdb16f33121702897605b43a3db546f8fb695b5f6f +Y = 6fbec6a04a8c59d61c900a851d8bf8522187d3ec2637b10fa8f377689e086bba +Digest = f91b09107d10904d3968ec29f85e456ac4e828f32e8da3db6a13f5566bfa625e2ad03f8dad5425a073c0d61d25de63dcafa9f4fcd206f29e9cb6b0fecd74aa57 +R = 1b244c21c08c0c0a10477fb7a21382d405b95c755088292859ca0e71bab68361 +S = 852f4cbfd346e90f404e1dd5c4b2c1debca3ea1abefe8400685d703aea6c5c7f +Invalid = Y + +Curve = P-256 +X = 633c2ee5630b62c9ce839efd4d485a6d35e8b9430d264ffe501d28dbace79123 +Y = 4b668a1a6d1a25b089f75c2bd8d8c6a9a14fe7b729f45a82565da2e866e2c490 +Digest = 575c64df58c8dc517ce65b388fa3ed69470163afecbabc3fa94b497ff7f3fe36ff12fabe2b84cebbf667744195091e4e2335a71d36414e0af0d0260fc8e8ea44 +R = bf2111c93ec055a7eda90c106fce494fd866045634fd2aa28d6e018f9106994e +S = 86b0341208a0aa55edecfd272f49cb34408ce54b7febc1d0a1c2ce77ab6988f8 +Invalid = Y + +Curve = P-256 +X = f78dce40d1cb8c4af2749bf22c6f8a9a470b1e41112796215dd017e57df1b38a +Y = 61b29b0bc03dff7fa00613b4de1e2317cfbf2badd50dee3376c032a887c5b865 +Digest = 4c097f2f5b2489c94258b34d529675bb5d77d4be083b51b01188dd42b4b5473982728763ee6fbad479375c5eacb5edaaec0b6583a10b19aad81ec88dde2d0e7f +R = 4a96169a5dea36a2594011537ee0dc19e8f9f74e82c07434079447155a830152 +S = a204eaa4e97d7553a1521d9f6baadc0b6d6183ba0f385d8593d6ca83607c4d82 +Invalid = Y + +Curve = P-256 +X = 3fcc3b3e1b103fe435ac214c756bdaad309389e1c803e6d84bbbc27039fcf900 +Y = 7f09edd1ec87a6d36dc81c1528d52a62776e666c274415a9f441d6a8df6b9237 +Digest = 1a3dd21cb6ac1fa7fc196319cf534b7608afb93805420fcb5250dff453564a5b22e22971a3ce6dd222405fea018cd0508d86c561eca15e1ac7d79c14e916b86a +R = 1cac13f277354456ae67ab09b09e07eb1af2a2bf45108da70f5c8c6a4cbcd538 +S = 5d83752e540525602ba7e6fee4d4263f3eda59e67df20aac79ca67e8899fed0d +Invalid = Y + +Curve = P-256 +X = 5ec702d43a67ada86efbfc136cf16d96078906954a3f1f9e440674cd907e4676 +Y = 05a62044fed8470dd4fca38d89d583ce36d50d28b66ab0b51922b21da92c56d9 +Digest = c5c016f6c9b525987dd835131def77cc72d8360d364eeccdd7af8b95712b6cd487c0b846201f3b64466fd140833514ae8d765da395fbd9d3c03ca410effa9a69 +R = 75f3037298f1457dba55743999976a1c2636b2b8ab2ed3df4736a6d2934acc83 +S = 19d43ad168dda1bb8ac423f8f08876515234b3d841e57faef1b5ab27359b27ef +Invalid = Y + +Curve = P-256 +X = f63afe99e1b5fc652782f86b59926af22e6072be93390fe41f541204f9c935d1 +Y = f6e19ce5935e336183c21becf66596b8f559d2d02ee282aa87a7d6f936f7260c +Digest = 9eb2f9fa96a1f3ffcef9600522730e86d26d328ec0c1bf2fbfe55a38754610341fda1b894fdcf10c9bc4f48819010fdcf0d24f27ff539e40c6855cafbd306386 +R = cef4831e4515c77ca062282614b54a11b7dc4057e6997685c2fbfa95b392bf72 +S = f20dc01bf38e1344ba675a22239d9893b3a3e33d9a403329a3d21650e9125b75 + +Curve = P-256 +X = 6d11b09d2767cf8d275faee746c203486259f66dd2bfa3a65c39371a66b23385 +Y = 4eb05c73e05261e979182833f20311e5366f72f4b949665ff294f959375534c6 +Digest = 0e71b28b0a1eac7aa881c09daec616c93d9a9286b5f5fdf2642d211021b125fa884b2595b73c7c3e649e61cd7157ef6660076a3b87ddf830db46533f3aa30afa +R = 15a697cdb614e11c0810e1e764cd501fcabc70874c957587bc4883d9438e177f +S = 7bf6244f92bc768063cecb5336c8eaacd23db930b28703560f241c7d93950dfd +Invalid = Y + +Curve = P-256 +X = f3899caba038efb534c4cea0bd276814ffd80194473c903b81af11c8c05cb6e6 +Y = 6ea6b17402fcf2e8e737d11ffc7c2ed3b2d0bc3b8f271a381f4294cff62682c3 +Digest = 104ace16689d785df09a81c5cf47a496db30fbd696aa4df080219487575a23641436e70329dd1c13290582c0d03aae200e51189d43666c86f38a5203c16cd7e4 +R = 57b99380452e1d37b133c49b9ba493dee8630940477ca3351a43d90b99871e6a +S = df599c3a37105af3ecc159b3b685ccb3e151b7d5cf2d97147974ae71f466b615 +Invalid = Y + +Curve = P-256 +X = 1fd6f4b98d0755291e7a230e9f81ecf909e6350aadb08e42a3262ff19200fbd2 +Y = 5578fef79bc477acfb8ed0dc10c4f5809c14dc5492405b3792a7940650b305d7 +Digest = 761a54f3718985b6d7bcfdd57d6c4823f854831bd29305fcb07e34e3f825d451fca28a62ce9582e3957d89ea7c1bc1afe3aa58fd2fa18566974600fc394cf2a8 +R = 97a99e96e407b3ada2c2dcf9ceeeb984d9a4d0aa66ddf0a74ca23cabfb1566cc +S = 0ecac315dc199cfea3c15348c130924a1f787019fe4cd3ae47ca8b111268754a +Invalid = Y + +Curve = P-256 +X = 2dcbd8790cee552e9f18f2b3149a2252dcd58b99ca7dc9680b92c8c43aa33874 +Y = 5dbc8bb8813c8e019d80e19acdb0792f537980fecde93db621aaf1f6d0e6ee34 +Digest = 45b082e804443b53a82229cdf13e4c5f8f31fe93170cc8a23f63eef506cb7748388e1a971a2f81e3daa324cf2bb69118f7418f40df66a24f50c34a55e1416c3a +R = 2bdbd8b0d759595662cc10b10236136ef6ce429641f68cf6480f472fcc77bc9f +S = 7e7df0c8b86f7db06caf1610166f7b9c4c75447f991d5aaf4dea720c25985c8c + +Curve = P-384 +X = 6881154cfe3f09affbee04cd387b27b7854326faf8906c4b9c9e6ac2c632e0d59717b3f33f6d747d7b7cbb4e4dc01fb8 +Y = ba295ae0966f06ad9d84b3bb4da7f99b56044c99f88d71082cfea6964ea3c63bb79806a6a41fcc314b55b3f64f82b68a +Digest = 8a6429d55885146f7aab582a1aa9360fa9591b0a +R = 2112385a75d4edda89ae2bc3c74524dc792544a3a52fdb588da3f0feaee6a11623db275e2ab8abdd998cc42a29c60856 +S = 8d308a3987b81c595f8cec19898b1a42da8eda97496af280033b0f915283f171fed7e2a221fa9c78927962189333f437 +Invalid = Y + +Curve = P-384 +X = 2f2f43f244ae027c3d2ec5c900393f80a8ad0e9b9a12a047195d29a39f2b7026b071688dd9a6764379d02a5ed8035ec1 +Y = e43d45851bc76c37d34dbed996a65ffcfbbaf0e2cbfbc9f62d2116bdf3b330bbef5acdbcd0aa6d949f771daa17cda1e3 +Digest = 5f41322db1a276042ae807f0f0d6f1e04cb5cd26 +R = c011c52e9cb02048957a233704ff9a2c1d4c56e08ebb083aa8ba351f041a23a7d0da19088ac6c60ea2ca117531c7cf35 +S = a66ca9bf06c35d129a8253a0f793acf681e482d9994868b275a230b215286e03a66a0de77c7a53174375137fd4688556 +Invalid = Y + +Curve = P-384 +X = 9a5e1932d318bfa7986f0dac4489c6f55775427bb60fb24bac7646b9994bbc3a9b5cd15e818cc4e832afc1c3fca9abae +Y = 64c89e7c3399c136b2718ab675944207157f0bf23d9e2a807ae7ac3bef81da7ec3c56c2d2c08afc53301af2a3cc71861 +Digest = d36ef9ee70a3b61ba31cdfcd0cac6e49331a407f +R = 4cf6c63fea6c80efc105cd99afe2b53da05ae16566ddb20b9d40a076575ffac419b6807fa336fc6e7c7416c59775ef09 +S = aec2d96054b4b23c49faaf9903ccf63bc96281fb7c1b9d14daa54bba51bb2b2f4d3a901f3b0b9cb2b62976459219350c +Invalid = Y + +Curve = P-384 +X = b3aeff27b65540c6da10a88008404b1d49239c87fbf47932518fb87a9bb132403d1f310f531d086340bb4a68c3e64b9b +Y = 567e75f442fcd81017b8adc4cce634f5ffa3cd497d38221d34dc1f43aef99133131ff1b197f7b9f37beecae5c438849a +Digest = dd0f9c326fb50593fd0a0df31abeeb00a22eb956 +R = 3b94a2514eb915b71e18c867ad7f508a35375c5bcd4b797b86054798569870b2477e2ac14406628017d829400efc63b2 +S = 179a10441a0beea3b375248e697e0d19e24bb68184c373fe4302839b97dd7353a5a25929c2733796b0c0d8211bd67c51 +Invalid = Y + +Curve = P-384 +X = 0874a2e0b8ff448f0e54321e27f4f1e64d064cdeb7d26f458c32e930120f4e57dc85c2693f977eed4a8ecc8db981b4d9 +Y = 1f69446df4f4c6f5de19003f45f891d0ebcd2fffdb5c81c040e8d6994c43c7feedb98a4a31edfb35e89a30013c3b9267 +Digest = a871caf9fff9856031a79a55b96753c1a34ccb73 +R = 8d9d3e3d0b2b2871ea2f03f27ba8699f214be8d875c0d770b0fff1c4ce341f0c834ac11f9ec12bfdb8320b1724c8c220 +S = 62150dfba8e65c0c7be7ef81c87241d2c37a83c27eb31ccc2b3c3957670a744c81be6d741340b5189cc0c547df81b0d2 + +Curve = P-384 +X = b4b92211edbd41c5468d2ba70810bc37b5e7c954c7bd0db80c4fa89ccba10bf07cdab953828a068bc0104d28e4040c14 +Y = 93ed318efce3dff98fc782b788d78658ea5ecde4f716e2d5d0ec2d87a2e761daa1f1658cfb857762caa567baaccf9924 +Digest = 765343d50541bc2c0e20193648048016a95e7588 +R = aa3978eabd196ddf9cab2815cc9cbab0b61cd639deaf70e093a10a58ddf9f410ee1ab965ff8fbb98efbe812421a613d3 +S = 02761a2947e1855806b8a25b9ebb0762be9f5517461a371e5783f34b184f32c4ea684b362119b1a2d8a3ff439f10291f + +Curve = P-384 +X = 63b4cc14f9efd3b8f29e65806591d1e9c54f34a3f5231339bcdbfa4109c42d946a59cdd7bbd2591fd1b2383a0819772f +Y = 55ab3d208109da6ef039c23cddd52a5af619266d8fe066dcabb1af885ad5501401a78c44ed3b5fff2892fdcb2a3ac8b2 +Digest = 4535ef8d7396b4f2af65660ebbb56f356cacefd9 +R = a3f9b840fd7201356f35b5dde39027410aad26ac61919c14fe7b0535bb74e7218cb3312bfa60aac63f14166f32ceff26 +S = 1b1bcbcb0237fad4e406c8d4e3e39b55642d8535afa9ccbc9c601cb4e01891df79f1bc792687cb3a5ee7703565c4a13b +Invalid = Y + +Curve = P-384 +X = f82f82f8f7454ce7a94a040ec0bbb52d49e3b9f8ddd095704973c760ee6067a5c28369656f22d70d8bb1cd70ef9bfea0 +Y = 0e36e256d02870ee5646a17aac4b280c9d1d2e1d4803eb3cb32e7f754cc889522120efd7c4d8a82e509a4d8f266d3ce4 +Digest = 26302c41e6da59e2df2e26c12382738880be94cc +R = 27a2332f3c59464f5dfe7bb1201a3936248d375bde603724c048eb8f7c0c2be3ed4b56c14b51d7d68bd2554526b36d9e +S = e1f90367b0cc530c545f95163d9ffb1208c943685d5ae221052b83ee40953397be581e5979c9855b20246e9d26d57acc +Invalid = Y + +Curve = P-384 +X = 7d40b51127cb1642dd8538d4124138a2f49c41b4d12f702c1b0cec8deba50c3712e01c2e1e693e00438af0e86025da33 +Y = e734b5939b673c45dd32baf20d234f01b7124b391d14beea231e9c604e813fc83b3a77b0cb1f2ce4873a69b0165e369d +Digest = 0b30b209147432207a72177997d28d6f1d03330f +R = abf16821b6657e0005071f78c679cbbb130bee6e7ca63526eef0f747fb721feefe6258dae1aa02064a700e963bd9dedf +S = 3f7e61c34a30cc5ff7a8be375fcc9c38a76dbc0c30a4356843421ca37a7bcf24edcd41d8235903bb522fb6e5a8033885 +Invalid = Y + +Curve = P-384 +X = a5b59d59599c105e39f61354da99c7c9135c749cf996cc2252eb83b008299cdafbcb44227d2d2c4a5ffa44823922893b +Y = 0399fb0edcbfd0b76b524f22b7b87ddbb4fa02f510661615312a4492eb3f2001e0fc0e479f77c33a88f9a7e20757373c +Digest = 44aa3083d111bbce7feb412af74a782cd320becd +R = a4c9cac2409a9bfea1ebe28fec4e19545f08cd18fdd31048f52a3f2d32b2ed859dcae4dc12fb2fecabe542c4f03191ba +S = b4d83f927ad1980d96cbb0ccc36aa640f786293b8b19e4dd97a797d192b420f630a5e42ac42d8736e7d42008f445dbc1 +Invalid = Y + +Curve = P-384 +X = 29178ce9127e1048ea70c7d435439e9ff9915387e51b7e5ca10bfdafe53565978eb3784d9a4226f443d4834f4d451685 +Y = 5cc2970589a453488649711bdf3cdac9a200519aae65b1c6bd54fed0d965755b36b74d978d674275bd71a03e8f054b0e +Digest = c679b4a0e61406c4869d721192bd314d77e1cb39 +R = 5d6f5e9a94d9c92a0890c558bc0408b3405cd04e33f663df16701e80520e4394f1c54d3c8225d36f4753a799aaf6ff90 +S = d895b1cc522ceec6a7867867b8f603245c6e4d48945dfc43af721ebae4683d40a3c21b905ca3bd4b974d36806825b2cd +Invalid = Y + +Curve = P-384 +X = 9f03569f8c6ca2c16d707f0ca36a8a8cf214a9d5c14034829d709e283cd675eb4e3090c6b973429efdf476c0782e0a7c +Y = e1b842536731e91596782787d57af17db85dc92fd2fb95ac65339174aee66775ce0a4721d1faeb29da968ea5eb705e59 +Digest = ae1a63f88a59c7da5d9f512d11bbd5d75dd1f583 +R = 31ccbe22a360b1786dac89394c6ef4ed6604943e50837395f96052821f6182914840096e90f2ad650917bd91d7bd4cfd +S = d97199a6b952dcaefb1defe23def92bf2ee236ad18046a2ccf8924d42ee10a62e70ffe7f3c909b11112278f160d98b7a + +Curve = P-384 +X = b85e78a935d169dd5ba8f558f964b21c07804464816f9231233184675f557463a8b00470ac0ca8278cd008f4642e7962 +Y = 8edf7be8584c5f207939d479e65173e2e69673090a8538fa93efb4432127895d92b4e4cf13b7632a830e9a33b37f75e1 +Digest = 811685f7ff2701e692f6830a33d8712d0432cd5a +R = fd2876b250a94ced71734aa7a0d32423b2c6f039c926c557e748f38e23bbdb46e17d1204832c6f76c3ea854e1da23979 +S = 76409e381799502c81194ba87540aec0b89fc4680dd683780d49f82a46a7191b40f5f06ccb02e45e704c31fcd59382b9 +Invalid = Y + +Curve = P-384 +X = 0c74aaa0527524cb6171ab741896b405a6ac4615e474cdc09c9457b18bed33c6383e1b92f2fa1306e8e5dcd1667e45fe +Y = 7b00d934dfd876f6e07dc0582b20ed650be104fa603a5a1255c62b6059d2685aa9773f1ba31254d213c815d0efc8ed93 +Digest = 328029316d73d1b8d2b8927d12332036e5671384 +R = 832c62b0f34986eda9d1ace5068a0c5318051b0d0166d3dacf137ac072cc359f109ad6e17059e700bb1958bcf4101246 +S = 6bb56f4eb550688ea66e5dd09aebe7e0b39e2716b4697ebb68f113e080f0ff26fd0fc947a34f3c5a8a2f10e07dc1405e +Invalid = Y + +Curve = P-384 +X = 4104de08b4108ee26ee239e0a5d340c1b1aa48b1b3b40717debd6ed3ff0d777923c106f857a3830ce7f3d08d0d6d7908 +Y = 00498c38393e6393edcf254804558f86e461df1f5a6557bc5144f8d2f3806413d372b6ce417d531c08a52d1e38e8b949 +Digest = a13ebaf4431c43b684d1e18e610a75fd7527200e +R = 9924a3273248db20db007309560a0e616572ac799d773529a5215786cf4a6e03cc73bea81d4810c1eee4b5e975652eee +S = 6cc8ea4c4c56da87c25946a198e86917227bcb90da7be1dcde7b6547bc45a98e8175dd54af15bb6ef955b4cb48b7bb0a +Invalid = Y + +Curve = P-384 +X = b6bc9418f3da0cce38a65f1b52bb3a9d22a0368e02f5f12fa1f1303ac67df1cffa55d049a782bf5bddb5e841b125aed6 +Y = 3b578a0560280a2958a14286e10faa7f5dec77fd8d90123aff5780efa8a636cee833fc9f10d7a164f1254a483b613746 +Digest = 7b44de2e448107197558cb071bb5bec9a5849467827d29b2c6625708 +R = 6602090aec001c16e5f6e7e3e488bed5d1702d36b258b6a8a2d8392a5ff30a6af12fbf4308d67eed6aaa8b7be8b831c5 +S = 65d0c3bb1910ba0b7cc108ae1ccaae63405ff01a8df91021e17cd46aa6f8ca8f4eaeac6d6fc26fc816a3ea537fd9576b +Invalid = Y + +Curve = P-384 +X = b4ab83a4ded7d76aa15eaecb1bafe59427d3cfc38564af9123cb707da2405184acd40a6c093ba29e321ba0f67c1e0c6a +Y = 26e2902499495f8550e798617a44ac9990c4c1cc3527dc0dd003a15aee3cbd3955151f7863de1692a94aafd3730e7665 +Digest = 8f902a34f36d7cd36748d5ddcc8fba6040be223a462842d506f185d1 +R = 61e48d5a100049578e820768ea57f30f27ffd1a1f839fabc55e8f4816c9b95d042619cd3bcc7180fd99834e344f53e7f +S = 977b81d43216f31d8bedc3ffe873047817de3441df8b80a321aa0a80931f25a15c6628f43cf8e48d5c6aeca7626b0a18 + +Curve = P-384 +X = f886f36fcf34e8df2a7e09220051b9981a3a6f693ec5999f28864e012c13896d633c9564f0118a95631cea8355b25b20 +Y = 746f9a77835325f18338dee5dc88a9b086b858ce15b4e4462a98844bb01811195f4fae0bee8f457c32823e142210dbb8 +Digest = 6a80377d3c7f0e6a50f6dc1656cef5a0d33cf7934441244f69f0062a +R = 665390653ed280b8f6bd3718d8423f26cb38d2d7faa10fc0f094295677d9dafad45fc64cfc22ded56afdd86a77cf3c33 +S = 864f0eb3a8d93c388d987cfcb60bba76098039d46bf4ff4be083961f70a29e724c25cf56685802b7b5be048107ad52e3 +Invalid = Y + +Curve = P-384 +X = 5fc835a2f5429adb719ed22f11dfcb02731da6759a8ea75c21d1af9631187626c31e191f4dcdc183df01c48e13dbbce6 +Y = 9ed2d03df1cbeaefd4478b8106e90f92e0b6e958145cb81b9648aef0b96b71d1d55918564694b1987d68cc8e7cbd7dd1 +Digest = 807f609592e2ededa12792a7006a6db641904e86a1df3cec477dfd3c +R = 94d9dedd27f2d014ba84ea58d2e88d68f3e86ba88b93750e50255211effe88b0a0e2f62017f22965726cdc77c55bca4f +S = 14814bd09d9b7ba81b2485777cc588b5c0a4064df95c63f18a8bfd57494cd0f40c5bda9dc6c01ea72540f57a354360ef +Invalid = Y + +Curve = P-384 +X = 0b86851d7c19f0f04a16e5e2903a36d09bf1863e152d87936fb2d74cf916bcf6dedf3c066d242f7dd327df0fcb42270a +Y = b0c93480740bb635e6c25fb61630fdfcc462a1418366a51b1265656f721e18ba89ebf754c7dfdad865a252c884a6c4fc +Digest = c34e896a31fc4de7596679e12bb2416a51e58e8942eabd5cb01f0737 +R = 33fa5fe3e495076e90f4b62753d3cdc7603aa7f5b407dbf89a854b9521d15e6c381d3cf28f103035dc4291ae318c5f82 +S = 30919a2a3fae71e1afe8378aedcaa08fadfab6c6bf954031452d4fe514969ede2acf0347a2f1e81abf1bfb9d8bd55a36 +Invalid = Y + +Curve = P-384 +X = 6f8f2fc40d1db28309c8850bf94d77c01c5449b4fc556e6bf50e5ee805209c4489d8ff9bd781699eb0e42f6a962d56fe +Y = a4c7c77271dbbe7e00d1c6e4287dddc5463c6803a577a18f89a5eea01c6addc12404353abbc128cb9cf2496732312d65 +Digest = c19cabc6141b2adf67fe4bd0a3fead50473dea8cb0276de1fdc467c5 +R = 327c4642019a635d80dab82f7dc22e3102a3c1ba684c2b6de67d3d3009a17d39ae3d58ca2caec9f6f03f5ba3b406178c +S = 6b1af807cc7265cc6d3049959cd7779ae0de819036647f9510b0e9f7e4c0e3fece5fc3741b68881145a2c944dc5c54d1 + +Curve = P-384 +X = e98ba8016a976dcc3c50127d2af792969835b1096b1644b37c004d1786f4fb1026233f33ad56cd9444ba0a332c92efb8 +Y = 54bbcb78ffa3c855dd24bf182376ff5d28dd7b7551e4b05a19549c9f59c83dcc12a43092d63c5967fc0256612475b7d4 +Digest = d8d9319d3f705d03dfc992e8e7596586200fb1574f2a918350deb268 +R = 3b76a0c0ece2348085f3554fc92b9e5b0fe84801ab2adf1d239d7c81c9697b62285e8e5667774559d1bbc6e86f2ade64 +S = 91d929e42f8223ccc74d4cb09ee7eb619d3a348886c21091ec55d36164ad3cc04e1da6edd88ad89710a908ca4bc00333 +Invalid = Y + +Curve = P-384 +X = b8d7a836715635a8b095d3712817aa9e6ffdd98d24be2db751bb0c1fad42b082542500ea255cde17525ec159afca7002 +Y = 1a526c876d4771157b4f66e3056485c95066d4bd1e73e991ce6d5d3642807efe80015c52ef3cf8c86e57ab9a510ec86a +Digest = fe23e8ab9dc934144247930a48babb0d8ba57703c2bef60e0e9a1e2b +R = 9e36f47ec1b7ffdc6e3472f3cbec913494c0bbaa0c073f597e01845b5a3107c0e23a4575de4f2b582e1c2fe3067ec048 +S = b013cf51008a89b379a2a6b519b8d229ff0374401eae21a8da350fe35756b94168e7fafbd81f0f681f21c056941a82eb +Invalid = Y + +Curve = P-384 +X = 4ffdecf5d5f7c1164297a93742c8a685bb425b97fdfe85f630dab2064ab29e52a0df34629c2531048c288216723fc9bf +Y = 84fcff3e7e478a6932ace6f6b0ab70e61d8a5137b76886c59e721d938e0e252e2f7e57c2ab7dab90493446ad85c3fe4c +Digest = 28d44c363bfb2e36bc59bb68c56e8b5d2587f149839fd3b8c05d9eb3 +R = 7d909d9aacf064c32d070c3149ace8b8f5d83b2006e8460b84c4bce664fc20e91c61ac8b415965b6155eddbe9238fe3d +S = 19d909e358e71985179dab9113941ecad21e4f3608cb3a32dd065868af1657df8e06aa86855ac7ad757a7f8fb568a953 +Invalid = Y + +Curve = P-384 +X = e805e0733fc156bd582faaf794e58d4630ce73fc383cdc964dd337728f774e4989a697d79665a3282ee6e0ee343d6c7b +Y = 43821b7b9a6ce1ddf0c59ada552668a0cfc85a87a610b5c36b7a691947116b49a4099340306e53494fc6b496cb8d12b0 +Digest = fd1bb27d666e3d40f5bd19d8c026a3614404b9edc11e582eb80b044c +R = 3d4fa4ec95b55feac607fddc618d6f4eed71da65dc49d732e64460e5c80c57dc4421c64bacf3ef1e22995fd19c2a3cf5 +S = b11898ba475f2b28402d038afc15f171b99aab93437b35a2f8a3b89f42fdb7f93a0469d9da7652882000dd5bb1e8b9a8 +Invalid = Y + +Curve = P-384 +X = e15c7ef9791b9392c3e97389f2597ee161545c267e584b94262870ef25fda348f72349f396c27ac884fa8d776387fdd8 +Y = 107b4a7da8be564a14f9c45e4df5cc9b62f0671b3f2c0573c33fa37f985fefd1ae3ff2640947ebb12dffda72757db6af +Digest = 3d9611421379fc93226fff23f5fe472a33f6bdc759d5705f7e9a2be3 +R = 9d715fd1a3668283fa83c407242e8d2a4f3fa1bf41919ca4101114bd0e0ac1b16c4379edb11de5210eee8618d42e9ed1 +S = 2dc37f453c8cfe01ea80c56d1865daf0f28847b12970132a1853c3ed80da6693e0da47a2476207947f29da34d68d604a +Invalid = Y + +Curve = P-384 +X = efcb97dd73106b0a2be4f665c496352f6938da9d0fa97690dc0e8d018b06dce2ba8d19b93ddfe889d549a33e64497c31 +Y = 66a0cb7e64f40470b6d09b9e12f217b59e9e6615af52fbdc4ddcb379e77809361eca2093a3e24c7103e971567018400f +Digest = 5598b06acf834ffbb2e50784fe2bc493fa51967f7ffadf1ece63f9b2 +R = 4ea5d4faf8ee52540db2f4c6283cea5302a3540a56e14c8a7533441c248465be99e10f23bba85be9634efaba7a8b172e +S = 4c98a2142ecaba7db44c78658efffc1175f810a147306ba2e6498553526adb1507d7a99a372e0f84c8dbd160ef7fd5bf + +Curve = P-384 +X = 4e916a3cf2561580b49ecc52321db7103292fd2fcce8dd4d6f86be6035808e0df51c3c4ac1894f0b08ef6ebf953e0d18 +Y = 4e6f28895d024b4c71220b27052ddd4bf6115a260825acade48c043b3e06d2b6b8e4ebdf465980f3b013cb575d475bbb +Digest = 1668ee6ae19c2d6f23b9184b6895ede8f55549b23095d53ef89487f6 +R = efce00544ebe0d98ba6015c07e3e9d09af808d49a0820c22ef572a3ef9c8a684b377bef1f8b3bbddb734b9b0bd0b1cd4 +S = e80d0e183b3f00098308e20e5b4ae393a07f1d1a8defda9a9d10f19b3e5236e42f593b1dc57f6718dd8d4583f0175ff7 +Invalid = Y + +Curve = P-384 +X = 3c6528c82d9d5e8dddf41a211c70f78604d81f49853bdc746270f1340a2a645dca3bc7844c3680268fa5973cd1758313 +Y = 4b9e697f1caf83d3224486bb0a8cd6a7c56e47c91043d8cba3aba51b6e504441d37abcc9b7b2d49b9126463703e514a0 +Digest = 1b39217bcc5dc841b32ddf00245623c581f19cac8a4ecd03eb2c07f0 +R = 848814c01c3d18534f39bcd53a8736db16f0f77a015a0e578cbb2f831739723e83b29cb6d4eee7822c76ff056d0f467d +S = 05beb19f766bd1d4ec5e65786042258298a2dc617e3f13d8e2f0f4b50d934565f3162c737fa791a81897397f29305943 +Invalid = Y + +Curve = P-384 +X = 80c3f6488dcd76f33cdb75e30f8452ab9a3bd6110f14e25179b0aefe4c19c60a07b4af10844b130b0b75a7024e341298 +Y = 6c85a17ad4bbefb33910250e05ac02a17c892c3380712d06dd070843dff0d040e219dae78679b774cd5eff0adb67189a +Digest = 23cd0066d1d88702c5d4461deff89aa5662b517806a04c4da30e0d82 +R = bc444deb0c7dd9f96f20a7ffd3ddb35a1189316655531860c39b5f87f09992106985e5562e083ee9f538c8e2d5363c52 +S = 91adde5d47eae80a98661f4347fd6e4778478c3d4aff3cff8aa92e2345a8e03cd4ab64adfd38e461bb98b496516439e7 +Invalid = Y + +Curve = P-384 +X = 97c3f446803a61a7014f61cb7f8b3f36486c7ea96d90ee1767f5c7e1d896dd5114255abb36c74be218c1f0a4e7ebba3d +Y = 553ed1fed72c62851e042f0171454f120029adba4ee26855ab881d9470355f1947aa1d2e806a7ff2583660fedbd037a0 +Digest = 647eb206a8477440b4bd048d00f37dca8635b15c2a8e79e2a9d74fb9a5553211 +R = 7b06d6c2b63f1cc3bfdaa897d07dc15a83bdf35d979f70c34578332b3f4920422bb24867c51bde10831324df424e04ec +S = 4bef715161f400dc98d4b63bd13ff4ad4a6c981ead44bfc662fe9bca4b56cd790698e4deddf9a4bd69327f26bfe801e6 +Invalid = Y + +Curve = P-384 +X = 08bd5c6cdc1f8c611df96485090e20e9188df6abb766bff3c1ba341ed209ad5dfd78b628ec60998ddfdd0dd029352fbd +Y = d9831d75dec760e9f405d1aa5e23aac506dc019fb64d44bd57f6c570d017e6609f8fdbb2dc7b28ca9e00e37cd32a3b73 +Digest = 9a4985f744dd6f2774cb6f20ad6b6969e212abf4ac035b72ad3f8b1955ae1862 +R = 8b372c86ed1eec2163d6f7152e53696b4a10958948d863eb622873b471702ac5b2e75ff852149a499e61510905f98e4c +S = b2ed728e8b30787a28f2a6d3740872e47348686c7cb426411379411310241d25f08a026b853789b1157f1fc1a7f6ff49 +Invalid = Y + +Curve = P-384 +X = 10a784abb3c549444a62c28df1c926b8aabb20c8d9aa4b1f7ca830258857cbe9718dbc9845fa9cbb78587a373baee80d +Y = a1ad0c10b5ab6780cad49c8cd3eebd27de8f1b382ddd7a604458cef8e76ca632a7e44e1c63141a742426cec598029e2e +Digest = f5b47101b4ff9baf64aca830b6afbc4f9620035d88a1d84a12cefa6f7f99faf2 +R = d9e52be2a3f7f566899cf6daaa38116d092473066f3a1bf91f3df44d81bca1deb438d9d25ce1632599c1d3576a30f128 +S = 0cad30bce4b3d7f40b3eef762a21bb1a3bad77439838b13024b7b2c70316875a99e80723a74a9e7a404715ca06a5d673 +Invalid = Y + +Curve = P-384 +X = 8760182393132d69011edfa127e36f92eeac8272641c27f52f3337ef8af7451e6d14f4e4590c7eb9fafb76e8c92865cf +Y = ebc2b123ed871ca570ead40ae8f6f32335393c569b21b38f626d09c064a3c8668e9fb10a4667e0f0c68bf25ca98fd6dc +Digest = 979131ca1d07e0b4ac6f27b20a978e0a230159eec4906db5dbd22b10ec71af87 +R = 1db957e5c2d294035d7f476a0cbc28a4aac2614d8212de5017076cd836bf04ffe237dce8fec91f2fb5ef82449ff1c65d +S = 3e3b9058d0a9c5b417f9c6f86557b9d50e7a902694a7012a1be6bb70708497e4d39fc1f6d6bc60dfa52d23cab173385f +Invalid = Y + +Curve = P-384 +X = 2b1f98d2acdda8347b9a68c75174408eae7de3d6b9c08c26e73ce9ed2ac147b8d90cd82e30ab43909d63f6b457de2071 +Y = 33f5e6f5f5793201991e014cce0045d04adc352298e32f45f4e374450111c8456b5c2efaec43d157949b5c191b2bc934 +Digest = a1daaf888d93a2a7e52bcd2a66cca3ff2e02916616d1919adefdd7257490e5b8 +R = 23d046402cbce807d232bcf0dc96d53c72992e0ba1ffce0d79050c0f4c5ad9bfbbdc1c96c730d67ff3aa3edaa3845da9 +S = 2cd46a4fe5d120b3af3a6d9ea63cc78f4079e8b5520a8fa96828334a4f182ff4d5e3d79470019e4eb8afc4f598b6becb +Invalid = Y + +Curve = P-384 +X = 86ac12dd0a7fe5b81fdae86b12435d316ef9392a3f50b307ab65d9c6079dd0d2d819dc09e22861459c2ed99fbab66fae +Y = ac8444077aaed6d6ccacbe67a4caacee0b5a094a3575ca12ea4b4774c030fe1c870c9249023f5dc4d9ad6e333668cc38 +Digest = e3bcded61cbb0bf6ec20d59f91e8e73e532f15b082b89c984c1b51fb0d1db8a9 +R = 798065f1d1cbd3a1897794f4a025ed47565df773843f4fa74c85fe4d30e3a394783ec5723b530fc5f57906f946ce15e8 +S = b57166044c57c7d9582066805b5885abc06e0bfc02433850c2b74973205ca357a2da94a65172086f5a1580baa697400b + +Curve = P-384 +X = 9e7553eab8cc7e2e7396128f42ab260c6dbb5457cbff2070ea7c0db21def1537939e3f02699e5dd460eca3798d08bd6d +Y = 892c0c8e47dddf858e89099a8fc1026e8b8333532b22f561f7647f63f9c79dbf5e8dd18fbfe6ff34902233119c5d5aa3 +Digest = 0f2a9b447ea5cfcfb9e67d661d7f0752befd3b4e3454fe40b9ae1eca47806025 +R = 2452da6a48c3749b66e576e0f1f768d51728be17aea149164c4e1654c5ce27f625a4610c4a2eeddb3a0626d3abc6c37c +S = 499504fb58c9db24a7ff5f7921e1312f8aa583c08a308e080f5ef1acf5cdae7927c4101573db069ab0b6de7f4f1cab38 +Invalid = Y + +Curve = P-384 +X = 0cf4dc51e71185a29c0c6fa3c075d9da5bd7ede085053344dce5dbbe8329e8ac9045f7246c9d0efed393b8e113c71429 +Y = fdb7917b73974b355cf9f3bef6a0a460c2d39fdf1fe32a7744be0a54ddd1cfa8d03914cff4b5ca536b40707ff2629aa4 +Digest = 331aefe2369b9c5ee6dd9f850259b3b8512f5934434e61573f97fe2c1cd2b147 +R = 3812c2dc2881d7ef7f621993b161672329b261ff100bbd19fb5826c9face09aec2017b6843d69336b813b673c5402527 +S = 5dc102fab9d6325131c556ec00309c2959d1031a63fbc1e2d5d04996d3234ed33875c0ab98e5878e9bc72742519ed398 +Invalid = Y + +Curve = P-384 +X = 6c590434988155236b43147389c6dbfdd27dcd3387e9b4c2587ece670753a542a13a736579887791cf53d31e5ce99994 +Y = 35a20194ff3f1b55f7ffb2758ddd4b98dd0d9e0cc213e10ed25e8e0430fe861066c1d4423c67f0c93f7ebd87fd3c561e +Digest = 153475076a003545d3ca3d4a772866f12cc85f6e69f8c486a91a80fd709206b1 +R = 89ff866889245e797926509e563b1746920b78c9370a6cdae52663730d131e558e327d1f5fef8faf9e6c802fa29504ed +S = 8dd68e2de2f788e598b3e5a60c18d81849a0cc14b3b0e3c931910639f3125e5d6045f00330b1fa989252a80f95419b04 +Invalid = Y + +Curve = P-384 +X = 499cbdf18ec4e69b88051543c7da80845fa2de8be2b9d9045fee7f104a8b5b7d04e69142de9955c5ab18c5a34ebff075 +Y = a29cb8d28836b201a389922b6f8f93870f09c80a00242d00d32656a43ac1440fc55bcb123551a73290f603c3469be9ed +Digest = 5f00b3b48c1ee8287abe6f3fbc3438b91f4268f318ae2aa1e7810369d6716020 +R = 25d4d243da6fd9b439a9242c3656fade7acb7a306e8cf23ea89e3ff4f9330be19c61aaa42d7b426d12c8e0f96b80dae5 +S = e7a99cf4b269bb4a6210d185e9654602523b5cfa1cddc94b1db92018aa557ecb6adda44c816975f5ec1756b6df3c44fd +Invalid = Y + +Curve = P-384 +X = 9a74ea00203c571bd91ae873ce0ed517f8f0a929c1854d68abd3b83a5051c0b686bb37d12958a54940cfa2de23902da7 +Y = 6f20ccf8fa360a9ec03d7bb79ff17ad885f714757ef62995f824908561dc0c3dffc49d873627936a2fff018b82879ced +Digest = 45c3a1b29a18780234f12f5e4b64e7af9de2acf0029ce55b706cc79a7e4df994 +R = acc1fcac98c593fb0a0765fce35a601c2e9570d63ea1e612fff8bc99ac2d4d877750bb44cfb1014e52e00b9235e350af +S = 7f53de3afa4146b1447e829ebac8f5645e948cc99e871c07280cc631613cfdaf52ccaeccbe93588a3fd12170a7ec79fa + +Curve = P-384 +X = e22f221809fb7a054ac799a70b3d24744eb7c5096c8671770399527c88ccf9ddaea0257a0ae9430d927ff5d9f109c533 +Y = af4101d60df9b306ae92da7592f4faf3df422a3e33f1c2ed2973b2b900eefc346b4cf024de650abf537cecd12ac77618 +Digest = ef1057d83a6e6481be7caf2c12c15f085ff971f02f0db8544352558e2b9fd61c +R = c39a8e79f0560b9f26504469a470c7b2230c0d25de07c206e87dfbde9aff0a5d85322f56dfb50d4c1fc67c67d615dad7 +S = 2ad94dd13a39cf4f4cb24c2c81d4c1181652363addd856dc9ba7455458e40ed047cd113129bc87f43949d5a98a0d5205 +Invalid = Y + +Curve = P-384 +X = fa8ebc3682d90ac7356f0b75b9e3376e76518676e0bedd176cfa7fa57fea4b3a399dbb2bf735ec90b9c1705cf9fa6f57 +Y = 18c3fbca0150ec10696b3851f31fb3ba62c0b6be509d249e0d4b374c7a08e49338e0922e2a8a9319999e6569ab8d292e +Digest = 0c7152ec620fe9b783625196b41192dd5d49df184ad26965c970ac5e28bb1c4b +R = fb58ab09b8a7ef7a6ec05b854eae11af9b713f7c7540e25115f609846e636ad4f88dcf4dd61e311273df23ccda474f03 +S = 485be4c21b7c3a9c6b39ffc9f0c39f4050f76d2a6b3fae203d016318c541c1b4ad6cfc0d0950636ff6883895dd49e4e9 + +Curve = P-384 +X = e5f331536a2940cd67234bedf813c12e15aefa9a1a68429f8754bf2769a47c9c2efb5c42135e7b01a110d7302e097eac +Y = 63b2398612c863febd482184e834d3acb51408c49aacbbd35d8719746f37cb13e013c9505ce034cd815aacd10d2f7a0d +Digest = d925955406f6b6dd4df05270a2539a5924830dfbcbf6a5a34f21354db246244b +R = 96c35f22d036785a392dc6abf9b3cfb0ad37b5c59caefcc0b5212e94e86739a2674020ff79258094d90d7d59f09d47a1 +S = 373cbc865384734c56952f7a35a1fdecd88e8b343ee3aa073d30f5f25b73506f1e5f5857f668b0080dec6edeb5e1be96 +Invalid = Y + +Curve = P-384 +X = c53ad865beb1e2b92764065f1a6bb465ee94aacabe43426a93c277d02e00fe36be1c859ba08a031fc518a0d007668979 +Y = 6728d42bae9bc097151748ffa0982964bdd16076fa0e7cc15837c1f773b08d02c3dbc57339091ccc34105b84781150b4 +Digest = 6d5fa5b492406a1e93df6bb6364d7b17a24ef43807a1159acc77486dd7b49b60 +R = d4f0dd94fc3b657dbd234767949207624082ff946de9ce0aeb0d9993b8c7d7935760e1bf9d8b233bc7d6cd34928f5218 +S = 0941df05062aa8849610f4b37d184db77ed1bc19ad2bb42f9a12c123017592bf4086bf424b3caad9a404b260a0f69efb +Invalid = Y + +Curve = P-384 +X = 1f94eb6f439a3806f8054dd79124847d138d14d4f52bac93b042f2ee3cdb7dc9e09925c2a5fee70d4ce08c61e3b19160 +Y = 1c4fd111f6e33303069421deb31e873126be35eeb436fe2034856a3ed1e897f26c846ee3233cd16240989a7990c19d8c +Digest = 8cf5e81c6858b8395421d8c913f1ac887e282b5818eab525fb79feb9bc64bca7eb98f94b9e48b705e6c28311bb0ca672 +R = 3c15c3cedf2a6fbff2f906e661f5932f2542f0ce68e2a8182e5ed3858f33bd3c5666f17ac39e52cb004b80a0d4ba73cd +S = 9de879083cbb0a97973c94f1963d84f581e4c6541b7d000f9850deb25154b23a37dd72267bdd72665cc7027f88164fab +Invalid = Y + +Curve = P-384 +X = cb908b1fd516a57b8ee1e14383579b33cb154fece20c5035e2b3765195d1951d75bd78fb23e00fef37d7d064fd9af144 +Y = cd99c46b5857401ddcff2cf7cf822121faf1cbad9a011bed8c551f6f59b2c360f79bfbe32adbcaa09583bdfdf7c374bb +Digest = 965b83f5d34f7443eb88e78fcc23479156c9cb0080dd68334dac0ad33ba8c774100e440063db28b40b51ac37705d4d70 +R = 33f64fb65cd6a8918523f23aea0bbcf56bba1daca7aff817c8791dc92428d605ac629de2e847d43cee55ba9e4a0e83ba +S = 4428bb478a43ac73ecd6de51ddf7c28ff3c2441625a081714337dd44fea8011bae71959a10947b6ea33f77e128d3c6ae + +Curve = P-384 +X = 9b3c48d924194146eca4172b6d7d618423682686f43e1dbc54ed909053d075ca53b68ae12f0f16a1633d5d9cb17011ec +Y = 695039f837b68e59330ee95d11d5315a8fb5602a7b60c15142dbba6e93b5e4aba8ae4469eac39fa6436323eccc60dcb6 +Digest = c68382d0641ffad850c41365a8ec68e3d55acba376d1bb941e7dcdf7b71f37b8288b023b942373a40be1dfaaf4aea633 +R = 202da4e4e9632bcb6bf0f6dafb7e348528d0b469d77e46b9f939e2fa946a608dd1f166bcbcde96cfad551701da69f6c2 +S = db595b49983882c48df8a396884cd98893a469c4d590e56c6a59b6150d9a0acdf142cf92151052644702ed857a5b7981 +Invalid = Y + +Curve = P-384 +X = 5140108b93b52d9ad572d6129ed6564766f8df3755e49fa53eba41a5a0d6c1d24a483c90070583a66e3cfa52b6fb1f31 +Y = ff52498446a40c61e60c97554256472625633eda0c1a8b4061481fecfbe9c4503e99dfc69e86c9e85c8cc53dca6b8dc4 +Digest = 4b945020c329a61221060e924ec682eceb842c09537fe26265ad084753b89f7650cee4e8df30b38126984d80fd25d246 +R = b2726b2ba9da02de35e9953fc283d1e78700860d4c33dce8db04dd41499d904866c1b8debb377f6c0dfcb0704252174f +S = 0775b027068d7ad55121a278a819f52099ace750d5e996eaec9dee7be72758736cf769650148fbd5c411beb9b88f979e +Invalid = Y + +Curve = P-384 +X = 31f4fc2fac3a163a5796f5e414af6f8107ab5e4a98c755d81efa9d5a83c10128c16c863190112fc29d3d5f3057a2edf1 +Y = fe208743f3e96c3a34b5fff78c9716c074a1ce3dc01c3f0e471ddfae91cd88e7dda38dd0e5e1f91b00b8539da3cc10bc +Digest = 2d6affdf541609f649dbe9fd5829059bf42021fcfefee42d8c9cd5c127015c06b4c3c13ef56d08767788955887752e44 +R = 706911812ec9e7370234efd57b2855975eab81e9c2fe783aa8e442dc6e7d681dab2dc0dfc6765f87ab67001108e3facf +S = 42c89efa22d853d32f619c9fe13e9852889ac98a9fed5d4fa47fed238e1cbe70d7970af9f7bdf84e51176af4885f2490 +Invalid = Y + +Curve = P-384 +X = 1f7911dcfe63a6f270cf75b8584d9b1b4a00afc1fa43543c945945b8a821ebeb37fbc705a000f9cc7c35f7d27027b7bb +Y = f11835ec80c4ac06d99247e73bf72522109ac255e6109262de4dfbf9619244f74fb6c9ee57694537d7e79c248db34dc4 +Digest = f4b0a912331e7fc59a7071e5f47c9dafa6dc09b32c5c3d05301b3833bbe0b9168e2b63f12248849572a322b2f5423b8d +R = 3587c9c6885adf3be1086825f9a41ccd2edfa0bd95e7fc4dba5a9710f41d539132de7772f14c18e318f8992b66d2a86c +S = 73a844d729599d4e3e3c1b63e9c4bf5a73d1f69e0160857fe63a56c381c051f5c37ea6b4cc4caacb6ff26ef9699efe30 +Invalid = Y + +Curve = P-384 +X = 2039661db813d494a9ecb2c4e0cdd7b54068aae8a5d0597009f67f4f36f32c8ee939abe03716e94970bba69f595fead6 +Y = e2d5236e7e357744514e66a3fb111073336de929598eb79fb4368c5bf80814e7584a3b94118faac9321df37452a846fc +Digest = cae50a424395e38bde9ba31fa5ea0c107ccceaff06663719162aac2c3e15f2b2cfd376f90d371326e1d29e0392a756ee +R = 164b8ac2b34c4c499b9d6727e130b5ef37c296bd22c306d1396c6aa54ca661f729aa6353b55d7cf1793b80b5a485115f +S = 4e7187f8f735b7272f2c0985315b5602bb9b1a09f32233aa10570c82d1ccedef6e725800336511e47f88ddbbbdc08f54 +Invalid = Y + +Curve = P-384 +X = 46dcf8ee848c6459fa66d1cae91ccd471401a5782cb2d3b9b9264189f0e9ddf7197b05c694931bde3306240cf9d24b7e +Y = 79d9508f82c5ead05c3f9392f3b1458f6d6c02f44420b9021d656e59402e2645bf3ba1a6b244ddb12edbb69516d5873b +Digest = 039fe89dfc54e7f2162545af700a8c49a1216b08854643656b07d74e7032516fd0c9368c5e5ce54655e4d08baa29b6f0 +R = 5ffba3b5bd7c3a89ec40b47884b0b3464e8abb78608c6d61e1e62c2ca98d44fcdf61825d69dffee8408d0849d0623bac +S = 0d2597b5fc3842ffce1957172253a8c9c0e4dbe770ce54f70f139e0545dc34ec639d609e14175bdb2b812ccfda00c9d4 +Invalid = Y + +Curve = P-384 +X = 097cea75f685cf4d54324ad2124ce3f77b1e490bbaa1ffacde40dd988f7591e1c5d158e6f232500d958762831914af7f +Y = 716d8bc056daf69ca2edd21b89a6ae9923cfcae87bfda5f9a6e514dd4b9d28d164fcc613ca2afb9660adfece59f09b66 +Digest = 02afb35f1df33b3d83df3391ca4184121ca52f520dd12ffc891aee77eab6503f232a5b1231bd997239751f46c4133edb +R = 1c5d4561d2a3af8835839b543098c101c715c545eb7d00300c5cb05bb08dac29e732ffdc31c50915e691999ad505104c +S = c3442f2fb1498fd47c2f959edff37a19783e3ccee80dc6955ca64db087fd188e67358e7b9223535bbb858d21ba6a978c +Invalid = Y + +Curve = P-384 +X = d2e2b3d262bb1105d914c32c007ea23d15a98197f0ed90b46a17f3d403e406a76c8f752be1a8cd01a94fd45157f6511a +Y = e585fba180017b9983b4c853ad3a5dd52e079c5f0ef792d1a0213b6085e390b073de1a4b01749ceab27806e5604980fe +Digest = e66b11b84f87c38526438e5e3c5b4521248c358eaab80e40526906a05fb29d14d4e5686681f03bc3f0025d45dfb83b5f +R = 49c001c47bbcee10c81c0cdfdb84c86e5b388510801e9c9dc7f81bf667e43f74b6a6769c4ac0a38863dc4f21c558f286 +S = 1fb4ff67340cc44f212404ba60f39a2cb8dcd3f354c81b7219289d32e849d4915e9d2f91969ba71e3dd4414f1e8f18f7 +Invalid = Y + +Curve = P-384 +X = cd887c65c01a1f0880bf58611bf360a8435573bc6704bfb249f1192793f6d3283637cd50f3911e5134b0d6130a1db60e +Y = f2b3cbf4fe475fd15a7897561e5c898f10caa6d9d73fef10d4345917b527ce30caeaef138e21ac6d0a49ef2fef14bee6 +Digest = f6325d6bcaaaf1aba1197a290b33974f2fe8af200d5d726e78705904e9894ec31988e35dc76b9976834b7cd1c4c67146 +R = addfa475b998f391144156c418561d323bdfd0c4f416a2f71a946712c349bb79ba1334c3de5b86c2567b8657fe4ca1f1 +S = 1c314b1339f73545ff457323470695e0474c4b6860b35d703784fbf66e9c665de6ca3acb60283df61413e0740906f19e +Invalid = Y + +Curve = P-384 +X = a370cdbef95d1df5bf68ec487122514a107db87df3f8852068fd4694abcadb9b14302c72491a76a64442fc07bd99f02c +Y = d397c25dc1a5781573d039f2520cf329bf65120fdbe964b6b80101160e533d5570e62125b9f3276c49244b8d0f3e44ec +Digest = 709d1bf45b5817f5a67b859651eb47133ebed2622fda09ab66d3467b5e95da50ecc2c74d8f4d289feebec29729a4bfa3 +R = c6c7bb516cc3f37a304328d136b2f44bb89d3dac78f1f5bcd36b412a8b4d879f6cdb75175292c696b58bfa9c91fe6391 +S = 6b711425e1b14f7224cd4b96717a84d65a60ec9951a30152ea1dd3b6ea66a0088d1fd3e9a1ef069804b7d969148c37a0 + +Curve = P-384 +X = d1cf635ca04f09b58879d29012f2025479a002bda590020e6a238bccc764478131cac7e6980c67027d92ece947fea5a6 +Y = 21f7675c2be60c0a5b7d6df2bcc89b56212a2849ec0210c59316200c59864fd86b9a19e1641d206fd8b29af7768b61d3 +Digest = 5d54d236db6ab4691b3d50dc81471c5d388e5735ebdd435e9742a5a8a0ad0e841bab57326c8535a680ada57d2b3a70fa +R = 6101d26e76690634b7294b6b162dcc1a5e6233813ba09edf8567fb57a8f707e024abe0eb3ce948675cd518bb3bfd4383 +S = 4e2a30f71c8f18b74184837f981a90485cd5943c7a184aba9ac787d179f170114a96ddbb8720860a213cc289ae340f1f +Invalid = Y + +Curve = P-384 +X = d15ca4b2d944d5539658a19be8ef85874f0c363b870f1cd1f2dc9cb68b2a43a10d37064697c84543e60982ab62bb32c8 +Y = 062fb7dfc379fc6465302ac5d8d11d3b957b594c9ef445cfe856765dd59e6f10f11809e115ac64969baa23543f2e5661 +Digest = 67cf9e6f9e9558a379ef7361771323a4f3925f2c7a5d94d9156bf2d9d45f9f8fc4d47322da622fbce92fc764a2ccc327 +R = e2cf123ce15ca4edad5f087778d483d9536e4a37d2d55599541c06f878e60354aa31df250b2fc4ed252b80219552c958 +S = 696707a7e3f9a4b918e7c994e7332103d8e816bbe6d0d1cf72877318e087ed0e230b0d1269902f369acb432b9e97a389 + +Curve = P-384 +X = c83d30de9c4e18167cb41c990781b34b9fceb52793b4627e696796c5803515dbc4d142977d914bc04c153261cc5b537f +Y = 42318e5c15d65c3f545189781619267d899250d80acc611fe7ed0943a0f5bfc9d4328ff7ccf675ae0aac069ccb4b4d6e +Digest = e8d6b550271b486e79f6975cff753d49519ed9393b207af7039b4c070cbc2fe7d49dd1bb87f7021e442fadd80ce8a5b0 +R = b567c37f7c84107ef72639e52065486c2e5bf4125b861d37ea3b44fc0b75bcd96dcea3e4dbb9e8f4f45923240b2b9e44 +S = d06266e0f27cfe4be1c6210734a8fa689a6cd1d63240cb19127961365e35890a5f1b464dcb4305f3e8295c6f842ef344 +Invalid = Y + +Curve = P-384 +X = d4e93c4bafb54c06814011309e9f3d8e68b76a5452e364ef05ccc3b44b271e576c9028106b1584f09271c886d467f41d +Y = db730ccfdeb6644362f4fb510d5254bfe6f23e891e936132f90f1913e93baa8b1f8c0613a0f0c61a760ce659f22babc6 +Digest = d5c82ff11f555ce21c3f20a9ecfa6047cb6895e32fa0fb379f49085a59f61b7c8fa05058ef144cf47db5738fa40f4890cb59695998a2358162bbbf6d7f53517b +R = 8d0fd14a59c24b0c2a34b438e162f1f536fe09a698cacfe0760d026d1593265d02f2668d2a5e49ac0b21e93807aa9c18 +S = 3162ffd2adc9dd5ec1bb1d97d2b0c27b8ae234235ffb374878d0b76382002ea505e885c178d56a2d7809bd1d83117ef1 +Invalid = Y + +Curve = P-384 +X = c665feccf51e6bca31593087df60f65b9fe14a12022814615deb892eedb99d86069a82aa91319310b66588185282dad6 +Y = 1e6e25bb8ae7714415b94f89def0f75dcb81d4af6b78d61f277b74b990c11aff51bd12fc88d691c99f2afde7fbd13e51 +Digest = ea056beb112fa9aad69c8dfe51ea947b772bf1c11287edcede43a98089d21492ed581edcb6d1823e2873aabba213b84291db3bffa6eac3ae43a92fc2da276a24 +R = 0e18c4063137468fe864fdc405ad4e120176eb91b4538b28ce43a22ae1a310cc22a2f7a2b3a0f3d15e0f82038b4a4301 +S = 5a1620e42041ce4357daf824befbb2ed65596bcd8214e88726149b26b1f416b9472a8877413f1c3705fc2edf4731943b + +Curve = P-384 +X = a6bbf85e8068151482ce855ccf0ed22988fcf4b162c4b811cb7243b849299e3390a083147fbd68683203ba33588b13ae +Y = 5c837ec9f2eda225c83ab2d5f10b1aa5bfb56387deebf27ecda779f6254a17968260247c75dd813ea0e1926887d46f86 +Digest = 81b1303e10f25d37877b09f9d82dbd894e40264992d86cc74656ebeef505b46fdf9dec312a7f0a26e3f56a7195d5b01d198c378fff9d049e00cbad9586da20c9 +R = 9c11879e59659848274fc1ef5a6a181af813d23708b09a24dc06c089b93b918828dd938a75a34d5a681b0af362dc19a0 +S = 9c362231962ba7579c4a874e87bdc60dc15cb2e0677149c8ea31162963e05a6614616f67a5269616071cf095be7ff44b +Invalid = Y + +Curve = P-384 +X = 9c1eb5cdb1a873e4c275b7ded8712b9058ee0d9ded06c96a2a8d7c652b82e894e2f918dd8e18138e5c34821744b97952 +Y = dd474c93619f02b5d4fe30ea7805c1a13fb80008a81bb5f3eeb95cd11f38841b8e34d64f2c6cc2d6cc2587365eed6b6e +Digest = c0f9ae90fe8aaf54962e7d47a832e4ca6e60355e4066cd2b08bff78650d4e4a5d1eb1de296f9f0ef92887e09f82e0db4411aa9c3c6b109159bd39feed40419a3 +R = f17b2f2fa3b5c8e9c62a633e5d417139ddf3dafba75b464fa156c99b3948a0aca532c7fd3e14a266eb17e7fa80881da2 +S = 01c246866983fa74d6dff38b1ea091f8afd218b5a42467761b147c19a3bb20cd24be8ed1f95f1e61863a709d2d0148e2 +Invalid = Y + +Curve = P-384 +X = 20622a293edc96d83fee77cf1ee8077c61d6f8ed0073d53cfb5ee9c68e764c553fa4fc35fe42dade3a7307179d6fc9c2 +Y = 710fa24383f78cc4568fe0f4ecbbe6b11f0dce5434f4483712a6d2befae975a2efb554907aa46356f29bf7c6c2707c65 +Digest = 5cb8ed471a4001e280a0927faf25183c857b9b2de21c8566e8a1bf04ee085c36db7fab9d8f627898b3bb23c10225305938b56a732659f2cab3fa857d80dfde19 +R = 45a6cf5cef06256139caa709292d1e0f963d176add188572e9c7be29af21a95853a98e23aef0a0850e58d44d60b6d780 +S = df8d71cd5ab22fc718070078103483e5258734872ab935435f21ea199018e49a69c064a63801beb0759fde6e2c4a85b8 +Invalid = Y + +Curve = P-384 +X = 83a4fecc0bf0a353b0acf6f54094b822f2b12564e172b296f3461cafa7315d7d31d0089b1b4c18ad3c86bd18f539774a +Y = e4fd57c5b2937e6fba1e7d72fc3f02352bd79c13611931935f4dfd073b9379f862f2277585137e996e212b5b6533dcba +Digest = cd7c623c3c3b52f46be0ebb2b353ff97db3cd7dfc1a059a57668fc50101aeeb37b8aee9ddda8ab611546999a120cc9acb0e2c3df48dee66d5c31a46a7be94bc7 +R = fb02804010a570d702ebfbcf3d6cc9d55ddac2bd4b4de56d325e9790571b1737f91d3fa1d4caeec6eea806195aed3187 +S = 1fd20fe383e907e77639c05594642798619b2742090919bedeefb672c5700881baf0df19b9529d64bc7bb02683226103 + +Curve = P-384 +X = 208a8c5a6b59458160c5b680116c8b23799c54a7ee8954a4869425a717739facfe4fe24540505cdc133fde8c74bfca78 +Y = 22aa7aba797bde1e8389c3c3f8d8d9aa2a914f4d2d7aaf7187ebed9b2761975718ef97660ba0b8a71dee17f2b982e2cf +Digest = 007b907b90fa60835d45d2f0201a4486d9782fea4f0a235d97d4968336c5369c6c2e82bded56288a10fd6741f4c15d1633bc92e0196308d9f0490fc2077d3b6c +R = 0b4e835ed83151d2bde96e201c54544ba5f301aca853957d3c538c9858fcce796b60fc50f5600a48dcdf13e5bc029827 +S = 0270adf02d31d5428d523e13d7d315c1929a1d89bbd0f61eec0b1186abe1c307cbba6b1067a68bc3947e6196d49719a0 +Invalid = Y + +Curve = P-384 +X = 80ae47e99107d6148b1088c6694df5c1273ff336b66e45b68a7c65fed735129dadcaf2b900e9f8ec50eff70a5ba89ea3 +Y = 47450efb5669bfacd7cbff1f801aafa0812ff88a6ae7b5a1f85e88e19129ed995f509fbf8dec15ce42bbbbd33814c09e +Digest = 1cacc8f609080e7b8339529f944850a700977ef9107f40956fb35645e15fdd54ef01755f07a2582d0bf2ca0cb84ee8ab154fe0914dfc9ad7ad5fe54b857d0f4e +R = bae6fba7b1485ecdca48219ead3c39295fa9c196b1f0941445b1ac768e33962f68d37f1f1749eaad7200064aa202fb41 +S = b411a38d02deb42d1015a7837b033c89d2f37d92c70fa8bb1f592223f7750520b950f30277abfb4155a3ab194b3beca0 +Invalid = Y + +Curve = P-384 +X = 45cb6dcca8d2e80ac04536a22f9d68ea2313245550108ddcd32799d154c0a55492e49463e826275bd9bf0d5e380205c1 +Y = 6fd124f5a6c745751ccfb3ba4dd9144ea8fd41a4d9a4b34820434da66aa7385e73ffe71e6c11ed1beb6c7af22ce00edf +Digest = dd7947a5b9a1c988dd7dff537e15335aacafd3e602adc8373765013f338334dd58aed4fb7144de0007c3410d79f5e78bcd4cf0dd63cc33ed3dd564882e299c7b +R = 2c782c4263eeee63657fbf20fa287a1a81fcd14b1d3bae333928ba4fc31abb20edebc130714380608e38ea74309eca9d +S = 716113d95bc9dba532bfb470112b0d43d9cd6560ad15e0de2e514994801ff339bcf19ad4ee2b8af573f57c038fbd70f0 + +Curve = P-384 +X = 36c1459d9e9f7b6c1598778c784cbf94661a2b11370c02ee092f6ea0ca20acf81f1ed5048a28a1466a91689df26bc291 +Y = d1367418c7b216bd32c6dafc8b2be99d02cab68df990758b2ddd543b7eb6ff6e285b649ffe588b1811b549cfb5f0289b +Digest = 242ff2713c03e3d5277652f8e7fb1e5a1f0422b6652e1bdd696e46c03cdd3aaac329b1d88e7aa345ff7224ce6dc6df05c7e9d7dc2665282c817d15a15b8288fd +R = 40c338adeb504193444bdb95336177362031aaadc5b7e151e42030df9dd8687f3cb8fe2292fd4f9206989c089d966dae +S = be4b2ba251094c24de006c89af2b5c77e6937f36d7bb703b4f8edcfe65d45f4b2fd2486222163ae0ed9e215c0a96f488 +Invalid = Y + +Curve = P-384 +X = b5eb6670bb0b0d3aef10e533d3660756b7372a2a081d9d920130034f48202cd43b9e2d1e5893d0cfb322db65ab839716 +Y = e28444770396041b489b302786a57fca9a98f19685cb4b455d219151e64645ad30dd3149ec96f3bc90879834b65e58aa +Digest = 8d2e653807e87962883956ee3705b2167c50370c3af12eb8f6c26f0f15ede56dddc7d0c9642a1c1c2444b06571fa1a4d47e7884acc7ea3884daaa50940f782e2 +R = 0887a13df940907864b425ec0d8f91ac719abcc62b276fa08c5122b38831c8930abd3c8454e98182bb588fc72843717a +S = a380284eacaa36a34e35f04fbf6e28ffb59176f41ea52d9c9bc1362eccd8e0d699c2e08111d93e9dc2785637b1f4f09e +Invalid = Y + +Curve = P-384 +X = 700e8f65e052e918a63a96fa57f4eda849f9f9faca3302d6ead66ebf85838f8145a6d6718a681b7bef73170d7254958f +Y = 9e9e10357658913007803859165926cd1e5e92c3a644d834098cb1cbfab466349bf4238a5154cf50ed77c77a78263e81 +Digest = cf885fa7a96db595f825a0ccc56b70b60e0e1c30d0a15af636d1f4957328aecb7eeb734d5874bd72ddaf15c357ca36bd42abf387f7b771ea6160e2e23a08652e +R = 59be870e0fd684b000cce95c616d9f34674354e9d20db15d204b8a6285ff55258e4eeb49da1573ef1030cd6b2626dcfb +S = c0bbbf71d87479d82575458be9f4d686921db7ea458d620271f51ec3f4d1afe3bf25ef9c0c400eb7b92cd7058fb17346 +Invalid = Y + +Curve = P-384 +X = a9de6f029445fffcf16349b44095cc83b11e3d0d9f08654b158014803b1cc31b8dfe00b1a8167c6f704d69cdd62c6512 +Y = 27336a503a669ba1d1f3619f51dc8aa2a44b2075c682a36f071be486e7dafba9adfac2ce74be0442b7251e99304ffc05 +Digest = b7e73f38767f253790e7fff019b4e0e61562aeb97b2b749afec2a61c87ab0e15916d4286c0a13989912f6bafdf3efc6f64ddc3b944f9041266e5abd4480c1606 +R = f93a4d2eb94d087f28572847e0099ae2ee944efacdad392ec268c9c1e632e6ccd670c36584e58aba52a4c2b07127d55a +S = 941ee89cea6e7ed20213a95482fae134707ddf4d292ab1952ed5464f1f1138669dedbfc9998b696eaf469be5fb240c80 +Invalid = Y + +Curve = P-384 +X = e63500d6d13069c01fafc4518f1d429661c5bb6ad1ff0383037ca6a469a5c20c453dce03bf6e4164f7e26f849016b3d0 +Y = 83b7b731c2531c3ac61b194cf3db6dc02ccdfa16d9eb49f97bc4ec3fe6c8bd865ea27f1538531ad07dc44fc5107af8e6 +Digest = afc0ed355377d0ab0c4f79d420dcf67ad4920c013d5c8afde2287525da4596672927540418a61568b21ae7799d7659f16b85f611bd6e8d2066a55903da0c48b9 +R = eb78733e73fd64a6a1f23eba5311af23d26816fb8847671e01fdbd8dc7d5fce1a0823b080ee99e8d75edb3f100e16077 +S = bcaedfe599f98b51542c0f94ae1010611c6767ac3abb2bd887399d62fd0f1b3a0e97deb24c95a76de44521bf24c8645e +Invalid = Y + +Curve = P-384 +X = 3ebd869be687f82d844416e6816d698d82e1e22a1f451d50b6c146134deb07f05204c0b04e7dc07ebdcfd916531dc7c3 +Y = 6e4d7bde063edb7254a82b9d9249d2a2b9ad8988c37a84ac9f7c09daed42b1fd28f7cca1ea8b4f91a66e878224800bdc +Digest = 56a61339a35750e95770f28846930e3f594e8d759e07423718734a82b2a80430b0fb3378e40bdcf5c12be135be9a9bec32916b4988a763091a6da7b44631414e +R = 575f87a8a7980555a198cfdec279cbb2f89551b5271d242397c29f6bc4bf413dc30312a7e626ef7fc77a9124a79bf9be +S = f0b7d759246ad36ba8240c537b1eeb5d148c38d324f48028c598eaef6e49d79ff3f6cfe3a32fbbf6f3ed3aaaec31d572 +Invalid = Y + +# The following tests use digests equal to the order and 2^n - 1, where n is +# the number of bits in the order. This is to test the truncated digest not +# being fully reduced. + +Curve = P-256 +X = e57231383637c82c1ac801724cf7e03e67198f467a9beb60ac13cb582d13afa8 +Y = 8f190e090155fcf63810b858bc88e259dc49afef8bdef6fd06d93dddb1991aed +Digest = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 +R = 05cc6037bb021f4910ea2e489fab2bae6bb6a2769a97f42ba5736994102b7f10 +S = 5db54832ceabf8bccdb8be99b1a49cecff8feee045cb697dec43118e2695b1da + +Curve = P-256 +X = 6e0e2897b9a554ee287cdaf43bfbe25ca8404373971575a0e4b61c61aff5a2fe +Y = 23ea7823a411eb1b39f81bbde24c2cd6ac68be2c7eec3a0671c8676131b8905c +Digest = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +R = 16831feeceab2fab1c575e073e944d73ce7e6f3e9b06312088f06159c530ff50 +S = 870cb824692638538b1569c6093fcb693c054e8e3b9a919e3bb26798910f66e9 + +Curve = P-384 +X = f4a961c19f9cc4ebe4f43081110955f3cede085a08c1415d726e80b2eb774028c5fc96f092ba3ea7d1288dd57fe1db08 +Y = 981398eed0895e09b3b582a0616f3024e51cca7b1ecc347dbf0d24a5f6a222b0c31912f8f5e427d4dde5c6c45212bb10 +Digest = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +R = 0b77eaff05bbd922dd80525d2ab301cc119318f5a920a12c71c4b5ff5bb77d25a538983df9bdd5984b0d159daf21f1a2 +S = 73af85ad03a34b6b3993082bf719018d25d1555717b2d2f2535d0601af06a71ad020eff8232d065ab9d7fc4cd0c0ee42 + +Curve = P-384 +X = 54dd8d7cbf2ccdf1a42f5bbc615a372803b094f6040e3c7b651a61bc6912432c836cf2410ab7d67f543236751d81066f +Y = 2219d6257b1c80bf327c96786f2b5d0b5a9b9bf7eee9c853bf66a3bf09520494cb1f7823e4c566d79a617b7e201ead96 +Digest = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +R = 9d923e199d98272e44b8fba382bf3c19660ecb4a9aae3513ff6802a73fef510c15c202807c3f9334b0bce7d6c6a80839 +S = 520784e6290d04d9b61993ee5ebc6fa8ff527fb0777c43cdefc7586701e60edb399005a5648ff852de80208232849fbd + +# The following tests are intended to stress the final comparison in ECDSA. +# ECDSA verification computes some curve point (x, y), picking the fully-reduced +# representive of x mod p, and checking that x mod n is r. (n is the order of +# the group and p defines the underlying prime field.) +# +# This makes the computation sensitive to values near n and p, and which of n or +# p is larger. Additionally, there is an optimization that performs the +# comparison mod p rather than n and compensates for the difference. +# +# These tests were generated by picking a target value of r and x, adjusting +# both until x corresponded to a point on the curve, and then computing the +# public key by solving for P in ECDSA's (x, y) = u1*G + u2*P. The digest is the +# hash of "hello, world" with the suitably-sized SHA-2 hash, so the test vectors +# are suitable for both message- and digest-based APIs. +# +# "x" in the comments refer to the x-coordinate of the computed point, not that +# of the public key. + +# r = 5, x = 5 is valid. +Curve = P-256 +X = 264d796a0dab9b376d34eea6fe297dde1c7b73e53944bc96c8f1e8a6850bb6c9 +Y = cf5308020eed460c649ddae61d4ef8bb79958113f106befaf4f18876d12a5e64 +Digest = 09ca7e4eaa6e8ae9c7d261167129184883644d07dfba7cbfbc4c8a2e08360d5b +R = 0000000000000000000000000000000000000000000000000000000000000005 +S = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e + +# r = 5 + n, x = 5 is invalid. r must already be reduced. +Curve = P-256 +X = 264d796a0dab9b376d34eea6fe297dde1c7b73e53944bc96c8f1e8a6850bb6c9 +Y = cf5308020eed460c649ddae61d4ef8bb79958113f106befaf4f18876d12a5e64 +Digest = 09ca7e4eaa6e8ae9c7d261167129184883644d07dfba7cbfbc4c8a2e08360d5b +R = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632556 +S = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e +Invalid = Y + +# r = n-2, x = n-2 is the largest x without a reduction. +Curve = P-256 +X = 50a50c01132bf79e42b31fb278f7317b29515e9e1c973a41266b69048826fb8e +Y = aac53e7df37b5eb25ce4ddb705fc7135c6b1e00a7f56e30744f62f258afa5537 +Digest = 09ca7e4eaa6e8ae9c7d261167129184883644d07dfba7cbfbc4c8a2e08360d5b +R = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f +S = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e + +# r = n-3, x = n-2 is incorrect. +Curve = P-256 +X = 50a50c01132bf79e42b31fb278f7317b29515e9e1c973a41266b69048826fb8e +Y = aac53e7df37b5eb25ce4ddb705fc7135c6b1e00a7f56e30744f62f258afa5537 +Digest = 09ca7e4eaa6e8ae9c7d261167129184883644d07dfba7cbfbc4c8a2e08360d5b +R = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e +S = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e +Invalid = Y + +# r = 3, x = n+3 is the smallest x with a reduction. +Curve = P-256 +X = ce24c99032d52ac6ead23c0ae3ec68ef41e51a281fd457808c83136d7dcce90e +Y = 8f7a154b551e9f39c59279357aa491b2a62bdebc2bb78613883fc72936c057e0 +Digest = 09ca7e4eaa6e8ae9c7d261167129184883644d07dfba7cbfbc4c8a2e08360d5b +R = 0000000000000000000000000000000000000000000000000000000000000003 +S = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e + +# r = 4, x = n+3 is incorrect. +Curve = P-256 +X = ce24c99032d52ac6ead23c0ae3ec68ef41e51a281fd457808c83136d7dcce90e +Y = 8f7a154b551e9f39c59279357aa491b2a62bdebc2bb78613883fc72936c057e0 +Digest = 09ca7e4eaa6e8ae9c7d261167129184883644d07dfba7cbfbc4c8a2e08360d5b +R = 0000000000000000000000000000000000000000000000000000000000000004 +S = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e +Invalid = Y + +# r = p-3-n, x = p-3 is the largest valid x. +Curve = P-256 +X = 768a0d300a595005a520130e50927d403395c8e1e40be997b48fc048410f7cdb +Y = 16f217d8e1c02bd887e5de388a17783b182e61b5d534152dc2c4be8d75fdd706 +Digest = 09ca7e4eaa6e8ae9c7d261167129184883644d07dfba7cbfbc4c8a2e08360d5b +R = 000000000000000000000000000000004319055358e8617b0c46353d039cdaab +S = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e + +# r = p-n+5, x = 5 is incorrect. r is too large to compare r+n with x. +Curve = P-256 +X = 0ec505bc19b14a43e05678cccf07a443d3e871a2e19b68a4da91859a0650f324 +Y = 77300e4f64e9982d94dff5d294428bb37cc9be66117cae9c389d2d495f68b987 +Digest = 09ca7e4eaa6e8ae9c7d261167129184883644d07dfba7cbfbc4c8a2e08360d5b +R = 000000000000000000000000000000004319055358e8617b0c46353d039cdab3 +S = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e +Invalid = Y + +# r = 2, x = 2 is valid. +Curve = P-384 +X = 016d2db67561bc126ad6c344d6eeb2713a9e2892c649af0f015c6b7617f160c8a3b3a88add669d7155025073c5ac5b4f +Y = 43bf2ed0088af08645c80aa0a24a567a94ba2d794e9689d3ad4b185bc5d2dd008333e2dd2ebb5069a9b32251a3cac71e +Digest = 1fcdb6059ce05172a26bbe2a3ccc88ed5a8cd5fc53edfd9053304d429296a6da23b1cd9e5c9ed3bb34f00418a70cdb7e +R = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 +S = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970 + +# r = 2 + n, x = 2 is invalid. r must already be reduced. +Curve = P-384 +X = 016d2db67561bc126ad6c344d6eeb2713a9e2892c649af0f015c6b7617f160c8a3b3a88add669d7155025073c5ac5b4f +Y = 43bf2ed0088af08645c80aa0a24a567a94ba2d794e9689d3ad4b185bc5d2dd008333e2dd2ebb5069a9b32251a3cac71e +Digest = 1fcdb6059ce05172a26bbe2a3ccc88ed5a8cd5fc53edfd9053304d429296a6da23b1cd9e5c9ed3bb34f00418a70cdb7e +R = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52975 +S = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970 +Invalid = Y + +# r = n-1, x = n-1 is the largest x without a reduction. +Curve = P-384 +X = b5b375264c09acf145ca91d12ab10a096092a41ec43f4d718e129ea1c12b2dea62c7785efc52f46f009fb1dba133e811 +Y = bc0b2af172b4b3068d032a798080e76f4d56f72069519e3c19a43682a41794e52cb3ca139348d6bbc923e6a4f7945cb1 +Digest = 1fcdb6059ce05172a26bbe2a3ccc88ed5a8cd5fc53edfd9053304d429296a6da23b1cd9e5c9ed3bb34f00418a70cdb7e +R = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +S = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970 + +# r = n-2, x = n-1 is incorrect. +Curve = P-384 +X = b5b375264c09acf145ca91d12ab10a096092a41ec43f4d718e129ea1c12b2dea62c7785efc52f46f009fb1dba133e811 +Y = bc0b2af172b4b3068d032a798080e76f4d56f72069519e3c19a43682a41794e52cb3ca139348d6bbc923e6a4f7945cb1 +Digest = 1fcdb6059ce05172a26bbe2a3ccc88ed5a8cd5fc53edfd9053304d429296a6da23b1cd9e5c9ed3bb34f00418a70cdb7e +R = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52971 +S = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970 +Invalid = Y + +# r = 2, x = n+2 is the smallest x with a reduction. +Curve = P-384 +X = 01b54a697305092bac2939fb906d7471b411c4eba8654169166a5da3810e1fc96795df921f7abbf519be4a027435176c +Y = a19012a3518773d508106d4153adee43c3c384fa62ce36a4addea08f593ec9c76b09a6b9c69d29bd7d47eb48e167dd2f +Digest = 1fcdb6059ce05172a26bbe2a3ccc88ed5a8cd5fc53edfd9053304d429296a6da23b1cd9e5c9ed3bb34f00418a70cdb7e +R = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002 +S = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970 + +# r = 3, x = n+2 is incorrect. +Curve = P-384 +X = 01b54a697305092bac2939fb906d7471b411c4eba8654169166a5da3810e1fc96795df921f7abbf519be4a027435176c +Y = a19012a3518773d508106d4153adee43c3c384fa62ce36a4addea08f593ec9c76b09a6b9c69d29bd7d47eb48e167dd2f +Digest = 1fcdb6059ce05172a26bbe2a3ccc88ed5a8cd5fc53edfd9053304d429296a6da23b1cd9e5c9ed3bb34f00418a70cdb7e +R = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 +S = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970 +Invalid = Y + +# r = p-1-n, x = p-1 is the largest valid x. +Curve = P-384 +X = c4fd8e68006b83f7b7b20b731ae405813aa05f6e57374589b36ae1cecd1d49cae1418c22f398188bcf4ef02e89fe7394 +Y = dd1164b3707f59e05129fa228b8448031db159985f035d93470dc42b3ab4129f0760c46cf201d42e73a7e33ba7402ea6 +Digest = 1fcdb6059ce05172a26bbe2a3ccc88ed5a8cd5fc53edfd9053304d429296a6da23b1cd9e5c9ed3bb34f00418a70cdb7e +R = 000000000000000000000000000000000000000000000000389cb27e0bc8d21fa7e5f24cb74f58851313e696333ad68b +S = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970 + +# r = p-n+2, x = 2 is incorrect. r is too large to compare r+n with x. +Curve = P-384 +X = 4e5e4f1a6e97059a6cf2f4e8129e5c7c64cb84f9994a41ff5bf30b29c1bf5ba6898627c91a23c73e05cd1a43c8f908c0 +Y = 06a0aed7f1e63a728f87dbd5360a67571a076ab0b4cde81b10d499959814ddb3a8c7854b0bbfa87cc272f90bca2a2254 +Digest = 1fcdb6059ce05172a26bbe2a3ccc88ed5a8cd5fc53edfd9053304d429296a6da23b1cd9e5c9ed3bb34f00418a70cdb7e +R = 000000000000000000000000000000000000000000000000389cb27e0bc8d21fa7e5f24cb74f58851313e696333ad68e +S = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970 +Invalid = Y diff --git a/vendor/ring/crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl b/vendor/ring/crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl new file mode 100644 index 00000000..d224f803 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl @@ -0,0 +1,1122 @@ +#! /usr/bin/env perl +# Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# +# AES-NI-CTR+GHASH stitch. +# +# February 2013 +# +# OpenSSL GCM implementation is organized in such way that its +# performance is rather close to the sum of its streamed components, +# in the context parallelized AES-NI CTR and modulo-scheduled +# PCLMULQDQ-enabled GHASH. Unfortunately, as no stitch implementation +# was observed to perform significantly better than the sum of the +# components on contemporary CPUs, the effort was deemed impossible to +# justify. This module is based on combination of Intel submissions, +# [1] and [2], with MOVBE twist suggested by Ilya Albrekht and Max +# Locktyukhin of Intel Corp. who verified that it reduces shuffles +# pressure with notable relative improvement, achieving 1.0 cycle per +# byte processed with 128-bit key on Haswell processor, 0.74 - on +# Broadwell, 0.63 - on Skylake... [Mentioned results are raw profiled +# measurements for favourable packet size, one divisible by 96. +# Applications using the EVP interface will observe a few percent +# worse performance.] +# +# Knights Landing processes 1 byte in 1.25 cycles (measured with EVP). +# +# [1] http://rt.openssl.org/Ticket/Display.html?id=2900&user=guest&pass=guest +# [2] http://www.intel.com/content/dam/www/public/us/en/documents/software-support/enabling-high-performance-gcm.pdf + +$flavour = shift; +$output = shift; +if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } + +$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/); + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../../perlasm/x86_64-xlate.pl" and -f $xlate) or +die "can't locate x86_64-xlate.pl"; + +# |$avx| in ghash-x86_64.pl must be set to at least 1; otherwise tags will +# be computed incorrectly. +# +# In upstream, this is controlled by shelling out to the compiler to check +# versions, but BoringSSL is intended to be used with pre-generated perlasm +# output, so this isn't useful anyway. +# +# The upstream code uses the condition |$avx>1| even though no AVX2 +# instructions are used, because it assumes MOVBE is supported by the assembler +# if and only if AVX2 is also supported by the assembler; see +# https://marc.info/?l=openssl-dev&m=146567589526984&w=2. +$avx = 2; + +open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""; +*STDOUT=*OUT; + +# See the comment above regarding why the condition is ($avx>1) when there are +# no AVX2 instructions being used. +if ($avx>1) {{{ + +($inp,$out,$len,$key,$ivp,$Xip)=("%rdi","%rsi","%rdx","%rcx","%r8","%r9"); + +($Ii,$T1,$T2,$Hkey, + $Z0,$Z1,$Z2,$Z3,$Xi) = map("%xmm$_",(0..8)); + +($inout0,$inout1,$inout2,$inout3,$inout4,$inout5,$rndkey) = map("%xmm$_",(9..15)); + +($counter,$rounds,$ret,$const,$in0,$end0)=("%ebx","%ebp","%r10","%r11","%r14","%r15"); + +$code=<<___; +.text + +.type _aesni_ctr32_ghash_6x,\@abi-omnipotent +.align 32 +_aesni_ctr32_ghash_6x: +.cfi_startproc + vmovdqu 0x20($const),$T2 # borrow $T2, .Lone_msb + sub \$6,$len + vpxor $Z0,$Z0,$Z0 # $Z0 = 0 + vmovdqu 0x00-0x80($key),$rndkey + vpaddb $T2,$T1,$inout1 + vpaddb $T2,$inout1,$inout2 + vpaddb $T2,$inout2,$inout3 + vpaddb $T2,$inout3,$inout4 + vpaddb $T2,$inout4,$inout5 + vpxor $rndkey,$T1,$inout0 + vmovdqu $Z0,16+8(%rsp) # "$Z3" = 0 + jmp .Loop6x + +.align 32 +.Loop6x: + add \$`6<<24`,$counter + jc .Lhandle_ctr32 # discard $inout[1-5]? + vmovdqu 0x00-0x20($Xip),$Hkey # $Hkey^1 + vpaddb $T2,$inout5,$T1 # next counter value + vpxor $rndkey,$inout1,$inout1 + vpxor $rndkey,$inout2,$inout2 + +.Lresume_ctr32: + vmovdqu $T1,($ivp) # save next counter value + vpclmulqdq \$0x10,$Hkey,$Z3,$Z1 + vpxor $rndkey,$inout3,$inout3 + vmovups 0x10-0x80($key),$T2 # borrow $T2 for $rndkey + vpclmulqdq \$0x01,$Hkey,$Z3,$Z2 + + # At this point, the current block of 96 (0x60) bytes has already been + # loaded into registers. Concurrently with processing it, we want to + # load the next 96 bytes of input for the next round. Obviously, we can + # only do this if there are at least 96 more bytes of input beyond the + # input we're currently processing, or else we'd read past the end of + # the input buffer. Here, we set |%r12| to 96 if there are at least 96 + # bytes of input beyond the 96 bytes we're already processing, and we + # set |%r12| to 0 otherwise. In the case where we set |%r12| to 96, + # we'll read in the next block so that it is in registers for the next + # loop iteration. In the case where we set |%r12| to 0, we'll re-read + # the current block and then ignore what we re-read. + # + # At this point, |$in0| points to the current (already read into + # registers) block, and |$end0| points to 2*96 bytes before the end of + # the input. Thus, |$in0| > |$end0| means that we do not have the next + # 96-byte block to read in, and |$in0| <= |$end0| means we do. + xor %r12,%r12 + cmp $in0,$end0 + + vaesenc $T2,$inout0,$inout0 + vmovdqu 0x30+8(%rsp),$Ii # I[4] + vpxor $rndkey,$inout4,$inout4 + vpclmulqdq \$0x00,$Hkey,$Z3,$T1 + vaesenc $T2,$inout1,$inout1 + vpxor $rndkey,$inout5,$inout5 + setnc %r12b + vpclmulqdq \$0x11,$Hkey,$Z3,$Z3 + vaesenc $T2,$inout2,$inout2 + vmovdqu 0x10-0x20($Xip),$Hkey # $Hkey^2 + neg %r12 + vaesenc $T2,$inout3,$inout3 + vpxor $Z1,$Z2,$Z2 + vpclmulqdq \$0x00,$Hkey,$Ii,$Z1 + vpxor $Z0,$Xi,$Xi # modulo-scheduled + vaesenc $T2,$inout4,$inout4 + vpxor $Z1,$T1,$Z0 + and \$0x60,%r12 + vmovups 0x20-0x80($key),$rndkey + vpclmulqdq \$0x10,$Hkey,$Ii,$T1 + vaesenc $T2,$inout5,$inout5 + + vpclmulqdq \$0x01,$Hkey,$Ii,$T2 + lea ($in0,%r12),$in0 + vaesenc $rndkey,$inout0,$inout0 + vpxor 16+8(%rsp),$Xi,$Xi # modulo-scheduled [vpxor $Z3,$Xi,$Xi] + vpclmulqdq \$0x11,$Hkey,$Ii,$Hkey + vmovdqu 0x40+8(%rsp),$Ii # I[3] + vaesenc $rndkey,$inout1,$inout1 + movbe 0x58($in0),%r13 + vaesenc $rndkey,$inout2,$inout2 + movbe 0x50($in0),%r12 + vaesenc $rndkey,$inout3,$inout3 + mov %r13,0x20+8(%rsp) + vaesenc $rndkey,$inout4,$inout4 + mov %r12,0x28+8(%rsp) + vmovdqu 0x30-0x20($Xip),$Z1 # borrow $Z1 for $Hkey^3 + vaesenc $rndkey,$inout5,$inout5 + + vmovups 0x30-0x80($key),$rndkey + vpxor $T1,$Z2,$Z2 + vpclmulqdq \$0x00,$Z1,$Ii,$T1 + vaesenc $rndkey,$inout0,$inout0 + vpxor $T2,$Z2,$Z2 + vpclmulqdq \$0x10,$Z1,$Ii,$T2 + vaesenc $rndkey,$inout1,$inout1 + vpxor $Hkey,$Z3,$Z3 + vpclmulqdq \$0x01,$Z1,$Ii,$Hkey + vaesenc $rndkey,$inout2,$inout2 + vpclmulqdq \$0x11,$Z1,$Ii,$Z1 + vmovdqu 0x50+8(%rsp),$Ii # I[2] + vaesenc $rndkey,$inout3,$inout3 + vaesenc $rndkey,$inout4,$inout4 + vpxor $T1,$Z0,$Z0 + vmovdqu 0x40-0x20($Xip),$T1 # borrow $T1 for $Hkey^4 + vaesenc $rndkey,$inout5,$inout5 + + vmovups 0x40-0x80($key),$rndkey + vpxor $T2,$Z2,$Z2 + vpclmulqdq \$0x00,$T1,$Ii,$T2 + vaesenc $rndkey,$inout0,$inout0 + vpxor $Hkey,$Z2,$Z2 + vpclmulqdq \$0x10,$T1,$Ii,$Hkey + vaesenc $rndkey,$inout1,$inout1 + movbe 0x48($in0),%r13 + vpxor $Z1,$Z3,$Z3 + vpclmulqdq \$0x01,$T1,$Ii,$Z1 + vaesenc $rndkey,$inout2,$inout2 + movbe 0x40($in0),%r12 + vpclmulqdq \$0x11,$T1,$Ii,$T1 + vmovdqu 0x60+8(%rsp),$Ii # I[1] + vaesenc $rndkey,$inout3,$inout3 + mov %r13,0x30+8(%rsp) + vaesenc $rndkey,$inout4,$inout4 + mov %r12,0x38+8(%rsp) + vpxor $T2,$Z0,$Z0 + vmovdqu 0x60-0x20($Xip),$T2 # borrow $T2 for $Hkey^5 + vaesenc $rndkey,$inout5,$inout5 + + vmovups 0x50-0x80($key),$rndkey + vpxor $Hkey,$Z2,$Z2 + vpclmulqdq \$0x00,$T2,$Ii,$Hkey + vaesenc $rndkey,$inout0,$inout0 + vpxor $Z1,$Z2,$Z2 + vpclmulqdq \$0x10,$T2,$Ii,$Z1 + vaesenc $rndkey,$inout1,$inout1 + movbe 0x38($in0),%r13 + vpxor $T1,$Z3,$Z3 + vpclmulqdq \$0x01,$T2,$Ii,$T1 + vpxor 0x70+8(%rsp),$Xi,$Xi # accumulate I[0] + vaesenc $rndkey,$inout2,$inout2 + movbe 0x30($in0),%r12 + vpclmulqdq \$0x11,$T2,$Ii,$T2 + vaesenc $rndkey,$inout3,$inout3 + mov %r13,0x40+8(%rsp) + vaesenc $rndkey,$inout4,$inout4 + mov %r12,0x48+8(%rsp) + vpxor $Hkey,$Z0,$Z0 + vmovdqu 0x70-0x20($Xip),$Hkey # $Hkey^6 + vaesenc $rndkey,$inout5,$inout5 + + vmovups 0x60-0x80($key),$rndkey + vpxor $Z1,$Z2,$Z2 + vpclmulqdq \$0x10,$Hkey,$Xi,$Z1 + vaesenc $rndkey,$inout0,$inout0 + vpxor $T1,$Z2,$Z2 + vpclmulqdq \$0x01,$Hkey,$Xi,$T1 + vaesenc $rndkey,$inout1,$inout1 + movbe 0x28($in0),%r13 + vpxor $T2,$Z3,$Z3 + vpclmulqdq \$0x00,$Hkey,$Xi,$T2 + vaesenc $rndkey,$inout2,$inout2 + movbe 0x20($in0),%r12 + vpclmulqdq \$0x11,$Hkey,$Xi,$Xi + vaesenc $rndkey,$inout3,$inout3 + mov %r13,0x50+8(%rsp) + vaesenc $rndkey,$inout4,$inout4 + mov %r12,0x58+8(%rsp) + vpxor $Z1,$Z2,$Z2 + vaesenc $rndkey,$inout5,$inout5 + vpxor $T1,$Z2,$Z2 + + vmovups 0x70-0x80($key),$rndkey + vpslldq \$8,$Z2,$Z1 + vpxor $T2,$Z0,$Z0 + vmovdqu 0x10($const),$Hkey # .Lpoly + + vaesenc $rndkey,$inout0,$inout0 + vpxor $Xi,$Z3,$Z3 + vaesenc $rndkey,$inout1,$inout1 + vpxor $Z1,$Z0,$Z0 + movbe 0x18($in0),%r13 + vaesenc $rndkey,$inout2,$inout2 + movbe 0x10($in0),%r12 + vpalignr \$8,$Z0,$Z0,$Ii # 1st phase + vpclmulqdq \$0x10,$Hkey,$Z0,$Z0 + mov %r13,0x60+8(%rsp) + vaesenc $rndkey,$inout3,$inout3 + mov %r12,0x68+8(%rsp) + vaesenc $rndkey,$inout4,$inout4 + vmovups 0x80-0x80($key),$T1 # borrow $T1 for $rndkey + vaesenc $rndkey,$inout5,$inout5 + + vaesenc $T1,$inout0,$inout0 + vmovups 0x90-0x80($key),$rndkey + vaesenc $T1,$inout1,$inout1 + vpsrldq \$8,$Z2,$Z2 + vaesenc $T1,$inout2,$inout2 + vpxor $Z2,$Z3,$Z3 + vaesenc $T1,$inout3,$inout3 + vpxor $Ii,$Z0,$Z0 + movbe 0x08($in0),%r13 + vaesenc $T1,$inout4,$inout4 + movbe 0x00($in0),%r12 + vaesenc $T1,$inout5,$inout5 + vmovups 0xa0-0x80($key),$T1 + cmp \$11,$rounds + jb .Lenc_tail # 128-bit key + + vaesenc $rndkey,$inout0,$inout0 + vaesenc $rndkey,$inout1,$inout1 + vaesenc $rndkey,$inout2,$inout2 + vaesenc $rndkey,$inout3,$inout3 + vaesenc $rndkey,$inout4,$inout4 + vaesenc $rndkey,$inout5,$inout5 + + vaesenc $T1,$inout0,$inout0 + vaesenc $T1,$inout1,$inout1 + vaesenc $T1,$inout2,$inout2 + vaesenc $T1,$inout3,$inout3 + vaesenc $T1,$inout4,$inout4 + vmovups 0xb0-0x80($key),$rndkey + vaesenc $T1,$inout5,$inout5 + vmovups 0xc0-0x80($key),$T1 + # 192-bit key support was removed. + + vaesenc $rndkey,$inout0,$inout0 + vaesenc $rndkey,$inout1,$inout1 + vaesenc $rndkey,$inout2,$inout2 + vaesenc $rndkey,$inout3,$inout3 + vaesenc $rndkey,$inout4,$inout4 + vaesenc $rndkey,$inout5,$inout5 + + vaesenc $T1,$inout0,$inout0 + vaesenc $T1,$inout1,$inout1 + vaesenc $T1,$inout2,$inout2 + vaesenc $T1,$inout3,$inout3 + vaesenc $T1,$inout4,$inout4 + vmovups 0xd0-0x80($key),$rndkey + vaesenc $T1,$inout5,$inout5 + vmovups 0xe0-0x80($key),$T1 + jmp .Lenc_tail # 256-bit key + +.align 32 +.Lhandle_ctr32: + vmovdqu ($const),$Ii # borrow $Ii for .Lbswap_mask + vpshufb $Ii,$T1,$Z2 # byte-swap counter + vmovdqu 0x30($const),$Z1 # borrow $Z1, .Ltwo_lsb + vpaddd 0x40($const),$Z2,$inout1 # .Lone_lsb + vpaddd $Z1,$Z2,$inout2 + vmovdqu 0x00-0x20($Xip),$Hkey # $Hkey^1 + vpaddd $Z1,$inout1,$inout3 + vpshufb $Ii,$inout1,$inout1 + vpaddd $Z1,$inout2,$inout4 + vpshufb $Ii,$inout2,$inout2 + vpxor $rndkey,$inout1,$inout1 + vpaddd $Z1,$inout3,$inout5 + vpshufb $Ii,$inout3,$inout3 + vpxor $rndkey,$inout2,$inout2 + vpaddd $Z1,$inout4,$T1 # byte-swapped next counter value + vpshufb $Ii,$inout4,$inout4 + vpshufb $Ii,$inout5,$inout5 + vpshufb $Ii,$T1,$T1 # next counter value + jmp .Lresume_ctr32 + +.align 32 +.Lenc_tail: + vaesenc $rndkey,$inout0,$inout0 + vmovdqu $Z3,16+8(%rsp) # postpone vpxor $Z3,$Xi,$Xi + vpalignr \$8,$Z0,$Z0,$Xi # 2nd phase + vaesenc $rndkey,$inout1,$inout1 + vpclmulqdq \$0x10,$Hkey,$Z0,$Z0 + vpxor 0x00($inp),$T1,$T2 + vaesenc $rndkey,$inout2,$inout2 + vpxor 0x10($inp),$T1,$Ii + vaesenc $rndkey,$inout3,$inout3 + vpxor 0x20($inp),$T1,$Z1 + vaesenc $rndkey,$inout4,$inout4 + vpxor 0x30($inp),$T1,$Z2 + vaesenc $rndkey,$inout5,$inout5 + vpxor 0x40($inp),$T1,$Z3 + vpxor 0x50($inp),$T1,$Hkey + vmovdqu ($ivp),$T1 # load next counter value + + vaesenclast $T2,$inout0,$inout0 + vmovdqu 0x20($const),$T2 # borrow $T2, .Lone_msb + vaesenclast $Ii,$inout1,$inout1 + vpaddb $T2,$T1,$Ii + mov %r13,0x70+8(%rsp) + lea 0x60($inp),$inp + vaesenclast $Z1,$inout2,$inout2 + vpaddb $T2,$Ii,$Z1 + mov %r12,0x78+8(%rsp) + lea 0x60($out),$out + vmovdqu 0x00-0x80($key),$rndkey + vaesenclast $Z2,$inout3,$inout3 + vpaddb $T2,$Z1,$Z2 + vaesenclast $Z3, $inout4,$inout4 + vpaddb $T2,$Z2,$Z3 + vaesenclast $Hkey,$inout5,$inout5 + vpaddb $T2,$Z3,$Hkey + + add \$0x60,$ret + sub \$0x6,$len + jc .L6x_done + + vmovups $inout0,-0x60($out) # save output + vpxor $rndkey,$T1,$inout0 + vmovups $inout1,-0x50($out) + vmovdqa $Ii,$inout1 # 0 latency + vmovups $inout2,-0x40($out) + vmovdqa $Z1,$inout2 # 0 latency + vmovups $inout3,-0x30($out) + vmovdqa $Z2,$inout3 # 0 latency + vmovups $inout4,-0x20($out) + vmovdqa $Z3,$inout4 # 0 latency + vmovups $inout5,-0x10($out) + vmovdqa $Hkey,$inout5 # 0 latency + vmovdqu 0x20+8(%rsp),$Z3 # I[5] + jmp .Loop6x + +.L6x_done: + vpxor 16+8(%rsp),$Xi,$Xi # modulo-scheduled + vpxor $Z0,$Xi,$Xi # modulo-scheduled + + ret +.cfi_endproc +.size _aesni_ctr32_ghash_6x,.-_aesni_ctr32_ghash_6x +___ +###################################################################### +# +# size_t GFp_aesni_gcm_[en|de]crypt(const void *inp, void *out, size_t len, +# const AES_KEY *key, unsigned char iv[16], +# struct { u128 Xi,H,Htbl[9]; } *Xip); +$code.=<<___; +.globl GFp_aesni_gcm_decrypt +.type GFp_aesni_gcm_decrypt,\@function,6 +.align 32 +GFp_aesni_gcm_decrypt: +.cfi_startproc + xor $ret,$ret + + # We call |_aesni_ctr32_ghash_6x|, which requires at least 96 (0x60) + # bytes of input. + cmp \$0x60,$len # minimal accepted length + jb .Lgcm_dec_abort + + lea (%rsp),%rax # save stack pointer +.cfi_def_cfa_register %rax + push %rbx +.cfi_push %rbx + push %rbp +.cfi_push %rbp + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +___ +$code.=<<___ if ($win64); + lea -0xa8(%rsp),%rsp + movaps %xmm6,-0xd8(%rax) + movaps %xmm7,-0xc8(%rax) + movaps %xmm8,-0xb8(%rax) + movaps %xmm9,-0xa8(%rax) + movaps %xmm10,-0x98(%rax) + movaps %xmm11,-0x88(%rax) + movaps %xmm12,-0x78(%rax) + movaps %xmm13,-0x68(%rax) + movaps %xmm14,-0x58(%rax) + movaps %xmm15,-0x48(%rax) +.Lgcm_dec_body: +___ +$code.=<<___; + vzeroupper + + vmovdqu ($ivp),$T1 # input counter value + add \$-128,%rsp + mov 12($ivp),$counter + lea .Lbswap_mask(%rip),$const + lea -0x80($key),$in0 # borrow $in0 + mov \$0xf80,$end0 # borrow $end0 + vmovdqu ($Xip),$Xi # load Xi + and \$-128,%rsp # ensure stack alignment + vmovdqu ($const),$Ii # borrow $Ii for .Lbswap_mask + lea 0x80($key),$key # size optimization + lea 0x20+0x20($Xip),$Xip # size optimization + mov 0xf0-0x80($key),$rounds + vpshufb $Ii,$Xi,$Xi + + and $end0,$in0 + and %rsp,$end0 + sub $in0,$end0 + jc .Ldec_no_key_aliasing + cmp \$768,$end0 + jnc .Ldec_no_key_aliasing + sub $end0,%rsp # avoid aliasing with key +.Ldec_no_key_aliasing: + + vmovdqu 0x50($inp),$Z3 # I[5] + lea ($inp),$in0 + vmovdqu 0x40($inp),$Z0 + + # |_aesni_ctr32_ghash_6x| requires |$end0| to point to 2*96 (0xc0) + # bytes before the end of the input. Note, in particular, that this is + # correct even if |$len| is not an even multiple of 96 or 16. XXX: This + # seems to require that |$inp| + |$len| >= 2*96 (0xc0); i.e. |$inp| must + # not be near the very beginning of the address space when |$len| < 2*96 + # (0xc0). + lea -0xc0($inp,$len),$end0 + + vmovdqu 0x30($inp),$Z1 + shr \$4,$len + xor $ret,$ret + vmovdqu 0x20($inp),$Z2 + vpshufb $Ii,$Z3,$Z3 # passed to _aesni_ctr32_ghash_6x + vmovdqu 0x10($inp),$T2 + vpshufb $Ii,$Z0,$Z0 + vmovdqu ($inp),$Hkey + vpshufb $Ii,$Z1,$Z1 + vmovdqu $Z0,0x30(%rsp) + vpshufb $Ii,$Z2,$Z2 + vmovdqu $Z1,0x40(%rsp) + vpshufb $Ii,$T2,$T2 + vmovdqu $Z2,0x50(%rsp) + vpshufb $Ii,$Hkey,$Hkey + vmovdqu $T2,0x60(%rsp) + vmovdqu $Hkey,0x70(%rsp) + + call _aesni_ctr32_ghash_6x + + vmovups $inout0,-0x60($out) # save output + vmovups $inout1,-0x50($out) + vmovups $inout2,-0x40($out) + vmovups $inout3,-0x30($out) + vmovups $inout4,-0x20($out) + vmovups $inout5,-0x10($out) + + vpshufb ($const),$Xi,$Xi # .Lbswap_mask + vmovdqu $Xi,-0x40($Xip) # output Xi + + vzeroupper +___ +$code.=<<___ if ($win64); + movaps -0xd8(%rax),%xmm6 + movaps -0xc8(%rax),%xmm7 + movaps -0xb8(%rax),%xmm8 + movaps -0xa8(%rax),%xmm9 + movaps -0x98(%rax),%xmm10 + movaps -0x88(%rax),%xmm11 + movaps -0x78(%rax),%xmm12 + movaps -0x68(%rax),%xmm13 + movaps -0x58(%rax),%xmm14 + movaps -0x48(%rax),%xmm15 +___ +$code.=<<___; + mov -48(%rax),%r15 +.cfi_restore %r15 + mov -40(%rax),%r14 +.cfi_restore %r14 + mov -32(%rax),%r13 +.cfi_restore %r13 + mov -24(%rax),%r12 +.cfi_restore %r12 + mov -16(%rax),%rbp +.cfi_restore %rbp + mov -8(%rax),%rbx +.cfi_restore %rbx + lea (%rax),%rsp # restore %rsp +.cfi_def_cfa_register %rsp +.Lgcm_dec_abort: + mov $ret,%rax # return value + ret +.cfi_endproc +.size GFp_aesni_gcm_decrypt,.-GFp_aesni_gcm_decrypt +___ + +$code.=<<___; +.type _aesni_ctr32_6x,\@abi-omnipotent +.align 32 +_aesni_ctr32_6x: +.cfi_startproc + vmovdqu 0x00-0x80($key),$Z0 # borrow $Z0 for $rndkey + vmovdqu 0x20($const),$T2 # borrow $T2, .Lone_msb + lea -1($rounds),%r13 + vmovups 0x10-0x80($key),$rndkey + lea 0x20-0x80($key),%r12 + vpxor $Z0,$T1,$inout0 + add \$`6<<24`,$counter + jc .Lhandle_ctr32_2 + vpaddb $T2,$T1,$inout1 + vpaddb $T2,$inout1,$inout2 + vpxor $Z0,$inout1,$inout1 + vpaddb $T2,$inout2,$inout3 + vpxor $Z0,$inout2,$inout2 + vpaddb $T2,$inout3,$inout4 + vpxor $Z0,$inout3,$inout3 + vpaddb $T2,$inout4,$inout5 + vpxor $Z0,$inout4,$inout4 + vpaddb $T2,$inout5,$T1 + vpxor $Z0,$inout5,$inout5 + jmp .Loop_ctr32 + +.align 16 +.Loop_ctr32: + vaesenc $rndkey,$inout0,$inout0 + vaesenc $rndkey,$inout1,$inout1 + vaesenc $rndkey,$inout2,$inout2 + vaesenc $rndkey,$inout3,$inout3 + vaesenc $rndkey,$inout4,$inout4 + vaesenc $rndkey,$inout5,$inout5 + vmovups (%r12),$rndkey + lea 0x10(%r12),%r12 + dec %r13d + jnz .Loop_ctr32 + + vmovdqu (%r12),$Hkey # last round key + vaesenc $rndkey,$inout0,$inout0 + vpxor 0x00($inp),$Hkey,$Z0 + vaesenc $rndkey,$inout1,$inout1 + vpxor 0x10($inp),$Hkey,$Z1 + vaesenc $rndkey,$inout2,$inout2 + vpxor 0x20($inp),$Hkey,$Z2 + vaesenc $rndkey,$inout3,$inout3 + vpxor 0x30($inp),$Hkey,$Xi + vaesenc $rndkey,$inout4,$inout4 + vpxor 0x40($inp),$Hkey,$T2 + vaesenc $rndkey,$inout5,$inout5 + vpxor 0x50($inp),$Hkey,$Hkey + lea 0x60($inp),$inp + + vaesenclast $Z0,$inout0,$inout0 + vaesenclast $Z1,$inout1,$inout1 + vaesenclast $Z2,$inout2,$inout2 + vaesenclast $Xi,$inout3,$inout3 + vaesenclast $T2,$inout4,$inout4 + vaesenclast $Hkey,$inout5,$inout5 + vmovups $inout0,0x00($out) + vmovups $inout1,0x10($out) + vmovups $inout2,0x20($out) + vmovups $inout3,0x30($out) + vmovups $inout4,0x40($out) + vmovups $inout5,0x50($out) + lea 0x60($out),$out + + ret +.align 32 +.Lhandle_ctr32_2: + vpshufb $Ii,$T1,$Z2 # byte-swap counter + vmovdqu 0x30($const),$Z1 # borrow $Z1, .Ltwo_lsb + vpaddd 0x40($const),$Z2,$inout1 # .Lone_lsb + vpaddd $Z1,$Z2,$inout2 + vpaddd $Z1,$inout1,$inout3 + vpshufb $Ii,$inout1,$inout1 + vpaddd $Z1,$inout2,$inout4 + vpshufb $Ii,$inout2,$inout2 + vpxor $Z0,$inout1,$inout1 + vpaddd $Z1,$inout3,$inout5 + vpshufb $Ii,$inout3,$inout3 + vpxor $Z0,$inout2,$inout2 + vpaddd $Z1,$inout4,$T1 # byte-swapped next counter value + vpshufb $Ii,$inout4,$inout4 + vpxor $Z0,$inout3,$inout3 + vpshufb $Ii,$inout5,$inout5 + vpxor $Z0,$inout4,$inout4 + vpshufb $Ii,$T1,$T1 # next counter value + vpxor $Z0,$inout5,$inout5 + jmp .Loop_ctr32 +.cfi_endproc +.size _aesni_ctr32_6x,.-_aesni_ctr32_6x + +.globl GFp_aesni_gcm_encrypt +.type GFp_aesni_gcm_encrypt,\@function,6 +.align 32 +GFp_aesni_gcm_encrypt: +.cfi_startproc + xor $ret,$ret + + # We call |_aesni_ctr32_6x| twice, each call consuming 96 bytes of + # input. Then we call |_aesni_ctr32_ghash_6x|, which requires at + # least 96 more bytes of input. + cmp \$0x60*3,$len # minimal accepted length + jb .Lgcm_enc_abort + + lea (%rsp),%rax # save stack pointer +.cfi_def_cfa_register %rax + push %rbx +.cfi_push %rbx + push %rbp +.cfi_push %rbp + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 +___ +$code.=<<___ if ($win64); + lea -0xa8(%rsp),%rsp + movaps %xmm6,-0xd8(%rax) + movaps %xmm7,-0xc8(%rax) + movaps %xmm8,-0xb8(%rax) + movaps %xmm9,-0xa8(%rax) + movaps %xmm10,-0x98(%rax) + movaps %xmm11,-0x88(%rax) + movaps %xmm12,-0x78(%rax) + movaps %xmm13,-0x68(%rax) + movaps %xmm14,-0x58(%rax) + movaps %xmm15,-0x48(%rax) +.Lgcm_enc_body: +___ +$code.=<<___; + vzeroupper + + vmovdqu ($ivp),$T1 # input counter value + add \$-128,%rsp + mov 12($ivp),$counter + lea .Lbswap_mask(%rip),$const + lea -0x80($key),$in0 # borrow $in0 + mov \$0xf80,$end0 # borrow $end0 + lea 0x80($key),$key # size optimization + vmovdqu ($const),$Ii # borrow $Ii for .Lbswap_mask + and \$-128,%rsp # ensure stack alignment + mov 0xf0-0x80($key),$rounds + + and $end0,$in0 + and %rsp,$end0 + sub $in0,$end0 + jc .Lenc_no_key_aliasing + cmp \$768,$end0 + jnc .Lenc_no_key_aliasing + sub $end0,%rsp # avoid aliasing with key +.Lenc_no_key_aliasing: + + lea ($out),$in0 + + # |_aesni_ctr32_ghash_6x| requires |$end0| to point to 2*96 (0xc0) + # bytes before the end of the input. Note, in particular, that this is + # correct even if |$len| is not an even multiple of 96 or 16. Unlike in + # the decryption case, there's no caveat that |$out| must not be near + # the very beginning of the address space, because we know that + # |$len| >= 3*96 from the check above, and so we know + # |$out| + |$len| >= 2*96 (0xc0). + lea -0xc0($out,$len),$end0 + + shr \$4,$len + + call _aesni_ctr32_6x + vpshufb $Ii,$inout0,$Xi # save bswapped output on stack + vpshufb $Ii,$inout1,$T2 + vmovdqu $Xi,0x70(%rsp) + vpshufb $Ii,$inout2,$Z0 + vmovdqu $T2,0x60(%rsp) + vpshufb $Ii,$inout3,$Z1 + vmovdqu $Z0,0x50(%rsp) + vpshufb $Ii,$inout4,$Z2 + vmovdqu $Z1,0x40(%rsp) + vpshufb $Ii,$inout5,$Z3 # passed to _aesni_ctr32_ghash_6x + vmovdqu $Z2,0x30(%rsp) + + call _aesni_ctr32_6x + + vmovdqu ($Xip),$Xi # load Xi + lea 0x20+0x20($Xip),$Xip # size optimization + sub \$12,$len + mov \$0x60*2,$ret + vpshufb $Ii,$Xi,$Xi + + call _aesni_ctr32_ghash_6x + vmovdqu 0x20(%rsp),$Z3 # I[5] + vmovdqu ($const),$Ii # borrow $Ii for .Lbswap_mask + vmovdqu 0x00-0x20($Xip),$Hkey # $Hkey^1 + vpunpckhqdq $Z3,$Z3,$T1 + vmovdqu 0x20-0x20($Xip),$rndkey # borrow $rndkey for $HK + vmovups $inout0,-0x60($out) # save output + vpshufb $Ii,$inout0,$inout0 # but keep bswapped copy + vpxor $Z3,$T1,$T1 + vmovups $inout1,-0x50($out) + vpshufb $Ii,$inout1,$inout1 + vmovups $inout2,-0x40($out) + vpshufb $Ii,$inout2,$inout2 + vmovups $inout3,-0x30($out) + vpshufb $Ii,$inout3,$inout3 + vmovups $inout4,-0x20($out) + vpshufb $Ii,$inout4,$inout4 + vmovups $inout5,-0x10($out) + vpshufb $Ii,$inout5,$inout5 + vmovdqu $inout0,0x10(%rsp) # free $inout0 +___ +{ my ($HK,$T3)=($rndkey,$inout0); + +$code.=<<___; + vmovdqu 0x30(%rsp),$Z2 # I[4] + vmovdqu 0x10-0x20($Xip),$Ii # borrow $Ii for $Hkey^2 + vpunpckhqdq $Z2,$Z2,$T2 + vpclmulqdq \$0x00,$Hkey,$Z3,$Z1 + vpxor $Z2,$T2,$T2 + vpclmulqdq \$0x11,$Hkey,$Z3,$Z3 + vpclmulqdq \$0x00,$HK,$T1,$T1 + + vmovdqu 0x40(%rsp),$T3 # I[3] + vpclmulqdq \$0x00,$Ii,$Z2,$Z0 + vmovdqu 0x30-0x20($Xip),$Hkey # $Hkey^3 + vpxor $Z1,$Z0,$Z0 + vpunpckhqdq $T3,$T3,$Z1 + vpclmulqdq \$0x11,$Ii,$Z2,$Z2 + vpxor $T3,$Z1,$Z1 + vpxor $Z3,$Z2,$Z2 + vpclmulqdq \$0x10,$HK,$T2,$T2 + vmovdqu 0x50-0x20($Xip),$HK + vpxor $T1,$T2,$T2 + + vmovdqu 0x50(%rsp),$T1 # I[2] + vpclmulqdq \$0x00,$Hkey,$T3,$Z3 + vmovdqu 0x40-0x20($Xip),$Ii # borrow $Ii for $Hkey^4 + vpxor $Z0,$Z3,$Z3 + vpunpckhqdq $T1,$T1,$Z0 + vpclmulqdq \$0x11,$Hkey,$T3,$T3 + vpxor $T1,$Z0,$Z0 + vpxor $Z2,$T3,$T3 + vpclmulqdq \$0x00,$HK,$Z1,$Z1 + vpxor $T2,$Z1,$Z1 + + vmovdqu 0x60(%rsp),$T2 # I[1] + vpclmulqdq \$0x00,$Ii,$T1,$Z2 + vmovdqu 0x60-0x20($Xip),$Hkey # $Hkey^5 + vpxor $Z3,$Z2,$Z2 + vpunpckhqdq $T2,$T2,$Z3 + vpclmulqdq \$0x11,$Ii,$T1,$T1 + vpxor $T2,$Z3,$Z3 + vpxor $T3,$T1,$T1 + vpclmulqdq \$0x10,$HK,$Z0,$Z0 + vmovdqu 0x80-0x20($Xip),$HK + vpxor $Z1,$Z0,$Z0 + + vpxor 0x70(%rsp),$Xi,$Xi # accumulate I[0] + vpclmulqdq \$0x00,$Hkey,$T2,$Z1 + vmovdqu 0x70-0x20($Xip),$Ii # borrow $Ii for $Hkey^6 + vpunpckhqdq $Xi,$Xi,$T3 + vpxor $Z2,$Z1,$Z1 + vpclmulqdq \$0x11,$Hkey,$T2,$T2 + vpxor $Xi,$T3,$T3 + vpxor $T1,$T2,$T2 + vpclmulqdq \$0x00,$HK,$Z3,$Z3 + vpxor $Z0,$Z3,$Z0 + + vpclmulqdq \$0x00,$Ii,$Xi,$Z2 + vmovdqu 0x00-0x20($Xip),$Hkey # $Hkey^1 + vpunpckhqdq $inout5,$inout5,$T1 + vpclmulqdq \$0x11,$Ii,$Xi,$Xi + vpxor $inout5,$T1,$T1 + vpxor $Z1,$Z2,$Z1 + vpclmulqdq \$0x10,$HK,$T3,$T3 + vmovdqu 0x20-0x20($Xip),$HK + vpxor $T2,$Xi,$Z3 + vpxor $Z0,$T3,$Z2 + + vmovdqu 0x10-0x20($Xip),$Ii # borrow $Ii for $Hkey^2 + vpxor $Z1,$Z3,$T3 # aggregated Karatsuba post-processing + vpclmulqdq \$0x00,$Hkey,$inout5,$Z0 + vpxor $T3,$Z2,$Z2 + vpunpckhqdq $inout4,$inout4,$T2 + vpclmulqdq \$0x11,$Hkey,$inout5,$inout5 + vpxor $inout4,$T2,$T2 + vpslldq \$8,$Z2,$T3 + vpclmulqdq \$0x00,$HK,$T1,$T1 + vpxor $T3,$Z1,$Xi + vpsrldq \$8,$Z2,$Z2 + vpxor $Z2,$Z3,$Z3 + + vpclmulqdq \$0x00,$Ii,$inout4,$Z1 + vmovdqu 0x30-0x20($Xip),$Hkey # $Hkey^3 + vpxor $Z0,$Z1,$Z1 + vpunpckhqdq $inout3,$inout3,$T3 + vpclmulqdq \$0x11,$Ii,$inout4,$inout4 + vpxor $inout3,$T3,$T3 + vpxor $inout5,$inout4,$inout4 + vpalignr \$8,$Xi,$Xi,$inout5 # 1st phase + vpclmulqdq \$0x10,$HK,$T2,$T2 + vmovdqu 0x50-0x20($Xip),$HK + vpxor $T1,$T2,$T2 + + vpclmulqdq \$0x00,$Hkey,$inout3,$Z0 + vmovdqu 0x40-0x20($Xip),$Ii # borrow $Ii for $Hkey^4 + vpxor $Z1,$Z0,$Z0 + vpunpckhqdq $inout2,$inout2,$T1 + vpclmulqdq \$0x11,$Hkey,$inout3,$inout3 + vpxor $inout2,$T1,$T1 + vpxor $inout4,$inout3,$inout3 + vxorps 0x10(%rsp),$Z3,$Z3 # accumulate $inout0 + vpclmulqdq \$0x00,$HK,$T3,$T3 + vpxor $T2,$T3,$T3 + + vpclmulqdq \$0x10,0x10($const),$Xi,$Xi + vxorps $inout5,$Xi,$Xi + + vpclmulqdq \$0x00,$Ii,$inout2,$Z1 + vmovdqu 0x60-0x20($Xip),$Hkey # $Hkey^5 + vpxor $Z0,$Z1,$Z1 + vpunpckhqdq $inout1,$inout1,$T2 + vpclmulqdq \$0x11,$Ii,$inout2,$inout2 + vpxor $inout1,$T2,$T2 + vpalignr \$8,$Xi,$Xi,$inout5 # 2nd phase + vpxor $inout3,$inout2,$inout2 + vpclmulqdq \$0x10,$HK,$T1,$T1 + vmovdqu 0x80-0x20($Xip),$HK + vpxor $T3,$T1,$T1 + + vxorps $Z3,$inout5,$inout5 + vpclmulqdq \$0x10,0x10($const),$Xi,$Xi + vxorps $inout5,$Xi,$Xi + + vpclmulqdq \$0x00,$Hkey,$inout1,$Z0 + vmovdqu 0x70-0x20($Xip),$Ii # borrow $Ii for $Hkey^6 + vpxor $Z1,$Z0,$Z0 + vpunpckhqdq $Xi,$Xi,$T3 + vpclmulqdq \$0x11,$Hkey,$inout1,$inout1 + vpxor $Xi,$T3,$T3 + vpxor $inout2,$inout1,$inout1 + vpclmulqdq \$0x00,$HK,$T2,$T2 + vpxor $T1,$T2,$T2 + + vpclmulqdq \$0x00,$Ii,$Xi,$Z1 + vpclmulqdq \$0x11,$Ii,$Xi,$Z3 + vpxor $Z0,$Z1,$Z1 + vpclmulqdq \$0x10,$HK,$T3,$Z2 + vpxor $inout1,$Z3,$Z3 + vpxor $T2,$Z2,$Z2 + + vpxor $Z1,$Z3,$Z0 # aggregated Karatsuba post-processing + vpxor $Z0,$Z2,$Z2 + vpslldq \$8,$Z2,$T1 + vmovdqu 0x10($const),$Hkey # .Lpoly + vpsrldq \$8,$Z2,$Z2 + vpxor $T1,$Z1,$Xi + vpxor $Z2,$Z3,$Z3 + + vpalignr \$8,$Xi,$Xi,$T2 # 1st phase + vpclmulqdq \$0x10,$Hkey,$Xi,$Xi + vpxor $T2,$Xi,$Xi + + vpalignr \$8,$Xi,$Xi,$T2 # 2nd phase + vpclmulqdq \$0x10,$Hkey,$Xi,$Xi + vpxor $Z3,$T2,$T2 + vpxor $T2,$Xi,$Xi +___ +} +$code.=<<___; + vpshufb ($const),$Xi,$Xi # .Lbswap_mask + vmovdqu $Xi,-0x40($Xip) # output Xi + + vzeroupper +___ +$code.=<<___ if ($win64); + movaps -0xd8(%rax),%xmm6 + movaps -0xc8(%rax),%xmm7 + movaps -0xb8(%rax),%xmm8 + movaps -0xa8(%rax),%xmm9 + movaps -0x98(%rax),%xmm10 + movaps -0x88(%rax),%xmm11 + movaps -0x78(%rax),%xmm12 + movaps -0x68(%rax),%xmm13 + movaps -0x58(%rax),%xmm14 + movaps -0x48(%rax),%xmm15 +___ +$code.=<<___; + mov -48(%rax),%r15 +.cfi_restore %r15 + mov -40(%rax),%r14 +.cfi_restore %r14 + mov -32(%rax),%r13 +.cfi_restore %r13 + mov -24(%rax),%r12 +.cfi_restore %r12 + mov -16(%rax),%rbp +.cfi_restore %rbp + mov -8(%rax),%rbx +.cfi_restore %rbx + lea (%rax),%rsp # restore %rsp +.cfi_def_cfa_register %rsp +.Lgcm_enc_abort: + mov $ret,%rax # return value + ret +.cfi_endproc +.size GFp_aesni_gcm_encrypt,.-GFp_aesni_gcm_encrypt +___ + +$code.=<<___; +.align 64 +.Lbswap_mask: + .byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 +.Lpoly: + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2 +.Lone_msb: + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +.Ltwo_lsb: + .byte 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +.Lone_lsb: + .byte 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +.asciz "AES-NI GCM module for x86_64, CRYPTOGAMS by " +.align 64 +___ +if ($win64) { +$rec="%rcx"; +$frame="%rdx"; +$context="%r8"; +$disp="%r9"; + +$code.=<<___ +.extern __imp_RtlVirtualUnwind +.type gcm_se_handler,\@abi-omnipotent +.align 16 +gcm_se_handler: + push %rsi + push %rdi + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + pushfq + sub \$64,%rsp + + mov 120($context),%rax # pull context->Rax + mov 248($context),%rbx # pull context->Rip + + mov 8($disp),%rsi # disp->ImageBase + mov 56($disp),%r11 # disp->HandlerData + + mov 0(%r11),%r10d # HandlerData[0] + lea (%rsi,%r10),%r10 # prologue label + cmp %r10,%rbx # context->RipRsp + + mov 4(%r11),%r10d # HandlerData[1] + lea (%rsi,%r10),%r10 # epilogue label + cmp %r10,%rbx # context->Rip>=epilogue label + jae .Lcommon_seh_tail + + mov 120($context),%rax # pull context->Rax + + mov -48(%rax),%r15 + mov -40(%rax),%r14 + mov -32(%rax),%r13 + mov -24(%rax),%r12 + mov -16(%rax),%rbp + mov -8(%rax),%rbx + mov %r15,240($context) + mov %r14,232($context) + mov %r13,224($context) + mov %r12,216($context) + mov %rbp,160($context) + mov %rbx,144($context) + + lea -0xd8(%rax),%rsi # %xmm save area + lea 512($context),%rdi # & context.Xmm6 + mov \$20,%ecx # 10*sizeof(%xmm0)/sizeof(%rax) + .long 0xa548f3fc # cld; rep movsq + +.Lcommon_seh_tail: + mov 8(%rax),%rdi + mov 16(%rax),%rsi + mov %rax,152($context) # restore context->Rsp + mov %rsi,168($context) # restore context->Rsi + mov %rdi,176($context) # restore context->Rdi + + mov 40($disp),%rdi # disp->ContextRecord + mov $context,%rsi # context + mov \$154,%ecx # sizeof(CONTEXT) + .long 0xa548f3fc # cld; rep movsq + + mov $disp,%rsi + xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER + mov 8(%rsi),%rdx # arg2, disp->ImageBase + mov 0(%rsi),%r8 # arg3, disp->ControlPc + mov 16(%rsi),%r9 # arg4, disp->FunctionEntry + mov 40(%rsi),%r10 # disp->ContextRecord + lea 56(%rsi),%r11 # &disp->HandlerData + lea 24(%rsi),%r12 # &disp->EstablisherFrame + mov %r10,32(%rsp) # arg5 + mov %r11,40(%rsp) # arg6 + mov %r12,48(%rsp) # arg7 + mov %rcx,56(%rsp) # arg8, (NULL) + call *__imp_RtlVirtualUnwind(%rip) + + mov \$1,%eax # ExceptionContinueSearch + add \$64,%rsp + popfq + pop %r15 + pop %r14 + pop %r13 + pop %r12 + pop %rbp + pop %rbx + pop %rdi + pop %rsi + ret +.size gcm_se_handler,.-gcm_se_handler + +.section .pdata +.align 4 + .rva .LSEH_begin_GFp_aesni_gcm_decrypt + .rva .LSEH_end_GFp_aesni_gcm_decrypt + .rva .LSEH_gcm_dec_info + + .rva .LSEH_begin_GFp_aesni_gcm_encrypt + .rva .LSEH_end_GFp_aesni_gcm_encrypt + .rva .LSEH_GFp_gcm_enc_info +.section .xdata +.align 8 +.LSEH_gcm_dec_info: + .byte 9,0,0,0 + .rva gcm_se_handler + .rva .Lgcm_dec_body,.Lgcm_dec_abort +.LSEH_GFp_gcm_enc_info: + .byte 9,0,0,0 + .rva gcm_se_handler + .rva .Lgcm_enc_body,.Lgcm_enc_abort +___ +} +}}} + +$code =~ s/\`([^\`]*)\`/eval($1)/gem; + +print $code; + +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/fipsmodule/modes/asm/ghash-armv4.pl b/vendor/ring/crypto/fipsmodule/modes/asm/ghash-armv4.pl new file mode 100644 index 00000000..67574a23 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/modes/asm/ghash-armv4.pl @@ -0,0 +1,300 @@ +#! /usr/bin/env perl +# Copyright 2010-2018 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# April 2010 +# +# The module implements "4-bit" GCM GHASH function and underlying +# single multiplication operation in GF(2^128). "4-bit" means that it +# uses 256 bytes per-key table [+32 bytes shared table]. There is no +# experimental performance data available yet. The only approximation +# that can be made at this point is based on code size. Inner loop is +# 32 instructions long and on single-issue core should execute in <40 +# cycles. Having verified that gcc 3.4 didn't unroll corresponding +# loop, this assembler loop body was found to be ~3x smaller than +# compiler-generated one... +# +# July 2010 +# +# Rescheduling for dual-issue pipeline resulted in 8.5% improvement on +# Cortex A8 core and ~25 cycles per processed byte (which was observed +# to be ~3 times faster than gcc-generated code:-) +# +# February 2011 +# +# Profiler-assisted and platform-specific optimization resulted in 7% +# improvement on Cortex A8 core and ~23.5 cycles per byte. +# +# March 2011 +# +# Add NEON implementation featuring polynomial multiplication, i.e. no +# lookup tables involved. On Cortex A8 it was measured to process one +# byte in 15 cycles or 55% faster than integer-only code. +# +# April 2014 +# +# Switch to multiplication algorithm suggested in paper referred +# below and combine it with reduction algorithm from x86 module. +# Performance improvement over previous version varies from 65% on +# Snapdragon S4 to 110% on Cortex A9. In absolute terms Cortex A8 +# processes one byte in 8.45 cycles, A9 - in 10.2, A15 - in 7.63, +# Snapdragon S4 - in 9.33. +# +# Câmara, D.; Gouvêa, C. P. L.; López, J. & Dahab, R.: Fast Software +# Polynomial Multiplication on ARM Processors using the NEON Engine. +# +# http://conradoplg.cryptoland.net/files/2010/12/mocrysen13.pdf + +# ==================================================================== +# Note about "528B" variant. In ARM case it makes lesser sense to +# implement it for following reasons: +# +# - performance improvement won't be anywhere near 50%, because 128- +# bit shift operation is neatly fused with 128-bit xor here, and +# "538B" variant would eliminate only 4-5 instructions out of 32 +# in the inner loop (meaning that estimated improvement is ~15%); +# - ARM-based systems are often embedded ones and extra memory +# consumption might be unappreciated (for so little improvement); +# +# Byte order [in]dependence. ========================================= +# +# Caller is expected to maintain specific *dword* order in Htable, +# namely with *least* significant dword of 128-bit value at *lower* +# address. This differs completely from C code and has everything to +# do with ldm instruction and order in which dwords are "consumed" by +# algorithm. *Byte* order within these dwords in turn is whatever +# *native* byte order on current platform. See gcm128.c for working +# example... + +# This file was patched in BoringSSL to remove the variable-time 4-bit +# implementation. + +$flavour = shift; +if ($flavour=~/\w[\w\-]*\.\w+$/) { $output=$flavour; undef $flavour; } +else { while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} } + +if ($flavour && $flavour ne "void") { + $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; + ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or + ( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or + die "can't locate arm-xlate.pl"; + + open OUT,"| \"$^X\" $xlate $flavour $output"; + *STDOUT=*OUT; +} else { + open OUT,">$output"; + *STDOUT=*OUT; +} + +$Xi="r0"; # argument block +$Htbl="r1"; +$inp="r2"; +$len="r3"; + +$code=<<___; +#include + +@ Silence ARMv8 deprecated IT instruction warnings. This file is used by both +@ ARMv7 and ARMv8 processors and does not use ARMv8 instructions. (ARMv8 PMULL +@ instructions are in aesv8-armx.pl.) +.arch armv7-a + +.text +#if defined(__thumb2__) || defined(__clang__) +.syntax unified +#define ldrplb ldrbpl +#define ldrneb ldrbne +#endif +#if defined(__thumb2__) +.thumb +#else +.code 32 +#endif +___ +{ +my ($Xl,$Xm,$Xh,$IN)=map("q$_",(0..3)); +my ($t0,$t1,$t2,$t3)=map("q$_",(8..12)); +my ($Hlo,$Hhi,$Hhl,$k48,$k32,$k16)=map("d$_",(26..31)); + +sub clmul64x64 { +my ($r,$a,$b)=@_; +$code.=<<___; + vext.8 $t0#lo, $a, $a, #1 @ A1 + vmull.p8 $t0, $t0#lo, $b @ F = A1*B + vext.8 $r#lo, $b, $b, #1 @ B1 + vmull.p8 $r, $a, $r#lo @ E = A*B1 + vext.8 $t1#lo, $a, $a, #2 @ A2 + vmull.p8 $t1, $t1#lo, $b @ H = A2*B + vext.8 $t3#lo, $b, $b, #2 @ B2 + vmull.p8 $t3, $a, $t3#lo @ G = A*B2 + vext.8 $t2#lo, $a, $a, #3 @ A3 + veor $t0, $t0, $r @ L = E + F + vmull.p8 $t2, $t2#lo, $b @ J = A3*B + vext.8 $r#lo, $b, $b, #3 @ B3 + veor $t1, $t1, $t3 @ M = G + H + vmull.p8 $r, $a, $r#lo @ I = A*B3 + veor $t0#lo, $t0#lo, $t0#hi @ t0 = (L) (P0 + P1) << 8 + vand $t0#hi, $t0#hi, $k48 + vext.8 $t3#lo, $b, $b, #4 @ B4 + veor $t1#lo, $t1#lo, $t1#hi @ t1 = (M) (P2 + P3) << 16 + vand $t1#hi, $t1#hi, $k32 + vmull.p8 $t3, $a, $t3#lo @ K = A*B4 + veor $t2, $t2, $r @ N = I + J + veor $t0#lo, $t0#lo, $t0#hi + veor $t1#lo, $t1#lo, $t1#hi + veor $t2#lo, $t2#lo, $t2#hi @ t2 = (N) (P4 + P5) << 24 + vand $t2#hi, $t2#hi, $k16 + vext.8 $t0, $t0, $t0, #15 + veor $t3#lo, $t3#lo, $t3#hi @ t3 = (K) (P6 + P7) << 32 + vmov.i64 $t3#hi, #0 + vext.8 $t1, $t1, $t1, #14 + veor $t2#lo, $t2#lo, $t2#hi + vmull.p8 $r, $a, $b @ D = A*B + vext.8 $t3, $t3, $t3, #12 + vext.8 $t2, $t2, $t2, #13 + veor $t0, $t0, $t1 + veor $t2, $t2, $t3 + veor $r, $r, $t0 + veor $r, $r, $t2 +___ +} + +$code.=<<___; +#if __ARM_MAX_ARCH__>=7 +.arch armv7-a +.fpu neon + +.global GFp_gcm_init_neon +.type GFp_gcm_init_neon,%function +.align 4 +GFp_gcm_init_neon: + vld1.64 $IN#hi,[r1]! @ load H + vmov.i8 $t0,#0xe1 + vld1.64 $IN#lo,[r1] + vshl.i64 $t0#hi,#57 + vshr.u64 $t0#lo,#63 @ t0=0xc2....01 + vdup.8 $t1,$IN#hi[7] + vshr.u64 $Hlo,$IN#lo,#63 + vshr.s8 $t1,#7 @ broadcast carry bit + vshl.i64 $IN,$IN,#1 + vand $t0,$t0,$t1 + vorr $IN#hi,$Hlo @ H<<<=1 + veor $IN,$IN,$t0 @ twisted H + vstmia r0,{$IN} + + ret @ bx lr +.size GFp_gcm_init_neon,.-GFp_gcm_init_neon + +.global GFp_gcm_gmult_neon +.type GFp_gcm_gmult_neon,%function +.align 4 +GFp_gcm_gmult_neon: + vld1.64 $IN#hi,[$Xi]! @ load Xi + vld1.64 $IN#lo,[$Xi]! + vmov.i64 $k48,#0x0000ffffffffffff + vldmia $Htbl,{$Hlo-$Hhi} @ load twisted H + vmov.i64 $k32,#0x00000000ffffffff +#ifdef __ARMEL__ + vrev64.8 $IN,$IN +#endif + vmov.i64 $k16,#0x000000000000ffff + veor $Hhl,$Hlo,$Hhi @ Karatsuba pre-processing + mov $len,#16 + b .Lgmult_neon +.size GFp_gcm_gmult_neon,.-GFp_gcm_gmult_neon + +.global GFp_gcm_ghash_neon +.type GFp_gcm_ghash_neon,%function +.align 4 +GFp_gcm_ghash_neon: + vld1.64 $Xl#hi,[$Xi]! @ load Xi + vld1.64 $Xl#lo,[$Xi]! + vmov.i64 $k48,#0x0000ffffffffffff + vldmia $Htbl,{$Hlo-$Hhi} @ load twisted H + vmov.i64 $k32,#0x00000000ffffffff +#ifdef __ARMEL__ + vrev64.8 $Xl,$Xl +#endif + vmov.i64 $k16,#0x000000000000ffff + veor $Hhl,$Hlo,$Hhi @ Karatsuba pre-processing + +.Loop_neon: + vld1.64 $IN#hi,[$inp]! @ load inp + vld1.64 $IN#lo,[$inp]! +#ifdef __ARMEL__ + vrev64.8 $IN,$IN +#endif + veor $IN,$Xl @ inp^=Xi +.Lgmult_neon: +___ + &clmul64x64 ($Xl,$Hlo,"$IN#lo"); # H.lo·Xi.lo +$code.=<<___; + veor $IN#lo,$IN#lo,$IN#hi @ Karatsuba pre-processing +___ + &clmul64x64 ($Xm,$Hhl,"$IN#lo"); # (H.lo+H.hi)·(Xi.lo+Xi.hi) + &clmul64x64 ($Xh,$Hhi,"$IN#hi"); # H.hi·Xi.hi +$code.=<<___; + veor $Xm,$Xm,$Xl @ Karatsuba post-processing + veor $Xm,$Xm,$Xh + veor $Xl#hi,$Xl#hi,$Xm#lo + veor $Xh#lo,$Xh#lo,$Xm#hi @ Xh|Xl - 256-bit result + + @ equivalent of reduction_avx from ghash-x86_64.pl + vshl.i64 $t1,$Xl,#57 @ 1st phase + vshl.i64 $t2,$Xl,#62 + veor $t2,$t2,$t1 @ + vshl.i64 $t1,$Xl,#63 + veor $t2, $t2, $t1 @ + veor $Xl#hi,$Xl#hi,$t2#lo @ + veor $Xh#lo,$Xh#lo,$t2#hi + + vshr.u64 $t2,$Xl,#1 @ 2nd phase + veor $Xh,$Xh,$Xl + veor $Xl,$Xl,$t2 @ + vshr.u64 $t2,$t2,#6 + vshr.u64 $Xl,$Xl,#1 @ + veor $Xl,$Xl,$Xh @ + veor $Xl,$Xl,$t2 @ + + subs $len,#16 + bne .Loop_neon + +#ifdef __ARMEL__ + vrev64.8 $Xl,$Xl +#endif + sub $Xi,#16 + vst1.64 $Xl#hi,[$Xi]! @ write out Xi + vst1.64 $Xl#lo,[$Xi] + + ret @ bx lr +.size GFp_gcm_ghash_neon,.-GFp_gcm_ghash_neon +#endif +___ +} +$code.=<<___; +.asciz "GHASH for ARMv4/NEON, CRYPTOGAMS by " +.align 2 +___ + +foreach (split("\n",$code)) { + s/\`([^\`]*)\`/eval $1/geo; + + s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/geo or + s/\bret\b/bx lr/go or + s/\bbx\s+lr\b/.word\t0xe12fff1e/go; # make it possible to compile with -march=armv4 + + print $_,"\n"; +} +close STDOUT or die "error closing STDOUT"; # enforce flush diff --git a/vendor/ring/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl b/vendor/ring/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl new file mode 100644 index 00000000..7e52ad66 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl @@ -0,0 +1,294 @@ +#! /usr/bin/env perl +# Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== + +# This file was adapted to AArch64 from the 32-bit version in ghash-armv4.pl. It +# implements the multiplication algorithm described in: +# +# Câmara, D.; Gouvêa, C. P. L.; López, J. & Dahab, R.: Fast Software +# Polynomial Multiplication on ARM Processors using the NEON Engine. +# +# http://conradoplg.cryptoland.net/files/2010/12/mocrysen13.pdf +# +# The main distinction to keep in mind between 32-bit NEON and AArch64 SIMD is +# AArch64 cannot compute over the upper halves of SIMD registers. In 32-bit +# NEON, the low and high halves of the 128-bit register q0 are accessible as +# 64-bit registers d0 and d1, respectively. In AArch64, dN is the lower half of +# vN. Where the 32-bit version would use the upper half, this file must keep +# halves in separate registers. +# +# The other distinction is in syntax. 32-bit NEON embeds lane information in the +# instruction name, while AArch64 uses suffixes on the registers. For instance, +# left-shifting 64-bit lanes of a SIMD register in 32-bit would be written: +# +# vshl.i64 q0, q0, #1 +# +# in 64-bit, it would be written: +# +# shl v0.2d, v0.2d, #1 +# +# See Programmer's Guide for ARMv8-A, section 7 for details. +# http://infocenter.arm.com/help/topic/com.arm.doc.den0024a/DEN0024A_v8_architecture_PG.pdf +# +# Finally, note the 8-bit and 64-bit polynomial multipliers in AArch64 differ +# only by suffix. pmull vR.8h, vA.8b, vB.8b multiplies eight 8-bit polynomials +# and is always available. pmull vR.1q, vA.1d, vB.1d multiplies a 64-bit +# polynomial and is conditioned on the PMULL extension. This file emulates the +# latter with the former. + +use strict; + +my $flavour = shift; +my $output; +if ($flavour=~/\w[\w\-]*\.\w+$/) { $output=$flavour; undef $flavour; } +else { while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} } + +if ($flavour && $flavour ne "void") { + $0 =~ m/(.*[\/\\])[^\/\\]+$/; + my $dir = $1; + my $xlate; + ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or + ( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or + die "can't locate arm-xlate.pl"; + + open OUT,"| \"$^X\" $xlate $flavour $output"; + *STDOUT=*OUT; +} else { + open OUT,">$output"; + *STDOUT=*OUT; +} + +my ($Xi, $Htbl, $inp, $len) = map("x$_", (0..3)); # argument block +my ($Xl, $Xm, $Xh, $INlo, $INhi) = map("v$_", (0..4)); +my ($Hlo, $Hhi, $Hhl) = map("v$_", (5..7)); +# d8-d15 are callee-saved, so avoid v8-v15. AArch64 SIMD has plenty of registers +# to spare. +my ($t0, $t1, $t2, $t3) = map("v$_", (16..19)); +my ($t0l_t1l, $t0h_t1h, $t2l_t3l, $t2h_t3h) = map("v$_", (20..23)); +my ($k48_k32, $k16_k0) = map("v$_", (24..25)); + +my $code = ""; + +# clmul64x64 emits code which emulates pmull $r.1q, $a.1d, $b.1d. $r, $a, and $b +# must be distinct from $t* and $k*. $t* are clobbered by the emitted code. +sub clmul64x64 { +my ($r, $a, $b) = @_; +$code .= <<___; + ext $t0.8b, $a.8b, $a.8b, #1 // A1 + pmull $t0.8h, $t0.8b, $b.8b // F = A1*B + ext $r.8b, $b.8b, $b.8b, #1 // B1 + pmull $r.8h, $a.8b, $r.8b // E = A*B1 + ext $t1.8b, $a.8b, $a.8b, #2 // A2 + pmull $t1.8h, $t1.8b, $b.8b // H = A2*B + ext $t3.8b, $b.8b, $b.8b, #2 // B2 + pmull $t3.8h, $a.8b, $t3.8b // G = A*B2 + ext $t2.8b, $a.8b, $a.8b, #3 // A3 + eor $t0.16b, $t0.16b, $r.16b // L = E + F + pmull $t2.8h, $t2.8b, $b.8b // J = A3*B + ext $r.8b, $b.8b, $b.8b, #3 // B3 + eor $t1.16b, $t1.16b, $t3.16b // M = G + H + pmull $r.8h, $a.8b, $r.8b // I = A*B3 + + // Here we diverge from the 32-bit version. It computes the following + // (instructions reordered for clarity): + // + // veor \$t0#lo, \$t0#lo, \$t0#hi @ t0 = P0 + P1 (L) + // vand \$t0#hi, \$t0#hi, \$k48 + // veor \$t0#lo, \$t0#lo, \$t0#hi + // + // veor \$t1#lo, \$t1#lo, \$t1#hi @ t1 = P2 + P3 (M) + // vand \$t1#hi, \$t1#hi, \$k32 + // veor \$t1#lo, \$t1#lo, \$t1#hi + // + // veor \$t2#lo, \$t2#lo, \$t2#hi @ t2 = P4 + P5 (N) + // vand \$t2#hi, \$t2#hi, \$k16 + // veor \$t2#lo, \$t2#lo, \$t2#hi + // + // veor \$t3#lo, \$t3#lo, \$t3#hi @ t3 = P6 + P7 (K) + // vmov.i64 \$t3#hi, #0 + // + // \$kN is a mask with the bottom N bits set. AArch64 cannot compute on + // upper halves of SIMD registers, so we must split each half into + // separate registers. To compensate, we pair computations up and + // parallelize. + + ext $t3.8b, $b.8b, $b.8b, #4 // B4 + eor $t2.16b, $t2.16b, $r.16b // N = I + J + pmull $t3.8h, $a.8b, $t3.8b // K = A*B4 + + // This can probably be scheduled more efficiently. For now, we just + // pair up independent instructions. + zip1 $t0l_t1l.2d, $t0.2d, $t1.2d + zip1 $t2l_t3l.2d, $t2.2d, $t3.2d + zip2 $t0h_t1h.2d, $t0.2d, $t1.2d + zip2 $t2h_t3h.2d, $t2.2d, $t3.2d + eor $t0l_t1l.16b, $t0l_t1l.16b, $t0h_t1h.16b + eor $t2l_t3l.16b, $t2l_t3l.16b, $t2h_t3h.16b + and $t0h_t1h.16b, $t0h_t1h.16b, $k48_k32.16b + and $t2h_t3h.16b, $t2h_t3h.16b, $k16_k0.16b + eor $t0l_t1l.16b, $t0l_t1l.16b, $t0h_t1h.16b + eor $t2l_t3l.16b, $t2l_t3l.16b, $t2h_t3h.16b + zip1 $t0.2d, $t0l_t1l.2d, $t0h_t1h.2d + zip1 $t2.2d, $t2l_t3l.2d, $t2h_t3h.2d + zip2 $t1.2d, $t0l_t1l.2d, $t0h_t1h.2d + zip2 $t3.2d, $t2l_t3l.2d, $t2h_t3h.2d + + ext $t0.16b, $t0.16b, $t0.16b, #15 // t0 = t0 << 8 + ext $t1.16b, $t1.16b, $t1.16b, #14 // t1 = t1 << 16 + pmull $r.8h, $a.8b, $b.8b // D = A*B + ext $t3.16b, $t3.16b, $t3.16b, #12 // t3 = t3 << 32 + ext $t2.16b, $t2.16b, $t2.16b, #13 // t2 = t2 << 24 + eor $t0.16b, $t0.16b, $t1.16b + eor $t2.16b, $t2.16b, $t3.16b + eor $r.16b, $r.16b, $t0.16b + eor $r.16b, $r.16b, $t2.16b +___ +} + +$code .= <<___; +#include + +.text + +.global GFp_gcm_init_neon +.type GFp_gcm_init_neon,%function +.align 4 +GFp_gcm_init_neon: + AARCH64_VALID_CALL_TARGET + // This function is adapted from gcm_init_v8. xC2 is t3. + ld1 {$t1.2d}, [x1] // load H + movi $t3.16b, #0xe1 + shl $t3.2d, $t3.2d, #57 // 0xc2.0 + ext $INlo.16b, $t1.16b, $t1.16b, #8 + ushr $t2.2d, $t3.2d, #63 + dup $t1.4s, $t1.s[1] + ext $t0.16b, $t2.16b, $t3.16b, #8 // t0=0xc2....01 + ushr $t2.2d, $INlo.2d, #63 + sshr $t1.4s, $t1.4s, #31 // broadcast carry bit + and $t2.16b, $t2.16b, $t0.16b + shl $INlo.2d, $INlo.2d, #1 + ext $t2.16b, $t2.16b, $t2.16b, #8 + and $t0.16b, $t0.16b, $t1.16b + orr $INlo.16b, $INlo.16b, $t2.16b // H<<<=1 + eor $Hlo.16b, $INlo.16b, $t0.16b // twisted H + st1 {$Hlo.2d}, [x0] // store Htable[0] + ret +.size GFp_gcm_init_neon,.-GFp_gcm_init_neon + +.global GFp_gcm_gmult_neon +.type GFp_gcm_gmult_neon,%function +.align 4 +GFp_gcm_gmult_neon: + AARCH64_VALID_CALL_TARGET + ld1 {$INlo.16b}, [$Xi] // load Xi + ld1 {$Hlo.1d}, [$Htbl], #8 // load twisted H + ld1 {$Hhi.1d}, [$Htbl] + adrp x9, :pg_hi21:.Lmasks // load constants + add x9, x9, :lo12:.Lmasks + ld1 {$k48_k32.2d, $k16_k0.2d}, [x9] + rev64 $INlo.16b, $INlo.16b // byteswap Xi + ext $INlo.16b, $INlo.16b, $INlo.16b, #8 + eor $Hhl.8b, $Hlo.8b, $Hhi.8b // Karatsuba pre-processing + + mov $len, #16 + b .Lgmult_neon +.size GFp_gcm_gmult_neon,.-GFp_gcm_gmult_neon + +.global GFp_gcm_ghash_neon +.type GFp_gcm_ghash_neon,%function +.align 4 +GFp_gcm_ghash_neon: + AARCH64_VALID_CALL_TARGET + ld1 {$Xl.16b}, [$Xi] // load Xi + ld1 {$Hlo.1d}, [$Htbl], #8 // load twisted H + ld1 {$Hhi.1d}, [$Htbl] + adrp x9, :pg_hi21:.Lmasks // load constants + add x9, x9, :lo12:.Lmasks + ld1 {$k48_k32.2d, $k16_k0.2d}, [x9] + rev64 $Xl.16b, $Xl.16b // byteswap Xi + ext $Xl.16b, $Xl.16b, $Xl.16b, #8 + eor $Hhl.8b, $Hlo.8b, $Hhi.8b // Karatsuba pre-processing + +.Loop_neon: + ld1 {$INlo.16b}, [$inp], #16 // load inp + rev64 $INlo.16b, $INlo.16b // byteswap inp + ext $INlo.16b, $INlo.16b, $INlo.16b, #8 + eor $INlo.16b, $INlo.16b, $Xl.16b // inp ^= Xi + +.Lgmult_neon: + // Split the input into $INlo and $INhi. (The upper halves are unused, + // so it is okay to leave them alone.) + ins $INhi.d[0], $INlo.d[1] +___ +&clmul64x64 ($Xl, $Hlo, $INlo); # H.lo·Xi.lo +$code .= <<___; + eor $INlo.8b, $INlo.8b, $INhi.8b // Karatsuba pre-processing +___ +&clmul64x64 ($Xm, $Hhl, $INlo); # (H.lo+H.hi)·(Xi.lo+Xi.hi) +&clmul64x64 ($Xh, $Hhi, $INhi); # H.hi·Xi.hi +$code .= <<___; + ext $t0.16b, $Xl.16b, $Xh.16b, #8 + eor $Xm.16b, $Xm.16b, $Xl.16b // Karatsuba post-processing + eor $Xm.16b, $Xm.16b, $Xh.16b + eor $Xm.16b, $Xm.16b, $t0.16b // Xm overlaps Xh.lo and Xl.hi + ins $Xl.d[1], $Xm.d[0] // Xh|Xl - 256-bit result + // This is a no-op due to the ins instruction below. + // ins $Xh.d[0], $Xm.d[1] + + // equivalent of reduction_avx from ghash-x86_64.pl + shl $t1.2d, $Xl.2d, #57 // 1st phase + shl $t2.2d, $Xl.2d, #62 + eor $t2.16b, $t2.16b, $t1.16b // + shl $t1.2d, $Xl.2d, #63 + eor $t2.16b, $t2.16b, $t1.16b // + // Note Xm contains {Xl.d[1], Xh.d[0]}. + eor $t2.16b, $t2.16b, $Xm.16b + ins $Xl.d[1], $t2.d[0] // Xl.d[1] ^= t2.d[0] + ins $Xh.d[0], $t2.d[1] // Xh.d[0] ^= t2.d[1] + + ushr $t2.2d, $Xl.2d, #1 // 2nd phase + eor $Xh.16b, $Xh.16b,$Xl.16b + eor $Xl.16b, $Xl.16b,$t2.16b // + ushr $t2.2d, $t2.2d, #6 + ushr $Xl.2d, $Xl.2d, #1 // + eor $Xl.16b, $Xl.16b, $Xh.16b // + eor $Xl.16b, $Xl.16b, $t2.16b // + + subs $len, $len, #16 + bne .Loop_neon + + rev64 $Xl.16b, $Xl.16b // byteswap Xi and write + ext $Xl.16b, $Xl.16b, $Xl.16b, #8 + st1 {$Xl.16b}, [$Xi] + + ret +.size GFp_gcm_ghash_neon,.-GFp_gcm_ghash_neon + +.section .rodata +.align 4 +.Lmasks: +.quad 0x0000ffffffffffff // k48 +.quad 0x00000000ffffffff // k32 +.quad 0x000000000000ffff // k16 +.quad 0x0000000000000000 // k0 +.asciz "GHASH for ARMv8, derived from ARMv4 version by " +.align 2 +___ + +foreach (split("\n",$code)) { + s/\`([^\`]*)\`/eval $1/geo; + + print $_,"\n"; +} +close STDOUT or die "error closing STDOUT"; # enforce flush diff --git a/vendor/ring/crypto/fipsmodule/modes/asm/ghash-x86.pl b/vendor/ring/crypto/fipsmodule/modes/asm/ghash-x86.pl new file mode 100644 index 00000000..39c2951a --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/modes/asm/ghash-x86.pl @@ -0,0 +1,714 @@ +#! /usr/bin/env perl +# Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# March, May, June 2010 +# +# The module implements "4-bit" GCM GHASH function and underlying +# single multiplication operation in GF(2^128). "4-bit" means that it +# uses 256 bytes per-key table [+64/128 bytes fixed table]. It has two +# code paths: vanilla x86 and vanilla SSE. Former will be executed on +# 486 and Pentium, latter on all others. SSE GHASH features so called +# "528B" variant of "4-bit" method utilizing additional 256+16 bytes +# of per-key storage [+512 bytes shared table]. Performance results +# are for streamed GHASH subroutine and are expressed in cycles per +# processed byte, less is better: +# +# gcc 2.95.3(*) SSE assembler x86 assembler +# +# Pentium 105/111(**) - 50 +# PIII 68 /75 12.2 24 +# P4 125/125 17.8 84(***) +# Opteron 66 /70 10.1 30 +# Core2 54 /67 8.4 18 +# Atom 105/105 16.8 53 +# VIA Nano 69 /71 13.0 27 +# +# (*) gcc 3.4.x was observed to generate few percent slower code, +# which is one of reasons why 2.95.3 results were chosen, +# another reason is lack of 3.4.x results for older CPUs; +# comparison with SSE results is not completely fair, because C +# results are for vanilla "256B" implementation, while +# assembler results are for "528B";-) +# (**) second number is result for code compiled with -fPIC flag, +# which is actually more relevant, because assembler code is +# position-independent; +# (***) see comment in non-MMX routine for further details; +# +# To summarize, it's >2-5 times faster than gcc-generated code. To +# anchor it to something else SHA1 assembler processes one byte in +# ~7 cycles on contemporary x86 cores. As for choice of MMX/SSE +# in particular, see comment at the end of the file... + +# May 2010 +# +# Add PCLMULQDQ version performing at 2.10 cycles per processed byte. +# The question is how close is it to theoretical limit? The pclmulqdq +# instruction latency appears to be 14 cycles and there can't be more +# than 2 of them executing at any given time. This means that single +# Karatsuba multiplication would take 28 cycles *plus* few cycles for +# pre- and post-processing. Then multiplication has to be followed by +# modulo-reduction. Given that aggregated reduction method [see +# "Carry-less Multiplication and Its Usage for Computing the GCM Mode" +# white paper by Intel] allows you to perform reduction only once in +# a while we can assume that asymptotic performance can be estimated +# as (28+Tmod/Naggr)/16, where Tmod is time to perform reduction +# and Naggr is the aggregation factor. +# +# Before we proceed to this implementation let's have closer look at +# the best-performing code suggested by Intel in their white paper. +# By tracing inter-register dependencies Tmod is estimated as ~19 +# cycles and Naggr chosen by Intel is 4, resulting in 2.05 cycles per +# processed byte. As implied, this is quite optimistic estimate, +# because it does not account for Karatsuba pre- and post-processing, +# which for a single multiplication is ~5 cycles. Unfortunately Intel +# does not provide performance data for GHASH alone. But benchmarking +# AES_GCM_encrypt ripped out of Fig. 15 of the white paper with aadt +# alone resulted in 2.46 cycles per byte of out 16KB buffer. Note that +# the result accounts even for pre-computing of degrees of the hash +# key H, but its portion is negligible at 16KB buffer size. +# +# Moving on to the implementation in question. Tmod is estimated as +# ~13 cycles and Naggr is 2, giving asymptotic performance of ... +# 2.16. How is it possible that measured performance is better than +# optimistic theoretical estimate? There is one thing Intel failed +# to recognize. By serializing GHASH with CTR in same subroutine +# former's performance is really limited to above (Tmul + Tmod/Naggr) +# equation. But if GHASH procedure is detached, the modulo-reduction +# can be interleaved with Naggr-1 multiplications at instruction level +# and under ideal conditions even disappear from the equation. So that +# optimistic theoretical estimate for this implementation is ... +# 28/16=1.75, and not 2.16. Well, it's probably way too optimistic, +# at least for such small Naggr. I'd argue that (28+Tproc/Naggr), +# where Tproc is time required for Karatsuba pre- and post-processing, +# is more realistic estimate. In this case it gives ... 1.91 cycles. +# Or in other words, depending on how well we can interleave reduction +# and one of the two multiplications the performance should be between +# 1.91 and 2.16. As already mentioned, this implementation processes +# one byte out of 8KB buffer in 2.10 cycles, while x86_64 counterpart +# - in 2.02. x86_64 performance is better, because larger register +# bank allows to interleave reduction and multiplication better. +# +# Does it make sense to increase Naggr? To start with it's virtually +# impossible in 32-bit mode, because of limited register bank +# capacity. Otherwise improvement has to be weighed against slower +# setup, as well as code size and complexity increase. As even +# optimistic estimate doesn't promise 30% performance improvement, +# there are currently no plans to increase Naggr. +# +# Special thanks to David Woodhouse for providing access to a +# Westmere-based system on behalf of Intel Open Source Technology Centre. + +# January 2010 +# +# Tweaked to optimize transitions between integer and FP operations +# on same XMM register, PCLMULQDQ subroutine was measured to process +# one byte in 2.07 cycles on Sandy Bridge, and in 2.12 - on Westmere. +# The minor regression on Westmere is outweighed by ~15% improvement +# on Sandy Bridge. Strangely enough attempt to modify 64-bit code in +# similar manner resulted in almost 20% degradation on Sandy Bridge, +# where original 64-bit code processes one byte in 1.95 cycles. + +##################################################################### +# For reference, AMD Bulldozer processes one byte in 1.98 cycles in +# 32-bit mode and 1.89 in 64-bit. + +# February 2013 +# +# Overhaul: aggregate Karatsuba post-processing, improve ILP in +# reduction_alg9. Resulting performance is 1.96 cycles per byte on +# Westmere, 1.95 - on Sandy/Ivy Bridge, 1.76 - on Bulldozer. + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +push(@INC,"${dir}","${dir}../../../perlasm"); +require "x86asm.pl"; + +$output=pop; +open STDOUT,">$output"; + +&asm_init($ARGV[0],$x86only = $ARGV[$#ARGV] eq "386"); + +$sse2=1; + + +if ($sse2) {{ +###################################################################### +# PCLMULQDQ version. + +$Xip="eax"; +$Htbl="edx"; +$const="ecx"; +$inp="esi"; +$len="ebx"; + +($Xi,$Xhi)=("xmm0","xmm1"); $Hkey="xmm2"; +($T1,$T2,$T3)=("xmm3","xmm4","xmm5"); +($Xn,$Xhn)=("xmm6","xmm7"); + +&static_label("bswap"); + +sub clmul64x64_T2 { # minimal "register" pressure +my ($Xhi,$Xi,$Hkey,$HK)=@_; + + &movdqa ($Xhi,$Xi); # + &pshufd ($T1,$Xi,0b01001110); + &pshufd ($T2,$Hkey,0b01001110) if (!defined($HK)); + &pxor ($T1,$Xi); # + &pxor ($T2,$Hkey) if (!defined($HK)); + $HK=$T2 if (!defined($HK)); + + &pclmulqdq ($Xi,$Hkey,0x00); ####### + &pclmulqdq ($Xhi,$Hkey,0x11); ####### + &pclmulqdq ($T1,$HK,0x00); ####### + &xorps ($T1,$Xi); # + &xorps ($T1,$Xhi); # + + &movdqa ($T2,$T1); # + &psrldq ($T1,8); + &pslldq ($T2,8); # + &pxor ($Xhi,$T1); + &pxor ($Xi,$T2); # +} + +sub clmul64x64_T3 { +# Even though this subroutine offers visually better ILP, it +# was empirically found to be a tad slower than above version. +# At least in GFp_gcm_ghash_clmul context. But it's just as well, +# because loop modulo-scheduling is possible only thanks to +# minimized "register" pressure... +my ($Xhi,$Xi,$Hkey)=@_; + + &movdqa ($T1,$Xi); # + &movdqa ($Xhi,$Xi); + &pclmulqdq ($Xi,$Hkey,0x00); ####### + &pclmulqdq ($Xhi,$Hkey,0x11); ####### + &pshufd ($T2,$T1,0b01001110); # + &pshufd ($T3,$Hkey,0b01001110); + &pxor ($T2,$T1); # + &pxor ($T3,$Hkey); + &pclmulqdq ($T2,$T3,0x00); ####### + &pxor ($T2,$Xi); # + &pxor ($T2,$Xhi); # + + &movdqa ($T3,$T2); # + &psrldq ($T2,8); + &pslldq ($T3,8); # + &pxor ($Xhi,$T2); + &pxor ($Xi,$T3); # +} + +if (1) { # Algorithm 9 with <<1 twist. + # Reduction is shorter and uses only two + # temporary registers, which makes it better + # candidate for interleaving with 64x64 + # multiplication. Pre-modulo-scheduled loop + # was found to be ~20% faster than Algorithm 5 + # below. Algorithm 9 was therefore chosen for + # further optimization... + +sub reduction_alg9 { # 17/11 times faster than Intel version +my ($Xhi,$Xi) = @_; + + # 1st phase + &movdqa ($T2,$Xi); # + &movdqa ($T1,$Xi); + &psllq ($Xi,5); + &pxor ($T1,$Xi); # + &psllq ($Xi,1); + &pxor ($Xi,$T1); # + &psllq ($Xi,57); # + &movdqa ($T1,$Xi); # + &pslldq ($Xi,8); + &psrldq ($T1,8); # + &pxor ($Xi,$T2); + &pxor ($Xhi,$T1); # + + # 2nd phase + &movdqa ($T2,$Xi); + &psrlq ($Xi,1); + &pxor ($Xhi,$T2); # + &pxor ($T2,$Xi); + &psrlq ($Xi,5); + &pxor ($Xi,$T2); # + &psrlq ($Xi,1); # + &pxor ($Xi,$Xhi) # +} + +&function_begin_B("GFp_gcm_init_clmul"); + &mov ($Htbl,&wparam(0)); + &mov ($Xip,&wparam(1)); + + &call (&label("pic")); +&set_label("pic"); + &blindpop ($const); + &lea ($const,&DWP(&label("bswap")."-".&label("pic"),$const)); + + &movdqu ($Hkey,&QWP(0,$Xip)); + &pshufd ($Hkey,$Hkey,0b01001110);# dword swap + + # <<1 twist + &pshufd ($T2,$Hkey,0b11111111); # broadcast uppermost dword + &movdqa ($T1,$Hkey); + &psllq ($Hkey,1); + &pxor ($T3,$T3); # + &psrlq ($T1,63); + &pcmpgtd ($T3,$T2); # broadcast carry bit + &pslldq ($T1,8); + &por ($Hkey,$T1); # H<<=1 + + # magic reduction + &pand ($T3,&QWP(16,$const)); # 0x1c2_polynomial + &pxor ($Hkey,$T3); # if(carry) H^=0x1c2_polynomial + + # calculate H^2 + &movdqa ($Xi,$Hkey); + &clmul64x64_T2 ($Xhi,$Xi,$Hkey); + &reduction_alg9 ($Xhi,$Xi); + + &pshufd ($T1,$Hkey,0b01001110); + &pshufd ($T2,$Xi,0b01001110); + &pxor ($T1,$Hkey); # Karatsuba pre-processing + &movdqu (&QWP(0,$Htbl),$Hkey); # save H + &pxor ($T2,$Xi); # Karatsuba pre-processing + &movdqu (&QWP(16,$Htbl),$Xi); # save H^2 + &palignr ($T2,$T1,8); # low part is H.lo^H.hi + &movdqu (&QWP(32,$Htbl),$T2); # save Karatsuba "salt" + + &ret (); +&function_end_B("GFp_gcm_init_clmul"); + +&function_begin_B("GFp_gcm_gmult_clmul"); + &mov ($Xip,&wparam(0)); + &mov ($Htbl,&wparam(1)); + + &call (&label("pic")); +&set_label("pic"); + &blindpop ($const); + &lea ($const,&DWP(&label("bswap")."-".&label("pic"),$const)); + + &movdqu ($Xi,&QWP(0,$Xip)); + &movdqa ($T3,&QWP(0,$const)); + &movups ($Hkey,&QWP(0,$Htbl)); + &pshufb ($Xi,$T3); + &movups ($T2,&QWP(32,$Htbl)); + + &clmul64x64_T2 ($Xhi,$Xi,$Hkey,$T2); + &reduction_alg9 ($Xhi,$Xi); + + &pshufb ($Xi,$T3); + &movdqu (&QWP(0,$Xip),$Xi); + + &ret (); +&function_end_B("GFp_gcm_gmult_clmul"); + +&function_begin("GFp_gcm_ghash_clmul"); + &mov ($Xip,&wparam(0)); + &mov ($Htbl,&wparam(1)); + &mov ($inp,&wparam(2)); + &mov ($len,&wparam(3)); + + &call (&label("pic")); +&set_label("pic"); + &blindpop ($const); + &lea ($const,&DWP(&label("bswap")."-".&label("pic"),$const)); + + &movdqu ($Xi,&QWP(0,$Xip)); + &movdqa ($T3,&QWP(0,$const)); + &movdqu ($Hkey,&QWP(0,$Htbl)); + &pshufb ($Xi,$T3); + + &sub ($len,0x10); + &jz (&label("odd_tail")); + + ####### + # Xi+2 =[H*(Ii+1 + Xi+1)] mod P = + # [(H*Ii+1) + (H*Xi+1)] mod P = + # [(H*Ii+1) + H^2*(Ii+Xi)] mod P + # + &movdqu ($T1,&QWP(0,$inp)); # Ii + &movdqu ($Xn,&QWP(16,$inp)); # Ii+1 + &pshufb ($T1,$T3); + &pshufb ($Xn,$T3); + &movdqu ($T3,&QWP(32,$Htbl)); + &pxor ($Xi,$T1); # Ii+Xi + + &pshufd ($T1,$Xn,0b01001110); # H*Ii+1 + &movdqa ($Xhn,$Xn); + &pxor ($T1,$Xn); # + &lea ($inp,&DWP(32,$inp)); # i+=2 + + &pclmulqdq ($Xn,$Hkey,0x00); ####### + &pclmulqdq ($Xhn,$Hkey,0x11); ####### + &pclmulqdq ($T1,$T3,0x00); ####### + &movups ($Hkey,&QWP(16,$Htbl)); # load H^2 + &nop (); + + &sub ($len,0x20); + &jbe (&label("even_tail")); + &jmp (&label("mod_loop")); + +&set_label("mod_loop",32); + &pshufd ($T2,$Xi,0b01001110); # H^2*(Ii+Xi) + &movdqa ($Xhi,$Xi); + &pxor ($T2,$Xi); # + &nop (); + + &pclmulqdq ($Xi,$Hkey,0x00); ####### + &pclmulqdq ($Xhi,$Hkey,0x11); ####### + &pclmulqdq ($T2,$T3,0x10); ####### + &movups ($Hkey,&QWP(0,$Htbl)); # load H + + &xorps ($Xi,$Xn); # (H*Ii+1) + H^2*(Ii+Xi) + &movdqa ($T3,&QWP(0,$const)); + &xorps ($Xhi,$Xhn); + &movdqu ($Xhn,&QWP(0,$inp)); # Ii + &pxor ($T1,$Xi); # aggregated Karatsuba post-processing + &movdqu ($Xn,&QWP(16,$inp)); # Ii+1 + &pxor ($T1,$Xhi); # + + &pshufb ($Xhn,$T3); + &pxor ($T2,$T1); # + + &movdqa ($T1,$T2); # + &psrldq ($T2,8); + &pslldq ($T1,8); # + &pxor ($Xhi,$T2); + &pxor ($Xi,$T1); # + &pshufb ($Xn,$T3); + &pxor ($Xhi,$Xhn); # "Ii+Xi", consume early + + &movdqa ($Xhn,$Xn); #&clmul64x64_TX ($Xhn,$Xn,$Hkey); H*Ii+1 + &movdqa ($T2,$Xi); #&reduction_alg9($Xhi,$Xi); 1st phase + &movdqa ($T1,$Xi); + &psllq ($Xi,5); + &pxor ($T1,$Xi); # + &psllq ($Xi,1); + &pxor ($Xi,$T1); # + &pclmulqdq ($Xn,$Hkey,0x00); ####### + &movups ($T3,&QWP(32,$Htbl)); + &psllq ($Xi,57); # + &movdqa ($T1,$Xi); # + &pslldq ($Xi,8); + &psrldq ($T1,8); # + &pxor ($Xi,$T2); + &pxor ($Xhi,$T1); # + &pshufd ($T1,$Xhn,0b01001110); + &movdqa ($T2,$Xi); # 2nd phase + &psrlq ($Xi,1); + &pxor ($T1,$Xhn); + &pxor ($Xhi,$T2); # + &pclmulqdq ($Xhn,$Hkey,0x11); ####### + &movups ($Hkey,&QWP(16,$Htbl)); # load H^2 + &pxor ($T2,$Xi); + &psrlq ($Xi,5); + &pxor ($Xi,$T2); # + &psrlq ($Xi,1); # + &pxor ($Xi,$Xhi) # + &pclmulqdq ($T1,$T3,0x00); ####### + + &lea ($inp,&DWP(32,$inp)); + &sub ($len,0x20); + &ja (&label("mod_loop")); + +&set_label("even_tail"); + &pshufd ($T2,$Xi,0b01001110); # H^2*(Ii+Xi) + &movdqa ($Xhi,$Xi); + &pxor ($T2,$Xi); # + + &pclmulqdq ($Xi,$Hkey,0x00); ####### + &pclmulqdq ($Xhi,$Hkey,0x11); ####### + &pclmulqdq ($T2,$T3,0x10); ####### + &movdqa ($T3,&QWP(0,$const)); + + &xorps ($Xi,$Xn); # (H*Ii+1) + H^2*(Ii+Xi) + &xorps ($Xhi,$Xhn); + &pxor ($T1,$Xi); # aggregated Karatsuba post-processing + &pxor ($T1,$Xhi); # + + &pxor ($T2,$T1); # + + &movdqa ($T1,$T2); # + &psrldq ($T2,8); + &pslldq ($T1,8); # + &pxor ($Xhi,$T2); + &pxor ($Xi,$T1); # + + &reduction_alg9 ($Xhi,$Xi); + + &test ($len,$len); + &jnz (&label("done")); + + &movups ($Hkey,&QWP(0,$Htbl)); # load H +&set_label("odd_tail"); + &movdqu ($T1,&QWP(0,$inp)); # Ii + &pshufb ($T1,$T3); + &pxor ($Xi,$T1); # Ii+Xi + + &clmul64x64_T2 ($Xhi,$Xi,$Hkey); # H*(Ii+Xi) + &reduction_alg9 ($Xhi,$Xi); + +&set_label("done"); + &pshufb ($Xi,$T3); + &movdqu (&QWP(0,$Xip),$Xi); +&function_end("GFp_gcm_ghash_clmul"); + +} else { # Algorithm 5. Kept for reference purposes. + +sub reduction_alg5 { # 19/16 times faster than Intel version +my ($Xhi,$Xi)=@_; + + # <<1 + &movdqa ($T1,$Xi); # + &movdqa ($T2,$Xhi); + &pslld ($Xi,1); + &pslld ($Xhi,1); # + &psrld ($T1,31); + &psrld ($T2,31); # + &movdqa ($T3,$T1); + &pslldq ($T1,4); + &psrldq ($T3,12); # + &pslldq ($T2,4); + &por ($Xhi,$T3); # + &por ($Xi,$T1); + &por ($Xhi,$T2); # + + # 1st phase + &movdqa ($T1,$Xi); + &movdqa ($T2,$Xi); + &movdqa ($T3,$Xi); # + &pslld ($T1,31); + &pslld ($T2,30); + &pslld ($Xi,25); # + &pxor ($T1,$T2); + &pxor ($T1,$Xi); # + &movdqa ($T2,$T1); # + &pslldq ($T1,12); + &psrldq ($T2,4); # + &pxor ($T3,$T1); + + # 2nd phase + &pxor ($Xhi,$T3); # + &movdqa ($Xi,$T3); + &movdqa ($T1,$T3); + &psrld ($Xi,1); # + &psrld ($T1,2); + &psrld ($T3,7); # + &pxor ($Xi,$T1); + &pxor ($Xhi,$T2); + &pxor ($Xi,$T3); # + &pxor ($Xi,$Xhi); # +} + +&function_begin_B("GFp_gcm_init_clmul"); + &mov ($Htbl,&wparam(0)); + &mov ($Xip,&wparam(1)); + + &call (&label("pic")); +&set_label("pic"); + &blindpop ($const); + &lea ($const,&DWP(&label("bswap")."-".&label("pic"),$const)); + + &movdqu ($Hkey,&QWP(0,$Xip)); + &pshufd ($Hkey,$Hkey,0b01001110);# dword swap + + # calculate H^2 + &movdqa ($Xi,$Hkey); + &clmul64x64_T3 ($Xhi,$Xi,$Hkey); + &reduction_alg5 ($Xhi,$Xi); + + &movdqu (&QWP(0,$Htbl),$Hkey); # save H + &movdqu (&QWP(16,$Htbl),$Xi); # save H^2 + + &ret (); +&function_end_B("GFp_gcm_init_clmul"); + +&function_begin_B("GFp_gcm_gmult_clmul"); + &mov ($Xip,&wparam(0)); + &mov ($Htbl,&wparam(1)); + + &call (&label("pic")); +&set_label("pic"); + &blindpop ($const); + &lea ($const,&DWP(&label("bswap")."-".&label("pic"),$const)); + + &movdqu ($Xi,&QWP(0,$Xip)); + &movdqa ($Xn,&QWP(0,$const)); + &movdqu ($Hkey,&QWP(0,$Htbl)); + &pshufb ($Xi,$Xn); + + &clmul64x64_T3 ($Xhi,$Xi,$Hkey); + &reduction_alg5 ($Xhi,$Xi); + + &pshufb ($Xi,$Xn); + &movdqu (&QWP(0,$Xip),$Xi); + + &ret (); +&function_end_B("GFp_gcm_gmult_clmul"); + +&function_begin("GFp_gcm_ghash_clmul"); + &mov ($Xip,&wparam(0)); + &mov ($Htbl,&wparam(1)); + &mov ($inp,&wparam(2)); + &mov ($len,&wparam(3)); + + &call (&label("pic")); +&set_label("pic"); + &blindpop ($const); + &lea ($const,&DWP(&label("bswap")."-".&label("pic"),$const)); + + &movdqu ($Xi,&QWP(0,$Xip)); + &movdqa ($T3,&QWP(0,$const)); + &movdqu ($Hkey,&QWP(0,$Htbl)); + &pshufb ($Xi,$T3); + + &sub ($len,0x10); + &jz (&label("odd_tail")); + + ####### + # Xi+2 =[H*(Ii+1 + Xi+1)] mod P = + # [(H*Ii+1) + (H*Xi+1)] mod P = + # [(H*Ii+1) + H^2*(Ii+Xi)] mod P + # + &movdqu ($T1,&QWP(0,$inp)); # Ii + &movdqu ($Xn,&QWP(16,$inp)); # Ii+1 + &pshufb ($T1,$T3); + &pshufb ($Xn,$T3); + &pxor ($Xi,$T1); # Ii+Xi + + &clmul64x64_T3 ($Xhn,$Xn,$Hkey); # H*Ii+1 + &movdqu ($Hkey,&QWP(16,$Htbl)); # load H^2 + + &sub ($len,0x20); + &lea ($inp,&DWP(32,$inp)); # i+=2 + &jbe (&label("even_tail")); + +&set_label("mod_loop"); + &clmul64x64_T3 ($Xhi,$Xi,$Hkey); # H^2*(Ii+Xi) + &movdqu ($Hkey,&QWP(0,$Htbl)); # load H + + &pxor ($Xi,$Xn); # (H*Ii+1) + H^2*(Ii+Xi) + &pxor ($Xhi,$Xhn); + + &reduction_alg5 ($Xhi,$Xi); + + ####### + &movdqa ($T3,&QWP(0,$const)); + &movdqu ($T1,&QWP(0,$inp)); # Ii + &movdqu ($Xn,&QWP(16,$inp)); # Ii+1 + &pshufb ($T1,$T3); + &pshufb ($Xn,$T3); + &pxor ($Xi,$T1); # Ii+Xi + + &clmul64x64_T3 ($Xhn,$Xn,$Hkey); # H*Ii+1 + &movdqu ($Hkey,&QWP(16,$Htbl)); # load H^2 + + &sub ($len,0x20); + &lea ($inp,&DWP(32,$inp)); + &ja (&label("mod_loop")); + +&set_label("even_tail"); + &clmul64x64_T3 ($Xhi,$Xi,$Hkey); # H^2*(Ii+Xi) + + &pxor ($Xi,$Xn); # (H*Ii+1) + H^2*(Ii+Xi) + &pxor ($Xhi,$Xhn); + + &reduction_alg5 ($Xhi,$Xi); + + &movdqa ($T3,&QWP(0,$const)); + &test ($len,$len); + &jnz (&label("done")); + + &movdqu ($Hkey,&QWP(0,$Htbl)); # load H +&set_label("odd_tail"); + &movdqu ($T1,&QWP(0,$inp)); # Ii + &pshufb ($T1,$T3); + &pxor ($Xi,$T1); # Ii+Xi + + &clmul64x64_T3 ($Xhi,$Xi,$Hkey); # H*(Ii+Xi) + &reduction_alg5 ($Xhi,$Xi); + + &movdqa ($T3,&QWP(0,$const)); +&set_label("done"); + &pshufb ($Xi,$T3); + &movdqu (&QWP(0,$Xip),$Xi); +&function_end("GFp_gcm_ghash_clmul"); + +} + +&set_label("bswap",64); + &data_byte(15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0); + &data_byte(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2); # 0x1c2_polynomial +&set_label("rem_8bit",64); + &data_short(0x0000,0x01C2,0x0384,0x0246,0x0708,0x06CA,0x048C,0x054E); + &data_short(0x0E10,0x0FD2,0x0D94,0x0C56,0x0918,0x08DA,0x0A9C,0x0B5E); + &data_short(0x1C20,0x1DE2,0x1FA4,0x1E66,0x1B28,0x1AEA,0x18AC,0x196E); + &data_short(0x1230,0x13F2,0x11B4,0x1076,0x1538,0x14FA,0x16BC,0x177E); + &data_short(0x3840,0x3982,0x3BC4,0x3A06,0x3F48,0x3E8A,0x3CCC,0x3D0E); + &data_short(0x3650,0x3792,0x35D4,0x3416,0x3158,0x309A,0x32DC,0x331E); + &data_short(0x2460,0x25A2,0x27E4,0x2626,0x2368,0x22AA,0x20EC,0x212E); + &data_short(0x2A70,0x2BB2,0x29F4,0x2836,0x2D78,0x2CBA,0x2EFC,0x2F3E); + &data_short(0x7080,0x7142,0x7304,0x72C6,0x7788,0x764A,0x740C,0x75CE); + &data_short(0x7E90,0x7F52,0x7D14,0x7CD6,0x7998,0x785A,0x7A1C,0x7BDE); + &data_short(0x6CA0,0x6D62,0x6F24,0x6EE6,0x6BA8,0x6A6A,0x682C,0x69EE); + &data_short(0x62B0,0x6372,0x6134,0x60F6,0x65B8,0x647A,0x663C,0x67FE); + &data_short(0x48C0,0x4902,0x4B44,0x4A86,0x4FC8,0x4E0A,0x4C4C,0x4D8E); + &data_short(0x46D0,0x4712,0x4554,0x4496,0x41D8,0x401A,0x425C,0x439E); + &data_short(0x54E0,0x5522,0x5764,0x56A6,0x53E8,0x522A,0x506C,0x51AE); + &data_short(0x5AF0,0x5B32,0x5974,0x58B6,0x5DF8,0x5C3A,0x5E7C,0x5FBE); + &data_short(0xE100,0xE0C2,0xE284,0xE346,0xE608,0xE7CA,0xE58C,0xE44E); + &data_short(0xEF10,0xEED2,0xEC94,0xED56,0xE818,0xE9DA,0xEB9C,0xEA5E); + &data_short(0xFD20,0xFCE2,0xFEA4,0xFF66,0xFA28,0xFBEA,0xF9AC,0xF86E); + &data_short(0xF330,0xF2F2,0xF0B4,0xF176,0xF438,0xF5FA,0xF7BC,0xF67E); + &data_short(0xD940,0xD882,0xDAC4,0xDB06,0xDE48,0xDF8A,0xDDCC,0xDC0E); + &data_short(0xD750,0xD692,0xD4D4,0xD516,0xD058,0xD19A,0xD3DC,0xD21E); + &data_short(0xC560,0xC4A2,0xC6E4,0xC726,0xC268,0xC3AA,0xC1EC,0xC02E); + &data_short(0xCB70,0xCAB2,0xC8F4,0xC936,0xCC78,0xCDBA,0xCFFC,0xCE3E); + &data_short(0x9180,0x9042,0x9204,0x93C6,0x9688,0x974A,0x950C,0x94CE); + &data_short(0x9F90,0x9E52,0x9C14,0x9DD6,0x9898,0x995A,0x9B1C,0x9ADE); + &data_short(0x8DA0,0x8C62,0x8E24,0x8FE6,0x8AA8,0x8B6A,0x892C,0x88EE); + &data_short(0x83B0,0x8272,0x8034,0x81F6,0x84B8,0x857A,0x873C,0x86FE); + &data_short(0xA9C0,0xA802,0xAA44,0xAB86,0xAEC8,0xAF0A,0xAD4C,0xAC8E); + &data_short(0xA7D0,0xA612,0xA454,0xA596,0xA0D8,0xA11A,0xA35C,0xA29E); + &data_short(0xB5E0,0xB422,0xB664,0xB7A6,0xB2E8,0xB32A,0xB16C,0xB0AE); + &data_short(0xBBF0,0xBA32,0xB874,0xB9B6,0xBCF8,0xBD3A,0xBF7C,0xBEBE); +}} # $sse2 + +&asciz("GHASH for x86, CRYPTOGAMS by "); +&asm_finish(); + +close STDOUT or die "error closing STDOUT"; + +# A question was risen about choice of vanilla MMX. Or rather why wasn't +# SSE2 chosen instead? In addition to the fact that MMX runs on legacy +# CPUs such as PIII, "4-bit" MMX version was observed to provide better +# performance than *corresponding* SSE2 one even on contemporary CPUs. +# SSE2 results were provided by Peter-Michael Hager. He maintains SSE2 +# implementation featuring full range of lookup-table sizes, but with +# per-invocation lookup table setup. Latter means that table size is +# chosen depending on how much data is to be hashed in every given call, +# more data - larger table. Best reported result for Core2 is ~4 cycles +# per processed byte out of 64KB block. This number accounts even for +# 64KB table setup overhead. As discussed in gcm128.c we choose to be +# more conservative in respect to lookup table sizes, but how do the +# results compare? Minimalistic "256B" MMX version delivers ~11 cycles +# on same platform. As also discussed in gcm128.c, next in line "8-bit +# Shoup's" or "4KB" method should deliver twice the performance of +# "256B" one, in other words not worse than ~6 cycles per byte. It +# should be also be noted that in SSE2 case improvement can be "super- +# linear," i.e. more than twice, mostly because >>8 maps to single +# instruction on SSE2 register. This is unlike "4-bit" case when >>4 +# maps to same amount of instructions in both MMX and SSE2 cases. +# Bottom line is that switch to SSE2 is considered to be justifiable +# only in case we choose to implement "8-bit" method... diff --git a/vendor/ring/crypto/fipsmodule/modes/asm/ghash-x86_64.pl b/vendor/ring/crypto/fipsmodule/modes/asm/ghash-x86_64.pl new file mode 100644 index 00000000..3a89b8e4 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/modes/asm/ghash-x86_64.pl @@ -0,0 +1,1328 @@ +#! /usr/bin/env perl +# Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# March, June 2010 +# +# The module implements "4-bit" GCM GHASH function and underlying +# single multiplication operation in GF(2^128). "4-bit" means that +# it uses 256 bytes per-key table [+128 bytes shared table]. GHASH +# function features so called "528B" variant utilizing additional +# 256+16 bytes of per-key storage [+512 bytes shared table]. +# Performance results are for this streamed GHASH subroutine and are +# expressed in cycles per processed byte, less is better: +# +# gcc 3.4.x(*) assembler +# +# P4 28.6 14.0 +100% +# Opteron 19.3 7.7 +150% +# Core2 17.8 8.1(**) +120% +# Atom 31.6 16.8 +88% +# VIA Nano 21.8 10.1 +115% +# +# (*) comparison is not completely fair, because C results are +# for vanilla "256B" implementation, while assembler results +# are for "528B";-) +# (**) it's mystery [to me] why Core2 result is not same as for +# Opteron; + +# May 2010 +# +# Add PCLMULQDQ version performing at 2.02 cycles per processed byte. +# See ghash-x86.pl for background information and details about coding +# techniques. +# +# Special thanks to David Woodhouse for providing access to a +# Westmere-based system on behalf of Intel Open Source Technology Centre. + +# December 2012 +# +# Overhaul: aggregate Karatsuba post-processing, improve ILP in +# reduction_alg9, increase reduction aggregate factor to 4x. As for +# the latter. ghash-x86.pl discusses that it makes lesser sense to +# increase aggregate factor. Then why increase here? Critical path +# consists of 3 independent pclmulqdq instructions, Karatsuba post- +# processing and reduction. "On top" of this we lay down aggregated +# multiplication operations, triplets of independent pclmulqdq's. As +# issue rate for pclmulqdq is limited, it makes lesser sense to +# aggregate more multiplications than it takes to perform remaining +# non-multiplication operations. 2x is near-optimal coefficient for +# contemporary Intel CPUs (therefore modest improvement coefficient), +# but not for Bulldozer. Latter is because logical SIMD operations +# are twice as slow in comparison to Intel, so that critical path is +# longer. A CPU with higher pclmulqdq issue rate would also benefit +# from higher aggregate factor... +# +# Westmere 1.78(+13%) +# Sandy Bridge 1.80(+8%) +# Ivy Bridge 1.80(+7%) +# Haswell 0.55(+93%) (if system doesn't support AVX) +# Broadwell 0.45(+110%)(if system doesn't support AVX) +# Skylake 0.44(+110%)(if system doesn't support AVX) +# Bulldozer 1.49(+27%) +# Silvermont 2.88(+13%) +# Knights L 2.12(-) (if system doesn't support AVX) +# Goldmont 1.08(+24%) + +# March 2013 +# +# ... 8x aggregate factor AVX code path is using reduction algorithm +# suggested by Shay Gueron[1]. Even though contemporary AVX-capable +# CPUs such as Sandy and Ivy Bridge can execute it, the code performs +# sub-optimally in comparison to above mentioned version. But thanks +# to Ilya Albrekht and Max Locktyukhin of Intel Corp. we knew that +# it performs in 0.41 cycles per byte on Haswell processor, in +# 0.29 on Broadwell, and in 0.36 on Skylake. +# +# Knights Landing achieves 1.09 cpb. +# +# [1] http://rt.openssl.org/Ticket/Display.html?id=2900&user=guest&pass=guest + +# This file was patched in BoringSSL to remove the variable-time 4-bit +# implementation. + +$flavour = shift; +$output = shift; +if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } + +$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/); + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../../perlasm/x86_64-xlate.pl" and -f $xlate) or +die "can't locate x86_64-xlate.pl"; + +# See the notes about |$avx| in aesni-gcm-x86_64.pl; otherwise tags will be +# computed incorrectly. +# +# In upstream, this is controlled by shelling out to the compiler to check +# versions, but BoringSSL is intended to be used with pre-generated perlasm +# output, so this isn't useful anyway. +$avx = 1; + +open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""; +*STDOUT=*OUT; + +$do4xaggr=1; + + +$code=<<___; +.text +.extern GFp_ia32cap_P +___ + + +###################################################################### +# PCLMULQDQ version. + +@_4args=$win64? ("%rcx","%rdx","%r8", "%r9") : # Win64 order + ("%rdi","%rsi","%rdx","%rcx"); # Unix order + +($Xi,$Xhi)=("%xmm0","%xmm1"); $Hkey="%xmm2"; +($T1,$T2,$T3)=("%xmm3","%xmm4","%xmm5"); + +sub clmul64x64_T2 { # minimal register pressure +my ($Xhi,$Xi,$Hkey,$HK)=@_; + +if (!defined($HK)) { $HK = $T2; +$code.=<<___; + movdqa $Xi,$Xhi # + pshufd \$0b01001110,$Xi,$T1 + pshufd \$0b01001110,$Hkey,$T2 + pxor $Xi,$T1 # + pxor $Hkey,$T2 +___ +} else { +$code.=<<___; + movdqa $Xi,$Xhi # + pshufd \$0b01001110,$Xi,$T1 + pxor $Xi,$T1 # +___ +} +$code.=<<___; + pclmulqdq \$0x00,$Hkey,$Xi ####### + pclmulqdq \$0x11,$Hkey,$Xhi ####### + pclmulqdq \$0x00,$HK,$T1 ####### + pxor $Xi,$T1 # + pxor $Xhi,$T1 # + + movdqa $T1,$T2 # + psrldq \$8,$T1 + pslldq \$8,$T2 # + pxor $T1,$Xhi + pxor $T2,$Xi # +___ +} + +sub reduction_alg9 { # 17/11 times faster than Intel version +my ($Xhi,$Xi) = @_; + +$code.=<<___; + # 1st phase + movdqa $Xi,$T2 # + movdqa $Xi,$T1 + psllq \$5,$Xi + pxor $Xi,$T1 # + psllq \$1,$Xi + pxor $T1,$Xi # + psllq \$57,$Xi # + movdqa $Xi,$T1 # + pslldq \$8,$Xi + psrldq \$8,$T1 # + pxor $T2,$Xi + pxor $T1,$Xhi # + + # 2nd phase + movdqa $Xi,$T2 + psrlq \$1,$Xi + pxor $T2,$Xhi # + pxor $Xi,$T2 + psrlq \$5,$Xi + pxor $T2,$Xi # + psrlq \$1,$Xi # + pxor $Xhi,$Xi # +___ +} + +{ my ($Htbl,$Xip)=@_4args; + my $HK="%xmm6"; + +$code.=<<___; +.globl GFp_gcm_init_clmul +.type GFp_gcm_init_clmul,\@abi-omnipotent +.align 16 +GFp_gcm_init_clmul: +.cfi_startproc +.L_init_clmul: +___ +$code.=<<___ if ($win64); +.LSEH_begin_GFp_gcm_init_clmul: + # I can't trust assembler to use specific encoding:-( + .byte 0x48,0x83,0xec,0x18 #sub $0x18,%rsp + .byte 0x0f,0x29,0x34,0x24 #movaps %xmm6,(%rsp) +___ +$code.=<<___; + movdqu ($Xip),$Hkey + pshufd \$0b01001110,$Hkey,$Hkey # dword swap + + # <<1 twist + pshufd \$0b11111111,$Hkey,$T2 # broadcast uppermost dword + movdqa $Hkey,$T1 + psllq \$1,$Hkey + pxor $T3,$T3 # + psrlq \$63,$T1 + pcmpgtd $T2,$T3 # broadcast carry bit + pslldq \$8,$T1 + por $T1,$Hkey # H<<=1 + + # magic reduction + pand .L0x1c2_polynomial(%rip),$T3 + pxor $T3,$Hkey # if(carry) H^=0x1c2_polynomial + + # calculate H^2 + pshufd \$0b01001110,$Hkey,$HK + movdqa $Hkey,$Xi + pxor $Hkey,$HK +___ + &clmul64x64_T2 ($Xhi,$Xi,$Hkey,$HK); + &reduction_alg9 ($Xhi,$Xi); +$code.=<<___; + pshufd \$0b01001110,$Hkey,$T1 + pshufd \$0b01001110,$Xi,$T2 + pxor $Hkey,$T1 # Karatsuba pre-processing + movdqu $Hkey,0x00($Htbl) # save H + pxor $Xi,$T2 # Karatsuba pre-processing + movdqu $Xi,0x10($Htbl) # save H^2 + palignr \$8,$T1,$T2 # low part is H.lo^H.hi... + movdqu $T2,0x20($Htbl) # save Karatsuba "salt" +___ +if ($do4xaggr) { + &clmul64x64_T2 ($Xhi,$Xi,$Hkey,$HK); # H^3 + &reduction_alg9 ($Xhi,$Xi); +$code.=<<___; + movdqa $Xi,$T3 +___ + &clmul64x64_T2 ($Xhi,$Xi,$Hkey,$HK); # H^4 + &reduction_alg9 ($Xhi,$Xi); +$code.=<<___; + pshufd \$0b01001110,$T3,$T1 + pshufd \$0b01001110,$Xi,$T2 + pxor $T3,$T1 # Karatsuba pre-processing + movdqu $T3,0x30($Htbl) # save H^3 + pxor $Xi,$T2 # Karatsuba pre-processing + movdqu $Xi,0x40($Htbl) # save H^4 + palignr \$8,$T1,$T2 # low part is H^3.lo^H^3.hi... + movdqu $T2,0x50($Htbl) # save Karatsuba "salt" +___ +} +$code.=<<___ if ($win64); + movaps (%rsp),%xmm6 + lea 0x18(%rsp),%rsp +.LSEH_end_GFp_gcm_init_clmul: +___ +$code.=<<___; + ret +.cfi_endproc +.size GFp_gcm_init_clmul,.-GFp_gcm_init_clmul +___ +} + +{ my ($Xip,$Htbl)=@_4args; + +$code.=<<___; +.globl GFp_gcm_gmult_clmul +.type GFp_gcm_gmult_clmul,\@abi-omnipotent +.align 16 +GFp_gcm_gmult_clmul: +.cfi_startproc +.L_gmult_clmul: + movdqu ($Xip),$Xi + movdqa .Lbswap_mask(%rip),$T3 + movdqu ($Htbl),$Hkey + movdqu 0x20($Htbl),$T2 + pshufb $T3,$Xi +___ + &clmul64x64_T2 ($Xhi,$Xi,$Hkey,$T2); +$code.=<<___ if (0 || (&reduction_alg9($Xhi,$Xi)&&0)); + # experimental alternative. special thing about is that there + # no dependency between the two multiplications... + mov \$`0xE1<<1`,%eax + mov \$0xA040608020C0E000,%r10 # ((7..0)·0xE0)&0xff + mov \$0x07,%r11d + movq %rax,$T1 + movq %r10,$T2 + movq %r11,$T3 # borrow $T3 + pand $Xi,$T3 + pshufb $T3,$T2 # ($Xi&7)·0xE0 + movq %rax,$T3 + pclmulqdq \$0x00,$Xi,$T1 # ·(0xE1<<1) + pxor $Xi,$T2 + pslldq \$15,$T2 + paddd $T2,$T2 # <<(64+56+1) + pxor $T2,$Xi + pclmulqdq \$0x01,$T3,$Xi + movdqa .Lbswap_mask(%rip),$T3 # reload $T3 + psrldq \$1,$T1 + pxor $T1,$Xhi + pslldq \$7,$Xi + pxor $Xhi,$Xi +___ +$code.=<<___; + pshufb $T3,$Xi + movdqu $Xi,($Xip) + ret +.cfi_endproc +.size GFp_gcm_gmult_clmul,.-GFp_gcm_gmult_clmul +___ +} + +{ my ($Xip,$Htbl,$inp,$len)=@_4args; + my ($Xln,$Xmn,$Xhn,$Hkey2,$HK) = map("%xmm$_",(3..7)); + my ($T1,$T2,$T3)=map("%xmm$_",(8..10)); + +$code.=<<___; +.globl GFp_gcm_ghash_clmul +.type GFp_gcm_ghash_clmul,\@abi-omnipotent +.align 32 +GFp_gcm_ghash_clmul: +.cfi_startproc +.L_ghash_clmul: +___ +$code.=<<___ if ($win64); + lea -0x88(%rsp),%rax +.LSEH_begin_GFp_gcm_ghash_clmul: + # I can't trust assembler to use specific encoding:-( + .byte 0x48,0x8d,0x60,0xe0 #lea -0x20(%rax),%rsp + .byte 0x0f,0x29,0x70,0xe0 #movaps %xmm6,-0x20(%rax) + .byte 0x0f,0x29,0x78,0xf0 #movaps %xmm7,-0x10(%rax) + .byte 0x44,0x0f,0x29,0x00 #movaps %xmm8,0(%rax) + .byte 0x44,0x0f,0x29,0x48,0x10 #movaps %xmm9,0x10(%rax) + .byte 0x44,0x0f,0x29,0x50,0x20 #movaps %xmm10,0x20(%rax) + .byte 0x44,0x0f,0x29,0x58,0x30 #movaps %xmm11,0x30(%rax) + .byte 0x44,0x0f,0x29,0x60,0x40 #movaps %xmm12,0x40(%rax) + .byte 0x44,0x0f,0x29,0x68,0x50 #movaps %xmm13,0x50(%rax) + .byte 0x44,0x0f,0x29,0x70,0x60 #movaps %xmm14,0x60(%rax) + .byte 0x44,0x0f,0x29,0x78,0x70 #movaps %xmm15,0x70(%rax) +___ +$code.=<<___; + movdqa .Lbswap_mask(%rip),$T3 + + movdqu ($Xip),$Xi + movdqu ($Htbl),$Hkey + movdqu 0x20($Htbl),$HK + pshufb $T3,$Xi + + sub \$0x10,$len + jz .Lodd_tail + + movdqu 0x10($Htbl),$Hkey2 +___ +if ($do4xaggr) { +my ($Xl,$Xm,$Xh,$Hkey3,$Hkey4)=map("%xmm$_",(11..15)); + +$code.=<<___; + leaq GFp_ia32cap_P(%rip),%rax + mov 4(%rax),%eax + cmp \$0x30,$len + jb .Lskip4x + + and \$`1<<26|1<<22`,%eax # isolate MOVBE+XSAVE + cmp \$`1<<22`,%eax # check for MOVBE without XSAVE + je .Lskip4x + + sub \$0x30,$len + mov \$0xA040608020C0E000,%rax # ((7..0)·0xE0)&0xff + movdqu 0x30($Htbl),$Hkey3 + movdqu 0x40($Htbl),$Hkey4 + + ####### + # Xi+4 =[(H*Ii+3) + (H^2*Ii+2) + (H^3*Ii+1) + H^4*(Ii+Xi)] mod P + # + movdqu 0x30($inp),$Xln + movdqu 0x20($inp),$Xl + pshufb $T3,$Xln + pshufb $T3,$Xl + movdqa $Xln,$Xhn + pshufd \$0b01001110,$Xln,$Xmn + pxor $Xln,$Xmn + pclmulqdq \$0x00,$Hkey,$Xln + pclmulqdq \$0x11,$Hkey,$Xhn + pclmulqdq \$0x00,$HK,$Xmn + + movdqa $Xl,$Xh + pshufd \$0b01001110,$Xl,$Xm + pxor $Xl,$Xm + pclmulqdq \$0x00,$Hkey2,$Xl + pclmulqdq \$0x11,$Hkey2,$Xh + pclmulqdq \$0x10,$HK,$Xm + xorps $Xl,$Xln + xorps $Xh,$Xhn + movups 0x50($Htbl),$HK + xorps $Xm,$Xmn + + movdqu 0x10($inp),$Xl + movdqu 0($inp),$T1 + pshufb $T3,$Xl + pshufb $T3,$T1 + movdqa $Xl,$Xh + pshufd \$0b01001110,$Xl,$Xm + pxor $T1,$Xi + pxor $Xl,$Xm + pclmulqdq \$0x00,$Hkey3,$Xl + movdqa $Xi,$Xhi + pshufd \$0b01001110,$Xi,$T1 + pxor $Xi,$T1 + pclmulqdq \$0x11,$Hkey3,$Xh + pclmulqdq \$0x00,$HK,$Xm + xorps $Xl,$Xln + xorps $Xh,$Xhn + + lea 0x40($inp),$inp + sub \$0x40,$len + jc .Ltail4x + + jmp .Lmod4_loop +.align 32 +.Lmod4_loop: + pclmulqdq \$0x00,$Hkey4,$Xi + xorps $Xm,$Xmn + movdqu 0x30($inp),$Xl + pshufb $T3,$Xl + pclmulqdq \$0x11,$Hkey4,$Xhi + xorps $Xln,$Xi + movdqu 0x20($inp),$Xln + movdqa $Xl,$Xh + pclmulqdq \$0x10,$HK,$T1 + pshufd \$0b01001110,$Xl,$Xm + xorps $Xhn,$Xhi + pxor $Xl,$Xm + pshufb $T3,$Xln + movups 0x20($Htbl),$HK + xorps $Xmn,$T1 + pclmulqdq \$0x00,$Hkey,$Xl + pshufd \$0b01001110,$Xln,$Xmn + + pxor $Xi,$T1 # aggregated Karatsuba post-processing + movdqa $Xln,$Xhn + pxor $Xhi,$T1 # + pxor $Xln,$Xmn + movdqa $T1,$T2 # + pclmulqdq \$0x11,$Hkey,$Xh + pslldq \$8,$T1 + psrldq \$8,$T2 # + pxor $T1,$Xi + movdqa .L7_mask(%rip),$T1 + pxor $T2,$Xhi # + movq %rax,$T2 + + pand $Xi,$T1 # 1st phase + pshufb $T1,$T2 # + pxor $Xi,$T2 # + pclmulqdq \$0x00,$HK,$Xm + psllq \$57,$T2 # + movdqa $T2,$T1 # + pslldq \$8,$T2 + pclmulqdq \$0x00,$Hkey2,$Xln + psrldq \$8,$T1 # + pxor $T2,$Xi + pxor $T1,$Xhi # + movdqu 0($inp),$T1 + + movdqa $Xi,$T2 # 2nd phase + psrlq \$1,$Xi + pclmulqdq \$0x11,$Hkey2,$Xhn + xorps $Xl,$Xln + movdqu 0x10($inp),$Xl + pshufb $T3,$Xl + pclmulqdq \$0x10,$HK,$Xmn + xorps $Xh,$Xhn + movups 0x50($Htbl),$HK + pshufb $T3,$T1 + pxor $T2,$Xhi # + pxor $Xi,$T2 + psrlq \$5,$Xi + + movdqa $Xl,$Xh + pxor $Xm,$Xmn + pshufd \$0b01001110,$Xl,$Xm + pxor $T2,$Xi # + pxor $T1,$Xhi + pxor $Xl,$Xm + pclmulqdq \$0x00,$Hkey3,$Xl + psrlq \$1,$Xi # + pxor $Xhi,$Xi # + movdqa $Xi,$Xhi + pclmulqdq \$0x11,$Hkey3,$Xh + xorps $Xl,$Xln + pshufd \$0b01001110,$Xi,$T1 + pxor $Xi,$T1 + + pclmulqdq \$0x00,$HK,$Xm + xorps $Xh,$Xhn + + lea 0x40($inp),$inp + sub \$0x40,$len + jnc .Lmod4_loop + +.Ltail4x: + pclmulqdq \$0x00,$Hkey4,$Xi + pclmulqdq \$0x11,$Hkey4,$Xhi + pclmulqdq \$0x10,$HK,$T1 + xorps $Xm,$Xmn + xorps $Xln,$Xi + xorps $Xhn,$Xhi + pxor $Xi,$Xhi # aggregated Karatsuba post-processing + pxor $Xmn,$T1 + + pxor $Xhi,$T1 # + pxor $Xi,$Xhi + + movdqa $T1,$T2 # + psrldq \$8,$T1 + pslldq \$8,$T2 # + pxor $T1,$Xhi + pxor $T2,$Xi # +___ + &reduction_alg9($Xhi,$Xi); +$code.=<<___; + add \$0x40,$len + jz .Ldone + movdqu 0x20($Htbl),$HK + sub \$0x10,$len + jz .Lodd_tail +.Lskip4x: +___ +} +$code.=<<___; + ####### + # Xi+2 =[H*(Ii+1 + Xi+1)] mod P = + # [(H*Ii+1) + (H*Xi+1)] mod P = + # [(H*Ii+1) + H^2*(Ii+Xi)] mod P + # + movdqu ($inp),$T1 # Ii + movdqu 16($inp),$Xln # Ii+1 + pshufb $T3,$T1 + pshufb $T3,$Xln + pxor $T1,$Xi # Ii+Xi + + movdqa $Xln,$Xhn + pshufd \$0b01001110,$Xln,$Xmn + pxor $Xln,$Xmn + pclmulqdq \$0x00,$Hkey,$Xln + pclmulqdq \$0x11,$Hkey,$Xhn + pclmulqdq \$0x00,$HK,$Xmn + + lea 32($inp),$inp # i+=2 + nop + sub \$0x20,$len + jbe .Leven_tail + nop + jmp .Lmod_loop + +.align 32 +.Lmod_loop: + movdqa $Xi,$Xhi + movdqa $Xmn,$T1 + pshufd \$0b01001110,$Xi,$Xmn # + pxor $Xi,$Xmn # + + pclmulqdq \$0x00,$Hkey2,$Xi + pclmulqdq \$0x11,$Hkey2,$Xhi + pclmulqdq \$0x10,$HK,$Xmn + + pxor $Xln,$Xi # (H*Ii+1) + H^2*(Ii+Xi) + pxor $Xhn,$Xhi + movdqu ($inp),$T2 # Ii + pxor $Xi,$T1 # aggregated Karatsuba post-processing + pshufb $T3,$T2 + movdqu 16($inp),$Xln # Ii+1 + + pxor $Xhi,$T1 + pxor $T2,$Xhi # "Ii+Xi", consume early + pxor $T1,$Xmn + pshufb $T3,$Xln + movdqa $Xmn,$T1 # + psrldq \$8,$T1 + pslldq \$8,$Xmn # + pxor $T1,$Xhi + pxor $Xmn,$Xi # + + movdqa $Xln,$Xhn # + + movdqa $Xi,$T2 # 1st phase + movdqa $Xi,$T1 + psllq \$5,$Xi + pxor $Xi,$T1 # + pclmulqdq \$0x00,$Hkey,$Xln ####### + psllq \$1,$Xi + pxor $T1,$Xi # + psllq \$57,$Xi # + movdqa $Xi,$T1 # + pslldq \$8,$Xi + psrldq \$8,$T1 # + pxor $T2,$Xi + pshufd \$0b01001110,$Xhn,$Xmn + pxor $T1,$Xhi # + pxor $Xhn,$Xmn # + + movdqa $Xi,$T2 # 2nd phase + psrlq \$1,$Xi + pclmulqdq \$0x11,$Hkey,$Xhn ####### + pxor $T2,$Xhi # + pxor $Xi,$T2 + psrlq \$5,$Xi + pxor $T2,$Xi # + lea 32($inp),$inp + psrlq \$1,$Xi # + pclmulqdq \$0x00,$HK,$Xmn ####### + pxor $Xhi,$Xi # + + sub \$0x20,$len + ja .Lmod_loop + +.Leven_tail: + movdqa $Xi,$Xhi + movdqa $Xmn,$T1 + pshufd \$0b01001110,$Xi,$Xmn # + pxor $Xi,$Xmn # + + pclmulqdq \$0x00,$Hkey2,$Xi + pclmulqdq \$0x11,$Hkey2,$Xhi + pclmulqdq \$0x10,$HK,$Xmn + + pxor $Xln,$Xi # (H*Ii+1) + H^2*(Ii+Xi) + pxor $Xhn,$Xhi + pxor $Xi,$T1 + pxor $Xhi,$T1 + pxor $T1,$Xmn + movdqa $Xmn,$T1 # + psrldq \$8,$T1 + pslldq \$8,$Xmn # + pxor $T1,$Xhi + pxor $Xmn,$Xi # +___ + &reduction_alg9 ($Xhi,$Xi); +$code.=<<___; + test $len,$len + jnz .Ldone + +.Lodd_tail: + movdqu ($inp),$T1 # Ii + pshufb $T3,$T1 + pxor $T1,$Xi # Ii+Xi +___ + &clmul64x64_T2 ($Xhi,$Xi,$Hkey,$HK); # H*(Ii+Xi) + &reduction_alg9 ($Xhi,$Xi); +$code.=<<___; +.Ldone: + pshufb $T3,$Xi + movdqu $Xi,($Xip) +___ +$code.=<<___ if ($win64); + movaps (%rsp),%xmm6 + movaps 0x10(%rsp),%xmm7 + movaps 0x20(%rsp),%xmm8 + movaps 0x30(%rsp),%xmm9 + movaps 0x40(%rsp),%xmm10 + movaps 0x50(%rsp),%xmm11 + movaps 0x60(%rsp),%xmm12 + movaps 0x70(%rsp),%xmm13 + movaps 0x80(%rsp),%xmm14 + movaps 0x90(%rsp),%xmm15 + lea 0xa8(%rsp),%rsp +.LSEH_end_GFp_gcm_ghash_clmul: +___ +$code.=<<___; + ret +.cfi_endproc +.size GFp_gcm_ghash_clmul,.-GFp_gcm_ghash_clmul +___ +} + +$code.=<<___; +.globl GFp_gcm_init_avx +.type GFp_gcm_init_avx,\@abi-omnipotent +.align 32 +GFp_gcm_init_avx: +.cfi_startproc +___ +if ($avx) { +my ($Htbl,$Xip)=@_4args; +my $HK="%xmm6"; + +$code.=<<___ if ($win64); +.LSEH_begin_GFp_gcm_init_avx: + # I can't trust assembler to use specific encoding:-( + .byte 0x48,0x83,0xec,0x18 #sub $0x18,%rsp + .byte 0x0f,0x29,0x34,0x24 #movaps %xmm6,(%rsp) +___ +$code.=<<___; + vzeroupper + + vmovdqu ($Xip),$Hkey + vpshufd \$0b01001110,$Hkey,$Hkey # dword swap + + # <<1 twist + vpshufd \$0b11111111,$Hkey,$T2 # broadcast uppermost dword + vpsrlq \$63,$Hkey,$T1 + vpsllq \$1,$Hkey,$Hkey + vpxor $T3,$T3,$T3 # + vpcmpgtd $T2,$T3,$T3 # broadcast carry bit + vpslldq \$8,$T1,$T1 + vpor $T1,$Hkey,$Hkey # H<<=1 + + # magic reduction + vpand .L0x1c2_polynomial(%rip),$T3,$T3 + vpxor $T3,$Hkey,$Hkey # if(carry) H^=0x1c2_polynomial + + vpunpckhqdq $Hkey,$Hkey,$HK + vmovdqa $Hkey,$Xi + vpxor $Hkey,$HK,$HK + mov \$4,%r10 # up to H^8 + jmp .Linit_start_avx +___ + +sub clmul64x64_avx { +my ($Xhi,$Xi,$Hkey,$HK)=@_; + +if (!defined($HK)) { $HK = $T2; +$code.=<<___; + vpunpckhqdq $Xi,$Xi,$T1 + vpunpckhqdq $Hkey,$Hkey,$T2 + vpxor $Xi,$T1,$T1 # + vpxor $Hkey,$T2,$T2 +___ +} else { +$code.=<<___; + vpunpckhqdq $Xi,$Xi,$T1 + vpxor $Xi,$T1,$T1 # +___ +} +$code.=<<___; + vpclmulqdq \$0x11,$Hkey,$Xi,$Xhi ####### + vpclmulqdq \$0x00,$Hkey,$Xi,$Xi ####### + vpclmulqdq \$0x00,$HK,$T1,$T1 ####### + vpxor $Xi,$Xhi,$T2 # + vpxor $T2,$T1,$T1 # + + vpslldq \$8,$T1,$T2 # + vpsrldq \$8,$T1,$T1 + vpxor $T2,$Xi,$Xi # + vpxor $T1,$Xhi,$Xhi +___ +} + +sub reduction_avx { +my ($Xhi,$Xi) = @_; + +$code.=<<___; + vpsllq \$57,$Xi,$T1 # 1st phase + vpsllq \$62,$Xi,$T2 + vpxor $T1,$T2,$T2 # + vpsllq \$63,$Xi,$T1 + vpxor $T1,$T2,$T2 # + vpslldq \$8,$T2,$T1 # + vpsrldq \$8,$T2,$T2 + vpxor $T1,$Xi,$Xi # + vpxor $T2,$Xhi,$Xhi + + vpsrlq \$1,$Xi,$T2 # 2nd phase + vpxor $Xi,$Xhi,$Xhi + vpxor $T2,$Xi,$Xi # + vpsrlq \$5,$T2,$T2 + vpxor $T2,$Xi,$Xi # + vpsrlq \$1,$Xi,$Xi # + vpxor $Xhi,$Xi,$Xi # +___ +} + +$code.=<<___; +.align 32 +.Linit_loop_avx: + vpalignr \$8,$T1,$T2,$T3 # low part is H.lo^H.hi... + vmovdqu $T3,-0x10($Htbl) # save Karatsuba "salt" +___ + &clmul64x64_avx ($Xhi,$Xi,$Hkey,$HK); # calculate H^3,5,7 + &reduction_avx ($Xhi,$Xi); +$code.=<<___; +.Linit_start_avx: + vmovdqa $Xi,$T3 +___ + &clmul64x64_avx ($Xhi,$Xi,$Hkey,$HK); # calculate H^2,4,6,8 + &reduction_avx ($Xhi,$Xi); +$code.=<<___; + vpshufd \$0b01001110,$T3,$T1 + vpshufd \$0b01001110,$Xi,$T2 + vpxor $T3,$T1,$T1 # Karatsuba pre-processing + vmovdqu $T3,0x00($Htbl) # save H^1,3,5,7 + vpxor $Xi,$T2,$T2 # Karatsuba pre-processing + vmovdqu $Xi,0x10($Htbl) # save H^2,4,6,8 + lea 0x30($Htbl),$Htbl + sub \$1,%r10 + jnz .Linit_loop_avx + + vpalignr \$8,$T2,$T1,$T3 # last "salt" is flipped + vmovdqu $T3,-0x10($Htbl) + + vzeroupper +___ +$code.=<<___ if ($win64); + movaps (%rsp),%xmm6 + lea 0x18(%rsp),%rsp +.LSEH_end_GFp_gcm_init_avx: +___ +$code.=<<___; + ret +.cfi_endproc +.size GFp_gcm_init_avx,.-GFp_gcm_init_avx +___ +} else { +$code.=<<___; + jmp .L_init_clmul +.size GFp_gcm_init_avx,.-GFp_gcm_init_avx +___ +} + +$code.=<<___; +.globl GFp_gcm_ghash_avx +.type GFp_gcm_ghash_avx,\@abi-omnipotent +.align 32 +GFp_gcm_ghash_avx: +.cfi_startproc +___ +if ($avx) { +my ($Xip,$Htbl,$inp,$len)=@_4args; +my ($Xlo,$Xhi,$Xmi, + $Zlo,$Zhi,$Zmi, + $Hkey,$HK,$T1,$T2, + $Xi,$Xo,$Tred,$bswap,$Ii,$Ij) = map("%xmm$_",(0..15)); + +$code.=<<___ if ($win64); + lea -0x88(%rsp),%rax +.LSEH_begin_GFp_gcm_ghash_avx: + # I can't trust assembler to use specific encoding:-( + .byte 0x48,0x8d,0x60,0xe0 #lea -0x20(%rax),%rsp + .byte 0x0f,0x29,0x70,0xe0 #movaps %xmm6,-0x20(%rax) + .byte 0x0f,0x29,0x78,0xf0 #movaps %xmm7,-0x10(%rax) + .byte 0x44,0x0f,0x29,0x00 #movaps %xmm8,0(%rax) + .byte 0x44,0x0f,0x29,0x48,0x10 #movaps %xmm9,0x10(%rax) + .byte 0x44,0x0f,0x29,0x50,0x20 #movaps %xmm10,0x20(%rax) + .byte 0x44,0x0f,0x29,0x58,0x30 #movaps %xmm11,0x30(%rax) + .byte 0x44,0x0f,0x29,0x60,0x40 #movaps %xmm12,0x40(%rax) + .byte 0x44,0x0f,0x29,0x68,0x50 #movaps %xmm13,0x50(%rax) + .byte 0x44,0x0f,0x29,0x70,0x60 #movaps %xmm14,0x60(%rax) + .byte 0x44,0x0f,0x29,0x78,0x70 #movaps %xmm15,0x70(%rax) +___ +$code.=<<___; + vzeroupper + + vmovdqu ($Xip),$Xi # load $Xi + lea .L0x1c2_polynomial(%rip),%r10 + lea 0x40($Htbl),$Htbl # size optimization + vmovdqu .Lbswap_mask(%rip),$bswap + vpshufb $bswap,$Xi,$Xi + cmp \$0x80,$len + jb .Lshort_avx + sub \$0x80,$len + + vmovdqu 0x70($inp),$Ii # I[7] + vmovdqu 0x00-0x40($Htbl),$Hkey # $Hkey^1 + vpshufb $bswap,$Ii,$Ii + vmovdqu 0x20-0x40($Htbl),$HK + + vpunpckhqdq $Ii,$Ii,$T2 + vmovdqu 0x60($inp),$Ij # I[6] + vpclmulqdq \$0x00,$Hkey,$Ii,$Xlo + vpxor $Ii,$T2,$T2 + vpshufb $bswap,$Ij,$Ij + vpclmulqdq \$0x11,$Hkey,$Ii,$Xhi + vmovdqu 0x10-0x40($Htbl),$Hkey # $Hkey^2 + vpunpckhqdq $Ij,$Ij,$T1 + vmovdqu 0x50($inp),$Ii # I[5] + vpclmulqdq \$0x00,$HK,$T2,$Xmi + vpxor $Ij,$T1,$T1 + + vpshufb $bswap,$Ii,$Ii + vpclmulqdq \$0x00,$Hkey,$Ij,$Zlo + vpunpckhqdq $Ii,$Ii,$T2 + vpclmulqdq \$0x11,$Hkey,$Ij,$Zhi + vmovdqu 0x30-0x40($Htbl),$Hkey # $Hkey^3 + vpxor $Ii,$T2,$T2 + vmovdqu 0x40($inp),$Ij # I[4] + vpclmulqdq \$0x10,$HK,$T1,$Zmi + vmovdqu 0x50-0x40($Htbl),$HK + + vpshufb $bswap,$Ij,$Ij + vpxor $Xlo,$Zlo,$Zlo + vpclmulqdq \$0x00,$Hkey,$Ii,$Xlo + vpxor $Xhi,$Zhi,$Zhi + vpunpckhqdq $Ij,$Ij,$T1 + vpclmulqdq \$0x11,$Hkey,$Ii,$Xhi + vmovdqu 0x40-0x40($Htbl),$Hkey # $Hkey^4 + vpxor $Xmi,$Zmi,$Zmi + vpclmulqdq \$0x00,$HK,$T2,$Xmi + vpxor $Ij,$T1,$T1 + + vmovdqu 0x30($inp),$Ii # I[3] + vpxor $Zlo,$Xlo,$Xlo + vpclmulqdq \$0x00,$Hkey,$Ij,$Zlo + vpxor $Zhi,$Xhi,$Xhi + vpshufb $bswap,$Ii,$Ii + vpclmulqdq \$0x11,$Hkey,$Ij,$Zhi + vmovdqu 0x60-0x40($Htbl),$Hkey # $Hkey^5 + vpxor $Zmi,$Xmi,$Xmi + vpunpckhqdq $Ii,$Ii,$T2 + vpclmulqdq \$0x10,$HK,$T1,$Zmi + vmovdqu 0x80-0x40($Htbl),$HK + vpxor $Ii,$T2,$T2 + + vmovdqu 0x20($inp),$Ij # I[2] + vpxor $Xlo,$Zlo,$Zlo + vpclmulqdq \$0x00,$Hkey,$Ii,$Xlo + vpxor $Xhi,$Zhi,$Zhi + vpshufb $bswap,$Ij,$Ij + vpclmulqdq \$0x11,$Hkey,$Ii,$Xhi + vmovdqu 0x70-0x40($Htbl),$Hkey # $Hkey^6 + vpxor $Xmi,$Zmi,$Zmi + vpunpckhqdq $Ij,$Ij,$T1 + vpclmulqdq \$0x00,$HK,$T2,$Xmi + vpxor $Ij,$T1,$T1 + + vmovdqu 0x10($inp),$Ii # I[1] + vpxor $Zlo,$Xlo,$Xlo + vpclmulqdq \$0x00,$Hkey,$Ij,$Zlo + vpxor $Zhi,$Xhi,$Xhi + vpshufb $bswap,$Ii,$Ii + vpclmulqdq \$0x11,$Hkey,$Ij,$Zhi + vmovdqu 0x90-0x40($Htbl),$Hkey # $Hkey^7 + vpxor $Zmi,$Xmi,$Xmi + vpunpckhqdq $Ii,$Ii,$T2 + vpclmulqdq \$0x10,$HK,$T1,$Zmi + vmovdqu 0xb0-0x40($Htbl),$HK + vpxor $Ii,$T2,$T2 + + vmovdqu ($inp),$Ij # I[0] + vpxor $Xlo,$Zlo,$Zlo + vpclmulqdq \$0x00,$Hkey,$Ii,$Xlo + vpxor $Xhi,$Zhi,$Zhi + vpshufb $bswap,$Ij,$Ij + vpclmulqdq \$0x11,$Hkey,$Ii,$Xhi + vmovdqu 0xa0-0x40($Htbl),$Hkey # $Hkey^8 + vpxor $Xmi,$Zmi,$Zmi + vpclmulqdq \$0x10,$HK,$T2,$Xmi + + lea 0x80($inp),$inp + cmp \$0x80,$len + jb .Ltail_avx + + vpxor $Xi,$Ij,$Ij # accumulate $Xi + sub \$0x80,$len + jmp .Loop8x_avx + +.align 32 +.Loop8x_avx: + vpunpckhqdq $Ij,$Ij,$T1 + vmovdqu 0x70($inp),$Ii # I[7] + vpxor $Xlo,$Zlo,$Zlo + vpxor $Ij,$T1,$T1 + vpclmulqdq \$0x00,$Hkey,$Ij,$Xi + vpshufb $bswap,$Ii,$Ii + vpxor $Xhi,$Zhi,$Zhi + vpclmulqdq \$0x11,$Hkey,$Ij,$Xo + vmovdqu 0x00-0x40($Htbl),$Hkey # $Hkey^1 + vpunpckhqdq $Ii,$Ii,$T2 + vpxor $Xmi,$Zmi,$Zmi + vpclmulqdq \$0x00,$HK,$T1,$Tred + vmovdqu 0x20-0x40($Htbl),$HK + vpxor $Ii,$T2,$T2 + + vmovdqu 0x60($inp),$Ij # I[6] + vpclmulqdq \$0x00,$Hkey,$Ii,$Xlo + vpxor $Zlo,$Xi,$Xi # collect result + vpshufb $bswap,$Ij,$Ij + vpclmulqdq \$0x11,$Hkey,$Ii,$Xhi + vxorps $Zhi,$Xo,$Xo + vmovdqu 0x10-0x40($Htbl),$Hkey # $Hkey^2 + vpunpckhqdq $Ij,$Ij,$T1 + vpclmulqdq \$0x00,$HK, $T2,$Xmi + vpxor $Zmi,$Tred,$Tred + vxorps $Ij,$T1,$T1 + + vmovdqu 0x50($inp),$Ii # I[5] + vpxor $Xi,$Tred,$Tred # aggregated Karatsuba post-processing + vpclmulqdq \$0x00,$Hkey,$Ij,$Zlo + vpxor $Xo,$Tred,$Tred + vpslldq \$8,$Tred,$T2 + vpxor $Xlo,$Zlo,$Zlo + vpclmulqdq \$0x11,$Hkey,$Ij,$Zhi + vpsrldq \$8,$Tred,$Tred + vpxor $T2, $Xi, $Xi + vmovdqu 0x30-0x40($Htbl),$Hkey # $Hkey^3 + vpshufb $bswap,$Ii,$Ii + vxorps $Tred,$Xo, $Xo + vpxor $Xhi,$Zhi,$Zhi + vpunpckhqdq $Ii,$Ii,$T2 + vpclmulqdq \$0x10,$HK, $T1,$Zmi + vmovdqu 0x50-0x40($Htbl),$HK + vpxor $Ii,$T2,$T2 + vpxor $Xmi,$Zmi,$Zmi + + vmovdqu 0x40($inp),$Ij # I[4] + vpalignr \$8,$Xi,$Xi,$Tred # 1st phase + vpclmulqdq \$0x00,$Hkey,$Ii,$Xlo + vpshufb $bswap,$Ij,$Ij + vpxor $Zlo,$Xlo,$Xlo + vpclmulqdq \$0x11,$Hkey,$Ii,$Xhi + vmovdqu 0x40-0x40($Htbl),$Hkey # $Hkey^4 + vpunpckhqdq $Ij,$Ij,$T1 + vpxor $Zhi,$Xhi,$Xhi + vpclmulqdq \$0x00,$HK, $T2,$Xmi + vxorps $Ij,$T1,$T1 + vpxor $Zmi,$Xmi,$Xmi + + vmovdqu 0x30($inp),$Ii # I[3] + vpclmulqdq \$0x10,(%r10),$Xi,$Xi + vpclmulqdq \$0x00,$Hkey,$Ij,$Zlo + vpshufb $bswap,$Ii,$Ii + vpxor $Xlo,$Zlo,$Zlo + vpclmulqdq \$0x11,$Hkey,$Ij,$Zhi + vmovdqu 0x60-0x40($Htbl),$Hkey # $Hkey^5 + vpunpckhqdq $Ii,$Ii,$T2 + vpxor $Xhi,$Zhi,$Zhi + vpclmulqdq \$0x10,$HK, $T1,$Zmi + vmovdqu 0x80-0x40($Htbl),$HK + vpxor $Ii,$T2,$T2 + vpxor $Xmi,$Zmi,$Zmi + + vmovdqu 0x20($inp),$Ij # I[2] + vpclmulqdq \$0x00,$Hkey,$Ii,$Xlo + vpshufb $bswap,$Ij,$Ij + vpxor $Zlo,$Xlo,$Xlo + vpclmulqdq \$0x11,$Hkey,$Ii,$Xhi + vmovdqu 0x70-0x40($Htbl),$Hkey # $Hkey^6 + vpunpckhqdq $Ij,$Ij,$T1 + vpxor $Zhi,$Xhi,$Xhi + vpclmulqdq \$0x00,$HK, $T2,$Xmi + vpxor $Ij,$T1,$T1 + vpxor $Zmi,$Xmi,$Xmi + vxorps $Tred,$Xi,$Xi + + vmovdqu 0x10($inp),$Ii # I[1] + vpalignr \$8,$Xi,$Xi,$Tred # 2nd phase + vpclmulqdq \$0x00,$Hkey,$Ij,$Zlo + vpshufb $bswap,$Ii,$Ii + vpxor $Xlo,$Zlo,$Zlo + vpclmulqdq \$0x11,$Hkey,$Ij,$Zhi + vmovdqu 0x90-0x40($Htbl),$Hkey # $Hkey^7 + vpclmulqdq \$0x10,(%r10),$Xi,$Xi + vxorps $Xo,$Tred,$Tred + vpunpckhqdq $Ii,$Ii,$T2 + vpxor $Xhi,$Zhi,$Zhi + vpclmulqdq \$0x10,$HK, $T1,$Zmi + vmovdqu 0xb0-0x40($Htbl),$HK + vpxor $Ii,$T2,$T2 + vpxor $Xmi,$Zmi,$Zmi + + vmovdqu ($inp),$Ij # I[0] + vpclmulqdq \$0x00,$Hkey,$Ii,$Xlo + vpshufb $bswap,$Ij,$Ij + vpclmulqdq \$0x11,$Hkey,$Ii,$Xhi + vmovdqu 0xa0-0x40($Htbl),$Hkey # $Hkey^8 + vpxor $Tred,$Ij,$Ij + vpclmulqdq \$0x10,$HK, $T2,$Xmi + vpxor $Xi,$Ij,$Ij # accumulate $Xi + + lea 0x80($inp),$inp + sub \$0x80,$len + jnc .Loop8x_avx + + add \$0x80,$len + jmp .Ltail_no_xor_avx + +.align 32 +.Lshort_avx: + vmovdqu -0x10($inp,$len),$Ii # very last word + lea ($inp,$len),$inp + vmovdqu 0x00-0x40($Htbl),$Hkey # $Hkey^1 + vmovdqu 0x20-0x40($Htbl),$HK + vpshufb $bswap,$Ii,$Ij + + vmovdqa $Xlo,$Zlo # subtle way to zero $Zlo, + vmovdqa $Xhi,$Zhi # $Zhi and + vmovdqa $Xmi,$Zmi # $Zmi + sub \$0x10,$len + jz .Ltail_avx + + vpunpckhqdq $Ij,$Ij,$T1 + vpxor $Xlo,$Zlo,$Zlo + vpclmulqdq \$0x00,$Hkey,$Ij,$Xlo + vpxor $Ij,$T1,$T1 + vmovdqu -0x20($inp),$Ii + vpxor $Xhi,$Zhi,$Zhi + vpclmulqdq \$0x11,$Hkey,$Ij,$Xhi + vmovdqu 0x10-0x40($Htbl),$Hkey # $Hkey^2 + vpshufb $bswap,$Ii,$Ij + vpxor $Xmi,$Zmi,$Zmi + vpclmulqdq \$0x00,$HK,$T1,$Xmi + vpsrldq \$8,$HK,$HK + sub \$0x10,$len + jz .Ltail_avx + + vpunpckhqdq $Ij,$Ij,$T1 + vpxor $Xlo,$Zlo,$Zlo + vpclmulqdq \$0x00,$Hkey,$Ij,$Xlo + vpxor $Ij,$T1,$T1 + vmovdqu -0x30($inp),$Ii + vpxor $Xhi,$Zhi,$Zhi + vpclmulqdq \$0x11,$Hkey,$Ij,$Xhi + vmovdqu 0x30-0x40($Htbl),$Hkey # $Hkey^3 + vpshufb $bswap,$Ii,$Ij + vpxor $Xmi,$Zmi,$Zmi + vpclmulqdq \$0x00,$HK,$T1,$Xmi + vmovdqu 0x50-0x40($Htbl),$HK + sub \$0x10,$len + jz .Ltail_avx + + vpunpckhqdq $Ij,$Ij,$T1 + vpxor $Xlo,$Zlo,$Zlo + vpclmulqdq \$0x00,$Hkey,$Ij,$Xlo + vpxor $Ij,$T1,$T1 + vmovdqu -0x40($inp),$Ii + vpxor $Xhi,$Zhi,$Zhi + vpclmulqdq \$0x11,$Hkey,$Ij,$Xhi + vmovdqu 0x40-0x40($Htbl),$Hkey # $Hkey^4 + vpshufb $bswap,$Ii,$Ij + vpxor $Xmi,$Zmi,$Zmi + vpclmulqdq \$0x00,$HK,$T1,$Xmi + vpsrldq \$8,$HK,$HK + sub \$0x10,$len + jz .Ltail_avx + + vpunpckhqdq $Ij,$Ij,$T1 + vpxor $Xlo,$Zlo,$Zlo + vpclmulqdq \$0x00,$Hkey,$Ij,$Xlo + vpxor $Ij,$T1,$T1 + vmovdqu -0x50($inp),$Ii + vpxor $Xhi,$Zhi,$Zhi + vpclmulqdq \$0x11,$Hkey,$Ij,$Xhi + vmovdqu 0x60-0x40($Htbl),$Hkey # $Hkey^5 + vpshufb $bswap,$Ii,$Ij + vpxor $Xmi,$Zmi,$Zmi + vpclmulqdq \$0x00,$HK,$T1,$Xmi + vmovdqu 0x80-0x40($Htbl),$HK + sub \$0x10,$len + jz .Ltail_avx + + vpunpckhqdq $Ij,$Ij,$T1 + vpxor $Xlo,$Zlo,$Zlo + vpclmulqdq \$0x00,$Hkey,$Ij,$Xlo + vpxor $Ij,$T1,$T1 + vmovdqu -0x60($inp),$Ii + vpxor $Xhi,$Zhi,$Zhi + vpclmulqdq \$0x11,$Hkey,$Ij,$Xhi + vmovdqu 0x70-0x40($Htbl),$Hkey # $Hkey^6 + vpshufb $bswap,$Ii,$Ij + vpxor $Xmi,$Zmi,$Zmi + vpclmulqdq \$0x00,$HK,$T1,$Xmi + vpsrldq \$8,$HK,$HK + sub \$0x10,$len + jz .Ltail_avx + + vpunpckhqdq $Ij,$Ij,$T1 + vpxor $Xlo,$Zlo,$Zlo + vpclmulqdq \$0x00,$Hkey,$Ij,$Xlo + vpxor $Ij,$T1,$T1 + vmovdqu -0x70($inp),$Ii + vpxor $Xhi,$Zhi,$Zhi + vpclmulqdq \$0x11,$Hkey,$Ij,$Xhi + vmovdqu 0x90-0x40($Htbl),$Hkey # $Hkey^7 + vpshufb $bswap,$Ii,$Ij + vpxor $Xmi,$Zmi,$Zmi + vpclmulqdq \$0x00,$HK,$T1,$Xmi + vmovq 0xb8-0x40($Htbl),$HK + sub \$0x10,$len + jmp .Ltail_avx + +.align 32 +.Ltail_avx: + vpxor $Xi,$Ij,$Ij # accumulate $Xi +.Ltail_no_xor_avx: + vpunpckhqdq $Ij,$Ij,$T1 + vpxor $Xlo,$Zlo,$Zlo + vpclmulqdq \$0x00,$Hkey,$Ij,$Xlo + vpxor $Ij,$T1,$T1 + vpxor $Xhi,$Zhi,$Zhi + vpclmulqdq \$0x11,$Hkey,$Ij,$Xhi + vpxor $Xmi,$Zmi,$Zmi + vpclmulqdq \$0x00,$HK,$T1,$Xmi + + vmovdqu (%r10),$Tred + + vpxor $Xlo,$Zlo,$Xi + vpxor $Xhi,$Zhi,$Xo + vpxor $Xmi,$Zmi,$Zmi + + vpxor $Xi, $Zmi,$Zmi # aggregated Karatsuba post-processing + vpxor $Xo, $Zmi,$Zmi + vpslldq \$8, $Zmi,$T2 + vpsrldq \$8, $Zmi,$Zmi + vpxor $T2, $Xi, $Xi + vpxor $Zmi,$Xo, $Xo + + vpclmulqdq \$0x10,$Tred,$Xi,$T2 # 1st phase + vpalignr \$8,$Xi,$Xi,$Xi + vpxor $T2,$Xi,$Xi + + vpclmulqdq \$0x10,$Tred,$Xi,$T2 # 2nd phase + vpalignr \$8,$Xi,$Xi,$Xi + vpxor $Xo,$Xi,$Xi + vpxor $T2,$Xi,$Xi + + cmp \$0,$len + jne .Lshort_avx + + vpshufb $bswap,$Xi,$Xi + vmovdqu $Xi,($Xip) + vzeroupper +___ +$code.=<<___ if ($win64); + movaps (%rsp),%xmm6 + movaps 0x10(%rsp),%xmm7 + movaps 0x20(%rsp),%xmm8 + movaps 0x30(%rsp),%xmm9 + movaps 0x40(%rsp),%xmm10 + movaps 0x50(%rsp),%xmm11 + movaps 0x60(%rsp),%xmm12 + movaps 0x70(%rsp),%xmm13 + movaps 0x80(%rsp),%xmm14 + movaps 0x90(%rsp),%xmm15 + lea 0xa8(%rsp),%rsp +.LSEH_end_GFp_gcm_ghash_avx: +___ +$code.=<<___; + ret +.cfi_endproc +.size GFp_gcm_ghash_avx,.-GFp_gcm_ghash_avx +___ +} else { +$code.=<<___; + jmp .L_ghash_clmul +.size GFp_gcm_ghash_avx,.-GFp_gcm_ghash_avx +___ +} + +$code.=<<___; +.align 64 +.Lbswap_mask: + .byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 +.L0x1c2_polynomial: + .byte 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2 +.L7_mask: + .long 7,0,7,0 +.align 64 + +.asciz "GHASH for x86_64, CRYPTOGAMS by " +.align 64 +___ + +if ($win64) { +$code.=<<___; +.section .pdata +.align 4 + .rva .LSEH_begin_GFp_gcm_init_clmul + .rva .LSEH_end_GFp_gcm_init_clmul + .rva .LSEH_info_GFp_gcm_init_clmul + + .rva .LSEH_begin_GFp_gcm_ghash_clmul + .rva .LSEH_end_GFp_gcm_ghash_clmul + .rva .LSEH_info_GFp_gcm_ghash_clmul +___ +$code.=<<___ if ($avx); + .rva .LSEH_begin_GFp_gcm_init_avx + .rva .LSEH_end_GFp_gcm_init_avx + .rva .LSEH_info_GFp_gcm_init_clmul + + .rva .LSEH_begin_GFp_gcm_ghash_avx + .rva .LSEH_end_GFp_gcm_ghash_avx + .rva .LSEH_info_GFp_gcm_ghash_clmul +___ +$code.=<<___; +.section .xdata +.align 8 +.LSEH_info_GFp_gcm_init_clmul: + .byte 0x01,0x08,0x03,0x00 + .byte 0x08,0x68,0x00,0x00 #movaps 0x00(rsp),xmm6 + .byte 0x04,0x22,0x00,0x00 #sub rsp,0x18 +.LSEH_info_GFp_gcm_ghash_clmul: + .byte 0x01,0x33,0x16,0x00 + .byte 0x33,0xf8,0x09,0x00 #movaps 0x90(rsp),xmm15 + .byte 0x2e,0xe8,0x08,0x00 #movaps 0x80(rsp),xmm14 + .byte 0x29,0xd8,0x07,0x00 #movaps 0x70(rsp),xmm13 + .byte 0x24,0xc8,0x06,0x00 #movaps 0x60(rsp),xmm12 + .byte 0x1f,0xb8,0x05,0x00 #movaps 0x50(rsp),xmm11 + .byte 0x1a,0xa8,0x04,0x00 #movaps 0x40(rsp),xmm10 + .byte 0x15,0x98,0x03,0x00 #movaps 0x30(rsp),xmm9 + .byte 0x10,0x88,0x02,0x00 #movaps 0x20(rsp),xmm8 + .byte 0x0c,0x78,0x01,0x00 #movaps 0x10(rsp),xmm7 + .byte 0x08,0x68,0x00,0x00 #movaps 0x00(rsp),xmm6 + .byte 0x04,0x01,0x15,0x00 #sub rsp,0xa8 +___ +} + +$code =~ s/\`([^\`]*)\`/eval($1)/gem; + +print $code; + +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/fipsmodule/modes/asm/ghashv8-armx.pl b/vendor/ring/crypto/fipsmodule/modes/asm/ghashv8-armx.pl new file mode 100644 index 00000000..3a551c29 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/modes/asm/ghashv8-armx.pl @@ -0,0 +1,432 @@ +#! /usr/bin/env perl +# Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# GHASH for ARMv8 Crypto Extension, 64-bit polynomial multiplication. +# +# June 2014 +# Initial version was developed in tight cooperation with Ard Biesheuvel +# of Linaro from bits-n-pieces from other assembly modules. Just like +# aesv8-armx.pl this module supports both AArch32 and AArch64 execution modes. +# +# July 2014 +# Implement 2x aggregated reduction [see ghash-x86.pl for background +# information]. +# +# Current performance in cycles per processed byte: +# +# PMULL[2] 32-bit NEON(*) +# Apple A7 0.92 5.62 +# Cortex-A53 1.01 8.39 +# Cortex-A57 1.17 7.61 +# Denver 0.71 6.02 +# Mongoose 1.10 8.06 +# Kryo 1.16 8.00 +# +# (*) presented for reference/comparison purposes; + +$flavour = shift; +$output = shift; + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or +die "can't locate arm-xlate.pl"; + +open OUT,"| \"$^X\" $xlate $flavour $output"; +*STDOUT=*OUT; + +$Xi="x0"; # argument block +$Htbl="x1"; +$inp="x2"; +$len="x3"; + +$inc="x12"; + +{ +my ($Xl,$Xm,$Xh,$IN)=map("q$_",(0..3)); +my ($t0,$t1,$t2,$xC2,$H,$Hhl,$H2)=map("q$_",(8..14)); + +$code=<<___; +#include + +.text +___ +$code.=".arch armv8-a+crypto\n" if ($flavour =~ /64/); +$code.=<<___ if ($flavour !~ /64/); +.fpu neon +.code 32 +#undef __thumb2__ +___ + +################################################################################ +# void GFp_gcm_init_clmul(u128 Htable[16],const u64 H[2]); +# +# input: 128-bit H - secret parameter E(K,0^128) +# output: precomputed table filled with degrees of twisted H; +# H is twisted to handle reverse bitness of GHASH; +# only few of 16 slots of Htable[16] are used; +# data is opaque to outside world (which allows to +# optimize the code independently); +# +$code.=<<___; +.global GFp_gcm_init_clmul +.type GFp_gcm_init_clmul,%function +.align 4 +GFp_gcm_init_clmul: + AARCH64_VALID_CALL_TARGET + vld1.64 {$t1},[x1] @ load input H + vmov.i8 $xC2,#0xe1 + vshl.i64 $xC2,$xC2,#57 @ 0xc2.0 + vext.8 $IN,$t1,$t1,#8 + vshr.u64 $t2,$xC2,#63 + vdup.32 $t1,${t1}[1] + vext.8 $t0,$t2,$xC2,#8 @ t0=0xc2....01 + vshr.u64 $t2,$IN,#63 + vshr.s32 $t1,$t1,#31 @ broadcast carry bit + vand $t2,$t2,$t0 + vshl.i64 $IN,$IN,#1 + vext.8 $t2,$t2,$t2,#8 + vand $t0,$t0,$t1 + vorr $IN,$IN,$t2 @ H<<<=1 + veor $H,$IN,$t0 @ twisted H + vst1.64 {$H},[x0],#16 @ store Htable[0] + + @ calculate H^2 + vext.8 $t0,$H,$H,#8 @ Karatsuba pre-processing + vpmull.p64 $Xl,$H,$H + veor $t0,$t0,$H + vpmull2.p64 $Xh,$H,$H + vpmull.p64 $Xm,$t0,$t0 + + vext.8 $t1,$Xl,$Xh,#8 @ Karatsuba post-processing + veor $t2,$Xl,$Xh + veor $Xm,$Xm,$t1 + veor $Xm,$Xm,$t2 + vpmull.p64 $t2,$Xl,$xC2 @ 1st phase + + vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result + vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl + veor $Xl,$Xm,$t2 + + vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase + vpmull.p64 $Xl,$Xl,$xC2 + veor $t2,$t2,$Xh + veor $H2,$Xl,$t2 + + vext.8 $t1,$H2,$H2,#8 @ Karatsuba pre-processing + veor $t1,$t1,$H2 + vext.8 $Hhl,$t0,$t1,#8 @ pack Karatsuba pre-processed + vst1.64 {$Hhl-$H2},[x0] @ store Htable[1..2] + + ret +.size GFp_gcm_init_clmul,.-GFp_gcm_init_clmul +___ +################################################################################ +# void GFp_gcm_gmult_clmul(u64 Xi[2],const u128 Htable[16]); +# +# input: Xi - current hash value; +# Htable - table precomputed in GFp_gcm_init_clmul; +# output: Xi - next hash value Xi; +# +$code.=<<___; +.global GFp_gcm_gmult_clmul +.type GFp_gcm_gmult_clmul,%function +.align 4 +GFp_gcm_gmult_clmul: + AARCH64_VALID_CALL_TARGET + vld1.64 {$t1},[$Xi] @ load Xi + vmov.i8 $xC2,#0xe1 + vld1.64 {$H-$Hhl},[$Htbl] @ load twisted H, ... + vshl.u64 $xC2,$xC2,#57 +#ifndef __ARMEB__ + vrev64.8 $t1,$t1 +#endif + vext.8 $IN,$t1,$t1,#8 + + vpmull.p64 $Xl,$H,$IN @ H.lo·Xi.lo + veor $t1,$t1,$IN @ Karatsuba pre-processing + vpmull2.p64 $Xh,$H,$IN @ H.hi·Xi.hi + vpmull.p64 $Xm,$Hhl,$t1 @ (H.lo+H.hi)·(Xi.lo+Xi.hi) + + vext.8 $t1,$Xl,$Xh,#8 @ Karatsuba post-processing + veor $t2,$Xl,$Xh + veor $Xm,$Xm,$t1 + veor $Xm,$Xm,$t2 + vpmull.p64 $t2,$Xl,$xC2 @ 1st phase of reduction + + vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result + vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl + veor $Xl,$Xm,$t2 + + vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase of reduction + vpmull.p64 $Xl,$Xl,$xC2 + veor $t2,$t2,$Xh + veor $Xl,$Xl,$t2 + +#ifndef __ARMEB__ + vrev64.8 $Xl,$Xl +#endif + vext.8 $Xl,$Xl,$Xl,#8 + vst1.64 {$Xl},[$Xi] @ write out Xi + + ret +.size GFp_gcm_gmult_clmul,.-GFp_gcm_gmult_clmul +___ +################################################################################ +# void GFp_gcm_ghash_clmul(u64 Xi[2], const u128 Htable[16], const u8 *inp, +# size_t len); +# +# input: table precomputed in GFp_gcm_init_clmul; +# current hash value Xi; +# pointer to input data; +# length of input data in bytes, but divisible by block size; +# output: next hash value Xi; +# +$code.=<<___; +.global GFp_gcm_ghash_clmul +.type GFp_gcm_ghash_clmul,%function +.align 4 +GFp_gcm_ghash_clmul: + AARCH64_VALID_CALL_TARGET +___ +$code.=<<___ if ($flavour !~ /64/); + vstmdb sp!,{d8-d15} @ 32-bit ABI says so +___ +$code.=<<___; + vld1.64 {$Xl},[$Xi] @ load [rotated] Xi + @ "[rotated]" means that + @ loaded value would have + @ to be rotated in order to + @ make it appear as in + @ algorithm specification + subs $len,$len,#32 @ see if $len is 32 or larger + mov $inc,#16 @ $inc is used as post- + @ increment for input pointer; + @ as loop is modulo-scheduled + @ $inc is zeroed just in time + @ to preclude overstepping + @ inp[len], which means that + @ last block[s] are actually + @ loaded twice, but last + @ copy is not processed + vld1.64 {$H-$Hhl},[$Htbl],#32 @ load twisted H, ..., H^2 + vmov.i8 $xC2,#0xe1 + vld1.64 {$H2},[$Htbl] + cclr $inc,eq @ is it time to zero $inc? + vext.8 $Xl,$Xl,$Xl,#8 @ rotate Xi + vld1.64 {$t0},[$inp],#16 @ load [rotated] I[0] + vshl.u64 $xC2,$xC2,#57 @ compose 0xc2.0 constant +#ifndef __ARMEB__ + vrev64.8 $t0,$t0 + vrev64.8 $Xl,$Xl +#endif + vext.8 $IN,$t0,$t0,#8 @ rotate I[0] + b.lo .Lodd_tail_v8 @ $len was less than 32 +___ +{ my ($Xln,$Xmn,$Xhn,$In) = map("q$_",(4..7)); + ####### + # Xi+2 =[H*(Ii+1 + Xi+1)] mod P = + # [(H*Ii+1) + (H*Xi+1)] mod P = + # [(H*Ii+1) + H^2*(Ii+Xi)] mod P + # +$code.=<<___; + vld1.64 {$t1},[$inp],$inc @ load [rotated] I[1] +#ifndef __ARMEB__ + vrev64.8 $t1,$t1 +#endif + vext.8 $In,$t1,$t1,#8 + veor $IN,$IN,$Xl @ I[i]^=Xi + vpmull.p64 $Xln,$H,$In @ H·Ii+1 + veor $t1,$t1,$In @ Karatsuba pre-processing + vpmull2.p64 $Xhn,$H,$In + b .Loop_mod2x_v8 + +.align 4 +.Loop_mod2x_v8: + vext.8 $t2,$IN,$IN,#8 + subs $len,$len,#32 @ is there more data? + vpmull.p64 $Xl,$H2,$IN @ H^2.lo·Xi.lo + cclr $inc,lo @ is it time to zero $inc? + + vpmull.p64 $Xmn,$Hhl,$t1 + veor $t2,$t2,$IN @ Karatsuba pre-processing + vpmull2.p64 $Xh,$H2,$IN @ H^2.hi·Xi.hi + veor $Xl,$Xl,$Xln @ accumulate + vpmull2.p64 $Xm,$Hhl,$t2 @ (H^2.lo+H^2.hi)·(Xi.lo+Xi.hi) + vld1.64 {$t0},[$inp],$inc @ load [rotated] I[i+2] + + veor $Xh,$Xh,$Xhn + cclr $inc,eq @ is it time to zero $inc? + veor $Xm,$Xm,$Xmn + + vext.8 $t1,$Xl,$Xh,#8 @ Karatsuba post-processing + veor $t2,$Xl,$Xh + veor $Xm,$Xm,$t1 + vld1.64 {$t1},[$inp],$inc @ load [rotated] I[i+3] +#ifndef __ARMEB__ + vrev64.8 $t0,$t0 +#endif + veor $Xm,$Xm,$t2 + vpmull.p64 $t2,$Xl,$xC2 @ 1st phase of reduction + +#ifndef __ARMEB__ + vrev64.8 $t1,$t1 +#endif + vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result + vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl + vext.8 $In,$t1,$t1,#8 + vext.8 $IN,$t0,$t0,#8 + veor $Xl,$Xm,$t2 + vpmull.p64 $Xln,$H,$In @ H·Ii+1 + veor $IN,$IN,$Xh @ accumulate $IN early + + vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase of reduction + vpmull.p64 $Xl,$Xl,$xC2 + veor $IN,$IN,$t2 + veor $t1,$t1,$In @ Karatsuba pre-processing + veor $IN,$IN,$Xl + vpmull2.p64 $Xhn,$H,$In + b.hs .Loop_mod2x_v8 @ there was at least 32 more bytes + + veor $Xh,$Xh,$t2 + vext.8 $IN,$t0,$t0,#8 @ re-construct $IN + adds $len,$len,#32 @ re-construct $len + veor $Xl,$Xl,$Xh @ re-construct $Xl + b.eq .Ldone_v8 @ is $len zero? +___ +} +$code.=<<___; +.Lodd_tail_v8: + vext.8 $t2,$Xl,$Xl,#8 + veor $IN,$IN,$Xl @ inp^=Xi + veor $t1,$t0,$t2 @ $t1 is rotated inp^Xi + + vpmull.p64 $Xl,$H,$IN @ H.lo·Xi.lo + veor $t1,$t1,$IN @ Karatsuba pre-processing + vpmull2.p64 $Xh,$H,$IN @ H.hi·Xi.hi + vpmull.p64 $Xm,$Hhl,$t1 @ (H.lo+H.hi)·(Xi.lo+Xi.hi) + + vext.8 $t1,$Xl,$Xh,#8 @ Karatsuba post-processing + veor $t2,$Xl,$Xh + veor $Xm,$Xm,$t1 + veor $Xm,$Xm,$t2 + vpmull.p64 $t2,$Xl,$xC2 @ 1st phase of reduction + + vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result + vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl + veor $Xl,$Xm,$t2 + + vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase of reduction + vpmull.p64 $Xl,$Xl,$xC2 + veor $t2,$t2,$Xh + veor $Xl,$Xl,$t2 + +.Ldone_v8: +#ifndef __ARMEB__ + vrev64.8 $Xl,$Xl +#endif + vext.8 $Xl,$Xl,$Xl,#8 + vst1.64 {$Xl},[$Xi] @ write out Xi + +___ +$code.=<<___ if ($flavour !~ /64/); + vldmia sp!,{d8-d15} @ 32-bit ABI says so +___ +$code.=<<___; + ret +.size GFp_gcm_ghash_clmul,.-GFp_gcm_ghash_clmul +___ +} +$code.=<<___; +.asciz "GHASH for ARMv8, CRYPTOGAMS by " +.align 2 +___ + +if ($flavour =~ /64/) { ######## 64-bit code + sub unvmov { + my $arg=shift; + + $arg =~ m/q([0-9]+)#(lo|hi),\s*q([0-9]+)#(lo|hi)/o && + sprintf "ins v%d.d[%d],v%d.d[%d]",$1,($2 eq "lo")?0:1,$3,($4 eq "lo")?0:1; + } + foreach(split("\n",$code)) { + s/cclr\s+([wx])([^,]+),\s*([a-z]+)/csel $1$2,$1zr,$1$2,$3/o or + s/vmov\.i8/movi/o or # fix up legacy mnemonics + s/vmov\s+(.*)/unvmov($1)/geo or + s/vext\.8/ext/o or + s/vshr\.s/sshr\.s/o or + s/vshr/ushr/o or + s/^(\s+)v/$1/o or # strip off v prefix + s/\bbx\s+lr\b/ret/o; + + s/\bq([0-9]+)\b/"v".($1<8?$1:$1+8).".16b"/geo; # old->new registers + s/@\s/\/\//o; # old->new style commentary + + # fix up remaining legacy suffixes + s/\.[ui]?8(\s)/$1/o; + s/\.[uis]?32//o and s/\.16b/\.4s/go; + m/\.p64/o and s/\.16b/\.1q/o; # 1st pmull argument + m/l\.p64/o and s/\.16b/\.1d/go; # 2nd and 3rd pmull arguments + s/\.[uisp]?64//o and s/\.16b/\.2d/go; + s/\.[42]([sd])\[([0-3])\]/\.$1\[$2\]/o; + + print $_,"\n"; + } +} else { ######## 32-bit code + sub unvdup32 { + my $arg=shift; + + $arg =~ m/q([0-9]+),\s*q([0-9]+)\[([0-3])\]/o && + sprintf "vdup.32 q%d,d%d[%d]",$1,2*$2+($3>>1),$3&1; + } + sub unvpmullp64 { + my ($mnemonic,$arg)=@_; + + if ($arg =~ m/q([0-9]+),\s*q([0-9]+),\s*q([0-9]+)/o) { + my $word = 0xf2a00e00|(($1&7)<<13)|(($1&8)<<19) + |(($2&7)<<17)|(($2&8)<<4) + |(($3&7)<<1) |(($3&8)<<2); + $word |= 0x00010001 if ($mnemonic =~ "2"); + # since ARMv7 instructions are always encoded little-endian. + # correct solution is to use .inst directive, but older + # assemblers don't implement it:-( + sprintf ".byte\t0x%02x,0x%02x,0x%02x,0x%02x\t@ %s %s", + $word&0xff,($word>>8)&0xff, + ($word>>16)&0xff,($word>>24)&0xff, + $mnemonic,$arg; + } + } + + foreach(split("\n",$code)) { + s/\b[wx]([0-9]+)\b/r$1/go; # new->old registers + s/\bv([0-9])\.[12468]+[bsd]\b/q$1/go; # new->old registers + s/\/\/\s?/@ /o; # new->old style commentary + + # fix up remaining new-style suffixes + s/\],#[0-9]+/]!/o; + + s/cclr\s+([^,]+),\s*([a-z]+)/mov$2 $1,#0/o or + s/vdup\.32\s+(.*)/unvdup32($1)/geo or + s/v?(pmull2?)\.p64\s+(.*)/unvpmullp64($1,$2)/geo or + s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/geo or + s/^(\s+)b\./$1b/o or + s/^(\s+)ret/$1bx\tlr/o; + + print $_,"\n"; + } +} + +close STDOUT or die "error closing STDOUT"; # enforce flush diff --git a/vendor/ring/crypto/fipsmodule/sha/asm/sha256-armv4.pl b/vendor/ring/crypto/fipsmodule/sha/asm/sha256-armv4.pl new file mode 100644 index 00000000..d8661a09 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/sha/asm/sha256-armv4.pl @@ -0,0 +1,736 @@ +#! /usr/bin/env perl +# Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# +# Permission to use under GPL terms is granted. +# ==================================================================== + +# SHA256 block procedure for ARMv4. May 2007. + +# Performance is ~2x better than gcc 3.4 generated code and in "abso- +# lute" terms is ~2250 cycles per 64-byte block or ~35 cycles per +# byte [on single-issue Xscale PXA250 core]. + +# July 2010. +# +# Rescheduling for dual-issue pipeline resulted in 22% improvement on +# Cortex A8 core and ~20 cycles per processed byte. + +# February 2011. +# +# Profiler-assisted and platform-specific optimization resulted in 16% +# improvement on Cortex A8 core and ~15.4 cycles per processed byte. + +# September 2013. +# +# Add NEON implementation. On Cortex A8 it was measured to process one +# byte in 12.5 cycles or 23% faster than integer-only code. Snapdragon +# S4 does it in 12.5 cycles too, but it's 50% faster than integer-only +# code (meaning that latter performs sub-optimally, nothing was done +# about it). + +# May 2014. +# +# Add ARMv8 code path performing at 2.0 cpb on Apple A7. + +$flavour = shift; +if ($flavour=~/\w[\w\-]*\.\w+$/) { $output=$flavour; undef $flavour; } +else { while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} } + +if ($flavour && $flavour ne "void") { + $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; + ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or + ( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or + die "can't locate arm-xlate.pl"; + + open OUT,"| \"$^X\" $xlate $flavour $output"; + *STDOUT=*OUT; +} else { + open OUT,">$output"; + *STDOUT=*OUT; +} + +$ctx="r0"; $t0="r0"; +$inp="r1"; $t4="r1"; +$len="r2"; $t1="r2"; +$T1="r3"; $t3="r3"; +$A="r4"; +$B="r5"; +$C="r6"; +$D="r7"; +$E="r8"; +$F="r9"; +$G="r10"; +$H="r11"; +@V=($A,$B,$C,$D,$E,$F,$G,$H); +$t2="r12"; +$Ktbl="r14"; + +@Sigma0=( 2,13,22); +@Sigma1=( 6,11,25); +@sigma0=( 7,18, 3); +@sigma1=(17,19,10); + +sub BODY_00_15 { +my ($i,$a,$b,$c,$d,$e,$f,$g,$h) = @_; + +$code.=<<___ if ($i<16); +#if __ARM_ARCH__>=7 + @ ldr $t1,[$inp],#4 @ $i +# if $i==15 + str $inp,[sp,#17*4] @ make room for $t4 +# endif + eor $t0,$e,$e,ror#`$Sigma1[1]-$Sigma1[0]` + add $a,$a,$t2 @ h+=Maj(a,b,c) from the past + eor $t0,$t0,$e,ror#`$Sigma1[2]-$Sigma1[0]` @ Sigma1(e) +# ifndef __ARMEB__ + rev $t1,$t1 +# endif +#else + @ ldrb $t1,[$inp,#3] @ $i + add $a,$a,$t2 @ h+=Maj(a,b,c) from the past + ldrb $t2,[$inp,#2] + ldrb $t0,[$inp,#1] + orr $t1,$t1,$t2,lsl#8 + ldrb $t2,[$inp],#4 + orr $t1,$t1,$t0,lsl#16 +# if $i==15 + str $inp,[sp,#17*4] @ make room for $t4 +# endif + eor $t0,$e,$e,ror#`$Sigma1[1]-$Sigma1[0]` + orr $t1,$t1,$t2,lsl#24 + eor $t0,$t0,$e,ror#`$Sigma1[2]-$Sigma1[0]` @ Sigma1(e) +#endif +___ +$code.=<<___; + ldr $t2,[$Ktbl],#4 @ *K256++ + add $h,$h,$t1 @ h+=X[i] + str $t1,[sp,#`$i%16`*4] + eor $t1,$f,$g + add $h,$h,$t0,ror#$Sigma1[0] @ h+=Sigma1(e) + and $t1,$t1,$e + add $h,$h,$t2 @ h+=K256[i] + eor $t1,$t1,$g @ Ch(e,f,g) + eor $t0,$a,$a,ror#`$Sigma0[1]-$Sigma0[0]` + add $h,$h,$t1 @ h+=Ch(e,f,g) +#if $i==31 + and $t2,$t2,#0xff + cmp $t2,#0xf2 @ done? +#endif +#if $i<15 +# if __ARM_ARCH__>=7 + ldr $t1,[$inp],#4 @ prefetch +# else + ldrb $t1,[$inp,#3] +# endif + eor $t2,$a,$b @ a^b, b^c in next round +#else + ldr $t1,[sp,#`($i+2)%16`*4] @ from future BODY_16_xx + eor $t2,$a,$b @ a^b, b^c in next round + ldr $t4,[sp,#`($i+15)%16`*4] @ from future BODY_16_xx +#endif + eor $t0,$t0,$a,ror#`$Sigma0[2]-$Sigma0[0]` @ Sigma0(a) + and $t3,$t3,$t2 @ (b^c)&=(a^b) + add $d,$d,$h @ d+=h + eor $t3,$t3,$b @ Maj(a,b,c) + add $h,$h,$t0,ror#$Sigma0[0] @ h+=Sigma0(a) + @ add $h,$h,$t3 @ h+=Maj(a,b,c) +___ + ($t2,$t3)=($t3,$t2); +} + +sub BODY_16_XX { +my ($i,$a,$b,$c,$d,$e,$f,$g,$h) = @_; + +$code.=<<___; + @ ldr $t1,[sp,#`($i+1)%16`*4] @ $i + @ ldr $t4,[sp,#`($i+14)%16`*4] + mov $t0,$t1,ror#$sigma0[0] + add $a,$a,$t2 @ h+=Maj(a,b,c) from the past + mov $t2,$t4,ror#$sigma1[0] + eor $t0,$t0,$t1,ror#$sigma0[1] + eor $t2,$t2,$t4,ror#$sigma1[1] + eor $t0,$t0,$t1,lsr#$sigma0[2] @ sigma0(X[i+1]) + ldr $t1,[sp,#`($i+0)%16`*4] + eor $t2,$t2,$t4,lsr#$sigma1[2] @ sigma1(X[i+14]) + ldr $t4,[sp,#`($i+9)%16`*4] + + add $t2,$t2,$t0 + eor $t0,$e,$e,ror#`$Sigma1[1]-$Sigma1[0]` @ from BODY_00_15 + add $t1,$t1,$t2 + eor $t0,$t0,$e,ror#`$Sigma1[2]-$Sigma1[0]` @ Sigma1(e) + add $t1,$t1,$t4 @ X[i] +___ + &BODY_00_15(@_); +} + +$code=<<___; +#ifndef __KERNEL__ +# include +#else +# define __ARM_ARCH__ __LINUX_ARM_ARCH__ +# define __ARM_MAX_ARCH__ 7 +#endif + +@ Silence ARMv8 deprecated IT instruction warnings. This file is used by both +@ ARMv7 and ARMv8 processors. It does have ARMv8-only code, but those +@ instructions are manually-encoded. (See unsha256.) +.arch armv7-a + +.text +#if defined(__thumb2__) +.syntax unified +.thumb +#else +.code 32 +#endif + +.type K256,%object +.align 5 +K256: +.word 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 +.word 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 +.word 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 +.word 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 +.word 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc +.word 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da +.word 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 +.word 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 +.word 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 +.word 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 +.word 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 +.word 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 +.word 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 +.word 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 +.word 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 +.word 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 +.size K256,.-K256 +.word 0 @ terminator +#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) +.extern GFp_armcap_P +.hidden GFp_armcap_P +.LOPENSSL_armcap: +.word GFp_armcap_P-.Lsha256_block_data_order +#endif +.align 5 + +.global GFp_sha256_block_data_order +.type GFp_sha256_block_data_order,%function +GFp_sha256_block_data_order: +.Lsha256_block_data_order: +#if __ARM_ARCH__<7 && !defined(__thumb2__) + sub r3,pc,#8 @ GFp_sha256_block_data_order +#else + adr r3,.Lsha256_block_data_order +#endif +#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) + ldr r12,.LOPENSSL_armcap + ldr r12,[r3,r12] @ GFp_armcap_P +#ifdef __APPLE__ + ldr r12,[r12] +#endif + tst r12,#ARMV8_SHA256 + bne .LARMv8 + tst r12,#ARMV7_NEON + bne .LNEON +#endif + add $len,$inp,$len,lsl#6 @ len to point at the end of inp + stmdb sp!,{$ctx,$inp,$len,r4-r11,lr} + ldmia $ctx,{$A,$B,$C,$D,$E,$F,$G,$H} + sub $Ktbl,r3,#256+32 @ K256 + sub sp,sp,#16*4 @ alloca(X[16]) +.Loop: +# if __ARM_ARCH__>=7 + ldr $t1,[$inp],#4 +# else + ldrb $t1,[$inp,#3] +# endif + eor $t3,$B,$C @ magic + eor $t2,$t2,$t2 +___ +for($i=0;$i<16;$i++) { &BODY_00_15($i,@V); unshift(@V,pop(@V)); } +$code.=".Lrounds_16_xx:\n"; +for (;$i<32;$i++) { &BODY_16_XX($i,@V); unshift(@V,pop(@V)); } +$code.=<<___; +#if __ARM_ARCH__>=7 + ite eq @ Thumb2 thing, sanity check in ARM +#endif + ldreq $t3,[sp,#16*4] @ pull ctx + bne .Lrounds_16_xx + + add $A,$A,$t2 @ h+=Maj(a,b,c) from the past + ldr $t0,[$t3,#0] + ldr $t1,[$t3,#4] + ldr $t2,[$t3,#8] + add $A,$A,$t0 + ldr $t0,[$t3,#12] + add $B,$B,$t1 + ldr $t1,[$t3,#16] + add $C,$C,$t2 + ldr $t2,[$t3,#20] + add $D,$D,$t0 + ldr $t0,[$t3,#24] + add $E,$E,$t1 + ldr $t1,[$t3,#28] + add $F,$F,$t2 + ldr $inp,[sp,#17*4] @ pull inp + ldr $t2,[sp,#18*4] @ pull inp+len + add $G,$G,$t0 + add $H,$H,$t1 + stmia $t3,{$A,$B,$C,$D,$E,$F,$G,$H} + cmp $inp,$t2 + sub $Ktbl,$Ktbl,#256 @ rewind Ktbl + bne .Loop + + add sp,sp,#`16+3`*4 @ destroy frame +#if __ARM_ARCH__>=5 + ldmia sp!,{r4-r11,pc} +#else + ldmia sp!,{r4-r11,lr} + tst lr,#1 + moveq pc,lr @ be binary compatible with V4, yet + bx lr @ interoperable with Thumb ISA:-) +#endif +.size GFp_sha256_block_data_order,.-GFp_sha256_block_data_order +___ +###################################################################### +# NEON stuff +# +{{{ +my @X=map("q$_",(0..3)); +my ($T0,$T1,$T2,$T3,$T4,$T5)=("q8","q9","q10","q11","d24","d25"); +my $Xfer=$t4; +my $j=0; + +sub Dlo() { shift=~m|q([1]?[0-9])|?"d".($1*2):""; } +sub Dhi() { shift=~m|q([1]?[0-9])|?"d".($1*2+1):""; } + +sub AUTOLOAD() # thunk [simplified] x86-style perlasm +{ my $opcode = $AUTOLOAD; $opcode =~ s/.*:://; $opcode =~ s/_/\./; + my $arg = pop; + $arg = "#$arg" if ($arg*1 eq $arg); + $code .= "\t$opcode\t".join(',',@_,$arg)."\n"; +} + +sub Xupdate() +{ use integer; + my $body = shift; + my @insns = (&$body,&$body,&$body,&$body); + my ($a,$b,$c,$d,$e,$f,$g,$h); + + &vext_8 ($T0,@X[0],@X[1],4); # X[1..4] + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &vext_8 ($T1,@X[2],@X[3],4); # X[9..12] + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &vshr_u32 ($T2,$T0,$sigma0[0]); + eval(shift(@insns)); + eval(shift(@insns)); + &vadd_i32 (@X[0],@X[0],$T1); # X[0..3] += X[9..12] + eval(shift(@insns)); + eval(shift(@insns)); + &vshr_u32 ($T1,$T0,$sigma0[2]); + eval(shift(@insns)); + eval(shift(@insns)); + &vsli_32 ($T2,$T0,32-$sigma0[0]); + eval(shift(@insns)); + eval(shift(@insns)); + &vshr_u32 ($T3,$T0,$sigma0[1]); + eval(shift(@insns)); + eval(shift(@insns)); + &veor ($T1,$T1,$T2); + eval(shift(@insns)); + eval(shift(@insns)); + &vsli_32 ($T3,$T0,32-$sigma0[1]); + eval(shift(@insns)); + eval(shift(@insns)); + &vshr_u32 ($T4,&Dhi(@X[3]),$sigma1[0]); + eval(shift(@insns)); + eval(shift(@insns)); + &veor ($T1,$T1,$T3); # sigma0(X[1..4]) + eval(shift(@insns)); + eval(shift(@insns)); + &vsli_32 ($T4,&Dhi(@X[3]),32-$sigma1[0]); + eval(shift(@insns)); + eval(shift(@insns)); + &vshr_u32 ($T5,&Dhi(@X[3]),$sigma1[2]); + eval(shift(@insns)); + eval(shift(@insns)); + &vadd_i32 (@X[0],@X[0],$T1); # X[0..3] += sigma0(X[1..4]) + eval(shift(@insns)); + eval(shift(@insns)); + &veor ($T5,$T5,$T4); + eval(shift(@insns)); + eval(shift(@insns)); + &vshr_u32 ($T4,&Dhi(@X[3]),$sigma1[1]); + eval(shift(@insns)); + eval(shift(@insns)); + &vsli_32 ($T4,&Dhi(@X[3]),32-$sigma1[1]); + eval(shift(@insns)); + eval(shift(@insns)); + &veor ($T5,$T5,$T4); # sigma1(X[14..15]) + eval(shift(@insns)); + eval(shift(@insns)); + &vadd_i32 (&Dlo(@X[0]),&Dlo(@X[0]),$T5);# X[0..1] += sigma1(X[14..15]) + eval(shift(@insns)); + eval(shift(@insns)); + &vshr_u32 ($T4,&Dlo(@X[0]),$sigma1[0]); + eval(shift(@insns)); + eval(shift(@insns)); + &vsli_32 ($T4,&Dlo(@X[0]),32-$sigma1[0]); + eval(shift(@insns)); + eval(shift(@insns)); + &vshr_u32 ($T5,&Dlo(@X[0]),$sigma1[2]); + eval(shift(@insns)); + eval(shift(@insns)); + &veor ($T5,$T5,$T4); + eval(shift(@insns)); + eval(shift(@insns)); + &vshr_u32 ($T4,&Dlo(@X[0]),$sigma1[1]); + eval(shift(@insns)); + eval(shift(@insns)); + &vld1_32 ("{$T0}","[$Ktbl,:128]!"); + eval(shift(@insns)); + eval(shift(@insns)); + &vsli_32 ($T4,&Dlo(@X[0]),32-$sigma1[1]); + eval(shift(@insns)); + eval(shift(@insns)); + &veor ($T5,$T5,$T4); # sigma1(X[16..17]) + eval(shift(@insns)); + eval(shift(@insns)); + &vadd_i32 (&Dhi(@X[0]),&Dhi(@X[0]),$T5);# X[2..3] += sigma1(X[16..17]) + eval(shift(@insns)); + eval(shift(@insns)); + &vadd_i32 ($T0,$T0,@X[0]); + while($#insns>=2) { eval(shift(@insns)); } + &vst1_32 ("{$T0}","[$Xfer,:128]!"); + eval(shift(@insns)); + eval(shift(@insns)); + + push(@X,shift(@X)); # "rotate" X[] +} + +sub Xpreload() +{ use integer; + my $body = shift; + my @insns = (&$body,&$body,&$body,&$body); + my ($a,$b,$c,$d,$e,$f,$g,$h); + + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &vld1_32 ("{$T0}","[$Ktbl,:128]!"); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &vrev32_8 (@X[0],@X[0]); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &vadd_i32 ($T0,$T0,@X[0]); + foreach (@insns) { eval; } # remaining instructions + &vst1_32 ("{$T0}","[$Xfer,:128]!"); + + push(@X,shift(@X)); # "rotate" X[] +} + +sub body_00_15 () { + ( + '($a,$b,$c,$d,$e,$f,$g,$h)=@V;'. + '&add ($h,$h,$t1)', # h+=X[i]+K[i] + '&eor ($t1,$f,$g)', + '&eor ($t0,$e,$e,"ror#".($Sigma1[1]-$Sigma1[0]))', + '&add ($a,$a,$t2)', # h+=Maj(a,b,c) from the past + '&and ($t1,$t1,$e)', + '&eor ($t2,$t0,$e,"ror#".($Sigma1[2]-$Sigma1[0]))', # Sigma1(e) + '&eor ($t0,$a,$a,"ror#".($Sigma0[1]-$Sigma0[0]))', + '&eor ($t1,$t1,$g)', # Ch(e,f,g) + '&add ($h,$h,$t2,"ror#$Sigma1[0]")', # h+=Sigma1(e) + '&eor ($t2,$a,$b)', # a^b, b^c in next round + '&eor ($t0,$t0,$a,"ror#".($Sigma0[2]-$Sigma0[0]))', # Sigma0(a) + '&add ($h,$h,$t1)', # h+=Ch(e,f,g) + '&ldr ($t1,sprintf "[sp,#%d]",4*(($j+1)&15)) if (($j&15)!=15);'. + '&ldr ($t1,"[$Ktbl]") if ($j==15);'. + '&ldr ($t1,"[sp,#64]") if ($j==31)', + '&and ($t3,$t3,$t2)', # (b^c)&=(a^b) + '&add ($d,$d,$h)', # d+=h + '&add ($h,$h,$t0,"ror#$Sigma0[0]");'. # h+=Sigma0(a) + '&eor ($t3,$t3,$b)', # Maj(a,b,c) + '$j++; unshift(@V,pop(@V)); ($t2,$t3)=($t3,$t2);' + ) +} + +$code.=<<___; +#if __ARM_MAX_ARCH__>=7 +.arch armv7-a +.fpu neon + +.type sha256_block_data_order_neon,%function +.align 5 +.skip 16 +sha256_block_data_order_neon: +.LNEON: + stmdb sp!,{r4-r12,lr} + + sub $H,sp,#16*4+16 + adr $Ktbl,K256 + bic $H,$H,#15 @ align for 128-bit stores + mov $t2,sp + mov sp,$H @ alloca + add $len,$inp,$len,lsl#6 @ len to point at the end of inp + + vld1.8 {@X[0]},[$inp]! + vld1.8 {@X[1]},[$inp]! + vld1.8 {@X[2]},[$inp]! + vld1.8 {@X[3]},[$inp]! + vld1.32 {$T0},[$Ktbl,:128]! + vld1.32 {$T1},[$Ktbl,:128]! + vld1.32 {$T2},[$Ktbl,:128]! + vld1.32 {$T3},[$Ktbl,:128]! + vrev32.8 @X[0],@X[0] @ yes, even on + str $ctx,[sp,#64] + vrev32.8 @X[1],@X[1] @ big-endian + str $inp,[sp,#68] + mov $Xfer,sp + vrev32.8 @X[2],@X[2] + str $len,[sp,#72] + vrev32.8 @X[3],@X[3] + str $t2,[sp,#76] @ save original sp + vadd.i32 $T0,$T0,@X[0] + vadd.i32 $T1,$T1,@X[1] + vst1.32 {$T0},[$Xfer,:128]! + vadd.i32 $T2,$T2,@X[2] + vst1.32 {$T1},[$Xfer,:128]! + vadd.i32 $T3,$T3,@X[3] + vst1.32 {$T2},[$Xfer,:128]! + vst1.32 {$T3},[$Xfer,:128]! + + ldmia $ctx,{$A-$H} + sub $Xfer,$Xfer,#64 + ldr $t1,[sp,#0] + eor $t2,$t2,$t2 + eor $t3,$B,$C + b .L_00_48 + +.align 4 +.L_00_48: +___ + &Xupdate(\&body_00_15); + &Xupdate(\&body_00_15); + &Xupdate(\&body_00_15); + &Xupdate(\&body_00_15); +$code.=<<___; + teq $t1,#0 @ check for K256 terminator + ldr $t1,[sp,#0] + sub $Xfer,$Xfer,#64 + bne .L_00_48 + + ldr $inp,[sp,#68] + ldr $t0,[sp,#72] + sub $Ktbl,$Ktbl,#256 @ rewind $Ktbl + teq $inp,$t0 + it eq + subeq $inp,$inp,#64 @ avoid SEGV + vld1.8 {@X[0]},[$inp]! @ load next input block + vld1.8 {@X[1]},[$inp]! + vld1.8 {@X[2]},[$inp]! + vld1.8 {@X[3]},[$inp]! + it ne + strne $inp,[sp,#68] + mov $Xfer,sp +___ + &Xpreload(\&body_00_15); + &Xpreload(\&body_00_15); + &Xpreload(\&body_00_15); + &Xpreload(\&body_00_15); +$code.=<<___; + ldr $t0,[$t1,#0] + add $A,$A,$t2 @ h+=Maj(a,b,c) from the past + ldr $t2,[$t1,#4] + ldr $t3,[$t1,#8] + ldr $t4,[$t1,#12] + add $A,$A,$t0 @ accumulate + ldr $t0,[$t1,#16] + add $B,$B,$t2 + ldr $t2,[$t1,#20] + add $C,$C,$t3 + ldr $t3,[$t1,#24] + add $D,$D,$t4 + ldr $t4,[$t1,#28] + add $E,$E,$t0 + str $A,[$t1],#4 + add $F,$F,$t2 + str $B,[$t1],#4 + add $G,$G,$t3 + str $C,[$t1],#4 + add $H,$H,$t4 + str $D,[$t1],#4 + stmia $t1,{$E-$H} + + ittte ne + movne $Xfer,sp + ldrne $t1,[sp,#0] + eorne $t2,$t2,$t2 + ldreq sp,[sp,#76] @ restore original sp + itt ne + eorne $t3,$B,$C + bne .L_00_48 + + ldmia sp!,{r4-r12,pc} +.size sha256_block_data_order_neon,.-sha256_block_data_order_neon +#endif +___ +}}} +###################################################################### +# ARMv8 stuff +# +{{{ +my ($ABCD,$EFGH,$abcd)=map("q$_",(0..2)); +my @MSG=map("q$_",(8..11)); +my ($W0,$W1,$ABCD_SAVE,$EFGH_SAVE)=map("q$_",(12..15)); +my $Ktbl="r3"; + +$code.=<<___; +#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) + +# if defined(__thumb2__) +# define INST(a,b,c,d) .byte c,d|0xc,a,b +# else +# define INST(a,b,c,d) .byte a,b,c,d +# endif + +.type sha256_block_data_order_armv8,%function +.align 5 +sha256_block_data_order_armv8: +.LARMv8: + vld1.32 {$ABCD,$EFGH},[$ctx] + sub $Ktbl,$Ktbl,#256+32 + add $len,$inp,$len,lsl#6 @ len to point at the end of inp + b .Loop_v8 + +.align 4 +.Loop_v8: + vld1.8 {@MSG[0]-@MSG[1]},[$inp]! + vld1.8 {@MSG[2]-@MSG[3]},[$inp]! + vld1.32 {$W0},[$Ktbl]! + vrev32.8 @MSG[0],@MSG[0] + vrev32.8 @MSG[1],@MSG[1] + vrev32.8 @MSG[2],@MSG[2] + vrev32.8 @MSG[3],@MSG[3] + vmov $ABCD_SAVE,$ABCD @ offload + vmov $EFGH_SAVE,$EFGH + teq $inp,$len +___ +for($i=0;$i<12;$i++) { +$code.=<<___; + vld1.32 {$W1},[$Ktbl]! + vadd.i32 $W0,$W0,@MSG[0] + sha256su0 @MSG[0],@MSG[1] + vmov $abcd,$ABCD + sha256h $ABCD,$EFGH,$W0 + sha256h2 $EFGH,$abcd,$W0 + sha256su1 @MSG[0],@MSG[2],@MSG[3] +___ + ($W0,$W1)=($W1,$W0); push(@MSG,shift(@MSG)); +} +$code.=<<___; + vld1.32 {$W1},[$Ktbl]! + vadd.i32 $W0,$W0,@MSG[0] + vmov $abcd,$ABCD + sha256h $ABCD,$EFGH,$W0 + sha256h2 $EFGH,$abcd,$W0 + + vld1.32 {$W0},[$Ktbl]! + vadd.i32 $W1,$W1,@MSG[1] + vmov $abcd,$ABCD + sha256h $ABCD,$EFGH,$W1 + sha256h2 $EFGH,$abcd,$W1 + + vld1.32 {$W1},[$Ktbl] + vadd.i32 $W0,$W0,@MSG[2] + sub $Ktbl,$Ktbl,#256-16 @ rewind + vmov $abcd,$ABCD + sha256h $ABCD,$EFGH,$W0 + sha256h2 $EFGH,$abcd,$W0 + + vadd.i32 $W1,$W1,@MSG[3] + vmov $abcd,$ABCD + sha256h $ABCD,$EFGH,$W1 + sha256h2 $EFGH,$abcd,$W1 + + vadd.i32 $ABCD,$ABCD,$ABCD_SAVE + vadd.i32 $EFGH,$EFGH,$EFGH_SAVE + it ne + bne .Loop_v8 + + vst1.32 {$ABCD,$EFGH},[$ctx] + + ret @ bx lr +.size sha256_block_data_order_armv8,.-sha256_block_data_order_armv8 +#endif +___ +}}} +$code.=<<___; +.asciz "SHA256 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by " +___ + +open SELF,$0; +while() { + next if (/^#!/); + last if (!s/^#/@/ and !/^$/); + print; +} +close SELF; + +{ my %opcode = ( + "sha256h" => 0xf3000c40, "sha256h2" => 0xf3100c40, + "sha256su0" => 0xf3ba03c0, "sha256su1" => 0xf3200c40 ); + + sub unsha256 { + my ($mnemonic,$arg)=@_; + + if ($arg =~ m/q([0-9]+)(?:,\s*q([0-9]+))?,\s*q([0-9]+)/o) { + my $word = $opcode{$mnemonic}|(($1&7)<<13)|(($1&8)<<19) + |(($2&7)<<17)|(($2&8)<<4) + |(($3&7)<<1) |(($3&8)<<2); + # since ARMv7 instructions are always encoded little-endian. + # correct solution is to use .inst directive, but older + # assemblers don't implement it:-( + sprintf "INST(0x%02x,0x%02x,0x%02x,0x%02x)\t@ %s %s", + $word&0xff,($word>>8)&0xff, + ($word>>16)&0xff,($word>>24)&0xff, + $mnemonic,$arg; + } + } +} + +foreach (split($/,$code)) { + + s/\`([^\`]*)\`/eval $1/geo; + + s/\b(sha256\w+)\s+(q.*)/unsha256($1,$2)/geo; + + s/\bret\b/bx lr/go or + s/\bbx\s+lr\b/.word\t0xe12fff1e/go; # make it possible to compile with -march=armv4 + + print $_,"\n"; +} + +close STDOUT or die "error closing STDOUT"; # enforce flush diff --git a/vendor/ring/crypto/fipsmodule/sha/asm/sha512-armv4.pl b/vendor/ring/crypto/fipsmodule/sha/asm/sha512-armv4.pl new file mode 100644 index 00000000..21c7ebdd --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/sha/asm/sha512-armv4.pl @@ -0,0 +1,671 @@ +#! /usr/bin/env perl +# Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# +# Permission to use under GPL terms is granted. +# ==================================================================== + +# SHA512 block procedure for ARMv4. September 2007. + +# This code is ~4.5 (four and a half) times faster than code generated +# by gcc 3.4 and it spends ~72 clock cycles per byte [on single-issue +# Xscale PXA250 core]. +# +# July 2010. +# +# Rescheduling for dual-issue pipeline resulted in 6% improvement on +# Cortex A8 core and ~40 cycles per processed byte. + +# February 2011. +# +# Profiler-assisted and platform-specific optimization resulted in 7% +# improvement on Coxtex A8 core and ~38 cycles per byte. + +# March 2011. +# +# Add NEON implementation. On Cortex A8 it was measured to process +# one byte in 23.3 cycles or ~60% faster than integer-only code. + +# August 2012. +# +# Improve NEON performance by 12% on Snapdragon S4. In absolute +# terms it's 22.6 cycles per byte, which is disappointing result. +# Technical writers asserted that 3-way S4 pipeline can sustain +# multiple NEON instructions per cycle, but dual NEON issue could +# not be observed, see http://www.openssl.org/~appro/Snapdragon-S4.html +# for further details. On side note Cortex-A15 processes one byte in +# 16 cycles. + +# Byte order [in]dependence. ========================================= +# +# Originally caller was expected to maintain specific *dword* order in +# h[0-7], namely with most significant dword at *lower* address, which +# was reflected in below two parameters as 0 and 4. Now caller is +# expected to maintain native byte order for whole 64-bit values. +$hi="HI"; +$lo="LO"; +# ==================================================================== + +$flavour = shift; +if ($flavour=~/\w[\w\-]*\.\w+$/) { $output=$flavour; undef $flavour; } +else { while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} } + +if ($flavour && $flavour ne "void") { + $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; + ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or + ( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or + die "can't locate arm-xlate.pl"; + + open OUT,"| \"$^X\" $xlate $flavour $output"; + *STDOUT=*OUT; +} else { + open OUT,">$output"; + *STDOUT=*OUT; +} + +$ctx="r0"; # parameter block +$inp="r1"; +$len="r2"; + +$Tlo="r3"; +$Thi="r4"; +$Alo="r5"; +$Ahi="r6"; +$Elo="r7"; +$Ehi="r8"; +$t0="r9"; +$t1="r10"; +$t2="r11"; +$t3="r12"; +############ r13 is stack pointer +$Ktbl="r14"; +############ r15 is program counter + +$Aoff=8*0; +$Boff=8*1; +$Coff=8*2; +$Doff=8*3; +$Eoff=8*4; +$Foff=8*5; +$Goff=8*6; +$Hoff=8*7; +$Xoff=8*8; + +sub BODY_00_15() { +my $magic = shift; +$code.=<<___; + @ Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41)) + @ LO lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23 + @ HI hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23 + mov $t0,$Elo,lsr#14 + str $Tlo,[sp,#$Xoff+0] + mov $t1,$Ehi,lsr#14 + str $Thi,[sp,#$Xoff+4] + eor $t0,$t0,$Ehi,lsl#18 + ldr $t2,[sp,#$Hoff+0] @ h.lo + eor $t1,$t1,$Elo,lsl#18 + ldr $t3,[sp,#$Hoff+4] @ h.hi + eor $t0,$t0,$Elo,lsr#18 + eor $t1,$t1,$Ehi,lsr#18 + eor $t0,$t0,$Ehi,lsl#14 + eor $t1,$t1,$Elo,lsl#14 + eor $t0,$t0,$Ehi,lsr#9 + eor $t1,$t1,$Elo,lsr#9 + eor $t0,$t0,$Elo,lsl#23 + eor $t1,$t1,$Ehi,lsl#23 @ Sigma1(e) + adds $Tlo,$Tlo,$t0 + ldr $t0,[sp,#$Foff+0] @ f.lo + adc $Thi,$Thi,$t1 @ T += Sigma1(e) + ldr $t1,[sp,#$Foff+4] @ f.hi + adds $Tlo,$Tlo,$t2 + ldr $t2,[sp,#$Goff+0] @ g.lo + adc $Thi,$Thi,$t3 @ T += h + ldr $t3,[sp,#$Goff+4] @ g.hi + + eor $t0,$t0,$t2 + str $Elo,[sp,#$Eoff+0] + eor $t1,$t1,$t3 + str $Ehi,[sp,#$Eoff+4] + and $t0,$t0,$Elo + str $Alo,[sp,#$Aoff+0] + and $t1,$t1,$Ehi + str $Ahi,[sp,#$Aoff+4] + eor $t0,$t0,$t2 + ldr $t2,[$Ktbl,#$lo] @ K[i].lo + eor $t1,$t1,$t3 @ Ch(e,f,g) + ldr $t3,[$Ktbl,#$hi] @ K[i].hi + + adds $Tlo,$Tlo,$t0 + ldr $Elo,[sp,#$Doff+0] @ d.lo + adc $Thi,$Thi,$t1 @ T += Ch(e,f,g) + ldr $Ehi,[sp,#$Doff+4] @ d.hi + adds $Tlo,$Tlo,$t2 + and $t0,$t2,#0xff + adc $Thi,$Thi,$t3 @ T += K[i] + adds $Elo,$Elo,$Tlo + ldr $t2,[sp,#$Boff+0] @ b.lo + adc $Ehi,$Ehi,$Thi @ d += T + teq $t0,#$magic + + ldr $t3,[sp,#$Coff+0] @ c.lo +#if __ARM_ARCH__>=7 + it eq @ Thumb2 thing, sanity check in ARM +#endif + orreq $Ktbl,$Ktbl,#1 + @ Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39)) + @ LO lo>>28^hi<<4 ^ hi>>2^lo<<30 ^ hi>>7^lo<<25 + @ HI hi>>28^lo<<4 ^ lo>>2^hi<<30 ^ lo>>7^hi<<25 + mov $t0,$Alo,lsr#28 + mov $t1,$Ahi,lsr#28 + eor $t0,$t0,$Ahi,lsl#4 + eor $t1,$t1,$Alo,lsl#4 + eor $t0,$t0,$Ahi,lsr#2 + eor $t1,$t1,$Alo,lsr#2 + eor $t0,$t0,$Alo,lsl#30 + eor $t1,$t1,$Ahi,lsl#30 + eor $t0,$t0,$Ahi,lsr#7 + eor $t1,$t1,$Alo,lsr#7 + eor $t0,$t0,$Alo,lsl#25 + eor $t1,$t1,$Ahi,lsl#25 @ Sigma0(a) + adds $Tlo,$Tlo,$t0 + and $t0,$Alo,$t2 + adc $Thi,$Thi,$t1 @ T += Sigma0(a) + + ldr $t1,[sp,#$Boff+4] @ b.hi + orr $Alo,$Alo,$t2 + ldr $t2,[sp,#$Coff+4] @ c.hi + and $Alo,$Alo,$t3 + and $t3,$Ahi,$t1 + orr $Ahi,$Ahi,$t1 + orr $Alo,$Alo,$t0 @ Maj(a,b,c).lo + and $Ahi,$Ahi,$t2 + adds $Alo,$Alo,$Tlo + orr $Ahi,$Ahi,$t3 @ Maj(a,b,c).hi + sub sp,sp,#8 + adc $Ahi,$Ahi,$Thi @ h += T + tst $Ktbl,#1 + add $Ktbl,$Ktbl,#8 +___ +} +$code=<<___; +#ifndef __KERNEL__ +# include +# define VFP_ABI_PUSH vstmdb sp!,{d8-d15} +# define VFP_ABI_POP vldmia sp!,{d8-d15} +#else +# define __ARM_ARCH__ __LINUX_ARM_ARCH__ +# define __ARM_MAX_ARCH__ 7 +# define VFP_ABI_PUSH +# define VFP_ABI_POP +#endif + +@ Silence ARMv8 deprecated IT instruction warnings. This file is used by both +@ ARMv7 and ARMv8 processors and does not use ARMv8 instructions. +.arch armv7-a + +#ifdef __ARMEL__ +# define LO 0 +# define HI 4 +# define WORD64(hi0,lo0,hi1,lo1) .word lo0,hi0, lo1,hi1 +#else +# define HI 0 +# define LO 4 +# define WORD64(hi0,lo0,hi1,lo1) .word hi0,lo0, hi1,lo1 +#endif + +.text +#if defined(__thumb2__) +.syntax unified +.thumb +# define adrl adr +#else +.code 32 +#endif + +.type K512,%object +.align 5 +K512: +WORD64(0x428a2f98,0xd728ae22, 0x71374491,0x23ef65cd) +WORD64(0xb5c0fbcf,0xec4d3b2f, 0xe9b5dba5,0x8189dbbc) +WORD64(0x3956c25b,0xf348b538, 0x59f111f1,0xb605d019) +WORD64(0x923f82a4,0xaf194f9b, 0xab1c5ed5,0xda6d8118) +WORD64(0xd807aa98,0xa3030242, 0x12835b01,0x45706fbe) +WORD64(0x243185be,0x4ee4b28c, 0x550c7dc3,0xd5ffb4e2) +WORD64(0x72be5d74,0xf27b896f, 0x80deb1fe,0x3b1696b1) +WORD64(0x9bdc06a7,0x25c71235, 0xc19bf174,0xcf692694) +WORD64(0xe49b69c1,0x9ef14ad2, 0xefbe4786,0x384f25e3) +WORD64(0x0fc19dc6,0x8b8cd5b5, 0x240ca1cc,0x77ac9c65) +WORD64(0x2de92c6f,0x592b0275, 0x4a7484aa,0x6ea6e483) +WORD64(0x5cb0a9dc,0xbd41fbd4, 0x76f988da,0x831153b5) +WORD64(0x983e5152,0xee66dfab, 0xa831c66d,0x2db43210) +WORD64(0xb00327c8,0x98fb213f, 0xbf597fc7,0xbeef0ee4) +WORD64(0xc6e00bf3,0x3da88fc2, 0xd5a79147,0x930aa725) +WORD64(0x06ca6351,0xe003826f, 0x14292967,0x0a0e6e70) +WORD64(0x27b70a85,0x46d22ffc, 0x2e1b2138,0x5c26c926) +WORD64(0x4d2c6dfc,0x5ac42aed, 0x53380d13,0x9d95b3df) +WORD64(0x650a7354,0x8baf63de, 0x766a0abb,0x3c77b2a8) +WORD64(0x81c2c92e,0x47edaee6, 0x92722c85,0x1482353b) +WORD64(0xa2bfe8a1,0x4cf10364, 0xa81a664b,0xbc423001) +WORD64(0xc24b8b70,0xd0f89791, 0xc76c51a3,0x0654be30) +WORD64(0xd192e819,0xd6ef5218, 0xd6990624,0x5565a910) +WORD64(0xf40e3585,0x5771202a, 0x106aa070,0x32bbd1b8) +WORD64(0x19a4c116,0xb8d2d0c8, 0x1e376c08,0x5141ab53) +WORD64(0x2748774c,0xdf8eeb99, 0x34b0bcb5,0xe19b48a8) +WORD64(0x391c0cb3,0xc5c95a63, 0x4ed8aa4a,0xe3418acb) +WORD64(0x5b9cca4f,0x7763e373, 0x682e6ff3,0xd6b2b8a3) +WORD64(0x748f82ee,0x5defb2fc, 0x78a5636f,0x43172f60) +WORD64(0x84c87814,0xa1f0ab72, 0x8cc70208,0x1a6439ec) +WORD64(0x90befffa,0x23631e28, 0xa4506ceb,0xde82bde9) +WORD64(0xbef9a3f7,0xb2c67915, 0xc67178f2,0xe372532b) +WORD64(0xca273ece,0xea26619c, 0xd186b8c7,0x21c0c207) +WORD64(0xeada7dd6,0xcde0eb1e, 0xf57d4f7f,0xee6ed178) +WORD64(0x06f067aa,0x72176fba, 0x0a637dc5,0xa2c898a6) +WORD64(0x113f9804,0xbef90dae, 0x1b710b35,0x131c471b) +WORD64(0x28db77f5,0x23047d84, 0x32caab7b,0x40c72493) +WORD64(0x3c9ebe0a,0x15c9bebc, 0x431d67c4,0x9c100d4c) +WORD64(0x4cc5d4be,0xcb3e42b6, 0x597f299c,0xfc657e2a) +WORD64(0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817) +.size K512,.-K512 +#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) +.extern GFp_armcap_P +.hidden GFp_armcap_P +.LOPENSSL_armcap: +.word GFp_armcap_P-.Lsha512_block_data_order +.skip 32-4 +#else +.skip 32 +#endif + +.global GFp_sha512_block_data_order +.type GFp_sha512_block_data_order,%function +GFp_sha512_block_data_order: +.Lsha512_block_data_order: +#if __ARM_ARCH__<7 && !defined(__thumb2__) + sub r3,pc,#8 @ GFp_sha512_block_data_order +#else + adr r3,.Lsha512_block_data_order +#endif +#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) + ldr r12,.LOPENSSL_armcap + ldr r12,[r3,r12] @ GFp_armcap_P +#ifdef __APPLE__ + ldr r12,[r12] +#endif + tst r12,#ARMV7_NEON + bne .LNEON +#endif + add $len,$inp,$len,lsl#7 @ len to point at the end of inp + stmdb sp!,{r4-r12,lr} + sub $Ktbl,r3,#672 @ K512 + sub sp,sp,#9*8 + + ldr $Elo,[$ctx,#$Eoff+$lo] + ldr $Ehi,[$ctx,#$Eoff+$hi] + ldr $t0, [$ctx,#$Goff+$lo] + ldr $t1, [$ctx,#$Goff+$hi] + ldr $t2, [$ctx,#$Hoff+$lo] + ldr $t3, [$ctx,#$Hoff+$hi] +.Loop: + str $t0, [sp,#$Goff+0] + str $t1, [sp,#$Goff+4] + str $t2, [sp,#$Hoff+0] + str $t3, [sp,#$Hoff+4] + ldr $Alo,[$ctx,#$Aoff+$lo] + ldr $Ahi,[$ctx,#$Aoff+$hi] + ldr $Tlo,[$ctx,#$Boff+$lo] + ldr $Thi,[$ctx,#$Boff+$hi] + ldr $t0, [$ctx,#$Coff+$lo] + ldr $t1, [$ctx,#$Coff+$hi] + ldr $t2, [$ctx,#$Doff+$lo] + ldr $t3, [$ctx,#$Doff+$hi] + str $Tlo,[sp,#$Boff+0] + str $Thi,[sp,#$Boff+4] + str $t0, [sp,#$Coff+0] + str $t1, [sp,#$Coff+4] + str $t2, [sp,#$Doff+0] + str $t3, [sp,#$Doff+4] + ldr $Tlo,[$ctx,#$Foff+$lo] + ldr $Thi,[$ctx,#$Foff+$hi] + str $Tlo,[sp,#$Foff+0] + str $Thi,[sp,#$Foff+4] + +.L00_15: +#if __ARM_ARCH__<7 + ldrb $Tlo,[$inp,#7] + ldrb $t0, [$inp,#6] + ldrb $t1, [$inp,#5] + ldrb $t2, [$inp,#4] + ldrb $Thi,[$inp,#3] + ldrb $t3, [$inp,#2] + orr $Tlo,$Tlo,$t0,lsl#8 + ldrb $t0, [$inp,#1] + orr $Tlo,$Tlo,$t1,lsl#16 + ldrb $t1, [$inp],#8 + orr $Tlo,$Tlo,$t2,lsl#24 + orr $Thi,$Thi,$t3,lsl#8 + orr $Thi,$Thi,$t0,lsl#16 + orr $Thi,$Thi,$t1,lsl#24 +#else + ldr $Tlo,[$inp,#4] + ldr $Thi,[$inp],#8 +#ifdef __ARMEL__ + rev $Tlo,$Tlo + rev $Thi,$Thi +#endif +#endif +___ + &BODY_00_15(0x94); +$code.=<<___; + tst $Ktbl,#1 + beq .L00_15 + ldr $t0,[sp,#`$Xoff+8*(16-1)`+0] + ldr $t1,[sp,#`$Xoff+8*(16-1)`+4] + bic $Ktbl,$Ktbl,#1 +.L16_79: + @ sigma0(x) (ROTR((x),1) ^ ROTR((x),8) ^ ((x)>>7)) + @ LO lo>>1^hi<<31 ^ lo>>8^hi<<24 ^ lo>>7^hi<<25 + @ HI hi>>1^lo<<31 ^ hi>>8^lo<<24 ^ hi>>7 + mov $Tlo,$t0,lsr#1 + ldr $t2,[sp,#`$Xoff+8*(16-14)`+0] + mov $Thi,$t1,lsr#1 + ldr $t3,[sp,#`$Xoff+8*(16-14)`+4] + eor $Tlo,$Tlo,$t1,lsl#31 + eor $Thi,$Thi,$t0,lsl#31 + eor $Tlo,$Tlo,$t0,lsr#8 + eor $Thi,$Thi,$t1,lsr#8 + eor $Tlo,$Tlo,$t1,lsl#24 + eor $Thi,$Thi,$t0,lsl#24 + eor $Tlo,$Tlo,$t0,lsr#7 + eor $Thi,$Thi,$t1,lsr#7 + eor $Tlo,$Tlo,$t1,lsl#25 + + @ sigma1(x) (ROTR((x),19) ^ ROTR((x),61) ^ ((x)>>6)) + @ LO lo>>19^hi<<13 ^ hi>>29^lo<<3 ^ lo>>6^hi<<26 + @ HI hi>>19^lo<<13 ^ lo>>29^hi<<3 ^ hi>>6 + mov $t0,$t2,lsr#19 + mov $t1,$t3,lsr#19 + eor $t0,$t0,$t3,lsl#13 + eor $t1,$t1,$t2,lsl#13 + eor $t0,$t0,$t3,lsr#29 + eor $t1,$t1,$t2,lsr#29 + eor $t0,$t0,$t2,lsl#3 + eor $t1,$t1,$t3,lsl#3 + eor $t0,$t0,$t2,lsr#6 + eor $t1,$t1,$t3,lsr#6 + ldr $t2,[sp,#`$Xoff+8*(16-9)`+0] + eor $t0,$t0,$t3,lsl#26 + + ldr $t3,[sp,#`$Xoff+8*(16-9)`+4] + adds $Tlo,$Tlo,$t0 + ldr $t0,[sp,#`$Xoff+8*16`+0] + adc $Thi,$Thi,$t1 + + ldr $t1,[sp,#`$Xoff+8*16`+4] + adds $Tlo,$Tlo,$t2 + adc $Thi,$Thi,$t3 + adds $Tlo,$Tlo,$t0 + adc $Thi,$Thi,$t1 +___ + &BODY_00_15(0x17); +$code.=<<___; +#if __ARM_ARCH__>=7 + ittt eq @ Thumb2 thing, sanity check in ARM +#endif + ldreq $t0,[sp,#`$Xoff+8*(16-1)`+0] + ldreq $t1,[sp,#`$Xoff+8*(16-1)`+4] + beq .L16_79 + bic $Ktbl,$Ktbl,#1 + + ldr $Tlo,[sp,#$Boff+0] + ldr $Thi,[sp,#$Boff+4] + ldr $t0, [$ctx,#$Aoff+$lo] + ldr $t1, [$ctx,#$Aoff+$hi] + ldr $t2, [$ctx,#$Boff+$lo] + ldr $t3, [$ctx,#$Boff+$hi] + adds $t0,$Alo,$t0 + str $t0, [$ctx,#$Aoff+$lo] + adc $t1,$Ahi,$t1 + str $t1, [$ctx,#$Aoff+$hi] + adds $t2,$Tlo,$t2 + str $t2, [$ctx,#$Boff+$lo] + adc $t3,$Thi,$t3 + str $t3, [$ctx,#$Boff+$hi] + + ldr $Alo,[sp,#$Coff+0] + ldr $Ahi,[sp,#$Coff+4] + ldr $Tlo,[sp,#$Doff+0] + ldr $Thi,[sp,#$Doff+4] + ldr $t0, [$ctx,#$Coff+$lo] + ldr $t1, [$ctx,#$Coff+$hi] + ldr $t2, [$ctx,#$Doff+$lo] + ldr $t3, [$ctx,#$Doff+$hi] + adds $t0,$Alo,$t0 + str $t0, [$ctx,#$Coff+$lo] + adc $t1,$Ahi,$t1 + str $t1, [$ctx,#$Coff+$hi] + adds $t2,$Tlo,$t2 + str $t2, [$ctx,#$Doff+$lo] + adc $t3,$Thi,$t3 + str $t3, [$ctx,#$Doff+$hi] + + ldr $Tlo,[sp,#$Foff+0] + ldr $Thi,[sp,#$Foff+4] + ldr $t0, [$ctx,#$Eoff+$lo] + ldr $t1, [$ctx,#$Eoff+$hi] + ldr $t2, [$ctx,#$Foff+$lo] + ldr $t3, [$ctx,#$Foff+$hi] + adds $Elo,$Elo,$t0 + str $Elo,[$ctx,#$Eoff+$lo] + adc $Ehi,$Ehi,$t1 + str $Ehi,[$ctx,#$Eoff+$hi] + adds $t2,$Tlo,$t2 + str $t2, [$ctx,#$Foff+$lo] + adc $t3,$Thi,$t3 + str $t3, [$ctx,#$Foff+$hi] + + ldr $Alo,[sp,#$Goff+0] + ldr $Ahi,[sp,#$Goff+4] + ldr $Tlo,[sp,#$Hoff+0] + ldr $Thi,[sp,#$Hoff+4] + ldr $t0, [$ctx,#$Goff+$lo] + ldr $t1, [$ctx,#$Goff+$hi] + ldr $t2, [$ctx,#$Hoff+$lo] + ldr $t3, [$ctx,#$Hoff+$hi] + adds $t0,$Alo,$t0 + str $t0, [$ctx,#$Goff+$lo] + adc $t1,$Ahi,$t1 + str $t1, [$ctx,#$Goff+$hi] + adds $t2,$Tlo,$t2 + str $t2, [$ctx,#$Hoff+$lo] + adc $t3,$Thi,$t3 + str $t3, [$ctx,#$Hoff+$hi] + + add sp,sp,#640 + sub $Ktbl,$Ktbl,#640 + + teq $inp,$len + bne .Loop + + add sp,sp,#8*9 @ destroy frame +#if __ARM_ARCH__>=5 + ldmia sp!,{r4-r12,pc} +#else + ldmia sp!,{r4-r12,lr} + tst lr,#1 + moveq pc,lr @ be binary compatible with V4, yet + bx lr @ interoperable with Thumb ISA:-) +#endif +.size GFp_sha512_block_data_order,.-GFp_sha512_block_data_order +___ + +{ +my @Sigma0=(28,34,39); +my @Sigma1=(14,18,41); +my @sigma0=(1, 8, 7); +my @sigma1=(19,61,6); + +my $Ktbl="r3"; +my $cnt="r12"; # volatile register known as ip, intra-procedure-call scratch + +my @X=map("d$_",(0..15)); +my @V=($A,$B,$C,$D,$E,$F,$G,$H)=map("d$_",(16..23)); + +sub NEON_00_15() { +my $i=shift; +my ($a,$b,$c,$d,$e,$f,$g,$h)=@_; +my ($t0,$t1,$t2,$T1,$K,$Ch,$Maj)=map("d$_",(24..31)); # temps + +$code.=<<___ if ($i<16 || $i&1); + vshr.u64 $t0,$e,#@Sigma1[0] @ $i +#if $i<16 + vld1.64 {@X[$i%16]},[$inp]! @ handles unaligned +#endif + vshr.u64 $t1,$e,#@Sigma1[1] +#if $i>0 + vadd.i64 $a,$Maj @ h+=Maj from the past +#endif + vshr.u64 $t2,$e,#@Sigma1[2] +___ +$code.=<<___; + vld1.64 {$K},[$Ktbl,:64]! @ K[i++] + vsli.64 $t0,$e,#`64-@Sigma1[0]` + vsli.64 $t1,$e,#`64-@Sigma1[1]` + vmov $Ch,$e + vsli.64 $t2,$e,#`64-@Sigma1[2]` +#if $i<16 && defined(__ARMEL__) + vrev64.8 @X[$i],@X[$i] +#endif + veor $t1,$t0 + vbsl $Ch,$f,$g @ Ch(e,f,g) + vshr.u64 $t0,$a,#@Sigma0[0] + veor $t2,$t1 @ Sigma1(e) + vadd.i64 $T1,$Ch,$h + vshr.u64 $t1,$a,#@Sigma0[1] + vsli.64 $t0,$a,#`64-@Sigma0[0]` + vadd.i64 $T1,$t2 + vshr.u64 $t2,$a,#@Sigma0[2] + vadd.i64 $K,@X[$i%16] + vsli.64 $t1,$a,#`64-@Sigma0[1]` + veor $Maj,$a,$b + vsli.64 $t2,$a,#`64-@Sigma0[2]` + veor $h,$t0,$t1 + vadd.i64 $T1,$K + vbsl $Maj,$c,$b @ Maj(a,b,c) + veor $h,$t2 @ Sigma0(a) + vadd.i64 $d,$T1 + vadd.i64 $Maj,$T1 + @ vadd.i64 $h,$Maj +___ +} + +sub NEON_16_79() { +my $i=shift; + +if ($i&1) { &NEON_00_15($i,@_); return; } + +# 2x-vectorized, therefore runs every 2nd round +my @X=map("q$_",(0..7)); # view @X as 128-bit vector +my ($t0,$t1,$s0,$s1) = map("q$_",(12..15)); # temps +my ($d0,$d1,$d2) = map("d$_",(24..26)); # temps from NEON_00_15 +my $e=@_[4]; # $e from NEON_00_15 +$i /= 2; +$code.=<<___; + vshr.u64 $t0,@X[($i+7)%8],#@sigma1[0] + vshr.u64 $t1,@X[($i+7)%8],#@sigma1[1] + vadd.i64 @_[0],d30 @ h+=Maj from the past + vshr.u64 $s1,@X[($i+7)%8],#@sigma1[2] + vsli.64 $t0,@X[($i+7)%8],#`64-@sigma1[0]` + vext.8 $s0,@X[$i%8],@X[($i+1)%8],#8 @ X[i+1] + vsli.64 $t1,@X[($i+7)%8],#`64-@sigma1[1]` + veor $s1,$t0 + vshr.u64 $t0,$s0,#@sigma0[0] + veor $s1,$t1 @ sigma1(X[i+14]) + vshr.u64 $t1,$s0,#@sigma0[1] + vadd.i64 @X[$i%8],$s1 + vshr.u64 $s1,$s0,#@sigma0[2] + vsli.64 $t0,$s0,#`64-@sigma0[0]` + vsli.64 $t1,$s0,#`64-@sigma0[1]` + vext.8 $s0,@X[($i+4)%8],@X[($i+5)%8],#8 @ X[i+9] + veor $s1,$t0 + vshr.u64 $d0,$e,#@Sigma1[0] @ from NEON_00_15 + vadd.i64 @X[$i%8],$s0 + vshr.u64 $d1,$e,#@Sigma1[1] @ from NEON_00_15 + veor $s1,$t1 @ sigma0(X[i+1]) + vshr.u64 $d2,$e,#@Sigma1[2] @ from NEON_00_15 + vadd.i64 @X[$i%8],$s1 +___ + &NEON_00_15(2*$i,@_); +} + +$code.=<<___; +#if __ARM_MAX_ARCH__>=7 +.arch armv7-a +.fpu neon + +.type sha512_block_data_order_neon,%function +.align 4 +sha512_block_data_order_neon: +.LNEON: + dmb @ errata #451034 on early Cortex A8 + add $len,$inp,$len,lsl#7 @ len to point at the end of inp + adr $Ktbl,K512 + VFP_ABI_PUSH + vldmia $ctx,{$A-$H} @ load context +.Loop_neon: +___ +for($i=0;$i<16;$i++) { &NEON_00_15($i,@V); unshift(@V,pop(@V)); } +$code.=<<___; + mov $cnt,#4 +.L16_79_neon: + subs $cnt,#1 +___ +for(;$i<32;$i++) { &NEON_16_79($i,@V); unshift(@V,pop(@V)); } +$code.=<<___; + bne .L16_79_neon + + vadd.i64 $A,d30 @ h+=Maj from the past + vldmia $ctx,{d24-d31} @ load context to temp + vadd.i64 q8,q12 @ vectorized accumulate + vadd.i64 q9,q13 + vadd.i64 q10,q14 + vadd.i64 q11,q15 + vstmia $ctx,{$A-$H} @ save context + teq $inp,$len + sub $Ktbl,#640 @ rewind K512 + bne .Loop_neon + + VFP_ABI_POP + ret @ bx lr +.size sha512_block_data_order_neon,.-sha512_block_data_order_neon +#endif +___ +} +$code.=<<___; +.asciz "SHA512 block transform for ARMv4/NEON, CRYPTOGAMS by " +___ + +$code =~ s/\`([^\`]*)\`/eval $1/gem; +$code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm; # make it possible to compile with -march=armv4 +$code =~ s/\bret\b/bx lr/gm; + +open SELF,$0; +while() { + next if (/^#!/); + last if (!s/^#/@/ and !/^$/); + print; +} +close SELF; + +print $code; +close STDOUT or die "error closing STDOUT"; # enforce flush diff --git a/vendor/ring/crypto/fipsmodule/sha/asm/sha512-armv8.pl b/vendor/ring/crypto/fipsmodule/sha/asm/sha512-armv8.pl new file mode 100644 index 00000000..bb80b7c9 --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/sha/asm/sha512-armv8.pl @@ -0,0 +1,462 @@ +#! /usr/bin/env perl +# Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# +# Permission to use under GPLv2 terms is granted. +# ==================================================================== +# +# SHA256/512 for ARMv8. +# +# Performance in cycles per processed byte and improvement coefficient +# over code generated with "default" compiler: +# +# SHA256-hw SHA256(*) SHA512 +# Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**)) +# Cortex-A53 2.38 15.5 (+115%) 10.0 (+150%(***)) +# Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***)) +# Denver 2.01 10.5 (+26%) 6.70 (+8%) +# X-Gene 20.0 (+100%) 12.8 (+300%(***)) +# Mongoose 2.36 13.0 (+50%) 8.36 (+33%) +# +# (*) Software SHA256 results are of lesser relevance, presented +# mostly for informational purposes. +# (**) The result is a trade-off: it's possible to improve it by +# 10% (or by 1 cycle per round), but at the cost of 20% loss +# on Cortex-A53 (or by 4 cycles per round). +# (***) Super-impressive coefficients over gcc-generated code are +# indication of some compiler "pathology", most notably code +# generated with -mgeneral-regs-only is significanty faster +# and the gap is only 40-90%. + +$output=pop; +$flavour=pop; + +if ($flavour && $flavour ne "void") { + $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; + ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or + ( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or + die "can't locate arm-xlate.pl"; + + open OUT,"| \"$^X\" $xlate $flavour $output"; + *STDOUT=*OUT; +} else { + open OUT,">$output"; + *STDOUT=*OUT; +} + +if ($output =~ /sha512-armv8/) { + $BITS=512; + $SZ=8; + @Sigma0=(28,34,39); + @Sigma1=(14,18,41); + @sigma0=(1, 8, 7); + @sigma1=(19,61, 6); + $rounds=80; + $reg_t="x"; +} else { + $BITS=256; + $SZ=4; + @Sigma0=( 2,13,22); + @Sigma1=( 6,11,25); + @sigma0=( 7,18, 3); + @sigma1=(17,19,10); + $rounds=64; + $reg_t="w"; +} + +$func="GFp_sha${BITS}_block_data_order"; + +($ctx,$inp,$num,$Ktbl)=map("x$_",(0..2,30)); + +@X=map("$reg_t$_",(3..15,0..2)); +@V=($A,$B,$C,$D,$E,$F,$G,$H)=map("$reg_t$_",(20..27)); +($t0,$t1,$t2,$t3)=map("$reg_t$_",(16,17,19,28)); + +sub BODY_00_xx { +my ($i,$a,$b,$c,$d,$e,$f,$g,$h)=@_; +my $j=($i+1)&15; +my ($T0,$T1,$T2)=(@X[($i-8)&15],@X[($i-9)&15],@X[($i-10)&15]); + $T0=@X[$i+3] if ($i<11); + +$code.=<<___ if ($i<16); +#ifndef __ARMEB__ + rev @X[$i],@X[$i] // $i +#endif +___ +$code.=<<___ if ($i<13 && ($i&1)); + ldp @X[$i+1],@X[$i+2],[$inp],#2*$SZ +___ +$code.=<<___ if ($i==13); + ldp @X[14],@X[15],[$inp] +___ +$code.=<<___ if ($i>=14); + ldr @X[($i-11)&15],[sp,#`$SZ*(($i-11)%4)`] +___ +$code.=<<___ if ($i>0 && $i<16); + add $a,$a,$t1 // h+=Sigma0(a) +___ +$code.=<<___ if ($i>=11); + str @X[($i-8)&15],[sp,#`$SZ*(($i-8)%4)`] +___ +# While ARMv8 specifies merged rotate-n-logical operation such as +# 'eor x,y,z,ror#n', it was found to negatively affect performance +# on Apple A7. The reason seems to be that it requires even 'y' to +# be available earlier. This means that such merged instruction is +# not necessarily best choice on critical path... On the other hand +# Cortex-A5x handles merged instructions much better than disjoint +# rotate and logical... See (**) footnote above. +$code.=<<___ if ($i<15); + ror $t0,$e,#$Sigma1[0] + add $h,$h,$t2 // h+=K[i] + eor $T0,$e,$e,ror#`$Sigma1[2]-$Sigma1[1]` + and $t1,$f,$e + bic $t2,$g,$e + add $h,$h,@X[$i&15] // h+=X[i] + orr $t1,$t1,$t2 // Ch(e,f,g) + eor $t2,$a,$b // a^b, b^c in next round + eor $t0,$t0,$T0,ror#$Sigma1[1] // Sigma1(e) + ror $T0,$a,#$Sigma0[0] + add $h,$h,$t1 // h+=Ch(e,f,g) + eor $t1,$a,$a,ror#`$Sigma0[2]-$Sigma0[1]` + add $h,$h,$t0 // h+=Sigma1(e) + and $t3,$t3,$t2 // (b^c)&=(a^b) + add $d,$d,$h // d+=h + eor $t3,$t3,$b // Maj(a,b,c) + eor $t1,$T0,$t1,ror#$Sigma0[1] // Sigma0(a) + add $h,$h,$t3 // h+=Maj(a,b,c) + ldr $t3,[$Ktbl],#$SZ // *K++, $t2 in next round + //add $h,$h,$t1 // h+=Sigma0(a) +___ +$code.=<<___ if ($i>=15); + ror $t0,$e,#$Sigma1[0] + add $h,$h,$t2 // h+=K[i] + ror $T1,@X[($j+1)&15],#$sigma0[0] + and $t1,$f,$e + ror $T2,@X[($j+14)&15],#$sigma1[0] + bic $t2,$g,$e + ror $T0,$a,#$Sigma0[0] + add $h,$h,@X[$i&15] // h+=X[i] + eor $t0,$t0,$e,ror#$Sigma1[1] + eor $T1,$T1,@X[($j+1)&15],ror#$sigma0[1] + orr $t1,$t1,$t2 // Ch(e,f,g) + eor $t2,$a,$b // a^b, b^c in next round + eor $t0,$t0,$e,ror#$Sigma1[2] // Sigma1(e) + eor $T0,$T0,$a,ror#$Sigma0[1] + add $h,$h,$t1 // h+=Ch(e,f,g) + and $t3,$t3,$t2 // (b^c)&=(a^b) + eor $T2,$T2,@X[($j+14)&15],ror#$sigma1[1] + eor $T1,$T1,@X[($j+1)&15],lsr#$sigma0[2] // sigma0(X[i+1]) + add $h,$h,$t0 // h+=Sigma1(e) + eor $t3,$t3,$b // Maj(a,b,c) + eor $t1,$T0,$a,ror#$Sigma0[2] // Sigma0(a) + eor $T2,$T2,@X[($j+14)&15],lsr#$sigma1[2] // sigma1(X[i+14]) + add @X[$j],@X[$j],@X[($j+9)&15] + add $d,$d,$h // d+=h + add $h,$h,$t3 // h+=Maj(a,b,c) + ldr $t3,[$Ktbl],#$SZ // *K++, $t2 in next round + add @X[$j],@X[$j],$T1 + add $h,$h,$t1 // h+=Sigma0(a) + add @X[$j],@X[$j],$T2 +___ + ($t2,$t3)=($t3,$t2); +} + +$code.=<<___; +#ifndef __KERNEL__ +# include +#endif + +.text + +.extern GFp_armcap_P +.hidden GFp_armcap_P +.globl $func +.type $func,%function +.align 6 +$func: +___ +$code.=<<___ if ($SZ==4); + AARCH64_VALID_CALL_TARGET +#ifndef __KERNEL__ +#if __has_feature(hwaddress_sanitizer) && __clang_major__ >= 10 + adrp x16,:pg_hi21_nc:GFp_armcap_P +#else + adrp x16,:pg_hi21:GFp_armcap_P +#endif + ldr w16,[x16,:lo12:GFp_armcap_P] + tst w16,#ARMV8_SHA256 + b.ne .Lv8_entry +#endif +___ +$code.=<<___; + AARCH64_SIGN_LINK_REGISTER + stp x29,x30,[sp,#-128]! + add x29,sp,#0 + + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + sub sp,sp,#4*$SZ + + ldp $A,$B,[$ctx] // load context + ldp $C,$D,[$ctx,#2*$SZ] + ldp $E,$F,[$ctx,#4*$SZ] + add $num,$inp,$num,lsl#`log(16*$SZ)/log(2)` // end of input + ldp $G,$H,[$ctx,#6*$SZ] + adrp $Ktbl,:pg_hi21:.LK$BITS + add $Ktbl,$Ktbl,:lo12:.LK$BITS + stp $ctx,$num,[x29,#96] + +.Loop: + ldp @X[0],@X[1],[$inp],#2*$SZ + ldr $t2,[$Ktbl],#$SZ // *K++ + eor $t3,$B,$C // magic seed + str $inp,[x29,#112] +___ +for ($i=0;$i<16;$i++) { &BODY_00_xx($i,@V); unshift(@V,pop(@V)); } +$code.=".Loop_16_xx:\n"; +for (;$i<32;$i++) { &BODY_00_xx($i,@V); unshift(@V,pop(@V)); } +$code.=<<___; + cbnz $t2,.Loop_16_xx + + ldp $ctx,$num,[x29,#96] + ldr $inp,[x29,#112] + sub $Ktbl,$Ktbl,#`$SZ*($rounds+1)` // rewind + + ldp @X[0],@X[1],[$ctx] + ldp @X[2],@X[3],[$ctx,#2*$SZ] + add $inp,$inp,#14*$SZ // advance input pointer + ldp @X[4],@X[5],[$ctx,#4*$SZ] + add $A,$A,@X[0] + ldp @X[6],@X[7],[$ctx,#6*$SZ] + add $B,$B,@X[1] + add $C,$C,@X[2] + add $D,$D,@X[3] + stp $A,$B,[$ctx] + add $E,$E,@X[4] + add $F,$F,@X[5] + stp $C,$D,[$ctx,#2*$SZ] + add $G,$G,@X[6] + add $H,$H,@X[7] + cmp $inp,$num + stp $E,$F,[$ctx,#4*$SZ] + stp $G,$H,[$ctx,#6*$SZ] + b.ne .Loop + + ldp x19,x20,[x29,#16] + add sp,sp,#4*$SZ + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#128 + AARCH64_VALIDATE_LINK_REGISTER + ret +.size $func,.-$func + +.section .rodata +.align 6 +.type .LK$BITS,%object +.LK$BITS: +___ +$code.=<<___ if ($SZ==8); + .quad 0x428a2f98d728ae22,0x7137449123ef65cd + .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc + .quad 0x3956c25bf348b538,0x59f111f1b605d019 + .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 + .quad 0xd807aa98a3030242,0x12835b0145706fbe + .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 + .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 + .quad 0x9bdc06a725c71235,0xc19bf174cf692694 + .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 + .quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 + .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 + .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 + .quad 0x983e5152ee66dfab,0xa831c66d2db43210 + .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 + .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 + .quad 0x06ca6351e003826f,0x142929670a0e6e70 + .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 + .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df + .quad 0x650a73548baf63de,0x766a0abb3c77b2a8 + .quad 0x81c2c92e47edaee6,0x92722c851482353b + .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 + .quad 0xc24b8b70d0f89791,0xc76c51a30654be30 + .quad 0xd192e819d6ef5218,0xd69906245565a910 + .quad 0xf40e35855771202a,0x106aa07032bbd1b8 + .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 + .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 + .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb + .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 + .quad 0x748f82ee5defb2fc,0x78a5636f43172f60 + .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec + .quad 0x90befffa23631e28,0xa4506cebde82bde9 + .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b + .quad 0xca273eceea26619c,0xd186b8c721c0c207 + .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 + .quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 + .quad 0x113f9804bef90dae,0x1b710b35131c471b + .quad 0x28db77f523047d84,0x32caab7b40c72493 + .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c + .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a + .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 + .quad 0 // terminator +___ +$code.=<<___ if ($SZ==4); + .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 + .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 + .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 + .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 + .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc + .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da + .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 + .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 + .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 + .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 + .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 + .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 + .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 + .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 + .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 + .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 + .long 0 //terminator +___ +$code.=<<___; +.size .LK$BITS,.-.LK$BITS +.asciz "SHA$BITS block transform for ARMv8, CRYPTOGAMS by " +.align 2 +___ + +if ($SZ==4) { +my $Ktbl="x3"; + +my ($ABCD,$EFGH,$abcd)=map("v$_.16b",(0..2)); +my @MSG=map("v$_.16b",(4..7)); +my ($W0,$W1)=("v16.4s","v17.4s"); +my ($ABCD_SAVE,$EFGH_SAVE)=("v18.16b","v19.16b"); + +$code.=<<___; +.text +#ifndef __KERNEL__ +.type sha256_block_armv8,%function +.align 6 +sha256_block_armv8: +.Lv8_entry: + // Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later. + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ld1.32 {$ABCD,$EFGH},[$ctx] + adrp $Ktbl,:pg_hi21:.LK256 + add $Ktbl,$Ktbl,:lo12:.LK256 + +.Loop_hw: + ld1 {@MSG[0]-@MSG[3]},[$inp],#64 + sub $num,$num,#1 + ld1.32 {$W0},[$Ktbl],#16 + rev32 @MSG[0],@MSG[0] + rev32 @MSG[1],@MSG[1] + rev32 @MSG[2],@MSG[2] + rev32 @MSG[3],@MSG[3] + orr $ABCD_SAVE,$ABCD,$ABCD // offload + orr $EFGH_SAVE,$EFGH,$EFGH +___ +for($i=0;$i<12;$i++) { +$code.=<<___; + ld1.32 {$W1},[$Ktbl],#16 + add.i32 $W0,$W0,@MSG[0] + sha256su0 @MSG[0],@MSG[1] + orr $abcd,$ABCD,$ABCD + sha256h $ABCD,$EFGH,$W0 + sha256h2 $EFGH,$abcd,$W0 + sha256su1 @MSG[0],@MSG[2],@MSG[3] +___ + ($W0,$W1)=($W1,$W0); push(@MSG,shift(@MSG)); +} +$code.=<<___; + ld1.32 {$W1},[$Ktbl],#16 + add.i32 $W0,$W0,@MSG[0] + orr $abcd,$ABCD,$ABCD + sha256h $ABCD,$EFGH,$W0 + sha256h2 $EFGH,$abcd,$W0 + + ld1.32 {$W0},[$Ktbl],#16 + add.i32 $W1,$W1,@MSG[1] + orr $abcd,$ABCD,$ABCD + sha256h $ABCD,$EFGH,$W1 + sha256h2 $EFGH,$abcd,$W1 + + ld1.32 {$W1},[$Ktbl] + add.i32 $W0,$W0,@MSG[2] + sub $Ktbl,$Ktbl,#$rounds*$SZ-16 // rewind + orr $abcd,$ABCD,$ABCD + sha256h $ABCD,$EFGH,$W0 + sha256h2 $EFGH,$abcd,$W0 + + add.i32 $W1,$W1,@MSG[3] + orr $abcd,$ABCD,$ABCD + sha256h $ABCD,$EFGH,$W1 + sha256h2 $EFGH,$abcd,$W1 + + add.i32 $ABCD,$ABCD,$ABCD_SAVE + add.i32 $EFGH,$EFGH,$EFGH_SAVE + + cbnz $num,.Loop_hw + + st1.32 {$ABCD,$EFGH},[$ctx] + + ldr x29,[sp],#16 + ret +.size sha256_block_armv8,.-sha256_block_armv8 +#endif +___ +} + +{ my %opcode = ( + "sha256h" => 0x5e004000, "sha256h2" => 0x5e005000, + "sha256su0" => 0x5e282800, "sha256su1" => 0x5e006000 ); + + sub unsha256 { + my ($mnemonic,$arg)=@_; + + $arg =~ m/[qv]([0-9]+)[^,]*,\s*[qv]([0-9]+)[^,]*(?:,\s*[qv]([0-9]+))?/o + && + sprintf ".inst\t0x%08x\t//%s %s", + $opcode{$mnemonic}|$1|($2<<5)|($3<<16), + $mnemonic,$arg; + } +} + +open SELF,$0; +while() { + next if (/^#!/); + last if (!s/^#/\/\// and !/^$/); + print; +} +close SELF; + +foreach(split("\n",$code)) { + + s/\`([^\`]*)\`/eval($1)/geo; + + s/\b(sha256\w+)\s+([qv].*)/unsha256($1,$2)/geo; + + s/\.\w?32\b//o and s/\.16b/\.4s/go; + m/(ld|st)1[^\[]+\[0\]/o and s/\.4s/\.s/go; + + print $_,"\n"; +} + +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/fipsmodule/sha/asm/sha512-x86_64.pl b/vendor/ring/crypto/fipsmodule/sha/asm/sha512-x86_64.pl new file mode 100755 index 00000000..a0ba06bc --- /dev/null +++ b/vendor/ring/crypto/fipsmodule/sha/asm/sha512-x86_64.pl @@ -0,0 +1,1675 @@ +#! /usr/bin/env perl +# Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. Rights for redistribution and usage in source and binary +# forms are granted according to the OpenSSL license. +# ==================================================================== +# +# sha256/512_block procedure for x86_64. +# +# 40% improvement over compiler-generated code on Opteron. On EM64T +# sha256 was observed to run >80% faster and sha512 - >40%. No magical +# tricks, just straight implementation... I really wonder why gcc +# [being armed with inline assembler] fails to generate as fast code. +# The only thing which is cool about this module is that it's very +# same instruction sequence used for both SHA-256 and SHA-512. In +# former case the instructions operate on 32-bit operands, while in +# latter - on 64-bit ones. All I had to do is to get one flavor right, +# the other one passed the test right away:-) +# +# sha256_block runs in ~1005 cycles on Opteron, which gives you +# asymptotic performance of 64*1000/1005=63.7MBps times CPU clock +# frequency in GHz. sha512_block runs in ~1275 cycles, which results +# in 128*1000/1275=100MBps per GHz. Is there room for improvement? +# Well, if you compare it to IA-64 implementation, which maintains +# X[16] in register bank[!], tends to 4 instructions per CPU clock +# cycle and runs in 1003 cycles, 1275 is very good result for 3-way +# issue Opteron pipeline and X[16] maintained in memory. So that *if* +# there is a way to improve it, *then* the only way would be to try to +# offload X[16] updates to SSE unit, but that would require "deeper" +# loop unroll, which in turn would naturally cause size blow-up, not +# to mention increased complexity! And once again, only *if* it's +# actually possible to noticeably improve overall ILP, instruction +# level parallelism, on a given CPU implementation in this case. +# +# Special note on Intel EM64T. While Opteron CPU exhibits perfect +# performance ratio of 1.5 between 64- and 32-bit flavors [see above], +# [currently available] EM64T CPUs apparently are far from it. On the +# contrary, 64-bit version, sha512_block, is ~30% *slower* than 32-bit +# sha256_block:-( This is presumably because 64-bit shifts/rotates +# apparently are not atomic instructions, but implemented in microcode. +# +# May 2012. +# +# Optimization including one of Pavel Semjanov's ideas, alternative +# Maj, resulted in >=5% improvement on most CPUs, +20% SHA256 and +# unfortunately -2% SHA512 on P4 [which nobody should care about +# that much]. +# +# June 2012. +# +# Add SIMD code paths, see below for improvement coefficients. SSSE3 +# code path was not attempted for SHA512, because improvement is not +# estimated to be high enough, noticeably less than 9%, to justify +# the effort, not on pre-AVX processors. [Obviously with exclusion +# for VIA Nano, but it has SHA512 instruction that is faster and +# should be used instead.] For reference, corresponding estimated +# upper limit for improvement for SSSE3 SHA256 is 28%. The fact that +# higher coefficients are observed on VIA Nano and Bulldozer has more +# to do with specifics of their architecture [which is topic for +# separate discussion]. +# +# November 2012. +# +# Add AVX2 code path. Two consecutive input blocks are loaded to +# 256-bit %ymm registers, with data from first block to least +# significant 128-bit halves and data from second to most significant. +# The data is then processed with same SIMD instruction sequence as +# for AVX, but with %ymm as operands. Side effect is increased stack +# frame, 448 additional bytes in SHA256 and 1152 in SHA512, and 1.2KB +# code size increase. +# +# March 2014. +# +# Add support for Intel SHA Extensions. + +###################################################################### +# Current performance in cycles per processed byte (less is better): +# +# SHA256 SSSE3 AVX/XOP(*) SHA512 AVX/XOP(*) +# +# AMD K8 14.9 - - 9.57 - +# P4 17.3 - - 30.8 - +# Core 2 15.6 13.8(+13%) - 9.97 - +# Westmere 14.8 12.3(+19%) - 9.58 - +# Sandy Bridge 17.4 14.2(+23%) 11.6(+50%(**)) 11.2 8.10(+38%(**)) +# Ivy Bridge 12.6 10.5(+20%) 10.3(+22%) 8.17 7.22(+13%) +# Haswell 12.2 9.28(+31%) 7.80(+56%) 7.66 5.40(+42%) +# Skylake 11.4 9.03(+26%) 7.70(+48%) 7.25 5.20(+40%) +# Bulldozer 21.1 13.6(+54%) 13.6(+54%(***)) 13.5 8.58(+57%) +# Ryzen 11.0 9.02(+22%) 2.05(+440%) 7.05 5.67(+20%) +# VIA Nano 23.0 16.5(+39%) - 14.7 - +# Atom 23.0 18.9(+22%) - 14.7 - +# Silvermont 27.4 20.6(+33%) - 17.5 - +# Knights L 27.4 21.0(+30%) 19.6(+40%) 17.5 12.8(+37%) +# Goldmont 18.9 14.3(+32%) 4.16(+350%) 12.0 - +# +# (*) whichever best applicable, including SHAEXT; +# (**) switch from ror to shrd stands for fair share of improvement; +# (***) execution time is fully determined by remaining integer-only +# part, body_00_15; reducing the amount of SIMD instructions +# below certain limit makes no difference/sense; to conserve +# space SHA256 XOP code path is therefore omitted; +# +# Modified from upstream OpenSSL to remove the XOP code. + +$flavour = shift; +$output = shift; +if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } + +$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/); + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../../perlasm/x86_64-xlate.pl" and -f $xlate) or +die "can't locate x86_64-xlate.pl"; + +# In upstream, this is controlled by shelling out to the compiler to check +# versions, but BoringSSL is intended to be used with pre-generated perlasm +# output, so this isn't useful anyway. +# +# TODO(briansmith): Address davidben's concerns about the CFI annotations and +# Win64 ABI issues at https://github.com/openssl/openssl/issues/8853. +# TODO(davidben): Enable AVX2 code after testing by setting $avx to 2. Is it +# necessary to disable AVX2 code when SHA Extensions code is disabled? Upstream +# did not tie them together until after $shaext was added. +$avx = 1; + +# TODO(davidben): Consider enabling the Intel SHA Extensions code once it's +# been tested. +$shaext=0; ### set to zero if compiling for 1.0.1 +$avx=1 if (!$shaext && $avx); + +open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""; +*STDOUT=*OUT; + +if ($output =~ /sha512-x86_64/) { + $func="GFp_sha512_block_data_order"; + $TABLE="K512"; + $SZ=8; + @ROT=($A,$B,$C,$D,$E,$F,$G,$H)=("%rax","%rbx","%rcx","%rdx", + "%r8", "%r9", "%r10","%r11"); + ($T1,$a0,$a1,$a2,$a3)=("%r12","%r13","%r14","%r15","%rdi"); + @Sigma0=(28,34,39); + @Sigma1=(14,18,41); + @sigma0=(1, 8, 7); + @sigma1=(19,61, 6); + $rounds=80; +} else { + $func="GFp_sha256_block_data_order"; + $TABLE="K256"; + $SZ=4; + @ROT=($A,$B,$C,$D,$E,$F,$G,$H)=("%eax","%ebx","%ecx","%edx", + "%r8d","%r9d","%r10d","%r11d"); + ($T1,$a0,$a1,$a2,$a3)=("%r12d","%r13d","%r14d","%r15d","%edi"); + @Sigma0=( 2,13,22); + @Sigma1=( 6,11,25); + @sigma0=( 7,18, 3); + @sigma1=(17,19,10); + $rounds=64; +} + +$ctx="%rdi"; # 1st arg, zapped by $a3 +$inp="%rsi"; # 2nd arg +$Tbl="%rbp"; + +$_ctx="16*$SZ+0*8(%rsp)"; +$_inp="16*$SZ+1*8(%rsp)"; +$_end="16*$SZ+2*8(%rsp)"; +$_rsp="`16*$SZ+3*8`(%rsp)"; +$framesz="16*$SZ+4*8"; + + +sub ROUND_00_15() +{ my ($i,$a,$b,$c,$d,$e,$f,$g,$h) = @_; + my $STRIDE=$SZ; + $STRIDE += 16 if ($i%(16/$SZ)==(16/$SZ-1)); + +$code.=<<___; + ror \$`$Sigma1[2]-$Sigma1[1]`,$a0 + mov $f,$a2 + + xor $e,$a0 + ror \$`$Sigma0[2]-$Sigma0[1]`,$a1 + xor $g,$a2 # f^g + + mov $T1,`$SZ*($i&0xf)`(%rsp) + xor $a,$a1 + and $e,$a2 # (f^g)&e + + ror \$`$Sigma1[1]-$Sigma1[0]`,$a0 + add $h,$T1 # T1+=h + xor $g,$a2 # Ch(e,f,g)=((f^g)&e)^g + + ror \$`$Sigma0[1]-$Sigma0[0]`,$a1 + xor $e,$a0 + add $a2,$T1 # T1+=Ch(e,f,g) + + mov $a,$a2 + add ($Tbl),$T1 # T1+=K[round] + xor $a,$a1 + + xor $b,$a2 # a^b, b^c in next round + ror \$$Sigma1[0],$a0 # Sigma1(e) + mov $b,$h + + and $a2,$a3 + ror \$$Sigma0[0],$a1 # Sigma0(a) + add $a0,$T1 # T1+=Sigma1(e) + + xor $a3,$h # h=Maj(a,b,c)=Ch(a^b,c,b) + add $T1,$d # d+=T1 + add $T1,$h # h+=T1 + + lea $STRIDE($Tbl),$Tbl # round++ +___ +$code.=<<___ if ($i<15); + add $a1,$h # h+=Sigma0(a) +___ + ($a2,$a3) = ($a3,$a2); +} + +sub ROUND_16_XX() +{ my ($i,$a,$b,$c,$d,$e,$f,$g,$h) = @_; + +$code.=<<___; + mov `$SZ*(($i+1)&0xf)`(%rsp),$a0 + mov `$SZ*(($i+14)&0xf)`(%rsp),$a2 + + mov $a0,$T1 + ror \$`$sigma0[1]-$sigma0[0]`,$a0 + add $a1,$a # modulo-scheduled h+=Sigma0(a) + mov $a2,$a1 + ror \$`$sigma1[1]-$sigma1[0]`,$a2 + + xor $T1,$a0 + shr \$$sigma0[2],$T1 + ror \$$sigma0[0],$a0 + xor $a1,$a2 + shr \$$sigma1[2],$a1 + + ror \$$sigma1[0],$a2 + xor $a0,$T1 # sigma0(X[(i+1)&0xf]) + xor $a1,$a2 # sigma1(X[(i+14)&0xf]) + add `$SZ*(($i+9)&0xf)`(%rsp),$T1 + + add `$SZ*($i&0xf)`(%rsp),$T1 + mov $e,$a0 + add $a2,$T1 + mov $a,$a1 +___ + &ROUND_00_15(@_); +} + +$code=<<___; +.text + +.extern GFp_ia32cap_P +.globl $func +.type $func,\@function,3 +.align 16 +$func: +.cfi_startproc +___ +$code.=<<___ if ($SZ==4 || $avx); + leaq GFp_ia32cap_P(%rip),%r11 + mov 0(%r11),%r9d + mov 4(%r11),%r10d + mov 8(%r11),%r11d +___ +$code.=<<___ if ($SZ==4 && $shaext); + test \$`1<<29`,%r11d # check for SHA + jnz _shaext_shortcut +___ + # XOP codepath removed. +$code.=<<___ if ($avx>1); + and \$`1<<8|1<<5|1<<3`,%r11d # check for BMI2+AVX2+BMI1 + cmp \$`1<<8|1<<5|1<<3`,%r11d + je .Lavx2_shortcut +___ +$code.=<<___ if ($avx); + and \$`1<<30`,%r9d # mask "Intel CPU" bit + and \$`1<<28|1<<9`,%r10d # mask AVX and SSSE3 bits + or %r9d,%r10d + cmp \$`1<<28|1<<9|1<<30`,%r10d + je .Lavx_shortcut +___ +$code.=<<___ if ($SZ==4); + test \$`1<<9`,%r10d + jnz .Lssse3_shortcut +___ +$code.=<<___; + mov %rsp,%rax # copy %rsp +.cfi_def_cfa_register %rax + push %rbx +.cfi_push %rbx + push %rbp +.cfi_push %rbp + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 + shl \$4,%rdx # num*16 + sub \$$framesz,%rsp + lea ($inp,%rdx,$SZ),%rdx # inp+num*16*$SZ + and \$-64,%rsp # align stack frame + mov $ctx,$_ctx # save ctx, 1st arg + mov $inp,$_inp # save inp, 2nd arh + mov %rdx,$_end # save end pointer, "3rd" arg + mov %rax,$_rsp # save copy of %rsp +.cfi_cfa_expression $_rsp,deref,+8 +.Lprologue: + + mov $SZ*0($ctx),$A + mov $SZ*1($ctx),$B + mov $SZ*2($ctx),$C + mov $SZ*3($ctx),$D + mov $SZ*4($ctx),$E + mov $SZ*5($ctx),$F + mov $SZ*6($ctx),$G + mov $SZ*7($ctx),$H + jmp .Lloop + +.align 16 +.Lloop: + mov $B,$a3 + lea $TABLE(%rip),$Tbl + xor $C,$a3 # magic +___ + for($i=0;$i<16;$i++) { + $code.=" mov $SZ*$i($inp),$T1\n"; + $code.=" mov @ROT[4],$a0\n"; + $code.=" mov @ROT[0],$a1\n"; + $code.=" bswap $T1\n"; + &ROUND_00_15($i,@ROT); + unshift(@ROT,pop(@ROT)); + } +$code.=<<___; + jmp .Lrounds_16_xx +.align 16 +.Lrounds_16_xx: +___ + for(;$i<32;$i++) { + &ROUND_16_XX($i,@ROT); + unshift(@ROT,pop(@ROT)); + } + +$code.=<<___; + cmpb \$0,`$SZ-1`($Tbl) + jnz .Lrounds_16_xx + + mov $_ctx,$ctx + add $a1,$A # modulo-scheduled h+=Sigma0(a) + lea 16*$SZ($inp),$inp + + add $SZ*0($ctx),$A + add $SZ*1($ctx),$B + add $SZ*2($ctx),$C + add $SZ*3($ctx),$D + add $SZ*4($ctx),$E + add $SZ*5($ctx),$F + add $SZ*6($ctx),$G + add $SZ*7($ctx),$H + + cmp $_end,$inp + + mov $A,$SZ*0($ctx) + mov $B,$SZ*1($ctx) + mov $C,$SZ*2($ctx) + mov $D,$SZ*3($ctx) + mov $E,$SZ*4($ctx) + mov $F,$SZ*5($ctx) + mov $G,$SZ*6($ctx) + mov $H,$SZ*7($ctx) + jb .Lloop + + mov $_rsp,%rsi +.cfi_def_cfa %rsi,8 + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lepilogue: + ret +.cfi_endproc +.size $func,.-$func +___ + +if ($SZ==4) { +$code.=<<___; +.align 64 +.type $TABLE,\@object +$TABLE: + .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 + .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 + .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 + .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 + .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 + .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 + .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 + .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 + .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc + .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc + .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da + .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da + .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 + .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 + .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 + .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 + .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 + .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 + .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 + .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 + .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 + .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 + .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 + .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 + .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 + .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 + .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 + .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 + .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 + .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 + .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 + .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 + + .long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f + .long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f + .long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff + .long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff + .long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 + .long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 + .asciz "SHA256 block transform for x86_64, CRYPTOGAMS by " +___ +} else { +$code.=<<___; +.align 64 +.type $TABLE,\@object +$TABLE: + .quad 0x428a2f98d728ae22,0x7137449123ef65cd + .quad 0x428a2f98d728ae22,0x7137449123ef65cd + .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc + .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc + .quad 0x3956c25bf348b538,0x59f111f1b605d019 + .quad 0x3956c25bf348b538,0x59f111f1b605d019 + .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 + .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 + .quad 0xd807aa98a3030242,0x12835b0145706fbe + .quad 0xd807aa98a3030242,0x12835b0145706fbe + .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 + .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 + .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 + .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 + .quad 0x9bdc06a725c71235,0xc19bf174cf692694 + .quad 0x9bdc06a725c71235,0xc19bf174cf692694 + .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 + .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 + .quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 + .quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 + .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 + .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 + .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 + .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 + .quad 0x983e5152ee66dfab,0xa831c66d2db43210 + .quad 0x983e5152ee66dfab,0xa831c66d2db43210 + .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 + .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 + .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 + .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 + .quad 0x06ca6351e003826f,0x142929670a0e6e70 + .quad 0x06ca6351e003826f,0x142929670a0e6e70 + .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 + .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 + .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df + .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df + .quad 0x650a73548baf63de,0x766a0abb3c77b2a8 + .quad 0x650a73548baf63de,0x766a0abb3c77b2a8 + .quad 0x81c2c92e47edaee6,0x92722c851482353b + .quad 0x81c2c92e47edaee6,0x92722c851482353b + .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 + .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 + .quad 0xc24b8b70d0f89791,0xc76c51a30654be30 + .quad 0xc24b8b70d0f89791,0xc76c51a30654be30 + .quad 0xd192e819d6ef5218,0xd69906245565a910 + .quad 0xd192e819d6ef5218,0xd69906245565a910 + .quad 0xf40e35855771202a,0x106aa07032bbd1b8 + .quad 0xf40e35855771202a,0x106aa07032bbd1b8 + .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 + .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 + .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 + .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 + .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb + .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb + .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 + .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 + .quad 0x748f82ee5defb2fc,0x78a5636f43172f60 + .quad 0x748f82ee5defb2fc,0x78a5636f43172f60 + .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec + .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec + .quad 0x90befffa23631e28,0xa4506cebde82bde9 + .quad 0x90befffa23631e28,0xa4506cebde82bde9 + .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b + .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b + .quad 0xca273eceea26619c,0xd186b8c721c0c207 + .quad 0xca273eceea26619c,0xd186b8c721c0c207 + .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 + .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 + .quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 + .quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 + .quad 0x113f9804bef90dae,0x1b710b35131c471b + .quad 0x113f9804bef90dae,0x1b710b35131c471b + .quad 0x28db77f523047d84,0x32caab7b40c72493 + .quad 0x28db77f523047d84,0x32caab7b40c72493 + .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c + .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c + .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a + .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a + .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 + .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 + + .quad 0x0001020304050607,0x08090a0b0c0d0e0f + .quad 0x0001020304050607,0x08090a0b0c0d0e0f + .asciz "SHA512 block transform for x86_64, CRYPTOGAMS by " +___ +} + +###################################################################### +# SIMD code paths +# +if ($SZ==4 && $shaext) {{{ +###################################################################### +# Intel SHA Extensions implementation of SHA256 update function. +# +my ($ctx,$inp,$num,$Tbl)=("%rdi","%rsi","%rdx","%rcx"); + +my ($Wi,$ABEF,$CDGH,$TMP,$BSWAP,$ABEF_SAVE,$CDGH_SAVE)=map("%xmm$_",(0..2,7..10)); +my @MSG=map("%xmm$_",(3..6)); + +$code.=<<___; +.type GFp_sha256_block_data_order_shaext,\@function,3 +.align 64 +GFp_sha256_block_data_order_shaext: +_shaext_shortcut: +___ +$code.=<<___ if ($win64); + lea `-8-5*16`(%rsp),%rsp + movaps %xmm6,-8-5*16(%rax) + movaps %xmm7,-8-4*16(%rax) + movaps %xmm8,-8-3*16(%rax) + movaps %xmm9,-8-2*16(%rax) + movaps %xmm10,-8-1*16(%rax) +.Lprologue_shaext: +___ +$code.=<<___; + lea K256+0x80(%rip),$Tbl + movdqu ($ctx),$ABEF # DCBA + movdqu 16($ctx),$CDGH # HGFE + movdqa 0x200-0x80($Tbl),$TMP # byte swap mask + + pshufd \$0x1b,$ABEF,$Wi # ABCD + pshufd \$0xb1,$ABEF,$ABEF # CDAB + pshufd \$0x1b,$CDGH,$CDGH # EFGH + movdqa $TMP,$BSWAP # offload + palignr \$8,$CDGH,$ABEF # ABEF + punpcklqdq $Wi,$CDGH # CDGH + jmp .Loop_shaext + +.align 16 +.Loop_shaext: + movdqu ($inp),@MSG[0] + movdqu 0x10($inp),@MSG[1] + movdqu 0x20($inp),@MSG[2] + pshufb $TMP,@MSG[0] + movdqu 0x30($inp),@MSG[3] + + movdqa 0*32-0x80($Tbl),$Wi + paddd @MSG[0],$Wi + pshufb $TMP,@MSG[1] + movdqa $CDGH,$CDGH_SAVE # offload + sha256rnds2 $ABEF,$CDGH # 0-3 + pshufd \$0x0e,$Wi,$Wi + nop + movdqa $ABEF,$ABEF_SAVE # offload + sha256rnds2 $CDGH,$ABEF + + movdqa 1*32-0x80($Tbl),$Wi + paddd @MSG[1],$Wi + pshufb $TMP,@MSG[2] + sha256rnds2 $ABEF,$CDGH # 4-7 + pshufd \$0x0e,$Wi,$Wi + lea 0x40($inp),$inp + sha256msg1 @MSG[1],@MSG[0] + sha256rnds2 $CDGH,$ABEF + + movdqa 2*32-0x80($Tbl),$Wi + paddd @MSG[2],$Wi + pshufb $TMP,@MSG[3] + sha256rnds2 $ABEF,$CDGH # 8-11 + pshufd \$0x0e,$Wi,$Wi + movdqa @MSG[3],$TMP + palignr \$4,@MSG[2],$TMP + nop + paddd $TMP,@MSG[0] + sha256msg1 @MSG[2],@MSG[1] + sha256rnds2 $CDGH,$ABEF + + movdqa 3*32-0x80($Tbl),$Wi + paddd @MSG[3],$Wi + sha256msg2 @MSG[3],@MSG[0] + sha256rnds2 $ABEF,$CDGH # 12-15 + pshufd \$0x0e,$Wi,$Wi + movdqa @MSG[0],$TMP + palignr \$4,@MSG[3],$TMP + nop + paddd $TMP,@MSG[1] + sha256msg1 @MSG[3],@MSG[2] + sha256rnds2 $CDGH,$ABEF +___ +for($i=4;$i<16-3;$i++) { +$code.=<<___; + movdqa $i*32-0x80($Tbl),$Wi + paddd @MSG[0],$Wi + sha256msg2 @MSG[0],@MSG[1] + sha256rnds2 $ABEF,$CDGH # 16-19... + pshufd \$0x0e,$Wi,$Wi + movdqa @MSG[1],$TMP + palignr \$4,@MSG[0],$TMP + nop + paddd $TMP,@MSG[2] + sha256msg1 @MSG[0],@MSG[3] + sha256rnds2 $CDGH,$ABEF +___ + push(@MSG,shift(@MSG)); +} +$code.=<<___; + movdqa 13*32-0x80($Tbl),$Wi + paddd @MSG[0],$Wi + sha256msg2 @MSG[0],@MSG[1] + sha256rnds2 $ABEF,$CDGH # 52-55 + pshufd \$0x0e,$Wi,$Wi + movdqa @MSG[1],$TMP + palignr \$4,@MSG[0],$TMP + sha256rnds2 $CDGH,$ABEF + paddd $TMP,@MSG[2] + + movdqa 14*32-0x80($Tbl),$Wi + paddd @MSG[1],$Wi + sha256rnds2 $ABEF,$CDGH # 56-59 + pshufd \$0x0e,$Wi,$Wi + sha256msg2 @MSG[1],@MSG[2] + movdqa $BSWAP,$TMP + sha256rnds2 $CDGH,$ABEF + + movdqa 15*32-0x80($Tbl),$Wi + paddd @MSG[2],$Wi + nop + sha256rnds2 $ABEF,$CDGH # 60-63 + pshufd \$0x0e,$Wi,$Wi + dec $num + nop + sha256rnds2 $CDGH,$ABEF + + paddd $CDGH_SAVE,$CDGH + paddd $ABEF_SAVE,$ABEF + jnz .Loop_shaext + + pshufd \$0xb1,$CDGH,$CDGH # DCHG + pshufd \$0x1b,$ABEF,$TMP # FEBA + pshufd \$0xb1,$ABEF,$ABEF # BAFE + punpckhqdq $CDGH,$ABEF # DCBA + palignr \$8,$TMP,$CDGH # HGFE + + movdqu $ABEF,($ctx) + movdqu $CDGH,16($ctx) +___ +$code.=<<___ if ($win64); + movaps -8-5*16(%rax),%xmm6 + movaps -8-4*16(%rax),%xmm7 + movaps -8-3*16(%rax),%xmm8 + movaps -8-2*16(%rax),%xmm9 + movaps -8-1*16(%rax),%xmm10 + mov %rax,%rsp +.Lepilogue_shaext: +___ +$code.=<<___; + ret +.size GFp_sha256_block_data_order_shaext,.-GFp_sha256_block_data_order_shaext +___ +}}} +{{{ + +my $a4=$T1; +my ($a,$b,$c,$d,$e,$f,$g,$h); + +sub AUTOLOAD() # thunk [simplified] 32-bit style perlasm +{ my $opcode = $AUTOLOAD; $opcode =~ s/.*:://; + my $arg = pop; + $arg = "\$$arg" if ($arg*1 eq $arg); + $code .= "\t$opcode\t".join(',',$arg,reverse @_)."\n"; +} + +sub body_00_15 () { + ( + '($a,$b,$c,$d,$e,$f,$g,$h)=@ROT;'. + + '&ror ($a0,$Sigma1[2]-$Sigma1[1])', + '&mov ($a,$a1)', + '&mov ($a4,$f)', + + '&ror ($a1,$Sigma0[2]-$Sigma0[1])', + '&xor ($a0,$e)', + '&xor ($a4,$g)', # f^g + + '&ror ($a0,$Sigma1[1]-$Sigma1[0])', + '&xor ($a1,$a)', + '&and ($a4,$e)', # (f^g)&e + + '&xor ($a0,$e)', + '&add ($h,$SZ*($i&15)."(%rsp)")', # h+=X[i]+K[i] + '&mov ($a2,$a)', + + '&xor ($a4,$g)', # Ch(e,f,g)=((f^g)&e)^g + '&ror ($a1,$Sigma0[1]-$Sigma0[0])', + '&xor ($a2,$b)', # a^b, b^c in next round + + '&add ($h,$a4)', # h+=Ch(e,f,g) + '&ror ($a0,$Sigma1[0])', # Sigma1(e) + '&and ($a3,$a2)', # (b^c)&(a^b) + + '&xor ($a1,$a)', + '&add ($h,$a0)', # h+=Sigma1(e) + '&xor ($a3,$b)', # Maj(a,b,c)=Ch(a^b,c,b) + + '&ror ($a1,$Sigma0[0])', # Sigma0(a) + '&add ($d,$h)', # d+=h + '&add ($h,$a3)', # h+=Maj(a,b,c) + + '&mov ($a0,$d)', + '&add ($a1,$h);'. # h+=Sigma0(a) + '($a2,$a3) = ($a3,$a2); unshift(@ROT,pop(@ROT)); $i++;' + ); +} + +###################################################################### +# SSSE3 code path +# +if ($SZ==4) { # SHA256 only +my @X = map("%xmm$_",(0..3)); +my ($t0,$t1,$t2,$t3, $t4,$t5) = map("%xmm$_",(4..9)); + +$code.=<<___; +.type ${func}_ssse3,\@function,3 +.align 64 +${func}_ssse3: +.cfi_startproc +.Lssse3_shortcut: + mov %rsp,%rax # copy %rsp +.cfi_def_cfa_register %rax + push %rbx +.cfi_push %rbx + push %rbp +.cfi_push %rbp + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 + shl \$4,%rdx # num*16 + sub \$`$framesz+$win64*16*4`,%rsp + lea ($inp,%rdx,$SZ),%rdx # inp+num*16*$SZ + and \$-64,%rsp # align stack frame + mov $ctx,$_ctx # save ctx, 1st arg + mov $inp,$_inp # save inp, 2nd arh + mov %rdx,$_end # save end pointer, "3rd" arg + mov %rax,$_rsp # save copy of %rsp +.cfi_cfa_expression $_rsp,deref,+8 +___ +$code.=<<___ if ($win64); + movaps %xmm6,16*$SZ+32(%rsp) + movaps %xmm7,16*$SZ+48(%rsp) + movaps %xmm8,16*$SZ+64(%rsp) + movaps %xmm9,16*$SZ+80(%rsp) +___ +$code.=<<___; +.Lprologue_ssse3: + + mov $SZ*0($ctx),$A + mov $SZ*1($ctx),$B + mov $SZ*2($ctx),$C + mov $SZ*3($ctx),$D + mov $SZ*4($ctx),$E + mov $SZ*5($ctx),$F + mov $SZ*6($ctx),$G + mov $SZ*7($ctx),$H +___ + +$code.=<<___; + #movdqa $TABLE+`$SZ*2*$rounds`+32(%rip),$t4 + #movdqa $TABLE+`$SZ*2*$rounds`+64(%rip),$t5 + jmp .Lloop_ssse3 +.align 16 +.Lloop_ssse3: + movdqa $TABLE+`$SZ*2*$rounds`(%rip),$t3 + movdqu 0x00($inp),@X[0] + movdqu 0x10($inp),@X[1] + movdqu 0x20($inp),@X[2] + pshufb $t3,@X[0] + movdqu 0x30($inp),@X[3] + lea $TABLE(%rip),$Tbl + pshufb $t3,@X[1] + movdqa 0x00($Tbl),$t0 + movdqa 0x20($Tbl),$t1 + pshufb $t3,@X[2] + paddd @X[0],$t0 + movdqa 0x40($Tbl),$t2 + pshufb $t3,@X[3] + movdqa 0x60($Tbl),$t3 + paddd @X[1],$t1 + paddd @X[2],$t2 + paddd @X[3],$t3 + movdqa $t0,0x00(%rsp) + mov $A,$a1 + movdqa $t1,0x10(%rsp) + mov $B,$a3 + movdqa $t2,0x20(%rsp) + xor $C,$a3 # magic + movdqa $t3,0x30(%rsp) + mov $E,$a0 + jmp .Lssse3_00_47 + +.align 16 +.Lssse3_00_47: + sub \$`-16*2*$SZ`,$Tbl # size optimization +___ +sub Xupdate_256_SSSE3 () { + ( + '&movdqa ($t0,@X[1]);', + '&movdqa ($t3,@X[3])', + '&palignr ($t0,@X[0],$SZ)', # X[1..4] + '&palignr ($t3,@X[2],$SZ);', # X[9..12] + '&movdqa ($t1,$t0)', + '&movdqa ($t2,$t0);', + '&psrld ($t0,$sigma0[2])', + '&paddd (@X[0],$t3);', # X[0..3] += X[9..12] + '&psrld ($t2,$sigma0[0])', + '&pshufd ($t3,@X[3],0b11111010)',# X[14..15] + '&pslld ($t1,8*$SZ-$sigma0[1]);'. + '&pxor ($t0,$t2)', + '&psrld ($t2,$sigma0[1]-$sigma0[0]);'. + '&pxor ($t0,$t1)', + '&pslld ($t1,$sigma0[1]-$sigma0[0]);'. + '&pxor ($t0,$t2);', + '&movdqa ($t2,$t3)', + '&pxor ($t0,$t1);', # sigma0(X[1..4]) + '&psrld ($t3,$sigma1[2])', + '&paddd (@X[0],$t0);', # X[0..3] += sigma0(X[1..4]) + '&psrlq ($t2,$sigma1[0])', + '&pxor ($t3,$t2);', + '&psrlq ($t2,$sigma1[1]-$sigma1[0])', + '&pxor ($t3,$t2)', + '&pshufb ($t3,$t4)', # sigma1(X[14..15]) + '&paddd (@X[0],$t3)', # X[0..1] += sigma1(X[14..15]) + '&pshufd ($t3,@X[0],0b01010000)',# X[16..17] + '&movdqa ($t2,$t3);', + '&psrld ($t3,$sigma1[2])', + '&psrlq ($t2,$sigma1[0])', + '&pxor ($t3,$t2);', + '&psrlq ($t2,$sigma1[1]-$sigma1[0])', + '&pxor ($t3,$t2);', + '&movdqa ($t2,16*2*$j."($Tbl)")', + '&pshufb ($t3,$t5)', + '&paddd (@X[0],$t3)' # X[2..3] += sigma1(X[16..17]) + ); +} + +sub SSSE3_256_00_47 () { +my $j = shift; +my $body = shift; +my @X = @_; +my @insns = (&$body,&$body,&$body,&$body); # 104 instructions + + if (0) { + foreach (Xupdate_256_SSSE3()) { # 36 instructions + eval; + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + } + } else { # squeeze extra 4% on Westmere and 19% on Atom + eval(shift(@insns)); #@ + &movdqa ($t0,@X[1]); + eval(shift(@insns)); + eval(shift(@insns)); + &movdqa ($t3,@X[3]); + eval(shift(@insns)); #@ + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); #@ + eval(shift(@insns)); + &palignr ($t0,@X[0],$SZ); # X[1..4] + eval(shift(@insns)); + eval(shift(@insns)); + &palignr ($t3,@X[2],$SZ); # X[9..12] + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); #@ + &movdqa ($t1,$t0); + eval(shift(@insns)); + eval(shift(@insns)); + &movdqa ($t2,$t0); + eval(shift(@insns)); #@ + eval(shift(@insns)); + &psrld ($t0,$sigma0[2]); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &paddd (@X[0],$t3); # X[0..3] += X[9..12] + eval(shift(@insns)); #@ + eval(shift(@insns)); + &psrld ($t2,$sigma0[0]); + eval(shift(@insns)); + eval(shift(@insns)); + &pshufd ($t3,@X[3],0b11111010); # X[4..15] + eval(shift(@insns)); + eval(shift(@insns)); #@ + &pslld ($t1,8*$SZ-$sigma0[1]); + eval(shift(@insns)); + eval(shift(@insns)); + &pxor ($t0,$t2); + eval(shift(@insns)); #@ + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); #@ + &psrld ($t2,$sigma0[1]-$sigma0[0]); + eval(shift(@insns)); + &pxor ($t0,$t1); + eval(shift(@insns)); + eval(shift(@insns)); + &pslld ($t1,$sigma0[1]-$sigma0[0]); + eval(shift(@insns)); + eval(shift(@insns)); + &pxor ($t0,$t2); + eval(shift(@insns)); + eval(shift(@insns)); #@ + &movdqa ($t2,$t3); + eval(shift(@insns)); + eval(shift(@insns)); + &pxor ($t0,$t1); # sigma0(X[1..4]) + eval(shift(@insns)); #@ + eval(shift(@insns)); + eval(shift(@insns)); + &psrld ($t3,$sigma1[2]); + eval(shift(@insns)); + eval(shift(@insns)); + &paddd (@X[0],$t0); # X[0..3] += sigma0(X[1..4]) + eval(shift(@insns)); #@ + eval(shift(@insns)); + &psrlq ($t2,$sigma1[0]); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &pxor ($t3,$t2); + eval(shift(@insns)); #@ + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); #@ + &psrlq ($t2,$sigma1[1]-$sigma1[0]); + eval(shift(@insns)); + eval(shift(@insns)); + &pxor ($t3,$t2); + eval(shift(@insns)); #@ + eval(shift(@insns)); + eval(shift(@insns)); + #&pshufb ($t3,$t4); # sigma1(X[14..15]) + &pshufd ($t3,$t3,0b10000000); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &psrldq ($t3,8); + eval(shift(@insns)); + eval(shift(@insns)); #@ + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); #@ + &paddd (@X[0],$t3); # X[0..1] += sigma1(X[14..15]) + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &pshufd ($t3,@X[0],0b01010000); # X[16..17] + eval(shift(@insns)); + eval(shift(@insns)); #@ + eval(shift(@insns)); + &movdqa ($t2,$t3); + eval(shift(@insns)); + eval(shift(@insns)); + &psrld ($t3,$sigma1[2]); + eval(shift(@insns)); + eval(shift(@insns)); #@ + &psrlq ($t2,$sigma1[0]); + eval(shift(@insns)); + eval(shift(@insns)); + &pxor ($t3,$t2); + eval(shift(@insns)); #@ + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); #@ + eval(shift(@insns)); + &psrlq ($t2,$sigma1[1]-$sigma1[0]); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &pxor ($t3,$t2); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); #@ + #&pshufb ($t3,$t5); + &pshufd ($t3,$t3,0b00001000); + eval(shift(@insns)); + eval(shift(@insns)); + &movdqa ($t2,16*2*$j."($Tbl)"); + eval(shift(@insns)); #@ + eval(shift(@insns)); + &pslldq ($t3,8); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &paddd (@X[0],$t3); # X[2..3] += sigma1(X[16..17]) + eval(shift(@insns)); #@ + eval(shift(@insns)); + eval(shift(@insns)); + } + &paddd ($t2,@X[0]); + foreach (@insns) { eval; } # remaining instructions + &movdqa (16*$j."(%rsp)",$t2); +} + + for ($i=0,$j=0; $j<4; $j++) { + &SSSE3_256_00_47($j,\&body_00_15,@X); + push(@X,shift(@X)); # rotate(@X) + } + &cmpb ($SZ-1+16*2*$SZ."($Tbl)",0); + &jne (".Lssse3_00_47"); + + for ($i=0; $i<16; ) { + foreach(body_00_15()) { eval; } + } +$code.=<<___; + mov $_ctx,$ctx + mov $a1,$A + + add $SZ*0($ctx),$A + lea 16*$SZ($inp),$inp + add $SZ*1($ctx),$B + add $SZ*2($ctx),$C + add $SZ*3($ctx),$D + add $SZ*4($ctx),$E + add $SZ*5($ctx),$F + add $SZ*6($ctx),$G + add $SZ*7($ctx),$H + + cmp $_end,$inp + + mov $A,$SZ*0($ctx) + mov $B,$SZ*1($ctx) + mov $C,$SZ*2($ctx) + mov $D,$SZ*3($ctx) + mov $E,$SZ*4($ctx) + mov $F,$SZ*5($ctx) + mov $G,$SZ*6($ctx) + mov $H,$SZ*7($ctx) + jb .Lloop_ssse3 + + mov $_rsp,%rsi +.cfi_def_cfa %rsi,8 +___ +$code.=<<___ if ($win64); + movaps 16*$SZ+32(%rsp),%xmm6 + movaps 16*$SZ+48(%rsp),%xmm7 + movaps 16*$SZ+64(%rsp),%xmm8 + movaps 16*$SZ+80(%rsp),%xmm9 +___ +$code.=<<___; + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lepilogue_ssse3: + ret +.cfi_endproc +.size ${func}_ssse3,.-${func}_ssse3 +___ +} + +if ($avx) {{ +###################################################################### +# AVX+shrd code path +# +local *ror = sub { &shrd(@_[0],@_) }; + +$code.=<<___; +.type ${func}_avx,\@function,3 +.align 64 +${func}_avx: +.cfi_startproc +.Lavx_shortcut: + mov %rsp,%rax # copy %rsp +.cfi_def_cfa_register %rax + push %rbx +.cfi_push %rbx + push %rbp +.cfi_push %rbp + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 + shl \$4,%rdx # num*16 + sub \$`$framesz+$win64*16*($SZ==4?4:6)`,%rsp + lea ($inp,%rdx,$SZ),%rdx # inp+num*16*$SZ + and \$-64,%rsp # align stack frame + mov $ctx,$_ctx # save ctx, 1st arg + mov $inp,$_inp # save inp, 2nd arh + mov %rdx,$_end # save end pointer, "3rd" arg + mov %rax,$_rsp # save copy of %rsp +.cfi_cfa_expression $_rsp,deref,+8 +___ +$code.=<<___ if ($win64); + movaps %xmm6,16*$SZ+32(%rsp) + movaps %xmm7,16*$SZ+48(%rsp) + movaps %xmm8,16*$SZ+64(%rsp) + movaps %xmm9,16*$SZ+80(%rsp) +___ +$code.=<<___ if ($win64 && $SZ>4); + movaps %xmm10,16*$SZ+96(%rsp) + movaps %xmm11,16*$SZ+112(%rsp) +___ +$code.=<<___; +.Lprologue_avx: + + vzeroupper + mov $SZ*0($ctx),$A + mov $SZ*1($ctx),$B + mov $SZ*2($ctx),$C + mov $SZ*3($ctx),$D + mov $SZ*4($ctx),$E + mov $SZ*5($ctx),$F + mov $SZ*6($ctx),$G + mov $SZ*7($ctx),$H +___ + if ($SZ==4) { # SHA256 + my @X = map("%xmm$_",(0..3)); + my ($t0,$t1,$t2,$t3, $t4,$t5) = map("%xmm$_",(4..9)); + +$code.=<<___; + vmovdqa $TABLE+`$SZ*2*$rounds`+32(%rip),$t4 + vmovdqa $TABLE+`$SZ*2*$rounds`+64(%rip),$t5 + jmp .Lloop_avx +.align 16 +.Lloop_avx: + vmovdqa $TABLE+`$SZ*2*$rounds`(%rip),$t3 + vmovdqu 0x00($inp),@X[0] + vmovdqu 0x10($inp),@X[1] + vmovdqu 0x20($inp),@X[2] + vmovdqu 0x30($inp),@X[3] + vpshufb $t3,@X[0],@X[0] + lea $TABLE(%rip),$Tbl + vpshufb $t3,@X[1],@X[1] + vpshufb $t3,@X[2],@X[2] + vpaddd 0x00($Tbl),@X[0],$t0 + vpshufb $t3,@X[3],@X[3] + vpaddd 0x20($Tbl),@X[1],$t1 + vpaddd 0x40($Tbl),@X[2],$t2 + vpaddd 0x60($Tbl),@X[3],$t3 + vmovdqa $t0,0x00(%rsp) + mov $A,$a1 + vmovdqa $t1,0x10(%rsp) + mov $B,$a3 + vmovdqa $t2,0x20(%rsp) + xor $C,$a3 # magic + vmovdqa $t3,0x30(%rsp) + mov $E,$a0 + jmp .Lavx_00_47 + +.align 16 +.Lavx_00_47: + sub \$`-16*2*$SZ`,$Tbl # size optimization +___ +sub Xupdate_256_AVX () { + ( + '&vpalignr ($t0,@X[1],@X[0],$SZ)', # X[1..4] + '&vpalignr ($t3,@X[3],@X[2],$SZ)', # X[9..12] + '&vpsrld ($t2,$t0,$sigma0[0]);', + '&vpaddd (@X[0],@X[0],$t3)', # X[0..3] += X[9..12] + '&vpsrld ($t3,$t0,$sigma0[2])', + '&vpslld ($t1,$t0,8*$SZ-$sigma0[1]);', + '&vpxor ($t0,$t3,$t2)', + '&vpshufd ($t3,@X[3],0b11111010)',# X[14..15] + '&vpsrld ($t2,$t2,$sigma0[1]-$sigma0[0]);', + '&vpxor ($t0,$t0,$t1)', + '&vpslld ($t1,$t1,$sigma0[1]-$sigma0[0]);', + '&vpxor ($t0,$t0,$t2)', + '&vpsrld ($t2,$t3,$sigma1[2]);', + '&vpxor ($t0,$t0,$t1)', # sigma0(X[1..4]) + '&vpsrlq ($t3,$t3,$sigma1[0]);', + '&vpaddd (@X[0],@X[0],$t0)', # X[0..3] += sigma0(X[1..4]) + '&vpxor ($t2,$t2,$t3);', + '&vpsrlq ($t3,$t3,$sigma1[1]-$sigma1[0])', + '&vpxor ($t2,$t2,$t3)', + '&vpshufb ($t2,$t2,$t4)', # sigma1(X[14..15]) + '&vpaddd (@X[0],@X[0],$t2)', # X[0..1] += sigma1(X[14..15]) + '&vpshufd ($t3,@X[0],0b01010000)',# X[16..17] + '&vpsrld ($t2,$t3,$sigma1[2])', + '&vpsrlq ($t3,$t3,$sigma1[0])', + '&vpxor ($t2,$t2,$t3);', + '&vpsrlq ($t3,$t3,$sigma1[1]-$sigma1[0])', + '&vpxor ($t2,$t2,$t3)', + '&vpshufb ($t2,$t2,$t5)', + '&vpaddd (@X[0],@X[0],$t2)' # X[2..3] += sigma1(X[16..17]) + ); +} + +sub AVX_256_00_47 () { +my $j = shift; +my $body = shift; +my @X = @_; +my @insns = (&$body,&$body,&$body,&$body); # 104 instructions + + foreach (Xupdate_256_AVX()) { # 29 instructions + eval; + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + } + &vpaddd ($t2,@X[0],16*2*$j."($Tbl)"); + foreach (@insns) { eval; } # remaining instructions + &vmovdqa (16*$j."(%rsp)",$t2); +} + + for ($i=0,$j=0; $j<4; $j++) { + &AVX_256_00_47($j,\&body_00_15,@X); + push(@X,shift(@X)); # rotate(@X) + } + &cmpb ($SZ-1+16*2*$SZ."($Tbl)",0); + &jne (".Lavx_00_47"); + + for ($i=0; $i<16; ) { + foreach(body_00_15()) { eval; } + } + + } else { # SHA512 + my @X = map("%xmm$_",(0..7)); + my ($t0,$t1,$t2,$t3) = map("%xmm$_",(8..11)); + +$code.=<<___; + jmp .Lloop_avx +.align 16 +.Lloop_avx: + vmovdqa $TABLE+`$SZ*2*$rounds`(%rip),$t3 + vmovdqu 0x00($inp),@X[0] + lea $TABLE+0x80(%rip),$Tbl # size optimization + vmovdqu 0x10($inp),@X[1] + vmovdqu 0x20($inp),@X[2] + vpshufb $t3,@X[0],@X[0] + vmovdqu 0x30($inp),@X[3] + vpshufb $t3,@X[1],@X[1] + vmovdqu 0x40($inp),@X[4] + vpshufb $t3,@X[2],@X[2] + vmovdqu 0x50($inp),@X[5] + vpshufb $t3,@X[3],@X[3] + vmovdqu 0x60($inp),@X[6] + vpshufb $t3,@X[4],@X[4] + vmovdqu 0x70($inp),@X[7] + vpshufb $t3,@X[5],@X[5] + vpaddq -0x80($Tbl),@X[0],$t0 + vpshufb $t3,@X[6],@X[6] + vpaddq -0x60($Tbl),@X[1],$t1 + vpshufb $t3,@X[7],@X[7] + vpaddq -0x40($Tbl),@X[2],$t2 + vpaddq -0x20($Tbl),@X[3],$t3 + vmovdqa $t0,0x00(%rsp) + vpaddq 0x00($Tbl),@X[4],$t0 + vmovdqa $t1,0x10(%rsp) + vpaddq 0x20($Tbl),@X[5],$t1 + vmovdqa $t2,0x20(%rsp) + vpaddq 0x40($Tbl),@X[6],$t2 + vmovdqa $t3,0x30(%rsp) + vpaddq 0x60($Tbl),@X[7],$t3 + vmovdqa $t0,0x40(%rsp) + mov $A,$a1 + vmovdqa $t1,0x50(%rsp) + mov $B,$a3 + vmovdqa $t2,0x60(%rsp) + xor $C,$a3 # magic + vmovdqa $t3,0x70(%rsp) + mov $E,$a0 + jmp .Lavx_00_47 + +.align 16 +.Lavx_00_47: + add \$`16*2*$SZ`,$Tbl +___ +sub Xupdate_512_AVX () { + ( + '&vpalignr ($t0,@X[1],@X[0],$SZ)', # X[1..2] + '&vpalignr ($t3,@X[5],@X[4],$SZ)', # X[9..10] + '&vpsrlq ($t2,$t0,$sigma0[0])', + '&vpaddq (@X[0],@X[0],$t3);', # X[0..1] += X[9..10] + '&vpsrlq ($t3,$t0,$sigma0[2])', + '&vpsllq ($t1,$t0,8*$SZ-$sigma0[1]);', + '&vpxor ($t0,$t3,$t2)', + '&vpsrlq ($t2,$t2,$sigma0[1]-$sigma0[0]);', + '&vpxor ($t0,$t0,$t1)', + '&vpsllq ($t1,$t1,$sigma0[1]-$sigma0[0]);', + '&vpxor ($t0,$t0,$t2)', + '&vpsrlq ($t3,@X[7],$sigma1[2]);', + '&vpxor ($t0,$t0,$t1)', # sigma0(X[1..2]) + '&vpsllq ($t2,@X[7],8*$SZ-$sigma1[1]);', + '&vpaddq (@X[0],@X[0],$t0)', # X[0..1] += sigma0(X[1..2]) + '&vpsrlq ($t1,@X[7],$sigma1[0]);', + '&vpxor ($t3,$t3,$t2)', + '&vpsllq ($t2,$t2,$sigma1[1]-$sigma1[0]);', + '&vpxor ($t3,$t3,$t1)', + '&vpsrlq ($t1,$t1,$sigma1[1]-$sigma1[0]);', + '&vpxor ($t3,$t3,$t2)', + '&vpxor ($t3,$t3,$t1)', # sigma1(X[14..15]) + '&vpaddq (@X[0],@X[0],$t3)', # X[0..1] += sigma1(X[14..15]) + ); +} + +sub AVX_512_00_47 () { +my $j = shift; +my $body = shift; +my @X = @_; +my @insns = (&$body,&$body); # 52 instructions + + foreach (Xupdate_512_AVX()) { # 23 instructions + eval; + eval(shift(@insns)); + eval(shift(@insns)); + } + &vpaddq ($t2,@X[0],16*2*$j-0x80."($Tbl)"); + foreach (@insns) { eval; } # remaining instructions + &vmovdqa (16*$j."(%rsp)",$t2); +} + + for ($i=0,$j=0; $j<8; $j++) { + &AVX_512_00_47($j,\&body_00_15,@X); + push(@X,shift(@X)); # rotate(@X) + } + &cmpb ($SZ-1+16*2*$SZ-0x80."($Tbl)",0); + &jne (".Lavx_00_47"); + + for ($i=0; $i<16; ) { + foreach(body_00_15()) { eval; } + } +} +$code.=<<___; + mov $_ctx,$ctx + mov $a1,$A + + add $SZ*0($ctx),$A + lea 16*$SZ($inp),$inp + add $SZ*1($ctx),$B + add $SZ*2($ctx),$C + add $SZ*3($ctx),$D + add $SZ*4($ctx),$E + add $SZ*5($ctx),$F + add $SZ*6($ctx),$G + add $SZ*7($ctx),$H + + cmp $_end,$inp + + mov $A,$SZ*0($ctx) + mov $B,$SZ*1($ctx) + mov $C,$SZ*2($ctx) + mov $D,$SZ*3($ctx) + mov $E,$SZ*4($ctx) + mov $F,$SZ*5($ctx) + mov $G,$SZ*6($ctx) + mov $H,$SZ*7($ctx) + jb .Lloop_avx + + mov $_rsp,%rsi +.cfi_def_cfa %rsi,8 + vzeroupper +___ +$code.=<<___ if ($win64); + movaps 16*$SZ+32(%rsp),%xmm6 + movaps 16*$SZ+48(%rsp),%xmm7 + movaps 16*$SZ+64(%rsp),%xmm8 + movaps 16*$SZ+80(%rsp),%xmm9 +___ +$code.=<<___ if ($win64 && $SZ>4); + movaps 16*$SZ+96(%rsp),%xmm10 + movaps 16*$SZ+112(%rsp),%xmm11 +___ +$code.=<<___; + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lepilogue_avx: + ret +.cfi_endproc +.size ${func}_avx,.-${func}_avx +___ + +}}}}} + +# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame, +# CONTEXT *context,DISPATCHER_CONTEXT *disp) +if ($win64) { +$rec="%rcx"; +$frame="%rdx"; +$context="%r8"; +$disp="%r9"; + +$code.=<<___; +.extern __imp_RtlVirtualUnwind +.type se_handler,\@abi-omnipotent +.align 16 +se_handler: + push %rsi + push %rdi + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + pushfq + sub \$64,%rsp + + mov 120($context),%rax # pull context->Rax + mov 248($context),%rbx # pull context->Rip + + mov 8($disp),%rsi # disp->ImageBase + mov 56($disp),%r11 # disp->HanderlData + + mov 0(%r11),%r10d # HandlerData[0] + lea (%rsi,%r10),%r10 # prologue label + cmp %r10,%rbx # context->RipRsp + + mov 4(%r11),%r10d # HandlerData[1] + lea (%rsi,%r10),%r10 # epilogue label + cmp %r10,%rbx # context->Rip>=epilogue label + jae .Lin_prologue +___ +$code.=<<___; + mov %rax,%rsi # put aside Rsp + mov 16*$SZ+3*8(%rax),%rax # pull $_rsp + + mov -8(%rax),%rbx + mov -16(%rax),%rbp + mov -24(%rax),%r12 + mov -32(%rax),%r13 + mov -40(%rax),%r14 + mov -48(%rax),%r15 + mov %rbx,144($context) # restore context->Rbx + mov %rbp,160($context) # restore context->Rbp + mov %r12,216($context) # restore context->R12 + mov %r13,224($context) # restore context->R13 + mov %r14,232($context) # restore context->R14 + mov %r15,240($context) # restore context->R15 + + lea .Lepilogue(%rip),%r10 + cmp %r10,%rbx + jb .Lin_prologue # non-AVX code + + lea 16*$SZ+4*8(%rsi),%rsi # Xmm6- save area + lea 512($context),%rdi # &context.Xmm6 + mov \$`$SZ==4?8:12`,%ecx + .long 0xa548f3fc # cld; rep movsq + +.Lin_prologue: + mov 8(%rax),%rdi + mov 16(%rax),%rsi + mov %rax,152($context) # restore context->Rsp + mov %rsi,168($context) # restore context->Rsi + mov %rdi,176($context) # restore context->Rdi + + mov 40($disp),%rdi # disp->ContextRecord + mov $context,%rsi # context + mov \$154,%ecx # sizeof(CONTEXT) + .long 0xa548f3fc # cld; rep movsq + + mov $disp,%rsi + xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER + mov 8(%rsi),%rdx # arg2, disp->ImageBase + mov 0(%rsi),%r8 # arg3, disp->ControlPc + mov 16(%rsi),%r9 # arg4, disp->FunctionEntry + mov 40(%rsi),%r10 # disp->ContextRecord + lea 56(%rsi),%r11 # &disp->HandlerData + lea 24(%rsi),%r12 # &disp->EstablisherFrame + mov %r10,32(%rsp) # arg5 + mov %r11,40(%rsp) # arg6 + mov %r12,48(%rsp) # arg7 + mov %rcx,56(%rsp) # arg8, (NULL) + call *__imp_RtlVirtualUnwind(%rip) + + mov \$1,%eax # ExceptionContinueSearch + add \$64,%rsp + popfq + pop %r15 + pop %r14 + pop %r13 + pop %r12 + pop %rbp + pop %rbx + pop %rdi + pop %rsi + ret +.size se_handler,.-se_handler +___ + +$code.=<<___ if ($SZ==4 && $shaext); +.type shaext_handler,\@abi-omnipotent +.align 16 +shaext_handler: + push %rsi + push %rdi + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + pushfq + sub \$64,%rsp + + mov 120($context),%rax # pull context->Rax + mov 248($context),%rbx # pull context->Rip + + lea .Lprologue_shaext(%rip),%r10 + cmp %r10,%rbx # context->Rip<.Lprologue + jb .Lin_prologue + + lea .Lepilogue_shaext(%rip),%r10 + cmp %r10,%rbx # context->Rip>=.Lepilogue + jae .Lin_prologue + + lea -8-5*16(%rax),%rsi + lea 512($context),%rdi # &context.Xmm6 + mov \$10,%ecx + .long 0xa548f3fc # cld; rep movsq + + jmp .Lin_prologue +.size shaext_handler,.-shaext_handler +___ + +$code.=<<___; +.section .pdata +.align 4 + .rva .LSEH_begin_$func + .rva .LSEH_end_$func + .rva .LSEH_info_$func +___ +$code.=<<___ if ($SZ==4 && $shaext); + .rva .LSEH_begin_${func}_shaext + .rva .LSEH_end_${func}_shaext + .rva .LSEH_info_${func}_shaext +___ +$code.=<<___ if ($SZ==4); + .rva .LSEH_begin_${func}_ssse3 + .rva .LSEH_end_${func}_ssse3 + .rva .LSEH_info_${func}_ssse3 +___ +$code.=<<___ if ($avx); + .rva .LSEH_begin_${func}_avx + .rva .LSEH_end_${func}_avx + .rva .LSEH_info_${func}_avx +___ +$code.=<<___; +.section .xdata +.align 8 +.LSEH_info_$func: + .byte 9,0,0,0 + .rva se_handler + .rva .Lprologue,.Lepilogue # HandlerData[] +___ +$code.=<<___ if ($SZ==4 && $shaext); +.LSEH_info_${func}_shaext: + .byte 9,0,0,0 + .rva shaext_handler +___ +$code.=<<___ if ($SZ==4); +.LSEH_info_${func}_ssse3: + .byte 9,0,0,0 + .rva se_handler + .rva .Lprologue_ssse3,.Lepilogue_ssse3 # HandlerData[] +___ +$code.=<<___ if ($avx); +.LSEH_info_${func}_avx: + .byte 9,0,0,0 + .rva se_handler + .rva .Lprologue_avx,.Lepilogue_avx # HandlerData[] +___ +} + +sub sha256op38 { + my $instr = shift; + my %opcodelet = ( + "sha256rnds2" => 0xcb, + "sha256msg1" => 0xcc, + "sha256msg2" => 0xcd ); + + if (defined($opcodelet{$instr}) && @_[0] =~ /%xmm([0-7]),\s*%xmm([0-7])/) { + my @opcode=(0x0f,0x38); + push @opcode,$opcodelet{$instr}; + push @opcode,0xc0|($1&7)|(($2&7)<<3); # ModR/M + return ".byte\t".join(',',@opcode); + } else { + return $instr."\t".@_[0]; + } +} + +foreach (split("\n",$code)) { + s/\`([^\`]*)\`/eval $1/geo; + + s/\b(sha256[^\s]*)\s+(.*)/sha256op38($1,$2)/geo; + + print $_,"\n"; +} +close STDOUT or die "error closing STDOUT"; diff --git a/vendor/ring/crypto/internal.h b/vendor/ring/crypto/internal.h new file mode 100644 index 00000000..33511dcf --- /dev/null +++ b/vendor/ring/crypto/internal.h @@ -0,0 +1,306 @@ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ +/* ==================================================================== + * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). */ + +#ifndef OPENSSL_HEADER_CRYPTO_INTERNAL_H +#define OPENSSL_HEADER_CRYPTO_INTERNAL_H + +#include // Must be first. + +#include "GFp/check.h" + +#if defined(__GNUC__) && \ + (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 +// |alignas| and |alignof| were added in C11. GCC added support in version 4.8. +// Testing for __STDC_VERSION__/__cplusplus doesn't work because 4.7 already +// reports support for C11. +#define alignas(x) __attribute__ ((aligned (x))) +#elif defined(_MSC_VER) && !defined(__clang__) +#define alignas(x) __declspec(align(x)) +#else +#include +#endif + +// Some C compilers require a useless cast when dealing with arrays for the +// reason explained in +// https://gustedt.wordpress.com/2011/02/12/const-and-arrays/ +#if defined(__clang__) || defined(_MSC_VER) +#define GFp_POINTLESS_ARRAY_CONST_CAST(cast) +#else +#define GFp_POINTLESS_ARRAY_CONST_CAST(cast) cast +#endif + +#if (!defined(_MSC_VER) || defined(__clang__)) && defined(OPENSSL_64_BIT) +#define BORINGSSL_HAS_UINT128 +typedef __int128_t int128_t; +typedef __uint128_t uint128_t; +#endif + + +// Constant-time utility functions. +// +// The following methods return a bitmask of all ones (0xff...f) for true and 0 +// for false. This is useful for choosing a value based on the result of a +// conditional in constant time. For example, +// +// if (a < b) { +// c = a; +// } else { +// c = b; +// } +// +// can be written as +// +// crypto_word lt = constant_time_lt_w(a, b); +// c = constant_time_select_w(lt, a, b); + +// crypto_word is the type that most constant-time functions use. Ideally we +// would like it to be |size_t|, but NaCl builds in 64-bit mode with 32-bit +// pointers, which means that |size_t| can be 32 bits when |crypto_word| is 64 +// bits. +#if defined(OPENSSL_64_BIT) +typedef uint64_t crypto_word; +#define CRYPTO_WORD_BITS (64u) +#elif defined(OPENSSL_32_BIT) +typedef uint32_t crypto_word; +#define CRYPTO_WORD_BITS (32u) +#else +#error "Must define either OPENSSL_32_BIT or OPENSSL_64_BIT" +#endif + +#define CONSTTIME_TRUE_W ~((crypto_word)0) +#define CONSTTIME_FALSE_W ((crypto_word)0) + +// value_barrier_w returns |a|, but prevents GCC and Clang from reasoning about +// the returned value. This is used to mitigate compilers undoing constant-time +// code, until we can express our requirements directly in the language. +// +// Note the compiler is aware that |value_barrier_w| has no side effects and +// always has the same output for a given input. This allows it to eliminate +// dead code, move computations across loops, and vectorize. +static inline crypto_word value_barrier_w(crypto_word a) { +#if !defined(OPENSSL_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) + __asm__("" : "+r"(a) : /* no inputs */); +#endif + return a; +} + +// value_barrier_u32 behaves like |value_barrier_w| but takes a |uint32_t|. +static inline uint32_t value_barrier_u32(uint32_t a) { +#if !defined(OPENSSL_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) + __asm__("" : "+r"(a) : /* no inputs */); +#endif + return a; +} + +// value_barrier_u64 behaves like |value_barrier_w| but takes a |uint64_t|. +static inline uint64_t value_barrier_u64(uint64_t a) { +#if !defined(OPENSSL_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) + __asm__("" : "+r"(a) : /* no inputs */); +#endif + return a; +} + +// constant_time_msb_w returns the given value with the MSB copied to all the +// other bits. +static inline crypto_word constant_time_msb_w(crypto_word a) { + return 0u - (a >> (sizeof(a) * 8 - 1)); +} + +// constant_time_is_zero_w returns 0xff..f if a == 0 and 0 otherwise. +static inline crypto_word constant_time_is_zero_w(crypto_word a) { + // Here is an SMT-LIB verification of this formula: + // + // (define-fun is_zero ((a (_ BitVec 32))) (_ BitVec 32) + // (bvand (bvnot a) (bvsub a #x00000001)) + // ) + // + // (declare-fun a () (_ BitVec 32)) + // + // (assert (not (= (= #x00000001 (bvlshr (is_zero a) #x0000001f)) (= a #x00000000)))) + // (check-sat) + // (get-model) + return constant_time_msb_w(~a & (a - 1)); +} + +static inline crypto_word constant_time_is_nonzero_w(crypto_word a) { + return ~constant_time_is_zero_w(a); +} + +// constant_time_eq_w returns 0xff..f if a == b and 0 otherwise. +static inline crypto_word constant_time_eq_w(crypto_word a, + crypto_word b) { + return constant_time_is_zero_w(a ^ b); +} + +// constant_time_select_w returns (mask & a) | (~mask & b). When |mask| is all +// 1s or all 0s (as returned by the methods above), the select methods return +// either |a| (if |mask| is nonzero) or |b| (if |mask| is zero). +static inline crypto_word constant_time_select_w(crypto_word mask, + crypto_word a, + crypto_word b) { + // Clang recognizes this pattern as a select. While it usually transforms it + // to a cmov, it sometimes further transforms it into a branch, which we do + // not want. + // + // Adding barriers to both |mask| and |~mask| breaks the relationship between + // the two, which makes the compiler stick with bitmasks. + return (value_barrier_w(mask) & a) | (value_barrier_w(~mask) & b); +} + +// Endianness conversions. + +#if defined(__GNUC__) && __GNUC__ >= 2 +static inline uint32_t CRYPTO_bswap4(uint32_t x) { + return __builtin_bswap32(x); +} +#elif defined(_MSC_VER) +#pragma warning(push, 3) +#include +#pragma warning(pop) +#pragma intrinsic(_byteswap_uint64, _byteswap_ulong) +static inline uint32_t CRYPTO_bswap4(uint32_t x) { + return _byteswap_ulong(x); +} +#endif + +#if !defined(GFp_NOSTDLIBINC) +#include +#endif + +static inline void *GFp_memcpy(void *dst, const void *src, size_t n) { +#if !defined(GFp_NOSTDLIBINC) + if (n == 0) { + return dst; + } + return memcpy(dst, src, n); +#else + unsigned char *d = dst; + const unsigned char *s = src; + for (size_t i = 0; i < n; ++i) { + d[i] = s[i]; + } + return dst; +#endif +} + +static inline void *GFp_memset(void *dst, int c, size_t n) { +#if !defined(GFp_NOSTDLIBINC) + if (n == 0) { + return dst; + } + return memset(dst, c, n); +#else + unsigned char *d = dst; + for (size_t i = 0; i < n; ++i) { + d[i] = (unsigned char)c; + } + return dst; +#endif +} + +#endif // OPENSSL_HEADER_CRYPTO_INTERNAL_H diff --git a/vendor/ring/crypto/limbs/limbs.c b/vendor/ring/crypto/limbs/limbs.c new file mode 100644 index 00000000..7a0e791d --- /dev/null +++ b/vendor/ring/crypto/limbs/limbs.c @@ -0,0 +1,198 @@ +/* Copyright 2016-2017 Brian Smith. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +#include "limbs.h" + +#include "../internal.h" +#include "../fipsmodule/bn/internal.h" +#include "limbs.inl" + + +/* XXX: We assume that the conversion from |Carry| to |Limb| is constant-time, + * but we haven't verified that assumption. TODO: Fix it so we don't need to + * make that assumption. */ + +/* Returns 0xfff..f if |a| is all zero limbs, and zero otherwise. |num_limbs| + * may be zero. */ +Limb LIMBS_are_zero(const Limb a[], size_t num_limbs) { + Limb is_zero = CONSTTIME_TRUE_W; + for (size_t i = 0; i < num_limbs; ++i) { + is_zero = constant_time_select_w(is_zero, constant_time_is_zero_w(a[i]), + is_zero); + } + return is_zero; +} + +/* Returns 0xffff..f if |a == b|, and zero otherwise. |num_limbs| may be zero. */ +Limb LIMBS_equal(const Limb a[], const Limb b[], size_t num_limbs) { + Limb eq = CONSTTIME_TRUE_W; + for (size_t i = 0; i < num_limbs; ++i) { + eq = constant_time_select_w(eq, constant_time_eq_w(a[i], b[i]), eq); + } + return eq; +} + +/* Returns 0xffff..f if |a == b|, and zero otherwise. |num_limbs| may be zero. */ +Limb LIMBS_equal_limb(const Limb a[], Limb b, size_t num_limbs) { + if (num_limbs == 0) { + return constant_time_is_zero_w(b); + } + debug_assert_nonsecret(num_limbs >= 1); + Limb lo_equal = constant_time_eq_w(a[0], b); + Limb hi_zero = LIMBS_are_zero(&a[1], num_limbs - 1); + return constant_time_select_w(lo_equal, hi_zero, 0); +} + +/* Returns 0xfff..f if |a| is all zero limbs, and zero otherwise. + * |num_limbs| may be zero. */ +Limb LIMBS_are_even(const Limb a[], size_t num_limbs) { + Limb lo; + if (num_limbs == 0) { + lo = 0; + } else { + lo = a[0]; + } + return constant_time_is_zero_w(lo & 1); +} + +/* Returns 0xffff...f if |a| is less than |b|, and zero otherwise. */ +Limb LIMBS_less_than(const Limb a[], const Limb b[], size_t num_limbs) { + debug_assert_nonsecret(num_limbs >= 1); + /* There are lots of ways to implement this. It is implemented this way to + * be consistent with |LIMBS_limbs_reduce_once| and other code that makes such + * comparisons as part of doing conditional reductions. */ + Limb dummy; + Carry borrow = limb_sub(&dummy, a[0], b[0]); + for (size_t i = 1; i < num_limbs; ++i) { + borrow = limb_sbb(&dummy, a[i], b[i], borrow); + } + return constant_time_is_nonzero_w(borrow); +} + +Limb LIMBS_less_than_limb(const Limb a[], Limb b, size_t num_limbs) { + debug_assert_nonsecret(num_limbs >= 1); + + Limb dummy; + Limb lo = constant_time_is_nonzero_w(limb_sub(&dummy, a[0], b)); + Limb hi = LIMBS_are_zero(&a[1], num_limbs - 1); + return constant_time_select_w(lo, hi, lo); +} + +/* if (r >= m) { r -= m; } */ +void LIMBS_reduce_once(Limb r[], const Limb m[], size_t num_limbs) { + debug_assert_nonsecret(num_limbs >= 1); + /* This could be done more efficiently if we had |num_limbs| of extra space + * available, by storing |r - m| and then doing a conditional copy of either + * |r| or |r - m|. But, in order to operate in constant space, with an eye + * towards this function being used in RSA in the future, we do things a + * slightly less efficient way. */ + Limb lt = LIMBS_less_than(r, m, num_limbs); + Carry borrow = + limb_sub(&r[0], r[0], constant_time_select_w(lt, 0, m[0])); + for (size_t i = 1; i < num_limbs; ++i) { + /* XXX: This is probably particularly inefficient because the operations in + * constant_time_select affect the carry flag, so there will likely be + * loads and stores of |borrow|. */ + borrow = + limb_sbb(&r[i], r[i], constant_time_select_w(lt, 0, m[i]), borrow); + } + dev_assert_secret(borrow == 0); +} + +void LIMBS_add_mod(Limb r[], const Limb a[], const Limb b[], const Limb m[], + size_t num_limbs) { + Limb overflow1 = + constant_time_is_nonzero_w(limbs_add(r, a, b, num_limbs)); + Limb overflow2 = ~LIMBS_less_than(r, m, num_limbs); + Limb overflow = overflow1 | overflow2; + Carry borrow = limb_sub(&r[0], r[0], m[0] & overflow); + for (size_t i = 1; i < num_limbs; ++i) { + borrow = limb_sbb(&r[i], r[i], m[i] & overflow, borrow); + } +} + +void LIMBS_sub_mod(Limb r[], const Limb a[], const Limb b[], const Limb m[], + size_t num_limbs) { + Limb underflow = + constant_time_is_nonzero_w(limbs_sub(r, a, b, num_limbs)); + Carry carry = limb_add(&r[0], r[0], m[0] & underflow); + for (size_t i = 1; i < num_limbs; ++i) { + carry = limb_adc(&r[i], r[i], m[i] & underflow, carry); + } +} + +void LIMBS_shl_mod(Limb r[], const Limb a[], const Limb m[], size_t num_limbs) { + Limb overflow1 = + constant_time_is_nonzero_w(a[num_limbs - 1] & LIMB_HIGH_BIT); + Limb carry = 0; + for (size_t i = 0; i < num_limbs; ++i) { + Limb limb = a[i]; + Limb new_carry = limb >> (LIMB_BITS - 1); + r[i] = (limb << 1) | carry; + carry = new_carry; + } + Limb overflow2 = ~LIMBS_less_than(r, m, num_limbs); + Limb overflow = overflow1 | overflow2; + Carry borrow = limb_sub(&r[0], r[0], m[0] & overflow); + for (size_t i = 1; i < num_limbs; ++i) { + borrow = limb_sbb(&r[i], r[i], m[i] & overflow, borrow); + } +} + +int LIMBS_select_512_32(Limb r[], const Limb table[], size_t num_limbs, + crypto_word index) { + if (num_limbs % (512 / LIMB_BITS) != 0) { + return 0; + } + limbs_select(r, table, num_limbs, 32, index); + return 1; +} + +static const Limb FIVE_BITS_MASK = 0x1f; + +crypto_word LIMBS_window5_split_window(Limb lower_limb, Limb higher_limb, size_t index_within_word) { + Limb high_bits = (higher_limb << (LIMB_BITS - index_within_word)) + & FIVE_BITS_MASK; + // There are no bits outside the window above |index_within_word| (if there + // were then this wouldn't be a split window), so we don't need to mask + // |low_bits|. + Limb low_bits = lower_limb >> index_within_word; + return low_bits | high_bits; +} + +crypto_word LIMBS_window5_unsplit_window(Limb limb, size_t index_within_word) { + return (limb >> index_within_word) & FIVE_BITS_MASK; +} + +Limb LIMB_shr(Limb a, size_t shift) { + return a >> shift; +} + +Limb GFp_limbs_mul_add_limb(Limb r[], const Limb a[], Limb b, size_t num_limbs) { + Limb carried = 0; + for (size_t i = 0; i < num_limbs; ++i) { + Limb lo; + Limb hi; + bn_umult_lohi(&lo, &hi, a[i], b); + Limb tmp; + Carry c = limb_add(&tmp, lo, carried); + c = limb_adc(&carried, hi, 0, c); + dev_assert_secret(c == 0); + c = limb_add(&r[i], r[i], tmp); + c = limb_adc(&carried, carried, 0, c); + // (A * B) + C + D never carries. + dev_assert_secret(c == 0); + } + return carried; +} diff --git a/vendor/ring/crypto/limbs/limbs.h b/vendor/ring/crypto/limbs/limbs.h new file mode 100644 index 00000000..8296a9ac --- /dev/null +++ b/vendor/ring/crypto/limbs/limbs.h @@ -0,0 +1,40 @@ +/* Copyright 2016 Brian Smith. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +#ifndef RING_LIMBS_H +#define RING_LIMBS_H + +#include + +#include "../internal.h" + +typedef crypto_word Limb; + +#define LIMB_BITS CRYPTO_WORD_BITS +#define LIMB_HIGH_BIT ((Limb)(1) << (LIMB_BITS - 1)) + + +Limb LIMBS_are_zero(const Limb a[], size_t num_limbs); +Limb LIMBS_are_even(const Limb a[], size_t num_limbs); +Limb LIMBS_equal(const Limb a[], const Limb b[], size_t num_limbs); +Limb LIMBS_equal_limb(const Limb a[], Limb b, size_t num_limbs); +void LIMBS_reduce_once(Limb r[], const Limb m[], size_t num_limbs); +void LIMBS_add_mod(Limb r[], const Limb a[], const Limb b[], const Limb m[], + size_t num_limbs); +void LIMBS_sub_mod(Limb r[], const Limb a[], const Limb b[], const Limb m[], + size_t num_limbs); +void LIMBS_shl_mod(Limb r[], const Limb a[], const Limb m[], size_t num_limbs); +Limb GFp_limbs_mul_add_limb(Limb r[], const Limb a[], Limb b, size_t num_limbs); + +#endif /* RING_LIMBS_H */ diff --git a/vendor/ring/crypto/limbs/limbs.inl b/vendor/ring/crypto/limbs/limbs.inl new file mode 100644 index 00000000..b5c1d75a --- /dev/null +++ b/vendor/ring/crypto/limbs/limbs.inl @@ -0,0 +1,162 @@ +/* Copyright 2016 Brian Smith. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +#include "limbs.h" +#include "GFp/check.h" + +#if defined(_MSC_VER) && !defined(__clang__) +#pragma warning(push, 3) +#include +#pragma warning(pop) + +/* MSVC 2015 RC, when compiling for x86 with /Ox (at least), miscompiles + * _addcarry_u32(c, 0, prod_hi, &x) like so: + * + * add eax,esi ; The previous add that might have set the carry flag. + * xor esi,esi ; OOPS! Carry flag is now reset! + * mov dword ptr [edi-4],eax + * adc esi,dword ptr [prod_hi] + * + * We test with MSVC 2015 update 2, so make sure we're using a version at least + * as new as that. */ +#if _MSC_FULL_VER < 190023918 +#error "MSVC 2015 Update 2 or later is required." +#endif +typedef uint8_t Carry; +#if LIMB_BITS == 64 +#pragma intrinsic(_addcarry_u64, _subborrow_u64) +#define GFp_ADDCARRY_INTRINSIC _addcarry_u64 +#define GFp_SUBBORROW_INTRINSIC _subborrow_u64 +#elif LIMB_BITS == 32 +#pragma intrinsic(_addcarry_u32, _subborrow_u32) +#define GFp_ADDCARRY_INTRINSIC _addcarry_u32 +#define GFp_SUBBORROW_INTRINSIC _subborrow_u32 +typedef uint64_t DoubleLimb; +#endif +#else +typedef Limb Carry; +#if LIMB_BITS == 64 +typedef __uint128_t DoubleLimb; +#elif LIMB_BITS == 32 +typedef uint64_t DoubleLimb; +#endif +#endif + +/* |*r = a + b + carry_in|, returning carry out bit. |carry_in| must be 0 or 1. + */ +static inline Carry limb_adc(Limb *r, Limb a, Limb b, Carry carry_in) { + dev_assert_secret(carry_in == 0 || carry_in == 1); + Carry ret; +#if defined(GFp_ADDCARRY_INTRINSIC) + ret = GFp_ADDCARRY_INTRINSIC(carry_in, a, b, r); +#else + DoubleLimb x = (DoubleLimb)a + b + carry_in; + *r = (Limb)x; + ret = (Carry)(x >> LIMB_BITS); +#endif + dev_assert_secret(ret == 0 || ret == 1); + return ret; +} + +/* |*r = a + b|, returning carry bit. */ +static inline Carry limb_add(Limb *r, Limb a, Limb b) { + Carry ret; +#if defined(GFp_ADDCARRY_INTRINSIC) + ret = GFp_ADDCARRY_INTRINSIC(0, a, b, r); +#else + DoubleLimb x = (DoubleLimb)a + b; + *r = (Limb)x; + ret = (Carry)(x >> LIMB_BITS); +#endif + dev_assert_secret(ret == 0 || ret == 1); + return ret; +} + +/* |*r = a - b - borrow_in|, returning the borrow out bit. |borrow_in| must be + * 0 or 1. */ +static inline Carry limb_sbb(Limb *r, Limb a, Limb b, Carry borrow_in) { + dev_assert_secret(borrow_in == 0 || borrow_in == 1); + Carry ret; +#if defined(GFp_SUBBORROW_INTRINSIC) + ret = GFp_SUBBORROW_INTRINSIC(borrow_in, a, b, r); +#else + DoubleLimb x = (DoubleLimb)a - b - borrow_in; + *r = (Limb)x; + ret = (Carry)((x >> LIMB_BITS) & 1); +#endif + dev_assert_secret(ret == 0 || ret == 1); + return ret; +} + +/* |*r = a - b|, returning borrow bit. */ +static inline Carry limb_sub(Limb *r, Limb a, Limb b) { + Carry ret; +#if defined(GFp_SUBBORROW_INTRINSIC) + ret = GFp_SUBBORROW_INTRINSIC(0, a, b, r); +#else + DoubleLimb x = (DoubleLimb)a - b; + *r = (Limb)x; + ret = (Carry)((x >> LIMB_BITS) & 1); +#endif + dev_assert_secret(ret == 0 || ret == 1); + return ret; +} + +static inline Carry limbs_add(Limb r[], const Limb a[], const Limb b[], + size_t num_limbs) { + debug_assert_nonsecret(num_limbs >= 1); + Carry carry = limb_add(&r[0], a[0], b[0]); + for (size_t i = 1; i < num_limbs; ++i) { + carry = limb_adc(&r[i], a[i], b[i], carry); + } + return carry; +} + +/* |r -= s|, returning the borrow. */ +static inline Carry limbs_sub(Limb r[], const Limb a[], const Limb b[], + size_t num_limbs) { + debug_assert_nonsecret(num_limbs >= 1); + Carry borrow = limb_sub(&r[0], a[0], b[0]); + for (size_t i = 1; i < num_limbs; ++i) { + borrow = limb_sbb(&r[i], a[i], b[i], borrow); + } + return borrow; +} + +static inline void limbs_copy(Limb r[], const Limb a[], size_t num_limbs) { + for (size_t i = 0; i < num_limbs; ++i) { + r[i] = a[i]; + } +} + +static inline void limbs_select(Limb r[], const Limb table[], + size_t num_limbs, size_t num_entries, + crypto_word index) { + for (size_t i = 0; i < num_limbs; ++i) { + r[i] = 0; + } + + for (size_t e = 0; e < num_entries; ++e) { + Limb equal = constant_time_eq_w(index, e); + for (size_t i = 0; i < num_limbs; ++i) { + r[i] = constant_time_select_w(equal, table[(e * num_limbs) + i], r[i]); + } + } +} + +static inline void limbs_zero(Limb r[], size_t num_limbs) { + for (size_t i = 0; i < num_limbs; ++i) { + r[i] = 0; + } +} diff --git a/vendor/ring/crypto/mem.c b/vendor/ring/crypto/mem.c new file mode 100644 index 00000000..5ce84896 --- /dev/null +++ b/vendor/ring/crypto/mem.c @@ -0,0 +1,66 @@ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] */ + +#include + +int GFp_memcmp(const uint8_t *a, const uint8_t *b, size_t len) { + uint8_t x = 0; + for (size_t i = 0; i < len; i++) { + x |= a[i] ^ b[i]; + } + + return x; +} diff --git a/vendor/ring/crypto/perlasm/arm-xlate.pl b/vendor/ring/crypto/perlasm/arm-xlate.pl new file mode 100755 index 00000000..97051950 --- /dev/null +++ b/vendor/ring/crypto/perlasm/arm-xlate.pl @@ -0,0 +1,244 @@ +#! /usr/bin/env perl +# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +use strict; + +my $flavour = shift; +my $output = shift; +open STDOUT,">$output" || die "can't open $output: $!"; + +$flavour = "linux32" if (!$flavour or $flavour eq "void"); + +my %GLOBALS; +my $dotinlocallabels=($flavour=~/linux/)?1:0; + +################################################################ +# directives which need special treatment on different platforms +################################################################ +my $arch = sub { + if ($flavour =~ /linux/) { ".arch\t".join(',',@_); } + elsif ($flavour =~ /win64/) { ".arch\t".join(',',@_); } + else { ""; } +}; +my $fpu = sub { + if ($flavour =~ /linux/) { ".fpu\t".join(',',@_); } + else { ""; } +}; +my $hidden = sub { + if ($flavour =~ /ios/) { ".private_extern\t".join(',',@_); } + elsif ($flavour =~ /win64/) { ""; } + else { ".hidden\t".join(',',@_); } +}; +my $comm = sub { + my @args = split(/,\s*/,shift); + my $name = @args[0]; + my $global = \$GLOBALS{$name}; + my $ret; + + if ($flavour =~ /ios32/) { + $ret = ".comm\t_$name,@args[1]\n"; + $ret .= ".non_lazy_symbol_pointer\n"; + $ret .= "$name:\n"; + $ret .= ".indirect_symbol\t_$name\n"; + $ret .= ".long\t0"; + $name = "_$name"; + } else { $ret = ".comm\t".join(',',@args); } + + $$global = $name; + $ret; +}; +my $globl = sub { + my $name = shift; + my $global = \$GLOBALS{$name}; + my $ret; + + SWITCH: for ($flavour) { + /ios/ && do { $name = "_$name"; + last; + }; + } + + $ret = ".globl $name\n"; + # All symbols in assembly files are hidden. + $ret .= &$hidden($name); + $$global = $name; + $ret; +}; +my $global = $globl; +my $extern = sub { + &$globl(@_); + return; # return nothing +}; +my $type = sub { + if ($flavour =~ /linux/) { ".type\t".join(',',@_); } + elsif ($flavour =~ /ios32/) { if (join(',',@_) =~ /(\w+),%function/) { + "#ifdef __thumb2__\n". + ".thumb_func $1\n". + "#endif"; + } + } + elsif ($flavour =~ /win64/) { if (join(',',@_) =~ /(\w+),%function/) { + # See https://sourceware.org/binutils/docs/as/Pseudo-Ops.html + # Per https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#coff-symbol-table, + # the type for functions is 0x20, or 32. + ".def $1\n". + " .type 32\n". + ".endef"; + } + } + else { ""; } +}; +my $size = sub { + if ($flavour =~ /linux/) { ".size\t".join(',',@_); } + else { ""; } +}; +my $inst = sub { + if ($flavour =~ /linux/) { ".inst\t".join(',',@_); } + else { ".long\t".join(',',@_); } +}; +my $asciz = sub { + my $line = join(",",@_); + if ($line =~ /^"(.*)"$/) + { ".byte " . join(",",unpack("C*",$1),0) . "\n.align 2"; } + else + { ""; } +}; +my $section = sub { + if ($flavour =~ /ios/) { + if ($_[0] eq ".rodata") { + return ".section\t__TEXT,__const"; + } + die "Unknown section name $_[0]"; + } else { + return ".section\t" . join(",", @_); + } +}; + +sub range { + my ($r,$sfx,$start,$end) = @_; + + join(",",map("$r$_$sfx",($start..$end))); +} + +sub expand_line { + my $line = shift; + my @ret = (); + + pos($line)=0; + + while ($line =~ m/\G[^@\/\{\"]*/g) { + if ($line =~ m/\G(@|\/\/|$)/gc) { + last; + } + elsif ($line =~ m/\G\{/gc) { + my $saved_pos = pos($line); + $line =~ s/\G([rdqv])([0-9]+)([^\-]*)\-\1([0-9]+)\3/range($1,$3,$2,$4)/e; + pos($line) = $saved_pos; + $line =~ m/\G[^\}]*\}/g; + } + elsif ($line =~ m/\G\"/gc) { + $line =~ m/\G[^\"]*\"/g; + } + } + + $line =~ s/\b(\w+)/$GLOBALS{$1} or $1/ge; + + return $line; +} + +print <<___; +// This file is generated from a similarly-named Perl script in the BoringSSL +// source tree. Do not edit by hand. + +#if !defined(__has_feature) +#define __has_feature(x) 0 +#endif +#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM) +#define OPENSSL_NO_ASM +#endif + +#if !defined(OPENSSL_NO_ASM) +___ + +print "#if defined(__arm__)\n" if ($flavour eq "linux32"); +print "#if defined(__aarch64__)\n" if ($flavour eq "linux64" || $flavour eq "win64"); + +while(my $line=<>) { + + if ($line =~ m/^\s*(#|@|\/\/)/) { print $line; next; } + + $line =~ s|/\*.*\*/||; # get rid of C-style comments... + $line =~ s|^\s+||; # ... and skip white spaces in beginning... + $line =~ s|\s+$||; # ... and at the end + + if ($flavour =~ /64/) { + my $copy = $line; + # Also remove line comments. + $copy =~ s|//.*||; + if ($copy =~ /\b[wx]18\b/) { + die "r18 is reserved by the platform and may not be used."; + } + } + + { + $line =~ s|[\b\.]L(\w{2,})|L$1|g; # common denominator for Locallabel + $line =~ s|\bL(\w{2,})|\.L$1|g if ($dotinlocallabels); + } + + { + $line =~ s|(^[\.\w]+)\:\s*||; + my $label = $1; + if ($label) { + printf "%s:",($GLOBALS{$label} or $label); + } + } + + if ($line !~ m/^[#@]/) { + $line =~ s|^\s*(\.?)(\S+)\s*||; + my $c = $1; $c = "\t" if ($c eq ""); + my $mnemonic = $2; + my $opcode; + if ($mnemonic =~ m/([^\.]+)\.([^\.]+)/) { + $opcode = eval("\$$1_$2"); + } else { + $opcode = eval("\$$mnemonic"); + } + + if ($flavour =~ /ios/) { + # Mach-O and ELF use different syntax for these relocations. Note + # that we require :pg_hi21: to be explicitly listed. It is normally + # optional with adrp instructions. + $line =~ s|:pg_hi21:(\w+)|\1\@PAGE|; + $line =~ s|:lo12:(\w+)|\1\@PAGEOFF|; + } else { + # Clang's integrated assembly does not support the optional + # :pg_hi21: markers, so erase them. + $line =~ s|:pg_hi21:||; + } + + my $arg=expand_line($line); + + if (ref($opcode) eq 'CODE') { + $line = &$opcode($arg); + } elsif ($mnemonic) { + $line = $c.$mnemonic; + $line.= "\t$arg" if ($arg ne ""); + } + } + + print $line if ($line); + print "\n"; +} + +print "#endif\n" if ($flavour eq "linux32" || $flavour eq "linux64" || $flavour eq "win64"); +print "#endif // !OPENSSL_NO_ASM\n"; + +# See https://www.airs.com/blog/archives/518. +print ".section\t.note.GNU-stack,\"\",\%progbits\n" if ($flavour =~ /linux/); + +close STDOUT; diff --git a/vendor/ring/crypto/perlasm/readme b/vendor/ring/crypto/perlasm/readme new file mode 100644 index 00000000..3f159b30 --- /dev/null +++ b/vendor/ring/crypto/perlasm/readme @@ -0,0 +1,100 @@ +The perl scripts in this directory are my 'hack' to generate +multiple different assembler formats via the one original script. + +The way to use this library is to start with adding the path to this directory +and then include it. + +push(@INC,"perlasm","../../perlasm"); +require "x86asm.pl"; + +The first thing we do is setup the file and type of assembler + +&asm_init($ARGV[0]); + +The first argument is the 'type'. Currently +'cpp', 'sol', 'a.out', 'elf' or 'win32'. +Argument 2 is the file name. + +The reciprocal function is +&asm_finish() which should be called at the end. + +There are 2 main 'packages'. x86ms.pl, which is the Microsoft assembler, +and x86unix.pl which is the unix (gas) version. + +Functions of interest are: +&external_label("des_SPtrans"); declare and external variable +&LB(reg); Low byte for a register +&HB(reg); High byte for a register +&BP(off,base,index,scale) Byte pointer addressing +&DWP(off,base,index,scale) Word pointer addressing +&stack_push(num) Basically a 'sub esp, num*4' with extra +&stack_pop(num) inverse of stack_push +&function_begin(name,extra) Start a function with pushing of + edi, esi, ebx and ebp. extra is extra win32 + external info that may be required. +&function_begin_B(name,extra) Same as normal function_begin but no pushing. +&function_end(name) Call at end of function. +&function_end_A(name) Standard pop and ret, for use inside functions +&function_end_B(name) Call at end but with poping or 'ret'. +&swtmp(num) Address on stack temp word. +&wparam(num) Parameter number num, that was push + in C convention. This all works over pushes + and pops. +&comment("hello there") Put in a comment. +&label("loop") Refer to a label, normally a jmp target. +&set_label("loop") Set a label at this point. +&data_word(word) Put in a word of data. + +So how does this all hold together? Given + +int calc(int len, int *data) + { + int i,j=0; + + for (i=0; i. +# +# Why AT&T to MASM and not vice versa? Several reasons. Because AT&T +# format is way easier to parse. Because it's simpler to "gear" from +# Unix ABI to Windows one [see cross-reference "card" at the end of +# file]. Because Linux targets were available first... +# +# In addition the script also "distills" code suitable for GNU +# assembler, so that it can be compiled with more rigid assemblers, +# such as Solaris /usr/ccs/bin/as. +# +# This translator is not designed to convert *arbitrary* assembler +# code from AT&T format to MASM one. It's designed to convert just +# enough to provide for dual-ABI OpenSSL modules development... +# There *are* limitations and you might have to modify your assembler +# code or this script to achieve the desired result... +# +# Currently recognized limitations: +# +# - can't use multiple ops per line; +# +# Dual-ABI styling rules. +# +# 1. Adhere to Unix register and stack layout [see cross-reference +# ABI "card" at the end for explanation]. +# 2. Forget about "red zone," stick to more traditional blended +# stack frame allocation. If volatile storage is actually required +# that is. If not, just leave the stack as is. +# 3. Functions tagged with ".type name,@function" get crafted with +# unified Win64 prologue and epilogue automatically. If you want +# to take care of ABI differences yourself, tag functions as +# ".type name,@abi-omnipotent" instead. +# 4. To optimize the Win64 prologue you can specify number of input +# arguments as ".type name,@function,N." Keep in mind that if N is +# larger than 6, then you *have to* write "abi-omnipotent" code, +# because >6 cases can't be addressed with unified prologue. +# 5. Name local labels as .L*, do *not* use dynamic labels such as 1: +# (sorry about latter). +# 6. Don't use [or hand-code with .byte] "rep ret." "ret" mnemonic is +# required to identify the spots, where to inject Win64 epilogue! +# But on the pros, it's then prefixed with rep automatically:-) +# 7. Stick to explicit ip-relative addressing. If you have to use +# GOTPCREL addressing, stick to mov symbol@GOTPCREL(%rip),%r??. +# Both are recognized and translated to proper Win64 addressing +# modes. +# +# 8. In order to provide for structured exception handling unified +# Win64 prologue copies %rsp value to %rax. For further details +# see SEH paragraph at the end. +# 9. .init segment is allowed to contain calls to functions only. +# a. If function accepts more than 4 arguments *and* >4th argument +# is declared as non 64-bit value, do clear its upper part. + + +use strict; + +my $flavour = shift; +my $output = shift; +if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } + +open STDOUT,">$output" || die "can't open $output: $!" + if (defined($output)); + +my $gas=1; $gas=0 if ($output =~ /\.asm$/); +my $elf=1; $elf=0 if (!$gas); +my $win64=0; +my $prefix=""; +my $decor=".L"; + +my $masmref=8 + 50727*2**-32; # 8.00.50727 shipped with VS2005 +my $masm=0; +my $PTR=" PTR"; + +my $nasmref=2.03; +my $nasm=0; + +if ($flavour eq "mingw64") { $gas=1; $elf=0; $win64=1; + # TODO(davidben): Before supporting the + # mingw64 perlasm flavour, do away with this + # environment variable check. + die "mingw64 not supported"; + $prefix=`echo __USER_LABEL_PREFIX__ | $ENV{CC} -E -P -`; + $prefix =~ s|\R$||; # Better chomp + } +elsif ($flavour eq "macosx") { $gas=1; $elf=0; $prefix="_"; $decor="L\$"; } +elsif ($flavour eq "masm") { $gas=0; $elf=0; $masm=$masmref; $win64=1; $decor="\$L\$"; } +elsif ($flavour eq "nasm") { $gas=0; $elf=0; $nasm=$nasmref; $win64=1; $decor="\$L\$"; $PTR=""; } +elsif (!$gas) { die "unknown flavour $flavour"; } + +my $current_segment; +my $current_function; +my %globals; + +{ package opcode; # pick up opcodes + sub re { + my ($class, $line) = @_; + my $self = {}; + my $ret; + + if ($$line =~ /^([a-z][a-z0-9]*)/i) { + bless $self,$class; + $self->{op} = $1; + $ret = $self; + $$line = substr($$line,@+[0]); $$line =~ s/^\s+//; + + undef $self->{sz}; + if ($self->{op} =~ /^(movz)x?([bw]).*/) { # movz is pain... + $self->{op} = $1; + $self->{sz} = $2; + } elsif ($self->{op} =~ /call|jmp/) { + $self->{sz} = ""; + } elsif ($self->{op} =~ /^p/ && $' !~ /^(ush|op|insrw)/) { # SSEn + $self->{sz} = ""; + } elsif ($self->{op} =~ /^[vk]/) { # VEX or k* such as kmov + $self->{sz} = ""; + } elsif ($self->{op} =~ /mov[dq]/ && $$line =~ /%xmm/) { + $self->{sz} = ""; + } elsif ($self->{op} =~ /^or([qlwb])$/) { + $self->{op} = "or"; + $self->{sz} = $1; + } elsif ($self->{op} =~ /([a-z]{3,})([qlwb])$/) { + $self->{op} = $1; + $self->{sz} = $2; + } + } + $ret; + } + sub size { + my ($self, $sz) = @_; + $self->{sz} = $sz if (defined($sz) && !defined($self->{sz})); + $self->{sz}; + } + sub out { + my $self = shift; + if ($gas) { + if ($self->{op} eq "movz") { # movz is pain... + sprintf "%s%s%s",$self->{op},$self->{sz},shift; + } elsif ($self->{op} =~ /^set/) { + "$self->{op}"; + } elsif ($self->{op} eq "ret") { + my $epilogue = ""; + if ($win64 && $current_function->{abi} eq "svr4") { + $epilogue = "movq 8(%rsp),%rdi\n\t" . + "movq 16(%rsp),%rsi\n\t"; + } + $epilogue . ".byte 0xf3,0xc3"; + } elsif ($self->{op} eq "call" && !$elf && $current_segment eq ".init") { + ".p2align\t3\n\t.quad"; + } else { + "$self->{op}$self->{sz}"; + } + } else { + $self->{op} =~ s/^movz/movzx/; + if ($self->{op} eq "ret") { + $self->{op} = ""; + if ($win64 && $current_function->{abi} eq "svr4") { + $self->{op} = "mov rdi,QWORD$PTR\[8+rsp\]\t;WIN64 epilogue\n\t". + "mov rsi,QWORD$PTR\[16+rsp\]\n\t"; + } + $self->{op} .= "DB\t0F3h,0C3h\t\t;repret"; + } elsif ($self->{op} =~ /^(pop|push)f/) { + $self->{op} .= $self->{sz}; + } elsif ($self->{op} eq "call" && $current_segment eq ".CRT\$XCU") { + $self->{op} = "\tDQ"; + } + $self->{op}; + } + } + sub mnemonic { + my ($self, $op) = @_; + $self->{op}=$op if (defined($op)); + $self->{op}; + } +} +{ package const; # pick up constants, which start with $ + sub re { + my ($class, $line) = @_; + my $self = {}; + my $ret; + + if ($$line =~ /^\$([^,]+)/) { + bless $self, $class; + $self->{value} = $1; + $ret = $self; + $$line = substr($$line,@+[0]); $$line =~ s/^\s+//; + } + $ret; + } + sub out { + my $self = shift; + + $self->{value} =~ s/\b(0b[0-1]+)/oct($1)/eig; + if ($gas) { + # Solaris /usr/ccs/bin/as can't handle multiplications + # in $self->{value} + my $value = $self->{value}; + no warnings; # oct might complain about overflow, ignore here... + $value =~ s/(?{value} = $value; + } + sprintf "\$%s",$self->{value}; + } else { + my $value = $self->{value}; + $value =~ s/0x([0-9a-f]+)/0$1h/ig if ($masm); + sprintf "%s",$value; + } + } +} +{ package ea; # pick up effective addresses: expr(%reg,%reg,scale) + + my %szmap = ( b=>"BYTE$PTR", w=>"WORD$PTR", + l=>"DWORD$PTR", d=>"DWORD$PTR", + q=>"QWORD$PTR", o=>"OWORD$PTR", + x=>"XMMWORD$PTR", y=>"YMMWORD$PTR", + z=>"ZMMWORD$PTR" ) if (!$gas); + + sub re { + my ($class, $line, $opcode) = @_; + my $self = {}; + my $ret; + + # optional * ----vvv--- appears in indirect jmp/call + if ($$line =~ /^(\*?)([^\(,]*)\(([%\w,]+)\)((?:{[^}]+})*)/) { + bless $self, $class; + $self->{asterisk} = $1; + $self->{label} = $2; + ($self->{base},$self->{index},$self->{scale})=split(/,/,$3); + $self->{scale} = 1 if (!defined($self->{scale})); + $self->{opmask} = $4; + $ret = $self; + $$line = substr($$line,@+[0]); $$line =~ s/^\s+//; + + if ($win64 && $self->{label} =~ s/\@GOTPCREL//) { + die if ($opcode->mnemonic() ne "mov"); + $opcode->mnemonic("lea"); + } + $self->{base} =~ s/^%//; + $self->{index} =~ s/^%// if (defined($self->{index})); + $self->{opcode} = $opcode; + } + $ret; + } + sub size {} + sub out { + my ($self, $sz) = @_; + + $self->{label} =~ s/([_a-z][_a-z0-9]*)/$globals{$1} or $1/gei; + $self->{label} =~ s/\.L/$decor/g; + + # Silently convert all EAs to 64-bit. This is required for + # elder GNU assembler and results in more compact code, + # *but* most importantly AES module depends on this feature! + $self->{index} =~ s/^[er](.?[0-9xpi])[d]?$/r\1/; + $self->{base} =~ s/^[er](.?[0-9xpi])[d]?$/r\1/; + + # Solaris /usr/ccs/bin/as can't handle multiplications + # in $self->{label}... + use integer; + $self->{label} =~ s/(?{label} =~ s/\b([0-9]+\s*[\*\/\%]\s*[0-9]+)\b/eval($1)/eg; + + # Some assemblers insist on signed presentation of 32-bit + # offsets, but sign extension is a tricky business in perl... + if ((1<<31)<<1) { + $self->{label} =~ s/\b([0-9]+)\b/$1<<32>>32/eg; + } else { + $self->{label} =~ s/\b([0-9]+)\b/$1>>0/eg; + } + + # if base register is %rbp or %r13, see if it's possible to + # flip base and index registers [for better performance] + if (!$self->{label} && $self->{index} && $self->{scale}==1 && + $self->{base} =~ /(rbp|r13)/) { + $self->{base} = $self->{index}; $self->{index} = $1; + } + + if ($gas) { + $self->{label} =~ s/^___imp_/__imp__/ if ($flavour eq "mingw64"); + + if (defined($self->{index})) { + sprintf "%s%s(%s,%%%s,%d)%s", + $self->{asterisk},$self->{label}, + $self->{base}?"%$self->{base}":"", + $self->{index},$self->{scale}, + $self->{opmask}; + } else { + sprintf "%s%s(%%%s)%s", $self->{asterisk},$self->{label}, + $self->{base},$self->{opmask}; + } + } else { + $self->{label} =~ s/\./\$/g; + $self->{label} =~ s/(?{label} = "($self->{label})" if ($self->{label} =~ /[\*\+\-\/]/); + + my $mnemonic = $self->{opcode}->mnemonic(); + ($self->{asterisk}) && ($sz="q") || + ($mnemonic =~ /^v?mov([qd])$/) && ($sz=$1) || + ($mnemonic =~ /^v?pinsr([qdwb])$/) && ($sz=$1) || + ($mnemonic =~ /^vpbroadcast([qdwb])$/) && ($sz=$1) || + ($mnemonic =~ /^v(?!perm)[a-z]+[fi]128$/) && ($sz="x"); + + $self->{opmask} =~ s/%(k[0-7])/$1/; + + if (defined($self->{index})) { + sprintf "%s[%s%s*%d%s]%s",$szmap{$sz}, + $self->{label}?"$self->{label}+":"", + $self->{index},$self->{scale}, + $self->{base}?"+$self->{base}":"", + $self->{opmask}; + } elsif ($self->{base} eq "rip") { + sprintf "%s[%s]",$szmap{$sz},$self->{label}; + } else { + sprintf "%s[%s%s]%s", $szmap{$sz}, + $self->{label}?"$self->{label}+":"", + $self->{base},$self->{opmask}; + } + } + } +} +{ package register; # pick up registers, which start with %. + sub re { + my ($class, $line, $opcode) = @_; + my $self = {}; + my $ret; + + # optional * ----vvv--- appears in indirect jmp/call + if ($$line =~ /^(\*?)%(\w+)((?:{[^}]+})*)/) { + bless $self,$class; + $self->{asterisk} = $1; + $self->{value} = $2; + $self->{opmask} = $3; + $opcode->size($self->size()); + $ret = $self; + $$line = substr($$line,@+[0]); $$line =~ s/^\s+//; + } + $ret; + } + sub size { + my $self = shift; + my $ret; + + if ($self->{value} =~ /^r[\d]+b$/i) { $ret="b"; } + elsif ($self->{value} =~ /^r[\d]+w$/i) { $ret="w"; } + elsif ($self->{value} =~ /^r[\d]+d$/i) { $ret="l"; } + elsif ($self->{value} =~ /^r[\w]+$/i) { $ret="q"; } + elsif ($self->{value} =~ /^[a-d][hl]$/i){ $ret="b"; } + elsif ($self->{value} =~ /^[\w]{2}l$/i) { $ret="b"; } + elsif ($self->{value} =~ /^[\w]{2}$/i) { $ret="w"; } + elsif ($self->{value} =~ /^e[a-z]{2}$/i){ $ret="l"; } + + $ret; + } + sub out { + my $self = shift; + if ($gas) { sprintf "%s%%%s%s", $self->{asterisk}, + $self->{value}, + $self->{opmask}; } + else { $self->{opmask} =~ s/%(k[0-7])/$1/; + $self->{value}.$self->{opmask}; } + } +} +{ package label; # pick up labels, which end with : + sub re { + my ($class, $line) = @_; + my $self = {}; + my $ret; + + if ($$line =~ /(^[\.\w]+)\:/) { + bless $self,$class; + $self->{value} = $1; + $ret = $self; + $$line = substr($$line,@+[0]); $$line =~ s/^\s+//; + + $self->{value} =~ s/^\.L/$decor/; + } + $ret; + } + sub out { + my $self = shift; + + if ($gas) { + my $func = ($globals{$self->{value}} or $self->{value}) . ":"; + if ($win64 && $current_function->{name} eq $self->{value} + && $current_function->{abi} eq "svr4") { + $func .= "\n"; + $func .= " movq %rdi,8(%rsp)\n"; + $func .= " movq %rsi,16(%rsp)\n"; + $func .= " movq %rsp,%rax\n"; + $func .= "${decor}SEH_begin_$current_function->{name}:\n"; + my $narg = $current_function->{narg}; + $narg=6 if (!defined($narg)); + $func .= " movq %rcx,%rdi\n" if ($narg>0); + $func .= " movq %rdx,%rsi\n" if ($narg>1); + $func .= " movq %r8,%rdx\n" if ($narg>2); + $func .= " movq %r9,%rcx\n" if ($narg>3); + $func .= " movq 40(%rsp),%r8\n" if ($narg>4); + $func .= " movq 48(%rsp),%r9\n" if ($narg>5); + } + $func; + } elsif ($self->{value} ne "$current_function->{name}") { + # Make all labels in masm global. + $self->{value} .= ":" if ($masm); + $self->{value} . ":"; + } elsif ($win64 && $current_function->{abi} eq "svr4") { + my $func = "$current_function->{name}" . + ($nasm ? ":" : "\tPROC $current_function->{scope}") . + "\n"; + $func .= " mov QWORD$PTR\[8+rsp\],rdi\t;WIN64 prologue\n"; + $func .= " mov QWORD$PTR\[16+rsp\],rsi\n"; + $func .= " mov rax,rsp\n"; + $func .= "${decor}SEH_begin_$current_function->{name}:"; + $func .= ":" if ($masm); + $func .= "\n"; + my $narg = $current_function->{narg}; + $narg=6 if (!defined($narg)); + $func .= " mov rdi,rcx\n" if ($narg>0); + $func .= " mov rsi,rdx\n" if ($narg>1); + $func .= " mov rdx,r8\n" if ($narg>2); + $func .= " mov rcx,r9\n" if ($narg>3); + $func .= " mov r8,QWORD$PTR\[40+rsp\]\n" if ($narg>4); + $func .= " mov r9,QWORD$PTR\[48+rsp\]\n" if ($narg>5); + $func .= "\n"; + } else { + "$current_function->{name}". + ($nasm ? ":" : "\tPROC $current_function->{scope}"); + } + } +} +{ package expr; # pick up expressions + sub re { + my ($class, $line, $opcode) = @_; + my $self = {}; + my $ret; + + if ($$line =~ /(^[^,]+)/) { + bless $self,$class; + $self->{value} = $1; + $ret = $self; + $$line = substr($$line,@+[0]); $$line =~ s/^\s+//; + + $self->{value} =~ s/\@PLT// if (!$elf); + $self->{value} =~ s/([_a-z][_a-z0-9]*)/$globals{$1} or $1/gei; + $self->{value} =~ s/\.L/$decor/g; + $self->{opcode} = $opcode; + } + $ret; + } + sub out { + my $self = shift; + if ($nasm && $self->{opcode}->mnemonic()=~m/^j(?![re]cxz)/) { + "NEAR ".$self->{value}; + } else { + $self->{value}; + } + } +} +{ package cfi_directive; + # CFI directives annotate instructions that are significant for + # stack unwinding procedure compliant with DWARF specification, + # see http://dwarfstd.org/. Besides naturally expected for this + # script platform-specific filtering function, this module adds + # three auxiliary synthetic directives not recognized by [GNU] + # assembler: + # + # - .cfi_push to annotate push instructions in prologue, which + # translates to .cfi_adjust_cfa_offset (if needed) and + # .cfi_offset; + # - .cfi_pop to annotate pop instructions in epilogue, which + # translates to .cfi_adjust_cfa_offset (if needed) and + # .cfi_restore; + # - [and most notably] .cfi_cfa_expression which encodes + # DW_CFA_def_cfa_expression and passes it to .cfi_escape as + # byte vector; + # + # CFA expressions were introduced in DWARF specification version + # 3 and describe how to deduce CFA, Canonical Frame Address. This + # becomes handy if your stack frame is variable and you can't + # spare register for [previous] frame pointer. Suggested directive + # syntax is made-up mix of DWARF operator suffixes [subset of] + # and references to registers with optional bias. Following example + # describes offloaded *original* stack pointer at specific offset + # from *current* stack pointer: + # + # .cfi_cfa_expression %rsp+40,deref,+8 + # + # Final +8 has everything to do with the fact that CFA is defined + # as reference to top of caller's stack, and on x86_64 call to + # subroutine pushes 8-byte return address. In other words original + # stack pointer upon entry to a subroutine is 8 bytes off from CFA. + + # Below constants are taken from "DWARF Expressions" section of the + # DWARF specification, section is numbered 7.7 in versions 3 and 4. + my %DW_OP_simple = ( # no-arg operators, mapped directly + deref => 0x06, dup => 0x12, + drop => 0x13, over => 0x14, + pick => 0x15, swap => 0x16, + rot => 0x17, xderef => 0x18, + + abs => 0x19, and => 0x1a, + div => 0x1b, minus => 0x1c, + mod => 0x1d, mul => 0x1e, + neg => 0x1f, not => 0x20, + or => 0x21, plus => 0x22, + shl => 0x24, shr => 0x25, + shra => 0x26, xor => 0x27, + ); + + my %DW_OP_complex = ( # used in specific subroutines + constu => 0x10, # uleb128 + consts => 0x11, # sleb128 + plus_uconst => 0x23, # uleb128 + lit0 => 0x30, # add 0-31 to opcode + reg0 => 0x50, # add 0-31 to opcode + breg0 => 0x70, # add 0-31 to opcole, sleb128 + regx => 0x90, # uleb28 + fbreg => 0x91, # sleb128 + bregx => 0x92, # uleb128, sleb128 + piece => 0x93, # uleb128 + ); + + # Following constants are defined in x86_64 ABI supplement, for + # example available at https://www.uclibc.org/docs/psABI-x86_64.pdf, + # see section 3.7 "Stack Unwind Algorithm". + my %DW_reg_idx = ( + "%rax"=>0, "%rdx"=>1, "%rcx"=>2, "%rbx"=>3, + "%rsi"=>4, "%rdi"=>5, "%rbp"=>6, "%rsp"=>7, + "%r8" =>8, "%r9" =>9, "%r10"=>10, "%r11"=>11, + "%r12"=>12, "%r13"=>13, "%r14"=>14, "%r15"=>15 + ); + + my ($cfa_reg, $cfa_rsp); + my @cfa_stack; + + # [us]leb128 format is variable-length integer representation base + # 2^128, with most significant bit of each byte being 0 denoting + # *last* most significant digit. See "Variable Length Data" in the + # DWARF specification, numbered 7.6 at least in versions 3 and 4. + sub sleb128 { + use integer; # get right shift extend sign + + my $val = shift; + my $sign = ($val < 0) ? -1 : 0; + my @ret = (); + + while(1) { + push @ret, $val&0x7f; + + # see if remaining bits are same and equal to most + # significant bit of the current digit, if so, it's + # last digit... + last if (($val>>6) == $sign); + + @ret[-1] |= 0x80; + $val >>= 7; + } + + return @ret; + } + sub uleb128 { + my $val = shift; + my @ret = (); + + while(1) { + push @ret, $val&0x7f; + + # see if it's last significant digit... + last if (($val >>= 7) == 0); + + @ret[-1] |= 0x80; + } + + return @ret; + } + sub const { + my $val = shift; + + if ($val >= 0 && $val < 32) { + return ($DW_OP_complex{lit0}+$val); + } + return ($DW_OP_complex{consts}, sleb128($val)); + } + sub reg { + my $val = shift; + + return if ($val !~ m/^(%r\w+)(?:([\+\-])((?:0x)?[0-9a-f]+))?/); + + my $reg = $DW_reg_idx{$1}; + my $off = eval ("0 $2 $3"); + + return (($DW_OP_complex{breg0} + $reg), sleb128($off)); + # Yes, we use DW_OP_bregX+0 to push register value and not + # DW_OP_regX, because latter would require even DW_OP_piece, + # which would be a waste under the circumstances. If you have + # to use DWP_OP_reg, use "regx:N"... + } + sub cfa_expression { + my $line = shift; + my @ret; + + foreach my $token (split(/,\s*/,$line)) { + if ($token =~ /^%r/) { + push @ret,reg($token); + } elsif ($token =~ /((?:0x)?[0-9a-f]+)\((%r\w+)\)/) { + push @ret,reg("$2+$1"); + } elsif ($token =~ /(\w+):(\-?(?:0x)?[0-9a-f]+)(U?)/i) { + my $i = 1*eval($2); + push @ret,$DW_OP_complex{$1}, ($3 ? uleb128($i) : sleb128($i)); + } elsif (my $i = 1*eval($token) or $token eq "0") { + if ($token =~ /^\+/) { + push @ret,$DW_OP_complex{plus_uconst},uleb128($i); + } else { + push @ret,const($i); + } + } else { + push @ret,$DW_OP_simple{$token}; + } + } + + # Finally we return DW_CFA_def_cfa_expression, 15, followed by + # length of the expression and of course the expression itself. + return (15,scalar(@ret),@ret); + } + sub re { + my ($class, $line) = @_; + my $self = {}; + my $ret; + + if ($$line =~ s/^\s*\.cfi_(\w+)\s*//) { + bless $self,$class; + $ret = $self; + undef $self->{value}; + my $dir = $1; + + SWITCH: for ($dir) { + # What is $cfa_rsp? Effectively it's difference between %rsp + # value and current CFA, Canonical Frame Address, which is + # why it starts with -8. Recall that CFA is top of caller's + # stack... + /startproc/ && do { ($cfa_reg, $cfa_rsp) = ("%rsp", -8); last; }; + /endproc/ && do { ($cfa_reg, $cfa_rsp) = ("%rsp", 0); last; }; + /def_cfa_register/ + && do { $cfa_reg = $$line; last; }; + /def_cfa_offset/ + && do { $cfa_rsp = -1*eval($$line) if ($cfa_reg eq "%rsp"); + last; + }; + /adjust_cfa_offset/ + && do { $cfa_rsp -= 1*eval($$line) if ($cfa_reg eq "%rsp"); + last; + }; + /def_cfa/ && do { if ($$line =~ /(%r\w+)\s*,\s*(.+)/) { + $cfa_reg = $1; + $cfa_rsp = -1*eval($2) if ($cfa_reg eq "%rsp"); + } + last; + }; + /push/ && do { $dir = undef; + $cfa_rsp -= 8; + if ($cfa_reg eq "%rsp") { + $self->{value} = ".cfi_adjust_cfa_offset\t8\n"; + } + $self->{value} .= ".cfi_offset\t$$line,$cfa_rsp"; + last; + }; + /pop/ && do { $dir = undef; + $cfa_rsp += 8; + if ($cfa_reg eq "%rsp") { + $self->{value} = ".cfi_adjust_cfa_offset\t-8\n"; + } + $self->{value} .= ".cfi_restore\t$$line"; + last; + }; + /cfa_expression/ + && do { $dir = undef; + $self->{value} = ".cfi_escape\t" . + join(",", map(sprintf("0x%02x", $_), + cfa_expression($$line))); + last; + }; + /remember_state/ + && do { push @cfa_stack, [$cfa_reg, $cfa_rsp]; + last; + }; + /restore_state/ + && do { ($cfa_reg, $cfa_rsp) = @{pop @cfa_stack}; + last; + }; + } + + $self->{value} = ".cfi_$dir\t$$line" if ($dir); + + $$line = ""; + } + + return $ret; + } + sub out { + my $self = shift; + return ($elf ? $self->{value} : undef); + } +} +{ package directive; # pick up directives, which start with . + sub re { + my ($class, $line) = @_; + my $self = {}; + my $ret; + my $dir; + + # chain-call to cfi_directive + $ret = cfi_directive->re($line) and return $ret; + + if ($$line =~ /^\s*(\.\w+)/) { + bless $self,$class; + $dir = $1; + $ret = $self; + undef $self->{value}; + $$line = substr($$line,@+[0]); $$line =~ s/^\s+//; + + SWITCH: for ($dir) { + /\.global|\.globl|\.extern/ + && do { $globals{$$line} = $prefix . $$line; + $$line = $globals{$$line} if ($prefix); + last; + }; + /\.type/ && do { my ($sym,$type,$narg) = split(/\s*,\s*/,$$line); + if ($type eq "\@function") { + undef $current_function; + $current_function->{name} = $sym; + $current_function->{abi} = "svr4"; + $current_function->{narg} = $narg; + $current_function->{scope} = defined($globals{$sym})?"PUBLIC":"PRIVATE"; + } elsif ($type eq "\@abi-omnipotent") { + undef $current_function; + $current_function->{name} = $sym; + $current_function->{scope} = defined($globals{$sym})?"PUBLIC":"PRIVATE"; + } + $$line =~ s/\@abi\-omnipotent/\@function/; + $$line =~ s/\@function.*/\@function/; + last; + }; + /\.asciz/ && do { if ($$line =~ /^"(.*)"$/) { + $dir = ".byte"; + $$line = join(",",unpack("C*",$1),0); + } + last; + }; + /\.rva|\.long|\.quad|\.byte/ + && do { $$line =~ s/([_a-z][_a-z0-9]*)/$globals{$1} or $1/gei; + $$line =~ s/\.L/$decor/g; + last; + }; + } + + if ($gas) { + $self->{value} = $dir . "\t" . $$line; + + if ($dir =~ /\.extern/) { + if ($flavour eq "elf") { + $self->{value} .= "\n.hidden $$line"; + } else { + $self->{value} = ""; + } + } elsif (!$elf && $dir =~ /\.type/) { + $self->{value} = ""; + $self->{value} = ".def\t" . ($globals{$1} or $1) . ";\t" . + (defined($globals{$1})?".scl 2;":".scl 3;") . + "\t.type 32;\t.endef" + if ($win64 && $$line =~ /([^,]+),\@function/); + } elsif (!$elf && $dir =~ /\.size/) { + $self->{value} = ""; + if (defined($current_function)) { + $self->{value} .= "${decor}SEH_end_$current_function->{name}:" + if ($win64 && $current_function->{abi} eq "svr4"); + undef $current_function; + } + } elsif (!$elf && $dir =~ /\.align/) { + $self->{value} = ".p2align\t" . (log($$line)/log(2)); + } elsif ($dir eq ".section") { + $current_segment=$$line; + if (!$elf && $current_segment eq ".init") { + if ($flavour eq "macosx") { $self->{value} = ".mod_init_func"; } + elsif ($flavour eq "mingw64") { $self->{value} = ".section\t.ctors"; } + } + } elsif ($dir =~ /\.(text|data)/) { + $current_segment=".$1"; + } elsif ($dir =~ /\.global|\.globl|\.extern/) { + if ($flavour eq "macosx") { + $self->{value} .= "\n.private_extern $$line"; + } else { + $self->{value} .= "\n.hidden $$line"; + } + } elsif ($dir =~ /\.hidden/) { + if ($flavour eq "macosx") { $self->{value} = ".private_extern\t$prefix$$line"; } + elsif ($flavour eq "mingw64") { $self->{value} = ""; } + } elsif ($dir =~ /\.comm/) { + $self->{value} = "$dir\t$prefix$$line"; + $self->{value} =~ s|,([0-9]+),([0-9]+)$|",$1,".log($2)/log(2)|e if ($flavour eq "macosx"); + } + $$line = ""; + return $self; + } + + # non-gas case or nasm/masm + SWITCH: for ($dir) { + /\.text/ && do { my $v=undef; + if ($nasm) { + $v="section .text code align=64\n"; + } else { + $v="$current_segment\tENDS\n" if ($current_segment); + $current_segment = ".text\$"; + $v.="$current_segment\tSEGMENT "; + $v.=$masm>=$masmref ? "ALIGN(256)" : "PAGE"; + $v.=" 'CODE'"; + } + $self->{value} = $v; + last; + }; + /\.data/ && do { my $v=undef; + if ($nasm) { + $v="section .data data align=8\n"; + } else { + $v="$current_segment\tENDS\n" if ($current_segment); + $current_segment = "_DATA"; + $v.="$current_segment\tSEGMENT"; + } + $self->{value} = $v; + last; + }; + /\.section/ && do { my $v=undef; + $$line =~ s/([^,]*).*/$1/; + $$line = ".CRT\$XCU" if ($$line eq ".init"); + if ($nasm) { + $v="section $$line"; + if ($$line=~/\.([px])data/) { + $v.=" rdata align="; + $v.=$1 eq "p"? 4 : 8; + } elsif ($$line=~/\.CRT\$/i) { + $v.=" rdata align=8"; + } + } else { + $v="$current_segment\tENDS\n" if ($current_segment); + $v.="$$line\tSEGMENT"; + if ($$line=~/\.([px])data/) { + $v.=" READONLY"; + $v.=" ALIGN(".($1 eq "p" ? 4 : 8).")" if ($masm>=$masmref); + } elsif ($$line=~/\.CRT\$/i) { + $v.=" READONLY "; + $v.=$masm>=$masmref ? "ALIGN(8)" : "DWORD"; + } + } + $current_segment = $$line; + $self->{value} = $v; + last; + }; + /\.extern/ && do { $self->{value} = "EXTERN\t".$$line; + $self->{value} .= ":NEAR" if ($masm); + last; + }; + /\.globl|.global/ + && do { $self->{value} = $masm?"PUBLIC":"global"; + $self->{value} .= "\t".$$line; + last; + }; + /\.size/ && do { if (defined($current_function)) { + undef $self->{value}; + if ($current_function->{abi} eq "svr4") { + $self->{value}="${decor}SEH_end_$current_function->{name}:"; + $self->{value}.=":\n" if($masm); + } + $self->{value}.="$current_function->{name}\tENDP" if($masm && $current_function->{name}); + undef $current_function; + } + last; + }; + /\.align/ && do { my $max = ($masm && $masm>=$masmref) ? 256 : 4096; + $self->{value} = "ALIGN\t".($$line>$max?$max:$$line); + last; + }; + /\.(value|long|rva|quad)/ + && do { my $sz = substr($1,0,1); + my @arr = split(/,\s*/,$$line); + my $last = pop(@arr); + my $conv = sub { my $var=shift; + $var=~s/^(0b[0-1]+)/oct($1)/eig; + $var=~s/^0x([0-9a-f]+)/0$1h/ig if ($masm); + if ($sz eq "D" && ($current_segment=~/.[px]data/ || $dir eq ".rva")) + { $var=~s/^([_a-z\$\@][_a-z0-9\$\@]*)/$nasm?"$1 wrt ..imagebase":"imagerel $1"/egi; } + $var; + }; + + $sz =~ tr/bvlrq/BWDDQ/; + $self->{value} = "\tD$sz\t"; + for (@arr) { $self->{value} .= &$conv($_).","; } + $self->{value} .= &$conv($last); + last; + }; + /\.byte/ && do { my @str=split(/,\s*/,$$line); + map(s/(0b[0-1]+)/oct($1)/eig,@str); + map(s/0x([0-9a-f]+)/0$1h/ig,@str) if ($masm); + while ($#str>15) { + $self->{value}.="DB\t" + .join(",",@str[0..15])."\n"; + foreach (0..15) { shift @str; } + } + $self->{value}.="DB\t" + .join(",",@str) if (@str); + last; + }; + /\.comm/ && do { my @str=split(/,\s*/,$$line); + my $v=undef; + if ($nasm) { + $v.="common $prefix@str[0] @str[1]"; + } else { + $v="$current_segment\tENDS\n" if ($current_segment); + $current_segment = "_DATA"; + $v.="$current_segment\tSEGMENT\n"; + $v.="COMM @str[0]:DWORD:".@str[1]/4; + } + $self->{value} = $v; + last; + }; + } + $$line = ""; + } + + $ret; + } + sub out { + my $self = shift; + $self->{value}; + } +} + +# Upon initial x86_64 introduction SSE>2 extensions were not introduced +# yet. In order not to be bothered by tracing exact assembler versions, +# but at the same time to provide a bare security minimum of AES-NI, we +# hard-code some instructions. Extensions past AES-NI on the other hand +# are traced by examining assembler version in individual perlasm +# modules... + +my %regrm = ( "%eax"=>0, "%ecx"=>1, "%edx"=>2, "%ebx"=>3, + "%esp"=>4, "%ebp"=>5, "%esi"=>6, "%edi"=>7 ); + +sub rex { + my $opcode=shift; + my ($dst,$src,$rex)=@_; + + $rex|=0x04 if($dst>=8); + $rex|=0x01 if($src>=8); + push @$opcode,($rex|0x40) if ($rex); +} + +my $movq = sub { # elderly gas can't handle inter-register movq + my $arg = shift; + my @opcode=(0x66); + if ($arg =~ /%xmm([0-9]+),\s*%r(\w+)/) { + my ($src,$dst)=($1,$2); + if ($dst !~ /[0-9]+/) { $dst = $regrm{"%e$dst"}; } + rex(\@opcode,$src,$dst,0x8); + push @opcode,0x0f,0x7e; + push @opcode,0xc0|(($src&7)<<3)|($dst&7); # ModR/M + @opcode; + } elsif ($arg =~ /%r(\w+),\s*%xmm([0-9]+)/) { + my ($src,$dst)=($2,$1); + if ($dst !~ /[0-9]+/) { $dst = $regrm{"%e$dst"}; } + rex(\@opcode,$src,$dst,0x8); + push @opcode,0x0f,0x6e; + push @opcode,0xc0|(($src&7)<<3)|($dst&7); # ModR/M + @opcode; + } else { + (); + } +}; + +my $pextrd = sub { + if (shift =~ /\$([0-9]+),\s*%xmm([0-9]+),\s*(%\w+)/) { + my @opcode=(0x66); + my $imm=$1; + my $src=$2; + my $dst=$3; + if ($dst =~ /%r([0-9]+)d/) { $dst = $1; } + elsif ($dst =~ /%e/) { $dst = $regrm{$dst}; } + rex(\@opcode,$src,$dst); + push @opcode,0x0f,0x3a,0x16; + push @opcode,0xc0|(($src&7)<<3)|($dst&7); # ModR/M + push @opcode,$imm; + @opcode; + } else { + (); + } +}; + +my $pinsrd = sub { + if (shift =~ /\$([0-9]+),\s*(%\w+),\s*%xmm([0-9]+)/) { + my @opcode=(0x66); + my $imm=$1; + my $src=$2; + my $dst=$3; + if ($src =~ /%r([0-9]+)/) { $src = $1; } + elsif ($src =~ /%e/) { $src = $regrm{$src}; } + rex(\@opcode,$dst,$src); + push @opcode,0x0f,0x3a,0x22; + push @opcode,0xc0|(($dst&7)<<3)|($src&7); # ModR/M + push @opcode,$imm; + @opcode; + } else { + (); + } +}; + +my $pshufb = sub { + if (shift =~ /%xmm([0-9]+),\s*%xmm([0-9]+)/) { + my @opcode=(0x66); + rex(\@opcode,$2,$1); + push @opcode,0x0f,0x38,0x00; + push @opcode,0xc0|($1&7)|(($2&7)<<3); # ModR/M + @opcode; + } else { + (); + } +}; + +my $palignr = sub { + if (shift =~ /\$([0-9]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) { + my @opcode=(0x66); + rex(\@opcode,$3,$2); + push @opcode,0x0f,0x3a,0x0f; + push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M + push @opcode,$1; + @opcode; + } else { + (); + } +}; + +my $pclmulqdq = sub { + if (shift =~ /\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) { + my @opcode=(0x66); + rex(\@opcode,$3,$2); + push @opcode,0x0f,0x3a,0x44; + push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M + my $c=$1; + push @opcode,$c=~/^0/?oct($c):$c; + @opcode; + } else { + (); + } +}; + +my $rdrand = sub { + if (shift =~ /%[er](\w+)/) { + my @opcode=(); + my $dst=$1; + if ($dst !~ /[0-9]+/) { $dst = $regrm{"%e$dst"}; } + rex(\@opcode,0,$dst,8); + push @opcode,0x0f,0xc7,0xf0|($dst&7); + @opcode; + } else { + (); + } +}; + +my $rdseed = sub { + if (shift =~ /%[er](\w+)/) { + my @opcode=(); + my $dst=$1; + if ($dst !~ /[0-9]+/) { $dst = $regrm{"%e$dst"}; } + rex(\@opcode,0,$dst,8); + push @opcode,0x0f,0xc7,0xf8|($dst&7); + @opcode; + } else { + (); + } +}; + +# Not all AVX-capable assemblers recognize AMD XOP extension. Since we +# are using only two instructions hand-code them in order to be excused +# from chasing assembler versions... + +sub rxb { + my $opcode=shift; + my ($dst,$src1,$src2,$rxb)=@_; + + $rxb|=0x7<<5; + $rxb&=~(0x04<<5) if($dst>=8); + $rxb&=~(0x01<<5) if($src1>=8); + $rxb&=~(0x02<<5) if($src2>=8); + push @$opcode,$rxb; +} + +my $vprotd = sub { + if (shift =~ /\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) { + my @opcode=(0x8f); + rxb(\@opcode,$3,$2,-1,0x08); + push @opcode,0x78,0xc2; + push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M + my $c=$1; + push @opcode,$c=~/^0/?oct($c):$c; + @opcode; + } else { + (); + } +}; + +my $vprotq = sub { + if (shift =~ /\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) { + my @opcode=(0x8f); + rxb(\@opcode,$3,$2,-1,0x08); + push @opcode,0x78,0xc3; + push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M + my $c=$1; + push @opcode,$c=~/^0/?oct($c):$c; + @opcode; + } else { + (); + } +}; + +# Intel Control-flow Enforcement Technology extension. All functions and +# indirect branch targets will have to start with this instruction... + +my $endbranch = sub { + (0xf3,0x0f,0x1e,0xfa); +}; + +######################################################################## + +{ + my $comment = "#"; + $comment = ";" if ($masm || $nasm); + print <<___; +$comment This file is generated from a similarly-named Perl script in the BoringSSL +$comment source tree. Do not edit by hand. + +___ +} + +if ($nasm) { + print <<___; +default rel +%define XMMWORD +%define YMMWORD +%define ZMMWORD +___ +} elsif ($masm) { + print <<___; +OPTION DOTNAME +___ +} + +if ($gas) { + print <<___; +#if defined(__has_feature) +#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM) +#define OPENSSL_NO_ASM +#endif +#endif + +#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM) +___ +} + +while(defined(my $line=<>)) { + + $line =~ s|\R$||; # Better chomp + + if ($nasm) { + $line =~ s|^#ifdef |%ifdef |; + $line =~ s|^#ifndef |%ifndef |; + $line =~ s|^#endif|%endif|; + $line =~ s|[#!].*$||; # get rid of asm-style comments... + } else { + # Get rid of asm-style comments but not preprocessor directives. The + # former are identified by having a letter after the '#' and starting in + # the first column. + $line =~ s|!.*$||; + $line =~ s|(?<=.)#.*$||; + $line =~ s|^#([^a-z].*)?$||; + } + + $line =~ s|/\*.*\*/||; # ... and C-style comments... + $line =~ s|^\s+||; # ... and skip white spaces in beginning + $line =~ s|\s+$||; # ... and at the end + + if (my $label=label->re(\$line)) { print $label->out(); } + + if (my $directive=directive->re(\$line)) { + printf "%s",$directive->out(); + } elsif (my $opcode=opcode->re(\$line)) { + my $asm = eval("\$".$opcode->mnemonic()); + + if ((ref($asm) eq 'CODE') && scalar(my @bytes=&$asm($line))) { + print $gas?".byte\t":"DB\t",join(',',@bytes),"\n"; + next; + } + + my @args; + ARGUMENT: while (1) { + my $arg; + + ($arg=register->re(\$line, $opcode))|| + ($arg=const->re(\$line)) || + ($arg=ea->re(\$line, $opcode)) || + ($arg=expr->re(\$line, $opcode)) || + last ARGUMENT; + + push @args,$arg; + + last ARGUMENT if ($line !~ /^,/); + + $line =~ s/^,\s*//; + } # ARGUMENT: + + if ($#args>=0) { + my $insn; + my $sz=$opcode->size(); + + if ($gas) { + $insn = $opcode->out($#args>=1?$args[$#args]->size():$sz); + @args = map($_->out($sz),@args); + printf "\t%s\t%s",$insn,join(",",@args); + } else { + $insn = $opcode->out(); + foreach (@args) { + my $arg = $_->out(); + # $insn.=$sz compensates for movq, pinsrw, ... + if ($arg =~ /^xmm[0-9]+$/) { $insn.=$sz; $sz="x" if(!$sz); last; } + if ($arg =~ /^ymm[0-9]+$/) { $insn.=$sz; $sz="y" if(!$sz); last; } + if ($arg =~ /^zmm[0-9]+$/) { $insn.=$sz; $sz="z" if(!$sz); last; } + if ($arg =~ /^mm[0-9]+$/) { $insn.=$sz; $sz="q" if(!$sz); last; } + } + @args = reverse(@args); + undef $sz if ($nasm && $opcode->mnemonic() eq "lea"); + printf "\t%s\t%s",$insn,join(",",map($_->out($sz),@args)); + } + } else { + printf "\t%s",$opcode->out(); + } + } + + print $line,"\n"; +} + +print "\n$current_segment\tENDS\n" if ($current_segment && $masm); +print "END\n" if ($masm); +print "#endif\n" if ($gas); +# See https://www.airs.com/blog/archives/518. +print ".section\t.note.GNU-stack,\"\",\@progbits\n" if ($elf); + +close STDOUT or die "error closing STDOUT"; + + ################################################# +# Cross-reference x86_64 ABI "card" +# +# Unix Win64 +# %rax * * +# %rbx - - +# %rcx #4 #1 +# %rdx #3 #2 +# %rsi #2 - +# %rdi #1 - +# %rbp - - +# %rsp - - +# %r8 #5 #3 +# %r9 #6 #4 +# %r10 * * +# %r11 * * +# %r12 - - +# %r13 - - +# %r14 - - +# %r15 - - +# +# (*) volatile register +# (-) preserved by callee +# (#) Nth argument, volatile +# +# In Unix terms top of stack is argument transfer area for arguments +# which could not be accommodated in registers. Or in other words 7th +# [integer] argument resides at 8(%rsp) upon function entry point. +# 128 bytes above %rsp constitute a "red zone" which is not touched +# by signal handlers and can be used as temporal storage without +# allocating a frame. +# +# In Win64 terms N*8 bytes on top of stack is argument transfer area, +# which belongs to/can be overwritten by callee. N is the number of +# arguments passed to callee, *but* not less than 4! This means that +# upon function entry point 5th argument resides at 40(%rsp), as well +# as that 32 bytes from 8(%rsp) can always be used as temporal +# storage [without allocating a frame]. One can actually argue that +# one can assume a "red zone" above stack pointer under Win64 as well. +# Point is that at apparently no occasion Windows kernel would alter +# the area above user stack pointer in true asynchronous manner... +# +# All the above means that if assembler programmer adheres to Unix +# register and stack layout, but disregards the "red zone" existence, +# it's possible to use following prologue and epilogue to "gear" from +# Unix to Win64 ABI in leaf functions with not more than 6 arguments. +# +# omnipotent_function: +# ifdef WIN64 +# movq %rdi,8(%rsp) +# movq %rsi,16(%rsp) +# movq %rcx,%rdi ; if 1st argument is actually present +# movq %rdx,%rsi ; if 2nd argument is actually ... +# movq %r8,%rdx ; if 3rd argument is ... +# movq %r9,%rcx ; if 4th argument ... +# movq 40(%rsp),%r8 ; if 5th ... +# movq 48(%rsp),%r9 ; if 6th ... +# endif +# ... +# ifdef WIN64 +# movq 8(%rsp),%rdi +# movq 16(%rsp),%rsi +# endif +# ret +# + ################################################# +# Win64 SEH, Structured Exception Handling. +# +# Unlike on Unix systems(*) lack of Win64 stack unwinding information +# has undesired side-effect at run-time: if an exception is raised in +# assembler subroutine such as those in question (basically we're +# referring to segmentation violations caused by malformed input +# parameters), the application is briskly terminated without invoking +# any exception handlers, most notably without generating memory dump +# or any user notification whatsoever. This poses a problem. It's +# possible to address it by registering custom language-specific +# handler that would restore processor context to the state at +# subroutine entry point and return "exception is not handled, keep +# unwinding" code. Writing such handler can be a challenge... But it's +# doable, though requires certain coding convention. Consider following +# snippet: +# +# .type function,@function +# function: +# movq %rsp,%rax # copy rsp to volatile register +# pushq %r15 # save non-volatile registers +# pushq %rbx +# pushq %rbp +# movq %rsp,%r11 +# subq %rdi,%r11 # prepare [variable] stack frame +# andq $-64,%r11 +# movq %rax,0(%r11) # check for exceptions +# movq %r11,%rsp # allocate [variable] stack frame +# movq %rax,0(%rsp) # save original rsp value +# magic_point: +# ... +# movq 0(%rsp),%rcx # pull original rsp value +# movq -24(%rcx),%rbp # restore non-volatile registers +# movq -16(%rcx),%rbx +# movq -8(%rcx),%r15 +# movq %rcx,%rsp # restore original rsp +# magic_epilogue: +# ret +# .size function,.-function +# +# The key is that up to magic_point copy of original rsp value remains +# in chosen volatile register and no non-volatile register, except for +# rsp, is modified. While past magic_point rsp remains constant till +# the very end of the function. In this case custom language-specific +# exception handler would look like this: +# +# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame, +# CONTEXT *context,DISPATCHER_CONTEXT *disp) +# { ULONG64 *rsp = (ULONG64 *)context->Rax; +# ULONG64 rip = context->Rip; +# +# if (rip >= magic_point) +# { rsp = (ULONG64 *)context->Rsp; +# if (rip < magic_epilogue) +# { rsp = (ULONG64 *)rsp[0]; +# context->Rbp = rsp[-3]; +# context->Rbx = rsp[-2]; +# context->R15 = rsp[-1]; +# } +# } +# context->Rsp = (ULONG64)rsp; +# context->Rdi = rsp[1]; +# context->Rsi = rsp[2]; +# +# memcpy (disp->ContextRecord,context,sizeof(CONTEXT)); +# RtlVirtualUnwind(UNW_FLAG_NHANDLER,disp->ImageBase, +# dips->ControlPc,disp->FunctionEntry,disp->ContextRecord, +# &disp->HandlerData,&disp->EstablisherFrame,NULL); +# return ExceptionContinueSearch; +# } +# +# It's appropriate to implement this handler in assembler, directly in +# function's module. In order to do that one has to know members' +# offsets in CONTEXT and DISPATCHER_CONTEXT structures and some constant +# values. Here they are: +# +# CONTEXT.Rax 120 +# CONTEXT.Rcx 128 +# CONTEXT.Rdx 136 +# CONTEXT.Rbx 144 +# CONTEXT.Rsp 152 +# CONTEXT.Rbp 160 +# CONTEXT.Rsi 168 +# CONTEXT.Rdi 176 +# CONTEXT.R8 184 +# CONTEXT.R9 192 +# CONTEXT.R10 200 +# CONTEXT.R11 208 +# CONTEXT.R12 216 +# CONTEXT.R13 224 +# CONTEXT.R14 232 +# CONTEXT.R15 240 +# CONTEXT.Rip 248 +# CONTEXT.Xmm6 512 +# sizeof(CONTEXT) 1232 +# DISPATCHER_CONTEXT.ControlPc 0 +# DISPATCHER_CONTEXT.ImageBase 8 +# DISPATCHER_CONTEXT.FunctionEntry 16 +# DISPATCHER_CONTEXT.EstablisherFrame 24 +# DISPATCHER_CONTEXT.TargetIp 32 +# DISPATCHER_CONTEXT.ContextRecord 40 +# DISPATCHER_CONTEXT.LanguageHandler 48 +# DISPATCHER_CONTEXT.HandlerData 56 +# UNW_FLAG_NHANDLER 0 +# ExceptionContinueSearch 1 +# +# In order to tie the handler to the function one has to compose +# couple of structures: one for .xdata segment and one for .pdata. +# +# UNWIND_INFO structure for .xdata segment would be +# +# function_unwind_info: +# .byte 9,0,0,0 +# .rva handler +# +# This structure designates exception handler for a function with +# zero-length prologue, no stack frame or frame register. +# +# To facilitate composing of .pdata structures, auto-generated "gear" +# prologue copies rsp value to rax and denotes next instruction with +# .LSEH_begin_{function_name} label. This essentially defines the SEH +# styling rule mentioned in the beginning. Position of this label is +# chosen in such manner that possible exceptions raised in the "gear" +# prologue would be accounted to caller and unwound from latter's frame. +# End of function is marked with respective .LSEH_end_{function_name} +# label. To summarize, .pdata segment would contain +# +# .rva .LSEH_begin_function +# .rva .LSEH_end_function +# .rva function_unwind_info +# +# Reference to function_unwind_info from .xdata segment is the anchor. +# In case you wonder why references are 32-bit .rvas and not 64-bit +# .quads. References put into these two segments are required to be +# *relative* to the base address of the current binary module, a.k.a. +# image base. No Win64 module, be it .exe or .dll, can be larger than +# 2GB and thus such relative references can be and are accommodated in +# 32 bits. +# +# Having reviewed the example function code, one can argue that "movq +# %rsp,%rax" above is redundant. It is not! Keep in mind that on Unix +# rax would contain an undefined value. If this "offends" you, use +# another register and refrain from modifying rax till magic_point is +# reached, i.e. as if it was a non-volatile register. If more registers +# are required prior [variable] frame setup is completed, note that +# nobody says that you can have only one "magic point." You can +# "liberate" non-volatile registers by denoting last stack off-load +# instruction and reflecting it in finer grade unwind logic in handler. +# After all, isn't it why it's called *language-specific* handler... +# +# SE handlers are also involved in unwinding stack when executable is +# profiled or debugged. Profiling implies additional limitations that +# are too subtle to discuss here. For now it's sufficient to say that +# in order to simplify handlers one should either a) offload original +# %rsp to stack (like discussed above); or b) if you have a register to +# spare for frame pointer, choose volatile one. +# +# (*) Note that we're talking about run-time, not debug-time. Lack of +# unwind information makes debugging hard on both Windows and +# Unix. "Unlike" refers to the fact that on Unix signal handler +# will always be invoked, core dumped and appropriate exit code +# returned to parent (for user notification). diff --git a/vendor/ring/crypto/perlasm/x86asm.pl b/vendor/ring/crypto/perlasm/x86asm.pl new file mode 100644 index 00000000..f69fcda1 --- /dev/null +++ b/vendor/ring/crypto/perlasm/x86asm.pl @@ -0,0 +1,327 @@ +#! /usr/bin/env perl +# Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +# require 'x86asm.pl'; +# &asm_init([,$i386only]); +# &function_begin("foo"); +# ... +# &function_end("foo"); +# &asm_finish + +$out=(); +$i386=0; + +# AUTOLOAD is this context has quite unpleasant side effect, namely +# that typos in function calls effectively go to assembler output, +# but on the pros side we don't have to implement one subroutine per +# each opcode... +sub ::AUTOLOAD +{ my $opcode = $AUTOLOAD; + + die "more than 4 arguments passed to $opcode" if ($#_>3); + + $opcode =~ s/.*:://; + if ($opcode =~ /^push/) { $stack+=4; } + elsif ($opcode =~ /^pop/) { $stack-=4; } + + &generic($opcode,@_) or die "undefined subroutine \&$AUTOLOAD"; +} + +sub ::emit +{ my $opcode=shift; + + if ($#_==-1) { push(@out,"\t$opcode\n"); } + else { push(@out,"\t$opcode\t".join(',',@_)."\n"); } +} + +sub ::LB +{ $_[0] =~ m/^e?([a-d])x$/o or die "$_[0] does not have a 'low byte'"; + $1."l"; +} +sub ::HB +{ $_[0] =~ m/^e?([a-d])x$/o or die "$_[0] does not have a 'high byte'"; + $1."h"; +} +sub ::stack_push{ my $num=$_[0]*4; $stack+=$num; &sub("esp",$num); } +sub ::stack_pop { my $num=$_[0]*4; $stack-=$num; &add("esp",$num); } +sub ::blindpop { &pop($_[0]); $stack+=4; } +sub ::wparam { &DWP($stack+4*$_[0],"esp"); } +sub ::swtmp { &DWP(4*$_[0],"esp"); } + +sub ::bswap +{ if ($i386) # emulate bswap for i386 + { &comment("bswap @_"); + &xchg(&HB(@_),&LB(@_)); + &ror (@_,16); + &xchg(&HB(@_),&LB(@_)); + } + else + { &generic("bswap",@_); } +} +# These are made-up opcodes introduced over the years essentially +# by ignorance, just alias them to real ones... +sub ::movb { &mov(@_); } +sub ::xorb { &xor(@_); } +sub ::rotl { &rol(@_); } +sub ::rotr { &ror(@_); } +sub ::exch { &xchg(@_); } +sub ::halt { &hlt; } +sub ::movz { &movzx(@_); } +sub ::pushf { &pushfd; } +sub ::popf { &popfd; } + +# 3 argument instructions +sub ::movq +{ my($p1,$p2,$optimize)=@_; + + if ($optimize && $p1=~/^mm[0-7]$/ && $p2=~/^mm[0-7]$/) + # movq between mmx registers can sink Intel CPUs + { &::pshufw($p1,$p2,0xe4); } + else + { &::generic("movq",@_); } +} + +# SSE>2 instructions +my %regrm = ( "eax"=>0, "ecx"=>1, "edx"=>2, "ebx"=>3, + "esp"=>4, "ebp"=>5, "esi"=>6, "edi"=>7 ); +sub ::pextrd +{ my($dst,$src,$imm)=@_; + if ("$dst:$src" =~ /(e[a-dsd][ixp]):xmm([0-7])/) + { &::data_byte(0x66,0x0f,0x3a,0x16,0xc0|($2<<3)|$regrm{$1},$imm); } + else + { &::generic("pextrd",@_); } +} + +sub ::pinsrd +{ my($dst,$src,$imm)=@_; + if ("$dst:$src" =~ /xmm([0-7]):(e[a-dsd][ixp])/) + { &::data_byte(0x66,0x0f,0x3a,0x22,0xc0|($1<<3)|$regrm{$2},$imm); } + else + { &::generic("pinsrd",@_); } +} + +sub ::pshufb +{ my($dst,$src)=@_; + if ("$dst:$src" =~ /xmm([0-7]):xmm([0-7])/) + { &data_byte(0x66,0x0f,0x38,0x00,0xc0|($1<<3)|$2); } + else + { &::generic("pshufb",@_); } +} + +sub ::palignr +{ my($dst,$src,$imm)=@_; + if ("$dst:$src" =~ /xmm([0-7]):xmm([0-7])/) + { &::data_byte(0x66,0x0f,0x3a,0x0f,0xc0|($1<<3)|$2,$imm); } + else + { &::generic("palignr",@_); } +} + +sub ::pclmulqdq +{ my($dst,$src,$imm)=@_; + if ("$dst:$src" =~ /xmm([0-7]):xmm([0-7])/) + { &::data_byte(0x66,0x0f,0x3a,0x44,0xc0|($1<<3)|$2,$imm); } + else + { &::generic("pclmulqdq",@_); } +} + +sub ::rdrand +{ my ($dst)=@_; + if ($dst =~ /(e[a-dsd][ixp])/) + { &::data_byte(0x0f,0xc7,0xf0|$regrm{$dst}); } + else + { &::generic("rdrand",@_); } +} + +sub ::rdseed +{ my ($dst)=@_; + if ($dst =~ /(e[a-dsd][ixp])/) + { &::data_byte(0x0f,0xc7,0xf8|$regrm{$dst}); } + else + { &::generic("rdrand",@_); } +} + +sub rxb { + local *opcode=shift; + my ($dst,$src1,$src2,$rxb)=@_; + + $rxb|=0x7<<5; + $rxb&=~(0x04<<5) if($dst>=8); + $rxb&=~(0x01<<5) if($src1>=8); + $rxb&=~(0x02<<5) if($src2>=8); + push @opcode,$rxb; +} + +sub ::vprotd +{ my $args=join(',',@_); + if ($args =~ /xmm([0-7]),xmm([0-7]),([x0-9a-f]+)/) + { my @opcode=(0x8f); + rxb(\@opcode,$1,$2,-1,0x08); + push @opcode,0x78,0xc2; + push @opcode,0xc0|($2&7)|(($1&7)<<3); # ModR/M + my $c=$3; + push @opcode,$c=~/^0/?oct($c):$c; + &::data_byte(@opcode); + } + else + { &::generic("vprotd",@_); } +} + +sub ::endbranch +{ + &::data_byte(0xf3,0x0f,0x1e,0xfb); +} + +# label management +$lbdecor="L"; # local label decoration, set by package +$label="000"; + +sub ::islabel # see is argument is a known label +{ my $i; + foreach $i (values %label) { return $i if ($i eq $_[0]); } + $label{$_[0]}; # can be undef +} + +sub ::label # instantiate a function-scope label +{ if (!defined($label{$_[0]})) + { $label{$_[0]}="${lbdecor}${label}${_[0]}"; $label++; } + $label{$_[0]}; +} + +sub ::LABEL # instantiate a file-scope label +{ $label{$_[0]}=$_[1] if (!defined($label{$_[0]})); + $label{$_[0]}; +} + +sub ::static_label { &::LABEL($_[0],$lbdecor.$_[0]); } + +sub ::set_label_B { push(@out,"@_:\n"); } +sub ::set_label +{ my $label=&::label($_[0]); + &::align($_[1]) if ($_[1]>1); + &::set_label_B($label); + $label; +} + +sub ::wipe_labels # wipes function-scope labels +{ foreach $i (keys %label) + { delete $label{$i} if ($label{$i} =~ /^\Q${lbdecor}\E[0-9]{3}/); } +} + +# subroutine management +sub ::function_begin +{ &function_begin_B(@_); + $stack=4; + &push("ebp"); + &push("ebx"); + &push("esi"); + &push("edi"); +} + +sub ::function_end +{ &pop("edi"); + &pop("esi"); + &pop("ebx"); + &pop("ebp"); + &ret(); + &function_end_B(@_); + $stack=0; + &wipe_labels(); +} + +sub ::function_end_A +{ &pop("edi"); + &pop("esi"); + &pop("ebx"); + &pop("ebp"); + &ret(); + $stack+=16; # readjust esp as if we didn't pop anything +} + +sub ::asciz +{ my @str=unpack("C*",shift); + push @str,0; + while ($#str>15) { + &data_byte(@str[0..15]); + foreach (0..15) { shift @str; } + } + &data_byte(@str) if (@str); +} + +sub ::asm_finish +{ &file_end(); + my $comment = "#"; + $comment = ";" if ($win32); + print <<___; +$comment This file is generated from a similarly-named Perl script in the BoringSSL +$comment source tree. Do not edit by hand. + +___ + if ($win32) { + print <<___ unless $masm; +%ifdef BORINGSSL_PREFIX +%include "boringssl_prefix_symbols_nasm.inc" +%endif +___ + } else { + print <<___; +#if defined(__i386__) +#if defined(BORINGSSL_PREFIX) +#include +#endif +___ + } + print @out; + print "#endif\n" unless ($win32); + # See https://www.airs.com/blog/archives/518. + print ".section\t.note.GNU-stack,\"\",\@progbits\n" if ($elf); +} + +sub ::asm_init +{ my ($type,$cpu)=@_; + + $i386=$cpu; + + $elf=$cpp=$coff=$aout=$macosx=$win32=$mwerks=$android=0; + if (($type eq "elf")) + { $elf=1; require "x86gas.pl"; } + elsif (($type eq "elf-1")) + { $elf=-1; require "x86gas.pl"; } + elsif (($type eq "a\.out")) + { $aout=1; require "x86gas.pl"; } + elsif (($type eq "coff" or $type eq "gaswin")) + { $coff=1; require "x86gas.pl"; } + elsif (($type eq "win32n")) + { $win32=1; require "x86nasm.pl"; } + elsif (($type eq "win32")) + { $win32=1; $masm=1; require "x86masm.pl"; } + elsif (($type eq "macosx")) + { $aout=1; $macosx=1; require "x86gas.pl"; } + elsif (($type eq "android")) + { $elf=1; $android=1; require "x86gas.pl"; } + else + { print STDERR <<"EOF"; +Pick one target type from + elf - Linux, FreeBSD, Solaris x86, etc. + a.out - DJGPP, elder OpenBSD, etc. + coff - GAS/COFF such as Win32 targets + win32n - Windows 95/Windows NT NASM format + macosx - Mac OS X +EOF + exit(1); + } + + $pic=0; + for (@ARGV) { $pic=1 if (/\-[fK]PIC/i); } + + &file(); +} + +sub ::hidden {} + +1; diff --git a/vendor/ring/crypto/perlasm/x86gas.pl b/vendor/ring/crypto/perlasm/x86gas.pl new file mode 100644 index 00000000..5df7de6b --- /dev/null +++ b/vendor/ring/crypto/perlasm/x86gas.pl @@ -0,0 +1,270 @@ +#! /usr/bin/env perl +# Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +package x86gas; + +*out=\@::out; + +$::lbdecor=$::aout?"L":".L"; # local label decoration +$nmdecor=($::aout or $::coff)?"_":""; # external name decoration + +$initseg=""; + +$align=16; +$align=log($align)/log(2) if ($::aout); +$com_start="#" if ($::aout or $::coff); + +sub opsize() +{ my $reg=shift; + if ($reg =~ m/^%e/o) { "l"; } + elsif ($reg =~ m/^%[a-d][hl]$/o) { "b"; } + elsif ($reg =~ m/^%[yxm]/o) { undef; } + else { "w"; } +} + +# swap arguments; +# expand opcode with size suffix; +# prefix numeric constants with $; +sub ::generic +{ my($opcode,@arg)=@_; + my($suffix,$dst,$src); + + @arg=reverse(@arg); + + for (@arg) + { s/^(\*?)(e?[a-dsixphl]{2})$/$1%$2/o; # gp registers + s/^([xy]?mm[0-7])$/%$1/o; # xmm/mmx registers + s/^(\-?[0-9]+)$/\$$1/o; # constants + s/^(\-?0x[0-9a-f]+)$/\$$1/o; # constants + } + + $dst = $arg[$#arg] if ($#arg>=0); + $src = $arg[$#arg-1] if ($#arg>=1); + if ($dst =~ m/^%/o) { $suffix=&opsize($dst); } + elsif ($src =~ m/^%/o) { $suffix=&opsize($src); } + else { $suffix="l"; } + undef $suffix if ($dst =~ m/^%[xm]/o || $src =~ m/^%[xm]/o); + + if ($#_==0) { &::emit($opcode); } + elsif ($#_==1 && $opcode =~ m/^(call|clflush|j|loop|set)/o) + { &::emit($opcode,@arg); } + else { &::emit($opcode.$suffix,@arg);} + + 1; +} +# +# opcodes not covered by ::generic above, mostly inconsistent namings... +# +sub ::movzx { &::movzb(@_); } +sub ::pushfd { &::pushfl; } +sub ::popfd { &::popfl; } +sub ::cpuid { &::emit(".byte\t0x0f,0xa2"); } +sub ::rdtsc { &::emit(".byte\t0x0f,0x31"); } + +sub ::call { &::emit("call",(&::islabel($_[0]) or "$nmdecor$_[0]")); } +sub ::call_ptr { &::generic("call","*$_[0]"); } +sub ::jmp_ptr { &::generic("jmp","*$_[0]"); } + +*::bswap = sub { &::emit("bswap","%$_[0]"); } if (!$::i386); + +sub ::DWP +{ my($addr,$reg1,$reg2,$idx)=@_; + my $ret=""; + + if (!defined($idx) && 1*$reg2) { $idx=$reg2; $reg2=$reg1; undef $reg1; } + + $addr =~ s/^\s+//; + # prepend global references with optional underscore + $addr =~ s/^([^\+\-0-9][^\+\-]*)/&::islabel($1) or "$nmdecor$1"/ige; + + $reg1 = "%$reg1" if ($reg1); + $reg2 = "%$reg2" if ($reg2); + + $ret .= $addr if (($addr ne "") && ($addr ne 0)); + + if ($reg2) + { $idx!= 0 or $idx=1; + $ret .= "($reg1,$reg2,$idx)"; + } + elsif ($reg1) + { $ret .= "($reg1)"; } + + $ret; +} +sub ::QWP { &::DWP(@_); } +sub ::BP { &::DWP(@_); } +sub ::WP { &::DWP(@_); } +sub ::BC { @_; } +sub ::DWC { @_; } + +sub ::file +{ push(@out,".text\n"); } + +sub ::function_begin_B +{ my $func=shift; + my $global=($func !~ /^_/); + my $begin="${::lbdecor}_${func}_begin"; + + &::LABEL($func,$global?"$begin":"$nmdecor$func"); + $func=$nmdecor.$func; + + push(@out,".globl\t$func\n") if ($global); + if ($::macosx) { + push(@out,".private_extern\t$func\n"); + } else { + push(@out,".hidden\t$func\n"); + } + if ($::coff) + { push(@out,".def\t$func;\t.scl\t".(3-$global).";\t.type\t32;\t.endef\n"); } + elsif (($::aout and !$::pic) or $::macosx) + { } + else + { push(@out,".type $func,\@function\n"); } + push(@out,".align\t$align\n"); + push(@out,"$func:\n"); + push(@out,"$begin:\n") if ($global); + $::stack=4; +} + +sub ::function_end_B +{ my $func=shift; + push(@out,".size\t$nmdecor$func,.-".&::LABEL($func)."\n") if ($::elf); + $::stack=0; + &::wipe_labels(); +} + +sub ::comment + { + if (!defined($com_start) or $::elf) + { # Regarding $::elf above... + # GNU and SVR4 as'es use different comment delimiters, + push(@out,"\n"); # so we just skip ELF comments... + return; + } + foreach (@_) + { + if (/^\s*$/) + { push(@out,"\n"); } + else + { push(@out,"\t$com_start $_ $com_end\n"); } + } + } + +sub ::external_label +{ foreach(@_) { &::LABEL($_,$nmdecor.$_); } } + +sub ::public_label +{ push(@out,".globl\t".&::LABEL($_[0],$nmdecor.$_[0])."\n"); } + +sub ::file_end +{ if ($::macosx) + { if (%non_lazy_ptr) + { push(@out,".section __IMPORT,__pointers,non_lazy_symbol_pointers\n"); + foreach $i (keys %non_lazy_ptr) + { push(@out,"$non_lazy_ptr{$i}:\n.indirect_symbol\t$i\n.long\t0\n"); } + } + } + if (0 && grep {/\b${nmdecor}GFp_ia32cap_P\b/i} @out) { + my $tmp=".comm\t${nmdecor}GFp_ia32cap_P,16"; + if ($::macosx) { push (@out,"$tmp,2\n"); } + elsif ($::elf) { push (@out,"$tmp,4\n"); } + else { push (@out,"$tmp\n"); } + } + push(@out,$initseg) if ($initseg); +} + +sub ::data_byte { push(@out,".byte\t".join(',',@_)."\n"); } +sub ::data_short{ push(@out,".value\t".join(',',@_)."\n"); } +sub ::data_word { push(@out,".long\t".join(',',@_)."\n"); } + +sub ::align +{ my $val=$_[0]; + if ($::aout) + { $val=int(log($val)/log(2)); + $val.=",0x90"; + } + push(@out,".align\t$val\n"); +} + +sub ::picmeup +{ my($dst,$sym,$base,$reflabel)=@_; + + if (($::pic && ($::elf || $::aout)) || $::macosx) + { if (!defined($base)) + { &::call(&::label("PIC_me_up")); + &::set_label("PIC_me_up"); + &::blindpop($dst); + $base=$dst; + $reflabel=&::label("PIC_me_up"); + } + if ($::macosx) + { my $indirect=&::static_label("$nmdecor$sym\$non_lazy_ptr"); + &::mov($dst,&::DWP("$indirect-$reflabel",$base)); + $non_lazy_ptr{"$nmdecor$sym"}=$indirect; + } + elsif ($sym eq "GFp_ia32cap_P" && $::elf>0) + { &::lea($dst,&::DWP("$sym-$reflabel",$base)); } + else + { &::lea($dst,&::DWP("_GLOBAL_OFFSET_TABLE_+[.-$reflabel]", + $base)); + &::mov($dst,&::DWP("$sym\@GOT",$dst)); + } + } + else + { &::lea($dst,&::DWP($sym)); } +} + +sub ::initseg +{ my $f=$nmdecor.shift; + + if ($::android) + { $initseg.=<<___; +.section .init_array +.align 4 +.long $f +___ + } + elsif ($::elf) + { $initseg.=<<___; +.section .init + call $f +___ + } + elsif ($::coff) + { $initseg.=<<___; # applies to both Cygwin and Mingw +.section .ctors +.long $f +___ + } + elsif ($::macosx) + { $initseg.=<<___; +.mod_init_func +.align 2 +.long $f +___ + } + elsif ($::aout) + { my $ctor="${nmdecor}_GLOBAL_\$I\$$f"; + $initseg.=".text\n"; + $initseg.=".type $ctor,\@function\n" if ($::pic); + $initseg.=<<___; # OpenBSD way... +.globl $ctor +.align 2 +$ctor: + jmp $f +___ + } +} + +sub ::dataseg +{ push(@out,".data\n"); } + +*::hidden = sub { push(@out,".hidden\t$nmdecor$_[0]\n"); } if ($::elf); + +1; diff --git a/vendor/ring/crypto/perlasm/x86nasm.pl b/vendor/ring/crypto/perlasm/x86nasm.pl new file mode 100644 index 00000000..4dbd85c2 --- /dev/null +++ b/vendor/ring/crypto/perlasm/x86nasm.pl @@ -0,0 +1,186 @@ +#! /usr/bin/env perl +# Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +package x86nasm; + +*out=\@::out; + +$::lbdecor="L\$"; # local label decoration +$nmdecor="_"; # external name decoration +$drdecor=$::mwerks?".":""; # directive decoration + +$initseg=""; + +sub ::generic +{ my $opcode=shift; + my $tmp; + + if (!$::mwerks) + { if ($opcode =~ m/^j/o && $#_==0) # optimize jumps + { $_[0] = "NEAR $_[0]"; } + elsif ($opcode eq "lea" && $#_==1) # wipe storage qualifier from lea + { $_[1] =~ s/^[^\[]*\[/\[/o; } + elsif ($opcode eq "clflush" && $#_==0) + { $_[0] =~ s/^[^\[]*\[/\[/o; } + } + &::emit($opcode,@_); + 1; +} +# +# opcodes not covered by ::generic above, mostly inconsistent namings... +# +sub ::call { &::emit("call",(&::islabel($_[0]) or "$nmdecor$_[0]")); } +sub ::call_ptr { &::emit("call",@_); } +sub ::jmp_ptr { &::emit("jmp",@_); } + +sub get_mem +{ my($size,$addr,$reg1,$reg2,$idx)=@_; + my($post,$ret); + + if (!defined($idx) && 1*$reg2) { $idx=$reg2; $reg2=$reg1; undef $reg1; } + + if ($size ne "") + { $ret .= "$size"; + $ret .= " PTR" if ($::mwerks); + $ret .= " "; + } + $ret .= "["; + + $addr =~ s/^\s+//; + # prepend global references with optional underscore + $addr =~ s/^([^\+\-0-9][^\+\-]*)/::islabel($1) or "$nmdecor$1"/ige; + # put address arithmetic expression in parenthesis + $addr="($addr)" if ($addr =~ /^.+[\-\+].+$/); + + if (($addr ne "") && ($addr ne 0)) + { if ($addr !~ /^-/) { $ret .= "$addr+"; } + else { $post=$addr; } + } + + if ($reg2 ne "") + { $idx!=0 or $idx=1; + $ret .= "$reg2*$idx"; + $ret .= "+$reg1" if ($reg1 ne ""); + } + else + { $ret .= "$reg1"; } + + $ret .= "$post]"; + $ret =~ s/\+\]/]/; # in case $addr was the only argument + + $ret; +} +sub ::BP { &get_mem("BYTE",@_); } +sub ::DWP { &get_mem("DWORD",@_); } +sub ::WP { &get_mem("WORD",@_); } +sub ::QWP { &get_mem("",@_); } +sub ::BC { (($::mwerks)?"":"BYTE ")."@_"; } +sub ::DWC { (($::mwerks)?"":"DWORD ")."@_"; } + +sub ::file +{ if ($::mwerks) { push(@out,".section\t.text,64\n"); } + else + { my $tmp=<<___; +%ifidn __OUTPUT_FORMAT__,obj +section code use32 class=code align=64 +%elifidn __OUTPUT_FORMAT__,win32 +\$\@feat.00 equ 1 +section .text code align=64 +%else +section .text code +%endif +___ + push(@out,$tmp); + } +} + +sub ::function_begin_B +{ my $func=shift; + my $global=($func !~ /^_/); + my $begin="${::lbdecor}_${func}_begin"; + + $begin =~ s/^\@/./ if ($::mwerks); # the torture never stops + + &::LABEL($func,$global?"$begin":"$nmdecor$func"); + $func=$nmdecor.$func; + + push(@out,"${drdecor}global $func\n") if ($global); + push(@out,"${drdecor}align 16\n"); + push(@out,"$func:\n"); + push(@out,"$begin:\n") if ($global); + $::stack=4; +} + +sub ::function_end_B +{ $::stack=0; + &::wipe_labels(); +} + +sub ::file_end +{ if (grep {/\b${nmdecor}GFp_ia32cap_P\b/i} @out) + { my $comm=<<___; +${drdecor}segment .bss +${drdecor}common ${nmdecor}GFp_ia32cap_P 16 +___ + # comment out GFp_ia32cap_P declarations + grep {s/(^extern\s+${nmdecor}GFp_ia32cap_P)/\;$1/} @out; + push (@out,$comm) + } + push (@out,$initseg) if ($initseg); +} + +sub ::comment { foreach (@_) { push(@out,"\t; $_\n"); } } + +sub ::external_label +{ foreach(@_) + { push(@out,"${drdecor}extern\t".&::LABEL($_,$nmdecor.$_)."\n"); } +} + +sub ::public_label +{ push(@out,"${drdecor}global\t".&::LABEL($_[0],$nmdecor.$_[0])."\n"); } + +sub ::data_byte +{ push(@out,(($::mwerks)?".byte\t":"db\t").join(',',@_)."\n"); } +sub ::data_short +{ push(@out,(($::mwerks)?".word\t":"dw\t").join(',',@_)."\n"); } +sub ::data_word +{ push(@out,(($::mwerks)?".long\t":"dd\t").join(',',@_)."\n"); } + +sub ::align +{ push(@out,"${drdecor}align\t$_[0]\n"); } + +sub ::picmeup +{ my($dst,$sym)=@_; + &::lea($dst,&::DWP($sym)); +} + +sub ::initseg +{ my $f=$nmdecor.shift; + if ($::win32) + { $initseg=<<___; +segment .CRT\$XCU data align=4 +extern $f +dd $f +___ + } +} + +sub ::dataseg +{ if ($mwerks) { push(@out,".section\t.data,4\n"); } + else { push(@out,"section\t.data align=4\n"); } +} + +sub ::safeseh +{ my $nm=shift; + push(@out,"%if __NASM_VERSION_ID__ >= 0x02030000\n"); + push(@out,"safeseh ".&::LABEL($nm,$nmdecor.$nm)."\n"); + push(@out,"%endif\n"); +} + +1; diff --git a/vendor/ring/crypto/poly1305/internal.h b/vendor/ring/crypto/poly1305/internal.h new file mode 100644 index 00000000..98e7a482 --- /dev/null +++ b/vendor/ring/crypto/poly1305/internal.h @@ -0,0 +1,25 @@ +/* Copyright (c) 2016, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +#ifndef OPENSSL_HEADER_POLY1305_INTERNAL_H +#define OPENSSL_HEADER_POLY1305_INTERNAL_H + +#include +#include + +#if defined(OPENSSL_ARM) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_APPLE) +#define OPENSSL_POLY1305_NEON +#endif + +#endif // OPENSSL_HEADER_POLY1305_INTERNAL_H diff --git a/vendor/ring/crypto/poly1305/poly1305.c b/vendor/ring/crypto/poly1305/poly1305.c new file mode 100644 index 00000000..66620580 --- /dev/null +++ b/vendor/ring/crypto/poly1305/poly1305.c @@ -0,0 +1,301 @@ +/* Copyright (c) 2014, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +// This implementation of poly1305 is by Andrew Moon +// (https://github.com/floodyberry/poly1305-donna) and released as public +// domain. + +#include + +#include "internal.h" +#include "../internal.h" + + +#if !defined(BORINGSSL_HAS_UINT128) || !defined(OPENSSL_X86_64) + +#if defined(__GNUC__) +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wconversion" +#endif + +// We can assume little-endian. +static uint32_t U8TO32_LE(const uint8_t *m) { + uint32_t r; + GFp_memcpy(&r, m, sizeof(r)); + return r; +} + +static void U32TO8_LE(uint8_t *m, uint32_t v) { + GFp_memcpy(m, &v, sizeof(v)); +} + +static uint64_t mul32x32_64(uint32_t a, uint32_t b) { return (uint64_t)a * b; } + +struct poly1305_state_st { + uint32_t r0, r1, r2, r3, r4; + uint32_t s1, s2, s3, s4; + uint32_t h0, h1, h2, h3, h4; + uint8_t buf[16]; + size_t buf_used; + uint8_t key[16]; +}; + +OPENSSL_STATIC_ASSERT(sizeof(struct poly1305_state_st) <= sizeof(poly1305_state), + "poly1305_state isn't large enough to hold aligned poly1305_state_st"); + +static inline struct poly1305_state_st *poly1305_aligned_state( + poly1305_state *state) { + dev_assert_secret(((uintptr_t)state & 63) == 0); + return (struct poly1305_state_st *)(((uintptr_t)state + 63) & ~63); +} + +// poly1305_blocks updates |state| given some amount of input data. This +// function may only be called with a |len| that is not a multiple of 16 at the +// end of the data. Otherwise the input must be buffered into 16 byte blocks. +static void poly1305_update(struct poly1305_state_st *state, const uint8_t *in, + size_t len) { + uint32_t t0, t1, t2, t3; + uint64_t t[5]; + uint32_t b; + uint64_t c; + size_t j; + uint8_t mp[16]; + + if (len < 16) { + goto poly1305_donna_atmost15bytes; + } + +poly1305_donna_16bytes: + t0 = U8TO32_LE(in); + t1 = U8TO32_LE(in + 4); + t2 = U8TO32_LE(in + 8); + t3 = U8TO32_LE(in + 12); + + in += 16; + len -= 16; + + state->h0 += t0 & 0x3ffffff; + state->h1 += ((((uint64_t)t1 << 32) | t0) >> 26) & 0x3ffffff; + state->h2 += ((((uint64_t)t2 << 32) | t1) >> 20) & 0x3ffffff; + state->h3 += ((((uint64_t)t3 << 32) | t2) >> 14) & 0x3ffffff; + state->h4 += (t3 >> 8) | (1 << 24); + +poly1305_donna_mul: + t[0] = mul32x32_64(state->h0, state->r0) + mul32x32_64(state->h1, state->s4) + + mul32x32_64(state->h2, state->s3) + mul32x32_64(state->h3, state->s2) + + mul32x32_64(state->h4, state->s1); + t[1] = mul32x32_64(state->h0, state->r1) + mul32x32_64(state->h1, state->r0) + + mul32x32_64(state->h2, state->s4) + mul32x32_64(state->h3, state->s3) + + mul32x32_64(state->h4, state->s2); + t[2] = mul32x32_64(state->h0, state->r2) + mul32x32_64(state->h1, state->r1) + + mul32x32_64(state->h2, state->r0) + mul32x32_64(state->h3, state->s4) + + mul32x32_64(state->h4, state->s3); + t[3] = mul32x32_64(state->h0, state->r3) + mul32x32_64(state->h1, state->r2) + + mul32x32_64(state->h2, state->r1) + mul32x32_64(state->h3, state->r0) + + mul32x32_64(state->h4, state->s4); + t[4] = mul32x32_64(state->h0, state->r4) + mul32x32_64(state->h1, state->r3) + + mul32x32_64(state->h2, state->r2) + mul32x32_64(state->h3, state->r1) + + mul32x32_64(state->h4, state->r0); + + state->h0 = (uint32_t)t[0] & 0x3ffffff; + c = (t[0] >> 26); + t[1] += c; + state->h1 = (uint32_t)t[1] & 0x3ffffff; + b = (uint32_t)(t[1] >> 26); + t[2] += b; + state->h2 = (uint32_t)t[2] & 0x3ffffff; + b = (uint32_t)(t[2] >> 26); + t[3] += b; + state->h3 = (uint32_t)t[3] & 0x3ffffff; + b = (uint32_t)(t[3] >> 26); + t[4] += b; + state->h4 = (uint32_t)t[4] & 0x3ffffff; + b = (uint32_t)(t[4] >> 26); + state->h0 += b * 5; + + if (len >= 16) { + goto poly1305_donna_16bytes; + } + +// final bytes +poly1305_donna_atmost15bytes: + if (!len) { + return; + } + + for (j = 0; j < len; j++) { + mp[j] = in[j]; + } + mp[j++] = 1; + for (; j < 16; j++) { + mp[j] = 0; + } + len = 0; + + t0 = U8TO32_LE(mp + 0); + t1 = U8TO32_LE(mp + 4); + t2 = U8TO32_LE(mp + 8); + t3 = U8TO32_LE(mp + 12); + + state->h0 += t0 & 0x3ffffff; + state->h1 += ((((uint64_t)t1 << 32) | t0) >> 26) & 0x3ffffff; + state->h2 += ((((uint64_t)t2 << 32) | t1) >> 20) & 0x3ffffff; + state->h3 += ((((uint64_t)t3 << 32) | t2) >> 14) & 0x3ffffff; + state->h4 += (t3 >> 8); + + goto poly1305_donna_mul; +} + +void GFp_poly1305_init(poly1305_state *statep, const uint8_t key[32]) { + struct poly1305_state_st *state = poly1305_aligned_state(statep); + uint32_t t0, t1, t2, t3; + + t0 = U8TO32_LE(key + 0); + t1 = U8TO32_LE(key + 4); + t2 = U8TO32_LE(key + 8); + t3 = U8TO32_LE(key + 12); + + // precompute multipliers + state->r0 = t0 & 0x3ffffff; + t0 >>= 26; + t0 |= t1 << 6; + state->r1 = t0 & 0x3ffff03; + t1 >>= 20; + t1 |= t2 << 12; + state->r2 = t1 & 0x3ffc0ff; + t2 >>= 14; + t2 |= t3 << 18; + state->r3 = t2 & 0x3f03fff; + t3 >>= 8; + state->r4 = t3 & 0x00fffff; + + state->s1 = state->r1 * 5; + state->s2 = state->r2 * 5; + state->s3 = state->r3 * 5; + state->s4 = state->r4 * 5; + + // init state + state->h0 = 0; + state->h1 = 0; + state->h2 = 0; + state->h3 = 0; + state->h4 = 0; + + state->buf_used = 0; + GFp_memcpy(state->key, key + 16, sizeof(state->key)); +} + +void GFp_poly1305_update(poly1305_state *statep, const uint8_t *in, + size_t in_len) { + struct poly1305_state_st *state = poly1305_aligned_state(statep); + + if (state->buf_used) { + size_t todo = 16 - state->buf_used; + if (todo > in_len) { + todo = in_len; + } + for (size_t i = 0; i < todo; i++) { + state->buf[state->buf_used + i] = in[i]; + } + state->buf_used += todo; + in_len -= todo; + in += todo; + + if (state->buf_used == 16) { + poly1305_update(state, state->buf, 16); + state->buf_used = 0; + } + } + + if (in_len >= 16) { + size_t todo = in_len & ~0xf; + poly1305_update(state, in, todo); + in += todo; + in_len &= 0xf; + } + + if (in_len) { + for (size_t i = 0; i < in_len; i++) { + state->buf[i] = in[i]; + } + state->buf_used = in_len; + } +} + +void GFp_poly1305_finish(poly1305_state *statep, uint8_t mac[16]) { + struct poly1305_state_st *state = poly1305_aligned_state(statep); + uint64_t f0, f1, f2, f3; + uint32_t g0, g1, g2, g3, g4; + uint32_t b, nb; + + if (state->buf_used) { + poly1305_update(state, state->buf, state->buf_used); + } + + b = state->h0 >> 26; + state->h0 = state->h0 & 0x3ffffff; + state->h1 += b; + b = state->h1 >> 26; + state->h1 = state->h1 & 0x3ffffff; + state->h2 += b; + b = state->h2 >> 26; + state->h2 = state->h2 & 0x3ffffff; + state->h3 += b; + b = state->h3 >> 26; + state->h3 = state->h3 & 0x3ffffff; + state->h4 += b; + b = state->h4 >> 26; + state->h4 = state->h4 & 0x3ffffff; + state->h0 += b * 5; + + g0 = state->h0 + 5; + b = g0 >> 26; + g0 &= 0x3ffffff; + g1 = state->h1 + b; + b = g1 >> 26; + g1 &= 0x3ffffff; + g2 = state->h2 + b; + b = g2 >> 26; + g2 &= 0x3ffffff; + g3 = state->h3 + b; + b = g3 >> 26; + g3 &= 0x3ffffff; + g4 = state->h4 + b - (1 << 26); + + b = (g4 >> 31) - 1; + nb = ~b; + state->h0 = (state->h0 & nb) | (g0 & b); + state->h1 = (state->h1 & nb) | (g1 & b); + state->h2 = (state->h2 & nb) | (g2 & b); + state->h3 = (state->h3 & nb) | (g3 & b); + state->h4 = (state->h4 & nb) | (g4 & b); + + f0 = ((state->h0) | (state->h1 << 26)) + (uint64_t)U8TO32_LE(&state->key[0]); + f1 = ((state->h1 >> 6) | (state->h2 << 20)) + + (uint64_t)U8TO32_LE(&state->key[4]); + f2 = ((state->h2 >> 12) | (state->h3 << 14)) + + (uint64_t)U8TO32_LE(&state->key[8]); + f3 = ((state->h3 >> 18) | (state->h4 << 8)) + + (uint64_t)U8TO32_LE(&state->key[12]); + + U32TO8_LE(&mac[0], (uint32_t)f0); + f1 += (f0 >> 32); + U32TO8_LE(&mac[4], (uint32_t)f1); + f2 += (f1 >> 32); + U32TO8_LE(&mac[8], (uint32_t)f2); + f3 += (f2 >> 32); + U32TO8_LE(&mac[12], (uint32_t)f3); +} + +#endif // !BORINGSSL_HAS_UINT128 || !OPENSSL_X86_64 diff --git a/vendor/ring/crypto/poly1305/poly1305_arm.c b/vendor/ring/crypto/poly1305/poly1305_arm.c new file mode 100644 index 00000000..3b00a9f2 --- /dev/null +++ b/vendor/ring/crypto/poly1305/poly1305_arm.c @@ -0,0 +1,307 @@ +/* Copyright (c) 2014, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +// This implementation was taken from the public domain, neon2 version in +// SUPERCOP by D. J. Bernstein and Peter Schwabe. + +#include + +#include "internal.h" +#include "../internal.h" + + +#if defined(OPENSSL_POLY1305_NEON) + +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wcast-align" + +typedef struct { + uint32_t v[12]; // for alignment; only using 10 +} fe1305x2; + +#define addmulmod GFp_poly1305_neon2_addmulmod +#define blocks GFp_poly1305_neon2_blocks + +extern void addmulmod(fe1305x2 *r, const fe1305x2 *x, const fe1305x2 *y, + const fe1305x2 *c); + +extern int blocks(fe1305x2 *h, const fe1305x2 *precomp, const uint8_t *in, + size_t inlen); + +static void freeze(fe1305x2 *r) { + int i; + + uint32_t x0 = r->v[0]; + uint32_t x1 = r->v[2]; + uint32_t x2 = r->v[4]; + uint32_t x3 = r->v[6]; + uint32_t x4 = r->v[8]; + uint32_t y0; + uint32_t y1; + uint32_t y2; + uint32_t y3; + uint32_t y4; + uint32_t swap; + + for (i = 0; i < 3; ++i) { + x1 += x0 >> 26; + x0 &= 0x3ffffff; + x2 += x1 >> 26; + x1 &= 0x3ffffff; + x3 += x2 >> 26; + x2 &= 0x3ffffff; + x4 += x3 >> 26; + x3 &= 0x3ffffff; + x0 += 5 * (x4 >> 26); + x4 &= 0x3ffffff; + } + + y0 = x0 + 5; + y1 = x1 + (y0 >> 26); + y0 &= 0x3ffffff; + y2 = x2 + (y1 >> 26); + y1 &= 0x3ffffff; + y3 = x3 + (y2 >> 26); + y2 &= 0x3ffffff; + y4 = x4 + (y3 >> 26); + y3 &= 0x3ffffff; + swap = -(y4 >> 26); + y4 &= 0x3ffffff; + + y0 ^= x0; + y1 ^= x1; + y2 ^= x2; + y3 ^= x3; + y4 ^= x4; + + y0 &= swap; + y1 &= swap; + y2 &= swap; + y3 &= swap; + y4 &= swap; + + y0 ^= x0; + y1 ^= x1; + y2 ^= x2; + y3 ^= x3; + y4 ^= x4; + + r->v[0] = y0; + r->v[2] = y1; + r->v[4] = y2; + r->v[6] = y3; + r->v[8] = y4; +} + +static void store32(uint8_t out[4], uint32_t v) { GFp_memcpy(out, &v, 4); } + +// load32 exists to avoid breaking strict aliasing rules in +// fe1305x2_frombytearray. +static uint32_t load32(const uint8_t t[4]) { + uint32_t tmp; + GFp_memcpy(&tmp, t, sizeof(tmp)); + return tmp; +} + +static void fe1305x2_tobytearray(uint8_t r[16], fe1305x2 *x) { + uint32_t x0 = x->v[0]; + uint32_t x1 = x->v[2]; + uint32_t x2 = x->v[4]; + uint32_t x3 = x->v[6]; + uint32_t x4 = x->v[8]; + + x1 += x0 >> 26; + x0 &= 0x3ffffff; + x2 += x1 >> 26; + x1 &= 0x3ffffff; + x3 += x2 >> 26; + x2 &= 0x3ffffff; + x4 += x3 >> 26; + x3 &= 0x3ffffff; + + store32(r, x0 + (x1 << 26)); + store32(r + 4, (x1 >> 6) + (x2 << 20)); + store32(r + 8, (x2 >> 12) + (x3 << 14)); + store32(r + 12, (x3 >> 18) + (x4 << 8)); +} + +static void fe1305x2_frombytearray(fe1305x2 *r, const uint8_t *x, size_t xlen) { + size_t i; + uint8_t t[17]; + + for (i = 0; (i < 16) && (i < xlen); i++) { + t[i] = x[i]; + } + xlen -= i; + x += i; + t[i++] = 1; + for (; i < 17; i++) { + t[i] = 0; + } + + r->v[0] = 0x3ffffff & load32(t); + r->v[2] = 0x3ffffff & (load32(t + 3) >> 2); + r->v[4] = 0x3ffffff & (load32(t + 6) >> 4); + r->v[6] = 0x3ffffff & (load32(t + 9) >> 6); + r->v[8] = load32(t + 13); + + if (xlen) { + for (i = 0; (i < 16) && (i < xlen); i++) { + t[i] = x[i]; + } + t[i++] = 1; + for (; i < 17; i++) { + t[i] = 0; + } + + r->v[1] = 0x3ffffff & load32(t); + r->v[3] = 0x3ffffff & (load32(t + 3) >> 2); + r->v[5] = 0x3ffffff & (load32(t + 6) >> 4); + r->v[7] = 0x3ffffff & (load32(t + 9) >> 6); + r->v[9] = load32(t + 13); + } else { + r->v[1] = r->v[3] = r->v[5] = r->v[7] = r->v[9] = 0; + } +} + +static const alignas(16) fe1305x2 zero; + +struct poly1305_state_st { + uint8_t data[sizeof(fe1305x2[5]) + 128]; + uint8_t buf[32]; + size_t buf_used; + uint8_t key[16]; +}; + +OPENSSL_STATIC_ASSERT(sizeof(struct poly1305_state_st) <= sizeof(poly1305_state), + "poly1305_state isn't large enough to hold aligned poly1305_state_st"); + +void GFp_poly1305_init_neon(poly1305_state *state, const uint8_t key[32]) { + struct poly1305_state_st *st = (struct poly1305_state_st *)(state); + fe1305x2 *const r = (fe1305x2 *)(st->data + (15 & (-(int)st->data))); + fe1305x2 *const h = r + 1; + fe1305x2 *const c = h + 1; + fe1305x2 *const precomp = c + 1; + + r->v[1] = r->v[0] = 0x3ffffff & load32(key); + r->v[3] = r->v[2] = 0x3ffff03 & (load32(key + 3) >> 2); + r->v[5] = r->v[4] = 0x3ffc0ff & (load32(key + 6) >> 4); + r->v[7] = r->v[6] = 0x3f03fff & (load32(key + 9) >> 6); + r->v[9] = r->v[8] = 0x00fffff & (load32(key + 12) >> 8); + + for (size_t j = 0; j < 10; j++) { + h->v[j] = 0; // XXX: should fast-forward a bit + } + + addmulmod(precomp, r, r, &zero); // precompute r^2 + addmulmod(precomp + 1, precomp, precomp, &zero); // precompute r^4 + + GFp_memcpy(st->key, key + 16, 16); + st->buf_used = 0; +} + +void GFp_poly1305_update_neon(poly1305_state *state, const uint8_t *in, + size_t in_len) { + struct poly1305_state_st *st = (struct poly1305_state_st *)(state); + fe1305x2 *const r = (fe1305x2 *)(st->data + (15 & (-(int)st->data))); + fe1305x2 *const h = r + 1; + fe1305x2 *const c = h + 1; + fe1305x2 *const precomp = c + 1; + + if (st->buf_used) { + size_t todo = 32 - st->buf_used; + if (todo > in_len) { + todo = in_len; + } + for (size_t i = 0; i < todo; i++) { + st->buf[st->buf_used + i] = in[i]; + } + st->buf_used += todo; + in_len -= todo; + in += todo; + + if (st->buf_used == sizeof(st->buf) && in_len) { + addmulmod(h, h, precomp, &zero); + fe1305x2_frombytearray(c, st->buf, sizeof(st->buf)); + for (size_t i = 0; i < 10; i++) { + h->v[i] += c->v[i]; + } + st->buf_used = 0; + } + } + + while (in_len > 32) { + size_t tlen = 1048576; + if (in_len < tlen) { + tlen = in_len; + } + tlen -= blocks(h, precomp, in, tlen); + in_len -= tlen; + in += tlen; + } + + if (in_len) { + for (size_t i = 0; i < in_len; i++) { + st->buf[i] = in[i]; + } + st->buf_used = in_len; + } +} + +void GFp_poly1305_finish_neon(poly1305_state *state, uint8_t mac[16]) { + struct poly1305_state_st *st = (struct poly1305_state_st *)(state); + fe1305x2 *const r = (fe1305x2 *)(st->data + (15 & (-(int)st->data))); + fe1305x2 *const h = r + 1; + fe1305x2 *const c = h + 1; + fe1305x2 *const precomp = c + 1; + + addmulmod(h, h, precomp, &zero); + + if (st->buf_used > 16) { + fe1305x2_frombytearray(c, st->buf, st->buf_used); + precomp->v[1] = r->v[1]; + precomp->v[3] = r->v[3]; + precomp->v[5] = r->v[5]; + precomp->v[7] = r->v[7]; + precomp->v[9] = r->v[9]; + addmulmod(h, h, precomp, c); + } else if (st->buf_used > 0) { + fe1305x2_frombytearray(c, st->buf, st->buf_used); + r->v[1] = 1; + r->v[3] = 0; + r->v[5] = 0; + r->v[7] = 0; + r->v[9] = 0; + addmulmod(h, h, r, c); + } + + h->v[0] += h->v[1]; + h->v[2] += h->v[3]; + h->v[4] += h->v[5]; + h->v[6] += h->v[7]; + h->v[8] += h->v[9]; + freeze(h); + + fe1305x2_frombytearray(c, st->key, 16); + c->v[8] ^= (1 << 24); + + h->v[0] += c->v[0]; + h->v[2] += c->v[2]; + h->v[4] += c->v[4]; + h->v[6] += c->v[6]; + h->v[8] += c->v[8]; + fe1305x2_tobytearray(mac, h); +} + +#endif // OPENSSL_POLY1305_NEON diff --git a/vendor/ring/crypto/poly1305/poly1305_arm_asm.S b/vendor/ring/crypto/poly1305/poly1305_arm_asm.S new file mode 100644 index 00000000..24ae435f --- /dev/null +++ b/vendor/ring/crypto/poly1305/poly1305_arm_asm.S @@ -0,0 +1,2031 @@ +#if defined(__has_feature) +#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM) +#define OPENSSL_NO_ASM +#endif +#endif + +#if defined(__arm__) && !defined(OPENSSL_NO_ASM) && !defined(__APPLE__) + +#pragma GCC diagnostic ignored "-Wlanguage-extension-token" + +#if defined(BORINGSSL_PREFIX) +#include +#endif + +# This implementation was taken from the public domain, neon2 version in +# SUPERCOP by D. J. Bernstein and Peter Schwabe. + +# qhasm: int32 input_0 + +# qhasm: int32 input_1 + +# qhasm: int32 input_2 + +# qhasm: int32 input_3 + +# qhasm: stack32 input_4 + +# qhasm: stack32 input_5 + +# qhasm: stack32 input_6 + +# qhasm: stack32 input_7 + +# qhasm: int32 caller_r4 + +# qhasm: int32 caller_r5 + +# qhasm: int32 caller_r6 + +# qhasm: int32 caller_r7 + +# qhasm: int32 caller_r8 + +# qhasm: int32 caller_r9 + +# qhasm: int32 caller_r10 + +# qhasm: int32 caller_r11 + +# qhasm: int32 caller_r12 + +# qhasm: int32 caller_r14 + +# qhasm: reg128 caller_q4 + +# qhasm: reg128 caller_q5 + +# qhasm: reg128 caller_q6 + +# qhasm: reg128 caller_q7 + +# qhasm: startcode +.fpu neon +.text + +# qhasm: reg128 r0 + +# qhasm: reg128 r1 + +# qhasm: reg128 r2 + +# qhasm: reg128 r3 + +# qhasm: reg128 r4 + +# qhasm: reg128 x01 + +# qhasm: reg128 x23 + +# qhasm: reg128 x4 + +# qhasm: reg128 y0 + +# qhasm: reg128 y12 + +# qhasm: reg128 y34 + +# qhasm: reg128 5y12 + +# qhasm: reg128 5y34 + +# qhasm: stack128 y0_stack + +# qhasm: stack128 y12_stack + +# qhasm: stack128 y34_stack + +# qhasm: stack128 5y12_stack + +# qhasm: stack128 5y34_stack + +# qhasm: reg128 z0 + +# qhasm: reg128 z12 + +# qhasm: reg128 z34 + +# qhasm: reg128 5z12 + +# qhasm: reg128 5z34 + +# qhasm: stack128 z0_stack + +# qhasm: stack128 z12_stack + +# qhasm: stack128 z34_stack + +# qhasm: stack128 5z12_stack + +# qhasm: stack128 5z34_stack + +# qhasm: stack128 two24 + +# qhasm: int32 ptr + +# qhasm: reg128 c01 + +# qhasm: reg128 c23 + +# qhasm: reg128 d01 + +# qhasm: reg128 d23 + +# qhasm: reg128 t0 + +# qhasm: reg128 t1 + +# qhasm: reg128 t2 + +# qhasm: reg128 t3 + +# qhasm: reg128 t4 + +# qhasm: reg128 mask + +# qhasm: reg128 u0 + +# qhasm: reg128 u1 + +# qhasm: reg128 u2 + +# qhasm: reg128 u3 + +# qhasm: reg128 u4 + +# qhasm: reg128 v01 + +# qhasm: reg128 mid + +# qhasm: reg128 v23 + +# qhasm: reg128 v4 + +# qhasm: int32 len + +# qhasm: qpushenter crypto_onetimeauth_poly1305_neon2_blocks +.align 4 +.global GFp_poly1305_neon2_blocks +.hidden GFp_poly1305_neon2_blocks +.type GFp_poly1305_neon2_blocks STT_FUNC +GFp_poly1305_neon2_blocks: +vpush {q4,q5,q6,q7} +mov r12,sp +sub sp,sp,#192 +bic sp,sp,#31 + +# qhasm: len = input_3 +# asm 1: mov >len=int32#4,len=r3,y12=reg128#2%bot->y12=reg128#2%top},[y12=d2->y12=d3},[y34=reg128#3%bot->y34=reg128#3%top},[y34=d4->y34=d5},[input_1=int32#2,input_1=r1,z12=reg128#5%bot->z12=reg128#5%top},[z12=d8->z12=d9},[z34=reg128#6%bot->z34=reg128#6%top},[z34=d10->z34=d11},[mask=reg128#7,#0xffffffff +# asm 2: vmov.i64 >mask=q6,#0xffffffff +vmov.i64 q6,#0xffffffff + +# qhasm: 2x u4 = 0xff +# asm 1: vmov.i64 >u4=reg128#8,#0xff +# asm 2: vmov.i64 >u4=q7,#0xff +vmov.i64 q7,#0xff + +# qhasm: x01 aligned= mem128[input_0];input_0+=16 +# asm 1: vld1.8 {>x01=reg128#9%bot->x01=reg128#9%top},[x01=d16->x01=d17},[x23=reg128#10%bot->x23=reg128#10%top},[x23=d18->x23=d19},[input_0=int32#1,input_0=r0,>=6 +# asm 1: vshr.u64 >mask=reg128#7,mask=q6,>= 7 +# asm 1: vshr.u64 >u4=reg128#8,u4=q7,5y12=reg128#12,5y12=q11,5y34=reg128#13,5y34=q12,5y12=reg128#12,<5y12=reg128#12,5y12=q11,<5y12=q11,5y34=reg128#13,<5y34=reg128#13,5y34=q12,<5y34=q12,u4=reg128#8,u4=q7,5z12=reg128#14,5z12=q13,5z34=reg128#15,5z34=q14,5z12=reg128#14,<5z12=reg128#14,5z12=q13,<5z12=q13,5z34=reg128#15,<5z34=reg128#15,5z34=q14,<5z34=q14,ptr=int32#2,ptr=r1,r4=reg128#16,r4=q15,r0=reg128#8,r0=q7,ptr=int32#2,ptr=r1,ptr=int32#2,ptr=r1,ptr=int32#2,ptr=r1,ptr=int32#2,ptr=r1,ptr=int32#2,ptr=r1,ptr=int32#2,ptr=r1,ptr=int32#2,<5y12_stack=stack128#5 +# asm 2: lea >ptr=r1,<5y12_stack=[sp,#64] +add r1,sp,#64 + +# qhasm: mem128[ptr] aligned= 5y12 +# asm 1: vst1.8 {<5y12=reg128#12%bot-<5y12=reg128#12%top},[ptr=int32#2,<5y34_stack=stack128#6 +# asm 2: lea >ptr=r1,<5y34_stack=[sp,#80] +add r1,sp,#80 + +# qhasm: mem128[ptr] aligned= 5y34 +# asm 1: vst1.8 {<5y34=reg128#13%bot-<5y34=reg128#13%top},[ptr=int32#2,<5z12_stack=stack128#10 +# asm 2: lea >ptr=r1,<5z12_stack=[sp,#144] +add r1,sp,#144 + +# qhasm: mem128[ptr] aligned= 5z12 +# asm 1: vst1.8 {<5z12=reg128#14%bot-<5z12=reg128#14%top},[ptr=int32#2,<5z34_stack=stack128#11 +# asm 2: lea >ptr=r1,<5z34_stack=[sp,#160] +add r1,sp,#160 + +# qhasm: mem128[ptr] aligned= 5z34 +# asm 1: vst1.8 {<5z34=reg128#15%bot-<5z34=reg128#15%top},[? len - 64 +# asm 1: cmp +bls ._below64bytes + +# qhasm: input_2 += 32 +# asm 1: add >input_2=int32#2,input_2=r1,c01=reg128#1%bot->c01=reg128#1%top},[c01=d0->c01=d1},[c23=reg128#2%bot->c23=reg128#2%top},[c23=d2->c23=d3},[ptr=int32#3,ptr=r2,z12=reg128#3%bot->z12=reg128#3%top},[z12=d4->z12=d5},[ptr=int32#3,ptr=r2,z0=reg128#4%bot->z0=reg128#4%top},[z0=d6->z0=d7},[r3=reg128#5,r3=q4,input_2=int32#2,input_2=r1,ptr=int32#3,<5z34_stack=stack128#11 +# asm 2: lea >ptr=r2,<5z34_stack=[sp,#160] +add r2,sp,#160 + +# qhasm: 5z34 aligned= mem128[ptr] +# asm 1: vld1.8 {>5z34=reg128#6%bot->5z34=reg128#6%top},[5z34=d10->5z34=d11},[r0=reg128#8,r0=q7,r2=reg128#14,r2=q13,d01=reg128#12%bot->d01=reg128#12%top},[d01=d22->d01=d23},[r1=reg128#15,r1=q14,ptr=int32#3,<5z12_stack=stack128#10 +# asm 2: lea >ptr=r2,<5z12_stack=[sp,#144] +add r2,sp,#144 + +# qhasm: 5z12 aligned= mem128[ptr] +# asm 1: vld1.8 {>5z12=reg128#1%bot->5z12=reg128#1%top},[5z12=d0->5z12=d1},[d23=reg128#2%bot->d23=reg128#2%top},[d23=d2->d23=d3},[input_2=int32#2,input_2=r1,> 40 +# asm 1: vshr.u64 >v4=reg128#4,v4=q3,> 14; v23[3] = d23[2,3] unsigned>> 14 +# asm 1: vshrn.u64 > 26; v01[3] = d01[2,3] unsigned>> 26 +# asm 1: vshrn.u64 > 20; v23[1] = mid[2,3] unsigned>> 20 +# asm 1: vshrn.u64 ptr=int32#3,ptr=r2,y34=reg128#3%bot->y34=reg128#3%top},[y34=d4->y34=d5},[ptr=int32#3,ptr=r2,y12=reg128#2%bot->y12=reg128#2%top},[y12=d2->y12=d3},[ptr=int32#3,ptr=r2,y0=reg128#1%bot->y0=reg128#1%top},[y0=d0->y0=d1},[ptr=int32#3,<5y34_stack=stack128#6 +# asm 2: lea >ptr=r2,<5y34_stack=[sp,#80] +add r2,sp,#80 + +# qhasm: 5y34 aligned= mem128[ptr] +# asm 1: vld1.8 {>5y34=reg128#13%bot->5y34=reg128#13%top},[5y34=d24->5y34=d25},[ptr=int32#3,<5y12_stack=stack128#5 +# asm 2: lea >ptr=r2,<5y12_stack=[sp,#64] +add r2,sp,#64 + +# qhasm: 5y12 aligned= mem128[ptr] +# asm 1: vld1.8 {>5y12=reg128#12%bot->5y12=reg128#12%top},[5y12=d22->5y12=d23},[ptr=int32#3,ptr=r2,> 26 +# asm 1: vshr.u64 >t1=reg128#4,t1=q3,len=int32#4,len=r3,r0=reg128#6,r0=q5,r1=reg128#4,r1=q3,> 26 +# asm 1: vshr.u64 >t4=reg128#8,t4=q7,r3=reg128#5,r3=q4,x4=reg128#8,x4=q7,r4=reg128#16%bot->r4=reg128#16%top},[r4=d30->r4=d31},[> 26 +# asm 1: vshr.u64 >t2=reg128#9,t2=q8,r1=reg128#4,r1=q3,> 26 +# asm 1: vshr.u64 >t0=reg128#10,t0=q9,r2=reg128#9,r2=q8,x4=reg128#11,x4=q10,x01=reg128#6,x01=q5,r0=reg128#8%bot->r0=reg128#8%top},[r0=d14->r0=d15},[ptr=int32#3,ptr=r2,t0=reg128#10,t0=q9,> 26 +# asm 1: vshr.u64 >t3=reg128#14,t3=q13,x01=reg128#15,x01=q14,z34=reg128#6%bot->z34=reg128#6%top},[z34=d10->z34=d11},[x23=reg128#10,x23=q9,r3=reg128#5,r3=q4,input_2=int32#2,input_2=r1,> 26 +# asm 1: vshr.u64 >t1=reg128#14,t1=q13,x01=reg128#9,x01=q8,r1=reg128#4,r1=q3,> 26 +# asm 1: vshr.u64 >t4=reg128#14,t4=q13,r3=reg128#5,r3=q4,x4=reg128#11,x4=q10,? len - 64 +# asm 1: cmp +bhi ._mainloop2 + +# qhasm: input_2 -= 32 +# asm 1: sub >input_2=int32#3,input_2=r2,? len - 32 +# asm 1: cmp +bls ._end + +# qhasm: mainloop: +._mainloop: + +# qhasm: new r0 + +# qhasm: ptr = &two24 +# asm 1: lea >ptr=int32#2,ptr=r1,r4=reg128#5%bot->r4=reg128#5%top},[r4=d8->r4=d9},[u4=reg128#6%bot->u4=reg128#6%top},[u4=d10->u4=d11},[c01=reg128#8%bot->c01=reg128#8%top},[c01=d14->c01=d15},[c23=reg128#14%bot->c23=reg128#14%top},[c23=d26->c23=d27},[r0=reg128#4,r0=q3,r3=reg128#6,r3=q5,r1=reg128#14,r1=q13,r2=reg128#8,r2=q7,> 26 +# asm 1: vshr.u64 >t1=reg128#9,t1=q8,r0=reg128#4,r0=q3,r1=reg128#9,r1=q8,> 26 +# asm 1: vshr.u64 >t4=reg128#10,t4=q9,r3=reg128#6,r3=q5,r4=reg128#5,r4=q4,> 26 +# asm 1: vshr.u64 >t2=reg128#10,t2=q9,r1=reg128#11,r1=q10,> 26 +# asm 1: vshr.u64 >t0=reg128#9,t0=q8,r2=reg128#8,r2=q7,r4=reg128#5,r4=q4,r0=reg128#4,r0=q3,t0=reg128#9,t0=q8,> 26 +# asm 1: vshr.u64 >t3=reg128#14,t3=q13,r0=reg128#4,r0=q3,x23=reg128#10,x23=q9,r3=reg128#6,r3=q5,> 26 +# asm 1: vshr.u64 >t1=reg128#8,t1=q7,x01=reg128#9,x01=q8,r1=reg128#4,r1=q3,> 26 +# asm 1: vshr.u64 >t4=reg128#8,t4=q7,r3=reg128#6,r3=q5,x4=reg128#11,x4=q10,len=int32#4,len=r3,? len - 32 +# asm 1: cmp +bhi ._mainloop + +# qhasm: end: +._end: + +# qhasm: mem128[input_0] = x01;input_0+=16 +# asm 1: vst1.8 {len=int32#1,len=r0,mask=reg128#1,#0xffffffff +# asm 2: vmov.i64 >mask=q0,#0xffffffff +vmov.i64 q0,#0xffffffff + +# qhasm: y01 aligned= mem128[input_2];input_2+=16 +# asm 1: vld1.8 {>y01=reg128#2%bot->y01=reg128#2%top},[y01=d2->y01=d3},[_5y01=reg128#3,_5y01=q2,y23=reg128#4%bot->y23=reg128#4%top},[y23=d6->y23=d7},[_5y23=reg128#9,_5y23=q8,_5y4=reg128#11,_5y4=q10,x01=reg128#12%bot->x01=reg128#12%top},[x01=d22->x01=d23},[_5y01=reg128#3,<_5y01=reg128#3,_5y01=q2,<_5y01=q2,x23=reg128#13%bot->x23=reg128#13%top},[x23=d24->x23=d25},[_5y23=reg128#9,<_5y23=reg128#9,_5y23=q8,<_5y23=q8,_5y4=reg128#11,<_5y4=reg128#11,_5y4=q10,<_5y4=q10,c01=reg128#14%bot->c01=reg128#14%top},[c01=d26->c01=d27},[x01=reg128#12,x01=q11,c23=reg128#14%bot->c23=reg128#14%top},[c23=d26->c23=d27},[x23=reg128#13,x23=q12,>=6 +# asm 1: vshr.u64 >mask=reg128#1,mask=q0,x4=reg128#14,x4=q13,r0=reg128#15,r0=q14,r1=reg128#3,r1=q2,r2=reg128#16,r2=q15,r3=reg128#9,r3=q8,r4=reg128#10,r4=q9,> 26 +# asm 1: vshr.u64 >t1=reg128#2,t1=q1,r0=reg128#4,r0=q3,r1=reg128#2,r1=q1,> 26 +# asm 1: vshr.u64 >t4=reg128#3,t4=q2,r3=reg128#9,r3=q8,r4=reg128#3,r4=q2,> 26 +# asm 1: vshr.u64 >t2=reg128#10,t2=q9,r1=reg128#2,r1=q1,> 26 +# asm 1: vshr.u64 >t0=reg128#11,t0=q10,r2=reg128#10,r2=q9,r4=reg128#3,r4=q2,r0=reg128#4,r0=q3,t0=reg128#11,t0=q10,> 26 +# asm 1: vshr.u64 >t3=reg128#12,t3=q11,r0=reg128#4,r0=q3,x23=reg128#10,x23=q9,r3=reg128#9,r3=q8,> 26 +# asm 1: vshr.u64 >t1=reg128#11,t1=q10,x01=reg128#4,x01=q3,r1=reg128#2,r1=q1,> 26 +# asm 1: vshr.u64 >t4=reg128#11,t4=q10,r3=reg128#1,r3=q0,x4=reg128#3,x4=q2, + +#include "internal.h" +#include "../internal.h" + + +#if defined(BORINGSSL_HAS_UINT128) && defined(OPENSSL_X86_64) + +#pragma GCC diagnostic ignored "-Wcast-align" +#pragma GCC diagnostic ignored "-Wsign-conversion" + +#include + +static uint32_t load_u32_le(const uint8_t in[4]) { + uint32_t ret; + GFp_memcpy(&ret, in, 4); + return ret; +} + +static uint64_t load_u64_le(const uint8_t in[8]) { + uint64_t ret; + GFp_memcpy(&ret, in, 8); + return ret; +} + +static void store_u64_le(uint8_t out[8], uint64_t v) { + GFp_memcpy(out, &v, 8); +} + +typedef __m128i xmmi; + +static const alignas(16) uint32_t poly1305_x64_sse2_message_mask[4] = { + (1 << 26) - 1, 0, (1 << 26) - 1, 0}; +static const alignas(16) uint32_t poly1305_x64_sse2_5[4] = {5, 0, 5, 0}; +static const alignas(16) uint32_t poly1305_x64_sse2_1shl128[4] = { + (1 << 24), 0, (1 << 24), 0}; + +static inline uint128_t add128(uint128_t a, uint128_t b) { return a + b; } + +static inline uint128_t add128_64(uint128_t a, uint64_t b) { return a + b; } + +static inline uint128_t mul64x64_128(uint64_t a, uint64_t b) { + return (uint128_t)a * b; +} + +static inline uint64_t lo128(uint128_t a) { return (uint64_t)a; } + +static inline uint64_t shr128(uint128_t v, const int shift) { + return (uint64_t)(v >> shift); +} + +static inline uint64_t shr128_pair(uint64_t hi, uint64_t lo, const int shift) { + return (uint64_t)((((uint128_t)hi << 64) | lo) >> shift); +} + +typedef struct poly1305_power_t { + union { + xmmi v; + uint64_t u[2]; + uint32_t d[4]; + } R20, R21, R22, R23, R24, S21, S22, S23, S24; +} poly1305_power; + +typedef struct poly1305_state_internal_t { + poly1305_power P[2]; /* 288 bytes, top 32 bit halves unused = 144 + bytes of free storage */ + union { + xmmi H[5]; // 80 bytes + uint64_t HH[10]; + }; + // uint64_t r0,r1,r2; [24 bytes] + // uint64_t pad0,pad1; [16 bytes] + uint64_t started; // 8 bytes + uint64_t leftover; // 8 bytes + uint8_t buffer[64]; // 64 bytes +} poly1305_state_internal; /* 448 bytes total + 63 bytes for + alignment = 511 bytes raw */ + +OPENSSL_STATIC_ASSERT(sizeof(poly1305_state_internal) <= sizeof(poly1305_state), + "poly1305_state isn't large enough to hold aligned poly1305_state_internal"); + +static inline poly1305_state_internal *poly1305_aligned_state( + poly1305_state *state) { + dev_assert_secret(((uintptr_t)state & 63) == 0); + return (poly1305_state_internal *)(((uint64_t)state + 63) & ~63); +} + +static inline size_t poly1305_min(size_t a, size_t b) { + return (a < b) ? a : b; +} + +void GFp_poly1305_init(poly1305_state *state, const uint8_t key[32]) { + poly1305_state_internal *st = poly1305_aligned_state(state); + poly1305_power *p; + uint64_t r0, r1, r2; + uint64_t t0, t1; + + // clamp key + t0 = load_u64_le(key + 0); + t1 = load_u64_le(key + 8); + r0 = t0 & 0xffc0fffffff; + t0 >>= 44; + t0 |= t1 << 20; + r1 = t0 & 0xfffffc0ffff; + t1 >>= 24; + r2 = t1 & 0x00ffffffc0f; + + // store r in un-used space of st->P[1] + p = &st->P[1]; + p->R20.d[1] = (uint32_t)(r0); + p->R20.d[3] = (uint32_t)(r0 >> 32); + p->R21.d[1] = (uint32_t)(r1); + p->R21.d[3] = (uint32_t)(r1 >> 32); + p->R22.d[1] = (uint32_t)(r2); + p->R22.d[3] = (uint32_t)(r2 >> 32); + + // store pad + p->R23.d[1] = load_u32_le(key + 16); + p->R23.d[3] = load_u32_le(key + 20); + p->R24.d[1] = load_u32_le(key + 24); + p->R24.d[3] = load_u32_le(key + 28); + + // H = 0 + st->H[0] = _mm_setzero_si128(); + st->H[1] = _mm_setzero_si128(); + st->H[2] = _mm_setzero_si128(); + st->H[3] = _mm_setzero_si128(); + st->H[4] = _mm_setzero_si128(); + + st->started = 0; + st->leftover = 0; +} + +static void poly1305_first_block(poly1305_state_internal *st, + const uint8_t *m) { + const xmmi MMASK = _mm_load_si128((const xmmi *)poly1305_x64_sse2_message_mask); + const xmmi FIVE = _mm_load_si128((const xmmi *)poly1305_x64_sse2_5); + const xmmi HIBIT = _mm_load_si128((const xmmi *)poly1305_x64_sse2_1shl128); + xmmi T5, T6; + poly1305_power *p; + uint128_t d[3]; + uint64_t r0, r1, r2; + uint64_t r20, r21, r22, s22; + uint64_t pad0, pad1; + uint64_t c; + uint64_t i; + + // pull out stored info + p = &st->P[1]; + + r0 = ((uint64_t)p->R20.d[3] << 32) | (uint64_t)p->R20.d[1]; + r1 = ((uint64_t)p->R21.d[3] << 32) | (uint64_t)p->R21.d[1]; + r2 = ((uint64_t)p->R22.d[3] << 32) | (uint64_t)p->R22.d[1]; + pad0 = ((uint64_t)p->R23.d[3] << 32) | (uint64_t)p->R23.d[1]; + pad1 = ((uint64_t)p->R24.d[3] << 32) | (uint64_t)p->R24.d[1]; + + // compute powers r^2,r^4 + r20 = r0; + r21 = r1; + r22 = r2; + for (i = 0; i < 2; i++) { + s22 = r22 * (5 << 2); + + d[0] = add128(mul64x64_128(r20, r20), mul64x64_128(r21 * 2, s22)); + d[1] = add128(mul64x64_128(r22, s22), mul64x64_128(r20 * 2, r21)); + d[2] = add128(mul64x64_128(r21, r21), mul64x64_128(r22 * 2, r20)); + + r20 = lo128(d[0]) & 0xfffffffffff; + c = shr128(d[0], 44); + d[1] = add128_64(d[1], c); + r21 = lo128(d[1]) & 0xfffffffffff; + c = shr128(d[1], 44); + d[2] = add128_64(d[2], c); + r22 = lo128(d[2]) & 0x3ffffffffff; + c = shr128(d[2], 42); + r20 += c * 5; + c = (r20 >> 44); + r20 = r20 & 0xfffffffffff; + r21 += c; + + p->R20.v = _mm_shuffle_epi32(_mm_cvtsi32_si128((uint32_t)(r20)&0x3ffffff), + _MM_SHUFFLE(1, 0, 1, 0)); + p->R21.v = _mm_shuffle_epi32( + _mm_cvtsi32_si128((uint32_t)((r20 >> 26) | (r21 << 18)) & 0x3ffffff), + _MM_SHUFFLE(1, 0, 1, 0)); + p->R22.v = + _mm_shuffle_epi32(_mm_cvtsi32_si128((uint32_t)((r21 >> 8)) & 0x3ffffff), + _MM_SHUFFLE(1, 0, 1, 0)); + p->R23.v = _mm_shuffle_epi32( + _mm_cvtsi32_si128((uint32_t)((r21 >> 34) | (r22 << 10)) & 0x3ffffff), + _MM_SHUFFLE(1, 0, 1, 0)); + p->R24.v = _mm_shuffle_epi32(_mm_cvtsi32_si128((uint32_t)((r22 >> 16))), + _MM_SHUFFLE(1, 0, 1, 0)); + p->S21.v = _mm_mul_epu32(p->R21.v, FIVE); + p->S22.v = _mm_mul_epu32(p->R22.v, FIVE); + p->S23.v = _mm_mul_epu32(p->R23.v, FIVE); + p->S24.v = _mm_mul_epu32(p->R24.v, FIVE); + p--; + } + + // put saved info back + p = &st->P[1]; + p->R20.d[1] = (uint32_t)(r0); + p->R20.d[3] = (uint32_t)(r0 >> 32); + p->R21.d[1] = (uint32_t)(r1); + p->R21.d[3] = (uint32_t)(r1 >> 32); + p->R22.d[1] = (uint32_t)(r2); + p->R22.d[3] = (uint32_t)(r2 >> 32); + p->R23.d[1] = (uint32_t)(pad0); + p->R23.d[3] = (uint32_t)(pad0 >> 32); + p->R24.d[1] = (uint32_t)(pad1); + p->R24.d[3] = (uint32_t)(pad1 >> 32); + + // H = [Mx,My] + T5 = _mm_unpacklo_epi64(_mm_loadl_epi64((const xmmi *)(m + 0)), + _mm_loadl_epi64((const xmmi *)(m + 16))); + T6 = _mm_unpacklo_epi64(_mm_loadl_epi64((const xmmi *)(m + 8)), + _mm_loadl_epi64((const xmmi *)(m + 24))); + st->H[0] = _mm_and_si128(MMASK, T5); + st->H[1] = _mm_and_si128(MMASK, _mm_srli_epi64(T5, 26)); + T5 = _mm_or_si128(_mm_srli_epi64(T5, 52), _mm_slli_epi64(T6, 12)); + st->H[2] = _mm_and_si128(MMASK, T5); + st->H[3] = _mm_and_si128(MMASK, _mm_srli_epi64(T5, 26)); + st->H[4] = _mm_or_si128(_mm_srli_epi64(T6, 40), HIBIT); +} + +static void poly1305_blocks(poly1305_state_internal *st, const uint8_t *m, + size_t bytes) { + const xmmi MMASK = _mm_load_si128((const xmmi *)poly1305_x64_sse2_message_mask); + const xmmi FIVE = _mm_load_si128((const xmmi *)poly1305_x64_sse2_5); + const xmmi HIBIT = _mm_load_si128((const xmmi *)poly1305_x64_sse2_1shl128); + + poly1305_power *p; + xmmi H0, H1, H2, H3, H4; + xmmi T0, T1, T2, T3, T4, T5, T6; + xmmi M0, M1, M2, M3, M4; + xmmi C1, C2; + + H0 = st->H[0]; + H1 = st->H[1]; + H2 = st->H[2]; + H3 = st->H[3]; + H4 = st->H[4]; + + while (bytes >= 64) { + // H *= [r^4,r^4] + p = &st->P[0]; + T0 = _mm_mul_epu32(H0, p->R20.v); + T1 = _mm_mul_epu32(H0, p->R21.v); + T2 = _mm_mul_epu32(H0, p->R22.v); + T3 = _mm_mul_epu32(H0, p->R23.v); + T4 = _mm_mul_epu32(H0, p->R24.v); + T5 = _mm_mul_epu32(H1, p->S24.v); + T6 = _mm_mul_epu32(H1, p->R20.v); + T0 = _mm_add_epi64(T0, T5); + T1 = _mm_add_epi64(T1, T6); + T5 = _mm_mul_epu32(H2, p->S23.v); + T6 = _mm_mul_epu32(H2, p->S24.v); + T0 = _mm_add_epi64(T0, T5); + T1 = _mm_add_epi64(T1, T6); + T5 = _mm_mul_epu32(H3, p->S22.v); + T6 = _mm_mul_epu32(H3, p->S23.v); + T0 = _mm_add_epi64(T0, T5); + T1 = _mm_add_epi64(T1, T6); + T5 = _mm_mul_epu32(H4, p->S21.v); + T6 = _mm_mul_epu32(H4, p->S22.v); + T0 = _mm_add_epi64(T0, T5); + T1 = _mm_add_epi64(T1, T6); + T5 = _mm_mul_epu32(H1, p->R21.v); + T6 = _mm_mul_epu32(H1, p->R22.v); + T2 = _mm_add_epi64(T2, T5); + T3 = _mm_add_epi64(T3, T6); + T5 = _mm_mul_epu32(H2, p->R20.v); + T6 = _mm_mul_epu32(H2, p->R21.v); + T2 = _mm_add_epi64(T2, T5); + T3 = _mm_add_epi64(T3, T6); + T5 = _mm_mul_epu32(H3, p->S24.v); + T6 = _mm_mul_epu32(H3, p->R20.v); + T2 = _mm_add_epi64(T2, T5); + T3 = _mm_add_epi64(T3, T6); + T5 = _mm_mul_epu32(H4, p->S23.v); + T6 = _mm_mul_epu32(H4, p->S24.v); + T2 = _mm_add_epi64(T2, T5); + T3 = _mm_add_epi64(T3, T6); + T5 = _mm_mul_epu32(H1, p->R23.v); + T4 = _mm_add_epi64(T4, T5); + T5 = _mm_mul_epu32(H2, p->R22.v); + T4 = _mm_add_epi64(T4, T5); + T5 = _mm_mul_epu32(H3, p->R21.v); + T4 = _mm_add_epi64(T4, T5); + T5 = _mm_mul_epu32(H4, p->R20.v); + T4 = _mm_add_epi64(T4, T5); + + // H += [Mx,My]*[r^2,r^2] + T5 = _mm_unpacklo_epi64(_mm_loadl_epi64((const xmmi *)(m + 0)), + _mm_loadl_epi64((const xmmi *)(m + 16))); + T6 = _mm_unpacklo_epi64(_mm_loadl_epi64((const xmmi *)(m + 8)), + _mm_loadl_epi64((const xmmi *)(m + 24))); + M0 = _mm_and_si128(MMASK, T5); + M1 = _mm_and_si128(MMASK, _mm_srli_epi64(T5, 26)); + T5 = _mm_or_si128(_mm_srli_epi64(T5, 52), _mm_slli_epi64(T6, 12)); + M2 = _mm_and_si128(MMASK, T5); + M3 = _mm_and_si128(MMASK, _mm_srli_epi64(T5, 26)); + M4 = _mm_or_si128(_mm_srli_epi64(T6, 40), HIBIT); + + p = &st->P[1]; + T5 = _mm_mul_epu32(M0, p->R20.v); + T6 = _mm_mul_epu32(M0, p->R21.v); + T0 = _mm_add_epi64(T0, T5); + T1 = _mm_add_epi64(T1, T6); + T5 = _mm_mul_epu32(M1, p->S24.v); + T6 = _mm_mul_epu32(M1, p->R20.v); + T0 = _mm_add_epi64(T0, T5); + T1 = _mm_add_epi64(T1, T6); + T5 = _mm_mul_epu32(M2, p->S23.v); + T6 = _mm_mul_epu32(M2, p->S24.v); + T0 = _mm_add_epi64(T0, T5); + T1 = _mm_add_epi64(T1, T6); + T5 = _mm_mul_epu32(M3, p->S22.v); + T6 = _mm_mul_epu32(M3, p->S23.v); + T0 = _mm_add_epi64(T0, T5); + T1 = _mm_add_epi64(T1, T6); + T5 = _mm_mul_epu32(M4, p->S21.v); + T6 = _mm_mul_epu32(M4, p->S22.v); + T0 = _mm_add_epi64(T0, T5); + T1 = _mm_add_epi64(T1, T6); + T5 = _mm_mul_epu32(M0, p->R22.v); + T6 = _mm_mul_epu32(M0, p->R23.v); + T2 = _mm_add_epi64(T2, T5); + T3 = _mm_add_epi64(T3, T6); + T5 = _mm_mul_epu32(M1, p->R21.v); + T6 = _mm_mul_epu32(M1, p->R22.v); + T2 = _mm_add_epi64(T2, T5); + T3 = _mm_add_epi64(T3, T6); + T5 = _mm_mul_epu32(M2, p->R20.v); + T6 = _mm_mul_epu32(M2, p->R21.v); + T2 = _mm_add_epi64(T2, T5); + T3 = _mm_add_epi64(T3, T6); + T5 = _mm_mul_epu32(M3, p->S24.v); + T6 = _mm_mul_epu32(M3, p->R20.v); + T2 = _mm_add_epi64(T2, T5); + T3 = _mm_add_epi64(T3, T6); + T5 = _mm_mul_epu32(M4, p->S23.v); + T6 = _mm_mul_epu32(M4, p->S24.v); + T2 = _mm_add_epi64(T2, T5); + T3 = _mm_add_epi64(T3, T6); + T5 = _mm_mul_epu32(M0, p->R24.v); + T4 = _mm_add_epi64(T4, T5); + T5 = _mm_mul_epu32(M1, p->R23.v); + T4 = _mm_add_epi64(T4, T5); + T5 = _mm_mul_epu32(M2, p->R22.v); + T4 = _mm_add_epi64(T4, T5); + T5 = _mm_mul_epu32(M3, p->R21.v); + T4 = _mm_add_epi64(T4, T5); + T5 = _mm_mul_epu32(M4, p->R20.v); + T4 = _mm_add_epi64(T4, T5); + + // H += [Mx,My] + T5 = _mm_unpacklo_epi64(_mm_loadl_epi64((const xmmi *)(m + 32)), + _mm_loadl_epi64((const xmmi *)(m + 48))); + T6 = _mm_unpacklo_epi64(_mm_loadl_epi64((const xmmi *)(m + 40)), + _mm_loadl_epi64((const xmmi *)(m + 56))); + M0 = _mm_and_si128(MMASK, T5); + M1 = _mm_and_si128(MMASK, _mm_srli_epi64(T5, 26)); + T5 = _mm_or_si128(_mm_srli_epi64(T5, 52), _mm_slli_epi64(T6, 12)); + M2 = _mm_and_si128(MMASK, T5); + M3 = _mm_and_si128(MMASK, _mm_srli_epi64(T5, 26)); + M4 = _mm_or_si128(_mm_srli_epi64(T6, 40), HIBIT); + + T0 = _mm_add_epi64(T0, M0); + T1 = _mm_add_epi64(T1, M1); + T2 = _mm_add_epi64(T2, M2); + T3 = _mm_add_epi64(T3, M3); + T4 = _mm_add_epi64(T4, M4); + + // reduce + C1 = _mm_srli_epi64(T0, 26); + C2 = _mm_srli_epi64(T3, 26); + T0 = _mm_and_si128(T0, MMASK); + T3 = _mm_and_si128(T3, MMASK); + T1 = _mm_add_epi64(T1, C1); + T4 = _mm_add_epi64(T4, C2); + C1 = _mm_srli_epi64(T1, 26); + C2 = _mm_srli_epi64(T4, 26); + T1 = _mm_and_si128(T1, MMASK); + T4 = _mm_and_si128(T4, MMASK); + T2 = _mm_add_epi64(T2, C1); + T0 = _mm_add_epi64(T0, _mm_mul_epu32(C2, FIVE)); + C1 = _mm_srli_epi64(T2, 26); + C2 = _mm_srli_epi64(T0, 26); + T2 = _mm_and_si128(T2, MMASK); + T0 = _mm_and_si128(T0, MMASK); + T3 = _mm_add_epi64(T3, C1); + T1 = _mm_add_epi64(T1, C2); + C1 = _mm_srli_epi64(T3, 26); + T3 = _mm_and_si128(T3, MMASK); + T4 = _mm_add_epi64(T4, C1); + + // H = (H*[r^4,r^4] + [Mx,My]*[r^2,r^2] + [Mx,My]) + H0 = T0; + H1 = T1; + H2 = T2; + H3 = T3; + H4 = T4; + + m += 64; + bytes -= 64; + } + + st->H[0] = H0; + st->H[1] = H1; + st->H[2] = H2; + st->H[3] = H3; + st->H[4] = H4; +} + +static size_t poly1305_combine(poly1305_state_internal *st, const uint8_t *m, + size_t bytes) { + const xmmi MMASK = _mm_load_si128((const xmmi *)poly1305_x64_sse2_message_mask); + const xmmi HIBIT = _mm_load_si128((const xmmi *)poly1305_x64_sse2_1shl128); + const xmmi FIVE = _mm_load_si128((const xmmi *)poly1305_x64_sse2_5); + + poly1305_power *p; + xmmi H0, H1, H2, H3, H4; + xmmi M0, M1, M2, M3, M4; + xmmi T0, T1, T2, T3, T4, T5, T6; + xmmi C1, C2; + + uint64_t r0, r1, r2; + uint64_t t0, t1, t2, t3, t4; + uint64_t c; + size_t consumed = 0; + + H0 = st->H[0]; + H1 = st->H[1]; + H2 = st->H[2]; + H3 = st->H[3]; + H4 = st->H[4]; + + // p = [r^2,r^2] + p = &st->P[1]; + + if (bytes >= 32) { + // H *= [r^2,r^2] + T0 = _mm_mul_epu32(H0, p->R20.v); + T1 = _mm_mul_epu32(H0, p->R21.v); + T2 = _mm_mul_epu32(H0, p->R22.v); + T3 = _mm_mul_epu32(H0, p->R23.v); + T4 = _mm_mul_epu32(H0, p->R24.v); + T5 = _mm_mul_epu32(H1, p->S24.v); + T6 = _mm_mul_epu32(H1, p->R20.v); + T0 = _mm_add_epi64(T0, T5); + T1 = _mm_add_epi64(T1, T6); + T5 = _mm_mul_epu32(H2, p->S23.v); + T6 = _mm_mul_epu32(H2, p->S24.v); + T0 = _mm_add_epi64(T0, T5); + T1 = _mm_add_epi64(T1, T6); + T5 = _mm_mul_epu32(H3, p->S22.v); + T6 = _mm_mul_epu32(H3, p->S23.v); + T0 = _mm_add_epi64(T0, T5); + T1 = _mm_add_epi64(T1, T6); + T5 = _mm_mul_epu32(H4, p->S21.v); + T6 = _mm_mul_epu32(H4, p->S22.v); + T0 = _mm_add_epi64(T0, T5); + T1 = _mm_add_epi64(T1, T6); + T5 = _mm_mul_epu32(H1, p->R21.v); + T6 = _mm_mul_epu32(H1, p->R22.v); + T2 = _mm_add_epi64(T2, T5); + T3 = _mm_add_epi64(T3, T6); + T5 = _mm_mul_epu32(H2, p->R20.v); + T6 = _mm_mul_epu32(H2, p->R21.v); + T2 = _mm_add_epi64(T2, T5); + T3 = _mm_add_epi64(T3, T6); + T5 = _mm_mul_epu32(H3, p->S24.v); + T6 = _mm_mul_epu32(H3, p->R20.v); + T2 = _mm_add_epi64(T2, T5); + T3 = _mm_add_epi64(T3, T6); + T5 = _mm_mul_epu32(H4, p->S23.v); + T6 = _mm_mul_epu32(H4, p->S24.v); + T2 = _mm_add_epi64(T2, T5); + T3 = _mm_add_epi64(T3, T6); + T5 = _mm_mul_epu32(H1, p->R23.v); + T4 = _mm_add_epi64(T4, T5); + T5 = _mm_mul_epu32(H2, p->R22.v); + T4 = _mm_add_epi64(T4, T5); + T5 = _mm_mul_epu32(H3, p->R21.v); + T4 = _mm_add_epi64(T4, T5); + T5 = _mm_mul_epu32(H4, p->R20.v); + T4 = _mm_add_epi64(T4, T5); + + // H += [Mx,My] + T5 = _mm_unpacklo_epi64(_mm_loadl_epi64((const xmmi *)(m + 0)), + _mm_loadl_epi64((const xmmi *)(m + 16))); + T6 = _mm_unpacklo_epi64(_mm_loadl_epi64((const xmmi *)(m + 8)), + _mm_loadl_epi64((const xmmi *)(m + 24))); + M0 = _mm_and_si128(MMASK, T5); + M1 = _mm_and_si128(MMASK, _mm_srli_epi64(T5, 26)); + T5 = _mm_or_si128(_mm_srli_epi64(T5, 52), _mm_slli_epi64(T6, 12)); + M2 = _mm_and_si128(MMASK, T5); + M3 = _mm_and_si128(MMASK, _mm_srli_epi64(T5, 26)); + M4 = _mm_or_si128(_mm_srli_epi64(T6, 40), HIBIT); + + T0 = _mm_add_epi64(T0, M0); + T1 = _mm_add_epi64(T1, M1); + T2 = _mm_add_epi64(T2, M2); + T3 = _mm_add_epi64(T3, M3); + T4 = _mm_add_epi64(T4, M4); + + // reduce + C1 = _mm_srli_epi64(T0, 26); + C2 = _mm_srli_epi64(T3, 26); + T0 = _mm_and_si128(T0, MMASK); + T3 = _mm_and_si128(T3, MMASK); + T1 = _mm_add_epi64(T1, C1); + T4 = _mm_add_epi64(T4, C2); + C1 = _mm_srli_epi64(T1, 26); + C2 = _mm_srli_epi64(T4, 26); + T1 = _mm_and_si128(T1, MMASK); + T4 = _mm_and_si128(T4, MMASK); + T2 = _mm_add_epi64(T2, C1); + T0 = _mm_add_epi64(T0, _mm_mul_epu32(C2, FIVE)); + C1 = _mm_srli_epi64(T2, 26); + C2 = _mm_srli_epi64(T0, 26); + T2 = _mm_and_si128(T2, MMASK); + T0 = _mm_and_si128(T0, MMASK); + T3 = _mm_add_epi64(T3, C1); + T1 = _mm_add_epi64(T1, C2); + C1 = _mm_srli_epi64(T3, 26); + T3 = _mm_and_si128(T3, MMASK); + T4 = _mm_add_epi64(T4, C1); + + // H = (H*[r^2,r^2] + [Mx,My]) + H0 = T0; + H1 = T1; + H2 = T2; + H3 = T3; + H4 = T4; + + consumed = 32; + } + + // finalize, H *= [r^2,r] + r0 = ((uint64_t)p->R20.d[3] << 32) | (uint64_t)p->R20.d[1]; + r1 = ((uint64_t)p->R21.d[3] << 32) | (uint64_t)p->R21.d[1]; + r2 = ((uint64_t)p->R22.d[3] << 32) | (uint64_t)p->R22.d[1]; + + p->R20.d[2] = (uint32_t)(r0)&0x3ffffff; + p->R21.d[2] = (uint32_t)((r0 >> 26) | (r1 << 18)) & 0x3ffffff; + p->R22.d[2] = (uint32_t)((r1 >> 8)) & 0x3ffffff; + p->R23.d[2] = (uint32_t)((r1 >> 34) | (r2 << 10)) & 0x3ffffff; + p->R24.d[2] = (uint32_t)((r2 >> 16)); + p->S21.d[2] = p->R21.d[2] * 5; + p->S22.d[2] = p->R22.d[2] * 5; + p->S23.d[2] = p->R23.d[2] * 5; + p->S24.d[2] = p->R24.d[2] * 5; + + // H *= [r^2,r] + T0 = _mm_mul_epu32(H0, p->R20.v); + T1 = _mm_mul_epu32(H0, p->R21.v); + T2 = _mm_mul_epu32(H0, p->R22.v); + T3 = _mm_mul_epu32(H0, p->R23.v); + T4 = _mm_mul_epu32(H0, p->R24.v); + T5 = _mm_mul_epu32(H1, p->S24.v); + T6 = _mm_mul_epu32(H1, p->R20.v); + T0 = _mm_add_epi64(T0, T5); + T1 = _mm_add_epi64(T1, T6); + T5 = _mm_mul_epu32(H2, p->S23.v); + T6 = _mm_mul_epu32(H2, p->S24.v); + T0 = _mm_add_epi64(T0, T5); + T1 = _mm_add_epi64(T1, T6); + T5 = _mm_mul_epu32(H3, p->S22.v); + T6 = _mm_mul_epu32(H3, p->S23.v); + T0 = _mm_add_epi64(T0, T5); + T1 = _mm_add_epi64(T1, T6); + T5 = _mm_mul_epu32(H4, p->S21.v); + T6 = _mm_mul_epu32(H4, p->S22.v); + T0 = _mm_add_epi64(T0, T5); + T1 = _mm_add_epi64(T1, T6); + T5 = _mm_mul_epu32(H1, p->R21.v); + T6 = _mm_mul_epu32(H1, p->R22.v); + T2 = _mm_add_epi64(T2, T5); + T3 = _mm_add_epi64(T3, T6); + T5 = _mm_mul_epu32(H2, p->R20.v); + T6 = _mm_mul_epu32(H2, p->R21.v); + T2 = _mm_add_epi64(T2, T5); + T3 = _mm_add_epi64(T3, T6); + T5 = _mm_mul_epu32(H3, p->S24.v); + T6 = _mm_mul_epu32(H3, p->R20.v); + T2 = _mm_add_epi64(T2, T5); + T3 = _mm_add_epi64(T3, T6); + T5 = _mm_mul_epu32(H4, p->S23.v); + T6 = _mm_mul_epu32(H4, p->S24.v); + T2 = _mm_add_epi64(T2, T5); + T3 = _mm_add_epi64(T3, T6); + T5 = _mm_mul_epu32(H1, p->R23.v); + T4 = _mm_add_epi64(T4, T5); + T5 = _mm_mul_epu32(H2, p->R22.v); + T4 = _mm_add_epi64(T4, T5); + T5 = _mm_mul_epu32(H3, p->R21.v); + T4 = _mm_add_epi64(T4, T5); + T5 = _mm_mul_epu32(H4, p->R20.v); + T4 = _mm_add_epi64(T4, T5); + + C1 = _mm_srli_epi64(T0, 26); + C2 = _mm_srli_epi64(T3, 26); + T0 = _mm_and_si128(T0, MMASK); + T3 = _mm_and_si128(T3, MMASK); + T1 = _mm_add_epi64(T1, C1); + T4 = _mm_add_epi64(T4, C2); + C1 = _mm_srli_epi64(T1, 26); + C2 = _mm_srli_epi64(T4, 26); + T1 = _mm_and_si128(T1, MMASK); + T4 = _mm_and_si128(T4, MMASK); + T2 = _mm_add_epi64(T2, C1); + T0 = _mm_add_epi64(T0, _mm_mul_epu32(C2, FIVE)); + C1 = _mm_srli_epi64(T2, 26); + C2 = _mm_srli_epi64(T0, 26); + T2 = _mm_and_si128(T2, MMASK); + T0 = _mm_and_si128(T0, MMASK); + T3 = _mm_add_epi64(T3, C1); + T1 = _mm_add_epi64(T1, C2); + C1 = _mm_srli_epi64(T3, 26); + T3 = _mm_and_si128(T3, MMASK); + T4 = _mm_add_epi64(T4, C1); + + // H = H[0]+H[1] + H0 = _mm_add_epi64(T0, _mm_srli_si128(T0, 8)); + H1 = _mm_add_epi64(T1, _mm_srli_si128(T1, 8)); + H2 = _mm_add_epi64(T2, _mm_srli_si128(T2, 8)); + H3 = _mm_add_epi64(T3, _mm_srli_si128(T3, 8)); + H4 = _mm_add_epi64(T4, _mm_srli_si128(T4, 8)); + + t0 = _mm_cvtsi128_si32(H0); + c = (t0 >> 26); + t0 &= 0x3ffffff; + t1 = _mm_cvtsi128_si32(H1) + c; + c = (t1 >> 26); + t1 &= 0x3ffffff; + t2 = _mm_cvtsi128_si32(H2) + c; + c = (t2 >> 26); + t2 &= 0x3ffffff; + t3 = _mm_cvtsi128_si32(H3) + c; + c = (t3 >> 26); + t3 &= 0x3ffffff; + t4 = _mm_cvtsi128_si32(H4) + c; + c = (t4 >> 26); + t4 &= 0x3ffffff; + t0 = t0 + (c * 5); + c = (t0 >> 26); + t0 &= 0x3ffffff; + t1 = t1 + c; + + st->HH[0] = ((t0) | (t1 << 26)) & UINT64_C(0xfffffffffff); + st->HH[1] = ((t1 >> 18) | (t2 << 8) | (t3 << 34)) & UINT64_C(0xfffffffffff); + st->HH[2] = ((t3 >> 10) | (t4 << 16)) & UINT64_C(0x3ffffffffff); + + return consumed; +} + +void GFp_poly1305_update(poly1305_state *state, const uint8_t *m, + size_t bytes) { + poly1305_state_internal *st = poly1305_aligned_state(state); + size_t want; + + // Work around a C language bug. See https://crbug.com/1019588. + if (bytes == 0) { + return; + } + + // need at least 32 initial bytes to start the accelerated branch + if (!st->started) { + if ((st->leftover == 0) && (bytes > 32)) { + poly1305_first_block(st, m); + m += 32; + bytes -= 32; + } else { + want = poly1305_min(32 - st->leftover, bytes); + GFp_memcpy(st->buffer + st->leftover, m, want); + bytes -= want; + m += want; + st->leftover += want; + if ((st->leftover < 32) || (bytes == 0)) { + return; + } + poly1305_first_block(st, st->buffer); + st->leftover = 0; + } + st->started = 1; + } + + // handle leftover + if (st->leftover) { + want = poly1305_min(64 - st->leftover, bytes); + GFp_memcpy(st->buffer + st->leftover, m, want); + bytes -= want; + m += want; + st->leftover += want; + if (st->leftover < 64) { + return; + } + poly1305_blocks(st, st->buffer, 64); + st->leftover = 0; + } + + // process 64 byte blocks + if (bytes >= 64) { + want = (bytes & ~63); + poly1305_blocks(st, m, want); + m += want; + bytes -= want; + } + + if (bytes) { + GFp_memcpy(st->buffer + st->leftover, m, bytes); + st->leftover += bytes; + } +} + +void GFp_poly1305_finish(poly1305_state *state, uint8_t mac[16]) { + poly1305_state_internal *st = poly1305_aligned_state(state); + size_t leftover = st->leftover; + uint8_t *m = st->buffer; + uint128_t d[3]; + uint64_t h0, h1, h2; + uint64_t t0, t1; + uint64_t g0, g1, g2, c, nc; + uint64_t r0, r1, r2, s1, s2; + poly1305_power *p; + + if (st->started) { + size_t consumed = poly1305_combine(st, m, leftover); + leftover -= consumed; + m += consumed; + } + + // st->HH will either be 0 or have the combined result + h0 = st->HH[0]; + h1 = st->HH[1]; + h2 = st->HH[2]; + + p = &st->P[1]; + r0 = ((uint64_t)p->R20.d[3] << 32) | (uint64_t)p->R20.d[1]; + r1 = ((uint64_t)p->R21.d[3] << 32) | (uint64_t)p->R21.d[1]; + r2 = ((uint64_t)p->R22.d[3] << 32) | (uint64_t)p->R22.d[1]; + s1 = r1 * (5 << 2); + s2 = r2 * (5 << 2); + + if (leftover < 16) { + goto poly1305_donna_atmost15bytes; + } + +poly1305_donna_atleast16bytes: + t0 = load_u64_le(m + 0); + t1 = load_u64_le(m + 8); + h0 += t0 & 0xfffffffffff; + t0 = shr128_pair(t1, t0, 44); + h1 += t0 & 0xfffffffffff; + h2 += (t1 >> 24) | ((uint64_t)1 << 40); + +poly1305_donna_mul: + d[0] = add128(add128(mul64x64_128(h0, r0), mul64x64_128(h1, s2)), + mul64x64_128(h2, s1)); + d[1] = add128(add128(mul64x64_128(h0, r1), mul64x64_128(h1, r0)), + mul64x64_128(h2, s2)); + d[2] = add128(add128(mul64x64_128(h0, r2), mul64x64_128(h1, r1)), + mul64x64_128(h2, r0)); + h0 = lo128(d[0]) & 0xfffffffffff; + c = shr128(d[0], 44); + d[1] = add128_64(d[1], c); + h1 = lo128(d[1]) & 0xfffffffffff; + c = shr128(d[1], 44); + d[2] = add128_64(d[2], c); + h2 = lo128(d[2]) & 0x3ffffffffff; + c = shr128(d[2], 42); + h0 += c * 5; + + m += 16; + leftover -= 16; + if (leftover >= 16) { + goto poly1305_donna_atleast16bytes; + } + +// final bytes +poly1305_donna_atmost15bytes: + if (!leftover) { + goto poly1305_donna_finish; + } + + m[leftover++] = 1; + GFp_memset(m + leftover, 0, 16 - leftover); + leftover = 16; + + t0 = load_u64_le(m + 0); + t1 = load_u64_le(m + 8); + h0 += t0 & 0xfffffffffff; + t0 = shr128_pair(t1, t0, 44); + h1 += t0 & 0xfffffffffff; + h2 += (t1 >> 24); + + goto poly1305_donna_mul; + +poly1305_donna_finish: + c = (h0 >> 44); + h0 &= 0xfffffffffff; + h1 += c; + c = (h1 >> 44); + h1 &= 0xfffffffffff; + h2 += c; + c = (h2 >> 42); + h2 &= 0x3ffffffffff; + h0 += c * 5; + + g0 = h0 + 5; + c = (g0 >> 44); + g0 &= 0xfffffffffff; + g1 = h1 + c; + c = (g1 >> 44); + g1 &= 0xfffffffffff; + g2 = h2 + c - ((uint64_t)1 << 42); + + c = (g2 >> 63) - 1; + nc = ~c; + h0 = (h0 & nc) | (g0 & c); + h1 = (h1 & nc) | (g1 & c); + h2 = (h2 & nc) | (g2 & c); + + // pad + t0 = ((uint64_t)p->R23.d[3] << 32) | (uint64_t)p->R23.d[1]; + t1 = ((uint64_t)p->R24.d[3] << 32) | (uint64_t)p->R24.d[1]; + h0 += (t0 & 0xfffffffffff); + c = (h0 >> 44); + h0 &= 0xfffffffffff; + t0 = shr128_pair(t1, t0, 44); + h1 += (t0 & 0xfffffffffff) + c; + c = (h1 >> 44); + h1 &= 0xfffffffffff; + t1 = (t1 >> 24); + h2 += (t1)+c; + + store_u64_le(mac + 0, ((h0) | (h1 << 44))); + store_u64_le(mac + 8, ((h1 >> 20) | (h2 << 24))); +} + +#endif // BORINGSSL_HAS_UINT128 && OPENSSL_X86_64 diff --git a/vendor/ring/deny.toml b/vendor/ring/deny.toml new file mode 100644 index 00000000..dcfb0343 --- /dev/null +++ b/vendor/ring/deny.toml @@ -0,0 +1,30 @@ +[advisories] +unmaintained = "deny" +yanked = "deny" +notice = "deny" + +[licenses] +allow = [ + "Apache-2.0", + "ISC", + "LicenseRef-ring", + "MIT", +] +confidence-threshold = 1.0 + +[[licenses.clarify]] +name = "ring" +expression = "LicenseRef-ring" +license-files = [ + { path = "LICENSE", hash = 0xbd0eed23 }, +] + +[bans] +# We don't maintain a fixed Cargo.lock so enforcing +# `multiple-versions = "deny"` is impractical. +multiple-versions = "allow" +wildcards = "deny" + +[sources] +unknown-registry = "deny" +unknown-git = "deny" diff --git a/vendor/ring/doc/ecdh.pdf b/vendor/ring/doc/ecdh.pdf new file mode 100644 index 00000000..5349dad5 Binary files /dev/null and b/vendor/ring/doc/ecdh.pdf differ diff --git a/vendor/ring/doc/ecdsa.pdf b/vendor/ring/doc/ecdsa.pdf new file mode 100644 index 00000000..ee0b1e1c Binary files /dev/null and b/vendor/ring/doc/ecdsa.pdf differ diff --git a/vendor/ring/doc/link-to-readme.md b/vendor/ring/doc/link-to-readme.md new file mode 100644 index 00000000..8c846359 --- /dev/null +++ b/vendor/ring/doc/link-to-readme.md @@ -0,0 +1 @@ +See https://github.com/briansmith/ring. diff --git a/vendor/ring/include/GFp/aes.h b/vendor/ring/include/GFp/aes.h new file mode 100644 index 00000000..d554ae77 --- /dev/null +++ b/vendor/ring/include/GFp/aes.h @@ -0,0 +1,68 @@ +/* ==================================================================== + * Copyright (c) 2002-2006 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== */ + +#ifndef OPENSSL_HEADER_AES_H +#define OPENSSL_HEADER_AES_H + +#include + +// Raw AES functions. + + +// AES_MAXNR is the maximum number of AES rounds. +#define AES_MAXNR 14 + +// aes_key_st should be an opaque type, but EVP requires that the size be +// known. +struct aes_key_st { + uint32_t rd_key[4 * (AES_MAXNR + 1)]; + unsigned rounds; +}; +typedef struct aes_key_st AES_KEY; + +#endif // OPENSSL_HEADER_AES_H diff --git a/vendor/ring/include/GFp/arm_arch.h b/vendor/ring/include/GFp/arm_arch.h new file mode 100644 index 00000000..2e64aa9e --- /dev/null +++ b/vendor/ring/include/GFp/arm_arch.h @@ -0,0 +1,177 @@ +/* ==================================================================== + * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). */ + +#ifndef OPENSSL_HEADER_ARM_ARCH_H +#define OPENSSL_HEADER_ARM_ARCH_H + +#if !defined(__ARM_ARCH__) +# if defined(__CC_ARM) +# define __ARM_ARCH__ __TARGET_ARCH_ARM +# if defined(__BIG_ENDIAN) +# define __ARMEB__ +# else +# define __ARMEL__ +# endif +# elif defined(__GNUC__) +# if defined(__aarch64__) +# define __ARM_ARCH__ 8 +# if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ +# define __ARMEB__ +# else +# define __ARMEL__ +# endif + // Why doesn't gcc define __ARM_ARCH__? Instead it defines + // bunch of below macros. See all_architectires[] table in + // gcc/config/arm/arm.c. On a side note it defines + // __ARMEL__/__ARMEB__ for little-/big-endian. +# elif defined(__ARM_ARCH) +# define __ARM_ARCH__ __ARM_ARCH +# elif defined(__ARM_ARCH_8A__) +# define __ARM_ARCH__ 8 +# elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || \ + defined(__ARM_ARCH_7R__)|| defined(__ARM_ARCH_7M__) || \ + defined(__ARM_ARCH_7EM__) +# define __ARM_ARCH__ 7 +# elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || \ + defined(__ARM_ARCH_6K__)|| defined(__ARM_ARCH_6M__) || \ + defined(__ARM_ARCH_6Z__)|| defined(__ARM_ARCH_6ZK__) || \ + defined(__ARM_ARCH_6T2__) +# define __ARM_ARCH__ 6 +# elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || \ + defined(__ARM_ARCH_5E__)|| defined(__ARM_ARCH_5TE__) || \ + defined(__ARM_ARCH_5TEJ__) +# define __ARM_ARCH__ 5 +# elif defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) +# define __ARM_ARCH__ 4 +# else +# error "unsupported ARM architecture" +# endif +# endif +#endif + +// Even when building for 32-bit ARM, support for aarch64 crypto instructions +// will be included. +#if !defined(__ARM_MAX_ARCH__) +#define __ARM_MAX_ARCH__ 8 +#endif + +// ARMV7_NEON is true when a NEON unit is present in the current CPU. +#define ARMV7_NEON (1 << 0) + +// ARMV8_SHA256 indicates support for hardware SHA-256 instructions. +#define ARMV8_SHA256 (1 << 4) + +#if defined(__ASSEMBLER__) + +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wundef" +#endif + +// Support macros for +// - Armv8.3-A Pointer Authentication and +// - Armv8.5-A Branch Target Identification +// features which require emitting a .note.gnu.property section with the +// appropriate architecture-dependent feature bits set. +// Read more: "ELF for the Arm® 64-bit Architecture" + +#if defined(__ARM_FEATURE_BTI_DEFAULT) && __ARM_FEATURE_BTI_DEFAULT == 1 +#define GNU_PROPERTY_AARCH64_BTI (1 << 0) // Has Branch Target Identification +#define AARCH64_VALID_CALL_TARGET hint #34 // BTI 'c' +#else +#define GNU_PROPERTY_AARCH64_BTI 0 // No Branch Target Identification +#define AARCH64_VALID_CALL_TARGET +#endif + +#if defined(__ARM_FEATURE_PAC_DEFAULT) && \ + (__ARM_FEATURE_PAC_DEFAULT & 1) == 1 // Signed with A-key +#define GNU_PROPERTY_AARCH64_POINTER_AUTH \ + (1 << 1) // Has Pointer Authentication +#define AARCH64_SIGN_LINK_REGISTER hint #25 // PACIASP +#define AARCH64_VALIDATE_LINK_REGISTER hint #29 // AUTIASP +#elif defined(__ARM_FEATURE_PAC_DEFAULT) && \ + (__ARM_FEATURE_PAC_DEFAULT & 2) == 2 // Signed with B-key +#define GNU_PROPERTY_AARCH64_POINTER_AUTH \ + (1 << 1) // Has Pointer Authentication +#define AARCH64_SIGN_LINK_REGISTER hint #27 // PACIBSP +#define AARCH64_VALIDATE_LINK_REGISTER hint #31 // AUTIBSP +#else +#define GNU_PROPERTY_AARCH64_POINTER_AUTH 0 // No Pointer Authentication +#if GNU_PROPERTY_AARCH64_BTI != 0 +#define AARCH64_SIGN_LINK_REGISTER AARCH64_VALID_CALL_TARGET +#else +#define AARCH64_SIGN_LINK_REGISTER +#endif +#define AARCH64_VALIDATE_LINK_REGISTER +#endif + +#if GNU_PROPERTY_AARCH64_POINTER_AUTH != 0 || GNU_PROPERTY_AARCH64_BTI != 0 +.pushsection .note.gnu.property, "a"; +.balign 8; +.long 4; +.long 0x10; +.long 0x5; +.asciz "GNU"; +.long 0xc0000000; /* GNU_PROPERTY_AARCH64_FEATURE_1_AND */ +.long 4; +.long (GNU_PROPERTY_AARCH64_POINTER_AUTH | GNU_PROPERTY_AARCH64_BTI); +.long 0; +.popsection; +#endif + +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif + +#endif /* defined __ASSEMBLER__ */ + +#endif // OPENSSL_HEADER_ARM_ARCH_H diff --git a/vendor/ring/include/GFp/base.h b/vendor/ring/include/GFp/base.h new file mode 100644 index 00000000..e18ee44e --- /dev/null +++ b/vendor/ring/include/GFp/base.h @@ -0,0 +1,121 @@ +/* ==================================================================== + * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). */ + +#ifndef OPENSSL_HEADER_BASE_H +#define OPENSSL_HEADER_BASE_H + + +// This file should be the first included by all BoringSSL headers. + +#include + +#if defined(_MSC_VER) && !defined(__clang__) +#pragma warning(push, 3) +#endif + +#include +#include + +#if defined(_MSC_VER) && !defined(__clang__) +#pragma warning(pop) +#endif + +#if defined(__x86_64) || defined(_M_AMD64) || defined(_M_X64) +#define OPENSSL_64_BIT +#define OPENSSL_X86_64 +#elif defined(__x86) || defined(__i386) || defined(__i386__) || defined(_M_IX86) +#define OPENSSL_32_BIT +#define OPENSSL_X86 +#elif defined(__AARCH64EL__) || defined(_M_ARM64) +#define OPENSSL_64_BIT +#define OPENSSL_AARCH64 +#elif defined(__ARMEL__) || defined(_M_ARM) +#define OPENSSL_32_BIT +#define OPENSSL_ARM +#elif defined(__MIPSEL__) && !defined(__LP64__) +#define OPENSSL_32_BIT +#define OPENSSL_MIPS +#elif defined(__MIPSEL__) && defined(__LP64__) +#define OPENSSL_64_BIT +#define OPENSSL_MIPS64 +#elif defined(__wasm__) +#define OPENSSL_32_BIT +#else +// Note BoringSSL only supports standard 32-bit and 64-bit two's-complement, +// little-endian architectures. Functions will not produce the correct answer +// on other systems. Run the crypto_test binary, notably +// crypto/compiler_test.cc, before adding a new architecture. +#error "Unknown target CPU" +#endif + +#if defined(__APPLE__) +#define OPENSSL_APPLE +#endif + +#if defined(_WIN32) +#define OPENSSL_WINDOWS +#endif + +// *ring* doesn't support the `BORINGSSL_SHARED_LIBRARY` configuration, so +// the default (usually "hidden") visibility is always used, even for exported +// items. +#define OPENSSL_EXPORT + +// `ring::c` would need to be customized on any platform where these assertions +// fail. Keep in sync with `ring::c`. +OPENSSL_STATIC_ASSERT(sizeof(int32_t) == sizeof(int), "int isn't 32 bits."); +OPENSSL_STATIC_ASSERT(sizeof(uint32_t) == sizeof(unsigned int), "unsigned int isn't 32 bits."); +OPENSSL_STATIC_ASSERT(sizeof(size_t) == sizeof(uintptr_t), "uintptr_t and size_t differ."); +OPENSSL_STATIC_ASSERT(sizeof(size_t) <= sizeof(uint64_t), "size_t is larger than uint64_t."); +OPENSSL_STATIC_ASSERT(sizeof(size_t) >= sizeof(uint32_t), "size_t is smaller than uint32_t."); + +#endif // OPENSSL_HEADER_BASE_H diff --git a/vendor/ring/include/GFp/check.h b/vendor/ring/include/GFp/check.h new file mode 100644 index 00000000..4bd257ca --- /dev/null +++ b/vendor/ring/include/GFp/check.h @@ -0,0 +1,52 @@ +// Copyright 2020 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +#ifndef RING_CHECK_H +#define RING_CHECK_H + +// |debug_assert_nonsecret| is like |assert| and should be used (only) when the +// assertion does not have any potential to leak a secret. |NDEBUG| controls this +// exactly like |assert|. It is emulated when there is no assert.h to make +// cross-building easier. +// +// When reviewing uses of |debug_assert_nonsecret|, verify that the check +// really does not have potential to leak a secret. + +#if !defined(GFp_NOSTDLIBINC) +# include +# define debug_assert_nonsecret(x) assert(x) +#else +# if !defined(NDEBUG) +# define debug_assert_nonsecret(x) ((x) ? ((void)0) : __builtin_trap()) +# else +# define debug_assert_nonsecret(x) ((void)0) +# endif +#endif + +// |dev_assert_secret| is like |assert| and should be used (only) when the +// assertion operates on secret data in a way that has the potential to leak +// the secret. |dev_assert_secret| can only be enabled by changing the |#if 0| +// here to |#if 1| (or equivalent) when |NDEBUG| is not defined. This is not +// controlled only through |NDEBUG| so that such checks do not leak into debug +// builds that may make it into production use. +// +// When reviewing uses of |dev_assert_secret|, verify that the check really +// does have the potential to leak a secret. +#if 0 // DO NOT COMMIT CHANGES TO THIS LINE. +# define dev_assert_secret debug_assert_nonsecret +#else +# define dev_assert_secret(x) ((void)0) +#endif + +#endif // RING_CHECK_H diff --git a/vendor/ring/include/GFp/cpu.h b/vendor/ring/include/GFp/cpu.h new file mode 100644 index 00000000..462018af --- /dev/null +++ b/vendor/ring/include/GFp/cpu.h @@ -0,0 +1,92 @@ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). */ + +#ifndef OPENSSL_HEADER_CPU_H +#define OPENSSL_HEADER_CPU_H + +#include + +// Runtime CPU feature support + + +#if defined(OPENSSL_X86) || defined(OPENSSL_X86_64) +// GFp_ia32cap_P contains the Intel CPUID bits when running on an x86 or +// x86-64 system. +// +// Index 0: +// EDX for CPUID where EAX = 1 +// Bit 20 is always zero +// Bit 28 is adjusted to reflect whether the data cache is shared between +// multiple logical cores +// Bit 30 is used to indicate an Intel CPU +// Index 1: +// ECX for CPUID where EAX = 1 +// Bit 11 is used to indicate AMD XOP support, not SDBG +// Index 2: +// EBX for CPUID where EAX = 7 +// Index 3: +// ECX for CPUID where EAX = 7 +// +// Note: the CPUID bits are pre-adjusted for the OSXSAVE bit and the YMM and XMM +// bits in XCR0, so it is not necessary to check those. +extern uint32_t GFp_ia32cap_P[4]; +#endif + +#endif // OPENSSL_HEADER_CPU_H diff --git a/vendor/ring/include/GFp/mem.h b/vendor/ring/include/GFp/mem.h new file mode 100644 index 00000000..eaa3c0dd --- /dev/null +++ b/vendor/ring/include/GFp/mem.h @@ -0,0 +1,69 @@ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] */ + +#ifndef OPENSSL_HEADER_MEM_H +#define OPENSSL_HEADER_MEM_H + +#include + +// GFp_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. It +// takes an amount of time dependent on |len|, but independent of the contents +// of |a| and |b|. Unlike memcmp, it cannot be used to put elements into a +// defined order as the return value when a != b is undefined, other than to be +// non-zero. +OPENSSL_EXPORT int GFp_memcmp(const uint8_t *a, const uint8_t *b, size_t len); + +#endif // OPENSSL_HEADER_MEM_H diff --git a/vendor/ring/include/GFp/poly1305.h b/vendor/ring/include/GFp/poly1305.h new file mode 100644 index 00000000..53c4036c --- /dev/null +++ b/vendor/ring/include/GFp/poly1305.h @@ -0,0 +1,23 @@ +/* Copyright (c) 2014, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +#ifndef OPENSSL_HEADER_POLY1305_H +#define OPENSSL_HEADER_POLY1305_H + +#include + +// Keep in sync with `poly1305_state` in poly1305.rs. +typedef uint8_t poly1305_state[512]; + +#endif // OPENSSL_HEADER_POLY1305_H diff --git a/vendor/ring/include/GFp/type_check.h b/vendor/ring/include/GFp/type_check.h new file mode 100644 index 00000000..0cca158e --- /dev/null +++ b/vendor/ring/include/GFp/type_check.h @@ -0,0 +1,75 @@ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] */ + +#ifndef OPENSSL_HEADER_TYPE_CHECK_H +#define OPENSSL_HEADER_TYPE_CHECK_H + +#include + + +#if defined(__cplusplus) || (defined(_MSC_VER) && !defined(__clang__)) +// In C++ and non-clang MSVC, |static_assert| is a keyword. +#define OPENSSL_STATIC_ASSERT(cond, msg) static_assert(cond, msg) +#else +// C11 defines the |_Static_assert| keyword and the |static_assert| macro in +// assert.h. While the former is available at all versions in Clang and GCC, the +// later depends on libc and, in glibc, depends on being built in C11 mode. We +// do not require this, for now, so use |_Static_assert| directly. +#define OPENSSL_STATIC_ASSERT(cond, msg) _Static_assert(cond, msg) +#endif + + +#endif // OPENSSL_HEADER_TYPE_CHECK_H diff --git a/vendor/ring/mk/cargo.sh b/vendor/ring/mk/cargo.sh new file mode 100755 index 00000000..f9fe5381 --- /dev/null +++ b/vendor/ring/mk/cargo.sh @@ -0,0 +1,154 @@ +#!/usr/bin/env bash +# +# Copyright 2020 Brian Smith. +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +set -eux -o pipefail +IFS=$'\n\t' + +rustflags_self_contained="-Clink-self-contained=yes -Clinker=rust-lld" +qemu_aarch64="qemu-aarch64 -L /usr/aarch64-linux-gnu" +qemu_arm="qemu-arm -L /usr/arm-linux-gnueabihf" + +# Avoid putting the Android tools in `$PATH` because there are tools in this +# directory like `clang` that would conflict with the same-named tools that may +# be needed to compile the build script, or to compile for other targets. +if [ -n "${ANDROID_SDK_ROOT-}" ]; then + android_tools=$ANDROID_SDK_ROOT/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin +fi + +for arg in $*; do + case $arg in + --target=*) + target=${arg#*=} + ;; + *) + ;; + esac +done + +# See comments in install-build-tools.sh. +llvm_version=10 +if [ -n "${RING_COVERAGE-}" ]; then + llvm_version=11 +fi + +case $target in + aarch64-linux-android) + export CC_aarch64_linux_android=$android_tools/aarch64-linux-android21-clang + export AR_aarch64_linux_android=$android_tools/aarch64-linux-android-ar + export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=$android_tools/aarch64-linux-android21-clang + ;; + aarch64-unknown-linux-gnu) + export CC_aarch64_unknown_linux_gnu=clang-$llvm_version + export AR_aarch64_unknown_linux_gnu=llvm-ar-$llvm_version + export CFLAGS_aarch64_unknown_linux_gnu="--sysroot=/usr/aarch64-linux-gnu" + export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc + export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER="$qemu_aarch64" + ;; + aarch64-unknown-linux-musl) + export CC_aarch64_unknown_linux_musl=clang-$llvm_version + export AR_aarch64_unknown_linux_musl=llvm-ar-$llvm_version + export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="$rustflags_self_contained" + export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUNNER="$qemu_aarch64" + ;; + arm-unknown-linux-gnueabihf) + export CC_arm_unknown_linux_gnueabihf=arm-linux-gnueabihf-gcc + export AR_arm_unknown_linux_gnueabihf=arm-linux-gnueabihf-gcc-ar + export CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc + export CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_RUNNER="$qemu_arm" + ;; + armv7-linux-androideabi) + export CC_armv7_linux_androideabi=$android_tools/armv7a-linux-androideabi18-clang + export AR_armv7_linux_androideabi=$android_tools/arm-linux-androideabi-ar + export CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER=$android_tools/armv7a-linux-androideabi18-clang + ;; + armv7-unknown-linux-musleabihf) + export CC_armv7_unknown_linux_musleabihf=clang-$llvm_version + export AR_armv7_unknown_linux_musleabihf=llvm-ar-$llvm_version + export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_RUSTFLAGS="$rustflags_self_contained" + export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_RUNNER="$qemu_arm" + ;; + i686-unknown-linux-gnu) + export CC_i686_unknown_linux_gnu=clang-$llvm_version + export AR_i686_unknown_linux_gnu=llvm-ar-$llvm_version + export CARGO_TARGET_I686_UNKNOWN_LINUX_GNU_LINKER=clang-$llvm_version + ;; + i686-unknown-linux-musl) + export CC_i686_unknown_linux_musl=clang-$llvm_version + export AR_i686_unknown_linux_musl=llvm-ar-$llvm_version + export CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_RUSTFLAGS="$rustflags_self_contained" + ;; + x86_64-unknown-linux-musl) + export CC_x86_64_unknown_linux_musl=clang-$llvm_version + export AR_x86_64_unknown_linux_musl=llvm-ar-$llvm_version + # XXX: Work around https://github.com/rust-lang/rust/issues/79555. + if [ -n "${RING_COVERAGE-}" ]; then + export CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=clang-$llvm_version + else + export CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="$rustflags_self_contained" + fi + ;; + wasm32-unknown-unknown) + # The first two are only needed for when the "wasm_c" feature is enabled. + export CC_wasm32_unknown_unknown=clang-$llvm_version + export AR_wasm32_unknown_unknown=llvm-ar-$llvm_version + export CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_RUNNER=wasm-bindgen-test-runner + export WASM_BINDGEN_TEST_TIMEOUT=60 + ;; + *) + ;; +esac + +if [ -n "${RING_COVERAGE-}" ]; then + # XXX: Collides between release and debug. + coverage_dir=$PWD/target/$target/debug/coverage + mkdir -p "$coverage_dir" + rm -f "$coverage_dir/*.profraw" + + export RING_BUILD_EXECUTABLE_LIST="$coverage_dir/executables" + truncate --size=0 "$RING_BUILD_EXECUTABLE_LIST" + + # This doesn't work when profiling under QEMU. Instead mk/runner does + # something similar but different. + # export LLVM_PROFILE_FILE="$coverage_dir/%m.profraw" + + # ${target} with hyphens replaced by underscores, lowercase and uppercase. + target_lower=${target//-/_} + target_upper=${target_lower^^} + + cflags_var=CFLAGS_${target_lower} + declare -x "${cflags_var}=-fprofile-instr-generate -fcoverage-mapping ${!cflags_var-}" + + runner_var=CARGO_TARGET_${target_upper}_RUNNER + declare -x "${runner_var}=mk/runner ${!runner_var-}" + + rustflags_var=CARGO_TARGET_${target_upper}_RUSTFLAGS + declare -x "${rustflags_var}=-Zinstrument-coverage ${!rustflags_var-}" +fi + +cargo "$@" + +if [ -n "${RING_COVERAGE-}" ]; then + while read executable; do + basename=$(basename "$executable") + llvm-profdata-$llvm_version merge -sparse ""$coverage_dir"/$basename.profraw" -o "$coverage_dir"/$basename.profdata + mkdir -p "$coverage_dir"/reports + llvm-cov-$llvm_version export \ + --instr-profile "$coverage_dir"/$basename.profdata \ + --format lcov \ + "$executable" \ + > "$coverage_dir"/reports/coverage-$basename.txt + done < "$RING_BUILD_EXECUTABLE_LIST" +fi diff --git a/vendor/ring/mk/install-build-tools.ps1 b/vendor/ring/mk/install-build-tools.ps1 new file mode 100644 index 00000000..f1d51b98 --- /dev/null +++ b/vendor/ring/mk/install-build-tools.ps1 @@ -0,0 +1,67 @@ +function Verify-Or-Delete-File { + param ( + [Parameter(Mandatory)] + [string]$File, + [Parameter(Mandatory)] + [string]$ExpectedDigest + ) + $ActualDigest = ( Get-FileHash -Algorithm SHA256 $File ).Hash + if ( $ActualDigest -eq $ExpectedDigest ) + { + return + } + rm $File + echo "Digest verification failed for $Url; actual $ActualDigest, expected $ExpectedDigest" + exit 1 +} + +function Download-Zip-and-Extract-File { + param ( + [Parameter(Mandatory)] + [string]$Uri, + [Parameter(Mandatory)] + [string]$ZipExpectedDigest, + [Parameter(Mandatory)] + [string]$PathWithinZip, + [Parameter(Mandatory)] + [string]$FileExpectedDigest, + [Parameter(Mandatory)] + [string]$OutFile + ) + $TmpZip = New-TemporaryFile + Invoke-WebRequest -Uri $Uri -OutFile $TmpZip.FullName + echo $TmpZip + Verify-Or-Delete-File -File $TmpZip.FullName -ExpectedDigest $ZipExpectedDigest + + Add-Type -AssemblyName System.IO.Compression.FileSystem + $zip = [System.IO.Compression.ZipFile]::OpenRead($TmpZip) + $zip.Entries | + Where-Object { $_.FullName -eq $PathWithinZip } | + ForEach-Object { + $TmpFile = New-TemporaryFile + # extract the selected items from the ZIP archive + # and copy them to the out folder + $FileName = $_.Name + [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_, "$TmpFile", $true) + Verify-Or-Delete-File -File $TmpFile -ExpectedDigest $FileExpectedDigest + Move-Item -Force $TmpFile $OutFile + } + $zip.Dispose() +} + +$tools_dir = "target/tools" +mkdir -Force $tools_dir + +# This is the file BoringSSL refers to in +# https://boringssl.googlesource.com/boringssl/+/26f8297177ad8033cc39de84afe9c2000430a66d. +$nasm_version = "nasm-2.13.03" +$nasm_zip = "$nasm_version-win64.zip" +$nasm_zip_sha256 = "B3A1F896B53D07854884C2E0D6BE7DEFBA7EBD09B864BBB9E6D69ADA1C3E989F" +$nasm_exe = "nasm.exe" +$nasm_exe_sha256 = "D8A933BF5CC3597C56193135CB78B225AB225E1F611D2FDB51EF6E3F555B21E3" +Download-Zip-and-Extract-File ` + -Uri "https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/win64/$nasm_zip" ` + -ZipExpectedDigest "$nasm_zip_sha256" ` + -PathWithinZip "$nasm_version/$nasm_exe" ` + -FileExpectedDigest "$nasm_exe_sha256" ` + -OutFile "$tools_dir/$nasm_exe" diff --git a/vendor/ring/mk/install-build-tools.sh b/vendor/ring/mk/install-build-tools.sh new file mode 100755 index 00000000..2011d797 --- /dev/null +++ b/vendor/ring/mk/install-build-tools.sh @@ -0,0 +1,95 @@ +#!/usr/bin/env bash +# +# Copyright 2020 Brian Smith. +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +set -eux -o pipefail +IFS=$'\n\t' + +target=$1 +features=${2-} + +function install_packages { + sudo apt-get -yq --no-install-suggests --no-install-recommends install "$@" +} + +use_clang= +case $target in +--target*android*) + mkdir -p "${ANDROID_SDK_ROOT}/licenses" + android_license_file="${ANDROID_SDK_ROOT}/licenses/android-sdk-license" + accept_android_license=24333f8a63b6825ea9c5514f83c2829b004d1fee + grep --quiet --no-messages "$accept_android_license" "$android_license_file" \ + || echo $accept_android_license >> "$android_license_file" + "${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager" ndk-bundle + ;; +esac + +case $target in +--target=aarch64-unknown-linux-gnu) + # Clang is needed for code coverage. + use_clang=1 + install_packages \ + qemu-user \ + gcc-aarch64-linux-gnu \ + libc6-dev-arm64-cross + ;; +--target=aarch64-unknown-linux-musl|--target=armv7-unknown-linux-musleabihf) + use_clang=1 + install_packages \ + qemu-user + ;; +--target=arm-unknown-linux-gnueabihf) + install_packages \ + qemu-user \ + gcc-arm-linux-gnueabihf \ + libc6-dev-armhf-cross + ;; +--target=i686-unknown-linux-gnu) + use_clang=1 + install_packages \ + gcc-multilib \ + libc6-dev-i386 + ;; +--target=i686-unknown-linux-musl|--target=x86_64-unknown-linux-musl) + use_clang=1 + ;; +--target=wasm32-unknown-unknown) + # The version of wasm-bindgen-cli must match the wasm-bindgen version. + wasm_bindgen_version=$(cargo metadata --format-version 1 | jq -r '.packages | map(select( .name == "wasm-bindgen")) | map(.version) | .[0]') + cargo install wasm-bindgen-cli --vers "$wasm_bindgen_version" --bin wasm-bindgen-test-runner + case ${features-} in + *wasm32_c*) + use_clang=1 + ;; + *) + ;; + esac + ;; +--target=*) + ;; +esac + +if [ -n "$use_clang" ]; then + llvm_version=10 + if [ -n "${RING_COVERAGE-}" ]; then + # https://github.com/rust-lang/rust/pull/79365 upgraded the coverage file + # format to one that only LLVM 11+ can use + llvm_version=11 + sudo apt-key add mk/llvm-snapshot.gpg.key + sudo add-apt-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-$llvm_version main" + sudo apt-get update + fi + install_packages clang-$llvm_version llvm-$llvm_version +fi diff --git a/vendor/ring/mk/llvm-snapshot.gpg.key b/vendor/ring/mk/llvm-snapshot.gpg.key new file mode 100644 index 00000000..87a01ff8 --- /dev/null +++ b/vendor/ring/mk/llvm-snapshot.gpg.key @@ -0,0 +1,54 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.12 (GNU/Linux) +Comment: See https://apt.llvm.org/. +Comment: Fingerprint: 6084 F3CF 814B 57C1 CF12 EFD5 15CF 4D18 AF4F 7421 + +mQINBFE9lCwBEADi0WUAApM/mgHJRU8lVkkw0CHsZNpqaQDNaHefD6Rw3S4LxNmM +EZaOTkhP200XZM8lVdbfUW9xSjA3oPldc1HG26NjbqqCmWpdo2fb+r7VmU2dq3NM +R18ZlKixiLDE6OUfaXWKamZsXb6ITTYmgTO6orQWYrnW6ckYHSeaAkW0wkDAryl2 +B5v8aoFnQ1rFiVEMo4NGzw4UX+MelF7rxaaregmKVTPiqCOSPJ1McC1dHFN533FY +Wh/RVLKWo6npu+owtwYFQW+zyQhKzSIMvNujFRzhIxzxR9Gn87MoLAyfgKEzrbbT +DhqqNXTxS4UMUKCQaO93TzetX/EBrRpJj+vP640yio80h4Dr5pAd7+LnKwgpTDk1 +G88bBXJAcPZnTSKu9I2c6KY4iRNbvRz4i+ZdwwZtdW4nSdl2792L7Sl7Nc44uLL/ +ZqkKDXEBF6lsX5XpABwyK89S/SbHOytXv9o4puv+65Ac5/UShspQTMSKGZgvDauU +cs8kE1U9dPOqVNCYq9Nfwinkf6RxV1k1+gwtclxQuY7UpKXP0hNAXjAiA5KS5Crq +7aaJg9q2F4bub0mNU6n7UI6vXguF2n4SEtzPRk6RP+4TiT3bZUsmr+1ktogyOJCc +Ha8G5VdL+NBIYQthOcieYCBnTeIH7D3Sp6FYQTYtVbKFzmMK+36ERreL/wARAQAB +tD1TeWx2ZXN0cmUgTGVkcnUgLSBEZWJpYW4gTExWTSBwYWNrYWdlcyA8c3lsdmVz +dHJlQGRlYmlhbi5vcmc+iQI4BBMBAgAiBQJRPZQsAhsDBgsJCAcDAgYVCAIJCgsE +FgIDAQIeAQIXgAAKCRAVz00Yr090Ibx+EADArS/hvkDF8juWMXxh17CgR0WZlHCC +9CTBWkg5a0bNN/3bb97cPQt/vIKWjQtkQpav6/5JTVCSx2riL4FHYhH0iuo4iAPR +udC7Cvg8g7bSPrKO6tenQZNvQm+tUmBHgFiMBJi92AjZ/Qn1Shg7p9ITivFxpLyX +wpmnF1OKyI2Kof2rm4BFwfSWuf8Fvh7kDMRLHv+MlnK/7j/BNpKdozXxLcwoFBmn +l0WjpAH3OFF7Pvm1LJdf1DjWKH0Dc3sc6zxtmBR/KHHg6kK4BGQNnFKujcP7TVdv +gMYv84kun14pnwjZcqOtN3UJtcx22880DOQzinoMs3Q4w4o05oIF+sSgHViFpc3W +R0v+RllnH05vKZo+LDzc83DQVrdwliV12eHxrMQ8UYg88zCbF/cHHnlzZWAJgftg +hB08v1BKPgYRUzwJ6VdVqXYcZWEaUJmQAPuAALyZESw94hSo28FAn0/gzEc5uOYx +K+xG/lFwgAGYNb3uGM5m0P6LVTfdg6vDwwOeTNIExVk3KVFXeSQef2ZMkhwA7wya +KJptkb62wBHFE+o9TUdtMCY6qONxMMdwioRE5BYNwAsS1PnRD2+jtlI0DzvKHt7B +MWd8hnoUKhMeZ9TNmo+8CpsAtXZcBho0zPGz/R8NlJhAWpdAZ1CmcPo83EW86Yq7 +BxQUKnNHcwj2ebkCDQRRPZQsARAA4jxYmbTHwmMjqSizlMJYNuGOpIidEdx9zQ5g +zOr431/VfWq4S+VhMDhs15j9lyml0y4ok215VRFwrAREDg6UPMr7ajLmBQGau0Fc +bvZJ90l4NjXp5p0NEE/qOb9UEHT7EGkEhaZ1ekkWFTWCgsy7rRXfZLxB6sk7pzLC +DshyW3zjIakWAnpQ5j5obiDy708pReAuGB94NSyb1HoW/xGsGgvvCw4r0w3xPStw +F1PhmScE6NTBIfLliea3pl8vhKPlCh54Hk7I8QGjo1ETlRP4Qll1ZxHJ8u25f/ta +RES2Aw8Hi7j0EVcZ6MT9JWTI83yUcnUlZPZS2HyeWcUj+8nUC8W4N8An+aNps9l/ +21inIl2TbGo3Yn1JQLnA1YCoGwC34g8QZTJhElEQBN0X29ayWW6OdFx8MDvllbBV +ymmKq2lK1U55mQTfDli7S3vfGz9Gp/oQwZ8bQpOeUkc5hbZszYwP4RX+68xDPfn+ +M9udl+qW9wu+LyePbW6HX90LmkhNkkY2ZzUPRPDHZANU5btaPXc2H7edX4y4maQa +xenqD0lGh9LGz/mps4HEZtCI5CY8o0uCMF3lT0XfXhuLksr7Pxv57yue8LLTItOJ +d9Hmzp9G97SRYYeqU+8lyNXtU2PdrLLq7QHkzrsloG78lCpQcalHGACJzrlUWVP/ +fN3Ht3kAEQEAAYkCHwQYAQIACQUCUT2ULAIbDAAKCRAVz00Yr090IbhWEADbr50X +OEXMIMGRLe+YMjeMX9NG4jxs0jZaWHc/WrGR+CCSUb9r6aPXeLo+45949uEfdSsB +pbaEdNWxF5Vr1CSjuO5siIlgDjmT655voXo67xVpEN4HhMrxugDJfCa6z97P0+ML +PdDxim57uNqkam9XIq9hKQaurxMAECDPmlEXI4QT3eu5qw5/knMzDMZj4Vi6hovL +wvvAeLHO/jsyfIdNmhBGU2RWCEZ9uo/MeerPHtRPfg74g+9PPfP6nyHD2Wes6yGd +oVQwtPNAQD6Cj7EaA2xdZYLJ7/jW6yiPu98FFWP74FN2dlyEA2uVziLsfBrgpS4l +tVOlrO2YzkkqUGrybzbLpj6eeHx+Cd7wcjI8CalsqtL6cG8cUEjtWQUHyTbQWAgG +5VPEgIAVhJ6RTZ26i/G+4J8neKyRs4vz+57UGwY6zI4AB1ZcWGEE3Bf+CDEDgmnP +LSwbnHefK9IljT9XU98PelSryUO/5UPw7leE0akXKB4DtekToO226px1VnGp3Bov +1GBGvpHvL2WizEwdk+nfk8LtrLzej+9FtIcq3uIrYnsac47Pf7p0otcFeTJTjSq3 +krCaoG4Hx0zGQG2ZFpHrSrZTVy6lxvIdfi0beMgY6h78p6M9eYZHQHc02DjFkQXN +bXb5c6gCHESH5PXwPU4jQEE7Ib9J6sbk7ZT2Mw== +=j+4q +-----END PGP PUBLIC KEY BLOCK----- diff --git a/vendor/ring/mk/package.sh b/vendor/ring/mk/package.sh new file mode 100644 index 00000000..7def4b62 --- /dev/null +++ b/vendor/ring/mk/package.sh @@ -0,0 +1,14 @@ +# This only works on Windows, using MinGW. +set -eux -o pipefail +IFS=$'\n\t' + +# Make sure the current tree isn't dirty. +# https://stackoverflow.com/a/5737794 +if [[ $(git status --porcelain | wc -c) -ne 0 ]]; then + echo Repository is dirty. + exit 1 +fi + +(cd pregenerate_asm && cargo clean && cargo build) +./pregenerate_asm/target/debug/pregenerate_asm +cargo package --allow-dirty diff --git a/vendor/ring/mk/runner b/vendor/ring/mk/runner new file mode 100755 index 00000000..ffa14410 --- /dev/null +++ b/vendor/ring/mk/runner @@ -0,0 +1,21 @@ +#!/bin/bash +set -eux -o pipefail +IFS=$'\n\t' + +for arg in $*; do + # There can be some arguments prefixed in front of the executable, e.g. + # when qemu-user is used. There can be arguments after the executable, + # e.g. `cargo test` arguments like `TESTNAME`. + if [[ $arg = */deps/* ]]; then + executable=$arg + break + fi +done + +export LLVM_PROFILE_FILE=$(dirname "$RING_BUILD_EXECUTABLE_LIST")/$(basename "$executable").profraw + +if [ -n "$RING_BUILD_EXECUTABLE_LIST" ]; then + echo "$executable" >> "$RING_BUILD_EXECUTABLE_LIST" +fi + +$* diff --git a/vendor/ring/pregenerate_asm/Cargo.toml b/vendor/ring/pregenerate_asm/Cargo.toml new file mode 100644 index 00000000..8a64273f --- /dev/null +++ b/vendor/ring/pregenerate_asm/Cargo.toml @@ -0,0 +1,12 @@ +[package] +authors = ["Brian Smith "] +name = "pregenerate_asm" +version = "0.0.1" + +[[bin]] +name = "pregenerate_asm" +path = "../build.rs" + +# Keep this in sync with `[build-dependencies]` in ../Cargo.toml. +[dependencies] +cc = { version = "1.0.62", default-features = false } diff --git a/vendor/ring/rustfmt.toml b/vendor/ring/rustfmt.toml new file mode 100644 index 00000000..a032c005 --- /dev/null +++ b/vendor/ring/rustfmt.toml @@ -0,0 +1,5 @@ +edition = "2018" +max_width = 100 +newline_style = "Unix" +reorder_imports = true +use_field_init_shorthand = true diff --git a/vendor/ring/src/aead.rs b/vendor/ring/src/aead.rs new file mode 100644 index 00000000..3c233c52 --- /dev/null +++ b/vendor/ring/src/aead.rs @@ -0,0 +1,243 @@ +// Copyright 2015-2021 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Authenticated Encryption with Associated Data (AEAD). +//! +//! See [Authenticated encryption: relations among notions and analysis of the +//! generic composition paradigm][AEAD] for an introduction to the concept of +//! AEADs. +//! +//! [AEAD]: http://www-cse.ucsd.edu/~mihir/papers/oem.html +//! [`crypto.cipher.AEAD`]: https://golang.org/pkg/crypto/cipher/#AEAD + +use crate::{cpu, error, hkdf, polyfill}; +use core::ops::RangeFrom; + +pub use self::{ + aes_gcm::{AES_128_GCM, AES_256_GCM}, + chacha20_poly1305::CHACHA20_POLY1305, + less_safe_key::LessSafeKey, + nonce::{Nonce, NONCE_LEN}, + opening_key::OpeningKey, + sealing_key::SealingKey, + unbound_key::UnboundKey, +}; + +/// A sequences of unique nonces. +/// +/// A given `NonceSequence` must never return the same `Nonce` twice from +/// `advance()`. +/// +/// A simple counter is a reasonable (but probably not ideal) `NonceSequence`. +/// +/// Intentionally not `Clone` or `Copy` since cloning would allow duplication +/// of the sequence. +pub trait NonceSequence { + /// Returns the next nonce in the sequence. + /// + /// This may fail if "too many" nonces have been requested, where how many + /// is too many is up to the implementation of `NonceSequence`. An + /// implementation may that enforce a maximum number of records are + /// sent/received under a key this way. Once `advance()` fails, it must + /// fail for all subsequent calls. + fn advance(&mut self) -> Result; +} + +/// An AEAD key bound to a nonce sequence. +pub trait BoundKey: core::fmt::Debug { + /// Constructs a new key from the given `UnboundKey` and `NonceSequence`. + fn new(key: UnboundKey, nonce_sequence: N) -> Self; + + /// The key's AEAD algorithm. + fn algorithm(&self) -> &'static Algorithm; +} + +/// The additionally authenticated data (AAD) for an opening or sealing +/// operation. This data is authenticated but is **not** encrypted. +/// +/// The type `A` could be a byte slice `&[u8]`, a byte array `[u8; N]` +/// for some constant `N`, `Vec`, etc. +pub struct Aad(A); + +impl> Aad { + /// Construct the `Aad` from the given bytes. + #[inline] + pub fn from(aad: A) -> Self { + Self(aad) + } +} + +impl AsRef<[u8]> for Aad +where + A: AsRef<[u8]>, +{ + fn as_ref(&self) -> &[u8] { + self.0.as_ref() + } +} + +impl Aad<[u8; 0]> { + /// Construct an empty `Aad`. + pub fn empty() -> Self { + Self::from([]) + } +} + +impl Clone for Aad +where + A: Clone, +{ + #[inline] + fn clone(&self) -> Self { + Self(self.0.clone()) + } +} + +impl Copy for Aad where A: Copy {} + +impl core::fmt::Debug for Aad +where + A: core::fmt::Debug, +{ + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + f.debug_tuple("Aad").field(&self.0).finish() + } +} + +impl PartialEq for Aad +where + A: PartialEq, +{ + #[inline] + fn eq(&self, other: &Self) -> bool { + self.0.eq(&other.0) + } +} + +impl Eq for Aad where A: Eq {} + +#[allow(clippy::large_enum_variant, variant_size_differences)] +enum KeyInner { + AesGcm(aes_gcm::Key), + ChaCha20Poly1305(chacha20_poly1305::Key), +} + +impl hkdf::KeyType for &'static Algorithm { + #[inline] + fn len(&self) -> usize { + self.key_len() + } +} + +/// An AEAD Algorithm. +pub struct Algorithm { + init: fn(key: &[u8], cpu_features: cpu::Features) -> Result, + + seal: fn(key: &KeyInner, nonce: Nonce, aad: Aad<&[u8]>, in_out: &mut [u8]) -> Tag, + open: fn( + key: &KeyInner, + nonce: Nonce, + aad: Aad<&[u8]>, + in_out: &mut [u8], + src: RangeFrom, + ) -> Tag, + + key_len: usize, + id: AlgorithmID, + + /// Use `max_input_len!()` to initialize this. + // TODO: Make this `usize`. + max_input_len: u64, +} + +const fn max_input_len(block_len: usize, overhead_blocks_per_nonce: usize) -> u64 { + // Each of our AEADs use a 32-bit block counter so the maximum is the + // largest input that will not overflow the counter. + ((1u64 << 32) - polyfill::u64_from_usize(overhead_blocks_per_nonce)) + * polyfill::u64_from_usize(block_len) +} + +impl Algorithm { + /// The length of the key. + #[inline(always)] + pub fn key_len(&self) -> usize { + self.key_len + } + + /// The length of a tag. + /// + /// See also `MAX_TAG_LEN`. + #[inline(always)] + pub fn tag_len(&self) -> usize { + TAG_LEN + } + + /// The length of the nonces. + #[inline(always)] + pub fn nonce_len(&self) -> usize { + NONCE_LEN + } +} + +derive_debug_via_id!(Algorithm); + +#[derive(Debug, Eq, PartialEq)] +enum AlgorithmID { + AES_128_GCM, + AES_256_GCM, + CHACHA20_POLY1305, +} + +impl PartialEq for Algorithm { + fn eq(&self, other: &Self) -> bool { + self.id == other.id + } +} + +impl Eq for Algorithm {} + +/// An authentication tag. +#[must_use] +#[repr(C)] +pub struct Tag([u8; TAG_LEN]); + +impl AsRef<[u8]> for Tag { + fn as_ref(&self) -> &[u8] { + self.0.as_ref() + } +} + +const MAX_KEY_LEN: usize = 32; + +// All the AEADs we support use 128-bit tags. +const TAG_LEN: usize = 16; + +/// The maximum length of a tag for the algorithms in this module. +pub const MAX_TAG_LEN: usize = TAG_LEN; + +mod aes; +mod aes_gcm; +mod block; +mod chacha; +mod chacha20_poly1305; +pub mod chacha20_poly1305_openssh; +mod gcm; +mod less_safe_key; +mod nonce; +mod opening_key; +mod poly1305; +pub mod quic; +mod sealing_key; +mod shift; +mod unbound_key; diff --git a/vendor/ring/src/aead/aes.rs b/vendor/ring/src/aead/aes.rs new file mode 100644 index 00000000..d43927d2 --- /dev/null +++ b/vendor/ring/src/aead/aes.rs @@ -0,0 +1,481 @@ +// Copyright 2018 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use super::{ + block::{Block, BLOCK_LEN}, + nonce::Nonce, + quic::Sample, +}; +use crate::{ + bits::BitLength, + c, cpu, + endian::{ArrayEncoding, BigEndian}, + error, + polyfill::{self, ChunksFixed}, +}; +use core::ops::RangeFrom; + +pub(crate) struct Key { + inner: AES_KEY, + cpu_features: cpu::Features, +} + +macro_rules! set_encrypt_key { + ( $name:ident, $bytes:expr, $key_bits:expr, $key:expr ) => {{ + extern "C" { + fn $name(user_key: *const u8, bits: c::uint, key: &mut AES_KEY) -> c::int; + } + set_encrypt_key($name, $bytes, $key_bits, $key) + }}; +} + +#[inline] +fn set_encrypt_key( + f: unsafe extern "C" fn(*const u8, c::uint, &mut AES_KEY) -> c::int, + bytes: &[u8], + key_bits: BitLength, + key: &mut AES_KEY, +) -> Result<(), error::Unspecified> { + // Unusually, in this case zero means success and non-zero means failure. + if 0 == unsafe { f(bytes.as_ptr(), key_bits.as_usize_bits() as c::uint, key) } { + Ok(()) + } else { + Err(error::Unspecified) + } +} + +macro_rules! encrypt_block { + ($name:ident, $block:expr, $key:expr) => {{ + extern "C" { + fn $name(a: &Block, r: *mut Block, key: &AES_KEY); + } + encrypt_block_($name, $block, $key) + }}; +} + +#[inline] +fn encrypt_block_( + f: unsafe extern "C" fn(&Block, *mut Block, &AES_KEY), + a: Block, + key: &Key, +) -> Block { + let mut result = core::mem::MaybeUninit::uninit(); + unsafe { + f(&a, result.as_mut_ptr(), &key.inner); + result.assume_init() + } +} + +macro_rules! ctr32_encrypt_blocks { + ($name:ident, $in_out:expr, $src:expr, $key:expr, $ivec:expr ) => {{ + extern "C" { + fn $name( + input: *const u8, + output: *mut u8, + blocks: c::size_t, + key: &AES_KEY, + ivec: &Counter, + ); + } + ctr32_encrypt_blocks_($name, $in_out, $src, $key, $ivec) + }}; +} + +#[inline] +fn ctr32_encrypt_blocks_( + f: unsafe extern "C" fn( + input: *const u8, + output: *mut u8, + blocks: c::size_t, + key: &AES_KEY, + ivec: &Counter, + ), + in_out: &mut [u8], + src: RangeFrom, + key: &AES_KEY, + ctr: &mut Counter, +) { + let in_out_len = in_out[src.clone()].len(); + assert_eq!(in_out_len % BLOCK_LEN, 0); + + let blocks = in_out_len / BLOCK_LEN; + let blocks_u32 = blocks as u32; + assert_eq!(blocks, polyfill::usize_from_u32(blocks_u32)); + + let input = in_out[src].as_ptr(); + let output = in_out.as_mut_ptr(); + + unsafe { + f(input, output, blocks, &key, ctr); + } + ctr.increment_by_less_safe(blocks_u32); +} + +impl Key { + #[inline] + pub fn new( + bytes: &[u8], + variant: Variant, + cpu_features: cpu::Features, + ) -> Result { + let key_bits = match variant { + Variant::AES_128 => BitLength::from_usize_bits(128), + Variant::AES_256 => BitLength::from_usize_bits(256), + }; + if BitLength::from_usize_bytes(bytes.len())? != key_bits { + return Err(error::Unspecified); + } + + let mut key = AES_KEY { + rd_key: [0u32; 4 * (MAX_ROUNDS + 1)], + rounds: 0, + }; + + match detect_implementation(cpu_features) { + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + ))] + Implementation::HWAES => { + set_encrypt_key!(GFp_aes_hw_set_encrypt_key, bytes, key_bits, &mut key)? + } + + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + ))] + Implementation::VPAES_BSAES => { + set_encrypt_key!(GFp_vpaes_set_encrypt_key, bytes, key_bits, &mut key)? + } + + #[cfg(not(target_arch = "aarch64"))] + Implementation::NOHW => { + set_encrypt_key!(GFp_aes_nohw_set_encrypt_key, bytes, key_bits, &mut key)? + } + }; + + Ok(Self { + inner: key, + cpu_features, + }) + } + + #[inline] + pub fn encrypt_block(&self, a: Block) -> Block { + match detect_implementation(self.cpu_features) { + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + ))] + Implementation::HWAES => encrypt_block!(GFp_aes_hw_encrypt, a, self), + + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + ))] + Implementation::VPAES_BSAES => encrypt_block!(GFp_vpaes_encrypt, a, self), + + #[cfg(not(target_arch = "aarch64"))] + Implementation::NOHW => encrypt_block!(GFp_aes_nohw_encrypt, a, self), + } + } + + #[inline] + pub fn encrypt_iv_xor_block(&self, iv: Iv, input: Block) -> Block { + let encrypted_iv = self.encrypt_block(Block::from(iv.as_bytes_less_safe())); + encrypted_iv ^ input + } + + #[inline] + pub(super) fn ctr32_encrypt_within( + &self, + in_out: &mut [u8], + src: RangeFrom, + ctr: &mut Counter, + ) { + let in_out_len = in_out[src.clone()].len(); + + assert_eq!(in_out_len % BLOCK_LEN, 0); + + match detect_implementation(self.cpu_features) { + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + ))] + Implementation::HWAES => ctr32_encrypt_blocks!( + GFp_aes_hw_ctr32_encrypt_blocks, + in_out, + src, + &self.inner, + ctr + ), + + #[cfg(any(target_arch = "aarch64", target_arch = "arm", target_arch = "x86_64"))] + Implementation::VPAES_BSAES => { + // 8 blocks is the cut-off point where it's faster to use BSAES. + #[cfg(target_arch = "arm")] + let in_out = if in_out_len >= 8 * BLOCK_LEN { + let remainder = in_out_len % (8 * BLOCK_LEN); + let bsaes_in_out_len = if remainder < (4 * BLOCK_LEN) { + in_out_len - remainder + } else { + in_out_len + }; + + let mut bsaes_key = AES_KEY { + rd_key: [0u32; 4 * (MAX_ROUNDS + 1)], + rounds: 0, + }; + extern "C" { + fn GFp_vpaes_encrypt_key_to_bsaes( + bsaes_key: &mut AES_KEY, + vpaes_key: &AES_KEY, + ); + } + unsafe { + GFp_vpaes_encrypt_key_to_bsaes(&mut bsaes_key, &self.inner); + } + ctr32_encrypt_blocks!( + GFp_bsaes_ctr32_encrypt_blocks, + &mut in_out[src.clone()][bsaes_in_out_len..], + src.clone(), + &bsaes_key, + ctr + ); + + &mut in_out[src.clone()][bsaes_in_out_len..] + } else { + in_out + }; + + ctr32_encrypt_blocks!( + GFp_vpaes_ctr32_encrypt_blocks, + in_out, + src, + &self.inner, + ctr + ) + } + + #[cfg(any(target_arch = "x86"))] + Implementation::VPAES_BSAES => { + super::shift::shift_full_blocks(in_out, src, |input| { + self.encrypt_iv_xor_block(ctr.increment(), Block::from(input)) + }); + } + + #[cfg(not(target_arch = "aarch64"))] + Implementation::NOHW => ctr32_encrypt_blocks!( + GFp_aes_nohw_ctr32_encrypt_blocks, + in_out, + src, + &self.inner, + ctr + ), + } + } + + pub fn new_mask(&self, sample: Sample) -> [u8; 5] { + let block = self.encrypt_block(Block::from(&sample)); + + let mut out: [u8; 5] = [0; 5]; + out.copy_from_slice(&block.as_ref()[..5]); + + out + } + + #[cfg(target_arch = "x86_64")] + #[must_use] + pub fn is_aes_hw(&self) -> bool { + matches!( + detect_implementation(self.cpu_features), + Implementation::HWAES + ) + } + + #[cfg(target_arch = "x86_64")] + #[must_use] + pub(super) fn inner_less_safe(&self) -> &AES_KEY { + &self.inner + } +} + +// Keep this in sync with AES_KEY in aes.h. +#[repr(C)] +pub(super) struct AES_KEY { + pub rd_key: [u32; 4 * (MAX_ROUNDS + 1)], + pub rounds: c::uint, +} + +// Keep this in sync with `AES_MAXNR` in aes.h. +const MAX_ROUNDS: usize = 14; + +pub enum Variant { + AES_128, + AES_256, +} + +/// Nonce || Counter, all big-endian. +#[repr(transparent)] +pub(super) struct Counter([BigEndian; 4]); + +impl Counter { + pub fn one(nonce: Nonce) -> Self { + let nonce = nonce.as_ref().chunks_fixed(); + Self([nonce[0].into(), nonce[1].into(), nonce[2].into(), 1.into()]) + } + + pub fn increment(&mut self) -> Iv { + let iv = Iv(self.0); + self.increment_by_less_safe(1); + iv + } + + fn increment_by_less_safe(&mut self, increment_by: u32) { + let old_value: u32 = self.0[3].into(); + self.0[3] = (old_value + increment_by).into(); + } +} + +/// The IV for a single block encryption. +/// +/// Intentionally not `Clone` to ensure each is used only once. +pub struct Iv([BigEndian; 4]); + +impl From for Iv { + fn from(counter: Counter) -> Self { + Self(counter.0) + } +} + +impl Iv { + pub(super) fn as_bytes_less_safe(&self) -> &[u8; 16] { + self.0.as_byte_array() + } +} + +#[repr(C)] // Only so `Key` can be `#[repr(C)]` +#[derive(Clone, Copy)] +pub enum Implementation { + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + ))] + HWAES = 1, + + // On "arm" only, this indicates that the bsaes implementation may be used. + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + ))] + VPAES_BSAES = 2, + + #[cfg(not(target_arch = "aarch64"))] + NOHW = 3, +} + +fn detect_implementation(cpu_features: cpu::Features) -> Implementation { + // `cpu_features` is only used for specific platforms. + #[cfg(not(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + )))] + let _cpu_features = cpu_features; + + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + ))] + { + if cpu::intel::AES.available(cpu_features) || cpu::arm::AES.available(cpu_features) { + return Implementation::HWAES; + } + } + + #[cfg(any(target_arch = "x86_64", target_arch = "x86"))] + { + if cpu::intel::SSSE3.available(cpu_features) { + return Implementation::VPAES_BSAES; + } + } + + #[cfg(target_arch = "arm")] + { + if cpu::arm::NEON.available(cpu_features) { + return Implementation::VPAES_BSAES; + } + } + + #[cfg(target_arch = "aarch64")] + { + Implementation::VPAES_BSAES + } + + #[cfg(not(target_arch = "aarch64"))] + { + Implementation::NOHW + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::test; + use core::convert::TryInto; + + #[test] + pub fn test_aes() { + test::run(test_file!("aes_tests.txt"), |section, test_case| { + assert_eq!(section, ""); + let key = consume_key(test_case, "Key"); + let input = test_case.consume_bytes("Input"); + let input: &[u8; BLOCK_LEN] = input.as_slice().try_into()?; + let expected_output = test_case.consume_bytes("Output"); + + let block = Block::from(input); + let output = key.encrypt_block(block); + assert_eq!(output.as_ref(), &expected_output[..]); + + Ok(()) + }) + } + + fn consume_key(test_case: &mut test::TestCase, name: &str) -> Key { + let key = test_case.consume_bytes(name); + let variant = match key.len() { + 16 => Variant::AES_128, + 32 => Variant::AES_256, + _ => unreachable!(), + }; + Key::new(&key[..], variant, cpu::features()).unwrap() + } +} diff --git a/vendor/ring/src/aead/aes_gcm.rs b/vendor/ring/src/aead/aes_gcm.rs new file mode 100644 index 00000000..5628f6d4 --- /dev/null +++ b/vendor/ring/src/aead/aes_gcm.rs @@ -0,0 +1,271 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use super::{ + aes::{self, Counter}, + block::{Block, BLOCK_LEN}, + gcm, shift, Aad, Nonce, Tag, +}; +use crate::{aead, cpu, error, polyfill}; +use core::ops::RangeFrom; + +/// AES-128 in GCM mode with 128-bit tags and 96 bit nonces. +pub static AES_128_GCM: aead::Algorithm = aead::Algorithm { + key_len: 16, + init: init_128, + seal: aes_gcm_seal, + open: aes_gcm_open, + id: aead::AlgorithmID::AES_128_GCM, + max_input_len: AES_GCM_MAX_INPUT_LEN, +}; + +/// AES-256 in GCM mode with 128-bit tags and 96 bit nonces. +pub static AES_256_GCM: aead::Algorithm = aead::Algorithm { + key_len: 32, + init: init_256, + seal: aes_gcm_seal, + open: aes_gcm_open, + id: aead::AlgorithmID::AES_256_GCM, + max_input_len: AES_GCM_MAX_INPUT_LEN, +}; + +pub struct Key { + gcm_key: gcm::Key, // First because it has a large alignment requirement. + aes_key: aes::Key, +} + +fn init_128(key: &[u8], cpu_features: cpu::Features) -> Result { + init(key, aes::Variant::AES_128, cpu_features) +} + +fn init_256(key: &[u8], cpu_features: cpu::Features) -> Result { + init(key, aes::Variant::AES_256, cpu_features) +} + +fn init( + key: &[u8], + variant: aes::Variant, + cpu_features: cpu::Features, +) -> Result { + let aes_key = aes::Key::new(key, variant, cpu_features)?; + let gcm_key = gcm::Key::new(aes_key.encrypt_block(Block::zero()), cpu_features); + Ok(aead::KeyInner::AesGcm(Key { aes_key, gcm_key })) +} + +const CHUNK_BLOCKS: usize = 3 * 1024 / 16; + +fn aes_gcm_seal(key: &aead::KeyInner, nonce: Nonce, aad: Aad<&[u8]>, in_out: &mut [u8]) -> Tag { + let Key { aes_key, gcm_key } = match key { + aead::KeyInner::AesGcm(key) => key, + _ => unreachable!(), + }; + + let mut ctr = Counter::one(nonce); + let tag_iv = ctr.increment(); + + let total_in_out_len = in_out.len(); + let aad_len = aad.0.len(); + let mut auth = gcm::Context::new(gcm_key, aad); + + #[cfg(target_arch = "x86_64")] + let in_out = { + if !aes_key.is_aes_hw() || !auth.is_avx2() { + in_out + } else { + use crate::c; + extern "C" { + fn GFp_aesni_gcm_encrypt( + input: *const u8, + output: *mut u8, + len: c::size_t, + key: &aes::AES_KEY, + ivec: &mut Counter, + gcm: &mut gcm::ContextInner, + ) -> c::size_t; + } + let processed = unsafe { + GFp_aesni_gcm_encrypt( + in_out.as_ptr(), + in_out.as_mut_ptr(), + in_out.len(), + aes_key.inner_less_safe(), + &mut ctr, + auth.inner(), + ) + }; + + &mut in_out[processed..] + } + }; + + let (whole, remainder) = { + let in_out_len = in_out.len(); + let whole_len = in_out_len - (in_out_len % BLOCK_LEN); + in_out.split_at_mut(whole_len) + }; + + for chunk in whole.chunks_mut(CHUNK_BLOCKS * BLOCK_LEN) { + aes_key.ctr32_encrypt_within(chunk, 0.., &mut ctr); + auth.update_blocks(chunk); + } + + if !remainder.is_empty() { + let mut input = Block::zero(); + input.overwrite_part_at(0, remainder); + let mut output = aes_key.encrypt_iv_xor_block(ctr.into(), input); + output.zero_from(remainder.len()); + auth.update_block(output); + remainder.copy_from_slice(&output.as_ref()[..remainder.len()]); + } + + finish(aes_key, auth, tag_iv, aad_len, total_in_out_len) +} + +fn aes_gcm_open( + key: &aead::KeyInner, + nonce: Nonce, + aad: Aad<&[u8]>, + in_out: &mut [u8], + src: RangeFrom, +) -> Tag { + let Key { aes_key, gcm_key } = match key { + aead::KeyInner::AesGcm(key) => key, + _ => unreachable!(), + }; + + let mut ctr = Counter::one(nonce); + let tag_iv = ctr.increment(); + + let aad_len = aad.0.len(); + let mut auth = gcm::Context::new(gcm_key, aad); + + let in_prefix_len = src.start; + + let total_in_out_len = in_out.len() - in_prefix_len; + + #[cfg(target_arch = "x86_64")] + let in_out = { + if !aes_key.is_aes_hw() || !auth.is_avx2() { + in_out + } else { + use crate::c; + + extern "C" { + fn GFp_aesni_gcm_decrypt( + input: *const u8, + output: *mut u8, + len: c::size_t, + key: &aes::AES_KEY, + ivec: &mut Counter, + gcm: &mut gcm::ContextInner, + ) -> c::size_t; + } + + let processed = unsafe { + GFp_aesni_gcm_decrypt( + in_out[src.clone()].as_ptr(), + in_out.as_mut_ptr(), + in_out.len() - src.start, + aes_key.inner_less_safe(), + &mut ctr, + auth.inner(), + ) + }; + &mut in_out[processed..] + } + }; + + let whole_len = { + let in_out_len = in_out.len() - in_prefix_len; + in_out_len - (in_out_len % BLOCK_LEN) + }; + { + let mut chunk_len = CHUNK_BLOCKS * BLOCK_LEN; + let mut output = 0; + let mut input = in_prefix_len; + loop { + if whole_len - output < chunk_len { + chunk_len = whole_len - output; + } + if chunk_len == 0 { + break; + } + + auth.update_blocks(&in_out[input..][..chunk_len]); + aes_key.ctr32_encrypt_within( + &mut in_out[output..][..(chunk_len + in_prefix_len)], + in_prefix_len.., + &mut ctr, + ); + output += chunk_len; + input += chunk_len; + } + } + + let remainder = &mut in_out[whole_len..]; + shift::shift_partial((in_prefix_len, remainder), |remainder| { + let mut input = Block::zero(); + input.overwrite_part_at(0, remainder); + auth.update_block(input); + aes_key.encrypt_iv_xor_block(ctr.into(), input) + }); + + finish(aes_key, auth, tag_iv, aad_len, total_in_out_len) +} + +fn finish( + aes_key: &aes::Key, + mut gcm_ctx: gcm::Context, + tag_iv: aes::Iv, + aad_len: usize, + in_out_len: usize, +) -> Tag { + // Authenticate the final block containing the input lengths. + let aad_bits = polyfill::u64_from_usize(aad_len) << 3; + let ciphertext_bits = polyfill::u64_from_usize(in_out_len) << 3; + gcm_ctx.update_block(Block::from([aad_bits, ciphertext_bits])); + + // Finalize the tag and return it. + gcm_ctx.pre_finish(|pre_tag| { + let encrypted_iv = aes_key.encrypt_block(Block::from(tag_iv.as_bytes_less_safe())); + let tag = pre_tag ^ encrypted_iv; + Tag(*tag.as_ref()) + }) +} + +const AES_GCM_MAX_INPUT_LEN: u64 = super::max_input_len(BLOCK_LEN, 2); + +#[cfg(test)] +mod tests { + #[test] + fn max_input_len_test() { + // [NIST SP800-38D] Section 5.2.1.1. Note that [RFC 5116 Section 5.1] and + // [RFC 5116 Section 5.2] have an off-by-one error in `P_MAX`. + // + // [NIST SP800-38D]: + // http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf + // [RFC 5116 Section 5.1]: https://tools.ietf.org/html/rfc5116#section-5.1 + // [RFC 5116 Section 5.2]: https://tools.ietf.org/html/rfc5116#section-5.2 + const NIST_SP800_38D_MAX_BITS: u64 = (1u64 << 39) - 256; + assert_eq!(NIST_SP800_38D_MAX_BITS, 549_755_813_632u64); + assert_eq!( + super::AES_128_GCM.max_input_len * 8, + NIST_SP800_38D_MAX_BITS + ); + assert_eq!( + super::AES_256_GCM.max_input_len * 8, + NIST_SP800_38D_MAX_BITS + ); + } +} diff --git a/vendor/ring/src/aead/aes_tests.txt b/vendor/ring/src/aead/aes_tests.txt new file mode 100644 index 00000000..e4abe265 --- /dev/null +++ b/vendor/ring/src/aead/aes_tests.txt @@ -0,0 +1,7 @@ +Key = 000102030405060708090a0b0c0d0e0f +Input = 00112233445566778899aabbccddeeff +Output = 69c4e0d86a7b0430d8cdb78070b4c55a + +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +Input = 00112233445566778899aabbccddeeff +Output = 8ea2b7ca516745bfeafc49904b496089 diff --git a/vendor/ring/src/aead/block.rs b/vendor/ring/src/aead/block.rs new file mode 100644 index 00000000..bab9d2d0 --- /dev/null +++ b/vendor/ring/src/aead/block.rs @@ -0,0 +1,91 @@ +// Copyright 2018 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use crate::{endian::*, polyfill}; +use core::ops::{BitXor, BitXorAssign}; + +#[repr(transparent)] +#[derive(Copy, Clone)] +pub struct Block([BigEndian; 2]); + +pub const BLOCK_LEN: usize = 16; + +impl Block { + #[inline] + pub fn zero() -> Self { + Self([Encoding::ZERO; 2]) + } + + #[inline] + pub fn overwrite_part_at(&mut self, index: usize, a: &[u8]) { + let mut tmp: [u8; BLOCK_LEN] = *self.as_ref(); + tmp[index..][..a.len()].copy_from_slice(a); + *self = Self::from(&tmp) + } + + #[inline] + pub fn zero_from(&mut self, index: usize) { + let mut tmp: [u8; BLOCK_LEN] = *self.as_ref(); + polyfill::slice::fill(&mut tmp[index..], 0); + *self = Self::from(&tmp) + } +} + +impl From<[u64; 2]> for Block { + #[inline] + fn from(other: [u64; 2]) -> Self { + Self([other[0].into(), other[1].into()]) + } +} + +impl Into<[u64; 2]> for Block { + #[inline] + fn into(self) -> [u64; 2] { + [self.0[0].into(), self.0[1].into()] + } +} + +impl BitXorAssign for Block { + #[inline] + fn bitxor_assign(&mut self, a: Self) { + for (r, a) in self.0.iter_mut().zip(a.0.iter()) { + *r ^= *a; + } + } +} + +impl BitXor for Block { + type Output = Self; + + #[inline] + fn bitxor(self, a: Self) -> Self { + let mut r = self; + r.bitxor_assign(a); + r + } +} + +impl From<&'_ [u8; BLOCK_LEN]> for Block { + #[inline] + fn from(bytes: &[u8; BLOCK_LEN]) -> Self { + Self(FromByteArray::from_byte_array(bytes)) + } +} + +impl AsRef<[u8; BLOCK_LEN]> for Block { + #[inline] + fn as_ref(&self) -> &[u8; BLOCK_LEN] { + self.0.as_byte_array() + } +} diff --git a/vendor/ring/src/aead/chacha.rs b/vendor/ring/src/aead/chacha.rs new file mode 100644 index 00000000..28b9f8e0 --- /dev/null +++ b/vendor/ring/src/aead/chacha.rs @@ -0,0 +1,328 @@ +// Copyright 2016 Brian Smith. +// Portions Copyright (c) 2016, Google Inc. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use super::{quic::Sample, Nonce}; +use crate::{ + cpu, + polyfill::{array_map::Map, ChunksFixed}, +}; + +#[cfg(any( + test, + not(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86", + target_arch = "x86_64" + )) +))] +mod fallback; + +use core::ops::RangeFrom; + +pub struct Key { + words: [u32; KEY_LEN / 4], + cpu_features: cpu::Features, +} + +impl Key { + pub(super) fn new(value: [u8; KEY_LEN], cpu_features: cpu::Features) -> Self { + let value: &[[u8; 4]; KEY_LEN / 4] = value.chunks_fixed(); + Self { + words: value.array_map(u32::from_le_bytes), + cpu_features, + } + } + + pub(super) fn cpu_features(&self) -> cpu::Features { + self.cpu_features + } +} + +impl Key { + #[inline] + pub fn encrypt_in_place(&self, counter: Counter, in_out: &mut [u8]) { + self.encrypt_less_safe(counter, in_out, 0..); + } + + #[inline] + pub fn encrypt_iv_xor_in_place(&self, iv: Iv, in_out: &mut [u8; 32]) { + // It is safe to use `into_counter_for_single_block_less_safe()` + // because `in_out` is exactly one block long. + debug_assert!(in_out.len() <= BLOCK_LEN); + self.encrypt_less_safe(iv.into_counter_for_single_block_less_safe(), in_out, 0..); + } + + #[inline] + pub fn new_mask(&self, sample: Sample) -> [u8; 5] { + let mut out: [u8; 5] = [0; 5]; + let iv = Iv::assume_unique_for_key(sample); + + debug_assert!(out.len() <= BLOCK_LEN); + self.encrypt_less_safe(iv.into_counter_for_single_block_less_safe(), &mut out, 0..); + + out + } + + /// Analogous to `slice::copy_within()`. + pub fn encrypt_within(&self, counter: Counter, in_out: &mut [u8], src: RangeFrom) { + // XXX: The x86 and at least one branch of the ARM assembly language + // code doesn't allow overlapping input and output unless they are + // exactly overlapping. TODO: Figure out which branch of the ARM code + // has this limitation and come up with a better solution. + // + // https://rt.openssl.org/Ticket/Display.html?id=4362 + if cfg!(any(target_arch = "arm", target_arch = "x86")) && src.start != 0 { + let len = in_out.len() - src.start; + in_out.copy_within(src, 0); + self.encrypt_in_place(counter, &mut in_out[..len]); + } else { + self.encrypt_less_safe(counter, in_out, src); + } + } + + /// This is "less safe" because it skips the important check that `encrypt_within` does. + /// Only call this with `src` equal to `0..` or from `encrypt_within`. + #[inline] + fn encrypt_less_safe(&self, counter: Counter, in_out: &mut [u8], src: RangeFrom) { + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86", + target_arch = "x86_64" + ))] + #[inline(always)] + pub(super) fn chacha20_ctr32( + key: &Key, + counter: Counter, + in_out: &mut [u8], + src: RangeFrom, + ) { + let in_out_len = in_out.len().checked_sub(src.start).unwrap(); + + // There's no need to worry if `counter` is incremented because it is + // owned here and we drop immediately after the call. + extern "C" { + fn GFp_ChaCha20_ctr32( + out: *mut u8, + in_: *const u8, + in_len: crate::c::size_t, + key: &[u32; KEY_LEN / 4], + counter: &Counter, + ); + } + unsafe { + GFp_ChaCha20_ctr32( + in_out.as_mut_ptr(), + in_out[src].as_ptr(), + in_out_len, + key.words_less_safe(), + &counter, + ) + } + } + + #[cfg(not(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86", + target_arch = "x86_64" + )))] + use fallback::chacha20_ctr32; + + chacha20_ctr32(self, counter, in_out, src); + } + + #[inline] + pub(super) fn words_less_safe(&self) -> &[u32; KEY_LEN / 4] { + &self.words + } +} + +/// Counter || Nonce, all native endian. +#[repr(transparent)] +pub struct Counter([u32; 4]); + +impl Counter { + pub fn zero(nonce: Nonce) -> Self { + Self::from_nonce_and_ctr(nonce, 0) + } + + fn from_nonce_and_ctr(nonce: Nonce, ctr: u32) -> Self { + let nonce = nonce.as_ref().chunks_fixed(); + Self([ + ctr, + u32::from_le_bytes(nonce[0]), + u32::from_le_bytes(nonce[1]), + u32::from_le_bytes(nonce[2]), + ]) + } + + pub fn increment(&mut self) -> Iv { + let iv = Iv(self.0); + self.0[0] += 1; + iv + } + + /// This is "less safe" because it hands off management of the counter to + /// the caller. + #[cfg(any( + test, + not(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86", + target_arch = "x86_64" + )) + ))] + fn into_words_less_safe(self) -> [u32; 4] { + self.0 + } +} + +/// The IV for a single block encryption. +/// +/// Intentionally not `Clone` to ensure each is used only once. +pub struct Iv([u32; 4]); + +impl Iv { + fn assume_unique_for_key(value: [u8; 16]) -> Self { + let value: &[[u8; 4]; 4] = value.chunks_fixed(); + Self(value.array_map(u32::from_le_bytes)) + } + + fn into_counter_for_single_block_less_safe(self) -> Counter { + Counter(self.0) + } +} + +pub const KEY_LEN: usize = 32; + +const BLOCK_LEN: usize = 64; + +#[cfg(test)] +mod tests { + use super::*; + use crate::{polyfill, test}; + use alloc::vec; + use core::convert::TryInto; + + const MAX_ALIGNMENT_AND_OFFSET: (usize, usize) = (15, 259); + const MAX_ALIGNMENT_AND_OFFSET_SUBSET: (usize, usize) = + if cfg!(any(debug_assertions = "false", feature = "slow_tests")) { + MAX_ALIGNMENT_AND_OFFSET + } else { + (0, 0) + }; + + #[test] + fn chacha20_test_default() { + // Always use `MAX_OFFSET` if we hav assembly code. + let max_offset = if cfg!(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86", + target_arch = "x86_64" + )) { + MAX_ALIGNMENT_AND_OFFSET + } else { + MAX_ALIGNMENT_AND_OFFSET_SUBSET + }; + chacha20_test(max_offset, Key::encrypt_within); + } + + // Smoketest the fallback implementation. + #[test] + fn chacha20_test_fallback() { + chacha20_test(MAX_ALIGNMENT_AND_OFFSET_SUBSET, fallback::chacha20_ctr32); + } + + // Verifies the encryption is successful when done on overlapping buffers. + // + // On some branches of the 32-bit x86 and ARM assembly code the in-place + // operation fails in some situations where the input/output buffers are + // not exactly overlapping. Such failures are dependent not only on the + // degree of overlapping but also the length of the data. `encrypt_within` + // works around that. + fn chacha20_test( + max_alignment_and_offset: (usize, usize), + f: impl for<'k, 'i> Fn(&'k Key, Counter, &'i mut [u8], RangeFrom), + ) { + // Reuse a buffer to avoid slowing down the tests with allocations. + let mut buf = vec![0u8; 1300]; + + test::run(test_file!("chacha_tests.txt"), move |section, test_case| { + assert_eq!(section, ""); + + let key = test_case.consume_bytes("Key"); + let key: &[u8; KEY_LEN] = key.as_slice().try_into()?; + let key = Key::new(*key, cpu::features()); + + let ctr = test_case.consume_usize("Ctr"); + let nonce = test_case.consume_bytes("Nonce"); + let input = test_case.consume_bytes("Input"); + let output = test_case.consume_bytes("Output"); + + // Run the test case over all prefixes of the input because the + // behavior of ChaCha20 implementation changes dependent on the + // length of the input. + for len in 0..=input.len() { + chacha20_test_case_inner( + &key, + &nonce, + ctr as u32, + &input[..len], + &output[..len], + &mut buf, + max_alignment_and_offset, + &f, + ); + } + + Ok(()) + }); + } + + fn chacha20_test_case_inner( + key: &Key, + nonce: &[u8], + ctr: u32, + input: &[u8], + expected: &[u8], + buf: &mut [u8], + (max_alignment, max_offset): (usize, usize), + f: &impl for<'k, 'i> Fn(&'k Key, Counter, &'i mut [u8], RangeFrom), + ) { + const ARBITRARY: u8 = 123; + + for alignment in 0..=max_alignment { + polyfill::slice::fill(&mut buf[..alignment], ARBITRARY); + let buf = &mut buf[alignment..]; + for offset in 0..=max_offset { + let buf = &mut buf[..(offset + input.len())]; + polyfill::slice::fill(&mut buf[..offset], ARBITRARY); + let src = offset..; + buf[src.clone()].copy_from_slice(input); + + let ctr = Counter::from_nonce_and_ctr( + Nonce::try_assume_unique_for_key(nonce).unwrap(), + ctr, + ); + f(key, ctr, buf, src); + assert_eq!(&buf[..input.len()], expected) + } + } + } +} diff --git a/vendor/ring/src/aead/chacha/fallback.rs b/vendor/ring/src/aead/chacha/fallback.rs new file mode 100644 index 00000000..b0d1ff70 --- /dev/null +++ b/vendor/ring/src/aead/chacha/fallback.rs @@ -0,0 +1,103 @@ +// Copyright 2021 Brian Smith. +// Portions Copyright (c) 2014, Google Inc. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Adapted from the public domain, estream code by D. Bernstein. +// Adapted from the BoringSSL crypto/chacha/chacha.c. + +use super::{Counter, Key, BLOCK_LEN}; +use crate::polyfill::ChunksFixedMut; +use core::ops::RangeFrom; + +pub(super) fn chacha20_ctr32( + key: &Key, + counter: Counter, + in_out: &mut [u8], + src: RangeFrom, +) { + const SIGMA: [u32; 4] = [ + u32::from_le_bytes(*b"expa"), + u32::from_le_bytes(*b"nd 3"), + u32::from_le_bytes(*b"2-by"), + u32::from_le_bytes(*b"te k"), + ]; + + let key = key.words_less_safe(); + let counter = counter.into_words_less_safe(); + + let mut state = [ + SIGMA[0], SIGMA[1], SIGMA[2], SIGMA[3], key[0], key[1], key[2], key[3], key[4], key[5], + key[6], key[7], counter[0], counter[1], counter[2], counter[3], + ]; + + let mut in_out_len = in_out.len().checked_sub(src.start).unwrap(); + let mut input = in_out[src].as_ptr(); + let mut output = in_out.as_mut_ptr(); + + let mut buf = [0u8; BLOCK_LEN]; + while in_out_len > 0 { + chacha_core(&mut buf, &state); + state[12] += 1; + + let todo = core::cmp::min(BLOCK_LEN, in_out_len); + for i in 0..todo { + let input = unsafe { *input.add(i) }; + let b = input ^ buf[i]; + unsafe { *output.add(i) = b }; + } + + in_out_len -= todo; + input = unsafe { input.add(todo) }; + output = unsafe { output.add(todo) }; + } +} + +// Performs 20 rounds of ChaCha on `input`, storing the result in `output`. +#[inline(always)] +fn chacha_core(output: &mut [u8; BLOCK_LEN], input: &State) { + let mut x = *input; + + for _ in (0..20).step_by(2) { + quarterround(&mut x, 0, 4, 8, 12); + quarterround(&mut x, 1, 5, 9, 13); + quarterround(&mut x, 2, 6, 10, 14); + quarterround(&mut x, 3, 7, 11, 15); + quarterround(&mut x, 0, 5, 10, 15); + quarterround(&mut x, 1, 6, 11, 12); + quarterround(&mut x, 2, 7, 8, 13); + quarterround(&mut x, 3, 4, 9, 14); + } + + for (x, input) in x.iter_mut().zip(input.iter()) { + *x = x.wrapping_add(*input); + } + + for (output, &x) in ChunksFixedMut::<[u8; 4]>::chunks_fixed_mut(output).zip(x.iter()) { + *output = u32::to_le_bytes(x) + } +} + +#[inline(always)] +fn quarterround(x: &mut State, a: usize, b: usize, c: usize, d: usize) { + #[inline(always)] + fn step(x: &mut State, a: usize, b: usize, c: usize, rotation: u32) { + x[a] = x[a].wrapping_add(x[b]); + x[c] = (x[c] ^ x[a]).rotate_left(rotation); + } + step(x, a, b, d, 16); + step(x, c, d, b, 12); + step(x, a, b, d, 8); + step(x, c, d, b, 7); +} + +type State = [u32; BLOCK_LEN / 4]; diff --git a/vendor/ring/src/aead/chacha20_poly1305.rs b/vendor/ring/src/aead/chacha20_poly1305.rs new file mode 100644 index 00000000..ef4eff6a --- /dev/null +++ b/vendor/ring/src/aead/chacha20_poly1305.rs @@ -0,0 +1,267 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use super::{ + chacha::{self, Counter, Iv}, + poly1305, Aad, Nonce, Tag, +}; +use crate::{aead, cpu, endian::*, error, polyfill}; +use core::{convert::TryInto, ops::RangeFrom}; + +/// ChaCha20-Poly1305 as described in [RFC 7539]. +/// +/// The keys are 256 bits long and the nonces are 96 bits long. +/// +/// [RFC 7539]: https://tools.ietf.org/html/rfc7539 +pub static CHACHA20_POLY1305: aead::Algorithm = aead::Algorithm { + key_len: chacha::KEY_LEN, + init: chacha20_poly1305_init, + seal: chacha20_poly1305_seal, + open: chacha20_poly1305_open, + id: aead::AlgorithmID::CHACHA20_POLY1305, + max_input_len: super::max_input_len(64, 1), +}; + +/// Copies |key| into |ctx_buf|. +fn chacha20_poly1305_init( + key: &[u8], + cpu_features: cpu::Features, +) -> Result { + let key: [u8; chacha::KEY_LEN] = key.try_into()?; + Ok(aead::KeyInner::ChaCha20Poly1305(chacha::Key::new( + key, + cpu_features, + ))) +} + +fn chacha20_poly1305_seal( + key: &aead::KeyInner, + nonce: Nonce, + aad: Aad<&[u8]>, + in_out: &mut [u8], +) -> Tag { + let chacha20_key = match key { + aead::KeyInner::ChaCha20Poly1305(key) => key, + _ => unreachable!(), + }; + + #[cfg(target_arch = "x86_64")] + { + if cpu::intel::SSE41.available(chacha20_key.cpu_features()) { + // XXX: BoringSSL uses `alignas(16)` on `key` instead of on the + // structure, but Rust can't do that yet; see + // https://github.com/rust-lang/rust/issues/73557. + // + // Keep in sync with the anonymous struct of BoringSSL's + // `chacha20_poly1305_seal_data`. + #[repr(align(16), C)] + #[derive(Clone, Copy)] + struct seal_data_in { + key: [u32; chacha::KEY_LEN / 4], + counter: u32, + nonce: [u8; super::NONCE_LEN], + extra_ciphertext: *const u8, + extra_ciphertext_len: usize, + } + + let mut data = InOut { + input: seal_data_in { + key: *chacha20_key.words_less_safe(), + counter: 0, + nonce: *nonce.as_ref(), + extra_ciphertext: core::ptr::null(), + extra_ciphertext_len: 0, + }, + }; + + // Encrypts `plaintext_len` bytes from `plaintext` and writes them to `out_ciphertext`. + extern "C" { + fn GFp_chacha20_poly1305_seal( + out_ciphertext: *mut u8, + plaintext: *const u8, + plaintext_len: usize, + ad: *const u8, + ad_len: usize, + data: &mut InOut, + ); + } + + let out = unsafe { + GFp_chacha20_poly1305_seal( + in_out.as_mut_ptr(), + in_out.as_ptr(), + in_out.len(), + aad.as_ref().as_ptr(), + aad.as_ref().len(), + &mut data, + ); + &data.out + }; + + return Tag(out.tag); + } + } + + let mut counter = Counter::zero(nonce); + let mut auth = { + let key = derive_poly1305_key(chacha20_key, counter.increment()); + poly1305::Context::from_key(key) + }; + + poly1305_update_padded_16(&mut auth, aad.as_ref()); + chacha20_key.encrypt_in_place(counter, in_out); + poly1305_update_padded_16(&mut auth, in_out); + finish(auth, aad.as_ref().len(), in_out.len()) +} + +fn chacha20_poly1305_open( + key: &aead::KeyInner, + nonce: Nonce, + aad: Aad<&[u8]>, + in_out: &mut [u8], + src: RangeFrom, +) -> Tag { + let chacha20_key = match key { + aead::KeyInner::ChaCha20Poly1305(key) => key, + _ => unreachable!(), + }; + + #[cfg(target_arch = "x86_64")] + { + if cpu::intel::SSE41.available(chacha20_key.cpu_features()) { + // XXX: BoringSSL uses `alignas(16)` on `key` instead of on the + // structure, but Rust can't do that yet; see + // https://github.com/rust-lang/rust/issues/73557. + // + // Keep in sync with the anonymous struct of BoringSSL's + // `chacha20_poly1305_open_data`. + #[derive(Copy, Clone)] + #[repr(align(16), C)] + struct open_data_in { + key: [u32; chacha::KEY_LEN / 4], + counter: u32, + nonce: [u8; super::NONCE_LEN], + } + + let mut data = InOut { + input: open_data_in { + key: *chacha20_key.words_less_safe(), + counter: 0, + nonce: *nonce.as_ref(), + }, + }; + + // Decrypts `plaintext_len` bytes from `ciphertext` and writes them to `out_plaintext`. + extern "C" { + fn GFp_chacha20_poly1305_open( + out_plaintext: *mut u8, + ciphertext: *const u8, + plaintext_len: usize, + ad: *const u8, + ad_len: usize, + data: &mut InOut, + ); + } + + let out = unsafe { + GFp_chacha20_poly1305_open( + in_out.as_mut_ptr(), + in_out.as_ptr().add(src.start), + in_out.len() - src.start, + aad.as_ref().as_ptr(), + aad.as_ref().len(), + &mut data, + ); + &data.out + }; + + return Tag(out.tag); + } + } + + let mut counter = Counter::zero(nonce); + let mut auth = { + let key = derive_poly1305_key(chacha20_key, counter.increment()); + poly1305::Context::from_key(key) + }; + + poly1305_update_padded_16(&mut auth, aad.as_ref()); + poly1305_update_padded_16(&mut auth, &in_out[src.clone()]); + chacha20_key.encrypt_within(counter, in_out, src.clone()); + finish(auth, aad.as_ref().len(), in_out[src].len()) +} + +fn finish(mut auth: poly1305::Context, aad_len: usize, in_out_len: usize) -> Tag { + auth.update( + [ + LittleEndian::from(polyfill::u64_from_usize(aad_len)), + LittleEndian::from(polyfill::u64_from_usize(in_out_len)), + ] + .as_byte_array(), + ); + auth.finish() +} + +pub type Key = chacha::Key; + +// Keep in sync with BoringSSL's `chacha20_poly1305_open_data` and +// `chacha20_poly1305_seal_data`. +#[repr(C)] +#[cfg(target_arch = "x86_64")] +union InOut +where + T: Copy, +{ + input: T, + out: Out, +} + +// It isn't obvious whether the assembly code works for tags that aren't +// 16-byte aligned. In practice it will always be 16-byte aligned because it +// is embedded in a union where the other member of the union is 16-byte +// aligned. +#[cfg(target_arch = "x86_64")] +#[derive(Clone, Copy)] +#[repr(align(16), C)] +struct Out { + tag: [u8; super::TAG_LEN], +} + +#[inline] +fn poly1305_update_padded_16(ctx: &mut poly1305::Context, input: &[u8]) { + if input.len() > 0 { + ctx.update(input); + let remainder_len = input.len() % poly1305::BLOCK_LEN; + if remainder_len != 0 { + const ZEROES: [u8; poly1305::BLOCK_LEN] = [0; poly1305::BLOCK_LEN]; + ctx.update(&ZEROES[..(poly1305::BLOCK_LEN - remainder_len)]) + } + } +} + +// Also used by chacha20_poly1305_openssh. +pub(super) fn derive_poly1305_key(chacha_key: &chacha::Key, iv: Iv) -> poly1305::Key { + let mut key_bytes = [0u8; poly1305::KEY_LEN]; + chacha_key.encrypt_iv_xor_in_place(iv, &mut key_bytes); + poly1305::Key::new(key_bytes, chacha_key.cpu_features()) +} + +#[cfg(test)] +mod tests { + #[test] + fn max_input_len_test() { + // Errata 4858 at https://www.rfc-editor.org/errata_search.php?rfc=7539. + assert_eq!(super::CHACHA20_POLY1305.max_input_len, 274_877_906_880u64); + } +} diff --git a/vendor/ring/src/aead/chacha20_poly1305_openssh.rs b/vendor/ring/src/aead/chacha20_poly1305_openssh.rs new file mode 100644 index 00000000..585914b1 --- /dev/null +++ b/vendor/ring/src/aead/chacha20_poly1305_openssh.rs @@ -0,0 +1,184 @@ +// Copyright 2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! The [chacha20-poly1305@openssh.com] AEAD-ish construct. +//! +//! This should only be used by SSH implementations. It has a similar, but +//! different API from `ring::aead` because the construct cannot use the same +//! API as `ring::aead` due to the way the construct handles the encrypted +//! packet length. +//! +//! The concatenation of a and b is denoted `a||b`. `K_1` and `K_2` are defined +//! in the [chacha20-poly1305@openssh.com] specification. `packet_length`, +//! `padding_length`, `payload`, and `random padding` are defined in +//! [RFC 4253]. The term `plaintext` is used as a shorthand for +//! `padding_length||payload||random padding`. +//! +//! [chacha20-poly1305@openssh.com]: +//! http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.chacha20poly1305?annotate=HEAD +//! [RFC 4253]: https://tools.ietf.org/html/rfc4253 + +use super::{ + chacha::{self, *}, + chacha20_poly1305::derive_poly1305_key, + cpu, poly1305, + polyfill::ChunksFixed, + Nonce, Tag, +}; +use crate::{constant_time, endian::*, error}; + +/// A key for sealing packets. +pub struct SealingKey { + key: Key, +} + +impl SealingKey { + /// Constructs a new `SealingKey`. + pub fn new(key_material: &[u8; KEY_LEN]) -> Self { + Self { + key: Key::new(key_material, cpu::features()), + } + } + + /// Seals (encrypts and signs) a packet. + /// + /// On input, `plaintext_in_ciphertext_out` must contain the unencrypted + /// `packet_length||plaintext` where `plaintext` is the + /// `padding_length||payload||random padding`. It will be overwritten by + /// `encrypted_packet_length||ciphertext`, where `encrypted_packet_length` + /// is encrypted with `K_1` and `ciphertext` is encrypted by `K_2`. + pub fn seal_in_place( + &self, + sequence_number: u32, + plaintext_in_ciphertext_out: &mut [u8], + tag_out: &mut [u8; TAG_LEN], + ) { + let mut counter = make_counter(sequence_number); + let poly_key = derive_poly1305_key(&self.key.k_2, counter.increment()); + + { + let (len_in_out, data_and_padding_in_out) = + plaintext_in_ciphertext_out.split_at_mut(PACKET_LENGTH_LEN); + + self.key + .k_1 + .encrypt_in_place(make_counter(sequence_number), len_in_out); + self.key + .k_2 + .encrypt_in_place(counter, data_and_padding_in_out); + } + + let Tag(tag) = poly1305::sign(poly_key, plaintext_in_ciphertext_out); + tag_out.copy_from_slice(tag.as_ref()); + } +} + +/// A key for opening packets. +pub struct OpeningKey { + key: Key, +} + +impl OpeningKey { + /// Constructs a new `OpeningKey`. + pub fn new(key_material: &[u8; KEY_LEN]) -> Self { + Self { + key: Key::new(key_material, cpu::features()), + } + } + + /// Returns the decrypted, but unauthenticated, packet length. + /// + /// Importantly, the result won't be authenticated until `open_in_place` is + /// called. + pub fn decrypt_packet_length( + &self, + sequence_number: u32, + encrypted_packet_length: [u8; PACKET_LENGTH_LEN], + ) -> [u8; PACKET_LENGTH_LEN] { + let mut packet_length = encrypted_packet_length; + let counter = make_counter(sequence_number); + self.key.k_1.encrypt_in_place(counter, &mut packet_length); + packet_length + } + + /// Opens (authenticates and decrypts) a packet. + /// + /// `ciphertext_in_plaintext_out` must be of the form + /// `encrypted_packet_length||ciphertext` where `ciphertext` is the + /// encrypted `plaintext`. When the function succeeds the ciphertext is + /// replaced by the plaintext and the result is `Ok(plaintext)`, where + /// `plaintext` is `&ciphertext_in_plaintext_out[PACKET_LENGTH_LEN..]`; + /// otherwise the contents of `ciphertext_in_plaintext_out` are unspecified + /// and must not be used. + pub fn open_in_place<'a>( + &self, + sequence_number: u32, + ciphertext_in_plaintext_out: &'a mut [u8], + tag: &[u8; TAG_LEN], + ) -> Result<&'a [u8], error::Unspecified> { + let mut counter = make_counter(sequence_number); + + // We must verify the tag before decrypting so that + // `ciphertext_in_plaintext_out` is unmodified if verification fails. + // This is beyond what we guarantee. + let poly_key = derive_poly1305_key(&self.key.k_2, counter.increment()); + verify(poly_key, ciphertext_in_plaintext_out, tag)?; + + let plaintext_in_ciphertext_out = &mut ciphertext_in_plaintext_out[PACKET_LENGTH_LEN..]; + self.key + .k_2 + .encrypt_in_place(counter, plaintext_in_ciphertext_out); + + Ok(plaintext_in_ciphertext_out) + } +} + +struct Key { + k_1: chacha::Key, + k_2: chacha::Key, +} + +impl Key { + fn new(key_material: &[u8; KEY_LEN], cpu_features: cpu::Features) -> Self { + // The first half becomes K_2 and the second half becomes K_1. + let &[k_2, k_1]: &[[u8; chacha::KEY_LEN]; 2] = key_material.chunks_fixed(); + Self { + k_1: chacha::Key::new(k_1, cpu_features), + k_2: chacha::Key::new(k_2, cpu_features), + } + } +} + +fn make_counter(sequence_number: u32) -> Counter { + let nonce = [ + BigEndian::ZERO, + BigEndian::ZERO, + BigEndian::from(sequence_number), + ]; + Counter::zero(Nonce::assume_unique_for_key(*(nonce.as_byte_array()))) +} + +/// The length of key. +pub const KEY_LEN: usize = chacha::KEY_LEN * 2; + +/// The length in bytes of the `packet_length` field in a SSH packet. +pub const PACKET_LENGTH_LEN: usize = 4; // 32 bits + +/// The length in bytes of an authentication tag. +pub const TAG_LEN: usize = super::TAG_LEN; + +fn verify(key: poly1305::Key, msg: &[u8], tag: &[u8; TAG_LEN]) -> Result<(), error::Unspecified> { + let Tag(calculated_tag) = poly1305::sign(key, msg); + constant_time::verify_slices_are_equal(calculated_tag.as_ref(), tag) +} diff --git a/vendor/ring/src/aead/chacha_tests.txt b/vendor/ring/src/aead/chacha_tests.txt new file mode 100644 index 00000000..207c231e --- /dev/null +++ b/vendor/ring/src/aead/chacha_tests.txt @@ -0,0 +1,5 @@ +Key = 98bef1469be7269837a45bfbc92a5a6ac762507cf96443bf33b96b1bd4c6f8f6 +Ctr = 42 +Nonce = 44e792d63335abb1582e9253 +Input = 5828d530362c605529f8e18cae151526f23a73a0f312a3885f2b74233dc90523c654491e448814d9da3715dcb7e423b39d7e166835fc026dcc8ae5dd5fe4d2566f129c9c7d6a3848bddfd9ac1ba24dc543043cd799e1a7139c51c26df9cf073be4bf93a3a9b4c5f01ae48d5fc6c47c697ade1ac1c9cfc24e7a252c32e917ba68f1375d628446f5807f1a71f7be724bb81cfe3ebdae0d730d874a31c33d466fb3d76be3b870178e7a6a0ebfa8bc2bdbfa4fb62620ee63f06d26ac6a18376e5981d160e640d56d68ba8b654af9f1ae56248fe38ee77e6fcf92dfa9753ad62e1caff2d68b39add25dfbd7df05570df7f68f2d14b04e1a3c7704cd3c5c5852106fcf5c03c85f852b058260dacccdd688bfc010b36f545442bc4b77214dee8745064c6038d27e1d306c55f038801cde3dea683ef63e59cf0d08ae8c020bc1726ab46df3f7b3ef3ab106f2f4d6697b3ea216313179b633a9ca8aa8bef3e93828d1e13b4e2e4735a461141e422c4955eae3b3ce39d3b3ef4a4d7849bdf67c0a2cd326cbd96aad6393a72992dc1faf61828074b29c4a867350d8d1ffee1ae2dda261bd10c35f679f29e4d370e5673ad22000cc251596544585ed82883b9f3bc304d423b10ddcc8269d28b3254d52e533f3ed2cb81acfc352b42fc77996147d72277285ea6d41a022136d0683a4dd0f69d201cdc6b8645c2c79d1c7d331db2cffdad06931ad835fed6a97e40043b02e97ae005f5cb9e8398010ca0cfaf0b5cdaa271160d9218693919f2d1a8ede0bb5cb052430454d1175fde5a0a94e3a8c3b525a3718054a7a096ae6d5a9a671474c50e13e8a212b4f0ee3cb72c5283e5a33ec48922ea12457090f01853b34397ec79062e2dc5d0a2c5126953a9592a5398f0c830b9d38ab982ac401c40d7713cbcaf128315275272cf00486c8f33df29d8f5552403faa227fe7693bee4409deffb0693aae74e99d33ae8b6d6004ff533f88e9639bb16d2c22155a15d9e5cb03783cca598cc8c286ffd279d6c6ec5bbba0ae0120092e385dda5de0594ee58b848fb6e0569f21a1cfb20f2c93f8cf37c19f3298216552666ed3719855b9469f1a35c4476962704b779ee421e6325a2605ba5753d79b553cbb5379609cc84df7f51d540291680eaaca5a780c289ac3ac49c0f485ee59767e284ef15c63f7ce0e2c21a058e901fdebd1afe6ef93b3955160a2744015e5f40aca6d9a37424d5a58490fe902fc77d859deddad4b992e6473ad422ff32c0d49e42e6ca47375181485bb64b4a1b06e01c0cf179cc528c32d6c172a3d065cf3b44975ad1769d4ca65ae4471a5f60d0f8e37c743ce6b08e9d134488fc9fcf35d2dec62d3f0b3fe2e40557654c7b46116cc7c1c1924e64dd4c377671f3c7479a1f885881d6fa47e2c219f49f5aa4ef34afa9dbef6cedab5ab39bd1641a94aac0901ca +Output = 54306a13da596b6d5949c8c5ab26d48aadc03daf14b915b8cadf17a703d3c50601ef21dda30b9e48b85e0b879f9523688569d25daf57e927113d49faf108cc15ec1d1916129bc8661ffa2c93f4991127310ed8464740117001cae85bc591c83adcaaf34b80e5bc03d08972bcce2a760cf5da4c10063541b1e6b4aa7aeff0624ac59f2cafb82fd9d1017a362f3e83a5eb8170a0571746ea9ecb0e74d344571d4006f8b7cb5ff479bd1119d6eef8b0aadd0062ad3b889a885b1b07c9ae9ea694e555db4523b92ccd29d354c3881e5f52f2090026261aedf5c2a97df9215aaf6dab8e168496b54fcf1ea3af089f7986c3be0c70cb8ff3c5f8e84b217d18a9ed8bfb6b5a6f260b56047cfe0e1ec13f82c573bd530cf0e2c9f33d1b6dba70c16db60028e1c4786204da2386c3da743d7cd67629b2272eb235426082cf302c59e4e3d0741f58e8da4745731c0593ae75be1f81d8b7b3fffc8b529eed8b379fe0b8a266e16ac51f1df0de3f3db028f3aa4e4d31b026792b080fe92f79b3c8dda789a8a81d590e4f1e931f707f4e7efeb8ca63e0a605ccd7de2a4931785c5f44b29b91991429630912dd02d97be9f51207d0e7e6e8dddaa473c48ebd7bb7bbcb832f43f61c50ae9b2e52801885a823527a6af74236ca915a3d2aa0357d70fc4c187c5772cf9b29d6d0b4d7e6897069225e45094d4987845f8a5fe415d3e372afb2309cc1ff8e6d2a769e08037ee0c3c297066b332b08e3d50bd832676110ed6bed50efd71c1be06da16419342fe4e854bf840edf0e8bd8dd7796b854abf295590d0d0a156e01f224aba0d8df38ea97587688beaf45e3564f68e84be72b22189682892534d1dd08ea7e21ef575543f7faca1cde992e8bd8c3cf894dfc3b7d4ac999c431b67aaef849b246c1600575f33df2c984a4b98a872a875c0abc517d9af5c9242d5ee6c6e3cd7ee4af8a6c0004c8d7a5adfab2084a269b7cd0c613b1b9653f7030f9989d879957713eb1c324f0a6a2609d66d25faee39487ead1ea0d2a77ef31ccebf90cdc9c1280bbb08eab9a04cd4b954f7a0b537c16cc0eb17310ddaa769490d98b664131ed8c7d74c433fac3438d10bc844d0e9532df17436dd25e12b9ed33d9976f4acdc3cd8134be7ea2d0a7915d90f65e4a250fcc24ebe1e4626c8f4536975dda202b86008c94a96a69b2e9bb828e4195b4b7f15552303948b32582a9102789b5e51fab723c7008cee661bf19c8902b29303eb84c33f0f0152eb725ca994b6f4b4150ee5699cf2ba4c47c5ca6d467045c5d5f269e0fe258684c30cdef46db376fbbc480ca8a545d719d0ce8b82c109044a4883fbc153cd2ca0ec3e46eefb0cbfd617c27f225ea716df7499c8127f06133cf5568d373a4ed35652af23ecf9098546d956a0c9c240eb4b79b8d6e1cbceb171086da916d894cebf5508f40cf4a diff --git a/vendor/ring/src/aead/gcm.rs b/vendor/ring/src/aead/gcm.rs new file mode 100644 index 00000000..b8f7b791 --- /dev/null +++ b/vendor/ring/src/aead/gcm.rs @@ -0,0 +1,356 @@ +// Copyright 2018 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use super::{ + block::{Block, BLOCK_LEN}, + Aad, +}; +use crate::cpu; +use core::ops::BitXorAssign; + +#[cfg(not(target_arch = "aarch64"))] +mod gcm_nohw; + +pub struct Key { + h_table: HTable, + cpu_features: cpu::Features, +} + +impl Key { + pub(super) fn new(h_be: Block, cpu_features: cpu::Features) -> Self { + let h: [u64; 2] = h_be.into(); + + let mut key = Self { + h_table: HTable { + Htable: [u128 { hi: 0, lo: 0 }; HTABLE_LEN], + }, + cpu_features, + }; + let h_table = &mut key.h_table; + + match detect_implementation(cpu_features) { + #[cfg(target_arch = "x86_64")] + Implementation::CLMUL if has_avx_movbe(cpu_features) => { + extern "C" { + fn GFp_gcm_init_avx(HTable: &mut HTable, h: &[u64; 2]); + } + unsafe { + GFp_gcm_init_avx(h_table, &h); + } + } + + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + ))] + Implementation::CLMUL => { + extern "C" { + fn GFp_gcm_init_clmul(Htable: &mut HTable, h: &[u64; 2]); + } + unsafe { + GFp_gcm_init_clmul(h_table, &h); + } + } + + #[cfg(any(target_arch = "aarch64", target_arch = "arm"))] + Implementation::NEON => { + extern "C" { + fn GFp_gcm_init_neon(Htable: &mut HTable, h: &[u64; 2]); + } + unsafe { + GFp_gcm_init_neon(h_table, &h); + } + } + + #[cfg(not(target_arch = "aarch64"))] + Implementation::Fallback => { + h_table.Htable[0] = gcm_nohw::init(h); + } + } + + key + } +} + +pub struct Context { + inner: ContextInner, + cpu_features: cpu::Features, +} + +impl Context { + pub(crate) fn new(key: &Key, aad: Aad<&[u8]>) -> Self { + let mut ctx = Self { + inner: ContextInner { + Xi: Xi(Block::zero()), + _unused: Block::zero(), + Htable: key.h_table.clone(), + }, + cpu_features: key.cpu_features, + }; + + for ad in aad.0.chunks(BLOCK_LEN) { + let mut block = Block::zero(); + block.overwrite_part_at(0, ad); + ctx.update_block(block); + } + + ctx + } + + /// Access to `inner` for the integrated AES-GCM implementations only. + #[cfg(target_arch = "x86_64")] + #[inline] + pub(super) fn inner(&mut self) -> &mut ContextInner { + &mut self.inner + } + + pub fn update_blocks(&mut self, input: &[u8]) { + // Th assembly functions take the input length in bytes, not blocks. + let input_bytes = input.len(); + + debug_assert_eq!(input_bytes % BLOCK_LEN, 0); + debug_assert!(input_bytes > 0); + + let input = input.as_ptr() as *const [u8; BLOCK_LEN]; + let input = unsafe { core::slice::from_raw_parts(input, input_bytes / BLOCK_LEN) }; + + // Although these functions take `Xi` and `h_table` as separate + // parameters, one or more of them might assume that they are part of + // the same `ContextInner` structure. + let xi = &mut self.inner.Xi; + let h_table = &self.inner.Htable; + + match detect_implementation(self.cpu_features) { + #[cfg(target_arch = "x86_64")] + Implementation::CLMUL if has_avx_movbe(self.cpu_features) => { + extern "C" { + fn GFp_gcm_ghash_avx( + xi: &mut Xi, + Htable: &HTable, + inp: *const [u8; BLOCK_LEN], + len: crate::c::size_t, + ); + } + unsafe { + GFp_gcm_ghash_avx(xi, h_table, input.as_ptr(), input_bytes); + } + } + + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + ))] + Implementation::CLMUL => { + extern "C" { + fn GFp_gcm_ghash_clmul( + xi: &mut Xi, + Htable: &HTable, + inp: *const [u8; BLOCK_LEN], + len: crate::c::size_t, + ); + } + unsafe { + GFp_gcm_ghash_clmul(xi, h_table, input.as_ptr(), input_bytes); + } + } + + #[cfg(any(target_arch = "aarch64", target_arch = "arm"))] + Implementation::NEON => { + extern "C" { + fn GFp_gcm_ghash_neon( + xi: &mut Xi, + Htable: &HTable, + inp: *const [u8; BLOCK_LEN], + len: crate::c::size_t, + ); + } + unsafe { + GFp_gcm_ghash_neon(xi, h_table, input.as_ptr(), input_bytes); + } + } + + #[cfg(not(target_arch = "aarch64"))] + Implementation::Fallback => { + gcm_nohw::ghash(xi, h_table.Htable[0], input); + } + } + } + + pub fn update_block(&mut self, a: Block) { + self.inner.Xi.bitxor_assign(a); + + // Although these functions take `Xi` and `h_table` as separate + // parameters, one or more of them might assume that they are part of + // the same `ContextInner` structure. + let xi = &mut self.inner.Xi; + let h_table = &self.inner.Htable; + + match detect_implementation(self.cpu_features) { + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + ))] + Implementation::CLMUL => { + extern "C" { + fn GFp_gcm_gmult_clmul(xi: &mut Xi, Htable: &HTable); + } + unsafe { + GFp_gcm_gmult_clmul(xi, h_table); + } + } + + #[cfg(any(target_arch = "aarch64", target_arch = "arm"))] + Implementation::NEON => { + extern "C" { + fn GFp_gcm_gmult_neon(xi: &mut Xi, Htable: &HTable); + } + unsafe { + GFp_gcm_gmult_neon(xi, h_table); + } + } + + #[cfg(not(target_arch = "aarch64"))] + Implementation::Fallback => { + gcm_nohw::gmult(xi, h_table.Htable[0]); + } + } + } + + pub(super) fn pre_finish(self, f: F) -> super::Tag + where + F: FnOnce(Block) -> super::Tag, + { + f(self.inner.Xi.0) + } + + #[cfg(target_arch = "x86_64")] + pub(super) fn is_avx2(&self) -> bool { + match detect_implementation(self.cpu_features) { + Implementation::CLMUL => has_avx_movbe(self.cpu_features), + _ => false, + } + } +} + +// The alignment is required by non-Rust code that uses `GCM128_CONTEXT`. +#[derive(Clone)] +#[repr(C, align(16))] +struct HTable { + Htable: [u128; HTABLE_LEN], +} + +#[derive(Clone, Copy)] +#[repr(C)] +struct u128 { + hi: u64, + lo: u64, +} + +const HTABLE_LEN: usize = 16; + +#[repr(transparent)] +pub struct Xi(Block); + +impl BitXorAssign for Xi { + #[inline] + fn bitxor_assign(&mut self, a: Block) { + self.0 ^= a; + } +} + +impl From for Block { + #[inline] + fn from(Xi(block): Xi) -> Self { + block + } +} + +// This corresponds roughly to the `GCM128_CONTEXT` structure in BoringSSL. +// Some assembly language code, in particular the MOVEBE+AVX2 X86-64 +// implementation, requires this exact layout. +#[repr(C, align(16))] +pub(super) struct ContextInner { + Xi: Xi, + _unused: Block, + Htable: HTable, +} + +enum Implementation { + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + ))] + CLMUL, + + #[cfg(any(target_arch = "aarch64", target_arch = "arm"))] + NEON, + + #[cfg(not(target_arch = "aarch64"))] + Fallback, +} + +#[inline] +fn detect_implementation(cpu_features: cpu::Features) -> Implementation { + // `cpu_features` is only used for specific platforms. + #[cfg(not(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + )))] + let _cpu_features = cpu_features; + + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + ))] + { + if (cpu::intel::FXSR.available(cpu_features) + && cpu::intel::PCLMULQDQ.available(cpu_features)) + || cpu::arm::PMULL.available(cpu_features) + { + return Implementation::CLMUL; + } + } + + #[cfg(target_arch = "arm")] + { + if cpu::arm::NEON.available(cpu_features) { + return Implementation::NEON; + } + } + + #[cfg(target_arch = "aarch64")] + { + return Implementation::NEON; + } + + #[cfg(not(target_arch = "aarch64"))] + Implementation::Fallback +} + +#[cfg(target_arch = "x86_64")] +fn has_avx_movbe(cpu_features: cpu::Features) -> bool { + cpu::intel::AVX.available(cpu_features) && cpu::intel::MOVBE.available(cpu_features) +} diff --git a/vendor/ring/src/aead/gcm/gcm_nohw.rs b/vendor/ring/src/aead/gcm/gcm_nohw.rs new file mode 100644 index 00000000..8effbd4b --- /dev/null +++ b/vendor/ring/src/aead/gcm/gcm_nohw.rs @@ -0,0 +1,242 @@ +// Copyright (c) 2019, Google Inc. +// Portions Copyright 2020 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +// This file is based on BoringSSL's gcm_nohw.c. + +// This file contains a constant-time implementation of GHASH based on the notes +// in https://bearssl.org/constanttime.html#ghash-for-gcm and the reduction +// algorithm described in +// https://crypto.stanford.edu/RealWorldCrypto/slides/gueron.pdf. +// +// Unlike the BearSSL notes, we use u128 in the 64-bit implementation. + +use super::{Block, Xi, BLOCK_LEN}; +use crate::polyfill::ChunksFixed; + +#[cfg(target_pointer_width = "64")] +fn gcm_mul64_nohw(a: u64, b: u64) -> (u64, u64) { + #[inline(always)] + fn lo(a: u128) -> u64 { + a as u64 + } + + #[inline(always)] + fn hi(a: u128) -> u64 { + lo(a >> 64) + } + + #[inline(always)] + fn mul(a: u64, b: u64) -> u128 { + u128::from(a) * u128::from(b) + } + + // One term every four bits means the largest term is 64/4 = 16, which barely + // overflows into the next term. Using one term every five bits would cost 25 + // multiplications instead of 16. It is faster to mask off the bottom four + // bits of |a|, giving a largest term of 60/4 = 15, and apply the bottom bits + // separately. + let a0 = a & 0x1111111111111110; + let a1 = a & 0x2222222222222220; + let a2 = a & 0x4444444444444440; + let a3 = a & 0x8888888888888880; + + let b0 = b & 0x1111111111111111; + let b1 = b & 0x2222222222222222; + let b2 = b & 0x4444444444444444; + let b3 = b & 0x8888888888888888; + + let c0 = mul(a0, b0) ^ mul(a1, b3) ^ mul(a2, b2) ^ mul(a3, b1); + let c1 = mul(a0, b1) ^ mul(a1, b0) ^ mul(a2, b3) ^ mul(a3, b2); + let c2 = mul(a0, b2) ^ mul(a1, b1) ^ mul(a2, b0) ^ mul(a3, b3); + let c3 = mul(a0, b3) ^ mul(a1, b2) ^ mul(a2, b1) ^ mul(a3, b0); + + // Multiply the bottom four bits of |a| with |b|. + let a0_mask = 0u64.wrapping_sub(a & 1); + let a1_mask = 0u64.wrapping_sub((a >> 1) & 1); + let a2_mask = 0u64.wrapping_sub((a >> 2) & 1); + let a3_mask = 0u64.wrapping_sub((a >> 3) & 1); + let extra = u128::from(a0_mask & b) + ^ (u128::from(a1_mask & b) << 1) + ^ (u128::from(a2_mask & b) << 2) + ^ (u128::from(a3_mask & b) << 3); + + let lo = (lo(c0) & 0x1111111111111111) + ^ (lo(c1) & 0x2222222222222222) + ^ (lo(c2) & 0x4444444444444444) + ^ (lo(c3) & 0x8888888888888888) + ^ lo(extra); + let hi = (hi(c0) & 0x1111111111111111) + ^ (hi(c1) & 0x2222222222222222) + ^ (hi(c2) & 0x4444444444444444) + ^ (hi(c3) & 0x8888888888888888) + ^ hi(extra); + (lo, hi) +} + +#[cfg(not(target_pointer_width = "64"))] +fn gcm_mul32_nohw(a: u32, b: u32) -> u64 { + #[inline(always)] + fn mul(a: u32, b: u32) -> u64 { + u64::from(a) * u64::from(b) + } + + // One term every four bits means the largest term is 32/4 = 8, which does not + // overflow into the next term. + let a0 = a & 0x11111111; + let a1 = a & 0x22222222; + let a2 = a & 0x44444444; + let a3 = a & 0x88888888; + + let b0 = b & 0x11111111; + let b1 = b & 0x22222222; + let b2 = b & 0x44444444; + let b3 = b & 0x88888888; + + let c0 = mul(a0, b0) ^ mul(a1, b3) ^ mul(a2, b2) ^ mul(a3, b1); + let c1 = mul(a0, b1) ^ mul(a1, b0) ^ mul(a2, b3) ^ mul(a3, b2); + let c2 = mul(a0, b2) ^ mul(a1, b1) ^ mul(a2, b0) ^ mul(a3, b3); + let c3 = mul(a0, b3) ^ mul(a1, b2) ^ mul(a2, b1) ^ mul(a3, b0); + + (c0 & 0x1111111111111111) + | (c1 & 0x2222222222222222) + | (c2 & 0x4444444444444444) + | (c3 & 0x8888888888888888) +} + +#[cfg(not(target_pointer_width = "64"))] +fn gcm_mul64_nohw(a: u64, b: u64) -> (u64, u64) { + #[inline(always)] + fn lo(a: u64) -> u32 { + a as u32 + } + #[inline(always)] + fn hi(a: u64) -> u32 { + lo(a >> 32) + } + + let a0 = lo(a); + let a1 = hi(a); + let b0 = lo(b); + let b1 = hi(b); + // Karatsuba multiplication. + let lo = gcm_mul32_nohw(a0, b0); + let hi = gcm_mul32_nohw(a1, b1); + let mid = gcm_mul32_nohw(a0 ^ a1, b0 ^ b1) ^ lo ^ hi; + (lo ^ (mid << 32), hi ^ (mid >> 32)) +} + +pub(super) fn init(xi: [u64; 2]) -> super::u128 { + // We implement GHASH in terms of POLYVAL, as described in RFC8452. This + // avoids a shift by 1 in the multiplication, needed to account for bit + // reversal losing a bit after multiplication, that is, + // rev128(X) * rev128(Y) = rev255(X*Y). + // + // Per Appendix A, we run mulX_POLYVAL. Note this is the same transformation + // applied by |gcm_init_clmul|, etc. Note |Xi| has already been byteswapped. + // + // See also slide 16 of + // https://crypto.stanford.edu/RealWorldCrypto/slides/gueron.pdf + let mut lo = xi[1]; + let mut hi = xi[0]; + + let mut carry = hi >> 63; + carry = 0u64.wrapping_sub(carry); + + hi <<= 1; + hi |= lo >> 63; + lo <<= 1; + + // The irreducible polynomial is 1 + x^121 + x^126 + x^127 + x^128, so we + // conditionally add 0xc200...0001. + lo ^= carry & 1; + hi ^= carry & 0xc200000000000000; + + // This implementation does not use the rest of |Htable|. + super::u128 { lo, hi } +} + +fn gcm_polyval_nohw(xi: &mut [u64; 2], h: super::u128) { + // Karatsuba multiplication. The product of |Xi| and |H| is stored in |r0| + // through |r3|. Note there is no byte or bit reversal because we are + // evaluating POLYVAL. + let (r0, mut r1) = gcm_mul64_nohw(xi[0], h.lo); + let (mut r2, mut r3) = gcm_mul64_nohw(xi[1], h.hi); + let (mut mid0, mut mid1) = gcm_mul64_nohw(xi[0] ^ xi[1], h.hi ^ h.lo); + mid0 ^= r0 ^ r2; + mid1 ^= r1 ^ r3; + r2 ^= mid1; + r1 ^= mid0; + + // Now we multiply our 256-bit result by x^-128 and reduce. |r2| and + // |r3| shifts into position and we must multiply |r0| and |r1| by x^-128. We + // have: + // + // 1 = x^121 + x^126 + x^127 + x^128 + // x^-128 = x^-7 + x^-2 + x^-1 + 1 + // + // This is the GHASH reduction step, but with bits flowing in reverse. + + // The x^-7, x^-2, and x^-1 terms shift bits past x^0, which would require + // another reduction steps. Instead, we gather the excess bits, incorporate + // them into |r0| and |r1| and reduce once. See slides 17-19 + // of https://crypto.stanford.edu/RealWorldCrypto/slides/gueron.pdf. + r1 ^= (r0 << 63) ^ (r0 << 62) ^ (r0 << 57); + + // 1 + r2 ^= r0; + r3 ^= r1; + + // x^-1 + r2 ^= r0 >> 1; + r2 ^= r1 << 63; + r3 ^= r1 >> 1; + + // x^-2 + r2 ^= r0 >> 2; + r2 ^= r1 << 62; + r3 ^= r1 >> 2; + + // x^-7 + r2 ^= r0 >> 7; + r2 ^= r1 << 57; + r3 ^= r1 >> 7; + + *xi = [r2, r3]; +} + +pub(super) fn gmult(xi: &mut Xi, h: super::u128) { + with_swapped_xi(xi, |swapped| { + gcm_polyval_nohw(swapped, h); + }) +} + +pub(super) fn ghash(xi: &mut Xi, h: super::u128, input: &[[u8; BLOCK_LEN]]) { + with_swapped_xi(xi, |swapped| { + input.iter().for_each(|input| { + let input: &[[u8; 8]; 2] = input.chunks_fixed(); + swapped[0] ^= u64::from_be_bytes(input[1]); + swapped[1] ^= u64::from_be_bytes(input[0]); + gcm_polyval_nohw(swapped, h); + }); + }); +} + +#[inline] +fn with_swapped_xi(Xi(xi): &mut Xi, f: impl FnOnce(&mut [u64; 2])) { + let unswapped: [u64; 2] = (*xi).into(); + let mut swapped: [u64; 2] = [unswapped[1], unswapped[0]]; + f(&mut swapped); + *xi = Block::from([swapped[1], swapped[0]]) +} diff --git a/vendor/ring/src/aead/less_safe_key.rs b/vendor/ring/src/aead/less_safe_key.rs new file mode 100644 index 00000000..55bb6162 --- /dev/null +++ b/vendor/ring/src/aead/less_safe_key.rs @@ -0,0 +1,191 @@ +// Copyright 2015-2021 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use super::{Aad, Algorithm, KeyInner, Nonce, Tag, UnboundKey, TAG_LEN}; +use crate::{constant_time, cpu, error, polyfill}; +use core::ops::RangeFrom; + +/// Immutable keys for use in situations where `OpeningKey`/`SealingKey` and +/// `NonceSequence` cannot reasonably be used. +/// +/// Prefer to use `OpeningKey`/`SealingKey` and `NonceSequence` when practical. +pub struct LessSafeKey { + inner: KeyInner, + algorithm: &'static Algorithm, +} + +impl LessSafeKey { + /// Constructs a `LessSafeKey`. + #[inline] + pub fn new(key: UnboundKey) -> Self { + key.into_inner() + } + + pub(super) fn new_( + algorithm: &'static Algorithm, + key_bytes: &[u8], + ) -> Result { + let cpu_features = cpu::features(); + Ok(Self { + inner: (algorithm.init)(key_bytes, cpu_features)?, + algorithm, + }) + } + + /// Like [`OpeningKey::open_in_place()`], except it accepts an arbitrary nonce. + /// + /// `nonce` must be unique for every use of the key to open data. + #[inline] + pub fn open_in_place<'in_out, A>( + &self, + nonce: Nonce, + aad: Aad, + in_out: &'in_out mut [u8], + ) -> Result<&'in_out mut [u8], error::Unspecified> + where + A: AsRef<[u8]>, + { + self.open_within(nonce, aad, in_out, 0..) + } + + /// Like [`OpeningKey::open_within()`], except it accepts an arbitrary nonce. + /// + /// `nonce` must be unique for every use of the key to open data. + #[inline] + pub fn open_within<'in_out, A>( + &self, + nonce: Nonce, + aad: Aad, + in_out: &'in_out mut [u8], + ciphertext_and_tag: RangeFrom, + ) -> Result<&'in_out mut [u8], error::Unspecified> + where + A: AsRef<[u8]>, + { + open_within_( + self, + nonce, + Aad::from(aad.as_ref()), + in_out, + ciphertext_and_tag, + ) + } + + /// Like [`SealingKey::seal_in_place_append_tag()`], except it accepts an + /// arbitrary nonce. + /// + /// `nonce` must be unique for every use of the key to seal data. + #[inline] + pub fn seal_in_place_append_tag( + &self, + nonce: Nonce, + aad: Aad, + in_out: &mut InOut, + ) -> Result<(), error::Unspecified> + where + A: AsRef<[u8]>, + InOut: AsMut<[u8]> + for<'in_out> Extend<&'in_out u8>, + { + self.seal_in_place_separate_tag(nonce, aad, in_out.as_mut()) + .map(|tag| in_out.extend(tag.as_ref())) + } + + /// Like `SealingKey::seal_in_place_separate_tag()`, except it accepts an + /// arbitrary nonce. + /// + /// `nonce` must be unique for every use of the key to seal data. + #[inline] + pub fn seal_in_place_separate_tag( + &self, + nonce: Nonce, + aad: Aad, + in_out: &mut [u8], + ) -> Result + where + A: AsRef<[u8]>, + { + seal_in_place_separate_tag_(&self, nonce, Aad::from(aad.as_ref()), in_out) + } + + /// The key's AEAD algorithm. + #[inline] + pub fn algorithm(&self) -> &'static Algorithm { + &self.algorithm + } + + pub(super) fn fmt_debug( + &self, + type_name: &'static str, + f: &mut core::fmt::Formatter, + ) -> Result<(), core::fmt::Error> { + f.debug_struct(type_name) + .field("algorithm", &self.algorithm()) + .finish() + } +} + +fn open_within_<'in_out>( + key: &LessSafeKey, + nonce: Nonce, + aad: Aad<&[u8]>, + in_out: &'in_out mut [u8], + src: RangeFrom, +) -> Result<&'in_out mut [u8], error::Unspecified> { + let ciphertext_and_tag_len = in_out + .len() + .checked_sub(src.start) + .ok_or(error::Unspecified)?; + let ciphertext_len = ciphertext_and_tag_len + .checked_sub(TAG_LEN) + .ok_or(error::Unspecified)?; + check_per_nonce_max_bytes(key.algorithm, ciphertext_len)?; + let (in_out, received_tag) = in_out.split_at_mut(src.start + ciphertext_len); + let Tag(calculated_tag) = (key.algorithm.open)(&key.inner, nonce, aad, in_out, src); + if constant_time::verify_slices_are_equal(calculated_tag.as_ref(), received_tag).is_err() { + // Zero out the plaintext so that it isn't accidentally leaked or used + // after verification fails. It would be safest if we could check the + // tag before decrypting, but some `open` implementations interleave + // authentication with decryption for performance. + for b in &mut in_out[..ciphertext_len] { + *b = 0; + } + return Err(error::Unspecified); + } + // `ciphertext_len` is also the plaintext length. + Ok(&mut in_out[..ciphertext_len]) +} + +#[inline] +pub(super) fn seal_in_place_separate_tag_( + key: &LessSafeKey, + nonce: Nonce, + aad: Aad<&[u8]>, + in_out: &mut [u8], +) -> Result { + check_per_nonce_max_bytes(key.algorithm(), in_out.len())?; + Ok((key.algorithm.seal)(&key.inner, nonce, aad, in_out)) +} + +fn check_per_nonce_max_bytes(alg: &Algorithm, in_out_len: usize) -> Result<(), error::Unspecified> { + if polyfill::u64_from_usize(in_out_len) > alg.max_input_len { + return Err(error::Unspecified); + } + Ok(()) +} + +impl core::fmt::Debug for LessSafeKey { + fn fmt(&self, f: &mut core::fmt::Formatter) -> Result<(), core::fmt::Error> { + self.fmt_debug("LessSafeKey", f) + } +} diff --git a/vendor/ring/src/aead/nonce.rs b/vendor/ring/src/aead/nonce.rs new file mode 100644 index 00000000..890eaeea --- /dev/null +++ b/vendor/ring/src/aead/nonce.rs @@ -0,0 +1,52 @@ +// Copyright 2018 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use crate::error; +use core::convert::TryInto; + +/// A nonce for a single AEAD opening or sealing operation. +/// +/// The user must ensure, for a particular key, that each nonce is unique. +/// +/// `Nonce` intentionally doesn't implement `Clone` to ensure that each one is +/// consumed at most once. +pub struct Nonce([u8; NONCE_LEN]); + +impl Nonce { + /// Constructs a `Nonce` with the given value, assuming that the value is + /// unique for the lifetime of the key it is being used with. + /// + /// Fails if `value` isn't `NONCE_LEN` bytes long. + #[inline] + pub fn try_assume_unique_for_key(value: &[u8]) -> Result { + let value: &[u8; NONCE_LEN] = value.try_into()?; + Ok(Self::assume_unique_for_key(*value)) + } + + /// Constructs a `Nonce` with the given value, assuming that the value is + /// unique for the lifetime of the key it is being used with. + #[inline] + pub fn assume_unique_for_key(value: [u8; NONCE_LEN]) -> Self { + Self(value) + } +} + +impl AsRef<[u8; NONCE_LEN]> for Nonce { + fn as_ref(&self) -> &[u8; NONCE_LEN] { + &self.0 + } +} + +/// All the AEADs we support use 96-bit nonces. +pub const NONCE_LEN: usize = 96 / 8; diff --git a/vendor/ring/src/aead/opening_key.rs b/vendor/ring/src/aead/opening_key.rs new file mode 100644 index 00000000..f3e53d48 --- /dev/null +++ b/vendor/ring/src/aead/opening_key.rs @@ -0,0 +1,143 @@ +// Copyright 2015-2021 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Authenticated Encryption with Associated Data (AEAD). +//! +//! See [Authenticated encryption: relations among notions and analysis of the +//! generic composition paradigm][AEAD] for an introduction to the concept of +//! AEADs. +//! +//! [AEAD]: http://www-cse.ucsd.edu/~mihir/papers/oem.html +//! [`crypto.cipher.AEAD`]: https://golang.org/pkg/crypto/cipher/#AEAD + +use super::{Aad, Algorithm, BoundKey, LessSafeKey, NonceSequence, UnboundKey}; +use crate::error; +use core::ops::RangeFrom; + +/// An AEAD key for authenticating and decrypting ("opening"), bound to a nonce +/// sequence. +/// +/// Intentionally not `Clone` or `Copy` since cloning would allow duplication +/// of the nonce sequence. +pub struct OpeningKey { + key: LessSafeKey, + nonce_sequence: N, +} + +impl BoundKey for OpeningKey { + fn new(key: UnboundKey, nonce_sequence: N) -> Self { + Self { + key: key.into_inner(), + nonce_sequence, + } + } + + #[inline] + fn algorithm(&self) -> &'static Algorithm { + self.key.algorithm() + } +} + +impl core::fmt::Debug for OpeningKey { + fn fmt(&self, f: &mut core::fmt::Formatter) -> Result<(), core::fmt::Error> { + self.key.fmt_debug("OpeningKey", f) + } +} + +impl OpeningKey { + /// Authenticates and decrypts (“opensâ€) data in place. + /// + /// `aad` is the additional authenticated data (AAD), if any. + /// + /// On input, `in_out` must be the ciphertext followed by the tag. When + /// `open_in_place()` returns `Ok(plaintext)`, the input ciphertext + /// has been overwritten by the plaintext; `plaintext` will refer to the + /// plaintext without the tag. + /// + /// When `open_in_place()` returns `Err(..)`, `in_out` may have been + /// overwritten in an unspecified way. + #[inline] + pub fn open_in_place<'in_out, A>( + &mut self, + aad: Aad, + in_out: &'in_out mut [u8], + ) -> Result<&'in_out mut [u8], error::Unspecified> + where + A: AsRef<[u8]>, + { + self.key + .open_in_place(self.nonce_sequence.advance()?, aad, in_out) + } + + /// Authenticates and decrypts (“opensâ€) data in place, with a shift. + /// + /// `aad` is the additional authenticated data (AAD), if any. + /// + /// On input, `in_out[ciphertext_and_tag]` must be the ciphertext followed + /// by the tag. When `open_within()` returns `Ok(plaintext)`, the plaintext + /// will be at `in_out[0..plaintext.len()]`. In other words, the following + /// two code fragments are equivalent for valid values of + /// `ciphertext_and_tag`, except `open_within` will often be more efficient: + /// + /// + /// ```skip + /// let plaintext = key.open_within(aad, in_out, cipertext_and_tag)?; + /// ``` + /// + /// ```skip + /// let ciphertext_and_tag_len = in_out[ciphertext_and_tag].len(); + /// in_out.copy_within(ciphertext_and_tag, 0); + /// let plaintext = key.open_in_place(aad, &mut in_out[..ciphertext_and_tag_len])?; + /// ``` + /// + /// Similarly, `key.open_within(aad, in_out, 0..)` is equivalent to + /// `key.open_in_place(aad, in_out)`. + /// + /// When `open_in_place()` returns `Err(..)`, `in_out` may have been + /// overwritten in an unspecified way. + /// + /// The shifting feature is useful in the case where multiple packets are + /// being reassembled in place. Consider this example where the peer has + /// sent the message “Split stream reassembled in place†split into + /// three sealed packets: + /// + /// ```ascii-art + /// Packet 1 Packet 2 Packet 3 + /// Input: [Header][Ciphertext][Tag][Header][Ciphertext][Tag][Header][Ciphertext][Tag] + /// | +--------------+ | + /// +------+ +-----+ +----------------------------------+ + /// v v v + /// Output: [Plaintext][Plaintext][Plaintext] + /// “Split stream reassembled in place†+ /// ``` + /// + /// This reassembly can be accomplished with three calls to `open_within()`. + #[inline] + pub fn open_within<'in_out, A>( + &mut self, + aad: Aad, + in_out: &'in_out mut [u8], + ciphertext_and_tag: RangeFrom, + ) -> Result<&'in_out mut [u8], error::Unspecified> + where + A: AsRef<[u8]>, + { + self.key.open_within( + self.nonce_sequence.advance()?, + aad, + in_out, + ciphertext_and_tag, + ) + } +} diff --git a/vendor/ring/src/aead/poly1305.rs b/vendor/ring/src/aead/poly1305.rs new file mode 100644 index 00000000..37922a72 --- /dev/null +++ b/vendor/ring/src/aead/poly1305.rs @@ -0,0 +1,155 @@ +// Copyright 2015-2016 Brian Smith. +// Portions Copyright (c) 2014, 2015, Google Inc. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +// TODO: enforce maximum input length. + +use super::{Tag, TAG_LEN}; +use crate::{c, cpu}; + +/// A Poly1305 key. +pub(super) struct Key { + key_and_nonce: [u8; KEY_LEN], + cpu_features: cpu::Features, +} + +pub(super) const BLOCK_LEN: usize = 16; +pub(super) const KEY_LEN: usize = 2 * BLOCK_LEN; + +impl Key { + #[inline] + pub(super) fn new(key_and_nonce: [u8; KEY_LEN], cpu_features: cpu::Features) -> Self { + Self { + key_and_nonce, + cpu_features, + } + } +} + +pub struct Context { + state: poly1305_state, + #[allow(dead_code)] + cpu_features: cpu::Features, +} + +// Keep in sync with `poly1305_state` in GFp/poly1305.h. +// +// The C code, in particular the way the `poly1305_aligned_state` functions +// are used, is only correct when the state buffer is 64-byte aligned. +#[repr(C, align(64))] +struct poly1305_state([u8; OPAQUE_LEN]); +const OPAQUE_LEN: usize = 512; + +// Abstracts the dispatching logic that chooses the NEON implementation if and +// only if it would work. +macro_rules! dispatch { + ( $features:expr => + ( $f:ident | $neon_f:ident ) + ( $( $p:ident : $t:ty ),+ ) + ( $( $a:expr ),+ ) ) => { + match () { + // Apple's 32-bit ARM ABI is incompatible with the assembly code. + #[cfg(all(target_arch = "arm", not(target_vendor = "apple")))] + () if cpu::arm::NEON.available($features) => { + extern "C" { + fn $neon_f( $( $p : $t ),+ ); + } + unsafe { $neon_f( $( $a ),+ ) } + } + () => { + extern "C" { + fn $f( $( $p : $t ),+ ); + } + unsafe { $f( $( $a ),+ ) } + } + } + } +} + +impl Context { + #[inline] + pub(super) fn from_key( + Key { + key_and_nonce, + cpu_features, + }: Key, + ) -> Self { + let mut ctx = Self { + state: poly1305_state([0u8; OPAQUE_LEN]), + cpu_features, + }; + + dispatch!( + cpu_features => + (GFp_poly1305_init | GFp_poly1305_init_neon) + (statep: &mut poly1305_state, key: &[u8; KEY_LEN]) + (&mut ctx.state, &key_and_nonce)); + + ctx + } + + #[inline(always)] + pub fn update(&mut self, input: &[u8]) { + dispatch!( + self.cpu_features => + (GFp_poly1305_update | GFp_poly1305_update_neon) + (statep: &mut poly1305_state, input: *const u8, in_len: c::size_t) + (&mut self.state, input.as_ptr(), input.len())); + } + + pub(super) fn finish(mut self) -> Tag { + let mut tag = Tag([0u8; TAG_LEN]); + dispatch!( + self.cpu_features => + (GFp_poly1305_finish | GFp_poly1305_finish_neon) + (statep: &mut poly1305_state, mac: &mut [u8; TAG_LEN]) + (&mut self.state, &mut tag.0)); + tag + } +} + +/// Implements the original, non-IETF padding semantics. +/// +/// This is used by chacha20_poly1305_openssh and the standalone +/// poly1305 test vectors. +pub(super) fn sign(key: Key, input: &[u8]) -> Tag { + let mut ctx = Context::from_key(key); + ctx.update(input); + ctx.finish() +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::test; + use core::convert::TryInto; + + // Adapted from BoringSSL's crypto/poly1305/poly1305_test.cc. + #[test] + pub fn test_poly1305() { + let cpu_features = cpu::features(); + test::run(test_file!("poly1305_test.txt"), |section, test_case| { + assert_eq!(section, ""); + let key = test_case.consume_bytes("Key"); + let key: &[u8; KEY_LEN] = key.as_slice().try_into().unwrap(); + let input = test_case.consume_bytes("Input"); + let expected_mac = test_case.consume_bytes("MAC"); + let key = Key::new(*key, cpu_features); + let Tag(actual_mac) = sign(key, &input); + assert_eq!(expected_mac, actual_mac.as_ref()); + + Ok(()) + }) + } +} diff --git a/vendor/ring/src/aead/poly1305_test.txt b/vendor/ring/src/aead/poly1305_test.txt new file mode 100644 index 00000000..414156b3 --- /dev/null +++ b/vendor/ring/src/aead/poly1305_test.txt @@ -0,0 +1,170 @@ +# Test Vectors from OpenSSL commit bbe9769ba66ab2512678a87b0d9b266ba970db05. + +Key = 2d773be37adb1e4d683bf0075e79c4ee037918535a7f99ccb7040fb5f5f43aea +Input = 89dab80b7717c1db5db437860a3f70218e93e1b8f461fb677f16f35f6f87e2a91c99bc3a47ace47640cc95c345be5ecca5a3523c35cc01893af0b64a620334270372ec12482d1b1e363561698a578b359803495bb4e2ef1930b17a5190b580f141300df30adbeca28f6427a8bc1a999fd51c554a017d095d8c3e3127daf9f595 +MAC = c85d15ed44c378d6b00e23064c7bcd51 + +Key = 99e5822dd4173c995e3dae0ddefb97743fde3b080134b39f76e9bf8d0e88d546 +Input = 000000000000000b170303020000000006db1f1f368d696a810a349c0c714c9a5e7850c2407d721acded95e018d7a85266a6e1289cdb4aeb18da5ac8a2b0026d24a59ad485227f3eaedbb2e7e35e1c66cd60f9abf716dcc9ac42682dd7dab287a7024c4eefc321cc0574e16793e37cec03c5bda42b54c114a80b57af26416c7be742005e20855c73e21dc8e2edc9d435cb6f6059280011c270b71570051c1c9b3052126620bc1e2730fa066c7a509d53c60e5ae1b40aa6e39e49669228c90eecb4a50db32a50bc49e90b4f4b359a1dfd11749cd3867fcf2fb7bb6cd4738f6a4ad6f7ca5058f7618845af9f020f6c3b967b8f4cd4a91e2813b507ae66f2d35c18284f7292186062e10fd5510d18775351ef334e7634ab4743f5b68f49adcab384d3fd75f7390f4006ef2a295c8c7a076ad54546cd25d2107fbe1436c840924aaebe5b370893cd63d1325b8616fc4810886bc152c53221b6df373119393255ee72bcaa880174f1717f9184fa91646f17a24ac55d16bfddca9581a92eda479201f0edbf633600d6066d1ab36d5d2415d71351bbcd608a25108d25641992c1f26c531cf9f90203bc4cc19f5927d834b0a47116d3884bbb164b8ec883d1ac832e56b3918a98601a08d171881541d594db399c6ae6151221745aec814c45b0b05b565436fd6f137aa10a0c0b643761dbd6f9a9dcb99b1a6e690854ce0769cde39761d82fcdec15f0d92d7d8e94ade8eb83fbe0 +MAC = 2637408fe13086ea73f971e3425e2820 + + +# RFC 7539, section 2.5.2. + +Key = 85d6be7857556d337f4452fe42d506a80103808afb0db2fd4abff6af4149f51b +Input = "Cryptographic Forum Research Group" +MAC = a8061dc1305136c6c22b8baf0c0127a9 + + +# RFC 7539, section A.3. + +Key = 0000000000000000000000000000000000000000000000000000000000000000 +Input = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +MAC = 00000000000000000000000000000000 + +Key = 0000000000000000000000000000000036e5f6b5c5e06070f0efca96227a863e +Input = 416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f +MAC = 36e5f6b5c5e06070f0efca96227a863e + +Key = 36e5f6b5c5e06070f0efca96227a863e00000000000000000000000000000000 +Input = 416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f +MAC = f3477e7cd95417af89a6b8794c310cf0 + +Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0 +Input = 2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e +MAC = 4541669a7eaaee61e708dc7cbcc5eb62 + +Key = 0200000000000000000000000000000000000000000000000000000000000000 +Input = ffffffffffffffffffffffffffffffff +MAC = 03000000000000000000000000000000 + +Key = 02000000000000000000000000000000ffffffffffffffffffffffffffffffff +Input = 02000000000000000000000000000000 +MAC = 03000000000000000000000000000000 + +Key = 0100000000000000000000000000000000000000000000000000000000000000 +Input = fffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffff11000000000000000000000000000000 +MAC = 05000000000000000000000000000000 + +Key = 0100000000000000000000000000000000000000000000000000000000000000 +Input = fffffffffffffffffffffffffffffffffbfefefefefefefefefefefefefefefe01010101010101010101010101010101 +MAC = 00000000000000000000000000000000 + +Key = 0200000000000000000000000000000000000000000000000000000000000000 +Input = fdffffffffffffffffffffffffffffff +MAC = faffffffffffffffffffffffffffffff + +Key = 0100000000000000040000000000000000000000000000000000000000000000 +Input = e33594d7505e43b900000000000000003394d7505e4379cd01000000000000000000000000000000000000000000000001000000000000000000000000000000 +MAC = 14000000000000005500000000000000 + +Key = 0100000000000000040000000000000000000000000000000000000000000000 +Input = e33594d7505e43b900000000000000003394d7505e4379cd010000000000000000000000000000000000000000000000 +MAC = 13000000000000000000000000000000 + + +# Additional test vectors that are long enough to ensure OpenSSL's SIMD +# assembly is fully tested. + +# Length 2048. +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +Input = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfed +MAC = 69d28f73dd09d39a92aa179da354b7ea + +# Length 2049. +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +Input = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc8 +MAC = d6a26654b88572e875d9661c83471c1b + +# Length 2050. +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +Input = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852 +MAC = 9fbbb7f7adcd0cd5b46a4a520b22499a + +# Length 2051. +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +Input = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f5 +MAC = eb7cdceb97ade2a07622f8f5a4b1ce15 + +# Length 2052. +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +Input = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f590 +MAC = d41c310927cd92e14784ea78b85503db + +# Length 2053. +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +Input = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f59073 +MAC = 16af133c423f783a14c49d9f526384cf + +# Length 2054. +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +Input = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f59073f4 +MAC = 00c75db8f0636b22f195645b03091f5f + +# Length 2055. +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +Input = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f59073f434 +MAC = 4a532bc740f581555831345f3b75bf33 + +# Length 2056. +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +Input = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f59073f4347a +MAC = 698c7d32c5923871d124a2479e521706 + +# Length 2057. +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +Input = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f59073f4347a8c +MAC = a677187dbf3c927aeeafb9ebce0f61dc + +# Length 2058. +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +Input = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f59073f4347a8c8a +MAC = 201fed7eee981b31d2cc42ff6c38141a + +# Length 2059. +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +Input = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f59073f4347a8c8a28 +MAC = 0c3d3d01a37f347c4f7c5826bcafb3e1 + +# Length 2060. +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +Input = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f59073f4347a8c8a28c9 +MAC = 33a4e0e0bed7c84c5cc5dd4784410f07 + +# Length 2061. +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +Input = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f59073f4347a8c8a28c99e +MAC = 8e41c40a2f8ec58fe594f3a3a2de4ae1 + +# Length 2062. +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +Input = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f59073f4347a8c8a28c99e21 +MAC = c6e5d1810fd878ac6b844c66cef36a22 + +# Length 2063. +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f +Input = 248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e874cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936aff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a3709894e4eb0a4eedc4ae19468e66b81f271351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb14cf77bde35e78ae9ad7d3f57ed7e7f23926c9172f82d77684ea5ed7d74ebc6f142b997036bcb7cce8df1bbc0d5b35a46509c954fc9469d214d6238f166cbf872156b4c41d7aac5942cffb175023078252a3f36e315c5d4ce0e39928a018252862becacef96a19f03bdcf46d75584299d1f8b03c0169e9e407d937145b5e5024139e7022a1978f114f24cdfa23780a119735c41da8fb759bbb3f025c6ec30e6c6e9bce8615be68e392fce59fd26a8e6a6cc5c606e3848116e4d01d29565a1facfb524b6d29643b826eee1e42869fc76df229dd79b39a2b1df28bb335c3a5f15a855d0121e4a6da34b5e4d5b7b5d5746a03ecff70811e1516fcec1bf7462e8876a2d21710aa168c78f45a6a15015950e221da85d3ec822ad6d0a6931b25a06b7bb5f3c10bb36cd4d647f9561982fde9818de5d4bf8db7f86c53b4ff14928ac15f79023b61861e73e44216540bb302153770da2533de9795252ab5fb77ad924c9338c8144c23d4c90dab9a18feac1a1574d4545e1435eb405e6c4c439fc724fce992ae85badf345bad16d85fbd338f04433703614754d0e7e54c4ccde2670587d52ecfb5a70a14a501bacc727722649931d8515b13d020a78e511fe136d45fbf97f9c7f689fcc677cfb3683723878350ffe9d08130cc6e567b6179e01b7eb2b3bbcf0873e1308eec018edeb8cce946338e15d5bf68c71916a83a99358039ef071e009546a2df936879dffbba397a93925d229a469fd17d71b7f524e03a30da6ee927542f8b369bed4734fe25dbd63d24ffd2a222f5f84f75d858ab989be925af570ad6d45bd28ce61b5139e1dd2f0b7795fe072e6e83acbb5e7b777a70c641e4cab2af40eed69abc334cd2703c3273204fac580c6a3d6680427e5f7d051e8380a53f93a180f4556ecea4530b9a2d5948dad63d415b6874f6b90e767d6d265be86351b53ba690780bb57c21b57418c5b97559e840c68257f839e7583a4bf7c7645c5987d40cc1ba79a218c35edfacdabe581d950e4bb7a481ebe64d61d00e75b1f25f1ce5f5462334a5b9038a697aa0937a3f8017e05d2c9c05dcb05c0b02508dea619b137f5444b6f088eb3cb2c66788f88afdfbba8faa1c490485624c88ae11e57347a676902e7553f056188493209bdbb30acc63c9e41e16a9d6c009416b520a76ba38f57628170c43626b5cb46179dc5bf65de865085f84bf741c223fbe474d2d19d8f43914fbd6586351089e73babf344f988b7963fe44528457d7aad3c564f6bcbd0d772a4c9fd328e6022d1c7c9f86726f8d5a23797d309c0f653ab1ac687833eb2700f156296062a8b377078f45f6b68c3d07cae1913ba8d5a6f9bf7525a3439eb932d4cefc4bf8e1b07b48ca13ece366cbc3e0388915915d1757475103a9e9454e7e6355de2d6acbf4710f9a63e4f6d3cd70c2d6fca88dd8a14448fdb63ce9350fdaafbe0b8bd1c5d307dae76dfed799aef2d8f23d5608d37d1330dd38b94860905dbeebf78d7b7318b7d42aed40d3f9899e9f420cbd92a6eeae3026f7725694e0e4bee016ba346fed2c21172bdb4a461cebe0cfe38e76645226ac127a259c193264d735ce8c8a57e17dd3f0579e2e86dc295ad1f45ba2d85db35044da61f7d401274b31eefbeb34e8d2ae596e9b4541aae117bdac5ed0b324c20539c27c07a411d5288b0b5f6fa16e9a7df85dc319fa6b71cd08a859c06a3f7b0289e1750adbf182f9750fea96fea5ab7aa3473340607cd7ed2c626f5382491c26d5d5bea61401dee7319c94d418f297e61ceac8f258ee8c23831bda081591f5a918e96855774ddedffc51e5b180f1971806d42fc333020b734aeb45adb0bc47325d0cea5f6713a786558022afc39d573892aa3635efbfd8bcb11c57f306c72146afe8b45388125cb7bf9ecf965a7ba4f768c77be366470dcdcf214b7f6a5a9460ed4fe44ae559d85e2fdc2094de83fff12ea8804db1215c4ca865871bdd7f8ef32ab799bf923ffb02c1ded7d129beadad46c5eda31ab1a6f43da05ea08bff7ffa88d8966353d01830558c39b930b01d175e437124d8edd0d2698fd8932f2b2c9b14746e52879c57a395538150f390264f00e60d470711202f4194499ff79037ca9885dc8d695f7d917a3086ca88e8f8d0243efee09302cf39e039eb7cc8dd19d28120d5fe533b5727cd39133181c729ca6f90a015ed30be7668d5cb5ecc33a53ee69bf7d1a5ecbdb153803743c6adaaabd36bf84e5be38d3f04a5d5dbfd67bdcd3b176e65bd1391ade775cc32ce43a847fb6c672a3fe97a5d4081c4986959ec5fb898f42a9397ba2b3ec2c1018f8d76d057f2366bd0e4465514ad6560c599664fb85621fe771e00f43d39b591b2a6a321100f4d1ef23a376d5ae3eeedbfe23da73dff0ee4d16b34ebddd8f5f053db9824105fc7300dbee7ea6af56b112319e3e215a0fc79ae946f6b5227453ec7fcaf17cf7651f71499a50d81221404d5f129ac50ea7528ff0e0069ec4ab8acb7919d81749ab37a870c5ef2cc5a15cf96709d3c65b4addc77e7416847160bcabb94ea36377e0ef71be80b5cc53effd5444888044a353574c72c924bba2a8b4e8354188ebfedc852f59073f4347a8c8a28c99e21df +MAC = f6eaae369c3cb5c05748e8d919178e00 + +# Regression test for https://rt.openssl.org/Ticket/Display.html?id=4439 +Key = 2d773be37adb1e4d683bf0075e79c4ee037918535a7f99ccb7040fb5f5f43aea +Input = 89dab80b7717c1db5db437860a3f70218e93e1b8f461fb677f16f35f6f87e2a91c99bc3a47ace47640cc95c345be5ecca5a3523c35cc01893af0b64a620334270372ec12482d1b1e363561698a578b359803495bb4e2ef1930b17a5190b580f141300df30adbeca28f6427a8bc1a999fd51c554a017d095d8c3e3127daf9f595 +MAC = c85d15ed44c378d6b00e23064c7bcd51 + +# Regression tests for https://rt.openssl.org/Ticket/Display.html?id=4483 + +Key = 7f1b02640000000000000000000000000000000000000000cccccccccccccccc +Input = cccccccccccccccccccccccccccccccccccccccccccccccccc80ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccceccccccccccccccccccccccccccccccccccccc5cccccccccccccccccccccccccccccccccccccccccce3ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaccccccccccccccccccccce6cccccccccc000000afccccccccccccccccccfffffff5000000000000000000000000000000000000000000000000000000ffffffe70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000719205a8521dfc +MAC = 8559b876eceed66eb37798c0457baff9 + +Key = e00016000000000000000000000000000000aaaaaaaaaaaaaaaaaaaaaaaaaaaa +Input = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa000000000000000000800264 +MAC = 00bd1258978e205444c9aaaa82006fed + +Key = 0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c +Input = 02fc +MAC = 06120c0c0c0c0c0c0c0c0c0c0c0c0c0c + +Key = 00ff000000000000000000000000000000000000001e00000000000000007b7b +Input = 7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b5c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b6e7b007b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b5c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b6e7b001300000000b300000000000000000000000000000000000000000000f20000000000000000000000000000000000002000efff0009000000000000000000000000100000000009000000640000000000000000000000001300000000b300000000000000000000000000000000000000000000f20000000000000000000000000000000000002000efff00090000000000000000007a000010000000000900000064000000000000000000000000000000000000000000000000fc +MAC = 33205bbf9e9f8f7212ab9e2ab9b7e4a5 diff --git a/vendor/ring/src/aead/quic.rs b/vendor/ring/src/aead/quic.rs new file mode 100644 index 00000000..1996121f --- /dev/null +++ b/vendor/ring/src/aead/quic.rs @@ -0,0 +1,189 @@ +// Copyright 2018 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! QUIC Header Protection. +//! +//! See draft-ietf-quic-tls. + +use crate::{ + aead::{aes, chacha}, + cpu, error, hkdf, +}; +use core::convert::{TryFrom, TryInto}; + +/// A key for generating QUIC Header Protection masks. +pub struct HeaderProtectionKey { + inner: KeyInner, + algorithm: &'static Algorithm, +} + +#[allow(clippy::large_enum_variant, variant_size_differences)] +enum KeyInner { + Aes(aes::Key), + ChaCha20(chacha::Key), +} + +impl From> for HeaderProtectionKey { + fn from(okm: hkdf::Okm<&'static Algorithm>) -> Self { + let mut key_bytes = [0; super::MAX_KEY_LEN]; + let algorithm = *okm.len(); + let key_bytes = &mut key_bytes[..algorithm.key_len()]; + okm.fill(key_bytes).unwrap(); + Self::new(algorithm, key_bytes).unwrap() + } +} + +impl HeaderProtectionKey { + /// Create a new header protection key. + /// + /// `key_bytes` must be exactly `algorithm.key_len` bytes long. + pub fn new( + algorithm: &'static Algorithm, + key_bytes: &[u8], + ) -> Result { + Ok(Self { + inner: (algorithm.init)(key_bytes, cpu::features())?, + algorithm, + }) + } + + /// Generate a new QUIC Header Protection mask. + /// + /// `sample` must be exactly `self.algorithm().sample_len()` bytes long. + pub fn new_mask(&self, sample: &[u8]) -> Result<[u8; 5], error::Unspecified> { + let sample = <&[u8; SAMPLE_LEN]>::try_from(sample)?; + + let out = (self.algorithm.new_mask)(&self.inner, *sample); + Ok(out) + } + + /// The key's algorithm. + #[inline(always)] + pub fn algorithm(&self) -> &'static Algorithm { + self.algorithm + } +} + +const SAMPLE_LEN: usize = super::TAG_LEN; + +/// QUIC sample for new key masks +pub type Sample = [u8; SAMPLE_LEN]; + +/// A QUIC Header Protection Algorithm. +pub struct Algorithm { + init: fn(key: &[u8], cpu_features: cpu::Features) -> Result, + + new_mask: fn(key: &KeyInner, sample: Sample) -> [u8; 5], + + key_len: usize, + id: AlgorithmID, +} + +impl hkdf::KeyType for &'static Algorithm { + #[inline] + fn len(&self) -> usize { + self.key_len() + } +} + +impl Algorithm { + /// The length of the key. + #[inline(always)] + pub fn key_len(&self) -> usize { + self.key_len + } + + /// The required sample length. + #[inline(always)] + pub fn sample_len(&self) -> usize { + SAMPLE_LEN + } +} + +derive_debug_via_id!(Algorithm); + +#[derive(Debug, Eq, PartialEq)] +enum AlgorithmID { + AES_128, + AES_256, + CHACHA20, +} + +impl PartialEq for Algorithm { + fn eq(&self, other: &Self) -> bool { + self.id == other.id + } +} + +impl Eq for Algorithm {} + +/// AES-128. +pub static AES_128: Algorithm = Algorithm { + key_len: 16, + init: aes_init_128, + new_mask: aes_new_mask, + id: AlgorithmID::AES_128, +}; + +/// AES-256. +pub static AES_256: Algorithm = Algorithm { + key_len: 32, + init: aes_init_256, + new_mask: aes_new_mask, + id: AlgorithmID::AES_256, +}; + +fn aes_init_128(key: &[u8], cpu_features: cpu::Features) -> Result { + let aes_key = aes::Key::new(key, aes::Variant::AES_128, cpu_features)?; + Ok(KeyInner::Aes(aes_key)) +} + +fn aes_init_256(key: &[u8], cpu_features: cpu::Features) -> Result { + let aes_key = aes::Key::new(key, aes::Variant::AES_256, cpu_features)?; + Ok(KeyInner::Aes(aes_key)) +} + +fn aes_new_mask(key: &KeyInner, sample: Sample) -> [u8; 5] { + let aes_key = match key { + KeyInner::Aes(key) => key, + _ => unreachable!(), + }; + + aes_key.new_mask(sample) +} + +/// ChaCha20. +pub static CHACHA20: Algorithm = Algorithm { + key_len: chacha::KEY_LEN, + init: chacha20_init, + new_mask: chacha20_new_mask, + id: AlgorithmID::CHACHA20, +}; + +fn chacha20_init(key: &[u8], cpu_features: cpu::Features) -> Result { + let chacha20_key: [u8; chacha::KEY_LEN] = key.try_into()?; + Ok(KeyInner::ChaCha20(chacha::Key::new( + chacha20_key, + cpu_features, + ))) +} + +fn chacha20_new_mask(key: &KeyInner, sample: Sample) -> [u8; 5] { + let chacha20_key = match key { + KeyInner::ChaCha20(key) => key, + _ => unreachable!(), + }; + + chacha20_key.new_mask(sample) +} diff --git a/vendor/ring/src/aead/sealing_key.rs b/vendor/ring/src/aead/sealing_key.rs new file mode 100644 index 00000000..70d60817 --- /dev/null +++ b/vendor/ring/src/aead/sealing_key.rs @@ -0,0 +1,104 @@ +// Copyright 2015-2021 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Authenticated Encryption with Associated Data (AEAD). +//! +//! See [Authenticated encryption: relations among notions and analysis of the +//! generic composition paradigm][AEAD] for an introduction to the concept of +//! AEADs. +//! +//! [AEAD]: http://www-cse.ucsd.edu/~mihir/papers/oem.html +//! [`crypto.cipher.AEAD`]: https://golang.org/pkg/crypto/cipher/#AEAD + +use super::{Aad, Algorithm, BoundKey, LessSafeKey, NonceSequence, Tag, UnboundKey}; +use crate::error; + +/// An AEAD key for encrypting and signing ("sealing"), bound to a nonce +/// sequence. +/// +/// Intentionally not `Clone` or `Copy` since cloning would allow duplication +/// of the nonce sequence. +pub struct SealingKey { + key: LessSafeKey, + nonce_sequence: N, +} + +impl BoundKey for SealingKey { + fn new(key: UnboundKey, nonce_sequence: N) -> Self { + Self { + key: key.into_inner(), + nonce_sequence, + } + } + + #[inline] + fn algorithm(&self) -> &'static Algorithm { + self.key.algorithm() + } +} + +impl core::fmt::Debug for SealingKey { + fn fmt(&self, f: &mut core::fmt::Formatter) -> Result<(), core::fmt::Error> { + self.key.fmt_debug("SealingKey", f) + } +} + +impl SealingKey { + /// Encrypts and signs (“sealsâ€) data in place, appending the tag to the + /// resulting ciphertext. + /// + /// `key.seal_in_place_append_tag(aad, in_out)` is equivalent to: + /// + /// ```skip + /// key.seal_in_place_separate_tag(aad, in_out.as_mut()) + /// .map(|tag| in_out.extend(tag.as_ref())) + /// ``` + #[inline] + pub fn seal_in_place_append_tag( + &mut self, + aad: Aad, + in_out: &mut InOut, + ) -> Result<(), error::Unspecified> + where + A: AsRef<[u8]>, + InOut: AsMut<[u8]> + for<'in_out> Extend<&'in_out u8>, + { + self.key + .seal_in_place_append_tag(self.nonce_sequence.advance()?, aad, in_out) + } + + /// Encrypts and signs (“sealsâ€) data in place. + /// + /// `aad` is the additional authenticated data (AAD), if any. This is + /// authenticated but not encrypted. The type `A` could be a byte slice + /// `&[u8]`, a byte array `[u8; N]` for some constant `N`, `Vec`, etc. + /// If there is no AAD then use `Aad::empty()`. + /// + /// The plaintext is given as the input value of `in_out`. `seal_in_place()` + /// will overwrite the plaintext with the ciphertext and return the tag. + /// For most protocols, the caller must append the tag to the ciphertext. + /// The tag will be `self.algorithm.tag_len()` bytes long. + #[inline] + pub fn seal_in_place_separate_tag( + &mut self, + aad: Aad, + in_out: &mut [u8], + ) -> Result + where + A: AsRef<[u8]>, + { + self.key + .seal_in_place_separate_tag(self.nonce_sequence.advance()?, aad, in_out) + } +} diff --git a/vendor/ring/src/aead/shift.rs b/vendor/ring/src/aead/shift.rs new file mode 100644 index 00000000..9146306c --- /dev/null +++ b/vendor/ring/src/aead/shift.rs @@ -0,0 +1,51 @@ +// Copyright 2018 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use super::block::{Block, BLOCK_LEN}; + +#[cfg(target_arch = "x86")] +pub fn shift_full_blocks(in_out: &mut [u8], src: core::ops::RangeFrom, mut transform: F) +where + F: FnMut(&[u8; BLOCK_LEN]) -> Block, +{ + use core::convert::TryFrom; + + let in_out_len = in_out[src.clone()].len(); + + for i in (0..in_out_len).step_by(BLOCK_LEN) { + let block = { + let input = + <&[u8; BLOCK_LEN]>::try_from(&in_out[(src.start + i)..][..BLOCK_LEN]).unwrap(); + transform(input) + }; + let output = <&mut [u8; BLOCK_LEN]>::try_from(&mut in_out[i..][..BLOCK_LEN]).unwrap(); + *output = *block.as_ref(); + } +} + +pub fn shift_partial((in_prefix_len, in_out): (usize, &mut [u8]), transform: F) +where + F: FnOnce(&[u8]) -> Block, +{ + let (block, in_out_len) = { + let input = &in_out[in_prefix_len..]; + let in_out_len = input.len(); + if in_out_len == 0 { + return; + } + debug_assert!(in_out_len < BLOCK_LEN); + (transform(input), in_out_len) + }; + in_out[..in_out_len].copy_from_slice(&block.as_ref()[..in_out_len]); +} diff --git a/vendor/ring/src/aead/unbound_key.rs b/vendor/ring/src/aead/unbound_key.rs new file mode 100644 index 00000000..969e1747 --- /dev/null +++ b/vendor/ring/src/aead/unbound_key.rs @@ -0,0 +1,74 @@ +// Copyright 2015-2021 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Authenticated Encryption with Associated Data (AEAD). +//! +//! See [Authenticated encryption: relations among notions and analysis of the +//! generic composition paradigm][AEAD] for an introduction to the concept of +//! AEADs. +//! +//! [AEAD]: http://www-cse.ucsd.edu/~mihir/papers/oem.html +//! [`crypto.cipher.AEAD`]: https://golang.org/pkg/crypto/cipher/#AEAD + +use super::{Algorithm, LessSafeKey, MAX_KEY_LEN}; +use crate::{error, hkdf}; + +/// An AEAD key without a designated role or nonce sequence. +pub struct UnboundKey { + inner: LessSafeKey, +} + +impl UnboundKey { + /// Constructs a `UnboundKey`. + /// + /// Fails if `key_bytes.len() != algorithm.key_len()`. + #[inline] + pub fn new( + algorithm: &'static Algorithm, + key_bytes: &[u8], + ) -> Result { + Ok(Self { + inner: LessSafeKey::new_(algorithm, key_bytes)?, + }) + } + + /// The key's AEAD algorithm. + #[inline] + pub fn algorithm(&self) -> &'static Algorithm { + self.inner.algorithm() + } + + #[inline] + pub(super) fn into_inner(self) -> LessSafeKey { + self.inner + } +} + +impl core::fmt::Debug for UnboundKey { + fn fmt(&self, f: &mut core::fmt::Formatter) -> Result<(), core::fmt::Error> { + self.inner.fmt_debug("UnboundKey", f) + } +} + +impl From> for UnboundKey { + fn from(okm: hkdf::Okm<&'static Algorithm>) -> Self { + let mut key_bytes = [0; MAX_KEY_LEN]; + let key_bytes = &mut key_bytes[..okm.len().key_len]; + let algorithm = *okm.len(); + okm.fill(key_bytes).unwrap(); + Self { + inner: LessSafeKey::new_(algorithm, key_bytes).unwrap(), + } + } +} diff --git a/vendor/ring/src/agreement.rs b/vendor/ring/src/agreement.rs new file mode 100644 index 00000000..bdd2abc8 --- /dev/null +++ b/vendor/ring/src/agreement.rs @@ -0,0 +1,305 @@ +// Copyright 2015-2017 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Key Agreement: ECDH, including X25519. +//! +//! # Example +//! +//! Note that this example uses X25519, but ECDH using NIST P-256/P-384 is done +//! exactly the same way, just substituting +//! `agreement::ECDH_P256`/`agreement::ECDH_P384` for `agreement::X25519`. +//! +//! ``` +//! use ring::{agreement, rand}; +//! +//! let rng = rand::SystemRandom::new(); +//! +//! let my_private_key = agreement::EphemeralPrivateKey::generate(&agreement::X25519, &rng)?; +//! +//! // Make `my_public_key` a byte slice containing my public key. In a real +//! // application, this would be sent to the peer in an encoded protocol +//! // message. +//! let my_public_key = my_private_key.compute_public_key()?; +//! +//! let peer_public_key = { +//! // In a real application, the peer public key would be parsed out of a +//! // protocol message. Here we just generate one. +//! let peer_public_key = { +//! let peer_private_key = +//! agreement::EphemeralPrivateKey::generate(&agreement::X25519, &rng)?; +//! peer_private_key.compute_public_key()? +//! }; +//! +//! agreement::UnparsedPublicKey::new(&agreement::X25519, peer_public_key) +//! }; +//! +//! agreement::agree_ephemeral( +//! my_private_key, +//! &peer_public_key, +//! |_key_material| { +//! // In a real application, we'd apply a KDF to the key material and the +//! // public keys (as recommended in RFC 7748) and then derive session +//! // keys from the result. We omit all that here. +//! }, +//! )?; +//! +//! # Ok::<(), ring::error::Unspecified>(()) +//! ``` + +// The "NSA Guide" steps here are from from section 3.1, "Ephemeral Unified +// Model." + +use crate::{cpu, debug, ec, error, rand}; + +pub use crate::ec::{ + curve25519::x25519::X25519, + suite_b::ecdh::{ECDH_P256, ECDH_P384}, +}; + +/// A key agreement algorithm. +pub struct Algorithm { + pub(crate) curve: &'static ec::Curve, + pub(crate) ecdh: fn( + out: &mut [u8], + private_key: &ec::Seed, + peer_public_key: untrusted::Input, + ) -> Result<(), error::Unspecified>, +} + +derive_debug_via_field!(Algorithm, curve); + +impl Eq for Algorithm {} +impl PartialEq for Algorithm { + fn eq(&self, other: &Self) -> bool { + self.curve.id == other.curve.id + } +} + +/// An ephemeral private key for use (only) with `agree_ephemeral`. The +/// signature of `agree_ephemeral` ensures that an `EphemeralPrivateKey` can be +/// used for at most one key agreement. +pub struct EphemeralPrivateKey { + private_key: ec::Seed, + algorithm: &'static Algorithm, +} + +derive_debug_via_field!( + EphemeralPrivateKey, + stringify!(EphemeralPrivateKey), + algorithm +); + +impl EphemeralPrivateKey { + /// Generate a new ephemeral private key for the given algorithm. + pub fn generate( + alg: &'static Algorithm, + rng: &dyn rand::SecureRandom, + ) -> Result { + let cpu_features = cpu::features(); + + // NSA Guide Step 1. + // + // This only handles the key generation part of step 1. The rest of + // step one is done by `compute_public_key()`. + let private_key = ec::Seed::generate(&alg.curve, rng, cpu_features)?; + Ok(Self { + private_key, + algorithm: alg, + }) + } + + /// Computes the public key from the private key. + #[inline(always)] + pub fn compute_public_key(&self) -> Result { + // NSA Guide Step 1. + // + // Obviously, this only handles the part of Step 1 between the private + // key generation and the sending of the public key to the peer. `out` + // is what should be sent to the peer. + self.private_key + .compute_public_key() + .map(|public_key| PublicKey { + algorithm: self.algorithm, + bytes: public_key, + }) + } + + /// The algorithm for the private key. + #[inline] + pub fn algorithm(&self) -> &'static Algorithm { + self.algorithm + } + + #[cfg(test)] + pub fn bytes(&self) -> &[u8] { + self.private_key.bytes_less_safe() + } +} + +/// A public key for key agreement. +#[derive(Clone)] +pub struct PublicKey { + algorithm: &'static Algorithm, + bytes: ec::PublicKey, +} + +impl AsRef<[u8]> for PublicKey { + fn as_ref(&self) -> &[u8] { + self.bytes.as_ref() + } +} + +impl core::fmt::Debug for PublicKey { + fn fmt(&self, f: &mut core::fmt::Formatter) -> Result<(), core::fmt::Error> { + f.debug_struct("PublicKey") + .field("algorithm", &self.algorithm) + .field("bytes", &debug::HexStr(self.as_ref())) + .finish() + } +} + +impl PublicKey { + /// The algorithm for the public key. + #[inline] + pub fn algorithm(&self) -> &'static Algorithm { + self.algorithm + } +} + +/// An unparsed, possibly malformed, public key for key agreement. +pub struct UnparsedPublicKey> { + algorithm: &'static Algorithm, + bytes: B, +} + +impl Copy for UnparsedPublicKey where B: AsRef<[u8]> {} + +impl Clone for UnparsedPublicKey +where + B: AsRef<[u8]>, +{ + fn clone(&self) -> Self { + Self { + algorithm: self.algorithm, + bytes: self.bytes.clone(), + } + } +} + +impl core::fmt::Debug for UnparsedPublicKey +where + B: AsRef<[u8]>, +{ + fn fmt(&self, f: &mut core::fmt::Formatter) -> Result<(), core::fmt::Error> { + f.debug_struct("UnparsedPublicKey") + .field("algorithm", &self.algorithm) + .field("bytes", &debug::HexStr(self.bytes.as_ref())) + .finish() + } +} + +impl> UnparsedPublicKey { + /// Constructs a new `UnparsedPublicKey`. + pub fn new(algorithm: &'static Algorithm, bytes: B) -> Self { + Self { algorithm, bytes } + } + + /// TODO: doc + #[inline] + pub fn algorithm(&self) -> &'static Algorithm { + self.algorithm + } + + /// TODO: doc + #[inline] + pub fn bytes(&self) -> &B { + &self.bytes + } +} + +/// Performs a key agreement with an ephemeral private key and the given public +/// key. +/// +/// `my_private_key` is the ephemeral private key to use. Since it is moved, it +/// will not be usable after calling `agree_ephemeral`, thus guaranteeing that +/// the key is used for only one key agreement. +/// +/// `peer_public_key` is the peer's public key. `agree_ephemeral` will return +/// `Err(error_value)` if it does not match `my_private_key's` algorithm/curve. +/// `agree_ephemeral` verifies that it is encoded in the standard form for the +/// algorithm and that the key is *valid*; see the algorithm's documentation for +/// details on how keys are to be encoded and what constitutes a valid key for +/// that algorithm. +/// +/// After the key agreement is done, `agree_ephemeral` calls `kdf` with the raw +/// key material from the key agreement operation and then returns what `kdf` +/// returns. +#[inline] +pub fn agree_ephemeral, R>( + my_private_key: EphemeralPrivateKey, + peer_public_key: &UnparsedPublicKey, + kdf: impl FnOnce(&[u8]) -> R, +) -> Result { + let peer_public_key = UnparsedPublicKey { + algorithm: peer_public_key.algorithm, + bytes: peer_public_key.bytes.as_ref(), + }; + agree_ephemeral_(my_private_key, peer_public_key, kdf) +} + +fn agree_ephemeral_( + my_private_key: EphemeralPrivateKey, + peer_public_key: UnparsedPublicKey<&[u8]>, + kdf: impl FnOnce(&[u8]) -> R, +) -> Result { + // NSA Guide Prerequisite 1. + // + // The domain parameters are hard-coded. This check verifies that the + // peer's public key's domain parameters match the domain parameters of + // this private key. + if peer_public_key.algorithm != my_private_key.algorithm { + return Err(error::Unspecified); + } + + let alg = &my_private_key.algorithm; + + // NSA Guide Prerequisite 2, regarding which KDFs are allowed, is delegated + // to the caller. + + // NSA Guide Prerequisite 3, "Prior to or during the key-agreement process, + // each party shall obtain the identifier associated with the other party + // during the key-agreement scheme," is delegated to the caller. + + // NSA Guide Step 1 is handled by `EphemeralPrivateKey::generate()` and + // `EphemeralPrivateKey::compute_public_key()`. + + let mut shared_key = [0u8; ec::ELEM_MAX_BYTES]; + let shared_key = &mut shared_key[..alg.curve.elem_scalar_seed_len]; + + // NSA Guide Steps 2, 3, and 4. + // + // We have a pretty liberal interpretation of the NIST's spec's "Destroy" + // that doesn't meet the NSA requirement to "zeroize." + (alg.ecdh)( + shared_key, + &my_private_key.private_key, + untrusted::Input::from(peer_public_key.bytes), + )?; + + // NSA Guide Steps 5 and 6. + // + // Again, we have a pretty liberal interpretation of the NIST's spec's + // "Destroy" that doesn't meet the NSA requirement to "zeroize." + Ok(kdf(shared_key)) +} diff --git a/vendor/ring/src/arithmetic.rs b/vendor/ring/src/arithmetic.rs new file mode 100644 index 00000000..b8074f4f --- /dev/null +++ b/vendor/ring/src/arithmetic.rs @@ -0,0 +1,21 @@ +// Copyright 2017 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +#[macro_use] +pub mod constant; + +#[cfg(feature = "alloc")] +pub mod bigint; + +pub mod montgomery; diff --git a/vendor/ring/src/arithmetic/bigint.rs b/vendor/ring/src/arithmetic/bigint.rs new file mode 100644 index 00000000..d9999adf --- /dev/null +++ b/vendor/ring/src/arithmetic/bigint.rs @@ -0,0 +1,1609 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Multi-precision integers. +//! +//! # Modular Arithmetic. +//! +//! Modular arithmetic is done in finite commutative rings ℤ/mℤ for some +//! modulus *m*. We work in finite commutative rings instead of finite fields +//! because the RSA public modulus *n* is not prime, which means ℤ/nℤ contains +//! nonzero elements that have no multiplicative inverse, so ℤ/nℤ is not a +//! finite field. +//! +//! In some calculations we need to deal with multiple rings at once. For +//! example, RSA private key operations operate in the rings ℤ/nℤ, ℤ/pℤ, and +//! ℤ/qℤ. Types and functions dealing with such rings are all parameterized +//! over a type `M` to ensure that we don't wrongly mix up the math, e.g. by +//! multiplying an element of ℤ/pℤ by an element of ℤ/qℤ modulo q. This follows +//! the "unit" pattern described in [Static checking of units in Servo]. +//! +//! `Elem` also uses the static unit checking pattern to statically track the +//! Montgomery factors that need to be canceled out in each value using it's +//! `E` parameter. +//! +//! [Static checking of units in Servo]: +//! https://blog.mozilla.org/research/2014/06/23/static-checking-of-units-in-servo/ + +use crate::{ + arithmetic::montgomery::*, + bits, bssl, c, error, + limb::{self, Limb, LimbMask, LIMB_BITS, LIMB_BYTES}, +}; +use alloc::{borrow::ToOwned as _, boxed::Box, vec, vec::Vec}; +use core::{ + marker::PhantomData, + ops::{Deref, DerefMut}, +}; + +pub unsafe trait Prime {} + +struct Width { + num_limbs: usize, + + /// The modulus *m* that the width originated from. + m: PhantomData, +} + +/// All `BoxedLimbs` are stored in the same number of limbs. +struct BoxedLimbs { + limbs: Box<[Limb]>, + + /// The modulus *m* that determines the size of `limbx`. + m: PhantomData, +} + +impl Deref for BoxedLimbs { + type Target = [Limb]; + #[inline] + fn deref(&self) -> &Self::Target { + &self.limbs + } +} + +impl DerefMut for BoxedLimbs { + #[inline] + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.limbs + } +} + +// TODO: `derive(Clone)` after https://github.com/rust-lang/rust/issues/26925 +// is resolved or restrict `M: Clone`. +impl Clone for BoxedLimbs { + fn clone(&self) -> Self { + Self { + limbs: self.limbs.clone(), + m: self.m, + } + } +} + +impl BoxedLimbs { + fn positive_minimal_width_from_be_bytes( + input: untrusted::Input, + ) -> Result { + // Reject leading zeros. Also reject the value zero ([0]) because zero + // isn't positive. + if untrusted::Reader::new(input).peek(0) { + return Err(error::KeyRejected::invalid_encoding()); + } + let num_limbs = (input.len() + LIMB_BYTES - 1) / LIMB_BYTES; + let mut r = Self::zero(Width { + num_limbs, + m: PhantomData, + }); + limb::parse_big_endian_and_pad_consttime(input, &mut r) + .map_err(|error::Unspecified| error::KeyRejected::unexpected_error())?; + Ok(r) + } + + fn minimal_width_from_unpadded(limbs: &[Limb]) -> Self { + debug_assert_ne!(limbs.last(), Some(&0)); + Self { + limbs: limbs.to_owned().into_boxed_slice(), + m: PhantomData, + } + } + + fn from_be_bytes_padded_less_than( + input: untrusted::Input, + m: &Modulus, + ) -> Result { + let mut r = Self::zero(m.width()); + limb::parse_big_endian_and_pad_consttime(input, &mut r)?; + if limb::limbs_less_than_limbs_consttime(&r, &m.limbs) != LimbMask::True { + return Err(error::Unspecified); + } + Ok(r) + } + + #[inline] + fn is_zero(&self) -> bool { + limb::limbs_are_zero_constant_time(&self.limbs) == LimbMask::True + } + + fn zero(width: Width) -> Self { + Self { + limbs: vec![0; width.num_limbs].into_boxed_slice(), + m: PhantomData, + } + } + + fn width(&self) -> Width { + Width { + num_limbs: self.limbs.len(), + m: PhantomData, + } + } +} + +/// A modulus *s* that is smaller than another modulus *l* so every element of +/// ℤ/sℤ is also an element of ℤ/lℤ. +pub unsafe trait SmallerModulus {} + +/// A modulus *s* where s < l < 2*s for the given larger modulus *l*. This is +/// the precondition for reduction by conditional subtraction, +/// `elem_reduce_once()`. +pub unsafe trait SlightlySmallerModulus: SmallerModulus {} + +/// A modulus *s* where √l <= s < l for the given larger modulus *l*. This is +/// the precondition for the more general Montgomery reduction from ℤ/lℤ to +/// ℤ/sℤ. +pub unsafe trait NotMuchSmallerModulus: SmallerModulus {} + +pub unsafe trait PublicModulus {} + +/// The x86 implementation of `GFp_bn_mul_mont`, at least, requires at least 4 +/// limbs. For a long time we have required 4 limbs for all targets, though +/// this may be unnecessary. TODO: Replace this with +/// `n.len() < 256 / LIMB_BITS` so that 32-bit and 64-bit platforms behave the +/// same. +pub const MODULUS_MIN_LIMBS: usize = 4; + +pub const MODULUS_MAX_LIMBS: usize = 8192 / LIMB_BITS; + +/// The modulus *m* for a ring ℤ/mℤ, along with the precomputed values needed +/// for efficient Montgomery multiplication modulo *m*. The value must be odd +/// and larger than 2. The larger-than-1 requirement is imposed, at least, by +/// the modular inversion code. +pub struct Modulus { + limbs: BoxedLimbs, // Also `value >= 3`. + + // n0 * N == -1 (mod r). + // + // r == 2**(N0_LIMBS_USED * LIMB_BITS) and LG_LITTLE_R == lg(r). This + // ensures that we can do integer division by |r| by simply ignoring + // `N0_LIMBS_USED` limbs. Similarly, we can calculate values modulo `r` by + // just looking at the lowest `N0_LIMBS_USED` limbs. This is what makes + // Montgomery multiplication efficient. + // + // As shown in Algorithm 1 of "Fast Prime Field Elliptic Curve Cryptography + // with 256 Bit Primes" by Shay Gueron and Vlad Krasnov, in the loop of a + // multi-limb Montgomery multiplication of a * b (mod n), given the + // unreduced product t == a * b, we repeatedly calculate: + // + // t1 := t % r |t1| is |t|'s lowest limb (see previous paragraph). + // t2 := t1*n0*n + // t3 := t + t2 + // t := t3 / r copy all limbs of |t3| except the lowest to |t|. + // + // In the last step, it would only make sense to ignore the lowest limb of + // |t3| if it were zero. The middle steps ensure that this is the case: + // + // t3 == 0 (mod r) + // t + t2 == 0 (mod r) + // t + t1*n0*n == 0 (mod r) + // t1*n0*n == -t (mod r) + // t*n0*n == -t (mod r) + // n0*n == -1 (mod r) + // n0 == -1/n (mod r) + // + // Thus, in each iteration of the loop, we multiply by the constant factor + // n0, the negative inverse of n (mod r). + // + // TODO(perf): Not all 32-bit platforms actually make use of n0[1]. For the + // ones that don't, we could use a shorter `R` value and use faster `Limb` + // calculations instead of double-precision `u64` calculations. + n0: N0, + + oneRR: One, +} + +impl core::fmt::Debug for Modulus { + fn fmt(&self, fmt: &mut ::core::fmt::Formatter) -> Result<(), ::core::fmt::Error> { + fmt.debug_struct("Modulus") + // TODO: Print modulus value. + .finish() + } +} + +impl Modulus { + pub fn from_be_bytes_with_bit_length( + input: untrusted::Input, + ) -> Result<(Self, bits::BitLength), error::KeyRejected> { + let limbs = BoxedLimbs::positive_minimal_width_from_be_bytes(input)?; + Self::from_boxed_limbs(limbs) + } + + pub fn from_nonnegative_with_bit_length( + n: Nonnegative, + ) -> Result<(Self, bits::BitLength), error::KeyRejected> { + let limbs = BoxedLimbs { + limbs: n.limbs.into_boxed_slice(), + m: PhantomData, + }; + Self::from_boxed_limbs(limbs) + } + + fn from_boxed_limbs(n: BoxedLimbs) -> Result<(Self, bits::BitLength), error::KeyRejected> { + if n.len() > MODULUS_MAX_LIMBS { + return Err(error::KeyRejected::too_large()); + } + if n.len() < MODULUS_MIN_LIMBS { + return Err(error::KeyRejected::unexpected_error()); + } + if limb::limbs_are_even_constant_time(&n) != LimbMask::False { + return Err(error::KeyRejected::invalid_component()); + } + if limb::limbs_less_than_limb_constant_time(&n, 3) != LimbMask::False { + return Err(error::KeyRejected::unexpected_error()); + } + + // n_mod_r = n % r. As explained in the documentation for `n0`, this is + // done by taking the lowest `N0_LIMBS_USED` limbs of `n`. + #[allow(clippy::useless_conversion)] + let n0 = { + extern "C" { + fn GFp_bn_neg_inv_mod_r_u64(n: u64) -> u64; + } + + // XXX: u64::from isn't guaranteed to be constant time. + let mut n_mod_r: u64 = u64::from(n[0]); + + if N0_LIMBS_USED == 2 { + // XXX: If we use `<< LIMB_BITS` here then 64-bit builds + // fail to compile because of `deny(exceeding_bitshifts)`. + debug_assert_eq!(LIMB_BITS, 32); + n_mod_r |= u64::from(n[1]) << 32; + } + N0::from(unsafe { GFp_bn_neg_inv_mod_r_u64(n_mod_r) }) + }; + + let bits = limb::limbs_minimal_bits(&n.limbs); + let oneRR = { + let partial = PartialModulus { + limbs: &n.limbs, + n0: n0.clone(), + m: PhantomData, + }; + + One::newRR(&partial, bits) + }; + + Ok(( + Self { + limbs: n, + n0, + oneRR, + }, + bits, + )) + } + + #[inline] + fn width(&self) -> Width { + self.limbs.width() + } + + fn zero(&self) -> Elem { + Elem { + limbs: BoxedLimbs::zero(self.width()), + encoding: PhantomData, + } + } + + // TODO: Get rid of this + fn one(&self) -> Elem { + let mut r = self.zero(); + r.limbs[0] = 1; + r + } + + pub fn oneRR(&self) -> &One { + &self.oneRR + } + + pub fn to_elem(&self, l: &Modulus) -> Elem + where + M: SmallerModulus, + { + // TODO: Encode this assertion into the `where` above. + assert_eq!(self.width().num_limbs, l.width().num_limbs); + let limbs = self.limbs.clone(); + Elem { + limbs: BoxedLimbs { + limbs: limbs.limbs, + m: PhantomData, + }, + encoding: PhantomData, + } + } + + fn as_partial(&self) -> PartialModulus { + PartialModulus { + limbs: &self.limbs, + n0: self.n0.clone(), + m: PhantomData, + } + } +} + +struct PartialModulus<'a, M> { + limbs: &'a [Limb], + n0: N0, + m: PhantomData, +} + +impl PartialModulus<'_, M> { + // TODO: XXX Avoid duplication with `Modulus`. + fn zero(&self) -> Elem { + let width = Width { + num_limbs: self.limbs.len(), + m: PhantomData, + }; + Elem { + limbs: BoxedLimbs::zero(width), + encoding: PhantomData, + } + } +} + +/// Elements of ℤ/mℤ for some modulus *m*. +// +// Defaulting `E` to `Unencoded` is a convenience for callers from outside this +// submodule. However, for maximum clarity, we always explicitly use +// `Unencoded` within the `bigint` submodule. +pub struct Elem { + limbs: BoxedLimbs, + + /// The number of Montgomery factors that need to be canceled out from + /// `value` to get the actual value. + encoding: PhantomData, +} + +// TODO: `derive(Clone)` after https://github.com/rust-lang/rust/issues/26925 +// is resolved or restrict `M: Clone` and `E: Clone`. +impl Clone for Elem { + fn clone(&self) -> Self { + Self { + limbs: self.limbs.clone(), + encoding: self.encoding, + } + } +} + +impl Elem { + #[inline] + pub fn is_zero(&self) -> bool { + self.limbs.is_zero() + } +} + +impl Elem { + fn decode_once(self, m: &Modulus) -> Elem::Output> { + // A multiplication isn't required since we're multiplying by the + // unencoded value one (1); only a Montgomery reduction is needed. + // However the only non-multiplication Montgomery reduction function we + // have requires the input to be large, so we avoid using it here. + let mut limbs = self.limbs; + let num_limbs = m.width().num_limbs; + let mut one = [0; MODULUS_MAX_LIMBS]; + one[0] = 1; + let one = &one[..num_limbs]; // assert!(num_limbs <= MODULUS_MAX_LIMBS); + limbs_mont_mul(&mut limbs, &one, &m.limbs, &m.n0); + Elem { + limbs, + encoding: PhantomData, + } + } +} + +impl Elem { + #[inline] + pub fn into_unencoded(self, m: &Modulus) -> Elem { + self.decode_once(m) + } +} + +impl Elem { + pub fn from_be_bytes_padded( + input: untrusted::Input, + m: &Modulus, + ) -> Result { + Ok(Self { + limbs: BoxedLimbs::from_be_bytes_padded_less_than(input, m)?, + encoding: PhantomData, + }) + } + + #[inline] + pub fn fill_be_bytes(&self, out: &mut [u8]) { + // See Falko Strenzke, "Manger's Attack revisited", ICICS 2010. + limb::big_endian_from_limbs(&self.limbs, out) + } + + pub fn into_modulus(self) -> Result, error::KeyRejected> { + let (m, _bits) = + Modulus::from_boxed_limbs(BoxedLimbs::minimal_width_from_unpadded(&self.limbs))?; + Ok(m) + } + + fn is_one(&self) -> bool { + limb::limbs_equal_limb_constant_time(&self.limbs, 1) == LimbMask::True + } +} + +pub fn elem_mul( + a: &Elem, + b: Elem, + m: &Modulus, +) -> Elem::Output> +where + (AF, BF): ProductEncoding, +{ + elem_mul_(a, b, &m.as_partial()) +} + +fn elem_mul_( + a: &Elem, + mut b: Elem, + m: &PartialModulus, +) -> Elem::Output> +where + (AF, BF): ProductEncoding, +{ + limbs_mont_mul(&mut b.limbs, &a.limbs, &m.limbs, &m.n0); + Elem { + limbs: b.limbs, + encoding: PhantomData, + } +} + +fn elem_mul_by_2(a: &mut Elem, m: &PartialModulus) { + extern "C" { + fn LIMBS_shl_mod(r: *mut Limb, a: *const Limb, m: *const Limb, num_limbs: c::size_t); + } + unsafe { + LIMBS_shl_mod( + a.limbs.as_mut_ptr(), + a.limbs.as_ptr(), + m.limbs.as_ptr(), + m.limbs.len(), + ); + } +} + +pub fn elem_reduced_once>( + a: &Elem, + m: &Modulus, +) -> Elem { + let mut r = a.limbs.clone(); + assert!(r.len() <= m.limbs.len()); + limb::limbs_reduce_once_constant_time(&mut r, &m.limbs); + Elem { + limbs: BoxedLimbs { + limbs: r.limbs, + m: PhantomData, + }, + encoding: PhantomData, + } +} + +#[inline] +pub fn elem_reduced>( + a: &Elem, + m: &Modulus, +) -> Elem { + let mut tmp = [0; MODULUS_MAX_LIMBS]; + let tmp = &mut tmp[..a.limbs.len()]; + tmp.copy_from_slice(&a.limbs); + + let mut r = m.zero(); + limbs_from_mont_in_place(&mut r.limbs, tmp, &m.limbs, &m.n0); + r +} + +fn elem_squared( + mut a: Elem, + m: &PartialModulus, +) -> Elem::Output> +where + (E, E): ProductEncoding, +{ + limbs_mont_square(&mut a.limbs, &m.limbs, &m.n0); + Elem { + limbs: a.limbs, + encoding: PhantomData, + } +} + +pub fn elem_widen>( + a: Elem, + m: &Modulus, +) -> Elem { + let mut r = m.zero(); + r.limbs[..a.limbs.len()].copy_from_slice(&a.limbs); + r +} + +// TODO: Document why this works for all Montgomery factors. +pub fn elem_add(mut a: Elem, b: Elem, m: &Modulus) -> Elem { + limb::limbs_add_assign_mod(&mut a.limbs, &b.limbs, &m.limbs); + a +} + +// TODO: Document why this works for all Montgomery factors. +pub fn elem_sub(mut a: Elem, b: &Elem, m: &Modulus) -> Elem { + extern "C" { + // `r` and `a` may alias. + fn LIMBS_sub_mod( + r: *mut Limb, + a: *const Limb, + b: *const Limb, + m: *const Limb, + num_limbs: c::size_t, + ); + } + unsafe { + LIMBS_sub_mod( + a.limbs.as_mut_ptr(), + a.limbs.as_ptr(), + b.limbs.as_ptr(), + m.limbs.as_ptr(), + m.limbs.len(), + ); + } + a +} + +// The value 1, Montgomery-encoded some number of times. +pub struct One(Elem); + +impl One { + // Returns RR = = R**2 (mod n) where R = 2**r is the smallest power of + // 2**LIMB_BITS such that R > m. + // + // Even though the assembly on some 32-bit platforms works with 64-bit + // values, using `LIMB_BITS` here, rather than `N0_LIMBS_USED * LIMB_BITS`, + // is correct because R**2 will still be a multiple of the latter as + // `N0_LIMBS_USED` is either one or two. + fn newRR(m: &PartialModulus, m_bits: bits::BitLength) -> Self { + let m_bits = m_bits.as_usize_bits(); + let r = (m_bits + (LIMB_BITS - 1)) / LIMB_BITS * LIMB_BITS; + + // base = 2**(lg m - 1). + let bit = m_bits - 1; + let mut base = m.zero(); + base.limbs[bit / LIMB_BITS] = 1 << (bit % LIMB_BITS); + + // Double `base` so that base == R == 2**r (mod m). For normal moduli + // that have the high bit of the highest limb set, this requires one + // doubling. Unusual moduli require more doublings but we are less + // concerned about the performance of those. + // + // Then double `base` again so that base == 2*R (mod n), i.e. `2` in + // Montgomery form (`elem_exp_vartime_()` requires the base to be in + // Montgomery form). Then compute + // RR = R**2 == base**r == R**r == (2**r)**r (mod n). + // + // Take advantage of the fact that `elem_mul_by_2` is faster than + // `elem_squared` by replacing some of the early squarings with shifts. + // TODO: Benchmark shift vs. squaring performance to determine the + // optimal value of `lg_base`. + let lg_base = 2usize; // Shifts vs. squaring trade-off. + debug_assert_eq!(lg_base.count_ones(), 1); // Must 2**n for n >= 0. + let shifts = r - bit + lg_base; + let exponent = (r / lg_base) as u64; + for _ in 0..shifts { + elem_mul_by_2(&mut base, m) + } + let RR = elem_exp_vartime_(base, exponent, m); + + Self(Elem { + limbs: RR.limbs, + encoding: PhantomData, // PhantomData + }) + } +} + +impl AsRef> for One { + fn as_ref(&self) -> &Elem { + &self.0 + } +} + +/// A non-secret odd positive value in the range +/// [3, PUBLIC_EXPONENT_MAX_VALUE]. +#[derive(Clone, Copy, Debug)] +pub struct PublicExponent(u64); + +impl PublicExponent { + pub fn from_be_bytes( + input: untrusted::Input, + min_value: u64, + ) -> Result { + if input.len() > 5 { + return Err(error::KeyRejected::too_large()); + } + let value = input.read_all(error::KeyRejected::invalid_encoding(), |input| { + // The exponent can't be zero and it can't be prefixed with + // zero-valued bytes. + if input.peek(0) { + return Err(error::KeyRejected::invalid_encoding()); + } + let mut value = 0u64; + loop { + let byte = input + .read_byte() + .map_err(|untrusted::EndOfInput| error::KeyRejected::invalid_encoding())?; + value = (value << 8) | u64::from(byte); + if input.at_end() { + return Ok(value); + } + } + })?; + + // Step 2 / Step b. NIST SP800-89 defers to FIPS 186-3, which requires + // `e >= 65537`. We enforce this when signing, but are more flexible in + // verification, for compatibility. Only small public exponents are + // supported. + if value & 1 != 1 { + return Err(error::KeyRejected::invalid_component()); + } + debug_assert!(min_value & 1 == 1); + debug_assert!(min_value <= PUBLIC_EXPONENT_MAX_VALUE); + if min_value < 3 { + return Err(error::KeyRejected::invalid_component()); + } + if value < min_value { + return Err(error::KeyRejected::too_small()); + } + if value > PUBLIC_EXPONENT_MAX_VALUE { + return Err(error::KeyRejected::too_large()); + } + + Ok(Self(value)) + } +} + +// This limit was chosen to bound the performance of the simple +// exponentiation-by-squaring implementation in `elem_exp_vartime`. In +// particular, it helps mitigate theoretical resource exhaustion attacks. 33 +// bits was chosen as the limit based on the recommendations in [1] and +// [2]. Windows CryptoAPI (at least older versions) doesn't support values +// larger than 32 bits [3], so it is unlikely that exponents larger than 32 +// bits are being used for anything Windows commonly does. +// +// [1] https://www.imperialviolet.org/2012/03/16/rsae.html +// [2] https://www.imperialviolet.org/2012/03/17/rsados.html +// [3] https://msdn.microsoft.com/en-us/library/aa387685(VS.85).aspx +const PUBLIC_EXPONENT_MAX_VALUE: u64 = (1u64 << 33) - 1; + +/// Calculates base**exponent (mod m). +// TODO: The test coverage needs to be expanded, e.g. test with the largest +// accepted exponent and with the most common values of 65537 and 3. +pub fn elem_exp_vartime( + base: Elem, + PublicExponent(exponent): PublicExponent, + m: &Modulus, +) -> Elem { + let base = elem_mul(m.oneRR().as_ref(), base, &m); + elem_exp_vartime_(base, exponent, &m.as_partial()) +} + +/// Calculates base**exponent (mod m). +fn elem_exp_vartime_(base: Elem, exponent: u64, m: &PartialModulus) -> Elem { + // Use what [Knuth] calls the "S-and-X binary method", i.e. variable-time + // square-and-multiply that scans the exponent from the most significant + // bit to the least significant bit (left-to-right). Left-to-right requires + // less storage compared to right-to-left scanning, at the cost of needing + // to compute `exponent.leading_zeros()`, which we assume to be cheap. + // + // During RSA public key operations the exponent is almost always either 65537 + // (0b10000000000000001) or 3 (0b11), both of which have a Hamming weight + // of 2. During Montgomery setup the exponent is almost always a power of two, + // with Hamming weight 1. As explained in [Knuth], exponentiation by squaring + // is the most efficient algorithm when the Hamming weight is 2 or less. It + // isn't the most efficient for all other, uncommon, exponent values but any + // suboptimality is bounded by `PUBLIC_EXPONENT_MAX_VALUE`. + // + // This implementation is slightly simplified by taking advantage of the + // fact that we require the exponent to be a positive integer. + // + // [Knuth]: The Art of Computer Programming, Volume 2: Seminumerical + // Algorithms (3rd Edition), Section 4.6.3. + assert!(exponent >= 1); + assert!(exponent <= PUBLIC_EXPONENT_MAX_VALUE); + let mut acc = base.clone(); + let mut bit = 1 << (64 - 1 - exponent.leading_zeros()); + debug_assert!((exponent & bit) != 0); + while bit > 1 { + bit >>= 1; + acc = elem_squared(acc, m); + if (exponent & bit) != 0 { + acc = elem_mul_(&base, acc, m); + } + } + acc +} + +// `M` represents the prime modulus for which the exponent is in the interval +// [1, `m` - 1). +pub struct PrivateExponent { + limbs: BoxedLimbs, +} + +impl PrivateExponent { + pub fn from_be_bytes_padded( + input: untrusted::Input, + p: &Modulus, + ) -> Result { + let dP = BoxedLimbs::from_be_bytes_padded_less_than(input, p)?; + + // Proof that `dP < p - 1`: + // + // If `dP < p` then either `dP == p - 1` or `dP < p - 1`. Since `p` is + // odd, `p - 1` is even. `d` is odd, and an odd number modulo an even + // number is odd. Therefore `dP` must be odd. But then it cannot be + // `p - 1` and so we know `dP < p - 1`. + // + // Further we know `dP != 0` because `dP` is not even. + if limb::limbs_are_even_constant_time(&dP) != LimbMask::False { + return Err(error::Unspecified); + } + + Ok(Self { limbs: dP }) + } +} + +impl PrivateExponent { + // Returns `p - 2`. + fn for_flt(p: &Modulus) -> Self { + let two = elem_add(p.one(), p.one(), p); + let p_minus_2 = elem_sub(p.zero(), &two, p); + Self { + limbs: p_minus_2.limbs, + } + } +} + +#[cfg(not(target_arch = "x86_64"))] +pub fn elem_exp_consttime( + base: Elem, + exponent: &PrivateExponent, + m: &Modulus, +) -> Result, error::Unspecified> { + use crate::limb::Window; + + const WINDOW_BITS: usize = 5; + const TABLE_ENTRIES: usize = 1 << WINDOW_BITS; + + let num_limbs = m.limbs.len(); + + let mut table = vec![0; TABLE_ENTRIES * num_limbs]; + + fn gather(table: &[Limb], i: Window, r: &mut Elem) { + extern "C" { + fn LIMBS_select_512_32( + r: *mut Limb, + table: *const Limb, + num_limbs: c::size_t, + i: Window, + ) -> bssl::Result; + } + Result::from(unsafe { + LIMBS_select_512_32(r.limbs.as_mut_ptr(), table.as_ptr(), r.limbs.len(), i) + }) + .unwrap(); + } + + fn power( + table: &[Limb], + i: Window, + mut acc: Elem, + mut tmp: Elem, + m: &Modulus, + ) -> (Elem, Elem) { + for _ in 0..WINDOW_BITS { + acc = elem_squared(acc, &m.as_partial()); + } + gather(table, i, &mut tmp); + let acc = elem_mul(&tmp, acc, m); + (acc, tmp) + } + + let tmp = m.one(); + let tmp = elem_mul(m.oneRR().as_ref(), tmp, m); + + fn entry(table: &[Limb], i: usize, num_limbs: usize) -> &[Limb] { + &table[(i * num_limbs)..][..num_limbs] + } + fn entry_mut(table: &mut [Limb], i: usize, num_limbs: usize) -> &mut [Limb] { + &mut table[(i * num_limbs)..][..num_limbs] + } + let num_limbs = m.limbs.len(); + entry_mut(&mut table, 0, num_limbs).copy_from_slice(&tmp.limbs); + entry_mut(&mut table, 1, num_limbs).copy_from_slice(&base.limbs); + for i in 2..TABLE_ENTRIES { + let (src1, src2) = if i % 2 == 0 { + (i / 2, i / 2) + } else { + (i - 1, 1) + }; + let (previous, rest) = table.split_at_mut(num_limbs * i); + let src1 = entry(previous, src1, num_limbs); + let src2 = entry(previous, src2, num_limbs); + let dst = entry_mut(rest, 0, num_limbs); + limbs_mont_product(dst, src1, src2, &m.limbs, &m.n0); + } + + let (r, _) = limb::fold_5_bit_windows( + &exponent.limbs, + |initial_window| { + let mut r = Elem { + limbs: base.limbs, + encoding: PhantomData, + }; + gather(&table, initial_window, &mut r); + (r, tmp) + }, + |(acc, tmp), window| power(&table, window, acc, tmp, m), + ); + + let r = r.into_unencoded(m); + + Ok(r) +} + +/// Uses Fermat's Little Theorem to calculate modular inverse in constant time. +pub fn elem_inverse_consttime( + a: Elem, + m: &Modulus, +) -> Result, error::Unspecified> { + elem_exp_consttime(a, &PrivateExponent::for_flt(&m), m) +} + +#[cfg(target_arch = "x86_64")] +pub fn elem_exp_consttime( + base: Elem, + exponent: &PrivateExponent, + m: &Modulus, +) -> Result, error::Unspecified> { + // The x86_64 assembly was written under the assumption that the input data + // is aligned to `MOD_EXP_CTIME_MIN_CACHE_LINE_WIDTH` bytes, which was/is + // 64 in OpenSSL. Similarly, OpenSSL uses the x86_64 assembly functions by + // giving it only inputs `tmp`, `am`, and `np` that immediately follow the + // table. The code seems to "work" even when the inputs aren't exactly + // like that but the side channel defenses might not be as effective. All + // the awkwardness here stems from trying to use the assembly code like + // OpenSSL does. + + use crate::limb::Window; + + const WINDOW_BITS: usize = 5; + const TABLE_ENTRIES: usize = 1 << WINDOW_BITS; + + let num_limbs = m.limbs.len(); + + const ALIGNMENT: usize = 64; + assert_eq!(ALIGNMENT % LIMB_BYTES, 0); + let mut table = vec![0; ((TABLE_ENTRIES + 3) * num_limbs) + ALIGNMENT]; + let (table, state) = { + let misalignment = (table.as_ptr() as usize) % ALIGNMENT; + let table = &mut table[((ALIGNMENT - misalignment) / LIMB_BYTES)..]; + assert_eq!((table.as_ptr() as usize) % ALIGNMENT, 0); + table.split_at_mut(TABLE_ENTRIES * num_limbs) + }; + + fn entry(table: &[Limb], i: usize, num_limbs: usize) -> &[Limb] { + &table[(i * num_limbs)..][..num_limbs] + } + fn entry_mut(table: &mut [Limb], i: usize, num_limbs: usize) -> &mut [Limb] { + &mut table[(i * num_limbs)..][..num_limbs] + } + + const ACC: usize = 0; // `tmp` in OpenSSL + const BASE: usize = ACC + 1; // `am` in OpenSSL + const M: usize = BASE + 1; // `np` in OpenSSL + + entry_mut(state, BASE, num_limbs).copy_from_slice(&base.limbs); + entry_mut(state, M, num_limbs).copy_from_slice(&m.limbs); + + fn scatter(table: &mut [Limb], state: &[Limb], i: Window, num_limbs: usize) { + extern "C" { + fn GFp_bn_scatter5(a: *const Limb, a_len: c::size_t, table: *mut Limb, i: Window); + } + unsafe { + GFp_bn_scatter5( + entry(state, ACC, num_limbs).as_ptr(), + num_limbs, + table.as_mut_ptr(), + i, + ) + } + } + + fn gather(table: &[Limb], state: &mut [Limb], i: Window, num_limbs: usize) { + extern "C" { + fn GFp_bn_gather5(r: *mut Limb, a_len: c::size_t, table: *const Limb, i: Window); + } + unsafe { + GFp_bn_gather5( + entry_mut(state, ACC, num_limbs).as_mut_ptr(), + num_limbs, + table.as_ptr(), + i, + ) + } + } + + fn gather_square(table: &[Limb], state: &mut [Limb], n0: &N0, i: Window, num_limbs: usize) { + gather(table, state, i, num_limbs); + assert_eq!(ACC, 0); + let (acc, rest) = state.split_at_mut(num_limbs); + let m = entry(rest, M - 1, num_limbs); + limbs_mont_square(acc, m, n0); + } + + fn gather_mul_base(table: &[Limb], state: &mut [Limb], n0: &N0, i: Window, num_limbs: usize) { + extern "C" { + fn GFp_bn_mul_mont_gather5( + rp: *mut Limb, + ap: *const Limb, + table: *const Limb, + np: *const Limb, + n0: &N0, + num: c::size_t, + power: Window, + ); + } + unsafe { + GFp_bn_mul_mont_gather5( + entry_mut(state, ACC, num_limbs).as_mut_ptr(), + entry(state, BASE, num_limbs).as_ptr(), + table.as_ptr(), + entry(state, M, num_limbs).as_ptr(), + n0, + num_limbs, + i, + ); + } + } + + fn power(table: &[Limb], state: &mut [Limb], n0: &N0, i: Window, num_limbs: usize) { + extern "C" { + fn GFp_bn_power5( + r: *mut Limb, + a: *const Limb, + table: *const Limb, + n: *const Limb, + n0: &N0, + num: c::size_t, + i: Window, + ); + } + unsafe { + GFp_bn_power5( + entry_mut(state, ACC, num_limbs).as_mut_ptr(), + entry_mut(state, ACC, num_limbs).as_mut_ptr(), + table.as_ptr(), + entry(state, M, num_limbs).as_ptr(), + n0, + num_limbs, + i, + ); + } + } + + // table[0] = base**0. + { + let acc = entry_mut(state, ACC, num_limbs); + acc[0] = 1; + limbs_mont_mul(acc, &m.oneRR.0.limbs, &m.limbs, &m.n0); + } + scatter(table, state, 0, num_limbs); + + // table[1] = base**1. + entry_mut(state, ACC, num_limbs).copy_from_slice(&base.limbs); + scatter(table, state, 1, num_limbs); + + for i in 2..(TABLE_ENTRIES as Window) { + if i % 2 == 0 { + // TODO: Optimize this to avoid gathering + gather_square(table, state, &m.n0, i / 2, num_limbs); + } else { + gather_mul_base(table, state, &m.n0, i - 1, num_limbs) + }; + scatter(table, state, i, num_limbs); + } + + let state = limb::fold_5_bit_windows( + &exponent.limbs, + |initial_window| { + gather(table, state, initial_window, num_limbs); + state + }, + |state, window| { + power(table, state, &m.n0, window, num_limbs); + state + }, + ); + + extern "C" { + fn GFp_bn_from_montgomery( + r: *mut Limb, + a: *const Limb, + not_used: *const Limb, + n: *const Limb, + n0: &N0, + num: c::size_t, + ) -> bssl::Result; + } + Result::from(unsafe { + GFp_bn_from_montgomery( + entry_mut(state, ACC, num_limbs).as_mut_ptr(), + entry(state, ACC, num_limbs).as_ptr(), + core::ptr::null(), + entry(state, M, num_limbs).as_ptr(), + &m.n0, + num_limbs, + ) + })?; + let mut r = Elem { + limbs: base.limbs, + encoding: PhantomData, + }; + r.limbs.copy_from_slice(entry(state, ACC, num_limbs)); + Ok(r) +} + +/// Verified a == b**-1 (mod m), i.e. a**-1 == b (mod m). +pub fn verify_inverses_consttime( + a: &Elem, + b: Elem, + m: &Modulus, +) -> Result<(), error::Unspecified> { + if elem_mul(a, b, m).is_one() { + Ok(()) + } else { + Err(error::Unspecified) + } +} + +#[inline] +pub fn elem_verify_equal_consttime( + a: &Elem, + b: &Elem, +) -> Result<(), error::Unspecified> { + if limb::limbs_equal_limbs_consttime(&a.limbs, &b.limbs) == LimbMask::True { + Ok(()) + } else { + Err(error::Unspecified) + } +} + +/// Nonnegative integers. +pub struct Nonnegative { + limbs: Vec, +} + +impl Nonnegative { + pub fn from_be_bytes_with_bit_length( + input: untrusted::Input, + ) -> Result<(Self, bits::BitLength), error::Unspecified> { + let mut limbs = vec![0; (input.len() + LIMB_BYTES - 1) / LIMB_BYTES]; + // Rejects empty inputs. + limb::parse_big_endian_and_pad_consttime(input, &mut limbs)?; + while limbs.last() == Some(&0) { + let _ = limbs.pop(); + } + let r_bits = limb::limbs_minimal_bits(&limbs); + Ok((Self { limbs }, r_bits)) + } + + #[inline] + pub fn is_odd(&self) -> bool { + limb::limbs_are_even_constant_time(&self.limbs) != LimbMask::True + } + + pub fn verify_less_than(&self, other: &Self) -> Result<(), error::Unspecified> { + if !greater_than(other, self) { + return Err(error::Unspecified); + } + Ok(()) + } + + pub fn to_elem(&self, m: &Modulus) -> Result, error::Unspecified> { + self.verify_less_than_modulus(&m)?; + let mut r = m.zero(); + r.limbs[0..self.limbs.len()].copy_from_slice(&self.limbs); + Ok(r) + } + + pub fn verify_less_than_modulus(&self, m: &Modulus) -> Result<(), error::Unspecified> { + if self.limbs.len() > m.limbs.len() { + return Err(error::Unspecified); + } + if self.limbs.len() == m.limbs.len() { + if limb::limbs_less_than_limbs_consttime(&self.limbs, &m.limbs) != LimbMask::True { + return Err(error::Unspecified); + } + } + Ok(()) + } +} + +// Returns a > b. +fn greater_than(a: &Nonnegative, b: &Nonnegative) -> bool { + if a.limbs.len() == b.limbs.len() { + limb::limbs_less_than_limbs_vartime(&b.limbs, &a.limbs) + } else { + a.limbs.len() > b.limbs.len() + } +} + +#[derive(Clone)] +#[repr(transparent)] +struct N0([Limb; 2]); + +const N0_LIMBS_USED: usize = 64 / LIMB_BITS; + +impl From for N0 { + #[inline] + fn from(n0: u64) -> Self { + #[cfg(target_pointer_width = "64")] + { + Self([n0, 0]) + } + + #[cfg(target_pointer_width = "32")] + { + Self([n0 as Limb, (n0 >> LIMB_BITS) as Limb]) + } + } +} + +/// r *= a +fn limbs_mont_mul(r: &mut [Limb], a: &[Limb], m: &[Limb], n0: &N0) { + debug_assert_eq!(r.len(), m.len()); + debug_assert_eq!(a.len(), m.len()); + + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + ))] + unsafe { + GFp_bn_mul_mont( + r.as_mut_ptr(), + r.as_ptr(), + a.as_ptr(), + m.as_ptr(), + n0, + r.len(), + ) + } + + #[cfg(not(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + )))] + { + let mut tmp = [0; 2 * MODULUS_MAX_LIMBS]; + let tmp = &mut tmp[..(2 * a.len())]; + limbs_mul(tmp, r, a); + limbs_from_mont_in_place(r, tmp, m, n0); + } +} + +fn limbs_from_mont_in_place(r: &mut [Limb], tmp: &mut [Limb], m: &[Limb], n0: &N0) { + extern "C" { + fn GFp_bn_from_montgomery_in_place( + r: *mut Limb, + num_r: c::size_t, + a: *mut Limb, + num_a: c::size_t, + n: *const Limb, + num_n: c::size_t, + n0: &N0, + ) -> bssl::Result; + } + Result::from(unsafe { + GFp_bn_from_montgomery_in_place( + r.as_mut_ptr(), + r.len(), + tmp.as_mut_ptr(), + tmp.len(), + m.as_ptr(), + m.len(), + &n0, + ) + }) + .unwrap() +} + +#[cfg(not(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" +)))] +fn limbs_mul(r: &mut [Limb], a: &[Limb], b: &[Limb]) { + debug_assert_eq!(r.len(), 2 * a.len()); + debug_assert_eq!(a.len(), b.len()); + let ab_len = a.len(); + + crate::polyfill::slice::fill(&mut r[..ab_len], 0); + for (i, &b_limb) in b.iter().enumerate() { + r[ab_len + i] = unsafe { + GFp_limbs_mul_add_limb( + (&mut r[i..][..ab_len]).as_mut_ptr(), + a.as_ptr(), + b_limb, + ab_len, + ) + }; + } +} + +/// r = a * b +#[cfg(not(target_arch = "x86_64"))] +fn limbs_mont_product(r: &mut [Limb], a: &[Limb], b: &[Limb], m: &[Limb], n0: &N0) { + debug_assert_eq!(r.len(), m.len()); + debug_assert_eq!(a.len(), m.len()); + debug_assert_eq!(b.len(), m.len()); + + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + ))] + unsafe { + GFp_bn_mul_mont( + r.as_mut_ptr(), + a.as_ptr(), + b.as_ptr(), + m.as_ptr(), + n0, + r.len(), + ) + } + + #[cfg(not(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + )))] + { + let mut tmp = [0; 2 * MODULUS_MAX_LIMBS]; + let tmp = &mut tmp[..(2 * a.len())]; + limbs_mul(tmp, a, b); + limbs_from_mont_in_place(r, tmp, m, n0) + } +} + +/// r = r**2 +fn limbs_mont_square(r: &mut [Limb], m: &[Limb], n0: &N0) { + debug_assert_eq!(r.len(), m.len()); + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + ))] + unsafe { + GFp_bn_mul_mont( + r.as_mut_ptr(), + r.as_ptr(), + r.as_ptr(), + m.as_ptr(), + n0, + r.len(), + ) + } + + #[cfg(not(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + )))] + { + let mut tmp = [0; 2 * MODULUS_MAX_LIMBS]; + let tmp = &mut tmp[..(2 * r.len())]; + limbs_mul(tmp, r, r); + limbs_from_mont_in_place(r, tmp, m, n0) + } +} + +extern "C" { + #[cfg(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + ))] + // `r` and/or 'a' and/or 'b' may alias. + fn GFp_bn_mul_mont( + r: *mut Limb, + a: *const Limb, + b: *const Limb, + n: *const Limb, + n0: &N0, + num_limbs: c::size_t, + ); + + // `r` must not alias `a` + #[cfg(any( + test, + not(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "x86_64", + target_arch = "x86" + )) + ))] + #[must_use] + fn GFp_limbs_mul_add_limb(r: *mut Limb, a: *const Limb, b: Limb, num_limbs: c::size_t) -> Limb; +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::test; + use alloc::format; + + // Type-level representation of an arbitrary modulus. + struct M {} + + unsafe impl PublicModulus for M {} + + #[test] + fn test_elem_exp_consttime() { + test::run( + test_file!("bigint_elem_exp_consttime_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let m = consume_modulus::(test_case, "M"); + let expected_result = consume_elem(test_case, "ModExp", &m); + let base = consume_elem(test_case, "A", &m); + let e = { + let bytes = test_case.consume_bytes("E"); + PrivateExponent::from_be_bytes_padded(untrusted::Input::from(&bytes), &m) + .expect("valid exponent") + }; + let base = into_encoded(base, &m); + let actual_result = elem_exp_consttime(base, &e, &m).unwrap(); + assert_elem_eq(&actual_result, &expected_result); + + Ok(()) + }, + ) + } + + // TODO: fn test_elem_exp_vartime() using + // "src/rsa/bigint_elem_exp_vartime_tests.txt". See that file for details. + // In the meantime, the function is tested indirectly via the RSA + // verification and signing tests. + #[test] + fn test_elem_mul() { + test::run( + test_file!("bigint_elem_mul_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let m = consume_modulus::(test_case, "M"); + let expected_result = consume_elem(test_case, "ModMul", &m); + let a = consume_elem(test_case, "A", &m); + let b = consume_elem(test_case, "B", &m); + + let b = into_encoded(b, &m); + let a = into_encoded(a, &m); + let actual_result = elem_mul(&a, b, &m); + let actual_result = actual_result.into_unencoded(&m); + assert_elem_eq(&actual_result, &expected_result); + + Ok(()) + }, + ) + } + + #[test] + fn test_elem_squared() { + test::run( + test_file!("bigint_elem_squared_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let m = consume_modulus::(test_case, "M"); + let expected_result = consume_elem(test_case, "ModSquare", &m); + let a = consume_elem(test_case, "A", &m); + + let a = into_encoded(a, &m); + let actual_result = elem_squared(a, &m.as_partial()); + let actual_result = actual_result.into_unencoded(&m); + assert_elem_eq(&actual_result, &expected_result); + + Ok(()) + }, + ) + } + + #[test] + fn test_elem_reduced() { + test::run( + test_file!("bigint_elem_reduced_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + struct MM {} + unsafe impl SmallerModulus for M {} + unsafe impl NotMuchSmallerModulus for M {} + + let m = consume_modulus::(test_case, "M"); + let expected_result = consume_elem(test_case, "R", &m); + let a = + consume_elem_unchecked::(test_case, "A", expected_result.limbs.len() * 2); + + let actual_result = elem_reduced(&a, &m); + let oneRR = m.oneRR(); + let actual_result = elem_mul(oneRR.as_ref(), actual_result, &m); + assert_elem_eq(&actual_result, &expected_result); + + Ok(()) + }, + ) + } + + #[test] + fn test_elem_reduced_once() { + test::run( + test_file!("bigint_elem_reduced_once_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + struct N {} + struct QQ {} + unsafe impl SmallerModulus for QQ {} + unsafe impl SlightlySmallerModulus for QQ {} + + let qq = consume_modulus::(test_case, "QQ"); + let expected_result = consume_elem::(test_case, "R", &qq); + let n = consume_modulus::(test_case, "N"); + let a = consume_elem::(test_case, "A", &n); + + let actual_result = elem_reduced_once(&a, &qq); + assert_elem_eq(&actual_result, &expected_result); + + Ok(()) + }, + ) + } + + #[test] + fn test_modulus_debug() { + let (modulus, _) = Modulus::::from_be_bytes_with_bit_length(untrusted::Input::from( + &[0xff; LIMB_BYTES * MODULUS_MIN_LIMBS], + )) + .unwrap(); + assert_eq!("Modulus", format!("{:?}", modulus)); + } + + #[test] + fn test_public_exponent_debug() { + let exponent = + PublicExponent::from_be_bytes(untrusted::Input::from(&[0x1, 0x00, 0x01]), 65537) + .unwrap(); + assert_eq!("PublicExponent(65537)", format!("{:?}", exponent)); + } + + fn consume_elem( + test_case: &mut test::TestCase, + name: &str, + m: &Modulus, + ) -> Elem { + let value = test_case.consume_bytes(name); + Elem::from_be_bytes_padded(untrusted::Input::from(&value), m).unwrap() + } + + fn consume_elem_unchecked( + test_case: &mut test::TestCase, + name: &str, + num_limbs: usize, + ) -> Elem { + let value = consume_nonnegative(test_case, name); + let mut limbs = BoxedLimbs::zero(Width { + num_limbs, + m: PhantomData, + }); + limbs[0..value.limbs.len()].copy_from_slice(&value.limbs); + Elem { + limbs, + encoding: PhantomData, + } + } + + fn consume_modulus(test_case: &mut test::TestCase, name: &str) -> Modulus { + let value = test_case.consume_bytes(name); + let (value, _) = + Modulus::from_be_bytes_with_bit_length(untrusted::Input::from(&value)).unwrap(); + value + } + + fn consume_nonnegative(test_case: &mut test::TestCase, name: &str) -> Nonnegative { + let bytes = test_case.consume_bytes(name); + let (r, _r_bits) = + Nonnegative::from_be_bytes_with_bit_length(untrusted::Input::from(&bytes)).unwrap(); + r + } + + fn assert_elem_eq(a: &Elem, b: &Elem) { + if elem_verify_equal_consttime(&a, b).is_err() { + panic!("{:x?} != {:x?}", &*a.limbs, &*b.limbs); + } + } + + fn into_encoded(a: Elem, m: &Modulus) -> Elem { + elem_mul(m.oneRR().as_ref(), a, m) + } + + #[test] + // TODO: wasm + fn test_mul_add_words() { + const ZERO: Limb = 0; + const MAX: Limb = ZERO.wrapping_sub(1); + static TEST_CASES: &[(&[Limb], &[Limb], Limb, Limb, &[Limb])] = &[ + (&[0], &[0], 0, 0, &[0]), + (&[MAX], &[0], MAX, 0, &[MAX]), + (&[0], &[MAX], MAX, MAX - 1, &[1]), + (&[MAX], &[MAX], MAX, MAX, &[0]), + (&[0, 0], &[MAX, MAX], MAX, MAX - 1, &[1, MAX]), + (&[1, 0], &[MAX, MAX], MAX, MAX - 1, &[2, MAX]), + (&[MAX, 0], &[MAX, MAX], MAX, MAX, &[0, 0]), + (&[0, 1], &[MAX, MAX], MAX, MAX, &[1, 0]), + (&[MAX, MAX], &[MAX, MAX], MAX, MAX, &[0, MAX]), + ]; + + for (i, (r_input, a, w, expected_retval, expected_r)) in TEST_CASES.iter().enumerate() { + extern crate std; + let mut r = std::vec::Vec::from(*r_input); + assert_eq!(r.len(), a.len()); // Sanity check + let actual_retval = + unsafe { GFp_limbs_mul_add_limb(r.as_mut_ptr(), a.as_ptr(), *w, a.len()) }; + assert_eq!(&r, expected_r, "{}: {:x?} != {:x?}", i, &r[..], expected_r); + assert_eq!( + actual_retval, *expected_retval, + "{}: {:x?} != {:x?}", + i, actual_retval, *expected_retval + ); + } + } +} diff --git a/vendor/ring/src/arithmetic/bigint_elem_exp_consttime_tests.txt b/vendor/ring/src/arithmetic/bigint_elem_exp_consttime_tests.txt new file mode 100644 index 00000000..aca5907e --- /dev/null +++ b/vendor/ring/src/arithmetic/bigint_elem_exp_consttime_tests.txt @@ -0,0 +1,123 @@ +# ModExp tests. +# +# +# These test vectors satisfy A ^ E = ModExp (mod M) and 0 <= ModExp < M. +# Additionally, and unlike BoringSSL, these test vectors satisify: +# +# * A != 0. Test vectors where A == 0 (mod M) were removed. +# * 0 < A < M. Values of A that were negative or larger than M were reduced +# (mod M) to be in range. +# * M requires at least 4 (64-bit) words to represent. + +ModExp = bbad67352704a6321809f742826bf3d1c31c0ad057bf81432abeb30dc9913c896c03e69eb1cde6b78ffcb320c4625bd38ef23a08d6c64dc86aec951b72d74b097e209ce63092959894614e3865a6153ec0ff6fda639e44071a33763f6b18edc1c22094c3f844f04a86d414c4cb618e9812991c61289360c7ba60f190f75038d0 +A = 855144760f2be2f2038d8ff628f03a902ae2e07736f2695ec980f84a1781665ab65e2b4e53d31856f431a32fd58d8a7727acee54cc54a62161b035c0293714ca294e2161ea4a48660bf084b885f504ad23ea338030460310bd19186be9030ab5136f09fe6a9223962bce385aaaf9c39fe6ed6d005fa96163fe15cdfa08fc914d +E = bb552be12c02ae8b9e90c8beb5689ffefe3378d2c30f12a6d14496250ecce30317c642857535a741642c3df689a8d71a276d247ed482b07b50135357da6143ac2f5c74f6c739c5ff6ada21e1ab35439f6445a1019d6b607950bffb0357c6009a2bfc88cd7f4f883dc591d4eb45b1d787e85aba5c10ee4fe05ea47bf556aec94d +M = dcc24236a1bb94c71d9ec162a6aa4697b932717e82b667cad08b6bd1bbcbddf7cd167b7458de2b0b780486b39574e749d6405f9ede774a021d6b547271523e9e84a6fdd3a98315607ccf93356f54daa9c75e1e311e1672d0dc163be13f9ed6762f7dd301f5b0a1bb2398b608f40ac357ae34fc8a87d4fef3b961cbdb806d9061 + +ModExp = 24eaead5b57883c2f454928f8edd470a344bfe07a953194f7d635d705ef13ddfc64140c8ad6f363d4c828e7c7891a6b6d4df37335de4552c319dafd1c06d1f743240082a3535df4da1475d3eea3fead20e40815fd5a0876c881c162ab65a1eda494280c258901ca953d1d039a998bf0e9aa09273bbef4865f3054663b72d75ff +A = a31618b4532f53729ba22efb2221432fab1dbb70853d6a1159b42fd19fc949965c709b209de106a652aa422d88922ce51dae47f7f6deaf0055202e13db79ee84fc3d3c6f4c003ef96597c49d6895fa53c22ac9e4819f7048146b5272f6279424fdb389819a0b251c823c76f4bebf4f1246de455aafe82a0d34454f5039e90839 +E = 9f43dcb641f3ecf4dbc97450f2bdf3b7ec6a2f3e8e96bb1df2bf34b8d2d78e1a9018d04d960ffd0e932cfc60d3b9b923e3f9f29b3f3d61cae3a9f7245078143475c7fcb896ff200f7d94c4f2708bb42750e37c185a31c876814e4f06a00771707654e1da2fb69c16b6500b16385e3b933e2276ad3569977473f699b1c7926c3b +M = cd607549668469b792f495c141e500871880b0611c8004293a561ec7f9ab6561f8a9b90872742386adafb5cd1890e8204ae12aec529cca0a9e382c96439137f09de9973b12c8492c62847e107deabb7dd946ffbb9d0ac73b462c481092bd65326a17f21d8d6527c47a5dba50aaa20c7048b8788a49eb3ea5f29bd5cfce24eb3b + +# Craft inputs whose Montgomery representation is 1, i.e., shorter than M, in + +# order to test the const time precomputation scattering/gathering. + +ModExp = 9442d2eca2905ad796383947b14ddfcc341f5be8fec079135c36f6f0d9b8b2212f43e08bf29c46167ff0fe16b247cd365df4417d96cc31c94db1cf44b73b0ee3ebcc4920d9b0d003b68e49c1df91e61bc7758a8a1d2d6192ff4e1590b1a792f8be3a1b83db3ad9667d14398d873faf5d885ec3a2bef955026fae6dbf64daea2b +A = 3a4b4c57e62c5e9d1a9065191f8268fed9d5f6f424d071acef66f0662b8210f4c029ed991512e40c9c912043c816d2c4c5b53fa0e5c253e16808aad4225130dafbbb89fd4f30cdfc1c2f2179b636a7ddc4be579795820b4b9377637bd8a21a0ef5a90d0e0f865321eee23d9be2a3b7320b4012d02941b892df2c40bdc85c1898 +E = a2c56ea1362511cac0301918e15a9afe7d37edd438a5c3538d258ea01f0a6df758de07111e868b3ad8fc89b629b4955d78a1b3af902be1806410ddde25ccc6a196ba5949395c1ad5d8725b18815dc1cd5ac1c7dd17773f571e3f2e628255af14476e0494be23a4a4dfd18e23142f33d7a59c236fec61660e360d9676a747c69f +M = ede35a3a7afac817d413373a2032abbc067b1493f709ae6e1282ee5469743391d891b904938857168802b7872d3cd7ac18ab249a9e540a86f970b1d0f310a4cc29df1cc9d4063d98c554f1a32f4ca5eba3523cdfb142e0fc609907c7a92bb0187009d97ec471db3545f42dd5fd29c07b7816085d09477ba31fcf90084660116d + +ModExp = c15ae334455d9f4d1030cd33e734726a27c63624c2afc576238cce5e0498298a4a0c93090a0d19568b41290303c4b558f3d9dd74f9cde8798710f68569ea0d6fd971ce67ec5b54495031de3d8842b8b49288725bee5c9f72b99054d64986ccd4e18d70d5f33943f08cd694eff538f84438ea993ebaba0910c95b3a694f213510 +A = def633b955a917569df3ba8517455eef0655e7a35985edda27097a063e0d82c7c3a76dc36c5d8a71ba9d540790ddd0ea514aaed98925f9a1808eb288d387aaf9605a9ef8a333ebee7ad7057bca012efd619d5867f02266f65976ef4b16da17468426ac4f99b3e8921707e01b4de20f6f9a068e6a19d872079a27f3a44449db83 +E = a465c47b0d15d48e01bb8b1d8e3b3253e11515f6874dbed6c25818adf1a8fd927124d5593beb367f685c11e46f18415be73ccdf16fa2e93a600b728163d21d232849e5278c3749d903edad3f1c4535a2f55a2ab65e7ebc64888bd2a0527e876ecf38cec3ab1980d08138709fad8eb88ae65d960adc3f0f8e92f784fe96fcb693 +M = e43cb9ac1446154356cdc31ec771c79b0e461e22d95185bbe1a279c0945e3af07903a0cb54d553380716fcdcafb4b7cf5dc6da481dc74a8c583d75ff6c1f8e429182d200246ebc473bb56e173787987c1b7fb2dd23f5b2e438a97bc4a1df628bc044fdd1e80c0cf37030adb7b04784dab827d0dcd64f0dbf37c980612570ce11 + +# RSAZ 512-bit. + +# + +# These are regression tests for code which historically reached the RSAZ-512 + +# code. That has since been removed, but the test vectors remain. Note that the + +# lengths of the inputs, especially the *bit* length of |M|, matter a lot. + +# Control: No relationship between A and M except that A < M and they're the +# same number of limbs. + +ModExp = 7f34c1cd63377bc3abf2bb5b2d1bf5f06454e1e8040fe19a72245ce9731cbee1bf9e84532300776c8021ed4f3a8de508d85b4cf320bd82065a013754857b50c4 +A = 8e4e67da6ff890643d0599387955996ef6f0c2045eb9944576ddb965ca64cdb6247727ce128ef178d4a84e5a56d2e67eb0fe389ecbf691f9244ae80f4c11b364 +E = 0be99d8f0650e540b9b191e9cf96f74881b902e32ed169ffd8a1776c3f3e80f0ac765aa14615713e1549f250a20fe4ee48c4e0c6176162fc7842a0dd64d640d1 +M = f12f2c19ee1ecf2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725491 + +# Same as above except A was negative. + +ModExp = 71fa6a4c8ae75368eda8cc6282c26afa69e2af12a97fb9444f16b7dd6c99e0a5d6034cab4248cae4357346b211039f4a2bc4c5a20a297372094162417af703cd +A = 62e0c43f7e263ec85c95ee853688c77bd746cef64ed606994a5d5b611551d1d1712aa93052ba50d7e0ece5a6f4be9dd45321d9f65ef0637f3ef7b186b460a12d +E = 0be99d8f0650e540b9b191e9cf96f74881b902e32ed169ffd8a1776c3f3e80f0ac765aa14615713e1549f250a20fe4ee48c4e0c6176162fc7842a0dd64d640d1 +M = f12f2c19ee1ecf2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725491 + +# A == M - 1 == -1 (mod M) and the exponent is odd so A ^ E (mod M) == A. + +ModExp = f12f2c19ee1ecf2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725490 +A = f12f2c19ee1ecf2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725490 +E = 0be99d8f0650e540b9b191e9cf96f74881b902e32ed169ffd8a1776c3f3e80f0ac765aa14615713e1549f250a20fe4ee48c4e0c6176162fc7842a0dd64d640d1 +M = f12f2c19ee1ecf2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725491 + +# Same inputs as above except A was negative. Note that A mod M with a "correct +# top" isn't the right length for RSAZ. + +ModExp = 01 +A = 01 +E = 0be99d8f0650e540b9b191e9cf96f74881b902e32ed169ffd8a1776c3f3e80f0ac765aa14615713e1549f250a20fe4ee48c4e0c6176162fc7842a0dd64d640d1 +M = f12f2c19ee1ecf2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725491 + +# A was negative, and A (mod M) is the right length for RSAZ. + +ModExp = 8d76eb0f8c7bc3160cc8bb0e0c3590fbed26c5932f5f525b48045c0bd46dda287ba5483f97c851fb7c12c2e858ee7a4a4d1af745cbfb3eb311fa54bea12cde25 +A = 712f2c19ee1ecf2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725491 +E = 0be99d8f0650e540b9b191e9cf96f74881b902e32ed169ffd8a1776c3f3e80f0ac765aa14615713e1549f250a20fe4ee48c4e0c6176162fc7842a0dd64d640d1 +M = f12f2c19ee1ecf2c999b87bdafde60eace3790faad8f9adec13b14c6dfb69f8795a1d0fe65494250b59534014b918453042012952ae6f5786342999600725491 + +# RSAZ 1024-bit. + +# Note that the lengths of the inputs, especially the *bit* length of |M|, +# matter a lot. + +# Control: No relationship between A and M except that A < M and they're the +# same number of limbs. + +ModExp = 8984f8c16044f9c0ad7bd72347af90f58e6e003acda92b76e3c7c4a56ea8e918409d8e9b34884d4c89d0b17cb40fe898f2627c084a0f1698e46beccbf6f48eecc281e11ea9e5135adba460ddae157f2c655b5f589ce29b254d43a960a71cede8a08dbb86be4dac22458da232fb1ec2470856827302ed772c9ddafa408c931aa7 +A = 21158da5fe20356825e72b3f5384ec57720d22f727b27ce2f945c8ee311db781add73bf8fae96b775c909bd22fca75c44c2b0584284a5bb1c07f8eefcd6b0a44047a02b185df34f897f11d4fb9a86c9eb841b4cb8d0383441fdc5af3ef385b5e8380f605d73ed41bb42eb2c2a5704d6034b3ad058dafffce83dbbfb6295daaf8 +E = ecdebd112b3b5788669449dcddbd479a203ee9ab72a9bb9c406b97623513bf0ab9a22f1f23634d269e16bfd6d3b64202b71fc355057411967b6ac70f8d9cef0a4e06819a9a18cc06bbe438243fa9759303d98be8a65dc1cb13595ee9b99f138554425d50f6fbc025d8ffa3eaea828d6f3b82a3584146bafde34da257995f0575 +M = ff3a3e023db3bba929ca4ededbace13d0d1264387b5ef62734e177eaf47a78af56b58aacc8ac5d46f5b066bafb95d93d4442bb948653613eec76837b4ffb7991cb080b6c8b403fb09bc817d026e283ee47ab2fc9af274b12f626eda2fe02004a8e27b9ed7d3b614e8955c7e7c2c0700edd079455237c4475fbd41857e206e4b7 + +# Same as above except A was negative. + +ModExp = 75b54540dd6ec1e87c4e77bb93fd50477ea463fdadb5cab05119b34585d18f971617fc1194240ffa6bdfb53e4785f0a451e03f8c3c444aa6080a96af5906eaa508862a4de15b2c55c023b6f278cd04c1e24fd0711244afeda8e3444256e51261ed99fe66beedb52c43c825b4c7a1adc7d4b111e2208ecd495df91e175573ca10 +A = de24b05c3f93864103e3239f8827f4e59b05414153ac79443b9baefcc35cc12da8de4eb3cdc2f1cf991fcae8cbcb6378f817b6105e09058d2bf6f48b82906f4dc68e08bb05610ab803d6fa806d3a174f8f697afe2223c7ced64a92af0ec9a4ec0aa6c3e7a5fc8d32d52715251d5022aea853e74f95cc44a777f858a1b8a939bf +E = ecdebd112b3b5788669449dcddbd479a203ee9ab72a9bb9c406b97623513bf0ab9a22f1f23634d269e16bfd6d3b64202b71fc355057411967b6ac70f8d9cef0a4e06819a9a18cc06bbe438243fa9759303d98be8a65dc1cb13595ee9b99f138554425d50f6fbc025d8ffa3eaea828d6f3b82a3584146bafde34da257995f0575 +M = ff3a3e023db3bba929ca4ededbace13d0d1264387b5ef62734e177eaf47a78af56b58aacc8ac5d46f5b066bafb95d93d4442bb948653613eec76837b4ffb7991cb080b6c8b403fb09bc817d026e283ee47ab2fc9af274b12f626eda2fe02004a8e27b9ed7d3b614e8955c7e7c2c0700edd079455237c4475fbd41857e206e4b7 + +# A == M - 1 == -1 (mod M) and the exponent is odd so A ^ E (mod M) == A. + +ModExp = b5d257b2c50b050d42f0852eff5cfa2571157c500cd0bd9aa0b2ccdd89c531c9609d520eb81d928fb52b06da25dc713561aa0bd365ee56db9e62ac6787a85936990f44438363560f7af9e0c16f378e5b83f658252390d849401817624da97ec613a1b855fd901847352f434a777e4e32af0cb4033c7547fb6437d067fcd3d964 +A = b5d257b2c50b050d42f0852eff5cfa2571157c500cd0bd9aa0b2ccdd89c531c9609d520eb81d928fb52b06da25dc713561aa0bd365ee56db9e62ac6787a85936990f44438363560f7af9e0c16f378e5b83f658252390d849401817624da97ec613a1b855fd901847352f434a777e4e32af0cb4033c7547fb6437d067fcd3d964 +E = 61803d4973ae68cfb2ba6770dbed70d36760fa42c01a16d1482eacf0d01adf7a917bc86ece58a73b920295c1291b90f49167ef856ecad149330e1fd49ec71392fb62d47270b53e6d4f3c8f044b80a5736753364896932abc6d872c4c5e135d1edb200597a93ceb262ff6c99079177cd10808b9ed20c8cd7352d80ac7f6963103 +M = b5d257b2c50b050d42f0852eff5cfa2571157c500cd0bd9aa0b2ccdd89c531c9609d520eb81d928fb52b06da25dc713561aa0bd365ee56db9e62ac6787a85936990f44438363560f7af9e0c16f378e5b83f658252390d849401817624da97ec613a1b855fd901847352f434a777e4e32af0cb4033c7547fb6437d067fcd3d965 + +# Same inputs as above except A was negative. Note that A mod M with a "correct +# top" isn't the right length for RSAZ. + +ModExp = 01 +A = 01 +E = 61803d4973ae68cfb2ba6770dbed70d36760fa42c01a16d1482eacf0d01adf7a917bc86ece58a73b920295c1291b90f49167ef856ecad149330e1fd49ec71392fb62d47270b53e6d4f3c8f044b80a5736753364896932abc6d872c4c5e135d1edb200597a93ceb262ff6c99079177cd10808b9ed20c8cd7352d80ac7f6963103 +M = b5d257b2c50b050d42f0852eff5cfa2571157c500cd0bd9aa0b2ccdd89c531c9609d520eb81d928fb52b06da25dc713561aa0bd365ee56db9e62ac6787a85936990f44438363560f7af9e0c16f378e5b83f658252390d849401817624da97ec613a1b855fd901847352f434a777e4e32af0cb4033c7547fb6437d067fcd3d965 + +# A was negative, and A (mod M) is the right length for RSAZ. + +ModExp = 9cf810b9e89d5cbc4b79ae64e123ea06d92965e2bab077df97a1b906dc2e1ddcf96a9c4ed14e2cd96309b829ea9cc2a74a7d4b43c5f34d792a7c583201427754b8f78b783608070a84b61f18913e3ced7f7f530972de7764667c54e29d756eea38a93cd1703c676a4587231b0ebfeadddf908e2877a7a84b5bfc370ecf0d158d +A = 35d257b2c50b050d42f0852eff5cfa2571157c500cd0bd9aa0b2ccdd89c531c9609d520eb81d928fb52b06da25dc713561aa0bd365ee56db9e62ac6787a85936990f44438363560f7af9e0c16f378e5b83f658252390d849401817624da97ec613a1b855fd901847352f434a777e4e32af0cb4033c7547fb6437d067fcd3d965 +E = 61803d4973ae68cfb2ba6770dbed70d36760fa42c01a16d1482eacf0d01adf7a917bc86ece58a73b920295c1291b90f49167ef856ecad149330e1fd49ec71392fb62d47270b53e6d4f3c8f044b80a5736753364896932abc6d872c4c5e135d1edb200597a93ceb262ff6c99079177cd10808b9ed20c8cd7352d80ac7f6963103 +M = b5d257b2c50b050d42f0852eff5cfa2571157c500cd0bd9aa0b2ccdd89c531c9609d520eb81d928fb52b06da25dc713561aa0bd365ee56db9e62ac6787a85936990f44438363560f7af9e0c16f378e5b83f658252390d849401817624da97ec613a1b855fd901847352f434a777e4e32af0cb4033c7547fb6437d067fcd3d965 diff --git a/vendor/ring/src/arithmetic/bigint_elem_exp_vartime_tests.txt b/vendor/ring/src/arithmetic/bigint_elem_exp_vartime_tests.txt new file mode 100644 index 00000000..0d382930 --- /dev/null +++ b/vendor/ring/src/arithmetic/bigint_elem_exp_vartime_tests.txt @@ -0,0 +1,13 @@ +# ModExp tests. +# +# These test vectors satisfy A ^ E = ModExp (mod M) and 0 <= ModExp < M. +# Additionally, These test vectors satisfy the following constraints: +# +# * 0 <= A < M. +# * E is odd, and the number of bits in E is in [2, 33]. +# * M requires at least 4 (64-bit) words to represent. +# +# XXX: Unfortunately, the above criteria exclude all BoringSSL test vectors; +# i.e. none of the BoringSSL test vectors were suitable for testing the +# variable-time exponentiation used in RSA verification in *ring*. TODO: Make +# new test vectors. diff --git a/vendor/ring/src/arithmetic/bigint_elem_mul_tests.txt b/vendor/ring/src/arithmetic/bigint_elem_mul_tests.txt new file mode 100644 index 00000000..e5079ed0 --- /dev/null +++ b/vendor/ring/src/arithmetic/bigint_elem_mul_tests.txt @@ -0,0 +1,782 @@ +# ModMul tests. +# +# These test vectors satisfy A * B = ModMul (mod M) and 0 <= ModMul < M. These +# are the subset of test vectors from BoringSSL where the modulus is at least +# 4 64-bit words long. + +# These test vectors satisfy A * B = ModMul (mod M) and 0 <= ModMul < M. +# Further, unlike in BoringSSL's set, these vectors satisfy 0 <= A, B < M. Any +# A and B values not in range (negative and/or too large) in BoringSSL's set +# were reduced mod M. + +ModMul = 09fcf6a47addfa336557749821a88ccd2573a5ce2c3094a17d9a29b33e043bea165499e89fd2c939f17a670694aff05e9af46836b62c96e597c83681092d63ab9d6e22751aa8fd4b9ea94a90a373876ef0f6514304a495edb5ca1795c9ade7965c70f9aa92f8ea460ccb670e9a62c81e9c +A = 071b93fbad39b1c2755f2051ff7d532d59c985756410d58aed3947d6ae737ace5aadc35e7e0d29c684b9d4bec9c0fa277996bb30230f70431cb7b905 +B = 0167be8381a3392dd4df62e150025e13b388bf366922ba8632614928922cc290772135857d1b5234d51c27862cb1a055c1b86260b6ec +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 8e2ba940fc5165c6c5f7f4cb55cd89d1d5f59e90e78730bd66fb120a814514784879dc43ad4f355030ddb3486a59bc34b601474978a94ddbceafdc0ee23cb18708bdbd824d37cc32577802ac6057fef29a71f168e816309fc80cc46f251e7289c6a57fd222d5868263360af63dd73e7c8b1dd6b3f3b6939849580b9231940a4d +A = 1220ac4bde4feca135268550ddc79d8b05ff72f483b39f77436f348c4f5360c22c598f7dfb76697bf6d2ae86c68e90748b8b729b25f932b2e5fd33f3b5 +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9907b5bac6168216cc456c082ec793bafddf883bebc38372fc842b01cc47fa9cc16a8f07069b1314f77f20f33130cee31ca9b4cfddd79c45 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 8e2ba940fc5165c6c5f7bcac0e449b64801e75134a390f120acc58cbee43888f50d07f7aa6dc2b33643c025cf745434d20eb1aeda8fcee5fa3fa5baf10d67c21390297857aa50bbcc4a29a6b10885f97fea60f1b88fc72512c111b938142ee8d67545efe386622162e8fd50418b09769b8c22efe54fdacd652580d609f0528bf +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f4253911356f785368d3bb46a073963c8beeb9739df5b75cd3ecd3b6b228a6757a7444b7e06442c1cdb66aa4c900722e807ae756e1c21c172947c289ee5a295 +B = 74147c93e729707111d0d531b1c135453f3e59f63a7e082b43dceb8b16cc5debdb6d7c0ce0c00ec9b5ca51e7673e411c3cab34938124db6a +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 043c47d7e319c32a758360dd726a1d91e2cf5c57f73cdf9ad2040e61a9c282a2962d96d300e04288461eb1ed37df19e6b88f104a250f9885898740f6487b081515314e0a217df2d4345d3cf81eabb2bfb346b634b9c251624748f6e9407cb677aff4c53fcf42cc027de267e6ec011e14bc7f3bc6666f693d21 +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4d5c014b0eb5d5b5c839a5d5b7572ac8329de6665a5a87fd00e438d2441d47dcf1b19b535b18d53296dcac91075597851013912155313915e06865901ce22d68 +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c623c36607369964fb48dd46fe84d9dacfae837c588fe9a6bab47cdb7d1219fc57a5f62d44da48f835937d1a60c9d7f1ff5b4e909c4fef5dcf7c00 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 768293c84c431b9c8dc6e538ca3f856c60ae5e1aaf42325865418b7bed16c7fc2589968319cf41cb370657c8edc7b969de10e0566b64ec796470b630e22477e7aafb38e99b6012f100c9d23d5517d486e3cab1fc60c1568c0228c9b55d2d77d23b1351fe37ad4fbf9c07f29330a539de4a32709d043dfc9e21aa1a +A = 06bbaeec78b6a41818b7eec42fa3be7d639dfd86fbace2bc14e0369dba6dd3f04ede8b808743d809f43f70f1146dfdb1d649546441919e27f1f7a9760da4a3b152 +B = 1199dc2f52868a0cf440f6666b576541c7aec1e9cee14c1d22010ab0f53fe8bbf3029c639ff78d89dce82de85fd8eda4e67395d435df60158623c5 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 8e2b90afbdafa02ce68d537ae807b4e7f3e05a66b20b84cff309941fc3150f99d083841ddaf6f19f5a76886ad5d853c73051a0457e95eeb0fe3776a084a027ee77d14f3825713a59622ea163a679cff904db33bf6ab23b06eb4b31f4e34fb122c8c170321164439db783e7bec1c265eed33f33bd9cb6d1611c00aa18a9b4b90d +A = 1c4821515167f7073d4b7cfa318ead1da1131499c12497447846caa84176a9d4af576fe549fd8b0f77bf8dbebf6c395f84dffd40400101bf28b1dda0bbdcc5da255e +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf557465589a08cecc3c6c45f7d537ddde56f33de3ac83426348c53cdb3f78d4dfbf23f8902b8839ee1bcc5ff6faa180a5dba95522a4ffd354f07491cbc2 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 33e8e8e193b4b99d8bb382c29c1fc5403190d7654f43cd77e28d1bf77bc3a728dde9de9a89c6522ebc7222d25f46833fd1753a44275b04485c77b675d816090280b3541ca61bfa33921a79f7286830131d6eba13acc46cc2c449b3a359f1cb49d67a4d0cc1245f3f8b59b1684aa0c3ff1c928b8e880a3375ed811dffc991fd1d +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6dcf2f4d4e43e42756582fc51bafaafa1032ec1edeaa1ef606bb49906b5053a72b7a1e379587d75eec2c84cdaab7a419d60ec6b4fbb0bc45fc4ef8dcdfb5771cddbe1c8f +B = 049ff858c7081392defc3ba12ea8869fd61188ff15d9339be72657b00530b851de53b1fcbe16034816e73251fe1ec97bcecd8bccc470373974287ca328af +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 2c88dc40414969e8b614bf8db05fbc38fb2b7ce144d7e707f9f8eca40ae2309c1fc67e713a8da5fbb20e808ad20aeb369cb72a77fd285e38a7895ec0fc795ade4ef1f1680f3a3b3cee4569cc9d5e699984daab3385815d2e515ba5d67d21dd1defc12ca81bc8ea645f8f8d103b4a0a9cdc92eb50690c07a037df274bbd5217e4 +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3e06321ee2696a19ec7b419af70b234534841284d8b2775789ca6e8ebfd01171ae8a064df04a074fe1003967eba4f81c805fcdd2d665a0fb1f6d58c20411cb5fd820f0aec9 +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f20c758c506fa6efeb577db1da2f76a34fdc71c83882bd63ab72e7727590a1135337032b5b2538d79f6894be4a4561f8056c95410047b7b2b5b68ebad20159e +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 0674885ca3ef617a53eaedb9564cf96bcde131760ac541a81f4b25c174a6fe1444c2c206f7171e343e1bb43f81610162994c497419e75aaa25b664c122ed2b27640b45bf646fc5da1703fbf1cc66e10a3c306eb69ae5f937081a1a18dfc8db376ea18f4c1c499109b0cf8806eb32cb1f28985da790047bd7b32c1f67bffb9761 +A = 0413cbcbbb5851a4ae12555801f7f80ccd888bb82ef1b5c31b99e1901d7e0ab91ee489c84044bc21fa2010f11aac21d0531fac09feb482fda579cb9f224c3149dd6249b0225a +B = 01b6bfea70f1d80350eeb45f9a5cebda954d72cf5cd27a299ef5a42e1ed0b50a541d1657b70e50b0cab69b22e31d0944fd735957b1ff764865d9385af302bb802b +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 8d74ba5fdc67733ced4d468f6eb6ec4c1ebd79c97682c1d4daa06105788ed9c5144992e555d903804d7ed0dd9b29ef2648568ab7ff462a03e0bceb5482485afc3b91448fcfeba435dc587db6f3a022428d37fa0e85392d0e48e7d4ed6b21253084e653da8175587b3b709e28426cddfec8d9dc582d4ac2f3d540305c0fe17327 +A = 17c0b7f0e2cdf316e4d32f040e26d41dbde1e6689d98f0652da1c380daf5dfeb6a511b72d82f1b32d3852e9aa2f594be10776a8fc89a8a35c160e8e41b42a06a342fa1c309fd82 +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e20210fd8419b49f890a1a7ceb4118b85670e3ab9a5410a9c26f852de0edfefb003e303e4d06c2398d730641a5849ac5cf7984febf3a6465387c6cdcc348d237dbaea13 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 57e60f79b4e156ccec4c253e70df8d86e4aef326150d612a5ac4dc285761e88ede412d28d9dfa5a6f5c073d3c91a65ba9c86067d81f296935f0d0ebd2af82e7f6b5b336422429cc3b8427fd8d3f5a6fe936f4208362632093bdd3cec1aa8f4b176d260f605caf4a12cc011f3d1b76135ac2507346674e41673eb16c0f55d8010 +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7ae0e0f17d667641f443e6a865e9d2597d7f2ae957fdc4c1f68bf280d032bbb325a2fcc156b9c3063546008180884fdfb712ae15feeb185252500fc928116539fdb8e9a0b24ae6b39a +B = 723db98a78f42aa45496f31cf78695583526d25e167da48ec310e447ad3540be2636813a2c2f7b8c622795ac451992e91bb8e43e5737f0dd95623282e729d815b08ed8 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 0237eb5726e2c628a515104bafd44348dbf099569815784eca5d6a415d3c12421c8c70fee23d6d82f7b5b136b70ffed3b6d9e98cb47854e79239d96c26f2ec955e4ea8dabc29a1b0765c9b7af6ef09ca673d1ee21c680e4b8cfebf47bbc74c993d017ead6cb6f3319ce4de9e9765cdb3ed8fcc57a1b153327e1a6a965e5dfa89 +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763ad7e109313b9830bbdadbec27cbbc9b3d25b0f0882bed6846d14770e56874eb5068533b8ff5988dff7d9748d2ed04b670390ead5ad7a060e77c29f040969a229308a27f5e2e33ee9f90a +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3b821bb5db6fee060cb22e5bbc7d2f950d181f1f39642acbebca9b295a63272bc3d7dd2f560ae637ca4db44b323e303d3fe20f2c71091e71aa64ec4c3980ffdebd83192136 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 2f1d500443fc4f4b86e7ec93e4d0dfd3faabda35a6dd31445021928373be14c37fec369ce80ebcb77aff2151b7ea94d21592da1823ebfa0af196f286d7a69ea54799573bdcd4d09ca4f33b8a3a93b35de5ff7f65099d59367914f1c79440b471ced6773b0802bd8ca99cf531b62892eb1e78d67f8210592208859b0aa1754b14 +A = 0572de2984fe2ed0d5ebb5bc3f62b197fd592795d91cb16b48a0c898991ee3e884e5870b92405f248036ef9b3898c5ee6100a09ede5a48bf7edf3a067e4fc77e7e6bf6a6e3d4f538e3d66f +B = 12c379402b18a34dc8b80c0dcd25be16c99d6f76d5d64b6050b90910cce594bc022794640735710c7ded857ebd44fe5b2e51574a2296f7d7a61b59c0123051bf2ba4a168cf8f +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 4001c734e1391a88640007893f167eb79ef61e4717d5eb14b8d80c25ed59c753be63fc8e54bdaded22c9c7d3e49753eb49efa010439807dba0d90ec4f9b498aa97f109af542bb41922936223213ddedac4d0fad8f1446498f4228b758aafdf1d9692f59029c76ca2832125ba50e811cb95f2b982a7a4d87b4726e6dd8b1963fe +A = 16792909716b581a936287d0a8550a1f3e840935f0f3ddca75aa32e3489269b078fd19a16f8d6b2326eebaf46da76e90890c0ead3b35689bfda8c1ead17a4f672588f982cfd3da2c2b9bdad9 +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2f60af132627de89a4bda1ecb8d38fb8f26e5501e4d7d4b7f98a7af2c8ef53ed37ecf8ff31150e4bb9be0e520ee1a212a1e3a81dba46e4f469fa8f2cd9754beb63f7c1af6cabd001 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 1bfad44b58d3f8bc987116d4cc7ac98f89f838a8712d81d726189e9e1469cf46fe04675dc0b82e6e556b02c350ef4e30ec6203c7f1df937ea80f435af7c10f48538fe7755ba78993f304e64ca0d783b0f46f61bd14fd3fd30768f233c59018ce911a94b495f58eb96438e416ca3c7eba5b1bca9dea5a770c1d2d9f2f62f821e5 +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d1b500bcc03a4bb2951f3738cf8019af41f326f1cb11a4b994a0d6bc78d8f901434b6ff1a30e498a2a826f80c91608b12b6de650dbfff61ebae61265ae25da83e67ac5bbba6c95e9e70b9370d81c +B = 04920f870cf9f371050e64a419ebe07ac92dd3525b41e8ecf6939a267e1ba853d54862dfc95dd21b3526eb0a0a7a7f8fb67df2e9472dbec81e15cb13266257177c5f2b92fced4cea5d +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 6b0b84505907a5ca37abeff9a5ba169975792c69b5751d9845c0f09dea833fb679c8dfbf3895bc470529e0cc736c9b4a0d08b75d709a1d04525ae583c5ba082d3bca1355055c7bb674aa1b92689cfdec4dbac84a96e81c855280e417f60e7e4931ef4f428420c0b85d2cd11c1030a47788d6ee6af0a76b5364fcf23b270e9d4f +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd3033f8e55637ffe56fdfc4cb8360a8733ad2dffe3369c98477e6277e7b303093df796dd63be8d650acc21b259787097a4ffaa8c997da01f2fadd78535cefe9bf6aa9684dc36d05722f4a080f9cad2899b +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da76389a6557af54b3487afde915c649b73b87e3c33d79883c54f73b623fbde12516b52fa84bc2fb0361c09580a1fb7482db75d5718afd8918522ea0f83d62f95527e4154ba016856c10c2ed8 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 6bce40524278ce242b0b5292d27751a3dc414f962d9c1cacb45fa3ee693ac6890d2ff1647abe578c40ea8d4b326a2e0e2fa7cdec28fe2da089338b5fed91c4277cc5be37537eec2f17edbf48a45fbe38f15c58c3e733d408d001262dbd40c9d246c323e7978df4fb7207aa9270a12921743cee2a483e7e71b221b09a6b2c667a +A = 0402671b0cfe14655bc650bd35dd0c36ce7f65de274a0cc4b708c6f6c3e84c2125ab2430e702421904950b29aa8a03b049910305127890457cd0cc97a3e05df67f29d28b0452969986959df02f59d207 +B = 01648c29205f19fe4c646eb62e8ae9b65260c2cb8424a526423c6bc04ed55870cefef9b8ba808f8ed2e1ab170e2e411f68b934abb1a22776969f79f9420f8bcbef28417582942e26646af60a +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 40db38dcdc201648da555f1062bbbb92c632c29b66902eabf90d98dec69ab3f3b28e60cad1571e7246f4c9e6aa62ad26a6d0bc08598c7a8571fa830cae4c2875c5c95a59f3295f998681edba7749b7e38cbece8887a7823b4752165e1a897e638836d408f439f009d0fb6c196e83e83ca3289d2bd0f0eb36b721331e4f9f80fd +A = 14361ace8ec5223bf0165b78913b77ef921b7089bb5e28891d120bd3db6513ddc90404a4e6cd027f9b51fbc02e80d376d59e1f2b043954199ef8218bf26cacdc5e749f668ad3b4ab35cd796f94c06307e6 +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22555c011f02ef45c8d3f764b2426d4782881936d561ea99fc32451431712a0abfa195b32546c1a749b14ec8f78bbde852f3a1da097fbdf1bc6dec05a2cdc3e020c6b960a3ad6cbcba146103aab +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 4b085796665458b798f824d1c1a88c23ecca456fb88713b433228ca8735141a616633ccec4bc53ea4f6e0c74e4aab6fece2e4cc4c4efb479638cf54caf55d4addf75908076f5fb487ed00d540e5b984acb8f81cae3ef51db926a06382a288092b352793de721c23c371fd0ce7a789486b2e8b867d35f47b5daac2d339d22dbde +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac7127ebd9ddfbcf524d3b79f6b9a32ff89b0df3a496eb286f4f2e2497a75ef26f04c3d9e8a1f461e1c9be3a8d16b8b75617e60104c4970761de1d6a56a5a4281f14c74e7eef2371b8da83767388108f5c0da0ca7 +B = 4f22597947638b9a9e9b9b7c2a8d37f77259f1bb1c7db65003b6e1a1c807469c84c89a75b80bbe0324fc3aeefaedc6ad9c0d9e470dac9c30bc48f6abbbdce9547ad7624f0ce9ff3cb6be23e47bc7 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 2b90a57349ea94ea818207fe15c164f9d3530c7cdffcae178557274552f79c4ab56acd78033a570bd6c3e45789704ef0b0ef586594fe4cae3ccfbf9ceef46e769589b084adcee3ef8345375b7103232465b991273df724964248737d5eccbac558e35e4190112571d3e7c291baa7aa8b1800121bd573b8419f627c0091e1bba8 +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac5a2037055e9c8e076e6cdc81847fbbd11f10059d46cc9521b1684f848f706002520ebdd60a8fc545f51a08eaa60872d6afed2226a6f182d9ee7d4314232de1382fa77f5b4ff7a72483cc039c26891df60ca5ae6 +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd2ff66f81a2fbb2016b210df612743b1dbdd8ddb2a931bc785a7a6b7d723e9de746f31c260467bd955616176b327bae3aedae613a1827713a2397325259fdfae0947fcee980a13902653a818ba43f1f2d4 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 4cd4da762c7576d582572d3427abc4b4297f740705fc14a32b46347541b152d0d1e3a11f27213badcea1e2009e34a63350c7a59e4d43654b28298d2757d6b54c4d82f580e98de4230cd119ba350416452cd4b8adff29b9f35ae0c533f666cfed716838e2b91941dfbea8d6a978a369d5f27554ef411f15e5a89850655d7f3f5a +A = 04f4a28af27b926d8ac347503d6ac0bfec388a6c0b38a577501c3ca4aa709c69601824ddeb5eba4d9e437a97f3e4477e1487d5ce7b4a35b90fb863657a5b2d901bb8c3c838db40b89b495ee9875e8eee607d7b8013 +B = 13ca192603bc8b2da29dae67159e4f8d32f351a503434ed9e4e24f74abb5908ef7da80781c71b1a5ce64fefd13a16cc1eab05a370bfba2a97e6cf90cfe98d3a487ba72dde0762c36c10e1da175f1c1b5fc +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 3812e9e835ae355fdf328b29ed8b86dc3f6895e379b8b5d65a5de41eab5fb20ad3e2290c8ca69f9500248ff883d9715f59d0db6257d13c5cd612211bb1fb99867161daffc77968bdffc1fe48bcde0fcce02ca93975b3cd9e93b56974ab4beb59582c3d0ef2a65957f701549f8bf858de0c5bc98af3e5722f1450de391876a2d9 +A = 14ca6101af00d67139b985ac9f149accc260336237dd2dee802b5cc6e506e217b74c1a007ec10c20012f071ddad34e7407012669109ec1f385566ff04cf1a1ab7562353c0af1ba1be0baaef920a188c60db27970f64d +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac7123b1c800e638fc5c56e2bcabb6f12b962b37367d8ab77e87894395ba23a6a525b72f2a4d6f12efd8f24298377e640b5158443241dbad589ef8dfb1f6d36a934e020b303920f2f2eb662429df171f4e3a2ac50 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 5ad7411cef0581b2e675d03b0ecb9969102a283eba5e779bdcbb7646d94e843083a07269c932d18b973b57abe54eaaad0aa76cf7b61f30505a263bc95aa063efb264ae829eb1d1d5f7d380a0b4db59839de9ae6230ba51901e71b3e3d59e8c34a79678e751c8b7ab139123bdb2f04d90a18ed81d2046ae86da1a73c8dae4fc4f +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed40c31b8fb13cde21f2e86870cdda0b4542efd681542a3c38343f5e00d14c174f5ea06b1d018edd9c82d587144eecefca6db5b6e70cadca1ad5ffee9f4a993270e5caa9ca71ed39146901611688a79aff0293477bd6f9ed5 +B = 04a0d48e31cb8c24a3b2c9c95fd19edbe46823032ef4c97fe65d0a30d5c2cad7a4fbbe89e0ebc9940ed9f9ccb8ab18bac269759a9740a7985809d0f38259e680f0703febe7fa012d1ded47f0cace4a133f59a721 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 2b2953981db406ebc544c39dfeb08a8b089064533221536c7fa2bf2a7a0d3a1192859b7dc0ea5036eeab5aa371e3e0070c3980433adb3e3a5202ff257bb546bcb9550423201a35501fd717ed4c0016eb3a675ed399340bac7f058a04e69c1774590fe747ffb9c27e78ba50fcee30ce533a1659fc49dc080a60f21357a6265d24 +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05db1f0b382d2e76a22a2788439b6a2d571b49836383c68b45393ae5d6e6f2d73babda499420de469ac6bab7222ce957adeab7aebd3ddafb75189705d73cba31a54d9e2b46391bf9cd23e5258d9ee1730d577d5b789dc9997b1 +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d0e72f8ec8f5d254a7147b2241390bcdf201835e1e89d2963112fcdde1902faa8b45232feb7d9c88d8879b234b61429c7ad79b1b60b254287d38d8ed174257621220bd8c1f3d2387721c5f735a7edc8c0f03a207fb60 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 02104dfef151526e072c09a4a277eb981a035379de3b1a55a88cb060681706f26131c388f5572c5646826b119c85ed450207f32733487e3c4e1e9d701a65058c4b4ef0cd1db090495643038229ed177b54695ac32110619038f1c1cece14faa693d88476e3d70329b0084d0ba5d547bbaa5b59ba1ce1fad5aa2f1c11a75bc7c0 +A = 07b79e6f1330fefffaf8521089c3348593e40ab7e8d4da3d4346571b43b12740958336580afd13619be3dc2d42eefd9e30599405da3e32e7f3a5655ece8b77a367059668021aa092460de75e627526da08e6206b0f8f539ef40e +B = 0156e234931907c0c0970c1fe6bd4b24225ed94d5f5b1be4693c8e141e9a6032425b4a47b6eac6265afbeb9d796eb230efa707d5ac4a73808225181cf814b319142e9d175ac461c75e6d479bb6bea53954bb981062eb16 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 2a392c5fc96c29df2f5ae9eaf76e7d981dc1e2f3b47b43a98eaf556a9465ae8727c622188123c64658053ec50c25e54ac5c6c8bc279b134d326e911f14c873357647866eccb4f9038ed0cef5082c2058ebd71e1619f7c8f8f2fb80871ebbca3fbfb7845bd855d307d2efd853f1bfd467fbe030862f165e53a9cfa633d0d3fa23 +A = 1e0430e7cf15173d00592037e83e717c90d7dab4f54a5b2f0f5772762fb5f56bc0b2a53ec1bc3b960afc35e7b043f9d85d0af6c29288486af3e186e52bae6300b58917647231b40a12648cc8c020a797683a9bd7ff34eb6d41b928 +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ec64a99eaffabe42c22517c8492c63f6fdfb82bffd693a451d62fece2f56a5606fccd9f3e86e2718417bad2c1df9502f2f0214e12261a060a6934c0ea8483894224e4367246b4727606274037b4f05d5767177f9d4e5e00a8 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 2608f68632ef14dc3979725c8cf1a0db10a1651f17d91247edfae9935b53f6364d233b030eb99871a87b7bd876ab2cfd5a643387a7af9d337e81770db04a14f4f8dbda2cff604838c9af9a31e8dccf9277d453176589ba33abf77855b9501e63370b2e6cd22831e1e70ff1815302c0a026c70042957d08e74dfaff940a91a7b9 +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a18674c977d9484d2fbefd9b54d9b955d05a6965f522ec56a647bef486f85f59e7cb3bee2a3af6100fdb6e2c17ab1526267db3004084c78770682f4be127263141867fb04692e6feecc8d342b0fee5b9a6eea64f58276ae6ef809c1cc748 +B = 47f81f65ea1af04f702757c02a175a299b23cd8ad551fdb67020c50cbb4110b5371dc5790b12484e9ce647eeb24c0220a5e62aaec3461a9dcdaf1a22814b6f22d66372cc5ee31944bef33469f905458c172ec7871d9dc9c301 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 5735109bd21d31b5f54e9221bbed78c54cf387e39c13d31557e8173e173f786b2d2f1acf3966c3bf4552fe9bc802d0868a5a7632404cb91609a7a45fe0fb83fea8d83b0319666c1b0ac520169c15be708343359447f2fd37960c1e96d32799ac9394e839b391f59dd347acfb79bcc4e34e76490880d163ac97ee69e3a0a6e68f +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a011d0eb96be3284170951a6faaa10836f1196f53ee084d42a0c9d92dbb378d080c9f7c0ca8e015f323e3e64859a2f9fecc27a3f4ae87fecb8568c0ac2f5380ddb984bc23f574d8b56cf1250a0f06b90af2914e55a68cbdb7084ababad0b +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fc35df5e7c50ffc2283069f8a00ce91e5d561b5d6b06c81dc66e6c50ee1af260eda95de46017effa03234ebd6204e18a009ed2a53c76f76ed621aa6606abd91c0805f324d628b90e4c2c44a0a505911c7b0c097e001fac29efeba5 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 3b4ad19b75e1301d19b57ba9b68e0666c28c7c5c99df1d5fbbe0685dc1d3489ff39c919222719c5d8b7ce2d7ff967730d776a02b36a86064ed66a02011bab82eb575390f85f0104715f6e4954a1bb28518450182a8ef58af35d00e2fe417f07ba25dd9c85e00c3451082becd22e3aa0c9bcedaa96e6423c7df6c375b4c799c65 +A = 058e1ce4a9b512eb0632b02cf1207936d6707b802140540fbcbbdd712e5ac1426b4f36e74a9a9ddc812e572855d4fe4fca8a0de6644226f5698fb46a5f2a479dfc8b588aa8e02ddb15acdc79ed3d17143e290f1317274f425b869df54a4807 +B = 14e341cbb5f5a7f3b4dd864172b82ceed2887fcf20aae7d0598b3d8afafd2f10c27bc7456c1488abb570be3df04f43d892dc6a8dbe7621f55bccb0ee3acb1ade989a510b4e0cbe29b6b93968f323f0016d87944c908824d249769f8b +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 7fe0bbbccad6032069b1a335b3f2dac16089051cd9321f903181fad23be6853e2d209958e8c48e008be94a62c6206b34b4e994ca08b8f24a2df0e6394ea65b3b7aadb3bc43d04dc9d35a77e673c4476dedefd4568b4ade5d16f9d89486f3d5ed0566b1eb428cb0b688f10fe3901037744f278385754fca481f937cb630f60308 +A = 1cc0e3ed58090db55063c9ba11401636f89262d6ec096d361f448496e05181c5f7f2604333f26d511c13534618e90637adc807d622097f7eabfc03266135cb626e1bad20997e72da71bf2b3f65a4973dc27d2a594b1fd96b7bf7ec14b9e4b983 +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a0ff4ae3c00601161a9d435c2a6850c89867009c3dbd9b10fb1f640dd698880aebba08c2220358050e51a3a667184b29d8e76c8855527aef2dd86698f91d4b6595db25644529f9cd8daca93fdd773a001a9022c7f825e7e9e54ac770b9f9 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 35d7ac5cbc7e6c262ffa41be168b02a3bde9e112c512d1f68421d705ea34461ce3e0dafde67f44d44cf31d91b38d4d5f2fbf8c6c6a44ec3ed0298dd58f3d45c04346c11e57229dc3d2cdfea02c802732d9a811d7be5e81094d72172cd04caaa3c9d55a951c09f454f42add6e89e2d8a98e124aac86379df377606e7af9bc6baa +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f654d28e889079e28a54bbe330be57c70d6af97c5000e019a3c3e29bef35379584ce4e39dcf53f81f1dae04e2b97e815f4b6be7d2261c1fafe17113651e9a107ac7704a505c55194196e5220178c3d3337bb072a3b53ecf0dabf4fba203df9c29154 +B = 072dc8973f7af7122a05c90df190bbf1e39abca908c197590dc7ac41fd0712f48f838ca62a72a177a293ee6b2afa7a10c21e7993347c3df4f161a5641ff62ba123999bf1eabef29ec0d33ed0919818f4b7c35b5f41e654759fc9abdc0f80e7 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 5d83a9b34631dd6c63c05a0c012adf97b4d0f20f61907e1c2145330211e9a7e38128517b058e0a85e993c385068d1cec768deb814bea1323dbd333de091ad2cad72431f20c1e70ff7e1b119768ba44e14292c38b88dae7e55ac9e10ff98e9bcd5f0ac05af499196b4be0c6222d1a63227ee895fa6a8221a4a182a1323183cd7f +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff28887b65a61118c8bc013ad24480a8f95b4e695fe5ddc014ff85bda86629d4b36c066383f76f18d5962474674a62646e7d30bce6b05edd6d8dd389eef93648a230615fa9459bfa8f3f9637b2629900e7b73feb6fa7b51eda0445f348f3658897b6997489 +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a38c040ae26eb02ce1dbac7096bf004a4b48fb3ca9a1c117535f261d0aecb063712caade24be40e2605a8e204d0da58bd95d36c86669b917a483330b812af4528dc0a070aebed4a9d2aa09d10d5b3c3c171b5acebd87a3bbbfaa2c16cd7245f411 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 7fc1c65eade94d9de7440eb8dfaecf1004905135efd4f98257c3295b1e76ccf1e2ab6808d158d360b7419c6210c50efe960610973d9ae855c72ec0e81d423e5863c80b542ad455700d2d0dee5fc403dc01eab460c24687401cf6a3179642e59f2a30268df95fa80dcdac230702352bbf6b60acb9ff5d45c5b09a3403b954d173 +A = 07906bd8d3bebb1303c1df1fea0b2503b0abe9c69b4f4f5bd01eec9e314788cb7d44b93428adbcef570477e8ecac2a64822e481bdf520fc381e1bb0b2cdae2fe94e484cef5236dd524e4dc364b72f4c06d57f29dd3c5079e532b1ab1e71dd6a65b3362df +B = 01479ef2807b9c23c094d0416f513894cc92e023b134f44a5333360dbbe98b8161ab899302f4fa11b470b97dca0c4e8ab7ae47e5fd0962834e6cc1763618193f4ee027f667368da580c623080de137b5869c3081128e6081b9d5e2dbafd791773242 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 730c04094b1ce944588e8291f7e6cf763c70b79cf362dc8a1bc63bb8790cd4cfe4eb51cf15a45a8464d69ddc3e1b9383cfbfd643f317108cd9ca6a6eaaea177c5c8b6747bbf40108cbc0437eb8f11bd2a0939da59b70c0c6129e2c249823897f2ee536b0427bc45035f121d2cbe7441c175899b97c490e6c3ca01539bcd05848 +A = 102cf23cc3b81785c73ac3613c816de47fd585c7d5f175185818dbb4bf0bd47d0dda9702bce97b29d66e48bfaae0fd07b47b40be2b48ed702ef21c54b10bb927f9d6b43604bec4f4b2796b44aa6b4e83f8bcd00f2fa3871dd901570e1a32888d8691454c40 +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff287d316f18074f0628caf7e230c5ecc2200108b30485917287ed9cc704afd58fa98a44ef04e39c6760fccfb16d9da1b5e6101a38fb24e6970b65e1546cd6f8c87d8233be4dba90ac05725252ec7b8d407c5fb05ce7e18561281019054935f1439dd3142a +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 1cfe1842a53d00e4619265e2fce7cb566ffbd912c9213925d01408a956af304eacb85e29fb6edb812a95e90769bf1c3d62b0cf6cd5bb8f8992391d2ad70f38a14fb9d1d1eb522aa7b7fd9f1b52790beebfc887193882377b7ce567d317d8432e1d9a908d6ccfe8d2de7de497d77b023b3959cc042ae30aefcc0229617fd2a146 +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f12c2038c450fc51fab9029d91eed64b9ed4ce05fa1c99da1acf103668541efcafe7bc7d6afb392b2471d699203a7feffe5471d883f8b1939b6cb3b80fb5ab8f8f51d382237a7954578d2caf5728678ad3b3011392f2d1e4f95d3e40826e5e3c45763ef941b01 +B = 675d9d2a05288b438ddcb330acbd59e4639375f3f14ac2d0e9e8b72de6ffc1d217ce62f997577f7eaddbe4603541b132cd41f2f2740363d9c331ef22df92029d143fc8495ed0152b918aed7ff22f564c7cd94fd3fe4178c90365ace43def8fe30ab05c0e +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 83ed1948276d689bb7fde814e67fcea72c4e3509c48873c3e7349a8fa1c08ae11ea4d814d8deb1021eb8b8ceec342cba5002a2ca45d5f340ae1aa500af4c7db120d0402c6cc8a840404be7221bbc46ffa10236043e5ce4415d3ef1355bde26d2d26eb7127326d4b8d671bb96a08e38a2c1dcc281830ac77202903a5e4777ff02 +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d1d0e8176011cf118575177fee3174fa27b8a90e74bb861627460da83e4d7d6099a9c6f89cabc953ccf0e86b78834b1e60571722abb4185bc42fbe61ec2112cf4d1be7c82d73d3b97c6902712c48b3fc3af8b5cb033435ae832d1d34f91191d4db0d84afef943dcf +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6bad22ea470bfe7098ec697270333ca4e149fdf57e32c9ea8a35849d394b41c3d2d62feffec5a9ea8543927d475bf5f2e9093879de6d599f6be17e67916a60f05711f2655bd8555881a01e0d230c8e11b9a6f157d72f826f4a6f66697eeac3e5dc6d53f117cf +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 0402525e19b6b68942253d1a51fd9b2ca36fc84cf938d80b3d52fd4302de142b9d93d1663e89340fff10c2b5efc8cd47fc3b5cc5ccd49a6ea3038ead6454bf190b7f88f52c56bcf00c6ad5b0f5dfb7615915ee8af137dd99cd3d21172ab772f36d291a6856a8e7912750139c09aa024b930a0a6b9eccc83c2c5c0ee2473ea32c +A = 065e5db532ecae639bd56dd63045bca39b33b4d70b2db82ca3d0ee8ca436e671828cde80217b48eae7487fe110830589ab1be889f1e1463f3b0757d529b2f0cdd2ac92c35e8ec141885bbefb6040a3b5e00e64a541913a38fe05824a929f8c5a2c46568c61989c3ca7 +B = 1d9c73eef8373cbb1e8393feb26d55c33a245c33d7031c234abffb2f06a1601f7f3a79ef1e8664c51ce5dba5f5aaf3b9a9e42470d381219b4616ae93c7f6e64792d23bae523b6a224c1f714ebc82a11f9be42618922b8d2eb7b55e4d45572e68a19fb0ba72228b +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 7a9cdb5dcdfb6e04351057d731fddb9e85f41eb432f01c0d980673d294d05ba9b0180133a89930e74cfce78ed54991b494a19e7f80f310b85904784cebc5639bbc631e80751807868e7fe16719e8ffcd1f2cbd1b9f303c3ed488b647670be3080668b5fa0e53b6342c33c87f0ca1efe1ddb1c877bfe2556aeb61805b06f41343 +A = 1e412c3d66aea2c503f3aa5dbad368a61d969a2951c0094f9da32d2794e47f3bf4c481ae23636baabdebdcf0753d431426b1865e62de8eae7238a9245d62820ad7f17b5380d701f5db776cd4e1ddbdfd542901731ffcea5bcdc247fa9c83f7e08a9389e5a76d38be21bd +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c88023b951080528d09f2da8c2fb8ed7cc736044d8e086f55c89dabd2d1a0ad2221e9ed664636e0c285375266486981175410951c1690ead03896dff707b60b41f3d9d7588379c93a6e602e3b56f15c017eabb3e12ff4942901cd927fe6b1bb93280fff775cb0f18292a +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 712580a1ffde78c8cf98ba71843c8130e835fee3afbb45e372d04c04cc388e403c9efac742611d7974bbae982c3aadfd1893f5da280afe0c1db1d81a9ed73b6ed9b7f05a20ce828316103259112d7754560d66733041e9470ae0d4dc95fd0484bfd56d66739f38ead7efa4051187ea41f7bea8fe5d958a29af41328246e2bc35 +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651052030b76e95256709f642442e56d07be9c4f098ba79856b80eb6de39868758869ffd34925ab6a807b64fca9cca893aa44538585a76a35bbdd7fe09df9c553d8c17be4764662316e3dbf0f401d31418c4340fd3414fe4c599b8536b71d51d430d94430ea2e555860a69495e +B = 05bda68c0a64218d3609d75eb4832d5468298f19498507d7d515f4c410f04dee535947571a5e75f1af7f94a5b3b05fb742fde23e7cf3f8b3dbee0a569e5a36d7a3d31a26c4a48a299044fd72339d2cee1a68966c851e76b93ae34130b75f4abe4f2260207d2254d23f56 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 4a1a514aa4d1ada84fa841d0b668930c904783fac521377a7d622201867d773ad23dbb667e0d4181616358f3cb088cd157c8e72bcd03db64647b37aa1813f870cbb0318ae0a3667f8e6c19f6e0706217646ce633f0cc8bf4e8f0f4d7329a8647252ca6d376416d545e73cb9a3cba40f8f9465d85d57c2481b84b6d95dd42d50a +A = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687633a0deaa80fa8b7717e7f26dd7834679d52e58de4905c032e7fbc427b4ec183e2287b2131071fd68a043c279e7cf1cc047723c6ecdf1bec72c54926c3cd6229b4bc15afebb90530b5008a8ba858f98c247bbcec545dd495b72768107cc98672f7d04fd8f0a7142d47b38462ab +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651064f6675d36585a5f9d7264f3b9f9dcc09c4911928783af66bfaabfa2bc7f530dd03ae6da1cea24776877c409f550267d02e13105880a4dd9ba76fd026d0d5de495d4c74b8021bc08d9014d6fe01589c7f757513090dac2d8eaee630381a912ecf9bab775fc740f1905ed68 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 3fe24e66e381eca525b24cf767215837019f44ed4fac6ab118d02cdbd658066505ee5b0feb7af51859992ecb97d727121e38873f748a61d70201cc43228a7732156a80dbe399e05764be19e37dc1b93222bcdcbc45b1a4817460f7021dcf1d70e632bc6a306628790201222bb522f4cc80adcc907463a539b02f74004d42adff +A = 0773454a43f495959dd55b8a064d70b1b1ffe45c084f5f9553582e24fb402b564de68e5379a8d9d02af101594e717a6c6db2e7173e557a64d2f28fd45c4e06041deda040705d99acacf8086830af19c7ab5e27f91738ffbd937dc27e5b7869bb6caa12c2d7930366ff75eadc570a +B = 013d884a2396268f1a8186748a15722156a172a56dd3d8c77b9cb7001b6ee06720653507eba9bb9918f2f699cb37f3b5ae514f5180108a704647f19b0fc075826153edda66dc1105c1008ea8ec6f8c10057f8e8e479e1a1274edfed9ef719b30827a30f26da78820c3696d01aa +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 715bab8708e53f76d2ef2afbb845bdaaf978b54ce25f84dbbf9074f16d30a18733a02a4ba5d7b092fa6c25d3b9b0d8243c743910f1b7b785d9cb02343fc6d59eb0817bcff05646030ce4fbb2b9ff76781cb1af66b46553d365d02c61e677ae97defe92d057d4378dadf8cba9824b0022c086e0d78b5442bf3d3263ba22c643f7 +A = 168186208c734383d472374fbedc2d5d430e85690a4881b740008623120a4f7f83b2cdf85dc28bfaae5870abcd7ff1bc782ef11c78a75c99d41f8aacb52fceeb5f10266dc65eb00b0868937340146d8850887686d54218badb97647a6d82c0c6650ca1f9078d73fc6222aab95c2967 +B = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab67df3f23e8f1b6e4395bca9102e09a76464a81036886a8f33e4f75af3adb74cc993cfdb32c84315ddb22bc1f52a8c04f728dca7f207ef3ba232cbd06b2c1bb63f0f89f2d72d59bb287bd5b164e2ce1bc18466876f9ce944d3be34706158f037d3b63b40546d720406da0401b9615c +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 2714b99dcde70d6c3be8b671d78abc155793f13105fd4b7c5d760a4c68ae89987311dabf2a9238d18299f983b8aca69a9ce398fdf2c9775d90b11b3dba17bcd8edf661efb6e9c50b4e37553cbecb54eb214fed1d0847287732810e550a4c86b51d4e5da1cb7722ce4317e69644620ad806d6d1c94e1e3fb4d87de6178a997453 +A = 8e2ba940fc5165c6c5f7f4cb56a6fde285936891917bce3c4bc572858192433a88a5d77e63bbf31cdcbea067e71dae417109d3ec4a96c9ea4e22a0b88cb25404e003c22ca6ab49083b8bba437c6cd501c5f268fb4a1defc685eb8fcd5d23385501056eb8d77afa5c628989bc33e9d7743d69125f1e77c40854aa72e58ea6f313 +B = 5aadfe65df0e5b877fe45d42d7ca02882cb6c686d486374da5ece6f87771675153c84d74b6f40df1db567b7e1e3c60c41d21816f958f5576fd2ce2f84a8c3be4749dfc7e5561266b7c9698c7581292d0d813cb77955458d63bf94ce87472924c4ca79504d1ae9d5f025c7a2504156f +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 6613b1c8ccac0cb8fe2f59e76fef4dd05acf1f1b2bfc20aa3f193622ce3e9d4c7824ad544477553bc68f05f0b546e7c1ee87301e111af7929d1f40525291b88e211db7175f4e5c0953141914fcb4fb951dbf77442e7cb28fde495704f1b5141de1e50fbd0e359d0d86ad709c8f564c84dac81c7602717c269219ab1cf12e809c +A = 8e2ba940fc5165c6c5f7f4cb56a6fc26f72d0c623eac124cf0cf551b1c6934cb1882967f9ebdb5b36cfd6d1fde5559f584db39a0ce8461dffbc0d35ceecba29e71605a6024f2049603bec70181c2af20b27e308910747b11efeec8a65d2ca886df718062fbec60bc322c6829801e3c3b5b62d50a2dde0c0075eb335097a9d9b6 +B = 8e2ba940fc5165c6c5f7f4cb56a6fddf2592e9a694e5eb8353684eb05b940d5f643ace64314e1b29324f2f4a06bde7f6e4e84680eed276f8eeb02fe242dc47be6bf5eaec2edf36d4320db0cd22e95cfa5ee71c86d3f78d43d9a865c3a6a7a007afb98052c033d7eb32a0650810b3deeb9a07f2413df201b4741ae0fe1019f3cf +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 3a7fc5680aae875b9241200b9f4112a82cd624ffd9044138ae3cd65200631ee9d7b918fbffadcad7e598791a9f0bef3e23005d6bc0048ba92461283492df3bce74c66e417b082ee052fd8f808d71f3ab18f9ffc40f8fb51ebbb936d09c26a3514bf868141f7cf238c1abb3d88e5d50dfc188902254f07d63fb8cb611ef8e4149 +A = 04a30f32d467b29dc83b40bca2fc4ccee5f08a64069cb87f20e63387b2219b12aa312400c4ca59608f50a71d2535cde40a6d248290793fe01693ca40b93a5cded2dcfbc9aeb36e187c9d650782d12bea917daadbc6525f266e074037803e4b2f300778ca8dcb304658cdb502c93c94a16c6261 +B = 1ca5e5218dade077fecb81d579e1c9290431b34df5ec84aefaaf233d68f17dcf60ee010db26320685af13a821b6daa9d73d8f3a30826c3ae7b2bc5e219cadcff826283cd7dddd04cea7a5e0585d6e7c9f23b27f14ff815fe53bcd75fe700b1b91671bddaba737fb43bfecd2a77e5b752a206 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 768d312175ce7d2601f30bb38339f046e4c2ba5c19ae5f7ca5a562cc2462c579fce9985e9e8afe2578db542c8d9e7693e0c74ba161334b249ce720d568e9c18f09c87cd701e6f2080b752362f2fe6252a1d0caaaf1fa18199776e4c6078d89d520b9c63db159d5fba7e0838811e68794b1413c248f3f7173ef29eff28f15b656 +A = 149353e91bdb70cdca8f06648388508511a64d05221305cad7187ea40d9ccef91fe17ceb1e79667bf66e8e6b7a57faa90a83bad119c02984a8f860bc1f23ffd33d4ad84896610301cd2e8e80a5ca7e8d3ee63e7dfa459793c9dbaef3569eb4f8a021c6a3d032a9c94d3f6b8278274d0088a98228 +B = 8e2ba940fc5165c6c5f7f4cb55ff32279073391a0e6c975206452902a8c522f8e8a014bcc239720c346bbf7df93506eb95ef2f322138dba8b5df6db51c3a381fb2c2ef9875f5cbefba72732dff4da6144c8f3564e5385f277be7a637252a880bfea80ce2230b88491c40db00f1138a8b08f830a673ce4a7cc1d9f38d35b283b7 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 0763912f4b16549e6ccd60eaf7a0a1f64d9c3bc83e4a9b87e209a3959ba3cf609cf47183bc543f08e346b6e12b8bdd5d1c07c603f74b286ad432d58d7001299ec7a4dcdb56ca875dfc7ee5c75bcfe2aaba14959bf3facaebf8df92bc12937cfd4a4865b3dd74b243ff62ba256d110b01b4089730cf48efdc66fe272f9241014e +A = 8e2ba940fc5165c6c5f7f47d631d62a2259a038a455598cf900c13317339e33a90c42906c2f9cab8056b5137a3a5220062c0c6b3bb88ffee3b4ab453b8134e976a8e7c3785bd223c31c96f46ff59705e688a427b8bc6e985c755963ab731d779bdd1aa54ea223b62f5b707c12efde079d98187f7d7edb00bbfc0010f889709ce +B = 0450eff382e73f2f38bc3a4abecd5f8de478f80a6b99fb6252173c90d7099629afe859442bb1f796855ee9a2940f21d1f9dc44f462edd74b479e1f2926ff6faefeb55adbc6152b5c97967b1dc8c44dfb85b5e02e870d2920b75422c8a427e99e35e2a4be92cb0ddc04cb7f4044f716be97b36f045a +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 56ef57d56c6d1b94cf0fcdedd3611a8ee444c2e25522b9ad175587619598da341916b183be03b1e73be300f9969120d8f3a23750cd8c4ffdb87124a2139e8ff2c15d8dc944bc3c3a066aa16dbe6dba4a74925e16acdb2b2e83cd7fd5cedade6a7f7409a509c00dadc182b2860609cc9a375cb8bbdcc350bcb2c0df9b3bff882e +A = 8e2ba940fc5165c6c5f6b1005d11466abfa370afbb80500e54891dcf47754289eb6dee4eb33b8f37749ad543fc8a178a3f580832b977d8aaab2ad01c57e937fbe73efe0aa2ed20c938766a5571eeff14415d1a954d3f26d7ed1063eb01ddc0ee2e29e6dba9ce9c9d4df20eb92b0535857020cbf05c56113ad072c3a167c34056 +B = 8e2ba940fc5165c6c5f7c4a55ca1388ad3f286db5f7286c8ff8877b65dca8d7802812c6d30da7b2d743eaae7570493cc8d40c8ea51f418261e84880dac7ccf0fd1b338a61c576eb456cd47b4ec89a3ad6c689f58db3b3668938c66f850754ec3bbdcf95346dbb440bc08d1b98ea6e4e4f7dc2a9ee93a836587d6973c4121d326 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 42f363c34c20c443c1ea7a1c54f98c6977b6671164a80308000533b2404a7f280adb1f3b98101cba25249131288f7ac68b0ae2572c7777e7381c1f4d05fd82188c4b1ed5636652e0bfca4d096bbf4189a9358b79f6b6333b99e5c4b7a940c2f7d1413bf9f47a2ef66b620b5e220b2c3dd7267452eb1b9d8d9cfb17bbfcdb6abb +A = 0499d05de867bda3118a8cb82b80ac91fc505e0fbc6c7dac5fb61713cb6e715f56a31ae8af4b400461d7ad1687a2631faecd90d7829f67d1b9e36ed7d55704b3f2aea65eac061172d698384daea710ed92cf1140cd4da427174bebd173c2ff1675b2407a84649b0a318602f33105006fe4d5ed8d0e015b99 +B = 017a426a12a0175bb46bf7a7e727eb5238af383cee6f4d5e2bd82b0d29b9fed35f3d8ec95cfdfcac49bee47b25d3b5f375a3340fa83f8dd9330a593a974d208debb7e567e59dbb7251b54e42dab2cd50fc63aab050a41bd88282373f8195c94c35f61bb48aa921f574cb4ff0984ccedc070efea8c46e5cf8 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 2f03374e9596cb56cbbd89794090ca7a4b437f4c05fa38a09db60e5ca900b208fb85b52f71c29fd35e62c9f9529d7ffe46fcc54607ccb07f6f8e13fdd4ff1185033ba4fcefb1ed4bfc42c3ea9f05276767d8dc9b7b4aea4c8bc0ce84951d1f590cec0751f73667db19060e2bff64da30fc048a1f5700fe3f489920675cc3540a +A = 1073531f678877ba854fd1e7f857659614c526847ffbe8ed131dc9f2ccf69e1f1e917bb44a7b905f7ff758f61c06dd59ee09567d9f0df2550fcb98b776ed1381ce052988aa08fc5153e31c621c6a51ca61b386e3a9163a5cd69608b3e200476a8ada35d906c41d044bafe71ef5c6f732935f15b53bf36f7ef8 +B = 8e2ba940fc5165b8e2a1bba60f58a9da18716f19b8a69f9e6dd8a39c39ad4afba8caaf2ee532d61955674e56751994d9c656debfd5b8fbf448362f09feee6bb9df2c31983cdf1907dd8340ecd309ac805b9beff1d5d9755e2b07d1a21c7dd093691b9b2b52ddbfcae977b04b6842c6d8770bb890183b60e33cb1c9425f43c312 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 01aa22f9013bc1cdebbdfecedf710c1bcaa41c696a3d7dfc1c8c601fcfcc1c85c8cc24be7df2cf3c7311b3b17a4ef2dbce545dc467d2a92d371e02a196a9977cb9042b236acf99d8c0d34a1c4dd8792d3497cffbc87c397ccee5d01fc2c89ef051324a7061e423720d0a3821a36739797393bdf7a45b5fc600824a17043312bc +A = 8e2ba940fc511613e1fa122a9053ed96f339c11f7407938866cc974c11575b3b8a0b7ab2ef456a6d2db6e40073d145c52ad2b706836eeab58d595a0e0c39c6c91de40d0c1bcd6a9e6a630b510ccc1b2ca0f1bf1b3ebb3934140ca50f92d522a253af48272d89b40e2111e88b0f69a848871c0ddb492c3d7ed919d5dab8f6c777 +B = 63702537a07971e399aa9a1a0795db052d6c8185c79107216babe11d6d8d472b61e604cecf9eaa6d44a2fcdd1ef0b6b52226ea0c6902d929b09e16576e6d1a6921765b2134c5d23c69ed61f36ea9a5552e5819350366240693558fac7a9d09ecd3702076c8c758a4bf6843fa843dfd688bef3f73515db31bfc26 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 6acb23ea695d4b60cce53079390da3cb3a4bc3a6486c238c421f3bf6c93c027a0475f656c3e5435f0211e90458ae81772aa956ef284093020f7b58ccd9373f3fdd39fdf4adb8dd64590f4a7fc05238ba20017bdad07f5f9a6f076b71554a7741bdd8c98ec68f8fee88396cb1f47c64d6da4c228caa3dfc7a9a1c032a9ba4fedc +A = 8e2ba940fa9f1c57ccce38642664647812a75f9e54c688d91189eedb1990fafa2cd1fb7554906bf54ac082e5d490e800b2af5c5d3025d5e17214f3dc85905f9625c9fdb98e666b19ff940f1f8c892274c026a99c3b2e86878d459a40a706f3865eaccba6f04fe78d91dc407b8481873487c42f8fbd4a97a1c6fadb821ed06e86 +B = 8e2ba940f9cdcca65b1572be300153d71cf1f72d9a38ab77d742bbb505e138e1110501f9f7459e46e10c2913bcd189d9795ef2790a669f78c892ff4e8dbda75e86c90a2153b2963338d8575a8c64859ffdadb7069eec250a126f1eff83c0f89283ee408330f5acfbc6e1e0b9f90abb37d11e5d0b07d27670848846bbed6f7851 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 0c012c4d17ea4c95a360218adfc3363f6d89f5aa524aec70049ef94c2c05e59a66ce01e25588e164bf2412f9517b7740de53d037e71ec3a1d426f05b18b128c41a878da75421e8c8ef3ebd5effd40735c00818eeb1ec63182b44e817403c9f1f6c1a0155334be63a3a15109be6d45ac0d1b1ef5cc99e9b284b00c487d91e5472 +A = 0796fba6276fb7129eef2d1572b305f63d7b8c49371cfb3b2c67b141071e66ccdb5e321fa2c1bcf624c77317e2aa135e1137dfa46a34c3ffefa2fa3e316be81f45614d422bf86fe4518c2fdb7e416bec199de033cb5fef7f193a80c0f0e6ee924a12c8f705f5ed3793ab770914924b45cf2578bdd09c701169f0a881e6 +B = 12cf934763127284e642ddc232b1c889cd86617307b6ad72a9fe0d48befd7c5c5370a0062dfbde2add256dc0af850813b22320ceeaeed347eb9319bf22320b2fcadeb51c4bb26a160f7459fc172c27a91d367d5a232d00cf7bb778fba83afb744177bf1ddf45446baa035fcd0065f9b493d92eda37e9138f4fecf3ec55 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 3de123bbd50c35805b943e76e97b7e664eb9feb99860750bf97e275029e836217375cc1910c13269ffbd0bd72bb82ca445ccc4b693742a96d19d3dc23f78e5ccbba46d9ff5975f239551c36403ad5fe86997536456c4a5ce54807c24e3b5317b1c7b2a1661aad85b63859d427f0703b460cf72b9acd3f87e2e69d7f8f15e972d +A = 1d0433d84f1de082d2058475e0168ceb369013a67aa9417f066c29c28272a0b3f8be5ac7190ab78591ae72a1dc8ce628c683281a9ad563e134387b9258b9c96d2df288fc118a8cff068ee49d635343772c2fcc252facdfc93112358414e1734d6948b909b53e46263e9a0cbffa141ef77bc98e7fae8ae2bd85bd875aa7c1 +B = 8e2b0626a5045573c013757b969a2f422cbe330fa813135c43734c1834d45c61214a6edbb164530131b81a0db29ff27f8a670a93331bde04c9fc884d805e49456b2b03f111696d5a310c588a0c9b51f2fbf4b248bf1bda761fd061a7a234eb33ca90aced1f6fa567dbcb7f5a7a3b3df1546b0bd5e15a0bb1a051884523853ad8 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 770f0c3104c0f3395fabeb75ddfa2c21a111d23438463941239f7c63e4b6e6832b84508ebf3cde1d90cff0a2801beee05cd5118f9a726a987eb58def6780be899b473ea71c697557ff63a4c6db894e9438595acdd98abfb529d75bdf3c1d619d6165a9edb6aaab8ada50b61a3a84de654706a9aedb7321b0523558e8f18116fd +A = 8dcbf983b2c404b826ce3140fa3ad7b7894f577b26d17971cc741a6b9854b853e293878136828beecc7053214fb1596000fb4314712a5e38619ee38ed88068a14baea580080050f16e32c65a5cde87f7a14ce58403385055c3b4837853a77aa23793c8fe14140ba5c424f9707080752a01e4acc1ee916c950afb505015311b4a +B = 0552155ef110c126afcb87dd20251220c7a43bd0215ecd22249a21c93583e120ba6f046c6fe03086ef3c97311c4d520110a450470a473d8633e3560d2cb44c25559af07516aff50d6d176e8782c06cd9aadd3354cc695c4ea8dbf85e01dad479c8e8438154351fd5fcc6fc7e9d2162ce2f0179247f756f0b9b34b54be74821c5 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 2e9ed66317734668c4c354d720a011fc65bb67439b2ac9203dca65a8f567682be40cbad4f55a83e836f1fc135596b624e4327acb085a61b6398237fef5a6e6560b488d4a673b5ae7d734b896d9647d71087621cc81e94d58e01fc2cc2dc775f9ab1b6031840a672fb715b77bd636e3d87b4949ec7bd60721bec8f9907b7c072f +A = 03d2b4ec637124206318b20e6ebe82bbb0b3b90e6fa82a13e95dfa1150f0c42b9d8bbe49a674b18dafa71477336a03f4084338fe670df97f25eff08b4299926c4081e112e5a95f48663108d02906730d5cd798c1055b0c3ddbb001cad8b4e56792d526b6b18d6460a8fd4c52a3f541650332afa575ab73ad0209feb67c071763 +B = 57e1c76664d6bc3df10a85c7e0ebc9e0f8a40a4a8c2954e648fd657a2caef53233e8375ed863819bfcbc08dc36e72f88af3835c70cc983dd82958aebe3cc85ffa40391e312e6302da870ae0d862f0554df2d4cd18004d983b38f2b5a1235776a35fb1ada3483b406efe006b448a7ccc51af9ac2646d6fd9781e07313b2415242 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 6455ff7c12bf3bc37120fe3f1302a9916a6ffdae6ee6a37fc23ca2f3a7ad910dc0e1027d4dc304a8eb4eccbcf3c87cf52a13dde472c07e2df2420c1d36bdd5e88c3d76e774ccd2ecaf6a0ef55b8c60231b1348a738f812a4fd9d0c158fd5a9fb19cc7cf9f000860d4cb6509271c8e43ae4193843324db02a029beb58ec2955ad +A = 5cd8b7c0da2092108c3717a3fd14da2ffceb9f40a1bf944c4016ae338fb17d932d7ba3347c3dd4be4ba1ae79620e68d20a59efe1ff1a2843544109d9a189809ea872a69d31708d2ae9955e8719257dcc293fe9ab3f57cb7329cd26ae5e87c93fa0fdb1a3436d24b547afc66caf029a88cd020344b3210077af84a044548864fa +B = 5d99d7a7c2500c33b40676365607fa94efd8edee4bf352346c7269791271acef3edbd04aa15fb909ff20381c49b8c3fc2b56bb57f5066dc4dee5482abf50e57e31ffbc09f7fa837d6c45ab1829710aa0827d8ad38186cd12d4ae931c5367ead9830dbd5a8765963ec0464d6aa6c392ba54d1c3448feda0a5af10e33a9abdcd07 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 64104f6c06e563ec66de4442d35d88117f2535edf9e012897f44daab5a1b8a8696f84db7a68d64ae24a394debb993bf6734c9df542c7e473b2e497396ce39a064789d5d7b339b65766b002a18096e7fb9f312ea5997c2a85463fbd6fc18f25769ac2a2123ccb0e72f14b0608c4c22add72bda138b83f986e78d5c9da31b15b9d +A = 832633b728946b3d84faf290c00d9472a8d190fcdab924afaad5e17f6362ba6791e9c1ccdb06d611d3bcf91deab8a59610ecf0c128393ad7d85c01de485fadcb249b7144c628976c7218f5ac4065392ea01da1d68c5ebf91a49bdfc32530b969c4350f76ed7880766ac67dd864da6b6358c1bdd67844b5bc61eb72d38212ac61 +B = 415e6e6744df0741a8806c80f13bc66fa2dbb15e4df697cb199ca122cfa1b3654bb16db15fe56a750352c41b58e25dd7870cd2f90eed089fe62babb8e39e8448010d861ae606b7d595970dd52a526183a2f8b7bfe761ffb3a32a026c5647e09e83dce75dfe5b697a1d92102f5679b8f337d95b3a69c8305a1fad61dad2737c26 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 11913c40d577f70a5346ff1cfdca492ff52b640eaf257510d311872c8df7ba9756973da5b9206c6e5254bcbbb4bcfdad5fc4594e41ee44e77f168e2d20a4b228480a9908b102dafddd039ba7f7619eed7057e8af3a72ee491a61dd049bd947e5b09a94ef94d5f336945f47104fddb8493ef22fb648ff5376b68e96c0555d74ca +A = 08c4b48ed89e8e8dd9cedaea845bc8fe09ab8391134a7300224a9b127e8dd620e0a83600f2d15c449fb64c1f07da51e12521f726caecdff70e928664ea6d2c40f8771d45448479764c12efd179a39def63b887738b2b282cdf8f2cc2845d2d4726abce29d7034ffcdf40cc632386c476cba9ef65b1d8de1711070b9af78271ce +B = 23261f6f36e21c2512fbe4e2512e4da39665f8f4060f085a2a86a580f46b4997c961e11919b6e7505d0da61128d86b99c37486c4919de5e2040c845b829b913eeb022ab0170367392a9598b51138ef0c00af91948e4bf08e64a1532278b99877f23c750b7fe6741ac2b48300d7d0234474314fadeb740e1e04a00676fa2922f7 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 42f420adf5c6b32ce53fe23af4e392517e37013b8c3a7d035a93f6ff45142b0b0bd5525cde85f9b7bd9ce219bd3514617e89ef4d9279cb9a3e89e44f1994d72febd23ffbdb0a4f19cb76448199b31c5cc6d7ec1e46fdb67be1211c0ccd93c123d56ac0d9cd2ad11f0c58c713165003495b75b60665047ef80f6a393474cb727f +A = 67026f46f89b5ffb44960e3229a4e81e2c5884028ecfb34a329c113b1125a35717740d5fdeaafac5967c4a9928e6497017b0c0b29429d3fb71301eed8b3cafccedddacfd428d4be8910d5b694ebd14c506f1631b45341f2729cbbb2b7caf02b28573be48fc6bf3c8a5835a424ab79a3bf2e62c7c2dd8d9601635bf7a28786c6b +B = 6144c9c7a2bdc1d882ca1bcfed3e1ca1e4f89e6678cc04940433d415ca74784cf57b465d1288b18e5ca5924ca769bda3aaa1dd6bfee13f46c985786d2405378f400ab65425267856e54ef4bdb2e91507cdd023517f87a94e349c625ca79e57f6bf025a770a5654039834b96814af80a47d4deae220afc9ae7be470e8986c62ca +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 2239459025b257fd0b6659f54b8874f93f07f4d6240f8ad761c9da288cf1537d8bd001eced284bddf78edd611c7f28f1393c6fb879aab6e7df8eefd347d63628b1ae086148f488b01272f67ca19db71a2b284eb17e17aaf1e3e8f23ea253595de474d5cf47c16aecfae360eab7855868b8af361491f6ad96f893f9d3eb66d07d +A = 38e10202997872f9eafd13a4382f579a6abd4394e69a7fe34f2e17dc3d855fca8cea470ef550b6c2005b141665f7d054b052f82c7a66b40680e1f0264eaa9f6735847f654b948fdd127d9f3b91fb33aaf7271723af0b51932596e6dda8ff0c5dc45b8a283d3682c6cb554ebe283512b3e086879dae357fcb8364baf75af712e7 +B = 355a943b90003754968202c6a98a983ced7f66da5a89175e95b6b5ce57d87a8ab31b33d52a1c54dbe7a52ea2ae6ddc91ffee1f498d1e210f243d5336c7f0453553971b962e94a94f1d4358106908c736d929f3c139a26098fe14522427c615a206f4c223d809a93c310387a438d439ecb0b9abf38a32d5246dbd0d6700144144 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 7650985e7c6e5461268867dfa9782cd8154bd6a4bb5857d6555e9d9746ee79b37e44638940bf8d5e974911327f0e53bbcfda0739056bae2248015c35839f35e7e359e93d3a339e7af38c0cb43eac5b41e1406e34cdd4afd458a5d126f70b5d683415b490e0ad61269ffe7ea8972eda6addd447d97e60891e5099ee920e18f233 +A = 62c18b51ed61c3850fe76d89266e5a947cca047796f29967a6eca0ec23c8b9813709df26c896c6e8defad39527ace9c5efe319d0ac98fc796ce3ef0ee12aaeb13f9bf75490f7a4630332105589ab646aa05c18537820a1806cd5e4fc8abe18fd612fc22f22e0eb1af386d011595fc27529b5c4136c15c1aa5732fa93259742d7 +B = 89f6646504ad95294658ae769e1a79f7de32ababdf36d0ab67469d0c1a69ffeb3eb251558226153bcbb436a5c1358e9b3e6eb7ee540ccff6ad186b20a2f0ef2c730ef19727f1d33f9ad17353a71d7d46faa385a3bae2c44f7ad6db3ab43ba3ae9c10e9f2f2d911466d823ebd4317328c904dc464864fdf563a8445409d53ecee +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 35d48c3e43070a10dac0e256afb83b219aacc0036f554bd998b9092ce3bf87bb5d3b00947f2c86fd4e7ab830502d15fb2d4e47ead087f5c779a9ba56e272ea86116e2c81345d379dda6b581e9c8f4df8ea56c78f04d4f7412d245e00ac645847af6ae97d5d2ab27e48cc878d8b510c2dc753f6ceb1b9e7bdd923e0e065a6c11e +A = 179be517743dcd4e06e8f7a217f2a4726c8b3461c0c1da9fc0f2c96b924c1d588d3e54b1b0c970b3851b1dceeee6089247a28f029eedc3959b4b1aefa44e2c3fe370ffb4542523e65629cbd07190dbde3c5a8ed4e45c07143d06ce880fb15d0b1439714ea48271a8cfdddefcba01eb9f1cb4fb825577363c19be4a0c6cb1c2d0 +B = 1c46d2fc55b249973d2dc30d0385423f987999980e528b1918c8d080a59f2790a59e21cc855a76ba6438071c9f6204836666aec5888cd32ceb765263b37919a6b34bc3b1da853ab8955468aecc5c09997777f34ff82453538488523a420824e3835d87b2cd631d07262f436e808ddc64579dc452afbaead9e5b068363c1d9d72 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 445039f359b55eec647296fbff4f22beac09cad32cae79c13d591e314fafc2b77839816aa4f641250938865b0a2c30a10e23da71a6dff5985ebf3df4429fe64c327557b12d987ad9e9971f7c7b1e4ad01c94e1e5322dbcbc4707a959a401624619029558fd6f5b14564469b13146f9a2555916491e4d77caa70f51716b299135 +A = 452129b508a60de52c82622985b9bfa12b5a4a91604017b675fde339a1527389dea5c126ce6d8a18a84bef68e10d9944ca9fab4f7e305ec20fe70397539c3f0b75048d4ec45445fd081341d6e7483a4993e0a20a74f10727f89f326edb3884544a87e6d4860ef23b3f9619f0fc24a6f2aebd0aef503aeda46faaedd5d847d703 +B = 39cea0a78df8bdc3413fc2cff3d15d81e33ce494fa2ae94ece6969bd9a0658fcc687b1e5c31d10ac484791152fc012a59b954eaca0ce6da84b69475753308864299350f52bd65f8e50f2076794163e01195b94daba7f6a2a8f0a60ae49e46ae2c949f62a1cb78d49a1006f0efcc51ae81b0f1566b50b5363025ffa795af9d1b3 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 6727c0d0ecb4a375d0fd1bc52146da1242099d445ed9e87b1fad4daf8369fbeeec49027d88bd98efb425c1e3f73e412fb327680068ae57d4a53992f3759af0ac1b96a92f56c2cf552e6682d1fa90c3910bbc5c0b1754862ee13c5ebd62d5b98bfe8dbbf9bf53bf9ed0b967f3c9da24d4334b9f3f75314b429b05b8e27142623c +A = 0f4eea56b810bd1a0869d3cad0bb3dc823f9ae47d81a1cfb8e872bab2c1cdc49cfcc5f6b970ef7762c1f8803e469b1cd772909f5c3f0c1f342cef54b47cd7bcaa19c0d15d98cbde8f596a0c5e27c04136b581b351dd855f1c8e04216027a454933d0f5de0f43a1a758e696856d2929eaf02c281617e05fb3f41e1da33fb54a7b +B = 785a1e5aedc264203f899ff52bf6a1ccda3b9ac6ea29ab867bf2af9605ea088f5de20e172f3b5b2a3d1de676ab203ffaf07c45f32dd82df33b080647b3d7c0fed9b66d24f4a5af1369d63718e896443749f55f9fdd2f5d9008185b086022f5cc65150f2e9d8462234c5ef57118c2b92cec80efb2a853123c157a34ec2363a188 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 6e9947beae4d934253e481d27e854a59c4047eeee4fdc7df7e174a8f045776109c148ba3721685195b8fb59263def88891c5953b5a0ae85fcdbf02abc76f4d3c0f5d9496327d063ce8b3ba875b4f119dcd8beefb3ac884c25955af61c35a69d0670c3c349564e5b84f7df4252d6d3b29d9a75f09e9ef79f0fa9f797bf75b8ccb +A = 4493bb04deffc492cf31f39878767cc29e3b7421904a730e1345a6280d600c2f90e298fa5ca14da726579413b520c26a1b98eafb05f7c9cbf0191254837cee14f1d28d8f16d099792430e4a89636006cee4b26e5bcebaed25bb7f12f3e409218775dd7b91b5f4f18f6173035cdf8c040115af4f1a539f684c33e6491e331c1c6 +B = 0f31d7128ca48d0ccfb0b44d8dcb492b26278863797bec9d705e90274a01fceeeb94f2d87ebd1be1e27766d50d3ccdb489bd7ff37209bbe8a553aefc6ee6064439d56ae12b0b3309c29216aa5620f81482d452a42175b466e123dd33b8f0e6c287fb4a05c346f261598c2d1a596ec2b6b6d6868a8803ba311f91fda60577cc47 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 3f4a8d90017dbe8e77205e65fa7a0875a1ace6f3f215c2974e47dbac779804143da3dbce92db391c2614c078997c7d1a15439ffb51a5787f5bbaf98a4dcef576a6317b9b92dd8141a8fadc05d3be7c150630668e620a4e07b4b00519f34e422610a160de112f1ab8adf09a9169ba95b60242c89196ac6e155021dd84b3054511 +A = 07aa39d8bbbecb27551eedfc95fcb4d2e16a546b9370714638a57d0a0aae7b828ee7f406c53719c1aceb08f24420fff3c48c5c3ad55ac58b8d771b26d46208f0f2ca4b9a529592e77e72a79d245c0df66b4eb98db345719104b1bb402171a76c31ec6c1fb4a89a1ddbdc0cdfdf63ec1668a6aa67d4f059ebbfffd34d81733955 +B = 3fb86ebc3d9871c0ee555c8b58171f5b902890cddfd56af10363ab6501f905ff71b956a8fe05a5aab30e754985cf89e0b57b584b19baaf13de6033b90de7e981a5c0481e5395c722574ad38710a09467c78a4af758314ace4b916b66b77254d5cf3651c604e2db74d52a7f7d6a0d6330521130a7d3d3f4abf1188ca05a94c625 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 8a7f3cde3230af1f1fc25e0c0e9ebeb69161d3864fa5a03e5d7f8c82d9940ded285df35c008f61cc151b4578e2677b2f2cff3236935de5bb1d113597eee448496fe29bb18343687f6e9f1c783863e949a0954de2993d47a03607423b458bfd18c844ab57e9e2a43930df159ce8564edb5a2a37a06425626502e3ff9363b73c79 +A = 4f61db5497413668948f9dca639fa0b8c309827d09ba1bee51c9b9cb6e2505e1080e9f37b7ced0429108d2865be341d28a8dc113d2fb0c54701ba26b447537fc4ae4e9b663e431c21114edb04bfe80ca5ac6c8ae544db2a03cb886a47cc3d02895c12e358501e4bc0b78f11dd0a9e0b5cbeb93ca26af464a4f941a04d96caa43 +B = 07012f2a22b4feed36e3c42564d8e522d636854fd67d0cee672752a49d7d662d3a402c462b44e55d4cc9f528e8ecf5192d823606ea064ecb07cbeff7f3f8981f0c98d6936f78b856e55087fdc349c41f178732c63c86441a9e50f7540a200ac5ef0bc456818ea6bce8449493f78376247a6ac5ceeb987ca6d593b042970500cb +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 76f8b44df8d8547f8b3d8537393d2805c699eb37d19bd115bd5539adb6b6a00d004def3b7793d5c71e0ccd2b7e9fb87103c1a5f56a8f18ede1bfe1607a346297166596aa78dc584c7c32832e11b72fb4f2d40ae1591f341919bc0157080ee8febb7fee5461a918d2178fa407c37a8243e24206ce2c19c3addcc2b7c3c1912b6e +A = 7d77c556f07bf2a064615d8fb92797ef10a47ee09b6a0570bab9c0a75f6c974af941c0616a3dfde8207b2e5e521b1ce0d3df0d472b2fc2525afc382ead0fbbc93b4b3e94ee5092fc803ce3044a4177023c44f1ad593610f6738471543d9038915786abf1e80b3f88245f1fbd28c7c9831a99a286f63feccbd4cea9cd35998be9 +B = 0edf46c2f7d7ca2c0104347292bb7c2593b3e2fa771407925d2390564d3002b11092b735c0df368eed29b09c0b173d1d438a0f80c53311751c0c0e8fb489dcf6ec9113ec9598027fba1d7512d00d3c6819095e654f530e58f7e290b6fc6d08e383a6d6eb72c9e1bfc7da13cc9329568357207f127db545de6283682a81aef02f +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 0f580f9d2438b22700c3ebb23d1dc296f3d33deae2d32dea51c7ed3a0ce7b06af11046bc1cc279bb744bc31e7f822c17ffcc5dcbbdabe213bf97bb85c7e19ee71a513bf59b25b3b5787e42e9f3ef6aa1acb8705d69924a107b4f88e0cf9276c2c7c47fa4bf56c4900b557aa5587418f0ddd899630ad3ff678b5b907c07247b2b +A = 559a8425772b6bae495d89502ec0b0f612ce05901a75f5b123b9b739e83ba7288bf50d9f1d60a35e0231bd55415eb627547811f9e1d116fd42fbe05b55ecc65580df3274f04216e5b8112fe355c616eedab5b884df886f8a68268665779d317e8106a91965df837fa7cd8e243d86ea8735250ff6e52e9dbca9eb4fc081367218 +B = 27d368393d97aa7053f13fd6d289c8dc75e95ed80902023fd4bc5d451dc9f6f80a1c9c9093764c7fa8712834bc57ee79146332ffec2f99b4f53ac916c4fc42cd19c6bde275bb6a1086ae30ea83782728383dcab31727182fb6e3f080309b5e2b64681c57b0b94d9b22f6f6f7de7f1c0f6a41d15506ee0a180d4ffff0a41b3d80 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 0be05efeee19cc91e30a9277a6551aaea63aa3861b63f6061efbb0b92296e09f4709529eb849d9f40406fc59c526a4697144cef9661b556040458940ffd6a87ed56cb073d2ee0e6d1f05936fddd1b9a8974a3088577847ddde6bbdfb3d69158d5b3899c13ec78fb5cb6aa7204efe308bbe0b52f18381fe838536707a8a27ba0d +A = 2c8d9eb4e2a58670184fb9c00ffa47029868b84ac0142f439a79e45f81440d56961f9a141d7c93ec675cc8f919ea78c94a811521c96275e3c37ea3b0802464243f6ef8ad4bc80592d260ed1db89d1943148eb3fc7af6b8637502a39bd1a0f96abfb0b8bdf190a4219b316df401fd89b6cd62a005168e9bbbe4ee212aaf6d6597 +B = 0b62c2b93aa90eaf11bdec69c71db10c98634b260bc38ba8b99f5196163eaab0ebe5f5d8a8b270ff0da4ff4d1455230db7b10a3c91b4112d7cbd9d7e9a11978764524769956e869d4c74085ad7db55b519cabc90d3b8ceebe16b6f79ca4cff4372eb4785075f850fa0b39d187bf78470bebab071130ee81b84a4b2d428cd09d6 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 705bf20b7d92e68a69019cfd721b27373c7ff22f911066907f556321371fba70dbcb9774d3a26ca43e44ab20c586a3c1546fc3152ce011be66e04a59c6631bc8bde18efb7bf1743b9ed75a7a6c5bf5a4117368b81b112a3cd4e1c44a621f534a11c426451ea5fde880939ee5bb28d9843730e284520a976cd9f60c94751050ec +A = 80f8ccda42d67c71e2b300cf66dd8004796910249f21b2dae58fe8a2dd397c2e097eeb590095b7441fd99c2f8be6782dd31d1278bf2dc04cdee056591084ce99750b1c00f8adb53790cedc30304243bc6f745df5063fae339b17d47ddfb5acc84371e1788e589627c30c90d03f1cb83ed6c2b318f14ae7ea362531e19ff73834 +B = 2949c6fee310778299a7239f3972d7901a434328400440bf455c59ac1befb910af7e66460467880b85566e6645b284c0ff489f81c93fc4bb09384c294fe0a5bc9dca8d471aa5e3af2d59895fe80471171c294fa3033789bb171b7e9c5d6f4d402babce5a598b516c64669cb66440b5757022b40a27a1aa5ece6c3e496287c8ec +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 7306e3172929c00c29ca1db360eb4ce82066f237e9cf6aae368d1f531620e9b61eb64f5b3e2b735a3b565587d7e955d052df94a20e4aaabe493dba2c18e85fcfb65df166cc48733632d165129b112598bf5e4c58dff662e558e5f71b25f36708d3ab6536b1cbdb5aa2ee56d9e019a9c3629185b188af909831629ffceab634fc +A = 5cbde68abeff0a10330ffd04371c3dfc3027a2388812cb2b5586927d200ef3a4571960ba68b4fd8afdaee122424dc12f411d3d199537692e4cbccfb87fda40a50fcc2928e5bae460f10752119f46041e3377ca072f28a994826e459a5081fb923011ca94dbc635e4d16c144731ab0a90be090d3425ce59fd48f2bc73e3d56b45 +B = 3d680b0583f51341126fc355c7f65186b77e9a239eee80ea88e397612d1bf8e8f50ad7175b27fb7dceb6d93ac46efb41154b2fea43118261fa7ded03e72e48a6f20610cf7adeaa308cbb987576de3d7f0bf7f8d6836d62eaa36c59fc7defdbe23cf9687038c3f2108581ed86c0071fd67d36082a7d50de10ba891830cee92171 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 361ce44d153f4d251952c0b90681a19b7d2d8df7a6c5d459691a80c06107b2e818f93f30f8dad352d2dd87b01530d51fd1c67cede9b1a6167697098e41bdc5dc5e7a3c310116aed0c7b5fd99dfcdb3517c13daaba6ad10879f600eab846cdc110d392d9bdc0e8ab34b317840a725a7a12ceb48c75e8dfeffe2947aa85b2a5158 +A = 0cd89a84f0db9a32187b94818f89a93f19ce1f85181b88b2d657fed5e4fa85403a59f05a2e8fdbf4db8147c5d4a2b8ac33558a1195b51bc7460cdc6f393c4136235a1d4bd14edf4fdc74f4224ae57334e28c45cd7fa5abfee294a4b9d3d86c2b1cf1ce6211447e15d15102fbb95d16c812f583af13b7244da2a72147e0f7b3b1 +B = 2739adb776f387626bf0e1534d5f0ca0947d633d357af4238c906cb097acd033a224f12bad014827985a976dc93ec8ce625e62ed3e035295e0f50f757f52e1f00f240c3f422d319495921c590902e9f15a57731d3810b7e319d57b18d99be2750af6b475e1b8ed2d788a2dcae1736dbbb66c97f61502b8721a38c4e0c0081151 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 3aeb3ff6e797d271fd2271499a740a91569f300d7392a7b5898084012a3c5ad379a57d5169e43089cd58fc7210314758d5368dabca2f0ec5cf6786801bc99b45cd60403c732d9f98936aed76da724bd3e7d4b622dc690778f11fb0310fd4cd980b220627f7a864e107f93a6259081c6581e5dddba4890508af8057c1af29a745 +A = 3c01ac611a38dd8753dc7f9412d7cfaafc28e0f8f3259c692570d9340e443bde62045ce708f12931c365df1a63100c51279ffaf5eb9cd5fbe4a0d5e9d361978590541c4136aa0102d83eb3fba92c6b4b7b56fbd7161628aeebbbb6317a99f4752f13ab189b944f4423706ec58dbc4f3b601905f5125fdb82e8d5ab32c01cca44 +B = 87dd023be26dfda2cf0f97f7643feb6e066afb10e143e4497ecd813a4403cef4f00dab4c4fb45d6e2f7d11e43159b2791598acacd3accf342603409ca0a8a5b6a9d7e95e08d6af4e08fc438ce60ad022ca042e49940141f83db841b6f9386fd4aae6139e921d45f11f8b0e55fad6736d77f6d0805d4b77bd7eff96121f489d0c +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 734a429c91f5b0f06fd47725ded06222c0193dd407e9daf136696f203e153c9bf6df59016849284cef93fbd35edef2cd31c9b956fbe562d2a22100f177254144718ac7d22c99783fd523b642984794bd7beb0d0b363e28d3f3469ee332ee364faaafef25c1d4a11b5e517e44a412ba717a113ea9e1e8f2d6db8fad6f10d06950 +A = 1905086d5baeb48978c09bef95673d3164a6593338c921cb80436fb6cf623a7692de245ecaf0b77621441a81478c08b833110c2e8ed60d2e386977e14815a79c78d6238f952c26cede7d30601411b23e337f12e9dcb38754072bc2780dc083ef234e3e41efd91e77e9467d901b1818d718dfaf29ee1ef758a41d74fcd96f1382 +B = 6e52f31eb94cd75b1a5985454f87b07d2449479299c9767d0b2e8e91b183027d2eaff0039b60de6be980a2556197a1e5e268f3149041690d47e93ad82ee48802ee045f455cf35b265e0268e905defc63df179a11d6d28e0451eccf24a478b2a696e17d5ee2cc194b2805d3ef25318a0401dc6662ecf43822f31916947e0a1da8 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 427609751f28edb62c717bd98ddf999cfcf65128b652be1b5aac0dfe1bc0f7687c580ec70c8290455a9448c69dcb550c0cfdd109af561ece2ec8707c1d02e8097e780f32ddd932e706f81f68711acda0e7610f4dd0fd55f6ac7ca3a3184f655b0b29d2d62974739b43ded96b413b9e3f0033ca1edace24b6bb610bf06b5d940a +A = 39f9d6a8602f69d9caa78a6680e86232afb933f8087bfee6197706aaad1b5d986e01a23ab0e68a5d48615f3e95d1cdf3bedea4a36e9404b55061b11c7595e550e871dabeeb2f77aec6db0c62d1d1f4b1541c65d5fdf54d309e1f1b419f98ad657a9bf12de0204243887de1efbb3283c3db069ad3288be1c31b6bd8261f1f7f90 +B = 3bb5fef79b7f3c7a1abc9854fa661a55418659771168f02ce505255619658517385147e32abdbd4b1570320041deb73fd3756c46bacb4ce19eef7d6620fa20947e5d7e4fb97a90d1d9ada857b55a1775fe1a51a8744ba504f562930f116623b0e01bc264a292c0215cb6e4f1709e952e9e37bd2c22243eb218fef8ad1e277dfd +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 533d6d8d7384e6e65569ba0daae0a8cffbec1d20e417a6edb42d401a59de0a91a7e6854db081ce33b76faa63f6d866993c245e69ddbe6c86d339f7107a4807856cbca23cee2bf5496388ae8fd8d7c78767d0775acd7bd6202dd75451b424034e2766185969b5663b638d539f718e50a9f752f406c224c000bf1ae1fdd60a2a82 +A = 7d8a8c8f86383c51df46aae55a1b2125db3fd05a10113b977bf8c6c217d558501a50cbdd66a7faa6d3869f760d39f5f83eca0d2b550843819c716c69b9ba5c80c171d8a5e2f6445d53d1dfc0775d28b26b78175e27571af7643d45495806a890a8ac24a7749b6c2869ccf2641d2dc51d3a2a2400b4b94870c8b34934c8f0260d +B = 151f9170ef6b8731f80be191eeef40887a11a9614a370aaec248e37dd1e281662d2f36b6fb9980feb42f7946079b6255134033be7e5a63737c0c2f035aefab18af0ae0f00f597c1ba60d2c1a77dcc33cd660934c3640b0bbd31239fbb9f3a7ec0fb3385c70582bf75bce7ce4f35c3f59429b5ac8759cbbc091d7e17aa10cc905 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 33960d7ceac73f342d46275e04fed56563decf2fa4c0e9307c90288e911ac8782f8e1354fb051a9da8e2db83d7c710b5d2b611495e72ed42259ce783a7e7a8f601c07061ec749481d39a082f29dda1f9c7f444a33ae1c1055d37a677b848af371cd3bd41c851d31a07e144d7add66df39576b8200a8b918201630b3da8e664c3 +A = 063815fc3637712e3dbccc140f837a689488bc3585f8df9b5f6dddc6379f65b9029b5e5fe228c257575001b257e4612bb3c3884ac0ec5e9b40b1ff9024022e55f49c9ee2519681d4d9969e97f78418555bdad61db7d99784227774d06769a906584bbaa02d8c4adde53c37cb2c9c63a4390f39f87e76606a5f889446586b5214 +B = 61a95ac8d7450c1e84c4f878cf578a36a75f9eacbb2fa19ffb6452bfa8b326a703f48e09cf56f95f67cce9d5df6813be4d29c9021111a3c30d8454494a3d4e89302bc1912ad9de486066059bd0374e55edbb5ef90f380d799b4ab5ed0d57bcbbda3741aad1b3bb7702891ba4deb2ef2c76f2e9603331565a96b085f2aefc05ff +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 3a1ea3fccd6f336e6d444d68af1753b83145131954c20f1e3c433a89eeb7e267425a34d91f67fd65191dce85769ece2fc7ab12d032f3e30f8509095ecc05148e47a85391b21a18257c338a6a3ca9816987abc8143fe443342b34afd8a52fff00dda2e42b1b39322bd38c6a1f711051f791d6cad2a47ebd423a9b933485fd5861 +A = 8cd0fd6e7d3c80dd431bcaea37c32a7f49af6fe2b5cb40b3b7b137971e321b7fed8c83a9e3288882509f0c862389c5d8af892b799613f621fc03470d8a0505156933f7dc3b2b813a813892067371499a316e63bd9f94681b18ef35ec046c2f430e54d239fb4ae3daf110c1654da8142e9ddc0f9f3a6c98a1d46cef2f259e8ccb +B = 73123b70cf137a3c0d3bbff4d81547dd884bbe6309234be5d7185a8a3de97172b7e302237d0b8300cfde75957ec4225b2cc3264cbd73125c172cad54bd0f99b327a98761ae4d15521323f14a3727bdcce3da113ea2f26089bb4c775eb540c4527da96531330db60fe72db6a4a43f7d4ceb21a06d2f73652c5a23bcdc89056029 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 4331f18a94c169cf0253136bc4eb7480c9fa4401c18db1194371dd53e5f7b75f07ec2e1e1c4116a5d2a8b2cded4b22925b67a88af9b8479c6e821d58cec7ed9f780a4c41e729982cb33f69b87d01c11cb9a8f7952db1920b6eb2124fd5d820555a99327117d7e8e26d18e748fea3ebc17e1d07161fda57a21a70c7f4e251612c +A = 167c0966a64416255c97f30185c67f3b1c39b4e1cec80da6fcecbd56639590ef0916121df9d8b872be7365d78db36b7d995d7a422340355c03c5b8e8c735422bc5fac038434c56ab278995fb206b8b01e95580d95de6ae87b4fa885eca58f86dddef351aacc9832b87daea0d29ea8f75c414980c354516302b64030ceb2a58c0 +B = 75a596c8c1d90226fdbdd0872ab3f6f68dd2614465790bd318141844000fb78d01c4de3edde912256298aa806bf076bae134d2bb46954aa7b11ecba23ee42adf0c49b19eccd4a37c919d5424b7ab7148a8d5a16d429d409903e399ae078b4c6854c872caa949d2118e5aac44c58dddf88da3e613b92d1a93f92ce658f9eb5aca +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 2468cdb1a26eaee34db3d2724e37f023c8a1788526b3dca99321b574685cc8303c609c85401a58fe6da181daf4111fe8c6d4b7428b1cd301cdb9bf8cb6f33140756c8b490d3b2e538ff294fd6471c4d17b9d9e4adeae0df088cb9daee18e825a368be57af4a096056b9e76b94c8d3b911b6a074ed41082926773a585007752ce +A = 1dba6d3450c6aeaf768b5f22560d53808be49609dd7909e3291a684326ab94108d019735883d7b2e2746a1349376084d362d9fcd233eae998c4c4e1298e040e7195e4eb18c0e8235482e9df34fb7ead4d97e07ed298cbb6dc1f6cd9b43ac0a3c4bb5602f72d1cf4ec969200e541da69f29055959afbf09568b5f058eb00f5b71 +B = 1256752129bc0749fbf301a7515b7da2b3b02e4867ea38ffb8d182102a0560de5afd088820faa5fabfa891ebf81646476e914faeb94ffc0f1b8857ba737b03004c49726f098adf08fdc079926ad127b04f9cfd108b85dce48985491668a8fdcff33e73c09ed7ead2b10e3ffd7e3018771f48f5dfaab6cd613eeeb00db9e2c5fd +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 2909d3aef7a21244efc9b5b16626e260907ac11f3d00647f2170ba37197e47b9767030195c2f6d5eda717a83a152141bffed2e26777417ecd8e27aed8666698c2e85a414dddd52b07b52b0da7e08b3217fa6a331f84820d21086a4424974e1e8cfed3501eb054242a9f8bf0803a94981b7b81776eca6d07cd50c050dddf81d68 +A = 1fe3344276193338b148d24a283da1232a79e3c4511c515cbc656d51765639791d33149435ddd0203b022ad6792da6db6d747fbab3b8f621e396f270a8cea2ceae20d2fe35075f26899665a530aa885120dee3ad0ceae78fc90a4ab8b24768bad013a3583cabf5f887d32eb9d7b653869e8f1d02e64d007fd2bb3a1ddf1dc0ab +B = 771b74a9409159b2390b2e2356fa4d234e010703634c41a0aaa3c0bf1f86aeaddb225f6f1c00ef02022ef365e6893060927502aacc1764c742939e52bd0713708c9f537b9377fe6fdedba1c7b6932fd5d9554d4e4728cde31311fe4a597f6855a134c805a1a61491e9413ef6aa639e0943a8d03a6f4a04ba23ca83133322d581 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 22407e4fe280ff5a10eaf46d8e1f5a1e77a07410cba4106466d703b11764c60124fa355733b47327e952a12869476306926cabbd797fc80b4a6dedfbec0b7718ee754d447825cc405a98b85f1e09ebb9294c4a4636aebfc61af4545b921cbe759d3f389beece3f29c2c7c07691a4c46a1a72ce418a239fdec80df48732627866 +A = 7a2d6098d57699d749c4586436bc7f4a2a1813c5584e315cfd268ed87e1798f5e86297e0c35e5ec7e2923613325831d10a8f38c64a48d9a21c15736ec3b32dbd9a2dd6c6e8aeba8280ce7d13d0ec83335ac6e4b7949973f711dff25d8a206db602368fdea2fa68d5b29f8bcd923462bff0bad141ebea067d64168b81586efb27 +B = 44b1244138b185fe57267e68dc127801b7772d9c98cb9edad0103a7f9278407b8a6278a72084eb0df065019678e53e55a47591ef4871272b5a55eb643a300ae080bedec742dc8fca1cce92b54113c19cb5feab2801f26f87694de2351e056260716671771f843c67bc60398ae66631e0658a892fd408b955aa9467e89255fd7e +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 385ba217033463cd9cb882fe30373c2d8e8475dee54aba1ca9713a709f40844905c2544ad792784cc8eafbb412dd68de6f98522dfca1c3de8e3bf4cbd09bee4656c4341153b17c98f9ac09411d16ec9880835cae772bdd8eee51eaba7c02ca6a1034c2c5d2d48e7ae3eb0e22f59bf69537ab6f1e49e58a71c64b8934113eb069 +A = 7d3ffacbc5b44ef4e8b876bda0aaf996ce8468a2bc9c90eea56ad07b459667b226c7f4913e8a26c76d7897e8416728255bedca9d3699342e542424b6ab31247015b87aa73caf13762ff7f4982e9d5ec47a731aeb5237bd0007ccdec785ab3d36893b3fe95222bdc80027ac067d92e1e0c2528e29856287704a767a83e9e8a10b +B = 2db682f1ed91a8f6aab4711a43374f7ddce626e2203844943923327a75560b9358caf635a6a0367a871adb52cf1d69d2ac16e029f1386eb24e69662a3211498c13134007f53b24e8cc19dc8579187a44f71c39692ddb63c97db6b495f2a477874556f598de1654addf4d2acc640925e8d6dcb0cf8aa505ea94bc6d32c68b6ffe +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 7865f718cb30026837ca006f5cd997c5b917726ac6d9bd8c3fb9eabda0854d528d6cfc10e4cd3f93f6848582690c6a83955072daefc6959d33192fcf42a111650e50776ba9ae43d3d26e0ef2c6b60c3871aec33eda8c56353903e7ae96592fbf350b88d2f56e03f7f327022a2aa9b7c484a000135b85bbaba6f8836cbfc81901 +A = 7c2990afcd18e3caa1fd69d3d34012df8f224b31834c6caa18fe955c9358aa1e5baa5d5e55fd8575e8b4842d0ebe1d085f5d0b265d85e1c410fb56250e5bbb53ea1c877a01508199960da3baeccbd789bc18cec6f5e11468429131d4ce6ba21ed1d3282acc79f1c712c9e100701649076c6619ce63687a584999be1fc36c637a +B = 2da8f89ea6ed4852352fa7134218a60afe222a13350865dcc5386fa0dbddb31104447d85e747d4e03c14249b914ee0e33810c26a0c9642412cfc87b7bca63cc5474ce3a080a9944a9ecb01687d47c2007e3304ceec2d2c3fb62288d707f12c36a2a3a4d7d4788d5e02e7e6933484fcd0a13ea34ddbbbc23c43c987b29e6a6566 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 2d3dfd14e7ec60f842d1db83e29a0f6b052990fe8900887dc44476ed3948870c57e72e91e1941c476baa6aa86f76dd8ab6e6ea41707242c46d39b54215bebdb1f28e59d719fde18bea9994610214ea68ad9f2da24e1ad8a06f8bc698f8e76379ff332a2745af472d52a4b8e57d60280e19f93d5be669e0832824321e9ad8e76b +A = 7acf033f16023d08fd1ce59bf509b356780e3a3f67d8e51d113acd842a2e631f78939c7ccfb759c2c23d1f6551df12a37152d310ea3c87944000d693b80a8348d4e2d8deb20afa2b680d60d175885793a356909e9f30c0fbb86416387b6fccd5c283ab24c2f25975d03f4f63ead50677d4f36d4abc6a587e24f4f84f5a479d40 +B = 8d9fed484222a3b0feae346149e97d6d426484a23109dedf713f796f2ac4869c48052619a0c6dd93f83a2000ad2e17ba5d07b03499f780795777b60e8a6e029b4192cd951aeb96110c2e7f9b222e222ea1b3b0f6915ce082cf89bc9eda3b093a6d6e6073558d639e36b338d39ee1071aea397af849776ddfd3b0fbae1bd22c7e +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 3f66970f600a9d09d73fd1ff813e977f539d69fe1784b8a2f99506d868418e4b47338ee0cbceed555f88824f98ffed39befb69e8907a5822ef7cd2a9950a070aec8fe4db9d68e1c0620f9eab4ab529c7e69466e325fe1c6c011bf7ab62bfd1a136597d7d5c47e8eb161ea048477bedc88fa30e4f7ddab2cfeec3fd0bb3fb61a3 +A = 5fa80de456bbca574fa714911b9ca94af1173eb72b070c02ef2d9d309bc9a2280da161737520d188f7773713b49609d0f464b7f9ee4e6f543d7b4afe587f5528e48dfc5d0f57e2f80854d19b1a79014d7810307738f8ee9c95ebd7a14f57dabd1a65306ad9490402cd5197b4b875edb11c7a8c8a2d84ff18c90374986736ae30 +B = 2b8d6d657673207af8dc9736ae4403cbe18cf5a7342db3a642cd64cfee3c7169626d964a11f0d729f50bf4f1d168ddd25925122513f212b22d469246a5d29139dca4b672c05f5f0fbba8f3ebb155b50827222509fac81a29569d3afb54637a23521297424b038c7d494cd17f034cb3f4391618f9be7b83ef9eb0b9291204cd8f +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 54e95e86e87bc220c8f53f8485402327885be34e34063a1b81e52a23fc3056758cea1c039ac4e513f70ed9d394f5806fb771dca8e342368184e674e6296b9a705c6380bdaf11550cffc73f9f55b9385c85fb648f105f11138a3e1f9dc0a39a0f9755f8328701484d45784e3e4b2ebddb32c9d9132867c6513201116428b791cf +A = 0b173f5024117f01e232da94030550f07a8238d9bf01f724556b8c9f2b9844eca40739099b26dd07d8e7f987cc990c4219fd6b85928caa5ad34ceb345768a3edce117ae13f8c24a0fb1bdc7a447f17a545801518e4672699461b90b49fd063d1e9a9282b92a145df17abfab8984a08b12cf99fc89669b84672f2541860fdce26 +B = 63ccb7ff8fb3f8b0b81d40ca99315bfd75a59b7094b349bab7964707e13d45c5adaca7384f9528e327bd7e581ee626e99afb854ca310bc712f63cd54071d22944a20d722bfa2dee0b1df774b36fcb22e383120122e34d1cf03d89e61ce08d1a2b3429926a6485450c810edfa32e93b798d1d21b2837de2dda41ce43ea92b9f6b +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 6e0160eaac8e1c31cd3cb6c5fb91ba086d033b4b69e41dfffce7569e61770f6629f23e12f0074c47c46653bbba94701ca798e1a242f7c4e25708d3acb5af6ea307b95cfa220f8879cb4cfff96b843d6eeed2b15c8f1bb21bb2b511cefbad0618d49d9ba33cade6da6ab3b846a6a24e35fb36d41201d3b85be831522b9bf509e0 +A = 0a1b0cde1403c856bf5060fb62659d4d77168dbdd0555e143f913e4e3e59a85c2f5acb33183efe10451011bf55b5349b580cc4c77b0c2e4e43c3701a47ed77861bdd1cfc72815648f9e4cebd0ff5de14569c9e2fb4f28fe5353b6c02c29e5d59cdd85ffb4d7b00cc838fe94efddbb0add5961eec10a305d8717c746640779cd0 +B = 4adb59a7382dd54a507e5c43540edf84b787096c678eebcbd518b92bd18201bbe08bee538061036df61e7b776d719bded24abb5d9da435d9c5a6d65a8adf98298ac1940e92f92ce8c998858860efeb80e094ab12cbb762d1c08ab67dc417d52cf875f111bd296a5c116fa622a8d55c46791022f3e6c232b351be54509c472450 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 8dd91f390c1f85f153f332de17e5de82979755d835398cdf3dbda1ee73c68f8e7565a964ae33fd5b1f1060572bb3af67eec79c4c3e2eb4de118d471f74351b80a5dcafc682bc3cfde642e611ac1d5bc2c49b308c30985b1161c4d78cf7621b503e2dfaceed886befc004f3a729b4a9bcbb8f13791d973bf38fb8101d6b7a4d4d +A = 842b8a197700ac4ae9ced798cae3568d338559d8d3f26f413efe95ebc71217d5d2d5a7a8bfc9cfda8f9df82aec12dd16b8ea1ec87f32445e4e69965399894c5c3eedbbf5125fc105f43987d88a9635047918cdd8fcaa66cce9b8feacbdb378894f80eebd9854cd0f8fee40977b0a460cd3d6de2913d3cd5c4b18f9b0d20fcf35 +B = 76c704cc65ddbe15e475a9d2010cb4830ebdfbe0db44e2b1c8238c1e01c3dde1f7efeb872b1d3b248c1c60d2be99f998b07d4fa31766764e020f02582c6740163d1d4f65351415cd0d5f51b4777c9c3e7c53691043e4fce0f70347940723ea5ed38a0ba978dc6c9010c0c16a64175346b619fa523927bf5b0a3a96e489f1322d +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 2b591d2c57f6a5484b43cd7ca247c48a1b38319e843257331c8807d499c7763de4eefed529e70d4c144e5e843ac00ee8d106d0d82163cfb7afe528a7daad8e7ed105942d1128a67e38d59325cffc0c3dab9185247e0082e3ccca82a900d917c9bd0f892d4b518a752f8e9d38eab2acaf3b3b59f15b0fe4cb9a3dabe6e0191493 +A = 4d424d97df47db6bdf0f0ce58e0fc09db1455b7aeed444c9e099a344a8622cba9f20efd478bd1f542ba7a33bb7da8460f0b6b0489b410865e879a490df70bb417db6f0646761dfa1898a032372e06c15cbe34d176567f2e4f921733a8190603dbd6d3dab47de0b14031d98ce53679c390231197553971d0d315b2fed8f6506bb +B = 0f6d57ed815e0238a33f7028e552e40172546b96996dca7fe407f297164b5047d57c0b927db499abd6617199b62c3b307c9300ce4a1c8f03160d41004d2ad54a94402d6fc17521f1f4ceb3eda248d58de6d1660f803c45d210ea11f56c07c6bd975e533834c80f535e2d5afefa54857b3aea1381674c94d7484c7955459e8aaf +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 2f53bdd643b5b22445e2af3667a93de52f8bc7bc151e196c0ab0bf3b4e4dc0e5dae9e507508711a9e3de52e2aeece6aff7fc8a1db65588de3272839390a35a847e29204d3b9b70e10352c88a10c86cd33e067fb530d20a3a5ffe67938c5a7a9218f1164f36a73324adef64da64d5fa5540d29a76a87ce010fb7d73a59b109280 +A = 20d5bd41685173e10f25a46f4f276cb6b99e5cc361b4ea50e119c872ea538585d3255a005b4263fd86c5e51e75d83a7b923fbfc631d2b1759517e7983e6fec7035620839de347e43a814da4895c515c23b3dcb8829ee4920a6ffd2d7f8b3cc08b1390867c9de0d03f1adb06bb22b18c956026377f79322f78b28edac65823bf9 +B = c24e1143b337bb49c2a51d4546d45b24a754d2df0ef7b1c424a2224377c0bc560742ae8c9101ddf0ade3a0f5bc74f6c2354f9918baf48ec5c5395cf7368a0c933730742687e82f71da221f72dd7a8136d4bf38a608d266fe663aebac855ea7ec7f61c5546cef55d629b5a60744ef06feb1e8d29643c3f7792bec897915d88e +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 32d16f7ae2632b5cec2e90c34d191599acd9a1b5f97845595988c1d0d4ceb9acfafbc4aeee9924ce55e109ec88c57610fddc664316e0f9a5e3ed56ea447111c0383ecdf117ab42351b80e72720a4b1d98d4c73f5235507c5b4f7849d5e9b527d054858c0436ac3d2de2704c4bc25de4cc702f5880d5ae34094766938bee555c8 +A = 7a7a8caa1ca12e3eab5b6c974852f45f53b697db1ecdd17b04c5de36a4b4c90984e68a3c331c363a2b0c7d8e2c5886a49fc8f433c0e641801da54c4f40cc6f2cebe9bdd531524c8d3a19d232b40793e7b568c30b07488f939a8a2893b8bfdfa63f26cde242466b82d8d5567387c836b2c402255adbbacc23914ba234078d3531 +B = 8193b601cddaedefee05758ef0a550142eaa2b1fda6ad1e20a5a0e0d546315e8562781faddfe3c8271187a0d363673f817b3b3eff03a78064bd1c038297cb0cd749531c5acbafb87fa7a251e45291473d2709392a0dd29cc881a7d352bd93fe8272898ff57789aff3152f101afb73cc93047471cf52cd4f66f30d0d3015ecb47 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 20877c7f53fca97f8e484ba31f23dcf51ac0f4fe4c5121eec576e043c6ec5492725f1b9f9ecfa64195f71909500a69fab2e591377cc2120bd5f60d3fb3812f9e80b2f6c787e0081c1439dbea76b819ab44bf6bffe87dffd771a870e4f5502609249c5260f91175fb217a9eece4166540be877d564049389306e0d6b313706297 +A = 2ecd5ffd075fc75b53d8e43a57b0d3a4846ecad5ec51cd3648aa734ce2ac560ac098efeb6d29ead3d58d8d90ad3051a800dde6637b2cebee2aa2d35b659c1f8952546baf3519a860b6cddfa17a0cdab71f80239b749fbc904a1422f0253453f63edf45ef4416b7f90dc07054afca84b3766716fe32f4747fecb1a290fcd4b5ac +B = 565ce4bdc7eca8d5bd99cd99ff6fb8ee8d47f717a0d2a58c30bed1b4faa46a4071a7aab50095af5fddf9fdbdbf2bdcdcfdc01b5300c07c078800d9ad2dcffaff29b762eafd00851fa6f7b4bac7dcac547f4d7a11ee5a4bf3de51f2cfc55cd592cca37c67d43f2f12a691b8aaff2ccb90fa34d17cacecdf27f132bca026ce6d83 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 24823628d4fe9540103ce5f611f8a6ccf18788120280179a40c2636f30a13e5076503e8a4b6b6ffca21da5b0f9f0d85feb2ce10b51292ed069f35289ebf5130972d720d20dfb8e6ee80c3ac598570d38e57ba33dbd75f1b03eab7847d865c3e8e471ccaf302461a6136dd13b8d31c9f163799a3c24c7284b8826608a9543816d +A = 2e930c17984ed30e28ffab9684c369fa37ca2f39f6d03e2f7f7714c9a7d8afd41c64277fc5777f5be047e78b06c294e6f13cc25651be8f02b49cff58091de0b6137b7c5fcb9045be33a250895db9bbf1436f8fdfbe5721f281f0d1bc689c07fbd6199ae567c35587b51561d9ee3e0fb650d85c825f63ec11c1ef043588abfd0a +B = 4e5a846cbd6e04d987c003d84d4c62db6c3130fc019b76d8798d1d0f0f01b104e91e86a4c71ff86f059a49b5c4fdebddb77bc3f79a584e94939414481def37ec40f04f5ddc425044f4b13b5eba12f670da79663d89877e35e3f501e496a412ba99316bbfbfab65339acaaa85c01563792abeddb8a3262bb6589cdef770a775ce +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 02c4bc23d0b4b1f79141be9149ee20cc9f1b58ee0a76d5f4205e0862492c18daa20171285d6ff0b600c358be487e78cb5450d151efcff8d53004eece94c5a37f49a15fb2b5f62a79568382cf0a4232407b139e1ec5a9595bee8435b4f138dd72fdc2946b03817e49864812b7b61f179bdd8389791178a95bb6311df0a5c60db2 +A = 34a806fb93c97f5a660926cdb21d66f8fb65f3585980c9157929226a48a9cf933f4dbfc8d5642f3a1cdb71f3e0f3d34a886093d1550e7a834797cf0a2765ec71bc40c0f6d1180e09c21d91be88057232fa9d0d321d6029eb65e8220963dc497edcd2688ec3350cb8d205000aa0ef0c7f03e5b9e310693f0f1e0c114ef3ceebc2 +B = 5dbdd8f9e6a63c183f3307d1678402953e333b19b5de0f637c4a5cec2e087b00eb389b2be8807332843f62696f9cdd1393777bcfa98edbad0a6cb677044e0e3733c15742d7561ea119f0f7a387341cfe1b7e4cf54616f27a487a34fb761f741c588c60f9d3a4e28ecb7b1cdbc0292bbfbf00baa44bc7c06da9a00ae0318400c3 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 36e1e0b44e5afc35d1e19e88e75f030569eb99d326721ced9bd7416ea7367a98305354eeafd204f1f8a652a8442eb0823d2e6644e6320933ac481a3709777381dce8a7c165b23aebf31b2ea2745ce5b352acdf0707234c824da9e1af98bbedf80e940fba00c229539f310838bd625f1fc103f267265ac1243855622c5df72c17 +A = 737962a54816deb28edbe9f7b92ced834b5ae03e65b7af3c70e218f9343f8a0a6a67bfbb163d8af18d40012111a5eaf873f48bacb730bdfa12991939ae0171a0758e101393fc65d3f58c636f900f6d68b7d3f45d05e21fe7271f477bc0551995018da1010dc74d548cdc576eda728492386086ccb225e80561b3217354d696ce +B = 2f01dfad0b016691167e2db9392554cbb502d8e6018c8d95e5c9d830368ed80358387529df98b420423c08122852ef7969a5ca11c73b24910685c683fa3f0a08efdd4da6a06ef89336d32c0704851d361bbabd0163bff2b8680b5e86157a2ffa94c559291852520c1c94e65a59e2e3c26ac9c4deddf9029780d702e96e9129da +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 77eb3cb5277ced02b72368e41f04a35796c2c6cc1273f109336fdfa745aba7c755b6ff3833e9b124d9c78584f6bfda1c94273522f020371107870c288592b7c23964320729d2308bac8813586e72078119852e1d7706d8e15c195486b8d94358736869b15d59c037ba4dc8032ceaa31eac3a9e3dc51ee17706a6956cff8537b8 +A = 7c780aaaeaa1c54e74efb2e896b3ea0fb8be1dc263c73d0934024b28c932d5abf960a3a2bcf5d6befb8ad1f7a8c0a463b08638cf04dc2a65d8c69772299f7210445aad11a31dac561dfdad8fbd608567c9e872e07074ad13a47e2d153332b12074f4165a013134a79c6ba6020999c3c5efb7d01354db50bae7a4e4270d17a133 +B = 302f31190e24f25cf3bd902c25fb1ce7463da9239df24e9da7c362d977bc5932aa39455417328185394301d5510a404707bc70304fe357c090eec66202b42dd871e1d37b3b75d563dc54395af212dacfbbac501bcaf5b0f3dc83ba88b362950400f977790346a9f7f27277272731693960eefefcc82f507077b5b63d48016d94 +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 660a1f378a23fc3b47f693a347d90640fef43add9729d74546933f4b78a26968cc9a70ad6fe8d85bf28164881bf7a99e8b96683c6f4fb54162c144f99a27e3feb736f0d382d7e5b934cfa835c723191e5692b7672cf6918c4a7a93b24af00b1beaf1b80320b14cf2d1539e3376779872542406a5df961f765e59f3480e1cd40b +A = 518a4f172c7dede92821376b9da08aef36716b3d4744b1583ef82a18bb2429b22620b27b7470a3a038c588019f6c4ebc6010f2c18441a0f2f50f4172b7c4b8ab3f178e6e4a60e38b5c928817f62a4561fbe517c705622f4c48e4ba788ceb1077d1e0c9c13c90ad34c113056fff45f8b1fbaf3c3bd7c1e3c543848e75f8116a73 +B = 41de4428d0ee5534e1c77590dbddc8b86460561d2d9834a50a32cda9d5d210fa0ec5dd0cf0c4c3013b7eca2ffd48196c24a5fe08dbfe2694ee391bb950745ee67b32194688ff41af5886b616f8f109050bec544737d5ed8c00149b90cb8dda4f708d8e3f67141dc9ae34cddec5531e1090441114ba5b8e6af3338071c03e856a +M = 8e2ba940fc5165c6c5f7f4cb56a6fde2fab687651099c880d38f6eff2889f6a3b2a3a186d1fee05ed452d11ac712cfd30340d22da763af7b2ff65a3f6e202e8b4f42cf5652c625fd9913b4a032ea9448591b9a839b8c25d2323cc2d0d3bf7a6d15896aa85237b6ac4c9c9a854a23449e30e6a2b7c4a2aee199bc20d30af280fb + +ModMul = 872164b92b9426b237858c4cdafe1694f96b0e0e4c19e894a0 +A = 0c3255cb24a813e27c3dc410f0 +B = 0b144f39e7c2d33605ba7bee16 +M = f3639f4dfb782f3107eb402fabb5fc878903acb5e02e129077 + +ModMul = a8b3fc0b53df3b92753edecd6fbcc5f4840dad3a44da704e34 +A = 0b36249e259b303e453757721c +B = 0f0c1db50670d92abd93bdc84b +M = b05cf978bf2dc7e093d7d164e46d547219c480382df32b33d9 + +ModMul = 76ff291a02715fc87ebfb3e99153c04e53358dbd7beae43478 +A = 0997c4a7b537d9500d73a205a4 +B = 0c679ce666af284a459ae5a26e +M = d0d0fd4922953941acad8beb65c00603b19eb44fb8ca51e3c9 + +ModMul = 8f4b8a585415adff3a7bc35fa88891ba31e4a82672c664fb14 +A = 09a2b56a54bd0727ab4be57ff2 +B = 0edf1781b4296567990773005a +M = c5a7c3b97ba00d6f174a019c6d37eda52036c528f351bef0f1 + +ModMul = 7f8447dd983b113f04c6288f9539e53a2e9cddbca8b2fefcc0 +A = 0f67636b03821c8f13f21217a5 +B = 08473a29f4ae33f36a0d2c6dc0 +M = b829af37b557c3ddbb5257c8b19144b90708a45a274d6655f5 + +ModMul = 9fef1c18778a8691c5e71c0b5208e82778e9bfb632da0b7e28 +A = 0bd162c90bed25e84dd5b6b77c +B = 0d887ee03020c5df356f091db6 +M = a2c2d45fe9decd93a0ca3edab8fee46d27ba23fad9b5294d5f + +ModMul = 69b2dfb3f1d8dbb13e9e479f38edcc427d5968acb7751a226a +A = 08019266c548982a520ab48eff +B = 0d33c3e3b13576dcdb3ffaa796 +M = e6255103732475604df7c6f7ef7e6b49a8ef9e2b0c717925a1 + +ModMul = 88b4d86b2c1e1bd780e8d2499c2221e05fab4f9b7047c2a044 +A = 0a38eceb9c551f0e69a544072c +B = 0d5f8e7c2d534b2b8985bfd213 +M = ff81809b84fb8eed3508ad891d3d8208249d8a902a12d6acf7 + +ModMul = bc5f0076a8c2f6cc8f4e61540d2d6f6d6b13b775b363dcd71c +A = 0c170eaddca5295d6ec6272dc2 +B = 0f94a5685ced7661df2efbd34e +M = fa6bc46aa05033af72aa42793e9174af2e3ba38992f33572fd + +ModMul = 697238dbe3d395e81f20c9fcc8db30c234a1f75f3b2bc27438 +A = 0930b04224bc097ac1d8bae8be +B = 0b79496a80e45212c4663e5b64 +M = 8ff7e19d967d317c255380411898d73e3786269f09079f19f1 + +ModMul = 8ce1e17972f1a9d2e9437d0c5219354728a5f31337808d7650 +A = 090e5d18b017118177ffb080da +B = 0f8e7e09032574f6c66e623ec8 +M = da795e6ef63ff7dc4baef5c327022ccf65d44e3c4e24823f11 + +ModMul = 61d0ee0786963906a028a1df01f836841ab6d39d88ca2717c0 +A = 08e57680f213d088ff1a1e7db3 +B = 0afebecc9943b0093f87022940 +M = b6201f68a45265d7e9183c3255feb4c110c05dadbcb13881bb + +ModMul = 861e7ef401866f815b983ba18a612913ecc20a67016d79cfac +A = 0fc41a9ce06e882942f751be7a +B = 0881c05a51d1ba8134d126a48e +M = b12200b39526c33b70e8aa23ebc400dea0d4d8fe42be103d5f + +ModMul = 814030123025d287aaa8b826792999d72f2d589e0c7f7f3dbf +A = 0c3b33f391e78bee97ceddf313 +B = 0a9136f3af450fdeb245eff425 +M = b6aa9c517eaecb70781e597b907583bbb569e970d229235a35 + +ModMul = 8b16b82f064f471983c7154abc9f9ba355111bacb90400372a +A = 0acff8da571e1c96810bf95707 +B = 0cdd23e5504cc26d0c34a62b06 +M = f38902a99190ae0b5ef26849a6e943d651925666fea271fee7 + +ModMul = a31401dfa761bbe82b66b5f094151865b18a4ba75bb9b3dedf +A = 0e6f48c027284856aaf3b96425 +B = 0b4c326f72a6a22fd4b93ba5b3 +M = e57d9608ac6e5b129b2c014958bfc59137f63838b1ba88a4ab + +ModMul = 4a8573dd8dc50a4fa39f3579d3869745eb8c1153ca508deefd +A = 0855f941d085305725da617f5d +B = 08f09b7d2c36e0340523da5421 +M = fd8caa05edeaa81beefa01957eed97a981ab34bdeb6d8c704b + +ModMul = 81df390c9e51b30bd639db15adb464c7cb1d011cb5e260be58 +A = 0c237eb242c40960861c938c08 +B = 0ab2f481f0d768eebd90d2574b +M = 8697d7a28a5f42c9a7b31949b8b568f861142f44fe66c6cd3f + +ModMul = 0761438baf5b02dc095b7040e082da7b167c2b9ace956284ed +A = 0fd91701ed2151f8e994bf4ee1 +B = 088b66e735b76972bccd9db182 +M = 8008b2d1274456aa68dc627b1ec3e1762c6ed2d660c64a1a55 + +ModMul = 6e99aa5b8107399848cf24fbd88ed6350efb68d737e505b466 +A = 0ca6c51ba2f410d09bf71d60fe +B = 08bdfa8fe5ef3b2ad02bc63c4d +M = 84daecf412b8c50ad6dfdb546c3eb783dcc6f32003eda914bb + +ModMul = 0536175913582e73c1002083cb0cfce5471d4193a5b717881e60abfe927c829d +A = 0161d774df9a787bb5861d45ff4933ced42254532e799233793c81fad319c566 +B = 047c09252d9efed9086fb2fb1fed44d7157a48e642a056824790d6e81b4c1f2e +M = 05efaeebe212752b28b5441a5d0b2600190504467c6359e9ab26320ee72cffcb + +ModMul = 06161cceee2b74e7965a926fdf5344ddf8cc41994d72154a8b6014c18cf71634 +A = 05f37c973d1aadc7e8a15a6cc3d2c7b20d2c1e30fbeb7554dfb4cb93334edbb2 +B = 06d98b39fc484fadc8eecd32c5d1652c3dca69343f07337e9d25618b3fe1b36b +M = 07c3e3b8b1a6110da82674aaf88c288cef4cfddf22e7c9b75640fd67fa5fad59 + +ModMul = 2acd55bdcccd55882eff0bb262bb62f78bff8e932aefc9d32f54d5d4e9b8bd76 +A = 17ef930743334d382bf1f66d37add6e8ee819545997ea6a5c58e833acf159045 +B = 28af21f28b148683ad053aa552db604236f03d61d398f29995b9e091460b7888 +M = 43760c71742e9cf22cae6fc262c008b7f1b97a78c8063957b74aa4cd370c1eeb + +ModMul = 504c11e38284a30e3647c1ddfaed94503d833bcecdff05e749422ad1d9442540 +A = 9231bd46ae8543102fb06042e019c9411c5a3b67f540d730f359e9e77f1f4645 +B = 1c46a398183f9a162b211d4487ede53d4ddfe0a35661fa87c9b5884cd67f5df8 +M = d79fab3eb31189268b2a0689cafdaa0826f07d432591e8aa8bd3c7cdce1470a7 + +ModMul = 13a6431c57ddf0ed3979412ba8454a0dd9a2694a0dd76453aae63366c46e41db +A = 0aa2149ea0f02dfd92841cc2c44164bfa6d4c06f2bc8df7b2e027a2b82a60336 +B = 16b9ed5257ac10c4727e467b3bd012f6ab3cb59b666e6f287bbe49e3c4a0f92a +M = 182572149b860615dd853f37f7d51a35e85f5e4a4249a60fde58dc68e0dd7401 + +ModMul = 0145a44566bd75103083b7556a822ea6008ed3a6a1bf135b68fcf87a294c09b4 +A = 10bf9cf97ae92b444afb3f94b355175560f9edc033f9635f29d97ae10e434427 +B = 29509e418f2dd8a84ebb52ef1112df765987f1036149f6baf7be82c96a11bfe9 +M = 29b060ee2aef7e43e02163d279ce49259127198adf462d13aa195c7dccf573a1 + +ModMul = b00740cef7791692d45f5a7110f3eeb260638f19f87c9245436fc0422de90658 +A = 8f82b047f3e2a9bce8699d4ca12ce4662b04239cb817bb36ca4ab5ed460bac59 +B = 3caa56f9c57ec4862263e6cc2b422b3d8e98517771f8f7b95c87b44a7a202818 +M = f975a94fa62b4c0e68df5c3ac5917d18927c0a6d9cf39c26f6ed97a81cedf227 + +ModMul = 0dc04b6ba2eb1e34ea8942a50d1d0c5479dd22109895796ffdc9cd32b53d4764 +A = 1abd1fbaac8fc366dc669f2abf2b5cf4c710823f6c57d0fce95f34079c9fa291 +B = 1fb2f5fc58e3802dd9cf0a72a99d0f9641acc9f1815f0face7cae83ef1a81792 +M = 22e2856f4c2b6c01448d4aef74aaaee3a14e9660b5b277200f2e67464ecadfab + +ModMul = 19299c9e960ce15087e9fbd66f95cafe82546431b92d70db1de87c3425c1bef2 +A = 6e30e65129c92bf2b24a6ce45592045db370f9411153de793e2af9cc0fcc0f78 +B = 9fcd13fb2e81666f168bb764bca62894aeb6a1630bb07940708e6b1f374e8b57 +M = ab6b4e3d3909512f5d1d62a30c1ab8dd5e584cadbce9dffd12fe203f8936ee93 + +ModMul = 4f88ad4e30e6e8e38cba0452d98d4a3547c680f16308692e33e5577772658764 +A = 04a4f1814509cb369bc9f20d641848fa4358217818381d0f8aa4debd43d0ec4e +B = 9b6ec67a72b0868053f926be4177def0e8bef7915ab48d239e6ca9aea4207147 +M = 9ba20dd78923d8ef82897ac46a509cf22c9b7986a4facf42e5416bfe3576a735 + +ModMul = 0985a4d2a7431e09fcad03e6a3f926582dbc0aedc588f17aa5db40c2d3566233 +A = bc1795a68aa5236a8c1d93aa4720717d4d77e19bffa34d5126a0c3d97f5ccd68 +B = 60aac3751c58eef00fa2ee3fe096bd7060d05974175bfeb6a3f444010d789514 +M = c66842e0a11ed6ad1e8f192ea97f5f244536cfc5234c7fdae1ff905123c72793 + +ModMul = 0133d7b31537b627da2c042217cd28625437c28c3e06258427d9a4384046a1f4 +A = 037f8b1280f927ea374c105b87489355be4f9bd26cda85c1d76af4c6fe38eb14 +B = 03ce98c25f69f6301590b3d163b462239f42e0202af1f692663b40d59bfd0982 +M = 03eae4f0d6c7e1fb9de1a4c160404a8767783c7f839fe27a543f5c389c679d47 + +ModMul = 7f4576a315bad5c7fbb1616e8b26c5b34ca6f701b9b1adf0485fec181c41dee9 +A = 281bebabe6be0c8dbc84f47725180a673c6bc3c8f49159665f5749d6ac1efcd8 +B = 48affb05091c691dc0c6ae2f0fe497be1824d2a33a87bed6b29cef431555f5c1 +M = 9975d8e7f2a4d9d1ff8d442b93ff269a83fee43a18bbfa8c2ccd7ca5fac3a8d3 + +ModMul = 57ebfb39605d4fa6ef5fd03bd8e4fd685664297c29b7ad75a40b133e15fc5ae9 +A = 6080c661828ae2be3bc23874b6f6b23a125ba03db461382bbb79a8619e8c0845 +B = 39e1fcfd15db0040413690d12683bbd68ed496c5d51769fd3a6ad78016de0677 +M = 7704390c4b1da86d51ff817003e5451d601a5352296e339e5da219ec5a330479 + +ModMul = 040b6b0d44cf8a5ca7f4fd03dd6e1e2a11f74f3911dcd8727e57db8d65cd490d +A = 3a9479beb52316aa872fa1d97646419987d7ebc3b1f5009a58afb4d0126cbd04 +B = 3538929797e8f26ff071e734a3f61aa99d36150b8feac5eb605fbd6c03fd9823 +M = 5c0781a87b84ecb4362b09c623d511de53c085671dd4f08e9a551685b55ddfd1 + +ModMul = 6b778ae9822221e6a8376379e0032d7edb14d7b5e32a7310897b54d1d5626113 +A = 21dea2aee0302de380cd990954b4a18e1d52b5f30a0cb70f06c40290c9d3c6c9 +B = 6e1afa44d3135a7dcb416031297c91b1d4193490573b4050f9c77613579f73d7 +M = 7f5978c0c066132a9bdcb00727bb802b72777b9e8e4265f76b80cfdc3a788817 + +ModMul = 5c717e5dd25abe60f761d6f9326ed056416add4c1384682d87b7ff12e112f855 +A = 51f5a2f115ff6fbb007c54a677dc2049f9bd99e1fa1b88989962106cc3d2f53d +B = 7e120151b055335cecbe78f2d5f129e034fc6b30ee463feb50cf95d016b1db99 +M = a6c789884c66c7f028099e0367b3ed86871277bf070c541ee12fc02fcb6181d7 + +ModMul = 04452688244f542125168853f1d444f96ab0f82903bb12a97e59f0db633edfd6 +A = 136aaaec4b34d7878effa8057d78012c897d1757a5ff2fa251cf673b793afa81 +B = 19447559b08dced853b2359d15e098d70a3d04328a0177f471617d5231925088 +M = 2c245d407a78903ef2b279ddbe32106e6333b6f44cabf87b8641b047c79ea06b + +ModMul = 375f8474ee47df6b9a038512002e56cddd374d69c69719d8d369232c64a839e2 +A = 0aa566b24fd87925fe8f9690f62586e4afb979c65419d7b11dac582fa0ba050c +B = 2e0b85b7f590a1a8e8d0e3575ffd5fe12196b7fd066d430944181720e5134096 +M = 4f506313a4f49873a405f2e5a6e9cfae9cd5e9f67b5ef900153366570e28a955 + +ModMul = 036fb0733a26902f0f8f11625305a3c94fcdfffe294eb6ccba110aa628a314df +A = 09a8939689b47fb66ac3ad543034302046a47c8ac325ee4d18155e2cafcb8de8 +B = 09b568319788264cfc18d36fd50c1375a43f2e524fa44fbc65fe12c96e2d7990 +M = 09d7c334aa33634f9f313b71b42476a3b627a6c5bb8ac1d07a8d732d5c087bd9 + +ModMul = 4a377267508eb045e00cea66a417112dac07545304bbeac6315625275b7cbfad +A = a29e606ad0e4926a3458b5853ce04196edf42dcd88f49936a90655019b633ed4 +B = b119f89e0b3ef234456b0421778e42f086498a2ec67bb32ab43bc8e0012f3141 +M = ea0477e7f1a02cb6c21171066f3dab69d4e24429043b0f049de660fc80e51937 + +ModMul = 7952dfdb91252658430e365adeefd9093740de92cfc9dd3d92294f2dab6ca0b6 +A = 9e1693d9e37c1135acef80e49ae1a74e9b244a36179a2984f5c4fce69b1dde2b +B = 5adb9fc6429f638912159f876356ff09157e7bff1073ef8318a1397cc81f89c1 +M = aa46853682af960824140c35d145a6dcff6283b2c59994b30ecf9b8def41a025 + +ModMul = 1aacec7f7e66b0cf4eb2dfda9d8d3fbf4eb8e928cbbc967d13e3e38612f0346d +A = 514599c8c352c6fc850809c6dddebcdd61c6a66edde608e5b88661120c54a44b +B = 059dbf4bea3fb19fbe0ded8c4b0c97fe7b2009fad54775c46d4ceb5f674e11a2 +M = ac4f0a2b22df691331ded955a5d0e7d1910d7920a59d4a87636b2635397b7335 + +ModMul = 2c25d180156fa7d2fc20c9bd6d9ff0b111c9ad76ada0784e2f8fa0bd06413f66 +A = 15dbf10ef83b811d7ef146856243b071f11b25ccca14e62e4b7b4894d91a44ec +B = 556803f5718085a69926a0b4216f6d17b78e1da6db3ff343b34a338a5ffebf0b +M = 65c9d79a09a820adbc9beb152bef387c1439147ed50cef872d36a69f1c7d5fe1 + +ModMul = 56ec8624fc199e7b4e68358f88f1a99f1d4d02577b8c6f7e28e4ccfdd981f995 +A = 57ffc478a3080928ed66505778554e38b40c0f47904fde89191c9c6a3453e82e +B = 4b11a10e8160e6e4dbc4ccf3075daa86943f90322dcbc0ad63f6a9afc9d94772 +M = 73882376ca850c125ce9f20c291e550ee48f0eb0d571109ab08c22d6719496e9 + +ModMul = acceebe131aa34ff21b3235f045bccc8a8f762dca20c1dd1ef6eb461ea971c6c +A = 74ecd7b4f7e0425b4934e0f15949af3ee0f1205227874fb536df33ba6b16a955 +B = 958ad144e29c894d6346d514d1e52eb0c561473615c61377f0f2c8f7cdd7cf9a +M = c52ae49e1a4b21ec392b76844ad559653b7b9f67a58b3bba6c2ce250017eab09 + +ModMul = 62b5b04dc84bb4ee04934c03ef361bc6e59b42144dc117b9f7771525c67c3688 +A = 0c518f9c8afea0eefaf1c57283e5034b2b32fd5f64dc69f4baaf3c38bd337de0 +B = 2e8cd7003baae3fc40353d2e9abacaaf4482a85014363393850e0593fd538ea1 +M = f73398c32191b436d14a0b76c6069b1d61395568753c832dd0c707780a232dc9 + +ModMul = 5613c8fb0721bd3f605089def48fb2c38a4862bb387886c1edc1bc37d10f0e15 +A = 1c685e64660dec256a9e80822e029bfd90c556453a0b80311d6c1895adc6916b +B = 34674001cd0977d54e600640c4d07510bcc0b69f6bf7c991e8a49351880348f6 +M = df8344fa848d1066afe4f8d985cff65441751677dcf3a4e99b40365fc3c978e9 + +ModMul = 30325f7ccbc2c69e11d739ad7132a947c53377aa902ec70b152f3a75e050c244 +A = 94d84fbeb43247cceed9743c5bb60afa789c674ef02423b0c21da2c4a059cb +B = 176be45cf53003f3885361d9f4a1146acbf11926e7640dc79abc0f1c84918a7e +M = 43d57108eb0ab9bebaa8ce137628ea825951c6accb9acb7f1e991c93b8563897 + +ModMul = 1975db7b72434ad32c9aee412645f6670b7f4af1f8a424a5031c559d3e18dce6 +A = 1d135f8832d2730000bb6489e74bf27990b464f2a0df66daee2b80445b3aeab0 +B = 27792d4be70d7f7f3e6900ef689a474edd84a2eacea94ce6384289ced66ddf12 +M = 39d57af763eabe569dac1a103e169e6e3b4375168e41e5c3b961b6e743915923 + +ModMul = 3bbb5bde9e3e240694326571360090e1fc0a4ea7b2311c1e0bd3961f6c159385 +A = e769a7536b8df131ace032cd184a2e40812d83276635a5592e97a201d8770e59 +B = 87adc45fe2433e78d6ac5d6f1678186a1daf336bed3c03ed6c993349e40f7d8e +M = f3b9833a303eb540cf8b6cbc3cf16394b1634ef517be57684e42d364d8bec3e5 + +ModMul = 2d8174211f0367233b3a8df7c5bf0066d6aa792be7cdc5e850a477454d5c829f +A = 2e8b2ffb36d54495286df23d1a5c8d230c23da069106830c829c7e3170ddcddb +B = 71105099df4e2dbe198631aef3475c60ac10828c7beec4cd8d027324ec531fe9 +M = 7eacffe21f88413af94155a2a8e37f70a431a59653738afda04a1bec72d0d9ed + +# Regression tests for CVE-2016-7055. + +ModMul = ccd6f75b5f24b7c5ce2ce755fa89c2450c6a7d96ce8c8791e659eab84577a7695e3b2caa7c980fb23f60634233e9798499c28b0338c1f1a326d0ca89fd41f2fd88b759f317889832966b551a950043ec7a4b6152d3e2cbfb40e88458e70ab783b96f12d271f828d5b39e198ccaf8665411d85026282dbead5d24cd01b6c8a8e9 +A = 7878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878 +B = 095d72c08c097ba488c5e439c655a192eafb6380073d8c2664668eddb4060744e16e57fb4edb9ae10a0cefcdc28a894f689a128379db279d48a2e20849d685939b7803bcf46cebf5c533fb0dd35b080593de5472e3fe5db951b8bff9b4cb8f039cc638a5ee8cdd703719f8000e6a9f63beed5f2fcd52ff293ea05a251bb4ab81 +M = d78af684e71db0c39cff4e64fb9db567132cb9c50cc98009feb820b26f2ded9b91b9b5e2b83ae0ae4eb4e0523ca726bfbe969b89fd754f674ce99118c3f2d1c5d81fdc7c54e02b60262b241d53c040e99e45826eca37a804668e690e1afc1ca42c9a15d84d4954425f0b7642fc0bd9d7b24e2618d2dcc9b729d944badacfddaf + +ModMul = ccd6f75b5f24b7c5ce2ce755fa89c2450c6a7d96ce8c8791e659eab84577a7695e3b2caa7c980fb23f60634233e9798499c28b0338c1f1a326d0ca89fd41f2fd88b759f317889832966b551a950043ec7a4b6152d3e2cbfb40e88458e70ab783b96f12d271f828d5b39e198ccaf8665411d85026282dbead5d24cd01b6c8a8e9 +A = 095d72c08c097ba488c5e439c655a192eafb6380073d8c2664668eddb4060744e16e57fb4edb9ae10a0cefcdc28a894f689a128379db279d48a2e20849d685939b7803bcf46cebf5c533fb0dd35b080593de5472e3fe5db951b8bff9b4cb8f039cc638a5ee8cdd703719f8000e6a9f63beed5f2fcd52ff293ea05a251bb4ab81 +B = 7878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878 +M = d78af684e71db0c39cff4e64fb9db567132cb9c50cc98009feb820b26f2ded9b91b9b5e2b83ae0ae4eb4e0523ca726bfbe969b89fd754f674ce99118c3f2d1c5d81fdc7c54e02b60262b241d53c040e99e45826eca37a804668e690e1afc1ca42c9a15d84d4954425f0b7642fc0bd9d7b24e2618d2dcc9b729d944badacfddaf diff --git a/vendor/ring/src/arithmetic/bigint_elem_reduced_once_tests.txt b/vendor/ring/src/arithmetic/bigint_elem_reduced_once_tests.txt new file mode 100644 index 00000000..b0cb8d1e --- /dev/null +++ b/vendor/ring/src/arithmetic/bigint_elem_reduced_once_tests.txt @@ -0,0 +1,39 @@ +# 2**1024 - 105 is the largest 1024-bit prime. +# Q == 2**1023 + 1155 is the smallest 1024-bit prime. +# +# import Math.NumberTheory.Prime; +# +# main = mapM_ (putStrLn . show) [prevPrime (2^1024), nextPrime (2^1023)] +# +# cabal install HaskellForMaths +# ghc -O2 prime.hs + +# N = P * Q +# P == 2**1024 - 105 +# Q == 2**1023 + 1155 +# QQ = Q**2 +# A == N - 1 > QQ +R = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9cb3b +A = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2644 +QQ = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004830000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000145b09 +N = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2645 + +# N = P * Q +# P == 2**1024 - 105 +# Q == 2**1023 + 1155 +# QQ = Q**2 +# A == QQ + 1 > QQ +R = 01 +A = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004830000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000145b0a +QQ = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004830000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000145b09 +N = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2645 + +# N = P * Q +# P == 2**1024 - 105 +# Q == 2**1023 + 1155 +# QQ = Q**2 +# A == QQ +R = 00 +A = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004830000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000145b09 +QQ = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004830000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000145b09 +N = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2645 diff --git a/vendor/ring/src/arithmetic/bigint_elem_reduced_tests.txt b/vendor/ring/src/arithmetic/bigint_elem_reduced_tests.txt new file mode 100644 index 00000000..009692d7 --- /dev/null +++ b/vendor/ring/src/arithmetic/bigint_elem_reduced_tests.txt @@ -0,0 +1,171 @@ +# R = A % M where 0 <= A < M**2. + +# A == 0 +R = 00 +A = 00 +M = 813bc46ee19ffeab364073a89f96913f340d43ee72129ea9edac1beb4ebe1336450d2eabc7b26e51c400cec60d6ee459033b + +# A == M +R = 00 +A = 813bc46ee19ffeab364073a89f96913f340d43ee72129ea9edac1beb4ebe1336450d2eabc7b26e51c400cec60d6ee459033b +M = 813bc46ee19ffeab364073a89f96913f340d43ee72129ea9edac1beb4ebe1336450d2eabc7b26e51c400cec60d6ee459033b + +# A == M - 1 +R = 813bc46ee19ffeab364073a89f96913f340d43ee72129ea9edac1beb4ebe1336450d2eabc7b26e51c400cec60d6ee459033a +A = 813bc46ee19ffeab364073a89f96913f340d43ee72129ea9edac1beb4ebe1336450d2eabc7b26e51c400cec60d6ee459033a +M = 813bc46ee19ffeab364073a89f96913f340d43ee72129ea9edac1beb4ebe1336450d2eabc7b26e51c400cec60d6ee459033b + +# A == M**2 - 1. +R = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe +A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000000000000000000 +M = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + +# Test vector adapted from the regression test for CVE-2015-3193, A is the +# square of the original test vector's A. +R = 19324b647d967d644b3219 +A = 19324b647d967d644b3219 +M = 414141414141414141414127414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 + +# Test vector adapted from the regression test for CVE-2017-3732. A is the +# square of the original test vector's A. +R = fffffffdfffffd01000009000002f6fffdf403000312000402f3fff5f602fe080a0005fdfafffa00010001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000002000002fefffff7fffffd07000109fdfffef3fffdfd06000405ff00fdfbfffe00010001 +A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000001fffffffe00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffe00000002000000fffffffe00000200fffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000003fffffffdfffffe00000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffe000000000000010000000000000000 +M = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff + + +# These vectors were adapted from BoringSSL's "Quotient" BIGNUM tests in the +# following ways: +# +# * The quotient in each vector was removed (*ring* only calculates +# remainders, never quotients). +# * B was renamed to M and Remainder was renamed to R. +# * Only the test vectors with positive inputs were imported. +# * Only the test vectors with odd moduli were imported. +# * A < M**2; any larger values of A were split up into multiple reduction +# steps. The first step uses the initial A and the smallest power of the +# original M that makes A < M**2 true, the subsequent steps have smaller +# powers of M using the result R from the previous step as A, and where the +# last step has the initial value of M. +# * Only test vectors with moduli that require at least 4 64-bit words to +# represent are included (*ring*'s modular multiplication has this lower +# bound, and modular multiplication is used as part of reduction). + +# Step 1 +R = 04 +A = 0813bc46ee19ffeab364073a89f96913f340d43ee72129ea9edac1beb4ebe1336450d2eabc7b26e51c400cec60d6ee459033b4 +M = 813bc46ee19ffeab364073a89f96913f340d43ee72129ea9edac1beb4ebe1336450d2eabc7b26e51c400cec60d6ee459033b + +# Step 1 +R = 18 +A = 966df62c26acab2d3d1dbe729e48d0181c68e9f5eba45f6caefa38d60e34057d09fe620abb8640cec8cac755957aaad7c6fd000018 +M = 966df62c26acab2d3d1dbe729e48d0181c68e9f5eba45f6caefa38d60e34057d09fe620abb8640cec8cac755957aaad7c6fd + +# Step 1 +R = 20 +A = 89a2f1792afc54467955839eddc9ef2e37d391ce7a1a4a205291220c1f49f59ee31fc7a7a7f7706c199bf5c8c951a0d0743d00000020 +M = 89a2f1792afc54467955839eddc9ef2e37d391ce7a1a4a205291220c1f49f59ee31fc7a7a7f7706c199bf5c8c951a0d0743d + +# Step 1 +R = 24 +A = 0877f1caf75e7166ef18484d0718947893fd1ec016984387debc55c19e378a487a5ddbb03a80a88316f6fca16ae148933e719000000024 +M = 877f1caf75e7166ef18484d0718947893fd1ec016984387debc55c19e378a487a5ddbb03a80a88316f6fca16ae148933e719 + +# Step 1 +R = 2c +A = 087bd03a64d9c56fe340137065ba36bd07b556119546dd1fc3ae087ead32bc79ca7efb5c7230ea7bfb00ad419096d9279fbe10000000002c +M = 87bd03a64d9c56fe340137065ba36bd07b556119546dd1fc3ae087ead32bc79ca7efb5c7230ea7bfb00ad419096d9279fbe1 + +# Step 1 +R = 30 +A = d00fec043edadc093673e5f5abef0c6bacdf1f3faa49a831a645bf80db7539d657f69403b122a5c6f879eb8e63be54d35ed7000000000030 +M = d00fec043edadc093673e5f5abef0c6bacdf1f3faa49a831a645bf80db7539d657f69403b122a5c6f879eb8e63be54d35ed7 + +# Step 1 +R = 458f5c63c063b09790a28c6cbd9afc98ded6d6c1d12c8e4e081e4f6a5638a5319a548fe711b3142d6d32827f415a41d457048783c3 +A = 01280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031 +M = 4e5d7ec324e42afb2d8b381c6d07869985cd3b3de3cbc06853a387c076e6525fd93c3b6de887f31a7580bafb0546f45b785c4e5199 + +# Step 2 +R = 029abc8898d5ef85f87323c2a6fa36ab6e1bdbcc0ca742b1a2347e +A = 458f5c63c063b09790a28c6cbd9afc98ded6d6c1d12c8e4e081e4f6a5638a5319a548fe711b3142d6d32827f415a41d457048783c3 +M = 08da37bc9c7c9bdc62f49cadcd40e156e776b7f4c8f7ad543f463b + +# Step 1 +R = 2000f9c8569d20abce69ced0d66a44ae47a9516205732183408c6ab6c135cd172880f0c0d160862d49a0003656276f3884e88a3c9664d45f +A = 01280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031 +M = 8406162ef2dd175cc81e309b0e1460dc5a007e3fd5937813e6ddb894a208a249c8448a782379e757d3533a0ef008d597579ebae1b4cd95e9 + +# Step 2 +R = 6c9e547a77c98eaba1b021777dbd98ea88f7fd37c95a2b182f2b9067 +A = 2000f9c8569d20abce69ced0d66a44ae47a9516205732183408c6ab6c135cd172880f0c0d160862d49a0003656276f3884e88a3c9664d45f +M = b7d7b1f95f4fe2f267af88b81af88fbdf603e54ab6de73ccd000c32d + +# Step 1 +R = 0bbfaf15a90e744dc4a1caceda3cb339e5491e4507a1118613c5e9739f976b +A = 01280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031 +M = 82ae783b8a13e2e65d52dd3a6d6b057163347872f4d72245ff364dbf2421ff + +# Step 1 +R = 82e3fb3f7252dd87b5370d26d9e8b9e98c7d333701f0ce8a05c337054c7aeb343d04d7e342 +A = 01280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031 +M = 8faf8c0a3ef94ab1069394998e5412a7d84f44aff97edf63abc46d96f897172c38faa0b13f + +# Step 1 +R = 65bf2ef1c2f8e94d98060aa305f85e6cb869c74eabad99877010d30654aa2e578ef6aa3c5f1122e3 +A = 01280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031 +M = 83cfc25e90a61cf8686e3d5857b2f958674d478622c54cf8427275ca5e9312ed24e44ed4a1b5e413 + +# Step 1 +R = 02c89373720b834d718ff3df985ae47c3a7cde0e0309f682f5fd48dc97a1ff3d69fa0dcaa1245e956445 +A = 01280d26263c574f655ea63006f2930666fbaa4de1b09a11ab0e47dbe0054711aab90a05b1185454dcf046745436391a673426000000000031 +M = 0d6721300e877a8145d05f4f3d8085697c2ca5f34a5357fed0bdb7169f83b6f8d855232eeea594846b79 + +# Step 1 +R = 1b02a7b97f9ac1f6306aa00fff0e59f55fce463ffdc640364a950df29474e08b67cdfcec0628e973d42fa1e4f98e988ec4c47e4915651a1731b71d5e36a10a0d1b3420427dbb79ba7d52 +A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b +M = 3f74cafe9ab0c1b307cd7571fd442665fa3205fb2f45b3811b92d1d38b096a2025b8170663a29c52ca84da102e62048e583fba96a594c0b23952fec587814857c25221ff2cd0533cba6d + +# Step 1 +R = 13849ef93cbc77460c3c496e8f31f7e01a98c21cdfcd6877547161f9601680665b394933d3a0824f0d32854508c89f0e4a0873280c779c7ca636cd89cf6ee5d42a917b4f382be3b9654039f623c11b43164827f870fa0f0781 +A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b +M = 23ab6042240a7709d43de7ee17332a9710bd0d913c42b3591341527bf48d5bc30abb962482292d45a15cb03c9457cc8d78d1e00aaa63358427b000e59e4260bfe1e2cc603e175d7fcf02bd9f61fae3740cb8e10a510ea3d1d5 + +# Step 1 +R = 0d8c77134a75584ecd5ab29e97a909ec139464901f9cfcb1d3d9e29a63d204615b6845d466c8710873980f107c40ab54eca9f8933ef6d726f9bd0f3e9e97eade5eb1a9bcaa7b01b6ad51ff3ecf67d6e4d345f128e990494a2db434fcd3ab +A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b +M = 3e7dd961be36c0c286eb9e78bf3b33e6f9bdf2c2137a0c660f1d21dea31ac9a044e526bf47ec8190e137a60f1f55e947046b9cd04a2485679e48cac80a1bb064a915208889289d63a6e338cf7069ad799861c31ec6eafe02a4ef2c2641c9 + +# Step 1 +R = 0a1a70f674cb141a896c4adace0dc58cdcbe2503fd0ad36ce348dc5b8afc96d0f2f8c65bbbadabf2920012798b7ccaedbe8d896dd2674082ad3cc75b54c5c190ad56ff34e8cb5dd29c031656497d48571295d6da396d5f4cdb652732d874a79a674d06a1d7b979f5 +A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b +M = 21917f48bb8e65646c618068fd9069c06e22ce8c679a845f9c4ec843849010abeee12e2d3c61fb963297abca30813c446f2ae82e909ca6ac7839fb58974fa65f3b5d91fb8b3f99d948519ed56653d50026d694060208cf48e3c757f64885b4ed4328c6f071e9f5d5 + +# Step 1 +R = 252d055186ec896cb3142c9e4e49c441e2ddad365b86ad21ae4ef1c522d3306c2834d6993a5e1f8c64a1ed582bad8ab746f7e773fc004b1c47814f73560db72f7237ef6e2f671d3b19a8777be2e4c662a76db87ea64f32c48ea371b1ffb15df26726854a417e18afcf49054c6d2e0e337e71 +A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b +M = 2b6eb2caa3ca650be02fa199e9ea6c48646a76434e268713753a547e49571f9817ad396f2cb7b16d307801fc8892f0af3e7f93ce08f7955a8acfbc0b56add4b4c7ef7351f60e402b9a8ef7fe02ccdcb4b00b7ffe78c7009268dbcf1d606c3a1b5307d9a8ee6121c6a635a742b8bf36b56cc7 + +# Step 1 +R = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b +A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b +M = 3a8682d0e5a4efa985dfa8bbddc2c0d72a4400b8b070a8cf7450aa8f831d8a91c9ae3542641b7a4ad793e232a0d301b82664fe2c7f20bd9bf8275828a2a20027d6056b211638b9b0220fa4252d058bb485dd3c4622b1eac97d54b9634b558ff1bd5bd11085d4f3d288f7965af52beaa922b23ac0207d5763c24c085076128e0ef7370eeaa19d + +# Step 1 +R = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b +A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b +M = 33aeafda3cfc20710f0b4a3d9ace4817eed80ca57ce6c82dc2e7946058a40983c9204ac95a1399fa633bc96cb10af3ddeee3ad2337c64391a42dc7794fca629e3e1e4e03a2ae24a000e7113b91c1b6230cce9592e45b6ee7984680b45aa0aabd7f56cab1a64ec310cefe5211821a75deef2e0c8e43eb467dea79dc8c03d2d523734498d079d5493c904a2ebfd8a3a9bd + +# Step 1 +R = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b +A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b +M = 3083421e375f0722b9397e156de47f77635d62ba1d51794469371b473b71c02e3722841bca2ca06b5d1cf1492bbacfa0abfe394dfdaa7bb8787550ddbd953540e9c97631d9a1efe0c8f8e14f395c82d20245cec6d8021f8564b4d66e7779c3245734c56fb74481172f4e349d9a113cd0ee5263c69ebf746c5285cd4c0fa91d9531f769fea3610c2972ccfe9a22c00aa62ebf52b3a4c6135f3069 + +# Step 1 +R = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b +A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b +M = 2f26e156b3b1117f7cec542b20fcc06ca66cec03a19b6f5eeebf22b4c0fc265df5ff06fc9dcac569735135bdc142b526b295225711efb71577b10aacda2fa446f5208487c725407c2188b3185237740c813e4455a6f1dde4f62916237f23164a3471aac0fcfe24ad1ce1dd81a6144f5861ad0cf22dc337abe10fc4a88b36116dc4929602ab48eb971fdd7a5ff747d6b9e0b2bff75c59621550991966a0a19f + +# Step 1 +R = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b +A = ea87c57f6cdbfd4f836431be3e9950c90ee8ecc291eb4efb881617512fd62e2d86caefce713cfd8a20f4b4925bfc7dba1fcbe99c72932725b5d11eccefde4c5e505952754891e9ded499ec453a1c01a82152c8933f7db4f2b4b19e97baac322eb483cd661a43e458774ef27a29a19c3562ba466381056a3b92c35d9b8b71372b +M = 2a8f2c530342bb6ce683a760540e956a1155c0fe065476e400caec59861ca97ca71e51a11b3213b2baea1a41a29449998778e0f533fcc181698d293f05e28bff2750ef4095170de98a19a36ddcf59a65f3789a3808ead51680245070262c9544e446f23652eba47065a2bc4701c55378bd49733619ed2c213f8ed12a4a317c465f37efe07ff2df8e88fc33d3eb42cde9408dda28215702bfa607030839285a8bbf89b5e8842fa7d7f50d83fd4ab5 diff --git a/vendor/ring/src/arithmetic/bigint_elem_squared_tests.txt b/vendor/ring/src/arithmetic/bigint_elem_squared_tests.txt new file mode 100644 index 00000000..8b59179f --- /dev/null +++ b/vendor/ring/src/arithmetic/bigint_elem_squared_tests.txt @@ -0,0 +1,26 @@ +# ModSquare tests. +# +# These test vectors satisfy A * A = ModSquare (mod M) and 0 <= ModSquare < M. + +# Regression test for CVE-2015-3193 (carry propagation bug in sqr8x_reduction). +# XXX: It's pretty unclear if this is actually exercising the code that had the +# bug. In fact it seems like it almost definitely isn't. This is here mostly +# because it is convenient to add the test, and also to track the issue of the +# lack of a real regression test. TODO: Fix this. +ModSquare = 19324b647d967d644b3219 +A = 050505050505 +M = 414141414141414141414127414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 + +# Regression test for CVE-2017-3732. +ModSquare = fffffffdfffffd01000009000002f6fffdf403000312000402f3fff5f602fe080a0005fdfafffa00010001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000002000002fefffff7fffffd07000109fdfffef3fffdfd06000405ff00fdfbfffe00010001 +A = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff00000000 +M = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff + +ModSquare = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004830000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000145b09 +A = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000483 +M = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2645 + +# Regression test for CVE-2017-3736 +ModSquare = fe06fe0b06160c09 +A = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8f8f800000000000010000000006c000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffff8f8f8f800000000000010000000006c000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffff00fcfdfc +M = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8f8f800000000000010000000006c000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffff8f8f8f800000000000010000000006c000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffff diff --git a/vendor/ring/src/arithmetic/constant.rs b/vendor/ring/src/arithmetic/constant.rs new file mode 100644 index 00000000..afb1b1c8 --- /dev/null +++ b/vendor/ring/src/arithmetic/constant.rs @@ -0,0 +1,13 @@ +#[cfg(target_pointer_width = "32")] +macro_rules! limbs { + ( $($limb:expr),+ ) => { + [ $($limb),+ ] + }; +} + +#[cfg(target_pointer_width = "64")] +macro_rules! limbs { + ( $($limb_lo:expr, $limb_hi:expr),+) => { + [ $((($limb_hi | 0u64) << 32) | $limb_lo),+ ] + }; +} diff --git a/vendor/ring/src/arithmetic/montgomery.rs b/vendor/ring/src/arithmetic/montgomery.rs new file mode 100644 index 00000000..6f95b2e2 --- /dev/null +++ b/vendor/ring/src/arithmetic/montgomery.rs @@ -0,0 +1,88 @@ +// Copyright 2017 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +// Indicates that the element is not encoded; there is no *R* factor +// that needs to be canceled out. +#[derive(Copy, Clone)] +pub enum Unencoded {} + +// Indicates that the element is encoded; the value has one *R* +// factor that needs to be canceled out. +#[derive(Copy, Clone)] +pub enum R {} + +// Indicates the element is encoded twice; the value has two *R* +// factors that need to be canceled out. +#[derive(Copy, Clone)] +pub enum RR {} + +// Indicates the element is inversely encoded; the value has one +// 1/*R* factor that needs to be canceled out. +#[derive(Copy, Clone)] +pub enum RInverse {} + +pub trait Encoding {} + +impl Encoding for RR {} +impl Encoding for R {} +impl Encoding for Unencoded {} +impl Encoding for RInverse {} + +/// The encoding of the result of a reduction. +pub trait ReductionEncoding { + type Output: Encoding; +} + +impl ReductionEncoding for RR { + type Output = R; +} +impl ReductionEncoding for R { + type Output = Unencoded; +} +impl ReductionEncoding for Unencoded { + type Output = RInverse; +} + +/// The encoding of the result of a multiplication. +pub trait ProductEncoding { + type Output: Encoding; +} + +impl ProductEncoding for (Unencoded, E) { + type Output = E::Output; +} + +impl ProductEncoding for (R, E) { + type Output = E; +} + +impl ProductEncoding for (RInverse, E) +where + E::Output: ReductionEncoding, +{ + type Output = <::Output as ReductionEncoding>::Output; +} + +// XXX: Rust doesn't allow overlapping impls, +// TODO (if/when Rust allows it): +// impl ProductEncoding for +// (E1, E2) { +// type Output = <(E2, E1) as ProductEncoding>::Output; +// } +impl ProductEncoding for (RR, Unencoded) { + type Output = <(Unencoded, RR) as ProductEncoding>::Output; +} +impl ProductEncoding for (RR, RInverse) { + type Output = <(RInverse, RR) as ProductEncoding>::Output; +} diff --git a/vendor/ring/src/bits.rs b/vendor/ring/src/bits.rs new file mode 100644 index 00000000..511332e2 --- /dev/null +++ b/vendor/ring/src/bits.rs @@ -0,0 +1,64 @@ +// Copyright 2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use crate::error; + +#[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd)] +pub struct BitLength(usize); + +// Lengths measured in bits, where all arithmetic is guaranteed not to +// overflow. +impl BitLength { + #[inline] + pub const fn from_usize_bits(bits: usize) -> Self { + Self(bits) + } + + #[inline] + pub fn from_usize_bytes(bytes: usize) -> Result { + let bits = bytes.checked_mul(8).ok_or(error::Unspecified)?; + Ok(Self::from_usize_bits(bits)) + } + + #[cfg(feature = "alloc")] + #[inline] + pub fn half_rounded_up(&self) -> Self { + let round_up = self.0 & 1; + Self((self.0 / 2) + round_up) + } + + #[inline] + pub fn as_usize_bits(&self) -> usize { + self.0 + } + + #[cfg(feature = "alloc")] + #[inline] + pub fn as_usize_bytes_rounded_up(&self) -> usize { + // Equivalent to (self.0 + 7) / 8, except with no potential for + // overflow and without branches. + + // Branchless round_up = if self.0 & 0b111 != 0 { 1 } else { 0 }; + let round_up = ((self.0 >> 2) | (self.0 >> 1) | self.0) & 1; + + (self.0 / 8) + round_up + } + + #[cfg(feature = "alloc")] + #[inline] + pub fn try_sub_1(self) -> Result { + let sum = self.0.checked_sub(1).ok_or(error::Unspecified)?; + Ok(Self(sum)) + } +} diff --git a/vendor/ring/src/bssl.rs b/vendor/ring/src/bssl.rs new file mode 100644 index 00000000..8ce769da --- /dev/null +++ b/vendor/ring/src/bssl.rs @@ -0,0 +1,59 @@ +// Copyright 2015 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use crate::{c, error}; + +/// An `int` returned from a foreign function containing **1** if the function +/// was successful or **0** if an error occurred. This is the convention used by +/// C code in `ring`. +#[derive(Clone, Copy, Debug)] +#[must_use] +#[repr(transparent)] +pub struct Result(c::int); + +impl From for core::result::Result<(), error::Unspecified> { + fn from(ret: Result) -> Self { + match ret.0 { + 1 => Ok(()), + c => { + debug_assert_eq!(c, 0, "`bssl::Result` value must be 0 or 1"); + Err(error::Unspecified) + } + } + } +} + +#[cfg(test)] +mod tests { + mod result { + use crate::{bssl, c}; + use core::mem; + + #[test] + fn size_and_alignment() { + type Underlying = c::int; + assert_eq!(mem::size_of::(), mem::size_of::()); + assert_eq!( + mem::align_of::(), + mem::align_of::() + ); + } + + #[test] + fn semantics() { + assert!(Result::from(bssl::Result(0)).is_err()); + assert!(Result::from(bssl::Result(1)).is_ok()); + } + } +} diff --git a/vendor/ring/src/c.rs b/vendor/ring/src/c.rs new file mode 100644 index 00000000..1edc02e0 --- /dev/null +++ b/vendor/ring/src/c.rs @@ -0,0 +1,51 @@ +// Copyright 2016-2019 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! C types. +//! +//! Avoid using the `libc` crate to get C types since `libc` doesn't support +//! all the targets we need to support. It turns out that the few types we need +//! are all uniformly defined on the platforms we care about. This will +//! probably change if/when we support 16-bit platforms or platforms where +//! `usize` and `uintptr_t` are different sizes. + +// Keep in sync with the checks in base.h that verify these assumptions. + +pub(crate) type int = i32; +pub(crate) type uint = u32; +pub(crate) type size_t = usize; + +#[cfg(all(test, any(unix, windows)))] +mod tests { + use crate::c; + + #[test] + fn test_libc_compatible() { + { + let x: c::int = 1; + let _x: libc::c_int = x; + } + + { + let x: c::uint = 1; + let _x: libc::c_uint = x; + } + + { + let x: c::size_t = 1; + let _x: libc::size_t = x; + let _x: usize = x; + } + } +} diff --git a/vendor/ring/src/constant_time.rs b/vendor/ring/src/constant_time.rs new file mode 100644 index 00000000..78446594 --- /dev/null +++ b/vendor/ring/src/constant_time.rs @@ -0,0 +1,49 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Constant-time operations. + +use crate::{c, error}; + +/// Returns `Ok(())` if `a == b` and `Err(error::Unspecified)` otherwise. +/// The comparison of `a` and `b` is done in constant time with respect to the +/// contents of each, but NOT in constant time with respect to the lengths of +/// `a` and `b`. +pub fn verify_slices_are_equal(a: &[u8], b: &[u8]) -> Result<(), error::Unspecified> { + if a.len() != b.len() { + return Err(error::Unspecified); + } + let result = unsafe { GFp_memcmp(a.as_ptr(), b.as_ptr(), a.len()) }; + match result { + 0 => Ok(()), + _ => Err(error::Unspecified), + } +} + +extern "C" { + fn GFp_memcmp(a: *const u8, b: *const u8, len: c::size_t) -> c::int; +} + +#[cfg(test)] +mod tests { + use crate::{bssl, error}; + + #[test] + fn test_constant_time() -> Result<(), error::Unspecified> { + extern "C" { + fn bssl_constant_time_test_main() -> bssl::Result; + } + Result::from(unsafe { bssl_constant_time_test_main() }) + } +} diff --git a/vendor/ring/src/cpu.rs b/vendor/ring/src/cpu.rs new file mode 100644 index 00000000..e0895ae8 --- /dev/null +++ b/vendor/ring/src/cpu.rs @@ -0,0 +1,378 @@ +// Copyright 2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +/// A witness indicating that CPU features have been detected and cached. +/// +/// TODO: Eventually all feature detection logic should be done through +/// functions that accept a `Features` parameter, to guarantee that nothing +/// tries to read the cached values before they are written. +/// +/// This is a zero-sized type so that it can be "stored" wherever convenient. +#[derive(Copy, Clone)] +pub(crate) struct Features(()); + +#[inline(always)] +pub(crate) fn features() -> Features { + // We don't do runtime feature detection on aarch64-apple-* as all AAarch64 + // features we use are available on every device since the first devices. + #[cfg(any( + target_arch = "x86", + target_arch = "x86_64", + all( + any(target_arch = "aarch64", target_arch = "arm"), + any(target_os = "android", target_os = "fuchsia", target_os = "linux") + ) + ))] + { + static INIT: spin::Once<()> = spin::Once::new(); + let () = INIT.call_once(|| { + #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] + { + extern "C" { + fn GFp_cpuid_setup(); + } + unsafe { + GFp_cpuid_setup(); + } + } + + #[cfg(all( + any(target_arch = "aarch64", target_arch = "arm"), + any(target_os = "android", target_os = "fuchsia", target_os = "linux") + ))] + { + arm::setup(); + } + }); + } + + Features(()) +} + +pub(crate) mod arm { + #[cfg(all( + any(target_os = "android", target_os = "linux"), + any(target_arch = "aarch64", target_arch = "arm") + ))] + pub fn setup() { + use libc::c_ulong; + + // XXX: The `libc` crate doesn't provide `libc::getauxval` consistently + // across all Android/Linux targets, e.g. musl. + extern "C" { + fn getauxval(type_: c_ulong) -> c_ulong; + } + + const AT_HWCAP: c_ulong = 16; + + #[cfg(target_arch = "aarch64")] + const HWCAP_NEON: c_ulong = 1 << 1; + + #[cfg(target_arch = "arm")] + const HWCAP_NEON: c_ulong = 1 << 12; + + let caps = unsafe { getauxval(AT_HWCAP) }; + + // We assume NEON is available on AARCH64 because it is a required + // feature. + #[cfg(target_arch = "aarch64")] + debug_assert!(caps & HWCAP_NEON == HWCAP_NEON); + + // OpenSSL and BoringSSL don't enable any other features if NEON isn't + // available. + if caps & HWCAP_NEON == HWCAP_NEON { + let mut features = NEON.mask; + + #[cfg(target_arch = "aarch64")] + const OFFSET: c_ulong = 3; + + #[cfg(target_arch = "arm")] + const OFFSET: c_ulong = 0; + + #[cfg(target_arch = "arm")] + let caps = { + const AT_HWCAP2: c_ulong = 26; + unsafe { getauxval(AT_HWCAP2) } + }; + + const HWCAP_AES: c_ulong = 1 << 0 + OFFSET; + const HWCAP_PMULL: c_ulong = 1 << 1 + OFFSET; + const HWCAP_SHA2: c_ulong = 1 << 3 + OFFSET; + + if caps & HWCAP_AES == HWCAP_AES { + features |= AES.mask; + } + if caps & HWCAP_PMULL == HWCAP_PMULL { + features |= PMULL.mask; + } + if caps & HWCAP_SHA2 == HWCAP_SHA2 { + features |= SHA256.mask; + } + + unsafe { GFp_armcap_P = features }; + } + } + + #[cfg(all(target_os = "fuchsia", target_arch = "aarch64"))] + pub fn setup() { + type zx_status_t = i32; + + #[link(name = "zircon")] + extern "C" { + fn zx_system_get_features(kind: u32, features: *mut u32) -> zx_status_t; + } + + const ZX_OK: i32 = 0; + const ZX_FEATURE_KIND_CPU: u32 = 0; + const ZX_ARM64_FEATURE_ISA_ASIMD: u32 = 1 << 2; + const ZX_ARM64_FEATURE_ISA_AES: u32 = 1 << 3; + const ZX_ARM64_FEATURE_ISA_PMULL: u32 = 1 << 4; + const ZX_ARM64_FEATURE_ISA_SHA2: u32 = 1 << 6; + + let mut caps = 0; + let rc = unsafe { zx_system_get_features(ZX_FEATURE_KIND_CPU, &mut caps) }; + + // OpenSSL and BoringSSL don't enable any other features if NEON isn't + // available. + if rc == ZX_OK && (caps & ZX_ARM64_FEATURE_ISA_ASIMD == ZX_ARM64_FEATURE_ISA_ASIMD) { + let mut features = NEON.mask; + + if caps & ZX_ARM64_FEATURE_ISA_AES == ZX_ARM64_FEATURE_ISA_AES { + features |= AES.mask; + } + if caps & ZX_ARM64_FEATURE_ISA_PMULL == ZX_ARM64_FEATURE_ISA_PMULL { + features |= PMULL.mask; + } + if caps & ZX_ARM64_FEATURE_ISA_SHA2 == ZX_ARM64_FEATURE_ISA_SHA2 { + features |= 1 << 4; + } + + unsafe { GFp_armcap_P = features }; + } + } + + macro_rules! features { + { + $( + $name:ident { + mask: $mask:expr, + + /// Should we assume that the feature is always available + /// for aarch64-apple-* targets? The first AArch64 iOS + /// device used the Apple A7 chip. + // TODO: When we can use `if` in const expressions: + // ``` + // aarch64_apple: $aarch64_apple, + // ``` + aarch64_apple: true, + } + ),+ + , // trailing comma is required. + } => { + $( + #[allow(dead_code)] + pub(crate) const $name: Feature = Feature { + mask: $mask, + }; + )+ + + // TODO: When we can use `if` in const expressions, do this: + // ``` + // const ARMCAP_STATIC: u32 = 0 + // $( + // | ( if $aarch64_apple && + // cfg!(all(target_arch = "aarch64", + // target_vendor = "apple")) { + // $name.mask + // } else { + // 0 + // } + // ) + // )+; + // ``` + // + // TODO: Add static feature detection to other targets. + // TODO: Combine static feature detection with runtime feature + // detection. + #[cfg(all(target_arch = "aarch64", target_vendor = "apple"))] + const ARMCAP_STATIC: u32 = 0 + $( | $name.mask + )+; + #[cfg(not(all(target_arch = "aarch64", target_vendor = "apple")))] + const ARMCAP_STATIC: u32 = 0; + + #[cfg(all(target_arch = "aarch64", target_vendor = "apple"))] + #[test] + fn test_armcap_static_available() { + let features = crate::cpu::features(); + $( + assert!($name.available(features)); + )+ + } + } + } + + #[allow(dead_code)] + pub(crate) struct Feature { + mask: u32, + } + + impl Feature { + #[allow(dead_code)] + #[inline(always)] + pub fn available(&self, _: super::Features) -> bool { + if self.mask == self.mask & ARMCAP_STATIC { + return true; + } + + #[cfg(all( + any(target_os = "android", target_os = "fuchsia", target_os = "linux"), + any(target_arch = "arm", target_arch = "aarch64") + ))] + { + if self.mask == self.mask & unsafe { GFp_armcap_P } { + return true; + } + } + + false + } + } + + features! { + // Keep in sync with `ARMV7_NEON`. + NEON { + mask: 1 << 0, + aarch64_apple: true, + }, + + // Keep in sync with `ARMV8_AES`. + AES { + mask: 1 << 2, + aarch64_apple: true, + }, + + // Keep in sync with `ARMV8_SHA256`. + SHA256 { + mask: 1 << 4, + aarch64_apple: true, + }, + + // Keep in sync with `ARMV8_PMULL`. + PMULL { + mask: 1 << 5, + aarch64_apple: true, + }, + } + + // Some non-Rust code still checks this even when it is statically known + // the given feature is available, so we have to ensure that this is + // initialized properly. Keep this in sync with the initialization in + // BoringSSL's crypto.c. + // + // TODO: This should have "hidden" visibility but we don't have a way of + // controlling that yet: https://github.com/rust-lang/rust/issues/73958. + #[cfg(any(target_arch = "arm", target_arch = "aarch64"))] + #[no_mangle] + static mut GFp_armcap_P: u32 = ARMCAP_STATIC; + + #[cfg(all( + any(target_arch = "arm", target_arch = "aarch64"), + target_vendor = "apple" + ))] + #[test] + fn test_armcap_static_matches_armcap_dynamic() { + assert_eq!(ARMCAP_STATIC, 1 | 4 | 16 | 32); + assert_eq!(ARMCAP_STATIC, unsafe { GFp_armcap_P }); + } +} + +#[cfg_attr( + not(any(target_arch = "x86", target_arch = "x86_64")), + allow(dead_code) +)] +pub(crate) mod intel { + pub(crate) struct Feature { + word: usize, + mask: u32, + } + + impl Feature { + #[allow(clippy::needless_return)] + #[inline(always)] + pub fn available(&self, _: super::Features) -> bool { + #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] + { + extern "C" { + static mut GFp_ia32cap_P: [u32; 4]; + } + return self.mask == self.mask & unsafe { GFp_ia32cap_P[self.word] }; + } + + #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] + { + return false; + } + } + } + + pub(crate) const FXSR: Feature = Feature { + word: 0, + mask: 1 << 24, + }; + + pub(crate) const PCLMULQDQ: Feature = Feature { + word: 1, + mask: 1 << 1, + }; + + pub(crate) const SSSE3: Feature = Feature { + word: 1, + mask: 1 << 9, + }; + + #[cfg(target_arch = "x86_64")] + pub(crate) const SSE41: Feature = Feature { + word: 1, + mask: 1 << 19, + }; + + #[cfg(target_arch = "x86_64")] + pub(crate) const MOVBE: Feature = Feature { + word: 1, + mask: 1 << 22, + }; + + pub(crate) const AES: Feature = Feature { + word: 1, + mask: 1 << 25, + }; + + #[cfg(target_arch = "x86_64")] + pub(crate) const AVX: Feature = Feature { + word: 1, + mask: 1 << 28, + }; + + #[cfg(all(target_arch = "x86_64", test))] + mod x86_64_tests { + use super::*; + + #[test] + fn test_avx_movbe_mask() { + // This is the OpenSSL style of testing these bits. + assert_eq!((AVX.mask | MOVBE.mask) >> 22, 0x41); + } + } +} diff --git a/vendor/ring/src/data/alg-rsa-encryption.der b/vendor/ring/src/data/alg-rsa-encryption.der new file mode 100644 index 00000000..77d159a1 Binary files /dev/null and b/vendor/ring/src/data/alg-rsa-encryption.der differ diff --git a/vendor/ring/src/debug.rs b/vendor/ring/src/debug.rs new file mode 100644 index 00000000..efbd8e90 --- /dev/null +++ b/vendor/ring/src/debug.rs @@ -0,0 +1,84 @@ +// Copyright 2018 Trent Clarke. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +// Generates an implementation of the Debug trait for a type that defers to the +// Debug implementation for a given field. +macro_rules! derive_debug_via_id { + ($typename:ident) => { + impl ::core::fmt::Debug for $typename { + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> Result<(), ::core::fmt::Error> { + ::core::fmt::Debug::fmt(&self.id, f) + } + } + }; +} + +macro_rules! derive_debug_via_field { + ($type:ty, $field:ident) => { + derive_debug_via_field!($type, stringify!($type), $field); + }; + + ($type:ty, $typename:expr, $field:ident) => { + impl ::core::fmt::Debug for $type { + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> Result<(), ::core::fmt::Error> { + f.debug_struct($typename) + .field(stringify!($field), &self.$field) + .finish() + } + } + }; +} + +// Generates an implementation of the Debug trait for a type that outputs the +// hex encoding of the byte slice representation of the value. +macro_rules! derive_debug_self_as_ref_hex_bytes { + ($typename:ident) => { + impl ::core::fmt::Debug for $typename { + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> Result<(), ::core::fmt::Error> { + crate::debug::write_hex_tuple(f, stringify!($typename), self) + } + } + }; +} + +pub(crate) fn write_hex_tuple( + fmt: &mut core::fmt::Formatter, + type_name: &str, + value: &dyn AsRef<[u8]>, +) -> Result<(), ::core::fmt::Error> { + fmt.debug_tuple(type_name) + .field(&HexStr(value.as_ref())) + .finish() +} + +pub struct HexStr<'a>(pub &'a [u8]); + +impl core::fmt::Debug for HexStr<'_> { + fn fmt(&self, fmt: &mut core::fmt::Formatter) -> Result<(), core::fmt::Error> { + fmt.write_str("\"")?; + write_hex_bytes(fmt, self.0)?; + fmt.write_str("\"")?; + Ok(()) + } +} + +pub(crate) fn write_hex_bytes( + fmt: &mut core::fmt::Formatter, + bytes: &[u8], +) -> Result<(), ::core::fmt::Error> { + for byte in bytes { + write!(fmt, "{:02x}", byte)?; + } + Ok(()) +} diff --git a/vendor/ring/src/digest.rs b/vendor/ring/src/digest.rs new file mode 100644 index 00000000..97eafd3d --- /dev/null +++ b/vendor/ring/src/digest.rs @@ -0,0 +1,577 @@ +// Copyright 2015-2019 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! SHA-2 and the legacy SHA-1 digest algorithm. +//! +//! If all the data is available in a single contiguous slice then the `digest` +//! function should be used. Otherwise, the digest can be calculated in +//! multiple steps using `Context`. + +// Note on why are we doing things the hard way: It would be easy to implement +// this using the C `EVP_MD`/`EVP_MD_CTX` interface. However, if we were to do +// things that way, we'd have a hard dependency on `malloc` and other overhead. +// The goal for this implementation is to drive the overhead as close to zero +// as possible. + +use crate::polyfill::array_map::Map; +use crate::{ + c, cpu, debug, + endian::{ArrayEncoding, BigEndian}, + polyfill, +}; +use core::num::Wrapping; + +mod sha1; +mod sha2; + +#[derive(Clone)] +pub(crate) struct BlockContext { + state: State, + + // Note that SHA-512 has a 128-bit input bit counter, but this + // implementation only supports up to 2^64-1 input bits for all algorithms, + // so a 64-bit counter is more than sufficient. + completed_data_blocks: u64, + + /// The context's algorithm. + pub algorithm: &'static Algorithm, + + cpu_features: cpu::Features, +} + +impl BlockContext { + pub(crate) fn new(algorithm: &'static Algorithm) -> Self { + Self { + state: algorithm.initial_state, + completed_data_blocks: 0, + algorithm, + cpu_features: cpu::features(), + } + } + + #[inline] + pub(crate) fn update(&mut self, input: &[u8]) { + let num_blocks = input.len() / self.algorithm.block_len; + assert_eq!(num_blocks * self.algorithm.block_len, input.len()); + if num_blocks > 0 { + unsafe { + (self.algorithm.block_data_order)(&mut self.state, input.as_ptr(), num_blocks); + } + self.completed_data_blocks = self + .completed_data_blocks + .checked_add(polyfill::u64_from_usize(num_blocks)) + .unwrap(); + } + } + + pub(crate) fn finish(mut self, pending: &mut [u8], num_pending: usize) -> Digest { + let block_len = self.algorithm.block_len; + assert_eq!(pending.len(), block_len); + assert!(num_pending <= pending.len()); + + let mut padding_pos = num_pending; + pending[padding_pos] = 0x80; + padding_pos += 1; + + if padding_pos > block_len - self.algorithm.len_len { + polyfill::slice::fill(&mut pending[padding_pos..block_len], 0); + unsafe { + (self.algorithm.block_data_order)(&mut self.state, pending.as_ptr(), 1); + } + // We don't increase |self.completed_data_blocks| because the + // padding isn't data, and so it isn't included in the data length. + padding_pos = 0; + } + + polyfill::slice::fill(&mut pending[padding_pos..(block_len - 8)], 0); + + // Output the length, in bits, in big endian order. + let completed_data_bits = self + .completed_data_blocks + .checked_mul(polyfill::u64_from_usize(block_len)) + .unwrap() + .checked_add(polyfill::u64_from_usize(num_pending)) + .unwrap() + .checked_mul(8) + .unwrap(); + pending[(block_len - 8)..block_len].copy_from_slice(&u64::to_be_bytes(completed_data_bits)); + + unsafe { + (self.algorithm.block_data_order)(&mut self.state, pending.as_ptr(), 1); + } + + Digest { + algorithm: self.algorithm, + value: (self.algorithm.format_output)(self.state), + } + } +} + +/// A context for multi-step (Init-Update-Finish) digest calculations. +/// +/// # Examples +/// +/// ``` +/// use ring::digest; +/// +/// let one_shot = digest::digest(&digest::SHA384, b"hello, world"); +/// +/// let mut ctx = digest::Context::new(&digest::SHA384); +/// ctx.update(b"hello"); +/// ctx.update(b", "); +/// ctx.update(b"world"); +/// let multi_part = ctx.finish(); +/// +/// assert_eq!(&one_shot.as_ref(), &multi_part.as_ref()); +/// ``` +#[derive(Clone)] +pub struct Context { + block: BlockContext, + // TODO: More explicitly force 64-bit alignment for |pending|. + pending: [u8; MAX_BLOCK_LEN], + num_pending: usize, +} + +impl Context { + /// Constructs a new context. + pub fn new(algorithm: &'static Algorithm) -> Self { + Self { + block: BlockContext::new(algorithm), + pending: [0u8; MAX_BLOCK_LEN], + num_pending: 0, + } + } + + pub(crate) fn clone_from(block: &BlockContext) -> Self { + Self { + block: block.clone(), + pending: [0u8; MAX_BLOCK_LEN], + num_pending: 0, + } + } + + /// Updates the digest with all the data in `data`. `update` may be called + /// zero or more times until `finish` is called. It must not be called + /// after `finish` has been called. + pub fn update(&mut self, data: &[u8]) { + let block_len = self.block.algorithm.block_len; + if data.len() < block_len - self.num_pending { + self.pending[self.num_pending..(self.num_pending + data.len())].copy_from_slice(data); + self.num_pending += data.len(); + return; + } + + let mut remaining = data; + if self.num_pending > 0 { + let to_copy = block_len - self.num_pending; + self.pending[self.num_pending..block_len].copy_from_slice(&data[..to_copy]); + self.block.update(&self.pending[..block_len]); + remaining = &remaining[to_copy..]; + self.num_pending = 0; + } + + let num_blocks = remaining.len() / block_len; + let num_to_save_for_later = remaining.len() % block_len; + self.block.update(&remaining[..(num_blocks * block_len)]); + if num_to_save_for_later > 0 { + self.pending[..num_to_save_for_later] + .copy_from_slice(&remaining[(remaining.len() - num_to_save_for_later)..]); + self.num_pending = num_to_save_for_later; + } + } + + /// Finalizes the digest calculation and returns the digest value. `finish` + /// consumes the context so it cannot be (mis-)used after `finish` has been + /// called. + pub fn finish(mut self) -> Digest { + let block_len = self.block.algorithm.block_len; + self.block + .finish(&mut self.pending[..block_len], self.num_pending) + } + + /// The algorithm that this context is using. + #[inline(always)] + pub fn algorithm(&self) -> &'static Algorithm { + self.block.algorithm + } +} + +/// Returns the digest of `data` using the given digest algorithm. +/// +/// # Examples: +/// +/// ``` +/// # #[cfg(feature = "alloc")] +/// # { +/// use ring::{digest, test}; +/// let expected_hex = "09ca7e4eaa6e8ae9c7d261167129184883644d07dfba7cbfbc4c8a2e08360d5b"; +/// let expected: Vec = test::from_hex(expected_hex).unwrap(); +/// let actual = digest::digest(&digest::SHA256, b"hello, world"); +/// +/// assert_eq!(&expected, &actual.as_ref()); +/// # } +/// ``` +pub fn digest(algorithm: &'static Algorithm, data: &[u8]) -> Digest { + let mut ctx = Context::new(algorithm); + ctx.update(data); + ctx.finish() +} + +/// A calculated digest value. +/// +/// Use `as_ref` to get the value as a `&[u8]`. +#[derive(Clone, Copy)] +pub struct Digest { + value: Output, + algorithm: &'static Algorithm, +} + +impl Digest { + /// The algorithm that was used to calculate the digest value. + #[inline(always)] + pub fn algorithm(&self) -> &'static Algorithm { + self.algorithm + } +} + +impl AsRef<[u8]> for Digest { + #[inline(always)] + fn as_ref(&self) -> &[u8] { + let as64 = unsafe { &self.value.as64 }; + &as64.as_byte_array()[..self.algorithm.output_len] + } +} + +impl core::fmt::Debug for Digest { + fn fmt(&self, fmt: &mut core::fmt::Formatter) -> core::fmt::Result { + write!(fmt, "{:?}:", self.algorithm)?; + debug::write_hex_bytes(fmt, self.as_ref()) + } +} + +/// A digest algorithm. +pub struct Algorithm { + /// The length of a finalized digest. + pub output_len: usize, + + /// The size of the chaining value of the digest function, in bytes. For + /// non-truncated algorithms (SHA-1, SHA-256, SHA-512), this is equal to + /// `output_len`. For truncated algorithms (e.g. SHA-384, SHA-512/256), + /// this is equal to the length before truncation. This is mostly helpful + /// for determining the size of an HMAC key that is appropriate for the + /// digest algorithm. + pub chaining_len: usize, + + /// The internal block length. + pub block_len: usize, + + /// The length of the length in the padding. + len_len: usize, + + block_data_order: unsafe extern "C" fn(state: &mut State, data: *const u8, num: c::size_t), + format_output: fn(input: State) -> Output, + + initial_state: State, + + id: AlgorithmID, +} + +#[derive(Debug, Eq, PartialEq)] +enum AlgorithmID { + SHA1, + SHA256, + SHA384, + SHA512, + SHA512_256, +} + +impl PartialEq for Algorithm { + fn eq(&self, other: &Self) -> bool { + self.id == other.id + } +} + +impl Eq for Algorithm {} + +derive_debug_via_id!(Algorithm); + +/// SHA-1 as specified in [FIPS 180-4]. Deprecated. +/// +/// [FIPS 180-4]: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf +pub static SHA1_FOR_LEGACY_USE_ONLY: Algorithm = Algorithm { + output_len: sha1::OUTPUT_LEN, + chaining_len: sha1::CHAINING_LEN, + block_len: sha1::BLOCK_LEN, + len_len: 64 / 8, + block_data_order: sha1::block_data_order, + format_output: sha256_format_output, + initial_state: State { + as32: [ + Wrapping(0x67452301u32), + Wrapping(0xefcdab89u32), + Wrapping(0x98badcfeu32), + Wrapping(0x10325476u32), + Wrapping(0xc3d2e1f0u32), + Wrapping(0), + Wrapping(0), + Wrapping(0), + ], + }, + id: AlgorithmID::SHA1, +}; + +/// SHA-256 as specified in [FIPS 180-4]. +/// +/// [FIPS 180-4]: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf +pub static SHA256: Algorithm = Algorithm { + output_len: SHA256_OUTPUT_LEN, + chaining_len: SHA256_OUTPUT_LEN, + block_len: 512 / 8, + len_len: 64 / 8, + block_data_order: sha2::GFp_sha256_block_data_order, + format_output: sha256_format_output, + initial_state: State { + as32: [ + Wrapping(0x6a09e667u32), + Wrapping(0xbb67ae85u32), + Wrapping(0x3c6ef372u32), + Wrapping(0xa54ff53au32), + Wrapping(0x510e527fu32), + Wrapping(0x9b05688cu32), + Wrapping(0x1f83d9abu32), + Wrapping(0x5be0cd19u32), + ], + }, + id: AlgorithmID::SHA256, +}; + +/// SHA-384 as specified in [FIPS 180-4]. +/// +/// [FIPS 180-4]: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf +pub static SHA384: Algorithm = Algorithm { + output_len: SHA384_OUTPUT_LEN, + chaining_len: SHA512_OUTPUT_LEN, + block_len: SHA512_BLOCK_LEN, + len_len: SHA512_LEN_LEN, + block_data_order: sha2::GFp_sha512_block_data_order, + format_output: sha512_format_output, + initial_state: State { + as64: [ + Wrapping(0xcbbb9d5dc1059ed8), + Wrapping(0x629a292a367cd507), + Wrapping(0x9159015a3070dd17), + Wrapping(0x152fecd8f70e5939), + Wrapping(0x67332667ffc00b31), + Wrapping(0x8eb44a8768581511), + Wrapping(0xdb0c2e0d64f98fa7), + Wrapping(0x47b5481dbefa4fa4), + ], + }, + id: AlgorithmID::SHA384, +}; + +/// SHA-512 as specified in [FIPS 180-4]. +/// +/// [FIPS 180-4]: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf +pub static SHA512: Algorithm = Algorithm { + output_len: SHA512_OUTPUT_LEN, + chaining_len: SHA512_OUTPUT_LEN, + block_len: SHA512_BLOCK_LEN, + len_len: SHA512_LEN_LEN, + block_data_order: sha2::GFp_sha512_block_data_order, + format_output: sha512_format_output, + initial_state: State { + as64: [ + Wrapping(0x6a09e667f3bcc908), + Wrapping(0xbb67ae8584caa73b), + Wrapping(0x3c6ef372fe94f82b), + Wrapping(0xa54ff53a5f1d36f1), + Wrapping(0x510e527fade682d1), + Wrapping(0x9b05688c2b3e6c1f), + Wrapping(0x1f83d9abfb41bd6b), + Wrapping(0x5be0cd19137e2179), + ], + }, + id: AlgorithmID::SHA512, +}; + +/// SHA-512/256 as specified in [FIPS 180-4]. +/// +/// This is *not* the same as just truncating the output of SHA-512, as +/// SHA-512/256 has its own initial state distinct from SHA-512's initial +/// state. +/// +/// [FIPS 180-4]: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf +pub static SHA512_256: Algorithm = Algorithm { + output_len: SHA512_256_OUTPUT_LEN, + chaining_len: SHA512_OUTPUT_LEN, + block_len: SHA512_BLOCK_LEN, + len_len: SHA512_LEN_LEN, + block_data_order: sha2::GFp_sha512_block_data_order, + format_output: sha512_format_output, + initial_state: State { + as64: [ + Wrapping(0x22312194fc2bf72c), + Wrapping(0x9f555fa3c84c64c2), + Wrapping(0x2393b86b6f53b151), + Wrapping(0x963877195940eabd), + Wrapping(0x96283ee2a88effe3), + Wrapping(0xbe5e1e2553863992), + Wrapping(0x2b0199fc2c85b8aa), + Wrapping(0x0eb72ddc81c52ca2), + ], + }, + id: AlgorithmID::SHA512_256, +}; + +#[derive(Clone, Copy)] // XXX: Why do we need to be `Copy`? +#[repr(C)] +union State { + as64: [Wrapping; sha2::CHAINING_WORDS], + as32: [Wrapping; sha2::CHAINING_WORDS], +} + +#[derive(Clone, Copy)] +#[repr(C)] +union Output { + as64: [BigEndian; 512 / 8 / core::mem::size_of::>()], + as32: [BigEndian; 256 / 8 / core::mem::size_of::>()], +} + +/// The maximum block length (`Algorithm::block_len`) of all the algorithms in +/// this module. +pub const MAX_BLOCK_LEN: usize = 1024 / 8; + +/// The maximum output length (`Algorithm::output_len`) of all the algorithms +/// in this module. +pub const MAX_OUTPUT_LEN: usize = 512 / 8; + +/// The maximum chaining length (`Algorithm::chaining_len`) of all the +/// algorithms in this module. +pub const MAX_CHAINING_LEN: usize = MAX_OUTPUT_LEN; + +fn sha256_format_output(input: State) -> Output { + let input = unsafe { &input.as32 }; + Output { + as32: input.array_map(BigEndian::from), + } +} + +fn sha512_format_output(input: State) -> Output { + let input = unsafe { &input.as64 }; + Output { + as64: input.array_map(BigEndian::from), + } +} + +/// The length of the output of SHA-1, in bytes. +pub const SHA1_OUTPUT_LEN: usize = sha1::OUTPUT_LEN; + +/// The length of the output of SHA-256, in bytes. +pub const SHA256_OUTPUT_LEN: usize = 256 / 8; + +/// The length of the output of SHA-384, in bytes. +pub const SHA384_OUTPUT_LEN: usize = 384 / 8; + +/// The length of the output of SHA-512, in bytes. +pub const SHA512_OUTPUT_LEN: usize = 512 / 8; + +/// The length of the output of SHA-512/256, in bytes. +pub const SHA512_256_OUTPUT_LEN: usize = 256 / 8; + +/// The length of a block for SHA-512-based algorithms, in bytes. +const SHA512_BLOCK_LEN: usize = 1024 / 8; + +/// The length of the length field for SHA-512-based algorithms, in bytes. +const SHA512_LEN_LEN: usize = 128 / 8; + +#[cfg(test)] +mod tests { + + mod max_input { + use super::super::super::digest; + use crate::polyfill; + use alloc::vec; + + macro_rules! max_input_tests { + ( $algorithm_name:ident ) => { + mod $algorithm_name { + use super::super::super::super::digest; + + #[test] + fn max_input_test() { + super::max_input_test(&digest::$algorithm_name); + } + + #[test] + #[should_panic] + fn too_long_input_test_block() { + super::too_long_input_test_block(&digest::$algorithm_name); + } + + #[test] + #[should_panic] + fn too_long_input_test_byte() { + super::too_long_input_test_byte(&digest::$algorithm_name); + } + } + }; + } + + fn max_input_test(alg: &'static digest::Algorithm) { + let mut context = nearly_full_context(alg); + let next_input = vec![0u8; alg.block_len - 1]; + context.update(&next_input); + let _ = context.finish(); // no panic + } + + fn too_long_input_test_block(alg: &'static digest::Algorithm) { + let mut context = nearly_full_context(alg); + let next_input = vec![0u8; alg.block_len]; + context.update(&next_input); + let _ = context.finish(); // should panic + } + + fn too_long_input_test_byte(alg: &'static digest::Algorithm) { + let mut context = nearly_full_context(alg); + let next_input = vec![0u8; alg.block_len - 1]; + context.update(&next_input); // no panic + context.update(&[0]); + let _ = context.finish(); // should panic + } + + fn nearly_full_context(alg: &'static digest::Algorithm) -> digest::Context { + // All implementations currently support up to 2^64-1 bits + // of input; according to the spec, SHA-384 and SHA-512 + // support up to 2^128-1, but that's not implemented yet. + let max_bytes = 1u64 << (64 - 3); + let max_blocks = max_bytes / polyfill::u64_from_usize(alg.block_len); + digest::Context { + block: digest::BlockContext { + state: alg.initial_state, + completed_data_blocks: max_blocks - 1, + algorithm: alg, + cpu_features: crate::cpu::features(), + }, + pending: [0u8; digest::MAX_BLOCK_LEN], + num_pending: 0, + } + } + + max_input_tests!(SHA1_FOR_LEGACY_USE_ONLY); + max_input_tests!(SHA256); + max_input_tests!(SHA384); + max_input_tests!(SHA512); + } +} diff --git a/vendor/ring/src/digest/sha1.rs b/vendor/ring/src/digest/sha1.rs new file mode 100644 index 00000000..5301c3ef --- /dev/null +++ b/vendor/ring/src/digest/sha1.rs @@ -0,0 +1,108 @@ +// Copyright 2015-2016 Brian Smith. +// Copyright 2016 Simon Sapin. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use super::sha2::{ch, maj, Word}; +use crate::{c, polyfill::ChunksFixed}; +use core::{convert::TryInto, num::Wrapping}; + +pub const BLOCK_LEN: usize = 512 / 8; +pub const CHAINING_LEN: usize = 160 / 8; +pub const OUTPUT_LEN: usize = 160 / 8; +const CHAINING_WORDS: usize = CHAINING_LEN / 4; + +type W32 = Wrapping; + +// FIPS 180-4 4.1.1 +#[inline] +fn parity(x: W32, y: W32, z: W32) -> W32 { + x ^ y ^ z +} + +type State = [W32; CHAINING_WORDS]; +const ROUNDS: usize = 80; + +pub(super) extern "C" fn block_data_order( + state: &mut super::State, + data: *const u8, + num: c::size_t, +) { + let state = unsafe { &mut state.as32 }; + let state: &mut State = (&mut state[..CHAINING_WORDS]).try_into().unwrap(); + let data = data as *const [::InputBytes; 16]; + let blocks = unsafe { core::slice::from_raw_parts(data, num) }; + *state = block_data_order_(*state, blocks) +} + +#[inline] +#[rustfmt::skip] +fn block_data_order_(mut H: State, M: &[[::InputBytes; 16]]) -> State { + for M in M { + // FIPS 180-4 6.1.2 Step 1 + let mut W: [W32; ROUNDS] = [W32::ZERO; ROUNDS]; + for t in 0..16 { + W[t] = W32::from_be_bytes(M[t]); + } + for t in 16..ROUNDS { + let wt = W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16]; + W[t] = rotl(wt, 1); + } + + // FIPS 180-4 6.1.2 Step 2 + let [a, b, c, d, e] = H; + + // FIPS 180-4 6.1.2 Step 3 with constants and functions from FIPS 180-4 {4.1.1, 4.2.1} + let W: &[[W32; 20]; 4] = W.chunks_fixed(); + let (a, b, c, d, e) = step3(a, b, c, d, e, W[0], Wrapping(0x5a827999), ch); + let (a, b, c, d, e) = step3(a, b, c, d, e, W[1], Wrapping(0x6ed9eba1), parity); + let (a, b, c, d, e) = step3(a, b, c, d, e, W[2], Wrapping(0x8f1bbcdc), maj); + let (a, b, c, d, e) = step3(a, b, c, d, e, W[3], Wrapping(0xca62c1d6), parity); + + // FIPS 180-4 6.1.2 Step 4 + H[0] += a; + H[1] += b; + H[2] += c; + H[3] += d; + H[4] += e; + } + + H +} + +#[inline(always)] +fn step3( + mut a: W32, + mut b: W32, + mut c: W32, + mut d: W32, + mut e: W32, + W: [W32; 20], + k: W32, + f: impl Fn(W32, W32, W32) -> W32, +) -> (W32, W32, W32, W32, W32) { + for W_t in W.iter() { + let T = rotl(a, 5) + f(b, c, d) + e + k + W_t; + e = d; + d = c; + c = rotl(b, 30); + b = a; + a = T; + } + (a, b, c, d, e) +} + +#[inline(always)] +fn rotl(x: W32, n: u32) -> W32 { + Wrapping(x.0.rotate_left(n)) +} diff --git a/vendor/ring/src/digest/sha2.rs b/vendor/ring/src/digest/sha2.rs new file mode 100644 index 00000000..c9bd94a9 --- /dev/null +++ b/vendor/ring/src/digest/sha2.rs @@ -0,0 +1,385 @@ +// Copyright 2019 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use crate::c; +use core::{ + num::Wrapping, + ops::{Add, AddAssign, BitAnd, BitOr, BitXor, Not, Shr}, +}; + +#[cfg(not(any(target_arch = "aarch64", target_arch = "arm", target_arch = "x86_64")))] +pub(super) extern "C" fn GFp_sha256_block_data_order( + state: &mut super::State, + data: *const u8, + num: c::size_t, +) { + let state = unsafe { &mut state.as32 }; + *state = block_data_order(*state, data, num) +} + +#[cfg(not(any(target_arch = "aarch64", target_arch = "arm", target_arch = "x86_64")))] +pub(super) extern "C" fn GFp_sha512_block_data_order( + state: &mut super::State, + data: *const u8, + num: c::size_t, +) { + let state = unsafe { &mut state.as64 }; + *state = block_data_order(*state, data, num) +} + +#[cfg_attr( + any(target_arch = "aarch64", target_arch = "arm", target_arch = "x86_64"), + allow(dead_code) +)] +#[inline] +fn block_data_order( + mut H: [S; CHAINING_WORDS], + M: *const u8, + num: c::size_t, +) -> [S; CHAINING_WORDS] { + let M = M as *const [S::InputBytes; 16]; + let M: &[[S::InputBytes; 16]] = unsafe { core::slice::from_raw_parts(M, num) }; + + for M in M { + // FIPS 180-4 {6.2.2, 6.4.2} Step 1 + // + // TODO: Use `let W: [S::ZERO; S::ROUNDS]` instead of allocating + // `MAX_ROUNDS` items and then slicing to `K.len()`; depends on + // https://github.com/rust-lang/rust/issues/43408. + let mut W = [S::ZERO; MAX_ROUNDS]; + let W: &[S] = { + let W = &mut W[..S::K.len()]; + for (W, M) in W.iter_mut().zip(M) { + *W = S::from_be_bytes(*M); + } + for t in M.len()..S::K.len() { + W[t] = sigma_1(W[t - 2]) + W[t - 7] + sigma_0(W[t - 15]) + W[t - 16] + } + + W + }; + + // FIPS 180-4 {6.2.2, 6.4.2} Step 2 + let [mut a, mut b, mut c, mut d, mut e, mut f, mut g, mut h] = H; + + // FIPS 180-4 {6.2.2, 6.4.2} Step 3 + for (Kt, Wt) in S::K.iter().zip(W.iter()) { + let T1 = h + SIGMA_1(e) + ch(e, f, g) + *Kt + *Wt; + let T2 = SIGMA_0(a) + maj(a, b, c); + h = g; + g = f; + f = e; + e = d + T1; + d = c; + c = b; + b = a; + a = T1 + T2; + } + + // FIPS 180-4 {6.2.2, 6.4.2} Step 4 + H[0] += a; + H[1] += b; + H[2] += c; + H[3] += d; + H[4] += e; + H[5] += f; + H[6] += g; + H[7] += h; + } + + H +} + +// FIPS 180-4 {4.1.1, 4.1.2, 4.1.3} +#[inline(always)] +pub(super) fn ch(x: W, y: W, z: W) -> W { + (x & y) | (!x & z) +} + +// FIPS 180-4 {4.1.1, 4.1.2, 4.1.3} +#[inline(always)] +pub(super) fn maj(x: W, y: W, z: W) -> W { + (x & y) | (x & z) | (y & z) +} + +// FIPS 180-4 {4.1.2, 4.1.3} +#[inline(always)] +fn SIGMA_0(x: S) -> S { + x.rotr(S::BIG_SIGMA_0.0) ^ x.rotr(S::BIG_SIGMA_0.1) ^ x.rotr(S::BIG_SIGMA_0.2) +} + +// FIPS 180-4 {4.1.2, 4.1.3} +#[inline(always)] +fn SIGMA_1(x: S) -> S { + x.rotr(S::BIG_SIGMA_1.0) ^ x.rotr(S::BIG_SIGMA_1.1) ^ x.rotr(S::BIG_SIGMA_1.2) +} + +// FIPS 180-4 {4.1.2, 4.1.3} +#[inline(always)] +fn sigma_0(x: S) -> S { + x.rotr(S::SMALL_SIGMA_0.0) ^ x.rotr(S::SMALL_SIGMA_0.1) ^ (x >> S::SMALL_SIGMA_0.2) +} + +// FIPS 180-4 {4.1.2, 4.1.3} +#[inline(always)] +fn sigma_1(x: S) -> S { + x.rotr(S::SMALL_SIGMA_1.0) ^ x.rotr(S::SMALL_SIGMA_1.1) ^ (x >> S::SMALL_SIGMA_1.2) +} + +// Commonality between SHA-1 and SHA-2 words. +pub(super) trait Word: + 'static + + Sized + + Copy + + Add + + AddAssign + + BitAnd + + BitOr + + Not +{ + const ZERO: Self; + + type InputBytes: Copy; + + fn from_be_bytes(input: Self::InputBytes) -> Self; + + fn rotr(self, count: u32) -> Self; +} + +/// A SHA-2 input word. +trait Sha2: Word + BitXor + Shr { + const BIG_SIGMA_0: (u32, u32, u32); + const BIG_SIGMA_1: (u32, u32, u32); + const SMALL_SIGMA_0: (u32, u32, usize); + const SMALL_SIGMA_1: (u32, u32, usize); + + const K: &'static [Self]; +} + +const MAX_ROUNDS: usize = 80; +pub(super) const CHAINING_WORDS: usize = 8; + +impl Word for Wrapping { + const ZERO: Self = Self(0); + type InputBytes = [u8; 4]; + + #[inline(always)] + fn from_be_bytes(input: Self::InputBytes) -> Self { + Self(u32::from_be_bytes(input)) + } + + #[inline(always)] + fn rotr(self, count: u32) -> Self { + Self(self.0.rotate_right(count)) + } +} + +// SHA-256 +impl Sha2 for Wrapping { + // FIPS 180-4 4.1.2 + const BIG_SIGMA_0: (u32, u32, u32) = (2, 13, 22); + const BIG_SIGMA_1: (u32, u32, u32) = (6, 11, 25); + const SMALL_SIGMA_0: (u32, u32, usize) = (7, 18, 3); + const SMALL_SIGMA_1: (u32, u32, usize) = (17, 19, 10); + + // FIPS 180-4 4.2.2 + const K: &'static [Self] = &[ + Self(0x428a2f98), + Self(0x71374491), + Self(0xb5c0fbcf), + Self(0xe9b5dba5), + Self(0x3956c25b), + Self(0x59f111f1), + Self(0x923f82a4), + Self(0xab1c5ed5), + Self(0xd807aa98), + Self(0x12835b01), + Self(0x243185be), + Self(0x550c7dc3), + Self(0x72be5d74), + Self(0x80deb1fe), + Self(0x9bdc06a7), + Self(0xc19bf174), + Self(0xe49b69c1), + Self(0xefbe4786), + Self(0x0fc19dc6), + Self(0x240ca1cc), + Self(0x2de92c6f), + Self(0x4a7484aa), + Self(0x5cb0a9dc), + Self(0x76f988da), + Self(0x983e5152), + Self(0xa831c66d), + Self(0xb00327c8), + Self(0xbf597fc7), + Self(0xc6e00bf3), + Self(0xd5a79147), + Self(0x06ca6351), + Self(0x14292967), + Self(0x27b70a85), + Self(0x2e1b2138), + Self(0x4d2c6dfc), + Self(0x53380d13), + Self(0x650a7354), + Self(0x766a0abb), + Self(0x81c2c92e), + Self(0x92722c85), + Self(0xa2bfe8a1), + Self(0xa81a664b), + Self(0xc24b8b70), + Self(0xc76c51a3), + Self(0xd192e819), + Self(0xd6990624), + Self(0xf40e3585), + Self(0x106aa070), + Self(0x19a4c116), + Self(0x1e376c08), + Self(0x2748774c), + Self(0x34b0bcb5), + Self(0x391c0cb3), + Self(0x4ed8aa4a), + Self(0x5b9cca4f), + Self(0x682e6ff3), + Self(0x748f82ee), + Self(0x78a5636f), + Self(0x84c87814), + Self(0x8cc70208), + Self(0x90befffa), + Self(0xa4506ceb), + Self(0xbef9a3f7), + Self(0xc67178f2), + ]; +} + +impl Word for Wrapping { + const ZERO: Self = Self(0); + type InputBytes = [u8; 8]; + + #[inline(always)] + fn from_be_bytes(input: Self::InputBytes) -> Self { + Self(u64::from_be_bytes(input)) + } + + #[inline(always)] + fn rotr(self, count: u32) -> Self { + Self(self.0.rotate_right(count)) + } +} + +// SHA-384 and SHA-512 +impl Sha2 for Wrapping { + // FIPS 180-4 4.1.3 + const BIG_SIGMA_0: (u32, u32, u32) = (28, 34, 39); + const BIG_SIGMA_1: (u32, u32, u32) = (14, 18, 41); + const SMALL_SIGMA_0: (u32, u32, usize) = (1, 8, 7); + const SMALL_SIGMA_1: (u32, u32, usize) = (19, 61, 6); + + // FIPS 180-4 4.2.3 + const K: &'static [Self] = &[ + Self(0x428a2f98d728ae22), + Self(0x7137449123ef65cd), + Self(0xb5c0fbcfec4d3b2f), + Self(0xe9b5dba58189dbbc), + Self(0x3956c25bf348b538), + Self(0x59f111f1b605d019), + Self(0x923f82a4af194f9b), + Self(0xab1c5ed5da6d8118), + Self(0xd807aa98a3030242), + Self(0x12835b0145706fbe), + Self(0x243185be4ee4b28c), + Self(0x550c7dc3d5ffb4e2), + Self(0x72be5d74f27b896f), + Self(0x80deb1fe3b1696b1), + Self(0x9bdc06a725c71235), + Self(0xc19bf174cf692694), + Self(0xe49b69c19ef14ad2), + Self(0xefbe4786384f25e3), + Self(0x0fc19dc68b8cd5b5), + Self(0x240ca1cc77ac9c65), + Self(0x2de92c6f592b0275), + Self(0x4a7484aa6ea6e483), + Self(0x5cb0a9dcbd41fbd4), + Self(0x76f988da831153b5), + Self(0x983e5152ee66dfab), + Self(0xa831c66d2db43210), + Self(0xb00327c898fb213f), + Self(0xbf597fc7beef0ee4), + Self(0xc6e00bf33da88fc2), + Self(0xd5a79147930aa725), + Self(0x06ca6351e003826f), + Self(0x142929670a0e6e70), + Self(0x27b70a8546d22ffc), + Self(0x2e1b21385c26c926), + Self(0x4d2c6dfc5ac42aed), + Self(0x53380d139d95b3df), + Self(0x650a73548baf63de), + Self(0x766a0abb3c77b2a8), + Self(0x81c2c92e47edaee6), + Self(0x92722c851482353b), + Self(0xa2bfe8a14cf10364), + Self(0xa81a664bbc423001), + Self(0xc24b8b70d0f89791), + Self(0xc76c51a30654be30), + Self(0xd192e819d6ef5218), + Self(0xd69906245565a910), + Self(0xf40e35855771202a), + Self(0x106aa07032bbd1b8), + Self(0x19a4c116b8d2d0c8), + Self(0x1e376c085141ab53), + Self(0x2748774cdf8eeb99), + Self(0x34b0bcb5e19b48a8), + Self(0x391c0cb3c5c95a63), + Self(0x4ed8aa4ae3418acb), + Self(0x5b9cca4f7763e373), + Self(0x682e6ff3d6b2b8a3), + Self(0x748f82ee5defb2fc), + Self(0x78a5636f43172f60), + Self(0x84c87814a1f0ab72), + Self(0x8cc702081a6439ec), + Self(0x90befffa23631e28), + Self(0xa4506cebde82bde9), + Self(0xbef9a3f7b2c67915), + Self(0xc67178f2e372532b), + Self(0xca273eceea26619c), + Self(0xd186b8c721c0c207), + Self(0xeada7dd6cde0eb1e), + Self(0xf57d4f7fee6ed178), + Self(0x06f067aa72176fba), + Self(0x0a637dc5a2c898a6), + Self(0x113f9804bef90dae), + Self(0x1b710b35131c471b), + Self(0x28db77f523047d84), + Self(0x32caab7b40c72493), + Self(0x3c9ebe0a15c9bebc), + Self(0x431d67c49c100d4c), + Self(0x4cc5d4becb3e42b6), + Self(0x597f299cfc657e2a), + Self(0x5fcb6fab3ad6faec), + Self(0x6c44198c4a475817), + ]; +} + +#[cfg(any(target_arch = "aarch64", target_arch = "arm", target_arch = "x86_64"))] +extern "C" { + pub(super) fn GFp_sha256_block_data_order( + state: &mut super::State, + data: *const u8, + num: c::size_t, + ); + pub(super) fn GFp_sha512_block_data_order( + state: &mut super::State, + data: *const u8, + num: c::size_t, + ); +} diff --git a/vendor/ring/src/ec.rs b/vendor/ring/src/ec.rs new file mode 100644 index 00000000..576d4911 --- /dev/null +++ b/vendor/ring/src/ec.rs @@ -0,0 +1,62 @@ +// Copyright 2015-2017 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use crate::{error, rand}; + +pub use self::keys::{KeyPair, PublicKey, Seed}; + +pub struct Curve { + pub public_key_len: usize, + pub elem_scalar_seed_len: usize, + + pub id: CurveID, + + // Precondition: `bytes` is the correct length. + check_private_key_bytes: fn(bytes: &[u8]) -> Result<(), error::Unspecified>, + + generate_private_key: + fn(rng: &dyn rand::SecureRandom, &mut [u8]) -> Result<(), error::Unspecified>, + + public_from_private: + fn(public_out: &mut [u8], private_key: &Seed) -> Result<(), error::Unspecified>, +} + +derive_debug_via_id!(Curve); + +#[derive(Clone, Copy, Debug, PartialEq)] +pub enum CurveID { + Curve25519, + P256, + P384, +} + +const ELEM_MAX_BITS: usize = 384; +pub const ELEM_MAX_BYTES: usize = (ELEM_MAX_BITS + 7) / 8; + +pub const SCALAR_MAX_BYTES: usize = ELEM_MAX_BYTES; +const SEED_MAX_BYTES: usize = ELEM_MAX_BYTES; + +/// The maximum length of a PKCS#8 documents generated by *ring* for ECC keys. +/// +/// This is NOT the maximum length of a PKCS#8 document that can be consumed by +/// `pkcs8::unwrap_key()`. +/// +/// `40` is the length of the P-384 template. It is actually one byte shorter +/// than the P-256 template, but the private key and the public key are much +/// longer. +pub const PKCS8_DOCUMENT_MAX_LEN: usize = 40 + SCALAR_MAX_BYTES + keys::PUBLIC_KEY_MAX_LEN; + +pub mod curve25519; +mod keys; +pub mod suite_b; diff --git a/vendor/ring/src/ec/curve25519.rs b/vendor/ring/src/ec/curve25519.rs new file mode 100644 index 00000000..b6e32e22 --- /dev/null +++ b/vendor/ring/src/ec/curve25519.rs @@ -0,0 +1,21 @@ +// Copyright 2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Elliptic curve operations and schemes using Curve25519. + +pub mod ed25519; +pub mod x25519; + +mod ops; +mod scalar; diff --git a/vendor/ring/src/ec/curve25519/ed25519.rs b/vendor/ring/src/ec/curve25519/ed25519.rs new file mode 100644 index 00000000..b29bb552 --- /dev/null +++ b/vendor/ring/src/ec/curve25519/ed25519.rs @@ -0,0 +1,32 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! EdDSA Signatures. + +use super::ops::ELEM_LEN; +use crate::digest; + +pub mod signing; +pub mod verification; + +/// The length of an Ed25519 public key. +pub const ED25519_PUBLIC_KEY_LEN: usize = ELEM_LEN; + +pub fn eddsa_digest(signature_r: &[u8], public_key: &[u8], msg: &[u8]) -> digest::Digest { + let mut ctx = digest::Context::new(&digest::SHA512); + ctx.update(signature_r); + ctx.update(public_key); + ctx.update(msg); + ctx.finish() +} diff --git a/vendor/ring/src/ec/curve25519/ed25519/ed25519_pkcs8_v2_template.der b/vendor/ring/src/ec/curve25519/ed25519/ed25519_pkcs8_v2_template.der new file mode 100644 index 00000000..717298e9 Binary files /dev/null and b/vendor/ring/src/ec/curve25519/ed25519/ed25519_pkcs8_v2_template.der differ diff --git a/vendor/ring/src/ec/curve25519/ed25519/signing.rs b/vendor/ring/src/ec/curve25519/ed25519/signing.rs new file mode 100644 index 00000000..3b522e81 --- /dev/null +++ b/vendor/ring/src/ec/curve25519/ed25519/signing.rs @@ -0,0 +1,270 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! EdDSA Signatures. + +use super::{super::ops::*, eddsa_digest, ED25519_PUBLIC_KEY_LEN}; +use crate::{ + digest, error, + io::der, + pkcs8, rand, + signature::{self, KeyPair as SigningKeyPair}, +}; +use core::convert::TryInto; + +/// An Ed25519 key pair, for signing. +pub struct Ed25519KeyPair { + // RFC 8032 Section 5.1.6 calls this *s*. + private_scalar: Scalar, + + // RFC 8032 Section 5.1.6 calls this *prefix*. + private_prefix: Prefix, + + // RFC 8032 Section 5.1.5 calls this *A*. + public_key: PublicKey, +} + +derive_debug_via_field!(Ed25519KeyPair, stringify!(Ed25519KeyPair), public_key); + +impl Ed25519KeyPair { + /// Generates a new key pair and returns the key pair serialized as a + /// PKCS#8 document. + /// + /// The PKCS#8 document will be a v2 `OneAsymmetricKey` with the public key, + /// as described in [RFC 5958 Section 2]; see [RFC 8410 Section 10.3] for an + /// example. + /// + /// [RFC 5958 Section 2]: https://tools.ietf.org/html/rfc5958#section-2 + /// [RFC 8410 Section 10.3]: https://tools.ietf.org/html/rfc8410#section-10.3 + pub fn generate_pkcs8( + rng: &dyn rand::SecureRandom, + ) -> Result { + let seed: [u8; SEED_LEN] = rand::generate(rng)?.expose(); + let key_pair = Self::from_seed_(&seed); + Ok(pkcs8::wrap_key( + &PKCS8_TEMPLATE, + &seed[..], + key_pair.public_key().as_ref(), + )) + } + + /// Constructs an Ed25519 key pair by parsing an unencrypted PKCS#8 v2 + /// Ed25519 private key. + /// + /// `openssl genpkey -algorithm ED25519` generates PKCS# v1 keys, which + /// require the use of `Ed25519KeyPair::from_pkcs8_maybe_unchecked()` + /// instead of `Ed25519KeyPair::from_pkcs8()`. + /// + /// The input must be in PKCS#8 v2 format, and in particular it must contain + /// the public key in addition to the private key. `from_pkcs8()` will + /// verify that the public key and the private key are consistent with each + /// other. + /// + /// If you need to parse PKCS#8 v1 files (without the public key) then use + /// `Ed25519KeyPair::from_pkcs8_maybe_unchecked()` instead. + pub fn from_pkcs8(pkcs8: &[u8]) -> Result { + let (seed, public_key) = + unwrap_pkcs8(pkcs8::Version::V2Only, untrusted::Input::from(pkcs8))?; + Self::from_seed_and_public_key( + seed.as_slice_less_safe(), + public_key.unwrap().as_slice_less_safe(), + ) + } + + /// Constructs an Ed25519 key pair by parsing an unencrypted PKCS#8 v1 or v2 + /// Ed25519 private key. + /// + /// `openssl genpkey -algorithm ED25519` generates PKCS# v1 keys. + /// + /// It is recommended to use `Ed25519KeyPair::from_pkcs8()`, which accepts + /// only PKCS#8 v2 files that contain the public key. + /// `from_pkcs8_maybe_unchecked()` parses PKCS#2 files exactly like + /// `from_pkcs8()`. It also accepts v1 files. PKCS#8 v1 files do not contain + /// the public key, so when a v1 file is parsed the public key will be + /// computed from the private key, and there will be no consistency check + /// between the public key and the private key. + /// + /// PKCS#8 v2 files are parsed exactly like `Ed25519KeyPair::from_pkcs8()`. + pub fn from_pkcs8_maybe_unchecked(pkcs8: &[u8]) -> Result { + let (seed, public_key) = + unwrap_pkcs8(pkcs8::Version::V1OrV2, untrusted::Input::from(pkcs8))?; + if let Some(public_key) = public_key { + Self::from_seed_and_public_key( + seed.as_slice_less_safe(), + public_key.as_slice_less_safe(), + ) + } else { + Self::from_seed_unchecked(seed.as_slice_less_safe()) + } + } + + /// Constructs an Ed25519 key pair from the private key seed `seed` and its + /// public key `public_key`. + /// + /// It is recommended to use `Ed25519KeyPair::from_pkcs8()` instead. + /// + /// The private and public keys will be verified to be consistent with each + /// other. This helps avoid misuse of the key (e.g. accidentally swapping + /// the private key and public key, or using the wrong private key for the + /// public key). This also detects any corruption of the public or private + /// key. + pub fn from_seed_and_public_key( + seed: &[u8], + public_key: &[u8], + ) -> Result { + let pair = Self::from_seed_unchecked(seed)?; + + // This implicitly verifies that `public_key` is the right length. + // XXX: This rejects ~18 keys when they are partially reduced, though + // those keys are virtually impossible to find. + if public_key != pair.public_key.as_ref() { + let err = if public_key.len() != pair.public_key.as_ref().len() { + error::KeyRejected::invalid_encoding() + } else { + error::KeyRejected::inconsistent_components() + }; + return Err(err); + } + + Ok(pair) + } + + /// Constructs a Ed25519 key pair from the private key seed `seed`. + /// + /// It is recommended to use `Ed25519KeyPair::from_pkcs8()` instead. When + /// that is not practical, it is recommended to use + /// `Ed25519KeyPair::from_seed_and_public_key()` instead. + /// + /// Since the public key is not given, the public key will be computed from + /// the private key. It is not possible to detect misuse or corruption of + /// the private key since the public key isn't given as input. + pub fn from_seed_unchecked(seed: &[u8]) -> Result { + let seed = seed + .try_into() + .map_err(|_| error::KeyRejected::invalid_encoding())?; + Ok(Self::from_seed_(seed)) + } + + fn from_seed_(seed: &Seed) -> Self { + let h = digest::digest(&digest::SHA512, seed); + let (private_scalar, private_prefix) = h.as_ref().split_at(SCALAR_LEN); + + let private_scalar = + MaskedScalar::from_bytes_masked(private_scalar.try_into().unwrap()).into(); + + let mut a = ExtPoint::new_at_infinity(); + unsafe { + GFp_x25519_ge_scalarmult_base(&mut a, &private_scalar); + } + + Self { + private_scalar, + private_prefix: private_prefix.try_into().unwrap(), + public_key: PublicKey(a.into_encoded_point()), + } + } + + /// Returns the signature of the message `msg`. + pub fn sign(&self, msg: &[u8]) -> signature::Signature { + signature::Signature::new(|signature_bytes| { + extern "C" { + fn GFp_x25519_sc_muladd( + s: &mut [u8; SCALAR_LEN], + a: &Scalar, + b: &Scalar, + c: &Scalar, + ); + } + + let (signature_bytes, _unused) = signature_bytes.split_at_mut(ELEM_LEN + SCALAR_LEN); + let (signature_r, signature_s) = signature_bytes.split_at_mut(ELEM_LEN); + let nonce = { + let mut ctx = digest::Context::new(&digest::SHA512); + ctx.update(&self.private_prefix); + ctx.update(msg); + ctx.finish() + }; + let nonce = Scalar::from_sha512_digest_reduced(nonce); + + let mut r = ExtPoint::new_at_infinity(); + unsafe { + GFp_x25519_ge_scalarmult_base(&mut r, &nonce); + } + signature_r.copy_from_slice(&r.into_encoded_point()); + let hram_digest = eddsa_digest(signature_r, &self.public_key.as_ref(), msg); + let hram = Scalar::from_sha512_digest_reduced(hram_digest); + unsafe { + GFp_x25519_sc_muladd( + signature_s.try_into().unwrap(), + &hram, + &self.private_scalar, + &nonce, + ); + } + + SIGNATURE_LEN + }) + } +} + +impl signature::KeyPair for Ed25519KeyPair { + type PublicKey = PublicKey; + + fn public_key(&self) -> &Self::PublicKey { + &self.public_key + } +} + +#[derive(Clone, Copy)] +pub struct PublicKey([u8; ED25519_PUBLIC_KEY_LEN]); + +impl AsRef<[u8]> for PublicKey { + fn as_ref(&self) -> &[u8] { + self.0.as_ref() + } +} + +derive_debug_self_as_ref_hex_bytes!(PublicKey); + +fn unwrap_pkcs8( + version: pkcs8::Version, + input: untrusted::Input, +) -> Result<(untrusted::Input, Option), error::KeyRejected> { + let (private_key, public_key) = pkcs8::unwrap_key(&PKCS8_TEMPLATE, version, input)?; + let private_key = private_key + .read_all(error::Unspecified, |input| { + der::expect_tag_and_get_value(input, der::Tag::OctetString) + }) + .map_err(|error::Unspecified| error::KeyRejected::invalid_encoding())?; + Ok((private_key, public_key)) +} + +extern "C" { + fn GFp_x25519_ge_scalarmult_base(h: &mut ExtPoint, a: &Scalar); +} + +type Prefix = [u8; PREFIX_LEN]; +const PREFIX_LEN: usize = digest::SHA512_OUTPUT_LEN - SCALAR_LEN; + +const SIGNATURE_LEN: usize = ELEM_LEN + SCALAR_LEN; + +type Seed = [u8; SEED_LEN]; +const SEED_LEN: usize = 32; + +static PKCS8_TEMPLATE: pkcs8::Template = pkcs8::Template { + bytes: include_bytes!("ed25519_pkcs8_v2_template.der"), + alg_id_range: core::ops::Range { start: 7, end: 12 }, + curve_id_index: 0, + private_key_index: 0x10, +}; diff --git a/vendor/ring/src/ec/curve25519/ed25519/verification.rs b/vendor/ring/src/ec/curve25519/ed25519/verification.rs new file mode 100644 index 00000000..e0c1b652 --- /dev/null +++ b/vendor/ring/src/ec/curve25519/ed25519/verification.rs @@ -0,0 +1,84 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! EdDSA Signatures. + +use super::{super::ops::*, eddsa_digest}; +use crate::{error, sealed, signature}; +use core::convert::TryInto; + +/// Parameters for EdDSA signing and verification. +pub struct EdDSAParameters; + +impl core::fmt::Debug for EdDSAParameters { + fn fmt(&self, f: &mut core::fmt::Formatter) -> Result<(), core::fmt::Error> { + write!(f, "ring::signature::ED25519") + } +} + +/// Verification of [Ed25519] signatures. +/// +/// Ed25519 uses SHA-512 as the digest algorithm. +/// +/// [Ed25519]: https://ed25519.cr.yp.to/ +pub static ED25519: EdDSAParameters = EdDSAParameters {}; + +impl signature::VerificationAlgorithm for EdDSAParameters { + fn verify( + &self, + public_key: untrusted::Input, + msg: untrusted::Input, + signature: untrusted::Input, + ) -> Result<(), error::Unspecified> { + let public_key: &[u8; ELEM_LEN] = public_key.as_slice_less_safe().try_into()?; + let (signature_r, signature_s) = signature.read_all(error::Unspecified, |input| { + let signature_r: &[u8; ELEM_LEN] = input + .read_bytes(ELEM_LEN)? + .as_slice_less_safe() + .try_into()?; + let signature_s: &[u8; SCALAR_LEN] = input + .read_bytes(SCALAR_LEN)? + .as_slice_less_safe() + .try_into()?; + Ok((signature_r, signature_s)) + })?; + + let signature_s = Scalar::from_bytes_checked(*signature_s)?; + + let mut a = ExtPoint::from_encoded_point_vartime(public_key)?; + a.invert_vartime(); + + let h_digest = eddsa_digest(signature_r, public_key, msg.as_slice_less_safe()); + let h = Scalar::from_sha512_digest_reduced(h_digest); + + let mut r = Point::new_at_infinity(); + unsafe { GFp_x25519_ge_double_scalarmult_vartime(&mut r, &h, &a, &signature_s) }; + let r_check = r.into_encoded_point(); + if *signature_r != r_check { + return Err(error::Unspecified); + } + Ok(()) + } +} + +impl sealed::Sealed for EdDSAParameters {} + +extern "C" { + fn GFp_x25519_ge_double_scalarmult_vartime( + r: &mut Point, + a_coeff: &Scalar, + a: &ExtPoint, + b_coeff: &Scalar, + ); +} diff --git a/vendor/ring/src/ec/curve25519/ops.rs b/vendor/ring/src/ec/curve25519/ops.rs new file mode 100644 index 00000000..0b9cad48 --- /dev/null +++ b/vendor/ring/src/ec/curve25519/ops.rs @@ -0,0 +1,155 @@ +// Copyright 2015-2017 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Elliptic curve operations on the birationally equivalent curves Curve25519 +//! and Edwards25519. + +pub use super::scalar::{MaskedScalar, Scalar, SCALAR_LEN}; +use crate::{ + bssl, error, + limb::{Limb, LIMB_BITS}, +}; +use core::marker::PhantomData; + +// Elem` is `fe` in curve25519/internal.h. +// Elem is `fe_loose` in curve25519/internal.h. +// Keep this in sync with curve25519/internal.h. +#[repr(C)] +pub struct Elem { + limbs: [Limb; ELEM_LIMBS], // This is called `v` in the C code. + encoding: PhantomData, +} + +pub trait Encoding {} +pub struct T; +impl Encoding for T {} + +const ELEM_LIMBS: usize = 5 * 64 / LIMB_BITS; + +impl Elem { + fn zero() -> Self { + Self { + limbs: Default::default(), + encoding: PhantomData, + } + } +} + +impl Elem { + fn negate(&mut self) { + unsafe { + GFp_x25519_fe_neg(self); + } + } +} + +// An encoding of a curve point. If on Curve25519, it should be encoded as +// described in Section 5 of [RFC 7748]. If on Edwards25519, it should be +// encoded as described in section 5.1.2 of [RFC 8032]. +// +// [RFC 7748] https://tools.ietf.org/html/rfc7748#section-5 +// [RFC 8032] https://tools.ietf.org/html/rfc8032#section-5.1.2 +pub type EncodedPoint = [u8; ELEM_LEN]; +pub const ELEM_LEN: usize = 32; + +// Keep this in sync with `ge_p3` in curve25519/internal.h. +#[repr(C)] +pub struct ExtPoint { + x: Elem, + y: Elem, + z: Elem, + t: Elem, +} + +impl ExtPoint { + pub fn new_at_infinity() -> Self { + Self { + x: Elem::zero(), + y: Elem::zero(), + z: Elem::zero(), + t: Elem::zero(), + } + } + + pub fn from_encoded_point_vartime(encoded: &EncodedPoint) -> Result { + let mut point = Self::new_at_infinity(); + + Result::from(unsafe { GFp_x25519_ge_frombytes_vartime(&mut point, encoded) }) + .map(|()| point) + } + + pub fn into_encoded_point(self) -> EncodedPoint { + encode_point(self.x, self.y, self.z) + } + + pub fn invert_vartime(&mut self) { + self.x.negate(); + self.t.negate(); + } +} + +// Keep this in sync with `ge_p2` in curve25519/internal.h. +#[repr(C)] +pub struct Point { + x: Elem, + y: Elem, + z: Elem, +} + +impl Point { + pub fn new_at_infinity() -> Self { + Self { + x: Elem::zero(), + y: Elem::zero(), + z: Elem::zero(), + } + } + + pub fn into_encoded_point(self) -> EncodedPoint { + encode_point(self.x, self.y, self.z) + } +} + +fn encode_point(x: Elem, y: Elem, z: Elem) -> EncodedPoint { + let mut bytes = [0; ELEM_LEN]; + + let sign_bit: u8 = unsafe { + let mut recip = Elem::zero(); + GFp_x25519_fe_invert(&mut recip, &z); + + let mut x_over_z = Elem::zero(); + GFp_x25519_fe_mul_ttt(&mut x_over_z, &x, &recip); + + let mut y_over_z = Elem::zero(); + GFp_x25519_fe_mul_ttt(&mut y_over_z, &y, &recip); + GFp_x25519_fe_tobytes(&mut bytes, &y_over_z); + + GFp_x25519_fe_isnegative(&x_over_z) + }; + + // The preceding computations must execute in constant time, but this + // doesn't need to. + bytes[ELEM_LEN - 1] ^= sign_bit << 7; + + bytes +} + +extern "C" { + fn GFp_x25519_fe_invert(out: &mut Elem, z: &Elem); + fn GFp_x25519_fe_isnegative(elem: &Elem) -> u8; + fn GFp_x25519_fe_mul_ttt(h: &mut Elem, f: &Elem, g: &Elem); + fn GFp_x25519_fe_neg(f: &mut Elem); + fn GFp_x25519_fe_tobytes(bytes: &mut EncodedPoint, elem: &Elem); + fn GFp_x25519_ge_frombytes_vartime(h: &mut ExtPoint, s: &EncodedPoint) -> bssl::Result; +} diff --git a/vendor/ring/src/ec/curve25519/scalar.rs b/vendor/ring/src/ec/curve25519/scalar.rs new file mode 100644 index 00000000..39728087 --- /dev/null +++ b/vendor/ring/src/ec/curve25519/scalar.rs @@ -0,0 +1,78 @@ +// Copyright 2015-2019 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use crate::{digest, error, limb}; +use core::convert::TryInto; + +#[repr(transparent)] +pub struct Scalar([u8; SCALAR_LEN]); + +pub const SCALAR_LEN: usize = 32; + +impl Scalar { + // Constructs a `Scalar` from `bytes`, failing if `bytes` encodes a scalar + // that not in the range [0, n). + pub fn from_bytes_checked(bytes: [u8; SCALAR_LEN]) -> Result { + const ORDER: [limb::Limb; SCALAR_LEN / limb::LIMB_BYTES] = + limbs![0x5cf5d3ed, 0x5812631a, 0xa2f79cd6, 0x14def9de, 0, 0, 0, 0x10000000]; + + // `bytes` is in little-endian order. + let mut reversed = bytes; + reversed.reverse(); + + let mut limbs = [0; SCALAR_LEN / limb::LIMB_BYTES]; + limb::parse_big_endian_in_range_and_pad_consttime( + untrusted::Input::from(&reversed), + limb::AllowZero::Yes, + &ORDER, + &mut limbs, + )?; + + Ok(Self(bytes)) + } + + // Constructs a `Scalar` from `digest` reduced modulo n. + pub fn from_sha512_digest_reduced(digest: digest::Digest) -> Self { + extern "C" { + fn GFp_x25519_sc_reduce(s: &mut UnreducedScalar); + } + let mut unreduced = [0u8; digest::SHA512_OUTPUT_LEN]; + unreduced.copy_from_slice(digest.as_ref()); + unsafe { GFp_x25519_sc_reduce(&mut unreduced) }; + Self((&unreduced[..SCALAR_LEN]).try_into().unwrap()) + } +} + +#[repr(transparent)] +pub struct MaskedScalar([u8; SCALAR_LEN]); + +impl MaskedScalar { + pub fn from_bytes_masked(bytes: [u8; SCALAR_LEN]) -> Self { + extern "C" { + fn GFp_x25519_sc_mask(a: &mut [u8; SCALAR_LEN]); + } + let mut r = Self(bytes); + unsafe { GFp_x25519_sc_mask(&mut r.0) }; + r + } +} + +impl From for Scalar { + fn from(MaskedScalar(scalar): MaskedScalar) -> Self { + Self(scalar) + } +} + +type UnreducedScalar = [u8; UNREDUCED_SCALAR_LEN]; +const UNREDUCED_SCALAR_LEN: usize = SCALAR_LEN * 2; diff --git a/vendor/ring/src/ec/curve25519/x25519.rs b/vendor/ring/src/ec/curve25519/x25519.rs new file mode 100644 index 00000000..06eac8fb --- /dev/null +++ b/vendor/ring/src/ec/curve25519/x25519.rs @@ -0,0 +1,171 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! X25519 Key agreement. + +use super::{ops, scalar::SCALAR_LEN}; +use crate::{agreement, constant_time, cpu, ec, error, rand}; +use core::convert::TryInto; + +static CURVE25519: ec::Curve = ec::Curve { + public_key_len: PUBLIC_KEY_LEN, + elem_scalar_seed_len: ELEM_AND_SCALAR_LEN, + id: ec::CurveID::Curve25519, + check_private_key_bytes: x25519_check_private_key_bytes, + generate_private_key: x25519_generate_private_key, + public_from_private: x25519_public_from_private, +}; + +/// X25519 (ECDH using Curve25519) as described in [RFC 7748]. +/// +/// Everything is as described in RFC 7748. Key agreement will fail if the +/// result of the X25519 operation is zero; see the notes on the +/// "all-zero value" in [RFC 7748 section 6.1]. +/// +/// [RFC 7748]: https://tools.ietf.org/html/rfc7748 +/// [RFC 7748 section 6.1]: https://tools.ietf.org/html/rfc7748#section-6.1 +pub static X25519: agreement::Algorithm = agreement::Algorithm { + curve: &CURVE25519, + ecdh: x25519_ecdh, +}; + +#[allow(clippy::unnecessary_wraps)] +fn x25519_check_private_key_bytes(bytes: &[u8]) -> Result<(), error::Unspecified> { + debug_assert_eq!(bytes.len(), PRIVATE_KEY_LEN); + Ok(()) +} + +fn x25519_generate_private_key( + rng: &dyn rand::SecureRandom, + out: &mut [u8], +) -> Result<(), error::Unspecified> { + rng.fill(out) +} + +fn x25519_public_from_private( + public_out: &mut [u8], + private_key: &ec::Seed, +) -> Result<(), error::Unspecified> { + let public_out = public_out.try_into()?; + + #[cfg(target_arch = "arm")] + let cpu_features = private_key.cpu_features; + + let private_key: &[u8; SCALAR_LEN] = private_key.bytes_less_safe().try_into()?; + let private_key = ops::MaskedScalar::from_bytes_masked(*private_key); + + #[cfg(all(not(target_os = "ios"), target_arch = "arm"))] + { + if cpu::arm::NEON.available(cpu_features) { + static MONTGOMERY_BASE_POINT: [u8; 32] = [ + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + ]; + x25519_neon(public_out, &private_key, &MONTGOMERY_BASE_POINT); + return Ok(()); + } + } + + extern "C" { + fn GFp_x25519_public_from_private_generic_masked( + public_key_out: &mut PublicKey, + private_key: &PrivateKey, + ); + } + unsafe { + GFp_x25519_public_from_private_generic_masked(public_out, &private_key); + } + + Ok(()) +} + +fn x25519_ecdh( + out: &mut [u8], + my_private_key: &ec::Seed, + peer_public_key: untrusted::Input, +) -> Result<(), error::Unspecified> { + let cpu_features = my_private_key.cpu_features; + let my_private_key: &[u8; SCALAR_LEN] = my_private_key.bytes_less_safe().try_into()?; + let my_private_key = ops::MaskedScalar::from_bytes_masked(*my_private_key); + let peer_public_key: &[u8; PUBLIC_KEY_LEN] = peer_public_key.as_slice_less_safe().try_into()?; + + #[cfg_attr( + not(all(not(target_os = "ios"), target_arch = "arm")), + allow(unused_variables) + )] + fn scalar_mult( + out: &mut ops::EncodedPoint, + scalar: &ops::MaskedScalar, + point: &ops::EncodedPoint, + cpu_features: cpu::Features, + ) { + #[cfg(all(not(target_os = "ios"), target_arch = "arm"))] + { + if cpu::arm::NEON.available(cpu_features) { + return x25519_neon(out, scalar, point); + } + } + + extern "C" { + fn GFp_x25519_scalar_mult_generic_masked( + out: &mut ops::EncodedPoint, + scalar: &ops::MaskedScalar, + point: &ops::EncodedPoint, + ); + } + unsafe { + GFp_x25519_scalar_mult_generic_masked(out, scalar, point); + } + } + + scalar_mult( + out.try_into()?, + &my_private_key, + peer_public_key, + cpu_features, + ); + + let zeros: SharedSecret = [0; SHARED_SECRET_LEN]; + if constant_time::verify_slices_are_equal(out, &zeros).is_ok() { + // All-zero output results when the input is a point of small order. + return Err(error::Unspecified); + } + + Ok(()) +} + +#[cfg(all(not(target_os = "ios"), target_arch = "arm"))] +fn x25519_neon(out: &mut ops::EncodedPoint, scalar: &ops::MaskedScalar, point: &ops::EncodedPoint) { + extern "C" { + fn GFp_x25519_NEON( + out: &mut ops::EncodedPoint, + scalar: &ops::MaskedScalar, + point: &ops::EncodedPoint, + ); + } + unsafe { GFp_x25519_NEON(out, scalar, point) } +} + +const ELEM_AND_SCALAR_LEN: usize = ops::ELEM_LEN; + +type PrivateKey = ops::MaskedScalar; +const PRIVATE_KEY_LEN: usize = ELEM_AND_SCALAR_LEN; + +// An X25519 public key as an encoded Curve25519 point. +type PublicKey = [u8; PUBLIC_KEY_LEN]; +const PUBLIC_KEY_LEN: usize = ELEM_AND_SCALAR_LEN; + +// An X25519 shared secret as an encoded Curve25519 point. +type SharedSecret = [u8; SHARED_SECRET_LEN]; +const SHARED_SECRET_LEN: usize = ELEM_AND_SCALAR_LEN; diff --git a/vendor/ring/src/ec/keys.rs b/vendor/ring/src/ec/keys.rs new file mode 100644 index 00000000..7831571f --- /dev/null +++ b/vendor/ring/src/ec/keys.rs @@ -0,0 +1,90 @@ +use super::{Curve, ELEM_MAX_BYTES, SEED_MAX_BYTES}; +use crate::{cpu, error, rand}; + +pub struct KeyPair { + seed: Seed, + public_key: PublicKey, +} + +impl KeyPair { + pub fn derive(seed: Seed) -> Result { + let public_key = seed.compute_public_key()?; + Ok(Self { seed, public_key }) + } + + pub fn public_key(&self) -> &PublicKey { + &self.public_key + } + pub fn split(self) -> (Seed, PublicKey) { + (self.seed, self.public_key) + } +} + +pub struct Seed { + bytes: [u8; SEED_MAX_BYTES], + curve: &'static Curve, + pub(crate) cpu_features: cpu::Features, +} + +impl Seed { + pub(crate) fn generate( + curve: &'static Curve, + rng: &dyn rand::SecureRandom, + cpu_features: cpu::Features, + ) -> Result { + let mut r = Self { + bytes: [0u8; SEED_MAX_BYTES], + curve, + cpu_features, + }; + (curve.generate_private_key)(rng, &mut r.bytes[..curve.elem_scalar_seed_len])?; + Ok(r) + } + + pub(crate) fn from_bytes( + curve: &'static Curve, + bytes: untrusted::Input, + cpu_features: cpu::Features, + ) -> Result { + let bytes = bytes.as_slice_less_safe(); + if curve.elem_scalar_seed_len != bytes.len() { + return Err(error::Unspecified); + } + (curve.check_private_key_bytes)(bytes)?; + let mut r = Self { + bytes: [0; SEED_MAX_BYTES], + curve, + cpu_features, + }; + r.bytes[..curve.elem_scalar_seed_len].copy_from_slice(bytes); + Ok(r) + } + + pub fn bytes_less_safe(&self) -> &[u8] { + &self.bytes[..self.curve.elem_scalar_seed_len] + } + + pub fn compute_public_key(&self) -> Result { + let mut public_key = PublicKey { + bytes: [0u8; PUBLIC_KEY_MAX_LEN], + len: self.curve.public_key_len, + }; + (self.curve.public_from_private)(&mut public_key.bytes[..public_key.len], self)?; + Ok(public_key) + } +} + +#[derive(Copy, Clone)] +pub struct PublicKey { + bytes: [u8; PUBLIC_KEY_MAX_LEN], + len: usize, +} + +impl AsRef<[u8]> for PublicKey { + fn as_ref(&self) -> &[u8] { + &self.bytes[..self.len] + } +} + +/// The maximum length, in bytes, of an encoded public key. +pub const PUBLIC_KEY_MAX_LEN: usize = 1 + (2 * ELEM_MAX_BYTES); diff --git a/vendor/ring/src/ec/suite_b.rs b/vendor/ring/src/ec/suite_b.rs new file mode 100644 index 00000000..9e363563 --- /dev/null +++ b/vendor/ring/src/ec/suite_b.rs @@ -0,0 +1,237 @@ +// Copyright 2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Elliptic curve operations on P-256 & P-384. + +use self::ops::*; +use crate::{arithmetic::montgomery::*, cpu, ec, error, io::der, limb::LimbMask, pkcs8}; + +// NIST SP 800-56A Step 3: "If q is an odd prime p, verify that +// yQ**2 = xQ**3 + axQ + b in GF(p), where the arithmetic is performed modulo +// p." +// +// That is, verify that (x, y) is on the curve, which is true iif: +// +// y**2 == x**3 + a*x + b (mod q) +// +// Or, equivalently, but more efficiently: +// +// y**2 == (x**2 + a)*x + b (mod q) +// +fn verify_affine_point_is_on_the_curve( + ops: &CommonOps, + (x, y): (&Elem, &Elem), +) -> Result<(), error::Unspecified> { + verify_affine_point_is_on_the_curve_scaled(ops, (x, y), &ops.a, &ops.b) +} + +// Use `verify_affine_point_is_on_the_curve` instead of this function whenever +// the affine coordinates are available or will become available. This function +// should only be used then the affine coordinates are never calculated. See +// the notes for `verify_affine_point_is_on_the_curve_scaled`. +// +// The value `z**2` is returned on success because it is useful for ECDSA +// verification. +// +// This function also verifies that the point is not at infinity. +fn verify_jacobian_point_is_on_the_curve( + ops: &CommonOps, + p: &Point, +) -> Result, error::Unspecified> { + let z = ops.point_z(p); + + // Verify that the point is not at infinity. + ops.elem_verify_is_not_zero(&z)?; + + let x = ops.point_x(p); + let y = ops.point_y(p); + + // We are given Jacobian coordinates (x, y, z). So, we have: + // + // (x/z**2, y/z**3) == (x', y'), + // + // where (x', y') are the affine coordinates. The curve equation is: + // + // y'**2 == x'**3 + a*x' + b == (x'**2 + a)*x' + b + // + // Substituting our Jacobian coordinates, we get: + // + // / y \**2 / / x \**2 \ / x \ + // | ---- | == | | ---- | + a | * | ---- | + b + // \ z**3 / \ \ z**2 / / \ z**2 / + // + // Simplify: + // + // y**2 / x**2 \ x + // ---- == | ---- + a | * ---- + b + // z**6 \ z**4 / z**2 + // + // Multiply both sides by z**6: + // + // z**6 / x**2 \ z**6 + // ---- * y**2 == | ---- + a | * ---- * x + (z**6) * b + // z**6 \ z**4 / z**2 + // + // Simplify: + // + // / x**2 \ + // y**2 == | ---- + a | * z**4 * x + (z**6) * b + // \ z**4 / + // + // Distribute z**4: + // + // / z**4 \ + // y**2 == | ---- * x**2 + z**4 * a | * x + (z**6) * b + // \ z**4 / + // + // Simplify: + // + // y**2 == (x**2 + z**4 * a) * x + (z**6) * b + // + let z2 = ops.elem_squared(&z); + let z4 = ops.elem_squared(&z2); + let z4_a = ops.elem_product(&z4, &ops.a); + let z6 = ops.elem_product(&z4, &z2); + let z6_b = ops.elem_product(&z6, &ops.b); + verify_affine_point_is_on_the_curve_scaled(ops, (&x, &y), &z4_a, &z6_b)?; + Ok(z2) +} + +// Handles the common logic of point-is-on-the-curve checks for both affine and +// Jacobian cases. +// +// When doing the check that the point is on the curve after a computation, +// to avoid fault attacks or mitigate potential bugs, it is better for security +// to use `verify_affine_point_is_on_the_curve` on the affine coordinates, +// because it provides some protection against faults that occur in the +// computation of the inverse of `z`. See the paper and presentation "Fault +// Attacks on Projective-to-Affine Coordinates Conversion" by Diana MaimuÅ£, +// Cédric Murdica, David Naccache, Mehdi Tibouchi. That presentation concluded +// simply "Check the validity of the result after conversion to affine +// coordinates." (It seems like a good idea to verify that +// z_inv * z == 1 mod q too). +// +// In the case of affine coordinates (x, y), `a_scaled` and `b_scaled` are +// `a` and `b`, respectively. In the case of Jacobian coordinates (x, y, z), +// the computation and comparison is the same, except `a_scaled` and `b_scaled` +// are (z**4 * a) and (z**6 * b), respectively. Thus, performance is another +// reason to prefer doing the check on the affine coordinates, as Jacobian +// computation requires 3 extra multiplications and 2 extra squarings. +// +// An example of a fault attack that isn't mitigated by a point-on-the-curve +// check after multiplication is given in "Sign Change Fault Attacks On +// Elliptic Curve Cryptosystems" by Johannes Blömer, Martin Otto, and +// Jean-Pierre Seifert. +fn verify_affine_point_is_on_the_curve_scaled( + ops: &CommonOps, + (x, y): (&Elem, &Elem), + a_scaled: &Elem, + b_scaled: &Elem, +) -> Result<(), error::Unspecified> { + let lhs = ops.elem_squared(y); + + let mut rhs = ops.elem_squared(x); + ops.elem_add(&mut rhs, a_scaled); + ops.elem_mul(&mut rhs, x); + ops.elem_add(&mut rhs, b_scaled); + + if ops.elems_are_equal(&lhs, &rhs) != LimbMask::True { + return Err(error::Unspecified); + } + + Ok(()) +} + +pub(crate) fn key_pair_from_pkcs8( + curve: &'static ec::Curve, + template: &pkcs8::Template, + input: untrusted::Input, + cpu_features: cpu::Features, +) -> Result { + let (ec_private_key, _) = pkcs8::unwrap_key(template, pkcs8::Version::V1Only, input)?; + let (private_key, public_key) = + ec_private_key.read_all(error::KeyRejected::invalid_encoding(), |input| { + // https://tools.ietf.org/html/rfc5915#section-3 + der::nested( + input, + der::Tag::Sequence, + error::KeyRejected::invalid_encoding(), + |input| key_pair_from_pkcs8_(template, input), + ) + })?; + key_pair_from_bytes(curve, private_key, public_key, cpu_features) +} + +fn key_pair_from_pkcs8_<'a>( + template: &pkcs8::Template, + input: &mut untrusted::Reader<'a>, +) -> Result<(untrusted::Input<'a>, untrusted::Input<'a>), error::KeyRejected> { + let version = der::small_nonnegative_integer(input) + .map_err(|error::Unspecified| error::KeyRejected::invalid_encoding())?; + if version != 1 { + return Err(error::KeyRejected::version_not_supported()); + } + + let private_key = der::expect_tag_and_get_value(input, der::Tag::OctetString) + .map_err(|error::Unspecified| error::KeyRejected::invalid_encoding())?; + + // [0] parameters (optional). + if input.peek(u8::from(der::Tag::ContextSpecificConstructed0)) { + let actual_alg_id = + der::expect_tag_and_get_value(input, der::Tag::ContextSpecificConstructed0) + .map_err(|error::Unspecified| error::KeyRejected::invalid_encoding())?; + if actual_alg_id != template.curve_oid() { + return Err(error::KeyRejected::wrong_algorithm()); + } + } + + // [1] publicKey. The RFC says it is optional, but we require it + // to be present. + let public_key = der::nested( + input, + der::Tag::ContextSpecificConstructed1, + error::Unspecified, + der::bit_string_with_no_unused_bits, + ) + .map_err(|error::Unspecified| error::KeyRejected::invalid_encoding())?; + + Ok((private_key, public_key)) +} + +pub(crate) fn key_pair_from_bytes( + curve: &'static ec::Curve, + private_key_bytes: untrusted::Input, + public_key_bytes: untrusted::Input, + cpu_features: cpu::Features, +) -> Result { + let seed = ec::Seed::from_bytes(curve, private_key_bytes, cpu_features) + .map_err(|error::Unspecified| error::KeyRejected::invalid_component())?; + + let r = ec::KeyPair::derive(seed) + .map_err(|error::Unspecified| error::KeyRejected::unexpected_error())?; + if public_key_bytes != *r.public_key().as_ref() { + return Err(error::KeyRejected::inconsistent_components()); + } + + Ok(r) +} + +pub mod curve; +pub mod ecdh; +pub mod ecdsa; + +mod ops; + +mod private_key; +mod public_key; diff --git a/vendor/ring/src/ec/suite_b/curve.rs b/vendor/ring/src/ec/suite_b/curve.rs new file mode 100644 index 00000000..e0ff4f46 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/curve.rs @@ -0,0 +1,83 @@ +// Copyright 2015-2017 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use crate::{ec, error, rand}; + +/// A key agreement algorithm. +macro_rules! suite_b_curve { + ( $NAME:ident, $bits:expr, $private_key_ops:expr, $id:expr, + $check_private_key_bytes:ident, $generate_private_key:ident, + $public_from_private:ident) => { + /// Public keys are encoding in uncompressed form using the + /// Octet-String-to-Elliptic-Curve-Point algorithm in + /// [SEC 1: Elliptic Curve Cryptography, Version 2.0]. Public keys are + /// validated during key agreement according to + /// [NIST Special Publication 800-56A, revision 2] and Appendix B.3 of + /// the NSA's [Suite B Implementer's Guide to NIST SP 800-56A]. + /// + /// [SEC 1: Elliptic Curve Cryptography, Version 2.0]: + /// http://www.secg.org/sec1-v2.pdf + /// [NIST Special Publication 800-56A, revision 2]: + /// http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar2.pdf + /// [Suite B Implementer's Guide to NIST SP 800-56A]: + /// https://github.com/briansmith/ring/blob/main/doc/ecdh.pdf + pub static $NAME: ec::Curve = ec::Curve { + public_key_len: 1 + (2 * (($bits + 7) / 8)), + elem_scalar_seed_len: ($bits + 7) / 8, + id: $id, + check_private_key_bytes: $check_private_key_bytes, + generate_private_key: $generate_private_key, + public_from_private: $public_from_private, + }; + + fn $check_private_key_bytes(bytes: &[u8]) -> Result<(), error::Unspecified> { + debug_assert_eq!(bytes.len(), $bits / 8); + ec::suite_b::private_key::check_scalar_big_endian_bytes($private_key_ops, bytes) + } + + fn $generate_private_key( + rng: &dyn rand::SecureRandom, + out: &mut [u8], + ) -> Result<(), error::Unspecified> { + ec::suite_b::private_key::generate_private_scalar_bytes($private_key_ops, rng, out) + } + + fn $public_from_private( + public_out: &mut [u8], + private_key: &ec::Seed, + ) -> Result<(), error::Unspecified> { + ec::suite_b::private_key::public_from_private($private_key_ops, public_out, private_key) + } + }; +} + +suite_b_curve!( + P256, + 256, + &ec::suite_b::ops::p256::PRIVATE_KEY_OPS, + ec::CurveID::P256, + p256_check_private_key_bytes, + p256_generate_private_key, + p256_public_from_private +); + +suite_b_curve!( + P384, + 384, + &ec::suite_b::ops::p384::PRIVATE_KEY_OPS, + ec::CurveID::P384, + p384_check_private_key_bytes, + p384_generate_private_key, + p384_public_from_private +); diff --git a/vendor/ring/src/ec/suite_b/ecdh.rs b/vendor/ring/src/ec/suite_b/ecdh.rs new file mode 100644 index 00000000..aae31d23 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ecdh.rs @@ -0,0 +1,236 @@ +// Copyright 2015-2017 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! ECDH key agreement using the P-256 and P-384 curves. + +use super::{ops::*, private_key::*, public_key::*}; +use crate::{agreement, ec, error}; + +/// A key agreement algorithm. +macro_rules! ecdh { + ( $NAME:ident, $curve:expr, $name_str:expr, $private_key_ops:expr, + $public_key_ops:expr, $ecdh:ident ) => { + #[doc = "ECDH using the NSA Suite B"] + #[doc=$name_str] + #[doc = "curve."] + /// + /// Public keys are encoding in uncompressed form using the + /// Octet-String-to-Elliptic-Curve-Point algorithm in + /// [SEC 1: Elliptic Curve Cryptography, Version 2.0]. Public keys are + /// validated during key agreement according to + /// [NIST Special Publication 800-56A, revision 2] and Appendix B.3 of + /// the NSA's [Suite B Implementer's Guide to NIST SP 800-56A]. + /// + /// [SEC 1: Elliptic Curve Cryptography, Version 2.0]: + /// http://www.secg.org/sec1-v2.pdf + /// [NIST Special Publication 800-56A, revision 2]: + /// http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar2.pdf + /// [Suite B Implementer's Guide to NIST SP 800-56A]: + /// https://github.com/briansmith/ring/blob/main/doc/ecdh.pdf + pub static $NAME: agreement::Algorithm = agreement::Algorithm { + curve: $curve, + ecdh: $ecdh, + }; + + fn $ecdh( + out: &mut [u8], + my_private_key: &ec::Seed, + peer_public_key: untrusted::Input, + ) -> Result<(), error::Unspecified> { + ecdh( + $private_key_ops, + $public_key_ops, + out, + my_private_key, + peer_public_key, + ) + } + }; +} + +ecdh!( + ECDH_P256, + &ec::suite_b::curve::P256, + "P-256 (secp256r1)", + &p256::PRIVATE_KEY_OPS, + &p256::PUBLIC_KEY_OPS, + p256_ecdh +); + +ecdh!( + ECDH_P384, + &ec::suite_b::curve::P384, + "P-384 (secp384r1)", + &p384::PRIVATE_KEY_OPS, + &p384::PUBLIC_KEY_OPS, + p384_ecdh +); + +fn ecdh( + private_key_ops: &PrivateKeyOps, + public_key_ops: &PublicKeyOps, + out: &mut [u8], + my_private_key: &ec::Seed, + peer_public_key: untrusted::Input, +) -> Result<(), error::Unspecified> { + // The NIST SP 800-56Ar2 steps are from section 5.7.1.2 Elliptic Curve + // Cryptography Cofactor Diffie-Hellman (ECC CDH) Primitive. + // + // The "NSA Guide" steps are from section 3.1 of the NSA guide, "Ephemeral + // Unified Model." + + // NSA Guide Step 1 is handled separately. + + // NIST SP 800-56Ar2 5.6.2.2.2. + // NSA Guide Step 2. + // + // `parse_uncompressed_point` verifies that the point is not at infinity + // and that it is on the curve, using the Partial Public-Key Validation + // Routine. + let peer_public_key = parse_uncompressed_point(public_key_ops, peer_public_key)?; + + // NIST SP 800-56Ar2 Step 1. + // NSA Guide Step 3 (except point at infinity check). + // + // Note that the cofactor (h) is one since we only support prime-order + // curves, so we can safely ignore the cofactor. + // + // It is impossible for the result to be the point at infinity because our + // private key is in the range [1, n) and the curve has prime order and + // `parse_uncompressed_point` verified that the peer public key is on the + // curve and not at infinity. However, since the standards require the + // check, we do it using `assert!`. + // + // NIST SP 800-56Ar2 defines "Destroy" thusly: "In this Recommendation, to + // destroy is an action applied to a key or a piece of secret data. After + // a key or a piece of secret data is destroyed, no information about its + // value can be recovered." We interpret "destroy" somewhat liberally: we + // assume that since we throw away the values to be destroyed, no + // information about their values can be recovered. This doesn't meet the + // NSA guide's explicit requirement to "zeroize" them though. + // TODO: this only needs common scalar ops + let my_private_key = private_key_as_scalar(private_key_ops, my_private_key); + let product = private_key_ops.point_mul(&my_private_key, &peer_public_key); + + // NIST SP 800-56Ar2 Steps 2, 3, 4, and 5. + // NSA Guide Steps 3 (point at infinity check) and 4. + // + // Again, we have a pretty liberal interpretation of the NIST's spec's + // "Destroy" that doesn't meet the NSA requirement to "zeroize." + // `big_endian_affine_from_jacobian` verifies that the result is not at + // infinity and also does an extra check to verify that the point is on + // the curve. + big_endian_affine_from_jacobian(private_key_ops, Some(out), None, &product) + + // NSA Guide Step 5 & 6 are deferred to the caller. Again, we have a + // pretty liberal interpretation of the NIST's spec's "Destroy" that + // doesn't meet the NSA requirement to "zeroize." +} + +#[cfg(test)] +mod tests { + use super::super::ops; + use crate::{agreement, ec, limb, test}; + + static SUPPORTED_SUITE_B_ALGS: [(&str, &agreement::Algorithm, &ec::Curve, &ops::CommonOps); 2] = [ + ( + "P-256", + &agreement::ECDH_P256, + &super::super::curve::P256, + &super::super::ops::p256::COMMON_OPS, + ), + ( + "P-384", + &agreement::ECDH_P384, + &super::super::curve::P384, + &super::super::ops::p384::COMMON_OPS, + ), + ]; + + #[test] + fn test_agreement_suite_b_ecdh_generate() { + // Generates a string of bytes 0x00...00, which will always result in + // a scalar value of zero. + let random_00 = test::rand::FixedByteRandom { byte: 0x00 }; + + // Generates a string of bytes 0xFF...FF, which will be larger than the + // group order of any curve that is supported. + let random_ff = test::rand::FixedByteRandom { byte: 0xff }; + + for &(_, alg, curve, ops) in SUPPORTED_SUITE_B_ALGS.iter() { + // Test that the private key value zero is rejected and that + // `generate` gives up after a while of only getting zeros. + assert!(agreement::EphemeralPrivateKey::generate(alg, &random_00).is_err()); + + // Test that the private key value larger than the group order is + // rejected and that `generate` gives up after a while of only + // getting values larger than the group order. + assert!(agreement::EphemeralPrivateKey::generate(alg, &random_ff).is_err()); + + // Test that a private key value exactly equal to the group order + // is rejected and that `generate` gives up after a while of only + // getting that value from the PRNG. + let mut n_bytes = [0u8; ec::SCALAR_MAX_BYTES]; + let num_bytes = curve.elem_scalar_seed_len; + limb::big_endian_from_limbs(&ops.n.limbs[..ops.num_limbs], &mut n_bytes[..num_bytes]); + { + let n_bytes = &mut n_bytes[..num_bytes]; + let rng = test::rand::FixedSliceRandom { bytes: n_bytes }; + assert!(agreement::EphemeralPrivateKey::generate(alg, &rng).is_err()); + } + + // Test that a private key value exactly equal to the group order + // minus 1 is accepted. + let mut n_minus_1_bytes = n_bytes; + { + let n_minus_1_bytes = &mut n_minus_1_bytes[..num_bytes]; + n_minus_1_bytes[num_bytes - 1] -= 1; + let rng = test::rand::FixedSliceRandom { + bytes: n_minus_1_bytes, + }; + let key = agreement::EphemeralPrivateKey::generate(alg, &rng).unwrap(); + assert_eq!(&n_minus_1_bytes[..], key.bytes()); + } + + // Test that n + 1 also fails. + let mut n_plus_1_bytes = n_bytes; + { + let n_plus_1_bytes = &mut n_plus_1_bytes[..num_bytes]; + n_plus_1_bytes[num_bytes - 1] += 1; + let rng = test::rand::FixedSliceRandom { + bytes: n_plus_1_bytes, + }; + assert!(agreement::EphemeralPrivateKey::generate(alg, &rng).is_err()); + } + + // Test recovery from initial RNG failure. The first value will be + // n, then n + 1, then zero, the next value will be n - 1, which + // will be accepted. + { + let bytes = [ + &n_bytes[..num_bytes], + &n_plus_1_bytes[..num_bytes], + &[0u8; ec::SCALAR_MAX_BYTES][..num_bytes], + &n_minus_1_bytes[..num_bytes], + ]; + let rng = test::rand::FixedSliceSequenceRandom { + bytes: &bytes, + current: core::cell::UnsafeCell::new(0), + }; + let key = agreement::EphemeralPrivateKey::generate(alg, &rng).unwrap(); + assert_eq!(&n_minus_1_bytes[..num_bytes], key.bytes()); + } + } + } +} diff --git a/vendor/ring/src/ec/suite_b/ecdsa.rs b/vendor/ring/src/ec/suite_b/ecdsa.rs new file mode 100644 index 00000000..274c9916 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ecdsa.rs @@ -0,0 +1,3 @@ +mod digest_scalar; +pub mod signing; +pub mod verification; diff --git a/vendor/ring/src/ec/suite_b/ecdsa/digest_scalar.rs b/vendor/ring/src/ec/suite_b/ecdsa/digest_scalar.rs new file mode 100644 index 00000000..133e7da5 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ecdsa/digest_scalar.rs @@ -0,0 +1,131 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! ECDSA Signatures using the P-256 and P-384 curves. + +use crate::{ + digest, + ec::suite_b::ops::*, + limb::{self, LIMB_BYTES}, +}; + +/// Calculate the digest of `msg` using the digest algorithm `digest_alg`. Then +/// convert the digest to a scalar in the range [0, n) as described in +/// NIST's FIPS 186-4 Section 4.2. Note that this is one of the few cases where +/// a `Scalar` is allowed to have the value zero. +/// +/// NIST's FIPS 186-4 4.2 says "When the length of the output of the hash +/// function is greater than N (i.e., the bit length of q), then the leftmost N +/// bits of the hash function output block shall be used in any calculation +/// using the hash function output during the generation or verification of a +/// digital signature." +/// +/// "Leftmost N bits" means "N most significant bits" because we interpret the +/// digest as a bit-endian encoded integer. +/// +/// The NSA guide instead vaguely suggests that we should convert the digest +/// value to an integer and then reduce it mod `n`. However, real-world +/// implementations (e.g. `digest_to_bn` in OpenSSL and `hashToInt` in Go) do +/// what FIPS 186-4 says to do, not what the NSA guide suggests. +/// +/// Why shifting the value right by at most one bit is sufficient: P-256's `n` +/// has its 256th bit set; i.e. 2**255 < n < 2**256. Once we've truncated the +/// digest to 256 bits and converted it to an integer, it will have a value +/// less than 2**256. If the value is larger than `n` then shifting it one bit +/// right will give a value less than 2**255, which is less than `n`. The +/// analogous argument applies for P-384. However, it does *not* apply in +/// general; for example, it doesn't apply to P-521. +pub fn digest_scalar(ops: &ScalarOps, msg: digest::Digest) -> Scalar { + digest_scalar_(ops, msg.as_ref()) +} + +#[cfg(test)] +pub(crate) fn digest_bytes_scalar(ops: &ScalarOps, digest: &[u8]) -> Scalar { + digest_scalar_(ops, digest) +} + +// This is a separate function solely so that we can test specific digest +// values like all-zero values and values larger than `n`. +fn digest_scalar_(ops: &ScalarOps, digest: &[u8]) -> Scalar { + let cops = ops.common; + let num_limbs = cops.num_limbs; + let digest = if digest.len() > num_limbs * LIMB_BYTES { + &digest[..(num_limbs * LIMB_BYTES)] + } else { + digest + }; + + scalar_parse_big_endian_partially_reduced_variable_consttime( + cops, + limb::AllowZero::Yes, + untrusted::Input::from(digest), + ) + .unwrap() +} + +#[cfg(test)] +mod tests { + use super::digest_bytes_scalar; + use crate::{ + digest, + ec::suite_b::ops::*, + limb::{self, LIMB_BYTES}, + test, + }; + + #[test] + fn test() { + test::run( + test_file!("ecdsa_digest_scalar_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let curve_name = test_case.consume_string("Curve"); + let digest_name = test_case.consume_string("Digest"); + let input = test_case.consume_bytes("Input"); + let output = test_case.consume_bytes("Output"); + + let (ops, digest_alg) = match (curve_name.as_str(), digest_name.as_str()) { + ("P-256", "SHA256") => (&p256::PUBLIC_SCALAR_OPS, &digest::SHA256), + ("P-256", "SHA384") => (&p256::PUBLIC_SCALAR_OPS, &digest::SHA384), + ("P-384", "SHA256") => (&p384::PUBLIC_SCALAR_OPS, &digest::SHA256), + ("P-384", "SHA384") => (&p384::PUBLIC_SCALAR_OPS, &digest::SHA384), + _ => { + panic!("Unsupported curve+digest: {}+{}", curve_name, digest_name); + } + }; + + let num_limbs = ops.public_key_ops.common.num_limbs; + assert_eq!(input.len(), digest_alg.output_len); + assert_eq!( + output.len(), + ops.public_key_ops.common.num_limbs * LIMB_BYTES + ); + + let expected = scalar_parse_big_endian_variable( + ops.public_key_ops.common, + limb::AllowZero::Yes, + untrusted::Input::from(&output), + ) + .unwrap(); + + let actual = digest_bytes_scalar(ops.scalar_ops, &input); + + assert_eq!(actual.limbs[..num_limbs], expected.limbs[..num_limbs]); + + Ok(()) + }, + ); + } +} diff --git a/vendor/ring/src/ec/suite_b/ecdsa/ecPublicKey_p256_pkcs8_v1_template.der b/vendor/ring/src/ec/suite_b/ecdsa/ecPublicKey_p256_pkcs8_v1_template.der new file mode 100644 index 00000000..d5790823 Binary files /dev/null and b/vendor/ring/src/ec/suite_b/ecdsa/ecPublicKey_p256_pkcs8_v1_template.der differ diff --git a/vendor/ring/src/ec/suite_b/ecdsa/ecPublicKey_p384_pkcs8_v1_template.der b/vendor/ring/src/ec/suite_b/ecdsa/ecPublicKey_p384_pkcs8_v1_template.der new file mode 100644 index 00000000..76cc36d4 Binary files /dev/null and b/vendor/ring/src/ec/suite_b/ecdsa/ecPublicKey_p384_pkcs8_v1_template.der differ diff --git a/vendor/ring/src/ec/suite_b/ecdsa/ecdsa_digest_scalar_tests.txt b/vendor/ring/src/ec/suite_b/ecdsa/ecdsa_digest_scalar_tests.txt new file mode 100644 index 00000000..2eaed9ae --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ecdsa/ecdsa_digest_scalar_tests.txt @@ -0,0 +1,82 @@ +# Test vectors for the conversion of digest values to scalars. + +# Minimum Digest Values. + +Curve = P-256 +Digest = SHA256 +Input = 0000000000000000000000000000000000000000000000000000000000000000 +Output = 0000000000000000000000000000000000000000000000000000000000000000 + +Curve = P-256 +Digest = SHA384 +Input = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +Output = 0000000000000000000000000000000000000000000000000000000000000000 + +Curve = P-384 +Digest = SHA256 +Input = 0000000000000000000000000000000000000000000000000000000000000000 +Output = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +Curve = P-384 +Digest = SHA384 +Input = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +Output = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +# The truncated digest value is equal to n - 1 (not possible when digest is +# shorter than the curve's scalars). + +Curve = P-256 +Digest = SHA256 +Input = FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632550 +Output = FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632550 + +Curve = P-256 +Digest = SHA384 +Input = FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63255000000000000000000000000000000000 +Output = FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632550 + +Curve = P-384 +Digest = SHA384 +Input = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52972 +Output = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52972 + +# The truncated digest value is equal to n (not possible when digest is shorter +# than the curve's scalars). + +Curve = P-256 +Digest = SHA256 +Input = FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 +Output = 0000000000000000000000000000000000000000000000000000000000000000 + +Curve = P-256 +Digest = SHA384 +Input = FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC63255100000000000000000000000000000000 +Output = 0000000000000000000000000000000000000000000000000000000000000000 + +Curve = P-384 +Digest = SHA384 +Input = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973 +Output = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + + +# Maximum digest values. + +Curve = P-256 +Digest = SHA256 +Input = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +Output = 00000000FFFFFFFF00000000000000004319055258E8617B0C46353D039CDAAE + +Curve = P-256 +Digest = SHA384 +Input = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +Output = 00000000FFFFFFFF00000000000000004319055258E8617B0C46353D039CDAAE + +Curve = P-384 +Digest = SHA256 +Input = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +Output = 00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + +Curve = P-384 +Digest = SHA384 +Input = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +Output = 000000000000000000000000000000000000000000000000389CB27E0BC8D220A7E5F24DB74F58851313E695333AD68C diff --git a/vendor/ring/src/ec/suite_b/ecdsa/ecdsa_sign_asn1_tests.txt b/vendor/ring/src/ec/suite_b/ecdsa/ecdsa_sign_asn1_tests.txt new file mode 100644 index 00000000..c11195ac --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ecdsa/ecdsa_sign_asn1_tests.txt @@ -0,0 +1,18 @@ +# Tests from NIST CAVP 186-4 ECDSA2VS Test Vectors, Signature Generation Test +# http://csrc.nist.gov/groups/STM/cavp/documents/dss/186-3ecdsatestvectors.zip +# +# CAVS 11.2 +# "SigVer" information for "ecdsa_values" +# Curves/SHAs selected: P-224,SHA-224 P-224,SHA-256 P-224,SHA-384 P-224,SHA-512 P-256,SHA-224 P-256,SHA-256 P-256,SHA-384 P-256,SHA-512 P-384,SHA-224 P-384,SHA-256 P-384,SHA-384 P-384,SHA-512 P-521,SHA-224 P-521,SHA-256 P-521,SHA-384 P-521,SHA-512 K-233,SHA-224 K-233,SHA-256 K-233,SHA-384 K-233,SHA-512 K-283,SHA-224 K-283,SHA-256 K-283,SHA-384 K-283,SHA-512 K-409,SHA-224 K-409,SHA-256 K-409,SHA-384 K-409,SHA-512 K-571,SHA-224 K-571,SHA-256 K-571,SHA-384 K-571,SHA-512 B-233,SHA-224 B-233,SHA-256 B-233,SHA-384 B-233,SHA-512 B-283,SHA-224 B-283,SHA-256 B-283,SHA-384 B-283,SHA-512 B-409,SHA-224 B-409,SHA-256 B-409,SHA-384 B-409,SHA-512 BB-571,SHA-224 B-571,SHA-256 B-571,SHA-384 B-571,SHA-512 +# Generated on Tue Aug 16 15:27:42 2011 + +# [P-256,SHA-256] + +Curve = P-256 +Digest = SHA256 +Msg = 5905238877c77421f73e43ee3da6f2d9e2ccad5fc942dcec0cbd25482935faaf416983fe165b1a045ee2bcd2e6dca3bdf46c4310a7461f9a37960ca672d3feb5473e253605fb1ddfd28065b53cb5858a8ad28175bf9bd386a5e471ea7a65c17cc934a9d791e91491eb3754d03799790fe2d308d16146d5c9b0d0debd97d79ce8 +d = 519b423d715f8b581f4fa8ee59f4771a5b44c8130b4e3eacca54a56dda72b464 +Q = 041ccbe91c075fc7f4f033bfa248db8fccd3565de94bbfb12f3c59ff46c271bf83ce4014c68811f9a21a1fdb2c0e6113e06db7ca93b7404e78dc7ccd5ca89a4ca9 +k = 94a1bbb14b906a61a280f245f9e93c7f3b4a6247824f5d33b9670787642a68de +Sig = 3046022100f3ac8061b514795b8843e3d6629527ed2afd6b1f6a555a7acabb5e6f79c8c2ac0221008bf77819ca05a6b2786c76262bf7371cef97b218e96f175a3ccdda2acc058903 + diff --git a/vendor/ring/src/ec/suite_b/ecdsa/ecdsa_sign_fixed_tests.txt b/vendor/ring/src/ec/suite_b/ecdsa/ecdsa_sign_fixed_tests.txt new file mode 100644 index 00000000..c0de4742 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ecdsa/ecdsa_sign_fixed_tests.txt @@ -0,0 +1,251 @@ +# Tests from NIST CAVP 186-4 ECDSA2VS Test Vectors, Signature Generation Test +# http://csrc.nist.gov/groups/STM/cavp/documents/dss/186-3ecdsatestvectors.zip +# +# CAVS 11.2 +# "SigVer" information for "ecdsa_values" +# Curves/SHAs selected: P-224,SHA-224 P-224,SHA-256 P-224,SHA-384 P-224,SHA-512 P-256,SHA-224 P-256,SHA-256 P-256,SHA-384 P-256,SHA-512 P-384,SHA-224 P-384,SHA-256 P-384,SHA-384 P-384,SHA-512 P-521,SHA-224 P-521,SHA-256 P-521,SHA-384 P-521,SHA-512 K-233,SHA-224 K-233,SHA-256 K-233,SHA-384 K-233,SHA-512 K-283,SHA-224 K-283,SHA-256 K-283,SHA-384 K-283,SHA-512 K-409,SHA-224 K-409,SHA-256 K-409,SHA-384 K-409,SHA-512 K-571,SHA-224 K-571,SHA-256 K-571,SHA-384 K-571,SHA-512 B-233,SHA-224 B-233,SHA-256 B-233,SHA-384 B-233,SHA-512 B-283,SHA-224 B-283,SHA-256 B-283,SHA-384 B-283,SHA-512 B-409,SHA-224 B-409,SHA-256 B-409,SHA-384 B-409,SHA-512 BB-571,SHA-224 B-571,SHA-256 B-571,SHA-384 B-571,SHA-512 +# Generated on Tue Aug 16 15:27:42 2011 + +# [P-256,SHA-256] + +Curve = P-256 +Digest = SHA256 +Msg = 5905238877c77421f73e43ee3da6f2d9e2ccad5fc942dcec0cbd25482935faaf416983fe165b1a045ee2bcd2e6dca3bdf46c4310a7461f9a37960ca672d3feb5473e253605fb1ddfd28065b53cb5858a8ad28175bf9bd386a5e471ea7a65c17cc934a9d791e91491eb3754d03799790fe2d308d16146d5c9b0d0debd97d79ce8 +d = 519b423d715f8b581f4fa8ee59f4771a5b44c8130b4e3eacca54a56dda72b464 +Q = 041ccbe91c075fc7f4f033bfa248db8fccd3565de94bbfb12f3c59ff46c271bf83ce4014c68811f9a21a1fdb2c0e6113e06db7ca93b7404e78dc7ccd5ca89a4ca9 +k = 94a1bbb14b906a61a280f245f9e93c7f3b4a6247824f5d33b9670787642a68de +Sig = f3ac8061b514795b8843e3d6629527ed2afd6b1f6a555a7acabb5e6f79c8c2ac8bf77819ca05a6b2786c76262bf7371cef97b218e96f175a3ccdda2acc058903 + +Curve = P-256 +Digest = SHA256 +Msg = c35e2f092553c55772926bdbe87c9796827d17024dbb9233a545366e2e5987dd344deb72df987144b8c6c43bc41b654b94cc856e16b96d7a821c8ec039b503e3d86728c494a967d83011a0e090b5d54cd47f4e366c0912bc808fbb2ea96efac88fb3ebec9342738e225f7c7c2b011ce375b56621a20642b4d36e060db4524af1 +d = 0f56db78ca460b055c500064824bed999a25aaf48ebb519ac201537b85479813 +Q = 04e266ddfdc12668db30d4ca3e8f7749432c416044f2d2b8c10bf3d4012aeffa8abfa86404a2e9ffe67d47c587ef7a97a7f456b863b4d02cfc6928973ab5b1cb39 +k = 6d3e71882c3b83b156bb14e0ab184aa9fb728068d3ae9fac421187ae0b2f34c6 +Sig = 976d3a4e9d23326dc0baa9fa560b7c4e53f42864f508483a6473b6a11079b2db1b766e9ceb71ba6c01dcd46e0af462cd4cfa652ae5017d4555b8eeefe36e1932 + +Curve = P-256 +Digest = SHA256 +Msg = 3c054e333a94259c36af09ab5b4ff9beb3492f8d5b4282d16801daccb29f70fe61a0b37ffef5c04cd1b70e85b1f549a1c4dc672985e50f43ea037efa9964f096b5f62f7ffdf8d6bfb2cc859558f5a393cb949dbd48f269343b5263dcdb9c556eca074f2e98e6d94c2c29a677afaf806edf79b15a3fcd46e7067b7669f83188ee +d = e283871239837e13b95f789e6e1af63bf61c918c992e62bca040d64cad1fc2ef +Q = 0474ccd8a62fba0e667c50929a53f78c21b8ff0c3c737b0b40b1750b2302b0bde829074e21f3a0ef88b9efdf10d06aa4c295cc1671f758ca0e4cd108803d0f2614 +k = ad5e887eb2b380b8d8280ad6e5ff8a60f4d26243e0124c2f31a297b5d0835de2 +Sig = 35fb60f5ca0f3ca08542fb3cc641c8263a2cab7a90ee6a5e1583fac2bb6f6bd1ee59d81bc9db1055cc0ed97b159d8784af04e98511d0a9a407b99bb292572e96 + +Curve = P-256 +Digest = SHA256 +Msg = 0989122410d522af64ceb07da2c865219046b4c3d9d99b01278c07ff63eaf1039cb787ae9e2dd46436cc0415f280c562bebb83a23e639e476a02ec8cff7ea06cd12c86dcc3adefbf1a9e9a9b6646c7599ec631b0da9a60debeb9b3e19324977f3b4f36892c8a38671c8e1cc8e50fcd50f9e51deaf98272f9266fc702e4e57c30 +d = a3d2d3b7596f6592ce98b4bfe10d41837f10027a90d7bb75349490018cf72d07 +Q = 04322f80371bf6e044bc49391d97c1714ab87f990b949bc178cb7c43b7c22d89e13c15d54a5cc6b9f09de8457e873eb3deb1fceb54b0b295da6050294fae7fd999 +k = 24fc90e1da13f17ef9fe84cc96b9471ed1aaac17e3a4bae33a115df4e5834f18 +Sig = d7c562370af617b581c84a2468cc8bd50bb1cbf322de41b7887ce07c0e5884cab46d9f2d8c4bf83546ff178f1d78937c008d64e8ecc5cbb825cb21d94d670d89 + +Curve = P-256 +Digest = SHA256 +Msg = dc66e39f9bbfd9865318531ffe9207f934fa615a5b285708a5e9c46b7775150e818d7f24d2a123df3672fff2094e3fd3df6fbe259e3989dd5edfcccbe7d45e26a775a5c4329a084f057c42c13f3248e3fd6f0c76678f890f513c32292dd306eaa84a59abe34b16cb5e38d0e885525d10336ca443e1682aa04a7af832b0eee4e7 +d = 53a0e8a8fe93db01e7ae94e1a9882a102ebd079b3a535827d583626c272d280d +Q = 041bcec4570e1ec2436596b8ded58f60c3b1ebc6a403bc5543040ba829630572448af62a4c683f096b28558320737bf83b9959a46ad2521004ef74cf85e67494e1 +k = 5d833e8d24cc7a402d7ee7ec852a3587cddeb48358cea71b0bedb8fabe84e0c4 +Sig = 18caaf7b663507a8bcd992b836dec9dc5703c080af5e51dfa3a9a7c38718260477c68928ac3b88d985fb43fb615fb7ff45c18ba5c81af796c613dfa98352d29c + +Curve = P-256 +Digest = SHA256 +Msg = 600974e7d8c5508e2c1aab0783ad0d7c4494ab2b4da265c2fe496421c4df238b0be25f25659157c8a225fb03953607f7df996acfd402f147e37aee2f1693e3bf1c35eab3ae360a2bd91d04622ea47f83d863d2dfecb618e8b8bdc39e17d15d672eee03bb4ce2cc5cf6b217e5faf3f336fdd87d972d3a8b8a593ba85955cc9d71 +d = 4af107e8e2194c830ffb712a65511bc9186a133007855b49ab4b3833aefc4a1d +Q = 04a32e50be3dae2c8ba3f5e4bdae14cf7645420d425ead94036c22dd6c4fc59e00d623bf641160c289d6742c6257ae6ba574446dd1d0e74db3aaa80900b78d4ae9 +k = e18f96f84dfa2fd3cdfaec9159d4c338cd54ad314134f0b31e20591fc238d0ab +Sig = 8524c5024e2d9a73bde8c72d9129f57873bbad0ed05215a372a84fdbc78f2e68d18c2caf3b1072f87064ec5e8953f51301cada03469c640244760328eb5a05cb + +Curve = P-256 +Digest = SHA256 +Msg = dfa6cb9b39adda6c74cc8b2a8b53a12c499ab9dee01b4123642b4f11af336a91a5c9ce0520eb2395a6190ecbf6169c4cba81941de8e76c9c908eb843b98ce95e0da29c5d4388040264e05e07030a577cc5d176387154eabae2af52a83e85c61c7c61da930c9b19e45d7e34c8516dc3c238fddd6e450a77455d534c48a152010b +d = 78dfaa09f1076850b3e206e477494cddcfb822aaa0128475053592c48ebaf4ab +Q = 048bcfe2a721ca6d753968f564ec4315be4857e28bef1908f61a366b1f03c974790f67576a30b8e20d4232d8530b52fb4c89cbc589ede291e499ddd15fe870ab96 +k = 295544dbb2da3da170741c9b2c6551d40af7ed4e891445f11a02b66a5c258a77 +Sig = c5a186d72df452015480f7f338970bfe825087f05c0088d95305f87aacc9b25484a58f9e9d9e735344b316b1aa1ab5185665b85147dc82d92e969d7bee31ca30 + +Curve = P-256 +Digest = SHA256 +Msg = 51d2547cbff92431174aa7fc7302139519d98071c755ff1c92e4694b58587ea560f72f32fc6dd4dee7d22bb7387381d0256e2862d0644cdf2c277c5d740fa089830eb52bf79d1e75b8596ecf0ea58a0b9df61e0c9754bfcd62efab6ea1bd216bf181c5593da79f10135a9bc6e164f1854bc8859734341aad237ba29a81a3fc8b +d = 80e692e3eb9fcd8c7d44e7de9f7a5952686407f90025a1d87e52c7096a62618a +Q = 04a88bc8430279c8c0400a77d751f26c0abc93e5de4ad9a4166357952fe041e7672d365a1eef25ead579cc9a069b6abc1b16b81c35f18785ce26a10ba6d1381185 +k = 7c80fd66d62cc076cef2d030c17c0a69c99611549cb32c4ff662475adbe84b22 +Sig = 9d0c6afb6df3bced455b459cc21387e14929392664bb8741a3693a1795ca6902d7f9ddd191f1f412869429209ee3814c75c72fa46a9cccf804a2f5cc0b7e739f + +Curve = P-256 +Digest = SHA256 +Msg = 558c2ac13026402bad4a0a83ebc9468e50f7ffab06d6f981e5db1d082098065bcff6f21a7a74558b1e8612914b8b5a0aa28ed5b574c36ac4ea5868432a62bb8ef0695d27c1e3ceaf75c7b251c65ddb268696f07c16d2767973d85beb443f211e6445e7fe5d46f0dce70d58a4cd9fe70688c035688ea8c6baec65a5fc7e2c93e8 +d = 5e666c0db0214c3b627a8e48541cc84a8b6fd15f300da4dff5d18aec6c55b881 +Q = 041bc487570f040dc94196c9befe8ab2b6de77208b1f38bdaae28f9645c4d2bc3aec81602abd8345e71867c8210313737865b8aa186851e1b48eaca140320f5d8f +k = 2e7625a48874d86c9e467f890aaa7cd6ebdf71c0102bfdcfa24565d6af3fdce9 +Sig = 2f9e2b4e9f747c657f705bffd124ee178bbc5391c86d056717b140c153570fd9f5413bfd85949da8d83de83ab0d19b2986613e224d1901d76919de23ccd03199 + +Curve = P-256 +Digest = SHA256 +Msg = 4d55c99ef6bd54621662c3d110c3cb627c03d6311393b264ab97b90a4b15214a5593ba2510a53d63fb34be251facb697c973e11b665cb7920f1684b0031b4dd370cb927ca7168b0bf8ad285e05e9e31e34bc24024739fdc10b78586f29eff94412034e3b606ed850ec2c1900e8e68151fc4aee5adebb066eb6da4eaa5681378e +d = f73f455271c877c4d5334627e37c278f68d143014b0a05aa62f308b2101c5308 +Q = 04b8188bd68701fc396dab53125d4d28ea33a91daf6d21485f4770f6ea8c565dde423f058810f277f8fe076f6db56e9285a1bf2c2a1dae145095edd9c04970bc4a +k = 62f8665fd6e26b3fa069e85281777a9b1f0dfd2c0b9f54a086d0c109ff9fd615 +Sig = 1cc628533d0004b2b20e7f4baad0b8bb5e0673db159bbccf92491aef61fc9620880e0bbf82a8cf818ed46ba03cf0fc6c898e36fca36cc7fdb1d2db7503634430 + +Curve = P-256 +Digest = SHA256 +Msg = f8248ad47d97c18c984f1f5c10950dc1404713c56b6ea397e01e6dd925e903b4fadfe2c9e877169e71ce3c7fe5ce70ee4255d9cdc26f6943bf48687874de64f6cf30a012512e787b88059bbf561162bdcc23a3742c835ac144cc14167b1bd6727e940540a9c99f3cbb41fb1dcb00d76dda04995847c657f4c19d303eb09eb48a +d = b20d705d9bd7c2b8dc60393a5357f632990e599a0975573ac67fd89b49187906 +Q = 0451f99d2d52d4a6e734484a018b7ca2f895c2929b6754a3a03224d07ae61166ce4737da963c6ef7247fb88d19f9b0c667cac7fe12837fdab88c66f10d3c14cad1 +k = 72b656f6b35b9ccbc712c9f1f3b1a14cbbebaec41c4bca8da18f492a062d6f6f +Sig = 9886ae46c1415c3bc959e82b760ad760aab66885a84e620aa339fdf102465c422bf3a80bc04faa35ebecc0f4864ac02d349f6f126e0f988501b8d3075409a26c + +Curve = P-256 +Digest = SHA256 +Msg = 3b6ee2425940b3d240d35b97b6dcd61ed3423d8e71a0ada35d47b322d17b35ea0472f35edd1d252f87b8b65ef4b716669fc9ac28b00d34a9d66ad118c9d94e7f46d0b4f6c2b2d339fd6bcd351241a387cc82609057048c12c4ec3d85c661975c45b300cb96930d89370a327c98b67defaa89497aa8ef994c77f1130f752f94a4 +d = d4234bebfbc821050341a37e1240efe5e33763cbbb2ef76a1c79e24724e5a5e7 +Q = 048fb287f0202ad57ae841aea35f29b2e1d53e196d0ddd9aec24813d64c0922fb71f6daff1aa2dd2d6d3741623eecb5e7b612997a1039aab2e5cf2de969cfea573 +k = d926fe10f1bfd9855610f4f5a3d666b1a149344057e35537373372ead8b1a778 +Sig = 490efd106be11fc365c7467eb89b8d39e15d65175356775deab211163c2504cb644300fc0da4d40fb8c6ead510d14f0bd4e1321a469e9c0a581464c7186b7aa7 + +Curve = P-256 +Digest = SHA256 +Msg = c5204b81ec0a4df5b7e9fda3dc245f98082ae7f4efe81998dcaa286bd4507ca840a53d21b01e904f55e38f78c3757d5a5a4a44b1d5d4e480be3afb5b394a5d2840af42b1b4083d40afbfe22d702f370d32dbfd392e128ea4724d66a3701da41ae2f03bb4d91bb946c7969404cb544f71eb7a49eb4c4ec55799bda1eb545143a7 +d = b58f5211dff440626bb56d0ad483193d606cf21f36d9830543327292f4d25d8c +Q = 0468229b48c2fe19d3db034e4c15077eb7471a66031f28a980821873915298ba76303e8ee3742a893f78b810991da697083dd8f11128c47651c27a56740a80c24c +k = e158bf4a2d19a99149d9cdb879294ccb7aaeae03d75ddd616ef8ae51a6dc1071 +Sig = e67a9717ccf96841489d6541f4f6adb12d17b59a6bef847b6183b8fcf16a32eb9ae6ba6d637706849a6a9fc388cf0232d85c26ea0d1fe7437adb48de58364333 + +Curve = P-256 +Digest = SHA256 +Msg = 72e81fe221fb402148d8b7ab03549f1180bcc03d41ca59d7653801f0ba853add1f6d29edd7f9abc621b2d548f8dbf8979bd16608d2d8fc3260b4ebc0dd42482481d548c7075711b5759649c41f439fad69954956c9326841ea6492956829f9e0dc789f73633b40f6ac77bcae6dfc7930cfe89e526d1684365c5b0be2437fdb01 +d = 54c066711cdb061eda07e5275f7e95a9962c6764b84f6f1f3ab5a588e0a2afb1 +Q = 040a7dbb8bf50cb605eb2268b081f26d6b08e012f952c4b70a5a1e6e7d46af98bbf26dd7d799930062480849962ccf5004edcfd307c044f4e8f667c9baa834eeae +k = 646fe933e96c3b8f9f507498e907fdd201f08478d0202c752a7c2cfebf4d061a +Sig = b53ce4da1aa7c0dc77a1896ab716b921499aed78df725b1504aba1597ba0c64bd7c246dc7ad0e67700c373edcfdd1c0a0495fc954549ad579df6ed1438840851 + +Curve = P-256 +Digest = SHA256 +Msg = 21188c3edd5de088dacc1076b9e1bcecd79de1003c2414c3866173054dc82dde85169baa77993adb20c269f60a5226111828578bcc7c29e6e8d2dae81806152c8ba0c6ada1986a1983ebeec1473a73a04795b6319d48662d40881c1723a706f516fe75300f92408aa1dc6ae4288d2046f23c1aa2e54b7fb6448a0da922bd7f34 +d = 34fa4682bf6cb5b16783adcd18f0e6879b92185f76d7c920409f904f522db4b1 +Q = 04105d22d9c626520faca13e7ced382dcbe93498315f00cc0ac39c4821d0d737376c47f3cbbfa97dfcebe16270b8c7d5d3a5900b888c42520d751e8faf3b401ef4 +k = a6f463ee72c9492bc792fe98163112837aebd07bab7a84aaed05be64db3086f4 +Sig = 542c40a18140a6266d6f0286e24e9a7bad7650e72ef0e2131e629c076d9626634f7f65305e24a6bbb5cff714ba8f5a2cee5bdc89ba8d75dcbf21966ce38eb66f + +# [P-384,SHA-384] + +Curve = P-384 +Digest = SHA384 +Msg = 6b45d88037392e1371d9fd1cd174e9c1838d11c3d6133dc17e65fa0c485dcca9f52d41b60161246039e42ec784d49400bffdb51459f5de654091301a09378f93464d52118b48d44b30d781eb1dbed09da11fb4c818dbd442d161aba4b9edc79f05e4b7e401651395b53bd8b5bd3f2aaa6a00877fa9b45cadb8e648550b4c6cbe +d = 201b432d8df14324182d6261db3e4b3f46a8284482d52e370da41e6cbdf45ec2952f5db7ccbce3bc29449f4fb080ac97 +Q = 04c2b47944fb5de342d03285880177ca5f7d0f2fcad7678cce4229d6e1932fcac11bfc3c3e97d942a3c56bf34123013dbf37257906a8223866eda0743c519616a76a758ae58aee81c5fd35fbf3a855b7754a36d4a0672df95d6c44a81cf7620c2d +k = dcedabf85978e090f733c6e16646fa34df9ded6e5ce28c6676a00f58a25283db8885e16ce5bf97f917c81e1f25c9c771 +Sig = 50835a9251bad008106177ef004b091a1e4235cd0da84fff54542b0ed755c1d6f251609d14ecf18f9e1ddfe69b946e320475f3d30c6463b646e8d3bf2455830314611cbde404be518b14464fdb195fdcc92eb222e61f426a4a592c00a6a89721 + +Curve = P-384 +Digest = SHA384 +Msg = d768f41e6e8ec2125d6cf5786d1ba96668ac6566c5cdbbe407f7f2051f3ad6b1acdbfe13edf0d0a86fa110f405406b69085219b5a234ebdb93153241f785d45811b3540d1c37424cc7194424787a51b79679266484c787fb1ded6d1a26b9567d5ea68f04be416caf3be9bd2cafa208fe2a9e234d3ae557c65d3fe6da4cb48da4 +d = 23d9f4ea6d87b7d6163d64256e3449255db14786401a51daa7847161bf56d494325ad2ac8ba928394e01061d882c3528 +Q = 045d42d6301c54a438f65970bae2a098cbc567e98840006e356221966c86d82e8eca515bca850eaa3cd41f175f03a0cbfd4aef5a0ceece95d382bd70ab5ce1cb77408bae42b51a08816d5e5e1d3da8c18fcc95564a752730b0aabea983ccea4e2e +k = 67ba379366049008593eac124f59ab017358892ee0c063d38f3758bb849fd25d867c3561563cac1532a323b228dc0890 +Sig = fb318f4cb1276282bb43f733a7fb7c567ce94f4d02924fc758635ab2d1107108bf159b85db080cdc3b30fbb5400016f3588e3d7af5da03eae255ecb1813100d95edc243476b724b22db8e85377660d7645ddc1c2c2ee4eaea8b683dbe22f86ca + +Curve = P-384 +Digest = SHA384 +Msg = 6af6652e92a17b7898e40b6776fabaf0d74cf88d8f0ebfa6088309cbe09fac472eeac2aa8ea96b8c12e993d14c93f8ef4e8b547afe7ae5e4f3973170b35deb3239898918c70c1056332c3f894cd643d2d9b93c2561aac069577bbab45803250a31cd62226cab94d8cba7261dce9fe88c210c212b54329d76a273522c8ba91ddf +d = b5f670e98d8befc46f6f51fb2997069550c2a52ebfb4e5e25dd905352d9ef89eed5c2ecd16521853aadb1b52b8c42ae6 +Q = 0444ffb2a3a95e12d87c72b5ea0a8a7cb89f56b3bd46342b2303608d7216301c21b5d2921d80b6628dc512ccb84e2fc278e4c1002f1828abaec768cadcb7cf42fbf93b1709ccae6df5b134c41fae2b9a188bfbe1eccff0bd348517d7227f2071a6 +k = 229e67638f712f57bea4c2b02279d5ccad1e7c9e201c77f6f01aeb81ea90e62b44b2d2107fd66d35e56608fff65e28e4 +Sig = b11db592e4ebc75b6472b879b1d8ce57452c615aef20f67a280f8bca9b11a30ad4ac9d69541258c7dd5d0b4ab8dd7d494eb51db8004e46d438359abf060a9444616cb46b4f99c9a05b53ba6df02e914c9c0b6cc3a9791d804d2e4c0984dab1cc + +Curve = P-384 +Digest = SHA384 +Msg = b96d74b2265dd895d94e25092fb9262dc4f2f7a328a3c0c3da134b2d0a4e2058ca994e3445c5ff4f812738e1b0c0f7a126486942a12e674a21f22d0886d68df2375f41685d694d487a718024933a7c4306f33f1a4267d469c530b0fed4e7dea520a19dd68bf0203cc87cad652260ed43b7b23f6ed140d3085875190191a0381a +d = de5975d8932533f092e76295ed6b23f10fc5fba48bfb82c6cc714826baf0126813247f8bd51d5738503654ab22459976 +Q = 04f1fabafc01fec7e96d982528d9ef3a2a18b7fe8ae0fa0673977341c7ae4ae8d8d3d67420343d013a984f5f61da29ae381a31cf902c46343d01b2ebb614bc789c313b5f91f9302ad9418e9c797563e2fa3d44500f47b4e26ad8fdec1a816d1dcf +k = fc5940e661542436f9265c34bce407eff6364bd471aa79b90c906d923e15c9ed96eea4e86f3238ea86161d13b7d9359d +Sig = c2fbdd6a56789024082173725d797ef9fd6accb6ae664b7260f9e83cb8ab2490428c8b9c52e153612295432fec4d59cd8056c5bb57f41f73082888b234fcda320a33250b5da012ba1fdb4924355ae679012d81d2c08fc0f8634c708a4833232f + +Curve = P-384 +Digest = SHA384 +Msg = 7cec7480a037ff40c232c1d2d6e8cd4c080bbeecdaf3886fccc9f129bb6d202c316eca76c8ad4e76079afe622f833a16f4907e817260c1fa68b10c7a151a37eb8c036b057ed4652c353db4b4a34b37c9a2b300fb5f5fcfb8aa8adae13db359160f70a9241546140e550af0073468683377e6771b6508327408c245d78911c2cc +d = 11e0d470dc31fab0f5722f87b74a6c8d7414115e58ceb38bfcdced367beac3adbf1fe9ba5a04f72e978b1eb54597eabc +Q = 041950166989164cbfd97968c7e8adb6fbca1873ebef811ea259eb48b7d584627f0e6d6c64defe23cbc95236505a252aa141ef424b5cb076d4e32accd9250ea75fcf4ffd81814040c050d58c0a29b06be11edf67c911b403e418b7277417e52906 +k = e56904028226eb04f8d071e3f9cefec91075a81ca0fa87b44cae148fe1ce9827b5d1910db2336d0eb9813ddba3e4d7b5 +Sig = c38ef30f55624e8935680c29f8c24824877cf48ffc0ef015e62de1068893353030d1193bf9d34237d7ce6ba92c98b0fe651b8c3d5c9d5b936d300802a06d82ad54f7b1ba4327b2f031c0c5b0cb215ad4354edc7f932d934e877dfa1cf51b13fe + +Curve = P-384 +Digest = SHA384 +Msg = 00ce978603229710345c9ad7c1c2dba3596b196528eea25bd822d43ca8f76a024e29217703dd0652c8a615284fc3edcc1c5ad1c8d5a8521c8e104c016a24e50c2e25066dcb56596f913b872767e3627aa3e55ec812e9fdac7c2f1beade83aef093e24c9c953982adf431a776880ae4583be158e11cdab1cbca3ad3a66900213d +d = 5c6bbf9fbcbb7b97c9535f57b431ed1ccae1945b7e8a4f1b032016b07810bd24a9e20055c0e9306650df59ef7e2cd8c2 +Q = 042e01c5b59e619e00b79060a1e8ef695472e23bf9a511fc3d5ed77a334a242557098e40972713732c5291c97adf9cf2cf563e3fe4ad807e803b9e961b08da4dde4cea8925649da0d93221ce4cdceabc6a1db7612180a8c6bef3579c65539b97e9 +k = 03d23f1277b949cb6380211ad9d338e6f76c3eedac95989b91d0243cfb734a54b19bca45a5d13d6a4b9f815d919eea77 +Sig = abab65308f0b79c4f3a9ff28dd490acb0c320434094cef93e75adfe17e5820dc1f77544cfaaacdc8cf9ac8b38e174bef11b783d879a6de054b316af7d56e526c3dce96c85289122e3ad927cfa77bfc50b4a96c97f85b1b8221be2df083ff58fb + +Curve = P-384 +Digest = SHA384 +Msg = 54a255c18692c6162a46add176a0ae8361dcb8948f092d8d7bac83e160431794d3b9812849bf1994bcdcfba56e8540c8a9ee5b93414548f2a653191b6bb28bda8dc70d45cc1b92a489f58a2d54f85766cb3c90de7dd88e690d8ebc9a79987eee1989df35af5e35522f83d85c48dda89863171c8b0bf4853ae28c2ac45c764416 +d = ffc7dedeff8343721f72046bc3c126626c177b0e48e247f44fd61f8469d4d5f0a74147fabaa334495cc1f986ebc5f0b1 +Q = 0451c78c979452edd53b563f63eb3e854a5b23e87f1b2103942b65f77d024471f75c8ce1cc0dfef83292b368112aa5126e313e6aaf09caa3ba30f13072b2134878f14a4a01ee86326cccbff3d079b4df097dc57985e8c8c834a10cb9d766169366 +k = c3de91dbe4f777698773da70dd610ef1a7efe4dc00d734399c7dd100728006a502822a5a7ff9129ffd8adf6c1fc1211a +Sig = f4f477855819ad8b1763f53691b76afbc4a31a638b1e08c293f9bcd55decf797f9913ca128d4b45b2e2ea3e82c6cf5657c26be29569ef95480a6d0c1af49dc10a51a0a8931345e48c0c39498bfb94d62962980b56143a7b41a2fddc8794c1b7f + +Curve = P-384 +Digest = SHA384 +Msg = 692a78f90d4f9d5aee5da536314a78d68c1feabbfe5d1ccea7f6059a66c4b310f8051c411c409ccf6e19a0cbd8b8e100c48317fe8c6d4f8a638b9551ce7ee178020f04f7da3001a0e6855225fb3c9b375e4ed964588a1a41a095f3f476c42d52ffd23ce1702c93b56d4425d3befcf75d0951b6fd5c05b05455bdaf205fe70ca2 +d = adca364ef144a21df64b163615e8349cf74ee9dbf728104215c532073a7f74e2f67385779f7f74ab344cc3c7da061cf6 +Q = 04ef948daae68242330a7358ef73f23b56c07e37126266db3fa6eea233a04a9b3e4915233dd6754427cd4b71b75854077d009453ef1828eaff9e17c856d4fc1895ab60051312c3e1db1e3766566438b2990cbf9945c2545619e3e0145bc6a79004 +k = a2da3fae2e6da3cf11b49861afb34fba357fea89f54b35ce5ed7434ae09103fe53e2be75b93fc579fedf919f6d5e407e +Sig = dda994b9c428b57e9f8bbaebba0d682e3aac6ed828e3a1e99a7fc4c804bff8df151137f539c7389d80e23d9f3ee497bfa0d6b10ceffd0e1b29cf784476f9173ba6ecd2cfc7929725f2d6e24e0db5a4721683640eaa2bbe151fb57560f9ce594b + +Curve = P-384 +Digest = SHA384 +Msg = 3b309bb912ab2a51681451ed18ad79e95d968abc35423a67036a02af92f575a0c89f1b668afe22c7037ad1199e757a8f06b281c33e9a40bab69c9874e0bb680b905d909b9dc24a9fe89bb3d7f7d47082b25093c59754f8c19d1f81f30334a8cdd50a3cb72f96d4b3c305e60a439a7e93aeb640dd3c8de37d63c60fb469c2d3ed +d = 39bea008ec8a217866dcbdb1b93da34d1d3e851d011df9ef44b7828b3453a54aa70f1df9932170804eacd207e4f7e91d +Q = 045709ec4305a9c3271c304face6c148142490b827a73a4c17affcfd01fffd7eaa65d2fdedfa2419fc64ed910823513fafb083cda1cf3be6371b6c06e729ea6299213428db57119347247ec1fcd44204386cc0bca3f452d9d864b39efbfc89d6b2 +k = 3c90cc7b6984056f570542a51cbe497ce4c11aeae8fc35e8fd6a0d9adeb650e8644f9d1d5e4341b5adc81e27f284c08f +Sig = d13646895afb1bfd1953551bb922809c95ad65d6abe94eb3719c899aa1f6dba6b01222c7f283900fe98628b7597b6ea64a9a38afda04c0a6b0058943b679bd02205b14d0f3d49b8f31aac289129780cdb1c555def8c3f9106b478729e0c7efaa + +Curve = P-384 +Digest = SHA384 +Msg = f072b72b8783289463da118613c43824d11441dba364c289de03ff5fab3a6f60e85957d8ff211f1cb62fa90216fb727106f692e5ae0844b11b710e5a12c69df3ed895b94e8769ecd15ff433762d6e8e94d8e6a72645b213b0231344e2c968056766c5dd6b5a5df41971858b85e99afbf859400f839b42cd129068efabeea4a26 +d = e849cf948b241362e3e20c458b52df044f2a72deb0f41c1bb0673e7c04cdd70811215059032b5ca3cc69c345dcce4cf7 +Q = 0406c037a0cbf43fdf335dff33de06d34348405353f9fdf2ce1361efba30fb204aea9dbd2e30da0a10fd2d876188371be6360d38f3940e34679204b98fbf70b8a4d97f25443e46d0807ab634ed5891ad864dd7703557aa933cd380e26eea662a43 +k = 32386b2593c85e877b70e5e5495936f65dc49553caef1aa6cc14d9cd370c442a0ccfab4c0da9ec311b67913b1b575a9d +Sig = 5886078d3495767e330c7507b7ca0fa07a50e59912a416d89f0ab1aa4e88153d6eaf00882d1b4aa64153153352d853b52cc10023bf1bf8ccfd14b06b82cc2114449a352389c8ff9f6f78cdc4e32bde69f3869da0e17f691b329682ae7a36e1aa + +Curve = P-384 +Digest = SHA384 +Msg = cf4945350be8133b575c4ad6c9585e0b83ff1ed17989b6cd6c71b41b5264e828b4e115995b1ae77528e7e9002ac1b5669064442645929f9d7dd70927cb93f95edeb73e8624f4bc897ec4c2c7581cb626916f29b2d6e6c2fba8c59a71e30754b459d81b912a12798182bcff4019c7bdfe929cc769bcc2414befe7d2906add4271 +d = d89607475d509ef23dc9f476eae4280c986de741b63560670fa2bd605f5049f1972792c0413a5b3b4b34e7a38b70b7ca +Q = 0449a1c631f31cf5c45b2676b1f130cbf9be683d0a50dffae0d147c1e9913ab1090c6529a84f47ddc7cf025921b771355a1e207eece62f2bcc6bdabc1113158145170be97469a2904eaaa93aad85b86a19719207f3e423051f5b9cbbe2754eefcb +k = 78613c570c8d33b7dd1bd1561d87e36282e8cf4843e7c344a2b2bb6a0da94756d670eeaffe434f7ae7c780f7cf05ca08 +Sig = 66f92b39aa3f4aeb9e2dc03ac3855406fa3ebbab0a6c88a78d7a03482f0c9868d7b78bc081ede0947c7f37bf193074bae5c64ed98d7f3701193f25dd237d59c91c0da6e26215e0889d82e6d3e416693f8d58843cf30ab10ab8d0edd9170b53ad + +Curve = P-384 +Digest = SHA384 +Msg = d9b5cf0b50416573ff3c63133275a18394dd4326be2041e8d97e6e4e3855a4a177e9d26dfd223fe8aa74564edb49bd72de19916fb6f001f44530d5c18e2c332bce1b7415df5927ece5f3824f34d174b963136b53aef1fb78fb0c06a201a40b2db38e4d8216fc1e392a798c8ab4b3a314496b7f1087804ebfa89bf96e9cdb80c0 +d = 083e7152734adf342520ae377087a223688de2899b10cfcb34a0b36bca500a4dfa530e2343e6a39da7ae1eb0862b4a0d +Q = 0470a0f16b6c61172659b027ed19b18fd8f57bd28dc0501f207bd6b0bb065b5671cf3dd1ed13d388dcf6ccc766597aa6044f845bf01c3c3f6126a7368c3454f51425801ee0b72e63fb6799b4420bfdebe3e37c7246db627cc82c09654979c700bb +k = 28096ababe29a075fbdf894709a20d0fdedb01ed3eeacb642a33a0da6aed726e13caf6cf206792ec359f0c9f9b567552 +Sig = ee2923f9b9999ea05b5e57f505bed5c6ba0420def42c6fa90eef7a6ef770786525546de27cdeb2f8586f8f29fb4ee67c50ef923fb217c4cf65a48b94412fda430fac685f0da7bd574557c6c50f5b22e0c8354d99f2c2f2c2691f252f93c7d84a + +Curve = P-384 +Digest = SHA384 +Msg = 9e4042d8438a405475b7dab1cd783eb6ce1d1bffa46ac9dfda622b23ac31057b922eced8e2ed7b3241efeafd7c9ab372bf16230f7134647f2956fb793989d3c885a5ae064e85ed971b64f5f561e7ddb79d49aa6ebe727c671c67879b794554c04de0e05d68264855745ef3c9567bd646d5c5f8728b797c181b6b6a876e167663 +d = 63578d416215aff2cc78f9b926d4c7740a77c142944e104aa7422b19a616898262d46a8a942d5e8d5db135ee8b09a368 +Q = 04cadbacef4406099316db2ce3206adc636c2bb0a835847ed7941efb02862472f3150338f13f4860d47f39b7e098f0a390752ad0f22c9c264336cde11bbc95d1816ed4d1b1500db6b8dce259a42832e613c31178c2c7995206a62e201ba108f570 +k = 7b69c5d5b4d05c9950dc94c27d58403b4c52c004b80a80418ad3a89aabc5d34f21926729e76afd280cc8ee88c9805a2a +Sig = db054addb6161ee49c6ce2e4d646d7670754747b6737ca8516e9d1e87859937c3ef9b1d2663e10d7e4bd00ec85b7a97afcc504e0f00ef29587e4bc22faada4db30e2cb1ac552680a65785ae87beb666c792513f2be7a3180fc544296841a0e27 + +Curve = P-384 +Digest = SHA384 +Msg = 0b14a7484a40b68a3ce1273b8a48b8fdb65ba900d98541c4bbd07b97e31bcc4c85545a03e9deab3c563f47a036ff60d0361684ba241b5aa68bb46f440da22181ee328a011de98eff34ba235ec10612b07bdfa6b3dc4ccc5e82d3a8d057e1862fef3def5a1804696f84699fda2ec4175a54a4d08bcb4f0406fdac4eddadf5e29b +d = ed4df19971658b74868800b3b81bc877807743b25c65740f1d6377542afe2c6427612c840ada31a8eb794718f37c7283 +Q = 0433093a0568757e8b58df5b72ea5fe5bf26e6f7aeb541b4c6a8c189c93721749bcaceccf2982a2f0702586a9f812fc66febe320d09e1f0662189d50b85a20403b821ac0d000afdbf66a0a33f304726c69e354d81c50b94ba3a5250efc31319cd1 +k = d9b4cd1bdfa83e608289634dbfcee643f07315baf743fc91922880b55a2feda3b38ddf6040d3ba10985cd1285fc690d5 +Sig = 009c74063e206a4259b53decff5445683a03f44fa67252b76bd3581081c714f882f882df915e97dbeab061fa8b3cc4e7d40e09d3468b46699948007e8f59845766dbf694b9c62066890dd055c0cb9a0caf0aa611fb9f466ad0bbb00dbe29d7eb + +Curve = P-384 +Digest = SHA384 +Msg = 0e646c6c3cc0f9fdedef934b7195fe3837836a9f6f263968af95ef84cd035750f3cdb649de745c874a6ef66b3dd83b66068b4335bc0a97184182e3965c722b3b1aee488c3620adb835a8140e199f4fc83a88b02881816b366a09316e25685217f9221157fc05b2d8d2bc855372183da7af3f0a14148a09def37a332f8eb40dc9 +d = e9c7e9a79618d6ff3274da1abd0ff3ed0ec1ae3b54c3a4fd8d68d98fb04326b7633fc637e0b195228d0edba6bb1468fb +Q = 04a39ac353ca787982c577aff1e8601ce192aa90fd0de4c0ed627f66a8b6f02ae51315543f72ffc1c48a7269b25e7c289a9064a507b66b340b6e0e0d5ffaa67dd20e6dafc0ea6a6faee1635177af256f9108a22e9edf736ab4ae8e96dc207b1fa9 +k = b094cb3a5c1440cfab9dc56d0ec2eff00f2110dea203654c70757254aa5912a7e73972e607459b1f4861e0b08a5cc763 +Sig = ee82c0f90501136eb0dc0e459ad17bf3be1b1c8b8d05c60068a9306a346326ff7344776a95f1f7e2e2cf9477130e735caf10b90f203af23b7500e070536e64629ba19245d6ef39aab57fcdb1b73c4c6bf7070c6263544633d3d358c12a178138 diff --git a/vendor/ring/src/ec/suite_b/ecdsa/signing.rs b/vendor/ring/src/ec/suite_b/ecdsa/signing.rs new file mode 100644 index 00000000..b9f1f73b --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ecdsa/signing.rs @@ -0,0 +1,597 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! ECDSA Signatures using the P-256 and P-384 curves. + +use super::digest_scalar::digest_scalar; +use crate::{ + arithmetic::montgomery::*, + cpu, digest, + ec::{ + self, + suite_b::{ops::*, private_key}, + }, + error, + io::der, + limb, pkcs8, rand, sealed, signature, +}; +/// An ECDSA signing algorithm. +pub struct EcdsaSigningAlgorithm { + curve: &'static ec::Curve, + private_scalar_ops: &'static PrivateScalarOps, + private_key_ops: &'static PrivateKeyOps, + digest_alg: &'static digest::Algorithm, + pkcs8_template: &'static pkcs8::Template, + format_rs: fn(ops: &'static ScalarOps, r: &Scalar, s: &Scalar, out: &mut [u8]) -> usize, + id: AlgorithmID, +} + +#[derive(Debug, Eq, PartialEq)] +enum AlgorithmID { + ECDSA_P256_SHA256_FIXED_SIGNING, + ECDSA_P384_SHA384_FIXED_SIGNING, + ECDSA_P256_SHA256_ASN1_SIGNING, + ECDSA_P384_SHA384_ASN1_SIGNING, +} + +derive_debug_via_id!(EcdsaSigningAlgorithm); + +impl PartialEq for EcdsaSigningAlgorithm { + fn eq(&self, other: &Self) -> bool { + self.id == other.id + } +} + +impl Eq for EcdsaSigningAlgorithm {} + +impl sealed::Sealed for EcdsaSigningAlgorithm {} + +/// An ECDSA key pair, used for signing. +pub struct EcdsaKeyPair { + d: Scalar, + nonce_key: NonceRandomKey, + alg: &'static EcdsaSigningAlgorithm, + public_key: PublicKey, +} + +derive_debug_via_field!(EcdsaKeyPair, stringify!(EcdsaKeyPair), public_key); + +impl EcdsaKeyPair { + /// Generates a new key pair and returns the key pair serialized as a + /// PKCS#8 document. + /// + /// The PKCS#8 document will be a v1 `OneAsymmetricKey` with the public key + /// included in the `ECPrivateKey` structure, as described in + /// [RFC 5958 Section 2] and [RFC 5915]. The `ECPrivateKey` structure will + /// not have a `parameters` field so the generated key is compatible with + /// PKCS#11. + /// + /// [RFC 5915]: https://tools.ietf.org/html/rfc5915 + /// [RFC 5958 Section 2]: https://tools.ietf.org/html/rfc5958#section-2 + pub fn generate_pkcs8( + alg: &'static EcdsaSigningAlgorithm, + rng: &dyn rand::SecureRandom, + ) -> Result { + let private_key = ec::Seed::generate(alg.curve, rng, cpu::features())?; + let public_key = private_key.compute_public_key()?; + Ok(pkcs8::wrap_key( + &alg.pkcs8_template, + private_key.bytes_less_safe(), + public_key.as_ref(), + )) + } + + /// Constructs an ECDSA key pair by parsing an unencrypted PKCS#8 v1 + /// id-ecPublicKey `ECPrivateKey` key. + /// + /// The input must be in PKCS#8 v1 format. It must contain the public key in + /// the `ECPrivateKey` structure; `from_pkcs8()` will verify that the public + /// key and the private key are consistent with each other. The algorithm + /// identifier must identify the curve by name; it must not use an + /// "explicit" encoding of the curve. The `parameters` field of the + /// `ECPrivateKey`, if present, must be the same named curve that is in the + /// algorithm identifier in the PKCS#8 header. + pub fn from_pkcs8( + alg: &'static EcdsaSigningAlgorithm, + pkcs8: &[u8], + ) -> Result { + let key_pair = ec::suite_b::key_pair_from_pkcs8( + alg.curve, + alg.pkcs8_template, + untrusted::Input::from(pkcs8), + cpu::features(), + )?; + let rng = rand::SystemRandom::new(); // TODO: make this a parameter. + Self::new(alg, key_pair, &rng) + } + + /// Constructs an ECDSA key pair from the private key and public key bytes + /// + /// The private key must encoded as a big-endian fixed-length integer. For + /// example, a P-256 private key must be 32 bytes prefixed with leading + /// zeros as needed. + /// + /// The public key is encoding in uncompressed form using the + /// Octet-String-to-Elliptic-Curve-Point algorithm in + /// [SEC 1: Elliptic Curve Cryptography, Version 2.0]. + /// + /// This is intended for use by code that deserializes key pairs. It is + /// recommended to use `EcdsaKeyPair::from_pkcs8()` (with a PKCS#8-encoded + /// key) instead. + /// + /// [SEC 1: Elliptic Curve Cryptography, Version 2.0]: + /// http://www.secg.org/sec1-v2.pdf + pub fn from_private_key_and_public_key( + alg: &'static EcdsaSigningAlgorithm, + private_key: &[u8], + public_key: &[u8], + ) -> Result { + let key_pair = ec::suite_b::key_pair_from_bytes( + alg.curve, + untrusted::Input::from(private_key), + untrusted::Input::from(public_key), + cpu::features(), + )?; + let rng = rand::SystemRandom::new(); // TODO: make this a parameter. + Self::new(alg, key_pair, &rng) + } + + fn new( + alg: &'static EcdsaSigningAlgorithm, + key_pair: ec::KeyPair, + rng: &dyn rand::SecureRandom, + ) -> Result { + let (seed, public_key) = key_pair.split(); + let d = private_key::private_key_as_scalar(alg.private_key_ops, &seed); + let d = alg + .private_scalar_ops + .scalar_ops + .scalar_product(&d, &alg.private_scalar_ops.oneRR_mod_n); + + let nonce_key = NonceRandomKey::new(alg, &seed, rng)?; + Ok(Self { + d, + nonce_key, + alg, + public_key: PublicKey(public_key), + }) + } + + /// Deprecated. Returns the signature of the `message` using a random nonce + /// generated by `rng`. + pub fn sign( + &self, + rng: &dyn rand::SecureRandom, + message: &[u8], + ) -> Result { + // Step 4 (out of order). + let h = digest::digest(self.alg.digest_alg, message); + + // Incorporate `h` into the nonce to hedge against faulty RNGs. (This + // is not an approved random number generator that is mandated in + // the spec.) + let nonce_rng = NonceRandom { + key: &self.nonce_key, + message_digest: &h, + rng, + }; + + self.sign_digest(h, &nonce_rng) + } + + #[cfg(test)] + fn sign_with_fixed_nonce_during_test( + &self, + rng: &dyn rand::SecureRandom, + message: &[u8], + ) -> Result { + // Step 4 (out of order). + let h = digest::digest(self.alg.digest_alg, message); + + self.sign_digest(h, rng) + } + + /// Returns the signature of message digest `h` using a "random" nonce + /// generated by `rng`. + fn sign_digest( + &self, + h: digest::Digest, + rng: &dyn rand::SecureRandom, + ) -> Result { + // NSA Suite B Implementer's Guide to ECDSA Section 3.4.1: ECDSA + // Signature Generation. + + // NSA Guide Prerequisites: + // + // Prior to generating an ECDSA signature, the signatory shall + // obtain: + // + // 1. an authentic copy of the domain parameters, + // 2. a digital signature key pair (d,Q), either generated by a + // method from Appendix A.1, or obtained from a trusted third + // party, + // 3. assurance of the validity of the public key Q (see Appendix + // A.3), and + // 4. assurance that he/she/it actually possesses the associated + // private key d (see [SP800-89] Section 6). + // + // The domain parameters are hard-coded into the source code. + // `EcdsaKeyPair::generate_pkcs8()` can be used to meet the second + // requirement; otherwise, it is up to the user to ensure the key pair + // was obtained from a trusted private key. The constructors for + // `EcdsaKeyPair` ensure that #3 and #4 are met subject to the caveats + // in SP800-89 Section 6. + + let ops = self.alg.private_scalar_ops; + let scalar_ops = ops.scalar_ops; + let cops = scalar_ops.common; + let private_key_ops = self.alg.private_key_ops; + + for _ in 0..100 { + // XXX: iteration conut? + // Step 1. + let k = private_key::random_scalar(self.alg.private_key_ops, rng)?; + let k_inv = scalar_ops.scalar_inv_to_mont(&k); + + // Step 2. + let r = private_key_ops.point_mul_base(&k); + + // Step 3. + let r = { + let (x, _) = private_key::affine_from_jacobian(private_key_ops, &r)?; + let x = cops.elem_unencoded(&x); + elem_reduced_to_scalar(cops, &x) + }; + if cops.is_zero(&r) { + continue; + } + + // Step 4 is done by the caller. + + // Step 5. + let e = digest_scalar(scalar_ops, h); + + // Step 6. + let s = { + let dr = scalar_ops.scalar_product(&self.d, &r); + let e_plus_dr = scalar_sum(cops, &e, &dr); + scalar_ops.scalar_product(&k_inv, &e_plus_dr) + }; + if cops.is_zero(&s) { + continue; + } + + // Step 7 with encoding. + return Ok(signature::Signature::new(|sig_bytes| { + (self.alg.format_rs)(scalar_ops, &r, &s, sig_bytes) + })); + } + + Err(error::Unspecified) + } +} + +/// Generates an ECDSA nonce in a way that attempts to protect against a faulty +/// `SecureRandom`. +struct NonceRandom<'a> { + key: &'a NonceRandomKey, + message_digest: &'a digest::Digest, + rng: &'a dyn rand::SecureRandom, +} + +impl core::fmt::Debug for NonceRandom<'_> { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + f.debug_struct("NonceRandom").finish() + } +} + +impl rand::sealed::SecureRandom for NonceRandom<'_> { + fn fill_impl(&self, dest: &mut [u8]) -> Result<(), error::Unspecified> { + // Use the same digest algorithm that will be used to digest the + // message. The digest algorithm's output is exactly the right size; + // this is checked below. + // + // XXX(perf): The single iteration will require two digest block + // operations because the amount of data digested is larger than one + // block. + let digest_alg = self.key.0.algorithm(); + let mut ctx = digest::Context::new(digest_alg); + + // Digest the randomized digest of the private key. + let key = self.key.0.as_ref(); + ctx.update(key); + + // The random value is digested between the key and the message so that + // the key and the message are not directly digested in the same digest + // block. + assert!(key.len() <= digest_alg.block_len / 2); + { + let mut rand = [0u8; digest::MAX_BLOCK_LEN]; + let rand = &mut rand[..digest_alg.block_len - key.len()]; + assert!(rand.len() >= dest.len()); + self.rng.fill(rand)?; + ctx.update(rand); + } + + ctx.update(self.message_digest.as_ref()); + + let nonce = ctx.finish(); + + // `copy_from_slice()` panics if the lengths differ, so we don't have + // to separately assert that the lengths are the same. + dest.copy_from_slice(nonce.as_ref()); + + Ok(()) + } +} + +impl<'a> sealed::Sealed for NonceRandom<'a> {} + +struct NonceRandomKey(digest::Digest); + +impl NonceRandomKey { + fn new( + alg: &EcdsaSigningAlgorithm, + seed: &ec::Seed, + rng: &dyn rand::SecureRandom, + ) -> Result { + let mut rand = [0; digest::MAX_OUTPUT_LEN]; + let rand = &mut rand[0..alg.curve.elem_scalar_seed_len]; + + // XXX: `KeyRejected` isn't the right way to model failure of the RNG, + // but to fix that we'd need to break the API by changing the result type. + // TODO: Fix the API in the next breaking release. + rng.fill(rand) + .map_err(|error::Unspecified| error::KeyRejected::rng_failed())?; + + let mut ctx = digest::Context::new(alg.digest_alg); + ctx.update(rand); + ctx.update(seed.bytes_less_safe()); + Ok(Self(ctx.finish())) + } +} + +impl signature::KeyPair for EcdsaKeyPair { + type PublicKey = PublicKey; + + fn public_key(&self) -> &Self::PublicKey { + &self.public_key + } +} + +#[derive(Clone, Copy)] +pub struct PublicKey(ec::PublicKey); + +derive_debug_self_as_ref_hex_bytes!(PublicKey); + +impl AsRef<[u8]> for PublicKey { + fn as_ref(&self) -> &[u8] { + self.0.as_ref() + } +} + +fn format_rs_fixed(ops: &'static ScalarOps, r: &Scalar, s: &Scalar, out: &mut [u8]) -> usize { + let scalar_len = ops.scalar_bytes_len(); + + let (r_out, rest) = out.split_at_mut(scalar_len); + limb::big_endian_from_limbs(&r.limbs[..ops.common.num_limbs], r_out); + + let (s_out, _) = rest.split_at_mut(scalar_len); + limb::big_endian_from_limbs(&s.limbs[..ops.common.num_limbs], s_out); + + 2 * scalar_len +} + +fn format_rs_asn1(ops: &'static ScalarOps, r: &Scalar, s: &Scalar, out: &mut [u8]) -> usize { + // This assumes `a` is not zero since neither `r` or `s` is allowed to be + // zero. + fn format_integer_tlv(ops: &ScalarOps, a: &Scalar, out: &mut [u8]) -> usize { + let mut fixed = [0u8; ec::SCALAR_MAX_BYTES + 1]; + let fixed = &mut fixed[..(ops.scalar_bytes_len() + 1)]; + limb::big_endian_from_limbs(&a.limbs[..ops.common.num_limbs], &mut fixed[1..]); + + // Since `a_fixed_out` is an extra byte long, it is guaranteed to start + // with a zero. + debug_assert_eq!(fixed[0], 0); + + // There must be at least one non-zero byte since `a` isn't zero. + let first_index = fixed.iter().position(|b| *b != 0).unwrap(); + + // If the first byte has its high bit set, it needs to be prefixed with 0x00. + let first_index = if fixed[first_index] & 0x80 != 0 { + first_index - 1 + } else { + first_index + }; + let value = &fixed[first_index..]; + + out[0] = der::Tag::Integer as u8; + + // Lengths less than 128 are encoded in one byte. + assert!(value.len() < 128); + out[1] = value.len() as u8; + + out[2..][..value.len()].copy_from_slice(&value); + + 2 + value.len() + } + + out[0] = der::Tag::Sequence as u8; + let r_tlv_len = format_integer_tlv(ops, r, &mut out[2..]); + let s_tlv_len = format_integer_tlv(ops, s, &mut out[2..][r_tlv_len..]); + + // Lengths less than 128 are encoded in one byte. + let value_len = r_tlv_len + s_tlv_len; + assert!(value_len < 128); + out[1] = value_len as u8; + + 2 + value_len +} + +/// Signing of fixed-length (PKCS#11 style) ECDSA signatures using the +/// P-256 curve and SHA-256. +/// +/// See "`ECDSA_*_FIXED` Details" in `ring::signature`'s module-level +/// documentation for more details. +pub static ECDSA_P256_SHA256_FIXED_SIGNING: EcdsaSigningAlgorithm = EcdsaSigningAlgorithm { + curve: &ec::suite_b::curve::P256, + private_scalar_ops: &p256::PRIVATE_SCALAR_OPS, + private_key_ops: &p256::PRIVATE_KEY_OPS, + digest_alg: &digest::SHA256, + pkcs8_template: &EC_PUBLIC_KEY_P256_PKCS8_V1_TEMPLATE, + format_rs: format_rs_fixed, + id: AlgorithmID::ECDSA_P256_SHA256_FIXED_SIGNING, +}; + +/// Signing of fixed-length (PKCS#11 style) ECDSA signatures using the +/// P-384 curve and SHA-384. +/// +/// See "`ECDSA_*_FIXED` Details" in `ring::signature`'s module-level +/// documentation for more details. +pub static ECDSA_P384_SHA384_FIXED_SIGNING: EcdsaSigningAlgorithm = EcdsaSigningAlgorithm { + curve: &ec::suite_b::curve::P384, + private_scalar_ops: &p384::PRIVATE_SCALAR_OPS, + private_key_ops: &p384::PRIVATE_KEY_OPS, + digest_alg: &digest::SHA384, + pkcs8_template: &EC_PUBLIC_KEY_P384_PKCS8_V1_TEMPLATE, + format_rs: format_rs_fixed, + id: AlgorithmID::ECDSA_P384_SHA384_FIXED_SIGNING, +}; + +/// Signing of ASN.1 DER-encoded ECDSA signatures using the P-256 curve and +/// SHA-256. +/// +/// See "`ECDSA_*_ASN1` Details" in `ring::signature`'s module-level +/// documentation for more details. +pub static ECDSA_P256_SHA256_ASN1_SIGNING: EcdsaSigningAlgorithm = EcdsaSigningAlgorithm { + curve: &ec::suite_b::curve::P256, + private_scalar_ops: &p256::PRIVATE_SCALAR_OPS, + private_key_ops: &p256::PRIVATE_KEY_OPS, + digest_alg: &digest::SHA256, + pkcs8_template: &EC_PUBLIC_KEY_P256_PKCS8_V1_TEMPLATE, + format_rs: format_rs_asn1, + id: AlgorithmID::ECDSA_P256_SHA256_ASN1_SIGNING, +}; + +/// Signing of ASN.1 DER-encoded ECDSA signatures using the P-384 curve and +/// SHA-384. +/// +/// See "`ECDSA_*_ASN1` Details" in `ring::signature`'s module-level +/// documentation for more details. +pub static ECDSA_P384_SHA384_ASN1_SIGNING: EcdsaSigningAlgorithm = EcdsaSigningAlgorithm { + curve: &ec::suite_b::curve::P384, + private_scalar_ops: &p384::PRIVATE_SCALAR_OPS, + private_key_ops: &p384::PRIVATE_KEY_OPS, + digest_alg: &digest::SHA384, + pkcs8_template: &EC_PUBLIC_KEY_P384_PKCS8_V1_TEMPLATE, + format_rs: format_rs_asn1, + id: AlgorithmID::ECDSA_P384_SHA384_ASN1_SIGNING, +}; + +static EC_PUBLIC_KEY_P256_PKCS8_V1_TEMPLATE: pkcs8::Template = pkcs8::Template { + bytes: include_bytes!("ecPublicKey_p256_pkcs8_v1_template.der"), + alg_id_range: core::ops::Range { start: 8, end: 27 }, + curve_id_index: 9, + private_key_index: 0x24, +}; + +static EC_PUBLIC_KEY_P384_PKCS8_V1_TEMPLATE: pkcs8::Template = pkcs8::Template { + bytes: include_bytes!("ecPublicKey_p384_pkcs8_v1_template.der"), + alg_id_range: core::ops::Range { start: 8, end: 24 }, + curve_id_index: 9, + private_key_index: 0x23, +}; + +#[cfg(test)] +mod tests { + use crate::{signature, test}; + + #[test] + fn signature_ecdsa_sign_fixed_test() { + test::run( + test_file!("ecdsa_sign_fixed_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let curve_name = test_case.consume_string("Curve"); + let digest_name = test_case.consume_string("Digest"); + let msg = test_case.consume_bytes("Msg"); + let d = test_case.consume_bytes("d"); + let q = test_case.consume_bytes("Q"); + let k = test_case.consume_bytes("k"); + + let expected_result = test_case.consume_bytes("Sig"); + + let alg = match (curve_name.as_str(), digest_name.as_str()) { + ("P-256", "SHA256") => &signature::ECDSA_P256_SHA256_FIXED_SIGNING, + ("P-384", "SHA384") => &signature::ECDSA_P384_SHA384_FIXED_SIGNING, + _ => { + panic!("Unsupported curve+digest: {}+{}", curve_name, digest_name); + } + }; + + let private_key = + signature::EcdsaKeyPair::from_private_key_and_public_key(alg, &d, &q).unwrap(); + let rng = test::rand::FixedSliceRandom { bytes: &k }; + + let actual_result = private_key + .sign_with_fixed_nonce_during_test(&rng, &msg) + .unwrap(); + + assert_eq!(actual_result.as_ref(), &expected_result[..]); + + Ok(()) + }, + ); + } + + #[test] + fn signature_ecdsa_sign_asn1_test() { + test::run( + test_file!("ecdsa_sign_asn1_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let curve_name = test_case.consume_string("Curve"); + let digest_name = test_case.consume_string("Digest"); + let msg = test_case.consume_bytes("Msg"); + let d = test_case.consume_bytes("d"); + let q = test_case.consume_bytes("Q"); + let k = test_case.consume_bytes("k"); + + let expected_result = test_case.consume_bytes("Sig"); + + let alg = match (curve_name.as_str(), digest_name.as_str()) { + ("P-256", "SHA256") => &signature::ECDSA_P256_SHA256_ASN1_SIGNING, + ("P-384", "SHA384") => &signature::ECDSA_P384_SHA384_ASN1_SIGNING, + _ => { + panic!("Unsupported curve+digest: {}+{}", curve_name, digest_name); + } + }; + + let private_key = + signature::EcdsaKeyPair::from_private_key_and_public_key(alg, &d, &q).unwrap(); + let rng = test::rand::FixedSliceRandom { bytes: &k }; + + let actual_result = private_key + .sign_with_fixed_nonce_during_test(&rng, &msg) + .unwrap(); + + assert_eq!(actual_result.as_ref(), &expected_result[..]); + + Ok(()) + }, + ); + } +} diff --git a/vendor/ring/src/ec/suite_b/ecdsa/verification.rs b/vendor/ring/src/ec/suite_b/ecdsa/verification.rs new file mode 100644 index 00000000..28d46213 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ecdsa/verification.rs @@ -0,0 +1,347 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! ECDSA Signatures using the P-256 and P-384 curves. + +use super::digest_scalar::digest_scalar; +use crate::{ + arithmetic::montgomery::*, + digest, + ec::suite_b::{ops::*, public_key::*, verify_jacobian_point_is_on_the_curve}, + error, + io::der, + limb, sealed, signature, +}; + +/// An ECDSA verification algorithm. +pub struct EcdsaVerificationAlgorithm { + ops: &'static PublicScalarOps, + digest_alg: &'static digest::Algorithm, + split_rs: + for<'a> fn( + ops: &'static ScalarOps, + input: &mut untrusted::Reader<'a>, + ) + -> Result<(untrusted::Input<'a>, untrusted::Input<'a>), error::Unspecified>, + id: AlgorithmID, +} + +#[derive(Debug)] +enum AlgorithmID { + ECDSA_P256_SHA256_ASN1, + ECDSA_P256_SHA256_FIXED, + ECDSA_P256_SHA384_ASN1, + ECDSA_P384_SHA256_ASN1, + ECDSA_P384_SHA384_ASN1, + ECDSA_P384_SHA384_FIXED, +} + +derive_debug_via_id!(EcdsaVerificationAlgorithm); + +impl signature::VerificationAlgorithm for EcdsaVerificationAlgorithm { + fn verify( + &self, + public_key: untrusted::Input, + msg: untrusted::Input, + signature: untrusted::Input, + ) -> Result<(), error::Unspecified> { + let e = { + // NSA Guide Step 2: "Use the selected hash function to compute H = + // Hash(M)." + let h = digest::digest(self.digest_alg, msg.as_slice_less_safe()); + + // NSA Guide Step 3: "Convert the bit string H to an integer e as + // described in Appendix B.2." + digest_scalar(self.ops.scalar_ops, h) + }; + + self.verify_digest(public_key, e, signature) + } +} + +impl EcdsaVerificationAlgorithm { + /// This is intentionally not public. + fn verify_digest( + &self, + public_key: untrusted::Input, + e: Scalar, + signature: untrusted::Input, + ) -> Result<(), error::Unspecified> { + // NSA Suite B Implementer's Guide to ECDSA Section 3.4.2. + + let public_key_ops = self.ops.public_key_ops; + let scalar_ops = self.ops.scalar_ops; + + // NSA Guide Prerequisites: + // + // Prior to accepting a verified digital signature as valid the + // verifier shall have: + // + // 1. assurance of the signatory’s claimed identity, + // 2. an authentic copy of the domain parameters, (q, FR, a, b, SEED, + // G, n, h), + // 3. assurance of the validity of the public key, and + // 4. assurance that the claimed signatory actually possessed the + // private key that was used to generate the digital signature at + // the time that the signature was generated. + // + // Prerequisites #1 and #4 are outside the scope of what this function + // can do. Prerequisite #2 is handled implicitly as the domain + // parameters are hard-coded into the source. Prerequisite #3 is + // handled by `parse_uncompressed_point`. + let peer_pub_key = parse_uncompressed_point(public_key_ops, public_key)?; + + let (r, s) = signature.read_all(error::Unspecified, |input| { + (self.split_rs)(scalar_ops, input) + })?; + + // NSA Guide Step 1: "If r and s are not both integers in the interval + // [1, n − 1], output INVALID." + let r = scalar_parse_big_endian_variable(public_key_ops.common, limb::AllowZero::No, r)?; + let s = scalar_parse_big_endian_variable(public_key_ops.common, limb::AllowZero::No, s)?; + + // NSA Guide Step 4: "Compute w = s**−1 mod n, using the routine in + // Appendix B.1." + let w = scalar_ops.scalar_inv_to_mont(&s); + + // NSA Guide Step 5: "Compute u1 = (e * w) mod n, and compute + // u2 = (r * w) mod n." + let u1 = scalar_ops.scalar_product(&e, &w); + let u2 = scalar_ops.scalar_product(&r, &w); + + // NSA Guide Step 6: "Compute the elliptic curve point + // R = (xR, yR) = u1*G + u2*Q, using EC scalar multiplication and EC + // addition. If R is equal to the point at infinity, output INVALID." + let product = twin_mul(self.ops.private_key_ops, &u1, &u2, &peer_pub_key); + + // Verify that the point we computed is on the curve; see + // `verify_affine_point_is_on_the_curve_scaled` for details on why. It + // would be more secure to do the check on the affine coordinates if we + // were going to convert to affine form (again, see + // `verify_affine_point_is_on_the_curve_scaled` for details on why). + // But, we're going to avoid converting to affine for performance + // reasons, so we do the verification using the Jacobian coordinates. + let z2 = verify_jacobian_point_is_on_the_curve(public_key_ops.common, &product)?; + + // NSA Guide Step 7: "Compute v = xR mod n." + // NSA Guide Step 8: "Compare v and r0. If v = r0, output VALID; + // otherwise, output INVALID." + // + // Instead, we use Greg Maxwell's trick to avoid the inversion mod `q` + // that would be necessary to compute the affine X coordinate. + let x = public_key_ops.common.point_x(&product); + fn sig_r_equals_x( + ops: &PublicScalarOps, + r: &Elem, + x: &Elem, + z2: &Elem, + ) -> bool { + let cops = ops.public_key_ops.common; + let r_jacobian = cops.elem_product(z2, r); + let x = cops.elem_unencoded(x); + ops.elem_equals_vartime(&r_jacobian, &x) + } + let mut r = self.ops.scalar_as_elem(&r); + if sig_r_equals_x(self.ops, &r, &x, &z2) { + return Ok(()); + } + if self.ops.elem_less_than(&r, &self.ops.q_minus_n) { + self.ops + .private_key_ops + .common + .elem_add(&mut r, &public_key_ops.common.n); + if sig_r_equals_x(self.ops, &r, &x, &z2) { + return Ok(()); + } + } + + Err(error::Unspecified) + } +} + +impl sealed::Sealed for EcdsaVerificationAlgorithm {} + +fn split_rs_fixed<'a>( + ops: &'static ScalarOps, + input: &mut untrusted::Reader<'a>, +) -> Result<(untrusted::Input<'a>, untrusted::Input<'a>), error::Unspecified> { + let scalar_len = ops.scalar_bytes_len(); + let r = input.read_bytes(scalar_len)?; + let s = input.read_bytes(scalar_len)?; + Ok((r, s)) +} + +fn split_rs_asn1<'a>( + _ops: &'static ScalarOps, + input: &mut untrusted::Reader<'a>, +) -> Result<(untrusted::Input<'a>, untrusted::Input<'a>), error::Unspecified> { + der::nested(input, der::Tag::Sequence, error::Unspecified, |input| { + let r = der::positive_integer(input)?.big_endian_without_leading_zero_as_input(); + let s = der::positive_integer(input)?.big_endian_without_leading_zero_as_input(); + Ok((r, s)) + }) +} + +fn twin_mul( + ops: &PrivateKeyOps, + g_scalar: &Scalar, + p_scalar: &Scalar, + p_xy: &(Elem, Elem), +) -> Point { + // XXX: Inefficient. TODO: implement interleaved wNAF multiplication. + let scaled_g = ops.point_mul_base(g_scalar); + let scaled_p = ops.point_mul(p_scalar, p_xy); + ops.common.point_sum(&scaled_g, &scaled_p) +} + +/// Verification of fixed-length (PKCS#11 style) ECDSA signatures using the +/// P-256 curve and SHA-256. +/// +/// See "`ECDSA_*_FIXED` Details" in `ring::signature`'s module-level +/// documentation for more details. +pub static ECDSA_P256_SHA256_FIXED: EcdsaVerificationAlgorithm = EcdsaVerificationAlgorithm { + ops: &p256::PUBLIC_SCALAR_OPS, + digest_alg: &digest::SHA256, + split_rs: split_rs_fixed, + id: AlgorithmID::ECDSA_P256_SHA256_FIXED, +}; + +/// Verification of fixed-length (PKCS#11 style) ECDSA signatures using the +/// P-384 curve and SHA-384. +/// +/// See "`ECDSA_*_FIXED` Details" in `ring::signature`'s module-level +/// documentation for more details. +pub static ECDSA_P384_SHA384_FIXED: EcdsaVerificationAlgorithm = EcdsaVerificationAlgorithm { + ops: &p384::PUBLIC_SCALAR_OPS, + digest_alg: &digest::SHA384, + split_rs: split_rs_fixed, + id: AlgorithmID::ECDSA_P384_SHA384_FIXED, +}; + +/// Verification of ASN.1 DER-encoded ECDSA signatures using the P-256 curve +/// and SHA-256. +/// +/// See "`ECDSA_*_ASN1` Details" in `ring::signature`'s module-level +/// documentation for more details. +pub static ECDSA_P256_SHA256_ASN1: EcdsaVerificationAlgorithm = EcdsaVerificationAlgorithm { + ops: &p256::PUBLIC_SCALAR_OPS, + digest_alg: &digest::SHA256, + split_rs: split_rs_asn1, + id: AlgorithmID::ECDSA_P256_SHA256_ASN1, +}; + +/// *Not recommended*. Verification of ASN.1 DER-encoded ECDSA signatures using +/// the P-256 curve and SHA-384. +/// +/// In most situations, P-256 should be used only with SHA-256 and P-384 +/// should be used only with SHA-384. However, in some cases, particularly TLS +/// on the web, it is necessary to support P-256 with SHA-384 for compatibility +/// with widely-deployed implementations that do not follow these guidelines. +/// +/// See "`ECDSA_*_ASN1` Details" in `ring::signature`'s module-level +/// documentation for more details. +pub static ECDSA_P256_SHA384_ASN1: EcdsaVerificationAlgorithm = EcdsaVerificationAlgorithm { + ops: &p256::PUBLIC_SCALAR_OPS, + digest_alg: &digest::SHA384, + split_rs: split_rs_asn1, + id: AlgorithmID::ECDSA_P256_SHA384_ASN1, +}; + +/// *Not recommended*. Verification of ASN.1 DER-encoded ECDSA signatures using +/// the P-384 curve and SHA-256. +/// +/// In most situations, P-256 should be used only with SHA-256 and P-384 +/// should be used only with SHA-384. However, in some cases, particularly TLS +/// on the web, it is necessary to support P-256 with SHA-384 for compatibility +/// with widely-deployed implementations that do not follow these guidelines. +/// +/// See "`ECDSA_*_ASN1` Details" in `ring::signature`'s module-level +/// documentation for more details. +pub static ECDSA_P384_SHA256_ASN1: EcdsaVerificationAlgorithm = EcdsaVerificationAlgorithm { + ops: &p384::PUBLIC_SCALAR_OPS, + digest_alg: &digest::SHA256, + split_rs: split_rs_asn1, + id: AlgorithmID::ECDSA_P384_SHA256_ASN1, +}; + +/// Verification of ASN.1 DER-encoded ECDSA signatures using the P-384 curve +/// and SHA-384. +/// +/// See "`ECDSA_*_ASN1` Details" in `ring::signature`'s module-level +/// documentation for more details. +pub static ECDSA_P384_SHA384_ASN1: EcdsaVerificationAlgorithm = EcdsaVerificationAlgorithm { + ops: &p384::PUBLIC_SCALAR_OPS, + digest_alg: &digest::SHA384, + split_rs: split_rs_asn1, + id: AlgorithmID::ECDSA_P384_SHA384_ASN1, +}; + +#[cfg(test)] +mod tests { + use super::*; + use crate::test; + use alloc::vec::Vec; + + #[test] + fn test_digest_based_test_vectors() { + test::run( + test_file!("../../../../crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let curve_name = test_case.consume_string("Curve"); + + let public_key = { + let mut public_key = Vec::new(); + public_key.push(0x04); + public_key.extend(&test_case.consume_bytes("X")); + public_key.extend(&test_case.consume_bytes("Y")); + public_key + }; + + let digest = test_case.consume_bytes("Digest"); + + let sig = { + let mut sig = Vec::new(); + sig.extend(&test_case.consume_bytes("R")); + sig.extend(&test_case.consume_bytes("S")); + sig + }; + + let invalid = test_case.consume_optional_string("Invalid"); + + let alg = match curve_name.as_str() { + "P-256" => &ECDSA_P256_SHA256_FIXED, + "P-384" => &ECDSA_P384_SHA384_FIXED, + _ => { + panic!("Unsupported curve: {}", curve_name); + } + }; + + let digest = super::super::digest_scalar::digest_bytes_scalar( + &alg.ops.scalar_ops, + &digest[..], + ); + let actual_result = alg.verify_digest( + untrusted::Input::from(&public_key[..]), + digest, + untrusted::Input::from(&sig[..]), + ); + assert_eq!(actual_result.is_ok(), invalid.is_none()); + + Ok(()) + }, + ); + } +} diff --git a/vendor/ring/src/ec/suite_b/ops.rs b/vendor/ring/src/ec/suite_b/ops.rs new file mode 100644 index 00000000..14544445 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops.rs @@ -0,0 +1,1174 @@ +// Copyright 2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use crate::{arithmetic::montgomery::*, c, error, limb::*}; +use core::marker::PhantomData; + +pub use self::elem::*; + +/// A field element, i.e. an element of ℤ/qℤ for the curve's field modulus +/// *q*. +pub type Elem = elem::Elem; + +/// Represents the (prime) order *q* of the curve's prime field. +#[derive(Clone, Copy)] +pub enum Q {} + +/// A scalar. Its value is in [0, n). Zero-valued scalars are forbidden in most +/// contexts. +pub type Scalar = elem::Elem; + +/// Represents the prime order *n* of the curve's group. +#[derive(Clone, Copy)] +pub enum N {} + +pub struct Point { + // The coordinates are stored in a contiguous array, where the first + // `ops.num_limbs` elements are the X coordinate, the next + // `ops.num_limbs` elements are the Y coordinate, and the next + // `ops.num_limbs` elements are the Z coordinate. This layout is dictated + // by the requirements of the GFp_nistz256 code. + xyz: [Limb; 3 * MAX_LIMBS], +} + +impl Point { + pub fn new_at_infinity() -> Self { + Self { + xyz: [0; 3 * MAX_LIMBS], + } + } +} + +static ONE: Elem = Elem { + limbs: limbs![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + m: PhantomData, + encoding: PhantomData, +}; + +/// Operations and values needed by all curve operations. +pub struct CommonOps { + pub num_limbs: usize, + q: Modulus, + pub n: Elem, + + pub a: Elem, // Must be -3 mod q + pub b: Elem, + + // In all cases, `r`, `a`, and `b` may all alias each other. + elem_mul_mont: unsafe extern "C" fn(r: *mut Limb, a: *const Limb, b: *const Limb), + elem_sqr_mont: unsafe extern "C" fn(r: *mut Limb, a: *const Limb), + + point_add_jacobian_impl: unsafe extern "C" fn(r: *mut Limb, a: *const Limb, b: *const Limb), +} + +impl CommonOps { + #[inline] + pub fn elem_add(&self, a: &mut Elem, b: &Elem) { + let num_limbs = self.num_limbs; + limbs_add_assign_mod( + &mut a.limbs[..num_limbs], + &b.limbs[..num_limbs], + &self.q.p[..num_limbs], + ); + } + + #[inline] + pub fn elems_are_equal(&self, a: &Elem, b: &Elem) -> LimbMask { + limbs_equal_limbs_consttime(&a.limbs[..self.num_limbs], &b.limbs[..self.num_limbs]) + } + + #[inline] + pub fn elem_unencoded(&self, a: &Elem) -> Elem { + self.elem_product(a, &ONE) + } + + #[inline] + pub fn elem_mul(&self, a: &mut Elem, b: &Elem) { + binary_op_assign(self.elem_mul_mont, a, b) + } + + #[inline] + pub fn elem_product( + &self, + a: &Elem, + b: &Elem, + ) -> Elem<<(EA, EB) as ProductEncoding>::Output> + where + (EA, EB): ProductEncoding, + { + mul_mont(self.elem_mul_mont, a, b) + } + + #[inline] + pub fn elem_square(&self, a: &mut Elem) { + unary_op_assign(self.elem_sqr_mont, a); + } + + #[inline] + pub fn elem_squared(&self, a: &Elem) -> Elem { + unary_op(self.elem_sqr_mont, a) + } + + #[inline] + pub fn is_zero(&self, a: &elem::Elem) -> bool { + limbs_are_zero_constant_time(&a.limbs[..self.num_limbs]) == LimbMask::True + } + + pub fn elem_verify_is_not_zero(&self, a: &Elem) -> Result<(), error::Unspecified> { + if self.is_zero(a) { + Err(error::Unspecified) + } else { + Ok(()) + } + } + + pub fn point_sum(&self, a: &Point, b: &Point) -> Point { + let mut r = Point::new_at_infinity(); + unsafe { + (self.point_add_jacobian_impl)(r.xyz.as_mut_ptr(), a.xyz.as_ptr(), b.xyz.as_ptr()) + } + r + } + + pub fn point_x(&self, p: &Point) -> Elem { + let mut r = Elem::zero(); + r.limbs[..self.num_limbs].copy_from_slice(&p.xyz[0..self.num_limbs]); + r + } + + pub fn point_y(&self, p: &Point) -> Elem { + let mut r = Elem::zero(); + r.limbs[..self.num_limbs].copy_from_slice(&p.xyz[self.num_limbs..(2 * self.num_limbs)]); + r + } + + pub fn point_z(&self, p: &Point) -> Elem { + let mut r = Elem::zero(); + r.limbs[..self.num_limbs] + .copy_from_slice(&p.xyz[(2 * self.num_limbs)..(3 * self.num_limbs)]); + r + } +} + +struct Modulus { + p: [Limb; MAX_LIMBS], + rr: [Limb; MAX_LIMBS], +} + +/// Operations on private keys, for ECDH and ECDSA signing. +pub struct PrivateKeyOps { + pub common: &'static CommonOps, + elem_inv_squared: fn(a: &Elem) -> Elem, + point_mul_base_impl: fn(a: &Scalar) -> Point, + point_mul_impl: unsafe extern "C" fn( + r: *mut Limb, // [3][num_limbs] + p_scalar: *const Limb, // [num_limbs] + p_x: *const Limb, // [num_limbs] + p_y: *const Limb, // [num_limbs] + ), +} + +impl PrivateKeyOps { + #[inline(always)] + pub fn point_mul_base(&self, a: &Scalar) -> Point { + (self.point_mul_base_impl)(a) + } + + #[inline(always)] + pub fn point_mul(&self, p_scalar: &Scalar, (p_x, p_y): &(Elem, Elem)) -> Point { + let mut r = Point::new_at_infinity(); + unsafe { + (self.point_mul_impl)( + r.xyz.as_mut_ptr(), + p_scalar.limbs.as_ptr(), + p_x.limbs.as_ptr(), + p_y.limbs.as_ptr(), + ); + } + r + } + + #[inline] + pub fn elem_inverse_squared(&self, a: &Elem) -> Elem { + (self.elem_inv_squared)(a) + } +} + +/// Operations and values needed by all operations on public keys (ECDH +/// agreement and ECDSA verification). +pub struct PublicKeyOps { + pub common: &'static CommonOps, +} + +impl PublicKeyOps { + // The serialized bytes are in big-endian order, zero-padded. The limbs + // of `Elem` are in the native endianness, least significant limb to + // most significant limb. Besides the parsing, conversion, this also + // implements NIST SP 800-56A Step 2: "Verify that xQ and yQ are integers + // in the interval [0, p-1] in the case that q is an odd prime p[.]" + pub fn elem_parse(&self, input: &mut untrusted::Reader) -> Result, error::Unspecified> { + let encoded_value = input.read_bytes(self.common.num_limbs * LIMB_BYTES)?; + let parsed = elem_parse_big_endian_fixed_consttime(self.common, encoded_value)?; + let mut r = Elem::zero(); + // Montgomery encode (elem_to_mont). + // TODO: do something about this. + unsafe { + (self.common.elem_mul_mont)( + r.limbs.as_mut_ptr(), + parsed.limbs.as_ptr(), + self.common.q.rr.as_ptr(), + ) + } + Ok(r) + } +} + +// Operations used by both ECDSA signing and ECDSA verification. In general +// these must be side-channel resistant. +pub struct ScalarOps { + pub common: &'static CommonOps, + + scalar_inv_to_mont_impl: fn(a: &Scalar) -> Scalar, + scalar_mul_mont: unsafe extern "C" fn(r: *mut Limb, a: *const Limb, b: *const Limb), +} + +impl ScalarOps { + // The (maximum) length of a scalar, not including any padding. + pub fn scalar_bytes_len(&self) -> usize { + self.common.num_limbs * LIMB_BYTES + } + + /// Returns the modular inverse of `a` (mod `n`). Panics of `a` is zero, + /// because zero isn't invertible. + pub fn scalar_inv_to_mont(&self, a: &Scalar) -> Scalar { + assert!(!self.common.is_zero(a)); + (self.scalar_inv_to_mont_impl)(a) + } + + #[inline] + pub fn scalar_product( + &self, + a: &Scalar, + b: &Scalar, + ) -> Scalar<<(EA, EB) as ProductEncoding>::Output> + where + (EA, EB): ProductEncoding, + { + mul_mont(self.scalar_mul_mont, a, b) + } +} + +/// Operations on public scalars needed by ECDSA signature verification. +pub struct PublicScalarOps { + pub scalar_ops: &'static ScalarOps, + pub public_key_ops: &'static PublicKeyOps, + + // XXX: `PublicScalarOps` shouldn't depend on `PrivateKeyOps`, but it does + // temporarily until `twin_mul` is rewritten. + pub private_key_ops: &'static PrivateKeyOps, + + pub q_minus_n: Elem, +} + +impl PublicScalarOps { + #[inline] + pub fn scalar_as_elem(&self, a: &Scalar) -> Elem { + Elem { + limbs: a.limbs, + m: PhantomData, + encoding: PhantomData, + } + } + + pub fn elem_equals_vartime(&self, a: &Elem, b: &Elem) -> bool { + a.limbs[..self.public_key_ops.common.num_limbs] + == b.limbs[..self.public_key_ops.common.num_limbs] + } + + pub fn elem_less_than(&self, a: &Elem, b: &Elem) -> bool { + let num_limbs = self.public_key_ops.common.num_limbs; + limbs_less_than_limbs_vartime(&a.limbs[..num_limbs], &b.limbs[..num_limbs]) + } +} + +#[allow(non_snake_case)] +pub struct PrivateScalarOps { + pub scalar_ops: &'static ScalarOps, + + pub oneRR_mod_n: Scalar, // 1 * R**2 (mod n). TOOD: Use One. +} + +// This assumes n < q < 2*n. +pub fn elem_reduced_to_scalar(ops: &CommonOps, elem: &Elem) -> Scalar { + let num_limbs = ops.num_limbs; + let mut r_limbs = elem.limbs; + limbs_reduce_once_constant_time(&mut r_limbs[..num_limbs], &ops.n.limbs[..num_limbs]); + Scalar { + limbs: r_limbs, + m: PhantomData, + encoding: PhantomData, + } +} + +pub fn scalar_sum(ops: &CommonOps, a: &Scalar, b: &Scalar) -> Scalar { + let mut r = Scalar::zero(); + unsafe { + LIMBS_add_mod( + r.limbs.as_mut_ptr(), + a.limbs.as_ptr(), + b.limbs.as_ptr(), + ops.n.limbs.as_ptr(), + ops.num_limbs, + ) + } + r +} + +// Returns (`a` squared `squarings` times) * `b`. +fn elem_sqr_mul(ops: &CommonOps, a: &Elem, squarings: usize, b: &Elem) -> Elem { + debug_assert!(squarings >= 1); + let mut tmp = ops.elem_squared(a); + for _ in 1..squarings { + ops.elem_square(&mut tmp); + } + ops.elem_product(&tmp, b) +} + +// Sets `acc` = (`acc` squared `squarings` times) * `b`. +fn elem_sqr_mul_acc(ops: &CommonOps, acc: &mut Elem, squarings: usize, b: &Elem) { + debug_assert!(squarings >= 1); + for _ in 0..squarings { + ops.elem_square(acc); + } + ops.elem_mul(acc, b) +} + +#[inline] +pub fn elem_parse_big_endian_fixed_consttime( + ops: &CommonOps, + bytes: untrusted::Input, +) -> Result, error::Unspecified> { + parse_big_endian_fixed_consttime(ops, bytes, AllowZero::Yes, &ops.q.p[..ops.num_limbs]) +} + +#[inline] +pub fn scalar_parse_big_endian_fixed_consttime( + ops: &CommonOps, + bytes: untrusted::Input, +) -> Result { + parse_big_endian_fixed_consttime(ops, bytes, AllowZero::No, &ops.n.limbs[..ops.num_limbs]) +} + +#[inline] +pub fn scalar_parse_big_endian_variable( + ops: &CommonOps, + allow_zero: AllowZero, + bytes: untrusted::Input, +) -> Result { + let mut r = Scalar::zero(); + parse_big_endian_in_range_and_pad_consttime( + bytes, + allow_zero, + &ops.n.limbs[..ops.num_limbs], + &mut r.limbs[..ops.num_limbs], + )?; + Ok(r) +} + +pub fn scalar_parse_big_endian_partially_reduced_variable_consttime( + ops: &CommonOps, + allow_zero: AllowZero, + bytes: untrusted::Input, +) -> Result { + let mut r = Scalar::zero(); + parse_big_endian_in_range_partially_reduced_and_pad_consttime( + bytes, + allow_zero, + &ops.n.limbs[..ops.num_limbs], + &mut r.limbs[..ops.num_limbs], + )?; + Ok(r) +} + +fn parse_big_endian_fixed_consttime( + ops: &CommonOps, + bytes: untrusted::Input, + allow_zero: AllowZero, + max_exclusive: &[Limb], +) -> Result, error::Unspecified> { + if bytes.len() != ops.num_limbs * LIMB_BYTES { + return Err(error::Unspecified); + } + let mut r = elem::Elem::zero(); + parse_big_endian_in_range_and_pad_consttime( + bytes, + allow_zero, + max_exclusive, + &mut r.limbs[..ops.num_limbs], + )?; + Ok(r) +} + +extern "C" { + fn LIMBS_add_mod( + r: *mut Limb, + a: *const Limb, + b: *const Limb, + m: *const Limb, + num_limbs: c::size_t, + ); +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::test; + use alloc::{format, vec, vec::Vec}; + + const ZERO_SCALAR: Scalar = Scalar { + limbs: [0; MAX_LIMBS], + m: PhantomData, + encoding: PhantomData, + }; + + fn q_minus_n_plus_n_equals_0_test(ops: &PublicScalarOps) { + let cops = ops.scalar_ops.common; + let mut x = ops.q_minus_n; + cops.elem_add(&mut x, &cops.n); + assert!(cops.is_zero(&x)); + } + + #[test] + fn p256_q_minus_n_plus_n_equals_0_test() { + q_minus_n_plus_n_equals_0_test(&p256::PUBLIC_SCALAR_OPS); + } + + #[test] + fn p384_q_minus_n_plus_n_equals_0_test() { + q_minus_n_plus_n_equals_0_test(&p384::PUBLIC_SCALAR_OPS); + } + + #[test] + fn p256_elem_add_test() { + elem_add_test( + &p256::PUBLIC_SCALAR_OPS, + test_file!("ops/p256_elem_sum_tests.txt"), + ); + } + + #[test] + fn p384_elem_add_test() { + elem_add_test( + &p384::PUBLIC_SCALAR_OPS, + test_file!("ops/p384_elem_sum_tests.txt"), + ); + } + + fn elem_add_test(ops: &PublicScalarOps, test_file: test::File) { + test::run(test_file, |section, test_case| { + assert_eq!(section, ""); + + let cops = ops.public_key_ops.common; + let a = consume_elem(cops, test_case, "a"); + let b = consume_elem(cops, test_case, "b"); + let expected_sum = consume_elem(cops, test_case, "r"); + + let mut actual_sum = a; + ops.public_key_ops.common.elem_add(&mut actual_sum, &b); + assert_limbs_are_equal(cops, &actual_sum.limbs, &expected_sum.limbs); + + let mut actual_sum = b; + ops.public_key_ops.common.elem_add(&mut actual_sum, &a); + assert_limbs_are_equal(cops, &actual_sum.limbs, &expected_sum.limbs); + + Ok(()) + }) + } + + // XXX: There's no `GFp_p256_sub` in *ring*; it's logic is inlined into + // the point arithmetic functions. Thus, we can't test it. + + #[test] + fn p384_elem_sub_test() { + extern "C" { + fn GFp_p384_elem_sub(r: *mut Limb, a: *const Limb, b: *const Limb); + } + elem_sub_test( + &p384::COMMON_OPS, + GFp_p384_elem_sub, + test_file!("ops/p384_elem_sum_tests.txt"), + ); + } + + fn elem_sub_test( + ops: &CommonOps, + elem_sub: unsafe extern "C" fn(r: *mut Limb, a: *const Limb, b: *const Limb), + test_file: test::File, + ) { + test::run(test_file, |section, test_case| { + assert_eq!(section, ""); + + let a = consume_elem(ops, test_case, "a"); + let b = consume_elem(ops, test_case, "b"); + let r = consume_elem(ops, test_case, "r"); + + let mut actual_difference = Elem::::zero(); + unsafe { + elem_sub( + actual_difference.limbs.as_mut_ptr(), + r.limbs.as_ptr(), + b.limbs.as_ptr(), + ); + } + assert_limbs_are_equal(ops, &actual_difference.limbs, &a.limbs); + + let mut actual_difference = Elem::::zero(); + unsafe { + elem_sub( + actual_difference.limbs.as_mut_ptr(), + r.limbs.as_ptr(), + a.limbs.as_ptr(), + ); + } + assert_limbs_are_equal(ops, &actual_difference.limbs, &b.limbs); + + Ok(()) + }) + } + + // XXX: There's no `GFp_p256_div_by_2` in *ring*; it's logic is inlined + // into the point arithmetic functions. Thus, we can't test it. + + #[test] + fn p384_elem_div_by_2_test() { + extern "C" { + fn GFp_p384_elem_div_by_2(r: *mut Limb, a: *const Limb); + } + elem_div_by_2_test( + &p384::COMMON_OPS, + GFp_p384_elem_div_by_2, + test_file!("ops/p384_elem_div_by_2_tests.txt"), + ); + } + + fn elem_div_by_2_test( + ops: &CommonOps, + elem_div_by_2: unsafe extern "C" fn(r: *mut Limb, a: *const Limb), + test_file: test::File, + ) { + test::run(test_file, |section, test_case| { + assert_eq!(section, ""); + + let a = consume_elem(ops, test_case, "a"); + let r = consume_elem(ops, test_case, "r"); + + let mut actual_result = Elem::::zero(); + unsafe { + elem_div_by_2(actual_result.limbs.as_mut_ptr(), a.limbs.as_ptr()); + } + assert_limbs_are_equal(ops, &actual_result.limbs, &r.limbs); + + Ok(()) + }) + } + + // There is no `GFp_nistz256_neg` on other targets. + #[cfg(target_arch = "x86_64")] + #[test] + fn p256_elem_neg_test() { + extern "C" { + fn GFp_nistz256_neg(r: *mut Limb, a: *const Limb); + } + elem_neg_test( + &p256::COMMON_OPS, + GFp_nistz256_neg, + test_file!("ops/p256_elem_neg_tests.txt"), + ); + } + + #[test] + fn p384_elem_neg_test() { + extern "C" { + fn GFp_p384_elem_neg(r: *mut Limb, a: *const Limb); + } + elem_neg_test( + &p384::COMMON_OPS, + GFp_p384_elem_neg, + test_file!("ops/p384_elem_neg_tests.txt"), + ); + } + + fn elem_neg_test( + ops: &CommonOps, + elem_neg: unsafe extern "C" fn(r: *mut Limb, a: *const Limb), + test_file: test::File, + ) { + test::run(test_file, |section, test_case| { + assert_eq!(section, ""); + + let a = consume_elem(ops, test_case, "a"); + let b = consume_elem(ops, test_case, "b"); + + // Verify -a == b. + { + let mut actual_result = Elem::::zero(); + unsafe { + elem_neg(actual_result.limbs.as_mut_ptr(), a.limbs.as_ptr()); + } + assert_limbs_are_equal(ops, &actual_result.limbs, &b.limbs); + } + + // Verify -b == a. + { + let mut actual_result = Elem::::zero(); + unsafe { + elem_neg(actual_result.limbs.as_mut_ptr(), b.limbs.as_ptr()); + } + assert_limbs_are_equal(ops, &actual_result.limbs, &a.limbs); + } + + Ok(()) + }) + } + + #[test] + fn p256_elem_mul_test() { + elem_mul_test(&p256::COMMON_OPS, test_file!("ops/p256_elem_mul_tests.txt")); + } + + #[test] + fn p384_elem_mul_test() { + elem_mul_test(&p384::COMMON_OPS, test_file!("ops/p384_elem_mul_tests.txt")); + } + + fn elem_mul_test(ops: &CommonOps, test_file: test::File) { + test::run(test_file, |section, test_case| { + assert_eq!(section, ""); + + let mut a = consume_elem(ops, test_case, "a"); + let b = consume_elem(ops, test_case, "b"); + let r = consume_elem(ops, test_case, "r"); + ops.elem_mul(&mut a, &b); + assert_limbs_are_equal(ops, &a.limbs, &r.limbs); + + Ok(()) + }) + } + + #[test] + fn p256_scalar_mul_test() { + scalar_mul_test( + &p256::SCALAR_OPS, + test_file!("ops/p256_scalar_mul_tests.txt"), + ); + } + + #[test] + fn p384_scalar_mul_test() { + scalar_mul_test( + &p384::SCALAR_OPS, + test_file!("ops/p384_scalar_mul_tests.txt"), + ); + } + + fn scalar_mul_test(ops: &ScalarOps, test_file: test::File) { + test::run(test_file, |section, test_case| { + assert_eq!(section, ""); + let cops = ops.common; + let a = consume_scalar(cops, test_case, "a"); + let b = consume_scalar_mont(cops, test_case, "b"); + let expected_result = consume_scalar(cops, test_case, "r"); + let actual_result = ops.scalar_product(&a, &b); + assert_limbs_are_equal(cops, &actual_result.limbs, &expected_result.limbs); + + Ok(()) + }) + } + + #[test] + fn p256_scalar_square_test() { + extern "C" { + fn GFp_p256_scalar_sqr_rep_mont(r: *mut Limb, a: *const Limb, rep: Limb); + } + scalar_square_test( + &p256::SCALAR_OPS, + GFp_p256_scalar_sqr_rep_mont, + test_file!("ops/p256_scalar_square_tests.txt"), + ); + } + + // XXX: There's no `p384_scalar_square_test()` because there's no dedicated + // `GFp_p384_scalar_sqr_rep_mont()`. + + fn scalar_square_test( + ops: &ScalarOps, + sqr_rep: unsafe extern "C" fn(r: *mut Limb, a: *const Limb, rep: Limb), + test_file: test::File, + ) { + test::run(test_file, |section, test_case| { + assert_eq!(section, ""); + let cops = &ops.common; + let a = consume_scalar(cops, test_case, "a"); + let expected_result = consume_scalar(cops, test_case, "r"); + + { + let mut actual_result: Scalar = Scalar { + limbs: [0; MAX_LIMBS], + m: PhantomData, + encoding: PhantomData, + }; + unsafe { + sqr_rep(actual_result.limbs.as_mut_ptr(), a.limbs.as_ptr(), 1); + } + assert_limbs_are_equal(cops, &actual_result.limbs, &expected_result.limbs); + } + + { + let actual_result = ops.scalar_product(&a, &a); + assert_limbs_are_equal(cops, &actual_result.limbs, &expected_result.limbs); + } + + Ok(()) + }) + } + + #[test] + #[should_panic(expected = "!self.common.is_zero(a)")] + fn p256_scalar_inv_to_mont_zero_panic_test() { + let _ = p256::SCALAR_OPS.scalar_inv_to_mont(&ZERO_SCALAR); + } + + #[test] + #[should_panic(expected = "!self.common.is_zero(a)")] + fn p384_scalar_inv_to_mont_zero_panic_test() { + let _ = p384::SCALAR_OPS.scalar_inv_to_mont(&ZERO_SCALAR); + } + + #[test] + fn p256_point_sum_test() { + point_sum_test( + &p256::PRIVATE_KEY_OPS, + test_file!("ops/p256_point_sum_tests.txt"), + ); + } + + #[test] + fn p384_point_sum_test() { + point_sum_test( + &p384::PRIVATE_KEY_OPS, + test_file!("ops/p384_point_sum_tests.txt"), + ); + } + + fn point_sum_test(ops: &PrivateKeyOps, test_file: test::File) { + test::run(test_file, |section, test_case| { + assert_eq!(section, ""); + + let a = consume_jacobian_point(ops, test_case, "a"); + let b = consume_jacobian_point(ops, test_case, "b"); + let r_expected = consume_point(ops, test_case, "r"); + + let r_actual = ops.common.point_sum(&a, &b); + assert_point_actual_equals_expected(ops, &r_actual, &r_expected); + + Ok(()) + }); + } + + #[test] + fn p256_point_sum_mixed_test() { + extern "C" { + fn GFp_p256_point_add_affine( + r: *mut Limb, // [p256::COMMON_OPS.num_limbs*3] + a: *const Limb, // [p256::COMMON_OPS.num_limbs*3] + b: *const Limb, // [p256::COMMON_OPS.num_limbs*2] + ); + } + point_sum_mixed_test( + &p256::PRIVATE_KEY_OPS, + GFp_p256_point_add_affine, + test_file!("ops/p256_point_sum_mixed_tests.txt"), + ); + } + + // XXX: There is no `GFp_nistz384_point_add_affine()`. + + fn point_sum_mixed_test( + ops: &PrivateKeyOps, + point_add_affine: unsafe extern "C" fn( + r: *mut Limb, // [ops.num_limbs*3] + a: *const Limb, // [ops.num_limbs*3] + b: *const Limb, // [ops.num_limbs*2] + ), + test_file: test::File, + ) { + test::run(test_file, |section, test_case| { + assert_eq!(section, ""); + + let a = consume_jacobian_point(ops, test_case, "a"); + let b = consume_affine_point(ops, test_case, "b"); + let r_expected = consume_point(ops, test_case, "r"); + + let mut r_actual = Point::new_at_infinity(); + unsafe { + point_add_affine(r_actual.xyz.as_mut_ptr(), a.xyz.as_ptr(), b.xy.as_ptr()); + } + + assert_point_actual_equals_expected(ops, &r_actual, &r_expected); + + Ok(()) + }); + } + + #[test] + fn p256_point_double_test() { + extern "C" { + fn GFp_p256_point_double( + r: *mut Limb, // [p256::COMMON_OPS.num_limbs*3] + a: *const Limb, // [p256::COMMON_OPS.num_limbs*3] + ); + } + point_double_test( + &p256::PRIVATE_KEY_OPS, + GFp_p256_point_double, + test_file!("ops/p256_point_double_tests.txt"), + ); + } + + #[test] + fn p384_point_double_test() { + extern "C" { + fn GFp_nistz384_point_double( + r: *mut Limb, // [p384::COMMON_OPS.num_limbs*3] + a: *const Limb, // [p384::COMMON_OPS.num_limbs*3] + ); + } + point_double_test( + &p384::PRIVATE_KEY_OPS, + GFp_nistz384_point_double, + test_file!("ops/p384_point_double_tests.txt"), + ); + } + + fn point_double_test( + ops: &PrivateKeyOps, + point_double: unsafe extern "C" fn( + r: *mut Limb, // [ops.num_limbs*3] + a: *const Limb, // [ops.num_limbs*3] + ), + test_file: test::File, + ) { + test::run(test_file, |section, test_case| { + assert_eq!(section, ""); + + let a = consume_jacobian_point(ops, test_case, "a"); + let r_expected = consume_point(ops, test_case, "r"); + + let mut r_actual = Point::new_at_infinity(); + unsafe { + point_double(r_actual.xyz.as_mut_ptr(), a.xyz.as_ptr()); + } + + assert_point_actual_equals_expected(ops, &r_actual, &r_expected); + + Ok(()) + }); + } + + #[test] + fn p256_point_mul_test() { + point_mul_tests( + &p256::PRIVATE_KEY_OPS, + test_file!("ops/p256_point_mul_tests.txt"), + ); + } + + #[test] + fn p384_point_mul_test() { + point_mul_tests( + &p384::PRIVATE_KEY_OPS, + test_file!("ops/p384_point_mul_tests.txt"), + ); + } + + fn point_mul_tests(ops: &PrivateKeyOps, test_file: test::File) { + test::run(test_file, |section, test_case| { + assert_eq!(section, ""); + let p_scalar = consume_scalar(ops.common, test_case, "p_scalar"); + let (x, y) = match consume_point(ops, test_case, "p") { + TestPoint::Infinity => { + panic!("can't be inf."); + } + TestPoint::Affine(x, y) => (x, y), + }; + let expected_result = consume_point(ops, test_case, "r"); + let actual_result = ops.point_mul(&p_scalar, &(x, y)); + assert_point_actual_equals_expected(ops, &actual_result, &expected_result); + Ok(()) + }) + } + + #[test] + fn p256_point_mul_serialized_test() { + point_mul_serialized_test( + &p256::PRIVATE_KEY_OPS, + &p256::PUBLIC_KEY_OPS, + test_file!("ops/p256_point_mul_serialized_tests.txt"), + ); + } + + fn point_mul_serialized_test( + priv_ops: &PrivateKeyOps, + pub_ops: &PublicKeyOps, + test_file: test::File, + ) { + let cops = pub_ops.common; + + test::run(test_file, |section, test_case| { + assert_eq!(section, ""); + let p_scalar = consume_scalar(cops, test_case, "p_scalar"); + + let p = test_case.consume_bytes("p"); + let p = super::super::public_key::parse_uncompressed_point( + pub_ops, + untrusted::Input::from(&p), + ) + .expect("valid point"); + + let expected_result = test_case.consume_bytes("r"); + + let product = priv_ops.point_mul(&p_scalar, &p); + + let mut actual_result = vec![4u8; 1 + (2 * (cops.num_limbs * LIMB_BYTES))]; + { + let (x, y) = actual_result[1..].split_at_mut(cops.num_limbs * LIMB_BYTES); + super::super::private_key::big_endian_affine_from_jacobian( + priv_ops, + Some(x), + Some(y), + &product, + ) + .expect("successful encoding"); + } + + assert_eq!(expected_result, actual_result); + + Ok(()) + }) + } + + #[test] + fn p256_point_mul_base_test() { + point_mul_base_tests( + &p256::PRIVATE_KEY_OPS, + test_file!("ops/p256_point_mul_base_tests.txt"), + ); + } + + #[test] + fn p384_point_mul_base_test() { + point_mul_base_tests( + &p384::PRIVATE_KEY_OPS, + test_file!("ops/p384_point_mul_base_tests.txt"), + ); + } + + fn point_mul_base_tests(ops: &PrivateKeyOps, test_file: test::File) { + test::run(test_file, |section, test_case| { + assert_eq!(section, ""); + let g_scalar = consume_scalar(ops.common, test_case, "g_scalar"); + let expected_result = consume_point(ops, test_case, "r"); + let actual_result = ops.point_mul_base(&g_scalar); + assert_point_actual_equals_expected(ops, &actual_result, &expected_result); + Ok(()) + }) + } + + fn assert_point_actual_equals_expected( + ops: &PrivateKeyOps, + actual_point: &Point, + expected_point: &TestPoint, + ) { + let cops = ops.common; + let actual_x = &cops.point_x(&actual_point); + let actual_y = &cops.point_y(&actual_point); + let actual_z = &cops.point_z(&actual_point); + match expected_point { + TestPoint::Infinity => { + let zero = Elem::zero(); + assert_elems_are_equal(cops, &actual_z, &zero); + } + TestPoint::Affine(expected_x, expected_y) => { + let zz_inv = ops.elem_inverse_squared(&actual_z); + let x_aff = cops.elem_product(&actual_x, &zz_inv); + let y_aff = { + let zzzz_inv = cops.elem_squared(&zz_inv); + let zzz_inv = cops.elem_product(&actual_z, &zzzz_inv); + cops.elem_product(&actual_y, &zzz_inv) + }; + + assert_elems_are_equal(cops, &x_aff, &expected_x); + assert_elems_are_equal(cops, &y_aff, &expected_y); + } + } + } + + fn consume_jacobian_point( + ops: &PrivateKeyOps, + test_case: &mut test::TestCase, + name: &str, + ) -> Point { + let input = test_case.consume_string(name); + let elems = input.split(", ").collect::>(); + assert_eq!(elems.len(), 3); + let mut p = Point::new_at_infinity(); + consume_point_elem(ops.common, &mut p.xyz, &elems, 0); + consume_point_elem(ops.common, &mut p.xyz, &elems, 1); + consume_point_elem(ops.common, &mut p.xyz, &elems, 2); + p + } + + struct AffinePoint { + xy: [Limb; 2 * MAX_LIMBS], + } + + fn consume_affine_point( + ops: &PrivateKeyOps, + test_case: &mut test::TestCase, + name: &str, + ) -> AffinePoint { + let input = test_case.consume_string(name); + let elems = input.split(", ").collect::>(); + assert_eq!(elems.len(), 2); + let mut p = AffinePoint { + xy: [0; 2 * MAX_LIMBS], + }; + consume_point_elem(ops.common, &mut p.xy, &elems, 0); + consume_point_elem(ops.common, &mut p.xy, &elems, 1); + p + } + + fn consume_point_elem(ops: &CommonOps, limbs_out: &mut [Limb], elems: &[&str], i: usize) { + let bytes = test::from_hex(elems[i]).unwrap(); + let bytes = untrusted::Input::from(&bytes); + let r: Elem = elem_parse_big_endian_fixed_consttime(ops, bytes).unwrap(); + // XXX: “Transmute†this to `Elem` limbs. + limbs_out[(i * ops.num_limbs)..((i + 1) * ops.num_limbs)] + .copy_from_slice(&r.limbs[..ops.num_limbs]); + } + + enum TestPoint { + Infinity, + Affine(Elem, Elem), + } + + fn consume_point(ops: &PrivateKeyOps, test_case: &mut test::TestCase, name: &str) -> TestPoint { + fn consume_point_elem(ops: &CommonOps, elems: &[&str], i: usize) -> Elem { + let bytes = test::from_hex(elems[i]).unwrap(); + let bytes = untrusted::Input::from(&bytes); + let unencoded: Elem = + elem_parse_big_endian_fixed_consttime(ops, bytes).unwrap(); + // XXX: “Transmute†this to `Elem` limbs. + Elem { + limbs: unencoded.limbs, + m: PhantomData, + encoding: PhantomData, + } + } + + let input = test_case.consume_string(name); + if input == "inf" { + return TestPoint::Infinity; + } + let elems = input.split(", ").collect::>(); + assert_eq!(elems.len(), 2); + let x = consume_point_elem(ops.common, &elems, 0); + let y = consume_point_elem(ops.common, &elems, 1); + TestPoint::Affine(x, y) + } + + fn assert_elems_are_equal(ops: &CommonOps, a: &Elem, b: &Elem) { + assert_limbs_are_equal(ops, &a.limbs, &b.limbs) + } + + fn assert_limbs_are_equal( + ops: &CommonOps, + actual: &[Limb; MAX_LIMBS], + expected: &[Limb; MAX_LIMBS], + ) { + if actual[..ops.num_limbs] != expected[..ops.num_limbs] { + let mut actual_s = alloc::string::String::new(); + let mut expected_s = alloc::string::String::new(); + for j in 0..ops.num_limbs { + let formatted = format!("{:016x}", actual[ops.num_limbs - j - 1]); + actual_s.push_str(&formatted); + let formatted = format!("{:016x}", expected[ops.num_limbs - j - 1]); + expected_s.push_str(&formatted); + } + panic!( + "Actual != Expected,\nActual = {}, Expected = {}", + actual_s, expected_s + ); + } + } + + fn consume_elem(ops: &CommonOps, test_case: &mut test::TestCase, name: &str) -> Elem { + let bytes = consume_padded_bytes(ops, test_case, name); + let bytes = untrusted::Input::from(&bytes); + let r: Elem = elem_parse_big_endian_fixed_consttime(ops, bytes).unwrap(); + // XXX: “Transmute†this to an `Elem`. + Elem { + limbs: r.limbs, + m: PhantomData, + encoding: PhantomData, + } + } + + fn consume_scalar(ops: &CommonOps, test_case: &mut test::TestCase, name: &str) -> Scalar { + let bytes = test_case.consume_bytes(name); + let bytes = untrusted::Input::from(&bytes); + scalar_parse_big_endian_variable(ops, AllowZero::Yes, bytes).unwrap() + } + + fn consume_scalar_mont( + ops: &CommonOps, + test_case: &mut test::TestCase, + name: &str, + ) -> Scalar { + let bytes = test_case.consume_bytes(name); + let bytes = untrusted::Input::from(&bytes); + let s = scalar_parse_big_endian_variable(ops, AllowZero::Yes, bytes).unwrap(); + // “Transmute†it to a `Scalar`. + Scalar { + limbs: s.limbs, + m: PhantomData, + encoding: PhantomData, + } + } + + fn consume_padded_bytes( + ops: &CommonOps, + test_case: &mut test::TestCase, + name: &str, + ) -> Vec { + let unpadded_bytes = test_case.consume_bytes(name); + let mut bytes = vec![0; (ops.num_limbs * LIMB_BYTES) - unpadded_bytes.len()]; + bytes.extend(&unpadded_bytes); + bytes + } +} + +mod elem; +pub mod p256; +pub mod p384; diff --git a/vendor/ring/src/ec/suite_b/ops/elem.rs b/vendor/ring/src/ec/suite_b/ops/elem.rs new file mode 100644 index 00000000..32c791a4 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/elem.rs @@ -0,0 +1,120 @@ +// Copyright 2017 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use crate::{ + arithmetic::montgomery::{Encoding, ProductEncoding}, + limb::{Limb, LIMB_BITS}, +}; +use core::marker::PhantomData; + +/// Elements of ℤ/mℤ for some modulus *m*. Elements are always fully reduced +/// with respect to *m*; i.e. the 0 <= x < m for every value x. +#[derive(Clone, Copy)] +pub struct Elem { + // XXX: pub + pub limbs: [Limb; MAX_LIMBS], + + /// The modulus *m* for the ring ℤ/mℤ for which this element is a value. + pub m: PhantomData, + + /// The number of Montgomery factors that need to be canceled out from + /// `value` to get the actual value. + pub encoding: PhantomData, +} + +impl Elem { + // There's no need to convert `value` to the Montgomery domain since + // 0 * R**2 (mod m) == 0, so neither the modulus nor the encoding are needed + // as inputs for constructing a zero-valued element. + pub fn zero() -> Self { + Self { + limbs: [0; MAX_LIMBS], + m: PhantomData, + encoding: PhantomData, + } + } +} + +#[inline] +pub fn mul_mont( + f: unsafe extern "C" fn(r: *mut Limb, a: *const Limb, b: *const Limb), + a: &Elem, + b: &Elem, +) -> Elem::Output> +where + (EA, EB): ProductEncoding, +{ + binary_op(f, a, b) +} + +// let r = f(a, b); return r; +#[inline] +pub fn binary_op( + f: unsafe extern "C" fn(r: *mut Limb, a: *const Limb, b: *const Limb), + a: &Elem, + b: &Elem, +) -> Elem { + let mut r = Elem { + limbs: [0; MAX_LIMBS], + m: PhantomData, + encoding: PhantomData, + }; + unsafe { f(r.limbs.as_mut_ptr(), a.limbs.as_ptr(), b.limbs.as_ptr()) } + r +} + +// a := f(a, b); +#[inline] +pub fn binary_op_assign( + f: unsafe extern "C" fn(r: *mut Limb, a: *const Limb, b: *const Limb), + a: &mut Elem, + b: &Elem, +) { + unsafe { f(a.limbs.as_mut_ptr(), a.limbs.as_ptr(), b.limbs.as_ptr()) } +} + +// let r = f(a); return r; +#[inline] +pub fn unary_op( + f: unsafe extern "C" fn(r: *mut Limb, a: *const Limb), + a: &Elem, +) -> Elem { + let mut r = Elem { + limbs: [0; MAX_LIMBS], + m: PhantomData, + encoding: PhantomData, + }; + unsafe { f(r.limbs.as_mut_ptr(), a.limbs.as_ptr()) } + r +} + +// a := f(a); +#[inline] +pub fn unary_op_assign( + f: unsafe extern "C" fn(r: *mut Limb, a: *const Limb), + a: &mut Elem, +) { + unsafe { f(a.limbs.as_mut_ptr(), a.limbs.as_ptr()) } +} + +// a := f(a, a); +#[inline] +pub fn unary_op_from_binary_op_assign( + f: unsafe extern "C" fn(r: *mut Limb, a: *const Limb, b: *const Limb), + a: &mut Elem, +) { + unsafe { f(a.limbs.as_mut_ptr(), a.limbs.as_ptr(), a.limbs.as_ptr()) } +} + +pub const MAX_LIMBS: usize = (384 + (LIMB_BITS - 1)) / LIMB_BITS; diff --git a/vendor/ring/src/ec/suite_b/ops/p256.rs b/vendor/ring/src/ec/suite_b/ops/p256.rs new file mode 100644 index 00000000..7a3b5a72 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p256.rs @@ -0,0 +1,335 @@ +// Copyright 2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use super::{ + elem::{binary_op, binary_op_assign}, + elem_sqr_mul, elem_sqr_mul_acc, Modulus, *, +}; +use core::marker::PhantomData; + +macro_rules! p256_limbs { + [ $($limb:expr),+ ] => { + limbs![$($limb),+, 0, 0, 0, 0] + }; +} + +pub static COMMON_OPS: CommonOps = CommonOps { + num_limbs: 256 / LIMB_BITS, + + q: Modulus { + p: p256_limbs![ + 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000001, + 0xffffffff + ], + rr: p256_limbs![ + 0x00000003, 0x00000000, 0xffffffff, 0xfffffffb, 0xfffffffe, 0xffffffff, 0xfffffffd, + 0x00000004 + ], + }, + + n: Elem { + limbs: p256_limbs![ + 0xfc632551, 0xf3b9cac2, 0xa7179e84, 0xbce6faad, 0xffffffff, 0xffffffff, 0x00000000, + 0xffffffff + ], + m: PhantomData, + encoding: PhantomData, // Unencoded + }, + + a: Elem { + limbs: p256_limbs![ + 0xfffffffc, 0xffffffff, 0xffffffff, 0x00000003, 0x00000000, 0x00000000, 0x00000004, + 0xfffffffc + ], + m: PhantomData, + encoding: PhantomData, // R + }, + b: Elem { + limbs: p256_limbs![ + 0x29c4bddf, 0xd89cdf62, 0x78843090, 0xacf005cd, 0xf7212ed6, 0xe5a220ab, 0x04874834, + 0xdc30061d + ], + m: PhantomData, + encoding: PhantomData, // R + }, + + elem_mul_mont: GFp_p256_mul_mont, + elem_sqr_mont: GFp_p256_sqr_mont, + + point_add_jacobian_impl: GFp_p256_point_add, +}; + +pub static PRIVATE_KEY_OPS: PrivateKeyOps = PrivateKeyOps { + common: &COMMON_OPS, + elem_inv_squared: p256_elem_inv_squared, + point_mul_base_impl: p256_point_mul_base_impl, + point_mul_impl: GFp_p256_point_mul, +}; + +fn p256_elem_inv_squared(a: &Elem) -> Elem { + // Calculate a**-2 (mod q) == a**(q - 3) (mod q) + // + // The exponent (q - 3) is: + // + // 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc + + #[inline] + fn sqr_mul(a: &Elem, squarings: usize, b: &Elem) -> Elem { + elem_sqr_mul(&COMMON_OPS, a, squarings, b) + } + + #[inline] + fn sqr_mul_acc(a: &mut Elem, squarings: usize, b: &Elem) { + elem_sqr_mul_acc(&COMMON_OPS, a, squarings, b) + } + + let b_1 = &a; + let b_11 = sqr_mul(b_1, 1, b_1); + let b_111 = sqr_mul(&b_11, 1, b_1); + let f_11 = sqr_mul(&b_111, 3, &b_111); + let fff = sqr_mul(&f_11, 6, &f_11); + let fff_111 = sqr_mul(&fff, 3, &b_111); + let fffffff_11 = sqr_mul(&fff_111, 15, &fff_111); + let ffffffff = sqr_mul(&fffffff_11, 2, &b_11); + + // ffffffff00000001 + let mut acc = sqr_mul(&ffffffff, 31 + 1, b_1); + + // ffffffff00000001000000000000000000000000ffffffff + sqr_mul_acc(&mut acc, 96 + 32, &ffffffff); + + // ffffffff00000001000000000000000000000000ffffffffffffffff + sqr_mul_acc(&mut acc, 32, &ffffffff); + + // ffffffff00000001000000000000000000000000fffffffffffffffffffffff_11 + sqr_mul_acc(&mut acc, 30, &fffffff_11); + + // ffffffff00000001000000000000000000000000fffffffffffffffffffffffc + COMMON_OPS.elem_square(&mut acc); + COMMON_OPS.elem_square(&mut acc); + + acc +} + +fn p256_point_mul_base_impl(g_scalar: &Scalar) -> Point { + extern "C" { + fn GFp_p256_point_mul_base( + r: *mut Limb, // [3][COMMON_OPS.num_limbs] + g_scalar: *const Limb, // [COMMON_OPS.num_limbs] + ); + } + + let mut r = Point::new_at_infinity(); + unsafe { + GFp_p256_point_mul_base(r.xyz.as_mut_ptr(), g_scalar.limbs.as_ptr()); + } + r +} + +pub static PUBLIC_KEY_OPS: PublicKeyOps = PublicKeyOps { + common: &COMMON_OPS, +}; + +pub static SCALAR_OPS: ScalarOps = ScalarOps { + common: &COMMON_OPS, + scalar_inv_to_mont_impl: p256_scalar_inv_to_mont, + scalar_mul_mont: GFp_p256_scalar_mul_mont, +}; + +pub static PUBLIC_SCALAR_OPS: PublicScalarOps = PublicScalarOps { + scalar_ops: &SCALAR_OPS, + public_key_ops: &PUBLIC_KEY_OPS, + private_key_ops: &PRIVATE_KEY_OPS, + + q_minus_n: Elem { + limbs: p256_limbs![0x039cdaae, 0x0c46353d, 0x58e8617b, 0x43190553, 0, 0, 0, 0], + m: PhantomData, + encoding: PhantomData, // Unencoded + }, +}; + +pub static PRIVATE_SCALAR_OPS: PrivateScalarOps = PrivateScalarOps { + scalar_ops: &SCALAR_OPS, + + oneRR_mod_n: Scalar { + limbs: p256_limbs![ + 0xbe79eea2, 0x83244c95, 0x49bd6fa6, 0x4699799c, 0x2b6bec59, 0x2845b239, 0xf3d95620, + 0x66e12d94 + ], + m: PhantomData, + encoding: PhantomData, // R + }, +}; + +fn p256_scalar_inv_to_mont(a: &Scalar) -> Scalar { + // Calculate the modular inverse of scalar |a| using Fermat's Little + // Theorem: + // + // a**-1 (mod n) == a**(n - 2) (mod n) + // + // The exponent (n - 2) is: + // + // 0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f + + #[inline] + fn mul(a: &Scalar, b: &Scalar) -> Scalar { + binary_op(GFp_p256_scalar_mul_mont, a, b) + } + + #[inline] + fn sqr(a: &Scalar) -> Scalar { + let mut tmp = Scalar::zero(); + unsafe { GFp_p256_scalar_sqr_rep_mont(tmp.limbs.as_mut_ptr(), a.limbs.as_ptr(), 1) } + tmp + } + + // Returns (`a` squared `squarings` times) * `b`. + fn sqr_mul(a: &Scalar, squarings: Limb, b: &Scalar) -> Scalar { + debug_assert!(squarings >= 1); + let mut tmp = Scalar::zero(); + unsafe { GFp_p256_scalar_sqr_rep_mont(tmp.limbs.as_mut_ptr(), a.limbs.as_ptr(), squarings) } + mul(&tmp, b) + } + + // Sets `acc` = (`acc` squared `squarings` times) * `b`. + fn sqr_mul_acc(acc: &mut Scalar, squarings: Limb, b: &Scalar) { + debug_assert!(squarings >= 1); + unsafe { + GFp_p256_scalar_sqr_rep_mont(acc.limbs.as_mut_ptr(), acc.limbs.as_ptr(), squarings) + } + binary_op_assign(GFp_p256_scalar_mul_mont, acc, b); + } + + fn to_mont(a: &Scalar) -> Scalar { + static N_RR: Scalar = Scalar { + limbs: p256_limbs![ + 0xbe79eea2, 0x83244c95, 0x49bd6fa6, 0x4699799c, 0x2b6bec59, 0x2845b239, 0xf3d95620, + 0x66e12d94 + ], + m: PhantomData, + encoding: PhantomData, + }; + binary_op(GFp_p256_scalar_mul_mont, a, &N_RR) + } + + // Indexes into `d`. + const B_1: usize = 0; + const B_10: usize = 1; + const B_11: usize = 2; + const B_101: usize = 3; + const B_111: usize = 4; + const B_1111: usize = 5; + const B_10101: usize = 6; + const B_101111: usize = 7; + const DIGIT_COUNT: usize = 8; + + let mut d = [Scalar::zero(); DIGIT_COUNT]; + + d[B_1] = to_mont(a); + d[B_10] = sqr(&d[B_1]); + d[B_11] = mul(&d[B_10], &d[B_1]); + d[B_101] = mul(&d[B_10], &d[B_11]); + d[B_111] = mul(&d[B_101], &d[B_10]); + let b_1010 = sqr(&d[B_101]); + d[B_1111] = mul(&b_1010, &d[B_101]); + d[B_10101] = sqr_mul(&b_1010, 0 + 1, &d[B_1]); + let b_101010 = sqr(&d[B_10101]); + d[B_101111] = mul(&b_101010, &d[B_101]); + let b_111111 = mul(&b_101010, &d[B_10101]); + + let ff = sqr_mul(&b_111111, 0 + 2, &d[B_11]); + let ffff = sqr_mul(&ff, 0 + 8, &ff); + let ffffffff = sqr_mul(&ffff, 0 + 16, &ffff); + + // ffffffff00000000ffffffff + let mut acc = sqr_mul(&ffffffff, 32 + 32, &ffffffff); + + // ffffffff00000000ffffffffffffffff + sqr_mul_acc(&mut acc, 0 + 32, &ffffffff); + + // The rest of the exponent, in binary, is: + // + // 1011110011100110111110101010110110100111000101111001111010000100 + // 1111001110111001110010101100001011111100011000110010010101001111 + + static REMAINING_WINDOWS: [(u8, u8); 26] = [ + (6, B_101111 as u8), + (2 + 3, B_111 as u8), + (2 + 2, B_11 as u8), + (1 + 4, B_1111 as u8), + (5, B_10101 as u8), + (1 + 3, B_101 as u8), + (3, B_101 as u8), + (3, B_101 as u8), + (2 + 3, B_111 as u8), + (3 + 6, B_101111 as u8), + (2 + 4, B_1111 as u8), + (1 + 1, B_1 as u8), + (4 + 1, B_1 as u8), + (2 + 4, B_1111 as u8), + (2 + 3, B_111 as u8), + (1 + 3, B_111 as u8), + (2 + 3, B_111 as u8), + (2 + 3, B_101 as u8), + (1 + 2, B_11 as u8), + (4 + 6, B_101111 as u8), + (2, B_11 as u8), + (3 + 2, B_11 as u8), + (3 + 2, B_11 as u8), + (2 + 1, B_1 as u8), + (2 + 5, B_10101 as u8), + (2 + 4, B_1111 as u8), + ]; + + for &(squarings, digit) in &REMAINING_WINDOWS { + sqr_mul_acc(&mut acc, Limb::from(squarings), &d[usize::from(digit)]); + } + + acc +} + +extern "C" { + pub(super) fn GFp_p256_mul_mont( + r: *mut Limb, // [COMMON_OPS.num_limbs] + a: *const Limb, // [COMMON_OPS.num_limbs] + b: *const Limb, // [COMMON_OPS.num_limbs] + ); + pub(super) fn GFp_p256_sqr_mont( + r: *mut Limb, // [COMMON_OPS.num_limbs] + a: *const Limb, // [COMMON_OPS.num_limbs] + ); + + fn GFp_p256_point_add( + r: *mut Limb, // [3][COMMON_OPS.num_limbs] + a: *const Limb, // [3][COMMON_OPS.num_limbs] + b: *const Limb, // [3][COMMON_OPS.num_limbs] + ); + fn GFp_p256_point_mul( + r: *mut Limb, // [3][COMMON_OPS.num_limbs] + p_scalar: *const Limb, // [COMMON_OPS.num_limbs] + p_x: *const Limb, // [COMMON_OPS.num_limbs] + p_y: *const Limb, // [COMMON_OPS.num_limbs] + ); + + fn GFp_p256_scalar_mul_mont( + r: *mut Limb, // [COMMON_OPS.num_limbs] + a: *const Limb, // [COMMON_OPS.num_limbs] + b: *const Limb, // [COMMON_OPS.num_limbs] + ); + fn GFp_p256_scalar_sqr_rep_mont( + r: *mut Limb, // [COMMON_OPS.num_limbs] + a: *const Limb, // [COMMON_OPS.num_limbs] + rep: Limb, + ); +} diff --git a/vendor/ring/src/ec/suite_b/ops/p256_elem_mul_tests.txt b/vendor/ring/src/ec/suite_b/ops/p256_elem_mul_tests.txt new file mode 100644 index 00000000..b83120d2 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p256_elem_mul_tests.txt @@ -0,0 +1,32 @@ + +a = 00 +b = 00 +r = 00 + +a = 00 +b = ffffffff00000001000000000000000000000000fffffffffffffffffffffffe +r = 00 + +a = 01 +b = ffffffff00000001000000000000000000000000fffffffffffffffffffffffe +r = fffffffd00000002fffffffdffffffff00000001fffffffcffffffff + +a = 02 +b = ffffffff00000001000000000000000000000000fffffffffffffffffffffffe +r = 01fffffffa00000005fffffffbfffffffe00000003fffffff9fffffffe + +a = 03 +b = ffffffff00000001000000000000000000000000fffffffffffffffffffffffe +r = 02fffffff700000008fffffff9fffffffd00000005fffffff6fffffffd + +a = 7fffffff800000008000000000000000000000007fffffffffffffffffffffff +b = 02 +r = fffffffd00000002fffffffdffffffff00000001fffffffcffffffff + +a = 7fffffff80000000800000000000000000000000800000000000000000000000 +b = 02 +r = fffffffe00000003fffffffd0000000200000001fffffffe0000000300000000 + +a = 8000000000000000000000000000000000000000000000000000000000000000 +b = 02 +r = 01 diff --git a/vendor/ring/src/ec/suite_b/ops/p256_elem_neg_tests.txt b/vendor/ring/src/ec/suite_b/ops/p256_elem_neg_tests.txt new file mode 100644 index 00000000..089a6417 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p256_elem_neg_tests.txt @@ -0,0 +1,24 @@ + +a = 00 +b = 00 + +a = 01 +b = ffffffff00000001000000000000000000000000fffffffffffffffffffffffe + +a = 02 +b = ffffffff00000001000000000000000000000000fffffffffffffffffffffffd + +a = 03 +b = ffffffff00000001000000000000000000000000fffffffffffffffffffffffc + +a = ffffffff00000001000000000000000000000000fffffffffffffffffffffffe +b = 01 + +a = 7fffffff800000008000000000000000000000007fffffffffffffffffffffff +b = 7fffffff80000000800000000000000000000000800000000000000000000000 + +a = 7fffffff80000000800000000000000000000000800000000000000000000000 +b = 7fffffff800000008000000000000000000000007fffffffffffffffffffffff + +a = 8000000000000000000000000000000000000000000000000000000000000000 +b = 7fffffff00000001000000000000000000000000ffffffffffffffffffffffff diff --git a/vendor/ring/src/ec/suite_b/ops/p256_elem_sum_tests.txt b/vendor/ring/src/ec/suite_b/ops/p256_elem_sum_tests.txt new file mode 100644 index 00000000..e4967eda --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p256_elem_sum_tests.txt @@ -0,0 +1,1048 @@ +# Montgomery Arithmetic; values are in the range [0, q). + + +a = 00 +b = 00 +r = 00 + +a = 00 +b = 01 +r = 01 + +a = 00 +b = ffffffff00000001000000000000000000000000fffffffffffffffffffffffe +r = ffffffff00000001000000000000000000000000fffffffffffffffffffffffe + +a = 01 +b = ffffffff00000001000000000000000000000000fffffffffffffffffffffffe +r = 00 + +a = 02 +b = ffffffff00000001000000000000000000000000fffffffffffffffffffffffe +r = 01 + +a = 03 +b = ffffffff00000001000000000000000000000000fffffffffffffffffffffffe +r = 02 + +a = 7fffffff800000008000000000000000000000007fffffffffffffffffffffff +b = 7fffffff80000000800000000000000000000000800000000000000000000000 +r = 00 + +a = 7fffffff80000000800000000000000000000000800000000000000000000000 +b = 7fffffff80000000800000000000000000000000800000000000000000000000 +r = 01 + +a = 8000000000000000000000000000000000000000000000000000000000000000 +b = 8000000000000000000000000000000000000000000000000000000000000000 +r = fffffffeffffffffffffffffffffffff000000000000000000000001 + +a = 8000000000000000000000000000000000000000000000000000000000000000 +b = 8000000000000000000000000000000000000000000000000000000000000000 +r = fffffffeffffffffffffffffffffffff000000000000000000000001 + +a = 800000007fffffff7fffffffffffffffffffffff800000000000000000000001 +b = 7fffffff800000008000000000000000000000007fffffffffffffffffffffff +r = fffffffeffffffffffffffffffffffff000000000000000000000001 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 8000000000000000000000000000000000000000000000000000000000000000 +r = fffffffeffffffffffffffffffffffff000000000000000000000000 + +a = 800000007fffffff7fffffffffffffffffffffff800000000000000000000000 +b = 7fffffff800000008000000000000000000000007fffffffffffffffffffffff +r = fffffffeffffffffffffffffffffffff000000000000000000000000 + +# Carry Propagation. + +a = ff +b = 01 +r = 0100 + +a = 01ff +b = 01 +r = 0200 + +a = 03ff +b = 01 +r = 0400 + +a = 07ff +b = 01 +r = 0800 + +a = 0fff +b = 01 +r = 1000 + +a = 1fff +b = 01 +r = 2000 + +a = 3fff +b = 01 +r = 4000 + +a = 7fff +b = 01 +r = 8000 + +a = ffff +b = 01 +r = 010000 + +a = 01ffff +b = 01 +r = 020000 + +a = 03ffff +b = 01 +r = 040000 + +a = 07ffff +b = 01 +r = 080000 + +a = 0fffff +b = 01 +r = 100000 + +a = 1fffff +b = 01 +r = 200000 + +a = 3fffff +b = 01 +r = 400000 + +a = 7fffff +b = 01 +r = 800000 + +a = ffffff +b = 01 +r = 01000000 + +a = 01ffffff +b = 01 +r = 02000000 + +a = 03ffffff +b = 01 +r = 04000000 + +a = 07ffffff +b = 01 +r = 08000000 + +a = 0fffffff +b = 01 +r = 10000000 + +a = 1fffffff +b = 01 +r = 20000000 + +a = 3fffffff +b = 01 +r = 40000000 + +a = 7fffffff +b = 01 +r = 80000000 + +a = ffffffff +b = 01 +r = 0100000000 + +a = 01ffffffff +b = 01 +r = 0200000000 + +a = 03ffffffff +b = 01 +r = 0400000000 + +a = 07ffffffff +b = 01 +r = 0800000000 + +a = 0fffffffff +b = 01 +r = 1000000000 + +a = 1fffffffff +b = 01 +r = 2000000000 + +a = 3fffffffff +b = 01 +r = 4000000000 + +a = 7fffffffff +b = 01 +r = 8000000000 + +a = ffffffffff +b = 01 +r = 010000000000 + +a = 01ffffffffff +b = 01 +r = 020000000000 + +a = 03ffffffffff +b = 01 +r = 040000000000 + +a = 07ffffffffff +b = 01 +r = 080000000000 + +a = 0fffffffffff +b = 01 +r = 100000000000 + +a = 1fffffffffff +b = 01 +r = 200000000000 + +a = 3fffffffffff +b = 01 +r = 400000000000 + +a = 7fffffffffff +b = 01 +r = 800000000000 + +a = ffffffffffff +b = 01 +r = 01000000000000 + +a = 01ffffffffffff +b = 01 +r = 02000000000000 + +a = 03ffffffffffff +b = 01 +r = 04000000000000 + +a = 07ffffffffffff +b = 01 +r = 08000000000000 + +a = 0fffffffffffff +b = 01 +r = 10000000000000 + +a = 1fffffffffffff +b = 01 +r = 20000000000000 + +a = 3fffffffffffff +b = 01 +r = 40000000000000 + +a = 7fffffffffffff +b = 01 +r = 80000000000000 + +a = ffffffffffffff +b = 01 +r = 0100000000000000 + +a = 01ffffffffffffff +b = 01 +r = 0200000000000000 + +a = 03ffffffffffffff +b = 01 +r = 0400000000000000 + +a = 07ffffffffffffff +b = 01 +r = 0800000000000000 + +a = 0fffffffffffffff +b = 01 +r = 1000000000000000 + +a = 1fffffffffffffff +b = 01 +r = 2000000000000000 + +a = 3fffffffffffffff +b = 01 +r = 4000000000000000 + +a = 7fffffffffffffff +b = 01 +r = 8000000000000000 + +a = ffffffffffffffff +b = 01 +r = 010000000000000000 + +a = 01ffffffffffffffff +b = 01 +r = 020000000000000000 + +a = 03ffffffffffffffff +b = 01 +r = 040000000000000000 + +a = 07ffffffffffffffff +b = 01 +r = 080000000000000000 + +a = 0fffffffffffffffff +b = 01 +r = 100000000000000000 + +a = 1fffffffffffffffff +b = 01 +r = 200000000000000000 + +a = 3fffffffffffffffff +b = 01 +r = 400000000000000000 + +a = 7fffffffffffffffff +b = 01 +r = 800000000000000000 + +a = ffffffffffffffffff +b = 01 +r = 01000000000000000000 + +a = 01ffffffffffffffffff +b = 01 +r = 02000000000000000000 + +a = 03ffffffffffffffffff +b = 01 +r = 04000000000000000000 + +a = 07ffffffffffffffffff +b = 01 +r = 08000000000000000000 + +a = 0fffffffffffffffffff +b = 01 +r = 10000000000000000000 + +a = 1fffffffffffffffffff +b = 01 +r = 20000000000000000000 + +a = 3fffffffffffffffffff +b = 01 +r = 40000000000000000000 + +a = 7fffffffffffffffffff +b = 01 +r = 80000000000000000000 + +a = ffffffffffffffffffff +b = 01 +r = 0100000000000000000000 + +a = 01ffffffffffffffffffff +b = 01 +r = 0200000000000000000000 + +a = 03ffffffffffffffffffff +b = 01 +r = 0400000000000000000000 + +a = 07ffffffffffffffffffff +b = 01 +r = 0800000000000000000000 + +a = 0fffffffffffffffffffff +b = 01 +r = 1000000000000000000000 + +a = 1fffffffffffffffffffff +b = 01 +r = 2000000000000000000000 + +a = 3fffffffffffffffffffff +b = 01 +r = 4000000000000000000000 + +a = 7fffffffffffffffffffff +b = 01 +r = 8000000000000000000000 + +a = ffffffffffffffffffffff +b = 01 +r = 010000000000000000000000 + +a = 01ffffffffffffffffffffff +b = 01 +r = 020000000000000000000000 + +a = 03ffffffffffffffffffffff +b = 01 +r = 040000000000000000000000 + +a = 07ffffffffffffffffffffff +b = 01 +r = 080000000000000000000000 + +a = 0fffffffffffffffffffffff +b = 01 +r = 100000000000000000000000 + +a = 1fffffffffffffffffffffff +b = 01 +r = 200000000000000000000000 + +a = 3fffffffffffffffffffffff +b = 01 +r = 400000000000000000000000 + +a = 7fffffffffffffffffffffff +b = 01 +r = 800000000000000000000000 + +a = ffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000 + +a = 01ffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000 + +a = 03ffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000 + +a = 07ffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000 + +a = 0fffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000 + +a = 1fffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000 + +a = 3fffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000 + +a = 7fffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000 + +a = ffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000 + +a = 01ffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000 + +a = 03ffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000 + +a = 07ffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000 + +a = 0fffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000 + +a = 1fffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000 + +a = 3fffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000 + +a = 7fffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000 + +a = ffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000 + +a = ffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/ring/src/ec/suite_b/ops/p256_point_double_tests.txt b/vendor/ring/src/ec/suite_b/ops/p256_point_double_tests.txt new file mode 100644 index 00000000..b886532c --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p256_point_double_tests.txt @@ -0,0 +1,20 @@ + +# G doubled once. +a = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +r = f6bb32e43dcf3a3b732205038d1490d9aa6ae3c1a433827d850046d410ddd64d, 78c577510a5b8a3b19a8fb0e92042dbe152cd7cbeb236ff82f3648d361bee1a5 + +# Point at infinity doubled. This uses the (0, 0, 0) representation of +# the point at infinity instead of the classic (1, 1, 0) +# representation. +a = 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# Point at infinity doubled. This form is the result of multiplying +# n * G (affine), which is more interesting than the above case +# because only the Z coordinate is zero. +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 0000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# (n - 1) * G doubled. +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +r = f6bb32e43dcf3a3b732205038d1490d9aa6ae3c1a433827d850046d410ddd64d, 873a88adf5a475c5e65704f16dfbd241ead3283514dc9007d0c9b72c9e411e5a diff --git a/vendor/ring/src/ec/suite_b/ops/p256_point_mul_base_tests.txt b/vendor/ring/src/ec/suite_b/ops/p256_point_mul_base_tests.txt new file mode 100644 index 00000000..55d52c00 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p256_point_mul_base_tests.txt @@ -0,0 +1,1280 @@ + +g_scalar = 00 +r = inf + +g_scalar = 01 +r = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a + +g_scalar = 02 +r = f6bb32e43dcf3a3b732205038d1490d9aa6ae3c1a433827d850046d410ddd64d, 78c577510a5b8a3b19a8fb0e92042dbe152cd7cbeb236ff82f3648d361bee1a5 + +g_scalar = 03 +r = 26936a3fb6ff747e66ad77dd87cbbc98b027f84a087d81fbffac3f904eebc127, d5f06a29e587cc07788208311a2ee98e583e47ad0861fe1ab04c5c1fc983a7eb + +g_scalar = 04 +r = 577362f541b0176b0cdaacace8100af24650a6edc623c17374b0b50d46918dcc, 84b14c394c5ab8636b6c36dee5ddd22e17628471fad6f4472d96f24ce4cbaba6 + +g_scalar = 05 +r = c9079605890523c8941cb5aad076c20c90ec649a94b9537dbe1b8aaec45c61f5, 73a076bb2dd1e9163540a9877e7a1f6873c568efe5eb882beb309b4ae7ba4f10 + +g_scalar = 06 +r = 13074b5954213673d50a961a5b17a3ad55ae744f346cee3e403947373e77664a, a4c9916d4a07f75ff424d44cef639f11299c2b53adff14b593d36220d377e44b + +g_scalar = 07 +r = 13ba5119c3123e03f43eaab50c23bb082bd20213d23c00f70746354ea0173b4f, eaedd9156e240867ef933bdc77c941956742f2f25da67bdd2847d0303f5b9d4d + +g_scalar = 08 +r = b763891eb265230d8f90f02af02cfc6b462ab5c56f9b345527f14cd19499a78f, 56ec12f27706df76123c7b84be60bbf021e3327dcf9eba15f59da3a9532d4977 + +g_scalar = 09 +r = e05b3080f0c4e16b2cc09c0444c8eb00abe6bfed59a7a84175c96e8f264e20e8, 086659cdfd835f9b2b6e019a88b12f1a56af7bedce5d45e31eb7777aa45f3314 + +g_scalar = 0a +r = cc61c94724b3428f737d2cd648250b4998f9868a0fcf81392c18dbd19dc21ec8, 78719a54eb3b4ab55f7d2d65779be5d2c43a8991383fbe080c2b407880dd9e76 + +g_scalar = 0b +r = 3e7090f1649c90731ff3a4158dac1ab59de407956e7fdfe0ea7d260a6245e404, 68930023e125b88e0c0daa891ead643d250f939ee57f61c81a7685612b944e88 + +g_scalar = 0c +r = 4ee1df77cb83e1562409d29dee37385eabdedef5ca345a3304b71aa7d2697768, 7ff57c9553238aca28228cfa8ade6d66170ed2f6ca8956370cac12d91cbb5b43 + +g_scalar = 0d +r = 738477ac5395b759bcbcd43f559e98110e356769856fd30dccc425634b2ed709, fbc08769c9e7b7977cd06422bd1f5bc168748390742ed2e335752b90c00ee17f + +g_scalar = 0e +r = faae7332fd12c72e1717bf54c6832660126e48f77f9707e3a242a35bb0cf664a, 152706dc2eaa1bbbe8e4193e2a65e7dbbe29569e832237c227b52db7995d586b + +g_scalar = 0f +r = e2aa0e430ad3da09ee337424e481937003cc23ee56e27e4b72bcd8b7bc60055b, 2042170a7079adf464efa6de778a4797d766355442a41b2540b8524f6383c45d + +g_scalar = 10 +r = 54d63c809103b723d5ef2f7c2c83f5495882e0753ffe2e6b808b0b650bc6fb80, 64edf7b201efe22055c4623bb1580e9e3670c3194b0b6587f2f11bd652a23f9b + +g_scalar = 11 +r = c1a35c0a6c7a574eb0f139752cfe2dfff17624b6ac0a177b97091dcbd53c5c9d, ebd512263274c3d02f4e247f0d1883bb0575bf30e89cb80e227d314693e79987 + +g_scalar = 12 +r = 675abd1b6f80ebdaa6f247ab412e29794afc964d8f8b403e5f3e51c856ada97a, 6c6fc7d90502394d2626927f1b847bba4b2a5caf8f4f0b3c66a2bd725e485a1d + +g_scalar = 13 +r = fe545c282897c3fcb8842277752c41ac68363aba25e1a16efea912baa5659ae8, f720ee256d12597b85665e9be39508c15806244afba977c52d36e9e7dc4c696b + +g_scalar = 14 +r = e2d1eeb6fe5bfb4e048099d95dd283ba5916868f0f862bdc8a979129d2337a31, 5ee104e1c5fee0d09161c53f8aa95e66a2d4ec17ffffcbae82ef1c417884005d + +g_scalar = 15 +r = ecead9f4c16762fc6d2a506c5a3f3b3074e1b2654783f47d562e4cecc135b208, c086d5f1c9477fa37a75023e7fac29a41b0fadc083bb3c61f29dd4b2e286e5b9 + +g_scalar = 16 +r = fdc777e8e93358a46a0b0685d2f8ba3dc99ffa23e3912a9a0fc611352f6f3076, 793e8d075d5cd0749de917da153a35b5640c2d6a4d23fea494a787bb35415f04 + +g_scalar = 17 +r = af2cea7c1727bf42d0825fa2a358406937c7a7e89e2e1f6ef4f876532de45068, 83d0687b9077666f48068e1371ac2f71e5fda49c27299f4a0360a4fb9e4785a9 + +g_scalar = 18 +r = f97b232f2efc311561d7cbf91d2b469f6d0d755040dd9a356d3883b215d02819, 595dc55eca737b8a7669f03193cb750111ea494988a1e356a551d750b24bcbc7 + +g_scalar = 19 +r = 966742eb65432a2ee395993332f1f3af6fc1b49eed6b67b0a4a319acd837879f, 7b948dc356f7996812068859c9b731ee96cc631243f439504b8dc9feb4966228 + +g_scalar = 1a +r = 994baaa855f2fb101ac7c5eb857ff6fbe6c9267ad8b1753861e4ad32ed1f8008, ed178030d12e5ac714fde97b5fa944f55a39898b628ac50884cf14e11d248018 + +g_scalar = 1b +r = 9f8aa54b2ef7c76a49d2c9eb084ffdd7d36a42d7aebf7313042c2af497e2feb4, 2d431068d84bde312d97d10878eb4cbb3bd0c66fddb7fb589200b7ba09895e70 + +g_scalar = 1c +r = e97f6b6af2aadb9797082ec0cfe153eb7323cb2830a6a8924b523eb7172ccd1f, a9b4cc5f405852784a688b482d0cb71ea6a7f9c7804b2a681d3d393ed1a83da1 + +g_scalar = 1d +r = e266f95948603d48944a70270317b9e2f1be963a0d9258805e5db46acb66e132, 3798142a2a3be21b8a966939777c619f90472447a2fb18a398db66735c208899 + +g_scalar = 1e +r = d0288cb552b6fc3cc5f4d6cd3ac77acda3a14e49b44f65a1b4241cb13298b343, 460d45ce51601f72d667da379b3aa441b675511e06bf9b4ad5cc8c2f1c040abc + +g_scalar = 1f +r = 948dc4f8b1fc87b48ef5689d3cf7600ddd3cf7e7473017e6e2f73c696755ff89, f38ae8914d7b4745faecedfd0c9803fc2d921ca298eb6028d9e9fe814ea53299 + +g_scalar = 20 +r = 39227077695532a4bc6d6a58fead0197befd904c4079dfbfd8c5fccfc5e3a3d8, 6231d7929591c2a47b969c1aad9a2e407e449b64480a990809e23e6ddbef42f5 + +g_scalar = 21 +r = 33ec6868f044b10cac09c4ae65578ab985ceae7c4b68f103871514560f664534, b16c4303c32f63c4f909604f763f15745509d1285847d5ef6ac4832b3a8ec1f1 + +g_scalar = 22 +r = c982ddd4dd303e645b0673a375678d94caa7a5c6a391849db6ab20147ca23cd3, a159100c570d74f8c77332a33c569426bba2cb1f6f876f92fd7b000b5db6f971 + +g_scalar = 23 +r = ca640b8642a3e5210b8e4134efc2b4c8742ee464233e76b7fd16847fdec67ef5, 2ba901628bb47af824e4ab126b237af7313c300c547852d5653a01908ceb6aa9 + +g_scalar = 24 +r = 3569656cd54a3dc30ae4cb10d257576ec691d0bd1b06c57f3d5e58d6a8219bb7, 480b9e11dd6da526450ac0bae251a0c6934e82d3162bfe13e5ebaebd94cda03a + +g_scalar = 25 +r = 2763a387dfa394ebc5748baea677d806b636458c7f178d5500467bc58cce08b5, 58b36143620088a8f63ebce51558462ce7adda3e6f20d850a12b448a7d3cebb6 + +g_scalar = 26 +r = adf0c7dc7c603d6c7463fd85222ef33b512331170fe948ce8a2cc3ca4d63c0ee, d9a4c2809c80c34dbdaa84d68e59319cccaab359bf3804090ec32d3bfe7765e5 + +g_scalar = 27 +r = 5853e4c4363186ac068f237d16fb36646f5ae714ff0b9346a9d89488a059c142, 0c0bc0e56919240847b864fae14e7b1c2ec4a76681828876e2d87d2363c52f98 + +g_scalar = 28 +r = 462d7b0075f732278909984c66f2728083200f0bdf25e13ce4d7681db82e9f3e, 03466612d1aa702fab256ea35ef5435974c6e18c36ab1c34d90ba188f2651798 + +g_scalar = 29 +r = 98100a4fdb01614feeca111539ce22716fdfe0b56f072822624d60492ed22e91, f70bfeec03884a7bc67732591d57d9ceb6f94d2ec87e9a47b6b0daa2a35c628f + +g_scalar = 2a +r = 649c89ce5bfafe43c2e2594c30a92f8fa155cbe31da6a5c75fb35ccfed2bad01, f3a8cfe389bc7d3d4b00b20b906014cf9b359611f32c50aed158667de9ff257a + +g_scalar = 2b +r = 179c85db3db01994b7d9ad900574598180c5bfb4878873fa4ff23ffd248a7d06, 47795f4f95b2dda09e91cd3ba5e6a3184d82d052eadce5a8ba41b06261a6966c + +g_scalar = 2c +r = 5f3425f6a98dd2915f0e2046e381d3b0009194abb29110fbecfd7c1fd55a897c, eb629f90387ba42a397a247dd69d34170423446c4b083b7fbfa06687730d50da + +g_scalar = 2d +r = e94f7d346d8232781b1e8ae057477f580032940b946c6e181ee426ccd5cd79bf, d73acbfe2cd9e6b5772ef6dec7f80c81c5254469f72b33a5c747cb96782ba21a + +g_scalar = 2e +r = cec684c3a42931dca1030d5babf825e0785c339aa06e9eba4075b5b149ee90d9, 033da338c1b7f86557c8b2c055f7835d45431d665ab43f2b42ab62c9c1586e63 + +g_scalar = 2f +r = 4b969974eba78bfd6b20afec715af2c70a624fa936c83906283c7513caa76097, 9bbff86e6dddfd2704819d515ded93d49b944e107baeca13220755ccd921d60e + +g_scalar = 30 +r = c8403902470343ad1a1baaa76d8805bda7496529bbd803a06b34413077adc612, 85efc7e941325cc2a875f5ce529d75e30b26d7fbb7d8c5b739f59f66175adff1 + +g_scalar = 31 +r = abdbe6084fb7db2bff4cd0b228766127ffe7048453dc690921950b421ff6acd3, d394077ef247fa364d78f592f7818ed826147d27f4645b5a837c92285e1109e8 + +g_scalar = 32 +r = 0dceb8db2b7eaba7edfbe268d5b1fa6aa78bfbaa136852780fb9c2d0488c171a, d7d34194c3628c1343b7716bcc143a46efde7ae6a4449c96bf9e80899ae2b710 + +g_scalar = 33 +r = d20ebe0d5c3fa443da1deb852f4318d4e20bc0ba1e5edf3f508cec1c3b3f64c9, d731e383a2f54c2d99a5e23d82681c6261f1511c5e1a5f65370b4ea773241ea3 + +g_scalar = 34 +r = 88f77f34d0e5e542905a3201c67528b72e0ec469af45f9c02692f36e83445904, 7ef2f2269c0f0f8d5c27014b9bbec39e23b92eae22df3562f67a8d295864687c + +g_scalar = 35 +r = ec3a318d306634b0912e8beda8c8acd95f9c3fc492f2467997359638546c4d8d, fba1da5943465283b155bcd2dcafe1973db82f6f522113f280167f41c31cb264 + +g_scalar = 36 +r = bb8a0feaee26c851c1286ff925c4d56c4f2e512ef8557c5fa0425b8eb212cf53, 1a556e3fea9595eb3df277a41d1936b17ee0c444e76265aac28f70d2e7d6107e + +g_scalar = 37 +r = 5cee8449a7b730dd0deb0e4a46c814c131eea5bf07ef5be6258bbbf9e7305683, 25e8013ff14cf3f4c2cf6a6880e518caee759f879e27a6b4eab495c5a0182bde + +g_scalar = 38 +r = ba3f0c4a7451ae636a84438514600044bb1ff3ca9556f36a8fc441407e8d7a14, 83927681026c2c084e9a5bc2a4b596ac01e0db86b1f2214bdfcac25b1f9af32a + +g_scalar = 39 +r = c13298306acf8ccc068212e3fd1eaf381bfeea57c7385b293ec832e77acaca28, da44c6c600017626c5ab2632c79b7a015748060db661782ab909f2db2aac9e59 + +g_scalar = 3a +r = 305f725f648d02cdd66fe3b67ed78be199cac80de4299aaff26c00e8a7ea82f0, 063749945667474117ab562dbe5ffb3efa70533e7a6319ad33ed1bc4623fb21b + +g_scalar = 3b +r = 4c2bab1b8add53b7cb9727eaa2d17c362100d5d3a8d063d169d44ed65c46aa8e, a062499846fb7a8b6651f7017ce477f8778afcd3a837ebeaa084e90c15426704 + +g_scalar = 3c +r = d40c4ccdbc6f9915026f8fe2671c39bc33fc23364189d9c7dc1e6828ed8a6e19, 04820109bbe4e832c40a04bd4f51ad9612c651a022adff2cafa135bbf80e75ca + +g_scalar = 3d +r = 994a44a69b8335fa71cdf6537eceb50a59556621a9404f843667eb1a7f4c04cc, 0d1bc780872bdbf3b6658466da44bba2473c5680eed4350dd7faf819dbeb9b69 + +g_scalar = 3e +r = 0dbcb03ae539b413177aa4c02089a2336ed7e061ed58f5a7e535f175a1962f91, 6b60cfff35ace009dd47ff98814be9ee6472e5ef6806701ee3dc424ebb32e38e + +g_scalar = 3f +r = 0763a43482fc568d95c376329182cb26039c4800f0518eedb8d3d9319ff91fe5, 90876a0140959b7092bf7c8f91230de0ac98b930824e8197707c04d5383e76ba + +g_scalar = 40 +r = 95fb8394569b38c77da70b83c2c61e01380a0913089f73b9db6d96f305968b80, 296720440e8449708010a4a078424bf88f726bb98faeaf829a3c651280edfe2f + +g_scalar = 41 +r = 01628c4706b6090abf639ed67765765e79527db7ba66f4b9dc2306ebfcdbb2b2, 7d096ac42f1747502c90d98cf3e055d633cb7691ba659f4666eb62f1b957b4a1 + +g_scalar = 42 +r = 78ed4fe6e3a7de485a7e384de42f8cb2a3cfa7fd44b81977c7c6e4d1c4ce250f, b12347993e909dfb9c03344b75554fad55912064d0f5bb2aa9231c8ce9e571ca + +g_scalar = 43 +r = e8218ad07de96a54fc88362a891ea186c16d0c52a48a4ddd86f04d3b51f9c391, fd59d7eb9a8f62d9de3ec728c30a96a005af456a06620ae82c735ac12f33af7a + +g_scalar = 44 +r = 031195d5bb4a44b9b2cdb039f99c55fec35d34e70dd71fab8732d5cd6a93954d, f66904b1400c9463440dec9ece0f8c32bb7047347b57df81baa37f5d08a660c8 + +g_scalar = 45 +r = 49d3ad05548efa2ac856868891e9ae0987986a54361bfe259e5da11cc5e79347, 6d37b1fa546fbecc2126ac553a8dd1269bea0d0f2655d14f987b0687f4eb5cf6 + +g_scalar = 46 +r = 100392dc78c04937681d690f2b3a8c597263de1539f76b817c5a2a14f58a379a, c6793ad2e6e2f3b19cc6e22a27c9a2ead11ae42dad0182e407e5e8e85bef953a + +g_scalar = 47 +r = dd421b5d4a210364f94aa89b40750d0149c7cb94fc05804bf19f382e92aa7864, 574cc7b29378679111f947e696cd0572030a119fdd4af1ec56cd001e39df3672 + +g_scalar = 48 +r = c3b025a015b15144eb5d0c75f38fae9cb1ee4879a360fb557331369679c1e3b1, 6fcd0cbb809a06f20368eb1f2e4283e11ba0cb8c9c5d2e6a33ad53540dc40604 + +g_scalar = 49 +r = b2dacdf66ef82fce794922ef17e29b1a2b34a7dc096fb852ae8f8fe1eeb03d1a, c39725521af82878a66d92525e82d5b3b871ba63e405ca09db8dcc81f42911ee + +g_scalar = 4a +r = d176448e35b23e27b00eea8a5d34f708294b12e1ca1b04e046ce85a9e25a441e, 0a48558f2fa1bd2f77c52d75519978d10c45e52db3bfffc85ce885392bb80ef9 + +g_scalar = 4b +r = a22f8fbea42fd1f6f123716223af72e0cfa8ca0e2a7aa6ab616d2c02fb760095, 24a1bde1d0c2302de79807a770456a7e7be19f0ded4437a85072758b78f3d040 + +g_scalar = 4c +r = 1558fe4c7ef5b48a7c703717cd1823b4285bed3c21848f49cd331464c89bdd46, 9b3b040493b83e45ee4826a9937e1ba33fc6e661d47fa3cb19c6602050eaed5f + +g_scalar = 4d +r = db15e4963d5baeb19c30c6422b2f9c49719a87be5a0ec9ce0a2193bfc266f85c, 854dc9d595105f9e2b4f0c7877eb94ea4788522b2e9fdbb283c3139be0d37321 + +g_scalar = 4e +r = c0e78a3897536f3f711f8b7f7b5065a47e96610365013b3aade6af11a6ab1ecf, f8bdf2ea8474d0c8ea2240ccef96b473407bffa1b201137148b4389c464423d3 + +g_scalar = 4f +r = 5ed556aae89327fc58f6428165f89e14dd306e2a05176f8ba40206d330ff0e92, b75df5ec191a421fd07370c450128375097a54ff99227b16c2b1870af8321bb8 + +g_scalar = 50 +r = c0bfffc45263832a2074213db27de57335ff9aa8b5f86a2c492bdc0752b3e584, 2995919ca4cd266052b6a1739220f4281b037d75b320ebfb2429c22a1d49c605 + +g_scalar = 51 +r = e0beeb1aebff18d3b097c711165c6e4c8e9d0af402ba3183d3a5d81fc63d5e79, 7acf4419e85bc145cbdbfdb9cf290d1fa02dbc426fe5b29dfe657f130801937b + +g_scalar = 52 +r = 8d97fd53554fa366b932d0c17527465559d18be925a81aef80ee662fad29cf9c, 18f61f3cdef3f99d4976126318fb05ae41a471e4e93046f2ad5cb247cd789d17 + +g_scalar = 53 +r = cf3086e87a243ca4f87abebf2ab80485125d4714ec67199a2c9ee62dc3363a22, 97f0013247b64be50536a39db19c61265e9b16125625aad75c52b051c64e09dd + +g_scalar = 54 +r = 2f83a889ca881f6c10b429a2811a47eb2cd0bab9941a27e9b7f1695a43020eec, 4cb3c135b6f36034df4741a71b99ec5f67f9ba802e45cbb12563c590f683e890 + +g_scalar = 55 +r = abfc8457b5e11eff36bf2f65ea65641aef617e0025af76773646b0dd7e1ee314, 159751e2e1cbaebebb0066ae1f282369ce91ee270142811b998dfac18f1192b6 + +g_scalar = 56 +r = a9ea1b80f80e4b9023fb74270b4af06e783b9ba6744a6528dd5c2b8142a18dc1, e6c93b31cefdb61d9a9f04f0e8aeaf7d4a2b5ed57defe51b559759f6edca6f38 + +g_scalar = 57 +r = 2bd0204360826caa041252997f6b0670b856664a2d4b409b516329ff7b4d8b2c, af490825d5cff157a8f439ab06e58e3ecd07bc34c235d56c010e522661ddbcb1 + +g_scalar = 58 +r = 948fb3f76932e6311707165bb939f40fabeee3e9369a60677d81fd488418cae4, d8d37d942785971ded5cf82dc911847cbdf176108c7f9dba005a1dffeabd468e + +g_scalar = 59 +r = bd88aca74765b8053ea123446310eb5a62d51e29fd54487dc1ee6264a7eabe67, 7150f87e7211e4457ab49dd209f98f9a640388f83b9fffefb7b284be14fb691a + +g_scalar = 5a +r = 8307d5cb55648a4cf3df44ded7ee64b747305b7483e904469af9d782de992e6e, e485b90d49c0b6a1ad3294fb1c309a59abff56b525d3fdee5376b018e277280a + +g_scalar = 5b +r = 0211de8fd56927054a39f02bbedd4f4727113bb4ae6a94b8d81ad9386982f865, 4a70abf75c554ed3fa8a5b9b0b46a59f2354719f6237fc68d587138c63c92f69 + +g_scalar = 5c +r = aee309e543ae4336e4c8417839093801a8a38bc31487c5269d7127d76294ba47, d15428592faab2944a72075d7f73442a9929ad4e8f48bb12d4b127399359250d + +g_scalar = 5d +r = 0581b4711fdf24984a278686e16396070aeaca9afd36b1af64cfdc70d9453d29, 435ac466954ffbb3ff6c1a78f9a2852f20b021c3df219dc582290e253d61f6d2 + +g_scalar = 5e +r = bf87ea83037278d9c87bdb8203d41796955ef205d59848ebc82a7aefd2df5e7a, 1001f8d7dd85aa7bf8ea79eadfa99607c00286d964135771c5825a638719aea8 + +g_scalar = 5f +r = 76a8f9fea974291f9a127f2bcaa12d0d6684ad762b346fd2263e039bb308cc40, 3f293fda2cd6f439ee1b1cb5344455a165499c990c5dbba0c802049b68aa19e4 + +g_scalar = 60 +r = 11eddf7fd0a0da0d14f356cc6abc354d6d490a4b19dd329b802b8d2333e12b70, 3f2a78b3241a2b7103b48cc47c29bca2fd2f4f8cfd0258131e208328d87fd1d8 + +g_scalar = 61 +r = f1ae5380578181c7ee848e1d2566805eda8cdb78397e43f4dc90323bafceb64d, 1fbd470f53cf3e6984577f1f3260b76785f4d9c45b68b7e72dc7b8e69c70c77c + +g_scalar = 62 +r = a6eecf308794885e74b44206ee3751becc8715abbc82a095d5192c88589b69ff, e9f04cd324c2e3116b5df55fe390da5ba3f98377daa4c864a05a7aa8dd0ce3b4 + +g_scalar = 63 +r = bc438ae1a4e65b07650522fd4a9a3b17b1f1abb66a7b43712d037bf83f9432b4, 4a673fe054fcd65a03a3c2c7b98ff4b37ab58a3f75503e4631b57ea284693c04 + +g_scalar = 64 +r = 55401274eb1385f3f7ac46733fe90a2ffe49233161c52cf8b9a17db9bf61fec5, 63be9e64a17154226aa068c230548cf4adb9e9b685bac6b7a5db852c23fd068f + +g_scalar = 65 +r = e9b1c23914da499e6a610374c569a602bbe914d3b99cd026b7a96e0a4ea6fdf7, 94ce9e0adba8bfc75a8a14644be77793731251826f21687cb5f6f0feadc19a99 + +g_scalar = 66 +r = 0fcaec0ffecf6fedce33e49cdd3dac5cf5284782e9f60f1841a6fe768f9b4748, a2776d9f8417c98ff3d348f820fe78e36445fbcd5bc92aa3ca1ce130a54edfc4 + +g_scalar = 67 +r = f51ec8724c3c386f57670e41bf619241d0a875e919f7f72c564bdda6c71f8d02, 1429b1f8ae1d3ed8a6fae60930a4f9245df79360286166f300aec19ee8bf7d17 + +g_scalar = 68 +r = 1d6de36b734fc1b835d2293fc7ac3efa90ee46554c2a623582d0020682c4bd6a, 6ba92bcade5a0cc175aef88a77b9d084ffccf5e161217dee946ac3bfcff75858 + +g_scalar = 69 +r = 680d5abf65e03a86c08ec1602b1d28fdcb11125c02a9ba44de6ddcb77b371390, d3d6d111ee9e512f4e346db071cbfc97c87057ca3bce7fe5d5ec7bbbf5327839 + +g_scalar = 6a +r = 7145405dff1765ecb81f9fb1279df6ff750c11bbc098aefac4c398cc1e628b51, 262f03eb0757aaea5cbb069b03fe8fac137218257bc27ef73c3d861d83aae16f + +g_scalar = 6b +r = ee206023efce1a7028f9cdebe9f6e8773571e4d1592ce3342ca0ba9c3796f4c7, ccd7e9418ea700c1e008039e02de2ff12754e4260a7f687cb2159e08b76369dc + +g_scalar = 6c +r = 9d873705000a079bd1a8678742e1cbf414d147984d7df1ff2871263f72371e17, 0d66cfc94b5d416d08e545f1b13e2b493633966c70094e6a3a7f4ad5e01ffe00 + +g_scalar = 6d +r = 3720b2475548de20e7b092174df861f4fd4f61e491ae8d13aec63acbdd10edd0, 5fdaee391cab12c70cd622baeb879899e7229d8956cd660daf419847ebf3df78 + +g_scalar = 6e +r = e7009ee6652405a945ae78ba39dcab99b1fc8c8c23fbbe6e76fbedb5a463fbad, 798ca99e4ef37e3c270c706c6e4840f15761490f7f000956b9a8fc5f8c0531e8 + +g_scalar = 6f +r = 0cf804d77a9b6a20098f37bb0832c416327dac318072f08dd87f4ae086653aa8, f9af0acd904d4731270adcc57148b1351cc0d4cea23afa674b9c5438a67e2173 + +g_scalar = 70 +r = 71704d008938c16745ab5a4d7832ba0c94e258f604a428f26a9505760a99cbca, 65000c24c7973a41e70352687d367d8056feb92ec00eb207db97ab0ef88b8b70 + +g_scalar = 71 +r = 734e0d078a2b0d3acc3a5ecb983538693289e86e10ec0d40a125e6c1b7ebcb88, 61d8209d49f3a53dd13cca90747f19ecfa6bcdb1786076b9e0d92e9a51933360 + +g_scalar = 72 +r = 08e2f429f216dc997afec8bb9b4e920c18849f8ebc30d62c751e03f0216f7c55, bc0eec86924dd15496b984140a9f867197b596a14d7bf8475e5ddf821d6cc33e + +g_scalar = 73 +r = 7c3ff661d8ecca6e8a2627c4851b5bc7f15b920fa8dfce56ad19e039119f6cab, e95dd9d8889821b2dc8df855fe2f493756b76c57baa43b27b9dd2bf2d5f5b5bf + +g_scalar = 74 +r = d8f1fc5f6a92b9aac9f08a5659cb1b6e4b3de89bb2f5f79c87f9793bc9826344, a9c8a4b42b9157daf06c2c8c70549a5753c30bbe65b80f1686357f9eb412595e + +g_scalar = 75 +r = bbdbec7d79af29b17890e8d54796883355a3bb1ad9699e9208e4c4901b620dc4, 2cdf7f854480ffe39dc33392fa67285c50cf6d11ad91a35092750de73e51e1bc + +g_scalar = 76 +r = 4977379654d7a19e24869d65bb07ad54f8f1d8415512ec1c24c00de93f5f68a6, c9c4d63998e59b626cf96715c527a656741bf80a03bc88e604f357d1f061cede + +g_scalar = 77 +r = 6ed0b988157b7f562be22ba0f3a49fb4062afb7c1e314dde87af199e6cc47305, fedf1014fe6ee703d7e814380f67b51417d29c64877b74978162cf502d653fd9 + +g_scalar = 78 +r = 9c7ea21245a2473fb62aaf7c37e7454e094e7ddf4f6ab73a6ebdb7bcd0303ba4, d007ec78a47a715248cd158b2c1eb5419a278a9daaa03497ca76e7549488d036 + +g_scalar = 79 +r = e1a8d418f77f10e127d2bf4f683b30d1d71602d5b0e5fe2014d7251a8c03e3f4, ae839cd80e99505caaf4d4e193394872ff318484da0a4996a4941a1e76a0ead7 + +g_scalar = 7a +r = 62280f9a573fbfa8bf357e0c9358983ad183a961caf64cbd536eeea92f4ff97a, 7aa3b3ccb2a104b24c6b9954bd51f9056ea945bdb1901d3d001da1b77e9176b3 + +g_scalar = 7b +r = 2d7ca4d8f1e354871783d1b6917e47255a71497198a5ea8c62ea859803b58b02, aeb9041c69e788c55870726c16e3e02ada04cc898e17ff543f69b4d49b4d4324 + +g_scalar = 7c +r = d8c0472156db126649b1dfca7f1412750a10ed1576d7996d10f264bc85fc00a2, 8448ecae901289fe9b94c4ad4c99e43958d85051e4dd905a43dfabf3cd768437 + +g_scalar = 7d +r = a9fe2396bb85b9cb04b76d2d1ed32559f72dab6d225733faaab54cfc93740130, b16d6af8c3febbc151dc5fac145ff0d52292393b579f3ce2128b0d24bf2219f0 + +g_scalar = 7e +r = 6941195b752838c39a7d703660ab52e9519a47b4807a9d289c9635be52bf127a, 91a4ea6d215215f65f153f56aa36de2d8459f5705276171860ffbe2e70da613f + +g_scalar = 7f +r = 15fe6a86904a36cf6072a061ae619f2870e9016cdddfd92836e84bb6dee35b41, 76759223abe3c14bd0a8879244f403f2fd1c4a970ad602d09ab6968bf6005965 + +g_scalar = 80 +r = ad311f2c46d5a6173749bba4b3ad9db57ef2b6b9ac62ff5463c5cb817a2ad62a, fa38d320ec008188f8aa266d75d6b138b46feaf3367834ffb77a8087c2ff3b6d + +g_scalar = 0200000000000000000000000000000000000000000000000000000000000000 +r = 135dc5395b54827dd161d2cacf780900bcef72873566cc63b2330fef4e4ca463, 8b0c573826152c8fe973586d6d3321da10a224f007dfa06c638f052e27bf1bc6 + +g_scalar = 0400000000000000000000000000000000000000000000000000000000000000 +r = 15b4488b29fd9fd06e1da8c39a33c6771fe19e357fe4364e9910ba6b23a5d896, f2c4f79cb6ec839b3fd1b24907e5658e920a8a70ab8163e81f4392541a1f22bf + +g_scalar = 0600000000000000000000000000000000000000000000000000000000000000 +r = e78c2ec0fc61206741311f8a38038a5d8f860c7943ef881c84cea0691416a6a5, 35beef7a9e36c39eff558aecf3612cbab4cc9e0059604097494d2e815ad73581 + +g_scalar = 0800000000000000000000000000000000000000000000000000000000000000 +r = 0bdec21162bc679298204cb64fcf68e15d2b0ac6c717370e8b5c619c76497ee8, 037248e9d2d4fcb45efb693e3d0e0c8bf9e3fa97e0de1ac56973ccefa63b1011 + +g_scalar = 0a00000000000000000000000000000000000000000000000000000000000000 +r = fe2bc235e52800a089fa443d07d3e75e96e9793ed510053ccf57fca29849e95b, ee52747dc960b0e1217e4005e541e592b5852a49e72222631c208b8c0ac7e740 + +g_scalar = 0c00000000000000000000000000000000000000000000000000000000000000 +r = 69aada7f6d6180a56183291b6ed77d1c62699718e770b20dd3694e2ab20364e4, d53e48d228dc87eed6a2308a7fb96d8dfd7e84567870107751f9054bf185509b + +g_scalar = 0e00000000000000000000000000000000000000000000000000000000000000 +r = 1280aafbed23f0d182293299cdf809af94589aac6656bbe13e858c2ffceac518, 9bfafcccca58cca2d5cb00b340f02322e010a39acfaec17fdeab0c677306e2a4 + +g_scalar = 1000000000000000000000000000000000000000000000000000000000000000 +r = 7be5ed0dc475c1293f06d66c530cb4f3d8772d353381060380802dc91ec34f9e, 0aec44147285bbcab92118c692a1b45ec63d2857c9ff6b4ccb9e3c1931e82b10 + +g_scalar = 1200000000000000000000000000000000000000000000000000000000000000 +r = f82412db37333f2074feaff5e72c2666cb98c3ea2233117dba89095174f9fd77, 4aee7f5ee5034187ca7413a653e62c9f81a497847abb71aacdc3f3af9d271ca0 + +g_scalar = 1400000000000000000000000000000000000000000000000000000000000000 +r = 5ec40582c9a82fa78d5d177c64ff8578982be4fd46700b8b37071afbe8316c45, ad4b4f6fc0c14de6312f39604bbbb74c24e809f49f0312845518e37bcfa86678 + +g_scalar = 1600000000000000000000000000000000000000000000000000000000000000 +r = 2a1ef7d7822e8cc963aa5cca4fd924a2b44de63e08ae4169cf62c250869027b8, 80a30ac6ffd127228c82e7333a87f1ef82842bc04b8636ebe41b37c66eb35f3c + +g_scalar = 1800000000000000000000000000000000000000000000000000000000000000 +r = f3b4962f5f3e6c3e028a81514f3cf2dc6415834bac4ab3aba3d6f4868eb6e843, 1b77791d06871332c31cdd6b9b149ed6437a6d8ae10bce559119ae90987dd2f2 + +g_scalar = 1a00000000000000000000000000000000000000000000000000000000000000 +r = d9025fff8a8af1c635761c8ee1f6176d54c439b0391fa36e2f41e643356317fd, 6babe94f55e3b77f7aedb7c7f54a2ba4bb48dd1395a4745b8c826f3cf7cc4474 + +g_scalar = 1c00000000000000000000000000000000000000000000000000000000000000 +r = 1eb6a9688f95277ca3fd22fbcea3f029965a774094e746409c34b650e16e05e9, 12109c4aacef5cbdea92c1669b840d48ad917201f58f2fee2520a63d7bad84f6 + +g_scalar = 1e00000000000000000000000000000000000000000000000000000000000000 +r = 870ae6bdc2754097035ebe4addc4f080ed400a2232cdc71aee20415c2245134a, 4f6d77b2755de5a2e959fe3e5cfa8ca6f57f1956e4f55982a192e684c048d72d + +g_scalar = 2000000000000000000000000000000000000000000000000000000000000000 +r = b7a23f34b68e19f8d0107914ceaae10ecbe906f04c93302efc189ae71e29a3ef, 3cf0bbf83d44303865591bf64da1711303198c6efcadc9c8e9d875c2efd2119d + +g_scalar = 2200000000000000000000000000000000000000000000000000000000000000 +r = 68a9969c8e2256288644ef1cdfceb8ab862ae25e2ece8f72d32d7cec0094e84c, 79f2826cc85b9705cbd09a659bf0cdb6308a6e1882ba242bdf209e27b3117876 + +g_scalar = 2400000000000000000000000000000000000000000000000000000000000000 +r = ada4cfdd7ecfa8408c94a21ab972da90598d0bf8849be4b7ab293027aad991c1, af9346e9eb8562e0900424eb6a652a557ca617a203219a3493d4b9c0fbcec63a + +g_scalar = 2600000000000000000000000000000000000000000000000000000000000000 +r = f6e29e442433b4c681d700b2c6fa654a9edd11a6b7a82bb80ef6a240c793c0cd, d5dde3b07207c7a0154da1d18488497a8863e0e1ac1d5f51aadd3d5899f01b1d + +g_scalar = 2800000000000000000000000000000000000000000000000000000000000000 +r = 54476778acd2f1b6c92becfa390b3ef2b1643ab5911bc478c3e04d7902381461, bb04730090b0790aee182910b5a13ac32bc1287b2c21c65a8daa0c4d66bf3aaf + +g_scalar = 2a00000000000000000000000000000000000000000000000000000000000000 +r = 574fc2b081704bde30651575aab5306d953939f44ead0fd9d6d8bbd2f2338d2a, f2d45a7b49c99a13ed542a652c51e949e72b8a05eb63f38f3402081f4132f2f0 + +g_scalar = 2c00000000000000000000000000000000000000000000000000000000000000 +r = 17f904ba45b0995e765a50db1a6fd0ffc5772beefdc3a47b83766947d17d4e0b, c8fa426a142fd4d56738d94f46cb1fd9f56db7f3c270aaedcee643832883487e + +g_scalar = 2e00000000000000000000000000000000000000000000000000000000000000 +r = 5090d91f0b80bcb946d480d77119c60ed7799b31b313c052bfe48a8ff43daf9d, 3fdaf62162e1d85a769be02bb1d5928c16e69b4f9915aa0ac94c4c1e873bd7bf + +g_scalar = 3000000000000000000000000000000000000000000000000000000000000000 +r = 389caef34ec5b10982159d07de7d6f2c945353e1b2d4c63aae485bb72b724759, 73429bb9c14208a3816fa3ed83f2405f2dc2cb7edd99de434a8ebb53db65ef14 + +g_scalar = 3200000000000000000000000000000000000000000000000000000000000000 +r = f5aa74e43a64439e577793fce12c68ab07de7ab35133e5a2768978afed08d68c, a2577185ed42cc08a611d41c8ef20f302003ddd41d4459026457d90c4505e9f4 + +g_scalar = 3400000000000000000000000000000000000000000000000000000000000000 +r = 58c8a77ac0d58abd9947c636a9b6e05a8d98277b4a837f6908ed8febd56daf06, fbe185ec38e1eb47ecbd1958e3fb0c5d16cd67c71076d3d3f45496a45f121e4f + +g_scalar = 3600000000000000000000000000000000000000000000000000000000000000 +r = 9bc6c2af18eaf22cf81a4b3e0fd97269d8f158f5d6df29e581ea0bc89b6956e1, 63b4b278d7075e1c4339549d8f2f593c03bbfa0f9251ed45c1d3ce5e6d62552b + +g_scalar = 3800000000000000000000000000000000000000000000000000000000000000 +r = 98fe1c61f5b61d31fd025001b905b499dd4d06aff39e7832b7ef9760ff79d2ee, 08e213122c3832dfa322b09f514eb16d376e3b783009cd9aa9f83980c5f12805 + +g_scalar = 3a00000000000000000000000000000000000000000000000000000000000000 +r = d7d80165dd6861d485715b2edb2589d37b0b8307280d1be142c772b68b61c205, 458ae65ccb0f3654205e28984256ddbb1095adfa3b8abd756235746580870184 + +g_scalar = 3c00000000000000000000000000000000000000000000000000000000000000 +r = beeb3ea58c37888ea76697bd602e90655dc516824ddbc0b6aea68626dc4ad4f4, 6ca1346292cc09fd9fb560949ae44df2e48b820ca35f44841ec4a2f214569113 + +g_scalar = 3e00000000000000000000000000000000000000000000000000000000000000 +r = 782b816e9f5238b55631049161a549b25d485fac31ca379550e1b82c5de1691e, 1b102a8b5984701daecf22dedfce0da0a9ffada33f2952a013f2b973463d034f + +g_scalar = 4000000000000000000000000000000000000000000000000000000000000000 +r = 412c9e1e9fa403a4d1b299b504aea4a9047e2ccde180b2dcb618d590b01e6e27, 178851bc75122b973a1b6fcce668de1949c50136f332b8e388d28a3679407552 + +g_scalar = 4200000000000000000000000000000000000000000000000000000000000000 +r = 4b782ecabc2251e29f1ee33c0910e35e65854fd78777a63d723ee82acb8c9fb4, 838a3cf0c1e978c538fefe60d32301bcf5f641d622da95345a06824d45f07856 + +g_scalar = 4400000000000000000000000000000000000000000000000000000000000000 +r = 720d5901fc5cb4c4f2876026ea269465bee5f33e85425bfe3d16740409d9735d, 59af953a94d4d6172b30b9649be40d5479e30056938b9bc5410357864dac8c11 + +g_scalar = 4600000000000000000000000000000000000000000000000000000000000000 +r = a4fe196b936adcd72b999e56f814d996687afcc16c6ac81b2bba2fcb7bd03b00, e547a7310d5e981fd5dd716dc07c21d2111d82a22d9ab330d7165c2a897d9f1b + +g_scalar = 4800000000000000000000000000000000000000000000000000000000000000 +r = 47f93e8f0d2f339d2df4486ef3b4e2e0fca35bdae5182b8d7f4b55864f6dcecb, 203de9a1f28da96eca2b45f4462b7cf03e07e2bb1c09ae9c471dbd283e36c4f7 + +g_scalar = 4a00000000000000000000000000000000000000000000000000000000000000 +r = 4b5a7b2307c5f1098b5c3d0371c68991750aa51875c77f94fb78df45414657c3, b30352343b2825bbdfd9248609e5e644ff564852517f1beb482484863e7fbdee + +g_scalar = 4c00000000000000000000000000000000000000000000000000000000000000 +r = ffab5705044464f22bac283b351571b3b88e7c47d8d42a028b002254c72340d5, 6616e62a9c8552a942e384cb8242f342e40ef31b1a8c8ca89700dd41addda21f + +g_scalar = 4e00000000000000000000000000000000000000000000000000000000000000 +r = 5ea74c730418d46d3da600eade1864dfc4ae8bbb8b383d060471cf0dac517b4b, bbddf0fe206581d430920bec53ccf2f3729794bcde6e83aed2935c8dbdd0739f + +g_scalar = 5000000000000000000000000000000000000000000000000000000000000000 +r = a35aa23fbf846bbbd43da670d2f74daed61257ce383c8ce9b1e13752fb85fa4c, 50d05aab9bc6d22e34d7f52a3c4aa158f6df8ee0c363473b5e74235d4421fc83 + +g_scalar = 5200000000000000000000000000000000000000000000000000000000000000 +r = 4644b8fb9aa64d9150c9f363b5117831ef6feacd1584fb54adb84fb6c1127e87, a50d957e7a2eedd563de80073a74db77bf746812f4dbe25c7520cb714df7be07 + +g_scalar = 5400000000000000000000000000000000000000000000000000000000000000 +r = 91c3a88a5b6e8c279d0a1f05fd8884e9f1539d9e4c076aa9d334b37c4b8e12cb, 43c450343061cf41d5e6b70871e075d933836e740b98d179b92ea188ba7aa4a1 + +g_scalar = 5600000000000000000000000000000000000000000000000000000000000000 +r = 5e76ec2fd83f56287099228335b50df42b516dd73422c5c118d919e2ba9fa405, 215b92835941e6391d53cef079e691830ee524a532dd167c1b779bf89d2c8ce5 + +g_scalar = 5800000000000000000000000000000000000000000000000000000000000000 +r = 3ff4444fd2ad3a96e5d755618de929cdad07e3c765ba422be4db7c0067eb93d4, 3c1172ef4a9b38d8590a7aa07ef7fa514ebb46fca5534cb835d53ebc71f14e5d + +g_scalar = 5a00000000000000000000000000000000000000000000000000000000000000 +r = abe32380275a9ef53b7cd6098dc0954228abf7b7a9c7d8a5ec69d5a37aed7fc2, 2760436fe662ce524908b1c152c98e5cb143e958be997ffec824b1faa68f9d75 + +g_scalar = 5c00000000000000000000000000000000000000000000000000000000000000 +r = deb035fcce7723a22ca3e0a1d449c1004ff211619adcd4bb4fc56a1be50edb52, e3b01067868e00e93da1a02a95b3c970d15d3b601d9c35c606a90a818855d505 + +g_scalar = 5e00000000000000000000000000000000000000000000000000000000000000 +r = 7c0fd64417a177b5010b2e0df05981da66d63eab9af46f4588f0367ae686a10d, 9cc89067fc5544e084859663ef2c83e10670c8e054a309b866ce10045a78b655 + +g_scalar = 6000000000000000000000000000000000000000000000000000000000000000 +r = 50235a0fdc91927053b2bb803ee35067bc56637b5f29cd078c56e735a64785f4, 8881065b5ec0f80f80400ba5f0f805bac34758318396023b191ab6d8f2c4aa65 + +g_scalar = 6200000000000000000000000000000000000000000000000000000000000000 +r = 2dc1b8bb6885309fb1e70bcfd44571115df7fee1116cd289c547a21465944d7c, a5b5defe5200f553f4e9d93004744d802eb3d19473d8a4193827dfec742dc4f7 + +g_scalar = 6400000000000000000000000000000000000000000000000000000000000000 +r = f1445d07414974411c75d37565dfd734bddc1fd9d5a52b5d45ab2440e4c3c19f, a3ff3123e96dfbb148d9cbd09098f9e90ef785a5b32643dc3fb416769d45f137 + +g_scalar = 6600000000000000000000000000000000000000000000000000000000000000 +r = d1609bf2cd28c8fdc8b4a3a98a9fed30e6959e40b4a07fa19ffe9f1de32e3a6c, b5e1f94bc9fbe1d5d2b32c22031428bbeceec1c7af4b3cb2d046e723b9329392 + +g_scalar = 6800000000000000000000000000000000000000000000000000000000000000 +r = 237c88057388378848d61dc507b6f556b2c6a5f201dbed52cb4f805a3e4e7d6c, daf7d5011bb307bfeb90b445e5c9c0d939feab8df098fe30cdf1b1838fa60a0b + +g_scalar = 6a00000000000000000000000000000000000000000000000000000000000000 +r = 845a882c8859bbc2e883d25ff51993083258a70ad731721eddbead4a788e09c4, 6ab31c3ff968c9f8f6655a5e3471a59f7a47d44bc5145873ff614cc9b13bd412 + +g_scalar = 6c00000000000000000000000000000000000000000000000000000000000000 +r = 4d6eec323a1f89e99267af0a5dee21c6d56850cf6466696a53c474abad6c4e7b, 3d620c8a7f89f8d167d3a4762229b54cc7d35c308d9c659e56dbf513573b08ba + +g_scalar = 6e00000000000000000000000000000000000000000000000000000000000000 +r = d28527c6a3824aa9d34030745566465654a149071f100d40b1b006aebc0d6863, 30a82b3f8ae892685b221411648e40d3abe5a927d3815d8acea8ea167d1daa26 + +g_scalar = 7000000000000000000000000000000000000000000000000000000000000000 +r = 8f12502ee0138997ad364df067b256dfde2d4ad1860b8bfbc370e522cc1b5e83, 03511dcdcba5dba53f89b744d3064ba6e80014adc0bc866a503fa0dc7783920a + +g_scalar = 7200000000000000000000000000000000000000000000000000000000000000 +r = 88a0df625c0cd66e4523b7dcd2c772806d46968e6a3bd9ad34f365ff3405157d, 65ff8cd309c966cc43c7fda55ba4408f83a5028dceda14e831f390f0c4591506 + +g_scalar = 7400000000000000000000000000000000000000000000000000000000000000 +r = 350fed185a914c72b1ead64104f9670908dcf2b70004539e0f58cec54e27d357, aacc0f0d9e66d9a362c306869a449d5145f8b46f46d04ac744f43523c5147854 + +g_scalar = 7600000000000000000000000000000000000000000000000000000000000000 +r = 721595eece728342af86c88034fb313add3f191127a10139823002854cd4d5e2, 60c44e259fe4b513848a5b75cda0ac98bbc4b1385076ae4c561a4d050d3f67ba + +g_scalar = 7800000000000000000000000000000000000000000000000000000000000000 +r = 394c3ca1652f359aa37951abff9f5089563ed687c3db1e5fec79a10fae256721, 4efb24bea05c73001333ccc2feb45e46102c640f0a492130b6ae4cdc253f146d + +g_scalar = 7a00000000000000000000000000000000000000000000000000000000000000 +r = 829bec8ffbbc8adbcaa9b2f496d71f842e0d323fc98fb2ed918ad277a25ed969, d7e993dd450011b77fd50ed4dcc2db1d573f92160504d1ccc5b2d540b0a840c2 + +g_scalar = 7c00000000000000000000000000000000000000000000000000000000000000 +r = 114608474b9883e7e6183976a85cf4eaabd1eb6c8fbb831a86d4cd28294b04f8, 686c24f9f2e55be24ce0258ea8f8753a0cfb6c61aa4f3ea4a3185fe73caef54d + +g_scalar = 7e00000000000000000000000000000000000000000000000000000000000000 +r = 8ccebd9296f0b3dbe251932fabb53deb5f020d8cd37bc364b63fd5141593f8c0, cb327c1a879a9b22e65a7ae03cb0f93933358298acb501e46d0790bb64930db2 + +g_scalar = 8000000000000000000000000000000000000000000000000000000000000000 +r = 9211e489de7f4f8a426eca29484c2ece9c4e7ad63c6341fb197dd46d95a7b1a2, 25f92e470f60e01817286a6e1c3eede82b2c09100657458614997f6ec78ef1f4 + +g_scalar = 8200000000000000000000000000000000000000000000000000000000000000 +r = 0695d25fcba9327ba26e5822d699d95b7a6c1acdf37b2836203a31d5a56c98ef, 0aa018cb90f6f3a69438e11059ada186448060e1e6b21a4055ddc74148431893 + +g_scalar = 8400000000000000000000000000000000000000000000000000000000000000 +r = 95e360666c4165c8b8e2959954327c6554009f1e6d947506e4cf728185967fad, 587c76421d9ba792e3221ff31f0e5f79505f09934933a10d39bf3074a3b3f527 + +g_scalar = 8600000000000000000000000000000000000000000000000000000000000000 +r = 3805f4e7a74465b996976624e2d6122797e8092e1a7c6add2ab55f653e360df9, efa55067d6b676840d99ae5a033531efc006b014a204ed4161223dea0a456eb9 + +g_scalar = 8800000000000000000000000000000000000000000000000000000000000000 +r = c48d07aad919b53f72bfcbbf25a2f91f7112f4122205eb70be6dd7fc6b7733ae, 4e873d9c7d35199d38f52714422d39da24504c146efec5713ea468c126a1f691 + +g_scalar = 8a00000000000000000000000000000000000000000000000000000000000000 +r = ef1117f3334d256570ec0990a1bb0900c512ae94e04e361fbd7055ffbd4132b6, e1ea4cb9efc6827777c9f2d8e753987a771143afc0313b2a53d94be882a88c45 + +g_scalar = 8c00000000000000000000000000000000000000000000000000000000000000 +r = b36ddb5a551266fc72a174550b384fab97c8f9d8b94fdd362441c4c0ca8f86c8, f4d28e65ef714ddc20760054070a8a1f3c306bd0f975bd668ce8a71234127c81 + +g_scalar = 8e00000000000000000000000000000000000000000000000000000000000000 +r = 1f07fd1a9ee01d68891d265bb9f79dc8d31da5b74b957a08455930bfd7425424, eef295c42eee7336a82c0ca3bdc0a6fd2cc99c24d290dccab10911c75da30291 + +g_scalar = 9000000000000000000000000000000000000000000000000000000000000000 +r = e0e5daeb54dd3739389f747caf3c3030703ef60057feea5b805c564631890a36, 4a1bd7b5f95a8c3b37183de2af20bf297e4bf176b5393962fe24a4c3c9c9f155 + +g_scalar = 9200000000000000000000000000000000000000000000000000000000000000 +r = 11a4ff0222e558e644144f890e8ff816669d7b57254db82633e0f086aef314c5, 5abafbd19e0e870c6e29235b0555dacdf757c2592e540c0bc8e5326f243efbe6 + +g_scalar = 9400000000000000000000000000000000000000000000000000000000000000 +r = ac45249aec82d6d8a5e1d3c6e19adb253f01996cbb97d0320130abf38cb5ab31, dacb1586f624faf0efb81538eba8bf94fd211c65b681d483c276ef2e5cfbfdf6 + +g_scalar = 9600000000000000000000000000000000000000000000000000000000000000 +r = c738cbcb5a8e43bad9f6002307a003ad81351ce14ffa84fabe1b922b396fae20, c9d2de063135f1936737fe3e62b46bfbf10047a165d1817db5465ec8c9defa53 + +g_scalar = 9800000000000000000000000000000000000000000000000000000000000000 +r = d723ad15da12d3f14aa86124ac83299759198011fda9f625e8ffb637410eaba3, e8d872c4801b2b3a921c79f249602f98ad3084c9edba98ac55ddc53f2da6810c + +g_scalar = 9a00000000000000000000000000000000000000000000000000000000000000 +r = 5bddf84d01fb6ab7717df9c3adcedc68fbe6587456a7fbaf7cc7479be15036a4, 159078eac888fcc8901b2bf9c90c29bb7b7efae9324861aac330a36e5c6c7f9e + +g_scalar = 9c00000000000000000000000000000000000000000000000000000000000000 +r = 0617a8dfe008a218c2700de3e39cfdf9d6b37e5eadb39a5c5e6afed1778930bb, 4b39280254b5248bbf2813099a8fa83410bffb7b65fe50a73e994417ebf1e6ae + +g_scalar = 9e00000000000000000000000000000000000000000000000000000000000000 +r = e19854ec7a29e8cf8765ed78b03c224b072454d8cf4f0b1b746bf4ffcd5eb860, 6869db2586f038ea0c2bf32a39d92c4f42598a6fd2621444499a1924aae5d08d + +g_scalar = a000000000000000000000000000000000000000000000000000000000000000 +r = 6372def79b2bafe8b18e2c1354107588281fc8dd7b87f257a83b969946191d3d, e3bcefafe42700aa1eace32d84310cf43f2dd4b756167a3fdaf4bb480d8972ca + +g_scalar = a200000000000000000000000000000000000000000000000000000000000000 +r = 9e15ebed69c53ab58cb605eda605ea2cb0766c76159bb5814ecfd1490d4d367e, f704a6321f2c0b3344ed22ea847dcbed8da47d36c3dd99d1f5b16de3f0516372 + +g_scalar = a400000000000000000000000000000000000000000000000000000000000000 +r = 3b082784ac9daa213e9231dde959e9257f81bfeceb104d11989cd51d81ffd706, d3bb418ca5f9a35c8e72fb72f2813e703d3f6638c14faed9e28e02ff027f1a57 + +g_scalar = a600000000000000000000000000000000000000000000000000000000000000 +r = ed37bac889c8cd093feb1494b52fe95b30df23d4bf8ad1baab45ff2f3b264155, 1d59a9bc917e7b53af4db00969712c98aa54ea60a5eb3223d4cc02f4e78aebca + +g_scalar = a800000000000000000000000000000000000000000000000000000000000000 +r = 3eb44ebaa26cfda9ec294f9bd82e3b0c7adcdc636cfec330698970dcc1c88910, 6702ce3ff233fd7ae6b382ff1868400da4d780cd8c7d34ed2f488c9ca79ee104 + +g_scalar = aa00000000000000000000000000000000000000000000000000000000000000 +r = 6fd044f86e7c58d93fc322e9763408262abc70bfac2a8c9eacd17f62a70bedca, e351f3762a24e6bf71049b174d8d3a774afa5a849cb3f817584c4855c17a97d3 + +g_scalar = ac00000000000000000000000000000000000000000000000000000000000000 +r = 03e6e884142b953fcf6e45c2f0b7938f042782b6c788822f7caff2a8dd7f4788, 63fc02447f948e02f548a883d347cc7b1e5b425236cb6b7ac6b32c2f748f7fbc + +g_scalar = ae00000000000000000000000000000000000000000000000000000000000000 +r = 541f1c670f8d83510a4f0dce10075d18a773c212de55a51ab85d636205e61d13, e7d652a370ffcdc3de32e541a473b58679b8353f2d2041f627ce3096f0c12a9a + +g_scalar = b000000000000000000000000000000000000000000000000000000000000000 +r = 35e8048ee03c366502e23d41dfc6514aa5db5ab62ea604675fe5691ed785e73d, 1343d185dbd0e40fe8cacc6e2c6646b828ec3b4584ce1a5a3f8b118f1adaa0f8 + +g_scalar = b200000000000000000000000000000000000000000000000000000000000000 +r = d8e96623f2e1ed0f96c490c17b199bba4831540870192a511fd78414f227c4a5, ce0bae6ef7736b606a626da351e5f48aa91730a91e569bed63cc47ecde7e0cf3 + +g_scalar = b400000000000000000000000000000000000000000000000000000000000000 +r = ed1b755f2815d3cf2138d71106187ec35898b1930650dd7ce81907220b4ebbfe, 4c7fa9337d3ab5d5aa78724c853652b08a7c8ab93a11682f54155e144f394514 + +g_scalar = b600000000000000000000000000000000000000000000000000000000000000 +r = fb909a74cc54235e35059c6f94d6bfbf9aa5d2c1bd5a35267217348749af1daf, b0be2db59a9947bcf853ecbfbae332d526883fe01b998b9831bfe5d7f389e929 + +g_scalar = b800000000000000000000000000000000000000000000000000000000000000 +r = 12128b2fd412db03d45acfecc1c397c7110ef147732ebbe02e605d97ce76aebb, d05746ae395ac2650a9295d2a0cb6962eba2732db2236813027ef0992a4d35e4 + +g_scalar = ba00000000000000000000000000000000000000000000000000000000000000 +r = df8df34707ba78f463d2778a91308c54034c07d0eaef09eb0d13b0393524a32e, c7de1146399c30471b4eaa5f7343cb8bb17f477a56f9244daadb189f64900000 + +g_scalar = bc00000000000000000000000000000000000000000000000000000000000000 +r = 570f50b9ade5e185d379afd6bbac1e92f1ca3c3639b1290c6b3eda297e866baa, 3f62e47b7d386fb0a919e766cfad95ba9a8729d3a8c1ab808daf3d6fff88f997 + +g_scalar = be00000000000000000000000000000000000000000000000000000000000000 +r = d9b588174709218a1980177d765796027ca43bcb2bc83e9c14dd8c3678ffb696, f904a4e4e73a0a3b5964a6a9a7f6f77a5becb8a8987c8bc5829b009167c19b38 + +g_scalar = c000000000000000000000000000000000000000000000000000000000000000 +r = b37b515f042eeec8d64cd42d9c875d9a1a1db7e49924182ae5d7f844caaa358c, 55a481c08236ca007dee410259b7e17efc322ed9e206eff34d4dd4097b165fbe + +g_scalar = c200000000000000000000000000000000000000000000000000000000000000 +r = 1e6f624584d42c5a9fd11c23e1b2374586dd7cdb056b372c9a7bfb76f3086c58, 0c3468b965d25df2d1f1563829563068d8d156ab799b8fa8b0efc8b0f47a92b2 + +g_scalar = c400000000000000000000000000000000000000000000000000000000000000 +r = def3204ff622e0f51e7dfc2f11b5036e56aceaa0609c4809389ca9c3b1d2d491, 9eb080e2c4003d74e3667bbc9d705924eaa2dc67b712a88a4e2efa93d2feb754 + +g_scalar = c600000000000000000000000000000000000000000000000000000000000000 +r = ac2244a68510d43ed03eb697c84cbed4e8e7b7e5495fac838defc208af8cb7e5, 748620b2ee30108ffaa231090d98ee944ae45533797fe8e4bf2d0c017b291e8a + +g_scalar = c800000000000000000000000000000000000000000000000000000000000000 +r = 3b2b115548841c4bac23208fd26485e9f65a3640454ef41ff86d13f9e149e73f, 55867cb65a7240c065e50b02fd8a798096500e3972b44b056e922c0653e1fa12 + +g_scalar = ca00000000000000000000000000000000000000000000000000000000000000 +r = fbede0865908334ae1e330f9c70cbc1a87382d6f40abd3c3eb3a10b1e94b9d1f, 3dd4bd39d7699c15f1271203bb2ddcdeae155b4e9f004328e4550b34ddfd4514 + +g_scalar = cc00000000000000000000000000000000000000000000000000000000000000 +r = db88c71bbeaf13bc07a69a30ef6276ed02b0c293cb37d658dc2d1be24becfdb6, 7802d95d4f739cddb7061f336fcffe88c2e36dce9c8cd8d7d4386ef5c97ffe33 + +g_scalar = ce00000000000000000000000000000000000000000000000000000000000000 +r = af06ff2bd95601e3e6b95f2fdee3d5596a0d1bea32ab6a5c6b768e347d563eb6, 89fc97a1a530cf2eb04215b861ba7a5be0c5018bd089f8f22cef2c735f8a91b2 + +g_scalar = d000000000000000000000000000000000000000000000000000000000000000 +r = 956b31e003c45e52a078868ef78edd391571580605d6297b8c885312c23fc975, 8b37b6344c14a975419227b47e2f2598c8d5dc3a0c7e673f470275d5ff7b33a6 + +g_scalar = d200000000000000000000000000000000000000000000000000000000000000 +r = f7ae11128858d4bd081e8fb419b8ae87f8b465db160c6066244bf1db2540eb02, 622f8ffb2a8430a2b4db4ec54ae887dda6c90d66a15f5e44945a36fa107b1802 + +g_scalar = d400000000000000000000000000000000000000000000000000000000000000 +r = 7e8caa24bbb577974f1bfe0fde5e42def5eae8c7f89acdaff3022fb6e646703a, 1c51897148de3dd703c995b69226c8fd51e066afd52bf3e445eb9c742c570f45 + +g_scalar = d600000000000000000000000000000000000000000000000000000000000000 +r = 726cd1b8f826237f899ae92398f41b6f681817c7c9c515ff302c3cfad169508a, 9bef669a5f57c92a2fca18c156cdf1c5f848d43a7aceee1628cc5ca8b512b56a + +g_scalar = d800000000000000000000000000000000000000000000000000000000000000 +r = 2cd615404fa3c57214f08f32b806bbb3c97bf51d0ffac3078f75eab499646d05, 474c7d9f869b581877f70bfb6411ef40835934552e3fdb09f80d50762a913b60 + +g_scalar = da00000000000000000000000000000000000000000000000000000000000000 +r = 44e6235a685fa8c247bd7309a9de5fa66db2fee880a40b64c0b8debf4aa4d144, f7cc4793a3e6270753724b3609098e94764b9d140c4f3dcb35155aa0affeb7d9 + +g_scalar = dc00000000000000000000000000000000000000000000000000000000000000 +r = 3027a162030cd7c2ba74f8354822722008faee4e603bb73e4565f9a834ddc625, ef1b14b212342d60ebf809f9d37f37579b8ee17af351af8448c6c7ecf72ca3a3 + +g_scalar = de00000000000000000000000000000000000000000000000000000000000000 +r = fe35f5c66e9d40a301eee42e3d4f9f3ec28f13ad81f4f013096bb45b738230f3, e46ffbebbabc0d7430ec627d406e1bbdb1843e7fae23b141e72c7d734e0177a1 + +g_scalar = e000000000000000000000000000000000000000000000000000000000000000 +r = 9f40ac3bae92032334e5d0dcb987a24a5e0e8c3e803e25dcd0667ed68b11888c, 7ef1ec27c47bde35491ccd7cda64f1b7a128bf926b6328f95463de9534e0f63a + +g_scalar = e200000000000000000000000000000000000000000000000000000000000000 +r = b9c9c244af407478c96adb0c950359af1d0243f09da21539499d4934d78d5664, 9a9f02b9c6f6ac05800b3daa30d0ea90d96d68a41e822ee4d77655971b5fe2fa + +g_scalar = e400000000000000000000000000000000000000000000000000000000000000 +r = bca14b180256394e833badcb026fbed49d4cac5be7b7f4d976fdb4d8d72905a3, ec67af7ed909d15e2699e6ab07111f87b3ebaeeb6de16ae709eb7554d2dfa217 + +g_scalar = e600000000000000000000000000000000000000000000000000000000000000 +r = 9e84b1429d952dea1a5702fde822c43a6440a71137d7a6d5b1a124a2e982371a, 40f7881d6809e7a532e57be2f72c9bb32b9547bdf3b8c6b3f9a25a6e707ef853 + +g_scalar = e800000000000000000000000000000000000000000000000000000000000000 +r = 5774d975adf3dd428b24580ccbb8bfc2082ec7feeac69a05a84eadc3c6f859bb, a4f85e5d69dddf30f442b4315724f6090a8b1fdeb62b2057f302f1c1fb18545c + +g_scalar = ea00000000000000000000000000000000000000000000000000000000000000 +r = 18b7629228d8a479ef8c3fc19f7258a24084cd681c0bfed585b4a7b6c5b52828, aedaaaf8428b0efa574f47076250e4f54fae49a87cab5893d7a01feafbe6fc5f + +g_scalar = ec00000000000000000000000000000000000000000000000000000000000000 +r = a9269757ad6c71aecd89a9d614befaa9c670d56c86853eddeff93c2d3edf7a05, a4f07fcdd7acca82ab3fd51b72ae50a26d356b17b15f40fa3be313ca58770e90 + +g_scalar = ee00000000000000000000000000000000000000000000000000000000000000 +r = b5ed7a9125881c7719ff07a13ee17b6081df350185faadc70c267dd0ae0c2b14, d40ec72633c833eacaede52ecf0b134aa9c47e6a2dc783cc117d3230ba9c4cab + +g_scalar = f000000000000000000000000000000000000000000000000000000000000000 +r = 80f1a439c929319d7a3a6453d4fb689735dc136663621bc1a857240fa36a2737, 50d7c67d372ab09cfb0d49241e01d0efb0b537668078c5ebfc18274bf8cb0ba0 + +g_scalar = f200000000000000000000000000000000000000000000000000000000000000 +r = 728fc5136ff083f3eb5c80bd85a5f16d33075ddccce277ec4182e4aa4bf75924, 20458e590c1c99290a8dffd60ac0fea619539bd3c1195aeca3c78e8fbf7992ab + +g_scalar = f400000000000000000000000000000000000000000000000000000000000000 +r = c02fe1c417b27af67e00049f9ab0deefd6ef61aff90e37bb06c9f96c6e75e767, e3d3f45da588df43db9829701886b5db90f3e6f2dad02337c82cf700840ef4dc + +g_scalar = f600000000000000000000000000000000000000000000000000000000000000 +r = a883f42917abdea70042d1b7833a576b51a3fb710ce3673f85d05386724c3c80, 5e930c0875653ecc219a96afb9fae1b9eeed99c9b88a535b4b07e8b02f551714 + +g_scalar = f800000000000000000000000000000000000000000000000000000000000000 +r = 5f2f286449c33aa7ac7d0e1c1fb049783f46e326ce433bc6dfffa17e057a3df0, e52d864891f945f1ac7e4c217bc5dc88eb665d859a96d81e40b2e8e311715d42 + +g_scalar = fa00000000000000000000000000000000000000000000000000000000000000 +r = a8b7e8a7068a16707ae69dc317ec34c204b86de7b0a0125589502abd170b0b8e, b5ab8a1239d9ffbb7093e3672489a8e4ccf0516c9ea9316ef31c6e9512a2b866 + +g_scalar = fc00000000000000000000000000000000000000000000000000000000000000 +r = 7d6dbe6556c0f8f08208e6ce3c650c05791a0732e423b40f16ff861277c713f8, c8f21b5d95a05c5219d877e66d0740e53df5baaec2d1bdfb50fdc2c38cd2bcf1 + +g_scalar = fe00000000000000000000000000000000000000000000000000000000000000 +r = 8ec353c2064ebf7c5df16fb0f8867456296c7b9e57af9e532eabd53494b13f3e, 849f2f20957c715f0b11793fbb0250eabf97c7146277a093361518688f5b87db + +# g_scalar = n - 128 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d1 +r = ad311f2c46d5a6173749bba4b3ad9db57ef2b6b9ac62ff5463c5cb817a2ad62a, 05c72cde13ff7e780755d9928a294ec74b90150dc987cb0048857f783d00c492 + +# g_scalar = n - 127 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d2 +r = 15fe6a86904a36cf6072a061ae619f2870e9016cdddfd92836e84bb6dee35b41, 898a6ddb541c3eb52f57786dbb0bfc0d02e3b569f529fd2f6549697409ffa69a + +# g_scalar = n - 126 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d3 +r = 6941195b752838c39a7d703660ab52e9519a47b4807a9d289c9635be52bf127a, 6e5b1591deadea0aa0eac0a955c921d27ba60a90ad89e8e79f0041d18f259ec0 + +# g_scalar = n - 125 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d4 +r = a9fe2396bb85b9cb04b76d2d1ed32559f72dab6d225733faaab54cfc93740130, 4e9295063c01443fae23a053eba00f2add6dc6c5a860c31ded74f2db40dde60f + +# g_scalar = n - 124 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d5 +r = d8c0472156db126649b1dfca7f1412750a10ed1576d7996d10f264bc85fc00a2, 7bb713506fed7602646b3b52b3661bc6a727afaf1b226fa5bc20540c32897bc8 + +# g_scalar = n - 123 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d6 +r = 2d7ca4d8f1e354871783d1b6917e47255a71497198a5ea8c62ea859803b58b02, 5146fbe29618773ba78f8d93e91c1fd525fb337771e800abc0964b2b64b2bcdb + +# g_scalar = n - 122 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d7 +r = 62280f9a573fbfa8bf357e0c9358983ad183a961caf64cbd536eeea92f4ff97a, 855c4c324d5efb4eb39466ab42ae06fa9156ba434e6fe2c2ffe25e48816e894c + +# g_scalar = n - 121 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d8 +r = e1a8d418f77f10e127d2bf4f683b30d1d71602d5b0e5fe2014d7251a8c03e3f4, 517c6326f166afa4550b2b1e6cc6b78d00ce7b7c25f5b6695b6be5e1895f1528 + +# g_scalar = n - 120 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d9 +r = 9c7ea21245a2473fb62aaf7c37e7454e094e7ddf4f6ab73a6ebdb7bcd0303ba4, 2ff813865b858eaeb732ea74d3e14abe65d87563555fcb68358918ab6b772fc9 + +# g_scalar = n - 119 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324da +r = 6ed0b988157b7f562be22ba0f3a49fb4062afb7c1e314dde87af199e6cc47305, 0120efea019118fd2817ebc7f0984aebe82d639c78848b687e9d30afd29ac026 + +# g_scalar = n - 118 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324db +r = 4977379654d7a19e24869d65bb07ad54f8f1d8415512ec1c24c00de93f5f68a6, 363b29c5671a649e930698ea3ad859a98be407f6fc437719fb0ca82e0f9e3121 + +# g_scalar = n - 117 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324dc +r = bbdbec7d79af29b17890e8d54796883355a3bb1ad9699e9208e4c4901b620dc4, d3208079bb7f001d623ccc6d0598d7a3af3092ef526e5caf6d8af218c1ae1e43 + +# g_scalar = n - 116 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324dd +r = d8f1fc5f6a92b9aac9f08a5659cb1b6e4b3de89bb2f5f79c87f9793bc9826344, 56375b4ad46ea8260f93d3738fab65a8ac3cf4429a47f0e979ca80614beda6a1 + +# g_scalar = n - 115 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324de +r = 7c3ff661d8ecca6e8a2627c4851b5bc7f15b920fa8dfce56ad19e039119f6cab, 16a226267767de4e237207aa01d0b6c8a94893a9455bc4d84622d40d2a0a4a40 + +# g_scalar = n - 114 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324df +r = 08e2f429f216dc997afec8bb9b4e920c18849f8ebc30d62c751e03f0216f7c55, 43f113786db22eac69467bebf560798e684a695fb28407b8a1a2207de2933cc1 + +# g_scalar = n - 113 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e0 +r = 734e0d078a2b0d3acc3a5ecb983538693289e86e10ec0d40a125e6c1b7ebcb88, 9e27df61b60c5ac32ec3356f8b80e6130594324f879f89461f26d165ae6ccc9f + +# g_scalar = n - 112 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e1 +r = 71704d008938c16745ab5a4d7832ba0c94e258f604a428f26a9505760a99cbca, 9afff3da3868c5bf18fcad9782c9827fa90146d23ff14df8246854f10774748f + +# g_scalar = n - 111 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e2 +r = 0cf804d77a9b6a20098f37bb0832c416327dac318072f08dd87f4ae086653aa8, 0650f5316fb2b8cfd8f5233a8eb74ecae33f2b325dc50598b463abc75981de8c + +# g_scalar = n - 110 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e3 +r = e7009ee6652405a945ae78ba39dcab99b1fc8c8c23fbbe6e76fbedb5a463fbad, 86735660b10c81c4d8f38f9391b7bf0ea89eb6f180fff6a9465703a073face17 + +# g_scalar = n - 109 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e4 +r = 3720b2475548de20e7b092174df861f4fd4f61e491ae8d13aec63acbdd10edd0, a02511c5e354ed39f329dd451478676618dd6277a93299f250be67b8140c2087 + +# g_scalar = n - 108 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e5 +r = 9d873705000a079bd1a8678742e1cbf414d147984d7df1ff2871263f72371e17, f2993035b4a2be93f71aba0e4ec1d4b6c9cc69948ff6b195c580b52a1fe001ff + +# g_scalar = n - 107 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e6 +r = ee206023efce1a7028f9cdebe9f6e8773571e4d1592ce3342ca0ba9c3796f4c7, 332816bd7158ff3f1ff7fc61fd21d00ed8ab1bdaf58097834dea61f7489c9623 + +# g_scalar = n - 106 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e7 +r = 7145405dff1765ecb81f9fb1279df6ff750c11bbc098aefac4c398cc1e628b51, d9d0fc13f8a85516a344f964fc017053ec8de7db843d8108c3c279e27c551e90 + +# g_scalar = n - 105 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e8 +r = 680d5abf65e03a86c08ec1602b1d28fdcb11125c02a9ba44de6ddcb77b371390, 2c292eed1161aed1b1cb924f8e340368378fa836c431801a2a1384440acd87c6 + +# g_scalar = n - 104 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e9 +r = 1d6de36b734fc1b835d2293fc7ac3efa90ee46554c2a623582d0020682c4bd6a, 9456d43421a5f33f8a51077588462f7b00330a1f9ede82116b953c403008a7a7 + +# g_scalar = n - 103 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324ea +r = f51ec8724c3c386f57670e41bf619241d0a875e919f7f72c564bdda6c71f8d02, ebd64e0651e2c128590519f6cf5b06dba2086ca0d79e990cff513e61174082e8 + +# g_scalar = n - 102 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324eb +r = 0fcaec0ffecf6fedce33e49cdd3dac5cf5284782e9f60f1841a6fe768f9b4748, 5d88925f7be836710c2cb707df01871c9bba0433a436d55c35e31ecf5ab1203b + +# g_scalar = n - 101 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324ec +r = e9b1c23914da499e6a610374c569a602bbe914d3b99cd026b7a96e0a4ea6fdf7, 6b3161f424574039a575eb9bb418886c8cedae7e90de97834a090f01523e6566 + +# g_scalar = n - 100 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324ed +r = 55401274eb1385f3f7ac46733fe90a2ffe49233161c52cf8b9a17db9bf61fec5, 9c41619a5e8eabde955f973dcfab730b5246164a7a4539485a247ad3dc02f970 + +# g_scalar = n - 99 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324ee +r = bc438ae1a4e65b07650522fd4a9a3b17b1f1abb66a7b43712d037bf83f9432b4, b598c01eab0329a6fc5c3d3846700b4c854a75c18aafc1b9ce4a815d7b96c3fb + +# g_scalar = n - 98 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324ef +r = a6eecf308794885e74b44206ee3751becc8715abbc82a095d5192c88589b69ff, 160fb32bdb3d1cef94a20aa01c6f25a45c067c89255b379b5fa5855722f31c4b + +# g_scalar = n - 97 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f0 +r = f1ae5380578181c7ee848e1d2566805eda8cdb78397e43f4dc90323bafceb64d, e042b8efac30c1977ba880e0cd9f48987a0b263ca4974818d2384719638f3883 + +# g_scalar = n - 96 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f1 +r = 11eddf7fd0a0da0d14f356cc6abc354d6d490a4b19dd329b802b8d2333e12b70, c0d5874bdbe5d48ffc4b733b83d6435d02d0b07402fda7ece1df7cd727802e27 + +# g_scalar = n - 95 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f2 +r = 76a8f9fea974291f9a127f2bcaa12d0d6684ad762b346fd2263e039bb308cc40, c0d6c024d3290bc711e4e34acbbbaa5e9ab66367f3a2445f37fdfb649755e61b + +# g_scalar = n - 94 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f3 +r = bf87ea83037278d9c87bdb8203d41796955ef205d59848ebc82a7aefd2df5e7a, effe0727227a558507158615205669f83ffd79279beca88e3a7da59c78e65157 + +# g_scalar = n - 93 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f4 +r = 0581b4711fdf24984a278686e16396070aeaca9afd36b1af64cfdc70d9453d29, bca53b986ab0044d0093e587065d7ad0df4fde3d20de623a7dd6f1dac29e092d + +# g_scalar = n - 92 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f5 +r = aee309e543ae4336e4c8417839093801a8a38bc31487c5269d7127d76294ba47, 2eabd7a5d0554d6cb58df8a2808cbbd566d652b270b744ed2b4ed8c66ca6daf2 + +# g_scalar = n - 91 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f6 +r = 0211de8fd56927054a39f02bbedd4f4727113bb4ae6a94b8d81ad9386982f865, b58f5407a3aab12d0575a464f4b95a60dcab8e619dc803972a78ec739c36d096 + +# g_scalar = n - 90 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f7 +r = 8307d5cb55648a4cf3df44ded7ee64b747305b7483e904469af9d782de992e6e, 1b7a46f1b63f495f52cd6b04e3cf65a65400a94bda2c0211ac894fe71d88d7f5 + +# g_scalar = n - 89 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f8 +r = bd88aca74765b8053ea123446310eb5a62d51e29fd54487dc1ee6264a7eabe67, 8eaf07808dee1bbb854b622df60670659bfc7708c4600010484d7b41eb0496e5 + +# g_scalar = n - 88 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f9 +r = 948fb3f76932e6311707165bb939f40fabeee3e9369a60677d81fd488418cae4, 272c826ad87a68e312a307d236ee7b83420e89f073806245ffa5e2001542b971 + +# g_scalar = n - 87 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324fa +r = 2bd0204360826caa041252997f6b0670b856664a2d4b409b516329ff7b4d8b2c, 50b6f7d92a300ea9570bc654f91a71c132f843cc3dca2a93fef1add99e22434e + +# g_scalar = n - 86 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324fb +r = a9ea1b80f80e4b9023fb74270b4af06e783b9ba6744a6528dd5c2b8142a18dc1, 1936c4cd310249e36560fb0f17515082b5d4a12b82101ae4aa68a609123590c7 + +# g_scalar = n - 85 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324fc +r = abfc8457b5e11eff36bf2f65ea65641aef617e0025af76773646b0dd7e1ee314, ea68ae1c1e34514244ff9951e0d7dc96316e11d9febd7ee46672053e70ee6d49 + +# g_scalar = n - 84 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324fd +r = 2f83a889ca881f6c10b429a2811a47eb2cd0bab9941a27e9b7f1695a43020eec, b34c3ec9490c9fcc20b8be58e46613a098064580d1ba344eda9c3a6f097c176f + +# g_scalar = n - 83 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324fe +r = cf3086e87a243ca4f87abebf2ab80485125d4714ec67199a2c9ee62dc3363a22, 680ffeccb849b41bfac95c624e639ed9a164e9eea9da5528a3ad4fae39b1f622 + +# g_scalar = n - 82 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324ff +r = 8d97fd53554fa366b932d0c17527465559d18be925a81aef80ee662fad29cf9c, e709e0c2210c0663b689ed9ce704fa51be5b8e1c16cfb90d52a34db8328762e8 + +# g_scalar = n - 81 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632500 +r = e0beeb1aebff18d3b097c711165c6e4c8e9d0af402ba3183d3a5d81fc63d5e79, 8530bbe517a43ebb3424024630d6f2e05fd243be901a4d62019a80ecf7fe6c84 + +# g_scalar = n - 80 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632501 +r = c0bfffc45263832a2074213db27de57335ff9aa8b5f86a2c492bdc0752b3e584, d66a6e625b32d9a0ad495e8c6ddf0bd7e4fc828b4cdf1404dbd63dd5e2b639fa + +# g_scalar = n - 79 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632502 +r = 5ed556aae89327fc58f6428165f89e14dd306e2a05176f8ba40206d330ff0e92, 48a20a12e6e5bde12f8c8f3bafed7c8af685ab0166dd84e93d4e78f507cde447 + +# g_scalar = n - 78 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632503 +r = c0e78a3897536f3f711f8b7f7b5065a47e96610365013b3aade6af11a6ab1ecf, 07420d147b8b2f3815ddbf3310694b8cbf84005f4dfeec8eb74bc763b9bbdc2c + +# g_scalar = n - 77 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632504 +r = db15e4963d5baeb19c30c6422b2f9c49719a87be5a0ec9ce0a2193bfc266f85c, 7ab236296aefa062d4b0f38788146b15b877add5d160244d7c3cec641f2c8cde + +# g_scalar = n - 76 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632505 +r = 1558fe4c7ef5b48a7c703717cd1823b4285bed3c21848f49cd331464c89bdd46, 64c4fbfa6c47c1bb11b7d9566c81e45cc039199f2b805c34e6399fdfaf1512a0 + +# g_scalar = n - 75 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632506 +r = a22f8fbea42fd1f6f123716223af72e0cfa8ca0e2a7aa6ab616d2c02fb760095, db5e421d2f3dcfd31867f8588fba9581841e60f312bbc857af8d8a74870c2fbf + +# g_scalar = n - 74 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632507 +r = d176448e35b23e27b00eea8a5d34f708294b12e1ca1b04e046ce85a9e25a441e, f5b7aa6fd05e42d1883ad28aae66872ef3ba1ad34c400037a3177ac6d447f106 + +# g_scalar = n - 73 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632508 +r = b2dacdf66ef82fce794922ef17e29b1a2b34a7dc096fb852ae8f8fe1eeb03d1a, 3c68daace507d78859926dada17d2a4c478e459d1bfa35f62472337e0bd6ee11 + +# g_scalar = n - 72 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632509 +r = c3b025a015b15144eb5d0c75f38fae9cb1ee4879a360fb557331369679c1e3b1, 9032f3437f65f90efc9714e0d1bd7c1ee45f347463a2d195cc52acabf23bf9fb + +# g_scalar = n - 71 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63250a +r = dd421b5d4a210364f94aa89b40750d0149c7cb94fc05804bf19f382e92aa7864, a8b3384c6c87986fee06b8196932fa8dfcf5ee6122b50e13a932ffe1c620c98d + +# g_scalar = n - 70 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63250b +r = 100392dc78c04937681d690f2b3a8c597263de1539f76b817c5a2a14f58a379a, 3986c52c191d0c4f63391dd5d8365d152ee51bd352fe7d1bf81a1717a4106ac5 + +# g_scalar = n - 69 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63250c +r = 49d3ad05548efa2ac856868891e9ae0987986a54361bfe259e5da11cc5e79347, 92c84e04ab904134ded953aac5722ed96415f2f1d9aa2eb06784f9780b14a309 + +# g_scalar = n - 68 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63250d +r = 031195d5bb4a44b9b2cdb039f99c55fec35d34e70dd71fab8732d5cd6a93954d, 0996fb4dbff36b9dbbf2136131f073cd448fb8cc84a8207e455c80a2f7599f37 + +# g_scalar = n - 67 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63250e +r = e8218ad07de96a54fc88362a891ea186c16d0c52a48a4ddd86f04d3b51f9c391, 02a6281365709d2721c138d73cf5695ffa50ba96f99df517d38ca53ed0cc5085 + +# g_scalar = n - 66 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63250f +r = 78ed4fe6e3a7de485a7e384de42f8cb2a3cfa7fd44b81977c7c6e4d1c4ce250f, 4edcb865c16f620563fccbb48aaab052aa6edf9c2f0a44d556dce373161a8e35 + +# g_scalar = n - 65 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632510 +r = 01628c4706b6090abf639ed67765765e79527db7ba66f4b9dc2306ebfcdbb2b2, 82f6953ad0e8b8b0d36f26730c1faa29cc34896f459a60b999149d0e46a84b5e + +# g_scalar = n - 64 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632511 +r = 95fb8394569b38c77da70b83c2c61e01380a0913089f73b9db6d96f305968b80, d698dfbaf17bb6907fef5b5f87bdb407708d94477051507d65c39aed7f1201d0 + +# g_scalar = n - 63 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632512 +r = 0763a43482fc568d95c376329182cb26039c4800f0518eedb8d3d9319ff91fe5, 6f7895fdbf6a64906d4083706edcf21f536746d07db17e688f83fb2ac7c18945 + +# g_scalar = n - 62 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632513 +r = 0dbcb03ae539b413177aa4c02089a2336ed7e061ed58f5a7e535f175a1962f91, 949f2fffca531ff722b800677eb416119b8d1a1197f98fe11c23bdb144cd1c71 + +# g_scalar = n - 61 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632514 +r = 994a44a69b8335fa71cdf6537eceb50a59556621a9404f843667eb1a7f4c04cc, f2e4387e78d4240d499a7b9925bb445db8c3a980112bcaf2280507e624146496 + +# g_scalar = n - 60 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632515 +r = d40c4ccdbc6f9915026f8fe2671c39bc33fc23364189d9c7dc1e6828ed8a6e19, fb7dfef5441b17ce3bf5fb42b0ae5269ed39ae60dd5200d3505eca4407f18a35 + +# g_scalar = n - 59 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632516 +r = 4c2bab1b8add53b7cb9727eaa2d17c362100d5d3a8d063d169d44ed65c46aa8e, 5f9db666b904857599ae08fe831b88078875032d57c814155f7b16f3eabd98fb + +# g_scalar = n - 58 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632517 +r = 305f725f648d02cdd66fe3b67ed78be199cac80de4299aaff26c00e8a7ea82f0, f9c8b66aa998b8bfe854a9d241a004c1058facc2859ce652cc12e43b9dc04de4 + +# g_scalar = n - 57 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632518 +r = c13298306acf8ccc068212e3fd1eaf381bfeea57c7385b293ec832e77acaca28, 25bb3938fffe89da3a54d9cd386485fea8b7f9f3499e87d546f60d24d55361a6 + +# g_scalar = n - 56 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632519 +r = ba3f0c4a7451ae636a84438514600044bb1ff3ca9556f36a8fc441407e8d7a14, 7c6d897dfd93d3f8b165a43d5b4a6953fe1f247a4e0ddeb420353da4e0650cd5 + +# g_scalar = n - 55 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251a +r = 5cee8449a7b730dd0deb0e4a46c814c131eea5bf07ef5be6258bbbf9e7305683, da17febf0eb30c0c3d3095977f1ae735118a607961d8594b154b6a3a5fe7d421 + +# g_scalar = n - 54 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251b +r = bb8a0feaee26c851c1286ff925c4d56c4f2e512ef8557c5fa0425b8eb212cf53, e5aa91bf156a6a15c20d885be2e6c94e811f3bbc189d9a553d708f2d1829ef81 + +# g_scalar = n - 53 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251c +r = ec3a318d306634b0912e8beda8c8acd95f9c3fc492f2467997359638546c4d8d, 045e25a5bcb9ad7d4eaa432d23501e68c247d091addeec0d7fe980be3ce34d9b + +# g_scalar = n - 52 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251d +r = 88f77f34d0e5e542905a3201c67528b72e0ec469af45f9c02692f36e83445904, 810d0dd863f0f073a3d8feb464413c61dc46d152dd20ca9d098572d6a79b9783 + +# g_scalar = n - 51 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251e +r = d20ebe0d5c3fa443da1deb852f4318d4e20bc0ba1e5edf3f508cec1c3b3f64c9, 28ce1c7b5d0ab3d3665a1dc27d97e39d9e0eaee4a1e5a09ac8f4b1588cdbe15c + +# g_scalar = n - 50 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251f +r = 0dceb8db2b7eaba7edfbe268d5b1fa6aa78bfbaa136852780fb9c2d0488c171a, 282cbe6a3c9d73edbc488e9433ebc5b91021851a5bbb636940617f76651d48ef + +# g_scalar = n - 49 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632520 +r = abdbe6084fb7db2bff4cd0b228766127ffe7048453dc690921950b421ff6acd3, 2c6bf8800db805cab2870a6d087e7127d9eb82d90b9ba4a57c836dd7a1eef617 + +# g_scalar = n - 48 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632521 +r = c8403902470343ad1a1baaa76d8805bda7496529bbd803a06b34413077adc612, 7a103815becda33e578a0a31ad628a1cf4d9280548273a48c60a6099e8a5200e + +# g_scalar = n - 47 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632522 +r = 4b969974eba78bfd6b20afec715af2c70a624fa936c83906283c7513caa76097, 64400790922202d9fb7e62aea2126c2b646bb1f0845135ecddf8aa3326de29f1 + +# g_scalar = n - 46 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632523 +r = cec684c3a42931dca1030d5babf825e0785c339aa06e9eba4075b5b149ee90d9, fcc25cc63e48079ba8374d3faa087ca2babce29aa54bc0d4bd549d363ea7919c + +# g_scalar = n - 45 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632524 +r = e94f7d346d8232781b1e8ae057477f580032940b946c6e181ee426ccd5cd79bf, 28c53400d326194b88d109213807f37e3adabb9708d4cc5a38b8346987d45de5 + +# g_scalar = n - 44 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632525 +r = 5f3425f6a98dd2915f0e2046e381d3b0009194abb29110fbecfd7c1fd55a897c, 149d606ec7845bd6c685db822962cbe8fbdcbb94b4f7c480405f99788cf2af25 + +# g_scalar = n - 43 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632526 +r = 179c85db3db01994b7d9ad900574598180c5bfb4878873fa4ff23ffd248a7d06, b886a0af6a4d2260616e32c45a195ce7b27d2fae15231a5745be4f9d9e596993 + +# g_scalar = n - 42 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632527 +r = 649c89ce5bfafe43c2e2594c30a92f8fa155cbe31da6a5c75fb35ccfed2bad01, 0c57301b764382c3b4ff4df46f9feb3064ca69ef0cd3af512ea799821600da85 + +# g_scalar = n - 41 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632528 +r = 98100a4fdb01614feeca111539ce22716fdfe0b56f072822624d60492ed22e91, 08f40112fc77b5853988cda6e2a826314906b2d2378165b8494f255d5ca39d70 + +# g_scalar = n - 40 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632529 +r = 462d7b0075f732278909984c66f2728083200f0bdf25e13ce4d7681db82e9f3e, fcb999ec2e558fd154da915ca10abca68b391e74c954e3cb26f45e770d9ae867 + +# g_scalar = n - 39 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252a +r = 5853e4c4363186ac068f237d16fb36646f5ae714ff0b9346a9d89488a059c142, f3f43f1996e6dbf8b8479b051eb184e3d13b589a7e7d77891d2782dc9c3ad067 + +# g_scalar = n - 38 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252b +r = adf0c7dc7c603d6c7463fd85222ef33b512331170fe948ce8a2cc3ca4d63c0ee, 265b3d7e637f3cb342557b2971a6ce6333554ca740c7fbf6f13cd2c401889a1a + +# g_scalar = n - 37 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252c +r = 2763a387dfa394ebc5748baea677d806b636458c7f178d5500467bc58cce08b5, a74c9ebb9dff775809c1431aeaa7b9d3185225c290df27af5ed4bb7582c31449 + +# g_scalar = n - 36 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252d +r = 3569656cd54a3dc30ae4cb10d257576ec691d0bd1b06c57f3d5e58d6a8219bb7, b7f461ed22925adabaf53f451dae5f396cb17d2de9d401ec1a1451426b325fc5 + +# g_scalar = n - 35 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252e +r = ca640b8642a3e5210b8e4134efc2b4c8742ee464233e76b7fd16847fdec67ef5, d456fe9c744b8508db1b54ed94dc8508cec3cff4ab87ad2a9ac5fe6f73149556 + +# g_scalar = n - 34 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252f +r = c982ddd4dd303e645b0673a375678d94caa7a5c6a391849db6ab20147ca23cd3, 5ea6eff2a8f28b08388ccd5cc3a96bd9445d34e19078906d0284fff4a249068e + +# g_scalar = n - 33 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632530 +r = 33ec6868f044b10cac09c4ae65578ab985ceae7c4b68f103871514560f664534, 4e93bcfb3cd09c3c06f69fb089c0ea8baaf62ed8a7b82a10953b7cd4c5713e0e + +# g_scalar = n - 32 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632531 +r = 39227077695532a4bc6d6a58fead0197befd904c4079dfbfd8c5fccfc5e3a3d8, 9dce286c6a6e3d5c846963e55265d1bf81bb649cb7f566f7f61dc1922410bd0a + +# g_scalar = n - 31 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632532 +r = 948dc4f8b1fc87b48ef5689d3cf7600ddd3cf7e7473017e6e2f73c696755ff89, 0c75176db284b8bb05131202f367fc03d26de35e67149fd72616017eb15acd66 + +# g_scalar = n - 30 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632533 +r = d0288cb552b6fc3cc5f4d6cd3ac77acda3a14e49b44f65a1b4241cb13298b343, b9f2ba30ae9fe08e299825c864c55bbe498aaee2f94064b52a3373d0e3fbf543 + +# g_scalar = n - 29 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632534 +r = e266f95948603d48944a70270317b9e2f1be963a0d9258805e5db46acb66e132, c867ebd4d5c41de5756996c688839e606fb8dbb95d04e75c6724998ca3df7766 + +# g_scalar = n - 28 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632535 +r = e97f6b6af2aadb9797082ec0cfe153eb7323cb2830a6a8924b523eb7172ccd1f, 564b339fbfa7ad88b59774b7d2f348e1595806397fb4d597e2c2c6c12e57c25e + +# g_scalar = n - 27 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632536 +r = 9f8aa54b2ef7c76a49d2c9eb084ffdd7d36a42d7aebf7313042c2af497e2feb4, d2bcef9627b421cfd2682ef78714b344c42f3991224804a76dff4845f676a18f + +# g_scalar = n - 26 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632537 +r = 994baaa855f2fb101ac7c5eb857ff6fbe6c9267ad8b1753861e4ad32ed1f8008, 12e87fce2ed1a539eb021684a056bb0aa5c676759d753af77b30eb1ee2db7fe7 + +# g_scalar = n - 25 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632538 +r = 966742eb65432a2ee395993332f1f3af6fc1b49eed6b67b0a4a319acd837879f, 846b723ba9086698edf977a63648ce1169339ceebc0bc6afb47236014b699dd7 + +# g_scalar = n - 24 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632539 +r = f97b232f2efc311561d7cbf91d2b469f6d0d755040dd9a356d3883b215d02819, a6a23aa0358c847689960fce6c348afeee15b6b7775e1ca95aae28af4db43438 + +# g_scalar = n - 23 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253a +r = af2cea7c1727bf42d0825fa2a358406937c7a7e89e2e1f6ef4f876532de45068, 7c2f97836f889991b7f971ec8e53d08e1a025b64d8d660b5fc9f5b0461b87a56 + +# g_scalar = n - 22 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253b +r = fdc777e8e93358a46a0b0685d2f8ba3dc99ffa23e3912a9a0fc611352f6f3076, 86c172f7a2a32f8c6216e825eac5ca4a9bf3d296b2dc015b6b587844cabea0fb + +# g_scalar = n - 21 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253c +r = ecead9f4c16762fc6d2a506c5a3f3b3074e1b2654783f47d562e4cecc135b208, 3f792a0d36b8805d858afdc18053d65be4f052407c44c39e0d622b4d1d791a46 + +# g_scalar = n - 20 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253d +r = e2d1eeb6fe5bfb4e048099d95dd283ba5916868f0f862bdc8a979129d2337a31, a11efb1d3a011f306e9e3ac07556a1995d2b13e9000034517d10e3be877bffa2 + +# g_scalar = n - 19 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253e +r = fe545c282897c3fcb8842277752c41ac68363aba25e1a16efea912baa5659ae8, 08df11d992eda6857a99a1641c6af73ea7f9dbb60456883ad2c9161823b39694 + +# g_scalar = n - 18 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253f +r = 675abd1b6f80ebdaa6f247ab412e29794afc964d8f8b403e5f3e51c856ada97a, 93903825fafdc6b3d9d96d80e47b8445b4d5a35170b0f4c3995d428da1b7a5e2 + +# g_scalar = n - 17 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632540 +r = c1a35c0a6c7a574eb0f139752cfe2dfff17624b6ac0a177b97091dcbd53c5c9d, 142aedd8cd8b3c30d0b1db80f2e77c44fa8a40d0176347f1dd82ceb96c186678 + +# g_scalar = n - 16 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632541 +r = 54d63c809103b723d5ef2f7c2c83f5495882e0753ffe2e6b808b0b650bc6fb80, 9b12084cfe101de0aa3b9dc44ea7f161c98f3ce7b4f49a780d0ee429ad5dc064 + +# g_scalar = n - 15 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632542 +r = e2aa0e430ad3da09ee337424e481937003cc23ee56e27e4b72bcd8b7bc60055b, dfbde8f48f86520c9b1059218875b8682899caacbd5be4dabf47adb09c7c3ba2 + +# g_scalar = n - 14 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632543 +r = faae7332fd12c72e1717bf54c6832660126e48f77f9707e3a242a35bb0cf664a, ead8f922d155e445171be6c1d59a182441d6a9627cddc83dd84ad24866a2a794 + +# g_scalar = n - 13 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632544 +r = 738477ac5395b759bcbcd43f559e98110e356769856fd30dccc425634b2ed709, 043f789536184869832f9bdd42e0a43e978b7c708bd12d1cca8ad46f3ff11e80 + +# g_scalar = n - 12 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632545 +r = 4ee1df77cb83e1562409d29dee37385eabdedef5ca345a3304b71aa7d2697768, 800a8369acdc7536d7dd730575219299e8f12d0a3576a9c8f353ed26e344a4bc + +# g_scalar = n - 11 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632546 +r = 3e7090f1649c90731ff3a4158dac1ab59de407956e7fdfe0ea7d260a6245e404, 976cffdb1eda4772f3f25576e1529bc2daf06c621a809e37e5897a9ed46bb177 + +# g_scalar = n - 10 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632547 +r = cc61c94724b3428f737d2cd648250b4998f9868a0fcf81392c18dbd19dc21ec8, 878e65aa14c4b54ba082d29a88641a2d3bc5766fc7c041f7f3d4bf877f226189 + +# g_scalar = n - 9 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632548 +r = e05b3080f0c4e16b2cc09c0444c8eb00abe6bfed59a7a84175c96e8f264e20e8, f799a631027ca065d491fe65774ed0e5a950841331a2ba1ce14888855ba0cceb + +# g_scalar = n - 8 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632549 +r = b763891eb265230d8f90f02af02cfc6b462ab5c56f9b345527f14cd19499a78f, a913ed0c88f9208aedc3847b419f440fde1ccd83306145ea0a625c56acd2b688 + +# g_scalar = n - 7 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254a +r = 13ba5119c3123e03f43eaab50c23bb082bd20213d23c00f70746354ea0173b4f, 151226e991dbf799106cc4238836be6a98bd0d0ea2598422d7b82fcfc0a462b2 + +# g_scalar = n - 6 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254b +r = 13074b5954213673d50a961a5b17a3ad55ae744f346cee3e403947373e77664a, 5b366e91b5f808a10bdb2bb3109c60eed663d4ad5200eb4a6c2c9ddf2c881bb4 + +# g_scalar = n - 5 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254c +r = c9079605890523c8941cb5aad076c20c90ec649a94b9537dbe1b8aaec45c61f5, 8c5f8943d22e16eacabf56788185e0978c3a97111a1477d414cf64b51845b0ef + +# g_scalar = n - 4 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254d +r = 577362f541b0176b0cdaacace8100af24650a6edc623c17374b0b50d46918dcc, 7b4eb3c5b3a5479d9493c9211a222dd1e89d7b8f05290bb8d2690db31b345459 + +# g_scalar = n - 3 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e +r = 26936a3fb6ff747e66ad77dd87cbbc98b027f84a087d81fbffac3f904eebc127, 2a0f95d51a7833f9877df7cee5d11671a7c1b853f79e01e54fb3a3e0367c5814 + +# g_scalar = n - 2 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f +r = f6bb32e43dcf3a3b732205038d1490d9aa6ae3c1a433827d850046d410ddd64d, 873a88adf5a475c5e65704f16dfbd241ead3283514dc9007d0c9b72c9e411e5a + +# g_scalar = n - 1 +g_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +r = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 diff --git a/vendor/ring/src/ec/suite_b/ops/p256_point_mul_serialized_tests.txt b/vendor/ring/src/ec/suite_b/ops/p256_point_mul_serialized_tests.txt new file mode 100644 index 00000000..f2cf86b5 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p256_point_mul_serialized_tests.txt @@ -0,0 +1,13 @@ +# Similar to p256_point_mul_tests.txt, but tests point decoding and point +# encoding too. In particular, the inputs coordinates here are not Montgomery +# encoded, but the inputs in p256_point_mul_tests.txt are. + +# Regression Test from https://github.com/golang/go/issues/20040 + +p_scalar = 2a265f8bcbdcaf94d58519141e578124cb40d64a501fba9c11847b28965bc737 +p = 04023819813ac969847059028ea88a1f30dfbcde03fc791d3a252c6b41211882eaf93e4ae433cc12cf2a43fc0ef26400c0e125508224cdb649380f25479148a4ad +r = 044d4de80f1534850d261075997e3049321a0864082d24a917863366c0724f5ae3a22d2b7f7818a3563e0f7a76c9bf0921ac55e06e2e4d11795b233824b1db8cc0 + +p_scalar = 313f72ff9fe811bf573176231b286a3bdb6f1b14e05c40146590727a71c3bccd +p = 04cc11887b2d66cbae8f4d306627192522932146b42f01d3c6f92bd5c8ba739b06a2f08a029cd06b46183085bae9248b0ed15b70280c7ef13a457f5af382426031 +r = 04831c3f6b5f762d2f461901577af41354ac5f228c2591f84f8a6e51e2e3f1799193f90934cd0ef2c698cc471c60a93524e87ab31ca2412252337f364513e43684 diff --git a/vendor/ring/src/ec/suite_b/ops/p256_point_mul_tests.txt b/vendor/ring/src/ec/suite_b/ops/p256_point_mul_tests.txt new file mode 100644 index 00000000..87ece49e --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p256_point_mul_tests.txt @@ -0,0 +1,1665 @@ +# Scalar Bit Pattern Coverage tests + +p_scalar = 00 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = inf + +p_scalar = 01 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 + +p_scalar = 02 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = f6bb32e43dcf3a3b732205038d1490d9aa6ae3c1a433827d850046d410ddd64d, 873a88adf5a475c5e65704f16dfbd241ead3283514dc9007d0c9b72c9e411e5a + +p_scalar = 03 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 26936a3fb6ff747e66ad77dd87cbbc98b027f84a087d81fbffac3f904eebc127, 2a0f95d51a7833f9877df7cee5d11671a7c1b853f79e01e54fb3a3e0367c5814 + +p_scalar = 04 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 577362f541b0176b0cdaacace8100af24650a6edc623c17374b0b50d46918dcc, 7b4eb3c5b3a5479d9493c9211a222dd1e89d7b8f05290bb8d2690db31b345459 + +p_scalar = 05 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c9079605890523c8941cb5aad076c20c90ec649a94b9537dbe1b8aaec45c61f5, 8c5f8943d22e16eacabf56788185e0978c3a97111a1477d414cf64b51845b0ef + +p_scalar = 06 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 13074b5954213673d50a961a5b17a3ad55ae744f346cee3e403947373e77664a, 5b366e91b5f808a10bdb2bb3109c60eed663d4ad5200eb4a6c2c9ddf2c881bb4 + +p_scalar = 07 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 13ba5119c3123e03f43eaab50c23bb082bd20213d23c00f70746354ea0173b4f, 151226e991dbf799106cc4238836be6a98bd0d0ea2598422d7b82fcfc0a462b2 + +p_scalar = 08 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = b763891eb265230d8f90f02af02cfc6b462ab5c56f9b345527f14cd19499a78f, a913ed0c88f9208aedc3847b419f440fde1ccd83306145ea0a625c56acd2b688 + +p_scalar = 09 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e05b3080f0c4e16b2cc09c0444c8eb00abe6bfed59a7a84175c96e8f264e20e8, f799a631027ca065d491fe65774ed0e5a950841331a2ba1ce14888855ba0cceb + +p_scalar = 0a +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = cc61c94724b3428f737d2cd648250b4998f9868a0fcf81392c18dbd19dc21ec8, 878e65aa14c4b54ba082d29a88641a2d3bc5766fc7c041f7f3d4bf877f226189 + +p_scalar = 0b +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 3e7090f1649c90731ff3a4158dac1ab59de407956e7fdfe0ea7d260a6245e404, 976cffdb1eda4772f3f25576e1529bc2daf06c621a809e37e5897a9ed46bb177 + +p_scalar = 0c +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 4ee1df77cb83e1562409d29dee37385eabdedef5ca345a3304b71aa7d2697768, 800a8369acdc7536d7dd730575219299e8f12d0a3576a9c8f353ed26e344a4bc + +p_scalar = 0d +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 738477ac5395b759bcbcd43f559e98110e356769856fd30dccc425634b2ed709, 043f789536184869832f9bdd42e0a43e978b7c708bd12d1cca8ad46f3ff11e80 + +p_scalar = 0e +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = faae7332fd12c72e1717bf54c6832660126e48f77f9707e3a242a35bb0cf664a, ead8f922d155e445171be6c1d59a182441d6a9627cddc83dd84ad24866a2a794 + +p_scalar = 0f +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e2aa0e430ad3da09ee337424e481937003cc23ee56e27e4b72bcd8b7bc60055b, dfbde8f48f86520c9b1059218875b8682899caacbd5be4dabf47adb09c7c3ba2 + +p_scalar = 10 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 54d63c809103b723d5ef2f7c2c83f5495882e0753ffe2e6b808b0b650bc6fb80, 9b12084cfe101de0aa3b9dc44ea7f161c98f3ce7b4f49a780d0ee429ad5dc064 + +p_scalar = 11 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c1a35c0a6c7a574eb0f139752cfe2dfff17624b6ac0a177b97091dcbd53c5c9d, 142aedd8cd8b3c30d0b1db80f2e77c44fa8a40d0176347f1dd82ceb96c186678 + +p_scalar = 12 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 675abd1b6f80ebdaa6f247ab412e29794afc964d8f8b403e5f3e51c856ada97a, 93903825fafdc6b3d9d96d80e47b8445b4d5a35170b0f4c3995d428da1b7a5e2 + +p_scalar = 13 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = fe545c282897c3fcb8842277752c41ac68363aba25e1a16efea912baa5659ae8, 08df11d992eda6857a99a1641c6af73ea7f9dbb60456883ad2c9161823b39694 + +p_scalar = 14 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e2d1eeb6fe5bfb4e048099d95dd283ba5916868f0f862bdc8a979129d2337a31, a11efb1d3a011f306e9e3ac07556a1995d2b13e9000034517d10e3be877bffa2 + +p_scalar = 15 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ecead9f4c16762fc6d2a506c5a3f3b3074e1b2654783f47d562e4cecc135b208, 3f792a0d36b8805d858afdc18053d65be4f052407c44c39e0d622b4d1d791a46 + +p_scalar = 16 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = fdc777e8e93358a46a0b0685d2f8ba3dc99ffa23e3912a9a0fc611352f6f3076, 86c172f7a2a32f8c6216e825eac5ca4a9bf3d296b2dc015b6b587844cabea0fb + +p_scalar = 17 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = af2cea7c1727bf42d0825fa2a358406937c7a7e89e2e1f6ef4f876532de45068, 7c2f97836f889991b7f971ec8e53d08e1a025b64d8d660b5fc9f5b0461b87a56 + +p_scalar = 18 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = f97b232f2efc311561d7cbf91d2b469f6d0d755040dd9a356d3883b215d02819, a6a23aa0358c847689960fce6c348afeee15b6b7775e1ca95aae28af4db43438 + +p_scalar = 19 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 966742eb65432a2ee395993332f1f3af6fc1b49eed6b67b0a4a319acd837879f, 846b723ba9086698edf977a63648ce1169339ceebc0bc6afb47236014b699dd7 + +p_scalar = 1a +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 994baaa855f2fb101ac7c5eb857ff6fbe6c9267ad8b1753861e4ad32ed1f8008, 12e87fce2ed1a539eb021684a056bb0aa5c676759d753af77b30eb1ee2db7fe7 + +p_scalar = 1b +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 9f8aa54b2ef7c76a49d2c9eb084ffdd7d36a42d7aebf7313042c2af497e2feb4, d2bcef9627b421cfd2682ef78714b344c42f3991224804a76dff4845f676a18f + +p_scalar = 1c +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e97f6b6af2aadb9797082ec0cfe153eb7323cb2830a6a8924b523eb7172ccd1f, 564b339fbfa7ad88b59774b7d2f348e1595806397fb4d597e2c2c6c12e57c25e + +p_scalar = 1d +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e266f95948603d48944a70270317b9e2f1be963a0d9258805e5db46acb66e132, c867ebd4d5c41de5756996c688839e606fb8dbb95d04e75c6724998ca3df7766 + +p_scalar = 1e +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d0288cb552b6fc3cc5f4d6cd3ac77acda3a14e49b44f65a1b4241cb13298b343, b9f2ba30ae9fe08e299825c864c55bbe498aaee2f94064b52a3373d0e3fbf543 + +p_scalar = 1f +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 948dc4f8b1fc87b48ef5689d3cf7600ddd3cf7e7473017e6e2f73c696755ff89, 0c75176db284b8bb05131202f367fc03d26de35e67149fd72616017eb15acd66 + +p_scalar = 20 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 39227077695532a4bc6d6a58fead0197befd904c4079dfbfd8c5fccfc5e3a3d8, 9dce286c6a6e3d5c846963e55265d1bf81bb649cb7f566f7f61dc1922410bd0a + +p_scalar = 21 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 33ec6868f044b10cac09c4ae65578ab985ceae7c4b68f103871514560f664534, 4e93bcfb3cd09c3c06f69fb089c0ea8baaf62ed8a7b82a10953b7cd4c5713e0e + +p_scalar = 22 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c982ddd4dd303e645b0673a375678d94caa7a5c6a391849db6ab20147ca23cd3, 5ea6eff2a8f28b08388ccd5cc3a96bd9445d34e19078906d0284fff4a249068e + +p_scalar = 23 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ca640b8642a3e5210b8e4134efc2b4c8742ee464233e76b7fd16847fdec67ef5, d456fe9c744b8508db1b54ed94dc8508cec3cff4ab87ad2a9ac5fe6f73149556 + +p_scalar = 24 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 3569656cd54a3dc30ae4cb10d257576ec691d0bd1b06c57f3d5e58d6a8219bb7, b7f461ed22925adabaf53f451dae5f396cb17d2de9d401ec1a1451426b325fc5 + +p_scalar = 25 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 2763a387dfa394ebc5748baea677d806b636458c7f178d5500467bc58cce08b5, a74c9ebb9dff775809c1431aeaa7b9d3185225c290df27af5ed4bb7582c31449 + +p_scalar = 26 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = adf0c7dc7c603d6c7463fd85222ef33b512331170fe948ce8a2cc3ca4d63c0ee, 265b3d7e637f3cb342557b2971a6ce6333554ca740c7fbf6f13cd2c401889a1a + +p_scalar = 27 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 5853e4c4363186ac068f237d16fb36646f5ae714ff0b9346a9d89488a059c142, f3f43f1996e6dbf8b8479b051eb184e3d13b589a7e7d77891d2782dc9c3ad067 + +p_scalar = 28 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 462d7b0075f732278909984c66f2728083200f0bdf25e13ce4d7681db82e9f3e, fcb999ec2e558fd154da915ca10abca68b391e74c954e3cb26f45e770d9ae867 + +p_scalar = 29 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 98100a4fdb01614feeca111539ce22716fdfe0b56f072822624d60492ed22e91, 08f40112fc77b5853988cda6e2a826314906b2d2378165b8494f255d5ca39d70 + +p_scalar = 2a +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 649c89ce5bfafe43c2e2594c30a92f8fa155cbe31da6a5c75fb35ccfed2bad01, 0c57301b764382c3b4ff4df46f9feb3064ca69ef0cd3af512ea799821600da85 + +p_scalar = 2b +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 179c85db3db01994b7d9ad900574598180c5bfb4878873fa4ff23ffd248a7d06, b886a0af6a4d2260616e32c45a195ce7b27d2fae15231a5745be4f9d9e596993 + +p_scalar = 2c +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 5f3425f6a98dd2915f0e2046e381d3b0009194abb29110fbecfd7c1fd55a897c, 149d606ec7845bd6c685db822962cbe8fbdcbb94b4f7c480405f99788cf2af25 + +p_scalar = 2d +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e94f7d346d8232781b1e8ae057477f580032940b946c6e181ee426ccd5cd79bf, 28c53400d326194b88d109213807f37e3adabb9708d4cc5a38b8346987d45de5 + +p_scalar = 2e +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = cec684c3a42931dca1030d5babf825e0785c339aa06e9eba4075b5b149ee90d9, fcc25cc63e48079ba8374d3faa087ca2babce29aa54bc0d4bd549d363ea7919c + +p_scalar = 2f +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 4b969974eba78bfd6b20afec715af2c70a624fa936c83906283c7513caa76097, 64400790922202d9fb7e62aea2126c2b646bb1f0845135ecddf8aa3326de29f1 + +p_scalar = 30 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c8403902470343ad1a1baaa76d8805bda7496529bbd803a06b34413077adc612, 7a103815becda33e578a0a31ad628a1cf4d9280548273a48c60a6099e8a5200e + +p_scalar = 31 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = abdbe6084fb7db2bff4cd0b228766127ffe7048453dc690921950b421ff6acd3, 2c6bf8800db805cab2870a6d087e7127d9eb82d90b9ba4a57c836dd7a1eef617 + +p_scalar = 32 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 0dceb8db2b7eaba7edfbe268d5b1fa6aa78bfbaa136852780fb9c2d0488c171a, 282cbe6a3c9d73edbc488e9433ebc5b91021851a5bbb636940617f76651d48ef + +p_scalar = 33 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d20ebe0d5c3fa443da1deb852f4318d4e20bc0ba1e5edf3f508cec1c3b3f64c9, 28ce1c7b5d0ab3d3665a1dc27d97e39d9e0eaee4a1e5a09ac8f4b1588cdbe15c + +p_scalar = 34 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 88f77f34d0e5e542905a3201c67528b72e0ec469af45f9c02692f36e83445904, 810d0dd863f0f073a3d8feb464413c61dc46d152dd20ca9d098572d6a79b9783 + +p_scalar = 35 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ec3a318d306634b0912e8beda8c8acd95f9c3fc492f2467997359638546c4d8d, 045e25a5bcb9ad7d4eaa432d23501e68c247d091addeec0d7fe980be3ce34d9b + +p_scalar = 36 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = bb8a0feaee26c851c1286ff925c4d56c4f2e512ef8557c5fa0425b8eb212cf53, e5aa91bf156a6a15c20d885be2e6c94e811f3bbc189d9a553d708f2d1829ef81 + +p_scalar = 37 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 5cee8449a7b730dd0deb0e4a46c814c131eea5bf07ef5be6258bbbf9e7305683, da17febf0eb30c0c3d3095977f1ae735118a607961d8594b154b6a3a5fe7d421 + +p_scalar = 38 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ba3f0c4a7451ae636a84438514600044bb1ff3ca9556f36a8fc441407e8d7a14, 7c6d897dfd93d3f8b165a43d5b4a6953fe1f247a4e0ddeb420353da4e0650cd5 + +p_scalar = 39 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c13298306acf8ccc068212e3fd1eaf381bfeea57c7385b293ec832e77acaca28, 25bb3938fffe89da3a54d9cd386485fea8b7f9f3499e87d546f60d24d55361a6 + +p_scalar = 3a +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 305f725f648d02cdd66fe3b67ed78be199cac80de4299aaff26c00e8a7ea82f0, f9c8b66aa998b8bfe854a9d241a004c1058facc2859ce652cc12e43b9dc04de4 + +p_scalar = 3b +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 4c2bab1b8add53b7cb9727eaa2d17c362100d5d3a8d063d169d44ed65c46aa8e, 5f9db666b904857599ae08fe831b88078875032d57c814155f7b16f3eabd98fb + +p_scalar = 3c +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d40c4ccdbc6f9915026f8fe2671c39bc33fc23364189d9c7dc1e6828ed8a6e19, fb7dfef5441b17ce3bf5fb42b0ae5269ed39ae60dd5200d3505eca4407f18a35 + +p_scalar = 3d +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 994a44a69b8335fa71cdf6537eceb50a59556621a9404f843667eb1a7f4c04cc, f2e4387e78d4240d499a7b9925bb445db8c3a980112bcaf2280507e624146496 + +p_scalar = 3e +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 0dbcb03ae539b413177aa4c02089a2336ed7e061ed58f5a7e535f175a1962f91, 949f2fffca531ff722b800677eb416119b8d1a1197f98fe11c23bdb144cd1c71 + +p_scalar = 3f +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 0763a43482fc568d95c376329182cb26039c4800f0518eedb8d3d9319ff91fe5, 6f7895fdbf6a64906d4083706edcf21f536746d07db17e688f83fb2ac7c18945 + +p_scalar = 40 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 95fb8394569b38c77da70b83c2c61e01380a0913089f73b9db6d96f305968b80, d698dfbaf17bb6907fef5b5f87bdb407708d94477051507d65c39aed7f1201d0 + +p_scalar = 41 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 01628c4706b6090abf639ed67765765e79527db7ba66f4b9dc2306ebfcdbb2b2, 82f6953ad0e8b8b0d36f26730c1faa29cc34896f459a60b999149d0e46a84b5e + +p_scalar = 42 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 78ed4fe6e3a7de485a7e384de42f8cb2a3cfa7fd44b81977c7c6e4d1c4ce250f, 4edcb865c16f620563fccbb48aaab052aa6edf9c2f0a44d556dce373161a8e35 + +p_scalar = 43 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e8218ad07de96a54fc88362a891ea186c16d0c52a48a4ddd86f04d3b51f9c391, 02a6281365709d2721c138d73cf5695ffa50ba96f99df517d38ca53ed0cc5085 + +p_scalar = 44 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 031195d5bb4a44b9b2cdb039f99c55fec35d34e70dd71fab8732d5cd6a93954d, 0996fb4dbff36b9dbbf2136131f073cd448fb8cc84a8207e455c80a2f7599f37 + +p_scalar = 45 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 49d3ad05548efa2ac856868891e9ae0987986a54361bfe259e5da11cc5e79347, 92c84e04ab904134ded953aac5722ed96415f2f1d9aa2eb06784f9780b14a309 + +p_scalar = 46 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 100392dc78c04937681d690f2b3a8c597263de1539f76b817c5a2a14f58a379a, 3986c52c191d0c4f63391dd5d8365d152ee51bd352fe7d1bf81a1717a4106ac5 + +p_scalar = 47 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = dd421b5d4a210364f94aa89b40750d0149c7cb94fc05804bf19f382e92aa7864, a8b3384c6c87986fee06b8196932fa8dfcf5ee6122b50e13a932ffe1c620c98d + +p_scalar = 48 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c3b025a015b15144eb5d0c75f38fae9cb1ee4879a360fb557331369679c1e3b1, 9032f3437f65f90efc9714e0d1bd7c1ee45f347463a2d195cc52acabf23bf9fb + +p_scalar = 49 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = b2dacdf66ef82fce794922ef17e29b1a2b34a7dc096fb852ae8f8fe1eeb03d1a, 3c68daace507d78859926dada17d2a4c478e459d1bfa35f62472337e0bd6ee11 + +p_scalar = 4a +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d176448e35b23e27b00eea8a5d34f708294b12e1ca1b04e046ce85a9e25a441e, f5b7aa6fd05e42d1883ad28aae66872ef3ba1ad34c400037a3177ac6d447f106 + +p_scalar = 4b +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = a22f8fbea42fd1f6f123716223af72e0cfa8ca0e2a7aa6ab616d2c02fb760095, db5e421d2f3dcfd31867f8588fba9581841e60f312bbc857af8d8a74870c2fbf + +p_scalar = 4c +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 1558fe4c7ef5b48a7c703717cd1823b4285bed3c21848f49cd331464c89bdd46, 64c4fbfa6c47c1bb11b7d9566c81e45cc039199f2b805c34e6399fdfaf1512a0 + +p_scalar = 4d +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = db15e4963d5baeb19c30c6422b2f9c49719a87be5a0ec9ce0a2193bfc266f85c, 7ab236296aefa062d4b0f38788146b15b877add5d160244d7c3cec641f2c8cde + +p_scalar = 4e +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c0e78a3897536f3f711f8b7f7b5065a47e96610365013b3aade6af11a6ab1ecf, 07420d147b8b2f3815ddbf3310694b8cbf84005f4dfeec8eb74bc763b9bbdc2c + +p_scalar = 4f +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 5ed556aae89327fc58f6428165f89e14dd306e2a05176f8ba40206d330ff0e92, 48a20a12e6e5bde12f8c8f3bafed7c8af685ab0166dd84e93d4e78f507cde447 + +p_scalar = 50 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c0bfffc45263832a2074213db27de57335ff9aa8b5f86a2c492bdc0752b3e584, d66a6e625b32d9a0ad495e8c6ddf0bd7e4fc828b4cdf1404dbd63dd5e2b639fa + +p_scalar = 51 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e0beeb1aebff18d3b097c711165c6e4c8e9d0af402ba3183d3a5d81fc63d5e79, 8530bbe517a43ebb3424024630d6f2e05fd243be901a4d62019a80ecf7fe6c84 + +p_scalar = 52 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 8d97fd53554fa366b932d0c17527465559d18be925a81aef80ee662fad29cf9c, e709e0c2210c0663b689ed9ce704fa51be5b8e1c16cfb90d52a34db8328762e8 + +p_scalar = 53 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = cf3086e87a243ca4f87abebf2ab80485125d4714ec67199a2c9ee62dc3363a22, 680ffeccb849b41bfac95c624e639ed9a164e9eea9da5528a3ad4fae39b1f622 + +p_scalar = 54 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 2f83a889ca881f6c10b429a2811a47eb2cd0bab9941a27e9b7f1695a43020eec, b34c3ec9490c9fcc20b8be58e46613a098064580d1ba344eda9c3a6f097c176f + +p_scalar = 55 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = abfc8457b5e11eff36bf2f65ea65641aef617e0025af76773646b0dd7e1ee314, ea68ae1c1e34514244ff9951e0d7dc96316e11d9febd7ee46672053e70ee6d49 + +p_scalar = 56 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = a9ea1b80f80e4b9023fb74270b4af06e783b9ba6744a6528dd5c2b8142a18dc1, 1936c4cd310249e36560fb0f17515082b5d4a12b82101ae4aa68a609123590c7 + +p_scalar = 57 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 2bd0204360826caa041252997f6b0670b856664a2d4b409b516329ff7b4d8b2c, 50b6f7d92a300ea9570bc654f91a71c132f843cc3dca2a93fef1add99e22434e + +p_scalar = 58 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 948fb3f76932e6311707165bb939f40fabeee3e9369a60677d81fd488418cae4, 272c826ad87a68e312a307d236ee7b83420e89f073806245ffa5e2001542b971 + +p_scalar = 59 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = bd88aca74765b8053ea123446310eb5a62d51e29fd54487dc1ee6264a7eabe67, 8eaf07808dee1bbb854b622df60670659bfc7708c4600010484d7b41eb0496e5 + +p_scalar = 5a +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 8307d5cb55648a4cf3df44ded7ee64b747305b7483e904469af9d782de992e6e, 1b7a46f1b63f495f52cd6b04e3cf65a65400a94bda2c0211ac894fe71d88d7f5 + +p_scalar = 5b +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 0211de8fd56927054a39f02bbedd4f4727113bb4ae6a94b8d81ad9386982f865, b58f5407a3aab12d0575a464f4b95a60dcab8e619dc803972a78ec739c36d096 + +p_scalar = 5c +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = aee309e543ae4336e4c8417839093801a8a38bc31487c5269d7127d76294ba47, 2eabd7a5d0554d6cb58df8a2808cbbd566d652b270b744ed2b4ed8c66ca6daf2 + +p_scalar = 5d +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 0581b4711fdf24984a278686e16396070aeaca9afd36b1af64cfdc70d9453d29, bca53b986ab0044d0093e587065d7ad0df4fde3d20de623a7dd6f1dac29e092d + +p_scalar = 5e +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = bf87ea83037278d9c87bdb8203d41796955ef205d59848ebc82a7aefd2df5e7a, effe0727227a558507158615205669f83ffd79279beca88e3a7da59c78e65157 + +p_scalar = 5f +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 76a8f9fea974291f9a127f2bcaa12d0d6684ad762b346fd2263e039bb308cc40, c0d6c024d3290bc711e4e34acbbbaa5e9ab66367f3a2445f37fdfb649755e61b + +p_scalar = 60 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 11eddf7fd0a0da0d14f356cc6abc354d6d490a4b19dd329b802b8d2333e12b70, c0d5874bdbe5d48ffc4b733b83d6435d02d0b07402fda7ece1df7cd727802e27 + +p_scalar = 61 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = f1ae5380578181c7ee848e1d2566805eda8cdb78397e43f4dc90323bafceb64d, e042b8efac30c1977ba880e0cd9f48987a0b263ca4974818d2384719638f3883 + +p_scalar = 62 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = a6eecf308794885e74b44206ee3751becc8715abbc82a095d5192c88589b69ff, 160fb32bdb3d1cef94a20aa01c6f25a45c067c89255b379b5fa5855722f31c4b + +p_scalar = 63 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = bc438ae1a4e65b07650522fd4a9a3b17b1f1abb66a7b43712d037bf83f9432b4, b598c01eab0329a6fc5c3d3846700b4c854a75c18aafc1b9ce4a815d7b96c3fb + +p_scalar = 64 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 55401274eb1385f3f7ac46733fe90a2ffe49233161c52cf8b9a17db9bf61fec5, 9c41619a5e8eabde955f973dcfab730b5246164a7a4539485a247ad3dc02f970 + +p_scalar = 65 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e9b1c23914da499e6a610374c569a602bbe914d3b99cd026b7a96e0a4ea6fdf7, 6b3161f424574039a575eb9bb418886c8cedae7e90de97834a090f01523e6566 + +p_scalar = 66 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 0fcaec0ffecf6fedce33e49cdd3dac5cf5284782e9f60f1841a6fe768f9b4748, 5d88925f7be836710c2cb707df01871c9bba0433a436d55c35e31ecf5ab1203b + +p_scalar = 67 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = f51ec8724c3c386f57670e41bf619241d0a875e919f7f72c564bdda6c71f8d02, ebd64e0651e2c128590519f6cf5b06dba2086ca0d79e990cff513e61174082e8 + +p_scalar = 68 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 1d6de36b734fc1b835d2293fc7ac3efa90ee46554c2a623582d0020682c4bd6a, 9456d43421a5f33f8a51077588462f7b00330a1f9ede82116b953c403008a7a7 + +p_scalar = 69 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 680d5abf65e03a86c08ec1602b1d28fdcb11125c02a9ba44de6ddcb77b371390, 2c292eed1161aed1b1cb924f8e340368378fa836c431801a2a1384440acd87c6 + +p_scalar = 6a +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 7145405dff1765ecb81f9fb1279df6ff750c11bbc098aefac4c398cc1e628b51, d9d0fc13f8a85516a344f964fc017053ec8de7db843d8108c3c279e27c551e90 + +p_scalar = 6b +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ee206023efce1a7028f9cdebe9f6e8773571e4d1592ce3342ca0ba9c3796f4c7, 332816bd7158ff3f1ff7fc61fd21d00ed8ab1bdaf58097834dea61f7489c9623 + +p_scalar = 6c +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 9d873705000a079bd1a8678742e1cbf414d147984d7df1ff2871263f72371e17, f2993035b4a2be93f71aba0e4ec1d4b6c9cc69948ff6b195c580b52a1fe001ff + +p_scalar = 6d +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 3720b2475548de20e7b092174df861f4fd4f61e491ae8d13aec63acbdd10edd0, a02511c5e354ed39f329dd451478676618dd6277a93299f250be67b8140c2087 + +p_scalar = 6e +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e7009ee6652405a945ae78ba39dcab99b1fc8c8c23fbbe6e76fbedb5a463fbad, 86735660b10c81c4d8f38f9391b7bf0ea89eb6f180fff6a9465703a073face17 + +p_scalar = 6f +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 0cf804d77a9b6a20098f37bb0832c416327dac318072f08dd87f4ae086653aa8, 0650f5316fb2b8cfd8f5233a8eb74ecae33f2b325dc50598b463abc75981de8c + +p_scalar = 70 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 71704d008938c16745ab5a4d7832ba0c94e258f604a428f26a9505760a99cbca, 9afff3da3868c5bf18fcad9782c9827fa90146d23ff14df8246854f10774748f + +p_scalar = 71 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 734e0d078a2b0d3acc3a5ecb983538693289e86e10ec0d40a125e6c1b7ebcb88, 9e27df61b60c5ac32ec3356f8b80e6130594324f879f89461f26d165ae6ccc9f + +p_scalar = 72 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 08e2f429f216dc997afec8bb9b4e920c18849f8ebc30d62c751e03f0216f7c55, 43f113786db22eac69467bebf560798e684a695fb28407b8a1a2207de2933cc1 + +p_scalar = 73 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 7c3ff661d8ecca6e8a2627c4851b5bc7f15b920fa8dfce56ad19e039119f6cab, 16a226267767de4e237207aa01d0b6c8a94893a9455bc4d84622d40d2a0a4a40 + +p_scalar = 74 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d8f1fc5f6a92b9aac9f08a5659cb1b6e4b3de89bb2f5f79c87f9793bc9826344, 56375b4ad46ea8260f93d3738fab65a8ac3cf4429a47f0e979ca80614beda6a1 + +p_scalar = 75 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = bbdbec7d79af29b17890e8d54796883355a3bb1ad9699e9208e4c4901b620dc4, d3208079bb7f001d623ccc6d0598d7a3af3092ef526e5caf6d8af218c1ae1e43 + +p_scalar = 76 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 4977379654d7a19e24869d65bb07ad54f8f1d8415512ec1c24c00de93f5f68a6, 363b29c5671a649e930698ea3ad859a98be407f6fc437719fb0ca82e0f9e3121 + +p_scalar = 77 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 6ed0b988157b7f562be22ba0f3a49fb4062afb7c1e314dde87af199e6cc47305, 0120efea019118fd2817ebc7f0984aebe82d639c78848b687e9d30afd29ac026 + +p_scalar = 78 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 9c7ea21245a2473fb62aaf7c37e7454e094e7ddf4f6ab73a6ebdb7bcd0303ba4, 2ff813865b858eaeb732ea74d3e14abe65d87563555fcb68358918ab6b772fc9 + +p_scalar = 79 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e1a8d418f77f10e127d2bf4f683b30d1d71602d5b0e5fe2014d7251a8c03e3f4, 517c6326f166afa4550b2b1e6cc6b78d00ce7b7c25f5b6695b6be5e1895f1528 + +p_scalar = 7a +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 62280f9a573fbfa8bf357e0c9358983ad183a961caf64cbd536eeea92f4ff97a, 855c4c324d5efb4eb39466ab42ae06fa9156ba434e6fe2c2ffe25e48816e894c + +p_scalar = 7b +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 2d7ca4d8f1e354871783d1b6917e47255a71497198a5ea8c62ea859803b58b02, 5146fbe29618773ba78f8d93e91c1fd525fb337771e800abc0964b2b64b2bcdb + +p_scalar = 7c +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d8c0472156db126649b1dfca7f1412750a10ed1576d7996d10f264bc85fc00a2, 7bb713506fed7602646b3b52b3661bc6a727afaf1b226fa5bc20540c32897bc8 + +p_scalar = 7d +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = a9fe2396bb85b9cb04b76d2d1ed32559f72dab6d225733faaab54cfc93740130, 4e9295063c01443fae23a053eba00f2add6dc6c5a860c31ded74f2db40dde60f + +p_scalar = 7e +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 6941195b752838c39a7d703660ab52e9519a47b4807a9d289c9635be52bf127a, 6e5b1591deadea0aa0eac0a955c921d27ba60a90ad89e8e79f0041d18f259ec0 + +p_scalar = 7f +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 15fe6a86904a36cf6072a061ae619f2870e9016cdddfd92836e84bb6dee35b41, 898a6ddb541c3eb52f57786dbb0bfc0d02e3b569f529fd2f6549697409ffa69a + +p_scalar = 80 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ad311f2c46d5a6173749bba4b3ad9db57ef2b6b9ac62ff5463c5cb817a2ad62a, 05c72cde13ff7e780755d9928a294ec74b90150dc987cb0048857f783d00c492 + +p_scalar = 0200000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 135dc5395b54827dd161d2cacf780900bcef72873566cc63b2330fef4e4ca463, 74f3a8c6d9ead371168ca79292ccde25ef5ddb10f8205f939c70fad1d840e439 + +p_scalar = 0400000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 15b4488b29fd9fd06e1da8c39a33c6771fe19e357fe4364e9910ba6b23a5d896, 0d3b086249137c65c02e4db6f81a9a716df57590547e9c17e0bc6dabe5e0dd40 + +p_scalar = 0600000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e78c2ec0fc61206741311f8a38038a5d8f860c7943ef881c84cea0691416a6a5, ca41108461c93c6200aa75130c9ed3454b336200a69fbf68b6b2d17ea528ca7e + +p_scalar = 0800000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 0bdec21162bc679298204cb64fcf68e15d2b0ac6c717370e8b5c619c76497ee8, fc8db7152d2b034ca10496c1c2f1f374061c05691f21e53a968c331059c4efee + +p_scalar = 0a00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = fe2bc235e52800a089fa443d07d3e75e96e9793ed510053ccf57fca29849e95b, 11ad8b81369f4f1fde81bffa1abe1a6d4a7ad5b718dddd9ce3df7473f53818bf + +p_scalar = 0c00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 69aada7f6d6180a56183291b6ed77d1c62699718e770b20dd3694e2ab20364e4, 2ac1b72cd7237812295dcf758046927202817baa878fef88ae06fab40e7aaf64 + +p_scalar = 0e00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 1280aafbed23f0d182293299cdf809af94589aac6656bbe13e858c2ffceac518, 6405033235a7335e2a34ff4cbf0fdcdd1fef5c6630513e802154f3988cf91d5b + +p_scalar = 1000000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 7be5ed0dc475c1293f06d66c530cb4f3d8772d353381060380802dc91ec34f9e, f513bbea8d7a443646dee7396d5e4ba139c2d7a9360094b33461c3e6ce17d4ef + +p_scalar = 1200000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = f82412db37333f2074feaff5e72c2666cb98c3ea2233117dba89095174f9fd77, b51180a01afcbe79358bec59ac19d3607e5b687c85448e55323c0c5062d8e35f + +p_scalar = 1400000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 5ec40582c9a82fa78d5d177c64ff8578982be4fd46700b8b37071afbe8316c45, 52b4b08f3f3eb21aced0c69fb44448b3db17f60c60fced7baae71c8430579987 + +p_scalar = 1600000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 2a1ef7d7822e8cc963aa5cca4fd924a2b44de63e08ae4169cf62c250869027b8, 7f5cf538002ed8de737d18ccc5780e107d7bd440b479c9141be4c839914ca0c3 + +p_scalar = 1800000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = f3b4962f5f3e6c3e028a81514f3cf2dc6415834bac4ab3aba3d6f4868eb6e843, e48886e1f978ecce3ce3229464eb6129bc8592761ef431aa6ee6516f67822d0d + +p_scalar = 1a00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d9025fff8a8af1c635761c8ee1f6176d54c439b0391fa36e2f41e643356317fd, 945416afaa1c4881851248380ab5d45b44b722ed6a5b8ba4737d90c30833bb8b + +p_scalar = 1c00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 1eb6a9688f95277ca3fd22fbcea3f029965a774094e746409c34b650e16e05e9, edef63b45310a343156d3e99647bf2b7526e8dff0a70d011dadf59c284527b09 + +p_scalar = 1e00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 870ae6bdc2754097035ebe4addc4f080ed400a2232cdc71aee20415c2245134a, b092884c8aa21a5e16a601c1a30573590a80e6aa1b0aa67d5e6d197b3fb728d2 + +p_scalar = 2000000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = b7a23f34b68e19f8d0107914ceaae10ecbe906f04c93302efc189ae71e29a3ef, c30f4406c2bbcfc89aa6e409b25e8eecfce673920352363716278a3d102dee62 + +p_scalar = 2200000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 68a9969c8e2256288644ef1cdfceb8ab862ae25e2ece8f72d32d7cec0094e84c, 860d7d9237a468fb342f659a640f3249cf7591e87d45dbd420df61d84cee8789 + +p_scalar = 2400000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ada4cfdd7ecfa8408c94a21ab972da90598d0bf8849be4b7ab293027aad991c1, 506cb915147a9d206ffbdb14959ad5aa8359e85efcde65cb6c2b463f043139c5 + +p_scalar = 2600000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = f6e29e442433b4c681d700b2c6fa654a9edd11a6b7a82bb80ef6a240c793c0cd, 2a221c4e8df83860eab25e2e7b77b685779c1f1f53e2a0ae5522c2a7660fe4e2 + +p_scalar = 2800000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 54476778acd2f1b6c92becfa390b3ef2b1643ab5911bc478c3e04d7902381461, 44fb8cfe6f4f86f611e7d6ef4a5ec53cd43ed785d3de39a57255f3b29940c550 + +p_scalar = 2a00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 574fc2b081704bde30651575aab5306d953939f44ead0fd9d6d8bbd2f2338d2a, 0d2ba583b63665ed12abd59ad3ae16b618d475fb149c0c70cbfdf7e0becd0d0f + +p_scalar = 2c00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 17f904ba45b0995e765a50db1a6fd0ffc5772beefdc3a47b83766947d17d4e0b, 3705bd94ebd02b2b98c726b0b934e0260a92480d3d8f55123119bc7cd77cb781 + +p_scalar = 2e00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 5090d91f0b80bcb946d480d77119c60ed7799b31b313c052bfe48a8ff43daf9d, c02509dd9d1e27a689641fd44e2a6d73e91964b166ea55f536b3b3e178c42840 + +p_scalar = 3000000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 389caef34ec5b10982159d07de7d6f2c945353e1b2d4c63aae485bb72b724759, 8cbd64453ebdf75d7e905c127c0dbfa0d23d3482226621bcb57144ac249a10eb + +p_scalar = 3200000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = f5aa74e43a64439e577793fce12c68ab07de7ab35133e5a2768978afed08d68c, 5da88e7912bd33f859ee2be3710df0cfdffc222ce2bba6fd9ba826f3bafa160b + +p_scalar = 3400000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 58c8a77ac0d58abd9947c636a9b6e05a8d98277b4a837f6908ed8febd56daf06, 041e7a12c71e14b91342e6a71c04f3a2e9329839ef892c2c0bab695ba0ede1b0 + +p_scalar = 3600000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 9bc6c2af18eaf22cf81a4b3e0fd97269d8f158f5d6df29e581ea0bc89b6956e1, 9c4b4d8628f8a1e4bcc6ab6270d0a6c3fc4405f16dae12ba3e2c31a1929daad4 + +p_scalar = 3800000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 98fe1c61f5b61d31fd025001b905b499dd4d06aff39e7832b7ef9760ff79d2ee, f71dececd3c7cd215cdd4f60aeb14e92c891c488cff632655607c67f3a0ed7fa + +p_scalar = 3a00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d7d80165dd6861d485715b2edb2589d37b0b8307280d1be142c772b68b61c205, ba7519a234f0c9acdfa1d767bda92244ef6a5206c475428a9dca8b9a7f78fe7b + +p_scalar = 3c00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = beeb3ea58c37888ea76697bd602e90655dc516824ddbc0b6aea68626dc4ad4f4, 935ecb9c6d33f603604a9f6b651bb20d1b747df45ca0bb7be13b5d0deba96eec + +p_scalar = 3e00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 782b816e9f5238b55631049161a549b25d485fac31ca379550e1b82c5de1691e, e4efd573a67b8fe35130dd212031f25f5600525dc0d6ad5fec0d468cb9c2fcb0 + +p_scalar = 4000000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 412c9e1e9fa403a4d1b299b504aea4a9047e2ccde180b2dcb618d590b01e6e27, e877ae428aedd469c5e49033199721e6b63afeca0ccd471c772d75c986bf8aad + +p_scalar = 4200000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 4b782ecabc2251e29f1ee33c0910e35e65854fd78777a63d723ee82acb8c9fb4, 7c75c30e3e16873bc701019f2cdcfe430a09be2add256acba5f97db2ba0f87a9 + +p_scalar = 4400000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 720d5901fc5cb4c4f2876026ea269465bee5f33e85425bfe3d16740409d9735d, a6506ac46b2b29e9d4cf469b641bf2ab861cffaa6c74643abefca879b25373ee + +p_scalar = 4600000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = a4fe196b936adcd72b999e56f814d996687afcc16c6ac81b2bba2fcb7bd03b00, 1ab858cdf2a167e12a228e923f83de2deee27d5ed2654ccf28e9a3d5768260e4 + +p_scalar = 4800000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 47f93e8f0d2f339d2df4486ef3b4e2e0fca35bdae5182b8d7f4b55864f6dcecb, dfc2165d0d72569235d4ba0bb9d4830fc1f81d45e3f65163b8e242d7c1c93b08 + +p_scalar = 4a00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 4b5a7b2307c5f1098b5c3d0371c68991750aa51875c77f94fb78df45414657c3, 4cfcadcac4d7da452026db79f61a19bb00a9b7aeae80e414b7db7b79c1804211 + +p_scalar = 4c00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ffab5705044464f22bac283b351571b3b88e7c47d8d42a028b002254c72340d5, 99e919d4637aad57bd1c7b347dbd0cbd1bf10ce5e573735768ff22be52225de0 + +p_scalar = 4e00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 5ea74c730418d46d3da600eade1864dfc4ae8bbb8b383d060471cf0dac517b4b, 44220f00df9a7e2ccf6df413ac330d0c8d686b4421917c512d6ca372422f8c60 + +p_scalar = 5000000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = a35aa23fbf846bbbd43da670d2f74daed61257ce383c8ce9b1e13752fb85fa4c, af2fa55364392dd2cb280ad5c3b55ea7092071203c9cb8c4a18bdca2bbde037c + +p_scalar = 5200000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 4644b8fb9aa64d9150c9f363b5117831ef6feacd1584fb54adb84fb6c1127e87, 5af26a8085d1122b9c217ff8c58b2488408b97ee0b241da38adf348eb20841f8 + +p_scalar = 5400000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 91c3a88a5b6e8c279d0a1f05fd8884e9f1539d9e4c076aa9d334b37c4b8e12cb, bc3bafcacf9e30bf2a1948f78e1f8a26cc7c918cf4672e8646d15e7745855b5e + +p_scalar = 5600000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 5e76ec2fd83f56287099228335b50df42b516dd73422c5c118d919e2ba9fa405, dea46d7ba6be19c7e2ac310f86196e7cf11adb5bcd22e983e488640762d3731a + +p_scalar = 5800000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 3ff4444fd2ad3a96e5d755618de929cdad07e3c765ba422be4db7c0067eb93d4, c3ee8d0fb564c728a6f5855f810805aeb144b9045aacb347ca2ac1438e0eb1a2 + +p_scalar = 5a00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = abe32380275a9ef53b7cd6098dc0954228abf7b7a9c7d8a5ec69d5a37aed7fc2, d89fbc8f199d31aeb6f74e3ead3671a34ebc16a84166800137db4e055970628a + +p_scalar = 5c00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = deb035fcce7723a22ca3e0a1d449c1004ff211619adcd4bb4fc56a1be50edb52, 1c4fef977971ff17c25e5fd56a4c368f2ea2c4a0e263ca39f956f57e77aa2afa + +p_scalar = 5e00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 7c0fd64417a177b5010b2e0df05981da66d63eab9af46f4588f0367ae686a10d, 63376f9703aabb207b7a699c10d37c1ef98f3720ab5cf6479931effba58749aa + +p_scalar = 6000000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 50235a0fdc91927053b2bb803ee35067bc56637b5f29cd078c56e735a64785f4, 777ef9a3a13f07f17fbff45a0f07fa453cb8a7cf7c69fdc4e6e549270d3b559a + +p_scalar = 6200000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 2dc1b8bb6885309fb1e70bcfd44571115df7fee1116cd289c547a21465944d7c, 5a4a2100adff0aad0b1626cffb8bb27fd14c2e6c8c275be6c7d820138bd23b08 + +p_scalar = 6400000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = f1445d07414974411c75d37565dfd734bddc1fd9d5a52b5d45ab2440e4c3c19f, 5c00cedb1692044fb726342f6f670616f1087a5b4cd9bc23c04be98962ba0ec8 + +p_scalar = 6600000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d1609bf2cd28c8fdc8b4a3a98a9fed30e6959e40b4a07fa19ffe9f1de32e3a6c, 4a1e06b336041e2b2d4cd3ddfcebd74413113e3950b4c34d2fb918dc46cd6c6d + +p_scalar = 6800000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 237c88057388378848d61dc507b6f556b2c6a5f201dbed52cb4f805a3e4e7d6c, 25082afde44cf841146f4bba1a363f26c60154730f6701cf320e4e7c7059f5f4 + +p_scalar = 6a00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 845a882c8859bbc2e883d25ff51993083258a70ad731721eddbead4a788e09c4, 954ce3bf06973608099aa5a1cb8e5a6085b82bb53aeba78c009eb3364ec42bed + +p_scalar = 6c00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 4d6eec323a1f89e99267af0a5dee21c6d56850cf6466696a53c474abad6c4e7b, c29df3748076072f982c5b89ddd64ab3382ca3d072639a61a9240aeca8c4f745 + +p_scalar = 6e00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d28527c6a3824aa9d34030745566465654a149071f100d40b1b006aebc0d6863, cf57d4bf75176d98a4ddebee9b71bf2c541a56d92c7ea275315715e982e255d9 + +p_scalar = 7000000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 8f12502ee0138997ad364df067b256dfde2d4ad1860b8bfbc370e522cc1b5e83, fcaee231345a245bc07648bb2cf9b45917ffeb533f437995afc05f23887c6df5 + +p_scalar = 7200000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 88a0df625c0cd66e4523b7dcd2c772806d46968e6a3bd9ad34f365ff3405157d, 9a00732bf6369934bc38025aa45bbf707c5afd733125eb17ce0c6f0f3ba6eaf9 + +p_scalar = 7400000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 350fed185a914c72b1ead64104f9670908dcf2b70004539e0f58cec54e27d357, 5533f0f16199265d9d3cf97965bb62aeba074b91b92fb538bb0bcadc3aeb87ab + +p_scalar = 7600000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 721595eece728342af86c88034fb313add3f191127a10139823002854cd4d5e2, 9f3bb1d9601b4aed7b75a48a325f5367443b4ec8af8951b3a9e5b2faf2c09845 + +p_scalar = 7800000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 394c3ca1652f359aa37951abff9f5089563ed687c3db1e5fec79a10fae256721, b104db405fa38d00eccc333d014ba1b9efd39bf1f5b6decf4951b323dac0eb92 + +p_scalar = 7a00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 829bec8ffbbc8adbcaa9b2f496d71f842e0d323fc98fb2ed918ad277a25ed969, 28166c21baffee49802af12b233d24e2a8c06deafafb2e333a4d2abf4f57bf3d + +p_scalar = 7c00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 114608474b9883e7e6183976a85cf4eaabd1eb6c8fbb831a86d4cd28294b04f8, 9793db050d1aa41eb31fda7157078ac5f304939f55b0c15b5ce7a018c3510ab2 + +p_scalar = 7e00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 8ccebd9296f0b3dbe251932fabb53deb5f020d8cd37bc364b63fd5141593f8c0, 34cd83e4786564de19a5851fc34f06c6ccca7d68534afe1b92f86f449b6cf24d + +p_scalar = 8000000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 9211e489de7f4f8a426eca29484c2ece9c4e7ad63c6341fb197dd46d95a7b1a2, da06d1b7f09f1fe8e8d79591e3c11217d4d3f6f0f9a8ba79eb66809138710e0b + +p_scalar = 8200000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 0695d25fcba9327ba26e5822d699d95b7a6c1acdf37b2836203a31d5a56c98ef, f55fe7336f090c5a6bc71eefa6525e79bb7f9f1f194de5bfaa2238beb7bce76c + +p_scalar = 8400000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 95e360666c4165c8b8e2959954327c6554009f1e6d947506e4cf728185967fad, a78389bce264586e1cdde00ce0f1a086afa0f66db6cc5ef2c640cf8b5c4c0ad8 + +p_scalar = 8600000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 3805f4e7a74465b996976624e2d6122797e8092e1a7c6add2ab55f653e360df9, 105aaf972949897cf26651a5fccace103ff94fec5dfb12be9eddc215f5ba9146 + +p_scalar = 8800000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c48d07aad919b53f72bfcbbf25a2f91f7112f4122205eb70be6dd7fc6b7733ae, b178c26282cae663c70ad8ebbdd2c625dbafb3ec91013a8ec15b973ed95e096e + +p_scalar = 8a00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ef1117f3334d256570ec0990a1bb0900c512ae94e04e361fbd7055ffbd4132b6, 1e15b34510397d8988360d2718ac678588eebc513fcec4d5ac26b4177d5773ba + +p_scalar = 8c00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = b36ddb5a551266fc72a174550b384fab97c8f9d8b94fdd362441c4c0ca8f86c8, 0b2d7199108eb224df89ffabf8f575e0c3cf9430068a4299731758edcbed837e + +p_scalar = 8e00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 1f07fd1a9ee01d68891d265bb9f79dc8d31da5b74b957a08455930bfd7425424, 110d6a3ad1118cca57d3f35c423f5902d33663dc2d6f23354ef6ee38a25cfd6e + +p_scalar = 9000000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e0e5daeb54dd3739389f747caf3c3030703ef60057feea5b805c564631890a36, b5e4284906a573c5c8e7c21d50df40d681b40e8a4ac6c69d01db5b3c36360eaa + +p_scalar = 9200000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 11a4ff0222e558e644144f890e8ff816669d7b57254db82633e0f086aef314c5, a545042d61f178f491d6dca4faaa253208a83da7d1abf3f4371acd90dbc10419 + +p_scalar = 9400000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ac45249aec82d6d8a5e1d3c6e19adb253f01996cbb97d0320130abf38cb5ab31, 2534ea7809db05101047eac71457406b02dee39b497e2b7c3d8910d1a3040209 + +p_scalar = 9600000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c738cbcb5a8e43bad9f6002307a003ad81351ce14ffa84fabe1b922b396fae20, 362d21f8ceca0e6d98c801c19d4b94040effb85f9a2e7e824ab9a137362105ac + +p_scalar = 9800000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d723ad15da12d3f14aa86124ac83299759198011fda9f625e8ffb637410eaba3, 17278d3a7fe4d4c66de3860db69fd06752cf7b3712456753aa223ac0d2597ef3 + +p_scalar = 9a00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 5bddf84d01fb6ab7717df9c3adcedc68fbe6587456a7fbaf7cc7479be15036a4, ea6f8714377703386fe4d40636f3d64484810517cdb79e553ccf5c91a3938061 + +p_scalar = 9c00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 0617a8dfe008a218c2700de3e39cfdf9d6b37e5eadb39a5c5e6afed1778930bb, b4c6d7fcab4adb7540d7ecf6657057cbef4004859a01af58c166bbe8140e1951 + +p_scalar = 9e00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e19854ec7a29e8cf8765ed78b03c224b072454d8cf4f0b1b746bf4ffcd5eb860, 979624d9790fc716f3d40cd5c626d3b0bda675912d9debbbb665e6db551a2f72 + +p_scalar = a000000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 6372def79b2bafe8b18e2c1354107588281fc8dd7b87f257a83b969946191d3d, 1c43104f1bd8ff56e1531cd27bcef30bc0d22b49a9e985c0250b44b7f2768d35 + +p_scalar = a200000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 9e15ebed69c53ab58cb605eda605ea2cb0766c76159bb5814ecfd1490d4d367e, 08fb59cce0d3f4cdbb12dd157b823412725b82ca3c22662e0a4e921c0fae9c8d + +p_scalar = a400000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 3b082784ac9daa213e9231dde959e9257f81bfeceb104d11989cd51d81ffd706, 2c44be725a065ca4718d048d0d7ec18fc2c099c83eb051261d71fd00fd80e5a8 + +p_scalar = a600000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ed37bac889c8cd093feb1494b52fe95b30df23d4bf8ad1baab45ff2f3b264155, e2a656426e8184ad50b24ff6968ed36755ab15a05a14cddc2b33fd0b18751435 + +p_scalar = a800000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 3eb44ebaa26cfda9ec294f9bd82e3b0c7adcdc636cfec330698970dcc1c88910, 98fd31bf0dcc0286194c7d00e797bff25b287f337382cb12d0b7736358611efb + +p_scalar = aa00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 6fd044f86e7c58d93fc322e9763408262abc70bfac2a8c9eacd17f62a70bedca, 1cae0c88d5db19418efb64e8b272c588b505a57c634c07e8a7b3b7aa3e85682c + +p_scalar = ac00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 03e6e884142b953fcf6e45c2f0b7938f042782b6c788822f7caff2a8dd7f4788, 9c03fdba806b71fe0ab7577c2cb83384e1a4bdaec9349485394cd3d08b708043 + +p_scalar = ae00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 541f1c670f8d83510a4f0dce10075d18a773c212de55a51ab85d636205e61d13, 1829ad5b8f00323d21cd1abe5b8c4a798647cac1d2dfbe09d831cf690f3ed565 + +p_scalar = b000000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 35e8048ee03c366502e23d41dfc6514aa5db5ab62ea604675fe5691ed785e73d, ecbc2e79242f1bf117353391d399b947d713c4bb7b31e5a5c074ee70e5255f07 + +p_scalar = b200000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d8e96623f2e1ed0f96c490c17b199bba4831540870192a511fd78414f227c4a5, 31f45190088c94a0959d925cae1a0b7556e8cf57e1a964129c33b8132181f30c + +p_scalar = b400000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ed1b755f2815d3cf2138d71106187ec35898b1930650dd7ce81907220b4ebbfe, b38056cb82c54a2b55878db37ac9ad4f75837547c5ee97d0abeaa1ebb0c6baeb + +p_scalar = b600000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = fb909a74cc54235e35059c6f94d6bfbf9aa5d2c1bd5a35267217348749af1daf, 4f41d2496566b84407ac1340451ccd2ad977c020e4667467ce401a280c7616d6 + +p_scalar = b800000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 12128b2fd412db03d45acfecc1c397c7110ef147732ebbe02e605d97ce76aebb, 2fa8b950c6a53d9bf56d6a2d5f34969d145d8cd34ddc97ecfd810f66d5b2ca1b + +p_scalar = ba00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = df8df34707ba78f463d2778a91308c54034c07d0eaef09eb0d13b0393524a32e, 3821eeb8c663cfb9e4b155a08cbc34744e80b886a906dbb25524e7609b6fffff + +p_scalar = bc00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 570f50b9ade5e185d379afd6bbac1e92f1ca3c3639b1290c6b3eda297e866baa, c09d1b8382c7905056e6189930526a456578d62d573e547f7250c29000770668 + +p_scalar = be00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d9b588174709218a1980177d765796027ca43bcb2bc83e9c14dd8c3678ffb696, 06fb5b1a18c5f5c5a69b595658090885a41347586783743a7d64ff6e983e64c7 + +p_scalar = c000000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = b37b515f042eeec8d64cd42d9c875d9a1a1db7e49924182ae5d7f844caaa358c, aa5b7e3e7dc936008211befda6481e8103cdd1271df9100cb2b22bf684e9a041 + +p_scalar = c200000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 1e6f624584d42c5a9fd11c23e1b2374586dd7cdb056b372c9a7bfb76f3086c58, f3cb97459a2da20e2e0ea9c7d6a9cf97272ea955866470574f10374f0b856d4d + +p_scalar = c400000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = def3204ff622e0f51e7dfc2f11b5036e56aceaa0609c4809389ca9c3b1d2d491, 614f7f1c3bffc28c1c998443628fa6db155d239948ed5775b1d1056c2d0148ab + +p_scalar = c600000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ac2244a68510d43ed03eb697c84cbed4e8e7b7e5495fac838defc208af8cb7e5, 8b79df4c11cfef71055dcef6f267116bb51baacd8680171b40d2f3fe84d6e175 + +p_scalar = c800000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 3b2b115548841c4bac23208fd26485e9f65a3640454ef41ff86d13f9e149e73f, aa798348a58dbf409a1af4fd0275867f69aff1c78d4bb4fa916dd3f9ac1e05ed + +p_scalar = ca00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = fbede0865908334ae1e330f9c70cbc1a87382d6f40abd3c3eb3a10b1e94b9d1f, c22b42c5289663eb0ed8edfc44d2232151eaa4b260ffbcd71baaf4cb2202baeb + +p_scalar = cc00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = db88c71bbeaf13bc07a69a30ef6276ed02b0c293cb37d658dc2d1be24becfdb6, 87fd26a1b08c632348f9e0cc903001773d1c9232637327282bc7910a368001cc + +p_scalar = ce00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = af06ff2bd95601e3e6b95f2fdee3d5596a0d1bea32ab6a5c6b768e347d563eb6, 7603685d5acf30d24fbdea479e4585a41f3afe752f76070dd310d38ca0756e4d + +p_scalar = d000000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 956b31e003c45e52a078868ef78edd391571580605d6297b8c885312c23fc975, 74c849cab3eb568bbe6dd84b81d0da67372a23c6f38198c0b8fd8a2a0084cc59 + +p_scalar = d200000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = f7ae11128858d4bd081e8fb419b8ae87f8b465db160c6066244bf1db2540eb02, 9dd07003d57bcf5e4b24b13ab51778225936f29a5ea0a1bb6ba5c905ef84e7fd + +p_scalar = d400000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 7e8caa24bbb577974f1bfe0fde5e42def5eae8c7f89acdaff3022fb6e646703a, e3ae768db721c229fc366a496dd93702ae1f99512ad40c1bba14638bd3a8f0ba + +p_scalar = d600000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 726cd1b8f826237f899ae92398f41b6f681817c7c9c515ff302c3cfad169508a, 64109964a0a836d6d035e73ea9320e3a07b72bc6853111e9d733a3574aed4a95 + +p_scalar = d800000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 2cd615404fa3c57214f08f32b806bbb3c97bf51d0ffac3078f75eab499646d05, b8b3825f7964a7e88808f4049bee10bf7ca6cbabd1c024f607f2af89d56ec49f + +p_scalar = da00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 44e6235a685fa8c247bd7309a9de5fa66db2fee880a40b64c0b8debf4aa4d144, 0833b86b5c19d8f9ac8db4c9f6f6716b89b462ecf3b0c234caeaa55f50014826 + +p_scalar = dc00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 3027a162030cd7c2ba74f8354822722008faee4e603bb73e4565f9a834ddc625, 10e4eb4cedcbd2a01407f6062c80c8a864711e860cae507bb739381308d35c5c + +p_scalar = de00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = fe35f5c66e9d40a301eee42e3d4f9f3ec28f13ad81f4f013096bb45b738230f3, 1b9004134543f28ccf139d82bf91e4424e7bc18151dc4ebe18d3828cb1fe885e + +p_scalar = e000000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 9f40ac3bae92032334e5d0dcb987a24a5e0e8c3e803e25dcd0667ed68b11888c, 810e13d73b8421cbb6e33283259b0e485ed7406e949cd706ab9c216acb1f09c5 + +p_scalar = e200000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = b9c9c244af407478c96adb0c950359af1d0243f09da21539499d4934d78d5664, 6560fd45390953fb7ff4c255cf2f156f2692975ce17dd11b2889aa68e4a01d05 + +p_scalar = e400000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = bca14b180256394e833badcb026fbed49d4cac5be7b7f4d976fdb4d8d72905a3, 1398508026f62ea2d9661954f8eee0784c145115921e9518f6148aab2d205de8 + +p_scalar = e600000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 9e84b1429d952dea1a5702fde822c43a6440a71137d7a6d5b1a124a2e982371a, bf0877e197f6185bcd1a841d08d3644cd46ab8430c47394c065da5918f8107ac + +p_scalar = e800000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 5774d975adf3dd428b24580ccbb8bfc2082ec7feeac69a05a84eadc3c6f859bb, 5b07a1a1962220d00bbd4bcea8db09f6f574e02249d4dfa80cfd0e3e04e7aba3 + +p_scalar = ea00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 18b7629228d8a479ef8c3fc19f7258a24084cd681c0bfed585b4a7b6c5b52828, 51255506bd74f106a8b0b8f89daf1b0ab051b6588354a76c285fe015041903a0 + +p_scalar = ec00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = a9269757ad6c71aecd89a9d614befaa9c670d56c86853eddeff93c2d3edf7a05, 5b0f80312853357e54c02ae48d51af5d92ca94e94ea0bf05c41cec35a788f16f + +p_scalar = ee00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = b5ed7a9125881c7719ff07a13ee17b6081df350185faadc70c267dd0ae0c2b14, 2bf138d8cc37cc1635121ad130f4ecb5563b8196d2387c33ee82cdcf4563b354 + +p_scalar = f000000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 80f1a439c929319d7a3a6453d4fb689735dc136663621bc1a857240fa36a2737, af283981c8d54f6404f2b6dbe1fe2f104f4ac89a7f873a1403e7d8b40734f45f + +p_scalar = f200000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 728fc5136ff083f3eb5c80bd85a5f16d33075ddccce277ec4182e4aa4bf75924, dfba71a5f3e366d7f5720029f53f0159e6ac642d3ee6a5135c38717040866d54 + +p_scalar = f400000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c02fe1c417b27af67e00049f9ab0deefd6ef61aff90e37bb06c9f96c6e75e767, 1c2c0ba15a7720bd2467d68fe7794a246f0c190e252fdcc837d308ff7bf10b23 + +p_scalar = f600000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = a883f42917abdea70042d1b7833a576b51a3fb710ce3673f85d05386724c3c80, a16cf3f68a9ac134de65695046051e46111266374775aca4b4f8174fd0aae8eb + +p_scalar = f800000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 5f2f286449c33aa7ac7d0e1c1fb049783f46e326ce433bc6dfffa17e057a3df0, 1ad279b66e06ba0f5381b3de843a23771499a27b656927e1bf4d171cee8ea2bd + +p_scalar = fa00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = a8b7e8a7068a16707ae69dc317ec34c204b86de7b0a0125589502abd170b0b8e, 4a5475ecc62600458f6c1c98db76571b330fae946156ce910ce3916aed5d4799 + +p_scalar = fc00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 7d6dbe6556c0f8f08208e6ce3c650c05791a0732e423b40f16ff861277c713f8, 370de4a16a5fa3aee627881992f8bf1ac20a45523d2e4204af023d3c732d430e + +p_scalar = fe00000000000000000000000000000000000000000000000000000000000000 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 8ec353c2064ebf7c5df16fb0f8867456296c7b9e57af9e532eabd53494b13f3e, 7b60d0de6a838ea1f4ee86c044fdaf15406838ec9d885f6cc9eae79770a47824 + +# p_scalar = n - 128 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d1 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ad311f2c46d5a6173749bba4b3ad9db57ef2b6b9ac62ff5463c5cb817a2ad62a, fa38d320ec008188f8aa266d75d6b138b46feaf3367834ffb77a8087c2ff3b6d + +# p_scalar = n - 127 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d2 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 15fe6a86904a36cf6072a061ae619f2870e9016cdddfd92836e84bb6dee35b41, 76759223abe3c14bd0a8879244f403f2fd1c4a970ad602d09ab6968bf6005965 + +# p_scalar = n - 126 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d3 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 6941195b752838c39a7d703660ab52e9519a47b4807a9d289c9635be52bf127a, 91a4ea6d215215f65f153f56aa36de2d8459f5705276171860ffbe2e70da613f + +# p_scalar = n - 125 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d4 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = a9fe2396bb85b9cb04b76d2d1ed32559f72dab6d225733faaab54cfc93740130, b16d6af8c3febbc151dc5fac145ff0d52292393b579f3ce2128b0d24bf2219f0 + +# p_scalar = n - 124 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d5 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d8c0472156db126649b1dfca7f1412750a10ed1576d7996d10f264bc85fc00a2, 8448ecae901289fe9b94c4ad4c99e43958d85051e4dd905a43dfabf3cd768437 + +# p_scalar = n - 123 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d6 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 2d7ca4d8f1e354871783d1b6917e47255a71497198a5ea8c62ea859803b58b02, aeb9041c69e788c55870726c16e3e02ada04cc898e17ff543f69b4d49b4d4324 + +# p_scalar = n - 122 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d7 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 62280f9a573fbfa8bf357e0c9358983ad183a961caf64cbd536eeea92f4ff97a, 7aa3b3ccb2a104b24c6b9954bd51f9056ea945bdb1901d3d001da1b77e9176b3 + +# p_scalar = n - 121 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d8 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e1a8d418f77f10e127d2bf4f683b30d1d71602d5b0e5fe2014d7251a8c03e3f4, ae839cd80e99505caaf4d4e193394872ff318484da0a4996a4941a1e76a0ead7 + +# p_scalar = n - 120 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d9 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 9c7ea21245a2473fb62aaf7c37e7454e094e7ddf4f6ab73a6ebdb7bcd0303ba4, d007ec78a47a715248cd158b2c1eb5419a278a9daaa03497ca76e7549488d036 + +# p_scalar = n - 119 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324da +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 6ed0b988157b7f562be22ba0f3a49fb4062afb7c1e314dde87af199e6cc47305, fedf1014fe6ee703d7e814380f67b51417d29c64877b74978162cf502d653fd9 + +# p_scalar = n - 118 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324db +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 4977379654d7a19e24869d65bb07ad54f8f1d8415512ec1c24c00de93f5f68a6, c9c4d63998e59b626cf96715c527a656741bf80a03bc88e604f357d1f061cede + +# p_scalar = n - 117 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324dc +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = bbdbec7d79af29b17890e8d54796883355a3bb1ad9699e9208e4c4901b620dc4, 2cdf7f854480ffe39dc33392fa67285c50cf6d11ad91a35092750de73e51e1bc + +# p_scalar = n - 116 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324dd +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d8f1fc5f6a92b9aac9f08a5659cb1b6e4b3de89bb2f5f79c87f9793bc9826344, a9c8a4b42b9157daf06c2c8c70549a5753c30bbe65b80f1686357f9eb412595e + +# p_scalar = n - 115 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324de +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 7c3ff661d8ecca6e8a2627c4851b5bc7f15b920fa8dfce56ad19e039119f6cab, e95dd9d8889821b2dc8df855fe2f493756b76c57baa43b27b9dd2bf2d5f5b5bf + +# p_scalar = n - 114 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324df +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 08e2f429f216dc997afec8bb9b4e920c18849f8ebc30d62c751e03f0216f7c55, bc0eec86924dd15496b984140a9f867197b596a14d7bf8475e5ddf821d6cc33e + +# p_scalar = n - 113 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e0 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 734e0d078a2b0d3acc3a5ecb983538693289e86e10ec0d40a125e6c1b7ebcb88, 61d8209d49f3a53dd13cca90747f19ecfa6bcdb1786076b9e0d92e9a51933360 + +# p_scalar = n - 112 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e1 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 71704d008938c16745ab5a4d7832ba0c94e258f604a428f26a9505760a99cbca, 65000c24c7973a41e70352687d367d8056feb92ec00eb207db97ab0ef88b8b70 + +# p_scalar = n - 111 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e2 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 0cf804d77a9b6a20098f37bb0832c416327dac318072f08dd87f4ae086653aa8, f9af0acd904d4731270adcc57148b1351cc0d4cea23afa674b9c5438a67e2173 + +# p_scalar = n - 110 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e3 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e7009ee6652405a945ae78ba39dcab99b1fc8c8c23fbbe6e76fbedb5a463fbad, 798ca99e4ef37e3c270c706c6e4840f15761490f7f000956b9a8fc5f8c0531e8 + +# p_scalar = n - 109 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e4 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 3720b2475548de20e7b092174df861f4fd4f61e491ae8d13aec63acbdd10edd0, 5fdaee391cab12c70cd622baeb879899e7229d8956cd660daf419847ebf3df78 + +# p_scalar = n - 108 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e5 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 9d873705000a079bd1a8678742e1cbf414d147984d7df1ff2871263f72371e17, 0d66cfc94b5d416d08e545f1b13e2b493633966c70094e6a3a7f4ad5e01ffe00 + +# p_scalar = n - 107 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e6 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ee206023efce1a7028f9cdebe9f6e8773571e4d1592ce3342ca0ba9c3796f4c7, ccd7e9418ea700c1e008039e02de2ff12754e4260a7f687cb2159e08b76369dc + +# p_scalar = n - 106 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e7 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 7145405dff1765ecb81f9fb1279df6ff750c11bbc098aefac4c398cc1e628b51, 262f03eb0757aaea5cbb069b03fe8fac137218257bc27ef73c3d861d83aae16f + +# p_scalar = n - 105 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e8 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 680d5abf65e03a86c08ec1602b1d28fdcb11125c02a9ba44de6ddcb77b371390, d3d6d111ee9e512f4e346db071cbfc97c87057ca3bce7fe5d5ec7bbbf5327839 + +# p_scalar = n - 104 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324e9 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 1d6de36b734fc1b835d2293fc7ac3efa90ee46554c2a623582d0020682c4bd6a, 6ba92bcade5a0cc175aef88a77b9d084ffccf5e161217dee946ac3bfcff75858 + +# p_scalar = n - 103 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324ea +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = f51ec8724c3c386f57670e41bf619241d0a875e919f7f72c564bdda6c71f8d02, 1429b1f8ae1d3ed8a6fae60930a4f9245df79360286166f300aec19ee8bf7d17 + +# p_scalar = n - 102 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324eb +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 0fcaec0ffecf6fedce33e49cdd3dac5cf5284782e9f60f1841a6fe768f9b4748, a2776d9f8417c98ff3d348f820fe78e36445fbcd5bc92aa3ca1ce130a54edfc4 + +# p_scalar = n - 101 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324ec +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e9b1c23914da499e6a610374c569a602bbe914d3b99cd026b7a96e0a4ea6fdf7, 94ce9e0adba8bfc75a8a14644be77793731251826f21687cb5f6f0feadc19a99 + +# p_scalar = n - 100 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324ed +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 55401274eb1385f3f7ac46733fe90a2ffe49233161c52cf8b9a17db9bf61fec5, 63be9e64a17154226aa068c230548cf4adb9e9b685bac6b7a5db852c23fd068f + +# p_scalar = n - 99 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324ee +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = bc438ae1a4e65b07650522fd4a9a3b17b1f1abb66a7b43712d037bf83f9432b4, 4a673fe054fcd65a03a3c2c7b98ff4b37ab58a3f75503e4631b57ea284693c04 + +# p_scalar = n - 98 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324ef +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = a6eecf308794885e74b44206ee3751becc8715abbc82a095d5192c88589b69ff, e9f04cd324c2e3116b5df55fe390da5ba3f98377daa4c864a05a7aa8dd0ce3b4 + +# p_scalar = n - 97 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f0 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = f1ae5380578181c7ee848e1d2566805eda8cdb78397e43f4dc90323bafceb64d, 1fbd470f53cf3e6984577f1f3260b76785f4d9c45b68b7e72dc7b8e69c70c77c + +# p_scalar = n - 96 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f1 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 11eddf7fd0a0da0d14f356cc6abc354d6d490a4b19dd329b802b8d2333e12b70, 3f2a78b3241a2b7103b48cc47c29bca2fd2f4f8cfd0258131e208328d87fd1d8 + +# p_scalar = n - 95 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f2 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 76a8f9fea974291f9a127f2bcaa12d0d6684ad762b346fd2263e039bb308cc40, 3f293fda2cd6f439ee1b1cb5344455a165499c990c5dbba0c802049b68aa19e4 + +# p_scalar = n - 94 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f3 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = bf87ea83037278d9c87bdb8203d41796955ef205d59848ebc82a7aefd2df5e7a, 1001f8d7dd85aa7bf8ea79eadfa99607c00286d964135771c5825a638719aea8 + +# p_scalar = n - 93 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f4 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 0581b4711fdf24984a278686e16396070aeaca9afd36b1af64cfdc70d9453d29, 435ac466954ffbb3ff6c1a78f9a2852f20b021c3df219dc582290e253d61f6d2 + +# p_scalar = n - 92 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f5 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = aee309e543ae4336e4c8417839093801a8a38bc31487c5269d7127d76294ba47, d15428592faab2944a72075d7f73442a9929ad4e8f48bb12d4b127399359250d + +# p_scalar = n - 91 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f6 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 0211de8fd56927054a39f02bbedd4f4727113bb4ae6a94b8d81ad9386982f865, 4a70abf75c554ed3fa8a5b9b0b46a59f2354719f6237fc68d587138c63c92f69 + +# p_scalar = n - 90 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f7 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 8307d5cb55648a4cf3df44ded7ee64b747305b7483e904469af9d782de992e6e, e485b90d49c0b6a1ad3294fb1c309a59abff56b525d3fdee5376b018e277280a + +# p_scalar = n - 89 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f8 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = bd88aca74765b8053ea123446310eb5a62d51e29fd54487dc1ee6264a7eabe67, 7150f87e7211e4457ab49dd209f98f9a640388f83b9fffefb7b284be14fb691a + +# p_scalar = n - 88 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f9 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 948fb3f76932e6311707165bb939f40fabeee3e9369a60677d81fd488418cae4, d8d37d942785971ded5cf82dc911847cbdf176108c7f9dba005a1dffeabd468e + +# p_scalar = n - 87 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324fa +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 2bd0204360826caa041252997f6b0670b856664a2d4b409b516329ff7b4d8b2c, af490825d5cff157a8f439ab06e58e3ecd07bc34c235d56c010e522661ddbcb1 + +# p_scalar = n - 86 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324fb +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = a9ea1b80f80e4b9023fb74270b4af06e783b9ba6744a6528dd5c2b8142a18dc1, e6c93b31cefdb61d9a9f04f0e8aeaf7d4a2b5ed57defe51b559759f6edca6f38 + +# p_scalar = n - 85 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324fc +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = abfc8457b5e11eff36bf2f65ea65641aef617e0025af76773646b0dd7e1ee314, 159751e2e1cbaebebb0066ae1f282369ce91ee270142811b998dfac18f1192b6 + +# p_scalar = n - 84 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324fd +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 2f83a889ca881f6c10b429a2811a47eb2cd0bab9941a27e9b7f1695a43020eec, 4cb3c135b6f36034df4741a71b99ec5f67f9ba802e45cbb12563c590f683e890 + +# p_scalar = n - 83 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324fe +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = cf3086e87a243ca4f87abebf2ab80485125d4714ec67199a2c9ee62dc3363a22, 97f0013247b64be50536a39db19c61265e9b16125625aad75c52b051c64e09dd + +# p_scalar = n - 82 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324ff +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 8d97fd53554fa366b932d0c17527465559d18be925a81aef80ee662fad29cf9c, 18f61f3cdef3f99d4976126318fb05ae41a471e4e93046f2ad5cb247cd789d17 + +# p_scalar = n - 81 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632500 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e0beeb1aebff18d3b097c711165c6e4c8e9d0af402ba3183d3a5d81fc63d5e79, 7acf4419e85bc145cbdbfdb9cf290d1fa02dbc426fe5b29dfe657f130801937b + +# p_scalar = n - 80 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632501 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c0bfffc45263832a2074213db27de57335ff9aa8b5f86a2c492bdc0752b3e584, 2995919ca4cd266052b6a1739220f4281b037d75b320ebfb2429c22a1d49c605 + +# p_scalar = n - 79 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632502 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 5ed556aae89327fc58f6428165f89e14dd306e2a05176f8ba40206d330ff0e92, b75df5ec191a421fd07370c450128375097a54ff99227b16c2b1870af8321bb8 + +# p_scalar = n - 78 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632503 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c0e78a3897536f3f711f8b7f7b5065a47e96610365013b3aade6af11a6ab1ecf, f8bdf2ea8474d0c8ea2240ccef96b473407bffa1b201137148b4389c464423d3 + +# p_scalar = n - 77 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632504 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = db15e4963d5baeb19c30c6422b2f9c49719a87be5a0ec9ce0a2193bfc266f85c, 854dc9d595105f9e2b4f0c7877eb94ea4788522b2e9fdbb283c3139be0d37321 + +# p_scalar = n - 76 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632505 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 1558fe4c7ef5b48a7c703717cd1823b4285bed3c21848f49cd331464c89bdd46, 9b3b040493b83e45ee4826a9937e1ba33fc6e661d47fa3cb19c6602050eaed5f + +# p_scalar = n - 75 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632506 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = a22f8fbea42fd1f6f123716223af72e0cfa8ca0e2a7aa6ab616d2c02fb760095, 24a1bde1d0c2302de79807a770456a7e7be19f0ded4437a85072758b78f3d040 + +# p_scalar = n - 74 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632507 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d176448e35b23e27b00eea8a5d34f708294b12e1ca1b04e046ce85a9e25a441e, 0a48558f2fa1bd2f77c52d75519978d10c45e52db3bfffc85ce885392bb80ef9 + +# p_scalar = n - 73 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632508 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = b2dacdf66ef82fce794922ef17e29b1a2b34a7dc096fb852ae8f8fe1eeb03d1a, c39725521af82878a66d92525e82d5b3b871ba63e405ca09db8dcc81f42911ee + +# p_scalar = n - 72 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632509 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c3b025a015b15144eb5d0c75f38fae9cb1ee4879a360fb557331369679c1e3b1, 6fcd0cbb809a06f20368eb1f2e4283e11ba0cb8c9c5d2e6a33ad53540dc40604 + +# p_scalar = n - 71 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63250a +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = dd421b5d4a210364f94aa89b40750d0149c7cb94fc05804bf19f382e92aa7864, 574cc7b29378679111f947e696cd0572030a119fdd4af1ec56cd001e39df3672 + +# p_scalar = n - 70 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63250b +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 100392dc78c04937681d690f2b3a8c597263de1539f76b817c5a2a14f58a379a, c6793ad2e6e2f3b19cc6e22a27c9a2ead11ae42dad0182e407e5e8e85bef953a + +# p_scalar = n - 69 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63250c +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 49d3ad05548efa2ac856868891e9ae0987986a54361bfe259e5da11cc5e79347, 6d37b1fa546fbecc2126ac553a8dd1269bea0d0f2655d14f987b0687f4eb5cf6 + +# p_scalar = n - 68 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63250d +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 031195d5bb4a44b9b2cdb039f99c55fec35d34e70dd71fab8732d5cd6a93954d, f66904b1400c9463440dec9ece0f8c32bb7047347b57df81baa37f5d08a660c8 + +# p_scalar = n - 67 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63250e +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e8218ad07de96a54fc88362a891ea186c16d0c52a48a4ddd86f04d3b51f9c391, fd59d7eb9a8f62d9de3ec728c30a96a005af456a06620ae82c735ac12f33af7a + +# p_scalar = n - 66 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63250f +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 78ed4fe6e3a7de485a7e384de42f8cb2a3cfa7fd44b81977c7c6e4d1c4ce250f, b12347993e909dfb9c03344b75554fad55912064d0f5bb2aa9231c8ce9e571ca + +# p_scalar = n - 65 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632510 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 01628c4706b6090abf639ed67765765e79527db7ba66f4b9dc2306ebfcdbb2b2, 7d096ac42f1747502c90d98cf3e055d633cb7691ba659f4666eb62f1b957b4a1 + +# p_scalar = n - 64 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632511 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 95fb8394569b38c77da70b83c2c61e01380a0913089f73b9db6d96f305968b80, 296720440e8449708010a4a078424bf88f726bb98faeaf829a3c651280edfe2f + +# p_scalar = n - 63 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632512 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 0763a43482fc568d95c376329182cb26039c4800f0518eedb8d3d9319ff91fe5, 90876a0140959b7092bf7c8f91230de0ac98b930824e8197707c04d5383e76ba + +# p_scalar = n - 62 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632513 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 0dbcb03ae539b413177aa4c02089a2336ed7e061ed58f5a7e535f175a1962f91, 6b60cfff35ace009dd47ff98814be9ee6472e5ef6806701ee3dc424ebb32e38e + +# p_scalar = n - 61 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632514 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 994a44a69b8335fa71cdf6537eceb50a59556621a9404f843667eb1a7f4c04cc, 0d1bc780872bdbf3b6658466da44bba2473c5680eed4350dd7faf819dbeb9b69 + +# p_scalar = n - 60 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632515 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d40c4ccdbc6f9915026f8fe2671c39bc33fc23364189d9c7dc1e6828ed8a6e19, 04820109bbe4e832c40a04bd4f51ad9612c651a022adff2cafa135bbf80e75ca + +# p_scalar = n - 59 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632516 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 4c2bab1b8add53b7cb9727eaa2d17c362100d5d3a8d063d169d44ed65c46aa8e, a062499846fb7a8b6651f7017ce477f8778afcd3a837ebeaa084e90c15426704 + +# p_scalar = n - 58 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632517 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 305f725f648d02cdd66fe3b67ed78be199cac80de4299aaff26c00e8a7ea82f0, 063749945667474117ab562dbe5ffb3efa70533e7a6319ad33ed1bc4623fb21b + +# p_scalar = n - 57 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632518 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c13298306acf8ccc068212e3fd1eaf381bfeea57c7385b293ec832e77acaca28, da44c6c600017626c5ab2632c79b7a015748060db661782ab909f2db2aac9e59 + +# p_scalar = n - 56 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632519 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ba3f0c4a7451ae636a84438514600044bb1ff3ca9556f36a8fc441407e8d7a14, 83927681026c2c084e9a5bc2a4b596ac01e0db86b1f2214bdfcac25b1f9af32a + +# p_scalar = n - 55 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251a +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 5cee8449a7b730dd0deb0e4a46c814c131eea5bf07ef5be6258bbbf9e7305683, 25e8013ff14cf3f4c2cf6a6880e518caee759f879e27a6b4eab495c5a0182bde + +# p_scalar = n - 54 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251b +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = bb8a0feaee26c851c1286ff925c4d56c4f2e512ef8557c5fa0425b8eb212cf53, 1a556e3fea9595eb3df277a41d1936b17ee0c444e76265aac28f70d2e7d6107e + +# p_scalar = n - 53 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251c +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ec3a318d306634b0912e8beda8c8acd95f9c3fc492f2467997359638546c4d8d, fba1da5943465283b155bcd2dcafe1973db82f6f522113f280167f41c31cb264 + +# p_scalar = n - 52 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251d +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 88f77f34d0e5e542905a3201c67528b72e0ec469af45f9c02692f36e83445904, 7ef2f2269c0f0f8d5c27014b9bbec39e23b92eae22df3562f67a8d295864687c + +# p_scalar = n - 51 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251e +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d20ebe0d5c3fa443da1deb852f4318d4e20bc0ba1e5edf3f508cec1c3b3f64c9, d731e383a2f54c2d99a5e23d82681c6261f1511c5e1a5f65370b4ea773241ea3 + +# p_scalar = n - 50 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63251f +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 0dceb8db2b7eaba7edfbe268d5b1fa6aa78bfbaa136852780fb9c2d0488c171a, d7d34194c3628c1343b7716bcc143a46efde7ae6a4449c96bf9e80899ae2b710 + +# p_scalar = n - 49 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632520 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = abdbe6084fb7db2bff4cd0b228766127ffe7048453dc690921950b421ff6acd3, d394077ef247fa364d78f592f7818ed826147d27f4645b5a837c92285e1109e8 + +# p_scalar = n - 48 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632521 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c8403902470343ad1a1baaa76d8805bda7496529bbd803a06b34413077adc612, 85efc7e941325cc2a875f5ce529d75e30b26d7fbb7d8c5b739f59f66175adff1 + +# p_scalar = n - 47 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632522 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 4b969974eba78bfd6b20afec715af2c70a624fa936c83906283c7513caa76097, 9bbff86e6dddfd2704819d515ded93d49b944e107baeca13220755ccd921d60e + +# p_scalar = n - 46 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632523 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = cec684c3a42931dca1030d5babf825e0785c339aa06e9eba4075b5b149ee90d9, 033da338c1b7f86557c8b2c055f7835d45431d665ab43f2b42ab62c9c1586e63 + +# p_scalar = n - 45 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632524 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e94f7d346d8232781b1e8ae057477f580032940b946c6e181ee426ccd5cd79bf, d73acbfe2cd9e6b5772ef6dec7f80c81c5254469f72b33a5c747cb96782ba21a + +# p_scalar = n - 44 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632525 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 5f3425f6a98dd2915f0e2046e381d3b0009194abb29110fbecfd7c1fd55a897c, eb629f90387ba42a397a247dd69d34170423446c4b083b7fbfa06687730d50da + +# p_scalar = n - 43 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632526 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 179c85db3db01994b7d9ad900574598180c5bfb4878873fa4ff23ffd248a7d06, 47795f4f95b2dda09e91cd3ba5e6a3184d82d052eadce5a8ba41b06261a6966c + +# p_scalar = n - 42 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632527 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 649c89ce5bfafe43c2e2594c30a92f8fa155cbe31da6a5c75fb35ccfed2bad01, f3a8cfe389bc7d3d4b00b20b906014cf9b359611f32c50aed158667de9ff257a + +# p_scalar = n - 41 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632528 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 98100a4fdb01614feeca111539ce22716fdfe0b56f072822624d60492ed22e91, f70bfeec03884a7bc67732591d57d9ceb6f94d2ec87e9a47b6b0daa2a35c628f + +# p_scalar = n - 40 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632529 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 462d7b0075f732278909984c66f2728083200f0bdf25e13ce4d7681db82e9f3e, 03466612d1aa702fab256ea35ef5435974c6e18c36ab1c34d90ba188f2651798 + +# p_scalar = n - 39 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252a +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 5853e4c4363186ac068f237d16fb36646f5ae714ff0b9346a9d89488a059c142, 0c0bc0e56919240847b864fae14e7b1c2ec4a76681828876e2d87d2363c52f98 + +# p_scalar = n - 38 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252b +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = adf0c7dc7c603d6c7463fd85222ef33b512331170fe948ce8a2cc3ca4d63c0ee, d9a4c2809c80c34dbdaa84d68e59319cccaab359bf3804090ec32d3bfe7765e5 + +# p_scalar = n - 37 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252c +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 2763a387dfa394ebc5748baea677d806b636458c7f178d5500467bc58cce08b5, 58b36143620088a8f63ebce51558462ce7adda3e6f20d850a12b448a7d3cebb6 + +# p_scalar = n - 36 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252d +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 3569656cd54a3dc30ae4cb10d257576ec691d0bd1b06c57f3d5e58d6a8219bb7, 480b9e11dd6da526450ac0bae251a0c6934e82d3162bfe13e5ebaebd94cda03a + +# p_scalar = n - 35 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252e +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ca640b8642a3e5210b8e4134efc2b4c8742ee464233e76b7fd16847fdec67ef5, 2ba901628bb47af824e4ab126b237af7313c300c547852d5653a01908ceb6aa9 + +# p_scalar = n - 34 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63252f +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c982ddd4dd303e645b0673a375678d94caa7a5c6a391849db6ab20147ca23cd3, a159100c570d74f8c77332a33c569426bba2cb1f6f876f92fd7b000b5db6f971 + +# p_scalar = n - 33 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632530 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 33ec6868f044b10cac09c4ae65578ab985ceae7c4b68f103871514560f664534, b16c4303c32f63c4f909604f763f15745509d1285847d5ef6ac4832b3a8ec1f1 + +# p_scalar = n - 32 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632531 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 39227077695532a4bc6d6a58fead0197befd904c4079dfbfd8c5fccfc5e3a3d8, 6231d7929591c2a47b969c1aad9a2e407e449b64480a990809e23e6ddbef42f5 + +# p_scalar = n - 31 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632532 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 948dc4f8b1fc87b48ef5689d3cf7600ddd3cf7e7473017e6e2f73c696755ff89, f38ae8914d7b4745faecedfd0c9803fc2d921ca298eb6028d9e9fe814ea53299 + +# p_scalar = n - 30 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632533 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = d0288cb552b6fc3cc5f4d6cd3ac77acda3a14e49b44f65a1b4241cb13298b343, 460d45ce51601f72d667da379b3aa441b675511e06bf9b4ad5cc8c2f1c040abc + +# p_scalar = n - 29 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632534 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e266f95948603d48944a70270317b9e2f1be963a0d9258805e5db46acb66e132, 3798142a2a3be21b8a966939777c619f90472447a2fb18a398db66735c208899 + +# p_scalar = n - 28 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632535 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e97f6b6af2aadb9797082ec0cfe153eb7323cb2830a6a8924b523eb7172ccd1f, a9b4cc5f405852784a688b482d0cb71ea6a7f9c7804b2a681d3d393ed1a83da1 + +# p_scalar = n - 27 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632536 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 9f8aa54b2ef7c76a49d2c9eb084ffdd7d36a42d7aebf7313042c2af497e2feb4, 2d431068d84bde312d97d10878eb4cbb3bd0c66fddb7fb589200b7ba09895e70 + +# p_scalar = n - 26 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632537 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 994baaa855f2fb101ac7c5eb857ff6fbe6c9267ad8b1753861e4ad32ed1f8008, ed178030d12e5ac714fde97b5fa944f55a39898b628ac50884cf14e11d248018 + +# p_scalar = n - 25 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632538 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 966742eb65432a2ee395993332f1f3af6fc1b49eed6b67b0a4a319acd837879f, 7b948dc356f7996812068859c9b731ee96cc631243f439504b8dc9feb4966228 + +# p_scalar = n - 24 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632539 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = f97b232f2efc311561d7cbf91d2b469f6d0d755040dd9a356d3883b215d02819, 595dc55eca737b8a7669f03193cb750111ea494988a1e356a551d750b24bcbc7 + +# p_scalar = n - 23 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253a +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = af2cea7c1727bf42d0825fa2a358406937c7a7e89e2e1f6ef4f876532de45068, 83d0687b9077666f48068e1371ac2f71e5fda49c27299f4a0360a4fb9e4785a9 + +# p_scalar = n - 22 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253b +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = fdc777e8e93358a46a0b0685d2f8ba3dc99ffa23e3912a9a0fc611352f6f3076, 793e8d075d5cd0749de917da153a35b5640c2d6a4d23fea494a787bb35415f04 + +# p_scalar = n - 21 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253c +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = ecead9f4c16762fc6d2a506c5a3f3b3074e1b2654783f47d562e4cecc135b208, c086d5f1c9477fa37a75023e7fac29a41b0fadc083bb3c61f29dd4b2e286e5b9 + +# p_scalar = n - 20 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253d +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e2d1eeb6fe5bfb4e048099d95dd283ba5916868f0f862bdc8a979129d2337a31, 5ee104e1c5fee0d09161c53f8aa95e66a2d4ec17ffffcbae82ef1c417884005d + +# p_scalar = n - 19 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253e +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = fe545c282897c3fcb8842277752c41ac68363aba25e1a16efea912baa5659ae8, f720ee256d12597b85665e9be39508c15806244afba977c52d36e9e7dc4c696b + +# p_scalar = n - 18 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63253f +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 675abd1b6f80ebdaa6f247ab412e29794afc964d8f8b403e5f3e51c856ada97a, 6c6fc7d90502394d2626927f1b847bba4b2a5caf8f4f0b3c66a2bd725e485a1d + +# p_scalar = n - 17 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632540 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c1a35c0a6c7a574eb0f139752cfe2dfff17624b6ac0a177b97091dcbd53c5c9d, ebd512263274c3d02f4e247f0d1883bb0575bf30e89cb80e227d314693e79987 + +# p_scalar = n - 16 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632541 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 54d63c809103b723d5ef2f7c2c83f5495882e0753ffe2e6b808b0b650bc6fb80, 64edf7b201efe22055c4623bb1580e9e3670c3194b0b6587f2f11bd652a23f9b + +# p_scalar = n - 15 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632542 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e2aa0e430ad3da09ee337424e481937003cc23ee56e27e4b72bcd8b7bc60055b, 2042170a7079adf464efa6de778a4797d766355442a41b2540b8524f6383c45d + +# p_scalar = n - 14 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632543 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = faae7332fd12c72e1717bf54c6832660126e48f77f9707e3a242a35bb0cf664a, 152706dc2eaa1bbbe8e4193e2a65e7dbbe29569e832237c227b52db7995d586b + +# p_scalar = n - 13 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632544 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 738477ac5395b759bcbcd43f559e98110e356769856fd30dccc425634b2ed709, fbc08769c9e7b7977cd06422bd1f5bc168748390742ed2e335752b90c00ee17f + +# p_scalar = n - 12 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632545 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 4ee1df77cb83e1562409d29dee37385eabdedef5ca345a3304b71aa7d2697768, 7ff57c9553238aca28228cfa8ade6d66170ed2f6ca8956370cac12d91cbb5b43 + +# p_scalar = n - 11 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632546 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 3e7090f1649c90731ff3a4158dac1ab59de407956e7fdfe0ea7d260a6245e404, 68930023e125b88e0c0daa891ead643d250f939ee57f61c81a7685612b944e88 + +# p_scalar = n - 10 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632547 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = cc61c94724b3428f737d2cd648250b4998f9868a0fcf81392c18dbd19dc21ec8, 78719a54eb3b4ab55f7d2d65779be5d2c43a8991383fbe080c2b407880dd9e76 + +# p_scalar = n - 9 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632548 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = e05b3080f0c4e16b2cc09c0444c8eb00abe6bfed59a7a84175c96e8f264e20e8, 086659cdfd835f9b2b6e019a88b12f1a56af7bedce5d45e31eb7777aa45f3314 + +# p_scalar = n - 8 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632549 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = b763891eb265230d8f90f02af02cfc6b462ab5c56f9b345527f14cd19499a78f, 56ec12f27706df76123c7b84be60bbf021e3327dcf9eba15f59da3a9532d4977 + +# p_scalar = n - 7 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254a +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 13ba5119c3123e03f43eaab50c23bb082bd20213d23c00f70746354ea0173b4f, eaedd9156e240867ef933bdc77c941956742f2f25da67bdd2847d0303f5b9d4d + +# p_scalar = n - 6 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254b +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 13074b5954213673d50a961a5b17a3ad55ae744f346cee3e403947373e77664a, a4c9916d4a07f75ff424d44cef639f11299c2b53adff14b593d36220d377e44b + +# p_scalar = n - 5 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254c +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = c9079605890523c8941cb5aad076c20c90ec649a94b9537dbe1b8aaec45c61f5, 73a076bb2dd1e9163540a9877e7a1f6873c568efe5eb882beb309b4ae7ba4f10 + +# p_scalar = n - 4 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254d +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 577362f541b0176b0cdaacace8100af24650a6edc623c17374b0b50d46918dcc, 84b14c394c5ab8636b6c36dee5ddd22e17628471fad6f4472d96f24ce4cbaba6 + +# p_scalar = n - 3 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 26936a3fb6ff747e66ad77dd87cbbc98b027f84a087d81fbffac3f904eebc127, d5f06a29e587cc07788208311a2ee98e583e47ad0861fe1ab04c5c1fc983a7eb + +# p_scalar = n - 2 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = f6bb32e43dcf3a3b732205038d1490d9aa6ae3c1a433827d850046d410ddd64d, 78c577510a5b8a3b19a8fb0e92042dbe152cd7cbeb236ff82f3648d361bee1a5 + +# p_scalar = n - 1 +p_scalar = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +p = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a diff --git a/vendor/ring/src/ec/suite_b/ops/p256_point_sum_mixed_tests.txt b/vendor/ring/src/ec/suite_b/ops/p256_point_sum_mixed_tests.txt new file mode 100644 index 00000000..e3d99e23 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p256_point_sum_mixed_tests.txt @@ -0,0 +1,80 @@ + +# inf + inf == 2 * inf == inf +a = 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 +b = 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# inf (n*G) + inf (n*G) == 2 * inf == inf +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 0000000000000000000000000000000000000000000000000000000000000000 +b = 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# inf (n*G) + inf == 2 * inf == inf +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 0000000000000000000000000000000000000000000000000000000000000000 +b = 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# inf + inf (n*G) == 2 * inf == inf +a = 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 +b = 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# G + inf == G +a = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +b = 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 +r = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a + +# G + inf (n*G) == G +a = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +b = 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 +r = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a + +# inf + G == G +a = 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a +r = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a + +# inf (n*G) + G == G +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 0000000000000000000000000000000000000000000000000000000000000000 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a +r = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a + +# G + (n-1)*G == inf; note that -G is (n-1)*G +a = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = inf + +# (n-1)*G + -(n-1)*G == inf +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a +r = inf + +# -(n-1)*G + (n-1)*G == inf +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 92ccc25ad1cf08ffedba49d7efea212eb1f0eff79718a75e493c3f7c503eb15f, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = inf + +# -(n-1)*G (affine) + (n-1)*G == inf +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 92ccc25ad1cf08ffedba49d7efea212eb1f0eff79718a75e493c3f7c503eb15f, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = inf + +# -(n-1)*G + -G == inf; note that -G is (n-1)*G (affine) +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 92ccc25ad1cf08ffedba49d7efea212eb1f0eff79718a75e493c3f7c503eb15f, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = inf + +# -G + -(n-1)*G == inf; note that -G is (n-1)*G (affine) +a = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a +r = inf + +# -G + G == inf; note that -G is (n-1)*G (affine) +a = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a +r = inf + +# G + -G == inf; note that -G is (n-1)*G (affine) +a = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5 +r = inf diff --git a/vendor/ring/src/ec/suite_b/ops/p256_point_sum_tests.txt b/vendor/ring/src/ec/suite_b/ops/p256_point_sum_tests.txt new file mode 100644 index 00000000..7d95f1f9 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p256_point_sum_tests.txt @@ -0,0 +1,120 @@ + +# inf + inf == 2 * inf == inf +a = 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 +b = 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# inf (n*G) + inf (n*G) == 2 * inf == inf +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 0000000000000000000000000000000000000000000000000000000000000000 +b = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 0000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# inf (n*G) + inf == 2 * inf == inf +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 0000000000000000000000000000000000000000000000000000000000000000 +b = 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# inf + inf (n*G) == 2 * inf == inf +a = 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 +b = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 0000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# G + inf == G +a = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +b = 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 +r = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a + +# G + inf (n*G) == G +a = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +b = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 0000000000000000000000000000000000000000000000000000000000000000 +r = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a + +# inf + G == G +a = 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +r = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a + +# inf (n*G) + G == G +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 0000000000000000000000000000000000000000000000000000000000000000 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +r = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a + +# G + G == 2*G +a = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +r = f6bb32e43dcf3a3b732205038d1490d9aa6ae3c1a433827d850046d410ddd64d, 78c577510a5b8a3b19a8fb0e92042dbe152cd7cbeb236ff82f3648d361bee1a5 + +# (n-1)*G + G == inf; note that -G is (n-1)*G +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +r = inf + +# G + (n-1)*G == inf; note that -G is (n-1)*G +a = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +b = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +r = inf + +# (n-1)*G + (n-1)*G == 2*(n-1)*G +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +b = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +r = f6bb32e43dcf3a3b732205038d1490d9aa6ae3c1a433827d850046d410ddd64d, 873a88adf5a475c5e65704f16dfbd241ead3283514dc9007d0c9b72c9e411e5a + +# (n-1)*G (affine) + (n-1)*G == 2*(n-1)*G +a = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +b = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +r = f6bb32e43dcf3a3b732205038d1490d9aa6ae3c1a433827d850046d410ddd64d, 873a88adf5a475c5e65704f16dfbd241ead3283514dc9007d0c9b72c9e411e5a + +# (n-1)*G + -(n-1)*G == inf +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +b = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 92ccc25ad1cf08ffedba49d7efea212eb1f0eff79718a75e493c3f7c503eb15f, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +r = inf + +# -(n-1)*G + (n-1)*G == inf +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 92ccc25ad1cf08ffedba49d7efea212eb1f0eff79718a75e493c3f7c503eb15f, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +b = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +r = inf + +# -(n-1)*G (affine) + (n-1)*G == inf +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 92ccc25ad1cf08ffedba49d7efea212eb1f0eff79718a75e493c3f7c503eb15f, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +b = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +r = inf + +# -(n-1)*G + -G == inf; note that -G is (n-1)*G (affine) +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 92ccc25ad1cf08ffedba49d7efea212eb1f0eff79718a75e493c3f7c503eb15f, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +r = inf + +# -G + -(n-1)*G == inf; note that -G is (n-1)*G (affine) +a = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +b = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 92ccc25ad1cf08ffedba49d7efea212eb1f0eff79718a75e493c3f7c503eb15f, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +r = inf + +# (n-1)*G + -G; == -2*G; note that -G == (n-1)*G (affine) +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +r = f6bb32e43dcf3a3b732205038d1490d9aa6ae3c1a433827d850046d410ddd64d, 873a88adf5a475c5e65704f16dfbd241ead3283514dc9007d0c9b72c9e411e5a + +# -G + (n-1)*G == -2*G; note that -G is (n-1)*G (affine) +a = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +b = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +r = f6bb32e43dcf3a3b732205038d1490d9aa6ae3c1a433827d850046d410ddd64d, 873a88adf5a475c5e65704f16dfbd241ead3283514dc9007d0c9b72c9e411e5a + +# (n-1)*G + -G == -2*G; note that -G is (n-1)*G (affine) +a = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +r = f6bb32e43dcf3a3b732205038d1490d9aa6ae3c1a433827d850046d410ddd64d, 873a88adf5a475c5e65704f16dfbd241ead3283514dc9007d0c9b72c9e411e5a + +# -G + (n-1)*G == -2*G; note that -G = (n-1)*G +a = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +b = 2b11cb945c8cf152ffa4c9c2b1c965b019b35d0b7626919ef0ae6cb9d232f8af, 6d333da42e30f7011245b6281015ded14e0f100968e758a1b6c3c083afc14ea0, 3c396f06c1dc69e4f4b2dce51cd660f761064a4ab098ef61ba3868961f0ef178 +r = f6bb32e43dcf3a3b732205038d1490d9aa6ae3c1a433827d850046d410ddd64d, 873a88adf5a475c5e65704f16dfbd241ead3283514dc9007d0c9b72c9e411e5a + +# -G + G == inf; note that -G is (n-1)*G (affine) +a = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +r = inf + +# G + -G == inf; note that -G is (n-1)*G (affine) +a = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 8571ff1825885d85d2e88688dd21f3258b4ab8e4ba19e45cddf25357ce95560a, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +b = 18905f76a53755c679fb732b7762251075ba95fc5fedb60179e730d418a9143c, 7a8e00e6da77a27b2d17797722de0cda74b5471c45e61ba3220daca8316aa9f5, 00000000fffffffeffffffffffffffffffffffff000000000000000000000001 +r = inf diff --git a/vendor/ring/src/ec/suite_b/ops/p256_scalar_mul_tests.txt b/vendor/ring/src/ec/suite_b/ops/p256_scalar_mul_tests.txt new file mode 100644 index 00000000..bd61907c --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p256_scalar_mul_tests.txt @@ -0,0 +1,86 @@ + +a = 00 +b = 00 +r = 00 + +a = 00 +b = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +r = 00 + +a = 01 +b = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +r = 9f2f99cbb6fa3e17f80749fbe19f88da020806cb63c12ed5259e01cb6049a8d8 + +a = 02 +b = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +r = 3e5f33986df47c2ef00e93f7c33f11b4472912e9206abf25578238d3c4302c5f + +a = 03 +b = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +r = dd8ecd6424eeba46e815ddf3a4de9a8e493119b4842bedfa7d203a9f2479d537 + +a = 7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8 +b = 02 +r = 9f2f99cbb6fa3e17f80749fbe19f88da020806cb63c12ed5259e01cb6049a8d8 + +a = 7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a9 +b = 02 +r = 60d066334905c1e907f8b6041e607725badef3e243566fafce1bc8f79c197c79 + +a = 8000000000000000000000000000000000000000000000000000000000000000 +b = 02 +r = 01 + +# From BoringSSL + +a = 0000000000000000000000000000000000000000000000000000000000000000 +b = b4e9b0aea84aa5ed86964a22881a4d0e58f88e9225f30990c18751e7d4b9ec95 +r = 0000000000000000000000000000000000000000000000000000000000000000 + +a = 00000000ffffffff00000000000000004319055258e8617b0c46353d039cdaaf +b = 5d24e62244973fbd829573d5a579b4e89a6512933a2c3d255bbdbc1c89028323 +r = 5d24e62244973fbd829573d5a579b4e89a6512933a2c3d255bbdbc1c89028323 + +a = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +b = abafdc695e4c2c850f8fc60f1efdbf7406a3cd2c6c59bb7e608985723896c187 +r = 917b1214c7b31a7ee7e53be0b41a139e435ff576b51ec6af1e1a944412bea38b + +a = cf0f01b83670a1c79154ea16f3574ca2d4c688a3c3b6017795cbe54854418904 +b = c5ec4d3b00fb2e11fb3b1aa09e60f7d187f7c515977d1343dab9745961fcbb43 +r = 7aaddcee32e3b340af5ad06f854284cbbce5a1ab919e9b7771c3b0e937093438 + +a = 50023f9913879ac4020bc45a89a0ea89082db6265b96b851af29969dd8a9661c +b = 7c165b1cba80808db114441563aa0fbfba41b9e8acff77312a2dd2138b74ef89 +r = 3d2ca1705d8d38cbc76a5409c6535044733cafcb95d12654af1d14de177978b5 + +a = 4d5341ea735e53d2e4f2934755642adee209bd0e5a1506206513227f3c48b270 +b = 6e48f2b60eb8fb86760134abaf3d61692557862924069c599ceb31309ea18704 +r = 37cde3e35c814d4287bd345b910d687983929907b7a08afa2acd8596832ea86c + +a = 33d06c3f5a595a41a6f9c4356f8ab2b8c550d4c64b806eab5560af247c5fa9ed +b = 0e52f34adf5754343bcf3529d652620da3c05b5dd9cdcddfb08b674a1ad21a09 +r = 9dc64d7b4c1bc33b930e0daee2a24fc41f770378659ee71b846d2239b0fea8ea + +a = 8f211780cce4f93b7193b9378e6f83e1147fb3602b052eef782de8cc833e54ab +b = e1e4f7f1feb15be64292cff86b47cd9730bcb15b133340022b824d591a660cdf +r = dfa2b683b1ae23027c7c109e0abb40a1366eda027ad2cad1a09061a57bee391f + +a = 803c279c7e4c11a5568290c0a5789ceab6860f51a942bf646501a45e1ec0a6bf +b = c0a1145a12037129c571f5f939bf16ea0b8b480f08ec774c045d059841f7d5ed +r = ab48fa3b4aa692a7c077cc55ee3c3fff895118a23728c2fa5f361b30730d955a + +a = 0e5c95158297d75dbf0b02c3090730f65bf14704495b14837dd907af569407f1 +b = 5a03e3787c8772b2fb7ab07d7fe7fe653a58bdae7fde3174c6ed305e524f5728 +r = 71296d305dcf9ce39010ea4f4bbf9f7c1064a413597bdc7574c13dea3fa514dc + +a = 366299be07886f7846fc74231db624b169360e3c8f60196a1afc9f2101e03922 +b = d6d7c830a6edb6861868b964519a6b68f6f24f7c09d66003f3f88eadd1e00158 +r = 0b89596bf5054ebe95a39dab6e975b58190160610b09b2a4f93331ecc0e79fd3 + +a = 8f36f0ef275a72192c3b7388e84df2b8acf66fc53aaf556e3be05c76b3f782c0 +b = 704e519363d44e8df8d91f5f347eb61e8d3e85c8fc1b82980c370a379b2bc81c +r = b70a392e3ce5e85b5efbbded9b8c16a3068ba9b93b4cbed9a9a71dffaad6b58a + +a = bf4466ef4dea9f06f0f3b4f14e01140a774262c7e0706584f4d7dac19be46d58 +b = 4af12d528b2cef0f6714961bca2ab682f8abaa97600ea8181f71563d56f8a9f5 +r = 7b6827c0881b9846e32499e13277efb07917cf4b8c8c72bfb3daa8c1786a8e15 diff --git a/vendor/ring/src/ec/suite_b/ops/p256_scalar_square_tests.txt b/vendor/ring/src/ec/suite_b/ops/p256_scalar_square_tests.txt new file mode 100644 index 00000000..133f3c5f --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p256_scalar_square_tests.txt @@ -0,0 +1,65 @@ + +a = 00 +r = 00 + +a = 00 +r = 00 + +a = 01 +r = 60d066334905c1e907f8b6041e607725badef3e243566fafce1bc8f79c197c79 + +a = 02 +r = 834198ce241707a31fe2d8107981dc972e94d4db6642203a44b5591b7402cc93 + +a = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +r = 60d066334905c1e907f8b6041e607725badef3e243566fafce1bc8f79c197c79 + +a = ffffffff80000000600000002fffffff +r = 965f4779ac1ddbac28a14bd1e0c28dcb091d48820b4116d22afbc3f00f90f476 + +a = ffffffff800000006000000030000000 +r = 9e07cb5cdf45939f41541805d2c24625e1cb1719e37a89efc755b5e58e585515 + +a = 8000000000000000000000000000000000000000000000000000000000000000 +r = 4000000000000000000000000000000000000000000000000000000000000000 + +# From BoringSSL + +a = 0000000000000000000000000000000000000000000000000000000000000000 +r = 0000000000000000000000000000000000000000000000000000000000000000 + +a = 00000000ffffffff00000000000000004319055258e8617b0c46353d039cdaaf +r = 00000000ffffffff00000000000000004319055258e8617b0c46353d039cdaaf + +a = ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +r = 60d066334905c1e907f8b6041e607725badef3e243566fafce1bc8f79c197c79 + +a = da43b8dd7fe8830a4fe8980ec585ccbe903a2965a695cdff398200b74b2ede41 +r = 5ec68604412205b380e26ee4e4081eccc10ac7d1417b09cd534f8517b0de81ec + +a = a82a2b8bdbf8a37dc7cb5799691494a8c9fbf649686a4d250dc30697feb0fa47 +r = 552c094a8841621d6cc26b3b54ce5da5664283888445196a6433d3cfdcad3aee + +a = d785006e250410d9dcc6d7740795a7374c25b00b9c9a37b8285694a07307eacd +r = 971aaa9e70ad082cf43725f2e65bc73f4bf762459cee13167545072ec7bdcaf8 + +a = 69d6d9f5417e87d603a3fb6acafa0d1f974abf94ca57ce58d718a0ad5d02a496 +r = eb3284e5799fbe93171f08e6de9f792cd17f036b3a17671b0310e49b48e589b3 + +a = 1c28f742c3e26e74901d0425f2eb4d5272524668d2405875b32cf6433f212900 +r = 74f70a95399b7ad061a2200fa50528d68eee4654341c8158101e1e3f8f16e642 + +a = 026b2f69f0259d221920b2f358b378a79826f0332ee36afa257765043e3d6732 +r = e1e9cfa4724995bb50971ca22f3c028cd31cb51fbef8a37c31f10fd1d468f13b + +a = 376ed4fadcc1c6c4160a0c9c2ab7c62260367968b08d304d47c65f25625d7d60 +r = b9ccb67f377e1278f1d2eeda26e5eed76f32406c9deed9764fc0aa346d91e02b + +a = 50f66867d0a4ef389678d760d2a4db886583b4c068d0e240f7ddf3472c871304 +r = 82c3467bc5f7ca8b45f4ee61546745e2f53755a02e87f65f572418d60e471c8b + +a = 5b8bd82b37206d2b727f19ad2d02f63773470074dde7d43d2a77c448ddf2f978 +r = dbf3c2fc67a0688c3b5ff12cab1739d50b6093c5d98943d388652b1207e4a0f2 + +a = bed7b3a4dada0e16984eb59ee239005ab212e5b1772cdd5d240c8ee268f65c81 +r = 9232aa2759ca9c5efbaefb0cf45cc6bc9c89def8c25e5c169fe623f30787df36 diff --git a/vendor/ring/src/ec/suite_b/ops/p384.rs b/vendor/ring/src/ec/suite_b/ops/p384.rs new file mode 100644 index 00000000..425a9cd7 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p384.rs @@ -0,0 +1,364 @@ +// Copyright 2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use super::{ + elem::{binary_op, binary_op_assign}, + elem_sqr_mul, elem_sqr_mul_acc, Modulus, *, +}; +use core::marker::PhantomData; + +macro_rules! p384_limbs { + [$($limb:expr),+] => { + limbs![$($limb),+] + }; +} + +pub static COMMON_OPS: CommonOps = CommonOps { + num_limbs: 384 / LIMB_BITS, + + q: Modulus { + p: p384_limbs![ + 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0xfffffffe, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff + ], + rr: p384_limbs![1, 0xfffffffe, 0, 2, 0, 0xfffffffe, 0, 2, 1, 0, 0, 0], + }, + n: Elem { + limbs: p384_limbs![ + 0xccc52973, 0xecec196a, 0x48b0a77a, 0x581a0db2, 0xf4372ddf, 0xc7634d81, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff + ], + m: PhantomData, + encoding: PhantomData, // Unencoded + }, + + a: Elem { + limbs: p384_limbs![ + 0xfffffffc, 0x00000003, 0x00000000, 0xfffffffc, 0xfffffffb, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff + ], + m: PhantomData, + encoding: PhantomData, // Unreduced + }, + b: Elem { + limbs: p384_limbs![ + 0x9d412dcc, 0x08118871, 0x7a4c32ec, 0xf729add8, 0x1920022e, 0x77f2209b, 0x94938ae2, + 0xe3374bee, 0x1f022094, 0xb62b21f4, 0x604fbff9, 0xcd08114b + ], + m: PhantomData, + encoding: PhantomData, // Unreduced + }, + + elem_mul_mont: GFp_p384_elem_mul_mont, + elem_sqr_mont: GFp_p384_elem_sqr_mont, + + point_add_jacobian_impl: GFp_nistz384_point_add, +}; + +pub static PRIVATE_KEY_OPS: PrivateKeyOps = PrivateKeyOps { + common: &COMMON_OPS, + elem_inv_squared: p384_elem_inv_squared, + point_mul_base_impl: p384_point_mul_base_impl, + point_mul_impl: GFp_nistz384_point_mul, +}; + +fn p384_elem_inv_squared(a: &Elem) -> Elem { + // Calculate a**-2 (mod q) == a**(q - 3) (mod q) + // + // The exponent (q - 3) is: + // + // 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe\ + // ffffffff0000000000000000fffffffc + + #[inline] + fn sqr_mul(a: &Elem, squarings: usize, b: &Elem) -> Elem { + elem_sqr_mul(&COMMON_OPS, a, squarings, b) + } + + #[inline] + fn sqr_mul_acc(a: &mut Elem, squarings: usize, b: &Elem) { + elem_sqr_mul_acc(&COMMON_OPS, a, squarings, b) + } + + let b_1 = &a; + let b_11 = sqr_mul(b_1, 1, b_1); + let b_111 = sqr_mul(&b_11, 1, b_1); + let f_11 = sqr_mul(&b_111, 3, &b_111); + let fff = sqr_mul(&f_11, 6, &f_11); + let fff_111 = sqr_mul(&fff, 3, &b_111); + let fffffff_11 = sqr_mul(&fff_111, 15, &fff_111); + + let fffffffffffffff = sqr_mul(&fffffff_11, 30, &fffffff_11); + + let ffffffffffffffffffffffffffffff = sqr_mul(&fffffffffffffff, 60, &fffffffffffffff); + + // ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + let mut acc = sqr_mul( + &ffffffffffffffffffffffffffffff, + 120, + &ffffffffffffffffffffffffffffff, + ); + + // fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_111 + sqr_mul_acc(&mut acc, 15, &fff_111); + + // fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff + sqr_mul_acc(&mut acc, 1 + 30, &fffffff_11); + sqr_mul_acc(&mut acc, 2, &b_11); + + // fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff + // 0000000000000000fffffff_11 + sqr_mul_acc(&mut acc, 64 + 30, &fffffff_11); + + // fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff + // 0000000000000000fffffffc + COMMON_OPS.elem_square(&mut acc); + COMMON_OPS.elem_square(&mut acc); + + acc +} + +fn p384_point_mul_base_impl(a: &Scalar) -> Point { + // XXX: Not efficient. TODO: Precompute multiples of the generator. + static GENERATOR: (Elem, Elem) = ( + Elem { + limbs: p384_limbs![ + 0x49c0b528, 0x3dd07566, 0xa0d6ce38, 0x20e378e2, 0x541b4d6e, 0x879c3afc, 0x59a30eff, + 0x64548684, 0x614ede2b, 0x812ff723, 0x299e1513, 0x4d3aadc2 + ], + m: PhantomData, + encoding: PhantomData, + }, + Elem { + limbs: p384_limbs![ + 0x4b03a4fe, 0x23043dad, 0x7bb4a9ac, 0xa1bfa8bf, 0x2e83b050, 0x8bade756, 0x68f4ffd9, + 0xc6c35219, 0x3969a840, 0xdd800226, 0x5a15c5e9, 0x2b78abc2 + ], + m: PhantomData, + encoding: PhantomData, + }, + ); + + PRIVATE_KEY_OPS.point_mul(a, &GENERATOR) +} + +pub static PUBLIC_KEY_OPS: PublicKeyOps = PublicKeyOps { + common: &COMMON_OPS, +}; + +pub static SCALAR_OPS: ScalarOps = ScalarOps { + common: &COMMON_OPS, + scalar_inv_to_mont_impl: p384_scalar_inv_to_mont, + scalar_mul_mont: GFp_p384_scalar_mul_mont, +}; + +pub static PUBLIC_SCALAR_OPS: PublicScalarOps = PublicScalarOps { + scalar_ops: &SCALAR_OPS, + public_key_ops: &PUBLIC_KEY_OPS, + private_key_ops: &PRIVATE_KEY_OPS, + + q_minus_n: Elem { + limbs: p384_limbs![ + 0x333ad68c, 0x1313e696, 0xb74f5885, 0xa7e5f24c, 0x0bc8d21f, 0x389cb27e, 0, 0, 0, 0, 0, + 0 + ], + + m: PhantomData, + encoding: PhantomData, // Unencoded + }, +}; + +pub static PRIVATE_SCALAR_OPS: PrivateScalarOps = PrivateScalarOps { + scalar_ops: &SCALAR_OPS, + + oneRR_mod_n: Scalar { + limbs: N_RR_LIMBS, + m: PhantomData, + encoding: PhantomData, // R + }, +}; + +fn p384_scalar_inv_to_mont(a: &Scalar) -> Scalar { + // Calculate the modular inverse of scalar |a| using Fermat's Little + // Theorem: + // + // a**-1 (mod n) == a**(n - 2) (mod n) + // + // The exponent (n - 2) is: + // + // 0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf\ + // 581a0db248b0a77aecec196accc52971. + + fn mul(a: &Scalar, b: &Scalar) -> Scalar { + binary_op(GFp_p384_scalar_mul_mont, a, b) + } + + fn sqr(a: &Scalar) -> Scalar { + binary_op(GFp_p384_scalar_mul_mont, a, a) + } + + fn sqr_mut(a: &mut Scalar) { + unary_op_from_binary_op_assign(GFp_p384_scalar_mul_mont, a); + } + + // Returns (`a` squared `squarings` times) * `b`. + fn sqr_mul(a: &Scalar, squarings: usize, b: &Scalar) -> Scalar { + debug_assert!(squarings >= 1); + let mut tmp = sqr(a); + for _ in 1..squarings { + sqr_mut(&mut tmp); + } + mul(&tmp, b) + } + + // Sets `acc` = (`acc` squared `squarings` times) * `b`. + fn sqr_mul_acc(acc: &mut Scalar, squarings: usize, b: &Scalar) { + debug_assert!(squarings >= 1); + for _ in 0..squarings { + sqr_mut(acc); + } + binary_op_assign(GFp_p384_scalar_mul_mont, acc, b) + } + + fn to_mont(a: &Scalar) -> Scalar { + static N_RR: Scalar = Scalar { + limbs: N_RR_LIMBS, + m: PhantomData, + encoding: PhantomData, + }; + binary_op(GFp_p384_scalar_mul_mont, a, &N_RR) + } + + // Indexes into `d`. + const B_1: usize = 0; + const B_11: usize = 1; + const B_101: usize = 2; + const B_111: usize = 3; + const B_1001: usize = 4; + const B_1011: usize = 5; + const B_1101: usize = 6; + const B_1111: usize = 7; + const DIGIT_COUNT: usize = 8; + + let mut d = [Scalar::zero(); DIGIT_COUNT]; + d[B_1] = to_mont(a); + let b_10 = sqr(&d[B_1]); + for i in B_11..DIGIT_COUNT { + d[i] = mul(&d[i - 1], &b_10); + } + + let ff = sqr_mul(&d[B_1111], 0 + 4, &d[B_1111]); + let ffff = sqr_mul(&ff, 0 + 8, &ff); + let ffffffff = sqr_mul(&ffff, 0 + 16, &ffff); + + let ffffffffffffffff = sqr_mul(&ffffffff, 0 + 32, &ffffffff); + + let ffffffffffffffffffffffff = sqr_mul(&ffffffffffffffff, 0 + 32, &ffffffff); + + // ffffffffffffffffffffffffffffffffffffffffffffffff + let mut acc = sqr_mul(&ffffffffffffffffffffffff, 0 + 96, &ffffffffffffffffffffffff); + + // The rest of the exponent, in binary, is: + // + // 1100011101100011010011011000000111110100001101110010110111011111 + // 0101100000011010000011011011001001001000101100001010011101111010 + // 1110110011101100000110010110101011001100110001010010100101110001 + + static REMAINING_WINDOWS: [(u8, u8); 39] = [ + (2, B_11 as u8), + (3 + 3, B_111 as u8), + (1 + 2, B_11 as u8), + (3 + 2, B_11 as u8), + (1 + 4, B_1001 as u8), + (4, B_1011 as u8), + (6 + 4, B_1111 as u8), + (3, B_101 as u8), + (4 + 1, B_1 as u8), + (4, B_1011 as u8), + (4, B_1001 as u8), + (1 + 4, B_1101 as u8), + (4, B_1101 as u8), + (4, B_1111 as u8), + (1 + 4, B_1011 as u8), + (6 + 4, B_1101 as u8), + (5 + 4, B_1101 as u8), + (4, B_1011 as u8), + (2 + 4, B_1001 as u8), + (2 + 1, B_1 as u8), + (3 + 4, B_1011 as u8), + (4 + 3, B_101 as u8), + (2 + 3, B_111 as u8), + (1 + 4, B_1111 as u8), + (1 + 4, B_1011 as u8), + (4, B_1011 as u8), + (2 + 3, B_111 as u8), + (1 + 2, B_11 as u8), + (5 + 2, B_11 as u8), + (2 + 4, B_1011 as u8), + (1 + 3, B_101 as u8), + (1 + 2, B_11 as u8), + (2 + 2, B_11 as u8), + (2 + 2, B_11 as u8), + (3 + 3, B_101 as u8), + (2 + 3, B_101 as u8), + (2 + 3, B_101 as u8), + (2, B_11 as u8), + (3 + 1, B_1 as u8), + ]; + + for &(squarings, digit) in &REMAINING_WINDOWS[..] { + sqr_mul_acc(&mut acc, usize::from(squarings), &d[usize::from(digit)]); + } + + acc +} + +unsafe extern "C" fn GFp_p384_elem_sqr_mont( + r: *mut Limb, // [COMMON_OPS.num_limbs] + a: *const Limb, // [COMMON_OPS.num_limbs] +) { + // XXX: Inefficient. TODO: Make a dedicated squaring routine. + GFp_p384_elem_mul_mont(r, a, a); +} + +const N_RR_LIMBS: [Limb; MAX_LIMBS] = p384_limbs![ + 0x19b409a9, 0x2d319b24, 0xdf1aa419, 0xff3d81e5, 0xfcb82947, 0xbc3e483a, 0x4aab1cc5, 0xd40d4917, + 0x28266895, 0x3fb05b7a, 0x2b39bf21, 0x0c84ee01 +]; + +extern "C" { + fn GFp_p384_elem_mul_mont( + r: *mut Limb, // [COMMON_OPS.num_limbs] + a: *const Limb, // [COMMON_OPS.num_limbs] + b: *const Limb, // [COMMON_OPS.num_limbs] + ); + + fn GFp_nistz384_point_add( + r: *mut Limb, // [3][COMMON_OPS.num_limbs] + a: *const Limb, // [3][COMMON_OPS.num_limbs] + b: *const Limb, // [3][COMMON_OPS.num_limbs] + ); + fn GFp_nistz384_point_mul( + r: *mut Limb, // [3][COMMON_OPS.num_limbs] + p_scalar: *const Limb, // [COMMON_OPS.num_limbs] + p_x: *const Limb, // [COMMON_OPS.num_limbs] + p_y: *const Limb, // [COMMON_OPS.num_limbs] + ); + + fn GFp_p384_scalar_mul_mont( + r: *mut Limb, // [COMMON_OPS.num_limbs] + a: *const Limb, // [COMMON_OPS.num_limbs] + b: *const Limb, // [COMMON_OPS.num_limbs] + ); +} diff --git a/vendor/ring/src/ec/suite_b/ops/p384_elem_div_by_2_tests.txt b/vendor/ring/src/ec/suite_b/ops/p384_elem_div_by_2_tests.txt new file mode 100644 index 00000000..1ee25063 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p384_elem_div_by_2_tests.txt @@ -0,0 +1,27 @@ + +a = 00 +r = 00 + +a = 00 +r = 00 + +a = 01 +r = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff800000000000000080000000 + +a = 02 +r = 01 + +a = 03 +r = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff800000000000000080000001 + +a = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe +r = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff80000000000000007fffffff + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff80000000000000007fffffff +r = bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffff4000000000000000bfffffff + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff800000000000000080000000 +r = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffc00000000000000040000000 + +a = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/ring/src/ec/suite_b/ops/p384_elem_mul_tests.txt b/vendor/ring/src/ec/suite_b/ops/p384_elem_mul_tests.txt new file mode 100644 index 00000000..79353900 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p384_elem_mul_tests.txt @@ -0,0 +1,32 @@ + +a = 00 +b = 00 +r = 00 + +a = 00 +b = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe +r = 00 + +a = 01 +b = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe +r = ffffffebffffffebfffffff3fffffffd0000000300000005000000040000000100000013000000270000001ffffffff9 + +a = 02 +b = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe +r = ffffffd7ffffffd7ffffffe7fffffffa000000060000000a0000000800000003000000270000004e0000003efffffff3 + +a = 03 +b = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe +r = ffffffc3ffffffc3ffffffdbfffffff7000000090000000f0000000c000000050000003b000000750000005dffffffed + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff80000000000000007fffffff +b = 02 +r = ffffffebffffffebfffffff3fffffffd0000000300000005000000040000000100000013000000270000001ffffffff9 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff800000000000000080000000 +b = 02 +r = 14000000140000000c00000002fffffffcfffffffafffffffbfffffffdffffffebffffffd8ffffffe100000006 + +a = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 02 +r = 01 diff --git a/vendor/ring/src/ec/suite_b/ops/p384_elem_neg_tests.txt b/vendor/ring/src/ec/suite_b/ops/p384_elem_neg_tests.txt new file mode 100644 index 00000000..e74ce1cb --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p384_elem_neg_tests.txt @@ -0,0 +1,24 @@ + +a = 00 +b = 00 + +a = 01 +b = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe + +a = 02 +b = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffd + +a = 03 +b = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc + +a = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe +b = 01 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff80000000000000007fffffff +b = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff800000000000000080000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff800000000000000080000000 +b = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff80000000000000007fffffff + +a = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff diff --git a/vendor/ring/src/ec/suite_b/ops/p384_elem_sum_tests.txt b/vendor/ring/src/ec/suite_b/ops/p384_elem_sum_tests.txt new file mode 100644 index 00000000..0d0ea9de --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p384_elem_sum_tests.txt @@ -0,0 +1,1559 @@ +# Montgomery Arithmetic; values are in the range [0, q). + +a = 00 +b = 00 +r = 00 + +a = 00 +b = 01 +r = 01 + +a = 00 +b = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe +r = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe + +a = 01 +b = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe +r = 00 + +a = 02 +b = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe +r = 01 + +a = 03 +b = fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe +r = 02 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff80000000000000007fffffff +b = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff800000000000000080000000 +r = 00 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff800000000000000080000000 +b = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff800000000000000080000000 +r = 01 + +a = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 0100000000ffffffffffffffff00000001 + +a = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 0100000000ffffffffffffffff00000001 + +a = 8000000000000000000000000000000000000000000000000000000000000000800000007fffffffffffffff80000001 +b = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff80000000000000007fffffff +r = 0100000000ffffffffffffffff00000001 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 0100000000ffffffffffffffff00000000 + +a = 8000000000000000000000000000000000000000000000000000000000000000800000007fffffffffffffff80000000 +b = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff80000000000000007fffffff +r = 0100000000ffffffffffffffff00000000 + +# Carry Propagation. + +a = ff +b = 01 +r = 0100 + +a = 01ff +b = 01 +r = 0200 + +a = 03ff +b = 01 +r = 0400 + +a = 07ff +b = 01 +r = 0800 + +a = 0fff +b = 01 +r = 1000 + +a = 1fff +b = 01 +r = 2000 + +a = 3fff +b = 01 +r = 4000 + +a = 7fff +b = 01 +r = 8000 + +a = ffff +b = 01 +r = 010000 + +a = 01ffff +b = 01 +r = 020000 + +a = 03ffff +b = 01 +r = 040000 + +a = 07ffff +b = 01 +r = 080000 + +a = 0fffff +b = 01 +r = 100000 + +a = 1fffff +b = 01 +r = 200000 + +a = 3fffff +b = 01 +r = 400000 + +a = 7fffff +b = 01 +r = 800000 + +a = ffffff +b = 01 +r = 01000000 + +a = 01ffffff +b = 01 +r = 02000000 + +a = 03ffffff +b = 01 +r = 04000000 + +a = 07ffffff +b = 01 +r = 08000000 + +a = 0fffffff +b = 01 +r = 10000000 + +a = 1fffffff +b = 01 +r = 20000000 + +a = 3fffffff +b = 01 +r = 40000000 + +a = 7fffffff +b = 01 +r = 80000000 + +a = ffffffff +b = 01 +r = 0100000000 + +a = 01ffffffff +b = 01 +r = 0200000000 + +a = 03ffffffff +b = 01 +r = 0400000000 + +a = 07ffffffff +b = 01 +r = 0800000000 + +a = 0fffffffff +b = 01 +r = 1000000000 + +a = 1fffffffff +b = 01 +r = 2000000000 + +a = 3fffffffff +b = 01 +r = 4000000000 + +a = 7fffffffff +b = 01 +r = 8000000000 + +a = ffffffffff +b = 01 +r = 010000000000 + +a = 01ffffffffff +b = 01 +r = 020000000000 + +a = 03ffffffffff +b = 01 +r = 040000000000 + +a = 07ffffffffff +b = 01 +r = 080000000000 + +a = 0fffffffffff +b = 01 +r = 100000000000 + +a = 1fffffffffff +b = 01 +r = 200000000000 + +a = 3fffffffffff +b = 01 +r = 400000000000 + +a = 7fffffffffff +b = 01 +r = 800000000000 + +a = ffffffffffff +b = 01 +r = 01000000000000 + +a = 01ffffffffffff +b = 01 +r = 02000000000000 + +a = 03ffffffffffff +b = 01 +r = 04000000000000 + +a = 07ffffffffffff +b = 01 +r = 08000000000000 + +a = 0fffffffffffff +b = 01 +r = 10000000000000 + +a = 1fffffffffffff +b = 01 +r = 20000000000000 + +a = 3fffffffffffff +b = 01 +r = 40000000000000 + +a = 7fffffffffffff +b = 01 +r = 80000000000000 + +a = ffffffffffffff +b = 01 +r = 0100000000000000 + +a = 01ffffffffffffff +b = 01 +r = 0200000000000000 + +a = 03ffffffffffffff +b = 01 +r = 0400000000000000 + +a = 07ffffffffffffff +b = 01 +r = 0800000000000000 + +a = 0fffffffffffffff +b = 01 +r = 1000000000000000 + +a = 1fffffffffffffff +b = 01 +r = 2000000000000000 + +a = 3fffffffffffffff +b = 01 +r = 4000000000000000 + +a = 7fffffffffffffff +b = 01 +r = 8000000000000000 + +a = ffffffffffffffff +b = 01 +r = 010000000000000000 + +a = 01ffffffffffffffff +b = 01 +r = 020000000000000000 + +a = 03ffffffffffffffff +b = 01 +r = 040000000000000000 + +a = 07ffffffffffffffff +b = 01 +r = 080000000000000000 + +a = 0fffffffffffffffff +b = 01 +r = 100000000000000000 + +a = 1fffffffffffffffff +b = 01 +r = 200000000000000000 + +a = 3fffffffffffffffff +b = 01 +r = 400000000000000000 + +a = 7fffffffffffffffff +b = 01 +r = 800000000000000000 + +a = ffffffffffffffffff +b = 01 +r = 01000000000000000000 + +a = 01ffffffffffffffffff +b = 01 +r = 02000000000000000000 + +a = 03ffffffffffffffffff +b = 01 +r = 04000000000000000000 + +a = 07ffffffffffffffffff +b = 01 +r = 08000000000000000000 + +a = 0fffffffffffffffffff +b = 01 +r = 10000000000000000000 + +a = 1fffffffffffffffffff +b = 01 +r = 20000000000000000000 + +a = 3fffffffffffffffffff +b = 01 +r = 40000000000000000000 + +a = 7fffffffffffffffffff +b = 01 +r = 80000000000000000000 + +a = ffffffffffffffffffff +b = 01 +r = 0100000000000000000000 + +a = 01ffffffffffffffffffff +b = 01 +r = 0200000000000000000000 + +a = 03ffffffffffffffffffff +b = 01 +r = 0400000000000000000000 + +a = 07ffffffffffffffffffff +b = 01 +r = 0800000000000000000000 + +a = 0fffffffffffffffffffff +b = 01 +r = 1000000000000000000000 + +a = 1fffffffffffffffffffff +b = 01 +r = 2000000000000000000000 + +a = 3fffffffffffffffffffff +b = 01 +r = 4000000000000000000000 + +a = 7fffffffffffffffffffff +b = 01 +r = 8000000000000000000000 + +a = ffffffffffffffffffffff +b = 01 +r = 010000000000000000000000 + +a = 01ffffffffffffffffffffff +b = 01 +r = 020000000000000000000000 + +a = 03ffffffffffffffffffffff +b = 01 +r = 040000000000000000000000 + +a = 07ffffffffffffffffffffff +b = 01 +r = 080000000000000000000000 + +a = 0fffffffffffffffffffffff +b = 01 +r = 100000000000000000000000 + +a = 1fffffffffffffffffffffff +b = 01 +r = 200000000000000000000000 + +a = 3fffffffffffffffffffffff +b = 01 +r = 400000000000000000000000 + +a = 7fffffffffffffffffffffff +b = 01 +r = 800000000000000000000000 + +a = ffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000 + +a = 01ffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000 + +a = 03ffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000 + +a = 07ffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000 + +a = 0fffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000 + +a = 1fffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000 + +a = 3fffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000 + +a = 7fffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000 + +a = ffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000 + +a = 01ffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000 + +a = 03ffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000 + +a = 07ffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000 + +a = 0fffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000 + +a = 1fffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000 + +a = 3fffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000 + +a = 7fffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000 + +a = ffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000 + +a = ffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b = 01 +r = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/ring/src/ec/suite_b/ops/p384_point_double_tests.txt b/vendor/ring/src/ec/suite_b/ops/p384_point_double_tests.txt new file mode 100644 index 00000000..e9afb27d --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p384_point_double_tests.txt @@ -0,0 +1,20 @@ + +# G doubled once. +a = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, 2b78abc25a15c5e9dd8002263969a840c6c3521968f4ffd98bade7562e83b050a1bfa8bf7bb4a9ac23043dad4b03a4fe, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +r = db93b776427460c39c90a4fd2de4b506da821495f0687f503504e6f0ff9d48a18e6c8f2e022b53f0c8229e55783dde91, e34947f7123df0c2070d430900b0e68409f1fe415172bad915e4f18bdc588258e8e8e4a8c2aaccd842ea84633140bfda + +# Point at infinity doubled. This uses the (0, 0, 0) representation of +# the point at infinity instead of the classic (1, 1, 0) +# representation. +a = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# Point at infinity doubled. This form is the result of multiplying +# n * G (affine), which is more interesting than the above case +# because only the Z coordinate is zero. +a = 4a0fd63f894499928e4b2b72aced45cfc589976f4ff86f78c904d59da9379a62b702d968c1184834c11db28c7356ceb6, be113b04484cd4bc215a9f2a33a674c3764c38ca4de135dd50ce8dcf3c85d55a5aad0e171860bdb6c58201e6212d9ac5, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# (n - 1) * G doubled. +a = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, 57b82ca1527c5a01b78bc8ccb9febe74178b04b7c6fde1c1c4ef9a220c4320bb560cb078542256a3900df61c107de6c5, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +r = db93b776427460c39c90a4fd2de4b506da821495f0687f503504e6f0ff9d48a18e6c8f2e022b53f0c8229e55783dde91, 1cb6b808edc20f3df8f2bcf6ff4f197bf60e01beae8d4526ea1b0e7423a77da617171b563d553327bd157b9dcebf4025 diff --git a/vendor/ring/src/ec/suite_b/ops/p384_point_mul_base_tests.txt b/vendor/ring/src/ec/suite_b/ops/p384_point_mul_base_tests.txt new file mode 100644 index 00000000..84b90a23 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p384_point_mul_base_tests.txt @@ -0,0 +1,1280 @@ + +g_scalar = 00 +r = inf + +g_scalar = 01 +r = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, 2b78abc25a15c5e9dd8002263969a840c6c3521968f4ffd98bade7562e83b050a1bfa8bf7bb4a9ac23043dad4b03a4fe + +g_scalar = 02 +r = db93b776427460c39c90a4fd2de4b506da821495f0687f503504e6f0ff9d48a18e6c8f2e022b53f0c8229e55783dde91, e34947f7123df0c2070d430900b0e68409f1fe415172bad915e4f18bdc588258e8e8e4a8c2aaccd842ea84633140bfda + +g_scalar = 03 +r = d283fe68e7c1c3ace36f7e2d263aa4703a48d732d51c6c3e6b2034e9a170ccf0c54ea9fff04f779c05e4dbe6c1dc4073, 465465fc983292aff6db68b15102b33968012d5ad2e1d0b4132663c04ef6744692d789a77ae0e36d7e284821c04ee157 + +g_scalar = 04 +r = cfeee6dd34179228fb40f647d685d979078358d4736400ad2e4f153b0aecac4630594ccbee0421e30aae8477ebb68f2c, 50946875303df319e607b9e33820017d147162d30418c6938e3e61a34c542ad1e74bb7f17bfec97e54f3e8e79b3a03b2 + +g_scalar = 05 +r = e1bb26b11d178ffbc676b987e2e8e4c660db2cf5aacc05e67f1eb1b5293c703bc185c0cbcc873466bb595eba68f1f0df, 4db1c9d6e209e4a3e6c5944024de236d4b237faf982c041180b61b3101c35b9922c16e2e72f345662b694ba07073fa21 + +g_scalar = 06 +r = c482e189f0430c404f0f6a962b02d33b2a33f6661bdf6015ec52930f580d57f2cb2454b339d3413a7eb5c9317d56dad8, c9962152af2a9eba586d8ededf21559a93c9e5f61b546f058bd4bffcb79e33b0739ac69d5b3d4dce3f62b16ea7b08203 + +g_scalar = 07 +r = 932c9f811c89025bf893db589db2df555f4215d1659753ed731edcf8211faa954ce6415f874774b1df13b9d17d69222b, d90a16b6af6c9b3ef57f238e693b07060ff37c0401fff78065aad76f50130844135349d5a8641c790996b2207706a61e + +g_scalar = 08 +r = 5db4f184349cd9b11c7b5fe116b664231d9aebd64f3ddb371c5c2e7193d7e30f9e336de5ae9b587a23f60a05dd9bcbba, 3c0c6dd70d27ef617008d943c48ecf0ee9923263a42dbba2701754bf7d8686e4836dbb36b7e55e870d2cfe83e6655a44 + +g_scalar = 09 +r = 5cab1d1d53636c6a26d464c6dad54d6adc351dc13cbfff3f26094833a96d745de35d87293fd7e4f92f5d200e2353b92f, e770633431e8f5c67d9429f4ee69a754a6ecaccc68ead0d827f061c7033ca7c23777e270d742aa2ff2813072b18ec0b0 + +g_scalar = 0a +r = a91a5280db1c212ec2f646025c4845ec54a612d7eb32cabee9f6368eab225fa32a15a9a6e58d6787845539d3c8d99c02, 6eb995bec80174e83e03370a47a9b8aa81961b8ccfd7fd1d592ac0ba794eabfd03a530eb13b9e85cbb971f78e67b5fce + +g_scalar = 0b +r = 9c19e9fc7ba9c437f8d89885f0561d7901b8bf56147b66020dcc67706cdad64f4532077c44377abac7708b19b68b8c7d, 9aa62f9f3533f91841821d0c3a53287a2e070f36fe9e682e3ce813298a77e780604fe46bac144b83764eb146bdc4ba25 + +g_scalar = 0c +r = 627b415f9c35b26d523c40dbcf9ab45cf67eb42235d77d8303aced26c8edfee1d4258cc55d9704203db8477270313de0, 0c6e430ef9c4af3d0329eab1f7942f0e40c64a4e66bed5af8c79848fd0e102ac80d60af627aa651afacc45e48be55ed8 + +g_scalar = 0d +r = b51c56e18cf23c94d2657265ed22df97db5203a8d9c1bd568a7a8e4633b7d4aeb25e28c5f6749a959b7aeb7e75ccbdfb, 4617adb7cc6979e181fdbd1c3b490ec3b7feac2dfec38d60789a2a48cf4d0fe3d8e88f1a87cae0c2f4d394596c3d812d + +g_scalar = 0e +r = 46d227c432f6b1ba8058994c5710c0c944ce05ff88957166ca6b1af8b1f85c2ad02225fb01ec909f5865e5018f75244c, 4429839ddefbadf5647d24db13690a7472445345d9c3b6911ecc8585e11dbbbf540b8b82730a99d1be4b4a9003cb68e5 + +g_scalar = 0f +r = fb62d26f4903026b0fc01fd4eb08599359500917789b307583ccf19550e07b342b7210e2ec3dabd8446ad8884709f4a9, 5a68c6fed0bc27168733fc41400c5797dddc2866d898f4704b23d3a0de06610c61609cbd144bd5862309cc9d6fe989bb + +g_scalar = 10 +r = a10896aa435abaa137065f5313bdc3fa317b63ea2887d5ff37cf65517917652a992afb5b0ecdd2d8da6e8a7f7c33ed91, 659db48181ef251351c305c6a72d1967b333bdfbc88ee148914871dc154d410feb07ddea230cf00d9b21615fefabca26 + +g_scalar = 11 +r = 524f166ee475ce709f6928555330455e7be3737d524ffefce6fc3f2af655a10d3ea4ea4c8ff1f43e8903e1304b4a3cd0, ac37986f55b164c925eb5df1b3c2677af87d6d854a54504a49ce6993336bf1834e23b6ffd5b9c0da3fcc69cd6c12f055 + +g_scalar = 12 +r = 57505d8d6749703068a232435567169355a96a6879909f083bd1c8f62edb0dbd198fd3f0f38f66625dfee73ce5b82700, 91700b247eb1be639bdd6a092945a7576ffcfc7ca4cfd9bbc266eb844112985854b867b7f78aa7de8a60717f75c64513 + +g_scalar = 13 +r = fa0f1f450390d706b3b6639c539802ae23891298fc38538eca109c3b154aad5e22c4cc5f41a8c91282a2ed4abaa84c08, a1d47b23e957776415d1dc778264b6723f5a799bb67f30c39170b3786ff2f643a8c72d3cc3da2eac46b78e5db0dc21d0 + +g_scalar = 14 +r = 1d1cdf7b5f22346598ca8dd42d96c936f78cff0cd467f03a713466708cbaffc7cd96f20591e71d16ad610a2d94a70ec1, ab9dd81052ebfb015e01b72b4718bbc7422da643ffe6132b9933fb25dccd4df325f546ab321828ffe27a189460d4db60 + +g_scalar = 15 +r = ab16c626dac012b51b1a0f6c5df0e5372e59ab62bd9ebe6930128aa06177f75d88e0d496dd2f9e2108265e510422ce2f, 21824f411353ccba266ad15aacea5817b454111e8527cd59262ebb498a149098aa740a9e38f17bea8014214b008c5de7 + +g_scalar = 16 +r = e082882d69059095fd7a8b13f0681fcac382472ebe0e1fdbccd57831927ed783981b788d16f325b84f595351262bb775, 671d69c98fcd841850fc847215809cddc764edf840d0fcf77b1ab489cbf837b7f9d62fd9c9576c694d1c3049faa71fdc + +g_scalar = 17 +r = 80826a69eea8f22461e4ca2b905432f01c75b8ab2a351783b9d3dd25429c0a18990ed20b569b8ef6d1b4e74d12e3683b, 9dfccb0de2212559282d2437566718c1f0138950eaf22c7e7ad8a132a527cebe0bcca3f0a65e48137fc33a6bec52abad + +g_scalar = 18 +r = 4f13f901fc55723f38076e8fca77d74f563361909bd5c2f7540c045a409c930b20c1b8e0d809afcd259f272cfab816a7, 150808e625a302c91395a87966a4e904e8277439a0f9ad3adf5579fa4bea82dd98d82ad1da247ec8890932d7bd3d10c3 + +g_scalar = 19 +r = c29c6e2ca5bb73313809ab50de2480249bd51b99208abe1e57d0f3d2e2be174abb280dfa3cb3fb361e93722758ce3b83, 1fe6fb42e97809dcda3e1a3d4cebc96ed6a2f51dea8e434401628f059424a3cc83ccbc4e9009e3919944fd2e61124f05 + +g_scalar = 1a +r = 37a45bdb091cbb80f14b309f03fa90f2808497b7b0bba4a76efedb8023bf0b90b0391b37897b93f56423197d2afd473d, 47d98a9df092241cbf2c0862697c08fd5d512df99d42a72725c7b9146f5f24c7db3f422d95e16d6eedda4ae48a8f5dcb + +g_scalar = 1b +r = e8ca780e373e5aec2f7e8d509c6a58fe7228e2d5d18f14d08e0d4168482396f9cf1912934d78291da04482d2467d66e4, 17820a0bc5134ed767e67195d44d3cdf7d26540638c85a85d779adfe31da1bea58a6d7f569e2f8f442aad1d61b68e9f8 + +g_scalar = 1c +r = 55be5764d37da1a2d8232f8b4e492aa88fb0c597a4da3e15550e0bee8ff22c6f4169b4117b3c1220c76afaa373b64643, 05cdca3fe7988176792377fbf8eb8319c48ee6f3b033c112184bd4733ad6983a9ff769c4875fee0ff1bc89b628e77f9e + +g_scalar = 1d +r = c8b00ae8187cea1f2065b7cba7df26e43dc22d490e3feb0fce3c15ed55c9764725846b66780443d6019d6ac5d3021470, 1d2a1c015977f16cf6f57e7190c820338e6db10b404505fbab178d26cce851b3293c164920c83de21a5284a0865dded3 + +g_scalar = 1e +r = 92cea8f4c4360dd87002990485ba414315f9abe1feb6b100519b9fd50a18323276aad8b8131263886a7a3464d0cbcea0, 941292e500f88cb2f569446a2755569296c21b29f6a167f23117dd04d47a41dc1846eefcdd3eb156dc6c5d1dc12748a1 + +g_scalar = 1f +r = 6c07c4040a3305d11afb51a3e3ba8285d42f7dc953c149652ecf8340f0df4fe6b6e7ecdd9e821ee6a39c89317c8906a4, 475a3e756398a19d5b3d0d6d36beecc4d7dd464f045a7a1c402a9bab42eb20ddbc0a699b374c4b08dab83288127fc1da + +g_scalar = 20 +r = 5dd2a4a0626b3d793a9865baa631cfb0ba8953d612e8dc871896b9fcc651b1dd0d784cf208f779d5ad852b878c0a64a4, c510ad93aabca99f73b42725b35b4ff04bcb06f00a2377b677315f9e9448fd08a372dfc2f2a52bfd1148bc72687c20bb + +g_scalar = 21 +r = cc9e97a46c833e9d68af622641d5c400da631fc160f09efbbbc7c7ee955ef3afdf330d9d5b943c8661333a382fb3ba63, a7fd2b619057dad76fcc93a1b8c310728a416eb9bb6f0aba08467cea48b90b9113bf6124c209e55e7fd73e8e3a625e76 + +g_scalar = 22 +r = cdb55e6ba07b7cae7ec2bc1cd50b3e6d9d6ac102b4e2520145700722abb9102f0648c2cd2d668c4180b309dd2ada5bf4, a964eefbfdadd24e03c050a06152072602d00cfb8a76b2d69e1418a4554557c3470ddc68f8a57f48ebcbda0786da3943 + +g_scalar = 23 +r = d6149f75e9417bc6832bd8e34fc7852365f16273a02583fd4a508620dde6bd0abb3800d52d7c2fb458a5b5433720ec9b, b13a8ad830e23f26ac8a877f52ccd35c22f19fab28f35eee50018998988092a20ce18088a55e0956feb026e93deeb52a + +g_scalar = 24 +r = 1608643883061d376f01faee26946e789f82b7fbab52606ca39180d45c2c7ce14a13260770b1b757f216aa2531238ed0, f699887b806085b7df33eed7b73401b16a3258ec33f5567510209418c167fd201d11bc5ed6e28138597edf370fb077bc + +g_scalar = 25 +r = 1eba28f3defc58b59261ede87ef27114acb60a7597482b86a129e2dff5b54a5d4027704bb5630ef20202d57de44f61a3, fa0e07b7fe85bf85284fcbb5638ca337b50649a894047d1f2ea912435d2ca0342f1643d514594bee6c91c0c98be5589e + +g_scalar = 26 +r = 47ba96091da7b1476b464412bc9a48c7479ecf018173fb32f3d752f5ad6cbeac018843c01c0d77024703cd85891f8ffe, 1f466694520618f2129be314974320a4f300e1c648347f9adae2479844956b9387c183c3e1a0e06c91af26eaabc13488 + +g_scalar = 27 +r = 587df4d6b89b1fc2c9985040b76c066536a1cd6dde9b62306d7edf642b7f006fd984244a8e3d2c467d894f80506e0e42, 2d7bc128074968fb1a95355f1cd60340b646e453436d9fe2345c553ab53153b87b2b0ab3e82947474c0638476a71ae7a + +g_scalar = 28 +r = 51c4b1b36a4d6e813b021cf316d7a9adae78bc3a3134216c86fcfe4760be3ebc43a53ff21beb359e6048c6949399c38a, dfd92b6da914bb01dbb22c9ddeb46e6c63a00a0a60e0aa2a98ff87f7370eb7441df8cc84a69ea3a354b9cd8db593d816 + +g_scalar = 29 +r = 8764cd2cda92245de3bc778895fd71ae89746c8d852ca03573a82933a80d68f341dfd24d456a201ead148e87bca6d14c, 82ea702eeb18f1c5679952c7d193272ebdc9d6c34f9f589a57860ce121646f315ac762e00f3c9d6ea2fe2c4782eb23e2 + +g_scalar = 2a +r = 7438b4933c1e593ce983e169ffff96c73fd72a308f234c864b21c4f3eb6c7e6231b22efc5df46c6618ef56cd5d76b881, db6829c2f002bb6e50029568472a7175e739fb61eaa6776325d0caaeda1eadf40d959ba9796d9129863a23a3a553e8e3 + +g_scalar = 2b +r = 35178bad22dab3935cf095a901fefb567314f5f0416dbd86dad9f5b239c4943d09112fc50578bc8c37fa935500846d44, 8f3f1f63c9632b78a974b09415cbf948aaf8e0f6bd0628dfbce78aa9ede314bb1b7ee42d749e5498cf79fc1b36baf1a7 + +g_scalar = 2c +r = 9c7e7754a320d35204ce2a21986c5ce6d50a288981ea36c2767b4ad7f8f99b51ae97af8bf240b30a1c5f0e5b36a400d3, 5fb28e322a1dd73bade6096d02e543ae47678afb27dda8e5c680176505c7ad6c7cc82a4df1698fb2c3336331bbad8346 + +g_scalar = 2d +r = 9c94c858b2ac340599e1c0c61f2bb599b0040c0e8d6fcf13ffe8e0bb39eb8f59d4af65c673ad9112d4c411564fddda5b, 42eb2979db83a48517477722bd2af19e16f96676b7234e93eb3b44a9e5b5691862b2f54351fcca3f8f8878d76eeed85d + +g_scalar = 2e +r = 374aa9069481ed0dd9c79db8005412579266634957719f5460976b01b472d7899f24fba649ddd10ea618d7479fc4f435, fc539eb3e259c7dbc82d5998ec090d0619ab802314eb4ab9d7a198a4185a849ca1590c30ecf5864360efb1147fdc2d7a + +g_scalar = 2f +r = ea5b37c5da233371504f21b1570cf950780abff7d878acd0bfb185125f5b07a065c788785f0dc66c6f888f7df0c668ca, ac9dfec7dfa72a8beef006912e20fc23dfeea1a265e0fc91f86562a898fb34ff9c701758249cf9b7487ae8bd22437ed1 + +g_scalar = 30 +r = 66e4794bae7d740062e5c5d3e73a1bc940d01ff53a7d2f3c4f504e06ea52bef92d368d48e7f30c2b3ccf806ab35bf6cf, 271e42a12624a58348eab00eb5c9462c2605ca009da2a2ca5c3ca10d04bab9854580609da766ddf13d30625e5ffef312 + +g_scalar = 31 +r = 0b470bb250e4ea9e1197832bcea03f5647c56c115b6e3386a669156542e365a48ea5af63a5ea6fb8fa5c3aef697136c6, 2d1cc518e28b2bdb771e64415b57be2f2487edd57f82bdd3fc4486ee49c9ebe88d6c174ed2497d483113c74313b25712 + +g_scalar = 32 +r = a820e8303a5d50d19cbf755b46f97ac7beabb91ac3c90051510bd675cb2ec3f1172cfe4ecb5af900a96763d2fba32d1f, 6f58fa8b7181c2a16f7bfa7e13a4f7d6c1b444139333e4056124642f0f32b151df7dc7053048461a83a9f17e308c4545 + +g_scalar = 33 +r = 16634a504f35cb3c3dba16e9daaabc27464ae8d241a84de7a5e0fb598c5a78d91947c0caec4a22b82c4ccac72070ac8d, 518b047dcbaa0d97c69489e2373f1a0d0b2240003c887d36daeac0c3570543f0324d067e7359dd35adc18bf9b16ec84f + +g_scalar = 34 +r = 4b820d9b31d83660252b48f5cd8d7d770bedaa85e5377c005687d1dca6ccfd358a944b316b3262328f6468656f9201b9, c5cc339dcba1fd4b222465866e5ede7690e2aead7f78aaf86d0a166ced3c3b7a0a8930fc1208b9faa9e5af3ccae07f15 + +g_scalar = 35 +r = a8ba8f10e0f383ea642ec4e615c3aae2cf485c74a7c54b160b0110610f0422a2daed7c268a0915cc3b1bddc6fbde49ef, edf2e3eb7ecc9485adc93d9a481765e2d2c71ad1390699635786a19a4e2fa83eebec6442089efa8b2a2054b495618501 + +g_scalar = 36 +r = 4576a6497cb8944248c075daaadd6150075134ebabd64a6acff00bd23c9b5a41ab2f15202175fbf411853add834e6c54, 420eb673906a29496e9e86bb7b1eb77a1ae1dd97d13444bb0bf879d693b44ea68dbb571c77fcd1f4340a767034adeda3 + +g_scalar = 37 +r = b3fcd5d1690cd408fa5cbfda60f4554f6078d8bf085faeb3a4fb7867e3a142d6fd6622bc1718ec3cbcab5f60069f3367, 7460257314ceeed46a91e73997d0fa0617c6b5cbbe2334f88de3107c3d079f6182af23aa180a63a74ebdee7d281f7884 + +g_scalar = 38 +r = 7772a913e6436cc1e9981ea6820da79f2629ba4fd1deca258b6fc785e692fdd2d4215b4fc7a8baa1483350a5ebb8cdad, 31ff648e0f88b82d56fefff326f349ce05826192490bb572b623a1aeeb8cc21c28179e6cc852f64bd141235c553fb41d + +g_scalar = 39 +r = 814d7fa07a78c189c052f3eb1c99ceef1e9dd1509bf446e0a14967dfac4bbf6273bae4c1694b8b0db14ba61cf97f865c, 0a823b9a4b26df63d2e130552952c1fc8f427bc473c81d5b0d60bab7e809a13c7788c258a1737b65a101a483ab74b05d + +g_scalar = 3a +r = 104cec0666ac72e09e9520bf57acc87aa58db4ea4f96af4fdab9dc0015b0fa13341cf9d9c46785af941c5c257d0be180, 2b51995f794da901c08595e35548fbeae11699e909fa58a1b5f157aa569b57d8b8b4ac9ffa80380a9f3f7baa1929e675 + +g_scalar = 3b +r = 9ba039679267b6463703435b0de64db996a917cf1ed0e31564473b595c322738dfca6897f929974caf467ce227bf64c9, ff336f12504655c196d9ba0bd9e3ca196fb34b3028463cceaccf2edd7b05970341bdb741b335eff0df0c2aae3a522fbe + +g_scalar = 3c +r = 95bb80cece47968c61bba736a55b527784b7c2fed74cccd40402d5c4eb809f85a61fada6fb4f60e8c711d5d1c425543e, 8dd21bf0b4ea4f5129fc3b284892e676bb45a51f948a8375acd70b86ad2a20fcf0e0f4f7e682aa2909f92adc16eb7b95 + +g_scalar = 3d +r = c93ea049ef6ba0062366467300fe51fd5ff77ff2332982d06035e34f772ae08054fb5a34222241e848da1fd3fc60a6e0, c4cc11451fc69829b0a6c77201466d230dda19ffe5275767e6a7885370d303eb394d32cd6ae9f4ac6640f1177d381266 + +g_scalar = 3e +r = cb4c0a54561fedf2d194b7054b14d11703b9f1cebfec21da0c7d749907dbb9af1e659730c1fb476e49a04dc0f5acf772, 0902cc23149446b8cac324ec82c4faa73d2508922ba9239b65609e59d9ff0aba5f5e9b1fd630c145af623d3f21da4d42 + +g_scalar = 3f +r = 1c9bf0b0f1e52d1ef6159e519a049f7acd7e35f76e2b71aa7a50f7458c949f8f6ce8ead6149a1896c5c0e6d7aaed89c0, 52bb3712a0a689e8f5af7b8e3735df22dc89bd4997d4048d3bb034e888d17f198d3a5f621ecd7b1a3bb6c1f518202c80 + +g_scalar = 40 +r = 4f5d5ab6d1b30e5cfc8e87cf3be44d56a309199dca57b7bde04b3d30f8a0580d957c980f297a9a37ed4de4f88e89b258, 888b708b9404ca513ee127895ecd3fe86d97cabc301fe259fe51bbbf1090fede0fd1c52df091bc01b213c6a030a9325b + +g_scalar = 41 +r = b84c3a6a5fd4266f8b0350b2650b22534597ec8abdd5f002cf9edc15edb63c80becda43b0d1d279f8e469454839b9679, ea6f2528a55bb1c9a2866c24c8f9f08719763d6d889d66ddab784b2cde2bc266b6a487833ad995d30e16d83d30fc79f9 + +g_scalar = 42 +r = 3418c841ef19aa6cab34164b3870beb7acd0361f5decad089983c10a492b899ae22c691d99c0b909b60fb64e52990b5c, b287be9507f55d0492b480eed70d6c3a6fd331a3b0d5aea54ed3fd192a684508a580d040c2c889076cf203a6209b336d + +g_scalar = 43 +r = e462ca48e153035af9af3e4d90909d25556e637e6ef3d8f765d75edaa55d6185eac7dd3b0b634f686efc5cbc8b1772ca, 8322cb8aac794994096a6bf01362c5f95990b746c6ebc0031a7e35ed3f59e4bc104ab1a642785d0652763b7b0a109ed1 + +g_scalar = 44 +r = f6a8130b3a7741e35508c2b38bdb088aee34bd1706035fdea4160def7fe6923a2fd77b5ae6018776af78aa17286ac2fb, d467b0e82fc4663ed9c5d61f09f68f4c29b049577e0fca014277e8927030cc9a59a9e6886b1e723fc02ed662797cc7d4 + +g_scalar = 45 +r = 59d65d78a3f735f42c86ee164fdd3ccad4bcc8b125abfd65cc66c8aa0f19981b5ccb2859a1115e28f8d3df74670c2752, fbcd0100271dbd7a6f2c9e8b73167a320aceee4882ed66bcd13ae4892bd423a457769d6245d3994d035ade287c0c55ce + +g_scalar = 46 +r = 2bd44119aa9079b7d8436f83a2ce4101a4c793741489a3c09c2e8aec0cdf6d91edfdd44e94cf7a32bcef0b6a37548a32, 443df50ac7469f4a5c599917d3a76debc4077657cfcdb6b7cc8ad6658c725a7ce2a2b0996761e5389f0415bd9bff2a34 + +g_scalar = 47 +r = 0b4faa5a537ecd702b123738fe255dda27bbde143508ac5493ba15cfe58d0a92bf5731b3abb11441c42ece45effefcb1, f9a7ea28732ad01cbdb924ee071395662144daf1ce64373a154f285025b3e31986793c4d0801523d6a44d084ddec83c6 + +g_scalar = 48 +r = 0966d45a6517888e2ac250f6058daca83b7debe494eaf32810757e2e3f599369f4445a249b234eff668240536434688c, 312c1d2f36824d3ab010acdc097afa217854f8bcc3f0ad3ac7b43619ab96774699cd9dc9d77437097555cc79e7693b1e + +g_scalar = 49 +r = b89d83e72bf4673cb08db04de8caa7d29029a9252d3731c25b8d230bdf8b9b24a9c2a9b11de8963b43385c32d851a702, 6f65af3b7c98a1620b15740387b8637304e21e0392265a59af9fc87b4f1d216e9f89b6d6e1e8d616a8fd39bfe1f24424 + +g_scalar = 4a +r = ca50bae743ca3e45a0dd8e3cc10c4f6c40d420cb5c36dc4c02ae1f9150f6a5cc7f3bc516e1b24b64126d4cde13dcbd9f, ac30d6dc35b9ab9eb9dd7248bd7085c75aa7e563ca19ed0f2458c9ef13cf22bc35dd6dcf7125d169f074bee9efdd2b40 + +g_scalar = 4b +r = a1e0ae0fe6ca7a154a7ee23df367b5c85d4631b4392f8f665b28cf8991549a96c8cbc40a420ab7ef6b5d4014867303de, fd42d862417d6562d7870042957fe44564e239e3f0402e1d6762ab69430aed71a531c2c450fab9012a655ee1139fa27c + +g_scalar = 4c +r = e677b97c61007b808b8d434e90bfa219a7253817daee85404552fc68956bce558c547a520c8d74e1fb2f775e4230e336, e7871c313937b80f64172dc31901ee2241bba1911ba3dd06a7a69a24e4f855bf96eb8cb3603263f9bfeae6f2f71abc74 + +g_scalar = 4d +r = 63d23607fa5c9816742e060b28a126270ca930b998ce78a327ccb6c0212a6125114a9b40334793a79f2134c12a501a3f, d44b1075302cfd2ece61c3e5572941a6dd03950030c9cfb21500850e49fd3c3d34cd7e2ef34d1d23774dcba4ec1f91dc + +g_scalar = 4e +r = 02781ecd4db639eea1560f9775dae55bd35175d9a506191dd3338ff4b743bdfc47842147688c1ced3c80145ddb9f0b60, 3e795421ae8fbd6cd47a03074e3c8f2c84238e64c4a7a4fbc4870c9dbce600336c62bff32c45eaac993a302d23dce536 + +g_scalar = 4f +r = 23b245a5d53912dab3cc818a7069cb7c491c312dd15d01f0e58901a204ca55712cdac248c3b74585ca11d9d4e9a6c224, 4b9728f81d7ab255941c66c9f30281f9617b301b08632eb3403243e9eeb95ec1a052eb3e3277555230f7838ba6b0b163 + +g_scalar = 50 +r = 1e8568cca446324620fe8c27a715ace6dd2ec6d351fea1dc49066428b121360923e5c6b90e42d1f9194924b4ad0a415d, 530abb420614a6f9b960b5efeecd8ae42413063a1378e68fbc7a903c6484641d98e97f1cd923637700c213bbfcce7e6a + +g_scalar = 51 +r = 0984c2e37cdf344f11238a859f436faff2c3118feaf138afd8cb3560e07b1bfbde45473e86c087853cbdd3cbdb06f682, 9dd7b7609745b87e5de38d63ae2706a701047a5ee5dd278d56add2f018f2637d959a14d4736fa240e1083c17c382584f + +g_scalar = 52 +r = e6db24057f12bea3dfc6d038305bfc7c87e75dfbed69216bd6021049cbfbd0c2e8c09f59ec5cc866783cc5bb88f82a12, 6009a59ebcd30d2869eb7bd2feee7fe5ed736fffa734994fe40d04ef6068512884fa39d54bb007bb6469e146b7a3a2d2 + +g_scalar = 53 +r = a075b16ac03d7805c25baa03520a8926eeb88ca1c7a4aab58487aa0d4a6694eb44cf847ed2f05eb48e61f0bf44e94071, 773dfeda69ce1cf9b72a7cd0563c78e40aa262ba2251bcdacf21a95749e604294e3c13706009643ec357a48a13d970c3 + +g_scalar = 54 +r = 00eb5c040d16b7fcb048b60e740c04a52686cba73934e93664a8bdc7c791db8094b80b8f691e858b3c712c3c6323cd05, 3e5c6ffb3adfb941dc98abd94341fd4987e3e34d8d8145a014e572f21cce9e0d9ffcb850d7c9b5b080c0d8914ddc8276 + +g_scalar = 55 +r = c835025446e64d4db0a08fe1114e6f01d953aaff73256a577bbdcadd053153d82148bbb88207255a935d2cdf9b06762d, 6c218d92c993f213a231839fe2895195c3d455d22caf52f27422a72a0bebe314392aae0271fbe969e7cfbad800dbc157 + +g_scalar = 56 +r = 94dc48fab7e8cfcde61e6c2984cb7e449e30229d0a06f838361494cc0b162b571234181c1dbb4629c7364268d94ab449, 43d6196f8de4857a143c6e832c92df61a32f70e6a0c3e1a57a9910d501c47967a4fe5f5fab20b37f0d7e44f289b66806 + +g_scalar = 57 +r = 1c1b3417a500bb22c4840320387b6b2ef30a928d9a3c3af1df0ec1ba8b80919559424730109677754f11a02e4aa0372e, 9f046faee996fe68bdac81880e7b4db731944175e7559f09dedf2454f984a88f18246d74a7909681690ee6c7bf3266f2 + +g_scalar = 58 +r = 9398236759e97922f158f85541bb965c782840d1edd794907774056232329baff0041e2423786267db52eb03d1db891d, c41a6fd431583d521af2a631ee1859834284651c3e6724b407f97c1df8ba4302a6f5384c2f5ccd104b40ccb8e384778c + +g_scalar = 59 +r = d0d105de164b7361d63dd29d19e0e2b667d3644ac8e55b7b463df30b0096721f18a49fdc4bf163e00c62094b2d71d4ac, 01c7e939b8df37f31d28243540b962d9147701090b4de4c065ccf0512daa253c7861b71b2093cf7ee5865c4e0217188e + +g_scalar = 5a +r = 4347b760969bd7f7b560d7e63dc77e7bb34f09fbd045d31e28bd6aae6e6e8e57672649def3c36ba79b35cdf7a7871029, 9fce477feb7d3671effe5f50722fecaedeeb339129c4724952f2cabe13d6dbeb23ceae28feaced8d2f161a085e5496e5 + +g_scalar = 5b +r = eb0f52348bf223b0e7e7382759dc3eb7b04b977d42d74f5fa4f6e534bbc2618a35c2421b14ae3f635dea409c9cba0858, 47cac703f116c6e20b09b3bd9ab88478cb78e0c863a2cba009d0b3319236343dd012811a3fde2c6d991c51670fc75158 + +g_scalar = 5c +r = 1031cbfcdef715d74efeec75e724f56cb8a88d32c7b6b5a626905570df79b6048f97bc3df1b9f55b91b6e58f1036e450, 3e080b351a206fe25e43c16b90f38d1d3deda082a8a691f9a4d6871d472ad231cee9644726ca94dcaaead60f2dcb2306 + +g_scalar = 5d +r = 813355b3430aa2d72df91689cfd151547a3545de7cfdb00e1c634764b16142cd1b1cc24f5380675eebd14d71e32d80af, c071f38f66bf9d09c71b395490a268e5572a425b71670dcbfe7ca8103cb06698d9e303f7e03abb7916dce2c985f2ca7e + +g_scalar = 5e +r = ed9602dc7912de8d89dabf40cf9eed19f4db0ad3ad1bd1192e2bfb0c25998b5d4259f70ee435a0deb134a04174225251, 843c41be9c6cecdf6010c639db73da1103f4f9dcebcddc087d15f243cdcbcaf878632b48408989ef585b6d18c19f9213 + +g_scalar = 5f +r = b8f42fe52fead1e4257b0bb5ad7f23e10be90befa27d2b794a607b9d0ef989779f74ca169bc0cbb10fc0f2630dbc3c91, bb6d4ba542df286e65364ded55ab93f98c0f64e83bc7b59145cc3f14dd99f9fb505fe7ebfd79617dde78e4315f93b592 + +g_scalar = 60 +r = 8bf3dccc39c18b96cb4aa43c9741eb4226de4c6581998af2ee21597e52ce08f68fd61e31148840d4dc5293851d15bba7, b257fb6c5a4434a4cee0842f5d5680b8f9d19ea0c831254b8545396f305ee4f0507e24057dd87c3966e1d5dad872984e + +g_scalar = 61 +r = 8c081acd170d807f87b1e51bac06961610241ed16fef9d9d8f273e3065278f98c1f0db004a49492c7cd2035d7f5c54e2, 83c6b78ec4f030064c3e2491c4f56964cb47e4ed7889a39ed7d24ef430e05dd3e4eb5512d6865bf4005051ea1c73b598 + +g_scalar = 62 +r = 458ac76d0f40ec396e6880f15c434085ca861b4d97740fcab1bcd42525fc2c50f05e0ddedb37f6ddd2872262b0a9e00d, a77104bcffe021f349c17dbc262820737b96a6edffb612df003c91f554ee9d59d70204dd7088d2da5fd094ff848ae412 + +g_scalar = 63 +r = 648c5f00bb28223ad49cae0982d9d6bdb9b2e6b479c8f8bd1b41177c708ba469bb4f9e0f41aa174e6e3835a9b05f84a1, 03e1698b322d63bd1f7493b176190d98d6f759d8d1a0ea086675138f708247e1fe3096dd81a0a38d04f485765d8cc4a5 + +g_scalar = 64 +r = d884d30b2f03f287419f4d2eab386382b0e595a155fac50e100134e2338c10e0f9d9c4dbaf282e57a350c4fc01834066, edc690c903e2fcb28a8aecc74afdb92910fe926075034f722a4dd35433dac6b48a14723f4922997f4a7e5936f6075163 + +g_scalar = 65 +r = 7e2392bf7bc814db9cdd943547a18710d73b1fad8b8b5cfc73ddcd2c2eccfb1ab539f5fe50c66d708e66c6f69b8adeac, 73872d361702e1de909b656f420ec104a73e1d9af53e80541fef41850ad68693ffeddc211d67c04d914193c06c8f74e8 + +g_scalar = 66 +r = 180783fc39489b2827c614bfddbdd7a57befff1cb90a319f1c0f6241bb2863c829591fcce7274c8803802ee80fa4f860, 60a4d22a26f6a5df4c6c8fc838175105a47fbda3bed5e5259e8d5e0bba3a023a5464baea1b373ba72a89af6579ae9e06 + +g_scalar = 67 +r = 590da88e64671048113a7902e3da530d1ad95a94f23d84fcd3f0d14329c21de1ddcbb10eafd402bdd24cabaa21355d5f, 0c9e71377273dbedd6e2d5a62de40552601bd1c358fad1c397ebbb4ed86f4dfd1a52e4e7e62e6e0bf4a58282925bf0da + +g_scalar = 68 +r = 7117756e39dcddad381f4f06f473127497d1e75fd9f408b53dd4f91683002cf1cfd364cca03bfa6367126ced901410ec, ed306706377f04cfb06434324e2c7f76f5f40731eb8fedc1f3513c3b9c9e5f9ca3b9dd6e230c2f53e206f13b96d88ae7 + +g_scalar = 69 +r = d0ab3e3a99ebd09c022c75441a806542862ef39c275075e3077f30e5dd2c23bec367d6aea6e201bce6e91985e5802845, cc3ae72c6d8973a5cebaf145152f1923d3d57a9547202560372c23a9a91fff8ca5cf364fa9ad136b7d67ef60d99028b8 + +g_scalar = 6a +r = b380f170bff65e1c2633179cfa6a8ac6442e0f1f36905deda01780587776c7fea1295b179d724fdf3d303c72138de192, f1c69141971d1d5bb5a31d6abf10c960069f47e10aed184b1e0b982b4632f0a407c34b8181b17d37af66ced6d590155d + +g_scalar = 6b +r = 77964d793f740b4850994c4960a91622ccd4f456753f40d027c6ec25a0075d4673c21e204f761490d718e8e1f4363f23, 5182a7172afcedf2e1d99f78c7438e3995d6ad45b8659463488374d1a27f3f9f844fc79ae4193d79f4c955e2f647ed02 + +g_scalar = 6c +r = 2a532f0ac16a417882f24a114cb0b8671b23e3f7afef0b5d589f30567bb8dad3d81b74529a67044fa26631ef443c7161, 629a90bf9aee303f7499b3191ed0dde33c58b5e63c40024984d81e8e66d45390a985daa26e4abce9276d170f40383ceb + +g_scalar = 6d +r = 6e3c27bbf13f24033cd18c33b9cff887a911a58af0d93abb5841c5f8a8dcbdc89c7d35833cc1184b0efc2e27b2deb1fa, f4c46c56198c770587e19a4e7f7c756875ad33caf5a1411d2db57fb4f560daf435cdd90b54294c055b391712ea533ae6 + +g_scalar = 6e +r = 26956a5b83e5bd0bfa63d67feafb4dc8bdc1c92475053732ce481ae68d2624c8a4ba394e85d138d693f846d4906ef776, c59ff978106e08bfb775af8769e4422061d7272e75c0564abf9c791c76e941515426eb05ff14810bfac270f270cae3a5 + +g_scalar = 6f +r = a158aabcb9bdef14c3907b518b02667f27552012c727be036744720b50447fd908e0805000765fab8db3b74805be74b8, 09ca776808279da9c64b47b82300d9feccf8e1f94aeb2685a2ff54bc93c326191095bee4e305fb96aaddfa03f49cc56f + +g_scalar = 70 +r = b4a6714762f45dce83f2fd2cd8296a52fb25e37c9710b70b2b5609d5504c81290d20370a5d66455a2e20654839d6e2af, f82bb94445ed204db9a19eb57c182141473e6877caa846883e7ee43a2ec76a1716a71ccc0b6c4c64a818b9bea15c6a6c + +g_scalar = 71 +r = 869fcd17ff86a9864a5bdb048d7fa0c2e9815b09139b7fc5e72215ef852bd27fd2c616d1bbe33572f85b86b79b0bda12, a10b3df255f7944b3d0ed17c31b87757bf7fded9fc31bb676998722ae7b12029b9c007f1d6664d043278521791daf6be + +g_scalar = 72 +r = f80f423bb48af0e8e53bd76b6e4b3bc543c2a97d5743877a559b40a286dcfd8831ec9ab137796cdcebbc6b4cac6a280f, 0cc71a320bc4646e499467386204acd06ca075224dc4a5e8da508de78539d530f4a727682b1c4f45390696a8d488cc7a + +g_scalar = 73 +r = 274c69657350982d84442a4123c50746a97accf432406bfd33e868f326a488269120f7b3a043456daa4e673b34498f56, c0c5bdf6cf5a11db75029e32cf121f03df9a343af6312ec600dc39b8848a5b863ebf1db1ec7ae2413106b7fb95dc9eaa + +g_scalar = 74 +r = a40dbba76a0c98442700a45b812fab5c2e56dde7119ced404060d22edb6e808b6d812dba7e29445309e7d232ccd1c14b, c0ad2701581c66c57d04f5b9c910c402fe084c3f269a8382819b165ec127165cb49514f0e988e2f90a1c7cbe9cb66303 + +g_scalar = 75 +r = f26774cd7823568b517a6bae23acba53ad9e749a9aea738d613e5294fe8579619532b30ea229d070fdcce7a80723559a, 70509ab082b097737a546582bff1585ba6729b8db27984816d99c05f06aef600c6cb3a4beb8c057b940767a1ae53114d + +g_scalar = 76 +r = b8027be64a5eed689d19bd63befa48da4496f5a023133af12541da528e6a2448d1f2d42a406775a028f0ab7a080bfca5, ab9386aa4a3ef7e79966399f963aee20f35524d0b44501ccac13b8149df3fd7307819492dd5cde2308c7d5a296b0684f + +g_scalar = 77 +r = d2fc5c57998b057713167fb8ec9cf4cda4630ba1875fab27cd55e7b421cf9dde59f9078dab73bcc4732595ac7329d8d1, b16536288a40a5cd9a1bb1ac9221b7a3eb9ecabc9109b7e5d677a64899dc8f46b2db96f206cf9ceb761360c15ff51b6f + +g_scalar = 78 +r = f392f9632f3b0feda03a6787986794dbcd411e349499fe4eaf07a03eb8994b40d3259f2810248af41b3ea621f3c6f15a, 539875879a1da4c861bf593f532e0ecc3c967a464c37dda4ccbe6fba3778c83889e73d9a54d7c388f37166f8c08a1237 + +g_scalar = 79 +r = 79cd3f1e3891db8165df3c959329f7e0c29afbd47772778a6c33d5d6ba6744e48c9a16e3a896ab1e5198ba40189dfa8d, 11aeeda1c64d0916473d0df9f8265b7e9c1d39a8b716f21b95507a54ae4d8985f5404f6be9028e62caaa8f0bd784019b + +g_scalar = 7a +r = d109b62984083890da5fddab7e28aceae3da87e136a2812ddfffe0dd4cbeecde89a9a5422a1a0fad53b912fb21a3720b, 14411c67bfb77d57f6b8dd99613a733b02b77ffc1077afc76ce67450eb4d4ce0f0ef6939293f99667744095c728d3ee1 + +g_scalar = 7b +r = 8e4a4f6321dc82a6d4d6fd78550418d24b3d05ee4295440514a9c3ebea80907b46b07d4a2a1018fe151198480c4c0b80, 74c462ed1a798add03babcecc25ccf338a86ab0f498f447b5a82af3e9f30f7e883c6ba0470788c9f1be4d7f7a178b9d9 + +g_scalar = 7c +r = b4bb1133ad9267aa51cb20d25f083167238df4864cb95a00bdb4385fa6f8277692f3dbfda1435507f9e5ed57d99f5989, 49a89c9cf7a12be9b9e99d533cfb098b9544dbb2d4eb6e31045ce25c5e93210c55a4951bc8a66567bf4d13ab4f115bfc + +g_scalar = 7d +r = 03b2dab245cf48ae7ad6ebad036703ac9436a8cf3450356d50ea65aa46f614e270f25677719d6ada9612b8bc3cfb44bb, 8933bff572f35ccb7cd5a74bb0095802551f41bc219187aaecf53641e119ab8edf3fb730ed4f55a421953d2a4117061e + +g_scalar = 7e +r = ee82cb5d4c686f3145940572b53625a29c14d45c4d73654245b97c7577b60ca7135cfd8fd9f0f5f0ee101c5ade346cdf, 07b33602c5e1ecacbdf3a4d1afba7f8cf99d6754e04af855f9732cbb4f41b9c31525eb38bfca96d3aa1136b6b0c47624 + +g_scalar = 7f +r = bbe34e740f395db4a92bb11bd6e0f09d96fde63874231e0feef28f34522c62792aacfa4c569604aff7753246eca101ec, c7e92a61e3948069f3d6832e367b2f949e29e339ad180b0e88d22a44a467c5195698bdbe018ad5aaaa6e59ddbf943cf9 + +g_scalar = 80 +r = a6661cc4c241720a0336aab8777a16d2f313389118eb5195c0dd449e7c1c39840f4fa5eff21af80ae484fd9f8258030f, 239dcab2a277ac5b2657eedda5791ce3b01f1e0434a02a6b5d85a0e4a022c7a4228968656461e382678db970a7efacd0 + +g_scalar = 020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 4ee443f91860144e0b7f54eb7e4cf44aa177ad14077777efcdc4753ba05068eacfc4718769f60e03c84f917203bdf6d6, ecff7dd78d65f38ac5bd6cde7b2c6d8ebc4f93f4a0c7614aebc958fab8cdb6ce511137d7436c1b541279ed4d42bb6a93 + +g_scalar = 040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = bab3aa8c60a8a7a71cd9c342e31644be358bbd6e8948b6e231811365ee61bc954043079cd23ad193ffec6674f65de0f5, 813054feed0991144eb2e364b2aee6d7c96a040173750d6e8957c03b8517ae8af7d0b0414439990ce065519fa375beb6 + +g_scalar = 060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 304eaea00e786d5f4d6a091dfab87b368618aa02c421c69415aaed42cca2f15037ba0db6f0f49278ffe3104b684456b1, 57580c615f46086e7f7fca496dcf60205928791809de860f6094823b7a70d421f57e3a19ad387a8d0be977472c114074 + +g_scalar = 080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = bd6066681a87cd4a06737e54f91d813ef972804fbd39a2bc6be6abe3b91f14827be330a822fbbe61bb39a17a7c34f095, 5d0bc923f9671d8a9d7f416d067e2c198853cdf6ac0511b07a93aedfa58af042b8206a8134afd68fbf88b2e5f538d56e + +g_scalar = 0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = f20e5b8a6c7e9f94c3bf31d408595dea5caacb6256583c442822598ac5d6878a19eda013c543171e9468777a2b389b27, d0afdf5b9d883c58b8c0d1352cbdaf23481a5a2f7cdc0d7c2bd47584bd688e0173ae5d0d2939aa75254897370ba8a1c8 + +g_scalar = 0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = dc74d638c785f1439114cdd012def474f016adf1c094b38cbf75bb57da4d6ac4f60262b5dbbb9e4cf3b6fd79dd3532a7, 5b843830271041ee8c601615cb08f34f381dfc0c636ea6b6552685b79ddee1f51f141878cbcd0d4cdea060d6a8d90bbb + +g_scalar = 0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 7b81ecddcfc2ca46b9e0718a467f042b49a6481891dc89ff535ee486e03c0851ae3ecda2761b94ba2d268da9b28bdac2, 89104b6e85bbff54b98c3dc02b382474382e3fee338270c7e4dbf739c7625e9bd44a2420aebbab8f3ae95ed0c166648d + +g_scalar = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = a24c76d1da73b71a2ce33c2eee858bc3f02750715adf71d715f1ddc63eb317f94f1d082ed0e418512e7d0a16204be028, 6cad67cc0a4582e182cfaac2a2ea7b24d11122a1a47019739f5bf5a67502de64efcf170505cf96129ef6a70a6c70c483 + +g_scalar = 120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = d061fcb5f69a732f7c30fc84cca23e9d1671eeea9772efc6276d435bd2141b0ade8b59ae0034465b3055ed97444bde46, 3fb7d83ca8bb65857e9a06f182c8cf961078a2a0431e5293f3053a22002f5f90cec08d256e800eda8fc734fb6f5b4f20 + +g_scalar = 140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 3ec851d706c4d48507b3e8b9191a320efce43e873cbb2b3faa299008a84ace074399615939ffcb3b139d9fef6bfc08e4, 4c71b7aa4df8a1b2ccb178a0b29be48cdd6f8b5134f6613758b79d01c439ab23b6a5dcb213c31d5c03d8a672a4bb8477 + +g_scalar = 160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 0c80134604501d21436c61161861628a33b080bbc3350983e151f53b35fce45855b20bc8b9ca1f6d3d7718adaf4b5201, ec4885df66cf4d6d8a2448a43cd92f7582229794b6cc154c6976b0bcfb7c8e36d3962457332d7fc38597180f63cefa64 + +g_scalar = 180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = b82c99d2e7c3018092587306f37f0bed46d4729f1771c5d3f05086ec827e6cf877253434ae2c30f292bf8c4508359896, a7a413318961204ecfed795f2736bce61a1ad3eea5d782045c583347165c238c7fa984be994ddaf5ee0141dcb1684841 + +g_scalar = 1a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = e9ba9558a68b98f9bd1e67afadc744e38aa99096770fda49bc4bcd77827b62965a01e68261e78db2d859799609f11ae9, 008e70995c29ccb22189ee16407df414d5b2734288f2a5c00483e97c5cecb4b5689baec35f0d88b25c9d3225ca4c3082 + +g_scalar = 1c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 2f6fb08031e6e76933cf684789a9d8aee4b51dd0c9f579443a5902cee85717c53aace28e3573ecf687451ca71400851d, 5ef2562d0c8012a4b8c457c3bc17d1fca2c932c9a2098f4684d76151965109ab2d73fef4e78096384bf3da323b78dad1 + +g_scalar = 1e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 79512b8991d197c27b814ed800fe704761c1b06eee7c1e8878b310ee8b5624461fad39ee9819618481657860b1637988, 5a3de830cc8f5386617e5957c5ed0a036f1e2e87d76bc70004873d713a22660b174b640c477bb5af60433526dae6f367 + +g_scalar = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 4ebd334b35f68229c85eb23d57d002931fad8b304521d7e612449c4fbe35109c72913696e37f500696a1e74f51e4de5e, aed4dbde0ef567dc72a6af75bbba88c0eaab81be3a1c866b067b0456757cd570c2b4da6e5463de2e7c5b86682df5acf1 + +g_scalar = 220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = c51c0559814f7d9f39d71b35a50c71074a2d6ca29d6b6d55e462100285a8942994ee3cc9bc3e8cc1ef3a7281fad592da, 7bbce68c1760111324e69af34577cf0c4a034b36f131cc26ee5a08fa45c69c446885625d46719d58a883c21a5339bcde + +g_scalar = 240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 381e5b521d3f2ddd9386a35d4868dbb2031febb3374661eaaed46bbc35052bd18fb9294a8cf4e306085e33cd9273818a, 8dc0511f267d5c14042707ffa7443354bae262ae490c1969f446dfa92b9dacbcb0fc99f49dc95af1a938a3a5179617ed + +g_scalar = 260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 0dc856f4656e00edffe544b3f3263dfa315acfccee43b8b5e10e7ed2dae76c71a9f177e1273679c8fc9aea79a04464ab, 8c225452496c1d6d54cbbd4056a4924725cfc139b1fe79ec5554a1ebe10252a4f0c735fb63a36ab88cd1ac907cfad555 + +g_scalar = 280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = b4315ab11afe8540cf6ba7db0f63dc797ad61b8ca57dbcbc1f719f7036fb5a4ed86e85a483e43c268f0e1908fac2674d, c158a2710b6dbd459b70bc8c60d2a62455867b5645149689ce98589b9eab87def51969ef8838a51d0448e852425c4df3 + +g_scalar = 2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 7c18a7a8fa5753e85b6fd841f76a7b01cf6220d49d0216138213e04ad04e93359c03aa457c714b9ac4645ddfc70e9172, 30528343eb43d78d4a8b8cbf5174f2929c3cf0cac7402d75b75ebc0c35720ce2f197059e22168ffdd8747f67b6e9d715 + +g_scalar = 2c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 0005bca678d1c0ec1a7c4af600d31e7ff4a4f3afab047cdb8ce2db1f4645152c64ba3bc73d501e010b262f808f1915f2, f7468e8a92d281c71494c6050dc3c22c105b9dd2fc657b724fa387e5fccb58f5a299b1002ea9abdff5ed135f6fe5ebb0 + +g_scalar = 2e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 8f21250473e722c5d76624e1c9fe92200eb5e4ff0b57513b30bb969b7a4289a53dc876ac1ac8a2fc9d420780b42108d0, d07bda4ec5c1a49a8ee95aaec496d9c8e643e936e9ef5a002a6ab465048c03d103c089de722b382dece006c9e640a463 + +g_scalar = 300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = af51c5bbf42e0e7c92f031be99275c32ce5ab665d8d544e60b06aff65c27f5f6264a09f3f9288555597a26ffb4dc8600, 5adb28dd9a2acc9bb8c8a6df334d4f57fcd999a86e2ccad9e73fd299f93fb7dc583fba6a8473543a5bb28b061e37b36d + +g_scalar = 320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = f2038e9fe8e9ad7b08d7d0b167b00a8b732a3b217f4e0b07fa70e3732c9139e3c6dcbc31b570e7e381eedabc8f38b7cb, 17f1e19d8f8d4f1ae3a56e099e87e8a5a3933d71e9581abf1cc21ab87f56595e01b54b247251e090c30dd7d38fcbe329 + +g_scalar = 340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 308b37a8d48b9574d1ef46340be2d8415267ded09aa9a5c005037f26de2f444ac6d97d37e7a97f33c760823646dd14f3, f99e952f24f8bd3b126505999bff252f71bfb8bc0b80f3bb2d8adde62c39c75a1d5169d938b7c1ef102f7878487bad5b + +g_scalar = 360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 4ab1773e6c85c123d67aed02d15b1f9de20b10f1f1021adf76cbc49717204f9387590cedf4db6d03c3db1f37120b62d4, 3255a34b29d1067d2cc2f92027d52c47d442a634f9ac58d3dd42c53bc0459adfe2d7f9695073039a5c4e64b578618661 + +g_scalar = 380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = e9ecf6ce198c99f00f6c5993c82e2013e2f87d5e2973be1d4200e00670744f159fc75c0aec6afe4324496a8b7a8a6d47, 8f02df83bcfcb9304f24ba23f3d93d73e4273a124bcffc618e962ffbd0fbb134bef4b8c8325d1d93cbdf72058b37d828 + +g_scalar = 3a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 4a7788de2d65774a2c8a2246a3e93b3391e674f5503557f209fd4dea45f979bba7f9f7519579f6d40c595629484cba20, 892fb605ef305ffae4751a325d1088af129a351bedd41f381d7f2c58f5f882beae702203863b049a9594c59414690f4a + +g_scalar = 3c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 30568303868326be1f28862ef23931d5623d44b9e4a0bb425bdd4382a7b62effca4ca7cd5a03c014985c8f4b0614348a, 6d990c16f6f5c9a42f50395d155eae927b32249baf3f0dbb62b74879b1e70a9af4dc02330ac4a153850d2a0d82e76f04 + +g_scalar = 3e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 37eea04d226c0de31df6b241f5ad41bb711e5b378c68c6d120f84bcbc82761b390c700aaa28b9162a408aa1b48819870, 09145c9f5e82ee78456f2ff137a46fe0c8f8bb0822ed1ddc6b1c960e7130079f628ad18ef2cd3f99c2b06d8b44c41c2b + +g_scalar = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 7fcf0ecc91251b6e64f27976d5d7412b1a6ea51a2a883b7f340c8ee3ba4a3301ecf10abc47bb619e3afdee277d221ab6, 89325d7a7f96e023d373931e8e7d712bf08398d5d542676dde3b73d6ad61b2cb38e48b96e2e13e585f3f8f41365b18b7 + +g_scalar = 420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 7e3e4b94ddaca7970a21251f7cc002a4391e974f262a7c900fa492995a642da315257c37b24074d0000d342aee928391, 53b272171804202c5c1d316ad8ab1a429fdffc17c7f4d0572b214816ad88cd68bbdeef04e8c08e47c80c4510743e1114 + +g_scalar = 440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 63102e93ff029787e2a938890afc827f951f92186359cf06536c999ce295c45100614bf206b7e166eb2e48c10bf4e94d, e6aa9eabae2ae9e3487ce890e10ee83736b7e9711cc2f3b4c0934ca6c86043047354df74928742bfab297c7d2ac89645 + +g_scalar = 460000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 5508188555d35077eab1751b07c4cf3c9cd6be7b2601743ac8eeeb6ad5b89ac7e6a752c4783e3da875218ff22509a1df, 807893527f1ce4ef7f53fe8406c6a5ce4cb21d96e11e734910ca143b1285e27ff265d0abf1e40048e315baa104764080 + +g_scalar = 480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 3838356a53264b8a5239b5c4109797d6ae7b59c5fbe10a477fd7fd8eb3c2eff77db868f3a950dfa26e7a578340517347, 25ca45046cdbe5fede6af0ff83282fbd3df64ef5a06f3cf3fe1aad846241a50a67c86ef46958fa2c8df8454c320a8c5a + +g_scalar = 4a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = f27d64f3900000b28c140f1444bee3bf74ae1bb86f57ac995957f390ab2f9f38b6c4ad7e6725e6bcf7d0024dbbf692e0, 36c1f5a7f9f706f442cdc68447ffa0369a7b2a986150dfa43b5de0af2e50ca8f1c6441f777dcc42105df256b72fdc686 + +g_scalar = 4c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 1969eca437dd1341ca98c4364aaf2f73c0c88af6aec23cd24bea31ad623e7e55101f055acb1b1cd5a319340d6e6c0deb, c0213ec56844da05a7e5670079911cf9c3d1069474f262e9199ec0e93d6ea9c4afdc99532eaf5b086b03989f97866dc3 + +g_scalar = 4e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 2117cae94f663d08e5bd0119ed5225f74fed82fbb2d8dbdf78482d89dae531a4ad937387f2e050ade0732f6de3a1e252, 72b9ff99a67a5bac399ae62b881be3145d5e71b8e9b5b6a3296b1335bf341f2c589e22809e86c55a99b47ee3ea1f9b78 + +g_scalar = 500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = b942add81ef8465b860578cf416ccf69f307823e718c8aa3f9fbce33a82d37361c77a3054f1e0d095adf3d9a111792b9, cc7a9ceb854fe9da6bf6694891a626321f521c2dcbf3ccb8f99b9a8dc09da90be6792eefb01528a89ee0cf97cd9472e1 + +g_scalar = 520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 5f3fe3e3209d9fc047f02c4abc4c0e4ed15761fea5957703efaa521a05781b37a23f342d40f5ab43c72957c2b56c62ad, 8ea834b98cbc794316670382932d4183c743947400bf71245577e542aeac3cb5fcab0ca1117138ab1c1598df561b137b + +g_scalar = 540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 84422ba89c2d7eb037b11137f15f0cd229b0341dafb73ad113fe0588ba057fe284c5d6a71a50c560fc9660a3c8808373, c88f0cf685c54d31535e8540116e2db870cdeb0c9f242a42908895a9e02d77fcd7a8303f08b37a840b595ac52554ef7f + +g_scalar = 560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = d2fcedcd2a1986bab43adf697bfedda152ae359080ec87ec825104bc4ec82e0f6dbc484f2356b6a44dbfa5831af13e99, ad9e025b3e6da3e05f33f11ebbe4c690f088dfdeac7b2f9ce25dcfaec32d5809f74d9267c6fe4f5734951159045ad785 + +g_scalar = 580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 0c5be4a1ab204fb0ab8802bab8da8e68be6bd7b92c078aa8716574c5e9ae3da03d081c0d7f15c9e3f534f145e2290eba, ab2bc89575ba5c996b532891e6550d3c855367c4924ec2d29c6e2ce0bb5cd2fd3929d0d78fc9b7a5ad25c5ee0d3f12b3 + +g_scalar = 5a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 58ec20b5fa1aa22b08285f05e94af0d0e9245a047205187c5d74a59ee05637183b0b3ca6276cf8c41cecc6cd72c1dbda, b0e13fd36ad9560fb749ceaad9da4802cc74af38ff812ae36757a5c06d40592d0bfefe8d9b5c84757d367150c1220085 + +g_scalar = 5c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 71d663c80482a61b9e9c222607f4b670c77375da47644b079d86bcac8b5c43fccfa41da6f89ce836b56b035e2a0349ad, 46115292ae0c97d38a2bd7fed4dd03de9b463559631b985009e0cb2a7ca7548bf1cedf7e48832b5bb423e739ef237431 + +g_scalar = 5e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 1ddaad3e57a8a6ce086cf9d3c08d007d4980b91eae21ee2813a6eab45a5f233af7bd1613d7e0ea774be55e045320c643, c16aaed957e5a62c33587da0f82147cb54941191f098f87980dda6bc17c4e9dc4da655da00cc3d4107d0c19db8c6b532 + +g_scalar = 600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 5016c8533573235fb1fae2fbf363100ac12df68cce52defb1004254501c4e17190cab0eb9d74e3f6e44e3f864b3759cf, c1da40d31f5867b241c7611ff54e48765abfa961308772e9324985835a4e118e8a20d42317f84ef28d4deb661d922e9b + +g_scalar = 620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 976a426e7e387e5c86346adfc17b570aa537fb6be3a14ebf219a097cca4d32e7607683d6d30481954490d42249f884ab, 622cc08030b6aefc8bf4b8321496b6541a6d9ccb5e20adea3407694184546e81f870516b4b009441cdd13f0664fa241b + +g_scalar = 640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 972877d5c351148008e952e365e5ebabea435fa0e9ceaf442a773270df98069e7dea27ea124874854df02a7d3088aebc, 7d5f05a3faa1be224b72a1e6193547517d9878e811c89153bbb792e2c3225f20e50abe68b8c7c796ef5685f859a04cd0 + +g_scalar = 660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 9c3eb2bcc338e60ca5e4a81611e943ceea32131487917fb3ff4d80e7182e7578122d7b16cd1909a4a9c5286d78c8e4f7, 3a8745f4519dcddaf346b75a9538fb01980f87c8f605c9584c9ef41d9b15d60be1c92fb8b5217ea220e58adc72476919 + +g_scalar = 680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 762b3406c6577d810accb4a7922d3b253a998cdcc8995cace659cbd6ace07e138540213ea7a3f2f761dd7692f27eed54, c27d13df98b867b536815de2c724284ab6d72f7ce6490808080a522673b98cd37f78e02d8cc9bc5fa09db4f57e043740 + +g_scalar = 6a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 8df49d947bc531c51cc8fa418508b201bd7dd40b7a34781499b5020891035d21e8d66a73fbc1180d5f29d3aaa7d9e25d, 8db14a1dba6f378f3cebe7e079393df73fb41991aebc0e3b56c448174ae09d13854dba16f2f6917f572cc562f0c8665e + +g_scalar = 6c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 490753350b7e4afcb041ec67cf575de55f49ef880115b9a54771281390833f18b5e8876c499a1455bfeffd5356adb6e4, 868d06baff60e943fdf76899c1e4f8b433ee16e27993eed6a84431a6e6ed51989dbb181edafad9a5ad4dc4a15f0b9f24 + +g_scalar = 6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = d93bd14b4b11ac38c8de9fdf7506b004184b98d7ebbb8c4dc3c2cba3492a416a313c0cbcbb713c2501b7f6985f7f481b, e8ffeec6163e34a582b65a57276cefd26331de3919b3882df3a5bacc08ece1b892bdd75b9f6e7821471119db51bb7d4b + +g_scalar = 700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = ada548c3b46f1e376b9fd3f7f19df4bc7f7009d735b193cfd8e497fff172c7cfa80a8c0d2771235b46303171491ccb92, fedd3a7011a6a30f33803a10b77840dc29a6d5d779b8f5cc2a121042539eab95ef2245d6ae78ef9987c6eaa9c7a20270 + +g_scalar = 720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 2d56966a409303d605de72b7f70a3994bbaeed33041120a96122ec75d132b62c870346945bf287ec264b3d9d11eeb9e1, 42b1ee108ec7069ffcc4a5271566115518cceb0e66f4debfa90f02531e45559aaa2c0e009a84256bb5d2a629e73a0b47 + +g_scalar = 740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 24ad6b0ca28c80673f16d1ed3b5fe8d68ec00d9fc04d8cd5937a15f52a67b12bc1413da46682c7795d782a0778664144, dcd9e4e8120b38813770e54d16bd75b2d686eb7239384e157d863f5b2ac0c23862c4c2beab2fa785dd1eecc532732b19 + +g_scalar = 760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 326448a0597de5b3e6361a339e0e1c54fc3e322c7496d0809030804ef95021bcd40b4963d24a2b6eb9f1b4ae3e29ef63, 0252a9b99e9793e560cbc4f2287857e213731c2735ba183196af3f106cc7ef543613bcad0c6218776b95c41a2c74527e + +g_scalar = 780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 20b358444182aa555d43a4a6191cc808919081881990c13c49b13eb95acc557287bc4d75b1baaa7ce3052838df5147e1, 14101ec7326c4d3885b6c505470fbe135db7d06920f68ec58d130b3900c5ae9ec6e6e061722e91e770d49a4a670b1fd1 + +g_scalar = 7a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = f04df323cee02f61cd5a7a956b1f77beee55d9e0594c44ac013ec26cee34c1dc43011b315c10da9bcbd0f599c8e64d24, c4409631dc14adb19dfe638a11b9f3e7cf019abdd3531546a029482b423ca901b3c436c152ec76c9cd4026d1d96e851a + +g_scalar = 7c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 010865380377ba8f43a195425fed884fd7323e01a856ae6b6c8e22676e97f5af75921e487576c3ddeef03450e10e8018, 210d6016e25a2073ddf723ec0a11fb830c8d328bdd918524ae098b7f9e67bed0c6fce58bf0fd42817cdbd06ac82a8f67 + +g_scalar = 7e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = eebb047e6d7c9413a7235359a60a123952d9264a3ba048ebbfb45e7b89486d643ee8c19f0b66d8180150d085890f1e7a, 7ae63ab9d214faedcd833fa6420136d7dda482d4320786f171e24d58264265e0cc43f5763d6f21692afe72ea99eff33e + +g_scalar = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 60ad991e4e4eac458e5c12139ee4718f77b9b6dd6816b0099aca885c1a0d58e235414174e52691403c90a59f85adde98, 5e9bfc5c290405122e7b49c76f7a882f5f99092d42a87e32cba1ffc75eaf3eaaacbf4eb25bc5fd2ac00c35694d71f624 + +g_scalar = 820000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 1f1b6cc936184c1f444217e60b4b3953db3e9066d9772914d5968b29ac900f4c39dd0be4c1125a63782903630deecb3f, 95f412236ee17cb99ca45b884179b279df74bc7c4b15781d9c94aca42b2ad238d4d435352c5b300f016170c37e873b7a + +g_scalar = 840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 9db0ee0b907f2cfdf5b944c9040b7ad4d4447c1b20eefa54e8804ab3329a0b9a9713a5e04894f486a31d3524b295958d, 1e7a7fca9b447bd44f952109f1172bcd2b47ca0622d4deefe0663b5ab29c3cff3137241ea83517640b1a1f3a5384a999 + +g_scalar = 860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 2f6bdb104cbbe283f9c8e74d26b173fb5cd20671daeb6361192707699fd1661b8ad7721233e84ecf88f2de40a7b3fe4a, 247805475c8c8aa5a9c90bdfa1886bae3417f527a3ff3a510c10b90efbd02188b3df0b25e67e3852f8c33386d8796519 + +g_scalar = 880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 6847c20de211c90eed3a6508ea56be90d9b625dcf9ce0cde6459720f8eeefff520d0c4740dcd66f6c9898355ecf2a473, 6c7c065add370f7749cedc634470e754cac8f277d145b8313155874750209b4d9222eab23023d16e36d86bed71a73cee + +g_scalar = 8a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = b1516b4697bf25d1c1c0468307a8949bdf7187596ece704b26adc1564300df17ec96212c96174bf6bb114c0747f74319, dcb074825d92d8f2c13d11c350c7aed054be86810945e3b8c23ea6101f426a499d93d21a6664d9609d83fa5148b60820 + +g_scalar = 8c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 02a37213fac8a477162aaad842f412c5aff5505f1070737afb8a08285bb5202d1ff2549ec4c9347646a95735f8171804, d7aa1d2378d82f9aa2006f207e6ee867e657e8c782d04913373a9039db1e5a409be6a0b29fc6678705ff9238932f08e2 + +g_scalar = 8e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 80e70362a61f6b8e5b9d91d31e8f6424ebba130bb3663e1b6a9f149f55dcae398360743ca827378dfa8cd197722395eb, 0e1d6bd572a38c9c5f50d1af56f0674602d7f0008e445809a7e00178e83b6101d09f7ae147cd387c0f569fe2df0d96c1 + +g_scalar = 900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 3a34819d7eceec8835d9fafccf45b75b22bbd01853e14183e09f04e6223a0ce868ff316015c6f7f5fa070e22142403d1, 335c8d36b7784e7c19e12d0565e800aa8e77d9f05f7edc6a0c8005659eb2a79a431036d5841d1505d9cf7568d33262d2 + +g_scalar = 920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = e70634860b99a9811d923a955e2994097a0a8df4a85fab6ec4a354244dc0e8bcd1b7191b3cfdbab92ca47e98ac1b85fd, 41cf4463651dd58c61df35a2872fb3389054ff7cf92744f7ce7b2c34274700c5382c5952a9ddc0372d6a573bc4066501 + +g_scalar = 940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = a6e5585e996d20338e857069e462cfa8f60ce5d991f1d4875c240cefa3ef520288322d8bc225ce6edcac39d87c1d9f4d, 1bb28be140089be5f8cb9c26a5325b8c74b14432148922915343a0a2a3231eeccd90c140f907ebf0709675a556281e6a + +g_scalar = 960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 0a14f23eb0470188da64bf1e5628f2863ba37c232de1294438d28dcfa9312a5e224f404933c384e47b7bd39f39e00e98, c42dc328091678ee839334b1f7b077cd7f81c9f49d1206a69ce1716ab4aaec2b9c8dbe79044c3f2b2546b252c1e279ef + +g_scalar = 980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 6189f5e41a991ea2da296dacfe7d778f186d3d934f810d8fbac785aeac0939e3c7c9e5f1d27d1f312bb6e7ec3092d0b2, 6f670479e22efa03720cd3908d1363fda447a31ed83044a609d718487196dfa804aaf59a88a4dcca098f794e9634363e + +g_scalar = 9a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 1dcb9da2e49ff45c55a12128a50853d180f745e27f7209ce78b59db06f2c572163a394e1404b5b23cbb76478b52110e1, 2fb48e2c66241e371d10aeb29d2f0d8c854417e329d324feb5951f413db491f31c2d9362850112c8ca76464c896fba5f + +g_scalar = 9c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 9bace7adf8a7c0bacccb784f77921ca4d56ec8f223a1656e16ddefa50589fd01f3dc472a8e2c58e9aa452e81cdf60f9a, 5a446de871ba27a5c828fcc77a21add6033647c392a209513599817883ce8674a70c0579c34e7cb5c94ef3ef51f052e2 + +g_scalar = 9e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 7a51381b1772fc22ca98304759d16a8b665870899d73fb3bfb3339ee5b1cd14117a70200b441bfd0f943b61f038af8d1, 69177896bbe85f1969ae68d02e13af263f388dd5b8607a50b75759eb4663d9a45d1ad5200cc384a85231f7e02c6dd801 + +g_scalar = a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 282358aa2ff95cfe76ed6fe718bd01b79f67567fe0a7ad0b990e3425ca7b8369b69e308bf8ae956575cba9d530a3ada1, 54d845b93d962c14b89f3ae81dcd916454f8664c26330782969bb272b6a7b8f989d1533fccd67c8128d2ea41410f8841 + +g_scalar = a20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 6d7604cffe8d69d781c5409e908e92f8e7dd1034ac8f1eb78fee1bd6e78c1828a32243ccb026239500cce541ad148e09, 904505603fc9a558c5f565033265f4f50922057669559f2d83dc4cd6bb887bd193403956a36123ec210830de2eb271bc + +g_scalar = a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 30369ea0ee12356a6aed101a5295e728e964dc9c9aabc3fc885253779336b2b939b1a9c697b17ee608ba5b61fde4ca03, aca079354468e4199e528623e854d7cfd16c7a85a1a5e5043b2f7aab5590750c3a769ef0df9f47c0e081e022c8e80e5e + +g_scalar = a60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 6f261a720ebf3f5d30519b089ab91b5eea5b069985bbf511bd196739a548a22078cf85c78720ea377868bbc67f777fd8, f6f0e6c179d0e8c66d82e4b6a56ba80bdc94cf7759426145238dd0a4ee913d94d5c64a5e614695e2776b7343033e612e + +g_scalar = a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 33a95de702001e8cafbf32372a69ad0d093c3dc2769de89117779f5e7bbc58fef517c925b79aa0ebee521c0af93098bf, f259795816fa1b16e5cd9c39cab3387104f0bb334fca052ff1c069251604a646b379a3f425bc7d9a3b30afc73410a2b0 + +g_scalar = aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 35edc49ca54239bd0adc36938b9046147f82050a305601877ee84419f5dfa296664ca68b46f5d9044033ece91c1f582e, ee2fe77309f54b6071c9dd5cb2a538e9b04cb2d370c923cfb180f8055004fd5934513baccad673e88e0ca3ac10854021 + +g_scalar = ac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = a1cae78c7b491c4d752d98f6018d7c6455d40c1b2eb7f0fd55f7680599440d4bb16ca18bd8e94e49291d65c801189d9a, 7f87b4412a9a02720deaa373e92656f4583b336aa5683ef8b8f9498dfaa9451fbb48956a3ceecd27898fc8c78f66b8d3 + +g_scalar = ae0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 3c9e1bb5534739e879ab7a5bc5b76b4fbe21ff8d02a855fc4fd1fd2cde268c8c809a6b6cc5a362e31ee1b6033b28bcbd, 9f8101706c09daffbc05ccc588e874af045f5abf2690cf6c3ac1c2d3f29402a2c2a2b45d85a211d06ba4d9a7a58bbd09 + +g_scalar = b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = f1d5b458dc7dd67fd6f1b8df647cad2f805b4048e097047f15b28ac7b871c3f3ee702764a35d24ea8b2fc4e96484fd40, 5f6ec65d882935e193ad20e74cbebf1a283ed89d28f284f4af14751e95148b55f6185ebe21274faf324c529c25148803 + +g_scalar = b20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = fce39cd1e1a9d1708bc1da4093b5b983b727f6a0f7728c1ae7f34f712b796613950ef6a86c660602cc862ba801631411, bf09816bd0a0afef4270cd9a7eec7bbb142fefb1e4319697c10e9f0a2c74217759ba530e18d34abbf19e723e9493357a + +g_scalar = b40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = f08cbfe771c4d06186628102bdf579e6675f12cca4fa74a94ebfbda7cf3dab12907e4f38199c51764b0c7d0c69c284cb, 83c09192eb103fe01c071597924baeb18d978a8110d1e8817cad28c370c0b7bfb6d0d48b4c7279159dde390e03bc1cb9 + +g_scalar = b60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 0e1f061a92f572f08000fb5849e023a3884a0bfdef058b6faa278acb01a177dc1c919775c21b9dde3169bc090cc65977, 189092064329b28b4e5917c682138a439f26e75ef93913dc44f8c04af09a402421e6a59d820d7e6d2cc96f2fdbe0247f + +g_scalar = b80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = e4c35c2244ab2fcc5bd45adcdc6938b91588c4712a3f012d38a1ec5ce16b874de239b1d404b6fc45494dbd2665925506, 56eb022838caa90104616318263ea256caf679765bb0fddf3a0e55c7982a492892a9c3b2144fd3ee87cbd9ff887108a2 + +g_scalar = ba0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 2d2542568fd9f423f6d41b65310fafd4a5591868498f151f764ab40ace8713c9023872c88f2d14ff40fd181041ad343d, aa4016646be126ec39dbfed5502f7fcf94945e512d32ca7a20bda998e6d6f6e5538bb2f6e19b255d35a163172fa4ee80 + +g_scalar = bc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = fd96bd168940c7665927968beb0f6ca5717c302a766b69dad2d9da967e155bd5323bd638835a4edf2f7de141a48da000, d35a825190e43169a836a6ad53b7e6e988f31e162314c0ce7e639523a3d57aa84ba9cd8bd870954ff89f7539a334fd71 + +g_scalar = be0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = eb7c7b187673dfc835238e9ac5d8b3ccc2493d3db86726814381646777c6b7eab211af35bed7aea0a101c2f02838469f, 8a072506b9ede54cf5d581b34cfff8097502808145cd4df20fa690f0143b29885304cd1869ee2b769a08446474ea8788 + +g_scalar = c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 024cdcfd74a513932dcc51180f94f4d767ef024eb3dbe034f4ac2b677dec20d2f9fa4483d8b4d6bcb3984b176c0f3509, 053113221defbe00a0c0fe6040411c15eccb0521817bc8d1b00ce5567062cb0bffc18f81d3a7414ff1c0fead20e7abcb + +g_scalar = c20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 217e60f334f621e52a4d3ec6d979444c99758103696866db3ee3d96da9de154c65382a2312055ff2a6730cb7311cc98a, 2acf783576e3dd6ef3d9c0864cd087f3366b49a4ac4b2b6c5e9c62063177abd6d7856a5d5d3a2fbfe62886616bc56f0c + +g_scalar = c40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = ab3ae700d1a378c565bd03584590bf03605e7a32d2e2bcf1d69b7c83177305ff6f206002d878a97a74faca8a6af7e742, 7708617f1989244e1e704c3bd7924df112c6d168e67756b182a18f03492b01d483625ae0a7c451c6037e79028a929b0d + +g_scalar = c60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = ed111a7a3bd0c935557d173489ac563e8476e71696aae3352dbb2f572373797325d250419c736f9a583dccc1918722ca, 58d3857219e15bd18b377061a65f4b1c2dc9e0349fb5102e473a13397c60ed02ea17b3b814dd3ec3a47ccef10b0615f1 + +g_scalar = c80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = d363e435d58d42d2d9f3982e3ec5f7ff162cf27f36ba3ceb1ceee947c3f392126a55edf1c354f4334c98c61d097bde48, 0a4f9c10525dbccf89d23e8b6de529945010582e923c1acd61d94ed8d7c27fe7d916df56ebfbf51c2ee90d7bad36681d + +g_scalar = ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = bc61bbaba368819180d7ec75226d534da72e9ae08144a60f51e4475e9f97151bc404defedbaf8b42178b590f1c477d9d, 730cd43523c6c257e43c1ebdaefc387258eaff8bc9a218f7f088ec4816bdea361c74b961c5a091ddd01aa30fea2aea81 + +g_scalar = cc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 218e7fb1b71a25a46888444f98a9add79be8a33f67d61b2ed78ecebfec57d967a4af7a2d749862107778fad7e65573e2, 68fefc83f624665a29c25cc3fe3bdeee3a37965f71fe847b23692f85fc6837ca2f8610ad11a52cd9f75a6b795f46323b + +g_scalar = ce0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = bba8c7b11cc64bb5a6581582454dc4f3d92b8ac4d708451051375d6af7acf0bcdad4e4b8dd0ee7526c79a60950a78a78, 9497fb38430bdab3d55200ec8918e0d0587a6ce79d8b271c6459e58b6aad83062af531adaa50ba8b6b8c42c89a52527b + +g_scalar = d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = ced5e4cf2b4313900490c970f5aa2fc4547bd050b48bdd872e0bf749e05b18e763ad235fec1ceb74e222eba4a4dcefe9, 925a8e7c11b85640d8ee724f8d890a9855f7905e50510da6a4ada2305037fce844b72442083b57d407d8270451d2898e + +g_scalar = d20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 5526e694909f969fbc6d93d12b1ecf5da54322ea0b5c08c1d151433074d7b4608b7e7552cfc6aa6e17f7e937cdf7bd50, e8d38ff491dff6592d1f6672746949222745021fbc62869644b0df3d2132566a477480ecaec1966d7195a9a4726c431a + +g_scalar = d40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = f79e2d39b2e8fac1bf3cd96c034d021b15245ac616c11ef494035a1f0c82ab81c749a6a77709a52b8357d8bb460e77b2, 6cfe44c63f488c2e89d0c4c5da7830b316f34bdd553a8e68b2584aabdda9acf2341f9b53b3143bf7387015194b6cf1bd + +g_scalar = d60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 7bd84d4848a7403bb88ee110d4c2aca40e7ca13cdcc93ab719e453d26360d0b1160eeaa784e7e36db3ca02e33c34e954, 77eafee6b4388e98009e51eb2912e1776d2a36102ea95493d118e90b7413e79a631998ddb8d0fdfc2e8d3d031ca838f8 + +g_scalar = d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 058ff1904c89c9a87b6e3e4d1f54ef38a901f2551406ec90b28f476b59a7eb995ea6a57c699397bfee536a26d4bcaa59, b33ea619b01958523e1957812ce0f9693ebe84466964b9ae6181fa1675362f5dfe98793145e142685690fa10fca546cc + +g_scalar = da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = b5f1a6c4605f84ccade63185d292887e6000e8b97de5f75dacdf3c75960857e5a56359b898797f27f6666dbd1e720925, c44f3da9c30ac7611159b5ed472b66acfe60d8144ec4fa790f0977b76c70738cc26cfc824b2f4be14c77f69461c7e0e4 + +g_scalar = dc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 13db3201919c187099c2ff0b948ac53b031fc087255e8c5eab4bb08268cc66781f72c1f8911316f6eef402410ec537ac, 2221798b9f4337d5e08e4213817ea56033a9fe40bd21effe748d2e93d97167e2bdffa226ff7a44cbdec81fd312057a3c + +g_scalar = de0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = cfc013b68f5c17418ca6fcc4789fbee8efe3a068daa3ed3a85ce557932132eca1c048aa58f30fb6a7912ca4e168fecd6, 68c1cbe20070491721f97889d9a0fb29499a28ed6765f23262c2ddb7115a89d837d96dd573be5978d1986f75e6ce6f9b + +g_scalar = e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = f58b321ed1f9bce830bf1ee34f114abc72483dc5b3e1d84f0eed233cc25c696a5e9abf67d640c2a1da828fe556467257, f0d0ced355035432d8afda341fa2f06decf5649dfeef88629da43ceb72a982dddc2f105e1e453229cb26564c97524f33 + +g_scalar = e20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = aaf3726a32ec147e505f5eb8a58e699214f3ee55fc5144da5629e0626bc5035c0a3de8f6666dcfb1695089a73532e60d, 1732ab634996103eea5a145d3af12f79b86e5b4bc6884f242e81ff821a1d8e28f49ce51b7ea1eec7496fef2e71eb7799 + +g_scalar = e40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 7f517c9c01f3f401b21e275d8b991b2903c6831675f0f13991217a6be34fe2e0e4d168e75b0b727bec22bb32205a5301, 8f1fd1bd5716ed9b08647a158d2ab0ba242cb06bbfd24bacb88be15c7cc1367dc5470808504514b1bbe95d19e55e49fa + +g_scalar = e60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 8aed67b865bac360c6dce3bb1fd8ee17442ae6052b0dbd5d807d8c25d5126552b050787598a85112aad13b2f80f89c8f, 5762947321262e1fdcfdd945855bd37a8b89bba354066b5b6859bc5ad6787215a698c82256f8a4889641c91279038efe + +g_scalar = e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 1690687e164c44ba8b5101310dd4e1d4b120589021649255e7d94f4697b97d7c243622f9e8a47507e787054518ba5236, 9d3eaa58c5b0f8e74d2cda1c81cca7deccaddeaf391ad03d2aa11707c463a975fffffee70a684c3d65bb4d8cf100fef5 + +g_scalar = ea0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 152fe43844ecf2464c549c0e5375bafd29a9b8a5787c26f8979564774ff41b268a370b2f4897efbcaf2c49c193eeaaeb, 90ef55d72e7302ed5e5b65408484a45a931392d01e03117874a6973313129d1a10a3f1f5b62aa404b45da2103332ff90 + +g_scalar = ec0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = d4b25ed3883ebf03e1ee7508c3ff73564f4576a12c9c77446bdf53fc46c1f31b3024ce311a7194613d92ecc18f8802df, c7edb5db6c742e1b6960312ff19fa66aeb82b33740ed314336e175265e9693f5376ebbfa11ecefa91dc46052420c3ac9 + +g_scalar = ee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 1a0ab3fe3e1aa3b2da05dfc0faf576dcb6743901254cca1a54fe2ed1821745a31e6d2cc15044f8e3aed505fefec299b5, 5c070feddbad43935b066cdebe027cd079d50a1f256ddbe05e3587f3fa6333404dca34fadee620c74dfdf356b6434dc7 + +g_scalar = f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = edcff8331d6dc79d7cfa71e1cf1cb8b3c11c95a22527c1ade6f0ad9bc0579c3e593f085a6dcf56bf5bfa10cd1ca459ed, 79d53dad0091bc903fb148b8d721d034ed555e37e2606ec054c38b71be3a107bbf620096144e11a0581c4bbe432521c9 + +g_scalar = f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 91d26e18089b6194c58fed0143bfa89695f4f8a7c76e93579b34ffa032e7bad15a5e1b61f59698d9f12d87d33dad94a4, 8e5cfd1643f60ce9edc913822c32d8d857d63f10b73137d07b6bc3fafff00c4321b9d7a0a897a35ac218da26d62bdedf + +g_scalar = f40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 4a95f7f3ad4777a41ee7797f6590d0ecbc2c3b8d7a81382003d42e96afc190c3887071bbcac96dab4b98cb69c5c8a182, df206f19be8f2e7e1b00fb28a2171c8b759fee1c8b53025af9874bf6974c0a8e7f8c6751ad78dab67a36de4e2a8d2736 + +g_scalar = f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 92fc21e8098c5b74dcce4b866dcc347a56485fc5055a1e76d2413d03360766ac3a0699eb49cb60f46fe114183c5d5268, c600f4375b6eb0c0b53e970c73c2308a8a45d99a9028c820b1cafe29b04194d9960ea3a5924cf515e18ee91f68707ae9 + +g_scalar = f80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 0b2d3d2ee01df4e90f17d421a6542ac0bbf2d5477007f2e9840210ee61ff9d1e7734dc91f8fe7a42e6bbcf0bf8ed6302, 633a2ac888531d81eef1c6710b09ffe22dfa176cc44153bbdcfc96ae6e50d8368362f7b1431106b7520e4fbb84f3703f + +g_scalar = fa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 051860f8db9d37b374ddf359c387adeacbea730d7b0b1b3dc9ef099a6d40b18658ec13e188173f1b430f3082d997bb97, 0879ac02fd3f45cb6abb20c30a400fcb8be482395c7d44222798b7f0a1acb1c52dd2fd248977979ad65443bd231491a9 + +g_scalar = fc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 977b4bce597694b4780ec65de871b7928025224f7ad39d9aa441e5035bcf0e19dc504f01d3ce296729262b6d7636a78d, 37e9158235c16a0f6f7f2fc47d31bf61f5da63e0f8f90368b669c1d60c34153a1cff87ac9748b10ee05eaeb87fe3ef11 + +g_scalar = fe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 75c5b10bcac05c018d3e2eea122e7ff2b2f9d05f3cccc6b797a1f8404db70676b7b8f12986a52261b0428d6baa542b1f, 741623d5932bbc56910fe7424a0eaa765b464e18535a5866c6b4571c54a598e1c51a6f08e6edbbcfcd80f0d9b5def90a + +# g_scalar = n - 128 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f3 +r = a6661cc4c241720a0336aab8777a16d2f313389118eb5195c0dd449e7c1c39840f4fa5eff21af80ae484fd9f8258030f, dc62354d5d8853a4d9a811225a86e31c4fe0e1fbcb5fd594a27a5f1b5fdd385add7697999b9e1c7d987246905810532f + +# g_scalar = n - 127 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f4 +r = bbe34e740f395db4a92bb11bd6e0f09d96fde63874231e0feef28f34522c62792aacfa4c569604aff7753246eca101ec, 3816d59e1c6b7f960c297cd1c984d06b61d61cc652e7f4f1772dd5bb5b983ae5a9674240fe752a555591a623406bc306 + +# g_scalar = n - 126 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f5 +r = ee82cb5d4c686f3145940572b53625a29c14d45c4d73654245b97c7577b60ca7135cfd8fd9f0f5f0ee101c5ade346cdf, f84cc9fd3a1e1353420c5b2e50458073066298ab1fb507aa068cd344b0be463beada14c64035692c55eec94a4f3b89db + +# g_scalar = n - 125 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f6 +r = 03b2dab245cf48ae7ad6ebad036703ac9436a8cf3450356d50ea65aa46f614e270f25677719d6ada9612b8bc3cfb44bb, 76cc400a8d0ca334832a58b44ff6a7fdaae0be43de6e7855130ac9be1ee6547020c048ce12b0aa5bde6ac2d6bee8f9e1 + +# g_scalar = n - 124 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f7 +r = b4bb1133ad9267aa51cb20d25f083167238df4864cb95a00bdb4385fa6f8277692f3dbfda1435507f9e5ed57d99f5989, b6576363085ed416461662acc304f6746abb244d2b1491cefba31da3a16cdef2aa5b6ae337599a9840b2ec55b0eea403 + +# g_scalar = n - 123 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f8 +r = 8e4a4f6321dc82a6d4d6fd78550418d24b3d05ee4295440514a9c3ebea80907b46b07d4a2a1018fe151198480c4c0b80, 8b3b9d12e5867522fc4543133da330cc757954f0b670bb84a57d50c160cf08167c3945fa8f877360e41b28095e874626 + +# g_scalar = n - 122 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f9 +r = d109b62984083890da5fddab7e28aceae3da87e136a2812ddfffe0dd4cbeecde89a9a5422a1a0fad53b912fb21a3720b, ebbee398404882a8094722669ec58cc4fd488003ef88503893198baf14b2b31e0f1096c5d6c0669988bbf6a48d72c11e + +# g_scalar = n - 121 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528fa +r = 79cd3f1e3891db8165df3c959329f7e0c29afbd47772778a6c33d5d6ba6744e48c9a16e3a896ab1e5198ba40189dfa8d, ee51125e39b2f6e9b8c2f20607d9a48163e2c65748e90de46aaf85ab51b276790abfb09316fd719d355570f5287bfe64 + +# g_scalar = n - 120 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528fb +r = f392f9632f3b0feda03a6787986794dbcd411e349499fe4eaf07a03eb8994b40d3259f2810248af41b3ea621f3c6f15a, ac678a7865e25b379e40a6c0acd1f133c36985b9b3c8225b33419045c88737c67618c264ab283c770c8e99083f75edc8 + +# g_scalar = n - 119 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528fc +r = d2fc5c57998b057713167fb8ec9cf4cda4630ba1875fab27cd55e7b421cf9dde59f9078dab73bcc4732595ac7329d8d1, 4e9ac9d775bf5a3265e44e536dde485c146135436ef6481a298859b7662370b84d24690cf930631489ec9f3fa00ae490 + +# g_scalar = n - 118 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528fd +r = b8027be64a5eed689d19bd63befa48da4496f5a023133af12541da528e6a2448d1f2d42a406775a028f0ab7a080bfca5, 546c7955b5c108186699c66069c511df0caadb2f4bbafe3353ec47eb620c028bf87e6b6c22a321dcf7382a5e694f97b0 + +# g_scalar = n - 117 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528fe +r = f26774cd7823568b517a6bae23acba53ad9e749a9aea738d613e5294fe8579619532b30ea229d070fdcce7a80723559a, 8faf654f7d4f688c85ab9a7d400ea7a4598d64724d867b7e92663fa0f95109fe3934c5b31473fa846bf8985f51aceeb2 + +# g_scalar = n - 116 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528ff +r = a40dbba76a0c98442700a45b812fab5c2e56dde7119ced404060d22edb6e808b6d812dba7e29445309e7d232ccd1c14b, 3f52d8fea7e3993a82fb0a4636ef3bfd01f7b3c0d9657c7d7e64e9a13ed8e9a24b6aeb0e16771d06f5e3834263499cfc + +# g_scalar = n - 115 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52900 +r = 274c69657350982d84442a4123c50746a97accf432406bfd33e868f326a488269120f7b3a043456daa4e673b34498f56, 3f3a420930a5ee248afd61cd30ede0fc2065cbc509ced139ff23c6477b75a478c140e24d13851dbecef948056a236155 + +# g_scalar = n - 114 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52901 +r = f80f423bb48af0e8e53bd76b6e4b3bc543c2a97d5743877a559b40a286dcfd8831ec9ab137796cdcebbc6b4cac6a280f, f338e5cdf43b9b91b66b98c79dfb532f935f8addb23b5a1725af72187ac62ace0b58d896d4e3b0bac6f969582b773385 + +# g_scalar = n - 113 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52902 +r = 869fcd17ff86a9864a5bdb048d7fa0c2e9815b09139b7fc5e72215ef852bd27fd2c616d1bbe33572f85b86b79b0bda12, 5ef4c20daa086bb4c2f12e83ce4788a84080212603ce449896678dd5184edfd5463ff80d2999b2fbcd87ade96e250941 + +# g_scalar = n - 112 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52903 +r = b4a6714762f45dce83f2fd2cd8296a52fb25e37c9710b70b2b5609d5504c81290d20370a5d66455a2e20654839d6e2af, 07d446bbba12dfb2465e614a83e7debeb8c197883557b977c1811bc5d13895e7e958e332f493b39b57e746425ea39593 + +# g_scalar = n - 111 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52904 +r = a158aabcb9bdef14c3907b518b02667f27552012c727be036744720b50447fd908e0805000765fab8db3b74805be74b8, f6358897f7d8625639b4b847dcff260133071e06b514d97a5d00ab436c3cd9e5ef6a411a1cfa0469552205fd0b633a90 + +# g_scalar = n - 110 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52905 +r = 26956a5b83e5bd0bfa63d67feafb4dc8bdc1c92475053732ce481ae68d2624c8a4ba394e85d138d693f846d4906ef776, 3a600687ef91f740488a5078961bbddf9e28d8d18a3fa9b5406386e38916beadabd914f900eb7ef4053d8f0e8f351c5a + +# g_scalar = n - 109 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52906 +r = 6e3c27bbf13f24033cd18c33b9cff887a911a58af0d93abb5841c5f8a8dcbdc89c7d35833cc1184b0efc2e27b2deb1fa, 0b3b93a9e67388fa781e65b180838a978a52cc350a5ebee2d24a804b0a9f250aca3226f3abd6b3faa4c6e8ee15acc519 + +# g_scalar = n - 108 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52907 +r = 2a532f0ac16a417882f24a114cb0b8671b23e3f7afef0b5d589f30567bb8dad3d81b74529a67044fa26631ef443c7161, 9d656f406511cfc08b664ce6e12f221cc3a74a19c3bffdb67b27e171992bac6e567a255c91b54316d892e8f1bfc7c314 + +# g_scalar = n - 107 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52908 +r = 77964d793f740b4850994c4960a91622ccd4f456753f40d027c6ec25a0075d4673c21e204f761490d718e8e1f4363f23, ae7d58e8d503120d1e26608738bc71c66a2952ba479a6b9cb77c8b2e5d80c05f7bb038641be6c2860b36aa1e09b812fd + +# g_scalar = n - 106 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52909 +r = b380f170bff65e1c2633179cfa6a8ac6442e0f1f36905deda01780587776c7fea1295b179d724fdf3d303c72138de192, 0e396ebe68e2e2a44a5ce29540ef369ff960b81ef512e7b4e1f467d4b9cd0f5af83cb47d7e4e82c85099312a2a6feaa2 + +# g_scalar = n - 105 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5290a +r = d0ab3e3a99ebd09c022c75441a806542862ef39c275075e3077f30e5dd2c23bec367d6aea6e201bce6e91985e5802845, 33c518d392768c5a31450ebaead0e6dc2c2a856ab8dfda9fc8d3dc5656e000725a30c9af5652ec94829810a0266fd747 + +# g_scalar = n - 104 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5290b +r = 7117756e39dcddad381f4f06f473127497d1e75fd9f408b53dd4f91683002cf1cfd364cca03bfa6367126ced901410ec, 12cf98f9c880fb304f9bcbcdb1d380890a0bf8ce1470123e0caec3c46361a0625c462290dcf3d0ac1df90ec569277518 + +# g_scalar = n - 103 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5290c +r = 590da88e64671048113a7902e3da530d1ad95a94f23d84fcd3f0d14329c21de1ddcbb10eafd402bdd24cabaa21355d5f, f3618ec88d8c2412291d2a59d21bfaad9fe42e3ca7052e3c681444b12790b201e5ad1b1719d191f40b5a7d7e6da40f25 + +# g_scalar = n - 102 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5290d +r = 180783fc39489b2827c614bfddbdd7a57befff1cb90a319f1c0f6241bb2863c829591fcce7274c8803802ee80fa4f860, 9f5b2dd5d9095a20b3937037c7e8aefa5b80425c412a1ada6172a1f445c5fdc4ab9b4514e4c8c458d576509b865161f9 + +# g_scalar = n - 101 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5290e +r = 7e2392bf7bc814db9cdd943547a18710d73b1fad8b8b5cfc73ddcd2c2eccfb1ab539f5fe50c66d708e66c6f69b8adeac, 8c78d2c9e8fd1e216f649a90bdf13efb58c1e2650ac17fabe010be7af529796b001223dde2983fb26ebe6c4093708b17 + +# g_scalar = n - 100 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5290f +r = d884d30b2f03f287419f4d2eab386382b0e595a155fac50e100134e2338c10e0f9d9c4dbaf282e57a350c4fc01834066, 12396f36fc1d034d75751338b50246d6ef016d9f8afcb08dd5b22cabcc25394a75eb8dbfb6dd6680b581a6ca09f8ae9c + +# g_scalar = n - 99 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52910 +r = 648c5f00bb28223ad49cae0982d9d6bdb9b2e6b479c8f8bd1b41177c708ba469bb4f9e0f41aa174e6e3835a9b05f84a1, fc1e9674cdd29c42e08b6c4e89e6f2672908a6272e5f15f7998aec708f7db81d01cf69217e5f5c72fb0b7a8aa2733b5a + +# g_scalar = n - 98 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52911 +r = 458ac76d0f40ec396e6880f15c434085ca861b4d97740fcab1bcd42525fc2c50f05e0ddedb37f6ddd2872262b0a9e00d, 588efb43001fde0cb63e8243d9d7df8c846959120049ed20ffc36e0aab1162a528fdfb218f772d25a02f6b017b751bed + +# g_scalar = n - 97 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52912 +r = 8c081acd170d807f87b1e51bac06961610241ed16fef9d9d8f273e3065278f98c1f0db004a49492c7cd2035d7f5c54e2, 7c3948713b0fcff9b3c1db6e3b0a969b34b81b1287765c61282db10bcf1fa22b1b14aaec2979a40bffafae16e38c4a67 + +# g_scalar = n - 96 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52913 +r = 8bf3dccc39c18b96cb4aa43c9741eb4226de4c6581998af2ee21597e52ce08f68fd61e31148840d4dc5293851d15bba7, 4da80493a5bbcb5b311f7bd0a2a97f47062e615f37cedab47abac690cfa11b0eaf81dbf9822783c6991e2a26278d67b1 + +# g_scalar = n - 95 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52914 +r = b8f42fe52fead1e4257b0bb5ad7f23e10be90befa27d2b794a607b9d0ef989779f74ca169bc0cbb10fc0f2630dbc3c91, 4492b45abd20d7919ac9b212aa546c0673f09b17c4384a6eba33c0eb22660603afa0181302869e8221871bcfa06c4a6d + +# g_scalar = n - 94 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52915 +r = ed9602dc7912de8d89dabf40cf9eed19f4db0ad3ad1bd1192e2bfb0c25998b5d4259f70ee435a0deb134a04174225251, 7bc3be41639313209fef39c6248c25eefc0b0623143223f782ea0dbc32343506879cd4b6bf767610a7a492e83e606dec + +# g_scalar = n - 93 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52916 +r = 813355b3430aa2d72df91689cfd151547a3545de7cfdb00e1c634764b16142cd1b1cc24f5380675eebd14d71e32d80af, 3f8e0c70994062f638e4c6ab6f5d971aa8d5bda48e98f234018357efc34f9966261cfc071fc54486e9231d377a0d3581 + +# g_scalar = n - 92 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52917 +r = 1031cbfcdef715d74efeec75e724f56cb8a88d32c7b6b5a626905570df79b6048f97bc3df1b9f55b91b6e58f1036e450, c1f7f4cae5df901da1bc3e946f0c72e2c2125f7d57596e065b2978e2b8d52dcd31169bb7d9356b23551529f1d234dcf9 + +# g_scalar = n - 91 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52918 +r = eb0f52348bf223b0e7e7382759dc3eb7b04b977d42d74f5fa4f6e534bbc2618a35c2421b14ae3f635dea409c9cba0858, b83538fc0ee9391df4f64c4265477b8734871f379c5d345ff62f4cce6dc9cbc12fed7ee4c021d39266e3ae99f038aea7 + +# g_scalar = n - 90 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52919 +r = 4347b760969bd7f7b560d7e63dc77e7bb34f09fbd045d31e28bd6aae6e6e8e57672649def3c36ba79b35cdf7a7871029, 6031b8801482c98e1001a0af8dd013512114cc6ed63b8db6ad0d3541ec292413dc3151d601531272d0e9e5f8a1ab691a + +# g_scalar = n - 89 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5291a +r = d0d105de164b7361d63dd29d19e0e2b667d3644ac8e55b7b463df30b0096721f18a49fdc4bf163e00c62094b2d71d4ac, fe3816c64720c80ce2d7dbcabf469d26eb88fef6f4b21b3f9a330faed255dac2879e48e3df6c30811a79a3b2fde8e771 + +# g_scalar = n - 88 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5291b +r = 9398236759e97922f158f85541bb965c782840d1edd794907774056232329baff0041e2423786267db52eb03d1db891d, 3be5902bcea7c2ade50d59ce11e7a67cbd7b9ae3c198db4bf80683e20745bcfc590ac7b2d0a332efb4bf33481c7b8873 + +# g_scalar = n - 87 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5291c +r = 1c1b3417a500bb22c4840320387b6b2ef30a928d9a3c3af1df0ec1ba8b80919559424730109677754f11a02e4aa0372e, 60fb90511669019742537e77f184b248ce6bbe8a18aa60f62120dbab067b576fe7db928a586f697e96f1193940cd990d + +# g_scalar = n - 86 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5291d +r = 94dc48fab7e8cfcde61e6c2984cb7e449e30229d0a06f838361494cc0b162b571234181c1dbb4629c7364268d94ab449, bc29e690721b7a85ebc3917cd36d209e5cd08f195f3c1e5a8566ef2afe3b86975b01a09f54df4c80f281bb0e764997f9 + +# g_scalar = n - 85 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5291e +r = c835025446e64d4db0a08fe1114e6f01d953aaff73256a577bbdcadd053153d82148bbb88207255a935d2cdf9b06762d, 93de726d366c0dec5dce7c601d76ae6a3c2baa2dd350ad0d8bdd58d5f4141ceac6d551fc8e04169618304528ff243ea8 + +# g_scalar = n - 84 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5291f +r = 00eb5c040d16b7fcb048b60e740c04a52686cba73934e93664a8bdc7c791db8094b80b8f691e858b3c712c3c6323cd05, c1a39004c52046be23675426bcbe02b6781c1cb2727eba5feb1a8d0de33161f1600347ae28364a4f7f3f276fb2237d89 + +# g_scalar = n - 83 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52920 +r = a075b16ac03d7805c25baa03520a8926eeb88ca1c7a4aab58487aa0d4a6694eb44cf847ed2f05eb48e61f0bf44e94071, 88c201259631e30648d5832fa9c3871bf55d9d45ddae432530de56a8b619fbd5b1c3ec8e9ff69bc13ca85b76ec268f3c + +# g_scalar = n - 82 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52921 +r = e6db24057f12bea3dfc6d038305bfc7c87e75dfbed69216bd6021049cbfbd0c2e8c09f59ec5cc866783cc5bb88f82a12, 9ff65a61432cf2d79614842d0111801a128c900058cb66b01bf2fb109f97aed67b05c629b44ff8449b961eba485c5d2d + +# g_scalar = n - 81 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52922 +r = 0984c2e37cdf344f11238a859f436faff2c3118feaf138afd8cb3560e07b1bfbde45473e86c087853cbdd3cbdb06f682, 6228489f68ba4781a21c729c51d8f958fefb85a11a22d872a9522d0fe70d9c816a65eb2a8c905dbf1ef7c3e93c7da7b0 + +# g_scalar = n - 80 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52923 +r = 1e8568cca446324620fe8c27a715ace6dd2ec6d351fea1dc49066428b121360923e5c6b90e42d1f9194924b4ad0a415d, acf544bdf9eb5906469f4a101132751bdbecf9c5ec87197043856fc39b7b9be1671680e226dc9c88ff3dec4503318195 + +# g_scalar = n - 79 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52924 +r = 23b245a5d53912dab3cc818a7069cb7c491c312dd15d01f0e58901a204ca55712cdac248c3b74585ca11d9d4e9a6c224, b468d707e2854daa6be399360cfd7e069e84cfe4f79cd14cbfcdbc161146a13d5fad14c0cd88aaadcf087c75594f4e9c + +# g_scalar = n - 78 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52925 +r = 02781ecd4db639eea1560f9775dae55bd35175d9a506191dd3338ff4b743bdfc47842147688c1ced3c80145ddb9f0b60, c186abde517042932b85fcf8b1c370d37bdc719b3b585b043b78f3624319ffcb939d400bd3ba155366c5cfd3dc231ac9 + +# g_scalar = n - 77 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52926 +r = 63d23607fa5c9816742e060b28a126270ca930b998ce78a327ccb6c0212a6125114a9b40334793a79f2134c12a501a3f, 2bb4ef8acfd302d1319e3c1aa8d6be5922fc6affcf36304deaff7af1b602c3c1cb3281d00cb2e2dc88b2345c13e06e23 + +# g_scalar = n - 76 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52927 +r = e677b97c61007b808b8d434e90bfa219a7253817daee85404552fc68956bce558c547a520c8d74e1fb2f775e4230e336, 1878e3cec6c847f09be8d23ce6fe11ddbe445e6ee45c22f9585965db1b07aa3f6914734b9fcd9c064015190e08e5438b + +# g_scalar = n - 75 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52928 +r = a1e0ae0fe6ca7a154a7ee23df367b5c85d4631b4392f8f665b28cf8991549a96c8cbc40a420ab7ef6b5d4014867303de, 02bd279dbe829a9d2878ffbd6a801bba9b1dc61c0fbfd1e2989d5496bcf5128d5ace3d3aaf0546fed59aa11fec605d83 + +# g_scalar = n - 74 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52929 +r = ca50bae743ca3e45a0dd8e3cc10c4f6c40d420cb5c36dc4c02ae1f9150f6a5cc7f3bc516e1b24b64126d4cde13dcbd9f, 53cf2923ca46546146228db7428f7a38a5581a9c35e612f0dba73610ec30dd42ca22922f8eda2e960f8b41171022d4bf + +# g_scalar = n - 73 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5292a +r = b89d83e72bf4673cb08db04de8caa7d29029a9252d3731c25b8d230bdf8b9b24a9c2a9b11de8963b43385c32d851a702, 909a50c483675e9df4ea8bfc78479c8cfb1de1fc6dd9a5a650603784b0e2de90607649281e1729e95702c6411e0dbbdb + +# g_scalar = n - 72 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5292b +r = 0966d45a6517888e2ac250f6058daca83b7debe494eaf32810757e2e3f599369f4445a249b234eff668240536434688c, ced3e2d0c97db2c54fef5323f68505de87ab07433c0f52c5384bc9e6546988b866326235288bc8f68aaa33871896c4e1 + +# g_scalar = n - 71 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5292c +r = 0b4faa5a537ecd702b123738fe255dda27bbde143508ac5493ba15cfe58d0a92bf5731b3abb11441c42ece45effefcb1, 065815d78cd52fe34246db11f8ec6a99debb250e319bc8c5eab0d7afda4c1ce57986c3b1f7feadc295bb2f7c22137c39 + +# g_scalar = n - 70 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5292d +r = 2bd44119aa9079b7d8436f83a2ce4101a4c793741489a3c09c2e8aec0cdf6d91edfdd44e94cf7a32bcef0b6a37548a32, bbc20af538b960b5a3a666e82c5892143bf889a8303249483375299a738da5821d5d4f65989e1ac760fbea436400d5cb + +# g_scalar = n - 69 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5292e +r = 59d65d78a3f735f42c86ee164fdd3ccad4bcc8b125abfd65cc66c8aa0f19981b5ccb2859a1115e28f8d3df74670c2752, 0432feffd8e2428590d361748ce985cdf53111b77d1299432ec51b76d42bdc5aa889629cba2c66b2fca521d883f3aa31 + +# g_scalar = n - 68 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5292f +r = f6a8130b3a7741e35508c2b38bdb088aee34bd1706035fdea4160def7fe6923a2fd77b5ae6018776af78aa17286ac2fb, 2b984f17d03b99c1263a29e0f60970b3d64fb6a881f035febd88176d8fcf3364a656197694e18dc03fd1299e8683382b + +# g_scalar = n - 67 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52930 +r = e462ca48e153035af9af3e4d90909d25556e637e6ef3d8f765d75edaa55d6185eac7dd3b0b634f686efc5cbc8b1772ca, 7cdd34755386b66bf695940fec9d3a06a66f48b939143ffce581ca12c0a61b42efb54e58bd87a2f9ad89c485f5ef612e + +# g_scalar = n - 66 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52931 +r = 3418c841ef19aa6cab34164b3870beb7acd0361f5decad089983c10a492b899ae22c691d99c0b909b60fb64e52990b5c, 4d78416af80aa2fb6d4b7f1128f293c5902cce5c4f2a515ab12c02e6d597baf65a7f2fbe3d3776f8930dfc5adf64cc92 + +# g_scalar = n - 65 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52932 +r = b84c3a6a5fd4266f8b0350b2650b22534597ec8abdd5f002cf9edc15edb63c80becda43b0d1d279f8e469454839b9679, 1590dad75aa44e365d7993db37060f78e689c292776299225487b4d321d43d98495b787bc5266a2cf1e927c3cf038606 + +# g_scalar = n - 64 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52933 +r = 4f5d5ab6d1b30e5cfc8e87cf3be44d56a309199dca57b7bde04b3d30f8a0580d957c980f297a9a37ed4de4f88e89b258, 77748f746bfb35aec11ed876a132c01792683543cfe01da601ae4440ef6f0120f02e3ad10f6e43fe4dec3960cf56cda4 + +# g_scalar = n - 63 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52934 +r = 1c9bf0b0f1e52d1ef6159e519a049f7acd7e35f76e2b71aa7a50f7458c949f8f6ce8ead6149a1896c5c0e6d7aaed89c0, ad44c8ed5f5976170a508471c8ca20dd237642b6682bfb72c44fcb17772e80e572c5a09ce13284e5c4493e0be7dfd37f + +# g_scalar = n - 62 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52935 +r = cb4c0a54561fedf2d194b7054b14d11703b9f1cebfec21da0c7d749907dbb9af1e659730c1fb476e49a04dc0f5acf772, f6fd33dceb6bb947353cdb137d3b0558c2daf76dd456dc649a9f61a62600f544a0a164df29cf3eba509dc2c1de25b2bd + +# g_scalar = n - 61 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52936 +r = c93ea049ef6ba0062366467300fe51fd5ff77ff2332982d06035e34f772ae08054fb5a34222241e848da1fd3fc60a6e0, 3b33eebae03967d64f59388dfeb992dcf225e6001ad8a898195877ac8f2cfc13c6b2cd3195160b5399bf0ee982c7ed99 + +# g_scalar = n - 60 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52937 +r = 95bb80cece47968c61bba736a55b527784b7c2fed74cccd40402d5c4eb809f85a61fada6fb4f60e8c711d5d1c425543e, 722de40f4b15b0aed603c4d7b76d198944ba5ae06b757c8a5328f47952d5df020f1f0b07197d55d6f606d524e914846a + +# g_scalar = n - 59 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52938 +r = 9ba039679267b6463703435b0de64db996a917cf1ed0e31564473b595c322738dfca6897f929974caf467ce227bf64c9, 00cc90edafb9aa3e692645f4261c35e6904cb4cfd7b9c3315330d12284fa68fbbe4248bd4cca100f20f3d552c5add041 + +# g_scalar = n - 58 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52939 +r = 104cec0666ac72e09e9520bf57acc87aa58db4ea4f96af4fdab9dc0015b0fa13341cf9d9c46785af941c5c257d0be180, d4ae66a086b256fe3f7a6a1caab704151ee96616f605a75e4a0ea855a964a826474b535f057fc7f560c08456e6d6198a + +# g_scalar = n - 57 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293a +r = 814d7fa07a78c189c052f3eb1c99ceef1e9dd1509bf446e0a14967dfac4bbf6273bae4c1694b8b0db14ba61cf97f865c, f57dc465b4d9209c2d1ecfaad6ad3e0370bd843b8c37e2a4f29f454817f65ec288773da65e8c849a5efe5b7d548b4fa2 + +# g_scalar = n - 56 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293b +r = 7772a913e6436cc1e9981ea6820da79f2629ba4fd1deca258b6fc785e692fdd2d4215b4fc7a8baa1483350a5ebb8cdad, ce009b71f07747d2a901000cd90cb631fa7d9e6db6f44a8d49dc5e5114733de2d7e8619237ad09b42ebedca4aac04be2 + +# g_scalar = n - 55 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293c +r = b3fcd5d1690cd408fa5cbfda60f4554f6078d8bf085faeb3a4fb7867e3a142d6fd6622bc1718ec3cbcab5f60069f3367, 8b9fda8ceb31112b956e18c6682f05f9e8394a3441dccb07721cef83c2f8609d7d50dc54e7f59c58b1421183d7e0877b + +# g_scalar = n - 54 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293d +r = 4576a6497cb8944248c075daaadd6150075134ebabd64a6acff00bd23c9b5a41ab2f15202175fbf411853add834e6c54, bdf1498c6f95d6b69161794484e14885e51e22682ecbbb44f40786296c4bb1587244a8e288032e0bcbf58990cb52125c + +# g_scalar = n - 53 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293e +r = a8ba8f10e0f383ea642ec4e615c3aae2cf485c74a7c54b160b0110610f0422a2daed7c268a0915cc3b1bddc6fbde49ef, 120d1c1481336b7a5236c265b7e89a1d2d38e52ec6f9669ca8795e65b1d057c014139bbcf7610574d5dfab4c6a9e7afe + +# g_scalar = n - 52 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293f +r = 4b820d9b31d83660252b48f5cd8d7d770bedaa85e5377c005687d1dca6ccfd358a944b316b3262328f6468656f9201b9, 3a33cc62345e02b4dddb9a7991a121896f1d51528087550792f5e99312c3c484f576cf02edf74605561a50c4351f80ea + +# g_scalar = n - 51 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52940 +r = 16634a504f35cb3c3dba16e9daaabc27464ae8d241a84de7a5e0fb598c5a78d91947c0caec4a22b82c4ccac72070ac8d, ae74fb823455f268396b761dc8c0e5f2f4ddbfffc37782c925153f3ca8fabc0ecdb2f9808ca622ca523e74074e9137b0 + +# g_scalar = n - 50 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52941 +r = a820e8303a5d50d19cbf755b46f97ac7beabb91ac3c90051510bd675cb2ec3f1172cfe4ecb5af900a96763d2fba32d1f, 90a705748e7e3d5e90840581ec5b08293e4bbbec6ccc1bfa9edb9bd0f0cd4ead208238f9cfb7b9e57c560e82cf73baba + +# g_scalar = n - 49 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52942 +r = 0b470bb250e4ea9e1197832bcea03f5647c56c115b6e3386a669156542e365a48ea5af63a5ea6fb8fa5c3aef697136c6, d2e33ae71d74d42488e19bbea4a841d0db78122a807d422c03bb7911b63614167293e8b02db682b7ceec38bdec4da8ed + +# g_scalar = n - 48 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52943 +r = 66e4794bae7d740062e5c5d3e73a1bc940d01ff53a7d2f3c4f504e06ea52bef92d368d48e7f30c2b3ccf806ab35bf6cf, d8e1bd5ed9db5a7cb7154ff14a36b9d3d9fa35ff625d5d35a3c35ef2fb454679ba7f9f615899220ec2cf9da2a0010ced + +# g_scalar = n - 47 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52944 +r = ea5b37c5da233371504f21b1570cf950780abff7d878acd0bfb185125f5b07a065c788785f0dc66c6f888f7df0c668ca, 536201382058d574110ff96ed1df03dc20115e5d9a1f036e079a9d576704caff638fe8a6db630648b7851743ddbc812e + +# g_scalar = n - 46 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52945 +r = 374aa9069481ed0dd9c79db8005412579266634957719f5460976b01b472d7899f24fba649ddd10ea618d7479fc4f435, 03ac614c1da6382437d2a66713f6f2f9e6547fdceb14b546285e675be7a57b625ea6f3ce130a79bc9f104eec8023d285 + +# g_scalar = n - 45 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52946 +r = 9c94c858b2ac340599e1c0c61f2bb599b0040c0e8d6fcf13ffe8e0bb39eb8f59d4af65c673ad9112d4c411564fddda5b, bd14d686247c5b7ae8b888dd42d50e61e906998948dcb16c14c4bb561a4a96e69d4d0abbae0335c070778729911127a2 + +# g_scalar = n - 44 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52947 +r = 9c7e7754a320d35204ce2a21986c5ce6d50a288981ea36c2767b4ad7f8f99b51ae97af8bf240b30a1c5f0e5b36a400d3, a04d71cdd5e228c45219f692fd1abc51b8987504d822571a397fe89afa3852928337d5b10e96704d3ccc9ccf44527cb9 + +# g_scalar = n - 43 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52948 +r = 35178bad22dab3935cf095a901fefb567314f5f0416dbd86dad9f5b239c4943d09112fc50578bc8c37fa935500846d44, 70c0e09c369cd487568b4f6bea3406b755071f0942f9d72043187556121ceb43e4811bd18b61ab67308603e5c9450e58 + +# g_scalar = n - 42 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52949 +r = 7438b4933c1e593ce983e169ffff96c73fd72a308f234c864b21c4f3eb6c7e6231b22efc5df46c6618ef56cd5d76b881, 2497d63d0ffd4491affd6a97b8d58e8a18c6049e1559889cda2f355125e1520af26a645586926ed679c5dc5d5aac171c + +# g_scalar = n - 41 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294a +r = 8764cd2cda92245de3bc778895fd71ae89746c8d852ca03573a82933a80d68f341dfd24d456a201ead148e87bca6d14c, 7d158fd114e70e3a9866ad382e6cd8d14236293cb060a765a879f31ede9b90cda5389d1ef0c362915d01d3b97d14dc1d + +# g_scalar = n - 40 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294b +r = 51c4b1b36a4d6e813b021cf316d7a9adae78bc3a3134216c86fcfe4760be3ebc43a53ff21beb359e6048c6949399c38a, 2026d49256eb44fe244dd362214b91939c5ff5f59f1f55d567007808c8f148bae207337a59615c5cab4632734a6c27e9 + +# g_scalar = n - 39 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294c +r = 587df4d6b89b1fc2c9985040b76c066536a1cd6dde9b62306d7edf642b7f006fd984244a8e3d2c467d894f80506e0e42, d2843ed7f8b69704e56acaa0e329fcbf49b91bacbc92601dcba3aac54aceac4684d4f54b17d6b8b8b3f9c7b9958e5185 + +# g_scalar = n - 38 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294d +r = 47ba96091da7b1476b464412bc9a48c7479ecf018173fb32f3d752f5ad6cbeac018843c01c0d77024703cd85891f8ffe, e0b9996badf9e70ded641ceb68bcdf5b0cff1e39b7cb8065251db867bb6a946b783e7c3b1e5f1f936e50d916543ecb77 + +# g_scalar = n - 37 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294e +r = 1eba28f3defc58b59261ede87ef27114acb60a7597482b86a129e2dff5b54a5d4027704bb5630ef20202d57de44f61a3, 05f1f848017a407ad7b0344a9c735cc84af9b6576bfb82e0d156edbca2d35fcad0e9bc29eba6b411936e3f37741aa761 + +# g_scalar = n - 36 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294f +r = 1608643883061d376f01faee26946e789f82b7fbab52606ca39180d45c2c7ce14a13260770b1b757f216aa2531238ed0, 096677847f9f7a4820cc112848cbfe4e95cda713cc0aa98aefdf6be73e9802dee2ee43a0291d7ec7a68120c9f04f8843 + +# g_scalar = n - 35 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52950 +r = d6149f75e9417bc6832bd8e34fc7852365f16273a02583fd4a508620dde6bd0abb3800d52d7c2fb458a5b5433720ec9b, 4ec57527cf1dc0d953757880ad332ca3dd0e6054d70ca111affe7667677f6d5cf31e7f765aa1f6a9014fd917c2114ad5 + +# g_scalar = n - 34 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52951 +r = cdb55e6ba07b7cae7ec2bc1cd50b3e6d9d6ac102b4e2520145700722abb9102f0648c2cd2d668c4180b309dd2ada5bf4, 569b110402522db1fc3faf5f9eadf8d9fd2ff30475894d2961ebe75baabaa83bb8f22396075a80b7143425f97925c6bc + +# g_scalar = n - 33 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52952 +r = cc9e97a46c833e9d68af622641d5c400da631fc160f09efbbbc7c7ee955ef3afdf330d9d5b943c8661333a382fb3ba63, 5802d49e6fa8252890336c5e473cef8d75be91464490f545f7b98315b746f46dec409eda3df61aa18028c172c59da189 + +# g_scalar = n - 32 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52953 +r = 5dd2a4a0626b3d793a9865baa631cfb0ba8953d612e8dc871896b9fcc651b1dd0d784cf208f779d5ad852b878c0a64a4, 3aef526c554356608c4bd8da4ca4b00fb434f90ff5dc884988cea0616bb702f65c8d203c0d5ad402eeb7438e9783df44 + +# g_scalar = n - 31 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52954 +r = 6c07c4040a3305d11afb51a3e3ba8285d42f7dc953c149652ecf8340f0df4fe6b6e7ecdd9e821ee6a39c89317c8906a4, b8a5c18a9c675e62a4c2f292c941133b2822b9b0fba585e3bfd56454bd14df2143f59663c8b3b4f72547cd78ed803e25 + +# g_scalar = n - 30 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52955 +r = 92cea8f4c4360dd87002990485ba414315f9abe1feb6b100519b9fd50a18323276aad8b8131263886a7a3464d0cbcea0, 6bed6d1aff07734d0a96bb95d8aaa96d693de4d6095e980dcee822fb2b85be22e7b9110222c14ea92393a2e33ed8b75e + +# g_scalar = n - 29 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52956 +r = c8b00ae8187cea1f2065b7cba7df26e43dc22d490e3feb0fce3c15ed55c9764725846b66780443d6019d6ac5d3021470, e2d5e3fea6880e93090a818e6f37dfcc71924ef4bfbafa0454e872d93317ae4bd6c3e9b5df37c21de5ad7b6079a2212c + +# g_scalar = n - 28 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52957 +r = 55be5764d37da1a2d8232f8b4e492aa88fb0c597a4da3e15550e0bee8ff22c6f4169b4117b3c1220c76afaa373b64643, fa3235c018677e8986dc880407147ce63b71190c4fcc3eede7b42b8cc52967c46008963a78a011f00e43764ad7188061 + +# g_scalar = n - 27 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52958 +r = e8ca780e373e5aec2f7e8d509c6a58fe7228e2d5d18f14d08e0d4168482396f9cf1912934d78291da04482d2467d66e4, e87df5f43aecb12898198e6a2bb2c32082d9abf9c737a57a28865201ce25e414a7592809961d070bbd552e2ae4971607 + +# g_scalar = n - 26 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52959 +r = 37a45bdb091cbb80f14b309f03fa90f2808497b7b0bba4a76efedb8023bf0b90b0391b37897b93f56423197d2afd473d, b82675620f6ddbe340d3f79d9683f702a2aed20662bd58d8da3846eb90a0db3724c0bdd16a1e92911225b51c7570a234 + +# g_scalar = n - 25 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295a +r = c29c6e2ca5bb73313809ab50de2480249bd51b99208abe1e57d0f3d2e2be174abb280dfa3cb3fb361e93722758ce3b83, e01904bd1687f62325c1e5c2b3143691295d0ae21571bcbbfe9d70fa6bdb5c327c3343b06ff61c6e66bb02d29eedb0fa + +# g_scalar = n - 24 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295b +r = 4f13f901fc55723f38076e8fca77d74f563361909bd5c2f7540c045a409c930b20c1b8e0d809afcd259f272cfab816a7, eaf7f719da5cfd36ec6a5786995b16fb17d88bc65f0652c520aa8605b4157d216727d52d25db813776f6cd2942c2ef3c + +# g_scalar = n - 23 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295c +r = 80826a69eea8f22461e4ca2b905432f01c75b8ab2a351783b9d3dd25429c0a18990ed20b569b8ef6d1b4e74d12e3683b, 620334f21ddedaa6d7d2dbc8a998e73e0fec76af150dd38185275ecd5ad83140f4335c0e59a1b7ec803cc59513ad5452 + +# g_scalar = n - 22 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295d +r = e082882d69059095fd7a8b13f0681fcac382472ebe0e1fdbccd57831927ed783981b788d16f325b84f595351262bb775, 98e2963670327be7af037b8dea7f6322389b1207bf2f030884e54b763407c8470629d02536a89396b2e3cfb70558e023 + +# g_scalar = n - 21 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295e +r = ab16c626dac012b51b1a0f6c5df0e5372e59ab62bd9ebe6930128aa06177f75d88e0d496dd2f9e2108265e510422ce2f, de7db0beecac3345d9952ea55315a7e84babeee17ad832a6d9d144b675eb6f66558bf560c70e84157febdeb5ff73a218 + +# g_scalar = n - 20 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295f +r = 1d1cdf7b5f22346598ca8dd42d96c936f78cff0cd467f03a713466708cbaffc7cd96f20591e71d16ad610a2d94a70ec1, 546227efad1404fea1fe48d4b8e74438bdd259bc0019ecd466cc04da2332b20bda0ab953cde7d7001d85e76c9f2b249f + +# g_scalar = n - 19 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52960 +r = fa0f1f450390d706b3b6639c539802ae23891298fc38538eca109c3b154aad5e22c4cc5f41a8c91282a2ed4abaa84c08, 5e2b84dc16a8889bea2e23887d9b498dc0a586644980cf3c6e8f4c87900d09bb5738d2c23c25d153b94871a34f23de2f + +# g_scalar = n - 18 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52961 +r = 57505d8d6749703068a232435567169355a96a6879909f083bd1c8f62edb0dbd198fd3f0f38f66625dfee73ce5b82700, 6e8ff4db814e419c642295f6d6ba58a8900303835b3026443d99147bbeed67a6ab47984708755821759f8e818a39baec + +# g_scalar = n - 17 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52962 +r = 524f166ee475ce709f6928555330455e7be3737d524ffefce6fc3f2af655a10d3ea4ea4c8ff1f43e8903e1304b4a3cd0, 53c86790aa4e9b36da14a20e4c3d98850782927ab5abafb5b631966ccc940e7bb1dc48ff2a463f25c033963393ed0faa + +# g_scalar = n - 16 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52963 +r = a10896aa435abaa137065f5313bdc3fa317b63ea2887d5ff37cf65517917652a992afb5b0ecdd2d8da6e8a7f7c33ed91, 9a624b7e7e10daecae3cfa3958d2e6984ccc420437711eb76eb78e23eab2beef14f82214dcf30ff264de9ea1105435d9 + +# g_scalar = n - 15 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52964 +r = fb62d26f4903026b0fc01fd4eb08599359500917789b307583ccf19550e07b342b7210e2ec3dabd8446ad8884709f4a9, a59739012f43d8e978cc03bebff3a8682223d79927670b8fb4dc2c5f21f99ef29e9f6341ebb42a79dcf6336390167644 + +# g_scalar = n - 14 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52965 +r = 46d227c432f6b1ba8058994c5710c0c944ce05ff88957166ca6b1af8b1f85c2ad02225fb01ec909f5865e5018f75244c, bbd67c622104520a9b82db24ec96f58b8dbbacba263c496ee1337a7a1ee2443fabf4747c8cf5662e41b4b570fc34971a + +# g_scalar = n - 13 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52966 +r = b51c56e18cf23c94d2657265ed22df97db5203a8d9c1bd568a7a8e4633b7d4aeb25e28c5f6749a959b7aeb7e75ccbdfb, b9e852483396861e7e0242e3c4b6f13c480153d2013c729f8765d5b730b2f01b271770e478351f3d0b2c6ba793c27ed2 + +# g_scalar = n - 12 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52967 +r = 627b415f9c35b26d523c40dbcf9ab45cf67eb42235d77d8303aced26c8edfee1d4258cc55d9704203db8477270313de0, f391bcf1063b50c2fcd6154e086bd0f1bf39b5b199412a5073867b702f1efd527f29f508d8559ae50533ba1c741aa127 + +# g_scalar = n - 11 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52968 +r = 9c19e9fc7ba9c437f8d89885f0561d7901b8bf56147b66020dcc67706cdad64f4532077c44377abac7708b19b68b8c7d, 6559d060cacc06e7be7de2f3c5acd785d1f8f0c9016197d1c317ecd67588187e9fb01b9353ebb47c89b14eba423b45da + +# g_scalar = n - 10 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52969 +r = a91a5280db1c212ec2f646025c4845ec54a612d7eb32cabee9f6368eab225fa32a15a9a6e58d6787845539d3c8d99c02, 91466a4137fe8b17c1fcc8f5b85647557e69e473302802e2a6d53f4586b15401fc5acf13ec4617a34468e0881984a031 + +# g_scalar = n - 9 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296a +r = 5cab1d1d53636c6a26d464c6dad54d6adc351dc13cbfff3f26094833a96d745de35d87293fd7e4f92f5d200e2353b92f, 188f9ccbce170a39826bd60b119658ab5913533397152f27d80f9e38fcc3583cc8881d8e28bd55d00d7ecf8e4e713f4f + +# g_scalar = n - 8 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296b +r = 5db4f184349cd9b11c7b5fe116b664231d9aebd64f3ddb371c5c2e7193d7e30f9e336de5ae9b587a23f60a05dd9bcbba, c3f39228f2d8109e8ff726bc3b7130f1166dcd9c5bd2445d8fe8ab408279791a7c9244c8481aa178f2d3017d199aa5bb + +# g_scalar = n - 7 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296c +r = 932c9f811c89025bf893db589db2df555f4215d1659753ed731edcf8211faa954ce6415f874774b1df13b9d17d69222b, 26f5e949509364c10a80dc7196c4f8f9f00c83fbfe00087f9a552890afecf7baecacb629579be386f6694de088f959e1 + +# g_scalar = n - 6 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296d +r = c482e189f0430c404f0f6a962b02d33b2a33f6661bdf6015ec52930f580d57f2cb2454b339d3413a7eb5c9317d56dad8, 3669dead50d56145a792712120deaa656c361a09e4ab90fa742b40034861cc4e8c653961a4c2b231c09d4e92584f7dfc + +# g_scalar = n - 5 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296e +r = e1bb26b11d178ffbc676b987e2e8e4c660db2cf5aacc05e67f1eb1b5293c703bc185c0cbcc873466bb595eba68f1f0df, b24e36291df61b5c193a6bbfdb21dc92b4dc805067d3fbee7f49e4cefe3ca465dd3e91d08d0cba99d496b4608f8c05de + +# g_scalar = n - 4 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296f +r = cfeee6dd34179228fb40f647d685d979078358d4736400ad2e4f153b0aecac4630594ccbee0421e30aae8477ebb68f2c, af6b978acfc20ce619f8461cc7dffe82eb8e9d2cfbe7396c71c19e5cb3abd52d18b4480d84013681ab0c171964c5fc4d + +# g_scalar = n - 3 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970 +r = d283fe68e7c1c3ace36f7e2d263aa4703a48d732d51c6c3e6b2034e9a170ccf0c54ea9fff04f779c05e4dbe6c1dc4073, b9ab9a0367cd6d500924974eaefd4cc697fed2a52d1e2f4becd99c3fb1098bb86d287657851f1c9281d7b7df3fb11ea8 + +# g_scalar = n - 2 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52971 +r = db93b776427460c39c90a4fd2de4b506da821495f0687f503504e6f0ff9d48a18e6c8f2e022b53f0c8229e55783dde91, 1cb6b808edc20f3df8f2bcf6ff4f197bf60e01beae8d4526ea1b0e7423a77da617171b563d553327bd157b9dcebf4025 + +# g_scalar = n - 1 +g_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +r = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 diff --git a/vendor/ring/src/ec/suite_b/ops/p384_point_mul_tests.txt b/vendor/ring/src/ec/suite_b/ops/p384_point_mul_tests.txt new file mode 100644 index 00000000..5e3f1ca0 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p384_point_mul_tests.txt @@ -0,0 +1,1664 @@ + +p_scalar = 00 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = inf + +p_scalar = 01 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 + +p_scalar = 02 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = db93b776427460c39c90a4fd2de4b506da821495f0687f503504e6f0ff9d48a18e6c8f2e022b53f0c8229e55783dde91, 1cb6b808edc20f3df8f2bcf6ff4f197bf60e01beae8d4526ea1b0e7423a77da617171b563d553327bd157b9dcebf4025 + +p_scalar = 03 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d283fe68e7c1c3ace36f7e2d263aa4703a48d732d51c6c3e6b2034e9a170ccf0c54ea9fff04f779c05e4dbe6c1dc4073, b9ab9a0367cd6d500924974eaefd4cc697fed2a52d1e2f4becd99c3fb1098bb86d287657851f1c9281d7b7df3fb11ea8 + +p_scalar = 04 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = cfeee6dd34179228fb40f647d685d979078358d4736400ad2e4f153b0aecac4630594ccbee0421e30aae8477ebb68f2c, af6b978acfc20ce619f8461cc7dffe82eb8e9d2cfbe7396c71c19e5cb3abd52d18b4480d84013681ab0c171964c5fc4d + +p_scalar = 05 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = e1bb26b11d178ffbc676b987e2e8e4c660db2cf5aacc05e67f1eb1b5293c703bc185c0cbcc873466bb595eba68f1f0df, b24e36291df61b5c193a6bbfdb21dc92b4dc805067d3fbee7f49e4cefe3ca465dd3e91d08d0cba99d496b4608f8c05de + +p_scalar = 06 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = c482e189f0430c404f0f6a962b02d33b2a33f6661bdf6015ec52930f580d57f2cb2454b339d3413a7eb5c9317d56dad8, 3669dead50d56145a792712120deaa656c361a09e4ab90fa742b40034861cc4e8c653961a4c2b231c09d4e92584f7dfc + +p_scalar = 07 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 932c9f811c89025bf893db589db2df555f4215d1659753ed731edcf8211faa954ce6415f874774b1df13b9d17d69222b, 26f5e949509364c10a80dc7196c4f8f9f00c83fbfe00087f9a552890afecf7baecacb629579be386f6694de088f959e1 + +p_scalar = 08 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 5db4f184349cd9b11c7b5fe116b664231d9aebd64f3ddb371c5c2e7193d7e30f9e336de5ae9b587a23f60a05dd9bcbba, c3f39228f2d8109e8ff726bc3b7130f1166dcd9c5bd2445d8fe8ab408279791a7c9244c8481aa178f2d3017d199aa5bb + +p_scalar = 09 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 5cab1d1d53636c6a26d464c6dad54d6adc351dc13cbfff3f26094833a96d745de35d87293fd7e4f92f5d200e2353b92f, 188f9ccbce170a39826bd60b119658ab5913533397152f27d80f9e38fcc3583cc8881d8e28bd55d00d7ecf8e4e713f4f + +p_scalar = 0a +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a91a5280db1c212ec2f646025c4845ec54a612d7eb32cabee9f6368eab225fa32a15a9a6e58d6787845539d3c8d99c02, 91466a4137fe8b17c1fcc8f5b85647557e69e473302802e2a6d53f4586b15401fc5acf13ec4617a34468e0881984a031 + +p_scalar = 0b +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 9c19e9fc7ba9c437f8d89885f0561d7901b8bf56147b66020dcc67706cdad64f4532077c44377abac7708b19b68b8c7d, 6559d060cacc06e7be7de2f3c5acd785d1f8f0c9016197d1c317ecd67588187e9fb01b9353ebb47c89b14eba423b45da + +p_scalar = 0c +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 627b415f9c35b26d523c40dbcf9ab45cf67eb42235d77d8303aced26c8edfee1d4258cc55d9704203db8477270313de0, f391bcf1063b50c2fcd6154e086bd0f1bf39b5b199412a5073867b702f1efd527f29f508d8559ae50533ba1c741aa127 + +p_scalar = 0d +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b51c56e18cf23c94d2657265ed22df97db5203a8d9c1bd568a7a8e4633b7d4aeb25e28c5f6749a959b7aeb7e75ccbdfb, b9e852483396861e7e0242e3c4b6f13c480153d2013c729f8765d5b730b2f01b271770e478351f3d0b2c6ba793c27ed2 + +p_scalar = 0e +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 46d227c432f6b1ba8058994c5710c0c944ce05ff88957166ca6b1af8b1f85c2ad02225fb01ec909f5865e5018f75244c, bbd67c622104520a9b82db24ec96f58b8dbbacba263c496ee1337a7a1ee2443fabf4747c8cf5662e41b4b570fc34971a + +p_scalar = 0f +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = fb62d26f4903026b0fc01fd4eb08599359500917789b307583ccf19550e07b342b7210e2ec3dabd8446ad8884709f4a9, a59739012f43d8e978cc03bebff3a8682223d79927670b8fb4dc2c5f21f99ef29e9f6341ebb42a79dcf6336390167644 + +p_scalar = 10 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a10896aa435abaa137065f5313bdc3fa317b63ea2887d5ff37cf65517917652a992afb5b0ecdd2d8da6e8a7f7c33ed91, 9a624b7e7e10daecae3cfa3958d2e6984ccc420437711eb76eb78e23eab2beef14f82214dcf30ff264de9ea1105435d9 + +p_scalar = 11 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 524f166ee475ce709f6928555330455e7be3737d524ffefce6fc3f2af655a10d3ea4ea4c8ff1f43e8903e1304b4a3cd0, 53c86790aa4e9b36da14a20e4c3d98850782927ab5abafb5b631966ccc940e7bb1dc48ff2a463f25c033963393ed0faa + +p_scalar = 12 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 57505d8d6749703068a232435567169355a96a6879909f083bd1c8f62edb0dbd198fd3f0f38f66625dfee73ce5b82700, 6e8ff4db814e419c642295f6d6ba58a8900303835b3026443d99147bbeed67a6ab47984708755821759f8e818a39baec + +p_scalar = 13 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = fa0f1f450390d706b3b6639c539802ae23891298fc38538eca109c3b154aad5e22c4cc5f41a8c91282a2ed4abaa84c08, 5e2b84dc16a8889bea2e23887d9b498dc0a586644980cf3c6e8f4c87900d09bb5738d2c23c25d153b94871a34f23de2f + +p_scalar = 14 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1d1cdf7b5f22346598ca8dd42d96c936f78cff0cd467f03a713466708cbaffc7cd96f20591e71d16ad610a2d94a70ec1, 546227efad1404fea1fe48d4b8e74438bdd259bc0019ecd466cc04da2332b20bda0ab953cde7d7001d85e76c9f2b249f + +p_scalar = 15 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = ab16c626dac012b51b1a0f6c5df0e5372e59ab62bd9ebe6930128aa06177f75d88e0d496dd2f9e2108265e510422ce2f, de7db0beecac3345d9952ea55315a7e84babeee17ad832a6d9d144b675eb6f66558bf560c70e84157febdeb5ff73a218 + +p_scalar = 16 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = e082882d69059095fd7a8b13f0681fcac382472ebe0e1fdbccd57831927ed783981b788d16f325b84f595351262bb775, 98e2963670327be7af037b8dea7f6322389b1207bf2f030884e54b763407c8470629d02536a89396b2e3cfb70558e023 + +p_scalar = 17 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 80826a69eea8f22461e4ca2b905432f01c75b8ab2a351783b9d3dd25429c0a18990ed20b569b8ef6d1b4e74d12e3683b, 620334f21ddedaa6d7d2dbc8a998e73e0fec76af150dd38185275ecd5ad83140f4335c0e59a1b7ec803cc59513ad5452 + +p_scalar = 18 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 4f13f901fc55723f38076e8fca77d74f563361909bd5c2f7540c045a409c930b20c1b8e0d809afcd259f272cfab816a7, eaf7f719da5cfd36ec6a5786995b16fb17d88bc65f0652c520aa8605b4157d216727d52d25db813776f6cd2942c2ef3c + +p_scalar = 19 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = c29c6e2ca5bb73313809ab50de2480249bd51b99208abe1e57d0f3d2e2be174abb280dfa3cb3fb361e93722758ce3b83, e01904bd1687f62325c1e5c2b3143691295d0ae21571bcbbfe9d70fa6bdb5c327c3343b06ff61c6e66bb02d29eedb0fa + +p_scalar = 1a +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 37a45bdb091cbb80f14b309f03fa90f2808497b7b0bba4a76efedb8023bf0b90b0391b37897b93f56423197d2afd473d, b82675620f6ddbe340d3f79d9683f702a2aed20662bd58d8da3846eb90a0db3724c0bdd16a1e92911225b51c7570a234 + +p_scalar = 1b +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = e8ca780e373e5aec2f7e8d509c6a58fe7228e2d5d18f14d08e0d4168482396f9cf1912934d78291da04482d2467d66e4, e87df5f43aecb12898198e6a2bb2c32082d9abf9c737a57a28865201ce25e414a7592809961d070bbd552e2ae4971607 + +p_scalar = 1c +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 55be5764d37da1a2d8232f8b4e492aa88fb0c597a4da3e15550e0bee8ff22c6f4169b4117b3c1220c76afaa373b64643, fa3235c018677e8986dc880407147ce63b71190c4fcc3eede7b42b8cc52967c46008963a78a011f00e43764ad7188061 + +p_scalar = 1d +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = c8b00ae8187cea1f2065b7cba7df26e43dc22d490e3feb0fce3c15ed55c9764725846b66780443d6019d6ac5d3021470, e2d5e3fea6880e93090a818e6f37dfcc71924ef4bfbafa0454e872d93317ae4bd6c3e9b5df37c21de5ad7b6079a2212c + +p_scalar = 1e +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 92cea8f4c4360dd87002990485ba414315f9abe1feb6b100519b9fd50a18323276aad8b8131263886a7a3464d0cbcea0, 6bed6d1aff07734d0a96bb95d8aaa96d693de4d6095e980dcee822fb2b85be22e7b9110222c14ea92393a2e33ed8b75e + +p_scalar = 1f +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 6c07c4040a3305d11afb51a3e3ba8285d42f7dc953c149652ecf8340f0df4fe6b6e7ecdd9e821ee6a39c89317c8906a4, b8a5c18a9c675e62a4c2f292c941133b2822b9b0fba585e3bfd56454bd14df2143f59663c8b3b4f72547cd78ed803e25 + +p_scalar = 20 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 5dd2a4a0626b3d793a9865baa631cfb0ba8953d612e8dc871896b9fcc651b1dd0d784cf208f779d5ad852b878c0a64a4, 3aef526c554356608c4bd8da4ca4b00fb434f90ff5dc884988cea0616bb702f65c8d203c0d5ad402eeb7438e9783df44 + +p_scalar = 21 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = cc9e97a46c833e9d68af622641d5c400da631fc160f09efbbbc7c7ee955ef3afdf330d9d5b943c8661333a382fb3ba63, 5802d49e6fa8252890336c5e473cef8d75be91464490f545f7b98315b746f46dec409eda3df61aa18028c172c59da189 + +p_scalar = 22 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = cdb55e6ba07b7cae7ec2bc1cd50b3e6d9d6ac102b4e2520145700722abb9102f0648c2cd2d668c4180b309dd2ada5bf4, 569b110402522db1fc3faf5f9eadf8d9fd2ff30475894d2961ebe75baabaa83bb8f22396075a80b7143425f97925c6bc + +p_scalar = 23 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d6149f75e9417bc6832bd8e34fc7852365f16273a02583fd4a508620dde6bd0abb3800d52d7c2fb458a5b5433720ec9b, 4ec57527cf1dc0d953757880ad332ca3dd0e6054d70ca111affe7667677f6d5cf31e7f765aa1f6a9014fd917c2114ad5 + +p_scalar = 24 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1608643883061d376f01faee26946e789f82b7fbab52606ca39180d45c2c7ce14a13260770b1b757f216aa2531238ed0, 096677847f9f7a4820cc112848cbfe4e95cda713cc0aa98aefdf6be73e9802dee2ee43a0291d7ec7a68120c9f04f8843 + +p_scalar = 25 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1eba28f3defc58b59261ede87ef27114acb60a7597482b86a129e2dff5b54a5d4027704bb5630ef20202d57de44f61a3, 05f1f848017a407ad7b0344a9c735cc84af9b6576bfb82e0d156edbca2d35fcad0e9bc29eba6b411936e3f37741aa761 + +p_scalar = 26 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 47ba96091da7b1476b464412bc9a48c7479ecf018173fb32f3d752f5ad6cbeac018843c01c0d77024703cd85891f8ffe, e0b9996badf9e70ded641ceb68bcdf5b0cff1e39b7cb8065251db867bb6a946b783e7c3b1e5f1f936e50d916543ecb77 + +p_scalar = 27 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 587df4d6b89b1fc2c9985040b76c066536a1cd6dde9b62306d7edf642b7f006fd984244a8e3d2c467d894f80506e0e42, d2843ed7f8b69704e56acaa0e329fcbf49b91bacbc92601dcba3aac54aceac4684d4f54b17d6b8b8b3f9c7b9958e5185 + +p_scalar = 28 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 51c4b1b36a4d6e813b021cf316d7a9adae78bc3a3134216c86fcfe4760be3ebc43a53ff21beb359e6048c6949399c38a, 2026d49256eb44fe244dd362214b91939c5ff5f59f1f55d567007808c8f148bae207337a59615c5cab4632734a6c27e9 + +p_scalar = 29 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 8764cd2cda92245de3bc778895fd71ae89746c8d852ca03573a82933a80d68f341dfd24d456a201ead148e87bca6d14c, 7d158fd114e70e3a9866ad382e6cd8d14236293cb060a765a879f31ede9b90cda5389d1ef0c362915d01d3b97d14dc1d + +p_scalar = 2a +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 7438b4933c1e593ce983e169ffff96c73fd72a308f234c864b21c4f3eb6c7e6231b22efc5df46c6618ef56cd5d76b881, 2497d63d0ffd4491affd6a97b8d58e8a18c6049e1559889cda2f355125e1520af26a645586926ed679c5dc5d5aac171c + +p_scalar = 2b +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 35178bad22dab3935cf095a901fefb567314f5f0416dbd86dad9f5b239c4943d09112fc50578bc8c37fa935500846d44, 70c0e09c369cd487568b4f6bea3406b755071f0942f9d72043187556121ceb43e4811bd18b61ab67308603e5c9450e58 + +p_scalar = 2c +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 9c7e7754a320d35204ce2a21986c5ce6d50a288981ea36c2767b4ad7f8f99b51ae97af8bf240b30a1c5f0e5b36a400d3, a04d71cdd5e228c45219f692fd1abc51b8987504d822571a397fe89afa3852928337d5b10e96704d3ccc9ccf44527cb9 + +p_scalar = 2d +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 9c94c858b2ac340599e1c0c61f2bb599b0040c0e8d6fcf13ffe8e0bb39eb8f59d4af65c673ad9112d4c411564fddda5b, bd14d686247c5b7ae8b888dd42d50e61e906998948dcb16c14c4bb561a4a96e69d4d0abbae0335c070778729911127a2 + +p_scalar = 2e +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 374aa9069481ed0dd9c79db8005412579266634957719f5460976b01b472d7899f24fba649ddd10ea618d7479fc4f435, 03ac614c1da6382437d2a66713f6f2f9e6547fdceb14b546285e675be7a57b625ea6f3ce130a79bc9f104eec8023d285 + +p_scalar = 2f +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = ea5b37c5da233371504f21b1570cf950780abff7d878acd0bfb185125f5b07a065c788785f0dc66c6f888f7df0c668ca, 536201382058d574110ff96ed1df03dc20115e5d9a1f036e079a9d576704caff638fe8a6db630648b7851743ddbc812e + +p_scalar = 30 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 66e4794bae7d740062e5c5d3e73a1bc940d01ff53a7d2f3c4f504e06ea52bef92d368d48e7f30c2b3ccf806ab35bf6cf, d8e1bd5ed9db5a7cb7154ff14a36b9d3d9fa35ff625d5d35a3c35ef2fb454679ba7f9f615899220ec2cf9da2a0010ced + +p_scalar = 31 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 0b470bb250e4ea9e1197832bcea03f5647c56c115b6e3386a669156542e365a48ea5af63a5ea6fb8fa5c3aef697136c6, d2e33ae71d74d42488e19bbea4a841d0db78122a807d422c03bb7911b63614167293e8b02db682b7ceec38bdec4da8ed + +p_scalar = 32 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a820e8303a5d50d19cbf755b46f97ac7beabb91ac3c90051510bd675cb2ec3f1172cfe4ecb5af900a96763d2fba32d1f, 90a705748e7e3d5e90840581ec5b08293e4bbbec6ccc1bfa9edb9bd0f0cd4ead208238f9cfb7b9e57c560e82cf73baba + +p_scalar = 33 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 16634a504f35cb3c3dba16e9daaabc27464ae8d241a84de7a5e0fb598c5a78d91947c0caec4a22b82c4ccac72070ac8d, ae74fb823455f268396b761dc8c0e5f2f4ddbfffc37782c925153f3ca8fabc0ecdb2f9808ca622ca523e74074e9137b0 + +p_scalar = 34 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 4b820d9b31d83660252b48f5cd8d7d770bedaa85e5377c005687d1dca6ccfd358a944b316b3262328f6468656f9201b9, 3a33cc62345e02b4dddb9a7991a121896f1d51528087550792f5e99312c3c484f576cf02edf74605561a50c4351f80ea + +p_scalar = 35 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a8ba8f10e0f383ea642ec4e615c3aae2cf485c74a7c54b160b0110610f0422a2daed7c268a0915cc3b1bddc6fbde49ef, 120d1c1481336b7a5236c265b7e89a1d2d38e52ec6f9669ca8795e65b1d057c014139bbcf7610574d5dfab4c6a9e7afe + +p_scalar = 36 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 4576a6497cb8944248c075daaadd6150075134ebabd64a6acff00bd23c9b5a41ab2f15202175fbf411853add834e6c54, bdf1498c6f95d6b69161794484e14885e51e22682ecbbb44f40786296c4bb1587244a8e288032e0bcbf58990cb52125c + +p_scalar = 37 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b3fcd5d1690cd408fa5cbfda60f4554f6078d8bf085faeb3a4fb7867e3a142d6fd6622bc1718ec3cbcab5f60069f3367, 8b9fda8ceb31112b956e18c6682f05f9e8394a3441dccb07721cef83c2f8609d7d50dc54e7f59c58b1421183d7e0877b + +p_scalar = 38 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 7772a913e6436cc1e9981ea6820da79f2629ba4fd1deca258b6fc785e692fdd2d4215b4fc7a8baa1483350a5ebb8cdad, ce009b71f07747d2a901000cd90cb631fa7d9e6db6f44a8d49dc5e5114733de2d7e8619237ad09b42ebedca4aac04be2 + +p_scalar = 39 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 814d7fa07a78c189c052f3eb1c99ceef1e9dd1509bf446e0a14967dfac4bbf6273bae4c1694b8b0db14ba61cf97f865c, f57dc465b4d9209c2d1ecfaad6ad3e0370bd843b8c37e2a4f29f454817f65ec288773da65e8c849a5efe5b7d548b4fa2 + +p_scalar = 3a +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 104cec0666ac72e09e9520bf57acc87aa58db4ea4f96af4fdab9dc0015b0fa13341cf9d9c46785af941c5c257d0be180, d4ae66a086b256fe3f7a6a1caab704151ee96616f605a75e4a0ea855a964a826474b535f057fc7f560c08456e6d6198a + +p_scalar = 3b +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 9ba039679267b6463703435b0de64db996a917cf1ed0e31564473b595c322738dfca6897f929974caf467ce227bf64c9, 00cc90edafb9aa3e692645f4261c35e6904cb4cfd7b9c3315330d12284fa68fbbe4248bd4cca100f20f3d552c5add041 + +p_scalar = 3c +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 95bb80cece47968c61bba736a55b527784b7c2fed74cccd40402d5c4eb809f85a61fada6fb4f60e8c711d5d1c425543e, 722de40f4b15b0aed603c4d7b76d198944ba5ae06b757c8a5328f47952d5df020f1f0b07197d55d6f606d524e914846a + +p_scalar = 3d +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = c93ea049ef6ba0062366467300fe51fd5ff77ff2332982d06035e34f772ae08054fb5a34222241e848da1fd3fc60a6e0, 3b33eebae03967d64f59388dfeb992dcf225e6001ad8a898195877ac8f2cfc13c6b2cd3195160b5399bf0ee982c7ed99 + +p_scalar = 3e +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = cb4c0a54561fedf2d194b7054b14d11703b9f1cebfec21da0c7d749907dbb9af1e659730c1fb476e49a04dc0f5acf772, f6fd33dceb6bb947353cdb137d3b0558c2daf76dd456dc649a9f61a62600f544a0a164df29cf3eba509dc2c1de25b2bd + +p_scalar = 3f +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1c9bf0b0f1e52d1ef6159e519a049f7acd7e35f76e2b71aa7a50f7458c949f8f6ce8ead6149a1896c5c0e6d7aaed89c0, ad44c8ed5f5976170a508471c8ca20dd237642b6682bfb72c44fcb17772e80e572c5a09ce13284e5c4493e0be7dfd37f + +p_scalar = 40 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 4f5d5ab6d1b30e5cfc8e87cf3be44d56a309199dca57b7bde04b3d30f8a0580d957c980f297a9a37ed4de4f88e89b258, 77748f746bfb35aec11ed876a132c01792683543cfe01da601ae4440ef6f0120f02e3ad10f6e43fe4dec3960cf56cda4 + +p_scalar = 41 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b84c3a6a5fd4266f8b0350b2650b22534597ec8abdd5f002cf9edc15edb63c80becda43b0d1d279f8e469454839b9679, 1590dad75aa44e365d7993db37060f78e689c292776299225487b4d321d43d98495b787bc5266a2cf1e927c3cf038606 + +p_scalar = 42 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 3418c841ef19aa6cab34164b3870beb7acd0361f5decad089983c10a492b899ae22c691d99c0b909b60fb64e52990b5c, 4d78416af80aa2fb6d4b7f1128f293c5902cce5c4f2a515ab12c02e6d597baf65a7f2fbe3d3776f8930dfc5adf64cc92 + +p_scalar = 43 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = e462ca48e153035af9af3e4d90909d25556e637e6ef3d8f765d75edaa55d6185eac7dd3b0b634f686efc5cbc8b1772ca, 7cdd34755386b66bf695940fec9d3a06a66f48b939143ffce581ca12c0a61b42efb54e58bd87a2f9ad89c485f5ef612e + +p_scalar = 44 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = f6a8130b3a7741e35508c2b38bdb088aee34bd1706035fdea4160def7fe6923a2fd77b5ae6018776af78aa17286ac2fb, 2b984f17d03b99c1263a29e0f60970b3d64fb6a881f035febd88176d8fcf3364a656197694e18dc03fd1299e8683382b + +p_scalar = 45 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 59d65d78a3f735f42c86ee164fdd3ccad4bcc8b125abfd65cc66c8aa0f19981b5ccb2859a1115e28f8d3df74670c2752, 0432feffd8e2428590d361748ce985cdf53111b77d1299432ec51b76d42bdc5aa889629cba2c66b2fca521d883f3aa31 + +p_scalar = 46 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 2bd44119aa9079b7d8436f83a2ce4101a4c793741489a3c09c2e8aec0cdf6d91edfdd44e94cf7a32bcef0b6a37548a32, bbc20af538b960b5a3a666e82c5892143bf889a8303249483375299a738da5821d5d4f65989e1ac760fbea436400d5cb + +p_scalar = 47 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 0b4faa5a537ecd702b123738fe255dda27bbde143508ac5493ba15cfe58d0a92bf5731b3abb11441c42ece45effefcb1, 065815d78cd52fe34246db11f8ec6a99debb250e319bc8c5eab0d7afda4c1ce57986c3b1f7feadc295bb2f7c22137c39 + +p_scalar = 48 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 0966d45a6517888e2ac250f6058daca83b7debe494eaf32810757e2e3f599369f4445a249b234eff668240536434688c, ced3e2d0c97db2c54fef5323f68505de87ab07433c0f52c5384bc9e6546988b866326235288bc8f68aaa33871896c4e1 + +p_scalar = 49 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b89d83e72bf4673cb08db04de8caa7d29029a9252d3731c25b8d230bdf8b9b24a9c2a9b11de8963b43385c32d851a702, 909a50c483675e9df4ea8bfc78479c8cfb1de1fc6dd9a5a650603784b0e2de90607649281e1729e95702c6411e0dbbdb + +p_scalar = 4a +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = ca50bae743ca3e45a0dd8e3cc10c4f6c40d420cb5c36dc4c02ae1f9150f6a5cc7f3bc516e1b24b64126d4cde13dcbd9f, 53cf2923ca46546146228db7428f7a38a5581a9c35e612f0dba73610ec30dd42ca22922f8eda2e960f8b41171022d4bf + +p_scalar = 4b +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a1e0ae0fe6ca7a154a7ee23df367b5c85d4631b4392f8f665b28cf8991549a96c8cbc40a420ab7ef6b5d4014867303de, 02bd279dbe829a9d2878ffbd6a801bba9b1dc61c0fbfd1e2989d5496bcf5128d5ace3d3aaf0546fed59aa11fec605d83 + +p_scalar = 4c +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = e677b97c61007b808b8d434e90bfa219a7253817daee85404552fc68956bce558c547a520c8d74e1fb2f775e4230e336, 1878e3cec6c847f09be8d23ce6fe11ddbe445e6ee45c22f9585965db1b07aa3f6914734b9fcd9c064015190e08e5438b + +p_scalar = 4d +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 63d23607fa5c9816742e060b28a126270ca930b998ce78a327ccb6c0212a6125114a9b40334793a79f2134c12a501a3f, 2bb4ef8acfd302d1319e3c1aa8d6be5922fc6affcf36304deaff7af1b602c3c1cb3281d00cb2e2dc88b2345c13e06e23 + +p_scalar = 4e +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 02781ecd4db639eea1560f9775dae55bd35175d9a506191dd3338ff4b743bdfc47842147688c1ced3c80145ddb9f0b60, c186abde517042932b85fcf8b1c370d37bdc719b3b585b043b78f3624319ffcb939d400bd3ba155366c5cfd3dc231ac9 + +p_scalar = 4f +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 23b245a5d53912dab3cc818a7069cb7c491c312dd15d01f0e58901a204ca55712cdac248c3b74585ca11d9d4e9a6c224, b468d707e2854daa6be399360cfd7e069e84cfe4f79cd14cbfcdbc161146a13d5fad14c0cd88aaadcf087c75594f4e9c + +p_scalar = 50 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1e8568cca446324620fe8c27a715ace6dd2ec6d351fea1dc49066428b121360923e5c6b90e42d1f9194924b4ad0a415d, acf544bdf9eb5906469f4a101132751bdbecf9c5ec87197043856fc39b7b9be1671680e226dc9c88ff3dec4503318195 + +p_scalar = 51 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 0984c2e37cdf344f11238a859f436faff2c3118feaf138afd8cb3560e07b1bfbde45473e86c087853cbdd3cbdb06f682, 6228489f68ba4781a21c729c51d8f958fefb85a11a22d872a9522d0fe70d9c816a65eb2a8c905dbf1ef7c3e93c7da7b0 + +p_scalar = 52 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = e6db24057f12bea3dfc6d038305bfc7c87e75dfbed69216bd6021049cbfbd0c2e8c09f59ec5cc866783cc5bb88f82a12, 9ff65a61432cf2d79614842d0111801a128c900058cb66b01bf2fb109f97aed67b05c629b44ff8449b961eba485c5d2d + +p_scalar = 53 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a075b16ac03d7805c25baa03520a8926eeb88ca1c7a4aab58487aa0d4a6694eb44cf847ed2f05eb48e61f0bf44e94071, 88c201259631e30648d5832fa9c3871bf55d9d45ddae432530de56a8b619fbd5b1c3ec8e9ff69bc13ca85b76ec268f3c + +p_scalar = 54 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 00eb5c040d16b7fcb048b60e740c04a52686cba73934e93664a8bdc7c791db8094b80b8f691e858b3c712c3c6323cd05, c1a39004c52046be23675426bcbe02b6781c1cb2727eba5feb1a8d0de33161f1600347ae28364a4f7f3f276fb2237d89 + +p_scalar = 55 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = c835025446e64d4db0a08fe1114e6f01d953aaff73256a577bbdcadd053153d82148bbb88207255a935d2cdf9b06762d, 93de726d366c0dec5dce7c601d76ae6a3c2baa2dd350ad0d8bdd58d5f4141ceac6d551fc8e04169618304528ff243ea8 + +p_scalar = 56 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 94dc48fab7e8cfcde61e6c2984cb7e449e30229d0a06f838361494cc0b162b571234181c1dbb4629c7364268d94ab449, bc29e690721b7a85ebc3917cd36d209e5cd08f195f3c1e5a8566ef2afe3b86975b01a09f54df4c80f281bb0e764997f9 + +p_scalar = 57 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1c1b3417a500bb22c4840320387b6b2ef30a928d9a3c3af1df0ec1ba8b80919559424730109677754f11a02e4aa0372e, 60fb90511669019742537e77f184b248ce6bbe8a18aa60f62120dbab067b576fe7db928a586f697e96f1193940cd990d + +p_scalar = 58 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 9398236759e97922f158f85541bb965c782840d1edd794907774056232329baff0041e2423786267db52eb03d1db891d, 3be5902bcea7c2ade50d59ce11e7a67cbd7b9ae3c198db4bf80683e20745bcfc590ac7b2d0a332efb4bf33481c7b8873 + +p_scalar = 59 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d0d105de164b7361d63dd29d19e0e2b667d3644ac8e55b7b463df30b0096721f18a49fdc4bf163e00c62094b2d71d4ac, fe3816c64720c80ce2d7dbcabf469d26eb88fef6f4b21b3f9a330faed255dac2879e48e3df6c30811a79a3b2fde8e771 + +p_scalar = 5a +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 4347b760969bd7f7b560d7e63dc77e7bb34f09fbd045d31e28bd6aae6e6e8e57672649def3c36ba79b35cdf7a7871029, 6031b8801482c98e1001a0af8dd013512114cc6ed63b8db6ad0d3541ec292413dc3151d601531272d0e9e5f8a1ab691a + +p_scalar = 5b +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = eb0f52348bf223b0e7e7382759dc3eb7b04b977d42d74f5fa4f6e534bbc2618a35c2421b14ae3f635dea409c9cba0858, b83538fc0ee9391df4f64c4265477b8734871f379c5d345ff62f4cce6dc9cbc12fed7ee4c021d39266e3ae99f038aea7 + +p_scalar = 5c +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1031cbfcdef715d74efeec75e724f56cb8a88d32c7b6b5a626905570df79b6048f97bc3df1b9f55b91b6e58f1036e450, c1f7f4cae5df901da1bc3e946f0c72e2c2125f7d57596e065b2978e2b8d52dcd31169bb7d9356b23551529f1d234dcf9 + +p_scalar = 5d +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 813355b3430aa2d72df91689cfd151547a3545de7cfdb00e1c634764b16142cd1b1cc24f5380675eebd14d71e32d80af, 3f8e0c70994062f638e4c6ab6f5d971aa8d5bda48e98f234018357efc34f9966261cfc071fc54486e9231d377a0d3581 + +p_scalar = 5e +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = ed9602dc7912de8d89dabf40cf9eed19f4db0ad3ad1bd1192e2bfb0c25998b5d4259f70ee435a0deb134a04174225251, 7bc3be41639313209fef39c6248c25eefc0b0623143223f782ea0dbc32343506879cd4b6bf767610a7a492e83e606dec + +p_scalar = 5f +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b8f42fe52fead1e4257b0bb5ad7f23e10be90befa27d2b794a607b9d0ef989779f74ca169bc0cbb10fc0f2630dbc3c91, 4492b45abd20d7919ac9b212aa546c0673f09b17c4384a6eba33c0eb22660603afa0181302869e8221871bcfa06c4a6d + +p_scalar = 60 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 8bf3dccc39c18b96cb4aa43c9741eb4226de4c6581998af2ee21597e52ce08f68fd61e31148840d4dc5293851d15bba7, 4da80493a5bbcb5b311f7bd0a2a97f47062e615f37cedab47abac690cfa11b0eaf81dbf9822783c6991e2a26278d67b1 + +p_scalar = 61 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 8c081acd170d807f87b1e51bac06961610241ed16fef9d9d8f273e3065278f98c1f0db004a49492c7cd2035d7f5c54e2, 7c3948713b0fcff9b3c1db6e3b0a969b34b81b1287765c61282db10bcf1fa22b1b14aaec2979a40bffafae16e38c4a67 + +p_scalar = 62 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 458ac76d0f40ec396e6880f15c434085ca861b4d97740fcab1bcd42525fc2c50f05e0ddedb37f6ddd2872262b0a9e00d, 588efb43001fde0cb63e8243d9d7df8c846959120049ed20ffc36e0aab1162a528fdfb218f772d25a02f6b017b751bed + +p_scalar = 63 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 648c5f00bb28223ad49cae0982d9d6bdb9b2e6b479c8f8bd1b41177c708ba469bb4f9e0f41aa174e6e3835a9b05f84a1, fc1e9674cdd29c42e08b6c4e89e6f2672908a6272e5f15f7998aec708f7db81d01cf69217e5f5c72fb0b7a8aa2733b5a + +p_scalar = 64 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d884d30b2f03f287419f4d2eab386382b0e595a155fac50e100134e2338c10e0f9d9c4dbaf282e57a350c4fc01834066, 12396f36fc1d034d75751338b50246d6ef016d9f8afcb08dd5b22cabcc25394a75eb8dbfb6dd6680b581a6ca09f8ae9c + +p_scalar = 65 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 7e2392bf7bc814db9cdd943547a18710d73b1fad8b8b5cfc73ddcd2c2eccfb1ab539f5fe50c66d708e66c6f69b8adeac, 8c78d2c9e8fd1e216f649a90bdf13efb58c1e2650ac17fabe010be7af529796b001223dde2983fb26ebe6c4093708b17 + +p_scalar = 66 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 180783fc39489b2827c614bfddbdd7a57befff1cb90a319f1c0f6241bb2863c829591fcce7274c8803802ee80fa4f860, 9f5b2dd5d9095a20b3937037c7e8aefa5b80425c412a1ada6172a1f445c5fdc4ab9b4514e4c8c458d576509b865161f9 + +p_scalar = 67 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 590da88e64671048113a7902e3da530d1ad95a94f23d84fcd3f0d14329c21de1ddcbb10eafd402bdd24cabaa21355d5f, f3618ec88d8c2412291d2a59d21bfaad9fe42e3ca7052e3c681444b12790b201e5ad1b1719d191f40b5a7d7e6da40f25 + +p_scalar = 68 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 7117756e39dcddad381f4f06f473127497d1e75fd9f408b53dd4f91683002cf1cfd364cca03bfa6367126ced901410ec, 12cf98f9c880fb304f9bcbcdb1d380890a0bf8ce1470123e0caec3c46361a0625c462290dcf3d0ac1df90ec569277518 + +p_scalar = 69 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d0ab3e3a99ebd09c022c75441a806542862ef39c275075e3077f30e5dd2c23bec367d6aea6e201bce6e91985e5802845, 33c518d392768c5a31450ebaead0e6dc2c2a856ab8dfda9fc8d3dc5656e000725a30c9af5652ec94829810a0266fd747 + +p_scalar = 6a +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b380f170bff65e1c2633179cfa6a8ac6442e0f1f36905deda01780587776c7fea1295b179d724fdf3d303c72138de192, 0e396ebe68e2e2a44a5ce29540ef369ff960b81ef512e7b4e1f467d4b9cd0f5af83cb47d7e4e82c85099312a2a6feaa2 + +p_scalar = 6b +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 77964d793f740b4850994c4960a91622ccd4f456753f40d027c6ec25a0075d4673c21e204f761490d718e8e1f4363f23, ae7d58e8d503120d1e26608738bc71c66a2952ba479a6b9cb77c8b2e5d80c05f7bb038641be6c2860b36aa1e09b812fd + +p_scalar = 6c +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 2a532f0ac16a417882f24a114cb0b8671b23e3f7afef0b5d589f30567bb8dad3d81b74529a67044fa26631ef443c7161, 9d656f406511cfc08b664ce6e12f221cc3a74a19c3bffdb67b27e171992bac6e567a255c91b54316d892e8f1bfc7c314 + +p_scalar = 6d +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 6e3c27bbf13f24033cd18c33b9cff887a911a58af0d93abb5841c5f8a8dcbdc89c7d35833cc1184b0efc2e27b2deb1fa, 0b3b93a9e67388fa781e65b180838a978a52cc350a5ebee2d24a804b0a9f250aca3226f3abd6b3faa4c6e8ee15acc519 + +p_scalar = 6e +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 26956a5b83e5bd0bfa63d67feafb4dc8bdc1c92475053732ce481ae68d2624c8a4ba394e85d138d693f846d4906ef776, 3a600687ef91f740488a5078961bbddf9e28d8d18a3fa9b5406386e38916beadabd914f900eb7ef4053d8f0e8f351c5a + +p_scalar = 6f +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a158aabcb9bdef14c3907b518b02667f27552012c727be036744720b50447fd908e0805000765fab8db3b74805be74b8, f6358897f7d8625639b4b847dcff260133071e06b514d97a5d00ab436c3cd9e5ef6a411a1cfa0469552205fd0b633a90 + +p_scalar = 70 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b4a6714762f45dce83f2fd2cd8296a52fb25e37c9710b70b2b5609d5504c81290d20370a5d66455a2e20654839d6e2af, 07d446bbba12dfb2465e614a83e7debeb8c197883557b977c1811bc5d13895e7e958e332f493b39b57e746425ea39593 + +p_scalar = 71 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 869fcd17ff86a9864a5bdb048d7fa0c2e9815b09139b7fc5e72215ef852bd27fd2c616d1bbe33572f85b86b79b0bda12, 5ef4c20daa086bb4c2f12e83ce4788a84080212603ce449896678dd5184edfd5463ff80d2999b2fbcd87ade96e250941 + +p_scalar = 72 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = f80f423bb48af0e8e53bd76b6e4b3bc543c2a97d5743877a559b40a286dcfd8831ec9ab137796cdcebbc6b4cac6a280f, f338e5cdf43b9b91b66b98c79dfb532f935f8addb23b5a1725af72187ac62ace0b58d896d4e3b0bac6f969582b773385 + +p_scalar = 73 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 274c69657350982d84442a4123c50746a97accf432406bfd33e868f326a488269120f7b3a043456daa4e673b34498f56, 3f3a420930a5ee248afd61cd30ede0fc2065cbc509ced139ff23c6477b75a478c140e24d13851dbecef948056a236155 + +p_scalar = 74 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a40dbba76a0c98442700a45b812fab5c2e56dde7119ced404060d22edb6e808b6d812dba7e29445309e7d232ccd1c14b, 3f52d8fea7e3993a82fb0a4636ef3bfd01f7b3c0d9657c7d7e64e9a13ed8e9a24b6aeb0e16771d06f5e3834263499cfc + +p_scalar = 75 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = f26774cd7823568b517a6bae23acba53ad9e749a9aea738d613e5294fe8579619532b30ea229d070fdcce7a80723559a, 8faf654f7d4f688c85ab9a7d400ea7a4598d64724d867b7e92663fa0f95109fe3934c5b31473fa846bf8985f51aceeb2 + +p_scalar = 76 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b8027be64a5eed689d19bd63befa48da4496f5a023133af12541da528e6a2448d1f2d42a406775a028f0ab7a080bfca5, 546c7955b5c108186699c66069c511df0caadb2f4bbafe3353ec47eb620c028bf87e6b6c22a321dcf7382a5e694f97b0 + +p_scalar = 77 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d2fc5c57998b057713167fb8ec9cf4cda4630ba1875fab27cd55e7b421cf9dde59f9078dab73bcc4732595ac7329d8d1, 4e9ac9d775bf5a3265e44e536dde485c146135436ef6481a298859b7662370b84d24690cf930631489ec9f3fa00ae490 + +p_scalar = 78 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = f392f9632f3b0feda03a6787986794dbcd411e349499fe4eaf07a03eb8994b40d3259f2810248af41b3ea621f3c6f15a, ac678a7865e25b379e40a6c0acd1f133c36985b9b3c8225b33419045c88737c67618c264ab283c770c8e99083f75edc8 + +p_scalar = 79 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 79cd3f1e3891db8165df3c959329f7e0c29afbd47772778a6c33d5d6ba6744e48c9a16e3a896ab1e5198ba40189dfa8d, ee51125e39b2f6e9b8c2f20607d9a48163e2c65748e90de46aaf85ab51b276790abfb09316fd719d355570f5287bfe64 + +p_scalar = 7a +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d109b62984083890da5fddab7e28aceae3da87e136a2812ddfffe0dd4cbeecde89a9a5422a1a0fad53b912fb21a3720b, ebbee398404882a8094722669ec58cc4fd488003ef88503893198baf14b2b31e0f1096c5d6c0669988bbf6a48d72c11e + +p_scalar = 7b +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 8e4a4f6321dc82a6d4d6fd78550418d24b3d05ee4295440514a9c3ebea80907b46b07d4a2a1018fe151198480c4c0b80, 8b3b9d12e5867522fc4543133da330cc757954f0b670bb84a57d50c160cf08167c3945fa8f877360e41b28095e874626 + +p_scalar = 7c +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b4bb1133ad9267aa51cb20d25f083167238df4864cb95a00bdb4385fa6f8277692f3dbfda1435507f9e5ed57d99f5989, b6576363085ed416461662acc304f6746abb244d2b1491cefba31da3a16cdef2aa5b6ae337599a9840b2ec55b0eea403 + +p_scalar = 7d +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 03b2dab245cf48ae7ad6ebad036703ac9436a8cf3450356d50ea65aa46f614e270f25677719d6ada9612b8bc3cfb44bb, 76cc400a8d0ca334832a58b44ff6a7fdaae0be43de6e7855130ac9be1ee6547020c048ce12b0aa5bde6ac2d6bee8f9e1 + +p_scalar = 7e +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = ee82cb5d4c686f3145940572b53625a29c14d45c4d73654245b97c7577b60ca7135cfd8fd9f0f5f0ee101c5ade346cdf, f84cc9fd3a1e1353420c5b2e50458073066298ab1fb507aa068cd344b0be463beada14c64035692c55eec94a4f3b89db + +p_scalar = 7f +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = bbe34e740f395db4a92bb11bd6e0f09d96fde63874231e0feef28f34522c62792aacfa4c569604aff7753246eca101ec, 3816d59e1c6b7f960c297cd1c984d06b61d61cc652e7f4f1772dd5bb5b983ae5a9674240fe752a555591a623406bc306 + +p_scalar = 80 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a6661cc4c241720a0336aab8777a16d2f313389118eb5195c0dd449e7c1c39840f4fa5eff21af80ae484fd9f8258030f, dc62354d5d8853a4d9a811225a86e31c4fe0e1fbcb5fd594a27a5f1b5fdd385add7697999b9e1c7d987246905810532f + +p_scalar = 020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 4ee443f91860144e0b7f54eb7e4cf44aa177ad14077777efcdc4753ba05068eacfc4718769f60e03c84f917203bdf6d6, 13008228729a0c753a42932184d3927143b06c0b5f389eb51436a70547324930aeeec827bc93e4abed8612b3bd44956c + +p_scalar = 040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = bab3aa8c60a8a7a71cd9c342e31644be358bbd6e8948b6e231811365ee61bc954043079cd23ad193ffec6674f65de0f5, 7ecfab0112f66eebb14d1c9b4d5119283695fbfe8c8af29176a83fc47ae85174082f4fbdbbc666f31f9aae615c8a4149 + +p_scalar = 060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 304eaea00e786d5f4d6a091dfab87b368618aa02c421c69415aaed42cca2f15037ba0db6f0f49278ffe3104b684456b1, a8a7f39ea0b9f791808035b692309fdfa6d786e7f62179f09f6b7dc4858f2bdd0a81c5e552c78572f41688b9d3eebf8b + +p_scalar = 080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = bd6066681a87cd4a06737e54f91d813ef972804fbd39a2bc6be6abe3b91f14827be330a822fbbe61bb39a17a7c34f095, a2f436dc0698e2756280be92f981d3e677ac320953faee4f856c51205a750fbc47df957dcb50297040774d1b0ac72a91 + +p_scalar = 0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = f20e5b8a6c7e9f94c3bf31d408595dea5caacb6256583c442822598ac5d6878a19eda013c543171e9468777a2b389b27, 2f5020a46277c3a7473f2ecad34250dcb7e5a5d08323f283d42b8a7b429771fd8c51a2f1d6c6558adab768c9f4575e37 + +p_scalar = 0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = dc74d638c785f1439114cdd012def474f016adf1c094b38cbf75bb57da4d6ac4f60262b5dbbb9e4cf3b6fd79dd3532a7, a47bc7cfd8efbe11739fe9ea34f70cb0c7e203f39c915949aad97a4862211e09e0ebe7863432f2b3215f9f2a5726f444 + +p_scalar = 0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 7b81ecddcfc2ca46b9e0718a467f042b49a6481891dc89ff535ee486e03c0851ae3ecda2761b94ba2d268da9b28bdac2, 76efb4917a4400ab4673c23fd4c7db8bc7d1c011cc7d8f381b2408c6389da1632bb5dbde51445470c516a1303e999b72 + +p_scalar = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a24c76d1da73b71a2ce33c2eee858bc3f02750715adf71d715f1ddc63eb317f94f1d082ed0e418512e7d0a16204be028, 93529833f5ba7d1e7d30553d5d1584db2eeedd5e5b8fe68c60a40a598afd219a1030e8f9fa3069ed610958f6938f3b7c + +p_scalar = 120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d061fcb5f69a732f7c30fc84cca23e9d1671eeea9772efc6276d435bd2141b0ade8b59ae0034465b3055ed97444bde46, c04827c357449a7a8165f90e7d373069ef875d5fbce1ad6c0cfac5ddffd0a06e313f72d9917ff1257038cb0590a4b0df + +p_scalar = 140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 3ec851d706c4d48507b3e8b9191a320efce43e873cbb2b3faa299008a84ace074399615939ffcb3b139d9fef6bfc08e4, b38e4855b2075e4d334e875f4d641b73229074aecb099ec8a74862fe3bc654db495a234cec3ce2a3fc27598e5b447b88 + +p_scalar = 160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 0c80134604501d21436c61161861628a33b080bbc3350983e151f53b35fce45855b20bc8b9ca1f6d3d7718adaf4b5201, 13b77a209930b29275dbb75bc326d08a7ddd686b4933eab396894f43048371c82c69dba7ccd2803c7a68e7f19c31059b + +p_scalar = 180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b82c99d2e7c3018092587306f37f0bed46d4729f1771c5d3f05086ec827e6cf877253434ae2c30f292bf8c4508359896, 585becce769edfb1301286a0d8c94319e5e52c115a287dfba3a7ccb8e9a3dc7280567b4066b2250a11febe244e97b7be + +p_scalar = 1a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = e9ba9558a68b98f9bd1e67afadc744e38aa99096770fda49bc4bcd77827b62965a01e68261e78db2d859799609f11ae9, ff718f66a3d6334dde7611e9bf820beb2a4d8cbd770d5a3ffb7c1683a3134b499764513ba0f2774da362cddb35b3cf7d + +p_scalar = 1c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 2f6fb08031e6e76933cf684789a9d8aee4b51dd0c9f579443a5902cee85717c53aace28e3573ecf687451ca71400851d, a10da9d2f37fed5b473ba83c43e82e035d36cd365df670b97b289eae69aef653d28c010a187f69c7b40c25cec487252e + +p_scalar = 1e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 79512b8991d197c27b814ed800fe704761c1b06eee7c1e8878b310ee8b5624461fad39ee9819618481657860b1637988, a5c217cf3370ac799e81a6a83a12f5fc90e1d178289438fffb78c28ec5dd99f3e8b49bf2b8844a509fbccada25190c98 + +p_scalar = 200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 4ebd334b35f68229c85eb23d57d002931fad8b304521d7e612449c4fbe35109c72913696e37f500696a1e74f51e4de5e, 512b2421f10a98238d59508a4445773f15547e41c5e37994f984fba98a832a8e3d4b2590ab9c21d183a47998d20a530e + +p_scalar = 220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = c51c0559814f7d9f39d71b35a50c71074a2d6ca29d6b6d55e462100285a8942994ee3cc9bc3e8cc1ef3a7281fad592da, 84431973e89feeecdb19650cba8830f3b5fcb4c90ece33d911a5f705ba3963ba977a9da1b98e62a7577c3de6acc64321 + +p_scalar = 240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 381e5b521d3f2ddd9386a35d4868dbb2031febb3374661eaaed46bbc35052bd18fb9294a8cf4e306085e33cd9273818a, 723faee0d982a3ebfbd8f80058bbccab451d9d51b6f3e6960bb92056d46253424f03660a6236a50e56c75c5be869e812 + +p_scalar = 260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 0dc856f4656e00edffe544b3f3263dfa315acfccee43b8b5e10e7ed2dae76c71a9f177e1273679c8fc9aea79a04464ab, 73ddabadb693e292ab3442bfa95b6db8da303ec64e018613aaab5e141efdad5a0f38ca039c5c9547732e537083052aaa + +p_scalar = 280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b4315ab11afe8540cf6ba7db0f63dc797ad61b8ca57dbcbc1f719f7036fb5a4ed86e85a483e43c268f0e1908fac2674d, 3ea75d8ef49242ba648f43739f2d59dbaa7984a9baeb69763167a764615478200ae6960f77c75ae2fbb717aebda3b20c + +p_scalar = 2a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 7c18a7a8fa5753e85b6fd841f76a7b01cf6220d49d0216138213e04ad04e93359c03aa457c714b9ac4645ddfc70e9172, cfad7cbc14bc2872b5747340ae8b0d6d63c30f3538bfd28a48a143f3ca8df31c0e68fa60dde97002278b8099491628ea + +p_scalar = 2c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 0005bca678d1c0ec1a7c4af600d31e7ff4a4f3afab047cdb8ce2db1f4645152c64ba3bc73d501e010b262f808f1915f2, 08b971756d2d7e38eb6b39faf23c3dd3efa4622d039a848db05c781a0334a7095d664efed15654200a12eca1901a144f + +p_scalar = 2e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 8f21250473e722c5d76624e1c9fe92200eb5e4ff0b57513b30bb969b7a4289a53dc876ac1ac8a2fc9d420780b42108d0, 2f8425b13a3e5b657116a5513b69263719bc16c91610a5ffd5954b9afb73fc2dfc3f76208dd4c7d2131ff93719bf5b9c + +p_scalar = 300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = af51c5bbf42e0e7c92f031be99275c32ce5ab665d8d544e60b06aff65c27f5f6264a09f3f9288555597a26ffb4dc8600, a524d72265d5336447375920ccb2b0a80326665791d3352618c02d6606c04822a7c045947b8cabc5a44d74fae1c84c92 + +p_scalar = 320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = f2038e9fe8e9ad7b08d7d0b167b00a8b732a3b217f4e0b07fa70e3732c9139e3c6dcbc31b570e7e381eedabc8f38b7cb, e80e1e627072b0e51c5a91f66178175a5c6cc28e16a7e540e33de54780a9a6a0fe4ab4da8dae1f6f3cf2282d70341cd6 + +p_scalar = 340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 308b37a8d48b9574d1ef46340be2d8415267ded09aa9a5c005037f26de2f444ac6d97d37e7a97f33c760823646dd14f3, 06616ad0db0742c4ed9afa666400dad08e404743f47f0c44d2752219d3c638a4e2ae9625c7483e10efd08788b78452a4 + +p_scalar = 360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 4ab1773e6c85c123d67aed02d15b1f9de20b10f1f1021adf76cbc49717204f9387590cedf4db6d03c3db1f37120b62d4, cdaa5cb4d62ef982d33d06dfd82ad3b82bbd59cb0653a72c22bd3ac43fba651f1d280695af8cfc65a3b19b4b879e799e + +p_scalar = 380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = e9ecf6ce198c99f00f6c5993c82e2013e2f87d5e2973be1d4200e00670744f159fc75c0aec6afe4324496a8b7a8a6d47, 70fd207c430346cfb0db45dc0c26c28c1bd8c5edb430039e7169d0042f044eca410b4736cda2e26c34208dfb74c827d7 + +p_scalar = 3a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 4a7788de2d65774a2c8a2246a3e93b3391e674f5503557f209fd4dea45f979bba7f9f7519579f6d40c595629484cba20, 76d049fa10cfa0051b8ae5cda2ef7750ed65cae4122be0c7e280d3a70a077d40518fddfb79c4fb656a6b3a6ceb96f0b5 + +p_scalar = 3c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 30568303868326be1f28862ef23931d5623d44b9e4a0bb425bdd4382a7b62effca4ca7cd5a03c014985c8f4b0614348a, 9266f3e9090a365bd0afc6a2eaa1516d84cddb6450c0f2449d48b7864e18f5640b23fdcbf53b5eac7af2d5f37d1890fb + +p_scalar = 3e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 37eea04d226c0de31df6b241f5ad41bb711e5b378c68c6d120f84bcbc82761b390c700aaa28b9162a408aa1b48819870, f6eba360a17d1187ba90d00ec85b901f370744f7dd12e22394e369f18ecff85f9d752e700d32c0663d4f9275bb3be3d4 + +p_scalar = 400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 7fcf0ecc91251b6e64f27976d5d7412b1a6ea51a2a883b7f340c8ee3ba4a3301ecf10abc47bb619e3afdee277d221ab6, 76cda28580691fdc2c8c6ce171828ed40f7c672a2abd989221c48c29529e4d33c71b74681d1ec1a7a0c070bfc9a4e748 + +p_scalar = 420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 7e3e4b94ddaca7970a21251f7cc002a4391e974f262a7c900fa492995a642da315257c37b24074d0000d342aee928391, ac4d8de8e7fbdfd3a3e2ce952754e5bd602003e8380b2fa8d4deb7e952773296442110fa173f71b837f3baf08bc1eeeb + +p_scalar = 440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 63102e93ff029787e2a938890afc827f951f92186359cf06536c999ce295c45100614bf206b7e166eb2e48c10bf4e94d, 1955615451d5161cb783176f1ef117c8c948168ee33d0c4b3f6cb359379fbcfa8cab208a6d78bd4054d68383d53769ba + +p_scalar = 460000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 5508188555d35077eab1751b07c4cf3c9cd6be7b2601743ac8eeeb6ad5b89ac7e6a752c4783e3da875218ff22509a1df, 7f876cad80e31b1080ac017bf9395a31b34de2691ee18cb6ef35ebc4ed7a1d7f0d9a2f530e1bffb71cea455ffb89bf7f + +p_scalar = 480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 3838356a53264b8a5239b5c4109797d6ae7b59c5fbe10a477fd7fd8eb3c2eff77db868f3a950dfa26e7a578340517347, da35bafb93241a0121950f007cd7d042c209b10a5f90c30c01e5527b9dbe5af49837910a96a705d37207bab4cdf573a5 + +p_scalar = 4a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = f27d64f3900000b28c140f1444bee3bf74ae1bb86f57ac995957f390ab2f9f38b6c4ad7e6725e6bcf7d0024dbbf692e0, c93e0a580608f90bbd32397bb8005fc96584d5679eaf205bc4a21f50d1af356fe39bbe0788233bdefa20da958d023979 + +p_scalar = 4c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1969eca437dd1341ca98c4364aaf2f73c0c88af6aec23cd24bea31ad623e7e55101f055acb1b1cd5a319340d6e6c0deb, 3fdec13a97bb25fa581a98ff866ee3063c2ef96b8b0d9d16e6613f16c291563a502366abd150a4f794fc67616879923c + +p_scalar = 4e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 2117cae94f663d08e5bd0119ed5225f74fed82fbb2d8dbdf78482d89dae531a4ad937387f2e050ade0732f6de3a1e252, 8d4600665985a453c66519d477e41ceba2a18e47164a495cd694ecca40cbe0d2a761dd7e61793aa5664b811d15e06487 + +p_scalar = 500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b942add81ef8465b860578cf416ccf69f307823e718c8aa3f9fbce33a82d37361c77a3054f1e0d095adf3d9a111792b9, 338563147ab01625940996b76e59d9cde0ade3d2340c3347066465723f6256f31986d10f4fead757611f3069326b8d1e + +p_scalar = 520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 5f3fe3e3209d9fc047f02c4abc4c0e4ed15761fea5957703efaa521a05781b37a23f342d40f5ab43c72957c2b56c62ad, 7157cb46734386bce998fc7d6cd2be7c38bc6b8bff408edbaa881abd5153c3490354f35dee8ec754e3ea6721a9e4ec84 + +p_scalar = 540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 84422ba89c2d7eb037b11137f15f0cd229b0341dafb73ad113fe0588ba057fe284c5d6a71a50c560fc9660a3c8808373, 3770f3097a3ab2ceaca17abfee91d2478f3214f360dbd5bd6f776a561fd288022857cfbff74c857bf4a6a53bdaab1080 + +p_scalar = 560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d2fcedcd2a1986bab43adf697bfedda152ae359080ec87ec825104bc4ec82e0f6dbc484f2356b6a44dbfa5831af13e99, 5261fda4c1925c1fa0cc0ee1441b396f0f7720215384d0631da230513cd2a7f508b26d973901b0a8cb6aeea7fba5287a + +p_scalar = 580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 0c5be4a1ab204fb0ab8802bab8da8e68be6bd7b92c078aa8716574c5e9ae3da03d081c0d7f15c9e3f534f145e2290eba, 54d4376a8a45a36694acd76e19aaf2c37aac983b6db13d2d6391d31f44a32d01c6d62f277036485a52da3a12f2c0ed4c + +p_scalar = 5a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 58ec20b5fa1aa22b08285f05e94af0d0e9245a047205187c5d74a59ee05637183b0b3ca6276cf8c41cecc6cd72c1dbda, 4f1ec02c9526a9f048b631552625b7fd338b50c7007ed51c98a85a3f92bfa6d1f401017164a37b8a82c98eb03eddff7a + +p_scalar = 5c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 71d663c80482a61b9e9c222607f4b670c77375da47644b079d86bcac8b5c43fccfa41da6f89ce836b56b035e2a0349ad, b9eead6d51f3682c75d428012b22fc2164b9caa69ce467aff61f34d58358ab730e312080b77cd4a44bdc18c710dc8bce + +p_scalar = 5e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1ddaad3e57a8a6ce086cf9d3c08d007d4980b91eae21ee2813a6eab45a5f233af7bd1613d7e0ea774be55e045320c643, 3e955126a81a59d3cca7825f07deb834ab6bee6e0f6707867f225943e83b1622b259aa24ff33c2bef82f3e6347394acd + +p_scalar = 600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 5016c8533573235fb1fae2fbf363100ac12df68cce52defb1004254501c4e17190cab0eb9d74e3f6e44e3f864b3759cf, 3e25bf2ce0a7984dbe389ee00ab1b789a540569ecf788d16cdb67a7ca5b1ee7075df2bdbe807b10d72b2149ae26dd164 + +p_scalar = 620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 976a426e7e387e5c86346adfc17b570aa537fb6be3a14ebf219a097cca4d32e7607683d6d30481954490d42249f884ab, 9dd33f7fcf495103740b47cdeb6949abe5926334a1df5215cbf896be7bab917d078fae93b4ff6bbe322ec0fa9b05dbe4 + +p_scalar = 640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 972877d5c351148008e952e365e5ebabea435fa0e9ceaf442a773270df98069e7dea27ea124874854df02a7d3088aebc, 82a0fa5c055e41ddb48d5e19e6cab8ae82678717ee376eac44486d1d3cdda0de1af541964738386910a97a08a65fb32f + +p_scalar = 660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 9c3eb2bcc338e60ca5e4a81611e943ceea32131487917fb3ff4d80e7182e7578122d7b16cd1909a4a9c5286d78c8e4f7, c578ba0bae6232250cb948a56ac704fe67f0783709fa36a7b3610be264ea29f31e36d0464ade815ddf1a75248db896e6 + +p_scalar = 680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 762b3406c6577d810accb4a7922d3b253a998cdcc8995cace659cbd6ace07e138540213ea7a3f2f761dd7692f27eed54, 3d82ec206747984ac97ea21d38dbd7b54928d08319b6f7f7f7f5add98c46732b80871fd1733643a05f624b0b81fbc8bf + +p_scalar = 6a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 8df49d947bc531c51cc8fa418508b201bd7dd40b7a34781499b5020891035d21e8d66a73fbc1180d5f29d3aaa7d9e25d, 724eb5e24590c870c314181f86c6c208c04be66e5143f1c4a93bb7e8b51f62eb7ab245e80d096e80a8d33a9e0f3799a1 + +p_scalar = 6c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 490753350b7e4afcb041ec67cf575de55f49ef880115b9a54771281390833f18b5e8876c499a1455bfeffd5356adb6e4, 7972f945009f16bc020897663e1b074bcc11e91d866c112957bbce591912ae666244e7e02505265a52b23b5fa0f460db + +p_scalar = 6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d93bd14b4b11ac38c8de9fdf7506b004184b98d7ebbb8c4dc3c2cba3492a416a313c0cbcbb713c2501b7f6985f7f481b, 17001139e9c1cb5a7d49a5a8d893102d9cce21c6e64c77d20c5a4533f7131e466d4228a3609187deb8eee625ae4482b4 + +p_scalar = 700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = ada548c3b46f1e376b9fd3f7f19df4bc7f7009d735b193cfd8e497fff172c7cfa80a8c0d2771235b46303171491ccb92, 0122c58fee595cf0cc7fc5ef4887bf23d6592a2886470a33d5edefbdac61546910ddba285187106678391557385dfd8f + +p_scalar = 720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 2d56966a409303d605de72b7f70a3994bbaeed33041120a96122ec75d132b62c870346945bf287ec264b3d9d11eeb9e1, bd4e11ef7138f960033b5ad8ea99eeaae73314f1990b214056f0fdace1baaa6455d3f1fe657bda944a2d59d718c5f4b8 + +p_scalar = 740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 24ad6b0ca28c80673f16d1ed3b5fe8d68ec00d9fc04d8cd5937a15f52a67b12bc1413da46682c7795d782a0778664144, 23261b17edf4c77ec88f1ab2e9428a4d2979148dc6c7b1ea8279c0a4d53f3dc69d3b3d4054d0587a22e1133bcd8cd4e6 + +p_scalar = 760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 326448a0597de5b3e6361a339e0e1c54fc3e322c7496d0809030804ef95021bcd40b4963d24a2b6eb9f1b4ae3e29ef63, fdad564661686c1a9f343b0dd787a81dec8ce3d8ca45e7ce6950c0ef933810aac9ec4351f39de788946a3be6d38bad81 + +p_scalar = 780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 20b358444182aa555d43a4a6191cc808919081881990c13c49b13eb95acc557287bc4d75b1baaa7ce3052838df5147e1, ebefe138cd93b2c77a493afab8f041eca2482f96df09713a72ecf4c6ff3a516039191f9d8dd16e188f2b65b698f4e02e + +p_scalar = 7a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = f04df323cee02f61cd5a7a956b1f77beee55d9e0594c44ac013ec26cee34c1dc43011b315c10da9bcbd0f599c8e64d24, 3bbf69ce23eb524e62019c75ee460c1830fe65422caceab95fd6b7d4bdc356fd4c3bc93dad13893632bfd92f26917ae5 + +p_scalar = 7c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 010865380377ba8f43a195425fed884fd7323e01a856ae6b6c8e22676e97f5af75921e487576c3ddeef03450e10e8018, def29fe91da5df8c2208dc13f5ee047cf372cd74226e7adb51f674806198412e39031a730f02bd7e83242f9637d57098 + +p_scalar = 7e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = eebb047e6d7c9413a7235359a60a123952d9264a3ba048ebbfb45e7b89486d643ee8c19f0b66d8180150d085890f1e7a, 8519c5462deb0512327cc059bdfec928225b7d2bcdf8790e8e1db2a7d9bd9a1e33bc0a88c290de96d5018d1666100cc1 + +p_scalar = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 60ad991e4e4eac458e5c12139ee4718f77b9b6dd6816b0099aca885c1a0d58e235414174e52691403c90a59f85adde98, a16403a3d6fbfaedd184b638908577d0a066f6d2bd5781cd345e0038a150c1545340b14ca43a02d53ff3ca97b28e09db + +p_scalar = 820000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1f1b6cc936184c1f444217e60b4b3953db3e9066d9772914d5968b29ac900f4c39dd0be4c1125a63782903630deecb3f, 6a0beddc911e8346635ba477be864d86208b4383b4ea87e2636b535bd4d52dc62b2bcac9d3a4cff0fe9e8f3d8178c485 + +p_scalar = 840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 9db0ee0b907f2cfdf5b944c9040b7ad4d4447c1b20eefa54e8804ab3329a0b9a9713a5e04894f486a31d3524b295958d, e185803564bb842bb06adef60ee8d432d4b835f9dd2b21101f99c4a54d63c2ffcec8dbe057cae89bf4e5e0c6ac7b5666 + +p_scalar = 860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 2f6bdb104cbbe283f9c8e74d26b173fb5cd20671daeb6361192707699fd1661b8ad7721233e84ecf88f2de40a7b3fe4a, db87fab8a373755a5636f4205e779451cbe80ad85c00c5aef3ef46f1042fde764c20f4d91981c7ad073ccc7a27869ae6 + +p_scalar = 880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 6847c20de211c90eed3a6508ea56be90d9b625dcf9ce0cde6459720f8eeefff520d0c4740dcd66f6c9898355ecf2a473, 9383f9a522c8f088b631239cbb8f18ab35370d882eba47ceceaa78b8afdf64b16ddd154ccfdc2e91c92794138e58c311 + +p_scalar = 8a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b1516b4697bf25d1c1c0468307a8949bdf7187596ece704b26adc1564300df17ec96212c96174bf6bb114c0747f74319, 234f8b7da26d270d3ec2ee3caf38512fab41797ef6ba1c473dc159efe0bd95b5626c2de4999b269f627c05afb749f7df + +p_scalar = 8c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 02a37213fac8a477162aaad842f412c5aff5505f1070737afb8a08285bb5202d1ff2549ec4c9347646a95735f8171804, 2855e2dc8727d0655dff90df8191179819a817387d2fb6ecc8c56fc624e1a5be64195f4c60399878fa006dc86cd0f71d + +p_scalar = 8e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 80e70362a61f6b8e5b9d91d31e8f6424ebba130bb3663e1b6a9f149f55dcae398360743ca827378dfa8cd197722395eb, f1e2942a8d5c7363a0af2e50a90f98b9fd280fff71bba7f6581ffe8717c49efd2f60851db832c783f0a9601e20f2693e + +p_scalar = 900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 3a34819d7eceec8835d9fafccf45b75b22bbd01853e14183e09f04e6223a0ce868ff316015c6f7f5fa070e22142403d1, cca372c94887b183e61ed2fa9a17ff557188260fa0812395f37ffa9a614d5864bcefc9297be2eafa26308a982ccd9d2d + +p_scalar = 920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = e70634860b99a9811d923a955e2994097a0a8df4a85fab6ec4a354244dc0e8bcd1b7191b3cfdbab92ca47e98ac1b85fd, be30bb9c9ae22a739e20ca5d78d04cc76fab008306d8bb083184d3cbd8b8ff39c7d3a6ac56223fc8d295a8c53bf99afe + +p_scalar = 940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a6e5585e996d20338e857069e462cfa8f60ce5d991f1d4875c240cefa3ef520288322d8bc225ce6edcac39d87c1d9f4d, e44d741ebff7641a073463d95acda4738b4ebbcdeb76dd6eacbc5f5d5cdce112326f3ebe06f8140f8f698a5ba9d7e195 + +p_scalar = 960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 0a14f23eb0470188da64bf1e5628f2863ba37c232de1294438d28dcfa9312a5e224f404933c384e47b7bd39f39e00e98, 3bd23cd7f6e987117c6ccb4e084f8832807e360b62edf959631e8e954b5513d363724185fbb3c0d4dab94dae3e1d8610 + +p_scalar = 980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 6189f5e41a991ea2da296dacfe7d778f186d3d934f810d8fbac785aeac0939e3c7c9e5f1d27d1f312bb6e7ec3092d0b2, 9098fb861dd105fc8df32c6f72ec9c025bb85ce127cfbb59f628e7b78e692056fb550a64775b2335f67086b269cbc9c1 + +p_scalar = 9a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1dcb9da2e49ff45c55a12128a50853d180f745e27f7209ce78b59db06f2c572163a394e1404b5b23cbb76478b52110e1, d04b71d399dbe1c8e2ef514d62d0f2737abbe81cd62cdb014a6ae0bec24b6e0be3d26c9c7afeed373589b9b4769045a0 + +p_scalar = 9c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 9bace7adf8a7c0bacccb784f77921ca4d56ec8f223a1656e16ddefa50589fd01f3dc472a8e2c58e9aa452e81cdf60f9a, a5bb92178e45d85a37d7033885de5229fcc9b83c6d5df6aeca667e877c31798a58f3fa853cb1834a36b10c11ae0fad1d + +p_scalar = 9e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 7a51381b1772fc22ca98304759d16a8b665870899d73fb3bfb3339ee5b1cd14117a70200b441bfd0f943b61f038af8d1, 96e887694417a0e69651972fd1ec50d9c0c7722a479f85af48a8a614b99c265aa2e52adef33c7b57adce0820d39227fe + +p_scalar = a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 282358aa2ff95cfe76ed6fe718bd01b79f67567fe0a7ad0b990e3425ca7b8369b69e308bf8ae956575cba9d530a3ada1, ab27ba46c269d3eb4760c517e2326e9bab0799b3d9ccf87d69644d8d49584705762eacbf3329837ed72d15bfbef077be + +p_scalar = a20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 6d7604cffe8d69d781c5409e908e92f8e7dd1034ac8f1eb78fee1bd6e78c1828a32243ccb026239500cce541ad148e09, 6fbafa9fc0365aa73a0a9afccd9a0b0af6ddfa8996aa60d27c23b3294477842d6cbfc6a85c9edc13def7cf22d14d8e43 + +p_scalar = a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 30369ea0ee12356a6aed101a5295e728e964dc9c9aabc3fc885253779336b2b939b1a9c697b17ee608ba5b61fde4ca03, 535f86cabb971be661ad79dc17ab28302e93857a5e5a1afbc4d08554aa6f8af2c589610e2060b83f1f7e1fde3717f1a1 + +p_scalar = a60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 6f261a720ebf3f5d30519b089ab91b5eea5b069985bbf511bd196739a548a22078cf85c78720ea377868bbc67f777fd8, 090f193e862f1739927d1b495a9457f4236b3088a6bd9ebadc722f5b116ec26a2a39b5a09eb96a1d88948cbdfcc19ed1 + +p_scalar = a80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 33a95de702001e8cafbf32372a69ad0d093c3dc2769de89117779f5e7bbc58fef517c925b79aa0ebee521c0af93098bf, 0da686a7e905e4e91a3263c6354cc78efb0f44ccb035fad00e3f96dae9fb59b84c865c0ada438265c4cf5039cbef5d4f + +p_scalar = aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 35edc49ca54239bd0adc36938b9046147f82050a305601877ee84419f5dfa296664ca68b46f5d9044033ece91c1f582e, 11d0188cf60ab49f8e3622a34d5ac7164fb34d2c8f36dc304e7f07faaffb02a5cbaec45235298c1771f35c54ef7abfde + +p_scalar = ac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a1cae78c7b491c4d752d98f6018d7c6455d40c1b2eb7f0fd55f7680599440d4bb16ca18bd8e94e49291d65c801189d9a, 80784bbed565fd8df2155c8c16d9a90ba7c4cc955a97c1074706b6720556badf44b76a94c31132d8767037397099472c + +p_scalar = ae0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 3c9e1bb5534739e879ab7a5bc5b76b4fbe21ff8d02a855fc4fd1fd2cde268c8c809a6b6cc5a362e31ee1b6033b28bcbd, 607efe8f93f6250043fa333a77178b50fba0a540d96f3093c53e3d2c0d6bfd5c3d5d4ba17a5dee2f945b26595a7442f6 + +p_scalar = b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = f1d5b458dc7dd67fd6f1b8df647cad2f805b4048e097047f15b28ac7b871c3f3ee702764a35d24ea8b2fc4e96484fd40, a09139a277d6ca1e6c52df18b34140e5d7c12762d70d7b0b50eb8ae16aeb74a909e7a140ded8b050cdb3ad64daeb77fc + +p_scalar = b20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = fce39cd1e1a9d1708bc1da4093b5b983b727f6a0f7728c1ae7f34f712b796613950ef6a86c660602cc862ba801631411, 40f67e942f5f5010bd8f326581138444ebd0104e1bce69683ef160f5d38bde87a645acf0e72cb5440e618dc26b6cca85 + +p_scalar = b40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = f08cbfe771c4d06186628102bdf579e6675f12cca4fa74a94ebfbda7cf3dab12907e4f38199c51764b0c7d0c69c284cb, 7c3f6e6d14efc01fe3f8ea686db4514e7268757eef2e177e8352d73c8f3f483f492f2b73b38d86ea6221c6f2fc43e346 + +p_scalar = b60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 0e1f061a92f572f08000fb5849e023a3884a0bfdef058b6faa278acb01a177dc1c919775c21b9dde3169bc090cc65977, e76f6df9bcd64d74b1a6e8397dec75bc60d918a106c6ec23bb073fb50f65bfdade195a617df28192d33690d1241fdb80 + +p_scalar = b80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = e4c35c2244ab2fcc5bd45adcdc6938b91588c4712a3f012d38a1ec5ce16b874de239b1d404b6fc45494dbd2665925506, a914fdd7c73556fefb9e9ce7d9c15da935098689a44f0220c5f1aa3867d5b6d66d563c4cebb02c1178342601778ef75d + +p_scalar = ba0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 2d2542568fd9f423f6d41b65310fafd4a5591868498f151f764ab40ace8713c9023872c88f2d14ff40fd181041ad343d, 55bfe99b941ed913c624012aafd080306b6ba1aed2cd3585df42566719290919ac744d081e64daa2ca5e9ce9d05b117f + +p_scalar = bc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = fd96bd168940c7665927968beb0f6ca5717c302a766b69dad2d9da967e155bd5323bd638835a4edf2f7de141a48da000, 2ca57dae6f1bce9657c95952ac481916770ce1e9dceb3f31819c6adc5c2a8556b4563273278f6ab007608ac75ccb028e + +p_scalar = be0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = eb7c7b187673dfc835238e9ac5d8b3ccc2493d3db86726814381646777c6b7eab211af35bed7aea0a101c2f02838469f, 75f8daf946121ab30a2a7e4cb30007f68afd7f7eba32b20df0596f0febc4d676acfb32e69611d48965f7bb9c8b157877 + +p_scalar = c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 024cdcfd74a513932dcc51180f94f4d767ef024eb3dbe034f4ac2b677dec20d2f9fa4483d8b4d6bcb3984b176c0f3509, faceecdde21041ff5f3f019fbfbee3ea1334fade7e84372e4ff31aa98f9d34f3003e707d2c58beb00e3f0153df185434 + +p_scalar = c20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 217e60f334f621e52a4d3ec6d979444c99758103696866db3ee3d96da9de154c65382a2312055ff2a6730cb7311cc98a, d53087ca891c22910c263f79b32f780cc994b65b53b4d493a1639df9ce885428287a95a1a2c5d04019d7799f943a90f3 + +p_scalar = c40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = ab3ae700d1a378c565bd03584590bf03605e7a32d2e2bcf1d69b7c83177305ff6f206002d878a97a74faca8a6af7e742, 88f79e80e676dbb1e18fb3c4286db20eed392e971988a94e7d5e70fcb6d4fe2a7c9da51e583bae39fc8186fe756d64f2 + +p_scalar = c60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = ed111a7a3bd0c935557d173489ac563e8476e71696aae3352dbb2f572373797325d250419c736f9a583dccc1918722ca, a72c7a8de61ea42e74c88f9e59a0b4e3d2361fcb604aefd1b8c5ecc6839f12fc15e84c46eb22c13c5b83310ff4f9ea0e + +p_scalar = c80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d363e435d58d42d2d9f3982e3ec5f7ff162cf27f36ba3ceb1ceee947c3f392126a55edf1c354f4334c98c61d097bde48, f5b063efada24330762dc174921ad66bafefa7d16dc3e5329e26b127283d801726e920a814040ae3d116f28552c997e2 + +p_scalar = ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = bc61bbaba368819180d7ec75226d534da72e9ae08144a60f51e4475e9f97151bc404defedbaf8b42178b590f1c477d9d, 8cf32bcadc393da81bc3e1425103c78da7150074365de7080f7713b7e94215c8e38b469d3a5f6e222fe55cf115d5157e + +p_scalar = cc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 218e7fb1b71a25a46888444f98a9add79be8a33f67d61b2ed78ecebfec57d967a4af7a2d749862107778fad7e65573e2, 9701037c09db99a5d63da33c01c42111c5c869a08e017b84dc96d07a0397c834d079ef51ee5ad32608a59487a0b9cdc4 + +p_scalar = ce0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = bba8c7b11cc64bb5a6581582454dc4f3d92b8ac4d708451051375d6af7acf0bcdad4e4b8dd0ee7526c79a60950a78a78, 6b6804c7bcf4254c2aadff1376e71f2fa78593186274d8e39ba61a7495527cf8d50ace5155af45749473bd3865adad84 + +p_scalar = d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = ced5e4cf2b4313900490c970f5aa2fc4547bd050b48bdd872e0bf749e05b18e763ad235fec1ceb74e222eba4a4dcefe9, 6da57183ee47a9bf27118db07276f567aa086fa1afaef2595b525dcfafc80316bb48dbbcf7c4a82bf827d8fcae2d7671 + +p_scalar = d20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 5526e694909f969fbc6d93d12b1ecf5da54322ea0b5c08c1d151433074d7b4608b7e7552cfc6aa6e17f7e937cdf7bd50, 172c700b6e2009a6d2e0998d8b96b6ddd8bafde0439d7969bb4f20c2decda994b88b7f12513e69928e6a565c8d93bce5 + +p_scalar = d40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = f79e2d39b2e8fac1bf3cd96c034d021b15245ac616c11ef494035a1f0c82ab81c749a6a77709a52b8357d8bb460e77b2, 9301bb39c0b773d1762f3b3a2587cf4ce90cb422aac571974da7b5542256530ccbe064ab4cebc408c78feae7b4930e42 + +p_scalar = d60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 7bd84d4848a7403bb88ee110d4c2aca40e7ca13cdcc93ab719e453d26360d0b1160eeaa784e7e36db3ca02e33c34e954, 881501194bc77167ff61ae14d6ed1e8892d5c9efd156ab6c2ee716f48bec18649ce66721472f0203d172c2fde357c707 + +p_scalar = d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 058ff1904c89c9a87b6e3e4d1f54ef38a901f2551406ec90b28f476b59a7eb995ea6a57c699397bfee536a26d4bcaa59, 4cc159e64fe6a7adc1e6a87ed31f0696c1417bb9969b46519e7e05e98ac9d0a1016786cdba1ebd97a96f05f0035ab933 + +p_scalar = da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b5f1a6c4605f84ccade63185d292887e6000e8b97de5f75dacdf3c75960857e5a56359b898797f27f6666dbd1e720925, 3bb0c2563cf5389eeea64a12b8d49953019f27ebb13b0586f0f68848938f8c723d93037cb4d0b41eb388096c9e381f1b + +p_scalar = dc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 13db3201919c187099c2ff0b948ac53b031fc087255e8c5eab4bb08268cc66781f72c1f8911316f6eef402410ec537ac, ddde867460bcc82a1f71bdec7e815a9fcc5601bf42de10018b72d16c268e981c42005dd80085bb342137e02dedfa85c3 + +p_scalar = de0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = cfc013b68f5c17418ca6fcc4789fbee8efe3a068daa3ed3a85ce557932132eca1c048aa58f30fb6a7912ca4e168fecd6, 973e341dff8fb6e8de068776265f04d6b665d712989a0dcd9d3d2248eea57626c82692298c41a6872e67908b19319064 + +p_scalar = e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = f58b321ed1f9bce830bf1ee34f114abc72483dc5b3e1d84f0eed233cc25c696a5e9abf67d640c2a1da828fe556467257, 0f2f312caafcabcd275025cbe05d0f92130a9b620110779d625bc3148d567d2123d0efa0e1bacdd634d9a9b468adb0cc + +p_scalar = e20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = aaf3726a32ec147e505f5eb8a58e699214f3ee55fc5144da5629e0626bc5035c0a3de8f6666dcfb1695089a73532e60d, e8cd549cb669efc115a5eba2c50ed0864791a4b43977b0dbd17e007de5e271d60b631ae3815e1138b69010d28e148866 + +p_scalar = e40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 7f517c9c01f3f401b21e275d8b991b2903c6831675f0f13991217a6be34fe2e0e4d168e75b0b727bec22bb32205a5301, 70e02e42a8e91264f79b85ea72d54f45dbd34f94402db45347741ea3833ec9813ab8f7f6afbaeb4e4416a2e71aa1b605 + +p_scalar = e60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 8aed67b865bac360c6dce3bb1fd8ee17442ae6052b0dbd5d807d8c25d5126552b050787598a85112aad13b2f80f89c8f, a89d6b8cded9d1e0230226ba7aa42c857476445cabf994a497a643a529878de9596737dca9075b7769be36ee86fc7101 + +p_scalar = e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1690687e164c44ba8b5101310dd4e1d4b120589021649255e7d94f4697b97d7c243622f9e8a47507e787054518ba5236, 62c155a73a4f0718b2d325e37e33582133522150c6e52fc2d55ee8f83b9c568900000117f597b3c29a44b2740eff010a + +p_scalar = ea0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 152fe43844ecf2464c549c0e5375bafd29a9b8a5787c26f8979564774ff41b268a370b2f4897efbcaf2c49c193eeaaeb, 6f10aa28d18cfd12a1a49abf7b7b5ba56cec6d2fe1fcee878b5968cceced62e4ef5c0e0949d55bfb4ba25df0cccd006f + +p_scalar = ec0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d4b25ed3883ebf03e1ee7508c3ff73564f4576a12c9c77446bdf53fc46c1f31b3024ce311a7194613d92ecc18f8802df, 38124a24938bd1e4969fced00e605995147d4cc8bf12cebcc91e8ad9a1696c09c8914404ee131056e23b9faebdf3c536 + +p_scalar = ee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1a0ab3fe3e1aa3b2da05dfc0faf576dcb6743901254cca1a54fe2ed1821745a31e6d2cc15044f8e3aed505fefec299b5, a3f8f0122452bc6ca4f9932141fd832f862af5e0da92241fa1ca780c059cccbeb235cb042119df38b2020caa49bcb238 + +p_scalar = f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = edcff8331d6dc79d7cfa71e1cf1cb8b3c11c95a22527c1ade6f0ad9bc0579c3e593f085a6dcf56bf5bfa10cd1ca459ed, 862ac252ff6e436fc04eb74728de2fcb12aaa1c81d9f913fab3c748e41c5ef83409dff68ebb1ee5fa7e3b442bcdade36 + +p_scalar = f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 91d26e18089b6194c58fed0143bfa89695f4f8a7c76e93579b34ffa032e7bad15a5e1b61f59698d9f12d87d33dad94a4, 71a302e9bc09f3161236ec7dd3cd2727a829c0ef48cec82f84943c05000ff3bbde46285e57685ca53de725da29d42120 + +p_scalar = f40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 4a95f7f3ad4777a41ee7797f6590d0ecbc2c3b8d7a81382003d42e96afc190c3887071bbcac96dab4b98cb69c5c8a182, 20df90e64170d181e4ff04d75de8e3748a6011e374acfda50678b40968b3f570807398ad5287254985c921b2d572d8c9 + +p_scalar = f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 92fc21e8098c5b74dcce4b866dcc347a56485fc5055a1e76d2413d03360766ac3a0699eb49cb60f46fe114183c5d5268, 39ff0bc8a4914f3f4ac168f38c3dcf7575ba26656fd737df4e3501d64fbe6b2569f15c596db30aea1e7116e1978f8516 + +p_scalar = f80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 0b2d3d2ee01df4e90f17d421a6542ac0bbf2d5477007f2e9840210ee61ff9d1e7734dc91f8fe7a42e6bbcf0bf8ed6302, 9cc5d53777ace27e110e398ef4f6001dd205e8933bbeac442303695191af27c87c9d084dbceef948adf1b0457b0c8fc0 + +p_scalar = fa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 051860f8db9d37b374ddf359c387adeacbea730d7b0b1b3dc9ef099a6d40b18658ec13e188173f1b430f3082d997bb97, f78653fd02c0ba349544df3cf5bff034741b7dc6a382bbddd867480f5e534e39d22d02da7688686529abbc43dceb6e56 + +p_scalar = fc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 977b4bce597694b4780ec65de871b7928025224f7ad39d9aa441e5035bcf0e19dc504f01d3ce296729262b6d7636a78d, c816ea7dca3e95f09080d03b82ce409e0a259c1f0706fc9749963e29f3cbeac4e300785268b74ef11fa15148801c10ee + +p_scalar = fe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 75c5b10bcac05c018d3e2eea122e7ff2b2f9d05f3cccc6b797a1f8404db70676b7b8f12986a52261b0428d6baa542b1f, 8be9dc2a6cd443a96ef018bdb5f15589a4b9b1e7aca5a799394ba8e3ab5a671d3ae590f619124430327f0f274a2106f5 + +# p_scalar = n - 128 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f3 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a6661cc4c241720a0336aab8777a16d2f313389118eb5195c0dd449e7c1c39840f4fa5eff21af80ae484fd9f8258030f, 239dcab2a277ac5b2657eedda5791ce3b01f1e0434a02a6b5d85a0e4a022c7a4228968656461e382678db970a7efacd0 + +# p_scalar = n - 127 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f4 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = bbe34e740f395db4a92bb11bd6e0f09d96fde63874231e0feef28f34522c62792aacfa4c569604aff7753246eca101ec, c7e92a61e3948069f3d6832e367b2f949e29e339ad180b0e88d22a44a467c5195698bdbe018ad5aaaa6e59ddbf943cf9 + +# p_scalar = n - 126 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f5 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = ee82cb5d4c686f3145940572b53625a29c14d45c4d73654245b97c7577b60ca7135cfd8fd9f0f5f0ee101c5ade346cdf, 07b33602c5e1ecacbdf3a4d1afba7f8cf99d6754e04af855f9732cbb4f41b9c31525eb38bfca96d3aa1136b6b0c47624 + +# p_scalar = n - 125 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f6 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 03b2dab245cf48ae7ad6ebad036703ac9436a8cf3450356d50ea65aa46f614e270f25677719d6ada9612b8bc3cfb44bb, 8933bff572f35ccb7cd5a74bb0095802551f41bc219187aaecf53641e119ab8edf3fb730ed4f55a421953d2a4117061e + +# p_scalar = n - 124 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f7 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b4bb1133ad9267aa51cb20d25f083167238df4864cb95a00bdb4385fa6f8277692f3dbfda1435507f9e5ed57d99f5989, 49a89c9cf7a12be9b9e99d533cfb098b9544dbb2d4eb6e31045ce25c5e93210c55a4951bc8a66567bf4d13ab4f115bfc + +# p_scalar = n - 123 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f8 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 8e4a4f6321dc82a6d4d6fd78550418d24b3d05ee4295440514a9c3ebea80907b46b07d4a2a1018fe151198480c4c0b80, 74c462ed1a798add03babcecc25ccf338a86ab0f498f447b5a82af3e9f30f7e883c6ba0470788c9f1be4d7f7a178b9d9 + +# p_scalar = n - 122 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f9 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d109b62984083890da5fddab7e28aceae3da87e136a2812ddfffe0dd4cbeecde89a9a5422a1a0fad53b912fb21a3720b, 14411c67bfb77d57f6b8dd99613a733b02b77ffc1077afc76ce67450eb4d4ce0f0ef6939293f99667744095c728d3ee1 + +# p_scalar = n - 121 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528fa +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 79cd3f1e3891db8165df3c959329f7e0c29afbd47772778a6c33d5d6ba6744e48c9a16e3a896ab1e5198ba40189dfa8d, 11aeeda1c64d0916473d0df9f8265b7e9c1d39a8b716f21b95507a54ae4d8985f5404f6be9028e62caaa8f0bd784019b + +# p_scalar = n - 120 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528fb +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = f392f9632f3b0feda03a6787986794dbcd411e349499fe4eaf07a03eb8994b40d3259f2810248af41b3ea621f3c6f15a, 539875879a1da4c861bf593f532e0ecc3c967a464c37dda4ccbe6fba3778c83889e73d9a54d7c388f37166f8c08a1237 + +# p_scalar = n - 119 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528fc +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d2fc5c57998b057713167fb8ec9cf4cda4630ba1875fab27cd55e7b421cf9dde59f9078dab73bcc4732595ac7329d8d1, b16536288a40a5cd9a1bb1ac9221b7a3eb9ecabc9109b7e5d677a64899dc8f46b2db96f206cf9ceb761360c15ff51b6f + +# p_scalar = n - 118 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528fd +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b8027be64a5eed689d19bd63befa48da4496f5a023133af12541da528e6a2448d1f2d42a406775a028f0ab7a080bfca5, ab9386aa4a3ef7e79966399f963aee20f35524d0b44501ccac13b8149df3fd7307819492dd5cde2308c7d5a296b0684f + +# p_scalar = n - 117 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528fe +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = f26774cd7823568b517a6bae23acba53ad9e749a9aea738d613e5294fe8579619532b30ea229d070fdcce7a80723559a, 70509ab082b097737a546582bff1585ba6729b8db27984816d99c05f06aef600c6cb3a4beb8c057b940767a1ae53114d + +# p_scalar = n - 116 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528ff +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a40dbba76a0c98442700a45b812fab5c2e56dde7119ced404060d22edb6e808b6d812dba7e29445309e7d232ccd1c14b, c0ad2701581c66c57d04f5b9c910c402fe084c3f269a8382819b165ec127165cb49514f0e988e2f90a1c7cbe9cb66303 + +# p_scalar = n - 115 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52900 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 274c69657350982d84442a4123c50746a97accf432406bfd33e868f326a488269120f7b3a043456daa4e673b34498f56, c0c5bdf6cf5a11db75029e32cf121f03df9a343af6312ec600dc39b8848a5b863ebf1db1ec7ae2413106b7fb95dc9eaa + +# p_scalar = n - 114 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52901 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = f80f423bb48af0e8e53bd76b6e4b3bc543c2a97d5743877a559b40a286dcfd8831ec9ab137796cdcebbc6b4cac6a280f, 0cc71a320bc4646e499467386204acd06ca075224dc4a5e8da508de78539d530f4a727682b1c4f45390696a8d488cc7a + +# p_scalar = n - 113 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52902 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 869fcd17ff86a9864a5bdb048d7fa0c2e9815b09139b7fc5e72215ef852bd27fd2c616d1bbe33572f85b86b79b0bda12, a10b3df255f7944b3d0ed17c31b87757bf7fded9fc31bb676998722ae7b12029b9c007f1d6664d043278521791daf6be + +# p_scalar = n - 112 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52903 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b4a6714762f45dce83f2fd2cd8296a52fb25e37c9710b70b2b5609d5504c81290d20370a5d66455a2e20654839d6e2af, f82bb94445ed204db9a19eb57c182141473e6877caa846883e7ee43a2ec76a1716a71ccc0b6c4c64a818b9bea15c6a6c + +# p_scalar = n - 111 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52904 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a158aabcb9bdef14c3907b518b02667f27552012c727be036744720b50447fd908e0805000765fab8db3b74805be74b8, 09ca776808279da9c64b47b82300d9feccf8e1f94aeb2685a2ff54bc93c326191095bee4e305fb96aaddfa03f49cc56f + +# p_scalar = n - 110 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52905 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 26956a5b83e5bd0bfa63d67feafb4dc8bdc1c92475053732ce481ae68d2624c8a4ba394e85d138d693f846d4906ef776, c59ff978106e08bfb775af8769e4422061d7272e75c0564abf9c791c76e941515426eb05ff14810bfac270f270cae3a5 + +# p_scalar = n - 109 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52906 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 6e3c27bbf13f24033cd18c33b9cff887a911a58af0d93abb5841c5f8a8dcbdc89c7d35833cc1184b0efc2e27b2deb1fa, f4c46c56198c770587e19a4e7f7c756875ad33caf5a1411d2db57fb4f560daf435cdd90b54294c055b391712ea533ae6 + +# p_scalar = n - 108 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52907 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 2a532f0ac16a417882f24a114cb0b8671b23e3f7afef0b5d589f30567bb8dad3d81b74529a67044fa26631ef443c7161, 629a90bf9aee303f7499b3191ed0dde33c58b5e63c40024984d81e8e66d45390a985daa26e4abce9276d170f40383ceb + +# p_scalar = n - 107 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52908 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 77964d793f740b4850994c4960a91622ccd4f456753f40d027c6ec25a0075d4673c21e204f761490d718e8e1f4363f23, 5182a7172afcedf2e1d99f78c7438e3995d6ad45b8659463488374d1a27f3f9f844fc79ae4193d79f4c955e2f647ed02 + +# p_scalar = n - 106 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52909 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b380f170bff65e1c2633179cfa6a8ac6442e0f1f36905deda01780587776c7fea1295b179d724fdf3d303c72138de192, f1c69141971d1d5bb5a31d6abf10c960069f47e10aed184b1e0b982b4632f0a407c34b8181b17d37af66ced6d590155d + +# p_scalar = n - 105 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5290a +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d0ab3e3a99ebd09c022c75441a806542862ef39c275075e3077f30e5dd2c23bec367d6aea6e201bce6e91985e5802845, cc3ae72c6d8973a5cebaf145152f1923d3d57a9547202560372c23a9a91fff8ca5cf364fa9ad136b7d67ef60d99028b8 + +# p_scalar = n - 104 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5290b +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 7117756e39dcddad381f4f06f473127497d1e75fd9f408b53dd4f91683002cf1cfd364cca03bfa6367126ced901410ec, ed306706377f04cfb06434324e2c7f76f5f40731eb8fedc1f3513c3b9c9e5f9ca3b9dd6e230c2f53e206f13b96d88ae7 + +# p_scalar = n - 103 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5290c +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 590da88e64671048113a7902e3da530d1ad95a94f23d84fcd3f0d14329c21de1ddcbb10eafd402bdd24cabaa21355d5f, 0c9e71377273dbedd6e2d5a62de40552601bd1c358fad1c397ebbb4ed86f4dfd1a52e4e7e62e6e0bf4a58282925bf0da + +# p_scalar = n - 102 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5290d +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 180783fc39489b2827c614bfddbdd7a57befff1cb90a319f1c0f6241bb2863c829591fcce7274c8803802ee80fa4f860, 60a4d22a26f6a5df4c6c8fc838175105a47fbda3bed5e5259e8d5e0bba3a023a5464baea1b373ba72a89af6579ae9e06 + +# p_scalar = n - 101 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5290e +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 7e2392bf7bc814db9cdd943547a18710d73b1fad8b8b5cfc73ddcd2c2eccfb1ab539f5fe50c66d708e66c6f69b8adeac, 73872d361702e1de909b656f420ec104a73e1d9af53e80541fef41850ad68693ffeddc211d67c04d914193c06c8f74e8 + +# p_scalar = n - 100 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5290f +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d884d30b2f03f287419f4d2eab386382b0e595a155fac50e100134e2338c10e0f9d9c4dbaf282e57a350c4fc01834066, edc690c903e2fcb28a8aecc74afdb92910fe926075034f722a4dd35433dac6b48a14723f4922997f4a7e5936f6075163 + +# p_scalar = n - 99 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52910 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 648c5f00bb28223ad49cae0982d9d6bdb9b2e6b479c8f8bd1b41177c708ba469bb4f9e0f41aa174e6e3835a9b05f84a1, 03e1698b322d63bd1f7493b176190d98d6f759d8d1a0ea086675138f708247e1fe3096dd81a0a38d04f485765d8cc4a5 + +# p_scalar = n - 98 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52911 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 458ac76d0f40ec396e6880f15c434085ca861b4d97740fcab1bcd42525fc2c50f05e0ddedb37f6ddd2872262b0a9e00d, a77104bcffe021f349c17dbc262820737b96a6edffb612df003c91f554ee9d59d70204dd7088d2da5fd094ff848ae412 + +# p_scalar = n - 97 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52912 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 8c081acd170d807f87b1e51bac06961610241ed16fef9d9d8f273e3065278f98c1f0db004a49492c7cd2035d7f5c54e2, 83c6b78ec4f030064c3e2491c4f56964cb47e4ed7889a39ed7d24ef430e05dd3e4eb5512d6865bf4005051ea1c73b598 + +# p_scalar = n - 96 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52913 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 8bf3dccc39c18b96cb4aa43c9741eb4226de4c6581998af2ee21597e52ce08f68fd61e31148840d4dc5293851d15bba7, b257fb6c5a4434a4cee0842f5d5680b8f9d19ea0c831254b8545396f305ee4f0507e24057dd87c3966e1d5dad872984e + +# p_scalar = n - 95 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52914 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b8f42fe52fead1e4257b0bb5ad7f23e10be90befa27d2b794a607b9d0ef989779f74ca169bc0cbb10fc0f2630dbc3c91, bb6d4ba542df286e65364ded55ab93f98c0f64e83bc7b59145cc3f14dd99f9fb505fe7ebfd79617dde78e4315f93b592 + +# p_scalar = n - 94 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52915 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = ed9602dc7912de8d89dabf40cf9eed19f4db0ad3ad1bd1192e2bfb0c25998b5d4259f70ee435a0deb134a04174225251, 843c41be9c6cecdf6010c639db73da1103f4f9dcebcddc087d15f243cdcbcaf878632b48408989ef585b6d18c19f9213 + +# p_scalar = n - 93 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52916 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 813355b3430aa2d72df91689cfd151547a3545de7cfdb00e1c634764b16142cd1b1cc24f5380675eebd14d71e32d80af, c071f38f66bf9d09c71b395490a268e5572a425b71670dcbfe7ca8103cb06698d9e303f7e03abb7916dce2c985f2ca7e + +# p_scalar = n - 92 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52917 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1031cbfcdef715d74efeec75e724f56cb8a88d32c7b6b5a626905570df79b6048f97bc3df1b9f55b91b6e58f1036e450, 3e080b351a206fe25e43c16b90f38d1d3deda082a8a691f9a4d6871d472ad231cee9644726ca94dcaaead60f2dcb2306 + +# p_scalar = n - 91 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52918 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = eb0f52348bf223b0e7e7382759dc3eb7b04b977d42d74f5fa4f6e534bbc2618a35c2421b14ae3f635dea409c9cba0858, 47cac703f116c6e20b09b3bd9ab88478cb78e0c863a2cba009d0b3319236343dd012811a3fde2c6d991c51670fc75158 + +# p_scalar = n - 90 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52919 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 4347b760969bd7f7b560d7e63dc77e7bb34f09fbd045d31e28bd6aae6e6e8e57672649def3c36ba79b35cdf7a7871029, 9fce477feb7d3671effe5f50722fecaedeeb339129c4724952f2cabe13d6dbeb23ceae28feaced8d2f161a085e5496e5 + +# p_scalar = n - 89 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5291a +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d0d105de164b7361d63dd29d19e0e2b667d3644ac8e55b7b463df30b0096721f18a49fdc4bf163e00c62094b2d71d4ac, 01c7e939b8df37f31d28243540b962d9147701090b4de4c065ccf0512daa253c7861b71b2093cf7ee5865c4e0217188e + +# p_scalar = n - 88 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5291b +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 9398236759e97922f158f85541bb965c782840d1edd794907774056232329baff0041e2423786267db52eb03d1db891d, c41a6fd431583d521af2a631ee1859834284651c3e6724b407f97c1df8ba4302a6f5384c2f5ccd104b40ccb8e384778c + +# p_scalar = n - 87 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5291c +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1c1b3417a500bb22c4840320387b6b2ef30a928d9a3c3af1df0ec1ba8b80919559424730109677754f11a02e4aa0372e, 9f046faee996fe68bdac81880e7b4db731944175e7559f09dedf2454f984a88f18246d74a7909681690ee6c7bf3266f2 + +# p_scalar = n - 86 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5291d +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 94dc48fab7e8cfcde61e6c2984cb7e449e30229d0a06f838361494cc0b162b571234181c1dbb4629c7364268d94ab449, 43d6196f8de4857a143c6e832c92df61a32f70e6a0c3e1a57a9910d501c47967a4fe5f5fab20b37f0d7e44f289b66806 + +# p_scalar = n - 85 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5291e +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = c835025446e64d4db0a08fe1114e6f01d953aaff73256a577bbdcadd053153d82148bbb88207255a935d2cdf9b06762d, 6c218d92c993f213a231839fe2895195c3d455d22caf52f27422a72a0bebe314392aae0271fbe969e7cfbad800dbc157 + +# p_scalar = n - 84 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5291f +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 00eb5c040d16b7fcb048b60e740c04a52686cba73934e93664a8bdc7c791db8094b80b8f691e858b3c712c3c6323cd05, 3e5c6ffb3adfb941dc98abd94341fd4987e3e34d8d8145a014e572f21cce9e0d9ffcb850d7c9b5b080c0d8914ddc8276 + +# p_scalar = n - 83 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52920 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a075b16ac03d7805c25baa03520a8926eeb88ca1c7a4aab58487aa0d4a6694eb44cf847ed2f05eb48e61f0bf44e94071, 773dfeda69ce1cf9b72a7cd0563c78e40aa262ba2251bcdacf21a95749e604294e3c13706009643ec357a48a13d970c3 + +# p_scalar = n - 82 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52921 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = e6db24057f12bea3dfc6d038305bfc7c87e75dfbed69216bd6021049cbfbd0c2e8c09f59ec5cc866783cc5bb88f82a12, 6009a59ebcd30d2869eb7bd2feee7fe5ed736fffa734994fe40d04ef6068512884fa39d54bb007bb6469e146b7a3a2d2 + +# p_scalar = n - 81 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52922 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 0984c2e37cdf344f11238a859f436faff2c3118feaf138afd8cb3560e07b1bfbde45473e86c087853cbdd3cbdb06f682, 9dd7b7609745b87e5de38d63ae2706a701047a5ee5dd278d56add2f018f2637d959a14d4736fa240e1083c17c382584f + +# p_scalar = n - 80 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52923 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1e8568cca446324620fe8c27a715ace6dd2ec6d351fea1dc49066428b121360923e5c6b90e42d1f9194924b4ad0a415d, 530abb420614a6f9b960b5efeecd8ae42413063a1378e68fbc7a903c6484641d98e97f1cd923637700c213bbfcce7e6a + +# p_scalar = n - 79 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52924 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 23b245a5d53912dab3cc818a7069cb7c491c312dd15d01f0e58901a204ca55712cdac248c3b74585ca11d9d4e9a6c224, 4b9728f81d7ab255941c66c9f30281f9617b301b08632eb3403243e9eeb95ec1a052eb3e3277555230f7838ba6b0b163 + +# p_scalar = n - 78 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52925 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 02781ecd4db639eea1560f9775dae55bd35175d9a506191dd3338ff4b743bdfc47842147688c1ced3c80145ddb9f0b60, 3e795421ae8fbd6cd47a03074e3c8f2c84238e64c4a7a4fbc4870c9dbce600336c62bff32c45eaac993a302d23dce536 + +# p_scalar = n - 77 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52926 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 63d23607fa5c9816742e060b28a126270ca930b998ce78a327ccb6c0212a6125114a9b40334793a79f2134c12a501a3f, d44b1075302cfd2ece61c3e5572941a6dd03950030c9cfb21500850e49fd3c3d34cd7e2ef34d1d23774dcba4ec1f91dc + +# p_scalar = n - 76 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52927 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = e677b97c61007b808b8d434e90bfa219a7253817daee85404552fc68956bce558c547a520c8d74e1fb2f775e4230e336, e7871c313937b80f64172dc31901ee2241bba1911ba3dd06a7a69a24e4f855bf96eb8cb3603263f9bfeae6f2f71abc74 + +# p_scalar = n - 75 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52928 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a1e0ae0fe6ca7a154a7ee23df367b5c85d4631b4392f8f665b28cf8991549a96c8cbc40a420ab7ef6b5d4014867303de, fd42d862417d6562d7870042957fe44564e239e3f0402e1d6762ab69430aed71a531c2c450fab9012a655ee1139fa27c + +# p_scalar = n - 74 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52929 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = ca50bae743ca3e45a0dd8e3cc10c4f6c40d420cb5c36dc4c02ae1f9150f6a5cc7f3bc516e1b24b64126d4cde13dcbd9f, ac30d6dc35b9ab9eb9dd7248bd7085c75aa7e563ca19ed0f2458c9ef13cf22bc35dd6dcf7125d169f074bee9efdd2b40 + +# p_scalar = n - 73 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5292a +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b89d83e72bf4673cb08db04de8caa7d29029a9252d3731c25b8d230bdf8b9b24a9c2a9b11de8963b43385c32d851a702, 6f65af3b7c98a1620b15740387b8637304e21e0392265a59af9fc87b4f1d216e9f89b6d6e1e8d616a8fd39bfe1f24424 + +# p_scalar = n - 72 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5292b +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 0966d45a6517888e2ac250f6058daca83b7debe494eaf32810757e2e3f599369f4445a249b234eff668240536434688c, 312c1d2f36824d3ab010acdc097afa217854f8bcc3f0ad3ac7b43619ab96774699cd9dc9d77437097555cc79e7693b1e + +# p_scalar = n - 71 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5292c +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 0b4faa5a537ecd702b123738fe255dda27bbde143508ac5493ba15cfe58d0a92bf5731b3abb11441c42ece45effefcb1, f9a7ea28732ad01cbdb924ee071395662144daf1ce64373a154f285025b3e31986793c4d0801523d6a44d084ddec83c6 + +# p_scalar = n - 70 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5292d +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 2bd44119aa9079b7d8436f83a2ce4101a4c793741489a3c09c2e8aec0cdf6d91edfdd44e94cf7a32bcef0b6a37548a32, 443df50ac7469f4a5c599917d3a76debc4077657cfcdb6b7cc8ad6658c725a7ce2a2b0996761e5389f0415bd9bff2a34 + +# p_scalar = n - 69 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5292e +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 59d65d78a3f735f42c86ee164fdd3ccad4bcc8b125abfd65cc66c8aa0f19981b5ccb2859a1115e28f8d3df74670c2752, fbcd0100271dbd7a6f2c9e8b73167a320aceee4882ed66bcd13ae4892bd423a457769d6245d3994d035ade287c0c55ce + +# p_scalar = n - 68 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5292f +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = f6a8130b3a7741e35508c2b38bdb088aee34bd1706035fdea4160def7fe6923a2fd77b5ae6018776af78aa17286ac2fb, d467b0e82fc4663ed9c5d61f09f68f4c29b049577e0fca014277e8927030cc9a59a9e6886b1e723fc02ed662797cc7d4 + +# p_scalar = n - 67 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52930 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = e462ca48e153035af9af3e4d90909d25556e637e6ef3d8f765d75edaa55d6185eac7dd3b0b634f686efc5cbc8b1772ca, 8322cb8aac794994096a6bf01362c5f95990b746c6ebc0031a7e35ed3f59e4bc104ab1a642785d0652763b7b0a109ed1 + +# p_scalar = n - 66 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52931 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 3418c841ef19aa6cab34164b3870beb7acd0361f5decad089983c10a492b899ae22c691d99c0b909b60fb64e52990b5c, b287be9507f55d0492b480eed70d6c3a6fd331a3b0d5aea54ed3fd192a684508a580d040c2c889076cf203a6209b336d + +# p_scalar = n - 65 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52932 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b84c3a6a5fd4266f8b0350b2650b22534597ec8abdd5f002cf9edc15edb63c80becda43b0d1d279f8e469454839b9679, ea6f2528a55bb1c9a2866c24c8f9f08719763d6d889d66ddab784b2cde2bc266b6a487833ad995d30e16d83d30fc79f9 + +# p_scalar = n - 64 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52933 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 4f5d5ab6d1b30e5cfc8e87cf3be44d56a309199dca57b7bde04b3d30f8a0580d957c980f297a9a37ed4de4f88e89b258, 888b708b9404ca513ee127895ecd3fe86d97cabc301fe259fe51bbbf1090fede0fd1c52df091bc01b213c6a030a9325b + +# p_scalar = n - 63 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52934 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1c9bf0b0f1e52d1ef6159e519a049f7acd7e35f76e2b71aa7a50f7458c949f8f6ce8ead6149a1896c5c0e6d7aaed89c0, 52bb3712a0a689e8f5af7b8e3735df22dc89bd4997d4048d3bb034e888d17f198d3a5f621ecd7b1a3bb6c1f518202c80 + +# p_scalar = n - 62 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52935 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = cb4c0a54561fedf2d194b7054b14d11703b9f1cebfec21da0c7d749907dbb9af1e659730c1fb476e49a04dc0f5acf772, 0902cc23149446b8cac324ec82c4faa73d2508922ba9239b65609e59d9ff0aba5f5e9b1fd630c145af623d3f21da4d42 + +# p_scalar = n - 61 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52936 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = c93ea049ef6ba0062366467300fe51fd5ff77ff2332982d06035e34f772ae08054fb5a34222241e848da1fd3fc60a6e0, c4cc11451fc69829b0a6c77201466d230dda19ffe5275767e6a7885370d303eb394d32cd6ae9f4ac6640f1177d381266 + +# p_scalar = n - 60 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52937 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 95bb80cece47968c61bba736a55b527784b7c2fed74cccd40402d5c4eb809f85a61fada6fb4f60e8c711d5d1c425543e, 8dd21bf0b4ea4f5129fc3b284892e676bb45a51f948a8375acd70b86ad2a20fcf0e0f4f7e682aa2909f92adc16eb7b95 + +# p_scalar = n - 59 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52938 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 9ba039679267b6463703435b0de64db996a917cf1ed0e31564473b595c322738dfca6897f929974caf467ce227bf64c9, ff336f12504655c196d9ba0bd9e3ca196fb34b3028463cceaccf2edd7b05970341bdb741b335eff0df0c2aae3a522fbe + +# p_scalar = n - 58 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52939 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 104cec0666ac72e09e9520bf57acc87aa58db4ea4f96af4fdab9dc0015b0fa13341cf9d9c46785af941c5c257d0be180, 2b51995f794da901c08595e35548fbeae11699e909fa58a1b5f157aa569b57d8b8b4ac9ffa80380a9f3f7baa1929e675 + +# p_scalar = n - 57 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293a +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 814d7fa07a78c189c052f3eb1c99ceef1e9dd1509bf446e0a14967dfac4bbf6273bae4c1694b8b0db14ba61cf97f865c, 0a823b9a4b26df63d2e130552952c1fc8f427bc473c81d5b0d60bab7e809a13c7788c258a1737b65a101a483ab74b05d + +# p_scalar = n - 56 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293b +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 7772a913e6436cc1e9981ea6820da79f2629ba4fd1deca258b6fc785e692fdd2d4215b4fc7a8baa1483350a5ebb8cdad, 31ff648e0f88b82d56fefff326f349ce05826192490bb572b623a1aeeb8cc21c28179e6cc852f64bd141235c553fb41d + +# p_scalar = n - 55 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293c +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b3fcd5d1690cd408fa5cbfda60f4554f6078d8bf085faeb3a4fb7867e3a142d6fd6622bc1718ec3cbcab5f60069f3367, 7460257314ceeed46a91e73997d0fa0617c6b5cbbe2334f88de3107c3d079f6182af23aa180a63a74ebdee7d281f7884 + +# p_scalar = n - 54 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293d +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 4576a6497cb8944248c075daaadd6150075134ebabd64a6acff00bd23c9b5a41ab2f15202175fbf411853add834e6c54, 420eb673906a29496e9e86bb7b1eb77a1ae1dd97d13444bb0bf879d693b44ea68dbb571c77fcd1f4340a767034adeda3 + +# p_scalar = n - 53 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293e +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a8ba8f10e0f383ea642ec4e615c3aae2cf485c74a7c54b160b0110610f0422a2daed7c268a0915cc3b1bddc6fbde49ef, edf2e3eb7ecc9485adc93d9a481765e2d2c71ad1390699635786a19a4e2fa83eebec6442089efa8b2a2054b495618501 + +# p_scalar = n - 52 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5293f +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 4b820d9b31d83660252b48f5cd8d7d770bedaa85e5377c005687d1dca6ccfd358a944b316b3262328f6468656f9201b9, c5cc339dcba1fd4b222465866e5ede7690e2aead7f78aaf86d0a166ced3c3b7a0a8930fc1208b9faa9e5af3ccae07f15 + +# p_scalar = n - 51 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52940 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 16634a504f35cb3c3dba16e9daaabc27464ae8d241a84de7a5e0fb598c5a78d91947c0caec4a22b82c4ccac72070ac8d, 518b047dcbaa0d97c69489e2373f1a0d0b2240003c887d36daeac0c3570543f0324d067e7359dd35adc18bf9b16ec84f + +# p_scalar = n - 50 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52941 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a820e8303a5d50d19cbf755b46f97ac7beabb91ac3c90051510bd675cb2ec3f1172cfe4ecb5af900a96763d2fba32d1f, 6f58fa8b7181c2a16f7bfa7e13a4f7d6c1b444139333e4056124642f0f32b151df7dc7053048461a83a9f17e308c4545 + +# p_scalar = n - 49 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52942 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 0b470bb250e4ea9e1197832bcea03f5647c56c115b6e3386a669156542e365a48ea5af63a5ea6fb8fa5c3aef697136c6, 2d1cc518e28b2bdb771e64415b57be2f2487edd57f82bdd3fc4486ee49c9ebe88d6c174ed2497d483113c74313b25712 + +# p_scalar = n - 48 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52943 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 66e4794bae7d740062e5c5d3e73a1bc940d01ff53a7d2f3c4f504e06ea52bef92d368d48e7f30c2b3ccf806ab35bf6cf, 271e42a12624a58348eab00eb5c9462c2605ca009da2a2ca5c3ca10d04bab9854580609da766ddf13d30625e5ffef312 + +# p_scalar = n - 47 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52944 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = ea5b37c5da233371504f21b1570cf950780abff7d878acd0bfb185125f5b07a065c788785f0dc66c6f888f7df0c668ca, ac9dfec7dfa72a8beef006912e20fc23dfeea1a265e0fc91f86562a898fb34ff9c701758249cf9b7487ae8bd22437ed1 + +# p_scalar = n - 46 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52945 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 374aa9069481ed0dd9c79db8005412579266634957719f5460976b01b472d7899f24fba649ddd10ea618d7479fc4f435, fc539eb3e259c7dbc82d5998ec090d0619ab802314eb4ab9d7a198a4185a849ca1590c30ecf5864360efb1147fdc2d7a + +# p_scalar = n - 45 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52946 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 9c94c858b2ac340599e1c0c61f2bb599b0040c0e8d6fcf13ffe8e0bb39eb8f59d4af65c673ad9112d4c411564fddda5b, 42eb2979db83a48517477722bd2af19e16f96676b7234e93eb3b44a9e5b5691862b2f54351fcca3f8f8878d76eeed85d + +# p_scalar = n - 44 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52947 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 9c7e7754a320d35204ce2a21986c5ce6d50a288981ea36c2767b4ad7f8f99b51ae97af8bf240b30a1c5f0e5b36a400d3, 5fb28e322a1dd73bade6096d02e543ae47678afb27dda8e5c680176505c7ad6c7cc82a4df1698fb2c3336331bbad8346 + +# p_scalar = n - 43 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52948 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 35178bad22dab3935cf095a901fefb567314f5f0416dbd86dad9f5b239c4943d09112fc50578bc8c37fa935500846d44, 8f3f1f63c9632b78a974b09415cbf948aaf8e0f6bd0628dfbce78aa9ede314bb1b7ee42d749e5498cf79fc1b36baf1a7 + +# p_scalar = n - 42 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52949 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 7438b4933c1e593ce983e169ffff96c73fd72a308f234c864b21c4f3eb6c7e6231b22efc5df46c6618ef56cd5d76b881, db6829c2f002bb6e50029568472a7175e739fb61eaa6776325d0caaeda1eadf40d959ba9796d9129863a23a3a553e8e3 + +# p_scalar = n - 41 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294a +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 8764cd2cda92245de3bc778895fd71ae89746c8d852ca03573a82933a80d68f341dfd24d456a201ead148e87bca6d14c, 82ea702eeb18f1c5679952c7d193272ebdc9d6c34f9f589a57860ce121646f315ac762e00f3c9d6ea2fe2c4782eb23e2 + +# p_scalar = n - 40 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294b +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 51c4b1b36a4d6e813b021cf316d7a9adae78bc3a3134216c86fcfe4760be3ebc43a53ff21beb359e6048c6949399c38a, dfd92b6da914bb01dbb22c9ddeb46e6c63a00a0a60e0aa2a98ff87f7370eb7441df8cc84a69ea3a354b9cd8db593d816 + +# p_scalar = n - 39 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294c +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 587df4d6b89b1fc2c9985040b76c066536a1cd6dde9b62306d7edf642b7f006fd984244a8e3d2c467d894f80506e0e42, 2d7bc128074968fb1a95355f1cd60340b646e453436d9fe2345c553ab53153b87b2b0ab3e82947474c0638476a71ae7a + +# p_scalar = n - 38 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294d +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 47ba96091da7b1476b464412bc9a48c7479ecf018173fb32f3d752f5ad6cbeac018843c01c0d77024703cd85891f8ffe, 1f466694520618f2129be314974320a4f300e1c648347f9adae2479844956b9387c183c3e1a0e06c91af26eaabc13488 + +# p_scalar = n - 37 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294e +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1eba28f3defc58b59261ede87ef27114acb60a7597482b86a129e2dff5b54a5d4027704bb5630ef20202d57de44f61a3, fa0e07b7fe85bf85284fcbb5638ca337b50649a894047d1f2ea912435d2ca0342f1643d514594bee6c91c0c98be5589e + +# p_scalar = n - 36 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5294f +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1608643883061d376f01faee26946e789f82b7fbab52606ca39180d45c2c7ce14a13260770b1b757f216aa2531238ed0, f699887b806085b7df33eed7b73401b16a3258ec33f5567510209418c167fd201d11bc5ed6e28138597edf370fb077bc + +# p_scalar = n - 35 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52950 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d6149f75e9417bc6832bd8e34fc7852365f16273a02583fd4a508620dde6bd0abb3800d52d7c2fb458a5b5433720ec9b, b13a8ad830e23f26ac8a877f52ccd35c22f19fab28f35eee50018998988092a20ce18088a55e0956feb026e93deeb52a + +# p_scalar = n - 34 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52951 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = cdb55e6ba07b7cae7ec2bc1cd50b3e6d9d6ac102b4e2520145700722abb9102f0648c2cd2d668c4180b309dd2ada5bf4, a964eefbfdadd24e03c050a06152072602d00cfb8a76b2d69e1418a4554557c3470ddc68f8a57f48ebcbda0786da3943 + +# p_scalar = n - 33 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52952 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = cc9e97a46c833e9d68af622641d5c400da631fc160f09efbbbc7c7ee955ef3afdf330d9d5b943c8661333a382fb3ba63, a7fd2b619057dad76fcc93a1b8c310728a416eb9bb6f0aba08467cea48b90b9113bf6124c209e55e7fd73e8e3a625e76 + +# p_scalar = n - 32 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52953 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 5dd2a4a0626b3d793a9865baa631cfb0ba8953d612e8dc871896b9fcc651b1dd0d784cf208f779d5ad852b878c0a64a4, c510ad93aabca99f73b42725b35b4ff04bcb06f00a2377b677315f9e9448fd08a372dfc2f2a52bfd1148bc72687c20bb + +# p_scalar = n - 31 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52954 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 6c07c4040a3305d11afb51a3e3ba8285d42f7dc953c149652ecf8340f0df4fe6b6e7ecdd9e821ee6a39c89317c8906a4, 475a3e756398a19d5b3d0d6d36beecc4d7dd464f045a7a1c402a9bab42eb20ddbc0a699b374c4b08dab83288127fc1da + +# p_scalar = n - 30 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52955 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 92cea8f4c4360dd87002990485ba414315f9abe1feb6b100519b9fd50a18323276aad8b8131263886a7a3464d0cbcea0, 941292e500f88cb2f569446a2755569296c21b29f6a167f23117dd04d47a41dc1846eefcdd3eb156dc6c5d1dc12748a1 + +# p_scalar = n - 29 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52956 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = c8b00ae8187cea1f2065b7cba7df26e43dc22d490e3feb0fce3c15ed55c9764725846b66780443d6019d6ac5d3021470, 1d2a1c015977f16cf6f57e7190c820338e6db10b404505fbab178d26cce851b3293c164920c83de21a5284a0865dded3 + +# p_scalar = n - 28 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52957 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 55be5764d37da1a2d8232f8b4e492aa88fb0c597a4da3e15550e0bee8ff22c6f4169b4117b3c1220c76afaa373b64643, 05cdca3fe7988176792377fbf8eb8319c48ee6f3b033c112184bd4733ad6983a9ff769c4875fee0ff1bc89b628e77f9e + +# p_scalar = n - 27 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52958 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = e8ca780e373e5aec2f7e8d509c6a58fe7228e2d5d18f14d08e0d4168482396f9cf1912934d78291da04482d2467d66e4, 17820a0bc5134ed767e67195d44d3cdf7d26540638c85a85d779adfe31da1bea58a6d7f569e2f8f442aad1d61b68e9f8 + +# p_scalar = n - 26 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52959 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 37a45bdb091cbb80f14b309f03fa90f2808497b7b0bba4a76efedb8023bf0b90b0391b37897b93f56423197d2afd473d, 47d98a9df092241cbf2c0862697c08fd5d512df99d42a72725c7b9146f5f24c7db3f422d95e16d6eedda4ae48a8f5dcb + +# p_scalar = n - 25 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295a +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = c29c6e2ca5bb73313809ab50de2480249bd51b99208abe1e57d0f3d2e2be174abb280dfa3cb3fb361e93722758ce3b83, 1fe6fb42e97809dcda3e1a3d4cebc96ed6a2f51dea8e434401628f059424a3cc83ccbc4e9009e3919944fd2e61124f05 + +# p_scalar = n - 24 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295b +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 4f13f901fc55723f38076e8fca77d74f563361909bd5c2f7540c045a409c930b20c1b8e0d809afcd259f272cfab816a7, 150808e625a302c91395a87966a4e904e8277439a0f9ad3adf5579fa4bea82dd98d82ad1da247ec8890932d7bd3d10c3 + +# p_scalar = n - 23 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295c +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 80826a69eea8f22461e4ca2b905432f01c75b8ab2a351783b9d3dd25429c0a18990ed20b569b8ef6d1b4e74d12e3683b, 9dfccb0de2212559282d2437566718c1f0138950eaf22c7e7ad8a132a527cebe0bcca3f0a65e48137fc33a6bec52abad + +# p_scalar = n - 22 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295d +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = e082882d69059095fd7a8b13f0681fcac382472ebe0e1fdbccd57831927ed783981b788d16f325b84f595351262bb775, 671d69c98fcd841850fc847215809cddc764edf840d0fcf77b1ab489cbf837b7f9d62fd9c9576c694d1c3049faa71fdc + +# p_scalar = n - 21 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295e +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = ab16c626dac012b51b1a0f6c5df0e5372e59ab62bd9ebe6930128aa06177f75d88e0d496dd2f9e2108265e510422ce2f, 21824f411353ccba266ad15aacea5817b454111e8527cd59262ebb498a149098aa740a9e38f17bea8014214b008c5de7 + +# p_scalar = n - 20 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5295f +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 1d1cdf7b5f22346598ca8dd42d96c936f78cff0cd467f03a713466708cbaffc7cd96f20591e71d16ad610a2d94a70ec1, ab9dd81052ebfb015e01b72b4718bbc7422da643ffe6132b9933fb25dccd4df325f546ab321828ffe27a189460d4db60 + +# p_scalar = n - 19 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52960 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = fa0f1f450390d706b3b6639c539802ae23891298fc38538eca109c3b154aad5e22c4cc5f41a8c91282a2ed4abaa84c08, a1d47b23e957776415d1dc778264b6723f5a799bb67f30c39170b3786ff2f643a8c72d3cc3da2eac46b78e5db0dc21d0 + +# p_scalar = n - 18 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52961 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 57505d8d6749703068a232435567169355a96a6879909f083bd1c8f62edb0dbd198fd3f0f38f66625dfee73ce5b82700, 91700b247eb1be639bdd6a092945a7576ffcfc7ca4cfd9bbc266eb844112985854b867b7f78aa7de8a60717f75c64513 + +# p_scalar = n - 17 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52962 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 524f166ee475ce709f6928555330455e7be3737d524ffefce6fc3f2af655a10d3ea4ea4c8ff1f43e8903e1304b4a3cd0, ac37986f55b164c925eb5df1b3c2677af87d6d854a54504a49ce6993336bf1834e23b6ffd5b9c0da3fcc69cd6c12f055 + +# p_scalar = n - 16 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52963 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a10896aa435abaa137065f5313bdc3fa317b63ea2887d5ff37cf65517917652a992afb5b0ecdd2d8da6e8a7f7c33ed91, 659db48181ef251351c305c6a72d1967b333bdfbc88ee148914871dc154d410feb07ddea230cf00d9b21615fefabca26 + +# p_scalar = n - 15 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52964 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = fb62d26f4903026b0fc01fd4eb08599359500917789b307583ccf19550e07b342b7210e2ec3dabd8446ad8884709f4a9, 5a68c6fed0bc27168733fc41400c5797dddc2866d898f4704b23d3a0de06610c61609cbd144bd5862309cc9d6fe989bb + +# p_scalar = n - 14 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52965 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 46d227c432f6b1ba8058994c5710c0c944ce05ff88957166ca6b1af8b1f85c2ad02225fb01ec909f5865e5018f75244c, 4429839ddefbadf5647d24db13690a7472445345d9c3b6911ecc8585e11dbbbf540b8b82730a99d1be4b4a9003cb68e5 + +# p_scalar = n - 13 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52966 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = b51c56e18cf23c94d2657265ed22df97db5203a8d9c1bd568a7a8e4633b7d4aeb25e28c5f6749a959b7aeb7e75ccbdfb, 4617adb7cc6979e181fdbd1c3b490ec3b7feac2dfec38d60789a2a48cf4d0fe3d8e88f1a87cae0c2f4d394596c3d812d + +# p_scalar = n - 12 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52967 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 627b415f9c35b26d523c40dbcf9ab45cf67eb42235d77d8303aced26c8edfee1d4258cc55d9704203db8477270313de0, 0c6e430ef9c4af3d0329eab1f7942f0e40c64a4e66bed5af8c79848fd0e102ac80d60af627aa651afacc45e48be55ed8 + +# p_scalar = n - 11 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52968 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 9c19e9fc7ba9c437f8d89885f0561d7901b8bf56147b66020dcc67706cdad64f4532077c44377abac7708b19b68b8c7d, 9aa62f9f3533f91841821d0c3a53287a2e070f36fe9e682e3ce813298a77e780604fe46bac144b83764eb146bdc4ba25 + +# p_scalar = n - 10 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52969 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = a91a5280db1c212ec2f646025c4845ec54a612d7eb32cabee9f6368eab225fa32a15a9a6e58d6787845539d3c8d99c02, 6eb995bec80174e83e03370a47a9b8aa81961b8ccfd7fd1d592ac0ba794eabfd03a530eb13b9e85cbb971f78e67b5fce + +# p_scalar = n - 9 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296a +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 5cab1d1d53636c6a26d464c6dad54d6adc351dc13cbfff3f26094833a96d745de35d87293fd7e4f92f5d200e2353b92f, e770633431e8f5c67d9429f4ee69a754a6ecaccc68ead0d827f061c7033ca7c23777e270d742aa2ff2813072b18ec0b0 + +# p_scalar = n - 8 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296b +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 5db4f184349cd9b11c7b5fe116b664231d9aebd64f3ddb371c5c2e7193d7e30f9e336de5ae9b587a23f60a05dd9bcbba, 3c0c6dd70d27ef617008d943c48ecf0ee9923263a42dbba2701754bf7d8686e4836dbb36b7e55e870d2cfe83e6655a44 + +# p_scalar = n - 7 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296c +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 932c9f811c89025bf893db589db2df555f4215d1659753ed731edcf8211faa954ce6415f874774b1df13b9d17d69222b, d90a16b6af6c9b3ef57f238e693b07060ff37c0401fff78065aad76f50130844135349d5a8641c790996b2207706a61e + +# p_scalar = n - 6 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296d +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = c482e189f0430c404f0f6a962b02d33b2a33f6661bdf6015ec52930f580d57f2cb2454b339d3413a7eb5c9317d56dad8, c9962152af2a9eba586d8ededf21559a93c9e5f61b546f058bd4bffcb79e33b0739ac69d5b3d4dce3f62b16ea7b08203 + +# p_scalar = n - 5 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296e +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = e1bb26b11d178ffbc676b987e2e8e4c660db2cf5aacc05e67f1eb1b5293c703bc185c0cbcc873466bb595eba68f1f0df, 4db1c9d6e209e4a3e6c5944024de236d4b237faf982c041180b61b3101c35b9922c16e2e72f345662b694ba07073fa21 + +# p_scalar = n - 4 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5296f +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = cfeee6dd34179228fb40f647d685d979078358d4736400ad2e4f153b0aecac4630594ccbee0421e30aae8477ebb68f2c, 50946875303df319e607b9e33820017d147162d30418c6938e3e61a34c542ad1e74bb7f17bfec97e54f3e8e79b3a03b2 + +# p_scalar = n - 3 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = d283fe68e7c1c3ace36f7e2d263aa4703a48d732d51c6c3e6b2034e9a170ccf0c54ea9fff04f779c05e4dbe6c1dc4073, 465465fc983292aff6db68b15102b33968012d5ad2e1d0b4132663c04ef6744692d789a77ae0e36d7e284821c04ee157 + +# p_scalar = n - 2 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52971 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = db93b776427460c39c90a4fd2de4b506da821495f0687f503504e6f0ff9d48a18e6c8f2e022b53f0c8229e55783dde91, e34947f7123df0c2070d430900b0e68409f1fe415172bad915e4f18bdc588258e8e8e4a8c2aaccd842ea84633140bfda + +# p_scalar = n - 1 +p_scalar = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +p = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01 +r = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, 2b78abc25a15c5e9dd8002263969a840c6c3521968f4ffd98bade7562e83b050a1bfa8bf7bb4a9ac23043dad4b03a4fe diff --git a/vendor/ring/src/ec/suite_b/ops/p384_point_sum_tests.txt b/vendor/ring/src/ec/suite_b/ops/p384_point_sum_tests.txt new file mode 100644 index 00000000..3eb772b8 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p384_point_sum_tests.txt @@ -0,0 +1,120 @@ + +# inf + inf == 2 * inf == inf +a = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# inf (n*G) + inf (n*G) == 2 * inf == inf +a = 4a0fd63f894499928e4b2b72aced45cfc589976f4ff86f78c904d59da9379a62b702d968c1184834c11db28c7356ceb6, be113b04484cd4bc215a9f2a33a674c3764c38ca4de135dd50ce8dcf3c85d55a5aad0e171860bdb6c58201e6212d9ac5, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 4a0fd63f894499928e4b2b72aced45cfc589976f4ff86f78c904d59da9379a62b702d968c1184834c11db28c7356ceb6, be113b04484cd4bc215a9f2a33a674c3764c38ca4de135dd50ce8dcf3c85d55a5aad0e171860bdb6c58201e6212d9ac5, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# inf (n*G) + inf == 2 * inf == inf +a = 4a0fd63f894499928e4b2b72aced45cfc589976f4ff86f78c904d59da9379a62b702d968c1184834c11db28c7356ceb6, be113b04484cd4bc215a9f2a33a674c3764c38ca4de135dd50ce8dcf3c85d55a5aad0e171860bdb6c58201e6212d9ac5, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# inf + inf (n*G) == 2 * inf == inf +a = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 4a0fd63f894499928e4b2b72aced45cfc589976f4ff86f78c904d59da9379a62b702d968c1184834c11db28c7356ceb6, be113b04484cd4bc215a9f2a33a674c3764c38ca4de135dd50ce8dcf3c85d55a5aad0e171860bdb6c58201e6212d9ac5, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = inf + +# G + inf == G +a = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, 2b78abc25a15c5e9dd8002263969a840c6c3521968f4ffd98bade7562e83b050a1bfa8bf7bb4a9ac23043dad4b03a4fe, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +b = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, 2b78abc25a15c5e9dd8002263969a840c6c3521968f4ffd98bade7562e83b050a1bfa8bf7bb4a9ac23043dad4b03a4fe + +# G + inf (n*G) == G +a = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, 2b78abc25a15c5e9dd8002263969a840c6c3521968f4ffd98bade7562e83b050a1bfa8bf7bb4a9ac23043dad4b03a4fe, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +b = 4a0fd63f894499928e4b2b72aced45cfc589976f4ff86f78c904d59da9379a62b702d968c1184834c11db28c7356ceb6, be113b04484cd4bc215a9f2a33a674c3764c38ca4de135dd50ce8dcf3c85d55a5aad0e171860bdb6c58201e6212d9ac5, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +r = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, 2b78abc25a15c5e9dd8002263969a840c6c3521968f4ffd98bade7562e83b050a1bfa8bf7bb4a9ac23043dad4b03a4fe + +# inf + G == G +a = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, 2b78abc25a15c5e9dd8002263969a840c6c3521968f4ffd98bade7562e83b050a1bfa8bf7bb4a9ac23043dad4b03a4fe, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +r = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, 2b78abc25a15c5e9dd8002263969a840c6c3521968f4ffd98bade7562e83b050a1bfa8bf7bb4a9ac23043dad4b03a4fe + +# inf (n*G) + G == G +a = 4a0fd63f894499928e4b2b72aced45cfc589976f4ff86f78c904d59da9379a62b702d968c1184834c11db28c7356ceb6, be113b04484cd4bc215a9f2a33a674c3764c38ca4de135dd50ce8dcf3c85d55a5aad0e171860bdb6c58201e6212d9ac5, 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, 2b78abc25a15c5e9dd8002263969a840c6c3521968f4ffd98bade7562e83b050a1bfa8bf7bb4a9ac23043dad4b03a4fe, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +r = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, 2b78abc25a15c5e9dd8002263969a840c6c3521968f4ffd98bade7562e83b050a1bfa8bf7bb4a9ac23043dad4b03a4fe + +# G + G == 2*G +a = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, 2b78abc25a15c5e9dd8002263969a840c6c3521968f4ffd98bade7562e83b050a1bfa8bf7bb4a9ac23043dad4b03a4fe, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +b = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, 2b78abc25a15c5e9dd8002263969a840c6c3521968f4ffd98bade7562e83b050a1bfa8bf7bb4a9ac23043dad4b03a4fe, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +r = db93b776427460c39c90a4fd2de4b506da821495f0687f503504e6f0ff9d48a18e6c8f2e022b53f0c8229e55783dde91, e34947f7123df0c2070d430900b0e68409f1fe415172bad915e4f18bdc588258e8e8e4a8c2aaccd842ea84633140bfda + +# (n-1)*G + G == inf; note that -G is (n-1)*G +a = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, 57b82ca1527c5a01b78bc8ccb9febe74178b04b7c6fde1c1c4ef9a220c4320bb560cb078542256a3900df61c107de6c5, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +b = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, 2b78abc25a15c5e9dd8002263969a840c6c3521968f4ffd98bade7562e83b050a1bfa8bf7bb4a9ac23043dad4b03a4fe, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +r = inf + +# G + (n-1)*G == inf; note that -G is (n-1)*G +a = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, 2b78abc25a15c5e9dd8002263969a840c6c3521968f4ffd98bade7562e83b050a1bfa8bf7bb4a9ac23043dad4b03a4fe, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +b = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, 57b82ca1527c5a01b78bc8ccb9febe74178b04b7c6fde1c1c4ef9a220c4320bb560cb078542256a3900df61c107de6c5, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +r = inf + +# (n-1)*G + (n-1)*G == 2*(n-1)*G +a = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, 57b82ca1527c5a01b78bc8ccb9febe74178b04b7c6fde1c1c4ef9a220c4320bb560cb078542256a3900df61c107de6c5, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +b = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, 57b82ca1527c5a01b78bc8ccb9febe74178b04b7c6fde1c1c4ef9a220c4320bb560cb078542256a3900df61c107de6c5, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +r = db93b776427460c39c90a4fd2de4b506da821495f0687f503504e6f0ff9d48a18e6c8f2e022b53f0c8229e55783dde91, 1cb6b808edc20f3df8f2bcf6ff4f197bf60e01beae8d4526ea1b0e7423a77da617171b563d553327bd157b9dcebf4025 + +# (n-1)*G (affine) + (n-1)*G == 2*(n-1)*G +a = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +b = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, 57b82ca1527c5a01b78bc8ccb9febe74178b04b7c6fde1c1c4ef9a220c4320bb560cb078542256a3900df61c107de6c5, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +r = db93b776427460c39c90a4fd2de4b506da821495f0687f503504e6f0ff9d48a18e6c8f2e022b53f0c8229e55783dde91, 1cb6b808edc20f3df8f2bcf6ff4f197bf60e01beae8d4526ea1b0e7423a77da617171b563d553327bd157b9dcebf4025 + +# (n-1)*G + -(n-1)*G == inf +a = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, 57b82ca1527c5a01b78bc8ccb9febe74178b04b7c6fde1c1c4ef9a220c4320bb560cb078542256a3900df61c107de6c5, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +b = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, a847d35ead83a5fe487437334601418be874fb4839021e3e3b1065ddf3bcdf43a9f34f86abdda95c6ff209e4ef82193a, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +r = inf + +# -(n-1)*G + (n-1)*G == inf +a = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, a847d35ead83a5fe487437334601418be874fb4839021e3e3b1065ddf3bcdf43a9f34f86abdda95c6ff209e4ef82193a, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +b = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, 57b82ca1527c5a01b78bc8ccb9febe74178b04b7c6fde1c1c4ef9a220c4320bb560cb078542256a3900df61c107de6c5, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +r = inf + +# -(n-1)*G (affine) + (n-1)*G == inf +a = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, a847d35ead83a5fe487437334601418be874fb4839021e3e3b1065ddf3bcdf43a9f34f86abdda95c6ff209e4ef82193a, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +b = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, 57b82ca1527c5a01b78bc8ccb9febe74178b04b7c6fde1c1c4ef9a220c4320bb560cb078542256a3900df61c107de6c5, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +r = inf + +# -(n-1)*G + -G == inf; note that -G is (n-1)*G (affine) +a = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, a847d35ead83a5fe487437334601418be874fb4839021e3e3b1065ddf3bcdf43a9f34f86abdda95c6ff209e4ef82193a, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +b = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +r = inf + +# -G + -(n-1)*G == inf; note that -G is (n-1)*G (affine) +a = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +b = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, a847d35ead83a5fe487437334601418be874fb4839021e3e3b1065ddf3bcdf43a9f34f86abdda95c6ff209e4ef82193a, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +r = inf + +# (n-1)*G + -G; == -2*G; note that -G == (n-1)*G (affine) +a = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, 57b82ca1527c5a01b78bc8ccb9febe74178b04b7c6fde1c1c4ef9a220c4320bb560cb078542256a3900df61c107de6c5, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +b = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +r = db93b776427460c39c90a4fd2de4b506da821495f0687f503504e6f0ff9d48a18e6c8f2e022b53f0c8229e55783dde91, 1cb6b808edc20f3df8f2bcf6ff4f197bf60e01beae8d4526ea1b0e7423a77da617171b563d553327bd157b9dcebf4025 + +# -G + (n-1)*G == -2*G; note that -G is (n-1)*G (affine) +a = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +b = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, 57b82ca1527c5a01b78bc8ccb9febe74178b04b7c6fde1c1c4ef9a220c4320bb560cb078542256a3900df61c107de6c5, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +r = db93b776427460c39c90a4fd2de4b506da821495f0687f503504e6f0ff9d48a18e6c8f2e022b53f0c8229e55783dde91, 1cb6b808edc20f3df8f2bcf6ff4f197bf60e01beae8d4526ea1b0e7423a77da617171b563d553327bd157b9dcebf4025 + +# (n-1)*G + -G == -2*G; note that -G is (n-1)*G (affine) +a = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, 57b82ca1527c5a01b78bc8ccb9febe74178b04b7c6fde1c1c4ef9a220c4320bb560cb078542256a3900df61c107de6c5, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +b = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +r = db93b776427460c39c90a4fd2de4b506da821495f0687f503504e6f0ff9d48a18e6c8f2e022b53f0c8229e55783dde91, 1cb6b808edc20f3df8f2bcf6ff4f197bf60e01beae8d4526ea1b0e7423a77da617171b563d553327bd157b9dcebf4025 + +# -G + (n-1)*G == -2*G; note that -G = (n-1)*G +a = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +b = f3ee335326d22614d01b5d7cd0be73f1bfdd75982c9c273f72d0abfeecbca0431601a1bcafcdeb07e21ecf4d91c7b520, 57b82ca1527c5a01b78bc8ccb9febe74178b04b7c6fde1c1c4ef9a220c4320bb560cb078542256a3900df61c107de6c5, 53b3adc887551c0e17c07ecb42d1a5ec105aeec6b0f040a936ed4f756e83939226232b4e11191b3eb1d841c650682ca0 +r = db93b776427460c39c90a4fd2de4b506da821495f0687f503504e6f0ff9d48a18e6c8f2e022b53f0c8229e55783dde91, 1cb6b808edc20f3df8f2bcf6ff4f197bf60e01beae8d4526ea1b0e7423a77da617171b563d553327bd157b9dcebf4025 + +# -G + G == inf; note that -G is (n-1)*G (affine) +a = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +b = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, 2b78abc25a15c5e9dd8002263969a840c6c3521968f4ffd98bade7562e83b050a1bfa8bf7bb4a9ac23043dad4b03a4fe, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +r = inf + +# G + -G == inf; note that -G is (n-1)*G (affine) +a = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, 2b78abc25a15c5e9dd8002263969a840c6c3521968f4ffd98bade7562e83b050a1bfa8bf7bb4a9ac23043dad4b03a4fe, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +b = 4d3aadc2299e1513812ff723614ede2b6454868459a30eff879c3afc541b4d6e20e378e2a0d6ce383dd0756649c0b528, d487543da5ea3a16227ffdd9c69657bf393cade6970b0026745218a9d17c4fae5e40573f844b5653dcfbc253b4fc5b01, 000000000000000000000000000000000000000000000000000000000000000100000000ffffffffffffffff00000001 +r = inf diff --git a/vendor/ring/src/ec/suite_b/ops/p384_scalar_mul_tests.txt b/vendor/ring/src/ec/suite_b/ops/p384_scalar_mul_tests.txt new file mode 100644 index 00000000..8b2d0dca --- /dev/null +++ b/vendor/ring/src/ec/suite_b/ops/p384_scalar_mul_tests.txt @@ -0,0 +1,32 @@ + +a = 00 +b = 00 +r = 00 + +a = 00 +b = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +r = 00 + +a = 01 +b = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +r = caa357821c6244e05eafdf931b0e6b53872b45a79929e877e4c3adcae9998bc585acc2c6a24bb9ca8be13114da045062 + +a = 02 +b = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +r = 9546af0438c489c0bd5fbf26361cd6a70e568b4f3253d0f002240e13defbe9abb33f77dafbe6cc1a2ad648bee7437751 + +a = 03 +b = ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +r = 5fea06865526cea11c0f9eb9512b41fa9581d0f6cb7db9681f846e5cd45e4791e0d22cef5581de69c9cb6068f4829e40 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294b9 +b = 02 +r = caa357821c6244e05eafdf931b0e6b53872b45a79929e877e4c3adcae9998bc585acc2c6a24bb9ca8be13114da045062 + +a = 7fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294ba +b = 02 +r = 355ca87de39dbb1fa150206ce4f194ac78d4ba5866d61787e29f9fb70a9da219d26d4aeba664edb0610ae855f2c0d911 + +a = 800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +b = 02 +r = 01 diff --git a/vendor/ring/src/ec/suite_b/private_key.rs b/vendor/ring/src/ec/suite_b/private_key.rs new file mode 100644 index 00000000..31c35664 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/private_key.rs @@ -0,0 +1,203 @@ +// Copyright 2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Functionality shared by operations on private keys (ECC keygen and +//! ECDSA signing). + +use super::{ops::*, verify_affine_point_is_on_the_curve}; +use crate::{ + arithmetic::montgomery::R, + ec, error, + limb::{self, LIMB_BYTES}, + rand, +}; + +/// Generates a random scalar in the range [1, n). +pub fn random_scalar( + ops: &PrivateKeyOps, + rng: &dyn rand::SecureRandom, +) -> Result { + let num_limbs = ops.common.num_limbs; + let mut bytes = [0; ec::SCALAR_MAX_BYTES]; + let bytes = &mut bytes[..(num_limbs * LIMB_BYTES)]; + generate_private_scalar_bytes(ops, rng, bytes)?; + scalar_from_big_endian_bytes(ops, bytes) +} + +pub fn generate_private_scalar_bytes( + ops: &PrivateKeyOps, + rng: &dyn rand::SecureRandom, + out: &mut [u8], +) -> Result<(), error::Unspecified> { + // [NSA Suite B Implementer's Guide to ECDSA] Appendix A.1.2, and + // [NSA Suite B Implementer's Guide to NIST SP 800-56A] Appendix B.2, + // "Key Pair Generation by Testing Candidates". + // + // [NSA Suite B Implementer's Guide to ECDSA]: doc/ecdsa.pdf. + // [NSA Suite B Implementer's Guide to NIST SP 800-56A]: doc/ecdh.pdf. + + // TODO: The NSA guide also suggests, in appendix B.1, another mechanism + // that would avoid the need to use `rng.fill()` more than once. It works + // by generating an extra 64 bits of random bytes and then reducing the + // output (mod n). Supposedly, this removes enough of the bias towards + // small values from the modular reduction, but it isn't obvious that it is + // sufficient. TODO: Figure out what we can do to mitigate the bias issue + // and switch to the other mechanism. + + let candidate = out; + + // XXX: The value 100 was chosen to match OpenSSL due to uncertainty of + // what specific value would be better, but it seems bad to try 100 times. + for _ in 0..100 { + // NSA Guide Steps 1, 2, and 3. + // + // Since we calculate the length ourselves, it is pointless to check + // it, since we can only check it by doing the same calculation. + + // NSA Guide Step 4. + // + // The requirement that the random number generator has the + // requested security strength is delegated to `rng`. + rng.fill(candidate)?; + + // NSA Guide Steps 5, 6, and 7. + if check_scalar_big_endian_bytes(ops, candidate).is_err() { + continue; + } + + // NSA Guide Step 8 is done in `public_from_private()`. + + // NSA Guide Step 9. + return Ok(()); + } + + Err(error::Unspecified) +} + +// The underlying X25519 and Ed25519 code uses an [u8; 32] to store the private +// key. To make the ECDH and ECDSA code similar to that, we also store the +// private key that way, which means we have to convert it to a Scalar whenever +// we need to use it. +#[inline] +pub fn private_key_as_scalar(ops: &PrivateKeyOps, private_key: &ec::Seed) -> Scalar { + // This cannot fail because we know the private key is valid. + scalar_from_big_endian_bytes(ops, private_key.bytes_less_safe()).unwrap() +} + +pub fn check_scalar_big_endian_bytes( + ops: &PrivateKeyOps, + bytes: &[u8], +) -> Result<(), error::Unspecified> { + debug_assert_eq!(bytes.len(), ops.common.num_limbs * LIMB_BYTES); + scalar_from_big_endian_bytes(ops, bytes).map(|_| ()) +} + +// Parses a fixed-length (zero-padded) big-endian-encoded scalar in the range +// [1, n). This is constant-time with respect to the actual value *only if* the +// value is actually in range. In other words, this won't leak anything about a +// valid value, but it might leak small amounts of information about an invalid +// value (which constraint it failed). +pub fn scalar_from_big_endian_bytes( + ops: &PrivateKeyOps, + bytes: &[u8], +) -> Result { + // [NSA Suite B Implementer's Guide to ECDSA] Appendix A.1.2, and + // [NSA Suite B Implementer's Guide to NIST SP 800-56A] Appendix B.2, + // "Key Pair Generation by Testing Candidates". + // + // [NSA Suite B Implementer's Guide to ECDSA]: doc/ecdsa.pdf. + // [NSA Suite B Implementer's Guide to NIST SP 800-56A]: doc/ecdh.pdf. + // + // Steps 5, 6, and 7. + // + // XXX: The NSA guide says that we should verify that the random scalar is + // in the range [0, n - 1) and then add one to it so that it is in the range + // [1, n). Instead, we verify that the scalar is in the range [1, n). This + // way, we avoid needing to compute or store the value (n - 1), we avoid the + // need to implement a function to add one to a scalar, and we avoid needing + // to convert the scalar back into an array of bytes. + scalar_parse_big_endian_fixed_consttime(ops.common, untrusted::Input::from(bytes)) +} + +pub fn public_from_private( + ops: &PrivateKeyOps, + public_out: &mut [u8], + my_private_key: &ec::Seed, +) -> Result<(), error::Unspecified> { + let elem_and_scalar_bytes = ops.common.num_limbs * LIMB_BYTES; + debug_assert_eq!(public_out.len(), 1 + (2 * elem_and_scalar_bytes)); + let my_private_key = private_key_as_scalar(ops, my_private_key); + let my_public_key = ops.point_mul_base(&my_private_key); + public_out[0] = 4; // Uncompressed encoding. + let (x_out, y_out) = (&mut public_out[1..]).split_at_mut(elem_and_scalar_bytes); + + // `big_endian_affine_from_jacobian` verifies that the point is not at + // infinity and is on the curve. + big_endian_affine_from_jacobian(ops, Some(x_out), Some(y_out), &my_public_key) +} + +pub fn affine_from_jacobian( + ops: &PrivateKeyOps, + p: &Point, +) -> Result<(Elem, Elem), error::Unspecified> { + let z = ops.common.point_z(p); + + // Since we restrict our private key to the range [1, n), the curve has + // prime order, and we verify that the peer's point is on the curve, + // there's no way that the result can be at infinity. But, use `assert!` + // instead of `debug_assert!` anyway + assert!(ops.common.elem_verify_is_not_zero(&z).is_ok()); + + let x = ops.common.point_x(p); + let y = ops.common.point_y(p); + + let zz_inv = ops.elem_inverse_squared(&z); + + let x_aff = ops.common.elem_product(&x, &zz_inv); + + // `y_aff` is needed to validate the point is on the curve. It is also + // needed in the non-ECDH case where we need to output it. + let y_aff = { + let zzzz_inv = ops.common.elem_squared(&zz_inv); + let zzz_inv = ops.common.elem_product(&z, &zzzz_inv); + ops.common.elem_product(&y, &zzz_inv) + }; + + // If we validated our inputs correctly and then computed (x, y, z), then + // (x, y, z) will be on the curve. See + // `verify_affine_point_is_on_the_curve_scaled` for the motivation. + verify_affine_point_is_on_the_curve(ops.common, (&x_aff, &y_aff))?; + + Ok((x_aff, y_aff)) +} + +pub fn big_endian_affine_from_jacobian( + ops: &PrivateKeyOps, + x_out: Option<&mut [u8]>, + y_out: Option<&mut [u8]>, + p: &Point, +) -> Result<(), error::Unspecified> { + let (x_aff, y_aff) = affine_from_jacobian(ops, p)?; + let num_limbs = ops.common.num_limbs; + if let Some(x_out) = x_out { + let x = ops.common.elem_unencoded(&x_aff); + limb::big_endian_from_limbs(&x.limbs[..num_limbs], x_out); + } + if let Some(y_out) = y_out { + let y = ops.common.elem_unencoded(&y_aff); + limb::big_endian_from_limbs(&y.limbs[..num_limbs], y_out); + } + + Ok(()) +} diff --git a/vendor/ring/src/ec/suite_b/public_key.rs b/vendor/ring/src/ec/suite_b/public_key.rs new file mode 100644 index 00000000..5bafa360 --- /dev/null +++ b/vendor/ring/src/ec/suite_b/public_key.rs @@ -0,0 +1,107 @@ +// Copyright 2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Functionality shared by operations on public keys (ECDSA verification and +//! ECDH agreement). + +use super::{ops::*, verify_affine_point_is_on_the_curve}; +use crate::{arithmetic::montgomery::*, error}; + +/// Parses a public key encoded in uncompressed form. The key is validated +/// using the ECC Partial Public-Key Validation Routine from +/// [NIST SP 800-56A, revision 2] Section 5.6.2.3.3, the NSA's +/// "Suite B Implementer's Guide to NIST SP 800-56A," Appendix B.3, and the +/// NSA's "Suite B Implementer's Guide to FIPS 186-3 (ECDSA)," Appendix A.3. +/// +/// [NIST SP 800-56A, revision 2]: +/// http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar2.pdf +pub fn parse_uncompressed_point( + ops: &PublicKeyOps, + input: untrusted::Input, +) -> Result<(Elem, Elem), error::Unspecified> { + // NIST SP 800-56A Step 1: "Verify that Q is not the point at infinity. + // This can be done by inspection if the point is entered in the standard + // affine representation." (We do it by inspection since we only accept + // the affine representation.) + let (x, y) = input.read_all(error::Unspecified, |input| { + // The encoding must be 4, which is the encoding for "uncompressed". + let encoding = input.read_byte()?; + if encoding != 4 { + return Err(error::Unspecified); + } + + // NIST SP 800-56A Step 2: "Verify that xQ and yQ are integers in the + // interval [0, p-1] in the case that q is an odd prime p[.]" + let x = ops.elem_parse(input)?; + let y = ops.elem_parse(input)?; + Ok((x, y)) + })?; + + // NIST SP 800-56A Step 3: "If q is an odd prime p, verify that + // yQ**2 = xQ**3 + axQ + b in GF(p), where the arithmetic is performed + // modulo p." + verify_affine_point_is_on_the_curve(ops.common, (&x, &y))?; + + // NIST SP 800-56A Note: "Since its order is not verified, there is no + // check that the public key is in the correct EC subgroup." + // + // NSA Suite B Implementer's Guide Note: "ECC Full Public-Key Validation + // includes an additional check to ensure that the point has the correct + // order. This check is not necessary for curves having prime order (and + // cofactor h = 1), such as P-256 and P-384." + + Ok((x, y)) +} + +#[cfg(test)] +mod tests { + use super::{super::ops, *}; + use crate::test; + + #[test] + fn parse_uncompressed_point_test() { + test::run( + test_file!("suite_b_public_key_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let curve_name = test_case.consume_string("Curve"); + + let public_key = test_case.consume_bytes("Q"); + let public_key = untrusted::Input::from(&public_key); + let is_valid = test_case.consume_string("Result") == "P"; + + let curve_ops = public_key_ops_from_curve_name(&curve_name); + + let result = parse_uncompressed_point(curve_ops, public_key); + assert_eq!(is_valid, result.is_ok()); + + // TODO: Verify that we when we re-serialize the parsed (x, y), the + // output is equal to the input. + + Ok(()) + }, + ); + } + + fn public_key_ops_from_curve_name(curve_name: &str) -> &'static PublicKeyOps { + if curve_name == "P-256" { + &ops::p256::PUBLIC_KEY_OPS + } else if curve_name == "P-384" { + &ops::p384::PUBLIC_KEY_OPS + } else { + panic!("Unsupported curve: {}", curve_name); + } + } +} diff --git a/vendor/ring/src/ec/suite_b/suite_b_public_key_tests.txt b/vendor/ring/src/ec/suite_b/suite_b_public_key_tests.txt new file mode 100644 index 00000000..229a37eb --- /dev/null +++ b/vendor/ring/src/ec/suite_b/suite_b_public_key_tests.txt @@ -0,0 +1,233 @@ +# Test vectors for public key validation. + +# Invalid Curve Attack from +# https://web-in-security.blogspot.ca/2015/09/practical-invalid-curve-attacks.html +# https://www.nds.rub.de/media/nds/veroeffentlichungen/2015/09/14/main-full.pdf +Curve = P-256 +Q = 04b70bf043c144935756f8f4578c369cf960ee510a5a0f90e93a373a21f0d1397f4a2e0ded57a5156bb82eb4314c37fd4155395a7e51988af289cce531b9c17192 +Result = F + + +# Test vectors for Public Key Point Validation. +# +# These test vectors were generated by applying the patch in +# util/generate-tests.patch to BoringSSL, and then running +# `bssl generate-tests ecc-public-key`. +# + +# X == 0, decompressed with y_bit == 0. This verifies that the +# implementation doesn't reject zero-valued field elements (they +# aren't scalars). +Curve = P-256 +Q = 04000000000000000000000000000000000000000000000000000000000000000066485c780e2f83d72433bd5d84a06bb6541c2af31dae871728bf856a174f93f4 +Result = P + +# X == q. This is invalid because q isn't a valid field element. Some +# broken implementations might accept this if they reduce X mod q +# since q mod q == 0 and the Y coordinate matches the one from the +# x == 0 test case above. +Curve = P-256 +Q = 04ffffffff00000001000000000000000000000000ffffffffffffffffffffffff66485c780e2f83d72433bd5d84a06bb6541c2af31dae871728bf856a174f93f4 +Result = F (X is out of range) + +# X == 0, decompressed with y_bit == 1. +Curve = P-256 +Q = 04000000000000000000000000000000000000000000000000000000000000000099b7a386f1d07c29dbcc42a27b5f9449abe3d50de25178e8d7407a95e8b06c0b +Result = P + +# X == q, decompressed with y_bit == 1. See the previous X == q test +# case. +Curve = P-256 +Q = 04ffffffff00000001000000000000000000000000ffffffffffffffffffffffff99b7a386f1d07c29dbcc42a27b5f9449abe3d50de25178e8d7407a95e8b06c0b +Result = F (X is out of range) + +# The largest valid X coordinate, decompressed with y_bit == 0. This +# helps ensure that the upper bound on coordinate values is not too +# low. +Curve = P-256 +Q = 04ffffffff00000001000000000000000000000000fffffffffffffffffffffffce68e641309515ec1da369202838e0adda2b37040614a5f5460c616e871aa3ede +Result = P + +# X == 0, decompressed with y_bit == 0. This verifies that the +# implementation doesn't reject zero-valued field elements (they +# aren't scalars). +Curve = P-384 +Q = 040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003cf99ef04f51a5ea630ba3f9f960dd593a14c9be39fd2bd215d3b4b08aaaf86bbf927f2c46e52ab06fb742b8850e521e +Result = P + +# X == q. This is invalid because q isn't a valid field element. Some +# broken implementations might accept this if they reduce X mod q +# since q mod q == 0 and the Y coordinate matches the one from the +# x == 0 test case above. +Curve = P-384 +Q = 04fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff3cf99ef04f51a5ea630ba3f9f960dd593a14c9be39fd2bd215d3b4b08aaaf86bbf927f2c46e52ab06fb742b8850e521e +Result = F (X is out of range) + +# X == 0, decompressed with y_bit == 1. +Curve = P-384 +Q = 04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c306610fb0ae5a159cf45c06069f22a6c5eb3641c602d42dea2c4b4f75550793406d80d2b91ad54f9048bd487af1ade1 +Result = P + +# X == q, decompressed with y_bit == 1. See the previous X == q test +# case. +Curve = P-384 +Q = 04fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffffc306610fb0ae5a159cf45c06069f22a6c5eb3641c602d42dea2c4b4f75550793406d80d2b91ad54f9048bd487af1ade1 +Result = F (X is out of range) + +# The largest valid X coordinate, decompressed with y_bit == 0. This +# helps ensure that the upper bound on coordinate values is not too +# low. +Curve = P-384 +Q = 04fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe8cdeadbbd04911a3c1931e26df3fa6439dca9c7eb286fbd46fc319f0e2bb780232baf57825fc0c1912ada2fefe84024c +Result = P + + +# RFC 5903 (IKE and IKEv2 ECDH) Test Vectors +# Q is (grx, gry) in uncompressed encoding. + +Curve = P-256 +Q = 04D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF6356FBF3CA366CC23E8157854C13C58D6AAC23F046ADA30F8353E74F33039872AB +Result = P + +Curve = P-384 +Q = 04E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571DCFBEC7AACF3196472169E838430367F66EEBE3C6E70C416DD5F0C68759DD1FFF83FA40142209DFF5EAAD96DB9E6386C +Result = P + +# Tweaks of the RFC 5903 vectors for testing malformed (syntactically) public +# keys + +Curve = P-256 +Q = "" +Result = F (Peer public key is empty.) + +Curve = P-384 +Q = "" +Result = F (Peer public key is empty.) + +Curve = P-256 +Q = 00 +Result = F (Peer public key is the special encoding of the point at infinity.) + +Curve = P-384 +Q = 00 +Result = F (Peer public key is the special encoding of the point at infinity.) + +Curve = P-256 +Q = 01 +Result = F (Peer public key consists of (only) an invalid encoding indicator.) + +Curve = P-384 +Q = 01 +Result = F (Peer public key consists of (only) an invalid encoding indicator.) + +Curve = P-256 +Q = 02 +Result = F (Peer public key consists of (only) a compressed encoding indicator (0x02).) + +Curve = P-384 +Q = 02 +Result = F (Peer public key consists of (only) a compressed encoding indicator (0x02).) + +Curve = P-256 +Q = 03 +Result = F (Peer public key consists of (only) a compressed encoding indicator (0x03).) + +Curve = P-384 +Q = 03 +Result = F (Peer public key consists of (only) a compressed encoding indicator (0x03).) + +Curve = P-256 +Q = 04 +Result = F (Peer public key consists of (only) a uncompressed encoding indicator.) + +Curve = P-384 +Q = 04 +Result = F (Peer public key consists of (only) a compressed encoding indicator.) + +Curve = P-256 +Q = 04 +Result = F (Peer public key consists of (only) an invalid encoding indicator (0x05).) + +Curve = P-384 +Q = 04 +Result = F (Peer public key consists of (only) an invalid encoding indicator (0x05).) + +Curve = P-256 +Q = 01D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF6356FBF3CA366CC23E8157854C13C58D6AAC23F046ADA30F8353E74F33039872AB +Result = F (Peer public key starts with a completely invalid encoding indicator byte (0x01).) + +Curve = P-384 +Q = 01E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571DCFBEC7AACF3196472169E838430367F66EEBE3C6E70C416DD5F0C68759DD1FFF83FA40142209DFF5EAAD96DB9E6386C +Result = F (Peer public key starts with a completely invalid encoding indicator byte (0x01).) + +Curve = P-256 +Q = 02D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF6356FBF3CA366CC23E8157854C13C58D6AAC23F046ADA30F8353E74F33039872AB +Result = F (Peer public key encoding's first byte is 0x02, should be 0x04.) + +Curve = P-384 +Q = 02E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571DCFBEC7AACF3196472169E838430367F66EEBE3C6E70C416DD5F0C68759DD1FFF83FA40142209DFF5EAAD96DB9E6386C +Result = F (Peer public key encoding's first byte is 0x02, should be 0x04.) + +Curve = P-256 +Q = 03D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF6356FBF3CA366CC23E8157854C13C58D6AAC23F046ADA30F8353E74F33039872AB +Result = F (Peer public key encoding's first byte is 0x03, should be 0x04.) + +Curve = P-384 +Q = 03E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571DCFBEC7AACF3196472169E838430367F66EEBE3C6E70C416DD5F0C68759DD1FFF83FA40142209DFF5EAAD96DB9E6386C +Result = F (Peer public key encoding's first byte is 0x03, should be 0x04.) + +Curve = P-256 +Q = 05D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF6356FBF3CA366CC23E8157854C13C58D6AAC23F046ADA30F8353E74F33039872AB +Result = F (Peer public key starts with a completely invalid encoding indicator byte (0x05).) + +Curve = P-384 +Q = 05E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571DCFBEC7AACF3196472169E838430367F66EEBE3C6E70C416DD5F0C68759DD1FFF83FA40142209DFF5EAAD96DB9E6386C +Result = F (Peer public key starts with a completely invalid encoding indicator byte (0x05).) + +Curve = P-256 +Q = FFD12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF6356FBF3CA366CC23E8157854C13C58D6AAC23F046ADA30F8353E74F33039872AB +Result = F (Peer public key starts with a completely invalid encoding indicator byte (0xff).) + +Curve = P-384 +Q = FFE558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571DCFBEC7AACF3196472169E838430367F66EEBE3C6E70C416DD5F0C68759DD1FFF83FA40142209DFF5EAAD96DB9E6386C +Result = F (Peer public key starts with a completely invalid encoding indicator byte (0xff).) + +Curve = P-256 +Q = D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF6356FBF3CA366CC23E8157854C13C58D6AAC23F046ADA30F8353E74F33039872AB +Result = F (Peer public key is missing the encoding indicator byte.) + +Curve = P-384 +Q = E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571DCFBEC7AACF3196472169E838430367F66EEBE3C6E70C416DD5F0C68759DD1FFF83FA40142209DFF5EAAD96DB9E6386C +Result = F (Peer public key is missing the encoding indicator byte.) + +Curve = P-256 +Q = 04D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF6356FBF3CA366CC23E8157854C13C58D6AAC23F046ADA30F8353E74F33039872 +Result = F (Peer public key has the last byte truncated.) + +Curve = P-384 +Q = 04E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571DCFBEC7AACF3196472169E838430367F66EEBE3C6E70C416DD5F0C68759DD1FFF83FA40142209DFF5EAAD96DB9E638 +Result = F (Peer public key has the last byte truncated.) + +Curve = P-256 +Q = 04D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF63 +Result = F (Peer public key is missing the Y coordinate completely.) + +Curve = P-384 +Q = 04E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571 +Result = F (Peer public key is missing the Y coordinate completely.) + +Curve = P-256 +Q = 02D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF63 +Result = F (Peer public key is in compressed form (0x02).) + +Curve = P-384 +Q = 02E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571 +Result = F (Peer public key is in compressed form (0x02).) + +Curve = P-256 +Q = 03D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF63 +Result = F (Peer public key is in compressed form (0x03).) + +Curve = P-384 +Q = 03E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571 +Result = F (Peer public key is in compressed form (0x03).) diff --git a/vendor/ring/src/endian.rs b/vendor/ring/src/endian.rs new file mode 100644 index 00000000..d1d1aaf6 --- /dev/null +++ b/vendor/ring/src/endian.rs @@ -0,0 +1,150 @@ +use core::num::Wrapping; + +/// An `Encoding` of a type `T` can be converted to/from its byte +/// representation without any byte swapping or other computation. +/// +/// The `Self: Copy` constraint addresses `clippy::declare_interior_mutable_const`. +pub trait Encoding: From + Into +where + Self: Copy, +{ + const ZERO: Self; +} + +/// Work around the inability to implement `AsRef` for arrays of `Encoding`s +/// due to the coherence rules. +pub trait ArrayEncoding { + fn as_byte_array(&self) -> &T; +} + +/// Work around the inability to implement `from` for arrays of `Encoding`s +/// due to the coherence rules. +pub trait FromByteArray { + fn from_byte_array(a: &T) -> Self; +} + +macro_rules! define_endian { + ($endian:ident) => { + #[repr(transparent)] + pub struct $endian(T); + + impl Copy for $endian where T: Copy {} + + impl Clone for $endian + where + T: Clone, + { + #[inline] + fn clone(&self) -> Self { + Self(self.0.clone()) + } + } + + impl core::ops::BitXorAssign for $endian + where + T: core::ops::BitXorAssign, + { + #[inline(always)] + fn bitxor_assign(&mut self, a: Self) { + self.0 ^= a.0; + } + } + }; +} + +macro_rules! impl_from_byte_array { + ($endian:ident, $base:ident, $elems:expr) => { + impl FromByteArray<[u8; $elems * core::mem::size_of::<$base>()]> + for [$endian<$base>; $elems] + { + #[inline] + fn from_byte_array(a: &[u8; $elems * core::mem::size_of::<$base>()]) -> Self { + unsafe { core::mem::transmute_copy(a) } + } + } + }; +} + +macro_rules! impl_array_encoding { + ($endian:ident, $base:ident, $elems:expr) => { + impl ArrayEncoding<[u8; $elems * core::mem::size_of::<$base>()]> + for [$endian<$base>; $elems] + { + #[inline] + fn as_byte_array(&self) -> &[u8; $elems * core::mem::size_of::<$base>()] { + let as_bytes_ptr = + self.as_ptr() as *const [u8; $elems * core::mem::size_of::<$base>()]; + unsafe { &*as_bytes_ptr } + } + } + + impl_from_byte_array!($endian, $base, $elems); + }; +} + +macro_rules! impl_endian { + ($endian:ident, $base:ident, $to_endian:ident, $from_endian:ident, $size:expr) => { + impl Encoding<$base> for $endian<$base> { + const ZERO: Self = Self(0); + } + + impl From<[u8; $size]> for $endian<$base> { + #[inline] + fn from(bytes: [u8; $size]) -> Self { + Self($base::from_ne_bytes(bytes)) + } + } + + impl From<$endian<$base>> for [u8; $size] { + #[inline] + fn from(encoded: $endian<$base>) -> Self { + $base::to_ne_bytes(encoded.0) + } + } + + impl From<$base> for $endian<$base> { + #[inline] + fn from(value: $base) -> Self { + Self($base::$to_endian(value)) + } + } + + impl From> for $endian<$base> { + #[inline] + fn from(Wrapping(value): Wrapping<$base>) -> Self { + Self($base::$to_endian(value)) + } + } + + impl From<$endian<$base>> for $base { + #[inline] + fn from($endian(value): $endian<$base>) -> Self { + $base::$from_endian(value) + } + } + + impl_array_encoding!($endian, $base, 1); + impl_array_encoding!($endian, $base, 2); + impl_array_encoding!($endian, $base, 3); + impl_array_encoding!($endian, $base, 4); + impl_array_encoding!($endian, $base, 8); + }; +} + +define_endian!(BigEndian); +define_endian!(LittleEndian); +impl_endian!(BigEndian, u32, to_be, from_be, 4); +impl_endian!(BigEndian, u64, to_be, from_be, 8); +impl_endian!(LittleEndian, u32, to_le, from_le, 4); +impl_endian!(LittleEndian, u64, to_le, from_le, 8); + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_big_endian() { + let x = BigEndian::from(1u32); + assert_eq!(u32::from(x), 1); + } +} diff --git a/vendor/ring/src/error.rs b/vendor/ring/src/error.rs new file mode 100644 index 00000000..b9ce9299 --- /dev/null +++ b/vendor/ring/src/error.rs @@ -0,0 +1,198 @@ +// Copyright 2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Error reporting. + +#[cfg(feature = "std")] +extern crate std; + +/// An error with absolutely no details. +/// +/// *ring* uses this unit type as the error type in most of its results +/// because (a) usually the specific reasons for a failure are obvious or are +/// not useful to know, and/or (b) providing more details about a failure might +/// provide a dangerous side channel, and/or (c) it greatly simplifies the +/// error handling logic. +/// +/// `Result` is mostly equivalent to +/// `Result`. However, `ring::error::Unspecified` implements +/// [`std::error::Error`] and users of *ring* can implement +/// `From` to map this to their own error types, as +/// described in [“Error Handling†in the Rust Book]: +/// +/// ``` +/// use ring::rand::{self, SecureRandom}; +/// +/// enum Error { +/// CryptoError, +/// +/// # #[cfg(feature = "alloc")] +/// IOError(std::io::Error), +/// // [...] +/// } +/// +/// impl From for Error { +/// fn from(_: ring::error::Unspecified) -> Self { Error::CryptoError } +/// } +/// +/// fn eight_random_bytes() -> Result<[u8; 8], Error> { +/// let rng = rand::SystemRandom::new(); +/// let mut bytes = [0; 8]; +/// +/// // The `From` implementation above makes this +/// // equivalent to +/// // `rng.fill(&mut bytes).map_err(|_| Error::CryptoError)?`. +/// rng.fill(&mut bytes)?; +/// +/// Ok(bytes) +/// } +/// +/// assert!(eight_random_bytes().is_ok()); +/// ``` +/// +/// Experience with using and implementing other crypto libraries like has +/// shown that sophisticated error reporting facilities often cause significant +/// bugs themselves, both within the crypto library and within users of the +/// crypto library. This approach attempts to minimize complexity in the hopes +/// of avoiding such problems. In some cases, this approach may be too extreme, +/// and it may be important for an operation to provide some details about the +/// cause of a failure. Users of *ring* are encouraged to report such cases so +/// that they can be addressed individually. +/// +/// [`std::error::Error`]: https://doc.rust-lang.org/std/error/trait.Error.html +/// [“Error Handling†in the Rust Book]: +/// https://doc.rust-lang.org/book/first-edition/error-handling.html#the-from-trait +#[derive(Clone, Copy, Debug, PartialEq)] +pub struct Unspecified; + +// This is required for the implementation of `std::error::Error`. +impl core::fmt::Display for Unspecified { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.write_str("ring::error::Unspecified") + } +} + +#[cfg(feature = "std")] +impl std::error::Error for Unspecified {} + +impl From for Unspecified { + fn from(_: untrusted::EndOfInput) -> Self { + Self + } +} + +impl From for Unspecified { + fn from(_: core::array::TryFromSliceError) -> Self { + Self + } +} + +/// An error parsing or validating a key. +/// +/// The `Display` implementation will return a string that will help you better +/// understand why a key was rejected change which errors are reported in which +/// situations while minimizing the likelihood that any applications will be +/// broken. +/// +/// Here is an incomplete list of reasons a key may be unsupported: +/// +/// * Invalid or Inconsistent Components: A component of the key has an invalid +/// value, or the mathematical relationship between two (or more) components +/// required for a valid key does not hold. +/// +/// * The encoding of the key is invalid. Perhaps the key isn't in the correct +/// format; e.g. it may be Base64 ("PEM") encoded, in which case the Base64 +/// encoding needs to be undone first. +/// +/// * The encoding includes a versioning mechanism and that mechanism indicates +/// that the key is encoded in a version of the encoding that isn't supported. +/// This might happen for multi-prime RSA keys (keys with more than two +/// private prime factors), which aren't supported, for example. +/// +/// * Too small or too Large: One of the primary components of the key is too +/// small or two large. Too-small keys are rejected for security reasons. Some +/// unnecessarily large keys are rejected for performance reasons. +/// +/// * Wrong algorithm: The key is not valid for the algorithm in which it was +/// being used. +/// +/// * Unexpected errors: Report this as a bug. +#[derive(Copy, Clone, Debug)] +pub struct KeyRejected(&'static str); + +impl KeyRejected { + pub(crate) fn inconsistent_components() -> Self { + Self("InconsistentComponents") + } + + pub(crate) fn invalid_component() -> Self { + Self("InvalidComponent") + } + + #[inline] + pub(crate) fn invalid_encoding() -> Self { + Self("InvalidEncoding") + } + + // XXX: See the comment at the call site. + pub(crate) fn rng_failed() -> Self { + Self("RNG failed") + } + + pub(crate) fn public_key_is_missing() -> Self { + Self("PublicKeyIsMissing") + } + + #[cfg(feature = "alloc")] + pub(crate) fn too_small() -> Self { + Self("TooSmall") + } + + #[cfg(feature = "alloc")] + pub(crate) fn too_large() -> Self { + Self("TooLarge") + } + + pub(crate) fn version_not_supported() -> Self { + Self("VersionNotSupported") + } + + pub(crate) fn wrong_algorithm() -> Self { + Self("WrongAlgorithm") + } + + #[cfg(feature = "alloc")] + pub(crate) fn private_modulus_len_not_multiple_of_512_bits() -> Self { + Self("PrivateModulusLenNotMultipleOf512Bits") + } + + pub(crate) fn unexpected_error() -> Self { + Self("UnexpectedError") + } +} + +#[cfg(feature = "std")] +impl std::error::Error for KeyRejected {} + +impl core::fmt::Display for KeyRejected { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + f.write_str(self.0) + } +} + +impl From for Unspecified { + fn from(_: KeyRejected) -> Self { + Self + } +} diff --git a/vendor/ring/src/hkdf.rs b/vendor/ring/src/hkdf.rs new file mode 100644 index 00000000..5ca4ace2 --- /dev/null +++ b/vendor/ring/src/hkdf.rs @@ -0,0 +1,233 @@ +// Copyright 2015 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! HMAC-based Extract-and-Expand Key Derivation Function. +//! +//! HKDF is specified in [RFC 5869]. +//! +//! [RFC 5869]: https://tools.ietf.org/html/rfc5869 + +use crate::{error, hmac}; + +/// An HKDF algorithm. +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct Algorithm(hmac::Algorithm); + +impl Algorithm { + /// The underlying HMAC algorithm. + #[inline] + pub fn hmac_algorithm(&self) -> hmac::Algorithm { + self.0 + } +} + +/// HKDF using HMAC-SHA-1. Obsolete. +pub static HKDF_SHA1_FOR_LEGACY_USE_ONLY: Algorithm = + Algorithm(hmac::HMAC_SHA1_FOR_LEGACY_USE_ONLY); + +/// HKDF using HMAC-SHA-256. +pub static HKDF_SHA256: Algorithm = Algorithm(hmac::HMAC_SHA256); + +/// HKDF using HMAC-SHA-384. +pub static HKDF_SHA384: Algorithm = Algorithm(hmac::HMAC_SHA384); + +/// HKDF using HMAC-SHA-512. +pub static HKDF_SHA512: Algorithm = Algorithm(hmac::HMAC_SHA512); + +impl KeyType for Algorithm { + fn len(&self) -> usize { + self.0.digest_algorithm().output_len + } +} + +/// A salt for HKDF operations. +#[derive(Debug)] +pub struct Salt(hmac::Key); + +impl Salt { + /// Constructs a new `Salt` with the given value based on the given digest + /// algorithm. + /// + /// Constructing a `Salt` is relatively expensive so it is good to reuse a + /// `Salt` object instead of re-constructing `Salt`s with the same value. + pub fn new(algorithm: Algorithm, value: &[u8]) -> Self { + Self(hmac::Key::new(algorithm.0, value)) + } + + /// The [HKDF-Extract] operation. + /// + /// [HKDF-Extract]: https://tools.ietf.org/html/rfc5869#section-2.2 + pub fn extract(&self, secret: &[u8]) -> Prk { + // The spec says that if no salt is provided then a key of + // `digest_alg.output_len` bytes of zeros is used. But, HMAC keys are + // already zero-padded to the block length, which is larger than the output + // length of the extract step (the length of the digest). Consequently the + // `Key` constructor will automatically do the right thing for a + // zero-length string. + let salt = &self.0; + let prk = hmac::sign(salt, secret); + Prk(hmac::Key::new(salt.algorithm(), prk.as_ref())) + } + + /// The algorithm used to derive this salt. + #[inline] + pub fn algorithm(&self) -> Algorithm { + Algorithm(self.0.algorithm()) + } +} + +impl From> for Salt { + fn from(okm: Okm<'_, Algorithm>) -> Self { + Self(hmac::Key::from(Okm { + prk: okm.prk, + info: okm.info, + len: okm.len().0, + len_cached: okm.len_cached, + })) + } +} + +/// The length of the OKM (Output Keying Material) for a `Prk::expand()` call. +pub trait KeyType { + /// The length that `Prk::expand()` should expand its input to. + fn len(&self) -> usize; +} + +/// A HKDF PRK (pseudorandom key). +#[derive(Clone, Debug)] +pub struct Prk(hmac::Key); + +impl Prk { + /// Construct a new `Prk` directly with the given value. + /// + /// Usually one can avoid using this. It is useful when the application + /// intentionally wants to leak the PRK secret, e.g. to implement + /// `SSLKEYLOGFILE` functionality. + pub fn new_less_safe(algorithm: Algorithm, value: &[u8]) -> Self { + Self(hmac::Key::new(algorithm.hmac_algorithm(), value)) + } + + /// The [HKDF-Expand] operation. + /// + /// [HKDF-Expand]: https://tools.ietf.org/html/rfc5869#section-2.3 + /// + /// Fails if (and only if) `len` is too large. + #[inline] + pub fn expand<'a, L: KeyType>( + &'a self, + info: &'a [&'a [u8]], + len: L, + ) -> Result, error::Unspecified> { + let len_cached = len.len(); + if len_cached > 255 * self.0.algorithm().digest_algorithm().output_len { + return Err(error::Unspecified); + } + Ok(Okm { + prk: self, + info, + len, + len_cached, + }) + } +} + +impl From> for Prk { + fn from(okm: Okm) -> Self { + Self(hmac::Key::from(Okm { + prk: okm.prk, + info: okm.info, + len: okm.len().0, + len_cached: okm.len_cached, + })) + } +} + +/// An HKDF OKM (Output Keying Material) +/// +/// Intentionally not `Clone` or `Copy` as an OKM is generally only safe to +/// use once. +#[derive(Debug)] +pub struct Okm<'a, L: KeyType> { + prk: &'a Prk, + info: &'a [&'a [u8]], + len: L, + len_cached: usize, +} + +impl Okm<'_, L> { + /// The `OkmLength` given to `Prk::expand()`. + #[inline] + pub fn len(&self) -> &L { + &self.len + } + + /// Fills `out` with the output of the HKDF-Expand operation for the given + /// inputs. + /// + /// Fails if (and only if) the requested output length is larger than 255 + /// times the size of the digest algorithm's output. (This is the limit + /// imposed by the HKDF specification due to the way HKDF's counter is + /// constructed.) + #[inline] + pub fn fill(self, out: &mut [u8]) -> Result<(), error::Unspecified> { + fill_okm(self.prk, self.info, out, self.len_cached) + } +} + +fn fill_okm( + prk: &Prk, + info: &[&[u8]], + out: &mut [u8], + len: usize, +) -> Result<(), error::Unspecified> { + if out.len() != len { + return Err(error::Unspecified); + } + + let digest_alg = prk.0.algorithm().digest_algorithm(); + assert!(digest_alg.block_len >= digest_alg.output_len); + + let mut ctx = hmac::Context::with_key(&prk.0); + + let mut n = 1u8; + let mut out = out; + loop { + for info in info { + ctx.update(info); + } + ctx.update(&[n]); + + let t = ctx.sign(); + let t = t.as_ref(); + + // Append `t` to the output. + out = if out.len() < digest_alg.output_len { + let len = out.len(); + out.copy_from_slice(&t[..len]); + &mut [] + } else { + let (this_chunk, rest) = out.split_at_mut(digest_alg.output_len); + this_chunk.copy_from_slice(t); + rest + }; + + if out.is_empty() { + return Ok(()); + } + + ctx = hmac::Context::with_key(&prk.0); + ctx.update(t); + n = n.checked_add(1).unwrap(); + } +} diff --git a/vendor/ring/src/hmac.rs b/vendor/ring/src/hmac.rs new file mode 100644 index 00000000..f5a940c6 --- /dev/null +++ b/vendor/ring/src/hmac.rs @@ -0,0 +1,367 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! HMAC is specified in [RFC 2104]. +//! +//! After a `Key` is constructed, it can be used for multiple signing or +//! verification operations. Separating the construction of the key from the +//! rest of the HMAC operation allows the per-key precomputation to be done +//! only once, instead of it being done in every HMAC operation. +//! +//! Frequently all the data to be signed in a message is available in a single +//! contiguous piece. In that case, the module-level `sign` function can be +//! used. Otherwise, if the input is in multiple parts, `Context` should be +//! used. +//! +//! # Examples: +//! +//! ## Signing a value and verifying it wasn't tampered with +//! +//! ``` +//! use ring::{hmac, rand}; +//! +//! let rng = rand::SystemRandom::new(); +//! let key = hmac::Key::generate(hmac::HMAC_SHA256, &rng)?; +//! +//! let msg = "hello, world"; +//! +//! let tag = hmac::sign(&key, msg.as_bytes()); +//! +//! // [We give access to the message to an untrusted party, and they give it +//! // back to us. We need to verify they didn't tamper with it.] +//! +//! hmac::verify(&key, msg.as_bytes(), tag.as_ref())?; +//! +//! # Ok::<(), ring::error::Unspecified>(()) +//! ``` +//! +//! ## Using the one-shot API: +//! +//! ``` +//! use ring::{digest, hmac, rand}; +//! use ring::rand::SecureRandom; +//! +//! let msg = "hello, world"; +//! +//! // The sender generates a secure key value and signs the message with it. +//! // Note that in a real protocol, a key agreement protocol would be used to +//! // derive `key_value`. +//! let rng = rand::SystemRandom::new(); +//! let key_value: [u8; digest::SHA256_OUTPUT_LEN] = rand::generate(&rng)?.expose(); +//! +//! let s_key = hmac::Key::new(hmac::HMAC_SHA256, key_value.as_ref()); +//! let tag = hmac::sign(&s_key, msg.as_bytes()); +//! +//! // The receiver (somehow!) knows the key value, and uses it to verify the +//! // integrity of the message. +//! let v_key = hmac::Key::new(hmac::HMAC_SHA256, key_value.as_ref()); +//! hmac::verify(&v_key, msg.as_bytes(), tag.as_ref())?; +//! +//! # Ok::<(), ring::error::Unspecified>(()) +//! ``` +//! +//! ## Using the multi-part API: +//! ``` +//! use ring::{digest, hmac, rand}; +//! use ring::rand::SecureRandom; +//! +//! let parts = ["hello", ", ", "world"]; +//! +//! // The sender generates a secure key value and signs the message with it. +//! // Note that in a real protocol, a key agreement protocol would be used to +//! // derive `key_value`. +//! let rng = rand::SystemRandom::new(); +//! let mut key_value: [u8; digest::SHA384_OUTPUT_LEN] = rand::generate(&rng)?.expose(); +//! +//! let s_key = hmac::Key::new(hmac::HMAC_SHA384, key_value.as_ref()); +//! let mut s_ctx = hmac::Context::with_key(&s_key); +//! for part in &parts { +//! s_ctx.update(part.as_bytes()); +//! } +//! let tag = s_ctx.sign(); +//! +//! // The receiver (somehow!) knows the key value, and uses it to verify the +//! // integrity of the message. +//! let v_key = hmac::Key::new(hmac::HMAC_SHA384, key_value.as_ref()); +//! let mut msg = Vec::::new(); +//! for part in &parts { +//! msg.extend(part.as_bytes()); +//! } +//! hmac::verify(&v_key, &msg.as_ref(), tag.as_ref())?; +//! +//! # Ok::<(), ring::error::Unspecified>(()) +//! ``` +//! +//! [RFC 2104]: https://tools.ietf.org/html/rfc2104 +//! [code for `ring::pbkdf2`]: +//! https://github.com/briansmith/ring/blob/main/src/pbkdf2.rs +//! [code for `ring::hkdf`]: +//! https://github.com/briansmith/ring/blob/main/src/hkdf.rs + +use crate::{constant_time, digest, error, hkdf, rand}; + +/// An HMAC algorithm. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Algorithm(&'static digest::Algorithm); + +impl Algorithm { + /// The digest algorithm this HMAC algorithm is based on. + #[inline] + pub fn digest_algorithm(&self) -> &'static digest::Algorithm { + self.0 + } +} + +/// HMAC using SHA-1. Obsolete. +pub static HMAC_SHA1_FOR_LEGACY_USE_ONLY: Algorithm = Algorithm(&digest::SHA1_FOR_LEGACY_USE_ONLY); + +/// HMAC using SHA-256. +pub static HMAC_SHA256: Algorithm = Algorithm(&digest::SHA256); + +/// HMAC using SHA-384. +pub static HMAC_SHA384: Algorithm = Algorithm(&digest::SHA384); + +/// HMAC using SHA-512. +pub static HMAC_SHA512: Algorithm = Algorithm(&digest::SHA512); + +/// An HMAC tag. +/// +/// For a given tag `t`, use `t.as_ref()` to get the tag value as a byte slice. +#[derive(Clone, Copy, Debug)] +pub struct Tag(digest::Digest); + +impl AsRef<[u8]> for Tag { + #[inline] + fn as_ref(&self) -> &[u8] { + self.0.as_ref() + } +} + +/// A key to use for HMAC signing. +#[derive(Clone)] +pub struct Key { + inner: digest::BlockContext, + outer: digest::BlockContext, +} + +impl core::fmt::Debug for Key { + fn fmt(&self, f: &mut core::fmt::Formatter) -> Result<(), core::fmt::Error> { + f.debug_struct("Key") + .field("algorithm", self.algorithm().digest_algorithm()) + .finish() + } +} + +impl Key { + /// Generate an HMAC signing key using the given digest algorithm with a + /// random value generated from `rng`. + /// + /// The key will be `digest_alg.output_len` bytes long, based on the + /// recommendation in [RFC 2104 Section 3]. + /// + /// [RFC 2104 Section 3]: https://tools.ietf.org/html/rfc2104#section-3 + pub fn generate( + algorithm: Algorithm, + rng: &dyn rand::SecureRandom, + ) -> Result { + Self::construct(algorithm, |buf| rng.fill(buf)) + } + + fn construct(algorithm: Algorithm, fill: F) -> Result + where + F: FnOnce(&mut [u8]) -> Result<(), error::Unspecified>, + { + let mut key_bytes = [0; digest::MAX_OUTPUT_LEN]; + let key_bytes = &mut key_bytes[..algorithm.0.output_len]; + fill(key_bytes)?; + Ok(Self::new(algorithm, key_bytes)) + } + + /// Construct an HMAC signing key using the given digest algorithm and key + /// value. + /// + /// `key_value` should be a value generated using a secure random number + /// generator (e.g. the `key_value` output by + /// `SealingKey::generate_serializable()`) or derived from a random key by + /// a key derivation function (e.g. `ring::hkdf`). In particular, + /// `key_value` shouldn't be a password. + /// + /// As specified in RFC 2104, if `key_value` is shorter than the digest + /// algorithm's block length (as returned by `digest::Algorithm::block_len`, + /// not the digest length returned by `digest::Algorithm::output_len`) then + /// it will be padded with zeros. Similarly, if it is longer than the block + /// length then it will be compressed using the digest algorithm. + /// + /// You should not use keys larger than the `digest_alg.block_len` because + /// the truncation described above reduces their strength to only + /// `digest_alg.output_len * 8` bits. Support for such keys is likely to be + /// removed in a future version of *ring*. + pub fn new(algorithm: Algorithm, key_value: &[u8]) -> Self { + let digest_alg = algorithm.0; + let mut key = Self { + inner: digest::BlockContext::new(digest_alg), + outer: digest::BlockContext::new(digest_alg), + }; + + let key_hash; + let key_value = if key_value.len() <= digest_alg.block_len { + key_value + } else { + key_hash = digest::digest(digest_alg, key_value); + key_hash.as_ref() + }; + + const IPAD: u8 = 0x36; + + let mut padded_key = [IPAD; digest::MAX_BLOCK_LEN]; + let padded_key = &mut padded_key[..digest_alg.block_len]; + + // If the key is shorter than one block then we're supposed to act like + // it is padded with zero bytes up to the block length. `x ^ 0 == x` so + // we can just leave the trailing bytes of `padded_key` untouched. + for (padded_key, key_value) in padded_key.iter_mut().zip(key_value.iter()) { + *padded_key ^= *key_value; + } + key.inner.update(&padded_key); + + const OPAD: u8 = 0x5C; + + // Remove the `IPAD` masking, leaving the unmasked padded key, then + // mask with `OPAD`, all in one step. + for b in padded_key.iter_mut() { + *b ^= IPAD ^ OPAD; + } + key.outer.update(&padded_key); + + key + } + + /// The digest algorithm for the key. + #[inline] + pub fn algorithm(&self) -> Algorithm { + Algorithm(self.inner.algorithm) + } +} + +impl hkdf::KeyType for Algorithm { + fn len(&self) -> usize { + self.digest_algorithm().output_len + } +} + +impl From> for Key { + fn from(okm: hkdf::Okm) -> Self { + Self::construct(*okm.len(), |buf| okm.fill(buf)).unwrap() + } +} + +/// A context for multi-step (Init-Update-Finish) HMAC signing. +/// +/// Use `sign` for single-step HMAC signing. +#[derive(Clone)] +pub struct Context { + inner: digest::Context, + outer: digest::BlockContext, +} + +impl core::fmt::Debug for Context { + fn fmt(&self, f: &mut core::fmt::Formatter) -> Result<(), core::fmt::Error> { + f.debug_struct("Context") + .field("algorithm", self.inner.algorithm()) + .finish() + } +} + +impl Context { + /// Constructs a new HMAC signing context using the given digest algorithm + /// and key. + pub fn with_key(signing_key: &Key) -> Self { + Self { + inner: digest::Context::clone_from(&signing_key.inner), + outer: signing_key.outer.clone(), + } + } + + /// Updates the HMAC with all the data in `data`. `update` may be called + /// zero or more times until `finish` is called. + pub fn update(&mut self, data: &[u8]) { + self.inner.update(data); + } + + /// Finalizes the HMAC calculation and returns the HMAC value. `sign` + /// consumes the context so it cannot be (mis-)used after `sign` has been + /// called. + /// + /// It is generally not safe to implement HMAC verification by comparing + /// the return value of `sign` to a tag. Use `verify` for verification + /// instead. + pub fn sign(self) -> Tag { + let algorithm = self.inner.algorithm(); + let mut pending = [0u8; digest::MAX_BLOCK_LEN]; + let pending = &mut pending[..algorithm.block_len]; + let num_pending = algorithm.output_len; + pending[..num_pending].copy_from_slice(self.inner.finish().as_ref()); + Tag(self.outer.finish(pending, num_pending)) + } +} + +/// Calculates the HMAC of `data` using the key `key` in one step. +/// +/// Use `Context` to calculate HMACs where the input is in multiple parts. +/// +/// It is generally not safe to implement HMAC verification by comparing the +/// return value of `sign` to a tag. Use `verify` for verification instead. +pub fn sign(key: &Key, data: &[u8]) -> Tag { + let mut ctx = Context::with_key(key); + ctx.update(data); + ctx.sign() +} + +/// Calculates the HMAC of `data` using the signing key `key`, and verifies +/// whether the resultant value equals `tag`, in one step. +/// +/// This is logically equivalent to, but more efficient than, constructing a +/// `Key` with the same value as `key` and then using `verify`. +/// +/// The verification will be done in constant time to prevent timing attacks. +pub fn verify(key: &Key, data: &[u8], tag: &[u8]) -> Result<(), error::Unspecified> { + constant_time::verify_slices_are_equal(sign(key, data).as_ref(), tag) +} + +#[cfg(test)] +mod tests { + use crate::{hmac, rand}; + + // Make sure that `Key::generate` and `verify_with_own_key` aren't + // completely wacky. + #[test] + pub fn hmac_signing_key_coverage() { + let rng = rand::SystemRandom::new(); + + const HELLO_WORLD_GOOD: &[u8] = b"hello, world"; + const HELLO_WORLD_BAD: &[u8] = b"hello, worle"; + + for algorithm in &[ + hmac::HMAC_SHA1_FOR_LEGACY_USE_ONLY, + hmac::HMAC_SHA256, + hmac::HMAC_SHA384, + hmac::HMAC_SHA512, + ] { + let key = hmac::Key::generate(*algorithm, &rng).unwrap(); + let tag = hmac::sign(&key, HELLO_WORLD_GOOD); + assert!(hmac::verify(&key, HELLO_WORLD_GOOD, tag.as_ref()).is_ok()); + assert!(hmac::verify(&key, HELLO_WORLD_BAD, tag.as_ref()).is_err()) + } + } +} diff --git a/vendor/ring/src/hmac_generate_serializable_tests.txt b/vendor/ring/src/hmac_generate_serializable_tests.txt new file mode 100644 index 00000000..162507be --- /dev/null +++ b/vendor/ring/src/hmac_generate_serializable_tests.txt @@ -0,0 +1,11 @@ +HMAC = SHA1 +Key = 000102030405060708090a0b0c0d0e0f10111213 + +HMAC = SHA256 +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f + +HMAC = SHA384 +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f + +HMAC = SHA512 +Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f diff --git a/vendor/ring/src/io.rs b/vendor/ring/src/io.rs new file mode 100644 index 00000000..e7f7cc36 --- /dev/null +++ b/vendor/ring/src/io.rs @@ -0,0 +1,28 @@ +// Copyright 2018 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Serialization and deserialization. + +#[doc(hidden)] +pub mod der; + +#[cfg(feature = "alloc")] +mod writer; + +#[cfg(feature = "alloc")] +pub(crate) mod der_writer; + +pub(crate) mod positive; + +pub use self::positive::Positive; diff --git a/vendor/ring/src/io/der.rs b/vendor/ring/src/io/der.rs new file mode 100644 index 00000000..1a00d859 --- /dev/null +++ b/vendor/ring/src/io/der.rs @@ -0,0 +1,311 @@ +// Copyright 2015 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Building blocks for parsing DER-encoded ASN.1 structures. +//! +//! This module contains the foundational parts of an ASN.1 DER parser. + +use super::Positive; +use crate::error; + +pub const CONSTRUCTED: u8 = 1 << 5; +pub const CONTEXT_SPECIFIC: u8 = 2 << 6; + +#[derive(Clone, Copy, PartialEq)] +#[repr(u8)] +pub enum Tag { + Boolean = 0x01, + Integer = 0x02, + BitString = 0x03, + OctetString = 0x04, + Null = 0x05, + OID = 0x06, + Sequence = CONSTRUCTED | 0x10, // 0x30 + UTCTime = 0x17, + GeneralizedTime = 0x18, + + ContextSpecificConstructed0 = CONTEXT_SPECIFIC | CONSTRUCTED | 0, + ContextSpecificConstructed1 = CONTEXT_SPECIFIC | CONSTRUCTED | 1, + ContextSpecificConstructed3 = CONTEXT_SPECIFIC | CONSTRUCTED | 3, +} + +impl From for usize { + fn from(tag: Tag) -> Self { + tag as Self + } +} + +impl From for u8 { + fn from(tag: Tag) -> Self { + tag as Self + } // XXX: narrowing conversion. +} + +pub fn expect_tag_and_get_value<'a>( + input: &mut untrusted::Reader<'a>, + tag: Tag, +) -> Result, error::Unspecified> { + let (actual_tag, inner) = read_tag_and_get_value(input)?; + if usize::from(tag) != usize::from(actual_tag) { + return Err(error::Unspecified); + } + Ok(inner) +} + +pub fn read_tag_and_get_value<'a>( + input: &mut untrusted::Reader<'a>, +) -> Result<(u8, untrusted::Input<'a>), error::Unspecified> { + let tag = input.read_byte()?; + if (tag & 0x1F) == 0x1F { + return Err(error::Unspecified); // High tag number form is not allowed. + } + + // If the high order bit of the first byte is set to zero then the length + // is encoded in the seven remaining bits of that byte. Otherwise, those + // seven bits represent the number of bytes used to encode the length. + let length = match input.read_byte()? { + n if (n & 0x80) == 0 => usize::from(n), + 0x81 => { + let second_byte = input.read_byte()?; + if second_byte < 128 { + return Err(error::Unspecified); // Not the canonical encoding. + } + usize::from(second_byte) + } + 0x82 => { + let second_byte = usize::from(input.read_byte()?); + let third_byte = usize::from(input.read_byte()?); + let combined = (second_byte << 8) | third_byte; + if combined < 256 { + return Err(error::Unspecified); // Not the canonical encoding. + } + combined + } + _ => { + return Err(error::Unspecified); // We don't support longer lengths. + } + }; + + let inner = input.read_bytes(length)?; + Ok((tag, inner)) +} + +pub fn bit_string_with_no_unused_bits<'a>( + input: &mut untrusted::Reader<'a>, +) -> Result, error::Unspecified> { + nested(input, Tag::BitString, error::Unspecified, |value| { + let unused_bits_at_end = value.read_byte().map_err(|_| error::Unspecified)?; + if unused_bits_at_end != 0 { + return Err(error::Unspecified); + } + Ok(value.read_bytes_to_end()) + }) +} + +// TODO: investigate taking decoder as a reference to reduce generated code +// size. +pub fn nested<'a, F, R, E: Copy>( + input: &mut untrusted::Reader<'a>, + tag: Tag, + error: E, + decoder: F, +) -> Result +where + F: FnOnce(&mut untrusted::Reader<'a>) -> Result, +{ + let inner = expect_tag_and_get_value(input, tag).map_err(|_| error)?; + inner.read_all(error, decoder) +} + +fn nonnegative_integer<'a>( + input: &mut untrusted::Reader<'a>, + min_value: u8, +) -> Result, error::Unspecified> { + // Verify that |input|, which has had any leading zero stripped off, is the + // encoding of a value of at least |min_value|. + fn check_minimum(input: untrusted::Input, min_value: u8) -> Result<(), error::Unspecified> { + input.read_all(error::Unspecified, |input| { + let first_byte = input.read_byte()?; + if input.at_end() && first_byte < min_value { + return Err(error::Unspecified); + } + let _ = input.read_bytes_to_end(); + Ok(()) + }) + } + + let value = expect_tag_and_get_value(input, Tag::Integer)?; + + value.read_all(error::Unspecified, |input| { + // Empty encodings are not allowed. + let first_byte = input.read_byte()?; + + if first_byte == 0 { + if input.at_end() { + // |value| is the legal encoding of zero. + if min_value > 0 { + return Err(error::Unspecified); + } + return Ok(value); + } + + let r = input.read_bytes_to_end(); + r.read_all(error::Unspecified, |input| { + let second_byte = input.read_byte()?; + if (second_byte & 0x80) == 0 { + // A leading zero is only allowed when the value's high bit + // is set. + return Err(error::Unspecified); + } + let _ = input.read_bytes_to_end(); + Ok(()) + })?; + check_minimum(r, min_value)?; + return Ok(r); + } + + // Negative values are not allowed. + if (first_byte & 0x80) != 0 { + return Err(error::Unspecified); + } + + let _ = input.read_bytes_to_end(); + check_minimum(value, min_value)?; + Ok(value) + }) +} + +/// Parse as integer with a value in the in the range [0, 255], returning its +/// numeric value. This is typically used for parsing version numbers. +#[inline] +pub fn small_nonnegative_integer(input: &mut untrusted::Reader) -> Result { + let value = nonnegative_integer(input, 0)?; + value.read_all(error::Unspecified, |input| { + let r = input.read_byte()?; + Ok(r) + }) +} + +/// Parses a positive DER integer, returning the big-endian-encoded value, +/// sans any leading zero byte. +pub fn positive_integer<'a>( + input: &mut untrusted::Reader<'a>, +) -> Result, error::Unspecified> { + Ok(Positive::new_non_empty_without_leading_zeros( + nonnegative_integer(input, 1)?, + )) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::error; + + fn with_good_i(value: &[u8], f: F) + where + F: FnOnce(&mut untrusted::Reader) -> Result, + { + let r = untrusted::Input::from(value).read_all(error::Unspecified, f); + assert!(r.is_ok()); + } + + fn with_bad_i(value: &[u8], f: F) + where + F: FnOnce(&mut untrusted::Reader) -> Result, + { + let r = untrusted::Input::from(value).read_all(error::Unspecified, f); + assert!(r.is_err()); + } + + static ZERO_INTEGER: &[u8] = &[0x02, 0x01, 0x00]; + + static GOOD_POSITIVE_INTEGERS: &[(&[u8], u8)] = &[ + (&[0x02, 0x01, 0x01], 0x01), + (&[0x02, 0x01, 0x02], 0x02), + (&[0x02, 0x01, 0x7e], 0x7e), + (&[0x02, 0x01, 0x7f], 0x7f), + // Values that need to have an 0x00 prefix to disambiguate them from + // them from negative values. + (&[0x02, 0x02, 0x00, 0x80], 0x80), + (&[0x02, 0x02, 0x00, 0x81], 0x81), + (&[0x02, 0x02, 0x00, 0xfe], 0xfe), + (&[0x02, 0x02, 0x00, 0xff], 0xff), + ]; + + static BAD_NONNEGATIVE_INTEGERS: &[&[u8]] = &[ + &[], // At end of input + &[0x02], // Tag only + &[0x02, 0x00], // Empty value + // Length mismatch + &[0x02, 0x00, 0x01], + &[0x02, 0x01], + &[0x02, 0x01, 0x00, 0x01], + &[0x02, 0x01, 0x01, 0x00], // Would be valid if last byte is ignored. + &[0x02, 0x02, 0x01], + // Negative values + &[0x02, 0x01, 0x80], + &[0x02, 0x01, 0xfe], + &[0x02, 0x01, 0xff], + // Values that have an unnecessary leading 0x00 + &[0x02, 0x02, 0x00, 0x00], + &[0x02, 0x02, 0x00, 0x01], + &[0x02, 0x02, 0x00, 0x02], + &[0x02, 0x02, 0x00, 0x7e], + &[0x02, 0x02, 0x00, 0x7f], + ]; + + #[test] + fn test_small_nonnegative_integer() { + with_good_i(ZERO_INTEGER, |input| { + assert_eq!(small_nonnegative_integer(input)?, 0x00); + Ok(()) + }); + for &(test_in, test_out) in GOOD_POSITIVE_INTEGERS.iter() { + with_good_i(test_in, |input| { + assert_eq!(small_nonnegative_integer(input)?, test_out); + Ok(()) + }); + } + for &test_in in BAD_NONNEGATIVE_INTEGERS.iter() { + with_bad_i(test_in, |input| { + let _ = small_nonnegative_integer(input)?; + Ok(()) + }); + } + } + + #[test] + fn test_positive_integer() { + with_bad_i(ZERO_INTEGER, |input| { + let _ = positive_integer(input)?; + Ok(()) + }); + for &(test_in, test_out) in GOOD_POSITIVE_INTEGERS.iter() { + with_good_i(test_in, |input| { + let test_out = [test_out]; + assert_eq!( + positive_integer(input)?.big_endian_without_leading_zero_as_input(), + untrusted::Input::from(&test_out[..]) + ); + Ok(()) + }); + } + for &test_in in BAD_NONNEGATIVE_INTEGERS.iter() { + with_bad_i(test_in, |input| { + let _ = positive_integer(input)?; + Ok(()) + }); + } + } +} diff --git a/vendor/ring/src/io/der_writer.rs b/vendor/ring/src/io/der_writer.rs new file mode 100644 index 00000000..4c166eb9 --- /dev/null +++ b/vendor/ring/src/io/der_writer.rs @@ -0,0 +1,67 @@ +// Copyright 2018 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use super::{der::*, writer::*, *}; +use alloc::boxed::Box; + +pub(crate) fn write_positive_integer(output: &mut dyn Accumulator, value: &Positive) { + let first_byte = value.first_byte(); + let value = value.big_endian_without_leading_zero_as_input(); + write_tlv(output, Tag::Integer, |output| { + if (first_byte & 0x80) != 0 { + output.write_byte(0); // Disambiguate negative number. + } + write_copy(output, value) + }) +} + +pub(crate) fn write_all(tag: Tag, write_value: &dyn Fn(&mut dyn Accumulator)) -> Box<[u8]> { + let length = { + let mut length = LengthMeasurement::zero(); + write_tlv(&mut length, tag, write_value); + length + }; + + let mut output = Writer::with_capacity(length); + write_tlv(&mut output, tag, write_value); + + output.into() +} + +fn write_tlv(output: &mut dyn Accumulator, tag: Tag, write_value: F) +where + F: Fn(&mut dyn Accumulator), +{ + let length: usize = { + let mut length = LengthMeasurement::zero(); + write_value(&mut length); + length.into() + }; + + output.write_byte(tag as u8); + if length < 0x80 { + output.write_byte(length as u8); + } else if length < 0x1_00 { + output.write_byte(0x81); + output.write_byte(length as u8); + } else if length < 0x1_00_00 { + output.write_byte(0x82); + output.write_byte((length / 0x1_00) as u8); + output.write_byte(length as u8); + } else { + unreachable!(); + }; + + write_value(output); +} diff --git a/vendor/ring/src/io/positive.rs b/vendor/ring/src/io/positive.rs new file mode 100644 index 00000000..06f2625d --- /dev/null +++ b/vendor/ring/src/io/positive.rs @@ -0,0 +1,53 @@ +// Copyright 2018 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Serialization and deserialization. + +/// A serialized positive integer. +#[derive(Copy, Clone)] +pub struct Positive<'a>(untrusted::Input<'a>); + +impl<'a> Positive<'a> { + #[inline] + pub(crate) fn new_non_empty_without_leading_zeros(input: untrusted::Input<'a>) -> Self { + debug_assert!(!input.is_empty()); + debug_assert!(input.len() == 1 || input.as_slice_less_safe()[0] != 0); + Self(input) + } + + /// Returns the value, ordered from significant byte to least significant + /// byte, without any leading zeros. The result is guaranteed to be + /// non-empty. + #[inline] + pub fn big_endian_without_leading_zero(&self) -> &'a [u8] { + self.big_endian_without_leading_zero_as_input() + .as_slice_less_safe() + } + + #[inline] + pub(crate) fn big_endian_without_leading_zero_as_input(&self) -> untrusted::Input<'a> { + self.0 + } +} + +impl Positive<'_> { + /// Returns the first byte. + /// + /// Will not panic because the value is guaranteed to have at least one + /// byte. + pub fn first_byte(&self) -> u8 { + // This won't panic because + self.0.as_slice_less_safe()[0] + } +} diff --git a/vendor/ring/src/io/writer.rs b/vendor/ring/src/io/writer.rs new file mode 100644 index 00000000..24436bd5 --- /dev/null +++ b/vendor/ring/src/io/writer.rs @@ -0,0 +1,79 @@ +// Copyright 2018 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use alloc::{boxed::Box, vec::Vec}; + +pub trait Accumulator { + fn write_byte(&mut self, value: u8); + fn write_bytes(&mut self, value: &[u8]); +} + +pub(super) struct LengthMeasurement { + len: usize, +} + +impl Into for LengthMeasurement { + fn into(self) -> usize { + self.len + } +} + +impl LengthMeasurement { + pub fn zero() -> Self { + Self { len: 0 } + } +} + +impl Accumulator for LengthMeasurement { + fn write_byte(&mut self, _value: u8) { + self.len += 1; + } + fn write_bytes(&mut self, value: &[u8]) { + self.len += value.len(); + } +} + +pub(super) struct Writer { + bytes: Vec, + requested_capacity: usize, +} + +impl Writer { + pub(super) fn with_capacity(capacity: LengthMeasurement) -> Self { + Self { + bytes: Vec::with_capacity(capacity.len), + requested_capacity: capacity.len, + } + } +} + +impl Into> for Writer { + fn into(self) -> Box<[u8]> { + assert_eq!(self.requested_capacity, self.bytes.len()); + self.bytes.into_boxed_slice() + } +} + +impl Accumulator for Writer { + fn write_byte(&mut self, value: u8) { + self.bytes.push(value); + } + fn write_bytes(&mut self, value: &[u8]) { + self.bytes.extend(value); + } +} + +pub fn write_copy(accumulator: &mut dyn Accumulator, to_copy: untrusted::Input) { + accumulator.write_bytes(to_copy.as_slice_less_safe()) +} diff --git a/vendor/ring/src/lib.rs b/vendor/ring/src/lib.rs new file mode 100644 index 00000000..cc66d73c --- /dev/null +++ b/vendor/ring/src/lib.rs @@ -0,0 +1,135 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Safe, fast, small crypto using Rust with BoringSSL's cryptography +//! primitives. +//! +//! # Feature Flags +//! +//! +//!
Feature +//! Description +//!
alloc (default) +//! Enable features that require use of the heap, RSA in particular. +//!
dev_urandom_fallback (default) +//! This is only applicable to Linux. On Linux, by default, +//! ring::rand::SystemRandom will fall back to reading +//! from /dev/urandom if the getrandom() +//! syscall isn't supported at runtime. When the +//! dev_urandom_fallback feature is disabled, such +//! fallbacks will not occur. See the documentation for +//! rand::SystemRandom for more details. +//!
std +//! Enable features that use libstd, in particular +//! std::error::Error integration. Implies `alloc`. +//!
wasm32_c +//! Enables features that require a C compiler on wasm32 targets, such as +//! the constant_time module, HMAC verification, and PBKDF2 +//! verification. Without this feature, only a subset of functionality +//! is provided to wasm32 targets so that a C compiler isn't needed. A +//! typical invocation would be: +//! TARGET_CC=clang-10 TARGET_AR=llvm-ar-10 cargo test --target=wasm32-unknown-unknown --features=wasm32_c +//! with llvm-ar-10 and clang-10 in $PATH. +//! (Going forward more functionality should be enabled by default, without +//! requiring these hacks, and without requiring a C compiler.) +//!
+ +#![doc(html_root_url = "https://briansmith.org/rustdoc/")] +#![allow( + clippy::collapsible_if, + clippy::identity_op, + clippy::len_without_is_empty, + clippy::len_zero, + clippy::let_unit_value, + clippy::many_single_char_names, + clippy::needless_range_loop, + clippy::new_without_default, + clippy::neg_cmp_op_on_partial_ord, + clippy::range_plus_one, + clippy::too_many_arguments, + clippy::trivially_copy_pass_by_ref, + clippy::type_complexity, + clippy::unreadable_literal, + missing_copy_implementations, + missing_debug_implementations, + non_camel_case_types, + non_snake_case, + unsafe_code +)] +// `#[derive(...)]` uses `trivial_numeric_casts` and `unused_qualifications` +// internally. +#![deny(missing_docs, unused_qualifications, variant_size_differences)] +#![forbid(unused_results)] +#![no_std] + +#[cfg(feature = "alloc")] +extern crate alloc; + +#[macro_use] +mod debug; + +#[macro_use] +pub mod test; + +#[macro_use] +mod arithmetic; + +#[macro_use] +mod bssl; + +#[macro_use] +mod polyfill; + +pub mod aead; +pub mod agreement; + +mod bits; + +pub(crate) mod c; +pub mod constant_time; + +pub mod io; + +mod cpu; +pub mod digest; +mod ec; +mod endian; +pub mod error; +pub mod hkdf; +pub mod hmac; +mod limb; +pub mod pbkdf2; +pub mod pkcs8; +pub mod rand; + +#[cfg(feature = "alloc")] +mod rsa; + +pub mod signature; + +mod sealed { + /// Traits that are designed to only be implemented internally in *ring*. + // + // Usage: + // ``` + // use crate::sealed; + // + // pub trait MyType: sealed::Sealed { + // // [...] + // } + // + // impl sealed::Sealed for MyType {} + // ``` + pub trait Sealed {} +} diff --git a/vendor/ring/src/limb.rs b/vendor/ring/src/limb.rs new file mode 100644 index 00000000..bd890832 --- /dev/null +++ b/vendor/ring/src/limb.rs @@ -0,0 +1,621 @@ +// Copyright 2016 David Judd. +// Copyright 2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Unsigned multi-precision integer arithmetic. +//! +//! Limbs ordered least-significant-limb to most-significant-limb. The bits +//! limbs use the native endianness. + +use crate::{c, error}; + +#[cfg(feature = "alloc")] +use crate::bits; + +#[cfg(feature = "alloc")] +use core::num::Wrapping; + +// XXX: Not correct for x32 ABIs. +#[cfg(target_pointer_width = "64")] +pub type Limb = u64; +#[cfg(target_pointer_width = "32")] +pub type Limb = u32; +#[cfg(target_pointer_width = "64")] +pub const LIMB_BITS: usize = 64; +#[cfg(target_pointer_width = "32")] +pub const LIMB_BITS: usize = 32; + +#[cfg(target_pointer_width = "64")] +#[derive(Debug, PartialEq)] +#[repr(u64)] +pub enum LimbMask { + True = 0xffff_ffff_ffff_ffff, + False = 0, +} + +#[cfg(target_pointer_width = "32")] +#[derive(Debug, PartialEq)] +#[repr(u32)] +pub enum LimbMask { + True = 0xffff_ffff, + False = 0, +} + +pub const LIMB_BYTES: usize = (LIMB_BITS + 7) / 8; + +#[inline] +pub fn limbs_equal_limbs_consttime(a: &[Limb], b: &[Limb]) -> LimbMask { + extern "C" { + fn LIMBS_equal(a: *const Limb, b: *const Limb, num_limbs: c::size_t) -> LimbMask; + } + + assert_eq!(a.len(), b.len()); + unsafe { LIMBS_equal(a.as_ptr(), b.as_ptr(), a.len()) } +} + +#[inline] +pub fn limbs_less_than_limbs_consttime(a: &[Limb], b: &[Limb]) -> LimbMask { + assert_eq!(a.len(), b.len()); + unsafe { LIMBS_less_than(a.as_ptr(), b.as_ptr(), b.len()) } +} + +#[inline] +pub fn limbs_less_than_limbs_vartime(a: &[Limb], b: &[Limb]) -> bool { + limbs_less_than_limbs_consttime(a, b) == LimbMask::True +} + +#[inline] +#[cfg(feature = "alloc")] +pub fn limbs_less_than_limb_constant_time(a: &[Limb], b: Limb) -> LimbMask { + unsafe { LIMBS_less_than_limb(a.as_ptr(), b, a.len()) } +} + +#[inline] +pub fn limbs_are_zero_constant_time(limbs: &[Limb]) -> LimbMask { + unsafe { LIMBS_are_zero(limbs.as_ptr(), limbs.len()) } +} + +#[cfg(feature = "alloc")] +#[inline] +pub fn limbs_are_even_constant_time(limbs: &[Limb]) -> LimbMask { + unsafe { LIMBS_are_even(limbs.as_ptr(), limbs.len()) } +} + +#[cfg(feature = "alloc")] +#[inline] +pub fn limbs_equal_limb_constant_time(a: &[Limb], b: Limb) -> LimbMask { + unsafe { LIMBS_equal_limb(a.as_ptr(), b, a.len()) } +} + +/// Returns the number of bits in `a`. +// +// This strives to be constant-time with respect to the values of all bits +// except the most significant bit. This does not attempt to be constant-time +// with respect to `a.len()` or the value of the result or the value of the +// most significant bit (It's 1, unless the input is zero, in which case it's +// zero.) +#[cfg(feature = "alloc")] +pub fn limbs_minimal_bits(a: &[Limb]) -> bits::BitLength { + for num_limbs in (1..=a.len()).rev() { + let high_limb = a[num_limbs - 1]; + + // Find the number of set bits in |high_limb| by a linear scan from the + // most significant bit to the least significant bit. This works great + // for the most common inputs because usually the most significant bit + // it set. + for high_limb_num_bits in (1..=LIMB_BITS).rev() { + let shifted = unsafe { LIMB_shr(high_limb, high_limb_num_bits - 1) }; + if shifted != 0 { + return bits::BitLength::from_usize_bits( + ((num_limbs - 1) * LIMB_BITS) + high_limb_num_bits, + ); + } + } + } + + // No bits were set. + bits::BitLength::from_usize_bits(0) +} + +/// Equivalent to `if (r >= m) { r -= m; }` +#[inline] +pub fn limbs_reduce_once_constant_time(r: &mut [Limb], m: &[Limb]) { + assert_eq!(r.len(), m.len()); + unsafe { LIMBS_reduce_once(r.as_mut_ptr(), m.as_ptr(), m.len()) }; +} + +#[derive(Clone, Copy, PartialEq)] +pub enum AllowZero { + No, + Yes, +} + +/// Parses `input` into `result`, reducing it via conditional subtraction +/// (mod `m`). Assuming 2**((self.num_limbs * LIMB_BITS) - 1) < m and +/// m < 2**(self.num_limbs * LIMB_BITS), the value will be reduced mod `m` in +/// constant time so that the result is in the range [0, m) if `allow_zero` is +/// `AllowZero::Yes`, or [1, m) if `allow_zero` is `AllowZero::No`. `result` is +/// padded with zeros to its length. +pub fn parse_big_endian_in_range_partially_reduced_and_pad_consttime( + input: untrusted::Input, + allow_zero: AllowZero, + m: &[Limb], + result: &mut [Limb], +) -> Result<(), error::Unspecified> { + parse_big_endian_and_pad_consttime(input, result)?; + limbs_reduce_once_constant_time(result, m); + if allow_zero != AllowZero::Yes { + if limbs_are_zero_constant_time(&result) != LimbMask::False { + return Err(error::Unspecified); + } + } + Ok(()) +} + +/// Parses `input` into `result`, verifies that the value is less than +/// `max_exclusive`, and pads `result` with zeros to its length. If `allow_zero` +/// is not `AllowZero::Yes`, zero values are rejected. +/// +/// This attempts to be constant-time with respect to the actual value *only if* +/// the value is actually in range. In other words, this won't leak anything +/// about a valid value, but it might leak small amounts of information about an +/// invalid value (which constraint it failed). +pub fn parse_big_endian_in_range_and_pad_consttime( + input: untrusted::Input, + allow_zero: AllowZero, + max_exclusive: &[Limb], + result: &mut [Limb], +) -> Result<(), error::Unspecified> { + parse_big_endian_and_pad_consttime(input, result)?; + if limbs_less_than_limbs_consttime(&result, max_exclusive) != LimbMask::True { + return Err(error::Unspecified); + } + if allow_zero != AllowZero::Yes { + if limbs_are_zero_constant_time(&result) != LimbMask::False { + return Err(error::Unspecified); + } + } + Ok(()) +} + +/// Parses `input` into `result`, padding `result` with zeros to its length. +/// This attempts to be constant-time with respect to the value but not with +/// respect to the length; it is assumed that the length is public knowledge. +pub fn parse_big_endian_and_pad_consttime( + input: untrusted::Input, + result: &mut [Limb], +) -> Result<(), error::Unspecified> { + if input.is_empty() { + return Err(error::Unspecified); + } + + // `bytes_in_current_limb` is the number of bytes in the current limb. + // It will be `LIMB_BYTES` for all limbs except maybe the highest-order + // limb. + let mut bytes_in_current_limb = input.len() % LIMB_BYTES; + if bytes_in_current_limb == 0 { + bytes_in_current_limb = LIMB_BYTES; + } + + let num_encoded_limbs = (input.len() / LIMB_BYTES) + + (if bytes_in_current_limb == LIMB_BYTES { + 0 + } else { + 1 + }); + if num_encoded_limbs > result.len() { + return Err(error::Unspecified); + } + + for r in &mut result[..] { + *r = 0; + } + + // XXX: Questionable as far as constant-timedness is concerned. + // TODO: Improve this. + input.read_all(error::Unspecified, |input| { + for i in 0..num_encoded_limbs { + let mut limb: Limb = 0; + for _ in 0..bytes_in_current_limb { + let b: Limb = input.read_byte()?.into(); + limb = (limb << 8) | b; + } + result[num_encoded_limbs - i - 1] = limb; + bytes_in_current_limb = LIMB_BYTES; + } + Ok(()) + }) +} + +pub fn big_endian_from_limbs(limbs: &[Limb], out: &mut [u8]) { + let num_limbs = limbs.len(); + let out_len = out.len(); + assert_eq!(out_len, num_limbs * LIMB_BYTES); + for i in 0..num_limbs { + let mut limb = limbs[i]; + for j in 0..LIMB_BYTES { + out[((num_limbs - i - 1) * LIMB_BYTES) + (LIMB_BYTES - j - 1)] = (limb & 0xff) as u8; + limb >>= 8; + } + } +} + +#[cfg(feature = "alloc")] +pub type Window = Limb; + +/// Processes `limbs` as a sequence of 5-bit windows, folding the windows from +/// most significant to least significant and returning the accumulated result. +/// The first window will be mapped by `init` to produce the initial value for +/// the accumulator. Then `f` will be called to fold the accumulator and the +/// next window until all windows are processed. When the input's bit length +/// isn't divisible by 5, the window passed to `init` will be partial; all +/// windows passed to `fold` will be full. +/// +/// This is designed to avoid leaking the contents of `limbs` through side +/// channels as long as `init` and `fold` are side-channel free. +/// +/// Panics if `limbs` is empty. +#[cfg(feature = "alloc")] +pub fn fold_5_bit_windows R, F: Fn(R, Window) -> R>( + limbs: &[Limb], + init: I, + fold: F, +) -> R { + #[derive(Clone, Copy)] + #[repr(transparent)] + struct BitIndex(Wrapping); + + const WINDOW_BITS: Wrapping = Wrapping(5); + + extern "C" { + fn LIMBS_window5_split_window( + lower_limb: Limb, + higher_limb: Limb, + index_within_word: BitIndex, + ) -> Window; + fn LIMBS_window5_unsplit_window(limb: Limb, index_within_word: BitIndex) -> Window; + } + + let num_limbs = limbs.len(); + let mut window_low_bit = { + let num_whole_windows = (num_limbs * LIMB_BITS) / 5; + let mut leading_bits = (num_limbs * LIMB_BITS) - (num_whole_windows * 5); + if leading_bits == 0 { + leading_bits = WINDOW_BITS.0; + } + BitIndex(Wrapping(LIMB_BITS - leading_bits)) + }; + + let initial_value = { + let leading_partial_window = + unsafe { LIMBS_window5_split_window(*limbs.last().unwrap(), 0, window_low_bit) }; + window_low_bit.0 -= WINDOW_BITS; + init(leading_partial_window) + }; + + let mut low_limb = 0; + limbs + .iter() + .rev() + .fold(initial_value, |mut acc, current_limb| { + let higher_limb = low_limb; + low_limb = *current_limb; + + if window_low_bit.0 > Wrapping(LIMB_BITS) - WINDOW_BITS { + let window = + unsafe { LIMBS_window5_split_window(low_limb, higher_limb, window_low_bit) }; + window_low_bit.0 -= WINDOW_BITS; + acc = fold(acc, window); + }; + while window_low_bit.0 < Wrapping(LIMB_BITS) { + let window = unsafe { LIMBS_window5_unsplit_window(low_limb, window_low_bit) }; + // The loop exits when this subtraction underflows, causing `window_low_bit` to + // wrap around to a very large value. + window_low_bit.0 -= WINDOW_BITS; + acc = fold(acc, window); + } + window_low_bit.0 += Wrapping(LIMB_BITS); // "Fix" the underflow. + + acc + }) +} + +#[inline] +pub(crate) fn limbs_add_assign_mod(a: &mut [Limb], b: &[Limb], m: &[Limb]) { + debug_assert_eq!(a.len(), m.len()); + debug_assert_eq!(b.len(), m.len()); + extern "C" { + // `r` and `a` may alias. + fn LIMBS_add_mod( + r: *mut Limb, + a: *const Limb, + b: *const Limb, + m: *const Limb, + num_limbs: c::size_t, + ); + } + unsafe { LIMBS_add_mod(a.as_mut_ptr(), a.as_ptr(), b.as_ptr(), m.as_ptr(), m.len()) } +} + +extern "C" { + #[cfg(feature = "alloc")] + fn LIMB_shr(a: Limb, shift: c::size_t) -> Limb; + + #[cfg(feature = "alloc")] + fn LIMBS_are_even(a: *const Limb, num_limbs: c::size_t) -> LimbMask; + fn LIMBS_are_zero(a: *const Limb, num_limbs: c::size_t) -> LimbMask; + #[cfg(feature = "alloc")] + fn LIMBS_equal_limb(a: *const Limb, b: Limb, num_limbs: c::size_t) -> LimbMask; + fn LIMBS_less_than(a: *const Limb, b: *const Limb, num_limbs: c::size_t) -> LimbMask; + #[cfg(feature = "alloc")] + fn LIMBS_less_than_limb(a: *const Limb, b: Limb, num_limbs: c::size_t) -> LimbMask; + fn LIMBS_reduce_once(r: *mut Limb, m: *const Limb, num_limbs: c::size_t); +} + +#[cfg(test)] +mod tests { + use super::*; + + const MAX: Limb = LimbMask::True as Limb; + + #[test] + fn test_limbs_are_even() { + static EVENS: &[&[Limb]] = &[ + &[], + &[0], + &[2], + &[0, 0], + &[2, 0], + &[0, 1], + &[0, 2], + &[0, 3], + &[0, 0, 0, 0, MAX], + ]; + for even in EVENS { + assert_eq!(limbs_are_even_constant_time(even), LimbMask::True); + } + static ODDS: &[&[Limb]] = &[ + &[1], + &[3], + &[1, 0], + &[3, 0], + &[1, 1], + &[1, 2], + &[1, 3], + &[1, 0, 0, 0, MAX], + ]; + for odd in ODDS { + assert_eq!(limbs_are_even_constant_time(odd), LimbMask::False); + } + } + + static ZEROES: &[&[Limb]] = &[ + &[], + &[0], + &[0, 0], + &[0, 0, 0], + &[0, 0, 0, 0], + &[0, 0, 0, 0, 0], + &[0, 0, 0, 0, 0, 0, 0], + &[0, 0, 0, 0, 0, 0, 0, 0], + &[0, 0, 0, 0, 0, 0, 0, 0, 0], + ]; + + static NONZEROES: &[&[Limb]] = &[ + &[1], + &[0, 1], + &[1, 1], + &[1, 0, 0, 0], + &[0, 1, 0, 0], + &[0, 0, 1, 0], + &[0, 0, 0, 1], + ]; + + #[test] + fn test_limbs_are_zero() { + for zero in ZEROES { + assert_eq!(limbs_are_zero_constant_time(zero), LimbMask::True); + } + for nonzero in NONZEROES { + assert_eq!(limbs_are_zero_constant_time(nonzero), LimbMask::False); + } + } + + #[test] + fn test_limbs_equal_limb() { + for zero in ZEROES { + assert_eq!(limbs_equal_limb_constant_time(zero, 0), LimbMask::True); + } + for nonzero in NONZEROES { + assert_eq!(limbs_equal_limb_constant_time(nonzero, 0), LimbMask::False); + } + static EQUAL: &[(&[Limb], Limb)] = &[ + (&[1], 1), + (&[MAX], MAX), + (&[1, 0], 1), + (&[MAX, 0, 0], MAX), + (&[0b100], 0b100), + (&[0b100, 0], 0b100), + ]; + for &(a, b) in EQUAL { + assert_eq!(limbs_equal_limb_constant_time(a, b), LimbMask::True); + } + static UNEQUAL: &[(&[Limb], Limb)] = &[ + (&[0], 1), + (&[2], 1), + (&[3], 1), + (&[1, 1], 1), + (&[0b100, 0b100], 0b100), + (&[1, 0, 0b100, 0, 0, 0, 0, 0], 1), + (&[1, 0, 0, 0, 0, 0, 0, 0b100], 1), + (&[MAX, MAX], MAX), + (&[MAX, 1], MAX), + ]; + for &(a, b) in UNEQUAL { + assert_eq!(limbs_equal_limb_constant_time(a, b), LimbMask::False); + } + } + + #[test] + #[cfg(feature = "alloc")] + fn test_limbs_less_than_limb_constant_time() { + static LESSER: &[(&[Limb], Limb)] = &[ + (&[0], 1), + (&[0, 0], 1), + (&[1, 0], 2), + (&[2, 0], 3), + (&[2, 0], 3), + (&[MAX - 1], MAX), + (&[MAX - 1, 0], MAX), + ]; + for &(a, b) in LESSER { + assert_eq!(limbs_less_than_limb_constant_time(a, b), LimbMask::True); + } + static EQUAL: &[(&[Limb], Limb)] = &[ + (&[0], 0), + (&[0, 0, 0, 0], 0), + (&[1], 1), + (&[1, 0, 0, 0, 0, 0, 0], 1), + (&[MAX], MAX), + ]; + static GREATER: &[(&[Limb], Limb)] = &[ + (&[1], 0), + (&[2, 0], 1), + (&[3, 0, 0, 0], 1), + (&[0, 1, 0, 0], 1), + (&[0, 0, 1, 0], 1), + (&[0, 0, 1, 1], 1), + (&[MAX], MAX - 1), + ]; + for &(a, b) in EQUAL.iter().chain(GREATER.iter()) { + assert_eq!(limbs_less_than_limb_constant_time(a, b), LimbMask::False); + } + } + + #[test] + fn test_parse_big_endian_and_pad_consttime() { + const LIMBS: usize = 4; + + { + // Empty input. + let inp = untrusted::Input::from(&[]); + let mut result = [0; LIMBS]; + assert!(parse_big_endian_and_pad_consttime(inp, &mut result).is_err()); + } + + // The input is longer than will fit in the given number of limbs. + { + let inp = [1, 2, 3, 4, 5, 6, 7, 8, 9]; + let inp = untrusted::Input::from(&inp); + let mut result = [0; 8 / LIMB_BYTES]; + assert!(parse_big_endian_and_pad_consttime(inp, &mut result[..]).is_err()); + } + + // Less than a full limb. + { + let inp = [0xfe]; + let inp = untrusted::Input::from(&inp); + let mut result = [0; LIMBS]; + assert_eq!( + Ok(()), + parse_big_endian_and_pad_consttime(inp, &mut result[..]) + ); + assert_eq!(&[0xfe, 0, 0, 0], &result); + } + + // A whole limb for 32-bit, half a limb for 64-bit. + { + let inp = [0xbe, 0xef, 0xf0, 0x0d]; + let inp = untrusted::Input::from(&inp); + let mut result = [0; LIMBS]; + assert_eq!(Ok(()), parse_big_endian_and_pad_consttime(inp, &mut result)); + assert_eq!(&[0xbeeff00d, 0, 0, 0], &result); + } + + // XXX: This is a weak set of tests. TODO: expand it. + } + + #[test] + fn test_big_endian_from_limbs_same_length() { + #[cfg(target_pointer_width = "32")] + let limbs = [ + 0xbccddeef, 0x89900aab, 0x45566778, 0x01122334, 0xddeeff00, 0x99aabbcc, 0x55667788, + 0x11223344, + ]; + + #[cfg(target_pointer_width = "64")] + let limbs = [ + 0x8990_0aab_bccd_deef, + 0x0112_2334_4556_6778, + 0x99aa_bbcc_ddee_ff00, + 0x1122_3344_5566_7788, + ]; + + let expected = [ + 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, + 0xff, 0x00, 0x01, 0x12, 0x23, 0x34, 0x45, 0x56, 0x67, 0x78, 0x89, 0x90, 0x0a, 0xab, + 0xbc, 0xcd, 0xde, 0xef, + ]; + + let mut out = [0xabu8; 32]; + big_endian_from_limbs(&limbs[..], &mut out); + assert_eq!(&out[..], &expected[..]); + } + + #[should_panic] + #[test] + fn test_big_endian_from_limbs_fewer_limbs() { + #[cfg(target_pointer_width = "32")] + // Two fewer limbs. + let limbs = [ + 0xbccddeef, 0x89900aab, 0x45566778, 0x01122334, 0xddeeff00, 0x99aabbcc, + ]; + + // One fewer limb. + #[cfg(target_pointer_width = "64")] + let limbs = [ + 0x8990_0aab_bccd_deef, + 0x0112_2334_4556_6778, + 0x99aa_bbcc_ddee_ff00, + ]; + + let mut out = [0xabu8; 32]; + + big_endian_from_limbs(&limbs[..], &mut out); + } + + #[test] + fn test_limbs_minimal_bits() { + const ALL_ONES: Limb = LimbMask::True as Limb; + static CASES: &[(&[Limb], usize)] = &[ + (&[], 0), + (&[0], 0), + (&[ALL_ONES], LIMB_BITS), + (&[ALL_ONES, 0], LIMB_BITS), + (&[ALL_ONES, 1], LIMB_BITS + 1), + (&[0, 0], 0), + (&[1, 0], 1), + (&[0, 1], LIMB_BITS + 1), + (&[0, ALL_ONES], 2 * LIMB_BITS), + (&[ALL_ONES, ALL_ONES], 2 * LIMB_BITS), + (&[ALL_ONES, ALL_ONES >> 1], 2 * LIMB_BITS - 1), + (&[ALL_ONES, 0b100_0000], LIMB_BITS + 7), + (&[ALL_ONES, 0b101_0000], LIMB_BITS + 7), + (&[ALL_ONES, ALL_ONES >> 1], LIMB_BITS + (LIMB_BITS) - 1), + ]; + for (limbs, bits) in CASES { + assert_eq!(limbs_minimal_bits(limbs).as_usize_bits(), *bits); + } + } +} diff --git a/vendor/ring/src/pbkdf2.rs b/vendor/ring/src/pbkdf2.rs new file mode 100644 index 00000000..c2bd33e3 --- /dev/null +++ b/vendor/ring/src/pbkdf2.rs @@ -0,0 +1,272 @@ +// Copyright 2015 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! PBKDF2 derivation and verification. +//! +//! Use `derive` to derive PBKDF2 outputs. Use `verify` to verify secret +//! against previously-derived outputs. +//! +//! PBKDF2 is specified in [RFC 2898 Section 5.2] with test vectors given in +//! [RFC 6070]. See also [NIST Special Publication 800-132]. +//! +//! [RFC 2898 Section 5.2]: https://tools.ietf.org/html/rfc2898#section-5.2 +//! [RFC 6070]: https://tools.ietf.org/html/rfc6070 +//! [NIST Special Publication 800-132]: +//! http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf +//! +//! # Examples +//! +//! ## Password Database Example +//! +//! ``` +//! use ring::{digest, pbkdf2}; +//! use std::{collections::HashMap, num::NonZeroU32}; +//! +//! static PBKDF2_ALG: pbkdf2::Algorithm = pbkdf2::PBKDF2_HMAC_SHA256; +//! const CREDENTIAL_LEN: usize = digest::SHA256_OUTPUT_LEN; +//! pub type Credential = [u8; CREDENTIAL_LEN]; +//! +//! enum Error { +//! WrongUsernameOrPassword +//! } +//! +//! struct PasswordDatabase { +//! pbkdf2_iterations: NonZeroU32, +//! db_salt_component: [u8; 16], +//! +//! // Normally this would be a persistent database. +//! storage: HashMap, +//! } +//! +//! impl PasswordDatabase { +//! pub fn store_password(&mut self, username: &str, password: &str) { +//! let salt = self.salt(username); +//! let mut to_store: Credential = [0u8; CREDENTIAL_LEN]; +//! pbkdf2::derive(PBKDF2_ALG, self.pbkdf2_iterations, &salt, +//! password.as_bytes(), &mut to_store); +//! self.storage.insert(String::from(username), to_store); +//! } +//! +//! pub fn verify_password(&self, username: &str, attempted_password: &str) +//! -> Result<(), Error> { +//! match self.storage.get(username) { +//! Some(actual_password) => { +//! let salt = self.salt(username); +//! pbkdf2::verify(PBKDF2_ALG, self.pbkdf2_iterations, &salt, +//! attempted_password.as_bytes(), +//! actual_password) +//! .map_err(|_| Error::WrongUsernameOrPassword) +//! }, +//! +//! None => Err(Error::WrongUsernameOrPassword) +//! } +//! } +//! +//! // The salt should have a user-specific component so that an attacker +//! // cannot crack one password for multiple users in the database. It +//! // should have a database-unique component so that an attacker cannot +//! // crack the same user's password across databases in the unfortunate +//! // but common case that the user has used the same password for +//! // multiple systems. +//! fn salt(&self, username: &str) -> Vec { +//! let mut salt = Vec::with_capacity(self.db_salt_component.len() + +//! username.as_bytes().len()); +//! salt.extend(self.db_salt_component.as_ref()); +//! salt.extend(username.as_bytes()); +//! salt +//! } +//! } +//! +//! fn main() { +//! // Normally these parameters would be loaded from a configuration file. +//! let mut db = PasswordDatabase { +//! pbkdf2_iterations: NonZeroU32::new(100_000).unwrap(), +//! db_salt_component: [ +//! // This value was generated from a secure PRNG. +//! 0xd6, 0x26, 0x98, 0xda, 0xf4, 0xdc, 0x50, 0x52, +//! 0x24, 0xf2, 0x27, 0xd1, 0xfe, 0x39, 0x01, 0x8a +//! ], +//! storage: HashMap::new(), +//! }; +//! +//! db.store_password("alice", "@74d7]404j|W}6u"); +//! +//! // An attempt to log in with the wrong password fails. +//! assert!(db.verify_password("alice", "wrong password").is_err()); +//! +//! // Normally there should be an expoentially-increasing delay between +//! // attempts to further protect against online attacks. +//! +//! // An attempt to log in with the right password succeeds. +//! assert!(db.verify_password("alice", "@74d7]404j|W}6u").is_ok()); +//! } + +use crate::{constant_time, digest, error, hmac, polyfill}; +use core::num::NonZeroU32; + +/// A PBKDF2 algorithm. +#[derive(Clone, Copy, PartialEq, Eq)] +pub struct Algorithm(hmac::Algorithm); + +/// PBKDF2 using HMAC-SHA1. +pub static PBKDF2_HMAC_SHA1: Algorithm = Algorithm(hmac::HMAC_SHA1_FOR_LEGACY_USE_ONLY); + +/// PBKDF2 using HMAC-SHA256. +pub static PBKDF2_HMAC_SHA256: Algorithm = Algorithm(hmac::HMAC_SHA256); + +/// PBKDF2 using HMAC-SHA384. +pub static PBKDF2_HMAC_SHA384: Algorithm = Algorithm(hmac::HMAC_SHA384); + +/// PBKDF2 using HMAC-SHA512. +pub static PBKDF2_HMAC_SHA512: Algorithm = Algorithm(hmac::HMAC_SHA512); + +/// Fills `out` with the key derived using PBKDF2 with the given inputs. +/// +/// Do not use `derive` as part of verifying a secret; use `verify` instead, to +/// minimize the effectiveness of timing attacks. +/// +/// `out.len()` must be no larger than the digest length * (2**32 - 1), per the +/// PBKDF2 specification. +/// +/// | Parameter | RFC 2898 Section 5.2 Term +/// |-------------|------------------------------------------- +/// | digest_alg | PRF (HMAC with the given digest algorithm) +/// | iterations | c (iteration count) +/// | salt | S (salt) +/// | secret | P (password) +/// | out | dk (derived key) +/// | out.len() | dkLen (derived key length) +/// +/// # Panics +/// +/// `derive` panics if `out.len()` is larger than (2**32 - 1) * the digest +/// algorithm's output length, per the PBKDF2 specification. +pub fn derive( + algorithm: Algorithm, + iterations: NonZeroU32, + salt: &[u8], + secret: &[u8], + out: &mut [u8], +) { + let digest_alg = algorithm.0.digest_algorithm(); + let output_len = digest_alg.output_len; + + // This implementation's performance is asymptotically optimal as described + // in https://jbp.io/2015/08/11/pbkdf2-performance-matters/. However, it + // hasn't been optimized to the same extent as fastpbkdf2. In particular, + // this implementation is probably doing a lot of unnecessary copying. + + let secret = hmac::Key::new(algorithm.0, secret); + + // Clear |out|. + polyfill::slice::fill(out, 0); + + let mut idx: u32 = 0; + + for chunk in out.chunks_mut(output_len) { + idx = idx.checked_add(1).expect("derived key too long"); + derive_block(&secret, iterations, salt, idx, chunk); + } +} + +fn derive_block(secret: &hmac::Key, iterations: NonZeroU32, salt: &[u8], idx: u32, out: &mut [u8]) { + let mut ctx = hmac::Context::with_key(secret); + ctx.update(salt); + ctx.update(&u32::to_be_bytes(idx)); + + let mut u = ctx.sign(); + + let mut remaining: u32 = iterations.into(); + loop { + for i in 0..out.len() { + out[i] ^= u.as_ref()[i]; + } + + if remaining == 1 { + break; + } + remaining -= 1; + + u = hmac::sign(secret, u.as_ref()); + } +} + +/// Verifies that a previously-derived (e.g., using `derive`) PBKDF2 value +/// matches the PBKDF2 value derived from the other inputs. +/// +/// The comparison is done in constant time to prevent timing attacks. The +/// comparison will fail if `previously_derived` is empty (has a length of +/// zero). +/// +/// | Parameter | RFC 2898 Section 5.2 Term +/// |----------------------------|-------------------------------------------- +/// | digest_alg | PRF (HMAC with the given digest algorithm). +/// | `iterations` | c (iteration count) +/// | `salt` | S (salt) +/// | `secret` | P (password) +/// | `previously_derived` | dk (derived key) +/// | `previously_derived.len()` | dkLen (derived key length) +/// +/// # Panics +/// +/// `verify` panics if `out.len()` is larger than (2**32 - 1) * the digest +/// algorithm's output length, per the PBKDF2 specification. +pub fn verify( + algorithm: Algorithm, + iterations: NonZeroU32, + salt: &[u8], + secret: &[u8], + previously_derived: &[u8], +) -> Result<(), error::Unspecified> { + let digest_alg = algorithm.0.digest_algorithm(); + + if previously_derived.is_empty() { + return Err(error::Unspecified); + } + + let mut derived_buf = [0u8; digest::MAX_OUTPUT_LEN]; + + let output_len = digest_alg.output_len; + let secret = hmac::Key::new(algorithm.0, secret); + let mut idx: u32 = 0; + + let mut matches = 1; + + for previously_derived_chunk in previously_derived.chunks(output_len) { + idx = idx.checked_add(1).expect("derived key too long"); + + let derived_chunk = &mut derived_buf[..previously_derived_chunk.len()]; + polyfill::slice::fill(derived_chunk, 0); + + derive_block(&secret, iterations, salt, idx, derived_chunk); + + // XXX: This isn't fully constant-time-safe. TODO: Fix that. + let current_block_matches = + if constant_time::verify_slices_are_equal(derived_chunk, previously_derived_chunk) + .is_ok() + { + 1 + } else { + 0 + }; + + matches &= current_block_matches; + } + + if matches == 0 { + return Err(error::Unspecified); + } + + Ok(()) +} diff --git a/vendor/ring/src/pkcs8.rs b/vendor/ring/src/pkcs8.rs new file mode 100644 index 00000000..c3ca4991 --- /dev/null +++ b/vendor/ring/src/pkcs8.rs @@ -0,0 +1,201 @@ +// Copyright 2017 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! PKCS#8 is specified in [RFC 5958]. +//! +//! [RFC 5958]: https://tools.ietf.org/html/rfc5958. + +use crate::{ec, error, io::der}; + +pub(crate) enum Version { + V1Only, + V1OrV2, + V2Only, +} + +/// A template for constructing PKCS#8 documents. +/// +/// Note that this only works for ECC. +pub(crate) struct Template { + pub bytes: &'static [u8], + + // The range within `bytes` that holds the value (not including the tag and + // length) for use in the PKCS#8 document's privateKeyAlgorithm field. + pub alg_id_range: core::ops::Range, + + // `bytes[alg_id_range][curve_id_index..]` contains the OID identifying the, + // curve, including the tag and length. + pub curve_id_index: usize, + + // `bytes` will be split into two parts at `private_key_index`, where the + // first part is written before the private key and the second part is + // written after the private key. The public key is written after the second + // part. + pub private_key_index: usize, +} + +impl Template { + #[inline] + fn alg_id_value(&self) -> untrusted::Input { + untrusted::Input::from(self.alg_id_value_()) + } + + fn alg_id_value_(&self) -> &[u8] { + &self.bytes[self.alg_id_range.start..self.alg_id_range.end] + } + + #[inline] + pub fn curve_oid(&self) -> untrusted::Input { + untrusted::Input::from(&self.alg_id_value_()[self.curve_id_index..]) + } +} + +/// Parses an unencrypted PKCS#8 private key, verifies that it is the right type +/// of key, and returns the key value. +/// +/// PKCS#8 is specified in [RFC 5958]. +/// +/// [RFC 5958]: https://tools.ietf.org/html/rfc5958. +pub(crate) fn unwrap_key<'a>( + template: &Template, + version: Version, + input: untrusted::Input<'a>, +) -> Result<(untrusted::Input<'a>, Option>), error::KeyRejected> { + unwrap_key_(template.alg_id_value(), version, input) +} + +/// Parses an unencrypted PKCS#8 private key, verifies that it is the right type +/// of key, and returns the key value. +/// +/// `alg_id` must be the encoded value (not including the outermost `SEQUENCE` +/// tag and length) of the `AlgorithmIdentifier` that identifies the key type. +/// The result will be an encoded `RSAPrivateKey` or `ECPrivateKey` or similar. +/// +/// PKCS#8 is specified in [RFC 5958]. +/// +/// [RFC 5958]: https://tools.ietf.org/html/rfc5958. +pub(crate) fn unwrap_key_<'a>( + alg_id: untrusted::Input, + version: Version, + input: untrusted::Input<'a>, +) -> Result<(untrusted::Input<'a>, Option>), error::KeyRejected> { + input.read_all(error::KeyRejected::invalid_encoding(), |input| { + der::nested( + input, + der::Tag::Sequence, + error::KeyRejected::invalid_encoding(), + |input| unwrap_key__(alg_id, version, input), + ) + }) +} + +fn unwrap_key__<'a>( + alg_id: untrusted::Input, + version: Version, + input: &mut untrusted::Reader<'a>, +) -> Result<(untrusted::Input<'a>, Option>), error::KeyRejected> { + let actual_version = der::small_nonnegative_integer(input) + .map_err(|error::Unspecified| error::KeyRejected::invalid_encoding())?; + + // Do things in a specific order to return more useful errors: + // 1. Check for completely unsupported version. + // 2. Check for algorithm mismatch. + // 3. Check for algorithm-specific version mismatch. + + if actual_version > 1 { + return Err(error::KeyRejected::version_not_supported()); + }; + + let actual_alg_id = der::expect_tag_and_get_value(input, der::Tag::Sequence) + .map_err(|error::Unspecified| error::KeyRejected::invalid_encoding())?; + if actual_alg_id != alg_id { + return Err(error::KeyRejected::wrong_algorithm()); + } + + let require_public_key = match (actual_version, version) { + (0, Version::V1Only) => false, + (0, Version::V1OrV2) => false, + (1, Version::V1OrV2) | (1, Version::V2Only) => true, + _ => { + return Err(error::KeyRejected::version_not_supported()); + } + }; + + let private_key = der::expect_tag_and_get_value(input, der::Tag::OctetString) + .map_err(|error::Unspecified| error::KeyRejected::invalid_encoding())?; + + // Ignore any attributes that are present. + if input.peek(der::Tag::ContextSpecificConstructed0 as u8) { + let _ = der::expect_tag_and_get_value(input, der::Tag::ContextSpecificConstructed0) + .map_err(|error::Unspecified| error::KeyRejected::invalid_encoding())?; + } + + let public_key = if require_public_key { + if input.at_end() { + return Err(error::KeyRejected::public_key_is_missing()); + } + let public_key = der::nested( + input, + der::Tag::ContextSpecificConstructed1, + error::Unspecified, + der::bit_string_with_no_unused_bits, + ) + .map_err(|error::Unspecified| error::KeyRejected::invalid_encoding())?; + Some(public_key) + } else { + None + }; + + Ok((private_key, public_key)) +} + +/// A generated PKCS#8 document. +pub struct Document { + bytes: [u8; ec::PKCS8_DOCUMENT_MAX_LEN], + len: usize, +} + +impl AsRef<[u8]> for Document { + #[inline] + fn as_ref(&self) -> &[u8] { + &self.bytes[..self.len] + } +} + +pub(crate) fn wrap_key(template: &Template, private_key: &[u8], public_key: &[u8]) -> Document { + let mut result = Document { + bytes: [0; ec::PKCS8_DOCUMENT_MAX_LEN], + len: template.bytes.len() + private_key.len() + public_key.len(), + }; + wrap_key_( + template, + private_key, + public_key, + &mut result.bytes[..result.len], + ); + result +} + +/// Formats a private key "prefix||private_key||middle||public_key" where +/// `template` is "prefix||middle" split at position `private_key_index`. +fn wrap_key_(template: &Template, private_key: &[u8], public_key: &[u8], bytes: &mut [u8]) { + let (before_private_key, after_private_key) = + template.bytes.split_at(template.private_key_index); + let private_key_end_index = template.private_key_index + private_key.len(); + bytes[..template.private_key_index].copy_from_slice(before_private_key); + bytes[template.private_key_index..private_key_end_index].copy_from_slice(&private_key); + bytes[private_key_end_index..(private_key_end_index + after_private_key.len())] + .copy_from_slice(after_private_key); + bytes[(private_key_end_index + after_private_key.len())..].copy_from_slice(public_key); +} diff --git a/vendor/ring/src/polyfill.rs b/vendor/ring/src/polyfill.rs new file mode 100644 index 00000000..c621c0b3 --- /dev/null +++ b/vendor/ring/src/polyfill.rs @@ -0,0 +1,46 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Polyfills for functionality that will (hopefully) be added to Rust's +//! standard library soon. + +#[inline(always)] +pub const fn u64_from_usize(x: usize) -> u64 { + x as u64 +} + +pub fn usize_from_u32(x: u32) -> usize { + x as usize +} + +pub mod slice { + // https://github.com/rust-lang/rust/issues/27750 + // https://internals.rust-lang.org/t/stabilizing-basic-functions-on-arrays-and-slices/2868 + #[inline(always)] + pub fn fill(dest: &mut [T], value: T) + where + T: Copy, + { + for d in dest { + *d = value; + } + } +} + +#[macro_use] +mod chunks_fixed; + +pub(crate) mod array_map; + +pub use chunks_fixed::*; diff --git a/vendor/ring/src/polyfill/array_map.rs b/vendor/ring/src/polyfill/array_map.rs new file mode 100644 index 00000000..c538b92a --- /dev/null +++ b/vendor/ring/src/polyfill/array_map.rs @@ -0,0 +1,35 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +// TODO: Replace this with use of the array_map feature +// (https://github.com/rust-lang/rust/issues/75243) when it becomes stable. + +pub(crate) trait Map { + fn array_map(self, f: impl Fn(A) -> B) -> BArray; +} + +macro_rules! impl_map { + ( $n:expr, [ $( $elem:ident ),+ ] ) => { + impl Map for [A; $n] { + #[inline] + fn array_map(self, f: impl Fn(A) -> B) -> [B; $n] { + let [ $( $elem ),+ ] = self; + [ $( f($elem) ),+ ] + } + } + } +} + +impl_map!(4, [a, b, c, d]); +impl_map!(8, [a, b, c, d, e, f, g, h]); diff --git a/vendor/ring/src/polyfill/chunks_fixed.rs b/vendor/ring/src/polyfill/chunks_fixed.rs new file mode 100644 index 00000000..7b792cb3 --- /dev/null +++ b/vendor/ring/src/polyfill/chunks_fixed.rs @@ -0,0 +1,70 @@ +use core::convert::TryInto; + +/// Allows splitting a reference to an array type into fixed-length chunks. +pub trait ChunksFixed<'a, Chunks> +where + Chunks: 'a, +{ + fn chunks_fixed(self) -> Chunks; +} + +/// Allows iterating over a mutable array in fixed-length chunks. +/// +/// The design of this is different than that for `ChunksFixed` because it +/// isn't clear that we can legally (according to Rust's rules) convert create +/// a mutable reference to the chunked type from a mutable reference. +/// +/// TODO: Get clarification on the rules and refactor this tp be more like +/// `ChunksFixed`. +pub trait ChunksFixedMut<'a, Chunk> +where + Chunk: 'a, +{ + type MutIterator: Iterator; + + fn chunks_fixed_mut(self) -> Self::MutIterator; +} + +/// `$unchuncked_len` must be divisible by `$chunk_len`. +macro_rules! define_chunks_fixed { + ( $unchuncked_len:expr, $chunk_len:expr ) => { + define_chunks_fixed!($unchuncked_len, $chunk_len, $unchuncked_len / $chunk_len); + }; + + ( $unchuncked_len:expr, $chunk_len:expr, $chunked_len:expr ) => { + impl<'a, T> ChunksFixed<'a, &'a [[T; $chunk_len]; $chunked_len]> + for &'a [T; $unchuncked_len] + { + #[inline(always)] + fn chunks_fixed(self) -> &'a [[T; $chunk_len]; $chunked_len] { + let as_ptr: *const [T; $chunk_len] = self.as_ptr() as *const [T; $chunk_len]; + let as_ptr = as_ptr as *const [[T; $chunk_len]; $chunked_len]; + unsafe { &*as_ptr } + } + } + + impl<'a, T> ChunksFixedMut<'a, [T; $chunk_len]> for &'a mut [T; $unchuncked_len] { + type MutIterator = core::iter::Map< + core::slice::ChunksExactMut<'a, T>, + fn(&'a mut [T]) -> &'a mut [T; $chunk_len], + >; + + #[inline(always)] + fn chunks_fixed_mut(self) -> Self::MutIterator { + // There will be no remainder because `$unchuncked_len` must be divisible by + // `$chunk_len`. The `unwrap()` will not fail for the same reason. + self.chunks_exact_mut($chunk_len) + .map(|slice| slice.try_into().unwrap()) + } + } + }; +} + +// Sorted by the first value, then the second value. +define_chunks_fixed!(12, 4); +define_chunks_fixed!(16, 4); +define_chunks_fixed!(16, 8); +define_chunks_fixed!(32, 4); +define_chunks_fixed!(64, 4); +define_chunks_fixed!(64, 32); +define_chunks_fixed!(80, 20); diff --git a/vendor/ring/src/rand.rs b/vendor/ring/src/rand.rs new file mode 100644 index 00000000..947bbc27 --- /dev/null +++ b/vendor/ring/src/rand.rs @@ -0,0 +1,433 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Cryptographic pseudo-random number generation. +//! +//! An application should create a single `SystemRandom` and then use it for +//! all randomness generation. Functions that generate random bytes should take +//! a `&dyn SecureRandom` parameter instead of instantiating their own. Besides +//! being more efficient, this also helps document where non-deterministic +//! (random) outputs occur. Taking a reference to a `SecureRandom` also helps +//! with testing techniques like fuzzing, where it is useful to use a +//! (non-secure) deterministic implementation of `SecureRandom` so that results +//! can be replayed. Following this pattern also may help with sandboxing +//! (seccomp filters on Linux in particular). See `SystemRandom`'s +//! documentation for more details. + +use crate::error; + +/// A secure random number generator. +pub trait SecureRandom: sealed::SecureRandom { + /// Fills `dest` with random bytes. + fn fill(&self, dest: &mut [u8]) -> Result<(), error::Unspecified>; +} + +impl SecureRandom for T +where + T: sealed::SecureRandom, +{ + #[inline(always)] + fn fill(&self, dest: &mut [u8]) -> Result<(), error::Unspecified> { + self.fill_impl(dest) + } +} + +/// A random value constructed from a `SecureRandom` that hasn't been exposed +/// through any safe Rust interface. +/// +/// Intentionally does not implement any traits other than `Sized`. +pub struct Random(T); + +impl Random { + /// Expose the random value. + #[inline] + pub fn expose(self) -> T { + self.0 + } +} + +/// Generate the new random value using `rng`. +#[inline] +pub fn generate( + rng: &dyn SecureRandom, +) -> Result, error::Unspecified> +where + T: RandomlyConstructable, +{ + let mut r = T::zero(); + rng.fill(r.as_mut_bytes())?; + Ok(Random(r)) +} + +pub(crate) mod sealed { + use crate::error; + + pub trait SecureRandom: core::fmt::Debug { + /// Fills `dest` with random bytes. + fn fill_impl(&self, dest: &mut [u8]) -> Result<(), error::Unspecified>; + } + + pub trait RandomlyConstructable: Sized { + fn zero() -> Self; // `Default::default()` + fn as_mut_bytes(&mut self) -> &mut [u8]; // `AsMut<[u8]>::as_mut` + } + + macro_rules! impl_random_arrays { + [ $($len:expr)+ ] => { + $( + impl RandomlyConstructable for [u8; $len] { + #[inline] + fn zero() -> Self { [0; $len] } + + #[inline] + fn as_mut_bytes(&mut self) -> &mut [u8] { &mut self[..] } + } + )+ + } + } + + impl_random_arrays![4 8 16 32 48 64 128 256]; +} + +/// A type that can be returned by `ring::rand::generate()`. +pub trait RandomlyConstructable: self::sealed::RandomlyConstructable {} +impl RandomlyConstructable for T where T: self::sealed::RandomlyConstructable {} + +/// A secure random number generator where the random values come directly +/// from the operating system. +/// +/// A single `SystemRandom` may be shared across multiple threads safely. +/// +/// `new()` is guaranteed to always succeed and to have low latency; it won't +/// try to open or read from a file or do similar things. The first call to +/// `fill()` may block a substantial amount of time since any and all +/// initialization is deferred to it. Therefore, it may be a good idea to call +/// `fill()` once at a non-latency-sensitive time to minimize latency for +/// future calls. +/// +/// On Linux (including Android), `fill()` will use the [`getrandom`] syscall. +/// If the kernel is too old to support `getrandom` then by default `fill()` +/// falls back to reading from `/dev/urandom`. This decision is made the first +/// time `fill` *succeeds*. The fallback to `/dev/urandom` can be disabled by +/// disabling the `dev_urandom_fallback` default feature; this should be done +/// whenever the target system is known to support `getrandom`. When +/// `/dev/urandom` is used, a file handle for `/dev/urandom` won't be opened +/// until `fill` is called; `SystemRandom::new()` will not open `/dev/urandom` +/// or do other potentially-high-latency things. The file handle will never be +/// closed, until the operating system closes it at process shutdown. All +/// instances of `SystemRandom` will share a single file handle. To properly +/// implement seccomp filtering when the `dev_urandom_fallback` default feature +/// is disabled, allow `getrandom` through. When the fallback is enabled, allow +/// file opening, `getrandom`, and `read` up until the first call to `fill()` +/// succeeds; after that, allow `getrandom` and `read`. +/// +/// On macOS and iOS, `fill()` is implemented using `SecRandomCopyBytes`. +/// +/// On wasm32-unknown-unknown (non-WASI), `fill()` is implemented using +/// `window.crypto.getRandomValues()`. It must be used in a context where the +/// global object is a `Window`; i.e. it must not be used in a Worker or a +/// non-browser context. +/// +/// On Windows, `fill` is implemented using the platform's API for secure +/// random number generation. +/// +/// [`getrandom`]: http://man7.org/linux/man-pages/man2/getrandom.2.html +#[derive(Clone, Debug)] +pub struct SystemRandom(()); + +impl SystemRandom { + /// Constructs a new `SystemRandom`. + #[inline(always)] + pub fn new() -> Self { + Self(()) + } +} + +impl sealed::SecureRandom for SystemRandom { + #[inline(always)] + fn fill_impl(&self, dest: &mut [u8]) -> Result<(), error::Unspecified> { + fill_impl(dest) + } +} + +impl crate::sealed::Sealed for SystemRandom {} + +#[cfg(any( + all( + any(target_os = "android", target_os = "linux"), + not(feature = "dev_urandom_fallback") + ), + target_arch = "wasm32", + windows +))] +use self::sysrand::fill as fill_impl; + +#[cfg(all( + any(target_os = "android", target_os = "linux"), + feature = "dev_urandom_fallback" +))] +use self::sysrand_or_urandom::fill as fill_impl; + +#[cfg(any( + target_os = "dragonfly", + target_os = "freebsd", + target_os = "illumos", + target_os = "netbsd", + target_os = "openbsd", + target_os = "solaris", +))] +use self::urandom::fill as fill_impl; + +#[cfg(any(target_os = "macos", target_os = "ios"))] +use self::darwin::fill as fill_impl; + +#[cfg(any(target_os = "fuchsia"))] +use self::fuchsia::fill as fill_impl; + +#[cfg(any(target_os = "android", target_os = "linux"))] +mod sysrand_chunk { + use crate::{c, error}; + + #[inline] + pub fn chunk(dest: &mut [u8]) -> Result { + use libc::c_long; + + // See `SYS_getrandom` in #include . + + #[cfg(target_arch = "aarch64")] + const SYS_GETRANDOM: c_long = 278; + + #[cfg(target_arch = "arm")] + const SYS_GETRANDOM: c_long = 384; + + #[cfg(target_arch = "x86")] + const SYS_GETRANDOM: c_long = 355; + + #[cfg(target_arch = "x86_64")] + const SYS_GETRANDOM: c_long = 318; + + let chunk_len: c::size_t = dest.len(); + let r = unsafe { libc::syscall(SYS_GETRANDOM, dest.as_mut_ptr(), chunk_len, 0) }; + if r < 0 { + let errno; + + #[cfg(target_os = "linux")] + { + errno = unsafe { *libc::__errno_location() }; + } + + #[cfg(target_os = "android")] + { + errno = unsafe { *libc::__errno() }; + } + + if errno == libc::EINTR { + // If an interrupt occurs while getrandom() is blocking to wait + // for the entropy pool, then EINTR is returned. Returning 0 + // will cause the caller to try again. + return Ok(0); + } + return Err(error::Unspecified); + } + Ok(r as usize) + } +} + +#[cfg(all( + target_arch = "wasm32", + target_vendor = "unknown", + target_os = "unknown", + target_env = "", +))] +mod sysrand_chunk { + use crate::error; + + pub fn chunk(mut dest: &mut [u8]) -> Result { + // This limit is specified in + // https://www.w3.org/TR/WebCryptoAPI/#Crypto-method-getRandomValues. + const MAX_LEN: usize = 65_536; + if dest.len() > MAX_LEN { + dest = &mut dest[..MAX_LEN]; + }; + + // let _ = web_sys::window() + // .ok_or(error::Unspecified)? + // .crypto() + // .map_err(|_| error::Unspecified)? + // .get_random_values_with_u8_array(dest) + // .map_err(|_| error::Unspecified)?; + + Ok(dest.len()) + } +} + +#[cfg(windows)] +mod sysrand_chunk { + use crate::{error, polyfill}; + + #[inline] + pub fn chunk(dest: &mut [u8]) -> Result { + use winapi::shared::wtypesbase::ULONG; + + assert!(core::mem::size_of::() >= core::mem::size_of::()); + let len = core::cmp::min(dest.len(), polyfill::usize_from_u32(ULONG::max_value())); + let result = unsafe { + winapi::um::ntsecapi::RtlGenRandom( + dest.as_mut_ptr() as *mut winapi::ctypes::c_void, + len as ULONG, + ) + }; + if result == 0 { + return Err(error::Unspecified); + } + + Ok(len) + } +} + +#[cfg(any( + target_os = "android", + target_os = "linux", + target_arch = "wasm32", + windows +))] +mod sysrand { + use super::sysrand_chunk::chunk; + use crate::error; + + pub fn fill(dest: &mut [u8]) -> Result<(), error::Unspecified> { + let mut read_len = 0; + while read_len < dest.len() { + let chunk_len = chunk(&mut dest[read_len..])?; + read_len += chunk_len; + } + Ok(()) + } +} + +// Keep the `cfg` conditions in sync with the conditions in lib.rs. +#[cfg(all( + any(target_os = "android", target_os = "linux"), + feature = "dev_urandom_fallback" +))] +mod sysrand_or_urandom { + use crate::error; + + enum Mechanism { + Sysrand, + DevURandom, + } + + #[inline] + pub fn fill(dest: &mut [u8]) -> Result<(), error::Unspecified> { + use once_cell::sync::Lazy; + static MECHANISM: Lazy = Lazy::new(|| { + let mut dummy = [0u8; 1]; + if super::sysrand_chunk::chunk(&mut dummy[..]).is_err() { + Mechanism::DevURandom + } else { + Mechanism::Sysrand + } + }); + + match *MECHANISM { + Mechanism::Sysrand => super::sysrand::fill(dest), + Mechanism::DevURandom => super::urandom::fill(dest), + } + } +} + +#[cfg(any( + all( + any(target_os = "android", target_os = "linux"), + feature = "dev_urandom_fallback" + ), + target_os = "dragonfly", + target_os = "freebsd", + target_os = "netbsd", + target_os = "openbsd", + target_os = "solaris", + target_os = "illumos" +))] +mod urandom { + use crate::error; + + #[cfg_attr(any(target_os = "android", target_os = "linux"), cold, inline(never))] + pub fn fill(dest: &mut [u8]) -> Result<(), error::Unspecified> { + extern crate std; + + use once_cell::sync::Lazy; + + static FILE: Lazy> = + Lazy::new(|| std::fs::File::open("/dev/urandom")); + + match *FILE { + Ok(ref file) => { + use std::io::Read; + (&*file).read_exact(dest).map_err(|_| error::Unspecified) + } + Err(_) => Err(error::Unspecified), + } + } +} + +#[cfg(any(target_os = "macos", target_os = "ios"))] +mod darwin { + use crate::{c, error}; + + pub fn fill(dest: &mut [u8]) -> Result<(), error::Unspecified> { + let r = unsafe { SecRandomCopyBytes(kSecRandomDefault, dest.len(), dest.as_mut_ptr()) }; + match r { + 0 => Ok(()), + _ => Err(error::Unspecified), + } + } + + // XXX: This is emulating an opaque type with a non-opaque type. TODO: Fix + // this when + // https://github.com/rust-lang/rfcs/pull/1861#issuecomment-274613536 is + // resolved. + #[repr(C)] + struct SecRandomRef([u8; 0]); + + #[link(name = "Security", kind = "framework")] + extern "C" { + static kSecRandomDefault: &'static SecRandomRef; + + // For now `rnd` must be `kSecRandomDefault`. + #[must_use] + fn SecRandomCopyBytes( + rnd: &'static SecRandomRef, + count: c::size_t, + bytes: *mut u8, + ) -> c::int; + } +} + +#[cfg(any(target_os = "fuchsia"))] +mod fuchsia { + use crate::error; + + pub fn fill(dest: &mut [u8]) -> Result<(), error::Unspecified> { + unsafe { + zx_cprng_draw(dest.as_mut_ptr(), dest.len()); + } + Ok(()) + } + + #[link(name = "zircon")] + extern "C" { + fn zx_cprng_draw(buffer: *mut u8, length: usize); + } +} diff --git a/vendor/ring/src/rsa.rs b/vendor/ring/src/rsa.rs new file mode 100644 index 00000000..9adb3285 --- /dev/null +++ b/vendor/ring/src/rsa.rs @@ -0,0 +1,70 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +// *R* and *r* in Montgomery math refer to different things, so we always use +// `R` to refer to *R* to avoid confusion, even when that's against the normal +// naming conventions. Also the standard camelCase names are used for `KeyPair` +// components. + +/// RSA signatures. +use crate::{ + arithmetic::bigint, + bits, error, + io::{self, der}, + limb, +}; + +mod padding; + +// `RSA_PKCS1_SHA1` is intentionally not exposed. +pub use self::padding::{ + RsaEncoding, RSA_PKCS1_SHA256, RSA_PKCS1_SHA384, RSA_PKCS1_SHA512, RSA_PSS_SHA256, + RSA_PSS_SHA384, RSA_PSS_SHA512, +}; + +// Maximum RSA modulus size supported for signature verification (in bytes). +const PUBLIC_KEY_PUBLIC_MODULUS_MAX_LEN: usize = bigint::MODULUS_MAX_LIMBS * limb::LIMB_BYTES; + +// Keep in sync with the documentation comment for `KeyPair`. +const PRIVATE_KEY_PUBLIC_MODULUS_MAX_BITS: bits::BitLength = bits::BitLength::from_usize_bits(4096); + +/// Parameters for RSA verification. +#[derive(Debug)] +pub struct RsaParameters { + padding_alg: &'static dyn padding::Verification, + min_bits: bits::BitLength, +} + +fn parse_public_key( + input: untrusted::Input, +) -> Result<(io::Positive, io::Positive), error::Unspecified> { + input.read_all(error::Unspecified, |input| { + der::nested(input, der::Tag::Sequence, error::Unspecified, |input| { + let n = der::positive_integer(input)?; + let e = der::positive_integer(input)?; + Ok((n, e)) + }) + }) +} + +// Type-level representation of an RSA public modulus *n*. See +// `super::bigint`'s modulue-level documentation. +#[derive(Copy, Clone)] +pub enum N {} + +unsafe impl bigint::PublicModulus for N {} + +pub mod verification; + +pub mod signing; diff --git a/vendor/ring/src/rsa/convert_nist_rsa_test_vectors.py b/vendor/ring/src/rsa/convert_nist_rsa_test_vectors.py new file mode 100755 index 00000000..66d9347c --- /dev/null +++ b/vendor/ring/src/rsa/convert_nist_rsa_test_vectors.py @@ -0,0 +1,246 @@ +#!/usr/bin/env python2 +# +# Copyright 2016 Dirkjan Ochtman. +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +''' +Script to generate *ring* test file for RSA PKCS1 v1.5 signing test vectors +from the NIST FIPS 186-4 test vectors. Takes as single argument on the +command-line the path to the test vector file (tested with SigGen15_186-3.txt). + +Requires the cryptography library from pyca. +''' + +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives import serialization, hashes +from cryptography.hazmat.primitives.asymmetric import rsa, padding +import hashlib +import sys, copy +import codecs + +DIGEST_OUTPUT_LENGTHS = { + 'SHA1': 80, + 'SHA256': 128, + 'SHA384': 192, + 'SHA512': 256 +} + +# Prints reasons for skipping tests +DEBUG = False + +def debug(str, flag): + if flag: + sys.stderr.write(str + "\n") + sys.stderr.flush() + +def decode_hex(s): + decoder = codecs.getdecoder("hex_codec") + return decoder(s)[0] + +# Some fields in the input files are encoded without a leading "0", but +# `decode_hex` requires every byte to be encoded with two hex digits. +def from_hex(hex): + return decode_hex(hex if len(hex) % 2 == 0 else "0" + hex) + +def to_hex(bytes): + return ''.join('{:02x}'.format(b) for b in bytes) + +# Some fields in the input files are encoded without a leading "0", but the +# *ring* test framework requires every byte to be encoded with two hex digits. +def reformat_hex(hex): + return to_hex(from_hex(hex)) + +def parse(fn, last_field): + '''Parse input test vector file, leaving out comments and empty lines, and + returns a list of self-contained test cases. Depends on the last_field + being the last value in each test case.''' + cases = [] + with open(fn) as f: + cur = {} + for ln in f: + if not ln.strip(): + continue + if ln[0] in {'#', '['}: + continue + name, val = ln.split('=', 1) + cur[name.strip()] = val.strip() + if name.strip() == last_field: + cases.append(cur) + cur = copy.copy(cur) + return cases + +def print_sign_test(case, n, e, d, padding_alg): + # Recover the prime factors and CRT numbers. + p, q = rsa.rsa_recover_prime_factors(n, e, d) + # cryptography returns p, q with p < q by default. *ring* requires + # p > q, so swap them here. + p, q = max(p, q), min(p, q) + dmp1 = rsa.rsa_crt_dmp1(d, p) + dmq1 = rsa.rsa_crt_dmq1(d, q) + iqmp = rsa.rsa_crt_iqmp(p, q) + + # Create a private key instance. + pub = rsa.RSAPublicNumbers(e, n) + + priv = rsa.RSAPrivateNumbers(p, q, d, dmp1, dmq1, iqmp, pub) + key = priv.private_key(default_backend()) + + msg = decode_hex(case['Msg']) + + # Recalculate and compare the signature to validate our processing. + if padding_alg == 'PKCS#1 1.5': + sig = key.sign(msg, padding.PKCS1v15(), + getattr(hashes, case['SHAAlg'])()) + hex_sig = to_hex(sig) + assert hex_sig == case['S'] + elif padding_alg == "PSS": + # PSS is randomised, can't recompute this way + pass + else: + print("Invalid padding algorithm") + quit() + + # Serialize the private key in DER format. + der = key.private_bytes(serialization.Encoding.DER, + serialization.PrivateFormat.TraditionalOpenSSL, + serialization.NoEncryption()) + + # Print the test case data in the format used by *ring* test files. + print('Digest = %s' % case['SHAAlg']) + print('Key = %s' % to_hex(der)) + print('Msg = %s' % reformat_hex(case['Msg'])) + + if padding_alg == "PSS": + print('Salt = %s' % reformat_hex(case['SaltVal'])) + + print('Sig = %s' % reformat_hex(case['S'])) + print('Result = Pass') + print('') + +def print_verify_test(case, n, e): + # Create a private key instance. + pub = rsa.RSAPublicNumbers(e, n) + key = pub.public_key(default_backend()) + + der = key.public_bytes(serialization.Encoding.DER, + serialization.PublicFormat.PKCS1) + + # Print the test case data in the format used by *ring* test files. + print('Digest = %s' % case['SHAAlg']) + print('Key = %s' % to_hex(der)) + print('Msg = %s' % reformat_hex(case['Msg'])) + print('Sig = %s' % reformat_hex(case['S'])) + print('Result = %s' % case['Result']) + print('') + +def main(fn, test_type, padding_alg): + input_file_digest = hashlib.sha384(open(fn, 'rb').read()).hexdigest() + # File header + print("# RSA %(padding_alg)s Test Vectors for FIPS 186-4 from %(fn)s in" % \ + { "fn": fn, "padding_alg": padding_alg }) + print("# http://csrc.nist.gov/groups/STM/cavp/documents/dss/186-3rsatestvectors.zip") + print("# accessible from") + print("# http://csrc.nist.gov/groups/STM/cavp/digital-signatures.html#test-vectors") + print("# with SHA-384 digest %s" % (input_file_digest)) + print("# filtered and reformatted using %s." % __file__) + print("#") + print("# Digest = SHAAlg.") + if test_type == "verify": + print("# Key is (n, e) encoded in an ASN.1 (DER) sequence.") + elif test_type == "sign": + print("# Key is an ASN.1 (DER) RSAPrivateKey.") + else: + print("Invalid test_type: %s" % test_type) + quit() + + print("# Sig = S.") + print() + + num_cases = 0 + + # Each test type has a different field as the last entry per case + # For verify tests,PKCS "Result" is always the last field. + # Otherwise, for signing tests, it is dependent on the padding used. + if test_type == "verify": + last_field = "Result" + else: + if padding_alg == "PSS": + last_field = "SaltVal" + else: + last_field = "S" + + for case in parse(fn, last_field): + if case['SHAAlg'] == 'SHA224': + # SHA224 not supported in *ring*. + debug("Skipping due to use of SHA224", DEBUG) + continue + + if padding_alg == "PSS": + if case['SHAAlg'] == 'SHA1': + # SHA-1 with PSS not supported in *ring*. + debug("Skipping due to use of SHA1 and PSS.", DEBUG) + continue + + # *ring* only supports PSS where the salt length is equal to the + # output length of the hash algorithm. + if len(case['SaltVal']) * 2 != DIGEST_OUTPUT_LENGTHS[case['SHAAlg']]: + debug("Skipping due to unsupported salt length.", DEBUG) + continue + + # Read private key components. + n = int(case['n'], 16) + e = int(case['e'], 16) + d = int(case['d'], 16) + + if test_type == 'sign': + if n.bit_length() // 8 < 2048 // 8: + debug("Skipping due to modulus length (too small).", DEBUG) + continue + if n.bit_length() > 4096: + debug("Skipping due to modulus length (too large).", DEBUG) + continue + + print_sign_test(case, n, e, d, padding_alg) + else: + legacy = case['SHAAlg'] in ["SHA1", "SHA256", "SHA512"] + if (n.bit_length() // 8 < 2048 // 8 and not legacy) or n.bit_length() // 8 < 1024 // 8: + debug("Skipping due to modulus length (too small).", DEBUG) + continue + print_verify_test(case, n, e) + + num_cases += 1 + + debug("%d test cases output." % num_cases, True) + +if __name__ == '__main__': + if len(sys.argv) != 2: + print("Usage:\n python %s " % sys.argv[0]) + else: + fn = sys.argv[1] + if 'PSS' in fn: + pad_alg = 'PSS' + elif '15' in fn: + pad_alg = 'PKCS#1 1.5' + else: + print("Could not determine padding algorithm,") + quit() + + if 'Gen' in fn: + test_type = 'sign' + elif 'Ver' in fn: + test_type = 'verify' + else: + print("Could not determine test type.") + quit() + + main(sys.argv[1], test_type, pad_alg) diff --git a/vendor/ring/src/rsa/padding.rs b/vendor/ring/src/rsa/padding.rs new file mode 100644 index 00000000..1e656533 --- /dev/null +++ b/vendor/ring/src/rsa/padding.rs @@ -0,0 +1,596 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use super::PUBLIC_KEY_PUBLIC_MODULUS_MAX_LEN; +use crate::{bits, digest, error, io::der}; + +#[cfg(feature = "alloc")] +use crate::rand; +use core::convert::TryInto; + +/// Common features of both RSA padding encoding and RSA padding verification. +pub trait Padding: 'static + Sync + crate::sealed::Sealed + core::fmt::Debug { + // The digest algorithm used for digesting the message (and maybe for + // other things). + fn digest_alg(&self) -> &'static digest::Algorithm; +} + +/// An RSA signature encoding as described in [RFC 3447 Section 8]. +/// +/// [RFC 3447 Section 8]: https://tools.ietf.org/html/rfc3447#section-8 +#[cfg(feature = "alloc")] +pub trait RsaEncoding: Padding { + #[doc(hidden)] + fn encode( + &self, + m_hash: &digest::Digest, + m_out: &mut [u8], + mod_bits: bits::BitLength, + rng: &dyn rand::SecureRandom, + ) -> Result<(), error::Unspecified>; +} + +/// Verification of an RSA signature encoding as described in +/// [RFC 3447 Section 8]. +/// +/// [RFC 3447 Section 8]: https://tools.ietf.org/html/rfc3447#section-8 +pub trait Verification: Padding { + fn verify( + &self, + m_hash: &digest::Digest, + m: &mut untrusted::Reader, + mod_bits: bits::BitLength, + ) -> Result<(), error::Unspecified>; +} + +/// PKCS#1 1.5 padding as described in [RFC 3447 Section 8.2]. +/// +/// See "`RSA_PSS_*` Details\" in `ring::signature`'s module-level +/// documentation for more details. +/// +/// [RFC 3447 Section 8.2]: https://tools.ietf.org/html/rfc3447#section-8.2 +#[derive(Debug)] +pub struct PKCS1 { + digest_alg: &'static digest::Algorithm, + digestinfo_prefix: &'static [u8], +} + +impl crate::sealed::Sealed for PKCS1 {} + +impl Padding for PKCS1 { + fn digest_alg(&self) -> &'static digest::Algorithm { + self.digest_alg + } +} + +#[cfg(feature = "alloc")] +impl RsaEncoding for PKCS1 { + fn encode( + &self, + m_hash: &digest::Digest, + m_out: &mut [u8], + _mod_bits: bits::BitLength, + _rng: &dyn rand::SecureRandom, + ) -> Result<(), error::Unspecified> { + pkcs1_encode(&self, m_hash, m_out); + Ok(()) + } +} + +impl Verification for PKCS1 { + fn verify( + &self, + m_hash: &digest::Digest, + m: &mut untrusted::Reader, + mod_bits: bits::BitLength, + ) -> Result<(), error::Unspecified> { + // `mod_bits.as_usize_bytes_rounded_up() <= + // PUBLIC_KEY_PUBLIC_MODULUS_MAX_LEN` is ensured by `verify_rsa_()`. + let mut calculated = [0u8; PUBLIC_KEY_PUBLIC_MODULUS_MAX_LEN]; + let calculated = &mut calculated[..mod_bits.as_usize_bytes_rounded_up()]; + pkcs1_encode(&self, m_hash, calculated); + if m.read_bytes_to_end() != *calculated { + return Err(error::Unspecified); + } + Ok(()) + } +} + +// Implement padding procedure per EMSA-PKCS1-v1_5, +// https://tools.ietf.org/html/rfc3447#section-9.2. This is used by both +// verification and signing so it needs to be able to handle moduli of the +// minimum and maximum sizes for both operations. +fn pkcs1_encode(pkcs1: &PKCS1, m_hash: &digest::Digest, m_out: &mut [u8]) { + let em = m_out; + + let digest_len = pkcs1.digestinfo_prefix.len() + pkcs1.digest_alg.output_len; + + // The specification requires at least 8 bytes of padding. Since we + // disallow keys smaller than 1024 bits, this should always be true. + assert!(em.len() >= digest_len + 11); + let pad_len = em.len() - digest_len - 3; + em[0] = 0; + em[1] = 1; + for i in 0..pad_len { + em[2 + i] = 0xff; + } + em[2 + pad_len] = 0; + + let (digest_prefix, digest_dst) = em[3 + pad_len..].split_at_mut(pkcs1.digestinfo_prefix.len()); + digest_prefix.copy_from_slice(pkcs1.digestinfo_prefix); + digest_dst.copy_from_slice(m_hash.as_ref()); +} + +macro_rules! rsa_pkcs1_padding { + ( $PADDING_ALGORITHM:ident, $digest_alg:expr, $digestinfo_prefix:expr, + $doc_str:expr ) => { + #[doc=$doc_str] + pub static $PADDING_ALGORITHM: PKCS1 = PKCS1 { + digest_alg: $digest_alg, + digestinfo_prefix: $digestinfo_prefix, + }; + }; +} + +rsa_pkcs1_padding!( + RSA_PKCS1_SHA1_FOR_LEGACY_USE_ONLY, + &digest::SHA1_FOR_LEGACY_USE_ONLY, + &SHA1_PKCS1_DIGESTINFO_PREFIX, + "PKCS#1 1.5 padding using SHA-1 for RSA signatures." +); +rsa_pkcs1_padding!( + RSA_PKCS1_SHA256, + &digest::SHA256, + &SHA256_PKCS1_DIGESTINFO_PREFIX, + "PKCS#1 1.5 padding using SHA-256 for RSA signatures." +); +rsa_pkcs1_padding!( + RSA_PKCS1_SHA384, + &digest::SHA384, + &SHA384_PKCS1_DIGESTINFO_PREFIX, + "PKCS#1 1.5 padding using SHA-384 for RSA signatures." +); +rsa_pkcs1_padding!( + RSA_PKCS1_SHA512, + &digest::SHA512, + &SHA512_PKCS1_DIGESTINFO_PREFIX, + "PKCS#1 1.5 padding using SHA-512 for RSA signatures." +); + +macro_rules! pkcs1_digestinfo_prefix { + ( $name:ident, $digest_len:expr, $digest_oid_len:expr, + [ $( $digest_oid:expr ),* ] ) => { + static $name: [u8; 2 + 8 + $digest_oid_len] = [ + der::Tag::Sequence as u8, 8 + $digest_oid_len + $digest_len, + der::Tag::Sequence as u8, 2 + $digest_oid_len + 2, + der::Tag::OID as u8, $digest_oid_len, $( $digest_oid ),*, + der::Tag::Null as u8, 0, + der::Tag::OctetString as u8, $digest_len, + ]; + } +} + +pkcs1_digestinfo_prefix!( + SHA1_PKCS1_DIGESTINFO_PREFIX, + 20, + 5, + [0x2b, 0x0e, 0x03, 0x02, 0x1a] +); + +pkcs1_digestinfo_prefix!( + SHA256_PKCS1_DIGESTINFO_PREFIX, + 32, + 9, + [0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01] +); + +pkcs1_digestinfo_prefix!( + SHA384_PKCS1_DIGESTINFO_PREFIX, + 48, + 9, + [0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02] +); + +pkcs1_digestinfo_prefix!( + SHA512_PKCS1_DIGESTINFO_PREFIX, + 64, + 9, + [0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03] +); + +/// RSA PSS padding as described in [RFC 3447 Section 8.1]. +/// +/// See "`RSA_PSS_*` Details\" in `ring::signature`'s module-level +/// documentation for more details. +/// +/// [RFC 3447 Section 8.1]: https://tools.ietf.org/html/rfc3447#section-8.1 +#[derive(Debug)] +pub struct PSS { + digest_alg: &'static digest::Algorithm, +} + +impl crate::sealed::Sealed for PSS {} + +// Maximum supported length of the salt in bytes. +// In practice, this is constrained by the maximum digest length. +const MAX_SALT_LEN: usize = digest::MAX_OUTPUT_LEN; + +impl Padding for PSS { + fn digest_alg(&self) -> &'static digest::Algorithm { + self.digest_alg + } +} + +impl RsaEncoding for PSS { + // Implement padding procedure per EMSA-PSS, + // https://tools.ietf.org/html/rfc3447#section-9.1. + fn encode( + &self, + m_hash: &digest::Digest, + m_out: &mut [u8], + mod_bits: bits::BitLength, + rng: &dyn rand::SecureRandom, + ) -> Result<(), error::Unspecified> { + let metrics = PSSMetrics::new(self.digest_alg, mod_bits)?; + + // The `m_out` this function fills is the big-endian-encoded value of `m` + // from the specification, padded to `k` bytes, where `k` is the length + // in bytes of the public modulus. The spec says "Note that emLen will + // be one less than k if modBits - 1 is divisible by 8 and equal to k + // otherwise." In other words we might need to prefix `em` with a + // leading zero byte to form a correct value of `m`. + let em = if metrics.top_byte_mask == 0xff { + m_out[0] = 0; + &mut m_out[1..] + } else { + m_out + }; + assert_eq!(em.len(), metrics.em_len); + + // Steps 1 and 2 are done by the caller to produce `m_hash`. + + // Step 3 is done by `PSSMetrics::new()` above. + + // Step 4. + let mut salt = [0u8; MAX_SALT_LEN]; + let salt = &mut salt[..metrics.s_len]; + rng.fill(salt)?; + + // Step 5 and 6. + let h_hash = pss_digest(self.digest_alg, m_hash, salt); + + // Re-order steps 7, 8, 9 and 10 so that we first output the db mask + // into `em`, and then XOR the value of db. + + // Step 9. First output the mask into the out buffer. + let (mut masked_db, digest_terminator) = em.split_at_mut(metrics.db_len); + mgf1(self.digest_alg, h_hash.as_ref(), &mut masked_db); + + { + // Steps 7. + let masked_db = masked_db.iter_mut(); + // `PS` is all zero bytes, so skipping `ps_len` bytes is equivalent + // to XORing `PS` onto `db`. + let mut masked_db = masked_db.skip(metrics.ps_len); + + // Step 8. + *(masked_db.next().ok_or(error::Unspecified)?) ^= 0x01; + + // Step 10. + for (masked_db_b, salt_b) in masked_db.zip(salt) { + *masked_db_b ^= *salt_b; + } + } + + // Step 11. + masked_db[0] &= metrics.top_byte_mask; + + // Step 12. + digest_terminator[..metrics.h_len].copy_from_slice(h_hash.as_ref()); + digest_terminator[metrics.h_len] = 0xbc; + + Ok(()) + } +} + +impl Verification for PSS { + // RSASSA-PSS-VERIFY from https://tools.ietf.org/html/rfc3447#section-8.1.2 + // where steps 1, 2(a), and 2(b) have been done for us. + fn verify( + &self, + m_hash: &digest::Digest, + m: &mut untrusted::Reader, + mod_bits: bits::BitLength, + ) -> Result<(), error::Unspecified> { + let metrics = PSSMetrics::new(self.digest_alg, mod_bits)?; + + // RSASSA-PSS-VERIFY Step 2(c). The `m` this function is given is the + // big-endian-encoded value of `m` from the specification, padded to + // `k` bytes, where `k` is the length in bytes of the public modulus. + // The spec. says "Note that emLen will be one less than k if + // modBits - 1 is divisible by 8 and equal to k otherwise," where `k` + // is the length in octets of the RSA public modulus `n`. In other + // words, `em` might have an extra leading zero byte that we need to + // strip before we start the PSS decoding steps which is an artifact of + // the `Verification` interface. + if metrics.top_byte_mask == 0xff { + if m.read_byte()? != 0 { + return Err(error::Unspecified); + } + }; + let em = m; + + // The rest of this function is EMSA-PSS-VERIFY from + // https://tools.ietf.org/html/rfc3447#section-9.1.2. + + // Steps 1 and 2 are done by the caller to produce `m_hash`. + + // Step 3 is done by `PSSMetrics::new()` above. + + // Step 5, out of order. + let masked_db = em.read_bytes(metrics.db_len)?; + let h_hash = em.read_bytes(metrics.h_len)?; + + // Step 4. + if em.read_byte()? != 0xbc { + return Err(error::Unspecified); + } + + // Step 7. + let mut db = [0u8; PUBLIC_KEY_PUBLIC_MODULUS_MAX_LEN]; + let db = &mut db[..metrics.db_len]; + + mgf1(self.digest_alg, h_hash.as_slice_less_safe(), db); + + masked_db.read_all(error::Unspecified, |masked_bytes| { + // Step 6. Check the top bits of first byte are zero. + let b = masked_bytes.read_byte()?; + if b & !metrics.top_byte_mask != 0 { + return Err(error::Unspecified); + } + db[0] ^= b; + + // Step 8. + for i in 1..db.len() { + db[i] ^= masked_bytes.read_byte()?; + } + Ok(()) + })?; + + // Step 9. + db[0] &= metrics.top_byte_mask; + + // Step 10. + let ps_len = metrics.ps_len; + for i in 0..ps_len { + if db[i] != 0 { + return Err(error::Unspecified); + } + } + if db[metrics.ps_len] != 1 { + return Err(error::Unspecified); + } + + // Step 11. + let salt = &db[(db.len() - metrics.s_len)..]; + + // Step 12 and 13. + let h_prime = pss_digest(self.digest_alg, m_hash, salt); + + // Step 14. + if h_hash != *h_prime.as_ref() { + return Err(error::Unspecified); + } + + Ok(()) + } +} + +struct PSSMetrics { + #[cfg_attr(not(feature = "alloc"), allow(dead_code))] + em_len: usize, + db_len: usize, + ps_len: usize, + s_len: usize, + h_len: usize, + top_byte_mask: u8, +} + +impl PSSMetrics { + fn new( + digest_alg: &'static digest::Algorithm, + mod_bits: bits::BitLength, + ) -> Result { + let em_bits = mod_bits.try_sub_1()?; + let em_len = em_bits.as_usize_bytes_rounded_up(); + let leading_zero_bits = (8 * em_len) - em_bits.as_usize_bits(); + debug_assert!(leading_zero_bits < 8); + let top_byte_mask = 0xffu8 >> leading_zero_bits; + + let h_len = digest_alg.output_len; + + // We require the salt length to be equal to the digest length. + let s_len = h_len; + + // Step 3 of both `EMSA-PSS-ENCODE` is `EMSA-PSS-VERIFY` requires that + // we reject inputs where "emLen < hLen + sLen + 2". The definition of + // `emBits` in RFC 3447 Sections 9.1.1 and 9.1.2 says `emBits` must be + // "at least 8hLen + 8sLen + 9". Since 9 bits requires two bytes, these + // two conditions are equivalent. 9 bits are required as the 0x01 + // before the salt requires 1 bit and the 0xbc after the digest + // requires 8 bits. + let db_len = em_len.checked_sub(1 + s_len).ok_or(error::Unspecified)?; + let ps_len = db_len.checked_sub(h_len + 1).ok_or(error::Unspecified)?; + + debug_assert!(em_bits.as_usize_bits() >= (8 * h_len) + (8 * s_len) + 9); + + Ok(Self { + em_len, + db_len, + ps_len, + s_len, + h_len, + top_byte_mask, + }) + } +} + +// Mask-generating function MGF1 as described in +// https://tools.ietf.org/html/rfc3447#appendix-B.2.1. +fn mgf1(digest_alg: &'static digest::Algorithm, seed: &[u8], mask: &mut [u8]) { + let digest_len = digest_alg.output_len; + + // Maximum counter value is the value of (mask_len / digest_len) rounded up. + for (i, mask_chunk) in mask.chunks_mut(digest_len).enumerate() { + let mut ctx = digest::Context::new(digest_alg); + ctx.update(seed); + // The counter will always fit in a `u32` because we reject absurdly + // long inputs very early. + ctx.update(&u32::to_be_bytes(i.try_into().unwrap())); + let digest = ctx.finish(); + let mask_chunk_len = mask_chunk.len(); + mask_chunk.copy_from_slice(&digest.as_ref()[..mask_chunk_len]); + } +} + +fn pss_digest( + digest_alg: &'static digest::Algorithm, + m_hash: &digest::Digest, + salt: &[u8], +) -> digest::Digest { + // Fixed prefix. + const PREFIX_ZEROS: [u8; 8] = [0u8; 8]; + + // Encoding step 5 and 6, Verification step 12 and 13. + let mut ctx = digest::Context::new(digest_alg); + ctx.update(&PREFIX_ZEROS); + ctx.update(m_hash.as_ref()); + ctx.update(salt); + ctx.finish() +} + +macro_rules! rsa_pss_padding { + ( $PADDING_ALGORITHM:ident, $digest_alg:expr, $doc_str:expr ) => { + #[doc=$doc_str] + pub static $PADDING_ALGORITHM: PSS = PSS { + digest_alg: $digest_alg, + }; + }; +} + +rsa_pss_padding!( + RSA_PSS_SHA256, + &digest::SHA256, + "RSA PSS padding using SHA-256 for RSA signatures.\n\nSee + \"`RSA_PSS_*` Details\" in `ring::signature`'s module-level + documentation for more details." +); +rsa_pss_padding!( + RSA_PSS_SHA384, + &digest::SHA384, + "RSA PSS padding using SHA-384 for RSA signatures.\n\nSee + \"`RSA_PSS_*` Details\" in `ring::signature`'s module-level + documentation for more details." +); +rsa_pss_padding!( + RSA_PSS_SHA512, + &digest::SHA512, + "RSA PSS padding using SHA-512 for RSA signatures.\n\nSee + \"`RSA_PSS_*` Details\" in `ring::signature`'s module-level + documentation for more details." +); + +#[cfg(test)] +mod test { + use super::*; + use crate::{digest, error, test}; + use alloc::vec; + + #[test] + fn test_pss_padding_verify() { + test::run( + test_file!("rsa_pss_padding_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let digest_name = test_case.consume_string("Digest"); + let alg = match digest_name.as_ref() { + "SHA256" => &RSA_PSS_SHA256, + "SHA384" => &RSA_PSS_SHA384, + "SHA512" => &RSA_PSS_SHA512, + _ => panic!("Unsupported digest: {}", digest_name), + }; + + let msg = test_case.consume_bytes("Msg"); + let msg = untrusted::Input::from(&msg); + let m_hash = digest::digest(alg.digest_alg(), msg.as_slice_less_safe()); + + let encoded = test_case.consume_bytes("EM"); + let encoded = untrusted::Input::from(&encoded); + + // Salt is recomputed in verification algorithm. + let _ = test_case.consume_bytes("Salt"); + + let bit_len = test_case.consume_usize_bits("Len"); + let is_valid = test_case.consume_string("Result") == "P"; + + let actual_result = + encoded.read_all(error::Unspecified, |m| alg.verify(&m_hash, m, bit_len)); + assert_eq!(actual_result.is_ok(), is_valid); + + Ok(()) + }, + ); + } + + // Tests PSS encoding for various public modulus lengths. + #[cfg(feature = "alloc")] + #[test] + fn test_pss_padding_encode() { + test::run( + test_file!("rsa_pss_padding_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let digest_name = test_case.consume_string("Digest"); + let alg = match digest_name.as_ref() { + "SHA256" => &RSA_PSS_SHA256, + "SHA384" => &RSA_PSS_SHA384, + "SHA512" => &RSA_PSS_SHA512, + _ => panic!("Unsupported digest: {}", digest_name), + }; + + let msg = test_case.consume_bytes("Msg"); + let salt = test_case.consume_bytes("Salt"); + let encoded = test_case.consume_bytes("EM"); + let bit_len = test_case.consume_usize_bits("Len"); + let expected_result = test_case.consume_string("Result"); + + // Only test the valid outputs + if expected_result != "P" { + return Ok(()); + } + + let rng = test::rand::FixedSliceRandom { bytes: &salt }; + + let mut m_out = vec![0u8; bit_len.as_usize_bytes_rounded_up()]; + let digest = digest::digest(alg.digest_alg(), &msg); + alg.encode(&digest, &mut m_out, bit_len, &rng).unwrap(); + assert_eq!(m_out, encoded); + + Ok(()) + }, + ); + } +} diff --git a/vendor/ring/src/rsa/rsa_pss_padding_tests.txt b/vendor/ring/src/rsa/rsa_pss_padding_tests.txt new file mode 100644 index 00000000..e90c079b --- /dev/null +++ b/vendor/ring/src/rsa/rsa_pss_padding_tests.txt @@ -0,0 +1,745 @@ +# Test vectors for RSA-PSS padding verification +# Including multiple modulus lengths and failing verification cases. +# +# Digest = SHAAlg. +# Len gives the public modulus length in bits. +# +# The salt is the fixed byte string 0xf0 repeated to be the same length as the +# hash digest. +# + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86b2018199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 2048 +Result = P + +Digest = SHA384 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 137a60205de7c9f40c29d65a035bd96da8ec95a909f129a8f7c0be2b3ecf539f62667e51db71b8685da2cb3a727651e8fa399715262c9a4ab88bff1d8514ee299a196c75a09fbfd6b069bbc5c2d1fce2107e68fa4605086160b803a13d221d47e68c8dfd94e6cf54175588c363f5ba311a77c056c45d90fc9a60ba36ac8f07e319baf84003d2af51d313d6209aaa5ae8a3308cacaa35577a01742ea42e5cdcd65de51efc2d1947879c42e9a3dbf5986063c821f99e5ba6daead8d6e0c50f0754fbc5122978334914d12303ab1313a9c29889474c5b1dea85c5ec55cc2d5ad5d6776b2d234b96e2e80ed049c3cfc645967f5d5efb1d5c707585e8fa8bbb5653bc +Len = 2048 +Result = P + +Digest = SHA512 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 485255700ee4e6964ba0a867b650f5d3cac3380b59ec58c72a5d44156f7273f7ccf88edb48a3c7f6c07dfd03b9f8a907f0e7d98e38ee174edf9fe79159cddebafe1cbd586fdaf192d347d56867b3a3eb756ee3c51afbb9f4b1ccb00059abcfa51ef3facd58af14362db77c6c8bb387a5228d105388ff31b21c0b30d90e44949d4ddd6eebe14dc6dd94110e791abed1251eb798e7b559a7d37f9b3e47b83b1c44a9ecf9c591d6cfd21b5f3d9639174289c677b567a24c703f1757bee874c3405a2413f759483bf8b4d9956f463798028cfc5695d8cee89506eb5b4a61cd63cbb5b7738cfee0edd94be6ffa6f7c57f258f816015e9f20daeb061150e698596c3bc +Len = 2048 +Result = P + +Digest = SHA256 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0b5546c0e8bf9966ac52887133aa89150a5fe745492fe94790b6e8c06b5f091c147bf46a88b96b4e1ff39b6d8ddd999cc7271718763df7e885e53817d0d607f53aac52eec202d7183c04caa17f975c8eae3d78ac3da5c881b864ed438adaae827036756cd9df4f8fa24ef85aec221b35740c65e252880422ebf7ddf3e52b87346f8d8ed92f459fb76e866e8bf631a5b7e6d86968e5f7f64d499db7d0143ad40770c158039a3ed1205ba7ce959e837a4c23249cfec9ec56f02602c6d98cb844514920b1123c69f35cc6fda327b632218e575eafff76b23cb0b7e5e3a1b6ac6b84d00ae842b10f54bcb018216001f446f680e7167b3553706c1641d9b8ef5253bc +Len = 2048 +Result = P + +Digest = SHA384 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 65b562e2aa341868b4aa78ff86c220330e7159bb0871f8939aed509b4e5bcb2c4ecb2cbf4c85f8a11cb3f1c9efa748225f0d944c983dd86e6faadcf3cf7cff781653300d3f826cb1dfde256c056fff1772dbbe0715c2c85615a47d07a944449f4cad63dc06cf1b0a0ed799bdccd93078888e39beacde047625fd9cfe74c2098c701ff5e6436d2d845883cb8cf8aa134a57023226bbfccbe078e356eac19b34204ef123291bc8cdd39177be702e5fa6ad3f759155cee55dc6fbdc10472ffe5d10d619a15ab22f369c49621e5966429f9f6fc1a02d20dab5c900706608a19028d4a283939d2d16a495ae184bda4fdb488229e0f64334c15daf197dbc6dd213a0bc +Len = 2048 +Result = P + +Digest = SHA512 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 563a1aafa96215f6ff698694f59fe97523399f214683f450f3024e6bb2523c7407ccd7024284522b957dc42aff3ef2a5738daaa88b38092880fc42b98ecdd3e09677db0c189c105f0777981d7620c0fb014c57a3e080cb5afc9ad4c0e47a0e46157ef96b01453a9aa7c99ef80976d425ccafcce990425969a30b5ce55b3fe3eafa595c1a7b272a9c427e73a4a32d392d6384bf33d4137d3a95c6199c692e66af77d56fe6411728c1e47ef2c70610305a1258807f6053d7b06259dba586ea40a6320af4d65c4ab46dd1277a6995eb127f0aaa207dc3ee0d4c65d1224ac96da10d15ba220d096e8cc25c5f0ae0886dd76e0f3d08efb9c5fc0190d81f12261c5bbc +Len = 2048 +Result = P + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0023e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86b2018199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 2049 +Result = P + +Digest = SHA384 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 00937a60205de7c9f40c29d65a035bd96da8ec95a909f129a8f7c0be2b3ecf539f62667e51db71b8685da2cb3a727651e8fa399715262c9a4ab88bff1d8514ee299a196c75a09fbfd6b069bbc5c2d1fce2107e68fa4605086160b803a13d221d47e68c8dfd94e6cf54175588c363f5ba311a77c056c45d90fc9a60ba36ac8f07e319baf84003d2af51d313d6209aaa5ae8a3308cacaa35577a01742ea42e5cdcd65de51efc2d1947879c42e9a3dbf5986063c821f99e5ba6daead8d6e0c50f0754fbc5122978334914d12303ab1313a9c29889474c5b1dea85c5ec55cc2d5ad5d6776b2d234b96e2e80ed049c3cfc645967f5d5efb1d5c707585e8fa8bbb5653bc +Len = 2049 +Result = P + +Digest = SHA512 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 00485255700ee4e6964ba0a867b650f5d3cac3380b59ec58c72a5d44156f7273f7ccf88edb48a3c7f6c07dfd03b9f8a907f0e7d98e38ee174edf9fe79159cddebafe1cbd586fdaf192d347d56867b3a3eb756ee3c51afbb9f4b1ccb00059abcfa51ef3facd58af14362db77c6c8bb387a5228d105388ff31b21c0b30d90e44949d4ddd6eebe14dc6dd94110e791abed1251eb798e7b559a7d37f9b3e47b83b1c44a9ecf9c591d6cfd21b5f3d9639174289c677b567a24c703f1757bee874c3405a2413f759483bf8b4d9956f463798028cfc5695d8cee89506eb5b4a61cd63cbb5b7738cfee0edd94be6ffa6f7c57f258f816015e9f20daeb061150e698596c3bc +Len = 2049 +Result = P + +Digest = SHA256 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 008b5546c0e8bf9966ac52887133aa89150a5fe745492fe94790b6e8c06b5f091c147bf46a88b96b4e1ff39b6d8ddd999cc7271718763df7e885e53817d0d607f53aac52eec202d7183c04caa17f975c8eae3d78ac3da5c881b864ed438adaae827036756cd9df4f8fa24ef85aec221b35740c65e252880422ebf7ddf3e52b87346f8d8ed92f459fb76e866e8bf631a5b7e6d86968e5f7f64d499db7d0143ad40770c158039a3ed1205ba7ce959e837a4c23249cfec9ec56f02602c6d98cb844514920b1123c69f35cc6fda327b632218e575eafff76b23cb0b7e5e3a1b6ac6b84d00ae842b10f54bcb018216001f446f680e7167b3553706c1641d9b8ef5253bc +Len = 2049 +Result = P + +Digest = SHA384 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 00e5b562e2aa341868b4aa78ff86c220330e7159bb0871f8939aed509b4e5bcb2c4ecb2cbf4c85f8a11cb3f1c9efa748225f0d944c983dd86e6faadcf3cf7cff781653300d3f826cb1dfde256c056fff1772dbbe0715c2c85615a47d07a944449f4cad63dc06cf1b0a0ed799bdccd93078888e39beacde047625fd9cfe74c2098c701ff5e6436d2d845883cb8cf8aa134a57023226bbfccbe078e356eac19b34204ef123291bc8cdd39177be702e5fa6ad3f759155cee55dc6fbdc10472ffe5d10d619a15ab22f369c49621e5966429f9f6fc1a02d20dab5c900706608a19028d4a283939d2d16a495ae184bda4fdb488229e0f64334c15daf197dbc6dd213a0bc +Len = 2049 +Result = P + +Digest = SHA512 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 00d63a1aafa96215f6ff698694f59fe97523399f214683f450f3024e6bb2523c7407ccd7024284522b957dc42aff3ef2a5738daaa88b38092880fc42b98ecdd3e09677db0c189c105f0777981d7620c0fb014c57a3e080cb5afc9ad4c0e47a0e46157ef96b01453a9aa7c99ef80976d425ccafcce990425969a30b5ce55b3fe3eafa595c1a7b272a9c427e73a4a32d392d6384bf33d4137d3a95c6199c692e66af77d56fe6411728c1e47ef2c70610305a1258807f6053d7b06259dba586ea40a6320af4d65c4ab46dd1277a6995eb127f0aaa207dc3ee0d4c65d1224ac96da10d15ba220d096e8cc25c5f0ae0886dd76e0f3d08efb9c5fc0190d81f12261c5bbc +Len = 2049 +Result = P + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86ad118199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d73330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 2055 +Result = P + +Digest = SHA384 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 137a60205de7c9f40c29d65a035bd96da8ec95a909f129a8f7c0be2b3ecf539f62667e51db71b8685da2cb3a727651e8fa399715262c9a4ab88bff1d8514ee299a196c75a09fbfd6b069bbc5c2d1fce2107e68fa4605086160b803a13d221d47e68c8dfd94e6cf54175588c363f5ba311a77c056c45d90fc9a60ba36ac8f07e319baf84003d2af51d313d6209aaa5ae8a3308cacaa35577a01742ea42e5cdd275de51efc2d1947879c42e9a3dbf5986063c821f99e5ba6daead8d6e0c50f0754fbc5122978334914d12303ab1313a923c29889474c5b1dea85c5ec55cc2d5ad5d6776b2d234b96e2e80ed049c3cfc645967f5d5efb1d5c707585e8fa8bbb5653bc +Len = 2055 +Result = P + +Digest = SHA512 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 085255700ee4e6964ba0a867b650f5d3cac3380b59ec58c72a5d44156f7273f7ccf88edb48a3c7f6c07dfd03b9f8a907f0e7d98e38ee174edf9fe79159cddebafe1cbd586fdaf192d347d56867b3a3eb756ee3c51afbb9f4b1ccb00059abcfa51ef3facd58af14362db77c6c8bb387a5228d105388ff31b21c0b30d90e44956c4ddd6eebe14dc6dd94110e791abed1251eb798e7b559a7d37f9b3e47b83b1c44a9ecf9c591d6cfd21b5f3d9639174289c677b567a24c703f1757bee874c3408d5a2413f759483bf8b4d9956f463798028cfc5695d8cee89506eb5b4a61cd63cbb5b7738cfee0edd94be6ffa6f7c57f258f816015e9f20daeb061150e698596c3bc +Len = 2055 +Result = P + +Digest = SHA256 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0b5546c0e8bf9966ac52887133aa89150a5fe745492fe94790b6e8c06b5f091c147bf46a88b96b4e1ff39b6d8ddd999cc7271718763df7e885e53817d0d607f53aac52eec202d7183c04caa17f975c8eae3d78ac3da5c881b864ed438adaae827036756cd9df4f8fa24ef85aec221b35740c65e252880422ebf7ddf3e52b87346f8d8ed92f459fb76e866e8bf631a5b7e6d86968e5f7f64d499db7d0143ad40770c158039a3ed1205ba7ce959e837a4c23249cfec9ec56f02602c6d98cb845a04920b1123c69f35cc6fda327b632218e575eafff76b23cb0b7e5e3a1b6ac6b0e84d00ae842b10f54bcb018216001f446f680e7167b3553706c1641d9b8ef5253bc +Len = 2055 +Result = P + +Digest = SHA384 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 25b562e2aa341868b4aa78ff86c220330e7159bb0871f8939aed509b4e5bcb2c4ecb2cbf4c85f8a11cb3f1c9efa748225f0d944c983dd86e6faadcf3cf7cff781653300d3f826cb1dfde256c056fff1772dbbe0715c2c85615a47d07a944449f4cad63dc06cf1b0a0ed799bdccd93078888e39beacde047625fd9cfe74c2098c701ff5e6436d2d845883cb8cf8aa134a57023226bbfccbe078e356eac19b35d14ef123291bc8cdd39177be702e5fa6ad3f759155cee55dc6fbdc10472ffe5d10d619a15ab22f369c49621e5966429fa69f6fc1a02d20dab5c900706608a19028d4a283939d2d16a495ae184bda4fdb488229e0f64334c15daf197dbc6dd213a0bc +Len = 2055 +Result = P + +Digest = SHA512 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 163a1aafa96215f6ff698694f59fe97523399f214683f450f3024e6bb2523c7407ccd7024284522b957dc42aff3ef2a5738daaa88b38092880fc42b98ecdd3e09677db0c189c105f0777981d7620c0fb014c57a3e080cb5afc9ad4c0e47a0e46157ef96b01453a9aa7c99ef80976d425ccafcce990425969a30b5ce55b3fe21bfa595c1a7b272a9c427e73a4a32d392d6384bf33d4137d3a95c6199c692e66af77d56fe6411728c1e47ef2c70610305a1258807f6053d7b06259dba586ea4051a6320af4d65c4ab46dd1277a6995eb127f0aaa207dc3ee0d4c65d1224ac96da10d15ba220d096e8cc25c5f0ae0886dd76e0f3d08efb9c5fc0190d81f12261c5bbc +Len = 2055 +Result = P + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86ad118199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d73330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 2056 +Result = P + +Digest = SHA384 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 137a60205de7c9f40c29d65a035bd96da8ec95a909f129a8f7c0be2b3ecf539f62667e51db71b8685da2cb3a727651e8fa399715262c9a4ab88bff1d8514ee299a196c75a09fbfd6b069bbc5c2d1fce2107e68fa4605086160b803a13d221d47e68c8dfd94e6cf54175588c363f5ba311a77c056c45d90fc9a60ba36ac8f07e319baf84003d2af51d313d6209aaa5ae8a3308cacaa35577a01742ea42e5cdd275de51efc2d1947879c42e9a3dbf5986063c821f99e5ba6daead8d6e0c50f0754fbc5122978334914d12303ab1313a923c29889474c5b1dea85c5ec55cc2d5ad5d6776b2d234b96e2e80ed049c3cfc645967f5d5efb1d5c707585e8fa8bbb5653bc +Len = 2056 +Result = P + +Digest = SHA512 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 485255700ee4e6964ba0a867b650f5d3cac3380b59ec58c72a5d44156f7273f7ccf88edb48a3c7f6c07dfd03b9f8a907f0e7d98e38ee174edf9fe79159cddebafe1cbd586fdaf192d347d56867b3a3eb756ee3c51afbb9f4b1ccb00059abcfa51ef3facd58af14362db77c6c8bb387a5228d105388ff31b21c0b30d90e44956c4ddd6eebe14dc6dd94110e791abed1251eb798e7b559a7d37f9b3e47b83b1c44a9ecf9c591d6cfd21b5f3d9639174289c677b567a24c703f1757bee874c3408d5a2413f759483bf8b4d9956f463798028cfc5695d8cee89506eb5b4a61cd63cbb5b7738cfee0edd94be6ffa6f7c57f258f816015e9f20daeb061150e698596c3bc +Len = 2056 +Result = P + +Digest = SHA256 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0b5546c0e8bf9966ac52887133aa89150a5fe745492fe94790b6e8c06b5f091c147bf46a88b96b4e1ff39b6d8ddd999cc7271718763df7e885e53817d0d607f53aac52eec202d7183c04caa17f975c8eae3d78ac3da5c881b864ed438adaae827036756cd9df4f8fa24ef85aec221b35740c65e252880422ebf7ddf3e52b87346f8d8ed92f459fb76e866e8bf631a5b7e6d86968e5f7f64d499db7d0143ad40770c158039a3ed1205ba7ce959e837a4c23249cfec9ec56f02602c6d98cb845a04920b1123c69f35cc6fda327b632218e575eafff76b23cb0b7e5e3a1b6ac6b0e84d00ae842b10f54bcb018216001f446f680e7167b3553706c1641d9b8ef5253bc +Len = 2056 +Result = P + +Digest = SHA384 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 65b562e2aa341868b4aa78ff86c220330e7159bb0871f8939aed509b4e5bcb2c4ecb2cbf4c85f8a11cb3f1c9efa748225f0d944c983dd86e6faadcf3cf7cff781653300d3f826cb1dfde256c056fff1772dbbe0715c2c85615a47d07a944449f4cad63dc06cf1b0a0ed799bdccd93078888e39beacde047625fd9cfe74c2098c701ff5e6436d2d845883cb8cf8aa134a57023226bbfccbe078e356eac19b35d14ef123291bc8cdd39177be702e5fa6ad3f759155cee55dc6fbdc10472ffe5d10d619a15ab22f369c49621e5966429fa69f6fc1a02d20dab5c900706608a19028d4a283939d2d16a495ae184bda4fdb488229e0f64334c15daf197dbc6dd213a0bc +Len = 2056 +Result = P + +Digest = SHA512 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 563a1aafa96215f6ff698694f59fe97523399f214683f450f3024e6bb2523c7407ccd7024284522b957dc42aff3ef2a5738daaa88b38092880fc42b98ecdd3e09677db0c189c105f0777981d7620c0fb014c57a3e080cb5afc9ad4c0e47a0e46157ef96b01453a9aa7c99ef80976d425ccafcce990425969a30b5ce55b3fe21bfa595c1a7b272a9c427e73a4a32d392d6384bf33d4137d3a95c6199c692e66af77d56fe6411728c1e47ef2c70610305a1258807f6053d7b06259dba586ea4051a6320af4d65c4ab46dd1277a6995eb127f0aaa207dc3ee0d4c65d1224ac96da10d15ba220d096e8cc25c5f0ae0886dd76e0f3d08efb9c5fc0190d81f12261c5bbc +Len = 2056 +Result = P + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0023e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86ad118199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d73330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 2057 +Result = P + +Digest = SHA384 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 00937a60205de7c9f40c29d65a035bd96da8ec95a909f129a8f7c0be2b3ecf539f62667e51db71b8685da2cb3a727651e8fa399715262c9a4ab88bff1d8514ee299a196c75a09fbfd6b069bbc5c2d1fce2107e68fa4605086160b803a13d221d47e68c8dfd94e6cf54175588c363f5ba311a77c056c45d90fc9a60ba36ac8f07e319baf84003d2af51d313d6209aaa5ae8a3308cacaa35577a01742ea42e5cdd275de51efc2d1947879c42e9a3dbf5986063c821f99e5ba6daead8d6e0c50f0754fbc5122978334914d12303ab1313a923c29889474c5b1dea85c5ec55cc2d5ad5d6776b2d234b96e2e80ed049c3cfc645967f5d5efb1d5c707585e8fa8bbb5653bc +Len = 2057 +Result = P + +Digest = SHA512 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 00485255700ee4e6964ba0a867b650f5d3cac3380b59ec58c72a5d44156f7273f7ccf88edb48a3c7f6c07dfd03b9f8a907f0e7d98e38ee174edf9fe79159cddebafe1cbd586fdaf192d347d56867b3a3eb756ee3c51afbb9f4b1ccb00059abcfa51ef3facd58af14362db77c6c8bb387a5228d105388ff31b21c0b30d90e44956c4ddd6eebe14dc6dd94110e791abed1251eb798e7b559a7d37f9b3e47b83b1c44a9ecf9c591d6cfd21b5f3d9639174289c677b567a24c703f1757bee874c3408d5a2413f759483bf8b4d9956f463798028cfc5695d8cee89506eb5b4a61cd63cbb5b7738cfee0edd94be6ffa6f7c57f258f816015e9f20daeb061150e698596c3bc +Len = 2057 +Result = P + +Digest = SHA256 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 008b5546c0e8bf9966ac52887133aa89150a5fe745492fe94790b6e8c06b5f091c147bf46a88b96b4e1ff39b6d8ddd999cc7271718763df7e885e53817d0d607f53aac52eec202d7183c04caa17f975c8eae3d78ac3da5c881b864ed438adaae827036756cd9df4f8fa24ef85aec221b35740c65e252880422ebf7ddf3e52b87346f8d8ed92f459fb76e866e8bf631a5b7e6d86968e5f7f64d499db7d0143ad40770c158039a3ed1205ba7ce959e837a4c23249cfec9ec56f02602c6d98cb845a04920b1123c69f35cc6fda327b632218e575eafff76b23cb0b7e5e3a1b6ac6b0e84d00ae842b10f54bcb018216001f446f680e7167b3553706c1641d9b8ef5253bc +Len = 2057 +Result = P + +Digest = SHA384 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 00e5b562e2aa341868b4aa78ff86c220330e7159bb0871f8939aed509b4e5bcb2c4ecb2cbf4c85f8a11cb3f1c9efa748225f0d944c983dd86e6faadcf3cf7cff781653300d3f826cb1dfde256c056fff1772dbbe0715c2c85615a47d07a944449f4cad63dc06cf1b0a0ed799bdccd93078888e39beacde047625fd9cfe74c2098c701ff5e6436d2d845883cb8cf8aa134a57023226bbfccbe078e356eac19b35d14ef123291bc8cdd39177be702e5fa6ad3f759155cee55dc6fbdc10472ffe5d10d619a15ab22f369c49621e5966429fa69f6fc1a02d20dab5c900706608a19028d4a283939d2d16a495ae184bda4fdb488229e0f64334c15daf197dbc6dd213a0bc +Len = 2057 +Result = P + +Digest = SHA512 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 00d63a1aafa96215f6ff698694f59fe97523399f214683f450f3024e6bb2523c7407ccd7024284522b957dc42aff3ef2a5738daaa88b38092880fc42b98ecdd3e09677db0c189c105f0777981d7620c0fb014c57a3e080cb5afc9ad4c0e47a0e46157ef96b01453a9aa7c99ef80976d425ccafcce990425969a30b5ce55b3fe21bfa595c1a7b272a9c427e73a4a32d392d6384bf33d4137d3a95c6199c692e66af77d56fe6411728c1e47ef2c70610305a1258807f6053d7b06259dba586ea4051a6320af4d65c4ab46dd1277a6995eb127f0aaa207dc3ee0d4c65d1224ac96da10d15ba220d096e8cc25c5f0ae0886dd76e0f3d08efb9c5fc0190d81f12261c5bbc +Len = 2057 +Result = P + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86ad0e8e96cd5a7c6c693676ccc625e1208c59723631f216c1155eeac9205705aad83b01a11926d8ca477d047449d3fa2068660cdc61bef02439aea352bd32da7d2e5cf2ddaccdcd6a6eb7492f3b5af9a0bdf93427ef99218bef4d72588f943bd9b8f2a404ba061feb1d48c8430b3f2fe5de5c4fe9af5a48359bd91fa5d93a4d83d96b27177769f91e1d1cb1959790e607f9d30ee44339bc4da863eb6fe8b7457b533c5e22e0bc4855a20229c7ecd193e917cb695b26a84d721f4707dac53e9485234ebeed7bb505f0fa1393aff820462bdd1e26c14c541e551ab6ffb9d7b7e280e33f7b2ec30eb14f4d635a57fb568bf9c420f197673a5cb4d8b15f9e8c743af983232796e8de52887a9f5f194ba589332fbc9de824d33c05de9d1b71fe7e5e628330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 4095 +Result = P + +Digest = SHA384 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 137a60205de7c9f40c29d65a035bd96da8ec95a909f129a8f7c0be2b3ecf539f62667e51db71b8685da2cb3a727651e8fa399715262c9a4ab88bff1d8514ee299a196c75a09fbfd6b069bbc5c2d1fce2107e68fa4605086160b803a13d221d47e68c8dfd94e6cf54175588c363f5ba311a77c056c45d90fc9a60ba36ac8f07e319baf84003d2af51d313d6209aaa5ae8a3308cacaa35577a01742ea42e5cdd26ad15ee0cdde9b7776cb219532b0568909338d1096eab562a1a28261035fff7a40b35e2d988c3b9e421d3f35be3e359d325a25ce856a9077fa884fe96a287ce32eb28f5ce4a854f00575fad8fb53b5b8e405fbb3273d14eeda5141971d34d19cd50620a4ac5041c0622e43224e49df105dec2a4bd93536dfc470b363f0464ffda82ca5dfb7e2620fe210ccbc42344b85d937c6937f40ad69a5db1dc2b5b4d930cb8036d0b95644e792661f872cbe47b65f62c1fcd884c2387938fe303d3b7f1a20e989b5ed979398778924f70439df29482182478048afbb1be1da0e5961ecc38c1e9037b05bee4364877e2d090107abf8a9c46603e16c7013a370376c05daedf3dfa80ae9c6d7916e1029d7468f6c363d9a1b3dc7d01476894b4ea893df8d92b237289bcbf874608978c4ae30c680ac29889474c5b1dea85c5ec55cc2d5ad5d6776b2d234b96e2e80ed049c3cfc645967f5d5efb1d5c707585e8fa8bbb5653bc +Len = 4095 +Result = P + +Digest = SHA512 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 085255700ee4e6964ba0a867b650f5d3cac3380b59ec58c72a5d44156f7273f7ccf88edb48a3c7f6c07dfd03b9f8a907f0e7d98e38ee174edf9fe79159cddebafe1cbd586fdaf192d347d56867b3a3eb756ee3c51afbb9f4b1ccb00059abcfa51ef3facd58af14362db77c6c8bb387a5228d105388ff31b21c0b30d90e44956dbd2d9e1b11bd362d64e1fe89ea4e21d5ee47681745a957238f6bceb748cbecb4591c093561263f22ebafcd66c9e7b2793687459752bc80cfe7a74e188433b07d941689697fbdb5eb4850f5534315360fe5b439559a93f57e3a0cad473a3debcc92304b08112c9b6ef227206d5f14a7037fd417d1c37f600c9df6f0083de6db4070781e60d3dffd4eebefe15f1adcdc74610273296a4112e8b6a4305d7f88eb3029a27e7d96dcc9549c33b1de6ec8485c925065773a0eba301b892777c4a62a0390109153e86bb012234cf2510db791618756df830a49cfa2a27fae064df4d245430084111690f21ee89507fcad3de886c9a476e75d4c18b3913db58bbdb632e7c0f69724b77be966601e11b62be6b6a838eec417d62b131e15bf95a5c6976a917bf80e662f87a5b3775de4648598f678ef971d4e286b21406b2db5cdde48b35a2413f759483bf8b4d9956f463798028cfc5695d8cee89506eb5b4a61cd63cbb5b7738cfee0edd94be6ffa6f7c57f258f816015e9f20daeb061150e698596c3bc +Len = 4095 +Result = P + +Digest = SHA256 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0b5546c0e8bf9966ac52887133aa89150a5fe745492fe94790b6e8c06b5f091c147bf46a88b96b4e1ff39b6d8ddd999cc7271718763df7e885e53817d0d607f53aac52eec202d7183c04caa17f975c8eae3d78ac3da5c881b864ed438adaae827036756cd9df4f8fa24ef85aec221b35740c65e252880422ebf7ddf3e52b87346f8d8ed92f459fb76e866e8bf631a5b7e6d86968e5f7f64d499db7d0143ad40770c158039a3ed1205ba7ce959e837a4c23249cfec9ec56f02602c6d98cb845a1b9d041e2cc9903ac360d53d746c2d17ea7ae5f0f8642cc4047151351465c9bfe0770aa65f8ee2c3ebcd6fecd005cad15eaf6dc3a81a9d704fb5cfb13af6a848b276cdce43b5feb9c0d4b7e85f946f80ce625ba4fe885f13d1fc709df121143c3f17bf8a50845cc80d066989eaea92bd5735e753cfc9545d5bcb43f0391d4ae4569447927130efabe6e8455ed9533ebb8370a4439097dca51994c3c2ba8686e89570d9cb1f87680865371df21975b696cdc00541347008793dc641ae435b86150e5f6f06414e80f50d07cde583efb79c276d90b637935412f611552c4816c8fddf62f080e9edaba61d939c3b2d302a9e5db80f380ad73bf5c1866d8d7b25146464511ca13672bd3be2a95bf10fa736ce411cded82af15ba8f5340dc9098f7cf84d00ae842b10f54bcb018216001f446f680e7167b3553706c1641d9b8ef5253bc +Len = 4095 +Result = P + +Digest = SHA384 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 25b562e2aa341868b4aa78ff86c220330e7159bb0871f8939aed509b4e5bcb2c4ecb2cbf4c85f8a11cb3f1c9efa748225f0d944c983dd86e6faadcf3cf7cff781653300d3f826cb1dfde256c056fff1772dbbe0715c2c85615a47d07a944449f4cad63dc06cf1b0a0ed799bdccd93078888e39beacde047625fd9cfe74c2098c701ff5e6436d2d845883cb8cf8aa134a57023226bbfccbe078e356eac19b35d0be01d3d9eb383d2361874e80deaf565dcf8561a53e15ad360b2ce0b7df0eade026e951aa42dfc66cb992eea996b26f56d8a224970a4d1e42d925786d3b23215c7cc8f30377f4bec31491c865bb91760acdfb13cd500fa865741f58841fee3938203a766c72397e7ada29cc56b3f6aef82588ca993e0b6af48d2ac6274511b74e9cf06b89a8c73ca741602e7a0c6f9a6e47e87105108d55aff9afb70c14e6e74fa62ed51220fbf46be9a3101dfe1d64d4fea487e05be823fcfaeadad994f11b98b9c9b7390a96b356a32af6d4be2da0861b5b253942aa706000349e5bdead4a931ce48c99c588c9032b71963b9faf26a250483a14c10328a6a5b1ba24639ccc15e842250eb55cba18ed1a7cb5fd0f75e845434fa4c35c8c22b4a8afc1de1f70db96eca9d055b95a107934c7c1f361f19f6fc1a02d20dab5c900706608a19028d4a283939d2d16a495ae184bda4fdb488229e0f64334c15daf197dbc6dd213a0bc +Len = 4095 +Result = P + +Digest = SHA512 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 163a1aafa96215f6ff698694f59fe97523399f214683f450f3024e6bb2523c7407ccd7024284522b957dc42aff3ef2a5738daaa88b38092880fc42b98ecdd3e09677db0c189c105f0777981d7620c0fb014c57a3e080cb5afc9ad4c0e47a0e46157ef96b01453a9aa7c99ef80976d425ccafcce990425969a30b5ce55b3fe21a0aa9acea8bd7da6cb28e835453ddc9dd93744fc324e38dca6536e96c99de965f87259f16b1e7d831148e0237f6e0c0aae2a8708f90a3274092a92b55761ab0a12ee732ddfc2acb7d559b4a0d8d5f8426c9751f5545282b8fe8748b18144bbf6f3a9fb47b9642565736fbc616fb886c28f1089123278c082b7b78bce947bd5285b9f8f5787233dba8313554b8c79686f9817626c8c1a6d641996bbfb32e8d4c0e0a07c6979976a18f0534bf31a658fdc9bd2fa3018a22c3cfbc83640c53fccd833aaf6f08ca2834a9e5c7d56302671b88605734f34189d4612d30fe6d056c77f80eda3ca6976b9ce56d90aad4ae7aad112bb47472e6402bb4c915711e2a2d038c2d6ef94f2fc8fdc90b51aa413e3b0c1f7a8807072f0255fe94e3f0a9a7d7a8c5727d5a0c287df9ebdf184d51e726e4334925b3e7f119272bf7ef3cd3dceab1a6320af4d65c4ab46dd1277a6995eb127f0aaa207dc3ee0d4c65d1224ac96da10d15ba220d096e8cc25c5f0ae0886dd76e0f3d08efb9c5fc0190d81f12261c5bbc +Len = 4095 +Result = P + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86ad0e8e96cd5a7c6c693676ccc625e1208c59723631f216c1155eeac9205705aad83b01a11926d8ca477d047449d3fa2068660cdc61bef02439aea352bd32da7d2e5cf2ddaccdcd6a6eb7492f3b5af9a0bdf93427ef99218bef4d72588f943bd9b8f2a404ba061feb1d48c8430b3f2fe5de5c4fe9af5a48359bd91fa5d93a4d83d96b27177769f91e1d1cb1959790e607f9d30ee44339bc4da863eb6fe8b7457b533c5e22e0bc4855a20229c7ecd193e917cb695b26a84d721f4707dac53e9485234ebeed7bb505f0fa1393aff820462bdd1e26c14c541e551ab6ffb9d7b7e280e33f7b2ec30eb14f4d635a57fb568bf9c420f197673a5cb4d8b15f9e8c743af983232796e8de52887a9f5f194ba589332fbc9de824d33c05de9d1b71fe7e5e628330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 4096 +Result = P + +Digest = SHA384 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 137a60205de7c9f40c29d65a035bd96da8ec95a909f129a8f7c0be2b3ecf539f62667e51db71b8685da2cb3a727651e8fa399715262c9a4ab88bff1d8514ee299a196c75a09fbfd6b069bbc5c2d1fce2107e68fa4605086160b803a13d221d47e68c8dfd94e6cf54175588c363f5ba311a77c056c45d90fc9a60ba36ac8f07e319baf84003d2af51d313d6209aaa5ae8a3308cacaa35577a01742ea42e5cdd26ad15ee0cdde9b7776cb219532b0568909338d1096eab562a1a28261035fff7a40b35e2d988c3b9e421d3f35be3e359d325a25ce856a9077fa884fe96a287ce32eb28f5ce4a854f00575fad8fb53b5b8e405fbb3273d14eeda5141971d34d19cd50620a4ac5041c0622e43224e49df105dec2a4bd93536dfc470b363f0464ffda82ca5dfb7e2620fe210ccbc42344b85d937c6937f40ad69a5db1dc2b5b4d930cb8036d0b95644e792661f872cbe47b65f62c1fcd884c2387938fe303d3b7f1a20e989b5ed979398778924f70439df29482182478048afbb1be1da0e5961ecc38c1e9037b05bee4364877e2d090107abf8a9c46603e16c7013a370376c05daedf3dfa80ae9c6d7916e1029d7468f6c363d9a1b3dc7d01476894b4ea893df8d92b237289bcbf874608978c4ae30c680ac29889474c5b1dea85c5ec55cc2d5ad5d6776b2d234b96e2e80ed049c3cfc645967f5d5efb1d5c707585e8fa8bbb5653bc +Len = 4096 +Result = P + +Digest = SHA512 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 485255700ee4e6964ba0a867b650f5d3cac3380b59ec58c72a5d44156f7273f7ccf88edb48a3c7f6c07dfd03b9f8a907f0e7d98e38ee174edf9fe79159cddebafe1cbd586fdaf192d347d56867b3a3eb756ee3c51afbb9f4b1ccb00059abcfa51ef3facd58af14362db77c6c8bb387a5228d105388ff31b21c0b30d90e44956dbd2d9e1b11bd362d64e1fe89ea4e21d5ee47681745a957238f6bceb748cbecb4591c093561263f22ebafcd66c9e7b2793687459752bc80cfe7a74e188433b07d941689697fbdb5eb4850f5534315360fe5b439559a93f57e3a0cad473a3debcc92304b08112c9b6ef227206d5f14a7037fd417d1c37f600c9df6f0083de6db4070781e60d3dffd4eebefe15f1adcdc74610273296a4112e8b6a4305d7f88eb3029a27e7d96dcc9549c33b1de6ec8485c925065773a0eba301b892777c4a62a0390109153e86bb012234cf2510db791618756df830a49cfa2a27fae064df4d245430084111690f21ee89507fcad3de886c9a476e75d4c18b3913db58bbdb632e7c0f69724b77be966601e11b62be6b6a838eec417d62b131e15bf95a5c6976a917bf80e662f87a5b3775de4648598f678ef971d4e286b21406b2db5cdde48b35a2413f759483bf8b4d9956f463798028cfc5695d8cee89506eb5b4a61cd63cbb5b7738cfee0edd94be6ffa6f7c57f258f816015e9f20daeb061150e698596c3bc +Len = 4096 +Result = P + +Digest = SHA256 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0b5546c0e8bf9966ac52887133aa89150a5fe745492fe94790b6e8c06b5f091c147bf46a88b96b4e1ff39b6d8ddd999cc7271718763df7e885e53817d0d607f53aac52eec202d7183c04caa17f975c8eae3d78ac3da5c881b864ed438adaae827036756cd9df4f8fa24ef85aec221b35740c65e252880422ebf7ddf3e52b87346f8d8ed92f459fb76e866e8bf631a5b7e6d86968e5f7f64d499db7d0143ad40770c158039a3ed1205ba7ce959e837a4c23249cfec9ec56f02602c6d98cb845a1b9d041e2cc9903ac360d53d746c2d17ea7ae5f0f8642cc4047151351465c9bfe0770aa65f8ee2c3ebcd6fecd005cad15eaf6dc3a81a9d704fb5cfb13af6a848b276cdce43b5feb9c0d4b7e85f946f80ce625ba4fe885f13d1fc709df121143c3f17bf8a50845cc80d066989eaea92bd5735e753cfc9545d5bcb43f0391d4ae4569447927130efabe6e8455ed9533ebb8370a4439097dca51994c3c2ba8686e89570d9cb1f87680865371df21975b696cdc00541347008793dc641ae435b86150e5f6f06414e80f50d07cde583efb79c276d90b637935412f611552c4816c8fddf62f080e9edaba61d939c3b2d302a9e5db80f380ad73bf5c1866d8d7b25146464511ca13672bd3be2a95bf10fa736ce411cded82af15ba8f5340dc9098f7cf84d00ae842b10f54bcb018216001f446f680e7167b3553706c1641d9b8ef5253bc +Len = 4096 +Result = P + +Digest = SHA384 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 65b562e2aa341868b4aa78ff86c220330e7159bb0871f8939aed509b4e5bcb2c4ecb2cbf4c85f8a11cb3f1c9efa748225f0d944c983dd86e6faadcf3cf7cff781653300d3f826cb1dfde256c056fff1772dbbe0715c2c85615a47d07a944449f4cad63dc06cf1b0a0ed799bdccd93078888e39beacde047625fd9cfe74c2098c701ff5e6436d2d845883cb8cf8aa134a57023226bbfccbe078e356eac19b35d0be01d3d9eb383d2361874e80deaf565dcf8561a53e15ad360b2ce0b7df0eade026e951aa42dfc66cb992eea996b26f56d8a224970a4d1e42d925786d3b23215c7cc8f30377f4bec31491c865bb91760acdfb13cd500fa865741f58841fee3938203a766c72397e7ada29cc56b3f6aef82588ca993e0b6af48d2ac6274511b74e9cf06b89a8c73ca741602e7a0c6f9a6e47e87105108d55aff9afb70c14e6e74fa62ed51220fbf46be9a3101dfe1d64d4fea487e05be823fcfaeadad994f11b98b9c9b7390a96b356a32af6d4be2da0861b5b253942aa706000349e5bdead4a931ce48c99c588c9032b71963b9faf26a250483a14c10328a6a5b1ba24639ccc15e842250eb55cba18ed1a7cb5fd0f75e845434fa4c35c8c22b4a8afc1de1f70db96eca9d055b95a107934c7c1f361f19f6fc1a02d20dab5c900706608a19028d4a283939d2d16a495ae184bda4fdb488229e0f64334c15daf197dbc6dd213a0bc +Len = 4096 +Result = P + +Digest = SHA512 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 563a1aafa96215f6ff698694f59fe97523399f214683f450f3024e6bb2523c7407ccd7024284522b957dc42aff3ef2a5738daaa88b38092880fc42b98ecdd3e09677db0c189c105f0777981d7620c0fb014c57a3e080cb5afc9ad4c0e47a0e46157ef96b01453a9aa7c99ef80976d425ccafcce990425969a30b5ce55b3fe21a0aa9acea8bd7da6cb28e835453ddc9dd93744fc324e38dca6536e96c99de965f87259f16b1e7d831148e0237f6e0c0aae2a8708f90a3274092a92b55761ab0a12ee732ddfc2acb7d559b4a0d8d5f8426c9751f5545282b8fe8748b18144bbf6f3a9fb47b9642565736fbc616fb886c28f1089123278c082b7b78bce947bd5285b9f8f5787233dba8313554b8c79686f9817626c8c1a6d641996bbfb32e8d4c0e0a07c6979976a18f0534bf31a658fdc9bd2fa3018a22c3cfbc83640c53fccd833aaf6f08ca2834a9e5c7d56302671b88605734f34189d4612d30fe6d056c77f80eda3ca6976b9ce56d90aad4ae7aad112bb47472e6402bb4c915711e2a2d038c2d6ef94f2fc8fdc90b51aa413e3b0c1f7a8807072f0255fe94e3f0a9a7d7a8c5727d5a0c287df9ebdf184d51e726e4334925b3e7f119272bf7ef3cd3dceab1a6320af4d65c4ab46dd1277a6995eb127f0aaa207dc3ee0d4c65d1224ac96da10d15ba220d096e8cc25c5f0ae0886dd76e0f3d08efb9c5fc0190d81f12261c5bbc +Len = 4096 +Result = P + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0023e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86ad0e8e96cd5a7c6c693676ccc625e1208c59723631f216c1155eeac9205705aad83b01a11926d8ca477d047449d3fa2068660cdc61bef02439aea352bd32da7d2e5cf2ddaccdcd6a6eb7492f3b5af9a0bdf93427ef99218bef4d72588f943bd9b8f2a404ba061feb1d48c8430b3f2fe5de5c4fe9af5a48359bd91fa5d93a4d83d96b27177769f91e1d1cb1959790e607f9d30ee44339bc4da863eb6fe8b7457b533c5e22e0bc4855a20229c7ecd193e917cb695b26a84d721f4707dac53e9485234ebeed7bb505f0fa1393aff820462bdd1e26c14c541e551ab6ffb9d7b7e280e33f7b2ec30eb14f4d635a57fb568bf9c420f197673a5cb4d8b15f9e8c743af983232796e8de52887a9f5f194ba589332fbc9de824d33c05de9d1b71fe7e5e628330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 4097 +Result = P + +Digest = SHA384 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 00937a60205de7c9f40c29d65a035bd96da8ec95a909f129a8f7c0be2b3ecf539f62667e51db71b8685da2cb3a727651e8fa399715262c9a4ab88bff1d8514ee299a196c75a09fbfd6b069bbc5c2d1fce2107e68fa4605086160b803a13d221d47e68c8dfd94e6cf54175588c363f5ba311a77c056c45d90fc9a60ba36ac8f07e319baf84003d2af51d313d6209aaa5ae8a3308cacaa35577a01742ea42e5cdd26ad15ee0cdde9b7776cb219532b0568909338d1096eab562a1a28261035fff7a40b35e2d988c3b9e421d3f35be3e359d325a25ce856a9077fa884fe96a287ce32eb28f5ce4a854f00575fad8fb53b5b8e405fbb3273d14eeda5141971d34d19cd50620a4ac5041c0622e43224e49df105dec2a4bd93536dfc470b363f0464ffda82ca5dfb7e2620fe210ccbc42344b85d937c6937f40ad69a5db1dc2b5b4d930cb8036d0b95644e792661f872cbe47b65f62c1fcd884c2387938fe303d3b7f1a20e989b5ed979398778924f70439df29482182478048afbb1be1da0e5961ecc38c1e9037b05bee4364877e2d090107abf8a9c46603e16c7013a370376c05daedf3dfa80ae9c6d7916e1029d7468f6c363d9a1b3dc7d01476894b4ea893df8d92b237289bcbf874608978c4ae30c680ac29889474c5b1dea85c5ec55cc2d5ad5d6776b2d234b96e2e80ed049c3cfc645967f5d5efb1d5c707585e8fa8bbb5653bc +Len = 4097 +Result = P + +Digest = SHA512 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 00485255700ee4e6964ba0a867b650f5d3cac3380b59ec58c72a5d44156f7273f7ccf88edb48a3c7f6c07dfd03b9f8a907f0e7d98e38ee174edf9fe79159cddebafe1cbd586fdaf192d347d56867b3a3eb756ee3c51afbb9f4b1ccb00059abcfa51ef3facd58af14362db77c6c8bb387a5228d105388ff31b21c0b30d90e44956dbd2d9e1b11bd362d64e1fe89ea4e21d5ee47681745a957238f6bceb748cbecb4591c093561263f22ebafcd66c9e7b2793687459752bc80cfe7a74e188433b07d941689697fbdb5eb4850f5534315360fe5b439559a93f57e3a0cad473a3debcc92304b08112c9b6ef227206d5f14a7037fd417d1c37f600c9df6f0083de6db4070781e60d3dffd4eebefe15f1adcdc74610273296a4112e8b6a4305d7f88eb3029a27e7d96dcc9549c33b1de6ec8485c925065773a0eba301b892777c4a62a0390109153e86bb012234cf2510db791618756df830a49cfa2a27fae064df4d245430084111690f21ee89507fcad3de886c9a476e75d4c18b3913db58bbdb632e7c0f69724b77be966601e11b62be6b6a838eec417d62b131e15bf95a5c6976a917bf80e662f87a5b3775de4648598f678ef971d4e286b21406b2db5cdde48b35a2413f759483bf8b4d9956f463798028cfc5695d8cee89506eb5b4a61cd63cbb5b7738cfee0edd94be6ffa6f7c57f258f816015e9f20daeb061150e698596c3bc +Len = 4097 +Result = P + +Digest = SHA256 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 008b5546c0e8bf9966ac52887133aa89150a5fe745492fe94790b6e8c06b5f091c147bf46a88b96b4e1ff39b6d8ddd999cc7271718763df7e885e53817d0d607f53aac52eec202d7183c04caa17f975c8eae3d78ac3da5c881b864ed438adaae827036756cd9df4f8fa24ef85aec221b35740c65e252880422ebf7ddf3e52b87346f8d8ed92f459fb76e866e8bf631a5b7e6d86968e5f7f64d499db7d0143ad40770c158039a3ed1205ba7ce959e837a4c23249cfec9ec56f02602c6d98cb845a1b9d041e2cc9903ac360d53d746c2d17ea7ae5f0f8642cc4047151351465c9bfe0770aa65f8ee2c3ebcd6fecd005cad15eaf6dc3a81a9d704fb5cfb13af6a848b276cdce43b5feb9c0d4b7e85f946f80ce625ba4fe885f13d1fc709df121143c3f17bf8a50845cc80d066989eaea92bd5735e753cfc9545d5bcb43f0391d4ae4569447927130efabe6e8455ed9533ebb8370a4439097dca51994c3c2ba8686e89570d9cb1f87680865371df21975b696cdc00541347008793dc641ae435b86150e5f6f06414e80f50d07cde583efb79c276d90b637935412f611552c4816c8fddf62f080e9edaba61d939c3b2d302a9e5db80f380ad73bf5c1866d8d7b25146464511ca13672bd3be2a95bf10fa736ce411cded82af15ba8f5340dc9098f7cf84d00ae842b10f54bcb018216001f446f680e7167b3553706c1641d9b8ef5253bc +Len = 4097 +Result = P + +Digest = SHA384 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 00e5b562e2aa341868b4aa78ff86c220330e7159bb0871f8939aed509b4e5bcb2c4ecb2cbf4c85f8a11cb3f1c9efa748225f0d944c983dd86e6faadcf3cf7cff781653300d3f826cb1dfde256c056fff1772dbbe0715c2c85615a47d07a944449f4cad63dc06cf1b0a0ed799bdccd93078888e39beacde047625fd9cfe74c2098c701ff5e6436d2d845883cb8cf8aa134a57023226bbfccbe078e356eac19b35d0be01d3d9eb383d2361874e80deaf565dcf8561a53e15ad360b2ce0b7df0eade026e951aa42dfc66cb992eea996b26f56d8a224970a4d1e42d925786d3b23215c7cc8f30377f4bec31491c865bb91760acdfb13cd500fa865741f58841fee3938203a766c72397e7ada29cc56b3f6aef82588ca993e0b6af48d2ac6274511b74e9cf06b89a8c73ca741602e7a0c6f9a6e47e87105108d55aff9afb70c14e6e74fa62ed51220fbf46be9a3101dfe1d64d4fea487e05be823fcfaeadad994f11b98b9c9b7390a96b356a32af6d4be2da0861b5b253942aa706000349e5bdead4a931ce48c99c588c9032b71963b9faf26a250483a14c10328a6a5b1ba24639ccc15e842250eb55cba18ed1a7cb5fd0f75e845434fa4c35c8c22b4a8afc1de1f70db96eca9d055b95a107934c7c1f361f19f6fc1a02d20dab5c900706608a19028d4a283939d2d16a495ae184bda4fdb488229e0f64334c15daf197dbc6dd213a0bc +Len = 4097 +Result = P + +Digest = SHA512 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 00d63a1aafa96215f6ff698694f59fe97523399f214683f450f3024e6bb2523c7407ccd7024284522b957dc42aff3ef2a5738daaa88b38092880fc42b98ecdd3e09677db0c189c105f0777981d7620c0fb014c57a3e080cb5afc9ad4c0e47a0e46157ef96b01453a9aa7c99ef80976d425ccafcce990425969a30b5ce55b3fe21a0aa9acea8bd7da6cb28e835453ddc9dd93744fc324e38dca6536e96c99de965f87259f16b1e7d831148e0237f6e0c0aae2a8708f90a3274092a92b55761ab0a12ee732ddfc2acb7d559b4a0d8d5f8426c9751f5545282b8fe8748b18144bbf6f3a9fb47b9642565736fbc616fb886c28f1089123278c082b7b78bce947bd5285b9f8f5787233dba8313554b8c79686f9817626c8c1a6d641996bbfb32e8d4c0e0a07c6979976a18f0534bf31a658fdc9bd2fa3018a22c3cfbc83640c53fccd833aaf6f08ca2834a9e5c7d56302671b88605734f34189d4612d30fe6d056c77f80eda3ca6976b9ce56d90aad4ae7aad112bb47472e6402bb4c915711e2a2d038c2d6ef94f2fc8fdc90b51aa413e3b0c1f7a8807072f0255fe94e3f0a9a7d7a8c5727d5a0c287df9ebdf184d51e726e4334925b3e7f119272bf7ef3cd3dceab1a6320af4d65c4ab46dd1277a6995eb127f0aaa207dc3ee0d4c65d1224ac96da10d15ba220d096e8cc25c5f0ae0886dd76e0f3d08efb9c5fc0190d81f12261c5bbc +Len = 4097 +Result = P + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86ad0e8e96cd5a7c6c693676ccc625e1208c59723631f216c1155eeac9205705aad83b01a11926d8ca477d047449d3fa2068660cdc61bef02439aea352bd32da7d2e5cf2ddaccdcd6a6eb7492f3b5af9a0bdf93427ef99218bef4d72588f943bd9b8f2a404ba061feb1d48c8430b3f2fe5de5c4fe9af5a48359bd91fa5d93a4d83d96b27177769f91e1d1cb1959790e607f9d30ee44339bc4da863eb6fe8b7457b533c5e22e0bc4855a20229c7ecd193e917cb695b26a84d721f4707dac53e9485234ebeed7bb505f0fa1393aff820462bdd1e26c14c541e551ab6ffb9d7b7e280e33f7b2ec30eb14f4d635a57fb568bf9c420f197673a5cb4d8b15f9e8c743af99c2c2899e7d15d877590501644aa863c20b392e72bdc330ad192147ef171516d815c02fe0e375317b76c9df2052bd2de1b116192785b2282119f875dd89ffaf5a5c36f0524b3a4376f0381184591473a7c131d5f58bbb00b921030a96f260ee78cf1c2c25337e69b4cc42fcbd85034bd41f2c62e990fdd298fd53b453a4232b61426ac0764a5d6b8c45fb1d3004e27a1afc5ed38cf2ec4ab70521e6af5c1a2cf22306c523f87100c140525862efdd2d7eec690f34ad9a3c96c946472e622f830bf21b0c1d0690ebf6c8c98e0595e67b277d9ff43ed93ab568cab9684829f9392ab9eca7dacd191b7f263997bf5a03d4eb5115e84afcb92609554cd14ab304d912c8e9e201350a9460955edba75ba18ba4b5ef91d67950102ebc48432320ab90142fb25dd9decd6d5747255cb1fd7320f2297306c2282286338ab64b060dc0bdfd2271bbd0382d69d38988731bc80b6438a063b8d1af71c2153719a8d8dee2eebf85605a5bfcbc2d364ff291796b7c13506a33fc05dafd939ba9c700a7335cef47b0ced0bcf02722ba17821f144752ac92dda4134b0091b43141a35c53bdc896b4de809337d64caf0e9af200284f88d0f1318903a75df0d1d27f879d9b743a6eeaa9c167ef9cee9a7d0e67bf61872ce528663e4699b54231e6fc12ad41c45518aa53c24fe0cb97fe0d98c696561568d844e64a401ad70db439c978d3f1819f67e017901a307ad26556708f4e62217ab6f4575a0d4800259ea8590e3aa718ac0523330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 8191 +Result = P + +Digest = SHA384 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 137a60205de7c9f40c29d65a035bd96da8ec95a909f129a8f7c0be2b3ecf539f62667e51db71b8685da2cb3a727651e8fa399715262c9a4ab88bff1d8514ee299a196c75a09fbfd6b069bbc5c2d1fce2107e68fa4605086160b803a13d221d47e68c8dfd94e6cf54175588c363f5ba311a77c056c45d90fc9a60ba36ac8f07e319baf84003d2af51d313d6209aaa5ae8a3308cacaa35577a01742ea42e5cdd26ad15ee0cdde9b7776cb219532b0568909338d1096eab562a1a28261035fff7a40b35e2d988c3b9e421d3f35be3e359d325a25ce856a9077fa884fe96a287ce32eb28f5ce4a854f00575fad8fb53b5b8e405fbb3273d14eeda5141971d34d19cd50620a4ac5041c0622e43224e49df105dec2a4bd93536dfc470b363f0464ffda82ca5dfb7e2620fe210ccbc42344b85d937c6937f40ad69a5db1dc2b5b4d930cb8036d0b95644e792661f872cbe47b65f62c1fcd884c2387938fe303d3b7f1a20e989b5ed979398778924f70439df29482182478048afbb1be1da0e5961ecc38c1e9037b05bee4364877e2d090107abf8a9c46603e16c7013a370376c05daf2fcd0a705e6c9d89e611f26d84980633932951432c8df1b79864441a79cd0829dbd382794c4f77b6f8677cba13fc98fad99057289cf906d7ae2abed25e6fb4d555ebb86a5252e50eb6659ef7b7f2e1bff9a7d3910f1b0521c8108688003408bcc4aaa75c7efb27817c55fe1640fea83cbadc4e3f2a13cc56d0a544b84a7a50a34399f3d964d7ea0e9ea80001d6fd36a1516a5bca75bd83be639453a4b59cfcddebfda1e3022ece95efdc82b253c0b64b54c504f83f5cf375a1767e90eb68fe7cb93a43532c3db7e8c6446e6ac94a47e420e70531e62be6e99509ff0ba6040e39c2acb5c9d3a8c6dd92cc56962e495a1d3b67b896527902a9dd956b9e47a67b5461515b6c1211e17d05e69a7d866ed7839efab26089569867ba9736bfdba5fb8517af81410c15f1da525cb58ff8c005345a4cb42e555c8ecadb4d0f345b9afdff4fc60d810ee665327eaac60443c4ae1dc5704f8d7059630100b5ddecdaad5f114caac6a8a580ac9b7bad82195cd9561d3d4f81827f3776650c2a3f0c573c955bde7367b665d0a5a8ebd646cc230db4b4c904e6006b0a2e6546b932cbcd84a7d4ab0b2761ece96606fee0ca5fb1ed47f7a3956778bdeba4f065595b68e9e54e4c10650bf1eb23147e5ce5028a1f363f2cc17dfadf7e3bd33db5b31904ea67ba9107e83061a154fb455a6b3790228ecadf1ab3623e374e1b46b4eb4571d6bbe1632e20c4ab7a601860e662b8b23eaf5690b519c4d052f464bf886fa4d92ae6b179e7782914ffb6b31271e7e06382d59da1c29889474c5b1dea85c5ec55cc2d5ad5d6776b2d234b96e2e80ed049c3cfc645967f5d5efb1d5c707585e8fa8bbb5653bc +Len = 8191 +Result = P + +Digest = SHA512 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 085255700ee4e6964ba0a867b650f5d3cac3380b59ec58c72a5d44156f7273f7ccf88edb48a3c7f6c07dfd03b9f8a907f0e7d98e38ee174edf9fe79159cddebafe1cbd586fdaf192d347d56867b3a3eb756ee3c51afbb9f4b1ccb00059abcfa51ef3facd58af14362db77c6c8bb387a5228d105388ff31b21c0b30d90e44956dbd2d9e1b11bd362d64e1fe89ea4e21d5ee47681745a957238f6bceb748cbecb4591c093561263f22ebafcd66c9e7b2793687459752bc80cfe7a74e188433b07d941689697fbdb5eb4850f5534315360fe5b439559a93f57e3a0cad473a3debcc92304b08112c9b6ef227206d5f14a7037fd417d1c37f600c9df6f0083de6db4070781e60d3dffd4eebefe15f1adcdc74610273296a4112e8b6a4305d7f88eb3029a27e7d96dcc9549c33b1de6ec8485c925065773a0eba301b892777c4a62a0390109153e86bb012234cf2510db791618756df830a49cfa2a27fae064df4d245430084111690f21ee89507fcad3de886c9a476e75d4c18b3913db58bbdb63317300667d4478b199690eee146db164658c81e34e726dbe3eee54f655536679a618b08fe96df77554387ad1494756806881f67edbed89bd1b09bdd453d2eb84349aa813fbf982e83f1ec4dbdabc9a1f54691566f479d465cd82372d267ab98c28c5547f558b8708535a426fda410797ebd41b755cd72f7d798475d443a73271c3664c5f1ed6cc61d5f55a01b5107eb8f42123f70220dac7b3a543e8c91c5c67e20dfd41619b15e1ce4de0142b6e73ccc0994d23de5243c155020f7ad8c0e66882157da99bf76def2decbe6cb55730f1626ee24ee2e68d12efc0efa06aff03c6c25ecb292cc4645a7bd97725a3b32f0d8c4ace785991e88406541b5875db86cf8d19daeaa19f6834aafb46b8f9b0606a0905ea0f0b3671c5fb3d552acee4ce34b6fd33bd58ac36cf97e179096973c1f75b4b49e7efd931a8f3396dd2e9c22a98288933ce97ee90da8b84405fb51c78f998aaff125ee2817b5fbb45d004f6a73be6fab9a09ef86509658fefbb4cc7c1cbd3e4b0a8fc15a32d2e5e0d394c2504afa1ee72a19e72a1dc92a296047a09b557ec3e25ec430de6edd84d5a5dbf4f5344218a8921443aa1f20679e1be0e9bdbee226898c1b4bf100c0fa069ca9d11ca2560aff9a87caf328c4aa07796a9acac94bb501fbee6add688547132f1c3c37ee6e5e475f9ed97b19a47b62786826995073ffda44f8899c9ba08191777b228d33aec6e9fdd4fd20d10cc36e45d4c8b31905c0be8110add3dc573ce006bb08eb34cea61703cd8fa05e26de042be50d6f42a0ae6363bf6c5e9a3a202f41de1d098e525a2413f759483bf8b4d9956f463798028cfc5695d8cee89506eb5b4a61cd63cbb5b7738cfee0edd94be6ffa6f7c57f258f816015e9f20daeb061150e698596c3bc +Len = 8191 +Result = P + +Digest = SHA256 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0b5546c0e8bf9966ac52887133aa89150a5fe745492fe94790b6e8c06b5f091c147bf46a88b96b4e1ff39b6d8ddd999cc7271718763df7e885e53817d0d607f53aac52eec202d7183c04caa17f975c8eae3d78ac3da5c881b864ed438adaae827036756cd9df4f8fa24ef85aec221b35740c65e252880422ebf7ddf3e52b87346f8d8ed92f459fb76e866e8bf631a5b7e6d86968e5f7f64d499db7d0143ad40770c158039a3ed1205ba7ce959e837a4c23249cfec9ec56f02602c6d98cb845a1b9d041e2cc9903ac360d53d746c2d17ea7ae5f0f8642cc4047151351465c9bfe0770aa65f8ee2c3ebcd6fecd005cad15eaf6dc3a81a9d704fb5cfb13af6a848b276cdce43b5feb9c0d4b7e85f946f80ce625ba4fe885f13d1fc709df121143c3f17bf8a50845cc80d066989eaea92bd5735e753cfc9545d5bcb43f0391d4ae4569447927130efabe6e8455ed9533ebb8370a4439097dca51994c3c2ba8686e89570d9cb1f87680865371df21975b696cdc00541347008793dc641ae435b86150e5f6f06414e80f50d07cde583efb79c276d90b637935412f611552c4816c8fddf62f080e9edaba61d939c3b2d302a9e5db80f380ad73bf5c1866d8d7b25147b6b5e13ae397db234eda654fe00a839c14e13d1d725fe54a7fa3b02c6068073f7576e8b01d53f54d1287f4105ffd9d6097bed8537b9a0f97bdda2b2393a983f08fbea11ccaa7656c9347b51cb30f4f6fc22f6667309f458b8db00c9a26d733cc75465a59122e34a66d1331ffd6935f028cd2a726a5d99011b9e1806afde624bb789eb934ff2154e0c52ed22002ca86c6ab46e166923e9b91119bf1cfa7635f4053a7369adfd53df69625e6e816bb8c60cd000e4ecb5b2e40a8251ec828efca270108bde76c652e4cc3ee7e1c4dcff37a9e172c1f58f5dcb0e36c76ebc1222afbf7c4bcaf43f683e6619079a3baed0860b5ba587e7fa78f0f01c108506ffc051b4dd61e2cc0ee06093e8abb100151d37a42727001bf53186aa88d7e7cb1bb64de05bf66fb2da084740c752cb967c7b2fa15bc94a4162d3060dc074aa5f02be6b8662db73894823bb341783bb77769627347dbf481dc898a80d74a66410280c82e54b0192d45ccfa67421a9c1e23c0cd3714dc4114aa8e75ead05cf0e1521f598878ead0553d1f0924032c8ec8b62d3bea3f65286351d00c550bf22bfbdbf3f02580414ca4f97dc6d788431c9a18d56c111bf85a4fa26875fc0b4545ebb7247d8ef78f42ce715f5868602c560b77d9e51981cde571b3f53b2675c4dae28f55839106919383800a585e1d10a396f96349621957ab95fe4280ea6fcc57182e5898d67a37c85c771ce3c1eef72da0dee37dedf8f7ed741d3bad59b09bbb30defcc29484d00ae842b10f54bcb018216001f446f680e7167b3553706c1641d9b8ef5253bc +Len = 8191 +Result = P + +Digest = SHA384 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 25b562e2aa341868b4aa78ff86c220330e7159bb0871f8939aed509b4e5bcb2c4ecb2cbf4c85f8a11cb3f1c9efa748225f0d944c983dd86e6faadcf3cf7cff781653300d3f826cb1dfde256c056fff1772dbbe0715c2c85615a47d07a944449f4cad63dc06cf1b0a0ed799bdccd93078888e39beacde047625fd9cfe74c2098c701ff5e6436d2d845883cb8cf8aa134a57023226bbfccbe078e356eac19b35d0be01d3d9eb383d2361874e80deaf565dcf8561a53e15ad360b2ce0b7df0eade026e951aa42dfc66cb992eea996b26f56d8a224970a4d1e42d925786d3b23215c7cc8f30377f4bec31491c865bb91760acdfb13cd500fa865741f58841fee3938203a766c72397e7ada29cc56b3f6aef82588ca993e0b6af48d2ac6274511b74e9cf06b89a8c73ca741602e7a0c6f9a6e47e87105108d55aff9afb70c14e6e74fa62ed51220fbf46be9a3101dfe1d64d4fea487e05be823fcfaeadad994f11b98b9c9b7390a96b356a32af6d4be2da0861b5b253942aa706000349e5bdead4a931ce48c99c588c9032b71963b9faf26a250483a14c10328a6a5b1ba24639ccde518b2d5fe45ac4ae81dea8c450dff8518b5b3bf5433ac7cd244585f312eef802b661c5920a549aae089c437310391019d17390ea03deb9e22be790287b3901e3e91c6ec32e00906d6475e8d5d3db229bae7321a36b5b0fc2d15a12bf63b4671029e9d9e15577aa89e6118d878f320b165e7a4a3daac770f6ee78b091644c8b542de73ca5556448b59f7c3b8653c0d9749b28e7b22dae2a788c5af003ddf5b5515413e40eb3b67f52fea4779f570585ecc0b8b535df5ce4d8db38647ec1974703e618ce52bfec5cbbea94cb8d17242f8ac9c34d209f477159d47be654a6045bba3a7ad572c1bcf3fa1ddd80dc9c98b3a2ce01dd50ae41814faa0996779e8204e3d6e36f949c5609e1a3875aa4cb00ee6f9a6a7d342feef53208ebd8167ed45c1d4720d2d781c946424b053eca7a814b6fed8dacc61c29aeaefef0f653a85324ef48b371d8873f3445bbac0833c8f5abf7aa8f4cae39567d2c902145b1c7ece8b6f0ee2ebbe6b3e571e95cc1230468e905cc2f5eb768236fa82bdffa1d9fe5d49527851ec30995559c9b60f28e8b19c1d6f69c47d782fb8a13136eed564f59aae0a0dfbb66128d83208d073adb6442de7498bd747e18214683f62b06547fa77520482d6b7e046db5dcc9a10809e8b3248e8a033ce1a8e71589c90bcd2d449f890936f8906f32b9f656056c9414c836565fc1fe8251bca7be8975ac305739569ef80df15059b408750be12ea42878ae8f617d378a6d3874ea92c700ea1b805665e1b673bdbb9dc1e2b67959d9c44d3f3fa9f6fc1a02d20dab5c900706608a19028d4a283939d2d16a495ae184bda4fdb488229e0f64334c15daf197dbc6dd213a0bc +Len = 8191 +Result = P + +Digest = SHA512 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 163a1aafa96215f6ff698694f59fe97523399f214683f450f3024e6bb2523c7407ccd7024284522b957dc42aff3ef2a5738daaa88b38092880fc42b98ecdd3e09677db0c189c105f0777981d7620c0fb014c57a3e080cb5afc9ad4c0e47a0e46157ef96b01453a9aa7c99ef80976d425ccafcce990425969a30b5ce55b3fe21a0aa9acea8bd7da6cb28e835453ddc9dd93744fc324e38dca6536e96c99de965f87259f16b1e7d831148e0237f6e0c0aae2a8708f90a3274092a92b55761ab0a12ee732ddfc2acb7d559b4a0d8d5f8426c9751f5545282b8fe8748b18144bbf6f3a9fb47b9642565736fbc616fb886c28f1089123278c082b7b78bce947bd5285b9f8f5787233dba8313554b8c79686f9817626c8c1a6d641996bbfb32e8d4c0e0a07c6979976a18f0534bf31a658fdc9bd2fa3018a22c3cfbc83640c53fccd833aaf6f08ca2834a9e5c7d56302671b88605734f34189d4612d30fe6d056c77f80eda3ca6976b9ce56d90aad4ae7aad112bb47472e6402bb4c915711e2a2d027cdd9e09bfdf380d39fba15ab1cecbfcef8a78f7f7dff2a50e6413005957275835828daafcd88d091b2fe8bda117d614c3b9d5431701e9d7db071fcc232c1a4182c4dfdd233c1fb1fe6522801019ad037357139d3bba905facfd8f0314d8e4ed919972f735729bf98eb1b39483fa7d179e4b470e68868c32cefb1aed52fa4ab650d60c6655c7a8a10f82f2a427a8c3524a76318565df250027986e89f1cc18e3fc13fc32b03bfebf777aaf0155579f99befb56d043df8a99d7d7570b8af5d3c8812d3e5c9f452e894ff8686dd3a0c6849e1f24ab049497bd69ce08c9c291783f3bf3070819fcdb265aa1b40cb182782ed14f3061efca5e8da124ad48486498cfc7eaff9d2617ee1fae45b5d37d7472cf7c93d561e9208270a01adf7d3dfccb1a70fad3155c41b7f8be37b5f2d4bd3d1476f3ee11de31244ded7bf0fd85e941a50d1f28ff198bf188b7ea1bc9da2d968b519667203418d6005b3c84c13027346db4099968106a2540197f8cd87eed4eb969911707bf29160ed9178d876b284f9004d35bbb0f5ea939532fb29a2db4a052fc06e76fa7f031489fa32e25fb03fe01c7840fc01b741f4e1c2b08030222e6b59951c233354e0fa57321481e5204c792923f4b34d9521bbbad3dd2ea96debb8638dd1049b92a3356e0b4530d71bc22611ad7ee3cbd17ad425c9c17a0957c95ef8ff04832fa44993d273e927ed5e56dcef1c133f6cb57aab63eff0a420db877d424add66924efd59b9584cfa1515a8b393bfd205ecaddf4196d9a16639669b016a90ab349b65ac733112103b6610458a1a6320af4d65c4ab46dd1277a6995eb127f0aaa207dc3ee0d4c65d1224ac96da10d15ba220d096e8cc25c5f0ae0886dd76e0f3d08efb9c5fc0190d81f12261c5bbc +Len = 8191 +Result = P + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86ad0e8e96cd5a7c6c693676ccc625e1208c59723631f216c1155eeac9205705aad83b01a11926d8ca477d047449d3fa2068660cdc61bef02439aea352bd32da7d2e5cf2ddaccdcd6a6eb7492f3b5af9a0bdf93427ef99218bef4d72588f943bd9b8f2a404ba061feb1d48c8430b3f2fe5de5c4fe9af5a48359bd91fa5d93a4d83d96b27177769f91e1d1cb1959790e607f9d30ee44339bc4da863eb6fe8b7457b533c5e22e0bc4855a20229c7ecd193e917cb695b26a84d721f4707dac53e9485234ebeed7bb505f0fa1393aff820462bdd1e26c14c541e551ab6ffb9d7b7e280e33f7b2ec30eb14f4d635a57fb568bf9c420f197673a5cb4d8b15f9e8c743af99c2c2899e7d15d877590501644aa863c20b392e72bdc330ad192147ef171516d815c02fe0e375317b76c9df2052bd2de1b116192785b2282119f875dd89ffaf5a5c36f0524b3a4376f0381184591473a7c131d5f58bbb00b921030a96f260ee78cf1c2c25337e69b4cc42fcbd85034bd41f2c62e990fdd298fd53b453a4232b61426ac0764a5d6b8c45fb1d3004e27a1afc5ed38cf2ec4ab70521e6af5c1a2cf22306c523f87100c140525862efdd2d7eec690f34ad9a3c96c946472e622f830bf21b0c1d0690ebf6c8c98e0595e67b277d9ff43ed93ab568cab9684829f9392ab9eca7dacd191b7f263997bf5a03d4eb5115e84afcb92609554cd14ab304d912c8e9e201350a9460955edba75ba18ba4b5ef91d67950102ebc48432320ab90142fb25dd9decd6d5747255cb1fd7320f2297306c2282286338ab64b060dc0bdfd2271bbd0382d69d38988731bc80b6438a063b8d1af71c2153719a8d8dee2eebf85605a5bfcbc2d364ff291796b7c13506a33fc05dafd939ba9c700a7335cef47b0ced0bcf02722ba17821f144752ac92dda4134b0091b43141a35c53bdc896b4de809337d64caf0e9af200284f88d0f1318903a75df0d1d27f879d9b743a6eeaa9c167ef9cee9a7d0e67bf61872ce528663e4699b54231e6fc12ad41c45518aa53c24fe0cb97fe0d98c696561568d844e64a401ad70db439c978d3f1819f67e017901a307ad26556708f4e62217ab6f4575a0d4800259ea8590e3aa718ac0523330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 8192 +Result = P + +Digest = SHA384 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 137a60205de7c9f40c29d65a035bd96da8ec95a909f129a8f7c0be2b3ecf539f62667e51db71b8685da2cb3a727651e8fa399715262c9a4ab88bff1d8514ee299a196c75a09fbfd6b069bbc5c2d1fce2107e68fa4605086160b803a13d221d47e68c8dfd94e6cf54175588c363f5ba311a77c056c45d90fc9a60ba36ac8f07e319baf84003d2af51d313d6209aaa5ae8a3308cacaa35577a01742ea42e5cdd26ad15ee0cdde9b7776cb219532b0568909338d1096eab562a1a28261035fff7a40b35e2d988c3b9e421d3f35be3e359d325a25ce856a9077fa884fe96a287ce32eb28f5ce4a854f00575fad8fb53b5b8e405fbb3273d14eeda5141971d34d19cd50620a4ac5041c0622e43224e49df105dec2a4bd93536dfc470b363f0464ffda82ca5dfb7e2620fe210ccbc42344b85d937c6937f40ad69a5db1dc2b5b4d930cb8036d0b95644e792661f872cbe47b65f62c1fcd884c2387938fe303d3b7f1a20e989b5ed979398778924f70439df29482182478048afbb1be1da0e5961ecc38c1e9037b05bee4364877e2d090107abf8a9c46603e16c7013a370376c05daf2fcd0a705e6c9d89e611f26d84980633932951432c8df1b79864441a79cd0829dbd382794c4f77b6f8677cba13fc98fad99057289cf906d7ae2abed25e6fb4d555ebb86a5252e50eb6659ef7b7f2e1bff9a7d3910f1b0521c8108688003408bcc4aaa75c7efb27817c55fe1640fea83cbadc4e3f2a13cc56d0a544b84a7a50a34399f3d964d7ea0e9ea80001d6fd36a1516a5bca75bd83be639453a4b59cfcddebfda1e3022ece95efdc82b253c0b64b54c504f83f5cf375a1767e90eb68fe7cb93a43532c3db7e8c6446e6ac94a47e420e70531e62be6e99509ff0ba6040e39c2acb5c9d3a8c6dd92cc56962e495a1d3b67b896527902a9dd956b9e47a67b5461515b6c1211e17d05e69a7d866ed7839efab26089569867ba9736bfdba5fb8517af81410c15f1da525cb58ff8c005345a4cb42e555c8ecadb4d0f345b9afdff4fc60d810ee665327eaac60443c4ae1dc5704f8d7059630100b5ddecdaad5f114caac6a8a580ac9b7bad82195cd9561d3d4f81827f3776650c2a3f0c573c955bde7367b665d0a5a8ebd646cc230db4b4c904e6006b0a2e6546b932cbcd84a7d4ab0b2761ece96606fee0ca5fb1ed47f7a3956778bdeba4f065595b68e9e54e4c10650bf1eb23147e5ce5028a1f363f2cc17dfadf7e3bd33db5b31904ea67ba9107e83061a154fb455a6b3790228ecadf1ab3623e374e1b46b4eb4571d6bbe1632e20c4ab7a601860e662b8b23eaf5690b519c4d052f464bf886fa4d92ae6b179e7782914ffb6b31271e7e06382d59da1c29889474c5b1dea85c5ec55cc2d5ad5d6776b2d234b96e2e80ed049c3cfc645967f5d5efb1d5c707585e8fa8bbb5653bc +Len = 8192 +Result = P + +Digest = SHA512 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 485255700ee4e6964ba0a867b650f5d3cac3380b59ec58c72a5d44156f7273f7ccf88edb48a3c7f6c07dfd03b9f8a907f0e7d98e38ee174edf9fe79159cddebafe1cbd586fdaf192d347d56867b3a3eb756ee3c51afbb9f4b1ccb00059abcfa51ef3facd58af14362db77c6c8bb387a5228d105388ff31b21c0b30d90e44956dbd2d9e1b11bd362d64e1fe89ea4e21d5ee47681745a957238f6bceb748cbecb4591c093561263f22ebafcd66c9e7b2793687459752bc80cfe7a74e188433b07d941689697fbdb5eb4850f5534315360fe5b439559a93f57e3a0cad473a3debcc92304b08112c9b6ef227206d5f14a7037fd417d1c37f600c9df6f0083de6db4070781e60d3dffd4eebefe15f1adcdc74610273296a4112e8b6a4305d7f88eb3029a27e7d96dcc9549c33b1de6ec8485c925065773a0eba301b892777c4a62a0390109153e86bb012234cf2510db791618756df830a49cfa2a27fae064df4d245430084111690f21ee89507fcad3de886c9a476e75d4c18b3913db58bbdb63317300667d4478b199690eee146db164658c81e34e726dbe3eee54f655536679a618b08fe96df77554387ad1494756806881f67edbed89bd1b09bdd453d2eb84349aa813fbf982e83f1ec4dbdabc9a1f54691566f479d465cd82372d267ab98c28c5547f558b8708535a426fda410797ebd41b755cd72f7d798475d443a73271c3664c5f1ed6cc61d5f55a01b5107eb8f42123f70220dac7b3a543e8c91c5c67e20dfd41619b15e1ce4de0142b6e73ccc0994d23de5243c155020f7ad8c0e66882157da99bf76def2decbe6cb55730f1626ee24ee2e68d12efc0efa06aff03c6c25ecb292cc4645a7bd97725a3b32f0d8c4ace785991e88406541b5875db86cf8d19daeaa19f6834aafb46b8f9b0606a0905ea0f0b3671c5fb3d552acee4ce34b6fd33bd58ac36cf97e179096973c1f75b4b49e7efd931a8f3396dd2e9c22a98288933ce97ee90da8b84405fb51c78f998aaff125ee2817b5fbb45d004f6a73be6fab9a09ef86509658fefbb4cc7c1cbd3e4b0a8fc15a32d2e5e0d394c2504afa1ee72a19e72a1dc92a296047a09b557ec3e25ec430de6edd84d5a5dbf4f5344218a8921443aa1f20679e1be0e9bdbee226898c1b4bf100c0fa069ca9d11ca2560aff9a87caf328c4aa07796a9acac94bb501fbee6add688547132f1c3c37ee6e5e475f9ed97b19a47b62786826995073ffda44f8899c9ba08191777b228d33aec6e9fdd4fd20d10cc36e45d4c8b31905c0be8110add3dc573ce006bb08eb34cea61703cd8fa05e26de042be50d6f42a0ae6363bf6c5e9a3a202f41de1d098e525a2413f759483bf8b4d9956f463798028cfc5695d8cee89506eb5b4a61cd63cbb5b7738cfee0edd94be6ffa6f7c57f258f816015e9f20daeb061150e698596c3bc +Len = 8192 +Result = P + +Digest = SHA256 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0b5546c0e8bf9966ac52887133aa89150a5fe745492fe94790b6e8c06b5f091c147bf46a88b96b4e1ff39b6d8ddd999cc7271718763df7e885e53817d0d607f53aac52eec202d7183c04caa17f975c8eae3d78ac3da5c881b864ed438adaae827036756cd9df4f8fa24ef85aec221b35740c65e252880422ebf7ddf3e52b87346f8d8ed92f459fb76e866e8bf631a5b7e6d86968e5f7f64d499db7d0143ad40770c158039a3ed1205ba7ce959e837a4c23249cfec9ec56f02602c6d98cb845a1b9d041e2cc9903ac360d53d746c2d17ea7ae5f0f8642cc4047151351465c9bfe0770aa65f8ee2c3ebcd6fecd005cad15eaf6dc3a81a9d704fb5cfb13af6a848b276cdce43b5feb9c0d4b7e85f946f80ce625ba4fe885f13d1fc709df121143c3f17bf8a50845cc80d066989eaea92bd5735e753cfc9545d5bcb43f0391d4ae4569447927130efabe6e8455ed9533ebb8370a4439097dca51994c3c2ba8686e89570d9cb1f87680865371df21975b696cdc00541347008793dc641ae435b86150e5f6f06414e80f50d07cde583efb79c276d90b637935412f611552c4816c8fddf62f080e9edaba61d939c3b2d302a9e5db80f380ad73bf5c1866d8d7b25147b6b5e13ae397db234eda654fe00a839c14e13d1d725fe54a7fa3b02c6068073f7576e8b01d53f54d1287f4105ffd9d6097bed8537b9a0f97bdda2b2393a983f08fbea11ccaa7656c9347b51cb30f4f6fc22f6667309f458b8db00c9a26d733cc75465a59122e34a66d1331ffd6935f028cd2a726a5d99011b9e1806afde624bb789eb934ff2154e0c52ed22002ca86c6ab46e166923e9b91119bf1cfa7635f4053a7369adfd53df69625e6e816bb8c60cd000e4ecb5b2e40a8251ec828efca270108bde76c652e4cc3ee7e1c4dcff37a9e172c1f58f5dcb0e36c76ebc1222afbf7c4bcaf43f683e6619079a3baed0860b5ba587e7fa78f0f01c108506ffc051b4dd61e2cc0ee06093e8abb100151d37a42727001bf53186aa88d7e7cb1bb64de05bf66fb2da084740c752cb967c7b2fa15bc94a4162d3060dc074aa5f02be6b8662db73894823bb341783bb77769627347dbf481dc898a80d74a66410280c82e54b0192d45ccfa67421a9c1e23c0cd3714dc4114aa8e75ead05cf0e1521f598878ead0553d1f0924032c8ec8b62d3bea3f65286351d00c550bf22bfbdbf3f02580414ca4f97dc6d788431c9a18d56c111bf85a4fa26875fc0b4545ebb7247d8ef78f42ce715f5868602c560b77d9e51981cde571b3f53b2675c4dae28f55839106919383800a585e1d10a396f96349621957ab95fe4280ea6fcc57182e5898d67a37c85c771ce3c1eef72da0dee37dedf8f7ed741d3bad59b09bbb30defcc29484d00ae842b10f54bcb018216001f446f680e7167b3553706c1641d9b8ef5253bc +Len = 8192 +Result = P + +Digest = SHA384 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 65b562e2aa341868b4aa78ff86c220330e7159bb0871f8939aed509b4e5bcb2c4ecb2cbf4c85f8a11cb3f1c9efa748225f0d944c983dd86e6faadcf3cf7cff781653300d3f826cb1dfde256c056fff1772dbbe0715c2c85615a47d07a944449f4cad63dc06cf1b0a0ed799bdccd93078888e39beacde047625fd9cfe74c2098c701ff5e6436d2d845883cb8cf8aa134a57023226bbfccbe078e356eac19b35d0be01d3d9eb383d2361874e80deaf565dcf8561a53e15ad360b2ce0b7df0eade026e951aa42dfc66cb992eea996b26f56d8a224970a4d1e42d925786d3b23215c7cc8f30377f4bec31491c865bb91760acdfb13cd500fa865741f58841fee3938203a766c72397e7ada29cc56b3f6aef82588ca993e0b6af48d2ac6274511b74e9cf06b89a8c73ca741602e7a0c6f9a6e47e87105108d55aff9afb70c14e6e74fa62ed51220fbf46be9a3101dfe1d64d4fea487e05be823fcfaeadad994f11b98b9c9b7390a96b356a32af6d4be2da0861b5b253942aa706000349e5bdead4a931ce48c99c588c9032b71963b9faf26a250483a14c10328a6a5b1ba24639ccde518b2d5fe45ac4ae81dea8c450dff8518b5b3bf5433ac7cd244585f312eef802b661c5920a549aae089c437310391019d17390ea03deb9e22be790287b3901e3e91c6ec32e00906d6475e8d5d3db229bae7321a36b5b0fc2d15a12bf63b4671029e9d9e15577aa89e6118d878f320b165e7a4a3daac770f6ee78b091644c8b542de73ca5556448b59f7c3b8653c0d9749b28e7b22dae2a788c5af003ddf5b5515413e40eb3b67f52fea4779f570585ecc0b8b535df5ce4d8db38647ec1974703e618ce52bfec5cbbea94cb8d17242f8ac9c34d209f477159d47be654a6045bba3a7ad572c1bcf3fa1ddd80dc9c98b3a2ce01dd50ae41814faa0996779e8204e3d6e36f949c5609e1a3875aa4cb00ee6f9a6a7d342feef53208ebd8167ed45c1d4720d2d781c946424b053eca7a814b6fed8dacc61c29aeaefef0f653a85324ef48b371d8873f3445bbac0833c8f5abf7aa8f4cae39567d2c902145b1c7ece8b6f0ee2ebbe6b3e571e95cc1230468e905cc2f5eb768236fa82bdffa1d9fe5d49527851ec30995559c9b60f28e8b19c1d6f69c47d782fb8a13136eed564f59aae0a0dfbb66128d83208d073adb6442de7498bd747e18214683f62b06547fa77520482d6b7e046db5dcc9a10809e8b3248e8a033ce1a8e71589c90bcd2d449f890936f8906f32b9f656056c9414c836565fc1fe8251bca7be8975ac305739569ef80df15059b408750be12ea42878ae8f617d378a6d3874ea92c700ea1b805665e1b673bdbb9dc1e2b67959d9c44d3f3fa9f6fc1a02d20dab5c900706608a19028d4a283939d2d16a495ae184bda4fdb488229e0f64334c15daf197dbc6dd213a0bc +Len = 8192 +Result = P + +Digest = SHA512 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 563a1aafa96215f6ff698694f59fe97523399f214683f450f3024e6bb2523c7407ccd7024284522b957dc42aff3ef2a5738daaa88b38092880fc42b98ecdd3e09677db0c189c105f0777981d7620c0fb014c57a3e080cb5afc9ad4c0e47a0e46157ef96b01453a9aa7c99ef80976d425ccafcce990425969a30b5ce55b3fe21a0aa9acea8bd7da6cb28e835453ddc9dd93744fc324e38dca6536e96c99de965f87259f16b1e7d831148e0237f6e0c0aae2a8708f90a3274092a92b55761ab0a12ee732ddfc2acb7d559b4a0d8d5f8426c9751f5545282b8fe8748b18144bbf6f3a9fb47b9642565736fbc616fb886c28f1089123278c082b7b78bce947bd5285b9f8f5787233dba8313554b8c79686f9817626c8c1a6d641996bbfb32e8d4c0e0a07c6979976a18f0534bf31a658fdc9bd2fa3018a22c3cfbc83640c53fccd833aaf6f08ca2834a9e5c7d56302671b88605734f34189d4612d30fe6d056c77f80eda3ca6976b9ce56d90aad4ae7aad112bb47472e6402bb4c915711e2a2d027cdd9e09bfdf380d39fba15ab1cecbfcef8a78f7f7dff2a50e6413005957275835828daafcd88d091b2fe8bda117d614c3b9d5431701e9d7db071fcc232c1a4182c4dfdd233c1fb1fe6522801019ad037357139d3bba905facfd8f0314d8e4ed919972f735729bf98eb1b39483fa7d179e4b470e68868c32cefb1aed52fa4ab650d60c6655c7a8a10f82f2a427a8c3524a76318565df250027986e89f1cc18e3fc13fc32b03bfebf777aaf0155579f99befb56d043df8a99d7d7570b8af5d3c8812d3e5c9f452e894ff8686dd3a0c6849e1f24ab049497bd69ce08c9c291783f3bf3070819fcdb265aa1b40cb182782ed14f3061efca5e8da124ad48486498cfc7eaff9d2617ee1fae45b5d37d7472cf7c93d561e9208270a01adf7d3dfccb1a70fad3155c41b7f8be37b5f2d4bd3d1476f3ee11de31244ded7bf0fd85e941a50d1f28ff198bf188b7ea1bc9da2d968b519667203418d6005b3c84c13027346db4099968106a2540197f8cd87eed4eb969911707bf29160ed9178d876b284f9004d35bbb0f5ea939532fb29a2db4a052fc06e76fa7f031489fa32e25fb03fe01c7840fc01b741f4e1c2b08030222e6b59951c233354e0fa57321481e5204c792923f4b34d9521bbbad3dd2ea96debb8638dd1049b92a3356e0b4530d71bc22611ad7ee3cbd17ad425c9c17a0957c95ef8ff04832fa44993d273e927ed5e56dcef1c133f6cb57aab63eff0a420db877d424add66924efd59b9584cfa1515a8b393bfd205ecaddf4196d9a16639669b016a90ab349b65ac733112103b6610458a1a6320af4d65c4ab46dd1277a6995eb127f0aaa207dc3ee0d4c65d1224ac96da10d15ba220d096e8cc25c5f0ae0886dd76e0f3d08efb9c5fc0190d81f12261c5bbc +Len = 8192 +Result = P + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86b2018199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11f00 +Len = 2048 +Result = F (Incorrect last byte) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = dce55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86b2018199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 2048 +Result = F (Incorrect top bits) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e45cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86b2018199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 2048 +Result = F (First byte of PS is not zero) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef96b2018199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 2048 +Result = F (Last byte of PS is not zero) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86a2018199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 2048 +Result = F (Byte following PS is not 0x01) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86bdf18199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 2048 +Result = F (Incorrect salt) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 4d13c3bd731930511a0dda4c05e5de6a44f134bbd8574de0fc9eefdfb84c3823bfce96f9f0266c7a68fc99e8e507cedec9fbd9666c13fccb8d92ffed8b803f0d07b057d79522241a7a4a5adc3a88a291c4fbfab492d08847e18b80b76c3e33f5b37ec45d12b815a8fddbf94cdf80c0c4111e2a0c25924faa1cd045c4237c8007ff70064aaf1fd96d0fb34b68b045a695bd1d2bb758a1e04134a336be9fe5c4095f5944cd4ee1f4ade9ae83ef70801b96be4d7e1c3a6e14299b9668ef07cdb900dc33ecd892481b1b30c9e7bcf739d6d4fa93b6366a4c8540f566678597bae01b54519e7ede927a1e43914b1fc965bfdf3940b9bdafe34ba91e8766f8b2a439bc +Len = 2048 +Result = F (Incorrect message hash) + +Digest = SHA256 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0b5546c0e8bf9966ac52887133aa89150a5fe745492fe94790b6e8c06b5f091c147bf46a88b96b4e1ff39b6d8ddd999cc7271718763df7e885e53817d0d607f53aac52eec202d7183c04caa17f975c8eae3d78ac3da5c881b864ed438adaae827036756cd9df4f8fa24ef85aec221b35740c65e252880422ebf7ddf3e52b87346f8d8ed92f459fb76e866e8bf631a5b7e6d86968e5f7f64d499db7d0143ad40770c158039a3ed1205ba7ce959e837a4c23249cfec9ec56f02602c6d98cb844514920b1123c69f35cc6fda327b632218e575eafff76b23cb0b7e5e3a1b6ac6b84d00ae842b10f54bcb018216001f446f680e7167b3553706c1641d9b8ef525300 +Len = 2048 +Result = F (Incorrect last byte) + +Digest = SHA256 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = f45546c0e8bf9966ac52887133aa89150a5fe745492fe94790b6e8c06b5f091c147bf46a88b96b4e1ff39b6d8ddd999cc7271718763df7e885e53817d0d607f53aac52eec202d7183c04caa17f975c8eae3d78ac3da5c881b864ed438adaae827036756cd9df4f8fa24ef85aec221b35740c65e252880422ebf7ddf3e52b87346f8d8ed92f459fb76e866e8bf631a5b7e6d86968e5f7f64d499db7d0143ad40770c158039a3ed1205ba7ce959e837a4c23249cfec9ec56f02602c6d98cb844514920b1123c69f35cc6fda327b632218e575eafff76b23cb0b7e5e3a1b6ac6b84d00ae842b10f54bcb018216001f446f680e7167b3553706c1641d9b8ef5253bc +Len = 2048 +Result = F (Incorrect top bits) + +Digest = SHA256 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0b5446c0e8bf9966ac52887133aa89150a5fe745492fe94790b6e8c06b5f091c147bf46a88b96b4e1ff39b6d8ddd999cc7271718763df7e885e53817d0d607f53aac52eec202d7183c04caa17f975c8eae3d78ac3da5c881b864ed438adaae827036756cd9df4f8fa24ef85aec221b35740c65e252880422ebf7ddf3e52b87346f8d8ed92f459fb76e866e8bf631a5b7e6d86968e5f7f64d499db7d0143ad40770c158039a3ed1205ba7ce959e837a4c23249cfec9ec56f02602c6d98cb844514920b1123c69f35cc6fda327b632218e575eafff76b23cb0b7e5e3a1b6ac6b84d00ae842b10f54bcb018216001f446f680e7167b3553706c1641d9b8ef5253bc +Len = 2048 +Result = F (First byte of PS is not zero) + +Digest = SHA256 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0b5546c0e8bf9966ac52887133aa89150a5fe745492fe94790b6e8c06b5f091c147bf46a88b96b4e1ff39b6d8ddd999cc7271718763df7e885e53817d0d607f53aac52eec202d7183c04caa17f975c8eae3d78ac3da5c881b864ed438adaae827036756cd9df4f8fa24ef85aec221b35740c65e252880422ebf7ddf3e52b87346f8d8ed92f459fb76e866e8bf631a5b7e6d86968e5f7f64d499db7d0143ad40770c158039a3ed1205ba7ce959e837a4c23249cfec9ec56f02602c6d98cb944514920b1123c69f35cc6fda327b632218e575eafff76b23cb0b7e5e3a1b6ac6b84d00ae842b10f54bcb018216001f446f680e7167b3553706c1641d9b8ef5253bc +Len = 2048 +Result = F (Last byte of PS is not zero) + +Digest = SHA256 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0b5546c0e8bf9966ac52887133aa89150a5fe745492fe94790b6e8c06b5f091c147bf46a88b96b4e1ff39b6d8ddd999cc7271718763df7e885e53817d0d607f53aac52eec202d7183c04caa17f975c8eae3d78ac3da5c881b864ed438adaae827036756cd9df4f8fa24ef85aec221b35740c65e252880422ebf7ddf3e52b87346f8d8ed92f459fb76e866e8bf631a5b7e6d86968e5f7f64d499db7d0143ad40770c158039a3ed1205ba7ce959e837a4c23249cfec9ec56f02602c6d98cb845514920b1123c69f35cc6fda327b632218e575eafff76b23cb0b7e5e3a1b6ac6b84d00ae842b10f54bcb018216001f446f680e7167b3553706c1641d9b8ef5253bc +Len = 2048 +Result = F (Byte following PS is not 0x01) + +Digest = SHA256 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0b5546c0e8bf9966ac52887133aa89150a5fe745492fe94790b6e8c06b5f091c147bf46a88b96b4e1ff39b6d8ddd999cc7271718763df7e885e53817d0d607f53aac52eec202d7183c04caa17f975c8eae3d78ac3da5c881b864ed438adaae827036756cd9df4f8fa24ef85aec221b35740c65e252880422ebf7ddf3e52b87346f8d8ed92f459fb76e866e8bf631a5b7e6d86968e5f7f64d499db7d0143ad40770c158039a3ed1205ba7ce959e837a4c23249cfec9ec56f02602c6d98cb844ae4920b1123c69f35cc6fda327b632218e575eafff76b23cb0b7e5e3a1b6ac6b84d00ae842b10f54bcb018216001f446f680e7167b3553706c1641d9b8ef5253bc +Len = 2048 +Result = F (Incorrect salt) + +Digest = SHA256 +Msg = 546869732069732061206c6f6e676572207465737420737472696e672e +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 4d13c3bd731930511a0dda4c05e5de6a44f134bbd8574de0fc9eefdfb84c3823bfce96f9f0266c7a68fc99e8e507cedec9fbd9666c13fccb8d92ffed8b803f0d07b057d79522241a7a4a5adc3a88a291c4fbfab492d08847e18b80b76c3e33f5b37ec45d12b815a8fddbf94cdf80c0c4111e2a0c25924faa1cd045c4237c8007ff70064aaf1fd96d0fb34b68b045a695bd1d2bb758a1e04134a336be9fe5c4095f5944cd4ee1f4ade9ae83ef70801b96be4d7e1c3a6e14299b9668ef07cdb900dc33ecd892481b1b30c9e7bcf739d6d4fa93b6366a4c8540f566678597bae01b54519e7ede927a1e43914b1fc965bfdf3940b9bdafe34ba91e8766f8b2a439bc +Len = 2048 +Result = F (Incorrect message hash) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0023e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86b2018199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11f00 +Len = 2049 +Result = F (Incorrect last byte) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86b2018199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 2049 +Result = F (Missing leading zero byte) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0123e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86b2018199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 2049 +Result = F (Incorrect leading byte) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0023e45cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86b2018199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 2049 +Result = F (First byte of PS is not zero) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0023e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef96b2018199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 2049 +Result = F (Last byte of PS is not zero) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0023e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86a2018199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 2049 +Result = F (Byte following PS is not 0x01) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0023e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86bdf18199c2557363663979c3c92aee2f83567d393efd19ce1a51e5c62f580aa5d330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 2049 +Result = F (Incorrect salt) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 00cd13c3bd731930511a0dda4c05e5de6a44f134bbd8574de0fc9eefdfb84c3823bfce96f9f0266c7a68fc99e8e507cedec9fbd9666c13fccb8d92ffed8b803f0d07b057d79522241a7a4a5adc3a88a291c4fbfab492d08847e18b80b76c3e33f5b37ec45d12b815a8fddbf94cdf80c0c4111e2a0c25924faa1cd045c4237c8007ff70064aaf1fd96d0fb34b68b045a695bd1d2bb758a1e04134a336be9fe5c4095f5944cd4ee1f4ade9ae83ef70801b96be4d7e1c3a6e14299b9668ef07cdb900dc33ecd892481b1b30c9e7bcf739d6d4fa93b6366a4c8540f566678597bae01b54519e7ede927a1e43914b1fc965bfdf3940b9bdafe34ba91e8766f8b2a439bc +Len = 2049 +Result = F (Incorrect message hash) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86ad0e8e96cd5a7c6c693676ccc625e1208c59723631f216c1155eeac9205705aad83b01a11926d8ca477d047449d3fa2068660cdc61bef02439aea352bd32da7d2e5cf2ddaccdcd6a6eb7492f3b5af9a0bdf93427ef99218bef4d72588f943bd9b8f2a404ba061feb1d48c8430b3f2fe5de5c4fe9af5a48359bd91fa5d93a4d83d96b27177769f91e1d1cb1959790e607f9d30ee44339bc4da863eb6fe8b7457b533c5e22e0bc4855a20229c7ecd193e917cb695b26a84d721f4707dac53e9485234ebeed7bb505f0fa1393aff820462bdd1e26c14c541e551ab6ffb9d7b7e280e33f7b2ec30eb14f4d635a57fb568bf9c420f197673a5cb4d8b15f9e8c743af983232796e8de52887a9f5f194ba589332fbc9de824d33c05de9d1b71fe7e5e628330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11f00 +Len = 4095 +Result = F (Incorrect last byte) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = dce55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86ad0e8e96cd5a7c6c693676ccc625e1208c59723631f216c1155eeac9205705aad83b01a11926d8ca477d047449d3fa2068660cdc61bef02439aea352bd32da7d2e5cf2ddaccdcd6a6eb7492f3b5af9a0bdf93427ef99218bef4d72588f943bd9b8f2a404ba061feb1d48c8430b3f2fe5de5c4fe9af5a48359bd91fa5d93a4d83d96b27177769f91e1d1cb1959790e607f9d30ee44339bc4da863eb6fe8b7457b533c5e22e0bc4855a20229c7ecd193e917cb695b26a84d721f4707dac53e9485234ebeed7bb505f0fa1393aff820462bdd1e26c14c541e551ab6ffb9d7b7e280e33f7b2ec30eb14f4d635a57fb568bf9c420f197673a5cb4d8b15f9e8c743af983232796e8de52887a9f5f194ba589332fbc9de824d33c05de9d1b71fe7e5e628330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 4095 +Result = F (Incorrect top bits) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e45cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86ad0e8e96cd5a7c6c693676ccc625e1208c59723631f216c1155eeac9205705aad83b01a11926d8ca477d047449d3fa2068660cdc61bef02439aea352bd32da7d2e5cf2ddaccdcd6a6eb7492f3b5af9a0bdf93427ef99218bef4d72588f943bd9b8f2a404ba061feb1d48c8430b3f2fe5de5c4fe9af5a48359bd91fa5d93a4d83d96b27177769f91e1d1cb1959790e607f9d30ee44339bc4da863eb6fe8b7457b533c5e22e0bc4855a20229c7ecd193e917cb695b26a84d721f4707dac53e9485234ebeed7bb505f0fa1393aff820462bdd1e26c14c541e551ab6ffb9d7b7e280e33f7b2ec30eb14f4d635a57fb568bf9c420f197673a5cb4d8b15f9e8c743af983232796e8de52887a9f5f194ba589332fbc9de824d33c05de9d1b71fe7e5e628330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 4095 +Result = F (First byte of PS is not zero) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86ad0e8e96cd5a7c6c693676ccc625e1208c59723631f216c1155eeac9205705aad83b01a11926d8ca477d047449d3fa2068660cdc61bef02439aea352bd32da7d2e5cf2ddaccdcd6a6eb7492f3b5af9a0bdf93427ef99218bef4d72588f943bd9b8f2a404ba061feb1d48c8430b3f2fe5de5c4fe9af5a48359bd91fa5d93a4d83d96b27177769f91e1d1cb1959790e607f9d30ee44339bc4da863eb6fe8b7457b533c5e22e0bc4855a20229c7ecd193e917cb695b26a84d721f4707dac53e9485234ebeed7bb505f0fa1393aff820462bdd1e26c14c541e551ab6ffb9d7b7e280e33f7b2ec30eb14f4d635a57fb568bf9c420f197673a5cb4d8b15f9e8c743ae983232796e8de52887a9f5f194ba589332fbc9de824d33c05de9d1b71fe7e5e628330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 4095 +Result = F (Last byte of PS is not zero) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86ad0e8e96cd5a7c6c693676ccc625e1208c59723631f216c1155eeac9205705aad83b01a11926d8ca477d047449d3fa2068660cdc61bef02439aea352bd32da7d2e5cf2ddaccdcd6a6eb7492f3b5af9a0bdf93427ef99218bef4d72588f943bd9b8f2a404ba061feb1d48c8430b3f2fe5de5c4fe9af5a48359bd91fa5d93a4d83d96b27177769f91e1d1cb1959790e607f9d30ee44339bc4da863eb6fe8b7457b533c5e22e0bc4855a20229c7ecd193e917cb695b26a84d721f4707dac53e9485234ebeed7bb505f0fa1393aff820462bdd1e26c14c541e551ab6ffb9d7b7e280e33f7b2ec30eb14f4d635a57fb568bf9c420f197673a5cb4d8b15f9e8c743af993232796e8de52887a9f5f194ba589332fbc9de824d33c05de9d1b71fe7e5e628330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 4095 +Result = F (Byte following PS is not 0x01) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0cd2ba9e6c241267dcee3b04f26f23fbfa3ace11e8f1a6ca6627efe30ad1973a42983a5e29c1646ebc3a50dd34e5f4b7a28a190cd8998d55ace1f46f8c23adf039ce5b9f0eea14b2d158076d194de8d15ac28d8b907002252e224e53cf3f6d4eda63f761395a9178d0d0c3d34e4db38d4574818ee596ac34bbcdf861f13ef86ad0e8e96cd5a7c6c693676ccc625e1208c59723631f216c1155eeac9205705aad83b01a11926d8ca477d047449d3fa2068660cdc61bef02439aea352bd32da7d2e5cf2ddaccdcd6a6eb7492f3b5af9a0bdf93427ef99218bef4d72588f943bd9b8f2a404ba061feb1d48c8430b3f2fe5de5c4fe9af5a48359bd91fa5d93a4d83d96b27177769f91e1d1cb1959790e607f9d30ee44339bc4da863eb6fe8b7457b533c5e22e0bc4855a20229c7ecd193e917cb695b26a84d721f4707dac53e9485234ebeed7bb505f0fa1393aff820462bdd1e26c14c541e551ab6ffb9d7b7e280e33f7b2ec30eb14f4d635a57fb568bf9c420f197673a5cb4d8b15f9e8c743af98cd32796e8de52887a9f5f194ba589332fbc9de824d33c05de9d1b71fe7e5e628330868d2907d2999dd1a1ec37bb025f47b92f505dc9315ef35d57fafa7abb11fbc +Len = 4095 +Result = F (Incorrect salt) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 0d13c3bd731930511a0dda4c05e5de6a44f134bbd8574de0fc9eefdfb84c3823bfce96f9f0266c7a68fc99e8e507cedec9fbd9666c13fccb8d92ffed8b803f0d07b057d79522241a7a4a5adc3a88a291c4fbfab492d08847e18b80b76c3e33f5b37ec45d12b815a8fddbf94cdf80c0c4111e2a0c25924faa1cd045c4237c8007ff70064aaf1fd96d0fb34b68b045a695bd1d2bb758a1e04134a336be9fe5c4095f5944cd4ee1f4ade9ae83ef70801b96be4d7e1c3a6e14299b9668ef07cdb8f02cc31c2862b8ebebc039174c07c926240a6346c69abc75b005969775674a102f664b86f945ff2854879087d364f3117a276492dee29b317249180bd8cb9b6f10aefc6d5b0a09f278fc85f82055a45ebf2b67f75dfb913f72317ff2b1ef96edfce03fbe2e4ffa06078e9546a7f603b8af643be504b537309cfa93a0a1a0aa6352d84f955999b8f275249126a1d5239d043b6208355be3ab515c525ff9f37232f1ef4bc87ef807c7e6f9b80c58a190b2d80cbca97b380708f2902477663a0ebc751fdf4e6fb12a581a271cd8c1ac1b76460bc6618467ff770835bdd2aae4aa5e7438ba762d6b6204b0bcadc2b9b6737aa73befbb09673f0b647365c3ee3fc8aa3612c702d923d93338ef2b692f2fbaed51fd04624f0005aae511853dd00312861b54519e7ede927a1e43914b1fc965bfdf3940b9bdafe34ba91e8766f8b2a439bc +Len = 4095 +Result = F (Incorrect message hash) + +Digest = SHA384 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 137a60205de7c9f40c29d65a035bd96da8ec95a909f129a8f7c0be2b3ecf539f62667e51db71b8685da2cb3a727651e8fa399715262c9a4ab88bff1d8514ee299a196c75a09fbfd6b069bbc5c2d1fce2107e68fa4605086160b803a13d221d47e68c8dfd94e6cf54175588c363f5ba311a77c056c45d90fc9a60ba36ac8f07e319baf84003d2af51d313d6209aaa5ae8a3308cacaa35577a01742ea42e5cdd26ad15ee0cdde9b7776cb219532b0568909338d1096eab562a1a28261035fff7a40b35e2d988c3b9e421d3f35be3e359d325a25ce856a9077fa884fe96a287ce32eb28f5ce4a854f00575fad8fb53b5b8e405fbb3273d14eeda5141971d34d19cd50620a4ac5041c0622e43224e49df105dec2a4bd93536dfc470b363f0464ffda82ca5dfb7e2620fe210ccbc42344b85d937c6937f40ad69a5db1dc2b5b4d930cb8036d0b95644e792661f872cbe47b65f62c1fcd884c2387938fe303d3b7f1a20e989b5ed979398778924f70439df29482182478048afbb1be1da0e5961ecc38c1e9037b05bee4364877e2d090107abf8a9c46603e16c7013a370376c05daedf3dfa80ae9c6d7916e1029d7468f6c363d9a1b3dc7d01476894b4ea893df8d92b237289bcbf874608978c4ae30c680ac29889474c5b1dea85c5ec55cc2d5ad5d6776b2d234b96e2e80ed049c3cfc645967f5d5efb1d5c707585e8fa8bbb565300 +Len = 4096 +Result = F (Incorrect last byte) + +Digest = SHA384 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = ec7a60205de7c9f40c29d65a035bd96da8ec95a909f129a8f7c0be2b3ecf539f62667e51db71b8685da2cb3a727651e8fa399715262c9a4ab88bff1d8514ee299a196c75a09fbfd6b069bbc5c2d1fce2107e68fa4605086160b803a13d221d47e68c8dfd94e6cf54175588c363f5ba311a77c056c45d90fc9a60ba36ac8f07e319baf84003d2af51d313d6209aaa5ae8a3308cacaa35577a01742ea42e5cdd26ad15ee0cdde9b7776cb219532b0568909338d1096eab562a1a28261035fff7a40b35e2d988c3b9e421d3f35be3e359d325a25ce856a9077fa884fe96a287ce32eb28f5ce4a854f00575fad8fb53b5b8e405fbb3273d14eeda5141971d34d19cd50620a4ac5041c0622e43224e49df105dec2a4bd93536dfc470b363f0464ffda82ca5dfb7e2620fe210ccbc42344b85d937c6937f40ad69a5db1dc2b5b4d930cb8036d0b95644e792661f872cbe47b65f62c1fcd884c2387938fe303d3b7f1a20e989b5ed979398778924f70439df29482182478048afbb1be1da0e5961ecc38c1e9037b05bee4364877e2d090107abf8a9c46603e16c7013a370376c05daedf3dfa80ae9c6d7916e1029d7468f6c363d9a1b3dc7d01476894b4ea893df8d92b237289bcbf874608978c4ae30c680ac29889474c5b1dea85c5ec55cc2d5ad5d6776b2d234b96e2e80ed049c3cfc645967f5d5efb1d5c707585e8fa8bbb5653bc +Len = 4096 +Result = F (Incorrect top bits) + +Digest = SHA384 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 137b60205de7c9f40c29d65a035bd96da8ec95a909f129a8f7c0be2b3ecf539f62667e51db71b8685da2cb3a727651e8fa399715262c9a4ab88bff1d8514ee299a196c75a09fbfd6b069bbc5c2d1fce2107e68fa4605086160b803a13d221d47e68c8dfd94e6cf54175588c363f5ba311a77c056c45d90fc9a60ba36ac8f07e319baf84003d2af51d313d6209aaa5ae8a3308cacaa35577a01742ea42e5cdd26ad15ee0cdde9b7776cb219532b0568909338d1096eab562a1a28261035fff7a40b35e2d988c3b9e421d3f35be3e359d325a25ce856a9077fa884fe96a287ce32eb28f5ce4a854f00575fad8fb53b5b8e405fbb3273d14eeda5141971d34d19cd50620a4ac5041c0622e43224e49df105dec2a4bd93536dfc470b363f0464ffda82ca5dfb7e2620fe210ccbc42344b85d937c6937f40ad69a5db1dc2b5b4d930cb8036d0b95644e792661f872cbe47b65f62c1fcd884c2387938fe303d3b7f1a20e989b5ed979398778924f70439df29482182478048afbb1be1da0e5961ecc38c1e9037b05bee4364877e2d090107abf8a9c46603e16c7013a370376c05daedf3dfa80ae9c6d7916e1029d7468f6c363d9a1b3dc7d01476894b4ea893df8d92b237289bcbf874608978c4ae30c680ac29889474c5b1dea85c5ec55cc2d5ad5d6776b2d234b96e2e80ed049c3cfc645967f5d5efb1d5c707585e8fa8bbb5653bc +Len = 4096 +Result = F (First byte of PS is not zero) + +Digest = SHA384 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 137a60205de7c9f40c29d65a035bd96da8ec95a909f129a8f7c0be2b3ecf539f62667e51db71b8685da2cb3a727651e8fa399715262c9a4ab88bff1d8514ee299a196c75a09fbfd6b069bbc5c2d1fce2107e68fa4605086160b803a13d221d47e68c8dfd94e6cf54175588c363f5ba311a77c056c45d90fc9a60ba36ac8f07e319baf84003d2af51d313d6209aaa5ae8a3308cacaa35577a01742ea42e5cdd26ad15ee0cdde9b7776cb219532b0568909338d1096eab562a1a28261035fff7a40b35e2d988c3b9e421d3f35be3e359d325a25ce856a9077fa884fe96a287ce32eb28f5ce4a854f00575fad8fb53b5b8e405fbb3273d14eeda5141971d34d19cd50620a4ac5041c0622e43224e49df105dec2a4bd93536dfc470b363f0464ffda82ca5dfb7e2620fe210ccbc42344b85d937c6937f40ad69a5db1dc2b5b4d930cb8036d0b95644e792661f872cbe47b65f62c1fcd884c2387938fe303d3b7f1a20e989b5ed979398778924f70439df29482182478048afbb1be1da0e5961ecc38c1e9037b05bee4364877e2d090107abf8a9c46603e16c7013a370376c05caedf3dfa80ae9c6d7916e1029d7468f6c363d9a1b3dc7d01476894b4ea893df8d92b237289bcbf874608978c4ae30c680ac29889474c5b1dea85c5ec55cc2d5ad5d6776b2d234b96e2e80ed049c3cfc645967f5d5efb1d5c707585e8fa8bbb5653bc +Len = 4096 +Result = F (Last byte of PS is not zero) + +Digest = SHA384 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 137a60205de7c9f40c29d65a035bd96da8ec95a909f129a8f7c0be2b3ecf539f62667e51db71b8685da2cb3a727651e8fa399715262c9a4ab88bff1d8514ee299a196c75a09fbfd6b069bbc5c2d1fce2107e68fa4605086160b803a13d221d47e68c8dfd94e6cf54175588c363f5ba311a77c056c45d90fc9a60ba36ac8f07e319baf84003d2af51d313d6209aaa5ae8a3308cacaa35577a01742ea42e5cdd26ad15ee0cdde9b7776cb219532b0568909338d1096eab562a1a28261035fff7a40b35e2d988c3b9e421d3f35be3e359d325a25ce856a9077fa884fe96a287ce32eb28f5ce4a854f00575fad8fb53b5b8e405fbb3273d14eeda5141971d34d19cd50620a4ac5041c0622e43224e49df105dec2a4bd93536dfc470b363f0464ffda82ca5dfb7e2620fe210ccbc42344b85d937c6937f40ad69a5db1dc2b5b4d930cb8036d0b95644e792661f872cbe47b65f62c1fcd884c2387938fe303d3b7f1a20e989b5ed979398778924f70439df29482182478048afbb1be1da0e5961ecc38c1e9037b05bee4364877e2d090107abf8a9c46603e16c7013a370376c05dafdf3dfa80ae9c6d7916e1029d7468f6c363d9a1b3dc7d01476894b4ea893df8d92b237289bcbf874608978c4ae30c680ac29889474c5b1dea85c5ec55cc2d5ad5d6776b2d234b96e2e80ed049c3cfc645967f5d5efb1d5c707585e8fa8bbb5653bc +Len = 4096 +Result = F (Byte following PS is not 0x01) + +Digest = SHA384 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 137a60205de7c9f40c29d65a035bd96da8ec95a909f129a8f7c0be2b3ecf539f62667e51db71b8685da2cb3a727651e8fa399715262c9a4ab88bff1d8514ee299a196c75a09fbfd6b069bbc5c2d1fce2107e68fa4605086160b803a13d221d47e68c8dfd94e6cf54175588c363f5ba311a77c056c45d90fc9a60ba36ac8f07e319baf84003d2af51d313d6209aaa5ae8a3308cacaa35577a01742ea42e5cdd26ad15ee0cdde9b7776cb219532b0568909338d1096eab562a1a28261035fff7a40b35e2d988c3b9e421d3f35be3e359d325a25ce856a9077fa884fe96a287ce32eb28f5ce4a854f00575fad8fb53b5b8e405fbb3273d14eeda5141971d34d19cd50620a4ac5041c0622e43224e49df105dec2a4bd93536dfc470b363f0464ffda82ca5dfb7e2620fe210ccbc42344b85d937c6937f40ad69a5db1dc2b5b4d930cb8036d0b95644e792661f872cbe47b65f62c1fcd884c2387938fe303d3b7f1a20e989b5ed979398778924f70439df29482182478048afbb1be1da0e5961ecc38c1e9037b05bee4364877e2d090107abf8a9c46603e16c7013a370376c05dae203dfa80ae9c6d7916e1029d7468f6c363d9a1b3dc7d01476894b4ea893df8d92b237289bcbf874608978c4ae30c680ac29889474c5b1dea85c5ec55cc2d5ad5d6776b2d234b96e2e80ed049c3cfc645967f5d5efb1d5c707585e8fa8bbb5653bc +Len = 4096 +Result = F (Incorrect salt) + +Digest = SHA384 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 5c7fa159e0a1850fe9e68ae0b5c7bf5463e4d9dee092853d51b8ddf33246548c4590ebe1032a5cf9a681b755d57d830dc8080189c8865a5262eea7d3b06d0aa6da2aca63ff513153ae49abd3bed5946ad823bf635fc4ae2d3b44e724b4ed7c5d414099b9bd0170259ca2a330b78de35091531a6701f8558590e5c02342ac082dbdbb8e766c45ff7b29bf5fc018af30967fbe694aedc85543a2aed12483a79b7b5e2e29bc2975cf3e766a62f24bd845d9388a2f9c34bbe716db0afd82f01603cd0b2ab94c0a48f8b583566d41fde7a5374bd048db0d63d9c03f5b2cf5e9f925c96b9fdf6f267e4121ed6ca72bd645bd41d443ffe6e729d069602344d02e3fccab3b9189511cfa0500e175715b9c4924f55d7b32482a396b36ad44a847b11564c2d3a1a0a48500d9784f3b7b6e2c63778f61bcf9afada5a35c1121f17f465477ef437b506e92b5cad3b95ed4683047003e0fffd2ecde0d0c89381b2a4e3b295084fd926db58f9b80261183725564b8d654f0302d5cfe8d9af0132ca11720f60a0d72db898c25d2784069a3c2d46c637371e96bcb3c53f15194c1318962fd4357d552fd14842615976aef266ed9637a33d90bbf3ab69595369a7065be90f0f24b21203de20cb30374b473919f8aca7b0c4544f976e720c05f87d02b4efa8871318da27238ad1b6414d83ad6499efe86071e6fe0b3c396d408593d60a2a524630bbc +Len = 4096 +Result = F (Incorrect message hash) + +Digest = SHA512 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 485255700ee4e6964ba0a867b650f5d3cac3380b59ec58c72a5d44156f7273f7ccf88edb48a3c7f6c07dfd03b9f8a907f0e7d98e38ee174edf9fe79159cddebafe1cbd586fdaf192d347d56867b3a3eb756ee3c51afbb9f4b1ccb00059abcfa51ef3facd58af14362db77c6c8bb387a5228d105388ff31b21c0b30d90e44956dbd2d9e1b11bd362d64e1fe89ea4e21d5ee47681745a957238f6bceb748cbecb4591c093561263f22ebafcd66c9e7b2793687459752bc80cfe7a74e188433b07d941689697fbdb5eb4850f5534315360fe5b439559a93f57e3a0cad473a3debcc92304b08112c9b6ef227206d5f14a7037fd417d1c37f600c9df6f0083de6db4070781e60d3dffd4eebefe15f1adcdc74610273296a4112e8b6a4305d7f88eb3029a27e7d96dcc9549c33b1de6ec8485c925065773a0eba301b892777c4a62a0390109153e86bb012234cf2510db791618756df830a49cfa2a27fae064df4d245430084111690f21ee89507fcad3de886c9a476e75d4c18b3913db58bbdb63317300667d4478b199690eee146db164658c81e34e726dbe3eee54f655536679a618b08fe96df77554387ad1494756806881f67edbed89bd1b09bdd453d2eb84349aa813fbf982e83f1ec4dbdabc9a1f54691566f479d465cd82372d267ab98c28c5547f558b8708535a426fda410797ebd41b755cd72f7d798475d443a73271c3664c5f1ed6cc61d5f55a01b5107eb8f42123f70220dac7b3a543e8c91c5c67e20dfd41619b15e1ce4de0142b6e73ccc0994d23de5243c155020f7ad8c0e66882157da99bf76def2decbe6cb55730f1626ee24ee2e68d12efc0efa06aff03c6c25ecb292cc4645a7bd97725a3b32f0d8c4ace785991e88406541b5875db86cf8d19daeaa19f6834aafb46b8f9b0606a0905ea0f0b3671c5fb3d552acee4ce34b6fd33bd58ac36cf97e179096973c1f75b4b49e7efd931a8f3396dd2e9c22a98288933ce97ee90da8b84405fb51c78f998aaff125ee2817b5fbb45d004f6a73be6fab9a09ef86509658fefbb4cc7c1cbd3e4b0a8fc15a32d2e5e0d394c2504afa1ee72a19e72a1dc92a296047a09b557ec3e25ec430de6edd84d5a5dbf4f5344218a8921443aa1f20679e1be0e9bdbee226898c1b4bf100c0fa069ca9d11ca2560aff9a87caf328c4aa07796a9acac94bb501fbee6add688547132f1c3c37ee6e5e475f9ed97b19a47b62786826995073ffda44f8899c9ba08191777b228d33aec6e9fdd4fd20d10cc36e45d4c8b31905c0be8110add3dc573ce006bb08eb34cea61703cd8fa05e26de042be50d6f42a0ae6363bf6c5e9a3a202f41de1d098e525a2413f759483bf8b4d9956f463798028cfc5695d8cee89506eb5b4a61cd63cbb5b7738cfee0edd94be6ffa6f7c57f258f816015e9f20daeb061150e698596c300 +Len = 8192 +Result = F (Incorrect last byte) + +Digest = SHA512 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = b75255700ee4e6964ba0a867b650f5d3cac3380b59ec58c72a5d44156f7273f7ccf88edb48a3c7f6c07dfd03b9f8a907f0e7d98e38ee174edf9fe79159cddebafe1cbd586fdaf192d347d56867b3a3eb756ee3c51afbb9f4b1ccb00059abcfa51ef3facd58af14362db77c6c8bb387a5228d105388ff31b21c0b30d90e44956dbd2d9e1b11bd362d64e1fe89ea4e21d5ee47681745a957238f6bceb748cbecb4591c093561263f22ebafcd66c9e7b2793687459752bc80cfe7a74e188433b07d941689697fbdb5eb4850f5534315360fe5b439559a93f57e3a0cad473a3debcc92304b08112c9b6ef227206d5f14a7037fd417d1c37f600c9df6f0083de6db4070781e60d3dffd4eebefe15f1adcdc74610273296a4112e8b6a4305d7f88eb3029a27e7d96dcc9549c33b1de6ec8485c925065773a0eba301b892777c4a62a0390109153e86bb012234cf2510db791618756df830a49cfa2a27fae064df4d245430084111690f21ee89507fcad3de886c9a476e75d4c18b3913db58bbdb63317300667d4478b199690eee146db164658c81e34e726dbe3eee54f655536679a618b08fe96df77554387ad1494756806881f67edbed89bd1b09bdd453d2eb84349aa813fbf982e83f1ec4dbdabc9a1f54691566f479d465cd82372d267ab98c28c5547f558b8708535a426fda410797ebd41b755cd72f7d798475d443a73271c3664c5f1ed6cc61d5f55a01b5107eb8f42123f70220dac7b3a543e8c91c5c67e20dfd41619b15e1ce4de0142b6e73ccc0994d23de5243c155020f7ad8c0e66882157da99bf76def2decbe6cb55730f1626ee24ee2e68d12efc0efa06aff03c6c25ecb292cc4645a7bd97725a3b32f0d8c4ace785991e88406541b5875db86cf8d19daeaa19f6834aafb46b8f9b0606a0905ea0f0b3671c5fb3d552acee4ce34b6fd33bd58ac36cf97e179096973c1f75b4b49e7efd931a8f3396dd2e9c22a98288933ce97ee90da8b84405fb51c78f998aaff125ee2817b5fbb45d004f6a73be6fab9a09ef86509658fefbb4cc7c1cbd3e4b0a8fc15a32d2e5e0d394c2504afa1ee72a19e72a1dc92a296047a09b557ec3e25ec430de6edd84d5a5dbf4f5344218a8921443aa1f20679e1be0e9bdbee226898c1b4bf100c0fa069ca9d11ca2560aff9a87caf328c4aa07796a9acac94bb501fbee6add688547132f1c3c37ee6e5e475f9ed97b19a47b62786826995073ffda44f8899c9ba08191777b228d33aec6e9fdd4fd20d10cc36e45d4c8b31905c0be8110add3dc573ce006bb08eb34cea61703cd8fa05e26de042be50d6f42a0ae6363bf6c5e9a3a202f41de1d098e525a2413f759483bf8b4d9956f463798028cfc5695d8cee89506eb5b4a61cd63cbb5b7738cfee0edd94be6ffa6f7c57f258f816015e9f20daeb061150e698596c3bc +Len = 8192 +Result = F (Incorrect top bits) + +Digest = SHA512 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 485355700ee4e6964ba0a867b650f5d3cac3380b59ec58c72a5d44156f7273f7ccf88edb48a3c7f6c07dfd03b9f8a907f0e7d98e38ee174edf9fe79159cddebafe1cbd586fdaf192d347d56867b3a3eb756ee3c51afbb9f4b1ccb00059abcfa51ef3facd58af14362db77c6c8bb387a5228d105388ff31b21c0b30d90e44956dbd2d9e1b11bd362d64e1fe89ea4e21d5ee47681745a957238f6bceb748cbecb4591c093561263f22ebafcd66c9e7b2793687459752bc80cfe7a74e188433b07d941689697fbdb5eb4850f5534315360fe5b439559a93f57e3a0cad473a3debcc92304b08112c9b6ef227206d5f14a7037fd417d1c37f600c9df6f0083de6db4070781e60d3dffd4eebefe15f1adcdc74610273296a4112e8b6a4305d7f88eb3029a27e7d96dcc9549c33b1de6ec8485c925065773a0eba301b892777c4a62a0390109153e86bb012234cf2510db791618756df830a49cfa2a27fae064df4d245430084111690f21ee89507fcad3de886c9a476e75d4c18b3913db58bbdb63317300667d4478b199690eee146db164658c81e34e726dbe3eee54f655536679a618b08fe96df77554387ad1494756806881f67edbed89bd1b09bdd453d2eb84349aa813fbf982e83f1ec4dbdabc9a1f54691566f479d465cd82372d267ab98c28c5547f558b8708535a426fda410797ebd41b755cd72f7d798475d443a73271c3664c5f1ed6cc61d5f55a01b5107eb8f42123f70220dac7b3a543e8c91c5c67e20dfd41619b15e1ce4de0142b6e73ccc0994d23de5243c155020f7ad8c0e66882157da99bf76def2decbe6cb55730f1626ee24ee2e68d12efc0efa06aff03c6c25ecb292cc4645a7bd97725a3b32f0d8c4ace785991e88406541b5875db86cf8d19daeaa19f6834aafb46b8f9b0606a0905ea0f0b3671c5fb3d552acee4ce34b6fd33bd58ac36cf97e179096973c1f75b4b49e7efd931a8f3396dd2e9c22a98288933ce97ee90da8b84405fb51c78f998aaff125ee2817b5fbb45d004f6a73be6fab9a09ef86509658fefbb4cc7c1cbd3e4b0a8fc15a32d2e5e0d394c2504afa1ee72a19e72a1dc92a296047a09b557ec3e25ec430de6edd84d5a5dbf4f5344218a8921443aa1f20679e1be0e9bdbee226898c1b4bf100c0fa069ca9d11ca2560aff9a87caf328c4aa07796a9acac94bb501fbee6add688547132f1c3c37ee6e5e475f9ed97b19a47b62786826995073ffda44f8899c9ba08191777b228d33aec6e9fdd4fd20d10cc36e45d4c8b31905c0be8110add3dc573ce006bb08eb34cea61703cd8fa05e26de042be50d6f42a0ae6363bf6c5e9a3a202f41de1d098e525a2413f759483bf8b4d9956f463798028cfc5695d8cee89506eb5b4a61cd63cbb5b7738cfee0edd94be6ffa6f7c57f258f816015e9f20daeb061150e698596c3bc +Len = 8192 +Result = F (First byte of PS is not zero) + +Digest = SHA512 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 485255700ee4e6964ba0a867b650f5d3cac3380b59ec58c72a5d44156f7273f7ccf88edb48a3c7f6c07dfd03b9f8a907f0e7d98e38ee174edf9fe79159cddebafe1cbd586fdaf192d347d56867b3a3eb756ee3c51afbb9f4b1ccb00059abcfa51ef3facd58af14362db77c6c8bb387a5228d105388ff31b21c0b30d90e44956dbd2d9e1b11bd362d64e1fe89ea4e21d5ee47681745a957238f6bceb748cbecb4591c093561263f22ebafcd66c9e7b2793687459752bc80cfe7a74e188433b07d941689697fbdb5eb4850f5534315360fe5b439559a93f57e3a0cad473a3debcc92304b08112c9b6ef227206d5f14a7037fd417d1c37f600c9df6f0083de6db4070781e60d3dffd4eebefe15f1adcdc74610273296a4112e8b6a4305d7f88eb3029a27e7d96dcc9549c33b1de6ec8485c925065773a0eba301b892777c4a62a0390109153e86bb012234cf2510db791618756df830a49cfa2a27fae064df4d245430084111690f21ee89507fcad3de886c9a476e75d4c18b3913db58bbdb63317300667d4478b199690eee146db164658c81e34e726dbe3eee54f655536679a618b08fe96df77554387ad1494756806881f67edbed89bd1b09bdd453d2eb84349aa813fbf982e83f1ec4dbdabc9a1f54691566f479d465cd82372d267ab98c28c5547f558b8708535a426fda410797ebd41b755cd72f7d798475d443a73271c3664c5f1ed6cc61d5f55a01b5107eb8f42123f70220dac7b3a543e8c91c5c67e20dfd41619b15e1ce4de0142b6e73ccc0994d23de5243c155020f7ad8c0e66882157da99bf76def2decbe6cb55730f1626ee24ee2e68d12efc0efa06aff03c6c25ecb292cc4645a7bd97725a3b32f0d8c4ace785991e88406541b5875db86cf8d19daeaa19f6834aafb46b8f9b0606a0905ea0f0b3671c5fb3d552acee4ce34b6fd33bd58ac36cf97e179096973c1f75b4b49e7efd931a8f3396dd2e9c22a98288933ce97ee90da8b84405fb51c78f998aaff125ee2817b5fbb45d004f6a73be6fab9a09ef86509658fefbb4cc7c1cbd3e4b0a8fc15a32d2e5e0d394c2504afa1ee72a19e72a1dc92a296047a09b557ec3e25ec430de6edd84d5a5dbf4f5344218a8921443aa1f20679e1be0e9bdbee226898c1b4bf100c0fa069ca9d11ca2560aff9a87caf328c4aa07796a9acac94bb501fbee6add688547132f1c3c37ee6e5e475f9ed97b19a47b62786826995073ffda44f8899c9ba08191777b228d32aec6e9fdd4fd20d10cc36e45d4c8b31905c0be8110add3dc573ce006bb08eb34cea61703cd8fa05e26de042be50d6f42a0ae6363bf6c5e9a3a202f41de1d098e525a2413f759483bf8b4d9956f463798028cfc5695d8cee89506eb5b4a61cd63cbb5b7738cfee0edd94be6ffa6f7c57f258f816015e9f20daeb061150e698596c3bc +Len = 8192 +Result = F (Last byte of PS is not zero) + +Digest = SHA512 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 485255700ee4e6964ba0a867b650f5d3cac3380b59ec58c72a5d44156f7273f7ccf88edb48a3c7f6c07dfd03b9f8a907f0e7d98e38ee174edf9fe79159cddebafe1cbd586fdaf192d347d56867b3a3eb756ee3c51afbb9f4b1ccb00059abcfa51ef3facd58af14362db77c6c8bb387a5228d105388ff31b21c0b30d90e44956dbd2d9e1b11bd362d64e1fe89ea4e21d5ee47681745a957238f6bceb748cbecb4591c093561263f22ebafcd66c9e7b2793687459752bc80cfe7a74e188433b07d941689697fbdb5eb4850f5534315360fe5b439559a93f57e3a0cad473a3debcc92304b08112c9b6ef227206d5f14a7037fd417d1c37f600c9df6f0083de6db4070781e60d3dffd4eebefe15f1adcdc74610273296a4112e8b6a4305d7f88eb3029a27e7d96dcc9549c33b1de6ec8485c925065773a0eba301b892777c4a62a0390109153e86bb012234cf2510db791618756df830a49cfa2a27fae064df4d245430084111690f21ee89507fcad3de886c9a476e75d4c18b3913db58bbdb63317300667d4478b199690eee146db164658c81e34e726dbe3eee54f655536679a618b08fe96df77554387ad1494756806881f67edbed89bd1b09bdd453d2eb84349aa813fbf982e83f1ec4dbdabc9a1f54691566f479d465cd82372d267ab98c28c5547f558b8708535a426fda410797ebd41b755cd72f7d798475d443a73271c3664c5f1ed6cc61d5f55a01b5107eb8f42123f70220dac7b3a543e8c91c5c67e20dfd41619b15e1ce4de0142b6e73ccc0994d23de5243c155020f7ad8c0e66882157da99bf76def2decbe6cb55730f1626ee24ee2e68d12efc0efa06aff03c6c25ecb292cc4645a7bd97725a3b32f0d8c4ace785991e88406541b5875db86cf8d19daeaa19f6834aafb46b8f9b0606a0905ea0f0b3671c5fb3d552acee4ce34b6fd33bd58ac36cf97e179096973c1f75b4b49e7efd931a8f3396dd2e9c22a98288933ce97ee90da8b84405fb51c78f998aaff125ee2817b5fbb45d004f6a73be6fab9a09ef86509658fefbb4cc7c1cbd3e4b0a8fc15a32d2e5e0d394c2504afa1ee72a19e72a1dc92a296047a09b557ec3e25ec430de6edd84d5a5dbf4f5344218a8921443aa1f20679e1be0e9bdbee226898c1b4bf100c0fa069ca9d11ca2560aff9a87caf328c4aa07796a9acac94bb501fbee6add688547132f1c3c37ee6e5e475f9ed97b19a47b62786826995073ffda44f8899c9ba08191777b228d33afc6e9fdd4fd20d10cc36e45d4c8b31905c0be8110add3dc573ce006bb08eb34cea61703cd8fa05e26de042be50d6f42a0ae6363bf6c5e9a3a202f41de1d098e525a2413f759483bf8b4d9956f463798028cfc5695d8cee89506eb5b4a61cd63cbb5b7738cfee0edd94be6ffa6f7c57f258f816015e9f20daeb061150e698596c3bc +Len = 8192 +Result = F (Byte following PS is not 0x01) + +Digest = SHA512 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 485255700ee4e6964ba0a867b650f5d3cac3380b59ec58c72a5d44156f7273f7ccf88edb48a3c7f6c07dfd03b9f8a907f0e7d98e38ee174edf9fe79159cddebafe1cbd586fdaf192d347d56867b3a3eb756ee3c51afbb9f4b1ccb00059abcfa51ef3facd58af14362db77c6c8bb387a5228d105388ff31b21c0b30d90e44956dbd2d9e1b11bd362d64e1fe89ea4e21d5ee47681745a957238f6bceb748cbecb4591c093561263f22ebafcd66c9e7b2793687459752bc80cfe7a74e188433b07d941689697fbdb5eb4850f5534315360fe5b439559a93f57e3a0cad473a3debcc92304b08112c9b6ef227206d5f14a7037fd417d1c37f600c9df6f0083de6db4070781e60d3dffd4eebefe15f1adcdc74610273296a4112e8b6a4305d7f88eb3029a27e7d96dcc9549c33b1de6ec8485c925065773a0eba301b892777c4a62a0390109153e86bb012234cf2510db791618756df830a49cfa2a27fae064df4d245430084111690f21ee89507fcad3de886c9a476e75d4c18b3913db58bbdb63317300667d4478b199690eee146db164658c81e34e726dbe3eee54f655536679a618b08fe96df77554387ad1494756806881f67edbed89bd1b09bdd453d2eb84349aa813fbf982e83f1ec4dbdabc9a1f54691566f479d465cd82372d267ab98c28c5547f558b8708535a426fda410797ebd41b755cd72f7d798475d443a73271c3664c5f1ed6cc61d5f55a01b5107eb8f42123f70220dac7b3a543e8c91c5c67e20dfd41619b15e1ce4de0142b6e73ccc0994d23de5243c155020f7ad8c0e66882157da99bf76def2decbe6cb55730f1626ee24ee2e68d12efc0efa06aff03c6c25ecb292cc4645a7bd97725a3b32f0d8c4ace785991e88406541b5875db86cf8d19daeaa19f6834aafb46b8f9b0606a0905ea0f0b3671c5fb3d552acee4ce34b6fd33bd58ac36cf97e179096973c1f75b4b49e7efd931a8f3396dd2e9c22a98288933ce97ee90da8b84405fb51c78f998aaff125ee2817b5fbb45d004f6a73be6fab9a09ef86509658fefbb4cc7c1cbd3e4b0a8fc15a32d2e5e0d394c2504afa1ee72a19e72a1dc92a296047a09b557ec3e25ec430de6edd84d5a5dbf4f5344218a8921443aa1f20679e1be0e9bdbee226898c1b4bf100c0fa069ca9d11ca2560aff9a87caf328c4aa07796a9acac94bb501fbee6add688547132f1c3c37ee6e5e475f9ed97b19a47b62786826995073ffda44f8899c9ba08191777b228d33ae39e9fdd4fd20d10cc36e45d4c8b31905c0be8110add3dc573ce006bb08eb34cea61703cd8fa05e26de042be50d6f42a0ae6363bf6c5e9a3a202f41de1d098e525a2413f759483bf8b4d9956f463798028cfc5695d8cee89506eb5b4a61cd63cbb5b7738cfee0edd94be6ffa6f7c57f258f816015e9f20daeb061150e698596c3bc +Len = 8192 +Result = F (Incorrect salt) + +Digest = SHA512 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 6ee75da53caedcd3b27c1e9b670651eb6d8ccf564da7c2a4b2e6e831f28256a21d44f347f0338cd778834586fb5a3d0e91cb1e9db444c294881614930b40af9502fc4c8667712ee46c7d89ae313949fad6fb1a11da6a71bb757786061cfbd24723d0114f02b58a4fbe00d43416d7870966919abbbfb9ac76b68fe7d1356f1a279c7054696a019c4d43bd75a67ab919f99980eef066991057787d5e1b328833f791350d29d4524478b4751facd1c0852d4e375a0df1a51e7a0915eb7fb046087039fdb5e8c67e5901ad688f3a0569debcfd177fa51882de254b8cb281bdd45475d02365cabcc7d4939d0507cb80fe042845e52853c1db12a73b7fe2ced4722679f074e6b9468431aeb06b88287412b93d729fd7c63babc4926f493a26aa0ee487e7754d92d8b6110dcdcc966a0fd4418b073ef461b1a338aa300b80d56b215635dcf4794d15eae0713da7a7cc74b9775edeea777065415be1cc55ad96b7d1badc5fc16414756faf69ebe7148f05e47ca6ceae4804167ef0bb876ed5cbeb81de01abf22cd419bdc14caa8c3829383988e2d7c54be3b9d64ccd584b6f0ed7fff83cf2039a457c0684f4e6f847b629465da61c3b8a7d711ebebc67214e2e4eda47847576a43a58b7f00cfc2efa207e7bca5930e3253bb520e8cbecd216336e2c62405de992da3797625a3bc79d9c2b28e908db98d543b794df1e9b58995669a044e46abb3a7b1fe231351014f6d9c4dac1f145f47661c3cab5330362406da10e3758f51195cb7d48fecc7026b0845e7d7695c87649e99d30bfc1dc36d7446a11eab59f70bafd5996435958abf656821c146e5fb86e371294c5432145eb0c20e0323e95c93130de92a189987710d4266d07c1298e97df863ce662e06c01afbb5b51d32546378d43993fde40474710c49656d4b0b596050498d5fc8a14b52acc34d69aefd1faf0a3f68d48d9162f6f0d1377b21b2ef5ae97513f1603d3d86293d5326fa1428c26a11df67349cf8bfdeb623047d6a84bdce4b58c6c03e69abed6342dc301d0d376447bb30df46afed76a3487b778928e814fbb0dcac7b94c4fd1f569e66d217818dbb45c481df1c3e2351d4d5ece2e3639ef82bf58880d4459ae118e7c2ff2f2107110ea7ea1bce4d19646d10c1eac9d44e9f8d316186086ab61d214f96ae68b7cd1f1eda9f05488e30b0e452767f4e7395b072d721f566873bdae6e45313ec3ec2d4bfb04be3095091e34d48e185ba1d46ee6b61195e2df9528cfb9247a1921ef83de4152cd60f5dc9f9eeae0efe47b566a26043ca8d3a5640fe6388aa84e1083c07cd1ec1555f528f1893cddc2a01f6da125f692fbc9c7a9832dc602de8b5dab65d8025994c0a871259654275ba3786ea3004a33ab12a42d995c71976b519adec222c75e1ab59daa4111e3ff21d8f4ccca6e15a4144669711854ccbc +Len = 8192 +Result = F (Incorrect message hash) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c +Len = 256 +Result = F (Invalid length) + +Digest = SHA256 +Msg = "" +Salt = f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 +EM = 23e55cbec753a80ab764cb3f9fa29b05a24f2f0b388a5e1082babf37f7d7f60c566e4452dd03fe9153f009aafc0cda10a01cf9f72a8754f618fc0b67de8b2a0c +Len = 512 +Result = F (Invalid length) + diff --git a/vendor/ring/src/rsa/signature_rsa_example_private_key.der b/vendor/ring/src/rsa/signature_rsa_example_private_key.der new file mode 100644 index 00000000..47f08a48 Binary files /dev/null and b/vendor/ring/src/rsa/signature_rsa_example_private_key.der differ diff --git a/vendor/ring/src/rsa/signature_rsa_example_public_key.der b/vendor/ring/src/rsa/signature_rsa_example_public_key.der new file mode 100644 index 00000000..19e944fc Binary files /dev/null and b/vendor/ring/src/rsa/signature_rsa_example_public_key.der differ diff --git a/vendor/ring/src/rsa/signing.rs b/vendor/ring/src/rsa/signing.rs new file mode 100644 index 00000000..12e911db --- /dev/null +++ b/vendor/ring/src/rsa/signing.rs @@ -0,0 +1,645 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use super::{ + bigint::{self, Prime}, + verification, RsaEncoding, N, +}; +/// RSA PKCS#1 1.5 signatures. +use crate::{ + arithmetic::montgomery::R, + bits, digest, + error::{self, KeyRejected}, + io::{self, der, der_writer}, + pkcs8, rand, signature, +}; +use alloc::boxed::Box; + +/// An RSA key pair, used for signing. +pub struct RsaKeyPair { + p: PrivatePrime

, + q: PrivatePrime, + qInv: bigint::Elem, + qq: bigint::Modulus, + q_mod_n: bigint::Elem, + public: verification::Key, + public_key: RsaSubjectPublicKey, +} + +derive_debug_via_field!(RsaKeyPair, stringify!(RsaKeyPair), public_key); + +impl RsaKeyPair { + /// Parses an unencrypted PKCS#8-encoded RSA private key. + /// + /// Only two-prime (not multi-prime) keys are supported. The public modulus + /// (n) must be at least 2047 bits. The public modulus must be no larger + /// than 4096 bits. It is recommended that the public modulus be exactly + /// 2048 or 3072 bits. The public exponent must be at least 65537. + /// + /// This will generate a 2048-bit RSA private key of the correct form using + /// OpenSSL's command line tool: + /// + /// ```sh + /// openssl genpkey -algorithm RSA \ + /// -pkeyopt rsa_keygen_bits:2048 \ + /// -pkeyopt rsa_keygen_pubexp:65537 | \ + /// openssl pkcs8 -topk8 -nocrypt -outform der > rsa-2048-private-key.pk8 + /// ``` + /// + /// This will generate a 3072-bit RSA private key of the correct form: + /// + /// ```sh + /// openssl genpkey -algorithm RSA \ + /// -pkeyopt rsa_keygen_bits:3072 \ + /// -pkeyopt rsa_keygen_pubexp:65537 | \ + /// openssl pkcs8 -topk8 -nocrypt -outform der > rsa-3072-private-key.pk8 + /// ``` + /// + /// Often, keys generated for use in OpenSSL-based software are stored in + /// the Base64 “PEM†format without the PKCS#8 wrapper. Such keys can be + /// converted to binary PKCS#8 form using the OpenSSL command line tool like + /// this: + /// + /// ```sh + /// openssl pkcs8 -topk8 -nocrypt -outform der \ + /// -in rsa-2048-private-key.pem > rsa-2048-private-key.pk8 + /// ``` + /// + /// Base64 (“PEMâ€) PKCS#8-encoded keys can be converted to the binary PKCS#8 + /// form like this: + /// + /// ```sh + /// openssl pkcs8 -nocrypt -outform der \ + /// -in rsa-2048-private-key.pem > rsa-2048-private-key.pk8 + /// ``` + /// + /// The private key is validated according to [NIST SP-800-56B rev. 1] + /// section 6.4.1.4.3, crt_pkv (Intended Exponent-Creation Method Unknown), + /// with the following exceptions: + /// + /// * Section 6.4.1.2.1, Step 1: Neither a target security level nor an + /// expected modulus length is provided as a parameter, so checks + /// regarding these expectations are not done. + /// * Section 6.4.1.2.1, Step 3: Since neither the public key nor the + /// expected modulus length is provided as a parameter, the consistency + /// check between these values and the private key's value of n isn't + /// done. + /// * Section 6.4.1.2.1, Step 5: No primality tests are done, both for + /// performance reasons and to avoid any side channels that such tests + /// would provide. + /// * Section 6.4.1.2.1, Step 6, and 6.4.1.4.3, Step 7: + /// * *ring* has a slightly looser lower bound for the values of `p` + /// and `q` than what the NIST document specifies. This looser lower + /// bound matches what most other crypto libraries do. The check might + /// be tightened to meet NIST's requirements in the future. Similarly, + /// the check that `p` and `q` are not too close together is skipped + /// currently, but may be added in the future. + /// - The validity of the mathematical relationship of `dP`, `dQ`, `e` + /// and `n` is verified only during signing. Some size checks of `d`, + /// `dP` and `dQ` are performed at construction, but some NIST checks + /// are skipped because they would be expensive and/or they would leak + /// information through side channels. If a preemptive check of the + /// consistency of `dP`, `dQ`, `e` and `n` with each other is + /// necessary, that can be done by signing any message with the key + /// pair. + /// + /// * `d` is not fully validated, neither at construction nor during + /// signing. This is OK as far as *ring*'s usage of the key is + /// concerned because *ring* never uses the value of `d` (*ring* always + /// uses `p`, `q`, `dP` and `dQ` via the Chinese Remainder Theorem, + /// instead). However, *ring*'s checks would not be sufficient for + /// validating a key pair for use by some other system; that other + /// system must check the value of `d` itself if `d` is to be used. + /// + /// In addition to the NIST requirements, *ring* requires that `p > q` and + /// that `e` must be no more than 33 bits. + /// + /// See [RFC 5958] and [RFC 3447 Appendix A.1.2] for more details of the + /// encoding of the key. + /// + /// [NIST SP-800-56B rev. 1]: + /// http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Br1.pdf + /// + /// [RFC 3447 Appendix A.1.2]: + /// https://tools.ietf.org/html/rfc3447#appendix-A.1.2 + /// + /// [RFC 5958]: + /// https://tools.ietf.org/html/rfc5958 + pub fn from_pkcs8(pkcs8: &[u8]) -> Result { + const RSA_ENCRYPTION: &[u8] = include_bytes!("../data/alg-rsa-encryption.der"); + let (der, _) = pkcs8::unwrap_key_( + untrusted::Input::from(&RSA_ENCRYPTION), + pkcs8::Version::V1Only, + untrusted::Input::from(pkcs8), + )?; + Self::from_der(der.as_slice_less_safe()) + } + + /// Parses an RSA private key that is not inside a PKCS#8 wrapper. + /// + /// The private key must be encoded as a binary DER-encoded ASN.1 + /// `RSAPrivateKey` as described in [RFC 3447 Appendix A.1.2]). In all other + /// respects, this is just like `from_pkcs8()`. See the documentation for + /// `from_pkcs8()` for more details. + /// + /// It is recommended to use `from_pkcs8()` (with a PKCS#8-encoded key) + /// instead. + /// + /// [RFC 3447 Appendix A.1.2]: + /// https://tools.ietf.org/html/rfc3447#appendix-A.1.2 + /// + /// [NIST SP-800-56B rev. 1]: + /// http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Br1.pdf + pub fn from_der(input: &[u8]) -> Result { + untrusted::Input::from(input).read_all(KeyRejected::invalid_encoding(), |input| { + der::nested( + input, + der::Tag::Sequence, + error::KeyRejected::invalid_encoding(), + Self::from_der_reader, + ) + }) + } + + fn from_der_reader(input: &mut untrusted::Reader) -> Result { + let version = der::small_nonnegative_integer(input) + .map_err(|error::Unspecified| KeyRejected::invalid_encoding())?; + if version != 0 { + return Err(KeyRejected::version_not_supported()); + } + + fn positive_integer<'a>( + input: &mut untrusted::Reader<'a>, + ) -> Result, KeyRejected> { + der::positive_integer(input) + .map_err(|error::Unspecified| KeyRejected::invalid_encoding()) + } + + let n = positive_integer(input)?; + let e = positive_integer(input)?; + let d = positive_integer(input)?.big_endian_without_leading_zero_as_input(); + let p = positive_integer(input)?.big_endian_without_leading_zero_as_input(); + let q = positive_integer(input)?.big_endian_without_leading_zero_as_input(); + let dP = positive_integer(input)?.big_endian_without_leading_zero_as_input(); + let dQ = positive_integer(input)?.big_endian_without_leading_zero_as_input(); + let qInv = positive_integer(input)?.big_endian_without_leading_zero_as_input(); + + let (p, p_bits) = bigint::Nonnegative::from_be_bytes_with_bit_length(p) + .map_err(|error::Unspecified| KeyRejected::invalid_encoding())?; + let (q, q_bits) = bigint::Nonnegative::from_be_bytes_with_bit_length(q) + .map_err(|error::Unspecified| KeyRejected::invalid_encoding())?; + + // Our implementation of CRT-based modular exponentiation used requires + // that `p > q` so swap them if `p < q`. If swapped, `qInv` is + // recalculated below. `p != q` is verified implicitly below, e.g. when + // `q_mod_p` is constructed. + let ((p, p_bits, dP), (q, q_bits, dQ, qInv)) = match q.verify_less_than(&p) { + Ok(_) => ((p, p_bits, dP), (q, q_bits, dQ, Some(qInv))), + Err(error::Unspecified) => { + // TODO: verify `q` and `qInv` are inverses (mod p). + ((q, q_bits, dQ), (p, p_bits, dP, None)) + } + }; + + // XXX: Some steps are done out of order, but the NIST steps are worded + // in such a way that it is clear that NIST intends for them to be done + // in order. TODO: Does this matter at all? + + // 6.4.1.4.3/6.4.1.2.1 - Step 1. + + // Step 1.a is omitted, as explained above. + + // Step 1.b is omitted per above. Instead, we check that the public + // modulus is 2048 to `PRIVATE_KEY_PUBLIC_MODULUS_MAX_BITS` bits. + // XXX: The maximum limit of 4096 bits is primarily due to lack of + // testing of larger key sizes; see, in particular, + // https://www.mail-archive.com/openssl-dev@openssl.org/msg44586.html + // and + // https://www.mail-archive.com/openssl-dev@openssl.org/msg44759.html. + // Also, this limit might help with memory management decisions later. + + // Step 1.c. We validate e >= 65537. + let public_key = verification::Key::from_modulus_and_exponent( + n.big_endian_without_leading_zero_as_input(), + e.big_endian_without_leading_zero_as_input(), + bits::BitLength::from_usize_bits(2048), + super::PRIVATE_KEY_PUBLIC_MODULUS_MAX_BITS, + 65537, + )?; + + // 6.4.1.4.3 says to skip 6.4.1.2.1 Step 2. + + // 6.4.1.4.3 Step 3. + + // Step 3.a is done below, out of order. + // Step 3.b is unneeded since `n_bits` is derived here from `n`. + + // 6.4.1.4.3 says to skip 6.4.1.2.1 Step 4. (We don't need to recover + // the prime factors since they are already given.) + + // 6.4.1.4.3 - Step 5. + + // Steps 5.a and 5.b are omitted, as explained above. + + // Step 5.c. + // + // TODO: First, stop if `p < (√2) * 2**((nBits/2) - 1)`. + // + // Second, stop if `p > 2**(nBits/2) - 1`. + let half_n_bits = public_key.n_bits.half_rounded_up(); + if p_bits != half_n_bits { + return Err(KeyRejected::inconsistent_components()); + } + + // TODO: Step 5.d: Verify GCD(p - 1, e) == 1. + + // Steps 5.e and 5.f are omitted as explained above. + + // Step 5.g. + // + // TODO: First, stop if `q < (√2) * 2**((nBits/2) - 1)`. + // + // Second, stop if `q > 2**(nBits/2) - 1`. + if p_bits != q_bits { + return Err(KeyRejected::inconsistent_components()); + } + + // TODO: Step 5.h: Verify GCD(p - 1, e) == 1. + + let q_mod_n_decoded = q + .to_elem(&public_key.n) + .map_err(|error::Unspecified| KeyRejected::inconsistent_components())?; + + // TODO: Step 5.i + // + // 3.b is unneeded since `n_bits` is derived here from `n`. + + // 6.4.1.4.3 - Step 3.a (out of order). + // + // Verify that p * q == n. We restrict ourselves to modular + // multiplication. We rely on the fact that we've verified + // 0 < q < p < n. We check that q and p are close to sqrt(n) and then + // assume that these preconditions are enough to let us assume that + // checking p * q == 0 (mod n) is equivalent to checking p * q == n. + let q_mod_n = bigint::elem_mul( + public_key.n.oneRR().as_ref(), + q_mod_n_decoded.clone(), + &public_key.n, + ); + let p_mod_n = p + .to_elem(&public_key.n) + .map_err(|error::Unspecified| KeyRejected::inconsistent_components())?; + let pq_mod_n = bigint::elem_mul(&q_mod_n, p_mod_n, &public_key.n); + if !pq_mod_n.is_zero() { + return Err(KeyRejected::inconsistent_components()); + } + + // 6.4.1.4.3/6.4.1.2.1 - Step 6. + + // Step 6.a, partial. + // + // First, validate `2**half_n_bits < d`. Since 2**half_n_bits has a bit + // length of half_n_bits + 1, this check gives us 2**half_n_bits <= d, + // and knowing d is odd makes the inequality strict. + let (d, d_bits) = bigint::Nonnegative::from_be_bytes_with_bit_length(d) + .map_err(|_| error::KeyRejected::invalid_encoding())?; + if !(half_n_bits < d_bits) { + return Err(KeyRejected::inconsistent_components()); + } + // XXX: This check should be `d < LCM(p - 1, q - 1)`, but we don't have + // a good way of calculating LCM, so it is omitted, as explained above. + d.verify_less_than_modulus(&public_key.n) + .map_err(|error::Unspecified| KeyRejected::inconsistent_components())?; + if !d.is_odd() { + return Err(KeyRejected::invalid_component()); + } + + // Step 6.b is omitted as explained above. + + // 6.4.1.4.3 - Step 7. + + // Step 7.a. + let p = PrivatePrime::new(p, dP)?; + + // Step 7.b. + let q = PrivatePrime::new(q, dQ)?; + + let q_mod_p = q.modulus.to_elem(&p.modulus); + + // Step 7.c. + let qInv = if let Some(qInv) = qInv { + bigint::Elem::from_be_bytes_padded(qInv, &p.modulus) + .map_err(|error::Unspecified| KeyRejected::invalid_component())? + } else { + // We swapped `p` and `q` above, so we need to calculate `qInv`. + // Step 7.f below will verify `qInv` is correct. + let q_mod_p = bigint::elem_mul(p.modulus.oneRR().as_ref(), q_mod_p.clone(), &p.modulus); + bigint::elem_inverse_consttime(q_mod_p, &p.modulus) + .map_err(|error::Unspecified| KeyRejected::unexpected_error())? + }; + + // Steps 7.d and 7.e are omitted per the documentation above, and + // because we don't (in the long term) have a good way to do modulo + // with an even modulus. + + // Step 7.f. + let qInv = bigint::elem_mul(p.modulus.oneRR().as_ref(), qInv, &p.modulus); + bigint::verify_inverses_consttime(&qInv, q_mod_p, &p.modulus) + .map_err(|error::Unspecified| KeyRejected::inconsistent_components())?; + + let qq = bigint::elem_mul(&q_mod_n, q_mod_n_decoded, &public_key.n).into_modulus::()?; + + let public_key_serialized = RsaSubjectPublicKey::from_n_and_e(n, e); + + Ok(Self { + p, + q, + qInv, + q_mod_n, + qq, + public: public_key, + public_key: public_key_serialized, + }) + } + + /// Returns the length in bytes of the key pair's public modulus. + /// + /// A signature has the same length as the public modulus. + pub fn public_modulus_len(&self) -> usize { + self.public_key + .modulus() + .big_endian_without_leading_zero_as_input() + .as_slice_less_safe() + .len() + } +} + +impl signature::KeyPair for RsaKeyPair { + type PublicKey = RsaSubjectPublicKey; + + fn public_key(&self) -> &Self::PublicKey { + &self.public_key + } +} + +/// A serialized RSA public key. +#[derive(Clone)] +pub struct RsaSubjectPublicKey(Box<[u8]>); + +impl AsRef<[u8]> for RsaSubjectPublicKey { + fn as_ref(&self) -> &[u8] { + self.0.as_ref() + } +} + +derive_debug_self_as_ref_hex_bytes!(RsaSubjectPublicKey); + +impl RsaSubjectPublicKey { + fn from_n_and_e(n: io::Positive, e: io::Positive) -> Self { + let bytes = der_writer::write_all(der::Tag::Sequence, &|output| { + der_writer::write_positive_integer(output, &n); + der_writer::write_positive_integer(output, &e); + }); + Self(bytes) + } + + /// The public modulus (n). + pub fn modulus(&self) -> io::Positive { + // Parsing won't fail because we serialized it ourselves. + let (public_key, _exponent) = + super::parse_public_key(untrusted::Input::from(self.as_ref())).unwrap(); + public_key + } + + /// The public exponent (e). + pub fn exponent(&self) -> io::Positive { + // Parsing won't fail because we serialized it ourselves. + let (_public_key, exponent) = + super::parse_public_key(untrusted::Input::from(self.as_ref())).unwrap(); + exponent + } +} + +struct PrivatePrime { + modulus: bigint::Modulus, + exponent: bigint::PrivateExponent, +} + +impl PrivatePrime { + /// Constructs a `PrivatePrime` from the private prime `p` and `dP` where + /// dP == d % (p - 1). + fn new(p: bigint::Nonnegative, dP: untrusted::Input) -> Result { + let (p, p_bits) = bigint::Modulus::from_nonnegative_with_bit_length(p)?; + if p_bits.as_usize_bits() % 512 != 0 { + return Err(error::KeyRejected::private_modulus_len_not_multiple_of_512_bits()); + } + + // [NIST SP-800-56B rev. 1] 6.4.1.4.3 - Steps 7.a & 7.b. + let dP = bigint::PrivateExponent::from_be_bytes_padded(dP, &p) + .map_err(|error::Unspecified| KeyRejected::inconsistent_components())?; + + // XXX: Steps 7.d and 7.e are omitted. We don't check that + // `dP == d % (p - 1)` because we don't (in the long term) have a good + // way to do modulo with an even modulus. Instead we just check that + // `1 <= dP < p - 1`. We'll check it, to some unknown extent, when we + // do the private key operation, since we verify that the result of the + // private key operation using the CRT parameters is consistent with `n` + // and `e`. TODO: Either prove that what we do is sufficient, or make + // it so. + + Ok(Self { + modulus: p, + exponent: dP, + }) + } +} + +fn elem_exp_consttime( + c: &bigint::Elem, + p: &PrivatePrime, +) -> Result, error::Unspecified> +where + M: bigint::NotMuchSmallerModulus, + M: Prime, +{ + let c_mod_m = bigint::elem_reduced(c, &p.modulus); + // We could precompute `oneRRR = elem_squared(&p.oneRR`) as mentioned + // in the Smooth CRT-RSA paper. + let c_mod_m = bigint::elem_mul(p.modulus.oneRR().as_ref(), c_mod_m, &p.modulus); + let c_mod_m = bigint::elem_mul(p.modulus.oneRR().as_ref(), c_mod_m, &p.modulus); + bigint::elem_exp_consttime(c_mod_m, &p.exponent, &p.modulus) +} + +// Type-level representations of the different moduli used in RSA signing, in +// addition to `super::N`. See `super::bigint`'s modulue-level documentation. + +#[derive(Copy, Clone)] +enum P {} +unsafe impl Prime for P {} +unsafe impl bigint::SmallerModulus for P {} +unsafe impl bigint::NotMuchSmallerModulus for P {} + +#[derive(Copy, Clone)] +enum QQ {} +unsafe impl bigint::SmallerModulus for QQ {} +unsafe impl bigint::NotMuchSmallerModulus for QQ {} + +// `q < p < 2*q` since `q` is slightly smaller than `p` (see below). Thus: +// +// q < p < 2*q +// q*q < p*q < 2*q*q. +// q**2 < n < 2*(q**2). +unsafe impl bigint::SlightlySmallerModulus for QQ {} + +#[derive(Copy, Clone)] +enum Q {} +unsafe impl Prime for Q {} +unsafe impl bigint::SmallerModulus for Q {} +unsafe impl bigint::SmallerModulus

for Q {} + +// q < p && `p.bit_length() == q.bit_length()` implies `q < p < 2*q`. +unsafe impl bigint::SlightlySmallerModulus

for Q {} + +unsafe impl bigint::SmallerModulus for Q {} +unsafe impl bigint::NotMuchSmallerModulus for Q {} + +impl RsaKeyPair { + /// Sign `msg`. `msg` is digested using the digest algorithm from + /// `padding_alg` and the digest is then padded using the padding algorithm + /// from `padding_alg`. The signature it written into `signature`; + /// `signature`'s length must be exactly the length returned by + /// `public_modulus_len()`. `rng` may be used to randomize the padding + /// (e.g. for PSS). + /// + /// Many other crypto libraries have signing functions that takes a + /// precomputed digest as input, instead of the message to digest. This + /// function does *not* take a precomputed digest; instead, `sign` + /// calculates the digest itself. + /// + /// Lots of effort has been made to make the signing operations close to + /// constant time to protect the private key from side channel attacks. On + /// x86-64, this is done pretty well, but not perfectly. On other + /// platforms, it is done less perfectly. + pub fn sign( + &self, + padding_alg: &'static dyn RsaEncoding, + rng: &dyn rand::SecureRandom, + msg: &[u8], + signature: &mut [u8], + ) -> Result<(), error::Unspecified> { + let mod_bits = self.public.n_bits; + if signature.len() != mod_bits.as_usize_bytes_rounded_up() { + return Err(error::Unspecified); + } + + let m_hash = digest::digest(padding_alg.digest_alg(), msg); + padding_alg.encode(&m_hash, signature, mod_bits, rng)?; + + // RFC 8017 Section 5.1.2: RSADP, using the Chinese Remainder Theorem + // with Garner's algorithm. + + let n = &self.public.n; + + // Step 1. The value zero is also rejected. + let base = bigint::Elem::from_be_bytes_padded(untrusted::Input::from(signature), n)?; + + // Step 2 + let c = base; + + // Step 2.b.i. + let m_1 = elem_exp_consttime(&c, &self.p)?; + let c_mod_qq = bigint::elem_reduced_once(&c, &self.qq); + let m_2 = elem_exp_consttime(&c_mod_qq, &self.q)?; + + // Step 2.b.ii isn't needed since there are only two primes. + + // Step 2.b.iii. + let p = &self.p.modulus; + let m_2 = bigint::elem_widen(m_2, p); + let m_1_minus_m_2 = bigint::elem_sub(m_1, &m_2, p); + let h = bigint::elem_mul(&self.qInv, m_1_minus_m_2, p); + + // Step 2.b.iv. The reduction in the modular multiplication isn't + // necessary because `h < p` and `p * q == n` implies `h * q < n`. + // Modular arithmetic is used simply to avoid implementing + // non-modular arithmetic. + let h = bigint::elem_widen(h, n); + let q_times_h = bigint::elem_mul(&self.q_mod_n, h, n); + let m_2 = bigint::elem_widen(m_2, n); + let m = bigint::elem_add(m_2, q_times_h, n); + + // Step 2.b.v isn't needed since there are only two primes. + + // Verify the result to protect against fault attacks as described + // in "On the Importance of Checking Cryptographic Protocols for + // Faults" by Dan Boneh, Richard A. DeMillo, and Richard J. Lipton. + // This check is cheap assuming `e` is small, which is ensured during + // `KeyPair` construction. Note that this is the only validation of `e` + // that is done other than basic checks on its size, oddness, and + // minimum value, since the relationship of `e` to `d`, `p`, and `q` is + // not verified during `KeyPair` construction. + { + let verify = bigint::elem_exp_vartime(m.clone(), self.public.e, n); + let verify = verify.into_unencoded(n); + bigint::elem_verify_equal_consttime(&verify, &c)?; + } + + // Step 3. + // + // See Falko Strenzke, "Manger's Attack revisited", ICICS 2010. + m.fill_be_bytes(signature); + + Ok(()) + } +} + +#[cfg(test)] +mod tests { + // We intentionally avoid `use super::*` so that we are sure to use only + // the public API; this ensures that enough of the API is public. + use crate::{rand, signature}; + use alloc::vec; + + // `KeyPair::sign` requires that the output buffer is the same length as + // the public key modulus. Test what happens when it isn't the same length. + #[test] + fn test_signature_rsa_pkcs1_sign_output_buffer_len() { + // Sign the message "hello, world", using PKCS#1 v1.5 padding and the + // SHA256 digest algorithm. + const MESSAGE: &[u8] = b"hello, world"; + let rng = rand::SystemRandom::new(); + + const PRIVATE_KEY_DER: &[u8] = include_bytes!("signature_rsa_example_private_key.der"); + let key_pair = signature::RsaKeyPair::from_der(PRIVATE_KEY_DER).unwrap(); + + // The output buffer is one byte too short. + let mut signature = vec![0; key_pair.public_modulus_len() - 1]; + + assert!(key_pair + .sign(&signature::RSA_PKCS1_SHA256, &rng, MESSAGE, &mut signature) + .is_err()); + + // The output buffer is the right length. + signature.push(0); + assert!(key_pair + .sign(&signature::RSA_PKCS1_SHA256, &rng, MESSAGE, &mut signature) + .is_ok()); + + // The output buffer is one byte too long. + signature.push(0); + assert!(key_pair + .sign(&signature::RSA_PKCS1_SHA256, &rng, MESSAGE, &mut signature) + .is_err()); + } +} diff --git a/vendor/ring/src/rsa/verification.rs b/vendor/ring/src/rsa/verification.rs new file mode 100644 index 00000000..f898f211 --- /dev/null +++ b/vendor/ring/src/rsa/verification.rs @@ -0,0 +1,337 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Verification of RSA signatures. + +use super::{parse_public_key, RsaParameters, N, PUBLIC_KEY_PUBLIC_MODULUS_MAX_LEN}; +use crate::{ + arithmetic::{bigint, montgomery::Unencoded}, + bits, cpu, digest, error, + limb::LIMB_BYTES, + sealed, signature, +}; + +#[derive(Debug)] +pub struct Key { + pub n: bigint::Modulus, + pub e: bigint::PublicExponent, + pub n_bits: bits::BitLength, +} + +impl Key { + pub fn from_modulus_and_exponent( + n: untrusted::Input, + e: untrusted::Input, + n_min_bits: bits::BitLength, + n_max_bits: bits::BitLength, + e_min_value: u64, + ) -> Result { + // This is an incomplete implementation of NIST SP800-56Br1 Section + // 6.4.2.2, "Partial Public-Key Validation for RSA." That spec defers + // to NIST SP800-89 Section 5.3.3, "(Explicit) Partial Public Key + // Validation for RSA," "with the caveat that the length of the modulus + // shall be a length that is specified in this Recommendation." In + // SP800-89, two different sets of steps are given, one set numbered, + // and one set lettered. TODO: Document this in the end-user + // documentation for RSA keys. + + // Step 3 / Step c for `n` (out of order). + let (n, n_bits) = bigint::Modulus::from_be_bytes_with_bit_length(n)?; + + // `pkcs1_encode` depends on this not being small. Otherwise, + // `pkcs1_encode` would generate padding that is invalid (too few 0xFF + // bytes) for very small keys. + const N_MIN_BITS: bits::BitLength = bits::BitLength::from_usize_bits(1024); + + // Step 1 / Step a. XXX: SP800-56Br1 and SP800-89 require the length of + // the public modulus to be exactly 2048 or 3072 bits, but we are more + // flexible to be compatible with other commonly-used crypto libraries. + assert!(n_min_bits >= N_MIN_BITS); + let n_bits_rounded_up = + bits::BitLength::from_usize_bytes(n_bits.as_usize_bytes_rounded_up()) + .map_err(|error::Unspecified| error::KeyRejected::unexpected_error())?; + if n_bits_rounded_up < n_min_bits { + return Err(error::KeyRejected::too_small()); + } + if n_bits > n_max_bits { + return Err(error::KeyRejected::too_large()); + } + + // Step 2 / Step b. + // Step 3 / Step c for `e`. + let e = bigint::PublicExponent::from_be_bytes(e, e_min_value)?; + + // If `n` is less than `e` then somebody has probably accidentally swapped + // them. The largest acceptable `e` is smaller than the smallest acceptable + // `n`, so no additional checks need to be done. + + // XXX: Steps 4 & 5 / Steps d, e, & f are not implemented. This is also the + // case in most other commonly-used crypto libraries. + + Ok(Self { n, e, n_bits }) + } +} + +impl signature::VerificationAlgorithm for RsaParameters { + fn verify( + &self, + public_key: untrusted::Input, + msg: untrusted::Input, + signature: untrusted::Input, + ) -> Result<(), error::Unspecified> { + let (n, e) = parse_public_key(public_key)?; + verify_rsa_( + self, + ( + n.big_endian_without_leading_zero_as_input(), + e.big_endian_without_leading_zero_as_input(), + ), + msg, + signature, + ) + } +} + +impl sealed::Sealed for RsaParameters {} + +macro_rules! rsa_params { + ( $VERIFY_ALGORITHM:ident, $min_bits:expr, $PADDING_ALGORITHM:expr, + $doc_str:expr ) => { + #[doc=$doc_str] + /// + /// Only available in `alloc` mode. + pub static $VERIFY_ALGORITHM: RsaParameters = RsaParameters { + padding_alg: $PADDING_ALGORITHM, + min_bits: bits::BitLength::from_usize_bits($min_bits), + }; + }; +} + +rsa_params!( + RSA_PKCS1_1024_8192_SHA1_FOR_LEGACY_USE_ONLY, + 1024, + &super::padding::RSA_PKCS1_SHA1_FOR_LEGACY_USE_ONLY, + "Verification of signatures using RSA keys of 1024-8192 bits, + PKCS#1.5 padding, and SHA-1.\n\nSee \"`RSA_PKCS1_*` Details\" in + `ring::signature`'s module-level documentation for more details." +); +rsa_params!( + RSA_PKCS1_2048_8192_SHA1_FOR_LEGACY_USE_ONLY, + 2048, + &super::padding::RSA_PKCS1_SHA1_FOR_LEGACY_USE_ONLY, + "Verification of signatures using RSA keys of 2048-8192 bits, + PKCS#1.5 padding, and SHA-1.\n\nSee \"`RSA_PKCS1_*` Details\" in + `ring::signature`'s module-level documentation for more details." +); +rsa_params!( + RSA_PKCS1_1024_8192_SHA256_FOR_LEGACY_USE_ONLY, + 1024, + &super::RSA_PKCS1_SHA256, + "Verification of signatures using RSA keys of 1024-8192 bits, + PKCS#1.5 padding, and SHA-256.\n\nSee \"`RSA_PKCS1_*` Details\" in + `ring::signature`'s module-level documentation for more details." +); +rsa_params!( + RSA_PKCS1_2048_8192_SHA256, + 2048, + &super::RSA_PKCS1_SHA256, + "Verification of signatures using RSA keys of 2048-8192 bits, + PKCS#1.5 padding, and SHA-256.\n\nSee \"`RSA_PKCS1_*` Details\" in + `ring::signature`'s module-level documentation for more details." +); +rsa_params!( + RSA_PKCS1_2048_8192_SHA384, + 2048, + &super::RSA_PKCS1_SHA384, + "Verification of signatures using RSA keys of 2048-8192 bits, + PKCS#1.5 padding, and SHA-384.\n\nSee \"`RSA_PKCS1_*` Details\" in + `ring::signature`'s module-level documentation for more details." +); +rsa_params!( + RSA_PKCS1_2048_8192_SHA512, + 2048, + &super::RSA_PKCS1_SHA512, + "Verification of signatures using RSA keys of 2048-8192 bits, + PKCS#1.5 padding, and SHA-512.\n\nSee \"`RSA_PKCS1_*` Details\" in + `ring::signature`'s module-level documentation for more details." +); +rsa_params!( + RSA_PKCS1_1024_8192_SHA512_FOR_LEGACY_USE_ONLY, + 1024, + &super::RSA_PKCS1_SHA512, + "Verification of signatures using RSA keys of 1024-8192 bits, + PKCS#1.5 padding, and SHA-512.\n\nSee \"`RSA_PKCS1_*` Details\" in + `ring::signature`'s module-level documentation for more details." +); +rsa_params!( + RSA_PKCS1_3072_8192_SHA384, + 3072, + &super::RSA_PKCS1_SHA384, + "Verification of signatures using RSA keys of 3072-8192 bits, + PKCS#1.5 padding, and SHA-384.\n\nSee \"`RSA_PKCS1_*` Details\" in + `ring::signature`'s module-level documentation for more details." +); + +rsa_params!( + RSA_PSS_2048_8192_SHA256, + 2048, + &super::RSA_PSS_SHA256, + "Verification of signatures using RSA keys of 2048-8192 bits, + PSS padding, and SHA-256.\n\nSee \"`RSA_PSS_*` Details\" in + `ring::signature`'s module-level documentation for more details." +); +rsa_params!( + RSA_PSS_2048_8192_SHA384, + 2048, + &super::RSA_PSS_SHA384, + "Verification of signatures using RSA keys of 2048-8192 bits, + PSS padding, and SHA-384.\n\nSee \"`RSA_PSS_*` Details\" in + `ring::signature`'s module-level documentation for more details." +); +rsa_params!( + RSA_PSS_2048_8192_SHA512, + 2048, + &super::RSA_PSS_SHA512, + "Verification of signatures using RSA keys of 2048-8192 bits, + PSS padding, and SHA-512.\n\nSee \"`RSA_PSS_*` Details\" in + `ring::signature`'s module-level documentation for more details." +); + +/// Low-level API for the verification of RSA signatures. +/// +/// When the public key is in DER-encoded PKCS#1 ASN.1 format, it is +/// recommended to use `ring::signature::verify()` with +/// `ring::signature::RSA_PKCS1_*`, because `ring::signature::verify()` +/// will handle the parsing in that case. Otherwise, this function can be used +/// to pass in the raw bytes for the public key components as +/// `untrusted::Input` arguments. +// +// There are a small number of tests that test this directly, but the +// test coverage for this function mostly depends on the test coverage for the +// `signature::VerificationAlgorithm` implementation for `RsaParameters`. If we +// change that, test coverage for `verify_rsa()` will need to be reconsidered. +// (The NIST test vectors were originally in a form that was optimized for +// testing `verify_rsa` directly, but the testing work for RSA PKCS#1 +// verification was done during the implementation of +// `signature::VerificationAlgorithm`, before `verify_rsa` was factored out). +#[derive(Debug)] +pub struct RsaPublicKeyComponents + core::fmt::Debug> { + /// The public modulus, encoded in big-endian bytes without leading zeros. + pub n: B, + + /// The public exponent, encoded in big-endian bytes without leading zeros. + pub e: B, +} + +impl Copy for RsaPublicKeyComponents where B: AsRef<[u8]> + core::fmt::Debug {} + +impl Clone for RsaPublicKeyComponents +where + B: AsRef<[u8]> + core::fmt::Debug, +{ + fn clone(&self) -> Self { + Self { + n: self.n.clone(), + e: self.e.clone(), + } + } +} + +impl RsaPublicKeyComponents +where + B: AsRef<[u8]> + core::fmt::Debug, +{ + /// Verifies that `signature` is a valid signature of `message` using `self` + /// as the public key. `params` determine what algorithm parameters + /// (padding, digest algorithm, key length range, etc.) are used in the + /// verification. + pub fn verify( + &self, + params: &RsaParameters, + message: &[u8], + signature: &[u8], + ) -> Result<(), error::Unspecified> { + let _ = cpu::features(); + verify_rsa_( + params, + ( + untrusted::Input::from(self.n.as_ref()), + untrusted::Input::from(self.e.as_ref()), + ), + untrusted::Input::from(message), + untrusted::Input::from(signature), + ) + } +} + +pub(crate) fn verify_rsa_( + params: &RsaParameters, + (n, e): (untrusted::Input, untrusted::Input), + msg: untrusted::Input, + signature: untrusted::Input, +) -> Result<(), error::Unspecified> { + let max_bits = bits::BitLength::from_usize_bytes(PUBLIC_KEY_PUBLIC_MODULUS_MAX_LEN)?; + + // XXX: FIPS 186-4 seems to indicate that the minimum + // exponent value is 2**16 + 1, but it isn't clear if this is just for + // signing or also for verification. We support exponents of 3 and larger + // for compatibility with other commonly-used crypto libraries. + let Key { n, e, n_bits } = Key::from_modulus_and_exponent(n, e, params.min_bits, max_bits, 3)?; + + // The signature must be the same length as the modulus, in bytes. + if signature.len() != n_bits.as_usize_bytes_rounded_up() { + return Err(error::Unspecified); + } + + // RFC 8017 Section 5.2.2: RSAVP1. + + // Step 1. + let s = bigint::Elem::from_be_bytes_padded(signature, &n)?; + if s.is_zero() { + return Err(error::Unspecified); + } + + // Step 2. + let m = bigint::elem_exp_vartime(s, e, &n); + let m = m.into_unencoded(&n); + + // Step 3. + let mut decoded = [0u8; PUBLIC_KEY_PUBLIC_MODULUS_MAX_LEN]; + let decoded = fill_be_bytes_n(m, n_bits, &mut decoded); + + // Verify the padded message is correct. + let m_hash = digest::digest(params.padding_alg.digest_alg(), msg.as_slice_less_safe()); + untrusted::Input::from(decoded).read_all(error::Unspecified, |m| { + params.padding_alg.verify(&m_hash, m, n_bits) + }) +} + +/// Returns the big-endian representation of `elem` that is +/// the same length as the minimal-length big-endian representation of +/// the modulus `n`. +/// +/// `n_bits` must be the bit length of the public modulus `n`. +fn fill_be_bytes_n( + elem: bigint::Elem, + n_bits: bits::BitLength, + out: &mut [u8; PUBLIC_KEY_PUBLIC_MODULUS_MAX_LEN], +) -> &[u8] { + let n_bytes = n_bits.as_usize_bytes_rounded_up(); + let n_bytes_padded = ((n_bytes + (LIMB_BYTES - 1)) / LIMB_BYTES) * LIMB_BYTES; + let out = &mut out[..n_bytes_padded]; + elem.fill_be_bytes(out); + let (padding, out) = out.split_at(n_bytes_padded - n_bytes); + assert!(padding.iter().all(|&b| b == 0)); + out +} diff --git a/vendor/ring/src/signature.rs b/vendor/ring/src/signature.rs new file mode 100644 index 00000000..bef92dc4 --- /dev/null +++ b/vendor/ring/src/signature.rs @@ -0,0 +1,406 @@ +// Copyright 2015-2017 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Public key signatures: signing and verification. +//! +//! Use the `verify` function to verify signatures, passing a reference to the +//! algorithm that identifies the algorithm. See the documentation for `verify` +//! for examples. +//! +//! For signature verification, this API treats each combination of parameters +//! as a separate algorithm. For example, instead of having a single "RSA" +//! algorithm with a verification function that takes a bunch of parameters, +//! there are `RSA_PKCS1_2048_8192_SHA256`, `RSA_PKCS1_2048_8192_SHA384`, etc., +//! which encode sets of parameter choices into objects. This is designed to +//! reduce the risks of algorithm agility and to provide consistency with ECDSA +//! and EdDSA. +//! +//! Currently this module does not support digesting the message to be signed +//! separately from the public key operation, as it is currently being +//! optimized for Ed25519 and for the implementation of protocols that do not +//! requiring signing large messages. An interface for efficiently supporting +//! larger messages may be added later. +//! +//! +//! # Algorithm Details +//! +//! ## `ECDSA_*_ASN1` Details: ASN.1-encoded ECDSA Signatures +//! +//! The signature is a ASN.1 DER-encoded `Ecdsa-Sig-Value` as described in +//! [RFC 3279 Section 2.2.3]. This is the form of ECDSA signature used in +//! X.509-related structures and in TLS's `ServerKeyExchange` messages. +//! +//! The public key is encoding in uncompressed form using the +//! Octet-String-to-Elliptic-Curve-Point algorithm in +//! [SEC 1: Elliptic Curve Cryptography, Version 2.0]. +//! +//! During verification, the public key is validated using the ECC Partial +//! Public-Key Validation Routine from Section 5.6.2.3.3 of +//! [NIST Special Publication 800-56A, revision 2] and Appendix A.3 of the +//! NSA's [Suite B implementer's guide to FIPS 186-3]. Note that, as explained +//! in the NSA guide, ECC Partial Public-Key Validation is equivalent to ECC +//! Full Public-Key Validation for prime-order curves like this one. +//! +//! ## `ECDSA_*_FIXED` Details: Fixed-length (PKCS#11-style) ECDSA Signatures +//! +//! The signature is *r*||*s*, where || denotes concatenation, and where both +//! *r* and *s* are both big-endian-encoded values that are left-padded to the +//! maximum length. A P-256 signature will be 64 bytes long (two 32-byte +//! components) and a P-384 signature will be 96 bytes long (two 48-byte +//! components). This is the form of ECDSA signature used PKCS#11 and DNSSEC. +//! +//! The public key is encoding in uncompressed form using the +//! Octet-String-to-Elliptic-Curve-Point algorithm in +//! [SEC 1: Elliptic Curve Cryptography, Version 2.0]. +//! +//! During verification, the public key is validated using the ECC Partial +//! Public-Key Validation Routine from Section 5.6.2.3.3 of +//! [NIST Special Publication 800-56A, revision 2] and Appendix A.3 of the +//! NSA's [Suite B implementer's guide to FIPS 186-3]. Note that, as explained +//! in the NSA guide, ECC Partial Public-Key Validation is equivalent to ECC +//! Full Public-Key Validation for prime-order curves like this one. +//! +//! ## `RSA_PKCS1_*` Details: RSA PKCS#1 1.5 Signatures +//! +//! The signature is an RSASSA-PKCS1-v1_5 signature as described in +//! [RFC 3447 Section 8.2]. +//! +//! The public key is encoded as an ASN.1 `RSAPublicKey` as described in +//! [RFC 3447 Appendix-A.1.1]. The public key modulus length, rounded *up* to +//! the nearest (larger) multiple of 8 bits, must be in the range given in the +//! name of the algorithm. The public exponent must be an odd integer of 2-33 +//! bits, inclusive. +//! +//! +//! ## `RSA_PSS_*` Details: RSA PSS Signatures +//! +//! The signature is an RSASSA-PSS signature as described in +//! [RFC 3447 Section 8.1]. +//! +//! The public key is encoded as an ASN.1 `RSAPublicKey` as described in +//! [RFC 3447 Appendix-A.1.1]. The public key modulus length, rounded *up* to +//! the nearest (larger) multiple of 8 bits, must be in the range given in the +//! name of the algorithm. The public exponent must be an odd integer of 2-33 +//! bits, inclusive. +//! +//! During verification, signatures will only be accepted if the MGF1 digest +//! algorithm is the same as the message digest algorithm and if the salt +//! length is the same length as the message digest. This matches the +//! requirements in TLS 1.3 and other recent specifications. +//! +//! During signing, the message digest algorithm will be used as the MGF1 +//! digest algorithm. The salt will be the same length as the message digest. +//! This matches the requirements in TLS 1.3 and other recent specifications. +//! Additionally, the entire salt is randomly generated separately for each +//! signature using the secure random number generator passed to `sign()`. +//! +//! +//! [SEC 1: Elliptic Curve Cryptography, Version 2.0]: +//! http://www.secg.org/sec1-v2.pdf +//! [NIST Special Publication 800-56A, revision 2]: +//! http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar2.pdf +//! [Suite B implementer's guide to FIPS 186-3]: +//! https://github.com/briansmith/ring/blob/main/doc/ecdsa.pdf +//! [RFC 3279 Section 2.2.3]: +//! https://tools.ietf.org/html/rfc3279#section-2.2.3 +//! [RFC 3447 Section 8.2]: +//! https://tools.ietf.org/html/rfc3447#section-7.2 +//! [RFC 3447 Section 8.1]: +//! https://tools.ietf.org/html/rfc3447#section-8.1 +//! [RFC 3447 Appendix-A.1.1]: +//! https://tools.ietf.org/html/rfc3447#appendix-A.1.1 +//! +//! +//! # Examples +//! +//! ## Signing and verifying with Ed25519 +//! +//! ``` +//! use ring::{ +//! rand, +//! signature::{self, KeyPair}, +//! }; +//! +//! # fn main() -> Result<(), ring::error::Unspecified> { +//! // Generate a key pair in PKCS#8 (v2) format. +//! let rng = rand::SystemRandom::new(); +//! let pkcs8_bytes = signature::Ed25519KeyPair::generate_pkcs8(&rng)?; +//! +//! // Normally the application would store the PKCS#8 file persistently. Later +//! // it would read the PKCS#8 file from persistent storage to use it. +//! +//! let key_pair = signature::Ed25519KeyPair::from_pkcs8(pkcs8_bytes.as_ref())?; +//! +//! // Sign the message "hello, world". +//! const MESSAGE: &[u8] = b"hello, world"; +//! let sig = key_pair.sign(MESSAGE); +//! +//! // Normally an application would extract the bytes of the signature and +//! // send them in a protocol message to the peer(s). Here we just get the +//! // public key key directly from the key pair. +//! let peer_public_key_bytes = key_pair.public_key().as_ref(); +//! +//! // Verify the signature of the message using the public key. Normally the +//! // verifier of the message would parse the inputs to this code out of the +//! // protocol message(s) sent by the signer. +//! let peer_public_key = +//! signature::UnparsedPublicKey::new(&signature::ED25519, peer_public_key_bytes); +//! peer_public_key.verify(MESSAGE, sig.as_ref())?; +//! +//! # Ok(()) +//! # } +//! ``` +//! +//! ## Signing and verifying with RSA (PKCS#1 1.5 padding) +//! +//! By default OpenSSL writes RSA public keys in SubjectPublicKeyInfo format, +//! not RSAPublicKey format, and Base64-encodes them (“PEM†format). +//! +//! To convert the PEM SubjectPublicKeyInfo format (“BEGIN PUBLIC KEYâ€) to the +//! binary RSAPublicKey format needed by `verify()`, use: +//! +//! ```sh +//! openssl rsa -pubin \ +//! -in public_key.pem \ +//! -inform PEM \ +//! -RSAPublicKey_out \ +//! -outform DER \ +//! -out public_key.der +//! ``` +//! +//! To extract the RSAPublicKey-formatted public key from an ASN.1 (binary) +//! DER-encoded RSAPrivateKey format private key file, use: +//! +//! ```sh +//! openssl rsa -in private_key.der \ +//! -inform DER \ +//! -RSAPublicKey_out \ +//! -outform DER \ +//! -out public_key.der +//! ``` +//! +//! ``` +//! use ring::{rand, signature}; +//! +//! # #[cfg(feature = "std")] +//! fn sign_and_verify_rsa(private_key_path: &std::path::Path, +//! public_key_path: &std::path::Path) +//! -> Result<(), MyError> { +//! // Create an `RsaKeyPair` from the DER-encoded bytes. This example uses +//! // a 2048-bit key, but larger keys are also supported. +//! let private_key_der = read_file(private_key_path)?; +//! let key_pair = signature::RsaKeyPair::from_der(&private_key_der) +//! .map_err(|_| MyError::BadPrivateKey)?; +//! +//! // Sign the message "hello, world", using PKCS#1 v1.5 padding and the +//! // SHA256 digest algorithm. +//! const MESSAGE: &'static [u8] = b"hello, world"; +//! let rng = rand::SystemRandom::new(); +//! let mut signature = vec![0; key_pair.public_modulus_len()]; +//! key_pair.sign(&signature::RSA_PKCS1_SHA256, &rng, MESSAGE, &mut signature) +//! .map_err(|_| MyError::OOM)?; +//! +//! // Verify the signature. +//! let public_key = +//! signature::UnparsedPublicKey::new(&signature::RSA_PKCS1_2048_8192_SHA256, +//! read_file(public_key_path)?); +//! public_key.verify(MESSAGE, &signature) +//! .map_err(|_| MyError::BadSignature) +//! } +//! +//! #[derive(Debug)] +//! enum MyError { +//! # #[cfg(feature = "std")] +//! IO(std::io::Error), +//! BadPrivateKey, +//! OOM, +//! BadSignature, +//! } +//! +//! # #[cfg(feature = "std")] +//! fn read_file(path: &std::path::Path) -> Result, MyError> { +//! use std::io::Read; +//! +//! let mut file = std::fs::File::open(path).map_err(|e| MyError::IO(e))?; +//! let mut contents: Vec = Vec::new(); +//! file.read_to_end(&mut contents).map_err(|e| MyError::IO(e))?; +//! Ok(contents) +//! } +//! # +//! # #[cfg(not(feature = "std"))] +//! # fn sign_and_verify_rsa(_private_key_path: &std::path::Path, +//! # _public_key_path: &std::path::Path) +//! # -> Result<(), ()> { +//! # Ok(()) +//! # } +//! # +//! # fn main() { +//! # let private_key_path = +//! # std::path::Path::new("src/rsa/signature_rsa_example_private_key.der"); +//! # let public_key_path = +//! # std::path::Path::new("src/rsa/signature_rsa_example_public_key.der"); +//! # sign_and_verify_rsa(&private_key_path, &public_key_path).unwrap() +//! # } +//! ``` + +use crate::{cpu, ec, error, sealed}; + +pub use crate::ec::{ + curve25519::ed25519::{ + signing::Ed25519KeyPair, + verification::{EdDSAParameters, ED25519}, + ED25519_PUBLIC_KEY_LEN, + }, + suite_b::ecdsa::{ + signing::{ + EcdsaKeyPair, EcdsaSigningAlgorithm, ECDSA_P256_SHA256_ASN1_SIGNING, + ECDSA_P256_SHA256_FIXED_SIGNING, ECDSA_P384_SHA384_ASN1_SIGNING, + ECDSA_P384_SHA384_FIXED_SIGNING, + }, + verification::{ + EcdsaVerificationAlgorithm, ECDSA_P256_SHA256_ASN1, ECDSA_P256_SHA256_FIXED, + ECDSA_P256_SHA384_ASN1, ECDSA_P384_SHA256_ASN1, ECDSA_P384_SHA384_ASN1, + ECDSA_P384_SHA384_FIXED, + }, + }, +}; + +#[cfg(feature = "alloc")] +pub use crate::rsa::{ + signing::RsaKeyPair, + signing::RsaSubjectPublicKey, + + verification::{ + RsaPublicKeyComponents, RSA_PKCS1_1024_8192_SHA1_FOR_LEGACY_USE_ONLY, + RSA_PKCS1_1024_8192_SHA256_FOR_LEGACY_USE_ONLY, + RSA_PKCS1_1024_8192_SHA512_FOR_LEGACY_USE_ONLY, + RSA_PKCS1_2048_8192_SHA1_FOR_LEGACY_USE_ONLY, RSA_PKCS1_2048_8192_SHA256, + RSA_PKCS1_2048_8192_SHA384, RSA_PKCS1_2048_8192_SHA512, RSA_PKCS1_3072_8192_SHA384, + RSA_PSS_2048_8192_SHA256, RSA_PSS_2048_8192_SHA384, RSA_PSS_2048_8192_SHA512, + }, + + RsaEncoding, + RsaParameters, + + // `RSA_PKCS1_SHA1` is intentionally not exposed. At a minimum, we'd need + // to create test vectors for signing with it, which we don't currently + // have. But, it's a bad idea to use SHA-1 anyway, so perhaps we just won't + // ever expose it. + RSA_PKCS1_SHA256, + RSA_PKCS1_SHA384, + RSA_PKCS1_SHA512, + + RSA_PSS_SHA256, + RSA_PSS_SHA384, + RSA_PSS_SHA512, +}; + +/// A public key signature returned from a signing operation. +#[derive(Clone, Copy)] +pub struct Signature { + value: [u8; MAX_LEN], + len: usize, +} + +impl Signature { + // Panics if `value` is too long. + pub(crate) fn new(fill: F) -> Self + where + F: FnOnce(&mut [u8; MAX_LEN]) -> usize, + { + let mut r = Self { + value: [0; MAX_LEN], + len: 0, + }; + r.len = fill(&mut r.value); + r + } +} + +impl AsRef<[u8]> for Signature { + fn as_ref(&self) -> &[u8] { + &self.value[..self.len] + } +} + +/// Key pairs for signing messages (private key and public key). +pub trait KeyPair: core::fmt::Debug + Send + Sized + Sync { + /// The type of the public key. + type PublicKey: AsRef<[u8]> + core::fmt::Debug + Clone + Send + Sized + Sync; + + /// The public key for the key pair. + fn public_key(&self) -> &Self::PublicKey; +} + +/// The longest signature is an ASN.1 P-384 signature where *r* and *s* are of +/// maximum length with the leading high bit set on each. Then each component +/// will have a tag, a one-byte length, and a one-byte “I'm not negative†+/// prefix, and the outer sequence will have a two-byte length. +pub(crate) const MAX_LEN: usize = 1/*tag:SEQUENCE*/ + 2/*len*/ + + (2 * (1/*tag:INTEGER*/ + 1/*len*/ + 1/*zero*/ + ec::SCALAR_MAX_BYTES)); + +/// A signature verification algorithm. +pub trait VerificationAlgorithm: core::fmt::Debug + Sync + sealed::Sealed { + /// Verify the signature `signature` of message `msg` with the public key + /// `public_key`. + fn verify( + &self, + public_key: untrusted::Input, + msg: untrusted::Input, + signature: untrusted::Input, + ) -> Result<(), error::Unspecified>; +} + +/// An unparsed, possibly malformed, public key for signature verification. +pub struct UnparsedPublicKey> { + algorithm: &'static dyn VerificationAlgorithm, + bytes: B, +} + +impl Copy for UnparsedPublicKey where B: AsRef<[u8]> {} + +impl Clone for UnparsedPublicKey +where + B: AsRef<[u8]>, +{ + fn clone(&self) -> Self { + Self { + algorithm: self.algorithm, + bytes: self.bytes.clone(), + } + } +} + +impl> UnparsedPublicKey { + /// Construct a new `UnparsedPublicKey`. + /// + /// No validation of `bytes` is done until `verify()` is called. + #[inline] + pub fn new(algorithm: &'static dyn VerificationAlgorithm, bytes: B) -> Self { + Self { algorithm, bytes } + } + + /// Parses the public key and verifies `signature` is a valid signature of + /// `message` using it. + /// + /// See the [crate::signature] module-level documentation for examples. + pub fn verify(&self, message: &[u8], signature: &[u8]) -> Result<(), error::Unspecified> { + let _ = cpu::features(); + self.algorithm.verify( + untrusted::Input::from(self.bytes.as_ref()), + untrusted::Input::from(message), + untrusted::Input::from(signature), + ) + } +} diff --git a/vendor/ring/src/test.rs b/vendor/ring/src/test.rs new file mode 100644 index 00000000..a55f7b76 --- /dev/null +++ b/vendor/ring/src/test.rs @@ -0,0 +1,644 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Testing framework. +//! +//! Unlike the rest of *ring*, this testing framework uses panics pretty +//! liberally. It was originally designed for internal use--it drives most of +//! *ring*'s internal tests, and so it is optimized for getting *ring*'s tests +//! written quickly at the expense of some usability. The documentation is +//! lacking. The best way to learn it is to look at some examples. The digest +//! tests are the most complicated because they use named sections. Other tests +//! avoid named sections and so are easier to understand. +//! +//! # Examples +//! +//! ## Writing Tests +//! +//! Input files look like this: +//! +//! ```text +//! # This is a comment. +//! +//! HMAC = SHA1 +//! Input = "My test data" +//! Key = "" +//! Output = 61afdecb95429ef494d61fdee15990cabf0826fc +//! +//! HMAC = SHA256 +//! Input = "Sample message for keylen +//! at C:\Users\Example\example\:4 +//! 9: 0x7ff65496d49c - example_test +//! at C:\Users\Example\example\src\example.rs:652 +//! 10: 0x7ff6549d192a - test::stats::Summary::new::ha139494ed2e4e01f +//! 11: 0x7ff6549d51a2 - test::stats::Summary::new::ha139494ed2e4e01f +//! 12: 0x7ff654a0a911 - _rust_maybe_catch_panic +//! 13: 0x7ff6549d56dd - test::stats::Summary::new::ha139494ed2e4e01f +//! 14: 0x7ff654a03783 - std::sys::thread::Thread::new::h2b08da6cd2517f79 +//! 15: 0x7ff968518101 - BaseThreadInitThunk +//! ``` +//! +//! Notice that the output shows the name of the data file +//! (`src/example_tests.txt`), the test inputs that led to the failure, and the +//! stack trace to the line in the test code that panicked: entry 9 in the +//! stack trace pointing to line 652 of the file `example.rs`. + +#[cfg(feature = "alloc")] +use alloc::{format, string::String, vec::Vec}; + +#[cfg(feature = "alloc")] +use crate::{bits, digest, error}; + +#[cfg(any(feature = "std", feature = "test_logging"))] +extern crate std; + +/// `compile_time_assert_clone::();` fails to compile if `T` doesn't +/// implement `Clone`. +pub fn compile_time_assert_clone() {} + +/// `compile_time_assert_copy::();` fails to compile if `T` doesn't +/// implement `Copy`. +pub fn compile_time_assert_copy() {} + +/// `compile_time_assert_eq::();` fails to compile if `T` doesn't +/// implement `Eq`. +pub fn compile_time_assert_eq() {} + +/// `compile_time_assert_send::();` fails to compile if `T` doesn't +/// implement `Send`. +pub fn compile_time_assert_send() {} + +/// `compile_time_assert_sync::();` fails to compile if `T` doesn't +/// implement `Sync`. +pub fn compile_time_assert_sync() {} + +/// `compile_time_assert_std_error_error::();` fails to compile if `T` +/// doesn't implement `std::error::Error`. +#[cfg(feature = "std")] +pub fn compile_time_assert_std_error_error() {} + +/// A test case. A test case consists of a set of named attributes. Every +/// attribute in the test case must be consumed exactly once; this helps catch +/// typos and omissions. +/// +/// Requires the `alloc` default feature to be enabled. +#[cfg(feature = "alloc")] +#[derive(Debug)] +pub struct TestCase { + attributes: Vec<(String, String, bool)>, +} + +#[cfg(feature = "alloc")] +impl TestCase { + /// Maps the string "true" to true and the string "false" to false. + pub fn consume_bool(&mut self, key: &str) -> bool { + match self.consume_string(key).as_ref() { + "true" => true, + "false" => false, + s => panic!("Invalid bool value: {}", s), + } + } + + /// Maps the strings "SHA1", "SHA256", "SHA384", and "SHA512" to digest + /// algorithms, maps "SHA224" to `None`, and panics on other (erroneous) + /// inputs. "SHA224" is mapped to None because *ring* intentionally does + /// not support SHA224, but we need to consume test vectors from NIST that + /// have SHA224 vectors in them. + pub fn consume_digest_alg(&mut self, key: &str) -> Option<&'static digest::Algorithm> { + let name = self.consume_string(key); + match name.as_ref() { + "SHA1" => Some(&digest::SHA1_FOR_LEGACY_USE_ONLY), + "SHA224" => None, // We actively skip SHA-224 support. + "SHA256" => Some(&digest::SHA256), + "SHA384" => Some(&digest::SHA384), + "SHA512" => Some(&digest::SHA512), + "SHA512_256" => Some(&digest::SHA512_256), + _ => panic!("Unsupported digest algorithm: {}", name), + } + } + + /// Returns the value of an attribute that is encoded as a sequence of an + /// even number of hex digits, or as a double-quoted UTF-8 string. The + /// empty (zero-length) value is represented as "". + pub fn consume_bytes(&mut self, key: &str) -> Vec { + let s = self.consume_string(key); + if s.starts_with('\"') { + // The value is a quoted UTF-8 string. + + let mut bytes = Vec::with_capacity(s.as_bytes().len() - 2); + let mut s = s.as_bytes().iter().skip(1); + loop { + let b = match s.next() { + Some(b'\\') => { + match s.next() { + // We don't allow all octal escape sequences, only "\0" for null. + Some(b'0') => 0u8, + Some(b't') => b'\t', + Some(b'n') => b'\n', + // "\xHH" + Some(b'x') => { + let hi = s.next().expect("Invalid hex escape sequence in string."); + let lo = s.next().expect("Invalid hex escape sequence in string."); + if let (Ok(hi), Ok(lo)) = (from_hex_digit(*hi), from_hex_digit(*lo)) + { + (hi << 4) | lo + } else { + panic!("Invalid hex escape sequence in string."); + } + } + _ => { + panic!("Invalid hex escape sequence in string."); + } + } + } + Some(b'"') => { + if s.next().is_some() { + panic!("characters after the closing quote of a quoted string."); + } + break; + } + Some(b) => *b, + None => panic!("Missing terminating '\"' in string literal."), + }; + bytes.push(b); + } + bytes + } else { + // The value is hex encoded. + match from_hex(&s) { + Ok(s) => s, + Err(err_str) => { + panic!("{} in {}", err_str, s); + } + } + } + } + + /// Returns the value of an attribute that is an integer, in decimal + /// notation. + pub fn consume_usize(&mut self, key: &str) -> usize { + let s = self.consume_string(key); + s.parse::().unwrap() + } + + /// Returns the value of an attribute that is an integer, in decimal + /// notation, as a bit length. + #[cfg(feature = "alloc")] + pub fn consume_usize_bits(&mut self, key: &str) -> bits::BitLength { + let s = self.consume_string(key); + let bits = s.parse::().unwrap(); + bits::BitLength::from_usize_bits(bits) + } + + /// Returns the raw value of an attribute, without any unquoting or + /// other interpretation. + pub fn consume_string(&mut self, key: &str) -> String { + self.consume_optional_string(key) + .unwrap_or_else(|| panic!("No attribute named \"{}\"", key)) + } + + /// Like `consume_string()` except it returns `None` if the test case + /// doesn't have the attribute. + pub fn consume_optional_string(&mut self, key: &str) -> Option { + for (name, value, consumed) in &mut self.attributes { + if key == name { + if *consumed { + panic!("Attribute {} was already consumed", key); + } + *consumed = true; + return Some(value.clone()); + } + } + None + } +} + +/// References a test input file. +#[cfg(feature = "alloc")] +#[macro_export] +macro_rules! test_file { + ($file_name:expr) => { + crate::test::File { + file_name: $file_name, + contents: include_str!($file_name), + } + }; +} + +/// A test input file. +#[cfg(feature = "alloc")] +pub struct File<'a> { + /// The name (path) of the file. + pub file_name: &'a str, + + /// The contents of the file. + pub contents: &'a str, +} + +/// Parses test cases out of the given file, calling `f` on each vector until +/// `f` fails or until all the test vectors have been read. `f` can indicate +/// failure either by returning `Err()` or by panicking. +/// +/// Requires the `alloc` default feature to be enabled +#[cfg(feature = "alloc")] +pub fn run(test_file: File, mut f: F) +where + F: FnMut(&str, &mut TestCase) -> Result<(), error::Unspecified>, +{ + let lines = &mut test_file.contents.lines(); + + let mut current_section = String::from(""); + let mut failed = false; + + while let Some(mut test_case) = parse_test_case(&mut current_section, lines) { + let result = match f(¤t_section, &mut test_case) { + Ok(()) => { + if !test_case + .attributes + .iter() + .any(|&(_, _, consumed)| !consumed) + { + Ok(()) + } else { + failed = true; + Err("Test didn't consume all attributes.") + } + } + Err(error::Unspecified) => Err("Test returned Err(error::Unspecified)."), + }; + + if result.is_err() { + failed = true; + } + + #[cfg(feature = "test_logging")] + { + if let Err(msg) = result { + std::println!("{}: {}", test_file.file_name, msg); + + for (name, value, consumed) in test_case.attributes { + let consumed_str = if consumed { "" } else { " (unconsumed)" }; + std::println!("{}{} = {}", name, consumed_str, value); + } + }; + } + } + + if failed { + panic!("Test failed.") + } +} + +/// Decode an string of hex digits into a sequence of bytes. The input must +/// have an even number of digits. +#[cfg(feature = "alloc")] +pub fn from_hex(hex_str: &str) -> Result, String> { + if hex_str.len() % 2 != 0 { + return Err(String::from( + "Hex string does not have an even number of digits", + )); + } + + let mut result = Vec::with_capacity(hex_str.len() / 2); + for digits in hex_str.as_bytes().chunks(2) { + let hi = from_hex_digit(digits[0])?; + let lo = from_hex_digit(digits[1])?; + result.push((hi * 0x10) | lo); + } + Ok(result) +} + +#[cfg(feature = "alloc")] +fn from_hex_digit(d: u8) -> Result { + use core::ops::RangeInclusive; + const DECIMAL: (u8, RangeInclusive) = (0, b'0'..=b'9'); + const HEX_LOWER: (u8, RangeInclusive) = (10, b'a'..=b'f'); + const HEX_UPPER: (u8, RangeInclusive) = (10, b'A'..=b'F'); + for (offset, range) in &[DECIMAL, HEX_LOWER, HEX_UPPER] { + if range.contains(&d) { + return Ok(d - range.start() + offset); + } + } + Err(format!("Invalid hex digit '{}'", d as char)) +} + +#[cfg(feature = "alloc")] +fn parse_test_case( + current_section: &mut String, + lines: &mut dyn Iterator, +) -> Option { + let mut attributes = Vec::new(); + + let mut is_first_line = true; + loop { + let line = lines.next(); + + #[cfg(feature = "test_logging")] + { + if let Some(text) = &line { + std::println!("Line: {}", text); + } + } + + match line { + // If we get to EOF when we're not in the middle of a test case, + // then we're done. + None if is_first_line => { + return None; + } + + // End of the file on a non-empty test cases ends the test case. + None => { + return Some(TestCase { attributes }); + } + + // A blank line ends a test case if the test case isn't empty. + Some(ref line) if line.is_empty() => { + if !is_first_line { + return Some(TestCase { attributes }); + } + // Ignore leading blank lines. + } + + // Comments start with '#'; ignore them. + Some(ref line) if line.starts_with('#') => (), + + Some(ref line) if line.starts_with('[') => { + assert!(is_first_line); + assert!(line.ends_with(']')); + current_section.truncate(0); + current_section.push_str(line); + let _ = current_section.pop(); + let _ = current_section.remove(0); + } + + Some(ref line) => { + is_first_line = false; + + let parts: Vec<&str> = line.splitn(2, " = ").collect(); + if parts.len() != 2 { + panic!("Syntax error: Expected Key = Value."); + }; + + let key = parts[0].trim(); + let value = parts[1].trim(); + + // Don't allow the value to be ommitted. An empty value can be + // represented as an empty quoted string. + assert_ne!(value.len(), 0); + + // Checking is_none() ensures we don't accept duplicate keys. + attributes.push((String::from(key), String::from(value), false)); + } + } + } +} + +/// Deterministic implementations of `ring::rand::SecureRandom`. +/// +/// These implementations are particularly useful for testing implementations +/// of randomized algorithms & protocols using known-answer-tests where the +/// test vectors contain the random seed to use. They are also especially +/// useful for some types of fuzzing. +#[doc(hidden)] +pub mod rand { + use crate::{error, polyfill, rand}; + + /// An implementation of `SecureRandom` that always fills the output slice + /// with the given byte. + #[derive(Debug)] + pub struct FixedByteRandom { + pub byte: u8, + } + + impl rand::sealed::SecureRandom for FixedByteRandom { + fn fill_impl(&self, dest: &mut [u8]) -> Result<(), error::Unspecified> { + polyfill::slice::fill(dest, self.byte); + Ok(()) + } + } + + /// An implementation of `SecureRandom` that always fills the output slice + /// with the slice in `bytes`. The length of the slice given to `slice` + /// must match exactly. + #[derive(Debug)] + pub struct FixedSliceRandom<'a> { + pub bytes: &'a [u8], + } + + impl rand::sealed::SecureRandom for FixedSliceRandom<'_> { + fn fill_impl(&self, dest: &mut [u8]) -> Result<(), error::Unspecified> { + dest.copy_from_slice(self.bytes); + Ok(()) + } + } + + /// An implementation of `SecureRandom` where each slice in `bytes` is a + /// test vector for one call to `fill()`. *Not thread-safe.* + /// + /// The first slice in `bytes` is the output for the first call to + /// `fill()`, the second slice is the output for the second call to + /// `fill()`, etc. The output slice passed to `fill()` must have exactly + /// the length of the corresponding entry in `bytes`. `current` must be + /// initialized to zero. `fill()` must be called exactly once for each + /// entry in `bytes`. + #[derive(Debug)] + pub struct FixedSliceSequenceRandom<'a> { + /// The value. + pub bytes: &'a [&'a [u8]], + pub current: core::cell::UnsafeCell, + } + + impl rand::sealed::SecureRandom for FixedSliceSequenceRandom<'_> { + fn fill_impl(&self, dest: &mut [u8]) -> Result<(), error::Unspecified> { + let current = unsafe { *self.current.get() }; + let bytes = self.bytes[current]; + dest.copy_from_slice(bytes); + // Remember that we returned this slice and prepare to return + // the next one, if any. + unsafe { *self.current.get() += 1 }; + Ok(()) + } + } + + impl Drop for FixedSliceSequenceRandom<'_> { + fn drop(&mut self) { + // Ensure that `fill()` was called exactly the right number of + // times. + assert_eq!(unsafe { *self.current.get() }, self.bytes.len()); + } + } +} + +#[cfg(test)] +mod tests { + use crate::{error, test}; + + #[test] + fn one_ok() { + test::run(test_file!("test_1_tests.txt"), |_, test_case| { + let _ = test_case.consume_string("Key"); + Ok(()) + }); + } + + #[test] + #[should_panic(expected = "Test failed.")] + fn one_err() { + test::run(test_file!("test_1_tests.txt"), |_, test_case| { + let _ = test_case.consume_string("Key"); + Err(error::Unspecified) + }); + } + + #[test] + #[should_panic(expected = "Oh noes!")] + fn one_panics() { + test::run(test_file!("test_1_tests.txt"), |_, test_case| { + let _ = test_case.consume_string("Key"); + panic!("Oh noes!"); + }); + } + + #[test] + #[should_panic(expected = "Test failed.")] + fn first_err() { + err_one(0) + } + + #[test] + #[should_panic(expected = "Test failed.")] + fn middle_err() { + err_one(1) + } + + #[test] + #[should_panic(expected = "Test failed.")] + fn last_err() { + err_one(2) + } + + fn err_one(test_to_fail: usize) { + let mut n = 0; + test::run(test_file!("test_3_tests.txt"), |_, test_case| { + let _ = test_case.consume_string("Key"); + let result = if n != test_to_fail { + Ok(()) + } else { + Err(error::Unspecified) + }; + n += 1; + result + }); + } + + #[test] + #[should_panic(expected = "Oh Noes!")] + fn first_panic() { + panic_one(0) + } + + #[test] + #[should_panic(expected = "Oh Noes!")] + fn middle_panic() { + panic_one(1) + } + + #[test] + #[should_panic(expected = "Oh Noes!")] + fn last_panic() { + panic_one(2) + } + + fn panic_one(test_to_fail: usize) { + let mut n = 0; + test::run(test_file!("test_3_tests.txt"), |_, test_case| { + let _ = test_case.consume_string("Key"); + if n == test_to_fail { + panic!("Oh Noes!"); + }; + n += 1; + Ok(()) + }); + } + + #[test] + #[should_panic(expected = "Syntax error: Expected Key = Value.")] + fn syntax_error() { + test::run(test_file!("test_1_syntax_error_tests.txt"), |_, _| Ok(())); + } +} diff --git a/vendor/ring/src/test_1_syntax_error_tests.txt b/vendor/ring/src/test_1_syntax_error_tests.txt new file mode 100644 index 00000000..f66e0b70 --- /dev/null +++ b/vendor/ring/src/test_1_syntax_error_tests.txt @@ -0,0 +1 @@ +Key: 0 diff --git a/vendor/ring/src/test_1_tests.txt b/vendor/ring/src/test_1_tests.txt new file mode 100644 index 00000000..13d4746e --- /dev/null +++ b/vendor/ring/src/test_1_tests.txt @@ -0,0 +1,3 @@ +Key = Value + + diff --git a/vendor/ring/src/test_3_tests.txt b/vendor/ring/src/test_3_tests.txt new file mode 100644 index 00000000..353728ff --- /dev/null +++ b/vendor/ring/src/test_3_tests.txt @@ -0,0 +1,5 @@ +Key = 0 + +Key = 1 + +Key = 2 diff --git a/vendor/ring/tests/aead_aes_128_gcm_tests.txt b/vendor/ring/tests/aead_aes_128_gcm_tests.txt new file mode 100644 index 00000000..d6ac4261 --- /dev/null +++ b/vendor/ring/tests/aead_aes_128_gcm_tests.txt @@ -0,0 +1,552 @@ +# The AES-128-GCM test cases from cipher_test.txt have been merged into this +# file. + +# The test cases marked "FAILS = WRONG_NONCE_LENGTH" would succeed if nonces +# with lengths other than 96 bits were supported; i.e. those test cases +# describe valid outputs for the given inputs, and they are only rejected +# because nonces that aren't exactly 96 bits are rejected as a matter of +# policy. + + +KEY = d480429666d48b400633921c5407d1d1 +NONCE = 3388c676dc754acfa66e172a +IN = "" +AD = "" +CT = "" +TAG = 7d7daf44850921a34e636b01adeb104f + +KEY = 3881e7be1bb3bbcaff20bdb78e5d1b67 +NONCE = dcf5b7ae2d7552e2297fcfa9 +IN = 0a2714aa7d +AD = c60c64bbf7 +CT = 5626f96ecb +TAG = ff4c4f1d92b0abb1d0820833d9eb83c7 + +KEY = ea4f6f3c2fed2b9dd9708c2e721ae00f +NONCE = f975809ddb5172382745634f +IN = 8d6c08446cb10d9a2075 +AD = 5c65d4f261d2c54ffe6a +CT = 0f51f7a83c5b5aa796b9 +TAG = 70259cddfe8f9a15a5c5eb485af578fb + +KEY = cdbc90e60aab7905bdffdfd8d13c0138 +NONCE = 9d987184c4b4e873d4774931 +IN = cb75a0f9134c579bebbd27fe4a3011 +AD = 7dc79f38e1df9383e5d3a1378b56ef +CT = c6a899758b6c11208241627c8a0096 +TAG = 7525125e650d397d0e176fa21315f09a + +KEY = 819bc8d2f41996baca697441f982ad37 +NONCE = 08b7a15f388fafb16711ce19 +IN = 9b1ddd177d2842a701b794450e3c81f151f195a1 +AD = 277c372784559784b0e047c6f8b7e9efb6f7491e +CT = de9b9c8fe09f705f558c62dc6d40b75e3aa625b6 +TAG = 52e2d2f153a4235eb6fac87ff6b96926 + +KEY = 682769d52fa0bfeaebe0d0c898d3cda7 +NONCE = 6af0738b249d09547837883c +IN = 3461523cd98a6e8bdddd01150812e6c58d5cfa25d385cdbbc4 +AD = abe8302d7d5595698d9f31011c24d4d180a637597098361354 +CT = aa3ecb46b9330554b36d0cf6f6ac4cf5e27bfd5f602da1b3c9 +TAG = 0ba547961eba5c58726c418f51d31311 + +KEY = e2b30b9b040bce7902c54ca7eec00d09 +NONCE = 28ccf218e8de56ea91422a25 +IN = 483080d7e2fb42580dfb862d2d266fad9fdce7cdcdb1158d415f84b6e269 +AD = 9f06fbe67eb2ace15c8011032feeaf72fdf6d316e1e08ef4cc0a176588af +CT = 67e1980ced4cd232ce893938e40b0798b17a1692476342e520b480a18570 +TAG = 9994185d4329cfa5f4bbeb170ef3a54b + +KEY = eaafa992ef6dbcc29cc58b6b8684f7c7 +NONCE = 1ded022dbc56e9ad733e880f +IN = 900951f487221c7125aa140104b776ba77e7b656194933fa4b94a6d7f9722aad51b2fe +AD = 863ceb297cb90c445dbcf2fcffe85b71db88d8c935158f697023e2cea103ec39766679 +CT = e0b3aaa890e45f1c39ad4f13ba7592f5251d6a02ca40fe3633651b35fba74a579f48c5 +TAG = 5c95fd941b272bafbd757553f394991b + +KEY = a43859049b2702e8807ac55b0ad27b0e +NONCE = bbe8c571342cac7fcc5d66cd +IN = 8673d6ee2903265c92446ce110d5bb30aa2dd1b1ac5558029f23974acb8a2fbf4c74858fc73d6104 +AD = f77c998ad3ace0839a8657e350bed15ffbd58f152a0dc04ffc227d6beb5738ad061d0f83c2a26999 +CT = 40e201a513979b093637445275b2db5ed4cb1fa050af0e20e43b21af6bc56dec654541e55b295b72 +TAG = 41bbef45727d19ee544fba5b360312f0 + +KEY = 68fd608c8697243d30bd3f1f028c5b74 +NONCE = 319a210b33c523d8bc39fbea +IN = 2c088f38f7a58e68bdd92632da84770303cd1ff115d6364479fb0aa706571f68d51be745f5c1d1b44fa1501cd5 +AD = 1417a65249b85a918622472a49df50bdb2766aae7bc74a6230b056549851b3c2f0cef727dc805ba2160727fbb2 +CT = 9d376b147620c2ac6a5eaa8ee44f82f179f61c9bc8acdd21680a7ff03acec953437a3cc9660c7ecb1204563944 +TAG = 05a4fb5be11e3edd89e34d0b7132d0fa + +KEY = 6edd3bd2aa318f78b4a51103cb08d489 +NONCE = ef0027b144691bc9716fbeca +IN = e98f2f99680dc748fe0b57390df38a99950faaf555a888d463d005ef4e4b1c22663d3d3daa812b20ae35ac934c2e187cbba7 +AD = 97337902507391de0f15c88462aa5ffc5e4760543850719ccd8a0cfef89484d8095c23ff8c1d06eae4ff6d758c95e65cc3b5 +CT = 3c54842c2099b73daa9c3f1cb64bb913c0527955d923510f3f3046df471c1365db97333bc5a86dc7c5f23047e938fac976c0 +TAG = 375b2a25421434e5e3a021d434fb2d04 + +KEY = f70482d53d3ef70cdc3cd3c4a37aeb2b +NONCE = e69d3de363e225749cb1666f +IN = 4cb68874e69125e1a6f6e68669b48317e1b361d0f7f95ec4cf613b7da2c835832010e8f95eaef4e6800b79bd86cd7cda869d2df258c267 +AD = d72975f15721bd0957f5cb1edecaad2d1ef047afb0e779035f777f94cd7ed1bdf8ca9d4f357d2a1e195f195e7483dea1476133235f7e6b +CT = caa1e48decbda18e314057c5ec32f8733a5cf03ed0d05c3654531bf56faa70751a6c7f70fbd7d39f7e9775a772aba8fe7731cd0230beab +TAG = 47d909cbdd1c7f8b485fc3232bb7185f + +KEY = 98a12fe16a02ec2a4b3a45c82138ae82 +NONCE = 4b3404684825dfcf81966e96 +IN = 899710fc8333c0d2d87f4496436349259cf57c592e98ec1e3c54c037bc7ef24d039a8c573ec7868e8ce9610b0404ea1b553ae10cc8cec26468cc975c +AD = ea1a99cee666bf56c8c3667ef4c73c2e1e6534800d6e39a97de3bd5d39068bb3e2f74f96c03463afa18f1ee88c21209bae87f37e5d0269b68db370fe +CT = 0431b7fc4889ae401eab5edba07a60f9682fe58419d4140cbf4f20c62d79d8a3cc1f23fabead0e96e1c8c90929756ea1efab508336e1d0ed552eafd0 +TAG = 01053ceeb4f9c797eef9426930573d23 + +KEY = 6538e8c8753928960ffc9356d43306b6 +NONCE = eee386a2b1e310665e335746 +IN = a92eb9a93a90fdbb2c74dea91d273a48efe9582f8af7a4e3a377b114770a69ca45421959fcf36107815e53dc61b7bf018fc42965fb71d1eafce0961d7698fabbd4 +AD = c5e572e464718398374c8b45ff8749cd9f517bbd97767f77a96cd021176c49c0acec8b055ef761f49aa6d910375a45b2f572cd5420b99153971a682b377ac88f09 +CT = f36353de609d0b5246f64a519d89a4dfcd9d53325a2d2cf910e7692e68391b0357b056b944e0b53e41568f304bea8822f9ff7a0375a5a8087509799226862f707f +TAG = f7f9b891089d02cac1181337d95b6725 + +KEY = cabdcf541aebf917bac019f13925d267 +NONCE = 2c34c00c42dae382279d7974 +IN = 88cc1e07dfde8e08082e6766e0a88103384742af378d7b6b8a87fce036af7441c13961c25afea7f6e56193f54bee0011cb78642c3ab9e6d5b2e35833ec16cd355515af1a190f +AD = dd10e371b22e15671c31afee552bf1dea07cbbf685e2caa0e0363716a276e120c6c0eb4acb1a4d1ba73fde6615f708aaa46bc76c7ff345a4f76bda117fe56f0dc9b939040ddd +CT = 049453baf1578787d68ed5478726c0b8a636337a0b8a82b86836f91cde25e6e44c345940e819a0c505751e603cb8f8c4fe98719185562794a185e5dec415c81f2f162cdcd650 +TAG = dce7198728bfc1b5f949b9b5374199c6 + +KEY = fd1dd6a237a12d7f64f68eb96890c872 +NONCE = 459ced97ebc385ab3a8da8d5 +IN = 04a9709fdc0a4edb423fe8cf61c33a40043f1a585d5458c7512ec8e4e066a0f95e2e6609abf3c95a5d3ae2c738269533855daedd92eca20bdedbbd5677cd4eee84b7a1efae0904364f1e54 +AD = d253b829a2fbc5877b0fbe92e7b79f38886a49ca889ae72b91f2c3aebe257a3ffe0d390b5d320bea22d6a5536cd9213612f5ed6e3b0ea33ac91cfee284cb25eaaf6b85b15f7ca894317182 +CT = 4a565d3ba4f2ec461c9bd8dd0f96bc00d2a561bfb56443c8cf47681bdf1c61f55854bea060c4219696cac79c09aa9400a7e5c59c6b6ca556f38c619a662905fc5f0e8437b906af6138e3fb +TAG = be5f93201d7980af4c5bceb24ac1d238 + +KEY = b09a4d99112e1637d7f89a058988b417 +NONCE = 74348f7126c0cac836e9de5d +IN = 6b3c4cfd1eb139b62d91ed5d1d8b0f3b52278d5c48787ce46f12b9f026e3eed1bfbc8c6684c6662f06614c69440b3d7cff7c46b2e4aebaa4b5b89236a3cc75535bc600104f240d01de91e0fb3bcad02c +AD = 7883ad259fa5d856ce283419f6da371b444b9b64ea0ddb371b17ec0a9ada27b0eb61b53bd3605f21a848b1e7ed91162f3d51f25481f32d61ec902a7f2cbd6938a7ce466a37e4467e4ec2b2c82b4e66ca +CT = 5e1b783b20fd740310333eddde99a06b5740428cb1a910812219fabd394b72a22a6e3ca31df0afae0a965f0bc0ae631feeaa5ce4c9a38cd5233140b8557bde9f878e65e8932b9e3c3f6e57a73cda36cc +TAG = 784b73ee7824adf7279c0a18e46d9a2b + +KEY = 284bd8c4b5d7b16aebce1b12988fa1d3 +NONCE = 7ff05007c5d018b17562f803 +IN = 903416331583dcbd31420906c64dc76e14d0c5044d728cd9b605b531ddc350fdaadeabe67d08f0b4c7179f82a1044696716cd96459506453141e9ec3130e893d8c2ff9b8b4c241b73866ca4fc1f712d17d7a88bf4a +AD = d0a1f92f80094c1fad630ca584edd953bf44cdde404f22c8e476df8708a97a0712e7fbd8054caa7d65144d0be3b30442d0dfa5469ba720afe1d00aa6bb53c79c1c178ed42fce596eeb6c638c8a8dedf76a431976c5 +CT = 9bc3708f70a68fc16bcc33099325c821a0ae9a2fd0a6a98382fa21b42ddb3a9ac6c34a13c4805d3beb92586cdf0f4dce3885793d49abce33190685e7009a79242dd93594722a1ceaa44886371c30bcc8312fa2bf67 +TAG = 3fd8a4d760d5b878852b1ca2d34dde6e + +KEY = 6d76dd7dea607a5cf5c21cd44c21a315 +NONCE = c1d13e56b080a500f1cb80bd +IN = cb959b92e777f835afc4ae4149b190638851238b7b13c9bf65343adb3130e8ad2356101037f30997d4a5fcc0a1d6415210179fdec881236a799f6e90dd43ea3817819b432611eaafd072368b9c7036c7a88c8b7774a8ed986134 +AD = 92a2bc3b6b6ca9de0cef10d8bdeaadf6f54782cdb2b09e66cce8cb5b56895636e982f7a3c7bd9d221ade62c9ecf68bde70becf683804386606ab1c48ac764c4e11620064545c5beaa5911c118856dfc5cdb8df50052b01762c6c +CT = 522ba9bfb47efc624cd8933fc9e17784919d2b3ccfaeec46af414c1b316355f65b9f9fd7f0be6ac3064b4016e43b8fb2028459f0fa0d81fb6656be0ab8fd841d05d24682b4a57c7c59d89af384db22c2f77ce10abc4d1c352a1a +TAG = 5ea4a77381679876e0e272b53519d533 + +KEY = 1dbcbe45a47e527e3b6f9c5c9c89e675 +NONCE = 98f2da8ed8aa23e137148913 +IN = bb23b884c897103b7850b83f65b2fea85264784737d40f93ecf867bfdba1052f41f10d2c5607127da2c10c23b1fbd3a05ce378a9583b1a29c0efbf78a84b382698346e27469330a898b341ec1554d7bf408cf979d81807c0cc78260afdb214 +AD = 46f1bde51f6c97a9dae712e653fcac4da639d93a10b39350956681e121fb9ea969d9dc8ef6ddfb2203fad7ab7e3ef7b71eb90b5089844d60d666e8b55388d8afb261f92b6252f4d56240fe8c6c48bfde63e54bd994ff17e0bf9380ebfb653b +CT = 0d90e869d2f4c85b511fdf85b947ba3ab75c6b1845d8191634770413d7574a6fbd9d86897cb3d3b5d3d8e6f74fac3bd2a9b783cb16cfbec55dd7d2f7fc5c39fe85d39bf186a3fdd3564bc27d86f4019ae0cb73f5f516b602331433689c1b08 +TAG = 8777f2002d5a5214a7bd8ef5a3ccfbbb + +KEY = fe33f47136506e5cc14114eb62d26d64 +NONCE = 9534a10af0c96d8981eaf6b3 +IN = 3ca38385513eaf1fcd03ac837e4db95c0ed1a2528b7ab3ac8e09ecc95698d52b7d90bf974bf96d8f791aa595965e2527aa466fb76da53b5743eda30bb3ebd9f6a8a7721fbfe71fe637d99a7b4b622e6da89e0824ac8aea299ea15e43250d2eccb0d4d553 +AD = 50b7bd342df76bea99b2e9118a525c0f7041c7acdf4a3b17912b5cbb9650900246ed945cfc7db2b34a988af822c763451ac2e769ec67361eded9bcab37ac41f04cdb1d2471c9520a02db9673daaf07001570f9d9f4ac38f09da03ff1c56fdefe16a855ac +CT = 927fe3c924d914a7aae6695ddad54961142b7dd5ff4c0ba5ca3e0cf3d73bdb576afd59bd2b54d820d2a5da03286c124507a48008c571c28a0ce76f0ed68dbac3a61848e7e2162be8e0bee8147b9bf60da625cdab8601bfb37dfcd165f533e94a32c26952 +TAG = 9bd47a4a2acaf865a8a260179aabf8ad + +KEY = dec1b34b7b81fb19586c6ec948ecf462 +NONCE = d9faf07e72e3c39a0165fecd +IN = f7b0bbe9f0ff4dcf162792e9ee14d1ed286114f411c834ad06b143cadbbe10a6fbc86f6664e0e07ff7c6876d4543e5b01ff5ddb629f896c30c8cefd56c15d9f24dfd2ed590304a6aae24caac5870ddafc0e672ac3aacae1867891942998c712d45efbfa4d99a8a6f03 +AD = d3c4fc4838cb3cda3937455229ddaf1cb9102e815cb9f519a5434677c68b11a0bae1280faee82f1a5bee593e669e6f81d5ece3675b8af63f1491bb298531aacc940f53678ba56ae96fc66be92b904bc35f2d5b68b3ed98569a4d04e8f8a9689ad9fa4b51db0938a9f3 +CT = 2f44ecf549077b98ba551819538097bb80304a55c48ef853e20ed8c3f808dc8cb5eb41c2463d19fed2606b59cee4b458958ea75715f7654146df4519dc63524a0569a00d7bbc4b32a372f82d955be5f190d09d35c267da1017e8b16096ae84f8a671b45aaf0d1ca59c +TAG = bc3af80cf9388d35deadecff5455d515 + +KEY = 021add6030bd9f3fed8b0d1f16f83783 +NONCE = 4e460f51fe6b5eb9558c4571 +IN = d9aa1d0db5de536cfbacb59bb75c592ae3f34a5f9c5ff4f22d14e8e4bd0754af19570221893797f60c89a251cd6a19c2953662dca51264afc21099ed5c80077b0e10a5295b3c4c6fe47d3c1c84fee69ebf7d8a7d9b1b338dae162e657e6cf5277ca70d47b9290aa7efe67b0ce574 +AD = 38d99cfd7578d40ffa1749d5fe83500362ceee76c5af38935806837b2f2d1b3422a5057bf617b07868dd95d8e5f4a24e74f96177d53a0275450b429a2b1f364805030765e376151ae35001d6a4872200142fdce82017f3e976ab0edac1a08d2649d297648320e7dd9143b554fa3d +CT = 8863ad51578fd1c9dc40702e34236adee885955f0478ad9a094a6941f95f900e466882dcd5b86e1563ba89aa105f56f3ba5ed860ec3338ee1b750a2f9332acb3f0f61718de7e40fb80442d046b35f147f178bd05362f0559a20a53ebbf78e920fe14c9d80d1c9fb21bee152f8ab2 +TAG = 614539247fdcf1a2aa851102d25bb3bc + +KEY = 311c2045d5486bfadd698e5e14faa58a +NONCE = f1cd8b373cec6451ae405618 +IN = bd154e428369aac5c13128d29bd3031364939abd071c34bacac6ea7292b657b794b2e717d9bcb5d7d01496d805283fffd8f7de6a3493ddd8d1dd7f58835a44d43ea22d95468d1239ca5567d6c80bdf432fce2afc544a731a2852ef733667b9f8f4f8923eaa9de3aa32addddf99b607efce966f +AD = f70cb7e67b2842207df55fc7582013bbddff8c7f3bd9ebbaf43827aa40f8490e65397934ee6a412de6272cd568566ea172789a006a92e5920140ca5f93f292b47dc262cefc66b75543f94365c08795b7c5e9c6c29b7dc67b2532fbf8a6487d40a3eff504e75c3f2bb2cc3969621028e2112e67 +CT = f88f4ef0431d0f23911aaa38a4022e700d3a33c31e0c7bdebe00f62ca3b55d358385de25ceb0538242871eb9c24530e557d7981fa0182436e1e49272d52689541f09517fd147a8da0f0d2bb32d54911a36eded0b87bcba54d6842edf461b45839df1cab5176e2c82c871b3be4ec1bced67ec5d +TAG = ae8d847f106e914ffadbdfe7cb57beba + +KEY = ceab57de6220b2c80e67f0c088e97b36 +NONCE = 8cf438aeb0cb29dd67506b9c +IN = ce2a7a5663449cf6e0068085e3c373c5ca6f027544e327bbc09ac00f1571268bee186d51a00bbc16da7429e4d3d5235d8d54ac96b6ecb2fb7d77a6e5b9e70d431dd4dce78ceb972e9e4b63059e350efaff841c2c42bc29c139b7fd070097556b6281b58e074d5271d9f66c6744ec6dd3b9db2f4a21aeeb7d +AD = 03e464d111ac9228d39d22a00120c6ee671fe5bbf462b1ee3fdf348b34999518998ac4e175ed48189c29b49b5527c27c43094eecbeaeacd3cdb48cd15aa82573e884a7b97bbcdad610a6955f7d8b04f6f98a13a907bc2bec4c940b77582b248f5fced1771f810977b2d0a4fa48bd4d78e4bc383bb92743fd +CT = 1fa9c379c78b92fa3c1e478443ae38d7b4b50235448ce2a88467514bc9db95844ec1baf4dbdbd1b0720e377d05d82c3b58b52af8c9c50417b39ad225e373c7ff18ac5a6ea5d182b255f1c8a2766e31e3e4e3d55dc08dfc64b818ead40a0e824b06ab24f0dc9f4f0c383db7cd4d40016b31701bb401b126dd +TAG = a9a885578467430504731d1a8f537e3c + +KEY = 585bbac0ab4508afb8b72d84167551aa +NONCE = 774c82af194277a5506e45ba +IN = d788112213d2b8b5b66b056e8b3e344a7876f6193b59a480c51fc04d3ec2e5166344c833187b14117276fd671a20937a4553181c29d3d85afe385dd86093708226f082a2ea4ec3288f372c772ca7ceae86b746ff428e8add17b0f34f8553e3db63f55224c39edf41f138a2c28be49d56aa8b4c93502b9794a16310f78b +AD = a29665261a8eb58c88803bcf623dd1a14e76af49ec5db72a267f2ebcbc479385fb6b32bafcb1239515d74a8282b228e83daf282d1ab228099b315bbed0f0e6b3427e029cc28c025460a8bf0914bd584c13e7de7830ab77fb4a9258dfdc9fdaa96ca941546477f04cea19a365a27de34e23e154e7419aefb0be0e871bbe +CT = 24f2856e4e40c0b2b8b47e43d94c1faba498884f59d2ae1cdf58c73770279c96feeee3025ec698cd8f0ae25bf0c9fbf2b350674c317e52bad50aa6ed9845e194f294eb71ff192604af50ac7192f308583a3edaf6c7aeb588990be81b801dc916ffd621dd4016e2b76e9078c89fac9da39f3a88f6548006a48b0199a732 +TAG = a5c8f9daa30b045bd3e1c1b01f438518 + +KEY = c5d727d159dd328b4160ff45a183226b +NONCE = 881c0802db519ce1595573ff +IN = 88b4be77bb8a2f37bc5e84ef9da92a4b8c3777dbcccfed13b97e93c19674c8c3f13119363ace377a14e5f36501ba9a3898fc09340886d91bf0a17ef0d028f2a92ec150071623a4a5db8e56e99e764629679943ea879ec7634fad1480e8617fe834c26210276d7db208b13f9b4c2060f2867aacb1b47c8e110830beff721dd8d120de +AD = 5f6513ad3d490f784dd68ca1df41e8c8e1ab9a240ea8e9bc22d0b1d7353da94d5d37c94f0dcd1a2dedd6d8e1c79a383e7e214cbb6ee2ccb7c6d894ffce5d01b6cf13876ae2648d36adccd88710d7d2ab6d43826d37ee0ee3b434972a2cb8f4db1c3304cee0a352bbef76f05de0e6f55a410eea5e697afb197f2483f0200d0abee224 +CT = 66bbee209eb11c675ecd3303c38cf1087b010c532e1357732c4911ca9db78c67805c95c829194cd413b635a900a08454c6eb9cfa3597ab531fc9ddfdc5b02b290be2a618df7d03b1ab465d6d03e8b87a430bf4e80d8cb9916145cf2d2342a91fc79defa151b1f3c695608e76ca2abc4c0383897f1cbb9d4bd9969b2f33813e2b5502 +TAG = 43daa08e6eac70e3238ce655adb65005 + +KEY = 16af56326046c92afca49fe173d643ad +NONCE = d32a935b4e56472d92d9f2ce +IN = c49c8e5769670384d23d9af9834026395d3f3bd32d88e61ed06b2e00e52a5ae4fe3867993c2af95203cd4006470a89677864431fb9edbed17412913bad4bb3eaff0fccaa150c9b13f83b9bf06698af844841a640d6f94d845296638ac27fb5ed87c310dbbd36415161310b284b8f84b4e025267906e0a4c822b76a682d44a70f9afde9bcf48ac2 +AD = f713886f4086026779a7e479fa646cb33574e6c977d70b8da49c8fdbb395dc7c149a59e219db8e4fff053cb00e2a1df9850fce94e52fd34661fd3d4cd8ad3ffe0b4bc7ccfbbf42eeef3e30ce13cdfd77dbd067ae9f5aebfa068f6b7ae2c17ad956dc03511dfcc38eac9fa3c0c0e9a340f5c58e39d868b77dede54fea1173216c0bb8f0a6c2990f +CT = d5d7d1ed0ae3e3481e2ccee201857ce1f427734fbb4fbe82a2b90601104008b8ad4daf74514b8ab3e42b6f6b509159ca04489b1175ce1e3fe33d36ea521e0aedff8c69fd00aa588d7a2eb9d2d551e2b8fea321f573e2a1df147535a873d540a3169d3ebc099ea6c33cefc04a2d55dc2d47237b95ad269fcdcd3c3750af426beb4edfe7837b413f +TAG = cbe0fb9509c224bb0e8e33f7ef9b49e6 + +KEY = b3df227e6dc2c846095e2a3b825d7645 +NONCE = 578bc24ca3845e23204df661 +IN = bf69be81cf0b340b006badc9f644d10376f4f9a7a78c997edb8729e3786447f21e97e4c1e0c0c74e01ef655d0a84ffc04ff7c6712ad65adc9a0da2e3078d4c9e796c9bcd71e7a9da26b987990d366b5e00a23a93652e10942e07a6aa01375af27080c9cbab5f554497abc48260937a6fe895361e79cd3d5e78c1a65c6723d4a4fbe9b3dcae3c05699cf6d3fb +AD = 00898eedad307fc017917a3296bcedabaad8a505edd34e93d92f3b61797ddccf3fc31144ef70f255be3b0c165c97eb8706f14c495f4aa9b3f15d2dafd65bf6741d67fe240967efbf0e75e610db9a8f722035e039b5e9246d258084a04c12ee8ad1668032f8caec737481fd894dba2ef702d3e6089acbb0fe0bdd6daa2a5cd47fc62603499fe3ea37365072e5 +CT = cfeb249551a695ddfec5f789e7f0a9f916abc8ee01d6233c32744c10a09b5b19ff9ed15e9f10de8f93c8ca1ae3c34e26fdbbb7f3b0f5f8b064501830d3cc982da99b294ce51bd33085c98b0ac0bfe44a8f4a5a26511afa3461aa88b770f076fe119ec90f33d8c9e7777f30b8cc95864f06e04dd8e328ad7a2c7dab83b03abfdde065bcd0c7d6dd47389108c4 +TAG = 3dedd1054f1a29286a51817264317b83 + +KEY = 58a57f04d1d5cbdd1bfbe01dd5f7e915 +NONCE = 47affabd7dbb4cce76661081 +IN = 5f82d481a6a3856c6f0be2aca54d666f16de88294a4d763134dd51ef03661bab45da94b9871d94e5b574a52214b22c92cf9690ecbffca9b108fe796abed9e608778c0b99d7bea1daec08dae89d5f7229c04fd52cc906b5f5b9fc0f0fc1e0b2272dcf4865286ee22bd9edcce1afadb579ec72cdf6038cfc75c2dbab5a1fd64b6f8e200d1ad0afcf25863293fdb7276648de +AD = 4b662822b48005fbd85bb99e6a946eaa74403909f646d914a236eecc5f4558b60b2efb1584b1f32d936b90428dda6568515801d21d24d6fb622e6463897c70be01f81fef741d6dd5c6556d163c3f048abe49f21817b41850ce79d7ec1fdfeba32935b58d898e964fa4b36f79c0f1f560b0afec3887ab325e1a025fa7662f9baf8e08a9ee714b8369621a2f1e6d2e96896a +CT = 31ab08ce0aaa883628f4b33369e5f6e5a54ee4a6596f25ecd54eeea30e81b41d357cb6c671adb6acd3d4e6654feb2ab1f3259692502efb33c5121e0852cbcb2dc5d9a4c65752debe9c4bf5e995fc909a2881621d46cc220806703795e61c0fe74c99e3c1230521b1f97bcbf4e95326e2d581f0cc879a2fc06ef88226a4413f9e9985edc913c418cc198c4df13cd46afc24 +TAG = 1e54066c6cc37f35c62b47426b609457 + +KEY = 64011470970333b7b677d4ad8ebf3ea2 +NONCE = 17031c5133a426d96de93123 +IN = 882cac1ece2d22a1db7f8339332379eb68516c8b7dcb3c089a5bfecceb49f48a169215313686eb5708135f379d89962af478cae865841e0c97ab47a57a456f634282c4e03c99abf7f7cc4e8360deb48160288f06e96cb09114877f9d91dae98828285626a1528aac87f39cfb8ad3db344fe4318aeef6f6ba14bd1edf9caab548c09f8eea091229a90dbc4b0fa34fda2bf13d300a1f9c +AD = 0394bb920cf58806b909d90c046402c745f6876af85d8a281081e22a1908f8475126594b39a0e191a070bda7c78d30dc4867e69ea522cfc962fa5f9915daea9133e998eab22f32a18957a3cf7d91c6f3d54cea94875d60be694ee841fef01e69bf5997ba4f25e846558431eb592605265f235211c2bb2d4807278f4b9c314039d0768df24e9c098c6a01c689d6a143073fb1a29f4400 +CT = dd347d6a3d4a71b2bcae0a0c690ca311f012c6ceda4f7fc054b8f9b59bad54237b64b93331b99f1305801640a68e7d50cef581a57ff2564c90995a8dbf57fa8cff046d0b946af5f68e0aa3d73262965622fe6d35c78f949a6cf9e4f62ba71accbf403b690e31f610305faa6737a19efba1e1ee97084cff2d125bd69a5a4ff99aa399df650452daa835b3e54114b295f00d94fc60e2f8 +TAG = e5e72cda6755bfb3a44377945adb5ca1 + +KEY = 4852e546fdea545d7dd12493a687e895 +NONCE = 7a3e136cd961191570c1b0b7 +IN = 30c10d7a63b614bcae1b79b07c252dc55f322554ac34ca664910fe4a0c9a33e30698e124d91cbb55cf34e931807cbe591a87667f2284c1c18dacd108163aa7a82e274ae659c4ea144191e3fc0f82d4cac929969a50b98ed9fbee52cdf465a1f0535d7d7df15a9a6eff3f4a14e254571cc47f82716d7a835dfa839213677c4da8c8623517244891993ad5956f65d318d9bba16f1eb54d2974a741ac +AD = c5ded7f545d2eaccbc2cf5cbd1b38b0ec3b6bbc054ba25a16efdd448e5a47b0085974e469c1b0df22441340170d6677f5158e4ccd71446d7ac73dcf5fcfe4ad7248c4ddcfab4c8ccab0968d74d66d9c9561650eb98c088d87766440fc9967e8463febcd12ed07f7e44fef47cabf05274002d0014c4e31f230a41171868db68bf5a83c902724397ed181dd8c6768a898e0c78f6aeb886df95442e99 +CT = f798de4998683da7fa9ca030a23dbc493f36c48bb52cd1113c3ea97ef2b67433c00195000777fa3b75a3f689a66b148159524a1fe9576587948760b279cda56164a23748564ec66ea51368ba2a900c97169eb33cf1e557f46100193575737dba670175035f0d921675d45415c6591cae079698e6b1f74e82d4b9216c20e907b148a1d514b2cf653d2e4994f7f668dcfe88dc49c29c544de96d8dd0 +TAG = 3663fb2672223154981b4c580ed3d2d9 + +KEY = a65b520a2ab67a24fb8fc669c41f2753 +NONCE = 3bd6c7e8d29242abecc4c108 +IN = 9d1559d283f7a38847088116f2156b19a8feab0731f04d0d499c6b0d21b8563a89a9c284230c1298b28a622cbdd38dbceb098ab896a7259caaabfcc7b0d9ea797178c18aaaa351c7f516342dcb9d3e91405882c8faa9a28f7c67f3db8913b31c0dcd56472d8ebbfb20cda2896a66bff2706b12ae0d9bc8c6c123c02f1f0bbaa418c1806482423eac72d718cad0dbccd208eb81663a9d9043d6ae7a52cf32b1fa +AD = 2538529cc6eec03f70df2ab085027ce015279484981422f31e58aeee31e79703d72752af2b8822dce9b385f1530f19e692e00e20ef973d333f4bd585ecf122bd4ed9b0626cef46baff0302c71411d27e372361f36c7245096faff21f0236f3dd675646760d5687b3cf1544dbcaa863f1267bce04bca976616b890c7c6ff3448d16072c3938f9b62377609950ff7818cbdd21fba2560bf1954a93517962181b18 +CT = c3194fbb5c319a94c0f61c432a730ce7611a005cfc78266ac4e5d7c95351e71d613f06f52d9d008b9d886f4d9a57bcc232d47e0c75ab755dfccc057a9c7558d7fb696a8c29843a8b9199e2406d23cd6507d35a872fa54cb95e2cb9af45405ebc6b6ee353e8a80debc393329bb9499c61c6344a6380c118f30fcd76376a9765517652e1b21ecafa63c0d19c1875658f1eda89c15ac2daf1a6f526ca72ee792a4f +TAG = fc16cd532c926ba01e2e6b15327bfb3a + +KEY = 84215d2c8f86e5b7bf93cb0620da6bb7 +NONCE = b35e99ce89dffd1ec616ed92 +IN = dfe500919f97713f6d9c4f53913175b162b8b7587d85d5b63f0cd5f51def23119e2e02c224142ecfba7f0a519aaea3c28be20b9c2a9c98eb145afd4db523b7f0b822e67dad630846b2a192bb146dcbeae00198c81b80c290d881125c24a6b01ec901b8912bad5b081ec7d97d6997b33052ec287f692489df928ce36cba1e3d6a41cf10c697a9e1f4aaf75dc5be054b98965ec3ce173be7e127c4c5387048ae6ab5a8d247f3 +AD = 6bf6222e64a46c90f83f47305554d090bc8d3838b7a856f0e5e1d92c4e7231eda6af1d9eb7ff6ce914f2256a3b0c853453b9bc75e46109cf8d7e8a9dca224e022d3d1a139d00476775622799541edf9d53eb645a40f6d98ea559e181d96e4df0141e51fe067542300581c0424f534d2c2e3b1b27153c0cd496a1c03301226beeed2b5cce0710d1f485e68b44a918b63fd8db610c7ff894514e272b6ed7ae33a38907e0698b +CT = 6c6faa54df62ba5659d45f64a5f014684138c93bf152da8a495e9d067b13a30b9fb84847f56231b2da4d87e6cd509a3e38a9ff47589c627e5b5a1196e27fc7afaa14a8432c2d10d8fbfd5d6d394e4b947c456420708a76c2aa638df7de119c160636fc8dfba32227c5de12e5ef429da933ab04e77b489f2eb761d0c753738647ad6793cad64b8942f621ac67b13bd0cab106ffeff21f24c79de69424e50ae550f2241d4029 +TAG = 202b232472d050b9bbc68b59a0c02040 + +KEY = 7c02b6bc3db61e23736c5f36faddd942 +NONCE = b958decc680d5f79ea7b8632 +IN = 7e5992ed0474f4224b8da1d038eeb78413fc2f9614fab7120043e75986a4bf1114a80703780a149fcc8dfd115b768f45917065c85176a3f00be40b427fe3765d3919a5b741708624e29bcae876d251fd46dd8d36a8ef66f671c25f984761cf7f75f4329de7093937cdabe32f130b77531ab1aa0a1bc38fbe2758c2664eded828b2589fc5c34d9a0d57a5a4463163736f419b65f0543f50207fff4cf1065a551bc00ffe9466538b673b2a +AD = 76e430fce1a7d8340104e6001f1c2048d457ac335c5453e48727244b75c3c4f04f55afbb5ce55ba6f8632dbc168ed715b83968a32e5b8e91cb24abc9efee6dcb7a8bed9394a546f0b9efc5823ecaa192df061eb41c671bd863498c2130f322074a711ee43791a1cc02b5cacccf25119ecdd99233abf3b131c83ddb8c62c93a0d653e91499e7481303adc8dbac615ec464eb8640ea138f6236b0ee31cea060f97ea9145a22d15e28eaf6b +CT = 14cfd190ae0521f94ee6b36bfcc403139782bfac3d33fe95c81f53e83c7d0c9a8fdebbddd79746b550a383ece1b5c93316b2fdf5aa36b4e97f739f78ccd2de9963ee7fb4d77b581cf676bb679b2dc4a48d977b45564f21181dc60ecee84d736f2324196c20327495d18973660ccb5dae69b79853d12e48ee0706c8ed821b7f722e46f35c8dee2b7b55ebee01dd3ea1e8ef80493cab6b27c264a67596cee06c15062e3a96b140d0d9ba38 +TAG = b6c47410e6f4a2f2b172c6a4490732f8 + +KEY = 1f58ccb33649d0dc91c50f2aedc95cbc +NONCE = b3a392b1fff0157e95f82a44 +IN = 738e04dc5a8188d775262c2cdaa04468844755dc912a4edf9db308efb3c229b8e46b2b34aee2c6330219bcd29d3493e3cead142cef5f192b043502b8a4cf0419f9b3f5e001a640541c84141e36d585b05a2f702356bd39bda518c42b461564326969983d22c3ac5a2aa214807ede803d57a61c9547505dd7e08402cc43e6ed1574a48366cf5b5573afcc7aa3c4d4721b362d20a58cbf251315f2b5f9e2c97c5ef6bff44beaa5004e5b7c7f28295df2 +AD = 93f7f5054605edc769efc30b35018ee6c929a83bc6454352c69ba9c72e4b4ea6f51c9ed06f314b5682be6a701c719087765d0a7022e5c9d495f28a9053bd435b8b834045c3670856149b08dae742b372a15a0184375d50eb09877bf94f63859e64228606791c516e76c5695a4e529b9dc5f76eff1d4641a22597e4460aea4eff107348077d4ed2d6262744b0a2d6610f25264d905133309ace10bb52f7138674c25e5d43ededbd87c13dc8fd9d3b1b +CT = a002b47b18d1febaf64842fe9011484d618a2e855c4efcccc7d08f02dc9b53d0bd4fc8013e01e21fbf2d9bc7fdda69e68be0c06d32003d045dca6bd251c0bb8c2cbe3693b252265c8694295772b767f83661ecefd57353f6f1c442f9d21ed98c55cbe1db8171ef7b54fe3e3a1a253b4dd48416b5fbc7c18d73692e9fc90dc75d4b88de1fa47c9ad33ddfa4e582d3fc61ca2a8b1eab898b9992c8e56d170730454ca50cd4f28d2759388cb8e302be10 +TAG = ac502a9a52fb3a68a7e90dc639c7ad42 + +KEY = c67510714f556ea1744af9207917eb60 +NONCE = 71b347a21653cec3d113087a +IN = 7040fde3513cf7f1886d7be9c0f371a3b75415e94c3bdfbef485081199bec4494beeee76dcea05b6601ebd4c8fe231fa16d3b0f046eb3e9c9ed8baef25bb0ff6bc85469b2eb41b929fe904735f819b241b01230c68c0b61577899426bf0dd30e085cccb4ac290244d8c1cd7514412a3ebc51aecb6bb4be1a5a4a8d2ff3fc99191f7d7d0b44fe2cc4ec34deccf901f54e3dbe19d2dfe663855fa9d93a01ab14faed7f00c14834f63e1d153441c6fabb3cf22506e8 +AD = 6d28b410c788dba025c387f5b94c0bc392c69ef646b9cdce53dc169326359de26a721703d9a7c5017631a469da13b2d9ad9115de7d06922ed6f093792ac25ae2e27993ad6be5217dc4f6c51e18f230d4eabb01a474704b71b1407d9cff921bd98e28bb60c4fc019b4d609667c747e83eef779ee62000b6800ba2666f415dccb12d43af4f585d3185d66ba2ecf0b0fcddf762445dd1b6154591dd069f03977243b45b113b6f9b110f9fdd96f0b74e2c9843a45c6a +CT = f2a2cdb4f890241f44e00b3373769542cc3dd24c3d07502ed162dfa10be9906871051b991f36b2d5c4240df483c2ad704be14b9efe79ca704e8eeb9dc250e75a92ebf5800c59fb9a6a32228fa1121d21e0b423b77e20010d36b9e6c68dbc000f69bddbd521a1f7bbc9d7e431e4e46e5094be96a928c6729293d2d805c468a3993fb7439f192b1142272a78585e3b7fcedd2f7cced52ab2bc42e2521603b89ba7633fa3b4d07d9a314d1159d7bd5b2dc5198b0c34 +TAG = 0b386c3a58ad23e9a45f00ae107d319c + +KEY = 171d25e195bae2eaf666993f3b42d690 +NONCE = fc16bde0c69d5c894642f1f3 +IN = 8775d6aa2e46ffea6ad4439000a968bcd4fce86535b7265684071a498e0bfb37646f56fad79e0fdc4d6016fd1e935dac5ad74b11c69f5261c3321efdb9cf03f9b7ec681a7f708ba8e3f66648b24c41485a5147df31385809c800155d0d4bbf41d248453302c3754eed4909b267893309ba5249588cb4a4a14b4a29496f1e799559ac9f4baba7a9b4cb5bace1c11dc0e7ef7a2ddd2596c29cdaa378b97c7d3c50db49bcadb8e1840c6b9fa12ad88c0b8152fd753efb04ead427 +AD = ebb169a863dd05cffb9deb866bdd130a1c6852046881f3f8e9013158c83bfcbaa98743957ed4b0619eb88d7ff69b3a5d06da74076c3cc2dff83dc0375236d363c0e2b1fb60c9cf10ecc0fec94757b1b719abc7066af15ff9b66788b38083f766d67005369319967995407ea20339ba27e7bf1dc263fdd54ddd8088232a500f605ba825fedfed69cccca75c207b06594d1d0070ed12a259d4f574f352d2e2ea6fa45199213b6a42d53a7c717250715e0404f2fe7b64e3ec7e89 +CT = 8694eac2bb3968303f795bf0118e43c132c9dd22ec320ecffefbe878ebe6b1e0833d19515c07ebc83f12cd9bb50d2658e6d7fe44a9fbcc2225e93ed58e1bebd78edecbe6c8b3491eedfdcc957cc8ddc95d8116d50cc50b1999ac420802605cc652134ce51a41533e00fe232344e805df146a952b40ce27a2f5c6bbba2154489ca40cbb617476ce6ceac1a6b9c0175ee33615f252377f52583e970f77795b573610baf5cbf5edc6d2837244f88bc155f71588c9c4c1c802be9c +TAG = f6725998336b3ef020b99818e0d932ac + +KEY = f7db0fd345ca6ca82ec8624950f8e672 +NONCE = 3e7ee1a209b1a191f0a00370 +IN = fa86869e14df0fd8e77eba7fe5a933fd1bc58654deab310a03aa7202a089713e323a323f4932b4b8f6b40982d6738aef48951f621aeb82a747d290d93d1eb5bdec6a62fe66774209a4aea7261acff80af9512af090e0eb0f5905ce8baf2a0ec50ed89906d8d67f370639e6f16eafbdfa982897cd5a3f88929d7f1032a8b3355223bf666be94ba9945fb5cafe655d59af69829ef92365f54ff3eebc45e01ffc439b16e23ce892ba6db7e661fc3676a175a8ede746000ca147db57a14303a1 +AD = f7b826afe62356f985e8e10ff356dc9b5b9d9df24486523c3bab7db355c84ec7e4bbdf66482b74fc6b4c6aaeccd7717fba44eb4820a40f03639076776719ea7aabd3a815c201146428bf4c6bf1e8b056b5a22ebcb214fbba64de54089a20ababda5c860ec301f36e1801fc55fe8fa189f35722a2cbf83ae921a9537be2b4f060d918af9b12f9111909d59db7cad24418896ce49762223d8a20a3a83fdf24b64703c19c78f528daecaa8689f307da7fe0befa1d6b1bef24ac8d9f5f12b6c1 +CT = acdacc648833698eff4d42a5dc0b123cdf6f2985ef05e6f2d42c9cd04663635d240648da18dce158b21cc0a3f7a2c35441799a4f1f5622e11051c874b2bcc64314bf0b94c2589d2a24d996af57d22085a64f10135322cb68428fbb951d8b14683bf6fc96b1395829a0b05ec83eeb20e54daf7a413e070ae1e0b73bde56faac630363fe215f1883cd9eef9c3b7d076bbb56f6f5ffcce0d31570f79be8864482b6b3666424dadb674f873a1b52ae6e3d8ec8984edf54186e38c71602098308 +TAG = 4dba5b1385565427a987c9d0b030f4b2 + +KEY = ca80ac4cf4057182d06d65dcdc09763a +NONCE = 63cdd8090e041baa9dca5bec +IN = 701c739ba0c146983b9e1fe0a9723850caeb818514860c3d4adef10dc5e020a8dd7f2fa282896170f9039d5b3fa629dbee3bcb81db44d0d68f9522477619269a59ec1a9ed399d4902f25271dff5c42f3747ab0f4b61c26a2c1bfe1c0fed02282fc2ef88b47825cdfb11df3ced0fe0227e8264132dd62af2d31f23d0c0e253f01c80400127c37806762eb28bc71f31807229172c78ae994b4ad800d6247ea12d3f4f902bb50b72c132902dd4faee05e67836facc7001c8f58475366668ed20d4899aec4 +AD = 0e91b38fdc70951b97e43aa9ea2c6f78d445d90ddf4faabd3e6e0ef74f528fbd5c3d4da18cc3d8bd3167b756da495cba49ea35e2db849bc37f6db8370b492d7f82f2efafa5444ac62835cb5602796cdbe85caa50084e51eec2651996d2da0dc18fe10bd6f374168d4c9ea0a36ba665148192252ce9d05cb78429c55256fbb65f1bbffb8799d63bf41701d1d706a44e3f27eb245cf720f2a329ea24fbea803c575513830fff579a1bde3daa975eecdb8d3956ddd374fe252637aac86ed3c702c4ec63e6 +CT = ca46eac0addd544bb45a97a4989d45d21599ec70f843d9db38157d186716dc39a5d1a5c0624e6c825b5b7f1fd41aa542ac846ec0edfe6bc28f727823667a33cf6cb5ba1ba6654cd023857c53ff00a63b34d2c17ebae5d46dbd073edb7b2f9e02842dbf663bbe36238f3eaeb7a23e328b0d3d50f49674253898f360c0243722af266c934f021e4f2fb8747fae728d06717b2d68cadbff762956826c910cc8ad2d4aea4518d5ac4deec978a13072fd1675a272539ebea31d736c759227f31abc911e0e76 +TAG = 9f0202c228ec48f4be6b2f876fd05a83 + +KEY = 9c2daabcfae974ae165a2ea58ecb212a +NONCE = 4b9317e4be2256a467e2831c +IN = 09169c1f5d873f03821393bef013bbcafcd82314cc986675922e2d43031417c8e65e625ce737af4621aabea6fe75030b84acf96967e791f8427b8f052051d6247a897006c6ddedd49cb7148afa5109a561e78abff7c55b97091f356e31b5667270d5653a497e2503d75e5856ac1efdcf3fb6e80b8deba8802acc064905e2b09d45e446d7d810971e5996540ee9c01fac1b4331f99ad329565a8db38eb93f2e2a8ca37d64d73cc8a7f4fe3234cc155226393f1f2ad17d0f01d5e60537ea44835dea853e027dd597f7 +AD = 1feb0ca13b3022456a4801d8f5382cad95f7a50e466a102d2208e7482dc8ba5c710d1721de7103000fe8811bb13fdf698844257dd164f1e21b0707251f228ca8bd437994526ed5684c4165c9754d1cefe7eb18f9e116a455c28db1f7c04feab74ab06af029819f51ed96f453fb6a634f73ba8c80e19dc62384e82feac70a12d42e3125c360ec2a97f4ce0a07039687ffc37c5dc1df1ed24f05a37591fcd5c34a3fc5f825c79213adbbdef65078f5e41a4062517334a67560ab215fedde53cd8129a51f27baa80f53 +CT = 8a4d4ae0842f8032d83b2e4eecfaea439f745f1d0d07808bee4b68e3b58fcb65a4c8fd9b93cba2d5b4781d28a9cc01508e9e85796551064867551f9083cce342ba1aac4d2b8f5b0b0e4e3d7c82082c441467e47aa2b0f47e167b28fd29cb8d5ee52c2298c1f87cf811061d922f056214346c1ec3d2534045c5c485ccddac7d9998d3d08a80a62eceb2ee18e1a27f97616969df52ec486015974f160745667d6be25ffc20b143d89bcc8b6eab9dff82ce3c8f95a034316a8f2f2a52674105f1246b2daa28edfd829d +TAG = 0361e65b1fdb9d967492ded32e1fe811 + +KEY = c98ed84949749efd2ee41eaeec51edba +NONCE = 7b056c9c7b393b0b04382946 +IN = 41b87fe62c82bd34cbdc70033ca8d2ec5f13eb2c14947f97fbb5d97da7323f8eb5c2eba210be11b1ab9554feaa516aa493822af4a264c8849e9c6ff41f690f44966bb49c9c1df5995de8070a2fcfa42d0b0b5115a36738102134f571988ba4fb210edc3202d3c74b5f8801a7d1e217b90caa27acb49ece590ebe6637fb6e2f5f0b849f29804efdeb8c102b3e3d2abfc4f6f2c5f71f0a6e4d5daa5cf16561914f14601edc40547d55f7d11eb4768d5c64fc621d04e8c64aa3aa1245c7192852d2ccaaabd448e06f806eae66da1b +AD = 2fdac5a70356c2c8d70def497321c6bee8ebb08a5abc8dd508d83f03bf1a09942d7f7a387d4f875a1ff16c7b5abb53d32bcc372012eab7a3b848a93f7af634eff8c5deb3269d418be698a3026f6f08f55a6e31543105cf1ccf56193cd1af802f32e10512a6bcd3101b7b54a8f3efdba03018d5f2475b51bd65e5e183a62ab11c9462450883e3e87a9640eac909f72b83da8bbd34431ed87d14c6f7e79957067c1cf2a12b5fa083496f903269a3c6c8ccd5e3f9cc287904223ee62bffc4f157f0db409e82101e3ca5e05d962378 +CT = 384ddc8e7ed6868aa722f6785fab15eb69caadf43246521b97c8d016afd976360365bbfc9f48c08b0eaf5437af8a9c23061dcbdd0d22e1d58c92951b43e013689afa6b1587f79fe9ad3104ee1f80b3c95388e35b0b9a5a3b733b32a3e62fc143e6255d0e5b1b55bc9439d3c1cbed610d36c3667378bbc1ac20d93a5a7e5563409a5b94ec799a5281213d724e46f4987588e6bc7e9e6468bbcf340d5f1a1eb1b45dc9fe9c832befff54c8a85db9c07196d7d45cc389fc9d62f4bf1f4bb82801cfa9c408498331eef4ae1ee2809e +TAG = e8cbdc1d6d51ac64f16cf08725f81370 + +KEY = 42ece9aeffc9d2e8ea02e73d1a4de834 +NONCE = b59e0770c689d60823c06c69 +IN = eccbb9a2c1241c88d17204cb0f0c069e20512bb1d31f966349add203d84cbb79d88f7add957a0a8370b9a0e04c9f17215531cd48d08c4612bbeeecf3dce68d41724166e06a331e7897e8c7c6a6affb7bf07dae1874bf3bec044d38227bef5c228f4cface9ea37255e15d6b27e154b349b16048b0e7984f17cffa03da07924b190f9b91d6222db1124c1e4e77c2b989fe2a7c338c7316a49c7df0be173d0420e8790bad669f6da96745cf34cd2eb429d18eeb61a8e80a5e03294dcf3a5886bd1865e2a55a72574db8db04a9560f969711aa7a +AD = 2aeb8ee162a7aafe5a72a8d8873ce3bc43a65fd7bbdef1f6ba71b61e5a9c3bd033e7e8eaa55e08ae381362ad0991d65bf22c99a425019c4cd7768622f108f5917a4be22b4ab65ede66c58191e402f8cdad69decf6552dd52b62e8d62268b84122b64145c97115373a26d2d5e59e69b7dca5f96c48106e9fb3f7fc7e0ab11c78a1fafc697fc73603d3f08fdfc0ee885f84572fb04fda718a21744c7e5dbace91b0e141fa82fbd4d1a7dc35edafaba7c5894778c5952ec787bb547a37e509b035c684a8f51ceac5e12ae71b165dfe957c6de15 +CT = c5874137f5e75ef02521b37f0759b5724798aaab8a1e62df81b73175690ca1d32cab6e7a9d7803a8aea420ab273fb46eab9e5f0773b7f5457d7a8c0058ed9675a6e1a7f15805c7fb695d277ba06adc3963606ead0cedb342614cb410f4197f4fad0b5df2187f8d2ebfe85ad3d5f59bbf652364c7e8c3542c5d7f15bc6e6c24eeb1d3232bcddf6588ab1c1953085bd0a1516046b76714d2b97718ce57ad23cd213507f6cda95ee9c5c23036cc7d4133c84a1d36393979f9d1bbc613350252a6de78d905607adf51368175a20106f81aa9ff9d +TAG = eab1c7790a5941270f2ae49895b3113d + +KEY = 6ace8b5fa16054558c9d0e272573a7a1 +NONCE = 358c73828e032f0e0db608fa +IN = 915466e994705239afebb8025aa965626973e41a750bd75f9e8ccc7c1078ec555fa618120b4f4b5e273fb9b262df73d39950fe5cc1c265c06a08e2318efa83c63dfc689de80966f45cab0d2dba603bf116b9ef7242bf4d9cc691a775f78148d2c75059d6049c861da5dc40d5f94848c7247a724db956d050975d613433066ab89bf91936e0fc85c61af5c2c61cd1eb414b9df0dc125a31a3805903a886b427fb78551bc696610833a9e55c7776ec1622abf839d733594864de06999be8d483f8dbc4da99f541c6f7e21d946cce229a104a57e4b823bfea +AD = e54b90d037c375238f4989910d423bc58d32ccc06ddee558dc6a0c2f9a0f13b2332883e2c4ef9cce41d72cd636516b3506f28f914dcc88311fd7c79bff0ad32770e4847362affd98ad468117cf0daa0f5747c86359615ad6087ee18e6c58453be60f3bf30f8c61c1466d107116f88499fb1b5df9a01eb762317676d5413b839c66e5c1b74121f6f2f7408825745fafa2b10ba7450f4ce207a9cc682d1e1442f972a86d5d4039c4856ccbc00c43b5b3412f5b3f87c16508ffa527c8080a556944d359f388f787f9cbc033fb3333e72127e94c455b433222 +CT = 37be446820f5635c1b5ca1d8ccc2c5ab5b393243ef5229999a2c084fbb54a330bb338963740ba470973adc86e640fcc167a88bb940e5ad1723a01089b5e804b932138efed6fa0ed99c1ac4e9c607f466c829af04407a4a2e5cba486685f693a7b973921746902ad8a0242e02075cab66204084e6b281d58430f2d62bf55ad56ad279bdab0fc8c3d570fc3371dc3280ef3aea70d686c855d40ff205c04d457adb518d904f5715fc6a9a5f30bf1cc74703b175d70a1470cc810a366cb8927fb937aecc200928db6b73873935c429e2f8d595b418c5b1bf9c +TAG = 01b05fbaa9f2257b3c23ed3cf91bcbd0 + +KEY = c5bf40aa1127073b03c114b10f3f78f2 +NONCE = b4ac4fe9920fbb4e032f6aa6 +IN = 164906110c34354a0d4cb6370e1ccc17a739350cbb11d6570f398d50efe3d9db1a97f00d031a579f56d23da2441295af18a640a4e33c29dfdc848d722786d9b73550bfb76da1676af24a7bdf5fd3301090bf342369a24ba830c7f8883db6ed77a2ced83bb85205ca31f75a16a58fbbbd163a3af5e5021bee2d2cece33c08442e89d3f4d6d2359b94a7ec6cac388208a689b584d5dd1103fcf6af10ea2c7cda4f690ea0e4c7376fe2c3e69365d982da28c5bc18d58fe384c9ad2689f4047f9575e54970961a02419d9f2bac8061ce943f132edae1b9622738593cde52 +AD = 9f05d0391cb128690cd8bd120120f21725a79e5d2d0ef9e8322c04bf775f7215a82ce1ffdcf0f6562c188e84cb520f30842b8dcbdec36436725633325020cfdda7ed1af3323d86b2bc72d1b4a326f02be2231fcf133762c4fa76c8a7d5d3ac31cd19f63411a220eba4fcbdec40b8eb01e4ef33c6620978d09a8d428ce0e74d02c140881f46f6f81c2850edd82dc46f3460b5d5fe0b54f09a3f31548dc520f1dd46ed657995e63297b6834df57525408b944badf56234eb2b9a43b1422a5c6a59bc58be683e47753803f7341cbb0075b5795228b586cc571c1bca70d5 +CT = 5c75ee10a917651c49eab6a1187ed631c7069134e492bdb5e5698f8ccd5503cea5b1902d779c2f6e6c03b0108cee3fba03f2b47803e390930060ee4ac984b1ceb9488b4cce80e329d3427851aa7da2213eca2dc5f79366caf601c49a6b7a8ab068f1a9bb899b81a23c99a9de20466fe01398bc071c724b2942640cb1a00489e0ca7052f7a06398ad42500780f194078e3e77142df5710ae88540761b902084f57d87c2b0ec57bcb7eacee6743d419d8877d61666f93a127d22ccb49b5db0b93e4f4ac0dd9393d6351780dafa412380205a90fc8daad3dfcb1b7ffaff +TAG = 8048088e7e9dadc4ef98777c0f6cb661 + +KEY = b628ee6726a4d7925734ab1db3ec4645 +NONCE = c830b0d1b4113f4c9aae46b2 +IN = cdccda3718f2b0963414d965a3c36bce0a165f8e88aa70ca9eb3de6510d02b0b49c29cda4a7f6d439c18cc8fd80b932d0a4190236a13edc9994b1c4a71dbdb694ea5dea53ef781ed398e453ce372a99c204a138739edf5b606160e38cc8444c8fb6e9cfc3aeecc1760e90d13d01692ca894572a0bcb02e13f61d8604a75bb98e96f5f36d10e70a48bbb4f73771ef97031c7da23550b3a12554c2c436115fe56713dd303d1c3d87bcebf25f61710eecc9f01c555494facac496c68ef44344aae40bbe1199de793096d4630018a725b130a27d38ab2e8c629e61d2d8d37b5974f9b7 +AD = f4d345e55ebd1ef9faf967d76736f7ef38e5eb9d659bf8a89fd3c6c3c674161bb54758f1c14856281a7dff7c9cec16cc138384f644544881d50c7692bf22513223b63274e3cb7509c8a410a389277f86cefc801d026b0049c13d85b26da1dbcc7cb387084a3d4a469788ef85b6da02ed2ba0412ba999c8cd83c9c6716cd66b65760c42d4ef3e324b470c2a5e031846fde97cadc448e87bec15164da006c10d3a846adab2b09c29ecc27ec8a9134d5fcfd2c54f17fb23f1a05dc8da46e737f317db42e927818ed00d36af8dabfef09c8641159fabfcfaed344b03a1dd6f9b883f7e +CT = 4f39b8fbd8ecbc8aaea871db2e67583a5b06cb83ed8035ff639dbc9af92c4e3f9fe57b970f4e998a0262dbf77dc024d5e208d3678ae0d90e6fa5d45e2c7f0cf90676368c8784c851d3818e221abaa87c5e54298229a2f4d3f82505ef7bf45686aaf12e8322210a727cfd57c74a5f23bb5d8222115b28503eae7a5c600ebc4765011161736a346b535e1bfcded85c198c6ce6fccfcff0fdb0c2fc480bc6e71fd5de77355932d82f8eae245091bcf5abfa0d62123302e5805ab1f5006a976bc1468e3bed0452c5844029d7d4ea6cbd4a907e905dfc796c01bbeb69c54807354a5bd8 +TAG = 2b55edb998ac9971e53ebc8973c4e8fc + +KEY = 095b26bf096971842fae34af6833c77c +NONCE = d59d30bd5384b86b19b33c13 +IN = 3be9eeac265ec4eb947dd32583ac2e595505b363d660f8b8c2ef631390bb152f016ba7c75bf7c2e5e23c980d6967772ca4535bcbf4871ac1bf70b53826a34174e5a2e6118d7ff86d4836736c9a1f9de44c80b236c5530bb5f80e5fbce9814f3b0843a088afd029f4cd2e6190dd51fa804f8216448e7acc785ddc5478287b101bab80256977494fae87d0c13054fa4470c3827b2e8172224944c8c4f78b0a33dd78ee2bff16fabff15e5909f62c49beb455dd655ee1188b8eff35bfba72f2ec5e4ebad63d7db8b6338660f9b818c6832954241860925ea9b7eb07479dd6de27489d64b1a9191b +AD = 2ff9a8d12980e63a378d6d635d319c26e8f747435aa5d797c6e21aa69fe21f653f56da7db7d67cbf54451f336f683aa9cf373ab40c16738c44efd3e664ecc6eec40d6af82df2b3e58d7abcf26b1d9ebbe6263176ce4ef8087d14b0d5ae1c16917141d2ebdc76a0834e8d83c4ef76add82e957ae376b210ce2d94d2684a045a109454799f3cb453279d89c60ba9d038a1dcb99540fac078d7216ee94f96f5cce939eca9b5f9715b1cf3c9f1e6be982897c2f25225919db3e31595713a4e281e9919bc2c5a88c46835ce05411d0757eb738ac9e45ab3f1a42ffcd6dbd09f17f656f40f1cc2c050 +CT = 4723fb7339048f811434eaaf1db24759fc232466f5f53926b84e740b67f457c8c76f902f4d70ebfd97696380de95e8e40e62434ab1089e3a5308cb066fd4cc7e862a391c2f727a63a01bfd9fdb8ceae55067fd9d6f55312f73bc2c38e4b12b3aa96edd156dd758e9175e67a64a17aedd27c9c70945a065216773d756f533b035f2ab53335a159d9ed3f97b2b7a57aef676fad95c46e3b82eb800197c03812ca4e580916c5f7cdbd4aa1308ab16096a8af5290a0a2330902966a58dcf2e72eea7ce799a8f05c986c6457b05e3eec2adfdd4ed38926a3dc07ef208c91a619848917b96a082ac27 +TAG = 3ff349a628f7fa8d3f970aff8a6302f0 + +KEY = e27171ed1baad563d3d299abc0968b75 +NONCE = 5931a4414d5a90e93d2ac47b +IN = 1d209b32a772e87c5bc593fe943d3d7a1497f390ecdccfefac50ce14595b98b682111f82957278241f291e655b3af108a9cc1523721652b6d446f34cdba2e61464a3217b29344e18ce8f47f10da88c2845a009b7491bbd1e1f36ec49997a0fb09764ee25355de29e56eae7af42a8c96aa137c02268078b7f145fb1249bdd74f2d4e4685de75be4dd7fcf29482eb26b5dfa5028accbd23c3c654bc202c1c0ae7a597ef15f4d14f7b8a14fd45698470ac6355e04fe4a14e3b2907bcade18e4152c68631f313cbef48341008482f434c017bf8e1dbd048f0d6d207446e697fea68202be7283188d1227f21ae4 +AD = af2f6abc40ca82d92901de02113cb8f7638f0a510f6a03bf056a75b02beb10157c97632320fe14fdf0610235e3a06172b6b6e80d2fe18263b11e9a5e3a07758c55131ffca0a6c9b121c37a0c85658125d5bc2edc8e4e247a636d7793a1cde364ac22bf754844607daec0a6b939d05fff5a8c44ad030181aad2361ff61f20a224f2bbf2083b2fc2a5b92f5a66bf2f9b4c49b39dcc23cd3ba66b5e7c19c5b7b74a766c3da0c2b02ac80ac22c006e8eaddf48ce6f6887f69fff1fd0aaba0a0f70ef84b54280830a62d8b0dba55ddaa5b0385c586dee60d1a05a28863a081cb9b41edbf3ee9ebff98cff983917 +CT = 673ae48b6080a3dbd08034312c36201d18508f4e1ee178ae2632a9a5ce0938687ac7e6cb238cff852ecfc736bb8b3c04b42752fe65cbf6ff897e207582e85533f7c238b0be14bb1deb4cdaff524b013661e4f2c96807bcd928e15e4e159390e1eeed036ce776b579d9f3fadcad81adfcbb99986babc9a8465def3de8de0cae19bdbf6488c12534a9b6b7d6fdaeb1d4c3be36b4adf7444a0b9fc69c69a46f7bdeced1214743f3357803d2eae24dc50933a733defc653dec56f0e0bfb8928de76699d4f7029fce9175b3b7cfb6c7ab1018f6f3eeb2b9401115c8cd382b06e4b9b43a097f42bebcc1493a49d4 +TAG = 285c1a0028fed3ab2a4d68946399d700 + +KEY = cfea8c059d7b866051aa54b8977befe3 +NONCE = e54e684ef16a2fa8e25786d9 +IN = 5a20333c4dd9b7378bfb773b7d64ab80379d16c0a56eb1f48f53c19d0fc4519d0b5f478e37f16d6e5085af31dc63488f9f2cbde3e49ba954b674b0a4e20df811098f7b8e716efaee6a4109f16afe128ddb0e54034d66bd00d13a6c69c9ef2e5a065825701f5e85634e118c69ff0fd71bfccc25030fe94e778e7f474136cd3722eb5bfd88bc99fb45dbc3060a24ac2bdadc5c82d883c5c63ccc0f7aaf5384f4c7fb07310b66a7c767d025c1a02dc9aa3d7aa921a72084906ae6039f837454493aac3e3549ad3722a735dfce4211819a2d7ec279221d43360edd9a4cb930815c8565c22b94b4849a979d5e2a57b2da8ecb +AD = 376d8e02071a93c892293902e369b8c7c44a4c9541b5050347b016243935408d0c9557b0f66c6cd493c1b8da68c8635f4c868e685674aed42f196ee9b6e56ee44510eb9b9e89108d878be917454dca0c62d207fa462a563a267270d6b1602d6795717475bc6fb5c87b747589328e39b1d4db3cb19f0fbe9791aa4232e33abd9e14b5fa3abe4705ee988c657677fa063aa349f1a05de045f3ee66da03af18b6b8b83e29b203e12bb02a4cbaf79eab3cfeb83a5a997daaf8f36fa9e12faee86c9cb351ff361351d98ee3a10af999799955a02fc46ddf56c23070319b3fe0cb42d07d811ae976f242670e618eed113b4342 +CT = 06ccc7336773919c2b1bd832e7c48ae4a569db96545363ae0b28061fede28a25ab6cc0382aae3e6b31efaa4c225073640d0148878524a7f381f53b4d21a43e39afd4c12cfdcda442d5023a8d2a8ad49f4a002ecc8354c86520524017e561fe891b6962682d168a860210e0def1cb4be1bfc6590121c1b1988254757fc5a37ef916827a5fc258ae772773a6902b084817f3641c21d3d1d1e8818b9851dd05aa49ea74e16778593f6f486957345462732ab92b1e4b06c32b5ad3270c5ef3d80b4e4bd08451e92c26acebcac1a4592e08ea434a1fbc6dfedc677151ae9471661913db19723184d9ef4bb49342606f784d98 +TAG = e7be877dad60c889d397726bf1b6ea89 + +KEY = 40d35704108a944f1e7582503018cc85 +NONCE = 26048431289e7e100481e2bb +IN = 515f9bd4935dc10e77dadd81f5a4e0b53eb858ded393979ed75330b80adb36f6b81288dcbc581e8d93b0e4705c07be3e200422397ca3648c9676952e60ea26d12198add3e33cdc589ee5a800a750d77978976344dd5dc710e56dbad462fab7fbd08c057a9f8765c4caa9418e6380038d288e09a90befeffb1e8d60e79925dcb3772cbb3258b15544f9c9554181df3483784b89b73bb6f9ca55f6d644c02fbd7e31bfbff45cc40132d2bbd08db6a27f5a302e1dce2f0afe4ef5bd4ca844c7900ba18faa1896a36896a1c80307cb37162174205665613b39cabd0a5b2dd1d5f8b6fee948006f0b2e31488c0c613c1d178b7800dddcfc +AD = 9c86692c874fa785e0d9384061bfce8d8332871ecc195621ed478706c46057bb4fff80515ed65b5fbbca3d463a62e227c228a340143bf012233b1c05a50fdb4ed04b840d983f47e00e001844a0d2ce14f6dcea58069c9b0bd8824537d2420147be7caf4a88dc9912853a7fde6d2a5cc21f85eeabca7902b94eb79d5fa143d02585acd57b93e4eb6bcdbe289a51c6631f7aea7bd9dc0f6cc2ee8426b37220216f834033fde15e3543422612fb3d972b8eacaece9614a4b759d93dcdeed026cc90ea058d7dc985c10859d4ef14ac5cb14849d4ae404badbcd98c28663eaf7274aade4bb7527c4f960875ca703ee6732c9a3720b629f2 +CT = 89a21a1d502ba947ac1921efd3c998bfdb437c2da0802e5eefff66de3af00bde934fb9109e961f179771c52de783680683f4bb752f877897882103146d030bea5bc3c03f923b477443e640450244cdf66d7d346954f6e862a3a577820d49151a82f4205340ccf2e11e4575b53f7ffeef09ec640df65a0b8c04b37f6dad7f940cf2d7446a6fc5bc2dc31854c27567b2badf6f8e94294ed5d899a458a080f38d6e72df59f13f5c8f736264fa2b302d5375d6e3f8c3abe4811f4f85cb6e302e2c12a892a1e7a78a5a33e4b555c02917330ea7a45f20cb59fa991f183d1e2a5bb1761005b73fb728124fa2082f41cdbc88bb06389eb165 +TAG = 5476c08e9561442745fd2f222d08b535 + +KEY = 2c6796d0773d12455829a3242ac7d480 +NONCE = b43c0e7842006f6a7953d598 +IN = e0f7ac13e8cdf4da6c17f1221df18b98267277e79c362ec2793dbb842bb9662b5e2fa34e43cea12f71b4eb53d9c862f176efc5d91f06b5c532d9c30206eb4355ad442127d325ae2c30ec436889e3d7a56b683ee09c7d79768d6876ebeb67b5a2cc13df02ab93646386106e0473149ed77ad0ec91dd282712d0aa26f30bfc44f93cad39504356e3472c5bfcbbf9557cd85b53e33e1a88d2f08686955a3d876e4eacfe783e5f6089b3106295899d4a73fbbdc1bd22e1408a2b93a9d89c9489cfe7a9a7cda7c92b06560a189f5ed04d1f02489685c602f8741baeef3fddf610b1a25ed26d88daf9a05aa0a476c8000dbbf798de92b0ab8779add7b7 +AD = 1048769719a44958dbafe1a59a159ddf2427c5dd8746a8454180dbf59f48ff6467d760f8e06aae8d2d2a79efefaef2dd2abf33ba1929073685d0320a583a56e8748288b50c7eac551aa859b274629f3d3cdca5fd7b2a08f0bc830e929584bcba85f80e2eb12bf83de607e4749eaf7631c3545f06ac236d55769c8a08427abce0174c52718c2c08b02afc7e418bd7aa7715de95a930eaf92f54c7dfa2f3ff3691187a21c6bb9b238d2fe2dac7266de30c94c7ee96fa60caf5ec0f5aae5cef28264933cbbc295cade787321f4c12f63ddd85185997a63fec48fc5ddb83be3b47a94e15dda3f315e7495098bc7a0b7d26802e12fdfc6a94bc6c5a76 +CT = 794ba0a7df144e66e6e7fc83ee290431818d149673d1821e1df496565aa7996f9e581fcfe9499c01d8716fd3f6d67acd6641285b70f8457108063933126c95b665e551925722af60aed5343e429e645574a65cb6fd767b204ca8fa91979c6fe49377fe4b43fb9994e619e1dd962fa49a8ae5ae0b8eb630f112c43a4e9c28ad91fee9b5bec0b27c5472e30c2699e984dcd9f984a3eb7a7b7209a165b2f4a74bca555dceb81e3495a3d39115d32609f372d8dfce820aded274ac567112d295de5b261b10c01f4939ac532d4a0591f87742d9502d7a2201178b4cb4c069b1873c44b73a901e299d4a41e57dabdefa39907dc559b44e99f2b950e09c +TAG = ae5afc2bc4096e308cffe8063277ef88 + +KEY = 092e4a78c47bcd0b169aa35343c885f6 +NONCE = adb73023c873661f02bf4ea6 +IN = 0751fac5f54602181fac252cd2fc408ea3763fe229b80149bfb4b0044f541801843c8a20ffa1ec931830bdbde31efa998e0875c09eadaba6906c870549dcc650b865665c56b5cf29b75da63de088fe4d79cce59499518a04a17dce18879e3e33ed11ad808d470b2811da4617039758109f56fe75eeee696ff51c18d5ac04fe895518fe59435ed1f073b56079dec1701999ce0e5ab45829cbb85cb1f94dc67c9ad28815728f6de85fb7ae12203eff28420393c1ae5cf644bfb5633156e9189beb02294d7199e54ca0d2012bee2dcd6322eb90f41b3c6086cf0ac6b3888b21131f3e57643f2ab60141aeb17d9d07daa213658b52503482fabc4a0ba17bbe3a1a +AD = 60fbcd82efaa99e17f3cb16a4d2a1e04659d13d84a83135a5e332366ba5e6716bb3674d27e6b2df4269180a0df25841e2235eed7d8eaba571b34178ac1a1041623138641f500a7d4ceb28efdc0ab45274cf26c0dd16174c77dcdbb79a7980e04d48b35efd3656e501e352b605bdd1b57cb7f9ceca5ca14a3953b2dc77d18fe1c4e1b859d2b02feffd3da7e259fbbf27721d330049f0d1c2729ed2f8048abfdc0e7b3609d2e6b4f5b42ece472f0fc330247880fd04768b678fbe20ba9581f3db18bf3668fa0c80751d78286e1927aa6e27ecce63fe883ee88e7a05f8ca2a387b86246f7d1a4791881b14f619a340163da62f4130b2a2c0bf39f463ef0af4120 +CT = eb0fffeb17e3309d1104c9a9c211bfbd585f9516f775793c365d36352e93af1b4db15430b454d1e7aa913f2af994191c365d76a4d49eda531fa7ce9c49b98bad4d591c868fb066a2e00a6bf4b1bf529002d403313c5df306ae34b8c62e939569bb5401eb7ba87080ba505e5c40a3856d2e177d247a5d8c727b32a13014a00a57e9f01cdeacb4d1abd16f1548256d661c45da12c2fe3ab561375875c7b6e273bbff5659749631fe26cef86e02742d0cc3f63a76ae5ece59b6556ab27da9de1a20c627da8bef3c596ebd7b246505006d1a381c2a24dda70e52b126b919471acfce274b89e07d125bc69bd94f2c65bddb82441897973566014fef625bca7e342f +TAG = 8f2dbbcc01538ccc45436e7176c2df47 + +KEY = ab1405116f454a3b1f106fd491cdfc8e +NONCE = a9e9a06e4bb83c215fc59a00 +IN = f64f0ed5ca25e118f2a2dbf069a9dc0169ab0079d91c6552d4a7e8d0314c910ce0614e1f6157b0f758ed6d3fb3fc3e2eaaa9718ef30e8d0c136c8bd6dcff97c0f5ff8a5d3808d8c23f2a9ccc35fb9427afd10dc1c298e95b335044b8d33e414ecc17d7b34901608284bc175418910116410a40b29dbb379eacf4ead521db3ab2a3d9956081af6d7438714c0631147b7d1e9ee4789751d4260b57630bb573739a3fd0b19a7ee8c301d7f1b09f86e60e31d5f2a86c7a65b244d5e4d591df3df3caab80887ea5f1dbb569516672eee351db5d5ee4d662a3d3c0e48cca108966ac6dfa6e4f9b88e5e577752826d2da05f2677dac7c31774eb64b1b0fc938580a78e4a296889c +AD = 3726f25fea1d10c2712d157e1a1bfa75d6f9e5bda448944ea2b7b85c7d4ff4ac00f68988f2a290cff3d5dfd6af33770a021b03fadd5741bffb7532924f3f2841a7f7658c49c6b915b1dc41ee4bb9ee89386c9911974979f43e71297bcb34ad6ed085177ea91300c9b42524503bbbbfcdcaea03e3f2c939d6b1dfc9c6b6e53e221568d2557bc3055752f4fd487b903a2a0bb7697a19a763fb7c615c7edd099f72e87849f57722cb0987651bfc476a0acfe13d02d6b01f761784d247301bf514a14a990cd4b59664f826649e0f389787641c1e5b87388cff42fec144d6ff3f382b85062bc21368c93019bacb56b643808a848c60bb3d804aa64e2b8fa1c128d6914663d9d3 +CT = bc1c14f1df6ca46e6b4daafb016daa235718fcccfc1ac698a061885c33479c0a7fd44e46e805869383232168940b1a9379bc652c565059ba81b4ec2ab435eb9b91de5bc03cb0a7dc11805690ed9abbadafeab2add15f9fd69b5ff4bf4ab5cdb4a6fd3164ceb7820530641d8460b83929b13860bd2e64b984407dbfd2de51e865d88c63554ea1f04305ab72bfc991fa5573bd6b41c4f8c848fff4b0c5d2398a57b4de4678ca4dfcb16a7612773a24088893444a8ea3d0916e4b460b33657f41d2b04d0c28653ed068a3653975402c31088cd74722d3bc09c50679d0ec94c1e84844886b1a56c4fc3b14614634f08c5b0868d276e9f8f992f94b2c55be5f2e408a498d27c7 +TAG = ee43dba528a9ce84a53ed8fc1fbcd871 + +KEY = 7990cd12d13fbb929fa541bdb8e3107e +NONCE = ff7b2818b62e856952aa2cac +IN = 5ba2afc1da8c18d8be3936a2e515bf9eabb93e44905a86773a38de7f959c49ca56d7f1fb43213cf7fe394b49733b031334729ce6c7ef17d843790fde814672ca982807b76475350210871ddf8309f59fb280a7d41726ba7f00ed2fd96b4a17aeb7d157130cb7e49c8a454cd08622824d20f86b4ba062bb3b3f9d4a9c1402a9d80f3324e4127ee57ad94f87d6ccfda76145363fa70df95341d483dfcc304757da7541a0f148036b2e2dc7f93697d8d275456107a016b425542a89ee33ec02289f5260257176369d990c8c89df73892d7e67227086c0c2c258e5fbfff8bf9129a230c229356fb0935738d2d6fb82992c3465ca5a9472ec06c7b5a29240b611837225c61a0e14ca2dd30f +AD = 865a9b2706eea62f3fd3164805cd8fe4740d1ba7be809cad9fb39cac26f7c57d4c449f4eac03d87f87dcf219c562b9ee07ab3ce22abd46237eef8221049fe499c9189f789948af92bc434b24aa44fff600c2d698593bdfcaea878f8780adbe8dad2cf453d253e8668631a6eb831be01db9c7f1b7b8bfedfae83bcdfef3501cf2b2ea48bcb19f40a70733f3e4c3dd90e17912d5797fa46ec852edcd49b0780bf6287679aaad13a926f750ad7d3ca1ccab577b74fc0ce4cb22e5c619d2d668292c9db4a98c5acc4c49561a77275c06f5c3fd514ed8555db3e2f50dde5c23e84a38129e7a91cec8d168bc828d09239a5c6bbb180bf69950540d8876f9fac5d1a258543a771610991b92ec +CT = 1901c8f9b5a99c46c9cbdf8ace9db03f36ac17183295544d8170fdc3a16c7194a2fda400f8f0b251a3eccf639f539cc356ed3fd09383954a8119b536290865c30a629d44e467acff5fc323d2be97f29fb9b4ef7cf2c18a63dabfefd7f75e696c574372f4a35249897a3387a2b10c1a50ae23ea74560b498c9d06bede78f4c8c9d879667c8c8e137a0a254f3f881ce8d183588546e066314bf1989d1acadbae61f7836fa633de9fd0fcc5b3f72aa03ac432be8f7a14c8e86b45bee416acfdace44b783137e3135a801342061781007ab939a52c68d686f5e3b401240bb10e764211a059fb0aa00e2f635ef214322918fffd0326ae38ee939b4045c6039df7e7def36fdad7f5b65c20dd +TAG = 3e003897b4d9411cbd449cd8dca5b58b + +KEY = 64f0a8065987a4713e35dede10afb708 +NONCE = d6ee984b82f1097331400f38 +IN = 29327f95b41119679b80c3b51fb5240490689880ebb5ff7b59a62ae5e08f7cf0993c09b13fd845ffb32a99ce18c22bb8825c137c3aa622cf3a8390042c6a1a159aa1dcb6b6b21f4e07fada584dd21620b2fe0aef64dc609aac925d8b8d26915fc101031b68a4bc89898bb92146a0a580103da265cad1946791c5735b95d85d3f0f1f39a88f47b9c52e61307627c084d68d14bd14e3572825e190bc7146080bca423099f643d53ee3989386b87fe3dd9c383f6a58fc0437fdb2087b5211df2069bfd981d8ca785384cab31545ecfc35345f38837883dbde917155e631a46ed1444ea0ea8a5441bebd54e5f6ff914fcdd66d62efd223f34e16a880370a529b2ce6ade88e907102021dc87aba9900b6 +AD = c8116196a12363785d4d6fc593b23226a5fe83b00a77ba24c69644d2e52291dc59d2af3c6ae102707439f22c33251a01c41867f54ecc552396a5aa98ffc687e3a88d8d0dcf826645bc78ff9c1a3052481933c3e8ba8e30bc249e6d095699ebdc51684696a15dcc9e28d09cac757e51336f79a0cd5ce8d070579e12956a740666d28ead49c47bae10db20fff8dfe6fb0260a87cc6f5a879cd0b2f949dbff046d90cf42c7ab51337e8908302935e50755a4503107c84fc94f7db3d3f0e8eac9c0def7435676701c9acd7f4c2349c3b7324622dfc4d6ddd8265a810c000158260aa6a7e3af973f8b178959de409792652e9c4ed1d50fce2e5e6bcf205c6889ed717db7f4b14500aa8641b8514150cab +CT = 3e04445e0ba21e8788f6f192b710b466d5d3433463f0308a3c0fbf7f1666fe01853b9d340f496bb0c2212ae3e3d34b0fa1adaf33f039201d1962f2b51031c2a4dd9aedc08f7c895682d1352e9a21225d81c98ac7fd4b4de6efe3dbe437d255e4464a1258d4497e2a1d4ef6c319869b78fdbcf4632743825112fc21acc0a1431d8cf8eb8865e695c0f3668ff5acd8e850373331ed7ae3bbe515b42c1d0ca0b9caa4df0048425fcd08850f23a86b4adc859291b5c49ed54e41778c7ee2a11da9598396aa889dda9513afb9fa0b66c0affa555bf76849d754702163004fe3e77ae5a7c46f3696bbd52cb8680583aa5cac22608c6d45b96770dbbfca14312fba61b3fd0d7041ded80d8dfbdc3f901b10 +TAG = f42a0e4e6e6a1e0654aca2ab7877350d + +KEY = 2c351f0b77cf0920873fb57c910cea15 +NONCE = 4f844d27dd26df3015608119 +IN = 227ae9330bfd5a662af4137ca7fa164f383a63e5bc33eba94726a0e7a27f666887fe484680899ad8aaf6fc5426600760f5e6ba53b0484615d0089d9b1e75f5952ce0665d16a045b272c3c50194ab7b3831b313dbd800168a24e576cab5dca4319660fc6add76bb400376fa29cbcaa25adf3cac81f3e66a6baeb0d94ed92aa37271d2cbd8219c0647f0af6a4ba8a8e169c10cf6354122054a547ba046e67cf1fb424271d3d3eee5b51e94019d450de6c1f770395316421b61c5ee9ff00c910103e58d423946c68369730a974a392c21be3fc8223cd816e7432200390fd7cc3f5160795422c9daffed23df42a7f8259e295d43fe57f75f674886c6405bc6954d17c2a36348761ba09694964646cb86c0d8c64c00 +AD = 9d7d5e5f63267154bab863a7b53e0ba159a6d8a57a8c49e084b513b463a1e812e94611116dce9c1ceab2b7e18b4d69f7dfd225d2bdf5b7750d0d9dc131f22987bc812da5b0a8ecbe9d0ca2210cf6ed8a791d95c3f72898497226f69c8971c2da342500b75367842d14983384b5985041eda7f1cd73e2b5c71bbbec6537390313583bbd53d2d563848fc93d81579d8db321d1bec973f7c4e8f34b6cab8bd7b5789a7b40f599f2f8c43f6d7f8fdf940577ca8b5159e699d449ffb00acee0940937d491a71a81ee9da0949f8fa1d780f3957908819221941f0c5d011bfb2560acf2d7386f973358d68487954e26ea9ad3068c65b797307831e03aef7d1f1bba9ddbba2f251329e85172ed8efb1a689f8026b5068c +CT = 4ef2a097a8e507143b6354ecd94d072c0068c68698fd04f2211a771bec45d616d8eb7eaf90140850c135cf468dab9e9f3dbf059b56efcf616b32992df407bdb735a8b5ac2c361973abf47029bcde46dd5b13728add772264f2faf60f3de10494b0606618c383c8929377f2390c4a104141a11711ba7e3a3c83396761d7d62a997e8782822f51ffd0eaa0e6c9e02ae4effc0686af29f2805039c1cabc8b826d1ceb75c4274e95f854a9f5be709ddf1002481272586aa021acc2fcfe3e6cb0b2a47d124bd8b83585b43bc38599a497d0de3979c30c81536ab06a1649a3cf5dc2c2a6e52bcbb05a76e35139c668dc8a3c038ffd1fde8c1b4a31de48341b5fd586c674e35bef3b104e4b84063889907c268226dc73 +TAG = 12aa2a46a9014800b3243d1020290d1b + +KEY = d94582550b2e0d42255f13a8753f8e82 +NONCE = 82f7abb31dfc28491697b347 +IN = 53ba297d691fc3abd93ea8b6f3d629584370ac045934b1b738a73c09a8236bf5f99f357b1cbb120414c68ee64d304b7751c88c563d5d16fa094602c0ad3c803a8f116f3a5071c049a4b88f19ba2d500a171565c719fa64e691bd4a9c4588077b0c2b91733a30a214e474d868ac6b301898dc85346523bdd4f6c9807ef69941a5369b4b7ff7fdfd252729d3829a7bde65427639de0b2b154b4830f57ac13894bbe705f02362f8b75367ec7962c53bd6aebbf15d72b25c08570392592b6a83d4f44d2037da8cbfea2456696cc39a3272e46a5b4fb837bc6e4bcd9606afa58d3b260e9f6f58bb5d0f07438f378b6a36c1931e9eaf923c2a3679a789e7ef5865c7e799ff4633f1b2acfb79a5a0fe9cdda9cf347b9664568def93 +AD = 2bfb6a6726c6564b31cca749bec29a8c9fd7bfa22f26af0a80db5e6b13a3b10367be6ad87325abc59252453422535466347059b7d57fd2b1eda1d6d37dcfa9da7df34746e1bbc98baeb4bae17281a537fff85c0785f9f27617e77333f11be28f9aa3704651e4ddd72502c79cb2a810c4686147cedf056b5f035566eb34d117c83ae7815e7e1e83163907020cf0736ff1862371e87269e5c8c1926e0bafbc10610a6ba6cfc273c9d9bec0922726dea04acf72b3f88a5fffc57e0af6dddd0396b4937d2e7d52feaf60d29dddc5b4cc139eb855acbb794b99d74b8a93e3731f9092b92b9bd50c846eecb6eaed2e51290cd1f98dccf3fe746c5293e0b970dde72835c44b3a445dc1f2bd67fff6b1a7e378611eaa42889fb92de1 +CT = 1afa2fec98728ce39fba26bcc769e9766993c8276f88613db574773c84c91fce6ee7dc6ba4281b8d2dfe13820723526f0d6f20cc21f305b792e9a2bb1622c742fbc05ca1f0121cb9f6e1ad6c3ba80891e2043adaac4f1bdf29260a44a182cb165f58f480be5f16b51fddfd0d264bc4a18bec589d24817f586fc8bad15df7cb4d48d788fe7fbe69f821b5558b0a664ee12ba8ddc6bbd325f9b83a024245b4e68b310f2282f4cc6005209f7b7aa6ccc025d435441e3bb990e81bcd4c8218b8360163ab266be4a1f5603059db2bb67e541e1edbe8e7762ac522a81f495f5ff8bf99948050e61c86e83134f4e1212f879c86f7fccff472fd9753e27a0601f914655a5f803061cc986431445021c907b3ae0f060fac13f3723867 +TAG = 5ef1ed1e2bf562893b094d58516c11a9 + +KEY = 31d93fd51c2d6450cf35d9edd71413f4 +NONCE = 28f6f0c288c9f92e80252e1e +IN = e78eba6c58f93cc2374932fc21e54f695f2daeda3bd1e0121a77d178e3bf5c0e824a99042e8f2522df829d014e4d35a756780e8c07f53ca8fb78db6fb76754ad461665051c4572b2514804d0a9cbae1a1a013b796565eee13a7832ab8834b8406b1185332552d38754dde2344ff4f6e4823390964ba2dc43de136f2235b1d919e0f4ad60813d30f0ac1dad35abe3bee9479337c7b430841d2c722f12aeaf931cedd8a82053f697fff8d07f0af6013da7da58a5dfcf45561943e7ccdfd8d11fbe96a68a5a27982e47346500c0284caf8e6b63c6621e80503a7365d6693dc9a249093dc45221cfd88562e25910034c2c123e44e3b09d8a8a15547285d2596b98c7a0ee9d10b2cdb032d08a6caee1212420b6854181a583c15e046aa202dd +AD = a4fdd42aad5475ffc1b122170024486406033c8640233cd9b23c286fdd40c5b69eee39cfbf965f7a10c73663f9804e6821c4f62980f8362a580bab446325b009a004b60b1dbd12566b55b42e58d8037d86c1050cd6ecaaac2fb0ef616a15bc5bcd8252fd459165795c500bbb2fb1476e5cfef9549db733be65bde391c810d099e3745a2cc7a94debe1f4ff6653b338123ef7d2f9a602bc9a4bbe757a63f932a802014f2f06c6688faf14332a355b1025f33687124399f55b6a5adb4864727ec6c5334c41d78d1463400925f6c29c0f611f35c9640045a740dad5b4f0dcb632e7f9a3478b526aa9f97cd9f8d3ad094b7922890e7b6d9c67fcc4f747d04ddcd115fba0a8f0433c6fb1bf6011a9cd153f866c76b26d427a25aebc60d10540 +CT = 8d668fb50efda82552aeb5d075ff3977c37929d73f6639289e7c6da8c89c664df80b2387e788d12398d62d3c0ed2f9f918010d41021c464d54f016c4e10e85e29ba3a45793df2ebd6cdf30045363434387bb0d20439f4986e6eb7ae9fd85fe776f7b8035025624c2413ca8491cc6e79fe901b9c40ff3a0e37a7c7e88b56de4fee65861865162821e046846d253982e4ecd17bd26214b0923a4297d4ed9423395d856940829ca5ee74488c3b4d8aa3c5ceade17d8a3f2e45d3ba91360ac1c76d6a29f8243bf49c1d75aa41ba239fa6f3b123e198ba799e3b70c674607c5371894800954eda0264b3b82606433f71371dabc5f1fb3d703232533662920a241f613c38d16b0bad24f4aa3b336af89cdcd2f371e1bed7aaa47c56d17100a01 +TAG = 594ee5c93636cfb5fde940e3d561440a + +KEY = b06d694a83b14768ae26a8f00fb78ecf +NONCE = af11369ee342454cddb8db62 +IN = c01130afd7d3f4276dcfc1ffaf4bb636a85d18e0778df6c6791b6edb92a617894b84cffef6556c834a4800b336dc295e80b699b28cf478a01c54052ab0d0d4208e1865edd6906e3a263862c05f033668d7eb5b42baf36c702d102a6a5c723974e63bec848c89d16584f0d1ec429c87686b1ccffd7626e0a83f9c471cb615541ccb02cb58d10e63ffef171f1affca492ace4d39fbf33bb5126c575963e6b6ef9fd2ee4d6efcae5afe422bbfd9c3dc22b6b47cab8dc04127ff93b016e0f92f5d8518d5bd3bc6edd45e0397440f1a4a0c7c9c2773c0a0cd3b890effb010dbcc00237dbed1177b86bf60913309bfda9376b4192da59a360afc5bcfaf8be16ea8313de97b417aaddceadc63a1c3a355693616413ed4101ad68f6e6aaa99c839dd2a9ff536 +AD = 18e3195358bae4ccf43ff8daa34902fe48f99fc1371d34060aaa442a43016a1d756f795fa5c9c4a828525554571e18c27134f46094790dd1e68471ee40c17bfa02f175b2c2f7f2aef20f00e4d71926560b58f015de19c871d808acdd341675d8fc19d1e6d4028e1e8926df500c4685c14729c6a056898cf919bf3ae429fa3ca8746495716d78c9a8f2ecde596f985b1c25ad0e73aa305a86259319176b4c4f3bb231fdaa478a856f46416ddb10a14ed23c96dcb86f5bea3114568a44d8fc6ff4bb47fd0e2538b70d964842910a682e7bc7c7263249832c21b7083a1e8b143828de0f3dea8b404cbd82efb19a11e4d60aeef13abd86621ccbc3d8f220715730eabbe04a6bf0e11a4f78cd2c4369ce2447a76f4fa48ef8d322a8a28a67039c24c4bfbf +CT = 6beeb306c71318cedabe3877ec916ce2074b2c3f1df887cc3a3e8019c10d353854b6b65c947359138d5decc62a42d50921dc8f6cf63a16062af47aa8cd50d0b2dcbc3300ba0d7d069a5e4b4fe03bbf7062c6001e276be116fdd00d15a6399d1b0db71c58f396f8bc7e51c2b1f47430d4ebd6c5d05328b29aa79bcb26927ea5a40c82715aa0e36cc83ca6d250812c1305c02ed4291a25762cd709cb3d808031b5f918ce253f622c1afcb83c43707edc493d18ec6f0dba4353a1cde7184db65654088fa13baf45f7643f0dfedf4058e6095156b791ed30827c556a7721658314356e7a3f3c62cd62fe938b008cda56ceca71442fa0ffeb78b13c5847a3ee9668bcd2a01c753bd797c240378505d1e8f2b8905428b23bf589de9af390f94f21630d1826 +TAG = df5a21a399354b2b3346a9eb6820b81f + +KEY = 06a4c6a8aa189134f5784a525d46ff10 +NONCE = 0f765d3893af99f5c3e6d9e1 +IN = 706b754094869313523493089e591d34868b708cbde9bd8b42cba8175d1fdb6a8769bb9ec156d44bcb8f9cbf2685a0dc18b5a802dcf7a12570bb9042a0aa53dfb19af8c0f13763f388d9626a480d6d435dd90fbdbb4292d9015a5633252aa0583498d6f7ec54460d8589c1d6a6d16a349d10ec6070e1cc52e5fb996f810d333675a7130e4f3db9f4db0e3fd3541d32e0b2efbd40ba70cd59295bc8d08481f0f137832b01bac1778ffd7450376e174067b3ec23d0495cbf936bdc176cabc3f42e2991947a4fa87dd8343c32fa3d7ac0e2d22660a0c128a00e1b51a8742fdb2aff44540e39e588c5920ea16293aaa522513c944d3b77f3a0e90bd9105319c170886202e336893d100b0a25aa609a49a8255f78233561f7b88256386d1c3c002c3ee68f2775585c65 +AD = 18e2ed6d500b176e49f7e1b5074c0b7dbfdefdf00a63d9fa2fea8c5e78a1c4ae00f17b23442933543ac864097629e112a099f3dce6d5beb1e3f3c8e19522c6b8f615cbe23444bc91a802edf8a08995a55125da805ebb073fd89863996ef708f7293069a744ad95db8c17cbcfedc331119e85020df8852d74b8092fd38ad424f3da41b4775beac19536ed801ac1069925b12303d8ad2c52c36ca5b4ec95e96f02ebc5725ee6cdc099e666d9055b789e39ded77a8fdca0fe2d94b8039be55b6a75209cbee4fc7864957402b50427db71bc75a0b1e3d2ed6ea20f12a980c5ee916067d0dde7d686570d075da4df7088fe5dccf0d440064a96998da6f318b603d513104c723f27484780bdad586ee358d821b480f9569e4dbdd1a45ab9056f8d8e5a879789a0d65338 +CT = 5f3627bd53f8da0bbe6f3c9246d6f96fe9abb91cdecf66ddd42f833d98f4d4634c2e1e1ad4088c84c22191bdb9d99ef227320e455dd112c4a9e9cca95724fcc9ae024ed12bf60a802d0b87b99d9bf22590786567c2962171d2b05bec9754c627608e9eba7bccc70540aa4da72e1e04b26d8f968b10230f707501c0091a8ac118f86e87aae1ac00257aee29c3345bd3839154977acd378fc1b2197f5c1fd8e12262f9c2974fb92dc481eeb51aadd44a8851f61b93a84ba57f2870df0423d289bfdcfe634f9ecb7d7c6110a95b49418a2dd6663377690275c205b3efa79a0a77c92567fb429d8ee437312a39df7516dc238f7b9414938223d7ec24d256d3fb3a5954a7c75dbd79486d49ba6bb38a7ccce0f58700260b71319adf98ab8684e34913abe2d9d97193e2 +TAG = e690e89af39ff367f5d40a1b7c7ccd4f + +KEY = 31323334353637383930313233343536 +NONCE = 31323334353637383930313233343536 +IN = 48656c6c6f2c20576f726c64 +AD = "" +CT = cec189d0e8419b90fb16d555 +TAG = 32893832a8d609224d77c2e56a922282 +FAILS = WRONG_NONCE_LENGTH + +# AES GCM test vectors from http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-spec.pdf + +KEY = 00000000000000000000000000000000 +NONCE = 000000000000000000000000 +IN = "" +CT = "" +AD = "" +TAG = 58e2fccefa7e3061367f1d57a4e7455a + +KEY = 00000000000000000000000000000000 +NONCE = 000000000000000000000000 +IN = 00000000000000000000000000000000 +CT = 0388dace60b6a392f328c2b971b2fe78 +AD = "" +TAG = ab6e47d42cec13bdf53a67b21257bddf + +KEY = feffe9928665731c6d6a8f9467308308 +NONCE = cafebabefacedbaddecaf888 +IN = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255 +CT = 42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091473f5985 +AD = "" +TAG = 4d5c2af327cd64a62cf35abd2ba6fab4 + +KEY = feffe9928665731c6d6a8f9467308308 +NONCE = cafebabefacedbaddecaf888 +IN = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39 +CT = 42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091 +AD = feedfacedeadbeeffeedfacedeadbeefabaddad2 +TAG = 5bc94fbc3221a5db94fae95ae7121a47 + +KEY = feffe9928665731c6d6a8f9467308308 +NONCE = cafebabefacedbad +IN = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39 +CT = 61353b4c2806934a777ff51fa22a4755699b2a714fcdc6f83766e5f97b6c742373806900e49f24b22b097544d4896b424989b5e1ebac0f07c23f4598 +AD = feedfacedeadbeeffeedfacedeadbeefabaddad2 +TAG = 3612d2e79e3b0785561be14aaca2fccb +FAILS = WRONG_NONCE_LENGTH + +KEY = feffe9928665731c6d6a8f9467308308 +NONCE = 9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b +IN = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39 +CT = 8ce24998625615b603a033aca13fb894be9112a5c3a211a8ba262a3cca7e2ca701e4a9a4fba43c90ccdcb281d48c7c6fd62875d2aca417034c34aee5 +AD = feedfacedeadbeeffeedfacedeadbeefabaddad2 +TAG = 619cc5aefffe0bfa462af43c1699d050 +FAILS = WRONG_NONCE_LENGTH + +# local add-ons, primarily streaming ghash tests + +# 128 bytes AD +KEY = 00000000000000000000000000000000 +NONCE = 000000000000000000000000 +IN = "" +CT = "" +AD = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662898015ad +TAG = 5fea793a2d6f974d37e68e0cb8ff9492 + +# 48 bytes plaintext +KEY = 00000000000000000000000000000000 +NONCE = 000000000000000000000000 +IN = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +CT = 0388dace60b6a392f328c2b971b2fe78f795aaab494b5923f7fd89ff948bc1e0200211214e7394da2089b6acd093abe0 +AD = "" +TAG = 9dd0a376b08e40eb00c35f29f9ea61a4 + +# 80 bytes plaintext +KEY = 00000000000000000000000000000000 +NONCE = 000000000000000000000000 +IN = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +CT = 0388dace60b6a392f328c2b971b2fe78f795aaab494b5923f7fd89ff948bc1e0200211214e7394da2089b6acd093abe0c94da219118e297d7b7ebcbcc9c388f28ade7d85a8ee35616f7124a9d5270291 +AD = "" +TAG = 98885a3a22bd4742fe7b72172193b163 + +# 128 bytes plaintext +KEY = 00000000000000000000000000000000 +NONCE = 000000000000000000000000 +IN = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +CT = 0388dace60b6a392f328c2b971b2fe78f795aaab494b5923f7fd89ff948bc1e0200211214e7394da2089b6acd093abe0c94da219118e297d7b7ebcbcc9c388f28ade7d85a8ee35616f7124a9d527029195b84d1b96c690ff2f2de30bf2ec89e00253786e126504f0dab90c48a30321de3345e6b0461e7c9e6c6b7afedde83f40 +AD = "" +TAG = cac45f60e31efd3b5a43b98a22ce1aa1 + +# 192 bytes plaintext, iv is chosen so that initial counter LSB is 0xFF +KEY = 00000000000000000000000000000000 +NONCE = ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +IN = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +CT = 56b3373ca9ef6e4a2b64fe1e9a17b61425f10d47a75a5fce13efc6bc784af24f4141bdd48cf7c770887afd573cca5418a9aeffcd7c5ceddfc6a78397b9a85b499da558257267caab2ad0b23ca476a53cb17fb41c4b8b475cb4f3f7165094c229c9e8c4dc0a2a5ff1903e501511221376a1cdb8364c5061a20cae74bc4acd76ceb0abc9fd3217ef9f8c90be402ddf6d8697f4f880dff15bfb7a6b28241ec8fe183c2d59e3f9dfff653c7126f0acb9e64211f42bae12af462b1070bef1ab5e3606 +AD = "" +TAG = 566f8ef683078bfdeeffa869d751a017 +FAILS = WRONG_NONCE_LENGTH + +# 288 bytes plaintext, iv is chosen so that initial counter LSB is 0xFF +KEY = 00000000000000000000000000000000 +NONCE = ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +IN = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +CT = 56b3373ca9ef6e4a2b64fe1e9a17b61425f10d47a75a5fce13efc6bc784af24f4141bdd48cf7c770887afd573cca5418a9aeffcd7c5ceddfc6a78397b9a85b499da558257267caab2ad0b23ca476a53cb17fb41c4b8b475cb4f3f7165094c229c9e8c4dc0a2a5ff1903e501511221376a1cdb8364c5061a20cae74bc4acd76ceb0abc9fd3217ef9f8c90be402ddf6d8697f4f880dff15bfb7a6b28241ec8fe183c2d59e3f9dfff653c7126f0acb9e64211f42bae12af462b1070bef1ab5e3606872ca10dee15b3249b1a1b958f23134c4bccb7d03200bce420a2f8eb66dcf3644d1423c1b5699003c13ecef4bf38a3b60eedc34033bac1902783dc6d89e2e774188a439c7ebcc0672dbda4ddcfb2794613b0be41315ef778708a70ee7d75165c +AD = "" +TAG = 8b307f6b33286d0ab026a9ed3fe1e85f +FAILS = WRONG_NONCE_LENGTH + +# 80 bytes plaintext, submitted by Intel +KEY = 843ffcf5d2b72694d19ed01d01249412 +NONCE = dbcca32ebf9b804617c3aa9e +IN = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f +AD = 00000000000000000000000000000000101112131415161718191a1b1c1d1e1f +CT = 6268c6fa2a80b2d137467f092f657ac04d89be2beaa623d61b5a868c8f03ff95d3dcee23ad2f1ab3a6c80eaf4b140eb05de3457f0fbc111a6b43d0763aa422a3013cf1dc37fe417d1fbfc449b75d4cc5 +TAG = 3b629ccfbc1119b7319e1dce2cd6fd6d + +# Long enough to detect counter misuse issues such as the one in BoringSSL +# commit a3d9528e, when the AVX2 code path is enabled, using its EVP interface. +KEY = 3de7b368783bd7287f2b9b731814c876 +NONCE = 90dedcfff100eb1f1db9d935 +IN = 8d766795cadc0961c0f448c62df3827eef3a8664599b3adbaab0cfd63875bceb8f992b4f7447dca10ddd716aa0bc4fe925e1aa3e3fd1d5c430c650fe3546d6b9a24d576a857c5f04e8c0a3b149df277aa19cfa64ee235891d3b8ec0e840d268b1e70dd8a4bf97628a0c7aea38aa21eeb8fb1a8437f2abfee05e0d2c30659e312ec03d30da51b7c19073a2341c17df806e27e796d581143d39e4de8d3f8d46aa6d6fc1a98d94fa69b92dab751d930cc12de21fb1a7468af09e3c12ff6c3db3967d10cf140bc46f17a16e24b010b6cba5ebf777341c52042596ee53008389c48d9690ab9f5625795c3e588f72f7a1670b2b25a9f4eee1c8845ac90f1bf47ae4ea4b607a50aca88ed304cbb700d02d5486139b0bc81ec042e574abf986972fa008b83ef22dbfe720c2f2f6355c87c975932cec545ebed657e5e7570c503e9aa7f0b87d0b2648e421ed1d34749637c95d1e931af8925236387e50454f0ba2e22ed05f90450fad46f4eb7ddb08656511dd065c0f852a7e42f618a961a6c6bec42226c6b6043580b009ec9837cf99844cb74794a82c269ff648e0bae9ae50256a0ad98ad9f5a35057b3004ac96f469f9ee966dadc16dc47616586cf242706df96bb2f7ee43d3bd1c65d2eac7b82ef242e77ab509afb9639e5f3995380e926305729ca762c487f4411ec2a9c688b8347e5287216dbb38c3fe2281a89fcb47ee2ee7ddf79bfa3ab61cd56a00981019bbcea8aa0444eb75958e5fa56ea0036d2de4950a7db886f4a318b433bd41e00905ab158171e0ef13172293bdf70064b9dc7b243bf9dc927589bf9e99468d1cb330639dbff1850cc51929b8971b0b2ede9d06bc5f6ba39d4551b587f09bf6f8206e8f1524f55714612581d6aa45d8fb83425f84a736576deeecafdcbfbb8670d14cd2ab2a7f8b7f374c07881b7bac2605fd5ff7ff7cf43e30cf49910961a9079c0343b8601be8c3e9fe38f49fdab0b7e1a8c1536cf84e4d80d26ae5ec37570839b5cda02929221898d611525c3a88fc444167ffc532b256cdd0a8f31ff08097d75b629fab99c9e1062d1d9962b211e15ec8709934029c4934e64db8d7a2f32e23dc541be306e9a57a3419115994cbc3a8f8d5ea2a6f45b9ea9ac0e51ed0c6680fa029f4552a6c8665aab00ab77928342e7284c321e9500ad4774ef1fed0f596d5aea371fe1793271aef38cde55547f34701a525526e83a72673385a85f44db511bc87ce1f831fc6ccf8204ca4f4a20eac09897aae93684f14ede21bcaf40a09c08012b92600d6a839ebdf8bdca7b34192c6c50bad8796b3be3c375dbae6217815d2c75cc878d39b4e842d4eaa5f5df2242cf230e44a240e18e47827f089b18bf880fd41a2516eac8e6ba3fc2db64a4bc28789860d7b18d9edeae8b3059f4d945b15d0ee27b1f74842dd1df117fe83a8fdade23a47c93902eedc4d33f2dbfcd1996e6dc1458409fde2302830e8d44c58c5ae67486b9950dd938f14c38bc4c9484fdc4ded93a0f90875773453fc14d428cd6e7beb0c705d61229d2b3df09632ebb30b325fefe2aebbf2a7aa8e4ad46277ca4b8b078818b63d04e7652057f6cbbab7c43ac355537e0d3918b4a73c00dbe6b30a27ee7a6fa213d3347ae478e8edc323404b8322b9c7b0173ed61c38ed25f3576a675d527d22edd51d6dfa5767560d3a50a91226338e8c4e6436eedbcd3d2efe9dc1e686b15d2f57d553abcfda57dc316ca453a690f20148f0dfa20c1c4a58240aaf7195095fedfa56d839d0230d55ce9a8ca1b9d1acd6fe98d583148ba0f4a4e3413c76e6ec57ddb79428d3a90079f64d3321c791f60d501c3fd02c8403f0f5e6c6836bbc96430c1b48e83350c3a3cfd017f15bee3e4bb1295d821dc98b85ab3145555cce2c34a8142fe50f8db19918b514a165d12ff6301fb2296788760ac0b6d9e3a57770ad5111cde5d24b6321918cb0b0887a282b827a8749733171914b000e7d3c0edad1d42ca60da37f0698554bb2a1749f73b3120dbeaa32951f8217a781a200467d5b569d16f56fc9b7dff0ac524f03fee0617f4c692d94613b1e13b18075dc9f0d32811d4a8949a95f6b5fa46aeb83597adb409e68b2a0177c36dcc95dcb2e7dd4fb7337ff97c013364fe139e185014948fa698741d822044fa3f6978b16afd18138c845587c405ebf7a6cd1c28610ce67e992ed49e406658a0a202feed9709500d064b6f53eecfca57dd4b38363ce3aae9d59126d8ae7e140a373851188ae28c909181d0ac64770df70dd2475809350cb367825b59d521d5e457b4e36aea6dedd90a2266898b753b57fa359d43cd388e7d6c7ed90bc4c2af34ceafe88a3af6ac376fec35f1240f08af4f3eb30bc53dd68e5762e6d39e6b16f63003fbe0bee828d0d7adc58c41e857c2c44702215b202701fc696eae021af19c79e59c3e32627cd571f5db99b17f1772b5d746196befabb0b7446687827f3315b391d5dff069b1c39c00bb143218ef458e3b397e1c99640d57fc8db2e0083d3d22ed4111a8fc9e0e6f55fe6a56e946dbee43909bdd7d516fdf756ed8099ba80b1e17a5e279119345104379a36962ca9c8b2a53c414d79eb09fe79862ca749a9eabd9185ad1df57215945882f5894868a134bfc35c835e040e77ecf077d6a98a73ee022963d70b036be3fe5718280ae52c5d751211b22950c0597aaedd35af41f7dd5999e5f7ee34a37edcf97df54a46742b0252b196eaee454ff0c30685b15f8de087de208906be1d971f0fd89f7cdff2af0bdc96759d6889fba9ef092ad1c8deab0404562a7f3977d211c28dfd1573aebd5427a8773f03986101703fa19cd4ab96a381c76a747f63b63f7a9a3a08e251cdc593a024f63b443b76d17dd9e151809da3c582fbd334fa6dd0221b6d410c6a78ba95bb0154bb8999f619f2e084a6b9755ceee4ca3c7e0481a47776c8814f13054e627e37630d593bd09d5f10a049c66c9999f4b0b037e81ef70615d674c7c7975972994a053c069675fad3fae5ae3e779233b70254fb87f25d44c104afc3d5911b8b695173f9337130e39a02cf97356cb817f6cd23f55ef74dd06bd24ce5887a7001ef576262ffaa99f9bb5e3f55bda2aa0f199115909af48bb4d6b1a0a0847774515302cafebe75aad1f63362b1f38141e8721851c3ef1a247931b3b450581eb5d09027b9e3ba60ae9801d629b74991b7fd65520eac561d47115a85141d9a757bc75710bedff1630561ae05254ea541a7ff1846ed5e164834417556dd562c45543c88d8030bb56451fd5b3cbf10fb0164c5288789d2aac7e7a836e79bc3dd401a8e3e05aa6714ffb2dfddb3037c35fa1ebed62a073b2da42133f2620ae88de5e3f46cc69f2b9b3c9b88e39b8b108059ac6bd493be5f7a39f6b53ee825f4593b77ec9238f5ab804d533f48803e7d8187291ee25cfac4da5d8c9279517adfb09c422f6d704711726c73828a5082b4c7b3d85611b8f496d3e0f78c5c4f1dd1c722b1b11d55861f232beee6aaef8a00fd2eeeb45f182af191ca6de8eaa25ceda5451416fbf6d1abc0670b8c10e2815076f271044c690bdcb64856b91265bac202043a28f6bbeb807535aad4bd89e572a9427c826b170d3862f4cca70ddffb4769d6593a1cc6c42fd06cf68642835fe474a23e6f63df316f8361bab959b768d78e20c03c2a99913c162a9662bd9981eee55922f36792de0af68da04ab49dca72e3d9b0de79df828b433bcf6be073f851a36418c03a717d54d48c1014ccb793577c8393b7cb53cad6bc7060a54cc6363734f6ad388763519ca09b533078d3cfa61d7bdd4c4dd0ffe64d68d501b55903d3f4a1f310a3826ac2ca700de01d656188dcf577fd1b63e305614b8d13471f6f84a5d4b12c5e119870a63d1e3dbd39d3b5c26b09f9d80f8a59ce836b20bc933496923d278a022c00f3aac204d07d2e5075bbcef1e4820d633a3a2b35974f72a033484a91a1d6a9913239c93e5783b01833073c98f358e3465efd5087af37ad60b7285550e776d67ea7019e788776c5a456102358c32eb4e7c28096af88b9a20d8ce379ba3928a10ffd539c106f4927e7ac0f382c74017d6e4438fb128c660affd45e9bb68452de72b574eeffe3ce239d0718908c3800bc7e8ecd2fc7d9754171506017fd7868594c9373a96579fed475a28811649ce5dc8a3107bd0d8578748878ce4998684620931dc3981a2499568c2f61174c3b3fc46a7010468e8ff75c08cd43ac764d95e2ad1659f9db62e9554f811e0f43bb74779d923c8c243d12a5314d3c0c6ec84fe60e1d2b2e2b20d3e64054d62049ef9233ff55223a319c285e4e3f4c98dc95b2ca81230d7fed9bb99fd7d97430eb32c9c11647992bd85dcb47cfd58ea3e221d095bcf9374a6baa7c8333581f62b9e489282483023fdd18451f09bec764146b587209160b3d1d7a3d2e145fdb640c4bc382541e0d84255122d51a710887ebe1ccf29d41b4dd7fd7368d68ada250d3968d6f0971f0849c13c09abadb9db8b08960a18f84f0346ea0aa71227afa55b90cabc062d549b616400d36450b19adb67d7358e48c043fa1135abfca89374c906f8d1a6a845debf6b37f055d390b029c7f4524958bdf8d7e2755dde3b957f0926f9d3b8821ba96044d3cad2d637b973bfb657fcc06ff44c17965acf572ab7a0c87604c7dd1cfd136a0ad02b22e8ef320e101ea09772588e8c5b4d88f40fe1be18d27146a2b9559491949671700cebff9a709f297c2621ca9d5d1749623abc20a326ff5be55cb9435c03bf49b147b1e0a4a918bfdc3642df90b396a474f81d75c953d87b3f3b4e31fced630bd7c481c63acbb84dd31249101ac5277a36dcdfc80d8d9a2e928e9b2d65bb257bce97ccda83b187da8a7886dc96eab93d0864d88c358105f9cfe1ad0f0a8508b5b3985ff95de652e684da970b57669aa3fdfbe590a631522abe8246393639709a9a6cd549e78e3c2d1acf84643e9f554c5e076f75a5c1dce1be20a66722d0b896837b7036509ab8d473d5d2b7a8374d6a575f69d54afe3e7e18f4faf4e917be8a74e55c271b96d966e0c0b883f84b3ef2e4f278daeda2efd3ce770801d2c4bda5eb9b646deeab9fa55324e917e63e4eb6aeb4176cb4e43af3db61aea1546fbf16e76a12fcdbe726b565710e3f9866551023e5fbac0038678717e6ab4d3e92dcc53049e8cb65c00216d31a8869ff4d3539313fe2fd7ce0f53b255e3659e7dfc5f92b7627dd9ba42972f0ba72b888932d870ab97226040c4c0f4826be131fe1d2cdc21005ec2addd7796f0927501251ab26b0e5f3f9d2a1cb346a774e18bc233cc89aa69f5f70e3d5c17098eed350ec419c82837153b5c7f5813bf5918defc8df143063f3fe45125deded2b15892d5cebce589b60f2ada0f9d608983e8d107d8e6482b5f542c6650b014445e8c055aac142f16cfc59229fc9626f7aaa40cefacef777e494e13dfa93d27c201788ca9f60e572af8d65ffb513473dade5fe494cbf7377bd1ed03db2571d65af3be4b0bf27c1f069797bfb67ef0bd8a88c6286af6712c106df9c418d88054e3b46c88296a2e63894d6bee0dda8833c373d6a1b27637e1510fea3eb2fb34ae27354571369653a282a8d19f2c34f9e5ec34555b4ed24327dc5d246df13736bd41021697104f80c85bd0ae920e9aeb4e628fb8aec269d55858df149af298b06d61250b043c8a14a15f0646d0aaa18109d031c449e66dd7336044dbdec912b1bb615fae2a3df480bd64cbed74be65c8f1acac247e80bbaeb6f9dab38c6addf4f3b094d5934ef5c9749053b9159e280034e601731a12d6688ff27ee3581ae289de424d16676fb750d2ccd5b3f964dd77bdefc15bb204e2350632822384cc194cf9130f1ee81bfc3887d3366ec0b48cbbe0fe674281ae7445f03791887873659825680448f162452cef57d783821a73047078a8cf94c416850092ac772ef0b2e48517ef101ee0681b5259aa27fd56edf3c01e6dba6298ccc91b09bb304b637eccf8c673b816e74bd7f8ceffa6b17ab03df7ee9ca4098d24d044015a07df782a309cb6761528272632a6e1323c4e18284b463dfcabed708e4fc95cef133865cdbec8bfdde100621c65a92762cc3141ff37b66dea8fa6e3aad61dcbf3b512467c4773d36e58989e12a636389c1678c191137a5f7f59668c8a527dddcdd0c3fbb14cf48b8f3ea306850a5eda76c57aad06312d7bbfc18969d7b611f512358a7bdf959cc2f41de1c408133ef02b1fb2cdf8efe9973c27536434e56fc1bb4880db7fe901087b53ef3c0de18aafa47c25f1cd62c362f2e5da41c2dbff0e13adaba26c1e0829f027dc0320442e851eaed9507b70ac17180725349f6ea7b59bf39c095a9d10790e87221c7c2d24b8bca184ee95a3ef7449aad6c1d905f688498ae7a0cd1b01f76dabc342fb2be0295ca1484bece3c9b8a1b91e53de2d2587f3607a7f348f5cbefaa7a6dcf61bbbcae9444e2d25a77b016cbd1508c8cd319e9812b43b0bbca52df155d418dacb6ab1360a9e605fb53c6e20588a10bef42d884989e836b2ff16fbcdd2c1704f75dc8c1ac2cc6aeb92726f5d46e4784c70e1e249c102be6da506e5e3c2cef6a8bc4a60dac7adf3cacca8679f8f792ddc27613e44a70fd849b7617e042da46d65a3e6cf425f59b83cbae5b6e911142abd13a0a8cdf06d041435ee20e2ca417e905d2dc49c15b863ae5920ff7f9380a86bb0c86b69a000c157cd35245bf71f9dfdefbd1760af90ec3e554ebc511aebf650633221ca9157226f613f41406872765f8d7b916ff3877266f017b8d840dca0697ec3dffce7912ea9eafb62cc2f2d0a112c9bc0727444b47b62766bddf5b5f26d391f653b6894b069069979d0cf8cc7fc4143626a8420bc0a3866db3860096cc128d620ceff059d1614487004adbdf6b0c4428ac8897dcf16e6b11a692a6b465a92b40010f3480b444d4d2e24b0af8467666905c2a6233bdd6502521b621d3cdd4a5e1f268d65bf6a1879608ffd3abf635c5f0948f3cec7e087485c72b00258ba69783cfe7d611bc41c27814ef5674185791dbe626e1f276cf2c399a4eb264f19c77ee95d94252f546528f629188318e9ede65a927aafd2f2af56ff32c0ef39862d2f92268bc9400afa8ddeff591f3ef99681263a33b873bd9e01a59c8b281da30875245cbffee5268563c7f6f20b9e22d998934131dd219624d3cef6df2f3d2d6401833f72c619d6f763837141dbf93179d0f01375581ebe227185166aa7988eb9fd453d510ca6616cc013d551d23a33a4241e85aac3201284344977d496d768f5d920c5670b1d8bb608efc1b99abd261afb0a4ebe191605cc5c2e20523a13b3b94dd1fb24a27009d9a5b6329336f3516a327642386ba64c8769da1324a8a3d1f304cf0700df2b3e38215a954523e1d40ae96d0046e2929a815bf70785e94bc9b89246ab6aded60d65170eeb49b0ee0a57ee2e57db92409105c25f2d0c1a17b5556d06511bd0991a426258372c7f2b402dd533a75aa175524eb5d6b9575300b81fdb2258bd74429add8aa477bd1182db57107d411d16147defc3582861c68f5ce82e0a0316edd5d0f3cf36825a2c79a33e376cce2e63274b3b41bcbdd755845ad9ed2a3bdacb6fa3fa9484b7b60edeb1d9ef84772e78e39adca14c9fa0bb3ad1f1c17fb9449270e9b4c97b5b320839947fc73853fc58304ee9c9e86f3775f5469554d5006eb7ce9d02d5f900c771806c275ee7022e2b55d111338dd93ad51d14008df4c13d8c03fd9bb3689607e5cbdd499c3a372b487af74cb140f6300cd2dc2acda07277ea3dab57ecf09f1a8f2d6abf7c44fcdaa6dcb1f6e791164004b20b3b4c860f409c1483c7044b6fa445f7224606894e386ba08057a387b48920d4de203b1acc4dbe2b0b4cbdc3f7d7bbb097abbf81e01db09e120eab83def925a059cdb513efe6bc93f0579ebf75638df3c3d7f9eba3c36a169e9d88495c452888853640d93ee70f254f86e2d2d3fbb5e8883b36fbd2da105cf3a75cfe998068203186bb37f1d1ebead8ce1f9383b816f1da2fd0a9e01377b6ebfed4f05bec08b4ff9b90e385736fd13a3af7980c21b0dab58decea8e9545af5d0fb11bb51aeda2c8616960e8f6f84e6c2fc4f50d7e413afe030f75475509fbcf49cbe14445d267994fd3f38f41a1339f2895c0b2969a9bf9c59b85e629486c7bb5107c7a6b069793be7690f7a7c96c93b09a9d610594a156ab27a32d5557a5b1ec8920761cd2f559ad808dff3da64717ea5f10fba87b8ff2712ce322eb3c288939e0007f779a3920f45fdd533369f6f85a8cce21f91552fe03702ef81a926af0e402b418fbb25a6a3dad0ec18ec663126b3f48c341e2725abfeae865352d5ad275a9e3ca20393c64d118968023daac84bdc724a3c522d97a5878ed788cf8e44f80f8803d57584d8c8688cff24dd8c0e881b62d16ea30104d62007a4bec051da7fdc95d1df8556ebdf607383a0825ae503e24661ceb8ba773b793360c3f4ed3b761bd372570cb17e7c2030f07b0b45a7974e45ee6fcf5bd7ae9e9abde5421b42cff6af0c6eb7fc73f4deb67bb4e0b3dc9b4008da30c67071243cda649091a14b89bdacf2ae98dd230e932d9b277d6968c65e0006a8ff63f283f2cd9c21615dfd82e0b24af6ff559c97922a3d112ff0ef4af9d6583bec1f84d1aa8bbae705b9bcf458f5d93059b90fc2217ab27d0072a38aec3229d13266beb3015ac2389a06dec3120c6c04e540886091597919da293a4a8c0812d6cd336d5c5faeb64162ec0459e252d219bed78c4b6bb61c1213939bb3cca12a625ce5a45001d7408f6d40fa9466377caa43afe961b5c1602679220258fae72a8de2ac69c0dc97c90c270e306dbd8eb681ba9c092896b19a8d42665b94ff4d5b8b188f19f7c44abc8f88d4ad7b5df1cce3465de377072c70dd20dbd6779336f05ce328ad741d1e4606dce7065347df111c7d3282c8a3fa4a9458561c04d1056cd53ec5a8ddd6bd4434ac910c69cea0443fd09ee32d1256da44ab7896867a0c97fe4faa4a53b6db5cbfe3812a6667f04cd318f3da127a0dd46170cfbaadfcca863e0d4240ebec1cb2a5952881fe89804892d36dc5bd6484cc78db41bed868ed1b321a680a293bc29c420cffb5305d15fba05c76c2138b986f799b6a3d061658e498204c2b641f2f2ba73d633538eef6b5a01117951eedb7611742c120ff24261bea605e94d21e452ddb9ad27af08ed972b7d5e1eae010ec5d83e4505f6a2b7d9a0bb32a1fbba32a2a8c7823e736a69f516b781fb5354be4b0a67343c009a09b8f656c34ab895f9213531fdeee911d677d1cbc5e72c0fd1ad1f3b4b8bc735e14c3f75f1828ea28c90cda40e0cbdc40dec37031ff3d50305d5a8bba1d53d2f176895e53faa3067129a5c97505799967e55e4e9d87faf5920d71055009fd060ad06691b78583f63881b566d4a06b639c55796b23531ea79c6de24092c0e6fb4d3dc739f6d82ee3ee39f229de4c844aba36432d6119be0d2f02e5f72ef1d95fb2494522a7221e18e92cf22e00010ffd93b89fe60b6895a37fca91aa2fefa8debdae3147fe4f01a6adbfa0a59a5203516b2cc7de5faf821a2e72d43beafa30ac379791ad1e5da3286abecfc7a546b80191b7b892cdd01c25e95506471f5eb74568257439aea03300e80699909cc06db2fd607f3279651f7392f80bf4fc61d66f0dfed7b7db09744139d7374d3cdd18d153dede2a65f26130506acc51d5c721a7989485a145dac9565ef6d3cc938c5a51f31ccc88bb0739920ef8f0a01145f4ddccc74790a22a3099a4b57e31b3a01b4118c9e6c393c1304cc51ca1784db5633eb96ccdc88f8b732815b92c9072dbeb61a2cc1e6b2e7098d883e6174f5af7bd4f129389250926e041ba94d1ac543aab6525f151294060791fd26b668d09302c3482c78e5f3271c0150c437b4e78b1cff6f2b8660dc310965f2df14a1f2ad45cd2759433c4f3952402fefd79fff00dd309c3f09a58600223441c11693cdeeaf0a6100d38d612a759a8e01f753982803af30c7470f7bfd1ccf2c08aa0b187382d25868a9fdf729da10bb0aa0e1cd9c6e695eb2c80c6b6ce62737c3e655246edbce5b8f7ae21c473762db0969dc216a93d4db239f67dea74a1de21d50336793d1ae45e931d975bc706ea718a2ab10d66a59d9d23f76969d870ac279611246ed3aab0f79e11611b312624d78b88a9d1a49dc68d6968f7428c33f0a7a65675826422f7ac058101d2f85663de331345b3a25cf76b7c8fe0988a13278be9599b8e4708526b44a70bc31ac5c278ab739e3e6f0927b72507f34b0034e7fdf43364c466bb75b559e03d4d18c864714eb6061f83a6331b3f59dd62f39bfc2529d5cc68bb6ce63db1075105cbd7d7c4d4ab68c9e65a32092e34e76c3178382a965f49386bd4aae307128242a2ffe3022fd7dc1a824b330b9f032d55573c2f004a6905178a2479ba8a2d5b3140ed5f3e10d986265d8b4cf262295658f301b4d36281611d9c61624928da9abc51ff9a6eb481310511772fcb1c1786203d25295e4a319b9c6d65ccc966b4c5795e6e30b2b3ae8246c38b4a911d1904145de63dbd4470fac47f8ee3eeb3f58b5e665c26a316362382ccc6bf8db7699fa3334cb2ce61c746a7d3af24d8030df6759835f5890b7dd1de538cac1dfe843ad06eba2e887f08d9a49b39246fb26eff5cacc937d63c8d0136f7a8ed2af4cf473f3f0d9064f97fb4fe9938d631f7cea3c617c38771553eddd606ab80bf792f34b44111933796fe1fb8bb104223a4de9e16e17321ea7f8de3306e75a2bc79aa5e9c0ec8dde9b3dd1f2ae42a6a278410afa8fb62c16282f1e3dc1e2f8c28d4538a75b5da7645101253dd43aaa150b273f73e505d490490314606264c737bb344b616a80a4931825043a740ea4f75847e98cc99c6880d3085787903e54c63e90b60f03192234ab20cb41c70c6e82b00e0575a1bb0b0f435831c9ceb9dacd1fab8a7328eb3e28533d5bfbeace430e21758cac204631bf033752f947f78ac2bbd9423c2baf4dea22fcc65c96c332ece9abb20fed504643e82f3ba0fff213635910789a2fe1f2cedef68799fcf4a86d63ab0ccd395d6d4f393f7ee8905eb77df32d97592fb34ac86dcf20cbe5afbf9e9cff37bc34d75af046a09a1781cbf51ee2e0b0f40096d85413a30de974c4d1d16ec06c0fad00716c4e10f8dae46ef3cf27ccde74502b657d3dd26b5481d9787f5c6034083ff88807896da55fd2c951a28f15c8c9e6c86ab50c369e5ba4f6311de505c07c7b85573b5a539785820c672557cee4b58dcda948fb51c95674c23f1275b423ee5bf3a646df19bb5dfa22747857fb5c605669f334d116710bd9f1495e242bf47d6b607c1c9d9c706ee770808484ba552c978ef64daabb642a7caddf5a55facba474b8a63577ac817dc57e48ab072bc6a2cc5f5ae96edc45af41c896cecd8acfc36604db3b7fed9d2d17d429f94bd2542b194a3d3405f46c1021ecf6bb907fdfb4b53fe445d5adb18501aa772c9ba75619214384260306ab68a5ab59161b +AD = 85ddde4720659e80e25168585a354eb1e021c0b5d2ee289f2314dd5aae52bdf1fd44755bb56a6e659111a1d4b4da73315bde01c7d2c15a4f7114aefd68c141049fac27acfdca24e65c51fb1c27d307cd948e13af2963166bbc9411401d124f1ddf20f890db5611385257f52aa05c09b467e3ae886decf5744ec3749e5879f2a60017f601bbee11a66604d5f3d521d2c48cea1794f77366f29c7bd12a8aa51d34a4f3fb52809561b527016bc6badf9d136156c330e1d69d1aab98c7caa9cb46e782a898b4c66e4ee3e2445fbfacaadf9a8f73c4cbcb2a1ceb604ba5637b51337fcbe0fc366da98e805ceeb29feaf05420113b16e1005079c0e88af33f5970b3d7a8b51d0d9f5120a0795063db508171b75ed07705ac6d6bfe4ecc59243091d48865536515e036860affa880bfc91aae2fd1700de15994792aefc4a176e5d49d0f9135c7d670f3cb8798bfbe83fe73de7427e0f3e6a2df561cfa15ffe6ae80d5016096c8875b0beac8cee8fb530fb421b9a8ada4d551a528d0a0b521086f5a2db371a3bf12a2ef861f831fcb44cb2baede907a9306d3e5a3af796e0a50ba2c8dd61fb03727df5f0654d837dabee2fd90eecb7b2e8f303b0d57f97dc6a52d8281574d8457c89c6a9f5d80e0bd86c90ed39b1db4253affee614e8cf1ff05166c66e7d2a2aa2fe8a81c4741339683debe189c126e7f553a5f2dc16fc16672f74aebf94c7e3041c758fbc6d0c7f71c192cfd0fb2ec52d0a0705b05815d567f3d19f9b5d553a2adce9a79159b0e38980851bf64e97f896c028a6df8363cf1f13f4654265a7b0c0b24198efcf4418c32772bafd3980dbc689fab12e85b3ef4a491e2e5ffaa2fadaaf3deb392105a42380797d3b41ef61303a6016b269ec9a9f6e3f26070ff33cb467435ecb325dc7e18728a5c2e882e720c8f876fef10f5bffd5a925cdc9689d934272019e90e3a3bbf63a295f207faa5c014e1517c7d5c18c3ed70e92304d51944dcd3604c999d4aa8d8dbf2a4c69cbbc08635c968a20dcb80f438d43c57851c4cafec0b9568dd6c19932fd3f1294afd16f019f20e40ec87f6f5dffc7717470614b2de6e9000969e6b7e561cf91c06dd379a09c6c25c7841330dc78fc5be1d9b86581a81f55c0289531128638441fc98a1ad9472d74e2be2f874aff2fcf9c941502f59f716185a4c39289ca368c6dbf5257b5dc5e57a420792c26e602e4ecbc4f17c8787004eb88ea091d6b6ddc3c85dc110b5d1f46f6e1d872723176f4c73664ecb4219258fedce19ae22360354fa4894fe51d69434c2e58e1ec665b5cc33bb295053c591b474b6ae178c8834667bef971604279440170ebf3e739a4ff19704e5886767f81edce95a3dd93d1147995e7eb6c794b7be136658ed23cec7c374705ec0d8479dfb44cc7213076668e5fbe6a508537a9157815c6e5187b89f +CT = 66c03198b3422cf3fd8291080f6fb3ebd9ad863e41cdff169becde726946a342ffa0ee547a27bae28cc782d95a90b0a618f717e3beb577354bd91e00a7a57485588265ad2dd0ab946926fea7c754c42751ec7247ee84c17262c0ed092186ec57d6044f0ac9deb21da6714ec7452e441e687e138ff144ea95636286263685419afd35f002830765d810b6f60e8dee0e6879995e9272c798b067d5f99f49e460b86d67c641f48240b61a16dc7cc27b048e8b8e8e80016470ecd2fc4225e29bb127ab48dfe7e7d5a65542176dd7ad40c07ac8b92891d595bbd7afb63fb6f9e1c2aa2fc659aa101f9b6a5c346625acec86fccf17f0d45809f3b9ee81572e5627f1afeed4ba96c6d3ed7e9232358dec01a1231ae7b94ad4675239f3b456adccec439b3cdd45504c5475bbc77dfd242e5e9671d103ba71a4601a7322e0e295357f335fa8d5651d528dda66575d106308338993e615b1c5bd7e95bf3f755ff726b4ac6dd5a43ef061ac9783f8f2804c68f66486f5844969103a36278ee0d10798bf8a802d3fee3a31294bf00ee74f087749ab3325c027d42b55b197469a5312bdc5c9b316b20093154e66605941d58f4db8d46a815c06f209c1dce2363771b5a794dd8d17e93a2fa7b194c6a0b79793c06f002638e5e3052365221232cc4b30adf161cc6e7865cf02911e2ac9b0a75f000e7ef3aa4f3c7438433513da7246d421f208b179763651f18e22a793961e5976a74744696912f22915244fcfbefdc472baee0be1e591d6503f2d9511ee1eededd9f5547c95eb94de134d0c2186109935207a23b2b8420a5858d831ed78202be855cc6b98d6663c1c52e1a0022ed7ebe0eea6b107da4cf50c1c7fced9744a914a66d4604a081587ce4b7e0f96ed408b8a9a2964314b1334a123d5184889958e6467a6d16e7615e5364e09aab75994e2758345511113321a3436db79351c63a282095ec6b99b6d775a5c09ea3f3225716e39e14df260bdefb2ecfe9a65c73ab4b3712ec842e43ccdfb535e3685fa39b4912719e67bbe195e5f0fe6c3aaada2d81b669c4565921f6c183d708b50c3f7172ba841815e9351fe5fbfe2fb1fabeb7cec9bd1dcf2d6332372f1b972b5144aa7ed6c5a985132f9a54469097e2e981b9e75a7df48fa79d0736c6f8a201c7c7d0ac8ac6512a7089514bf58442dbae0529135a7f2455e0ee5716c6610bd7600b3159197bcb20ca055695a36597bf7d3b18ecd08031b4ce3a643951e231c7ad15481e32ed7a3edd2b379c8e96d3288d5b93b562972a04f1b7e0abcc5090cb8655422cf5e9dac0b49678138faec81c78f113255eaa6110e95406a7e7417a6e221a8ec7fb9d55643bd589ace2da70fcb41722e66e0efce932cd7a34218375b6dfa3df1747953b24a41f94e50b84bad4d130d5dab4194665338e06f102f46badc5dad7aa06edb01f8a31244dceebe5e2006d6ab4a31582ff46731b19071c08ad1db79ba018687f3e6afbe703b1de26c11bc8b62fd6b2fa3219fa7190379504820abc97ff6c034f7850e2c7fd335462725db6748fe45920c213c539356b691f22eb490faca24e99f0a044a9f727d0786566ad00635983692ef324bbf1f80c42b269e9d5a8df3249873c51521c81400c729ed7a5e73995928abe94d189cddf2774f1735bc2060bb2240e558699c365dee45fa68801e6a1745e03736ced1b89fc2755565e3b36c2102594d43c451122d94f4a263664bd26b2fb5bc7700319f6b08796864f92d0fdb41710910bbc13aa9cc7baac3b48a24e4f3573f315448c317c149ddb433d9ddd2a2f0cfc81c22d3dab31f184975355b41e4b36fd8f22e8efa01d61a5cbb0e4fcdd273cdf68ac73fee745faff44d44d93c5a111aefe4a5ca8e8e7c075ffdb738cc5b6466dff78ddd837c72c54941707b04d60bc126a3a2fae9540ec2e4672ae13de0d927a7bd363f8abb5a56364d6d564df90a46df9fd59e2c54d5bcb8280415257a6976d8fb24c33330af32600cd1559e0eb05d55b34be456d434bca98252fa531486ce2a24c8bdea1d57d93a550ec586920903a39ca61cbfbce79b8f3a5b1653794872b2c614458177e748f8dfd43840e5bb0d608c26389347673fd0b005f60f52c56731ee5faec6c8d0617fb53d5f2415c2e7906ea0e6d0066354b213b3e94f4dfc311e4ec6afa7e8d1c69a63cccf8326741456a5e0bd0a359b7a37c117f7892969ad7b70cba9bea0a975ada7cf67e0d7255be8d2c6e7b8788b9ff14c5d1449d6173e07b5f9d94560d46f474ab2a67056fe9f4a9fd617a617d23143adb4e7ea35f2d5cc1398fb9ed43ddcd10f28debb27eb13533110005e6c78ca4a874db68c65081ecb8bff1b64eb1e2d7b76a1da3b375dce8a92d32a6277ed847879345717b9649f27e846a701549311c7e69a96d61df616157a114bdf1663ad93a26c28e1a62ee4a7c72bccb9785639eaf1e569decf777bb0548ad9ee36788cfa1150eee3ca3c96f09052ba2300cfb7526b9424b6f7418c27a1e9bc13e4d9868e5c330c051c3885e44714bddf7cb090fbd0f36b826aacbe191dc8c35c219e19fe736198c29dc4fa1a98b5fb1805dc29ecd02f74d4510a3928448b5ee61b5991e46644850a4885bb1ee272883faf27962430de1922d0883e7e80215cf5fe7e8f3fd0e2a49bd50727af793cb7e5b40860e80a1fbb9d5b5696bdf2f741909ab5a713de47716332df6c4f78288edcd6ea130d895fdb2f29f94635bbf2061de55f1801bd6a24294aa199d78021a1ba771c651de4bc08f032fe6ad7a5caf6a6afc6de649b901f783a0ee0fea9b803beeb0f431400d0707f159d7dc29c0c334a918fa08a653137a4a8bc86066c8800e1d171f1dbddf1fab8a3eff6b5023da96f002e7e217e826fa378b15dc8a376db30228f5d6b629f331a162d63e53e5b5bd7ff9ec098b4314285908281930ff0a8aa86a6d89411e6b5bc6b9c9e931623ccca6741fd6d36311e6a8e323a37ad40b7a2797b84694e736d9c135e52d149c760e727598726378cd674b0f4df1c361de0a12a2b8232e611d789bfbea699e8e77b99f3449609caff3d6ef7233df8cfc624376c905eea46c6f77c0b01d288868a19db77e227dbb5bfea5cc3f49d219c7477f7f2b3447b0b8efe08eab8f69579d727555e547c13ec7ae13b83386f2adf634140c311b6e2759cfb9c8aca1c32bb7c002d0f46ecc526916589a29e328ded9679c2163838f071b5b85b35e5e7d99c3c45d25bb9d37d7bafb8350ad4695a6e0cb7ea7d93868c30bb54e301e21147696b7dda156226a5ef8c62121e6b2cad0c4e192116192012468eaad46bea69a140aa3cb9056dec87c911636a1e55695b9e5a27c63cd8c03f31570d4b7507d13731ea31f082b33c6db8dd6e22282f9790be41350a96abfc4dc3de78e0a698930f540dbda3fee923a463a4c4a66bf00bb2cdd6d22b62a47af96b78b1f0f0a174e4ec5b785b3820f47d3c8cc1691d4751ce4e4ab78a4551956158a36717dc35488e890d0631241906db565603205e054815aaaaf17945c3372dfc7193369871e2e88fb84c15a2b9071101e1208177fc18397e6af17b5843e1fa75392d8d3ed214975d50f2b19c24e83f010f8c394ec1edbb1cb912e61627d2760b0e630b986bba2ae113b8f3b51ba00ddc495520274a85e6f6fa7573ac4ec6e2a86a1da9199ceb007aa6f132e5ab8ab8fdca7c829f452ff17524fec475b8f485b29fc6f0d972eea4ce98e242b5d58f6ddc1b3a71256de1c584c9914a3cf1e469f0033165d934fae68a7559011dac7a4e0c72e3b398fab8f8cc2fb67963b0f9220f410e5ba13026a27288a1d49edfaa51e8f220503fb5ec476147cbea975994fffde3ddc51bb189c470078978d238f5287fb2629d23989875d74b006a4122f6a342c996d4a244e8c5e4b804a44c301ac4d6054181a07964b279e0a44c158364395a2ead40053d2f3350ea0529a57552ed835513f533ee0c4b94ef674f31851616a4fa2d0302d13cd4aabf5f96ce28219c0b5bc0e5410fe0fa387ba1009a6f2280f9e7bbe20c33be5eb411a5f6327714b3443b4152cbc54c4012473237dd98b0490fc4228ded74afc81be2a58a22e03ca987faef5310e474f4f5a183f6b7ebede5a8df8a0f94a87a41852826b29466fd761f40b416ad0f263dd34e5497867766a361af1654c3fcd6ee7e6bb3f72d64cc980f04305b63bd574f116d1aa35b4bd642cab0cde6a29139aaa163805c6c40384313d4ec6027c891023083988c1b0d2edbdd9b1afe102fbda285a6f897efff72a0d7fc19a3cb6756cfaa2371e13be3cd167cddb90d525cba7da69608b9995cef92a6424a14df6b860ef0f09830fd7189497a432347680de0f463c0aff82df8098cc4f7753f7680c8c7374d01046b05c63be73f3a1623be778fdb0bdb90d4fb4b458af2890d15f108b0927304c91c8d62cb148c35cc93797db3ef9bba1014d89859a91da0c0a971f330600d71565d30e9c9ea8c07e7f629e1a6d578da04d37e597261cae8ab7d9a952bbf71573f1bf70e064f36c032cc624e3c980e5ea46d36232d61a57fa598347b7fb6b28401e34628b051d6ca3dea190d1d3c343fcc83175f70f77a8fc5e8791b9788989df1e37cc4881648f4fc673772003079adae55c83cf02a894b98561e4a6e4416bea3df18d6f702ad5c4f40faedec6b53cfdb5b3a52d7d43b97ee23ccfa2d30c7264ec555b15f1d9e7e19cd9890a7e8e01ff21d3b8b451e50932f189a420d18e7c7e2f103332c78c84600e5e8fdedd84f055a8b39be9a52782d47c6205c0de41644b09c0931f2da269a7e58e669f3b61ebda28ab8e3f9b83ff3d2bce37864af494860b2f01b000abeb737fbeaf8f9fa6378366606dcd0fc33031b94f9a7a0e562c08ea720a671ff92520047f69b138b4e032c3828874ec4c29e49aab302089956566372b20c0216b601c3958ed9691bbd89f1df45c6613d469e3b9758a70c860fddf768b10a6bf70237a454a2c0b70dd5d02da612a91fc5731513012a4a6fbc16d01550bdfdccaeca22bba104ccf6aeb19f21d4cdd3da231af8ec5bf2a726ee9cc7c85b8ed46d2f6fa4f1b010b2561fb69690d5a9df76d729450a6e139962bdaa2bec0254c5a252b97e7ce7eab1817f454c6121130952b8c40628065dc9b77b0f953552f5aa3ff983b6a51a51dd87c2b51a18e14adb8c80e002d0b47c61cb357babbbe3ed51d371941a8f111837ecf0e45020cb941de170c4a1b5e61bb928b1b11a8d902febd2ba016771f171b8a7ae825fcc4642d95649d53675d0027822e4ff79ffd302bfab1a0ff26f3648c7ab00c10f8d95f21e40ca2b40691bd4be79bb9ccc0bf760a05be4728bbc0a64e585207d1d09393a80d5f574442d6a933966777ab05f699c4e84aabbf753059287e7261d972745906a4fd8967bfc80ae9b6ec2ee1b22a81775f4f24999987365ae2dfb6739902ed51b9a4394fdf29f216c34567102d9db301661b09b728a79e377cf4bdfcf5c83b110a2e267abf6d40947e643ae2ff0c244af168c9f33e7685474ac30611ef95f218e0dd280899a92a41e7a759d03ce3709c2a140ebd35e199f1dbb96f7351cbe1f3de8da8c49758a49b9e724ebd3220ed6f51112944f70c0d1e9178f68a2c9476a913de00abbd1f5bcffa646f926da77a9e9fbdf81cdeaf7f9b13e843afefbca81c93614f8f1675325965b5836b8a77620a5ff162e25366718d8da7781e1a7e01fe2e9e56cf958c6273473abf5c2c8c7fb209307544e1c0726d5571e521621b18b6da3064b473423536b1b76ed75b21b4ee205d7ab5f081bada63062706bd155672dccf84614210d72660095437c6bc2213d9c904a4ba1bfda14d350fa3dce7141e817a50859b1a74aa64560b2ebc67add9f945b6e85577589817078c8ae54a9fc311593d2cbdb6692b089ee6264cebcc7719753f80e30dbe48b64fcfd1037fb9ddab69a5ff9e5898bd8aa947d9ad827c26df67c6786edcacb3478a20bded1ad8c48018ae0d439bb5afad5d39bb8fbaf22d72ffd759c4fa2e94a5a89f41358ebdc4c3aea5110f1965a049fdadff9cf703eabe9628e2680fa4e70320d304ecaed13f513f27220db1916ca1500f1c2e091671fb71329dec0bd6e310c83e67af61b8ab60ee1a8d559a508d174648b1bca451ef0ab0ee2ef74f4fcfaad1cc5ea6cadb8f1bffcb1f2c05122011ebbf6abc16838e452fc47653821589da4cb5bbac10deeea3ba0e0a6241338e64cc78d7a923d018e8b5b51c4442070e5b0e6f1e8c2b83791e930899c5897a602c401c1b85827962ff56d19c06f5af033059bc7fb1bd29b65f66aa5b4397834e846935e523b16438a42c1f990ebe4f83182163ca5fc60a4c6d77fc182e81fcda943a962e9e7f00f6399728b48bbe38d8178fae3582c8d9998e49df5f28e32d541636df3cdc8ac00df45db12da2e5e76f366c1ea8667ba5f3542d21f58ead7c55d06a4b35251b8f77dd34d3de262947379107a06d2f4891ffa0ad3a3e5bb2bbbb978af4953310d4cbe5525ab344ebb98ed24d003600de8f3af36ff3d0a7efeada963845d573685bec2221403b994f97b1e714fd7dccc300b62c2a516e9c6780983062eddde0178e93fcbb2ed4f06f60767356a11d22ca37078fda1ddb3cb907d1020f62ba85d09044574ba28aa3df36988eb8a41e4305e5b0687abe43a90e4f68f0374b6b05049aff5b065d7688cbbfb0e96ab03df38903bfa1c269f43a114085eb4596aec87ced88701b42f0b7426389727308bf10aee9d8f15ebdc411ce1e764a290a12faa2d7c1126dc7b5076f219b826ac8d380b69af7f95d69fc3929a97f5c7da1db6270e9ee1f2a5f7fa3a1b6bfcca00463655121f681d3a627d03efdf0b5fd045fb153bc4488a9a8b7264373c710ebfdb1c267fdca37723b21d5c3eaef48e784bd76e27c133cbc24d114f610c79f2a1f2c30d87ddba395887030b65097ca5566eb0361e70615b46d4b86c2759f1cc2efa3915b4cebdf51a745fb3c6cec69a1fda2ec5e884dce228e30af362815d2d8b59a14f89606bc77439042109369a9648db7d71024ed6df06c8ebd22e8623f48feea77f48b5e88827fafa84b0564151a5997b7f29c4d3d18068e34f2690a293d54003d0ea8f3bab9387ca72212cedb5f4602ad047dbffae2ab3a4cd2865bf896cd96f78b90e4017eb7e3c7092320c0a37f81dd65a5c4817a4e7053e6d2bcb23b11e09f681587f3a9361e974ad54b88c72c296629b1ab754d25be15e87c414cff975fafb3d7cb68167b21f1889685a48966705222b525fa47143b00041df94817c275d93c2550fdd82471cb3cc1b5644338060b767e807bca902c180b3e535c77be2651b3962287b6d1f6403033de4e0aa3a20615ab59d290f4b167325959c1524ef216dda2ffce86b50cb6b56b62a20a043d9d78c704479c22340151df5a1907670f8d4f8c90d93f7b5d94d04a4d383914867aa3c0e5ac85fc299a4d2801a3f80f4b0f046fb62c1c8c539a83b21c7549df0afe200537b52c80ebdbad8a438e430cf876cbbfee9ceb1bc5270577c27d53b40ac153cab377a565b1a9fbdee8bf8e94839c0fc04f7f664383bc90d56ccd1cc01b465c250b158b5e6f321c20db245602d10aab80c553d52f17282b095b5e2234c6c689a84b096112100359816cef7e92029fdfc048058f847cd2f2369ceec9fd171a0487bd7acfed6b0319832df6d59affbfd460ce8d12e4171da0f094e872a2888fe74925c5ef0621c4edad337f7006086748913b24d4d48ce36e662fefbe672b6d476456b1fbac6d80030ab93da93acb4a7e10f955547e7e20a0abcdbf909f05a2ee2e0b7485fa16be652b9d9fbfbf01f082488a81022bdb69af9e6fbe753e9eb92a1762afbb4df49f83ffc0cf03db563aa96fc5ba1af6d4d7eede6067749e8ecec79b63e09742e29e99e1c960dfb0688b0222c49ed919379ac66e3fa1c72645122d1664721e78fefdd1224c0b886f6e214e37d268ca9acab76ab3adc9f5549e5dcdbb3d31ac34ac472894d004eed71f88ca2377fcfa48d3ae43805dc612891dadd06c263ed8617194f890bcbb964f010d277ddce1f6682e661577ecd51a4d5421f00935a5b24fef0ea1809fa5c4fe9cf8c453046f61136ec8872915d2462157d73a205d56d77bb83cf16b88cadf6430c0e5397fae1f91a6a11b177bf04b065a2e55df81d5c086ec8dc8a0a660eed37d41fe4d8b3e3f22238e2a63b6e4feee1fe9a140ed37b2be4193f75c2d038aac7f6b7dad2a3b37e5b9b660615ec1db77a9b7ab416f43e66c872b71cb67c9245c757dc87723ab3b9544fdd8a16c9486e8ec3c4a44cefd98535d6e5683426c1cc8c888b8e0c2e7528bd7eb89b80d9e00969efd2f0a0fb09845426edf0d1d9a0809648e7e46ea0a8c9988bf9df475be12a72c7326c1f2bf01afafb190cf6f649133c7dc14ecf9b8c971135bd303c8894bac637e08257d45e1b68edf550d896c41682c002396e8f1eb7c1e2f4e0ed9b8b7010fc7847e6fb1c5907c17b2d2b7cd24c96f47406bd04cfcb2099d82dc2902d6f91e2f8f3a05bc62019af536309e7847fc06c10dbf7272a1509079fd16bb16a85ae2e078f97f9ce66bba66d6329c7ee70f9688f6d91aa38b25c7f4884658a72ad8cbf96d7d7a9652673273ee1b3d4d17780dfe9ca865416e318bdcbe9efd8e071fcb15ceb0743df5af4f7d598b31e38677e65af61c1109fdbb11fb11e3952e6c3ae8abc3f894ccdf205ae55dafce1dd05dca6b899877f57d712223dde4e7fdec7e0ed4f0a29ad359e318eb36ddb42fb205adca400f5b2615947c4f0ede95788093a1152d88acbbbb272750823151e245354e658452a95f21fef05bbfd98a10c1c975ad1a08c59fa3efa9fc73588407a83d0b26a53f1b4115f83780bc70ee2619d7374ca45b9e200055df1b93977e17aca89a009110a6e74caec7f86114f91975bc6e8bcdc7267ed2920cf12cd7137840628e1b8a0ea181dfef18dc5f74e752f842ea91bdce4b420ee709bca72c4514e92bcff55902e5529d77fd95f5837c8f4fffce80c813630550a0dde24092a25f65eba90790a06f4d4c3e739aaa8194a147fb32e81c71d3e8def79251c33637661b0a621a2a6b302dea00d34a9dbe9b621c1dabd0464e85241aa6712d90b4287cb23c17bf1e4d0e6dbed372e6b49c4a843305b3b0e5cab0b0964a93ad0bbc99ee711afa7f2d0a296a375fdb3176c65a957ddd9b88e9d57df736acdeb02a71b924cc2e972f51ba68a597215678573bede9ca5b3a0a2461b2d3b9ea57a5af8c91d40779bf917ded32f14a66d96e28e1415fea1e9306654c6b84d8a64243a5271c1f11590423c718961aecf5f659b49f67efa78e02ef2524d0966ebcc446d73d49ab7ec31f0c009069d14ccd63f926169291b83a3e37610054b0b964741e2ed8771d20bfa225eac0280b4d5af0c09d3218bd497a035536f5af0816884d606f1a872b8161a266466b56e0be8b80a7bde65ac706eea8cacf1749e5e71ff9fa3e69ce878427a0728d44e666eff977026abfe18cf3ad156a943b917e72ad65725a9a8d60b7b5740494fa63143a7f2a94fe6d8b319be55d6fe1a988244deb798f345f30dcafdb6af9e9cee9e35733274bdf3896750897371563ed2516c4ca6c3c3c994b48cc94b67e8129d234a0e19dabe39e500214c0ed5f0e5d61b2f58d7355d147102d93b2689bc5185dd4c0a18efd11a307b887d4d0fa84fd992731b3a80dbd027dd36cd6933766c537e8e9e27d35d5187e8276b0f59fbe7b6d629d3416b782e7981d85e1e890853c3aa94a93c1667a55044ae42badefab979fe7d525c6a180307c5ee3a9c3933038028c3e1d15d1e78fbf53b6ea61ac5e02db0161719398a31570c55f73cb47ddec8f99e3e14af5adb8d5cd179f4204d080331e75bd391b19d38eb81f148c36af3e8a3ebe76209bb75c9741a89b5d0708bb0fbb0945fc6fcd6ce142d19faf0947c338dbc8d976963281866b5216421c00cbd77c0907d1e16f5e925319cf6c62f8c6e8eff0c2f831c504e7a1c0df09a54e2af708ceef39ed7d0f63d83429e9b0920c03cf85c2244f2fbac3958847113bed577dbde8992cd91be5833c75faedd5e2005d4f7b66fab8fa9305927406f863d1795dfe04028940b765bd79de6972dc7094fe1c2503a73d7b50208835216c23aab3e47094587549fdd74bb50ae21cd1354daab632fd0907e63f4c2b2d39d7fdc4fc216bfa742b4608238623cb7fa01bd851c1e7ad5ef5215173a71f363fbb7dae8092486f4a1549e32ae53b14c1343ff7fb5e2b1487d9c594a1b56e22625d275e41535534d225b7b2c9deeb0d30dba7188cf75d680d4545ed05044a0661c690a37fa14a73ba8c68357e2c948e290b5d9a4b51822824614ef2938d19ea4b650041f59f3b548f0a305b86f55e69760f37f09dfdad62651aa5fd84eef28a4431136b34a49c9bf1f2891364f86b0aae70b0414e821e3db1533b0f1db5fd232308bf118f858aab5ae974c10583f61b283a3870eb82aaa8ea3c4e2ee3c3a3d7169aa8e975ddee7f620f6c5bcf3eaaef0101b62cd54495cb8809052c9e3151690cff7c1efcc4f63b22472111a7c5d9d7d2a2be951510f60dec8c426f14700c8630f8a14dfd359addf5d9b7ae031a745ecb4e17321b385799c90f924c4780287ac187530a40b064064b9036cc46e3f87c4d23aeeed1bc22a5411c7c503594d5d1261eb9fc4da242493beee9f671485a978a32e965faf9b0e2c13f78e31e1630b72d35b4be691e90b3798e18223c1b514b39a8e1eeb7897c22fdee1e33fc76e2b2f9298ad4fd89f44163aaab23d754d98c7890e58708b81b3832aee31aeca85e76416133710aeba0e5d9f17695e607d09ae3f94be191553bc39c6df03cefb4ee05516fc02d66c9866e4eb0d89a662e309379a347159db2e070abceee226f2b8b62847ef7c51d69c5f12eb567fa13af4b4f90b3f3d9d4b6a3f68bc4dd77075081e2e99833c18b154d0d6ac360141de2a25af61d551f10a34e03e1419a37409b4c177c51a8d248157b411868eb607c34d2daaa453a0954fade5eac45d5f21f50efba8bbc9c87ff0435c70f064b42cb2d158384fe0a4d9c90030ace7723af0a6c8faecd8f97f9850e2a489a94ebcc655301e2e14711de9eb08726638a9ddb57160c5545c152a26860a17dd18172bfac138a300f60431fc49eff18c93f71400e887f878f4dd637cf5df8c1e2b12c0f87e31ba2754ac1748479eda0c4184b528554106128320dcce349939e5e6cd3434f86dc7adfee28c008a21ddf9d0dbc87ceb14cc3afbef1e06fb3f9908a4b14f5e6c43b23ba783b75a6cbfa2ebac6533661b8c1143a34e8e2a9723389c4b7087dc07701c53b169894551084aedbb423bcce2f470881fdc7240c26b3b76fd6cfeebf8eb2828b4741e5e8698b19fa0a44703cb4e4c8ed6a7e4d6063f5fab724e08a159f4f04a2f351dcfb6335ae6697dbeca25c76b55e6ec9045eaaa8706902df492b8c8cfbf68c4cc1be5d1e5a173262e38bde051656ea85ffe35d97f1b25f6a47381bc327a946f7cbf6210adfd957b2921 +TAG = 469e3ef168a64945f76d7a2013f27b68 diff --git a/vendor/ring/tests/aead_aes_256_gcm_tests.txt b/vendor/ring/tests/aead_aes_256_gcm_tests.txt new file mode 100644 index 00000000..8b7b3859 --- /dev/null +++ b/vendor/ring/tests/aead_aes_256_gcm_tests.txt @@ -0,0 +1,484 @@ +# The AES-256-GCM test cases from cipher_test.txt have been merged into this +# file. + +# The test cases marked "FAILS = WRONG_NONCE_LENGTH" would succeed if nonces +# with lengths other than 96 bits were supported; i.e. those test cases +# describe valid outputs for the given inputs, and they are only rejected +# because nonces that aren't exactly 96 bits are rejected as a matter of +# policy. + + +KEY = e5ac4a32c67e425ac4b143c83c6f161312a97d88d634afdf9f4da5bd35223f01 +NONCE = 5bf11a0951f0bfc7ea5c9e58 +IN = "" +AD = "" +CT = "" +TAG = d7cba289d6d19a5af45dc13857016bac + +KEY = 73ad7bbbbc640c845a150f67d058b279849370cd2c1f3c67c4dd6c869213e13a +NONCE = a330a184fc245812f4820caa +IN = f0535fe211 +AD = e91428be04 +CT = e9b8a896da +TAG = 9115ed79f26a030c14947b3e454db9e7 + +KEY = 80e2e561886eb2a953cf923aaac1653ed2db0111ee62e09cb20d9e2652bd3476 +NONCE = 5daf201589654da8884c3c68 +IN = 96669d2d3542a4d49c7c +AD = e51e5bce7cbceb660399 +CT = 4521953e7d39497e4563 +TAG = 2083e3c0d84d663066bbe2961b08dcf7 + +KEY = 881cca012ef9d6f1241b88e4364084d8c95470c6022e59b62732a1afcc02e657 +NONCE = 172ec639be736062bba5c32f +IN = 8ed8ef4c09360ef70bb22c716554ef +AD = 98c115f2c3bbe22e3a0c562e8e67ff +CT = 06a761987a7eb0e57a31979043747d +TAG = cf07239b9d40a759e0f4f8ef088f016a + +KEY = a6efd2e2b0056d0f955e008ca88ca59fb21a8f5fc0e9aa6d730fbfc5a28b5f90 +NONCE = f6775dca7cd8674c16fdb4ee +IN = 5dc495d949f4b2c8a709092b120ac8078cdfd104 +AD = 86a597f5e2c398fff963fcfe126eae1bc13f097f +CT = 04416e23586ee364b1cf3fb75405f8ef28fddbde +TAG = e7b9d5ecb2cf30162a28c8f645f62f87 + +KEY = 8d6ed9a6d410989e3bd37874edb5a89f9ab355fa395967dcbbfa216ec9ce3f45 +NONCE = 55debbb289b9439eb47834ab +IN = 52939c7416220822a77435a46687f134cebc70a2f1a4c33d37 +AD = 7790af913d84a04c1b72d4484ea2e09fdaa802d8b1733b8470 +CT = d7bddae8929ed6bbc9ac077e2415d9fbafae4a0432f8f7eb6b +TAG = e6383b16ed9c32521dcaeef3a7b9b67f + +KEY = 525429d45a66b9d860c83860111cc65324ab91ff77938bbc30a654220bb3e526 +NONCE = 31535d82b9b46f5ad75a1629 +IN = 677eca74660499acf2e2fd6c7800fd6da2d0273a31906a691205b5765b85 +AD = 513bc218acee89848e73ab108401bfc4f9c2aa70310a4e543644c37dd2f3 +CT = f1e6032ee3ce224b2e8f17f91055c81a480398e07fd9366ad69d84dca712 +TAG = e39da5658f1d2994a529646d692c55d8 + +KEY = 630b506aa4b15c555cf279dc4a7ee9add213219d2c68163ceaeda903fb892c30 +NONCE = 79eca200a5cdf92b28be5a7a +IN = b12e6f1f8160cd65278c48f68ad53c8c82fd17c2c39bbb109f077c17fdcb8a0b3a5dbf +AD = 46cb18593b3b26ba75e4cb20a252caef31d00be31093d2369e93572a393d650c68313f +CT = 9a9ad1f78b4d411afe450d2e46347a7df98f39daa4fd478b9ab6e6b417878bcd52743a +TAG = 55453a003b021c8a247379cdc4fa6da6 + +KEY = d10bb6641e9ba0a3f1b016317831ad4232f81c2137adac0940ecd7fa36de0563 +NONCE = 99c922d37c95ebeda8e81ae8 +IN = 8b9089df5bb048cebbe709cb61e178ec768515a0031288d95b7cc4dfffeb51b836e126a237ec50cc +AD = f1cbf6c83493b2087d9f88e02121a114f45ed51817e46ffc0b66a783350eae89c6700db3f3be5f4a +CT = 8a838c51a8ef8134481e9951033295ae686624aa4df72f869d140980347a5e69a6d7cb3d7119b303 +TAG = 9152bef766579a3e9a1e36abd7ebb64c + +KEY = ca665229adcc7554f1b1c8f50e7444c6d4059c525f9c0da1406ffb35d50cae97 +NONCE = 8e2df19123ce0ad41df416d4 +IN = 12365eaac86b270e9c61b3ae7702a6f3583ef4accb80a98454c56e34e2ab97d8afa23ddee34e7e3a522497f985 +AD = bf539d8e9e3a02f3e5834970e7efd40cc7cb340a075041428d6a69ed9fa5105e4bc63720be9a7040ce5b4af6e1 +CT = 96027efdcd4433df8e7f6181c05be365cdce550b09d45cfc96fe258eab6d55976a9306a0070c9589ef08cf7a42 +TAG = ec9fb5e79cdf8ad4c8a79c900975159d + +KEY = 5033338bf7526cca0425f4a620424662ebc58364c8d985d130e525fd1f598f3f +NONCE = b40842b30758aa3eef7cda62 +IN = 69a62b8c5f9b81cebee3a9345f4e49ea089b0d9c1cc57b4ef707956d0287de83fcca6d8f5270a9393e00693075028189bda7 +AD = 3efe0ed6fbafa61070388abc59c0d06589309736b02418df5534c8c594d61a2afefbee17af8283d01634b6ca3e8e2aeadff8 +CT = d6184677a21978b6443d99d7de1fd01c6b6334cf01b7e7d58456267453f4de96708b62301172c8c87e970f91c5301e0ff61e +TAG = f8ac7aef208712845d137b8b176c89f1 + +KEY = f33c39140999a2cb69e43129cb5df18fffeb3513ec3560792e9909784daee43b +NONCE = 70608463f1dfabb1fc4451e9 +IN = e2802c4d290468177fdb031a717345753cd7c3028ed07dea428db84e7c50c3eb7b24f7381a167b4ee31bf88dcaf5251fdb90ecbb74ac2f +AD = 10a6f463dc59d4791b3c2b4c93cbe2dec579a154962cb2c4cc77664e8c2b106c574fe115fd43dad94b8b1bf2f74820e28435b4444b2b82 +CT = a27419a46037323c033d7cf2a716777fedc02a5ddd8bfbdbca82ffbdea3037bc1cc80df7c5e502b32276ae88ad6fd0f0cfe72604648812 +TAG = b1ae330d47fd399aaaa687e141e23fc7 + +KEY = 2121056225a7b2316a93c4bfeb970486fa9c586c14ba8b40be5844a31e9449c0 +NONCE = b4b7d1e8fa7d0e2334c92315 +IN = 2038e2c6cdf5282f081292448f8febbb60a1520fa3771cbfef387f48c5915a1438ab709628e8d4c81623ddbc2f6f159c3c9a8922905c4994269898b8 +AD = b07f66508a39c4932b04c16172d6462d78273cd9463e52284bb73e3b8b8e7047bdf10c5ace1f903e5a5eacbf67c9351f82c74bda140df2fe0480c80a +CT = 7b54618ae09b37ee72e51873c82cdd20b6dca37c334af89548f52f34df3a757e632cc0d453fc97270898eb50ce2f2a98c4cbd4cbb22a5b7c7564406b +TAG = de3a9e2aab2439675c4f7f0b61216d5a + +KEY = efb15235bc91771aa32d51472877b0eb364de2f88766908eebc6e6b57a702099 +NONCE = 1a510b42dc20d1d0fb34fb52 +IN = 4eff604dd4bba67f143dab0728b8597e269d4e0ecb4ce80c9850afc645d96da239d9db360605bb4268d74e1fe3431a44242ae862fa2340c076db13315f615b85f0 +AD = e8dad34f727e77444a96cf06425640f1fc80fe3b01dafd1d91476140afe8204286d01b0ebdadc0270a3d218516ff5f08a69a7ba251ac325983caccbe0d9e1de359 +CT = 989fef0145e2fe93b9f99fd90123632d83d9df8f37d8e1f80dac329dbe0c214c2191009e31232538fec63a29665f0fc1c77dc86b2f5f2050b86b3ae48e85d63116 +TAG = 6816304faeb45da4e4772f5c35730f8a + +KEY = 998c22912d5687fc3faac262a902783fcb0c738520b5c4135a8dd2cdbd7b0dfb +NONCE = eeb535c5bd6edfd696655b60 +IN = 1f6ae10d425923c882b7d2f556571acfc10333ec665b07bfad9f8948a3b8c5e5f163a4e99d4726da1a35359c657c848f327b7fd9b5f61987440ab12b9399db24715715a2d1c8 +AD = 9a3c76dbaeb69a6481a89318caeb6358267ef51a1a364a48387bf77526837c9c70afb6f105cd47d2b976dbda7d2b6bfea7b76b135810c53437472f7b80ffc8ce4dc95c7e5045 +CT = 87f4e2c80a4f15f92a8e94f468e70fe7f0e0f83c0a7799a1d465043d25210ac6f0f39a5e9765b4daca637864d1bcc090d2ef33ddfccded2d2dad61dab443b3cfcc683147c490 +TAG = 0744d928a5b5ec95f3087cc2623f0031 + +KEY = e12effa8da2c90a5d35d257c07d1b467991bd5f75fecd7129aea4e26b9e27ff1 +NONCE = 4edd0b4cc349d37eb77f5576 +IN = 21dc87984edca46a629ed95ffb04471397da8806c525a781d9a71818422e344e4af577f38e7cdbc556d4766770a9a3c95bea59ad497fe0127816ec4dcecb6b999486719b0b86cdb2c9d09e +AD = bc158e6570fb0a08d73367dba65b80a8c8e57ba6c7b99493ebdaef0424e18d8ab1f7c88670cf51c4d91b77eb9ce0f89a46ed1316141e4299ec6c3d6e712ec9e92d3db44640402aa4ac00ba +CT = 07ab8c623d683ff83030392e2864edd4b8e3d296d60579a226a8d2aff6bc5af3c4598a18cc1e8d7db4ac8eb56a082af864ac52a324851dd29af51a0945cee4bf303ea111b9b627aabf5ff8 +TAG = 53e69b7be969c39560c016c6bc1aa4e1 + +KEY = 3d9723c9235939df8647529b7e4a57b8536476d5b71b424e2c27ba4d0b82b0e8 +NONCE = 60163d2eb7822af7fad64c04 +IN = b44face0f45e4a8da19aa0c5cbe3aa960ed6b74fe3d3d9201f52523dfe7651756b2ce482e759c87bde4ec670a0e808fb4883e437c7cbcf2f6470352174327824200cb0897edc4def1736f51e229addaa +AD = a4b2b7bf36a70a5246feee52c474058100bc618fb0e3d32e8c1f76153edec47fab3045dcc7eed9ca1886bb2593703c9ffb8883c45386d2f4e3fbb0b7c722d19f2eca94767174d9127450549e8993ae33 +CT = 66fa63ded066ac67bf218af7bc21169a875f4bd695f44fbdff906f0a9b8a067be721fd260571c53a8b51661c8d49fe178dcb28c31deb3fa71b096b387f9fc8f3657d280404c05d2b6443eba7e60b562e +TAG = 59d5450872510c4bfb590d9497524331 + +KEY = 75b0a20935c4a5e2126ac7420d632bfda8d41bc947c2402bed4759b6e617ff92 +NONCE = 0c3edf0dcd1125d7e263b897 +IN = 8edc98e70030e40bea1548f6f56b4561272be0c333f3b7ae53ff3e27c35a91b1aa42d39e6305ec4811e75931e5cae2261d88a6f7d6c5b05bfb48802264e9cac782411f1de579e29d464ba56840b126a3fad07f01c4 +AD = 7e35081ef652424da6304852243ce43ff711da17f7881d5e0433b1ad7535e755a8531b93d67ce99ffe66e59fbb24f6b42655524b39f2c84daa5cdacb5e7916266c05711a118b2128930b95de83ff1a67e53337474a +CT = 858dc74dbec6fdbe4ef15a3596ff7201c8f4fcca765bf5452f678b1493a66ed9852a6fa174a73099acf951a35699f33289ec50625538c01eaa456dc658013a29e4d133b856eb969c1f221f99e11fadc98b0ee08243 +TAG = 3d8f17838c4fc69f04d7e2b76eebbc0b + +KEY = 7a3823191abcebadb7970d1b65c2a8dab8a908151737bd5400b3b6c0d59e3b08 +NONCE = e32eb00e5106097e2ef0e8ba +IN = 220db5400dce604adee4cb698cdc02d2ca61622bbdeebe347b0bfef55cc45319b940f93773a9878725c5f55485d7a26363251b9ce0d3da1f8f6e34ad5329dc9f752ec7dc12b2d259ac89a8059085996a431a56cc2dc2400a26b4 +AD = a83b6dc78931cb7500eddcf77792e810c1edbd5f4e33f85018807a8539a3cace094fb794fa9ea058e82c830d42d5a6b3e22b7785698774aec5c73edd92731c51106a23c569c0c0fef18d13da1562a9a42aa435b243c4fbc9fe42 +CT = 5ce6ec0e1d67ced5a6aa46c909b9b8907b372be03331dd0940ceb6d87e928c14a1a1e8ef9096c9b63ab4cd93242ec7be7e38b80643f9c52e7e90ffa06b8f2d238fa63dcd97af74ae37802d124623b8a272e68ca18b3432b7c017 +TAG = e21c61d604253bc5b5d58283756b9eb3 + +KEY = 53ff6dc0af3e89fc2de7370caa433f539d068609fcfed6400a5b9fda4c83e3aa +NONCE = 91a824c5e023283959858062 +IN = fc23e07b4018460279f8392e86423ecfe465b25b60382f58995ef5fa1f9ca235e4bf87112554aa0e72836831d7b5f39125df11518b8aeb1809d804419beb05ae013482213012e4ce980ddd1c58e11608b775d12b450ecace83e678c69d2c5d +AD = b3a1db2d467780480f166859e0e7aab212738b85e88237c2782496c9c503347de02f3dad6bfc671fda71a04ff1e4661767c11303daa0c36d944346d39e3e29ec63d695cdcd83b2b57181582c5ac692b13e4299ab5e86c59d09c2dc6194ebe9 +CT = 88af588ec33bdac2cc748a01ee3eec97e5bbfdf69de1d66176f42b66383bbffa8b185cdedc25b11a62237d334d68120fccfd68c2f9447b3b8e1f623f33f7f97ad8815d29bf11bc0c65641ba8fca4a087783f4694fb1d574450191825f84402 +TAG = 2c4973323e635a885f78ee106eddf19e + +KEY = ca2b4d335598f26d3d3607e62b9ef853d3543e741350f92f3050894721d3d450 +NONCE = 2431b5cee8c3ecec4caad278 +IN = 75e29e46350d1fa99403b1e5baa414e41a8e714910f313f8e850cf3076508ff650011af766b51283fbd5626166d775fd4b4cb7124d26d77b41eb17bf642bf67a34c1caf0fa9b43eec12103f864e56c5ccdc81b89c1a35e394362688d05dd94eda3d05dd2 +AD = 31c3ce532bc1bae65b5ced69449129b112019cc6078268b853dd17c41832ecae07f9c6b068ef6cba2b55f352904afd6096ff8432081aed408d9340c319fd8e2029c389b6e3a4bdc38853444c3f7be9385ff1ca27e59c43b542e99799bb4ce56b8e26d6c1 +CT = 90c13ec26d01b7b96bdd6816d3ee57df57efeabdb15ba602229ff71d71793fe8081eb1b462e8b2967bc4af96fd6dc72cee3d2b6495c7f04c9068b2ad0b073e11cd5999df541ad705c6315eefa8da49c5dbc258f7ba922908489c1ce672971c3bfb6e8482 +TAG = 3a7741a094be92b838850c32e4b06c6d + +KEY = 49fbbdb5ae21cd955be7f7603cb8563ea0b02b77a9ea14016baa5cffc55d20c9 +NONCE = c0a4463350506d2af9e35d8f +IN = f31003aaf5d8fd6261c01c5bb1e7bf6af248e0be3cf8aac67ccaeb0b7468a40d98be526a8e4f692dd23763563e601915ebcb59ecbf03bf9c665c4c5313c318939a911888fd427d5297b9b2fd91dd33eb7ed38e2f0f6ab74ec263989cdd9915811a022d4a46ed35eef0 +AD = 17e01af2386531ce67d5bc3325d8f83b53a87b38f1c305f99c0798380a7e59d3ecddf33a5ad23a82e33f0fa34eb2438b17e958451439774ab642fafd3794f80a0ee1b9bc165f32df705a6175310670ba54af3a204e446db35170ab02670086c47a475c22d1f14cbe44 +CT = bd661836d1b74244baca62d7d1cb6717e17e2fb0bcbc8d36b3265a983d557c562b0be60708499d0e7e9626825bc049db79a0ef4d2393fef6024d849089455e55693fd4da3d910eac11496492a645e4376855732765e1b3580461a2a2533cebb482736ac928cba175bb +TAG = 4596e3802109c899f27f6cfcbdceac5d + +KEY = 30d0e4f6425e38c92ac34dcaa06a815166f301289ca9cb0ed08156617d87bdf4 +NONCE = 525618ac9e317405c7d44367 +IN = 06f2204ca864dd3f7c9d0290f6fe3d0337eb9442cd5d2b586d1d5c30e58951fc2f4e99831ac7bca4356db4609a0428c482f2580b9e8cf5fd00d86d474fd88ac3b2413f44c1ff66e59e7538c090b2444396f02004ff636aca05ec40439f4e3f470a24916fa4033cb60127223addc1 +AD = 23c1a3e1083904f7226be7242027abb7af9d62f1115340cd4a57611be88303955cbcbeba44eab5488c80aed3e063c70cb7bbdd9ac289c8c8977868c3702be63d0358836838a97b31f6aee148f2b8615ad7c5dc0de7c48db7752e5f1ae8637f8c70335bbecf1313ae1b972ffb9442 +CT = afe3e71953bad46ad28113b7c8f2092fdebaeb81626bf94bd7e9dd59e000e8ba31c1ce7f728fe19dbbb42322e54aab278e3c29beb59b2d085e65cb8e54ea45d6a9fb1f561bac0bb74afe18cc8de51abf962c2fbc974c7ed54ccf2c063ff148b3e6cccdaa65cc89ab19fcd9cd0436 +TAG = e9f5edea1fdfc31cd5da693b50b72094 + +KEY = 661309741227606892db13ab553070b456c5e421cca59087144873ae6d59e590 +NONCE = 9f07692c017e1391a981e70e +IN = 40b5f8081b5dd173203e02e90a6c171fc41f804b2903ea18109edcf77c03dba687b47ca389c55389bd7b0ac59bfaefaf43b5f97065df6a5375c1fbb95d95cad589c2a45cd9e1e7960b1d13622440f7180aa565863b4f9dfe26ed336ff4318653e1a520bdb830e01db78a7e598f251834d0c9bb +AD = e8540d084f24b80414af554f470048b29a5af8adb2f9d55c9759e5ff1595ca74884af67027324587131d90c77ca72b2d15b66564549ce93df7f667d0218a6e874848563a33886c6a0c5a9d00fa435dfabaa9053243b4c8c25779a4dbf79eb4b8530a7c7bf4263ea824713a90cee92dec78c449 +CT = d543f49e6cbe26f1d8a6e058769d5b16e6f8255a28b4d73ba2cbdf664bbc5ded73f9dea12a11b86b6a6acd578f685afabc232dbe9ff8431a5318ec7f0202959a310595b147353a7ca89c9d1fc2d2b92ea610cf6d9ad2716df2dfed70f5b74d498edab114058c22c96873a2a64abc254c82af46 +TAG = 31a8441886d0e4c6bfcd6d74f6a5ee5e + +KEY = a248b0d683973d205ef2d3f86468cf5a343d6ad7c5aaac0b9b6b2a412eed3552 +NONCE = 8f62ffac4027f4dfeacf3df2 +IN = c2d7d29256832def577392acb9fe4f249eb4859025ea55cc0c4a67806caba3e1cb81bc7f5717d94e1c91ff06607b23c238daafcb0fa96905616f02205b702508970fe3bfca87270ed1102a9ab96df57ebdcfd86ef6e9c4c4242b4febd82b0220b0d6f76d8c2d0fba33ca49279907f6bcf7e8401d1419ed58 +AD = c738cdbde6dc277ab81dae20fbbb4a50d71bcf0ac1ee0ec6a39747ccd87be40b1f0f2c37f2c6b32ea99722979fcfddd0ddc2e4ff34a2e6113b591cbfda317c6f4b021ad30325276f8d8dd78f757618b53297fec091f029f9b00850b35f3863a3801c882422b318b4a1bdd89002f928371ea05c6fabcb1792 +CT = 7a837df292ad2e58f21b89da43a74de411e1746556fe47db55a136757513bd249384bf67887a5c1f605e7f7e3057596e17039701ea351e5ccaf0fd4882559e87197144632977cf07cf9e86784a959fa7399476a4fd196d7c507fe3876d759e2b37bd37edb3c12b89716f29ddc8b64974263a1ec1b6364b0e +TAG = 291098a2376a0faa5da6fb2606b4f2a4 + +KEY = 80634a8baea1c4fe5dedb664c9b5d714422dd1726d642e60d15e02364195206e +NONCE = 725ee5023ae08fece15d621a +IN = 4d1d8855b4d155e77bd1bf34b3d049ef09b2b94f4e604306406b015a2d520e8772b084ed668b868e32c7563085f2a82e7d99219da549e507aff9515e45a045c7cd5292c0e09a3a38c769acfd0a11826b27d8bf05184971670200e79c49754debbfc57d9ebc661b25f22f241c4d143bd922f7b0981a48c6a63462cb5cfd +AD = 12b3fa94a64454dc5b47433df1ce0a7dd5e8066d05b2433c6cbcb83087bb7d22d153a19c05aeb76141431c5f9801cb13531691655939c0c812611c6a30083ed3ec27e63e6868f186be559c48367a00b18085ffb8c7727638e833a7b907ff8465e3a01d654b52432767b18b855c05a9cfb5d4aabae19164f0dc2ca6346c +CT = 6b01e934916823f391cd0d2829c224a12eeddc79f18351d2484ef6cb5d492ec9ec4d8c4bd3354f01d538bbd81327f6360a7d157feee64b539489bfdd1be4d7f724d2a6dfa1af91e4108dbfffd529afa71388b07e5079236644da289ae236100b2fbeda0c17bf2a01e76cd1f88081682c2d074223fb8a41d59e70a37870 +TAG = 55762e95d897a33c4c75106449112986 + +KEY = 4f2edc967b11983f05ef5ee2a4364039ac02dbcccef3f3719913ae2719c8217c +NONCE = 255f8209b0c67a6277bdb42e +IN = f8217163bcaf77c1383089e396b271e22c517e8ccda244256cc39315fab7d0c291078d90e9b6e336992f015282caa1ec0ea858a179c9735b7a2f0d50f6f1eecaf3b9308772279ebb95f8aa53826e9dd60fb354de0c50c10001c98812b59d7c0f36daa1aecda6782ca36130fbb559363fe07704b0b91ea85be319ada027e47840c764 +AD = 1dc7065f1585384b88be47598ca484782716c78f49b3b6bf5d24a5b0d24fbd7831f18d77d80951d2c4fafb6f939d46362a69b558afadb3bb4d8aa27f7fcf3dd9624e1e075fce9bb239926d51ea9dff03619d64d5828103a414e360adcda8fd864fca55c21df86c76972c3765ab1d68ce89f708e7e5a3e06cd4de08573cf750c6f5f9 +CT = 6719849b7cea3f7f2a8e4de13d7a864d581b7c638f49fb06378a768d2034548179963c33f0ad099254c2edda9ef771daf5d299f58850033e2e449d7bc21ca3f7d3b7408429b596da615c8582886a6d8c1a9ba81fec4a41a38b7cbf1a80ee0ec8bd71451e727051fbf2a1d1e3c6ca98ee113e47650ba4fe80451e79b04abc8bb99a2a +TAG = 2ac7f962553a8007de3369c7795bc876 + +KEY = 51c5cf1f0c76ec96f4a5f9aa50a36185521f3ba259145ac6cb4da3cd12467696 +NONCE = c751e5e7e3d75874acfd2bfa +IN = fcda42cd098b7936f4bebaa37d5850cb0fdd6526966b1b5734f23d5050ee44466627576e1144957929123198e40b64eaef74476870afecd7b70f7583208603a1b5247074c6c77e10b9bbd41a3d468ff41db89895b0e9ca95be77526ddb30d4c5eb0796ba97d7d5c56d0eece344dde3ebd7de586226c00da224b04e74d9abe832686797df067c52 +AD = 343ae5e73fd1da48dce92ba7b86d21de0a203ba8587536fbaf4646bc45051a7feb343e38916f6c4c75b65f940045e830857c7b62b34a44622a36b34268b8a397892ed3e4de5df3fa7384d4ca50202b5b0833f921349c877931f4b735cec45db6b95410c8042ba49c1a39870276e0165f09c73b14bdf7f36d19084f958695c7ad2cc56f0487eae9 +CT = 04192659d6a2f1b7be472372c8f969a7de388c97d37b4a89653593e48b630947d2160b569379698e94de49b21572ef0b4dd330487a8be814a84e959a1a8e3cf33dcc9f7464fd44814d0cd7ab85e4c01c9d015f42ce3723c8ef8c311222b0c78eb83d81696c217992be725faf27701b4922c6e6099442787ddde2b7572500a5320a4d0c787b786e +TAG = 23c7a866574976dca8f401c4b5b58292 + +KEY = 1cec3efc0311d623f34b6853b3dc97e470fa728cdfd65993d9d48fdc192b28e9 +NONCE = 320fe742ef171b7b8cb615cc +IN = 722e503a97166a07974dcbf136fbaec6c03668fa52495b040383433ca59f6311103f2fc6a95ba4c925f8637167537321eff6949aa3051269fc094393a7b17d1ac8d29af052760835665b0ee89adda5dae7738656af9e8513c96e8a532a46ef34cd7430832d2be51c586a14e9aaec2458c1911bbc0f90b496737e838a12ff37d3db058bda9360d7d33e11629a +AD = fd5ccf6b6948c3eb96543aa40f107fafe94e5206c326dd8900ea510c6b61d1bcf746151a75404e31406c8e991fbf6e660db7c18e243fd2608aa22dd7ca9de88f277037661ce6dea4ff0a86809dbfe1708cd47d3061a34657cad143e6577549c9944e081f79c276300bb406378b26f349a91fa87de02a1405d712c516ae11b4bcf30ac9d56e677d03eb33e3be +CT = 363c1d6b806a6d97e2fddf53b242378e1d2b818828863fbb3f856f7737d63998a84e02d6c91e1df5f5eb6cf89f7ef53e16d10ad52f82362292d3acafaa02c23be7da7616a8b8daf8ee3ae74ee1078742c4ddc3e5a110e510417b9f43fbcbb00e17af3301b2fbcb784fb0a05b66469e771fbd78114fce3c4352c42928bf5a0ecc49228a3c930b0790bde7ad7b +TAG = 669482999be99149f9b723b60fec62d3 + +KEY = d3465cdecaecbf25943b7bbf8084ccabc15474a4228c46cbe652a99be24a861b +NONCE = 04fc836de3a1420b8e7136ca +IN = 81e0e984ce0a4074a44524f93e375eabc650a847a42393f5c524c65523368d38a7e2b677fe08502dd3bc42311775016b5689c660cc0ca8cb33a09b89f3ed3d02fa0fb75ca5bf0dc3c27c546b369ab5e7731f93bc074d37ee50d6f8366f6c8a45f73ac92b05c4aa552ecc5266041dc122a0df69a36ad625a26edb57bfff43a84e527ea0d9d3cf076f8de9eda28eb09de3ff +AD = e4adc14ac4bbf3ae7ec7d97f5c0e6090bf8127a75e8b70e9b86496a62a759dba5a4eef64a8c679c362785501260d29b58e1af647782564947950428dbf14edab8e6841c7afaf9e7949b560419c44bae30315c597f6f6e02204da7ec605a4d9a8753de1268bb0b1c84c972b4e7296da5c969781feeb35a44d2aef799ed228aa399ea04e21cf9f7d5600a2c07b047aa78388 +CT = d7995e7b610eede708526c05c584039d48b9b4356fc71b0c37ec2559309a688a7c69ac9655f94e178cd2311db58587863b0fbb990554dc9a6aa849571f945c61e5611ae7e1a96903be725a1aa75adc381b86e43fbc68a36f44e0e0cb8fe5c494caa91f758597b6ef3b80a879154cd8a7e5f570893b4f768105b24b58efb67c5f07c6db60e0f48eba9563f17d38aaf0847e +TAG = cc3fe61642c2d7fcbd579048fdfb19ec + +KEY = 1a0dfe2a6bc6a69659c68942ad0858e1df905890f47dab728ab9c73f742f469f +NONCE = f8f76b014116ba61392597de +IN = d93eead436e835a061ca061e3a53c3f9c66c6f011b21682b8a6fed098bde2018a2462aa5ab542c69bfa2805612cf6146c9150888b9720db1dcd0f359c1fa3416df4cd225dd0b0d949e917adfb3e83bf5ba2b967d48908e6b6d8aabc545335014d951a67390d7b5c7cd7dcbcf66e4e3f02aa4e5e9cccaf73e75622bad006c63433d36cb1c6aa4aa253dd1b2eacac75c548aa6648ecf9d +AD = 56ca2d5340629ca75de4e98921da352941559bd79f47ef0ab42d1d5857059352f96ee877f5458f090ca237e4eef5b08a53311c8dfd4c4582f18a93aaa8cf75080734cb2ea3389c9c74d2b04ead614eb54512ea93f0e3434e9a9366454b303a8129d6ce6cf96b1d6dd4f751311c736b517dcb50a6f6e0962c46637b4f5aaf0f34bff518cbd551a7aad3fa615708b17cf6d8fbc864f580 +CT = 8dc4d8483dc665b174ba32d6b6244da5f2a8fcc4b1865d662ec23057838b332a07ff073ecc893d413696f3fffc6dca5d107a5673f14abe8e0457a02e61138380d25e269686cbbd23cb7da3060f482f62bf80a40dcc2e711ecf5f7836ca14e456c4b73a48bef90749024393f5f8af01b73302e81bc37c4110dc26174702231d831cd14231905d2dd3f375cf2bef0425084d5b19f1039f +TAG = 825e7b7e195f65c454ce9fdd637138c1 + +KEY = 03cec87d0a947822493b5b67b918b5c6a6bbdebe45d016ec5cb6779c3ddfb35d +NONCE = eb7d261a6b56a179c88e88ad +IN = 2326102c58524326759ad399222c5b5a563cd01a29809d6aed4d49772a4723cfdf30c9f85f031063e838f543c201412d6f085a8f5435b0b2fe94659aaf70cf7bde99309239ed5b815b48342d4f81011f5aefe10ba105ac15601c64a91076c29c3cdafaa12bdd5706dd7305b48e923873cf06944b5027b210c59d79856f602bd6481980ea909152216756d77362c59d57673cedb91ee6f56a40061e +AD = 4d0fbeb69c1869d2d23198ec49b3dc23149005a84aace7025293c3afb8cb2e38c167a822e25c2fdf667d3677f4e94ed6574529c987de506d26b7ffccf3b7a36d9adac48bca76084710338eeb5bfca9df1bf6b403e33e90761a0b3152afac333071a5ef4f54010b945d03b51f123865673e8877f41ca23359e60518f076cc64232b306bd858634417e92e546ede4ac6231635c9cfcf43aab1f8fc1e +CT = 06746f993843901ce72f2fcd4af7d15e64b3102d2f9bec0fe72cdd0b97e43177a1a2238c9c1dfc3311f701196653249e767a73dbe819b660cee07a5f3bb8f25823875fb4b4d34a5a3a212d2e166311bbe11fb1d36f4e725c3b74054ed7fffb7082203ccb5e9d65873cb8a1ce28d5c6e2b6555c1a864a725e6c7d5555d37dcaf1d0884264be72d38cc4b65bc2f0d039d542c5055da56c57e084b804 +TAG = d36a4b6d2f592d4f0d347d906fc319cc + +KEY = 7f4b4bfa26719d9610c80ba3f474c43127f4aa3414fb070fc2f389e5219886e1 +NONCE = b144d4df961d4f1c25342d12 +IN = 638982b95d66ddb689b7b92e3adb683ac0ac19480148bac9db550be034cd18dbd10f2459c915e99c385cd8dc4dc6ec48b75f97e818030fc2d8fcdf66d66b80df64f0ca4af91bba83a74f3946b17af405bbbc6e216435641f5633ad3ee24c1a2ed1b39f649acce59ee56c282a3aebaee6e97f96b34cfc63d5b0482fec20d755f399dd5f61688fe55878713cc55d562c2d72236eb674a340d1a64932cdd8534a06 +AD = f2fe3d27bfc278cdcf16fffc541846d428b31534ec5cf51c30c8b6d988dc36cd6c0d41a4485a3f4469e92ea0fc7e694065bd8130c2854c95549630bd9cbaab2205f27a6efdc2c918c3be53f2d12f8f7cc8e6a81dc8be7cccd217be1fa2e6887cea7d637d2e2a390f50d2c5be10a32a9b380a400cddbdd40eac67f1fe9ba6033d4bfa88c563eaf57272c8a7052916cf4460f31ad026a0ac2588a45d082fbb5c0e +CT = 0d4de3489e09c7239972b675063579e409acbb663bea76bee8fb3f7e8785158ebe1c26db9219a9b97ea29e74762999518613249c3a87fbcd0128f651e2db8e2167f10ab532eced3464b56bcaa09780e5ece18182a6e092477ad933bd8de015c80e67c6802257a97a647fe2b1e9ab6a76c1cbf7d905deeb824aba2a34095f84b276d55ff940d6ab788c16cd63d9b16e0908d718c851a3230b0a37257751df5a38 +TAG = 9f0a882d4456847f44c7287c8ff3ba04 + +KEY = 9799ae8045d58250e4d9c3b0ccc8897a04b5b9fb164e54019dc58d7d77b65459 +NONCE = 0f20d002dbcd06528a23d5e0 +IN = 8f323018b1b636617c935791e1c8023f887da67974080af07378b533a7573424f1de9193c5d38f55e9af870f6c60ab49c80d7d1ad1f18f1a34893fd2892d49c315ee668c431f5f35e3f60ecfd534b4b09b64cc77cd16b0e1b8882872cd109a5ca377518e5b660d75052e9a4228e3935705b6bf6b4f4249346b7bf4afb891641a76621cd315cd75de391c898959be945ccca7a96073f2569f217617b08502f7d569bd2f80e0 +AD = 3f1e297bd91a276a4a4b613add617b0488414a57ede2ac75d10934e03be58ec518a418e98a4dbb39d2365889db7c5f389b2a16d8c702cf21b888a4cbf77b356df48a30298c825fb86128de45d7fa0e5f4b0b7bf82a2c4cad2470f33c231802263901fbda54a6edbf2df638716492157ec1407e7fc2eb6c663d9a215afbec3612778b8115e78a5fd68cf6ce66c12c0ca26e5c1f7ab079bc09c3bc7b673d21835671a13dd2a0 +CT = 9a5758dad7997a766db05d698b43fd491bdcec21352032cc023bcf10e136523219745a56f0360efee75a37de55da23cc7d8184a50ccebb110bcb960dcf6b25fe731e21f26290281d9c1c7715c4e6ff3dc0026cce52929163ba222f123d4f50e1d3cf67725fb4737f4010ee2b5b163ca6251c50efe05c5ab0b1ff57b97ffa24c98653f5c82690d40c791047a3d5e553a0142fa2f4346cfcd1c849a9647885c0daaac9efe222 +TAG = 5b85501a476217f100be680b2f5882cb + +KEY = a26c0e3864a7dd3b589d17a74a7c9c1f7e8f9adb4aafa0e75c083d10956b6bf6 +NONCE = b54a2a43ca3f84aef3824375 +IN = 6fd4ec60613646490791d82de30ded1a12e61fd270f1642d2221272dbb150ef63ef2604213e203b740dfc9c4bcdf722b3c85aa20abb1197949de710d7e8311956c8649524afc72a9bf5eddf0b284c7fc6d48a741b82c215a0dcd73bb8afd08d5532a6f7f99b5c6beb2ad793d6da53a81e6523b2240729924ddac996a723421f57125f928990daa7a55a5b6b53d7361d9728f66590d969659aacd9aa5c0ec627d991b55e9fd0bf9c3210f +AD = d6d8b570eca29a48a4d408d5b27ec6aec291d70cfefcd02bbfe8d8ba8aeb6db770bfd723d2c3a4859f1992767d24e7b33e3e241874292af640e2bd22a5b77e0e9e1e0d5e485041cac41d4694ac929ae1fbc08e7591e1cef689028f5db26f95fc9e0868887fb9c635579fc6335757697f63b4f2b46664ae338eafdd827988c8f2ebad80ea9787871ed8d6b302d5dbf7e8019f2e139c59036cb5964a3701ec049b839e19e33e68b83539c8 +CT = 2420e09adb24098038b2750c946551a5f6a5bdf23b126947348ddb5e938b3fcb874b33fbac6407095e05ce62df999e7234cd2b4e413009c71d855b23993cd58c1e26ba0deed891dc88f099fdf852cec0aab45f488a90edd8feb6f4c837036945bd304edbf7a2737921a2f8c1b00a1daaf9e25b908a65a8f69963fc767bc975b5b7bcc215ce37009009dc90b5c7edb1a1174a10ad28f4c1d1a2241e7ffc215edef4f847ceedf7b64f2d15 +TAG = 20521b35310385ae66557740b435d204 + +KEY = 53ef3dc7a10e435650dd20550cf3ec2b997afc8d9e79cca8f7062622afac3496 +NONCE = 257a205ed0f84016183f4613 +IN = 081e2769935f945419aa06fb5fa7d8412efd1f9b52a45863808022850836c1974d53d2b2c5c0cd420711a71e6d1a09e984366b8b677e6c61bbce8f3adf9f5a9fb5860887617a08c923171d681c4fbc6d569690f6a183d42b52a80ef0693862efd22bf83b7b4014a7008424c356b5022df1842309b3a4a2caee0fd3f4d3fc52a17d53959daccf8e0ca889578ee2905dd8c17d52e76712dc104344148e8184c82af8165ea8386f91de585b54fc8535c3 +AD = 5b73ae02bf4a70e57f5d48fbf45f85b8496ae8514c8aeb779c184f9cf823d8c1883c9e5a42b2c099d959c2298ace2d86c4479059256d6a4325e109fa4b6c4ce90f84a8228316e80aa86de9b5e111d88b2be447a29297b35ca90a8eb280d4c0fe92a1d593cb966cb0010bc06831efb0c72c1e222b031e900ef06ab8da542a5abe2870a0efbe92351d5915ab545b14900e41a27c5ca9d75d6277afafe7ae861131c2767eb314c0c3da5c264f8f2b4ac7 +CT = 20ecb6cda861b660656d692c626436227bd4ac17a9bc71f6c84a1917ef3b5a0f6ba370f00fa2e7f1bd5aa8d6c15032572090482c23e4ab7376ef1f4dfb77f79d5dc065792fe3476c9c37614e32f493e461981b519dd7d10234c2c69264ffe5be06a8e14c81022b652c8cfa24adcc7c7536a55a2fc41e9ffcd09e1c483541cba814eafd5e09e9e44477018a41b073e387c9257c07d97e40f0761fe295d015e1f2df5be65b13f34b6ef0fe1b109ad109 +TAG = c129ba4c10bc9e9c2b7d67f5f249d971 + +KEY = 15ddf0d794b1bf2e67db1af47b45b8abb0c62ff5fe09b29659f63ff943815c39 +NONCE = a6e6b4fd129bee3ab8144da1 +IN = 9c82ac83e3dd227d0cb9692703dbf41292fbaf4961e28b7407ef069e33850371ce2838b1808ec1f837511dae9899a867959183ef3d988ac20758d7a1a6859cedf687d8a42f3dd53fa4b5843e5be61422fb8774c9eb0fd22cbda5950155caa0ceaa00417f1e89a863fcc08cbf911776fbea8d7c14a6d819c070c9abe76a7f0d04598188d07fcbb822758081172e654c025703bb24c523cee2dfdc31c8d2c84534a60e7efa9f52f7e74e19c859889f9bd024f28763 +AD = 892bc04375e9ad5ad2b5c117d1aacc202a74ee4cd4125019f38ed4d716ce361b8b50463ec3255a00670f5f95d361e79349e90bfccbf084586cb5fa145b9eece8a10187c13055ba0d17c0fa526ba7985f00f3eb4a2cd53b6da488827fa8481cf47f6be58771d1e40125652732a7dd5adc49cf99ed6b085fa9fe8721c86f7241b6efb6002e65ae5f72e16ce6a09ce81365485b20f1fc2e092216024b1acd0bb4c2b4ffe28d62a9a813fcc389774688eedd76c0b041 +CT = e30465518e7dab44b9ca4ab6c86fd7b701e334b050a7889fefd08aa12c9e381acc7875ad5f8574fa44f8550bfc820b6d9a5600cfb82d1f98721a875610a91c8f47960ea64445c0e22fd3ebe94b3564e98b9b00a68e9bd941eef5382a67782c5e24ac44b928fc986c62a02fc702b145843b1c6882188dcbbb6f6b51ce1aa7784da03cbdc3efb1a01c1cfd7e90dc3332fc6e912a6a967ef1f239cfdc9752e235dfe75dab8088f8cc207a4a28994f122859aeb52d01 +TAG = 62e7455cd6b95319efa3ae0d14b88452 + +KEY = dc0cff51030582f29676482ec8dbf0490a135a4cf3e444edfb7d1ec733cdf7b9 +NONCE = 58c892d618ceb6027afbabb9 +IN = d6c4d49a9431d51bfda5bd4b07997690748fdc3df196d27d219a62480dfcb6300c5a234d675aec1239280446cc134bd4e0e0b5ebf6f10bb11b788caf949c0c3553497b62e729f08700b66c6720c35f1f434f16b15a4e404d627fd054ae1394a77d5ba728f3422aad5d99a608c2aa52b058946a76a408c5dfb210d280629ac999e86ab1f9da8f2b7b79ec07cb666105582564974180ace98c63bdb962e4580692abe58929d29f066d2f7e25c23a3824483d9e49cb6f5fc4a1b0 +AD = ee3bc8d875a4d43c278cfeefed8ced8a3da946adaef93dc356001da151010548990fe08b62edda46634db320601c7f4b50956e29868bda9ae5df186f15c3ab4a19d7cec274209cecc71602e45c37c273b7e4b2a168de5c29278042a3dd1fbea0998d7d9707d412f476ac8de7936e2e5c268a2f22646f682e664e526f88004e7c461bd42337dd21b1cb39ff678974adb67c2ea1b7055ca98697ec16c4b3bfa95b4dcbd7fb015480135634c34acb20f58549f7e7e11e20a991a1 +CT = 54eedf8ca21f31d21067af5a05dc3cb99c3dc046540d2cd1664abb32fc7714ac057d039cebdeb124e1ca9511bc71f92ddfd4c6bd3edc8a1934f2fa2511503944f2a0818e30b9bdd26bd3c51b9673f55ad3f2ee5e41de114ccc55abcdce06a5bcf63a5bd61fe71dbbfc97e1c7f3417fcb9c1462e244ad91725081c9176a0b91d3485400d273a16eecd870ec1e9e016a7f4af2fab39a0bc93576ffd1eeef9cc15b7e47feaef85b21de422666ec722cbaef26edd1941e7dc03f72 +TAG = 1cc8c395b2ccae3a685183667ee7bd34 + +KEY = 90da49f8f64e8a585697a43644a48bcbef33a8ed23c1a93c65e59a217c04a1e0 +NONCE = 0812f87792508dee6868d454 +IN = 26dac57d9f30bae5831f98ed074cbc9af9731a52b2322cdd23f1f0abbf78092c48d6d24a43c7d49edb3fa66086030f37dd9dc67847714437b11577d2bec645b3210baa8f7a540cbfc20deec5973b7489b7607eafe72e249df5d0fed95e29f03cf7f0c7a22fb2f06a0bc75214446b06d25a45ab8087270eec56af3960f53b80412a4ea7b45e54a2c374e8a3789e8eb57e656e22107503920313ee3e4025836b9e1a98541446c23bd5674cb83483642f2f3e8270bd1f77c85bcfb205a9133c +AD = f2168cef97c27a902d93cbca07b03f35c5c3ed934192d29a743c3a6c480c5a62172c088fc89cb2d8651b8979e5bd1864272ff179be8003c6dee18789c17583dc1de4e8b4fec80e5c7575838e621cac4b5b51ce5952f22e06b1c196101d2ac8d05e797323e5baacc49d1e74db97142e1bed723d46ab858d59fd36d5d08eaa63f696b610eebdc9662e504992fd3481de1264bcac8ac426b09fbc641ebc93f72c5d460088fe0b08420d88fae219b6a5a67420a5f9d1201bf8d64b2ab3e9050a +CT = 82196d89624689bb172e4ff71619046a91149c8ea99ebbaa3f2c32c77938b5ac466481575dd82a008c7f5867bc46ee44faf95fa40b6237c8c3b62474af2efcf07c771e23a63e65b48b0bd8ed26fc64dffe03e71fac6d3857b1248df63d888567d7d3618c68d6b8f1c88029bd7af8677d3b51f70ccccb4eec9e100768515637ad8a4b2e2e317902e456974ce9fe23095cc68566e85cd913e8b64119444f124640d16ef3e98136f32d618eef78f7ffbafb64227b3185bda8f541c0e7ee8405 +TAG = 71fffdbd6358f755dd22f1dbe42c4aca + +KEY = 0b1b256665284390a9193b7b7aa4e3ad15a3d2a58e79d75da8ec284c02fa3a2f +NONCE = 346ae65660de8920605fe8d1 +IN = acfa83f56f137ac39d6447d98c5f7d5e812d1d8e7c7fa7f7beea9a87c59961449683fcf5332c9ef1587135030309a1c2d95257114b790b18cc32f65f4c7d1652c0106e3331f826e9b8b0dffc50aa6723d0827076b71c668370ddc8156db3831559a72e48266b3886a6d88318e6ca646ff561ed4f71e665abb7a60089f0a115c7b7fad9cbba6c4cb0c242b9e1f17705825d98f4bc10bacd8ab2e11cf579f29b2a0b085d8c96a372434785856b483c3fc9ae909029b0c931098d7e59f233cb6450fe0b0d +AD = 64347fc132379d39cf142ca81d7e49c010f54f354ca3365d5195a7e43175c9a47603062c5ca61aaf2b381f5cd538bbf48f50d620ff2b5980c086049a378aca69570ab7c406b510a6aa6b7e8682ade6a091b1f822a97ce671fcf7c911c43c4795b78ce1c86e990e32bc5c9fa34a8a4b22a20d6f7c46722d1bafd49443b4da9634db4615f7cabc3d5bd9a8921e67de45dac261f54bcd0af2b2f845e255a16f2d2f1ffe26e88238f5dbdbe111393aab3409e08dee8b9bc85c51b385c191ee9290454236ab +CT = 9d7421330f0c2a525495bc360cd5c2273531d050d461336a254c9af8611d07c3559931cd6804fbdc6e6c9c997283cf40bc23596efd1bf116fffcc6620e45d1c738569af012a7ed0d575ace3c12662f88f3ee480af30ee015ae70db112bf4a185e220660a912f9ad840346e7cc0715e853dcd9b415ca9e865d5e4de2321e6a1b7cd8a35c760abd3f099d395576a91503147bdd51cb4bd1452c4043b42dd526de6f61bcbe819cfa3c122c6f62e0d4c38b443f5a138325a5f0ff8a9a2071c2773ce62edda +TAG = 2af508d74bcf8157ae9c55b28b5d2db9 + +KEY = c055bfc7828d9fe8fa8d9851d33f3e4888e0f7e286e1eed455e14832369f26fa +NONCE = 2804e5ec079eada8bb3946e4 +IN = a26a9b189ada0ccafab92a79711360c7c396374c6170de395bd8ed80dc5db96ef1534adc4dcd419fdf1801add1444a195367213e374eb1ab093f1f54cd82eaba5c1cde6b867e0d8fff99cdab4d96e69aee0c58a64120ce0cfd923f15cdf65076a12e06e53ab37463096d9ccb11ec654e401c24309fda7afa45ee26e5e4b8adc8febbddaff1e7cecacad1d825a6b16a115287b4b3c9f8a29b30fa6236ca6e883abda412177af38b93e0e64b012d33d7bf52ed18c4219bdf07f36151b7ea4c53091ddfe58b6c9beeca +AD = a184e4811d5565849a08d0b312f009143ac954d426ca8d563ad47550688c82dbddc1edbdea672f3a94a3c145676de66085ded7bcf356c5b7e798f5ab3bb3a11bd63c485fbcded50c3b31f914d020840cbc936c24e0b3245fead8c2f0f3e10b165d5f9c3f6be8f8d9e99b97efda5c6722051d5b81a343a7d107e30d9319c94dbc7c31c23b06a4ae948f276d0eabd050394c05781712b879317ac03eb7752462f048bcd0dccb5440f6740ad0a3a4c742c3da32a49dfda82ed1b66380a8cfd09dda73178ffa49236d20 +CT = 58dca29b5008f74bf132947df768dc85e2492a381429f151a3bad3132e63a4a977aa09f10879d206f43f27a26909495d0a2c8cb252fbcb3abd953f6e0ef0f6d5e89d89a1d9ecdb0e44686fbf5567a6fe7557a084a8a5ef5316890917bc432164266a331118c828fad4f5d1776645d163dc5444c2e12def608efb47adeb8f9928a5ffd3c46f963a749c310688e78525e34a510f529472a14bc7a5b65594338f6f5ea1d95bb5bddc6e8e1d1a449d126442accd162e4e03c10824fd48b32df763de5d7700dafc54206b +TAG = 141c80e1d044e1e9cf1c217bd881589c + +KEY = a54a347a7a388c2e0661d4ae1b5743d1c2f9116c0a7aa2d6c778a21e2bf691a9 +NONCE = bd3456b0dd0e971451627522 +IN = 3d17e3d9b5020d51295f7bd72e524027e763b94e045755af4b3cc4f86bce632a1286f71734e051dbcac95780b9817b5f1b272c419e6bc00d90c27496ac5ab8a65d63c2ea16eeeebe4b06457e66beeed20fc8d23a9b844ba2cc3eb3d87e16e1230fdb6a9134bad3e42eadccd49baed5e03e055f389a488d939c276982e4bc77f0a1c738fcdee222e2641b06fe12ed63ede2ab2fee3c54d7901d0911c32980b7c663a67d35ece23136c77f8e4536464225ab427d937e7a4260460d55bb5fdd7ea2f105604c4b0cf129dec49b81b1 +AD = c12d1ffb08acf27d51e63f5c0e311180b687438e825204074d4456d70b7c5ba9903ad0b0778a5fe36c3e12e82718c00f5d1ce585e5c73b23d6c5e41ac4a180c97c9418b07ccccbfc58c678e97882ea36395c0a05572b4cd25ddb3c32fa580c89c48a0e3066b8032e3823893a5721a4fd1e59c7d012a01b9e9afc12f3bea93e9d1a2cf5cab26e064576b36bb65606de62fe2887ace0cf399dec08da618954ce55362c8a2bcf31457a1804bbfff68a76d752f9aea81be8868bbca8f1af3375f7137941a1924b8a2b178f06a9e33f +CT = 938f8f596e17eae6920410f602c805ad9715833087e1d543eb20b1b313771266dc6a8f86f2ba033609fadec92ac38c1f1f0f728e568fe8bcecbae2ade7b9c4128fb3133c8b4107ad5c29cacbd5937f66905e18cc52d9239c14e4c8edbb2db89b26f5f4a9ff0f2045192fd212af6c65e448834580deb8787b612d6345466483dbec00b03fee4751f543a6155f2dbb745c1094e9721aea3e544a894e4a19a14645725cb8fdc21d259e086b1e411fb1bdb11293d0224ada25da2896dfe0d35095230af6894404d27d901540b0ec35 +TAG = c55c870a5eac5c0c774dd10dbadd3fec + +KEY = b262f6a609c4ad6da3710d58530b634fd7bed875956d426bf4b2412209902233 +NONCE = 0b455031d28e4e17a45b7a60 +IN = 9cff6ec8832bd0e62d9063e43821db6a1e0f3ae7947ab4d029643b0e7db8224f8bd00a2c011b246a4d5eccf9801fb314aeadc0532fa71cffe188e801d7c045e81b9dfc5cf6ae1e310b363adec4e7ca52fa754ece2540545a5161eaf9ed5748070b6e232125fa8e0fb7548fd3eed57a6be72ce0a9112f166776816a0a4ccf8151b6b93780875d03ea3d59ac57e7904c83b90b7666de85f055b25f9e342af4cb04b0c3f123ea0906c04f252f2b16b28d612e37b2a7b788d66beb8b361385efb73a825ccfb1a5ca55d60afde0349e5dad8096c7 +AD = fb99bc661b51464c0df92ba4f64c4c56d601622287bb1bf8e0a082ed3793e74db6a2f5a546391ef55dc45fd2f24878834bdc2903054d9d02ac05bd5ff122b65555d7ab1664cc36b630039e4432315445f303837e57149fdf6bf8d6856ba97abc5a18b6cd2f8f28cd3ac079355b314561c50126812861c39180fd94f9aa24edbec37bead760093d32b96ce30e389f63b2b271fc051b42952b3f5cf3950def581f7cbb2b4aa5b151a16ed3773166761232c106d3ff57851895640ea12befd69daadecc4122b4a481e85088edb093e02d5d3d8a +CT = 5341e8c7e67303d5374e3f5693c28dd9f9a5c9368efaaf82d900b4a4ab44337f7d53364544bbd822020d79443e2ab0fd2381bc73750203caa3d28858a8f9a6dba57a7c5248361ebb152a81a89c00b1bf49de9e2d08c0243b38eefe316ef89164b4907515f340468291e0b51009c9d80cf5a998d9cd8fce41d0c7405fc2d1854aae873f0e24cfad253ee07d9f4cd27080ee8ec85d787459080a06d290e6e721d23738470835f173ed815f1a15f293ffe95ad973210486372e19a9cc737c73928572cbc03f64201d1b6fd23ebb7b49d12f2eef +TAG = 5e0ac1993ceccc89d44cfa37bb319d1c + +KEY = 9b4387e01c03d2e039a44ca2991aa8557dea6179d19259d819d70ab2d5179eb0 +NONCE = 852124b4e04d7d1d63743d74 +IN = 92c6f01cd2cd959495bd8aca704f948060bee01ca61c46005b4db43e2e7655af4c0d96656cd75d904325ecc325f5fc9a5fff3eeafde6f81323b0e3b64269028cb64c9fbe866b400e76487f1759d6ab8fc66589e23df0c008974e1613bb4ec556bd1a6a0751f6dbbbaeff219874c57dffca59a955e0aae62e8fd6a904a50fa7eaacccc6dfd4a2b8c6c040505d3448ed2217b7024224bbc4335c63b2ae8172d7d3088b819edbaa17991a4729bcd5a456cad20ba20dbee99ae56f8ef669dff93c99a995c8f5dcb5d113db4178a49516206a1cba7d872682b1 +AD = 92a1d2574182f850e37aa62338b19f403fe99dbc7ddbe1e6524ac67c4092cfe296b5ee9b94eddb5c228c902c18ec1ec26e1ef0263d05c5caf1c71ed9e5ff987e9964b46f27be05a83e20867f1f2107db26b6bc7066af2b0efdcad2b65f2ebe8b31fbe2f3c30171f2e4969f1650c9642ae47c8db5bda47e57e8a9af210a6fd4894dcc2934b4ecf823cc841cdb3c93ecc779b455b8cc796d7d60437da201c3f848dcd5f45e88973e06364e7cd01afd2d49fd3032550f1c1a60c4ba48137398f4d58e5fd0093c06042b103ce0064f2cd1cfdd39b7440121d7 +CT = 28b87d324854d5c9c6ebb303fb802b12d946ed681ed5b3384dce2cd782bfbd022f213f193bcac579176440bbf2af378b019d21dde5d70e42d257722d15417a9fecc8e56430551ea3bee798a01faf74d0fb09be6dd0c14cd03feaae29c7d17581e1fda0b4bce632ef790202e98c8c4f8f842fb3e33b3fa5e8700c8644ed6d64280652bc2a5d40b3ee0e47dd5a9f3535e15b1fabb30264515afd4f9b1caa5c224574636935baebf6d1992bf1a7a3d698d457db4248a2b38a803837ac4fab7998722d52de61bfab4f98e1933a77046bfb3941bb7988acebce +TAG = 1b07d58be48b81f7007e5683b399dc28 + +KEY = 9d36155d429b90b5ff22ded128c9f0cfe77ed514d410998091bfca4dce7e3c88 +NONCE = a7b73ba1b2b0e846c3f635aa +IN = 2510210b420b12300d51ee4a7ad233c9c97d71672c0f9a7b9041d32172fdf3a6ce274aca77a0db6961d7921d1681ede2c1088a7618382481296778e7f56d2c0074c7c545ccda313495ae2a6dfd042474b07d2b59c79a0cd8c3dc16132beff1687111a48ee3d291ac556987e73c5a3807923c2deb3b9a59a135a8fa0d85d5b39016edfe0649dc13be672a639db58839d3362eaeca046767fa1182ef8a63abc104e7cdc8610b1e956aac89af76b40844a358fe6f7343d217e1838aad19587ab4b1c765d2cd7bf7018e338c0207d4c9dabdb1625af0c75749e9a20a0d8d +AD = 39e96c8d824bee306189a3bc8a8d4862df55e8016726222a528d76de169746a363e82e82e359b774d061a6e98e3c35aca8ba802a5956a2c512501fed44ae341cfa65ec9d95485763d99cbd9aea078ce551f7f82272bf54dfb6420ae7653f275ef145b2c87720c9ccfa56bd286c61cb822d0473dc2cc3fa22d50fd16bc0358e7c615aa1791b990f30b1d737f798219f4446d173e80fa62380dfdfebdb36b1284a62c2b6638f28fc370034812d09b57d27e5b7d589075bbab42fcd6a91fa2714538be6286e4c7b2657b80f045df7f8954738efa7d49a38e5a55a2af934 +CT = 8cb991b10218bfefa522e2f808dc973620ea391623947cb260b852efd28939ccca4c8b1f02d66fd6d0d7058854fac028fa0f23e8de801ed9a4361bf7e5a23e6a7086624a64a29815bedd5e5ebe4d9f9386d47e1408286971654b38ff8e5dd1fef7686d7614ef01900ad33bf97896b4ad02e7445782b1794b45af967ca3ba72a2e5cd5252a9ff0ff550ee56fdd8aa555bbb0bf8a5dd534fd65b13235fa6650761dfe2a28b2757077a2680ef88c84eaada743d1f0d25de38fdd1974ffc07dbb9c7fa67cacca309a10753c6e2561c4784470f5c7e116e12070fb3d87131 +TAG = 665fe87506f8df07d173fedcc401d18b + +KEY = bd187500219308edd6ac7340d72813ee20054d6d4b1bc2ebcde466046e96a255 +NONCE = aab93d3181e7a04cedf17031 +IN = 55b824816e045702526f8b5def71a0d023a2e42257fc1e06f9a8531ef9f7717474ba4f469e442b471d5da6e71aa635a307205c0a935a54b8a59be8856144dec435e29aa1a3568073aa6bd3439bc0f219fa1179ba0a316f7d966ea379da16be4db2f1fdac2fa6d00bef9351b78bb2773bc30ddc9d019e6e7d78dfaf38010080027afac33e751c0429ef6c70a1f2d01f103482818e9353e39a3a4b785a7dd2c7e1ba7a4c36a5f3836d5465c002bcd1ac576d90ad276952ac155dabba6873e6d92b5278280a540071b205ba99b77b7568862e70e6ddbd804906c33fa130f8b0862001 +AD = 11b35743bbcd0113d2c188f75d382df44e874a2d4b3c3148ecf8e0406479305f29197a3a71dc7bcd71b6136ab11a7cf46de80140e15046acfa18774cbcc755e9f3beb37202fc308c03b1c20470b3128f5b91d925bd6703dfb3277d65159688f656d5ccd83d2beadfd778854472b1cb8fe440bdb7efe806f4cb95249cddf69fa0013dc5a626eb8ab69a48b3ddb1a317b35f7772f711221cee1cee9469e2639c44448c5942c95324dc2fcfdc952e05aa336ddbaf57cec2d1b33981ecb8f70ccd34a279b211c50a7784906f2981a2d2ad8fb130100c4f6bdb09c95dfcf4b0eb7ac6d5 +CT = 1e99d06f82333ec8e4fa1e81014458c81325e5d69db561449b153727da35c0b540c570b60488aca6aae58f75f84792388d0160dc45e4e5bef552c49228d806fcc22259f0f94da2f786cc94a3ecf3cc15ac67719379d86abaa54ce41e868110ed2b56dbeeaad4a444eab51a96aed404a4f4b9677d22345fdb67ed0df091d23d8acd70bf6cd29f19c99910888b3281b65637590af984e493ac70011486ca88e72fd14ef1cba06a50070f138dfaed35ab12690a14b1c8ac319f597bb690cae28019d64c868acf9a58fde1d8aa18dc1ec9c3c4a0ee9c4cfff8912b1bf23c805af6df48 +TAG = 1a43147e6e097a46b61f8b05c7dbbe1b + +KEY = ce53e967bb4675a51652a9e6e87da6be36d16245c1e37ee00bae09cc30ed8528 +NONCE = 0f53ed18bfdd28918c3993d9 +IN = 3f2416477ff2ce7da3e5766f043e7a06ea2b87fdf06320d296c71cbaec4b115da356f8c7f34220f91e90c97a5cbbb7fcf0048fb89414eddeb2ec1062d08cc75a39a1f9f214fc3efd6fc8e70d78418007d7d28944b3f37fa5667ff79098d7af36a9324419b53efa76e98a311e1436ecedd977397cd02cc8d377ea8558edca35ff4c71ec31943119b76af4c78a435033eafe73c7079224bf2328b49ed58acef9b043ae3c7ff17a66b521e190d6ca2b2835ed8edc2c173f04616af237391a4440fc5306366c834f6a504e902dca6d3e9e1554088eaf5b15db7fc1fa19f0867ece90ded639ee8072 +AD = 64a596ffca0889833fcb537f58d94791f9ba9b6b7ce0c7f144f2f1a95d62ce334f7bf7f0d2ef0c6e7afa2324b069dc6a7a522f19a001c335cc0252ac4a26079c3f267cdca1e3f933069f52fe72e1a00c83d8fcbd2e76149a912c7b37663c2e7967a3a80656c87094d349af6b9d64b3873f467ed376eaa1e0abae06180c847e981c6a12d32b580acd34f779c343f8b79df1b5004d333a5c37a8be7a94c6f6400f819ffbe6d54d3c1a92824fb15c279fc8121c735b6c42248ee22e665245966d40eadc51f12904cd64110d69354cc9d9fc415b3469317d5e4643942dd4b649de0ee2fc5d200701 +CT = be462da8cc9d8cdf343f7025df0b8b41c24f7b6060cea2d3c63338b6c3e83f0797e966b8c5dd889bf1b5058fb4d694be2178fb33d9be1a351812046a6d3bd36c84ee3665d39fb98159e4d30f8a25a60064caf980f744fc519e2dc451f5fbcc0834b72920d32f0492abedc1022b0db4f2f44b91ec48c588334775fac91f174a4714b3825e96fa53cad3de94807f3b888950c8776189cc18fdf379cdc9d6054952c6ed2b3fb7f6b49beebacee7ddcb19a3eaee2b2e2b7a5d6476e5fc1f216ca443b859a9a661dcf2f7709f87361186368a62f255d78150f09ad4ab1a20e7329f3d96fa2a33cbf6 +TAG = 1cf74908f6fbfa5b2b309ebeff2f3ad1 + +KEY = 093d932ed969cfae63f07e0c04c7f9eaf1b36f656095f8d5f112517dfc430cdc +NONCE = ce36a837ae93a280d2fffc63 +IN = d9da99635f8d728843dd587cbb24e68e1df2f81b5f7abfe233a224cdbd48cd8b82da3711d2ab6c1ca722610b87f426a2cdee4456b50781e3b25da037ca636f2a5eea01f4eeea52d0feb7f1f6c2594d63d8c05c2adf339839449cb1d2aca94852d1b64b5641a572c2da02ebe299c7d1ff4da8706f44b14602f44c0ced711fc78005f87b1686106250d3d3860b67f5b38788db1891150f88d4c5276751afa0b2e37a59587cd8b718767455e65eef25bddaf787d52b88556710f740f117b02f244edd47cf0e45646d40e789671ae61ab06336e24fad8b64cd8f60b427ea1f58af443c6f55d54028edd5f40d78 +AD = 5e9c95c3449cee3f9f726be031089b2358ee92fe7b408b355739c8da6369304f3b287ca60dde4685bdc59879e1530ffd8f6589449196abf0f0dc6dcd82ba7fba481f13376cf29b32af2ecca24a161e6e57b6db70a7e02ee2154cc0bb5280b08f8dca35b1a342fa18b8025c7a805cebaed99e30b43c139de7c37adc25b0b6b5d873ed86530622ef2d0ed3ab19e9c27df98a4a15324f902c35a23adcad4598c6e990c64893355be15fa7320c1935b4ad3c069c068d6b3c8f43d6fe0588b59170bf567ac3a53a50db68e4be17964f55acfe695638cb5fdea5c40805334a385c2d35aa836637ccdf71390487d9 +CT = 40380718f069f44c88932af22a10f80513821caa71fd7a9e5c4f37e1c756c43fe491ac13f244bd1299844cc78d7812110f570b693e63614e639ec7395cf65c206eb6fc9bba86f89d03dd19e45d5ec64c7d3a308ced4ac1f59cf4e13be64e49acd9ebee209afc508c97ac817f1367629af9d59b0cd48f138d23abb61f92dac530351f46a4e7f70ac87388e44f6e9548d3e6a26884bb7611f632da7db2a12fd9174773e685df316ea9401d8b352135b6b32a374eef8661b77eeedc34fa4178d0a5731ac9bfc14bce1dfe96af095b0088371ab1a04b2062625f0c4fdf01fc0a6bbf1661cca11932e93690501a +TAG = ef7f960b146747ba4f25c705d942f8c7 + +KEY = 86875efa72ec1827f133a8935193292463ecef801bf3b461c96b0312cfcf32e1 +NONCE = 738136465c8935d77c8d4ea4 +IN = d692d3ef47a5c9d0d9a3b6a0d498e90a3ea06278134ce90cc1d69da2159d9a1f5d0a9ef4b4ce5f873e26e8f9d53ced79991491325ba5511be4d9e6563b70459b10e60d8c5da45d3b0b34dad86772b0560314f0215bef7b55c6ae53999cb2d6a14a35b50fe5a1598adb7ebeee097968ee7624bde42862824900c8cb45b12785d9c4d50ef38133d31a66a612d8638008d03edd19c4d7edb5f9b9f195c60883a7d6aa85bc3ca3b59c395b85dbe9bb30ef6896c4ebae8d72cbecfadfa451bf36631aefddd3feb36978aa8d9a45c9fa09bfa0b2c040d9a422840e68f4dcc3eb902f6be1d91b11e1749183d89715761b6cf22c +AD = 17208cfe5a96adf0ec903c7618d994492d3eb77275fe5bfce5ab1f67d27431c7746314e52934b8c44481e5760cc8f6b0e17d1fcac7fd5b476196e3152c3dc90adeb58c2c9c62cd684b4b18d4a94f8e5b4336ed3f1758b58a254f48b3aecd9cfa63cf758f2df54c52eb246d046198b6eabc90b2a0dd6c5323e915a117235174fc9089cc9bcb1a3bb49080cbcc24367e7f4e17e27a2054bdda0ad8996df1cfc6bcf43f70cd854f4d97aaa4badb5826dd86765d36a2ecc83d3daaf31594eff02999a423185356d693f26025a576037336c156543353423dd3b5da75f45e297c60dd8e091b961f60eb6786fc988f6324f9e8 +CT = 55f48dc2b6836b8603e19264382ddfc568b1bf06e678de255d355fd865ef03339f644312c4372494386589431d4ae7af2eaee5dd3c16340ecae3e87dda9220a5f9b9fe6cc3eaa226d9608385b7e8a6216e7da71997088eaf7c67b5402be01c0b182383ed3c0e72e91fc51fc99c59cc8271660dd7a59ee0e7d9626ccd4439bb9a1499c71492807f8126891ce09451d07d9c5525c5f185559ec44aa31498be3fc574389cf948640dcc37d0b122249060bb7d5d7e5194d4b7a7bb64d98d82a1155e30970a854f7c0d294fbb1a9e058f3b9f4762972c21086e0bf228768d0d879a9cdb110f9e3a172feca7417d48b3fa0b0b +TAG = e588a9849c6b7556b2f9068d5f9ead57 + +KEY = e9467b3a75dde39b0dd44e7cbf2b70ba1757ba6a2f70cc233d5258e321d5b3ad +NONCE = a9756c7b8e2e2f4e0459f1bb +IN = d6d7f6112947be12e7ec8d27ce02924503f548456d0ba407bf23e848b9ecc310e4a0c7b00c0de141777a94cb4b84a5cc34b2b05c8a37cda08b6c2dba80e80853f2a18bcc41341a719f84262b601610a93721f638a8ca651a2f6c03c3cf1070f32b92c4ab7a4982a8f5e8ae70800f7513405f3ae28ba97a9ce8241608eeb5351e6cef5560c4209790ee528b3876896846e013a0bd3a1aa89edaefe08fb4b73b3fa64c0c8b0f7ab70653ee138456319230174f0f1f7f3477f0cfc80eab8a96e29e85e20658cebb830ba216b1d8281ce499f729278dcfeb59cde3a043ef3fe2c42705f311a422e9f80fc3b58ca849dd4b99e5e66a958c +AD = ccab7afe4d320e94f77963d779ade1343e66ae80446eaa5f9ec4d3e3bb3166255e4aac5707ab407b284dfcdbb18ff515cf08790f0470cf335946040438c7de2d2a342096d7607e1920d86b519e96cec1715f4b0dfe375c5959644bd664d23d879b825dffbbdc458ea9da5ede5682ce1ad1cff33dd8820761b1c067cec638873a3cae79c7682ee8d4f97cb96a413dbbded1c242ca669d50ebb6de3c27eca3041fa8aee8974c3d17b0cf79c32c7bbfe20dcfd57303cc40334fbdc43e925df1d63fde57bf60553d7790fc56bd95e675db934dabb1125eb97cded95f397b32bfb3a2d40703e3f11c6c226633b3cb7f9da1e3367de2ba4d +CT = 47bb258ddc0945079a0b99ed5cdc0186f453f8e0393cfea258412e423dde4a00c014ac298c4dfe7c03b0d9bbd4ad189624cb6fbaf13e60ec2b4d83c5bc3294dfec30bd6c8f7125e11d7be145a966dfd78fd77af68099b855989fe077cd9f427d4381b4930abc1daae55722540e4bcbe1b560fde208ef1c2dfcaa2c51b76072e67da311c2556eaa2c25413bfc43d00dd84aa8859b296e05945683e028699d60a29227de1363c4138b9ec2db8f3b502fe09d368c5f2ffd81abe50cc1ec1ef216f27f401456d061429d1910623af00bcf500cbc6509c5aebf7de9c956e40a3f0b0d562775b03c282c204e33c0b380ce1475eb5c0441f6 +TAG = 9ea19333f5050354a7937fed68e38dd4 + +KEY = 4e323dedb68bb5cc4cf2edfe3a54a19b410f849492ed6f66fc053d8903c3d766 +NONCE = f77b876eff796db621eabe88 +IN = a7514c4111d7d8bce2d56faee25d9f5fbb527162576b444fadebf42d48d2631cfed344b0437ce8a7609bf30bf0a44aef172f8b12ea7567cfa5dccbd08bb3115efec59437ff02e7128df9d9e5193794373e30dff7b3d8ec0fcd6cd3872d755c0314f1cd9cb996e4c6ca8ee2e35f9b64a1f0bd1669369f9b333a356ba58e553ff9bf9cb6c5522599dccca2f7f57a91006e7dca4095d11955e5aabff69febb98a408aee92293c0abc12ff23482ebe9d541bf8fc7493eef2c68044dd185eb243b54a2bad9844d831d9b0766a0ef013ad3ac03627b1feeb287e5e61875bb1d0a01315761bae6323a9d678cdcd3c4a85be71b70213d081b348c63fc603 +AD = 9bd10dc97ab5e9b35e1c8c36ef37f90a11bae7dd18af436fa8b283eafe04a5bbb16bede6ce1260187299ae6474628e706cc08b3627f5243f1a9ab469455666e6d5f2ab597b6799bd60a365a9248341decc36d473fa52ac5ac469b965cb2023d43b437dded84ad49de95a6dfc6ae4bbefaf86f9b06e3a33ec90d32ea3af541fd2c43387c75dbd94d44b9582e8ea41afba5e49f1d158d48e979d04888fbd42876e12bfd6695cb99640c537f2f9223d37cf6b627207b9318bd1f4c64556b5db1101c486c53dd8dccd7405e148d6d9b38b7ac875a44bd6df75edfa4da8594a9c43b223e7a6f5b81a5cb8dd6e06e9a976ef156e45520af332e4d56035 +CT = 9885d7a11004ec546955fb7a8c77ae57588fa2e7fedcc8e9000123495b9016d1a101fec1e6724302e93eb8e01bd05efbe8502eb97b1064bafa9bba5658b1677819cec4998dbf02df1f1eef51bb3e75c19f570efdda98b0b8dc5dd9250eae8396090ca9ebecdb90f32c5e2085e86b64e57464d251af62d9f8c01d7bd6cec5f9dfa5eb7c4cd412077571bd071a4eff5098883940d63b917c08bf373916cccd7a446abff0aa5c687518703c25cd8d3c5d724f348e20be54f77fd18dbf6344d1d25c788ccb5a5747d575435829b1825e31f9e94abc33c0d2750fb62ae167a7a74fc9e39db620d43e0b8514d5f70a647e53dd5764254b7785b1519474 +TAG = 936072d637b12b0b6a4141050f4024ce + +KEY = e57e74595d230e8eae078df1dbc071c66a979a912e2252257e28447e97fc82a7 +NONCE = b613d6d5fff507e917674f2f +IN = f1ecbb2a45f04ca844616528b10ffa4d2c5d522ed4ae3366888fb371b6ee7eb4be53c8204783e43265931f58f308623f7b2733384c173540aa0bdf879fad0283c2be6c42a7b4feb2b29265fffdb518ea77d33507dbbff7d9921bd97fd27f1100402e02135f7df4b5df85f7472fa75618facca3e24d487453e831efa91242e62ee9d32880bc20f7ec016eb12edb589dc8a669f7c78375f915d7c2b03457b00ac2aceaf37c0369a85c3f6fe7c0447c022d66bb5acaee62163837a36e882cfb8579ba9182d3153a25623f339758ede5a62f67b199fc8abe235fe4b607a6804fd4d15378c76e0c26c1edf1cd637b7ea59edc66cd5ef9b8cf79b95ff89c235ab195 +AD = bf4c0737e461c1d6fc45b87175fd7833625c98a03e089c4e3d47c6b21f4bf38cb4b7666322217eb8fa022afae473df56ba3502c88cf702276bf39c6fcccf01e629925a83816a5096e612458af6380dcb7f63cfc0eae99d63475616b18b44111a1927b05503c4ce46ca48321b0f8f247a54919fc844fbabd3a2481e83bed8a5ee8086d7559db00fd1d64f4892ee9363d59829ce1e10af66696c28e86297b43190800251f346bec1b577446120529d486266a271c71011528b24ff4caf2c30f9748a2b03c788dd583541368a643075a52127c48b3b6f0c6ef413e61479c9afdbeb4bda44340ff0d81c7bc0321d3de4080cf7e108dda3fd4e480e685b202c6bfc +CT = afb2aae2dce03cb0bd3467447ef6895a132cec06b9f7764ee24d90078660dc820b8384c01375e03c20a6c688a780d7d7fbe5837d477e8f3d7ab3ab865dacb0eedb5694d3276ea914a421b03b9d4e4f586227a3af7e8d5d579bd832450f038eaa7bac57aab996df55367ddf59b338e5d370e310124e8ef43c9fe54e5d23d60023aee266054ea66c9f32170ce97998b527073fd178ed4e1752cb9c515c0b32766b363c39c513c2e9ff6d1c24807afb43af3c5a317f1536087d8576fa3be3b007d3a77ab0422303cd0b142c4ad194e1bb86471b91861235dc336dfe9666f4f2c6a32a92b8fc52b99873f9792cb359476a2aea21996d21c17ab814de4a52eeeb33 +TAG = 05906cbf531931559cf2d86c383c145e + +KEY = 847eb274561fdf0c1af8b565a92da74641f17261a0ea4cf63ba5f36ba7028192 +NONCE = a379511688390ade6f0318bb +IN = 1e588cd0636f34b656b140b591a9adafb8dc68d0abb75531942e3c6ec1d29e4f67853e3d718dbe61b733490525c7f9ce6746f8639e4d271267a95f0940b3406c67ded0aaed36374b9a4bb8c753579051c6dc3244d6126a8a97d4a912569ba139d55dd00c380e7ec450d44f6c7b9482c2594b21f61ef8d165666c830867139262be5ad3a31f44a286d7e86d4e5c9bd6118147efc8e606c522ad0e9a218aea4daa39d1653157e4c3730240fff67a42e4f34186de1c13ddcb1e44020b7a31d21ba6ba96b3f42360dd1d754a7bae75b6fdb6eb3c76412cc1fd8e900d7aacf4d897f4224f19a1d44a77e06c95eda5fe76b11c6f5088e8ca75c87e07edc64c09a6a31371552449 +AD = 331d48e814f660516f3a796b08afb1312625b3b17218819cfdbbbca4c333378b57fd93482d971992b5b15b62f0724d6e7b9beb5ddffd3c70b6f8bdd3cd826663eeb91d37734a686c987efeb4d4906b80c5378fcd07806d2dbf3eb528472a110743df8cd96b6eb67e98b13ac506c9bda167f045a412c93d78e860c9b4bbd7a2d71adbd3530f30253847b4112d4b898b520c7a14fd075e62605b05084f26fd138179c2791fd6e8d3bfbb2735002ae12d986f92d7d300fd6f1dc12c993449f8522f6f32f506a677c8a981aef9815e83019713b2f9943acc8d5b3f6f65b9e2b9a14ad2e300d636166da2d35a6a0a756a76d08709a043d65341695490124971a7574cf0b5845a +CT = fc1f0d7309e6420b42d59740c9b9d4b97075b874015251ad55483068b00f87502b18182b140db07c70a80fd884fd79b7b5fef1d307ca4db0ff046494443e1cae83478d275c31402035f1fc24e26214b78d9a4dac78d074150012f9fee810a121d87a16d8e1eec5700e9facba350029788480a259d9f30df1c2b8df7691629314391719853c0b68614134f6028865700b1fc4e7f34ff28f449c6abc3027f38d7a7f6d84b8f27f7cc5afa09478c809eec346bb58244ab42a3bef61a14ae7640d76591343983de9fe5f1b985ce56c9fcfb2e3f6220779ca6f92a6b8aa726573b38ed7663ebe4c85066ae3f488ea3309593fa41dba8efd2b8f44b9fa8f7a427823c1228093a3 +TAG = f1832022e06228c36181856325d4eb68 + +KEY = 3828b138f72f8fe793d46c55ad413bab31a51e7a9093cdd10fddb4739e28e678 +NONCE = a60413c0ab529ccf3de58468 +IN = fec017c1c51da5ce9dcd8e84cdc03a43145b31edfd039c7c85d8811a2f58efe7a2d7590149a98cf0b5af82d3e0a325223bc9d5585ceb1afc4cdd96024be6c8064c2abac14f68e65de49e25e3e967500ce5b4504d00a9cbad1e86bbdcf65c01a7a92de27583b7b92122b6a4923b7192994a1edf00b75d14a982f92559dbc2d5e427a75ad29715375d90193ddbb39b9a52c1a23d75629c539e0a6ce822c7c08fc77dcd3adc357893215df4694673a16d34513de21217ce86897c8f0575d213ce0c66eb1d1985fe73dd86da3ab5e89df4243e1be9dd95af94f878995d02929ee42a062100d6d4d3884730f54593d5ff7b7ae53e03d4f0e10f6f4c3077206499ab7d4de1e825d532d0918f +AD = e2b16ff2b6c73c9374704ffb4cdfe7bad9eeee32157f2eedf427f99c2cce80c5aa4d9145e85af0cb08e6ed477cbe79ee168ded5c0895f9f4f939c21916b3dd5c9d268b3aabdefb85d953bce9b70732fc9acf6c7b727f78d8c9aaca9e022d7cf0f95583e81744227d87fa34ae19de44d202ba01e3d03993f38c9b2fb00b54dfb677d67e6f5a15f46c29eb5597ae3d5384b37bbeca3f3d825e2b7cceaaeb36a8c1273062259608956dd0c79877cc460d0268de27355e34b9d8d1188c062ac5e10a73f2d70fd0636304b3de06cffeedd246e2db19b8b66785f9f9c62b8f0198f29d37a4ab5280f4aa0320559810f89a1618844d0ad5f3a4f5a0e834ab31e56798b7158217f834d372c36f +CT = 88ea11ef6b6ee6fb0be77bcbf227e77508922550ef0d7534bf05668ae5fcab2f4defe643747716e7e000950e36c6cb24b79987389a150382c091d39ddf841b0a5e31d763d9c59753a3ef36a23b81f38e6e715357395ce715d30c14d6ab5b7454804ecf633daa39b6107f562fae6a646efb25c1119dd17955bb9e640105a21566345408f72f2acc8f2726a0be465551f9ae566da559fc0b92c36764c5ca20a18a316c02e606030a53450e7ae1146050a48a64c600d33cb84389b0bdac7ff45d3d1f2f669a6e365ef722d76d2fe9bef2df93c58bbdd6965e18111b5de0f4a62dbb874161bf8adfa61e9cdecd97b4fff668b3efeb3e32eeb929cf58d94ad8077c0a2ca79e80877c5d9329 +TAG = 9b47afc5816b7229213cd3c9135545ed + +KEY = 91ea63dc27d9d6bbc279ec6cecdce6c45ff0b247cfb8e26b6ab15f9b63b031a4 +NONCE = 80a134fac73eca30459d5964 +IN = a848e41c77ac8c733370435b5b6a9960af36031e96260d5703ce15b003606875a7901cd11e4571bf88dda29a627c0b98065a8b4e6d382852dfa4f47d86fa08e48ad8f5a98e55c305900b83200d44029f304abd21e0264115192a3fd7b0eb69b9f8ca7865b3be93f4ba5a28468fd7bbb584c32ae867f5146efbeb1412d3ac36c30cb308c327a6f207e30f561d6efe0a535446c693e14176e9e714ffb5a5b1075812909a362a6c4bbe18322e15690c2c9cf5a18e0120c11551cb7055b5aee97e7a56d7c24fdf1214641c8eacb196d74f3d96a7fbecdd4fe52dc7b6ead9041cafd5a3fdf91fd3614e63189b488d4d7c1ea3c6351d112a2223b29d390ac3ab7f09a60bbd3df6e0d606d902aa44244334 +AD = 47940a0694183b2fcb5e760c9ef6dbe4cbff6ccf33208337a981138f9d35c03f8adbd810e94636acaebef6791b531a65e99b03fc78e7eb48036615874e97cf762fa6ca5d880bb2c2f644f1aed70c667880f98834d501caa277cb8ef1095ff882e79c3a92ea8982abebf63ea9ed7e9a24d32cb81d5d98e891974e3d636a59e165984e00f05a040d33f07b39eccb924fb24780a422a6b2b7bddb5b316beddcf6fad20e4cee7d0141c2f7c4e4f759db8691dc7b8525ccbc3ee6071a2ead63e750d6d92dde7eb1303d5b1194702b6c3e0c2e6f9649e60eeddec9c1f71cf309af0672cd2ffcf94ba7e6c3d7cee020a224a9a956274d1d36ba16030e215d90a165756666eff066a8e51bf7d4babe8b7d8d +CT = b90449af99327afb1124bb24f1c8b5cb878423b0370d5f7cd297b28cc4135ee77d6f1913a221cfeee119bafa873072bfa79e303fe377bbed05add41ce3a42ca4632b98f40a36227de1a9ba84d6176c01eca9d33d954d0ebdf4e40f136e0f6a56156fbb33b344a8a433941fd6e08774bd00075aedb0e396c2bc37d1250541248dbeb899e1b5170cdfeaf7b89995b049428bb277c501354f8cd48fb58f6f04f956dfd099c48778dbdbb4c95b7c9d6797cf6d3bcd1d00e88cea885ee4a10d94356509e148990a0e10dd89103a9d5c8434a7bdbed6c0ac1271e0709eba144abf3cf075c020e9f7835d5a98fb2439b399e377ae6e19fc5f32df9ddfb9e936190d3e9c62de99835249d1f32ca3f92ecd44 +TAG = 6ccaf7c142d86b83e4d0b4289b49c4d4 + +KEY = 1344db082889367fd48c5f06bc39f9cb9e3ad4b92fa484ccf49418dd4caa2e19 +NONCE = c04a98e7e29326b5330818d4 +IN = b0e12e3122c1ebfdcadded5a45163a6208548e9bdf95cfd18ea504e5d2e97372e58dbfe460a57b724d38f3bc0ce02a54015779bcf127343474d7d4c1402d598bee56897203b903da5b819e2218bd0d1a2af11c542544f02c46969cd2bfac683b76a8de61698ccba63361a1a0b570adf69d24e9a7e466873c8c12e25e0bcead7828386179a4d65d5bbdb800eb52fc01b67498d7b5f9864270162158a8572eccf541b07833f001848672098c57708eb479855799567c318b1aa097efa70db0d8a8d36fe0ac22ebcc2870baacac690a79e07ab286acad9f7a877939cf2989cd6200eb86dfa7a41e969a3683ceacc7c97d1cd5487f13c439a9777a67770687657d38267a347a0b6d3aa3cf64e7f31017246e4369da +AD = c96db14dbc2aa0ce3ac63794f75c7e78037dac6763282edb307821a7938de4baa3d2e35a8cfe0c8724c2a8d870d0a462ea157e15aacc69a3c881d9c819225ea8be479872d55e655c897936c95b9ab340820264567495fc5e4e3354f42b84e191b470ca9f4d8fc25d011bf9c9e73e1590e1bb919dd2f288b26935fbfb8c93e54331dc8edad5e1cc4aec103c2f3320d59870c1770319f105ee790b704ed655be423e63ab040f1153f41e7070ae3a0f34d217c4649c180c84814463902d99a9396f8c7c85a3a4c8ae2f01737649fae478a40fc72303a108822775e9c421f945cc0eea992730790a9aa0c0d014518dab371b52d30b5a560f34946a9344cfb8a19b09ee9b123bcb8f642780697508f04983b790dd2d +CT = ffda075dbde7b874995230e1324f17894689baaa7f1354e26100befb546ea23dc74807818e43a3cee00ec1bbb95c82180489ae5f3a1c482dec28f96ecaf5ca4655ff7f33c814197cb1973cf02a0b720a5c44068d8ddff0789fc1e7f20ef408c1a438133fce4f7a3e8c85d95a381b94e949ce47a85895c4be7cbfad468e52a160dee34b8ddeef2ab280eaaed4990ecec790ac16de3c74aac6fe2d5e28ea2b66a921c894a3971cee4a2158054c3567e0d941f867ded5ed1d21d8ab090848fb3eddfb1559bf11815db52b8eed871cfc117980f297da79da31da32de3f162a03d95090d3329da3662df29e6ec9b236e0f7c1d7d957cfd54d5efc99c694b9dece989912388254798513d881e5943ce830729a8e2ddf +TAG = 81c55fe9aa2de0d63efe3f74a3d8096f + +KEY = 31dbefe589b661af00a6fbad426e013f30f448c763f957bbcbaf9c09764f4a95 +NONCE = 147fe99bba0f606c57242314 +IN = 908bd801b70d85085dd480e1207a4a4b7ef179dac495a9befb16afe5adf7cb6f6d734882e6e96f587d38bfc080341dc8d5428a5fe3498b9d5faa497f60646bcb1155d2342f6b26381795daeb261d4ab1415f35c6c8ac9c8e90ea34823122df25c6ddae365cc66d92fc2fe2941f60895e00233b2e5968b01e2811c8c6f7a0a229f1c301a72715bd5c35234c1be81ef7d5cc2779e146314d3783a7aa72d87a8f107654b93cb66e3648c26fc9e4a2f0378fa178c586d096092f6a80e2e03708da72d6e4d7316c2384a522459a4ad369c82d192f6f695b0d90fcc47c6f86b8bbc6f2f4ea303aa64f5ce8b8710da62482147bcc29c8238116549256a7a011fd9c78bbb8c40e278740dc156c2cc99c3591fec2918cdeb5240fb428 +AD = 5a32d7044f003b2ffefffe5896933f4d8d64909fa03e321a1bdf063099b9f89752d72e877291d8da12340c5dd570d7d42984ffab5177824fc5483b4faf488504e6822e371dca9af541c6a97312b9cbf341b4198b0902cd2985ac10a8b5b5fe9691bb29a88344f863c980e4e871a72a8b74f92eef68c176e9d2ef037898ff567298e186af52ec62eb7429a8004ac46b945678b82859396d36d388ec3d67653aec35cf1da2684bbc6c78a5f9e3ce1b355af3b207f64e0fa73501c5d48a14638d0906c87eaa876debcf1a532c1475d80ed3d4b96458d2236eb9f67988863bc6d5c16b96b93d898683d248d7bc601b5035fc365481b89465e37a8f7dd64635e19a0282639cecde72c6b1638e0aa6e56f9c00d031cdadc59ce37e +CT = aeab9db30a579ca54195e54a9e6c787f40100c6d12ceee35643f36ae45f618cc9bb66aa4c0fae0ec2686cb4101a5b23a46877460c7e020b38b0d8d1f533ecfa99df03d346bc854a578276d7d5685ad1fb03655683a64aae4159c9efa6781f053057e0811226c7c533967a94587f4025353b28cc3a2ce5763783b4c31e7818b8ad9195bc03be8f294f9f6ceac578f9d30b22b1f5a68d647d46cf6db4a9c3a8a5c06fa97c9efb4578f501ea96db1f40942e3f24c44a7e4070a6b931c39947d9692930b67767357015de51a39e46fff94b6019e4bc1ad9d216a571ba0dc88859c49d2c487ca657384e49b4d382d86a60c8d5195320909c4e82fc077a3b22bd4eccf0f067e66ec78eed642b2d16f0f304f60f1d9ba69e205c982 +TAG = 17ca09e3084504fc22e914ee28312c8e + +KEY = 0ecc44c9036961fba57c841ace4ca3c547c51d9f126567bf41626765cfcbd53b +NONCE = aa98b6ddff7e4b2041f29d70 +IN = e49a2a5713f507bfa00c140dfbefc0c43e37bcb932e0741db03f0055da61cd837b6e2d8f99115d70750fb23685a17121b52e98a37c87204e0207729fd9219d11a48e57970d790338793cf329f7b239512a44dd4409fe9d157f92123dfc5cba24af106442644dedda87e1d9e95fd395f2f0ad8f7d27f313e6ce1a07d9845dec5ad732e6e4749b3a161527c8ce42331f5de1d700650072fb68e9c7645a0e0e529d0563d2727e3fb38ed341f74ef1ad95a0216a440e1384d0e7ef71cde38cecdc9e2b2d563f19014c40c1f92ea0af3b4f6da9146d433ae85f647153db326a28ef6ea2e0ebac0cc1aff157067c7dba7cc4317d56920ee9deab5764368e7e5b3ce8bebd0fa129f869b15897c09659c53188bf8efb7b6ac7d265c9b85fe96166 +AD = df41db4ef5350d4afcaa88b4a577b3370b96699bbd73e59aeebca6ea856cf22694a9399ae7f97a3bec226d82f5598f8949dfb92530dcfe77770f066f2af988fba5543b8ba7655bc43f8dca032981a34a1beff695c6908169d475c55b2119fe5578623f68a9dd85b653656881b0db4006d3336fdfc784d1805e48ff478fdc196601f044c9d33fca3ddde2db0102f90fff0b370f520e00e3786c2a9b0b4a9a7ea6f9d866f77d870c8ef0f3a8bedef17949a32598512af665679dfbe71e1c3efc3dee8f5d4499e20dc63281191751f67e51f201973a6675896484527d66bed94d6aaceff65fbc4192cec19452b8873f22d72bf2f4981fe656285cb24be5c58e77dafd3e096166b230f18d3f4197fe16f6ec84c060ce0793ae6848311a18b7 +CT = b15b2bc4b9e8ecc5d9c4a6359a805b7590bdb4bfaa9b3fc4d7676d721edc4b3b1ef71b18a3d78f1b31a477cf25e55b278eb3ed774805ae8e5a2a0204f7291d9587663c4d8b1b744154f3b7cef796e0b91590161f3bde82f1d8139cb8d017606ae6d0552ba144788fd8caf435ab09a43a1f4057776af49bad98fc35cefefb159cfebfed76f2e4d18b7be143677ff8b3d6e2b440fe68475b5a1193bcd19ab157d0d2257f33de8e50091ea3388648c3410aa68c830566a0413d92454e4eff433c3edc74e8f7516ec17b2c01cf57a2d7c48db97b706b8d7da0b68051f2d6a87c417f46cf217a48611980890f669d39b478c35d834ed2c79299df2381a1215d6db303cb63e2795fe517649874226e0a6dbfe2c86370b9fbdd8c5de349bfa25f +TAG = 7082c7ef72c82d23e0ba524132acd208 + +KEY = c05dc14b5def43f2e8f86c3008ef44e4dc6513768812e9218b2b216818c4cec6 +NONCE = 5cfe0dca6e599ed9aa89ba97 +IN = 8a06e2997b8e5f8040b22e07978c83c48d0f90bd2b2f8b426b43feea0b614d3b0681745ea4224cabcaa25ca45c3053a6300c47ffa4f72e838db135ae35c27939aad4cf7f75fb61daa3148d869057598e4e8b44c6fb19b0d9281e18676d8bc137489bb77a51a3a8f807a896d558f00040e8729ea9bbdc7db6102c8b99c8a1eacb0735577bc6533cd1d8147013935b6344116090a1bdef1f2e38a877a50c8fc0f394bafede31375c57476ba06d95ae734e6dae771a32e5091dff71d845c5f7385b9b9069ced12fcfea34a510880b088bb0016e94a5932c89baee038cbafbf06b3d09426afd2d5dd5e392636362e9ffa9186b5c753eb84f82f68fb1286ed06c58a5a936cad018ebc4269037b49f2ea0349373adea99f06062e5dbb0bf94f2883f5c0556 +AD = f2a3f7af8ea984bbd85953f14202c6e478f98d0bcaacd414329ec480d0c29fb4c1a052d3228c883928448f0bef12cee5b69829b4a3eb4680084131867cfc3d3af84fcc0d80c2292d3fe02405634f6cfb20b0fb90345da3a557fb30582175c32e432be66ad096f9425ff4060df54d6741fd6567a1e2fc5f6f3ed95cefc806ff64ae91ae82920b5c829ea026f83fd90d760e240da3c9ddaafe4d08507f4af1049056dc6d09657779a3dbd889d851e97d4ac60dc66df2d24979ba8947a7890a304bb301d0d42b67824e0c68fc882e90cb6deee50c2e3d9f0da59ab23c997b05635a0d56c71fc39aa0e6b19c43a7fe12d4e4145453cd7fbd8a3f33bf5451addf05052df7ef044a33513bc5f1a4cfc8b68015664bb5c8e4bf54a85efff109ee96af75d4a5 +CT = 2cf630548d6f2b449057c7861920308958199f77b123a142c6b7c89c4982f4ed0efa2fe899914ddbf4543e70865a5e683b0721d6c8443df2e697acf31e11c8809aba94196409020a7c64d396fe136826455aec973af23a6c7733cb567f5ea550e50e0b796623a97807d042855568e3c568990cfc818c31a1bf415337f43e9baed57fada2fb2ad3c3543f2b7f2777e03f84040c1c854c310ab1cc5dc7f2a5fb213af79ac068b46c7d9475bea126adf079e2100bb57904a931faf248e0f7d5832ca83ea8a283e0136979737132afb1f4ab38d307ac0774814f4d5ecdc4aad79185c05f8a706f579b78f2c1c7004cb38e6cd22c2080735b34c3f6134955ed3bc36b1ad5c8e33209c9f3c658fb07b59b6002b2526cd8d853a5c624b7108573d7df60c827 +TAG = 3dcdabcd1c82002a551cea41921570e5 + +KEY = b33f449deccc2ef0d7616f22b4a00fcd84c51a8383782f66f1696bc6405005ee +NONCE = 6afa8baf923f986b5779ac6a +IN = b0af85a6deae5fcaa94778bce015ce2da7400ab768f3e114cc1b645fb2716789e2aeb96894fda6da5bc24fcf2466124720d6ba99e5475d77e5bcf2c2f8c8e5becf5eb73ad650861bbdeb51ba5ee789c227478934200fc18f36e4fe392c99d4c3fe0b38b40d2e84f831b8ef9bce9ac1362c755943521ecf5b5cf8fbcdf08f2d47ff7cd62838597dd342695a1b037bcede69500bf70bf1edbb40a17b44695bd8ff8bc8664b3211a6bbfdcbd1bffbfb1a2ea0141cfbc6ac841c803b137be5eeb2666c46c09cc1c4fa82be43bfd56e7a2b8ceeecb6efc1933a90213a0e1bc7aca2af35f2d1dad5f0d9002561064a699f1ce76c39d9c2224ae596e88a1517e19c2115370768d50107f3f2a55051838ae5897acf2ac0814ccd864eee2f6b5d7a6728c6ac6e6a57327102 +AD = 2134f74e882a44e457c38b6580cd58ce20e81267baeb4a9d50c41ababc2a91ddf300c39963643d3c0797b628c75a5fc39c058d319e7d6deb836334dbe8e1fe3cc5704b90c712e1fb60a3c8b58d474a73d65fae886394f8b2c029e420b923f2af4d54c9de3c7fa2bccaa1e96664ccf681cacbbf9845069a4bfd6c135c4392d7d6be338eca414e3a45f50510718e2a5a3e5815eafa0c50172cf5f147510645d2269929843bbbab682deb5823d4cdf42bd250bdbd20c43e2919d7a6e48973f43a4cab73454b97cdca96721ebd83b6dbaaec7e12cf0dae678a57c431b81421657037dd47dccbee73a41f56495fd7c25c75744fe8f55cbd1eac4a174d8f7dd6f6ba57b3e53449a9ce7806517e3e07cf6546a0fa62c7b1fa244d42eee64a3182461792edb628e567b23a +CT = 0fe35823610ea698aeb5b571f3ebbaf0ac3586ecb3b24fcc7c56943d4426f7fdf4e4a53fb430751456d41551f8e5502faa0e1ac5f452b27b13c1dc63e9231c6b192f8dd2978300293298acb6293459d3204429e374881085d49ed6ad76f1d85e3f6dd5455a7a5a9d7127386a30f80658395dc8eb158e5ca052a7137feef28aa247e176cceb9c031f73fb8d48139e3bdb30e2e19627f7fc3501a6d6287e2fb89ad184cefa1774585aa663586f289c778462eee3cd88071140274770e4ed98b9b83cd4fa659fcdd2d1fde7e58333c6cf7f83fe285b97ad8f276a375fafa15f88e6167f5f2bfb95af1aefee80b0620a9bc09402ab79036e716f0c8d518ae2fa15094f6ea4c5e8b283f97cc27f2f1d0b6367b4b508c7bad16f1539325751bd785e9e08cd508bdb3b84 +TAG = 1976d7e121704ce463a8d4fe1b93d90f + +# AES GCM test vectors from http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-spec.pdf + +KEY = 0000000000000000000000000000000000000000000000000000000000000000 +NONCE = 000000000000000000000000 +IN = "" +CT = "" +AD = "" +TAG = 530f8afbc74536b9a963b4f1c4cb738b + +KEY = 0000000000000000000000000000000000000000000000000000000000000000 +NONCE = 000000000000000000000000 +IN = 00000000000000000000000000000000 +CT = cea7403d4d606b6e074ec5d3baf39d18 +AD = "" +TAG = d0d1c8a799996bf0265b98b5d48ab919 + +KEY = feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308 +NONCE = cafebabefacedbaddecaf888 +IN = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255 +CT = 522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662898015ad +AD = "" +TAG = b094dac5d93471bdec1a502270e3cc6c + +KEY = feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308 +NONCE = cafebabefacedbaddecaf888 +IN = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39 +CT = 522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662 +AD = feedfacedeadbeeffeedfacedeadbeefabaddad2 +TAG = 76fc6ece0f4e1768cddf8853bb2d551b + +KEY = feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308 +NONCE = cafebabefacedbad +IN = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39 +CT = c3762df1ca787d32ae47c13bf19844cbaf1ae14d0b976afac52ff7d79bba9de0feb582d33934a4f0954cc2363bc73f7862ac430e64abe499f47c9b1f +AD = feedfacedeadbeeffeedfacedeadbeefabaddad2 +TAG = 3a337dbf46a792c45e454913fe2ea8f2 +FAILS = WRONG_NONCE_LENGTH + +KEY = feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308 +NONCE = 9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b +IN = d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39 +CT = 5a8def2f0c9e53f1f75d7853659e2a20eeb2b22aafde6419a058ab4f6f746bf40fc0c3b780f244452da3ebf1c5d82cdea2418997200ef82e44ae7e3f +AD = feedfacedeadbeeffeedfacedeadbeefabaddad2 +TAG = a44a8266ee1c8eb0c8b5d4cf5ae9f19a +FAILS = WRONG_NONCE_LENGTH + +# Long enough to detect counter misuse issues such as the one in BoringSSL +# commit a3d9528e, when the AVX2 code path is enabled, using its EVP interface. +KEY = 53a6f0d9b8a81818f2fd7525acd65acbaac82684cda4fd357b1ceb6146b31ee4 +NONCE = 05d8a92b5a510c3a3dacbbc0 +IN = ac0ae17d3d0ee5935e18675c36d9e43967f6da38dddec14c7ec574ff8473e11ae5019e638232323c175b7672a7462df6709f5014bbe12a1370a1ffb570177927106f995dc8f35bd6e6228de7c16acb71e583c87477dcc7b17a908ce01543496c2cab8a14a21c43b18fab52d8a882dd1d999b4275db34c7f32bcba624d128580d7566a2da4bcfcc4136d58816c437d21e90456fc86381b946b8955f0448e83564165a629cb2edb978e5941010ee9153b054ee429b315058334ad7899aacedbc0bf423de69f57c633b56033c6531dde29258694045c46a797987471ae6af8fee8ad0c1be4149605064aaebafd1c5592e61beca9b5c7771410a276c3ae517490735ddd6af499ff705b9fa68d50650e60c19f5ae2c88dbb6d612afc7be28a5f55556a2163b6f66609f7d9ba7e97c074ea39a618727421fbfbb6453ffeefa643decf11404764515d28fce8ba66b8c85d077c47a54125a38bcb6b0adf6d248ba0a9ea129c887c66ef537c45e9fd3c17ce352e3936cf139e13a5946a7dc9dcb6423ca6a051bf560cfc572ef366940e71c81aa302cb9701f9a5206e9eacfe9835bdacb6425d058022a27fe73e5edeeba98c7a3edb761578ab2ad5a442c2dc1cb3c143c6f18dbe525fedd2a9cee0ada3b2c116465c5cca9a7e5d4374b29aa4ad8adaff8d6b0d1ac3990685240ce022faaa07241f9ff445566b9e0463350792cadcafd5fdf5c37706c0025b3c627185b356d39dcb2244b15566e6e3f8942f730fd6d855daa1456fe294f9156c4b5131e5bde7f2d938ceb6c7f5deb0f847a98b7fd11a3f5d0163eef9bbeb83cfc96dd8eedd447901ff4d3a35c0ea1f691b01385eb39fd265f756bbd77bb61b1741db0502947b4b985382a08a5916da809a8afd3fb1d78d9e16f8e37f51aba100d031d9da8613e9cd2cc621025b47150b3e76775ab23412d74334bcd79746cf601407481310a923047ac68a4e6a7f7b96bcd85bb6f24e38f03c80ad41a0a581b4246ea4715ee561cdc5384a51a6fc9ed8569ba6b12bcd95e6202ecf834dd9062ec539cc8cc4ed64ab9ff85998da0e63161e7391b14de47dfde41523b6c614618bf2fd1edd68a5de1c03c4181569b6c361d955c637abbf4efdb5dbf2f0dd2544329c44b77081a48f53231fa9d4cf6f2186427e469d0cfbcd698f7e7cf773240dd2b807a2fe699f0ceb4a2339e9cde01114b2aa5c3591a82a3a27b308e1e7f092af8ad97bbe7b28d78ecd80c0c0a28372193d66bdbadc0b58e4d5408acace53bd5e12101fcb25754f8c545340fbbd1328287044a29d18f40a24b4084febebe228b67cefd970df6d44ffdc033a50534e5977bda660c589c6e3c3a28b4c500b29ff4a1c3eaefb068784a29914ecab7868a43999833b0b37ae79afe58875a0425262e0ec7e10ee8a6bc1c97d332bc2a6195de239a166486a3c1ad8de3a026e5b1757f9a778a511024a260c9809ae3b22d78f18ac483281a796b1ccbfe7a9b9f357d12d340e20bdf2037e8bb91ef858cdf2eb9d7161a756d8c244c55524f8f5be2e4f18641bc4c2409c14816846c4655be716276d8356e516640da49e8412fcfc7ac0e084a079129b23e54952d8030e1f8ceaafcd322dfb4bd189bb5d940ac83231de0585783387d0642a245183f7a251779bdb12c63e9edbf3d0c94281140598fea9e73e951ce650c984cfb1398f8813abf8f8827af5eb64a65dfd1305bccc45086438ac439a9265790fb225c509ce3c9d39e25d2276d7f3c06d7cc28d33b2c21bb38b50dca5b10afc09da83ba12ee878e0f6054e8d3e78d731671de4f9d5a7b97298b01f37c7e78e5fcf5188554bcf5d42559d3b15153bb3cd5a0d1cc4a96d02ae8b1b115d1ff617b6ad894ce0585f46a2a5f4cc1b83065c1d7b5d2f25f3f4bf9966b4c7d7156931861d5edd199c126f1ee4ff6345023419d0a4c87f3388fcfbecbb6c1e2f4745922b88085d21d4551e4c127eb423db87a51c9f9a140f8a7415dbd70c4b0173e687a40f895404f2203e14ccd61e0e5b0d5aa3fbd1c8affb5807d787d840916ece24c56c50d3d9ed9f19d73f2c80c461b5b3c07dedcdb41402c3826a958d74be48382dc741dcf3e0eb8955397da33941fc47288147736d778914a57effbafccd4cf293e6ed1c7d19b55433bc0363e41546b3638a4c630eb35dc6a074f90185cb9daaa6eab54825a4daf76f49ad918e90e5777a826d6d5d52f32f7ceaf818f87251ab4d1b5406ae94e41cc97fe022b144f26335829d9c81725b3daead621a0df71313d18214ff8dc687a7ab86b8eec3070ee1ca9f62005a0cc15ca6e2f4fd893de8fd91f6210f6c96a576024678535c962a2dab06f56be377dfa74bca089adb7327abd05c3ad7646b5e9e6fc2f29916b34c8642f3c0caedb53b8f30c2a77d1757103b7ed156cdc703911366b02cde87ce7343886987f7a8c028921a7b87c5c0aca7ada34970a6d0d32eb1b177ed8e64c1fc6839b9d08acec19560bf4a815ca6187635f0cabb8bf062e8216d3b09b7abd99e956734129e16a7c4f3beb850fe2b1548729355f9015c9bba336d3e26a27b3d75d75722f7a8170d15ebf77f325c97778a5a9d7c76d3e101eeae354e54e6fa60b58cbdd900751854ede326b58fa5caca073c630f3719d6f52afe675f10d464e8b58e5fde75a4f225063ca48d76efd1b645e4bc89d98215beae765601f635a3bc8cfc08d74722f3d95ccb4cb4e3ea977d0c534a4abb866fb9a31771222cfd998231c30bd16b6844ef71038b67d72c910cca40db7260dff0b74162449a9e2cf15d7dfbfb3a685080e6c83ff4341c95819c0317502ed49af7ae688b52c9866518f74d69b4144500ab9d5a0829b9287d5fb67b78801119ddae7a76e80be8c4dbcec7866ffa7d081406e51cf617be061530b539cca7e1ef9118cc06e8eb2a01425b45947a1d2332e360acd0654bba8f1fa43ece68467690d36f6802a32f03f9ea056e57fd548dd4a3225ad5006c6c931aef1990639498dc88a23895ff1f75520a8009dbde4debc20ecc546e378eb7ed5ea3740d2244036588471d96e4751390b6b76b39816d853944cb5677b493b36de9736ba0fa404ad4b3a7d7c54d0c15072c040064b871401b25b88559d059a9519c7e2446b0d110a4aba9c12555e5f620680d1fea2359bc85cd15b5c0bfd6b3715d647514118cd60483dbc9c83e285192108f4ea6bcbee1f0935044610c68d052ccaba23258d09465d5521e2664d59358621ebbb8f28a4627362c8397f0a9852e5d8daf53a961d4ee66299e2b54d8adf5134ceedef57011f810aea76262422236c3e1a478a759584c7880fb3f32389c4bd4b637caad7b2bd6fd295aefb150754799434e99e0fd45c1cc4698ab14d1f63eeb06e53797cbdddd45e7f87e85b45a3dd0df6335c3b1addee87ba953bde29ed98042d745c1465a967ef922993798966e1c8b96ad6f68404136be0caa2264e24d8d93aa1b99da9316c7780904753d4e0b45cf282b43a0c91bc9ff83cb25cacea2ea72563b2e759b69cabbb6a50d6a0a5ba545622e5ce576cc301ba35afadbfd1e26668782e1d741feed8aae894b564a425141442fb8470b325cf7c8e1552973463bf4e67a2ad58d15417e418bb91d2df4b1310a0a70ac744bbb4245efd2ae642609079a44cbf6be19809a5ff7ad6847432368c9749cfb336ddcc0e6f52a699b910cd24671f38af5dc39268a3c87771f07d53bf220b7c2d5058cc7b0bcd492abfedf9bb295ec304107130f0e98dacaac6dab998b511f176d48daeb81db53643ad194690b6e28c5ed2927e09a1e959c494b90db401681f67bf1e23fe9ef4c903f666ef39332a91a25c63efe9bc518e9aff61842007dda72dcc0264aa47543c0a8b1f0d25749ddfbed487282241140d4c64def1831c4d75ca975fdb03258ddd013445e08bfb479a516b011fe3a12e4bfca439407c0022889e46914cd41a4d92a25eaa57a55bc7337e5fbbd11584dca34adb5643105c8171e53cf04b1412c3107e72330ebf1b52f524b4e72570cfdc0ab179991f3782d05091ea57b1a233048bf062e88939cfeefb61e8beaa90395faf61c4d974b23723a4a5cd39d70f92620f8f4f27bc99ca67bed7fb6e594913991ca3025480ad791bc94a0def36fca491a206440ec31e32bb85850c3606c875708309be63c2b4f5c477521aa08e1d059cedaafe4fbef5523b79f88b57d0c81bbdd09202095f10f13e2609e833ff41b862b2214c22e8f2b04a363b38d26bf95c07b184b9f909ad3a92122e158d3566d2204b22d4f2f3ce11a65544ccecb01a4a5ef62bc969fddcb648224a5c7bd94f8da9a7d4df393d880f537a377888874c19dad357a0564d303a5c1485c1451ea55d68779dc0c11c7c38025660684ba3f70cbbab00d15b34c0f2342207ad548eacb32ebad95292e85211a8669b586d05b0d0b9f278a35ea4d78e97fd5dafca6b72d8e1fbf3e704a60a8ec60befe2e3e4d3d37f9d33a0feb88add59f0171ddeba0b79a52feb9a1f4a7a6ee7c6927bd10968fba788a807409346a0fccd4f7daac3c8591fc689aed881829d479e8d360cdb5819d5eac718a6f860f2d9ef6a0d36ef6e10efbb37819bb7b03ab7649173447b2cd47f3433a2422b1611dff91cee0b10c6d060d4e84a9e3f4dc194514cb67f1e3985be05c845fc92b41955d0f61aeba6268789998bbf341a8b37af48f07b13a676a11d27330529cabcd52365842be559857cbc2a63a4ea1c77fa8619040e79705c5b51f473e13b73fc09c28598e070dbbb63ce884c2843ec365d4c5bebbf815ee3314dde0bab6b0a71a398e2d9ee8ba2f832863fae7eb0c18adcdd17f1dee0df29a8409acabf516c8e6dfea5a264c1c6657f774c86a14cf96eecac18a41b1650a9e652c6c9264b03aa2fd30e333a9f24cd6b0313358e3c00943a1de63ca970b7da2cb8a0fd1109cefbf12176f5dfb59457480428b194e88449bffd8b8d87d05d30f9ffe9ac3a7442b0df3418acf9165b14242489a54b6b47ea543fed5de74a00f61ab2af553b60d8d21c76c42052c72e4841bd94cf88185c39287c04d05f6336ae581cf7528a59b2874795caca79f5600ac64ad5820a91c711ae5a1c3762028242c5c8a9aae89177ec4db5785cd07402d45805a2e2e970059e4e6483074df1bcc01f57470fb66f45ab475ebb5343b727168e355a6c25d42384e39802d7b4a8c54ac94d82de12f8de13630ec8c19f008f98c505dbbfb21b363472e23d0147d1ac555f0981e2bfd07c62d097acf930094dcf239a40699421b207ac2575b7edf9b1d772ab066362820c182c2c5097a47d1dd25ca9e0dd9c3ae94e9a8f0dece74cdeeec3a17803d5e11f037820ea20364234079286a7c291f3424292b0eec3e956513cc6b078a76a3b8ab42c5fb5efdcea1d438f7ae08507275b48f9588a15be763ad094885269efa7330f6fc9d4746997c98d9f5feeb6dff2734d75afc6a11196b35bb9fd0c0af428cacef0df2c5ad4e5fb4559f0f93af2fafad6fb77f453238f409ec71a912350d7b62952e4858927f620d31569242615345265ff1cbbd7fdfaff35a45732628da663bfff3d3af3d7b537337754554458a2d1af0e16aa8ad9436096f42e243109cad32fac1adc58d714cd3d0d8483c783006991f3da263ef5ae1ff2ea06584e45849d64a07170675c29f0b2abcf1eedbb63b6f5d9dba600996c7d5edce9ac69448d05c0704fb9f84e831b60c376b8a5d33ea22030e2dd3dd421d8e0a810a77c085a3861fcba214a8baf592d624d673fb34f906581d923d80b06186db8ce5fbef2bb750166f7556adfe93d4951a825d55b0bf92c9f25776df784f6aec808ae221cc98d05ce988fe6a13ff96083dba15500e149409b54345274e3633fa8f6685d6fed40c20a5c5705f8b37099a5949846ca15def5a6a427eb4eec72747f116366adcb9b74d3de0b125bdee23ca98ee6312f41fa3d9bba43a8d343552c969c41f766ab4341a42ec4cd6f4d1d4c4b1f16979e5389fea36a150580418d95520506fe0cb1a1d861e09d21c57d88c46e10a3c5ad1aedc8f2743f5c06f10d6da9b2bb3ec783c6f5788ce9400795022cdcec197f9dd3ee4cd26531e7f057b6d9418a0c52ecdb35a24a2a079b3d396017feca8b31aa55e3d5ef79c9ea9ccc7e3d0b47f28f273276666fa1763b3a452672fedc94557d984c3353344a8bc9fc833dee685e33d63540d0801d8068cf66cc48ddcb0d42cec881eae36fc2614f96ad67fceb5c98ec33fbade0e3049178d503c13c2d5d71f32f4582d1cb0f47a2ace578b903796768a906998bed2995798251d7eb92faacc19255bf12c0024a94971c185841113faa288beb7e58d4a98289630fb3d230f936eb1b9d9c7b94b5ac9d3a211c0b454a26e29bdffb522548a65e8dde3730918fdf0575245e71ba013ce08f6e698342a61a81b1355d2483e97c06462cae1cdc7787f4bcee4396a08dac9c14981f2a8f4614a31b019c83782d5d8370acf9db467d9d95e8efbe44274fefde5860c2333cf81593a2ada9f5bb6c2362ba97fd7c3e5bc836c327c66b57c0f023efc0c0ff6feae0e625df2f4e21057060170c844c86412700d7d337b1f7835a0dafee5206cbd76104c5a36623c7783213f8dd457b5e69a86b74030a27b3c30074242b1d97e65a233885a681ec5a8532bce9dca1998dc32c6b40dd997b99a6ed6288e0b9b09447e356bc5345b2133571e65d47db2c736a391970879103d4137cab6c0724b8e67064167cd5521f32135fb6ca43c1e118adcded8227c9dbfdc18cdce154108eba5d8c60e5362e8fffc5c9ae6ac2572188617e4ce0f432e2476c74a4227af64b58e0ebafaf0b1ce01723ecd36a2a4167b7991e28b6a9e81992fcaf7b4b906d0361add02104db83914f28baea26b50561faa46293ba5247e8263ac0347509c36405747866d2fa2beef44f366108f6a4047e282a477c28654511075ddfaad9b9844e18e67320a831e647d923b2720d65ddd9ece165c222231d3c3e7f0001d15e3c690e9831ceb369a8edf183133814bfd20dd25d50973bda58ad03c4cbda8008556fc653ef401ff76ee858c1f79a0b09b4232768e72dd06e42078923d5647cb310bb644feb24d6b7e9d1167c3676cd96f79965a066aca314089db60bdc40c2be4b69c569ec76b3bb74a43fe731bc869c9222ab5404304a513d4f7d2ec5af278f7c3d664fcde579bba7bd472bdc00a1eb4c46ff69fb7e45e5712919e8656a8887afa28cadd66461fc57f53d574c92105818a89f210d7e8aee6de2e78228b2cb03b850a6e77627f70f51bb919bddf61837a978dd4cec2db138c657214ac07b67134bd53b071e2bffa3608a0b0bac88b0ddcfc1ba4dea17191c9ad76ab8de72118893256a7e13e15a3bf98bb5757a78c58328cc4b380f3786f22c6be81884d213ec3cc2784583a47a4003a59ebea08bd06e290a892c937448e664dac672942b068b839593c442f6e1d22875e01859cd24c17d108696a3196ea4794ddfdf25721d3dd3e754d1ea884e5086479819452991403a39014297fcc734e56f8daae4d49d5c47016fc3ead550783df895542229ff3b034b5b722ae2a2b04ba70e42c174e9ddb89ffa60024aa16f297ac9383b2ccad53de4bbe4ea2fa3fe3d059d16b4b4fe9959ba3c4e58922e7fa2673f50be5b636ee7c79b445471ddf5b851ec3ac505980bb184c8fe44c7776ae9aab4e66ce31fe1bc00efced390a82f96b4866e31ba3ff832a25b1e1d00ec44bf525ae523b7102ba60c1d3a2e2bed004524afc90a064b325a258eb36315b1496c748f5407e922914787acb8b47bdc495e521518e0637eac4b1b4fe1adede145181ec7ef038d48c473d6f296b349d7cf874d329c71f272883eb7e77ff303957e159fd417d5055d82687448950dd149e1074a1785518ebaf7ac167e07f1f559893a20d133b59aa294efebdae1e19a30ec9a3e257203eb9a854096395825ef4d1e4ecf1f8daeadfa049ea6c435c50d67fd21c6f6b11a8be46502f0dda1715f5349df5330454316498660b7996432e679c73f1af33e529ac669496bde538890cc093122842e3e2e4bff937708dd4b1b1d3fc066a63824266461e4af9245032d690aac0ea5636c29606473820ee57b112e2bd68c0ce1936b7e76a7873cad678b26b560d7bb10a7dcad3f69bbf226faf2f572c105741a121fa1c55ff30b2d0b7339ed9aa4c9a3671e6e4b572800afcbc8764b16f0a61c4c1ff24c3b64992cd84f39d1a4d5532a7dbd9f7bc847258a33c509a945e53236cbc46b61fc6fad662c523eef0c1eaa4bc0a49610c8d09659e7bdfa858d2494dc3da0a54fcce229951d366fd17f4120f27ac77e5e6b777693641a853eacec09cc4dc08ff6ba22295acec61c5e6215eaf2a3a012461eaade8faa9cba630c5ce2bee6f1a4676d54b4a38b7b5cfb6c98106a4882ed88153a4f0bad3e0f3d04dc1ae5318e3b8f4ab1d122a548eed47f70edad1a164a9c5c3eb10fdecb24b0b68005b2e958980481834c4f673478d3f47d07836d3c1c513dd920042381f70f1a68671acee2fdd453a7552eba497af27127999a13a33104f0086390e01635d1a0b79d92dd43211c74047804e82d9ab26f97ee88e664871dab52a2a79443e39f06a6e8ac9d5e986252529b389d9ed0b2f55fb16ca65f6e90cc9a149065f499630f973996c1e2b6c53f2ab391b7d78cc6926b1684d066a3a74b86b3b633baaf3730acd28deaf18fb926e1ec9c1f8a2345103cc4cbec05345db57c5adcf062412f289607f5fa41194f69bc2f426a30c7a6f8d1027ee8dc96c9957e90fbd9b16475b82dfd8698195159bd7b4860004beb1fa85e6843eca1acbbb0b8c7ec0b865ed108e297a2d5f915304167e18d01e51497e6e3ea76ae99bcb849f7595fa74c2a6263e2bef65f1063bce05483980ed51eac5289307117f17e99d761337e9b1fb625a1b900e6179f3b02de57a0b5f52352298c8a2d2c816182ec169d2b9c0490097ad98e2edc99c6df683a4b5b6eb73ccee0aaf07e8cf8f2f632381ac407c5c578bc1c5a8d0915dc231b01b92dbd25c2bfd412995780582793736572f1e23ef690bfe6872c2572285cd737a4be91f4dcafef09232de77b315d73f5beb23d03625e031d2438081222b063c343f52565ae314ac47a4fe518b45d0c12f2ceabc5e05c20f607b97035afbe0e29249e47961d9cf9b385c065966b0c7ea91cfa9ed1b55a58b9aaa9de080ca05c6405fdf15bcef74177226eb225a47d532bcbc82a5ffed7fd86c2609b146d86f566d0b84f638d46d6eb696bfbbc62c4fc981a94c1d6ccb9f3f7ed7976ea7e8ff1d2a2d79986fb27f1401f25d5a83f64844fa9e839fc8855007b417b261d325b6e7cb124b27ede8ad18d2b6da8bfc4d4f50c3960d5a1c82e4557b16d05471602d2a31462e4bac9535c9a57389ae0613a674815c2ec10c19f529c9274896dfe49ab06889da517d482145ed8f57ba4b7c0434ce24090ef2459682a4f6342ecc382b4cd3409c3415bcb7f1bbaadfb7ec308eea8b6cb2912469b707c99a55c1754db0650616754735b85a41433a30b28e3946754f90caeb03c7579fc9982e6ec5501d6f23e0f2b6392acc435907d79ea11eb6955723a81c4f02bfc78e2eeb1d0408f8f06b4d2f6d20d90f7698c4e58bcfa993884424f8fcb602ef35d23737fb6aff220927e28c19043ae708fd9755256a8a1660d9c5827bab1b836a10aa23aea9c92fa3b25428b3791c5d25f3f1b63befd5480ac4192c966350edceea8938ecc608e0f063d16d427049ad62625f5177470e7a0d811e8d4273aea8f7377d51db07fc34d9f18497a0c2b5c0bc5e8778e06bf7460f0487eed54d661d74346eeada9090957159b86f8b68183e33d0c3fc134d87e068badd8789d4c7adb829fe08e4558bada5ef3f526afb2c7b6184244af0d07aa5cb525c519ed32298bb6241d900ead0532b0b1fc77a6577963e7a44627ed326741af254ab957ca0298a74323d2ee4f1bca70e20ff796491424e108e03c20f2eed7374c0aa2474a91f3ced6f46165c886a510734d606ceaa08822bfced69def33cea3662512fb42ecefee341d1b499b826ad882542374b032e907a7e6a4dddc4620a5d1002b5aee25711fd2dd6e9d4e90ee350f2889d6c1f4328e4b711fc919ef3c655311637b83b4eff39c157e0510807ec61714b843bc9eb22a0f4dac7e5cc07b8e9ed587b701d9aca2a239e76ac9a16338b74d50578956e06b1ac35ee3b822ca779922d89de7d915afd7d80831e8534b8f8a2eaed252fd862abc99aadde62d4520d9a7c3c3da86081fc36927de60e3479096a2b5025b9a789da01da969cfb0ab2f252c82db9e6663dce3888146b365080f649cf94f991312817147d8f0d1774d8d44ba4afd846060df2de1d1043659c3b94b1eff51fff84e5a81a0c635aedcf677285e0d722e3335449fd0f49a41264fb963ea5bba31dae469c789047812071d8853291fd8003cc31a8968ce7acb68a6e0172ba6ee0e9dedbebeb62143047336c5a91c77085afb01fc075938b306d7e36383ecdfda55b9b5dfdab53aa34000289c398f617a146c4a06404737600484d8d4ea960061ec2cb575dc485f65f275540d0ce7550da08417632b6f0f7d044f6f719ff839aa3e5c9db94d45225a1cf0bdb0c5bffa781572ad605ad37aa988240858c9493dee9f00ed281e93532d89aba5e9e59ec430cdd5edfdfc2ef65e094eeab71cc40b59c997943a0e0dbbc80f1e11834bf3b53153ba1c1f0ccf63b3c802439b2ef1430be6994300d9b2efe4b84e25bd3bf8a566d4851e7fff57cada544d722438e8980a31563ef0558fdd8db9bdd6f1a3e34f06104b680f63c1f80a08ec6ed74bca69bb1023fe63d24c7e7a14ce85db6e21173f2ddf14f233f3787a37e4b347e4d64907fc0a23c3da017c81c27df9fafd4695886d0ddec8c47982912eceef886ab5680a130bfacbf3c67bb4f0cc118274bdfed43bbc2ba56f048d6a390e48932469b30ac84fdfc2e812f32d00a85349bb22f2d8091e64282fca1b40811db756059de5d03861d6a22cfc6289097d23c26c5e3f000f9b34a0e1b28a1269d8673d09107b29ccaa1adc8939bdca312c69ae4a238f45410d8f1b27392d594ceea2a6b42899ee5c5857965b29bea1bc413da618899b1894f2adff3b3a7b05a626e50e42379f5d0e0a148ded33d815f59d1401b197a85656466eaf88ed30d1ad4a87985570291efbb3a2c6f22c0b111e65c843ca3c6179e94335f0f91d4696e1a31107948a042f55f264c32a35e719668483957c9c8e13fd01e5f751870a509f5f06ba41ad63cbd5f706f25b1e598f6c9709ee6bab627211bc38494962e930779ed4ea2a8471d309c4c4f0603238959cb13476b673489696c87ad9da5fef0d6467145a77ae0b1089c8626988278a85be3292680d9d7e4c6866f19b78595d611f15f9a5e37b3d145d5aff4a5b58a3286bd25a862904817afe8e9b9105584af15f54554ca5e7dceaa0fbd1111aae126d74f68bb6f0ce98094dc9a59a31d9526729efa171beda9ac5b7db9118aa94b9b5ad58dc20ae1c328e31269244d636139 +CT = d248b9e47c303f735b0d29f6111a742d93509ae051466688d56b587104a74fab1b259da64475fc0d2c3e28d87ca4edfeaa5715c23dc0e5281eb0c0c14e22182bb02f9f7d3c24555cd6a3ff766c774e67730a920db5f85d47dc23bbbee460f0922cd7ddba81ccbe727b4b489e79a19db2d012dad2a732273dafabc0fbded3c47dbe5b6b585570c39eb62850dc47f4aa0c29bf5fadf334041fdd4658fa6cc29a81192a53dcf47c03ddca9d03b33b06e5b3808be77925b7e7d8cf51fa939e023161d969f92430917d73f3aa10b83d5b7402410280561a27c376ce0b5151a51be2ef4eb9057eed25a0715436233615dcad1559fdbd81042544441857cdf46d72f5f50ee552cfd3bf166c530e57fd97f34e2e71bff8a90b30b4c4cc3e843b0f06e4eb2ff82675e428f5303aa9141dbeb615cf6aca5540fd7cb756fe5f9b08a4abdc6eb90b2eaef51c21eb9ae79a0e44b0755b3ed48f5e6e57f3148ce02501528dd3dd2b0bbec2650710a183e38510990002ce6498dc5ce7bf33d699dd18b66c0f8031d958b11d678674c355a635f4b5e8d863785f5dc2f99eba9ce74595493c017697344b651dcc2a0b1d5386b73abd8bb2dc77a2d92173d3688d0d704da9e44a6385af9fb3a81db68822b1eac9ab284f0155c20f6bc34af85d8518d0dfd32fdaece1379abca339a00e1326b624b3e4050be5db8dced5e6c4b88b82b6ee2a48c373d236ea3565ecc072e953ffe01b624c6ecbf534678aad9c3f8a07d7dd7232134b6b397d0c96ab5f795f9e3af65b96e7a765283d8081dab9f953113abe06e8d150bf9a8416d8932fac17b032dc346be43736dbf066ed239328803510f6f62bc8abc92f6df9a82c02cbf85de91739bc8d7805d392341be99798079419540dc952fa0d3ceca4b806ab1db3b717f0d720038343465a8bc0da8e8964e58634e8a2d6c99230af2ac7c89acd3f86a22075dc40818028f3c632b36a39c0e064e3ca2a078c617a3e73aaea56ef11114f9efaac90a3ec8f8d9b18921a80d74b09ada83efee127f41179dc6c19c7965f3e7f43e22f636534b123e9246172f9920f253d2a2652a5e8c337ff93b2d479bef5e96e972a9b9cd8af057c750bd711010d59ce065ad50fdd487b5dde616301d0ae6373b6f9efae99d8972f242dd7a6bc61caee70201869be202fd384a992478dfc133b84171f013244c5d17585934aed3b43b818926246227d255bf832ff481f5f8d074ab159a11d6d17ed0ac50f727b870db966e0373bd3b1eecbf9ed66aa66caf33ac57cffe4ac6df3cf7b0e54ac54be4f3d50f61b33557c2990c908a710c85000ef6fa62716960daf918ae3d81ee60b3813e65673bd911ce468510bd230b9c2d215afe86ec12e49e0ae87e4235baf3df237188f5e0af2e61c22a4bf77190dd5dc804b4cc330b360c3dc093ef208c37d299ea0cd2ba906084011e16ac5f4fc9646538d5b538a99546d34a4599c8529c1524fc4b394d6a9cd762855905233ed92e72c8b538372ffe2f0df7085eb074616c7e695d7de40779e384d5fdb49fe02385424ea991dc05c6ae813f76c673eb45d6105bcdcfdbf04dcdd20caa6e30efcf3537bcf72947e1ac37d1e8c600ba9238569a4b3afa590d61acceb2572da85885146a142c8f8c60afe4d53ee4d61f33c47e5a99da9a346bcfbd013754ef39a4d7f16c4c5fbfa53d7f180c16e2b64f97dcfd65349939b5fc167c7a78926f638f1893fe9a81e897beea3258a4175d14f41dc123ddd846e45a87f35154db8a5ac27c7a0fc95d3b3113cfa9e7c828f83a1f0d91ab7789c33be5f55ecbb8eb0c81bcc0fccc880011b21000e2f10773388b198ce79c5d694472d3ef6b2e55c342b29c70e4f33fe59e2e0bd3f9ef617733dd3329a0e426338d9c007bcdd382522cb96e59b223825a39b01b52809f5e8518f64b81c99022d8215b5c435d87cc1a57bd440b31a19b197b277b2072968595ccd64c135ae1b218046e27a7f2685d013ce3173efd07586dc72a28ac4792e804d44f9efd785ef005213df928560a20daa4c24ab07f081479270a0dcee3c26331c48a164e4b9d79a7c30c77ab06b00e9b72c190d35fb873bc095d5e6231a89b52a0737a99532079bcc72ee221b48f0d0d9ba9105f981beb4225f6efc1230d6da10fd2b58a65112a98e4bbbe1accd6e8589eb6d9c771bb911cccf42aa6cbc68d1976f0da7eff1e70277e8c5f83734ec1efb2b00708fef08e986bd6519a0fa4b5772e585ac8e37fd2a2af07aa382579498b3b75863fe792461492b8e71c4a1a2f4421705696a96601317cfff1632784b5d75fc2036ed3fa650354620781b9fcfd53f1927223fa045edf4abe7b2144512f3e3aee99f7ac3e46028bc2427aeb18e9cb40db57b696ea884658abc9b7bae0d8117f93074a3ef903528f8b55c7687cf9f0119a1f246cc9e993219c6384359e7e5e639bb294b264048060224ae168d7b9f1f795c07eaafcddb10b61ac2be3ab3e1fddf75c1f47559f38d24f0c773d0e8bc5fa85d7d33e3aa8d0f15583b8c1e7aab6f5d0e085b7175678bf11cfee8eb069b78220377819e3f4d28eb833d3d21efff543d5c6357fffb4a8fdd6ce399fca42e2d71c53c50f6b20bcbaa1650b57ff483837c39a37d5e978393c332b43021508b8ef27773164d69d0af3c0dfdc125cf30a7c49a7d8e5320d68a35e80cdfd62a0b7ce6a412f08c8062e35265fad5d1f226d590e9b068d09e48772711d7dbd786a38c0325b3d5665c2ff45ad0a20c174dc5739896ac727b34f11c7af299d36d30c69bbdc35770138cf891cfdd8123489fdef2dfaffa9c2548ebd60b0f0bcedff44691979b4e92b364753120364dc2e3b895095da828e8659575a85cca587ba05ca625480f977a6fe10181ab6ce005defbcd8894f8c71811909cd6b56eb7ffe327f46793a9e98bd7fe8951400276bb9c7607f8ba1e633034b73d7f0d040197c3f346394eba68c8accccefe05f59cb7ea9ab1ae2e172d8f466ee21c6531cec2c9dfeebc477a6d98195c28bccc1d5e23ae50e3a1ddd7de189e36ffe0e387df7be43427b194b16e18b42eacd517bba78edc9f56a2c7e89e6f13513718869da7c8c529bc337217a69e14e35cf97ff7db2c23700347f0a33ad25a299fc52b35f63949735ad864aa127053797541864b07168f89ffb7ba5c9a8bfbcb4248383a95f45461a7aee9c658c5679205f47144ba4a06175e746037b8cb6556f06405e0d537d0f2bcd898dd5fb987d96dbce33001a50abff5b9cb0161dbfe30f5df5a161ddd8a750b0cb33898c110415881fc81239f2e25440bca41a5bc46fbd3787e6c8fe8a463415cd9a82be368a02566da740dca8e40e686e1213d9c15de2d3556a1e1180b298ba3074b4ab93e469dd9a39ac0c8a173b04a5ad913e72e4d7b5ff520f108e1a1747c11b6b2fcfaa89b3ef7e669f8ad9620364b4f4f0f9ab274e76bdd631df033357a24723653e427324d907a9eceb3c375c43ee36cdeb046a6374be19ab04922da93d4dc07c5914df06fee97dd813f5fd501ca75e3c5ad53574837f2e51ba6a257134e8ee0f4127c59840ba8b1bb13592dcbe47aea50e453c7837e91bb12ad1c74fd0f149479bc0334c511a822145690a3a408caa32671ed05c2dd219ea360c67727c1fe6a6cd842301761e94bedc73f93de7091b8b6d2783a788313b2fa12595904bf5d1167a5ddc4ee151b1522de60b7293b72a62c4d08b396ed682b6a6262a212ddc8c70dbec1a972cedc09f593e21d843279561884f9759a593da7b17a147db7559f19d5d6f43ea98012872f974306037dc0d344c55403b35a5903f766359341bee5bccb696fc0fd1c7aa8803e4c2f9e6e23d386d3a202027c5792e355592efab9330af330392a7c91e3cacc4e645359edafd78b77829374cd4b644817322b7650696fa763a0cc7143f9ec7e2f6ab3c9ec2443b0c0b0a31e9eeafb7bb8c375232357f08256959a10a6d4bc98d6cd9314a2ce7feaa8c0eb1eeb15047f715d6ae9ebd64238d648ed6bc50617a360d8ff9a01aa0ce0e29338d34bb9612751445372ac6d74837c7d2d67729760216ee33476cce1a154086ec31d986cc5a14e86561c6929554fb280646164bb03e8e52588a1b947960a77d61c2d2499212a742e1a5b78805b5b64fed141d3c4834301b8a8bef31ce65edb539fd9469b590a6980d0d1bd29e34a09f87438059a09b1ea234d1bb29882e67599fc1e417db9d86332077cfb05fe440ad1243e26a67a0ea30e63cdee8850a543d76e810140547412fb1400ac87a10e3bc77d3918750a5cc3e7a0efbd736c7ed4139cd5855ddba47143362bf40b91fcbf27222017c1552360466483e67ed125745724cc713c713dcf7ef6ea3081d65d8d78b903382717848bee7410431e1040ec92373f75a1bf229816f55dcfffb6e6da33ed8e1e8b05f9348cdcd6938f053eb9f93e0de639e922627bf61a6688f9649bb9cdfce6236a176db8b9b53ce4b5f9eb9c0680c92128bd327aa7f04a745025faaf117a18d5664027ab0e3f5898b834e1a75cd4b4087637733416f8bac1ccd67cb4457005945676d03f76fd0453fdb9968643fec98d28da7c8cd7070a803b14a2459f073ea075fd023a896d3306fdabc54416e95907103cd2fb642e301c71cc48e8eabedaae356582761a14e0b3b0ef1de06002c2acf594c85820ae3a094e5b4680566b592221543c1dc5192d6b208e86b5aca91d4e3454564eedb3b8208169ce97e1632b864f1d9d4c4c4c0fd4bcc5206e8f6d64c7cdf212d718cb5b7c7ee21593ada3f33f5952e12bba4f46cb99044978fe75349c6ca735db35891351d7e5f02a93354bc45a9ec756453f053cb87430b3e9211807f81ad99b6fceb8ef1b2d655910e1f5fd22f2ee90e42abab230f8f39a8345eed6ad294a0d32416a253f829093ecae209bc1dbfadae04a373080f9ea8394a28ddfe1134309bb53ae571d2019ff2bd4be94f8176d90987fcebad323f0b2921b85b2610852973f383a2ff4a5fa82a77b13cfd50a33f29164a9ff409422cc4cbd772132856cbd08470b220ace957a6b8e02c8003d750539a38a8df19a5b662907b72e3098d77c2fc3ece0693b47ff19ce911a93b6adce75653d48ace6af10b8f1141437f9206658707b16794e349db3f1a02606ea167d0213ce3644f64ced64de3799b1729210fc31ba1811b0c226306f2466b230ae35e6d8fa11c8f932e27da8cb1bd311919bf9178ef08bb7a2b4ca2d2e6e9585ee9f916991cfcd4862f5de9fbbc63bee6edbdcfcec9173a252eb59fc6d6e58258ca8b2a4475acfc1e09a0c9566d23d92e9ada97de51895bfb0867c42025c8d089c65bba67f4dd84d7c5155a930329345cdf3b1d6e910e730df273e183190beb900344bbce8c3bdb13a7e4ecbe967a61d47921aa55bac2bbb24e3e03d386ddbfafb3b32235b5ed922ed6ac2c89ded1316b69079b826507d708a6cca14ce2244a67be90fb91ddcb0c97432703729bceb432bc856f5eb9d2f169800a04283b080f0e053670a21468df9414fda9f4153eaf1669a19ede7925f832280800f0063ceee34b9d3b0f8da2012525fa7927e76bda71954714d5f51405b920391eca2ad71160acef4091878b907974573b4cf1b377baca0340ab0e4ec546fcaa6130603ad633c3ef980e88d8f44ec5de743cdc6cd9e0e4cbdb97a5c076be9ada8f26bc54d711facec16a2401292cc167bb98cdd320ec9321414bd97498f6d9b54dbb45ffe4b3e3f88260657ee23e19de48a93595c8e3a289a02d76a27ceead05d591633464709aca117c26aa49b64667f2a3b6371984f813d7098fae7a6ba1841775b52314a06c80b4c994ef8100e233ab3115ba2c39b97f2d5082a145720ad0b12b8a7cb275ba848b3fae14fc0c82bf0353195c056b302e508982f73a8519cca722892482b9d9e6a58bfb4d862fa393eabe6aedeae1be5ed772ea3c94a0df1d9684a131c35246c68b32e46aaf89f3649e58b2e99bd6bb3923d3ab43cbf73b6b3d19fe3b62bef178f46c79ba85e23ee4b25bc561e8fa97f51605bc0b210b02aa28242e81dae9489076d259f17d25b93b0e8a2010584d907314e3bd55482f0fa43d37ae9535629d28d6f837360bb35ec869d2a959789dc49b9c8c515942a1e03650566b736551a5180a60279bdb0ff9c387beebeb9e59ed930b3746464a010a6f7ef1de3c7d76fc6899b1e5ed98213813ffb333d969ad72fd8537ef4e12ca7b78d35c24f44ac82da4a7116492ca2efd86ee6a4474014e72a5cfeee7f729b77cfdd1a5d10a03f3cf28f1d314fca36d31ef2ecb3cfccecbcdfd22367b0a0e04435654286ae3d4fee13f56bb7cdab40b4e1dd01f9ef857f94a67c1e237e24819949935ff3bd73b0461ee9020fd0a2db2cc6312ace97e4a8a33c295271453a12822db8d1438f22ed0d466150990dcb39ed042424eef7a1210c83224c856923e3251484a81a15cddb4d7ada8bb7968dcc8f85e39ca99ece8ce2ed7753fcee6900cc9b7b5691f2d67ef9be13f70d195bbd0047908025df01b4f4d581fd59239836578627d9d585ebe9b053d807e9d3ba25405029a148938a746636decdade02b1afb5ccbf2f0e14a27c98a1e130d9208bbf7da4bb4e572927eb348568921d4a3309a2c24f367c935c2a8e1524c3024ff350ac7da8d2849586817bc9d46a08a21aef035a6151e608ed93b1556a484e455819f9ac2fb155020738962e7255a82a0854b31fe20cdd351c10a33eb693c9be1a51a932e04d0364ced41ee1bf800d0c12ab5eb37fe52563666e52827720e856d4f24eb06e0aba446910aabbe36513f2274362fedba4c19398433029495284ccb499bb559a9cdbc94a0d1b733136969a743945a04e1d2d4e77fed21550af35f22651c7de802eab7a3942d7ec55a3a5002bde8d5cccc1d4ac4bb7f4926615fcece543fe5d9092d2c4f50d94fd9868775a072f4a5bcf2e5fd10795f7f172a3341ce33505ba68e7ebedc9c1e9165864244ed31bbe5c308dceff858cc42010ad8c281a24689cf2dee8a549b1abab9981d70a912174944b403ce664d8608b2f723150f5c12164e4caf28676e7a25c3928ca2a4dbe96355ef8f282e57888d40715df07bd8b5895549ad957e758abf868def1c1f5e260d26498616e2ac962bcaa33b879874569f198a91ce4e50fc50da77fea1df9f9ea900c834dcdd462d338efcf8e612aedebf254fac596507d175d30a90543627cfcef6852c7cda8b430e255c4d6d417de31eb5dba123e3ce9e2269867d9a94fdcd8ccac40a9451953085109f5ae0c3e04daadb4a2a47b0e176917660eb3c9f1aae0ec6b00635fa387e056623947c0621f0a12e86fac1881ed1dc1b9f523388d6b6596a152b3e732c561972879dcd3f0232ef0773a4fb195a90c3186c4688ea58967ce7f18386b80bd38e90cfd4cb899337ab27cba8db6523e979b4c449645bb2f320ccd28578bc7ec38f47225273fa61a2e5df97c4d76c556fbe2b0fd30e615f5fc82c3de7194caed9f5946c151c22b7a0c48f4a7cf78aa153414f2913c5eb95e3dbcea7ca544272cd13a1c52fa87759aeb430aab144fab418c835344605df3a044825965ca15de6ba0e59b2080f5844b2d110d71587e19acf14264cec2de5b8c77d18893215d1c1da0a940e7c2ee429a99e2633c216aecb7675a2314a09044951ca5a8eac798f8878fb5ea65f4ddccac53ee0c786e597169079fb6e8ceb37a71580b0904a97450909ca454a690821e249aebb75449e582fe1b30f1fa9f6464bdef654daa5ede6d4f223f4589ea25a25f4672cfbe974d51008bce296628556f55d26646e40b59f40e3149273760b40806ace3b5171e0b79865c6adb53513da2f24c4115de243150cec76107b48ca8da19117f00b5870e67eb8357e43c1b7b593c9875795d46ede26a109e05406b69fda988947e49ab195f22454c3c743c2ec51b91370b4df8d38653b353e51bb83215d122bcfa591009c007bbb6124bc590fed3f9c5699180b3b1424ad02f7c90a149b77d22dea5c996aba675c2a1a20e206d9c25d9446247d495a26486c0d0bfb09d0b5a1a177a09fa749dc36cee73af0116a6b779c2b827512a04ff0f60b483edbcdb33d2a18339463c498ae67ffa9da0aa3f3beb6bc99212f9e6961afde89045520b1f3f2e2761666a333d76030f443f53322f099035584a60978ef8b49f46d7d4d8c5c758ea52a04b59c1a3a1c2f9df3f3b6f5c45cf4b3547043b18c1d615a2c965c3918d090cc72946e8fd0b938e60e03464f4bc71fb719a1d173b0931930e58bf7f6d4403971d36b40f83be6b57244a7029e1d41dc908764d57a5442557218b509faeda4e9fcf31debbc54ae671ef636871233f29e0013c0e33933543f4b59df1978ec89b109c3977b0cf938b7f6166d6c93be5e87684a703c8b7b5fe1a8bfe153a179b55575ff05e599b39e32ed10d958699a1ffe07136081f0719b18c69dc74f66f211103e9c544f3c81a88ba9f66a9bc7017d9ca9e2cd97634052694a598476b99daf1cdfb6122869375ca5873d32d5c1e07d9b5b380b4f09dbe04478cfb1a13853eafacfed70c8abcd444ed095f78d07c0e8b4093be95c3aa24b2e5b6bfe3a06e9d2d9fedfcfeac4cea2490627e6da6a5cca383351952f654ce2b0ad359c0f7f4ad3f8d1d4a030a947d4a2e417bb79102729115cc8b6558c3362b1d805fb48ce4858deff97677e60375ed13e150a12ee7dcc8ccc64d9710c7f516555c1f7a1a08f0d7c6fd21f864fcf28c8f748c40494e01fc32006f977a5100577f86a484d11b82c90cfe6b4d6b1902fef486cc6f3e033904e150e67283e49a5382961dabd244412ca9657b48796e476a82443167e277d5a65c0c563a6abca77d316e5d3ab639a1ecfb1110af2d29f146508bd9874486dbb56328d6f59479e2766692821660462aa60b6bc8a710707ceeb0ea6429e5113e03c9f41ce0d69c7589deb547527673e8a9f9a9a74e9e4bbcabf2e306b35504c1da99730ae86e94cd047b2e6ea5e97e63a492430d37ec446434fb3b066adde08b17d7d903ad194a4a863d6cfe181a45c8c97b5062bf7c4e44d69c0d1a7e1f5029b805b7c21d1b5e56e697999a32557870ebaae8d87dcb5ca5eea2c5547a16b3f30ef9df8df821028c106f86e091050ff8b6ea4171e59dc2592d405073bea53f8ea62edf112dfbc7ca69809db8005783d63557d3d90d123a944be395c1dc3b5e1476dff188346327769fea65f3cf9363e88ed67335870ec8ef13eb9d9ff5317c4e24dfce9d11699e5f47b4233cc8f9d1b915e716a5730a5898ee65d30b1628b484a5e82eda95a590964a8d8bc89dd3c5cf6c4f9137b8c6ee9d6a692e0c0d1d858dd5b3c12de48badade4d01bff312c56ce3ddb34b0fdde3b0c2706fc292b9fac7e1a0dcd0b6534c968117f7de15eba84d2754e4bcb8093a5440297605598659f686075e2b1b464b6b3ec68abb13cde263b1c607545c45746338b9b207b5c381da690f653b35e363e1249551ad938b9fd7b0a944151cda07127bf9ba76958e926472f4aa1de8512ce834cfcae5414b226f23acdb1fe5cf685d2201b78167ad35fc1da282744c2a43cc49d49242f968f7e06de14455e7ef5adedc5b33184346018114e2d1fc7a5349e378da9b2af5b328c213888652aca9f1145363809eca7c1fd8e64a5cc3255418736e048a731f3053db77971f67014e6121a8e464833e5dbd02ea6caf385e43e9f378bfba657986bf852b32adb55e35a2675bfc8d70d43a902032a61f59f57dad2dd7d7963322136233200cb9a90c952074e9ba0fc0654f1b6fd6f7f0eb77c0fa6d8143213ce6e8b0c178f73e17a7c64839f9bebca2fc955ea8ae406a13b80a9045fa8d129fd859faa46fd27c48bde7b890f98ee938c0d78889f84181ae2f5711304fe554d4251bbc6437ced59d577a2a1f26da736193c3674adb13cef9f4cb4aa6585c4d6874b0309ecde300493b1642c595746f09e03977c8902f3a4a877db1153b248f295a0ca2f1e437d15fcab8fd77c5f967304efb5c4920b990674ae61b954af40be17a8559dc377c591b68067fdcaf2d27bd9a22041b981a84be3de50d5962b58f8c4a22fa05192c5ac99a0a9423284fe62a3a59f085136cec72cda2a53af106a2eb5bda28b6e02c299118cd91714c2e7d045346c78d9ed1b41c73231a21e42c298949f70122277f4134ed5c56639edbf3c3e717310e3d1f03dc5a94e64c4ce148bc5c6bde64eb80b17d5979892786a31225eb89bf9f5a582bcf65b83ff7aa361ccd9238d144f6a22a3f77dd8a01382df4ee90a2057dd310a6b0c4b81dfc92a2cc0c606d3be8b18fbe64ddfdf2004eeabea892be2f914edd1edd8e8829dc7704d71bbaaf08c41824dd0f4b34c9eedead9e10e53bfc6fc0bd37417de0c5c71cff0754d672f29c262d8e27b524427e12bc4e4705ab311d3bedcb1ddd09a3ca0c268c05c64951b7d724a9dafe4d249aaabda91d68633aaab845bf78f9a22d467c7e0c5fc70fc9a318b01d7492efea7fffd329d70692e76647ae665c62b280da0d62f870a52e4dc4cd92c9150c96aab16f8c23475e3152d4debb41b6756f000c3d8aceef18b49e295be7a71da1eeadf4eb96509d45d7cc42af4b7013d8bb445f577e8d4cff92770b8ba0e451f3e24c6d981efdb68c7f2dfafee40b8a425955796e369f0d4da3e998c1626ae0fa583334475f1fdde68ca211c3f2e9afb003f553191702e11f8b731c89ea26059ea4466f2bd0a1a5601025ca9417006bca5c9a57dfdba44c603ef9ad38922623b40feda036d84425c47fa42973e348a180a7570e1215044c375313ab08d6f521052dda415707ebb74d6c4774e039bb04cadc2799224bde1802e2ee2a018032e3a341700c0fa2aa28bf93cc479231efe7da0e9f68e572415348c08cf648117e9b6d1267fef6617f5927252c86cc087775db3e30180feb5ce7e1ac9c3761161e07a4853aa6d97e525aa88302954cf9390fde81f8e11d97a11c79e3bad261364c18890dd1f8fc71127edefe3571518a42be611a46a0426a33221aa25a0ae6514daaf96038cb59aaba898de49e3b215a4464e0af614e638c2d9b6e676ec427fc906bc516331a18121f306a5246d179e2d3d0f38ab8393f7ea5a2d24585e7cca649637b9983924a15483c167e8780f8dd7aa1154cbf731745a8d8d54a8c4f8d854371bb8172303f9ba3c8c7cfe8c378ee56bc35c6376aafe907d3294ee9a8786281b7deff78ff125761f1a31d0e8fffe04a52a7574eeb8679670ca3bfb740167a559488d4337819613d32752d8a89013622f6a8d70f3c64b84a4215f4b7bb282a2d17c36a326167e3270757b8f1d9a0137bfc5ec278e8ca35a69e49779cfc25b95a89cc18732b5b9d1986b18878c57e118506909207207ad0b4edf32fb2b35b6e70546f45d0849bd139ffff9d8ae547787e7b51403b54f110e2ac65468cd0910d80a4e321deafd46e9af19609bee1efa41b762b8ace989dd681503539e7d9948664cf7a73ffac9ce2a34b514253c4f21bbccd38057a6d68732930dcdfc9a32219b53339d100db0037a8bbd101e71f5054f3 +AD = 7b3b9c07148fcd897f657ecfcc87e530191536b8e77f9309e8d7323888b3b21477f2ab7c885c105d9c29ac96aed23b366f9fde4177401b7038c6770c7bd2ee8b4335105cc0eab9e367f0cea90d6f1ae3fa76cd21ceb9f3500ce7fb4b2a3f9e90f900a231ec693aeced7afb6821391d1f5b1b957895777aa7a2b71d9571c00336f26d54d756392cdb74bfb67d5a621d517db20441f74d0940180baf613b09452f64224f8af7bbc864ab4a8434ff624d0c0646ee07132fd376506951899bde975df8c836ab4ed9cc084f1f6d500ad56345d2f250a0d6991b9e458c62b6023191f341c8659e8a38c878cfac12b032674503df9c9bb01c4340c709eb6dd7c74907d769a317f4dd7317843c47bdb4c5e1f07f2380d464b0c47269389cc8a43a09adba86f6aa8f44c8fe514e73b5fe8d344769c1aa20a4538ecfbf47562ca79fa497b0f02f103f75522db9ead50d56dbe86997d6085f1b5aa7a4cab9e51a1247ce4f724a14983b6bafd17369fac973c6be268e20d800de870928e100990ebb0d3bedfceda36c64be3a729b603bce677a49e8caf282c9159b6e3e1e775129bd30dc3f5c9849535d86a27474be03bb5749b4c0115e2614f8feaa7405cc69b1de479b3b57e551f876a9c8c57ab9879cc68bb2ea110b2e77e59dd6a65eaa67cc4d4b2f4d6e646b2a298d3c80fb43969275d4414734e74726145dab06124c040656c39a94846e8fd58d326f4f9eafe5b95d85254765a21993f55070fcb9e85db5d42ab6b9464ce66de3f236dd2a0a26c4e5535dbdcd6eb350209a65aee785c6647ad4103d092a8ac932470880eb314f7c98cdff34fdf35ee2d36f09bd443b5defad7a5acb9df55965421fd043def6f4771e1bb27385b30ba22c0d8972aead6b654085a7dd3b60c4004a0dae22e25100e54e0badd0cadf909799329ddff699de8066dd6c3822d80c73c52d87e6fcbdb2dbbf852e37804b1256e23e76dbe43f30be4a577bc23c7941a3d708d1e1f579e9c6eebc219c74768168f6790a41f883790e08cd1e88ad09a544eb97b3d1d5af67eea666b9c027e5c7c976921189b955a9e605f6cc9c012c1c2e197c5b02504cb9ffbcb0f3ed778d540d5194fdf5d38dba6340c93da7c5501a082689616f337d8b59c2a92c25e777515726e1d7f6cc9552693cc7c30f1294b37f97d49814250d6c1e3eb335c5d214ef3641739d508b87106eaaf367902433a148ca962ec694409acb82d7749e1c88938ad382d0ca6e6cbe8255746832fe737c3e71dae8397f260c98d4a292a126ec21935c24096d2f91ae114194af659455d8a4206197495a28474dd2809debf5f550d77ffac2b0db521559910c352f23472d7aa9f4dbbdb158f40aa36912cbd918ae4c642e76d78d57ade1075c4fe1086ddee3d554353b4693bbcef1cfa87e49890838c36156af0edf384b0413d6d7aa +TAG = 51cbcf4a2fd82f221de1bfebf86a8c24 diff --git a/vendor/ring/tests/aead_chacha20_poly1305_openssh_tests.txt b/vendor/ring/tests/aead_chacha20_poly1305_openssh_tests.txt new file mode 100644 index 00000000..53952df1 --- /dev/null +++ b/vendor/ring/tests/aead_chacha20_poly1305_openssh_tests.txt @@ -0,0 +1,281 @@ +KEY = 247a041f6780baf0de3741aa4436024b6a5169b0eab8a090a291f5900bf566a54ac2c64c0f38cab14a143111bc39d1873013f52f2e92062e375c1a5378ad9b32 +SEQUENCE_NUMBER = 94 +IN = 000000100f000000000000000000000000000000 +CT = c87186a24d89e672f37df98a95d0a0653e9f0fe4 +TAG = 075bc727e855c8d487bb3060c42267cd + +KEY = 50c985a29c39c3b75d6326e5f92d2bbc1341ff49b9eda105a853deab9125de9217856e27887b29b61989b8ba4f4169875f402289aeaef239457eceb8e8c2fcf7 +SEQUENCE_NUMBER = 52 +IN = 000000100e610000000000000000000000000000 +CT = b6cbf6d61986eb477ae0e4edfab641effc148824 +TAG = 7b476f69d8abc8b948ddc5f45f422f8b + +KEY = a1c0efe5bda4f6f95a55fc739c076d03515efdd22681ae0317e859dcefc247f0f5dd24c8cc30eda86adedcd96ca276ec446d84f5de6361cae806fdf37e5adfd3 +SEQUENCE_NUMBER = 83 +IN = 000000100d616200000000000000000000000000 +CT = 86805874b9db60ef614a96713a0b9bf974d5e615 +TAG = 3842b3a4ed2f1ffe7718d64ec95a178b + +KEY = 558f82aac8b8a7325dff1142bdf82956d2f053b6e5fcecd15f4a093896c5b15d35f695dc4e1e87738be0b8ef857c18d11d4f028fab34294de24434edbb03f01b +SEQUENCE_NUMBER = 167 +IN = 000000100c616263000000000000000000000000 +CT = 38a55e905cbafa6d79ea8ea269954314e5412a14 +TAG = 243b307d2586e8c8cc110917b18fe542 + +KEY = c88f4b95ac8cbe01c25868d57ea4f8566a0c4f2121d148de52e767eb9980e3c1c8d9a59d980a328cf7b44aaaa02b316872373795cf455da89e606498378542f9 +SEQUENCE_NUMBER = 101 +IN = 000000100b616263640000000000000000000000 +CT = 0d71526d3966e7c57786197ec4b06186a366629e +TAG = b89cff146eb8c1114a8b2e106c26ca66 + +KEY = 228780d2a7509f7a2558c2ec404b355ee7fc3028280d632b7f96c0a3eaf6471d9d2d16a79719d371ccddcc00bec9df03117f0383cbecba12c234f49fd2948c21 +SEQUENCE_NUMBER = 244 +IN = 000000100a616263646500000000000000000000 +CT = 1042673c3c557a61ff50d5e0ec36d1177c05442e +TAG = b9457a825592b0f7e01f9e7d697ac16b + +KEY = 163f3940226dbe821210e403a333dca05e061bdd17f44d33ded87c5def0cc85f11d8aaed4635dd7a9e6b982a67eb3d6c396afe455b483ed4c84e41e5d4e46565 +SEQUENCE_NUMBER = 242 +IN = 0000001009616263646566000000000000000000 +CT = 8b73429d2990476ed1842d4acb3392b217b1ce51 +TAG = 7cd635f03f9febc0debcff7a42aec7e5 + +KEY = 3898a07d0717c3143bb90f8073a78757fa39ae936fed0124524c4871e91d0e56b79d645ea0e00fa5fde3d725af662b1c5fdc4059b5a07c7a6824b4c19cee016e +SEQUENCE_NUMBER = 224 +IN = 0000001008616263646566670000000000000000 +CT = 2ac8116b7d18ca54995aba0651bf9982cb1880ab +TAG = 7a74631c17148c06bdfa5c3a66459aeb + +KEY = 31bb45d44639c499ac5ea60c7f94933b158ce82b2479149fb595654e2ba9cb7f710ba19b35c7a9150a1478f027adc706be98b3966462579a2c784887420033f9 +SEQUENCE_NUMBER = 51 +IN = 0000001007616263646566676800000000000000 +CT = ee8570b7d96a494cd4aad090710e17fd3d46c46a +TAG = c5e62468a33c591d120b73967b88291a + +KEY = 4470511419b640eccc103ed560e05e910f7430cfa22cd06eac335a6e30e067adc1305400c0585130a722f09dfd9728aa20c1b1c91ee8837165dc4cf10ad1105d +SEQUENCE_NUMBER = 86 +IN = 0000001006616263646566676869000000000000 +CT = 6374e59fb470d35c74912f37e574ded425263d81 +TAG = 9a2ede4f3d52bf51d096c351b259802a + +KEY = 166da003239df87cdb35f27804c9ae0c9269ca901eb322846c91fee8febff944c10b1c092012d0beb6e1d95dcc383bfbea85eebdd63e5ff39f584297e7c737d3 +SEQUENCE_NUMBER = 242 +IN = 00000010056162636465666768696a0000000000 +CT = 503cf64139aa6cd5310579bf7b22ecabfd37945c +TAG = c199946b567076d4e615311fbfed69b6 + +KEY = 389c2acc794e55d888297a63cf65525396780ad225ea696e8d6d24852483f71ec6d47e904e75d823902f8599453b548ff42c2f6c847d041cb9a89f3b0a530747 +SEQUENCE_NUMBER = 216 +IN = 00000010046162636465666768696a6b00000000 +CT = ef9ea674e7908aed8fdb9128163061dcb5d24f41 +TAG = ef9900822dda3f698bfd4a57c77498e7 + +KEY = 4a3042e117e06543aeb7fc450dab16b8652fe0a79378f78d6cb0c23f50bdbf4ac00c92a0b330bd035d6cd3918ff1daeb65d0fe329d88305f0728661dccd7278d +SEQUENCE_NUMBER = 204 +IN = 000000180b6162636465666768696a6b6c0000000000000000000000 +CT = 60bbfcf8be81835fe6fa7a1e482a0a6fdd8d11599c3786e3c7976893 +TAG = 411803ef2f1b4187c1019fb47290d0d1 + +KEY = 635638619b3f7fb60edf16361791d85b87a6c0537199c41f3dd087339d2a6699845f6e437879ac929a14ad12721c56b30a98019e51ffcf6f1f0d11028579592f +SEQUENCE_NUMBER = 51 +IN = 000000180a6162636465666768696a6b6c6d00000000000000000000 +CT = 0448a57007a3fa04f64ddcfe19074d18fa8fc9f559f3e4df91df5af9 +TAG = 2b26bca6a9b3e8cbe6f6ec480a831382 + +KEY = 9db759c1e3e2223ee1dff2c8fb3b17728b40565160de8ced8b5b9d45a7f20891fd3d98fbbd42d6e7f518b9071097aa41b4378e64981e928735ea7b817720256e +SEQUENCE_NUMBER = 121 +IN = 00000018096162636465666768696a6b6c6d6e000000000000000000 +CT = 4ea47a2c6b0b7a8f59a0a8ff643d914c4253a8f3a3489845ee1ec041 +TAG = 0e10c42a3328aeb49e6b4e3ab3fe31f8 + +KEY = d56bdf0abeefa000a0bb483abc5e510f23f0b57162f16eec1d3c9a6e8384389d59a9b252a76eaeef7fa420009fc58a2d57f33a9bb1d56d04f2a15b38c394cf36 +SEQUENCE_NUMBER = 222 +IN = 00000018086162636465666768696a6b6c6d6e6f0000000000000000 +CT = 60037819e401c7a4bb49be3e12c58406f571ba2bc3af39cf336759c8 +TAG = 15aa3637c6248c7310a37dd7f95edc95 + +KEY = f0d219074fb736b538e642cde19899cb25d9da4d2e2ad1f6ffca03493080f3ae53a3f2e6eb17ddcb47921d8d0ee8d4a9a7df64bd4c82708469dd86249897f8a9 +SEQUENCE_NUMBER = 89 +IN = 00000018076162636465666768696a6b6c6d6e6f7000000000000000 +CT = 9303e62a70c4bba867d816f29b08fe05871250fa619c9dfa185eec37 +TAG = c5beb415452669e7fdbbfd25cd2082b2 + +KEY = c8af470f7b3e22551209d91c47db94fab3eb93b854d220dcad4495f72ac548f0a368090c1b3860d48584fa3e62e5569bee3559147971dc962d80096ffe7bee08 +SEQUENCE_NUMBER = 214 +IN = 00000018066162636465666768696a6b6c6d6e6f7071000000000000 +CT = 9536fac8b646ee969df606e6d64d40fbe05e9b495e821b300038c041 +TAG = 8e422bb115b662a6a4b11e713d598f24 + +KEY = e68567491a8684c2cf71daa7ccf99c186a79b6cf328874f8a5d656ccbf6ed2c0384d05cc5ce49525f9eb9953e09ebad5d6fec3007b35c4700a0d2996c16c8884 +SEQUENCE_NUMBER = 162 +IN = 00000018056162636465666768696a6b6c6d6e6f7071720000000000 +CT = 5cc13e4c2a33f124ba14fb839ac8b209fdffb5cf9849db01b7985e86 +TAG = 3289f355b13403b1bf667d63afe74d7e + +KEY = cfcd2c688a4a02da67dce7bdb1e3bc2a058b71ea033e28fc9eaa779602ed10c417018ff175f7e7530919e9999fef36369bb8c5b82983f2c8b7bda8c2ddbfa99c +SEQUENCE_NUMBER = 201 +IN = 00000018046162636465666768696a6b6c6d6e6f7071727300000000 +CT = 893c85250a37ee0fdf2a68a47e80c2c763c9bf39a8b51b0c800e5329 +TAG = 4fbf24214608f9ae7c24ebe720b5031d + +KEY = 82891b6e9fa6c259413a2893df1d5b931c421e779affd244b7d7e380c1b6f86bb653bb308de56e6460ae29e3baaa216434c53c1edef973ba4b6a6716a50f2584 +SEQUENCE_NUMBER = 15 +IN = 000000200b6162636465666768696a6b6c6d6e6f70717273740000000000000000000000 +CT = ff041f7e3aed8e76b2e6ecf6808453f618d5335b26f390181b2466fb0fc15f5b358eac7b +TAG = d74db4633f889ab3b79fbfe3b63ac92d + +KEY = 8e293454cda0da79e46ec00694bcd1d558e37d007c80e8cad3545fd9204b62780fae8a6a7c274e251d25801772c3bebf971c7ef5388d7d5872bd6229a8136f2e +SEQUENCE_NUMBER = 99 +IN = 000000200a6162636465666768696a6b6c6d6e6f70717273747500000000000000000000 +CT = 5314b3c960fd718e5db7cfe620745e4ca000152d4d6fcf4e013d8fb7b3e694edee9a0c98 +TAG = c67158f2c97f55741da930c1539e447f + +KEY = f3e8f40daa829cf112b6342733fd00a9264db1a7b9e570f852a1080efee3885bcfce36d16bc90dc0c1b0a7255ffe341d243fbafc0159d28cee444175643a7981 +SEQUENCE_NUMBER = 98 +IN = 00000020096162636465666768696a6b6c6d6e6f70717273747576000000000000000000 +CT = 8dc028c1fdce0b24ac16b50d1b06a1b2eb870c7c61b018cb4db8af1762e776189e128860 +TAG = ec01334504efbca042d3281c59227a0d + +KEY = 89db04faedbead197f637f6de4efec82844a8b0cafae5aeb3a575071a5cc288bcf25e901c45a836de5cf491e2222c9f3c61a75bc709587edf7a2b087aead865e +SEQUENCE_NUMBER = 72 +IN = 00000020086162636465666768696a6b6c6d6e6f70717273747576770000000000000000 +CT = a911e28f149ba1163140e033d85a18d99da72f8f89130cbe65f5619eabb8711b812de08c +TAG = 943f28926c39ea16d4922d250d78620b + +KEY = e8baf3e7abf88dee1331fac29a671c3a9e082335249667fe40a7453ce5ee840cd9a1d0915f008e5b8f1837282888ec06293ca3f26b586e09fc5e59f2cc9d46da +SEQUENCE_NUMBER = 229 +IN = 00000020076162636465666768696a6b6c6d6e6f70717273747576777800000000000000 +CT = 2216092216da36450d9289f0f067b5260ee3c02a7e25c6af3b1e9bc4b46c8fa384b502fe +TAG = 898e5c68627311981a8c0464da16849a + +KEY = e0f96cc3aa2eab959d38963506fa998a7af61b8497a92b6bb5d5480c86cc91f29db3c7bc9239a738729bf59b61667e0d461ecc5bd55826fb5e5487889726a9bd +SEQUENCE_NUMBER = 68 +IN = 00000020066162636465666768696a6b6c6d6e6f70717273747576777879000000000000 +CT = 72fcc3e97bd4d7d1b012fe3db46fd4a5a8ebab38dfb690b5d77f0db0b6ebb839b8297535 +TAG = b12ffcb38bc3ce4213dea2d4e234fa0d + +KEY = 25d7735519841b062d5d80cc71af7343e1381c495a845fd8b16afccebb11116defff108af7bb79f1ae1f94f2a6f99ba803008cabbfe6b970083512d6295fb1ac +SEQUENCE_NUMBER = 75 +IN = 00000020056162636465666768696a6b6c6d6e6f707172737475767778797a0000000000 +CT = b21973084ddee1cc3a39fd30d0b079d4e7a230941330a93c4dc60cd2f275a79f8c591cc3 +TAG = 9d2faca7ad12bd14ffe7573671ecb8ac + +KEY = fcfc5287ef501bb44062700e71b23abc15887a1811078186e8bc5ecdd89a14daf34c48b052d1adb0421075997409f0869f3b82c2d57e4cc954e290d95c3972a1 +SEQUENCE_NUMBER = 123 +IN = 00000020046162636465666768696a6b6c6d6e6f707172737475767778797a4100000000 +CT = 01a66de55a4ecf37f34cc817e7b3915cb0981ac8b9ec79fa21affa63190de50e313c31d2 +TAG = 3e446d3cf4c6eb1c417aee561d0b9189 + +KEY = 1512c3fce6b96693b7471f4d4fbf6e874099439da98b60eb5fb493315f9e0f2da9391bdabb811dd736bfd7d20a233f78f473f8dc094b4d15f69561e4178dc8b1 +SEQUENCE_NUMBER = 221 +IN = 000000280b6162636465666768696a6b6c6d6e6f707172737475767778797a41420000000000000000000000 +CT = 98f720a10212103d0f87ef434cf92000a8449c00fdfe9f61006f13558b2f38b8e1956a8e613477edefc59784 +TAG = 92c27399431a38e15dc6ed72d0c25732 + +KEY = cff80b763e4901929b8799656763e132d034ba9a073bef211d4a759693a961c6b97dac140e6612ce1b0fac7a10d0a10d8277cec0878c81bf181ea66728f29b0d +SEQUENCE_NUMBER = 173 +IN = 000000280a6162636465666768696a6b6c6d6e6f707172737475767778797a41424300000000000000000000 +CT = 0dcb2e7e213ed8c9d380134d94992f50287ff485254d0d066ab47c06499847d8588914bf83163ea2f92d480c +TAG = cc0a9ee25ef053e75409b1f65d76618e + +KEY = 570216cefc554a08864362d11a0df5fb80cc8a7d72e4934e3dfa45cd8862411d7cf2b1a07231264b6a953d3fe5cf0871192d41a4514558c1c169226160316306 +SEQUENCE_NUMBER = 77 +IN = 00000028096162636465666768696a6b6c6d6e6f707172737475767778797a41424344000000000000000000 +CT = 96e568fda7a734f57c1da802bb81e517db255885a7270987e3fa38e0f279d072b9ef99cd25de1af7e871ab41 +TAG = aeb507091dab6999308d81b18854e144 + +KEY = 11353b93163bcdc55f3f53373a95760a458a036c18b70f4cc7916b6f48ff686b29ea0def8d5a1fc52b4e30407edd25e2c3baf6b24fa9f585d141aabc2e19d832 +SEQUENCE_NUMBER = 165 +IN = 00000028086162636465666768696a6b6c6d6e6f707172737475767778797a41424344450000000000000000 +CT = 3f70cb60c11c579b9a8e254a70b80a6f21ae42ab41db8123e9285b0e0dd300cc69e251fd10821dd909d23e0b +TAG = badf5fed288cf6657cff798ff252c85c + +KEY = f690749ae24d2d5e5710a46b2d3a6eb929bd0cd9ebd501b7760191dd104dc34d1787205f7da01f279913703a8ab6813f8d265c2b2e93e35cf81c750df3d41aa4 +SEQUENCE_NUMBER = 254 +IN = 00000028076162636465666768696a6b6c6d6e6f707172737475767778797a41424344454600000000000000 +CT = 1bd7494c9f159342b1eb72ec456ccd2a81d62e77befcd8f86d3132c625db3060feb742562bb9b6a48e952df4 +TAG = c25f2198717e2fd726dfc00513ce1b9a + +KEY = 16c94fe1a75e6b0d40747a8afd0f0eb6c93dd4508fbc769d2b1e0c08eafdee3e067498792233dfd1cbcdc21092fb3e992ecff738e02376eda848ad5faba1c263 +SEQUENCE_NUMBER = 145 +IN = 00000028066162636465666768696a6b6c6d6e6f707172737475767778797a41424344454630000000000000 +CT = 07743e9894a44db0f47c3eceaac0e24a166920e97c8ac18633fd0c0aee798f73cff483836241dd2c938bc5c7 +TAG = bfdc5f251698843111031c70c46cf7f7 + +KEY = c8a2dc33fe6b05ee86680255a160df7a73f8290c4cb778e086534aeeac3cdcbb0932b48ba767678b1f896bd16814d365052018af197566c6075f6b39f89a94c9 +SEQUENCE_NUMBER = 78 +IN = 00000028056162636465666768696a6b6c6d6e6f707172737475767778797a41424344454630310000000000 +CT = a40c4541268a28eeec6818f369c2887eb3472ab9c7f381c8cc896aef25692a7874c2ea1d6a014b04c2b9d03e +TAG = e45d5cb5c3815a851d55d0426cb23477 + +KEY = 1b92da5305b9a1e7234a2d6eca68511dc97fe79fdc7450454dc2313de8f06e068445fa61e14faa1fce49e527943c67475e10e9918f54d410d7ca507076231518 +SEQUENCE_NUMBER = 189 +IN = 00000028046162636465666768696a6b6c6d6e6f707172737475767778797a41424344454630313200000000 +CT = c12861016065604ee867c2b71e8f09bd0cf03b55ca477ca204cb5c1607733e9c651861944438d0b36cef247a +TAG = f9af9a7ebecddf168d04f52218763aa7 + +KEY = aa3f42ae78356f6529dc4eafbf3dd7aabfa6921188627e6b31f39fc4930b2c7f5f13cfea36e47000a59897a2aafde1ae53590a913dc90434d0a18bf1c39f15ee +SEQUENCE_NUMBER = 62 +IN = 000000300b6162636465666768696a6b6c6d6e6f707172737475767778797a414243444546303132330000000000000000000000 +CT = 54a9962b5f227c41bdcd901279f2db09e91bf4f1320ae053f6b2625abdc06f12774d759bc1998d42799ef5656f964502e9509dbf +TAG = 65b3b25f3f1bef915414b8348b2c8d5b + +KEY = e8fca7c957865ae62032c6de787488afb071a691cadf0a8c8d40562cbf80b6513c791a96791f001a2543930998816ba9b44413afe49cbd1695dadee2aec06965 +SEQUENCE_NUMBER = 158 +IN = 000000300a6162636465666768696a6b6c6d6e6f707172737475767778797a414243444546303132333400000000000000000000 +CT = ce31226c64cc9f72745d09df797884651a5946842f47a7ecafea736bf458f52bed38450a8f8521c279fa00eace3af900d68d56b7 +TAG = 3762da294869a8b6b2300d0f19527c42 + +KEY = b21cd69cb3c867e3ce049c7f2584ad26d021ca0f2e94552425f264c442ab6276f2f86509da3bd7e17c5112275d6371cd2a60f490d296db84a6f79608497bfe1a +SEQUENCE_NUMBER = 125 +IN = 00000030096162636465666768696a6b6c6d6e6f707172737475767778797a414243444546303132333435000000000000000000 +CT = fb882b59236f5d4f52b6f11b16b60b1c309d0a2eed260475703aa55baa04ac050e8ef46c25cfdc618381e0ec5babddb3bac43beb +TAG = 9249fec7f5c071a24a896c4c004c6e86 + +KEY = 542f6b64b56093ac155c4302174c1dbc69b28b5380297a05b66d2b4812e78c1f8bf504545b80d18e3dacb49d1dac9c3d2a02368b703365a517e4aadbf6f8d670 +SEQUENCE_NUMBER = 99 +IN = 00000030086162636465666768696a6b6c6d6e6f707172737475767778797a414243444546303132333435360000000000000000 +CT = 779ddcecbd4aa16a9e6f2cbd23bd7dd03f4bdff66a5eac48172b9d5973f5cbc822ce9ed5ac09410297538265c9ffa3b44255ab84 +TAG = 62a287ea3a6352f654eb126fd982cdf5 + +KEY = 12d33230a04520cdd8370e10a82ac97c66a543db2f170b8fbd5651b9d8c340f9e4f82621e365a37fd410e746c652961fad19f262a249d1bd4855d70206fed407 +SEQUENCE_NUMBER = 237 +IN = 00000030076162636465666768696a6b6c6d6e6f707172737475767778797a414243444546303132333435363700000000000000 +CT = ca9d827499866f9942bee540624aba657afe3776d80da0505a15dd9ddca46eabb5c8383039a485f418049135e24e4ca484604f0f +TAG = 5155e0ae129d8855d7b7c0ac56c547b6 + +KEY = 9221b183ce2915a6b6e5d34e1e5cc0299f61a1e757e6e51dadf93bfac086a49bd8507916761b3f69cb3923f920885400256e6d356fc13878175d549492775c62 +SEQUENCE_NUMBER = 138 +IN = 00000030066162636465666768696a6b6c6d6e6f707172737475767778797a414243444546303132333435363738000000000000 +CT = 0199593a687e852219b18a1325bc32b4e697e33888b56687f013e8b0b487215583e8cf6951d84c8559f7c53a753d8f9c89e19529 +TAG = 9f5032a30e40cc2da4993976af9954b6 + +KEY = f3237fb44613c2a6a1db060a3fd25118fff04db48d4d02088e33ca760e030554a8a762c6054c527ff3770ed155ce28dd5cb74e8ea45865f45f1c483817ee6ec5 +SEQUENCE_NUMBER = 187 +IN = 00000030056162636465666768696a6b6c6d6e6f707172737475767778797a414243444546303132333435363738390000000000 +CT = 5b15b628f774cdcbfb83b4ee6448139e1efe320c108a42be0526c33b7cf2b29f44e0cc0258126acf1e2f243a850c843361bd20eb +TAG = f99defa15dcabe76dbf13c2f643694d9 + +KEY = 7497bd5af9e8e9115533233d4f2fec5ae687473504b172a2da54eefefbf063860e2af83a1fa6a7ccbb02c49cef7d5c063b2bbc807c51f9f605cdea2678bf8478 +SEQUENCE_NUMBER = 218 +IN = 00000030046162636465666768696a6b6c6d6e6f707172737475767778797a414243444546303132333435363738396100000000 +CT = a6148988572c42545bff1c45aa3a4340492e004b81cbbf1897ff876d8306f211edaddf60fd97b539261527080b9afa4a14282043 +TAG = f507d8d51b57f41afb9c69780251b20f + +KEY = 8bca240f2520e87d0211bae810e04c2e69ca38d1dd44213e7277f6c9dfa15aa585520a4f288a30aef91a97a0c02caec7cc0fc2dba66162406cadf65e85d8f3af +SEQUENCE_NUMBER = 59 +IN = 000000380b6162636465666768696a6b6c6d6e6f707172737475767778797a4142434445463031323334353637383961620000000000000000000000 +CT = 270fea0aa9e530a49aff4acda9d5c1954c3153f2184ee80cf80f959bf1146c0b66e38754733304194e297712a6174fc6344f4448bc3dbd2a88266d71 +TAG = bed23e779e7e238854be5f62fe751780 + +KEY = 843c5d6c6d26e92c34391bd5b7c89cd612d15a88ed667f59040dcb1afe0f736b7357017d9b82f9b63c8e01bc6d9b842b9a69241c5b3c063cb695978c5f33af32 +SEQUENCE_NUMBER = 156 +IN = 000000380a6162636465666768696a6b6c6d6e6f707172737475767778797a4142434445463031323334353637383961626300000000000000000000 +CT = f29ec1fb4e72c9c261bee5855ba5e1c6e2a63670f891cfd175065e6674494870b7a1a5944f328407c559a0ce7f318630729708e7cd42714a4fae2910 +TAG = 8c88ab81fbc1009d9714d8e111c5b9ac + +KEY = 6c7841f1605b3944ad68ec2eba5f0d57882b7dd004a9c788d6134b56b0704a74e131eb4943e0a61b0fa8a82236901576a0699e83c803f95a767cbef53848baac +SEQUENCE_NUMBER = 0 +IN = 00000038096162636465666768696a6b6c6d6e6f707172737475767778797a4142434445463031323334353637383961626364000000000000000000 +CT = b1d5d1e5d77fb49ac824463235901289e1658ac30f801ef96bfca359473f00af65ec2cdc5184896bcd2234aa7064e468b728d91aa30ead75c0af5bbc +TAG = 0d59f94c58537d96078ff4e6d5f08794 diff --git a/vendor/ring/tests/aead_chacha20_poly1305_tests.txt b/vendor/ring/tests/aead_chacha20_poly1305_tests.txt new file mode 100644 index 00000000..2e499678 --- /dev/null +++ b/vendor/ring/tests/aead_chacha20_poly1305_tests.txt @@ -0,0 +1,484 @@ +# Test vector from RFC 7539 Section 2.8.1. + +KEY = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +NONCE = 070000004041424344454647 +IN = "Ladies and Gentlemen of the class of '99: If I could offer you only one tip for the future, sunscreen would be it." +AD = 50515253c0c1c2c3c4c5c6c7 +CT = d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b6116 +TAG = 1ae10b594f09e26a7e902ecbd0600691 + +# Test padding AD with 15 zeros in the tag calculation. +KEY = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +NONCE = 070000004041424344454647 +IN = "123456789abcdef0" +AD = "1" +CT = ae49da6934cb77822c83ed9852e46c9e +TAG = dac9c841c168379dcf8f2bb8e22d6da2 + +# Test padding IN with 15 zeros in the tag calculation. +KEY = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +NONCE = 070000004041424344454647 +IN = "1" +AD = "123456789abcdef0" +CT = ae +TAG = 3ed2f824f901a8994052f852127c196a + +# Test padding AD with 1 zero in the tag calculation. +KEY = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +NONCE = 070000004041424344454647 +IN = "123456789abcdef0" +AD = "123456789abcdef" +CT = ae49da6934cb77822c83ed9852e46c9e +TAG = 2e9c9b1689adb5ec444002eb920efb66 + +# Test padding IN with 1 zero in the tag calculation. +KEY = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +NONCE = 070000004041424344454647 +IN = "123456789abcdef" +AD = "123456789abcdef0" +CT = ae49da6934cb77822c83ed9852e46c +TAG = 05b2937f8bbc64fed21f0fb74cd7147c + +# Test maximal nonce value. +KEY = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f +NONCE = ffffffffffffffffffffffff +IN = "123456789abcdef0" +AD = "123456789abcdef0" +CT = e275aeb341e1fc9a70c4fd4496fc7cdb +TAG = 41acd0560ea6843d3e5d4e5babf6e946 + +# Test 64-bit nonce value. This is a copy of a test below with the leading +# zeros in the nonce removed. +KEY = bcb2639bf989c6251b29bf38d39a9bdce7c55f4b2ac12a39c8a37b5d0a5cc2b5 +NONCE = 1e8b4c510f5ca083 +IN = 8c8419bc27 +AD = 34ab88c265 +CT = 1a7c2f33f5 +TAG = 2a63876a887f4f080c9df418813fc1fd +FAILS = WRONG_NONCE_LENGTH + +# Test vectors from chacha20_poly1305_deprecated_tests.txt, modified for the +# RFC 7539 AEAD construction. + +KEY = 9a97f65b9b4c721b960a672145fca8d4e32e67f9111ea979ce9c4826806aeee6 +NONCE = 000000003de9c0da2bd7f91e +IN = "" +AD = "" +CT = "" +TAG = 5a6e21f4ba6dbee57380e79e79c30def + +KEY = bcb2639bf989c6251b29bf38d39a9bdce7c55f4b2ac12a39c8a37b5d0a5cc2b5 +NONCE = 000000001e8b4c510f5ca083 +IN = 8c8419bc27 +AD = 34ab88c265 +CT = 1a7c2f33f5 +TAG = 2a63876a887f4f080c9df418813fc1fd + +KEY = 4290bcb154173531f314af57f3be3b5006da371ece272afa1b5dbdd1100a1007 +NONCE = 00000000cd7cf67be39c794a +IN = 86d09974840bded2a5ca +AD = 87e229d4500845a079c0 +CT = e3e446f7ede9a19b62a4 +TAG = 356d9eda66d08016b853d87c08b5c1b3 + +KEY = 422a5355b56dcf2b436aa8152858106a88d9ba23cdfe087b5e74e817a52388b3 +NONCE = 000000001d12d6d91848f2ea +IN = 537a645387f22d6f6dbbea568d3feb +AD = bef267c99aec8af56bc238612bfea6 +CT = 281a366705c5a24b94e56146681e44 +TAG = 59143dab187449060a3ec2a1681613cc + +KEY = ec7b864a078c3d05d970b6ea3ba6d33d6bb73dfa64c622a4727a96ede876f685 +NONCE = 000000002bca0e59e39508d3 +IN = b76733895c871edd728a45ed1a21f15a9597d49d +AD = cc1243ea54272db602fb0853c8e7027c56338b6c +CT = 1fb9b2958fce47a5cada9d895fbb0c00d3569858 +TAG = 219b4252deb16a43b292165aabc5d5ce + +KEY = 2c4c0fdb611df2d4d5e7898c6af0022795364adb8749155e2c68776a090e7d5c +NONCE = 0000000013ce7382734c4a71 +IN = 0dc6ff21a346e1337dd0db81d8f7d9f6fd1864418b98aadcdb +AD = 0115edcb176ab8bfa947d1f7c3a86a845d310bf6706c59a8f9 +CT = dad65e4244a1a17ce59d88b00af4f7434bd7830ffdd4c5558f +TAG = 7ae32f186cf9ec59b41b764b34307d4f + +KEY = c66e89fbab01208f6a60847f4f34b38d27b554c119cf8d9e0b118aa7266ab865 +NONCE = 000000005d9856060c54ab06 +IN = f9e3e9b5ed07b2080db8c1ffc37e4a6cb3cd544608921e18610d00b17c6e +AD = 85c112a1efe0a20ef3a550526a7afbc98f6367ebbede4e703099abd78f51 +CT = b5cc754f6dd19ef2d66f90e6bc9a322ddf216ef248cbe76b5ab6dd53bc36 +TAG = d3f7b9c295f374651a84138648a5919a + +KEY = a8b9766f404dea8cf7d7dfaf5822f53df9ccd092e332a57f007b301b507d5e14 +NONCE = 00000000c7f2f7a233104a2d +IN = 4d6faeaee39179a7c892faae3719656cc614c7e6ecd8fcb570a3b82c4dace969090338 +AD = c6d83b6a56408a356e68d0494d4eff150530b09551d008373d6dee2b8d6b5619d67fdb +CT = a15443f083316eef627a371f4c9ac654d0dd75255d8a303125e9f51af4233ff4ceb7fe +TAG = 63c2b4e0973096299488b0a66ffa54c1 + +KEY = 5e8d0e5f1467f7a750c55144d0c670f7d91075f386795b230c9bf1c04ba250bc +NONCE = 0000000088049f44ba61b88f +IN = 51a1eebcc348e0582196a0bce16ed1f8ac2e91c3e8a690e04a9f4b5cf63313d7ad08d1efbff85c89 +AD = 5d09bf0be90026f9fc51f73418d6d864b6d197ea030b3de072bd2c2f5cab5860a342abbd29dba9dc +CT = 35aa4bd4537aa611fd7578fc227df50ebcb00c692a1cf6f02e50ed9270bd93af3bc68f4c75b96638 +TAG = 4461139c4055333106cf7f7556fd4171 + +KEY = 21a9f07ec891d488805e9b92bb1b2286f3f0410c323b07fee1dc6f7379e22e48 +NONCE = 00000000066215be6567377a +IN = c1b0affaf2b8d7ef51cca9aacf7969f92f928c2e3cc7db2e15f47ee1f65023910d09f209d007b7436ee898133d +AD = dfdfdf4d3a68b47ad0d48828dc17b2585da9c81c3a8d71d826b5fa8020fee002397e91fc9658e9d61d728b93eb +CT = 8ff4ceb600e7d45696d02467f8e30df0d33864a040a41ffb9e4c2da09b92e88b6f6b850e9f7258d827b9aaf346 +TAG = b2ad07b86aca1b3ab34033c12d6a08cc + +KEY = 54c93db9aa0e00d10b45041c7a7e41ee9f90ab78ae4c1bba18d673c3b370abde +NONCE = 000000003f2d44e7b352360f +IN = 1241e7d6fbe5eef5d8af9c2fb8b516e0f1dd49aa4ebe5491205194fe5aea3704efaf30d392f44cc99e0925b84460d4873344 +AD = f1d1b08dd6fe96c46578c1d1ad38881840b10cb5eae41e5f05fe5287223fa72242aea48cb374a80be937b541f9381efa66bb +CT = 027b86865b80b4c4da823a7d3dbcf5845bf57d58ee334eb357e82369cc628979e2947830d9d4817efd3d0bc4779f0b388943 +TAG = 6de01091d749f189c4e25aa315b31495 + +KEY = 808e0e73e9bcd274d4c6f65df2fe957822a602f039d4752616ba29a28926ef4a +NONCE = 000000001b9cd73d2fc3cb8e +IN = 3436c7b5be2394af7e88320c82326a6db37887ff9de41961c7d654dd22dd1f7d40444d48f5c663b86ff41f3e15b5c8ca1337f97635858f +AD = d57cfbe5f2538044282e53b2f0bb4e86ea2233041fb36adb8338ded092148f8c2e894ef8766a7ec2dd02c6ac5dbab0c3703c5e9119e37c +CT = 9b950b3caf7d25eaf5fca6fa3fe12ed077d80dcd5579851233c766bb8bb613ec91d925a939bb52fb88d5eda803cfe2a8cda2e055b962fd +TAG = 0887ec7d5e1a4e532746ec247a30825a + +KEY = 4adfe1a26c5636536cd7cb72aa5bded0b1aa64487ad0e4078f311e8782768e97 +NONCE = 00000000d69e54badec11560 +IN = 19b3f9411ce875fcb684cbdc07938c4c1347e164f9640d37b22f975b4b9a373c4302ae0e7dfdeba1e0d00ced446e338f4c5bc01b4becef5115825276 +AD = bda1b0f6c2f4eb8121dcbd2eebd91a03ae1d6e0523b9b6f34b6f16ceca0d086654fb0552bfd5c8e1887730e1449ea02d7f647ae835bc2dab4bbc65b9 +CT = ea765a829d961e08bacaed801237ef4067df38ad3737b7c6de4db587a102a86fc4abbaabea0ee97c95ca7f571c7bab6f38cbae60cd6e6a4ce3c7a320 +TAG = a27f18846f5a4f7fcc724656c91cf4f3 + +KEY = eb3db86c14b7cc2e494345d0dfb4841bbd3aa1e2bc640cca0c6c405520685639 +NONCE = 0000000088b54b28d6da8c81 +IN = f75c0a357271430b1ecff07a307b6c29325c6e66935046704a19845e629f87a9e3b8aa6c1df55dd426a487d533bb333e46f0d3418464ac1bef059231f8e87e6284 +AD = 34b08bb0df821c573dcb56f5b8b4a9920465067f3b5bf3e3254ea1da1a7fc9847fd38bdfe6b30927945263a91fa288c7cf1bee0fddb0fadf5948c5d83eb4623575 +CT = 146ec84f5dc1c9fe9de3307a9182dbaa75965bf85f5e64563e68d039a5b659aa8863b89228edb93ff3d8c3323ab0d03300476aa4aca206d4626a6b269b2078912d +TAG = 854cbb42bade86a09597482c8604681a + +KEY = dd5b49b5953e04d926d664da3b65ebcffbbf06abbe93a3819dfc1abbecbaab13 +NONCE = 00000000c5c8009459b9e31a +IN = f21f6706a4dc33a361362c214defd56d353bcb29811e5819ab3c5c2c13950c7aa0000b9d1fe69bb46454514dcce88a4a5eda097c281b81e51d6a4dba47c80326ba6cea8e2bab +AD = fe6f4cbb00794adea59e9de8b03c7fdf482e46f6c47a35f96997669c735ed5e729a49416b42468777e6a8d7aa173c18b8177418ded600124a98cbb65489f9c24a04f1e7127ce +CT = 911ead61b2aa81d00c5eff53aeea3ab713709ed571765890d558fb59d3993b45f598a39e5eff4be844c4d4bd1ef9622e60412b21140007d54dcf31b2c0e3e98cf33a00fd27f0 +TAG = 2865d2a26f413cc92416340f9491e1be + +KEY = 3b319e40148a67dc0bb19271d9272b327bc5eee087173d3d134ad56c8c7dc020 +NONCE = 00000000ce5cf6fef84d0010 +IN = 27b5627b17a2de31ad00fc2ecb347da0a399bb75cc6eadd4d6ee02de8fbd6a2168d4763ba9368ba982e97a2db8126df0343cdad06d2bc7d7e12eec731d130f8b8745c1954bfd1d717b4ea2 +AD = a026b6638f2939ec9cc28d935fb7113157f3b5b7e26c12f8f25b36412b0cd560b7f11b62788a76bd171342e2ae858bcecb8266ff8482bbaed593afe818b9829e05e8e2b281ae7799580142 +CT = 368fb69892447b75778f1c5236e1e9d5d89255c3d68d565a5bba4f524d6ad27de13087f301e2ef4c08f5e2c6128b1d3e26de845c4ac4869e4c8bd8858ad0d26dec3b5d61a9e3666a3911ba +TAG = 1414f1b91966340417c38226ccca9d3d + +KEY = 43bf97407a82d0f684bb85342380d66b85fcc81c3e22f1c0d972cd5bfdf407f4 +NONCE = 000000008b6ba494c540fba4 +IN = 4b4c7e292a357f56fdf567c32fc0f33608110d7ce5c69112987d7b5a0bd46d8627a721b0aed070b54ea9726084188c518cba829f3920365afc9382c6a5eb0dd332b84612366735be2479b63c9efc7ff5 +AD = 1e0acf4070e8d6758b60d81b6d289a4ecdc30e3de4f9090c13691d5b93d5bbcef984f90956de53c5cf44be6c70440661fa58e65dec2734ff51d6d03f57bddda1f47807247e3194e2f7ddd5f3cafd250f +CT = d0076c88ad4bc12d77eb8ae8d9b5bf3a2c5888a8d4c15297b38ece5d64f673191dc81547240a0cbe066c9c563f5c3424809971b5a07dcc70b107305561ce85aecb0b0ea0e8b4ff4d1e4f84836955a945 +TAG = c5ca34599c6a8b357c6723ee12b24da8 + +KEY = 12fc0bc94104ed8150bde1e56856ce3c57cd1cf633954d22552140e1f4e7c65d +NONCE = 00000000d3875d1b6c808353 +IN = 24592082d6e73eb65c409b26ceae032e57f6877514947fc45eb007b8a6034494dde5563ac586ea081dc12fa6cda32266be858e4748be40bb20f71320711bf84c3f0e2783a63ad6e25a63b44c373a99af845cdf452c +AD = b8be08463e84a909d071f5ff87213391b7da889dc56fd2f1e3cf86a0a03e2c8eaa2f539bf73f90f5298c26f27ef4a673a12784833acb4d0861562142c974ee37b09ae7708a19f14d1ad8c402bd1ecf5ea280fab280 +CT = 9d9ae6328711fb897a88462d20b8aa1b278134cdf7b23e1f1c809fa408b68a7bfc2be61a790008edaa98823381f45ae65f71042689d88acfa5f63332f0fba737c4772c972eba266640056452903d6522cefd3f264e +TAG = e84211b6cfd43543f8b1b4db07a494d1 + +KEY = 7b6300f7dc21c9fddeaa71f439d53b553a7bf3e69ff515b5cb6495d652a0f99c +NONCE = 0000000040b32e3fdc646453 +IN = 572f60d98c8becc8ba80dd6b8d2d0f7b7bbfd7e4abc235f374abd44d9035c7650a79d1dd545fa2f6fb0b5eba271779913e5c5eb450528e4128909a96d11a652bf3f7ae9d0d17adbf612ec9ca32e73ef6e87d7f4e21fe3412ce14 +AD = 9ff377545a35cf1bfb77c734ad900c703aee6c3174fdb3736664863036a3a9d09163c2992f093e2408911b8751f001e493decc41e4eeeed04f698b6daed48452a7e1a74ec3b4f3dcf2151ca249fa568aa084c8428a41f20be5fd +CT = 229da76844426639e2fd3ef253a195e0a93f08452ba37219b6773f103134f3f87b1345f9b4bf8cfc11277c311780a2b6e19a363b6ac2efe6c4cc54a39b144e29c94b9ebbde6fd094c30f59d1b770ebf9fcad2a5c695dc003bf51 +TAG = 55e025a1eb87bc84d4be00c775c92ad2 + +KEY = 4aeb62f024e187606ee7cc9f5865c391c43df1963f459c87ba00e44bb163a866 +NONCE = 000000009559bd08718b75af +IN = c5d586ceece6f41812c969bcf1e727fe6ff8d1ae8c8c52367c612caa7cdf50e0662f5dffc5ea7d3cc39400dfe3dc1897905f6490fd7747b5f5f9842739c67d07ce7c339a5b3997a7fb4cd0d8e4817ff8916b251c11ef919167f858e41504b9 +AD = 51f5b503b73a5de8b96534c2a3f2d859ece0bd063ea6dfa486a7eec99f6c020983f7148cccb86202cf9685cc1cc266930f04e536ad8bc26094252baa4606d883bd2aeed6b430152202e9b6cc797ff24fc365315ed67391374c1357c9a845f2 +CT = 252ea42b6e5740306816974a4fe67b66e793ebe0914778ef485d55288eb6c9c45fa34ac853dc7a39252520514c3cb34c72b973b14b32bc257687d398f36f64cc2a668faffa7305ab240171343b5f9f49b6c2197e4fbe187b10540d7cdcfa37 +TAG = ab1d8a5a1f3eda9b5609c0028737477f + +KEY = 9a19e72f005cae1ae78b8e350d7aabe59fc8845999e8c52fad545b942c225eaf +NONCE = 00000000d9dae2ea8d2ffc31 +IN = 2110378d856ded07eb2be8e8f43308e0c75bc8a3fcc7b1773b0725b7de49f6a166c4528e64120bdf7c9776615d3ce6feeb03de964a7b919206a77392f80437faceb6745845cafc166e1c13b68e70ca2a1d00c71737b8fcbbbd50902565c32159e05fcd23 +AD = 1cd73b72c4e103afbefd7c777e0480f3f5e68c60b85bd2e71ef5caebb175d7fc6535d39f38f92c24f2eb0fe97d878ed3d5967c0bb4394a5d41f7d34cda6e1523d3848f049cde554a7d31e1afeab5d3e6150f85858335cbd28c8a7f87d528058df50eea06 +CT = 5f009fbce4ec8e4ca9d8d42258b1a3e4e920b2fbad33d5e9f07557d9595e841025193b521ba440110dd83958e8ee30219d952b418e98a6c624894aa248aedc0678f2d263e7bfaf54ca379fef6c5d2f7ac422ea4b4369408b82d6225a7a2cf9a9f46fd4ef +TAG = 1c6bdff7d8b9554dc7bf40e50b37d352 + +KEY = ba1d0b3329ecc009f1da0fab4c854b00ad944870fdca561838e38bad364da507 +NONCE = 000000008a81c92b37221f2f +IN = 6289944ffa3ccea4bf25cd601b271f64e6deb0eba77d65efb4d69ca93e01996e4727168b6f74f3ccf17bd44715f23ceb8fc030c0e035e77f53263db025021fd2d04b87a1b54b12229c5e860481452a80a125cb0693a2ba1b47e28ee7cbaf9e683c178232c7f6d34f97 +AD = e57883961b8d041d9b9eeaddcfd61fa9f59213f66571fadffffdd1498b9b014f1ef2e7e56c3044d7f9fa7a1403a1169e86430a2a782137093f5456e142aad03a5f7a66d38009dd01b7fc02c9cf61642dedaf7cc8d46066c281ee17780674c3a36eae66c58d2d765075 +CT = 9c44d9135db0dbf81c862c1f69bec55a279794cdd29a58e61909aa29ec4c120c9c5a508d856b9e56138095714a4bb58402a1ad06774cf4ecdf2273839c0007cb88b5444b25c76f6d2424281101d043fc6369ebb3b2ff63cdb0f11a6ea1b8a7dafc80cdaef2813fa661 +TAG = 689a141bc11159d306dad7a4ecf6ad9d + +KEY = 0cf8c73a6cffc1b8b2f5d320da1d859d314374e4a9468db7fd42c8d270b7613a +NONCE = 000000003c4c6f0281841aff +IN = 4434728d234603c916e2faa06b25d83bad3348990ecde2344368d1a7af1309bd04251bb2e0b72044948f8dea33cce2618283b6af742073a9586b26c1089335fe735141e099785a1235810a3a67ff309e2f0ce68220ba0077ad1a5dc1a4aef898a3b9ff8f5ad7fe60149bd0bd6d83 +AD = a38d09a4f1c9241623c639b7688d8d35345ea5824080c9d74e4352919db63c74d318f19e1cbb9b14eebd7c74b0ad0119247651911f3551583e749ea50ff648858dcaaa789b7419d9e93a5bf6c8167188dbac2f36804380db325201982b8b06597efeb7684546b272642941591e92 +CT = bdfbfea261b1f4c134445321db9e6e40476e2dd2f4e4dbe86e31d6a116d25830762e065b07b11a3799aab93a94b4f98c31c0faeb77ec52c02048e9579257e67f5a6bae9bc65210c25b37fc16ee93bda88fd5f30a533e470b6188c6ce5739fa3e90f77120b490fc1027964f277f40 +TAG = 780cc54bb6f1c9b78545c1562cd9d550 + +KEY = 69f4e5788d486a75adf9207df1bd262dd2fe3dd3a0236420390d16e2a3040466 +NONCE = 000000006255bf5c71bb27d1 +IN = c15048ca2941ef9600e767a5045aa98ac615225b805a9fbda3ac6301cd5a66aef611400fa3bc04838ead9924d382bef8251a47f1e487d2f3ca4bccd3476a6ca7f13e94fd639a259ef23cc2f8b8d248a471d30ac9219631c3e6985100dc45e0b59b8fc62046309165ddb6f092da3a4f067c8a44 +AD = 0c83039504c8464b49d63b7f944802f0d39c85e9f3745e250f10119fa2c960490f75ae4dced8503b156d072a69f20400e9494ab2fa58446c255d82ff0be4b7e43046580bc1cf34060c6f076c72ea455c3687381a3b908e152b10c95c7b94155b0b4b303b7764a8a27d1db0a885f1040d5dbcc3 +CT = f0bb2b73d94f2a7cef70fe77e054f206998eacf2b86c05c4fa3f40f2b8cebf034fe17bcbee4dea821f51c18c0aa85b160f8508bd1dc455cc7f49668b1fb25557cdae147bf2399e07fcacaca18eccded741e026ef25365a6b0f44a6b3dd975ee6bb580f5fccd040b73c18b0fbf8f63199ba10fe +TAG = 2ecccea4607d14dbb2d2475792aeb468 + +KEY = ad7b9409147a896648a2a2fe2128f79022a70d96dc482730cd85c70db492b638 +NONCE = 00000000a28a6dedf3f2b01a +IN = 791d293ff0a3b8510b4d494b30f50b38a01638bf130e58c7601904f12cb8900871e8cf3d50abd4d34fda122c76dfee5b7f82cd6e8590647535c915ae08714e427da52f80aef09f40040036034ca52718ea68313c534e7a045cd51745ec52f2e1b59463db07de7ca401c6f6453841d247f370341b2dbc1212 +AD = 9a6defddb9b8d5c24a26dd8096f5b8c3af7a89e1f7d886f560fabbe64f14db838d6eb9d6879f4f0b769fe1f9eebf67fcd47b6f9ceb4840b2dba7587e98dc5cae186ef2a0f8601060e8058d9dda812d91387c583da701d2ba3347f285c5d44385a2b0bf07150cbc95e7fcfa8ae07132849a023c98817c03d2 +CT = c2f109d6d94f77a7289c8a2ab33bc6a98d976554721b0c726cbf4121069473e62ba36e7090e02414f3edc25c5d83ac80b49ad528cda1e3ad815b5a8c8ae9ad0753de725319df236983abd3f69ab4465d9b806c075b1896d40bdba72d73ba84c4a530896eb94ffccf5fb67eb59119e66a1861872218f928cf +TAG = 17ec6cf2b172f01e3c456ad047196805 + +KEY = 48470da98228c9b53f58747673504f74ca1737d7d4bb6dbf7c0cba6ca42f80b9 +NONCE = 0000000056fb4923a97e9320 +IN = bc6626d651e2b237f22ee51608ddcffeba5f31c26df72f443f701f2b085d6f34f806e29673584cb21522179edb62a82427d946acabce065b88b2878e9eb87ed1004e55ef58f51ec46375ac542c5782725ff013136cb506fcf99496e13fcd224b8a74a971cc8ddb8b393ccc6ac910bd1906ea9f2ed8a5d066dc639c20cd +AD = df8ab634d3dca14e2e091b15ecc78f91e229a1a13cba5edd6526d182525ec575aa45bc70fb6193ffcd59bad3c347159099c4f139c323c30a230753d070018786b2e59b758dd4a97d1a88e8f672092bef780b451fd66ba7431cbb5660ea7816cdf26e19a6ebb9aadc3088e6923f29f53f877a6758068f79a6f2a182b4bf +CT = a62e313ecf258cc9087cbb94fcc12643eb722d255c3f98c39f130e10058a375f0809662442c7b18044feb1602d89be40facae8e89ca967015f0b7f8c2e4e4a3855dbb46a066e49abf9cef67e6036400c8ff46b241fc99ba1974ba3ba6ea20dc52ec6753f6fc7697adbccd02b0bbea1df8352629b03b43cc3d632576787 +TAG = d29a8968067aeb457ffc114c3a9efb95 + +KEY = b62fb85c1decd0faf242ce662140ad1b82975e99a3fa01666cac2385ab91da54 +NONCE = 000000002f4a5ca096a4faf8 +IN = 03b14f13c0065e4a4421de62ab1d842bffb80f3da30bf47d115c09857f5bdd5756fd7c9ac3d9af1c9fb94f2640f7f4386cfba74db468e5288dbe4dd78bfe4f69e41480ca6138e8beacc6eaa3374157c713cfa900c07dd836eaecc8827fa3e70e052ae09e8473e2ae1a10b1bb669ef60a8dd957f6553daa8114918e17371f2ac327bd +AD = cfe3b7ab7550b0e8e2e8235fa0dcef95647ce6814abd3dc3f5a3bd7d6d282504660c34ad8341e4d11402c7d46c83a494d7ddb105e1002979023e0e3dc2978c9ae53e10eb8567e7a02b60e51e945c7040d832ca900d132b4205a35034fed939a1b7965183c25654931a9b744401c4649c945710b0d9733b87451348b32ba81de30ea7 +CT = 8965db3d3ae4fb483208f147276e7d81b71a86e7202ffc9b1eaade009bc016838dc09ca4bcf30887b2f4243fbd652cd90ebed1ceef8151ff17ea70518d03b0f2a24960aa7de9b30fa65c2e2d57360061aae6d9376e984e9fcd5e5dd0911a4bc8deca832ffb76f252bd7da523076593ba6b174f7d9fb0377e066ecbb6638036241e86 +TAG = 28a5284696ed82714eaa94c9ebe6e815 + +KEY = de9c657258774d4ebc09d109a0fc79d66493ae578797cac4eb8830a6a4b547e0 +NONCE = 00000000b5e35fe3398efa34 +IN = 4d68fb683aa4f4c7a16ba1114fc0b1b8d8898610fa2763e435ded8771b3651078bef73d4dfd14e76a34cd5eb9ef4db4ead4da9e83f4ce50fe059977b2d17d687c29335a04d87389d211f8215449749969f7652dc1935a0f9a94538dc81dc9a39af63446a6517609076987920547d0098a9c6766cf5e704883ea32feaea1889b1554b5eb0ce5ecc +AD = 436ea5a5fee8293b93e4e8488116c94d3269c19f1d5050def23d280515457b931bbed64a542b317cc5023d648330a4b7adca14dd6f3783207b94f86ccaa0a0ac39b7db00ac87a99e3cd8a764ed9c75da8454479636ab2b29e770b166a5b75cacc425c919bf1ce9ac34afe6b4425c3d9fd2e48bc81e7d15516d60e592bfcc2ebefb660f0995f2b5 +CT = 97a97b8f0f5420845ae8d57567f9bba693d30e6db916fad0b971f553ad7d993f806f27ab8b458d8046062ced4778c004b4f958a4436141637c6039963308dea2f54008b7feab79650295ed41bf9e65e1a2d75ab1c7b2a70ebb9e9f38d07a9a672d3e95ea78afe9ac02f2566b48b0251aef6eeeca8bd15bd8d43b559426aa9d15d960ee35cb3edf +TAG = 4ef49e8a0c2ef85826d7f03e81c577f2 + +KEY = 6885bd333c336c7672db8ebdf24c1a1b605c5a4ae279f0f698162f47e6c73401 +NONCE = 00000000f0c4a213a6168aab +IN = fa905a2bfa5b5bad767239fb070a7bc0b303d1503ecd2b429418cc8feba843e5444ed89022fdb379c3b155a0f9ceab2979000a0f60292a631771f2fde4ef065aa746426609082969530a9c70ad145308c30ba389ea122fd766081511a031ce3a0bd9f9f583c7000b333b79ac004fbde6ec3eb2d905977ff95dcff77858e3c424fe8932a6a12139e6ec8d5e98 +AD = 8ded368f919efb522bb6a9ad009e02ffbc6a16536e34d95cdb34f1153d7cb7b0f3c2b13dd05cedae27cfe68ec3aca8047e0930a29c9d0770c1b83c234dcb0385deae7ae85da73a5f8de3dfb28612a001f4e552c4f67ae0e2ec53853289b7017a58591fd6f70b0e954876bb2f7ec33001e298856a64bb16181017ba924648c09fc63c62eff262c80d614679bd +CT = 0cb3d6c31e0f4029eca5524f951244df042fc637c4162511fea512a52d3f7581af097eb642e79e48666cb1086edbd38c4777c535a20945fabc23e7c9277e2b960aac46865f1026eb6da82759108b9baece5da930ccfc1052b1656b0eadaa120ed0c45ad04b24ae8cdb22ceab76c5f180b46a392ab45b1b99c612546e6b947f4d5c06ad5abee92ff96345ad43 +TAG = fad7d5a5193dfb121c68529ba8c0c35d + +KEY = fbc978abb1240a6937ccc16735b8d6ed5411cdbc1897214165a174e16f4e699b +NONCE = 000000007968379a8ce88117 +IN = 1a8196cd4a1389ec916ef8b7da5078a2afa8e9f1081223fa72f6524ac0a1a8019e44a09563a953615587429295052cc904b89f778ef446ed341430d7d8f747cf2db4308478524639f44457253ae5a4451c7efca8ae0b6c5c051aaa781e9c505489b381a6dcba87b157edc7f820a8fbaf2a52e484dc121f33d9d8b9ac59d4901d6ed8996ed4f62d9d4d82274c449cd74efa +AD = 3913cd01299b8a4e507f067d887d7e9a6ded16dd9f9bb3115c5779aa14239fd33ee9f25756d45262dc3011069356425b5c81a4729594e17c9747119f81463e85625d5603d05e00f568b0c800bb181eb717be8d7a93166a504ce1bc817e15530c5bd2b3df1d4222245ea78a38bc10f66c5cf68d661503131f11af885c8a910b6dce70bc3a7448dfae00595beb707fe054d3 +CT = d152bcb4c24c3711b0fad28548dc4db605bbc89237cdbea7dbf956b8855d1161a0781f27bd56d798141e2ace339955efb98fe05d9b44cd011e645106bf47726183958cb6df34ce5766695f60bc70b6fe0fabb9afa009a8ef043dbf75f861881368fa07726625448fe608d578cdc48277f2dc53eaaf1bdc075269a42f9302a57cad387a82c6969608acacda20e1cac4596c +TAG = 96ae06cd7c72456e5568a42317046158 + +KEY = 77d1a857fbadfe01aba7974eea2dfb3dc7bf41de73686aece403993e5016c714 +NONCE = 00000000fdd913a321c40eb0 +IN = db8915bfe651e2ecb3ce0b27d99a6bfa7a7c507cfcb2987293018636c365a459c6a138b4428be538413db15bda69e697cbb92b154b7f4d2cbb07965225aa6865d7dcd1ba2c17c484b00b1986fed63e889f25a4966dc3ed4273f1577768f665362d7d3e824484f0dded7f82b8be8797ad951719719365e45abbf76324bc7d657799d4d4f4bb1dba67d96ab1c88519a5bee704f7214814 +AD = 3cb2c06c20cb0832bbacebfc205d77393ca1816346ea2681de4d3ab1fadb774ad273e4713290454496f5281ebc65e04cfe84ed37cd0aedc4bbe3decbd8d79d04a4e434876650e0d64309e336bfb10e924066a64acb92260b2dbd96735d03af03909aa6a80a6e89fda81037257aec21fe9be7e91a64e88e0a58fa38ecba4c4c4cffb61958f3c486cbb0b1d0b0014a2d1d3df248eec1ca +CT = acb825e6023b44b03b2efc265603e887954e8612b2ee134bdcb61501cfb9492952bf67be597c3a005b09af74d9e421a576d2c65e98104780feab838d8cb1bd135452ea39dc8907a4c1a6a9161805e4fa3e16989e6a418a7eea2582bf895da967028eab7c95d846a6de4b9980785814cf00484baa2f6de609912fff689bce6e854261ffe866bd8e63274605c7c5ad677bd7897ade543e +TAG = bcf523a9bcf772e157941753c6d7401e + +KEY = b7e9b90dc02b5cd6df5df7283ef293ed4dc07513d9e67331b606f4d42dec7d29 +NONCE = 00000000a6c191f6d1818f8e +IN = 2ada0e3c7ca6db1f780ce8c79472af4e8e951ddc828e0d6e8a67df520638ff5f14a2f95a5e5931749ae2c4e9946ae4d5eb5de42fb5b77d2236e2e2bd817df51be40b1b8a6c21015a7c79fe06dba4a08b34013dfa02747b5f03930268404c455dc54a74d9c6e35485e10026da573cb41cd50b64cfafe4cfcdf3c9684ef877e45d84e22bd5e15fa6c8fd5be921366ff0dc6fe2df45f7252972c9b303 +AD = 0f4269ed5ef0bfff7be39946a4e86e8bf79f84b70cd0b14fecb7be3c071316ce86de3d99d6871e0ba5667d9d7bba7dcaba10cb2a36668b6c3e2fb6c102938b75008bb9c213ebf9b85b5e91a802df0d31d7f11d764b2289f6225212694ab6b7c0e3ff36e84245d9f4f43fc5f98e654dea7ba9bd918658879c5bb4a1642af0d83113e3cf935d3c0d5208318f66f654eb17d8c28a602543e77ad3e815 +CT = 22586fe7338e99cdaad9f85bd724ba4cfe6249b8a71399f9a3707b5c4323b8d96679568dfc8d230aefb453df596e13eb3e8a439249bd64bc93a58f95089a62b94f6562b821c83d91f56c55147381e9de4beb4ae81bd6fe7caef7e7e9a2078f2fba8f3e70d4910da9accc92b8e81a61b0fefbece4bd89443e66e8ddda8e47a66a62f17fd0e7d0a4852ce1a4d43d72a0b5e8914bbec698f060f2b092 +TAG = bd05336ed6426de412aac37661953052 + +KEY = 6b2cb2678d1102f2fbbd028794a79f14585c223d405e1ae904c0361e9b241e99 +NONCE = 000000007b3ae31f8f938251 +IN = b3cb745930e05f3ab8c926c0a343a6eb14809fd21b8390a6fcc58adb5579e5432021765b2d249a0ecf6ba678634c4f53f71495865f031ee97aa159f9ead3a3fcb823ee5238bdf12706a9c6137d236e2e7110ce650c321e41daf0afd62bab2a8fe55d7018de49a14efe6d83a15b2f256d595e998d25309f23633360f5745c50c4e5af8ccc9a8a2cb47064105a023e919c7795d2dc331d3f2afb8c42e5c0bcc26d +AD = 1c32fd3df22b3e440e2a3c7a7624990194cb16a5f74af36f87fd6ca7d410ce9064316a2d091945deef7d9b35ceec8396069307caced2b80afd7d53ec479c35cedf2dfd4c95c3dd8400f71ad34028c6e4f8681d93d0774064ba38f3fb9b0c1dfa1f5f0c7d20676a5911d999fb6a1d41367a8e99d852bf3d3b7b3f4c233249ed1ca135389a674ff48232ded3f6800a97b6d409c40e6cd70d09bf9d2ad25d9b9485 +CT = ef70c7de98ab1d4ad817024a970be463443640eb0cd7ff234bdd00e653074a77a1d5749e698bd526dc709f82df06f4c0e64046b3dc5f3c7044aef53aebb807d32239d0652dd990362c44ec25bf5aeae641e27bf716e0c4a1c9fbd37bbf602bb0d0c35b0638be20dd5d5891d446137e842f92c0ee075c68225e4dbacb63cc6fb32442b4bcda5e62cb500a4df2741a4059034d2ccb71b0b8b0112bf1c4ca6eec74 +TAG = d48657033095db3f873c33445fec8d35 + +KEY = 4dbc80a402c9fceaa755e1105dc49ef6489016776883e06fcf3aed93bf7f6af7 +NONCE = 000000002358ae0ce3fb8e9f +IN = 197c06403eb896d2fa6465e4d64426d24cc7476aa1ae4127cd2bd8a48ce2c99c16b1cbf3064856e84073b6cf12e7406698ef3dd1240c026cbd1ab04ee603e1e6e735c9b7551fd0d355202b4f64b482dd4a7c7d82c4fe2eb494d0d5e17788982d704c1356c41a94655530deda23118cba281d0f717e149fbeb2c59b22d0c0574c1a2e640afad1a6ceb92e1bf1dde71752a1c991e9a5517fe98688a16b073dbf6884cfde61ac +AD = cf6ce7b899fb700a90d2a5466d54d31358ecf0562e02b330a27ba0138006b342b7ed6349d73c4c5c6d29bde75a25089b11dac5b27adea7e7640ca1a7ceb050e3aae84a47e11640a6e485bd54ae9fdb547edc7313d24a0328429fcffd8b18f39880edd616447344ebeec9eadb2dcb1fa7e67179e7f913c194ebd8f5a58aea73b0c5d1133561245b6d9c5cfd8bb0c25b38ffb37db5e2de5cdded6b57355e9d215cb095b8731f +CT = aa87f9a83048b6919c8f2b050315db4e2adae4a9c2ca0109b81961b520e63299dcb028cec0b9d3249a945ee67dd029b40f361245c740f004f8cf0d2214fcfa65e6124a3e74b78aa94345c46fdc158d34823ed249ee550431eaae9218367321cdd6e6a477650469bb3cc137a8f48d9cf27934b16703608b383d2145659922fb83bb2e7ee2ef938a90f2ff846a4a949129b1fb74dde55c5ae013c2f285de84f7dac7d1662f23 +TAG = 298f84c8312029a7b1f38c5ea6021f57 + +KEY = 9e4a62016dae4b3223fed1d01d0787e31d30694f79e8142224fe4c4735248a83 +NONCE = 00000000263a2fc06a2872e7 +IN = 5a46946601f93a0cee5993c69575e599cc24f51aafa2d7c28d816a5b9b4decda2e59c111075fb60a903d701ad2680bb14aeda14af2ae9c07a759d8388b30446f28b85f0a05cd150050bd2e715ff550ebbd24da3ebb1eac15aba23d448659de34be962ab3ab31cb1758db76c468b5bb8ce44b06c4e4db9bd2f0615b1e727f053f6b4ffb6358d248f022bcad6ca973044bed23d3920906a89a9a9c5d8024ec67d7f061f64529a955ce16b3 +AD = 4cd65f68f9f88c0516231f2a425c8f8a287de47d409d5ecde3ad151e906b3839fb01bb91a456f20ea9d394d4b06604ab1f9009ef29019af7968d965d1643161ab33a5354cda2fdc9f1d21ec9cb71c325c65964a14f9b26eb16560beb9792075a1597394000fd5f331bd8b7d20d88e5f89cf8d0b33e4e78e4904bb59c9c8d5d31ac86b893e4a0667af1be85fdb77f7ec3e2594a68048d20c2fb9422f5879078772ee26a1c560cbcbb2113 +CT = e944bb2ab06d138ad633c16ce82706ecf0ef5d119be1f3460c9ce101d9c4e04ef1677707fca40d1f8ca181e07273707b06624d6d7063c3b7b0bb0151b757b3e5237fb8004c161233d8bc7e5f28ea1c18da1874b3d54c5ad6ff0835eed35c8853704585cf83996e5e7cec68180af414e04f08134d3b0384ebdf0393c9310b55d8698fe10cb362defc0995e9a13b48b42cff61ffd9fe4c3c8c6dab355713b88f6e98a02e7231a0c6644ec4 +TAG = 6234e81e089b779d0d509d14e566b5d7 + +KEY = 18ca3ea3e8baeed1b341189297d33cef7f4e0a2fab40ec3b6bb67385d0969cfe +NONCE = 00000000b6aef34c75818e7c +IN = ef6d1bb4094782f602fcf41561cba4970679661c63befe35ff2ca7ad1a280bf6b1e7f153fa848edfeffe25153f540b71253e8baba9aeb719a02752cda60ea5938aab339eead5aabf81b19b0fc5c1ed556be6ad8970ea43c303d3046205b12c419dea71c4245cfedd0a31b0f4150b5a9fe80052790188529ab32f5e61d8ccde5973ed30bdf290cbfbd5f073c0c6a020eac0332fced17a9a08cef6f9217bd6bef68c1505d6eed40953e15508d87f08fc +AD = f40f03beaa023db6311bad9b4d5d0d66a58d978e0bcbbf78acebde1f4eb9a284095628955a0b15afc454152f962ec3ea2b9a3b089b99658e68ede4dee5acd56672025eb7323bcbc6ba5d91c94310f18c918e3914bbbf869e1b8721476f9def31b9d32c471a54132481aa89f6c735ab193369496d8dbeb49b130d85fbff3f9cb7dccea4c1da7a2846eef5e6929d9009a9149e39c6c8ec150c9ab49a09c18c4749a0a9fcba77057cdea6efd4d142256c +CT = c531633c0c98230dcf059c1081d1d69c96bab71c3143ae60f9fc2b9cd18762314496ab6e90bf6796252cb9f667a1f08da47fc2b0eecda813228cae00d4c0d71f5e01b6ce762fa636efffe55d0e89fdc89ba42521cc019ab9d408fcd79c14914e8bbf0ea44d8a1d35743ad628327e432fdcfeb0b6679ddca8c92b998473732abd55dba54eefff83c78488eee5f92b145a74b6866531476fc46279d4fde24d049c1ce2b42358ff3ab2ba3a8866e547af +TAG = e3b4192f6e50528c4f4f70267f094c56 + +KEY = 95fdd2d3d4296069055b6b79e5d1387628254a7be647baafdf99dd8af354d817 +NONCE = 00000000cd7ed9e70f608613 +IN = 0248284acffa4b2c46636bdf8cc70028dd151a6d8e7a5a5bc2d39acc1020e736885031b252bfe9f96490921f41d1e174bf1ac03707bc2ae5088a1208a7c664583835e8bb93c787b96dea9fc4b884930c57799e7b7a6649c61340376d042b9f5faee8956c70a63cf1cff4fc2c7cb8535c10214e73cec6b79669d824f23ff8c8a2ca1c05974dd6189cfee484d0906df487b6bd85671ce2b23825052e44b84803e2839a96391abc25945cb867b527cdd9b373fbfb83 +AD = 24a45a3a0076a5bcfd5afe1c54f7b77496117d29f4c0909f1e6940b81dde3abacb71ec71f0f4db8a7e540bd4c2c60faee21dd3ce72963855be1b0ce54fb20ad82dbc45be20cd6c171e2bebb79e65e7d01567ad0eeb869883e4e814c93688607a12b3b732c1703b09566c308d29ce676a5c762a85700639b70d82aaef408cf98821a372c6a0614a73ba9918a7951ea8b2bb77cd9896d26988086d8586d72edc92af2042ff5e5f1429a22f61065e03cfcd7edc2a93 +CT = 40c6318d9e383e107cdd3e1c8951562193c3ef64ee442432a63e2edefc78f32ab07772aeac172cb67ecf4d21f8b448423527bbeb9d8ddd0b46bdb27f74096ceb24e41963b4cdca176676a75bdbe3abc270b349ac0c6cbd9c3a5cd5bce20202fc5cc0c1bdd4fd25e121e0a24bd7bbeb9b19b1912467bf5338ee2ce88aa383c082b42cc399c9654ca325f35523e81438beb3f8926be79c378822d7c8f785614408a5f7cac49e4543188725643e6c1a70b46d0ec400 +TAG = 874875c9a0ba3060a0680291c3dc85a2 + +KEY = 6ae1102f84ed4dc114bb9d63f4dc78d7dbb1ab63f1659dd95f47940a7b7a811f +NONCE = 00000000c965d578ba91d227 +IN = b82a8a9209618f1f5be9c2c32aba3dc45b4947007b14c851cd694456b303ad59a465662803006705673d6c3e29f1d3510dfc0405463c03414e0e07e359f1f1816c68b2434a19d3eee0464873e23c43f3ab60a3f606a0e5be81e3ab4aa27fb7707a57b949f00d6cd3a11ae4827d4889dd455a0b6d39e99012fd40db23fb50e79e11f8a6451669beb2fbd913effd49ad1b43926311f6e13a6e7a09cf4bebb1c0bf63ce59cd5a08e4b8d8dbf9d002e8a3d9e80c7995bb0b485280 +AD = dfd4ac3e80b2904623ff79ea8ee87862268939decf5306c07a175b6b9da0eb13ac209b4d164755929e03240a0fe26599f136fb2afdffd12bb20354aa1d20e5799839abb68ae46d50c8974e13e361d87ef550fe6d82e8b5b172cf5cd08482efdef793ede3530d24667faf3a1e96348867c2942641f4c036981b83f50236b8e8a10b83ebf6909aad0076302f1083f72de4cf4a1a3183fe6ec6bfe2e73e2af8e1e8c9d85079083fd179ccc2ee9ff002f213dbd7333053a46c5e43 +CT = a9aeb8f0a2b3ca141ac71a808dcc0c9798ac117c5d2bd09b3cfe622693a9f8ca62e841b58bddb2042f888e3099b53638b88dfc930b7a6ee4272d77e4b1d7e442bab6afbde96ab0b432f0092d9ca50eef42f63c60c09e7b8de019b32ebe4030c37b8183cc1e3b913b0ce4ee4d744398fa03f9af1c070bed8cdafd65b3a84140cb4deadc70184de757332ce3780af84353f540755227e886a8d7ad980f3dd6fd68263d82e93f883381dec888bc9f4f48349aa2b4c342cb9f48c6 +TAG = f6dcad5412b95994f5e4d6829c2eba98 + +KEY = 405bb7b94715b875df068655f00513cb1ae23ffaac977ce273e57d3f83b43663 +NONCE = 000000005c6da1259451119a +IN = f9f143c0c52c94b4ba7b0608b144156a49e7b5d27c97315743d171911e3645ab7957c80924e3c6b9c22ab7a1cac4b7e9c0de84e49fd5e4a2d1ab51d764fc5670318688ec942f7ab34c331dce8f90fea6972e07f0dadec29d8eb3b7b6521ddd678a6527a962f4d8af78c077e27f7a0b2ef7eabd19e92b7f8c1e8fb166d4763ce9c40c888cf49aa9cdfc3e997c8fe1cce3fe802441bbd698de269ff316f31c196e62d12c6bb5cd93fb3c79ca6369f8c1ac9102daf818975ea7f513bb38576a +AD = 6fe6446505677bf08b385e2f6d83ef70e1547712208d9cebc010cba8c16ea4ece058d73c72273eed650afdc9f954f35aa1bdf90f1118b1173368acbc8d38d93ebf85bd30d6dc6d1b90913790c3efa55f34d31531f70c958759b2ba6f956c6fcdd289b58cb4c26e9515bf550f0fd71ab8527f062c9505cbb16e8e037d34de1756bef02a133dbf4a9c00ac03befc3fb7f137af04e12595ce9560f98b612480fcdba3b8be01db56ebec40f9deae532c3b0370b5c23a2a6b02a4de69efa8900c +CT = 1a4b073881922c6366680cc9c2a127b26f264148651b29abb0c388cf6c9b1865dba5a991e1f8309efbdb91bce44b278772c58fd41273526c33fec84beb53d1689b9da8483f71be6db73a73417069bb4cd3f195236e8d0a00d124eed3a6b6f89415b19a27fbe35774f6a1a6ee4bd4350b252b975f0db2d2eea82f4836350850d6290901e726e8af13644e2d98bc1d569c20800521e6affe976bd407049a2e6d9dd23f88d52e651391ecd2fc45b864310824aaadfa203762a77c1d64562dae +TAG = 90fcc2544880250f1c3abe8a3761ba08 + +KEY = 8c602bd94c630cd00c7a9c508067a5a9f133d12f06d9f6fe2a7b68dce4786d8a +NONCE = 00000000760de0f7b7cb67e2 +IN = c3ff559cf1d6ba6c0cc793ca09a0ba573a28359386a6ec93e1bacd8e630209e0b477a20aedec3c9cbf513ee6a1e3887112218d6155b9875f7e6c4bbba2c31972e905d19f529f4f0f9502996199f94f8728ba8d6424bb15f87fcacd88bb42c63fcc513759712bd0172b1e87c9da122f1993ffb7efd3a5c34b240dd3db89dddea36dbeb2836d9f8648f8e7cd428c0f948097af753b35f9876059e7702027bb00dc69071206e785f48fcbf81b39cc0343974ac70784a2e60c0df93b40379bea4ad8cac625 +AD = 9e14907c3a8e96c2636db1f3d78eb1f673d6ef043cbbb349467f1fe29bf60f23d5d5d1c3b133a8ad72065d822347541c13d1574baf737eb3cc3382fb479e6d5193b9c8e7d2444c66971ef099dc7f37f6cd97b9f7959d46e2cf25e8a5b3111b4d9e2ef906d905f0ee2d17587f7082d7c8e9a51509bde03d3d64338e1838d71700f1b4fcb100b5e0402969da462f26f974b4f9e766121f8fd54be99fc10beb9a606e13fbb1f960062815d19e67f80093360324013095719273c65542b0e31b1a2a3d928f +CT = 2794e6e133f6892f23837fff60cf7c28ee9942f8982ef8089db117903d0143293fdf12ea1cc014bcd8806fb83c19570eed7af522db0de489bbc87133a13434518bcfb9cda4d9f6d832a69209657a447abf8afd816ae15f313c7ea95ec4bc694efc2386cdd8d915dc475e8fadf3421fbb0319a3c0b3b6dfa80ca3bb22c7aab07fe14a3fea5f0aee17ab1302338eeac010a04e505e20096a95f3347dc2b4510f62d6a4c1fae6b36939503a6ac22780a62d72f2fc3849d4ef21267fffdef23196d88fbb9b +TAG = 7fa630c9bcb455e89f13d7a99d5e8dbe + +KEY = bd68ff5eb296c71cfe6bc903c14907f7726bcb1331f0c75f7801cd1b7948f3a1 +NONCE = 0000000065a748004b352ba6 +IN = 52bf78c00f6e5dca2fc60e2e9a52e827df97808e9cf727773860cafc89f4b64178a19b30b46ed813fe00c8f09b25a6a1b6e350d5b005122934a59bfbd5e6e0c635c84a5226c3f2f7dcf951560f18ac220453d583015fdb2e446c69c6e6fdecf2e595e04fab1b0c506e3c6bd5e4414a35f15021e97f447aa334f54a8f1ef942dec6273511b5668b696fca97188ff15ed84b2f46145cce031c1a7f00bd88bb83d90797edc46161b3fda7a2299173496d73b812139556e8b4eb318078b9eb2ae5046e83b79dd3d45950 +AD = 5557b08a5010cbc9f46bb140c2505f68684eb24889324bff44b27234fd7a95a99cfb4ff90a8f9982085b725f78ac42eca6ce7f3314e457dc41f404008681a9d29ba765660de2e05bb679d65b81f5e797d8417b94eb9aabbd0576b5c57f86eae25f6050a7918e4c8021a85b47f7a83b4c8446898441c5cc4e0229776ef3e809cb085d71f3c75ec03378730cb066150f07e60f96aec983c0e7e72bf6bf87ae42228dfda195f97855fcdf4e6d1c4479d978abcfa276d16ed60ecbfbfc664041335ce65a40a2ca3424df +CT = a5c8cf42287d4760fca755e2111817b981c47e85b0047de270ec301ca5f7b3679f4749210892b6ea6568f3a6a4344734a0efc0120ffedecf212d55cbcbb67815ac964875af45f735b70092a8f8435f52fc01b981ae971d486026fb69a9c3927acfe1f2eab0340ae95f8dbee41b2548e400805ece191db5fd1f0804053f1dbfaf7f8d6fded3874cb92d99a2729d3faaa60522060cf0b8101b463b3eb35b380fcddb6406c027d73fe701a5090c8dd531c203ce979e26b9ced3431e2b726a7244a20d9377bd62951bf5 +TAG = 82c6194de4d27aac4c54b023b9831634 + +KEY = 934fd043c32d16a88fad01c3506469b077cb79d258b5664fa55ad8521afdcaa2 +NONCE = 00000000c7091f6afbbeb360 +IN = 2bdd1fc4f011ef97ea52ec643819941c7e0fb39023c2f3c7683804a0ddee14a5d1784a5246966d533b3538edc7d8742d27061c3cab88df0318ab242102de3a54d03632eeb871b72c7e8f8065b49f4a91e95e15f3f46b29fd76b8fcea0d23570c5530e3bbb8a6aafa9ae32c1b3eac653c5ed5fdb2da5a986075808f6385870c85b1913e26042a9d8e78f5bc2ea6de5a64f8aeafa22adcffc7f6932d543c29bb3a04614783f948680e433a71573568d2ce984d249fb4fc06a9f358c76aa3e64a357f4eae924c1356bd5baccf7e0f +AD = f737dd85638eb324dd3891219c5eef7c2dd053cfd055d447a411eba304a4b27dce981d112c4540590933c153d603022c91ebd2b4a58069d27e6ca17a462ef822ca41bffa80b43a68b1b564644cb3c5a7f0fddf7a13a30ff24437fddd8ef93c6f6f205d054f81890d982bd4d4ece0b1563677e843fe48c1f54e9a57ed4da66061482712e710a401073be5080d5b8b96525bffa67de5af31d50385fbbf1a87c21bf0e0a1fdff69ec32c7b7103e0b8ee6c844245e0fc84b9f89fcce62966cea68e2871d3b82e8df424c76309fc88d +CT = dd13fbf22c8d18354d774bcd18f7eb814e9b528e9e424abc4e3f2463195e8018576565d16ab48845d11c9277f2865ebb4dc412fd5b27078f8325eadf971e6944c66542e34d9dda971e2aba70dbd3e94a1e638d521477a027776b52acf90520ca229ebc760b73128879475d1cbe1f70fc598b549cd92d8a9ac6833e500c138c56474db84cb3d70b7aa4f293a4c2b4d818b0ff9fd85918dc590a12a8c0e375c4d98b7fc87596547eb960676aad5559834588f00f251a9d53f95c47af4df3c4299175d5211779c148cfc988a5e9d9 +TAG = aeb0a4eb29886f0a7a12ec0516bd4af5 + +KEY = f9f6eb9ad736a8f66e7459fef5ec2890188dc26baf34a95f6f0384e79f5c6559 +NONCE = 000000007858dfc084fe4b0f +IN = a644ca6e7cc076e87eb2929fd257693fce0f6fb64fd632f7f07c648ebd03696c8e262e6a810d7b7c4e5eef8c65b5323c99dbba50a70b4a9e5c2a9e7315973cd67f35d8052ce9a85a206416dd3031929f4f929b13d0a5fb10cb73c65f6c0ace019da146b51c5274a099f44e3669d26add6f2ff081e886f3cf952fe0dbbe6b0534c23e307574bd35fbd657f5fcbd5dc19fb382a1dc0a2dc8285a0350f71554e4c601497749e35567dd4a273cddc9a48ce53a5f1d297fd8baf8d1b9feb35d9151114345abada4d90db947bb9a743c175f5653d1 +AD = 2048d1c2ddfb5ec385b201832c7a993f229ba72ec16d6ebf723ef0c5032b9966209a9e8a63151b40412e96b82f86728ea6588c7e8e11ac71cc8eabab8c4b54de866658d9c5011def61fb3dbe4e630158a45ea41a2ed55ebd1efb1abeda7637de6fa5fd2f151c6d2f385bf6cd002ca8b4a2896e0d65944ee913e3c784669dd201b1985ef3577f7f123a5f9bcffa176c8f557c4f729133cac518642f27d9b22ca9b97faaafe5b669a10b79ace4a7d5727df146c77ce681357d69f9c2d65b4401bd73cd113387e3b3a05d897adad7a24c485e7b +CT = 4146faffd7313f5d9f625370d20413cc62ab65f4acfa3c7ee1125b937dd7a39f638fc46c8ed004fb525698de5d8620ec153435571817c3de257b0d0e648ebb92940c86a98262d54e764f28cbdd4f7d9bea970291f2110414f62064d7229c6332236c507b3dac742e651d85a2a22fb243c0cc7cc2d016e5bea38f33f9a9ce048944a5fe8b078d71d23168e12dfe5a0f0b829771edc7073fb96032b7be471337a37aca0cf7c0cdd543eed686cd34934717fd79a3f18492eef72f9f450b880aa7e2e1b65e3b04c22e72301338b43aa32ceec2e6 +TAG = 61c6d4d6918b04fc1b72a7a0e9a3b799 + +KEY = 29b19636cdd32507fd98ec4ee26caab1a917646fb8f05b0dc01728a9f4a127f0 +NONCE = 0000000006699d245916686d +IN = 5fdf913aceab1d6dbaf7d9a29352fa8a3eb22718043a79cffa2fe8c35c820aec7c07644b8785dcf7a433b4189abb257fb12b06fae0662641011a069873c3e3c5ccc78e7358184a62c2005c44b8a92254958eb5ff460d73cd80284d6daba22c3faba046c5426fe8b7cacec64b235a8f8d3e2641e5bc378830594bcfb27c177aea745951ee5780a63705727ef42c4ad3abf556d88e3830f3db6b09e93edd09485cbf907f79de61f8dc5cb5fb7665ffa0ef53cb48702f6a81d8ad421cef20c1dbdf402b8fafed56a5361b2f93f914a2380fdd0557faf1f4de +AD = 39116c49cc13adb065b92cb7635f73d5f6bf6b5ccbf72a3f65a5df6bd4a661105015358d9e69f42e98aed795e8161282bc113058b7ef3b9e23fcd8eeab34a392e03f4d6329c112cb968385ec52a7afc98bb8695785af6b27b700973cc952630b7247ce226b4fbb99b8a486370bf6345d4516c52c64e33f407c4f2d1ba90545c88732d98bbd97972ac5e94c694624a9b3782b0099824651cb7567914d25b3e13181a791dbcd40e76e836b3350d310a52151bf835d3c357c9871482c2928e8404c6e533406d4d6fa8f63366f2c4ed828141f1ff00f01a536 +CT = 01e237220b619054a1f3670928fe67d40484b5af40fbd04d032500aac5acaa3b4584dd99a58c390627636a50de5d744f76a56a33205f9e3b00e16162eb47ff3333e1e208ca200f1a5338a86e17bd92dd2d16af8bb022a7dc05b923d019e05247f1a0d0b4bfcfce58dd6d83830705707676d55739abee89fcd5cb94b8fde006a5da02df64b00a467f45970b5ca440f22319b9735a55d454b9fba0588fef0c59d3d83823eba6e0601a96e10233826c5adeea6b2a51d386a07a9e047ad405b23d4c3d89f30c31e3199f0c8f927bfac43ceea1f969de0a8c0f +TAG = b9fec6da464c7b85b2a4726694562fe9 + +KEY = bae06b9b5456707551c7b0e207aae02a19b4848ad8ca4ce40705bf8c856a6e52 +NONCE = 000000009c27065c3ef2d522 +IN = 50cdd88137ff428a88e87b5845be4924f6387537bb5c0b654c80107ab5698db75b2e131848e7aec156d31aed0766d31c379fece4095d38264c6d5945974d25f729c3b0ba11ea853e9cebdb6f03bb670fce08adff74d0a8f02d633fb34e0fb7337a8e66e1c12084d914fb6173b8105684db822752c6751a372bb16690284d661b8b8bc6a6dfbddf45ebc2219596f9f2f878c118df69030de38b4d99dde43b9b9e20a3dab691645dd518342f49b06a0fe0a397adf261e99f07af5b0b3798b1022ba0939c42a54d3b93641cffa3c2e174bce9ab7ad7e7c7924308d1a77a +AD = 5d5590db1bd316eb7a0e30e4c7a6dfdbef9d3287fdb8d824389599c3c2ee262b2192eb5b9708e66e22dbc7eca83fa1a995da3ce64c86fe5aa08b826d476dc439497e2d12e2702c63c8d27aa7f09fedee816dc8bffe1351d53271a34d4292b613b7efcedb7e3cf3e6ad389eef12471e9e20e38e7ae22a323abbadfe8f2e84271bffb1819feb4f77b82843cb8757cfae293631bc6d39669107e7015c85d7343ffa6fc1bbe6f5ab4de30cd752a281e03061ea89de2a3f5e90e20da22fd6e8525c100738667f42212b2cf45fcb23bbb54b21c117484b22c6e514685314df +CT = 66b7f69ac49fab4e5975aeb6fa9287d8eac02ac312c4de78f77f59da16cbcf87274e66801c4b862c33ea79cdc76528862bb2956c06db8b8acfac4794ebf39e35ac03cc73a4351a4ff762f681a48d6f25cad36e2814c9b5c40b9ae92509e58429106847789454d376836936bebc7a80e6c66e7aa52936d6b361378a41f849ad4e48f9ee2d3e92217a908fa8eb35736ac8ada7d32ae05391f2d807be3512543c36138a5fe660dd4cd4cd184bb43b6ba6bc0bae634e2fa9669304cd510ed5103f630068ff76d3375738de60a381842b421477e25a490cdd6894b2704125 +TAG = 94118ccc68de1921d480aab43d1ef0d1 + +KEY = 2cb374cb048c168f2e43597f028d9e73cade1b458284ffc260d4fc6b9011c414 +NONCE = 000000009fb909169bc9f4e9 +IN = 39eb929482784b463546f5d84f80510f2019923d465b99d194246d68c7ae343f91971d8f7059cebb86aa5dd099289aa648248b8c5ca04e66ac5e9bf06776e3883495397618a0227f035666806e636836b47d3d2d255a49db79866cf00d9ddabda259c4f968a1e01e651c7811cebbee2ee71803ea1d9d23487eb221f2d9555756800aba5e6abbefd6fb72b3151cc99ced599cd86df2a9b1ce94f89f347eeb124d9e7f0d9cc48d3dedd819e6d3dbac57ecee199547b266116a2035c9acc4c8ca3271ac74952372897c4a5f2cb84e2d81817fec9d6774f6d8a5b2021684132db4fca3 +AD = 0c7bd4f3a30ee944ccf9489181e6911684dcffad4593a9b65a67dfc80718c69b35897d01281016b7731e12c15cad8482e79458e08a755622e3f3f22a23ef6c8487a36ad1771ba06c641f06f85de0db3776cc6df06ad8fe3b4d60d58508de943083f17cbb9dc0d390ac94d8429e8c6fcfe063f424fbde0f62f6a7f91a626d195dc498a6e69bd93109c4e9ba13e7330aba456d710a4b0cc279d4045660406e26d61dff70d4a33c4f1052869f9248024e7a0f85f1effb32f6f7ccb1f860f3ef04e8f7b29096e6bcf9d4b3e0ce703e9bf228fdf515c2ff9cbabd16987be0f9babd3d8a +CT = 91ddadb86b7ebef798ddaa59da51d71316fcf6c9678143178227d778750dc9827fc6cc21e605c505023e6db25849df7fb6fc1ca4d223aa215f8c85b724643c83bf8218815a9f9e2952384e0ca6a80a3760b39daf91a3c6154c4728c2371fd181fa3764753d0b0c23808a82cd8f0497246e3a0f17f8906a07c725d2891ce968a9d432c2b102d85c05510b28e715bb60d0403a77490e7f18be81218bc4f39287b9bb09f50227dd2f55e4fb70c4438da8ba3c8ffbced87d90155913faa9979fc57e6cbeddfaba3d3ab4163c0eebc7d94279c27d3ed56338893dba542eaefba30f8c3b +TAG = 8980e8e4fe796428b733f4f8e1954a45 + +KEY = f0f16b6f12b3840bbd1c4a6a0811eef237f1521b45de9986daec9f28fca6485c +NONCE = 000000007ac93e754e290323 +IN = 0530556424d823f90a7f1c524c4baa706aad2807e289e9479301e3e7a71f2a5e14e6232ea785f339c669af2e6d25f1d5a261096a548d23864945c3a589b67b09b0304a784d61b42b2419139485242e0d51fcbe9e8fed996d214de8717e6a71f8987ccad65eb92e66707034a5ae38e6486e26eb4374c565aad5df949dab209f7f7bcd8eb6fc52761a26cfe5d01fd349e59f4042e6dbe6b232f9301b971dee121d8aa1e62d40f043a42f3aa859d867eb809b1ced5ae1ec62cacf94a69fafd0631a8b5dfd66d855900fb295eec90ae5fcbf77beae267a79d24081bb322d8c4e0630fed252541b36 +AD = 13bfcc17b810099cda31ca53a1323db9b07633ceb2088a42263a4cbd6a4d47978776005c9a20203319c3a3ae434e9a26fb541047dc9df38dc36c095267272e203d0b24d119a70a7e96041b6d82b7c4d5570e1e4a1cf2f6e44ae63fe005a1f5b900778c482f7bd89e2e02305e35b8f61b7bb2c78a13aebfce0145d1c5aa0bf1d10d23616d5a3a446de550302f56f81dc56fe4f3700f14242688d9b92d8a427979b403c8de8c493a2cde510eaf6b285e6675b173aa0314a386b635c7577d5aff0d868a0cb3f73c8d2005f8c7c9dab5a060ef80102c9d4a4af988838afe87aff04c0689e8c3c7f9 +CT = 2c14c3931e98e84507c4c165c2ed47ad4a178f0e216cd7ac2453bbbf9f85dd06bd8ef54a9ff1fd3dd8e0cafb635d8f2de861a0db5b14d03f17aaea8c89b3010797c71c13a0e666899d7ff6e53c4f08be8ddb3e37688b5afa088079b6c7519b833e16560073e699530302028a3496e05edddec01a23a4c7983956250e8d9e616f7b940856955cde81c1efabf6b7b92f153d03f4cd17e7f7d2907670cfc84d45c1d7936775a3fce47968504278ffaecacea0871b227f250e2979516f6fa310fec0d8df1af7872e5a534e82870aa05f43ef0a455846b93ce938064fa33e92de262e4156dae56775 +TAG = 16c972829819b8fb030b2c5f40dab717 + +KEY = 3792943c0396f1840496917ce8ad89608385007e796febeea3805f3f4cbeccf7 +NONCE = 0000000023b2f9068b2c4c85 +IN = be6b67eb943ee7b5c785cd882f653e73a8f75b4a41a2a7c56ae5a10f729caf39948fe48ad0e51240e2e7aa43193c7ec6ce7f4909fc94c9f99e38e6a0ad7e98eb29c5c2e61c99e9cbe890f154185cec213a74725d23c1a4e4d0cb9b1a36b78c87e5eee20d2aa29aae80d4759eb0c51c5dc3a95bdbbf7e14eb434419a6c88a954ac03d0c98739f4211b8732acd71c297f578b8cb64ccac45f7235ddc7f2a3f5f997525c1ed39dc550126cdf9cedaf55425489085e91b170be6205a5a395f2dd4084a3e8dbc4fd8b13252f7effae067b571cb94a1e54aba45b1b9841308db0cc75b03cfce4ddafe89ce20f2d1 +AD = 7eb6d7b7bbaaa3c202a4f0f1de2263767169eb4a64853240d48c0f8d5d31b08d5baf42977614a57aad99426cde76d242cb37d2956d8c77dc4fd62a3abf30e8ac6cd58c8ef35e67497022960138c57787818892460f3bfc16e37ff388b1edc6ce2bc53c22717edc7a03d4c78b0dbbe9121c7fd8a3e3993b87a4fe389bff13bdae3b349de0b6db561602c53f746022aeb4483c723b67825042f4af20b7dd1e6031cf54215266295c524ac8e1370424c5c5e607fb3e23e97c8eebe64656775edf616422a8b974e1acf13ab45c9a367a7dd9b2d62f48bbc05819b65eccb813ca813f57b22ee4c280dbb5a9d8d5 +CT = 0b316ab2bcf5359900fa4082d5d253b49ad94b70e3fab544f98bd111cbcef6766cf953deec08cae1f489fe12f7acc0032db8a6b0c0eee0c206ea5fb973feaebf90f690e840094db5e13fdd7157ba127368c995b426529435a1bcdd1f14ce9125b8a0e4c96b6ec09e3c36a180adf81941c002d19c19d53c2009be803b987504606b7d43bdee5e0b32ff23c466b6cccfcd0d4e88fd1332e73712b5ab725c1a383e584f34f80daff29d285ae5e43cf1d0cc7a828e75c25daced3a581a93d7a50f313b33f38dddfaa23cd5b9914797db820ee2400d52bf5fa982277fe9b5881ac42981633b3957b0e935051828 +TAG = c549aa944d6d97e52e0793ed572682c0 + +KEY = fe4be6054773f634356ac328591fbc6f833b0d1beeb38dd5b6feb7481b4489d4 +NONCE = 000000000b3f16f898a5a7d5 +IN = 76ced1ade6d1ef4069afddb32e7432d4ff2fd06685121f7b16464e7a72d365744f547d2ccf53486310e38b42d8bacaf711e54c5458d2d68c4dbcc8de31ab6732f4430e88a64565f5b287640775aaa2af1cc461d3e415bb275c6246b1b58517aa72667eae291a2982eda175d1b22c5a58e6fec2b3743d55712f201ca24ba5c0ae8c25724871b2ec2fb914a8da5a52670ab9b43a83b8568ce74db5c634061cb80530c8070c38b8f48c33ba136cb9f2158ee7eda8b65f2192fc94d1291f182f101795b7190c74b319d2d3e02a97c824d9c9471a83797e4936310b207e3a1e0bcf75f7c3e3ee48a747641cdc4377f2d55082 +AD = 834cd775cbefe4b33a3ca53a00c06a3c4a666983e4115a029f15729460daa45d1505e95172d3695625a186b28b8be173a925af04665f209267b3c5123e8be13da447ee1ae856bb0925f35aaa76e04a7bca8460f76c2024de2149f38a8cfba81694b854885d72568105571b6b213a0bc188a44cc7fe13153cbf261401b238cf12a95e23cb56f240114f16e2f1e3a514615aab4449c0c49e4d900b0e17d1a8dabb53d43dca32fa052d576b73dd9b40856b515d6d7efc2a5c17e0ebcb17bd59dc86f22ce909301a2652f134e82ef0e4519487ed12d51536024f2ae8f75d937c42d003076e5dea8de0c684cda1f34253d8fc +CT = f8defb6fe95dfec499b909996a1f75a198a90e4d6c6464d00a357a555311c42fe92dbbc4b79c935e4f0b1a95e44fdbc1380bebabca28db4dd0d2870daaafc38ef27908c3509e945714801cc51f1a07b2430c74fa64f2a7c2f7fd1551d258c9c3be020873fc1bf19f33ab6c660911dcf2317195d0efee82d20ec26d22611f9cf86c51a64e28b3a1f344500018e0855c88dae3c07acaeaa10b60388484dce93e16e6e1a6e69e899806648a92568c8780e9f4baacd98cbb353ac2f908e775d92303cfab843f15be0e0c322a958802fb1a60fcc7631f151f4c2b8cb965d2d296acef250275a2fecc0cea803ce7c058b12dd2 +TAG = baf9a51180f172e5c0cc2c946ce55055 + +KEY = a288b11ce5382ec724ce4ab2d7efa8e777e91ebd04367935e15f9dac483e9596 +NONCE = 00000000874144dbf648b325 +IN = 4c9195280a79a509919af4947e9e07231695fd7c5088539f23936ce88770ce07d9ad3ae4a463b3a57d0634d3a77ceaadf347a334682b04be8e58b8e86fb94a1f93255132b8cdb0df86f5bea354eea4e8315fea83e3fdf6e58aa9f26e93caa08e5e2551a94bd916a51fed29ec16f66800cda6a0aa24ec308bf5fb885afba272685de27c1edcdd3668048ef07b06e90d464a8aa28664903cac45e154e8e1e39c257e1ff506b9d95cef4f300bb73b899e7828602c3c1d290b8cf55ee5fd72ecce9e6efc9293aebf674a70e2a7673e75629c12950622dff71d3ec0992e57776c788c6927d30b4e24b749191c3ce8017f0ada6276e43720 +AD = 04abe8588c8c8c39a182092e5e7840442bd1c1149da102c4ee412bd8b82baa5087ef7291b5cd077c177c42770b0023e0e462b06e7553f191bcb0315a34918dcdbffe2b99c3e011b4220cc1775debcc0db55fa60df9b52234f3d3fa9606508badc26f30b47cdb4f1c0f4708d417b6853e66c2f1f67f6200daf760ceb64ffc43db27f057ad3ee973e31d7e5d5deb050315c1c687980c0c148ee1a492d47acfcd6132334176c11258c89b19ba02e6acc55d852f87b6a2169ed34a6147caa60906ac8c0813c0f05522af7b7f0faddb4bc297405e28ecf5a0f6aac6258422d29cfe250d61402840f3c27d0ce39b3e2d5f1e520541d2965e +CT = 0afce770a12f15d67ac104ba0640aab95922390607473cbda71321156a5559906be933fb0980da56f27e89796eaa1054f5aacf1668d9f273cc69071b9e8e22af6a205a6a88f7ad918e22f616bddbb07c78913c7e056e769e6fcf91c7600c2740212e3a176e4110cac9e361a59a773457064d2dc652dd115d04f1c3756c0e1d39f6737a16b4508663e310934c49c58058b3c7b9af7bb2334c8a163608c42499658986927cda365e2aead3ac29de16e47e954383ea566f8fb245a4e5a934c767bb3bf7e0eb8a477fd0e1f61bcb238462a0d19c5cea9293ca58ade76829413216a7882cd2846323046694f78cd8b0347792ebb75abdc1 +TAG = eb9b2ee43e9a3ae1e33561800169d868 + +KEY = 65b63ed53750c88c508c44881ae59e6fff69c66288f3c14cfec503391262cafc +NONCE = 000000007f5e560a1de434ba +IN = 845ef27b6615fb699d37971db6b597930a7ef1e6f90054791eb04ddfe7252b5f88fd60eba5af469bc09661c0987a496fa540621afeec51bebda786826800943d977039dee76235248112ff8b743f25ed5f3cb0d3307f5e118d84fdbb9c3f5531bc177fb84549c994ea4496c65e5249da987dd755d46dc1788f582410266a10f291c1474f732183a2a39afe603771bb9c423fe3e8906f2be44a0c9a7c3f0ceb09d1d0f92d942383a875c0567c7869f045e56dd1a4d6e90c58d44fe0c5760bb4fd01de55439db52b56831e5a26a47de14249453a4f8e7da3cb3282c6622916197ebfaad85dd65c61e7d2d3ba626276366746f396394c1bf75f51ce +AD = 51a3588398808e1d6a98505c6e5601ae2a2766f1f28f8f69d1ccbcad18038c157b41525be58ae4527a073748b7a04809e52a5df0c7988417607738e63d7ead47db795a346b04e740186e73ccad79f725b58ee22dc6e30d1f0a218eda1791e2229b253d4ab2b963a43e12318c8b0785c20fca3abcf220c08745d9f9602f0ece544a05736d76b12d249699c9e3e99f3f13cf4e5dc13a04125c949a5b30d034b23cb364c8781964bc6c30e5e5ca9673d517ef5f35965d8a8cf1be017e343df97b6bee37b30638b154286d1f36d2f9a0eaa23cc484eac5a05b15d9efc537d989dbc8b3106c0dc1a56e97e6aec2eff54a82cf7ae9df2af46b4c860f83 +CT = 027b14197b4012256b133b78ddc94e72fb4d724fefa4ae329f5a5fa3fa784fe6d7e1e805e3f7a75557de64de506d38237b467fa577efb59e7cfe2356bed6655c5aa4e238dcfeb75c16549a0917268768a96acb5e20546a1fb7e3a7cff887f49f2cd7a135f72a98a779150f3207bf733e88861fd79eadbf77fa3bfe97bfe8b6a991cb3bcc2cde8287f7e89384846561934b0f3e05e0646e0e1907770df67a7594161a4d0763faa6fa844080932159999d528ee0558710058ce16f97d13ac9fd9bf5044191188bbfb598d0fafbdf790b61ce0781ecc04218a30ded45efd498cc9ba03562ed2b4a993ee98876b3ab7a9bc07829f1c4ca6ead98c06b +TAG = e0bf9b6837428843f5a233ee5ddb8a1e + +KEY = 4986fd62d6cb86b2eaf219174bec681bebcdef86c8be291f27d3e5dc69e2feba +NONCE = 00000000d08d486620ed2e84 +IN = 3a22ad5de387db4fdd5d62a1b728c23a8dddc50b1e89f54f6198b90499f9da3122ebeb38ebf5fdfe30309734f79aff01e3de1e196b35bffa33bae451f31f74b8aec03763f9e0861a34fe5db0b40c76e57c7fc582bfa19c94ee25b5e168270f379bf9f8a0a18bed05de256f8f0dd7c23ba2ff1c7f721409462f04cc611ad9bd4c3c9acf30742acfb9518a6375cbb15d65a1bc6993ea434894f93d4f6e05996ebc1bd56579296309a2c6b8fde95072168b5fd31927c4c0abaa056bcd16221d5f220be47591f43255013a262dce439817f534830ba82155347e5fe3101f8011b89365a6568214ed0661914e8cb3431d6c8f2347dfc1209a3eca4aaf0a111f47fe +AD = 7dd3f656a03c001b45ca0680bc3ac9d68c6e96b591d3c69eb8c65e489009d845cb331c98b82e627e06d5bf01e74c573df268c2386f12628c019951d42f55991ff20d72a7b2c45f41d0be7af428c92f324aaab8df70d900301cdf09a3d93eb711c919d34a86fff9cb078322ee2e0ad48dbdf3b7884f0f2dc5c36262c59bcfd75ac6200f59c6fcd0ce10ff5005fef5df8f0432377dfbfc1db8f559e27e1aeef3380ea3864867d36a25a18654779a751586cad3b8a46b90864ee697b08605673b8d2123433c020a21c4db243dde2420c12fd4d54a2704a0c8c376454a1b5e80fd6db89aabd56d9b421f29649e474824dfa56cb5c673c504d10be52b53751709fe +CT = c40180afd53001663ff4834110f56e6b0f178cd3c0e7f7de5d0089ee41d8403ffb98e84922706544a344d7e2625b12cf66b9c966f9f57d7b94e3e4b34e6f0aaed1763ce012782e2f5e1682e6c343fc7961fedddd0919d0b910e9923c17e36406979b256b85aec24ee352f03b48c1302eab419c83dccc5372cc059e9de596224fa70098eb32fc9579e97917b923914fa2efc30ab29b457bf14e45583b3771486bdc0876f3ea6e1a646746c4f8c5cb2641a1557c8473e6ea67d4811a67485ae9a678ff3a2408ca845c3b51957e189eef47dfc1d46bde4b9d754d7df13f828ddadb06e4ebddb5f0dafbdb28de4c5e6078926f20cdf9e97ecd58e309e640f74f06 +TAG = 2e8eb9ff4467c0f61c2abf6ca10893ef + +KEY = 7d28a60810e43d3dfa32e97c07957ec069fc80cc6a50061830aa29b3aa777dfc +NONCE = 0000000047738ac8f10f2c3a +IN = b50278ae0f0fa2f918bb9a5ed3a0797c328e452974d33cbf26a1e213aa20c03d0d89490869754abf84dbbe231d7bccdced77d53fd4527356d8e02b681fc89a535ae87308bf7fbc26197a5ea85bdb3aa033b8da5cd197ea6d72f96f63b03f4ecc7adedf399a5043776cdb32c08f30b77f34df85f8adb8e02649a04b020b03e17d445ca63e4ed73ae432c481392e031eba2f9d2f7f981d1e50917822bd6ff71c239d33444ada3523a59dfbce5457eadec1ab926c9e6c5299c7521e3f204b96901a712504fcc782e8cea80ba12a7f7e71cec3d0871899b6ca059061da037715f7d13fed01c9cade1e687b4fbb1f4ac4b040db3b43800f112fb900e4f772d61b921cbce4da6f +AD = 324292813b7df15bc070cc5d8a4bf74ead036430be63abc43304cf653959a24a91c7de5a671c50fa8a87e21bb82b069999aadfb6895d8bda4c3083d17b8ca55b9ab1511ed8c4b39d8c28c11a22ef90c08a983e3fe2d988df9e02b16a20b24f39ddb28429625f511db08298c4dc321f6c268fc836a6191df6232f51c463a397a8d8b33374abe94e62c0f5c322387e1fc4a1c1980a04a1a3c2c31b32f183a11c3268c6dca521149dc16af120a78be6627210e8ddbc44472bc24d66ce3681c7579b3d9a425212a704a4f5105cb80f0d18ee860953d10b59c114826779bbc368d7a0eece9f223e47cd8e5fd453607d101d9d9c2bd9a658d6520b87d7b4263f6d845a524a36e4 +CT = 2c217e969c04740a1acfa30117eb5b32dc573df3354f4cc3bf8f696ff905f1e640f3b2c250473b376622e0c9bda13b94640521be1ef0fc660b4c10dbe2bfc093030753e04f6aaecf813b43b61f960455974b8bb8a9b461d1e8fd3802315e863c00448f24dd38deb90e135493274eb14ccbde15c50dcad734ed815a806be6622492a84cd062e3ba567b909a205a1d0d2bedd40169697d261c7b6c2e0b1f069853fd470e8f364a142c386c439a6dbe192ded5a3d0fbf73799f588c59e58c60249d980ddcf0d9693631cd9b3f972509c3a77123d38d9e267ecad06e1208e3f1c0a69fbca7c3bb1a48fda19493d0f8f48398820057b94120f3ef97d87e9e8a1b301a2534c68f +TAG = ce507bdb0c71f8e89f5078495f7995b8 + +KEY = a76e9b916f5a67b78a5949651c8c3a9741a1bc3c41cdf85fd2c8f3e9a0616098 +NONCE = 000000000808da8292dc14e0 +IN = 9c149eeb09345c3c22462b03e49eb4dba6bc98b269b1086d752bcd8eea53b8977b238a04a994baf915591686baab90b79a3bf7d9adb2c6c2e31acd3e72f0813fb745aa5fb2e3da408f78001c9c09bd26a1a2646011b6120aaa2bbacc4a16c39fb5257b9b2ea2ad8bf70bcc9855cf11841116c2767310cf3cd49d1aa44cd505f079761e064d5bc7cea4a7173b086882a77d3fc179efc86fc4db8a373491d2ed81eabc63c950e832db17d09f474d4ec46bde47830caf26fabaa0372b81fccc449c0e19ccd630caf693a7b43bb1c408a54e03f50c44280a05ad89fb6e8f01d8ac278edf556e5d86ceb4b614fb2ef133819c6e1ff6abb86c54a135256204b5cd400b93624d3932e7c2b046 +AD = 6aeb7031e4a2e23eea93f05fdc562aa2bf43b8998bea7344377aaddc60fbdb7bcb1491d379ed0cb613ee757cfb66490db61bb431d2fad34b38ddd55bc5b22aa6c4773b9992f34b878c5663f6e8cdb5f80a17f4d312bf342492e48d1ce4c6d754076a634fece61500acf8168d47381af4faf980c6cac2bfd5da8c09b6edb0f543bf0fe02643e38d73fa37d8ae87fb66193f22e57faf4393c007d48c8631a685d520578f8f89db684fb371ea02f3a58b1e2168f0216321139472e0d03b6d90ba8aab65402e1c1ac4f9172a60e27e3d997b9b05e2f672120d6c87bcafa6d4c9b4cf8ba8a82932d92840368fc53dc5b48526103dcab5f1531038aabe89171327ac559b98a3cf4ea70bf051 +CT = 9c3faab9261a63cea9477b3269007283995b06ba77ef83d9e693f7e4ee9855550eef94855be39a7a435b6a3584b202973777c7b2482376ba47b49311947a64983b60236756ee4455d4cfada8c36af8eb06b06ba2f6b79ffb1185c89f2b2a831cfaa3855fc1841d8910908be5078352011168a67d36372d851a3217cabf593ea462dcd325cf9a4f67e85418fd5c924e9b92ab026cbee4e7ab1067066cb5949dfc699a68fe539e1abb13cec33904e5207e6963d24f5a0b770613b8b00014e791bfff88f9c25ca126127a2f8d1d1e9794efd28dce98b53e228073faae8d5047530d502184fc341321c3f55fcbf41187fc31262c325b97f519959b6a29b36c71f76f60196bb1457b77c8bb +TAG = 73b00b1705602479aab944dcc1b282a2 + +KEY = 98cd2477a7a072c69f375b88d09ed9d7b9c3df3f87e36ce621726f76e3b41a1d +NONCE = 0000000077d185aaf715aa48 +IN = 42b31eefdacab0f03ef6060156000c8195adb0976cabbe1a42bfcc09f85659c60b98638401f2d2e2facfb9a97a62926bb0cecaf3af0180a01bfb6e576babf7fc43331937a92abd30cddfa3e450f895e9dd914dea3fafd759c136d685310ebce28ac0613ccdbf30115946c9634b67510b77d0e37f07714b2ddac9d7095b8d4bd887c132c4a9127eb01c8dedb4c39c87b98a741316656f9a8d5a5b0c0ac84789aa2347a5f99ca5ad55cd1bcf98f703eb4b00badb8a8555f38b3b368db8ba7ceea94e8b219f51edce75d84166b5602156ed5962a93a51db73c59d87e906179d7a74a2a2a69d8ad99f323225c87e475d3f771b4a203a2e2b03b458401044649fa6536dfab24d7037807dcbf6518e6578 +AD = f5bb1496052a4361dddf72a288e36953a3d815d6876c013f1d6ba839e127f721b052b1f7d8ca20c7dc0386a7d459ebd7eb9fc8cb08941e6ca9ddb980f3115f65bc1928a414d441ae71dcb879d5bfe0cde0562bc37f8fde0d5291ad405c92fcbb860c43b55ac0fe663b54b3d0616aca13a5c82b7b5d34125a05c2acb5530141030e6f2aa0c8322b2c8fa307e7518918e550e9f48921c6168f094d8758e16b9f815fd0458095c4143f0922adb1840d0e685636825a9c90ee90ee537f4b8dceecbc4287c82dc9a00d7e51671e37ea284ee3ca501b1b2596459d3f592f70186f41125739e342c9f6be9241973b1414dfe5fb8cba1af82e679278cfcf95420df0c5364af4d7e72ad57d5c871fcbc35462 +CT = 7a3bf3e3ad5ae3ab71fb1f7121c3d8fb511099484b50af7ca128ee0337ed4b828dc4cde0b88dc1e8089101fa82c9beb3eb48fdcf0f5b16da441f5a3fce9a590022af95a94aed6a3e71e505f60f303c78c356f274ea85a55354078530664ecda32c80e77dc20974b3b38f4825b8fbee8c3970769a2f42c5181608a8d7d76ef4d093961b665ee42b9708fcafe2c82d3a307173e2a25ad2528c3bf83352b9265e45b70722d7cf8c9b80826d21335234ee3db69d0d37871c83222365900c96c17a7e9f5742d0bfe383be24d0d44590d4b0f29f7abe0c65daaffb968b3f2657b1eb300534eacb52ec7a6b6f9f57a50a91b1799f491361cf613c934b7f520dc4eeeb40ffc45e10be0a95e76f366d4eac14 +TAG = 69302888812eea030d621b640e7bcf7c + +KEY = 2f0f4631ab1c1bcf8f3ad0559c818d50e0af7d8cd63faa357f2069f30881d9cb +NONCE = 000000007d0ced2fdb1c9173 +IN = 6516ba1d29357144eebfa486d21decf223da3aa76ec29bbfcbe7f1eeaf4a847710e5080177f7e5a7c8b4752c219b1cc70aef4db861ba67d0fa6222d9f4a1dc756a0ba44e62906f9374a960c16198866d867854d88f528a60e212eb91645787e75685b2e215c0a41990abc344a77236ec0186ba63a664592938cc5a8ac1d3eb99c95ce00e19fbe249263083d85b052d48bfdffc01585dc57bb2a2c6c4a819604c1ec0548c6f0f78dc05e4418b36277dc07233c7532f9c289d6aed0cc6bc7df4fd0a536c497b982e2dad2c30d2db1c6545a845c5dfa83a4ac49ef06fc9c919079d3e299e31b5c3be370814ae5022ae469d3ee55246a41bd0dc4e64351cc38c3c09af0a1aee3b388a6892deff0df3f93cd92d722b +AD = 1ccfa1ececc8de1e200d0ecc19dcf67b7c96bea3a282c2bccba61035db5c14776387b8b8f58e5757deb0129d4e5e315f64df354a5985d2e47ebbbeafe0c914f7cf1d63dd0311ace19e69a8b6ff0ab25cc8df0408d22132205e89e5eb679268d82b2913e64e3f885bbf4a6d379b760b94590e3140dd7275ab4713cb56d0b716e2718f11316640cb394802862d39e77a46d0c065af3caf7dec14e887039d8aa8c3d3a8ac1ee06026f49d00b2f59d971b54735e95a51f199389a93a4fc24ebaba1f7a2eef7412f61febf79084fbf481afc6fb6b204084e5ef5df71f30506459dea074f11fc055cd2a8c0fc922c4811a849984352a56a15659b7d07a4cc90b88623638ea00c4c8bc13884df2237b359f2877aa41d6 +CT = e580093789ba17ffb46672dc326f09278aca08598d3e5458eaa53e6ed45d5c71a396e35b5ea3fe7b7c0496a734d24f1c75420694be2ff095d5172fd3407794e4b99fd7c374fbe8d1564a048614d3f355bfb5866de1a53e1a51f9f5e8312253cfd82f36efaa1898c850ca0d975ad1e8b0d9597a5a9e6516fe2a3c92efb7495557a8afc3da15b0d3e2ba58f612519836946cf2d15b898320d16a026c8c00a1be2e35f0ebe68f28d91c6c45d24c3f3c157cb132fa659b7794df883d90741fa2d2afcc4f27858e13ecd41b154a35d24947ae7361170060c107d8ecacb393ea67104b60457278a392fdf1794bab97d3b02b71a4eb015eaa38a4b4c944c2bc7cd5e329da4a1ab2937a6af81a6caa5fce752331fdefd4 +TAG = 19bbacfac768bb0ce71e39c5d4d3e9a0 + +KEY = a48b9b6df475e566aba7671fbd76772cb0eff0b12499967978ce3e25fac92feb +NONCE = 000000002ccbf0d6c40cb302 +IN = 09da1cacd001dce4f7573a065a4406fe0da04ab367a2d87780a2762e168957a88d3fa78f0a4b6978d449026e5a801d32884b6e14fdaaaf864214f928ebc03dead081fee96683ebb032362d5088c4c2a3b1e242f055f2604919f4dd551db777a258cf9da6d95a2bde249247812b9efc7985cf08707620808524d6dd3079b0b63bf0f71ea5de834ccb8b7c6a97125fd6ca49148e866d3134bbf1d8a6b714e9a80fe549c8bfefe342f41be2ba2300e0028f78cefab65274632dfdbe70bf7d655ec4036df561f2d4fc4d56a482bbe2f9f2ae279b3aa216b39afee75e53602de319484db89a51e844f38c361634e474f8f1f01c340f3f3594860d671346449c6d08ee38de22d246309bc7e4a252a29c86aa6d94b5b4fa58904c70 +AD = 1c2503d5aa1aad193f0da12874074ea0432bb76a61cd43a3017061514da0759846a0f3ae3a49fdb0b6d29f713de665beacb6568f2694112ca380d13f3c1698316866a7a7f87f1d7503a92176ab84fc08977b46ba664508a858e7525753c45511b3d2f407d5e993c6ede77f13d12975707e5195704970a89f71fc30828049f92f944f3aa93d6a5297e678e08952919beb7eac5919df1919cab3c3da6aa696a1eeab6371f310f7e81143e7d240b0213ae554524b52000306160dd4877bf13ba0f13bbe867da7c7d707f31335eef4cd942938ac890a0829ec66bd30ae01a2188a6e5ea0f17cd7dc875e17f03c0ab5dd18e36db8a1fc1f72859ee046b62368f168b3bea2234e0432c07b7d8e1b9277f21e692c513b9e816e6860 +CT = 7d35cfe4be56bd6e0e09dedcd01735b915bc1891a4d1f6a541abc4bcd0ebe89dcb8e365e5813742e8ec65777b6159422fada747da99394252baf8a046fc1b60ad79755f545f4448627b7acaf403000894f5641e78d3f946dfca29ec617f0660dcd6e8d8827e67e1022a245c595d86e60fbd176bf721b171bbe5ecaf4ae671b9f3dd3920146e6ad431bd8fc431820e19454b6ca209723d80fdbee187fca9c937c979206ae97be55f6ba7366a5608770a11d537396485eb0a66586385f4d4cf3905d1fc90831c3e136d5d513fa22be285193142994a3ed477145bacdcbdd791e8b3b88b0d4f1d18b27382550a818c4fd8884bf36f677c6c3ff5677406e510911e696af75e5b3f859bef699bdd16e6215fdb98d874025eada50 +TAG = 0fa4cb2bab84336409aa4349ab99a8bd + +KEY = 923d4b086b9e43b986f7b65e4cea6113a3d8aabefa89323c5e4d5b6f158bb7e0 +NONCE = 00000000a0f73297b87f5deb +IN = 21435e8d5c8edf0684f58c2cba4070c10b4801adf46b6c4d322eb3990a38a9ad338ad704b9df6597f3e68d66cd5b56290c8466db2231e56d6bcb9c44e1bd081f42ca2a894dad369df2bd0d2c63d6c881732d6ea22bb22b5bc9a62eaffa1b094d0845f6b966d2cb095e7b3b8bcbc15e707449d35c8df4aea30c3b7243e977fffd59c80f1c5c9af4bb5a54b9c786fbbe8d21b2b906a87a786caed841a34a3e0cc0ac3209d83c58afba19edd63622dd261532d2cfb0b49d527d8eaa0887a087f5129d897f665264b229f860363d71a88b7d49c8dc6360182b357b0662391bb41337f46010ac32b9fada2d60a2efcb99365d3b27b7ac396900d1c821d0df8b86cc9cc1f2673259a33efea610bf8e1d00d7e9db2afea21da8f58c55f799999d +AD = c853a8b39c0dc597d562f123cd221e4104b65423a062a4f4ba890ba344feb84290f61817e23330c365f58c3583ce08360d3c1171982ead5496d525ac878f23a57480a6ee39d4e65afd6268245bb982a2545fa1195427cdbbcd404cdad5198f55cce2a5a028fae435f71b15921d066e8d43766c32b2f2c3f57c0674e129607dcd3703eca529414adaee79d81fed432153cceb6f3fc53404810d8ec878f7d94be5d379d0e0e1aa9bc404b4b5d396038a9d76a5ce53c9f3759b8e50fb331858ca58cee81bfc3ee58baef5d19c402a3dc8b36370ec1ace5a4aa2527fb94b4f933a4ab8ccaaf6a5af5a779eae5667c2a24ab027e781c8d4f30c377aa5885a2fdaf6507d18cd824a847c35368b4ea984d2c3c3824a5b8ba3042e1852504a21a3 +CT = f2e21052eebbb86a4f5e803360855d8632aa727dca6f5e79dd74d7aff106e442001928d113005b030f8446f8eff2ee951db663978abe43090dd5ad2c51ba97a0ecf988c607d95e486d02524f690fa3c28d5c48c1f75c1f555e7b43fe7e46f2ca2b9fdb408ec4ba18b6cdde2af673183cb7b1a3c23ae77eddd4cac75e1ea14743fc571f8d31ce2e96787524cd48aadaa474181c096a032184574ddc25a6e0ac8441c212bc36298708e33c963ae931e6c6241d1affeef7b6ef759495df44b6ab647447693cf703569e69aa72f1def9a342b8978c1edea9703a421ca75b92cac4de14b88c693200022b8a2ed22b1c4678b99f4d695e080dd1196d7168e14f0d0f8ff880d742e97b9f6d00af1f7118e10b77c5ef3ea6c52f84a20fd6ea46dc +TAG = 9bd8b7743c056bb2334833afd6143e18 + +KEY = df73adab2768559ea983cce85453fe81d79be3b3c57f202b31b94d6635cf2e4b +NONCE = 00000000e7a87e6bf6b5a354 +IN = 0032a37abf661faa18c587fd2aa88885c061deeba81105dd221969bed5d59c7204b09b1a8c4c8de3b9f748c7fc70626ebeaca060233a57b102221b1bf0f3d9fdaaad3d2b1439c24d08f9c67f49f3c47128f92ee530abf4c4f4573bc60ae4b38109f55bca3ca9e1ba9f9fd6e34ba0d174892977a53356e1f5c88c614fe3ff3b3dd0818e7a2285412e3b37444bbe8a80942efcfd03958809a6966cda9430b2f0c9e552f4bced6e19eb3e85fc5758bd7b588297ccbed37ed94c3adc8c08ea8b058462aac9d57a939ec711bc4ecfec944d2b653b7cfc7b02a65d7057c9fdadd51b9da8cc4a3c68dae9da8b9c5319c1a2baa3d6c891c5ac4a39461484b5a01abc64df447ada24c04a4363e605eaccf339a9aa515e724206206da6d22bbd2f52e64cd7c895 +AD = f833e5ab4f8bc89167f80f576b1d6b22cdd0e30721f5f735799746cf645b6eff531d4c7b03584f3dfcb73cbd35ac42736216dc7f0de098a4f42c61ceb4b227ee288e47d697a0a76afc762f084e8fdbf9351c28340c324771c109a469341ab10ca10483ed2af5e878d7d3dc2bced2f72da3d1a25852b103ee9878e8158eb4309c1ce528f3a178ace153b6d3ae0af0d577cb3cb1540489e80427f792217ad8a09b84f027fca7ceb651b4264e98e94b4cb8a37b133390897233e8ba9103628d05b9609e8552c4a4b11e3f2fa8d56af36957390e88cba44656be3edace798cf8cdf7771bac338a256bc3cba6df97728f222f423ca7c6d149c9372d66163a98f79a234b00d4b75fb2ec860dcc2d1998105e4b9c01d68f079f3e0aa21cc534047fc7b858f8 +CT = b842eadfdf431c135bd6581d3eccae54e2267d8890036aa33dfe2d2d9715c44625441210a3a0d666d708d30588fe851ec36e10d8fa3584ed77b095149494b7c54379d62c8935e1d2b9a8f47e4759ad0b3437fdf2cc2fb6c5ea25ad10e0bdc9dc5b0517fc237eb783cc461c46665e2b1d1a5b8008dbf409ea2a63fea0276de23a32c99d92a498807a0f95e208fc6262321a78aafaf0cc3f833fff37bd4efa66f6023a25cdc6702cee3912799563d908a5183c9956a06aa71085d855dc7c809ed6e2889592b361ab3ab39060f8e419152187a794a19c2a1128882201900ea2cd597860674bf78d9720643df8701676718fd201baed4935a88e50558daf86edd08a9ab227ac7afae55c974b68de8dacad4a4d79b13ed6dfe74017a4cb9148e033436fb6 +TAG = ee1ec36804e1d5cdbddb52608c711fd8 + +KEY = 55a4be2448b464c2ea52a2f2664ed6aba865c14ea1fea77f4689331fd105c8d4 +NONCE = 00000000db37c0a405b4626d +IN = d266e66272e5d3462081b004cb42429c8b9741e9f678153754d726f6f9aa513464763c5e793b482fe512fece97585f1426120d4cefb3d0a8cc0a8db4bde93fc72c78f44d4fecca14650c660d3e285b327e7cdd813063e7e867b8a2d059a41bab70432b7f857199894da90dca3fe5272bae1ec694a1a07b60b05df275784d4975637e4673109f3ba846dfd1a048b202ed8e89973be608b91ee4743b1e759900f1443038951fe6189e806638985f3c16338c3c60695df58e621154d79bb973859c4558e9dca90470f77c73f004443ad5db0717abbe43266f90e57397b83ac34d1fef2e897e2483d5bcdcb627abd64b0d1aef525835f25e76d6e9158232cdde6dce970b59f58de8a98e653be32fb58edabbcefa5065d73afdf1c9c4fbf50c1022bd22bfcb98e4b422 +AD = fd6a3fdd879f8880843eac20ae01c1b9dc3487d270a806572088ef2ddc1f1e0de495e71d4813bf5c501ad31e5d791c4b5b3a0a71b63fdddcc8de4b056064ef467989ecccc5d0160d403bf3a025d4892b3b1de3e062bc3581d4410f273338311eb4637529e4a680a6e4a5e26e308630a5b6d49ead6d543f8f2bf9050aa94ce091318721e1d8b96e279f34b9759b65037bec4bf6ccda6929705aeeeebe49e327e4d7a916620c9faf3765120658af34c53fbb97ec07657b3f088fcbdc401aa7949ddeda34d885018c2c23f4f0bb8218bf0d4fc90643658b4d8834f4a8c08e590c2a790995baa9e77627c342d283e454f84fcc05be15e9627a2d9be340c9d72f222bbdfc47905f56616cd9f936d49e4732f319f020513340fb8b22828db251b102b6b137c9533936d6 +CT = bd11ed07b7b4b30eeaf25d6a41a549cca0a5aee71f990ac566a37265d7af2ce3c03703427ee0b2755c2bdfc29f9d826aec6ee4ad28af48079ac23db16580b97424f3a4e35cc23625d39f95699d9ff5143e9a2bc26fcfee4f125f5aa2d968ccfc2faaf9db3c28850f6757f735cbc50c94c498bcde4f23bffafa8dd5f70d1a011e35eb26e905d4e68848fedebeb197be595c085ba33f11ba8398258445051751888e9bba111f800f31b37c447074ca6dce6d54b4dfad6cee5138643d4f6ac045e8047248924e88ea4294c7878bc22c9b41924ce301f22693c33733107bf1ba85e34806c5e4366ea66fc52a5f89dd9bf213239158b3d4d2600dde696c61d76c398b9bf10de9118e812e891c8f3355c0ecc6405f79bc32a58905e37888a1d8395fbedc3ac54eca569f +TAG = 296a397d280d026fc3627f4718971be9 + +# BoringSSL has additional tests here for truncated tags. *ring* doesn't +# support tag truncation, so those tests were removed. diff --git a/vendor/ring/tests/aead_tests.rs b/vendor/ring/tests/aead_tests.rs new file mode 100644 index 00000000..674573a8 --- /dev/null +++ b/vendor/ring/tests/aead_tests.rs @@ -0,0 +1,547 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +#![cfg(any(not(target_arch = "wasm32"), feature = "wasm32_c"))] + +#[cfg(target_arch = "wasm32")] +use wasm_bindgen_test::{wasm_bindgen_test, wasm_bindgen_test_configure}; + +#[cfg(target_arch = "wasm32")] +wasm_bindgen_test_configure!(run_in_browser); + +use core::{convert::TryInto, ops::RangeFrom}; +use ring::{aead, error, test, test_file}; + +/// Generate the known answer test functions for the given algorithm and test +/// case input file, where each test is implemented by a test in `$test`. +/// +/// All of these tests can be run in parallel. +macro_rules! test_known_answer { + ( $alg:ident, $test_file:expr, [ $( $test:ident ),+, ] ) => { + $( + #[test] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn $test() { + test_aead( + &aead::$alg, + super::super::$test, + test_file!($test_file)); + } + )+ + } +} + +/// Generate the tests for a given algorithm. +/// +/// All of these tests can be run in parallel. +macro_rules! test_aead { + { $( { $alg:ident, $test_file:expr } ),+, } => { + mod aead_test { // Make `cargo test aead` include these files. + $( + #[allow(non_snake_case)] + mod $alg { // Provide a separate namespace for each algorithm's test. + use super::super::*; + + test_known_answer!( + $alg, + $test_file, + [ + less_safe_key_open_in_place, + less_safe_key_open_within, + less_safe_key_seal_in_place_append_tag, + less_safe_key_seal_in_place_separate_tag, + opening_key_open_in_place, + opening_key_open_within, + sealing_key_seal_in_place_append_tag, + sealing_key_seal_in_place_separate_tag, + ]); + + #[test] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn key_sizes() { + super::super::key_sizes(&aead::$alg); + } + } + )+ + } + } +} + +test_aead! { + { AES_128_GCM, "aead_aes_128_gcm_tests.txt" }, + { AES_256_GCM, "aead_aes_256_gcm_tests.txt" }, + { CHACHA20_POLY1305, "aead_chacha20_poly1305_tests.txt" }, +} + +struct KnownAnswerTestCase<'a> { + key: &'a [u8], + nonce: [u8; aead::NONCE_LEN], + plaintext: &'a [u8], + aad: aead::Aad<&'a [u8]>, + ciphertext: &'a [u8], + tag: &'a [u8], +} + +fn test_aead( + aead_alg: &'static aead::Algorithm, + f: impl Fn(&'static aead::Algorithm, KnownAnswerTestCase) -> Result<(), error::Unspecified>, + test_file: test::File, +) { + test::run(test_file, |section, test_case| { + assert_eq!(section, ""); + let key = test_case.consume_bytes("KEY"); + let nonce = test_case.consume_bytes("NONCE"); + let plaintext = test_case.consume_bytes("IN"); + let aad = test_case.consume_bytes("AD"); + let ct = test_case.consume_bytes("CT"); + let tag = test_case.consume_bytes("TAG"); + let error = test_case.consume_optional_string("FAILS"); + + match error.as_deref() { + Some("WRONG_NONCE_LENGTH") => { + assert!(matches!( + aead::Nonce::try_assume_unique_for_key(&nonce), + Err(error::Unspecified) + )); + return Ok(()); + } + Some(unexpected) => { + unreachable!("unexpected error in test data: {}", unexpected); + } + None => {} + }; + + let test_case = KnownAnswerTestCase { + key: &key, + nonce: nonce.as_slice().try_into().unwrap(), + plaintext: &plaintext, + aad: aead::Aad::from(&aad), + ciphertext: &ct, + tag: &tag, + }; + + f(aead_alg, test_case) + }) +} + +fn test_seal_append_tag( + tc: &KnownAnswerTestCase, + seal: Seal, +) -> Result<(), error::Unspecified> +where + Seal: FnOnce(aead::Nonce, &mut Vec) -> Result<(), error::Unspecified>, +{ + let mut in_out = Vec::from(tc.plaintext); + seal(aead::Nonce::assume_unique_for_key(tc.nonce), &mut in_out)?; + + let mut expected_ciphertext_and_tag = Vec::from(tc.ciphertext); + expected_ciphertext_and_tag.extend_from_slice(tc.tag); + + assert_eq!(in_out, expected_ciphertext_and_tag); + + Ok(()) +} + +fn test_seal_separate_tag( + tc: &KnownAnswerTestCase, + seal: Seal, +) -> Result<(), error::Unspecified> +where + Seal: Fn(aead::Nonce, &mut [u8]) -> Result, +{ + let mut in_out = Vec::from(tc.plaintext); + let actual_tag = seal(aead::Nonce::assume_unique_for_key(tc.nonce), &mut in_out)?; + assert_eq!(actual_tag.as_ref(), tc.tag); + assert_eq!(in_out, tc.ciphertext); + + Ok(()) +} + +fn test_open_in_place( + tc: &KnownAnswerTestCase<'_>, + open_in_place: OpenInPlace, +) -> Result<(), error::Unspecified> +where + OpenInPlace: + for<'a> FnOnce(aead::Nonce, &'a mut [u8]) -> Result<&'a mut [u8], error::Unspecified>, +{ + let nonce = aead::Nonce::assume_unique_for_key(tc.nonce); + + let mut in_out = Vec::from(tc.ciphertext); + in_out.extend_from_slice(tc.tag); + + let actual_plaintext = open_in_place(nonce, &mut in_out)?; + + assert_eq!(actual_plaintext, tc.plaintext); + assert_eq!(&in_out[..tc.plaintext.len()], tc.plaintext); + Ok(()) +} + +fn test_open_within( + tc: &KnownAnswerTestCase<'_>, + open_within: OpenWithin, +) -> Result<(), error::Unspecified> +where + OpenWithin: for<'a> Fn( + aead::Nonce, + &'a mut [u8], + RangeFrom, + ) -> Result<&'a mut [u8], error::Unspecified>, +{ + // In release builds, test all prefix lengths from 0 to 4096 bytes. + // Debug builds are too slow for this, so for those builds, only + // test a smaller subset. + + // TLS record headers are 5 bytes long. + // TLS explicit nonces for AES-GCM are 8 bytes long. + static MINIMAL_IN_PREFIX_LENS: [usize; 36] = [ + // No input prefix to overwrite; i.e. the opening is exactly + // "in place." + 0, + 1, + 2, + // Proposed TLS 1.3 header (no explicit nonce). + 5, + 8, + // Probably the most common use of a non-zero `in_prefix_len` + // would be to write a decrypted TLS record over the top of the + // TLS header and nonce. + 5 /* record header */ + 8, /* explicit nonce */ + // The stitched AES-GCM x86-64 code works on 6-block (96 byte) + // units. Some of the ChaCha20 code is even weirder. + 15, // The maximum partial AES block. + 16, // One AES block. + 17, // One byte more than a full AES block. + 31, // 2 AES blocks or 1 ChaCha20 block, minus 1. + 32, // Two AES blocks, one ChaCha20 block. + 33, // 2 AES blocks or 1 ChaCha20 block, plus 1. + 47, // Three AES blocks - 1. + 48, // Three AES blocks. + 49, // Three AES blocks + 1. + 63, // Four AES blocks or two ChaCha20 blocks, minus 1. + 64, // Four AES blocks or two ChaCha20 blocks. + 65, // Four AES blocks or two ChaCha20 blocks, plus 1. + 79, // Five AES blocks, minus 1. + 80, // Five AES blocks. + 81, // Five AES blocks, plus 1. + 95, // Six AES blocks or three ChaCha20 blocks, minus 1. + 96, // Six AES blocks or three ChaCha20 blocks. + 97, // Six AES blocks or three ChaCha20 blocks, plus 1. + 111, // Seven AES blocks, minus 1. + 112, // Seven AES blocks. + 113, // Seven AES blocks, plus 1. + 127, // Eight AES blocks or four ChaCha20 blocks, minus 1. + 128, // Eight AES blocks or four ChaCha20 blocks. + 129, // Eight AES blocks or four ChaCha20 blocks, plus 1. + 143, // Nine AES blocks, minus 1. + 144, // Nine AES blocks. + 145, // Nine AES blocks, plus 1. + 255, // 16 AES blocks or 8 ChaCha20 blocks, minus 1. + 256, // 16 AES blocks or 8 ChaCha20 blocks. + 257, // 16 AES blocks or 8 ChaCha20 blocks, plus 1. + ]; + + let mut more_comprehensive_in_prefix_lengths = [0; 4096]; + let in_prefix_lengths = if cfg!(debug_assertions) { + &MINIMAL_IN_PREFIX_LENS[..] + } else { + #[allow(clippy::needless_range_loop)] + for b in 0..more_comprehensive_in_prefix_lengths.len() { + more_comprehensive_in_prefix_lengths[b] = b; + } + &more_comprehensive_in_prefix_lengths[..] + }; + let mut in_out = vec![123u8; 4096]; + + for &in_prefix_len in in_prefix_lengths.iter() { + in_out.truncate(0); + in_out.resize(in_prefix_len, 123); + in_out.extend_from_slice(tc.ciphertext); + in_out.extend_from_slice(tc.tag); + + let actual_plaintext = open_within( + aead::Nonce::assume_unique_for_key(tc.nonce), + &mut in_out, + in_prefix_len.., + )?; + assert_eq!(actual_plaintext, tc.plaintext); + assert_eq!(&in_out[..tc.plaintext.len()], tc.plaintext); + } + + Ok(()) +} + +fn sealing_key_seal_in_place_append_tag( + alg: &'static aead::Algorithm, + tc: KnownAnswerTestCase, +) -> Result<(), error::Unspecified> { + test_seal_append_tag(&tc, |nonce, in_out| { + let mut key: aead::SealingKey = make_key(alg, tc.key, nonce); + key.seal_in_place_append_tag(tc.aad, in_out) + }) +} + +fn sealing_key_seal_in_place_separate_tag( + alg: &'static aead::Algorithm, + tc: KnownAnswerTestCase, +) -> Result<(), error::Unspecified> { + test_seal_separate_tag(&tc, |nonce, in_out| { + let mut key: aead::SealingKey<_> = make_key(alg, tc.key, nonce); + key.seal_in_place_separate_tag(tc.aad, in_out) + }) +} + +fn opening_key_open_in_place( + alg: &'static aead::Algorithm, + tc: KnownAnswerTestCase, +) -> Result<(), error::Unspecified> { + test_open_in_place(&tc, |nonce, in_out| { + let mut key: aead::OpeningKey<_> = make_key(alg, tc.key, nonce); + key.open_in_place(tc.aad, in_out) + }) +} + +fn opening_key_open_within( + alg: &'static aead::Algorithm, + tc: KnownAnswerTestCase, +) -> Result<(), error::Unspecified> { + test_open_within(&tc, |nonce, in_out, ciphertext_and_tag| { + let mut key: aead::OpeningKey = make_key(alg, tc.key, nonce); + key.open_within(tc.aad, in_out, ciphertext_and_tag) + }) +} + +fn less_safe_key_seal_in_place_append_tag( + alg: &'static aead::Algorithm, + tc: KnownAnswerTestCase, +) -> Result<(), error::Unspecified> { + test_seal_append_tag(&tc, |nonce, in_out| { + let key = make_less_safe_key(alg, tc.key); + key.seal_in_place_append_tag(nonce, tc.aad, in_out) + }) +} + +fn less_safe_key_open_in_place( + alg: &'static aead::Algorithm, + tc: KnownAnswerTestCase, +) -> Result<(), error::Unspecified> { + test_open_in_place(&tc, |nonce, in_out| { + let key = make_less_safe_key(alg, tc.key); + key.open_in_place(nonce, tc.aad, in_out) + }) +} + +fn less_safe_key_seal_in_place_separate_tag( + alg: &'static aead::Algorithm, + tc: KnownAnswerTestCase, +) -> Result<(), error::Unspecified> { + test_seal_separate_tag(&tc, |nonce, in_out| { + let key = make_less_safe_key(alg, tc.key); + key.seal_in_place_separate_tag(nonce, tc.aad, in_out) + }) +} + +fn less_safe_key_open_within( + alg: &'static aead::Algorithm, + tc: KnownAnswerTestCase, +) -> Result<(), error::Unspecified> { + test_open_within(&tc, |nonce, in_out, ciphertext_and_tag| { + let key = make_less_safe_key(alg, tc.key); + key.open_within(nonce, tc.aad, in_out, ciphertext_and_tag) + }) +} + +#[allow(clippy::range_plus_one)] +fn key_sizes(aead_alg: &'static aead::Algorithm) { + let key_len = aead_alg.key_len(); + let key_data = vec![0u8; key_len * 2]; + + // Key is the right size. + assert!(aead::UnboundKey::new(aead_alg, &key_data[..key_len]).is_ok()); + + // Key is one byte too small. + assert!(aead::UnboundKey::new(aead_alg, &key_data[..(key_len - 1)]).is_err()); + + // Key is one byte too large. + assert!(aead::UnboundKey::new(aead_alg, &key_data[..(key_len + 1)]).is_err()); + + // Key is half the required size. + assert!(aead::UnboundKey::new(aead_alg, &key_data[..(key_len / 2)]).is_err()); + + // Key is twice the required size. + assert!(aead::UnboundKey::new(aead_alg, &key_data[..(key_len * 2)]).is_err()); + + // Key is empty. + assert!(aead::UnboundKey::new(aead_alg, &[]).is_err()); + + // Key is one byte. + assert!(aead::UnboundKey::new(aead_alg, &[0]).is_err()); +} + +// Test that we reject non-standard nonce sizes. +#[allow(clippy::range_plus_one)] +#[test] +fn test_aead_nonce_sizes() { + let nonce_len = aead::NONCE_LEN; + let nonce = vec![0u8; nonce_len * 2]; + + assert!(aead::Nonce::try_assume_unique_for_key(&nonce[..nonce_len]).is_ok()); + assert!(aead::Nonce::try_assume_unique_for_key(&nonce[..(nonce_len - 1)]).is_err()); + assert!(aead::Nonce::try_assume_unique_for_key(&nonce[..(nonce_len + 1)]).is_err()); + assert!(aead::Nonce::try_assume_unique_for_key(&nonce[..(nonce_len / 2)]).is_err()); + assert!(aead::Nonce::try_assume_unique_for_key(&nonce[..(nonce_len * 2)]).is_err()); + assert!(aead::Nonce::try_assume_unique_for_key(&[]).is_err()); + assert!(aead::Nonce::try_assume_unique_for_key(&nonce[..1]).is_err()); + assert!(aead::Nonce::try_assume_unique_for_key(&nonce[..16]).is_err()); // 128 bits. +} + +#[allow(clippy::range_plus_one)] +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +fn aead_chacha20_poly1305_openssh() { + // TODO: test_aead_key_sizes(...); + + test::run( + test_file!("aead_chacha20_poly1305_openssh_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + // XXX: `polyfill::convert` isn't available here. + let key_bytes = { + let as_vec = test_case.consume_bytes("KEY"); + let mut as_array = [0u8; aead::chacha20_poly1305_openssh::KEY_LEN]; + as_array.copy_from_slice(&as_vec); + as_array + }; + + let sequence_number = test_case.consume_usize("SEQUENCE_NUMBER"); + assert_eq!(sequence_number as u32 as usize, sequence_number); + let sequence_num = sequence_number as u32; + let plaintext = test_case.consume_bytes("IN"); + let ct = test_case.consume_bytes("CT"); + let expected_tag = test_case.consume_bytes("TAG"); + + // TODO: Add some tests for when things fail. + //let error = test_case.consume_optional_string("FAILS"); + + let mut tag = [0u8; aead::chacha20_poly1305_openssh::TAG_LEN]; + let mut s_in_out = plaintext.clone(); + let s_key = aead::chacha20_poly1305_openssh::SealingKey::new(&key_bytes); + s_key.seal_in_place(sequence_num, &mut s_in_out[..], &mut tag); + assert_eq!(&ct, &s_in_out); + assert_eq!(&expected_tag, &tag); + let o_key = aead::chacha20_poly1305_openssh::OpeningKey::new(&key_bytes); + + { + let o_result = o_key.open_in_place(sequence_num, &mut s_in_out[..], &tag); + assert_eq!(o_result, Ok(&plaintext[4..])); + } + assert_eq!(&s_in_out[..4], &ct[..4]); + assert_eq!(&s_in_out[4..], &plaintext[4..]); + + Ok(()) + }, + ); +} + +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +fn aead_test_aad_traits() { + test::compile_time_assert_copy::>(); + test::compile_time_assert_eq::>>(); // `!Copy` + + let aad_123 = aead::Aad::from(vec![1, 2, 3]); // `!Copy` + assert_eq!(aad_123, aad_123.clone()); // Cover `Clone` and `PartialEq` + assert_eq!( + format!("{:?}", aead::Aad::from(&[1, 2, 3])), + "Aad([1, 2, 3])" + ); +} + +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +fn test_tag_traits() { + test::compile_time_assert_send::(); + test::compile_time_assert_sync::(); +} + +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +fn test_aead_key_debug() { + let key_bytes = [0; 32]; + let nonce = [0; aead::NONCE_LEN]; + + let key = aead::UnboundKey::new(&aead::AES_256_GCM, &key_bytes).unwrap(); + assert_eq!( + "UnboundKey { algorithm: AES_256_GCM }", + format!("{:?}", key) + ); + + let sealing_key: aead::SealingKey = make_key( + &aead::AES_256_GCM, + &key_bytes, + aead::Nonce::try_assume_unique_for_key(&nonce).unwrap(), + ); + assert_eq!( + "SealingKey { algorithm: AES_256_GCM }", + format!("{:?}", sealing_key) + ); + + let opening_key: aead::OpeningKey = make_key( + &aead::AES_256_GCM, + &key_bytes, + aead::Nonce::try_assume_unique_for_key(&nonce).unwrap(), + ); + assert_eq!( + "OpeningKey { algorithm: AES_256_GCM }", + format!("{:?}", opening_key) + ); + + let key: aead::LessSafeKey = make_less_safe_key(&aead::AES_256_GCM, &key_bytes); + assert_eq!( + "LessSafeKey { algorithm: AES_256_GCM }", + format!("{:?}", key) + ); +} + +fn make_key>( + algorithm: &'static aead::Algorithm, + key: &[u8], + nonce: aead::Nonce, +) -> K { + let key = aead::UnboundKey::new(algorithm, key).unwrap(); + let nonce_sequence = OneNonceSequence::new(nonce); + K::new(key, nonce_sequence) +} + +fn make_less_safe_key(algorithm: &'static aead::Algorithm, key: &[u8]) -> aead::LessSafeKey { + let key = aead::UnboundKey::new(algorithm, key).unwrap(); + aead::LessSafeKey::new(key) +} + +struct OneNonceSequence(Option); + +impl OneNonceSequence { + /// Constructs the sequence allowing `advance()` to be called + /// `allowed_invocations` times. + fn new(nonce: aead::Nonce) -> Self { + Self(Some(nonce)) + } +} + +impl aead::NonceSequence for OneNonceSequence { + fn advance(&mut self) -> Result { + self.0.take().ok_or(error::Unspecified) + } +} diff --git a/vendor/ring/tests/agreement_tests.rs b/vendor/ring/tests/agreement_tests.rs new file mode 100644 index 00000000..215f5bf7 --- /dev/null +++ b/vendor/ring/tests/agreement_tests.rs @@ -0,0 +1,203 @@ +// Copyright 2015-2017 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +extern crate alloc; + +use ring::{agreement, error, rand, test, test_file}; + +#[test] +fn agreement_traits() { + use alloc::vec::Vec; + + let rng = rand::SystemRandom::new(); + let private_key = + agreement::EphemeralPrivateKey::generate(&agreement::ECDH_P256, &rng).unwrap(); + + test::compile_time_assert_send::(); + test::compile_time_assert_sync::(); + + assert_eq!( + format!("{:?}", &private_key), + "EphemeralPrivateKey { algorithm: Algorithm { curve: P256 } }" + ); + + let public_key = private_key.compute_public_key().unwrap(); + + test::compile_time_assert_clone::(); + test::compile_time_assert_send::(); + test::compile_time_assert_sync::(); + + // Verify `PublicKey` implements `Debug`. + // + // TODO: Test the actual output. + let _: &dyn core::fmt::Debug = &public_key; + + test::compile_time_assert_clone::>(); + test::compile_time_assert_copy::>(); + test::compile_time_assert_sync::>(); + + test::compile_time_assert_clone::>>(); + test::compile_time_assert_sync::>>(); + + let unparsed_public_key = + agreement::UnparsedPublicKey::new(&agreement::X25519, &[0x01, 0x02, 0x03]); + + assert_eq!( + format!("{:?}", unparsed_public_key), + r#"UnparsedPublicKey { algorithm: Algorithm { curve: Curve25519 }, bytes: "010203" }"# + ); +} + +#[test] +fn agreement_agree_ephemeral() { + let rng = rand::SystemRandom::new(); + + test::run(test_file!("agreement_tests.txt"), |section, test_case| { + assert_eq!(section, ""); + + let curve_name = test_case.consume_string("Curve"); + let alg = alg_from_curve_name(&curve_name); + let peer_public = agreement::UnparsedPublicKey::new(alg, test_case.consume_bytes("PeerQ")); + + match test_case.consume_optional_string("Error") { + None => { + let my_private = test_case.consume_bytes("D"); + let my_private = { + let rng = test::rand::FixedSliceRandom { bytes: &my_private }; + agreement::EphemeralPrivateKey::generate(alg, &rng)? + }; + let my_public = test_case.consume_bytes("MyQ"); + let output = test_case.consume_bytes("Output"); + + assert_eq!(my_private.algorithm(), alg); + + let computed_public = my_private.compute_public_key().unwrap(); + assert_eq!(computed_public.as_ref(), &my_public[..]); + + assert_eq!(my_private.algorithm(), alg); + + let result = agreement::agree_ephemeral(my_private, &peer_public, |key_material| { + assert_eq!(key_material, &output[..]); + }); + assert_eq!(result, Ok(())); + } + + Some(_) => { + // In the no-heap mode, some algorithms aren't supported so + // we have to skip those algorithms' test cases. + let dummy_private_key = agreement::EphemeralPrivateKey::generate(alg, &rng)?; + fn kdf_not_called(_: &[u8]) -> Result<(), ()> { + panic!( + "The KDF was called during ECDH when the peer's \ + public key is invalid." + ); + } + assert!(agreement::agree_ephemeral( + dummy_private_key, + &peer_public, + kdf_not_called + ) + .is_err()); + } + } + + Ok(()) + }); +} + +#[test] +fn test_agreement_ecdh_x25519_rfc_iterated() { + let mut k = h("0900000000000000000000000000000000000000000000000000000000000000"); + let mut u = k.clone(); + + fn expect_iterated_x25519( + expected_result: &str, + range: core::ops::Range, + k: &mut Vec, + u: &mut Vec, + ) { + for _ in range { + let new_k = x25519(k, u); + *u = k.clone(); + *k = new_k; + } + assert_eq!(&h(expected_result), k); + } + + expect_iterated_x25519( + "422c8e7a6227d7bca1350b3e2bb7279f7897b87bb6854b783c60e80311ae3079", + 0..1, + &mut k, + &mut u, + ); + expect_iterated_x25519( + "684cf59ba83309552800ef566f2f4d3c1c3887c49360e3875f2eb94d99532c51", + 1..1_000, + &mut k, + &mut u, + ); + + // The spec gives a test vector for 1,000,000 iterations but it takes + // too long to do 1,000,000 iterations by default right now. This + // 10,000 iteration vector is self-computed. + expect_iterated_x25519( + "2c125a20f639d504a7703d2e223c79a79de48c4ee8c23379aa19a62ecd211815", + 1_000..10_000, + &mut k, + &mut u, + ); + + if cfg!(feature = "slow_tests") { + expect_iterated_x25519( + "7c3911e0ab2586fd864497297e575e6f3bc601c0883c30df5f4dd2d24f665424", + 10_000..1_000_000, + &mut k, + &mut u, + ); + } +} + +fn x25519(private_key: &[u8], public_key: &[u8]) -> Vec { + x25519_(private_key, public_key).unwrap() +} + +fn x25519_(private_key: &[u8], public_key: &[u8]) -> Result, error::Unspecified> { + let rng = test::rand::FixedSliceRandom { bytes: private_key }; + let private_key = agreement::EphemeralPrivateKey::generate(&agreement::X25519, &rng)?; + let public_key = agreement::UnparsedPublicKey::new(&agreement::X25519, public_key); + agreement::agree_ephemeral(private_key, &public_key, |agreed_value| { + Vec::from(agreed_value) + }) +} + +fn h(s: &str) -> Vec { + match test::from_hex(s) { + Ok(v) => v, + Err(msg) => { + panic!("{} in {}", msg, s); + } + } +} + +fn alg_from_curve_name(curve_name: &str) -> &'static agreement::Algorithm { + if curve_name == "P-256" { + &agreement::ECDH_P256 + } else if curve_name == "P-384" { + &agreement::ECDH_P384 + } else if curve_name == "X25519" { + &agreement::X25519 + } else { + panic!("Unsupported curve: {}", curve_name); + } +} diff --git a/vendor/ring/tests/agreement_tests.txt b/vendor/ring/tests/agreement_tests.txt new file mode 100644 index 00000000..354d8ae7 --- /dev/null +++ b/vendor/ring/tests/agreement_tests.txt @@ -0,0 +1,641 @@ +# RFC 7748 (X25519) Test Vectors +# +# PeerQ is the "Input u-coordinate." +# D is the "Input scalar." +# XXX: MyQ is not provided in the RFC, so we calculated it ourselves. +# Output is the "Output u-coordinate." + +Curve = X25519 +PeerQ = e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c +D = a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4 +MyQ = 1c9fd88f45606d932a80c71824ae151d15d73e77de38e8e000852e614fae7019 +Output = c3da55379de9c6908e94ea4df28d084f32eccf03491c71f754b4075577a28552 + +Curve = X25519 +PeerQ = e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a493 +D = 4b66e9d4d1b4673c5ad22691957d6af5c11b6421e0ea01d42ca4169e7918ba0d +MyQ = ff63fe57bfbf43fa3f563628b149af704d3db625369c49983650347a6a71e00e +Output = 95cbde9476e8907d7aade45cb4b873f88b595a68799fa152e6f8f7647aac7957 + + +# Additional X25519 Test Vectors + +Curve = X25519 +PeerQ = "" +Error = Peer public key is empty. + +Curve = X25519 +PeerQ = 00 +Error = Peer public key is too short. + +Curve = X25519 +PeerQ = e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a4 +Error = Peer public key is too short. + +Curve = X25519 +PeerQ = e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a49300 +Error = Peer public key is too long (zero appended). + +Curve = X25519 +PeerQ = 00e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a493 +Error = Peer public key is too long (zero prepended). + + +# RFC 5903 (IKE and IKEv2 ECDH) Test Vectors +# +# PeerQ is (grx, gry) in uncompressed encoding. +# D is i. +# MyQ is (gix, giy) in uncompressed encoding. +# Output is girx. + +Curve = P-256 +PeerQ = 04D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF6356FBF3CA366CC23E8157854C13C58D6AAC23F046ADA30F8353E74F33039872AB +D = C88F01F510D9AC3F70A292DAA2316DE544E9AAB8AFE84049C62A9C57862D1433 +MyQ = 04DAD0B65394221CF9B051E1FECA5787D098DFE637FC90B9EF945D0C37725811805271A0461CDB8252D61F1C456FA3E59AB1F45B33ACCF5F58389E0577B8990BB3 +Output = D6840F6B42F6EDAFD13116E0E12565202FEF8E9ECE7DCE03812464D04B9442DE + +Curve = P-384 +PeerQ = 04E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571DCFBEC7AACF3196472169E838430367F66EEBE3C6E70C416DD5F0C68759DD1FFF83FA40142209DFF5EAAD96DB9E6386C +D = 099F3C7034D4A2C699884D73A375A67F7624EF7C6B3C0F160647B67414DCE655E35B538041E649EE3FAEF896783AB194 +MyQ = 04667842D7D180AC2CDE6F74F37551F55755C7645C20EF73E31634FE72B4C55EE6DE3AC808ACB4BDB4C88732AEE95F41AA9482ED1FC0EEB9CAFC4984625CCFC23F65032149E0E144ADA024181535A0F38EEB9FCFF3C2C947DAE69B4C634573A81C +Output = 11187331C279962D93D604243FD592CB9D0A926F422E47187521287E7156C5C4D603135569B9E9D09CF5D4A270F59746 + + +# Tweaks of the RFC 5903 vectors for testing malformed (syntactically) public +# keys + +Curve = P-256 +PeerQ = "" +Error = Peer public key is empty. + +Curve = P-384 +PeerQ = "" +Error = Peer public key is empty. + +Curve = P-256 +PeerQ = 00 +Error = Peer public key is the special encoding of the point at infinity. + +Curve = P-384 +PeerQ = 00 +Error = Peer public key is the special encoding of the point at infinity. + +Curve = P-256 +PeerQ = 01 +Error = Peer public key consists of (only) an invalid encoding indicator. + +Curve = P-384 +PeerQ = 01 +Error = Peer public key consists of (only) an invalid encoding indicator. + +Curve = P-256 +PeerQ = 02 +Error = Peer public key consists of (only) a compressed encoding indicator (0x02). + +Curve = P-384 +PeerQ = 02 +Error = Peer public key consists of (only) a compressed encoding indicator (0x02). + +Curve = P-256 +PeerQ = 03 +Error = Peer public key consists of (only) a compressed encoding indicator (0x03). + +Curve = P-384 +PeerQ = 03 +Error = Peer public key consists of (only) a compressed encoding indicator (0x03). + +Curve = P-256 +PeerQ = 04 +Error = Peer public key consists of (only) a uncompressed encoding indicator. + +Curve = P-384 +PeerQ = 04 +Error = Peer public key consists of (only) a compressed encoding indicator. + +Curve = P-256 +PeerQ = 04 +Error = Peer public key consists of (only) an invalid encoding indicator (0x05). + +Curve = P-384 +PeerQ = 04 +Error = Peer public key consists of (only) an invalid encoding indicator (0x05). + +Curve = P-256 +PeerQ = 01D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF6356FBF3CA366CC23E8157854C13C58D6AAC23F046ADA30F8353E74F33039872AB +Error = Peer public key starts with a completely invalid encoding indicator byte (0x01). + +Curve = P-384 +PeerQ = 01E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571DCFBEC7AACF3196472169E838430367F66EEBE3C6E70C416DD5F0C68759DD1FFF83FA40142209DFF5EAAD96DB9E6386C +Error = Peer public key starts with a completely invalid encoding indicator byte (0x01). + +Curve = P-256 +PeerQ = 02D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF6356FBF3CA366CC23E8157854C13C58D6AAC23F046ADA30F8353E74F33039872AB +Error = Peer public key encoding's first byte is 0x02, should be 0x04. + +Curve = P-384 +PeerQ = 02E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571DCFBEC7AACF3196472169E838430367F66EEBE3C6E70C416DD5F0C68759DD1FFF83FA40142209DFF5EAAD96DB9E6386C +Error = Peer public key encoding's first byte is 0x02, should be 0x04. + +Curve = P-256 +PeerQ = 03D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF6356FBF3CA366CC23E8157854C13C58D6AAC23F046ADA30F8353E74F33039872AB +Error = Peer public key encoding's first byte is 0x03, should be 0x04. + +Curve = P-384 +PeerQ = 03E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571DCFBEC7AACF3196472169E838430367F66EEBE3C6E70C416DD5F0C68759DD1FFF83FA40142209DFF5EAAD96DB9E6386C +Error = Peer public key encoding's first byte is 0x03, should be 0x04. + +Curve = P-256 +PeerQ = 05D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF6356FBF3CA366CC23E8157854C13C58D6AAC23F046ADA30F8353E74F33039872AB +Error = Peer public key starts with a completely invalid encoding indicator byte (0x05). + +Curve = P-384 +PeerQ = 05E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571DCFBEC7AACF3196472169E838430367F66EEBE3C6E70C416DD5F0C68759DD1FFF83FA40142209DFF5EAAD96DB9E6386C +Error = Peer public key starts with a completely invalid encoding indicator byte (0x05). + +Curve = P-256 +PeerQ = FFD12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF6356FBF3CA366CC23E8157854C13C58D6AAC23F046ADA30F8353E74F33039872AB +Error = Peer public key starts with a completely invalid encoding indicator byte (0xff). + +Curve = P-384 +PeerQ = FFE558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571DCFBEC7AACF3196472169E838430367F66EEBE3C6E70C416DD5F0C68759DD1FFF83FA40142209DFF5EAAD96DB9E6386C +Error = Peer public key starts with a completely invalid encoding indicator byte (0xff). + +Curve = P-256 +PeerQ = D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF6356FBF3CA366CC23E8157854C13C58D6AAC23F046ADA30F8353E74F33039872AB +Error = Peer public key is missing the encoding indicator byte. + +Curve = P-384 +PeerQ = E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571DCFBEC7AACF3196472169E838430367F66EEBE3C6E70C416DD5F0C68759DD1FFF83FA40142209DFF5EAAD96DB9E6386C +Error = Peer public key is missing the encoding indicator byte. + +Curve = P-256 +PeerQ = 04D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF6356FBF3CA366CC23E8157854C13C58D6AAC23F046ADA30F8353E74F33039872 +Error = Peer public key has the last byte truncated. + +Curve = P-384 +PeerQ = 04E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571DCFBEC7AACF3196472169E838430367F66EEBE3C6E70C416DD5F0C68759DD1FFF83FA40142209DFF5EAAD96DB9E638 +Error = Peer public key has the last byte truncated. + +Curve = P-256 +PeerQ = 04D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF63 +Error = Peer public key is missing the Y coordinate completely. + +Curve = P-384 +PeerQ = 04E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571 +Error = Peer public key is missing the Y coordinate completely. + +Curve = P-256 +PeerQ = 02D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF63 +Error = Peer public key is in compressed form (0x02). + +Curve = P-384 +PeerQ = 02E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571 +Error = Peer public key is in compressed form (0x02). + +Curve = P-256 +PeerQ = 03D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF63 +Error = Peer public key is in compressed form (0x03). + +Curve = P-384 +PeerQ = 03E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571 +Error = Peer public key is in compressed form (0x03). + + +# NIST vectors from +# http://csrc.nist.gov/groups/STM/cavp/documents/components/ecccdhtestvectors.zip +# +# Only P-256 and P-384 vectors were copied. The "[P-256]" and "[P-384]" +# headings were replaced with "Curve = P-256" and "Curve = P-384" on each test +# case. +# +# PeerQ is (QCAVSx, QCAVSy) in uncompressed encoding. +# D is dIUT. +# MyQ is (QIUTx, QIUTy) in uncompressed encoding. +# Output is ZIUT. +# +# Note that these test vectors don't seem to test any interesting edge cases, +# and in particular they don't test any cases where the public point is +# invalid. + +Curve = P-256 +PeerQ = 04700c48f77f56584c5cc632ca65640db91b6bacce3a4df6b42ce7cc838833d287db71e509e3fd9b060ddb20ba5c51dcc5948d46fbf640dfe0441782cab85fa4ac +D = 7d7dc5f71eb29ddaf80d6214632eeae03d9058af1fb6d22ed80badb62bc1a534 +MyQ = 04ead218590119e8876b29146ff89ca61770c4edbbf97d38ce385ed281d8a6b23028af61281fd35e2fa7002523acc85a429cb06ee6648325389f59edfce1405141 +Output = 46fc62106420ff012e54a434fbdd2d25ccc5852060561e68040dd7778997bd7b + +Curve = P-256 +PeerQ = 04809f04289c64348c01515eb03d5ce7ac1a8cb9498f5caa50197e58d43a86a7aeb29d84e811197f25eba8f5194092cb6ff440e26d4421011372461f579271cda3 +D = 38f65d6dce47676044d58ce5139582d568f64bb16098d179dbab07741dd5caf5 +MyQ = 04119f2f047902782ab0c9e27a54aff5eb9b964829ca99c06b02ddba95b0a3f6d08f52b726664cac366fc98ac7a012b2682cbd962e5acb544671d41b9445704d1d +Output = 057d636096cb80b67a8c038c890e887d1adfa4195e9b3ce241c8a778c59cda67 + +Curve = P-256 +PeerQ = 04a2339c12d4a03c33546de533268b4ad667debf458b464d77443636440ee7fec3ef48a3ab26e20220bcda2c1851076839dae88eae962869a497bf73cb66faf536 +D = 1accfaf1b97712b85a6f54b148985a1bdc4c9bec0bd258cad4b3d603f49f32c8 +MyQ = 04d9f2b79c172845bfdb560bbb01447ca5ecc0470a09513b6126902c6b4f8d1051f815ef5ec32128d3487834764678702e64e164ff7315185e23aff5facd96d7bc +Output = 2d457b78b4614132477618a5b077965ec90730a8c81a1c75d6d4ec68005d67ec + +Curve = P-256 +PeerQ = 04df3989b9fa55495719b3cf46dccd28b5153f7808191dd518eff0c3cff2b705ed422294ff46003429d739a33206c8752552c8ba54a270defc06e221e0feaf6ac4 +D = 207c43a79bfee03db6f4b944f53d2fb76cc49ef1c9c4d34d51b6c65c4db6932d +MyQ = 0424277c33f450462dcb3d4801d57b9ced05188f16c28eda873258048cd1607e0dc4789753e2b1f63b32ff014ec42cd6a69fac81dfe6d0d6fd4af372ae27c46f88 +Output = 96441259534b80f6aee3d287a6bb17b5094dd4277d9e294f8fe73e48bf2a0024 + +Curve = P-256 +PeerQ = 0441192d2813e79561e6a1d6f53c8bc1a433a199c835e141b05a74a97b0faeb9221af98cc45e98a7e041b01cf35f462b7562281351c8ebf3ffa02e33a0722a1328 +D = 59137e38152350b195c9718d39673d519838055ad908dd4757152fd8255c09bf +MyQ = 04a8c5fdce8b62c5ada598f141adb3b26cf254c280b2857a63d2ad783a73115f6b806e1aafec4af80a0d786b3de45375b517a7e5b51ffb2c356537c9e6ef227d4a +Output = 19d44c8d63e8e8dd12c22a87b8cd4ece27acdde04dbf47f7f27537a6999a8e62 + +Curve = P-256 +PeerQ = 0433e82092a0f1fb38f5649d5867fba28b503172b7035574bf8e5b7100a3052792f2cf6b601e0a05945e335550bf648d782f46186c772c0f20d3cd0d6b8ca14b2f +D = f5f8e0174610a661277979b58ce5c90fee6c9b3bb346a90a7196255e40b132ef +MyQ = 047b861dcd2844a5a8363f6b8ef8d493640f55879217189d80326aad9480dfc149c4675b45eeb306405f6c33c38bc69eb2bdec9b75ad5af4706aab84543b9cc63a +Output = 664e45d5bba4ac931cd65d52017e4be9b19a515f669bea4703542a2c525cd3d3 + +Curve = P-256 +PeerQ = 046a9e0c3f916e4e315c91147be571686d90464e8bf981d34a90b6353bca6eeba740f9bead39c2f2bcc2602f75b8a73ec7bdffcbcead159d0174c6c4d3c5357f05 +D = 3b589af7db03459c23068b64f63f28d3c3c6bc25b5bf76ac05f35482888b5190 +MyQ = 049fb38e2d58ea1baf7622e96720101cae3cde4ba6c1e9fa26d9b1de0899102863d5561b900406edf50802dd7d73e89395f8aed72fba0e1d1b61fe1d22302260f0 +Output = ca342daa50dc09d61be7c196c85e60a80c5cb04931746820be548cdde055679d + +Curve = P-256 +PeerQ = 04a9c0acade55c2a73ead1a86fb0a9713223c82475791cd0e210b046412ce224bbf6de0afa20e93e078467c053d241903edad734c6b403ba758c2b5ff04c9d4229 +D = d8bf929a20ea7436b2461b541a11c80e61d826c0a4c9d322b31dd54e7f58b9c8 +MyQ = 0420f07631e4a6512a89ad487c4e9d63039e579cb0d7a556cb9e661cd59c1e7fa46de91846b3eee8a5ec09c2ab1f41e21bd83620ccdd1bdce3ab7ea6e02dd274f5 +Output = 35aa9b52536a461bfde4e85fc756be928c7de97923f0416c7a3ac8f88b3d4489 + +Curve = P-256 +PeerQ = 0494e94f16a98255fff2b9ac0c9598aac35487b3232d3231bd93b7db7df36f9eb9d8049a43579cfa90b8093a94416cbefbf93386f15b3f6e190b6e3455fedfe69a +D = 0f9883ba0ef32ee75ded0d8bda39a5146a29f1f2507b3bd458dbea0b2bb05b4d +MyQ = 04abb61b423be5d6c26e21c605832c9142dc1dfe5a5fff28726737936e6fbf516d733d2513ef58beab202090586fac91bf0fee31e80ab33473ab23a2d89e58fad6 +Output = 605c16178a9bc875dcbff54d63fe00df699c03e8a888e9e94dfbab90b25f39b4 + +Curve = P-256 +PeerQ = 04e099bf2a4d557460b5544430bbf6da11004d127cb5d67f64ab07c94fcdf5274fd9c50dbe70d714edb5e221f4e020610eeb6270517e688ca64fb0e98c7ef8c1c5 +D = 2beedb04b05c6988f6a67500bb813faf2cae0d580c9253b6339e4a3337bb6c08 +MyQ = 043d63e429cb5fa895a9247129bf4e48e89f35d7b11de8158efeb3e106a2a873950cae9e477ef41e7c8c1064379bb7b554ddcbcae79f9814281f1e50f0403c61f3 +Output = f96e40a1b72840854bb62bc13c40cc2795e373d4e715980b261476835a092e0b + +Curve = P-256 +PeerQ = 04f75a5fe56bda34f3c1396296626ef012dc07e4825838778a645c8248cff0165833bbdf1b1772d8059df568b061f3f1122f28a8d819167c97be448e3dc3fb0c3c +D = 77c15dcf44610e41696bab758943eff1409333e4d5a11bbe72c8f6c395e9f848 +MyQ = 04ad5d13c3db508ddcd38457e5991434a251bed49cf5ddcb59cdee73865f138c9f62cec1e70588aa4fdfc7b9a09daa678081c04e1208b9d662b8a2214bf8e81a21 +Output = 8388fa79c4babdca02a8e8a34f9e43554976e420a4ad273c81b26e4228e9d3a3 + +Curve = P-256 +PeerQ = 042db4540d50230756158abf61d9835712b6486c74312183ccefcaef2797b7674d62f57f314e3f3495dc4e099012f5e0ba71770f9660a1eada54104cdfde77243e +D = 42a83b985011d12303db1a800f2610f74aa71cdf19c67d54ce6c9ed951e9093e +MyQ = 04ab48caa61ea35f13f8ed07ffa6a13e8db224dfecfae1a7df8b1bb6ebaf0cb97d1274530ca2c385a3218bddfbcbf0b4024c9badd5243bff834ebff24a8618dccb +Output = 72877cea33ccc4715038d4bcbdfe0e43f42a9e2c0c3b017fc2370f4b9acbda4a + +Curve = P-256 +PeerQ = 04cd94fc9497e8990750309e9a8534fd114b0a6e54da89c4796101897041d14ecbc3def4b5fe04faee0a11932229fff563637bfdee0e79c6deeaf449f85401c5c4 +D = ceed35507b5c93ead5989119b9ba342cfe38e6e638ba6eea343a55475de2800b +MyQ = 049a8cd9bd72e71752df91440f77c547509a84df98114e7de4f26cdb39234a625dd07cfc84c8e144fab2839f5189bb1d7c88631d579bbc58012ed9a2327da52f62 +Output = e4e7408d85ff0e0e9c838003f28cdbd5247cdce31f32f62494b70e5f1bc36307 + +Curve = P-256 +PeerQ = 0415b9e467af4d290c417402e040426fe4cf236bae72baa392ed89780dfccdb471cdf4e9170fb904302b8fd93a820ba8cc7ed4efd3a6f2d6b05b80b2ff2aee4e77 +D = 43e0e9d95af4dc36483cdd1968d2b7eeb8611fcce77f3a4e7d059ae43e509604 +MyQ = 04f989cf8ee956a82e7ebd9881cdbfb2fd946189b08db53559bc8cfdd48071eb145eff28f1a18a616b04b7d337868679f6dd84f9a7b3d7b6f8af276c19611a541d +Output = ed56bcf695b734142c24ecb1fc1bb64d08f175eb243a31f37b3d9bb4407f3b96 + +Curve = P-256 +PeerQ = 0449c503ba6c4fa605182e186b5e81113f075bc11dcfd51c932fb21e951eee2fa18af706ff0922d87b3f0c5e4e31d8b259aeb260a9269643ed520a13bb25da5924 +D = b2f3600df3368ef8a0bb85ab22f41fc0e5f4fdd54be8167a5c3cd4b08db04903 +MyQ = 0469c627625b36a429c398b45c38677cb35d8beb1cf78a571e40e99fe4eac1cd4e81690112b0a88f20f7136b28d7d47e5fbc2ada3c8edd87589bc19ec9590637bd +Output = bc5c7055089fc9d6c89f83c1ea1ada879d9934b2ea28fcf4e4a7e984b28ad2cf + +Curve = P-256 +PeerQ = 0419b38de39fdd2f70f7091631a4f75d1993740ba9429162c2a45312401636b29c09aed7232b28e060941741b6828bcdfa2bc49cc844f3773611504f82a390a5ae +D = 4002534307f8b62a9bf67ff641ddc60fef593b17c3341239e95bdb3e579bfdc8 +MyQ = 045fe964671315a18aa68a2a6e3dd1fde7e23b8ce7181471cfac43c99e1ae80262d5827be282e62c84de531b963884ba832db5d6b2c3a256f0e604fe7e6b8a7f72 +Output = 9a4e8e657f6b0e097f47954a63c75d74fcba71a30d83651e3e5a91aa7ccd8343 + +Curve = P-256 +PeerQ = 042c91c61f33adfe9311c942fdbff6ba47020feff416b7bb63cec13faf9b0999546cab31b06419e5221fca014fb84ec870622a1b12bab5ae43682aa7ea73ea08d0 +D = 4dfa12defc60319021b681b3ff84a10a511958c850939ed45635934ba4979147 +MyQ = 04c9b2b8496f1440bd4a2d1e52752fd372835b364885e154a7dac49295f281ec7cfbe6b926a8a4de26ccc83b802b1212400754be25d9f3eeaf008b09870ae76321 +Output = 3ca1fc7ad858fb1a6aba232542f3e2a749ffc7203a2374a3f3d3267f1fc97b78 + +Curve = P-256 +PeerQ = 04a28a2edf58025668f724aaf83a50956b7ac1cfbbff79b08c3bf87dfd2828d767dfa7bfffd4c766b86abeaf5c99b6e50cb9ccc9d9d00b7ffc7804b0491b67bc03 +D = 1331f6d874a4ed3bc4a2c6e9c74331d3039796314beee3b7152fcdba5556304e +MyQ = 0459e1e101521046ad9cf1d082e9d2ec7dd22530cce064991f1e55c5bcf5fcb591482f4f673176c8fdaa0bb6e59b15a3e47454e3a04297d3863c9338d98add1f37 +Output = 1aaabe7ee6e4a6fa732291202433a237df1b49bc53866bfbe00db96a0f58224f + +Curve = P-256 +PeerQ = 04a2ef857a081f9d6eb206a81c4cf78a802bdf598ae380c8886ecd85fdc1ed7644563c4c20419f07bc17d0539fade1855e34839515b892c0f5d26561f97fa04d1a +D = dd5e9f70ae740073ca0204df60763fb6036c45709bf4a7bb4e671412fad65da3 +MyQ = 0430b9db2e2e977bcdc98cb87dd736cbd8e78552121925cf16e1933657c2fb23146a45028800b81291bce5c2e1fed7ded650620ebbe6050c6f3a7f0dfb4673ab5c +Output = 430e6a4fba4449d700d2733e557f66a3bf3d50517c1271b1ddae1161b7ac798c + +Curve = P-256 +PeerQ = 04ccd8a2d86bc92f2e01bce4d6922cf7fe1626aed044685e95e2eebd464505f01fe9ddd583a9635a667777d5b8a8f31b0f79eba12c75023410b54b8567dddc0f38 +D = 5ae026cfc060d55600717e55b8a12e116d1d0df34af831979057607c2d9c2f76 +MyQ = 0446c9ebd1a4a3c8c0b6d572b5dcfba12467603208a9cb5d2acfbb733c40cf639146c913a27d044185d38b467ace011e04d4d9bbbb8cb9ae25fa92aaf15a595e86 +Output = 1ce9e6740529499f98d1f1d71329147a33df1d05e4765b539b11cf615d6974d3 + +Curve = P-256 +PeerQ = 04c188ffc8947f7301fb7b53e36746097c2134bf9cc981ba74b4e9c4361f595e4ebf7d2f2056e72421ef393f0c0f2b0e00130e3cac4abbcc00286168e85ec55051 +D = b601ac425d5dbf9e1735c5e2d5bdb79ca98b3d5be4a2cfd6f2273f150e064d9d +MyQ = 047c9e950841d26c8dde8994398b8f5d475a022bc63de7773fcf8d552e01f1ba0acc42b9885c9b3bee0f8d8c57d3a8f6355016c019c4062fa22cff2f209b5cc2e1 +Output = 4690e3743c07d643f1bc183636ab2a9cb936a60a802113c49bb1b3f2d0661660 + +Curve = P-256 +PeerQ = 04317e1020ff53fccef18bf47bb7f2dd7707fb7b7a7578e04f35b3beed222a0eb609420ce5a19d77c6fe1ee587e6a49fbaf8f280e8df033d75403302e5a27db2ae +D = fefb1dda1845312b5fce6b81b2be205af2f3a274f5a212f66c0d9fc33d7ae535 +MyQ = 0438b54db85500cb20c61056edd3d88b6a9dc26780a047f213a6e1b900f76596eb6387e4e5781571e4eb8ae62991a33b5dc33301c5bc7e125d53794a39160d8fd0 +Output = 30c2261bd0004e61feda2c16aa5e21ffa8d7e7f7dbf6ec379a43b48e4b36aeb0 + +Curve = P-256 +PeerQ = 0445fb02b2ceb9d7c79d9c2fa93e9c7967c2fa4df5789f9640b24264b1e524fcb15c6e8ecf1f7d3023893b7b1ca1e4d178972ee2a230757ddc564ffe37f5c5a321 +D = 334ae0c4693d23935a7e8e043ebbde21e168a7cba3fa507c9be41d7681e049ce +MyQ = 043f2bf1589abf3047bf3e54ac9a95379bff95f8f55405f64eca36a7eebe8ffca75212a94e66c5ae9a8991872f66a72723d80ec5b2e925745c456f5371943b3a06 +Output = 2adae4a138a239dcd93c243a3803c3e4cf96e37fe14e6a9b717be9599959b11c + +Curve = P-256 +PeerQ = 04a19ef7bff98ada781842fbfc51a47aff39b5935a1c7d9625c8d323d511c92de6e9c184df75c955e02e02e400ffe45f78f339e1afe6d056fb3245f4700ce606ef +D = 2c4bde40214fcc3bfc47d4cf434b629acbe9157f8fd0282540331de7942cf09d +MyQ = 0429c0807f10cbc42fb45c9989da50681eead716daa7b9e91fd32e062f5eb92ca0ff1d6d1955d7376b2da24fe1163a271659136341bc2eb1195fc706dc62e7f34d +Output = 2e277ec30f5ea07d6ce513149b9479b96e07f4b6913b1b5c11305c1444a1bc0b + +Curve = P-256 +PeerQ = 04356c5a444c049a52fee0adeb7e5d82ae5aa83030bfff31bbf8ce2096cf161c4b57d128de8b2a57a094d1a001e572173f96e8866ae352bf29cddaf92fc85b2f92 +D = 85a268f9d7772f990c36b42b0a331adc92b5941de0b862d5d89a347cbf8faab0 +MyQ = 049cf4b98581ca1779453cc816ff28b4100af56cf1bf2e5bc312d83b6b1b21d3337a5504fcac5231a0d12d658218284868229c844a04a3450d6c7381abe080bf3b +Output = 1e51373bd2c6044c129c436e742a55be2a668a85ae08441b6756445df5493857 + +Curve = P-384 +PeerQ = 04a7c76b970c3b5fe8b05d2838ae04ab47697b9eaf52e764592efda27fe7513272734466b400091adbf2d68c58e0c50066ac68f19f2e1cb879aed43a9969b91a0839c4c38a49749b661efedf243451915ed0905a32b060992b468c64766fc8437a +D = 3cc3122a68f0d95027ad38c067916ba0eb8c38894d22e1b15618b6818a661774ad463b205da88cf699ab4d43c9cf98a1 +MyQ = 049803807f2f6d2fd966cdd0290bd410c0190352fbec7ff6247de1302df86f25d34fe4a97bef60cff548355c015dbb3e5fba26ca69ec2f5b5d9dad20cc9da711383a9dbe34ea3fa5a2af75b46502629ad54dd8b7d73a8abb06a3a3be47d650cc99 +Output = 5f9d29dc5e31a163060356213669c8ce132e22f57c9a04f40ba7fcead493b457e5621e766c40a2e3d4d6a04b25e533f1 + +Curve = P-384 +PeerQ = 0430f43fcf2b6b00de53f624f1543090681839717d53c7c955d1d69efaf0349b7363acb447240101cbb3af6641ce4b88e025e46c0c54f0162a77efcc27b6ea792002ae2ba82714299c860857a68153ab62e525ec0530d81b5aa15897981e858757 +D = 92860c21bde06165f8e900c687f8ef0a05d14f290b3f07d8b3a8cc6404366e5d5119cd6d03fb12dc58e89f13df9cd783 +MyQ = 04ea4018f5a307c379180bf6a62fd2ceceebeeb7d4df063a66fb838aa35243419791f7e2c9d4803c9319aa0eb03c416b6668835a91484f05ef028284df6436fb88ffebabcdd69ab0133e6735a1bcfb37203d10d340a8328a7b68770ca75878a1a6 +Output = a23742a2c267d7425fda94b93f93bbcc24791ac51cd8fd501a238d40812f4cbfc59aac9520d758cf789c76300c69d2ff + +Curve = P-384 +PeerQ = 041aefbfa2c6c8c855a1a216774550b79a24cda37607bb1f7cc906650ee4b3816d68f6a9c75da6e4242cebfb6652f65180419d28b723ebadb7658fcebb9ad9b7adea674f1da3dc6b6397b55da0f61a3eddacb4acdb14441cb214b04a0844c02fa3 +D = 12cf6a223a72352543830f3f18530d5cb37f26880a0b294482c8a8ef8afad09aa78b7dc2f2789a78c66af5d1cc553853 +MyQ = 04fcfcea085e8cf74d0dced1620ba8423694f903a219bbf901b0b59d6ac81baad316a242ba32bde85cb248119b852fab66972e3c68c7ab402c5836f2a16ed451a33120a7750a6039f3ff15388ee622b7065f7122bf6d51aefbc29b37b03404581b +Output = 3d2e640f350805eed1ff43b40a72b2abed0a518bcebe8f2d15b111b6773223da3c3489121db173d414b5bd5ad7153435 + +Curve = P-384 +PeerQ = 048bc089326ec55b9cf59b34f0eb754d93596ca290fcb3444c83d4de3a5607037ec397683f8cef07eab2fe357eae36c449d9d16ce8ac85b3f1e94568521aae534e67139e310ec72693526aa2e927b5b322c95a1a033c229cb6770c957cd3148dd7 +D = 8dd48063a3a058c334b5cc7a4ce07d02e5ee6d8f1f3c51a1600962cbab462690ae3cd974fb39e40b0e843daa0fd32de1 +MyQ = 04e38c9846248123c3421861ea4d32669a7b5c3c08376ad28104399494c84ff5efa3894adb2c6cbe8c3c913ef2eec5bd3c9fa84024a1028796df84021f7b6c9d02f0f4bd1a612a03cbf75a0beea43fef8ae84b48c60172aadf09c1ad016d0bf3ce +Output = 6a42cfc392aba0bfd3d17b7ccf062b91fc09bbf3417612d02a90bdde62ae40c54bb2e56e167d6b70db670097eb8db854 + +Curve = P-384 +PeerQ = 04eb952e2d9ac0c20c6cc48fb225c2ad154f53c8750b003fd3b4ed8ed1dc0defac61bcdde02a2bcfee7067d75d342ed2b0f1828205baece82d1b267d0d7ff2f9c9e15b69a72df47058a97f3891005d1fb38858f5603de840e591dfa4f6e7d489e1 +D = 84ece6cc3429309bd5b23e959793ed2b111ec5cb43b6c18085fcaea9efa0685d98a6262ee0d330ee250bc8a67d0e733f +MyQ = 043222063a2997b302ee60ee1961108ff4c7acf1c0ef1d5fb0d164b84bce71c431705cb9aea9a45f5d73806655a058bee3e61fa9e7fbe7cd43abf99596a3d3a039e99fa9dc93b0bdd9cad81966d17eeaf557068afa7c78466bb5b22032d1100fa6 +Output = ce7ba454d4412729a32bb833a2d1fd2ae612d4667c3a900e069214818613447df8c611de66da200db7c375cf913e4405 + +Curve = P-384 +PeerQ = 04441d029e244eb7168d647d4df50db5f4e4974ab3fdaf022aff058b3695d0b8c814cc88da6285dc6df1ac55c553885003e8025ac23a41d4b1ea2aa46c50c6e479946b59b6d76497cd9249977e0bfe4a6262622f13d42a3c43d66bdbb30403c345 +D = 68fce2121dc3a1e37b10f1dde309f9e2e18fac47cd1770951451c3484cdb77cb136d00e731260597cc2859601c01a25b +MyQ = 04868be0e694841830e424d913d8e7d86b84ee1021d82b0ecf523f09fe89a76c0c95c49f2dfbcf829c1e39709d55efbb3b9195eb183675b40fd92f51f37713317e4a9b4f715c8ab22e0773b1bc71d3a219f05b8116074658ee86b52e36f3897116 +Output = ba69f0acdf3e1ca95caaac4ecaf475bbe51b54777efce01ca381f45370e486fe87f9f419b150c61e329a286d1aa265ec + +Curve = P-384 +PeerQ = 043d4e6bf08a73404accc1629873468e4269e82d90d832e58ad72142639b5a056ad8d35c66c60e8149fac0c797bceb7c2f9b0308dc7f0e6d29f8c277acbc65a21e5adb83d11e6873bc0a07fda0997f482504602f59e10bc5cb476b83d0a4f75e71 +D = b1764c54897e7aae6de9e7751f2f37de849291f88f0f91093155b858d1cc32a3a87980f706b86cc83f927bdfdbeae0bd +MyQ = 04c371222feaa6770c6f3ea3e0dac9740def4fcf821378b7f91ff937c21e0470f70f3a31d5c6b2912195f10926942b48ae047d6b4d765123563f81116bc665b7b8cc6207830d805fd84da7cb805a65baa7c12fd592d1b5b5e3e65d9672a9ef7662 +Output = 1a6688ee1d6e59865d8e3ada37781d36bb0c2717eef92e61964d3927cb765c2965ea80f7f63e58c322ba0397faeaf62b + +Curve = P-384 +PeerQ = 04f5f6bef1d110da03be0017eac760cc34b24d092f736f237bc7054b3865312a813bcb62d297fb10a4f7abf54708fe2d3d06fdf8d7dc032f4e10010bf19cbf6159321252ff415fb91920d438f24e67e60c2eb0463204679fa356af44cea9c9ebf5 +D = f0f7a96e70d98fd5a30ad6406cf56eb5b72a510e9f192f50e1f84524dbf3d2439f7287bb36f5aa912a79deaab4adea82 +MyQ = 0499c8c41cb1ab5e0854a346e4b08a537c1706a61553387c8d94943ab15196d40dbaa55b8210a77a5d00915f2c4ea69eab5531065bdcf17bfb3cb55a02e41a57c7f694c383ad289f900fbd656c2233a93c92e933e7a26f54cbb56f0ad875c51bb0 +Output = d06a568bf2336b90cbac325161be7695eacb2295f599500d787f072612aca313ee5d874f807ddef6c1f023fe2b6e7cd0 + +Curve = P-384 +PeerQ = 047cdec77e0737ea37c67b89b7137fe38818010f4464438ee4d1d35a0c488cad3fde2f37d00885d36d3b795b9f93d23a6728c42ee8d6027c56cf979ba4c229fdb01d234944f8ac433650112c3cf0f02844e888a3569dfef7828a8a884589aa055e +D = 9efb87ddc61d43c482ba66e1b143aef678fbd0d1bebc2000941fabe677fe5b706bf78fce36d100b17cc787ead74bbca2 +MyQ = 044c34efee8f0c95565d2065d1bbac2a2dd25ae964320eb6bccedc5f3a9b42a881a1afca1bb6b880584fa27b01c193cd92d8fb01dbf7cd0a3868c26b951f393c3c56c2858cee901f7793ff5d271925d13a41f8e52409f4eba1990f33acb0bac669 +Output = bb3b1eda9c6560d82ff5bee403339f1e80342338a991344853b56b24f109a4d94b92f654f0425edd4c205903d7586104 + +Curve = P-384 +PeerQ = 048eeea3a319c8df99fbc29cb55f243a720d95509515ee5cc587a5c5ae22fbbd009e626db3e911def0b99a4f7ae304b1ba73877dc94db9adddc0d9a4b24e8976c22d73c844370e1ee857f8d1b129a3bd5f63f40caf3bd0533e38a5f5777074ff9e +D = d787a57fde22ec656a0a525cf3c738b30d73af61e743ea90893ecb2d7b622add2f94ee25c2171467afb093f3f84d0018 +MyQ = 04171546923b87b2cbbad664f01ce932bf09d6a6118168678446bfa9f0938608cb4667a98f4ec8ac1462285c2508f74862fa41cb4db68ae71f1f8a3e8939dc52c2dec61a83c983beb2a02baf29ec49278088882ed0cf56c74b5c173b552ccf63cf +Output = 1e97b60add7cb35c7403dd884c0a75795b7683fff8b49f9d8672a8206bfdcf0a106b8768f983258c74167422e44e4d14 + +Curve = P-384 +PeerQ = 04a721f6a2d4527411834b13d4d3a33c29beb83ab7682465c6cbaf6624aca6ea58c30eb0f29dd842886695400d7254f20f14ba6e26355109ad35129366d5e3a640ae798505a7fa55a96a36b5dad33de00474f6670f522214dd7952140ab0a7eb68 +D = 83d70f7b164d9f4c227c767046b20eb34dfc778f5387e32e834b1e6daec20edb8ca5bb4192093f543b68e6aeb7ce788b +MyQ = 0457cd770f3bbcbe0c78c770eab0b169bc45e139f86378ffae1c2b16966727c2f2eb724572b8f3eb228d130db4ff862c637ec5c8813b685558d83e924f14bc719f6eb7ae0cbb2c474227c5bda88637a4f26c64817929af999592da6f787490332f +Output = 1023478840e54775bfc69293a3cf97f5bc914726455c66538eb5623e218feef7df4befa23e09d77145ad577db32b41f9 + +Curve = P-384 +PeerQ = 04d882a8505c2d5cb9b8851fc676677bb0087681ad53faceba1738286b45827561e7da37b880276c656cfc38b32ade847e34b314bdc134575654573cffaf40445da2e6aaf987f7e913cd4c3091523058984a25d8f21da8326192456c6a0fa5f60c +D = 8f558e05818b88ed383d5fca962e53413db1a0e4637eda194f761944cbea114ab9d5da175a7d57882550b0e432f395a9 +MyQ = 049a2f57f4867ce753d72b0d95195df6f96c1fae934f602efd7b6a54582f556cfa539d89005ca2edac08ad9b72dd1f60bad9b94ee82da9cc601f346044998ba387aee56404dc6ecc8ab2b590443319d0b2b6176f9d0eac2d44678ed561607d09a9 +Output = 6ad6b9dc8a6cf0d3691c501cbb967867f6e4bbb764b60dbff8fcff3ed42dbba39d63cf325b4b4078858495ddee75f954 + +Curve = P-384 +PeerQ = 04815c9d773dbf5fb6a1b86799966247f4006a23c92e68c55e9eaa998b17d8832dd4d84d927d831d4f68dac67c6488219fe79269948b2611484560fd490feec887cb55ef99a4b524880fa7499d6a07283aae2afa33feab97deca40bc606c4d8764 +D = 0f5dee0affa7bbf239d5dff32987ebb7cf84fcceed643e1d3c62d0b3352aec23b6e5ac7fa4105c8cb26126ad2d1892cb +MyQ = 0423346bdfbc9d7c7c736e02bdf607671ff6082fdd27334a8bc75f3b23681ebe614d0597dd614fae58677c835a9f0b273b82ba36290d2f94db41479eb45ab4eaf67928a2315138d59eecc9b5285dfddd6714f77557216ea44cc6fc119d8243efaf +Output = cc9e063566d46b357b3fcae21827377331e5e290a36e60cd7c39102b828ae0b918dc5a02216b07fe6f1958d834e42437 + +Curve = P-384 +PeerQ = 041c0eeda7a2be000c5bdcda0478aed4db733d2a9e341224379123ad847030f29e3b168fa18e89a3c0fba2a6ce1c28fc3bec8c1c83c118c4dbea94271869f2d868eb65e8b44e21e6f14b0f4d9b38c068daefa27114255b9a41d084cc4a1ad85456 +D = 037b633b5b8ba857c0fc85656868232e2febf59578718391b81da8541a00bfe53c30ae04151847f27499f8d7abad8cf4 +MyQ = 048878ac8a947f7d5cb2b47aad24fbb8210d86126585399a2871f84aa9c5fde3074ae540c6bf82275ca822d0feb862bc74632f5cd2f900c2711c32f8930728eb647d31edd8d650f9654e7d33e5ed1b475489d08daa30d8cbcba6bfc3b60d9b5a37 +Output = deff7f03bd09865baf945e73edff6d5122c03fb561db87dec8662e09bed4340b28a9efe118337bb7d3d4f7f568635ff9 + +Curve = P-384 +PeerQ = 04c95c185e256bf997f30b311548ae7f768a38dee43eeeef43083f3077be70e2bf39ac1d4daf360c514c8c6be623443d1a3e63a663eaf75d8a765ab2b9a35513d7933fa5e26420a5244550ec6c3b6f033b96db2aca3d6ac6aab052ce929595aea5 +D = e3d07106bedcc096e7d91630ffd3094df2c7859db8d7edbb2e37b4ac47f429a637d06a67d2fba33838764ef203464991 +MyQ = 04e74a1a2b85f1cbf8dbbdf050cf1aff8acb02fda2fb6591f9d3cfe4e79d0ae938a9c1483e7b75f8db24505d65065cdb181773ee591822f7abaa856a1a60bc0a5203548dbd1cb5025466eff8481bd07614eaa04a16c3db76905913e972a5b6b59d +Output = c8b1038f735ad3bb3e4637c3e47eab487637911a6b7950a4e461948329d3923b969e5db663675623611a457fcda35a71 + +Curve = P-384 +PeerQ = 043497238a7e6ad166df2dac039aa4dac8d17aa925e7c7631eb3b56e3aaa1c545fcd54d2e5985807910fb202b1fc191d2aa49e5c487dcc7aa40a8f234c979446040d9174e3ad357d404d7765183195aed3f913641b90c81a306ebf0d8913861316 +D = f3f9b0c65a49a506632c8a45b10f66b5316f9eeb06fae218f2da62333f99905117b141c760e8974efc4af10570635791 +MyQ = 04a4ad77aa7d86e5361118a6b921710c820721210712f4c347985fdee58aa4effa1e28be80a17b120b139f96300f89b49b1ddf22e07e03f1560d8f45a480094560dba9fae7f9531130c1b57ebb95982496524f31d3797793396fa823f22bdb4328 +Output = d337eaa32b9f716b8747b005b97a553c59dab0c51df41a2d49039cdae705aa75c7b9e7bc0b6a0e8c578c902bc4fff23e + +Curve = P-384 +PeerQ = 0490a34737d45b1aa65f74e0bd0659bc118f8e4b774b761944ffa6573c6df4f41dec0d11b697abd934d390871d4b4532409b590719bb3307c149a7817be355d684893a307764b512eeffe07cb699edb5a6ffbf8d6032e6c79d5e93e94212c2aa4e +D = 59fce7fad7de28bac0230690c95710c720e528f9a4e54d3a6a8cd5fc5c5f21637031ce1c5b4e3d39647d8dcb9b794664 +MyQ = 049c43bf971edf09402876ee742095381f78b1bd3aa39b5132af75dbfe7e98bd78bde10fe2e903c2b6379e1deee175a1b0a6c58ecea5a477bb01bd543b339f1cc49f1371a2cda4d46eb4e53e250597942351a99665a122ffea9bde0636c375daf2 +Output = 32d292b695a4488e42a7b7922e1ae537d76a3d21a0b2e36875f60e9f6d3e8779c2afb3a413b9dd79ae18e70b47d337c1 + +Curve = P-384 +PeerQ = 04dda546acfc8f903d11e2e3920669636d44b2068aeb66ff07aa266f0030e1535b0ed0203cb8a460ac990f1394faf22f1d15bbb2597913035faadf413476f4c70f7279769a40c986f470c427b4ee4962abdf8173bbad81874772925fd32f0b159f +D = 3e49fbf950a424c5d80228dc4bc35e9f6c6c0c1d04440998da0a609a877575dbe437d6a5cedaa2ddd2a1a17fd112aded +MyQ = 045a949594228b1a3d6f599eb3db0d06070fbc551c657b58234ba164ce3fe415fa5f3eb823c08dc29b8c341219c77b6b3d2baad447c8c290cfed25edd9031c41d0b76921457327f42db31122b81f337bbf0b1039ec830ce9061a3761953c75e4a8 +Output = 1220e7e6cad7b25df98e5bbdcc6c0b65ca6c2a50c5ff6c41dca71e475646fd489615979ca92fb4389aeadefde79a24f1 + +Curve = P-384 +PeerQ = 04788be2336c52f4454d63ee944b1e49bfb619a08371048e6da92e584eae70bde1f171c4df378bd1f3c0ab03048a2378024673ebd8db604eaf41711748bab2968a23ca4476ce144e728247f08af752929157b5830f1e26067466bdfa8b65145a33 +D = 50ccc1f7076e92f4638e85f2db98e0b483e6e2204c92bdd440a6deea04e37a07c6e72791c190ad4e4e86e01efba84269 +MyQ = 04756c07df0ce32c839dac9fb4733c9c28b70113a676a7057c38d223f22a3a9095a8d564653af528e04c7e1824be4a651217c2ce6962cbd2a2e066297b39d57dd9bb4680f0191d390f70b4e461419b2972ce68ad46127fdda6c39195774ea86df3 +Output = 793bb9cd22a93cf468faf804a38d12b78cb12189ec679ddd2e9aa21fa9a5a0b049ab16a23574fe04c1c3c02343b91beb + +Curve = P-384 +PeerQ = 04d09bb822eb99e38060954747c82bb3278cf96bbf36fece3400f4c873838a40c135eb3babb9293bd1001bf3ecdee7bf26d416db6e1b87bbb7427788a3b6c7a7ab2c165b1e366f9608df512037584f213a648d47f16ac326e19aae972f63fd76c9 +D = 06f132b71f74d87bf99857e1e4350a594e5fe35533b888552ceccbc0d8923c902e36141d7691e28631b8bc9bafe5e064 +MyQ = 042a3cc6b8ff5cde926e7e3a189a1bd029c9b586351af8838f4f201cb8f4b70ef3b0da06d352c80fc26baf8f42b784459ebf9985960176da6d23c7452a2954ffcbbcb24249b43019a2a023e0b3dabd461f19ad3e775c364f3f11ad49f3099400d3 +Output = 012d191cf7404a523678c6fc075de8285b243720a903047708bb33e501e0dbee5bcc40d7c3ef6c6da39ea24d830da1e8 + +Curve = P-384 +PeerQ = 0413741262ede5861dad71063dfd204b91ea1d3b7c631df68eb949969527d79a1dc59295ef7d2bca6743e8cd77b04d1b580baaeadc7e19d74a8a04451a135f1be1b02fe299f9dc00bfdf201e83d995c6950bcc1cb89d6f7b30bf54656b9a4da586 +D = 12048ebb4331ec19a1e23f1a2c773b664ccfe90a28bfb846fc12f81dff44b7443c77647164bf1e9e67fd2c07a6766241 +MyQ = 04bc18836bc7a9fdf54b5352f37d7528ab8fa8ec544a8c6180511cbfdd49cce377c39e34c031b5240dc9980503ed2f262c8086cbe338191080f0b7a16c7afc4c7b0326f9ac66f58552ef4bb9d24de3429ed5d3277ed58fcf48f2b5f61326bec6c6 +Output = ad0fd3ddffe8884b9263f3c15fe1f07f2a5a22ffdc7e967085eea45f0cd959f20f18f522763e28bcc925e496a52dda98 + +Curve = P-384 +PeerQ = 049e22cbc18657f516a864b37b783348b66f1aa9626cd631f4fa1bd32ad88cf11db52057c660860d39d11fbf024fabd4446b0d53c79681c28116df71e9cee74fd56c8b7f04b39f1198cc72284e98be9562e35926fb4f48a9fbecafe729309e8b6f +D = 34d61a699ca576169fcdc0cc7e44e4e1221db0fe63d16850c8104029f7d48449714b9884328cae189978754ab460b486 +MyQ = 04867f81104ccd6b163a7902b670ef406042cb0cce7dcdc63d1dfc91b2c40e3cdf7595834bf9eceb79849f1636fc8462fc9d4bde8e875ec49697d258d1d59465f8431c6f5531e1c59e9f9ebe3cf164a8d9ce10a12f1979283a959bad244dd83863 +Output = dc4ca392dc15e20185f2c6a8ea5ec31dfc96f56153a47394b3072b13d0015f5d4ae13beb3bed54d65848f9b8383e6c95 + +Curve = P-384 +PeerQ = 042db5da5f940eaa884f4db5ec2139b0469f38e4e6fbbcc52df15c0f7cf7fcb1808c749764b6be85d2fdc5b16f58ad5dc022e8b02dcf33e1b5a083849545f84ad5e43f77cb71546dbbac0d11bdb2ee202e9d3872e8d028c08990746c5e1dde9989 +D = dc60fa8736d702135ff16aab992bb88eac397f5972456c72ec447374d0d8ce61153831bfc86ad5a6eb5b60bfb96a862c +MyQ = 04b69beede85d0f829fec1b893ccb9c3e052ff692e13b974537bc5b0f9feaf7b22e84f03231629b24866bdb4b8cf90891466f85e2bfcaba2843285b0e14ebc07ef7dafff8b424416fee647b59897b619f20eed95a632e6a4206bf7da429c04c560 +Output = d765b208112d2b9ed5ad10c4046e2e3b0dbf57c469329519e239ac28b25c7d852bf757d5de0ee271cadd021d86cfd347 + +Curve = P-384 +PeerQ = 04329647baa354224eb4414829c5368c82d7893b39804e08cbb2180f459befc4b347a389a70c91a23bd9d30c83be5295d3cc8f61923fad2aa8e505d6cfa126b9fabd5af9dce290b75660ef06d1caa73681d06089c33bc4246b3aa30dbcd2435b12 +D = 6fa6a1c704730987aa634b0516a826aba8c6d6411d3a4c89772d7a62610256a2e2f289f5c3440b0ec1e70fa339e251ce +MyQ = 0453de1fc1328e8de14aecab29ad8a40d6b13768f86f7d298433d20fec791f86f8bc73f358098b256a298bb488de257bf4ac28944fd27f17b82946c04c66c41f0053d3692f275da55cd8739a95bd8cd3af2f96e4de959ea8344d8945375905858b +Output = d3778850aeb58804fbe9dfe6f38b9fa8e20c2ca4e0dec335aafceca0333e3f2490b53c0c1a14a831ba37c4b9d74be0f2 + +Curve = P-384 +PeerQ = 0429d8a36d22200a75b7aea1bb47cdfcb1b7fd66de967041434728ab5d533a060df732130600fe6f75852a871fb2938e39e19b53db528395de897a45108967715eb8cb55c3fcbf23379372c0873a058d57544b102ecce722b2ccabb1a603774fd5 +D = 74ad8386c1cb2ca0fcdeb31e0869bb3f48c036afe2ef110ca302bc8b910f621c9fcc54cec32bb89ec7caa84c7b8e54a8 +MyQ = 0427a3e83cfb9d5122e73129d801615857da7cc089cccc9c54ab3032a19e0a0a9f677346e37f08a0b3ed8da6e5dd6910638d60e44aa5e0fd30c918456796af37f0e41957901645e5c596c6d989f5859b03a0bd7d1f4e77936fff3c74d204e5388e +Output = 81e1e71575bb4505498de097350186430a6242fa6c57b85a5f984a23371123d2d1424eefbf804258392bc723e4ef1e35 + + +# Test vectors from NIST where the peer's public key validation fails. +# +# These vectors were taken from the file +# KASValidityTest_ECCEphemeralUnified_KDFConcat_NOKC_init.fax in +# http://csrc.nist.gov/groups/STM/cavp/documents/keymgmt/KASTestVectorsECC2014.zip +# accessible via +# http://csrc.nist.gov/groups/STM/cavp/key-establishment.html#test-vectors. +# +# Only the test vectors where the test fails because the peer's public key is +# invalid are included here. Supporting the other vectors would require +# implementing an entire key exchange protocol; since the omitted test vectors +# don't seem to stress any *edge cases* of the *ECDH* step of the key exchange +# protocol, they don't seem valuable. +# +# PeerQ = (QeCAVSx, QeCAVSy) in uncompressed encoding. +# Error is the error text from the Result field. The errors reference +# "PKV 5.6.2.5" which is section 5.6.2.5 of +# http://csrc.nist.gov/publications/nistpubs/800-56A/SP800-56A_Revision1_Mar08-2007.pdf +# which is section 5.6.2.3.2/5.6.2.3.3 of +# http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar2.pdf + +# [EC - SHA-256, COUNT = 4] +Curve = P-256 +PeerQ = 04eec6ea7be0362fa496af12e551982a7d9c06b5ef735fadc37990c78ab9be87f4f45058db687e98326036c88eb846476a05385d7bda1d6dd6ca600499b7cc613f +Error = 4 - CAVS's Ephemeral public key Y fails PKV 5.6.2.5 + +# [EC - SHA-256, COUNT = 12] +Curve = P-256 +PeerQ = 0439883b3aadd78b044dadbd9be6a2cc8360da8df4241a4d11665a14e1ce17d19296d5cc675c252d902da5118245e738d57442ca042add79f1d07752bb98a7b805 +Error = 3 - CAVS's Ephemeral public key X fails PKV 5.6.2.5 + +# [EC - SHA-256, COUNT = 12] +Curve = P-256 +PeerQ = 0462ff2c3f5e165afa8dc919b7d705c862855d87869b8440c8d98db2ccb6144e3634a0335ebf64d77dc1c90fd5a5957c0d062593e8891d339f4b3616eb05018103 +Error = 3 - CAVS's Ephemeral public key X fails PKV 5.6.2.5 + +# [EC - SHA-256, COUNT = 20] +Curve = P-256 +PeerQ = 04eaa4b595bd200d3197a35fad5afbee310ac2da532237d5623e1285bdcaa2422177735e831623cd5d67b45e9ca947a48055bdc5f3cca81f75ab124c92ea62091c +Error = 4 - CAVS's Ephemeral public key Y fails PKV 5.6.2.5 + +# [EC - SHA384, COUNT = 3] +Curve = P-256 +PeerQ = 0482022f7a7507a5fdf191b7474d8503f1c2f31ef654096f28d046ff0b1f07d59406b2c2ff0fdcc2d913d6f3fbe02fded8543cd6aff9304213acc9cfd8f4d52803 +Error = 3 - CAVS's Ephemeral public key X fails PKV 5.6.2.5 + +# [EC - SHA384, COUNT = 9] +Curve = P-256 +PeerQ = 045ce1fd24f150bb8714c7c12ed1d85fb8bd597f6e4a8c27eaabd3348903abf91261941a5cd8978c1cfaf6b0f67441dcc5a3686adc7dd1e157f138c9ce48634019 +Error = 4 - CAVS's Ephemeral public key Y fails PKV 5.6.2.5 + +# [EC - SHA384, COUNT = 24] +Curve = P-256 +PeerQ = 04d441c98190cf34cff0ba0dbafbade26c4cadcd5438bb5324e136851b09c009ac14c355a01189339a5a9a4f8a8ed57d7f6537ed161882c1e6912f8e3512faad0f +Error = 3 - CAVS's Ephemeral public key X fails PKV 5.6.2.5 + +# [EC - SHA384, COUNT = 25] +Curve = P-256 +PeerQ = 048dfc7063c55a1fe8684ff6675ad4b53dab503e409c12058ab602c40c143ef84cbe0fce323492ee123e2a543b26b327139f234a08355dd60e2fc2c0babf1a10e3 +Error = 4 - CAVS's Ephemeral public key Y fails PKV 5.6.2.5 + +# [EC - SHA512, COUNT = 0] +Curve = P-256 +PeerQ = 04eb65aaefab96a190a67e566978a179826cf4e04634013f7fe1547a749f3cf6e91d89dfdf23dc14fca68c7c138e90a0d9ee7bcdded8d80e6e409c7f0041d50b80 +Error = 4 - CAVS's Ephemeral public key Y fails PKV 5.6.2.5 + +# [EC - SHA512, COUNT = 5] +Curve = P-256 +PeerQ = 040d0d6e855cd97a1b5a5e52593b8ceac553be06a19090c5442e521731c08e7fc5efa166e25741659bfa5b257a23f36e7d9f08e084610be8dfd8c6844d0ea860b9 +Error = 3 - CAVS's Ephemeral public key X fails PKV 5.6.2.5 + +# [EC - SHA512, COUNT = 26] +Curve = P-256 +PeerQ = 047417e66bbf708b258079648e1a9500d969f2d3860bd606054b611bc853228a324aade59d9ffb73cec6083887f5887c0306deb68e6aa984bbdad141635d078e79 +Error = 3 - CAVS's Ephemeral public key X fails PKV 5.6.2.5 + +# [EC - SHA512, COUNT = 29] +Curve = P-256 +PeerQ = 04d9313d9b7c9abebba2d4cb3c05e3393bd5da667efa74c9d4cc33d2e54446d8d9904240a61c8d7f5ff2028041a81e1408451f4c0e0a18fcf33557546dfc380a06 +Error = 4 - CAVS's Ephemeral public key Y fails PKV 5.6.2.5 + + +# [ED - SHA384, COUNT = 1] +Curve = P-384 +PeerQ = 04eed1bfbefb4c3b568ba187893d0d66f0a266928e57f5903213690cfe55660ce86d7eccf9ad1503932c31ab23917bc759a6e69055c5b84ccd92a414b84283bf89ebb85a850f03e02016a12ff22a4af6f80dd3900f68153b81e02c3f0c3d045d69 +Error = 3 - CAVS's Ephemeral public key X fails PKV 5.6.2.5 + +# [ED - SHA384, COUNT = 2] +Curve = P-384 +PeerQ = 04f081e7e14fcfbf38e3780f57822e8255452e96c673e4b49ebda246b0a5dbca279935e5b31f94eff8ac753aecc810f5ac4dd779b89b0fb7460fe0c50d90006fc5ad7a7a31fe6b827ec059c3b22b40611dbad54c75e653bbdb408fe2e5e24246ae +Error = 4 - CAVS's Ephemeral public key Y fails PKV 5.6.2.5 + +# [ED - SHA384, COUNT = 19] +Curve = P-384 +PeerQ = 0412159e7a89210ff0a5f723904a10c2425a13cfe9016b65cdb48285ec27912b66e415079ced48c94e707963bf5af66cd6ca8c934a135d8d3607f5792b63f127056e715eb4deabd501e6d3e3cfb6eb554c684c10c4a2b31df16fb8d9082131fa09 +Error = 4 - CAVS's Ephemeral public key Y fails PKV 5.6.2.5 + +# [ED - SHA384, COUNT = 28] +Curve = P-384 +PeerQ = 04a308a4cadf229c47fd74de1d1b6e07722ed87fa7506a0ddb8eb2060ca0f93ced5973a76d9e622b7519142ec41969a825fbb34034f8a6ead96a600281a01306b1a8d9a3148e4fb2e9727a4cec6a62b16690f3480a96a5f42dee895a2d456eb0f2 +Error = 3 - CAVS's Ephemeral public key X fails PKV 5.6.2.5 + +# [ED - SHA512, COUNT = 11] +Curve = P-384 +PeerQ = 04ca8e02c55ea6756f5f65d213649c400296a6961d37947025f9d448042ed9c1f3da4e88842f64c1e8a5c2215d57e16cb0697b0923dc80e38fca5381b9a9d59c6f29337adcc7ff183cbb42f267956d130b0b53cb51ba459731001a39093b97db8c +Error = 3 - CAVS's Ephemeral public key X fails PKV 5.6.2.5 + +# [ED - SHA512, COUNT = 13] +Curve = P-384 +PeerQ = 045cb621e4a2186b552961cb7fa8e8191d21335c8fbf2eff27cc44f27a3ae5aa4d000c146279979cbe2cd901ee1619494abd0f8333b8ad65f621271c30386cb455bd66fde88705c57490638c3a6b73c27c4982eba177b0fb867d253d4fccac2361 +Error = 4 - CAVS's Ephemeral public key Y fails PKV 5.6.2.5 + +# [ED - SHA512, COUNT = 20] +Curve = P-384 +PeerQ = 04fd2a7437151a1df4949386fccec7509d731c36dc7ceae03c1ecd9b2b2a413853f5fe2066b4a52082a0a538b0536f6df670132a719f37a02a8fa12ed714876b17fe4d923abe50e7dd371172293336921229fcd44376dd52a2969f459c4a95f11f +Error = 4 - CAVS's Ephemeral public key Y fails PKV 5.6.2.5 + +# [ED - SHA512, COUNT = 28] +Curve = P-384 +PeerQ = 0432d3118ba89149e3f75623098a258d5df0706730a256ee257e04b0a39cf8dfb631c4e31f476d40e538798048dc641138081f05d14000f9dcf2c98245951b6ab55ab9b4687eb36e3aae5391c3c3a0aefff41aebebc6bf027d268aa3153a017bd6 +Error = 3 - CAVS's Ephemeral public key X fails PKV 5.6.2.5 diff --git a/vendor/ring/tests/constant_time_tests.rs b/vendor/ring/tests/constant_time_tests.rs new file mode 100644 index 00000000..422ab2c8 --- /dev/null +++ b/vendor/ring/tests/constant_time_tests.rs @@ -0,0 +1,82 @@ +// Copyright 2020 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +#![cfg(any(not(target_arch = "wasm32"), feature = "wasm32_c"))] +use ring::{constant_time, error, rand}; + +#[cfg(target_arch = "wasm32")] +use wasm_bindgen_test::{wasm_bindgen_test, wasm_bindgen_test_configure}; + +#[cfg(target_arch = "wasm32")] +wasm_bindgen_test_configure!(run_in_browser); + +// This logic is loosly based on BoringSSL's `TEST(ConstantTimeTest, MemCmp)`. +#[test] +#[cfg_attr(all(target_arch = "wasm32", feature = "wasm32_c"), wasm_bindgen_test)] +fn test_verify_slices_are_equal() { + let initial: [u8; 256] = rand::generate(&rand::SystemRandom::new()).unwrap().expose(); + + { + let copy = initial; + for len in 0..copy.len() { + // Not equal because the lengths do not match. + assert_eq!( + constant_time::verify_slices_are_equal(&initial, ©[..len]), + Err(error::Unspecified) + ); + // Equal lengths and equal contents. + assert_eq!( + constant_time::verify_slices_are_equal(&initial[..len], ©[..len]), + Ok(()) + ); + } + // Equal lengths and equal contents. + assert_eq!( + constant_time::verify_slices_are_equal(&initial, ©), + Ok(()) + ); + } + + for i in 0..initial.len() { + for bit in 0..8 { + let mut copy = initial; + copy[i] ^= 1u8 << bit; + + for len in 0..=initial.len() { + // We flipped at least one bit in `copy`. + assert_ne!(&initial[..], ©[..]); + + let a = &initial[..len]; + let b = ©[..len]; + + let expected_result = if i < len { + // The flipped bit is within `b` so `a` and `b` are not equal. + Err(error::Unspecified) + } else { + // The flipped bit is outside of `b` so `a` and `b` are equal. + Ok(()) + }; + assert_eq!(a == b, expected_result.is_ok()); // Sanity check. + assert_eq!( + constant_time::verify_slices_are_equal(&a, &b), + expected_result + ); + assert_eq!( + constant_time::verify_slices_are_equal(&b, &a), + expected_result + ); + } + } + } +} diff --git a/vendor/ring/tests/digest_tests.rs b/vendor/ring/tests/digest_tests.rs new file mode 100644 index 00000000..c275de70 --- /dev/null +++ b/vendor/ring/tests/digest_tests.rs @@ -0,0 +1,361 @@ +// Copyright 2015-2017 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use ring::{digest, test, test_file}; + +#[cfg(target_arch = "wasm32")] +use wasm_bindgen_test::{wasm_bindgen_test, wasm_bindgen_test_configure}; + +#[cfg(target_arch = "wasm32")] +wasm_bindgen_test_configure!(run_in_browser); + +/// Test vectors from BoringSSL, Go, and other sources. +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +fn digest_misc() { + test::run(test_file!("digest_tests.txt"), |section, test_case| { + assert_eq!(section, ""); + let digest_alg = test_case.consume_digest_alg("Hash").unwrap(); + let input = test_case.consume_bytes("Input"); + let repeat = test_case.consume_usize("Repeat"); + let expected = test_case.consume_bytes("Output"); + + let mut ctx = digest::Context::new(digest_alg); + let mut data = Vec::new(); + for _ in 0..repeat { + ctx.update(&input); + data.extend(&input); + } + let actual_from_chunks = ctx.finish(); + assert_eq!(&expected, &actual_from_chunks.as_ref()); + + let actual_from_one_shot = digest::digest(digest_alg, &data); + assert_eq!(&expected, &actual_from_one_shot.as_ref()); + + Ok(()) + }); +} + +mod digest_shavs { + use ring::{digest, test}; + + fn run_known_answer_test(digest_alg: &'static digest::Algorithm, test_file: test::File) { + let section_name = &format!("L = {}", digest_alg.output_len); + test::run(test_file, |section, test_case| { + assert_eq!(section_name, section); + let len_bits = test_case.consume_usize("Len"); + + let mut msg = test_case.consume_bytes("Msg"); + // The "msg" field contains the dummy value "00" when the + // length is zero. + if len_bits == 0 { + assert_eq!(msg, &[0u8]); + msg.truncate(0); + } + + assert_eq!(msg.len() * 8, len_bits); + let expected = test_case.consume_bytes("MD"); + let actual = digest::digest(digest_alg, &msg); + assert_eq!(&expected, &actual.as_ref()); + + Ok(()) + }); + } + + macro_rules! shavs_tests { + ( $file_name:ident, $algorithm_name:ident ) => { + #[allow(non_snake_case)] + mod $algorithm_name { + use super::{run_known_answer_test, run_monte_carlo_test}; + use ring::{digest, test_file}; + + #[cfg(target_arch = "wasm32")] + use wasm_bindgen_test::wasm_bindgen_test; + + #[test] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn short_msg_known_answer_test() { + run_known_answer_test( + &digest::$algorithm_name, + test_file!(concat!( + "../third_party/NIST/SHAVS/", + stringify!($file_name), + "ShortMsg.rsp" + )), + ); + } + + #[test] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn long_msg_known_answer_test() { + run_known_answer_test( + &digest::$algorithm_name, + test_file!(concat!( + "../third_party/NIST/SHAVS/", + stringify!($file_name), + "LongMsg.rsp" + )), + ); + } + + #[test] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn monte_carlo_test() { + run_monte_carlo_test( + &digest::$algorithm_name, + test_file!(concat!( + "../third_party/NIST/SHAVS/", + stringify!($file_name), + "Monte.rsp" + )), + ); + } + } + }; + } + + fn run_monte_carlo_test(digest_alg: &'static digest::Algorithm, test_file: test::File) { + let section_name = &format!("L = {}", digest_alg.output_len); + + let mut expected_count: isize = -1; + let mut seed = Vec::with_capacity(digest_alg.output_len); + + test::run(test_file, |section, test_case| { + assert_eq!(section_name, section); + + if expected_count == -1 { + seed.extend(test_case.consume_bytes("Seed")); + expected_count = 0; + return Ok(()); + } + + assert!(expected_count >= 0); + let actual_count = test_case.consume_usize("COUNT"); + assert_eq!(expected_count as usize, actual_count); + expected_count += 1; + + let expected_md = test_case.consume_bytes("MD"); + + let mut mds = Vec::with_capacity(4); + mds.push(seed.clone()); + mds.push(seed.clone()); + mds.push(seed.clone()); + for _ in 0..1000 { + let mut ctx = digest::Context::new(digest_alg); + ctx.update(&mds[0]); + ctx.update(&mds[1]); + ctx.update(&mds[2]); + let md_i = ctx.finish(); + let _ = mds.remove(0); + mds.push(Vec::from(md_i.as_ref())); + } + let md_j = mds.last().unwrap(); + assert_eq!(&expected_md, md_j); + seed = md_j.clone(); + + Ok(()) + }); + + assert_eq!(expected_count, 100); + } + + shavs_tests!(SHA1, SHA1_FOR_LEGACY_USE_ONLY); + shavs_tests!(SHA256, SHA256); + shavs_tests!(SHA384, SHA384); + shavs_tests!(SHA512, SHA512); +} + +/// Test some ways in which `Context::update` and/or `Context::finish` +/// could go wrong by testing every combination of updating three inputs +/// that vary from zero bytes to one byte larger than the block length. +/// +/// These are not run in dev (debug) builds because they are too slow. +macro_rules! test_i_u_f { + ( $test_name:ident, $alg:expr) => { + #[cfg(not(debug_assertions))] + // TODO: #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + #[test] + fn $test_name() { + let mut input = [0; (digest::MAX_BLOCK_LEN + 1) * 3]; + let max = $alg.block_len + 1; + for i in 0..(max * 3) { + input[i] = (i & 0xff) as u8; + } + + for i in 0..max { + for j in 0..max { + for k in 0..max { + let part1 = &input[..i]; + let part2 = &input[i..(i + j)]; + let part3 = &input[(i + j)..(i + j + k)]; + + let mut ctx = digest::Context::new(&$alg); + ctx.update(part1); + ctx.update(part2); + ctx.update(part3); + let i_u_f = ctx.finish(); + + let one_shot = digest::digest(&$alg, &input[..(i + j + k)]); + + assert_eq!(i_u_f.as_ref(), one_shot.as_ref()); + } + } + } + } + }; +} +test_i_u_f!(digest_test_i_u_f_sha1, digest::SHA1_FOR_LEGACY_USE_ONLY); +test_i_u_f!(digest_test_i_u_f_sha256, digest::SHA256); +test_i_u_f!(digest_test_i_u_f_sha384, digest::SHA384); +test_i_u_f!(digest_test_i_u_f_sha512, digest::SHA512); + +/// See https://bugzilla.mozilla.org/show_bug.cgi?id=610162. This tests the +/// calculation of 8GB of the byte 123. +/// +/// You can verify the expected values in many ways. One way is +/// `python ~/p/write_big.py`, where write_big.py is: +/// +/// ```python +/// chunk = bytearray([123] * (16 * 1024)) +/// with open('tempfile', 'w') as f: +/// for i in xrange(0, 8 * 1024 * 1024 * 1024, len(chunk)): +/// f.write(chunk) +/// ``` +/// Then: +/// +/// ```sh +/// sha1sum -b tempfile +/// sha256sum -b tempfile +/// sha384sum -b tempfile +/// sha512sum -b tempfile +/// ``` +/// +/// This is not run in dev (debug) builds because it is too slow. +macro_rules! test_large_digest { + ( $test_name:ident, $alg:expr, $len:expr, $expected:expr) => { + #[cfg(not(debug_assertions))] + #[test] + // TODO: #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn $test_name() { + let chunk = vec![123u8; 16 * 1024]; + let chunk_len = chunk.len() as u64; + let mut ctx = digest::Context::new(&$alg); + let mut hashed = 0u64; + loop { + ctx.update(&chunk); + hashed += chunk_len; + if hashed >= 8u64 * 1024 * 1024 * 1024 { + break; + } + } + let calculated = ctx.finish(); + let expected: [u8; $len] = $expected; + assert_eq!(&expected[..], calculated.as_ref()); + } + }; +} + +// XXX: This test is too slow on Android ARM. +#[cfg(any(not(target_os = "android"), not(target_arch = "arm")))] +test_large_digest!( + digest_test_large_digest_sha1, + digest::SHA1_FOR_LEGACY_USE_ONLY, + 160 / 8, + [ + 0xCA, 0xC3, 0x4C, 0x31, 0x90, 0x5B, 0xDE, 0x3B, 0xE4, 0x0D, 0x46, 0x6D, 0x70, 0x76, 0xAD, + 0x65, 0x3C, 0x20, 0xE4, 0xBD + ] +); + +test_large_digest!( + digest_test_large_digest_sha256, + digest::SHA256, + 256 / 8, + [ + 0x8D, 0xD1, 0x6D, 0xD8, 0xB2, 0x5A, 0x29, 0xCB, 0x7F, 0xB9, 0xAE, 0x86, 0x72, 0xE9, 0xCE, + 0xD6, 0x65, 0x4C, 0xB6, 0xC3, 0x5C, 0x58, 0x21, 0xA7, 0x07, 0x97, 0xC5, 0xDD, 0xAE, 0x5C, + 0x68, 0xBD + ] +); +test_large_digest!( + digest_test_large_digest_sha384, + digest::SHA384, + 384 / 8, + [ + 0x3D, 0xFE, 0xC1, 0xA9, 0xD0, 0x9F, 0x08, 0xD5, 0xBB, 0xE8, 0x7C, 0x9E, 0xE0, 0x0A, 0x87, + 0x0E, 0xB0, 0xEA, 0x8E, 0xEA, 0xDB, 0x82, 0x36, 0xAE, 0x74, 0xCF, 0x9F, 0xDC, 0x86, 0x1C, + 0xE3, 0xE9, 0xB0, 0x68, 0xCD, 0x19, 0x3E, 0x39, 0x90, 0x02, 0xE1, 0x58, 0x5D, 0x66, 0xC4, + 0x55, 0x11, 0x9B + ] +); +test_large_digest!( + digest_test_large_digest_sha512, + digest::SHA512, + 512 / 8, + [ + 0xFC, 0x8A, 0x98, 0x20, 0xFC, 0x82, 0xD8, 0x55, 0xF8, 0xFF, 0x2F, 0x6E, 0xAE, 0x41, 0x60, + 0x04, 0x08, 0xE9, 0x49, 0xD7, 0xCD, 0x1A, 0xED, 0x22, 0xEB, 0x55, 0xE1, 0xFD, 0x80, 0x50, + 0x3B, 0x01, 0x2F, 0xC6, 0xF4, 0x33, 0x86, 0xFB, 0x60, 0x75, 0x2D, 0xA5, 0xA9, 0x93, 0xE7, + 0x00, 0x45, 0xA8, 0x49, 0x1A, 0x6B, 0xEC, 0x9C, 0x98, 0xC8, 0x19, 0xA6, 0xA9, 0x88, 0x3E, + 0x2F, 0x09, 0xB9, 0x9A + ] +); + +// TODO: test_large_digest!(digest_test_large_digest_sha512_256, +// digest::SHA512_256, 256 / 8, [ ... ]); + +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +fn test_fmt_algorithm() { + assert_eq!("SHA1", &format!("{:?}", digest::SHA1_FOR_LEGACY_USE_ONLY)); + assert_eq!("SHA256", &format!("{:?}", digest::SHA256)); + assert_eq!("SHA384", &format!("{:?}", digest::SHA384)); + assert_eq!("SHA512", &format!("{:?}", digest::SHA512)); + assert_eq!("SHA512_256", &format!("{:?}", digest::SHA512_256)); +} + +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +fn digest_test_fmt() { + assert_eq!( + "SHA1:b7e23ec29af22b0b4e41da31e868d57226121c84", + &format!( + "{:?}", + digest::digest(&digest::SHA1_FOR_LEGACY_USE_ONLY, b"hello, world") + ) + ); + assert_eq!( + "SHA256:09ca7e4eaa6e8ae9c7d261167129184883644d\ + 07dfba7cbfbc4c8a2e08360d5b", + &format!("{:?}", digest::digest(&digest::SHA256, b"hello, world")) + ); + assert_eq!( + "SHA384:1fcdb6059ce05172a26bbe2a3ccc88ed5a8cd5\ + fc53edfd9053304d429296a6da23b1cd9e5c9ed3bb34f0\ + 0418a70cdb7e", + &format!("{:?}", digest::digest(&digest::SHA384, b"hello, world")) + ); + assert_eq!( + "SHA512:8710339dcb6814d0d9d2290ef422285c9322b7\ + 163951f9a0ca8f883d3305286f44139aa374848e4174f5\ + aada663027e4548637b6d19894aec4fb6c46a139fbf9", + &format!("{:?}", digest::digest(&digest::SHA512, b"hello, world")) + ); + + assert_eq!( + "SHA512_256:11f2c88c04f0a9c3d0970894ad2472505e\ + 0bc6e8c7ec46b5211cd1fa3e253e62", + &format!("{:?}", digest::digest(&digest::SHA512_256, b"hello, world")) + ); +} diff --git a/vendor/ring/tests/digest_tests.txt b/vendor/ring/tests/digest_tests.txt new file mode 100644 index 00000000..804a01a0 --- /dev/null +++ b/vendor/ring/tests/digest_tests.txt @@ -0,0 +1,214 @@ +# SHA-1 tests from RFC 3174. + +Hash = SHA1 +Input = "abc" +Repeat = 1 +Output = a9993e364706816aba3e25717850c26c9cd0d89d + +Hash = SHA1 +Input = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" +Repeat = 1 +Output = 84983e441c3bd26ebaae4aa1f95129e5e54670f1 + +Hash = SHA1 +Input = "a" +Repeat = 1000000 +Output = 34aa973cd4c4daa4f61eeb2bdbad27316534016f + +Hash = SHA1 +Input = "0123456701234567012345670123456701234567012345670123456701234567" +Repeat = 10 +Output = dea356a2cddd90c7a7ecedc5ebb563934f460452 + +# SHA-256 tests from NIST. + +Hash = SHA256 +Input = "abc" +Repeat = 1 +Output = ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad + +Hash = SHA256 +Input = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" +Repeat = 1 +Output = 248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1 + +# SHA-384 tests from NIST. + +Hash = SHA384 +Input = "abc" +Repeat = 1 +Output = cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7 + +Hash = SHA384 +Input = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" +Repeat = 1 +Output = 09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039 + +# SHA-512 tests from NIST + +Hash = SHA512 +Input = "abc" +Repeat = 1 +Output = ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f + +Hash = SHA512 +Input = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" +Repeat = 1 +Output = 8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909 + +# SHA-512/256 tests from Go. + +Hash = SHA512_256 +Input = "" +Repeat = 1 +Output = c672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967a + +Hash = SHA512_256 +Input = "a" +Repeat = 1 +Output = 455e518824bc0601f9fb858ff5c37d417d67c2f8e0df2babe4808858aea830f8 + +Hash = SHA512_256 +Input = "ab" +Repeat = 1 +Output = 22d4d37ec6370571af7109fb12eae79673d5f7c83e6e677083faa3cfac3b2c14 + +Hash = SHA512_256 +Input = "abc" +Repeat = 1 +Output = 53048e2681941ef99b2e29b76b4c7dabe4c2d0c634fc6d46e0e2f13107e7af23 + +Hash = SHA512_256 +Input = "abcd" +Repeat = 1 +Output = d2891c7978be0e24948f37caa415b87cb5cbe2b26b7bad9dc6391b8a6f6ddcc9 + +Hash = SHA512_256 +Input = "abcde" +Repeat = 1 +Output = de8322b46e78b67d4431997070703e9764e03a1237b896fd8b379ed4576e8363 + +Hash = SHA512_256 +Input = "abcdef" +Repeat = 1 +Output = e4fdcb11d1ac14e698743acd8805174cea5ddc0d312e3e47f6372032571bad84 + +Hash = SHA512_256 +Input = "abcdefg" +Repeat = 1 +Output = a8117f680bdceb5d1443617cbdae9255f6900075422326a972fdd2f65ba9bee3 + +Hash = SHA512_256 +Input = "abcdefgh" +Repeat = 1 +Output = a29b9645d2a02a8b582888d044199787220e316bf2e89d1422d3df26bf545bbe + +Hash = SHA512_256 +Input = "abcdefghi" +Repeat = 1 +Output = b955095330f9c8188d11884ec1679dc44c9c5b25ff9bda700416df9cdd39188f + +Hash = SHA512_256 +Input = "abcdefghij" +Repeat = 1 +Output = 550762913d51eefbcd1a55068fcfc9b154fd11c1078b996df0d926ea59d2a68d + +Hash = SHA512_256 +Input = "Discard medicine more than two years old." +Repeat = 1 +Output = 690c8ad3916cefd3ad29226d9875965e3ee9ec0d4482eacc248f2ff4aa0d8e5b + +Hash = SHA512_256 +Input = "He who has a shady past knows that nice guys finish last." +Repeat = 1 +Output = 25938ca49f7ef1178ce81620842b65e576245fcaed86026a36b516b80bb86b3b + +Hash = SHA512_256 +Input = "I wouldn't marry him with a ten foot pole." +Repeat = 1 +Output = 698e420c3a7038e53d8e73f4be2b02e03b93464ac1a61ebe69f557079921ef65 + +Hash = SHA512_256 +Input = "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave" +Repeat = 1 +Output = 839b414d7e3900ee243aa3d1f9b6955720e64041f5ab9bedd3eb0a08da5a2ca8 + +Hash = SHA512_256 +Input = "The days of the digital watch are numbered. -Tom Stoppard" +Repeat = 1 +Output = 5625ecb9d284e54c00b257b67a8cacb25a78db2845c60ef2d29e43c84f236e8e + +Hash = SHA512_256 +Input = "Nepal premier won't resign." +Repeat = 1 +Output = 9b81d06bca2f985e6ad3249096ff3c0f2a9ec5bb16ef530d738d19d81e7806f2 + +Hash = SHA512_256 +Input = "For every action there is an equal and opposite government program." +Repeat = 1 +Output = 08241df8d91edfcd68bb1a1dada6e0ae1475a5c6e7b8f12d8e24ca43a38240a9 + +Hash = SHA512_256 +Input = "His money is twice tainted: 'taint yours and 'taint mine." +Repeat = 1 +Output = 4ff74d9213a8117745f5d37b5353a774ec81c5dfe65c4c8986a56fc01f2c551e + +Hash = SHA512_256 +Input = "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977" +Repeat = 1 +Output = b5baf747c307f98849ec881cf0d48605ae4edd386372aea9b26e71db517e650b + +Hash = SHA512_256 +Input = "It's a tiny change to the code and not completely disgusting. - Bob Manchek" +Repeat = 1 +Output = 7eef0538ebd7ecf18611d23b0e1cd26a74d65b929a2e374197dc66e755ca4944 + +Hash = SHA512_256 +Input = "size: a.out: bad magic" +Repeat = 1 +Output = d05600964f83f55323104aadab434f32391c029718a7690d08ddb2d7e8708443 + +Hash = SHA512_256 +Input = "The major problem is with sendmail. -Mark Horton" +Repeat = 1 +Output = 53ed5f9b5c0b674ac0f3425d9f9a5d462655b07cc90f5d0f692eec093884a607 + +Hash = SHA512_256 +Input = "Give me a rock, paper and scissors and I will move the world. CCFestoon" +Repeat = 1 +Output = 5a0147685a44eea2435dbd582724efca7637acd9c428e5e1a05115bc3bc2a0e0 + +Hash = SHA512_256 +Input = "If the enemy is within range, then so are you." +Repeat = 1 +Output = 1152c9b27a99dbf4057d21438f4e63dd0cd0977d5ff12317c64d3b97fcac875a + +Hash = SHA512_256 +Input = "It's well we cannot hear the screams/That we create in others' dreams." +Repeat = 1 +Output = 105e890f5d5cf1748d9a7b4cdaf58b69855779deebc2097747c2210a17b2cb51 + +Hash = SHA512_256 +Input = "You remind me of a TV show, but that's all right: I watch it anyway." +Repeat = 1 +Output = 74644ead770da1434365cd912656fe1aca2056d3039d39f10eb1151bddb32cf3 + +Hash = SHA512_256 +Input = "C is as portable as Stonehedge!!" +Repeat = 1 +Output = 50a234625de5587581883dad9ef399460928032a5ea6bd005d7dc7b68d8cc3d6 + +Hash = SHA512_256 +Input = "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley" +Repeat = 1 +Output = a7a3846005f8a9935a0a2d43e7fd56d95132a9a3609bf3296ef80b8218acffa0 + +Hash = SHA512_256 +Input = "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule" +Repeat = 1 +Output = 688ff03e367680757aa9906cb1e2ad218c51f4526dc0426ea229a5ba9d002c69 + +Hash = SHA512_256 +Input = "How can you write a big system without C++? -Paul Glick" +Repeat = 1 +Output = 3fa46d52094b01021cff5af9a438982b887a5793f624c0a6644149b6b7c3f485 diff --git a/vendor/ring/tests/ecdsa_from_pkcs8_tests.txt b/vendor/ring/tests/ecdsa_from_pkcs8_tests.txt new file mode 100644 index 00000000..f78288ca --- /dev/null +++ b/vendor/ring/tests/ecdsa_from_pkcs8_tests.txt @@ -0,0 +1,43 @@ +Curve = P-256 +Input = 308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b0201010420090460075f15d2a256248000fb02d83ad77593dde4ae59fc5e96142dffb2bd07a14403420004cf0d13a3a7577231ea1b66cf4021cd54f21f4ac4f5f2fdd28e05bc7d2bd099d1374cd08d2ef654d6f04498db462f73e0282058dd661a4c9b0437af3f7af6e724 + +Curve = P-384 +Input = 3081b6020100301006072a8648ce3d020106052b8104002204819e30819b0201010430fc0603810412769beeabbf97ce9764e104bca45b3b7428006fb42d1fa69a344bf475ce17bf06daf553c4eccffcfecc26a1640362000417e425506a81d85e607a3caeaccbe6cc7ef58b559115b9867175ef9911f66ea77eb5b7f43e42f3129a1fe2841f6717ed4fc02bf8cfe2d10cac06a150dcba7ae9f035ec9b6b034a4ddc554da7c2da4719a1d990097fbb451a3ea1e664fc444cfa + +# A P-256 key where the ECPrivateKey contains a parameters field that matches the PKCS#8 algorithm identifier. +Curve = P-256 +Input = 308193020100301306072a8648ce3d020106082a8648ce3d030107047930770201010420090460075f15d2a256248000fb02d83ad77593dde4ae59fc5e96142dffb2bd07a00a06082a8648ce3d030107a14403420004cf0d13a3a7577231ea1b66cf4021cd54f21f4ac4f5f2fdd28e05bc7d2bd099d1374cd08d2ef654d6f04498db462f73e0282058dd661a4c9b0437af3f7af6e724 + +# A P-384 key where the ECPrivateKey contains a parameters field identifying P-384. +Curve = P-384 +Input = 3081bf020100301006072a8648ce3d020106052b810400220481a73081a40201010430fc0603810412769beeabbf97ce9764e104bca45b3b7428006fb42d1fa69a344bf475ce17bf06daf553c4eccffcfecc26a00706052b81040022a1640362000417e425506a81d85e607a3caeaccbe6cc7ef58b559115b9867175ef9911f66ea77eb5b7f43e42f3129a1fe2841f6717ed4fc02bf8cfe2d10cac06a150dcba7ae9f035ec9b6b034a4ddc554da7c2da4719a1d990097fbb451a3ea1e664fc444cfa + +# A P-256 key where the ECPrivateKey contains a parameters field identifying P-384. +Curve = P-256 +Input = 308190020100301306072a8648ce3d020106082a8648ce3d030107047630740201010420090460075f15d2a256248000fb02d83ad77593dde4ae59fc5e96142dffb2bd07a00706052b81040022a14403420004cf0d13a3a7577231ea1b66cf4021cd54f21f4ac4f5f2fdd28e05bc7d2bd099d1374cd08d2ef654d6f04498db462f73e0282058dd661a4c9b0437af3f7af6e724 +Error = WrongAlgorithm + +# A P-256 key where the ECPrivateKey contains a parameters field containing an entire AlgorithmIdentifier. +Curve = P-256 +Input = 3081a0020100301306072a8648ce3d020106082a8648ce3d0301070481853081820201010420090460075f15d2a256248000fb02d83ad77593dde4ae59fc5e96142dffb2bd07a015301306072a8648ce3d020106082a8648ce3d030107a14403420004cf0d13a3a7577231ea1b66cf4021cd54f21f4ac4f5f2fdd28e05bc7d2bd099d1374cd08d2ef654d6f04498db462f73e0282058dd661a4c9b0437af3f7af6e724 +Error = WrongAlgorithm + +# The curve P-256 is encoded explicitly, instead of as a reference to a named curve. +Curve = P-256 +Input = 308201220201010420c6c1aada15b07661f8142c6caf0fdb241aff2efe46c0938b74f2bcc53052b077a081fa3081f7020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff305b0420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b031500c49d360886e704936a6678e1139d26b7819f7e900441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101 +Error = InvalidEncoding + +# A valid PKCS#8 P-256 private key, but without the public key in the ECPrivateKey. +Curve = P-256 +Input = 308141020100301306072a8648ce3d020106082a8648ce3d030107042730250201010420090460075f15d2a256248000fb02d83ad77593dde4ae59fc5e96142dffb2bd07 +Error = InvalidEncoding + +# The AlgorithmIdentifier is ecPublicKey w/ P-256, but it's an RSAPrivateKey. +Curve = P-256 +Input = 308189020100301306072A8648CE3D020106082A8648CE3D0301070500046d306b0201010420090460075f15d2a256248000fb02d83ad77593dde4ae59fc5e96142dffb2bd07a14403420004cf0d13a3a7577231ea1b66cf4021cd54f21f4ac4f5f2fdd28e05bc7d2bd099d1374cd08d2ef654d6f04498db462f73e0282058dd661a4c9b0437af3f7af6e724 +Error = InvalidEncoding + +# A P-256 ECPrivateKey, but the AlgorithmIdentifier is rsaEncryption. +Curve = P-256 +Input = 308181020100300d06092a864886f70d0101010500046d306b0201010420090460075f15d2a256248000fb02d83ad77593dde4ae59fc5e96142dffb2bd07a14403420004cf0d13a3a7577231ea1b66cf4021cd54f21f4ac4f5f2fdd28e05bc7d2bd099d1374cd08d2ef654d6f04498db462f73e0282058dd661a4c9b0437af3f7af6e724 +Error = WrongAlgorithm diff --git a/vendor/ring/tests/ecdsa_test_private_key_p256.p8 b/vendor/ring/tests/ecdsa_test_private_key_p256.p8 new file mode 100644 index 00000000..bc118842 Binary files /dev/null and b/vendor/ring/tests/ecdsa_test_private_key_p256.p8 differ diff --git a/vendor/ring/tests/ecdsa_test_public_key_p256.der b/vendor/ring/tests/ecdsa_test_public_key_p256.der new file mode 100644 index 00000000..ce3e6d7e --- /dev/null +++ b/vendor/ring/tests/ecdsa_test_public_key_p256.der @@ -0,0 +1 @@ +üf˜£ã#ePÄÉ墳M`*eÒ“‘P«3èM¼ƒø¦¦¹“?5«Y$^[Zzõܧk3Ëç®îY³Ê5 ëõ.Í \ No newline at end of file diff --git a/vendor/ring/tests/ecdsa_test_public_key_p256_debug.txt b/vendor/ring/tests/ecdsa_test_public_key_p256_debug.txt new file mode 100644 index 00000000..b590fc84 --- /dev/null +++ b/vendor/ring/tests/ecdsa_test_public_key_p256_debug.txt @@ -0,0 +1 @@ +PublicKey("04fc116698a3e3236550c4c9efa9bd4d0619602a65d2930e9150ab33e84dbc83f8a6a6b9933f35ab59245e5b5a7af5dca76b33cbe7aeee5981b3ca350bebf52ecd") \ No newline at end of file diff --git a/vendor/ring/tests/ecdsa_tests.rs b/vendor/ring/tests/ecdsa_tests.rs new file mode 100644 index 00000000..317fdbc9 --- /dev/null +++ b/vendor/ring/tests/ecdsa_tests.rs @@ -0,0 +1,314 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use ring::{ + rand, + signature::{self, KeyPair}, + test, test_file, +}; + +// ECDSA *signing* tests are in src/ec/ecdsa/signing.rs. + +#[test] +fn ecdsa_from_pkcs8_test() { + test::run( + test_file!("ecdsa_from_pkcs8_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let curve_name = test_case.consume_string("Curve"); + let ((this_fixed, this_asn1), (other_fixed, other_asn1)) = match curve_name.as_str() { + "P-256" => ( + ( + &signature::ECDSA_P256_SHA256_FIXED_SIGNING, + &signature::ECDSA_P256_SHA256_ASN1_SIGNING, + ), + ( + &signature::ECDSA_P384_SHA384_FIXED_SIGNING, + &signature::ECDSA_P384_SHA384_ASN1_SIGNING, + ), + ), + "P-384" => ( + ( + &signature::ECDSA_P384_SHA384_FIXED_SIGNING, + &signature::ECDSA_P384_SHA384_ASN1_SIGNING, + ), + ( + &signature::ECDSA_P256_SHA256_FIXED_SIGNING, + &signature::ECDSA_P256_SHA256_ASN1_SIGNING, + ), + ), + _ => unreachable!(), + }; + + let input = test_case.consume_bytes("Input"); + + let error = test_case.consume_optional_string("Error"); + + match ( + signature::EcdsaKeyPair::from_pkcs8(this_fixed, &input), + error.clone(), + ) { + (Ok(_), None) => (), + (Err(e), None) => panic!("Failed with error \"{}\", but expected to succeed", e), + (Ok(_), Some(e)) => panic!("Succeeded, but expected error \"{}\"", e), + (Err(actual), Some(expected)) => assert_eq!(format!("{}", actual), expected), + }; + + match ( + signature::EcdsaKeyPair::from_pkcs8(this_asn1, &input), + error, + ) { + (Ok(_), None) => (), + (Err(e), None) => panic!("Failed with error \"{}\", but expected to succeed", e), + (Ok(_), Some(e)) => panic!("Succeeded, but expected error \"{}\"", e), + (Err(actual), Some(expected)) => assert_eq!(format!("{}", actual), expected), + }; + + assert!(signature::EcdsaKeyPair::from_pkcs8(other_fixed, &input).is_err()); + assert!(signature::EcdsaKeyPair::from_pkcs8(other_asn1, &input).is_err()); + + Ok(()) + }, + ); +} + +// Verify that, at least, we generate PKCS#8 documents that we can read. +#[test] +fn ecdsa_generate_pkcs8_test() { + let rng = rand::SystemRandom::new(); + + for alg in &[ + &signature::ECDSA_P256_SHA256_ASN1_SIGNING, + &signature::ECDSA_P256_SHA256_FIXED_SIGNING, + &signature::ECDSA_P384_SHA384_ASN1_SIGNING, + &signature::ECDSA_P384_SHA384_FIXED_SIGNING, + ] { + let pkcs8 = signature::EcdsaKeyPair::generate_pkcs8(alg, &rng).unwrap(); + println!(); + for b in pkcs8.as_ref() { + print!("{:02x}", *b); + } + println!(); + println!(); + + #[cfg(feature = "alloc")] + let _ = signature::EcdsaKeyPair::from_pkcs8(*alg, pkcs8.as_ref()).unwrap(); + } +} + +#[test] +fn signature_ecdsa_verify_asn1_test() { + test::run( + test_file!("ecdsa_verify_asn1_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let curve_name = test_case.consume_string("Curve"); + let digest_name = test_case.consume_string("Digest"); + let msg = test_case.consume_bytes("Msg"); + let public_key = test_case.consume_bytes("Q"); + let sig = test_case.consume_bytes("Sig"); + let is_valid = test_case.consume_string("Result") == "P (0 )"; + + let alg = match (curve_name.as_str(), digest_name.as_str()) { + ("P-256", "SHA256") => &signature::ECDSA_P256_SHA256_ASN1, + ("P-256", "SHA384") => &signature::ECDSA_P256_SHA384_ASN1, + ("P-384", "SHA256") => &signature::ECDSA_P384_SHA256_ASN1, + ("P-384", "SHA384") => &signature::ECDSA_P384_SHA384_ASN1, + _ => { + panic!("Unsupported curve+digest: {}+{}", curve_name, digest_name); + } + }; + + let actual_result = + signature::UnparsedPublicKey::new(alg, &public_key).verify(&msg, &sig); + assert_eq!(actual_result.is_ok(), is_valid); + + Ok(()) + }, + ); +} + +#[test] +fn signature_ecdsa_verify_fixed_test() { + test::run( + test_file!("ecdsa_verify_fixed_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let curve_name = test_case.consume_string("Curve"); + let digest_name = test_case.consume_string("Digest"); + + let msg = test_case.consume_bytes("Msg"); + let public_key = test_case.consume_bytes("Q"); + let sig = test_case.consume_bytes("Sig"); + let expected_result = test_case.consume_string("Result"); + + let alg = match (curve_name.as_str(), digest_name.as_str()) { + ("P-256", "SHA256") => &signature::ECDSA_P256_SHA256_FIXED, + ("P-384", "SHA384") => &signature::ECDSA_P384_SHA384_FIXED, + _ => { + panic!("Unsupported curve+digest: {}+{}", curve_name, digest_name); + } + }; + + let is_valid = expected_result == "P (0 )"; + + let actual_result = + signature::UnparsedPublicKey::new(alg, &public_key).verify(&msg, &sig); + assert_eq!(actual_result.is_ok(), is_valid); + + Ok(()) + }, + ); +} + +#[test] +fn ecdsa_test_public_key_coverage() { + const PRIVATE_KEY: &[u8] = include_bytes!("ecdsa_test_private_key_p256.p8"); + const PUBLIC_KEY: &[u8] = include_bytes!("ecdsa_test_public_key_p256.der"); + const PUBLIC_KEY_DEBUG: &str = include_str!("ecdsa_test_public_key_p256_debug.txt"); + + let key_pair = signature::EcdsaKeyPair::from_pkcs8( + &signature::ECDSA_P256_SHA256_FIXED_SIGNING, + PRIVATE_KEY, + ) + .unwrap(); + + // Test `AsRef<[u8]>` + assert_eq!(key_pair.public_key().as_ref(), PUBLIC_KEY); + + // Test `Clone`. + #[allow(clippy::clone_on_copy, clippy::redundant_clone)] + let _: ::PublicKey = key_pair.public_key().clone(); + + // Test `Copy`. + let _: ::PublicKey = *key_pair.public_key(); + + // Test `Debug`. + assert_eq!(PUBLIC_KEY_DEBUG, format!("{:?}", key_pair.public_key())); + assert_eq!( + format!("EcdsaKeyPair {{ public_key: {:?} }}", key_pair.public_key()), + format!("{:?}", key_pair) + ); +} + +// This test is not a known-answer test, though it re-uses the known-answer +// test vectors. Because the nonce is randomized, the signature will be +// different each time. Because of that, here we simply verify that the +// signature verifies correctly. The known-answer tests themselves are in +// ecsda/signing.rs. +#[test] +fn signature_ecdsa_sign_fixed_sign_and_verify_test() { + let rng = rand::SystemRandom::new(); + + test::run( + test_file!("../src/ec/suite_b/ecdsa/ecdsa_sign_fixed_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let curve_name = test_case.consume_string("Curve"); + let digest_name = test_case.consume_string("Digest"); + + let msg = test_case.consume_bytes("Msg"); + let d = test_case.consume_bytes("d"); + let q = test_case.consume_bytes("Q"); + + // Ignored since the actual signature will use a randomized nonce. + let _k = test_case.consume_bytes("k"); + let _expected_result = test_case.consume_bytes("Sig"); + + let (signing_alg, verification_alg) = match (curve_name.as_str(), digest_name.as_str()) + { + ("P-256", "SHA256") => ( + &signature::ECDSA_P256_SHA256_FIXED_SIGNING, + &signature::ECDSA_P256_SHA256_FIXED, + ), + ("P-384", "SHA384") => ( + &signature::ECDSA_P384_SHA384_FIXED_SIGNING, + &signature::ECDSA_P384_SHA384_FIXED, + ), + _ => { + panic!("Unsupported curve+digest: {}+{}", curve_name, digest_name); + } + }; + + let private_key = + signature::EcdsaKeyPair::from_private_key_and_public_key(signing_alg, &d, &q) + .unwrap(); + + let signature = private_key.sign(&rng, &msg).unwrap(); + + let public_key = signature::UnparsedPublicKey::new(verification_alg, q); + assert_eq!(public_key.verify(&msg, signature.as_ref()), Ok(())); + + Ok(()) + }, + ); +} + +// This test is not a known-answer test, though it re-uses the known-answer +// test vectors. Because the nonce is randomized, the signature will be +// different each time. Because of that, here we simply verify that the +// signature verifies correctly. The known-answer tests themselves are in +// ecsda/signing.rs. +#[test] +fn signature_ecdsa_sign_asn1_test() { + let rng = rand::SystemRandom::new(); + + test::run( + test_file!("../src/ec/suite_b/ecdsa/ecdsa_sign_asn1_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let curve_name = test_case.consume_string("Curve"); + let digest_name = test_case.consume_string("Digest"); + + let msg = test_case.consume_bytes("Msg"); + let d = test_case.consume_bytes("d"); + let q = test_case.consume_bytes("Q"); + + // Ignored since the actual signature will use a randomized nonce. + let _k = test_case.consume_bytes("k"); + let _expected_result = test_case.consume_bytes("Sig"); + + let (signing_alg, verification_alg) = match (curve_name.as_str(), digest_name.as_str()) + { + ("P-256", "SHA256") => ( + &signature::ECDSA_P256_SHA256_ASN1_SIGNING, + &signature::ECDSA_P256_SHA256_ASN1, + ), + ("P-384", "SHA384") => ( + &signature::ECDSA_P384_SHA384_ASN1_SIGNING, + &signature::ECDSA_P384_SHA384_ASN1, + ), + _ => { + panic!("Unsupported curve+digest: {}+{}", curve_name, digest_name); + } + }; + + let private_key = + signature::EcdsaKeyPair::from_private_key_and_public_key(signing_alg, &d, &q) + .unwrap(); + + let signature = private_key.sign(&rng, &msg).unwrap(); + + let public_key = signature::UnparsedPublicKey::new(verification_alg, q); + assert_eq!(public_key.verify(&msg, signature.as_ref()), Ok(())); + + Ok(()) + }, + ); +} diff --git a/vendor/ring/tests/ecdsa_verify_asn1_tests.txt b/vendor/ring/tests/ecdsa_verify_asn1_tests.txt new file mode 100644 index 00000000..f25ce4a0 --- /dev/null +++ b/vendor/ring/tests/ecdsa_verify_asn1_tests.txt @@ -0,0 +1,738 @@ +# Test vectors for short values of s. + +# S is the maximum length. +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 0430345fd47ea21a11129be651b0884bfac698377611acc9f689458e13b9ed7d4b9d7599a68dcf125e7f31055ccb374cd04f6d6fd2b217438a63f6f667d50ef2f0 +Sig = 30440220341f6779b75e98bb42e01095dd48356cbf9002dc704ac8bd2a8240b88d3796c60220555843b1b4e264fe6ffe6e2b705a376c05c09404303ffe5d2711f3e3b3a010a1 +Result = P (0 ) + +# S is one byte shorter than the maximum length. +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 0430345fd47ea21a11129be651b0884bfac698377611acc9f689458e13b9ed7d4b9d7599a68dcf125e7f31055ccb374cd04f6d6fd2b217438a63f6f667d50ef2f0 +Sig = 3044022031ed574e9688aed7016e985c0e742fb788be73d9ad0a895e6182c77751817ed0022000d98eb6d480d64d1729c680693cb13bd6bf0c7b651007e459e667683ff65b92 +Result = P (0 ) + +# S is 2 bytes shorter than the maximum length. +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 0430345fd47ea21a11129be651b0884bfac698377611acc9f689458e13b9ed7d4b9d7599a68dcf125e7f31055ccb374cd04f6d6fd2b217438a63f6f667d50ef2f0 +Sig = 3043022100f59cf66594cc837415f16494fb52c02f2a6264bf6ce7dccbf2f78c090cdcefb0021e5a8c8a04ba7825f3f8e56517056daa1a51129cd91382a24589ed05d0c13d +Result = P (0 ) + +# S is the maximum length. +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 045c5e788a805c77d34128b8401cb59b2373b8b468336c9318252bf39fd31d2507557987a5180a9435f9fb8eb971c426f1c485170dcb18fb688a257f89387a09fc4c5b8bd4b320616b54a0a7b1d1d7c6a0c59f6dff78c78ad4e3d6fca9c9a17b96 +Sig = 306502310085ac708d4b0126bac1f5eeebdf911409070a286fdde5649582611b60046de353761660dd03903f58b44148f25142eef80230183475ec1f1392f3d6838abc0c01724709c446888bed7f2ce4642c6839dc18044a2a6ab9ddc960bfac79f6988e62d452 +Result = P (0 ) + +# S is one byte shorter than the maximum length. +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 045c5e788a805c77d34128b8401cb59b2373b8b468336c9318252bf39fd31d2507557987a5180a9435f9fb8eb971c426f1c485170dcb18fb688a257f89387a09fc4c5b8bd4b320616b54a0a7b1d1d7c6a0c59f6dff78c78ad4e3d6fca9c9a17b96 +Sig = 306302304dec97b54c4150ebaffc2dbfc2bc17c302be47cfc4b541ada34108b1080f2482a3e7f5f2b16f730210bd8c29b6681e0b022f0575984f37064bfbbdda76836f5ef2d632f006c338a9585c8b9108c46ea812ce066110156de9806ae5711153e2ef0b +Result = P (0 ) + +# S is 2 bytes shorter than the maximum length. +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 045c5e788a805c77d34128b8401cb59b2373b8b468336c9318252bf39fd31d2507557987a5180a9435f9fb8eb971c426f1c485170dcb18fb688a257f89387a09fc4c5b8bd4b320616b54a0a7b1d1d7c6a0c59f6dff78c78ad4e3d6fca9c9a17b96 +Sig = 3064023100ad8e51ec23d5b8130a5e0636a2f0d1740e8b5404c368b7dab5ae82d307d653c6ef70dcee70b112bf678801f87fb8f5a9022f00806d69e0c2834c27666996d55655cf9358b201aa85d3b08891abcc68c854cac6c67c53b3bf92df9a677d11aba13d +Result = P (0 ) + + +# Generated Test vectors. +# +# TODO: Test the range of `r` in addition to the range of `s`. +# TODO: Test what happens when the message digests to zero. +# TODO: Additional test coverage. libsecp256k1 is a good example. + + +# Test vectors for Gregory Maxwell's trick. +# +# In all cases, the `s` component of the signature was selected +# arbitrarily as 4 and then the `r` component was chosen to be the +# smallest value where the public key recovery from the signature +# works. + +# The signature has r < q - n. This is the control case for the next +# test case; this signature is the same but the public key is +# different. Notice that both public keys work for the same signature! +# This signature will validate even if the implementation doesn't +# reduce the X coordinate of the multiplication result (mod n). +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 041548fc88953e06cd34d4b300804c5322cb48c24aaaa4d07a541b0f0ccfeedeb0ae4991b90519ea405588bdf699f5e6d0c6b2d5217a5c16e8371062737aa1dae1 +Sig = 3006020106020104 +Result = P (0 ) + +# The signature has r < q - n. s Since r < q - n, r + n < q. Notice +# that this signature is the same as the signature in the preceding +# test case, but the public key is different. That the signature +# validates for this case too is what's special about the case where +# r < q - n. If this test case fails it is likely that the +# implementation doesn't reduce the X coordinate of the multiplication +# result (mod n), or it is missing the second step of Gregory +# Maxwell's trick. +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 04ad8f60e4ec1ebdb6a260b559cb55b1e9d2c5ddd43a41a2d11b0741ef2567d84e166737664104ebbc337af3d861d3524cfbc761c12edae974a0759750c8324f9a +Sig = 3006020106020104 +Result = P (0 ) + +# The signature has r > q - n. The signature is for the public key +# recovered from r. r + n > q since r > q - n. This is the control +# for the next test case; this signature is the same as the signature +# in the following test case but the public key is different. +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 0445bd879143a64af5746e2e82aa65fd2ea07bba4e35594095a981b59984dacb219d59697387ac721b1f1eccf4b11f43ddc39e8367147abab3084142ed3ea170e4 +Sig = 301502104319055358e8617b0c46353d039cdaae020104 +Result = P (0 ) + +# The signature has r > q - n. The signature is for the public key +# recovered from r + n (mod q). r + n > q since r > q - n, and so +# r + n (mod q) < r because r + n (mod n) != r + n (mod q). Notice +# that this signature is the same as the signature in the preceding +# test case but the public key is different. Also, notice that the +# signature fails to validate in this case, unlike other related test +# cases. If this test case fails (the signature validates), it is +# likely that the implementation didn't guard the second case of +# Gregory Maxwell's trick on the condition r < q - n. +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 040feb5df4cc78b35ec9c180cc0de5842f75f088b48456978ffa98e716d94883e1e6500b2a1f6c1d9d493428d7ae7d9a8a560fff30a3d14aa160be0c5e7edcd887 +Sig = 301502104319055358e8617b0c46353d039cdaae020104 +Result = F + +# The signature has r < q - n. This is the control case for the next +# test case; this signature is the same but the public key is +# different. Notice that both public keys work for the same signature! +# This signature will validate even if the implementation doesn't +# reduce the X coordinate of the multiplication result (mod n). +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 0425b890b9597155baf7e7ffb48d8123184cbb76ea3f7b10d8f1702136f969e915188cff306c67950437f816ce6ecb739204cc069edac95929dfbd719313552797962789e2210a0bf270c2f0ffc109a70e40da6303a2599bdd702c19070dd51f42 +Sig = 3006020103020104 +Result = P (0 ) + +# The signature has r < q - n. s Since r < q - n, r + n < q. Notice +# that this signature is the same as the signature in the preceding +# test case, but the public key is different. That the signature +# validates for this case too is what's special about the case where +# r < q - n. If this test case fails it is likely that the +# implementation doesn't reduce the X coordinate of the multiplication +# result (mod n), or it is missing the second step of Gregory +# Maxwell's trick. +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 045a3c576f0c2a615063c6e8ec40f5bf0dd67e549e9f13f8f881703ec40a8d6d8ecbb0d8e5b20f3aa0f2e581b594cea3e654a450cabcf24bd908cc47da98eba648a0440332ee19fb53da96dddaec521f718f7b52a161b67134d6e0d6e81dc45502 +Sig = 3006020103020104 +Result = P (0 ) + +# The signature has r > q - n. The signature is for the public key +# recovered from r. r + n > q since r > q - n. This is the control +# for the next test case; this signature is the same as the signature +# in the following test case but the public key is different. +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 04a93588bffb32417bd2b0fa03a6a30d2cf90034e6070b9333d4e7a42fe88bce5a03e8be7f2a84fbc25ec84dc34915c53fd975cfd0db77ec2b5c548994dc9f62756e018882a31d883471b0bbbd8588d9a2acab1aeaaa1eb217f8e528e7114162df +Sig = 301d0218389cb27e0bc8d21fa7e5f24cb74f58851313e696333ad68e020104 +Result = P (0 ) + +# The signature has r > q - n. The signature is for the public key +# recovered from r + n (mod q). r + n > q since r > q - n, and so +# r + n (mod q) < r because r + n (mod n) != r + n (mod q). Notice +# that this signature is the same as the signature in the preceding +# test case but the public key is different. Also, notice that the +# signature fails to validate in this case, unlike other related test +# cases. If this test case fails (the signature validates), it is +# likely that the implementation didn't guard the second case of +# Gregory Maxwell's trick on the condition r < q - n. +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 04576270f9571c9e99b9c71be1a1a705e5155e46b8c6dd920c14e2aaf0f9f96ed30754e2c8f8464d015a9bc779495ea568ac39c555c3b03de021e8167a27425588d6a82b68cf7a0f6ae389a202d8663ed32b5e1782c0377a8f0dc309ae28143961 +Sig = 301d0218389cb27e0bc8d21fa7e5f24cb74f58851313e696333ad68e020104 +Result = F + + +# Generated Test vectors edge cases of signature (r, s) values. + +# s == 0 (out of range) +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 0471db746fd153cf5c5a7c7210f9008c0e99c3a936ef0e720b202b304771431a230af53931e70cbe279ca47ce819616ed1db6604490f70abbcef3036732426eb6d +Sig = 3006020106020100 +Result = F + +# s == 1 (minimum allowed) +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 046e3f95fae7606c1cdfab1f1560de160ed806bbc2a85dc5a2d002aa1c0ac3e1fb5bcd5f7a325415824365cc584f08c144118318ce4d0f5df82b7753b291c4fe96 +Sig = 3006020106020101 +Result = P (0 ) + +# s == n (out of range) +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 0471db746fd153cf5c5a7c7210f9008c0e99c3a936ef0e720b202b304771431a230af53931e70cbe279ca47ce819616ed1db6604490f70abbcef3036732426eb6d +Sig = 3026020106022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 +Result = F + +# s == n - 1 (maximum allowed) +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 04d78f14b53bf825c9f7146193f775458ef5ee46500cd44b18488cb4115c3f00f04b11fc7c6aa1045dc83e4f3e8a14d4a017db8415b5fe3f1a32afba4b8c707ab4 +Sig = 3026020106022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +Result = P (0 ) + +# s == 0 (out of range) +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 04aad95ed7839057e221d46bb203f8b6c977588966fffccf815542429477dc45e61ed6b86fec0a2f3dfb453ea56ac0a6c06933416550a7158ed3f06aca1822c9b83102b40e5ada71651ec153a919a32755ee0292f6a5530d5889c1dc6cb020351f +Sig = 3006020103020100 +Result = F + +# s == 1 (minimum allowed) +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 042aadde5424928b888e20ecef2525f99d646519aa994c075a4081aa852ec309a6ac63006421ff756c6c0924d611d1bda82df99267266ba603b07ba85c678f4ae69daf4634a5e597d77d0b0338f343d8090b2d4420a29302ab47ef04ad45e1461f +Sig = 3006020103020101 +Result = P (0 ) + +# s == n (out of range) +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 04aad95ed7839057e221d46bb203f8b6c977588966fffccf815542429477dc45e61ed6b86fec0a2f3dfb453ea56ac0a6c06933416550a7158ed3f06aca1822c9b83102b40e5ada71651ec153a919a32755ee0292f6a5530d5889c1dc6cb020351f +Sig = 3036020103023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +Result = F + +# s == n - 1 (maximum allowed) +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 04a1d58e8df7f27c4483be9369f8d73d3ea968fce26ff5374d822c5cb4286c00f6fef54d525f4c8b180065dcc1f95f7a0c291171ca5894ba3f4d52ae091ec36c81ee2f34a384c59183284d85dddc3b196c6d7deaab1626d662bc628136126eef6b +Sig = 3036020103023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +Result = P (0 ) + + +# RFC 6979 Test Vectors + +Curve = P-256 +Digest = SHA256 +Msg = "sample" +Q = 0460FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB67903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299 +Sig = 3046022100EFD48B2AACB6A8FD1140DD9CD45E81D69D2C877B56AAF991C34D0EA84EAF3716022100F7CB1C942D657C41D436C7A1B6E29F65F3E900DBB9AFF4064DC4AB2F843ACDA8 +Result = P (0 ) + +Curve = P-256 +Digest = SHA384 +Msg = "sample" +Q = 0460fed4ba255a9d31c961eb74c6356d68c049b8923b61fa6ce669622e60f29fb67903fe1008b8bc99a41ae9e95628bc64f2f1b20c2d7e9f5177a3c294d4462299 +Sig = 304402200eafea039b20e9b42309fb1d89e213057cbf973dc0cfc8f129edddc800ef771902204861f0491e6998b9455193e34e7b0d284ddd7149a74b95b9261f13abde940954 +Result = P (0 ) + +Curve = P-256 +Digest = SHA256 +Msg = "test" +Q = 0460FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB67903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299 +Sig = 3045022100F1ABB023518351CD71D881567B1EA663ED3EFCF6C5132B354F28D3B0B7D383670220019F4113742A2B14BD25926B49C649155F267E60D3814B4C0CC84250E46F0083 +Result = P (0 ) + +Curve = P-256 +Digest = SHA384 +Msg = "test" +Q = 0460FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB67903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299 +Sig = 304602210083910E8B48BB0C74244EBDF7F07A1C5413D61472BD941EF3920E623FBCCEBEB60221008DDBEC54CF8CD5874883841D712142A56A8D0F218F5003CB0296B6B509619F2C +Result = P (0 ) + +Curve = P-384 +Digest = SHA256 +Msg = "sample" +Q = 04EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64DEF8F0EA9055866064A254515480BC138015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1288B231C3AE0D4FE7344FD2533264720 +Sig = 3065023021B13D1E013C7FA1392D03C5F99AF8B30C570C6F98D4EA8E354B63A21D3DAA33BDE1E888E63355D92FA2B3C36D8FB2CD023100F3AA443FB107745BF4BD77CB3891674632068A10CA67E3D45DB2266FA7D1FEEBEFDC63ECCD1AC42EC0CB8668A4FA0AB0 +Result = P (0 ) + +Curve = P-384 +Digest = SHA384 +Msg = "sample" +Q = 04EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64DEF8F0EA9055866064A254515480BC138015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1288B231C3AE0D4FE7344FD2533264720 +Sig = 306602310094EDBB92A5ECB8AAD4736E56C691916B3F88140666CE9FA73D64C4EA95AD133C81A648152E44ACF96E36DD1E80FABE4602310099EF4AEB15F178CEA1FE40DB2603138F130E740A19624526203B6351D0A3A94FA329C145786E679E7B82C71A38628AC8 +Result = P (0 ) + +Curve = P-384 +Digest = SHA256 +Msg = "test" +Q = 04EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64DEF8F0EA9055866064A254515480BC138015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1288B231C3AE0D4FE7344FD2533264720 +Sig = 306402306D6DEFAC9AB64DABAFE36C6BF510352A4CC27001263638E5B16D9BB51D451559F918EEDAF2293BE5B475CC8F0188636B02302D46F3BECBCC523D5F1A1256BF0C9B024D879BA9E838144C8BA6BAEB4B53B47D51AB373F9845C0514EEFB14024787265 +Result = P (0 ) + +Curve = P-384 +Digest = SHA384 +Msg = "test" +Q = 04EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64DEF8F0EA9055866064A254515480BC138015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1288B231C3AE0D4FE7344FD2533264720 +Sig = 30660231008203B63D3C853E8D77227FB377BCF7B7B772E97892A80F36AB775D509D7A5FEB0542A7F0812998DA8F1DD3CA3CF023DB023100DDD0760448D42D8A43AF45AF836FCE4DE8BE06B485E9B61B827C2F13173923E06A739F040649A667BF3B828246BAA5A5 +Result = P (0 ) + + +# NIST FIPS 186-4 Test Vectors from the file SigVer.rsp from +# http://csrc.nist.gov/groups/STM/cavp/documents/dss/186-3ecdsatestvectors.zip +# assessible via +# http://csrc.nist.gov/groups/STM/cavp/digital-signatures.html#test-vectors +# +# XXX: Unfortunately, it's not clear what edge cases these test vectors are +# testing. For example, when the problem is caused by Q being tampered with, +# it isn't clear if the new Q is on the curve or off the curve or what. Also, +# the signature is a variable-length value (being an ASN.1 SEQUENCE of a pair +# of ASN.1 INTEGERs), but all the signatures are the same length for each +# curve. +# +# The [Curve, Digest] section headings were replaced with Curve and Digest +# properties on each test case. +# +# Q = (Qx, Qy) in uncompressed form. +# Sig = (R, S) encoded in ASN.1. + +Curve = P-256 +Digest = SHA256 +Msg = e4796db5f785f207aa30d311693b3702821dff1168fd2e04c0836825aefd850d9aa60326d88cde1a23c7745351392ca2288d632c264f197d05cd424a30336c19fd09bb229654f0222fcb881a4b35c290a093ac159ce13409111ff0358411133c24f5b8e2090d6db6558afc36f06ca1f6ef779785adba68db27a409859fc4c4a0 +Q = 0487f8f2b218f49845f6f10eec3877136269f5c1a54736dbdf69f89940cad41555e15f369036f49842fac7a86c8a2b0557609776814448b8f5e84aa9f4395205e9 +Sig = 3046022100d19ff48b324915576416097d2544f7cbdf8768b1454ad20e0baac50e211f23b0022100a3e81e59311cdfff2d4784949f7a2cb50ba6c3a91fa54710568e61aca3e847c6 +Result = F (3 - S changed) + +Curve = P-256 +Digest = SHA256 +Msg = 069a6e6b93dfee6df6ef6997cd80dd2182c36653cef10c655d524585655462d683877f95ecc6d6c81623d8fac4e900ed0019964094e7de91f1481989ae1873004565789cbf5dc56c62aedc63f62f3b894c9c6f7788c8ecaadc9bd0e81ad91b2b3569ea12260e93924fdddd3972af5273198f5efda0746219475017557616170e +Q = 045cf02a00d205bdfee2016f7421807fc38ae69e6b7ccd064ee689fc1a94a9f7d2ec530ce3cc5c9d1af463f264d685afe2b4db4b5828d7e61b748930f3ce622a85 +Sig = 3046022100dc23d130c6117fb5751201455e99f36f59aba1a6a21cf2d0e7481a97451d6693022100d6ce7708c18dbf35d4f8aa7240922dc6823f2e7058cbc1484fcad1599db5018c +Result = F (2 - R changed) + +Curve = P-256 +Digest = SHA256 +Msg = df04a346cf4d0e331a6db78cca2d456d31b0a000aa51441defdb97bbeb20b94d8d746429a393ba88840d661615e07def615a342abedfa4ce912e562af714959896858af817317a840dcff85a057bb91a3c2bf90105500362754a6dd321cdd86128cfc5f04667b57aa78c112411e42da304f1012d48cd6a7052d7de44ebcc01de +Q = 042ddfd145767883ffbb0ac003ab4a44346d08fa2570b3120dcce94562422244cb5f70c7d11ac2b7a435ccfbbae02c3df1ea6b532cc0e9db74f93fffca7c6f9a64 +Sig = 30460221009913111cff6f20c5bf453a99cd2c2019a4e749a49724a08774d14e4c113edda80221009467cd4cd21ecb56b0cab0a9a453b43386845459127a952421f5c6382866c5cc +Result = F (4 - Q changed) + +Curve = P-256 +Digest = SHA256 +Msg = e1130af6a38ccb412a9c8d13e15dbfc9e69a16385af3c3f1e5da954fd5e7c45fd75e2b8c36699228e92840c0562fbf3772f07e17f1add56588dd45f7450e1217ad239922dd9c32695dc71ff2424ca0dec1321aa47064a044b7fe3c2b97d03ce470a592304c5ef21eed9f93da56bb232d1eeb0035f9bf0dfafdcc4606272b20a3 +Q = 04e424dc61d4bb3cb7ef4344a7f8957a0c5134e16f7a67c074f82e6e12f49abf3c970eed7aa2bc48651545949de1dddaf0127e5965ac85d1243d6f60e7dfaee927 +Sig = 3045022100bf96b99aa49c705c910be33142017c642ff540c76349b9dab72f981fd9347f4f022017c55095819089c2e03b9cd415abdf12444e323075d98f31920b9e0f57ec871c +Result = P (0 ) + +Curve = P-256 +Digest = SHA256 +Msg = 73c5f6a67456ae48209b5f85d1e7de7758bf235300c6ae2bdceb1dcb27a7730fb68c950b7fcada0ecc4661d3578230f225a875e69aaa17f1e71c6be5c831f22663bac63d0c7a9635edb0043ff8c6f26470f02a7bc56556f1437f06dfa27b487a6c4290d8bad38d4879b334e341ba092dde4e4ae694a9c09302e2dbf443581c08 +Q = 04e0fc6a6f50e1c57475673ee54e3a57f9a49f3328e743bf52f335e3eeaa3d28647f59d689c91e463607d9194d99faf316e25432870816dde63f5d4b373f12f22a +Sig = 304502201d75830cd36f4c9aa181b2c4221e87f176b7f05b7c87824e82e396c88315c407022100cb2acb01dac96efc53a32d4a0d85d0c2e48955214783ecf50a4f0414a319c05a +Result = P (0 ) + +Curve = P-256 +Digest = SHA256 +Msg = 666036d9b4a2426ed6585a4e0fd931a8761451d29ab04bd7dc6d0c5b9e38e6c2b263ff6cb837bd04399de3d757c6c7005f6d7a987063cf6d7e8cb38a4bf0d74a282572bd01d0f41e3fd066e3021575f0fa04f27b700d5b7ddddf50965993c3f9c7118ed78888da7cb221849b3260592b8e632d7c51e935a0ceae15207bedd548 +Q = 04a849bef575cac3c6920fbce675c3b787136209f855de19ffe2e8d29b31a5ad86bf5fe4f7858f9b805bd8dcc05ad5e7fb889de2f822f3d8b41694e6c55c16b471 +Sig = 3045022025acc3aa9d9e84c7abf08f73fa4195acc506491d6fc37cb9074528a7db87b9d60221009b21d5b5259ed3f2ef07dfec6cc90d3a37855d1ce122a85ba6a333f307d31537 +Result = F (2 - R changed) + +Curve = P-256 +Digest = SHA256 +Msg = 7e80436bce57339ce8da1b5660149a20240b146d108deef3ec5da4ae256f8f894edcbbc57b34ce37089c0daa17f0c46cd82b5a1599314fd79d2fd2f446bd5a25b8e32fcf05b76d644573a6df4ad1dfea707b479d97237a346f1ec632ea5660efb57e8717a8628d7f82af50a4e84b11f21bdff6839196a880ae20b2a0918d58cd +Q = 043dfb6f40f2471b29b77fdccba72d37c21bba019efa40c1c8f91ec405d7dcc5dff22f953f1e395a52ead7f3ae3fc47451b438117b1e04d613bc8555b7d6e6d1bb +Sig = 30450220548886278e5ec26bed811dbb72db1e154b6f17be70deb1b210107decb1ec2a5a022100e93bfebd2f14f3d827ca32b464be6e69187f5edbd52def4f96599c37d58eee75 +Result = F (4 - Q changed) + +Curve = P-256 +Digest = SHA256 +Msg = 1669bfb657fdc62c3ddd63269787fc1c969f1850fb04c933dda063ef74a56ce13e3a649700820f0061efabf849a85d474326c8a541d99830eea8131eaea584f22d88c353965dabcdc4bf6b55949fd529507dfb803ab6b480cd73ca0ba00ca19c438849e2cea262a1c57d8f81cd257fb58e19dec7904da97d8386e87b84948169 +Q = 0469b7667056e1e11d6caf6e45643f8b21e7a4bebda463c7fdbc13bc98efbd0214d3f9b12eb46c7c6fda0da3fc85bc1fd831557f9abc902a3be3cb3e8be7d1aa2f +Sig = 30440220288f7a1cd391842cce21f00e6f15471c04dc182fe4b14d92dc189108797997900220247b3c4e89a3bcadfea73c7bfd361def43715fa382b8c3edf4ae15d6e55e9979 +Result = F (1 - Message changed) + +Curve = P-256 +Digest = SHA256 +Msg = 3fe60dd9ad6caccf5a6f583b3ae65953563446c4510b70da115ffaa0ba04c076115c7043ab8733403cd69c7d14c212c655c07b43a7c71b9a4cffe22c2684788ec6870dc2013f269172c822256f9e7cc674791bf2d8486c0f5684283e1649576efc982ede17c7b74b214754d70402fb4bb45ad086cf2cf76b3d63f7fce39ac970 +Q = 04bf02cbcf6d8cc26e91766d8af0b164fc5968535e84c158eb3bc4e2d79c3cc682069ba6cb06b49d60812066afa16ecf7b51352f2c03bd93ec220822b1f3dfba03 +Sig = 3045022100f5acb06c59c2b4927fb852faa07faf4b1852bbb5d06840935e849c4d293d1bad0220049dab79c89cc02f1484c437f523e080a75f134917fda752f2d5ca397addfe5d +Result = F (3 - S changed) + +Curve = P-256 +Digest = SHA256 +Msg = 983a71b9994d95e876d84d28946a041f8f0a3f544cfcc055496580f1dfd4e312a2ad418fe69dbc61db230cc0c0ed97e360abab7d6ff4b81ee970a7e97466acfd9644f828ffec538abc383d0e92326d1c88c55e1f46a668a039beaa1be631a89129938c00a81a3ae46d4aecbf9707f764dbaccea3ef7665e4c4307fa0b0a3075c +Q = 04224a4d65b958f6d6afb2904863efd2a734b31798884801fcab5a590f4d6da9de178d51fddada62806f097aa615d33b8f2404e6b1479f5fd4859d595734d6d2b9 +Sig = 304502210087b93ee2fecfda54deb8dff8e426f3c72c8864991f8ec2b3205bb3b416de93d202204044a24df85be0cc76f21a4430b75b8e77b932a87f51e4eccbc45c263ebf8f66 +Result = F (2 - R changed) + +Curve = P-256 +Digest = SHA256 +Msg = 4a8c071ac4fd0d52faa407b0fe5dab759f7394a5832127f2a3498f34aac287339e043b4ffa79528faf199dc917f7b066ad65505dab0e11e6948515052ce20cfdb892ffb8aa9bf3f1aa5be30a5bbe85823bddf70b39fd7ebd4a93a2f75472c1d4f606247a9821f1a8c45a6cb80545de2e0c6c0174e2392088c754e9c8443eb5af +Q = 0443691c7795a57ead8c5c68536fe934538d46f12889680a9cb6d055a066228369f8790110b3c3b281aa1eae037d4f1234aff587d903d93ba3af225c27ddc9ccac +Sig = 30460221008acd62e8c262fa50dd9840480969f4ef70f218ebf8ef9584f199031132c6b1ce022100cfca7ed3d4347fb2a29e526b43c348ae1ce6c60d44f3191b6d8ea3a2d9c92154 +Result = F (3 - S changed) + +Curve = P-256 +Digest = SHA256 +Msg = 0a3a12c3084c865daf1d302c78215d39bfe0b8bf28272b3c0b74beb4b7409db0718239de700785581514321c6440a4bbaea4c76fa47401e151e68cb6c29017f0bce4631290af5ea5e2bf3ed742ae110b04ade83a5dbd7358f29a85938e23d87ac8233072b79c94670ff0959f9c7f4517862ff829452096c78f5f2e9a7e4e9216 +Q = 049157dbfcf8cf385f5bb1568ad5c6e2a8652ba6dfc63bc1753edf5268cb7eb596972570f4313d47fc96f7c02d5594d77d46f91e949808825b3d31f029e8296405 +Sig = 3046022100dfaea6f297fa320b707866125c2a7d5d515b51a503bee817de9faa343cc48eeb0221008f780ad713f9c3e5a4f7fa4c519833dfefc6a7432389b1e4af463961f09764f2 +Result = F (1 - Message changed) + +Curve = P-256 +Digest = SHA256 +Msg = 785d07a3c54f63dca11f5d1a5f496ee2c2f9288e55007e666c78b007d95cc28581dce51f490b30fa73dc9e2d45d075d7e3a95fb8a9e1465ad191904124160b7c60fa720ef4ef1c5d2998f40570ae2a870ef3e894c2bc617d8a1dc85c3c55774928c38789b4e661349d3f84d2441a3b856a76949b9f1f80bc161648a1cad5588e +Q = 04072b10c081a4c1713a294f248aef850e297991aca47fa96a7470abe3b8acfdda9581145cca04a0fb94cedce752c8f0370861916d2a94e7c647c5373ce6a4c8f5 +Sig = 3045022009f5483eccec80f9d104815a1be9cc1a8e5b12b6eb482a65c6907b7480cf4f19022100a4f90e560c5e4eb8696cb276e5165b6a9d486345dedfb094a76e8442d026378d +Result = F (4 - Q changed) + +Curve = P-256 +Digest = SHA256 +Msg = 76f987ec5448dd72219bd30bf6b66b0775c80b394851a43ff1f537f140a6e7229ef8cd72ad58b1d2d20298539d6347dd5598812bc65323aceaf05228f738b5ad3e8d9fe4100fd767c2f098c77cb99c2992843ba3eed91d32444f3b6db6cd212dd4e5609548f4bb62812a920f6e2bf1581be1ebeebdd06ec4e971862cc42055ca +Q = 0409308ea5bfad6e5adf408634b3d5ce9240d35442f7fe116452aaec0d25be8c24f40c93e023ef494b1c3079b2d10ef67f3170740495ce2cc57f8ee4b0618b8ee5 +Sig = 304502205cc8aa7c35743ec0c23dde88dabd5e4fcd0192d2116f6926fef788cddb754e730221009c9c045ebaa1b828c32f82ace0d18daebf5e156eb7cbfdc1eff4399a8a900ae7 +Result = F (1 - Message changed) + +Curve = P-256 +Digest = SHA256 +Msg = 60cd64b2cd2be6c33859b94875120361a24085f3765cb8b2bf11e026fa9d8855dbe435acf7882e84f3c7857f96e2baab4d9afe4588e4a82e17a78827bfdb5ddbd1c211fbc2e6d884cddd7cb9d90d5bf4a7311b83f352508033812c776a0e00c003c7e0d628e50736c7512df0acfa9f2320bd102229f46495ae6d0857cc452a84 +Q = 042d98ea01f754d34bbc3003df5050200abf445ec728556d7ed7d5c54c55552b6d9b52672742d637a32add056dfd6d8792f2a33c2e69dafabea09b960bc61e230a +Sig = 3044022006108e525f845d0155bf60193222b3219c98e3d49424c2fb2a0987f825c17959022062b5cdd591e5b507e560167ba8f6f7cda74673eb315680cb89ccbc4eec477dce +Result = P (0 ) + +Curve = P-256 +Digest = SHA384 +Msg = fe9838f007bdc6afcd626974fcc6833f06b6fd970427b962d75c2aeadbef386bec8d018106197fe2547d2af02e7a7949965d5fbc4c5db909a95b9858426a33c080b0b25dae8b56c5cbc6c4eec3dbd81635c79457eaef4fab39e662a1d05b2481eda8c1074ae2d1704c8a3f769686a1f965ef3c87602efc288c7f9ff8cd5e22a4 +Q = 0440ded13dbbe72c629c38f07f7f95cf75a50e2a524897604c84fafde5e4cafb9fa17202e92d7d6a37c438779349fd79567d75a40ef22b7d09ca21ccf4aec9a66c +Sig = 3045022100be34730c31730b4e412e6c52c23edbd36583ace2102b39afa11d24b6848cb77f022003655202d5fd8c9e3ae971b6f080640c406112fd95e7015874e9b6ee77752b10 +Result = F (3 - S changed) + +Curve = P-256 +Digest = SHA384 +Msg = b69043b9b331da392b5dd689142dfc72324265da08f14abcedf03ad8263e6bdccbc75098a2700bbba1979de84c8f12891aa0d000f8a1abad7dde4981533f21da59cc80d9cf94517f3b61d1a7d9eecb2fcf052e1fc9e7188c031b86305e4a436a37948071f046e306befb8511dc03a53dc8769a90a86e9b4fdbf05dcdfa35ab73 +Q = 041f80e19ffeb51dd74f1c397ac3dfd3415ab16ebd0847ed119e6c3b15a1a884b89b395787371dbfb55d1347d7bed1c261d2908121fb78de1d1bf2d00666a62aed +Sig = 30450220249ca2c3eb6e04ac57334c2f75dc5e658bbb485bf187100774f5099dd13ef70702210097363a05202b602d13166346694e38135bbce025be94950e9233f4c8013bf5bf +Result = F (4 - Q changed) + +Curve = P-256 +Digest = SHA384 +Msg = d2fcaaede8b879c064b0aa46e68efc278a469b80a7f7e1939ec2ebc96c76206f23395967279c181fea157ebb79dfadc68e31345f07f13305c80de0d85e4330d3a45f957c5c2526b945838ce5a9c2844b6b2a665c0f70b748b1213a8cf20ba5dbdf8cab231f433da522104a5cd027d3e36bb373c4ed404d9af0cbec6f85ec2193 +Q = 04ce4dcfa7384c83443ace0fb82c4ac1adfa100a9b2c7bf09f093f8b6d084e50c2d98ae7b91abee648d0bfde192703741ac21daad7262af418b50e406d825eb0d6 +Sig = 30440220597e1e04d93a6b444ccc447a48651f17657ff43fb65fe94461d2bf816b01af400220359fe3817963548e676d6da34c2d0866aa42499237b682002889eaf8893814d2 +Result = P (0 ) + +Curve = P-256 +Digest = SHA384 +Msg = 06cd86481865181cef7acdc3202824970ec2d97662b519c4b588dc9e51617c068282b1a11a15bf7efc4858a2f37a3d74b05fb5790eb68338c8009b4da9b4270514d387a2e016a99ee109841e884a7909504ef31a5454e214663f830f23a5a76f91402fca5f5d61699fa874597bdbfb1ecff8f07ddbd07ef61e97d0d5262ef314 +Q = 041b677f535ac69d1acd4592c0d12fac13c9131e5a6f8ab4f9d0afdcb3a3f327e05dca2c73ec89e58ef8267cba2bb5eb0f551f412f9dc087c1a6944f0ce475277a +Sig = 3045022100df0b0cd76d2555d4c38b3d70bfdf964884d0beeb9f74385f0893e87d20c9642d0220128299aabf1f5496112be1fe04365f5f8215b08a040abdfeca4626f4d15c005b +Result = F (2 - R changed) + +Curve = P-256 +Digest = SHA384 +Msg = 59ad297397f3503604a4a2d098a4f00a368ad95c6101b3d38f9d49d908776c5a6c8654b006adb7939ffb6c30afa325b54185d82c3cc0d836850dce54d3408b257c3a961d11fafe2b74ba8bddfc1102fa656d1028baf94c38340c26a11e992aab71ce3732271b767358671b25225926f3a4b9ec5f82c059f0c7d1446d5d9e4251 +Q = 047ffc2853f3e17887dda13b0eb43f183ce50a5ac0f8bba75fb1921172484f9b944cc523d14192f80bd5b27d30b3b41e064da87bfbae15572dd382b9a176c123a2 +Sig = 304402203156176d52eb26f9391229de4251993a41b8172f78970bb70e32a245be4bb653022062827a29e12d2f29b00fb2d02dd5f2d5412e17a4455f4431a5c996881fdfc0ee +Result = F (1 - Message changed) + +Curve = P-256 +Digest = SHA384 +Msg = 8215daca87e689a20392646a6511bb7b5a82d2d995ca9de89bd9d9c0b11464b7cb1e4e9a31e3e01ad8c2cd613d5a2cb44a2a8df6899fce4c282dea1e41af0df6c36be1f320036567f8d0d32aaa79c95fe53b16668f7e1a9e5d7d039ea260fd03711b7d1c177355fc52244d49ca5b238556a5541349014683cb7da326f443b752 +Q = 045569f76dc94243cde819fb6fc85144ec67e2b5d49539f62e24d406d1b68f00581208c38dbe25870deab53c486f793a1e250c9d1b8e7c147ea68b71196c440730 +Sig = 30450220706f2ba4025e7c06b66d6369a3f93b2fec46c51eceff42a158f7431919506cfb022100b4e75ac34a96393237fc4337789e37168d79382705b248051c9c72bcbac5f516 +Result = F (2 - R changed) + +Curve = P-256 +Digest = SHA384 +Msg = a996b1fb800f692517a2eb80e837233193dd3e82484d3f49bd19ee0db8f7b440876b07e384c90aa8b9f7b6603ca0b5a4e06c1da0edb974a2fb9b6e7c720ddf3e5c0e314c2d189402903c08c0836776c361a284db887ebcc33e615de9720b01dadade585eef687b3346468bdafb490e56d657a9e7d44d92014069005a36c1cf63 +Q = 04e4b470c65b2c04db060d7105ec6911589863d3c7f7ce48726ba3f369ea3467e844c38d3ae098de05f5915a5868c17fee296a6e150beb1f000df5f3bec8fc4532 +Sig = 3046022100c9c347ee5717e4c759ddaf09e86f4e1db2c8658593177cfda4e6514b5e3ecb87022100baae01e9e44a7b04d69c8eaaed77c9e3a36ce8962f95cc50a0db146b4e49eb40 +Result = F (4 - Q changed) + +Curve = P-256 +Digest = SHA384 +Msg = 1a6e49a377a08e992353d6acc557b687b1b69a41d83d43a75fadb97b8c928cfebadebaaf99ea7fb13148807f56ea17384a7912e578e62b1b009fefb2aafca5ac85539433619b286f10643a56f8dfa47ba4d01c02510deaec18029ea6b9682022b139dcb70814164c4c90ec717ad9d925485398531cdd5992a2524498b337f97d +Q = 0496050c5fa2ddd1b2e5451d89ee74a0b7b54347364ddc0231715a6ef1146fe8dce0888a9e78aeea87f6e1e9002b2651169f36c4ee53013cfc8c9912b7fd504858 +Sig = 304502202353d6cd3c21b8ea7dbc1cd940519812dbe365a3b15cd6aebba9d11cf269867a02210085f560273cd9e82e6801e4cb1c8cd29cdac34a020da211d77453756b604b8fa7 +Result = P (0 ) + +Curve = P-256 +Digest = SHA384 +Msg = 3e14f737c913931bc82764ebc440b12e3ce1ffe0f858c7b8f1cbd30fbbb1644fa59be1d2cca5f64a6d7dc5ed5c4420f39227516ae8eb3019ef86274d0e4d06cde7bf5e5c413243dfc421d9f141762109810e6b6a451eeb4bd8d4be1ff111426d7e44d0a916b4fe3db3594d8dd01ae90feecf8f1e230b574180cd0b8d43a3d33b +Q = 040c07bb79f44012299fbfd5a0f31397aaf7d757f8a38437407c1b09271c6551a084fe7846d5d403dc92c0091fbd39f3c5cbca3f94c10b5cae44e2e96562131b13 +Sig = 3044022049e9425f82d0a8c503009cead24e12adc9d48a08594094ca4f6d13ad1e3c571d02201f1b70aaa30a8ff639aa0935944e9b88326a213ab8fce5194c1a9dec070eb433 +Result = F (1 - Message changed) + +Curve = P-256 +Digest = SHA384 +Msg = 4000106127a72746db77957cbc6bfd84ae3d1d63b8190087637e93689841331e2adc1930d6df4302935f4520bbee513505cdcfca99ebc6f83af7b23b0f2e7f7defba614022ceeae9c6886e8b13f7ea253a307ac301f3536720cbe3de82ba3e98310361b61801a8304ffc91ff774948e33176ddcddf1b76437b3f02c910578d46 +Q = 0471db1de1a1f38f356c91feaff5cfe395d1a5b9d23cf6aa19f38ae0bcc90a486decdd6ffb174a50f1cc792985c2f9608c399c98b8a64a69d2b5b7cdd9241f67e2 +Sig = 3045022100b0443b33a6f249470d2f943675009d21b9ccbead1525ae57815df86bb20470bf0220316dbee27d998e09128539c269e297ac8f34b9ef8249a0619168c3495c5c1198 +Result = F (3 - S changed) + +Curve = P-256 +Digest = SHA384 +Msg = b42e547d0e7ddd5e1069bb2d158a5b4d5d9c4310942a1bfd09490311a6e684bd3c29b0dcef86a9788b4b26fed7863f3d5e5439796b5b5ffe7aa2545d0f518ad020689ca21230f3a59e7f8cca465fe21df511e78d215fa805f5f0f88938e9d198515e6b9c819930755c6c6aea5114cd2904607243051c09dd7a147756cbc204a5 +Q = 048219b225aa15472262c648cac8de9aad4173d17a231ba24352a5a1c4eea70fad0fee2b08ad39fbf0db0016ef2896ca99adc07efc8c415f640f3720498be26037 +Sig = 30450220134fb689101aaad3954de2819d9fbd12072fe2bc36f496bbf0d13fa72114ab96022100e65c232bd915b59e087e7fd5ec90bf636cfa80526345c79a0adfd75003045d6f +Result = F (1 - Message changed) + +Curve = P-256 +Digest = SHA384 +Msg = aa563223a7d5201febdf13cab80a03dce6077c26e751bc98a941196a28848abc495e0324013c9a2094fb15dc65d100c3e8a136a52c1780b395f42588900b641b6d4361432e2173195a2f60189f3fcc85f4e9659cae52576f20d1852d43c2b400deea3144c8e870e1906d677425d8c85037c7a42a9d249b2da4b516e04476bd45 +Q = 04c934195de33b60cf00461fc3c45dad068e9f5f7af5c7fa78591e95aeb04e2617b588dd5f9965fdaa523b475c2812c251bc6973e2df21d9beaace976abf5728cb +Sig = 3044022071f302440eb4ed2a939b69e33e905e6fdc545c743458d38f7e1a1d456e35f389022054eaa0eb9cd7503b19a9658f0a04955d9f0ab20ebc8a0877e33c89ee88ad068f +Result = F (4 - Q changed) + +Curve = P-256 +Digest = SHA384 +Msg = 98e4babf890f52e5a04bd2a7d79bf0ae9a71967847347d87f29fb3997454c73c7979d15b5c4f4205ec3de7835d1885fb7abcf8dcde94baf08b1d691a0c74845317286540e8c9d378fefaa4762c302492f51023c0d7adbb1cc90b7b0335f11203664e71fea621bc2f59d2dbd0ee76d6597ec75510de59b6d25fa6750a71c59435 +Q = 049e1adcd48e2e3f0e4c213501808228e587c40558f52bb54ddbb6102d4048ea9234eff98704790938e7e0bdf87ae39807a6b77dfdc9ecdfe6dd0f241abae1aeb2 +Sig = 3046022100ce4f0d7480522c8dd1b02dd0eb382f22406642f038c1ede9411883d72b3e7ed00221008546e1ee3b77f9927cdaccbc2f1cf19d6b5576b0f738bb1b86a0c66b39ca56fb +Result = F (3 - S changed) + +Curve = P-256 +Digest = SHA384 +Msg = bb6b03ad60d6ddbf0c4d17246206e61c886f916d252bb4608149da49cef9033484080e861f91bb2400baa0cd6c5d90c2f275e2fabc12d83847f7a1c3ff0eb40c8a3dd83d07d194ba3797d27238415a2f358d7292a1991af687bcb977486980f9138b3140321485638ac7bd22ecda00ffe5009b83b90397eff24ecf22c5495d67 +Q = 0493edbecb0b019c2cc03060f54cb4904b920fdb34eb83badd752be9443036ae13b494e9295e080a9080fe7e73249b3a5904aa84e1c028121eecd3e2cf1a55f598 +Sig = 3046022100eec2986d47b71995892b0915d3d5becc4dcb2ab55206d772e0189541b2184ddf0221008a6c1edeb6452627ad27c8319599c54ac44cdd831ea66f13f49d90affe6ad45b +Result = P (0 ) + +Curve = P-256 +Digest = SHA384 +Msg = 33a5d489f671f396c776bc1acf193bc9a74306f4692dd8e05bcdfe28fdefbd5c09b831c204a1dec81d8e3541f324f7b474d692789013bb1eca066f82fbf3f1cf3ba64e9d8963e9ecc180b9251919e2e8a1ab05847a0d76ff67a47c00e170e38e5b319a56f59cc51038f90961ea27a9a7eb292a0a1aa2f4972568669246907a35 +Q = 043205bae876f9bd50b0713959e72457165e826cbbe3895d67320909daa48b0ebcd1592562273e5e0f57bbfb92cedd9af7f133255684ee050af9b6f02019bbcafa +Sig = 304402200124f3f1c61ec458561a4eaa6c155bd29e59703d14556324924683db3a4cf43b0220688a5c5fc0c7ba92210c50cce5b512a468a880e05acc21ca56571d89f45f603a +Result = F (2 - R changed) + + +Curve = P-384 +Digest = SHA256 +Msg = a444216c9072caf87fa57c1f04aff9cb83dc2ede9968bda41c9d918825e526c2397cb7d771a7e120582424bbea8ecd56a69bb468cd61437f5a65f04953f9d4018c599afd9edbd4d26e861f86829b9496f829f2b601df73e931fff96559e091417c0d8b8c8129443f7efb985d286c7167b66d2b4d5903583a928db3ed6a883117 +Q = 0497c3f446803a61a7014f61cb7f8b3f36486c7ea96d90ee1767f5c7e1d896dd5114255abb36c74be218c1f0a4e7ebba3d553ed1fed72c62851e042f0171454f120029adba4ee26855ab881d9470355f1947aa1d2e806a7ff2583660fedbd037a0 +Sig = 306402307b06d6c2b63f1cc3bfdaa897d07dc15a83bdf35d979f70c34578332b3f4920422bb24867c51bde10831324df424e04ec02304bef715161f400dc98d4b63bd13ff4ad4a6c981ead44bfc662fe9bca4b56cd790698e4deddf9a4bd69327f26bfe801e6 +Result = F (4 - Q changed) + +Curve = P-384 +Digest = SHA256 +Msg = 43c5ffcdf6f9e21aba1b065596745e8738f7b39e1db486a6ae52218d66ce8125fdb155ee281e01b27fa20d0e37d6468a2daedc5fd30573e44b256c5af13df27dea56fd81aef689aad7c022cea77ac3c40a1d64b8c0cf7fb5a128d6a1799da7b8d95308613ceb2260e10b37530edd42925fa5abcdad5d0646ba5bc78c330346eb +Q = 0408bd5c6cdc1f8c611df96485090e20e9188df6abb766bff3c1ba341ed209ad5dfd78b628ec60998ddfdd0dd029352fbdd9831d75dec760e9f405d1aa5e23aac506dc019fb64d44bd57f6c570d017e6609f8fdbb2dc7b28ca9e00e37cd32a3b73 +Sig = 30660231008b372c86ed1eec2163d6f7152e53696b4a10958948d863eb622873b471702ac5b2e75ff852149a499e61510905f98e4c023100b2ed728e8b30787a28f2a6d3740872e47348686c7cb426411379411310241d25f08a026b853789b1157f1fc1a7f6ff49 +Result = F (1 - Message changed) + +Curve = P-384 +Digest = SHA256 +Msg = 5edd325885296a829b50b16b17e3c4fc3491f1d53384103f1c09a21a169329e07b3758d55c52e9d578fb9e35e8754bfab9fa5e319d0c7fdb45444eda6a2a0a9aaeaa9b7702cce742047146228f9f687e7684d9b4aaa3be03813c004f0418c1a2fe3aa8ddb3658137d7e954e3683a08e0eaad26c0cc3ae0031b191909a3ebade5 +Q = 0410a784abb3c549444a62c28df1c926b8aabb20c8d9aa4b1f7ca830258857cbe9718dbc9845fa9cbb78587a373baee80da1ad0c10b5ab6780cad49c8cd3eebd27de8f1b382ddd7a604458cef8e76ca632a7e44e1c63141a742426cec598029e2e +Sig = 3065023100d9e52be2a3f7f566899cf6daaa38116d092473066f3a1bf91f3df44d81bca1deb438d9d25ce1632599c1d3576a30f12802300cad30bce4b3d7f40b3eef762a21bb1a3bad77439838b13024b7b2c70316875a99e80723a74a9e7a404715ca06a5d673 +Result = F (3 - S changed) + +Curve = P-384 +Digest = SHA256 +Msg = 4fb73e9e8cbc3e829f99472671ee8719f796dbed096b3cbdf1080ad7f5c410a4541e3526de816fe35ab9e664bb1c1d1e9add2522b9a91eb461b45ae4426e1dfbab7dad03a1392706b9314c03104ea7b40f3632577b0b7c991d2b92460638707572b3387add6ab0f05f6f553fa1fcc50fefe74783cd8b781a35de5ae0e7fc5a58 +Q = 048760182393132d69011edfa127e36f92eeac8272641c27f52f3337ef8af7451e6d14f4e4590c7eb9fafb76e8c92865cfebc2b123ed871ca570ead40ae8f6f32335393c569b21b38f626d09c064a3c8668e9fb10a4667e0f0c68bf25ca98fd6dc +Sig = 306402301db957e5c2d294035d7f476a0cbc28a4aac2614d8212de5017076cd836bf04ffe237dce8fec91f2fb5ef82449ff1c65d02303e3b9058d0a9c5b417f9c6f86557b9d50e7a902694a7012a1be6bb70708497e4d39fc1f6d6bc60dfa52d23cab173385f +Result = F (4 - Q changed) + +Curve = P-384 +Digest = SHA256 +Msg = b66ca1d77adf6b2b20c6ef68e50d353a9f5cd0be422f5f6fff8f74506280a55d7923cf047dfdb9147b916f6df6cad8c52257360f746b77edb9949ed4ae9a63d08a7da07c4cf32836574a34f316292b8cc5a6b057129a6baa1182be8a5be1c43739e7d9b0abe07801c2d4343a235037b9aaff14694c051fde4b545931ff9e9a3b +Q = 042b1f98d2acdda8347b9a68c75174408eae7de3d6b9c08c26e73ce9ed2ac147b8d90cd82e30ab43909d63f6b457de207133f5e6f5f5793201991e014cce0045d04adc352298e32f45f4e374450111c8456b5c2efaec43d157949b5c191b2bc934 +Sig = 3064023023d046402cbce807d232bcf0dc96d53c72992e0ba1ffce0d79050c0f4c5ad9bfbbdc1c96c730d67ff3aa3edaa3845da902302cd46a4fe5d120b3af3a6d9ea63cc78f4079e8b5520a8fa96828334a4f182ff4d5e3d79470019e4eb8afc4f598b6becb +Result = F (4 - Q changed) + +Curve = P-384 +Digest = SHA256 +Msg = 862cf14c65ff85f4fdd8a39302056355c89c6ea1789c056262b077dab33abbfda0070fce188c6330de84dfc512744e9fa0f7b03ce0c14858db1952750d7bbe6bd9c8726c0eae61e6cf2877c655b1f0e0ce825430a9796e7420e5c174eab7a50459e291510bc515141738900d390217c5a522e4bde547e57287d8139dc916504e +Q = 0486ac12dd0a7fe5b81fdae86b12435d316ef9392a3f50b307ab65d9c6079dd0d2d819dc09e22861459c2ed99fbab66faeac8444077aaed6d6ccacbe67a4caacee0b5a094a3575ca12ea4b4774c030fe1c870c9249023f5dc4d9ad6e333668cc38 +Sig = 30650230798065f1d1cbd3a1897794f4a025ed47565df773843f4fa74c85fe4d30e3a394783ec5723b530fc5f57906f946ce15e8023100b57166044c57c7d9582066805b5885abc06e0bfc02433850c2b74973205ca357a2da94a65172086f5a1580baa697400b +Result = P (0 ) + +Curve = P-384 +Digest = SHA256 +Msg = cc0aac1010fad8555f81423ac25203720853dbe6a465c244388df90839113d59ea3d3521a8a9cbef649f8abe8d6ff8b0cf17ffc199dddb2997511c4b50e944d41cbcdf5d2102dc98d6f9355b211f130d4e89983f63e5dfe6e1b4ffb3caabd1ad96563fb5c0e5905dcb738a59ec2e5d47684707191ff32746a0cbc65b02be7841 +Q = 049e7553eab8cc7e2e7396128f42ab260c6dbb5457cbff2070ea7c0db21def1537939e3f02699e5dd460eca3798d08bd6d892c0c8e47dddf858e89099a8fc1026e8b8333532b22f561f7647f63f9c79dbf5e8dd18fbfe6ff34902233119c5d5aa3 +Sig = 306402302452da6a48c3749b66e576e0f1f768d51728be17aea149164c4e1654c5ce27f625a4610c4a2eeddb3a0626d3abc6c37c0230499504fb58c9db24a7ff5f7921e1312f8aa583c08a308e080f5ef1acf5cdae7927c4101573db069ab0b6de7f4f1cab38 +Result = F (1 - Message changed) + +Curve = P-384 +Digest = SHA256 +Msg = b9d8d5d47edaa2dca7d7d687f98264b6e21a8e1eeb20083efedb71c116d13150d95f62a369a79f0f45233d2751a4b36432c7c12e19c8bef37568fa1a347929398b7ee69046e11911e3db472c3bccbd68653d99e461b4e5cfa617f94d59798f333ccf13abf426ca8be0f6587a453632a50c159d96695ad03dbaac716e811a3586 +Q = 040cf4dc51e71185a29c0c6fa3c075d9da5bd7ede085053344dce5dbbe8329e8ac9045f7246c9d0efed393b8e113c71429fdb7917b73974b355cf9f3bef6a0a460c2d39fdf1fe32a7744be0a54ddd1cfa8d03914cff4b5ca536b40707ff2629aa4 +Sig = 306402303812c2dc2881d7ef7f621993b161672329b261ff100bbd19fb5826c9face09aec2017b6843d69336b813b673c540252702305dc102fab9d6325131c556ec00309c2959d1031a63fbc1e2d5d04996d3234ed33875c0ab98e5878e9bc72742519ed398 +Result = F (2 - R changed) + +Curve = P-384 +Digest = SHA256 +Msg = 6d9cf30d59cc9d6e560e9c52f8be325d19eb3cea592e43bd9584411d76064729c03ad54feb4dce435fb662ff069ca3e19bd16c312567f05018feb8f913caf7553ac728ac787ea3ca073a328633441d7c5cc4d30ec194f248c0701119f7dd80c99e44f469f37cc6726601c97e7d94dc8e549261b46d219a7ea36bee650ccd15cf +Q = 046c590434988155236b43147389c6dbfdd27dcd3387e9b4c2587ece670753a542a13a736579887791cf53d31e5ce9999435a20194ff3f1b55f7ffb2758ddd4b98dd0d9e0cc213e10ed25e8e0430fe861066c1d4423c67f0c93f7ebd87fd3c561e +Sig = 306602310089ff866889245e797926509e563b1746920b78c9370a6cdae52663730d131e558e327d1f5fef8faf9e6c802fa29504ed0231008dd68e2de2f788e598b3e5a60c18d81849a0cc14b3b0e3c931910639f3125e5d6045f00330b1fa989252a80f95419b04 +Result = F (2 - R changed) + +Curve = P-384 +Digest = SHA256 +Msg = 2de0c0671213bd4326ffa5a1070ca605733961b11e9f939f805d2d6974d5286e1b1c00adac360f32bd58432629f8c932e241ffaae742c9336f4c95782d4b73255cac0644c8c2d7099c2ba1fd0cf4243344dd8dc0f77004730f5078479955c385959e06303ef2fda8df81e7237251e3e84a03515505e448aa1330a9a1cd4822a5 +Q = 04499cbdf18ec4e69b88051543c7da80845fa2de8be2b9d9045fee7f104a8b5b7d04e69142de9955c5ab18c5a34ebff075a29cb8d28836b201a389922b6f8f93870f09c80a00242d00d32656a43ac1440fc55bcb123551a73290f603c3469be9ed +Sig = 3065023025d4d243da6fd9b439a9242c3656fade7acb7a306e8cf23ea89e3ff4f9330be19c61aaa42d7b426d12c8e0f96b80dae5023100e7a99cf4b269bb4a6210d185e9654602523b5cfa1cddc94b1db92018aa557ecb6adda44c816975f5ec1756b6df3c44fd +Result = F (3 - S changed) + +Curve = P-384 +Digest = SHA256 +Msg = 69de70edec5001b0f69ee0b0f1dab6fb22a930dee9a12373fe671f9a5c6804ee1cd027872867c9a4e0bdfed523eb14600cfed64fca415188d56eb651d31731cd3e0efec7251c7defde922cf435ba41454a58d2abf5f29ce5b418a836cab1671d8cdc60aa239a17a42072137cfdc0628715c06b19a2ea2e55005701c220c0924f +Q = 049a74ea00203c571bd91ae873ce0ed517f8f0a929c1854d68abd3b83a5051c0b686bb37d12958a54940cfa2de23902da76f20ccf8fa360a9ec03d7bb79ff17ad885f714757ef62995f824908561dc0c3dffc49d873627936a2fff018b82879ced +Sig = 3065023100acc1fcac98c593fb0a0765fce35a601c2e9570d63ea1e612fff8bc99ac2d4d877750bb44cfb1014e52e00b9235e350af02307f53de3afa4146b1447e829ebac8f5645e948cc99e871c07280cc631613cfdaf52ccaeccbe93588a3fd12170a7ec79fa +Result = P (0 ) + +Curve = P-384 +Digest = SHA256 +Msg = 383ab0251157e645e678100ad3431b9ad96c6279e237ada71d85db0ce3a96fcd4805b2e7676e9a395f1d2f14f24535b77160b22d3d1c7d2e02ec4bbd82058f397db468f4d9ff0ab8306f9becd234f7a7b9c5a4ed44b7474913fe984b5b9e995fae9a951e6e8f2975df67a0180cea81fd4c97eea60a25c15e2ba21092ab0eebd5 +Q = 04e22f221809fb7a054ac799a70b3d24744eb7c5096c8671770399527c88ccf9ddaea0257a0ae9430d927ff5d9f109c533af4101d60df9b306ae92da7592f4faf3df422a3e33f1c2ed2973b2b900eefc346b4cf024de650abf537cecd12ac77618 +Sig = 3065023100c39a8e79f0560b9f26504469a470c7b2230c0d25de07c206e87dfbde9aff0a5d85322f56dfb50d4c1fc67c67d615dad702302ad94dd13a39cf4f4cb24c2c81d4c1181652363addd856dc9ba7455458e40ed047cd113129bc87f43949d5a98a0d5205 +Result = F (3 - S changed) + +Curve = P-384 +Digest = SHA256 +Msg = b23e83d372422cad7bf633ff84468b5ca0f1902eea801bb2e6e89b45d2f75ef9e08c47e010decdd2cfbd9280b01511164e00bd8323fd06a019e83d3dd23c8aa0313ad5196925b5b7d5c25ff8fd198ac2a234dbe0a13fbd04c4002ea89856e91e789e07e25d56690e0481cdb776a3035a64f4bd571097ef07bd49994f95d8323f +Q = 04fa8ebc3682d90ac7356f0b75b9e3376e76518676e0bedd176cfa7fa57fea4b3a399dbb2bf735ec90b9c1705cf9fa6f5718c3fbca0150ec10696b3851f31fb3ba62c0b6be509d249e0d4b374c7a08e49338e0922e2a8a9319999e6569ab8d292e +Sig = 3065023100fb58ab09b8a7ef7a6ec05b854eae11af9b713f7c7540e25115f609846e636ad4f88dcf4dd61e311273df23ccda474f030230485be4c21b7c3a9c6b39ffc9f0c39f4050f76d2a6b3fae203d016318c541c1b4ad6cfc0d0950636ff6883895dd49e4e9 +Result = P (0 ) + +Curve = P-384 +Digest = SHA256 +Msg = eeef70ae23d95330a71bdde1feb196d599481e057bdbd5ef519ce445a9b5acb46ede325a9caad720e4fc49c198ff5f0910c56a06d0cf76f450da1ad35fecccdb4442f64daa6149ee6b67ab1307ffb5c4b6ca3e72a644d36d9e71c4dd3283d12041e73e6d20ec19b3b20654593a4cca4b2fd9aa12f17d5b00b7ed43df74548010 +Q = 04e5f331536a2940cd67234bedf813c12e15aefa9a1a68429f8754bf2769a47c9c2efb5c42135e7b01a110d7302e097eac63b2398612c863febd482184e834d3acb51408c49aacbbd35d8719746f37cb13e013c9505ce034cd815aacd10d2f7a0d +Sig = 306502310096c35f22d036785a392dc6abf9b3cfb0ad37b5c59caefcc0b5212e94e86739a2674020ff79258094d90d7d59f09d47a10230373cbc865384734c56952f7a35a1fdecd88e8b343ee3aa073d30f5f25b73506f1e5f5857f668b0080dec6edeb5e1be96 +Result = F (1 - Message changed) + +Curve = P-384 +Digest = SHA256 +Msg = 7875194a0c3261cf414652cd9970219e3bf8185ad978affebd92ffd40c209a0d17dda0d5b79fefaeba3400088720598cc757aea1fb31ce976fb936726fd4b48d396a35cf4b78d16ddda56067ddc64728dc80b874c5286128b7b5da88808c7df5c3323791720e7ead8b50144dedc15590530b89cd022fd7291c97a4b9889d0568 +Q = 04c53ad865beb1e2b92764065f1a6bb465ee94aacabe43426a93c277d02e00fe36be1c859ba08a031fc518a0d0076689796728d42bae9bc097151748ffa0982964bdd16076fa0e7cc15837c1f773b08d02c3dbc57339091ccc34105b84781150b4 +Sig = 3065023100d4f0dd94fc3b657dbd234767949207624082ff946de9ce0aeb0d9993b8c7d7935760e1bf9d8b233bc7d6cd34928f521802300941df05062aa8849610f4b37d184db77ed1bc19ad2bb42f9a12c123017592bf4086bf424b3caad9a404b260a0f69efb +Result = F (2 - R changed) + +Curve = P-384 +Digest = SHA384 +Msg = 4132833a525aecc8a1a6dea9f4075f44feefce810c4668423b38580417f7bdca5b21061a45eaa3cbe2a7035ed189523af8002d65c2899e65735e4d93a16503c145059f365c32b3acc6270e29a09131299181c98b3c76769a18faf21f6b4a8f271e6bf908e238afe8002e27c63417bda758f846e1e3b8e62d7f05ebd98f1f9154 +Q = 041f94eb6f439a3806f8054dd79124847d138d14d4f52bac93b042f2ee3cdb7dc9e09925c2a5fee70d4ce08c61e3b191601c4fd111f6e33303069421deb31e873126be35eeb436fe2034856a3ed1e897f26c846ee3233cd16240989a7990c19d8c +Sig = 306502303c15c3cedf2a6fbff2f906e661f5932f2542f0ce68e2a8182e5ed3858f33bd3c5666f17ac39e52cb004b80a0d4ba73cd0231009de879083cbb0a97973c94f1963d84f581e4c6541b7d000f9850deb25154b23a37dd72267bdd72665cc7027f88164fab +Result = F (2 - R changed) + +Curve = P-384 +Digest = SHA384 +Msg = 9dd789ea25c04745d57a381f22de01fb0abd3c72dbdefd44e43213c189583eef85ba662044da3de2dd8670e6325154480155bbeebb702c75781ac32e13941860cb576fe37a05b757da5b5b418f6dd7c30b042e40f4395a342ae4dce05634c33625e2bc524345481f7e253d9551266823771b251705b4a85166022a37ac28f1bd +Q = 04cb908b1fd516a57b8ee1e14383579b33cb154fece20c5035e2b3765195d1951d75bd78fb23e00fef37d7d064fd9af144cd99c46b5857401ddcff2cf7cf822121faf1cbad9a011bed8c551f6f59b2c360f79bfbe32adbcaa09583bdfdf7c374bb +Sig = 3064023033f64fb65cd6a8918523f23aea0bbcf56bba1daca7aff817c8791dc92428d605ac629de2e847d43cee55ba9e4a0e83ba02304428bb478a43ac73ecd6de51ddf7c28ff3c2441625a081714337dd44fea8011bae71959a10947b6ea33f77e128d3c6ae +Result = P (0 ) + +Curve = P-384 +Digest = SHA384 +Msg = 9c4479977ed377e75f5cc047edfa689ef232799513a2e70280e9b124b6c8d166e107f5494b406853aec4cff0f2ca00c6f89f0f4a2d4ab0267f44512dfff110d1b1b2e5e78832022c14ac06a493ab789e696f7f0f060877029c27157ce40f81258729caa4d9778bae489d3ab0259f673308ae1ec1b1948ad2845f863b36aedffb +Q = 049b3c48d924194146eca4172b6d7d618423682686f43e1dbc54ed909053d075ca53b68ae12f0f16a1633d5d9cb17011ec695039f837b68e59330ee95d11d5315a8fb5602a7b60c15142dbba6e93b5e4aba8ae4469eac39fa6436323eccc60dcb6 +Sig = 30650230202da4e4e9632bcb6bf0f6dafb7e348528d0b469d77e46b9f939e2fa946a608dd1f166bcbcde96cfad551701da69f6c2023100db595b49983882c48df8a396884cd98893a469c4d590e56c6a59b6150d9a0acdf142cf92151052644702ed857a5b7981 +Result = F (3 - S changed) + +Curve = P-384 +Digest = SHA384 +Msg = 21eb31f2b34e4dde8d6c701e976d3fbbf4de6a3384329118d4ddb49adb2bb44465598abf6df25858b450c7767e282ccaca494088274e37353674eef58f583937d3d184ef727317d3672397a74c8fe327919a3df8fd65af0bc8cebbc40095adf89f1bf2c5e6dc6ba44633fd8433b25f065f5e3eb4840af23cc534415406745a31 +Q = 045140108b93b52d9ad572d6129ed6564766f8df3755e49fa53eba41a5a0d6c1d24a483c90070583a66e3cfa52b6fb1f31ff52498446a40c61e60c97554256472625633eda0c1a8b4061481fecfbe9c4503e99dfc69e86c9e85c8cc53dca6b8dc4 +Sig = 3065023100b2726b2ba9da02de35e9953fc283d1e78700860d4c33dce8db04dd41499d904866c1b8debb377f6c0dfcb0704252174f02300775b027068d7ad55121a278a819f52099ace750d5e996eaec9dee7be72758736cf769650148fbd5c411beb9b88f979e +Result = F (4 - Q changed) + +Curve = P-384 +Digest = SHA384 +Msg = 58ea3b1e82f97708053d0b41441d0aa9619050e86ac6c4f7781164e5da3019c47a839366509fa95812e4f64afdc62b627c7a98f633dd05db45c1d8954fc83bdb5042679378bb7e4c7863aacf2026360ca58314983e6c726cf02bb347706b844ddc66aee4177c309cb700769553480cdd6b1cd77341c9a81c05fbb80819bc623f +Q = 0431f4fc2fac3a163a5796f5e414af6f8107ab5e4a98c755d81efa9d5a83c10128c16c863190112fc29d3d5f3057a2edf1fe208743f3e96c3a34b5fff78c9716c074a1ce3dc01c3f0e471ddfae91cd88e7dda38dd0e5e1f91b00b8539da3cc10bc +Sig = 30640230706911812ec9e7370234efd57b2855975eab81e9c2fe783aa8e442dc6e7d681dab2dc0dfc6765f87ab67001108e3facf023042c89efa22d853d32f619c9fe13e9852889ac98a9fed5d4fa47fed238e1cbe70d7970af9f7bdf84e51176af4885f2490 +Result = F (4 - Q changed) + +Curve = P-384 +Digest = SHA384 +Msg = 188cd53097ef3e64b78b9260bf461708c836f25f2bcc98b534af98b96ee4b324e2203a7e62dbc396966f56419fb5135cb124369aaa025f396eac72f05ab45950d9e02cd5a2357eafab9f816117b7f1de192468895327802ec79f5d6b5a3d44d7afbed7b4a308e365655b8db2bde75e143062ee48b7c51688ac5db0bc7c83ec9c +Q = 041f7911dcfe63a6f270cf75b8584d9b1b4a00afc1fa43543c945945b8a821ebeb37fbc705a000f9cc7c35f7d27027b7bbf11835ec80c4ac06d99247e73bf72522109ac255e6109262de4dfbf9619244f74fb6c9ee57694537d7e79c248db34dc4 +Sig = 306402303587c9c6885adf3be1086825f9a41ccd2edfa0bd95e7fc4dba5a9710f41d539132de7772f14c18e318f8992b66d2a86c023073a844d729599d4e3e3c1b63e9c4bf5a73d1f69e0160857fe63a56c381c051f5c37ea6b4cc4caacb6ff26ef9699efe30 +Result = F (4 - Q changed) + +Curve = P-384 +Digest = SHA384 +Msg = 6462bc8c0181db7d596a35aa25d5d323dd3b2798054c2af6c22e841b1ccf3dc3ee514f86d4a0cef7a6f7f566ae448b24dcc8d11eb7a585d44923ea1a06c774a2b3eb7409ab17a0065d5834ab00309ad44312a7317259219543e80ddb0cc2a4381bf6e53cd1bb357eba82e11c59f82e446c4b79314119182c0de96a1b5bae0b08 +Q = 042039661db813d494a9ecb2c4e0cdd7b54068aae8a5d0597009f67f4f36f32c8ee939abe03716e94970bba69f595fead6e2d5236e7e357744514e66a3fb111073336de929598eb79fb4368c5bf80814e7584a3b94118faac9321df37452a846fc +Sig = 30640230164b8ac2b34c4c499b9d6727e130b5ef37c296bd22c306d1396c6aa54ca661f729aa6353b55d7cf1793b80b5a485115f02304e7187f8f735b7272f2c0985315b5602bb9b1a09f32233aa10570c82d1ccedef6e725800336511e47f88ddbbbdc08f54 +Result = F (1 - Message changed) + +Curve = P-384 +Digest = SHA384 +Msg = 13c63a3cb61f15c659720658a77869145ae8a176c6d93d3a8aa9946236d9fb0463db9e48c667cba731afaa814ba0d58357524f8de28d4c4bbe2691dac9b32632a7dd0f99fd4cb240290878305011f7d3e37ecc410cc1fed601e7901e8be6414ea44317584843a2d2ca2e15103e1ea49365bc384355b3c6fa6ccdd452543e9769 +Q = 0446dcf8ee848c6459fa66d1cae91ccd471401a5782cb2d3b9b9264189f0e9ddf7197b05c694931bde3306240cf9d24b7e79d9508f82c5ead05c3f9392f3b1458f6d6c02f44420b9021d656e59402e2645bf3ba1a6b244ddb12edbb69516d5873b +Sig = 306402305ffba3b5bd7c3a89ec40b47884b0b3464e8abb78608c6d61e1e62c2ca98d44fcdf61825d69dffee8408d0849d0623bac02300d2597b5fc3842ffce1957172253a8c9c0e4dbe770ce54f70f139e0545dc34ec639d609e14175bdb2b812ccfda00c9d4 +Result = F (1 - Message changed) + +Curve = P-384 +Digest = SHA384 +Msg = 6939a9118adc307107aa6b0057c280d10fa44a64700c7bd23e1f33a478ad2cfe596c05f72b540cbdb696aac6ab98d9ca8c62f33e182657130b8317a76275a5996333a5d3547e2293b401d0adf60f91e91d2137e34f3336e017c3c6dba6bf5b13dd0de288f9b20a896a92c48e984fbc09f920fab82f3f915d6524b0c11236aca4 +Q = 04097cea75f685cf4d54324ad2124ce3f77b1e490bbaa1ffacde40dd988f7591e1c5d158e6f232500d958762831914af7f716d8bc056daf69ca2edd21b89a6ae9923cfcae87bfda5f9a6e514dd4b9d28d164fcc613ca2afb9660adfece59f09b66 +Sig = 306502301c5d4561d2a3af8835839b543098c101c715c545eb7d00300c5cb05bb08dac29e732ffdc31c50915e691999ad505104c023100c3442f2fb1498fd47c2f959edff37a19783e3ccee80dc6955ca64db087fd188e67358e7b9223535bbb858d21ba6a978c +Result = F (2 - R changed) + +Curve = P-384 +Digest = SHA384 +Msg = c82071e42c45ac3597f255ba27766afe366e31a553a4d2191360b88a2a349ee077291454bf7b323cb3c9d7fec5533e4e4bf4fb5bc2eb16c6319e9378a3d8a444b2d758123438dbb457b26b14b654b3c88d66838adfa673067c0552d1b8a3ade3a9cb777986c00f65cace53f852c1121acf19516a7cf0ba3820b5f51f31c539a2 +Q = 04d2e2b3d262bb1105d914c32c007ea23d15a98197f0ed90b46a17f3d403e406a76c8f752be1a8cd01a94fd45157f6511ae585fba180017b9983b4c853ad3a5dd52e079c5f0ef792d1a0213b6085e390b073de1a4b01749ceab27806e5604980fe +Sig = 3064023049c001c47bbcee10c81c0cdfdb84c86e5b388510801e9c9dc7f81bf667e43f74b6a6769c4ac0a38863dc4f21c558f28602301fb4ff67340cc44f212404ba60f39a2cb8dcd3f354c81b7219289d32e849d4915e9d2f91969ba71e3dd4414f1e8f18f7 +Result = F (3 - S changed) + +Curve = P-384 +Digest = SHA384 +Msg = 137b215c0150ee95e8494b79173d7ae3c3e71efcc7c75ad92f75659ce1b2d7eb555aad8026277ae3709f46e896963964486946b9fe269df444a6ea289ec2285e7946db57ff18f722a583194a9644e863ae452d1457dc5db72ee20c486475f358dc575c621b5ab865c662e483258c7191b4cc218e1f9afeeb3e1cb978ce9657dc +Q = 04cd887c65c01a1f0880bf58611bf360a8435573bc6704bfb249f1192793f6d3283637cd50f3911e5134b0d6130a1db60ef2b3cbf4fe475fd15a7897561e5c898f10caa6d9d73fef10d4345917b527ce30caeaef138e21ac6d0a49ef2fef14bee6 +Sig = 3065023100addfa475b998f391144156c418561d323bdfd0c4f416a2f71a946712c349bb79ba1334c3de5b86c2567b8657fe4ca1f102301c314b1339f73545ff457323470695e0474c4b6860b35d703784fbf66e9c665de6ca3acb60283df61413e0740906f19e +Result = F (2 - R changed) + +Curve = P-384 +Digest = SHA384 +Msg = 93e7e75cfaf3fa4e71df80f7f8c0ef6672a630d2dbeba1d61349acbaaa476f5f0e34dccbd85b9a815d908203313a22fe3e919504cb222d623ad95662ea4a90099742c048341fe3a7a51110d30ad3a48a777c6347ea8b71749316e0dd1902facb304a76324b71f3882e6e70319e13fc2bb9f3f5dbb9bd2cc7265f52dfc0a3bb91 +Q = 04a370cdbef95d1df5bf68ec487122514a107db87df3f8852068fd4694abcadb9b14302c72491a76a64442fc07bd99f02cd397c25dc1a5781573d039f2520cf329bf65120fdbe964b6b80101160e533d5570e62125b9f3276c49244b8d0f3e44ec +Sig = 3065023100c6c7bb516cc3f37a304328d136b2f44bb89d3dac78f1f5bcd36b412a8b4d879f6cdb75175292c696b58bfa9c91fe639102306b711425e1b14f7224cd4b96717a84d65a60ec9951a30152ea1dd3b6ea66a0088d1fd3e9a1ef069804b7d969148c37a0 +Result = P (0 ) + +Curve = P-384 +Digest = SHA384 +Msg = 15493aa10cfb804b3d80703ca02af7e2cfdc671447d9a171b418ecf6ca48b450414a28e7a058a78ab0946186ad2fe297e1b7e20e40547c74f94887a00f27dde7f78a3c15eb1115d704972b35a27caf8f7cdcce02b96f8a72d77f36a20d3f829e915cd3bb81f9c2997787a73616ed5cb0e864231959e0b623f12a18f779599d65 +Q = 04d1cf635ca04f09b58879d29012f2025479a002bda590020e6a238bccc764478131cac7e6980c67027d92ece947fea5a621f7675c2be60c0a5b7d6df2bcc89b56212a2849ec0210c59316200c59864fd86b9a19e1641d206fd8b29af7768b61d3 +Sig = 306402306101d26e76690634b7294b6b162dcc1a5e6233813ba09edf8567fb57a8f707e024abe0eb3ce948675cd518bb3bfd438302304e2a30f71c8f18b74184837f981a90485cd5943c7a184aba9ac787d179f170114a96ddbb8720860a213cc289ae340f1f +Result = F (1 - Message changed) + +Curve = P-384 +Digest = SHA384 +Msg = bc5582967888a425fb757bd4965900f01e6695d1547ed967c1d4f67b1b1de365d203f407698761699fec5f5a614c21e36a9f57a8aaf852e95538f5615785534568811a9a9ccc349843f6c16dc90a4ac96a8f72c33d9589a860f4981d7b4ee7173d1db5d49c4361368504c9a6cbbaedc2c9bff2b12884379ba90433698ceb881d +Q = 04d15ca4b2d944d5539658a19be8ef85874f0c363b870f1cd1f2dc9cb68b2a43a10d37064697c84543e60982ab62bb32c8062fb7dfc379fc6465302ac5d8d11d3b957b594c9ef445cfe856765dd59e6f10f11809e115ac64969baa23543f2e5661 +Sig = 3065023100e2cf123ce15ca4edad5f087778d483d9536e4a37d2d55599541c06f878e60354aa31df250b2fc4ed252b80219552c9580230696707a7e3f9a4b918e7c994e7332103d8e816bbe6d0d1cf72877318e087ed0e230b0d1269902f369acb432b9e97a389 +Result = P (0 ) + +Curve = P-384 +Digest = SHA384 +Msg = 4f31331e20a3273da8fce6b03f2a86712ed5df41120a81e994d2b2f370e98ef35b847f3047d3cf57e88350e27b9ac3f02073ac1838db25b5ad477aee68930882304fc052f273821056df7500dc9eab037ed3ac3c75396e313bf0f4b89b26675af55f3378cf099d9d9a25a4887c1cfd2448f5b2188c41d6fa26045c5e974bf3e4 +Q = 04c83d30de9c4e18167cb41c990781b34b9fceb52793b4627e696796c5803515dbc4d142977d914bc04c153261cc5b537f42318e5c15d65c3f545189781619267d899250d80acc611fe7ed0943a0f5bfc9d4328ff7ccf675ae0aac069ccb4b4d6e +Sig = 3066023100b567c37f7c84107ef72639e52065486c2e5bf4125b861d37ea3b44fc0b75bcd96dcea3e4dbb9e8f4f45923240b2b9e44023100d06266e0f27cfe4be1c6210734a8fa689a6cd1d63240cb19127961365e35890a5f1b464dcb4305f3e8295c6f842ef344 +Result = F (3 - S changed) diff --git a/vendor/ring/tests/ecdsa_verify_fixed_tests.txt b/vendor/ring/tests/ecdsa_verify_fixed_tests.txt new file mode 100644 index 00000000..48a7aaee --- /dev/null +++ b/vendor/ring/tests/ecdsa_verify_fixed_tests.txt @@ -0,0 +1,271 @@ +# Test vectors for short (zero-padded) values of s. + +# S is the maximum length. +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 0430345fd47ea21a11129be651b0884bfac698377611acc9f689458e13b9ed7d4b9d7599a68dcf125e7f31055ccb374cd04f6d6fd2b217438a63f6f667d50ef2f0 +Sig = 341f6779b75e98bb42e01095dd48356cbf9002dc704ac8bd2a8240b88d3796c6555843b1b4e264fe6ffe6e2b705a376c05c09404303ffe5d2711f3e3b3a010a1 +Result = P (0 ) + +# S is one byte shorter than the maximum length. +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 0430345fd47ea21a11129be651b0884bfac698377611acc9f689458e13b9ed7d4b9d7599a68dcf125e7f31055ccb374cd04f6d6fd2b217438a63f6f667d50ef2f0 +Sig = 31ed574e9688aed7016e985c0e742fb788be73d9ad0a895e6182c77751817ed000d98eb6d480d64d1729c680693cb13bd6bf0c7b651007e459e667683ff65b92 +Result = P (0 ) + +# S is 2 bytes shorter than the maximum length. +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 0430345fd47ea21a11129be651b0884bfac698377611acc9f689458e13b9ed7d4b9d7599a68dcf125e7f31055ccb374cd04f6d6fd2b217438a63f6f667d50ef2f0 +Sig = f59cf66594cc837415f16494fb52c02f2a6264bf6ce7dccbf2f78c090cdcefb000005a8c8a04ba7825f3f8e56517056daa1a51129cd91382a24589ed05d0c13d +Result = P (0 ) + +# S is the maximum length. +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 045c5e788a805c77d34128b8401cb59b2373b8b468336c9318252bf39fd31d2507557987a5180a9435f9fb8eb971c426f1c485170dcb18fb688a257f89387a09fc4c5b8bd4b320616b54a0a7b1d1d7c6a0c59f6dff78c78ad4e3d6fca9c9a17b96 +Sig = 85ac708d4b0126bac1f5eeebdf911409070a286fdde5649582611b60046de353761660dd03903f58b44148f25142eef8183475ec1f1392f3d6838abc0c01724709c446888bed7f2ce4642c6839dc18044a2a6ab9ddc960bfac79f6988e62d452 +Result = P (0 ) + +# S is one byte shorter than the maximum length. +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 045c5e788a805c77d34128b8401cb59b2373b8b468336c9318252bf39fd31d2507557987a5180a9435f9fb8eb971c426f1c485170dcb18fb688a257f89387a09fc4c5b8bd4b320616b54a0a7b1d1d7c6a0c59f6dff78c78ad4e3d6fca9c9a17b96 +Sig = 4dec97b54c4150ebaffc2dbfc2bc17c302be47cfc4b541ada34108b1080f2482a3e7f5f2b16f730210bd8c29b6681e0b000575984f37064bfbbdda76836f5ef2d632f006c338a9585c8b9108c46ea812ce066110156de9806ae5711153e2ef0b +Result = P (0 ) + +# S is 2 bytes shorter than the maximum length. +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 045c5e788a805c77d34128b8401cb59b2373b8b468336c9318252bf39fd31d2507557987a5180a9435f9fb8eb971c426f1c485170dcb18fb688a257f89387a09fc4c5b8bd4b320616b54a0a7b1d1d7c6a0c59f6dff78c78ad4e3d6fca9c9a17b96 +Sig = ad8e51ec23d5b8130a5e0636a2f0d1740e8b5404c368b7dab5ae82d307d653c6ef70dcee70b112bf678801f87fb8f5a90000806d69e0c2834c27666996d55655cf9358b201aa85d3b08891abcc68c854cac6c67c53b3bf92df9a677d11aba13d +Result = P (0 ) + + +# Generated Test vectors. +# +# TODO: Test the range of `r` in addition to the range of `s`. +# TODO: Test what happens when the message digests to zero. +# TODO: Additional test coverage. libsecp256k1 is a good example. + + +# Test vectors for Gregory Maxwell's trick. +# +# In all cases, the `s` component of the signature was selected +# arbitrarily as 4 and then the `r` component was chosen to be the +# smallest value where the public key recovery from the signature +# works. + +# The signature has r < q - n. This is the control case for the next +# test case; this signature is the same but the public key is +# different. Notice that both public keys work for the same signature! +# This signature will validate even if the implementation doesn't +# reduce the X coordinate of the multiplication result (mod n). +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 041548fc88953e06cd34d4b300804c5322cb48c24aaaa4d07a541b0f0ccfeedeb0ae4991b90519ea405588bdf699f5e6d0c6b2d5217a5c16e8371062737aa1dae1 +Sig = 00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004 +Result = P (0 ) + +# The signature has r < q - n. s Since r < q - n, r + n < q. Notice +# that this signature is the same as the signature in the preceding +# test case, but the public key is different. That the signature +# validates for this case too is what's special about the case where +# r < q - n. If this test case fails it is likely that the +# implementation doesn't reduce the X coordinate of the multiplication +# result (mod n), or it is missing the second step of Gregory +# Maxwell's trick. +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 04ad8f60e4ec1ebdb6a260b559cb55b1e9d2c5ddd43a41a2d11b0741ef2567d84e166737664104ebbc337af3d861d3524cfbc761c12edae974a0759750c8324f9a +Sig = 00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004 +Result = P (0 ) + +# The signature has r > q - n. The signature is for the public key +# recovered from r. r + n > q since r > q - n. This is the control +# for the next test case; this signature is the same as the signature +# in the following test case but the public key is different. +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 0445bd879143a64af5746e2e82aa65fd2ea07bba4e35594095a981b59984dacb219d59697387ac721b1f1eccf4b11f43ddc39e8367147abab3084142ed3ea170e4 +Sig = 000000000000000000000000000000004319055358e8617b0c46353d039cdaae0000000000000000000000000000000000000000000000000000000000000004 +Result = P (0 ) + +# The signature has r > q - n. The signature is for the public key +# recovered from r + n (mod q). r + n > q since r > q - n, and so +# r + n (mod q) < r because r + n (mod n) != r + n (mod q). Notice +# that this signature is the same as the signature in the preceding +# test case but the public key is different. Also, notice that the +# signature fails to validate in this case, unlike other related test +# cases. If this test case fails (the signature validates), it is +# likely that the implementation didn't guard the second case of +# Gregory Maxwell's trick on the condition r < q - n. +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 040feb5df4cc78b35ec9c180cc0de5842f75f088b48456978ffa98e716d94883e1e6500b2a1f6c1d9d493428d7ae7d9a8a560fff30a3d14aa160be0c5e7edcd887 +Sig = 000000000000000000000000000000004319055358e8617b0c46353d039cdaae0000000000000000000000000000000000000000000000000000000000000004 +Result = F + +# The signature has r < q - n. This is the control case for the next +# test case; this signature is the same but the public key is +# different. Notice that both public keys work for the same signature! +# This signature will validate even if the implementation doesn't +# reduce the X coordinate of the multiplication result (mod n). +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 0425b890b9597155baf7e7ffb48d8123184cbb76ea3f7b10d8f1702136f969e915188cff306c67950437f816ce6ecb739204cc069edac95929dfbd719313552797962789e2210a0bf270c2f0ffc109a70e40da6303a2599bdd702c19070dd51f42 +Sig = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004 +Result = P (0 ) + +# The signature has r < q - n. s Since r < q - n, r + n < q. Notice +# that this signature is the same as the signature in the preceding +# test case, but the public key is different. That the signature +# validates for this case too is what's special about the case where +# r < q - n. If this test case fails it is likely that the +# implementation doesn't reduce the X coordinate of the multiplication +# result (mod n), or it is missing the second step of Gregory +# Maxwell's trick. +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 045a3c576f0c2a615063c6e8ec40f5bf0dd67e549e9f13f8f881703ec40a8d6d8ecbb0d8e5b20f3aa0f2e581b594cea3e654a450cabcf24bd908cc47da98eba648a0440332ee19fb53da96dddaec521f718f7b52a161b67134d6e0d6e81dc45502 +Sig = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004 +Result = P (0 ) + +# The signature has r > q - n. The signature is for the public key +# recovered from r. r + n > q since r > q - n. This is the control +# for the next test case; this signature is the same as the signature +# in the following test case but the public key is different. +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 04a93588bffb32417bd2b0fa03a6a30d2cf90034e6070b9333d4e7a42fe88bce5a03e8be7f2a84fbc25ec84dc34915c53fd975cfd0db77ec2b5c548994dc9f62756e018882a31d883471b0bbbd8588d9a2acab1aeaaa1eb217f8e528e7114162df +Sig = 000000000000000000000000000000000000000000000000389cb27e0bc8d21fa7e5f24cb74f58851313e696333ad68e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004 +Result = P (0 ) + +# The signature has r > q - n. The signature is for the public key +# recovered from r + n (mod q). r + n > q since r > q - n, and so +# r + n (mod q) < r because r + n (mod n) != r + n (mod q). Notice +# that this signature is the same as the signature in the preceding +# test case but the public key is different. Also, notice that the +# signature fails to validate in this case, unlike other related test +# cases. If this test case fails (the signature validates), it is +# likely that the implementation didn't guard the second case of +# Gregory Maxwell's trick on the condition r < q - n. +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 04576270f9571c9e99b9c71be1a1a705e5155e46b8c6dd920c14e2aaf0f9f96ed30754e2c8f8464d015a9bc779495ea568ac39c555c3b03de021e8167a27425588d6a82b68cf7a0f6ae389a202d8663ed32b5e1782c0377a8f0dc309ae28143961 +Sig = 000000000000000000000000000000000000000000000000389cb27e0bc8d21fa7e5f24cb74f58851313e696333ad68e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004 +Result = F + + +# Generated Test vectors edge cases of signature (r, s) values. + +# s == 0 (out of range) +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 0471db746fd153cf5c5a7c7210f9008c0e99c3a936ef0e720b202b304771431a230af53931e70cbe279ca47ce819616ed1db6604490f70abbcef3036732426eb6d +Sig = 00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000 +Result = F + +# s == 1 (minimum allowed) +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 046e3f95fae7606c1cdfab1f1560de160ed806bbc2a85dc5a2d002aa1c0ac3e1fb5bcd5f7a325415824365cc584f08c144118318ce4d0f5df82b7753b291c4fe96 +Sig = 00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001 +Result = P (0 ) + +# s == n (out of range) +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 0471db746fd153cf5c5a7c7210f9008c0e99c3a936ef0e720b202b304771431a230af53931e70cbe279ca47ce819616ed1db6604490f70abbcef3036732426eb6d +Sig = 0000000000000000000000000000000000000000000000000000000000000006ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 +Result = F + +# s == n - 1 (maximum allowed) +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 04d78f14b53bf825c9f7146193f775458ef5ee46500cd44b18488cb4115c3f00f04b11fc7c6aa1045dc83e4f3e8a14d4a017db8415b5fe3f1a32afba4b8c707ab4 +Sig = 0000000000000000000000000000000000000000000000000000000000000006ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +Result = P (0 ) + +# s == n - 1 (maximum allowed), missing first zero byte. +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 04d78f14b53bf825c9f7146193f775458ef5ee46500cd44b18488cb4115c3f00f04b11fc7c6aa1045dc83e4f3e8a14d4a017db8415b5fe3f1a32afba4b8c707ab4 +Sig = 00000000000000000000000000000000000000000000000000000000000006ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550 +Result = F + +# s == n - 1 (maximum allowed), missing last nonzero byte. +Curve = P-256 +Digest = SHA256 +Msg = "" +Q = 04d78f14b53bf825c9f7146193f775458ef5ee46500cd44b18488cb4115c3f00f04b11fc7c6aa1045dc83e4f3e8a14d4a017db8415b5fe3f1a32afba4b8c707ab4 +Sig = 0000000000000000000000000000000000000000000000000000000000000006ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325 +Result = F + +# s == 0 (out of range) +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 04aad95ed7839057e221d46bb203f8b6c977588966fffccf815542429477dc45e61ed6b86fec0a2f3dfb453ea56ac0a6c06933416550a7158ed3f06aca1822c9b83102b40e5ada71651ec153a919a32755ee0292f6a5530d5889c1dc6cb020351f +Sig = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +Result = F + +# s == 1 (minimum allowed) +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 042aadde5424928b888e20ecef2525f99d646519aa994c075a4081aa852ec309a6ac63006421ff756c6c0924d611d1bda82df99267266ba603b07ba85c678f4ae69daf4634a5e597d77d0b0338f343d8090b2d4420a29302ab47ef04ad45e1461f +Sig = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 +Result = P (0 ) + +# s == n (out of range) +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 04aad95ed7839057e221d46bb203f8b6c977588966fffccf815542429477dc45e61ed6b86fec0a2f3dfb453ea56ac0a6c06933416550a7158ed3f06aca1822c9b83102b40e5ada71651ec153a919a32755ee0292f6a5530d5889c1dc6cb020351f +Sig = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 +Result = F + +# s == n - 1 (maximum allowed) +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 04a1d58e8df7f27c4483be9369f8d73d3ea968fce26ff5374d822c5cb4286c00f6fef54d525f4c8b180065dcc1f95f7a0c291171ca5894ba3f4d52ae091ec36c81ee2f34a384c59183284d85dddc3b196c6d7deaab1626d662bc628136126eef6b +Sig = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +Result = P (0 ) + +# s == n - 1 (maximum allowed), missing first zero byte. +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 04a1d58e8df7f27c4483be9369f8d73d3ea968fce26ff5374d822c5cb4286c00f6fef54d525f4c8b180065dcc1f95f7a0c291171ca5894ba3f4d52ae091ec36c81ee2f34a384c59183284d85dddc3b196c6d7deaab1626d662bc628136126eef6b +Sig = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972 +Result = F + +# s == n - 1 (maximum allowed), missing last nonzero byte. +Curve = P-384 +Digest = SHA384 +Msg = "" +Q = 04a1d58e8df7f27c4483be9369f8d73d3ea968fce26ff5374d822c5cb4286c00f6fef54d525f4c8b180065dcc1f95f7a0c291171ca5894ba3f4d52ae091ec36c81ee2f34a384c59183284d85dddc3b196c6d7deaab1626d662bc628136126eef6b +Sig = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529 +Result = F diff --git a/vendor/ring/tests/ed25519_from_pkcs8_tests.txt b/vendor/ring/tests/ed25519_from_pkcs8_tests.txt new file mode 100644 index 00000000..5831869a --- /dev/null +++ b/vendor/ring/tests/ed25519_from_pkcs8_tests.txt @@ -0,0 +1,45 @@ +# v2. The private key ends with a zero byte. +Input = 3053020101300506032b657004220420a22efdb713f0e1600d2a5ce948e321ca3a18137c47f15091a12c7126c1749a00a1230321001aeb8e3ee5ba5afd91113466d19f4ea77fa0feffbd8c5adcb499927f12535f77 + +# v2. The private key's last byte, zero, is omitted. +Input = 3052020101300506032b65700421041fa22efdb713f0e1600d2a5ce948e321ca3a18137c47f15091a12c7126c1749aa1230321001aeb8e3ee5ba5afd91113466d19f4ea77fa0feffbd8c5adcb499927f12535f77 +Error = InvalidEncoding + +# v2. The private key starts with a zero byte. +Input = 3053020101300506032b65700422042000b1a7c20b2b4ed9c78f3686db82f854734cdc95be51def304d98e0cd30bf490a12303210063457cd4dfdd0e98a53796265831d46ac6a5a685f2a54c9697a38b2c800d60ba + +# v2. The private key's first byte, zero, is omitted. +Input = 3052020101300506032b65700421041fb1a7c20b2b4ed9c78f3686db82f854734cdc95be51def304d98e0cd30bf490a12303210063457cd4dfdd0e98a53796265831d46ac6a5a685f2a54c9697a38b2c800d60ba +Error = InvalidEncoding + +# v2. The public key's first byte is zero. +Input = 3053020101300506032b6570042204202dc67de5186d9193021c0b104d9c6ef24bee2bd395ccb5ed5a2db5f37a2fc1f0a12303210000c17e4d8bbff27c1fb618c23fce988703c7efa3cd590aacac12d3f1e3c90c8c + +# v2. The public key's first byte, zero, is omitted. +Input = 3052020101300506032b6570042204202dc67de5186d9193021c0b104d9c6ef24bee2bd395ccb5ed5a2db5f37a2fc1f0a122032000c17e4d8bbff27c1fb618c23fce988703c7efa3cd590aacac12d3f1e3c90c8c +Error = InvalidEncoding + +# v2. The public key's last byte is zero. +Input = 3053020101300506032b657004220420b2579f555a2eabdabac8d46997b1c08fe8ce63858df124efc29c60dfbb86c349a1230321009d421270ce2fcc08672c41e427214876245c9b0f14ab671b8bb9d266a492e400 + +# v2. The public key's last byte, zero, is omitted (valid ASN.1 DER). +Input = 3052020101300506032b657004220420b2579f555a2eabdabac8d46997b1c08fe8ce63858df124efc29c60dfbb86c349a1220320009d421270ce2fcc08672c41e427214876245c9b0f14ab671b8bb9d266a492e4 +Error = InvalidEncoding + +# v2. The public key's last byte, zero, has been truncated (invalid ASN.1 DER). +Input = 3053020101300506032b657004220420b2579f555a2eabdabac8d46997b1c08fe8ce63858df124efc29c60dfbb86c349a1230321009d421270ce2fcc08672c41e427214876245c9b0f14ab671b8bb9d266a492e4 +Error = InvalidEncoding + +# v2. The public key's high bit has been flipped. Ed25519 public keys don't +# have their high bit masked, so this is wrong. +Input = 3053020101300506032b6570042204202dc67de5186d9193021c0b104d9c6ef24bee2bd395ccb5ed5a2db5f37a2fc1f0a12303210000c17e4d8bbff27c1fb618c23fce988703c7efa3cd590aacac12d3f1e3c90c0c +Error = InconsistentComponents + +# v2. Valid except the public key field is missing. +Input = 302e020101300506032b657004220420a22efdb713f0e1600d2a5ce948e321ca3a18137c47f15091a12c7126c1749a00 +Error = PublicKeyIsMissing + +# v2. Valid except the public key is encoded as [0] instead of [1]; i.e. the +# attributes are invalid and the public key is missing. +Input = 3053020101300506032b657004220420a22efdb713f0e1600d2a5ce948e321ca3a18137c47f15091a12c7126c1749a00a0230321001aeb8e3ee5ba5afd91113466d19f4ea77fa0feffbd8c5adcb499927f12535f77 +Error = PublicKeyIsMissing diff --git a/vendor/ring/tests/ed25519_from_pkcs8_unchecked_tests.txt b/vendor/ring/tests/ed25519_from_pkcs8_unchecked_tests.txt new file mode 100644 index 00000000..61fac528 --- /dev/null +++ b/vendor/ring/tests/ed25519_from_pkcs8_unchecked_tests.txt @@ -0,0 +1,13 @@ +# An Ed25519 private key. (This is from BoringSSL's tests.) +Input = 302e020100300506032b6570042204209d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60 + +# The same as the above, but with an invalid NULL parameter. (This is from BoringSSL's tests.) +Input = 3030020100300706032b65700500042204209d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60 +Error = WrongAlgorithm + +# Sample private key from draft-ietf-curdle-pkix-04. +Input = 302e020100300506032b657004220420d4ee72dbf913584ad5b6d8f1f769f8ad3afe7c28cbf1d4fbe097a88f44755842 + +# v1. valid except it includes publicKey. +Input = 3053020100300506032b657004220420a22efdb713f0e1600d2a5ce948e321ca3a18137c47f15091a12c7126c1749a00a1230321001aeb8e3ee5ba5afd91113466d19f4ea77fa0feffbd8c5adcb499927f12535f77 +Error = InvalidEncoding diff --git a/vendor/ring/tests/ed25519_test_private_key.bin b/vendor/ring/tests/ed25519_test_private_key.bin new file mode 100644 index 00000000..afd71690 --- /dev/null +++ b/vendor/ring/tests/ed25519_test_private_key.bin @@ -0,0 +1 @@ +a±ïýZ`º„Jô’ì,ÄDIÅi{2ip;¬®` \ No newline at end of file diff --git a/vendor/ring/tests/ed25519_test_private_key.p8 b/vendor/ring/tests/ed25519_test_private_key.p8 new file mode 100644 index 00000000..f60cc19b Binary files /dev/null and b/vendor/ring/tests/ed25519_test_private_key.p8 differ diff --git a/vendor/ring/tests/ed25519_test_public_key.bin b/vendor/ring/tests/ed25519_test_public_key.bin new file mode 100644 index 00000000..9ed91630 --- /dev/null +++ b/vendor/ring/tests/ed25519_test_public_key.bin @@ -0,0 +1,2 @@ +×Z˜‚± +·ÕKþÓÉd:áróÚ¦#%¯h÷Q \ No newline at end of file diff --git a/vendor/ring/tests/ed25519_test_public_key.der b/vendor/ring/tests/ed25519_test_public_key.der new file mode 100644 index 00000000..0ac2bd5c --- /dev/null +++ b/vendor/ring/tests/ed25519_test_public_key.der @@ -0,0 +1 @@ +X éþöÜìXðòã°Ö~˜€¡Wàƒ¬èX5öÈû¯k} \ No newline at end of file diff --git a/vendor/ring/tests/ed25519_tests.rs b/vendor/ring/tests/ed25519_tests.rs new file mode 100644 index 00000000..95369861 --- /dev/null +++ b/vendor/ring/tests/ed25519_tests.rs @@ -0,0 +1,197 @@ +// Copyright 2015-2017 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use ring::{ + error, + signature::{self, Ed25519KeyPair, KeyPair}, + test, test_file, +}; + +#[cfg(target_arch = "wasm32")] +use wasm_bindgen_test::{wasm_bindgen_test, wasm_bindgen_test_configure}; + +#[cfg(target_arch = "wasm32")] +wasm_bindgen_test_configure!(run_in_browser); + +/// Test vectors from BoringSSL. +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +#[cfg(any(not(target_arch = "wasm32"), feature = "wasm32_c"))] +fn test_signature_ed25519() { + test::run(test_file!("ed25519_tests.txt"), |section, test_case| { + assert_eq!(section, ""); + let seed = test_case.consume_bytes("SEED"); + assert_eq!(32, seed.len()); + + let public_key = test_case.consume_bytes("PUB"); + assert_eq!(32, public_key.len()); + + let msg = test_case.consume_bytes("MESSAGE"); + + let expected_sig = test_case.consume_bytes("SIG"); + + { + let key_pair = Ed25519KeyPair::from_seed_and_public_key(&seed, &public_key).unwrap(); + let actual_sig = key_pair.sign(&msg); + assert_eq!(&expected_sig[..], actual_sig.as_ref()); + } + + // Test PKCS#8 generation, parsing, and private-to-public calculations. + let rng = test::rand::FixedSliceRandom { bytes: &seed }; + let pkcs8 = Ed25519KeyPair::generate_pkcs8(&rng).unwrap(); + let key_pair = Ed25519KeyPair::from_pkcs8(pkcs8.as_ref()).unwrap(); + assert_eq!(public_key, key_pair.public_key().as_ref()); + + // Test Signature generation. + let actual_sig = key_pair.sign(&msg); + assert_eq!(&expected_sig[..], actual_sig.as_ref()); + + // Test Signature verification. + test_signature_verification(&public_key, &msg, &expected_sig, Ok(())); + + let mut tampered_sig = expected_sig; + tampered_sig[0] ^= 1; + + test_signature_verification(&public_key, &msg, &tampered_sig, Err(error::Unspecified)); + + Ok(()) + }); +} + +/// Test vectors from BoringSSL. +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +#[cfg(any(not(target_arch = "wasm32"), feature = "wasm32_c"))] +fn test_signature_ed25519_verify() { + test::run( + test_file!("ed25519_verify_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let public_key = test_case.consume_bytes("PUB"); + let msg = test_case.consume_bytes("MESSAGE"); + let sig = test_case.consume_bytes("SIG"); + let expected_result = match test_case.consume_string("Result").as_str() { + "P" => Ok(()), + "F" => Err(error::Unspecified), + s => panic!("{:?} is not a valid result", s), + }; + test_signature_verification(&public_key, &msg, &sig, expected_result); + Ok(()) + }, + ); +} + +fn test_signature_verification( + public_key: &[u8], + msg: &[u8], + sig: &[u8], + expected_result: Result<(), error::Unspecified>, +) { + assert_eq!( + expected_result, + signature::UnparsedPublicKey::new(&signature::ED25519, public_key).verify(msg, sig) + ); +} + +#[test] +fn test_ed25519_from_seed_and_public_key_misuse() { + const PRIVATE_KEY: &[u8] = include_bytes!("ed25519_test_private_key.bin"); + const PUBLIC_KEY: &[u8] = include_bytes!("ed25519_test_public_key.bin"); + + assert!(Ed25519KeyPair::from_seed_and_public_key(PRIVATE_KEY, PUBLIC_KEY).is_ok()); + + // Truncated private key. + assert!(Ed25519KeyPair::from_seed_and_public_key(&PRIVATE_KEY[..31], PUBLIC_KEY).is_err()); + + // Truncated public key. + assert!(Ed25519KeyPair::from_seed_and_public_key(PRIVATE_KEY, &PUBLIC_KEY[..31]).is_err()); + + // Swapped public and private key. + assert!(Ed25519KeyPair::from_seed_and_public_key(PUBLIC_KEY, PRIVATE_KEY).is_err()); +} + +#[test] +fn test_ed25519_from_pkcs8_unchecked() { + // Just test that we can parse the input. + test::run( + test_file!("ed25519_from_pkcs8_unchecked_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + let input = test_case.consume_bytes("Input"); + let error = test_case.consume_optional_string("Error"); + + match (Ed25519KeyPair::from_pkcs8_maybe_unchecked(&input), error) { + (Ok(_), None) => (), + (Err(e), None) => panic!("Failed with error \"{}\", but expected to succeed", e), + (Ok(_), Some(e)) => panic!("Succeeded, but expected error \"{}\"", e), + (Err(actual), Some(expected)) => assert_eq!(format!("{}", actual), expected), + }; + + Ok(()) + }, + ); +} + +#[test] +fn test_ed25519_from_pkcs8() { + // Just test that we can parse the input. + test::run( + test_file!("ed25519_from_pkcs8_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + let input = test_case.consume_bytes("Input"); + let error = test_case.consume_optional_string("Error"); + + match (Ed25519KeyPair::from_pkcs8(&input), error) { + (Ok(_), None) => (), + (Err(e), None) => panic!("Failed with error \"{}\", but expected to succeed", e), + (Ok(_), Some(e)) => panic!("Succeeded, but expected error \"{}\"", e), + (Err(actual), Some(expected)) => assert_eq!(format!("{}", actual), expected), + }; + + Ok(()) + }, + ); +} + +#[test] +fn ed25519_test_public_key_coverage() { + const PRIVATE_KEY: &[u8] = include_bytes!("ed25519_test_private_key.p8"); + const PUBLIC_KEY: &[u8] = include_bytes!("ed25519_test_public_key.der"); + const PUBLIC_KEY_DEBUG: &str = + "PublicKey(\"5809e9fef6dcec58f0f2e3b0d67e9880a11957e083ace85835c3b6c8fbaf6b7d\")"; + + let key_pair = signature::Ed25519KeyPair::from_pkcs8(PRIVATE_KEY).unwrap(); + + // Test `AsRef<[u8]>` + assert_eq!(key_pair.public_key().as_ref(), PUBLIC_KEY); + + // Test `Clone`. + #[allow(clippy::clone_on_copy)] + let _: ::PublicKey = key_pair.public_key().clone(); + + // Test `Copy`. + let _: ::PublicKey = *key_pair.public_key(); + + // Test `Debug`. + assert_eq!(PUBLIC_KEY_DEBUG, format!("{:?}", key_pair.public_key())); + assert_eq!( + format!( + "Ed25519KeyPair {{ public_key: {:?} }}", + key_pair.public_key() + ), + format!("{:?}", key_pair) + ); +} diff --git a/vendor/ring/tests/ed25519_tests.txt b/vendor/ring/tests/ed25519_tests.txt new file mode 100644 index 00000000..db590337 --- /dev/null +++ b/vendor/ring/tests/ed25519_tests.txt @@ -0,0 +1,2592 @@ +# Additional test vectors from RFC 8032 + +SEED = f5e5767cf153319517630f226876b86c8160cc583bc013744c6bf255f5cc0ee5 +PUB = 278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e +MESSAGE = 08b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d879de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4feba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbefefd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed185ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2d17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f27088d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b0707e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128bab27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51addd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429ec96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb751fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34dff7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08d78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e488acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a32ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5fb93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e506b50d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380db2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0 +SIG = 0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a03 + +SEED = 833fe62409237b9d62ec77587520911e9a759cec1d19755b7da901b96dca3d42 +PUB = ec172b93ad5e563bf4932c70e1245034c35467ef2efd4d64ebf819683467e2bf +MESSAGE = ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f +SIG = dc2a4459e7369633a52b1bf277839a00201009a3efbf3ecb69bea2186c26b58909351fc9ac90b3ecfdfbc7c66431e0303dca179c138ac17ad9bef1177331a704 + +# These were generated from +# http://ed25519.cr.yp.to/python/sign.input using the following Python script: +# +# import sys +# +# isFirst = True +# +# for line in sys.stdin.readlines(): +# (private, public, message, sig_and_message, _) = line.split(':') +# +# if not isFirst: +# print +# print "PRIV:", private +# print "PUB:", public +# print "MESSAGE:", message +# print "SIG:", sig_and_message[:128] +# isFirst = False +# +# This was adapted for *ring* by s/: / = /, denoting empty inputs with "", +# and replacing "PRIV" with "SEED", the first half of "PRIV". + +SEED = 9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60 +PUB = d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a +MESSAGE = "" +SIG = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b + +SEED = 4ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a6fb +PUB = 3d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c +MESSAGE = 72 +SIG = 92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00 + +SEED = c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b4458f7 +PUB = fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025 +MESSAGE = af82 +SIG = 6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40a + +SEED = 0d4a05b07352a5436e180356da0ae6efa0345ff7fb1572575772e8005ed978e9 +PUB = e61a185bcef2613a6c7cb79763ce945d3b245d76114dd440bcf5f2dc1aa57057 +MESSAGE = cbc77b +SIG = d9868d52c2bebce5f3fa5a79891970f309cb6591e3e1702a70276fa97c24b3a8e58606c38c9758529da50ee31b8219cba45271c689afa60b0ea26c99db19b00c + +SEED = 6df9340c138cc188b5fe4464ebaa3f7fc206a2d55c3434707e74c9fc04e20ebb +PUB = c0dac102c4533186e25dc43128472353eaabdb878b152aeb8e001f92d90233a7 +MESSAGE = 5f4c8989 +SIG = 124f6fc6b0d100842769e71bd530664d888df8507df6c56dedfdb509aeb93416e26b918d38aa06305df3095697c18b2aa832eaa52edc0ae49fbae5a85e150c07 + +SEED = b780381a65edf8b78f6945e8dbec7941ac049fd4c61040cf0c324357975a293c +PUB = e253af0766804b869bb1595be9765b534886bbaab8305bf50dbc7f899bfb5f01 +MESSAGE = 18b6bec097 +SIG = b2fc46ad47af464478c199e1f8be169f1be6327c7f9a0a6689371ca94caf04064a01b22aff1520abd58951341603faed768cf78ce97ae7b038abfe456aa17c09 + +SEED = 78ae9effe6f245e924a7be63041146ebc670dbd3060cba67fbc6216febc44546 +PUB = fbcfbfa40505d7f2be444a33d185cc54e16d615260e1640b2b5087b83ee3643d +MESSAGE = 89010d855972 +SIG = 6ed629fc1d9ce9e1468755ff636d5a3f40a5d9c91afd93b79d241830f7e5fa29854b8f20cc6eecbb248dbd8d16d14e99752194e4904d09c74d639518839d2300 + +SEED = 691865bfc82a1e4b574eecde4c7519093faf0cf867380234e3664645c61c5f79 +PUB = 98a5e3a36e67aaba89888bf093de1ad963e774013b3902bfab356d8b90178a63 +MESSAGE = b4a8f381e70e7a +SIG = 6e0af2fe55ae377a6b7a7278edfb419bd321e06d0df5e27037db8812e7e3529810fa5552f6c0020985ca17a0e02e036d7b222a24f99b77b75fdd16cb05568107 + +SEED = 3b26516fb3dc88eb181b9ed73f0bcd52bcd6b4c788e4bcaf46057fd078bee073 +PUB = f81fb54a825fced95eb033afcd64314075abfb0abd20a970892503436f34b863 +MESSAGE = 4284abc51bb67235 +SIG = d6addec5afb0528ac17bb178d3e7f2887f9adbb1ad16e110545ef3bc57f9de2314a5c8388f723b8907be0f3ac90c6259bbe885ecc17645df3db7d488f805fa08 + +SEED = edc6f5fbdd1cee4d101c063530a30490b221be68c036f5b07d0f953b745df192 +PUB = c1a49c66e617f9ef5ec66bc4c6564ca33de2a5fb5e1464062e6d6c6219155efd +MESSAGE = 672bf8965d04bc5146 +SIG = 2c76a04af2391c147082e33faacdbe56642a1e134bd388620b852b901a6bc16ff6c9cc9404c41dea12ed281da067a1513866f9d964f8bdd24953856c50042901 + +SEED = 4e7d21fb3b1897571a445833be0f9fd41cd62be3aa04040f8934e1fcbdcacd45 +PUB = 31b2524b8348f7ab1dfafa675cc538e9a84e3fe5819e27c12ad8bbc1a36e4dff +MESSAGE = 33d7a786aded8c1bf691 +SIG = 28e4598c415ae9de01f03f9f3fab4e919e8bf537dd2b0cdf6e79b9e6559c9409d9151a4c40f083193937627c369488259e99da5a9f0a87497fa6696a5dd6ce08 + +SEED = a980f892db13c99a3e8971e965b2ff3d41eafd54093bc9f34d1fd22d84115bb6 +PUB = 44b57ee30cdb55829d0a5d4f046baef078f1e97a7f21b62d75f8e96ea139c35f +MESSAGE = 3486f68848a65a0eb5507d +SIG = 77d389e599630d934076329583cd4105a649a9292abc44cd28c40000c8e2f5ac7660a81c85b72af8452d7d25c070861dae91601c7803d656531650dd4e5c4100 + +SEED = 5b5a619f8ce1c66d7ce26e5a2ae7b0c04febcd346d286c929e19d0d5973bfef9 +PUB = 6fe83693d011d111131c4f3fbaaa40a9d3d76b30012ff73bb0e39ec27ab18257 +MESSAGE = 5a8d9d0a22357e6655f9c785 +SIG = 0f9ad9793033a2fa06614b277d37381e6d94f65ac2a5a94558d09ed6ce922258c1a567952e863ac94297aec3c0d0c8ddf71084e504860bb6ba27449b55adc40e + +SEED = 940c89fe40a81dafbdb2416d14ae469119869744410c3303bfaa0241dac57800 +PUB = a2eb8c0501e30bae0cf842d2bde8dec7386f6b7fc3981b8c57c9792bb94cf2dd +MESSAGE = b87d3813e03f58cf19fd0b6395 +SIG = d8bb64aad8c9955a115a793addd24f7f2b077648714f49c4694ec995b330d09d640df310f447fd7b6cb5c14f9fe9f490bcf8cfadbfd2169c8ac20d3b8af49a0c + +SEED = 9acad959d216212d789a119252ebfe0c96512a23c73bd9f3b202292d6916a738 +PUB = cf3af898467a5b7a52d33d53bc037e2642a8da996903fc252217e9c033e2f291 +MESSAGE = 55c7fa434f5ed8cdec2b7aeac173 +SIG = 6ee3fe81e23c60eb2312b2006b3b25e6838e02106623f844c44edb8dafd66ab0671087fd195df5b8f58a1d6e52af42908053d55c7321010092748795ef94cf06 + +SEED = d5aeee41eeb0e9d1bf8337f939587ebe296161e6bf5209f591ec939e1440c300 +PUB = fd2a565723163e29f53c9de3d5e8fbe36a7ab66e1439ec4eae9c0a604af291a5 +MESSAGE = 0a688e79be24f866286d4646b5d81c +SIG = f68d04847e5b249737899c014d31c805c5007a62c0a10d50bb1538c5f35503951fbc1e08682f2cc0c92efe8f4985dec61dcbd54d4b94a22547d24451271c8b00 + +SEED = 0a47d10452ae2febec518a1c7c362890c3fc1a49d34b03b6467d35c904a8362d +PUB = 34e5a8508c4743746962c066e4badea2201b8ab484de5c4f94476ccd2143955b +MESSAGE = c942fa7ac6b23ab7ff612fdc8e68ef39 +SIG = 2a3d27dc40d0a8127949a3b7f908b3688f63b7f14f651aacd715940bdbe27a0809aac142f47ab0e1e44fa490ba87ce5392f33a891539caf1ef4c367cae54500c + +SEED = f8148f7506b775ef46fdc8e8c756516812d47d6cfbfa318c27c9a22641e56f17 +PUB = 0445e456dacc7d5b0bbed23c8200cdb74bdcb03e4c7b73f0a2b9b46eac5d4372 +MESSAGE = 7368724a5b0efb57d28d97622dbde725af +SIG = 3653ccb21219202b8436fb41a32ba2618c4a133431e6e63463ceb3b6106c4d56e1d2ba165ba76eaad3dc39bffb130f1de3d8e6427db5b71938db4e272bc3e20b + +SEED = 77f88691c4eff23ebb7364947092951a5ff3f10785b417e918823a552dab7c75 +PUB = 74d29127f199d86a8676aec33b4ce3f225ccb191f52c191ccd1e8cca65213a6b +MESSAGE = bd8e05033f3a8bcdcbf4beceb70901c82e31 +SIG = fbe929d743a03c17910575492f3092ee2a2bf14a60a3fcacec74a58c7334510fc262db582791322d6c8c41f1700adb80027ecabc14270b703444ae3ee7623e0a + +SEED = ab6f7aee6a0837b334ba5eb1b2ad7fcecfab7e323cab187fe2e0a95d80eff132 +PUB = 5b96dca497875bf9664c5e75facf3f9bc54bae913d66ca15ee85f1491ca24d2c +MESSAGE = 8171456f8b907189b1d779e26bc5afbb08c67a +SIG = 73bca64e9dd0db88138eedfafcea8f5436cfb74bfb0e7733cf349baa0c49775c56d5934e1d38e36f39b7c5beb0a836510c45126f8ec4b6810519905b0ca07c09 + +SEED = 8d135de7c8411bbdbd1b31e5dc678f2ac7109e792b60f38cd24936e8a898c32d +PUB = 1ca281938529896535a7714e3584085b86ef9fec723f42819fc8dd5d8c00817f +MESSAGE = 8ba6a4c9a15a244a9c26bb2a59b1026f21348b49 +SIG = a1adc2bc6a2d980662677e7fdff6424de7dba50f5795ca90fdf3e96e256f3285cac71d3360482e993d0294ba4ec7440c61affdf35fe83e6e04263937db93f105 + +SEED = 0e765d720e705f9366c1ab8c3fa84c9a44370c06969f803296884b2846a652a4 +PUB = 7fae45dd0a05971026d410bc497af5be7d0827a82a145c203f625dfcb8b03ba8 +MESSAGE = 1d566a6232bbaab3e6d8804bb518a498ed0f904986 +SIG = bb61cf84de61862207c6a455258bc4db4e15eea0317ff88718b882a06b5cf6ec6fd20c5a269e5d5c805bafbcc579e2590af414c7c227273c102a10070cdfe80f + +SEED = db36e326d676c2d19cc8fe0c14b709202ecfc761d27089eb6ea4b1bb021ecfa7 +PUB = 48359b850d23f0715d94bb8bb75e7e14322eaf14f06f28a805403fbda002fc85 +MESSAGE = 1b0afb0ac4ba9ab7b7172cddc9eb42bba1a64bce47d4 +SIG = b6dcd09989dfbac54322a3ce87876e1d62134da998c79d24b50bd7a6a797d86a0e14dc9d7491d6c14a673c652cfbec9f962a38c945da3b2f0879d0b68a921300 + +SEED = c89955e0f7741d905df0730b3dc2b0ce1a13134e44fef3d40d60c020ef19df77 +PUB = fdb30673402faf1c8033714f3517e47cc0f91fe70cf3836d6c23636e3fd2287c +MESSAGE = 507c94c8820d2a5793cbf3442b3d71936f35fe3afef316 +SIG = 7ef66e5e86f2360848e0014e94880ae2920ad8a3185a46b35d1e07dea8fa8ae4f6b843ba174d99fa7986654a0891c12a794455669375bf92af4cc2770b579e0c + +SEED = 4e62627fc221142478aee7f00781f817f662e3b75db29bb14ab47cf8e84104d6 +PUB = b1d39801892027d58a8c64335163195893bfc1b61dbeca3260497e1f30371107 +MESSAGE = d3d615a8472d9962bb70c5b5466a3d983a4811046e2a0ef5 +SIG = 836afa764d9c48aa4770a4388b654e97b3c16f082967febca27f2fc47ddfd9244b03cfc729698acf5109704346b60b230f255430089ddc56912399d1122de70a + +SEED = 6b83d7da8908c3e7205b39864b56e5f3e17196a3fc9c2f5805aad0f5554c142d +PUB = d0c846f97fe28585c0ee159015d64c56311c886eddcc185d296dbb165d2625d6 +MESSAGE = 6ada80b6fa84f7034920789e8536b82d5e4678059aed27f71c +SIG = 16e462a29a6dd498685a3718b3eed00cc1598601ee47820486032d6b9acc9bf89f57684e08d8c0f05589cda2882a05dc4c63f9d0431d6552710812433003bc08 + +SEED = 19a91fe23a4e9e33ecc474878f57c64cf154b394203487a7035e1ad9cd697b0d +PUB = 2bf32ba142ba4622d8f3e29ecd85eea07b9c47be9d64412c9b510b27dd218b23 +MESSAGE = 82cb53c4d5a013bae5070759ec06c3c6955ab7a4050958ec328c +SIG = 881f5b8c5a030df0f75b6634b070dd27bd1ee3c08738ae349338b3ee6469bbf9760b13578a237d5182535ede121283027a90b5f865d63a6537dca07b44049a0f + +SEED = 1d5b8cb6215c18141666baeefcf5d69dad5bea9a3493dddaa357a4397a13d4de +PUB = 94d23d977c33e49e5e4992c68f25ec99a27c41ce6b91f2bfa0cd8292fe962835 +MESSAGE = a9a8cbb0ad585124e522abbfb40533bdd6f49347b55b18e8558cb0 +SIG = 3acd39bec8c3cd2b44299722b5850a0400c1443590fd4861d59aae7496acb3df73fc3fdf7969ae5f50ba47dddc435246e5fd376f6b891cd4c2caf5d614b6170c + +SEED = 6a91b3227c472299089bdce9356e726a40efd840f11002708b7ee55b64105ac2 +PUB = 9d084aa8b97a6b9bafa496dbc6f76f3306a116c9d917e681520a0f914369427e +MESSAGE = 5cb6f9aa59b80eca14f6a68fb40cf07b794e75171fba96262c1c6adc +SIG = f5875423781b66216cb5e8998de5d9ffc29d1d67107054ace3374503a9c3ef811577f269de81296744bd706f1ac478caf09b54cdf871b3f802bd57f9a6cb9101 + +SEED = 93eaa854d791f05372ce72b94fc6503b2ff8ae6819e6a21afe825e27ada9e4fb +PUB = 16cee8a3f2631834c88b670897ff0b08ce90cc147b4593b3f1f403727f7e7ad5 +MESSAGE = 32fe27994124202153b5c70d3813fdee9c2aa6e7dc743d4d535f1840a5 +SIG = d834197c1a3080614e0a5fa0aaaa808824f21c38d692e6ffbd200f7dfb3c8f44402a7382180b98ad0afc8eec1a02acecf3cb7fde627b9f18111f260ab1db9a07 + +SEED = 941cac69fb7b1815c57bb987c4d6c2ad2c35d5f9a3182a79d4ba13eab253a8ad +PUB = 23be323c562dfd71ce65f5bba56a74a3a6dfc36b573d2f94f635c7f9b4fd5a5b +MESSAGE = bb3172795710fe00054d3b5dfef8a11623582da68bf8e46d72d27cece2aa +SIG = 0f8fad1e6bde771b4f5420eac75c378bae6db5ac6650cd2bc210c1823b432b48e016b10595458ffab92f7a8989b293ceb8dfed6c243a2038fc06652aaaf16f02 + +SEED = 1acdbb793b0384934627470d795c3d1dd4d79cea59ef983f295b9b59179cbb28 +PUB = 3f60c7541afa76c019cf5aa82dcdb088ed9e4ed9780514aefb379dabc844f31a +MESSAGE = 7cf34f75c3dac9a804d0fcd09eba9b29c9484e8a018fa9e073042df88e3c56 +SIG = be71ef4806cb041d885effd9e6b0fbb73d65d7cdec47a89c8a994892f4e55a568c4cc78d61f901e80dbb628b86a23ccd594e712b57fa94c2d67ec26634878507 + +SEED = 8ed7a797b9cea8a8370d419136bcdf683b759d2e3c6947f17e13e2485aa9d420 +PUB = b49f3a78b1c6a7fca8f3466f33bc0e929f01fba04306c2a7465f46c3759316d9 +MESSAGE = a750c232933dc14b1184d86d8b4ce72e16d69744ba69818b6ac33b1d823bb2c3 +SIG = 04266c033b91c1322ceb3446c901ffcf3cc40c4034e887c9597ca1893ba7330becbbd8b48142ef35c012c6ba51a66df9308cb6268ad6b1e4b03e70102495790b + +SEED = f2ab396fe8906e3e5633e99cabcd5b09df0859b516230b1e0450b580b65f616c +PUB = 8ea074245159a116aa7122a25ec16b891d625a68f33660423908f6bdc44f8c1b +MESSAGE = 5a44e34b746c5fd1898d552ab354d28fb4713856d7697dd63eb9bd6b99c280e187 +SIG = a06a23d982d81ab883aae230adbc368a6a9977f003cebb00d4c2e4018490191a84d3a282fdbfb2fc88046e62de43e15fb575336b3c8b77d19ce6a009ce51f50c + +SEED = 550a41c013f79bab8f06e43ad1836d51312736a9713806fafe6645219eaa1f9d +PUB = af6b7145474dc9954b9af93a9cdb34449d5b7c651c824d24e230b90033ce59c0 +MESSAGE = 8bc4185e50e57d5f87f47515fe2b1837d585f0aae9e1ca383b3ec908884bb900ff27 +SIG = 16dc1e2b9fa909eefdc277ba16ebe207b8da5e91143cde78c5047a89f681c33c4e4e3428d5c928095903a811ec002d52a39ed7f8b3fe1927200c6dd0b9ab3e04 + +SEED = 19ac3e272438c72ddf7b881964867cb3b31ff4c793bb7ea154613c1db068cb7e +PUB = f85b80e050a1b9620db138bfc9e100327e25c257c59217b601f1f6ac9a413d3f +MESSAGE = 95872d5f789f95484e30cbb0e114028953b16f5c6a8d9f65c003a83543beaa46b38645 +SIG = ea855d781cbea4682e350173cb89e8619ccfddb97cdce16f9a2f6f6892f46dbe68e04b12b8d88689a7a31670cdff409af98a93b49a34537b6aa009d2eb8b4701 + +SEED = ca267de96c93c238fafb1279812059ab93ac03059657fd994f8fa5a09239c821 +PUB = 017370c879090a81c7f272c2fc80e3aac2bc603fcb379afc98691160ab745b26 +MESSAGE = e05f71e4e49a72ec550c44a3b85aca8f20ff26c3ee94a80f1b431c7d154ec9603ee02531 +SIG = ac957f82335aa7141e96b59d63e3ccee95c3a2c47d026540c2af42dc9533d5fd81827d1679ad187aeaf37834915e75b147a9286806c8017516ba43dd051a5e0c + +SEED = 3dff5e899475e7e91dd261322fab09980c52970de1da6e2e201660cc4fce7032 +PUB = f30162bac98447c4042fac05da448034629be2c6a58d30dfd578ba9fb5e3930b +MESSAGE = 938f0e77621bf3ea52c7c4911c5157c2d8a2a858093ef16aa9b107e69d98037ba139a3c382 +SIG = 5efe7a92ff9623089b3e3b78f352115366e26ba3fb1a416209bc029e9cadccd9f4affa333555a8f3a35a9d0f7c34b292cae77ec96fa3adfcaadee2d9ced8f805 + +SEED = 9a6b847864e70cfe8ba6ab22fa0ca308c0cc8bec7141fbcaa3b81f5d1e1cfcfc +PUB = 34ad0fbdb2566507a81c2b1f8aa8f53dccaa64cc87ada91b903e900d07eee930 +MESSAGE = 838367471183c71f7e717724f89d401c3ad9863fd9cc7aa3cf33d3c529860cb581f3093d87da +SIG = 2ab255169c489c54c732232e37c87349d486b1eba20509dbabe7fed329ef08fd75ba1cd145e67b2ea26cb5cc51cab343eeb085fe1fd7b0ec4c6afcd9b979f905 + +SEED = 575be07afca5d063c238cd9b8028772cc49cda34471432a2e166e096e2219efc +PUB = 94e5eb4d5024f49d7ebf79817c8de11497dc2b55622a51ae123ffc749dbb16e0 +MESSAGE = 33e5918b66d33d55fe717ca34383eae78f0af82889caf6696e1ac9d95d1ffb32cba755f9e3503e +SIG = 58271d44236f3b98c58fd7ae0d2f49ef2b6e3affdb225aa3ba555f0e11cc53c23ad19baf24346590d05d7d5390582082cf94d39cad6530ab93d13efb39279506 + +SEED = 15ffb45514d43444d61fcb105e30e135fd268523dda20b82758b179423110441 +PUB = 1772c5abc2d23fd2f9d1c3257be7bc3c1cd79cee40844b749b3a7743d2f964b8 +MESSAGE = da9c5559d0ea51d255b6bd9d7638b876472f942b330fc0e2b30aea68d77368fce4948272991d257e +SIG = 6828cd7624e793b8a4ceb96d3c2a975bf773e5ff6645f353614058621e58835289e7f31f42dfe6af6d736f2644511e320c0fa698582a79778d18730ed3e8cb08 + +SEED = fe0568642943b2e1afbfd1f10fe8df87a4236bea40dce742072cb21886eec1fa +PUB = 299ebd1f13177dbdb66a912bbf712038fdf73b06c3ac020c7b19126755d47f61 +MESSAGE = c59d0862ec1c9746abcc3cf83c9eeba2c7082a036a8cb57ce487e763492796d47e6e063a0c1feccc2d +SIG = d59e6dfcc6d7e3e2c58dec81e985d245e681acf6594a23c59214f7bed8015d813c7682b60b3583440311e72a8665ba2c96dec23ce826e160127e18132b030404 + +SEED = 5ecb16c2df27c8cf58e436a9d3affbd58e9538a92659a0f97c4c4f994635a8ca +PUB = da768b20c437dd3aa5f84bb6a077ffa34ab68501c5352b5cc3fdce7fe6c2398d +MESSAGE = 56f1329d9a6be25a6159c72f12688dc8314e85dd9e7e4dc05bbecb7729e023c86f8e0937353f27c7ede9 +SIG = 1c723a20c6772426a670e4d5c4a97c6ebe9147f71bb0a415631e44406e290322e4ca977d348fe7856a8edc235d0fe95f7ed91aefddf28a77e2c7dbfd8f552f0a + +SEED = d599d637b3c30a82a9984e2f758497d144de6f06b9fba04dd40fd949039d7c84 +PUB = 6791d8ce50a44689fc178727c5c3a1c959fbeed74ef7d8e7bd3c1ab4da31c51f +MESSAGE = a7c04e8ba75d0a03d8b166ad7a1d77e1b91c7aaf7befdd99311fc3c54a684ddd971d5b3211c3eeaff1e54e +SIG = ebf10d9ac7c96108140e7def6fe9533d727646ff5b3af273c1df95762a66f32b65a09634d013f54b5dd6011f91bc336ca8b355ce33f8cfbec2535a4c427f8205 + +SEED = 30ab8232fa7018f0ce6c39bd8f782fe2e159758bb0f2f4386c7f28cfd2c85898 +PUB = ecfb6a2bd42f31b61250ba5de7e46b4719afdfbc660db71a7bd1df7b0a3abe37 +MESSAGE = 63b80b7956acbecf0c35e9ab06b914b0c7014fe1a4bbc0217240c1a33095d707953ed77b15d211adaf9b97dc +SIG = 9af885344cc7239498f712df80bc01b80638291ed4a1d28baa5545017a72e2f65649ccf9603da6eb5bfab9f5543a6ca4a7af3866153c76bf66bf95def615b00c + +SEED = 0ddcdc872c7b748d40efe96c2881ae189d87f56148ed8af3ebbbc80324e38bdd +PUB = 588ddadcbcedf40df0e9697d8bb277c7bb1498fa1d26ce0a835a760b92ca7c85 +MESSAGE = 65641cd402add8bf3d1d67dbeb6d41debfbef67e4317c35b0a6d5bbbae0e034de7d670ba1413d056f2d6f1de12 +SIG = c179c09456e235fe24105afa6e8ec04637f8f943817cd098ba95387f9653b2add181a31447d92d1a1ddf1ceb0db62118de9dffb7dcd2424057cbdff5d41d0403 + +SEED = 89f0d68299ba0a5a83f248ae0c169f8e3849a9b47bd4549884305c9912b46603 +PUB = aba3e795aab2012acceadd7b3bd9daeeed6ff5258bdcd7c93699c2a3836e3832 +MESSAGE = 4f1846dd7ad50e545d4cfbffbb1dc2ff145dc123754d08af4e44ecc0bc8c91411388bc7653e2d893d1eac2107d05 +SIG = 2c691fa8d487ce20d5d2fa41559116e0bbf4397cf5240e152556183541d66cf753582401a4388d390339dbef4d384743caa346f55f8daba68ba7b9131a8a6e0b + +SEED = 0a3c1844e2db070fb24e3c95cb1cc6714ef84e2ccd2b9dd2f1460ebf7ecf13b1 +PUB = 72e409937e0610eb5c20b326dc6ea1bbbc0406701c5cd67d1fbde09192b07c01 +MESSAGE = 4c8274d0ed1f74e2c86c08d955bde55b2d54327e82062a1f71f70d536fdc8722cdead7d22aaead2bfaa1ad00b82957 +SIG = 87f7fdf46095201e877a588fe3e5aaf476bd63138d8a878b89d6ac60631b3458b9d41a3c61a588e1db8d29a5968981b018776c588780922f5aa732ba6379dd05 + +SEED = c8d7a8818b98dfdb20839c871cb5c48e9e9470ca3ad35ba2613a5d3199c8ab23 +PUB = 90d2efbba4d43e6b2b992ca16083dbcfa2b322383907b0ee75f3e95845d3c47f +MESSAGE = 783e33c3acbdbb36e819f544a7781d83fc283d3309f5d3d12c8dcd6b0b3d0e89e38cfd3b4d0885661ca547fb9764abff +SIG = fa2e994421aef1d5856674813d05cbd2cf84ef5eb424af6ecd0dc6fdbdc2fe605fe985883312ecf34f59bfb2f1c9149e5b9cc9ecda05b2731130f3ed28ddae0b + +SEED = b482703612d0c586f76cfcb21cfd2103c957251504a8c0ac4c86c9c6f3e429ff +PUB = fd711dc7dd3b1dfb9df9704be3e6b26f587fe7dd7ba456a91ba43fe51aec09ad +MESSAGE = 29d77acfd99c7a0070a88feb6247a2bce9984fe3e6fbf19d4045042a21ab26cbd771e184a9a75f316b648c6920db92b87b +SIG = 58832bdeb26feafc31b46277cf3fb5d7a17dfb7ccd9b1f58ecbe6feb979666828f239ba4d75219260ecac0acf40f0e5e2590f4caa16bbbcd8a155d347967a607 + +SEED = 84e50dd9a0f197e3893c38dbd91fafc344c1776d3a400e2f0f0ee7aa829eb8a2 +PUB = 2c50f870ee48b36b0ac2f8a5f336fb090b113050dbcc25e078200a6e16153eea +MESSAGE = f3992cde6493e671f1e129ddca8038b0abdb77bb9035f9f8be54bd5d68c1aeff724ff47d29344391dc536166b8671cbbf123 +SIG = 69e6a4491a63837316e86a5f4ba7cd0d731ecc58f1d0a264c67c89befdd8d3829d8de13b33cc0bf513931715c7809657e2bfb960e5c764c971d733746093e500 + +SEED = b322d46577a2a991a4d1698287832a39c487ef776b4bff037a05c7f1812bdeec +PUB = eb2bcadfd3eec2986baff32b98e7c4dbf03ff95d8ad5ff9aa9506e5472ff845f +MESSAGE = 19f1bf5dcf1750c611f1c4a2865200504d82298edd72671f62a7b1471ac3d4a30f7de9e5da4108c52a4ce70a3e114a52a3b3c5 +SIG = c7b55137317ca21e33489ff6a9bfab97c855dc6f85684a70a9125a261b56d5e6f149c5774d734f2d8debfc77b721896a8267c23768e9badb910eef83ec258802 + +SEED = 960cab5034b9838d098d2dcbf4364bec16d388f6376d73a6273b70f82bbc98c0 +PUB = 5e3c19f2415acf729f829a4ebd5c40e1a6bc9fbca95703a9376087ed0937e51a +MESSAGE = f8b21962447b0a8f2e4279de411bea128e0be44b6915e6cda88341a68a0d818357db938eac73e0af6d31206b3948f8c48a447308 +SIG = 27d4c3a1811ef9d4360b3bdd133c2ccc30d02c2f248215776cb07ee4177f9b13fc42dd70a6c2fed8f225c7663c7f182e7ee8eccff20dc7b0e1d5834ec5b1ea01 + +SEED = eb77b2638f23eebc82efe45ee9e5a0326637401e663ed029699b21e6443fb48e +PUB = 9ef27608961ac711de71a6e2d4d4663ea3ecd42fb7e4e8627c39622df4af0bbc +MESSAGE = 99e3d00934003ebafc3e9fdb687b0f5ff9d5782a4b1f56b9700046c077915602c3134e22fc90ed7e690fddd4433e2034dcb2dc99ab +SIG = 18dc56d7bd9acd4f4daa78540b4ac8ff7aa9815f45a0bba370731a14eaabe96df8b5f37dbf8eae4cb15a64b244651e59d6a3d6761d9e3c50f2d0cbb09c05ec06 + +SEED = b625aa89d3f7308715427b6c39bbac58effd3a0fb7316f7a22b99ee5922f2dc9 +PUB = 65a99c3e16fea894ec33c6b20d9105e2a04e2764a4769d9bbd4d8bacfeab4a2e +MESSAGE = e07241dbd3adbe610bbe4d005dd46732a4c25086ecb8ec29cd7bca116e1bf9f53bfbf3e11fa49018d39ff1154a06668ef7df5c678e6a +SIG = 01bb901d83b8b682d3614af46a807ba2691358feb775325d3423f549ff0aa5757e4e1a74e9c70f9721d8f354b319d4f4a1d91445c870fd0ffb94fed64664730d + +SEED = b1c9f8bd03fe82e78f5c0fb06450f27dacdf716434db268275df3e1dc177af42 +PUB = 7fc88b1f7b3f11c629be671c21621f5c10672fafc8492da885742059ee6774cf +MESSAGE = 331da7a9c1f87b2ac91ee3b86d06c29163c05ed6f8d8a9725b471b7db0d6acec7f0f702487163f5eda020ca5b493f399e1c8d308c3c0c2 +SIG = 4b229951ef262f16978f7914bc672e7226c5f8379d2778c5a2dc0a2650869f7acfbd0bcd30fdb0619bb44fc1ae5939b87cc318133009c20395b6c7eb98107701 + +SEED = 6d8cdb2e075f3a2f86137214cb236ceb89a6728bb4a200806bf3557fb78fac69 +PUB = 57a04c7a5113cddfe49a4c124691d46c1f9cdc8f343f9dcb72a1330aeca71fda +MESSAGE = 7f318dbd121c08bfddfeff4f6aff4e45793251f8abf658403358238984360054f2a862c5bb83ed89025d2014a7a0cee50da3cb0e76bbb6bf +SIG = a6cbc947f9c87d1455cf1a708528c090f11ecee4855d1dbaadf47454a4de55fa4ce84b36d73a5b5f8f59298ccf21992df492ef34163d87753b7e9d32f2c3660b + +SEED = 47adc6d6bf571ee9570ca0f75b604ac43e303e4ab339ca9b53cacc5be45b2ccb +PUB = a3f527a1c1f17dfeed92277347c9f98ab475de1755b0ab546b8a15d01b9bd0be +MESSAGE = ce497c5ff5a77990b7d8f8699eb1f5d8c0582f70cb7ac5c54d9d924913278bc654d37ea227590e15202217fc98dac4c0f3be2183d133315739 +SIG = 4e8c318343c306adbba60c92b75cb0569b9219d8a86e5d57752ed235fc109a43c2cf4e942cacf297279fbb28675347e08027722a4eb7395e00a17495d32edf0b + +SEED = 3c19b50b0fe47961719c381d0d8da9b9869d312f13e3298b97fb22f0af29cbbe +PUB = 0f7eda091499625e2bae8536ea35cda5483bd16a9c7e416b341d6f2c83343612 +MESSAGE = 8ddcd63043f55ec3bfc83dceae69d8f8b32f4cdb6e2aebd94b4314f8fe7287dcb62732c9052e7557fe63534338efb5b6254c5d41d2690cf5144f +SIG = efbd41f26a5d62685516f882b6ec74e0d5a71830d203c231248f26e99a9c6578ec900d68cdb8fa7216ad0d24f9ecbc9ffa655351666582f626645395a31fa704 + +SEED = 34e1e9d539107eb86b393a5ccea1496d35bc7d5e9a8c5159d957e4e5852b3eb0 +PUB = 0ecb2601d5f7047428e9f909883a12420085f04ee2a88b6d95d3d7f2c932bd76 +MESSAGE = a6d4d0542cfe0d240a90507debacabce7cbbd48732353f4fad82c7bb7dbd9df8e7d9a16980a45186d8786c5ef65445bcc5b2ad5f660ffc7c8eaac0 +SIG = 32d22904d3e7012d6f5a441b0b4228064a5cf95b723a66b048a087ecd55920c31c204c3f2006891a85dd1932e3f1d614cfd633b5e63291c6d8166f3011431e09 + +SEED = 49dd473ede6aa3c866824a40ada4996c239a20d84c9365e4f0a4554f8031b9cf +PUB = 788de540544d3feb0c919240b390729be487e94b64ad973eb65b4669ecf23501 +MESSAGE = 3a53594f3fba03029318f512b084a071ebd60baec7f55b028dc73bfc9c74e0ca496bf819dd92ab61cd8b74be3c0d6dcd128efc5ed3342cba124f726c +SIG = d2fde02791e720852507faa7c3789040d9ef86646321f313ac557f4002491542dd67d05c6990cdb0d495501fbc5d5188bfbb84dc1bf6098bee0603a47fc2690f + +SEED = 331c64da482b6b551373c36481a02d8136ecadbb01ab114b4470bf41607ac571 +PUB = 52a00d96a3148b4726692d9eff89160ea9f99a5cc4389f361fed0bb16a42d521 +MESSAGE = 20e1d05a0d5b32cc8150b8116cef39659dd5fb443ab15600f78e5b49c45326d9323f2850a63c3808859495ae273f58a51e9de9a145d774b40ba9d753d3 +SIG = 22c99aa946ead39ac7997562810c01c20b46bd610645bd2d56dcdcbaacc5452c74fbf4b8b1813b0e94c30d808ce5498e61d4f7ccbb4cc5f04dfc6140825a9600 + +SEED = 5c0b96f2af8712122cf743c8f8dc77b6cd5570a7de13297bb3dde1886213cce2 +PUB = 0510eaf57d7301b0e1d527039bf4c6e292300a3a61b4765434f3203c100351b1 +MESSAGE = 54e0caa8e63919ca614b2bfd308ccfe50c9ea888e1ee4446d682cb5034627f97b05392c04e835556c31c52816a48e4fb196693206b8afb4408662b3cb575 +SIG = 06e5d8436ac7705b3a90f1631cdd38ec1a3fa49778a9b9f2fa5ebea4e7d560ada7dd26ff42fafa8ba420323742761aca6904940dc21bbef63ff72daab45d430b + +SEED = de84f2435f78dedb87da18194ff6a336f08111150def901c1ac418146eb7b54a +PUB = d3a92bbaa4d63af79c2226a7236e6427428df8b362427f873023b22d2f5e03f2 +MESSAGE = 205135ec7f417c858072d5233fb36482d4906abd60a74a498c347ff248dfa2722ca74e879de33169fadc7cd44d6c94a17d16e1e630824ba3e0df22ed68eaab +SIG = 471ebc973cfdaceec07279307368b73be35bc6f8d8312b70150567369096706dc471126c3576f9f0eb550df5ac6a525181110029dd1fc11174d1aaced48d630f + +SEED = ba4d6e67b2ce67a1e44326494044f37a442f3b81725bc1f9341462718b55ee20 +PUB = f73fa076f84b6db675a5fda5ad67e351a41e8e7f29add16809ca010387e9c6cc +MESSAGE = 4bafdac9099d4057ed6dd08bcaee8756e9a40f2cb9598020eb95019528409bbea38b384a59f119f57297bfb2fa142fc7bb1d90dbddde772bcde48c5670d5fa13 +SIG = 57b9d2a711207f837421bae7dd48eaa18eab1a9a70a0f1305806fee17b458f3a0964b302d1834d3e0ac9e8496f000b77f0083b41f8a957e632fbc7840eee6a06 + +SEED = 0d131c45aea6f3a4e1b9a2cf60c55104587efaa846b222bf0a7b74ce7a3f63b6 +PUB = 3c6729dbe93b499c4e614a2f21beb729438d498e1ac8d14cbad9717a5dbd97cd +MESSAGE = b4291d08b88fb2f7b8f99d0dce40079fcbab718bbd8f4e8eabc3c1428b6a071fb2a3c8eba1cacccfa871b365c708bef2685bc13e6b80bc14a5f249170ffc56d014 +SIG = a9c5ee86fb06d9e46b379c32dda7c92c9c13db274dc24116fbdd878696045488cc75a52fff67d1a5113d06e333ac67ff664b3f2a405fa1d14dd5bbb97409b606 + +SEED = a75e3b6b4170e444781be4eeac3e0fdaa4b4356f705486bcb071a325ae071fba +PUB = 993d38a7d72f0aee15ff6f4fdc37ca7724fd1373a3766b275dbc77e647980e0a +MESSAGE = 4037866f6548b01cc6bcf3a940e3945aa2d188b4b7f182aa77ec4d6b0428ab5b84d85df192a5a38ada089d76fa26bf67736a7041a5eb8f0c5719eb396693c45160f8 +SIG = a5db4d3d3329abe3697959e6b5947ea8601b03ef8e1d6fe202144931272ca0a09b5eb0f390572ea7ef03c6131e9de5f16bf0b034244f7e104ff5311bbf663a0d + +SEED = bcbcf561ecc05a41c7d7e55e696d32ce39b4d03c1f5f3f3a8927fe5e62e844b2 +PUB = 4ddf53fad6a7a9ed30f3afecca136fd7843b72c243090891ae4021a32cadff1a +MESSAGE = 6f6716b6784740980aebc3248807e31c1286ac7b681c00b66c88ff7a336d441fa5c3eb256d20cf6d1ac92ccfe4be6dcc41b1aff846d360c243001cabdfbf1a9b240455 +SIG = 9ff15115f6661f3211d7a40764967629ba6a5263951bdc3c6a4c90d070f7be00024b80d83b6bc27587fcff5f5ccc0eb3cde1497cf56895147a063f61f08adf0b + +SEED = 210532805fa9cc9be916d213cac374e3cd6fc2602a544d0c1ce29d30105d69ab +PUB = 10699e499be99e2b11b98f6f86b67cdc4ccf69f3c53ce094875647d2d0d0ecc5 +MESSAGE = 9fc4d28cfd25e6c0c5e724e19ca39d71e53bf4aa2796c54c3351f108fc70f2611a62e0ab90af6ade5216788e9eb2a873059b1e79d7d59debd68f2d4d80ffe31bf74b928c +SIG = 4c2d31d5bbc42e026dc1e079ecc4dd072c5d2cce65e3db8d8a1dd9057faa0371727f727231a0f060fa27097533b6db3b8f6252f2793d75662caadf5f0fcc710e + +SEED = 185d64b69479e0ba0a5844a10ad84125ba11c4b40d63eda2c57afc7e019c8e0c +PUB = a5764f6398a5ae2266a38f9714533c4bbd8d07826f63e204cbac374b0acef1bd +MESSAGE = 4a0824fe70d4315413d0a0cafbf4f5fe117d5e07e1c3a4effb9d0ae91490234878ccf6792a91f68c6a520de16071f08abe35dc5ea428f1957b663371ce24c609dd55b8f493 +SIG = 43e0387da5ba09a190f6e7b2680578d889769bcc445e5ef571b492871c155c5b9f620bfacfbf2df1fd87444604b71b2e237baaa7ee2093ede4a601edf883e307 + +SEED = cfa9d9164b3c4f6f722635d2066cd7ea5e5533d2c74f8add669c371faa476426 +PUB = 41169a66f9a63f285782a6c2db81cc3f70b3ada21a68c84745c88a74c3b0a2de +MESSAGE = 757621b1675db7cacef7f2782587ff3af51a3ef2f4bcf9279c4ce94002e1f00424bf0eb621982cc85cb4d171e564a0c2f6e3567a1aae2cddb7e9b25f47dc20a51050542969ca +SIG = 01d7c9b5701af71e2f4877ffc9b7b5305f52816d4458e37e41c7719fac1d76a01fff3f50fe1a5875ccc3fb70001c947a33fc8b207de13572ccdb8ba98933ab01 + +SEED = 1acb4a256c2f8993ca24de1e0014606d668b5e756032d269f1d24d351c8eea4a +PUB = cbbdcd8cbc885ab43a057e5f9579f1161954159e7b562ea26cd9a43c88d3f96d +MESSAGE = c46a6d61aa0aed1c1d8547a70b89b7196475d5a4870881b1ecd0f0cb9c745f8a2adc8024e2dc55b53aa5d383a81aabc1a47e8d07d00b7f0b56ceddbfb1f424bb5c02184678a666 +SIG = 05aa76f7fe51892303d78914715995e7d768ff7714ce270f175e56af17ae018d3fa939f5f620de82bcd1549687b205c7871203e624238c4e309fab7f92fbaa05 + +SEED = ace3c46424823622979fc3a84a7da69c1d527d8312e8fb018375bd3a96c29c18 +PUB = 937cf34136d9e1cce0de11b12c70cbfb7455448421e92c82e7c40934bff8c676 +MESSAGE = a9f137bc9021bf105aee25be21cd9ee5b3547cf10cc5f98476fb588bd70e2d6d6b0834e842e4ee94303cf96b09c1715381b36e14a491b80f895ea421b8ec2b1d3c187e02935c5526 +SIG = feb8896dd3fe6001ffea171b37b788a69f7f850193a63406f56376dd263d099aef80ece67e2c43f40eca462c6b71e79406b18db74ae5d49844e3b132bc2a1307 + +SEED = 88f681934e33c35c07dc6e5a832942ae3d59903ccde2f76ccb7587cea7ec41b6 +PUB = 6a4e8aa5adb63d22fd7b14a26fdb03b7c8aa6ccd5a196f2c54b0465adb5092e1 +MESSAGE = 6e8bac1f853b81fef94707e18cc61c6f0a9cbc2a41d078dcc83fc0229c7f8dbe6dbdd90854b1f1ae2b9f2b120b86a8786b4e78ce23ab86baaf88754af0f3d88881dae0bc5261bfd038 +SIG = 45b27bf1b9eac06b62b686f6d546563b2dfe5b175dbef32bf78c35a16c958a9d4f26d291de9bb2066c0a286113cc09172d40a36d4cbd951708860226eb30cd05 + +SEED = 48050a6e0158f6ad253412e4497cff62d5ee555edffe59e4dc401522813295ce +PUB = 975e010abb9a3e56659137b0506057f283982f886ca172c7bc2c500ed9bd26c1 +MESSAGE = ed6eec29fb7049dff707f0a4426ebc8f5b350e95870b9d6198c8139e9c3e1e409937d1a858a0dea482a5cb1a854ed3b5a9397acb63bff6b64039ef2eb1159e99858310bbbd86125c3e0e +SIG = 7216ab60c35168187d0fce4753c86e80058d540b76bf95843a5898841060a99a44de6f439625a3f6365f59c377bf45909bbfef5c50b25f3194e5fbd34ea5e706 + +SEED = 18d13d0c00e8e3386a5cfb30a9e79fe88b1861ed2d1201eb170038e194770403 +PUB = a4afc833401876090d9b880c41267d68cbbeeaa38afb20884e27328f3b7f535e +MESSAGE = 910f6c272dd97931ac47310d244cadb43251365e02ba9f6a5b3c3226be9d7d3a74a2ba4906e8e71a4bf3d3556ebdfc666cd6b12f20c4a00834b88fbb244575199286b0b9344cf334aff007 +SIG = 033988154c5d79d2510be83e778015dfe2fb85b8111f7ec139918b5400e3d656ee80a9f5c9072b5b467a5cc5a57cc8ad1062b5bff10862d9d369dde2cc966701 + +SEED = 4adc8c28646a93a817293a14d29b48e2c6d712a68993547a5c5e4d1452acbc3a +PUB = 7f40473628f23fc0dff0021afd487740d4916a9122e6c97d36433e5ebf04f88c +MESSAGE = 09fb5501f1688f80a0ab9e22d778ae130acaf74d7f5185b4da198c6b9edac4302e2b753e578766e17d4056dc40d95cf4ca8bcc6565795e97d68bcda79fa77c493397716356164caab5d19cfd +SIG = 6d3b4e90ec408311f9b15b9253d3d95c5d152620c260d56302555a8804a5104ba5e8d29ee108e764a64219297298ab7674bbca784dee28773b34e185a386c208 + +SEED = f26e1c84697a4908151b447dcf6c7c7a38b04081db9e7c7738e6fec900bed0c1 +PUB = a86e1422c1235ff8e1aa083470d5e42288cb007ab50e795dd0b4ff87394966c4 +MESSAGE = 54ed47606a1487c2f900cefb6e899dbaf6c31cc88ebe3558b83b93f6d422c31e888e48e520eeaedd7e554a9cd40c2c519d533b6144cee484c389e976b1e4022b50e7dbb87ead7e541a2004daf7 +SIG = 44f3344b9566c9dfd22d6198e1cbf95d9e28f2982fc7f166ab25dda30c46f768c558e0394fb9ab3e1d4db4cf487c17641a13f3f48939e0c64827a75103c57406 + +SEED = cc0c33f3a86f5a17d30c186ce0f3b740bafa5fe3c7090f143541e2b2c1e534bc +PUB = 967a71c7cf9b82cc78cbe109104d8b438a8d1fd71d260d029046a9a4526866ff +MESSAGE = 1944e5e155d75e0d0be92e1be14cec370ad13791f2bfd40f271214e94fcf213c71bc20d7ce0c7584421ac4efc451883cc3f4956f21f73a4216720438bc38ff2cfdf3709905a50a9d94b1d9e7932b +SIG = e277b3dd655c33ff75fa920af1fcc859401e6c7a6ef4c6bfbfac5069638f19ca115baf13c09c82af793facb6abd0cd58e8481b08c1b68ad7a2665c4a614a2806 + +SEED = f0bc979375a7073068dba7f6c094db6598b4e45df7d549583c22fded8048fa2e +PUB = b42b6c57a78f1d90090a7181ab2ae09f426cbc2be96eb2cf27abc70d7d32a4b3 +MESSAGE = 27ab3049b5c6351f6cfe38b13a059f5037257ee3d65d6079656856edc876ea081fd8a9480466f8839478088466f51ecbfaf2d65def25f0c4dd8d08588202812232f57945df8a6fa161ed8c0343b583 +SIG = 19dbc3027f9fae707deb76f588f9fd07aa8eae29bd4e1d04c2c984388286b3b122248a6c03ed67eca35df4db3dc1e4237f267892518497d9552a21de19b5140f + +SEED = 3022975f298c0ad5ddbe90954f20e63ae0c0d2704cf13c221f5b3720af4dba32 +PUB = b845bce38e26ab027b8247463d437a71bbddca2a2381d81fad4c297df9140bd5 +MESSAGE = 9aa19a595d989378cdc06891887ef5f9c246e5f83c0b658710673e4e7db760c76354c4f5d1e90db04a23b4fb434c69384593d010e312b11d299c9f97482de887cecfe82ea723bca79a1bd64d03ef19ee +SIG = ae14a860fad0051b3eb72b3721a82f7b9546b2867261e2b7b638979e2561bdeb89b600768f82450a66c8b0481283fa21cb6c53bde350effb68a7d1114bfdb203 + +SEED = 0f710b6c481f71449589753312ef64932b4652ebe0e07597f7da1c4f3dcffb80 +PUB = 6973ff2932ccddfc1d16c4c0da50c8b29fe6452d1ee84d52064ebf3d628d403e +MESSAGE = 85d85744ad55e9ef9a65ca91e85c8a4f80e4c58f8e4e9354e833986098b7d9fe9fdc0dedb0d75d2539fba00034fc0c2e84344d1edaa09d4f63d5546d67803dd6b54ddcc0b1d3f2582dd75289e31de42e69 +SIG = 02a8d26aee11420fb4f09d1163e14b867df7c6f6c8f8dc7a78034659f0401cad0aa90397efdd0704b798db1936503026e2a1adc297e27974d4be312a3753f804 + +SEED = 7a05f121f60112dd16fee8c91bc2a11479f4b67ee33456042c8de167fc588017 +PUB = b3b05be989cea7197505d4b54335e5e1d77a4b52ba7282604bbc1cf6c4e87a6c +MESSAGE = d9c59e8cc4ede537be2122ab492a5b915a9b0a114b2ade356fc0457ef98722d5f567b86211e28369d14168ec4a3c804076e154adc70a668cf64a20d13cf190d115cd688d036e46938251df4964dc3517b10c +SIG = d30ce8a322b450a2fb1afd329cec8559ccf112bd83965f9ec4736270a0914e061196bf5209778c9f8ccf39c4668bbf0e1363f81afe45dd74e80d5875ddbf6f01 + +SEED = bf381f8dfb5d0c6d64e416ac23e0d0fcb86ebb899b1d146abd911b92a7808eb6 +PUB = 863fad8d1f1bc630a15f6fe8ecefe6b4497b60b21ae8830da46742045fef156f +MESSAGE = 8654f2f5c6dcd2cfcbb6ed8d2bc5fb5fec53e3effb0de65aac507fa56c897732395aa09946d3b6586a92edd6dc99315e1ba74c6a0247c4ba7760b948eb3c0932d9fe1f0e9fea6eb61a548a9ab48ffdf1547329 +SIG = 99b75378738fcac8067669e8509b5d2607e1ef76af9004e13fe5d3932df60b168216f58565340fa4d638055a89044ee7d45e2bd082a53382289a34700648980e + +SEED = 36983241a0a8e60ce02a61b3fafab15a7313a5a270d015b9c9ec070dc42deeda +PUB = 6647984d42b9a5b3b1afa3b7f8f49d4c2b05e38984e99cea8fd68235d2ae4627 +MESSAGE = cebb9e404451818253c0392a4554ee7323c5d5b8b226775700b806ed5b91337916ea7ecbc3d4103fc65e5372ae7e5f9ba2d8f5aee24ccf6e631ae20c4af9b5f728cdf89e8189def1a5b3d35347aa203525ea1d2e +SIG = ee37df8af422f91f85dfe43efe79f62378068ccdbaf3916eecbc3adfed0508bdebaf5ce06b3bc279f78087f0db8db3c6823edfb32c12217830be723d8872b30c + +SEED = d06899f93a408dacb41c969718346f1e289bb5ea65e283ff79c705a074517c35 +PUB = 46bf2a08a076c47d7f11b733f8141c355363ed85d7def26ba6a0ce15ac5f2be8 +MESSAGE = 0864c39ac4fda8eb9048597bd40be0401021fd2dd3a3390a8facce984b260a13fa2c7cfc00d192fadf134a0ad5a181ee89eff0c795eaa0fbfe2f3b26115d07168db42ed21a51303b1958e4a42dc065b22ce48f17a6 +SIG = 6f89de92a66bc5f4144339124950bdf588144cb372f6736245351c9476becc59a258f9a933ffff2bef4b46cd1057395225799fd09dede6823db0e325dbc8140d + +SEED = eebca7966970ee9f2cc4d74c6f1d8e0ebff7c45aebad349fb9f86df628dfff0e +PUB = 89101e0309f767e64ae9c98c4a5d8d2328fb3ef262d082f49b64ca209e1990f6 +MESSAGE = 0fac790adb9f59e5cb0ddcb2b667172f2a21034d93bcaddf188606fa9e776db33a8fcc6bd7f5567883fc0de351aa9afaa36d2075b1ba853bada849b8661d5c8154e7b0afea656dd15e01a9c5ba21589b02f8fc5481c2 +SIG = 7d447ee5328c9fe7f11936cc42998754a56cd1d2a6951af4fee7c4a8eb319d4923707c793c55d79067f822d5b16bb5776e38dffabc67237a916a81a63339b003 + +SEED = 3820b6b15939d0afe18c9cb3d9a2a08f167dd458eb6c7e3f1558b0c6db4c6890 +PUB = 80b85c6559fea8b400e1999cc5bfed507ad7fc294cd9ba0ce2dd2584a91089b0 +MESSAGE = 3e5ad92d44b40e8614d8087c9c743de0c0861a07f1f5146d71cac2f3740024e841cc2d46027cf5d261d3ee7c1875b39551017b5fb1468114fc3e098a899cdbd558b39f098e156b6e9801ebcdd65fed56dbfcaf2c8c787b +SIG = 823ee2c0c8d87faa0ec0141e9ce08b51e57c839792d1fbd97a967207fd415849ebfb5dadb5a1dc2c0a8b7fc63fc354857b8c90c44720e13f45cd01e7aa23140c + +SEED = 0d20fa4a37ff30c4dcc3e44ea7ac501137e5807e9781330ac310982cc3d39dbd +PUB = 67bb0a01bc8617b491eff1a326c1c70f7d0c5b95a5ad48241aedce1c6f0883cf +MESSAGE = 35e0f4b4a517f9c7aa4514f03e6d65f19b27c62cc069f6bf07dd6378bd6afe2b766560006cbd5730a00919ed11191fb0c8dac56e153fc1cea4bdce5046cccb717759a4083e1c16f740763264cc804de0d0e1a4b5a23067af +SIG = deab12ed82ba94b469ca98b66fa20444b4b7881c4f0f853409c9a1504a5b2b6d7860f26ada6bf73459b9cdb573c8017121338efa60f4148086d7a3a8ed59bb07 + +SEED = bee161881d819b370d240d509ba46b06fb828e20310d9f6b309780703e98927b +PUB = 10854380de89162bfb9f7835a2716a3a6e0265671b250b389d01c3bcc03736b8 +MESSAGE = 5a6fe599b6b09b05c0ba6a622df3a92b3d376d24d04ea85ebe767bc2ec4d14e83e6937dc0b914b4809fdb607906841a6fd1dcdf61aaea8f9bb81b2ccaa32df412989ae53646680a71a211c8440eab0f1aec5e4fc00e6a2c96d +SIG = b07d072eb3831fae8a06effa9201797496dce126b8e11fef2fa07f664dc5cf3d4bf9c38a8b3c09fb5f14fa2deb219e7d852fdd27c7ba32d309942f2746dfe404 + +SEED = 70150e9516164a3d7b7e8b6f255b65cac9f07459b32d11bb94b3d277208abc99 +PUB = 2328bec8e40351047882e8b43bc1ab085386fa47987e46ea87608814c5da713c +MESSAGE = 77be8eceaab431a13c2a28d0d1556489d8c392fd7ae41157f7caf082cb54e45f08626be0076be844d38fde901a5eab0e8832d69dac22fb8507fb8ec4faf7c88fd26da308461afe385987972b5e760a34a5e18b9a82b4aaa529b7 +SIG = eda3f5033ea7953a0d583c6457522e84ad78445304d48e577d4d69e8641febe15248d8d90ce0944a8f801d39099bc77494bac4ce2a20b38369c6adfb71e03d0f + +SEED = 3f87fcfdb421422a9c5fb98268313c15128c78844ef9eb3b3713fa77b6718903 +PUB = 533ec59228374bd03a4699e3a8896b86182fcf8fc3085fdb8f5c4671524d6fe0 +MESSAGE = c00fed2d689468bcbacccd446e8d8f299e2a86925e62e59709afaf4857469ff1e006d00fa3e18a3615f8f06b6ebdff785dde58851d2c239038a0c344dce985bd1fc8deb4779ae5f8932e2f9ed5990b6472dbe4e6fef6917657e0b5 +SIG = f6519d7edb6134111974033f03b8d89e9c76caec8965a8e17cd45fff19de2615d73eccdb4a6664a8f0e23adf98988e96251bf26eb7a4ccaac1079f0a772f9b05 + +SEED = 44ceef044ff998d4abeaaf374eb41d086718b63097b1e35f89634c14897132ea +PUB = e83c86677d03ed3a5e8c95f41f0b325ff4333702f2ff6936f57ff30aa31485c7 +MESSAGE = 8d3e2dec4644c7b51633b13e6375ca42ff9138465f43d7800c7313199f67c9cf1b520b1820bd630ecf1c992e2767b38eb5bbc441a4ab8d317db441db35a0fe3abe7a9e4541881c2d7b1a2612306959815d1da41267d9649dd4494ace +SIG = 554552d6b790d421d06b0a67f8e002ad7a1ed01c06cf00cbeaec2a268bda29f1183f0ceafc625fa5fdb847dc86fae1a20406e459d4a0177cb515220a568e0800 + +SEED = 98ef2a44d4c8476dff05aa78dcf9c6dc086cb2f622a06745d60cbf223faaba66 +PUB = 42fdb1daa39f0159119beec1bedf6f0394b26a2a29bd1fde081eccdadecc226a +MESSAGE = c8b5fcfc3c18c7d95957b668e91c731d50c7fcea4f9575bbf784625870e238df546e2cb1a19d2808dd5b230d3871fdec16100ee1fbf9b722fa3744a750a3b396b05f9c21b8c0f61ead57a78c5ecf72b579cfe88a3f404c8acf524f9ab9 +SIG = ab5e8724a3e6ff76058cfb214d574e04d05574ecdd4ffe8c07c7af396e882687c5d79ef1e62fbb4c5f1bd06b9bd897826edde0d111d918e8ef961ff2a00d7700 + +SEED = 93a8c792a239c931917c114824a0174f8bc4ebbf98af8c7e321e0f5bea4015ec +PUB = 9b2eaa8a9c2c25ff4f6e13bb12bae5d06fda0eb1105fafae5880ff168740bb74 +MESSAGE = 901bf4e041caf16e04f2ffde8d6fe97e93d0900f6bc0fc09a9a0179d137b4b7788e57eb92766a9c634f35adb5c2988af1e86208f461998f59cfec99204b484fbcad3951e7ee4405523705d9739b44307db03f713fda78db421ef3121b3ba +SIG = cfe32c4435d911d772dc0727e78d689d0164c5069597cb441b22c1d26236479f1afd7089121b9ab4f61bbb1fae1ab42f7635a92a53784d7170916b703aa5cc09 + +SEED = 7001fa0c4404c28aa5b5fcff30a961f21a22f5b85a9e382e07aea8a8924d0ec1 +PUB = daebb63c4d8f40ceba8ec35e3dd946a6b75bc74fcb29ade7b55eee3cc3aea5ca +MESSAGE = 44f48cfb02f08777a57873855f96be4c0291323f2739b275d90757a15472e5750436e0107408fe3026c00625689983f990eba9becbfce403ccd56356ad2741fd21445dfb23d76112e578b3395cf9d960955f1da8f399ca286f21390e25a59a +SIG = 64eac9ce87460618636b41fd2decc1673bfc48c5f479dfacb51e86686407374b1d10bf65d6d7474214d7770c9e5c7f806c80d53d48b720870e5e78f32e3a7e05 + +SEED = 3adce3a3d3fbc977dd4b300a74749f13a3b04a5d73a2cd75a994e3195efebdac +PUB = 6ff19b1f18d64851d5c74845c6407f0bf596a52e385e020127e83e54cff5ac19 +MESSAGE = fe6c1a31068e332d12aab37d99406568deaa36bdb277cee55304633bd0a267a850e203bb3fabe5110bcc1ca4316698ab1cf00f0b0f1d97ef2180887f0ec0991e8c1111f0c0e1d2b712433ad2b3071bd66e1d81f7fa47bb4bb31ac0f059bb3cb8 +SIG = 7dda89f85b40539f5ad8c6de4953f7094a715b63dda30ec7cf65a785ceae5fc688707ee00be682cecbe7ee37d8fc39ee6d83c64409681708a0898a183b288a06 + +SEED = 14803c1f23a47fcdd35e5d146e20ca630cd712c047d5330b652e31857acbc9e8 +PUB = 36f2d5bd6d8324fa6e9db7f7d854ebe48c0e6299998122e9d44b8adbef54f093 +MESSAGE = 555983679d026e5354b4cc055ae1bc14653c7281ec722372f3feb778e841da821b3d0b8ee7a9a9129ea06824be8379fbbdcb0748f423721ccb172a1bafa1d5ae9fc1c51e93d41dd551c3086079b620286c1c40c1223bbcbb76722e92ca21d8410a +SIG = 07a7de6ce97664b3ea0928e1385c3309be08a47cbf4daa9186a1b948c86fbba39c4efcfcb7a0a3866bc94c6788ffe6be0d4972e56d0c3292d1cc6e25447b9904 + +SEED = 1a61154d3472cd96b328ee674beb4fc86763a969fb410494e0678414e31a46a6 +PUB = 7576d93ac85d0fc61f258c55cf90bd87a635099c0e810ed0b937258d13b42559 +MESSAGE = 64c565efbcb8b9528ed47253f3c6a4035db781d6f0976b5e5ba8447d4ed54b04105293ef4c000d8b2e1b5b75e727e5d2a077743b50d183b491764801a2504d16ee6d7d8ac4fe40e6bfc2a8129c7285a5ac691c35e642ed162cf7fbc64516733a23b3 +SIG = ada1666c9c3b8284b8a21c4f2618ef0808a646f3f10941e470f738e1785e2de9fdd9c8cb526f945c7a8c6994f151b7d066581b1d755307947c62befc8ab7070f + +SEED = f215d34fe2d757cff9cf5c05430994de587987ce45cb0459f61ec6c825c62259 +PUB = 1ed506485b09a6450be7c9337d9fe87ef99c96f8bd11cd631ca160d0fd73067e +MESSAGE = fbed2a7df418ec0e8036312ec239fcee6ef97dc8c2df1f2e14adee287808b788a6072143b851d975c8e8a0299df846b19113e38cee83da71ea8e9bd6f57bdcd3557523f4feb616caa595aea01eb0b3d490b99b525ea4fbb9258bc7fbb0deea8f568cb2 +SIG = cbef65b6f3fd580969fc3340cfae4f7c99df1340cce54626183144ef468871634b0a5c0033534108e1c67c0dc99d3014f01084e98c95e1014b309b1dbb2e6704 + +SEED = 8c9f95083075a43fe426d19f1e87719b40043de88eb0ee971f70e10c7694ce4e +PUB = e91d167aa3ebc23e70aab45dabe905e416262f910e2a955dd8619efc74c24e85 +MESSAGE = b69d70e860f55c427ef2a71df36e05bbc43bb2e06463aa5de34419c6a614eea6695335a87526c1226488d842891d0574df343c9c1e17aed6958ecee87474221eb77a599ecb059344c0d052c0002a66e5a6013185af69a01ba5dbc660d36cae235f67fe0e +SIG = cac555222dafec76a0b47b9d2c586b3b3b9b3b9c8364beb3cae1e8dd7f1ae9dd74f22b8dd4ad2b290f81351a415a99f030f10778be4cda85d1d353331e70f109 + +SEED = d7eb1fba424feed100777eedb4874bf20810ad686b67e31d27ecf610609a33f5 +PUB = a25acb11a6c825713a085fa754692886a87d07fb9be1a53eb961728bb66c9060 +MESSAGE = a1d0f81e3d59089cc2b19e07d2fce43db4cf171faa642f3b0bbde77ae3d53af5c02bf8fc12ffb4e57f7c8a015d6c2d178944fae9f7c8fc969d4b77bea51876ae99d59e94ad2456e0ed72c52cf4e5340da17c44dbff86457a519b6fffe269066290d629fe69 +SIG = 2bf719682b07cc5ecc0480f37e9d123ff6f44c26e6958e59f080466f9cd373a16500daf123dc3f1334774bfc9fa84503b16dbf21a815c1ada6ebef4920461702 + +SEED = 4f6aeb35fce14fbcbb9aa8a4f6451bf95b98df047fa8c43f1ead3b404d3f928f +PUB = bf66a9edd09481db8444a176c8ce0578d2934f0cdc9734e86fcaac05bf3330f1 +MESSAGE = 2dfbb3f59e19ea17d44a5bde4ad227a1a351dda17af840ee0a75da21a5cca89b6d1c567c333e9cc910e2157e05e86ad5d931145064594c47baeea8663a34649c43e90eb95ca10f7d51597b378a722f1f704adf9f22e9f885b89d1f938006a2efcdb42aaff5e3 +SIG = 6adb07e364f2a455cb05867abc511acd9d658977f0cacafc92828e7b724f6bbf98bf0bfb29f4e5e6c74738d4fdd816d9252407ae4f3afc574c4f00614824e203 + +SEED = ef4a6762b400975204ccc13abb47344015454906850ff14940cbb83aa22414ae +PUB = eaca450996f50cfaf2bd7f9d7fa7087f09ad49664206a80bc2e5bbbb85bb668e +MESSAGE = a4b63eaed5a64a94f2cad212ce2ae71092fd3ea744f5bd89562b2fc2a6c9e4d7aa27add56264a5a55016610be6c19ff7d4989e9504740853012715a79ece9e12c301b3317c7d9b6730db862a4a1d28058e0f8b5ddd9738c7c62ea572cfe59eae08e2b8b6593b58 +SIG = 02697d44cad862f1daf5708205f450d408525b10c01ffd06cfee80374f3db16fa9a49c19a9844b345f2f9559ea74aab173baa078c54370a5166700c6dafb780a + +SEED = 55017e5f61f0c5bafbcde6f849f42a31e5e7a878c1d3f9126fc569fd417ea9f2 +PUB = 66914f74ed932fc881ff0166683f675a7c28a926fddd6469cdb3f28e6dec42cc +MESSAGE = 2fc84a0998fa6e168a866410bb68105df249a28cfc76604be94fd7dffff2fc1dedd220199465575e8df860190f16aca4084169be16c6ba32eb67042ffd4f230316a26b2624a42f8f90ad57f6916486fa91fd94ed68aded4e632430ef719446979bfaf345409c387f +SIG = b1a5e7c49b8fc6b4331e0416ce7e4ed59edd56300b802e0d72abca4a6fcb876c03bf331579124ae0d3fe43f7898bc87e93fc2da3970fc8638957d18c6613c808 + +SEED = 0553fba866942341217cf278ac57cb21acd09d9916cc6af0ac46941ea139d545 +PUB = 840c66e57c2d4f52a4a2796d2a53c5709b96a628c2e063fe6efd47f283ef5e82 +MESSAGE = c1fae6262a0e98a6b1235fcb62283b7f0a097f9d002416d318fefc60c5a1584f900ad0ab26ccfae0d6d84aa9aa2df16d4c117ea2724676cb866d4870a872fc829a7c2a5d21ba83340adb339a34c5184c7f5ead0f077289b33677ed6a1ba34be1994e25763bd1d9faec +SIG = bc3364c152ee5c808ac340f49ea2cc404e93517121220cce6f7c30a22500e41bcdb6e820480f8fccdd22ff9ad96da532802f431e94240fb83d4bceaa09b92b0d + +SEED = 7a5ac602de19f3c21040bcddbff42f6aee6f95c1b093868f48e50482dbf4f9c7 +PUB = fbb6c7531cda21e7d17ea903c4d14be6c68b4ca803a16bd87120f5aaf7dce1d4 +MESSAGE = bd1685419279eb81e4cf3c909031f0f09c5ffae7e2ce6ba9d96c2bce87b8ba0dd763231001e532c7ddd62103abf701288e19dd8f5302e8f5d31b64cc339bd8b7a95550c8a116fd486948772bd5af8dfd46001c59767b0d6bdce383a7078992d1022fbcaf90710687b9aa +SIG = 84101dd4b5e8ca3ed98c1e8a06e11d7e424b0d12ca714ee7374b64c29d51a2021cc77ac75389d9b0a646a447623d7d04d1241866b0ca6edd1b7ac015666b700d + +SEED = 50414cf549bcc55b5b6b75ea3782b2ea7c087b6a0106175e469ca2cc764aeb01 +PUB = d0f30c12e997f96e7aeecd1bff6a012ec388ebf8f3f4af664804d1638e4c346a +MESSAGE = 75ad77e8c54b0b05fb2d162e7cadb8a7528081b863f76a441b374469413e5714edf54f800496af0157c17e425583414d4361f2134171c0b87c22ce6820a4850ab49d99a9badce9e36110e7f3060118b3590f82b43771e9fbb081afe62227e024d98de6cdec028d7c49490d +SIG = b309800160de43a63a89a0acb8a6050059589b3eaecac20b256fece438042f69415d8a56883ee3836d3134a7fc1de64fa8c8cecc3ce27589f606058820857a0c + +SEED = 93cb00d8fe9c9777a683631f39ba0f48761482cf1c366bd863cf715101532555 +PUB = 87e94a1ea5258d61180cb828590ff1418a87d01e702686ba8abc2692c8dc3c91 +MESSAGE = 88d8538d31867813d88fef7228d49a7e950d738396f116dda1025f7913547c5d1dc5677a6de4b4a5880507b361780b61b43f7795263db22ff341645f2f5914fd6088c2811211ed4756ac019a6035d66e3170c1d82bfaa30596b396b3260cc1d10d413dd47ebe6daa0c30dc42 +SIG = 09824fa2dfbc4d6ef76a9e4145961116769130553b3edffa50d04f39b8b79facbd237acf71354a53a6e5fee754e823b0b290f9619320a13d561269a221639f03 + +SEED = 2b4cae380e95ce694c26ac7957447347f98e31b4bf02d744e131529071e2301d +PUB = e6fc705a79c98e115b4e28d3aa1506b74ee74276c5fc1109a7f4d89c6fafb889 +MESSAGE = e0b8250e27b7c0291dbc47a6da6f1268987afdf0a1e90be69bcbc4370865217830d5208693be7b7045099a22ea27f952eb3f79a9a0f1b5a87b19367790788d34c219c2e2a6b834020fb4fd149dc56b544fddbb42071a162fc7cb33c146cac05a31b183e9daadc616f3af449b17 +SIG = 555e45656ba9cfbf5155d0e52576e5197abbbc9dd233993eec2a1ee7f6a86409c0b71b0a661978ff5e0acdc9463dc449906f474f8e79bb86168bf70741e34b02 + +SEED = b56491e54999bb5a1715ebfa2feb14a545a3a43c2fdfd4be0c95fc11819ad695 +PUB = cd42bf414f9bfc72ec069882a800557cdf31bc3464fb102c310e6dbd3ae20863 +MESSAGE = eb4418ba30683ec7959bdb1ec7b263f83e81f054ddcdbe0a6738ca7763e246935bac419026c22bfbdd1236336cc16107c53513e3ddf34e120846962c3bdd54f5ad5749597208f15a8bb56667baa895f08340db89b85c435e770931928d8abc99262f839aedd9be2aa138c9259adf +SIG = e3be3e71a89852df3cffd72d68207869dd3eceb49b1f029493eccbb932444ebe8c8c6db5f0a5a67e2194408df9841913a5ac1a606896419a668f4f47c56c2b08 + +SEED = 6579c247dd2cd02ba2f7d7a950a330752681e92c0dc62984bbea279ea521c381 +PUB = 0b087bea1a1b3d15805cb604f4bb8d68edde274faf521fe6df50c55f8ad4a70d +MESSAGE = df7c552ffc89374b9571a6024a8d0471d7eb6be8dfca6f4166b581b65479015a0568129074cc04d6342c758ca18f7987dec536b7033d5f9681504340e20986f027b8cf1f263be76db3525d173422950ea8dceddc585640918aa9d25ca89cba701c2020153873f46108c772cb388d55 +SIG = eccaf801ae0a912e21c6b83a5f0e4e88d4b2713459ff93449fc0b21a9f416050113cbae4e814d20c0a798f76d2f9d326ed83959ea02abdc1ab350a467123f709 + +SEED = 18fba60c5026f3c9dd7aedc04209d5260361de400e190aeb60169e05a3367c9f +PUB = dfff347f3dd255530bf7fb34d02ba486d112bb46e950e2ef80e517014cc95734 +MESSAGE = 34f08a804d7829cc3914f000ce1a3288acce2149c8a02086b9f67afccd83a178b0bcfd4970c056997da7dc3d47562f16663cedc52f82d710850cf4050379efdac23bee17c330a383ad137f788473b2b0723603b6deb1fdbf6c523fc948a0ccc4ff100fb946d874c1f990436ae8c4f3b2 +SIG = 4bc011e40f0f59c618f6bbe230b6f7bc2f50e3617c7faab7f4c21cb84f77eba994cb7c2a1bf10b01bb20084497fdf0a6ab5d9bcd22c4a2c5a78f79926825940f + +SEED = 073cc15b0536285933b2be39253cf4fd696b81610f5dd3adac2e9cbf338ef2f6 +PUB = 00b551d371544375dac5c4e96cd1f0215207e8e166a1fe49d5b0a51ac18443ec +MESSAGE = c285362bc8ef628f7aedf654231ee51acdf2cf69a886b942bb9bfed8155105d9209ded2af24f169ad5fcd451370f5827a85111c7a52e032c5038617c0c0170e2a6c231dc401d12062edb186036114e38793b79089077581b9783f40007103ef17472491c00e7138aecc5084d3c85010470 +SIG = 3aa52a83062a8f28a5d6b7607f484b66cc374896b766123126333c579581316c742806f627b5bc55cad705cc1d4782b044080c8ac840f38c0c50d35e345c7803 + +SEED = fd894a1e8232203b289505d5c68c68791ffc0e54f2a87530fbba5b3a3f2caf00 +PUB = e95ab565945c7ae5d533df5d0cccc7e9abbc838e20a0b61c930f5d41d81a6fe7 +MESSAGE = 2669624a94f2c44a05b7dc3ebf93e58a4bf3a01c273657e7e7878976f6b6ea737fa3f22cc8365b8b220c007d5b642726a408fe2fab69ebb3bd072b349f4dc3377ee7cc752934254215d23989bd3cd02ce999adec9784993f4c19940815f39c9e229247f5205c36cba44e714266369289b4a7 +SIG = f51102219e8804be713e556df4e4afa2f8866fe86541a1c2a0934d24c3c9beb280a70dd8d527fe8b7e0b948214d5f2f9638619914b72d55dc198b0229a848708 + +SEED = 18ef464e28f87ffcfa4d3a9c09a22910951b8c719fdacdb56de62c4b406df00c +PUB = c5064c9d43ee2da75b06bb09c77267dbd0d39128f1cdc6bfa451a03e93af4a70 +MESSAGE = 9c825707d9358365ab9d38f7e728d628aa722a4f1a20a38e47c999fff8fc32417fbe072f96eb6a0e11e4da9b6de9615445280e93c77a3634d3d2c6879856c248f9800f60a0d38dc1cea8b7f31f286cb0374827b4c6ba144a6694f2b908ead68d18340124cb59cf1701863bd4f3efc709f3627a +SIG = d1e7f16e8e597d428adea65591d551b54b667aff2020c464f7f4e53c4773f70433249a3c71b4d11c89c3faa892809227b9f29ef4f7f5d020d4674d4021359405 + +SEED = c911bdf2f9e7cc5fff35c96e15cc12eafd05ab0db31f649f7408acd0cada76e0 +PUB = de44696cd6bd2cbe9b11a0ef18b88164801a969d5e06ed453eb4008cce9a5725 +MESSAGE = 76c471241d17192984b00362696e4d9d4d2b7f839c2064117e50a1598f3a1172b16c55e5396866084752024f3a7eb68bb3ffdb80979a0af6d0f6af26b6f0bc0c0384433bcfd44c75eb654a8a8225cb9c4a7fb3c824c3af6125fd46db287e70492d154632cb8f62432659d958d6281d04a54f5f5f +SIG = d584b5da371ae4f5c9859b25f70dc56c1b7b4e02d1ae6636283b1b7b11217afdcdf65d1b49ca2c8ef17966e9bc65f10c310b77bb5df7aff5ec1b379a2ce55d0d + +SEED = d3703299c41db36d77dd3a49541f3fb21d0b2bad1f6e074affd96f1c40d0f927 +PUB = 862c5ef616a5f066fd87758a56ab45056fea4bd33f008be24f7b540e095e148e +MESSAGE = ac92edbe22257bb06d94aa950e62d18ca2ac0a8fc106000d2231f8a13b8d7a209ccd8cc49a6cd68a7f36c02fb8f728d15595167f0ba8cfe95c8a1e435f327513014ac428b75d4f72e7c834dd70e1a448f1847d3498475f74e3d9334dc7dcc4fed72bf6c7fe3b1d4f53d429616f1df44f19733158b6 +SIG = df28277121eac44630084cce75917ae9f6bec65af5572dc30719bde661cf696b85b8672dd4983cab30bd05cc3a119d7db9babd522d7b3a6bcf3886ecd25e080f + +SEED = d411cd33576d0efe9ec413ccdaabd4fcbafec01a3af4b3cbe34f8b05ef8b59ba +PUB = e870344df98dd3a8702c4519bf9e8b35a9d189e746f7203dbbf9bbfab22d6f63 +MESSAGE = 11d2c2a7f0190988126696431b4bbcd90ab7b56a32da6404ae446aa762a4ddc66094971538eeb85bde0470a510be0d6d85780ee730a9854138728ae6816162268da852858eaed4ec74c7ac62e6e7096dc002df0bdf5fa40da565b41d181a3f0ad0c5e0b976743e315d9db8ed4160abe69c13a2b3f09a +SIG = 83460d15461d6717710bafd6a47a1eaa900a80f2bf8b8aae2468773614ee84bd628c9717476368ef3640cf760acac83ad60232a76963b7d52588b11dc004d70d + +SEED = e10a2f1380c3e4720e8a8707a9bcb25a0f58270d7059cd7626c7153447edfb87 +PUB = a3c717acab366a40b51187bbf35b2d15e97cfeacd7349c06ef1c91ac93e90656 +MESSAGE = 135212a9cf00d0a05220be7323bfa4a5ba7fc5465514007702121a9c92e46bd473062f00841af83cb7bc4b2cd58dc4d5b151244cc8293e795796835ed36822c6e09893ec991b38ada4b21a06e691afa887db4e9d7b1d2afc65ba8d2f5e6926ff53d2d44d55fa095f3fad62545c714f0f3f59e4bfe91af8 +SIG = 094bf6f953ca0eb77df45129b7bf10d192cf6ddeae94ad6202b8eacfbec119e5291578fe64a084ae600fe07efdb8a782610dbdb0b49eb5f2a46c432355552f01 + +SEED = b2e697b3d3efec976ef3369530c792717bdbb428d9ed0c11ec0ea9b2e5f39f82 +PUB = c4d2e4b3c236d6c9b8c74fa384612c4710d83aa16ad7ef01fbb7421d4fb3f0f6 +MESSAGE = 7b436232ac2111a84059510c48362588fcb7383426be5e6f62f372e4f7cca83c81c2357f9b54f4a15291065b6d41aad1ea93cffa776b9acaa58afe2b51644b97af9a3e53f84e40aa6d86051e6914cd039d4170a9a526dd69955ff507c33f74e2176591fb0b3cd7f00ee418f2c258a9981cccee72f01c8430 +SIG = 5047fa38197b8328e78dd8a10e966afb7bd3d43608280f1c257d25ca43bc1c06e94a5747ab6215ece54cdeff8c56567d70d2f91f9ec8c260aa1080a6ab5a7a02 + +SEED = 19a679a7a905a1e2b3038e6e418b3da97c3089c7cd351ea07bc8d1af64eacc46 +PUB = 19f08361f469b4ae1e0ceb94f47a7de7317410a92dd013b16ae0d0532fa4b3ef +MESSAGE = 980c7b4d2939061ac7b9ba441117a19485661781a4083067c55acf93026c082a93cc124f095e1b4f2c3f6c135412a5096228e8a071e8b4b668ba9d9644ea9f4dabfc54a9856c3e965e6363395ab709037dda229baf927cd01f9af5e039afc42f3cec634f5d832d2ab7c7cad3ad7b8cf27ebdac698431ad8236 +SIG = 4347b7b4f7c3c4dd315b8384a0b0caeed84bdabe24b2915f12512dfd04770fc996a1bfb729afef9edd611447081a5330617eaea1c1dab1bf13cea8997204910c + +SEED = f03b8363ee5b0eef7018a49bc02adf731da54ee50a7f03b88a29a2082b189c43 +PUB = 31287ef5a2e64104ab7790b312f35c7ad4af6beb0d7ceb8a58f36a54ce272c3e +MESSAGE = 24191b5464b35ac7bcf4a375f033efba8943b09b9ff0fc403ca7aae702a3cbf396c5131bc008132cf5f12910d586dc1db9c084574a96babee95642f922371c0382ec0402a26feb142e4146bbd3360c2b36834fe45af5e2868d4d56fdd504cebf0c2d7f5791b4429417c8b65a98e0b15c466c137f410524fce737 +SIG = e8fa967e6afadf6a877d87e5f5c52bb634b75a7804199a2bc9d027b63a35654d9ddd06830455641dbfb49edce42e20e7d4104a071c2cbbec23018c297ced9908 + +SEED = 11086b0d11e415ab1ce02aaf8f0621b54430f6fb135c74f40d38e8c64737064b +PUB = 7166dfbc691eb8c201114ba0d1a2c7b87f7a1fd8d0b36058b0d7dcabe1ae30da +MESSAGE = 4b5b2936c5e360a38455503721078f8adb404a7ee7ecc14801dc87a67a152b769569fbeac0afa25a2070a1686b900ac1633d499808cdb2e81ce3916d5a3c04d19c5bb2699a662b8aba4af94d390bac7ccc8ec910ed2acdf86ebb71adb601877885eef3c91662fc30738e352cc74353ccf8d8edeefacc042c10a0e5 +SIG = e907459d5adcd0d0c36418581f19d0eebda7138ebd9faa0b262201f458c856310bb77f4c7de922495dcfe8b248eda2ad0df6a73f47bbfb894baa7d8869875802 + +SEED = efce7667a8ef91228caed14eb477a345e5e8239234080848760ed0970713fa86 +PUB = 9193055a84df1eacca28ce2a08c2a07a50f04c024ecf1fe4a47d2efbaf63ed58 +MESSAGE = aa1bc80d7bcc1d94a23a57cedf5027482477dc46b86890bc0e5ac29ae6c91bbc43130348797305f75543580a8a069b348a7bd8fc3e015230b7c1940c7f80a82b12900910dbcf0630da03f081d44c7f955d4a1172f56ecc7c5ac646696bffdf4eb6d88bdd9cc3843528b72583abb3bad02e56ef7646eed5139551cdeb +SIG = e5a63124db1696b64140b6e9612fa9587b3eef710109398d44ba0ca63c0ebad06f0a6c8994ea34b3a2af91a89bf41ae614d7727d716fd42f8b92e1ac64fdbf03 + +SEED = 88fccaa96ad884d1165be71dd0c4f5f8f4421c60fbfa498bfee9b967462443bd +PUB = c75cb0e0237b45b8656eea9f3d1a9d4acd01a103aa269bb24fd54122fd81f2ac +MESSAGE = 9d0eac98556bfa8672c35705d1d61ac4d0fca19dc0d993015877857d27fd80f74acace666c563485d81e53603a6aef40875fa551cc105f2cc10b39694679cdf4a6b073bc88645fc51a36da179d3d1e3c7722454c5e73577c61aa7d148c4ba50ea46c56a1c3b3b3c470f93100494e08bc5514ac763a85483c42c7cdc27c +SIG = 27d3a197cc9994212063bce8d799e77b6853b7355ebe369bcf1889a418a82caa3a7987a663f621defe86b3ac4ad44faeed16c9116ace28fccf915557fa779903 + +SEED = 670b30626fe367d8b45f43733d6f25b37eccbcb551963f0ac8b666b48041c72d +PUB = 65aa4c6d4ba0ab34bc75b39f09527ca6f2425f52415cdffdf2dff273f8ea612c +MESSAGE = d00bcca7e184d10e1f1fe420b50639e1d5deba52a751236e68c59bb4bff9802f5fc165ed42fd6d534670a7c6fb60e4307d947915a248bf2f93465c2cb44d8f453d2c015afbc8ed58818ea51726a25177930e9ea192ef4514f4bb0eb4e0f5d4ae3c46e357c81187f7ed174733fff959c3f9fae6486cfa1356a95699211de5 +SIG = 1b6b4377d2b98e0f9d24ae8dfe30e2396e2004380d3431488e5843cf8d2d7a0070ab21f8a3b51ce84d2f4ba209f739f922bebf798096693f5622873d79ae6f04 + +SEED = 813c4daed67a190d68bb635d73af6da74f32fdf7c48cca6e59262946b8e8c71f +PUB = a2095457d7697020e2b884d95a96578c2a900a7666ac0dc7bd38f1931d7945d8 +MESSAGE = ce54cb0450e689a0dbef785308b3177472fcd6d38203e58a0590b31fa253f9ea590be5368a922de88b63450102684443fb8189e601282003323b89c81e92eaef2b5ddc4a55c53fa3cfad4160248b3c286ff80d31d161b7b8dee713552b56f1507fb72eadfa89054e9d1600ac874c4b0a961004eb6d0d4bfd2ecb9c734f00ba +SIG = b446574ff6a4bd2b572e487c4ab443ca641075168aa4e1092f71f30bdb068ce46a395efee1ee660b9fac26d54109722c15cdb791bfb87fff63c6596ad4f2270c + +SEED = 8400962bb769f63868cae5a3fec8db6a9c8d3f1c846c8dceeb642b6946efa8e3 +PUB = 98be21001993a7eb1a1277ff74c15504183d25fdfcc05f0d4dea892f6e301890 +MESSAGE = f7e67d982a2ff93ecda4087152b4864c943b1ba7021f5407043ccb4253d348c27b9283acb26c194fd1cbb79e6afc32ff686b55b0b3617218dcf39316b4b66b3c8c0d67267a86db8adf3750801bcf9327d4c25441b96197832b4cde0eac3ff22892a2f0bc17c2c213c02377a333e308ed271658049383b7e2e57b6b8b125512e0 +SIG = 0ad71b0025f3d9a50db338414d6d670e7799b7270a8444f6ae7f12ae7eb71bd03ffd3c4f36631f69fdcc4061468ff582ede495243ef1361a3b3295fa813ba205 + +SEED = 6288722035d1ea699bc7cfdf18d89625423180b683fa74639f4f30f15359cc85 +PUB = e17faa019572861a064e1bc571256dea1468f3a48590a89138aaa85925080cd7 +MESSAGE = 8b6caacac51d8949fb86acbcb1b99d859ff67c64147bc1216909dcab07ee6ef09f403863327394689dc34abc778fcb5c1f5091acf5a08f9d842211d1ae2eb40be9bb8d6679077471547a6c71ff77b519d4b7108e32bc46251c60dee8e332b6229316e6d57c22ab826ff1bc33f2b0213807c19280af110fd26ee27468201cff49cb +SIG = 9dec92b6e89adbe8f4e1b5e93ac4fcf957de7d1970a226770ec4eda647c8e3b3dffb2731a39e16e4a0119d3662a937e560522491ec7a1696be04c076b12e3501 + +SEED = 13038a3a65ef32759a9cd903acb554b252de00e7cdb77bbed1970b20680ee17b +PUB = b6a308e67f9b46c66499456ab5cd135cb2fe84a32eb045358626604da4122c8f +MESSAGE = ddf00b4033a2a088022dabe93356432f50ddc6c6e1a659dc1a93124a4c2ffffd182765a2f56c43ea0bfd8de8015060889ae6941c3f3e255d4421a1c36201be846a2738a71f120cad598ca8527d70ff8d5a0993b55cb5153517110a41962daff42250158f2096d1ddaf7186e50298cbe51fcb429cbea411293f8a7bd9cf069fa237e4 +SIG = 5261558ecc3c98ff36351f42f504cad4a32ffda5a744560960b4c106e4492f02e20478887afee4f770f05597a7e388caceae805ae351e0e45e8e578e6a6ff20c + +SEED = b9de5b063d3ca3a773f114941b2e4227c07511c0f5c06017b9c8845018f23432 +PUB = 5295243c8646e096674dda15979b322b9dd0faf27d024a0ed5771334e1179ed2 +MESSAGE = 9493cc23896b84096046ae1053afe39499e9424254b366fe143f4da321e2dc9e4784208e12a542d899828dde7eff625a7f12416990c2841ffb095bf94c0c610e5a663918b689031ccd6b519349d04de1c212ca2a9d7abf52e1b4fd467bb665b6919ef8f91617e205565bf56647e5f8d508ea200a84467f8fa122e74bc3b9979f1174e5 +SIG = 92ba760d14d1415cfaf218ca847014088ae51ad821113a6f8630356f7ba85c005e2330f1066d0df464806052a4174610050462f3e013d702e7c77185a032580b + +SEED = 8ff0297cc08842b5e67552ec2843e04353a34d74ef89b8565d97205b74ca133a +PUB = 0f7ef98c5ba4af984dfb77bc4e537b2b39e6273bb3e7b95fe1b7e6781952bd4a +MESSAGE = 2bdc3a486c5e4ea62dcfec8a9d4fcf9ea9490dbcc715615d58490a72ce833fa22387ca50a0052508cf0aff1ca727f0fed46ffa7d3c8e23c5bb01d47e90ff06d3858a557d9926481579daf4384aea50e96ec615d2a3bf3c1122f1f24dd6ed98a5de421883589c213998ca5432373e68bbbe89428ca9885d0593d5e6215116b8266386452b +SIG = 0783737f706e6ff36614f850074fca1f485f24fcde2a28af544f37abd69b7a581defd8c771b031e108d19d788c74c5f20bb3f1c21cd92be317bacd8f650b4905 + +SEED = 050d553d282dca3269c83c181768ec067b81c9fe0c94f2a0ebbb0c942d0fcd7c +PUB = 63e230b003c53a5672e832ff7f24430be223e497de840233f595a3e200c7127e +MESSAGE = 15e13b8c01004f6aa5b236dbb281677f746d81e548e0aa80f0e414521521d856cd694e7c9152bb5e43776b60f6b560ed1ad3e4b390dbf3e46ef9257443f39c149e0240a02d021e1e3d7d046b26fd004eee7ca16a8059e126c74cb3f2194db47bf60465ecef5c704d2e2c75e2e50060ea2a31cb72b7b3c6b1b5ec72ab38004085281a22fe86 +SIG = 3f0e83765b31bbe8e1fb92e9678d6cde571a03ba7f1dcc1128461f708525457f4e0e2353aa2b598c063ff1bffdac916b5a2200655156904b0585577a1628560d + +SEED = 69497cd7b4e868cfa0328d92bd6052d772b2767395c14595b279851a9cdd31aa +PUB = 5d276d626e230d18e7bcd61141cb93c90ef0f79e01321212d838ec71457b1aac +MESSAGE = 53cd080a0c61f1a093d3b3a74571c296303f363b4107edbe880b7aa9dfe44ab5d5dc5f74be9c8d876f04d754653491ab51b135fc953f71287b62ff41b67c742bd3445671a9d4f2dc174ca1b0335f78627a0dd4b30650504178039e7393638510ffe84091b57298d3ac9001c367c1452fbcb33dc54a5dc316fb2a5270764a2ac820a0b63fbdc6 +SIG = beafa58340960908e8d86e40329e3a4523fc7be770addb86e34c3772f84cd9fb338d1f3b65bfcdb09f35c6da36d1a3adf8f91f1ffd5782cc830206433a08410d + +SEED = 2165a486b612bbff529cd00346964a3cb8cdcffa51dc3d524dd5adc5ac936d68 +PUB = 7ebc839a465e14f5892476e4a13b3988f83b3cd27ef79e193f86fa16f34a1ce1 +MESSAGE = b728da7a36167c6085bd2d962cf63959facd95c9ad4542028afba90ec9c6c0760bdae935429c3feb3933e2f00042c672ad2cd7348d92bc33f81751e294ae9171b945b193144ef8acb9a1bd9abf0475ce0d0ac789b200c32e9c9a2736b168369ce5f97b1e8d2e7900e1a759178441f1fc430564ae129bae7857740511a668f32c0a3b077a9d8b19 +SIG = 7ec6fba56ba52460a1b4f2738689c1883dda9aaffc8bde17cb6029bdce3a0ebe2fffda55939b70bbd07fdbf6fc5cda87fed8ba58575f894a366e45e5705eea09 + +SEED = 1c64ad63dd147034598e128f7406ec0530746ea1c5b72ecf79e888065486fa1b +PUB = baa6bcc1c3d8d3b11ffc1587adddc58bfd96c2b992b6c6f59fcc50ccbcdd0eb9 +MESSAGE = 9ebd8e337893bb053ef2b9e3269df54848494f03cd63576b33e64b1080be4be015264a403fb9602bbf90ca19b241a9b66863909b9008ce1b2ffcf236efa4c2668f0f47db9ff5fa157d9cb605412be7dd8b07ea878cccae6bf50f935b86d19e1b648b69e528553a56d8afb78221ad53307b7a4ec8d2fd4861b55dc5dae8e93ef387fbbe0b4ce7f788 +SIG = 7477e54158f13b7128c0a110ca6b65f42514fb70cd5cf28a8b1cc6110ea06fcf94290da13f85a11c2351d3bbccbb4c64e0215d6d0f0099e7f27bc94e949b150b + +SEED = 55abbc5dac4128134dc8c6018a213ed4b60fcc8e90cbd41db2d21eda5373e936 +PUB = 251afaa2646926b2a371f2a09d5865b98c9a5eb6ca047cd0d8ee36e5e0416974 +MESSAGE = 47010e1398ad55fabe371dd8648f768d90df4b965a3b396100b303b40a17518bed6d86b09f734ab7c10b5f3a01b53deec5f8534b70c79f3f29b284fdec486f22f44c22ccd5c6463594415267baa611f70b1b316caa1b68b5e0e99b31c5bb0ce13679a23c31a63999698164cbf37d103ba92490188be59937f123043ec786efe3d411f9b0623a6ad972 +SIG = f6a61c2e661a9eb7bde182e38ec99af985f61698a5d7fa430d16e3f1a93709b75522320de48afcc595ab209122ae0ce132cdf4b0391746e7ff341177570c8108 + +SEED = f2dcf4a1a0d46ddb2d72f8fdd80bbec5b7dea5913da4966c2f4d12c261f0bf98 +PUB = d39570a25ca59f2257f93f96600df4f63e684bf63ae8dffd914e4629c3d5095f +MESSAGE = 3b00e808fca4c11651d853d6b90f952ccf5647e102d4ee0ad7a5d181d5b4258c523cd39e3d9825298d84c8cba09f43dbba119988222c76059caf17b4bf9931c45e617448aeade151181497b24552367e52bc45ac79088806d3368207aafefd3057845dce819d5aaaa77b218e2aed3da76d40c1f07699f8172e4a5c803f7a2aceb9a47a8952e1b2f053f2 +SIG = 42882a811dad2d851885e4cbe9044708d91a86f15dfa1d66c3eb304314531f3015208c711b9bdbc5fb233951e569b59d34e415eec4b37ffd374d412c9a360d0c + +SEED = 2246bfb06155859e10a748ff8f5919ad5d1daab756f01057b790d07474775f4f +PUB = fa6349b62dc8c6a2feeef6ffc33ae085c649795c1c9d9898e75c13ae1625db34 +MESSAGE = 63ee1c7bbb15cebe1c22532d481682754bdaf58b8bc997ae30a34c9d23c33f1690c346ab0a7365ff62457424b6105f8421eca0ce3c630acfeb9a1cc416390edf4920e22b2367e9fb5d2ab25bee56da03ea55e3f57882d48b89229314d734cb83c79f4e17ee64bae6f7addbe9b525fcd03a91409a2dde907751db8cc97e08d0ea89c4d18718d26d0b897b64 +SIG = 2be4915a352f7785483046d8ae9625b8b63257af57c073691256ee076d6e1b972a101f551c705d3f96157c33b56ea049be4af4dc561cbe3c1ec5072d7f134e07 + +SEED = c088a3dd2cb8bd5d684db8538dc22473b6f014f64fe86af168b4bb01b90a1dd0 +PUB = aad615a9c28759f03d373abe666691dead8b84f9b8b50a67f8f0aa4a701580d1 +MESSAGE = 74906ae05a5af8e9968b6feb498569d6345a24f9711befb136e6c3b5ed49339e59a7938b4ba1a118f169b9ace0f7842a26a645f14c0ad22ebbcda93e67e4c348efc3d9ecbb1419e6262d0436a58ea82c2202389065ccf67c4f550e45b5f6a12a6c011b2e0a30101d5c62328bbf99c8c95563a6e33bdd9cce72b1f720139c2fd3e04913146ae5bac5288e0e3e +SIG = 3bb459d1ac575a180c1728d8b8924970492a0c8d2a378c29d1d41785c8379a58e2ba3606785e1c5da29e5527552bc6dc89a2b69c27fe51ed253a9f3b565b2700 + +SEED = 45667d1e7b5910979c4a328317968371c864d564a661c5cce557c9ecc61bab9e +PUB = edcdf5e1a170e00c8c687e7e9c18f9893b5fe495cd2977ceb7f446c0149aa9d3 +MESSAGE = cd66cec476c87c8dbf47ec91dac48fb5b42db1282a573e0a5cf0b91768986608e1d7ebd05f5251bcf8b47a17093229acefbd44beb21c0c0c928dd3cd3f8966ecce6910331c508ea76baf904d8c21f6c17c2c58d00afd3259b8bf794c146b12b995cddd1c4289c5be3168ebd616b384c281ce1b38a10e1807808853c681a640a009b4d2acd7934f8c6d07578161 +SIG = 6de668f1ca6f292814625289a0808020c87c89ac94f5b0508e557bdf8000a5ca808f021c9679b50ee2f320064c95a464a8439379828c3b76cfa766455e128c0b + +SEED = 24897428ae6546d85b3190ebe3f1f7bf7c712528ac851a588b07d5c8f94eecd1 +PUB = 5f348fe3ea5b2c023d0af7ede60e55f91aa55199699da15a11c3791d68d710bd +MESSAGE = 5201d9725f1dffa1863fa4d84c301861141acdfb64be1fbfdd5b9386db20ef394099eebcfdfecc62c6268607a84d55c55cd0efdc372ecf3067343e7b0731c2685461e24b953f99949e59ba3e67ed0f0848313793962a292c459814c5e28690ec1f45171f1abab86fdd14568b00caf48581115ee5ea83b000282fbbf0c0b2a1116039a35cfa3f201422207a3d4948 +SIG = 1b5e75def49f51d6b2de008c71fc1a909bd42ca813298dce4eeef717815d7a6c078c2f3d9a3fce1ab5b3ad8ef8d45cdf2eb4901c32eea2d5e018dcf2833cad0c + +SEED = 7b04aca7cf926216cb960a3890786339d0a615967680190123fda3b60c6aeb11 +PUB = cdbc3e70e4e8fd13d0cce2852a3b9372c3a6160cd6deaba90f9b3022f70c91f9 +MESSAGE = 1cb09624b1f14a0260c7f56d8c60b5fe45837114232551ef5966386e0c2b441b75cfdb8df2185785d22cf526fa9df7fd45d9d83881b66c1feee0913e238121eedbb7ab504da0bee8998016684535031991f11bfcd9b95690aad2d19bd6a9de1844ed1362302df4217230b25c0552ce277534c650cae526577f25d8b1fe9f9febca2c814670d4805b21adef852daf94 +SIG = 25d2d361751d52b4fe66ea18e4b9866bde3d121a7312fd9e28a1e295e087e3176c94c874a2e81600f24c4654f43d1b67d47b64822648590ce5ce44f3b5ddc502 + +SEED = ea73bf64a1a97877c3c3e7ca4644b71aaa66314c8f1b66bafaebd5edfb888bcd +PUB = caac93902e5764ade47294edd51faa14620940c668b5c1c392a6928325d4c3fd +MESSAGE = 362eec68b912852786bb4f9afff9ecf7cb28c9de6b18422a8ca940b0d7e6dcb83aa44be0afb5f1806d43f0e31d71f922f853615a26e287a27f08a04fbce3d45a0c6c311d4b7cb17e425bbeb0a6b410b5d6dbb7ac11df9850a131a691e3b60b0b214ebe044106e982433287595267b031b5d4a09262ded8934fdfdf964d868ef9a2c842f804eafddefcb71d9f16a59bf8 +SIG = bd86cb9c70a055279a86a9e64870988b8a7345c3cd2948a0fabcfb38abce3c420b4d5521618e11d2de827d9de569f6bc3be66aad40636cdaa64760ded3b7c209 + +SEED = b8123c116b33bad0dcbc2c4dc06a3d66850dab360cdb5a033c14895c4ee31bfb +PUB = bdca151ba32c6bb31531b05fdf86c6d78c8cd1935611d5ff111a0f00635b1885 +MESSAGE = 7970f6666634548c848bb52338817b26a4d0ca68df3d28afff207c2d028067a18e4c9543025f5b0228aa691e5088513151a94494e15d1f54210328e0df159b352c30aaa7a844f18a9f4c395dcbb3fb9fcfbed1103e0706fbf9c35fe2666848fa35dc2cf5227ebee89e7d3bcfae2721b25fdec3d3174ea7ce267a55dd61d58201e96bda303cf418edf6e32fb92f5dc1a0b1 +SIG = 9cf13eba3dcc37b8fc70ccb2327436b9f08855e726aa7ed82bd5cb7df45fdf9ec1f96afad193f47572d770444b65b74a37cc034fc514cb3f91b2d8ada5b02006 + +SEED = b18e1d0045995ec3d010c387ccfeb984d783af8fbb0f40fa7db126d889f6dadd +PUB = 77f48b59caeda77751ed138b0ec667ff50f8768c25d48309a8f386a2bad187fb +MESSAGE = 916c7d1d268fc0e77c1bef238432573c39be577bbea0998936add2b50a653171ce18a542b0b7f96c1691a3be6031522894a8634183eda38798a0c5d5d79fbd01dd04a8646d71873b77b221998a81922d8105f892316369d5224c9983372d2313c6b1f4556ea26ba49d46e8b561e0fc76633ac9766e68e21fba7edca93c4c7460376d7f3ac22ff372c18f613f2ae2e856af40 +SIG = 6bd710a368c1249923fc7a1610747403040f0cc30815a00f9ff548a896bbda0b4eb2ca19ebcf917f0f34200a9edbad3901b64ab09cc5ef7b9bcc3c40c0ff7509 + +SEED = 93649c63910b35718e48c590d261c48e4ef8336613f6aa077b462676b3ba8829 +PUB = 06a685898b855212ebc289915d105a4320d620d85771b8c6b15bf10a1be6e9b8 +MESSAGE = 2cd1a951056c9ebae1399b6bd2d82c0ae277856290d06920ac56cac8fb42435101c72aa9c08dd2d12426325562c2f0a49cd821b11b939aafa593b4095c021bcb4827b107b9664d68282888bc4a44af3e3bdc861be6af309044c3daab57b77023dc902d47ebc326f9bdd02dbc02cd540ff81b2ddf7cf679a41193dfe5f8c8ca1aaefc41ef740280d9823e30a354717c8431f5d8 +SIG = 6274f2d4f431d5affefa35e7cf584a599017193da99094ca908b75acb608d1bf981857be93a7dafb0fadb3ff0906f48a5ee950456f782c2d605b14095ba0ff0f + +SEED = 1c15cbeb89362d69476a2aa4a5f3ef2089cf87286349e0dfe0e72d9e3e5a66c7 +PUB = 13a882a1064182582c211847e19b4dac59722c9ffd34826d96f33113400fac7a +MESSAGE = 091c9b9b116ae83d23d01a6295211785d446b6228dd687ddf79bd0d5a4daa8c79d2cbfc37365f1f285e361738123e34e2bcbfc664ce1253a11d9e4a7982e58cf9468e1017ea14d2cc6d0865d40fde8cb560241e96ac1617c791f0ca7c6410cadf328611b18aef333d8350ac497f0a4ae2d03fdf0e23e426d34f4514780d1474e113583541f3c043672057172618cb2059eaaed56 +SIG = 5998b2808adfdeeaebe2c3eac026d3f825f9c7f2af97ca324fbd57aac1bedff78a8ee621d037ee3ad2a712e9a009c58ea3e6f2a828f74b86da275a44a4b1e50b + +SEED = 11241ffdf34ae8ab875475e94c6cc3291f0b8820dc85e20f32fc53b24ae68978 +PUB = 09c045e4bd5137314c0ec1d031faf914910c45a4676f5a3cd8f581bcccb03c97 +MESSAGE = 3b89deccb7023e4b2b7aff2c3951870af413a9b04dd86ac78b7c8fd887492d8dde49d8fda149edd54781ae2b508030d14416a9a38bed2b9aebbbb20250b3c931acd4e32fbeeec5a26501beab7268d144fce8951a101c4b5178166fbb5927b1dfb1e1ce90d1d123068e3f472c888fdb01fdf70e7f8de9b0adb284b7119f55354316f84ed090030f9c2662061ca48447cc0aef964126 +SIG = 72ce9f91be2e66cfc90f952595946ffc90bfce53087d49e5dd7c087f3faa8f18f2356de971e4429d985a99194b4f92ced3ef47cd7114379e0b3267a9f8b1e706 + +SEED = 3bdb162465eaceff98d69c86f70039c517d168aefe6bb101b4f769a86b17c972 +PUB = d76cb7be74328289fd1c64be747cca5bb30295dfaccd0f2e43f51703fd5d3683 +MESSAGE = fbf368feaeba87918b1b8c7b8a26832be6e7fc1cbdb8902519281a0654ec73de0bb07101a9d603f745d4ec2357aee9870cb19a56cb44fbd9c91fc34752612fbd83d6fc1a16bf8a85a215d0148e4af37d298467e5cc486b131352ce092182ce8284159a3812b30bacbff595863811bf9a30a9da494565c3ac1814430018ea0eeed39cdbca27f93140e46949db570bfa2ed4f4073f8833 +SIG = 6f1362a402063791f950984f544928e616a4ef79bbeb6854e9615aab9cdbaec483fb9a04bf22de5d97a15bda2d390483c7f61dbee07bb5141fc173b1aa47650d + +SEED = d5efe51d5cd8e108bd922fc0ea126190a94628ffa53c433a518022792ddc78ef +PUB = 426b01cc61ff5e0e724da1d3b297f5325c18c62f64d5eb48d4a5216a8e9a4073 +MESSAGE = 9d17bcfe2dfc742f411cb53a94f359c001abf096c741f34af48679f281e7ce6bbd9e87709fc0728a563db2b9cf8ea4fbdcc344c1848e653ce970c6ce29de2ccd520300649adcddfc753971f846aac1ba42ae4528952d94980aa7c6cfa2142907647f894ae974a74d59035a73ef56a10b6612624809520190ace661c3a47095e0322efd781d50d1163598f2da32f31bc9c4f913d1b14861 +SIG = 2306f58fcd4cff2222d81b05a475532b8b19dc67e6d78ddb4205a3b7621cc5aef0b393d5d24dd96c88ccbc53a3208da323be4587d5ec067c820f0723aa44e90e + +SEED = 18af89025ebfa76bd557cfb2dff148245214641fd5bda159f73da04b08e87c88 +PUB = 0c584459b9ebcccad587b272160bc60b27f4f772b4321de7723afef577edc7b4 +MESSAGE = e82f46652ab914af535d8fb720b557ac95018d9f2a3fcce85771bb40ab14cb9a986e096f3afe5bee829dfd8b97335c536ac971a21655af16a2f8fdba183a4e18564c21492956537a419abbbbb02a4bbdc01481f5c6e658ecf3c34f011ad846f5edcd4939195df85e41303fb9a88fdfbd704396f7559a327318b952b3e60ce8ddde56378579232faf950c78e7f0b17c3b8dece36b788a8473 +SIG = 26bb0882297c2c08a752d3981145dcde55893a11df77f8aa4c19d0b9ed6e5220ed12e9fac3af13d0f0c71568f4a547d30114a6599a236806c4beee6765284408 + +SEED = 0c93d99815fff8fe22b9e45aa02b3e6445ce1d6bf5a65dce3da107aa1055940e +PUB = 4d27a47b0fc80800d84d244eebb1deb4436d97633a83e67125ad52ea01685057 +MESSAGE = 11e877de58c134eaf4c9f1b53c3dc451d3c055f16b09622725b279768512fe10a7adb0765b689ec21d5b6efaa19f1b9d36254df0a9367f441b26bdb90b28cbc403e5074082fa1fed58e140dac97aeaf483e2c13f3cc560abffaba05b763feedb51e60698151cf56efdf1d37d6ce0564486210f052e937f2ea26f63efa5d247ff188329bb1aa83ce3f4f35a3d7dec14599e5feb7b6d5fe4296a +SIG = 7dc4467abcf6431adb7ccfe868eac8cd8a615a0ff65f6a9e338375b1aae3c49a126c9eba79426d1641c6b97c3e92c194e5ee4431efa2439fd450f2cd018c8700 + +SEED = 989e99945635192c023cc5186fc25bbaef47240775d15a56195d88cd07c3748e +PUB = ca0beafdf731d89301f7723c5bb7e5a1c3ff3eab27c97d711bcd76e42054bee4 +MESSAGE = c48414f5c757d03c523ef3f3b8510771b0ff3b4b97de279625d349ec185a29927a66b9593ba19338c2f5e4131f1ac07ea46d2c1b6e4ab5229280b2e2bb9d140d1ef7af7b1692bf2d097b80f811adcfa95d5cbf9eee92a1641c552b4be4a0d734f0afd470b9d7f4e45778951e21fc534f200a128b96adb8373f10cecec2dac2996a062fb3c294315965a9d5d7b077c4b013c64a38429769d23eab +SIG = aef756bfb8a7266e17d15f3f11ee50ed25be420e95a0742271ebd12294e2cb96ead083b8ff0b829d2edeb14da86e402ef25e6d4a5a7958c184ed10c176cb570b + +SEED = 6bdbbe06d9f4219eea6403a357b25e561992fae0f0f614561dd86d23de415a43 +PUB = ed52dd1cce32d9b485e0940746421d36b9fde6cdf0211545b634044d4b3cb8f1 +MESSAGE = 582ada13d69293e49bbd461032dfea1ca2025b52e013a33a0387fcfc5f7c0b8ec955982607fc901e1b7f636a9d371e1f91fe476bdd44856e275d67efa14238164354c231124c84de8f5b89d5a58ea6744b4d3b3d7906905233cce694a64d696f5a7024fc9033b1ce390899a3b441a48e53c7c9b30ba12e7d61f35f15e658c7cc4407e2f689ea8a55d01bf5dbacb11954754f920f09dbd48409bbb5 +SIG = 950206605b0f417c90843e2c8d8e66c828bb10b99b36eeeee8caf2e0e5484d93fe02bf533405f4bb74a50e5585fa0daef4821f0301d01b46321baa31e1f08d03 + +SEED = d761c8c5a9601b9145b7d051249b004107e452e563100c6c788038c9ee8adad7 +PUB = e6488775d6407efc7b2bca890a7fc62266fc54cdac893343b4f59a196d948898 +MESSAGE = 84ead5eabd2fd4b7c79a9a928ab8ee0a16a5fd667a057f8a254663d56daae156d1a49affb2996137b9d8b340e635732f9d2b4c60218442541e72d2b00e1ee7a73c3f67caa499fa9d070b57d076dcde96b0764723c3c659c7a00c1b78b15ccc2223890b51067fc81e23e9458ab0683ba626a53d0c3793a58a9857bb44b3bd85bb6ce53a85694e7f53cc1bd46d50eda37d81f5381b513d1f38339d291b +SIG = 7ab78b64e6db359a2dc8302e1092ed66fa736b536253a1cd90fdb8c10efd78300225e191963599ba549cc859209df0ff61cd069b03d254e6e7d76c798440f907 + +SEED = c5e0c7a7bb8b7ca07bf0a05ea67eff6deebfe3714ee3e1a227f4dc8e242a2fa0 +PUB = 5135efcd9052bec57a4431caabe82680eec0a33afd59b30203b280ba12be485c +MESSAGE = 3770a6786652c4b78a043edce07f3e204d81997c42afc22331f75a5494a826d7cb69ab4314a473721058a1839981d5b7022d0cd8670377daf3320476d25b9f559561d66ee0a709fe17361e2a52898f5753c4fb43bd0c98b368f512adc09cd927c6622676926d8c2d91a14aca32f226f70036c1c858bcffc2b59f54c1c37bf81eb52ecb3f00da602c94361b52a5afddbfd7e05036e377503050333be512 +SIG = 2e7fdeb3484d0a5e8dce94448979496b0642cabc3733a51f8c3c5c51c19ae319018da91091c2385f2f4e9a59edbca2abd0d085ee40d3f0d42061a5a9832a370c + +SEED = 11bb4748d2547e6196be823c9be7aa18150c204b12ca8d73c1bd46b11a54b475 +PUB = efeb42da28d764966403dd300d9f9451b258ab1c80df06fe5943153f5301cccb +MESSAGE = f4b765b258ba35b427525c7f10a46f0bccd357ec1ad52a5b139417a9d3894c512d89eb88e681b1f30aac4c115ccf36545e83f37834c82e8300cc1eb289af4375968c29c0ffefb40e156c20c0432669ac8dc0a83c13b1e855a84ad0133c40c82c87ee1e7dd4084d741c80de8a7a9f7759e843a562099c4d7df875352039ff4d3824651386c97759ff7dba52064e6d3112e080819aee8ce723a1a2aa464d8a +SIG = 44c58da49d2365d27029d1eebb3bebf7c032d858aa07e0756b1c26a5412d22691176031341ad37d7bb7843289eb39db491584c1b2a1da2e4a2649c2293826606 + +SEED = 7452a00156d794edebff4adb1f7a7eec26217fef67c3d268352b2b5460a7dc25 +PUB = 5f4dc338cfbd384b5f1c14c226701446b52b1e3e2a3cba1a40ee2825080d1de6 +MESSAGE = 8c4ee2867656e33f5269414d77b42d8e4750dba93c418bacca10938cc3b570c6603d52c2344488607b2f934f6d269fcb2ad966219b1ab11472f42c672ce20592490ec5baf6a2d2fc8a3ee35374b1902fdefc7870b1b626fa46b12b6cee241f601a9b3fe4c50812e573e6752ce2c7644e3367a6a6b77758d8e4934b58af23abae8fecac25edd734030ee7cf39907e3eed8186a19a807103a9fc49d38f4c8460 +SIG = a8f9fa24a3dea1022e73f0d88b1c37d06d0f0b20bbff0ecdb4a40c86d7e475617c03570a7419d74ba0f1327096bf19f0d0cf9f51d483112f26922378682f4807 + +SEED = 880ef106733f04e76195eba280b3fadda0f25dcf96a6a99c8ccf842c68afdae5 +PUB = 70cee33d41c728ce7b141931e6e8524567d7601eb79f67fdcd07b9d682c650f0 +MESSAGE = f4f38d077f2b03da821bd36fde673d666e52f4832e1c0dcfeef049328acb7bd71ad2bfc49c123516e196c470df0847b3848a45a2c69bea03e2afa7e58205b63b523814fc8e242f059c69ff7e40f97be8125b70a54fdaf35aeafac79114a7b419e6bb9e70bf07adb559819600dc25e51b4b700d27ca5472a0e7cbbfd14e099faa3a72002da538cbe45d621ef0d5252ba29d83f8b3ec8389c9ceb6c6b2e8d8a20f +SIG = ff6caedd8a468aa07d4c6e7131bbda76182ba958649376e711f44c7bbacba6077bea878ba5949cdeeef05cfd4983b0057d275ea3e18c32659468c30c47ac8f0b + +SEED = a2d88f37ecc2b2c05dd6cb3159962c5f646a9815b2fb37791fc7b606e2913ed5 +PUB = 58dd67d7a15d4ca0341a4c869566cad8c4ee16e583a10b4824173b08290d92d1 +MESSAGE = d1b87e9e886dfbbdc8ca8ab9010ecf9bbaf23f72ab3cbe769db1d43c2a474a81651c464e9fb92734634641c9485a0239b3110771e7f75e05252e4d8f4c0aa1ba08626d7e96317c20acde2ad99b23bdadfd6f17468eb402ec5eefa57b47caf972b3dd21d89f0e2989ff87d51ed2e2d639c1644e698cbe0221b8e179f3cfb04a20cb2470216a6882fb4ff799e11536cf64219f0c075176bc7cf0f6c5b7925fcd6155 +SIG = ccf2400cd673e1effd20161d7b68a5fb87c1e99d3635d78c2da1b509fac33346c069163a6c46c7826a48bbbd03b05e6e2351fa62bf89bf7ccf9a9024bd157d07 + +SEED = 42aafd0ae26df1e7aa0276860d752783af97280439bb23eae46e3f84caac78de +PUB = daa2350adb55dba9df7d7af5101998fe515d311c3cba3eeab9138233190c3b4e +MESSAGE = 72131b80ad599b6f5ff698547d16e7499d71275e4e9b30526a5aac0b0c8b14fa4a540cfb1145fc004418bcd318c1a70e6269a3fb69baed86f363f5b8f97f569c20d4f4990e7bb4d0c39921268d636ed0554bd62acfcacd3b8e030217aafac3044c037e0f94da18c6b9a0932c3c5875d3a93fbdadcf67964eec9ec2be69b48f020f6c9874de5f8a5167b5ee024a2c2efd0cdcd2acd8c1f787814141e30b38b163175b +SIG = 116143650b6c133d617859db2429c2913579790b2197d7b7b1b4962b328721032ceeca58b2d56439e233bb84dc525e284ff8df2bde1db4986fafd21b3d7d6a0a + +SEED = b69c33b11ba67841c3d4e6f9234e35370a28b47662ac560b27c078b66ab1b021 +PUB = 9df68e9acf67379261744db5d1e377892f2b692ed5a38b37073c04de5d226737 +MESSAGE = f9ea126d3ab21961aa2433900a3982b83e0ef86d52d13440afa4817f9b822fb582cc3932bf450d4677c9188181fe7526ad6fe5abc61d0ae759f215013c0b2b41064cb6278ba7e39e2f4c10d6cc9605b3869e169d7da42e88eb857870fe6118bb02bc08c8055f0c189b62f79fb146b4c543aa30cc0cd57f037e9ef7a63711f66e6f2878931702202702614277d513f0850b758549336b30cf40ab8bd460e60e12deed04 +SIG = 24368fee5bd848b4c661a3be4f310cfc436e79ec4a78501b81095fe51614231b6ca1ab1269996ad2e98e299781af8e29804b24fe5679ca3ba650c5c4cc58ce01 + +SEED = 7b63613f6dae01cdcd5e6b37686971cd8d8a99542f6329a12854a9d8ff8105ac +PUB = 72ec43faf34d8730177d1f0743c74c20bf72c2394b8a7d471ffe2a04ab00811c +MESSAGE = 1816488f1fc83e1ed5911637dd42ba2077657dfe1ae422ad0aee59df9dd56a2763c2dd0ef61a12bb825b0dac1eda5fbb691c5ed58f3fb325050b4563a4042099982fffa5d6ed742d95823da8e1787cf746ef63b3fbb0e88a6c0beae4f7318366936b4917f507336068b194680900a7bf4a6fb69a5c387b97e31bc7f9be53c2a89e3651ce1de41b10e921b206ebf32e5621ef8081616dcd7a2059437efad014bb8e2c8221 +SIG = 76f50b2b9c2ad97bfb9499ee41928ac072da5e8bc71d0212550942332b62e70c8bfe1c722542394688decd917aec8f95353e1d72624b70ebed5d17f6c5497702 + +SEED = 3558d3a74395bdcba560e2c45a91960cec6cb3edbcd30e722f7f055210f37b51 +PUB = 534f43eba403a84f25967c152d93a0175ec8293e6f4375319eadf957401fbbd2 +MESSAGE = be75444f9ce6be1d83af622a8c478d510127db56f1de6eb8a5126522b09fdc6ca0862cec0b8b2aafa31c17a2cc477da533d276a1ae4f8e0759d6afa0b17411b5170b52f20547c72f3e88d48cb456fe625b62feb0f81317edf1ec09ece534b9f500d4e1b1bda2db21982aa95094226ee9f5b0a65da83f91121c96b3b4010ae7826c9e80636cba00f70c3c8a279b01b95294cb850f91709f4376662a580b15ac2981afe9f854 +SIG = b365b5561a13a54517cf90d88b35eb0967d6d58414b8c1547e693159e01378563654c50fb42323f09dd78ffe28056ddfa54febf44891e8a741b6a1687d728605 + +SEED = a35b92f244063a19bb5e3ed4d699ed2069607116d2bd08113f0d8373613f35b7 +PUB = 7ec93601864ee4995a4f7abcd3dfc101e9e7f369e63de1ae68a07aa7f075b329 +MESSAGE = 65cd36dae0168d69974f95f09dd9a59db799f911e1a15b85a00893b8c9a3d48a2f58ac126bfaa0a606c05d94701d273abf7d68817f2c71b1c541795c4f6095e26c9dff803f032f75663fd1698edd97ff3a0e72e1b7c9948b08bacb5f7de502b2fea67ca2fef190d60eae92d15158da444a49d2e9d5a573e8e177e8bbf7e6c49f907136e71d2a66cb07636d48768ff417c8beccf4323181fefb3124e434049ea45dd5019e40b4 +SIG = a23dbe3757e478dbc84d3db3a933b0428cedb6b01b86d8d73f3959878dae6f0588f505cd4d39f2ab4677b64805d629652a22529825c3a91d043749fc71f03706 + +SEED = 72d4a564ca15499b5e4e75d8ac0f28217d32114a0c649a7c8eaadd0cc78c520b +PUB = c766bd73837c4faa5215502f1efc90c003f711bbef55170091028a34493408a9 +MESSAGE = 6c7e7b62eb244a45d78436e2970dcd6c0f7db82297a86140ea58dd22c2195adbc956d4c4ec05354b21efe24cfcfe10e17622368848180d2c4680cc215e8ceea6cce222161f1e092239253b9746f7887df2425ab5a880bdba98153be786dc838cbeca016b1d06524bd6bfba809a8bb37adab15d42415f86ec0358365ea87b8150b05441d9d49846871485caae6de359736c27189736d8f1765f3e5c5f6b92168396390bee94cfbd +SIG = 8fc4f179330b642dd86ca9362651b83b006d8375ccef811d3c6706f91594651df2769953723046ccb9bfe66a667e0d11fc3ea2d8226234fdd5164765260f7b05 + +SEED = 2e5aaab298e66c2dc1d77ea7421ff895255f9d900db0450d63f9f79c1a7013cf +PUB = 0381f3f19045719b9e8ceb562f0e965dc07b09f371a963a281c749c2532f654a +MESSAGE = 3df0e54c711e3132d7ae953deb7b66869ee531ee40b63ce693206cdb2f4bda0a2569e913ac3e6532c5d9648efd4627780fb8a31d107e033f054d19ed8b7c49dc407d2e949de25f99307221d35843f6d5eb7de5cdf41b91dbbf34cb6c9c530021014b56abc44ac2300313615608a7b4a235e99c14cef8050887032209488b9eaeaa82c09405fc75bec94dd42d6ff1b599a63ee5742f3364093ac92cabab3035822aa867ae56dcc99d +SIG = 7c7430305b361a9e35b2780c4d4408071b2130931d39830ec8d313aafbc83a65dae19cb747d9d1c4ce3f359cc824ea8c92f66a42b8614e7848b884ac8aa4ae02 + +SEED = b636a02448003543db864b40b5d8d6dd9ad611624c9b0fc6890c51ea5592c790 +PUB = 1ef360495968e56e6d3fe740b1c84c4e4490ed682deb4305afd596efb280223b +MESSAGE = 4aa85aac25034f614ed44f7adcdbeeec25fcc2a9eea32ab6a8699506f7a1cad3bc892e9dce934e75b0a8cd14642b778599286cfd8f50a9e4f2edf9f9d6291a2e2979cf1806b93ed8c9a78fae199b2854a03ec406ab3f720835ee263fbbc91cb4ef0758d775fc784c7d5b251ac8937919a9e67be88c9e44cf2ec7f560269aa0f1113d91b84401db15a3c48c7dacff4939ee01babb982fb95625c6c3ad78749060551bfde8cce4fb8a29 +SIG = d4ba80300d5cb51353c03f28c44fd0a424ffe1e40d78ed7bb1133e8fe4e187505293b20a391da962c6a8ac0acec9c67226af3b6195dabe39b3662294da3e0e09 + +SEED = 5ca0543c71f568a00eedf50a9520f4c15b526e3fb0da816c29ea3d50b2f62a12 +PUB = d4a2933ce19454e331b5280100209a6ce8e569f993c2acab51dbe864c5cb2563 +MESSAGE = 4ef8496978d28c10abd54a26356ee55921ceb350dd4b742c4161fbeba8a1601f8ad0484b21a8cf5a294fac00ec8a6f59e3362e47bfae1e28a2e6d017c5caa75fb0f48482808037ca21476954d778ff1a0586da3ef69d6cef6d2d8df4ae7a85442a1e46c998cf407a6ad4c5463a43c248f3b6937fdbc845b60c6d85e0563cc16ba9675d364f525f669aaac95f428bb58205099f9e4a6dbbd0151fb65babe123e5393ad64026935cb488aa +SIG = 436823eeff3edce5d8587d68e5473ef3d8dc9465b558b6e8e7cd3137eccc80b4c4e806edf13619d8e717e69f48d7061b68de02c8209be1f7ac26ba8edf606d02 + +SEED = 5f87117da9bbb6091c94da6b230b7d8f6de0ed2a076413b92eacdc43abbc6897 +PUB = aa786a146226832aa73c434b0edc2d41d2558f820ab8f87e09e6cda91072b9b6 +MESSAGE = 2297c40a2e8365bae4c5f0630c50b13bdd9ad9770a5d9a9451d00874b023d25ecd468b96571b2f16dcb1b0d3d756c1f044fcddd1c51f27727a0369c9cf25bd6aa59551b5b07cf8f807d92b159198639704740fe6eda0f26dba7e75d4530b2800f03fb6aa677d84df75d68d4fbb64ad21001e3fc87b609b9c251e8ccb12bbca927447e2054e07688eb8a20521a52249e7b943bed60e6a93c01e3eb621f0460c18a690b6f6b66edc6e8743a6 +SIG = 0f19e6ea0c05f38185c01c2d6477995daf5065ba9d80173fa6bb23a774dc88b3aae879d8a62471d2d304cc3dc66278a7abcb0bb0771cd278e11e7b932e9f9b0f + +SEED = b53a644c92ba2dc7108b16833f09ad5917846437225a773d32d79c97733c0a58 +PUB = 515818c69c0e0a1706b04143842f3e9e271448fbaf3a899119c32f42566ffd33 +MESSAGE = 13036daaee45fcfde0c53e06d05aa9c01ea94a67e86c6c538ccb283b368daf7078d3fbab580c76ecf82b4e9660f068dcbb500b80595017c5be3c448fbd8a17d97c5643197890e167b35345bf65e75b82c8d65229f2f60aae2772581bc99c49d416bc3d78746ef830f1af944f4a6715ab4ffb01591bac2857f1a9c9d1700888780006a31607338f7af7bedf6efe0b57299ac915526fe5e1e101298708c6e61b84220afe95b53f895987456152 +SIG = 13d2cbac7976ad27f0bf669ad588efb2c91bab8507d57fb16bfea9caff2b0964e75625c4d808d7bbb78c5b464edffe4949ecfbc8b95ff6fdb1bdca2742068100 + +SEED = d27c9eafcf88151990bb5b2fa8443e709b5fd8d78d233803322dc86d93d93295 +PUB = 08e0eff529776714686196d817fdf71eb5b6e8326516ef489bfe186ac5c5bf6d +MESSAGE = 77c35bda32a5967d8b302fa7a47583ceab89c9a609a667b753155fa6996f8631d0ebedfe0ac364c77e85ba37311f0de57a0dc2c1e9e400d58b424a322e1d5771e0a9fd9502ad0232ce544f07d8c66e7c3147f8607ac6189bb69066f2fad631185f457f467eba33228ecc40e894a77b571698a9bfac841a54eac5219da99c6a9125c469a22fe81f3b951433896f19ce39b373fd7e5c7b650a5ef2365ae7510b0da5e49d7c07073cf166a98387e8 +SIG = c254e371445633137442eefe40ad4a82e69b1ebf48a685a2bc6ffbac126d228487b2e3537c97ef7410342091962e50c0cb85de7b39ceb41ac4078d40f3407106 + +SEED = 70213d3a79c65d6dbba542a3679635003a682af5fa58de6b0d65bfa24184901c +PUB = 4402fb92cc1249dd1ae1690f03b3ec4f1e9bdab0de5bfd289f10296830fd403e +MESSAGE = cd6e1cd9c90f566de043d75d7244ecfdb38e8bde2f9a6cd5a4fdac72b5ede6af62d981918c5e610a38789274fa10e527f85fad209b76ca1c281ad5890f9c96d35de522f1ddccb539b8798a0067acdd45b6e344a5d9a97731f545ffa4b17b875c67b48e9d4c4ba72c98a4505583fdbf1e12f22b5a7a494746cc9b6c1b571906c67fcc883a9c15a3806875b659e5816b4276c3190e25cc1ac3de47bf99c49965388f54f3ef8eb569906c6008e5fbbd +SIG = 5b6ce2774d400ecea8a808f5fd0a797ffc6116752376cd7bfa3b2cca3a84d5593f5c03ad3eec1d89532275c47b7ce2a0e9c59cc4028a8a65e5bb9097ea71c208 + +SEED = 5d540b3b14f0c0175c047eaf026c9070659ef13e9d28e0c5c516a428269b14eb +PUB = 1d2d4d551a57c6fb2b04181049d4039d575cf80c0bc6ec7033067f27309344de +MESSAGE = e4c9e8706898cad4ac68d73c130efa04a54f8ca25919ea6bfaa54c8c720ced854c5e9509102c7b885aeddffbd1b7f2c5922583677ac9eea9a108c7e83e8871aed5a084f5440b0f391ad7ffc6bab4574af1b96770f4370e8e988e85ecb1a8d6034fc3d7f49f7422023b9dab5d0c16beab5f5d37b0a4d7de197ad87cd4ff8ce78eb12e1daf739d8b47ab380abe9093356db5b59717751a49e1948472fdacc259ffffc8c1dbae592607d4ec71cc6a8f6b +SIG = 32527da755312889935dd5ee91b1bb117a5d377dd23ef5b7e15baffae9a54391a3fd234bdce073e098c58d05bf195b4c3cc63972383ba4b51072971aebcb620d + +SEED = ca41769caf1717b4e45c93c121dc82a534fbc6ec0986662c3222d71492bd1176 +PUB = af3f89f6187dbcf9217750c67ef89ed47b039f9eb062ffec9df64ab52b0b45cb +MESSAGE = 9de8476c5813848ab1451537841cc178002181a2182af305b12e5f7c3b1d56b22cf46ae6276d1826ec0a8c9a7d9f68083b7225bbfaefce82b3b64594052a7700f309233a79fffdfccc5c21400c91cc0e418d5141d486b5219901d6dd2447c1f7b7cf5a0879e70e1dd658d0f2ecf31ebeee11a5c74440c63b9d8b45318c3465d7ff03365edd0385edf80d4fded51f0f7533ee4099f19e93bc9d08dadcd13485db239522ffc81e2c051f8796d62e979fcf +SIG = 5cda872f7ed6d7c90218ac10bee8e214f3b34d15d25c39255ec9e6b0177aa3cb7368d11cb8ed6ff5cf0c04281d06bc4272b8bc09c23f6f4cd5a810ddc7b9c103 + +SEED = fedd63ffd4cfbf618894962e121a9025eea318a80a1adf169d6490445d2e02a0 +PUB = 542f2244bdb7d84b87e628a8e6a12f17bf74a9a6d0ea46c595dbfdc680c04b26 +MESSAGE = 2e2ae584641be03dd48f9c618077aeaa18212a4241f0c0194ed23e370d741a3ae11a5fec3b040c16eafa4ac8d18abaa7ce8f286967337189f0495ffdd61995cde31dd8dfc3df5700b57a7a29980e9c823fee85d61451176729e72787c6109b47359b93dfd62e1e5a2d642c057242dae500a94ca1a93bc57be1ade76fe4501c0f6377ed0e9246179aecdd9946b671e8190e1ed23f966e96409b948222d8ea5839de904fc51348073b8f40edbd9b4a4b2275 +SIG = ed59d9e23dec3494b0fbc5d10cd02bab86b3eb35abbf9e4d4a926479f134583a44ce72dc4122aca377a4072b7156462b74e8df46b686698636836ef203179c07 + +SEED = 38f2184eaa553656ee2902706bcec4acb5af25157ca0f6a2d48de85285fa3bc0 +PUB = 7ff03fb4c82e9c15d659df424b3e73ed1d78006f3e0b79eb64d98c13aec6ba37 +MESSAGE = c2df77c9e479f61983b6c7483ef93fb85a103b213923926523065ebff2257e85427e05cdc27582ef6c16be353a3b250372d6370eecb6c8962917eb656f2641690189d172a111051557abc2494e32cab65ed0633affe92408b55c4ed8af65e2c5e7aab887a3cc8d28c52e9e1336d0b7bb3fe2cd843e7fa1680342f8a4aafa02c4ab252f08c3d46d5f00fd01484263ee635284f6db26d6298de5b0dd238da40a8d2a93376da0302783a0e3be23d9e7f990d25b +SIG = 4a6413c2c87f2b3856a8decbce493adeae0c69c94134707fb0f18f3049fd3e3d051abdb9d4bee253c6107c02d57ad7cc9f3101db660afac2b7981938e9564f01 + +SEED = 8bfca48462d2536f74b84f6af59f5d8582ff8f7ec28745d672e72eb72e79d3e9 +PUB = 9d10d275c3d3fe459f7fe2901bce389191cc8483c0f51140d9c62b08fade81bb +MESSAGE = 81ee4cb9c45da691dacd7dd09aff59737267bb55c3ade1ba32c17b7d0d2d0c6079c39d5fd5b29ba5f9c1762097709843eee5612bd20bc8185bf64d5c934184e13624e6f877a2a5dda15c0df62afbb97057cc91cac9a18406a0e0109cc39b2e3f812e227a4062d5ef81c92c22a7dc797c845d71eb6ea9e42ec8417fba90a96d2bb1439418330b4bb2f99c6d63d304a0e506dca9653e5de0dd56e309db1a76a0faabab163774f000088cef3d1b7a6cf661d2e1d9 +SIG = 44d77e439ef6ca5eb940c60ff8732ddc16269ea023bb2613bd447eba7fd69851226c4819ce8d44985a49f3f41ac7af33c47ffe5f89304a3256e445f8d686e307 + +SEED = d7480d4272bcb1557b1bbee04915c126a52ca6d6a8bb5314a0e1a52b59bfc99c +PUB = 99c839d36d8f5b8652618ed7b0fe9ec3d94efff4c453c540631476a5979bbbe0 +MESSAGE = 615cc19f942017365ba8bfa256ceccc85ee289a1c34bb1442acc0716c7fc2caeb76a9de19adec106371e47a30d2e1239ce1f7dca25526d604bdd647659d942bcbac368911349c3b946a97da10a42dbcf3c73416d2e6ba22bd29d9f705672e9e338944cef01ad21f009742e07bcd888ca31e1ee953e8c1b1fd954b7dcf1a0b1d5a069065a66cb721adc020f4efe1abdd16742746939285780d753137ae0140bb410fb6ce33676c27aeec593a88cbc73afd9f40511 +SIG = e04dc8442d352173e931818e290858de85688a4649ea3e3c3ae74edaa54ad01b64622ad8a090b6ad60adfd01881882828d39078bb5b2714fd3ea8397a342fd04 + +SEED = 3c2d3650735b41ef9006bb45e4be2e0aa5cde851aeac421ee9c1b492d87aa18a +PUB = 3e46ddce298844fcafa00a1b47eaf3de70596df1bbee3c809d1be7dd94080e34 +MESSAGE = 1425d8d218da1a10a80b6a9c3c2750efe41657984abd5100f451ba949db01046b7126be8402334ed57528bac05622553a86b726722695a8fb331d8565417c4ff0f251a320ad06dedbb750def35d521c3c4cd571a45ada8450653d5e81fe0beb53aaae787b3eb653c2381ed55aaf2590ee5ed8b6626f1c4b0430a54f39658624e6635fefc98fee8fc3e1cc7ff3dd420de9da11a62fcae0e0cb454fc6f7df03954291d26202f1b188b657b3bae07389449b75e67422f +SIG = 3f2af01ad5377ac39040d41a41e36e7b93fa7235b841791f432ecd7f91a3b21ab7196c883ad5a7db446f6c06672460f3f63ef863d9432be9caeabb79e87e2208 + +SEED = 74965996268cdc4c09220bd31ce07b217a03826ee981fa89f3a2359ced095ef1 +PUB = 4096d027c1c5ee4cbfc04b9d534174029fdb50cf5610d3021ef933b4caf33985 +MESSAGE = 45b2f064615bf774fce97f51c464685d7b3e4fefff9231240a719b3b0621cd4ad83305675cd6eaaebff791000b0b1fa31d82d8181b7fe57c5e00cec56ff9022e9ce8db66356e408e3ee262fe627789e65535ef1a63e8fec933be3dee34d2facdb8928cc456abf2f3e8cab47eff1ca42e8b0e48d2c73e7bcc5de3f1056fc523dfef6b0023f32889ed394eeda032abf6bcaadaa7f3ee74118760ab6d91df528bdc5807972c85fa7cb56e387d7332e779e52d0dd7db0cfb +SIG = 8c6628344317a63aca6f78cfaea965b3aa5522ce914195141c08870a1b8dacf34b79c7abc693cd9e5ebe1a2e86f0332d2048db3cbdef01687962d6df249e3800 + +SEED = 0abf069c08b2691c3a26f79dc8ed05cb71d220ff78f3a5c5780ae9da18e45643 +PUB = 9ef3b5cc016cc82dbdda705766aa448bd61fa1aaf1170efe9149daa9fe64a1ae +MESSAGE = 0d055291b2e861eae19ea0fb2069d8c9eef4f1347f3576d78411ae7c0b1c1caf31fde736dc8accacb662df76b620b62ce90b9f92c83309128621d057cf845805949088e938ddbc3d41c5e5541fec8298687ad2f79acda01aa215d25821436eac9d268716d4cd6050260cb4ef6aada4835e073a845821ff211ae2baadceb6e57f06f88345edbf93bfdf54fb74123b57c0fb4a79608d8db6740889e15733507799f7a1fd3017bcd77b28a2bb6c91ecd154e9c5a5ffa0eb62 +SIG = c7566fb3b4d8def667e040f276d3ed98d36dff460126a75b4cc2100386bb01c642f6d8de7e649be6e0818b08d77ce60f4ee5e7717a50884bdee02034ecf1cd0c + +SEED = f3fd5ec5e230b6dad1ac3d3aebadc7863ff89de2a1317f424d15989a3efb0afd +PUB = f99e5d5eeeaed1205cfb5c2cc4e5e9f6b4e7f64129f860104ca6244eb9feb564 +MESSAGE = 71f28973ed3df05945fa0bdb23e9beca651d3ee6bf9fa45ffdc6061e42fa2e8d76235f0e9e2daa65e52631fc3bead33da055bb492e4758e598a030a33b3c40b34371459b233ccc043cccc3a3cbce549e20e0b2b43305b64aec661aadba6556b17d76e3bbed62c4a4eac4f88603996752d2363c8d4a2789d128f6e959945c68c30146d194ccb6839ec65344601652c18b0074e2bc7668311697d960c7066597924d704d02a0193fafbfdf571ee0dfe414dc2f52896912bc32 +SIG = 44b0124663adb0c73aed49f73403461fcb19111b0ba17aa996566f477e37d524b0e1f107612fc52a7c767b181fbf4d629bddc08f30584dec6124c5d39d423102 + +SEED = 738f1310a4e08f917a0a5c1fbaf4ef72f95ee62fcded50868a3daf98856a448d +PUB = 42272c2c8b08470ee5dd8af8849c01b7508d3a3c65b0330e695c841d5dccb2f5 +MESSAGE = f0e7ef6782d04c6943b19eb66ff6226b736e3b0940c09bb126bfc4c4ca7a5e7016c286b7bfd73aa6a79a96031bc81cb5da68cec71a6a0d39780cbe6a0cd4774d3aa06a881610444a8c9d19102294e5f635187aa6f48d11912c7094b38833028d570cb110db60625bb1bdc37affa25ea3c8f8dbfc2514f4365c62b2989a66d27c80384e74ae5fba8c1c2af9c72c4971e64fa6a1dc2517b31ea57ccb0815a7fe2da0f146caa08431d25d151662d9d26e95229d0c62823664123c +SIG = ce1e3577b6a21016b9dd0b517baa0ccb107bc199b8bbaef68f950c8ed58013c853b4d338eedc675079ab1390462ffefa6a959b043f8b5651c6ca375ce0b4a403 + +SEED = 8841d22aded69c131ef5ee0a10ab0a9b77cb754ede8d257a5372726e2b499c6e +PUB = 715ecca63681bc6e9e31d18848902f4d96feaf43b95d008642903b1763bc9fb8 +MESSAGE = 087ca6be2a950c024b3e7467fe00a7d364555d5dc6770f5ebd260642525bd3c0f965db36d7b229a57421eec64e4d991cdde59123034470553f4eb0be81ad2936c8ca26bcab4e5d79040e29798728601684a468323cf3baae4d948d0a1fd905effe16dc44642088df53f6388bc480edf4aa207d0ed161eda345712b4c00cb05fcf635ec2588785bfb8a27cdc28996a1db3e6787023393c075d83c9038fed7899c55fec307de3249c14bda49e8b895860942c36d640bb893779142 +SIG = bb2bab7003f1311be9b8c883fc4fd528adfd51a9c99db3dca8da0fca958da19a10eb22332667b1a0065d3dbc0d06269a1259b6a890484aa2143a52695f145b0a + +SEED = c02135e7b65aac72f63c32bf5bef5b68c7f3b8ed56208e59e4752070e9d07095 +PUB = dcf600f244037a75203ae11ac316e8dbe9986f0dce23473939334bf5cea48b0d +MESSAGE = 86d9491350d2566e708ed356185d610c73465b2a5c7012919958af2cf76af995230d360de400b7137170dd0835f10fcbec224ee4e42c7d1cebb7f580fea8ed6223163bacdd1923a572cbb6dc26ca8b17ade68c6d2808c4ca1eca28eae9a145f68d4079d8d59d140e958228e7e99520e342dbd7457a9159740f48bdc27b93bdabeba465cbf0c8df5ef2c0f9386eebe656f5d749d5f9147f525266910d7b80396a90be5cc188a9a945f93e753fc99bafa18ee0a6dff79bf8484898ef +SIG = dd5cbae479eb5e229574c21ec3bed911113a57a1916d3313457515d55cc5b6e6ebc52c93f821d13988dbba8df5096d55ff9c39e7f9d561cb58930c96a7a5d60b + +SEED = 154a47eba1b8c38362ea61faeb0c0ad7e61e412a3cba4688af0db2a487208b1c +PUB = 16de2c894a50cbd4ca90419a4ca64942cb14bd335c5d3f4a53e239c280bda725 +MESSAGE = bf607e8b6e14d9c8acd96815af0c035ac73c4104c93786ccc1c9f859395dd781900320ebf356aa991cdc9f503fcee9f83675888a7d592002d2a54a573a96994b3fa865538c617ed8ad1ff62018288a674f449be0aab5222f74c4fd475ed6a8dfb27f45287b22b2b6c3bd15179f267d157d7d8a4159679be85b25c2bb2ba850aaed9ae3ae571be4f75836329cf36f412c1c80f1413b7661eab4a8e11b6024244fc62323ff02e38aceb1737bd474bf1e98015dbc788b027bbe217cf4e7 +SIG = f4b6eb1a8d950e887fd2f30f70a23b41871495bfa5b8a4ad3996cd9bf51eb742e07f4c4d2da4b01ab087367a50e2b65b3cef514e40d837540b8c89966485910f + +SEED = d3028431ce2eef73bd940ab84ca29f13fb26436aa25e1b7bf26cb33f17fdf817 +PUB = 63df203e2860bac4d352e722c1c91fe3776e1cbcae8553a4f19890260bf0e457 +MESSAGE = 086335d61275d168eaac0540477f50d4b15f9e50b9be693921ed54a9941bc40643cda62e1d805d0250a81146bd5fe2d39e81444d21e2b21b031c111306cacbf52717f6fb4cd3416f1215f8dddcedd2f0096b0fcfa0a6cc2cde7a2bab7f1e32790b5361df3671424cc722f231bf71895bcdcb7b22ee074e8fb4a9678504e735366c172f07637b7a93149bb21f38883378a1db273fc23239e35337f9ce566d8ddf3b3133cad7f2ce81edb503ce1d27c5a657160b78dca9aeaea379be9c85 +SIG = ce9729a96c3ed28943b27839c73382ecd572960c1f9e90c5eff9dd499ff48f17d25edd1268effe41ee6a81ce48d84de513df9c41442621b2f5491e346be18c04 + +SEED = ee8985dc27504440a8758d4c53e4225215797a00cd8631d59bd93bc66f373d5e +PUB = cd647bb065693d486589156a9fa261437534dc86f46f72d0a800399a7af010f7 +MESSAGE = f2220485addfebce02a833aca33381d1df917ed609950ed24f85e3b02b2b994b4d939784e332f41064c8b4a2630ab36961742aa1cffdcb08c144eeaedeafd48b5dbe96bf24350e14fd68286bc08eeaef8bc6ad9e195d1484afcd30afa8ced4848126d56c81b43c27a5dbbdec1a50c11062ce21c61d860c25a862fbb75c3bd51c8dc07636668669bbf751eacaccb3b51d2c0d4140316cfce2eb18d2908cecd5a188679bc5f5de290f548e7ebc57d41b589a24ce88ee48d97e8d0c7c769960 +SIG = 5bd60ad5e9bad9932ca9c75f231a76889ae7a8b864b91d1fcba5c5d4bfa1d92838adb974842a0710779b3e3094044909e92c7cf046ce519f4c68e8f19ec03c02 + +SEED = 80dfe2bf7387bad4654eb076f8dae9595163e40127f5df492dad7df04c7221c4 +PUB = d1783ceeb9cf8e4d07764c473fa4061b8274397103f2076d703249d758b8fbd5 +MESSAGE = aa09d784bb09dc999931ebb4c00e424cefeca104818d8eaf0661f09728ad025ef47393210571f17404e9aa6d8cbd5fd88cd7dfb8e2e8a108c05de206f3408234a3b463dbe71a07d05587324524b7326ee79d3348ddbed7871b86fcb488031dc9ea93f6b8d7fda6239348a562444faf1e72d31af35443e9df53e762f3e56b48668f9784b3368ab278a48ef4546a26cfad0d0a5161698f26ee8d34fc2b3d6dfb93b009ac296f6afe487ee335eac9f02cfcae5fcbd1a16ba4e71be1b112562fc2 +SIG = 27279e3cdcb03ef557a5defc2f6c58128a6dc3f8b0385958014e709c1f61b0ae6b403576f0e454d5e4c64c173138ee4bbd5fe7b60d06c5abe23fe99ee3b46a00 + +SEED = da1f868542cd7cce7a5ca3fa3c24081b4d2344b21a157f0264a347132d19659d +PUB = cb3a25a53f272ea813804468d6500e96a1eaf822705b7790a8ac3e98cc4e524b +MESSAGE = c6987ef380d5d0e74196443aaa3a32356cbc02636c5a4b6d62a8114b2111bc1abddd9e44b3672c18b58d4ef591af4562e020049f8e1274688e1f8e5296d2f9252e7fc84cd1d0c58e98f0f160530aa22c871eef652e71974ce91b4a65fc25fd09fa1b6c32086e98ec708d9abcb1d9cc8e1a089ed8db2206ee9570236ad69b3de6821862fd2c70cd83a32a68b0486229553d928de48d03a104e87381964abea76683976d527c84163a12eee0a55986cf1431e9c86cba8182ca94689bacd165fbce +SIG = 75c517ade4f08d7746305743d1a776c3c55eb5eedfdfcb5eb1d5634a1bdaf7a4b8d24187d6c8850e3ced6567a03c4c59389a4cf47114ce5473160f230546e60d + +SEED = f13daec0ef33ddd133c7d244d10fd27ddb23705280ff5f1815f0f656d836fe84 +PUB = 2dc7f1367de672c51e005c74f876f982593996873acba079292734c209c2b111 +MESSAGE = ec02ff1804b2b309af3158b66272a14a3aad83c41a719846f7088ca9792af575c78913c432759f0b9a748bdc5568496e41658cc1cdb8da6c91d07c3ec2f4af504249b996aa00c0071cdfa793f82d0ec5d267262f518fc029b88e20b6201fb9e05abd3f9524c5da2fa8978ff2efd48120cf00822d1bee90df816125d8edc0cfb5de66d16be63896a412a62b031b7118ac13fe2c9faa6b1a3342f9ccf7884166cf489a84de26b5ce5b21856a3af289bc6622c0aab9f2142d393f5d4b236779dbb066 +SIG = db771833f7fdbacdab2b5cc80eed50afdf13783b7fe5e903d5dbb4c2e535316a6eef4c34f004d2b9a4e2700bd6e2acdd564c3c80cc68a303f5fb091cb4340f0a + +SEED = 42dc16c57fb6f128945fa101e05bbf548ef7d97726b692fe404069cc57ccefa0 +PUB = 0a1ba5df523996f954b34ddcfabad3f3dee21a5fa7a4ce322d216bd8ccaf438c +MESSAGE = f2714c23a3a6fc11ad15c980b7350fc84217877661188055ff750d82c49c5fef7bc8e6aac574a1b79a3f26d16969c0f406eeab3e9e12850a55709745e30dffa62a69dfb2b64b3c1bd2bc3586e26d4eea714d2a7b71cf79fb8ffbf2aaad00ca3e4f2b6f503cc1fef2eab3656fb44f8d62a8db8ab58f394693949eea57fafecf005f6ebf1287dba4d2d623c02ea171f567e526add20709ebcab962f83d98ef668ebd01ef20488b3665e3a446fbfb13d34050942c749bb2dffc766367fd452e68e5b0c6 +SIG = c75977e83bcfe9df7292a860ed972555b5c24416fd4b7ee3285388fa5b1447608e4a347813cfe093512a7651e422e9867db7b97c0b0867f0b8c7b7f4f02c310d + +SEED = 90b455c6bb9cec83e137357065339d030525d0ea7f5b923a2d5972c3c12aa37b +PUB = 5cef038c16bfa4b4c923a0fe70cd7f25c8bc837fdf5a7efb9d95f21b96be925a +MESSAGE = c62cfdb9d21eee6be47f30727aaee51f0703789a431d32228533350217a93a18900669c95956f3f2ae90dc745a71e18340d058d16b4c6fe33b64af8dad973fe5dc02e8520705c7a8bb3ccbe1838c6c249337f9b6a4c0e1f8a4e5d103196fa79998923d0422e9d079a72cc2a8f86d659031a607d4cca0b947b3abeeeef64c28da420d05de665a5510fe55f77598ecad7faa0ac284800b53829394c4ae90be66678ff04ab46da265ae06402d8c83cad84d61a051de0260559888e779f74b72a5d71c132f +SIG = c9345eec2c4a0aec732386494a69a3fce8b8a1be366bbed1659f131fe97cc037fb1b7c1b68b0f3023945d20090a0cd2c1553a47faec4d66fd816ce121168f309 + +SEED = dc185c2ba0b378dfe5dda510c32feff535ca2e8a02434b326e0158bc878e8848 +PUB = 33d6cc05a434e419280d5864a1af209a2c676814b70f72f8141ac7e0573ee63e +MESSAGE = e276b11912cca5a84bba650c172aef3a4d5f91ac722913bb891a3ab0424ab07ea709cb8bba3a3d11f82f51c2af0162a82f7219ce27b35a30507d536a930817e40f85a22a5a432b94d192c3c8911777cfdb7fe937a67502770d6d75753d3ae88229e08f1ed23b4328d862ac61863c063ea9848f8ab96a0213d7b936c48fe754836c98487859d199b3d940392716a1d569e6c0cb1ba918932cf88525e256c8abb11aaf0b454655d5db55713cebba287ae202651ac872bfc80feaa7e00d47c0be38e658f7c5 +SIG = f1e44514d2ecbcc8d1a7e84bf584ce731835e9894f88974f098d456b60718f575ef4d8062f2182504250cf83bb2af2a79b1f58a6a97bd98da467132d7bec2f05 + +SEED = 90721c43bc366f24bf4e8c993e138024682f1029dba35abeb0d60c7fa710021c +PUB = 7c63a2f13b7b220a0bb752e3800753b8b6b32669378ce131bb77a9a8d230e9ae +MESSAGE = 651c9617cac958c7edd4a5f3fedfb83dc971abfbb69a31e898cca8472ef068034a6d2376ee0e72d0a9bfee275796c3795adac8ebe1d12b66ec268f6b75fa3941154f99e223faf2cbab5b92e2b3ba7b79be7700ef9dba69253cce5356b0c4e74703cfcafdb5546850b46232675c90c02d5e426d33d60cebf0c7930182379dbb007f536163c8ddbbd3157bb2da62340133f00ae2682ec6baa6416b5a01521cc10e04695295f2e5b94c05f00383ffe954830797f6df823172532f98165fe314ab325929af8385 +SIG = d2064a6d6c99c6c3f152d2d435f24e34b5459b082ef11e944a77ff54ddf9862737ecb2ac8d54207d36c51ad41f36490a111ba80e126bfecb09def6accbdf880e + +SEED = 9cec246758e412e7378b4579eafe9fac5a25d5405f9270b5d7e543414ec3d5da +PUB = 975a9e6a152caebb2f9dd0deb76dd922b6dc77055dda03fbae9e7c685d073aa1 +MESSAGE = 17ec9bd47add6ccfbd787af0d9013e9cc979aaf850e09426d3b28edfd71296eb31ff8b21c5fe7be050f536324c3ec48850e0b508a36bb4cb7e754b327183a1b394d88a7941d1ce8dac62a5d8291874d78485e51f29ed05865a206e52ecb12c5d107d4ff96f25d3c5d181d2c4ba6463600db1cca32857fcf597cbdfb2fda2708a8aba281b43c3d28c4a4e7983361509f61a1074e6f0ad6101c7b567ee4078e9839c47f46531b729ff0efeef7c9d1a8d833d9c0f42812a34187c3a778c165c09d6459c9c7ceaa2 +SIG = 9bad1e3b1279ef658f4d071644c63ae2b7a780357e9dc426f1650ec0634dfc520f8eda9dc8f10aa7324c5942d2347ff8802bd90e95fcec313352cdae64f32a04 + +SEED = d1403f63202e080525843bde255eeb6b6783c1caae9d6ed00ba60805bed1941f +PUB = 238aea3ad6d6f27783e70516bbfcca4770366b50ed0fe6a4e966b53af121a721 +MESSAGE = c4f17d442fba4ca0df8dc1d0628d7d7f36b60b5758d7c13b80b8f97a62124d96a23b279565495a8accab5997115b13a4ba220a73957eb7930520acbbfb6f54cf68726b6450c6ffa9470b055ea262914e2bc612633f1ac3d0618a23dff188a733d76bcbcc460f52ab61e19938f9c8caaa792c208d1f6c754728905fda51d881a347a53da744d3baadc0a76c474c558680269095f9084a74471d5c09ffc29141b5bfaf4954dfacbca663d037b17ebf9559882233e5ca5a8bf75cca4fc9c5a4109f32e145f3853b17 +SIG = 8e60e73c063816795e29f5d64ece1159f1b5d5021a6f8f655e261a4d0026f5b94ff2923250499d995298480512e4126276aa4a226d015a95827b3ce692e23302 + +SEED = bdf6bdc31ab0b5313784483abeca6ea5e9cdc68f81b21f350d09c3907bb9b6a1 +PUB = 03627712b755e5069fb9ab8f9e899724029a7f268af9398821eeec9360c9285b +MESSAGE = 90a66aafa5642a98e79f0d88147080167b11e4466518f195cddd8940d12ee4918d31a6d4cb77d0bf5af29983bbe5085610a79daf0c75a78ccbcffbbdab2189c394ae24e265bd8c55fd3f4098e1b175577549518e7a4dcf7452086dd1278dd58ea4c0aa690e917951ef39fcff60cbfa1e90910bab5374928d4722f702bf5ad6028ffda6541fa5ba1a3779ec78b0a95fe3850c748b6c8f42f330ec79541a52a1cf57db72df4f92ce7f748aeef1af33bc5ae0a82c89dff216f23aec168a7dbb510aa632daabcc971b3f +SIG = 38fac603ed246f833f1c0fd4585698b0a71305eff0d14a0049b3cef073bd036dd451b3dabadaaeaea2aeaf83d395746f4e86866ada971cbe482edb0419332f0e + +SEED = 57b3b14ace1cd0cd603e6328bd219ee7d9d094487fa668f28aeec02b43c909a7 +PUB = 24e6b6395f97ea0e237186d469b71923d2113adf403beeeb4a2d27909aaf3eda +MESSAGE = b2e0dedd802eed996dbd5836bf8688b0d1201bf5442ff9bbd351aeefe1a0c21fea2b5c9fe5edee47e921099b05aedaa80367c1ce08821d783a5b64cf059c0f4335083986a5a6ecff8c84fd40e0ba5dd5e5d2f01112a84ce5cf8e0db78beb182d9139c0b0f3e0060a3fa73869e96423f170df9af1cb9c35566d87dff542223f6d439bdb54729d366aff637b0f36a5d14b15d612bd03076cc4d04c1f25b3ba84e0d1fe474e5718d1a17d5a488465662ee4c3f664b4c9274b649d78cea4e85243f3713239048a908ce3e1 +SIG = fc79fdc6d090887a61e43c6b9187b657d2e4d9cbafd6e7caeb7ebdea842825b78fb949d2c49a0cf38b6c73296d82c8ddeb1fe2d40aaddd7964da68acf8c66f0e + +SEED = 018a2c3deea50ab506751f9c2adaadfd9e2192121609931684eb265e193e7f89 +PUB = af410bdddefc644ef12c9899ff71b9e1d0dfa3d69d8c2cd676c1916b34591cfd +MESSAGE = cf7813efac12ad1c7c7322ccbe54aa0e9a8ba4fd4345b06e4ce7a35c8b1cd5e3f7f0688533849ba2cf4c75b6f20926a1194a72df0e1b1b34456a2133112d006722fe811d5e40c4121159ded88990c0ac2bfd34f35af4f07cc402e9a381a675d03fec7ec438c4ad9d929aec8f242def023c993c9e8ba18c7428e88fde68a4711e506d7969f63c8e0bc83ff0de4e1336106c05e09d5922400e8a81bf54885667899785882b70f20dd8fb1e75f5855b765a256da4341bf23ea0ffa18aadda381816946001045669c8d04df0 +SIG = 7a44e6a31932dee6dc2d8394e29a6551d13e6c6ffdfa218fa5b998668d8439db5e05379fbfa0da5b563ed966435ae2c54e3ad16e1a9fca1f5a157a080704ab03 + +SEED = bea445e9b6d3f21235912cd6c42ec0577297ca20a10357880c2b846dd8e2cc77 +PUB = 024174966221699ea4b0a37e517ff9b16598ae4d4e83bfa3ca50bc616841f595 +MESSAGE = 4743c7c099ab815927b3674d0054b6de59af2811abc2cf7fde08f62929185adc238fadd5e75ae3ba0036ff565a79405b424f6552331e2789d9709ac1ecbd839aa1e91c854817597958cc4bd91d07377507c2c8d3c006cfeb6c0a6c5a50eee115e21153dd198ea0a3aff62b7075d5a461788783f050e659c572963d7a59e5afaa2b9c501f43c6ac08ab4797c4566d22b93cdf65a99a2a1d638e79f72b5f4631fe5e9e5f968f6db7a1880df51d8febc14942672f8ea6fc3a72814a44d66d148420a69000f68c330de5b80fc6 +SIG = 6964b9c5903e74e99328acef036558eecd3369150a52e2cbad4bbb97d461b3dfc6b3e8455813a4f4bdca46302e02e683ecea1820171c538e54c3de6c954aa407 + +SEED = 6447540ed7be0a11c2a8de793d83c6e244983db18d78ec9d75f1729c92e0fdf1 +PUB = 391212c8edc4d334a5bec860ef0f5ebb5ec44e8bb51c0f6741998959b2b379fc +MESSAGE = a4381c7638c48799e9b5c43f67fc3aa3cbb5ec4234f37e70ccccced1627a57683d1e53f4e0883d8b462bf83f1308630368c89b491533ddb8c9a5b9e8155002fdd581a9a5be0e430b9086a6beac4720210f87b14e862d97e5cc69286786a7586723f231ef0e3e1b932dbba3a18a0cb221cb07f80e6a8e1300056c13e702b23bfb3250ec7cc864d5c7ec5786240709c56024ea6be5f7b15a4fa5555e39a744a1dc557df5b948db220b3d5745746691dacb4421641cdcc12e7ec0450293f19ec57b09cff135847aabe446a61332 +SIG = 3ab5f88e2f7276b5b6583dffba5639993a905dbf9b88ceeaaaae3335800e4a5f10f83da6d6225a8dbe99ae80075009dd508786b3975113db478e14ba101bee0f + +SEED = 0c587a811add88b994458c3c808ac4e3a83afab26d4cff5c961b9df0b5c83344 +PUB = 06783b0cdcc5028c5638bd748f0bc76f7e94d1aa2015ca948738a3500460aca0 +MESSAGE = f56dc6b76076325b2126ed11d1f09decef9d15c31d0e90cdb1a27e089cc56329f6ec3f665eb6739ec5678b3f37ee1fb37deb9e240092b7a88fd25525acd55e294eb1046f9b1b69a847eb9ceb7b1593b9f6978ef618c15de4e059ecc3bfda3297a19c2df202adf72155cf21eabd03948df15198e8a68b0884f93ad5e36eb0983cca30e45a8b4b5fb8136fdea8a3341dd7877540a557debf7530cc33aeeef6271c3f0af6d09787e815f2f1dd25ce4d2fd09ffa9f53081b469c500da4d44180c04eb1869329cbf2d823187e831c24 +SIG = 33b4f4274f20008a721d1e8d054a2b4e95327e38bb07b33c4bee7e1ce020a442fb2627eda3b7ac93cd3ab0b12b99935a1a9233111604da4acffb5315b907120b + +SEED = 66cf401a2142fcf4a8018046cf4140bca18d76ef6266e7a024757df172a5d653 +PUB = 67d48dfd23743cc2ca40e4dfd6b8cc5d84be82dd2b1120cc476e6af6f25ecc98 +MESSAGE = daa8efb3fd41f12fbc55bd60464157a26d718632d882aedb6bf98e47dd2337879e0b46452e062e6dfbff3e7bca7289e4ef6b3f41d4b03bdc2c842afe97f3029883ed45f6054dde9690649abb2b8dc28f5fe8cecf80fc1ea411bfc40bbf4fd20b218cf47ea8ee118d4d5aefa5c1bfa08a8fb1b30d6de0977cd15e50292c501f2e71ce2740ff828b8432da5a594bab5223760b64792ed3a69dd75e2829234943656513df1a17a2a067a9a8eaa64e19569f46939d34b99271ae50a47d7dbca3620c81255b0e1fd1f3cec851f1b11b35 +SIG = d6b0e80e60bc1b29ab8f74808fc460847795ccb887bac0ecaa8e135297a85097712b24b0a1fbaf7a67c5d530a47d0643fc8702c059d215fb112dbe475e5bca0d + +SEED = 5dbf885aa598e895571f5f65090b72323e9d70b0f58110687afbbc383afedcac +PUB = fa17eba76e3bc3ea6dab3a5b120dc5ecb9ae6f00138f7d36dda9268bc4722174 +MESSAGE = 1e0b6cf15ce03337179c02d65408df5be9200c3782b6004af94ea4decb257999d6fdff301d11d00c98c372fac0d026cb56dfefe3def7eb99ac68d6968e17124d8446f53e8d2d3dd890d37a23c7e0b83a484b3c93bddf6c118e0281959d27bd87d37e843d5785f4a40771398494e6c4322fbb675c1d479321032148f7fe52564ddf7ae7ac269d0cd2e552fec589aeae0fb93fe3eeaef0856096cf4f6b3497e7235cc8494d810a0b46c5eac87f187e505bb7764f8045c9541983f7b025698009a23d9df0bd1a473cbee4cf5e9488ecbc +SIG = e1429dab2e42cd035b7fc602efd6baf94706f16eaf2f8b5fed329239e875605fb172f5dd9ae2bc2eb42eb474567e292f5206e82e694bca0d6d433b867634cb0d + +SEED = 84b3aedd4797a565c351de7dfa0700b9ff7c4d7291c8808d8a8ae505cdd22590 +PUB = d7ad72caa7c22209ec4678d11d5590a6cb28a07117fe5aef57b50751583201a5 +MESSAGE = 532567ffa53b5c0fcd29c39499d2e78ecd20e63123499240e775088b394dc65c8baaa0fe8f6aa7e70181f9e10add8b4a8beb0b2ec38a43309f100cd4be91c6f48e79dc0aee93a15c9403773b354a8d42ed48d8f276230fa6de5ada501ee0a653b4458f0ecf6d5b3c33e2141c662f6ea055f741e54586917d2e0c4eb2b56621f9665fef3246f0bd800b533e3bc615c4021f8d0e2ad233a11e7736c493acc31faee76a097dc40db9efc22446eacf1cc18f51fd10236a2f942d0a53c3ce209108b5938c0a9e536b89ef0ad6b405a10f22c3 +SIG = 9220f0edaaaee1b876350dbe9266061767b86296c351d4cac99d07cd612c6efb24f8f9b0b975f95c42c5b6afedc892f87efedd39d5160294c27658bdcf42850b + +SEED = 6950bfcf480b98ea18a2d5ae5ba6e7668f4c283ff2711357740ffe32cf25819a +PUB = 8e4c6f233f7b86321c9d6799bac28aafcd2503d7aa0a7bded8722727fbbcaeb8 +MESSAGE = a401b922aba57ee0c6ac1c8f1b48296a8562eef137526893886a08306e2203667788618b939864467a31f16edce152a42c25546b640ea8bed189a4f89886a37f106911eae1f50081bf795e70c6504437d2a80cb839479ecbb87c129bcc5fe31d716ef978c206d7f08a793466594f4d75e215bb6374596f8e7d00eea724780943e89bd3863c951bbd24efee23c97c2c797c7fafbf8f2c8b43f37a5f881129a09573fa7a034a285e80dc4ba4bc9564a4dcedeb33167e0b30c5a00b9a109a2231cfa0012b29b2b3450b892eccef0808e503f8 +SIG = 94de5df7a25ecd70205d40bc9499fc7cd7136568060a419a93be6e318664bb6dfce60e2d4e633f7ec148fe4f834ed277c1fec4c4e2a86f44c4589c817888db00 + +SEED = 61b260f5b848b271ef48e5a56d297432d89f2ab85bd538fa668870d0560220e5 +PUB = 6086fe8735f399f1af2e395e0fdfb5629ebcb04b6ed4a54a9e47052c6e8191d4 +MESSAGE = 2826295d79945f675476bc4d45ef800d80b1f0398e4be60e3de4571ed108df989f032de6c2345d9948d677927ea0b8cf1a5ca36fd5f23c25dc0d2ab5bd565a54af46fd97d338d770e3a7b47efb54c07a1664707771eb4e37d9d70ba779251dcdcd3bf6d1248adec53f787259c4d594d5fd4ced8e3db7621d4965d48298178124931a3d0cd269b2d53b7cd261b96d370c5d9693c8ad133ed58945ee3540e10625d924aeba9bdafc656100aab276fa996b1db477bf85ea559081d5b4c7307dc1595654aca82f7b6d2ddaf7357c15a4d7d8b908 +SIG = 9828fec8ff5cf85a98f450770b5bdb4b80daca44379d8f53c91c348e22df64ac48f2b6e2a7b3b642bc8193a194316229e69447ed241cd423d83b6fe7b2d44b00 + +SEED = 936dc1cef6a310747f350088055a39aa762d9a4b52c8c8e4c682794380c2725c +PUB = 03b31800412df4d56f1532c05828c0b72528a67a781bef4c06c1fb6ff2ce324b +MESSAGE = eb58fe86c4ef349c29ae6fb04f10850e38c6823dbe64a09a5bf1e0ce600d394efa6fb96ed6a8f2c9d4bec05e6a5ebd5a1bf4d0c51db934e57b79e5c6a879d975197dbb10475f65c7f8a8c6a77a420384b5062a2740f1401740ee0f5e043aad7a2a2b4260c5d907f705edaf65b0e375dfc7b00bd660db6147f2ebe870a0ee18dc2ba3c92b0b76fae2b90932cdb6c149e46f3feecf4c26f0441f3a9e006678aecff8ccaecaeda73a18a68ac988b62e83a9bb5188aede38df77a9a164abbdd9d58e52a6caf7222389f198e85fbf966236dcdbd4c1 +SIG = 3f994b8ef528f6421c6a6a22e977ade5cee887263de38b719acd12d469bfd8c3f68e7ac07d2fae80a2092778df0b463537ad3a0551997a3d5b51f832d9c8230b + +SEED = f89eed09dec551361fa46f375973d4fbfa5c5c12f1b5e5abf45cfa05ff31a340 +PUB = 3e0efdca3919fa10d4a849cef1de428851bd08efd248594fd89cdeb9deee43b0 +MESSAGE = 4cf9773da05fd322fc147be900ef5cf256c88afdad4b08c230dfc8981fb69f476f7d45ef7c9006bc10032ba53436ac22843e0d76289cf68f9818fa64031d4b40955059aa69110915889f5e22732a1343912581ab3b11a3bae7a471359508596575f888160beef966e5708f0e3147eacfcec1caa3ef240c5e0a14c186546c8eeb64658350b1affc0cfd2ac213af670afca7bbc9dddd28a465b586e69c388cd73478d68efb322bdf86d9213011e711b2b95fefa7bb9b5939761706aa7121024906420bddf1d8800a4338d938fa137cf27e9ffc51c6 +SIG = 897e6f2797c3f326d2cdb1d2673d360631f063304580ff5b4eb43d39ad6851834c9cf891d9f0905bf8de075f7635dfca601adc0f14e7b2c76f7571bfa468ed0c + +SEED = 400796ef60c5cf4084dee1801c4a1975e482e70aef961cd42e2fd5a3fa1a0fbe +PUB = f47da38128f2d012cc5797571d479c83e7d8a3409802f9a7d976c27067cbbe43 +MESSAGE = c473325e785b27df4471eefb9ebebd6461d570800181100ff36caf3c38f67c1921b157ec8e6126f955aebd90ea3fe5385f8042cd704b27cc1d6978c0e2a296695f5ef97b7c2e16ae4ff4d063c688d7f46e964e1f0a00503f357345977683d6e4c3423d56bdb6ce864b6987e085e83e70c7c1a14e0e413f592a72a71e017d505b64c24f1a1a6b813e064e6e0cf8bd4571d0ff2f267a6a13e0cd430463b6ca3b88f0cd40b0fb83d5bedf6f7d47e170e87d0a750093693eda232a6daf98125727b9588ecb894ae373bae3a445a106306469a4c2cd77ff +SIG = 84d3aa3f361844396754d80d9fa05b8b2fa4abf3a0f36b639bee9cfb5c8530a3a9cc34677f92a913c41e800f2e8041f7666d07ed85f16a57d817b1241fc5ee04 + +SEED = 6703a6232c5e2e65e0ab3b92e2aaf9f5fbd33fb46988047d6f4d0ff5387fa029 +PUB = 047cffca8b7b11ac6eacc0eaa0c5b73c75b9c637956973af9d97b2dd5b605d6f +MESSAGE = a26b30a769197932a3a62854968d760151612366778dc994576a2e0e0355496b46200e506948a0d102b6651b2e7334ca6c6eaef8bca44b425970a0b37d6bde0da9d3c1b9f51cbb25bc335cd6fa928a74f2c0dc2c6e99d37a12863a474d4df43aad35415ffcaa24d8c29f914572ab2abec3892db49e679c5ea220c2f519a7d033ac1a2c5a467869e30eda3d2635ca863431473f958d552bdc5582352c290d0ce4fa9cfd0ad42799c227ec90b7c9e5db9f5a7b6d569212eed94d323326805f2b3a0010d6c11eb4107c8283037652f50dc067b6dc81f4db +SIG = cae96879e5b603be866609d4a053bfa12a51378e99b2a2812e4789267d8f32f473243f8af74b9be73f47dea50f0d165ebf49458b73e53d88580c191a182d1904 + +SEED = e0e72f8f178633626733bcbda2ad2a50e653890f15359b6c22fc7345ad333109 +PUB = d13cee540d84b5667d516fe7ec7239bf8da91546ee791f84edd8ffcf3a083e76 +MESSAGE = 791fd613c1095292c8a4a2c86b47ae026155b8465b607dbb416477ef79a297c9d7758ce34af9dcbf1c68474f30909fbe74b7ba429632f2403aad832b486b72c23054ad42f7653a9ddb456cc791f348886a7ae5dcec7c0ba815f7a93a10fe331e903b970f7b5028be49d14bc5620d63792672b98b9488c67ae16646693e112047f0ac8921ff561c92dd0596d32df0a6e507ac1b07de516c98428d570a37db9bcd7c7e61c6948ab3fe91250dd1d5bd671275df9a972f22c2ba36804747aec1ea2416c1f41ab87befde31629b2d43317ce41cda03626286c0 +SIG = 14552171b95245ac0f0e5a6e7a2f541721068db650c6dada04c28cab7c49195f6436712144cb31913c562e30c39d8a8549fb64ffea81c7445143b5f23286da05 + +SEED = 544dafd9960d829756c6d4b3eadd44375fe78051876bf978a381b0decaaa8096 +PUB = ae4f6425c1b67ccb77f9aacfea28eaef769c8cacee035205cdcd787e8d07629d +MESSAGE = 447fe7344cad1fae09d6a7d05f09d503c1b3d3d5dfa584810c35bc41e4955693706154e2d751b2f1b525e1a14547ba7f8b232088a6fc922702d93a11cd82949c27bed645dc351fb4c1242cf41d01575412e792aed214531d94fd66e03dd32e972fd77f6947a353e1ae5e00f5a6ca77992472f096b6e7475fe534e913a77bcb0d681fdfb3a7a0dcb56d274df4aa109d4a8a37794a9276f50006696ff12ca4d0254039df0fb3f72a960da05c9872f2e33ee81d1cf7a6f48bbce0aa18c7c0f06ba55e67689e0af587b500eab79cc7f9640bca104b7fbf31f08e +SIG = a2ae117c8de4ca6d6fe75e466023bd550c26fedd3e74ca13adb625f272e175f14d5df550ace7d82288efefabf96311a123bee23889ad3711bff2b8087946bf0e + +SEED = bfbcd867027a199978d53e359d70318fc78c7cc7bb5c7996ba797c8554f3f0f0 +PUB = 7c5ae3bab9201199dfbe74b7d1ec157125bdbaa4520f501da3f248579dc6c22d +MESSAGE = 117fae13e78777b6219f020214c1b87c57046d1c09ce82ee2b5629898d9b0de74a15cfe99f80548ba913d7036c56285a4cba493b52d2cb70d6365ace3da12b1f34a2778af36ef52ab82ede04cacaf2793f5f89831e3b205a9ee4c1d6fbdab4ba4d9fae65dd79a5fe76b4b39a3092cc7148d211e85ee82ab463d34dcee9061d9c21ded2051bbd50b413f0e21a0e48d1ffa8dcae240b3495be25d93151b57aa271ab99aa708ca28080cab4804fcefa929f5f1ef3f4c6c0fbfb40bef7ea1b509b36ba1260323512379d7bc3fdbb5d3faac9b00e21f12ea1ca2e29 +SIG = e48615b65633e61993b0aaa1fafb74b9629c384fd592bd735fa1f62c5cad11291fcd8c2e91a50bfe0b03b43502fff3a5c382b9c2821907efc34da5ba054af00e + +SEED = df2df8a9d66d5638cdee09324e7b10f8ed29ab91387e3147b7dc03f7cd800508 +PUB = 5c042e157fb7fb12d4d4fef2847141ecfb57c1253e14eaf3004d6513f52fe625 +MESSAGE = 21576615c9346a63dccf0c50ecbd7c6d72ad452cfed43ea73202cc7a98576056b9664b54622905a1e7221720730ac685d3bd3977ec3959d446bfa941e725b6fe16afe5432c4b4bdee7aa0fd8030948ed6fcba7c0bdb40c2e517da97456e74e1f93d5ed676de0f4a8b0aea449404bd15b6da79dc1b813965fe5572410d76f5b5eac663050570311dc9842b6fbf8806aec03151715cacf7f21802e8bf5e98a89c0d7d0d098b73c6efc09962e36b4e030c1a64b5d349f5f2042c74428671e4a2c7fea0caee2422d85c4fcddfed32213859a69955d4e3ebb7e1b2022 +SIG = 9a1074531ed43d07bffc7f2b6c13b8838fc75cba02c7d1ec7ba38bca3cef20dc9badf3a3064a2c93b1842441420b6a8d421a960d70dfb7c70eec295f21f83f0a + +SEED = e8ee065f9907f1efa2daecb23a0425f353094da02bc2c931f0a587efc0d13de1 +PUB = c72651b7fb7ac0337a172977496fd7f2a72aea889385835e563c6b6053a32dc1 +MESSAGE = a2f0c1373473a305d8f1d99138b06b9a9694ffaa8a88222de9f729bee1305175dfb17001cc77f67b6d40c90c1a28fb226c11286db4a13e45e69211242bcdd01cb6e2c454e76c0cab881b4d2d9d3ab100a5d61d1725d866e4fdb66d93d77f5b308693b9b5a333e57fa25d1e5d2e38df6e4e9ec84159bbee1ffea926836a0101c91483bd5bc88a6f1cc4d4e7f008ad08453a0123429dd335781c7cbf8d685a8999ed1177607004a13c4cb5ea4908c542607d3f2cd6690cf1f2a7455bbd38f538f07a103964317efbcee37eb46931c027cf153ef86e43d78281ebd710 +SIG = a510dff42d4559a19a7bf0fe0bea53d3e1f22dfa6be55039895e12a5d07da5f2e37713ccb2eb216011628f6983f871fee286e66fff4be7582c961a1ed7568404 + +SEED = c72e67d8c3fec004ff618718a9099eb8ad7b06ff3b8c542a7e8b9847313475e1 +PUB = 4eb002d3cceb188c6658fec51cb479a65264ac555c75cdc2249cf1ce3defc16d +MESSAGE = a8f34135c0132ec95b64b0cbf51d66900143370406791fbb55f2b8ca953cc74a46e08b002fa2da21b951b8871f7a29bc6d38790afc66a329c397d9f9250bae0e30ae3426e08d8ead0179a3b313c908839192f289a3f3b6e960b4c5cebef0a09daa9c7a15c19d4ebc6fc2ac3cd02232e832b234edd7965d687bfeb758f70fa7963841b7859bb97c971bd557bc8769524ac4c6eeb3579793334b522d176bc62f86b4d5c0d4017036d2b6bd4e4384416ef8263139691a8606170d73c93d6417dcc1a08a537c9ed4400471a46f52907b46b10a8b6889dbb4647a8bbc7149 +SIG = 2d7bab8ebda7fca5bb3c25f51dc51b73e6ff6a3bb1b52acc7811a7d2595cd6fdaf730494418e2f57efdc5617b066fd7b6207680d94fb8c43d3d4740b41cb6901 + +SEED = 696450b557ec3c94cf1af1326475634aa81def3814ff30a02ba7f2044b59c0fe +PUB = 8584773c566b0eed3f43281705b575a434e47d6cf6b251b89803fef53534cb29 +MESSAGE = cc257829f30a5f90dfdbc247d42e388738b76c41ef8a82a5e0225ddf1e386d77080b3b9df86c54b85cdf2c32f367aba0c3b6bf888a5a6903529b6aeb4d5407a10180149114130228fc4356ccf366b77be89796a9e71a0c693f31e584a4f143097ba370363b67b2f2e2fd8d6fe8b4e8dbf0d7dcc1a8360041158aa2aff7e2a325b8e518f193a28bae05e3d52b26621af402026d7f250e86dcee301a58b631eadf4527e958f02a61587f0bb516cefac009fe51052fff53336dbd94e7266d3b43caba8a1b38e5d871c2a24a4c412fff3f7a9a52a8ab23bac9791b2b5a669a +SIG = ce8b0a5779f4f5f401e84d65927a0c28df829e95d09bfa97111b8700078ff894cf7277e34a716144d55306fc9e2f64cd287583cc8003be0e8faf26af7640140e + +SEED = a8dd35f054fb6ff6f0ab094a0d3d1c262832181df35ccd5192545ebd6a9cf529 +PUB = ca412338d3814b886d964b71925e1aabb3ffd07834dbe7dc512568882b53e4a3 +MESSAGE = 55a7ad9132d63ac161e7adb132b9189fdd84c361c1e4f5419a6df73df4d7aeb29a8dc4bf01490d4f484e2d12077517f5fc7ad0bdeda20a6cb0227942290b08c3fe33ab9b2135bc38a6579a54bd982f7d1417ce867117aea918dbd3dd476e7eb5b5d3c3e48a864a2f942a31501aa2b29b53b80513c95d6a411844f0dedf16a29ac267d331e53bdc2539bfcf32dc9b5d640f1231e2cafb0ae94bb5189426863364262efb47b5b5ccdbbc93324216a799b6f50d3704f15ed59af6cc7d910cf062d1be632dca5df213d487d8564f2b2bd7d818bba27c364013d92d7f72625462 +SIG = fa709fbc8382af83d11812618dfaca452eab83e4c53fe9e5858467d07b6767e17975c1e06393d6dde15a34d9473d1cf4d6d8c2d57394520080fac4e43448be07 + +SEED = ae1d2c6b171be24c2e413d364dcda97fa476aaf9123d3366b0be03a142fe6e7d +PUB = d437f57542c681dd543487408ec7a44bd42a5fd545ce2f4c8297d67bb0b3aa7b +MESSAGE = 9e6c2fc76e30f17cd8b498845da44f22d55bec150c6130b411c6339d14b39969ab1033be687569a991a06f70b2a8a6931a777b0e4be6723cd75e5aa7532813ef50b3d37271640fa2fb287c0355257641ea935c851c0b6ac68be72c88dfc5856fb53543fb377b0dbf64808afcc4274aa456855ad28f61267a419bc72166b9ca73cd3bb79bf7dd259baa75911440974b68e8ba95a78cbbe1cb6ad807a33a1cce2f406ff7bcbd058b44a311b38ab4d4e61416c4a74d883d6a6a794abd9cf1c039028bf1b20e3d4990aae86f32bf06cd8349a7a884cce0165e36a0640e987b9d51 +SIG = 909008f3fcfff43988aee1314b15b1822caaa8dab120bd452af494e08335b44a94c313c4b145eadd5166eaac034e29b7e6ac7941d5961fc49d260e1c4820b00e + +SEED = 0265a7944baccfebf417b87ae1e6df2ff2a544ffb58225a08e092be03f026097 +PUB = 63d327615ea0139be0740b618aff1acfa818d4b0c2cfeaf0da93cdd5245fb5a9 +MESSAGE = 874ed712a2c41c26a2d9527c55233fde0a4ffb86af8e8a1dd0a820502c5a26932bf87ee0de72a8874ef2eebf83384d443f7a5f46a1233b4fb514a2469981824894f325bf86aa0fe1217153d40f3556c43a8ea9269444e149fb70e9415ae0766c565d93d1d6368f9a23a0ad76f9a09dbf79634aa97178677734d04ef1a5b3f87ce1ee9fc5a9ac4e7a72c9d7d31ec89e28a845d2e1103c15d6410ce3c723b0cc2209f698aa9fa288bbbecfd9e5f89cdcb09d3c215feb47a58b71ea70e2abead67f1b08ea6f561fb93ef05232eedabfc1c7702ab039bc465cf57e207f1093fc8208 +SIG = b6c445b7eddca5935c61708d44ea5906bd19cc54224eae3c8e46ce99f5cbbd341f26623938f5fe04070b1b02e71fbb7c78a90c0dda66cb143fab02e6a0bae306 + +SEED = 6bce4dfd53bfa5506f2f554d2d994a0dc40cafcdec7e1be050006e5c5a4b38a1 +PUB = c890023728d8397070291771e65e034d34d4aae5e247653e4ff4c074591da702 +MESSAGE = 3239190747ee33d40bf870ac9ad49d88ee320f63c05257e8ab2c60306597ce76d1f1e792ab6a65caa544fbec20892fd4960594f31b3763ef07d4982eae4a2dbf3377dcc1e3f95e46ed39b7f0222f04bb5c3b434c8f9f310de9f122a29f8241e81e206549ae628d2b8ad768972c98847c1188ad04c835356378bef79cd126869405b129fdbdc3bc489cbd1399505dadef7617b5be5da173d3e80e5838c99e349276242729e0219bd7476ae5c4f81a12878fb483a6c0e9b0df2962eb0bf00157782cf768a1b71c010169ee8522def0024ad7e45775a290639c53aaf48198c42de75c +SIG = 99ae6782ff27646c27f61e23636ae1881521cfa5ed256f70bce7ce00b68280ce8e0c82aa765afb8b5a1ff2fe42c57441e458e443dc8b123477ae33d884888c0b + +SEED = 17861a8d4154acd4fa9c8fc947c1886c11290be222872ff4f8cd25939e4d1361 +PUB = 43773f4449065eaebaf8937baf758560b0c4d2de46977839b3b873d5d7d5fd8f +MESSAGE = 184df5ea3215ebe180390b0ff042ba2381155a038dc732f76a01c7e70f82d1ccc9de9a0596b3fee447209c992684f643df21f4cf9d179262790e8623e42472dc351997e6da189c07e1e8882c07f86c6337ec0113912cf92215c8de1982b8fc57bfabc55a3e8736f73610429d97feb51d794f505d0c5a0b3abd48ef7f55a628f90b8567a1c15ea9d190d7bf4ec2bc9334ada6cb92808dfc2064836fcfa46b96fd7a5d6f4b054dab09b73595feb89ed005b9ec9d3188121de69696d64e7c7bbdfc1c469faf148c38a7785970afe1acd06a92c99478fe44974e3bb2095e4467e9b2e996 +SIG = a5ee024ccdbdd4c21a24709ec53dccb7ee17626dd00a093d0884f5b45c4c9d1691840151c33c8aa07b69b34e16f61647ebe793ae4daa70cff48e6ab42ffdbc00 + +SEED = 0a84baa54f11cf17090fec61f3f9401508a3a03887aca1a7939394b1ee40a925 +PUB = 309a73c62d23d740f2e93c18587ac15e7ec480d25ac0794e10f8cd461cc2b130 +MESSAGE = fe70017b14678b0d3ad03e183d6f53314378379ab3da65b3511257b3d54086e86f2031139021391af9d72085ff7c3dc8c1e2d91e53333855423d0f785e2cc5f8b7799fcf1b70e6becb788e53e9020f2995ddb0c383a1f81038fc3d543ce0a38c9c288a9bc4077f4277dcc6c5642263fcfe19688005a603f57675d2434f3ed1f46d32f14eaeb073e83ee7086da2fb67659d3fb68c62320b7727b3b8ea006576bc2c7e6b5f1ecefa8b92e70c92c88951d0c12d91de801c38b7ca5a0a04b4c3429aba86386e96e06afd20d4c5c2fe2b9b4273eb05201a79273abdbeb37ed1830d226b6bdb +SIG = 4d870bd53af8f13f214d9934ec903ac48284092cd9b162a44ccec851fa942de715ccda07b7991d712723e7a4d5b4f0374ab85ac3867e0b53ebc46b530f9fed05 + +SEED = 38379423dafdbf25e19d7231bddd80b4cefcfe2aed932584dfa0cc3c9f9232de +PUB = 597e81dcee9448b77de6829e7921c8a390535d89a0849430aed66364ee140d8b +MESSAGE = 36125ca66668802906237e63a2fe5ae610f11a7cf92520d19e6690a3adfafd5d07a784bc1a0e185273d11d340d5eff901597dedf450c4699d43f3fb168d557f6c9c03077c3cdc370d34832ccdf2a8e3d75796490ed0242899d25ddf44bfc66f329cf4c45168703c31bc9202d890f3969ffd3ac35a12818dca751ceb8808fe81efa26a5e0d200c5ec1d94a5097ea74b6498fe288f30c48d727e9d3d35c8e12d85420702556f2861484ffd09b4f12265cc9abafeb82cf590028895a7d050ff57ccf5f28022d016ab4094b062e48b66fd36d1e19626e5215efa40fb7e3b7062f81e954830c9 +SIG = d8b50a88aed6f2a96d082213adf8b2519f6a0bbd30dd3cb0f3fd3ce1c643fc029946cd43462ed22513f1d65fca24bde3818166baa86daa798792afafe0c1a10a + +SEED = f925d274aaf1fe1a21656237385e97f7783e78090c5d4217fece7057c80f426d +PUB = 3b0fc370be3a4b19a88ab998c59504ffb59a87606338e673df5b3fab4d9bfb8d +MESSAGE = 143caafa5f62b13e43dffa49d420fa99f771b1926d40d6cb2bbb427f27b6c266eb3deb2d8bbbd47b8214ad40251cb1907ad65eb94193e54ad85c6700b4189e80f1cc0154c63ed151a8bbbd30e01637ca58e70aa3ee52ef75d0873078a405014f786eb2d77b7f4422f927823e475e05b24245f9068a67f14f4f3cfb1eb30bfede7b3262230ced9e31361db19636b2c12fdf1b9c14510acd5bc18c0ddf7635e003503e6f71e1c365cdfb4c65ee75b4de0694af87076374d631e6c4b8e240fa51dab5e1f80ca2a06c49f42ea09e0475defb184d9cde9f58f959e64092aac8f2027e468126f2fb +SIG = 79549a317d10a0be322a94a151ad11e77efc4836cc8006a85081273d7602a638963a9caf19c3edf1e25fad1e9d68701a71dea727da6a5c5bcac9339589224b05 + +SEED = 971f806be6f07d41be8830ff8dae704b08638ad6cff722d8432538127b769625 +PUB = af6ac98dce2078a6c73f6097bab63f205caf6953afa284d042bd50a4fce96cb4 +MESSAGE = 013455d049aa54ed995fbd94e6369955495395e4438822259b1060e9a34779042a1a69211f6ea2077399dd234806ba0b353cd79a57e1c49b250ab27106dcde576ecfa115eae461febb12d2da25ffcf17b715f8d95c2f0c425d5a81f700115b70d49e1cfe49fcaa14fa205e28ec85247f1a6e7128bf3bb3060dc08464bda6538540d0ac472093e5a0720fde2f3dc4788e0e9b0dbfe2a2b5f1a0f3f80de984025b15c65af77f671e1c5e2840444de5c7eda025e6dc1a3ff16e26cc54cdeed56be73f9b01ab2b1bc16c8ef58a5b76dd47287807e5c50f0d7c0a5b8120dfde645a012c5cf11491bc +SIG = 2037a0a7674b84ff27d0b22f62b4bac65e2dc0f5fdc899feb7800f25c29981dee641c5a50f8b9410970b49d2d53658c89ee16961dccf5391a6918f2a84eada0b + +SEED = 2bb0652f8fff6901991148c68a3267877271006ae9589149bb206850cdf52fb0 +PUB = c03b77be983e74a234c1986496b292e139992eb7529e70b3afad7ae4fdcf8a66 +MESSAGE = b923ca67e396d8656fa3dbce8289a38bd3c128cefb30efc1862bb944b4507805419824ce2b83d690ef4cf107492817143bf64c024989af1a7d2e1f5ac97874f86bb0d3773ff840f514d9a1394a3959b011d3a6b816a3fae5de17b2a9ff349863d27fbbb50cca734108751000d6358ca0647a93eb49e2e7af06287d48f2c09d5c1c73e4d8f77ea2bcaa7356795b26728719bed5ffdb821578bd5d66bf92edaf8b238b2bbd7d1e2c30a787f901a33d0a76669a9c3c7f2b552ccb8349c7ded5e1a46170cf28e359e2fdd54b05a562f528c68a56974df82d466637c8e53246a7217e4386801e0e3266 +SIG = 4e158deaaec3d88941296af2d27341012b0241d4e0f46e435e375c9875e89f5e32c057b527bc3411af096a77bfceb45b983efe455e3f03155d6bc7b0acc8e60c + +SEED = db9b812cb3c7c03b977f487d3d65ccd9cd2f3dee11602067dbfb72b589ff3f79 +PUB = ffa038ad8c3b378ce75d65844d08e3d6a92d194a1b7862e9d9720d20679b2944 +MESSAGE = a70092c7697cd4a209567c38ba7fb71aa8f15e5827a20876923943fd6adc659c9867ac6f58a61dc7cec3d362411682000c1a9ad1295eb8b70f242d86b5865eb76b87e3f2c6941d2612ee3bcde8f19765566733152ef54e95690943285f78b375f4036585d4739deedeef6d946db61ca458ef4f650da963c385e29dfdee415fe495845f55197a870f8cdeb5a010ba6bbb32bf1a588cc774d4890184c4b2924a5b8073313bce226585f1adfc229c90bc6cc9d212e62f05d33bedac961d77cf8c2620e451de817f8c1bb16a2c59ff804b635a73a8cf8c181b3f9401c3b643d18a2f706ea9cae47071a6 +SIG = a628a77421b2abab576eed35d2ee3d14561b21fa14a6e2fac263c3eadd79f2fc0669f9429b910b8422b4b29ac026a42e98d181be3507c5ed7c748a1fdcf1d807 + +SEED = ce379bbe2fa8abcba51c7a7543de5b7180771b3c44bc6b41892e7b88979bab90 +PUB = 7f3cff89f41babf4fa64cba33a5bb17f413bbf2a1e112b50a8e9b1f821d849bf +MESSAGE = 001a74f095c814d3beed67a8d15fc18efe235dc3f6457812a4039b7a46fe9a0e9de81a7a4e5fbab5ebe9e1e4801bd11b45c9f7ad0636a09bff42164be5749a04c02f0ab61f0ecfdfef799b827da6a274c8d3b39f2e3805a6791287eedb2314d3f842b558b9b489afe1ed37bbbcfc5e60a431d5ac60b39e946d903d6bf6b140e12c7e07f9ed7ac46a3999c6245c8ab1bdb21879a317a3dcd257a5c4f349b7f59e4e43d62d9f1cd16f518f1ca6cad37e2cb20f2598c4134291c6b8a98aae5247e26eefb76aa38c9c8231c17e9dbf271cec80fba5b4a834bd9be81ea841637aa9cdd4c4bf26d7ad24ca3c +SIG = da98dfb189385b2c853b6cf375738046a8f27ef27974abcecea1db02989b951fe433a6ce1e225b3fa82032fe060a7d3f6c183fd1157f791a064b407650571600 + +SEED = 2b2ee809d647023e7b77fc541f44875a35fa941d37f7c5b21fd34934d2391935 +PUB = 2c29d53e1bf2c7879d73d20ba88ca07a0b216d7f6d05d93663a65c3d9e10633a +MESSAGE = c4147d64ebfda41a1be5977262958104e940c3876bcd5b6956acfdec32c660914d62623c210663cb2cbe6249d7f5274991c60e950e8e2809049953c69581d2469f4fe982c7434fedd9d4e00ae08896d62cc1fb984dd233150cc2483e159cff4097df8c036bb633003abbfbe18c8fa79b5a22270838123fc9be39b8892c80384a385028c1a81ec58c8f21060e78afd2c04bfd2d30ca3977c6edad518cc1e2004cdc14bf3d15f5f528e5af277fa182275870e5c012f5f82fb1afd04edde4578ddd2160a1a3dbc050e80bdd811bc88ead79bf93f010cd0fd4433d0bc348dacfd0947cceda62bfa49711d013 +SIG = 12d90685775572c9eabc9be2574ca9ae66f0e652e578b21736cd6e654f7c6b1545883d56bf760ccfc3cf87544e0004c798061257e130030cb997a788369a9a05 + +SEED = 4ea18d6b4af8053b885ec188be48deb86ffb2a69a4cec86637bbd7b41b807c46 +PUB = e5986059976233ed77382c3d9959f34e317962696553e86ed1e5902c4bedd167 +MESSAGE = e9c89a1a1119373206ce40ede3b89a82f89462a1dee9e789e9845eec21f571c0faefd430ad338e4a72c047a39a4259580387fb9aacaddc36a2b51e7b60a87ca1321ff806794cd6dd4549a4df45c2dae3e539c4d7d06b6e6e9f466ffca2fa4978ce3dc792e44a6283880cd138a75a226f985da41ffdc0e32a5a85c85fe9a43ae78fcfe57f4dd7540a6dd3924a49ab39eb69950d421151d96b1e4fd3935890f634cd52a73a755f5c2fb72f9cd5a2e67ea930915e133b47cf6b7c10a9d889c6af6b5f1f4f51094d27fbba228ac2268b344027fd49e426343cc0134399b4b510aaea50234df42c37fa1c4f4d0e +SIG = 27570c002a487d000ca3928b83cb4319722c46dfb4cca260de790ec0e3c1932688f87362952818b54f51bc7aeeb263f960bc0da8964bf312ef93e81f06c80b04 + +SEED = fc1b75d17d3807217351d2aa40d9b04f525b89ed3f5fcdb311bec2aec5cb7ece +PUB = 55e484e774a4392a9d6eeff835a8fbb232cf6276a89c74fc0d1bb2045a8b21be +MESSAGE = d031bd11da308097e3beb6ffdb2600ee6a193ca6d8324501c972b1a25166fa7a369f5bc882ea45612cf02580254d21b40b0363237e835dae2656c1b7f4736e88be53d6b119c07f5729bbd82f67de03588322879243c5990a7e61f56907b24171a57cbb0bbefba2316277af9326f9cbf3538bcbf6780be41825a2ca774b41bdb1cd5c608851ec2339eb2f4feeddaa891a6326b29d97d7fbf311e3bb749c5d4c058dcc14f452f9334991e271c16d6508c818633927f429804ca7a38170f1b9f6bd73ed675e11e8c0d321fac912730b4ba2f7c428534adcaa4dad314c55807e6c642d494c6b2f0e8cd129775cc0 +SIG = 9a68d151fea3909893359e60b96b68b2a3e2946f2b47b875398a1e39eb01463d35eae7d976f833a762b51f2726ee0dccad5ce3600564fd9dd58c23807fdffd05 + +SEED = 0d0bf4d42ef810b179eb841771de6dbde76361caf894e42a14b1e09787ea3e06 +PUB = 7171510b43fc17efa80b15e320b1b0a408332542e0d36e4ab9a649cd941b5aed +MESSAGE = 8e2179975d0a8e5a69fe875a3cb1e79aec49c3853e30dd0320fe3ebfb638b82f89ad1643036b37e56e0b55e0a9e22a4e283d7a27485ce9102db6787d6628b77913e10896774e495c26e8bab26e7f9a94d29aaa36aec9c26ad3f50e5d8c0b7698bb5f01b876d0d65fcf5e9e32cd7b89829ed05b0b8f63a93858985bc9569fce429fd37a211abed650f585c3b55900443b6c5d6e8a48ba67deeed07b76e969fc88430fce2709c0bb5ce926ab7f44e0cd79f4ec359ef76748883fcc3d026edd06c8b9cba54b990d30aa41f1448a10893fb0539280c599d42361433a34cdafd8ebdd92efb9c38a36daf4c74060c696 +SIG = 24446bdf03416a4d08614466fb851db50e91a623cacd1b0b35660f3cf933200e15308708da3499a5ad25f0f0306b7942762e20a765b7ca9b901c750b3a95320a + +SEED = 57b5194d26abe4ab2116c0f03d23dbe116d48825a25e77d64648b43692ae25bf +PUB = 499c02dbad2a4eab3b6ff1aba3944b91c3f273a382c548a6f3a19c83f0a86724 +MESSAGE = b4813c9d13215fe9f63a78ff7ac95173eb810b4613f0f48d6876b2bd3b2c72bc7d98cb1ac32bc41ca47f09896f79204ecfb8264ce8f3c3e76dc124da8ddc6e0dfc1e13b5a529f20c82613fb9a82e5f5d77326a861faedabc7325c59af33dae6744025e649774fc4f79134bf9f6e3d5875dd91bc8a14cc36a66283d01d8d108c13327eca53057ba50bf210c19f139de6494982646198a1246c271b0a368c10aab95cd8961235d742df4545be68bd010dc0db23b673e623609e420ee76b1056c520f9ce8fbe8ee1863df97d17b7174636c3a2b612295091948810d1d4b8a5843760a2887dc55ef512af041ec54fad3 +SIG = 4c7345960c8fd48a7dead71dbd61908468efa865a135568c8f9ca0055483468617a7e335840f57c6cd8f2c9805cd47a9d7cdfde53da8ef4f1adbb6f698aaf100 + +SEED = 068d27b21e2acfcc19c3e9673dd44142d98aacae894930e20ca067439e749a79 +PUB = e22ddd396f955bb90e284776aa76e921e50699d0ca8914a9b7b841eb5ff47d6d +MESSAGE = 1c6815423d1a2c5ebe8828d1646527c17b2006e547f016b5350f010d79b13df4fb8c6ed57ba9c26c3cb0e0a64178b650a3ea5444a4fad5b20a3eb8caa702634011cf7892a0727b6e8150b0770429a37a8a0bb3a7edb891a7c90240bc0360b14e6dd770a990b31b31f33ddbf653988f82742e5eec31b27368eb0e4f1ecf4d676f49214a520d1e5b2bbb59ac2e13267e07a0cbacbed9f94d7473ed697828b0928fcc616ee02e51fcd8db4d8f7533b7b139a05e06f9e0eae32993e3025aef0590b3fbb4292a3ac40765e8584ead00266acdcbdde1457a03b7d57bd5c9e64fb06b64a50f35f0a1ec34b6ddbde767b96ffd +SIG = 0c173c488ad001cbb9c43d7b30a7c071a2fdb08cf7f37daf71d7ae7128dc0d43f0f095b2929c54b773ed4a1f0bf0dc4f364f0601e8d5ae062f5b78c05bfbc702 + +SEED = a34d52563159e0723e9f3fd133bd96e20adae623f8c798013bc36b441489bdc2 +PUB = 1fb658e645de6d3efdb083a73fbd592fcd4b800e03c7bd681aeae6576bfbbe2f +MESSAGE = 1d215f85c089f35f307a746c66c7c1e41d6ba37730d759e6e5622d6c6a198e40f63d37873b715df7518b3c6bb5e95a467726b97c9a0f8f5dfcdbfd1e0de357661ddeab555042b945fd899fad6d382d7917da9e12dfbda0d69900b3975165a73d0ac9de01fd3048b8fe5f0b90be67e03dc22f653a0a13eb4b0b753f3f3bbf787369ebd8bf5e00eb78bf0b3515a91e68b1d5fc6920bf4f4259f8a730efc7f1016d501ef6fb7cb8366fc8e716cfa50ea8b203cca1a316707e0b0fc57eafce82d62f7ff3ae04ac8fd041b55b19a352a69e6d4b79d0e650175168e34fa3358eac816cecf2c8dd1bf2a589113e91bb818f91f8 +SIG = 5fab5a7140d47873684305aa6353d3862f5fc13e54a40c9563cceac8f74008c6c445631fa864e0f1c345b5954f80056aeba25662b78827b5e8e3a9437813720f + +SEED = 58dfe768bf52118494b29975154cf452bd9746dc7de1d6bcd18ee6a05acfd858 +PUB = 0f1476c6cc2a1b4764af75805e77341f14a0d8b09c6a5b2ea287fd517c3fa6b9 +MESSAGE = 609794201c4f6faf488790d61dbff3f41b328c5b0695cbe9aa8a136d72b4977b21b500f216e9f32168ada8c13bff25327647e30d8a244d74d88303abc90b7f71aa07ca04d17bc8a0167d6e63fb88baa1dab81d50f1e91f46f5af77f2e8408b826336a35052efffdf4af79596af1bb2259f83c1bc109cfdc3dd50fd96d310f27ea4c6c7690f21815ea92bd79389680cfe3ed40c80181190688d24222d9a1ed52ce6a16b41dbd9107eb6d2e3594e4494d75dd7c089e3b26ffd00d1003c92c4c39ae5382ef9291491a880ca4ec3ac2b86e66719b92b6f7cea2cb0bbb1cf624d0d1abeae556e5f73909dd546277037ec972fd4 +SIG = 977137a38af44f4b262abff7e07282433c58926d562fbc6180bde6cd9497861fb6d955cf383d999fa1037b8b1754ce888c9ffc1560a451d0e9db8d74d2940604 + +SEED = 5a63ef9bd7dbf0e89fef155983659e8a0a6ca002bc42fad5a45af8e0281923f4 +PUB = e632f4dc994231cc1790c21afadaa977a589b0eb0da19fcb2792911b15ecf8af +MESSAGE = 796bc8361c6e8eec39838b24f53971e820f82361e0510eb4def1db2512387d6bf35bbdfa318879209435d6887b1410b3ebc1455f91f985e0fab1ce1c505c455576bca03539d048ad3a0ed1f11c73bac6809e2ea147975bee27c65261aca117df0fae7008e2c3c130bec5533ab89351c2140c9d1a62bdf688629787f954e1c610cbb75edb86209d7c357cd06ef41931dd5dfd1c7d407fa4ee1ef29393beab5713173802cce2d56229cfa76b601662c4d9a84a4936c52abb1981378b717eb55cb604a68d34f03b219f32226ca0e669348a2d8d2453930eb6e9c2bf66fa4e92c75136e148cdb034130d3f646382e1c71579ac70 +SIG = 75461f99650c0368058113a15ba16bd2337b2e633da38112878c4834fac9ba2e307c866c02af79bea33659614cbb4465c57ec3effd4c478ae38a34a05cf1ed07 + +SEED = 8b2f06141e401163f90f674b04dc90dcb6dd3386419339662ecb0dffadf2500b +PUB = 54da934a659119198553fd4566b660d8d610adc3290cb84829c894148cf3f67e +MESSAGE = 1deb25d43458690323a7d26a26695090993474f467c6fde5ddb34da945be3cea2f6b75652ae21cbc4fd22763a1b45583e1c3e88bbb5fea2049b7336c91159988c01526824ca3bef16b362b9202b8b9754185bd61bea8f539aadf4a1ab135fbc31d2a8e33178073106cbbc02d4cd0d3c8feaa8eb733084356251795afbd78ac3c4f8a3ba19aed755c646f35569c7a6c675b6d6918e834969aca03f71a2e72ccb17003bb75b62e852aaf58b3baea89bcd64a32eb14a6b9e10de48971e53d0e9ac99a78f42de0382ef0e80ed3cfa343f35e4a9983b9aeed986d3a57f47e5e46d40e9d677302809a2d37e4ec011f051b4d031ed600 +SIG = d68e3750dc56432397401c98ff1529db9ed48fea246dd4ed383ec74c1a463aeb784c87b1fda8bbce970fc97aa9807ddbe95d41fb022ea68c1e311654fa1da207 + +SEED = dc649fbb1bee0a44814d6d9e9080d5d90c1fc173ab5fefed826a74723a774e0a +PUB = 0214c89f3867ad2e8870e50f8c2a6254986d9c220e3338411300cd9c6404d4b1 +MESSAGE = 328700a8ae581c1edc4e2c00c78bf4606097f9bd75aade205a243c5fd7434d6222da937e2881a2e3c574356d4d5679301da99e11cf749c27921c8caa2ab2a564d87c5df8ecf1a72b680184824f6986022e3fc98bd2a21c3455abf1154954fb30c89882947b02f35af7b1bfad05237d242e2b74832fc536196f2e59d1acd0c1db6f1943d0f6043bbd6a769083ed66ba0e05a50feb0acf72b6c16ba9af039afb7fe2a4aaeb4d06181c5a1878689e67a3f5d0ad39e794d6239a7e0a12ce820c5be60fd5f1dd79702f49d02b79755fe873f5785c72f74625cd7e2428262597d31482c2c0508801fd96319d61b91ba253a5e722f414cf +SIG = 0e0c5e4e184375da4ef7e2a2e4888050cd84e2fe21d08e84a852db2be3fbc372c472de0954dcd1dc11aec493c569f40fc6f77f03ee524fb06ec40faa1d6cc10f + +SEED = 39b8062da43e64e1676765d62c7fb8e0a99c4fd417d6f7e3319bb13044205f3b +PUB = 6227cefe88ea4fb27b37b5f797778bd72fdafeadccd9aeb67ad437ce08fba6a8 +MESSAGE = 740af679e3069fad059fa4825fa41c59fbd484aa649303c27c4f7a94711c5b713b2a6b8987859e2271a6a71eb0b4a15abde4f5168f6cb9dbdc6a27a2a13d52c9720896a1f4ce3a5345ee793b6cc3ad80d7d58163d5455b9cbd073e2b7adbff95590c7172271bd91fefdbd01657ee1750651036cdc3560b444ca2184bf4f3ea89fc973aab6fb4a8ee5704bbe5a71c99fa3b5ef0d0396249758297699ae202b819690dc7ac4692770346907845e2210d5363adeec03f0fc7761b7e0ec0fea1bcf6b04fc54b3e4c40d19b8fa649ac8479e8f80730c0c94e9f4a1ad506f2bcab0c49540f6decaa77b3d657dc38a02b28a977ece482545a +SIG = c5f626490c0ef4e1efc3edeb0cbc3f7de267057fb7b6eb8f0c813584965bc5c421feedf54241cae001ec6d5e25c9b1fba0385e5dbd95a06ec1d8ae519144960d + +SEED = 52f4675d8ccd0eb909df0a516648db26fa033ba41d43fc3845896d456e14265f +PUB = f39e7dafc97b0a84dcbf7fa14a9403ee1fa92b85e5a7e5d05f031b44ddf1f794 +MESSAGE = 74427110857cb4af0a3342c2b52997bce1a0db6405c74e9651c5b85979acb071e567fe70412c4e0d8c9fa421914f6a62f2ae420b7b2f4cf80c90574221222288b65867eaa66e7e0a0557a26c549f9a7a4e70838ba4074b4cd7a9d758b378b88dd49441df802a444dcbc30624933b59922f33c20f019fe78ee24b8fba79a682f388505ac9c97f4eb87c611880026b4c23306b865173f5d716abc6cd9a9906db3430136f754129c443b20c42be2fbcbcd44034d714f58a4ba8e756607a02b608ef49648f2ad0cea99e7ab30a8dd7814004f725f49301d7b304dcda625c296d928cb581736ab739c86b469241a8259351fd37b4780a9993 +SIG = 4bf668827a720af68898a06ea7b44545a34ca896ecf311feea47e0686d911fadaa03118997153c65361fea15de9bb891b8909872045508ffad0cd9eab21a9702 + +SEED = bad73c9fda4ceb9da6c701c2a6e2efc0467afa0a74f8750c52cf1fd4c8e7489a +PUB = bb0f027a9035376e1aa3206c3d774475e351f5767ef86ef48a72c037c24cce62 +MESSAGE = 74b966cb780771aee63d734df3756702d1d5fdeddf32136c6358b836318a4f984fe71e7716adddbd649eba44cd4282e0055d8c1ed2d35123d66e5a98f1c0838ded563b9a20eb8007538fc7b0713e7e485e3c28f6ebc421a29dce2524db7f29205761036ada62e5b0b7d5b7f294ff17f338232fa5fd42b6f7253304092d848f50735248595da0f7ef28e568e9916bfc56d7ed0d811b59d5d891ae43e1b198071306bf525c678c6343998005fbb7869d1c40f8cac807fe2ef03f3d5b933f58978ef2906fccf7444a2936e63d928c690926c9c994ed3d666263e956fdfea27764bc5f74125bc46bc102dd3e5ff93b5e123e4b38bdef697e15 +SIG = 197d6b6cc88a98c06dfca0c01225edfe38a0b2289f29f8a44ec0816a952d585e2d59b5b08de100c0606296ccf5e92a99e093623144b8b22db87d929225546005 + +SEED = 707327a431dba77639b3966b2bc095f8eedf57f7a200e3b0077ce420389c92fe +PUB = ee2496910864189fdaa3c7757eb3cda9ab1e70fc9e7f71a38a0bfc845931c95a +MESSAGE = 32ef31b64eee700fca2ab21a267f8d9d3bdc689c7538fe959bf713fa995db2c0ad36dde430a8417d437b72c74e26dbe31d93701d4617fe51825cff7a544fc9f44e4345e14b4b11e15f26ffc2af8035f3f970e4dda44c0ebc0363c2b56fde218663bf78839092538fc2f39153d4eb29da0c1a08aa966601cc68ca96e993b01b173a261b2ef327650382f568fe944855b0f4fd9d15e752ac74dcfd37b3786fffcef23339c21e9270dce8891dd5eeeba9608fdc7b6fbcc99fa1b5903daa0968e1b691d19d06f215ded047ef9d76610f5de220f5041b313faf9e96c9fd7db54b5225726af435f9cbd9fd87ab40ce8f2c6940b55f0faae87850ca +SIG = fb99029feca387a5d765961e361d7172b98b7e0f11290bb1e5b57b51bc2123d0bce29020392a4fec9ae6a72c4c386cea1857cb8f9c50aa9a76d7f1687fcf2900 + +SEED = 6aa5c9f008f990473ba4a6286a416614026661f11e1a24efa81ac35852d1d070 +PUB = 605ac9b4dbdd5033d6c828bfafa93c0039440aa11ca724ae834043e07bd032d5 +MESSAGE = b5165d3963f6e6f9ea5657e9f07ff3a321eb338f9a8c3d3c42306b2b278978b31c623a631be3b04c41edfdeddf538e1b765bc8785401c1af29d0467a64411c497395d755dca03ae3272f4bc1fb1918dcc1ed6f04d6498404a8ce1409d447f570a4359522cc54629202ebe507ab693843141bd5ea0573b20f321a483ff383a46897f5926fe0b8afc25572707b63eeed283532928a4144196497942c572ac547605139256b0aa0eaf04db1a256012ed453b173ee19ad6e9b1af3f45ff3044a641f8c8eb0ac7bb45abbded47286b2a069d3908694ee06f2fbd0ef605a7911026ea9ea3c4913f38c04d8b69565a7027867ab3092d05f4cfb18fc7c +SIG = 9756303b90655e935251032ab19cfc95ca1c2a2c3ea28b033bd47066cbd4c7d8982a8b9886f1b9cd02e88a65564da8dcc34f308ba9f10144ba469c2efa49e004 + +SEED = 8efb8b79742be21e6d31de678bc81450ba8621082cd6f0003e22861e2291c481 +PUB = 33381e356c4fd386a3f7b969afd9f5c00d2067b698b3f1f00f3784202d3084cf +MESSAGE = 6b750325d3a0f08a147700b51a9b3725571094818ed69d1f761013eb86f323f73c49f5e439877c2783b336d1f1a674ef3e431fc1ae0180082df5fca69f848139fe6ab6739a0592ebd6d4705c7f0136b22189a11d60d4d3c9bc80fe7d7c00952d5742f9c0c2121fe792df133f221db991fc960ee64b9d32e0178e542bce8efa8d03ac8026cd77ba8bf0b24215b9faed2eaec920e925d5ec46fff6bde725e91c8280e4ada232a5433ae9680ebb53eb55553147c93370574854896154514299c093219a111dca4e637ad5001338c6d4d5ee9098c65832f7af835bcb622128423036c79a5737738a7539f8d4a6b8b221b56d1401aeb74d4571bc009d +SIG = 923005cb4848402aa8f9d5da74030b009444924c214ad600ddbab4c153a6ff022b53cf6364cd7ee99bef34fe144da964edfc38a0ba633312650ebf0e55a06009 + +SEED = ed046d688b2b0a1bc3daf2119dd321a607b16d2a2d1d963add1209c665b5ccba +PUB = 8734f1ffcbd71cfde290017ea6253e580d59e65b541b46521f5e5ec1451eaec6 +MESSAGE = b9cc90fd8de2a141f95116db3b04be83e98522597ec2174964245180b9a473767d6d470a217db5ff5a1ab777e1e28a0b16975e2bacb873020444b47ed8326421b90ebb503688f090c11b3b13617c5c5052c297a41e2893775e34d59ada49d994c0e4a9f5220e9f0315a67705a3ec08af0dc724b5cf67ff34fada8ba7109ed2b5a8907bb403fb1a838b4b059f18c792d7bfec05dee0c9cbbf1753409d7db3aceaf47b4c61398497b0eca6c1f8ac08a7ea1eb9c40bc4e92e888212f7d9ee14fdb73158160944ff9bcdfef1a7469cc70f9474e5f24dfffea585f09eaaab4be2afebbe8e6cf86d35680dc5d1b92913e848256ec736316fd0a2142063b0 +SIG = 721bfd4776cfba13330fd37269e979c1d7b6ce54a51b82f456e137378e582f192a12089da5aba76a7b161813dce56b72892a35330c94f7ff21d09cf09e553504 + +SEED = 76ac8e570a39b3a0232c45497537fb2155acec3617865ed1df210f00b49d1b8d +PUB = 312a3ad899ae6a25507ae6e4524e10b63a6e7ae53d9cffd39cf28521d93533d6 +MESSAGE = 53ced9db2b479e59d3ed643f7cc3784c24b8bd4c63206c72e23fa850028899a41ce1a8bdc003f12b7c29972c9a08bcd231fe0e1a0fef0bafbfa4e0e027d72004075ba37d490eb9964e783bb98f9e503e9c1fd3d23fb0017cc7c7a9f86d171f041e2355d8c5e6229d34c7eeacb6358cf3060d5d265bae2004a558878659a30dfed5f2ec788b4e14397b5d00c29db5d4ebf16639a8df292a3d24f6983cbca760d903e976f5b698642ba1fed49e79c38f4bb3946efccc9d6aefad336d558f78e4f205422e10384a4e531e75807efb389d2af4cab43825fb87f196a9080769fe7585782970a6918affe10d20d629b705845597418d699de3f1de854f94bd +SIG = cf03f525913c44303b2f80079393c21c1158146ecf99636f5d97adfdd9f35839804c23804cbf1e553cfd4b73f689a9143aec298f8276e1e4ee0891f1ba75de04 + +SEED = f64a66ba0f0819f3001416c220bf52d860130a19764aa8ab38d15b2aa75ac022 +PUB = 8125253cd337e00d45b45079b585349561e5f542a81f6d2fcfd985c10feab2af +MESSAGE = 8072862ed0ab35921db5ec2cba8e6aedb0441fdf47491006c01e6456ad70fae3c4152dcfbfdbb8f0fddec5e96b12bf67989ba96793f4861a11b63909ce8d19b8ca64a544b31ce051fbc88e062806d9965cbd2967b01614e86b532fbf59843218dc9c19c80315f044731719371092a3da38878bc4cf77de972e860466b8fc45e465dc3d0ebf94bdea60ef0b9891ced41b997b11b31ee4167db60c9cfc8b85beacfe223cc1829213774085d7c06d2b2e632cc21cd9660df47c4fa918bdd596ddf622dcb652642b67527ba8ed15a819a8e21f48d7ee70247f5200e37c259dffd17eec8c232f970cb03182fe3964132993f6ecb7c4db18ccef390c9eb3639e +SIG = 4de6f5250822d7c9d5bb98582500b5c085f541ebdc450ed1acaf83684827ed1dc77147aae4b19e14a7dc5bbe1f1e4f5771d8a6e4f2351739afb08c806d558701 + +SEED = 8439b1d60aa48460135eb1002cc112792995079a77e6e8ab020b9abaca8920b4 +PUB = eadc3e0c5bddbc3052c3b2f8b0a94566c2b2c879ed17034ac0e6a45f2b3e32d2 +MESSAGE = 5419f6d24eb46635d4a7f8eab803cfd0d04de092afbd86f2a6961a8d1eb8c0d197ba55ee08c991822a5aa702bae0337abd5ca7faa15e1f1ae369946e9b81216c0f5fc22bbd4433c3de93c5caa2741683bbd0e1a78df28dda19174101876334d40339659f021ae766162c6cc5421b79cf9d5c090ed4af07ec84493035bd0b2421b533684295bbe76a70fec596ef8c89c5c9dda3c33b7735d2d2f20b28f1a5402e72d04ba291dd59f14af08adf56eeb086d769c6bec3451891372345fd6bd02dcf95e803af0353150e182e323aaf683e036d9a135d2e6f98cb4d327e2ce7d54247f3592ed067b4ce7627174f996f28165c9c11f07e5ee9cee63851c6b68ea2 +SIG = 62da81e16440821b593b6ee6540e15d1aea75d23e0a1bbfedc808c9548f87e8bbf36915a39a74716f645cca5714d170af907576d4f3705e543d2adddc5ff2303 + +SEED = 3a046397f0afc072bc7f907c74d38fd1b9afdf27e14a3534768b0dd2df3a1c22 +PUB = 99cd70ef3be342493393872f54c47deaa081021892d11a3268f3145ed4f3abe5 +MESSAGE = f08ddef46cc6c34179820c9861375172fddf774f8dc3f7d64aa432da8e5fae644c0a8a9e6908517d505debd612868ac6daf95cd7e1699750022ccd4b88dbae2bbf73546ee4b835d319a842dae8b9ed683323f31e5cc57919bc9dbe3bcfffb2ada48072697ff4a7d310c91adbca81faf26a0eb7bb0c404ac9d8dfec63e9c64e2f420c07d323b7c0dc3b73507283aeb1cee51db4e1a83a692c7c1ea398f6f30940fab85e2138d4b85aa4e231e5424f5b064ed026f0ccb99d1c85a9eb15f5934a11359d411cf94ae8ffa3361a224f46bab852d184a248b4c31fe3a7e7f5134c051031a9f328a7be4a7cbbb1d8d863a400fd2d58daa44f1b9d8e9ddf961ce6322f +SIG = 5024ce60257965687080c5b1fc7d1301c32aa6fcc835497d9cb23a74a6ca2724f55353c1b757827ca5440c9ef8f8c1050913e20aabec35c497b56041b5deb209 + +SEED = 124f7416a80453e4cf1cd7b5e050a9761418258bf7d27beb7f23238c4540be2d +PUB = 0da34ab173990150df7399b6bcddba93c6dbcbf4d176941cb5071e8734c5dc92 +MESSAGE = 9dcb9873ff054db11d0a9b19de6885ffba7f0e681cf7fb8f6cd950c48328d1f919ca46054eeee6c9e57843ebdda7b24bc3503c4d612abb1a314f39f58221d2b54dc755acca7969740e7fa8b1a9523b8c7379fd395253f4e6cd054ee24b75613c3581d49e19246a7b3be1cecb334be44f3d626fe3b7b269e628d44580c20636eba2642f2744b959e65757d0ee601843f188e95d17253fef567068a5405a3a9e677fea3d7d55f7ead19a3f30c5f985671b55fa120cb9d05f471b6e1e8d779a2c803a19e6d0d7cd507887ed647c2a95483f933991ed45ae301a2b0e954a5703d248c78810aa0b199cc2bebb2f1d71cc40487dbd42eee0f745f7d285685b1fb31b15 +SIG = b0572104aa69e529e3465a6fd28f404a4ec20276a993b1725eb8c5f650b4a216f1871b24e368cc46cd1ee0174cda1b5e4ae2200aa9fc44522d975a9c51814908 + +SEED = 25d13b3837601b07a975693e5a33d5337c34c1127fe4c27490612aaf7f642e9a +PUB = 3a07cd68ee2692d51cfad1a80e7763b18a043c74f4e1b01edc55ba9a9e07795a +MESSAGE = 115b3220b45ca8f36c7ff5b53887d47e669b78dac13b98cc7aaca5c2e19fce81ec8617ca410e11c9a9118a668453b329ffb718eaec739172f0a849a0848192a5bdea18ab4f60d8d1a0d338952d77b2cc13efe83c76e8dd58803b1d8b3c9729ef102b20835b7de872bef3010f15a4caddf07cf7bdd222d84b174bc21527cffb1b7ffde81e281d30cb7bce25ea3dffb6ea1fbb06cb70569a95ed1a07e97ca42de70aa218159efd608fa9b0896e0b58518a322f251d133e58c8fc1428ab0a170ed845c75fb403f1ffb97d2d2a6d4f277911d326c1cabbb8516cbc17908ab81ff8d79af44611ea1d05879c1ec81d06936e0f4a0aef6d5748e181d30ec25236597a973d +SIG = 20cbf08392fea6a99cf446a95c199caa0c0f9813cc217b8d228e2ed90bab95ea92cd73ac95834764d33e42243c80a7603491c8d3e49ac715fd8a5b9e4789bb03 + +SEED = 7b3a76decaea60c41e95b05877a7da82064c27278c8d7df5f0bb95f0ad2d0435 +PUB = f80db5c28721b1c611bd87eb145a98bbf383b068045df2458d1a6fda099f7fc2 +MESSAGE = 375fadaedd9cac49b64e1574028046069f4c83654c8a7011abdb64db16b47fa311798172f9072217b0a6a43e5df6ffcc1154bcec1c68e1d35ec05880d012ce76e4cebf301bb2ec983d00b4a0540c937ff1c6df9441c61bdb3be8e0c7c11a35d49b6f55c381269a0e768efbd453447fe48b75ac39646ca82eca7d149304423491871c10dbcfc5973a57fab8371c30cbc4e90becc0b67152226ee177b4ff368ec879b391eb95e36dcbb07b2c16ba395545d4529f727b1a11ef65d120976b7ccc86af4bd204cb9489c921e43ba5e850cfe59899f1c1ec4aa5c92b6dac6914b1952b53dcb540b409231381568987bb2236bc40895df3f17eab7c0274f2244f958612e88e +SIG = 2cd26fb3c4f7440a72affe93564f6f6559adb15cc7a2ba10879fb7d67e47d4ebd02fe4823698a5fbd4a907fd69184c255a170e5f1747fce968102dc219b50d02 + +SEED = 5ff8d4052608eb033a5e94b603ce384d8452f60a26498b9112567f3410c18666 +PUB = c4900de24d9af2482763109926af7c481380fabcda9440c1a53ea1cdc27e6568 +MESSAGE = 138c60557c2e9008afc03d45bec71f961149a0835926751c8ff3935c7d652d83e1b0b1da7d5bbe0b8e171a4e49aae06fd8a9deff78dcde4d25b1aa899998a0f99e1df6f9337a3ea2f24b76c317a7014db4e5283191795a70d8821d217846490f958701d39dc2c8ce47d928938874d87b3558989bc77af820979a351eef9594aa5b94f3341eded4ea20b08c3e7c5610d43267818dfac0a87ddf527fbce8512bbf85b66c9bb5d62f0fe84048f23b19604a5c8d82b1f25a8da02731feb2ecae489b8475f7bd326ddf1a08189e46c08cf50538c2a363e2f4eb2c01a204c7ffbc0b981adc0fd997aafdf2a222ee84c309f6e95ec7de4fa85d4768d5c003165028225e22e09e +SIG = b737d4e5be27deb6d87729c636dff7a406c013f313c38cf683fe14f75a3b3005d9535d7e5815c8f8b37c51d6927111c979f7d9d81a347aa9cc09ed4e6c18e90f + +SEED = eedefc1757e3a7e5ed3946dbedc396a362f683d2c51b0b9f60765d4bfc5134de +PUB = a9872bc2192fc02b189ceed403ab9f270a032a835fdebfaf1c9d6934ed8304bc +MESSAGE = b194db73f994cbdc3cbe630ba72c47c2249bc0592ab547942b1d1b882b44f5b3855e568bdddf92ef05022d88fcfc294e76b64a00e9c74355373763e49a4ebc47243d48a9ad588994a518f80f8615c2b31da587a53e529d435a8697350dfcde02d20cce7d5eeefe3f5ab2aac601259cda38538a1b8301f9832e75ab90f8a932f267eac181003965d5266f206180c6c380ece803577ccb46176bf607159486f24259747e2ca6fb1912db7b78a973b2846387c1208030ee1f400d0c5b5e8bde9635ae55638ba17c734de8638bb85dfcd76629a7f9f40d6ab954d55bf8575fc9c9a595097e0893db5a7b8a6c455ecbd3d22d725e19de2941f467f9eb93d66a0e2bbdbf92ed1c +SIG = d5bea8ea9a5fe9ed6d2bf839930c0c6cd5039e988f551fdedb5437e1c1af0ed7b3897c035711c3c51926be8d1b32024d5cd582f5f8369ad84d18b12502652f07 + +SEED = 09d22bbaa5956cfacbbf9fd5510975128686c40c6ea96b89ef4c0f0c649bcd7f +PUB = e559ea8acbdc61b6709a7d83ae15849a6c78b203923dd0a299239ee4886930ba +MESSAGE = 1c26a0f3a1a5b2d7d5b297af8a6a689d7c62a25267e197d23becd2f2b816c4de92fbdaffb941c3fc8db7a84335a84cfbc92cb3ac806ed58df16b6b8e119a48df4f27c71e931a5938e7d002734885e13a258a15b6e1136efba72f1d096b689f7618f49c968063e8f991fa0b55601e430eee13492a1b09413eb23813591a7a9f070cc396ca9d1facdd4f4ce37c40f7245f55035e10fad6b85b5f01a1daacc0df94069f7de8f6467f96d1fb98648e8a0520a8cd723c98e9dc2dd4b2934d8228f0ae1a415bd3a7cda38d7a9983ce1af6f8c970a2a591635fe12b917536ef815eaf1a3138d70ce70a794264d7c986d9ee3290445f15a9248f2765271e5a992196ae331abd4164bf +SIG = e65275c4328a70ad62408ed7fb1728be87a73a814fee8ebd94f2665c71bc66ab0c1b07a600b30bc081a74c536857c20610384be268d9af3e3ecddd3eb0c14c0c + +SEED = 77826ed351a3f09254ae5692885d774cb3f24410a4809fd90f8a00da9aee9903 +PUB = 3eac8f41ee73e6ef136821f7957a1c27e15638d0e3916e6caac6fb7beb7bcfb0 +MESSAGE = 1ff06c0b3999cecb1900a47d267beafbb35d93d14cb2c8925e3e3fe5d967586925ee4baa41998edd0103205810aad5c0bbdc77874476810246d13089a64db576424fae0bed9664a42a491147d1ee3b9c3b1ba4875be15462392540f9978d9a4630ba4c525499751a45efc299ec7d73b17f9ad275ee71a687e72690d7320242d2dc2bd4d5c5cf0f17a465185dcf60f8efff53903f20b0c2ab2192d44368f2f2fb36048af071f7aa857b14ad1d11461205bebe17e02be2e3ccb6092821885c4e0d4811be3f45b1fea088453e022432f562562b43a355cb56270cedb6c2c42dbf9be850e77192fdc65cfd36834be988dbe9a93e2518c138b090fb9da827cb1c91c8fe52fe7c57f7 +SIG = 977adccdb829b40bbd8e53856a783db346a39dff62041a2972d29009f1c9ff81b8ad54cb901e497c1d3021b50b6c69ee73558fd7be05d625f5727f9af2ce8702 + +SEED = 99a99531c3cd6e3e9c900a9eeb26267e72f09d11b651a897ebb79be016f64c6e +PUB = 9bf9f8b48a2728e02608fc19899d219656839d1cc1e9a8984df674ec26662f41 +MESSAGE = 7a89c0c1952fdc4298dcaea854efc134656be147e9e8e82fc9a449059d80570f75676b81c4a94f76a968200cdeb0988c73f59afc72ad4c3103e19fe63b7e95e140b5cb2efc7b97a6ffbb6c298ddace3be6d2ed3d598b8bdf0c2fe6c97602142a76e978514c196c1b9a88efdc1925fc506155cff9a2f21ab634e2b93e96928a5d8f7ce4cb7326d9689469242ba9c6a01b77496badef87578f5a17284e900a72df141c6199b0e71ab5da4375037617ec6196d4f4e23ae2916a72d0fce796022305ac9fbbbbe4705b340e42b78e1c02bb1001860cdcaf71ed89255dd56cc0b31c59d4596dcef84e22234be562bd801e94111d83a78064c90f9d82fce91f68abb03c73b6bd8d7e02d4 +SIG = 0e89da5d949cf2bf40c7e17c2d0f9ceabc88a092eb4d49cfbfeab7c8bff43245c67b9e2e92f9bcb9b34b3fcf8b01fa2ea7a9649f814c3aa98b3dd04540c31d09 + +SEED = aa58403e763bac405db065eb11eb6be3e3b6cf00ec4a222b52bff4b6e3d156ac +PUB = 167f9b9a4665f93f5d7d3016ace6fbd13420b2e51e72bde59eedf26993b66cae +MESSAGE = 3baa0998ff02b32b90b51f9a840c7b5c5870cfb1810a9b0f77b55909d47ad335147a991c29fbebfc592e9307175c1964129a2d5efc6215807453bcd726969781222bcad1c99a49748b9ee667c4d0c82889e2f50064c115dbd8fb483d72ab0ccadf76bddb2dc727dbc3fa5c4624c283d8921c8aa4425110dcdd69c05e5ed59b359625eeaaec1e27eafe9d9a5ce736c3f9c527ea547818b9bca6811be4cc15058a6f5b683303b80c90c94a83b8b15869713a66b1e0f656331b286d1ef7698834ab3e138417aad6bb3ab3bd9fc78761a482dfc654f3f8628c8d9fc16018898f1641e8622bd272e38d41706cb9cebe6ee5e173576bf61bb1188cf2f39c62220bba88fcb4de4898b25b04 +SIG = 64b598ca5b8f9ae742e46ee0d8c1aaf31458b50c25d267a677e44be5b755f14d51801a30399bfcc38d14071aa0ae93da825a581ab6c20725a0a910b4735dfa0b + +SEED = 1044ee3708c0b0e909a8cb2ba2cd0af8d28a5de01d962e826087fb232df7b2d2 +PUB = 46d241ea0c702c1889d44655824629b67284d4e644a48fa45455d27ac5f62529 +MESSAGE = b8a445455fb66e17e3143d35204c9ea93474eebeef93963ee5c1d377ca217acd4ca63e5755da08fbffdbd4352bf165193896c8d6f76bb4cd3bc2d3a476a4e320824a1210ce74d0014d747f111eec310c5c89ed4d0850e811f80a8bb28dcaf6f411df83e2c1dfd90c4ad23561454eb5d756b63b4ea7f37dc5d466c16ef70d11190c4f5316fe2aa8597440e88bbebaeb35ea5f04f07b0339264158ef909ad5163bfc248cd724133e274f812695f290e57176a96b9393d07bb310299f5d2a6b6dd1dabcb51bf29c5afa7ebb0701c6c84767ac137793091fe0ed6e47d780628a32c84f83e00e9c16742a523ecb63c24f4a338ed299a06194924f44c5a5d3c937ff9b0945982ad24a2d1c79 +SIG = 7d6bed7f87d090abe013c31e1203903bac9c93445d06c7b53d31d15f970d88647a7ed2c3a63050ba19d68043aadd18bd861de1ac4715b8e828b2b16f8a92b001 + +SEED = 95dd1a5e658fa6c8d42507b3e5b8edb5baeca62deb00fc5d4dca8e1ab5835e59 +PUB = 3a5323dd1e07f323bb6d83e9c2db92a29f62e2e003ee0deacd7e2e4e030d8d27 +MESSAGE = 9b7afd48c474604c26367531556840c388668b0f3840063dfc9869ad5b901274b931293d04f3c8e8f7f8eab815a641d7c351284e8bb0437ac551bb29438964e6a7c7ba772344b333f9eda5a77568c8931ddcaf21e32e07b10bf4820fb859bcf87b81c4bff426f24a4d468f2e9aeda8f17d939709970db11df76247e98a39eb8b38f5949f349f2ae05ab48c018517c48fa0205dc7f1566453e105e48c52eb455c0c40802f797b3eefb1e2f3b1f84315aed5b0711c6499a691b74b91f12ef70f76c4c05c1aa1a993e2f3e528ab343dd2368162f4036a61a13a88045dcdefa85d68532275bcf5b8f5f00efdea999a95783175d9ee95a925d48a544934d8c6b262225b6ebea35415dd44df1f +SIG = d02a7523dcbd29576ba809b531037774df41734a41175813119c6a6a788cd9b8ad780865678667699ae66d010919a966a051c08163df67a977ee6e220d0dc30f + +SEED = 1abc0b9aa01dc57ca53efe7380962b1a88d50a964f5cd98640982c74393f2926 +PUB = 8d4fd14394d7c1405700306983fbf76ea9f171b15a6b56612a1feb1cbdae5dd5 +MESSAGE = da2dd940d5e1db6e80bf7e2b782e7e745cd4fd252e981517975887dd05ac77ed837d082961575efedf301fdf24b70718b991b8d92bdd2e6bee17c8aa4bc694a727bcfc78fd85195c42caf883a2c38d161cadd79cfda9a39110e1264d30bd4c5c4a5876777f233b071b1b0b408935f0468954cc744af8063b004ede56cd981c4dd5608abffeaec9e58f3fafaa671467804b7fa2558f4f95174201f183d80a5914065fed53115b41ebc338f78df050053b8a4e75ea7c6fdc354dad27bfd8a2e66fcd7ae2f587d24be0d4a33da30a220e51bc05fa4e412b959fd95d89ea6ec0162516c096a9433a9e7cf599c928bd5305c2173bf7493ed0c1c603cd03f082cce44237a79ffd8be9a672c2ebaa +SIG = f738af2d3e290b3d23d9aff7414bfc5ffa47235dc053687a8ba5c8541b8511f781566cdaa130e0677db55fa8be9d81a092cb58923a8628494d2f62d95c167100 + +SEED = cbffce2c9bd3e23e406e5f66e632dcfa726654d29a955cec983173235fa359d0 +PUB = 49653edd64a55f7cd40eaf3f8e72eb96dbcdee398f34817f2c95867949710b14 +MESSAGE = 1ffde6826e4f0c24a7961f191e74cc0bbc928e3f1aec3efab32765c2501cbc1620e7ee6f61fccfb00cfca9fb98143b529bcc8c3d0fdf89ee7c342f101815fabf7deaf9f302a288fe175826d590d99ee6fd92da74f9596b783c0e7d47d711a32f39ea4165e5212431441b498c6b70db3b09d1f4e4a14a6bae39da5088bb85b3285ce9df2f90681af2c74dece439aeb91e1c1b0712eddbee8d72569828f37cb720c509d02aec476070484e9b16ec7179947ac96caf0e1be8b6b74f372d7235fe6e3999df733bccd482dfe2e631f56b582667dce5e3121763adfacf3b18cf2095f7394dee4927fc2bea6b5824d90cd59e854ec5872b4551b02efaba5ad54a9b7a8f6de5d7cda5825b325b076ded +SIG = e7ced4fa2a7dff73f1068bbad0ec9a1109043c97a62effa148876f0969ed4dc608e28bce797af3b82532c94dec4d6811b7f563679129facf17bb73d69375eb05 + +SEED = 9f91231497484cab39b9e20f861181d397908577bbb2968242d071bca4813ffb +PUB = 8824bc6cd6a6f15a5f41668f2b3bae8fc4967383078d08b51d6d1b2b93a1071f +MESSAGE = 21d4fbc98163c3fb6e09f775c2ab7b18b18792340bafedacb49605622e3c08aa3b2b8d0e0902f361aa1c0f652e2732b10a0c5c6a05098996b588267cc8951a78b5d431e7222bbb508eeef1b5e8b8d01d3991e18dddc6ca8d222ef177ce62938d1810eecf06f4738b28f440946ccad2a12e39d38611bed3a39f93419a179ec2b1b52d5fe5c80c23b84d8803755f5146092cc199b4bdcea5bcf2037bd53ff6346694155f027d8ce2baffe30a5666596c00783aaeade9c77fc8637942ece017d6484c2899b1918d3a480bd5157678d4772d271f9b99768ee1bcc46b2489ae87cd030f47d1333c7672cb902cb4f5fe746e853de57940ba2264d3e629644d653a5b7af78ce64a993f36250f8cb7cb45 +SIG = 0a1c706dd8a13077ab18386c65fa97cf9dfc43542d1846ecbddeb7b3c93f3c66f3ccd0447aacdd4dad8fbf736c4ff9dbdb62bfc14d8883e385bce9bac56a350c + +SEED = 1e2bd5487c5f5ced461f604dccb4e78eb91608f0b821f5afc4e3e534f7960392 +PUB = ef825475cf2051a2017ae532f077d96774347d2767ea7b45f9c1b860ab993506 +MESSAGE = 1dbbbb13cdad88854b809ceded273343d306a8deabf3ff02c9cec6f002b8e9e10ef5d1b0f5711f33267aa91c171b61e960f740457b81d751a473f44f750a080cab80af7ccca7dffcfac9ee4c39dc85cbdf51259ccd3470d9bad3ad30f4ee5dbd4fac6bd5c6c4df7311a470044695a7e1a7e18572207588afa57eebcd4d575b6d424457ee92465ce1863e3c677cf875fdb98d4078ebe7144260807052577144cb8e0359aa42ad155d79dae3deb99c4632c191c799cbfe587d954787068d663bdfc0fab1334f1876bf498c4db5c53db7b0204ed5a521c62f09eaca8d0189f3b394143f29c421cb5c8d07bd751baf4cbe3bf4be1701df4b2207dfb2904d84f4dbda51cba576d5a5bb16efe698edd608 +SIG = 4d33c96a2e3a5db7391adf65c1cc3565fe76eeafd0b5c7abb0b492a0b51e1fa33639946a243b2ddef357552298ce0aa95eac6fbfe660988271877eb2a7da1806 + +SEED = f78db14d6d1a643dd7735baf2635321244e7ec8ca72c5c38c98c809db9cb5a55 +PUB = 5414f75f52f3864afb0c79c2c5c1d06b4bce400fbddf17fe9cfb2a8bac47a0dd +MESSAGE = 05caf1b8edc3b173fbc1ed29b95e2bf06d814ba2407d4b31c728d04ec273d25394423ac7d4fff2ca36ee90273093c756e2bd13c96d4a3dc7f5be1759fcd328eb66c5882b58fa4588e5b2a3713a4154a2340d0b06ad019601b0e028e497f898256b028af95cd8168df5e58a57cd1ebfc0a0c91ced61dbb480aca7df8dca91eb16e98007cd2cd1a2045b0e4477d12d5a4072f365426567c9d61577f3485c8f46605e7f475ef04a3948f60dba8c5508d14bfddb9b11dd044ef2d84c16b9a9038d8e78eda43b91297df35f4361a383b41d49677a687d5b344ad1ab0fc73017b3bebf32306fb3fd7b3d5071f3ab5f6e49aa15540cad6503bea7784cf9421801ce1385839893362a97fae121300d6783af0f +SIG = d7cbd4181f67712007b7f0e18452e0a024464d9dc9b5ff9cf669d1b91169d7573262f83336b97c861bfab3fcf669223ce8caf319f21d23f1fa331a2d89b6ca0b + +SEED = 7dfa328e90a1b849c219e3da832df9ed77448234f0d89ea5d17a3d64e7883daf +PUB = e30ce6fd5f5800389a70cd117364f59945afb180f229927360b06b4835f8dc91 +MESSAGE = e5e495d663f47236714532687a24308f942ca9c33e088f7f106a5a723518cacbbef4a68c939a6950b2dc2589f82d354e575272d42b1383d315ab8a20aa0cdc9d4df678ab3b26612b5dca66e71f9f3fa7d9e731dc481e2bc7127cea3b6203ca6cd8162e90886a73dc46c83ddefc4b9e2d53d29dd387c624e08bd8d53be928a40a9aa8ae8b1c8d0fb6a7bd6dce5f62315b7a2181f627f256bbe7e2a95bf464e6132204c174209629840235b2c39913301a4b40325d118d384bc7ac028cd4f12702e161191b149e4209058a55122bbb8b22b24683ba4f8e2e6ccfc08dc8c8b1bcfb6d60bd8f062196933df319ab16906d085730eba1720d4b02c67daf38cce6aba38e25d68ef95b2f521913a1d77d5eb650 +SIG = 1c61d53b872f8cde598609682c79f6c5df007c513a71cfb3a06dcb82d85c4b00ccc40b00e59f595393088b4cd0432855c67a207da71f87e72c409b3e50279507 + +SEED = 6ce13d3c2ec71fed83131a69d5d030314ab49e6565ef68163fff09ac5d9b47e7 +PUB = 9c7b1118fab91e0e7b192a23d95fb877cb7936cc6c8a330592f48e6784edc292 +MESSAGE = 10bbc311eb2a765e0167ff37618ff70e13f02d7b0617ae4ac06befbbe149c972a994f680ca4dc9a92ec7efa53997fad356b9ff4ebdee629541d1f4dea62ed0d2494f9ccfdf07a9310491f61c4b3e2700b4a3c668d678329a38c2eff9d8cba431fb959e7f7655bd0fbd77d53bbbc2eb8dc51dd718ed98728a181686be122b844d3da331e329d3959b5923f7734325a021026e2754e17a15108be801465ad958dbcf21df890cfe5d5b883ca43c61cedccbdb58b849ea75374f1e918e803e577a5dc7a1c17936eccfcd3481bd2b1eb075b83237ca6f3c07c19e9af9731267be82d4898eee96ebc900d48b059d51b0dd415b1c890660a88d25f5c5f35d8e45e523e0ce3336923ab43670e35c5057d56c758876 +SIG = 608b2bf6f6da05c2ac5bbfd795a2ac32c79c74153f9431dea59768ff4c225e3b693b645a506766b860850ee97ea43032b05b69e56767e8eb9d1918df9afba805 + +SEED = d45ee69a5f1a7cfdd0343f8770d1c6bc026f067a70dbe839a86f2aa068c33f81 +PUB = fc8d9fb0e4f34793090755e0328096e01e281ea351b8d95cd9116e131a5ca54e +MESSAGE = eb5ed8ab79cbfe61c25981b9d1d6b70f10b60194b4161fe17d11aff1767994aa0813e9ece2f4c5d531b99e8adf1888c30a63893eb451aaf55acd5a52ad8c401faa88d6eacf3e49470566114fd0c6a274e9544846b0ae9bfa124d7951eb26715e19253ff7edc8a70965776f23ce46031e034a200723ba3d11e11d353d7e7cd84aede267ff64bed418cb9f28c61cd0f63b6ce2ecae14b20bc6bdaed8c428bad18be4b7d66338364acd8042a8256f258a69969b8d3ca2eab3aea3706e5f21c3b1efcc254a824bb4e7ea7aba8827c8eb82786c665aa973821931ff990a63fd34a74a6d8c22a882b0b935152ccb36fcc76f4eca65d67c8680942f75dfad073439c0916065e83877f7ba209303f33548d9e40d4a6b +SIG = 156c51c5f915d89b8d1400350f8f217a5c02e2629ede9f4a30b6e71d1ea7a953cc6db31ba5c778c269920b649fb4221c6d38cf2cea2a7de3ad423e04faaa0607 + +SEED = 8a76eaab3a21ec5a975c8b9e197a989e8e030899eb45d78968d0fb697b92e46d +PUB = 2d9c813d2d81e2730b0d17d8512bb8b5d33f436cabaa13e141ca1cb785014344 +MESSAGE = c6c78f2e2080461aed9f12b4f77c989b19716780fab60e6ecb9793b4bc7ed69e5f70fa6bdba16e9bd3194969eea6665abfd630deeefa3d717b6d254dd24bc97dde21f0f29f9ed34b8bd7a013380f4f82c984fdbd95af9805b744bcd952c5a71fbb57d11f411c18cc30bc3594f7ad8228cb6099394a1b6b0a818581bdf93cce58f3a4a23e55db3e69ca9d60cfb3a907fb68329e2ffb6c65f1e828d28127109c9e9fb70160f2ef82a2ee9f9bd170c51e13fd3fc1866b22c79fe6d5101217979dbe2724dcad8a9bc69acc42c112dc697bd271eea550e9e50406bfd28245b83b8f012d34db6dbdd55ae6e575745c153d6e7534901027eadc2fcc33a5287ddbca6d3aeab8972294dc6c712b9942547277340e7ad19e +SIG = fceecca4b014fecd90b921b0fa3b15aeaa4e62caa1fb22729c70269232c33cef0d0aeea66432c128afb9a3646bc7f03a12774da8758398c2a0dcce0bbbf6740a + +SEED = 18a8f93648cdcf47133630af1e11c0ceea3de07327314c96580df775597d7a9c +PUB = 2912f41ab4c87e3937a03331802cba87716b4eea14b9fba6f546d0ac2c0973df +MESSAGE = 592093ac7cd671d6070b0027edac1fb015cc205d78bb603f378eb9f8aa388ca830db3cb23420c7e852db0b55241eb88a02cc627aa94143be439aab4bf2634757470406e842f20eb10f0700e3c2da364f588a8000f23850c12ce976f326d2df1bac13e95020b412b175bf74bd7ebbacf3ae55c0daebb5c010bf804feee1d7d49fae050bea55996f53cfe1f15a0cf20727db4ee311c260bad9682d7b965e27a9491f471d4a473aff646c7d424d5a0bdcbb8a0233f4b3060dd04c98ec98dfd05ec7247884e2d8e152d4ae52b3d5865d9efd6706a60e088e1e7c9f624510abc7a2045a2c7a7588e2535e73191dd5cf05421563f556a13e8236670343cd5ba4d466e245c4ee3b5a41e70c9a0f5e6ea2c559ebe61ba81e +SIG = 3b77394cd69f8b45d00cfe3a79a7900628a56518b379ed8a11581fc3a376e5d66807df11e70904f696c741d21d139310fa1b89a93bdc4d2c3997991f5220ee00 + +SEED = 206cd2b8114aae188d81862ccec4cb92c4ef5fc78c24435a19f9ed9b8a22f47e +PUB = 97a67ac2811f529456df532737d76bed7e387da83bd55459372fdfb27ffacff3 +MESSAGE = 480c4800f68c79f5dfc0c3666c0ac429b30fe0c5fe848750db2171380b80c8e9fec0a054b16d08674cefe2f64ec28bb6b0596b35235575f189bee259aca766c222ac0a46cf2af75774da4e34a0b54fc2ac49ec8bedf4887cd9b7be4fdb7f686902ddfab04627e26ea2dc3d97d62a4b1546180218ed8fa113334819b5275cc54afdee44309008596507971675e6d8b8a8edec4718f2d4bd735213cbbd18791faa8054174907a7ac17d7143a4757e493beeec4849d0b836f18bb2b3c9016f25af47fb96199251720549f15d149503d41095e25f26209daac39154485c3ded7cb1a8c3e83a52f5a06ec09cf83df00726b7968f64c0cbae299512fb438560f04b3b644346f938ac8e90486614cd844b54eae078bf678b3 +SIG = 73a40d9da08fb98ea25b67e721557a1a51225294d316b53149af895fa4d63cb4a3f56f688566ef6da42fd2941dffa06d497aa902165d50213a6214116299a90c + +SEED = 59b144a708abec972729a04a6c13f0ea020b4ed4a48298023a568958c21215ec +PUB = c4f4720092ed6179a082ae4d6145df3771786efca9bd9bb79c9f6667d2cb56b3 +MESSAGE = 3857bd260b8aad9d073f06765d37fe893a3f53e23de866ddac33495a39ad33ee9e9d5c22502bc1c4b5470d0e3f3a585223fe4cb93cc4ad2b5ba6d78826a53fc0253dc580a2018cc9ff1cfedbd3ac0b53292deefbc14e589acf496cb5f7670130fdbb6cf38d208953c015a0474675b724bd109f7cb89c33016751fe7aa785d099d09ab20dd5258cd764ac8daf343ce4790ead0863af43121aa527a37a11628f47869668f8eac00d80b6bf9906663d7a2899c1cb678cd7b3eb3bc80226b8b13b6e46877f38f07c3d9c86d3368baac4a6f6b93ccebcec9811474b6a6a4da5c3a5966571eed05edcc0e3fe7cd15915c91f44eee8c149ae451f375518a79fb600a971a39b9433dfa19f91931b1932275747c262eedcbd27f1 +SIG = 1a80850fcbd6e643c6ba8eb684dbef7df015159228daedcf0604709186054db185aa7baacb09d6caad01638eff8e468735a60124de0c5376e94340e541a98007 + +SEED = 8d1621eeab83270de857335c665bbf5726e3722225fd016e23bf90ab47aeec3d +PUB = becdbc024dae6a94ed4e29c80f2aff796aed8feb2c1b3790a8c72d7b048a2c61 +MESSAGE = 97facddc82cccccf788c31b3305e93eba956f89613e6e53542b043267fee544c2b0a8ae8886a31b9d321a63c27623baefea840b2a8af5b2330193ffb5baf873c335528afeae2160163c851c5a2e58154a1b0569c2d1366c0710437623b0e08c686e54fc279ed4c45f3e856868375f78224c777b13d75de10d79173552425d15a561904155f2117b2f14713eb0b04648a3bdeb3302167d1973e788a06cb00d48ccb269fa71af8ba68eae55dbbfd9594d5c2b4dc13ae0321718561acdf67dc8cfcc25bc46bb66e096a1941d9335207d3f7d11e8904904fabe3a50a3883e7078047df252f38b67cd28a6ac45c7d7a1d2a1de8d45747cf09301e01cdafd0cd99a6e91b704d509fce692fbdef2f71a5ce0b35bc15c65f876824 +SIG = e08d6caa5f39327d6e6652ed74dd1a37844b979f5cce747a606f5679f4898bbb7643df7e931b54a2b40ebdefe83003f61ca0f11112f023c6a3e8cc18cafe5f0d + +SEED = f2735d50ee3a9a65b58c8acf551663e98809ec406f73e3e7f4e73bc4ea923874 +PUB = df48a5b94a07af3c2c99b8388762243233c850dc175317d602638e5b86ab49ed +MESSAGE = ae31e94e7197e4e4d0239348025ed6681e513ce1a6e0aa0e5b979373912150ef113e50ef0569c483f7568c4bbc4703c5dacaa80a0de4e738383fa1f10d6d4071a31b99e6485143972316c86522e37c6887a1c307b29b0dd6f9f1b438310af9d8d7346fb41f9b2dd2e80b14c45eb87d4ed48e37a5260b52257b3e99787a13c55392ba930c08e0240e960def0c29b8550745cf149dee53a5d174ec065d2d6677dee1fc42057062c34e27ea5dbcdb861b9f670c6032c7846cec8e87a7c9520e27967b0186ee71b77ed6d029bbdd70949cec4a709329fa37fee002490cc1bc4c2df6f763f9858f33d750c5b505a67e237063c0486f9456d3c620d9ac7c98f1381de0effe41c18259504a150d68a6a28b0a3eea803b855315c9e0 +SIG = 6942a7696417efaa591b95e11f02d763bef5279b932a8e2a7cbb9f583695c14ce5cc556bec66799b33cb592da4df2735f9eef2c3ceca4362164b6cc93da4e105 + +SEED = cad9d21a01c7e1d15df2fbd79c516eb8c3401e9fe28467cc7b21679d4e331a3d +PUB = a7b55c15d6790b40536fcae5ad2892cd66b18689f499c1fdeea66d4a7df39424 +MESSAGE = 70702bf19c919f9836defd7b846fd9992d8b7eb2e106aeb71e60a31b4ea25a41b212dc7de7c91cbd613d58d0595db833cfe7e50584f25569602c7744fa675d156d0f63cd2b7c089c8a00686a437169826a12dc485b38c068a8007142e5163747011a07a415683622ab1e23ce577c732ba14f401fbc3043e0693a9205c19a92298a3d9b08fb7afafae0a9f016bc750ee631a5f5da5db6f9ba2692c74caaaeb4d097e90e3c02d2e3a7fb3aa000040b7c17b74564e646bea16bad611ebc0859a3828804ab4f5cfba417d254515ca3620a3ad683c46ca6267bb49539bb30e369087e67438e9489562750dccba3aa0b1b0a6c267032d20c2adb75e68df1123b5259bfe4eac6cadca6778138a37318adb30e8d669f3bc9692cc74b68 +SIG = 31927d01db9f2472f4df6f63c18ebd83c2b1aaf88d580e848854df8cba6395d3da7bd6bb9edc1fce1c7d7e1360558fcddfa93915be076efb8ea2dc5ea7b20d0a + +SEED = d9be842255e9a16b0a51a8674218cee7cd9a8bdf343508397f4ddb05f3fa0082 +PUB = 7931bc6dfa3324943aab183d1285515919399ffe0b710677f0915d3a5be51e92 +MESSAGE = ac6c55b134663e41f02a6dcb8549eaa1c013f59658d81d812f95b74009513723671945e1324f90f8a3f971369181b587bab45665f788d663ab78140c5a22c1c18d4afedc7448a748afe5bf2387003c1d65ab18482ef98922b470da80ad14c944951ce4aed37390cce79a8e01b24c7dfc1141c0eca2c7f773ed4b11806a34615513486e4ee11af08078a1b4054cf9880298608dd9b3faa1a242a452fe511604b3102c313d14cc27c6f0f8471d94555317eaa264cdf52c69e18f461e47903d21298716b172ee9cb178f08ff2d3c9c162121c2ed21d8734b2f0630d399146cbf76e028a143f2bf7bb50af0f57b9ba8021d264b00c6662f84c86cb6d5952b3d241f7dc3e700c96616cbcfb0d0e753ffd5d21ee320e65e97e25cb8609 +SIG = c93845658c9560d2c0e28f282adbd4652bafd3bb2edec17c94878f7b94d3c77afec906ed292a8dfbf5f8e7c118e8f2ca33dda7909d9b695b8ff5a1c0e97ac807 + +SEED = cfc48cc6f65811fe7d7bba85d1cd84858fd6f7edd638f4f552363ee7685f69ca +PUB = d29c10694c5e8e3f3447ed78d34dbd74a2b301373ba871b5850c333dff7bf8d0 +MESSAGE = 8e7defb9d16d036bd642cf226e32773e605361c5ec4b951255788db0a042c63e5a4367d61524f10e6258991325a39ab6b03612260c3fe3df20b34202d34395bd4ed40bd61373df781a4c8bcfbd15301060f07437732333d8e49736322dee6b22438e787d8856b70c26ec57d6dade9c3c28e27220c5670e393544ed095937298dc3adc73865f777e90037bdef834716476d78f4e6cb4961a4c68a8a836338a9f5da179c4d5e93c3f70dd35eec709653dd8de37996b12056d4eefcb4b6b3c13ba984d832275c4386ebf4a8ff7f078be3d428c1e0d9b162381f06a5b7bb12704003d91f25d1d8fd43626ce70fff59d2927768a76bf7f9ef76ff95489f38edcd1c9e9b8a8b0ef66c32805776d5ae9fbd84a7af4fa6563ec70ac5733a44 +SIG = 80c5d51e96d1cac8efd3459825e79c1e9f65af701d1d29e1f95b036707113b77984b7b3350f04077333c957f8fbc7d9b040c362651417b9899027cd33edb1103 + +SEED = 15c9f7c4d84a5a479041952e6a8cac24e76fd2d275c197e6b521929b43ba6c5d +PUB = 8633c1829d29091df71fd5c0ef640572e4b64974cd097dbebbcddeba041647c0 +MESSAGE = 11730dd45dda80d84d080d92e9bddaeea6878e4a0b3b512d9ea733808e1cef51d49048d6c78116a4bde3c64aceaa52beca86b331ab59e9185c70286a02bb5dd04f5c7f4e9c7e445e77458565f159c783dfd4d976a910e937789d2141d416ed3a7f608d26737a86b20b624e3c36af18d25c7d59b8d7427ec6c4d3d438d7ae0949dd7d748c1ffd6f28e8285d440422d22a3761202e9584f5cdb3504547aa4b685730c982cba213de08020a5e4e46a95fac4b481bea0b630abd030ddd335a20fe2cf7094aef4813956991913c6821f4b5410df4f133fe63e22c08092a0a65972722a27ae42011a807c327b417237c540114eecb9f0e96cda5dcf0246f1d2717f49b9cea9dc6a3da9b396f0270529226f5dcba6499918a6c289fe055fec8 +SIG = 1e36bea5a583767ebd80306cab233155b7b42814b43473cf45cdc5039c939744a9694b87220daf4ccd29f25cea405e7c08db2ef17f3f034dbb49cff60283e306 + +SEED = 6d2d0d823f294746b9a5512e14e73c1d855b5e4bca65fe817729810cc5ef840d +PUB = 1b6480a6a90dfb472984855cef6f1ab31eb7b3f13c8ac00fa556d20b53e5ae17 +MESSAGE = 8772721f72eaf7f73040c068a7c3753bffca7dc2d0930c6525f425e6005c25cd4c0ff5095c9c61a5d8a1967b8c86010c884e509e6b1670f79046e22979ebd354734090d3ada21435c1f8254f7b5222cd5564f064e977640366449f4e5008f870f9c4840565bf4fb5f574c9774ba2568e71a9ccd82ffc59b694f26e7de4ce2e3fd880a0eef387931333ede00dcb065e6d0f79591a2aa956df1948a265cb95750d8a233b15c288a05487c515663f93e740fb1570fbe4bd80c68e8d9297345a8a01cdbd88f4a39bed9c5ef09f144bce5de568bf3733bc53b2039a29cb3e194501adc1c10e86383aac8b0f85c67a6689bbe1470a392476313439ca88d98c021c0eaec25fb2f9a160ce5c786170be0238fb8785dd33bfa9059a6c3702d0de05 +SIG = b515f49eb32ad478692df88f07b7802c6e0e5327aa08a6366e4cb1d1e26f9e65fc81abebe2215d649100f27598273a412b624e842d8130403797e57dec975a0a + +SEED = c0cf799af7395bf27bafa36cab437045e39c903bf807548319ce44f287494fbb +PUB = afbf550ca290c905bdd92fc8831ebe3dfeb6daae4f56005253cc50951e50edc2 +MESSAGE = dbe65780e968de9e40ffb57cf59a60fd93b3f9a5e7d8ed5180adbc578ca1bc48bd9fb60a1324c9c2c1141479a0dcf0f1d07e84936526df42333c0d773e3fed9e4038de5b95ad905c92cbe040487bf55e10e1edb429a0ecc4e0e8d00a988a9cd53e2eb372f4fc4cd9537b269ba3a23cefbc8df6476e75434b81d93e8891bf417c82e363f3e4abf80a4f73aca84ac7df6337f536d63d939d92cba64be742221116069ef251abba0b00af01718bb580ddbeb79973ef10a68b4d0fa023d6ebd3079d6b32a1aa20a21e9202f27590c3f0c0cc253073c3f822aac459d39f50758b70c00710a3c98438416508522e512adaa0afd503a7ceb04fb94a4a932ce80cd5a7f11bb861263f58e5749d542a110de7c7689dfcb0c51afa9d54a58ff89f3f67 +SIG = 5bba01a4c7b25542d06912de70aa1e220423fdf8338a9e693395cb6f0dc1fbfd018e3c77e50aef90a9080f30f1f5792b2431078fe6e3e00464245e17cd8dc107 + +SEED = cdaa50e8527dc7a50fb37e28fa8b9568c37e8567e0b499997b9aed676180c3b0 +PUB = 7c56e164510268c182b423747904f1d3a5809330f6e1b29266ec46e73be1550f +MESSAGE = 94fcfbaaa303dece7b908f874cc5f095061f1754bb35780db666b63ab8290811bf1c521a7f8f785ea270dfb39d0d6ed95ab71955a11ffaeaa268e081ff3e4f2425b41880a987151e678e89111350942d820c3eec36212426663be175e5286b4ad1cc804e3e3a03b9fa3e82838ebbc2615a645f2ca1468ac4a1cdbe523761e83f4381b0c8550ae5e8c8cd1fda57191436e27cb883bc64be86a9dc6110ef3401d88a7debd1b701d9c257a6826cf01e9e2922e3ae577f2834275fb0ecda80ed8cf1801e0bc5e01e26a77c48bdf46a5c4894d22ab53e741827e24bed5f0750ffad05e53f1d5e61dfd316b191d9797ef713131a8b430abe3fac5f3c4a2ca021878b15adc8c5f542114260e687a9d199d230c4e0d3fc696993b59ccfa3ffa9d8d2fb +SIG = 137bd10a50ef609384fe668768fb871de741ca0f53ff8477d7ebfa90aafd5e2681fdf1b89250463c15db8e17a58825fe9427de089c34de13cd07bba18d4aa40d + +SEED = 0fdea9bee6288f947e0adbdda4dfb2baa03891af25024a5e138ac77984d00507 +PUB = 70abd86430d7e8d63209c8b373ec4e4b79e989e6725facefbade3c7574d23cd0 +MESSAGE = cf72c1a180a2bc37d8478d9a7a39acf03bf2a50790f7902f81121222d31d3ec916f4f24cef9d7c41dc021b0e8487bb892e47305e54520303e89b30b263dac4a9ba375d46c40fcf400535c959d2b746a7fc970cf65b472e84b5f1d0ebadcfa1aed6fc47facce16a366a3b1d6e516813c1960975f8f2b43042fb4eeaabe63c6f65db45ddb7db888a19a9d7ba6ca479fcd70c5d1e970f12c14f4d24fb7e2f357bd3a94aa1b868ccc0847f2eef21853e253bafbf07c4e6176a1ef077167841ebbe5629337157f39f75c71d21e7e96c51a1b16fa8dc60f0b1279fcda2641fc8591e3c492f15bf83caf1d95b2cd91332f1b4202fe72862ca2ea2ef92c11db831d82f8fc3d41fe29a76c211a758e2f71bd89d2c6610f201429f348d56e10e3b7af53e27 +SIG = 80c42dd5df03b285a86ac95ce6669f786a978a813a9d7b8c6a23de76fbd09bdb66c5dd1cc9f1a176cba388d5051764a32fa27f0028ba4898068bd01a3ee17208 + +SEED = 03d5e466f8298ab5438a30976d1322a7215a642dd5fb4c3f8519409a7522f092 +PUB = 4b3ed4db080e2a452e16912c14504424920a60975604e4f379258d1c8b193d6f +MESSAGE = 1b47b70013cb53e1f8f4971e0f39563ce87edbc2cedd99e5a35585df8b00a852f7b9c97c7e4a5465fc5605ae8c5c36570a99201a7ad6031287ef0c7b2ba6e57b056d0fc8d6ca43bf6cbdab098934b403197b525d22d45e6b29c78f8d6183e41ffe197dae25ba22b06669ae05badd7e1da6932a7d054cbab3f54e5146223ad8671231bc16fe62679bd2817a6b80e653998c4949f81ff53b6173163e11da3e6d3c76d84c713225b4173d6bf06a85b6988a48be4359cb515503ca563f4353f8e7d45e4d94462c89a04a00f1b3b0ca6422d5db029c507d464834a20c78a713661d84edffc496d69282619894437b4487954cbea2aa7261e6a62b6851154a5d25fb6b4f09c59473d385ce03e91ba865eab66c58c0abb0b7a78e4be927e55460ccd70d82 +SIG = 6d7e4658f26f337c98e03f13542e2f39440ff7bf8d88f3f6dfa4d64948cd96b79051492fc28f65f2cc0d23a0c4d5e2307bb1c47e11e53b371f091b69f80dbd05 + +SEED = 76cc18a1dafffa100586c06a7b40f79c35fe558c339c2999a5f43875cfade03e +PUB = 4b9da8d2f137dc6c857a99a5998dd89dd5f05971a21e8c776670eb47bc1270a5 +MESSAGE = 4522b1d82373f7a318221e7e57617503ddf44fd53997522a1d963c85b708d0b245de372ad52ec7f54f6213d271f7c91d5a1d36d134db389df0b081a06bc0c7a4875f724092793172c9115641c6d054f1d992e0fae4df58695f0ea3449d7a4b3a8857e19803fe49b6d52c9ff3746a574a2756956579f9fb809a0edec92c55e95ffefa3d05f165822f464a21999f29691f6744ac5a3ee49017880645e837edebfd2e0f24997f041145a72e2376ada283186ca2b836362977195baee30a3acc81b243f3ee376a2c4764c783667a4b1177e7951d3e3c7be4f1bd7ae8c60fd5fb0fd91f0c1c14d0d2327e8f20d92c0dfcc53870e9d99fdbf9dd9a17e882509ae7baa8653e39edc8ee569000d624cb93a0754a798d1f811f6a0ef5501a17bcf25fd0f91626 +SIG = db74751c66e6b1866044dd9ae99f19e6334f179e79d8b8e0c8cd71d22cefb9eab7e3e7a9c2da225f2a9d93a313d1cbf1b7fe2597b8d702bf3017a6a6bc7b7b06 + +SEED = 71ad980d58ad8e7d33306689358936a372d5190b24ec7f9bde749cb81150efda +PUB = fd35a75fe5abc20104691a24a4659440b55aeaea902ac3be274af27aa8312869 +MESSAGE = e87ae073ff5dcc5485a19940e4e3ff263a0618a9025ad4032dfb36d171ce881f71c18a49210eb45819806142e2f00db3041835bf2c3bccf1dba02b8b5a5bdaf8fea316c0623dd48a564ec166f037d587c8c01684e5e5c0ba9dba4d23b49a0309244e282a51408622edb05704747e0cdeec976893777071098972c113a8ab639c31f1613233ee460eea8a8c10e1e6e152214529878cf1adaeaf78cf19bac71361815bf57955498fab4f0f2b7586c86f9f4c2ddf8972f9b9e0eb636d84bcc14385b2d038be55a963702efe225a50bdd0c4da92a2a6a09100ea04a211d396458dceb4487116837d139eb0f122538ed3986ad0af4da2dffc89f3269ca88538086e691e5beae9581e7c63d8e612da2c47f74dde1d94951eadb0df60c3897d2a3095c506093b +SIG = 81670b1029e481e9ff3c171f05c16861c846ee79cdf2e21e3bf952bcfac97565f2b1dcedf69d2e7eb35caf5662e8bc671fbb96756a63a596264d1b7f4af97e06 + +SEED = 61594e24e75f996b4fb6b3e563f6a4f9915cfa65ddb199b01fed7f8ed7824ecb +PUB = 8627d2141579cd2521aa076800ac354b9e3a47d71cedc8547434268225e33005 +MESSAGE = bc01b08c7caa236100a012a726477d0ec389dbfadac73d5106424c5d1f3d1cef1695cfd93a7062ec8bf1067047854920162f651357bedf1cd5a92ec29bdb5dff716e8f6025515a9549ba36cdc35ced7c5c0c368e6cd92f2f10ae146a20728c374bba509641ce88cb42fff0cedfd9fd67f310f9d01a3f3690eb21db17bce67ae35c4cd24c209f09f044759d8d5a7d248e2bd966524ba8c0c28974726b43bd05de843433cc400598922974623d9acbfdc761c4c04375a952ce54caffaa96acff6d9dc278742af476e1865cb8c20d13d1c1900863bca231e44c6b0d47cb41d510f7958f48f304d03da033484a3e1f273faf6983375b7d3be03d8a0a002def6365beb2fa8ccf1a94987adcd33d0da1177fc5159b6e56d004301e921dbc12ec0a73f413cf2c48 +SIG = 6302b3ff2710be306c92b9aae30d23c3d4beff394e63201e6ad11713345c4fcb5cc8d3dd10adfb82bb11a189ce7ec3e4222727624fc17881c14788d2710e1608 + +SEED = 54e6bbfbf8c06ff2c066318c2ebf03d506547bf43c2d7a5d4df305a3032b7138 +PUB = 3b71aa1def666d9188f403f82ed30454aba5bc9f470f6eb988da187c92523284 +MESSAGE = 0318d7cb4805af9821dd3f914b0e076fea04a7d2db3a59a00affead3325a2be40c1f87f53276a8552604f228b976e288b9be906a7bd25b2ffab8a8af5d0f6e08786fd034e2fe1eb7ee033979860dd1e5327287e9e615f5dc5a960f17026b56842fc8d44cad002edc8501cfb956001502e4ddc81a7700d9c0be88eb4aaa64a6cbc39de82f13c11086de1a4270d3af97284bac1caef1d3edaa1071666bd83b2ede3962d98b9d93497ddfd8e97dab3089950cf30ed11db77ad1437a0af5889d8efc44e612420e3907267df3acff4bd3fb6e8ca5badf8e72f9de39528653058524456a81da5f84982afac34bef5f71e91f8f90938a6f5f1f287716de56a0946d261e87bc775ce189e41a77baede7320a3c608fc971e55d0a773c4d848d428637f11b4e4460390c +SIG = 3df4d09079f830e3f982283681ba37b50f3c73de2c5d22a291358ebb1fb854e510f63f9a48e9fff7fd8311302ea3e969394e6d49c9e3182054942f6a744cee03 + +SEED = 6862061be0de9dfd998118204b2b98db3ce7d7e819dbc10794af0ab2b06e8434 +PUB = 9c5f7c2265dde1b25e4f27ec71580d52dc89f2c3a712bc1ad5d6d69e711e08d4 +MESSAGE = 1740dde8434a0d689925679b0c180300cdbd0cf6a89ad8fde34653316cee4c571a4105c9e9e0284238fef2c38a09157c5db94340571b390adfb69ff4c0dc5053253a679d42cc1f1bf1ff429229ea0a5044c6f79564e0dd287f53f015b83187d9ad27d91039af062c437b1575a0eab6aeb8aa0d27b27665d6dea9041ff9963a3118b3298a8544e3fd69ac6877e3e4052fe4422bf03560b2c57ec531ee8b5ff53c28dbde35bb45c35077636e6f841b59d7eb77bc7791b6093858a3a80a3aa6d778dbf53db9d06119c50b71c791c0495c576d1b59d396873ed871485352c8299a359da5ee9d7f36ed1455f89851a30851bea719685aecd08f25562609dd106630735277e1d6519bb1687de8b8c68b9671452edbb3491da264cdfa0017c512d2769759cb925fb664 +SIG = 965edb34e8ab8bc3204a3201d22186372de4242600297cfdb57aa1df074ec50ddf10105e9d4c89a266c34db7772aa94cba946429e68ba62bf9a0ac90f5f05b02 + +SEED = b2250bbcb268d2477c8312b1900fd99982baa29a68974fbf8778a1228dc97550 +PUB = 44aa8df1181674b05ade980f7eddbaf3bd7422a920287cb2d2db59a063eebf74 +MESSAGE = 7ef0ae1336a6fab37f99da5fa7d0dec7409c072623ead84f241d53d0596b461705fb1b3c537d36b89e8960febb4cdc0d427ce2fc1be58dbbce151e35acd8b6ace40a19822914a4bd8c4af632f136418ac49b184d55193ebcc32d0d798709b1a8fe294fba8a1fe72d976b4400d4a393242311b0f8cc994e89475b0038ae5d8914938e8f6e87c6f50b9d656c45d7b14231efed97f3c90668913670bf5be2efd5c270c7cbaf01e8572e9800978dfe2e10a2fc0440b855629bf9cd409ea941cb69226cac771b15ea77c0326848806ff8d2e201e6e26cd5f45430dadcff8f59c321c1c9c6a29b94882935447d3e6c2e8804b1161576bdf0320fe53c307d9cde426077a7677cde3c1bc83e18e60a0c4ee6dccd877c213a8e4cca640ee04929804570ae1f96157c04357a +SIG = f2b8d92ed51ebd1000bf9dd3411a9fa9e7aee54c4c86e24ad0f9ad5c55643a12d680019ca03f216bd4bd32c9ce1cd8a528c3ffaa5d5b1dc91a4be56f0e2c5e06 + +SEED = b809361f55cfe8137fbda880fc62cbe44c216e141893346302b336045de21878 +PUB = fd23e42ff06644ead347abcc1b3e03b0e88593b61254981dd8ae59454e61b3e0 +MESSAGE = 17ace197d083aaf1726f53e5ef81b5a8c09222f260ee5f1f5404ab78d900d489688449b843bad3c498aac6d80b4639b76e6e81c55276a6f9c7cecd70b71aaaf2018ef76c0e30154aae86a5c86d4e8d0e4ec68cc427060bd56514f7238086bbef5bfca1f5671b18041838fd013572443dba48fbdd95ca740b0daa4327164a1e34677249708f77bd793e7caa6638b5dc9fbe6f0dfd4120209097209c93cedfaf21b6bf59ca6e99e6209639444f0e827bbcc0a61c3a237ca22a283213223ab658e712c7556238d3a5fe31722d65f5706ef6d64d73232d3043220f14e5cfd3c2c83a83d68e20274b6f96b29de040cec8475030b6a8a87d29808dd381795c3d22acf5dc193b720d95a752d9f123c209ffba004e48dd06dd8c9e172bc9e087d80bc5216c0b0b6e77031241 +SIG = b5b5950d3772d2eef88e1b0f5df5ffae2f2103885e71446d346fbb5daef94967a6b7b6e4be885110065876c665b7812de46ad31ec3bfcbeaee13ed0c1e0b300e + +SEED = eeef8074c2eb9a1cee2f2d3bb05325546a9fb7cbe44b599461fc5885f5fd9cac +PUB = 9b892941a0573b7a1673ef480f081168d9b7496a81f9177dc427ca1f84cbbf7d +MESSAGE = 9ae39feade905affcbedd2e72a6f2429b3d1108e5bc1a9dbaf490a6299bccd94acc413adacc918b14afa85c78bc168cc00740c3da0e08183915f79b7fe3868ce2a7e886b32ad45009805bfb81b8c07b3b1022420c0f009b889d7fc22fd1997ae34198438ca94778575122fcaaf96e6502c33a75a129a2d0dbb073d93820d9c96683db318990be3fef4cafc890afbd9b1504c7439a08a065e7814ee4f9b6f57ee16baed3f0e3aa35dd23d3528a458919ad77048b4e2e6172346be249a50af02bc6c853304c208ae0ba02771262a0d8a465f71fa0635e53eb2ef0a847d56a0bcd7dd3fe077c92bcdca3069a4a682a2859928315ce3eb445c6072a71492ee82e172a20be0b648b756e6c775376f0c7c3df8e64288089c2f81ce9593c6e08bb1cc1b27fcbd392fc7952c55 +SIG = 6f7101984fd6892e2144b7d45619830caeb6713bfab4eebbe217c5becd249bd9d752eb76e9fa995e7c71ff7df86bb260cdda173ff5deec6af204b7dde011de09 + +SEED = 61faeb15f857f6557862c8b8c7ef41f80545520996fcc1127b8c2491822201ae +PUB = 60a290c0fc425a0874673d94f9bb1400f9dacde9954f9f5b05dd48ab747a3950 +MESSAGE = 253b566eccb563bd6e480c69739b8e372519a3437254e0e5029cac86c71638f2df2a6cf9e56db2569934deba90db75547e3671747df64d6f2aaf3c110fa67a7094ccbe4cc5355f0d43235136ee26dbe37f4225d3bbfe245595280585fb548f894e86c516102580291fa7a02859557fb98eb588870828b0990ae9d74f3831da58946bc7a5ce1ba498b4e8be8989a3b50d7e8789f56b8b4fecbc2a33bfa3ef591a0fbcd932fa93e19f3a812ae5e4e3b4b242be7705a5874af73be310b0058266a378f23c1348524715b0ccc18d6634b23636c316ba6a1dd2fd5092c06716a717b54d0eb9fc7f636f85bbf225a2cf035b4b7cfddd75351682c0576c6b3ba5a1c0b25ec594e7709dd09a0079772ff3acc67fb6c1b37bb3742b726e77e80561d9ab73160b73362581da5b9c7f +SIG = 31f90f50b2dc705f1d92f12ca9975d76f1b2826ada3cc185b0ed6c83860777bd8c489b59855a91f64839d49ba467985abb376c47a4908b271b8f77c58d01fd04 + +SEED = e6b9cd4da07cb34f30391cf68f0d87c7cfcf68f810ffa40f9739c95deb037f71 +PUB = 569ede0f04630b43a04c5a66b6a5636b766c75965984a7477e15491960fdd864 +MESSAGE = 69def0523afda696f8448f9c1143abc26533e68695a090df0d9e43d0c0eff43583e6f709d2043c815fbb3f96ba2b0dc3be6fecad5dd38148788e4a0385a9fe7a921fcb8ccee0e4d3aed4bc3d216d84b414f9580b02820c03d92e675e685c4b5851f363bb4df97b417c3fd90022eeafa20dfbe82964f2ff073d255758fbe567c76b2c35e2b09f8a8d7afa32c6f5ad01bc3ebf6e210606db038ecb6820ce1ea4dd529fc1adfbc2a138565ac6d0f4a4109bdd47b8aa6ef4b8bede454680d1dbdb75fe1eb2e548d5de7cb6d792fef3aa0d8480a6030b30f104d7e76b58e9f476ebf2cc832923b50c50c111c3515fc518852323426ca778a596d3195da8585d8c3aa92083313a6e6585b70c98b185b472798a61cde77e62ec272f14b0d9eb4f22f9c7c05817da6fdefe7879a584 +SIG = 1e375c94bd809ca0cdd02f89ecec4e437732dd20a0a84b254eae889d8070e682d113b0be22e41e6cdc3be877680e7eeb7f0995e6622dc0b434fb0949dd994b0c + +SEED = 4d9044f17b5a0977dc5aa9916a924300a244a1ef7f060277ad4978351ea64291 +PUB = ab9c0692a606b2567c19c30f9faa3b4cfe72fb237077767b76d3b2ae1490a6d4 +MESSAGE = 7c8c7189af67327af1c6dd2c30e975f190e3b38d008b4585167e0d450740d46734587f6d208784245cc5cb062a2a277f17ebb2746f9bdf4a8237ca479ab0a430177e19ed7dd3622576b14cdc08282214fe5ee4d76b43c16ac90864c51be8aed45d7b980df7917f290fdf795846465f27fcb7e5730637944f0577c92f32375e995bc0cda9d7196f2c0c1ac8b80d12a0439963ebd2254c347703575816e7964c13d44d629280c312ea265344de38f3b18d9150f8f924afb44b6bfb9eda513d59e65e2ef18666e6c2a21c4018665befe92cae581d3cb14e23e97d830002cb90931ae0210068af394ebe351be5b817f3674bfbf40049030e4fe505d34a1d502a2c50d8e638e926c230676b7edefb6bec77b1c0ce609325287ba5fdd7a9976987bd07fc6a4344956ebf818f08586c +SIG = 6fa48aea4d5b9af65af964cdb709443a11fa84f7d44acddab16e04a6fcefb27ae33c05b36da13c23de517d6e6ac574a03ea630ba4fbb958131129aa7f1354c01 + +SEED = 75ad76bb4c0c229a5adc79e444b13f88a96459862c8cf0ba498d0c996af94a7a +PUB = f074dd2b9c1c309105ec951bb5812a91ddb54023b3809ab379c56af0461af617 +MESSAGE = 0ca8c1c74128d74e9d0a7bf8964291d074917f2f9920efb911520567642a50a615abcbd00aed4abbfef1a983cce333e1d0df3e6404fb9043c6803914cd5fffbc66a0790c7878a24089a571f895662a1d18be3f01ff97fb3323334b6f5baf96551448e4090d033c464294d09133b151d5b5c6321b50e2241de0ef6f882889ccf4ad3540d5a1e3f7548fb13be71c16516606e79d0449c2a08e5dc23148843c84e97ed24069161c8e75208f33e95b3e10d1d49a2faef9d986ab62809f62ad39c7cc871f375a4f5a6faf104d7e11b890cfb0589902685216ec07cb8e8e9e7a7c43635e23212b69ca3b7ed54f0b97949e3d9a6662f8e4b3ab09cd495294c331c047d86ee785ff658bcd7fcf9c480605ce05e810068d60fc9b26b5f063eb9000d2657a5094284ac80f1375d0b66d6f5f +SIG = 0c4643a8be6dc22f4beb6bcc70c6172ec7608378653cb4e99f3ae795eadf4e982a297609ca7938f5df632b095628cb75062d3d51fc0f3323bfa7b22ec4d47205 + +SEED = adc6e9b2e103b62c24ad4346410e83a1a0bd253e4abf77911850c6d9666e09f9 +PUB = fce316e33c910821beeddd634bedc58ee57999a76ece384605283b99b543b78b +MESSAGE = 8cccd98ebbf2439ffdfac41687638faa444e1ca4b63d13e898eaa8355492f28813ab813fd01510e112be106b2045d30f63335d248904d521de181abac03e3d2cb2d16c44b3b012a0c51f9901aef9056c724d7a2c6b2acb0a07555940e4c6e21154890611adeb6489f461d3e5ecd1af5a4d2b0adaf41747436eb414757a8fe4775674e3c6e5de4569d6fc6c788e10905eba32c270a393e6f721a765294e2ac99a9b6e534d3df08d1db97d602ac3195cb0b77f5bd4acaf737fadd6991f0688abc74918047574eac28289739a664e0e0e20574a2c25fde49d14539db1cedd4a9204a70acff0a62c8f25cd768ffab15c4db316840a4d1bc92e212670be07c5bdcf537590607dfbbbb4d9f98b89da0b4df7d88f3eca4814d16bfa20c8d2fa94f9f259f2ee2d3a83c9e4171b1a262c4b99 +SIG = cb017d6d2682c9854366259aa35f30d491cfaa930998c297dbddc6aded5b3d401cf76d80d8a2764de131718b6e0c481d7196bc72579716b0c0f6ff053e68c50c + +SEED = 37fc1beda4060b6c57883ddba0776c2bcf5ac28a651326021cca97723730fbb0 +PUB = 7bd7bf1c99dc82e06f08bb454d8fb288a57927e07ff1b12af15ee2c12fbb6b3d +MESSAGE = 3dfcac0265a024a83cb932674489a163aac314bf3d969f27596e451733b99deba5eeb779210baf95bf545a1ae6b8a915860693ee890f939320e06a844483d18c6a1bcd03c638bb7d1fe2a82eb448a311b1302ea6428f54a39f45a4d560be1557a2b254c45c137f45cc68356836e21bed0b7f73a518ce09db0be393927c339bf2a4b5987539404ce650284de12e3b553b262efe23848332ccfdc35e791a0ab43f139c71ed0fcb2d173bb377ee46b1a9dca9277e77df855f2830251e31e26acd86763c8d7eac22c882fc174f2b5e75ca6ad1ade03f942bb2a13bf541906159158c68363c7480c5b27a99320f8283a2699d4369c071c50dbd90b7792e4772efbc0b195bce84cc4dcfff7072a48968db69f9feddd0f9ced659eb5db7167f35f988cec114887dcbfdf27d02d300b3e1abec +SIG = a01dd65fada27039f168b123419d8abfbda48c572ece24fda06e1a5ec31e084f4ee1cbf9961e88ed51e189fcb7f5f235de1e5b28d08f2bfca190b0f019ecc207 + +SEED = 8d42f4ddd2bbd2b827b0a0d31d8f758ebd13a1b9b3712228948ca610bb8858e5 +PUB = b7354898794f9db0a8af6eeafcdbdf011d3fbef0212ad938a4a4ad27ab16ebbf +MESSAGE = e3a2bebc0496d8974a8f4061880369314ed9e440c1b77e26fe5071ce694ffd2136db0c4d5e880e6000083a75c90d3cf72b9cf5a2b1a9002c2701a2ff59b0699a8f42d79dd8a5fb71a8125453d91fb80080a3f0a16584282f17ec7dfdc2e5c69c4d9bdf484d55944dae273f211cfb76ad37da45871365439af35eea1fbecd4ca679b59b5e01bacf49c7f4e5efaa406ba1daeb085482af5ded89dc6885ffbe3d14d2931b83897e28ad06e5564e2789baea81bd932aa279fe8e324b9a8ef111c2abe2f137d4bb50d8ab76cebc0bd982a23919751ad4d49e88eb14173d3310289a872317e4a451e88d54320891870f15b2d53324430877a9fb5b49bb929f211c5b89764dd9c3a595a1451e9f85a238540002566e53a99ed1e6ddc9b4853f455edb4cf1980d56bbdc1313a36e76ea9cbb048a +SIG = 70764be39c6dca0f067abe1eca490fda951fd4e9499695266e270b9b05eae706ca8d1ca6a92d7c488ec6ad8ba11457a42a5e31702a9c2bce892dc40535c09f01 + +SEED = b62de5a1acfe4ca2d1f0c132afcbdae66fb29a02f297fbc2407fadbbf2454200 +PUB = b63b2d0bf355f7b6d0bac07403411c40afbbb2f707503b3fc2cee8a1c7d0a838 +MESSAGE = e659e51d7b193c4b8e2b3ed73a9d7557ed2bab6153883ab723592f730a914567142b3fa435db3219f83a542dc7a4bd805af666ea865b853146f8e3a9fe870711f90d12b0693492af2a1edf99a16458f781f1266ec437a5296a822ca9d69ce844b5c59097a2a56f3eb8fd273a636116db774300922d45b744657a692f5e8bfbcb06d2422818aeb51e7cda68acfbeda16e7c79580dcccde24e8e3d601b16e063b43a6d0d1407552f7504f5be19882e4ffe32344f5f473e73a8f6ed37b0d8d9e5e0a0dc9828395bcbd8f3a4e3124869249d058be0e045de0b1e12b1c83ba0aa227c95b82bf742c3eac0152b33e6d19be8b33a35bf705daab10622a90aed022ea6e439ed50a9308437929924ba3ab111ad0caa6feb0a6eb165824ebdb0866571efc07e5222ed8686b14d9270bf76b945d52014 +SIG = 5cdb00e98de73eab480be42f8a8a6163809a0d37101b6a5a4eed6a0c92030d09a5562c729080ce6f6594c8fafb1f594772db7a90a9e7da15896e82f70569390d + +SEED = 9732059d7bf0200f5f30412430336be4ef1e3cae62938ad08729ce3ba714cfd4 +PUB = 0de8425f5e30b2b8aebb8072009a30cf0411c3c8238f4e4208760c56c33e434f +MESSAGE = 1a13e7ab603b48eb896fe17173fb31950b0dcd5a35ffdbe1371c7a5bfba593317589d9652d88797729180b8d0e515abfe6548f160421e537d5c94aef2b34c7ebb097420003bc0f361b423e7e14630a803c118202540049f68c9cf46fae0368d162e400d77bb4523cf6c753b975c245bc99ed2f413a9d06c2da6ce0cc0987b6406b809e8eb319033d2de9131dee3b1b7b5c95d653ced8fccf998da1768511eca4d3c5f735adab96503b3551803e4922635095ef811be4c08a6cbac917cbe6cd91a4ae5a330ccec0e8e815371217a3de62f2d2d61466219833f33447132f4d43350c58cbaf422475edb128c56d80a495726b1fdbc56551eb72d0f4fec26ba8bff5eed6774b85039a5292834b5d1cc1b09ba0a3954d29323673f5e71276a12ac4c579355bf1ecca48e6a716b9fcecdc565c51b9 +SIG = fba1749b641dd4df34664bc43c00468c7d75e84afad72de473fd1e9c87da15ea604fc2549a1a867fa80850e9c2a59cd99053886760a8d9764b84dd672676720d + +SEED = 9c7f6f379e3857007e2ac6324cbbced57ac9eee4477813f83a81fc8cefa964d5 +PUB = a54ba396d687634d3eccf41c5782494f5f10a521a1e5d388523d80eeba5b0b2b +MESSAGE = 3f2d3072fe7383e541551ea9abdbaeae6a464ae6b9f0ba786a441b2d08da5bcada3c5424dc6931d6b39523e2de0a0c2e4e6b5b8cda925e5eac938416a2c51bf13d49531d7ec7114b1c82feaf90f3f87591e397d02702f8ec1b30d99f5be7d2203e4fe4db2ea47e7b4589d8ac506248d7347466edbc96ea32bf3a6ea7502dd60c9e84902715ab2c6ca68f5b00e1d909d83aa6ab662d8aea870ecd861fec69f2eec0ae677d2995b0ed688faa8ef78244e0d1195697b07122ceaa11f5a6ea58fbdfa2e2ec2df9d18693ae96d47127556e91f0864982c13419b04a63f208e730d26951882aefe001bca3408bd9862748c6cc876c28cac3bb2eb3395818c2091e0fbd7a0b4468c6b0d00cd008c11c3c3ad01080a1f5a40ae2e4b0c3a071efc8e1d1ba6ace6d4df0ff19829b0c680b3aeb759177ed34 +SIG = 65685f9ca5982e15a22ba3c83a0348348482dfae57cea178f0780c057baebe4af632f984540a26019a7fb34253c9ece7ff308ada233ce0686347ab5b21ce570b + +SEED = a478f35abb73727b6be6ee5e56eec323c9517882fd6919360ebbbf5d5cb8b83a +PUB = 7a6e266a54d135dda0009ccda8a94a4712ae5cb14761e8436e97c4b7814d8e8c +MESSAGE = 0173a34050b43748061ff8f5a3d7c43b6360847786e8bb75e536fb47b645b214f221ba24d83d28bc025024663e534f90f6e83a93d8bddeda2cd8808155652a908c437c2db6f3ed4912f57ca5b97928a73be964af59df4439854bb006fc295a87b7b72239c7fadfec40715509d98579daadfb8d524b4cec6620705efd4104c297144aea722974e12c5ecee5391ef2d93ac2b124e4ac496147c8b70363585d7078ccc53e2ae593350bc25548a0542526ab00afe477a0f4b27397c72bc74a8a8ab156e62b8bb47c3fbb4b34913e459687476bf33142c614702107ffe2cc01e25fa30275e1e2e63cea9168e4a47c02de097d4d853b27675c5bb330b94a974ead85e2bdee8ee17cbb5653346658df2f91f6bd739491dd71988b3a976a3e2e7a9d137410f4acba9feb5f11798c9a43b6adce14365a7c6d +SIG = 9d16fd40b9f8dd9b4a1a8c6d703b9fccbb940b1e0ae77a5970374af0cf726f4479fd30d7dff5cf53494d9a296ab6b9e46ea6c136b4db2c71c21b97c1c8254d0a + +SEED = ffe825148c0959b3a68de86ad8e8af7fa5e078f363dc124213c90020da0c9089 +PUB = 139152a0bd22962dd919ae3e0b1620e03c033c2ad0a3979ec6bcd1705e23d598 +MESSAGE = f125780d0cd088530f0c87b70bd42ebab56adb5ad4345f929ae5deae07fb55322153a8f023d38843bf5d6a93fe993eee71bc2ee563b25a50918f03efdb5dbf7269add69ded3e66953895620d9b6cf46ba2348f8d66d7f092235e378c1e3edfebeb78084bc8dea013f9933aae14a041948276d01f1cb5834b0e590e13d931d19292bb1d8041ff2fe2e1171a2e0b9a059821d0924dde7f3b1bb59813f5e3c63520aafb8801ba62c7097d4d8cf437a568a7f0087c6ea0fce6e568c4883f1cd12c749d06a6feb278f1086a8b04769921f78a9959062ab06f98ee80c2c7854ffa760f86a89ee1a51266053d195e61bb1dbd18dd89ff394e408ace0f641a395d56118ea72b7d8adf78b1655ecece7e8250e8a3a91cb8fca0d9ce0baf8980a387c5ed4318663280e5b4531f3187c47eaea7c329728ddd0e40 +SIG = fe4e89ee31786c0a3d3de3649bb93f0b8aef1caf5a832ec5e4067810705adddf539b8f4e05ad08cf3479e45b42c96528f6d59a4625703ddbf15b63093965d80d + +SEED = 49aff421a7cd12722aa84c48c1fb1c5f8d9e277d0a99ecbc9348c3aaa74be422 +PUB = 88d2c26266f493bc67578ca0b1f51160cf0fdb6a09a906db9faa686f11f8208d +MESSAGE = 70a1ac144b75fda75586a79c36fd39cce5f5cae2e6375852d3b62a9630336a293ea6d2ac6e5b57da21ef364a595bb0750f5bf4d2b320676423870e4b8e0869601f16680619048c4ede276da69f205a70176e25ea04bd089763e709ba343fc8831e52044eabf9441e6997f8ba1aeb9ef0f491170667a7f5fc9627cbd0551b76be27283a4b0c5f667846688226a115ee8020df08042b19b59fe551316a6cb6916860b9ecd74154b4051038a17352372ec14d3c957d2ef50ff786189a8aeb9c08f45eeb5eb8b040339974aa9798c425d7becb228c447a6d0b3cef271893e0f7076e223a7e87c6a3d270a033bc97a4565edce0aa91ffc3f7801775a6f29b230245bd71fa034353de372395d1bfcbdebba081330f7c076be99c2cf4867f15b78d52f46fc7391c9cb95e5d64643baffe72a8e3a650667fbb3e +SIG = 749181284df05dbe5974b91782a1a76ea08642cb0f0c98db586c575c210cdc8b651bd34b757ae38e4b6be9465235bd0eca430e26c3eede561c6e824dfa200e0a + +SEED = 703a6e2b62d0090c61d8659b6a963e03c9d62c1b38f7d70e5f9ff05590cd0360 +PUB = 370c21de6ef2fab534ada999869c90bc9b92ccbf249b79d39d95441d1ede210a +MESSAGE = d42a1756e84df4b4e9773f86f7674a2cd78e71e40aa8f644e6702dfbc2c2c5ca90fc242e9cb0099cc8f2c2d3136baafc0ff695482fdacdef9f565610b6e1900722f435c6385b35e9f6c436ca037e03f64e2233dffa58db3b91cc1daa0bb0c54c8a43e469d2cff7fa2bf8f5d1d877931089c82ed89aba42f2ee2b86e445cfd09f4cd78b35191bf467e784eef75dc987e046d37d4d4e8e9bbe14af80d03a1f40898384b9d3279fac9c57fd9c7eecbe19a5acc15033b84e07fd0e409bdbd5a57f65641183a6c0a8ec426d1f1d223166ff0a1900b2e92b7d85835d019d17775e5093ccd126f90f63cb7d15cbeb531324219cd64ded6714b21a65371af07210dfdf0e4e58ddc7d59f4cfa65c421d814ee2c9bf6dbf64873d579b09ee5dcedd733063e039ac9a5f9ca4c2525a4cc8e984da7185e2d64fad81c8a +SIG = e5fd64da028800c6ceed068a5e596f1621c70a8cb138b31b32647eb4b07bd2ecc5942c18844f367033f67398e314ba2c7ccf299c069787777025d845f2aad60e + +SEED = 76849c188e3edd0ff5f8fb874dc0456645518445e41a7d6833e616c3c48c9868 +PUB = d670e2ea07db60c22ab79a93ebf49d22a6245ee3af07b3be584eda694c37729e +MESSAGE = 1eccb0bc8eca3ab5bee68c5f8caa34536766c705f50827db7ac375d4fe30b58ffb7e2fe490cc71a8ff86c006d6174d05793ab8a55dd51b06de417bc0ac452cdc7cfb0bb00362b6765d20db23eb1848027064a1d9091d3b10ed776f28b76768bdfc08f0bc511f76faeba76cfc4cb5c83dc9ebe8a8d79edca923eccd524009cafedc90e3ad87d1392e1fccf4e60ccab95dc0ab54bf44245a007a96d46634b1b2965b829c3d7daa765972b54a7b365b6f34d77d7176acd8d894f6b417091b6c00edb7a4e81379988bfcecb692e9c3c4310a7e240e5c1063cde113f22a684a50a112ff47d3898812efb92637072b86163ad89316d221195acbfad0a03a1fbc2d967fe83f84c8459fccd490b9c5b3e55d27e9484e943c417f2128d73701da28f49fd3683f33a39cdee234bd305b9491e2f3eb621be3dd1dbbb31b +SIG = 7141399d51daa6eb4519bf3f01b233920fa908fefa612f0cd7d5af8a9a3c44190e3f6384a8d14d37c97030ef5018cf8aee8aeb1569a73d84862a59b7df72fe09 + +SEED = 83ae48ad70da0bb3cdf87481ee2c0c8571c2ca986712f8bc2329e9a3e33383c5 +PUB = b785309000df95f5a04f7d89c4113301057adaeeb29bcd28d99371b537bba2f6 +MESSAGE = b7521d3f71c679fa7037fe7488a641f6b97c49454acc8e36b903d8f9ebb54d89cb56efd19e04ba6a7c8f48a7d3ec9decd3f1cd0faf6e978118e6adce9c6c6be63c6a6a1ae21651828479a46bc9a0f7943040f940a0d470c8e577c5d575cb53c1bf3ab1feb050dcb6fef0ba4447f299fdb9f27ecb0714ecfefd74bad7b122a462c24a209848a03389074578c5bdc36396d809b0f14018da64917e6bf87ef405c8f3e333ff9c3baf6339667620794bb4743f0514b5de7d7fdd947a7e3501ee88efad159e33a1072fbb99c7c71e9d13a502d5a07c4f817eeb7f0c5319aa41a96d5ff4f15a73c29b571fe211090e172c8db518624612a5c371a9d7cef6de35ebef96e88e1a78af3bd5dd35251ab54d73718f3e70d2d59021531dc73184f0fc69c2e92965844ec27c1c02af5e9a3469de355db2256e0ec2a4eba30a +SIG = 43332351d3fb7b45fcf37c607d442ea80dbda2cb69c2884f424e65ea3a331ed8472d4368405cb736b2d6685ad782e239fe833ed789a2923185166f608342ee05 + +SEED = 39e56a65623a0aebade0da12ce1df378bc924073f73a549effaebc465d1a78e2 +PUB = 83da8ad50bad09eb3e94c725df3cc3a119736adc859ca1a10503f48ff2fec596 +MESSAGE = a96dc2ea3fa1351492a4619d9194681f8ec400a97158244482653838ccb7e156a82d564368f83a6ee1be46bc34b817200e8464c3d12b5ef2c50b19565b881c4c3d4563fb947eb47c3ee9c1ee7853269874455bfacba305f307d1ac5309eeae5c07fa5c4d428edbc8b9528c4415243a9ef580aff8fcfb12000a71fceee89de97f90279529bcc822ed3cb34c82ba5fec15f4945663636d67b5feceacc31d25f98aea07f7800d5a1034251cb91dd0963ec2c1a54773a4d96c18357f8d101de58e932f8c6cdde8e3cfcef5a7443fdba7b78320403c0196844724a612183e34bdd808ce7b958861ca37115730eaede1fd0baabe976efefd0365fdf926776c536f47ff80de5c18291bb7e9f1b913ffd1d94468b789752fae6ca897c0cca53ef1e731d00c8bdbe8929ea6b1dce1f31a20688d37b0f3a2b4153b306bdba1 +SIG = 398e8260011f57d8ac8c58d5457bc652c7414aaf6fb2f426b7899056605c0afc28392423b2b571f5e6c3c7f6d60245e53ebd03bdc5ad3c1ad8738cb32214d00f + +SEED = 4b9921852f409a323ae38175e8d76a211fc4d9c654178eea3baa7a767a6fda06 +PUB = 4c723e436b6bd97f44af52503b21cc50d5f6ad6cfc8288345dde8054e995582e +MESSAGE = 3f33d8fb83e68741090a37bedd745cf141aaaed8c92ffa742a52561777885805ace14246ab98a8cb598c9ce3de9b29bae5fa04b1cf828de11aff80a7ef8a3a38aede4f3c3563a25d049badcad5ed7e47fdbba6e111307eebe9ef4906bc989728b76e84afe808e6653b271e21104aa665f1898dd2aab23090e22b4e344a2616fbd8ee4ad8ed8108395eba817fbd14fec5c17dcf56b8220856b2b833e091407d5089b35ddf34b86ff7dc9fde52b21ef12176ef3370b7f3a0a8cb1b058a51aefff3d279d80f51a68bfb592587b45c5c63a7e4d625b887de486a118316c3b6a238575f92ac5b1c94c3f5dbbd96686000d6d39cccd558d420e4d447a8cbc4bc7b8c6a03af0f0034fb3518d93800f0f713e4b13732e16ada51801d7e559cf839d1058f64955698311399345416850dddcc5601a684fd09e6afd3944f5e19 +SIG = cbf1f1642df950eb71fd09590d34c265922c58bd8026bba3fc0e594a6bb1f2b90da3dc1d5f6b6d5b405a896d1dbb71b8685c4dfc444acaffe65ab8331789f507 + +SEED = 1bff652a2c8309a393ac11da3aa97fb078bb284ed5e1b8ccc983652ef8556cd0 +PUB = aaabdc091fc3682354201744e9b73fd2a6cfb281914bf2c70ec3dc1dec7216b0 +MESSAGE = 48d02698a97bdcb3ef078dcfcf5750005f1702d300e7e89bc436e381113401f852b8b4acff60ffbd4ab46d202168d98b8735e79cb350e35b070ff6bdcafd954b551969b6b1a70c9131ebd40d96140291d8d2b091540a8b18d8e5465915c25dbc6b5c9a687942533c372c8b4e95a953677169b950edd3464375cd43132ff9bd541ee22bd418ce23195f65d8b289f633ec8d71e1a801b06c3c827f627e723d2199100ce73e8e4a4440e778317a474910793b47b10ffb55db7f281c7d7a033bd80048b82673b87cf95e99422ba628688f3c971890ca15d12f572fa1977a17307069da304ead3026eb01042668890d17008cd1e92c46cbe9c857e7193de3aba3911e4f86fe0a1698ab7cdb9251a8424b2848b96ad81ea239d365fdea92ea5c0473d0a6bb1e371356bdfad2d0350336d3e1947c936fd0c25195445011731b +SIG = 93c9c33493fc64172d51e16a0a1cd729a0d99e3cb864e89a42987f39dd8cd26545fdfe37581911e803677da4c55b0a683ddf62b728f8f30685ae58f628ebe609 + +SEED = 002fdd1f7641793ab064bb7aa848f762e7ec6e332ffc26eeacda141ae33b1783 +PUB = 77d1d8ebacd13f4e2f8a40e28c4a63bc9ce3bfb69716334bcb28a33eb134086c +MESSAGE = 5ac1dfc324f43e6cb79a87ab0470fa857b51fb944982e19074ca44b1e40082c1d07b92efa7ea55ad42b7c027e0b9e33756d95a2c1796a7c2066811dc41858377d4b835c1688d638884cd2ad8970b74c1a54aadd27064163928a77988b24403aa85af82ceab6b728e554761af7175aeb99215b7421e4474c04d213e01ff03e3529b11077cdf28964b8c49c5649e3a46fa0a09dcd59dcad58b9b922a83210acd5e65065531400234f5e40cddcf9804968e3e9ac6f5c44af65001e158067fc3a660502d13fa8874fa93332138d9606bc41b4cee7edc39d753dae12a873941bb357f7e92a4498847d6605456cb8c0b425a47d7d3ca37e54e903a41e6450a35ebe5237c6f0c1bbbc1fd71fb7cd893d189850295c199b7d88af26bc8548975fda1099ffefee42a52f3428ddff35e0173d3339562507ac5d2c45bbd2c19cfe89b +SIG = 0df3aa0d0999ad3dc580378f52d152700d5b3b057f56a66f92112e441e1cb9123c66f18712c87efe22d2573777296241216904d7cdd7d5ea433928bd2872fa0c + +SEED = 25b0f0bb3dcb422a6f3c6c220eaadb11dbfe489c2d455b276cefe8cba057f9f3 +PUB = fe03c9c4394adc74b13f47654bead8bc855958b4194fdab2097ac1b157933c05 +MESSAGE = 54d99f969efa8870fc20fa9a962bb372619c324439728af3139c2a07e8c1b29c1e4eedc2d40ba722f63ce37670362af6f5202add668c4fb4d62fa8bacbc7d07ff3bd38c15a01064259cc34134861632967460541a99b8d5182bf59347b5a59879aa3b091a1f3e04135bd6301be5226d4895e5e9c2b15e48e5ecdf44129e6122853a606fc118466fa720b5ab165635c3bde04d74289274fa03547accbde780e1fa0bf2c56f8436a53e73878a424a29aa9de385dba419ae6a5d12e004276152b58d325b302400a55333c38cde4908ae1d0121cbeca950809c543314277c1485e68d9f9c0a962d1b1e0dda1d4a52b56f8308a80b92acc9f4ebc3ed45d91a129da8675621af676703def3b84113183b2e3a8c56157f243f13980f3d1756fea7668c91503d35c839a2120c79ec954fb546d7b542f987289534ffdef62d47fd5ec +SIG = da50d5242bf51c3951780cafd926d67bdf5640d5d3bb08433831d56e48e2592a1c375968bb4d2fbea56145abf2d82991363b1565fa1effe214011a686e39950e + +SEED = bf5ba5d6a49dd5ef7b4d5d7d3e4ecc505c01f6ccee4c54b5ef7b40af6a454140 +PUB = 1be034f813017b900d8990af45fad5b5214b573bd303ef7a75ef4b8c5c5b9842 +MESSAGE = 16152c2e037b1c0d3219ced8e0674aee6b57834b55106c5344625322da638ecea2fc9a424a05ee9512d48fcf75dd8bd4691b3c10c28ec98ee1afa5b863d1c36795ed18105db3a9aabd9d2b4c1747adbaf1a56ffcc0c533c1c0faef331cdb79d961fa39f880a1b8b1164741822efb15a7259a465bef212855751fab66a897bfa211abe0ea2f2e1cd8a11d80e142cde1263eec267a3138ae1fcf4099db0ab53d64f336f4bcd7a363f6db112c0a2453051a0006f813aaf4ae948a2090619374fa58052409c28ef76225687df3cb2d1b0bfb43b09f47f1232f790e6d8dea759e57942099f4c4bd3390f28afc2098244961465c643fc8b29766af2bcbc5440b86e83608cfc937be98bb4827fd5e6b689adc2e26513db531076a6564396255a09975b7034dac06461b255642e3a7ed75fa9fc265011f5f6250382a84ac268d63ba64 +SIG = 279cace6fdaf3945e3837df474b28646143747632bede93e7a66f5ca291d2c24978512ca0cb8827c8c322685bd605503a5ec94dbae61bbdcae1e49650602bc07 + +SEED = 65de297b70cbe80980500af0561a24db50001000125f4490366d8300d3128592 +PUB = ba8e2ad929bdcea538741042b57f2067d3153707a453770db9f3c4ca75504d24 +MESSAGE = 131d8f4c2c94b153565b86592e770c987a443461b39aa2408b29e213ab057affc598b583739d6603a83fef0afc514721db0e76f9bd1b72b98c565cc8881af5747c0ba6f58c53dd2377da6c0d3aa805620cc4e75d52aabcba1f9b2849e08bd1b6b92e6f06615b814519606a02dc65a8609f5b29e9c2af5a894f7116ef28cfd1e7b76b64061732f7a5a3f8aa4c2e569e627a3f9749aa597be49d6b94436c352dd5fa7b83c92d2610faa32095ca302152d91a3c9776750e758ee8e9e402c6f5385eaa5df23850e54beb1be437a416c7115ed6aa6de13b55482532787e0bee34b83f3084406765635497c931b62a0518f1fbc2b891dc7262c7c6b67eda594fa530d74c9329bad5be94c287fbcde53aa80272b83322613d9368e5904076fdbcc88b2c0e59c10b02c448e00d1b3e7a9c9640feffb9523a8a60e1d83f04a4b8df69153b +SIG = 7a9b736b01cc92a3349f1a3c32dbd91959825394ff443c567405e899c8185ce8fad9500e1fce89d95a6253c00477435acf04bff993de1b00495def0834ee1f07 + +SEED = 0826e7333324e7ec8c764292f6015d4670e9b8d7c4a89e8d909e8ef435d18d15 +PUB = ffb2348ca8a018058be71d1512f376f91e8b0d552581254e107602217395e662 +MESSAGE = 7f9e3e2f03c9df3d21b990f5a4af8295734afe783accc34fb1e9b8e95a0fd837af7e05c13cda0de8fadac9205265a0792b52563bdc2fee766348befcc56b88bbb95f154414fb186ec436aa62ea6fcabb11c017a9d2d15f67e595980e04c9313bc94fbc8c1134c2f40332bc7e311ac1ce11b505f8572ada7fbe196fba822d9a914492fa7185e9f3bea4687200a524c673a1cdf87eb3a140dcdb6a8875613488a2b00adf7175341c1c257635fa1a53a3e21d60c228399eea0991f112c60f653d7148e2c5ceb98f940831f070db1084d79156cc82c46bc9b8e884f3fa81be2da4cdda46bcaa24cc461f76ee647bb0f0f8c15ac5daa795b945e6f85bb310362e48d8095c782c61c52b481b4b002ad06ea74b8d306eff71abf21db710a8913cbe48332be0a0b3f31e0c7a6eba85ce33f357c7aeccd30bfb1a6574408b66fe404d31c3c5 +SIG = 4bac7fabec8724d81ab09ae130874d70b5213492104372f601ae5abb10532799373c4dad215876441f474e2c006be37c3c8f5f6f017d0870414fd276a8f42808 + +SEED = 00ad6227977b5f38ccda994d928bba9086d2daeb013f8690db986648b90c1d45 +PUB = 91a4ea005752b92cbebf99a8a5cbecd240ae3f016c44ad141b2e57ddc773dc8e +MESSAGE = cb5bc5b98b2efce43543e91df041e0dbb53ed8f67bf0f197c52b2211e7a45e2e1ec818c1a80e10abf6a43535f5b79d974d8ae28a2295c0a6521763b607d5103c6aef3b2786bd5afd7563695660684337bc3090739fb1cd53a9d644139b6d4caec75bda7f2521fbfe676ab45b98cb317aa7ca79fc54a3d7c578466a6aa64e434e923465a7f211aa0c61681bb8486e90206a25250d3fdae6fb03299721e99e2a914910d91760089b5d281e131e6c836bc2de08f7e02c48d323c647e9536c00ec1039201c0362618c7d47aa8e7b9715ffc439987ae1d31154a6198c5aa11c128f4082f556c99baf103ecadc3b2f3b2ec5b469623bc03a53caf3814b16300aedbda538d676d1f607102639db2a62c446707ce6469bd873a0468225be88b0aef5d4020459b94b32fe2b0133e92e7ba54dd2a5397ed85f966ab39ed0730cca8e7dacb8a336 +SIG = dc501db79fd782bc88cae792557d5d273f9ba560c7d90037fe84ac879d684f612a77452c4443e95c07b8be192c35769b17bbdfca42280de796d92119d833670d + +SEED = 1521c6dbd6f724de73eaf7b56264f01035c04e01c1f3eb3cbe83efd26c439ada +PUB = 2f61a26ffb68ba4f6e141529dc2617e8531c7151404808093b4fa7fedaea255d +MESSAGE = 3e3c7c490788e4b1d42f5cbcae3a9930bf617ebdff447f7be2ac2ba7cd5bcfc015760963e6fe5b956fb7cdb35bd5a17f5429ca664f437f08753a741c2bc8692b71a9115c582a25b2f74d329854d60b7817c079b3523aaff8793c2f72fff8cd10592c54e738df1d6452fb72da131c6731ea5c953c62ea177ac1f4735e5154477387109afae15f3ed6eeb08606e28c81d4386f03b9376924b6ef8d221ee29547f82a7ede48e1dc17723e3d42171eeaf96ac84bedc2a01dd86f4d085734fd69f91b5263e439083ff0318536adff4147308e3aafd1b58bb74f6fb0214a46fdcd3524f18df5a719ce57319e791b4ea606b499bfa57a60e707f94e18f1fed22f91bc79e6364a843f9cbf93825c465e9cae9072bc9d3ec4471f21ab2f7e99a633f587aac3db78ae9666a89a18008dd61d60218554411a65740ffd1ae3adc06595e3b7876407b6 +SIG = a817ed23ec398a128601c1832dc6af7643bf3a5f517bcc579450fdb4759028f4966164125f6ebd0d6bf86ff298a39c766d0c21fdb0cbfdf81cd0eb1f03cd8a08 + +SEED = 17e5f0a8f34751babc5c723ecf339306992f39ea065ac140fcbc397d2dd32c4b +PUB = 4f1e23cc0f2f69c88ef9162ab5f8c59fb3b8ab2096b77e782c63c07c8c4f2b60 +MESSAGE = c0fad790024019bd6fc08a7a92f5f2ac35cf6432e2eaa53d482f6e1204935336cb3ae65a63c24d0ec6539a10ee18760f2f520537774cdec6e96b55536011daa8f8bcb9cdaf6df5b34648448ac7d7cb7c6bd80d67fbf330f8765297766046a925ab52411d1604c3ed6a85173040125658a32cf4c854ef2813df2be6f3830e5eee5a6163a83ca8849f612991a31e9f88028e50bf8535e11755fad029d94cf25959f6695d09c1ba4315d40f7cf51b3f8166d02faba7511ecd8b1dded5f10cd6843455cff707ed225396c61d0820d20ada70d0c3619ff679422061c9f7c76e97d5a37af61fd62212d2dafc647ebbb979e61d9070ec03609a07f5fc57d119ae64b7a6ef92a5afae660a30ed48d702cc3128c633b4f19060a0578101729ee979f790f45bdbb5fe1a8a62f01a61a31d61af07030450fa0417323e9407bc76e73130e7c69d62e6a7 +SIG = efe2cb63fe7b4fc98946dc82fb6998e741ed9ce6b9c1a93bb45bc0a7d8396d7405282b43fe363ba5b23589f8e1fae130e157ce888cd72d053d0cc19d257a4300 + +SEED = 0cd7aa7d605e44d5ffb97966b2cb93c189e4c5a85db87fad7ab8d62463c59b59 +PUB = 4889855fe4116b4913927f47f2273bf559c3b394a983631a25ae597033185e46 +MESSAGE = 28a55dda6cd0844b6577c9d6da073a4dc35cbc98ac158ab54cf88fd20cc87e83c4bba2d74d82ce0f4854ec4db513de400465aaa5eee790bc84f16337072d3a91cde40d6e0df1ba0cc0645f5d5cbbb642381d7b9e211d25267a8acf77d1edb69c3a630f5b133d24f046a81bf22ff03b31d8447e12c3f7b77114a70cbd20bbd08b0b3827a6bbcf90409e344447a7fbc59bdd97d729071f8d71dcc33e6ef2cbab1d411edf13734db1dd9703276f5eb2d6aa2cb8952dd6712bfae809ce08c3aa502b8135713fac0a9c25b1d45b6a5831e02421bba65b81a596efa24b0576bd1dc7fdfb49be762875e81bd540722bc06140b9aa2ef7b84a801e41ded68d4546ac4873d9e7ced649b64fadaf0b5c4b6eb8d036315233f4326ca01e03393050cd027c24f67303fb846bd2c6b3dba06bed0d59a36289d24bd648f7db0b3a81346612593e3ddd18c557 +SIG = bf9115fd3d02706e398d4bf3b02a82674ff3041508fd39d29f867e501634b9261f516a794f98738d7c7013a3f2f858ffdd08047fb6bf3dddfb4b4f4cbeef3003 + +SEED = 33371d9e892f9875052ac8e325ba505e7477c1ace24ba7822643d43d0acef3de +PUB = 35929bded27c249c87d8b8d82f59260a575327b546c3a167c69f5992d5b8e006 +MESSAGE = 27a32efba28204be59b7ff5fe488ca158a91d5986091ecc4458b49e090dd37cbfede7c0f46186fabcbdff78d2844155808efffd873ed9c9261526e04e4f7050b8d7bd267a0fe3d5a449378d54a4febbd2f26824338e2aaaf35a32ff0f62504bda5c2e44abc63159f336cf25e6bb40ddb7d8825dff18fd51fc01951eaedcd33707007e1203ca58b4f7d242f8166a907e099932c001bfb1ec9a61e0ef2da4e8446af208201315d69681710d425d2400c387d7b9df321a4aec602b9c656c3e2310bff8756d18b802134b15604f4edc111149a9879e31241dd34f702f4c349617b13529769a772f5e52a89c098e0dca5920667893a250061b17991626eb9319298685be46b6a8b68422444fa5a36bcf3a687e2eccb9322c87dc80165da898930850b98fc863cada1aa99c6d61c451b9ccf4874c7f0e75b0a0c602f044812c71765adaf02025395b0 +SIG = 985ca446ddc007827cc8f2852cbd8115ef8c5975e9d7ce96d74dfed859aa14a4c15254006bea5e08359efe2625d715e0897ee5a16f151203be5010418637de05 + +SEED = beedb8073df58f8c1bffbdbd77ec7decb2c82a9babecefc0331507bdc2c2a7e7 +PUB = b27e908b805e296fc30d2e474b060cd50c0f6f520b3671712183bd89d4e733e9 +MESSAGE = 35ca57f0f915e5209d54ea4b871ffb585354df1b4a4a1796fbe4d6227d3e1aba5171ed0391a79e83e24d82fdafd15c17b28bf6c94d618c74d65264e58faaacd2902872fdd0efa22e8d2d7ce8e3b8197f0c3615b0a385235fa9fd8e4564ee6e6b1650b4cfb94d872c805c32d4f3a18f966461d3adbb605fa525884f8eb197627396ba4d995d78ac02948a0eaabb58519b9a8e2e7985cd1de2c71d8918d96a0168660ce17cddf364e3ec0d4bd90f2104751a1927ee1d23f3e7a69840ed040b00e5f6e4866ec58813149cc382aebf6162608c79574d553f47230e924a0ef1ebf55d8e1a52abb62a2d7ac86027c7c03cc83fa1949da29e2f3037ab986fd2fffe650e3149babae5a50b1ee9696f3babec72e29697c82422814d272085500fd837fe3c7a973ef4c169af12dd7f02700620bb045bdbf84623f326350570b3cadbc9aea4200b28287e17ab +SIG = 8c890cccadc7760e1e82e43c44b3dc0b685a48b479ae13cc0a6b0557d0fb1cbabba63d2a96843412ea8d36c50acbf52b92cfb2dce49dc48af6ddcf8ee47a8608 + +SEED = 9184ef618816832592bc8eb35f4ffd4ff98dfbf7776c90f2aad212ce7e03351e +PUB = 687b7726010d9bde2c90e573cd2a2a702ff28c4a2af70afc7315c94d575601e5 +MESSAGE = 729eb7e54a9d00c58617af18c345b8dc6e5b4e0f57de2f3c02e54a2ec8f1425ec2e240775b5ab0c10f84ac8bafda4584f7e21c655faecd8030a98906bd68398f26b5d58d92b6cf045e9bd9743c74c9a342ec61ce57f37b981eac4d8bf034608866e985bb68686a68b4a2af88b992a2a6d2dc8ce88bfb0a36cf28bbab7024abfa2bea53313b66c906f4f7cf66970f540095bd0104aa4924dd82e15413c22679f847e48cd0c7ec1f677e005fec0177fbd5c559fc39add613991fbaeae4d24d39d309ef74647f8192cc4c62d0642028c76a1b951f6bc9639deb91ecc08be6043f2109705a42c7eae712649d91d96ccbbfb63d8d0dd6dd112160f61361ecdc6793929ca9aef9ab56944a6fa4a7df1e279eaf58ce8323a9cf62c94279fff7440fbc936baa61489c999330badcb9fc0e184bc5093f330cbb242f71fb378738fea10511dd438364d7f76bcc +SIG = b3c24e75132c563475422d5ea412b5c1e8e6e5ea1c08ead1393c412da134c9a1638284ea7e2ca032fe3d3e32a9066a8c8839903f6ef46e966bb5e492d8c2aa00 + +SEED = 354e13152ee1fe748a1252204c6527bdc1b1eb2eb53678150e6359924708d812 +PUB = d45ff6c5fb83e7bb9669aa8960deb7dbc665c988439b6c9ef672c6811dc8bcf6 +MESSAGE = 8e5fccf66b1ba6169cb685733d9d0e0190361c90bcab95c163285a97fe356d2bdcde3c9380268805a384d063da09ccd9969cc3ff7431e60a8e9f869cd62faa0e356151b280bc526e577c2c538c9a724dc48bf88b70321d7e1eeedb3c4af706748c942e67bdabdb41bec2977b1523069e31e29b76300288f88a51b384b80cc2526f1679340ddec3881f5cd28b0378d9cd0a812b68dd3f68f7a23e1b54bee7466ac765cf38df04d67441dfa498c4bffc52045fa6d2dbcdbfa33dfaa77644ffccef0decdb6790c70a0d734ec287cc338cb5a909c0055189301169c4f7702c05c0911a27b16ef9ed934fa6a0ca7b13e413523422535647968030edc40cd73e7d6b345b7581f438316d68e3cd292b846d3f4f7c4862bc7e6b3fb89a27f6f60cd7db2e34ec9aae1013fe37acff8ad888cb9a593ef5e621eae5186c58b31dcfde22870e336d33f440f6b8d49a +SIG = de2b46e65f3decef34332e500f2e11306fbdcf1be85a1c1ee68ba3045dcec2c7be608d22927da1f44c0e2083ae622cf3c29d893887994efcfa2ca594f5051f03 + +SEED = 7ff62d4b3c4d99d342d4bb401d726b21e99f4ef592149fc311b68761f5567ff6 +PUB = 7fdfdb9eca29d3f01d9486d7e112ce03aa37b91326a4283b9c03999c5eda099a +MESSAGE = 99c44c796572a4823fc6c3807730839173774c05dbfc1492ed0d00509a95a1de37274b3135ed0456a1718e576597dc13f2a2ab37a45c06cbb4a2d22afad4d5f3d90ab3d8da4dcdaa06d44f2219088401c5dceee26055c4782f78d7d63a380608e1bef89eeef338c2f0897da106fafce2fb2ebc5db669c7c172c9cfe77d3109d239fe5d005c8ee751511b5a88317c729b0d8b70b52f6bd3cda2fe865c77f36e4f1b635f336e036bd718bec90ee78a802811510c4058c1ba364017253aa842922e1dd7d7a0f0fc9c69e43fc4eaeffaaf1ae5fa5d2d73b43079617baba030923fe5b13d2c1c4fe6fac3f2db74e2020a734b6121a0302fce820ba0580ce6135348fdf0632e0008df03ee112168f5cfa0037a26a1f69b1f1317edf2a3ab367455a77e00691215d7aa3133c2159d3da2b134cf04f0defbf07a6064011e64dd14d4f8f064356655428804c2771a +SIG = 058f79927fbf6178724815c7b11c63baaa90bcc15d7272be082f8a9141861c816433055f6cf6491424853f9ec78bb91ace913a93411b4e5ed58bc4ba5715c60a + +SEED = 6cabadd03f8a2e6ebab96a74f80e18164e4d1b6baa678f5a82e25604af989aaf +PUB = 2a4a3179564194e00100c18bc35351d8b135bbae5b32b28fce1d7b6766ca4b32 +MESSAGE = 279f78cf3b9ccfc6e1b01e1a82f50ed172e9a8e1e702bb15661dd7dc3a456ff7a7a7fdfb081db3867079630c7f70fd753292ec60ecbf50632e9aa45b996505c66e6dc3c6ae892e21b6a8705e4bbae8f16a3378554b31fdb0139dcd15c96a8a7e4b88756a86d18db5dc74fd7691197dd88e2c7d5df52b049344cdc477c9cd7e89eda99ccfb1d00814d0152b9654df3279372ca5f18b1c946f2894a76b079ddb1c3cd61fbb969aeec9193a6b88fb7d136c07f9821e5c1074b4e93bcaf6fa14d0d1d7e1707589d77ec1337206e53a1f06cc26672ff95c13d5ff444766931ba30a0afdcdadd2098e9c41fd87a3f23cd16dbb0efbf8092ce33e327f42610990e1cee6cb8e54951aa081e69765ae4009aeed758e768de50c23d9a22b4a06dc4d19fc8cbd0cdef4c983461755d0a3b5d6a9c12253e09568339ff7e5f78c5fdf7ec89f9186a621a8c0eed11b67022e +SIG = 4e65c6c1d493045e8a9250e397c1d1d30ffed24db66a8961aa458f8f0fcb760c39fe8657d7ab8f84000b96d519717cff71f926522c1efec7f8b2624eae55f60c + +SEED = 0fa0c32c3ae34be51b92f91945405981a8e202488558a8e220c288c7d6a5532d +PUB = d6aee62bd91fc9453635ffcc02b2f38dcab13285140380580ccdff0865df0492 +MESSAGE = 53f44be0e5997ff07264cb64ba1359e2801def8755e64a2362bddaf597e672d021d34fface6d97e0f2b1f6ae625fd33d3c4f6e9ff7d0c73f1da8defb23f324975e921bb2473258177a16612567edf7d5760f3f3e3a6d26aaabc5fde4e2043f73fa70f128020933b1ba3b6bd69498e9503ea670f1ed880d3651f2e4c59e79cabc86e9b703394294112d5d8e213c317423b525a6df70106a9d658a262028b5f45100cb77d1150d8fe461eed434f241015f3276ad7b09a291b4a7f35e3c30051cbf13b1d4a7fa0c81a50f939e7c49673afdc87883c9e3e61f5a1df03755470fda74bf23ea88676b258a97a280d5f90b52b714b596035bae08c8d0fe6d94f8949559b1f27d7116cf59dd3cfbf18202a09c13f5c4fbc8d97225492887d32870c2297e34debd9876d6d01ac27a16b088b079079f2b20feb02537cda314c43cb2dca371b9df37ed11ec97e1a7a6993a +SIG = 7e9ab85ee94fe4b35dcb545329a0ef25923de5c9dc23e7df1a7e77ab0dcfb89e03f4e785ca6429cb2b0df50da6230f733f00f33a45c4e576cd40bdb84f1ae001 + +SEED = 7b06f88026fa86f39fce2426f67cc5996bedd0cfc4b5ebb1b5e3edbb47e080aa +PUB = 3f1469ee6a2e7867e2e9012d402cf5a4861497c01df879a1deb1c539830b58de +MESSAGE = 71175d4e21721297d9176d817f4e785d9600d923f987fe0b26fd79d33a5ea5d1e818b71f0f92b8c73afddabdcc27f6d16e26aafa874cfd77a00e06c36b041487582bb933760f88b419127345776ea418f83522254fed33819bc5c95f8f8404cc144ebf1486c88515409d3433aaf519d9920f5256e629419e9a95580a35b069b8d25533dfcbc98ad36404a951808e01378c03266326d120046975fde07daef3266caacd821c1403499d7fdf17c033c8d8c3f28f162b5f09dfdaca06285f00c6cb986dfdf5151aa6639608b5b13e78d65a4368585b16138754fbd113835a686cd066c2b89bb0953c24d50e77bf0fc457c1e0fcf5d44da8db9a88f062be3b688d5cdcff1d1c00e81ec9d413882295b341fee8fa427dc109adeb5f284eec202f1bef115bf96b1782d3ccdeb682b69bf92d170c007d5df80e1ed962f677dc24a145a1e4e829e8dec0104e5f78365944 +SIG = 42f133e34e3eb7032a133ed781537ec62e44a5ce8381e5e0bf9e13a914a4b2c757811d6d3b1e86672424ea4230d10f7c610abb7069e61e319b4066a2bd7bc900 + +SEED = c3f5e149968a24f4de9119531975f443015ccca305d7119ed4749e8bf6d94fc7 +PUB = 39aaccdb948a4038538a4588322f806bb129b5876c4bec51271afe4f49690045 +MESSAGE = c46370e37f2e0cadcf93402f1f0cb048f52881ba750b7a43f56ab11ce348732fb57e7f9aaf8dfcbe455e14e983c248d026a27e7f148d5db5a53f94635702b895127771047a876d14107386c5e0ff8933345bbd7a936d990d33efa28c2ec4e4864ffd2ff576f7c88f954cfc1c459e883bb712dae3cdf6632066f1f4d13a509615b3360cadc5a307f23e52a51b40a6feebe0b18d0e9ee4e348f33cd81a8def222f6a59b12861d335bd9af85cc004be46f1d3a424f4870ae9dc587e5a4ade136b9370649348c33ac3bf1febeebffea37085ed59cac9d9e696470b234609e9a10a9d431ff91e69cb5135fd117ff58a36539744ebe70cea6973c00c7a4d57b62f4a7136d731b8e46ff18ec0ed69070031905075d8541d568cfce6eeb76242b7819a7b6a93552111bb88f165527cfa6966d39fcbe0a7dea008e39c7a3e577ab307cd1d0ea326833d52654e172955f3fcd4 +SIG = 5fa2b531677b00b85b0a313cbd479f55f4ab3ec5cfce5e454d2b74176ccc3399c899f9d6b51ed4c1e76185ac9fe730c4b4014044f7041185bc3c85722eb2ea02 + +SEED = 42305c9302f45ea6f87e26e2208fd94b3c4ad037b1b6c83cf6677aa1096a013c +PUB = 3b97b1f11ce45ba46ffbb25b76bfc5ad7b77f90cc69ed76115dea4029469d587 +MESSAGE = d110828d449198d675e74e8e39439fd15e75bf2cc1f430abfb245836885bafc420f754b89d2fbbf6dd3490792e7a4f766073cfe3b302d089831ace869e2730fde45c2121ec3ef217aa9c43fa7cc7e9ed0a01ad9f1d2fc3613638ca9fc193c98b37455bf5dbf8f38b64708dfdca6c21f0975f1017c5da5f6434bda9f033cec2a631ab50318e017b170b240bf01eb8b36c7e1cb59e7736ac34444208132a8f59e4f313d65d849c6a4fdf13e20ecaee3823e589a171b39b2489497b06e6ff58c2c9f1dc5d3aa3bd10e6443e22d42d07b783f79fd43a46e1cde314b663a95f7246dea131fcd46d1dc333c5454f86b2c4e2e424dea405cc2230d4dcd39a2eab2f92845cf6a7994192063f1202749ef52dcb96f2b79ed6a98118ca0b99ba2285490860eb4c61ab78b9ddc6acc7ad883fa5e96f9d029171223abf7573e36230e0a81f6c1311151473ee264f4b842e923dcb3b +SIG = 18d05e5d01668e83f40fa3bbee28b388acf318d1b0b5ad668c672f345c8eda14c2f884cd2a9039459ce0810bc5b580fe70d3964a43edb49e73a6ff914bbf040c + +SEED = c57a43dcd7bab8516009546918d71ad459b7345efdca8d4f19929875c839d722 +PUB = 2083b444236b9ab31d4e00c89d55c6260fee71ac1a47c4b5ba227404d382b82d +MESSAGE = a4f6d9c281cf81a28a0b9e77499aa24bde96cc1264374491c008294ee0af6f6e4bbb686396f59068d358e30fe9992db0c6f16680a1c71e27a4a907ac607d39bdc3258c7956482fb37996f4beb3e5051b8148019a1c256e2ee999ebc8ce64c54e07fedb4fbd8953ebd93b7d69ce5a0082edd6209d12d3619b4fd2eae916461f72a4ce727157251a19209bbff9fbdbd289436f3fcacc6b4e1318521a47839cba4b14f7d7a21e7b5d6b6a753d5804afcd2b1eb7779b92abab8afa8aa4fa51caec0b85dcd0fc2a0676036d3f56630a831ffeb502861dd89161c708a9c006c73c930ce5b94756426ff18aa112fb4eb9a68500b48d4eedbd4167b6ffd0a11d49443a173ce9d949436748fc0634f06bb08b8f3423f4463dba7b4d199b64df578117f0a2645f0b2a1e2ada27d286f76733f25b82ed1d48a5c3898d4ad621e50ed9060daad40a39532e4d1bf162ce36804d5d4e2d +SIG = 1edef9bc036971f1fa88edf45393c802e6c1a1631c8a06871a09a320821dce40beca97e53a0361a955a4c6d60b8ca8e400c81340911ccb4f56284041cdbb1804 + +SEED = 2dddb6b8fd04fa90ece1a709f8418f2e5d0c9c43afe7cfce19e6ad15a73476f7 +PUB = 8059de6a7c4776489ecc2e7d707ffce30285bf30a23f78d72db49cfd6ed0d492 +MESSAGE = 474baa590a4cd72d5424e51d8257b3d44325bc4c5063a0033c86ebbe99ed7212184c19944d082a115379dd4cece973faa0bca6485bd25f3744a719e70aa0291e1b5a96e637c140616a98263357c76b6eb0083fe51414e386870d0fdc7dd9abe4ff6fb5bbf1e7b15dac3e08e2615f655c3104ceb32a4cc2c9e9c43cf282d346ac253ccc46b635ae040973b49735720ffb890469a567c5824e0c00d7ccd5509a718092a906461c4d6163eaf422418f5fc6e009fc3f529ac61a2f89bb8e0ed45d940c4c2331ff8d8e1d6d58d417d8fc2656a02e8701aee75aed918724eebe4a2cf4744c5c401e217023df68a6f6a0228bd05a679a697d8de7036b9ed269090d3c65486afb91e27954eb15b964665ede7ad008f12fb3a9d0e69c13b4254f43819e0818a4195f68b8a38ae81f3fcb1879c95ab4cd0ffc38e381089260cca967ace5a085b457ab5eb363852101377570f9ac9e38 +SIG = c634ea7bf72e895a2e796e2834201415b8b45e05e045559284eb9052c0e84f62a5a9f0c9764f7576788c7228b19ef517c195497325a48a9344b147c12fd75509 + +SEED = 5547f1004baedfce5cfc0850b05302374aad24f6163994ecd751df3af3c10620 +PUB = 7ce620787385ee1951ac49a77352ee0d6f8c5cd47df74e9e3216a6324fc7cf7f +MESSAGE = a6c17eeb5b8066c2cd9a89667317a945a0c7c96996e77ae854c509c6cd0631e922ad04503af87a3c4628adafed7600d071c078a22e7f64bda08a362b38b26ca15006d38acf532d0dedea4177a2d33f06956d80e963848ec791b2762fa99449b4f1a1ed9b3f2580be3ac7d7f52fb14421d6222ba76f807750c6cbb0b16f0895fc73d9dfc587e1a9e5d1e58375fbab705b8f0c1fd7df8b3ad446f2f08459e7ed1af59556fbc966dc249c1cf604f3e677c8a09d4363608774bf3811bef0642748c55c516c7a580fa3499050acb30eed870d0d91174cb623e98c3ad121cf81f04e57d49b008424a98a31eeaaf5f38e000f903d48d215ed52f862d636a5a73607de85760167267efe30f8a26ebc5aa0c09f5b258d3361ca69d1d7ee07b59648179ab2170ec50c07f6616f216872529421a6334a4a1ed3d2671ef47bc9a92afb58314e832db8a9003408a0487503fe4f67770dd4b6 +SIG = 29df3ad589009c667baa5e72dabb4e53cb7876de4e7efe5cc21ead7fa878db57f97c1103ddb39a861eb88653c1d4ec3b4306e4584b47b8bc90423119e7e4af00 + +SEED = 3dd7203c237aefe9e38a201ff341490179905f9f100828da18fcbe58768b5760 +PUB = f067d7b2ff3a957e8373a7d42ef0832bcda84ebf287249a184a212a94c99ea5b +MESSAGE = db28ed31ac04b0c2decee7a6b24fc9a082cc262ca7ccf2a247d6372ec3e9120ecedb4542ea593fea30335c5ab9dd318a3b4fd5834299cf3f53d9ef46137b273c390ec3c26a0b4470d0d94b77d82cae4b24587837b167bb7f8166710baeb3ee70af797316cb7d05fa57e468ae3f0bd449404d8528808b41fcca62f5e0a2aa5d8f3acab008cc5f6e5ab02777bdcde87f0a10ef06a4bb37fe02c94815cf76bfb8f5cdd865cc26dcb5cf492edfd547b535e2e6a6d8540956dcba62cfea19a9474406e934337e454270e01036ac45793b6b8aceda187a08d56a2ce4e98f42ea375b101a6b9fcb4231d171aa463eeb43586a4b82a387bcddaf71a80fd5c1f7292efc2bd8e70c11eaa817106061b6c461c4883d613cc06c7e2a03f73d90fc55cdc07265eefd36be72270383d6c676cae37c93691f1ae3d927b3a1cd963e4229757ae5231eea73a9f71515628305410ac2593b325cc631 +SIG = 4c036935a96abc0d050d907bedbe9946fb97439f039c742e051ccf09add7df44d17da98c2ca01bdc2424da1e4debf347f8fff48ac8030d2cc07f9575c044be04 + +SEED = 282775df9ebbd7c5a65f3a2b096e36ee64a8f8ea719da77758739e4e7476111d +PUB = a2b49646033a13937cad6b0e914e3cec54989c252ca5643d076555d8c55e56e0 +MESSAGE = 14cc50c2973ea9d0187a73f71cb9f1ce07e739e049ec2b27e6613c10c26b73a2a966e01ac3be8b505aeaad1485c1c2a3c6c2b00f81b9e5f927b73bfd498601a7622e8544837aad02e72bf72196dc246902e58af253ad7e025e3666d3bfc46b5b02f0eb4a37c9554992abc8651de12fd813177379bb0ce172cd8aaf937f979642bc2ed7c7a430cb14c3cd3101b9f6b91ee3f542acdf017f8c2116297f4564768f4db95dad8a9bcdc8da4d8fb13ef6e2da0b1316d3c8c2f3ed836b35fe2fd33effb409e3bc1b0f85225d2a1de3bfc2d20563946475c4d7ca9fddbaf59ad8f8961d287ae7dd803e7af1fa612329b1bdc04e225600ae731bc01ae0925aed62ac50d46086f3646cf47b072f0d3b044b36f85cec729a8bb2b92883ca4dfb34a8ee8a0273b31af50982bb6131bfa11d55504b1f6f1a0a00438ca26d8ab4f48bcddc9d5a38851abede4151d5b70d720732a00abea2c8b979 +SIG = 15763973859402907d8dcb86adc24a2a168ba3abf2246173d6348afed51ef60b0c0edeff4e10bcef4c6e5778c8bc1f5e9ee0237373445b455155d23de127a202 + +SEED = 4730a5cf9772d7d6665ba787bea4c95252e6ecd63ec62390547bf100c0a46375 +PUB = f9f094f7cc1d40f1926b5b22dce465784468b20ab349bc6d4fdf78d0042bbc5b +MESSAGE = e7476d2e668420e1b0fadfbaa54286fa7fa890a87b8280e26078152295e1e6e55d1241435cc430a8693bb10cde4643f59cbfcc256f45f5090c909a14c7fc49d37bfc25af11e8f4c83f4c32d4aabf43b20fa382bb6622a1848f8ffc4dff3408bb4ec7c67a35b4cdaee5e279c0fc0a66093a9f36a60fdd65e6334a804e845c8530b6fda363b5640337d027243ccfb3c177f43e717896e46ead7f72ca06aa0ff1e77247121baf48be9a445f729ca1390fc46151cbd33fcbd7373f27a6ba55c92cbf6945b09b44b9a4e5800d403070ae66048997b2197f02181a097e563f9b9acc841139258a258bc610d3bd891637356b2edc8c184c35c65af91aaf7b1c16d74a5f5f862548139254ecf550631d5f8849afdb5b64cf366ff2633a93f3a18c39b5150245fb5f33c9e4e2d94af6963a70b88f9e7e519f8fa2a0f2e3749de883d0e6f052a949d0fc7153a8693f6d801d7352eb2f7a465c0e +SIG = 552c7347bdfe131646ce0932d82a36d2c1b76d7c30ee890e0592e19f9d18b9a56f48d7a9b68c017da6b550c943af4a907baf317e419fbbc96f6cf4bfad42de00 + +SEED = 2770aadd1d123e9547832dfb2a837eba089179ef4f23abc4a53f2a714e423ee2 +PUB = 3c5fbb07530dd3a20ff35a500e3708926310fed8a899690232b42c15bd86e5dc +MESSAGE = a5cc2055eba3cf6f0c6332c1f2ab5854870913b03ff7093bc94f335add44332231d9869f027d82efd5f1227144ab56e3222dc3ddccf062d9c1b0c1024d9b416dfa3ee8a7027923003465e0ffaefb75b9f29dc6bcf213adc5e318fd8ba93a7aa5bfb495de9d7c5e1a196cd3a2d7721f8ba785aa9052a1811c7fcc8f93932765059cab9c9b718945895ef26f3ac048d4cabf91a9e6aa83ac14d43156827837914eb763a23cba53f60f150f4b70203ec1833ff105849457a8da7327661fb23a554164e05fcf0146b10674964be6f6aa0acc94c41ad57180e5180d199bd9102f55d740e81789b15671bbd0670e6de5d97e1ae626d8a0ebc32c8fd9d24737274e47d2dd5941a272e72a598928ad109cde937bf248d57f5d2942983c51e2a89f8f054d5c48dfad8fcf1ffa97f7de6a3a43ca15fc6720efaec69f0836d84223f9776d111ec2bbc69b2dfd58be8ca12c072164b718cd7c246d64 +SIG = f267715e9a84c7314f2d5869ef4ab8d2149a13f7e8e1c728c423906293b49ce6283454dd1c7b04741df2eabedc4d6ab1397dc95a679df04d2c17d66c79bb7601 + +SEED = 4fdab7c1600e70114b11f533242376af7614b4d5da046ac4bedea21d8a361598 +PUB = a25c9a94d6e4ecd95a4bd6805f762eb1c457a8d45d243238b1839cbba8f441cc +MESSAGE = da405890d11a872c119dab5efcbff61e931f38eccca457edc626d3ea29ed4fe3154fafec1444da74343c06ad90ac9d17b511bcb73bb49d90bafb7c7ea800bd58411df1275c3cae71b700a5dab491a4261678587956aa4a219e1ac6dd3fb2cb8c46197218e726dc7ed234526a6b01c0d72cb93ab3f4f38a08e5940b3f61a72ad2789a0532000fac1d2d2e3ad632ac8b62bb3ff5b99d53597bf4d44b19674924df9b3db3d0253f74627ccab30031c85e291c58b5fa9167522a46746fc307036745d4f9817786e5d300e6c5d503125fea01dec3e3fedbf3861ca2627a0518fb2b24e5a7a014178719e9b345f7b249ce3a413280c8deb674f59a25be92a8ab6400c7c52b0728ae34e22b2ec200c1cbaba2ccd8af29249d17af60c36007a722fc80258a7bebab1cdaad7462a8b7588c2f7e27c6d07afcf60117fed11bd6859e75e3b4fcee3981881e95dd116827dd4b369af069d3c8f2676f8a +SIG = 5075c090cfbeb6b01802af7f4da5aa4f434d5ee2f3530eebb75c85e08621f83edc08aa96693894a4277633ba81e19e9e55af5c495daa5e1a6f8cbb79c01c7207 + +SEED = 264504604e70d72dc4474dbb34913e9c0f806dfe18c7879a41762a9e4390ec61 +PUB = eb2b518ce7dc71c91f3665581651fd03af84c46bf1fed2433222353bc7ec511d +MESSAGE = 901d70e67ed242f2ec1dda813d4c052cfb31fd00cfe5446bf3b93fdb950f952d94ef9c99d1c264a6b13c3554a264beb97ed20e6b5d66ad84db5d8f1de35c496f947a23270954051f8e4dbe0d3ef9ab3003dd47b859356cecb81c50affa68c15dadb5f864d5e1bb4d3bada6f3aba1c83c438d79a94bfb50b43879e9cef08a2bfb22fad943dbf7683779746e31c486f01fd644905048b112ee258042153f46d1c7772a0624bcd6941e9062cfda75dc8712533f4057335c298038cbca29ebdb560a295a88339692808eb3481fd9735ea414f620c143b2133f57bb64e44778a8ca70918202d157426102e1dfc0a8f7b1ae487b74f02792633154dfe74caa1b7088fda22fa8b9bc354c585f1567706e2955493870f54169e0d7691159df43897961d24a852ea970c514948f3b48f71ee586e72ec78db820f253e08db84f6f312c4333bd0b732fe75883507783e9a1fd4fbab8e5870f9bf7ad58aa +SIG = eea439a00f7e459b402b835150a779eed171ab971bd1b58dcc7f9386dadd583de8dc69e267121dde41f0f9493d450b16219cdf3c22f09482ce402fe17ca49e08 + +SEED = 2ca7447a3668b748b1fd3d52d2080d30e34d397bb2846caf8f659ac168788ca5 +PUB = ab331cd40a31d0173c0c8c1c17002532807bf89e3edb6d34c2dd8294632b9fbc +MESSAGE = a82bcd9424bffda0f2f5e9eae17835dbe468f61b785aab82934737a91c5f602cb7c617cdffe87cad726a4972e15a7b8ee147f062d2a5a4d89706b571fa8aa2b95981c78abeaaae86203fa2c0e07297406ea8c27111a86dbe1d5a7c3b7ae930904d9890f6d4abebd1412a73ad5feea64acf065d3e63b5cbe20cf20bbd2d8b94f9053ed5f66633482530124446605918de66455e8cf4b101a127233c4e27d5d55bf95bd3195d0340d43531fc75faf8dded5275bf89750de838fd10c31745be4ca41fa871cb0f9b016706a1a7e3c44bb90ac7a8ad51e272389292fd6c98ad7a069e76e3f5f3e0cc770b9e9b35a765d0d93712d7cdabd17e5d01dd8183af4ad9365db0a0fa41381fce60a081df1c5ab0f8c18f95a7a8b582dfff7f149ea579df0623b33b7508f0c663f01e3a2dcd9dfbee51cc615220fdaffdab51bdae42cb9f7fa9e3b7c69cc8ada5ccd642529ba514fdc54fcf2720b8f5d08b95 +SIG = f93ada15ae9cd2b54f26f86f0c28392aed5eb6b6b44d01a4e33a54e7da37c38e8d53366f73fd85be642e4ec81236d163f0d025e76c8bbdd65d43df49f09c1f01 + +SEED = 494ea9bcce26885b7d17d1fc114448f239f0ce46e5f247b4c999fa8629692472 +PUB = 6901e5efae57536ba5fdd96b59657359065f25d391a1aa8cdc0d38bb5d53c139 +MESSAGE = 3badbfa5f5a8aa2cce0a60e686cdce654d24452f98fd54872e7395b39464380a0e185557ea134d095730864f4254d3dd946970c10c804fcc0899dfa024205be0f80b1c75449523324fe6a0751e47b4ff4822b8c33e9eaf1d1d96e0de3d4acd89696b7fcc03d49f92f82b9725700b350db1a87615369545561b8599f5ea920a310a8bafc0e8d7468cbf6f3820e943594afdd5166e4e3309dddd7694ef67e694f34fc62724ff96ac3364176f34e8a02b4cf569db5b8f77d58512aedabf0bcd1c2df12db3a9473f948c5c3243309aae46c49efd088b60f31a8a72ad7e5a35acc5d89fa66807eb5d3ba9cdf08d4753cb85089ee36f5c96b432b6928352afad58012225d6157f9e3611426df921b6d1d8374628a63031e9ffb90e42ffbba021f174f68503155430152c9155dc98ffa26c4fab065e1f8e4622c2f28a8cb043110b617441140f8e20adc16f799d1d5096b1f50532be5042d21b81ea46c7 +SIG = 548a093a680361b7dc56f14503b55eeec3b3f4fd4ca99d6aedce0830f7f4ae2f7328539b34c48fc9760922333dae9c7c017e7db73b8faa6c06be05e347992b06 + +SEED = 00d735ebaee75dd579a40dfd82508274d01a1572df99b811d5b01190d82192e4 +PUB = ba02517c0fdd3e2614b3f7bf99ed9b492b80edf0495d230f881730ea45bc17c4 +MESSAGE = 59c0b69af95d074c88fdc8f063bfdc31b5f4a9bc9cecdffa8128e01e7c1937dde5eb0570b51b7b5d0a67a3555b4cdce2bca7a31a4fe8e1d03ab32b4035e6dadbf1532059ee01d3d9a7633a0e706a1154cab22a07cd74c06a3cb601244cf3cf35a35c3100ba47f31372a2da65dcff0d7a80a1055d8aa99212e899aad7f02e949e6fee4d3c9cefa85069eaff1f6ad06fc300c871ab82b2bedb934d20875c2a263242cdb7f9be192a8710b24c7ea98d43daec8baa5553c678a38f0e0adf7d3ff2dcc799a1dbad6eab1c3d9458a9db922f02e75cfab9d65c7336dae71895d5bb15cac203f2b38b9996c410f8655ad22d3c091c20b7f926d45e780128f19747462abc5c58932fbb9e0bc62d53868802f1b083f183b8a1f9434986d5cf97c04e2f3e145730cba98779c7fed0cab1c05d5e4653c6c3f6736260bc78ee4372862ffe9e90371d762c7432781f35ced884a4baca05653ef25f25a6f3d5628308 +SIG = dcdc54611937d2bd06cacd9818b3be15ce7425427a75f50d197a337a3b8ba6714ef48866f243bd5ac7415e914517a2c1c5a953f432b99db0e620d64f74eb8505 + +SEED = 8c34b905440b61911d1d8137c53d46a1a76d4609af973e18eb4c5709295627bb +PUB = b69a8b2fdf5c20e734c2ffb294bc8ae1011d664f11afe7fbc471925cf72fa99d +MESSAGE = 30b57a389b48a0beb1a48432bff6b314bded79c4a1763a5acb57cea1bfb4c6d016cf090f5bd05bbd114e33ae7c17782dfa264f46c45f8c599c603016fe9ff05b6b5a99e92fe713a4cd5c41b292ed2bb2e9cf33a440542e821ec82cbf665c3f02e3dc337d7fdb58e31b27cb2954541468814698510df18c85c81fad12db11ec6b966f4930da5646b991db97445097da30dab61cda53a41083cb96add19de6c5eec323bca9d3530e38c00b35af7360077601be6ac97f3030f930a27b90fe8b6911bae389065adc15e1882300e2a003274d23182d5efd5ba4b9130c07bd5c65fecb8b5cb7eb38836b318befdfd77de4d6ca0181f77ae5740891683225f549dd8426145c97c5818c319f7ab2d868e1a41ceab64c085116069897bf2ca3667652406155ed0646431b6de1ccc03b4279ae4d326679265dce82048e7298e1f87fcec0768ac0f5d8ff84f7210be54d411af8edea7217f4e59413121e148c60da +SIG = 3e0b72073dc9375eedcca6c4fc1cd315938a050c92716bd2284f4629a962beec0b7d7cf16ab923d58f5b90d3901a8e5c75c8f17dab9998e007d8c49511973d0e + +SEED = 77a83e18c9f000eeff7deeac959ecba2206c0aa39d2f0e2aed5729482a7a0229 +PUB = 62b1b316135596bfbca6037ed847c61fb7f09fa36ce90abb7789b86f768b59dd +MESSAGE = f3d5fa2acaefd858f1df26e03059cdcbc2468ad74afc993d0db9c4cde4113f8d55c7da71d38ba06520531c61fddb5f33d5f0353be2376e580711be45c0a30b1fa01b55e228c6fa35e3f95b67909fc7df3fd464d93d661a926f9d11f7550c17fbcc3496526e8f10e0c8916677b2be5b319b688f21e81aaa9482e5c93e64ce8c437b9c1e14fefed70a3fee568811dc31cadab3d5b220254465336dc4d97a3bd096b5e065e0cfbe82849e2c1905aca486533f0da7a61f1e9a55b8e2a83262deeb59f2b13d3a8aef5700845b83b25ae2183c0ddac0ce42f8d25674cb0d0d220a6de7c1858bb07d59a3372344d944602aa451d2b937db0fe6feca0beba81721fc361ea7509e2b6d397e1c191b56f54ab436d0d27ab4c061bd661ad1a4452387e8735754d07fa7ef4d4548b172582425b299046e6301b5ba6b914418f149cf722e10bde2e0d41700f12c8429fc897b7819da92292240cd45565458c9a7b29c12 +SIG = 1eaad8420ac12c99ac1ff4476678e3cbbe94da6a797f174664d5ee0f641433fb1e7cb2f5613e10805df8654cd8e0d45d96230932bc7f20b04eae836435134309 + +SEED = 73b03373ef1fd849005ecd6270dd9906f19f4439e40376cdbc520902bc976812 +PUB = 663719e08ba3ba1666f6069a3f54991866b18cc6be41991b02eb3026ff9e155f +MESSAGE = d5c2deaba795c30aba321bc7de6996f0d90e4d05c747fb4dae8f3451895def6e16e72f38eace756f36635f8fb0b72a3a0c1f54663817a94d4fd346f835ab0e657f001a6f2cecb86d0825bd02639254f7f7f38ca99dbb86c64a633f73baf933aae3563281f4005e2d0e7cec9fbde8e588a957e211068be65b3d3d35bf4e8d5bb3478333df9ced9b2abaf48697994a145e9321499fc5ee560f4fbb6849e1ae8eb3d1de0083a21a03f6a6b28176f0130d3895e50e75e3d7d0947a7bc2c5b9ff69895d27791442ba8d0f2180712b567f712ea912f3b0d92c19342e0106ff1d87b46ad33af300b90855ba9769d366e79425d98e4de19905a04577707cbe625b84691781cd26bf62260b4a8bd605f77af6f970e1b3a112e8918344bd0d8d2e41dfd2ce9895b0246e50887aa3a577ff73be4b6ae60feb0ca36f6a5f8171ed209e5c566529c0940d9b4bd744ccee56e54a9a0c6e4da520dd315c2872b02db563703e +SIG = a40abe98fc69da8a1ff9ff5c2cca93632e975980ee8b82c3c376022d6524ab736d01b072f2b681b5f1cd3ea067012ed6d074e949c42327a366caa9e4750a3c08 + +SEED = eab179e41ed5c889ffe6aabdc054faf1307c395e46e313e17a14fe01023ffa30 +PUB = 86f34746d3f7a01ddbe322f1aca56d22856d38733a3a6900bb08e776450ec803 +MESSAGE = 971095cebe5031530224387c5c31966e389b8566390054cf45264b44e18964b7be52c33c4ffb259af16283438fa15dd66bc7791b7533ef10cb0beab524a6437626f4cc74512851adcc2fb129055a482c61107383fb7c5241831d5551634eef0dc0b8f9053a00971aa8fa1ae0898e4b481b6707e97c0f942040b339d92fc17bbade74675af243d8b2dafb15b1db55d12415b85f3037291930ab61600ba3431f8eb425be4491614728af101e81c091f348bc5ffd1bde6ae6cad5c15b3aa7358078cc4effb54a86e7f0e0c55e4cfe0a54605ed443fdf2aaba016585da617e77341d52889d75dd540d39fe8b7993ed705cfddea0cb0d5a731d6bfcdb816afaff47e963eedebdf241af5593353d6d401a34f029a8cdeb1904cc2caa4f9635cc2ba6b7b1a29da625ffc383be2f5a8f1fa4f39b2d4b4f4c2d8838ce258a04d4a120493fdf07f68c0ffd1c16b768a35c55fea2cac696b5c20efc10865cde8a64627dcd +SIG = 143cb28027c2f82e375e5f340e7fe6e60ce7bd51000b49c74168af85e26ed2ed630ed2672090164cc54b052da694ebdd21a21b3053f4dcfd7895ea5f6c8aa80d + +SEED = fbf146ebd51075570ec51ac410ae9f391db75b610ada6362b4dbd949656cfb66 +PUB = be7c2f5b21d746c8ea3245ce6f268e9da74e00fa85c9c475260c68fa1af6361f +MESSAGE = cd7ad4f17fcff73acc402dc102d09079b29aaf2a0f4b27cf6beeb1e2b23d19ab47deb3ae1becd68861ea279c46691738f4fff47c43047c4f8b56b6bbcc3fde0723d44120dcd307a6310dc4f366b8f3cd52db19b8266a487f7872391c45fe0d3248a7abf2c20022d3769547f683067dcc363cd22fd7cda3cadc15804056f0e2aa2b795008c598be7a961805e6df291ba3041c47ff5640275f46e6ae82092d21abcbcfba11e730216008822de3ce462400596da79f7ae5d1df8389112ad98868fa94fb0546bfe6a67aa8d28c4d32072d2eadd6256255f18c2382e662dfa922a680e06a43622c4871d27d1807f7b2703070c83db8dd929c06038b2183cb8e2b9ec4c778d7ecf9e9ffac77fa7737b055feac2e7982aeeec0b72f1bbca2424e1a844bbac79cb2e7400f81dc449d0560b521a7c16bb4167e6696586058a9b8ed2e5116690b77f2a17e5c0b16a83dcbd2e24552293e258b32ba7f844944379342698627 +SIG = 6768006fe0f201b217dd10eb05d4b82adcfeb2ecfc8373c3308f4150394811eb60491881a2e53d1289d96478e18a64c34b2a19832cdccfd96a2e4a0c469fdc0b + +SEED = dff0eb6b426dea2fd33c1d3fc24df9b31b486facb7edb8502954a3e8da99d9fd +PUB = c245085ece69fb9aa560d0c27fdb634f7a840d41d8463660fbe82483b0f3cc3a +MESSAGE = e7c9e313d86160f4c74aa0ae07369ee22b27f81b3f69097affae28dae48483fb52a5c062306b59610f5cdbff6332b1960cd6f2b8f7b41578c20f0bc9637a0fdfc739d61f699a573f1c1a0b49294506cf4487965e5bb07bbf81803cb3d5cb3829c66c4bee7fc800ede216150934d277dea50edb097b992f11bb669fdf140bf6ae9fec46c3ea32f888fde9d154ea84f01c51265a7d3fef6eefc1ccdbffd1e2c897f05546a3b1ca11d9517cd667c660ec3960f7a8e5e80202a78d3a388b92f5c1dee14ae6acf8e17c841c9557c35a2eeced6e6af6372148e483ccd06c8fe344924e1019fb91cbf7941b9a176a073415867210670410c5dbd0ac4a50e6c0a509ddfdc555f60d696d41c77db8e6c84d5181f872755e64a721b061fcd68c463db4d32c9e01ea501267de22879d7fc12c8ca0379edb45abaa6e64dda2af6d40ccf24fbebad7b5a8d3e52007945ecd3ddc1e3efeb522581ac80e98c863ba0c590a3ed95cd1 +SIG = 6b48b10f545ddb7a89cd5829f4e5b20146cf6bc96e550d06f65de8bdae7ccdded26cd630f86c9266bccf88e924033e04f83a54f8290d7f734cf8673cca8f9703 + +SEED = 9f32958c7679b90fd5036056a75ec2eb2f56ec1effc7c012461dc89a3a167420 +PUB = 1d7269dcb6d1f584e662d4ce251de0aba290ef78b97d448afb1e5333f1976d26 +MESSAGE = a56ba86c71360504087e745c41627092ad6b49a71e9daa5640e1044bf04d4f071ad728779e95d1e2460584e6f0773545da82d4814c9189a120f12f3e3819813e5b240d0f26436f70ee353b4d20cea54a1460b5b8f1008d6f95f3aa2d8f1e908fced50d624e3a096938b9353854b96da463a2798a5a312ec790842c10c446e3350c764bf5c972593b9987bf23256daa8894d47f22e85b97607e66fc08a12c789c4746080368d321bb9015a1155b65523ad8e99bb989b44eac756b0734acd7c6357c70b59743246d1652d91b0f9896965141345b9945cf34980452f3502974edb76b9c785fb0f4395266b055f3b5db8aab68e9d7102a1cd9ee3d142504f0e88b282e603a738e051d98de05d1fcc65b5f7e99c4111cc0aec489abd0ecad311bfc13e7d1653b9c31e81c998037f959d5cd980835aa0e0b09bcbed634391151da02bc01a36c9a5800afb984163a7bb815edbc0226eda0595c724ca9b3f8a71178f0d20a5a +SIG = 9881a5763bdb259a3fefbba3d957162d6c70b804fa94ab613406a6ec42505b8789465ca1a9a33e1895988842270c55e5bdd5483f6b17b31781b593507a6c1808 + +SEED = f86d6f766f88b00717b7d6327eb26cf3ceeba5385184426f9cfd8295e2421ff2 +PUB = cb1d250504754183704dbe21c323d66f9f9011758f6d8dab6f597b199662145b +MESSAGE = da8423a6b7a18f20aa1f90ed2331b17b24067c40175bc25d8109e21d87ac00528eb3b2f66a2b52dc7ef2f8cecb75c76099cfa23db8da897043ba1cce31e2dfea46075f5e073203eaeb3d62c84c107b6dab33a14eaf149aa61850c15f5a58d88a15aba9196f9e495e8dbecbcf7e8444f5dd72a08a099d7f6209990b562974ea829ef11d29a920e3a799d0d92cb50d50f817631ab09de97c31e9a05f4d78d649fcd93a83752078ab3bb0e16c564d4fb07ca923c0374ba5bf1eea7e73668e135031feafcbb47cbc2ae30ec16a39b9c337e0a62eecdd80c0b7a04924ac3972da4fa9299c14b5a53d37b08bf02268b3bac9ea9355090eeb04ad87bee0593ba4e4443dda38a97afbf2db9952df63f178f3b4c52bcc132be8d9e26881213abdeb7e1c44c4061548909f0520f0dd7520fc408ea28c2cebc0f53063a2d30570e05350e52b390dd9b67662984847be9ad9b4cd50b069ffd29dd9c62ef14701f8d012a4a70c8431cc +SIG = ec61c0b292203a8f1d87235ede92b74723c8d23408423773ae50b1e9bc4464e03e446da9dce4c39f6dd159bea26c009ed00120bc36d4a247dc0d24bcefcc110c + +SEED = a5b34cefab9479df8389d7e6f6c146aa8affb0bec837f78af64624a145cc344e +PUB = 7b0f4f24d9972bc6fe83826c52716ad1e0d7d19f123858cb3e99fa636ac9631a +MESSAGE = e21e98af6c2bac70557eb0e864da2c2b4d6c0a39a059d3477251f6178a39676f4749e7fbea623f148a43a8b0fe0610506fa658abd2f5fa39198f2636b724db22d1aebc2ab07b2b6dbffdee8cece81e1af1493ec1964e16bf86ab258ca0feb77e3c8717e44038abe152c14be15660bf93b2d48d92c4ed7074d2494210621bcf204fba88c654d5ffe01e1a53d08f70bb237089dc807216ff6a85dbec3102237d42590778acf6c1dc566d5a2bb9a63bc21c329c272e5965baeeb0fe891de3cc8cbfa8e541a8881df68942e7ff8dc656bd08575f6aaf924a176d663b1a1f43574d11768c701b269561e55438dbebfd443d2115cb933d1cde4a915b54c325c27f499ef02bd012ff1f9a36390922887600fe712bcdc23eb5974a305372ad52951f83f0e58cc49e289841621917f1fcb0235147240dae4cf3b99b6ac6d8de94efe7c4436714508bcd0114c56068ff1b7c16d51bd906437874d6549ab5d8087896872ec8a09d7412 +SIG = 2fbd899d72b6d39e4f45b8b62cbbd5f3c0acb1ad8540913fa585877e91ccfef7bee50a4b0f9fedf5cc1e0d1953ad399c8389a93391e1b7c929af6d6f3b796c08 + +SEED = ad75c9ce299c4d59393367d77a4c9f8df8dcec765c6dbd25b527fb7669913604 +PUB = b9910548fe6312a119c9993eebcfb9dc90030ffb0e4de2b7ccd23cbeb4fef71b +MESSAGE = 62fc5ab67deb1fee9ab6cca3b88a1df1e589f0fd4a88f4aa7738948761fe84372c5b18e4655220c1d84d52acad32e229a5c756c20fc62fe4b4b4e5fd7077ae4ed5397aa796f2307ceedb6505b39297856f4aeb5e70938e36ee24a0ac7d9868306f6b53910623b7dc89a6672ad738576ed5d88831dd338321c8902bc2061f65e94d452fdfa0dc665cefb92308e52301bd4627006b363d06b775a395914d8c863e95a00d6893f3376134c429f56478145e4456f7a12d65bb2b8965d728cb2ddbb708f7125c237095a92195d92fa727a372f3545ae701f3808fee802c8967a76e8a940e55fb2d810bfb47ada156f0eda1829b159cf05c7f36cf3847d7b21de84c3dc0fe658347f79396a01139a508b60022db1c0e5aeef47e445e66f783e62c96597bdb16f209c08a9132c7573136170ee3ebf24261265a89fb4f10333375e20b33ab7403464f5249461c6853c5fddb9f58af816892910393a7077b799fdc3489720998feea86 +SIG = 6b7ef27bcfbf2b714985033764fccff555e3f5bc44610d6c8c62117cb3831a07f4a8bddb0eaed1d46b0289b15de1aa4dcc17d71be96a09e66ba4dc4627c78705 + +SEED = 1ced574529b9b416977e92eb39448a8717cac2934a243a5c44fb44b73ccc16da +PUB = 85e167d5f062fee82014f3c8b1beaed8eefb2c22d8649c424b86b21b11eb8bda +MESSAGE = 1b3b953cce6d15303c61ca707609f70e7250f6c0deba56a8ce522b5986689651cdb848b842b2229661b8eeabfb8570749ed6c2b10a8fbf515053b5ea7d7a9228349e4646f9505e198029fec9ce0f38e4e0ca73625842d64caf8ced070a6e29c743586aa3db6d82993ac71fd38b783162d8fe04ffd0fa5cbc381d0e219c91937df6c973912fc02fda5377312468274c4bee6dca7f79c8b544861ed5babcf5c50e1473491be01708ac7c9ff58f1e40f855497ce9d7cc47b9410f2edd00f6496740243b8d03b2f5fa742b9c630867f77ac42f2b62c14e5ebddc7b647a05fff43670745f2851eff4909f5d27d57ae87f61e965ee60fdf97724c59267f2610b7ad5de919856d64d7c212659ce8656149b6a6d29d8f92b312be50b6e2a431d36ae022b00a6fe360e3af65432899c43be0427e36d21cfec81f21aa53b33db5ed2c37da8f96ac3e7dc67a1de37546cf7de1008c7e1adbe0f34fa7eb2434d94e6a13f4cf86a98d497622f +SIG = e0303aefe08a77738dcc657afbb9b835ed279613a53c73fdc5ddbfb350e5cff4d6c9bb43dc07c95bf4e23b64c40f8804c7169952e3c8d59a7197241bfed0740f + +SEED = f0790d93e2d3b84f61ef4c807147aba410e415e72b71b0d61d01026fed99da3d +PUB = efdf649fb033cf328e0b287796f8a25e9c6e2e871b33c2c21a4028a8a25a4b28 +MESSAGE = 7973e9f32d74805992eb65da0d637335e50eff0ce68ea2d1f3a02de704492b9cfbe7e7ba96fdb42bb821a513d73fc60402e92c855deaed73ffeaf70952029062c833e14ec1b14f144e2207f6a0e727e5a7e3cbab27d5972970f69518a15b093e740cc0ce11bf5248f0826b8a98bde8bf2c7082c97aff158d08371118c89021cc3974ae8f76d86673c3f824b62c79c4b41f40eaa8943738f03300f68cbe175468eb235a9ff0e6537f8714e97e8f08ca444e41191063b5fabd156e85dcf66606b81dad4a95065584b3e0658c20a706eaf4a0777da4d2e0cd2a0fca60109c2b4403db3f03cd4781c1fbb0272202bcb11687808c50cb98f64b7f3fd3d43333bb5a061b9e377090abb1e0a885cb26b73c163e63ff6451ff2f4ec8249c7e152bd03973a1e964e2b5b235281a938399a112a24529e383a560dc50bb1b622ad74ef35658dcb10ffe022568ac3ffae5b465a8ed7643e8561b352ee9944a35d882c712b187788a0abae5a22f +SIG = 08773a6a78762cbb1e25fcbb29139941bdf16f4e09a1fa08fc701f32f933edd74c0ae983c12a0a5b020b6bcf44bb719dde8ed0781a8298265640e1608c98b301 + +SEED = 4cb9df7ce6fae9d62ba09e8eb70e4c969bdeafcb5ec7d7024326e6603b0621bf +PUB = 018069dd0eb44055a35cd8c77c37ca9fb1ad2417271385e134b2f4e81f52033c +MESSAGE = 14627d6ea0e7895460759476dc74c42800ceef994327518151490d9df23067914e44788a12768ccb25471b9c3ba9d14fb436dcba38429b3a0456877763c49175d0e082683e07a9058f3685c6279307b2303d1221b9c29793d8a4877f6df51587384dadf751c5f7bfbd207d519622c37b51ceeee2c20d8269f8cb88d3fe43d6d434d5bbd0e203c1532d97ba552147227496c87f67b50bb76193add0144df1c176657585408362ca2ed04ad62acf1c25e341dfd1498d85b4b1349a8b0b9b02c43523c55853419bfed37d5a2cdf17dfbf1a3bd7759d6ae180f9d27dcd9a8933e29a7c0a30771eea7c2e0fa242925d2336dce585629057d844323964f6d3d11ff0b3f829a3be8c9f0468a6823d8e70ab5a2da21e15fa8b041a29812222e9c30b2bd9a12d1fdee6f87876e8ce81009637a8bb2236129a47ca74289ee4aad429ffe29f47430241ca8cc3848b7200fd6e1470651a9a0a6f72c9033e831df051408a6260f65cbaf6e012b18e +SIG = e33c07836c537d6bfbd0f4592d6e35b163499ba78dc7ffcec565d04f9a7db781943e29e6ce76763e9baddf57437fd9c6b03239a6e6850e4502a356c2e12c3705 + +SEED = a136e009d53e5ef59d0946bc175663a86bc0fcd29eadd95cfc9d266037b1e4fb +PUB = 9c1806ec0454f58314eb8397d64287dee386640d8491aba364607688841715a0 +MESSAGE = a49d1c3d49e13c2eda56868a8824aa9f8d2bf72f21955ebafd07b3bdc8e924de20936cee513d8a64a47173a3bd659eff1accff8244b26aae1a0c27fa891bf4d85e8fb1b76a6cab1e7f74c89ee07bb40d714326f09b3fd40632fad208ea816f9072028c14b5b54ecc1c5b7fc809e7e0786e2f11495e76017eb62aa4563f3d00ee84348d9838cd17649f6929a6d206f60e6fc82e0c3464b27e0e6abd22f4469bdfd4cb54f77e329b80f71bf42129ec13c9dfe192adfaa42ee3ddeeda385816fbad5f411938c63b560f4ecd94534be7d98725cd94c99ce492f0f069ba0ec08f877a7812ef27ae19d7a77be63f66bcf8d6cf3a1a61fc9cfef104c7462a21ca7f03afb5bb1ac8c75124b554e8d044b810d95ff8c9dd09a34484d8c4b6c95f95c3c22823f52ce844293724d5259191f1ba0929e2acdbb8b9a7a8adf0c52e78acdfdf057b0985881afbed4dbebdebbdae0a2b63bd4e90f96afdcbbd78f506309f9bdb650013cb73faed73904e +SIG = bc094ba91c115dee15d753361a75f3f03d6af45c92157e95dbe8d32194b6c5ce72b9dc66f73df12dca0b639f3e791d478616a1f8d7359a42c8eae0dda16b1606 + +SEED = ff0f1c57dd884fbeea6e2917282b79ba67f8a6851267b9f4636dafda33bd2b5b +PUB = fef6378ad12a7c252fa6eb742b05064b41530ff019dc680ab544c027ea2836e7 +MESSAGE = 522a5e5eff5b5e98fad6878a9d72df6eb318622610a1e1a48183f5590ecef5a6df671b28be91c88cdf7ae2881147fe6c37c28b43f64cf981c455c59e765ce94e1b6491631deaeef6d1da9ebca88643c77f83eae2cfdd2d97f604fe45081d1be5c4ae2d875996b8b6fecd707d3fa219a93ba0488e55247b405e330cfb97d31a1361c9b2084bdb13fb0c058925db8c3c649c9a3e937b533cc6310fa3b16126fb3cc9bb2b35c5c8300015488a30fadca3c8871fa70dfdc7055bf8e631f20c9b2528311e324a7c4edd5462079f3441c9ecf55fa999e731372344fdc0d413e417aaa001a1b2d3d9bc000fec1b02bd7a88a812d9d8a66f9464764c070c93041eefb17ce74eff6d4aff75f0cbf6a789a9ecde74abe33130fca0da853aa7c3313ada3f0ae2f595c6796a93685e729dd18a669d6381825ab3f36a391e7525b2a807a52fa5ec2a030a8cf3b77337ac41fceb580e845eed655a48b547238c2e8137c92f8c27e585caad3106eee3814a +SIG = d5008486726cce330a29dd7e4d7474d735798201afd1206feb869a112e5b43523c06976761be3cf9b2716378273c94f93572a7d2b8982634e0755c632b449008 + +SEED = 0bc6af64de5709d3dbc28f7ef6d3fe28b6de529f08f5857ccb910695de454f56 +PUB = fb491fc900237bdc7e9a119f27150cd911935cd3628749ff40ef41f3955bc8ac +MESSAGE = ac7886e4f4172a22c95e8eea37437b375d72accedcee6cc6e816763301a2d8ef4d6f31a2c1d635818b7026a395ce0dafd71c5180893af76b7ea056c972d680eca01dcbdbae6b26f1c5f33fc988b824fbbe00cacc316469a3bae07aa7c8885af7f65f42e75cef94dbb9aab4825143c85070e7716b7612f64ef0b0166011d23eb5654aa098b02d8d71e57c8fa17bff2fe97dc8193177eadc09fb192d80aa92afa98720d4614817ff3c39d3acce18906fa3de09618931d0d7a60c4429cbfa20cf165c947929ac293ae6c06e7e8f25f1264291e3e1c98f5d93e6ecc2389bc60dbbf4a621b132c552a99c95d26d8d1af61138b570a0de4b497ebe8051c7273a98e6e7876d0b327503af3cb2cc4091ce1925cb2f2957f4ec56ee90f8a09dd57d6e83067a356a4cfe65b1b7a4465da2ab133b0efb5e7d4dbb811bcbbde712afbf0f7dd3f326222284b8c74eac7ad6257fa8c632b7da2559a6266e91e0ef90dbb0aa968f75376b693fcaa5da342221 +SIG = dbc7134d1cd6b0813b53352714b6df939498e91cf37c324337d9c088a1b998347d26185b430900412929e4f63e910379fc42e355a4e98f6fee27dafad1957206 + +SEED = 2f5e83bd5b412e71ae3e9084cd369efcc79bf6037c4b174dfd6a11fb0f5da218 +PUB = a22a6da29a5ef6240c49d8896e3a0f1a4281a266c77d383ee6f9d25ffacbb872 +MESSAGE = b766273f060ef3b2ae3340454a391b426bc2e97264f8674553eb00dd6ecfdd59b611d8d662929fec710d0e462020e12cdbf9c1ec8858e85671acf8b7b14424ce92079d7d801e2ad9acac036bc8d2dfaa72aa839bff30c0aa7e414a882c00b645ff9d31bcf5a54382def4d0142efa4f06e823257ff132ee968cdc6738c53f53b84c8df76e9f78dd5056cf3d4d5a80a8f84e3edec48520f2cb4583e708539355ef7aa86fb5a0e87a94dcf14f30a2cca568f139d9ce59eaf459a5c5916cc8f20b26aaf6c7c029379aedb05a07fe585ccac60307c1f58ca9f859157d06d06baa394aace79d51b8cb38cfa2598141e245624e5ab9b9d68731173348905315bf1a5ad61d1e8adaeb810e4e8a86d7c13537b0be860ab2ed35b73399b8808aa91d750f77943f8a8b7e89fdb50728aa3dbbd8a41a6e00756f438c9b9e9d55872df5a9068add8a972b7e43edad9ced2237ca1367be4b7cdb66a54ea12eef129471158610eaf28f99f7f686557dcdf644ea +SIG = 9f80922bc8db32d0cc43f9936affebe7b2bc35a5d82277cd187b5d50dc7fc4c4832fffa34e9543806b485c04548e7c75429425e14d55d91fc1052efd8667430b + +SEED = 722a2da50e42c11a61c9afac7be1a2fed2267d650f8f7d8e5bc706b807c1b91d +PUB = fd0b964562f823721e649c3fedb432a76f91e0aead7c61d35f95ed7726d78589 +MESSAGE = 173e8bb885e1f9081404acac999041d2ecfcb73f945e0db36e631d7cd1ab999eb717f34bf07874bf3d34e2530eb6085f4a9f88ae1b0f7d80f221456a8e9a8890b91a50192deaaacc0a1a615a87841e2c5a9e057957af6e48e78cc86198e32e7aa24dcf6cffa329bc72606d65b11682c8ba736cce22a05785df1146331e41609cf9ca711cf464958297138b58a9073f3bbf06ad8a85d135de66652104d88b49d27ad41e59bcc44c7fab68f53f0502e293ffcabaaf755927dfdffbfde3b35c080b5de4c8b785f4da64ef357bc0d1466a6a96560c3c4f3e3c0b563a003f5f95f237171bce1a001771a04ede7cdd9b8ca770fd36ef90e9fe0000a8d7685fd153cc7282de95920a8f8f0898d00bf0c6c933fe5bb9653ff146c4e2acd1a2e0c23c1244844dacf8652716302c2032f9c114679ed26b3ee3ab4a7b18bc4e3071f0977db57cd0ac68c0727a09b4f125fb64af2850b26c8a484263334e2da902d744737044e79ab1cf5b2f93a022b63d40cd +SIG = c2695a57172aaa31bd0890f231ca8eeec0287a87172669a899ad0891cea4c47579b50420e791cdec8c182c8a0e8dde21b2480b0cfd8111e28e5603347a352d04 + +SEED = 5fe9c3960ed5bd374cc94d42357e6a24dc7e3060788f726365defacf13cd12da +PUB = 0ce7b155c8b20ebdaacdc2aa23627e34b1f9ace980650a2530c7607d04814eb4 +MESSAGE = c9490d83d9c3a9370f06c91af001685a02fe49b5ca667733fff189eee853ec1667a6c1b6c787e9244812d2d532866ab74dfc870d6f14033b6bcd39852a3900f8f08cd95a74cb8cbe02b8b8b51e993a06adfebd7fc9854ae5d29f4df9642871d0c5e470d903cfbcbd5adb3275628f28a80bf8c0f0376687dae673bf7a8547e80d4a9855ae2572fc2b205dc8a198016ddc9b50995f5b39f368f540504a551803d6dd5f874828e5541ded052894d9e2dc5e6aa351087e790c0dd5d9c4decb217e4db81c98a184b264e6daeac0f11e074cae2bfc899f54b419c65dcc22664a915fbfffac35cee0f286eb7b144933db933e16c4bcb650d537722489de236373fd8d65fc86118b6def37ca4608bc6ce927b65436ffda7f02bfbf88b045ae7d2c2b45a0b30c8f2a04df953221088c555fe9a5df260982a3d64df194ee952fa9a98c31b96493db6180d13d67c36716f95f8c0bd7a039ad990667ca34a83ac1a18c37dd7c7736aa6b9b6fc2b1ac0ce119ef77 +SIG = 379f9c54c413af0d192e9bc736b29da9d521e7ba7841d309f9bcc1e742ec4308fe9f7ba51e0b22aed487cb4aa3913b9bebfb3aacd38f4039f9bbbebe1ad80002 + +SEED = ec2fa541ac14b414149c3825eaa7001b795aa1957d4040dda92573904afa7ee4 +PUB = 71b363b2408404d7beecdef1e1f511bb6084658b532f7ea63d4e3f5f01c61d31 +MESSAGE = 2749fc7c4a729e0e0ad71b5b74eb9f9c534ebd02ffc9df4374d813bdd1ae4eb87f1350d5fdc563934515771763e6c33b50e64e0cd114573031d2186b6eca4fc802cddc7cc51d92a61345a17f6ac38cc74d84707a5156be9202dee3444652e79bae7f0d31bd17567961f65dd01a8e4bee38331938ce4b2b550691b99a4bc3c072d186df4b3344a5c8fbfbb9fd2f355f6107e410c3d0c798b68d3fb9c6f7ab5fe27e70871e86767698fe35b77ead4e435a9402cc9ed6a2657b059be0a21003c048bbf5e0ebd93cbb2e71e923cf5c728d1758cd817ad74b454a887126d653b95a7f25e5293b768c9fc5a9c35a2372e3741bc90fd66301427b10824bb4b1e9110bfba84c21a40eb8fed4497e91dc3ffd0438c514c0a8cb4cac6ad0256bf11d5aa7a9c7c00b669b015b0bf81425a21413e2ffb6edc0bd78e385c44fd74558e511c2c25fee1fec18d3990b8690300fa711e93d9854668f0187065e76e7113ae763c30ddd86720b5546a6c3c6f1c43bc67b14 +SIG = 84d18d56f964e3776759bba92c510c2b6d574555c3cddade212da90374554991e7d77e278d63e34693e1958078cc3685f8c41c1f5342e351899638ef61211401 + +SEED = 6132692a5ef27bf476b1e991e6c431a8c764f1aebd470282db3321bb7cb09c20 +PUB = 7a2d166184f9e5f73bea454486b041ceb5fc2314a7bd59cb718e79f0ec989d84 +MESSAGE = a9c0861665d8c2de06f9301da70afb27b3024b744c6b38b24259294c97b1d1cb4f0dcf7575a8ed454e2f0980f50313a77363415183fe9677a9eb1e06cb6d34a467cb7b0758d6f55c564b5ba15603e202b18856d89e72a23ab07d8853ff77da7aff1caebd7959f2c710ef31f5078a9f2cdae92641a1cc5f74d0c143ec42afbaa5f378a9e10d5bf74587fa5f49c156233247dafd3929acde888dc684337e40cdc5932e7eb73ffcc90b85c0ad460416691aefbd7efd07b657c350946a0e366b37a6c8089aba5c5fe3bbca064afbe9d47fbc83914af1cb43c2b2efa98e0a43be32ba823202001def36817251b65f9b0506cef6683642a46ed612f8ca81ee97bb04d317b517343ade2b77126d1f02a87b7604c8653b6748cf5488fa6d43df809faa19e69292d38c5d397dd8e20c7af7c5334ec977f5010a0f7cb5b89479ca06db4d12627f067d6c42186a6b1f8742f36ae709ba720e3cd898116666d81b190b9b9d2a72202cb690a03f3310429a71dc048cde +SIG = eb677f3347e1a1ea929efdf62bf9105a6c8f4993033b4f6d03cb0dbf9c742b270704e383ab7c0676bdb1ad0ce9b16673083c9602ec10ae1dd98e8748b336440b + +SEED = f219b2101164aa9723bde3a7346f68a35061c01f9782072580ba32df903ba891 +PUB = f66b920d5aa1a6085495a1480539beba01ffe60e6a6388d1b2e8eda23355810e +MESSAGE = 015577d3e4a0ec1ab25930106343ff35ab4f1e0a8a2d844aadbb70e5fc5348ccb679c2295c51d702aaae7f6273ce70297b26cb7a253a3db94332e86a15b4a64491232791f7a8b082ee2834af30400e804647a532e9c454d2a0a7320130ab6d4d860073a34667ac25b7e5e2747ba9f5c94594fb68377ae260369c40713b4e32f23195bf91d3d7f1a2719bf408aad8d8a347b112e84b118817cb06513344021763035272a7db728a0ccdaa949c61715d0764140b3e8c01d20ff1593c7f2d55c4e82a1c0cb1ea58442bf80a741bca91f58ab0581b498ee9fe3c92ca654148ef75313543d1aff382befe1a93b02190ce0102175158e2071d02bacad8dbe9fb940fcb610c105ad52c80feb1ec4e524f4c0ec7983e9ce696fa4fcf4bf0514b8f0432b17d5448fc426fea2b01ac7b26c2aed769927534da22576fc1bba726e9d65be01b59f60a648ace2fc3e5e275789fa637cbbd84be3d6ac24457a6292cd656c7b569a52ffea7916b8d04b4f4a75be7ac95142f +SIG = 17f0127ca3bafa5f4ee959cd60f772be87a0034961517e39a0a1d0f4b9e26db1336e60c82b352c4cbacdbbd11771c3774f8cc5a1a795d6e4f4ebd51def36770b + +SEED = fc180035aec0f5ede7bda93bf77ade7a81ed06de07ee2e3aa8576be81608610a +PUB = 4f215e948cae243ee3143b80282ad792c780d2a6b75060ca1d290ca1a8e3151f +MESSAGE = b5e8b01625664b222339e0f05f93a990ba48b56ae65439a17520932df011721e284dbe36f98631c066510098a68d7b692a3863e99d58db76ca5667c8043cb10bd7abbaf506529fbb23a5166be038affdb9a234c4f4fcf43bddd6b8d2ce772dd653ed115c095e232b269dd4888d2368cb1c66be29dd383fca67f66765b296564e37555f0c0e484504c591f006ea8533a12583ad2e48318ff6f324ecaf804b1bae04aa896743e67ef61ca383d58e42acfc6410de30776e3ba262373b9e1441943955101a4e768231ad9c6529eff6118dde5df02f94b8d6df2d99f27863b517243a579e7aaff311ea3a0282e47ca876fabc2280fce7adc984dd0b30885b1650f1471dfcb0522d49fec7d042f32a93bc368f076006ea01ec1c7412bf66f62dc88de2c0b74701a5614e855e9fa728fb1f1171385f96afbde70dea02e9aa94dc21848c26302b50ae91f9693a1864e4e095ae03cdc22ad28a0eb7db596779246712fab5f5da327efec3e79612de0a6ccaa536759b8e +SIG = a43a71c3a19c35660dae6f31a254b8c0ea3593fc8fca74d13640012b9e9473d4afe070db01e7fb399bf4ca6070e062180011285a67dd6858b761e46c6bd32004 + +SEED = a2836a65427912122d25dcdfc99d7046fe9b53d5c1bb23617f11890e94ca93ed +PUB = 8c12bda214c8abb2286acffbf8112425040aab9f4d8bb7870b98da0159e882f1 +MESSAGE = 813d6061c56eae0ff53041c0244aa5e29e13ec0f3fb428d4beb8a99e04bca8c41bddb0db945f487efe38f2fc14a628fafa2462f860e4e34250eb4e93f139ab1b74a2614519e41ee2403be427930ab8bc82ec89ceafb60905bd4ddbbd13bdb19654314fc92373140b962e2258e038d71b9ec66b84ef8319e03551cb707e747f6c40ad476fbefdce71f3a7b67a1af1869bc6440686e7e0855e4f369d1d88b8099fba54714678627bba1aff41e7707bc97eddf890b0c08dce3e9800d24c6f61092ce28d481b5dea5c096c55d72f8946009131fb968e2bc8a054d825adab76740dcf0d758c8bf54ff38659e71b32bfe2e615aaabb0f5293085649cf60b9847bc62011ce3878af628984a5840a4ad5dae3702db367da0f8a165fed0517eb5c442b0145330241b97eeca733ba6688b9c129a61cd1236aff0e27bcf98c28b0fbeea55a3d7c7193d644b2749f986bd46af8938e8faaeafbd9cec3612ab005bd7c3eeafe9a31279ca6102560666ba16136ff1452f850adb +SIG = e6a9a6b436559a4320c45c0c2c4a2aedecb90d416d52c82680ac7330d062aebef3e9ac9f2c5ffa455c9be113013a2b282e5600fd306435ada83b1e48ba2a3605 + +SEED = f051af426d0c3282fafc8bf912ade1c24211a95ad200e1eef549320e1cb1a252 +PUB = fa87955e0ea13dde49d83dc22e63a2bdf1076725c2cc7f93c76511f28e7944f2 +MESSAGE = b48d9f84762b3bcc66e96d76a616fa8fe8e01695251f47cfc1b7b17d60dc9f90d576ef64ee7d388504e2c9079638165a889696471c989a876f8f13b63b58d531fea4dd1229fc631668a047bfae2da281feae1b6de3ebe280abe0a82ee00fbfdc22ce2d10e06a0492ff1404dfc094c40b203bf55721dd787ed4e91d5517aaf58d3bdd35d44a65ae6ba75619b339b650518cefcc17493de27a3b5d41788f87edbde72610f181bf06e208e0eb7cdfe881d91a2d6cc77aa19c0fcf330fedb44675d800eb8cff9505d8887544a503cbe373c4847b19e8f3995726efd6649858595c57ccaf0cbc9eb25de83ba046bc9f1838ac7b8953dd81b81ac0f68d0e9338cb55402552afb6bc16949351b926d151a82efc695e8d7da0dd55099366789718ccbf36030bd2c3c109399be26cdb8b9e2a155f3b2cb1bfa71ab69a23625a4ac118fe91cb2c19788cf52a71d730d576b421d96982a51a2991daec440cda7e6cc3282b8312714278b819bfe2387eb96aa91d40173034f428 +SIG = b8f713578a64466719aceb432fce302a87cf066bf3e102a350616921a840964bfc7e685d8fd17455ac3eb4861edcb8979d35e3a4bd82a078cd707721d733400e + +SEED = a103e92672c65f81ea5da1fff1a4038788479e941d503a756f4a755201a57c1d +PUB = ee63a5b69641217acbaf3339da829ec071b9931e5987153514d30140837a7af4 +MESSAGE = b1984e9eec085d524c1eb3b95c89c84ae085be5dc65c326e19025e1210a1d50edbbba5d1370cf15d68d687eb113233e0fba50f9433c7d358773950c67931db8296bbcbecec888e87e71a2f7579fad2fa162b85fb97473c456b9a5ce2956676969c7bf4c45679085b62f2c224fc7f458794273f6d12c5f3e0d06951824d1cca3e2f904559ed28e2868b366d79d94dc98667b9b5924268f3e39b1291e5abe4a758f77019dacbb22bd8196e0a83a5677658836e96ca5635055a1e63d65d036a68d87ac2fd283fdda390319909c5cc7680368848873d597f298e0c6172308030ffd452bb1363617b316ed7cd949a165dc8abb53f991aef3f3e9502c5dfe4756b7c6bfdfe89f5e00febdd6afb0402818f11cf8d1d5864fe9da1b86e39aa935831506cf2400ea7ed75bd9533b23e202fe875d7d9638c89d11cb2d6e6021ae6bd27c7754810d35cd3a61494f27b16fc794e2cd2f0d3453ada933865db78c579571f8fc5c5c6be8eaffce6a852e5b3b1c524c49313d427abcb +SIG = 2aa2035c2ce5b5e6ae161e168f3ad0d6592bcf2c4a049d3ed342fceb56be9c7cb372027573ae0178e8878ebefca7b030327b8aad41857de58cb78e1a00cbac05 + +SEED = d47c1b4b9e50cbb71fd07d096d91d87213d44b024373044761c4822f9d9df880 +PUB = f4e1cb86c8ca2cfee43e58594a8778436d3ea519704e00c1bbe48bbb1c9454f8 +MESSAGE = 88d7009d51de3d337eef0f215ea66ab830ec5a9e6823761c3b92ad93ea341db92ece67f4ef4ceb84194ae6926c3d014b2d59781f02e0b32f9a611222cb9a5850c6957cb8079ae64e0832a1f05e5d1a3c572f9d08f1437f76bb3b83b52967c3d48c3576848891c9658d4959eb80656d26cdba0810037c8a18318ff122f8aa8985c773cb317efa2f557f1c3896bcb162df5d87681bb787e7813aa2dea3b0c564d646a92861f444ca1407efbac3d12432cbb70a1d0eaffb11741d3718fedee2b83036189a6fc45a52f74fa487c18fd264a7945f6c9e44b011f5d86613f1939b19f4f4fdf53234057be3f005ad64eebf3c8ffb58cb40956c4336df01d4424b706a0e561d601708d12485e21bcb6d799d8d1d044b400064ec0944501406e70253947006cabbdb2dd6bd8cee4497653d9113a44d4de9b68d4c526fca0b9b0c18fe50fb917fdd9a914fb816108a73a6b3fff9e654e69c9cfe02b05c6c1b9d15c4e65cf31018b8100d784633ee1888eee3572aafa6f189ea22d0 +SIG = 627e7ca7e34ed6331d62b9541c1ea9a9292be7b0a65d805e266b5122272a82db7d765acc7e2a290d685804922f91ed04a3c382c03ff21a1768f584413c4e5f00 + +SEED = fc0c32c5eb6c71ea08dc2b300cbcef18fdde3ea20f68f21733237b4ddaab900e +PUB = 47c37d8a080857eb8777a6c0a9a5c927303faf5c320953b5de48e462e12d0062 +MESSAGE = a7b1e2db6bdd96b3d51475603537a76b42b04d7ebd24fe515a887658e4a352e22109335639a59e2534811f4753b70209d0e4698e9d926088826c14689681ea00fa3a2fcaa0047ced3ef287e6172502b215e56497614d86b4cb26bcd77a2e172509360ee58893d01c0d0fb4d4abfe4dbd8d2a2f54190fa2f731c1ceac6829c3ddc9bfb2ffd70c57ba0c2b22d2326fbfe7390db8809f73547ff47b86c36f2bf7454e678c4f1c0fa870bd0e30bbf3278ec8d0c5e9b64aff0af64babc19b70f4cf9a41cb8f95d3cde24f456ba3571c8f021d38e591dec05cb5d1ca7b48f9da4bd734b069a9fd106500c1f408ab7fe8e4a6e6f3ed64da0ed24b01e33df8475f95fa9ed71d04dd30b3cd823755a3401bf5afae10ee7e18ec6fe637c3793fd434b48d7145130447e00299101052558b506554ec9c399f62941c3f414cbc352caa345b930adecfaddac91ee53d1451a65e06201026325de07c931f69bba868a7c87ee23c604ec6794332917dfe2c5b69669b659706917f71eddf96 +SIG = 6887c6e2b98a82af5ee3dfa7ca2cb25d9c10745620a82956acba85cb57c8ec24279fa42f092359a1b6bbeafba050f14b6288209e6ef7bc1e0a2b872c1138f305 + +SEED = a8d73d639a23cc6a967ef31bcabb5d063e53e1eab8fcc7cab9bc3a17fde9c2f8 +PUB = 8daa9f4c8b1a44691bf44521f2f7ca45dc7fc61f6a4ce6f98faa41c2a74977d1 +MESSAGE = fd1fac3d53313b11acd29f5a83ac11896dab2530fa47865b2295c0d99dd67c36ed8e5fa549150c794c5549efb5c1d69114d5d607b23285b7212afaab57846a54ae67b9e880e07b6586607cecf6d4eed516a3a75511fe367d88eb871e6d71b7d6aa1367a01421b1088fc2d75e44954b73625c52da8a3a183c60be9da6050f59a453caa53520593671728d431877bfaac913a765fb6a56b75290b2a8aaac34afb9217ba1b0d5850ba0fdabf80969def0feee794ceb60614e3368e63ef20e4c32d341ec9b0328ea9fe139207ed7a626ff08943b415233db7cfcc845c9b63121d4ed52ec3748ab6a1f36b2103c7dc7e9303acea4ba8af7a3e07184fb491e891ede84f0dc41cadc3973028e879acd2031afc29a16092868e2c7f539fc1b792edab195a25ab9830661346b39ef53915de4af52c421eaf172e9da76a08c283a52df907f705d7e8599c5baae0c2af380c1bb46f93484a03f28374324b278992b50b7afa02552cafa503f034f8d866e9b720271dd68ccb685a85fffd1 +SIG = c4dcef1a2453939b364b340250c3129431431d5ba3f47670ab07ce680c69bf28b678627c76a6360fc40dc109aa7dea371b825e46134f624572182acf3957e70f + +SEED = 79c7dcb7d59a8df6b2b2ba0413059d89680995c20e916da01b8f067dc60cdeb4 +PUB = 298743c73918bd556b28f8d4824a09b814752a7aeae7ee04875c53f4d6b108d9 +MESSAGE = 5fe202f5b33b7788810d2508a13b3114d69b8596e6eacda05a04a2eb597fa3279c208b5a5b65daacb699f144e1d660e78e139b578331abec5c3c35334454f03e832c8d6e2984df5d450ecb5d33582a78808a9c78f26ebcd1244ef52e3fa6dca115c1f0cb56e38eae0e5b39f5fd863dffd0b2fb5b958f2d739db312fc667a17b031c4c9f8c5a2ad577984cc4146c437580efd2152173fe0d5782cc2ae9831a8d9a04177256018ff7631e0b0d8a99cb28f008b320421e27a74c31359188663456d85e098c1ebd281701097b6ae5a871e5ccc02058a501416cb91c12cef5be6f1914370e563f1a1b2aa41f4b8ee84cd32a1d509e529787d14a445438d807ecd620e2fa26de0da6426864784d4a28f54103e609283b99ee9b2b699c980bbb7882c3ea68ddc90802ac232f2c8e84291987bf3c5240921b59cfa214969317673d0be7f34b1ca0e15ea73c7175401ce550be106b49e62f8db68695e740e0f3a3556a19f3c8e6b91ac1cc23e863fcd0f0d9eb7047aa631e0d2eb9bcc6b +SIG = 7b7cbe44c771e4371bae13b0722babcc1064155732962f407cba2acd35381d42210bece822f4681121fd4dab745a1f3077922fba1a78045b712902baccac660e + +SEED = b9ced0412593fefed95e94ac965e5b23ff9d4b0e797db02bf497994d3b793e60 +PUB = c1629a723189959337f5535201e5d395ba0a03ea8c17660d0f8b6f6e6404bb12 +MESSAGE = 555bb39c1899d57cabe428064c2d925f5fc4cf7059b95fb89a8e9e3a7e426c6c922d9e4d76984ea2383cabb4f2befd89c1f20eaa8a00dbe787cfa70ae2ae6aa90331cbbe580fa5a02184ed05e6c8e89d576af28aeeaf7c4e2500f358a00971a0a75920e854849bf332142975404f598c32e96982043d992bcd1a4fe819bb5634ad03467afc4ce05073f88ba1ba4ae8653a04665cf3f71690fe13343885bc5ebc0e5e62d882f43b7c68900ac9438bf4a81ce90169ec129ee63e2c675a1a5a67e27cc798c48cc23f51078f463b3b7cc14e3bcfd2e9b82c75240934cbdc50c4308f282f193122995606f40135100a291c55afdf8934eb8b61d81421674124dec3b88f9a73110a9e616f5b826b9d343f3ac0e9d7bdf4fd8b648b40f0098b3897a3a1cd65a64570059b8bc5c6743883074c88623c1f5a88c58969e21c692aca236833d3470b3eb09815e1138e9d0650c390eee977422193b00918be8a97cc6199b451b05b5730d1d13358cf74610678f7ac7f7895cc2efc456e03873b +SIG = f1b797ded8a6942b12626848340fb719fcddafd98f33e2992d357bfdd35933c7ac561e5b2f939464338c5666854ca885c4d046eb2c54e48a1b5ed266ad34de05 + +SEED = 81da168f02d46bb87cda845da43f8a6cba2c016878d6f49c6f061a60f155a04a +PUB = aff86e98093ca4c71b1b804c5fe451cfdf868250dea30345fa4b89bb09b6a53b +MESSAGE = 6bc6726a34a64aae76ab08c92b179e54ff5d2e65eb2c6c659ae8703cc245cbc2cf45a12b22c468ae61fd9a6627ad0626c9b1e5af412cb483eaee1db11b29f0a510c13e38020e09ae0eee762537a3e9d1a0c7b033d097fdc1f4f82629a9de9ef38da1cf96a940357d5f2e0e7e8dbc29db728a1e6aad876e5e053113d06420272b87cf0c40dfe03a544de96c7aea13ba0029b57b48d99dcc6a650492d78c4cdd1b28e1a115a7e3e7a7cb21333d4ff80858dfb67782c16354b8716596560d7d8e389eb15a052a0bf5d16eb54fb3e4973ad4984e72a187f5347d5b262c32b1647e42b6a53837096cc78c2a05ce1c6e12493a03f1a667584cb97f4fcd57ee944c65b7eed25f7ae0f3f6cede173fdfacf5af1db143730d18096664914ba4cfc6966f392022781c66a9417ca2680b51f63e4fba424ecfdbc6a2f01787d0e7484f8a8ab390aeaa6d1f7ed325d82feaa1692a4984fae43da87329b045da8f0a4f56b695aa935de152ce0385153720979a2b7006d405fcb0fba09e23b85fd19b +SIG = 4aaca947e3f22cc8b8588ee030ace8f6b5f5711c2974f20cc18c3b655b07a5bc1366b59a1708032d12cae01ab794f8cbcc1a330874a75035db1d69422d2fc00c + +SEED = af2e60da0f29bb1614fc3f193cc353331986b73f3f9a0aec9421b9473d6a4b6a +PUB = c8bfe2835822199c6127b806fabeef0cb9ff59f3c81ff0cb89c556f55106af6a +MESSAGE = 7dbb77b88bda94f344416a06b096566c6e8b393931a8243a6cab75c361fde7dc536aec40cded83296a89e8c3bef7d787cfc49401a7b9183f138d5000619ff073c05e2f841d6008358f10a2da7dcfac3d4d70c20d2ec34c7b6d5cd1a734d6bbb11c5fd8d2bce32ac810ef82b4188aa8ea3cfc3032233dc0e2600e9db6e18bc22b10044a31c15baceaf5554de89d2a3466807f244414d080ff2963956c6e83c8e144ed0066088b476ddcb564403447d9159f9089aba2b4d5575c4d8ae66fc8690e7349ed40832e6369c024563ec493bfcc0fc9ac787ac841397fe133167283d80c42f006a99d39e82979da3fa9334bd9ede0d14b41b7466bcebbe8171bc804a645d3723274a1b92bf82fd993358744de92441903d436fd47f23d40052a3829367f202f0553b5e49b76c5e03fa6ce7c3cf5eeb21de967bec4dd355925384ebf96697e823762bac4d43a767c241a4cef724a970d00ff3a8ab3b83eed840075c74e90f306e330013260962161e9d0910de183622ce9a6b8d5144280550fc7 +SIG = 50f9f941a8da9f6240f76d2fa3b06dd6b2292ed32d1c05218097d34d8a19dfe553f76ae3c6b4a2ed20852128461540decf418f52d38e64037eec7771bd1afe00 + +SEED = 605f90b53d8e4a3b48b97d745439f2a0807d83b8502e8e2979f03e8d376ac9fe +PUB = aa3fae4cfa6f6bfd14ba0afa36dcb1a2656f36541ad6b3e67f1794b06360a62f +MESSAGE = 3bcdcac292ac9519024aaecee2b3e999ff5d3445e9f1eb60940f06b91275b6c5db2722ed4d82fe89605226530f3e6b0737b308cde8956184944f388a80042f6cba274c0f7d1192a0a96b0da6e2d6a61b76518fbee555773a414590a928b4cd545fccf58172f35857120eb96e75c5c8ac9ae3add367d51d34ac403446360ec10f553ea9f14fb2b8b78cba18c3e506b2f04097063a43b2d36431cce02caf11c5a4db8c821752e52985d5af1bfbf4c61572e3fadae3ad424acd81662ea5837a1143b9669391d7b9cfe230cffb3a7bb03f6591c25a4f01c0d2d4aca3e74db1997d3739c851f0327db919ff6e77f6c8a20fdd3e1594e92d01901ab9aef194fc893e70d78c8ae0f480001a515d4f9923ae6278e8927237d05db23e984c92a683882f57b1f1882a74a193ab6912ff241b9ffa662a0d47f29205f084dbde845baaeb5dd36ae6439a437642fa763b57e8dbe84e55813f0151e97e5b9de768b234b8db15c496d4bfcfa1388788972bb50ce030bc6e0ccf4fa7d00d343782f6ba8de0 +SIG = dd0212e63288cbe14a4569b4d891da3c7f92727c5e7f9a801cf9d6827085e7095b669d7d45f882ca5f0745dccd24d87a57181320191e5b7a47c3f7f2dccbd707 + +SEED = 9e2c3d189838f4dd52ef0832886874c5ca493983ddadc07cbc570af2ee9d6209 +PUB = f68d3b81e73557ee1f08bd2d3f46a4718256a0f3cd8d2e03eb8fe882aab65c69 +MESSAGE = 19485f5238ba82eadf5eff14ca75cd42e5d56fea69d5718cfb5b1d40d760899b450e66884558f3f25b7c3de9afc4738d7ac09da5dd4689bbfac07836f5e0be432b1ddcf1b1a075bc9815d0debc865d90bd5a0c5f5604d9b46ace816c57694ecc3d40d8f84df0ede2bc4d577775a027f725de0816f563fa88f88e077720ebb6ac02574604819824db7474d4d0b22cd1bc05768e0fb867ca1c1a7b90b34ab7a41afc66957266ac0c915934aaf31c0cf6927a4f03f23285e6f24afd5813849bb08c203ac2d0336dcbf80d77f6cf7120edfbcdf181db107ec8e00f32449c1d3f5c049a92694b4ea2c6ebe5e2b0f64b5ae50ad3374d246b3270057e724a27cf263b633ab65ecb7f5c266b8007618b10ac9ac83db0febc04fd863d9661ab6e58494766f71b9a867c5a7a4555f667c1af2e54588f162a41ce756407cc4161d607b6e0682980934caa1bef036f7330d9eef01ecc553583fee5994e533a46ca916f60f8b961ae01d20f7abf0df6141b604de733c636b42018cd5f1d1ef4f84cee40fc +SIG = 38a31b6b465084738262a26c065fe5d9e2886bf9dd35cde05df9bad0cc7db401c750aa19e66090bce25a3c721201e60502c8c10454346648af065eab0ee7d80f + +SEED = 31010d1d67eb616348e84792b92d5dc128553cb52f6368159fe7b816cd0e7c37 +PUB = 266543d96787ca901fcff06e6e434491ae0970880a5a187d535edb19db5cabeb +MESSAGE = 39f89a5e7aa530b5463d498f8035b9909d55da527cdbd4de6d228379f089e608a9207a2c5b9c42051a60c8ca3fb97a1c06cd747d9d0739970ceb88ce526f971140ea2ec21f090ba075bf8975faa508b1cc10efa494dc172e6d3d3f3f75dc8e0e96f05c0cccb2f96e911cfa7a2c82c9845018bb1f9d75f82e3dfe1139347b2ac058b014ac93760c90f5567ab5c4eba04b49fb09ddadd305be511dfe05c96ebc86fd67b5d0ab57d85f4fe5e2f0fa9d88a68f0f6b6bc8bb944eb3c0b17557e55d5ea187d922a42813e69057c9b6a7f75e49921b7079e58f8a63719ee3e1ad10cf0e8a70c4f1540218b70494bd029ee02ff9727a7d85d377919ec4051479b70f7cd6767723fe42c1c7899c2b7c1f702dd6b4d13b672d488f34a0e969db79cc2cb2524a948a8de4c5b623ecd90d6e82d97033c125637d1cd8c84803d8fbc012846ffe484f6c02149258f9462fa1e99c307dd0062fe0b6f11eee40c2629ef7c0f6a5107259ea5b9ffb6f29f12c32f7b5228cabc986ab66450af9dcc3da09d0e0b9a4 +SIG = 7b1eb677c3e5e6a8b4ba69fcb7f6b1870e42a8d58958a35c674e2db82107481c4c7b37f0f689d39d9f51e181b17b1108c15a3e27b29df3a4315dcc4faf122205 + +SEED = 8ff2398cd51f51d4c2c57869a2218b8486822031f400729f4ac4d5909c48bafe +PUB = a5a88704b68677be3d16c3dc0052cfee6e2b30e08609059d4cba52c6d96061fb +MESSAGE = 993953e47a341188bc592942e1557af29546e4e9368e2f1a5ee9806e2baf66b6190191fc5d2b7e47de37ff054fb2bbb1f031684ada5d607adda3d65433122fa904e0456faa84109bbc517f8ad39660876382adcfed0f7620cf1164622eacd91eb37a8596462ebe9ebe26bdc1e32cc34ad46fb1cea420e73c31215408e6d35425f44a829b132f631a3f6dd4b873a000667e19eb22fffd5903aaa7d4c8fdf21953c3c6178f5f8cb2aa6bff92894ead835888df060a3c9043026e0e2cef275497e7d105df3b644a98f26bf00105c99413ee0af8851954d65ceb8d79ad3071b8bb87f0b19743d2556ffd9819830b6eebf7ecc7e045661f43570ce9fdbbe2d252406fa90d04236f222c429ec16b1287224ada1a532161ae8b481bcab8d47afb3ed0445b3060fd6759179856f4085c1e585fd7c1409799af693cf427bd1d3dc10b5ae3447a8d2a18dc3a12a6860b22175dd5eb53a0950432e2d7aefece8af0ade3d8567743de43690f2d253723c5d7e48bd30d2937593701cecde9154b7665cb611d7d +SIG = 417a647829c92898e520ff5311daa0a139cd8fffcb25a18e6d9b50cb52cbc35424c39ebbb5d5ac6a6d63f1f53c4df212f7025a8aaef8e36493c874c3ce341a0e + +SEED = ef816c8f5ec34ef41f68831d90cd29e52de8973782d003ee4edada2ada2691d6 +PUB = 47f9b363a88a45053a05bb72160852bfe8f7dfefc2f37283de346752caf092cc +MESSAGE = 9593c35cdec535bebb6965da68eab0b646bffcfbd04883bc4cef90d5d01f018c63c9b0ddfb3cef5e786284d5218caaaf060e9288952f16301ed8a4c1bcee256356a0c8bda359fbaa2782b10c86d18e20f7a0ec99b27a0b4dbefc0a262a3bf68fe81444dcae5f693eb0f16e6ee03f8fcbf3a3398146d20ec4d2657761fd0320fee7ea703c49a6a543bc9bba911e7925038710e8c36552d476d6027f58b2c52ba51ad65ea4f039c78f96b889102bb4bdd69b68e9c3d45b5176a2d82b0b95dc321016370dae30c3936515db0464c41774301c74e42d89b8bf4b9c19ed554b12febac0f60ddb3219ccc5603531dbf2eb5f293425d72ccefa0c7f144aba89347b296be87ff18994b4a0c70c930f059303b5dd4c8fe1e6bbc3cd68c6c0d84246dc6e6140a2abd1780b13f1594a6019d1778b7cbb3a3e3a34bfae7297f0b3edc376941c32352a4be314b84a9d8d6d7f1f38a0ad3798020aa2a331a402be9c704484744a730cbdedcb904b6fde708fbd14bfdc29efd461d1d0b5825de0bc79422b69a2722f +SIG = 65c5d10ea7bfdbb38d55364a9968f82b548224dff3363b2ddcf585163dea27dc63b0563eb1a8dfbee951d3c9b33fcd6bbf0921c3abb21786b229069bd9ca000a + +SEED = 45eb0c4dfafa2a7690ef579c095456ceedcd32f0b6144d0c380f87fb744a0b1f +PUB = fc85632c98384b5f9682aed9cd664cf1f48e588be2d568e5c734494df4c712b8 +MESSAGE = 6f66d847405a03d7bd6f8d2897dbdf04e76d7df2d9470a4996b7dd6db88500f8f4f83e960e219a2486e24545add13614550414d827c41a9b08318daf01b15214c64a4266cbf8a5717ada3e62c26729073e16ddbd66f2d520e1e09935de05e4db11c396d477010aec66aafb762e69238d0b9e76b452454bf9e451e76ac79e6990d41b932bc32917093783c91bc9cf0bbe3b514070a1e692ff34fd06b66ea11f39e10af933ee96d8e9b677cb03737e7964eeaa725f121207f9c1b26a96c616df7cb7caef47bda901368ff2ea586e422e65bf21a691bdd2c13e67fff58cfbfed81782049dafa0f727df88623f2f7e8f262daf939542a187b8720a9b6b2b09890e54876b28a43874abbe3bfa981f8138b772c5d51736885f86acac2215a0b010dfc2c6b150845d4f8296252586a3e115f303c3d8a582e20fd2d43f6c446e5d00280ec179823b7fb4c1b0feb94eb4ef1707f5184e3b52461a7562d1f307cb751cdbbf6eae49ffae91862358e74e9548822b8a049fec6bf4c7a99cabbe09206577b657e31f +SIG = 55851de8e1092f78944f6c6dd95bf07e2dbc8df7f57ad576829b978e3af58a7a8e94ed4dccbc0182467edf0bad4bae7ca84aa9a0c17c61a9e0ddff1d7525d704 + +SEED = 709d2e199006f5369a7a0bdd34e74dc784be33880ea3c5dd10ed5c94451e7972 +PUB = 06f989202ba2cbc9c150be611262aca00c45f012f89fbaf89f8ceccba0b1934a +MESSAGE = 62f003140fa09e0387d187a0ff96c4563df9f4e28c2282c0183ac3eede1312354921f780fca5361d3068d29949630b7530cd5914ace0468d014b6f53d839b82e38817dbf2d8392c3ce3424eab86a24d804c7acb1ce7acfe0a1cda4393924283105da4a7741196e027550047f85b7a0a01d454124efc0e299f0ef9ad14350543053482261528baa56e65999ac802c00a336267c635106b26403c19f391d53bd82861d6d48a4380b3043aa91d649536881204eccb0de20d43e5a3755b7f600916eccae42a0c9053b462d9417a13d67d778264a896e8eaf90baf66d29e5438a716781123a89fa9b8beef91d965af2f4a1a5bd5d2e2aaf46d5c94b7709cdd38d05feee4bfb76a359077c16bc4be9116e69001271cda565bc19bf47d4f986bd9c0d184cd8a3520ca1bdb4b505aaf7cb4ec9f94789779d30714e79116dd5019d59b28b17dad96f4e2155ad9c61274addc6b638109504e9ed19f4eda5377762648c4098224e3391043e4c2ad591654c9e7f974efdf0b0504b6fa5f646cecf44cd372412372505 +SIG = 629bf97b0c78ee6a9c8759fbea28224e27abbb6cbe4dea5bb797e6e0fe80c913f953e3a9b623352d13acf4ce6250fb029a1e198d72bd5e7402e60e9e48ca3501 + +SEED = 5151617421aadc9c95a442b45e7ff6de06a2c733b85bd789fbad414ee3c91add +PUB = 14941d559761b30ab0a86d47e0f7d1896b33784527c80af41cb84810cbff9dbf +MESSAGE = 216e9d40bcdc3b2650188d121c9f8ef29e914facd022fe01b90ed11225f2eb93538e5fcee5ab8045e9199aa76a16bdd0616805660e247fecd7e22821b69b1f8e8a58ac3fb85691d75d5957a1daf53ff9ee6476d7c4bc541e6ad38e3a34ea90fc52a48b9399f92d17c9bb0d7fc3104c55d0efb4ea5b831ff9490b3f79f4d9d699594b741566f2b50a8fc78cc403fa40f5abb6638a32f449a8b3ef029c402f46931ad2bd3e8e683108714c989ae21689e9c444b9f55b81119bb5035bcf73e97ce43a2218c7bc3e430d1e814f34dee057265d3194b9f43875d8381f525f78576e64ce692584faa30fb743a12d1b77614d2e10a6b856b52be27cdb630ba1f0d3a6f8ea9844542e584ea0a2777527d0c52aca949aacda45ad83d16d5c83d663adb79cad6f3e39e990fe282a14c353aa2379d7f06adab74cea021b8983a57f1d0cf703292eb05ece89c53f3a1265610e0c1ea8ddd444d1ffd6bc3d03f0a6e4d0df5c5b8dc1f95d9f5558b118afe6bea0f6c2931363f03ab34e757d49364174f658efbbf38dc177 +SIG = fae4773b334460c77bf01ec6366c4fe61c0cab57d8a4b03909c619e11ee3461c13fa21576f63870e423dd04181e4a7013a7524f246fe33853c674162a7815104 + +SEED = 38bed445556de74482bf5fec0506f9af330b151e50d4774dfe8591d7b7e0276b +PUB = 4c0f9c49a42f4047bfe6885551c5e4b856cf771a67af3f89dbf602f9db9220f3 +MESSAGE = 0ff0031df0beeff3710c6b763f9b8ec81719bfa1528ce46519adf3d3412d93fb188fd497d5d17091c0f0345960dd0eb0c09fc4005173665d4d97f95c13828bc76b3492b87a4b64253c8b5fa47aa75fa3b86d5abeea8de5959a602289136f60a69b309e773b2255cde19ed2a2e199c33db11c16ade08a319750b851d92c692924fc9859be523431cbe78ec092db1129210ebbeaa7c2a2c000eeb105ca0301a48f3e45fdfb15b275cbab83ca5c99d737a585320e9e3b317179bd86467fa9694fcdb2ac6ad36ed7144843dbc34e423d35afd7d8972a1c43c199a191abd6ceba4936d395c995a3eb13cb057f88a9dc9490fe98845ee5d26a89fb642a2a516dc3056c54d3637213363a8628a42a395d942b954a89e8ef7a744d8ae5adac88c616efaa90e2077205a60baffede5c87bb14dead306229495f698f3e490616966b1636387d0d86183f945b24a9dcfccf4d36722cd12ebb6bd8e78325752afa2b1abd13c4bdbcadd170869136826242acfb721de5ff27ba8aa0c018b225ed3404803ce9fa2d508d8944 +SIG = f702d0d463282fc7fd5f8f9029b89c626cafd83450c3bb9dd8f6589f0c4b4b71f649ea212e5e33487c59c168ea3ad83150f1fcdfe8c53eba65adc2023c25830f + +SEED = 055460b32dd04d7f4b2311a89807e073fd556565a4771857d882794130a2fe5d +PUB = 260f8fed4bba30b9e12ad8523fbb6f57f0a7a882550061f1da46fbd8ea442221 +MESSAGE = 7407f96ee3e79c69d36ce1f64e4f188655ea68b947e7e2be97b05ebc6d4439e950276ef3f0e6a03dd48b24f66929b49c1580eb468807e1e7a25eb9b94da340c53f984f8b81603efb61047bf3f14b686d9798003d2f68589a79ebfad54409c71c90ff67c11fbd76cc72c2d145f458e42f88b75d250eadcafe66bf37ffc837b62ff006685b7f85a9d875fc078c82e61fe35d1922527a551dab62f9e477499146bad912203e664c417c3679c02d872abac0032f8cc77f77bfe54d3326fdee9276a48ea4eb251350406882d08c830e7649fe6854558a7513ab2d8d2ac3e5ced8a808d2aee454779edabd1aa63bb19f718f470bdc8451cd9b294941e3497063b1e39b6ca184562fe838cbfeee922de24ddfcf9882c5e615b11bf904817fbd647139db80b4e8feb37f11e1852d7e876db9cb63c94d7ee34192f7200b5bc77a0311ae43b806ebd4c2896c53f58f7ebc1625cb20d7107ef9db0da28788523de991ef6c5866b18d8de83a954d3281e06dbf27c4f2382e08cd0e0f6ebae3f961b77fce5a95a9b0621b756f +SIG = 23f4f1627fbabd7891d7d8489631c7231d22de71864e262ab4da84ea8a13a60feac4dcfb1812f1200444b775f121d7266d755ce9b6a9ad796559c0a26b516d02 + +SEED = e9f6d31b936942c526e0f9ec4f5a7ac25fa789e0c434bcd9199d720c743c84c4 +PUB = 32126d26e28231c5b585b13f43a01c6fe542946b07d3a91e57d281523f5cb45c +MESSAGE = e88133f3d17642d5c22779a85316ba0df34c792b4efee49ed7dd93ca3322ef47c72e5b2e4595c77800434b60719adf54e4c1a34c89fa1e27ee8d35a0921f9755ac4a77a6c1684ea0f5c8ee5f759ce59bfe8315800a67aa6c64ddfaac92eabe6c2c613779784b3affafcc620f2a6dc5cb8d8dc7d74aa4d79494678494e5e6394c433c14809ff40c9a592d0d694a81103b44531e1f48bc13965d15af8bf3340488f8cd58f09ae1a6616bf85ac9de7e0c6696aa2f1bec15e17a44da4a84edb4ec6d77247788ba0de3ae12a155cbedc0da2f568eef0b75a877ea5b0c2c0d4bf2c61d468a46faadfaece35fc263a9be9987f4f7f78f05c707784378c7b8f7daf9ac3a122aad39a1677966da9ef286c9e062c4f439ad0bddea26e54b2f7388e238b2a64928450d34564c5a447e7afbbedd1085f1f24c11ae084322d1a32cf8aa473941f00d56b1618213cab3900aa606463d9f800e926f9f42d4b082d8c5ec3a4a025b45f9aadc8bcbd17091b3da49e9453dc55e89b5b5fe6b31f5eddad10b6601572568d8e205d3251a +SIG = 7e3b1c4c716c808e90b974458915f3b2239c42077119fe270788fae520578bd7da6488044132e1bef23e3b23c34d9c1862744f28fcaecda6cac0fd72b93b6a0f + +SEED = 6bf4caaabb96854a38a572f4ce6c7838f7e750118c73f2723582618e2307f838 +PUB = 08126373d056f00e54b8d43d77c35f5f919833e90d8aafd6c8246d27917ad091 +MESSAGE = 4776e9d60085481fa537bf295bdabd8b1cf632a8cd40bce6bd325c129f977000e88468ebf2dc158ac0f207212db00fb60b8ec8bae229372e9a6b01530a7ed1bc9d389ec8913f59030d5b54af56ae1ccc28f37cc96a8e53204e92a677766adfaada99b0281f867f61ac9ff7d972ee3ed427d72faae75d4aec01b5ffc37061b6f0f7e5714c4cf30d5b731b0746065f19e4c8922dde642f80fe24a3c8dcb2e5f1c266e2af6c37decf55a2baa54f0d5cf0839370c3e0b4e77a4f36bbb3162014933a4a4ebcae8c60961ac6dcf134f30828d31402ae74e7e8513c9d2ad8ee46b7a9d53a1f87ebfce04f461bded1749b6fc4c4f25793525692d7a0e426c84e06082cc3e6abb51368370cbb106c7a0897f66d92c9739cff9f2706d6a2980ecea3ac4945f0f47e656bd9637777e853d2a839104327dc049ebc34f049d6c2f80eca99db7b418424acef752260d2d427949323997cd9617edf50d441d0088b1d47912e35cf542315265829f383f45860d3b45e735bb2f8586dcf58db4f2acfb4a68853a96eed7b89769d365613 +SIG = d2113f80d6cf928486a250a679d6e74b35ea9d26061fa94d769e1a8fbfa0a734227f55537e4ebff59336db141cf5d6d482a0711f1e9fc72ff70956a11b4fb909 + +SEED = 5d9585736ab209b0abe8bf74aca4eea4f6d1650b532550a223e044580f8e20de +PUB = e77729edfd2144b2b12078765417fa21f1594f09b269e9b6706802b4f3bdfe85 +MESSAGE = 08693591e6c58a5ead9c85fe8ec58508f81a3467636c2d34fcc1f466e5c6dafdc37c35cbee35589c6997e2b15448132744e5a1e131bb49bf5c2563f87ead3efe01e88cbf24cc1769c78cdfc167e378215b15859c7a28ece70e188fa330267d3fc57b4ace6c1520ec67875067fd33be86f4a1967afb3eb164c797cf28d8072aa69d82afa38374f8e5797c4c28471b7d69f5b9c7b4acdbc19f3c5c5d400808a982a47837aed1b3841d69890eeb31494e10e3e513d12d0ca686c7ce651778092703fef0dcc0214077dfb361251bdea4364dd41b97bceb0fb1475a50e4708f47f7878c74401e9771cc3fceace89169981aa77250850090d181d8358ebba65e290acb0352bece8c579832a601551816d1c05621ccbbee0fbe39ea2f195393199e69c234c2fb1c37e474840860ce609161fcfce2869574be0d38f95e20f4f8725247b9627b46e834905101ac12b934cbf87cb2d190d2f51490a82c4e810eddb81f956a9f36bda497bca506a49ee9cd47fda5b7f2b884a3648cadd12ab61898ada46ecc970f81dc9f876845db +SIG = e7b08e1d5809fdd8529443d65ada5dd655ea55b5415a011393be7071676486d358e8d2a460ebe075b0e701b24c9e3ab5f2b033592d4de3b7f37fd541f6920909 + +SEED = 60b142f165114143ca30a604fef51c686436aa1b9afdb266b3e398ccb3c4d855 +PUB = eaf6c5a76ca99bf7306498888c3b7a1feae98bf8988d7f2e1547f8f53a4528aa +MESSAGE = 1815dee1173b78264720d35b7cc2454a000a65fff214e2473e20bc83f3ecde9c04c1e0696ce6e55519dd2a75ce0464bf601adc381e793ecb9f8ce7ab87b6ca2a3e410f639069451978d14873d3390fab8623969713c3dfcd58d86d124073761ee09a652a48767f9646cb726ac454ac9a1bc5faed3026b703982bc2b1e0758210e1d62519230eb2b2f4a486bc55168560c4363df5ff5adfda11ac7ef51b18196c94337c07aef117990f770c0f1e8c0f88eb6ffc40e8ed7c3a80a632db1e7f63b63096e2ac49e57792b31143e2f4faabceae66b27471681c36fc1139007f9b548cdc6e3b8fbbdaba7a8adb843431238bb461ba24f6e09f62c72d6377b4048cb0134c25a5411a20bfcfc13e48d80e36bfb0da7e0185d33f1928636e15dee0e5df8992a16572b13ea8f7cf85cae32d529f66e8f6d2fb2ad0bbfe7199169b2567ba00c781b20a48e1d70df9fa3119cd7e5bbe58884b0b51218940fa815f85625fa203471cee8084780eb0b9356f9f3d4f6df740301d707ef1ffb3519e3f90b8064b98e70f375d071426881718 +SIG = a621f084ea1a36ef812a9755c9afbb53dadaae6b3a53fa8344ca40d3612a268a35fed0fd398ab75bcd639c547937c94155ab1a7a3467dd4bfddfacab1655e908 + +SEED = 734ba47033c6140232dd4a7a14f1a7743eefe9070bad9662491630cc9d28c1f3 +PUB = 2fa5df3026d60742e2aff6b57842c7126846c8a7bbe9266efa7b3f2398c357ea +MESSAGE = 5d3c659810c3fea52a6df3861e5cdc5b703cc1cef48558c61d8c51d0edea5a1479cfe5063d82ded9ca681e5748887c40ecfb9e1a9a8b7f8509d10776461c3923399693a78189089178d5aabd15f8c846642be47d6d4caf13824edcefb809868fa72ddf035c4de8ef0a9c832264f66f012761ce6955bc3c416e93e29188025ebbb13a553258c1d7c499c9a4aeb10bb36f61d1bb4cec5ae55d175722b9a9696df881951e35200b9653cf6ed4b3d15de087a9d1c319fce8582156bebf3fc91e0e610ff7a15308fd1d2c6069fbbb2947d3110731d245ae2963014bd76dea42db125cecc493c8e9091a76646577729aed4966fce9699fe12e367d665df9e95a9193e1133e143af92f82b66ac7764e5033178690521809a7107d8ae9b88e0ed1f35b1719901b930ad0e1cbce7fb30267b1155204f605f525e49de2988ea7f74be8815177fd976a1bcc126d9c9c135c5b4276d38019c34aefb7a0220f7f5aeff380aed627b070c2c9e21533bb35c08e394c85ae25e6862942599c65dbae5977a584a88180e0c8c71e5a8409e04ef7 +SIG = 9bd074d1d0bd28001baf7d2d4e82435df08c4264d8cbb1c381183c2f01223f79f94923ca178cac75564e16c7f56079088f7ed885de4d509fbc78f438fba3f607 + +SEED = 45e34d0ef4c196fa6d572b6b1774b5218f7c3291304c13500df7070d90e8039e +PUB = 13a7304dff423359177abafa5e6508d26769ca99cf8af45c383f3ff634406003 +MESSAGE = 3d9ed5c64b75e135df2f5e85300d90f21b363935e2817556fc9311751ba7535477dec8356ec385efb82b414062f35bb6d3edeafde305f9900a25e9813c9ee0237d46409650cdcdb5dfa2301a8e2647f8d3819d86f7b7e3070d33440f82c4054b1ab5edebeb27f95b3c4c6fdd468f21600f03b3494da200bab9293c38d02fc44048e52ff5fd0f7217a04d4ce912a180d1628f368280b6892672e8ff98d4629ac28b60c02a301e6c6026c1b9e9ef21cf0392df225008d5a0e0284b282631ad1710f811615697066c98296519948a7cfed5aeeb454ee7a61cc271bd3d499be17df09d3a0e790ee6b9bd99e1b919bed4a063b8d1a34f1afd2e952b9dfefd770969c8b2fc37977abb0fee6317253a23ecc97578168973334c8f91763ab97f29c49baeee7b35f3ae7f5cd3a4a6e697ef255a3c2ec0c752a3396f69f663ca1fc2b332dfe6c0faf78afe9c68d99571e8e896c5093085e9863a27648a9e58f3a9a84cbbfe2b41ca3633dd5cf6e82cb77cecacad8d78b353f48db42d99c36bcad170ea9e98abb2788c33a3c706268f3631 +SIG = b42c1f925f4baccd129efb109db354aca31c6898f4f451294749a26a6da1677bd3a5c04119e35f47319f20cfdfc08bb4528b21009e00bd41ebc0f46863bed10b + +SEED = 888ce2ecceda9ca2b948ac1443c2aedd7595aacf36edaf27255bde7a6991dcc0 +PUB = 016e572b4f98417c6ee297abd784ea48226ff4fbf0050a5ade8806e7046d3ba3 +MESSAGE = 5c801a8e664e7660760a25a5e1431a62159fc3f3aa713780ae7cbce23b8564782799bf2be4817ee2921965bab7e1d44833824c1628d42dcee3e46ae42b2816d0a432a1ab0bd21fcf30adb63d8dd76569544343d0035c760522ca68bea72c404edda1e9095ec90f3325681c6de0f4c12d1afbcba2c7871a1b1e1f19c35b0bed9ec2a87c043d36d819396bd5d099e1aa090391297c733f65a8c5d2120c67635316fab25b4d4847a45fc3f76f2e2426dbee4629975062fce14e2189dba27fb1ded2453f001debfaa899c11660612d2ce2ad2f762ea5dee7e71e58adcdcefa79e8e8b27fc4ccf89aabf176b5d34f82dd15d889f9f087dc9ae8a42a72f3b83583616e170637cd1adf38aa6551cbacca3602bdc7ae210c4a446b3af8db2720e549bbedb8bed215ae00f19da29d8fb0b642d27b2d88575f0ee84f3d129eb774d20f537a1c0fdcf717bdebcfe47f8331a341864346fa6a1c6bbfd178819e387a0d5499a68e81cc9f82ad39e31e4dfe71952d5ea5cc8052a3ceed1751f59dc7ecc9742fad144e18dda8d0582e74e39ca8c4 +SIG = 99d83f148a236ebbef1cad88cb3c7694f4986c9250e21c3603a0d941bff199cf77d6ce99efdb20533188d68ad133de033a1fb3468abb706d2b8b4fbac08dfe03 + +SEED = 617390857dc10cdf82b5c94261f58ce2d44aa2f57d298f08a2d6c74d28147daf +PUB = 89e0c3e0a0f130d1916e0e3849b7286fa2e3ac4c17bd1f716ee5a72f0257fb8d +MESSAGE = 1fd9e7453eaffd7c9b54055622dde170dd58b71cb945de75351d5fceb1f536bde25158f03786155f953dc207a1708f90d95b15aca0aee3097fdcaae85e4ab1c2cdb705c53e6c2ed21a994b304a75caf2ce4fc7d61f561e74e297397e2cde5cc69056940343aa81375d0af18d17d2f34c0a71dcf1de3c4fc488a14c5fa6b3337a3174b1da7958fb00bd5955148221427c60dba04117c80d2488656dbd5343de891287b50ef4df9825eda76b4977f3acd4ab6d3102fa56878306cd76561491bcfdaa1da567e677f7f03bae5dbf4426c3c4a6c3d082f9178b2efdd2bd49eee97ef4dcf3f0f51bbdeffe5ae6601e28019518f827f02e51f6679b8715978bec3e69d577156dd719959371baf034219fbbd17a2369a8541490f6a02013e33e74f4769be37aefa4defb6bfb3f351c2a261482c2fbec49f85f8445456e8f5a474030cd72d095ef6a622030e1e43a0c5debb034731d2f5e8e4ba3990f077d0c162649d1fa3ea4fe1e81d74aa849e21b059d966cbad4c493ca10bafe7a69243e3c0a6ebfd13d697906303392ba65d4fe06b6a5 +SIG = 63e90a6afbbbb0ee696bfb56efd679d68a9851a8947640a97f41f68edfeadd216ed8698e2e43c820c9044caa7adaab5b76762b681831a9f760476a8443c43c06 + +SEED = 877d017436369ec2453fed46e977d6acc3a7be60d31395ad6e7ea9e07480e4c9 +PUB = 4e65422fed334a55e8b673893eba7c181dd724dda002817b0bae28acdc3f7fc0 +MESSAGE = 4ed3f5bdbd41d0e3b0a8a7fc3752eea496d6141678cbfe06757f61e1a168d761b6da83052f7994950d24626f004fbe9b8c9562e0c955fb3b5c08fd2d3d258393a349030c8e156205b40483038be1959f1cba490a87fe13899e4f3752063b68fe3e1c5071f7db0002f01494b4a3ee2e07992bdd200db4316629ee8a95ca347f0b28d6402a6da8b53e6b32581c3691e11ae9b6e0f0494894e649a92d03eb49c4d6833fa1f54f8dcd91d06936a6e62d491e2cea46dd07d9f02d3254b850bc9749f258a61ad3b9cc24b03287331b85a24143aaf8fcccac5f18bfc72dec75c0233516aa6e4589c78c665a186ed902091df97b0d04e83a2d74d789891aea2cacf813fffb5efaf78dbcd7af54ef55c77b1c4c8ace9e9278adc23d76c779d64b3bbbd1fb33b09836ea64a71e4711e89e8da0f709213342176ae22c6e7852c3973b60d9f98889b442aa48d7bfdfdef64c36c586c4fb2ad2e27ebe479f6d722f069fd6106b0d08975d5f721547c3b9c52f9fc5f45bb45b5b632188e80626518a79056bdc4ee1d2be6c6542a21fadea92c6dfb776 +SIG = 7688f3f2401eacaf2dd88e170ff1c4d7e94822a77f6b550b569e82152bbbb434057e01230b05ce58ee1dee5226b5c7cdbe5a8ade3b9465f59aed74145d14330c + +SEED = 4f0b3607d70b0f2698327ef4f1982c5b4b94be78f50c76f43bd642f1f0ede39b +PUB = 942b43089fd031cec0f99e5e550d65307fb6c3e793449fb390ff730fffd7c74b +MESSAGE = 9f700a1d2560f69d9bc105bc83bff539e4258c0248602013a959b978a19cc273280d90c0178089578b50518e06ad1eab790ffe710c63d78887a95569144f3e58a8837f93dd516fcddd22bc97a7f14411d424b2e8e9aa7c280119ad94ce92533fc7fea6c66248644ac3e1beef2553a6f61e91b9379b0fe0c68b40681455b311f40df0c97f53fc954242c375e7708d61bad9f51296247274fa01a7328fa5009d9995f501ae8683552b11a49d2638116723b1319450a90138d278cd9512b80ca5792ed16c683bef92ec87884c9f07f137dc47a13146e511065c2e1b4b80efde88ae12e29431beb7aee365c16d80506b99afa6a1406edb061766875832dba473e519dd7018f402eb1bb3014b7cee4f02e980b1b17127e7d25dfe0c168c5344f1c90044f827707dca03070e4c43cc460047ff62870f075f34591816e4d07ee302e7b2c2ca9255a35e8adec03530e86a13b1bdfa1498813098f9ba59f8187abcafe21ba09d7c4aaa1ad10a2f28334ab53996147c2459c01b6a10839e0301123d91a35ced7af89afbac7d9cf8ac9a38ceebef83 +SIG = f396a11f2f03c61439684f79001bd4f346a348dcf1d3beb2d3bfe33ea73a5ad4eb97506acfbffb784e77548189cd599f8ccf17355dde80e75024ef2a78d5fa03 + +SEED = b8a0010c784d8d002a31da11d022d30188a4197a1d5f14ea4c0dab29a2e40668 +PUB = 8bdc63e50bede13c91a41e4b4b7857b9e553f484e3c1ec167dc04c281ea86622 +MESSAGE = 5c6ccb298be216808b811e56d972f456b69ad39594eee354701ca6b3e38d1f41a359e5512af98a3a0873265fe5191f4f2ecaf66bee75a3ac0b71a4ddf2a759ebdddbd88a6a1c6fd0fcf7d7cb92a84e3307b4a4f98c710abf4f553dee74f652d2ac64bc30f72bf4354ef7e806a19071a051bcfcfb27e37fddd41eceaec1758e94695c670ef4c5a5902178329db9585c65ef0fa3cd62449bb20b1f13aecfdd1c6cf78c51f568ce9fb85259aad05b38c6b485f6b86076928ddb4e2036f45e7b9c6a7ff24ae1776030e2576825019ab463ebf7103a33072033eacbb5b503f53266afb82f9b2454b8dc057d84f30d9d2cb7c3a31a7dbdfba5b8e49231c231396c47ca042c8e48a1a5e3ec9afe4020595390f9990dfb874e0825ae9ae5e752af63af6fd3e787e75e8d8dc4c66302277ac01b30a18a56cb82c8a7ebdc915b7153255a1fedc492e49660262bb249780d173e1fd20d18c4f6b0b69aa2eca024bf3c80d7d5962cc4a129a7943b27f33cc799a36045541275a2cdb92a40e485ba8b737a04b43d29c3e25f76cb3d93a6b94461f88f5696 +SIG = b3f6cf4c0e0f9074ff2c2c47e163202f1e9d6ee117cf757633e4abe74423aa70008ada1509ec1dc117c1c230e9b23786f3d0f29b73aa284536e9580106a8a70c + +SEED = efc86cbe40363abfbb2a4b1fcce5fd6084da96e7e814de71aadf9a618f303625 +PUB = 22f295cee727d28d2b9317153e7d9412da1065c1b16ae2a251dd1fb431c62b01 +MESSAGE = 9e4fa45dc026710f6bef4ed0f07c544b0bb0d88fa79e7177d8448bc209d71cfe9743c10af0c9937d72e1819e5b531d661c58c63141ce8662c8839e664db79e16c54d113abb02a75bdf11b3453d071825bc415741e99483546b8e1e6819de53017092e4ef871f1ca0d3508f937828a4667db11ffff9416eebb94bf9b84d654603094834a99ca70b90f562a86823624dfe9cb2f9e88c173f13464d4ce255f222db50dd63ab42465734e75295c064b64cc3f15e6237e37f33d615f7c243e4ba308960cfd4393402525500bb7902970b3931d48b35666a2d4d2ab08fa12af366a004346c9dd93d39fb1b7340f104e51fedbb533605b5ff39cf6d59513f12856dcfa198d793b0fc875cdea0741f1455746d8a19c3e9d928f0021b01c25131811e48c3c75c6f41422a8810c6c81f35b454eeae8cd17cf3f2e6f0bcd9f290984f496578623ab8e2738d2d10840eb91d101cb4a23722b72e3dd185440c3b9f44d46a393a34c187a20d610bb698c50531741efe96323512329800772a408065a7ef8e4e4105eb1f5bf6d3fd6b217fd836d89f53b96f45 +SIG = f8818310228ca76111524ce94bfcb0246ea63508cee9306592b2f77548edefcf76bd1454508ea715042cec169cea5115ab54235cb1097b10702aa38378028e0c + +SEED = 33556c60de2f2c9a9303b99add378592060505f8e49861085a4b15f072a7ef28 +PUB = 231ec8cd845859f69961275119dbe4f715e5ec5aa98bb8741675b3c2d0c89fee +MESSAGE = 96af540ea2b1923f5fd0aad321ac032070c2d65ba13d164e75c3469758fcf31bb31655cb3a721f9cb34be2c90c77eb65be37f606d32a917a4cb9a709ac0705229930ef6eb6fdb0fa3c0fd3a90ce171674ee3ed06354bafc3c7075467a57445b80385640447902be39262894b1f64fea58287dc322d19875972a7c8be91d31f021c70eb682fdf11a10f8f582a126e064794838c69fdf64f5b6e8ba59d48b4384f8e9fb5c087cc7738295cd32344ba3b697ee6b6a8b78ee7a9575c97972a4d1bb18486f9037a0f3c6f471a90f86498dbc0df5232c07e8c01b690bee75302992a7a36fb4437c25a8bf5e34cf7d5b55572c700a079848d381364f9946a91eb1603ff3de5ebdd523bd92564818e237a53e8f522deaa2c29b897e961586e100ed0fc0ad70d160934e694027e5c957920bc0546e901be39a84535597e1f280c222267abe97f41205d8171820dd2faafc0699419321a9160f69b99fd41180945b62d2dd105cc7bbe821d28605e098edfa8b2309aeb0534e756377f59937c67463fd87c8b92ab58119cf4ce6c665af572fbae1de4a2cc71 +SIG = e06a7a414457bbbef2bac3775ccad087dacb1fa4bf938894e8c929118e09e678dd19938bc88f43ed0f7d31cc6a0e602c4e4d1fee33d41e74a119fa2d1e4e340f + +SEED = 7a5c74314e1183334a4b6226b9a82d70fc2a124e3f87db6a2283ee05b68e34e0 +PUB = beae7d3dd97c67f6273bfaa066131fed8ace7f535fe6464e65791c7e5398576c +MESSAGE = 98bac6724755912992adc2a48b5442376f2d927997a040fb98efe544eb0c8e1866b9616e298d3360316ed976bd946a411fdd3a6b625c0c1a37af0f41cf6569a7884ab8467491a987df3ea7a0b7ebc4692569a34ce3a2ea3503495b2c02d49d7d7db579d13a82cf0cf7a9547a6eaebe68e7267d45a60b8d4772455228cca4036e282e1a1216f34cef7ea68f938270bdb04293c885d005f9f7e638a8b4ead2626c0945174ff2a3e2d6e15a4c0338c09e1260f0928ca9d3499824f3fedc4785da49c5c34a56855e241facc6347a399ddcac4399a8b158198c151461a3b189e58ec1f7efcf2ab2031fb17b6f035ba1f092e9eee2e92c2d6cc2032287f854b41e70fc61c8d11a2e4f0708f02eebd02e8c7e8c7b38a57bfa1a745f3a86c23909f6f89ab16ce7e1813c1d20147f31b4cf2ad0b606fb17e5ac1ab51ef4a7d8093cee9a655f471dc5b146bd1b93e540a3d3d3e2de8105911c10d6ab5ff79c2d06027f7a54561f2071414bd330a8785442251c810e232f83c367f0be7799a93f5238f7f17b5be829fd89123c04833af8b77e5a4363047ceca7 +SIG = c2ab1f6f5114a84f218502582c567b37a8bdbcdf6340fa4622873be89106f0a90b4829505f72129df0ab3d8513268774a34df3ad21ce254b464488addd6c9b04 + +SEED = da8006adc492ca5dc86c2959437a75deb6120ff787d2ecb9c20c30b52c26bc41 +PUB = ff113bf0aa58d546f2385d444ecb7888f8caba43a174a89fd6065f2b7dc17bf0 +MESSAGE = 3eb4324dbc0149d2e7d6df632bb0cbe9a9f6dfa83e227fc07bde1b577b3611fb921c9f8313f068e6295d4913a8196be530f6a01f57c09c028491444b784720e909ea1fb69c1c1dd6304400327b7731b33cc46deb046cdab6ad1b53f1749a0c65cb9a7e376ffa02230f536584aea243c639103adbba764321649d7e0126f82e0b4fd9dcb86c731cbcc517f2016841e916bcd5fde871dc098cd913dc546284d1b2165c63e88f32a2789a500856371b50d22fb8c87d1a3caedcdfd01ee5f870a53c284181d632ec66d48b6bdd5646ac39c9e75338a520212062bc3466ef5c58765570b905f63a93d07f8f1baac3526b016da799f3e9e03a4f7f81355e0f7a76f30a42b807322051b71c626a7a296d75b9d9d1a23bcb13c9ef48a912dc057325d3bcfb3f9fadaf0c249b102aeb854aa3631e34f69ad90c2ab2ed33bacc40b9ed1037fae67cdf799d5a9b43785961127d62f8e0bc1589fd1a06fca2aea7cfc012cbf7b5b207ddc4e677d8ae4aec100045ce36c00b74d1d28250791236dc5dcc1ed313c8c246172666f75217437c6034acd64198cd96df2a +SIG = 1f5375dcb3ad2baaff956d8554ecb424176be9a6eb9ea54e814e0a73df2a5d848ada26ba8e1805cd51c5e16950c1ff7d4d2764daa6f4c7502fb865cbe55aaf0b + +SEED = a284e26b97e538839c808d45bde6f012a354454aef81caa8c55914624f2b7d66 +PUB = 5ae46e34695efaf463a4208fc4e35b81f2c63593238a56f2444b850f058c3c5c +MESSAGE = 9ebfe910b50a5cb719d95b961e5905f00ec7943b55468ab5956692017645b366071f8fbb77eb49ec73ea7d64511405b90de22db98c3eae39c4039c7a133430e8010bdd39a00fd1a528b113dae149cfad3ae340da27dcc507782ecd8929237517afe7463eca2473c7acf6f7aa04efc9f266ae7b6d63bb8cc2a438b344827f0713d1f1736f0cbb65b99353f20355fa0230d4fa707328a8662654e83ad0530a10f9a69e17c099e1e2b5db18e5f6f1dceda5883e8cab79701a5e9089562ed153ad08c674f097c28e4d16633e092969a8f0bdac54527c0ee03bc200e5be612e3d1eabd87091101b4962afa07b310806992f373076d76a58185118137c9d26ee2cd4c618c18283dd19f0e7a089ee37305b6b9518a78d8098436ef62be7d699808acecf67939d61b3e02937cd8c5f1e746d4274334bc9c37fdcba234c166fd712893f3a040832ec5425e57d80f11ef9ca5fbcd6c147fbbf5e2fae746e0ddb605867e3bd050483c3cd1329abe57a60bf88898dc7e80ede0f4517de8fc807e888b621a00f663084ff94b99996628f3b11690a60f0918cb5c9a7ef +SIG = bf110e2e9cecbc31fa3e0c2438cd1f4321f92cd287005a48528addf76cad8d88bb22719ef91b139562a1511838682674faa9ff7e7ade6c9d573f845036d18905 + +SEED = cc97a96301ceed0f922731b685bad8ad4f06207be340f5a44fd187f29903ec20 +PUB = eb563a7bce12db97f1891d0f610bebd55101a3125ca8dbb50b25a6b5050d3784 +MESSAGE = b9ea3b3df7187ea415a3c335e0834e10f440915b2ad41c71f255d6950a4e9120e4d494fd9e672ce53206fdc417d865897b47ac1054e1ca1068195232d4297435e44e1224e66a912d9d7d182946ff5a9f085bb8ba19c54d16b586a9b30461b6773b93950311e1619886f5a5b3f111aaad094bae31c48f1941080968bd0277bb6fa92eebf324b192df5cc969516c78c7b2d12159b4d1c8eb03160c4cd1907f62ed4b854c569ecc481c08e636f44ed7c390e58b5937d2906b2817bc3769dad9da1b0f79391b55942063055da0d6f249a3e452baddaa032998d7f73398ccd0151bfc92c5e2fdfa9b14855e6b0d3746dce248e219672987252ec747df2747fd3fbd8b714c882d707ee302a904950c34754f85350e1aa3f8ea6293cf01f717cefb6b83a22126df5c4f5698aafd06a2244ad7d01f34017ca0ece6f21040048aba6ca4aeb04325b9402bcd43ab130a105788ac3d7b7da01ea9426dd0ea1933a8189933a6c0c6cd648ea316a7469a5fdc6e7c934d9186586097b55dd51ac487bb80ed11d4df8d33626bbce95e4f13bd49922f00c920223f4cbf93cb +SIG = ffbdd3244181cdf6034f4a450fdd95dee4971a933f8be022bb0a4106aef39af3055b721881c9b54d1e99b9409096fbe6dc2c9966e3679964bd7ef4c808cabf01 + +SEED = 679e3e34773abe4ae25cae7d07ccd0eb3b0ec0a35d570257d62570de58ea2516 +PUB = 18acffce253b27259579ed9924f479cae312167bcd876edba88b5d1d73c43dbe +MESSAGE = fb2b648ebb16688244f78b2ee9a273599d56b6198900d438a9e99c191425c72bec4f235847e18e47f57c3cb396655f778921f908580e8e83c96c108b20dd416678021bca259b98518fabb2d3532e4851d9d52add2542c0cb3efa3857a17e512438bc0ec4762e2f9baba429c03e99bec4038e6b0ca42bff5b233b24c333b4caead2de374a87b2ab5d80d6e49e4456329d51ae973bc83d7862f3d315e514481b12854a9dfc09e7d14f0d022c0ba3022578eba8f874deba4aa8c833f2b132861d4d51e50fe9aa4b787bd2f051aac50c375390cbbcfba2002b80ad00cdc12980f8ba8bcb7064afc04d5c4682c1029b10a6d45fe6ecd704245faf598c4659597c5d68a192cc1cd4fa45e84b549e8e5e67daa879ae5a520a6b5550519876a562ac49c6db0aa76ec69bb64dd6b5e1a3af2e131e722e7cdd05be34b5fcc6259aa124ccf814cf5b500d176be28ebc40bb21f03e24ccc131e0f41daa1ca02e6b00c9c53fad1248614e940d4b237760ab7569a767b7515dd2d623e57a2841b7d2441cf43049e4698d2f9c9eae7b2910f6ad65edf9cb2bdbd9b29f606e0d +SIG = 1a51022628ccbb88eae9b21773c3f830b7b6e5bc36c9903ce70fbcf459d6a1ed8a1dceff5b19269ebf5a6fd3d8958860f554461f0e9fc0e29af9b1fb1744a80b + +SEED = 9bfa60923a43ed0c24e2f12f5b86a0716329f93d4d8d3e06238002893278c19a +PUB = fb1c00687781b55b893d6b2f4f49cf5f73d2903c316d1eee75991d983a1868c0 +MESSAGE = a99028b0f4a3aa5e79abef6c0df4a783ef470f1a29ba51eba00f6214e840fe19e5b6dc6021ab599bb2ee3699576015d79a7939af823535b630e3938c723f6e0b9229d46bb3379acdba587c238567e3d89bc3bd3519b727fc694fff1118bf22c8bc8bc82c4df7f5ad38de05fe9f762999ecaa795f3ae630a9a316d26dce9f1568ffa3f22b0295214020b3d3f5337c149568192218132a90709279c01d23baefa669e1c4e42038173f1319c212da144f1c4ea4c52c005cbc0b5bc283e74483a0dca69279deb17ae5b29cfafa7d0063f4e1bc93537efd937e58a8aca737228f937ff2a741890e96c5725da11b45c413a9bbb4180a419987bbf046bfd346295d62f081c76daf2b0e1eb4f6712feebe6f0a92e358e7ddb85896507c340a01f68d1b0f085778b7c44b014aa6673e501796959a17a688db0959058488a7112572f23cf9cdb53b5eb4b45f5953ba0c0c690f86bd75e89a047bebaf847c1dfc345a4f3c7d3beec98b84b0219003e819f5c2adb45f8717903d1f5bd5d71914c56fcabc7a290f9c41699c95584d6a3a16340cb17baa1fc5e5467af7ac3221 +SIG = 55f202efb2a57be8b4e4fd894dcc11a4fc5f8276618ef5cd34a4495adb016a298e6480a35cfc53edb25ff1499fc532a33061cc01a250458aa5e4f7f16f51440d + +SEED = 6e3af45e66e22890c3f3c934f523a4d69427976e6e52625f8bad558993963219 +PUB = e097364e76ff9f2e1d167f6b20c1bc5830085e7ec993c138f8b1b2175637e741 +MESSAGE = 5cfc2f4b559f8205b39102087617f4d86c7ce6cb251e5f89601dfc88ed28e8d7a670ec0087d2ea5d893021c7044da2899a22d776fe90170e51c203250690d37a294555e74af9234cbf1ad8f22cee8974828a0d09e9554b71ee3bcf880ab98325f706272194eb2e80c701d441b5f8668561b88849f827af703ab0954105fd3c54b3f6ec5493596d0e3bc67818048310c4a3e0c556bc80675f201f9bb9c6538a41d99aa40c886fc431467218d819c23e78498aed0613fa6f973e2211df9fb87f44116f3fe4c26d6cb2fa334c87f78c08ca8c9b9041d83a1230677e0af788598a42e44cfdf6964a4ee80e38402ba67c73a581e552baa2282425cb2ca17ca92edfbf98299102fba761b9b71a5452141bb9c18dd95febc2a782de9ceec08bd2ee3f7f0c1bd8946dba99cf9ea086abafd37c9ca60213f0de17c61ff9c391c9818ed5cd8571778b7dcc13224962386fb8ca14f861e99f3b18edac8a5f130f7bfcd45d045d0ff34c81572a512363d6530f93813e5fb10e9cb8338a7f93800491006f4463e89f0ed4530e5f12df674f598904780ad0812b1e3521fcd0f83e +SIG = 26ba562e8a4065708207c25e239b780aee38794cf983a37acbb9d557a65ceed3c0da47d17f3e8b8f4eeb1b65a2c182ea6f29623b63bb0f1c72592683b126b901 + +SEED = 5f1f271844d9ed5a6a6f209a21408daea470f6fd53ba6479d7407105b7de4d65 +PUB = 6085d7fb5a9b2ed806c1fd30a2afde760961f7a36b48f4875246e615a2bd9928 +MESSAGE = eed6b4475dc263bd2207fe9d41d48282b713f680f2e037384f18b4bf224347f5e4c4b060b808d412eaabcf733dc39a40c6bda0505ce71fa823bd1b1794847678dc034e7999c16369340bc60c64d09bb9187b2e326055a053f8e505ea4196861471622db0e46f0f8954d8a1f07332da4d8ac55712626009912f8a15a9cd63a74a03c92f246cb63cc73f92e51dad1bc9715b1ed3fe5f2e1b2959b9b71e0e37360eb29536cf797147fab10864d6146c36b82335a0ce931408479c7ede484ff73e2dbfffc6c9227e16d7a23f4d90f15584514c39594e17bfbb295de9d62adadb589dbbe0b06dc8dac5b3bf517b24c1837b39472a6dd38931ffbbff5b763638805b4e22321f7afe92cdf502fb63d109ddcd9e4051ad6f45598532be179523710851d3931e887d02c345c79c489fc106a4ae162f7df71ab90b751da7038a6df7616cfc11887e21068fb9e33be566402be504f3fc2742b881509bd4fe6a0fc722649883f8cb655598a15a1d4c229dd86b5caeb711a028defd431154bba46b48172a4d8cbd45bc90aaf874b6085fa284f5fed655ad6fa17d67b3b9a796fa3e +SIG = 319bb4deb2178112241b3fb8f46e105c3b8e4ef721eb200d762ef363e2716f2a89f80b5b9e89970890a09892ad6a58808b477e943b3cfa77774a3645bc745f03 + +SEED = 048ac9ec3ecb30a3b1bfda9b3b79a48c0793b490879e3c8a5e23ee2babcd9b7c +PUB = 946c186feafc3580a58ddd526ff229c04720250f4cf6bde0271eef9b12b1c3f3 +MESSAGE = d68be8ef7b4c7a4289f2b18b16ade97f4e4fa16452976afb581693380cc54de38a07587f32e2d4549f26595fee2393bd062e9b00bae72498e4148c8b882a8840e15b585c82b5c0defb233518409916615deb3a55a5f84e6b3aab93844de3b1e4d86e09f889ac71c324eb12d0fbd861cc31229540e843a34f8d5be47c0ec0d23df43e06813fca309439904c167d1043c0dcd444b004be1ff27b7862b00eba9433b94b0fcdc67521da0c1d5358636c78f530431164dde20a1cf164f51e29b8e63eacdecc869b41392c667664d91680d9ac516af548f09e60564e814e36e0b563dbae55c627ffc14158a56d8eb3609e174381b21de4ba82344466dd577f4d1103c43c27fb83cb833d87afdf7412b4090909b1dde264daddce967f496bf6f17112bf351e417db5953b13b8f0fcccbf30f5bcf376861c12ef20eec89ed23cf384ee78dc6eb40fd5811a7b23927c13e7dc5da3a921b883a9b2b1155970fb0da7d2993dcdfd4343642a9d5a6347e43c193b5793e4453ac1537aa3d04dc9f774e840934881d78a39ba250438c507250eed2f6e07cc953f783d6b72b1cc619981 +SIG = 2ecf5b8a59a8e27d25890a2aa32f4a0673275d539b174afa7b2cebf2e76280dffc338ede85ac8f614039560e2806d9e1e3cf9cce2ceb7874ffe1a7e80cdef40b + +SEED = 2f057d20b1678531611f48f003b7d22eba5dbbd7e2dd41b7c79d09071f85e993 +PUB = 620fc4eaa34d787df675ccbf7e893204828db92ead17a1165ac7fa1ab42719d8 +MESSAGE = 6e35f6eaa2bfee06ea6f2b2f7ab15fa97c5180958af2e90af918adfb3db8323f447c7bf26dc534997c38b7fc977f642de288cdf253071cacf3564e3b8ed6dce57ddfba9ff783bad2e76df124828fc1031acfadf01a44d41b42161ad9060301c1af1928b9e5b73b9bd21cac60a842b504dc3cc311c522e3bb048bf221444f53ceb08e77e948590e94ed98f1b604cb9eadc93bbe7431c1149b23193ff93e8569f113e1684d8976ecae6f09e0103614be418a472ef55bb8890d72b341cdd7505b50a45522ab63ed791ce8f82feddd7a620a4f6fb1d2fb0ed0c4560d78446d83b3d1b1bb56b366d196020d0624b1fbdb75ce735dd43e8e8df163c44e236993dca341f5132d825d0a4e393a19d38f61e11e0cf392cb9b646ea23c58099824dd8d9fbe26a49e33b23df80607abf19715799c19acc722ed9bcf94a0c29ad24b78b0b035b3241c64cd86edeac810e66745694b5eb1625060edf2d949de0d34f522df2dc60ae694a193f3b82c1d6f83a0cbb840f46c49a3d7d1cf06deaf96c64f8f9e17bd9ad512ae6309c486d9e2a78dceeca473a0421dd1b643c78754271b53ce +SIG = 30df7b0b1c04fb1efa3517e928d6d57c2ca0d07f4e04ffb1f08b4792c5937dd271ccabdc00dce850afe50af5990f224e8420a681d95f9f7f515afec102efd10e + +SEED = 3a3d27970fe2acb6951edd5ca90dda0fc6dd229c0a56df6eb11a9c54d242dbbf +PUB = 564f0dc3dc4720e68e44dd16711e049e6112000098fa62a1b98c288042f7c3bd +MESSAGE = 4374f61c2cd88a3b8972249bfa79b36ab69e3ed484cc60e5d9541fa7686cf4eed1210c5d0dcf42dd25972501909193ca76ae6eb7f471d8bd0d5fb5a6b431bc3de0e0318d50514524de87c4b83005dfb41245fb1af79b84a97b83d3cac7ad7a53364e2e9b21c97b769bdc57f0703116168380f3cc883689eb4a7fa3b26dbe12bc28f8c40381af64df4b5361d174cf75acbd46428740b0d1322d32bbe94845215966ae588777a8c05336e352306d49278d328e496db65e9ecf6ce6405ed1c893490bc48c13a134e1fb6e80debe6d32fce6ef74783c8d77980a441a26aeb4fd83cc855352cedc188f5279ce211f744a40b23ce7ff24437a1dd3373ec5b290da1f94f43a07a3ffea5b5f67b52c196185bce9e9a858257fcd7a8ebaf9040ed091face5a155aa447fa15e12122d25e8fc36eaee2137c7b3aa30b7e3ff6cc86b6dcb9eaf49c9576f0f462008439cb1a3aba013e897a0faf994cb7d59ede5774bb144774f73ca30e6414a7cc7c74b20c51a1404ddc419ef7624593e9bcfb37c0a762eab68faca5863443e16edb759dbc8788732b9e4f59c11192c3fcc872af55f32d +SIG = 22eb8ea0507349b6a0ace25cf9180cb08e0357b04502905fbe69b4e21b2bd94e22cfbdb851ae716a5c253c70d5e2b24ea78f35bc213292543d94e14110b24106 + +SEED = 06d498318da456242b9c3b9ab6d532a128fce044f53882682e9262149c165288 +PUB = 413517aa63200a17173209a4b3e78ab9383cb4e39efd6794c46a2d13fafa99c0 +MESSAGE = 3fe30ecd55077a6e50df54bb1bf1248bea4063e3fa755f65fcd1159ee046efd0eb5f2fbb38b5c00947c97dc879b36b9e536192286086d0dc12053610386174a7c56f22a85b73ff208c5944f393236c32415809da036e73cad8fc3c30378064a76afa930a3baae9aa357061a8c5e8e756a9cecf94b72df43facd88fa49cb4948c6368318a6b1e5cff52e587ecdfaefdb69081f28c2d13bf8eab81dbaa5e3728c4317fb793dd196bca0fe54a6c242cf26e2d129ba0d82a2c3a45bc8d1dfd6f54f8da4f5189c91ac214fdabf4c597381b2e5c40cc71fa7051cf2ea93906a37d57df12d5c7e5cd77c907e442566315bae51a2222d62e3f42d1767882637d66a1d5305ab4010a0e49c57def69dcea839e1b76a41135ba952cc424950e8d3aac19e1d93de7757c15ff9997b3d2a8613cd9a164781d1be331799fa6109cef614305a1958f62903c8c9ea0b23ba706d49c54baccc1e63cb4bf14785fc7b062a9800349bdb0bb927260b677b60f10e62c8780f3ebb5eb6ff0360263d457ab52fd1125c9ce046a95d89d287350c804cfd4ff2b2ddd18a9e13519f20b4d1e051af624640f +SIG = 8250f76dc599c5128787e4f6d3da23173330ce3320dba959bd714cc8cc07c67945d63e75662c075e267460ab7bf561f24faae3b41dbf676899191e3b02b5af0a + +SEED = 8e8e1db5b1102e22a95c47af3661469f000a33f13b8b87b115d2452a411f6f39 +PUB = 56d7b3169a95c22998ec937925bd7cad13cc65808cd5d34a6c4da870eaf32364 +MESSAGE = b24634fbdd1b7661315d9dc153ba90d66a88622a4158f8bcff25ba9c29e65f297f8e60311800b7331b69fc20c9f85bb7c184bd4086b3a9f9a27102b62362bdb4fa5b201594250fc628fd2e0e0d1be03dcf818c6094c4c29121cb2bf6d908ed8aab427c3771c0c95f0ac1469a0810b603a470282e5980a60729197fe6c20ef681cd1b96932d2058f896ea7416422a7e541f224a5f04253080741c5d4e3eb039db6ba051b4ca5417ce8afdc70214ba4dcc85b623d11e681c6009aee4e6130a83edd0d2c99fb0647e11ede7301ae56b59904ef7025732cde038801ec7e8d90a9a1bba047fe628351b3b89d0bc5ae665a700891f09ebeec05591842adfcc25adc3c71c1ebc4a312e5471be67253b0e9428b0cae37645a0f7ecb89dd79fbd9be2875433667ae07d74a7983c4cea601e72e975c21df993e7fa22a9fabd45455d45e37031558e13a7a4f5f497ea78fb7399f8838c0fd5de4ebb66db290f43a4867d505309f1c1bc27e9fabcbba71302fc1204715ce3fcb0905bfa411c9d1c9ab4a39954e50b8e0cf736c10289563bdfa967553c36cd9e555bc8cc56be594847de9f26f9 +SIG = f6ee5e13cfaa362c8971d5a4a879a7e36966525ccd86c5a48cba08d913ece1a79c4cd146b8e9c65125fbadf17bac1cabcde8fd17cfd68fa1f9c44ea61c08a405 + +SEED = 3884b8b79abfd3be6c13985eb859ab743f157cd9deb81b2fe97ea4d6173e46f5 +PUB = bd7fd9a8def13a542ed2f2fb048886885ba9b5ce59cb7019fb54667986eebc26 +MESSAGE = 12adafe30eaf2b9c7203ca5d44b97ffed4bf6517a49988e4e676c8e314adbdbe23d8f2d3e2b081a7024fa525ab5aae26e60057c101e8f368d3addb9376c4682c1f4224d7f149a8474bb9a8f663ef210e9572ce829da388d8aae72a467141adc153473be3653baaa64b5b1e2e30683f6f06dac2784d5bbf0d082aab47305ed8a8efd0886ce63a179315225d1e4d4ffcf1f24ac2f464cf5ed3a8b6d3998454f1c02cdbf0a444ee2b59ddbe0a174a0d937fa62865088ac647499957d281c6949803a5fbdfdd0dd9e91b6976861f3c5f2126f39aac935be09f4b9715bd4f0d5c55df73a6b9f2c0ad26ce49d822bf85bfa2346f3165b03859a71c3d2a7b86db6e9f2e5d7b169a910eeb7ef38fbdfbbec43a9a25f04bc3acfd3b0691542ab6de9db6f03058f9584024f9918edecd90fbb85735d6dcec5bd593ae63e2cc96553599a310f8f2009ba95371196b4d5b80e7559637f22926778be5e1ccef5126e2443fa939c2a53dddb04961eefd34e538cd8d7f0bec2bff1ef0d3a4bdd358317637f42d595538c1122251a94e963d1f81e7b9aeb164f95da9a4ed7529b845ebc961b27b5c19 +SIG = f4206fcd34502441d54a73323f33a5dbb4c98557319f21246f260ffbbe5844886db567f4b63c47943dbb78fc35657d7c04d4feb042ff8536f672925c319efb09 + +SEED = ecd519f287ad395052b0b30deac341d2a9df13d6567c891c813a0c9ca52e871e +PUB = 8ee94c588e0b343585fc6748fd1b54b5770c64e9937a56357a48d44ae2f51824 +MESSAGE = aa71be5f557e10c9fb5f091a3a274453947c07a0e25b26f9509224541dff76f4d96effd0d5a41d319bc9321a86667d55cf49432fb5c3e715388f3f106c9174b1610c8f3075d5931c290099385ce9249e235128e907c53390036fbf5da968f8d012336958de90c5e8e6b1016ad43fb57c8e288dafe14e90e64b63791e5cbe557e02df8ac9370642a71faf851075e5565f6f9a267f4f6b454ce4c5474810b804844dda38392939719793246aa47454b9b0e82e9803c09935d0027f3995cca9713069bb31027f7b2af12fe5feec7eeb06843d8296ec5682262a07dae747ed7bc821ec17018d899fd167b36a7e3773b427499d99dc583bbe4b429afa6a26593953f943e4673bdd0d2a844256131603cd0903256f334d4f8ec82de115b6ca5338c75c8baa44b4ba963c7c78510d8de9b2a5852f42f3463c685fb3a6da61a8e0892662d6a250fcaa6fef74d450fc457b9871d08bb5be3011294ac888fce215d535c3b1a43bb47efe3ad25da159191aed55195469c59093ffb24f65d60c4020bfbe647ff5db7ab8a01d5e487b0b1b64ef25da156db142e6ad872a4dc1ee9ba668465265379e +SIG = e8f51be73fc4e0235aa153a2e1b354e9c5d2d33a11ae0e333478de1d8e6c4456d2e250824c3246ca0e8d6ae3e16677a97344144108c13b959e1daf51cf0fe501 + +SEED = 193f3c630f0c855b529f34a44e944970f4a6972e6c3859359c2e0c8762ba9eaf +PUB = 3256f2c82e7c801201210140569faf18507e60338c2cc4118bb1ce605b0ebe61 +MESSAGE = 98623f651698085bde02762e8c3321f14da1619b5c3f7c1a568e8c26ff0c62fdcc412475912eb8e8c4b0d30918b8ffeef3509315e58da359cdc2f26bebfb5703953be16b8f3beb1e54a1abee0aebe24e64dbe873402e156f37dfc168eaf8a114ce08a6795d3f64f5151e9a8b8275cc7b49a6b8d8a66b6d4b7632ef80740dc1c1b0a38d1a28f7c1b29fa44541c1aad354d4590c231dae687a2a8fed09e8c1ebbfcc38f347bf06d94577e49ad139f710ed8bb1fd07663c0320846fbb455ab837ef964ae7d4eceea45fd7bd8d509f821e6eb027494efd8dd8e992b88698eec2ebc5e03025be789c18013f201f77aa2d34f5686460e43fb489e08776f98bcde2ceeb9d4fafdffe0375604371ec32f46b81fec474382908e9d250a0ba2780a7d6df407bd2b1eb126748d72511b9b069eb1cd44270f29fe84b9a717751831d04c2818e408f22789376c61c2ca45e32e788ead3a7536bf09da8af4703902f5516a020d89263e93701a2565eef1270418925f35a288e327bab628ac2f0248cfbca3482e265d1621cc343c31f65493f064bad0d7602460715fa486f29426346af53e333b75f5905 +SIG = b12510ac5f2f6d33360cddc67291d6c270fd9ee62dc086b38d932d26473fe9a24efbd4248867ea7e915a30c5bfb3b8b19aa01aa2febf0dac6cfd6638a2ba7e0c + +SEED = a88ad0048d38c44cebe735ea3802ca576e37121c7d4d760dfd88de1663064abb +PUB = 14dd8bb306803e5a758ed68ad21d07d88161d50f1c74713777da1209afbaea0b +MESSAGE = 2ce8bca26178913b1676e90ffefd945bc561982660e2a75d482ff30aaba1ba43f82d2e6b909ec10fc09789ff5cf32a5180b601ea80fadece6d7e7baeef481dc6979e2f658ae0f6d8e416b93298f7d34031bb76f716ed991a16d09a582e58ba4003ac17be8b4469e1a889b2fbb2289e98af1c6d5bbee77756713c0778b0dc446a1f6c48c4d40818ec799905f069bc95341657ca5d02b7a539a13a02cd0376a50e8343c0dc20346de5275b1dcd4ad7af725131ac75e954825d30eaa57a68bb98dfc41cafe5710556647b387d9b7fd4e47651e5138050798f6d40f4ee7120b58f74da94d73cacbfd393d1347388ee00b79b8dbfeb57814121bdda60c627dce147d4d568d79052e97b9a5f3eb5407cc46461a55e18a960d8094a5fea48b6937529cc4ec919cdbedf9185456dc00e8d98ad1537ee10a057f4eec4b81dc60392fc9188d3e561785965092e44317f2a48e36605fc583fc173b05db9dcbc7557d06487390fbbba77af3a014e1ac35139caa1c53a8d17347f178e1c54d0f52b40e91042c93e7e481d792e288fc27e4c2fcf111fe97d9e2337d2fc1c3098f06684a31d55ebf362c027 +SIG = 1341a148da4593c88ebc5a58821eef77f92186390ff633e76207084e7874ccf0eb1f9ec70a3a3f96b58934bcb061ff920124f7e580fa2b0b279583adf9232d0c + +SEED = 3f59d6a018f50a822117e5b473609e30cd64920ca1c2750dcb09eaab807a3eac +PUB = 457d0e59c11f348f3bfbdd3f327de78c0a7577c0aeef42d4c1e56700d108808b +MESSAGE = 7d103a6c6ba2d09087eef2254c1c903f067695a54c4515e4d13bc1fbfb54d6e7a167349c14809976da04a7e58d96b40aac3b2bdd14b9b50322bb11645f05e5e978bc7fbd02492ef88f87d668280fd708373207ff670fcda97df8485d5e46dc3bd04347f4d7527eab2718f7d93d132ba7758218894e75a7deabe693335ba0dc73bf26c288bfe9be8a736d75e5e0eaa7bbe8d0b77abdd5146e0fc9b30db9f07cf4bf36260a1f41410331f8b47c6b38338c6dc9e801ffe1d585f9b7fc31e9778bca3027c232c074cb18e5b72997005ffeee4bf37c8f874b1b246a6345415dacaca7075a60443ac3319236e23cf6b7544740807052114984b8d8f7e857dcc6faec8869cf96b997dfa9af9184ad623f1d90b8ca759b448eabfce18c17cfdf9a3e3312e63e5f084cea904c1c909913cc4b19d044a3720034973c7384949bd6f9ba9256f98cd394c566da83c31180109f16d10347b7e3e9dd6be3bd3c77ff1a7996a078dcf89dcdce2d1b615695f4cc9f8f4f2a08804641bca82662ce88faa53145b6a45955aec8cc2af81cccb5d7c64f9ece1c9983326484a1e5ece4ce36544d63735f7776f21a20 +SIG = d7425ea194a6715c452ec4f6d6c76e6dd374d3ca7ae7a11995d02b942d4a31870dd734c12fca89a8eb0213eb139c14a87a6a33e818603b2e313023fa58737d0e + +SEED = a1212b34dbca63b7093612d05dab7b4cc8f7b676a934ad01f659851b3bb44e4e +PUB = ba2fccea9a080591be71268d7e951f250dedc00416e5f3f908db6cc571254925 +MESSAGE = 07c37c46be3c68d05689577aa64a932b906446b29baf12f6174a6b42bbaefd1f1f373e0bccc473ddfcee1a7f21b96a6260ef0aa1f2d8b2959e71d12c953358a2774cc5e6f379a313e435ed69dfd6d4a59adee3cc7ec4bacbdbb3fee5430b73f6051a6096c60e9bc92cc8fa059fac2a93ef7007d64fbe50064964d5a0ad601175cd9caba453f9103b25485545d301f03c5f9f9478bdf9d414bf1dca3b1c1d9daa9971f9e617fbfaf5b02a7fbd5d4fb894c0975c54592b49a0fc85dd0853f30c51502d98fc1ab85a17cc58961aae9764570ba5cbdbc96dfceb8d11da53364b4025fe0b8ba8a353ad23686720169fe973432ffe291a4b11dedda0aac79a5e42620a64587d2059e787013b40ceec599208f66ed0ca6e1be9092ec27db216ee6dadfebc21705bc4a85aee577e57d239af586efeec22cf38d1cfb3cd74dd0d9a3381aa81e6a297e39b819137ad27d475e2bf54aa426dc29c4ca8176df343137a2d79d12ef9aa7be1cf6775e5d8a4430a85c33db61cd2f35187b4f6ea9ebdd753d1c4ef72471159ff07b77870906496249d4278e3f3ca6bcbf37a265b896539190f9a31f1e7b4b65cd1 +SIG = fa93ed6595bc958dc042ce1645167b79e8f6734c46f80f631fd5484908f5e51a22427ee686f564ff982f6ef4d2ca1f0ca5624910cdd63c11a3c2b16d40973c07 + +SEED = d9682086fe7dda30b87111060193d847566ab94cfd9c97ab6b43e7a8d3f79382 +PUB = 8b0b1372d88733ef7233f6379790d1e46e1e07e9d3fb8b0be252ed04c5fa163d +MESSAGE = e8814be124be3c63cc9adb03af493d442ff20d8b200b20cd249367f417f9a9d893fbbbe85a642be2701d1d1b3cd48a85cf58f159a197273143a578f42e8bcc8b6240f93271900538ffc187c0afc8dbcc492bcd679baaef3af5088434a94586f94b49970bba18f5ea0ebf0d27ee482aa83ad0dd0ee609df59d37f818b2c8d7c15f0f6f544dd4c7e7cb3a16724324f77d58948f8475a60d53e5bd510c17137c99e1cfa515af9bc85569d212a21190729f2817de8c46915e021df70ff6d60215f614fc21139904df3b292b749dc4dea02518b62d15862c92d2a4c996701cdecaed84ab628ee984fc111eecb59e48444efc0d456e2c852518441c3db7630ddd5156249a28730983838ae59ac4cc7110fd6de68101ea5b2ff69fd364e3c9448defefe175bcbe117cc11b4ff7549c33e1025b6b592048a8e31969e818dcc188bb19d7a2440a3baba4eb1b81c45679db46b31bcde7776757d9931ec2063fc6f1fcd761ecc57a7d030a85ea273ef1825b05092ab9645359a444ff7d166b575fac298308d9faa68463d1d0f7b7df8a51c6815d37159adc0b593224a818321d7219f09686cfc952259718dfc +SIG = 1793e497eb521ca74e35d14a63868cbe9499da2f21b4eb5260340fca3c1feca78dbe5b14ac10f3fa76fa2e71e4c91461aa75977e5e70792670ef7ff0e6a28708 + +SEED = b52b249a7aeae0fbd94ffcf9a9fde10de61c3f4cbda14b289fe01f82707334ca +PUB = 735163bfcfd54f9d352e1c2f3c0170c95c1842ccc7421623ae0496980cee791c +MESSAGE = 1d445e8ee36f6e1064ee1281e6b4a4cec50a91c2b667c8305d1e9a5f7b73a3445882581fb0c11e64f6ee92e811f9f2d6c59c6344be7691d116dda493cade51c0ce77372b61a7c4fbb633401333cbf71372ad2f044e992ac035f5879c053004f8223f237a24a409b7894f6ad518e046b8a84c3f4c6260e6169fd944d57fbcf9ba2775f2d60ed772c46ccd63c850b80d587c5208dfb1a25878c02dece3e602e9632fc3c2c79b25ab41034c6e26b869255357a686781dfe6e644beba9b627da1fcb5ec0be497cf188e1ef1af0601bf16b2911fd9ff34f0e97ac95a7fe2cf90ea6ced33ccb0ed1ef2d4160efb07c591a5cb16c70ca1694fb36f2ca19eba52be3d4ad895abcada4b36f0261d65f59e0cfd2a6148a8892ddbb45810db3bf4a9e26e92c15ea2618cfeeb462d8628f254f54d2af27113bab4f9a7d06791811942bdc32f845922d7b2ddba959140928f8c28d98b44e1d19b97fd39cc0f9a5236d349fc835ac492192462e40ac629bebffd2eba72d2788b244bb777ad0f7b7f96f23412399fc1d87a1d087ba089027eabbc05edafee43379e893291331b460bfa7332e0842ec2573393de95306 +SIG = 6f48a9f7f0fa192b66d12175a333612303e180b9fab18edabebcdf6674fdfcc53607089bf980ce35894c2f9babdc4438667ab3297a6248ec0269faa99c724807 + +SEED = 782a93efe0ef06cb2534330efd0e9684e9969b5258123e490239bf24bf9f6523 +PUB = 942fa1406ee2683e29377e49f7ba757cf50ef0723707d4403d2862257045de87 +MESSAGE = 46a4e319a670ac993994a53300c3f79144c2f7fec1116eeeb3621c76ac35da79dbff6e189ca9dbfc9abbda054847b2971b02facebbe926d469eb0a860389ac744162bf6fb13b42cb9bb8c9d72607138e7800121ee0cd633ed535c7ae5f4060bbdd271c9d110abff5e060ea6ee83890b1e92a9256d7b2ba982a3114bb6deffee2696f0a2f9c21aaa5b2defa11aab7076de6e57e86f284bb67f5a49ee685921032c95b74e7e3eac723f175af082c858e0dfa01728c38fbbb4c83581f81ace6c63c6bdaac5620eb9a568e7ebb7b72b3d1a164ef524e7b9f00799ab086715976c14d0df65f7b96bf9ebcda7feeef113422001a03a7633df5e49939a121db899d9b8ac2db4fad0c30cf0b8bdbc9e9802a797c8238e46511ff24068cadcff2448cc0bff92769223348d45d6b6f2c8f1593388c0bbbf44b6ddb50b98cd7f09c730f7de4d008156cb3cde0cab3ad0a58a83954e234a0a8a04b573c9a8e9b929ed38b8b228bf55a3c6e2c6b51f682652fbb708e74640e3313e17b4694d7fdf0111f90608c1b5af422dcdecad9ddb7f50d1bf5bc6378ccaffc3201e6c787b48c443ba240d9d50ff6c0e9df7f1a5b +SIG = 93e7405a4044510166c8ac264ce3b5ba6665d68bad458712dc93c2c390568d7402ef7d57f549b8a1042f7f69a679aa855f34f801d57d79895deb8deadb352308 + +SEED = 6fe7bcf7a684423de1076fd76da783423373b381329efd6157424ec4b2655a94 +PUB = 7740e91afe45324f8bb990ca2a341279ddaf232c3bb415f178b6092fba195fec +MESSAGE = 0baf0ad440612b4c5a136c3a42be1ca2b7c319862a44a9fd50c4ee73541c5e6457efa81825b6dd4a72194a2968688bd49e5a8f4c04dbafc2e7884c0c70c208d4e954cd1675da8e74c65c497cf9dc69424965bdcba5de52936f925f62e201f99505d3777beb3c2e08b2ec9a873e5a9c21fb4a2f3e861f3cf4d6b5dcd1c88bcd9163539ac62cd0659f4ef232c2ce57fc77f90285eb350169edc6a806ff50f61c7e0beeebecec63bfc9d3983f5bb4b261c746471fcbf2892c6108970b68db5e43c4504ddae2d0ffffa28b6759ae1128e16f66d492ad61e3722c960f88692be81a9f412890ffa346e702c867dfa259703b73f525074f3227c49cec1b645a103bd4471f33f9f1bac327d7917861d0ad91abee60222ea2a3c8cac052ae9a2cbd90855d733d5319133f9541bd0b61f0995268351e2863c1ca2ca51e3c976383f5c4c11ff410036fd51d5ac56b023ce9029c620f22557019ad9b4264ed4d71b434f4a4d17a7d5769fa1e14a69f7ae419ccf5947f8c7682697116c2405f5a1959c54b48f0872f596ed45964488ddec12bdb636d0b349e749eb66092ff4511fba59b5962cb93cc85515cc86ab0c6b2 +SIG = 9914cc50fef0935efb89b3d64e3c1c3412aed659b90166222c0d13ec1ce3a68ae6281b7efd9d4ec64b82e73e14479f03fbac8fa3abdb41ea4215c4a4d4949d09 + +SEED = dda48a0d15a29eba9a76305d360e466e72d8040efe2e89c04b6461315a9b8bf4 +PUB = 4f5cc36a809416b58e15d24cc57968cb573b76ad90887a8ef36cde7eca400fcc +MESSAGE = f5ac19b81f2111a0db0ae30d1513ed343e7f57f7f77d65b8ac7ce3a601174baed9bfa136035976f516d5a870f45db1919f1eb1cbecbe88ec32d191e9248821a7e7681fe3abec11584bdb33de1b4ca94891eb66dcb8539ac41163736ccfd69abb83814dd38cd60381318728052a25cb665471058650ccc75756dbee688ab826ecad4ad5a7db57e8f65f1b64abff82dd53334b797ac40228dd817f239d3ee804a19aeac8cfe33eb657ec9ce923d6b388914cfba2e72bfc2bc3d6f985c0d97534db958eede57b16491ffb755c1a58d78ab377faec0d311818e899260e3ebd1ccd29246fa82d0b76622b2c4bc52f549fee72a30f554f331f36d2a74d999ec10a08294f002b4361e590279c2fb1bda4312ccb24d75282ce7c061a0ca5520c74f6f6333b18c4b541cb6c51e01575ba80512ffa7ce0accd22d14027c53aba1f7437835f1114d68e3acf3ff8de94c8e4ef6d3ab312c91d02970157508f54a5816f467a214e9b1284300289e65f365a610a8ea284666cfe5518e435bccd21627501c725f0b8eb5725e0e06e0cef5db201b48ec91ebf878dd57ce8dac7334848a1bc82c18b065955e4f59be3398594dc +SIG = ce71bc82d531d0f93b57bfdc2f7316cf404ee09af88f33bf806c7cad6b8ffa366236ba74e75c15096ddaa6e3a62a8f5eb1c8c3f6b6c94a6a349fc7c0cbfb190d + +SEED = ec57b941adf3ca13e77a780577cfd0df5b49edc85351052da34e99f8a9bf3208 +PUB = 2859c071978a04b7f5407b6d22401a78efd0394bb966b9a04da6b5ef819de3fa +MESSAGE = d2bcbd1bc361ab32c66d72fd48a8e227dc6b8d6b150848ba715ff47dd35c8e49381bb4e2933f42cd26b75b14d9c0039282b62b8556aaa11cd691e828382be306889fc9205137b169d3bf17b7f37693fce286039f03809d7d9d98c8fde46f1101942a279c516706f50191a9112f6a24630e1a26c321e46c9ccc85b6ef942f353a642b9e7ef998c0fce2d3a75b999eeb77f31f9b0813a97e3014c3a86e2558734621a3066dae35845031e35665f1922907dbb739786a8b7658ab60276f2d921d1a51230fc74d19e80184a4f10e9e834abc9a36c429726bc055dc8c063f0eca9c61a8a970bd4bb5f424ee4d04bfc295e3bb1f34becbd9920fe2e77fcf36763f32fc9cfd5e465979c167cabf5a1244b491fc06b8946419046ba516c5b233c414ddefb6da04f2e13daff7a9a0c02a518ede57ad9521de64eddf6f49a9670f632d3f7d42425207d053604fe39d13b9f52c8bc292b0076ea42a560056df25de51ad35881d08543224d7fa5d70b8603ef23ce06339d6cd09e22a95749e50dfbd3b8ad69fd30496b984d1c0a199c8594805f38ba44631a2c59eadc6554d19f9bc98366dfdec2a121d0e4814d2cd3f5871 +SIG = 118e1462126b45b8c6803523755c56dfc4e123e4acbb66ba0ba6fe3e053da4119f5719295e0c82ac64d7c5cb1ac898df263ddfd360f3008d91018b26f6a1730a + +SEED = cbfd91d7695c1f270f69246ab3df90edb21401101ca7f8f26c6d00f4dcb7233e +PUB = 513879cf79d2f46df4b85a5c0949eb2116abf981735a303164cbd85adf20b752 +MESSAGE = 264a933f7d0aecbac13eef644b0b53dd53a1280904100dbc1ab87b51148998f9da0b3a0a6337f5e3486c2b7e548d211259397aaa194ee4695bf98c2d5f4487699f7397e5d3a7e6d5f628fbd05497c556a50a4d05e2b712cdbc351068e42af19538901b8825310e343e1a17a1867dde0eb47ddab456d316f3521554937bf808ae4e4bc1c3c5b4756e4a165ad9e8827f5316f748cac6998ed2d2104f268407c135e62f26a922460eab6d851639a00e5f08b34765ea0244f475bbfeac183e3b5bd1aab798522798a08ec6bf2257d4692f5b03cdd0a2133de970603e3251475aad8d934af6b2bfc7a650b91bdec143f8ad254cfa506bbff28a03beb659ef5e5ddffe76e23230c4ccd46310b37dd91fa6aa68167f62a55c8a69f9ed1ec6cdb144dd81ab0bcbd62643420bcae67869f64c0b169f3cdf3c905895b7d35b6fafda25ccf23c3d10de32e7f271e300d39597da8f843722ef08364a5f7a105b9655172df7c82d7374f98264c9cdccb496f2e10fd8262fb1a9a9965b0b841ac0d0e9c1a3d9493ea7aa600205b8f900be0d7abb4d98a06583d2295c276318be28d421982dedd5bfc33b8865d94ef747d626af99 +SIG = f336137dfe6f42a6669b55f74b80b3035a040367f90656fcef0a644c52272ddc39273cd7726010ebcd8a30a05201ab70b8ff97d0288a2cb94cbc49020647390b + +SEED = 51a4197ab7686f82f6003a0c32f39d0f2e47555f4e9f8deee75bcb1bd1ef69e5 +PUB = 06386df86b61f1f8f4dc45b73edaa841920968bbd131cc5ca1c5294eeed5c8ba +MESSAGE = 2aedb7e82f1fe4ce469ada48345d006d1b3bff40eb21867f51fce965640c409ec13ad4d52f891bd79066d6b4d944ca868d8986d242b57eccc4c4a488291b159c8de4392be4b86febaa75eac5d22d3c4f8d6bef79adb9b92b4914d5ea07c7f021e2c29f58d07be8a084100bc152d51ca897d7c131644d0895322e9440a8339e1aa390a7f4fcb51ddfb6df48aaf5676337d87ddd85b1d925e1a9c29fe0818f514ef72f747a674946476907a7ca99e9db8d209641057a7f44a317b90974bc86f9617a968a76a6b8387cf5853e608190c1a79f1e1d686e0de22db6cd9aeb8532c5c85cc90b5a018579f28e502a770a4ec675263d0dd781b4fa53c9dbf8098d57b33ae2afbaeb3e68266ad9aab7174ba68c6479883992670ccf3e5ac6a17e65e31e1fdc85e269c80935ef574f20d239568486e7d94a4f724ab7006098b24f3f61587691435c7f29ce4e5ca71b2b1874556433a358c8c5ef3c880843030c2d13d51b78c9bf1a8824e62e111844396f5af2e25c3126ef3626e26efafacf99830aa41212332f378a167233a0b42213afe36d83dc4582a79693b9d571a57712a08b8566d361ac902647afc886603e24283efb +SIG = 2c072969ff4719212a121938b506c602995b4d02a22e6198d6e87dd6ae076225ac70bb25ef8c0ee81eb6fe953df6b1815949e8ed0506cb012e873cd36cd09b0a + +SEED = b1119c36118b7a065a195bfb8b79a5c287e09bd287c2daac5e6b01164c5d737f +PUB = 88f218ecba99e770ed214a8d01a92a10400acaf1f6eed420067e136ee2c0c670 +MESSAGE = 8816b1eb206d5f6dcc2e4cc391d23209006de935e318152e93fc8c2cf08e26432bad9adb3203d898df0a2e7f1f83dc2f3ed3205bec8efcfd31adc1aca5755db9bd4efe54cc17073077de4a3fdd11996e84b6a052f034b41099226c9c272eae12528f16581b91b812850c207144dbff3e850cca848ec2b1dd164744d7b59337d7e3efef008162e680bd4a0899ced60b171f8cbeb48c5158df6cbfdb26240881bd58ebb8b6a079587279679cb5ad82f371b53c8013804c35596c887e436d23926f994e09d98fbb8ce2704174ef38b68262a7f1a712da0ef0dec639606814b3bdcaf253ff31c48e8a752c111bd7101031cc3d38efb0c9c7f19c59081584a0e015ee7c75b10a4c51ff543a30e52d5f94d8188c6b08e9df1e84a4e2c807170ac124a771b99465a0d38b1f1c6330403c82543582c5bb61b220de1b9e0ef69bdae26023181ba4cc077a5f0d425732ace132ae0c6ff0bb18baea83e8877afbe650fe0bd02093f00a7b5365728dcb66fbb881f592945058a5b350665af91c557a547250ad295e68b4fb72457cfb9d5ea1a7b2a39c9ab7d7ace0af5d51669cb6c2c4c07b2256d10e5ffc6b97c660006313c4eb8d +SIG = 24ec1e54fc7e722d37551d02cf135d33f5d3ff535773e02991ee85ffd3aa29997f9c464470197fee81dce110609f870b27c18dfbcfd9320548525e93148e2205 + +SEED = cbb587514e0a34ffc34cbc04f28c9b4f6465f1eb225cca19b864876daef37d7f +PUB = 6b705d4677d2d849b6744b1ebed167dbcbf645924b1ff2e6360794bdd0e09788 +MESSAGE = bdf7d17c706796efd3489559b527b1c0584b9022c9cbda3aac5146da340d9cea69f916037cd21b3eb1104348880fd5c5b7c65ff820f7499346016951cb715d8df2b41c88cd3c66105458b7b590c21c1ae2f6ea9ddea7470f25e02027d171e0e574a2bb21642f8f9da508e21d8e7335b5ace5935299407bd1b01bdd1423133ef045234e701f55549434ade94a60be1e1406ca5c758c36799ce1703084476e484fb1740530aee84266d07adfb4cc689f3265133a59cdf992fbb9a4b12defbe241ddbf65d12b2fbddfc05af0fb8de42080775bad29c6b0459841cbb648a9a95e48d6e36ac514480a3deb4b36554d8da620808ae9d47329710d20aaa6e5d7f547d81ad30f84c0e3d239cde5b169d9ddf294832d67a8060ba329c4ef39be94ac46434dd2185931d1231f9b6df878a5af0831e0e9d8a08d08069ded6a961ef7f39fad501ffd17d6d9b7c654653c1f58fcee1a6cd803d2aef166c78ef5514a3276d6998dc7c09a3fa982e427c785aa6a9e256f7ba72d5a6ba33eb46f1f9fe9be2bfc14109f64773c00c063b4d5cb4f4f8a0beca92a9a016c4f540feea9c3a31e313bbcbc2ff5eca9967857f5f8a909a29d7f20d +SIG = 1274d6f356eb641472b6b9e5b3ce65d2654e6cb87d3a83fb49d0f7da9c44be2b532604465f6089d680d2d94b0edd2b6b2b805c5e84c379efc059673d31007a09 + +SEED = 8bde3ff61a16995ab9d539f6053219081bcaea1d458ec33684fc1c01fb565bfa +PUB = cd9d782a356e847b7a04c885a9b0907cc33ba97ad5390d4ea5fee5eb198d08b3 +MESSAGE = a1f40ec5807e7a27069a43b1aebff583ef037028c02c859525eb8fa4c3ba95a901ff3aed78c4f87752fb795522f5bf715be7e3defac10fcf17e3fa5c54b20089a472333327252ec945718fb455e3f27ccfdef823d12d406e62a4aeba3cb9d1c61b2b17e49e200a8418f935f26eeb57602c7aa3b3a24f7e6238d3e08d2d609f2eada0332bc8cb12916cb03b0d4f9cd602002586d3e4cc7e0e0381c045ad2e1ee28298ae7fcf0c10f212808565296f158d2c32e8cb28156581af52bfc3470c3c9582138d2255e8426d648ca237d7aad2856f171638558241d8ae3f62ba92db596568edee3ec0ef370f83626aa0445af08f967863660e8fba5a41c8e8ede1c960514a14687a4a81e776ae0e8e777fb0f250d51a83b55f8c1ffdd78df3bdc97ff177afeca046c72d72af924ad0d0ab2bfc11b7f4abded51c3987a8bb94d640c8710e5fc9a4190e8a008363d7419cea17c40dea20ea5156029f3debf05241918f54af5039e2c4cf2ca2e139f60e45cc65595cdf54a67d92b6ac66fc0c5a290495ca57b07ef5750d05f57d87d0c228f7e4e15ad0ba0178730f951c697583481c66cbfcd48032544aa8d50908304bd81940308706 +SIG = 7464df0b67eb90b4b73ff082ad0d60ebfe0660dae97069b52c3727223bf70e29e48711a2bbb438f5f8d8a33bb9c48fe7b628fa8a542ff0b5ae36269d4007a505 + +SEED = da59bbc523404f07646add7908294977e46645bc8a38bad2809641a23de3b15a +PUB = b22c0f21aa1c2d45f4b2e56cc9b5e02f9e31a2eaa367ecb482f874cbd8e9fe34 +MESSAGE = 097106c3624d774dde2551e0c27e19504e6518cc86369ab26ff810969e7de24abc68b4b53f11d945d49ef078eb4f6ba6bf257ff7b608afdcb30a5c59a756fd77a6c1247f6f2a41100d99fc5206af3bcc6de1d3e4968e28fba0123f6045a1b54d693a42bdfa071b2b914b3c3c0c29b2593d07e8bdc86ca42ac555b7dcd9439df9fbd4bbec730d6327bfae4fc41ed498b4f04a0eb14cee608283aaa6e6aa46676bc88aed5d9939037aad4915661af94bb5f6e653a2cac123287073270e0b13fda1dd4871af6a92f992f539df881712fefb038540d41191123b6b3b4b6ff87ffc929a6be53c6cef02f48f2f0cf2fe64a45fd66025cc2d7ee55ebe2316c000855661165e2a5ba41afc2097957b6fe4c55221204b6fc1f317dd3ba13cac39924026bdb66be4542268875631d277f210107a33767f6d9596e25742d7a90ea791ea4bc9ee84a67fd328b80f791ede96d89663e937f0b755baa9d52bda210cee1db339ff1d3c4b000b653b9bde338049af84364e2177f80dd51e2a1672ee555d6317589f6f1d5abe6c2877358bf94b0b808ff857363fbfbe32e97337e4b8a8c221a9e75962a8dc9b5a3d7ca5f9c9b61c73c1469a72bd +SIG = 1472459cbbae2cf21ce44a15bae9fc85dca40b8182da7d52cbf56ed538d18e03477c140a3ddd0efba43c96aa92f5f9bcdf3481286ce762a7e2bd1e779ba99b0d + +SEED = 40ea82da41fd15b06ffeb99cd616dc6bc8c1b21477ea239466088e2849bf1016 +PUB = 5910e580bf412c31a87451d9ddf32b3ab713f9e4a22c590c641c14a5dfbbe0d7 +MESSAGE = a06c4e02b83ab7e191ad818cb8187b52a8da004fe838db333c4e02548db6bdf791444642e57fdbc8594e59d7023280bbae82986f399805434bb072c8a27a2dcd5aa62f065bc58b0621fcd365f6cdbf4d57d577d91150301fa48f182f87e8dca7ce45a7d64845ff434d1bab0534ccc83aa0974e88b38fc2508cefcbbc82135b73b384c80eccb8a09e2873cc07129021d81ce129a9df65e613410af950197dbf9afc28edc4e65c3e84da40d2ef841b886bc44719a5d59db2c6dc776401c895e2b3c83783d7817bba68baff59470d6015bba8d975f0eb712f3b8902912805523aa71c90499de689d31ae44e210b8446f2484727cc491b92a8e8b199d628e1df79a28c561e5a7d882e30787d08fb2d5196ba61196309b3bf0c5824a3548c700003fe9913befe12223150012685e90720e9ec6bc4db607425aec531c4fa36086d3b9be391a3f04635a8077a447a16a6fd89afbb9a72d0d355cb0b22d562f43f59d4e37128b3e2d906c8ae23d0aa599c70d3778a076c1a39728f1d6937bd48b978740850566138d34852b63075e89a8e2280edba6f4ee8f61511e9b768e95c78d197b693b109e88818b486a9dfdb74b4c5550acdfbd5 +SIG = d298fcc9a8ecb76a98d4a71dfb01d276ab2d9670a95bab34cf1d8364516d1ebdb23903460215307125afd09c758e981a452da95c0ac2c0b958c6917e6874190d + +SEED = 28bb81a17d4584754d52818cd0f1f21baa777e695844a15122ac05344dddc027 +PUB = d5f61d519944d13b84bfa7cd67cb0bea4ef2281efa461f22ade4ba882d11b252 +MESSAGE = 92e84c7a55b0bea03e17cfb65f7085ce3f445b1542bae997de5f092a24ff243380286d137091a598f35e6dae1a1c648f5a494c819dfb240652ff908381f32d70bc513100aca16fe7220295b1c71835f16d9310a9d27a04a980ace297d5af3f7cb7c78b24997ccb41f54ecbab507eb73ea6a3ed470e49590509f5d1e6032a2605db87f4a9b9ec91602583f14e2fe1bdb900ecb8971196b55c0d433489f26be9ca157cbd56572887ba859f39674a8e0ca08f2dbb0f27073551d0b1990685178b1ae9e7885499143d9d72c8571d11e0d85bf58df94e2a74d9b6846557f9125ca0944ce5718d2cbae1672ba02b847c17a6f6b445634d2f0175a75cf6883c62e5b521c57141f218b2fb0994b372a716c4a217434beab75740b8e91c622187d03c85da001e00247312a465225f5d6af232064a427d3018700ded774b9026777a5275fc04754606c86600297bf7b71aaff8b9a746677a3662f3750e81b50166f6237000051ffa15868defdf090057722ae229964a4ea085e0dbc04ce1997722c5bb65d2b47ecb746fd83a9f6a69c81545a9b502f5e76d3130c5afcb1c9af99d918740837ce89d7cd213fef2fd062ce8850f69659e4ad327 +SIG = 9ce45a07dbd28d3f6f1b35630a3fd56f1d548f84ffb1c6ae64b21498ae38e596916e77f79905e609fb1ae0da36138a80f242122167068092cc605796c5669e06 + +SEED = 24bfd4fc45d5093585678101cf563ab8011fd6430de155f2a425f0633ee3b7cd +PUB = 9cf5c5fc0ccfaeb28a08ba67707b18dc84ea0698ffbdbc169a09c28123e6c2ac +MESSAGE = ba54128f45be2001dbb060d5dcc47144997415d4294f6eba8dceba4f6cf2234683c4265f88032205296e9b27d68506232d57b688407648f87ceb342052bde9d0065542ff1715c942027e67482af4bc278ff71966fb3f62a2a5323cb1b4bae1e7b8fedcbc73ea05b4076421b0b4fae8bc3337416a17fe124e7ee465ebb38d8792306429d8279a1bd54c37bee8f9c85eebe3afd1f64489d4e53ac5f50657bb6ffb97120744b75d47c6226d5a9c9c264ee3e6a6ded05062ca1006669118454550010919c2633cf086950345e514af3843148e5c64352e69037dfe60d4a8eab3eb8cb54bd39af2f353d5ded2e2bc8b11c09f612e128c6efa41f6eb2c958087be34c6335a43005d11a9d3b5a529c2d1b0642f77afdd8c6b1d6fb2a9dcb65f42f4eca8ea9a054058be8613667610e3eed8d1df0739eca171954117989d1b12189ab57904aa960b0ca85541746385efa985be9d97b5a9029989a9c71498dfabdb813681f57e276b64db491b8f082a885145469a531b7f9f04ca0a2c2f8dff20ccb99c2861f54e5eafa962cc53eaf18d3d5e50d337af485f19975f05930700a8a7253f11f184130d0aee70969d96fe08f216951d9dced52388 +SIG = dc935b60fde44359af8f50ed7f919f483ce3f24e2320c55ba92f3e7617c19bfb54701903ff183b42cbedfef0875f42b12875d36a0aeec73ffd09509d92b28b0d + +SEED = 2fc2f9b2050ad7d139273e93e2a0451c7b5cce57599aa6b08d3edc5bb07590c8 +PUB = ffe5a17880d718cc7988c2fd9825b03b93450ac1deb8fbd1f1bf3b8f87805954 +MESSAGE = dc1297990cc027d56d1fee265c09bcf207a9583e6bab8d32478228e0bc305b9818154c338ceec34b04c4ade7ac61dcb09bfac8ade00d1f29de317060b8a4daf1987de409ca2c3fe4380088073ccf485e9a69516b5bbb4130f20be69b2dd6a9b465159cca1ac88b328b80c51b66af7f4c50f6228772f28734693ce4805a4163dff14b4d039811ee3fce65935444a6ea9a72d78b915c9c3b766c60b7e0329e43c9c57ede94b91525ce5a075a7297219772ef3c029649b586a95a73bbdf16d8fc20368de4ba44de1064be5826b376be31a86ca478a52efb98f1fa333157719bd6e0da80ed68d0efeafee5a13bcc3b457525258f1f7e031f7b403a461506927b1e6c7d4a0c8d84b5f3dd0eb8bdb13edc2b514a81d088eb077a52c8a831861feee8110e41a325dce206b2d67d25f90ef57e0fde709f3e5a39c04eed31e57c193b283e2da7279ee3f1eed482b3bbcd373902c1df811ac33e1de06429e8f8443f602019650bdc2ee8d7f650036a7a22b8fd88517511229c729a3269b3a3e8fc72b01b5a4b3e33f5272f3ad21629d08b1f717935e9e104add2f0f2033432bec82e2121d98c9c1a58e0daba25536a1be8e5088347f4a14e48d8e3 +SIG = 7aff162a3c0d28dff41715a974af07ecac2132fc18bc43a198fe664659050da19ae22758d52c9cbb94f1358bb02610a8a351c2116279e7245adf69675dfd360a + +SEED = 8afe33a0c08aa3487a97df9f01f05b23277df0bb7e4ce39522aec3d17816e467 +PUB = d004370e6edc34b3e8818667216f5b226b0ff75a58484c8616e1a866444cab57 +MESSAGE = 86fb741f1b9708929195031aa1645fb709a8ae323fff85e5470194452e11b7b1279194b5e2427ce23e1d749c3ddf910b017e4f2dff86dbe482c91bd994e8493f2e6824bba3bc7d7a845f217ae9760b3cd00226d9ff2616d452751a90c3d0d3c36d4ab4b2520f67288171bd3a34b2eacae8d44c1e153dda1f90bcd3595dad37713b8d340156ea90a4e135951ba7169ac175578b81e97a541ab9bfb76328798d7d631c14df2ad613e9c6e1147a0e84062ddba035859d46bade5fadd9b32b43dad483c6b8023b32391e51ef1520c68c6191326c494423080c623dc4ad0aa074748d826c29644c38986a77002f0cab9068e6c9ec73cc2e0c584b80e0bc375721f7a8fc35317a5e240e8c66092fb6305b012c70e17aeaff13386d5e28d06430ca585b0c85b274e7fcbb63e3423a982579e5a64a0262c41908e55dbe43dac1e5cc1bb7298be428720a12e3b072559ec2675d457aaf8f13252e28aad63c1513f5f239564d363c8505ffa4e50f6648c1cb82bba852bff0acb030cbe73f059dd87bbd7318c5586e708618a4f4c9f3bec3f4f07c609eebb24ba878c6bf1e4f2d0fd1450ab94e31755217786fb15182760ffbe5a267cbe998a4ff90a2 +SIG = 63a8aeac025f2dde9a73286e56c2d62dcb79a241ba0b2e2dbaca8752ed2fc8cc7ab8e6600b67645fb5e818a4e82c29180a6b2c3f58d099cb635ce52bdc157004 + +SEED = 6dc7ccf329378e8131b6defcd89370301068946336b0b762ac5ea51487dbd39e +PUB = 04e90d275e79df5f2b6ef4a31505aac05a69459baf2c581b3ce3db29f0f1fc14 +MESSAGE = 20cebbe98401ac8934c3e65a5738cb0ec0cdc75fdb09dc96312894b187c0a46d2c38f4855be3eeccdcdcc56d926a8c08ce6e748e2a858f53532e7e5fc5f7014c8c6f86310cc26efef30ae525a5157940ab535ed8e403112b08e35e2bb3dd91a9ae8f772d2aff37d8c40d2b5cc887a6f15050a0f5bcf0360c3a9d12d5918655edc3c13c86ba6f4a2fa3bfcd405ed38f871cf7dff0f75daf2c321084ee9fa81211adb105b25c2288f0f2f7f93ef656b2de190122e7a4bfd4a1bd9893a8485b509ff0bc46cc961051c1db5a12490c7e741922ccc0a665496470276f69c7b77098c1e670af6b9f851252996875eb8035a817fa9be07f2be0bbb12025e0565414c817e9421ac700373893862f24cb165f9a271a64fd2305c6672c46767f8f075be5d2d4079bfadc3956288b0215605311b5bf32f0037b7c5ad502013e82ae3419d9d8f39c545b5888f47106c94d5fd6084d26034a99f5dcbf26a84eb4ee149c62a0410d8c707b1a9b071f74ed23932585072ce6cbd33d4d54ee917916f5dfc64d26a498018438b455739345dd60ae0f4750625915cc829ab6822d6f05f6d2bda0a7bf5601e9a2ed6de960371d17e6f43709c9678ca743adfbdb45 +SIG = 04509db003a1a6ed3fbcec21ac44ec10cc06d79f2714960882170316275df80423a1c1a112d881fc24d2812526079058aa8b608bfc6b5e57632240c636d6eb00 + +SEED = ccae07d2a021fe3e6ee23836a711b97b04e0a441f169607572731cb08c269488 +PUB = a32265e5328a4f49cf06b467a98b9f9d5b997b85dfb7523ca6a0a1d627d32891 +MESSAGE = a4bf8297d0dc5e4c92bd00ad5b9c09b1238b503d619116ef74260378349a9282b41f3f4676a6215e3ce6d02238480a96043b2942b3feed12620b1fa97f7703b3eb683c1601bd2f51825c450df4fd1f33b0bf9c23c03223789e06e24cf136d3b557403a66981f4b777dcfe890d2ba96da4a4742aeeddd6a611d05fc215694a5d89a5de6760b1d9415155044c049cb02291a1514faa2e77d2ae33d44585bdac6365bf481d9c97833937eab636ed65742a0d5973b24d54089b2daf084d5414765105e4eca14aaadd1053338a8470505232e4ac633345c5cdee1e4653d1d93583af11854b1d9b65fc20281838c56df1148f35ccf9bfe2f3f80ab73f5b791cbed2d920644cf0316f0cb5d3662b9120647da56afbeb47a952953bc1a37de857e4b39fd92b632b85159f46cd05b6abc2338d4632d48e9a178860de8f65d9bc23f24507b7c5629e0bdaac067c476c9c3941d86f788944d744852a61da716f95f3b04f0783a562941bcdda439590fd186b2a8ebf19a5a7e4f4a3aaab7a87a434524fbc9799c9931eb8ce4e34e99b608cac94ab7e74495668df136185f487d9fbcb6605ad725345403ec57f3f6db364a87f38fea4b4c271552e9f2e4a1be +SIG = 0eec754105447f97d4a9cd246c7eede3fd069018f0d01a41dfabca3e90a741835ea4a9d682342267b250fc1c8c547c89632d9f689af536c7929004ded0d96f09 + +SEED = db5d5f41fddd6768709747ab8239bb4f42a31d34b4fa88824d94bf78d3149264 +PUB = 03858ce6b2d24079eead66ca0dfe772ecda9af4d46bc9b5edfdc286b95fe9716 +MESSAGE = 67ee03de45c3e7030db5246ee5b51bf298bba3e4d0934937fc12d9a629604c53c070e30d611999a9cddaf2d9acda6a9f67202b352369d48260eebce0e78e4d5ae54f677521f84a7be0017fab278b2b57275efc5fa57c617186fc1ba49edfbd3308634878d864f2da1583ca8d56ce9fae77c462039abc32d0539c0a60b7bbba5029e9329d275683d9c4ce77d0b908ade98b0e32b4420d9aee2cc10e4be922f9572582dd8967141c1d402e215f20aee0a890e2368e406dea11bd11177f2e038aa2f1a0dff51a128d955d5e5f8d5d0009aaa82440a96864d6c697f910d1df230f467f0e02a2e02bf9e45da95f255410cc5aab8d85f449a5de99aabd44fd763ec14629f3dbab1a247bffb7174648e43b9fb1eb0df5e4109b7a88e05512b20865bad39f9ea79d52f5188e7ca5194405bfb1a09727617f3f6c88192008edbc0c6585dbf261f149dffb593d42716e5a5777f5462beeb1e9a56a2c76e6cb735117cc1183a38d1e00b303d174aa9cf5c731b2c70edd79cc5dc96f4018f1d71d7198bbb7d134cd2ff8c15f9a04280db26a8fa9997eb86b133c022eda15d8ad5e77cc9f62615960bac2f9bbc3ebbd198f72c572b97156fa7fa229a98014e170 +SIG = 5b3d0da7102355486be4d69cfd65886c9d9c8738b293cafb23b2104bfdac8d7d01298eeb18fde3ded6491d41b419cc663752c4e67dbe8986833d20e4ef34180b + +SEED = 7f048dfcc2650cda59491d4ce2b2533aecc89cc4b336885194b7ad917db5cd14 +PUB = 08001b5d40958bcb270beea9baba3387e3a4b900fc42275657c6c691a2e264f2 +MESSAGE = 917519cdb33519680bcae04faa790771ce7d1397c345f1b03dd7625776f3f195809932618b1c64acd93ad000ead09654a33d14f748b46b67aae0ff12df3cc163280f47cedc16a8579034e49884296772ecbdbb71ca29c166233533c8de54012b412ca13cc258f7c5465d83422f524e4c05f806313478319fd143cf5088e69837697d3615d80a7fa7e7443fca65e753ac1b11d8eff3476636ae02d7a20f4b2388dad684002f5ce957caddd2053d0ed533132a81ca19bb080bd43be932028cb5f6b964f008b5b1c1c5993bc9b5485b22bbef701f0a26a3e675ea31122bbae91d864b54d895afdc79ca58d4fe449213353b149f3143b5144d747c5b4697479ae68528485384044aa2c99ba4b17b184e94982269bde2de0b17705d0bfc46d6906a90edefe89195de6bb8f3fb6a374186c7cd086d13d1b3525a3994dc8020e1a00554ac8a82d6047c5bff5e7f12450f4865da161e1a021fd9be8bd33a32bb54a4ddf874512e74b5cfd3fc3cd9ac11edd878433668e3fcc782b97b6d905adb0ebec42c9254ac90f35822c00f97ff3f0c7c39ed3c7cb3920f5608bb45838bb242a52a8637d7cecdcf489fa183b45451c6c9fcbbbf914f5f7e6b223bcb4675 +SIG = 583370971d24652ad213c42615911938fa9aa3d9b7196940e6eb08151200c7b6729d1eff8f4f0904074dab3ddda6af1e4e562b7d6220c1a562683beab268f80e + +SEED = 9feb3df88c494a99849c6fca194201477a2fa7564e29fb06cb44c1154e8cea3a +PUB = c35628ca6ee28ec1c239ddc5bba2a9e09e4846816b143c74dfa2aec1f62551b6 +MESSAGE = 95fb7581bd25ffd442c3ae38a19bea7349c7b7683ba6767e148f0afc15373f67c16d471781202e6da8054ed7fb9ee204cc0f63c210a670a5f9ced4294588196330d31b8e8392bef6b48fe3c92078fae11284b4c3ba20d937e2719de7bf67c00669ad23e61384ebdf8c6e60735428c084fe217fdb4709ccb6083fc0ae4a05273eef739023d34bb73f662dacdf110b6dbd3e74fc1491e8c96596075fae5c36aabe2a0a53052bf77c4462438063aa7bc0c50ab920c9eb288671560ca5ba7af44a53db2e2ff43ca56069ea5517cb214e76faa53dbda100003c4f6175414041be74de22ce155d2281b6f4035be39841afdb96dd89aa808e6865bae62d6bedd919d3e86510b9fa5fedd1977c4131b2b86e0f48d7215eb13d5498ca5d2368f81895ed855a527124657ec9539efe3b2499a3b0b338262f26340e22554c79f4fad2b4e419c70bc1a2107d206456b6368781be4b5e2c54da42d336040fb7ba49c32d752321adcd92986e78bedb226ceac50292089bb579027f702217745afe06a5be136b3998a3604c9ff2acd6fa3f3f71633d3102fbf03047c5486f84c4dc2447d863796383d55f08c981fd4dd7dc1cb72b8ba4435af6abdd74e6f6e6798f1ae2 +SIG = a1c2607835bec1a1d87872fd8ee488d0ae9ed23d49fd6786fc4996725e49b3262118babb4834877c7f78fbeac02df40ab091b8b420dc9951381e3bcda0670502 + +SEED = bff68955dd6ae0e8ba85ab0d0cdaf04a9f5befd5ef6014f49994a78363dc17f7 +PUB = 0ad9493af80b15f07a521ccd674fe9e5212a4a28c17c74f6605ffef78a4aed72 +MESSAGE = d8f5650aa3581c4d39bd1b8afc96c1ad7c4bf723426f9d7fabd1a5c8ac1d2fe54a971fac765e05af6e407d7269bab661b3432292a484f952c11095bbd20a15d77c41f8f3731a504d518ee10cd006c96ee57372de5bea348ec8ba159162170c63e970f1c7a3465a3d592e1d56c6540fbdb60228e340909646320c95f25698cd4896bdff58e2561e3b3d9a73b89747912a1cf467d63e41455fda77477f46fe6937bb0e79d92ccd52e82dba908a05a57c7ecf49554ab44c0b718e3bdd5fc0bf7070d9c58f860591c18bca8b3a9a148a06548e0f01602b1e6f686037c94ff732e155d52d5b0b44703b3d11163e3f56e3b9c1b86476e4dcbfc53fa05984e8c75dd21843cf96f9e494abbae7184aa42736633e3811aeff402b2fcb7d7f702e447241e22a58842fd6d0c03d33ff5b8c792200e173daa7b217e4b2f4433e6c020acce501b9323aa0241144434b08e9d2469139ff67342208900546200fd971a65dbd6db6c21e3ef9172abba1ea9ea2a249addf1a1eaa3ce11938b13e30913cd0dad491fcbb3285ea378b8ef9227f3fa80b586ecfeae137066f8448acdfb78d6d3e9ef4a6b362df4241ad9ae253b8e1597d656e000cea447a02fa4933328609bba0 +SIG = 9319eef740633ada1af0e137644c61fb3e11ba4b01d3c6f25392dc9367872a23be56310d312efcb91bdbab78a75e576ebe9081972415f562db41baf5e2338b07 + +SEED = 1ba919c066bb56e640c3335968e1d1b5bcc093383e2d7cf8b5fff5c61ec47a77 +PUB = 804c90bdc2b3618b01f075e041fa971b83c5b6cfa3b6b3974f3fa43599beacab +MESSAGE = 87c5c75d8ad07d52acd781d1bb95f78c70e21c2dd66f7aa44234152f98234d128358a8aee98ea903a77b441db1447ae6ff3432ddd4570f7f58036122c1fdcc93cb21573739c19ccaa411508e08de2606f3d8f2db89df6a44a46133d57018462627e22f57ef36d1de024de3d4ae41b752df4821155934b447b2effe512487521be0356832a74ce0e2d8301b79f93175e8b6b961b1df637d8acadc884543c6864f8025ececec7c6e4fe0fecfc40dcd95e8d6ab93ce25595384436b598b73c74b03d49ed5002c0f858cfd9d0df61ede937cc41659d6708b96fc5aaadee109e2a68846baf2c246dfcf3d27c28bd1371e35fc9412631442ee75f38c6e4958070a74f6e6a220f75c7280eab4737d97e37882f3624811675f16caf60cb944bce92e75884c56483c61f26b6371b1b51237621a06543eb4abea7becc4fc31dbb5475b3deb9bb3c8992387104830c6072afe1af244bf681a40329c9b37772b09c5e88e78f7dffbc04549ffa13b4144ddfa538fc4b3300540ad830215e25f11446d289f33122c2c880de3da71c453d7e88f7ca4ea3d1255e82f4bc9e5533dc401c33040e16940b2cf9cf21feaca1c2c6c33337cf75e1884b483bf801536d304089115a0 +SIG = 503eb7ed6de1b776c952f255bbd4bcfb0e48bc70c2cc2f1f72bf6881479040c47524ec542ae13f6005ca5016b58b736a50898dd0569d4d38ad298630d68adb0b + +SEED = 9b36247c17710e95261a7d702f57fe81f2971117a50c87920193b386d494ca97 +PUB = 29ae39f273e35fb3f611da091600650efbc4fc4d1e7b4c76aced5a83f82634f3 +MESSAGE = e8d9d53ba27e98edd55df3c6b245eacddc8a40e3efb007bc918ec5a869178a170bb4a635b7f8f742e37ad45d14a74344a6b522830a522106eb960daf192dc1e0fd70f16160e122516892d0e2abd0d4ae0f0d2e5adcc99ad55302e251b3e7a4d0cb33774a497049905c33de1fbbc1ad2b6c645295fe416b4d12b232efe0a33cd2ad8732eba1c3cb0eaeb0b2a57fa03ec567ca29210bf6ff9542a766f496fe68058aa983806cbe7ab10a47920bac8248818e54a41551c9a0959e8994cac60fc868ad48b5a24d5f24a7a5a3fd90b847e817ad3dd5d0d6f8de2d204f642483bd53585a92ef925415a9b38fbbf07fc0f35e707569cf488b205453ce5433eba6fde8781af72b52bfbcab85ead385d9d3175e21ad3373ad535cf0e357ed6b5383ef3829a9d5095b87dc9aadbe0ca7abadf33ec3b6ffd6eb94afdcc12e8d66a6fc05acf97368db0f69565dcd8fef4d1e49d7dd4ac053c218f5240c812d4ebba440dc54cacddb1c39329e5bd0c3c80dc3259a80f059f94679aa0794ca0115cc62af25e124cb8a9d4160eace6d22c7b1c44544f81142a19ebb02a9bda6429c50e783db4a07f0219e857c8d3c5655a582831c8eabc3f19b59ad8d2c714adeaf4039d5cf70 +SIG = 035970a672e93f87eb42cc396f6ea7e1b3dd5c5951572826d1075a15c2d7e454df195b51aae8dc61ef7ab895485f64e5989573d98a062e67ae7356fe5c9e3b0f + +SEED = 6fede7396c462033189acd23d2f9d02b68898d35f3a01a798fc24d488de93a78 +PUB = b34062060b2c20076a98fea939b3b3a50451a5f49f8351c0ad7591dbbebb130f +MESSAGE = 5abcc14b9d8578de08321de0d415e3d40e9de31e1888137475ce62bc6fbee8fdd03b9d47c7b88bbceb804444490bf6a3ccb7a273261e24004ea67cefa3d5d173576d01e38f76c1e0e515083c97e79914acf2be4160ef9360bbe986b36e9ff93346b0e70691d934e47f8a503fa933ab2a50426947cda8e810c9ebe3b36982f09aee6092739fa2358b613c7f129db0dcbe368bee52f2f7f1dfe3d2434605b5afcf256071717d924fd0803bbd0dd1f9555ce834dac781df4cc7aa19e7f11da9fb99cb9e6b9e1e6fb4f7e8dcb2236c28aeb6cbc55a130e03c1b17a991cca1b794e6c13732d5b0a66f6eba860ecb98555aa4c218d112b116bce238295de142741f687be0b2487f58ffc5c12a0a519f1e23793242ef857ed398a20699d4351453fc2f092762abde34f4da2dbe0ce2aabaf6bc4c0159f3fe1aea16a036f7eaecd629538f3e0eed83c9a4dc1abc238f90daaf489fd61b34d937b6f4607a788baa82061943dbab26c1d384d8d49f99348800bf361f871f5d6cda18f689918cec31ad158f1863d13ffac5405c162c32de06e32994cc4106f95bb4fffdbefe7d629ec7797394609fdbfeadb46927370a11fb38471540f951b93c6eb238668dc006c21660ba2 +SIG = 88a83e2012d209ca03b8ebf6de5bb7ef4ccb5e3df5cac78954aa694930e4de82544ef5083c4892db9f05d77bf63f4fdfce15a4d1c3f85bae8077062bec0e7b07 + +SEED = d559580134ab050aca446ea7750ef6b371d92d7645ec7635fe7851100bc4e51e +PUB = de5020cd21a8b32339decbedff24664d9580326327aedf09c5ec6b3fe5405226 +MESSAGE = 6842e3190a110eee96c507d4bcb4c548c3a0ed7b1a8ed77dd93b38613b23c73e830b205e62651921ad8296b08d1e1008ad78f2996e3c7f38032e467cffecd77b8525e243cec021f85296afd545d7be1a62568bb0cfcdb90d614ed798bfb7efc655326816a61082251df01613aac88efcea1e0ea2961b8f921ebe1558dee83374a0113a78c55857ce2055bb2c48badbd3d8f4cb19734d00d0604b619073020d72a99a1923e6160a09946567fd4bda66442ef5a7360786d178dae44922f350ce2edc6af73d1bd80dc03ec3ca7005f4109d10c6d4f7d8fa61735110f8dbaedf91a0bad7d7fb5c04d706373c15c645063ff4b4fbd2d559b0afad432d4c496cd8abfea286fa675dc076726ec522b3a3c2f47aecc539f48a792169c4cc8cd41cd2cb6b63ddbc19373ac9691c2bc2f78f22603d5513715a16d4574e7acc4bea6dcd8ca7f19865a49d3664a210dfad290774b10b7188f255b3be4dc8fa86f8da3f73a4e7c929951df30fe66a17c8cee23e4f2ed2063f0b02ab40372cbe54b9a708df7c48a06566d39b19434c6c766987b3ebb00675f44c4b3c1e9f4504e7a9270589c0d0f4cb734235a58ef074cf9decf3601aeeca9f1d8e356cb2db5fce79cbc36143f34b +SIG = 6fcb1ac9290ab767d59b598c9a24ecdb6c05bb023ec36014a40d908ef0dc378a4528b3760d889a79174e21cae35df45d427ba6ea812bddca16e35a69b5e79f0a + +SEED = 9d4ce975547876636fea25437c2880c9aa8ee6b270d1b2da197c8d7f95e7dccc +PUB = bde4993c030477c35890aae82bb5087e914e64b94ffc64e2d7a5a7c919e2d902 +MESSAGE = ea0fa32a4a288811301b9ee533fa351fdfbf6bc1d0555a7402767a3a9198558f74bba7031857995b9f326226f1dd5df107b06342203eb8d40c5f1dc95b4f3f88975aa24af8769e2670c46671bebb7a0f1b7568729aee477e8988af9c749f3202708171fd94b337ae67ed21a6c44174014b0b0eb5ba71c277978d488c24c4a7841309846b4e30a4fbbcfc45078d7e14014114b1ac64f7c33c9ac25ea5626c2c819fbaa2a4de8a2bf5f1365d6b70407e8094f99197ce1f0c35e11a98fbe372414ea2064a3a12d1cd5c8df8fc0e79f5b770b58f477f91976ca0139895120e246baab5a026f2d39c687dc0788334b5c626d52cdebe05eaf30864b413eebdc5581ef00d439276e52f479c9c05b116395826b60490b3ce700cc0027f61e46ca2f6fbc2c9de2e800806550afb06d4a08eac7a758e24582a4d6d428b433d365fc31d4444607afb64f15e370794005a3a2244e666d5d4c38ad2009c769a51cdbf738d235942f412d07feeb73b3657d0b0c91cb5940bad6a706e14edcdc34225b1c1f38b1abecb2adcaf819155a94fe190fd556822d559d9c470854d3a43bfb868dadd6e443d98ee87e4d8284f5cf3a6dafaf295b902836c640511e610ae7d0cb1b1d3d6079fe6 +SIG = be17444cd465a87a971df84eb102f9c7a626a7c4ff7aea51d32c81353d5dbc07393ca03db897d1ff09945c4d91d98c9d91acbdc7cc7f34144d4d69eb04d81f0c + +SEED = 0273868232f5be48592cfa05134e8d5554ed1f9a57bc7e3982a330c57e5a7f3a +PUB = f172208782db66d466cbe4f4417f6fc477b7349f2a98db56c03a47227546bc5a +MESSAGE = f7a1d4614cc64a3bc48f00c6276304f34d4dfd15e0617b93ccef126c5c638c9d9953aabb7df42df4e0aaa7eac96a4b38c7ba758d860c90d05e3d14e479e545f319b0e5a85ad8f0991b43d6e49c24fa060e3e5df95c98d9451ab833e12aa97f404611bba359496265a6db11917d0da5c6a702d0b102de36dd0c98df5b54806ce626bb96374475f68a6060eb350a7d2aae3204b3dfdf9f1e31be81f7170f8a1b9385413ff8f6881e10c1e8da4c88afb50639ab44887aca2abeecedf110d2958c13fd3390d1b96a762d16ce196920ce85f6c415bed545b1445302a6f001eb8d00e97c751887868d481a0b1e4dfa04b6f761086ee8e697b019e017104bafb98fca242e334c6f18f1db5b6f295f05c559361c6831dabc42c2110703f9d1f64e12ddf26a8679854e9f8ef8479e1f12c35447aac02ea7f242e58632cf2fd063fe665070445b80f3dc6a3303bba96e05fa88eec201c5c2d00ca81b8da6969d0a4dd0483b3477d325a71facd6fa2209b48cb4f6525da73c9c05b2d9789b01448e1527e56a09a9bc6136d9837243c2077b925bbb933f8fb1daac963398c5802aeda3bbca8ae3b8f4a9a871f7ea8e2c0ce898c566217b5c06ff55ff9f4fe78398ae7973641eafb521 +SIG = 15e8d8dc7d5d25359d6a10d04ee41918a9c9df4c87be269fa832434d5301db022481bfa395a3e3466f9554ceee0532a8183a0d0550e7d1abe99fc694c6ff9301 + +SEED = 336a83b55abf4c02e25e540329b5275843c2ecb8df69395b5a5e241bd0d8c10d +PUB = dd60569844570c9f0a82643f446478b5ac6fc542214231a7ca656a92b5fdaa54 +MESSAGE = 9afee8ab482010e29264b406d9b49453d1ce6d550939072182863e4665284ab05d86258e0623b18754c4785238f697f075adfb9e1d31a42e85934ec071ddddecc2e6c2f61334a79526788b4952190716906dde17fba556eea4c8b59727514f6f5615a19ca36da358fae6a6c54f7f4b7a929e31ba7cc71bde7882fa9ffd87300136409caf3ca64eefea616aed58da5dfbf28b668ec1cccffcef6e2e14f8109e9cbf76cfa414f91ac00f48e93eada385dd3d5c16e1a39ea3dd55c761fca361b428f516c05e694fe5c3c345cd94457187a8e604b200a1a0f937ae89f4d6b5421dffcf7ca15f2e2c25378a4113233f7613f4570aa4b909a9135eae4c7b9ead458007ae17126a11d145258af9563db2f7e8925431878b0eeca8affc01ac5913bf5bac4fa3a857c54cc8906d6af77de6b9326b6506151099e87e99b1e819c6fbe082688f34b803d588e416d853169765d62f7e0bdf72c5cd66669a0335562336735e7efb734a2fada327f858bec602d0da08eba4479e7f6dc4def6e4ebdbb730ee91a33445cadc9df52c825ad36149cefbc51ab102033530814bafa7e87961b06367ff896f08ae334a9b1aad703da686706c11a04943ea75e12992dcf6106e372077cd0311029f +SIG = d263f56d59cb9b2896a947267c2ed78a945bac5abdbf3c14dc3ad092b2308cb9315c464942a0a20b2024511d766e85c936499a149cd0bbb209150a1643265200 + +SEED = 88409172618b490393db27d960171cbc187eaf4dd8b320b3d2f824980043718f +PUB = ce2e7c5839ef5632a123dc373dc14b1f0505766e9675407604ca7cf54e8d44b2 +MESSAGE = fb3e82f11bc286267e123817ad8864e077d9f7a8e7a163ac7eeaf93d55dd111de8083b66b53ce7bc771fc5071a2d7ac2f85d6fc6adcfcec446e16aa1046df37209ad7a29cf9665b439a54d6f8d942f89bdaa56f2f11260cc95993038b0e8fbdb3214f142e6c90b61a1d2b142076206af30ac35784a6dc15a1e79251a8c7731a1c53978038f8d76d70c6c1cdf529fbdb84d1507dcffdd42873dfa6a8fe6bd6f7fd29c80e4b2f933d2b6c9e62c9457e665472655059b63b618e2a9a8e5b9e41c3646173a892b8e6d4bcad6a62a6fccd3455890b58ec2681a95cc9776a9fce83c54a9ef312a331959c7ef3f79ee576eb7b79469c9234b1eaef609884708fe4bb0efac662da871ba61ddabb3fcbdeb8f635657dd9a5d7311e639a824858b9a9868d3f9384da612c7f2e771a46bd2624c99ea2b6ccbca996c1d9c375554f2a551619ce6d5e6e4d6b844a4dbea83ba732331fcf46572c1fb0e257ce1041b265df02e690a92814bbf3b5ecac69ee998766a02b0d2f908b3c15f952699616f2c07d589198989e6056c16319aab6cf8771902c078046a88b2570c13bc5edeba2ed1e3ba131daf94e6891862bb3de7d1063fe405307a5cd975693e9d58e17c690eeef4a2603cafc68c2b +SIG = 93b6e29d63945d5c427387d006c7f0b01956a95fc0436ed42b46d0f17b5bb193ea8c0ebbf3d6d13bb539e35c91f3f0f9fa3414a0223c9060bac83653c6fcd906 + +SEED = e571189b5cd9e788302de3919d850c227dcbb615022e568bdaeb37ac5b2939c5 +PUB = edda890f42dd5fbc7316a5fadfbec38556f23f51b8efd2625437f6b5069f1ee5 +MESSAGE = b62c867ad6227435bfa6dab830684e38d196e1f861aade0fd6a7699b6d60901fefb2d799c35c6f3d8bb94deee834403981866bab84946ae9476c75e9f1d3602b42cb2db437bff33a775822f0d6a257d4b75400eba5b8abb314b71fc6b46f8a34e861a9a62abf33de8482f63f9d7169e773a2dcebee03705dac117fd1499b68e7414f51ff9437f253a1d9901ec3b0bba86965a19383655487b58010f804909de1ffb2212c0252ddd9bf2a56ac46bd59c0c34dd59e46598b6babd4e5f3fffde55e48dab0398c22af9e26baddf77275e5f017b35a9b8f8435f9631936b391cb95d7adf35d1d8545a0fd066412d508967bbe9a20245a269e3be2777117e75fbac170dba352be69b254d353b3b2cb3b7e21b721aa9fe044f8916b4b2a6f8c28f8abe66ac92b91323ac73afd93dfbeeaeef26d19bd9f67e99d48cd2ad2d3e55e45d24d54b50f44a39b90e242ebe9b42bebdb230c470bdfde1bc7721c3120008477393dcc2e15fd22b251feb0e18b02883c078aee4fb760655a671dc7b8aadb9a562420a3c2efa2d342e1e0099d951b42242984f594e6914fe282b1ee128735984ef93a669e6ecba26c9fcb9f09f09256645617f1392d35908917cb8d29e0897c7503cddd5de1959686 +SIG = 7f797a31715d7c356f8f1f783700aa9974bb936d661661ad968c7cde1ac9e767be56a2dd49b9230e90110c67c0ed187cb7e75c3053ece844984d296f0d85cb07 + +SEED = 371744ab63c115613929a343709bb019b7357dff72d2a149f1d0f71d3a201efe +PUB = e58abfad4a13859f0acb05d0e47d59638f7b1b4936100b988d61e6e70e22667d +MESSAGE = c219de1e8d7ad8df08c49377396fe7c1f2d57bd2170633a00d708faadee180ceba92849a7778506cbb366875bf9124701894cecdb3385147d0671843922a649aff7c435eb5a9c74927503072d0067978716dc80be1545a2dbf5a1c38536e12bd7720c1965d3803a4e8aa55765192a13b705ca1059ded0e806362fc5bbe6c76a1c9674bb853790f7e90af00753e00436da48cd082ead64fddb689890162082f8482924f33acd604640f69927352b43f64402d27a883fa6b72aa70d241dffaa1701a25cf1079358260793875f76a2978e9f9f9d68634eb3f5f01bde1ce49e5921252f949f082795e4eafed7be5b49a9f95edbb4a13532e3f3b3be62e2652231253a20c1d5477e8f4bc57ed76fa19eaf03a11bba429b6496ce76246170e043bc14f2d2f703d968f1deb09388715c37cb4752da8d464e348e0313c8993e24133a7c545284e3c9c907d01b260c4883f9cb3e3dc5b6f7fb6d75536365f2132eaeddab570e7273afac0bff5c9fc0b820f2078e0336052e1fe7bdec86674d0998ec78da1c3f34751f886727695f35eca1304b14734766ab05c1186306ded9db3eef65d3c0456cdae8181afee04b296c6722a88c7ef3088d26f7fe74bc89cf5285c688f027b7e68600486af +SIG = 5eae4ac72af0174ab256527b7cd337a0e5482e615af068db21dae35a64640742604df73fd4ca02ed9515a5608d73195230fadca7b426f02a2fbfd02061af3600 + +SEED = 498b6ee6492d53231b3532d193578ba75d6a894e2e530034e21ab8ad8d2c0d1f +PUB = d124665b28facd2d17946a04dfe3d129a4561a2b24eb326d84b62b422e44dbcf +MESSAGE = 0498a59b87cdae28695547e10863bce804d97de0ac8008f3d5fb652c1757419fdc9e0f9736f4c59a34f21cfc74599fa788fcc10c6730c7df8c3d2c1b6a786d1230b65585719d1cb5c490359b94435d6dd671f54d6e9a19b9b5aaad7e0f233f8797df997828d88cd92ef089ef7dbf1e95277894a2f7c2fd0c8e4dfdfa6d3d14589ff01916dbf9ddd811c2f5e01e94298990a145a6cfc26895614c7c963fef308a4e3856c32dd3e359bc56d2cca496ad199ff1a568d6430ac5cd208e0e2d07803ca523e0d813ad3733ab50bdcadcb988aee758ea50439bf38ee649997604f151c602c82900a8205d8f6f670c8684bf5abb5f75ff29a37eb9bf8105199fbbfb4707e162e64c715270f853e648b0aa26fea0f6db562896bf424a9ffcb292fae85b76cefb8bd5a4b3ce1fb39bd2a50d0c9e6d933e167ff629b8a494f2a9b774eb303c781ea02aff1a8afadc2465cc616968015ed6a5a33c3120b945ed5351981e32fb9fb96b2212dcf8fe9ac56e3cf41dc524f800631020b025919178ce074eef078d6842012a276efa628db54058d1eb5b5b705f1e1818d2df5164baabb0c61956ecdb8c706e562fc4fd64052870530ae425b221f89dd6f90dab882e763e7a7ffa141bbaa8bf7a3f21b0 +SIG = 112f5c6d3bcb3dd99346d32ad69cbfac3e653bef29c68a33f43231f66cea1d0a195427d6e10c0e77c5d55fe2794287ee32e5e22bafbbd8052ad3606b90f94505 + +SEED = cefcfcd1cff4d8910749279131830b1da19dfc5245f78ca68b8c3c1b622b4551 +PUB = 1d394abd1b4ed1aedf966a60efd3ff882140a7e56b428374ecb443289a9c7f00 +MESSAGE = 5ec94ed06fc1257ae9c183ce56271207aca37a23fdb4b0e74ac9307a1bb112e05ed5a5d047c93109e2e59477b03378346422de36714c2961bb9736a513ca3671c603a68c2be7317b1b52a076dae2aff7bc88cd5eea0aa268faaadae539c938bb4fd4b6069b1945eb6af0c9e6c8aa5ee4a4af37e90c67e248e8d27bd7f9589c4d30e905651baf45364fa049957ea5d9b7146ca68204e5e973d0f1c91a1c4bded66115028a71114f0f4f851bd115faeb954e3f71a01470b2481a0098d99f9d74898c8ba0287cc7834155214173d1fcbafcfe9b08250384439476055883833816c9524cfd5744aaa259db7ebd3a6aa20b5a6546dadefd140668eb0eccb5f668db9fc62983df980850c9d19882a17550d5dca3542cd36003a0d03cffb04575a3e8e1d07015c7b30eca9115cd2b72e46dfddf6a4dda1faa2dbdc89000d433f6ec9adc46146d939f32121b99b28983d98b9dde8c3f6e5779f2b0700cb023db13de656e0aed1da2d5c6ba2652343648ad420f6ab9e55a97482a1a22b3bc2ee598629abad9547edb5ff790990564bd871f81b24b12f2bf8dbdfe7a88375fad9ccbd9fc0ba1d3bba5e3c4813c18a0348aad83fb1b82689054d99b4600dd1760d0dcce44757467bec1946406d530 +SIG = 7d83ff66ec79307b1c0c093fda3968a96cf6044f5c802888584018845e7caf2a135ac6f1677e84d22e458e227e4f930209919bc11b12f7aaf2b8c94302d64200 + +SEED = d107cf26f527db71a206e41d17955321013225bb20f93e12df3dc7399e720ca3 +PUB = 186bf453c95dc0a2fd589a78e2c80040b3f6ddf9a6f8681d146036cf2146e8fc +MESSAGE = 78eb9e13789928a74f360141728ede98389685c836b91fafbf1a7e8c19cfbe21bd3c3d6c6ed83c409ef693f1d735da3fa466497e19f38e30fba2a1023785459070e6e92c1cb7c9bd0c9ba61220157866c3bed2b01e6e6b9b8dd3f0c47c02f181346a0a9b9b5d3d7e18a94d6956855e16e8eaaaab71b10302f35bd8fb1f9b5847304160324926645b0582c2f2f1533a24281461514241db2850ef31c5763b2e3d4fb18fc6d8c1d7e52f7c13392c17e27019ff60008e431f1714370bc0efd9452a61f5c56488d91a185037f1f647f72fa785010d5d78f0a11587ccf66b8088e0e635fff3774193b2edeffd92d6e8a0321128ae64cdb862e631e2ee5ba0da44bbd589dc392b5a113b86a727a8ddb698a334cc668b39b1cde199b88837ca5f00f553f89c622834273641d39bc10c6a24e1eb42587542f03fc1627524ed6b749391f11028706c42364425b2caf20180e1b802c744b49b7bcd9bf7b15c23a0bf1c6965960d341554e1966b6ef82fcfbbe41d1e09d741e309254446777f13c29a67b8bdebc5f7f04d160d60e332e3d0441a0f2f7b192c3e2bdf6dadec2a424f88669806236ee04dea692bd8bb6f91ca0682ece349142575358b9b7be70600b3cb81e1456ba0799fdc01ffd68623 +SIG = 8071d97f324f10358f13ac8c61d424b4f300dd0419571c39e40d99aea5f03140e62ab4c97127ab33e98269966ae1d4557e459bf7f597b313f351a20122f0660e + +SEED = af7ea8e41c8937a4ec475ad81371a171d3d0f9fd7519a04c751ed4ad8ff8fef9 +PUB = 15dfc71585bac71ef20f374987c555a3f2f07d6b9c787066c10d63cf06e02ab0 +MESSAGE = 05f2263f0245ecb9faeb14e57aca436668308c8125df3116c4ee20501d0cde701b366e2b50a1c5edf484144ce16bfb1f7d26dc4275ea9732e264ba4d4a362b40275ba47377dbc332cb65e2f4c8853894aa878a4c175dc5b3b2a757ff3c8d7de660973b89dadf076e2e4fc76239b7bc752a229d44e000ceb667104cb0746bfcf59d69603ae7fc1bcf11d2e33f61dc497ec1b0bd5e4f1dbef435f2f291f30b00a85e833946c8b10484e4abd7d60bdbb1fe6dff5807a53bb89382153013b70ca08efc91b7e9fc5b5dbbb6af123b57be2e140fc471a45d89fa8284cc27e0a1fe771f55598bbdcf068d506dad0a592179ceca39ee9526f9e4fe47bf2bb14fb1486a677d4d7b99a520545676a0f1fa809049aa2414ae7b817d9a036e5c157886e8341d4e819c092a3b48b3606b03acb727c6c2217d0af30121546a94af6b49caa2a8c9b1786fa0c2a524ec7a023e924b5f8a89a53780c7f8781c5b8e869430caa0e6d0437967e3aed44f45c901cbcf1026fbbd4e3dd9a091ecf8b34f7dd5038e543dc7eb6ad5494efb145cf63ec0d355bb8e172f455d8a6b13dacaaddbc56e47de3cf762a1a738ef092f1436680467b5cd82e9e36e2d2b6842b3bd5dce77180ddaf0b643378e698599dd47f5cdbb +SIG = c0f1739167274bf91831c74beb645af790459b28bb3f21325365130f409acb66df1d223759a9758e08fd7253737484e285a6fb47404abe2eba5ef249fd025c0a + +SEED = 0c57cbfcebde10ede02d1cb01df360d41f2e66a50443d58b5d4f0828c9a18bb7 +PUB = c4d761ba189971b9462c61bf46a765f88e2ecaa5bf2211220afb00ac657f7ce5 +MESSAGE = 337703243ab5b4e4d3481ee8dd1f4494507174412658a93988b5c30403a7b7ed8522ceb46fa1ee02753a874ef0675d397c575da0b08caa8cee3393784d0f0db8459837af90b9056df4e38e417f3ad2eb1a100ef207ce2ca6c610018021661e307099f2b7c4ae875991140bdd3f0f99ad2c5d55aacb84cc1cdcd579e08072b6951fd45ed289ac9ff7f0986ac88a4fbb9dc9203d9baf180c90edf937258c9d0a6d48e220f72d250c7f2c777eaa7fb9fa11d50a5798772f9fd976b00599f1f0276f3a2e4d988ae92125467a8dedb7a16f9e3a56e8d00662b3eb67a35b9b60e73bd935077ee238df8f6e833b9a5523386826c1f2917b1c3ec98e0a5fde89c48b1d446da5d0c885fef0e374bff30a997c7bafd5e743c85d0c6aaa6ef10a061211a2327c6d84eb747a56e9bf60fcd5b553b798834d0c5ccadb9d4b54e7237d12c679c193a287bb2f511cd4ee2a2d8549b44b21c11fbe5723381c6c5f784687fd90cebc5b495af9e414f2961b06a1c8433b9aa3292bcff4241c227167f8d1de054ba33ad81da3eb3ec6e40a6e26854af349540171b75d75fb9a8d12937827fd594d317b7a8d9f1c2fcabda56375568c3e9e514c2efffc3878363dcfad9fd95436b022e8772a88cb71e803bf90381962 +SIG = 8af7bbe01b8ab93951d16fca05a9c967d1c52c974bea151ea72e4cebaa20cc783bb61d8d69385cac5bc6d72dbd162beef1fcb5dd0e0a08b48ca0b9f6d9a9880c + +SEED = fe7172278364194bcfefb4783142b79f59d5fd978b1e47c314d78d4cb3f61c8a +PUB = 2e82cce47910c7e2a79bc1f419dc3c3df54f23291fc8193e8258ccd2fd38d548 +MESSAGE = 23509451a059969f2b4bdfcee5388957e9456d1fc0cd857e4f4d3c25a4155d5ee91c2053d558062eea6827950de863bc9c3df9672cde8ba741744ebbddb45ec1f4284570fd0aacd07ea58c581be2afc95ae444e678edc2a02439f387cec982ea3a44814a8a302bb3bfe8228d58de039debdf7c2a7eddb4e71ca474f94f7e2bd89dc65b1610733c91fff89bd499f40154a6198fdf5ec7ad3722d925b292196c429499075be0c5b6da9c090c0791a7019eb5e7366be6ce58ab2f04fecd9127c42718047bf47030691521312c0877aa3f36cc5fbc9caae0fde3945d2a868ee2502a3833208eb850a163cfcbf6da9ee6ad9fe067fe241986fe4436d6ae4edc61561938e2a33f4a33db63f69d3f1a8850ed40028869164103488fb795cd82ca067fe1b4897caa49a7ca9a80f3a8151fd13bbb7ff350e8579f565dc1c4a9ca938d27b15b3f858ef45d3dd78b2c358635356315f55a97528ecfec5d11a5b721503107faa406c17034e601474b3b60cf48692e269261158fc353d4df4274381357790b7756087b00cc79e3b9d28a3f2439febf199e64a8b37c91b5a4334e3354e8faf3a361e856c54bdaa43bfdcd6ee6c9f9679588f6069950832348aacba2bfeebacaa2071ddc7d77898ef0f68793cd25 +SIG = f6c2a4296b9a3407c6d7a5679dae8666b503d1a17eacf71df493791b8ff0c0aa8eed36b327a29ab7828f46f22de868b628b1cfd501e8599fa31693b15f61080f + +SEED = a951e4e6ba9f1f0b354831c986942448faede37e11b0f247da2706dceef73ac7 +PUB = 30362014974bf75c8495c2e271e713d57384384d0a5da88edeea79279c0c58ec +MESSAGE = 20577dcac89174885eedb062489cd512fa72863ec5438e31e95878b75ce2772aee6290a0ba3c8f642c1d0ef55da8d5bc1484f83bb9876c7a8c0b6b609b94d112a06fc83ce8d2c1e08ed6c735e57b244aad6ecf7075363d565ba47865695c8423510909e0a3db4b61ed7aa67a7471331e83a0c58b8220a6245f65661549c1a12d4c0d50c326fb94917cbd07be51e83fe8bb3e46ca01b0a260daaf1d6abe3703d6a925113bb4d57ea1a48b4c7dbdaa03eea814a4b5f02e1dfb545cc623fe17a3bb18e4373f5f7ec2fb5217d23e4fed54a772e11323e730aad7efca8c464400e7679055fcc125a876ef7b8b9de186e229a7abf191d0c56d91815f67872e957bfbc7634aac403576a58f427bdbb30e8c4b6fc6c447741024ebb503a5a9025124a4887f825a43ee940f210a1bd5ae4f6732d60f95f2b83201c4c6dfe279412d7502a5211f8f48f800db30fc3776c4ed3a38bb4634822c98a6d6dd3233be60e42cca45a3163cc84e9e8da647c0711bc4c6ccd65aa1e972c07404d103e74bcc31a7e2c3eea5ac9257ab428947ab3dd3fb153d90694a4073373c4dd9ceb131154fe877473fd996f424f33e316e4eb02b8c7513be6998e516cbba54d94cd0a435e0ffcc2c0a8ef72b630ec24781066aa5efb9 +SIG = 0278c86a15208d9be5b1e1574761861b8af72ae08d40cdcbec354e65a9c3d0a06b5fcbb297d09bef397462395986c3093eeb22644c003c3078178cdf674e990a + +SEED = 38a9b2d49ba8b82f301a5772cea0efc2218455c8b218b22cbaa2aad2d7ad3b35 +PUB = 9df5ea1f78f810a521774602bbba4942f0459238966c8bcd21900afbf3d84293 +MESSAGE = 1778167c49b3a44d4a5ba838b7388553b1e13d36ea4f86d30242e1a822a3bbaff5cea63e2ae2a4635be236fef2b8135d14fb621c0bb773c9c17753f80926eb55d0f115bd09a885d844b818c9f04489a331bb5e032b8e58cda36949c5a8d08b55bb8de965e1f90d3b9cfeecfc6ad9a4ee5cb4047e9450acdc64640166a8c069ea849aebddac1ae4afec91ddd17fa5553fa87c56f7e51ec1cd6b5cc23351d057a4ce4a8923c8ae6ac7a8afdcc0881c0e74ebb024ef7296162cb93c68e50bbb074e651ac87dac9ea59d4c3fbf0fe379f3e97a24566ecae54303bcfb6f0cc9f15f6639430e66b19a427849fdfff833df02689e9de44006c903c559183459b9f4a97f54a0f2a28df7b0e9deeda8239d7b516977f5e7d6971b4502e9885f750af8d1a6669e25e77d5f327c77c87a86e0a1872bc96a76060f5f8a0c40cc973bfc7fe6ed9bca78f884e6a2828b94d489d32a0fd337e69db83fb8789afd4e8ef54c22a78c2587468b9ae071bae3b202d3183ad5f0f8e842e5a8de85bfff49e03c8381bca7fd4278ddccaf0134fb5593a395a77a5cbd434593bc4ad0ff4b8400ec674c4ecaf1d57754be0cb2fa9a6441a9abad7b42197ad82e50827e4a4245573a8f0ef87f58228a2867f4b3b834b6635037940a +SIG = e19e62ac539a9ca251d12d4c71055b0a3f581d19f2682e672404c78ac1f12bbefc91519276a5cbe16f520cf7a7f687a240f0329157c59f50026a58dcdc50fc08 + +SEED = 9a1717873689a03c112dd6b4d76ae73b89b416a598ceec209e27961e7bb1ee8a +PUB = eecad1e0e4b863291881a8c241db9ccfffe4e55d8b5a42f307b4436acd0649a6 +MESSAGE = e26580470901a07ab0931aa23829802ce04da59fdc2f773bc567f1e65b4f2e2d4a1a6aec1f54158adfce9b099790b503a13d22097ae23ebccf923f3bb1986d6e49111a8cf0d4eb8236bfe0d7c9e93a5efc7feb8e6a9cd1b8d921efa21e449ff49e06c1ccfea31f93e033c3c2a54ddb0f653a09fbd18a70b56315f193e7be56e5168f59563821d4bc3bbb0eaa2048286bbeee5aa3f3e7536cf2b750fd322602bb3847ceca39b75474322d76b1de80fa2eadba152d6f8f020d4d931c53f0a2801224d35deb6ec13b014873e689903607de96d9b7a743a887d2f48daf2ed2eefb202abf6082796981123b966e936dcf3483e2d24d694ecb865fbeb6969f347027fb8b175d24a4c045c0bb4ab5e02ddcbe77d4756c46d137b094473a02307a108340acad9d03bae8403af199cb75cae3162f3815813cc68bf2a5e499e594921149f3bbd214da5137e756521559dc80d9a4b74a0f4943022c7cd5fca42315e0bceeae9069615ce67a04382412313a31d67b346c329ad82e742c0a6ce0a6a02454c113e52022f3cc03fda691ebdfe14c53c8ce5ca9b932ca1a386e3eb4e90a4dc6e8ad8533b5af1aaef5003128655ca64f67fcd97c6ac803002404900bc0fae98463bcc31409f9981748789ade2d07783bc32b +SIG = 1af8be095538965800d8eff6d723d028d65d0e9c6eb5e9d125bb3b1783f11ef7079a49a807e27ef1260be26a3b231d03b2ae151e49f6f189f15b1c83eab01c02 + +SEED = 43bd924db8156008c6b3994a8130d427d514db8a613b84dfb0b8e0de6ac30676 +PUB = 1b3461c269d5b0062d5df6fa654a2586f647a0684218a06e5e2f7badfb394131 +MESSAGE = 6184e6480c42e96cc877269b16371545ff9523c45ea88e76a1348c68ae7f318b088fe4610928239185b6b55bfa0f43644c4a4c97c56ed77d08b1f4aad2f4aa069994abeca96b7bf81b8064ea4350d8a8b02297a51308b61c57c8f1873c6f97007aca3180429e730a6643f28733547bcf7b9adfe327e85736bd04af7f1d9f4fb84a7f3affdf4e22b574ecb4bc8836b10b8453aeaa5c1bf132248b826cc5230f75e075fac9f037561136e00643d08253e7ad652f702c0d15b6d7d48aa6f8e9b5f5cc146e3f156fb2522751c3710041bd922f37a50377e028b0c4e4bc3465d7c84af6a5fb427acb3b41378b102bda46d8f6f203a5ffcf395d435e93458a0b0a4c2e7782fafe119f769f67058c6677f6d10d9cf5cb8748e1805798ed233f6f930eee0e5075bc58b97af9177fda75d53708beb04dc4f19a43e768074609f14065f48fdad5077ce109bacc357174a6b7956f6e7f32e38415be526370fa58c3c0b31f51e6cd4b2cf27f8bcbc21259d9e5c3b5c2946a9fc1b00d9d15c3b7d80bfd9d05db91d249d3e42d8956682044548d83bda8d5cc9212442f30b45cf4aead80cce9b3512c39c5c737d3f8d747afbab265af5eeef8ca9362ec76e943b0a0d7a39f3db11eca14458a7b592e5e4ff2275dd48b2853 +SIG = d2a05d88d9d543d94d57ec88ae55681750f20b9be9c1e918cdaf457767f2948dd629e94f068edcf3d9927e330234badc3a02fa5ad3d9d85e948cb0b0cb3cd70a + +SEED = 8fb086206dd95a2621f598560ccb281f8273c8fc72e23611089baac89d3c3c78 +PUB = 20276ef479f4d4523ab77420d424e8819c33c83779ed80c7f666e8f4403f94d7 +MESSAGE = f02903ed4266e849a4485205954fffa8a108c323b7e3f84331043514e48556ab019497233a5a127bff3cd7c97086becef538b3f339d7d06e532dc7325e597ae357f816dea42a6a22c79d22074a2e1ad8023c424b7e096e5ad8897b05ef7d00d30a04aaf2981eddff2b347f1e27e20aabbe7e7a9544978e092b00cce420aba06187374ffbb37b4c22d75f04e57590f610a27347286c298312a6c9b1bdf24fbda8513c4f8356ccf757068ffc11bc65113783a5dde7722faf4ceb19fbb62f40702e2c6e6a8bb49ef40446450c4c59a2990944da4744f6ee770b930c246669813ce5a9f5a47dd80388981bfcc3a56b5be2c4c7e659a2e9182dec0aaafe9031aa3954d4fe7c431196a561a5b78eaba64f3db1b586c53b16f679a84921a642c260e4653a61de108ebde6f7053afa2cb3f3668ede121020dd1bace8418aebac3a5bd5142f105ac26fe49e5fb140c19b22d54a6291dfc954670247881646874defad814995519f6260e9774a8d185c37881b4f2543c4b63fbf1985016ab41c4d728cbc90b3ab876267bed41d0c0902f6b50e8fa906fc4788f7b820467306e0fe9e036a0a00f804f91c3ca718b95ff6d9e2204bc3161bf70fcc17b2964b56bc612e29402d96f50986514bc7d831d58e42793786d5806f +SIG = a9305e001600d597d05ef671699bf09f0dcc0c44475d3ca31e7ff1bffedc0c67daa1f3b76a035948c59cd87f82453a40950a1c9703c2e7d9280e7303966da301 + +SEED = afa1b846c210b52300e97696f81b8ea774d1df12e612527c55747f29c1937396 +PUB = b609566bbd1947bd7afaceb14389e836227169215fab66851aa5d70d6e2e3b89 +MESSAGE = 4cac1b1f4bd48284dcc9afc8b5955b64b436db704b0335d9755cc1f97477f8d323cb6410ef146ab8a9efb9526d8b62e3bbad1f7295f47ba9f0de958f8ec9b77ab42232437ed974856444cd22e20be35e91813bff4b016f810d0f61d89f6b614db33f34bd09985b593fe3e06e065b7bc6cd39d55c2cfbec7b6d59c0b37dd1d0d35135ab1d1b04f2f30c2f04f4ba2b36582738081cf59190f528363db944ed612931d1d514c6214f9ab92abb1833926183ac52fba2a4551e20e4c0ac959a49ddb167a381e0241d40c086e90e52aca017258975dbab2ba451ee539a718f076a58709c6697418d9c6f13e4d391368bf0e8bd8f2932dd95ceaf7aaca1241147d341a3acd08dc32905483572b89a80cc47231468ab8de359dd525a6257cf196c2ecb82fa8a78aa3a851c7c96ca25bf7ca3dcf3ca21453d0dfd3323d5a422dec84316102f684c359f226bb53779c0b9950939281ef79a58c011993eace085497afa4daf64c9687b0a11aa116cfa7b03936241a5567b646e7e42e9fb592405b8fa3c0a821fc3121b45b1753cec9a83947d211a45499bd63790b87f01472fe566d87696efedbb74ed00048c384ba7f027b3aa4298dc4110349fedf52a96cd05d08bd635771ed4510738d8f07a6021244d1903579a3ea739 +SIG = 98b0c6313cecaf7c82cbdeb3d0280641c61a060f65e563aa93ce18300a9b58272dc8680b485e8cd11cf80fdca868fab365378384a142727f2f844f87cfdf1905 + +SEED = c85913a6877877131001623ccda9cdc12b9d4043b8a83793c44696632cd6421c +PUB = 9cc67c6948f7bf6e556d0849d3b8d203457a7b61549b36681d754f1dc0841e96 +MESSAGE = 91b5009e83d0f6103399c2d3feec0084973a305bf4176ec782537560472db187a11b4dcb4b2ffb7f0644feb394b28e5bfe97247c4a4a231cf6e916bf99344ccda88a7f5d831d6de3d563dd102eaeb108c5bdce44e0632d17e6fa55b18067df2fa8d200a9869f6aff920c51d46a1ced2d903b1d9b6b075facbf91cd05eb41ad811a8ef40d9118261012c72b8979f15153dbb8561293da9f8b77c8ff14f75387536f0036d1713a72ce8c35b1062f2c6732aebf32936799b51c2cbcd6572413e7dfaab8641a02c150237381cf7a14e22c74c6c20009de7d3b7e69cd1b4584ac2c01babaf973c56b3814bb0089720e41968106cf26509d4aa546fcad5534af303ffca42b16ae6c93ee06bc3cace12e4ec718844bd30d2224cc486d106d1c456bfa165ea0120fab3df2c5ab3a523bbfa789deed44032ab0be86eb7cc09cdb7c07aa948dd5277c3df1d9d1843567dec84f9288e085b05ae4b8af2cea5d9a184d50bef85550c836613d5d3af5f9c2928e6a89660fa62719ebff773e46b77e34bc0470da4d2cdbc7071da758c4d39fe65201c88aaa8e6603d0bbe7c3e9b2d9e41b634682092f147341ad6d667f20c64e81a68d629467a54dd86e1ce12c560a6f9b64512d6f3886cbb9f37c37eb3985c8ac38dd6682f48fe1 +SIG = 01fccfdb1fb6888b0310a913170f7e366816daebe7650d72513d9506e66f7d62208a49ece0af1871497f4541ef605bde711c9e0a1205ef48f26c03dc1ad4af03 + +SEED = fa1e11dc8364208d8e1cb66a361be7e84c5e368166587d4fdb06aced7f62e17c +PUB = 4d8e6f4b3415df6cedabfb295c1984fd419923c6ac41764e32d22daf372c50fc +MESSAGE = 294e63bacccb801bbf04c1f19d0aee16f5650a6e8eea6fe41110663ec01532bd4960a527f15eca4af2f4e6b7b0fc340cf97aa234e92cf7d69d50e4009c2496e3ed4d9aff000f9e185275b817d26a0bab69b7f7ee1ea30daec8bcee387ae46b4b299c27bdc06eea63f24dbee955a6c0969037eef91c34321e3c5c972fde993183b7d23f6e019c3e0cac7589ae4a1521af87ea42df8c22c2270ec23d6d140f9cf6d4d52fac1b9d6c8939ef8131cb62a035c5261538bcdfd6db419a55ef9fe5d7a5ac44579de700858d74a3434844f28342c565892722e27f407d7f17b74a5934be915b20c2400643235f8ab5795f324e33c50644a04033542cb3816d770fa899e7311c14301c1bd0f5aa60a2eb3165680c720e1efa8096fc25d2779275f1842b2db53b4da0ad3e59c07540c28460cec1fdd3cdb7a3478b91a9caf9ac891cdf3aeaeeca9a9656ac1307259922fca74c5cc69f7e25c6bf587973a4b7d3e3ac0635b0db22a0093a79076881c71736ee1d4d45f8ed2d29a0671a64e6ca2f7a5ef404b1edeb842034f571b699bc59e5a37df02054e8482bf1e7b77d8e8397da15d89d7355a5dce86b1683a9ac4e406c08a94a6eb00e5ae16d96722972e5c50c7bee4a84d0697bbe67ceb7ef295f06aaea5abba44466be0f67 +SIG = e857db087e28d6750bf54e53797251d8439989576c12da2d9c811a14877c3bd46c4efab861a10eebe7da04c0b0b445c7a390a50c13de36f3a3c7ae0157022c0e + +SEED = 24a914ceb499e375e5c66777c1ed2043be56549d5e502a844710364042ba9acb +PUB = 20d21ee764b1f35f94568200d63bd5828aca8c5d3e9047d23f478b925295fa2e +MESSAGE = 3ff9f66fa2646ec66a1bf933c2b4cc0fbf912b4d6db50534257f97d01e698d05485747de2544e9f5a4a4a075388cf4400ab89b0353ce86198202db3a903767b879a2af9daa155843111af15a2bc35efe41bcc92c8207e00113b04f1303007949ffb6ce8df4b0b34248fedf5d9cb2cee94b812ed58ece2a0ce0454cf14c20e49e09fe664d6e25762e87895932cd5cd32eb6a3abb38ee163078c133e93588791dbf6af499a31ea4453bbcc7a85e406c9848a664052f11113fbb4ffa760dee4c261e396942491119da29a33582f821d4125e0b4162f28beb066031a652d05749aa7244dd4f3d3bb15d268328d6a02fce2501815257f8ad5af4ecbe7cb8ae9661e344f9072318791f3e859091121e08aefca8982eaaf66259d9de4f46a31e716dc033d0f95d1fa936b6c6079b137dd1158d1def113018c73f8ebb9807e0f7415404ea9c78544ace7ce463cd1d1c57e31f4091bc091804cbcddad0e15a40ca91acbe1c6224ed13cafb4df2c84ac9f0c3c9b546007d9dd6e524c467072563d4ac0d700cc1bf30febb334313dae5761745ec0a5e9e8815025958f00fa2e58060d7e9a5f2b727f48699f929c8459930892573f784fef5692518b5ca268e2a73ebead6ebdeb7ec24eac92aa7dcb41b598bd6eff3632d069726291 +SIG = 3ae0cc7bca8d73be83a9b809b13338c12706aaef75c4d1a478178f9dc565514c7529e298043ea78d21a5a09dd04f10ae87441e5686a933c92c75548427ad3a03 + +SEED = 5532e09b937ffd3d5f4c1d9f1ffcded26ee74d4da075264844690bd9c8613994 +PUB = 5093969f377bec3e35f59efda01ab4186c5d2a36740cf022675e01096b1a3f0a +MESSAGE = add4d7a9ce3f63d1f946e8679065545d8c7bf0a2cc3a4c00b8f142f0945ae362c4c9462a7576a4059d57861662884bd80b96d90d279a952eda952d37d4f95cf0d70da98f4fbaca39e169f9d945d41f872397bbdd5701454303d77d31e86348271da40a1b8f1e57c36fcd803e14fa17716c5631efa01d3a795dc20b2bde36ab73ff6a2d533bc15cce22328713c3c9ccd072c3e450d7f22c0c9f94919752cbfe45ee655d1b53676593cdb448704102631caaa976952eaa1f6c2e876564e420f0c646a0f88365f76415b4085f60a338b29c51633e540f0bf32d4087e7d0fb685be88c7595dc531c99b489584560ad8234b18e39a107cf5d842dabd421e77d26ea5e0f1405ce35fe792714eb4ee1a8017648ac1ae739a33d7b1e089105d1e5add27a62ce64154570340af9eb14e7fdfc2f9a2c2fcfcdac3cc4227763f4d629497479f849216e5d90ec16dfa36b72517f7b5486baee7fda4450c352cffbbae73926c843224f8ce44b38dae53f3ead21890b52a7801075291684fd5910ed86ad33e8a007f6c3f85c16b209293740184f5890874d431cd4e0ea4087c49c3471d789c813c6dc9a78699363a1d87197d3b92c0286689311823f4df22ce8035e75732cdea7f5621f67db0e2a4ca6616193221c0aa3d6de50d85282ee +SIG = d527ff0d4a219d61f418121206a54ae4985854a310482744486e4d130a7de97c319df8372c82828c936e6a8afd9c5de1828573d8261ae9365b8f237676182402 + +SEED = eb36511009d37a9c46c4d1374d0bbd0d9981e78cee7d188c5aab983ec239e10c +PUB = b1cc212b4521bbe7b19a7693878a558440eec36205d8439d040a46a9902fbf55 +MESSAGE = ba2466e56c1df77f22b6f0241fc7952ae9bc24756419a9446dd2b49e2cb9df594e5b6c77a95aa5fbd9dc57fec83962c7751eebb4ba218253f916a922a5139663e3203e3be482be379ca151c463d9ada21446135f356994fa5449f084478f5bb4f5ba6145c5158eb7b1c43c32ebea25e09c900f01ef91e92f88c03c76504ace9646016ffc2789559d0f3cc9d00fb61bdc6af7d3940f302e588e04f79f7b3d4b91a5d193a4f8222bfeb69bf0347d98ad81ef99d130ebc7b36b0783394eea92a38ddd5e7480d2add4e4def53eb99c449bff94e4718b09f2ea9b1f2b886594a95c33a69e0333154e440ab34b7b6c1134d8179b6f0c56251a9ad8e1b6b0f9b8a5c97081a7f8fd05d0b0affc82dbddc8b0c0ab7e833f300626d4b973b3f60feac55571e89cda0f2b441ed2faa669a70d556cb48f9b1d1cbce32ede5d166b1143e264b11ea327681cb559edd13c364bd2baf1fd54bb781807bd59c868b0e4795a779e67f0bd0d14b5a6b9e440b57a5823328b59affbd027eda7dd785079c5f02b5e32890b038730986a39a5a9834a3fed868b6f45cbdd28acb2709aff556263864f9ae1e757b3278c288dbe2932825712773e431f7c29329857fdaea798ed93920893631402e6b13bab62b4855461edb94620f2d1751865f445c466 +SIG = 9f583724de552eae82f254ac6e2ed483ec1a07346266735c490920690c1e3fb2a9e9a34194ed6473733b300d4f23c9aec0da5a2022054ca43885a15a2984320e + +SEED = 7dbc81902e4eaab3077540f559995c387403cac306d486e959c5eb59e431c0a8 +PUB = e03066139082f613448bdbc27fe53aa3f88994c31ddce002e36bbb2963df3ec8 +MESSAGE = dff798b1557b17085a0634371ded5ddf7a5acb996ef9035475e6826336f64ad8b84b882e30badec2b4a711998752f4a1574bc1f89d4325cf2b39861044dd03691e71d07768b5933a3052cc7c81d571a9de061dc19026c2f1e701f2dcf26a88d3401bc99fb81559dca76d8a31a92044a273587d622a08d1cce61c8f948a34ded1acb318881c9b49f6f37c30a65d495b02d5429e7ab4040d8bebeb78794ff736d1511031a6d67a22cdf341b980811c9d775fb19c6478f05ed98430103ea24c0f414d4cc07d860b72dc542ff22d83845a42f8ba45ca7ff3aab0b1e7de2b1094deac08d16eee01969f91bc16fec29ccc061c54db5345ba64842dacc99ee7729468d80a3f095583d8e8012408519d582cc3ff9a2eb7aebaa22db81ffc78ee90ef4ec589dcce87118dab31a6328e409ad5059a5132c82df3cefe2e4014e476f04c3a7018e45267ec5018ecd7bff1dda9267e90666b6b1417e89ddacb5085943befc7ad2f4df5f1ee0af9431aeeb6b24a5515b93dbcf68640f7daf8c961e567d7534900205c3df2184b6ac2da961c4c1d2bc49b4ea96b8154ffd4efffdc5e55a7119cb8af429e85105dffd41fe4a2ebba48168aa05fa7df27c4298735ff868f1496beb4b2ed0b8980c75ffd939ddd1a17e44a44fe3b02795339b08c8d +SIG = 5b7f652f08f229fda1b0bd759377b3fb726c1b9c9a10ef63426d352dd0869bd54d876c3092f1cd411c3757d3c6b6ea942aa70c3aaeb4217a4c7364d18e76e50f + +SEED = 91b095c8a999e03f3ed749cd9f2faacc0076c3b477a87ab5ccd6631738767446 +PUB = dad174d359daecca9c6b389ba096452ab5ca91e6383c6d042a284ece16ba97b6 +MESSAGE = 9b0d8b00299852d68bbf497fe603961a485466a99a5484005db73d4e4bad814e8574efd54d648bd5c91ae8483c54b2f998b02e1abd6f401a25526843a5f2a23a97bd589d1f7e1ab14915b1e359a396d352c360ae6584325ae4bb7d624f61255c5c7bf0a67acab46c3b57b34534c0ee8431d260576606cbd84d8d1839e73da6fe4b0b8b78f0f958827c2f1d93ba7a346dcc75cb563dffde26f997598e8b5c2f1617c6fefc9be4b28b5401b0006413a251690d1203aaae4f6d8a3fb21f24009ab3bff13737a8a7e6646c02732d9ec5a4a510469e2d299e4cc1ad6480a482aa956f89ddcccc64a136fb15b876b6ecd88c7c86a4dfc60e666207c604167d163440ca9ab9cf87a5e0f7bbc5517de4dee876c037f8cc9d959c8ff5dbe944ff54cd91a771e29231f8b5f17d61de904c955fe2025dc52ed480fb3cc90f232459c607ef7e2adb52c7482becd67ad2149a4128f984038b58aa90176782393604aac74c18209a3d6a78630c01955a7cece5da8384da3baf63aa2ddf5963fae05ba3b81c6a03d86a00ef78edb4184fdc89b1d6bfeb310fd1b5fcce1e219524a3cfb2e972577f06b1dddeba00865dae4979000c008ad99f3b638cceb8e8c7a0f998d34d92143d81c0e1c096a925ceba65c43003ee18d494d003e9c61f77d65759 +SIG = 64ee9efdb0c2601a835f418520641e436c7dd47c333d9fc30cfbb9e390fe764530654708b40b03581899a9ac870efd766ffbb4637152f8ff277964fe35425209 + +SEED = 8c568b310ace7d1f0edecefd603a884000544c792565d481c3d3e06e2d82ca96 +PUB = 5fa6e267c766736841411072d1983d1900acf01d48c3ce11770b26f78da979f7 +MESSAGE = b59f5fe9bb4ecff9289594721f2647047b0da5e0e4941bbe57c5b722b476723f0ac5970b4111f893bcaa411f28fceb4f585a2a7187018a904b70ef8fe1f6569a54d00ada37b69cb5e9c9d26c16a903518148e04a1b936a32329c94ee1a8fb6b591892c3aff00bf6e44dd0a762babe89d7060c17b90390d23bf9d360a293b8308383086916e1182b1ba4336f001b8d20deae9a029f7e85397a9ae5cf3ca10c7f3875588b8ffabb063c00ca26f580f69edc527a1accf4f41397b33766bcf6d55eb8de081a48c981d05c066617b80d8f6f5e60e59dd9b930bc4d04586403bb868df75933bdd86230e447036c175a10de9bb39953dcb1966a1f11912078e358f48c5b209a636c7f783f4d36a93ad2cc2e3244519078e99de1d5158b3961e0fc5a4f260c25f45f5e8585e601db08ba058d2909a1bf4995f4813460d369503c6873685ebcd3330a130b75f2365fb2a5a34ea63d958a2a867e90552d2cec8c390084be0c108b0fd2d83cb9284db5b842cbb5d0c3f6f1e2603c9c30c0f6a9b118e1a143a15e319fd1b607152b7cc0547497954c1f729199d0b23e53865403b0ad680e9b45369a6aa38d6685abd397f07fbca40627ecaf8d8d30133a6d9d5af009192751c9c45f77c0bc011268800bf552512730e69973c5bf362ab164894bf +SIG = debdd8e5d3112fd77b394aa0e36e9426bac91df126fa9c317cea7c9d45957cdd96a45ae3ad760413ee1205afd71a29f9c3cb586cd2d7cd1e93bc1652fc34dc04 + +SEED = 3d09afcee3c432fdfb6bdcead54e3da5b1b4165c50d6d310b7fad787b444d680 +PUB = b0d9028c4d1487d293ed585a76bc94fffbafe2c65d980c494e141e4810a35cb9 +MESSAGE = 767165caae0e578f16537e1750be7de87a789a51ff2de11838f564e2580b2391362d2868a5a4708af15d2e2db7b9be39c16adcc1200b34e6b4d4027ddffc1a2a3595e29e855ec5261b20bd55c428b01309badb59e2ca3edb967fc2f4bac0729ddf54fb6c20057bdda9e7af7cbfc092fba865fd3275b9d3bcb0c346b951d170ac9aa650a86df49855d48a1b37ce56c9f27389f5c8b15f5c2c900c4f107c064f603e4f867ef2e9c10a1b74210e6b89bb011793aa85ded43b51b749ba7f70287b6bc1b89434db8b8c8b5d73b214b41e36b528005bfbfe002e21b1006fb9d24babd72106d093e3c7093b3138aea719d69479084647498cd6c9bbb744509cd7da8dd61a627100f03c21e750acb3fcf4631d7c0f618154d2e5fa6656fb76f74c24795047bbce4579eb110643fa98e1f776ca76d7a2b7b7b8678173c773f4be7e182fd24dd76291ac67d9f26a28c5e3cb025c6813a378b383224642b4aefad0c76a6579517b8f360797dd22613ee682b179381950fb71609a5fb5494d2d57dcb00f26d1e72956f4d6672830e05c01b3779677c07ea00953c6b8f0dc204c8dbdccb381bc01b89c5c261db189ab1f54e46bc3edc4de5ad4f0eb29c0a120e437cd8f37ac67d48c7f0e730278708f02b54aee62b72952bc1c0eb437ca8bd5655437 +SIG = 89739fe441ca0ced08a6eb5796e9bdda0e74fb473528fd4907edb659aab44d3343229046716368faf88e85c1644af66ff2dcaf0b17ac93ca13819f3f241dd300 + +SEED = 41c1a2df9369cdc927164aa5adf7757136abe51395604266334cc5460ad5683e +PUB = 40557834cce8e043580a4272a8804d4f926e88cb10d1df0c5e28b9b67e1b63da +MESSAGE = b64b14ba77d239e6f81abe060accef85f0442b650c44015efc43a0aa2ba10bf48d3018b1953ddfffbcda5bf3bbe0b6b3e4b0d9a32c6b725bbb231e0a2704471ee8bc1d594f5c54226f5dd9dfa163cfc1452c61f93e4f8139ab4ce4476f07ec933661eae91b6d500bf508ac63e4baaf1ffc8f0007d802e005f1b4fc1c88bee4d5e9e76384f5a7043bd660cce71f3b67f01f6ab844298531aac73a39d045370088855005a09c6d04238ea478dfacad1e6b22b2be4c46b0d59b1eba1f060bf7da5d1566cf1fdb5c543a33926af63f01a0db86e1a6711c473dc795ab283c8d93facfb5701fa2f2f6bb99f9b7e3749b071d58607be44a7089bcb503ec1495b5feedb399961fd3677d7493eaa3b3e9cc5e3642f40d47de9bfee7c20b0e519c4eb4a40f4da446ed6ac7aaca053e759c97dabe0a8ec2f58e7f2f9b2072762f9f794a6a4e36060b8872bd2c18d06a85c2c141a78293773ee8cfbf154b9930cd39da31b497e737a7750c90a13f5aaa147cd0dc4311f2e34941252ef198b0c1f50827e56c9f16f595aced6d2a69346531495a6499774d360766ca9be5ed8881c0db26ed7c5e6ff3a4f9b73cd8b654640dc96bf43bd426a0f28c9b25fa704d62ff0288fcceffaaebd3ea3097bcbbd778420ebc520a417730a1b5b3b8c96cda9f4e177d +SIG = b8b2752a097196c289849d78f811d9a62fc767278f0c46628b521f62ed2759d74462a175da22403f15020445cae06da3ed61cca6203b7006362a0e198963d20e + +SEED = a00611489467122c4c164bfb6a616e6a619b9f83c4367206b85d3fbec38cd62c +PUB = 57ab58babb41dc0da0bcd506059aac9f46eca91cd35a61f1ba049a9ac227f3d9 +MESSAGE = 34db02ed7512bf8c67d359e7203a2ea441e20e729766c15aa00fa249a3518fc29ef8905aa5b4670958c6a460d77b3a80efcb473859bbaff862223eee52fe58acfd3315f150f3c6c27ff48fca76552f98f6585b5e793308bf5976bad6ee327b4a7a313214b9ae04b9651b63cd8d9f5b3bec689e0fd000dd501770dd0e99b8f99eafa09c396a245a4a96e56896a29b24190b1ef11063f39b63ee3a586b07627dd3500c4e170b835dc0ec236fa5a35c44184707565c4a50662d8dbccfff7f9a7a68d021b4af64d532b7c3d2747418c2d717bb6aca6b58747ae4dd5641d826f79a8a315c38211a538a929e5b451f623f4fcbbcacdb86c8752ea13a617ab414ab653eb2e68d5420df7c6df92438168dcf9c066581dfe7b2c468194a23707de4659bd67eb634ff024741c5fc8698fd4dc41fe5dfc6299b7a08e6ffca37109c0210c8f94ea2d3ddc977ffc0b3794fe6ba4337c7aab434a68ac665484ea8243a84b79aa181ee6ab5aa37a32d879725edc018f8552181816d7d272ca8818a7b92e6ee4454d1f7828dd8afba1a790364b4ff28d84e028597353ebbef24837bc319e1ae8f2b0b6a851b489c3e170eef53e065f7032653cd6b46d8e57e4e111b789ba950c4230aba35e569e06615403407bce0369aaab4eafaef0cae109ac4cb838fb6c1 +SIG = c771ba0a3d3c4a7b064bd51ad05c9ff27fd326610fbfa09183039e5edf35472dded8fc2275bbcc5df1bf129860c01a2c1311da602fbaffc8b79c249c9cc95502 + +SEED = de1634f3460e02898db53298d6d3821c60853adee2d7f3e8edd8b0239a48cfaf +PUB = 9dc1465b3383f37de00ea2d3c70f2c8fac815f0172029c3f579579c984a5895e +MESSAGE = d10c3e4de7fa2989dba87537e00593d0eed4d75ee65846dab1498b4749d64f40e34b5911c5ce3b53a7e37d2d02bb0dae38ed962a4edc86c00207bee9a8e456eccae8bdf4d87a76746014201af6caffe10566f08d10daaf077160f011feaca25b9c1f6eca9fc53314a80547951754355525257d09a7fdad5bc321b72aa28d1e02d8696d4f9eb0ad3b2196f8bcfaeb1d6148287a3faefef91a7a3e0609c28ce59d0ca14d0b3050dd4f096b7bc2513988ba212128d5026daaa7188846db21c5c1d179ab9487c1a5bd346588127c20398d362d4c759cfab2a677750b9e45676a1e7e092ef02edbf278fb19a58e9bf6c9e996e24edad73f3ce31fa04b6d8533436bf80b4b2f805ed91e7fcda3bc2bab3b2bb157158af0ea8e3f0731dfad459d2e79b6d3715fe7bf1eafc5397593208857e57b7feb2f7387943a8e0913470c161aef4fe205d3637f23177ff26304a4f64eba3fe6f7f272d234a67206a388ddd0366e894eaa4bb05d73a475f1b34ca222bbce1685b1b56e034e43b3c40e81fff79682c19f32aa3f2a895c0709f9f74a4d59d3a49029ecfcb283082b067f1a0d9505750fd867321999484249efa725f52c94c7596206a911f3f505d63f0313254bd445f05be3996b58fe1819af87352e7f0a2ca320d9cc00a5fe77ad41640d50be8436 +SIG = d20506eb846923a0b16ff82fb2c3923b00c1b3bcc6e2f6482fba24807521e8e0223f692e62eac993f498f67102a04fd1acf9c7e3888d857c9a080b8af6361006 + +SEED = c738ef5f0935281ba625fa4014d4a4d0be7e28fed779a9cf658e21dba43cebc1 +PUB = 95799faf706d195e544c76cafddf09d02d1beafc42c9d6c9ead4c1845587d39e +MESSAGE = 168d0bc5598be02f5443bfe7dfb8829985ca5d282af9cf1b1482602f243d486bd82ba039a0750909e9b3c7d4d5f8b8baf45718af0311854f4d1c7837f31d8ee68d3558e7e51e0c646a4a637596ee90057b01ed0a17daa3950b81ab47ae8b94c17d40746913c46ba1478bfca51b167628fc3ee1e22f2f19d6d8daf93df6540cedb7a859d1a2ba5911ba71766e8b7fce0c0e8663616d0180697d78ce3040d438131982f3f8112acca29ae53e539ff8c9ec4106d132f402018518308485f2aa6c9e8d1e62fed60cb249457db33c6fd1fe07445361f08194a2b5a057cb03cc754e5c7d4a7eea53a7f7d207cacca5e68cafa969a3521dbb810399a17f328ee767cf55926b2bd5f029549d3b464579c42655265398472e1c77cc8dd9aff187f7ac34dd456ace999a736ecca6d405d4922c779c600c47b84c9c1df5e5f8ed3b2811d351339113f8453cca4c4411688cb0388258ebbd1872b83610042249494ed560d4cda6a68455d957e806dd0bdd83004c4ca80774b8a0a1665866f17085014eadb3eae7382fa870deb29dd8c931b53019625740e28392f38575c0e2a9e504fc35bd95df56439a898230a2398cd2225c766ef36f12ae7e49b30a9c0aad469d5895bbf721cc0ff51d840c802d4a7eefba84fe5205a2c2f14011922dde561456f79e6161 +SIG = f44371e6c3391639d457ed14648184809411e80a3201f8811670e500fcad92f300aabf7fc68e440191e881d6c3474efd6d28f09dc44312fcfcb82701ba3c290a + +SEED = 5fea38739c61ca83bf7b4ad175a2117627b971a634a305a84fa57fecb8035624 +PUB = ddd14b0fc06768d5104c50764bfd3b952352a34007c50d5ddd224ff51afcdf9c +MESSAGE = 1013c60a73953549e5ed105bdea150b91e60ec39200d43721304bfc8ec439d39609613c2d878044a9da01b26d86d6d65db93d91a137e9c4808a97d4ef286a903f3f1382cc6d1294216b9fafc013c86b9ff68b55a50ea3766e61dc1ce38348e91d62ce732c152d766b9335c68d6cad77be2b4a0cd50b9a1ec632ba55648a6e7e11a14c06853c02aec4809bd147a5ddd9fbc3be9f0c8158d84ab6795d771b42b1814a17a3c7a6ca0f4a8f7b3a0db1c73ba13b16400dfecbd03d216650e4d69704a707246444d5791fa273752f59cb5ae9fd416a5186613d66afdbd1ce691a87bd7d8b67190e9ac687062a080d2ec39fe76ed8335058251872839e85eb62f18ece187caba55b5f7d5edcade01cdc543cc677e50238b89c5635ad5c8fc220f5e0be1bc667d20989753a6d616fa69f8b12940b8ca9e2c48577132d8691b053779a152cbacff3b8b1bd7af692e56c73bbae4634776cfc213c99b9ae458df1befc8c877742664b0a0bb1f6915c8dae3b3f55dd75aba6a3bcc4176b4e3ba03d0c1c04c3c6408778b2b8e5a8a3eb52ed32a7428c00a98a589d8ca9390a210f4a7ac004fa1fe4c6da694f12276e320b41b0b59f75d264a396d450b631ab353f1612709e7a2e6a50d01cb110e53040546dd3b1e11d25732813aa76be5e81fcf7a5773f6815bbd +SIG = f4e274823f2c396f3a329486aa6410c5ff19266f0770fd04fb14a7602d2b69a4a2b00928e9e1d92389f8033359ed6fb2146467aa154cba597dec6a84173f8d07 + +SEED = 60f9a14cce5d43fd9aab4ee8cc8379d575949152693bf29a6790b035e42a44de +PUB = bd4a70740d5acabe49f9a2152082fa2025330e6440437f1d047f313de490dca5 +MESSAGE = dd7f44f9eb728ab48de54ecde6b6184bd5ddd8707545a0129f2e905905b55d3e7fd57e28485d258148f6605e2377d5b267d2eaf4cd4b46e454962219868232b6f41f88a797f9cdd5c39ada51a641214fb9db2c2a9b5a5b16e303575318b625cca970b74348727902a1cf268bd16e107113161c8cbc99303c2b9f235541a7b31e433120feba14febe4bcb0f5b936c7edddd0ecfc72c8d38f64cdb6cfc2910bc29a521c50a51abcbc2aabf789de822cb04f5728fee153dd5501b2db59c59f50cab17c29216d66951019e145b36fd7e841bfbb0a328554b44dd7ef51468c3d5b7d3a1f7b9def58d8cf9d9bcafe92c86cf6d6119e98dba6f38ea57e322ddc9c2198d4bbc3b94ea1329db0d458e01c7081b33925a3e287f599a858c50c3a8f18cc2aa634df63e7f10e403adeab2f41db5578790c3b4f041a8b7a4f69cd6e06215df8201ae5b3e1d1d25a0a39bfc3d041a2f98213ef4141245792a76f06d4de25f6467a0e56f2f5cf69400d22117de7b46149554b70c75b9f99484a4f6f035ad3f10e3753cb14f4f398dcf6a64d10cf6c4fac07c91193cc0f54f0de58c6343e9caaa6b4f475ef91a59e083f9f211f5bc8e7e4516b45cf06bf50beb8fc4ab579d86d4a4190eeac748d06e0852c4b9ba8cfc50dd0a037a7bad7fad55af309a5f13d4c91ed3e0 +SIG = 72f54bb8bdd17e9e422cd339631dd39f57355015d4cbd15acab7542efd784a321c1f6125764c0d154045b32e70dc2e03fbfe1117468ac3e73127b5fac8d42102 + +SEED = a39053c5c58bf31d462b27a620b0b37b8052c6b1c4102b6145663aa15e978718 +PUB = 3642ac2a3280dce52ad8dfcfd3709436edc4e7e4ae1b452d9b220780b08679fa +MESSAGE = f65540d3abeb1ee5ea987062c1b579516d3c29c39cbc6b09d60e18fe274c2befe0f5fe7dbd57c2d5835229bb754ec4341394765776d6a9178c4e6a312cd74bdbaca0e88270628cd84100f472b075f93692830122f00f9bd91ac582836c8bfa714aa48e977003556e1b696df328ef584f413f8ab614760699c4d147c3eea1da0435835c9bf7ad54606f0213eb74a1b476141506ae2cd124cd51d66e7e7e579560576305c5fbe8430be3ebebaacba3f9989dd7d199f5a455a50cdb3755037e1a70674a4fef40b4a3aaf7bd3c95b1ab41bb206211c3a1276d3e37d8a3a5c3d5d0f36ef5b4f3de26b7f20f6b2900716dcc22ab734ebaf1e8d00020e5f019551653b9c2f70a4038dfb2f12d25d6d84e79073a6548fe15e4828fe5de83ac3d8d98b7daf92710482c37f7bd2431a8114c6137657bb177882d8a3c76babf1c671a7055365fe90866167a2d1dbc870be83b3601f09d4a317ae254cac9f98dcc7aead9224cd9c9d8a200abc80a2dd108af28fd46ad7080ae741b50054b9b9a9201efb7838bc4c5c2cc3d76ba0fcc49c46e792c26292b7d0312aff955a9f8edf0c696a70a614f3553ad3869bfde48d26a4d367b6cec057e62a4e548554b48b53ecda790ba7a0ab2e3de587bdc22b02f5947634d73099f547db22ec1bbf82343f9a2ca38bce4eb59be +SIG = f7383e966cb2309deedf860100183aaefac672ca16d5419cd6422ca70e16b3976f5f165afc2786117c868234ba1109ede031f8979b50e567358bd4f8bd958202 + +SEED = e0c29df4de45c47539e0896b3a59bc3de6b802fd14dbdc9f25e717ac82c328f3 +PUB = a69002b0f5ef354ce3b2d6b8d8ba70ab778432b22f144dc9c2eb92d99d99dd2a +MESSAGE = 6a37cb4c749c583590c8d849bce3fa657f10009190cad9be41ede19bf2fdb3c562a6101f27bd37f223cab13ced245a1cedf852f551f857aad9727f62c967c0a921df116f48a80a6040b3c723ab5cb594c4507a3d20cd60514e22164a82b74f19dcfdd83c57bc3652375517414af5d18e0a64ccab36699768d07cf40b7063a83e43d5f607964b1bf0840a45ad50abf83dbc849f40e5b4cfb6a3347b29fec50774046a4b50041032aa4d567e8564b3eed1642040682dd8ae7d7179286cf6e1853dc87d27c3e9e60fa47cf8cb2da0181d53eec40614b07331a4fb7028086d0b1ce2e1115b73a162c527bdd7cab5335b863d108be047bdbca112cc6e776bb453c317314388bb9653efb4444bf5cf1ec8da23b711ba71796c0ae02ba1dcc838455078c3897f07e9e13b76e49274c2e207506b00a0b558883aa122b667db9d670508606a3f54320636cd19f973917fb1875f4363e220f1e12398cc6afd79094743338456813a5826ad3f1aba7cd7beab1fe183859c0cc9ef40a5eab912caf515a8d4c3b93d641b7ab3e76b16c12971ace88ff33e5a1ed9b44e45db8f3085dbf070b256b0d7512ee1069432603d73095db8749ca547963bd71a8a684ab8516b146c4187176386afdf6cb1368a3dd8fcb2cfff77056aaf7823f800b266acce72bf643c6d0c28f0ab +SIG = bb3b8c5c27591fd8b9c5ba489d6b6ee5b0fb4a7b0de51f1639afc673d0e5f75e313aa7e1d0009081dbca7435b687ccd12f64f74a386e772b9e24781b925c8c0c + +SEED = 198b5fd1c03827e0994ad5bfee9b5b7be9966c9c3a267e4d7430343767403c67 +PUB = 6682c6f1a866b49b2f8ee97f2e532fa91666bf38da1b4dd65543a1777794cbee +MESSAGE = 3fdaa15c46f25143db972079d7013c7f69a136f45f3f6ba2ced8b828468eb3daa6b50b4f8d3380fec64a0343be116f6f83b6ee64cc4c1b1d08d54fd42029e4285cfc6c6dd5cd181ab533ffcd411f23a1003da94ec9340e2ec71199d678540d5182e139ffcbc505a170b8f07f4a7e694ca92f58320c0a078564ce9de99b0fa8e66b0d822e467a5aeb83567996a48b89db25cade6457794e5414d67e9d4ab7cd6cc2058bb7a513abd709f4caf24bb67ce1c03ab62dbdfe309ec7db0fa3ea7aae8236f259b922d4536115a63bc89acb2051d09e731cbb0df157d9d345bd9109973c2b594f148efc6f3377de5163b7f69869ffef853eaefeb402e23529594fbd65ca05fe4062c529d8e321abc05200cac1e839e87b1fd3fdf021d68cbb3a4142b69cc3af6f632edd65b83f5aa4cb17da5b6ba3fc03edb17c2a3cb5b04836e7660e63c8a0483e243983371dfa9839f9164ad4da0d5953655e3a9518e136da745737c79243c355fc125cbdcc76aec92216846c4574f4f7f298bcde54fd2444ad3025955c100315de5a4e27c333a00284b2f702fdd3de22ac6c240dbc14bf71e62d131b62f2db992473f2f913f60c916ecf57df5f3f021fb330834395b79472caff19fcfa0a271795c76d69b4db3f85b8d2e5c3441965484dcc39aba59b701274f7fc425246856069 +SIG = f454f35b18538f877e5d614a76b5276a27fc0b433f215dc4e963b3f047694c780c515c6ef6fe2db4b009009bc2733aec4fd46e615357cc0bcc9f1f7fc21e3c02 + +SEED = 4392f7d4fbd68fe154e4ba38ad5207612a0648556056c39ac116ad468f89bd2d +PUB = cbeaef41acac02bf1f780ce934aabd631364b369567be1be28e3906f9db120fa +MESSAGE = cf1709dc9a0867ee908721b136cb93a84229e83b46204777ca8194d08b7a3ca9c912eb243e5bdabfeed352349d20be801b722af0892238e72edf190e6361f57572781ad3c2590b197357641c805383baa1d4972f76c65448532c110834a0baa8f48863e166b706653708cd4057d3a4f9fcb2ceb4120001277d38c43847d822822b777c2bb4da4015a1c24d416d5062a8718491d855aaa5dbf5579c164d8e524a9f2fa3f22eb09861ffe6ad659fe36eb40431222c22d7137a6cabca8db786e39d81f661afde4e39589b4db4d3c51ca53590a14e115d0afc3a877b839a9638bece80c32c19e51b7532024845f76cfe9bfb2ac05130f6758bf7fe993aa93aa272e4e6bd0c75c14099d43e652a223e5bcd64c362d4b8f4b95e016f9350c7fa74e653525d08011558b2c6e9bf4fdf9dbd5ef9b09bbc846afc2bcbc86c4ccc315f6d1ccd489b0cf8ed0d93f2f532a426265c590ba3a59023347d819d9b281ef85310b05316d46c8a8c0365d068a8708664ea4d77ac0cd150a65a56586babd34b74365bb8fe3e6187262284d64432e4c81ea4c0e57c1d71ae980c7f4d1d871032e188bbf9d1758cdc1dff989f2d1288fef4e205e99e7cbf2cc324b8c93046f476c59d3d0a59db6fe37382dc79c5ec16056ab3934a52f7d2880d0471a377b6a8ae84d56ac22d1d54551c +SIG = 86e7ccf06e79362d40cdb7fb75a98978bbd334a1db7590367d60849bd53e2fb1a4bdae590d1f47b5490d8702e7c1a87268b8ee9db612de7bdc2e38fa6deb7e05 + +SEED = 0bea98abe7d63f158390ee668aa050e84a25d2893e49fc83f079f9bba6a55a75 +PUB = 22192ec0d32ef9835665a61bc88bcf4e1604637921152c116af503365bf6be42 +MESSAGE = c178e38d4e83ed2be57ce1c3ab64253a8171e610008181fbfc6d752269f7f1c5a9ec62cb27f19ad99ce1f5116a363d96fdc5a42f358b6dbe7cabdfc9f60718e4012c1bb1f842c5560811ba8374a0637747ff92eac21ca65ddeaf43e9989b7de2d432520afee364ecfba4da669ad4893d0bf69f9f81e7df69657be22b92069745f216c242ccd46d02d35616e16c755e0e37f961a6f3637752534f6dfab8805ab759a032a4e7e4c81953325a2f686bb69a029ce4e03becb3605637c5a65b52e331c26c926ed4711a504d3733bb53c97b80eafe4e75ddd9f415362888c3d4d37bae0e63fa11bf755666437d72f58c91d7a2f8cb619b7620a070b26b18b4d50184c5818712110e36d3e2830f6a8576ba57f9cccb8fff4028bf8ef9cb814825bbca827d649547bf6f2bef931704ca7f6df15f780155ed46eaa7ca7d72e22434ca0483bfb2f7902dc787f617eb9bd41ed4520adfd430948c710805a73c1ba5492e96484c4baa7da24c7435c46a052bf3515d33e42dcef517caa45f36c879121078c688dd10d76656a119762b6a834136fa1f8a643224b9224c543cf0470b3f8ee017d620dbdcc84d985154e9d1ae80e5f14387b88a0f6a5c35905aa57fb3abeb0ea6eccddb004474633cc483b56b8a8e20e8f2e09e979aa09893087875c6b117b5f13847ad8fc05604c4 +SIG = 7eb3139b880fdf66376a2090818840049767c837f3ad0036b141667052b33609817ca5e240ed8cdf3ccf3aee29274534594db0b4ccc5c6e5bba3280b873f2901 + +SEED = c25878b0d1e0925c8f5f04a1e5799080963c413a1399c118afb1687c797f4839 +PUB = 13ac2cad41908c255f671f93934ae5d7be325346725c8b40dc39ea80d70ddf34 +MESSAGE = 6856cc7144b6bddcc4b58954d1a2e7101d6584b5d5e719a0aea0fbbdf221c2a2aacbacdc4020c5c8ce681ff7381acd607b0f5239692335700655be2d94c53d7b5148e92a2bc16338c2f4c1a7d1c595af622c240ce579a5e0f5b651bf562518cec8aa2ce4b4aadb1f2fda6cf6295bc37803b5377dab65c9b9a2949fdd49bf9ddc8f96d260ff951bf8e8ccf9827e6869c44bfd973358cefdb010db5e1fe5dbd9f5d2b2ca393c17d446f637059e692d7a91aadcc7689f5f9e1b3052175d9b6b208f9026787fdb66783f45372a24946b1bd1687bf0cfcc8174ebe4d32e43284fc78d7844de0fa22e2065e07528baabaf015cb34d629c3596ad040de31c5620eb266defa7533ac0401998e5673a754365047debfcf7e137a20d16cdd6a5521982f444cfc3429397c641bd7e74a770bb11fcb29483e337bae5169ee82da9a91adf3af67cd814c2825d29018ef035ea86f8de4c7563aaf66e0c75d17ca68f49f0758ec2d9c5179d01aaed7d4515e91a222b0b06fbde4f07a7d9df2de3bcae37ca2c8460c2a6b3749e9bda36d08e66bcc356b390434b4a18cfa45af557dca3d857ff3ad347cfb07e2358c2acfd5cd53b3b0ea2a41ee5c0802fd473db5f30526334da41eb4bc7518383898a0b7507ad4ca289d66c5e2eb75cf255dff312cb1e04eebeb47f2930b90d5e002eb0 +SIG = 06f55198b4191914b74306f38e381316eac40b5b5adb8a312464f67175ecf612e0147b1cef46c2518750a5606bb03bc6467bb9321514f69dcbebce8f69058002 + +SEED = 0b2ec62763f687593135da1961ef29a288089696d944b265a5f96893cd2d8225 +PUB = c1e234fa8bc96d268e7aad028b03f0a911b697715db3a21c2fc7df48ecda8875 +MESSAGE = a83434c68693d5fced91bda10213fcd50c48920b90cee9b73a9c61081a0974933f4fdb0a67e671f8351b0ed5ec0fe7b5fb0c87586fe582ffb1bfa2db5fcedd3302428234b2bb0e726dedf45b13a70cd35ab3e299d13f34503508278c4458eea5b7351b05836bdad5b05f60e445fc65737ae27d2e52df9c39e5da0286392d08fff7ecb7066820fc90fc8a44d5616561c50b52714702302bca5874de85dba045045f9f0e604eb86d6d7fbd775f72ea493b2c4ef7c3be16db2ca7e4d8bd79eb20cfb5f0f6f05336b75cc86d219f3b8f2e91ba7d52b64fdd6a6664f04f2fbab758cdf984168691c32f53e8616b49f76ab7b192b900903082cc89656a9705804cc9b9288a3e42170984f8dc454e0864b9341672686a178c060050178a36c6d906b2ce070d8faaacd9a58c794a5ea4108b4a485c65811c2dca2ee7bb10bffff75d4586b990f43763a16fbc0b48ae1fafb08a9a36fa4326845dba5ba2fbd32bbf66505c5e8657ed0107e3e16144ef31fa6aae72e774097483f5480aa45540568fd08cba0d577768004f58ae9b95be374ed7f0299fe721275e476e0b9ab72dc06ea328384e39bf3ac331c625484312cd9b06b15a2954d33e7aaba6be2261886ca811db96b1143d06dd6e0f3cba7a1ae9b94eaf67771bb2d24e2f94de9c470fcde7bfdb32f410198b5aa9698e32 +SIG = ff701f34b3594de3b80045f429e5e32dd88d6051d4195f1685be783766e80119368f56b3749725b913f1223f87fb0fb24d9dfa0841d6a0e2eb1fddf775c2d205 + +SEED = 8960d7bee8c6b39ca5934d7cddd16f16b3663e6e03e833c057e2181e4597cb68 +PUB = 43409095d4f50f5eddbd5cd4d2012298cb41a40e99492d5a2db08be5377ea183 +MESSAGE = 308d84c7a5f786e563e5c1ea57aab5e555c00997749d15aee35439efa645da2c3967703115c6c63ed7f94785c5478f38467b86e7626e8fffa4d51a2dc45e6df2a35cec99555eabc9f7a93e2e2b689459b4e0c92b351562c417b1997113754ea59e4a91510728ff3071a2bbd1f465a687f67dae955615031a8ad551fe738a260bbc446b48dca1d979051ab5840832e19d473b666217a9183980d6b27e3d3c76d93665ba2393e6ab1a42c3904d4025932d601a202a59a4c49fdb77f0e02868247de5afdfaa1b894208ac00d77c6bb54c6b2a73a47657e44c85137963b57521af20976248eb261482147cdf7a145c3643e29e0588bfdae6a082904853ce5a10d24970ebdfb7f59d5efdd6a5e7e0d287971c846acd54d84dd45468a4110bab6ef8d9a5b4b2426788900b7e1adfe0624344f98fe59ef8a1e6c405b344eb97bb204773744b6a2d8c6e65d17cea07de03b7f0fe49f1a55c33d5f15ce55df7c9561b251c6ac807a92553e1ce917012dccfd69e7dbd038c7eeecae98623f18fbb650e2218a0bc0fff43a75a116448bb7362f527ee6bc8e10761cccf9bcfc0d000f2127b4cc19211d095a0bdaa4e4be4519e6c8445eab9b3144a45cab9996135bf7f75a78d22275900f4ce1f0a9eac136364103062893dad4390422b77e5f5d1d94d7029c6097b35ca64a7a476fcc7 +SIG = 7213dd4a79fd54dec0c548ef42e6cae015be77802bf515cd2582768f72f563ebb2da36af4aaeac56bbffc9932c2e24ec95daff00a5f7a0acab9c8bd3c23bb40c + +SEED = ef6b9b51fd4f8586ca62658e042fc09a83b943033526ffc326c65eb3a5fb594b +PUB = 1d6eece805e0887821876b7ed6ed5b0714d646fbecda38764f94c8155e61d004 +MESSAGE = a8f3f19665de2390d5cc52b064b4851273677486d8f5563bb7c95fa94db3356161ee622221f10cbb1fa195aac7231ea716d74b46b37bc85a70dba3dfaa1675217b351199e74a971028f729b7ae2b74ae8c6b3a0679c3e3296802844ad5bba343f6f9f7c4661b4a29b44f17e89e114fb220e984cd980e94c3d2bf9873e0605c92301744a3035ef046bad2666b5c63ebecf93cc140291946c0fa170340ce395092deed79841352fbfee03a927eb458f2a633ed3271652f5b0f9960cdf9015d56fdabd89ee71e259af6eb514b4c1bd4a666f5b5a35c90f35b149457af2944dd0aa8d9b542283a7e5412b775e421d2126f89bebc3ca37f73071621f1321eee52e9690486a33cd7ff9c9967fb65ee4e907b6b852211473d21e9d91a93362ac761760e8c7bbea486c3d605f9e11b86136819a7ab3f32f13ffca16817fed197ff880b4d6d9a808f7f878763a045728df72faaa963e4cb1c09cc2b2da920280c8366b7d18bf8972df16cc23448fbe6b2e6e16cbbf0745129854053189637ce115d2398433c15d6f116a205334824af282fa758494c47868ea8f4dfadc705e861aad2eb8ef3dbbed2a4569e15834a760cce0cbbc84b289e779b988346b9069c744c97ab2bf42b086d2fb0a411f5ce99f0819a3086b4fe9d96c7c9908dce28df1ddd30f3501ddaf78110734f9dcdfec3 +SIG = 71d171071cd0fea1c6a9cfad1f7fd835e85ff906778bc6345a4dec4313ecc2bff755a717ebd912a5e02840ac073842f9bfcaa58913e260e3c73393d36685c70e + +SEED = bad47cd4bd89849067cce1e63c3d91e9b787aea8584edb07f3451ef67e7bd79b +PUB = ab0ce9ba1d29bdfb85a0e66b76b5e2e05ff732569e4375ccd75098e9e71d17bf +MESSAGE = b5a61e19e4863e0bb5f3fab6c4970d878596895521fa1e7f678cafa2de53322fd458a98aa6e35805429f651291b95bd9950e155f3ada0b609159a4abda5990c04bc2e764422fb49ef42f12529ff6f6a82029ff0185662e658f83c546eed09f06b5a68e857cdad0eb9ec4eecbfd88f34bc80990f8644a9bfdde1d9f3a90d557a8b828d5ce06a64e3b238582bb4cbeba30edc49e8122c55e95badcf502cc567869c09e9f46c6ff3f6878986b1de00b72a1858046fcd3a6e9cdaf5b073c56f2025063a2d178bd4c1e8cbc1e6e671aa97fb2cb4cc8a62c20be41c776372c8e7be63b482e6c63fa85d7cffbc1b2820bae1fc128343a1e20fcf1bc3502eee81358cc9a74c72af63530f96a25a604648ff570df1eb89d1fddbab28679ba2e9b41977e9a9c1caecdbfc361a1dd055ec51620a9bbdbbaf718c9cc136d2007710399536d13332485ec38879785e0c9ce9915a80251373990a59bce440326031ab1b458bfa5b8a4793da4ee11ab7af20de2a118c9ae521a417b68207fc885e109d8463e9f022787cc730db0b1faaed257bed901710885b74e994f54f6f2aeb64f0f60b59efbf2e3bb6515424603a113c0b8a31ba3c1e9a9b8118c87ec6949b75f49627ea7b1328889391104d4f4a3892cf00f26a73cda2a40f9b7157afc40667f4a04f647dbf93906b84c9a35164e1bc902 +SIG = e5724a1dd463a97d1222c518c4925d322202d10f04cd078e771e0fb3951dbc1493a234460754c3aae3df93008dbbfb310c99592bede735a4aeab0323a1210d0e + +SEED = caba8e0533113a4be173408ba83c0db74260802f9186c391402655acde6015cb +PUB = 2d7bef6164c279fa1028a9788e3e8ee8ac15edcf92a5855062952310b4684547 +MESSAGE = 2413a32bca5ce6e230e565eb858493d5d04e6d2e2a7ab1f89a3b423311676bfa93c67daafd1cfc7109e040bac52cbfe07c28280bb6acf6e3a31073dab2965378dd77f61fe9247135c1a631b79ad668c9ea1cd4112d8d3a064cc21df32aeac7dd718b091fb6915b8bc063bb5815c376e01476312a2e5433417a7a9315d65999b02ff464a474a597e53988773670eca46a6e26cf96e9488e9e6344bc783ddfb535e76bb3b9a603ff4c59c7dbe2d8b6198d5b24490b4ea96c95959ffbf3d8218e760daf20e01e2f36c84bb097115abddee92bed82d16b15a9e192e9893ac638461df507207b0cf595884d8a99fb9c7045f9bff7b73f00ca3fd595a5cec292adb458bd9463be1204d01678d2f4389b8720115fa597c402b4ff694b71ce4f3d330d5e2f3c3ad6d96a9b3439230fc53a44794cda595557c406ca1589bc7be81e2d79636033253fa7bdd600c67fc55936bd96ce0428c3eb97bad1de0a5fbb9b675157de5f18bc62a7c22c9483e2802e679b5b8f89db0fc37f7c7150ad5ac8722ceb999b2435e6997217092336ef1c8a2292dab9a46ff8a9e10d3355765cac9d6598770f4f01ea639125fd031609dd1a507d96280c7d01a3ee987e9b210ec8744cd48c74f8afee961e8ef221f826a1fe6e7df0cb15ad7c7ef4a91f9d0f4c2e1bdea635d275fac8c4bc0601f490dbdbc734 +SIG = ec35ec32c8a4008827e178492b3b8bee22a4954fc6b25f4f225dd7ed23698900de8156756a8edc35c51d10f82b830a2a659676eac911f960244766e0c3c60705 + +SEED = 9bf3fbc7308b46f6036bade0c3ca199fac662b07f103bf75181d52ba6a58be05 +PUB = 2f6ac6fc33bc060c1dc3cb9d1a2b9115845addb16c4b84be37ed33adb3b3d3a8 +MESSAGE = d65e36a6a38195ecb91de3c848b51f639245fa2baba8a6f85947159dec0ed3fae80c5a0f8c66ff24793c89c0c687543bc633547a1f37f730d97012ebbdc7ac339c4890c0856bbfe2ba29b25a7aa6b089c033fecb76db62dd3c00f6421b9e76dd0ea366eb2d4a052ee6cc736e3819191d5ad7a66d2be042cc6539e5f35652b155a727f3888d93f93a9102598f7538a9ab7c777eec79426a6075d6f38d64c485520f6413ff4d358a8a9cbdab01adf4db02adaea26494d1f5d617637f277f8b0e6e7e61e2eeccdd337de2baf0ca264c14c8cb8368000b9c714385f413737d6816e212cae2aecfffc32fd16d46c3ecee6ab074c0d768bdfe99b86cbbc8df9c47cd586d465871268d4a9d1c877236ab78f8859c114e251cabc4be0f8bc25d148c5f543e290745d11803e49f5b53193fe39969c039b3f249b32f2b8598b6acf4ed64d5752bb772ff4ee00ce0f85ecbb4cfc4ce07daf2809868c2903b781e12a274105f06181029e47f2bfb21f49480aa1e444715c0b9ff07ead88975d93585d2ff424832a9783d94906a60f877ae1c85ff15317badca1e61317433c7ce96279b678ec9d174dd0870080b234154f626a53462cfd547842eab8705605b8ee885729ee78d1833aa43f55ac22731989fdeda7dc5fa9c01985f2661e6c7326d346e6db27e6f921fae7c93a2170e10dd0c460bdc +SIG = 0c3136e01f9bcd99e10d3d124b0cdb0772bec18a864be81bd1daa44d818c3d470dfaa8ab6e9a761cf03f93ef9cc78291096ed6d10c08fa2fba3bac04dde20f0c + +SEED = 64e89304a335e903cb36c0bdf1a6412ef368468006b73d3d2d61cb030cc5f8d1 +PUB = a180ef3a661c3c479d5f69807c902748e35e7f725121e37a5d91b8bec88d83a6 +MESSAGE = 2f51074d981bdafafb02a40fe826c45f3171c1b3184d8c260b82b8411fc625cb02ccfe755dc29dc7895bf759e61b2450da1a656a38d4f70d2ee748c518c6420306e5f01ec7a0ffe0e9dceb93f6c077b12662881584f98ce6ab945f87fc6d123c45d6cdfd8237a1ce3635b623a79d020df44c74b89ac14a321fbf33a8c0a2559fea1c2b156076b813908f842ebe4c2b949089e52b1ae40dc6e4b2abbc439a0bf72369679aab6f4c00018be147f7c0a67b9679ee88a53819c49f7b675e30a8b5af39661ee8db21010411294968f88e5d604d0d88d76a7e4864fad3a56f5f624ba1b34ea9cb720850aad3bd4f0a882a7d25fbec2bb7ca86da616da96c1562c6d6a1abcc641e1b58b2c178e1c3bc8a3b36ec9e144dd2e75b0bc8c08ccb0d6e3427b0322b3d6ab93f3f60b9cc5b61dad02385a14949f9b87a8e3af1e0e0fab7a9a928c753fc6110444af7ccaf8027ed641b9ed87fa5d8e1f76cae465d57a70dad9ebfdd3ce7576ac4de89d98f42e282ad87ad6a5042577cbbbc4d951e2a8676fedc8cb1b1bdf76c3a38846385a85aa24706c20a8b38465fe2ae0e41f78e614b8e9642fe2471a9015747db976e0c7848c23ff3f417cb05a8d5ef40130adf855c998a62104d7e2fb7c0f9aa2a496075623ced2c0f7eec10147ff9608a8a042ef98117459b93837fd1b8d5ef03978eada74cac +SIG = 92eb4454814001ecfc18025d6421f64645a5bcbb5cb8fd85c14d772617c503e8be7d3bcf117f5e6801d1c3b96f9090a66ddc67f8cf8ff0f1c125b16b15e2ce07 + +SEED = 6f634387ca2c0cb167a740d6afd89e2a28f5307184e81cba3c037046a5ede23c +PUB = 011f2a9a111c38f3490cad1685be78eceedc6fac4a3221301c69c84b1ec7b3a7 +MESSAGE = 865c20a94ac3f2e3bd5cb85bec9d33726671fe01f9c537017d59c8d5106e43360bf76fc06186705980c8a87ba3633a4a170426ecc0defb6db2670f5f592533774cda50052ae597d48deacc2637063bfd519f2e79bac81775beccb1ab2f5b39712e2e829469b75a2d2dbd08aa6d24723404b25eb948a4834c55246c8079a82ec64354e8c2388f8c5a616b3cdc371e6263fabc9f6099219e861585fe82a67d610dd1eb5c81c96b5cb354a689fd8aac8db76c433f0cb0b31cf1d855b6a30a3d2a212e9b4f7d7afe619951f98d2f1ba2c101085ba81f49b36037cd6457a7eaa8f4f3bedf68d09fc9fa25a9d754db65360285412d1a6da53788905fcf4efa8a80cd86ca48b845633d8c31c2ae06f16c4c6bbbe9cd1afb59e101be50e03535dd8a65e45bba46d45cb14badfc8e93ab5267f4e492ab1f9a95e61fcab81cbf2bd867a3ec7b4baa189a0f08567075596129dcf9ff1c502d3279e8aa6ce56eaf134582a9e430a5aa8ca10c3da8bc793d0256ad19aea7149f0ea7ea95facfac1c5cfd29d7a3fe1a417975739e14da8edc819900472ca8c69716328e8a299f974edff741aabc1c074a761b3ec8761dda2e7eed7af33ef00409849d415497c5ed5dfaa2259a31d076398170b2d9d210208b4a4c7db8c626d1c533562a1f95489f9819e4985fc4e1d1a707be5e82b005481d86377f424e +SIG = fd17c618cdbb5d459ea2aca886f0512c623251284aae3a83eb5d7f60da1d9b2ba083c455a5e2583a3cba736e7b961ba19c1cc8dd90745da82a15dfc662e8e10d + +SEED = 4b2e1ae60fa5d383baba54edc168b9b05e0d05ee9c181321dbfddd1983959154 +PUB = 36c020b18552345619ef8837eb8d5494840e85f46809343b4d6f406125da557d +MESSAGE = fab98b2bbf86aeb05086812a4b0049a1042abb76df9cd2908755706303efedb1ad21e8bc8d7562349e1e98ce0d752f4b3d99e677368bd08c78fe7425ec3b560e383bd42af6499886c35add80a5828b61d6644d7dc443ba2c06f9bad2eccb983d24458f6ada1b10bb5b77172c5cdd56d273d1e41010b25cf48a7d58d7255702ac12f2a6fe2918466395f460d15236d035ae9410ca86c4605128299faaf09015f1adee7768ee1a8f8ca06d10dd7f95c46fa10253065f9d6f90295908809fd779571be29e0ae66e0bcbdeb7913d2bbb76ac302f3452c55ef199a48eceb0e3596c7b4c0386dae7101ea244a33c4cdc830672df83655b35338052307b94d223cab1af69e07f78e58cbb0cb3c5351e3a6b0c4a927f7562c598d2d3df90569f61db1a3cb0140b56ea02cf7745fbeec2028673d67f1ec5f7daf9715f754a9d8ed46a7a63ef722ee0d5899331b63c974fa880429435767f96254ef46c9968f3fedaafeaf3e8f45634b54f5e0a5fc2d2373ab9e98d9acfe3697e642a18e0dfd9fbc2f094866d401f0a4ca2a456edf6a1a77b9c296c3922067eb3d5a5ca0a77f430e4c8611d8f05a1baac1635ef7ba83dfc69d301949856be4d2c8ab61de29cf39250c5794cbf5750cda95d0468afa2b7f23dba4ef5f5295a3bf4140018b7ed061884444f5bb1b7d239312dd739999536c684456ea06b +SIG = 2220119e83d69a6a3eed95fa166d1d1128a3f232ca1b78bc94b4d476c4779443614b8772aa2232cb0720a055eb71d8407f3ab19baa1d962c052c84c0bd589608 + +SEED = b216cebf878024c20dfc86ce4b37bdc47aa28f29203b5b44925065d993a259fe +PUB = c36edbb6254a913f08fe259e238780638f72ec0b3007264bcc60a9e81ee9298f +MESSAGE = 9c8717cc86fe02480bfd9e922bd76bffee2170c4cb1b13df834ac01d45006086297f1b8a26f2ba674d33e1d162f19367feba97352b7df2e75b309d4b6f8b07cc0eb6777e81e268e02d07f2a08f8f39d5a8320bfc01fc8c9227d2cf05e12891ff4de885a1c93371a0910ba53392aff9ba2eed9a2055977ec4157bd65b34df79372f4d50edbc48924353cfa1692319d88a7a5bb726254c209291e9b1d2c1a6c8236398109c59ed42a0ac9e7633c520734eccfea4fea95a47a8f0a068b4275000439cc97c57871e105cc0790e9dcc9c25d5af7063ffd05c4f3780e7bca4c456d0170da709fc6cb3faa72bdcf562908ae9340aef4d0c8b91f0fbccbcf1cd898b1c716f4f1474c3aa316242abdf6368e57a247ff2fd5ce23d187f694f11e38dfbfbc3d9db20903b4ebb449b9049ee020f6e2f508e8b2b165bad7464dbdd178cbd423233765d371e7ae1c3e878cdb5b824b20cb309867c0e473c067e6744008527b6bc076d077f4867622aeed1c253dbde7c6a76c7015962fb73391698600bb318ffa7b0136ee4ccb07daaf01f40ff9c194f98681f9faef8b6f9e99f95df0080da8966a8ba7a9474c537b92df9799e2fd16f788dad7a7bcc745226e1e6371f52ebcdbd144044ddfe632dfc0a43d3a450923170ebc7ae219e50e078a511bc12ef14cd14b5309f38abd65db2b2a7af2243b229c9fd2e +SIG = b7389ee78dd9763f9d2892912edcbe3e8a236b8bdc25f44b9cfdc8c47cd58168ab56eb0402a5bd752ac8f4978d2ea2b65d2fa85265966b9f57227ef4a59ae009 + +SEED = afcecea92439e44a43ed61b673043dcbc4e360f2f30cd07896cda20cb988d4e3 +PUB = d231f69235a2e3a1dd5f6c2a9aaf20c03454b9a29f4e3a29ab94689d0d723e50 +MESSAGE = 0b05f89ebb3397947687afbef0ede87cf3810676277037521d952a3bbbbdc8565988a095d8d4f6f59be572d3d821dd789977ef77a2fd7110ceeed9f3756ed8e188267b97a30ef8957c78aea3a2963deca61860545e0c40824881ebb1db10f607e10ddbddce400ea236ba4745aa99a05641976766789ed0da7db55fdab459ebd4b441a6282f7cfd5a20ea06effa335955e5fd29181671bc92c00052f7f75c39277c9a43b787ac9fb1516e996232a509774d1dc21d8c0513f7844b0a5b5f18957581f99044a14223ccda8a284de12fd424265fe57b270215f8fa9ff2bea517934e4800a47d346fb6c361cfbabeffabd9c4164f45156e245c977edb473642c3940be5ad6fd1a7119a7b18e98d6dc843e0d254c93d0146d18e5c62ede1490f89a605eb454f974778cfae20932e95477bd03bcdb97d5bcb76335942e92ee668f231e69c570ac5446d0f774066737fdf49f10ceb1b52d6d8a4639846a3373a7c6f3b4b3159fe2e7af7eee2f0df172d94d255d017651da3009005e5eac3176c09389ee40d70383bd37117eca083598a1801f592d057186e568e247c252be4b14f723ab7ddb97ae9768c2682fd63acc300779fe04e2b88874751346c9e0f97a2a216772ff9625c33bd7e29fed8003a08dbd33b5d17899c943c25e95ad754fb632e047c112af7f7ceba72362e1a3ddd2935aaf7f818a27c +SIG = a65545cf3df456b28d83a6d94c036a19d0d29fb065edc27e5e93a1f40279897e1c6f25959a725ababc87cf2ae727f3467b79570e902711917191d9cb0d2d660c + +SEED = b834c6e0facbff580dd3b23753959a4c2154c219521b3d27035d071f6599bd02 +PUB = d1c384715e3b3d02c13e090605534c7db740da2aa560f53200a3ced8beae8cf8 +MESSAGE = 6cf147b1605528a36be75716a14b420bcf067c03f1cfe9c4402f14987fbfc9d3ecc3ccf4f8d2d03a55900b8dc79af3b6e77436f69b1417ad4b68fd44e5e333ed90ea7943fbd1122609ec8ff6bb25e42e9914f5920fc72c4d013b6a9685c996fbd8352aafb184c22d9e47871a5280e4ab7dd6a5cfd10a5994a200f670e0b622a9394d4793d0a420e7d8806cb127c7ac690d45a2e94166cea672bcd982b0e9baad56312d2570ddde7e0b9e7f47136f0481d00f66a2aaca4d1b09d7ce6c5a98a76b68cd97d5793968d667073f8217f9054735340f9b149c0dce845b099e88d0709680f0f77603ff0a2331c558fc36d5f24da9a62d69af5190d21b5c857a1e08f014c6d456468665a7f845c66f9111f9c098c68940efcd87b657070cb9164bc9743aceb7439a0d01c0062a11af2e11349397f5d152872b13c5ab32f51cc58f1475ec82ac671561dcbd343cfb3c5f78d0fc73053c6004b0a4ca3f2043ff4b0c54275c4fcb9cadc6baabe57b1d5acd531e972ef9335136cd1d65512ba1f5b6ccc4b66b4250aafa2967dd4211a2742e0f177d8f4063899f61815cbe6d8fbfcdf74812bd40cc10084e46a99ac128058eaf16a49a24b6ae228ecf0109c52dfc06e37d6a333bcb24aba312164c6c0290485d251280538ce9541c0916640e36d6929dcd9588eb99577f5f6d82bcbb198826267e49f5daff2c0d +SIG = 0f19b7066d5792328a9800d9d4f8f67d5b089b541226a167dacd439fa485b0025a5dc7f2c7e23fc4a5c6869e7619d356399700c93650e89cd25b90fb9925e304 + +SEED = 2269a5d8f7ac2cd9048f5f49e349e5c435a159b319fe3b30bfac8d0d505943f4 +PUB = 1c817943dc39c24b01da38a487b175482460c609e4726349a9aa7aea9bc0fb34 +MESSAGE = 7153d4d9e641aa61920db0ff4bd537a6d6130a396554cc94537698f9cad16b99eebefa5f2776f2feaff6bd9a6904120c67e0883f6b96bbbb195e95aec753b699bab3d03944c13c72fc84e3f2cbf6296f645549111c93fae1a759bfcd16fc09e60bb9785535ad27da244ef2f857f2de99a6e92188890e452c7f5b9e3a4b968e11743b6fc7faf1275e5360a5468941797894d770fa7da364a337302239fe83ae0b0d084aa12acdc63462524e0eb10fefe81ba96f71f275f3449a3f8db21d58749a38853d39b0ad8e69891bd204dfca8f6c239dc9a0ac27f54db4238d4706df11d607369dc7f704da1d39f2e82af8c283d220c12431f56d803069b4acb77081c031ae3319fc77fca7845097fd727ad0d080895bba23e873d2def8cdc216c3eed61b08761bb9ebce0282cf502aaf6ce7e8c058637958c3ea1b72fe6e8df8d37ac055db6992587fabbdc467f52475644f918863af620492f34680f2056cbcab75e2323626c094759c0e0e99ef19759527250646ad760120ba386699d53934f956b8bbc7395bb496ceb2dd223c7b501b92d36a95f8f0a02eb5ba4dddf166b9b95b4a59e72a30c63cf21e6085751923d54b30281e52a09618e6f023ba0a21675e7f989b8991588c96c2b56a78f5d2945a7baeb6a0c1bbd5d95af3ee830f5809c794a15ab4b5f89dd2be2dfdcd8fe0520fda2b3f02a1ac0155 +SIG = be0fb3308a076a61a4a92a97f6ac55327190e1341d6dd410d86b41bdaf2d3374093ef720bdb77feb7014e0f77d3b809623c7ca53e2ae4b097113e96db77a2d08 + +SEED = e965b3f257356685c98b42b964a253fc495399cc94b099c2445fc81c759c68e5 +PUB = 689f5410c8e0f4d37bc07c85d7cce6c9b63601f9bdafecaa448a5eed64afc8c6 +MESSAGE = 6f20a9ad27e30dac76b30d4c19a5bd6dfd6d049213f4becdd963d72b8b2dad687b003808201d50f7dd6e599ef58ceb6068c545ed99b9e763f9b0ec1db5fcbd7d490a121ecec6bba1eb5edbd6de85364707c55e300c8b16bb2530f70898136689c988591d5391d9cc347d7931061a9b7696e2c9f35bc0d304a81c2cf954d9c3a88a22e1d67bbe0a85308477f62918c25db504e4762f0e3b4246007908ac701779006b77d72510edc69e17d0f6394c77e5551875a446f81233415d0a91a0460b51c413d644e850f8557281c46699e53b22a7c73b068ea38652cff3b0a7b8ba30971eab18fdbbd8739ee1ee0cd5cbfb7d5d41757b6331271fb7809751e203513c9970f66d91bc0ce062f4fcb28be0a699867b79594c6458a0d307acac91f413c4615877dc53e1b018da5cfce1b63f40be1e55274c4374cdfc21524499a683a231adef779d1921440e5d3fdbd5033dc983cfc931abe638c35d5a95869e9fe3d93eb90bd1861f855ce1f608b7bcad6b5e1bd97edc95ed5ddcbcb715d919f5ff77df2da438f7a3a98286dbd5b6e043fc7372f69704f09d865530f4f0edd3300f185b6d73d8716d32d32b1c9ac2ddf4f902d3f216d35a33f368095ded10be94bb53d6f256560fac2f4af0edf5c5c702143777126e7de32d07493932662129ba0e7fc7cfb36fd2ca531646e8cd2211854fc510af3b1e8cafde7a +SIG = 8d2bc4e1cd256aad8a151dec010dc93a5e5cca58298dec49cbc9c4717b5cfb5460d430be726b0f302cbd926beea19aa3c93aeb452a44f6007af49adf2f05bb04 + +SEED = bc3b1e0bf8d69ea5b4cbbf10bb33fc955adcbe13fc20af8a10872ce9df39d6bd +PUB = accd2628155919bbc7f9d86f91dafec35c711a78c79ad360eddb88fa8a180b2d +MESSAGE = 4c73e04abe0819de1f84d70541eb1bb61c4f42920e1f2d1d9e6281a8a2e8b3eb45537d83969027f99ef0ea27ca085b13f9db480f00c02f3fd7429dd567708953bbf3b9e8e2c6ac4d321ff8f9e4a3154723085a54e9c9573cc7350c09f8973f948b08730373597a5fd0349821ae0a3cd6c84992b189128f3490987e1e9ad4f6574ca538fdfd83284c1eb0953f24c08f74932d4364dbbef922542440dae80424a92eaef27c1889bd08c44f9df03a3af30dffb48fae445e625f4d9265cf387a1da35fe4c231504535db72ea81a186805f856ebe6a6a65241432530fe6c960c5f9be6c22957060304e9dd8efbc1e482e7ddbd8af03bf2382899c986d916611e4f27ae52f817ef01b6a141fe4f685d94dc8cd52830043934587704c1e642e8fe56be6d6b85bf4a6feb2b6858f1f007f99d39ea04c9fe5fa7ef1b91f495ed0e7fa4213dd68cea42b6729f95031907e27c44098094386fabfb04ab9b4de3d6861de462312c59b27c76f7b6a4fc71ea0d5daf6b7320521a67e5cb37504976ad73dae2d649feb75e2eadd3401a7f2f36e16dfbfbdb2af5716cba1bce20cd47ce1c1d7be00697001fbbeb4915aa6e5393b5ab20e0f31f5119149a2cb4c4d452c8156113ac7824f84f09aeb81202e8dd3dac0aa89399b5a38b1e218301960a37d52632eeaefe3687455464288eb17d9e19a3a72ed9de32c17be79a3b9 +SIG = 6ef7f0e91f2cc6715f8e5a98574b4400c261a643e0545ff26747f8e1739899d76640b6451c43c1d03a4775b54fcf9bce18ed3fccad338b7764024fdfa2de8201 + +SEED = 10718fa6e2d7f6ed38fd66cb6dbfa087e8f1e8a8a24fab58d79d7954b8720c3e +PUB = 870d4f666d06fda9f9511b58602eec050d754ea6d8e79cdd19f601c477df1aa0 +MESSAGE = 41259b6eef13d6ffe33cdde799b995c40be782cf978440b66be51c440582abd42f526696bb3cb92265b1ed0e4bba764cae2839830a252635dc80ce5f73d521b3d6ff03ac30e198ad20567e75a34fa825ebf9841508da84cd674236ca7b43de3564c94ab079408fd94137ce3f90a5dd5d3ac39a05ec86715a8f025e4539a7640ab88836f4efbabd5e1652c49ea21613acfe343a880ee5a42f2f9134ef4e3716b16d134a9c4c71c39b3c1a857d3c89439783eef1edd71bf4492d05fd18673a5242ff4187b9de47ad4968da49dba5a6092e95ea27ddfc7448dcf5972d9d228d63e5291ba6e6fbd07e3241f9366ca4976bb04b22d01f0dbae794fa9c1d9029f88a83602b0e0ec55e22c37b201125cadb5341ef73f6da1abbe2b1c475f0750345b1be4259d8c28531ffe7788667c410dac339918c869b00ab80f20bf7990d366f9b3d5e8eb2f48d7ed0e64b85dc9fe3bb998b1eecd1231e902d2d152e09da2d2592bdb32c8cd2e2c489496b2980c03dbb09ec7f8a4ea2c7020f2a0faa657cd6ced48d6da27864cf5e97eea9b3c2f0f34abf8d87bd2adeb60c7272fc4306d955bdc8023d7d3dc2f3dafe9ebe8a8d138965a7f6ce93517cd2099663f67c34552176ddb595ac6ea5609febcf24c7d69d412709e578670a21ac8afccb8bf2b18ff3af7de21dc71d50d60d37b6ed729db04beff7d34b2920d87551ce15 +SIG = e1659186f1f76fe43ac8a11703360fbeff53b5e57b5974aaa08e2575579c27084cf6802e7c206347314475b603197494e7d61fe4b1ee7b78e18d94469352df0c + +SEED = c1d4724c6cb1bc6723b2b43034278b3c5b48fed7f8a3cc2318033e7552047351 +PUB = c27e392e7c3664b9061ea76d2575dd7c41eaf1da3a65f3a986e0a57f6c40c17e +MESSAGE = deee99d7a77d4300c17aec1ab323c571c6e9e73a43491a3c7888b76fc03ec43d07af42a05a2aa322d00c8560acef314106b10b9bd12654357ffa26f2390050da63d668c9e2df548f87639e096a35853f82e761fd711d2a265438f5d4db5e32775708150da6cb686a2b4ca211d7f00dc0abcb2ca150e791116a10a5efcff3514dab8ed80a7092c3a015152cb25d9f86ec0d1ca67ddab44d64eeb1f931bfab2ab188956c743db4814808c5cde1b0745b3edd340eb03ffcc80a78f3db310f4f5c20009fc0279c2c1bcb3cedf990bd0e20c6f9fb7515ad6e933b07e99da6ac32b97141187ef63bdb1062e37220a4dcd419d6244cdcc34ea41d0bcbc3138b1d54aefc0190e30b187db073aa7d6cfe04bd3fd2ac00313e3ddd64a181935ca4b8b2a85d36bc27d97b7626767b93ee38def8b6b2c8da9b00263614342faa9d3e738d2713c45ffbeef8c84bcdbc8da4309c8445530f5c617dc866251f548950a14f075aa3117f96e41f899dbe7340b1d90a1352d3b8fb41b79f16a82bc2e4a193b8a7232400996b73b1fc00b2ec1c667577f82824d39fb7f6e7692dcd97b1d8ce94083ca197e9a5d40fadff0b9ac57e9de761c156e6d31d52c332d513e9f58697dcbdd80a5e42c551702c3de7beccc3db845b1a04c8cbd41695ea7428abba89e0dce3e3d9e70230ae9147c2b88559dc695d6809a51ccbc1dd9e089c585f +SIG = d37a6ec82ed45ca9b4855de9cb942564e883ff70a79b8e712d5f604ec8974de5363ac849cbab28e7aeeff28ed3f2d14b608b3146c2efe0735ad815c7d75a1a01 + +SEED = 37c070d4a53b13be760635110d1bd4f01920225afabec576faaec910f2926d1a +PUB = 0aa85f2ab1dff895d1fad0c119f2bf57126aab601c528d37698e97702d35f525 +MESSAGE = 10c646447f81ad94d015d86d0d98b2452dca60a47ab35264035e33a0942b954e3e23b91d8123b8593c6af7c8d3ecd290e0e5ee36fd4e53b7be633a6cf027a5ac3f0f679eb1bdd210a38ea6e48b0558e303010af474e7f6df2a4e457699fc38e36938b05ffcaa1b694e32f3d1b2cc5d00cf256f12184c873e519089ec1df15b0dc76e7bfe90780df58136fe597fce894ca563e08efa0f2d4d208bede9a874882873d251baf019fe46d1d6504b3bcd243b795351f34d2e7606aa975528ee50d59efb6ee6992a89b2426956c2ca4247e0df0129852983e9767a8eed1bc7335ffca8d0289f04807f67ca7da971f58db8b9bc9fdbe4f83cfe9a00f1ca584798bc71d851ff7cd6c51b8990aaba4d38b416b92240dfb70ee3c12b5e731057762ef90823fbf683ca06d05c20d3ae2b97a83ebe70ae17afff9d16609d546d8d3c74bc281884894f3d49e083f10ae7c11c1dca0effefcfa6e0f1535081fac3a2819fd2e3265527182ae9d391b232bb7542e68455cd267760db652d19e22fb2ed11cd1305ba8d98c1ebf2d1969b24d64f3e319af74e092006d2a3ff744872a20ebf18d17748ab7110805096ea136bce2f968b205e650b803c531d06775ae5ceea28bb92e9a0edec8951ce2009a88ee1b64d9b9e89f69051203384210a102a44d2d6703173b68507dceadd3bf6510df2a5cefd9c80e4f385b2f9e6215813ed32 +SIG = 9da60cc4a64d07dee1346bd3d3010995ce2738208ab35b34c2a8fd1787ae3a1e207fe784525154fae4f5794cd8503045fea85cf77fd92f6a70cd0c5a52c0810e + +SEED = 1126496a582ce58d3d618dd8a3933547aa7a8a30fb54063b8dfdd31671c6c73d +PUB = e10229c623fa8ad8982c3e4c36ff52df0f219b57915b6e980e5fe72ea0962e22 +MESSAGE = 6a4b52d730ddab829b2a179590cbd4c372498e9f439977c0a10dc13c0ae1736eaaff063371434fd0da80360ec5890607d2fae1c9a2e1ab0b7f3d667f5b1b9c418f18b10c9e6fd669d3ebec168efef44163e577a2ebd0f2cb768f80c23188e86069e4d10f410306cedd7a341a61e0f4f3bc25041bc2f922ed073e1e2f1b709c579d10630f33071754d707894a1c62190de18882c564dc4c01dc545dd8966404ed78fa3267a9469f63b6120abb65f9b3ba3eee28d79c2eb4e7020cc6987dfc5c29672f8c0fa3e690d584fe000c64f352610179621bfd5ff3eb30d18f1a0250416db93b1c1e93cf8a3646517560d1cc8fff822b51ef27b200e987b592390753453ef138bd3d29db7cb1b5f45e4795b89c53f49704192752237c6ab274849f9594ee9777f6efe70483129d067f97199d9ae36090703864f7ca4750a6f3b6ff83824c910484394d1e2eceba18446fe4e994ce07433a740ddd05f0e396d482894e6f14acf7b97bae6c7eb88703039fa785d60a3af78b13243a4f88dde1d998617f2e3fa7eafc2f435dd4ac1ea9c238407aa09b4eea8ed434927b406674ac270458cfb3bf29c347f94559613179b9502192321b88e9af0a90e9a4ab9eddaae382e3734d1415ebe32499c34e6fdeaf15b0d9787985e08dfe495460c54f6743d81ff16881e5e30c51f4b092373783f12423c3e1ae8591130a269980caa1cb5c +SIG = b30eb56ca9b120bf849a3a9d56af033de8a590c9e1240c1e36dbc6cf0a71b78a11ec143fb9959a8f25b57711d6a90a67e01be3a4da2b69394869bb8d64b87e0f + +SEED = 9c167aff3b1b788f133d422de8ca9a64316409f9e35bfe22032ec417ae9abc6d +PUB = efb534f0d47c068e77b28a906d95ad8d213a4d4fc1c70542f01e596d57b5f019 +MESSAGE = 68ac0fc2b607ba38e377fae845c808c8f9fa614eb1f31158a9620a937d3e301e85acaa69144bc349a39dfb582041c4a197ae99b4d4d59b7a2ca3d16228b5591cbf57c18a781efd19193c47b16c6023a3a8ba3d668f05a37f1e83b0d7febdd10f63e48ef7a20e015b1c6725d4c300a986c60e3a115469c8e52ba05b51c05d0af40d89fd9ed76f36950aee3c7819898a903cfe0361a91c69100b495141e86ee79d63d17403fb1a1629ef63cb7e9d2720cbfff0002b190bcdc26794124dd38d42bcaa7175405eb0bbcf8e37d65d05a37195b479371fa2bbbb167d91cee88235dd72ea88fc73ce3ce43d33b715f25f192ec215dac124899c5e7586e86340d8cbe53735defbe02e4cc9fde69fb9794d1db72b98c0f19766ee5138bbfa78909aa299b4913c499deaf54b4841d5044829984936700dcf92f36542b2fc7e86441b9925f5d0b78c17a85cfcfcb20b0fd751349c27463abde4d27df74265288713f96dea013b945521808b4996b1b2dc0338b6d236efd6d2b27dafda46ec5fa32b965e8bb5e8bb61bd966edeb774681e0ea8c17b8c99fa7d660f0f66c9bc6d95cbd7dc094724098eb05191b53a3df6566b9c90e0d7dff2943848b61a20d48c22b6d3c958e293d709c8f48110230ff51918562877daf6d920c85a82e07c451fe7ae9759c0a77e97bb298b5d0592a41d08f67a4ed5a1bb41e937b6a68aeb38fd5be9 +SIG = c9ae67fd6415dcbab292fab394ca6c3b7d90ca244dc6a7764e74fd202bf4b2905bd2030e6beb914c3c238db371b1cba6d9261aa392ec871a4b8b12fe9c1c970e + +SEED = e9948805eb341b2867479c668fd3532c309941c0ad4cb2e54231756e6a1bdecb +PUB = 5447a8e34d6a640002d8d60bcf1ddc711e4c465c94c34b50bdef358960ff81f1 +MESSAGE = 91cffd7eb1cf6bd4756bce6a30af9dfba26ddd1cce0394c194a3e39cc3d1cbc221b7eb70bea18d29c267457176a3c9e53c18e47d10a67c464505197702e6b2470d38869db5174b158f9992e4435d02246f540258dedd3ce33df582555a681fb76ecaccb1c2989b177e3b7e454aaa529de59bf5a03123d571df2e7f7cb830805c58b74a653bac0e5a888e08dc2236d6cd496aa06d0d67cf3b335e218c49dedad82fc1be9ef20cac61905c30eb132d739b16ca8a8c906619c0e0d8b33985327e36f3d4b8fda387c186cc50443104db761f7ff9301270204a713e58902101fad000ce931647c577fdec148dca95cdc08918ebed037c60332fadf088f036083ebc92e173b7ddcc30c493f27e69cd17a20d30b78f83a72e4f5a747d86d96c5e1bb7a438166204013e2164d6aabc0d562f54015c365c80445607145e5692ee34f6353077fab7452d88ce3eb01d2b3797dc91b341a3a726301516baae18e851f74dfbdf0866bb2376867de55231e362c472c52116544cd4f81e93571c4ec820e7e653f4e21be0a942576c9de91e7d1251683d859de448f822dcf3d2cf55ede2f9c71b6063d1373061f8f5936b698d1384e65459ea2bc26ec96775ef425207432dda0ac1fe28526c5e4559349c3d8df9918230f4044683cc2c1b858d141ab8d0805bb9336067522aa89c810f3eaa7ac2d8dd28c3751225a19ecec8bcca52439946 +SIG = d3dc62d6ce9c766f2abaf9a7fbe09d6bdb07a4747b56080db09beb4a4e804a70d7ddf4119475c7be834f31956f4a71dad029cdf2363dd0365ce22dc27f078003 + +SEED = b01753efa73bb3de7aa778be7afcbff66a5d3e2c2f8b5aa2b048844050996965 +PUB = d0cc6cf109c999fbf6d16f471fafd0232b0a68d4c46406ec7545dbaba8194158 +MESSAGE = 684e612f27eead0d34844cc81ba911c28aaf6d66e71229e8cc3462f7c7a050daa30cb74471150f07dad459b5a91358476c0598255d8a642dd7c0802811bd88e4cac597efe41ebd96cd0f3b5ce72db4be1a3dbd6b84f5446e3da600d3b1d2b460a009bd31cacd98a91518ce33e9a703d404288736ccc43103fc69e67974f31652fa3dadef3337f6c897a3d201303c8f03597b4a87c98f291ccd58a3f1e898332aa5993b47fcb5ddaa1c0868b643742d0e4a4b9cd427038b3b74999bc89ac3484c0ca13f25aae8e78ae1ccee6218accab81a4f694f5324a347629d49b55e4037504a9acc8df58c6841dddcd4fc4347f7b6f1fd9de0564577e6f329ed951a0a6b9124ff63e22eb36d3a8863bc1bf69cea24c605967e7d8948953f27d5c4c75f0849f872a3e3d16d422fa5a11e1b9a74df6f38b90f277d81fce8437a14d99d2bef189d7cac83ddc61377ed348b3c4fc09ec2b9005925d04a71e26d641667bdf549294331c6ea01cd5c0bd1b6a7ecfda20b0f1929582b74697cb262c3927d6b223f4b5f3043aa6eb4571a78e9da11c2b36f64552580caa7b5fa6b90f929e0162e608d1240d7242cd2f47025c03debe059b1dc94770232bc6765148480bb1d9f50da1ee6448cf9c88b19dd459932c06ed811c4a64a12d5938bd1c757bcfaeaee8933fe5fff21763de740482bcf1ba59afdc8fcf873c3d507bb394e32e45f736519 +SIG = 16b7421227ae09130685cbb1a0c60aa57a5e1afe1bbe6bacea0c281bcc8998e6824a772c3208a6b6b4d236695505c9be82700cf93a783985a39e16e377a7410e + +SEED = 4f4b20d899366f2f23ee628f229b236cf80f43ba183177c97ee34829546f1742 +PUB = c94576641f4a893cdfcee7b39fc21929b86b349976d7b0a46d39a588bcfe4357 +MESSAGE = db8ef02e3033e6b96a56cab05082fb4695f4a1c916250dd75173f430a10c9468817709d37623346ae8245b42bda0da6b60462ccfdfc75a9ab994e66c9ab9fecdd8599610910affe4f10215cb280bf8f9f2700a444796dae93e06c6bea7d8b4fe1301baa79ccec769368feb2442c7de84f095e6b3bff63d388cbafb2b9809dc38e9b12ebd039c0a57f4d522e91ec8d1f2b8d23a4a0ae059af85393bb0a15f749110f6774a1fd731a6ec213e4ff435daab546d31ed9ec3b6d8cc2edacebf4facc5566556eea92e5b3f2542239b25e28012dd4ef40072eebf83ed2a255181f3a442189d68c6c609f4dfdf3db7d67d087a2fcd6d2dc50bbfed8bfbbfcb74d3c41f02a87865b13b8efcf5c3581257be0aa913f60c370527bde11a475c136a17c5eefeb03f5bff28693ed841e8ed1f7c29102f5599dd444009bcea6a92d5574152458e0caf8a36aa72b5dc4908a6461c9b741453005c8fbcc68113ae184208ee14b835480c6efafed18a76000b38e5858290f4d51f52f096cbe490e1eb5cacb226ec495a55a7fa457843d57fab67f8be7e209334785bdd665d7b63e4daf57b6e78928b603c8c0f9bc85464733b61273ef9e2b8a0cd7c3bf8ee0a6872e34d5a27a625e35eaf7ff5440b8b141af704df70c9c18623bd11209513192505105cd7bcfa5f0d919da706948fbe1f761f315846aa3b4813dd9ba3d81b9204e5409c0382b6eb +SIG = 0f80ff5d17488fe26f93c543b04ed959b5f0643fc61c7f2c3bc60132ba9c6210c8b250ea5e84d07b01de68bc174414eeeb31fdc2ba6823e231e312a91ededd02 diff --git a/vendor/ring/tests/ed25519_verify_tests.txt b/vendor/ring/tests/ed25519_verify_tests.txt new file mode 100644 index 00000000..74c94b36 --- /dev/null +++ b/vendor/ring/tests/ed25519_verify_tests.txt @@ -0,0 +1,34 @@ +# BoringSSL TEST(Ed25519Test Malleability) + +# Control; S is in range. +MESSAGE = 54657374 +SIG = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d +PUB = 7d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa +Result = P + +# Same as above, but with the order L added to S so it is out of range. +# BoringSSL commit 472ba2c2dd52d06a657a63b7fbf02732a6649d21 +MESSAGE = 54657374 +SIG = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab067654bce3832c2d76f8f6f5dafc08d9339d4eef676573336a5c51eb6f946b31d +PUB = 7d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa +Result = F + + +# BoringSSL commit 3094902fcdc2db2cc832fa854b9a6a8be383926c +MESSAGE = 124e583f8b8eca58bb29c271b41d36986bbc45541f8e51f9cb0133eca447601e +SIG = dac119d6ca87fc59ae611c157048f4d4fc932a149dbe20ec6effd1436abf83ea05c7df0fef06147241259113909bc71bd3c53ba4464ffcad3c0968f2ffffff0f +PUB = 100fdf47fb94f1536a4f7c3fda27383fa03375a8f527c537e6f1703c47f94f86 +Result = P + +# Control. Same key as above; same message and signature as below, except S is in range. +PUB = 100fdf47fb94f1536a4f7c3fda27383fa03375a8f527c537e6f1703c47f94f86 +MESSAGE = 6a0bc2b0057cedfc0fa2e3f7f7d39279b30f454a69dfd1117c758d86b19d85e0 +SIG = 0971f86d2c9c78582524a103cb9cf949522ae528f8054dc20107d999be673ff4f58ac9d20ec563133cabc6230b1db8625f8446639ede46ad4df4053000000000 +Result = P + +# Same key as above, but S is out of range. +# BoringSSL commit 472ba2c2dd52d06a657a63b7fbf02732a6649d21 +PUB = 100fdf47fb94f1536a4f7c3fda27383fa03375a8f527c537e6f1703c47f94f86 +MESSAGE = 6a0bc2b0057cedfc0fa2e3f7f7d39279b30f454a69dfd1117c758d86b19d85e0 +SIG = 0971f86d2c9c78582524a103cb9cf949522ae528f8054dc20107d999be673ff4e25ebf2f2928766b1248bec6e91697775f8446639ede46ad4df4053000000010 +Result = F diff --git a/vendor/ring/tests/error_tests.rs b/vendor/ring/tests/error_tests.rs new file mode 100644 index 00000000..8e78c702 --- /dev/null +++ b/vendor/ring/tests/error_tests.rs @@ -0,0 +1,7 @@ +#[cfg(feature = "std")] +#[test] +fn error_impl_std_error_error_test() { + use ring::{error, test}; + test::compile_time_assert_std_error_error::(); + test::compile_time_assert_std_error_error::(); +} diff --git a/vendor/ring/tests/hkdf_tests.rs b/vendor/ring/tests/hkdf_tests.rs new file mode 100644 index 00000000..d411ec11 --- /dev/null +++ b/vendor/ring/tests/hkdf_tests.rs @@ -0,0 +1,129 @@ +// Copyright 2015 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use ring::{digest, error, hkdf, test, test_file}; + +#[cfg(target_arch = "wasm32")] +use wasm_bindgen_test::{wasm_bindgen_test, wasm_bindgen_test_configure}; + +#[cfg(target_arch = "wasm32")] +wasm_bindgen_test_configure!(run_in_browser); + +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +fn hkdf_tests() { + test::run(test_file!("hkdf_tests.txt"), |section, test_case| { + assert_eq!(section, ""); + let alg = { + let digest_alg = test_case + .consume_digest_alg("Hash") + .ok_or(error::Unspecified)?; + if digest_alg == &digest::SHA256 { + hkdf::HKDF_SHA256 + } else { + // TODO: add test vectors for other algorithms + panic!("unsupported algorithm: {:?}", digest_alg); + } + }; + let secret = test_case.consume_bytes("IKM"); + let salt = test_case.consume_bytes("salt"); + let info = test_case.consume_bytes("info"); + let _ = test_case.consume_bytes("PRK"); + let expected_out = test_case.consume_bytes("OKM"); + + let salt = hkdf::Salt::new(alg, &salt); + + // TODO: test multi-part info, especially with empty parts. + let My(out) = salt + .extract(&secret) + .expand(&[&info], My(expected_out.len())) + .unwrap() + .into(); + assert_eq!(out, expected_out); + + Ok(()) + }); +} + +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +fn hkdf_output_len_tests() { + for &alg in &[hkdf::HKDF_SHA256, hkdf::HKDF_SHA384, hkdf::HKDF_SHA512] { + const MAX_BLOCKS: usize = 255; + + let salt = hkdf::Salt::new(alg, &[]); + let prk = salt.extract(&[]); // TODO: enforce minimum length. + + { + // Test zero length. + let okm = prk.expand(&[b"info"], My(0)).unwrap(); + let result: My> = okm.into(); + assert_eq!(&result.0, &[]); + } + + let max_out_len = MAX_BLOCKS * alg.hmac_algorithm().digest_algorithm().output_len; + + { + // Test maximum length output succeeds. + let okm = prk.expand(&[b"info"], My(max_out_len)).unwrap(); + let result: My> = okm.into(); + assert_eq!(result.0.len(), max_out_len); + } + + { + // Test too-large output fails. + assert!(prk.expand(&[b"info"], My(max_out_len + 1)).is_err()); + } + + { + // Test length mismatch (smaller). + let okm = prk.expand(&[b"info"], My(2)).unwrap(); + let mut buf = [0u8; 1]; + assert_eq!(okm.fill(&mut buf), Err(error::Unspecified)); + } + + { + // Test length mismatch (larger). + let okm = prk.expand(&[b"info"], My(2)).unwrap(); + let mut buf = [0u8; 3]; + assert_eq!(okm.fill(&mut buf), Err(error::Unspecified)); + } + + { + // Control for above two tests. + let okm = prk.expand(&[b"info"], My(2)).unwrap(); + let mut buf = [0u8; 2]; + assert_eq!(okm.fill(&mut buf), Ok(())); + } + } +} + +/// Generic newtype wrapper that lets us implement traits for externally-defined +/// types. +#[derive(Debug, PartialEq)] +struct My(T); + +impl hkdf::KeyType for My { + fn len(&self) -> usize { + self.0 + } +} + +impl From>> for My> { + fn from(okm: hkdf::Okm>) -> Self { + let mut r = vec![0u8; okm.len().0]; + okm.fill(&mut r).unwrap(); + Self(r) + } +} diff --git a/vendor/ring/tests/hkdf_tests.txt b/vendor/ring/tests/hkdf_tests.txt new file mode 100644 index 00000000..2ffa2db8 --- /dev/null +++ b/vendor/ring/tests/hkdf_tests.txt @@ -0,0 +1,44 @@ +# Test Cases from RFC 5869. Note that the parameter L is implied by the length +# of |OKM| and so it was omitted. + +# A.1. Test Case 1 = Basic test case with SHA-256 +Hash = SHA256 +IKM = 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b +salt = 000102030405060708090a0b0c +info = f0f1f2f3f4f5f6f7f8f9 +PRK = 077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5 +OKM = 3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865 + +# A.2. Test Case 2 = Test with SHA-256 and longer inputs/outputs +Hash = SHA256 +IKM = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f +salt = 606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf +info = b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff +PRK = 06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15fc244 +OKM = b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87 + +# A.3. Test Case 3 = Test with SHA-256 and zero-length salt/info +Hash = SHA256 +IKM = 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b +salt = "" +info = "" +PRK = 19ef24a32c717b167f33a91d6f648bdf96596776afdb6377ac434c1c293ccb04 +OKM = 8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8 + +# Variants of the above tests. + +# Variant of A.1. with zero-length output +Hash = SHA256 +IKM = 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b +salt = 000102030405060708090a0b0c +info = f0f1f2f3f4f5f6f7f8f9 +PRK = 077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5 +OKM = "" + +# Variant of A.1. with hash-length output +Hash = SHA256 +IKM = 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b +salt = 000102030405060708090a0b0c +info = f0f1f2f3f4f5f6f7f8f9 +PRK = 077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5 +OKM = 3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf diff --git a/vendor/ring/tests/hmac_tests.rs b/vendor/ring/tests/hmac_tests.rs new file mode 100644 index 00000000..5d12cb31 --- /dev/null +++ b/vendor/ring/tests/hmac_tests.rs @@ -0,0 +1,113 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use ring::{digest, hmac, test, test_file}; + +#[cfg(target_arch = "wasm32")] +use wasm_bindgen_test::{wasm_bindgen_test, wasm_bindgen_test_configure}; + +#[cfg(target_arch = "wasm32")] +wasm_bindgen_test_configure!(run_in_browser); + +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +fn hmac_tests() { + test::run(test_file!("hmac_tests.txt"), |section, test_case| { + assert_eq!(section, ""); + let digest_alg = test_case.consume_digest_alg("HMAC"); + let key_value = test_case.consume_bytes("Key"); + let mut input = test_case.consume_bytes("Input"); + let output = test_case.consume_bytes("Output"); + + let algorithm = { + let digest_alg = match digest_alg { + Some(digest_alg) => digest_alg, + None => { + return Ok(()); + } // Unsupported digest algorithm + }; + if digest_alg == &digest::SHA1_FOR_LEGACY_USE_ONLY { + hmac::HMAC_SHA1_FOR_LEGACY_USE_ONLY + } else if digest_alg == &digest::SHA256 { + hmac::HMAC_SHA256 + } else if digest_alg == &digest::SHA384 { + hmac::HMAC_SHA384 + } else if digest_alg == &digest::SHA512 { + hmac::HMAC_SHA512 + } else { + unreachable!() + } + }; + + hmac_test_case_inner(algorithm, &key_value[..], &input[..], &output[..], true); + + // Tamper with the input and check that verification fails. + if input.is_empty() { + input.push(0); + } else { + input[0] ^= 1; + } + + hmac_test_case_inner(algorithm, &key_value[..], &input[..], &output[..], false); + + Ok(()) + }); +} + +fn hmac_test_case_inner( + algorithm: hmac::Algorithm, + key_value: &[u8], + input: &[u8], + output: &[u8], + is_ok: bool, +) { + let key = hmac::Key::new(algorithm, key_value); + + // One-shot API. + { + let signature = hmac::sign(&key, input); + assert_eq!(is_ok, signature.as_ref() == output); + + #[cfg(any(not(target_arch = "wasm32"), feature = "wasm32_c"))] + assert_eq!(is_ok, hmac::verify(&key, input, output).is_ok()); + } + + // Multi-part API, one single part. + { + let mut s_ctx = hmac::Context::with_key(&key); + s_ctx.update(input); + let signature = s_ctx.sign(); + assert_eq!(is_ok, signature.as_ref() == output); + } + + // Multi-part API, byte by byte. + { + let mut ctx = hmac::Context::with_key(&key); + for b in input { + ctx.update(&[*b]); + } + let signature = ctx.sign(); + assert_eq!(is_ok, signature.as_ref() == output); + } +} + +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +fn hmac_debug() { + let key = hmac::Key::new(hmac::HMAC_SHA256, &[0; 32]); + assert_eq!("Key { algorithm: SHA256 }", format!("{:?}", &key)); + + let ctx = hmac::Context::with_key(&key); + assert_eq!("Context { algorithm: SHA256 }", format!("{:?}", &ctx)); +} diff --git a/vendor/ring/tests/hmac_tests.txt b/vendor/ring/tests/hmac_tests.txt new file mode 100644 index 00000000..74a5b4b9 --- /dev/null +++ b/vendor/ring/tests/hmac_tests.txt @@ -0,0 +1,97 @@ +# HMAC tests from NIST test data + +HMAC = SHA1 +Input = "Sample message for keylen=blocklen" +Key = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F +Output = 5FD596EE78D5553C8FF4E72D266DFD192366DA29 + +HMAC = SHA1 +Input = "Sample message for keylen Ok(()), + "Err" => Err(error::Unspecified), + _ => panic!("Unsupported value of \"Verify\""), + }; + + { + let mut out = vec![0u8; dk.len()]; + pbkdf2::derive(algorithm, iterations, &salt, &secret, &mut out); + assert_eq!(dk == out, verify_expected_result.is_ok() || dk.is_empty()); + } + + #[cfg(any(not(target_arch = "wasm32"), feature = "wasm32_c"))] + assert_eq!( + pbkdf2::verify(algorithm, iterations, &salt, &secret, &dk), + verify_expected_result + ); + + Ok(()) + }); +} diff --git a/vendor/ring/tests/pbkdf2_tests.txt b/vendor/ring/tests/pbkdf2_tests.txt new file mode 100644 index 00000000..a659381b --- /dev/null +++ b/vendor/ring/tests/pbkdf2_tests.txt @@ -0,0 +1,266 @@ +# The|dkLen| parameter is given implicitly as the length of |DK|. + +# PBKDF2 HMAC-SHA256 Test Vectors from +# https://stackoverflow.com/questions/5130513/pbkdf2-hmac-sha2-test-vectors + +Hash = SHA256 +P = "password" +S = "salt" +c = 1 +DK = 120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17b +Verify = OK + +Hash = SHA256 +P = "password" +S = "salt" +c = 2 +DK = ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43 +Verify = OK + +Hash = SHA256 +P = "password" +S = "salt" +c = 4096 +DK = c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134a +Verify = OK + +# Skipped because of the large number of iterations and the amount of time +# it would add to the test suite. +# Hash = SHA256 +# P = "password" +# S = "salt" +# c = 16777216 +# DK = cf81c66fe8cfc04d1f31ecb65dab4089f7f179e89b3b0bcb17ad10e3ac6eba46 +# Verify = OK + +Hash = SHA256 +P = "passwordPASSWORDpassword" +S = "saltSALTsaltSALTsaltSALTsaltSALTsalt" +c = 4096 +DK = 348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9 +Verify = OK + +# P is "pass\0word" S is "sa\0lt" +Hash = SHA256 +P = 7061737300776f7264 +S = 7361006c74 +c = 4096 +DK = 89b69d0516f829893c696226650a8687 +Verify = OK + +# PBKDF2 HMAC-SHA512 Test Vectors from +# https://stackoverflow.com/questions/15593184/pbkdf2-hmac-sha-512-test-vectors + +Hash = SHA512 +P = "password" +S = "salt" +c = 1 +DK = 867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252c02d470a285a0501bad999bfe943c08f050235d7d68b1da55e63f73b60a57fce +Verify = OK + +Hash = SHA512 +P = "password" +S = "salt" +c = 2 +DK = e1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53cf76cab2868a39b9f7840edce4fef5a82be67335c77a6068e04112754f27ccf4e +Verify = OK + +Hash = SHA512 +P = "password" +S = "salt" +c = 4096 +DK = d197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5143f30602641b3d55cd335988cb36b84376060ecd532e039b742a239434af2d5 +Verify = OK + +Hash = SHA512 +P = "passwordPASSWORDpassword" +S = "saltSALTsaltSALTsaltSALTsaltSALTsalt" +c = 4096 +DK = 8c0511f4c6e597c6ac6315d8f0362e225f3c501495ba23b868c005174dc4ee71115b59f9e60cd9532fa33e0f75aefe30225c583a186cd82bd4daea9724a3d3b8 +Verify = OK + +# PBKDF2 test vectors from Ruby OpenSSL +# +# Ruby code used to generate each test vector given in comments (be sure to +# `require "openssl"`) + +# Example with 1 byte output +# +# digest = OpenSSL::Digest::SHA256.new +# OpenSSL::PKCS5.pbkdf2_hmac("1byteboundarytest", "salt", 8, 1, digest).unpack("H*") +Hash = SHA256 +P = "1byteboundarytest" +S = "salt" +c = 8 +DK = 68 +Verify = OK + +# Same as the previous test case, but with a bit flipped. +Hash = SHA256 +P = "1byteboundarytest" +S = "salt" +c = 8 +DK = 69 +Verify = Err + +# Example with 31 byte output +# +# digest = OpenSSL::Digest::SHA256.new +# OpenSSL::PKCS5.pbkdf2_hmac("31byteboundarytest", "salt", 8, 31, digest).unpack("H*") +Hash = SHA256 +P = "31byteboundarytest" +S = "salt" +c = 8 +DK = cb84e165acfa5bfab1b5aa8c78d62e86deb608b983a102cb843c7ecad886e9 +Verify = OK + +# Same as the previous test case, bit with a bit flipped in the first byte. +Hash = SHA256 +P = "31byteboundarytest" +S = "salt" +c = 8 +DK = cc84e165acfa5bfab1b5aa8c78d62e86deb608b983a102cb843c7ecad886e9 +Verify = Err + +# Example with 32 byte output +# +# digest = OpenSSL::Digest::SHA256.new +# OpenSSL::PKCS5.pbkdf2_hmac("32byteboundarytest", "salt", 8, 32, digest).unpack("H*") +Hash = SHA256 +P = "32byteboundarytest" +S = "salt" +c = 8 +DK = 2e0a6832b70598815e6d1350a1705291bc58fc9a66e08a9fb2d89e0b2db26285 +Verify = OK + +# Same as the previous test case, but with a bit flipped in the middle. +Hash = SHA256 +P = "32byteboundarytest" +S = "salt" +c = 8 +DK = 2e0a6832b70598815e6d1350a1715291bc58fc9a66e08a9fb2d89e0b2db26285 +Verify = Err + +# Example with 33 byte output +# +# digest = OpenSSL::Digest::SHA256.new +# OpenSSL::PKCS5.pbkdf2_hmac("33byteboundarytest", "salt", 8, 33, digest).unpack("H*") +Hash = SHA256 +P = "33byteboundarytest" +S = "salt" +c = 8 +DK = b7c1a3d23a03b1d29ebcb46b3e422251bae8d649e45ab00f8815553c76efe5cdeb +Verify = OK + +# Same as the previous test case, but with the first bit flipped. +Hash = SHA256 +P = "33byteboundarytest" +S = "salt" +c = 8 +DK = 37c1a3d23a03b1d29ebcb46b3e422251bae8d649e45ab00f8815553c76efe5cdeb +Verify = Err + +# Same as previous test case, but last bit is flipped. +Hash = SHA256 +P = "33byteboundarytest" +S = "salt" +c = 8 +DK = b7c1a3d23a03b1d29ebcb46b3e422251bae8d649e45ab00f8815553c76efe5cdea +Verify = Err + + +# Example with 63 byte output +# +# digest = OpenSSL::Digest::SHA256.new +# OpenSSL::PKCS5.pbkdf2_hmac("63byteboundarytest", "salt", 8, 63, digest).unpack("H*") +Hash = SHA256 +P = "63byteboundarytest" +S = "salt" +c = 8 +DK = d10fa19eefabe3b543e90394934173547747a1d38e9d5d8f62bf1f49c9e5d306bc8a4e483b855fb6d7c6a2f2f2dcb5d25340ce87b82661f1185c24313723be +Verify = OK + +# Example with 64 byte output +# +# digest = OpenSSL::Digest::SHA256.new +# OpenSSL::PKCS5.pbkdf2_hmac("64byteboundarytest", "salt", 8, 64, digest).unpack("H*") +Hash = SHA256 +P = "64byteboundarytest" +S = "salt" +c = 8 +DK = 76d44b557a1e3062fff1c9035e30e0d3352a21fa9bb0bef446e792a75a6211fe7943e156ea32b2bbba68298792e710971e754e1e9e443f167194c957cdcaa95e +Verify = OK + +# Example with 65 byte output +# +# digest = OpenSSL::Digest::SHA256.new +# OpenSSL::PKCS5.pbkdf2_hmac("65byteboundarytest", "salt", 8, 65, digest).unpack("H*") +Hash = SHA256 +P = "65byteboundarytest" +S = "salt" +c = 8 +DK = 28f8f2177c828fb447b439548603d9b3b3a455bbd339d6186772b9e7b1dfec5be27bfb5713c51181720bed046bb2d162003edb2c4f5c54722d0f68c8d597b7fa52 +Verify = OK + +# Same as the previous test case, but the last bit in the middle block was +# flipped. +Hash = SHA256 +P = "65byteboundarytest" +S = "salt" +c = 8 +DK = 28f8f2177c828fb447b439548603d9b3b3a455bbd339d6186772b9e7b1dfec5be27bfb5713c51181720bed046bb2d162003edb2c4f5c54722d0f68c8d597b7fb52 +Verify = Err + + +# Example with 255 SHA-256 blocks +# +# digest = OpenSSL::Digest::SHA256.new +# OpenSSL::PKCS5.pbkdf2_hmac("255blockboundarytest", "salt", 8, 32 * 255, digest).unpack("H*") +Hash = SHA256 +P = "255blockboundarytest" +S = "salt" +c = 8 +DK = 092c7b59d56a3ccc3d02dc145e8500648f4eb6e6ed6b5c78841fefc8f873e580e4e07ab1895f1cbef00cc2d0e52242bd02a2e35a2b243fafa988bf0d4b394c4d257c6b6dadad614d060840c57875dc553b152ff8ff66cfebb3f8d18429522dcc887e2aee80ca9cdfa8b1d775b39f46356bde051c5085d069b5a62fe334fe8c4f2a7605bc4a7e307ccf94069a874a4c0b898e381c69494b2b950fb819cbb7b1f4ea07c33e70e5e4b9d0bca28f6f45a63cedf9cf9db01e969dcdc70af0bc79e18d70f19bbc53d9590c6f5288063f165f32afa92c5548760117d9207528a2b1cd272439e36267302203d58b70c3cf292c8753c02104d2cf0074ca863dc39c5cc3822bee5b2d7dab6d3fe1bf90b43e955ccf3d7775bcbd3a40d60d474a11713ad4bb748e49b0831f13a565f3704f662187db408e7902448c3532956a7bf0c3cd7264e1f79b55cdc42e26af92de4cf2cc876c31cbff64876e7656037a3f1b783c0be71a81e71fe5a4a8da2cdcc217d36b9157effb28b52169aab6d9f0b4b6b1e8de377a66b9af5dfb17836664b09ddc3022223654f1960309953d807b50e46a12ae2179413509ae78461d0930a58ea55ed96cf4285383368d14341dc29d2507d1af2400f8f637d0118305c5faee69a0099e901dcdfe2d28ecc4511a955b073ebf9dea593d934782fa898ffe12d2973174ba78f919e059f452e97dec18e815fb66b968d0be0541cb087f3ae312941c58ecd372d8ff3dacf80dfd327e20fafaae67aae786f2d720c3c7e08d01479142fc36446b52f1ec02043497eb43389ed200b104f0488f10518ece2e041ec54f272e63fa02cd823e011611853bfd2de9e57a14a38a6172bef54c50a021b6e4a426f1d771ee9d2ab185411ade2c667e9245949f0e942abf9b21e6139e8299bfd7837aa5c9a26fd3a894faf066c6c863eca04c903ad3276c47cea80439b96e20881e9b717e9fd570aa03126e4ae0474c2a0d7c22921cd20e0c602941a2a15108f9324d782ecc3d62409653ab9c936943907645843122417cb0210e6320d66b25e64c3f3a18d7c339d6cf3591ee95e92ca4b9e409f622a12a577d905ee1ccdbc645487a67454a357a898906a9f8a55ceabeb41b09041351ff91e41e4e0863fdbdc406d8a7acacbc743691227d4d7c50b7c0e2f4d98fff1427ede0454b025fc83c8dde62cd1842b8f15002a995b16edd9ac4073e28dfb405de0d847061ce5f154ff0c19d56485a7bcc9eb84f7f04bf13f43951bae41c011c7459de18270670c7df424341ab105cfc3b1d10df9262e23425e8d00e410a5d27f6d9f82aad2881198d098a94f05fc2eb99f72d3fcaa68c5fef8e4b0e1f284a451e5a68574dc770e69255a030ec631691cc90a0ea3ff862d84b34632838e7b3c2ff5af544d476136b9dd62b58646b9f614af9fc3d48d66088a7f63c1186d033f6afa9e01f2037aad14bd2404f79c394cd51ee751014b6905600a0ce9dcf9cc2eb816d081eda3d28afc288fcb35e51bbc1832d76d6b97b6761f75b8f908570ea23823bb7bdd8a57f8c431b7fcb7b88837b26f4d3af523ef684a3875636da46e6008737ca1a85f2569b23908736613c381b555198d7a433bee146273eede269a0443157cc1d31cfe42bb58bad9e5523e9d87a2cb5eb16a82f9b84b51b8fb0540daf3f65b4799916fbf218da9fa742d92616f55fc303d339a52c87eef57fca8468118fe195cd458c2bc43cca66724acb968e88f81a679988ae7a4478674f7003a9c3f76fa9a580fb5b976ce51544ad33aa86bd5bc722d00f84fdebab3a8e19584ef6e5865afebe22207d1bf62167923c78f1e4c9fbda21fb23a3e5956b766f2ed5775482606084b1d0fdce41deb5ba0fdae5fdeee63405e47139cb10a15593cfa037595512e15360897577cc62ce634c3976b1e8f50d276736689d39b8eca4a7871b0d16200a5b191789d4dc5ca42831238dc0833457031419174697dea92e14b9c61eba542dd07038d52782e58845bd988ce14951e2e426c43d9c29ac08e893d93c074d54b500bf7b0c1e6f1f85d0aedb8f96ec07622e919dc856313a44e212597685189fb263daac6039222ab25f46d68f995c1ba74f4b9443f55f0030418cfc39b25be3c3722039364ddb451353a8fc2128969bbdbbb36c4570692143ededb9c0c5c47374deb39a1771d24e688afebd363c381d3a0842822390dd97864c92c42f67f363026cc8116ce5e556437af472eef07e58f52a557df9278e94e505c74dcbfd85611ccf40655cba234ac92f47e8d464934a8a6b1c5a6706da8c9514cc133a938798fa474f8c8cbfbfbebd8c077f22fefaae074720fb2e85ea13dda03c083a9ce202f1c7bc532a39dee3cdb6b3692a61e4bcaad58adb79c178277d17887b7de304ad190cf94dda073a19d6c398384cdebd2d46bb38ee0dd367cb0a089c876580878f52fdc49908f210ebf2ddc0ea076636126c0e84018c9522aa5a68eafd566cc247f841742c4a53665879e3c42af53fd03eb5c525695c62de2a09360729334c04a6b3aa59d3489e1423cade10413b057801caf35756e42b85464c8d24ca3876ddff1ff9ced03968f63500f567aa6023dbe90983a5f57991c61da85c7fd0629bc7f684a6174ff39225d929437c2c9a49493dce56034c975b8220d0aae11edf3dc65658d3fd3e1e6386937d97f7c6053c849e9869fe2080619dcf65fee396ad7d42f1db3a580929ed03667f7537709a85f4dc88d911d7a59b688e4a06c8b7057c1ec9cec7acf3549e8c813a8316221f6f45c9ff1b5c8201e853a295bef0fa48923672879d7a3f3417978cb6821d525e69a05620ba3a73de121ecbfe24f0a308e3c0336f5867cb299c1c39857592b59a44cbefdf49ac22f1295562dcf7fc7dad08453af0637095224a71317d07cf1a84d78601883d87845971756814a7a4b79f382c7c5eac96c0404bcd57190e097c6cdbed81ac6a7fdfb9c15f6b1f435e64cb234154e93ecd72e84bf9ec9e5463ad135914066522f8faadc41dfa20b1e0544002138f286305f7ed28c33724ab022d5f10ecc5766ef112bf4fa883e75bb919faf23200cfed0233d914659df5f93caf0a56dafb4aa98d742f52a848a49f3bc9ad36722b21dd40d0e5a03ffa7b89a73a203984c321b26515ed117a30d70d4daa99308e19f916200dd1bf4dd45333d22fe9e95a35f681ed752255a1e26d9df1b1fce3e4fbbfc95f14400c689914c91182855aefc1ca6f89e229a8764dd22af12cebdd224fe0f8cab04afd5d59d2fe858964f7dd0fa2a7bd94a81464010885a3bbb19a0fb5572b2ceb63d21a6a9804608fa18891edf7c69ad5fdd10d2b34592454eef94dd07b337e1cfdbebd9e3603e590e77165442735a6136eaa661c0e0bf451c8c2fd4caef0445d43cf970fcb9d2e181f7db522fb4555021b24af2b7dd6dee025214b4d5802d1333b228cda450633b5a2a304cb9f46d03a2e1df4ca826488b82d5ad79fecb000fe2633adc01cd03d25beb4fff5adbb3d55769d265e9f3a10f2bc21371c17d139110c8e18058c9c3baa67e483c3548baf0ac95e9740f052c3984a855725a3d49ddadee48eaadc50dc7233debe234c8efd41217998b02034efaacdef456fd5bb560fb54b11c62ce080626509e13278bacd24894373cb90f04eb44a68f9ec58d76c64483148175af6acd0eea6cb473a6eaa5b1e106641c5913d1133bb236090065eb275aed77dea90910c84afea2dc22cd79c192ad1f53e712633a5cad5c85e8e3aad0f30508c759f1c15e7c5d20b95b32c66d32e7b19c2ddebef26725fb96694e5349aa2e679bee20f6132236fe4dfbb1da95a5f7c8512f58d040d6bec97f3385fc886db5d83b989a6d31268049117f56e316ccc23395e032a0477096ca38ad60c34ae16f4e4d329da4f04a0ec002d38084c008b9c6453a5ed70aecfb10b2924b04935be21b7cb7fb05f25530d2cecb9d11cd0eaa73a622757a7fa46d19276b519414fcaa7794f71b6fd489ada9f7b4a9f9ccf8dd4db29e4bca623f48a41d0355c6c011bc30834ff882d41bd4fb6ea232b777c49157d36b0e9a1c51e943a3cf328d45a96f21abbaab1e494ba5adceb428966ffa7ede68e1f4b6e817a9502044617192a1f1079af7800acec0921ce5a123a1b12a82bbf86a2ead639a32c2740c36b1c730196e08d8661fa4679b4e056d2c390ed2b4f22a598b86124f11d046618ac36ecdbc1e7d303a3a798d068ccbc63c9432747dc0c1b8017ae98439c2e5843c4dc3ace66ca7dfa828135533db07bb1bd93a82349966968ad0321edbb5277064baff06c4c104d1c64c75b8f36e2563fa15304178354c218ca9b2fe0b3c6c688312506d4ae714ecbe14e1f6f2115e09fbc8829193eb7599e204c0dec8f032445d94741172ca458df0bf71826fa18143f3cc78a11afe2109adb40647138e2fa6c15aa13a4ba92651210003c0656d8554439124f21367ae4a58f4f970e0da60a083e09938370ee9582a944f5481b3935a0100addf3bf7ebf6b4e91be38755ca143284ffc8aa8cde6e293603a894b6379322175e960abc0bd1684d462bcd2327b477593e515df8eb4dfc8d3d700ea965cce24b7e84b2aa2cb3b7b67f45c81e730c02fe2c151e9bd7564c58a740a15e54ab1c3e333a71aa8fb481f304db1d26e874a84314026a654ab1998671525f22fc2cef3bdc8b0a59f2c1a807e10d062993eec589d61a587911a8f66851774949a333ae8e5e98dae248f0225d4008df783cbc608e2f71fc5af609e058fd22e284e3b8e4b3bce312eac704510e8aa70d73729163b1a544f32cac58534a041c46eb41438e09d03e0dc76677fd62d49d87a0757b6d6f4bcc6f9b551be66196acb58dce7e5360baedfe53861f83c2f05240d28dd4de1882f535e1e9d6410f3eeb320bb3e55c53d5d35b6012cb20c110719aed2a53a8e8779abc6b503711657fb4a4e10c1c6ee1f4e2f13728bc2d10ef28788ac50e61e37ac628679141a56d5a7ea9b21aca604abcbb8992cb9532c87119778dbeeeeb95c812d9fc791e13272cfad80db27b20584add19243a5a26606163c047677aee6f65a83ea1f93fd6c82fb5eee717f7b6257f11e5bc441b9178c5671f59d9511b2af6974d76d85994293483cd3869ab7ea6910b12a5431a81d5dd440ba33bd5adfb29404253243916910d9ece9ff93cbdc95d4f64aad2b0f6e2addfc4dfc0639233dd969a4e25606545533c1d1ecd3ce9542d6cc8a0e77733f8f1bf1aefab3ba697c79f5f5c9e182802e83132fbe8919ebc2f93719389aafc80f750151e06b126d35ac1987c061e4d7b652fe2660c57f9912b681ac7338204cde7e6372e509c29187863a762f504923ecd073ff2ad065fe92d5a324a709e97343e18dd3aa5a9e9f2a5511628af65ba38794dbebb7a5568f71515721dd26e5a59b98ad5d725fd20043d2b856ffc21bed8406bb1a5e2cca14a35306beeb68cbabe31dad783377b00f316062bc5b26492e5f226beace8d0c1017318df728ab4b9aacb84b870fff642cc7d3502604515e1658b1df5ac93d655a6fda063529dd58cd28ea5adb91b07657470d2dee39381ad31e21e6bdaea76a95f33d8e51991a803abcf881b7a5940395bdfd4327da5a5e8ee65af23cd19ef7a3a01b8c09a1ef78d5d7194b174c44bc7ce1e5a2cbe9637b47704dcc6b1ed4cbfe9d48072bf175a2fccba68fce6e10b6190b1721382e65e6ecfb34adca72064b44badec5179bf1bca616beb43cb5d644162ffd00857f1b86c9e59a149577b0dd8abad46aabf58f0a6ec0460dbc6386467c47d29fa15caa707f333ed84e603d77429dd92f4dcdaaf4639dbc8c236dfbb6a77d275e2dd0b6f196346f014d31532716e4f304ec494bc5621c46fcc82b0616f6b305037281ad46cdf8c8d97caaf73189bfb103b753e0fb5a78f886a58f509f09d89b9d1cd407dadb9a979715ff32d21efd8fef8b72bbc3ab26d3da1db2c7069b85967a68ebc1ac534721a8b7530fdf50bb0d00a9e0682f95e0e3134bdfb64f0722dfcbaa75ced56560c15090e3960592d4d4da939fc930b91c75abef23120550e6a74442740fdf631774bec0ad3164b6d3218c998e25ae1d807a96772f9c5cd8e5de469602f4287477660b7403661b560e80a790d57eb2a03f878cf757563d9776daa2747218bfb5c988fc1af5ba000404b76540610b197334ca0edc2cb1eb5957c4eab038d2a72012d9371545e2e6d3e3a9c9edfb350c6d03768c6751a97dc7c63320853df87fb6c0996881ef897a07bfd26d43c854318e54cd83e25af3c3fd85ff5c56fab53383bbf874bfb0a90266a167168a3b8fbb96a3a044b99f17c49e99b305afb7ea4a82329d5d57569c2b062f76b056cfc3afbada04332500cd0b671dd7ef8f7a328e77ac42d174fd310bfb90c5c7ea26740d13bae76a365c1004dd7e91f5e60872ba6d2134046dab707d3d9469c5921d0ddd1104555381bf03da83cc3fea32e6badfa9d51800ca551f3a65a70c402462866eebc02f70a4896a98049329498e270da1b961c4c16ce6121449c58bb059abb018391086374ca2ef1f99d3f0f4f6d5d07eec07db704bea365be1b3a1643b17492be541217e7e53aa1473c32af939a26ba6c4720ec845fe97dc2f7401eca818227ecb87fdeac6837b3eb85222ba6b7a20453a680a7796068195f5f901333ff173da8a9b9c59ff2dd2441b0fc39bc02a3b8b09aa50f76fd1e16bf51700683cd485fc1dbefc272ab4f9a26eb124c3ef804a7cb5e5a1b412a0ff2a55aa4cb48a7edc04fde968542ca685576d0cf49eef082d5773f9c21ff5cb41e889a12e36ddb0fc648951e71aa1a7b8424e733c380eeb2419d6a441088850583029506092d8e7e0851fe79ece3562a6c3842ca326a1b8be5f60235362f2250407f526a65245f964e6f3eef0b4b11d678995a49d1119eb6222a46c8a175fd6d3566dda57df56a28dd6309302cb33b47823edf2cb48483752bec788d4185b54e803c7ed4bb23f70d3b261bd8c9e9523bdf13fd2cf3dae992ec2666bd0a53f9971db67627fc22e4057916014625c35b8016133c3ef25d17d6ad11892b0f619caff8da058ee3718afa66affa6fa0d90e8ff855ddd4b15595798e5a09d4f08e4058f397b4b7323738afbf9f171cf058e06919b298fbc8814ada64ff426cd44ca6d6fafd358ff1f38bc340e1206449da3609a39c90dab6b7f4eab8c4b979e0cb85e13f916d80eb97b5097e46bfd2ae10c872e7e70f5f09f83eea91d30a4b3ceda239e05241a1844eea6532cd3e3168ea3507ef9fc4686aa37f1e9c1362d00c6b9e89ba564dd9cae9a38e9323023e5ba07436911fd3e2d3b1d6259d433a4a1bae7d2ab716e3847162d23525355bc826c5ec7cb117d197d83d1aadf934e5dd36b3c8c52dd10514e31e8d2b2e4565e11d052a2976954915fd4bd38f729eba48ff0a57bd302e506e8e450cbef9a8ee8ca4ae53ea56320bd9ae45ec3e2fe11d2f837106c80744c3e7d523ce2eef4714e8392a412cfc1959566f515944981dea89c80a6fd3fc91b79055bb06befb2b33ac4dbb1d0a213fdecf7afbd208459ddd878bc5e5db380c1ecfec6f53d394304355f8a8f0968037f7a4d4740e12ae5c39575a9c4cad4e5f3a59413b97d83b8f32de8413cacde2895f6e5355f9dc8cbdafeaeff32c84074df35d46570adb6fcec8ce556db0393cbc770191553e240c9cc3b164e954b0db7e255b03f8bb6a35b15b7c95a3f658a6c6ac112601a06a108956d3e7a0303befeb66f637fa63c8446069cd2052947e284097e9aeab292bb806efd4c0ffad56c6c67fdb66169b5fc2b8a191089aa34d7b10ada97d7ce3138560f439330e4ed6037d8acdf22fdc3ebda14a1e97c01e7e60f26e9ae2ffbd5ba592f68ce4d9358d598c4760f40c5aa3b7340fc981e6d45802868444ef54d3803266bc865ef7b5a3e8e607a5514c04139a396b358788ac4c8b38c5e3efe759e3d7cbc43cb42c0e18857c0cd1f5f8eb07ce2ceeb9abf5030184550c309226bb4c711f4a9c1bf4ba1d12620066f3180fa3729df635ed51772829f5bb2c5b530a88917e518058877dbeceba5a26f1e1b7ec75fb863c97f5a81f0dbf41043fb9be593e1cb3036abce075236c4d72273d1c04e58cf815e42a79e9f64804a6704396182444e13bf3fed17e81c79e3623cf75fbc5d5bb394027fe45050a1dc4e034e812b5c6074b3d15c6c0504c0876464fc2d15813f0eee0f6c4a7fb7890f4737bd3da478ab329a0b3580f2121c07ae0a293535526709d16bcaf7def4294147a0062181bdfa2ea32d052bf18daa6e1a1b8207db9b78411884f09c36f0d8f6e6e91a0e5290a4b45e9163ea6f18bb84eb304c9f0cc563af46a10d714c32c096943a29da69f634b9e98ecb302f886240e3ec99cb6b47acf5e084d57da0eec5ee31daf8e9e4337d337d676769910b779f730fe5fbfd7f0bb1e7090e0f1c8592d845eb63a42ef4e69899dadbafc6213605a6d22558ab59490d94667281251ee7621662a1a45ee312d1b7ea9b3a0d4bf25bba61c510de32405a3315aaf3f2ed7e02270e90cb91e323e85dac0316c6fa259e97a1e4710b235db509c3384f89ec00247182e5d5288e4895d9e33dcf56bfd0511debb3f923a2940d1116b852fca180a0a9f6e48fa1a3f795ff88e98f18c1fe4f669a0f60daa9637817de6aa3b8d00df9901fdb9cc259cf3d2449d113aecd8e93afeb1a9af4e8b373836e5a9c9664e9245cc9ee6d00bbc78e191872b2fb112164d2e9fb852e65ada5cae0fd4ba9c177af161760337c99f4f05c58e418de35d824ad300d6409b82476aa22e8039dceda726dbd4a9a9d1fc03d009bace1c9a4769a8c5bd54a6dbf409234a3eca478f3ababc4c972c1d3604ee4635e3d41a5c92e52af2ddf7419f7bc9b10b83742c52c924f3d029238ef636dd68060a9933024dbae1a2b178d749fd139c81ca4cf6025a95d4f6a2c9f09493c68f45592f5b6d3dd741a2d2e88f860f349c4fcd7fc024ec57ca60b23f024625b12a747c432e9f583e192784fb1091fbd5e307d5586ac053d4be4c76632895bbf41e540c29fce4b6abdf337f5e1a960b386958dad96318504de3a0451f9ccd110d8f2337b33f523f2fa8d931df8502b0f0034d8daa17495b9820d3591860698d8bcc1944ca002a139e8df1cc2655e547f8e3444650b62a83bc3746cc55ca7093f3152978e64de46e2ae3b59af83c9dc91da3cc4fb805be717064297264936fca83b53ba4df14f346fb17d5c9273722ca742b7505d100c55210060156ed52eaac24cb2bc97777b9b81bf59941127e60eaca89d0ee02b8c629024dffd738f86f51375a20faf0881a9c0599cfc693f9de5a027c2192ffab49b252a21b5fe0564a71cad0d57b287463a7bcb371f4e317645468a25e168219ea6b2579a82751c18e1922d7f5c30173ed1864ca77403ee9466502889d77d7bb7956e659d7be7fc36ae59b59dedcfc7d3ed6d793655d04c33b1eb6f215f44f23e57a8266fb6d234a8beae54381e64dfdae47b070f905ace092f5c213d1d8cb2fdb2914a6071d6663bc68139bc2a1d6dbd58fd84d5568d811a146f6ed2372afaf4aca312a66bb711d69d0b771796bc4fd9e5e4765c75cd0c863e6a6f0aa2244618ed807ae53410c60fd2a663fb2534f1bc550ae0b659435aa142c5a24c448ea8d771fa0e671f446775d1d21c927b0f61ab570ac60f060c4035548819b821c592846ab8d474649adc3972b0cdcb1bee96f16943d736cd7cbde238208eb7b8a48ebd17608d1e3a75129c6d6e8be35e008305d69525dfd8b0db442f1b405c717b7d949981f8a12f358032525ef084a1c998ff9448ffded7285f6d2523aa155a72bd8eb1bde486a8e4590c0bb7c3ab3684c3c53f9a245713e6064112aa98bc6403292a2e6fbd2bf30c132e42fb1ea79593ee9ba65afbe06d2f8c81a00a6bcaaa22cfc0b7a330687b492580aa64d8c4fa7977aa11800fd1510c5c0a17e48830116a5e35e67a013d59841df849d04d86810399a50224e7f8fc2207cf30775a5fd042c62edf2ff3a3698a305d279f0c9c8b577683637b1040715a2aa3c8089e49caea999ef6ab13b562dbef326e96d710d12387661ff198802177770c7b3adca1b9264582b8ca6bb78ae496e7fa4fa6182260eb44980b3cbfa9ac1bcec8cd2a70bee4fcf7f98be0d93dfd4f0fdae41e6334b1afd8766f3bb9296c01f0d17d60c5c1efd7a926476535e856c36eb24879025cf5a3f1ccb7f8277c5c94aa30d30435d60583d00f2b8efdb1b37a3dd47c83ba2bbf9bcd755b1467825a33c75cbb7c1d52c9832b307cf6f35a9b2ff996573b6ae5bb0e52199ea9249dc4938d8b9d033952fa9eb752e2af5afc693647a1fa28d961ae2888741c6c2c36bfdf7153705464105957ca29a04287fcd28af6d41fd61f3d6b1e7b07af41fe37a066c731361b24104fd7de79b11dc848d6fddce156830e0e2d7b4a6da22f5af689bfa442870ec37e8bb6611f68ecc3453fae14eee94d9b904a6b8fad2564f2d31e88a64226f6099781a4167989d87f9bf704f1108279a0011ace8baab9518365a6de0a69675f218e428c10510187412bfd1c4aab5799eb570b140c5e417627a136358a1438e31f052e80f6da4ee5aed1ea95f2654ad87c5ca8d3550d9d4a64fc013bc1bea7c03b432b4d1976685769d0dc0c53984a0f79bc43af48cd45bc8b3ab3491a4c2c69ce81c6a276a75fc6c5925914724eac1553d684ea3ec7232fee6334ab93bcc2083bea5d136d9795b5872d00761b73bea63bac5560df5341cd825641dda95d8c04a4fd24155008e1caf7ec374e9c6a66c87e93e525f9221e9516018dc872cbe1c71725ce15f603f12a0ddf5813fd57a53a16f5d56dac91ee8fa12c5d8313bbe47d3fdfada6a9d5892744b7d9af7a70c958159f36365d11e3603195f5e3561014642c5bf035d610dc2ed8f8765585a844f82b15a509b40f97fb5d1568367bfea81b759314dd3b9751a6177a49e2bb6dc1dfc9d320ef02504fee836aa66b772d100e4b900002428c021223a6a610ac2b96cf42f1099059026ee5719b9d8cf8ee00bc836ac5e4e0e4544c61e38abf3e0b70151a82baae287c468c400124729bb9435685ef90877a803e97db88227f8fc038cb31791203f8d9392c5a26121b22bfabfb82d3ca7ade3ab3e021ad46eb3e9db01116e02c2306f573e1f02571f6c5d4003d67ae971034030ed38cc64dd8beae01bfc114c9a709667680d992b130f1b0b5843dbf72dc4916b18c0f3dc1ed2e86da6b1bb100f85737a59ed70ceeda3fb9645255566f85bc0d8eab38562d2e6765faf5cc45f8a246da218f6f0d2b966556433ff22b348695bb7e6df8ef81e2de8fbe89a0ab500accb4caea339d06b80d515604416f87906606429a162928b6433eb45a37591ce84e31fb781627c625fe0f4a042de6e1638c6b402e9a5541bdaec1954a09e518a665e4843af96b135398301890f07fa43707575d96b3f49d5f36d1de80a4e670b881b5f6000c590143d7901a45 +Verify = OK + +# Example with 256 SHA-256 blocks +# +# digest = OpenSSL::Digest::SHA256.new +# OpenSSL::PKCS5.pbkdf2_hmac("256blockboundarytest", "salt", 8, 32 * 256, digest).unpack("H*") +Hash = SHA256 +P = "256blockboundarytest" +S = "salt" +c = 8 +DK = eb64bac8e24ae1b54266d757f0fabbc72a57f5dc5d03b8c39e65f2062939bc594d82acdd144120b322ca12fba07e113ea83b1ed2c1b33603d72c67c6ef31ddcf6a9547b5fab0655bf5a7c220a307a21491932dbbffb54f99ac997ec6bf898ff9005a88c72c7ee49126397f368f704e779dc25687af9b419b6ba8cc4e177f805f55242b627e980c0898a1ea46ba633e6c0db0a14f7fb323d26bed1a524387041f8c5f6e9edd0a4ea51e0fbae1b04b009d41049eeccbfa45702716fb57b9f4167082368a36f55e7aac656b3677595868415e9e57e7a5cafdf60eb7a8d66098f0be8f012caf9a78cf2f5c0b4d153f9fd067d781f39b9acd730b6fdc9d27f93946c0e0b184d86f7eaced5a8b734f5beab2b930789c18934296c6c86e28845607e9f6d1035c30a7ef5003b19336a56aea507e3c58360f091e70ff59c5869a9e0bd14d2dca4d0a144bcb607bdf583ef4230edaad75e4db16a8275eb74c4a4cf6163e6aa293ebd6ea10b5be8179693687c2cf9ff038ded9a5a32917bbd2c4a703b0500ee0a0373bb324b409358bbc30bedbb405875eb281e9a7dd58b89ca12a9dc8505c524a2d10cfe120250bd22b9b340a29256b58548dee0da72a16084a130fe6d734bb70811e855d20b85d85f662c9574be68238a88165c22194e4942cab792184050abb3a7e22fec3f58537af84ebfa8d858dc879115b2e71c34aad0f6591c64e11e2ff8218c6841ec9b81dd9affc3ea70cdeb09423e712251f4022fbc4d54e0c5d174e198ddd9c6c8587d0c8f3bdbec79b10d46fda6e354c0a8b3b59ba82dfa164369f3075d1ad93c69a716ba8a377c626b9f44e9591c530e72a65abddb15e3766ecd068fcfe046efb86bbc00bfc24fa50fa6ffdf1f84e6e0c0d335c00637f14414a7369f5d2288bc04f284c0730766b3f9fe8464559b61c2f3f4d6e08b1cbf578f186605601533860d5f69aad06dc993d4f0ad7142249f68e1531c60fb3791ede647dc499a6b9bdfc1efd7bc0b40b95c3caeeba615d0a9c2564151598db35a7752953a7b2a40162359b69a4cf9a591d05f38dce8968dd6b6f16f57609fde9a8af9f16ec3b8a40311aec06a5bbae97e77edf32d22772b72fd61c4bf9cf34049830270653be365cd24b46fb7894150fd9e84ae211493b4ce4a95e7d0aa1f12709ba65f7bd7d8c904a9f967ced8e30789616242f7f9054e596f610d7bed0e55c3c91546b8283d965cbc2a79d5ddc4224e1db662d97bbf35847ecca83ee9e4c23d5b30ac8e2608186930e621e8cfa316dcd02b9dc17d59bcbe7fbdfcb6ecf882ce0c122ac82dd305ee7fc08b18fd2d7f1fab397038b84f9bed0d6aff490d720764aaa32a6f5b73ec6ba2083a5fb0a9e1d97bca1038f235d7b13f1baafea051ae898a3b92dc15bc3f7fd87db77a00dbefb9601157ae806e23386f64683992de57bfa37c8e4bc72ca7894ddeb16b833619f430e7da701859608f609d93044283841154da70b62f9267e15c741d5dd0e86ef58bc3cdc4f64c8fc63b9f466cd5415dd8650f7f400cd5c53544bdfbb6fe68c239e4d8d2c07f6affd864802c495b6b4fd0f1fb968c90934f93ba25d21cd7249dc4e3ef1301746d37e67ba34a861bbfd5ae7ea9ed8d7e853855f0f7bd0314b04697980191f448d71d7aed082781b04e3c01c46cce86ee1b8807bd8cf64988370925305f59814bbcecf0e9d39a8c0daa85625ddea187d19f7e3d970b0739a56f3b5c8de17c946c5692dd0503f8b20a3fc401d6fc6990c2a42e81daa46df79727e6a5f03d5c5a616e33b077f68939df7f9ae8a09599cc3a0e0e36b23ff5df4eca1ea1c8b5223a0cf2abb96808adcdeaf68a49e767ac5f934f499b82d775e995a69cee0822d13492a3038bf78faf01d9f4d87ba1f3311c002b4e603671a2cf007352fca16c30ad307c030d70e5f9c091b2035e164dfd6b9014c9bb365a694f5198566a9d58eed322f6d71b6148c1191f9f8ed4c58c03c403fcc5a1de5ace76fa1c1a42aab81e3be73d312513f278d5de7d67e24c961d709a3bc252e11eb067ea98583543675119f21fbf264024f4d33b2f6f17e98aa06dfb409f16a8692d9c7bf0fa340b13c4826cff8b07efa5ba69defb90870b43f27b632c1b76ea7129865e18d7fc597007530852d307708b51287a85d1d6395b489156f18fcde58157f5100c7c8d595ffe37fb8c1077fa204e97a721d45be4dce7b473a5d02cc31b4346f534d52a7ae7461d12fe12fb80dd7124d95e7683d3ee6b521094c1181a4c84e0272d2e0359bf6615121838c0e7da6b344b479efe17e86b52999fc7de81852bb89e335ee54123c408d9cbca031a5b4d01cb736108f9aa1dae4775d1e970ce179c565bbde3bab82f8bd883afb25a66db21fec824db6f4a140c5008acb4cc3e518b6ca77e446cdc82b4d4d6792a9e1c8fe151e84d531d8e2d1c751967f9b3ea7a2387fe53711fc48ee7524f487a3c1af2590be648f6965869a97b88729ccc6578c3aeab055f16998c1750ee8c9358875ef48c37400d4adca39ed81a0bec5e43f4a5819dca470dc86bcbcd932c8bb4017880b3934844bb76c04e4a65285fda9fc0e4e4622b3b13f1ffbad3754fdff8a3705ad370ad089e590cc8b57c2e5618041042e808dfa003bb19d229cd60a849f345f9bf85f53496b1498caada27565312b909afef165d40d82bbe3405a404ded080ece28834129c2b199a4301d6c4ee6f0502afe3dbb3d7be80da9e6b5cb2188fbb73605b31ed4e6846e75d875ab586d995cb6e20b41765e86ece82db4ce6fc1c3e63fa9bb2d2a273e217a0235e97c7750c5a543757de8759009e243d847f79a1aaba097d540573c2fe0d9fe611fe1d30484b5ae60834206b9fb7ed8fe86813f661eeb01bb608965fd6f91501210cbd17ebe1c1f5965bde456c74b96faa771bcf293a544f862689f2972444b7ae83f536c86ff21b8d8abfe8f3274fcd5d86b3f189546f927cc92196722d2e3cf4a1cd54352ecaa4466b801217200b8b981398e08209f3d597dd4726eb8f3360e757613bfded0b02853cee281b45791d3ae996bbefca334cc35f3d0dfc6f53a3defffbbc4f620e65e916171c0511678ecc512f48a230548aa88dc3886ee91a9d6d6df6d3912fd64dfc80ecc5fa1ebd9a715ad846e0bbe41b09bd33f50fcacb1984ed5610ff1c898d9cb9e948929f3f9d26b8d48ce0014a5f7840d7e85a0f61ed764587e382cb9bb23e5476dd7904e062c66fdc62f26212f66b1f8f9fcf061a2de063a6e510680d7689c05740cb62ac66b97f4060a491aeca2f485d1c1575d85f495bec1619acd001547b05d2e55c661019f67fe2525730e535a235b4e5d1126a66f27c4a9ed3bdba43b94b4bca662731613629dfa088f615cfd4eac538cbe8f137653a9e47a0a6f4c86937f0bcc4a287319f5bd81bb3e187ec84b248005383a955540216385a8efcaa6ea1ad487a01405a636b76c09bd76157a4358fe5326735e0d68c53792d37b26d894e5149d9afd4fe8a18aff58c94d37659cfd1fda6af60cf8dca192bab99336638a4e82ee2e1559571b22bcceb3b2c83e105c526f36abe6deb90d0aa1e8828778e98da0b3e1b24a2ab43851edc6ac887ed3878b764a5da26aafb6269ed3dce51595823ee6d7a4242498159d50417a26a2915492e265a14e9bd3a339f9aaf064da98d8888cd13cd7d13dc18a1431d3ff973c46ef0d487ab619d3cbe5d4acdc658aaea89c02a8255bbc1a824e0df48f2775355be55419edac6c9edce3eed5c2025b8734d0602583b14a573b7236f21dd8dbafa6104b2c49bd2c7179e9e934bd2ecb52b55df6e54aff822b594c8f73dfadcce73727ffc68a4512a3be2f4e28557a6e8262192dc4f83971d4a366c4476d4415b33c6448d6261e69f7563eb1e0d30490f1ef6ae44321fbb291ab2eb8a120094231ef14a4c9caf84cceda7b8f8d3488010e566b8a526fd5ddad414e9f2f14c94a4fb48e4abbf4ea866a48054ab49440fb4d83ca1312f9a3eb82580c1842e8b497e9303bd4b0bce65c63977f3d8dca4b6d55c3b7d67cb4e28f37b469523d3fc1640dead462618806062a703127fdad1fde5e5f5d364c12ada00e306e9592b7f54f9c0e69a32985403f2ee4d33cc37c8709ae05e02f36bcf8d2b92c89a5b29c70fabec2c840dbd5f5adb63434a059c847b163bd79827d1f9af7b47f89f845f31a5d5a6a2f8eca15fb9874d5b6e14d91832d4004cdd59a26c75767d482f565126fb710347930360df8febc3e3566aff94c795d8e7d22e99eb0f8b9696d88ad95b53b74df9b181c5d35103dde3de068141c7d0fa89da6d92cb90012ab815efd7c8481be262987c4dc8db2bb851813988f1ad197f8e5e2c4222c1f0ba0220c5ca2b9abb21ecc4dd0dc21341870f3bcc5597dd6ecb7a7a003434d5cb8f97ebf2c026176e5b3fd14b4eee95c036062a92d19220a341fe0dd73facee271e474d2e43354a03a97ee2096da987e52023f573a703bfef64935e2f5ee5cb692cba060436fe703e0af1abfb19cd85ed8571b051696ff9698368fbcc7695407a479e859b8857520a17f702b45e88440d385ff7dbebfae69e2223e068c87c584041fa7896e864d4c793f3aa3097b3be2c267f73d15c8a37b19fcd658640aed95d1682abdb4933d38c4fd8f057b28a3d31a1c4efab41378cbcf0a08762e27d82979d6b9e6ba717f8e67f6c7e9924a021feea2023b0e8c77a782634d441d8def322151b8415ecda2fb3be81619dabca2e12404d309436b9820cd6a8c186669c678ecfb9591b5fa7651f21fe4efbf4953a5b718618896677fab8762c630a4ef7d37859c89a1395fb926af55bd58b561283e69fcddcb57d3d757005750cfa0aca71f08b44be90725f3670b845298ed96b8584e5615cfc79e6ca295abc9641fca7039253bd4b1b677e230251bf4e6a23465ff595ca740801962f124d6cb658aadbc4e4bd3323f251ac4347f5a71300e2a814cfeb0d52e26f5de00fa5e20cb88490273ade48623afefdd0d8311cc254cb76bff3ce1f6464bff0c610bbe76d96ca96b72d1046b3982fc81f8a0335a448ff423c3932cac3b6b52e3eca4779cdda85838b9f5737eb1ac0ea7e8d788882b18c2fa2753bab41046a5719d14fad1b892258f6a680779546797c7e93d00d3cbafbf8360888233686ab3e60bb556479c9022279435602ce0454c9db189a835eba32b7ec9a722fcb83120f7614939a211d6c7f43c25c5a61abb55ee37999a382139f0e373e6aaa4ee45f095f50de6f636b100452d20be72362fd52bb62bae54c9c4d333efae647e85f21057706a862d6e6a3215181fb42168d4db56fd4d55da007798099e7a5229bb0a50e2f0a6a91f9182d86afaa1317ba0e17b4446f3a64cd44e7904e70dde3faced7a78baadb1d410a63faac63f107b6ca692a6b568bb5bf49b7d8249466c338f1004f0029280ae1d20fc31f0baf884ac6faf8806934391be9fc7f2ea67bf1a69cefd92d2571b7ecba0e8629ffa5eb39a7f3b896a5f201ed6e87112fe710d9a82983f899fd7222e737c8ac2831c002800321cae79702b5e010c4a2e117bc316da9056474d587919cf8c1e1e64731b649968810858dd108ca918e9439945e7ca73497776e1fa8428c92ca4766a9d91660e3b88f890460bfff3086cfe4bb9de117790080299f6f88c0ab0fe080626f1765906c150a1758b14ee5ad28d630f7167d5f14a0ed1c7014b6faf32c482c0c44463712b8dcbdadd5e1e14102faf80c4a5580172249956419cab486a37db73bbb0e5ae322ced6c1f1d5b44ccec14387a1f4e7becf5680ed63e1355c2c895f9eef74c9f8dc6de7051f2e06b555edc92764246390080dc084383d9f52afb23191dd1aa1ce5787dcdd3619c06e00a1506e41a0ddcdd98572dc830797d0ab691c96da19fa7cb5eb415f86fd560b3ea8afb19ec30ad89deb484ef8917b7b36652aefdd18629147bd654be1d444b61a1ef78f833b6beb5169237da428fe1a3322e815e5429e15dd79a09475bd852ed75f4d686ca6fd9ae9b8c9bb592f89382c490d4eb9e29be291e733d85b0dc8a3c7b33f8bb141a3072d8f76b81bdb93fd04a901978f2378512e2b56bef1faae0645cc25ae33a69465161b766f7b8e6db360cfd89b0c6df0922111dc8488e1e871c91c4e660175556d9d3a373fe32677c75d8abd10abaca367c4c2bde573b26b9a667586868a4ed2c11212afc8538577bde92e0c7521f4385ae4ec910b3d46ffa91228b20188e173154c5b3302735c15539c1b1b8999547cfaa76406c18566c9fc26eea88332e8355c18c19464f2f9715640825ccf2081058229265f599b0871c18088a4c69766e65e3cdcae800466045c8eeb46baa6b254abaeb9881581ead324038ec55d341088b0cffaa3dbe62595cc5d70fdf8fda6f0dd704f91c3918ae0e55d0c9bacb00fbd25ae50bf9ae6e2c6b39a7f0eb83e7e65ff71c03fadd5cf0f019afff1d13af69ca52a135e48252997b305d471a81345673f153c25e72a0d5ef5bb432b11f5fa6d655544a6f09be377c0d9a02ed88d6b1aab40545df0392d3c184df739d86d003d0dafb816a6c1d59f54defec6481e875c33a3a620b7ca09207727e7c4458c86f4eefdf1f98b25cbc22d0b9126ac328e52695df3c053b361dad8266ee10444c53545481344fce9a3e6e7265d4f5ab0bf2931029e90741b3e06c95b2ca4b286460695b654cbd0f860fac5f9691d3e7c9440b11210733c8cd6fd1509000d9b96790c3996e4214774419ee338b6d657220aec02a92a4244520124bcf4aab91fea08a8f5a448a6b020098f3eb8be280765159d492607061d1507e7ca1d086406d363deffa149784db21eeae341cef225b79ac9f509f6b3234161d71443c3802f612ffb95a744d9af753714a57fe7dd6832ddfa7d817872a8b21959c1da51e0264d6ab6dfebc532445b485bc9256bb941b8ae2f68f2698804ce8b454f856bfbf68cb87cf47efe5b305bbbd05b35cfff4926e2f29cd2fc5dc79e19623745900a0f381437e5359dc728b3d5a7159abe4395282744d57cd7dba2c9c3dc92a1cc245a18ccc6aee7371c99bde2777619030918875759fa9e3e9d39695544ab43bcdd407d00e818d53c7d6476c4fde7106c6568a6e098f50f27b91a0b7511beaaba617080a8cc252ad6df2dfe36bcfdd4e48dfc985df72424323e0e733b94778fe93a793e7608190d0d3ee0fd70b26adc9ce5110ee579b35a3e9dd0634d532e9131ca7b81f75d0c4f6018449f9e831dbfabe13b8b95562c3f16ff6c767c7db568782027745668bcb1f68e5b2d5f57067e62bce76aa07d7abddeeb4f3d844f0289e16a433f72d979916d44d5dd7917dfc8c79ffbedf4829e5c941d4f094433371a1661b967d62eaf34c11edafadb61cb7cad97221b1def5f757b520d232e8a87eabae2b9c98595b7710861541bc03206bd37b20eafd66a7ec9a8a1acf530de3ad02a11b5c168a06f7238a31185f04548ce2ccfba960b86106c04d441333c2f0a9b1a034fedc3d525b28971ade46af0a612faf10ee0a4ebf72f4cbc3df046f354f7289eb93fcd4a7adb84c1e3d17bdcb2a52bcde29b6056cf73e919e4b09ec0cdea6d4c2ad316d8635aab2ae27a5e6709b0397c9e4f14750ed01f01f1042b8cf5bac1a7f71b937f17bbadefb939461d3109836653e57eaa4b444f501800f399adff23a8a0c571161c9ef952337fdc6f6816125c8223eedfad059d33d6b61f3a976e7cd08abfa46b462083747e8ae250482d0a196ca2a9e3e5abf1541f14aa94faacf1a1c3cc95281774c587fc085bbeccba8565c966941841c0cf05eb2b3dac6e2e340c8f5d658d20d6d4ba6380358d52491609a035774cd5a60c7049afa43dd797db51028b60c550d855c18e1fa80d9da21453e6e7973ff2dbd40ac828ff4e2026dcfc6d1d0b5d8c82a2aa77fccd6d29e218e0524acd9d28f0a1d3073292f4e487af8dffc6dcd1fa20a2918820324e201ac81cda06f52dbbfae9635468f587f7fc2d36dce0891986006a3da26f7db6cf29af463ebd54c05c917ac1e8dcdf5e1a05eb78a56e231b65aacd9784c10deed1668bd293d38b5916ee3f5dfdb1d20f72f138c56cd9e5fb65652b7da41e9c1370ce9abdcbc5c75f41f1a1ddf78392c3af22f29d470d3ff0a3e933ae734c6192f0a9923fc19923253b8ef43e02fc445d2968f5162e56709fd687fdfeee4be2b5362af6d780b025959763bc37dce741909a6ad557e4278ab8656661659e16379df6f6929f4bc0c439d91b320b5fd6ab32369bdb981bad524f305079196b9b9035cae7c818050c68ba6123e5e8a24978d16983753ee1066bd96368467cf26d63107769618946068689bb163e406a7aeded78afda092b3f13ed0a607c8941371579e43bc6913fdb8ff5ef4041778cc52990da86b38fcc99a1e7c2a04cd243f2ecbb8fe2874916741ccd6af8de7aef7aaa8f57a851fc3fca5c6132e3f980417f15c55bb80a429746028f028e1c09057ac370964aedfd0784f8caf4f378c2d7a8adb4124540535dd823968ab6707aa4ae062fff41361cb1b8f23805c262a25c81f4649a8dde4295e8f6649640d6a033da3a5814e47933f56052a19c27add21b009bf4d371972c72138f13511cc3ce647ab9736fe8542557c159b9f8c67db4a99aa9b3de34460ae922cb4e9ca58252dd945f82c5ff382e1c708883793a123d018039b144f7d7da1a86f7af1bfc6eb4bc8c889c2f87dd0bc17b276e1f6d32dd06b87b348c78bcea20e866c42c6984454101d93f1d41378a1664b3f48fc124a385641118e8fad1d5dcbf182b92e4ec0d37fd16cf6f6d77f288be41e90a18c1f284c5fff61cd315097628c894b14284ee5953cb205909648fcf9665cd406cfbae9976f010bc1eaeb6fe62b9eeb3df7522ce31753eac60ea0bd533477fe54052f2af96798cdfa24c801cf2bff25715f52da9e467b59309701ba129b7454c592cbb931b6944d423dac07b41341047e3d7614592945ddf48bf5207deb2bfc59e41514d775e974d86704cfe61c9ba73d279f18f4107c662d49c602f1c041e1d32de6b742bdcb4250273f41a9b304e6bdef2cbcc271d32071c4ab3281ee7e8abf94d128059381bcfd3b113f6dfc59a848f6f47b9a33695ce46e5956ee8d15849acd17720f28d34b7faad46d5d8d8027e76c69c425175eb564d28e748c71dfacec3baa4e8d8bc34b89b64c51ae04e5f44008bdb86149213fe4521587a8a396433f7f09ffaaa603e178131fb628e0122f5f829ce517521c8dd783d0c170f2d945ea8b7721c790b8d8320610e64fbb4ccd6a099566342b7a355ac4bfae8603f005f3ce923a7d54b99b2a4b44aa9f7db887d7bcc655dc1b23bbfec3739bd14947181577ed2561495c9f14229141e3df79ea968e05ffa191ee2d89662a792e479a5d5a7b3cc23f9fa991243caa9b5860f8913739913151ddb1242b7c61a658cfc0e28bd2a058715175046e6a341873f386d97e52f43060c13e961eb577196b4a226a1b57e90a2e6448b319726c28424c232181a1411ac1fbcf241082774e854b6ac0511658bdd679e43feedea2b7f9d609bf7020a6136d766008c8fab7608bf259c2da25069e1e5fcbdbc1b52e0095b3ce136d7f8e844681f5f8aeb3a2b979cdc64b704a9cc0ec68bb09fa9ea22ae4ad9070152da2f305ee6dce978e638c2781db8f4ff20bf56130e8037b92f164c55eaa971c1a58966dffd66e3971afd1212bbe597f36d3be08a7045e5dfabcadd7b830cb2f55d10b83d0ffbc5492cf05d33b1046cfb92a4dfa8ab719548bdd98243ca15ca2e3d5cd956bee98bc0608250c583488f7c1d4ac7abae43b1c49452c352d168ec94b570ca465a358d7c145a6f9d03a2cbb1d4be9c506abced9493cdb4a087de79616bc7ffa74f5a6699bfa83500ccebdb2619a0b485c6ca8a77d0dba45a20d92d44f5f3c0638f6acb457238e0860aa33db923237fcbc91551a44ee71197ed3427faaa51e4ca48a8bf2144e81b5bd97cbfef5093ef204c5945067b7223fcaabf51ee170cdf7c9f2d2f3988341054856703e0f78cc0d3cb264d47d507e1b7c28e1674cd0099a40b73e14c42ad3ca3683fbd13e155d446be2ac05a826cb194d4d564a49064bb1e4d11ed77598c5bcd189755384c94c2ca2002445570245ffda888c0ae1b22feb1c474f79faeb73921590ce1c82c442f11baedef2fe59e4006f6637e046cfc24475b53d0742570abdab779e60a7bade19f01b57bd3e82fd15542b051085e78c323935c6eacd9f18f3a9724ca686b525b189497d1e43df902b4040f63e18d19b8134a32b14685f4b99fef0b98df8d01965a996282a84ea5f27ffb828c899bebbba32827a41caa763beba7aa9237f7e8ccbdbd0bc6ff250c40f7e573c34dc7cf4f8caf53a2ec1c3c3fe5d7233177ba3a25df5b903151381721e7d7fb9cfadb2de316eec54854d971f0230dc2f388d6871985770c0c7b1de30c1fc69fdb88fbdd1df6d5d44278a8f9c3df86dced494dab31c71bdde66a21e6d9ef62962384969d02a578d61ff8717d1a73417a4526f4fb2c90428ace62f17dc84f8438f66f97d1cede7855f7a3d3d9d0383266a1036e1ef1cfb3ebb654f731acab25c922687a239c5759c3d09d457a0bfcb872106427fa5bbc0f1b9f031f97970f05812aafe998d30b7cb6c5704170267a8647b4a4565dc4396a9580c1035bc71cb2ba0569388b69ffa3ae11dd3722d922cbdc318b2f39676a5df27f7066497779059cd997395102c7a29b54a5d2fb2641e0ff8537259e6aabfb5a8c68e1472c2d8b9c72c23a0841f360e8590ad968ce3d0ff99902e20f28eb3c3edba19efa9ac46e630e99b7b54f29366a3cdaa6964608c6cbfb12166656488772b20b64b6ccb6e46b9083adcc850b5bc3c7935500434e75e95313ee15a24650da33e9e3ebaecf8669289c564eb424cc423e894625a11de6094fbb29a59785c9169e2f9a143002c4fb809fc5bfef8ffd9c26a2315f79f6a0b0af1f89d77f114c4c50cb5e02a77692542688dce8c4a39bfb9692623380de001e9751352e2a896d312494adbbf7c8a505145f41c49957077f6452c93b9068ac446430c527399a318995a62cad56d4e2af5cb0579f6d45fa9d56b0d9b43856aea9d394be825a6e182e71e4cfc7a537f86806f6e771cab58de282f12290807460eacc1358e67694e00afc7b93e67d7faf90cd050721302a35fa169c17e1982130c7112a5f3e024bd2ebcd4329ce54f0eb97eab59c5e1599ffb1b61c4f60903f2c8aeba51e5b09fe1c1e8e2306cc11c409fa02f65a90d33383ba70ba0256cac802303e95ba3401bd4667f5461651738d164e890d2b23972e14b675f7c209638a55eacaba3d1874eed6a0605a502a49880fe9cfcf5b0ea99bb731916071a3bed26a4a4309368c8dc9dd23e85c23de846f451b89ba1a7ab5d4e1aa8461775aa4cdddaebc31123860d402332e14fcd415fd139e8cb3be5371bdb79b3bf10f691319b320d28f189de215290ba53617acfc4b1122c8bb5f538b3a24a007b6b6a00c75ebc8aded4d2f874ab909b34ba40a662fa90219c447d85a7 +Verify = OK + +# Same as the previous test case, but the last bit is flipped. +Hash = SHA256 +P = "256blockboundarytest" +S = "salt" +c = 8 +DK = eb64bac8e24ae1b54266d757f0fabbc72a57f5dc5d03b8c39e65f2062939bc594d82acdd144120b322ca12fba07e113ea83b1ed2c1b33603d72c67c6ef31ddcf6a9547b5fab0655bf5a7c220a307a21491932dbbffb54f99ac997ec6bf898ff9005a88c72c7ee49126397f368f704e779dc25687af9b419b6ba8cc4e177f805f55242b627e980c0898a1ea46ba633e6c0db0a14f7fb323d26bed1a524387041f8c5f6e9edd0a4ea51e0fbae1b04b009d41049eeccbfa45702716fb57b9f4167082368a36f55e7aac656b3677595868415e9e57e7a5cafdf60eb7a8d66098f0be8f012caf9a78cf2f5c0b4d153f9fd067d781f39b9acd730b6fdc9d27f93946c0e0b184d86f7eaced5a8b734f5beab2b930789c18934296c6c86e28845607e9f6d1035c30a7ef5003b19336a56aea507e3c58360f091e70ff59c5869a9e0bd14d2dca4d0a144bcb607bdf583ef4230edaad75e4db16a8275eb74c4a4cf6163e6aa293ebd6ea10b5be8179693687c2cf9ff038ded9a5a32917bbd2c4a703b0500ee0a0373bb324b409358bbc30bedbb405875eb281e9a7dd58b89ca12a9dc8505c524a2d10cfe120250bd22b9b340a29256b58548dee0da72a16084a130fe6d734bb70811e855d20b85d85f662c9574be68238a88165c22194e4942cab792184050abb3a7e22fec3f58537af84ebfa8d858dc879115b2e71c34aad0f6591c64e11e2ff8218c6841ec9b81dd9affc3ea70cdeb09423e712251f4022fbc4d54e0c5d174e198ddd9c6c8587d0c8f3bdbec79b10d46fda6e354c0a8b3b59ba82dfa164369f3075d1ad93c69a716ba8a377c626b9f44e9591c530e72a65abddb15e3766ecd068fcfe046efb86bbc00bfc24fa50fa6ffdf1f84e6e0c0d335c00637f14414a7369f5d2288bc04f284c0730766b3f9fe8464559b61c2f3f4d6e08b1cbf578f186605601533860d5f69aad06dc993d4f0ad7142249f68e1531c60fb3791ede647dc499a6b9bdfc1efd7bc0b40b95c3caeeba615d0a9c2564151598db35a7752953a7b2a40162359b69a4cf9a591d05f38dce8968dd6b6f16f57609fde9a8af9f16ec3b8a40311aec06a5bbae97e77edf32d22772b72fd61c4bf9cf34049830270653be365cd24b46fb7894150fd9e84ae211493b4ce4a95e7d0aa1f12709ba65f7bd7d8c904a9f967ced8e30789616242f7f9054e596f610d7bed0e55c3c91546b8283d965cbc2a79d5ddc4224e1db662d97bbf35847ecca83ee9e4c23d5b30ac8e2608186930e621e8cfa316dcd02b9dc17d59bcbe7fbdfcb6ecf882ce0c122ac82dd305ee7fc08b18fd2d7f1fab397038b84f9bed0d6aff490d720764aaa32a6f5b73ec6ba2083a5fb0a9e1d97bca1038f235d7b13f1baafea051ae898a3b92dc15bc3f7fd87db77a00dbefb9601157ae806e23386f64683992de57bfa37c8e4bc72ca7894ddeb16b833619f430e7da701859608f609d93044283841154da70b62f9267e15c741d5dd0e86ef58bc3cdc4f64c8fc63b9f466cd5415dd8650f7f400cd5c53544bdfbb6fe68c239e4d8d2c07f6affd864802c495b6b4fd0f1fb968c90934f93ba25d21cd7249dc4e3ef1301746d37e67ba34a861bbfd5ae7ea9ed8d7e853855f0f7bd0314b04697980191f448d71d7aed082781b04e3c01c46cce86ee1b8807bd8cf64988370925305f59814bbcecf0e9d39a8c0daa85625ddea187d19f7e3d970b0739a56f3b5c8de17c946c5692dd0503f8b20a3fc401d6fc6990c2a42e81daa46df79727e6a5f03d5c5a616e33b077f68939df7f9ae8a09599cc3a0e0e36b23ff5df4eca1ea1c8b5223a0cf2abb96808adcdeaf68a49e767ac5f934f499b82d775e995a69cee0822d13492a3038bf78faf01d9f4d87ba1f3311c002b4e603671a2cf007352fca16c30ad307c030d70e5f9c091b2035e164dfd6b9014c9bb365a694f5198566a9d58eed322f6d71b6148c1191f9f8ed4c58c03c403fcc5a1de5ace76fa1c1a42aab81e3be73d312513f278d5de7d67e24c961d709a3bc252e11eb067ea98583543675119f21fbf264024f4d33b2f6f17e98aa06dfb409f16a8692d9c7bf0fa340b13c4826cff8b07efa5ba69defb90870b43f27b632c1b76ea7129865e18d7fc597007530852d307708b51287a85d1d6395b489156f18fcde58157f5100c7c8d595ffe37fb8c1077fa204e97a721d45be4dce7b473a5d02cc31b4346f534d52a7ae7461d12fe12fb80dd7124d95e7683d3ee6b521094c1181a4c84e0272d2e0359bf6615121838c0e7da6b344b479efe17e86b52999fc7de81852bb89e335ee54123c408d9cbca031a5b4d01cb736108f9aa1dae4775d1e970ce179c565bbde3bab82f8bd883afb25a66db21fec824db6f4a140c5008acb4cc3e518b6ca77e446cdc82b4d4d6792a9e1c8fe151e84d531d8e2d1c751967f9b3ea7a2387fe53711fc48ee7524f487a3c1af2590be648f6965869a97b88729ccc6578c3aeab055f16998c1750ee8c9358875ef48c37400d4adca39ed81a0bec5e43f4a5819dca470dc86bcbcd932c8bb4017880b3934844bb76c04e4a65285fda9fc0e4e4622b3b13f1ffbad3754fdff8a3705ad370ad089e590cc8b57c2e5618041042e808dfa003bb19d229cd60a849f345f9bf85f53496b1498caada27565312b909afef165d40d82bbe3405a404ded080ece28834129c2b199a4301d6c4ee6f0502afe3dbb3d7be80da9e6b5cb2188fbb73605b31ed4e6846e75d875ab586d995cb6e20b41765e86ece82db4ce6fc1c3e63fa9bb2d2a273e217a0235e97c7750c5a543757de8759009e243d847f79a1aaba097d540573c2fe0d9fe611fe1d30484b5ae60834206b9fb7ed8fe86813f661eeb01bb608965fd6f91501210cbd17ebe1c1f5965bde456c74b96faa771bcf293a544f862689f2972444b7ae83f536c86ff21b8d8abfe8f3274fcd5d86b3f189546f927cc92196722d2e3cf4a1cd54352ecaa4466b801217200b8b981398e08209f3d597dd4726eb8f3360e757613bfded0b02853cee281b45791d3ae996bbefca334cc35f3d0dfc6f53a3defffbbc4f620e65e916171c0511678ecc512f48a230548aa88dc3886ee91a9d6d6df6d3912fd64dfc80ecc5fa1ebd9a715ad846e0bbe41b09bd33f50fcacb1984ed5610ff1c898d9cb9e948929f3f9d26b8d48ce0014a5f7840d7e85a0f61ed764587e382cb9bb23e5476dd7904e062c66fdc62f26212f66b1f8f9fcf061a2de063a6e510680d7689c05740cb62ac66b97f4060a491aeca2f485d1c1575d85f495bec1619acd001547b05d2e55c661019f67fe2525730e535a235b4e5d1126a66f27c4a9ed3bdba43b94b4bca662731613629dfa088f615cfd4eac538cbe8f137653a9e47a0a6f4c86937f0bcc4a287319f5bd81bb3e187ec84b248005383a955540216385a8efcaa6ea1ad487a01405a636b76c09bd76157a4358fe5326735e0d68c53792d37b26d894e5149d9afd4fe8a18aff58c94d37659cfd1fda6af60cf8dca192bab99336638a4e82ee2e1559571b22bcceb3b2c83e105c526f36abe6deb90d0aa1e8828778e98da0b3e1b24a2ab43851edc6ac887ed3878b764a5da26aafb6269ed3dce51595823ee6d7a4242498159d50417a26a2915492e265a14e9bd3a339f9aaf064da98d8888cd13cd7d13dc18a1431d3ff973c46ef0d487ab619d3cbe5d4acdc658aaea89c02a8255bbc1a824e0df48f2775355be55419edac6c9edce3eed5c2025b8734d0602583b14a573b7236f21dd8dbafa6104b2c49bd2c7179e9e934bd2ecb52b55df6e54aff822b594c8f73dfadcce73727ffc68a4512a3be2f4e28557a6e8262192dc4f83971d4a366c4476d4415b33c6448d6261e69f7563eb1e0d30490f1ef6ae44321fbb291ab2eb8a120094231ef14a4c9caf84cceda7b8f8d3488010e566b8a526fd5ddad414e9f2f14c94a4fb48e4abbf4ea866a48054ab49440fb4d83ca1312f9a3eb82580c1842e8b497e9303bd4b0bce65c63977f3d8dca4b6d55c3b7d67cb4e28f37b469523d3fc1640dead462618806062a703127fdad1fde5e5f5d364c12ada00e306e9592b7f54f9c0e69a32985403f2ee4d33cc37c8709ae05e02f36bcf8d2b92c89a5b29c70fabec2c840dbd5f5adb63434a059c847b163bd79827d1f9af7b47f89f845f31a5d5a6a2f8eca15fb9874d5b6e14d91832d4004cdd59a26c75767d482f565126fb710347930360df8febc3e3566aff94c795d8e7d22e99eb0f8b9696d88ad95b53b74df9b181c5d35103dde3de068141c7d0fa89da6d92cb90012ab815efd7c8481be262987c4dc8db2bb851813988f1ad197f8e5e2c4222c1f0ba0220c5ca2b9abb21ecc4dd0dc21341870f3bcc5597dd6ecb7a7a003434d5cb8f97ebf2c026176e5b3fd14b4eee95c036062a92d19220a341fe0dd73facee271e474d2e43354a03a97ee2096da987e52023f573a703bfef64935e2f5ee5cb692cba060436fe703e0af1abfb19cd85ed8571b051696ff9698368fbcc7695407a479e859b8857520a17f702b45e88440d385ff7dbebfae69e2223e068c87c584041fa7896e864d4c793f3aa3097b3be2c267f73d15c8a37b19fcd658640aed95d1682abdb4933d38c4fd8f057b28a3d31a1c4efab41378cbcf0a08762e27d82979d6b9e6ba717f8e67f6c7e9924a021feea2023b0e8c77a782634d441d8def322151b8415ecda2fb3be81619dabca2e12404d309436b9820cd6a8c186669c678ecfb9591b5fa7651f21fe4efbf4953a5b718618896677fab8762c630a4ef7d37859c89a1395fb926af55bd58b561283e69fcddcb57d3d757005750cfa0aca71f08b44be90725f3670b845298ed96b8584e5615cfc79e6ca295abc9641fca7039253bd4b1b677e230251bf4e6a23465ff595ca740801962f124d6cb658aadbc4e4bd3323f251ac4347f5a71300e2a814cfeb0d52e26f5de00fa5e20cb88490273ade48623afefdd0d8311cc254cb76bff3ce1f6464bff0c610bbe76d96ca96b72d1046b3982fc81f8a0335a448ff423c3932cac3b6b52e3eca4779cdda85838b9f5737eb1ac0ea7e8d788882b18c2fa2753bab41046a5719d14fad1b892258f6a680779546797c7e93d00d3cbafbf8360888233686ab3e60bb556479c9022279435602ce0454c9db189a835eba32b7ec9a722fcb83120f7614939a211d6c7f43c25c5a61abb55ee37999a382139f0e373e6aaa4ee45f095f50de6f636b100452d20be72362fd52bb62bae54c9c4d333efae647e85f21057706a862d6e6a3215181fb42168d4db56fd4d55da007798099e7a5229bb0a50e2f0a6a91f9182d86afaa1317ba0e17b4446f3a64cd44e7904e70dde3faced7a78baadb1d410a63faac63f107b6ca692a6b568bb5bf49b7d8249466c338f1004f0029280ae1d20fc31f0baf884ac6faf8806934391be9fc7f2ea67bf1a69cefd92d2571b7ecba0e8629ffa5eb39a7f3b896a5f201ed6e87112fe710d9a82983f899fd7222e737c8ac2831c002800321cae79702b5e010c4a2e117bc316da9056474d587919cf8c1e1e64731b649968810858dd108ca918e9439945e7ca73497776e1fa8428c92ca4766a9d91660e3b88f890460bfff3086cfe4bb9de117790080299f6f88c0ab0fe080626f1765906c150a1758b14ee5ad28d630f7167d5f14a0ed1c7014b6faf32c482c0c44463712b8dcbdadd5e1e14102faf80c4a5580172249956419cab486a37db73bbb0e5ae322ced6c1f1d5b44ccec14387a1f4e7becf5680ed63e1355c2c895f9eef74c9f8dc6de7051f2e06b555edc92764246390080dc084383d9f52afb23191dd1aa1ce5787dcdd3619c06e00a1506e41a0ddcdd98572dc830797d0ab691c96da19fa7cb5eb415f86fd560b3ea8afb19ec30ad89deb484ef8917b7b36652aefdd18629147bd654be1d444b61a1ef78f833b6beb5169237da428fe1a3322e815e5429e15dd79a09475bd852ed75f4d686ca6fd9ae9b8c9bb592f89382c490d4eb9e29be291e733d85b0dc8a3c7b33f8bb141a3072d8f76b81bdb93fd04a901978f2378512e2b56bef1faae0645cc25ae33a69465161b766f7b8e6db360cfd89b0c6df0922111dc8488e1e871c91c4e660175556d9d3a373fe32677c75d8abd10abaca367c4c2bde573b26b9a667586868a4ed2c11212afc8538577bde92e0c7521f4385ae4ec910b3d46ffa91228b20188e173154c5b3302735c15539c1b1b8999547cfaa76406c18566c9fc26eea88332e8355c18c19464f2f9715640825ccf2081058229265f599b0871c18088a4c69766e65e3cdcae800466045c8eeb46baa6b254abaeb9881581ead324038ec55d341088b0cffaa3dbe62595cc5d70fdf8fda6f0dd704f91c3918ae0e55d0c9bacb00fbd25ae50bf9ae6e2c6b39a7f0eb83e7e65ff71c03fadd5cf0f019afff1d13af69ca52a135e48252997b305d471a81345673f153c25e72a0d5ef5bb432b11f5fa6d655544a6f09be377c0d9a02ed88d6b1aab40545df0392d3c184df739d86d003d0dafb816a6c1d59f54defec6481e875c33a3a620b7ca09207727e7c4458c86f4eefdf1f98b25cbc22d0b9126ac328e52695df3c053b361dad8266ee10444c53545481344fce9a3e6e7265d4f5ab0bf2931029e90741b3e06c95b2ca4b286460695b654cbd0f860fac5f9691d3e7c9440b11210733c8cd6fd1509000d9b96790c3996e4214774419ee338b6d657220aec02a92a4244520124bcf4aab91fea08a8f5a448a6b020098f3eb8be280765159d492607061d1507e7ca1d086406d363deffa149784db21eeae341cef225b79ac9f509f6b3234161d71443c3802f612ffb95a744d9af753714a57fe7dd6832ddfa7d817872a8b21959c1da51e0264d6ab6dfebc532445b485bc9256bb941b8ae2f68f2698804ce8b454f856bfbf68cb87cf47efe5b305bbbd05b35cfff4926e2f29cd2fc5dc79e19623745900a0f381437e5359dc728b3d5a7159abe4395282744d57cd7dba2c9c3dc92a1cc245a18ccc6aee7371c99bde2777619030918875759fa9e3e9d39695544ab43bcdd407d00e818d53c7d6476c4fde7106c6568a6e098f50f27b91a0b7511beaaba617080a8cc252ad6df2dfe36bcfdd4e48dfc985df72424323e0e733b94778fe93a793e7608190d0d3ee0fd70b26adc9ce5110ee579b35a3e9dd0634d532e9131ca7b81f75d0c4f6018449f9e831dbfabe13b8b95562c3f16ff6c767c7db568782027745668bcb1f68e5b2d5f57067e62bce76aa07d7abddeeb4f3d844f0289e16a433f72d979916d44d5dd7917dfc8c79ffbedf4829e5c941d4f094433371a1661b967d62eaf34c11edafadb61cb7cad97221b1def5f757b520d232e8a87eabae2b9c98595b7710861541bc03206bd37b20eafd66a7ec9a8a1acf530de3ad02a11b5c168a06f7238a31185f04548ce2ccfba960b86106c04d441333c2f0a9b1a034fedc3d525b28971ade46af0a612faf10ee0a4ebf72f4cbc3df046f354f7289eb93fcd4a7adb84c1e3d17bdcb2a52bcde29b6056cf73e919e4b09ec0cdea6d4c2ad316d8635aab2ae27a5e6709b0397c9e4f14750ed01f01f1042b8cf5bac1a7f71b937f17bbadefb939461d3109836653e57eaa4b444f501800f399adff23a8a0c571161c9ef952337fdc6f6816125c8223eedfad059d33d6b61f3a976e7cd08abfa46b462083747e8ae250482d0a196ca2a9e3e5abf1541f14aa94faacf1a1c3cc95281774c587fc085bbeccba8565c966941841c0cf05eb2b3dac6e2e340c8f5d658d20d6d4ba6380358d52491609a035774cd5a60c7049afa43dd797db51028b60c550d855c18e1fa80d9da21453e6e7973ff2dbd40ac828ff4e2026dcfc6d1d0b5d8c82a2aa77fccd6d29e218e0524acd9d28f0a1d3073292f4e487af8dffc6dcd1fa20a2918820324e201ac81cda06f52dbbfae9635468f587f7fc2d36dce0891986006a3da26f7db6cf29af463ebd54c05c917ac1e8dcdf5e1a05eb78a56e231b65aacd9784c10deed1668bd293d38b5916ee3f5dfdb1d20f72f138c56cd9e5fb65652b7da41e9c1370ce9abdcbc5c75f41f1a1ddf78392c3af22f29d470d3ff0a3e933ae734c6192f0a9923fc19923253b8ef43e02fc445d2968f5162e56709fd687fdfeee4be2b5362af6d780b025959763bc37dce741909a6ad557e4278ab8656661659e16379df6f6929f4bc0c439d91b320b5fd6ab32369bdb981bad524f305079196b9b9035cae7c818050c68ba6123e5e8a24978d16983753ee1066bd96368467cf26d63107769618946068689bb163e406a7aeded78afda092b3f13ed0a607c8941371579e43bc6913fdb8ff5ef4041778cc52990da86b38fcc99a1e7c2a04cd243f2ecbb8fe2874916741ccd6af8de7aef7aaa8f57a851fc3fca5c6132e3f980417f15c55bb80a429746028f028e1c09057ac370964aedfd0784f8caf4f378c2d7a8adb4124540535dd823968ab6707aa4ae062fff41361cb1b8f23805c262a25c81f4649a8dde4295e8f6649640d6a033da3a5814e47933f56052a19c27add21b009bf4d371972c72138f13511cc3ce647ab9736fe8542557c159b9f8c67db4a99aa9b3de34460ae922cb4e9ca58252dd945f82c5ff382e1c708883793a123d018039b144f7d7da1a86f7af1bfc6eb4bc8c889c2f87dd0bc17b276e1f6d32dd06b87b348c78bcea20e866c42c6984454101d93f1d41378a1664b3f48fc124a385641118e8fad1d5dcbf182b92e4ec0d37fd16cf6f6d77f288be41e90a18c1f284c5fff61cd315097628c894b14284ee5953cb205909648fcf9665cd406cfbae9976f010bc1eaeb6fe62b9eeb3df7522ce31753eac60ea0bd533477fe54052f2af96798cdfa24c801cf2bff25715f52da9e467b59309701ba129b7454c592cbb931b6944d423dac07b41341047e3d7614592945ddf48bf5207deb2bfc59e41514d775e974d86704cfe61c9ba73d279f18f4107c662d49c602f1c041e1d32de6b742bdcb4250273f41a9b304e6bdef2cbcc271d32071c4ab3281ee7e8abf94d128059381bcfd3b113f6dfc59a848f6f47b9a33695ce46e5956ee8d15849acd17720f28d34b7faad46d5d8d8027e76c69c425175eb564d28e748c71dfacec3baa4e8d8bc34b89b64c51ae04e5f44008bdb86149213fe4521587a8a396433f7f09ffaaa603e178131fb628e0122f5f829ce517521c8dd783d0c170f2d945ea8b7721c790b8d8320610e64fbb4ccd6a099566342b7a355ac4bfae8603f005f3ce923a7d54b99b2a4b44aa9f7db887d7bcc655dc1b23bbfec3739bd14947181577ed2561495c9f14229141e3df79ea968e05ffa191ee2d89662a792e479a5d5a7b3cc23f9fa991243caa9b5860f8913739913151ddb1242b7c61a658cfc0e28bd2a058715175046e6a341873f386d97e52f43060c13e961eb577196b4a226a1b57e90a2e6448b319726c28424c232181a1411ac1fbcf241082774e854b6ac0511658bdd679e43feedea2b7f9d609bf7020a6136d766008c8fab7608bf259c2da25069e1e5fcbdbc1b52e0095b3ce136d7f8e844681f5f8aeb3a2b979cdc64b704a9cc0ec68bb09fa9ea22ae4ad9070152da2f305ee6dce978e638c2781db8f4ff20bf56130e8037b92f164c55eaa971c1a58966dffd66e3971afd1212bbe597f36d3be08a7045e5dfabcadd7b830cb2f55d10b83d0ffbc5492cf05d33b1046cfb92a4dfa8ab719548bdd98243ca15ca2e3d5cd956bee98bc0608250c583488f7c1d4ac7abae43b1c49452c352d168ec94b570ca465a358d7c145a6f9d03a2cbb1d4be9c506abced9493cdb4a087de79616bc7ffa74f5a6699bfa83500ccebdb2619a0b485c6ca8a77d0dba45a20d92d44f5f3c0638f6acb457238e0860aa33db923237fcbc91551a44ee71197ed3427faaa51e4ca48a8bf2144e81b5bd97cbfef5093ef204c5945067b7223fcaabf51ee170cdf7c9f2d2f3988341054856703e0f78cc0d3cb264d47d507e1b7c28e1674cd0099a40b73e14c42ad3ca3683fbd13e155d446be2ac05a826cb194d4d564a49064bb1e4d11ed77598c5bcd189755384c94c2ca2002445570245ffda888c0ae1b22feb1c474f79faeb73921590ce1c82c442f11baedef2fe59e4006f6637e046cfc24475b53d0742570abdab779e60a7bade19f01b57bd3e82fd15542b051085e78c323935c6eacd9f18f3a9724ca686b525b189497d1e43df902b4040f63e18d19b8134a32b14685f4b99fef0b98df8d01965a996282a84ea5f27ffb828c899bebbba32827a41caa763beba7aa9237f7e8ccbdbd0bc6ff250c40f7e573c34dc7cf4f8caf53a2ec1c3c3fe5d7233177ba3a25df5b903151381721e7d7fb9cfadb2de316eec54854d971f0230dc2f388d6871985770c0c7b1de30c1fc69fdb88fbdd1df6d5d44278a8f9c3df86dced494dab31c71bdde66a21e6d9ef62962384969d02a578d61ff8717d1a73417a4526f4fb2c90428ace62f17dc84f8438f66f97d1cede7855f7a3d3d9d0383266a1036e1ef1cfb3ebb654f731acab25c922687a239c5759c3d09d457a0bfcb872106427fa5bbc0f1b9f031f97970f05812aafe998d30b7cb6c5704170267a8647b4a4565dc4396a9580c1035bc71cb2ba0569388b69ffa3ae11dd3722d922cbdc318b2f39676a5df27f7066497779059cd997395102c7a29b54a5d2fb2641e0ff8537259e6aabfb5a8c68e1472c2d8b9c72c23a0841f360e8590ad968ce3d0ff99902e20f28eb3c3edba19efa9ac46e630e99b7b54f29366a3cdaa6964608c6cbfb12166656488772b20b64b6ccb6e46b9083adcc850b5bc3c7935500434e75e95313ee15a24650da33e9e3ebaecf8669289c564eb424cc423e894625a11de6094fbb29a59785c9169e2f9a143002c4fb809fc5bfef8ffd9c26a2315f79f6a0b0af1f89d77f114c4c50cb5e02a77692542688dce8c4a39bfb9692623380de001e9751352e2a896d312494adbbf7c8a505145f41c49957077f6452c93b9068ac446430c527399a318995a62cad56d4e2af5cb0579f6d45fa9d56b0d9b43856aea9d394be825a6e182e71e4cfc7a537f86806f6e771cab58de282f12290807460eacc1358e67694e00afc7b93e67d7faf90cd050721302a35fa169c17e1982130c7112a5f3e024bd2ebcd4329ce54f0eb97eab59c5e1599ffb1b61c4f60903f2c8aeba51e5b09fe1c1e8e2306cc11c409fa02f65a90d33383ba70ba0256cac802303e95ba3401bd4667f5461651738d164e890d2b23972e14b675f7c209638a55eacaba3d1874eed6a0605a502a49880fe9cfcf5b0ea99bb731916071a3bed26a4a4309368c8dc9dd23e85c23de846f451b89ba1a7ab5d4e1aa8461775aa4cdddaebc31123860d402332e14fcd415fd139e8cb3be5371bdb79b3bf10f691319b320d28f189de215290ba53617acfc4b1122c8bb5f538b3a24a007b6b6a00c75ebc8aded4d2f874ab909b34ba40a662fa90219c447d85a6 +Verify = Err + +Hash = SHA256 +P = "EmptyDKTest" +S = "salt" +c = 8 +DK = "" +Verify = Err + +# PBKDF2 test vectors from RFC 7914 + +Hash = SHA256 +P = "passwd" +S = "salt" +c = 1 +DK = 55ac046e56e3089fec1691c22544b605f94185216dde0465e68b9d57c20dacbc49ca9cccf179b645991664b39d77ef317c71b845b1e30bd509112041d3a19783 +Verify = OK + +Hash = SHA256 +P = "Password" +S = "NaCl" +c = 80000 +DK = 4ddcd8f60b98be21830cee5ef22701f9641a4418d04c0414aeff08876b34ab56a1d425a1225833549adb841b51c9b3176a272bdebba1d078478f62b397f33c8d +Verify = OK diff --git a/vendor/ring/tests/quic_aes_128_tests.txt b/vendor/ring/tests/quic_aes_128_tests.txt new file mode 100644 index 00000000..2be5b253 --- /dev/null +++ b/vendor/ring/tests/quic_aes_128_tests.txt @@ -0,0 +1,3 @@ +KEY = e8904ecc2e37a6e4cc02271e319c804b +SAMPLE = 13484ec85dc4d36349697c7d4ea1a159 +MASK = 67387ebf3a diff --git a/vendor/ring/tests/quic_aes_256_tests.txt b/vendor/ring/tests/quic_aes_256_tests.txt new file mode 100644 index 00000000..31081ae9 --- /dev/null +++ b/vendor/ring/tests/quic_aes_256_tests.txt @@ -0,0 +1,3 @@ +KEY = 85af7213814aec7b92ace6284a906643912ec8853d00d158a927b8697c7ff585 +SAMPLE = 82a0db90f4cee12fa4afeddb74396cf6 +MASK = 670897adf5 diff --git a/vendor/ring/tests/quic_chacha20_tests.txt b/vendor/ring/tests/quic_chacha20_tests.txt new file mode 100644 index 00000000..be02a428 --- /dev/null +++ b/vendor/ring/tests/quic_chacha20_tests.txt @@ -0,0 +1,3 @@ +KEY = 59bdff7a5bcdaacf319d99646c6273ad96687d2c74ace678f15a1c710675bb23 +SAMPLE = 215a7c1688b4ab7d830dcd052aef9f3c +MASK = 6409a6196d diff --git a/vendor/ring/tests/quic_tests.rs b/vendor/ring/tests/quic_tests.rs new file mode 100644 index 00000000..545d7a76 --- /dev/null +++ b/vendor/ring/tests/quic_tests.rs @@ -0,0 +1,70 @@ +// Copyright 2018 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use ring::{aead::quic, test, test_file}; + +#[test] +fn quic_aes_128() { + test_quic(&quic::AES_128, test_file!("quic_aes_128_tests.txt")); +} + +#[test] +fn quic_aes_256() { + test_quic(&quic::AES_256, test_file!("quic_aes_256_tests.txt")); +} + +#[test] +fn quic_chacha20() { + test_quic(&quic::CHACHA20, test_file!("quic_chacha20_tests.txt")); +} + +fn test_quic(alg: &'static quic::Algorithm, test_file: test::File) { + test_sample_len(alg); + + test::run(test_file, |section, test_case| { + assert_eq!(section, ""); + let key_bytes = test_case.consume_bytes("KEY"); + let sample = test_case.consume_bytes("SAMPLE"); + let mask = test_case.consume_bytes("MASK"); + + let key = quic::HeaderProtectionKey::new(alg, &key_bytes)?; + + assert_eq!(mask.as_ref(), key.new_mask(&sample)?); + + Ok(()) + }); +} + +#[allow(clippy::range_plus_one)] +fn test_sample_len(alg: &'static quic::Algorithm) { + let key_len = alg.key_len(); + let key_data = vec![0u8; key_len]; + + let key = quic::HeaderProtectionKey::new(alg, &key_data).unwrap(); + + let sample_len = 16; + let sample_data = vec![0u8; sample_len + 2]; + + // Sample is the right size. + assert!(key.new_mask(&sample_data[..sample_len]).is_ok()); + + // Sample is one byte too small. + assert!(key.new_mask(&sample_data[..(sample_len - 1)]).is_err()); + + // Sample is one byte too big. + assert!(key.new_mask(&sample_data[..(sample_len + 1)]).is_err()); + + // Sample is empty. + assert!(key.new_mask(&[]).is_err()); +} diff --git a/vendor/ring/tests/rand_tests.rs b/vendor/ring/tests/rand_tests.rs new file mode 100644 index 00000000..f029dd91 --- /dev/null +++ b/vendor/ring/tests/rand_tests.rs @@ -0,0 +1,80 @@ +// Copyright 2015-2019 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use ring::{ + rand::{self, SecureRandom as _}, + test, +}; + +#[cfg(target_arch = "wasm32")] +use wasm_bindgen_test::{wasm_bindgen_test, wasm_bindgen_test_configure}; + +#[cfg(target_arch = "wasm32")] +wasm_bindgen_test_configure!(run_in_browser); + +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +fn test_system_random_lengths() { + const LINUX_LIMIT: usize = 256; + const WEB_LIMIT: usize = 65536; + + // Test that `fill` succeeds for various interesting lengths. `256` and + // multiples thereof are interesting because that's an edge case for + // `getrandom` on Linux. + let lengths = [ + 0, + 1, + 2, + 3, + 96, + LINUX_LIMIT - 1, + LINUX_LIMIT, + LINUX_LIMIT + 1, + LINUX_LIMIT * 2, + 511, + 512, + 513, + 4096, + WEB_LIMIT - 1, + WEB_LIMIT, + WEB_LIMIT + 1, + WEB_LIMIT * 2, + ]; + + for len in lengths.iter() { + let mut buf = vec![0; *len]; + + let rng = rand::SystemRandom::new(); + assert!(rng.fill(&mut buf).is_ok()); + + // If `len` < 96 then there's a big chance of false positives, but + // otherwise the likelihood of a false positive is so too low to + // worry about. + if *len >= 96 { + assert!(buf.iter().any(|x| *x != 0)); + } + } +} + +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +fn test_system_random_traits() { + test::compile_time_assert_clone::(); + test::compile_time_assert_send::(); + + assert_eq!( + "SystemRandom(())", + format!("{:?}", rand::SystemRandom::new()) + ); +} diff --git a/vendor/ring/tests/rsa_from_pkcs8_tests.txt b/vendor/ring/tests/rsa_from_pkcs8_tests.txt new file mode 100644 index 00000000..4d652cb5 --- /dev/null +++ b/vendor/ring/tests/rsa_from_pkcs8_tests.txt @@ -0,0 +1,81 @@ +# RSA 2048-bit key with e == 65537. +Input = 308204bd020100300d06092a864886f70d0101010500048204a7308204a30201000282010100b9d7af84fa4184a5f22037ec8aff2db5f78bd8c21e714e579ae57c6398c4950f3a694b17bfccf488766159aec5bb7c2c43d59c798cbd45a09c9c86933f126879ee7eadcd404f61ecfc425197cab03946ba381a49ef3b4d0f60b17f8a747cde56a834a7f6008f35ffb2f60a54ceda1974ff2a9963aba7f80d4e2916a93d8c74bb1ba5f3b189a4e8f0377bd3e94b5cc3f9c53cb8c8c7c0af394818755e968b7a76d9cada8da7af5fbe25da2a09737d5e4e4d7092aa16a0718d7322ce8aca767015128d6d35775ea9cb8bb1ac6512e1b787d34015221be780a37b1d69bc3708bfd8832591be6095a768f0fd3b3457927e6ae3641d55799a29a0a269cb4a693bc14b0203010001028201001c5fb7e69fa6dd2fd0f5e653f12ce0b7c5a1ce6864e97bc2985dad4e2f86e4133d21d25b3fe774f658cca83aace9e11d8905d62c20b6cd28a680a77357cfe1afac201f3d1532898afb40cce0560bedd2c49fc833bd98da3d1cd03cded0c637d4173e62de865b572d410f9ba83324cd7a3573359428232f1628f6d104e9e6c5f380898b5570201cf11eb5f7e0c4933139c7e7fba67582287ffb81b84fa81e9a2d9739815a25790c06ead7abcf286bd43c6e3d009d01f15fca3d720bbea48b0c8ccf8764f3c822e61159d8efcbff38c794f8afe040b45df14c976a91b1b6d886a55b8e68969bcb30c7197920d97d7721d78d954d89ffecbcc93c6ee82a86fe754102818100eba1cbe453f5cb2fb7eabc12d697267d25785a8f7b43cc2cb14555d3618c63929b19839dcd4212397ecda8ad872f97ede6ac95ebda7322bbc9409bac2b24ae56ad62202800c670365ae28671195fe934978a5987bee2fcea06561b782630b066b0a35c3f559a281f0f729fc282ef8ebdbb065d60000223da6edb732fa32d82bb02818100c9e81e353315fd88eff53763ed7b3859f419a0a158f5155851ce0fe6e43188e44fb43dd25bcdb7f3839fe84a5db88c6525e5bcbae513bae5ff54398106bd8ae4d241c082f8a64a9089531f7b57b09af52042efa097140702dda55a2141c174dd7a324761267728a6cc4ce386c034393d855ebe985c4e5f2aec2bd3f2e2123ab1028180566889dd9c50798771397a68aa1ad9b970e136cc811676ac3901c51c741c48737dbf187de8c47eec68acc05b8a4490c164230c0366a36c2c52fc075a56a3e7eecf3c39b091c0336c2b5e00913f0de5f62c5046ceb9d88188cc740d34bd44839bd4d0c346527cea93a15596727d139e53c35eed25043bc4ac18950f237c02777b0281800f9dd98049e44088efee6a8b5b19f5c0d765880c12c25a154bb6817a5d5a0b798544aea76f9c58c707fe3d4c4b3573fe7ad0eb291580d22ae9f5ccc0d311a40590d1af1f3236427c2d72f57367d3ec185b9771cb5d041a8ab93409e59a9d68f99c72f91c658a3fe5aed59f9f938c368530a4a45f4a7c7155f3906c4354030ef102818100c89e0ba805c970abd84a70770d8fc57bfaa34748a58b77fcddaf0ca285db91953ef5728c1be7470da5540df6af56bb04c0f5ec500f83b08057664cb1551e1e29c58d8b1e9d70e23ed57fdf9936c591a83c1dc954f6654d4a245b6d8676d045c2089ffce537d234fc88e98d92afa92926c75b286e8fee70e273d762bbe63cd63b + +# The same key as above, with the last byte removed. +Input = 308204bd020100300d06092a864886f70d0101010500048204a7308204a30201000282010100b9d7af84fa4184a5f22037ec8aff2db5f78bd8c21e714e579ae57c6398c4950f3a694b17bfccf488766159aec5bb7c2c43d59c798cbd45a09c9c86933f126879ee7eadcd404f61ecfc425197cab03946ba381a49ef3b4d0f60b17f8a747cde56a834a7f6008f35ffb2f60a54ceda1974ff2a9963aba7f80d4e2916a93d8c74bb1ba5f3b189a4e8f0377bd3e94b5cc3f9c53cb8c8c7c0af394818755e968b7a76d9cada8da7af5fbe25da2a09737d5e4e4d7092aa16a0718d7322ce8aca767015128d6d35775ea9cb8bb1ac6512e1b787d34015221be780a37b1d69bc3708bfd8832591be6095a768f0fd3b3457927e6ae3641d55799a29a0a269cb4a693bc14b0203010001028201001c5fb7e69fa6dd2fd0f5e653f12ce0b7c5a1ce6864e97bc2985dad4e2f86e4133d21d25b3fe774f658cca83aace9e11d8905d62c20b6cd28a680a77357cfe1afac201f3d1532898afb40cce0560bedd2c49fc833bd98da3d1cd03cded0c637d4173e62de865b572d410f9ba83324cd7a3573359428232f1628f6d104e9e6c5f380898b5570201cf11eb5f7e0c4933139c7e7fba67582287ffb81b84fa81e9a2d9739815a25790c06ead7abcf286bd43c6e3d009d01f15fca3d720bbea48b0c8ccf8764f3c822e61159d8efcbff38c794f8afe040b45df14c976a91b1b6d886a55b8e68969bcb30c7197920d97d7721d78d954d89ffecbcc93c6ee82a86fe754102818100eba1cbe453f5cb2fb7eabc12d697267d25785a8f7b43cc2cb14555d3618c63929b19839dcd4212397ecda8ad872f97ede6ac95ebda7322bbc9409bac2b24ae56ad62202800c670365ae28671195fe934978a5987bee2fcea06561b782630b066b0a35c3f559a281f0f729fc282ef8ebdbb065d60000223da6edb732fa32d82bb02818100c9e81e353315fd88eff53763ed7b3859f419a0a158f5155851ce0fe6e43188e44fb43dd25bcdb7f3839fe84a5db88c6525e5bcbae513bae5ff54398106bd8ae4d241c082f8a64a9089531f7b57b09af52042efa097140702dda55a2141c174dd7a324761267728a6cc4ce386c034393d855ebe985c4e5f2aec2bd3f2e2123ab1028180566889dd9c50798771397a68aa1ad9b970e136cc811676ac3901c51c741c48737dbf187de8c47eec68acc05b8a4490c164230c0366a36c2c52fc075a56a3e7eecf3c39b091c0336c2b5e00913f0de5f62c5046ceb9d88188cc740d34bd44839bd4d0c346527cea93a15596727d139e53c35eed25043bc4ac18950f237c02777b0281800f9dd98049e44088efee6a8b5b19f5c0d765880c12c25a154bb6817a5d5a0b798544aea76f9c58c707fe3d4c4b3573fe7ad0eb291580d22ae9f5ccc0d311a40590d1af1f3236427c2d72f57367d3ec185b9771cb5d041a8ab93409e59a9d68f99c72f91c658a3fe5aed59f9f938c368530a4a45f4a7c7155f3906c4354030ef102818100c89e0ba805c970abd84a70770d8fc57bfaa34748a58b77fcddaf0ca285db91953ef5728c1be7470da5540df6af56bb04c0f5ec500f83b08057664cb1551e1e29c58d8b1e9d70e23ed57fdf9936c591a83c1dc954f6654d4a245b6d8676d045c2089ffce537d234fc88e98d92afa92926c75b286e8fee70e273d762bbe63cd6 +Error = InvalidEncoding + +# RSA 3072-bit key with e == 65537. +Input = 308206fd020100300d06092a864886f70d0101010500048206e7308206e30201000282018100ac2d26e81b524ff75bb23d79c5eef2258546a1cbc9ce00cdb453449ad3af0d38d748bab51533ff39aabe9d21a0b1113f57764a6c27d10c97212296e3033814b8b1ec1d4b8cb00a4d8174dce02a7a73149d195ef83c3ee0334a8bf94d86dc0e8ba2a5ac80343e8124ead35dda110f106436813fae364113f8136a79f7791b035549dc7f7a1492ff0cbbbae937eb7e05ed997a3023bc3622def643a13aa4b20f15b4c293ccfd64a26db61623ae4fc69bac32162953cb37c93216c009ca217bc9b4cfa463e22b9d083d1c42f321cb8c248c29090194c0e5e94957ca2a34d62bcab2a12acfbb4565bf2576583a57fd78b810a7f7c70aec118e7e9bb7fba9c80c10acb8154af0e0e21ee4e488393c9dfd977aa7c245925fb5f880bf1074d916710630362c246f0270d70cbb546bd5ef07e423c37f1f446707c4d6c3874f9c7abfe80f873884911a6a98514b34ef147b1e7ff93c9497b57c73653f391d74bce6db9699cfb3fdca698427db519f08e33b16a7105b27f1387aa9958a674d777c1403e03302030100010282018043901045627b415fea7e9dfb0bfdc0cd9267ee139ee41492a3e14cf9887997b1a76125caeb40153616d767a78b7c102d8fef9e32a4c936ac935714688e99d21fcbc9c09125eaea90116dbf42c3c87b222aa78b09d3f2445e3c318329b5f2e24e4f0bbe0e2cf21e1153888fba83992ab07866ed8b3a44fd460ab06c9dfccae9daecf9f697fc3cd692b3941bf25299884ffd3ae26b136f16edf12b06b8916a41db1dac80fd1eadffc31781c68c9f476b4cfdf68e4f105e9ab7ea0f7f87eeedb96f723e2a17e5103af96c3a508d38262577ffe3b2fb7bb4f7150cdc9dfb8d4f3d5cdf349192d1d302182df169403a066ddb28647831041d587884282392f83716b74f201d33fa5a967d5f506a93e4e9506ecf6802869ead17beff0b8903114f154fa3973067d56003409cdefa962578096d664c79d2c5df6e8dbbf67a9bf6e2c7c938608c17ae1ef6e56fce9058fb4823c5cee63e2a1c9f495dca8021fcb50cd92a35a9de5df29755b8f0d6d677d8fb8144dd106f07782e63032e6f40f3c29c0de90281c100def986933a3b7fdcb21c7096a4ef361c6631a23aacc8831f34270efd4850eac191d9284070cc910cf12864efd6d8c676491ba8f810b005dc4143e7e774d2d4fa255007ec75a98f5fc105100ed49327e90d31f01771bfe92b1f47cb36eb8c2d30067d1523980b9329e73ff7ae84a8ae11276a085a201bef0b398f934e4bdd7eba261e676a4a933a4254934f6ad8c17277a977a7782da24000eec12cf8def48d86a73ac84e9dcf5b5e8dad32ceb4d565085c2063f88df9a4b1f200375d2a58c86f0281c100c5ad84dcac6f51bfefa20c2b52611bcec8822739ff907491912b7c0d80ddcdfe1836c264969048133e76d3c4987a563a2d7d3c3b213cf47e1cd9329df1878bc4834e9742e5d0a31c663d4fa8edd8e0abad1c5fe2e6fef1f01c35b93eff619c7ae80873842daa277096dd1f3da4b4182525d06c1041a9c8627be145c3435a79dba4dfe52f63fa51486762d1b55d449fb55f07d304fcc726b9cc1e42484bc6d72704e0192f4bb7e6c6438dbd9aecf8d10626bc2ce1904f96d7594b9fc0e8231e7d0281c050a322f519a92ceb8e8a5479567aa032130f3e21441d5bb62c3137ed877aa3fb8f185ec33747f3e91f49c17f2f4ec42f40ef3ce3417db710d9958a479d6b25d4b52bc541d1a7998f4289e72dc5d8d625253d7b1baf6a7d13b843498dba0fbec3d084e9e12e7a79253d5957e4885b4c602dc5ddf1620d581cd21b4765987029057f059dd6c5d38acd3432f614a90104b99bd30700a2583c175a41085794a21290b0e7c44b122d4c58dc99d77703d4ecade24b607c22343748974156c45dad30070281c100a8d548d2c91bd2b0a1d4bf9c08a214040ad0cefc0440b6aed55454819bfcd5411e2136ea7e8600691f4292202932e38e90e79397d50da0ac4dab5c45f5d21517e4262d9edf75d0ba22c05ed7233dc6b61a06500715cfcd878c307e6545ed729eaeaaf92e7d6a04816ef8b1040f361a213028d10319720f49be106b6b188d9fe26ef12367d476291233eafcbd70497a368851c073540a2c132838f7d79390e295dade23e477413c833d9343cb9c75eee0d8188424ab02af0c82a1ca7212525c690281c012315e04ad315f39c8c0657c93ed32ec2501c9cf2b3c3f6c07fc78ad95d9c5827201ef95d7f549ddba41a75ed1b2a5261037490d235c4f097a123dd454da7f2954a1ea4e612662e5086d6e532adef15506b2adf1aeb5237257df7193d85e2a4d61bbef24122deee62b41b73cf277486da9dee39311904e49fcf7e5cf7c1ba5da0b8e25853da1389b79753a894643ff8299d1c599130c9d0f25db07eafde4a1ee1e66f839c3b775000a5d8576f3b158d2cfe8cbec94376cb81d54c6066a4fc97f + +# RSA 2048-bit key with e == 65537 and p < q. +Input = 308204bd020100300d06092a864886f70d0101010500048204a7308204a30201000282010100a0afb85b74105f49f6836183d67b92602b53ad0d7a65f32a21d8959b8722aae1ec000cb9f22de09b794d7446e04be02a782615a659ceddb5f3344b6e566970718124dc8b8bf23c5aaa7447b7f11905f828e91f1a844d535624b987704ecca430d04cfee0deef46e7e2da65a3f2a1b3aae6cdf96795d24073a07312867aeb414e0bd6c23d80bd9ce6266fd90dac7666b019c141e3516ed51ced0d62a0b1db189860406ec5b7bbbeb49031979dba118ef6ad131365d6bd6994e695ab084592a5d2470341e4a9da14167a1387ec3d513687b7d849d64da896d4038f72f8a8a516c6402225a53eb813c1eb0e675af8880433545a90404946d7d8db2716fdd63898650203010001028201007df2de1548f720499020d0c98ecf931f3036c938fc4c76f9fa479294b2aa98b8b6cc1f2d8cc72afb926c048d1d783bbfee2723e71d13c9b2b96baf0850511b22ccb040f25c82458e6776f7541575a0b9300ff2224dbb726bde235226d48d10d1762433cfbcce5e8c99c2c7d266f71a2605fd42d54f98da8e0720cb4f7f7f70d2668b89cb57fde159ac7922756fd161379a5693168c388b7e1468552f67f896f69740e80e13b9badee87b7116e559c1e428276cc9d4788b0ee25f10ed560daa8339aeb52d8bb2b05a2e1e16e3fb348ae5feb5dbaf53a7d8a318865e1a746374df077d85120b02e3f0ceba47cc734c96ed6dac65f11bde2db2f1ffaec0da5924c102818100c045a3996d1465c73ca839c442b1026c82e418c68a5f96b34ff36557144a86af092b8c2873c42ac08d66e2f471c4094098be48058ed2bb0ebf0beb896f0eb18eea16d475914c901e35dffbcc257f19260819213c46eac7e508aae0114b98770471949f006d42a6c2e07d590e1f5f14747239154f65155daa4bea84f5ee8d2c7102818100d5f20732ea986dd3d1245dce180595a7f48b36c58f1576f6782062a4f1790871bfb2e31b96f1b596c59b6624cc2b56c441e4970fffe70e59c0fca099b598170106a60e32725c35401271ba2216039c627b18a2e319331c1444238724ba7c80e2f35d13fc0662638b414f7c12fe66db22328fa892a4b7632ea2c24f6b06fb3535028180448f5073e0127aec5d73bb0d819e6eb7d4c0931910b45f1f576df9ffe00b67153916df26798944995e92867115b40a7c8f3aa2a1e0b8c1dcd340e3df20cbc382ab7432942d9878775d4c9e13c0771eb79201abf93b6c7294f7cf3e90cc3cf48b9018a7cdd6280320d03dc228a805165d2371b9689329d83966529cd0b91c7bf1028181009f1bbed4d3f9067ca7a63709057e69bd1db5c6c707d13bc6b2b1cb0ac5f6701c4027a694a71e1d2102d6be1111b20d762956fa2d50f0221107e01904173403afa4a52c1bc246e6e73e904b8ffbf535815bf0877b030baa8f3bd97c31096b7c62cc0065d361601c8dbcc5830d911b274ef8713439d2bbfbcbfc092c0cf9852b1d02818058e7d95fe1a95fe10f60b59eba5c8c28c8eeaa82956a3035f37e7570f5ff91a104a5df77ba13a09bedb22018e2ac7461471b5e719ab202032cb3905391b7d15c74b36aff25c83987726e0ef1362c1b8f4f8282f2c4fd6a38a9a15e63400b92bfff31cbfc375313dc40f9cf19e031ededd32c47de6b3a99696a903638c4d6969a + +# RSA 3072-bit key with e == 65537 and p < q. +Input = 308206ff020100300d06092a864886f70d0101010500048206e9308206e50201000282018100a893194cf895bbbfa58f2863ab9bd00671cf5c48604efcb175d6f03a55d32a991c3021d52265369d45b94c4e80210a5d8d3d0738fb98669f1256d406eabafb67ad028de2e25909cd87b723a6f29eaaa46d77c74e998d3ca635ddb71335c2d77143c61d1875b0c6abe15474dd61e69fb0a5bfc381f8ffc251be4a03ff9cdebc6d890cc5d1e1b4da6115afd7d4bd9ec8b12361158eb5526cb9ccd5c1763862f65ac0cf10d7718efdbdc6f4e23325b129625d0e87a1136dc34af0f9e0e2abc7d617abbcfdb8f33d04a2cff977336df6c3956b5b667c399047d720da828370e601ca3e032a81dab5eeb9a5c37ffb4ae255fc0a3093756e9fd039faa87f2ccd396d8c44b51dec14d7a0c00e2a0735102d30ae30edf41e67af3bec5103f7ea969dc1222a0b7fdbd622788aef9fa410a9640312c33f14c322ae3b7ff2dce7c7440e9ea5f2521bfe75e206b16ea5176a7e4b9a7ba326fdc2541bc56fb6b16451a11f23f50217b61a277e3116cb65c6aa40615041e20118bd10fad88602bea3a232ca12f102030100010282018033cb3e72cfcdf1a9a88c9bb443fdd3a4a74336ef65e7deec0770cacea1a007ee932296c28d96db78e6fb4fdeaeaf7827d64571faa812e334ecc590cfaf3f540f3eb112372ba47fc68e744e97f4e39b3a7a07db4ce310ea1987635fe49f180669de90f84f939984f13a826085c496bf69df03546692c2c249ab55c274bf16107ef724dd82e6fe523a92173d113851990813feb848e89d329ac3bcc97c3146f6ba5b9343716e8aa89bae8d7f1287fa2ee4f2028cd988c6a8c255d7f0a8b46ee9f04c36250f4a66b148415c83fe991360231e8f267a9400a31111fedd19aadc93eb0b6833e556c2c91e2a69ee6ae0462eb6a146e1d30680f02bac5e2ec95879e9a42b05c790baf87e6481f0a703a4897a221f2f4604facb45948bef592d61891fe55e5c52b7a44f01a0148641dee97eeb2efd96968fd82310ea551184b4c63c48039e13bcd15abc15029d3c5bd41665895bef92e12513e06706cb03221ff5aa7f6aa64ebfcdcd6882ad2ec765731ee6452d6470a7053a276f51b7c20b7b54d8c0010281c100c9bc1dc851bcfeb8e8d33063be3d8be4d09f816c0567a06935c7b8082dd06c1f2ce9eba3fdadef1a77e087e05f76bb05d625bfc835dbc1cbf5397cdb9e5f67b23fce81bfc7b27f2cebd7db80b8a696bd57b3eae3f498a1b4782f8721c12c685b85ef648575ce81010fbd12e6bbefddc3e073ac309dec8d9671fbed47344b8ca8fb90a974fd4d306c92f2a2f8f6db36c57780faf07baf850454be836c6cca4c9e35327d84babcac06c14ea3295fbc772319d9582ea185e4a685ffdd1316bb2e810281c100d5eb7ff5b91f4068cd2739c0c5c4e609839e07b950307f55a5b5892d8ead0b3f77c8657204cc320e9b52d67af2eeec787dea098ece882abf6e93957ec1fb753f28e17de205a0e4967c7880ad9580b81a3a2315e3466f639a62162e4f0de8f009142bc19488510b2e0e2ef86f0be45f4efa51ea794fbabff294c3c40199c450221c99707026bd1de3649c10c37a4c493fab1aa9511ed64bec38a1724c8af4a9813de028dcdc0bde1639a1b6a4b9ac0480cee494a533fff8214de959a9a6bc8c710281c100c87a9b3a5d08ae3742a1c60009aa0e6159767a5ec84c405cee26495c4f734650010982b4d940c6528e79636ef64ffef280ebc8d885b59bb53e416034bd01e10282688e06f1c5109faacd3c85827b83682d454e94359a8d70d4d39ebe4bc3fefd9d6fd77cce23678e8f7e7dcf314be21e6beb685e7443063e518e643293e4d4a7864130366418169c7fb8837f598b66b5fcda0007875359a481374752341722e742c4a77a853d44d3fdbd5166a78e9af31618298b45d7d2f02e50a4f9f86812810281c100b05497bc6fa4f00db315a348607cc5f58fb542bea0f7e8ee2b52b1498932e073a783db031a2b4b13b93a962af076bb1b3307286bbb98884c1594b784add75db4fb38abf0141da46edb18e550b04c52f4e3792a40963d990797d49ac5753cce275da617c21c7f594cd44a296437943e6fb66cb16edfa69b3415262d39f88ad656d7e62ec573592dfad362c57aac2397b9508c00872a79104a1e000e5c43aa1ad2bab33c5b99527af52cfa3cb819884e89f2807e7a929b6ae7e0f5f97f9b3e0e310281c100b1e8aeff349d9d187e73d86f166a9703a14bc93ec599b203232027a180f3179ed10a51d9b482ef12f218285d2e06c45ae984995405cdbe71e72170f4a602ddd968c3673f1d5262e69eabc3106553ccc07b8bcd8306338346d2fd2bf595d96c48df5f959dd9384561014c79e7305728587bf01821eaf1f85e74f4365fa1492a30cf3ab54cd1080da479fd834bd07c1ec5e72e9ab68d855845cae166c8f885fdc20e946d40ec478628f4498ebc18e37204253765cf41bdfcf0cccd2ca1ef06b6ca + +# RSA 2048-bit key with invalid e == 3. +Input = 308204bc020100300d06092a864886f70d0101010500048204a6308204a20201000282010100bbb126534d64a3a60711730846af3c2f4cf4fee28f48e7c9ca2b0b5a6c8ad51e2509d38b87ea6b039ad3a33ac57e78c444d86438b1938eed73219cba33b06454e429330ce0fcd356624630c58f32a7ab3bef8c7cb3f9843b09c3e61dc92329df330f002451b5910cac3e7b513d3ca1cd58e39a5cc277e64da395058805f69f19bb62571f28525c5a7f781055ea82bddcc8d10c7163060e2040aeb390e6cd8cbba216726875d3b2975fae77d9d092a9e65f545f8a1e282c7096b3e8293d47d15e656717b0ea2d9a170d489c2f3b596cb745fd3f587e10cf3ff043a1f42ed9d030d900c02676761e70e2b5a8fd9387dc658cc95b1ac3ca83ce3b352d6e71514025020103028201007d20c43788edc26eaf60f75ad9ca281f88a354970a309a8686c75ce6f30738bec35be25d0546f2026737c2272e545082d89042d076625f48f76bbdd177caed8ded70ccb340a88ce441842083b4cc6fc77d4a5da877fbad7cb12d4413db6cc694ccb4aac2e123b60872d4523628d31688e5ed11932c4feede6d0e03b003f9bf6556ac08bfb5829df7f6baf74772fd3e22ca571851c5a0efe8330ffb45863a804f870f4535da65761c81c22decb3bd8fe55fb250b09fce0f12f1c1a073ab5349a8b9d8e3fb826a04f441479cf3b4ecb7d61aca60f44a3f1ffbe2bd615cb65c29b11beeff13074c06356ece01581b45fcfc2cab27a8777a631b3361763d59b7f26b02818100f6434d514907d7c9f522c84633148b5e2fccf3bc0fc4e6a5c5f7b88b15a062433dae12c53d5e54e2a47427da06b6ff4e2c4635b90aa8887b365b96e6485584f64138c39ef0d9108dc8f569f5cdac877c5d4bfad3a89dbda8f5e88d05277462b2636618c6f21f845ebbca664f1c7d5534c15ff90f5faffd712ecd2f130b8f808d02818100c31cfcae4f06979c983cd5248af2554a6981743aaacfbf9e2e1f021d87d56a0119d177d270dd2c89f8970b1cbc3f52c02382b0c823ca8d58f5b5e09573f55deb0d68fe18b5b5821ae267c6cbde49d179c081b3166614619d263f02e3f5db2ef4cbb428c2f96490c200b640aa4e218bb68868a68eb0e2f1b43f55ccff5f2dd3f902818100a42cde3630afe5314e17302eccb85ce975334d280a83446e83fa7b0763c04182291eb72e28e98dec6da2c53c0479ff8972d97926071b05a779926499858e58a42b7b2d14a090b5b3db4e46a3de7304fd9387fc8d1b13d3c5f945b358c4f841cc42441084a16a583f27dc4434bda8e37880eaa60a3fcaa8f61f3374b75d0a55b3028181008213531edf59ba68657de36db1f6e386f100f8271c8a7fbec96a01690538f15611364fe1a0937306a5ba07687d7f8c8017ac75dac28708e5f923eb0e4d4e3e9cb39b54107923ac11ec452f32943136512b01220eeeb841136ed4ac97f93cc9f887cd7081fb98608155ced5c6dec107cf059b19b475eca122d4e3ddff94c937fb0281805d84a6c335b77a5d2468b81cab4ab69198906454bb499b00c8094456b855987dd20a95a5be48f21067554b86df117cc9abab45dca04265fb589606b2cbc074808f39862cbf39e3efd1df44e04fcd9f778574528fcb52f5b7e16066267cf08d29ce7a29deb3d9c3671634af765916a865646accbdec557d970de3b242e3450167 +Error = TooSmall + +# RSA 2040-bit key that is valid, but we reject it because it is too small and +# or because the private modulus length isn't a multiple of 512 bits. +Input = 308204b9020100300d06092a864886f70d0101010500048204a33082049f0201000282010000e978633c731dc49958124170096c8dfd536977a5ad78051520be93de8b3040faeebe61b436d02e6015d78dfa2280a7a1c33b87b16b82b367e352545a6de6ce46f83dc0fc421c2997c7149f9c616cd538a311cdd8c7f5b0959c3a9343090f0ba87b02dd44e7dd0c8a2eeb0d7ad2e49527d5d420b72b52301e7ea2f6f18c86a05c8ee5a20ebac5a78f76d4a1443db1c399375293e008ef34835f873f0ccfbb3005d1efd17ac405db1e86a5b64ecfcf3f02819818802f122d1a889ebfbb6658d3d63355894a4141d1aeb4dfcbfc5bf6d2229532326f73810364a42b7cd1b71f05720698b74c58e5e1fdc364f8403f6ec825dab667f6b26653e76f6f7eb8d98b2702030100010282010000bbb8bfda0019845563fa31c17ae25cfcbe8fc3d3643a67a3c8535424113878570b95ea8b73b34a4699e95ad02fe3d06581cc20dbe83d0c31d117069a3b59e4ac2db7c1af531cbfd8b90afd174942afe2bd43788700a8ad166eaaae73ad19fadeba21e07622149b9b94040d2f9fd88991a11dd23c5549dd44f7bfe2dcef87e3da55d5b0c92e321a992600b6aa2205b90f03cbde204ccbf5e4ae729c6a4d1d38f415f559b865b91996973a05103410842a84c8e19e8b4fdad94d498392dbd521691154381ac6cb5bc6d180daf72cdbc06a7d42a2f503cf44ff804b1b6004b2f4f058c2f20712fccca5866cd107a812390c9b2784d5e199b270bcbc0b2ca3f2410281800f5fd9faeb3fc7a0d6f4011b731482e8ab1d5fac10ed36241d95a28fc298e3bf41e75aa9d0d967d79b857d7156496f073003c45ac8d97136862c103a8e2e3d1548e308b4e50f436b86a236b0c15cbe50d812819294db7cffe6f655bcf50113ef79245fa94886be820ee043d1e4ed9984ad8d8157610c433513a96f86398a7aa10281800f2f85807ba2ee028bdf1902a9940629b8844797d41b922f91b81dad222089079979db61890295bd20e02fdc7d8ccf34c569e328abc83b0127ab6a3ffead18f1e3172206fcf0a1b032dc899d142e64c7e5ef1316992f537bef6963f4304a5064d67e8bffb7a16ae165746cdddef21e531ab19fe2c03940ecc9462da340c138c70281800a3ebd6b4fc8b8a69d970c05d6b21c6a1f5cfb9c15cb7d00a4164ab5b1df6024db2de864b11faeeb265fd62fe86816ec9b3a676677e12e683f10addfd74f48b51e54ec405f43c491aaadfdf3db668a0c25706f97d64a4d09da46dceb85f8a9e832b9e2655447363c44dd7d5429518bb3b6534d9584be3f2ae767494210a60f0102818008bf7d8ee8aa91a651e171cd00d7cf3d1598ce8d7e996b7b8fdc9aebf42efe01acbe704d1ddaa95c4ca619ac517f5e96adeb33fb680a6f435910fca2651a5eb669f6179a22f8948ca6a0397e8df3b4071c44bfa0531ada631926837856a158f2de46046c89e2a969b34280bcc8047ec7ad270a4e5c221f6ec8fc6eaa0f51c05d028180083e0d97571b3ca817e899b3699cb4193d331b4ea9d53e2be2a5c81985f1b609d58c15ee596e736e5647c2a89d05c784836182f2874d83c8648dad4550ab51232e88017c82ec6ce8612e77f5842a5615bea94d116bf4ad1d0a478034a3da7a467522ce292fd30b1c5c0c51e0888dd4397d0708a216456935cb2de88398690320 +Error = TooSmall + +# RSA 2046-bit key that is valid, but we reject it because it is too small and +# because the private modulus length isn't a multiple of 512 bits. +Input = 308204b9020100300d06092a864886f70d0101010500048204a33082049f020100028201002d7374f1cd461fb28614fc8f5db38154717c8ec36f61528768ba78910d78042e4655566aa56d81de67247a85a153d14eaa651ff3e4082c6f67b587d7f94d4d2991c59aba31dcac192061811ca39e6cef73169df49283494eeb51d1f28f4438999f7222cf3fcf17955a155ad901c7e058737dda655a17d0a78ba9fb69783e33c208d63c9f9984a2c612994f515d5fd9d71b18439fba6b092d6f8c8562a0e2eea605a218b32e8f84c4dbb8667bd0a5ce88213966429211fe2fbad80f5ece4b70a4ebca26981e5a27d1468d7cfc9c67e6d6eb2c09b62cdceb8e75a4192fe68c15b579d7138ac710e76a63fa0866274c85f94ff5127930c1316def7e7532582bb6fd0203010001028201001e7efa7787b946695d87d5524897b9ee33db545b136fa4955092d574d629b1fc6e9ab1ca0ac7683d16cda61be57c3cd360874ba2345dbb9ae06630089cb0de564705e4648c323992fe640de26e724d3b78e83301b810b8ee67fc55374023912a9a8e5586e3948b895d91388ca4a23d087c2d748d4e9eee148d24779973e1a08e3ee60a3283d203ad4d1d8b92070f180dae0fdd0131735872b1e5a3bd6c25b02cf44c396b4b046ceca986e871d22c60b63f0ff6681b89554309dbc8a03ca1020e64d07e42a4831e326ba17ce44d0ec727c01b6832f07188e6b3c83a999e5d3922987350dfbd994883d3c841412c53eda5b9a131cd981f87a0991e2055749bf06d0281806d352d2ecf4b613356b19186c1d4a110910235213717edd29e1131516e2fce9b59f4ae2a9e2915bbe1a2f5f10c59ddb898ce7ebd1f2a38d7ec52baa3cca0162266a555ac4c8bf4c44a2e5f29449dad674067c37d3e1b84c978947f5ef96761c33d4845a04c2a7106f66868e71982b4c95585ad727e5feb8cbfd479b2c0b5b3630281806a8b553d7d109b1332b2f397bebdcfea592ca801f8abac7da8d3951cffd89615ed588369a16b33bbf256661f68f8397963c33ab3bcea2d2a7ecc7b4cabd0840145a704ea1a7c52eeef57cea22ab7ab4ffd470a6fd0ff6b285f9fa6f0720e10a5a75ebcf1f84cfa20d34db34e245460023ab3b2e1b7aa57dfb9f61c61d1cc6a1f0281805b3a4fdb49a9c3b21a5acda1cfebeafca6d63c41d9ff305980580665eaf11edbe1e2a757ccb5af853af162189263c3f780170802beb50bb53ca2c36d2ff40f697f6be04cc5c928988d0b7dcd4097a3929c57d2139ebd6848d164e39e182447a3cc5ec2632d1d4b3c30bd79dc8c10072c25383d7366a48466189dcb680ad9fed70281805ca34f774a41e1043d45d9856c64afde2cb12657a876e460d2253df6dc01dee5abdc154f07fa251e5ae482a0f6ed3553f5c92f464e9132ba4b4bd23d64fac57c31aaba1c2ef1404ede2e73cd0ee569ffffd200221f0fa685913748b8b202c6b8b2212e9a19721cdde3bc2096660233045d3417ea287ee52ef30b29bc67e59bb302818058ab3d6815ac06d311d3364f8da1ce2ec7616864f90cfd4051668669ceb4ec8e3eed35c83c48ff18595908e6d40f0017d14eb455bdd5c282b21fadb76be331e6bf66d50020775cead697cc62d07cfd14ad1d383afe3b3f7d0dbf181213ccd3df42e7e4481e653333debf7f5523a46722e1231327ba57374c4dc605b04822a7af +Error = PrivateModulusLenNotMultipleOf512Bits + +# RSA 2047-bit key that is valid, but we reject it because the lengths of the +# private primes aren't equal, because it is too small, because the private +# modulus length isn't a multiple of 512 bits. +Input = 308204bc020100300d06092a864886f70d0101010500048204a6308204a2020100028201004edbbf2909ee78cc4ef9914eed0bb1ce5267ac3f141c69b288eda901f73e8e68d4184e8e62b23e10e8fe3da44a2ad6826825581b01741d5cee01964e2561d1ede3cf813eeec832b6aa43e31bfbfc9aa3181cf4d729860fa5bf6477d468374640cac16dbe2c82f8d61c1e3cec8e42a18cc1e3cbbaefe21b2c8490bf3f9dad6f90b9297d44a32899fd88fb9914f8843cc1600ce310d69ea52c9bf26bb9ff030b7a5b01e1809227f59e58a3531559f520028e50bf2e21af4fe53ac19685661d03c0ac75774cb518ffd85f778b16b254b83065bcb09dd4ff2e7e908aa1f90e1f99aa94336844ba04ac228b6edba3f1d2e602868ef042a8ad1f6bbc259ed86e5a06ad0203010001028201000c43318ba126bb141227cec7b626be6475fdf713ebfdab15ff22edc807796bcdb3458059b5d13fc383679d9041943dbd1392d30b88035559910d202150c0d0532cbca4bd73862014b58f4eee9815a4ba3dd2aae41669e95efdcf12af2df182742ad33f4c76417b8e57daffe04d12e16a30f04a4aec687d8f43a1fa8b5aea905182928441401bb9dc7946806b7f21aeda027974e32b08c8d31a60283f36b4fdfaac2763625e792b9dddceebb995a379989e39f79a5f07a26d4cb87504df0e4dc283cf44f0bdd7d313d33d0b1813b53e702e34c0788792ad72479563fbe0f7bfffb7033842ef62456d1d087399fb7e425bf92f78b438027f9a8c81305bbfde8fa102818100ced2d7908326a8085b5b05a46c7933c278bd6dc32e941b1fa5cf78db252ffda3bebe5e8a824f667af2c89d40cd299d23bc898926cf40365ce4c4d90c173dc372cf392d1ba6b9f92ec77d69e59aa37462e80afc75ed491a9ec07ae9464a478f4b3593f1e518271925d13cabcec9eb491257323b6500b2f15c3283dc43ca3e45b9028180619bc84ccbe7df0317658039047d6ed73b063946863498120e4bad94654fcf12447e00c4ee2bdb0017e2f62013ca193cd2de66ba69c54024db2e4233658d1cdd35fd98976d291ebc86bf77334871548c16403801380a5afd9ac3be64d177e80583ad4589371308e44c883b93f7711980e389c661e5673c875bb7feb1e010029502818100b1aec3911c8b664a9fa9882465288f462092a52ccce4629502cf46460721bea72164cd35f393a13839420e8f3072f2d453d258e8e59e85d5b29846dbb34fd58cd9e8860f3e62816825ec61c0e6e44c45f8920fa8846d8c981c46bc082e226241bbcad942f74807bbcc91720cdabdef6df949676b7379480fec3a0a4e96fe7ec90281802f38671147fff7b28e2a0b7b0a020892553ab090beb248f34b392f534023f900546444c90093f4d1b9bc91e778cb67a4363b63a541302cd4e7b81c4cb30f2e6c92070a400f8e3a11687ace16e02ffb7ffdefb968558d24f1d56267046d15be0894e8496095653f02fb4758d33f7cd6a2b4f15d28d50b398c1e420814535a4b7502818100cc6fb56fd8b7b3db0a4171c662a0d76efeada4ce0dbf5891b3b51d60efa31bb8f7e176417579bc35a751de444a9e3479307af73ac1ccf0458d81e021d1e4e33a5203c5d01e5e397ca26e62174ded0d310ca0c78685c17738783c9f06acd286f009a623cb4e651776ff9adad81a08299144c9ef4d07fd3ac1408d9c92c98d9379 +Error = InconsistentComponents + +# RSA 2049-bit key that is valid, but we reject it because the lengths of the +# private primes aren't equal and because the private modulus length isn't a +# multiple of 512 bits. +Input = 308204be020100300d06092a864886f70d0101010500048204a8308204a402010002820101019129387ed5eafe167c7c575ad391104cdb7ac95d25c2b0e3699a98f477de9729755574b112f552b28204480a061cf6a6360e0959000cb1b175301ee7d7accc82735c2388fb7bbf2673a309e25e2e4b26f046c9dfd858e78de52bd36991e0fc1a28f04b9ebdd6b0ab8da95b6467a7869b4e5a19dc1bc189b666729f7edb24a64965f53382ca45e20bb0a315439f7bead07a0bea88cf25a179e2aba7ee8584c1fa58e731246fcb4778e6f9ef455d0e50fc60c044f7745a4380b9f4c82dd4a64dae636461fd351f2e871477d801833bf44e7e4a7e08691776d263433c19d477290f1b844f0555c2995b22525b57681962332271a3cb522464c27989ab7c943f48e1020301000102820101011c7c6b00279bfa8cdfc31dffdf416499dc9bfae8ffba4dcf3838d677a7fa46a0b400e23c2101b09fbeec625a1973b8c6ae56cdf23bc2c4d0e0163c14963288e58a01b18197366e9c4a2d38f93b69010aa022d34ed71255439f5db11390cc487c14c4341c62ec3965af9486a7718ab03ebb15d278f18612af337fddf40c5cb53e46b99d7da4b7d8d9d586be8add8b0da6756a301155f2472b484c0ed8a23c052dcfe7ce40e99b6cae94edd41cc6a24fb5fda50b5ba3958cd3ccaa6aa2674cb9f492e208c8eb966f1d4d9b1c2a39efc324a41b562ebce4cbea0af06a6bdf19f4c45aed56efd9fd892ceeaa9abd3458c151a83a2b80075e1bab92b388a747baa64102818101aa9f633cbbe8135713302e9b0d22bfb7589c710a6516d25521550d98ee4b827183fe8351285387686d15abb3226813f5ec6367fd9138e2f5e5f248bacb3247219490092620f3660c4d7e091c5e61cbcd4992fc10441261aef9e80d4baa74f1fe9e7eb358c5098693954701a62c0309aecb7a32f0a763988d6b5fb26b5be8a07d02818100f0b8b228a6ef97211d25f0962132ec78ef48f99877d49d3b02e969a34b72eef8e289d0c99b8576d0e704ab27cb908b8c791ae9cba56340ceb9ab13436f6d19b07f1f485d8577b72f6bbc42b6edef6f9fe6dff28bbf790f26dae0c85f76689a440663372cf21f660cd860967b69d6ba491b58b7ad817eecb7f088df4053027b35028180265fd5e655a4a770b2aa27d70c946e984861320dd44ffc356a1d236ef92853a07056096bd86bc30752a09b642e991c0a87ebdd23c2d7521afa4713e1b17b614894fb6bc74139839961b30f90bcb0a14b62edd4bc85d2fd7466c847c1e1a0495034e382b05e70dfe91089658d93f1e602120d78dd8ac0fbace4d6a3cee2628765028181008155fb03348e4e59105c2e23bbbaacab5d858bf58b8cc4ddcbf6b5377376514790101409fe717b214abe8b675a4c536e2a3377a25f3e30b7e1b2352b6a56e812987aaa5af5371949754d355b2c0415a9885692eedaf5a45a70078e211c719f51254d717bc8ab6e1d40b4c4a5927c38a2c6faa7d5a55a18bdcb92fec084d934710281803e411557b7c0e6e6e296a1d0473b7bcf5f7a71d03c70bd6cadc3a9fb3a11cd0294dd02893ad1c28f62c20294d3893d6ac77baabf7772dd47be587893c79c8d66701c3037ceaec38088b500e2197994e048b1b357f8fffbbdbbdc94c0c82a7cac7ef0136cd6f7795355aeb3e4179eb2b363315f6ccb0a26434682adbbe7b6ce6b +Error = InconsistentComponents + +# RSA 2050-bit key that is valid, but we reject it because the private modulus +# length isn't a multiple of 512 bits. +Input = 308204c0020100300d06092a864886f70d0101010500048204aa308204a60201000282010102c539e76a413401bebc36a0e09b5acfd299393605da7d25289d085a872fd761b2cf11787287b9c45d285b146e11d8a043c07049947e49f0e89791c99aafa2224d65dd8118067adeb1417e8fd3be306aa6001bdda425c89f691aa1b77ad2c6cdaa890fa764c541e74bf5e1571e7efbee69d1331d5d7544e15d2a7f21de27f268135fb7a4334d45e348d15de362ba649e5bc50cbff86a6775d5d9bdd75441eaaf3a4f4acd1a28cf3d81dd3749a460f87721a73e45adda47134634276c6acbc341fd9c96c4b7b3f6f74b22f93512a39fd4e77f330726d07728f7ae8246a7f2c50cd29625c1365825c8ad257213444ec6dfeef03350bca7091415a3505d5798dd37b7020301000102820101017d721734debcc9f37be725bfa7cebfd7d4f1204d25a609463eaf2f816609c1521a6c9b0b7e543b789f2bdd6115d81cda53b610dcfccf67f2b112880bda4aa98857313b2d60ced4d72112a0e8917218ea0f44ed804b920baacbd80e86d0b67c072c906ec794104e065cc845c2f1292ea15b12d2c8613a1abbb10f8f779ca493b38d5e704ce2644b3798e852d0371214a862b6636fe2d22d5f5c95b794b317438c14ebb28d9c90339f505c90c3fa6ad5430c163c067931df4523490906888f1ba4f55c07fdeb6fe77932b817eaee669f72988a09df346fbcd3abc3b0a6d60546ff52aa28405aa51d1dd83195be0ea21b7995a61a9bcd807d3b0683526b1f79eb8102818101b41a1d8a1fb22acb2f2a827655d9345de5c5c606761d99aa75116d1f50a432079ffce48dcfd9a1c2888b865c92f02a309520291b854759bcca9c4986b85f2c0817e9327bdb69d233f1dae5b52b5cd3f3797c672fcc7fcdf8feb57d2801dc3ca43e4cbac95b919270065a4c617e1e4f11d9a07c7eb87cf9ce7968a9819e79974502818101a05437ace086421b86c6dfc1e7f4ba18e4faeef9ed4d1cc4b6366fb5810ceb5610dc349852b340fea235b0af07adc76ff4ffb91fb73f75bcfd2328d20d6c6c099d4e6b1dd70e75c97e272e3984383657341a8b36978df2bbec2c557357a9bc46cad2703659631dee2df8a61e65841ec80c004adfa169fa0169d476b9253b74cb028181018c3759f53f3ce9a276f4e15950402a52d14af1d2b707c7b055f282393c5421dc49a043ab1057c39ef1de0a321b923652b37a67bec8457e2387d59cfbd891277926f84954bc9195587a798dd01f58947d16384fabded99332918024f8ef4fc08cdcc96bbf3c01b391324462370595d5f2facdd3ae7241a1d8d4f7a161d1b0d91d028181019e24c8b17f33ef0504e0466bd4bb1c787127b19c0ad41f9f0b0741be931e6fe850a34cea8db1e520a7e9b2d59a54e344dab99bc511fbddba5f319f84bc77b34d291f7decd4267d432febf7ce9d5971acf396c80f49599a321830cddc0c433b984c6063e19cafbd715667b7901b39ff88ce6f680be7bccd46a4a906650cc5855b028181009a8f419948a190615b84cd10ea337bfe5fa33b94d2ae506e153a20e6c006c831d025c2fee5a10f67e708631f98532417c2ce89146b279349f9defa5ace677dbf11a9dbffec36a42c0082a912422aa8f641fdc559393276ace5ce985937c3da09220210f381f60eac5cccd0858a8273045c42b96623aeb042d2419be434519dba +Error = PrivateModulusLenNotMultipleOf512Bits + +# RSA 2056-bit key that is valid, but we reject it because the private modulus +# length isn't a multiple of 512 bits. +Input = 308204c1020100300d06092a864886f70d0101010500048204ab308204a70201000282010200ba546c668d1f047853f6d70ea45f0e51926bfff13167985f6bf6056b1d6254255458e4d2145dfb8fbcce9ccc1433da1d34804953487cd1b45b6c16c51f9c0d50cd0118684a96c8a2f6bf98b14ff417b1d591a4f125cfe04c6e6ee7472d45fbf791729824f2adac8edb9b7bd1c2540da03337369106a2b40de64d1f8ac5f106a3aeaf5eb05c25bda6f5d0e2aabcb5901b552559cc7f95fe46af048307f6b8ed954d205cb583d526b63914d1b9425ecc90d598d41c97297016130b1e5cd2c384a04132df6919dba22216b6f962cfbe03859ae0923145e1f60a92dc958f0b1bc12af3215659950a0d4cd28450b943244f37c6f5cc38e52aad4acd64ac4c933e737f4f0203010001028201012e4367e6ce833508eb500e75843a55c3cb2725952d3f1b8615b83000387b818903384f181a167baf64a1a82cc3975c408418961c2793563e01b504b24cf6e2177dcf17d04d34c2fc3367bef1c77843a9d3ed2596fa5c72c48766e1e5ba47f617b1f551f15a8fe49853ce771fcdb030f1e5c57fb6e27ee355d028b5fc2ec9796c83da05f851bcd5798b1b5b71c27a888f8203f5c642c59642f96ed30a62e028cd806a974e4ef3be34845feb67bd879e9eb6a8adbf0b8fd1d87df6e091c45e411c82f764a5e6469120345e39dc896b90b3b677d7d82139908437cd7695b29629cdcce2f23d75f6406039196963868d62a4de9c7b3f299393aa88d4221cef342205810281810e3f428717de170fd9a2a11fdd057211dd95ed2d39998986e064833a186f653018f8e5230ba9ee0f1ec40a5f7aaef80ff900ba71f8af297806780f0bf0a2584c95fc1b9e326cdcfd58dde68b9535d87128aff2920f01210ad57de059c673f0b34903276a02df0fe05b3521027e45907838ab4a7cb09a185fe4d80d5e5733aa9f3b0281810d1413d14b7fabc6ad1840d52a00ff6bb9346e3931289de591ee9772668dd12dee8d4ae0a7f6a808fb48ba2405df36d39842f3081cdbfbfa2e9111b2792964cb6c7959dc5a45dff89aa1b90f0f1bc4e4819d64b83e673937fe8a077895c6544e875e62c8ad4b9d2a1d4b1ea526458de103d2c8c9f95e077af2a39b63c4753e46fd02818107c50e2618a921109ed32765f6268b201d252f94d36ddd67b6267abe8b26ed1b3ef3361b57b813c121392ea30588387695888525b4c6ea29aff577d73e237b5e41099d9237d3d0ed45b2b691770d477de6ff959d7c1b5486d10975f9dfd5c8f62da24fb36bdf748c1991aeefea274bf3948c2df23469c5533ebd6905032f8524930281810a440f46436025031fce20ddf249b434e7bcdb24738cf15c498fa23b7f7aa48ecc69063490439224f2b264c2700585b0d41d014e05f13bba6721226618ab405e59786bec06c44089913f8ed6de422aec3f3dbfd8cbcb14e3fa1e78bcd3bc496316e924db67042a8aeb5192ed89bc21215671f7806b08bf106833ba7eb6b05d413502818105d0bd604f192d745e6f88e5194b2ef390dc4fa61c230a4862d3a12edb3db48178aee3ec577b156a3b0b1474d14e6a9c59276c21202c46410945c7ce6bcb72ab9c61e2c4bf97e3dd4ab47574aad5ca7e0f94698970c07b60ca268f11551dca945ffbbda1acba78d42e9616a6c7da464959c94b44918e6d41423a0ac9deb368efd3 +Error = PrivateModulusLenNotMultipleOf512Bits + +# RSA 2302-bit key that is valid, but we reject it because the private modulus +# length isn't a multiple of 512 bits. +Input = 30820549020100300d06092a864886f70d0101010500048205333082052f020100028201202e8314b5b60f188172bd5b0eacb60b94c15375e3df7fe733d523c37a8470acc8108ac1130301167dcdb2fd3c87f48cf8d1a597a3401cde1c64cd115be2f4f03d5cb8948137ea895b1558b8c836ca2bbe8c4376103a6c490e76fed580338a5da6230680855e6659354525fd3e91e7b238abdebb0a12bd8c52adb49b2eba187d87b577abfaeded16a26b8f2705313975f5214cdb0033e08f800c8d5baccdbee86c435882bdd599667ead13b59c9703f8d82c9bf122f70e80639d98f1559ef57e61cc63593ff0111fb7fde3cbd80531e351b41f258585e4e74afb4ec7793982de1d253ed1e479f6942c48f0d0d2674d3e65a547c11014ca924bb3b01401a7e507455a9de56bf9f74b0a752dca972b463b9113b6acdb0a1ebb9b297e496fca0a1597020301000102820120047c9c98d2d12df9fec9896926fc00adfee0403515304f6b4e9a3e9729037d8767211b72ec0d44d029f1a4401c9558abfffd4b5d7227d6bd42740dc2a168236ca7ef1e5440c29d316e23badf85798732c0711988833a42e9e44cbce7bb1113eb9ce159b083e4b7a24de356449cea8ee4ac9fb5c748fb83f7cdcde8525f9d512eb030b52465a34355b3ae81831cb6804c6a17f756956d9c674d3882b65996b27301f4f467478617432c2d4ddcdb14c77789f29a6c866a975c8c8128043a07535a05e40bc625ddcce0eb295cc3b3bfed4f5d5f6fa2bb84b5580b5ff54de7d601533909807c6497da7dd8c292d9bd247430a6000d00b7b02c3cf82d8faf9653b16dbc344b3e2a7e72461b26600720acd3baee6a11c381281e322e79a2088f543a01028190795c84579a2a729defe281fe5339696f8750942e49b4fc6809a66b628b17948242aa2afe65cf5044a8fca45c5794696085a6c20365df2d7d1b3458b47504a1baf869c61b16c7ea2433094905cbfe311d330d4da8fa81c8f86f6d756f5324931941095e832e0da7862fabefa9b48e8c58aa815654be07ab8c7ec4b739cb990efdbf5b9575fbcb3baec42df70060688917028190621cd2ca19189990fa6adf8f0b1f35385312c501415425094c58b7b6f8a9cc641c3b4b9053bb831622231f7be8b93895acdbc8caedf924e61727504579d6e1911e1346deaf471134aed767b2f4d9e879bc63813d7a9647496c29e1d0166b2fbfa0dfe9d93e7de982af3de427c342baaf3bd0212c386dc50c32f821ccf2059875c36df4437d74a64c94c7986672e9a78102819056eb7635afcadb1056f0e99d9749b54415ac1695186131ade9cb7179c09900da5298c1f63640c70285ed7c624eaf92d178a7b8a8ea5b6f9efcceff01301643274027b1a55129997e97b6fcbfd41c985c8b65e9cb2eafa99a9563d60a0788587a6be423f6dc13177ab9c5f0fea0bcbfb3f95a6cd480cdc985f47d3ba57f367e502aaf935a4f1e7dfe6baf680ab301ebbd028190104ba34307da0b1f86481beb813864b97f2abde7d076ee53d607623414a6f718a58bbfa8301013dca83cd72cd861732180fd5c2340554228a92dd16a48ab44f9ba5a0f4a4b286d962778057436b0bea9017e316809a54e1fc6c44a0a2abf10c62e2d2284ff992020a18491117d9fe6abd62e62641ad73884272f094625e88203053b8cf76cade43511fcf8b6035e0581028190575f40ae0aa97cf56c9f08f6b9e418caa562f9378a17ab36b8e6d503f3f4f975aeeccc162e8870a5942dd2ca8157a208faad72532a11e8f0d9bdf0ba38f91585f49f8b51927bab2fdd22bd99544897a08181e32fe7993173030a2c9fce6c219f44299c96137f9e060da72637546e6837c81cadeed9137f8f18ea5c24025f85a118404b8bdc86626ba24b05e081197390 +Error = PrivateModulusLenNotMultipleOf512Bits + +# RSA 2303-bit key that is valid, but we reject it because the private modulus +# length isn't a multiple of 512 bits and because the private primes aren't +# the same length. +Input = 3082054b020100300d06092a864886f70d010101050004820535308205310201000282012061ca8d93087a5eb0f9a4e5dd47f62651673943ba5f3cfd6aaecbe355e6f37b422d7cbb13fd0675bdb22cf0e5906a224a83701f3256a78f61ba294160cb212dd5a6b42bda1a8bbfb7b21863dcc8a7aaf2a473dc71a9371e8f16e5dc77b2c4025a69fd27c60c7123e33d8c8bd03398566fe99e7601378e4acd97235bdcba08e388107cfab48c0ac6cc713aa09be6eaa4173bebac4141fc8857e09cb136d9e994efdc5a42a2dd2cf0a15a8f67ab8bf2ca5bfe728bbdd06b1d1eaddfa238d28a857e1b376613cd2260bfa7905300af58f8a14e7ecf41fc31cabd45f7f4445bb00d86f15912bcb730216dfdc656b57b94ee5f5c8b3000ca80628713332028b6d48249174fc8a0bd0ec2917b76218764070ae24355c31eaf389d3403d802bf3dc42b7d0203010001028201205268fd0804a4033a871744b3471a93ce13fc392c4d683b73751cd357280ad63bbdd398604ee1ebc551eaf793ae3112f6d26f618aed65c5ba28c4ed98a1763387123651a23aaebc8114afe3304354b1064c3a6b72c9946ec74d17a6c4a4bcf3f2b7d1247c8d2da77daff7ca3749d3be3c0f977f80a50ddfd203e5435beed6e0d0607cc255f6927a57fdafd77baa8ce07caa191b77c5b2b725636fd252f9246c4d26d4734e472e3884a0c205ef9e947b8882f9b27d8b3e305231757826b900aed455252552af86a1cc0f9f405126272d4e86a5b3a4539fa4ec46d1737921ad5a47046a9b2e1fbf9e745e802155b2e8205286b78317d5855494aae4ce94874c527d21027d11979bcef23917eef81bbd3e1fcf7cb04f8b0f61083acb08d94ed990cd02819100e6c1fc3765e9c9eb83316e06bd2e910f04cf23aa7aa5d303001db15f93bfba4fe28f19205499035be6d2c224396c9d669897dedd6a8c4f399dcffdb8181078baddc34d159a10741384db2a1850b4242a8f63b16c5478b72fbc17efef4866a5ae156e4b6222c86c2f4e370a55c9690f20122f6cffb37a1aa71d848bb9b7b84116a511ba76dedf8743751b842fb140ca4f0281906c7d0b982df2ac5d289aa1925f65be3c562373fc8f19171b53d85ffc4989cd30442175e423d4c106cd00e64f3108fe3f8cb3dd8eff6fd380334baa0e4372d98755a82c6d02e63443eb5020dcc2ce6e452bb6c7434a9758f1cb33b9ce6148a4bed5f042da4a14cbe83d161c26450b8c2f0fe4267d7ef0499b4c7b6407aa7e66f2d1ff5724a01ace5d30a3bc0bb2319673028191009c9e73122290b024b2119d8ce36034c24dd04d73caf4bba860aec69189556b1e07367aa64fe4debbc489ad8d2a9086b078c73353729ab2b6f75e90e51f2826d925e5056fb0f693e21f9d251005ce8e71788b0083f73d4b901188e9a7adab45ae470b6a0cbc70edc499c08fba340ea35e70195250a6bf2c51da9df8bbdf6f267639293436b40460e92f15b2fd2fc03acf028190157424f6d31f4a36a1f0f2429fdadee3cfa4f32adea177904fe45a16e9f3f63fb53968b6d4df1dccda7d730df6047142dff031c0358347aff274e40c2e0a6839fb1666b2a8001e15d052e82cbfd952b51b0fea17c488696e6760b33dbcbf40d4fc39a6fec3e798eb34294b27c63fa2592c2b51f13f49054550ba95ed6e29d0f1f3d52ac67362d9ac54120cfdc31f4b410281901ee70df154d97ae00935532cfdb43c4464bfdd0d6f76712fec6ae76f2a08f37f48eb2d54a341c023a1f79b143414f79479f5ace419ebca650a133fd6fa599dc3754851e04a5128bc007cccb1116339844861beacb1ab660ab629fcf0ed70ec41368324848f9fedc296c7104811b85141dfda4e7a51af43483e133d557c906b75590dea5480c2a3b7ad881ae6de3047f3 +Error = InconsistentComponents + +# RSA 2304-bit key that is valid, but we reject it because the private modulus +# length isn't a multiple of 512 bits. +Input = 3082054f020100300d06092a864886f70d010101050004820539308205350201000282012100cd1d23382a2db0444fdac845b1645182df1ae59d14830e6e4fa41ffff1c1dbcb63e8cebcbd8e643702ef0ab6953d65d9e3138509d5be4fdd15aaff1ccd7d34619ce713bdac14838d4a25fb561c6521992ed523158b538eb9dccc902a7955c5f568e6652fa6296370d589b5acc0ec1cbd110b2506ab73d2c9180c77be49cc8c27c4b06e4a102c60414129ed8644e613735a1f8f5ef874a50ca7dd6c42cf5f90ae745d59cfd4b47bb3c8d86a0c5aad1d7f306343f8b12fbc3ebfda03a59a638dfaa519e241c0fe728322df643cf20eb85134ea7625b8414029ff89fa44b4d8955c43382dc574bffefe4a5f3de5908a4d220d525e85b5774380b244ecf667014786c14cf53517c5f15179435c81e97e46e83c20c21e5ac8922544f1c39bb20571b302030100010282012100878559f0d10570f221a4d7301cfdc0516ce193964ea82ccfbbb52023767374aa94af8c70edf977c3551fe57f2f69eab2a4b30ff2a893dea69f9b64857e4bdc61264f131efde46beadd73ecf53f3b9e905c7e1c792e9e1dae35f1becb217207a29715ab036990ed0fef36d69f76b44a64ad2f24de9c47a19c96541e85ceb2e4639e34481a8d4714ade8c53017c7cc104ab6b0df5e2100f42af6ee1a8edadd726f3303321b9d697740b9ae11cad24f5a9edd3dfe5eedeb03eb5322c7725dde8162cc1b5c4bd56e07fdbba2b75b414efe84ac12885350928d2f859e2803261a6f449f92810eda199fcf279e780e2c47aa119a7b0d7b7729a0a0067f3d648db50673042a27f2f714d335c9aa022a2f51b9752dbddaffe039f5ba2a9736aed89cb3c902819100f0e35612fbec84c21e07de8f8a7f1c82bc1fe9d4e487929d88c925c352750dd4ef5bfeeae293f44437d3da88cd377a3926f621f1d92ec2f5b56775fc4a234ef1083ce3fc309bf6974758891e3b4d5d790d84d22b839adbe2d538668843d962a9ccb761a2f7d1329643796fdbbffb9d2a3b06f31a62f6ea24ba96e7f827cb66c4ceb763aa036906cfd126547d18b57e5f02819100d9fb446655a1eff75331b259824d3f1e1e845d3d6f385bba360424ae08ac55beef743b6aebc5f4028dc218d5eb5c31bbfc53a0035e7951ba9014c8e4e6ede6d21763272770058cb8ecb7d995f6ec9cb34c8cd63455eb832ca13783ec52bd789ce47010f141d3364fd6230aabb0045596680225fef8f0e7148c1d52ff630be6bca36ca3cf996507ee3e2b6d618a35a52d028190767d8d0067954f34612b43c9ddb96adfd003eeb47ef9452062817726ddefa02f26d25cd15344adf9c4705c65c0745295bc598416ffdae5a1916ae3f986ca59716cb8eef8453ce28e45550295b15bfbe7a8c3b5d21bb95801fb19f42d811a7452cbd5449cb243e01b53f36f176c172b96f35416cedaf153f95f230dd5de554a26f2fbf8754f9a20f4a68fb12d9bb2e307028191008319d431981f252c232528971cff488edcdbcf183be43186f525d8c9b2fdb3347adff53c81413558b3d9a10647dfd329b4c0b6e44fd5b789f54e0ae560de848ca6f443803ca799d33ecbf4597581295dcd14876042acbae004b656e9b379b128eb5b5b553eb9c15892f9d059222bf92dd4b03619fbaf27cbfbd94729c2704dfdf66c48b97b10808c91679d09a50e4ea102819100835e751035519d3a6c0a6cddfa73d928b5ea0c51eb7ba44c34ddf148edb1971e436c1438ba996c114f0a545bdf3cae1be3da1ecbc6859fac3ce04a7b1beac6c19e5f032ecc7cd9e96e8e6fc2241911f90ef0a26b1c8b9df24e324690f6be4d904a7070d9424120b65c8ebd733a97817f943d4c697dd931e66c8a5eb0bf54d813e0df978828897bfe304cdb799728cdc5 +Error = PrivateModulusLenNotMultipleOf512Bits + +# A valid ECC P-256 key. +Input = 308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b0201010420090460075f15d2a256248000fb02d83ad77593dde4ae59fc5e96142dffb2bd07a14403420004cf0d13a3a7577231ea1b66cf4021cd54f21f4ac4f5f2fdd28e05bc7d2bd099d1374cd08d2ef654d6f04498db462f73e0282058dd661a4c9b0437af3f7af6e724 +Error = WrongAlgorithm + +# An RSAPrivateKey, but with an AlgorithmIdentifier of ecPublicKey w/ P-256. +Input = 308189020100301306072A8648CE3D020106082A8648CE3D0301070500046d306b0201010420090460075f15d2a256248000fb02d83ad77593dde4ae59fc5e96142dffb2bd07a14403420004cf0d13a3a7577231ea1b66cf4021cd54f21f4ac4f5f2fdd28e05bc7d2bd099d1374cd08d2ef654d6f04498db462f73e0282058dd661a4c9b0437af3f7af6e724 +Error = WrongAlgorithm + +# The AlgorithmIdentifier is rsaEncryption, but it contains a P-256 ECPrivateKey. +# TODO: This should be "InvalidEncoding"; that would require delaying the version +# validation until more parsing is done. +Input = 308181020100300d06092a864886f70d0101010500046d306b0201010420090460075f15d2a256248000fb02d83ad77593dde4ae59fc5e96142dffb2bd07a14403420004cf0d13a3a7577231ea1b66cf4021cd54f21f4ac4f5f2fdd28e05bc7d2bd099d1374cd08d2ef654d6f04498db462f73e0282058dd661a4c9b0437af3f7af6e724 +Error = VersionNotSupported diff --git a/vendor/ring/tests/rsa_pkcs1_sign_tests.txt b/vendor/ring/tests/rsa_pkcs1_sign_tests.txt new file mode 100644 index 00000000..171a2f74 --- /dev/null +++ b/vendor/ring/tests/rsa_pkcs1_sign_tests.txt @@ -0,0 +1,480 @@ +# RSA PKCS#1 1.5 Test Vectors for FIPS 186-4 from SigGen15_186-3.txt in +# http://csrc.nist.gov/groups/STM/cavp/documents/dss/186-3rsatestvectors.zip +# accessible from +# http://csrc.nist.gov/groups/STM/cavp/digital-signatures.html#test-vectors +# with SHA-384 digest ccf23d868984de1112f2b6d089bff30ae3aceaee371655111a6e746487549a5f8661a7f43b9333b3d3f453068140e1cd +# filtered and reformatted using ./src/rsa/convert_nist_rsa_test_vectors.py. +# +# Digest = SHAAlg. +# Key is an ASN.1 (DER) RSAPrivateKey. +# Sig = S. + +Digest = SHA256 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 5af283b1b76ab2a695d794c23b35ca7371fc779e92ebf589e304c7f923d8cf976304c19818fcd89d6f07c8d8e08bf371068bdf28ae6ee83b2e02328af8c0e2f96e528e16f852f1fc5455e4772e288a68f159ca6bdcf902b858a1f94789b3163823e2d0717ff56689eec7d0e54d93f520d96e1eb04515abc70ae90578ff38d31b +Sig = 6b8be97d9e518a2ede746ff4a7d91a84a1fc665b52f154a927650db6e7348c69f8c8881f7bcf9b1a6d3366eed30c3aed4e93c203c43f5528a45de791895747ade9c5fa5eee81427edee02082147aa311712a6ad5fb1732e93b3d6cd23ffd46a0b3caf62a8b69957cc68ae39f9993c1a779599cdda949bdaababb77f248fcfeaa44059be5459fb9b899278e929528ee130facd53372ecbc42f3e8de2998425860406440f248d817432de687112e504d734028e6c5620fa282ca07647006cf0a2ff83e19a916554cc61810c2e855305db4e5cf893a6a96767365794556ff033359084d7e38a8456e68e21155b76151314a29875feee09557161cbc654541e89e42 +Result = Pass + +Digest = SHA256 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = c43011f3ee88c9c9adcac8bf37221afa31769d347dec705e53aca98993e74606591867ccd289ba1b4f19365f983e0c578346da76c5e2228a07e4fc9b3d4807163371a52b68b66873201dc7d6b56616ac2e4cb522120787df7f15a5e8763a54c179c635d65816bc19485de3eb35a52040591094fe0e6485a7e0c60e38e7c61551 +Sig = aa3a4e12eb87596c711c9a22bcabcb9dadffcabcecbd16228889e9bb457d5d22571a72f034be4783384f43ce6fffc60534b8331cdd5d7c77f49180bfd194b5fd43a508c66d786c558876735894e6a9300952de792f747045e74d87fd50980230707a34a4df013ce050bbff0d6f570885c9c7bf8dc499132caee071b41d81ff91b8ce21aa2f282cbf52389f239afe1490890be21f9d808b3d70b97efd59c0b60e466088bb42714f212bc90db7e942ebcee60e7b107fff44fb3564ff07d6d02850215fd357d897c4d32bef8661689f2d84ff897637fb6d5568a7270e783426b74b7037493e5155fd7cb3ddddfd36bd8a9c877d71d2a966057c08263d2939c84987 +Result = Pass + +Digest = SHA256 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 61d7b3150131351e7b4c8e5645d38be9335b40289af34cc6b6fc5e48493bf8b7852c73982c99441ef66c7d9d33c29742b1406e02e0aa8dd034b1ac13cb0d775750cc91421fead9caa921eca61a02eb023a457e77915e183acf517d946bc68292896014fd214b7c8c5e14e15944be0f9296127771f736766e4f81dab3708ea2d0 +Sig = 84e92a145ae6be1ff9242d9ed2d68de668e802524e8ac0a79de62fe74048c35491fd2ffdb185057e666dbfaac84c34fde7891263f8b2bc74746230320f67a7bd7319c9b9de4190547014e2d7a2a5060d6200aadc3a44bac029ff3992edd30ec53ab0d9123eaa6b147352a073a98161e64f394bb99492c6977e24f445c7125bfb90f87faf262272134acb18823a99a5228d1495463297fd774877fb63d4918106347e6f29315e48363f39b33299eaa32d8da71b229d8ffee5f66f722ad3aa4175d3f84ece9cc8eca8d6f2f356a85c1524896c18f7b5c8f9bcdef45c496d539179891ddc76e5208ad8353d48c624054f3440eeba4432a10654a11ef53783bd116f +Result = Pass + +Digest = SHA256 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = b6771ab0e128b41b32b8b05e05add23ce0fb877b40bfcc3b992f4c8698d1c828abecbcc1c33d401859ea2cb2afbc7fa4588802a5faee2867534639287ad8af84674be18db661de1da8e19c6b6bd452dd9bf3221d0861fb6fba96be42329b9f04f37dcf3b41fc58d2298348b0c15d1190b125300cf27e0dfad60522fc49846053 +Sig = 6276925568626f0cbe6f5150b050e1702582f8daf99a6f880ef75cd96c2d4208fb6e91b01ba6aba2a816b2d3cb975df850b1d268c4662dd1ea3a300c1d7171c633dd2efbac3000c56ab80f989dbc18243e636ba5d4d26a7d3f1965ad3cb0f1a8513f998003f7b67e2ac5c718cb688b3201d56e68f0b9f86257b84794cdffbc1fe3ea24b7bb6e9ef0539bd4fbc1afb55bc1dca39996ea8a63769f6e225707f69047555e1a4ef3c639c5f2a497b889424a90148639bb64df0a06e0b7f0e8ed466a977baca32f482337b2abe3983eaec3fe1075016e5867521760fd0607d799f1766b3ff6e2ae155d69250f8bf08c8edca0b4f31d0f838cfd298cb7312df93f0997 +Result = Pass + +Digest = SHA256 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 6a81cb6c7b268f4b9fb9172adbbb36a237a0dcf1c3c83a95dcb0271aac6ac330f04a5a00fee38bc00631a98598186159660d9d8e4c14a9528dea94836083dac4abb73fd00e38fe0e23c7236604a736540e52193ae56c33fbb8f5cfc5c7c2be2e222e4483b30d325c7ee14f742851fcb8b6d6189e98b822b8e6399d89e90fb997 +Sig = b67991050c083e645097db03fff34758868beb19e9c0c48475f0f913361e71d3d6f27a8c4f0b269b49e8534039e53ad3bab9a3e62abe078ee75e7fb5959006fbfb014ca7b81b3d5afe0ee5f6fc2dfbc450f2839543002f33f4f354f827278c76c041686eea7886ebb2a7afa5995c6cddb1c0b58066ddb8dc54a6927c146c3b2a0fa7cef28903c6c672bc20ef68ffbfab247eb688ab4bde7106d9c59d2153096dc9e5207267038d88e2174e76adc1508ae24eb602332e53c0c2e33154a66a97a0f12f66c61258c7bf6bbf3f1dcbe9caf2fd30ec68c0a9d09f4fd776304b540e62fc8512beaabc4be2107a1ec18e87f61f9db25e871dc0693cef17c2a687fc854f +Result = Pass + +Digest = SHA256 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 056c1e4644599e3183dd8d2f64e4bb2352ff00d012ab763f9ad6e560279f7ff38a5ecea9c2e4ea87d004ef8cc752ae93232aa37b5bf42884baa7e7fc6a8c951cd245de2d220d9bee2b414b3a7520c1e68bcf1ae99a9ff2bf3a93d80f8c1dfe8b85293517895c192e3c9e898295d65be334f44d62f5353eb6c5a29edfb4db2309 +Sig = ae05204e409d727eb9e4dc24be8f863328c2813da4fcef28866e21a5dab21a485321b735274af06bf17e271518e11164d722ab073548f02e1b441923db6f1cee65a017edfbaf3361c67fbc2b39fe038cb5cb65a640f95887389ce8a5ad2ec6e69d3d603505b025f6d6330c8b648802caf7e6fa3fe7b38141659986cb89e6232f106222564d5e5195eda6a25f99068572c2fafe97f147f7f2f4119f21385af1fced97f78632d8bf4fd9a9054d8b9aa2a9f4ded587847a91d42c6391125f103ae288547e8489693ae8686b84891b772b10c4796883f66cd459a8c1a6a4187bd6b387d349e92d7b604953727c9e9fdc449e7345e7ca6b339e26b086f5548898cbe9 +Result = Pass + +Digest = SHA256 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = cec5c9b6f84497ac327f68ef886641fec995178b307192304374115efcc5ee96270c03db0b846d674c528f9d10155a3f61becce1d3a2b79d66cdc409ad99b7663080f51a102f4361e9dbd03ffcd876b98e683d448bd1217e6fb2151c66964723b2caa65c4e6ca201d1c532bd94d91cd4173b719da126563927ca0a7f6fe42536 +Sig = c48a8e01d4bbfe0f2f05659337ea71d21f38d7f7a10b00b06e1f899eaf40a8e97ead64bca37f13a55ef1cf3fb52cee279cdcb096085a467afa97b03d78d6076e472b12d6be9647cec32d8d91a26247693771687460ba5269de18e1edef6022533a9579f91d584f9e0cee1100c447b77576b1b4ee163ed4700147a9aa61bdc4e2316d2d818c1028ed1c3e372c9f6a1745572444637248091b83f7b539f9bd58b7675676034c20e4ca119b91c4ca5dc76acbff3d0462898352c591c2ca6f2d8b09e2e6338a84336e06f0cc020e9eb8da785889b497f3b98e827ee7a7d3f1b0b73c1958e16aa97861e6675970ce31d9d119bb340be80fd0f43c3dbe64f2a59d629d +Result = Pass + +Digest = SHA256 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 9193f8b914dfe0e62521f35afa4fa5d42835e198af673809377a3e7a99733142a180dc0e13e6bb7ceb3b60e5e9d515794d82c392e07913423391d22e2bb19aa0bd88afd7f77e27a240ea4e2de085481ac31ff8d37990211f82f2cbf4c90de98d6e1338bbc88e6a80ab9684dae64785dd107248048593abc9ab03f1737a6f6530 +Sig = 5c2fe453a8b08c90b02eb2c9994242d518f3f21b368895cffd624050e48aa714005ae675fe79aa3cadd4df55bdf12bec5be8a41d87538f7e031b782e34d392468e5f14bc613b8f4d28c8fb79a2537e1e601031da720acd7b2c8dcbe9858624a7a9a92a06f91845f732370d67365c6464f7b68f22eb3edfeec97e3285024d7f6943b6d50a16cc96d60f680351deaa25f0bc868948607a6ba7f1949b85943c6a92bd6172e81bcc055014b78a733972e3f39d14099d1607a20ff8681c29ae1ef99ef115ed6a1084b514b81a69d4a15ce1e2576fdcf2b2af615b52fec70132112dcc5bc19ec17f32281460623420317353e8a255fda502bd1fb11a58832ae2c04f9a +Result = Pass + +Digest = SHA256 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 0e57ef40b021bf87f642c5756b6515a0e06c15a01856d716c566a6edb381dfdf44d9033b1cc809e61dfef9a096dfb689b7271be449d04a1a9c354102c077af5ff72005ab6b06cf131d7345c21e821d6201cca4e090440d70be6009d2dd7a98d311751e1605a3b914dce6d2626b16f233a5a3d71d567cc820152f25e473514242 +Sig = 7643aa3fe63e66f79d6b409d145ea820c9f7356f71b4acdcbd43fe1e99f8802cd1662b16240f5cfd94a769b0b3f2cb0b11887e886e5ba43733367490b3fc188f2fb3a0c0c8a68b5d2726c8f7a31902b6b86cd402287d385c3e3c06503ce17fd6e54e582f4a907a91f952d2a360e2fba00028e4d3b02aabf7d220b31d1f8ee7faa070147682ccc8bcc756ca6a68fc20954550c317e87918781a3d1f1923503091090c3c60ca1c0b1c699906fbf85aa70ad9ae48709ff743b82dcc31074cfcea623ea45e48644b19a21772ca107ed64239c56574a087f1a6aadf0f4b00ffe581c1410274c875e4599063e46e5168803f0d28d21fcd3509b4c6222995add7753bf3 +Result = Pass + +Digest = SHA256 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 0c8491fc348d341fe85c46a56115f26035c59e6a2be765c44e2ec83d407ea096d13b57e3d0c758342246c47510a56793e5daeae1b96d4ab988378966876aa341b7d1c31bba59b7dbe6d1a16898eef0caca928f8ce84d5c64e025dc1679922d95e5cd3c6b994a385c5c8346469ef8764c0c74f5336191850c7f7e2b14be0027d8 +Sig = cacc8d9f5ecd34c143488461135c4951676145c6e472b92f12f758046f172142fa388f285f3fff068242028829047e248059ed4fd39d2c5ade469dc7c39345e5114950d2031cc7465fe712c4041d05c756d3f2d88a46ceb99f2e24a52e958a03cd2519a9b137e62d5ca2b353f7b047b625c3602313fdb53c8db23d83951a599db328fedc4ae06da89ce7f56259b5c8222f7bd3d9740478fd28e5810db78aee8623fdd39f603f8ddf98081d7873980c4eb0e22a9cd408f7c4134c12d2049a2d120f4b62e6b382b997fc375ef7ac955fcf80b045c3d6385ff422dad350c68870539068a162a2edbb93ceefed9677939b90bd3dfa0dc053460b4e2332efa692179a +Result = Pass + +Digest = SHA384 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 6cd59fdd3efd893d091afdc3155d354f10d6d88167427a2cf7246207e51791a6ca6200a914cd2834a9b3c79fcd59e26e457e0683bc33d49267edbdd6e5d90902696f1e7b1a4affc4ba371339868c28015ebbb73e262669866c35db974ba69e468f2583b9191d15d686cd66fb0b9e0ff0a3b4721a6dc342f14f2446b4e028595b +Sig = 3974900bec3fcb081f0e5a299adf30d087aabaa633911410e87a4979bbe3fa80c3abcf221686399a49bc2f1e5ac40c35df1700e4b9cb7c805a896646573f4a570a9704d2a2e6baee4b43d916906884ad3cf283529ea265e8fcb5cc1bdf7b7dee85941e4b4fb25c1fc7b951fb129ab393cb069be271c1d954da3c43674309f1d212826fabb8e812de2d53d12597de040d32cb28c9f813159cb18c1b51f7a874cbf229cc222caeb98e35ec5e4bf5c5e22cc8528631f15117e8c2be6eac91f4070eecdd07ecc6db6c46eaa65f472f2006988efef0b51c538c6e04d7519c8e3da4b172b1e2761089ed3ad1197992ef37c168dc881c8b5f8bbfee919f7c7afd25b8fc +Result = Pass + +Digest = SHA384 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = acb30be9092b2f18f25934a0d678b6bcd6b67c2b88e75884f47b4fcae3adfa405afe2c7e61e2d6c508b92790ac00f76b77c965082668bf900f70a33762de6413af93af2ea8086fda293ded4475f23c4cc31ad494f98d7dd7b7fd6f7d972bb76cb35adc206804c3fe5acdd0e5b8b54e07c29111f788bc5902f40afac30afdbaf2 +Sig = b5c60d8da9b3943878cb2359cf65e4817c0794f950453ca77c81a5a1c1585591aa50a67468e3b399e4faf1d606bea0d9e6cc1d2d70db8063739e0c27d3dc9f9afe88dea52e73298a07d05c7d9707002efa537c389e38bd37bca74eb0af6261a5da06136202c8ad487eebd50bef74767089c70870be1d8fab9156f9fdbc2f2e9cc330a95018ce7943984becc25621bfa66018ef8320b60059f941156e9cdd87ff0d82cf7be77465e0203e7120aaeced84abd8186947d4ac3daf3f993902aec47c3090475c857b5d359f0a5572d4688e5a76a4653868ff54ce9f999e6bb559d1c11c67c15be9d7fe5f8c1704301d055f3d2907722779d6012036084e950de36f4f +Result = Pass + +Digest = SHA384 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 601a6aad3faa7988d5ae528a6969031b10a6f39216946aa89fd4532c8ed141f9a650b126ef488f7c5cf3fb2daa254cc28bdd55560419e80214ef999896dac4946852d24fcd9fb77610eebfbb6ba58bca26f4567f03ac7e56da553f23817bc103ee485592a058fb5e3bc8299c7290c71a29137e75dbf5328c3a2dcd34165b3f2e +Sig = 301d60d56576f3663a7fbe8036bbe4fbc0fbd82cd6a42e36d7bbc8b206543dc2d56d3198e7911ad138cad222dd99050dd1f85fe19c8a88bf67135e7f8f11b5f5e485c91fc7d478069b72f46ebcdcf2d2ae7de6ac8fe53bb6c04911d122cc231dc210b2147ebe8b052e8b2ccc09f338b349de2025cc87b2619a7b163347ca66a34791a2e46b4e2ac57eb9f6029cdbe024e896d57f7d0491f7783312f8f06c790770150cd139f61fd2b3e7041b37261c6e7ea86d4e06d9300b1a5667cb0288c550b2afb355944834b461cead13794276bb46e5e20aec7b63aaca4d491a500facd59a37c52779cf467d74af1e62b1ebe0fd0be1cacb7ce6d050d86e4eb76cde0693 +Result = Pass + +Digest = SHA384 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 44d3e0fc90100a1c9316063f26b180326cc2e3834ce56e4324528a0bbb015b3d7812958cd26b91bf08a3a0b1121f9f9dd77acb98a02ad75fcd613c53c732d1c235f59b6873ece6363f279452b6a4b65e80bb59fd47b9a2936dcc1e4dfe1f5362e3459b9859db3209a2698d27fa8aedfecd4d35b927daf8686c59d700490f0aa3 +Sig = af2229e94a857b89e0e890daca3a8fe12ebdba04948d1883a7d7816a3b682f7da3032540a8769f9ccac9586cf24e8c204b45b85d1bdcc5a5450a215b4048ea42983b3456fa8c76c6786e024f705e088d694559d668caa8684cad0fc57850fcaf34e458aee8fad4e09e6f196557d4e8860284d982c0105d98ce4912e96c3550e2a0c7e8bad5abc29a9a542f57a8c60579038067b3d5391abc21b4f9deb024ca58f9b0c38c0d1f82373f528e939bd73a24d501c591168814c872c525db0e56cae47df00fa3728dc3a0976965323ce8d2dee2b138b50ab7afd48495114673e91bb3ed2205e26a8455474c3d4ec8739bbff6df39b2b72ee050410930423b1472b6ed +Result = Pass + +Digest = SHA384 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 5af09077a1f534b89822b26c3272adf8500d3c6bd90f9b5e0d8b211f16d0720ee0eaf6462b6c8a80df6d75359fd19d03a0cafb52bc9d4c37c2aa099911a79a92652cc717f0746fdcad627c72f1c216b243d2175f6d00bf07d3f6aa2a04d4fe9f8fbce93218944b92aa07af6b4fcd80cfde2d7ada15c05e96e777ea1c17df08fc +Sig = a56823fa577e8946f1d2f6e351b738b53592544358528af88807ea4f19017dfe81a3d69f62fbff649550d9b310faf27a041fe624f0a02bdcddb79bfb0a465739ec8b64b748cc29e5a02c777e1826d3e2f1eee6fe2edee4a8bcac519c7c7ca5c039e76d630668945a1e5e8618e235864561a440e73e39f6d6842ad7da64ef5b0ce1c4ab88db157b68107174ad7d5c9a6065068768c11c4c96ff67050b5d07b8cd027fcd0d347ec79a197cf43435985bc1aeb479db0022289e8dd3b31bb7c62d8831cfe6952f41d24f89d753789535f918ff68b36950af6fd31dee1ac476a0cf93afe9f4a766f3c4d2c0c3f92825d5572eb2eb8a2b644e329eea1683f90810ed77 +Result = Pass + +Digest = SHA384 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = f60a3a543768fabe37f003009a8c26f7dc91f1422d4429ed7f9d744cdd4b552afef75d241acda04ffc39672159ee248e602dab7192449e2ed4552995c258f00a476346e36a29a0126bc249040faa57c9380bdd74b83f62c56790920574433432f8d65c5cd185e24fad13127265c6a5ef8db4f114493d5cfa61d91664981408e9 +Sig = 08d396481deef18cb0bef7c3e826fe6e5c9ecc85e5230d35d66772b8d2d015d4e5f5794fbe0550df2f745730d6f8d1d3b850d164fce4630805e711b59308f8608506b7e01e8e9294ed8b7e7582165677f180e965169dca81b3daf24d7b92fe32d6a9ac63821d48b1a0a144fc7a04b0bfc63a3bc16a0fd837b02037ed76e50d46cbfa3857e658e370c586ab1eed825076321ac8e82be374bacb295e4d3408f0cc1fc4c300b84275a51c3573e9cabfdbe3dc51e4a6f5811d860d725aaf8fd0af19a2437b0f1c80f5ac222f6b25f1fa09e93399a6976b1b3ca76afe6086e9b232aae6c7b818255bf963f31c04ae3fa2136c0a442997d4cf12f395fb804a4755b56b +Result = Pass + +Digest = SHA384 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 2c07a81de58955b676fec0572d48d1955b4875ff62a44b0010c7a1072b299ee44dd0c076f2178a83d0ae76e767e231f1d81e070afab29c97abd4de2164e437b311f507841f8851d6d69ab51ee9e29e654b54bcee45e9b519c6a21787facb927f1d7d6491926614792fcc6346dcd080bb5cf07bf56ad0fc4e083a358214631510 +Sig = 9aa391e7c2f0e920aac27ed9fc2081d3c9caa3735883d01ad7a7e3b11867d0ad624156477bbbdde659f474682d0d774489e2b5b039d1eb35454c9e3eed78cff9c4262e3aecfca1d817542b486096598e1114bfc03f20a45de36f6df70d144d01dc4866a0f83319e7c2b8530f8c27a41b7add9f692d8a8e646455b67c9ec47a4d2ce3dfe35d6a2e89d9be50c5b6da39bb0254bd23a809ab97b2b48a068a87abde6b6a6e35955fc92a9626f9607d5b3f401517271594bef73859812b6a621ed6bdaf3c5f2a90b1e1680f68dcfccacb65e0081f1ccb6a2073709d1ba067065016ed73ebd7ebe9e7a7b60c8c9dd04a56fab30702c8a6df6a353a301047df4c7aff62 +Result = Pass + +Digest = SHA384 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 35ec92afdbc2fcefe48f1e2f6e4829ae53b3da0459cc4ea8a96818b5831891ee2f506fff37c89906d3233a51a5cf1469a62c185061f033085fca6a54e24529c3d6f0d8e904bcb0f089a5cd50869484da1a84f6fb8de4e53fce3dc714201519d11013f6f6aa64e8b5ec5cfeb27b611f0895059d8c47720d55e00b577ca5500920 +Sig = 6b0f5b50e678da083ed0f1b64e943e8c6279c7246af5ad079cdbf223e42a0d471e56314bc0d58f202aa6c5e1e5255985b0795d48eb3d4b8e3fc92240ae02b4088c6ce8ab0e8c79c68dfdc48657d6a28295391b9a5a5f35255126bf8ca53cbcc0082eab52ec109d22a1185f6dc792fc290aa8dbaebb2fbe404f1d039aa6343cd7af9fcb2d1e05def48096c237e10daa7cfac5ae9b3b3022005d0d2d5c9c5c502b2f23594e80d1604bbb8f5dec07cd3afe1f777743b0b58a4e0e4e5caa148830eee047968e7f40661f9f1a02e1a7fd2b6caf19326a75e9565efdc0114bcecb14dda06c329cf322a5bd3e6ab48d95f2d2a9c1c1233a0aa015a738f901f13148b454 +Result = Pass + +Digest = SHA384 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 80c9debdf93174d75750a6cf09af71fc18fd513bff9cb491be60af112a93f000873cf43858a07aca760a37e760c8cb01d276f42d997f01cca5e08a6a602f5fe63edcbed395b8c91fb0b336f21fea49d950e1ff24640c8d8d3b95081ad1596644ce34a558587e4a1e2cd50db9ed1dd3cebbc6dce8084d3e1ba70692e82618ed61 +Sig = 4a15a783adbf274622d5a610bb6fc73337999e445dc2133accb788d6203d70f3cdc63e67daa4171a7952a4986456fab3c077a8941fb259e37a5c0cbb20c408fa24ad0ec850e9bf028c3604609941f5ae2f18bf1ac37a24f755abb9c85ddcd0bf4a12fabd9d253029e081f628e2bbe9f9afe9224954d8315db86c2125512bb98ce9b36930994b091a8a1d7d4e2f4a0e58d0a35876adad14300530b39c8dc11ded3ef2fa95d5f22e67cae34cc21ad5e23f9122b53dfb79f1a2ac63c1844e9ef069a2e41f178d6dcedc518aafcf81e0ebd882556e731cb0ab41d957274a3fbbb7cef2608791000c6b860868cb7393e7d03d945689ffb77555efe08f461451d33c11 +Result = Pass + +Digest = SHA384 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 31395cef349551343a49271a8d812b4c7b65b455b7eda811fcf74161f397112357ae446257be26c93cfce55e4ba7976ded997ec10d1c8b1ac2fe22dc2ee81d05a6eb1361125cda0197e24ae974cd44092aa9f36fe01352ba05ccefd2370ceed6641950562f1776c39522e023d09a3b097bbe9bc5f87d05d80f8830abd7ac8c80 +Sig = 162f387695cf9d82dda89c749318e46c9be895ec364ea4aece97ccfa63925af3710894da2b7b5967e46f4efa80ca25d2a965a7e15f75e0aa1bd4250f8f41099e6e9714c3fc4311077ae9bddfe35ba4727531529c239d546ab1c298187f165f708ccc0ae3979a8da193e34859a59c2c3bc42253c8346688e6bba6fb1b01b10c1ec2c6493dedcc2696269d851bde63e27e37bed357455c8fee5629f94afa7a986695cfd5b99212657a6c884644596086b89e0c7c05e819faebebef745fd295af8866e0750f5479baed50cbb3d059f8a5eb7e0e61e2733ae50f0c1ec42be71f5dff324195cb4f0e941a21561513c3037db92fec9556b772ccab239e34b1876c56b1 +Result = Pass + +Digest = SHA512 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = a7c309d44a57188bbd7b726b98b98ce12582228e1415864870a23961d2afb82cd5bc98bec922d5f2ac4168b056da176ef3ba91f6b699ba6acc4144868ff37f26fd06720868d12ad26ecb52572cf10416af68df03ab645a8b704857d2190ffc3f07eabe3a8e2abe34ed6159e884c4fae141d4333d5c3e0db044ff9cccd9cbd67f +Sig = 148af61ed5ea8a87a08b3f403929bf8031db4fd3999b64409ba489f97a3ee5208ea4202d2ec18734f615003a51f77441085be6ac0f11810ffa2dad58f0e186d5520ac2b8a5d3966e8d2abb8074e13b50a4e7de83be10a66fdc7ca18118c5774f781212de9efebc6376fcdddc65a3b1b8f1ab31492fe478259ce719b3db587498d879a01dec96e8eabeb07ff7073f3f3eb446084955ca26329a791315a2c259d225e26b2154b2047b21faba68115bfd962e5e24ec52d7c5d231e3044cbcd8c8804855703cbaa622b15b6ef78c7421a367166f1b02576c87360593da75b7189efafd1082bd59f6857f1701f646c24d70c95273c49d5b11e6afe258821b55c1680c +Result = Pass + +Digest = SHA512 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = ca505d4591121664990747d95d9555cc75bfc3fdaeeceeaa60eafab3fc320cfce56eb9138138bf138f25f3c8bb027b136f5d3d90ed4897779b5951c09df5d08ba9ce8cbe17abc4f038687086e93d771b684322266633d0d65d71ec41234a1dbec07abc8f7df28bc43dd8a45b10ceafac06775805413701914e3bb37eb6ba5b5e +Sig = 589ccd4ebf9764f87e6afa7f13c4062579b02228117b15a8738ab39cd64477069cb4f52cd8d5f4574c657b453835ca3cedb824f03b92a573d6d3d91361313f11bdcb34d2059fe2e6ce2b854461af58a9294c88cbfb2a639976b56e4748026f3040e2fd7112d6ad44500689ac777c071d17391969762e186417c4400abdda5c16dce0077642f1fc1354e0e8c14e558c923c1bfb85488b8350f415866a60871ed7151f5fbc5b880500011977c778e17fe8918c5d343f70b00d58f718956125fe28b3a5e2d07604a2b8a877204434ce903b35a030936bc71951ca593df97d24e8e8ad8f2dc9b78f76ef13a1d386ca857ced48f19f3ebe39108f9b33ff59eb0556b1 +Result = Pass + +Digest = SHA512 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 237a7e44b0a6c268bb63364b958ae02b95e7eed36b3ea5bfb18b9b81c38e2663d187144e323f9ceafb479507d184e63cfbec3ecdbb8a05d2dfc8929693ed9e3e79e5f8abfc417ba1e17e3e281e8a0a32f084117f28c3dcbec51b86f5c85b2822441a9423b5b446d3928f977626a334579b39cfaf58f214c98d0cdf640be1ac59 +Sig = af076bc213caf75619f4bd1d787cc198f7df3324a0dd87a88416e0a4b81c2fb9a9db5f98aed43bc15fe2357143a6e4ff701d9c48f51de9eb803670bbc4b0aea7220be2f84b8300318c77a9f615986c4980abda85e3ad0089564dbaf7f44d81b6664eec0311adb194d46de96bb17d5a5d47426845802ca0f49a169eb82b75afa191027a0cc8fce9dd16055350df9745fc7200ff9f4ea3cfbfc66c42848113e3be3293d510382d0999f032515527bd99f66efa2a755e011247b223a68e51258b6bc319a7cdef4aec533e9dcd8ae26e349e5b33c79121907de509a1cb83c2e59a47c1a884bf68e7229316a62e3c49d1f542ebe7105cfc27099268120a7743908471 +Result = Pass + +Digest = SHA512 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = ab18939230b096646a37a781629fbd9270f3891a5ceab4a8c3bc6851bc34115dbc066541b764a2ce88cc16a79324e5f8a90807652c639041733c34016fd30af08fed9024e26cf0b07c22811b1ae7911109e9625943447207dcd3fff39c45cb69ee731d22f8f008730ce2efc53f114945573ea2ddebb6e262c527d20f8bb1dc32 +Sig = 95bd0bf2362f34b2e04075b2934f404798703ea472b81ac3cc223aec486e4c3d9c5d1c2f9ee22417132964ed58e49937f5b257d316ca7fffe290b19f5b58103836812bef30ca0327039d8b9ea91295392fc394b881e2d2ac9e30c5a44256700fc9de0dba298273aec30c4f778d2e7127e8b8a88b0274fce04081cc13adbefe555014e1b5d5dcf6224c5ae2775423a66c81818eec014a3faf9ee75a3f6c3e51c556b0a288e8c262946684eb628b88e3f875e62ef6e801cae75f61cee404971c39d24a9712eb342ddc663515dec103b18d97d78ed68212f27900e77c049b60c853002b08022df56f707efa71027589e1a3ca6e415ba5f4437e978b07af3b73ba0d +Result = Pass + +Digest = SHA512 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = a280e89ceb2c8cf26297191baf9a955d0d52375da023633e0afcdb0d39dc335d8295852ef4d06714e6511a95d37c04d26818606ada54359b7d0784aa933cc68561ee96a88910aa3d93d10787cd1d7580556731c174a6e3a32d9dcfa416604f0c671481d051f63db6919f4aba4486d1b0fdc6112c1521559f424523c26b4fb738 +Sig = cd60de3b4a1289a84ca761f90fa63f4d5688bd885f4b531c8515add2de1251f993ff7f986bef3fba692ecdebc81942d7429c7a59c5d3f1fb872fc1da1915e94586a5c3d963603619008f7efeded1d70b0a11ce2cd81b5b0d86b3760c9483674f55e9fa47f2f310d588fb2160e8b5c32be4e7a968d5a8d4ac6576b71a2b91cd6af0016cbc816d4aae8c70649e08dce90b3ce52ab49ce2cb5b0ed8a45e33d94cf2d4cfdee1151270b2073aeffeaf717d39e04192b8b693c53f21a6123813280806920b7dc582201c9d117050320671e86139a027976b7ecf413369a9fc28e0bd719ceb5e107de799f1bc2e255a9f29476d4574d1332f66468afb9004ff7b535302 +Result = Pass + +Digest = SHA512 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 85ed1e3dfcd5bca24cad1d01ebe192b7d059ec9b884436e18714a43fbcc9c64f687301352ff240817001e757d27309cd1fbbda9456b267dbfb958470b24d06280cf43382a19477875f3259f4210bac9b831d0a07f5e97e5f0f78818c259c289e1a789b6c7942c97bc1485a220131e5eba586643b9071e5366bc482dd3c3c9279 +Sig = 138134bbecefafc7ca8b102cbe87b012f8aada8878995002cf1887694b5be3b8f0bb616bc6e07962d5482d3a52c52ab91b3ee0064d24558e13c75c80f6a95b7dc498442879d5baf8ffa7e2f638808b97ff70136bb645e30944dd97a997a0205169553a5b9e874c5a9441e18c15ebed76043b639dfd64db79e174847a102724a2a05c649473cc7dacd39e2e1d5666bbb5f01246747048fffcdfcddf782da24a6dcc022b2695f70781bd9f8ff7d03be22eb8fc793f5c071a66d9a6ea46c6a2cf0556526ba8b085073546448081732ac15f12833c1db1701ff7f68344ca65dff86211a003adbf5189cfae79eaa8c8b7141ea378e44cc9c5bf024d2c710ff5cd68af +Result = Pass + +Digest = SHA512 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 0bdba34e35fca65a1781d4d7c933a5f210d3a59483aebc95ec71b32df13ff4abf401916937fd88ff44ab46b78cc369414e9bcaa8bab0bb8557828d73a2a656c2f816f070b5cb45549e8eca9d7c0b4a7b0a27e51c119358dad2a17fb3a45718f9dec3c94af78d65c3ecd36b71e230cf080d1efdd8d07f1cfc26768fd5407bc2b7 +Sig = 9f48deb96bec0b72fbc4f12f08afb46bccf19d9e0cd0368ebeb312d83872626380ac928b612c5cd77438d47aa9ceea905a9de7182c8ef76e8a7a03d6efec8400b6496362bf6a30ceb1ced2185fc7c2117b6a6d888ac20c1687b0f2aa9b76705fd3154889b6acaf4e63be25880c71e6c239ecfb965004cd6321257f846afd2a6590c72ad83146eefc7b0dc4796339a7f64da0fbe359f94ace1fd151c5ac7bb5707b32eacf564fe1622e66e1844e639602ca36274ae01f93e6b2bd1effd34ab63d852cc9caf3ce8446c29c8ae3c6110fb7538cc8371c2a3981249cdc1be2b24b6a0c951764d0b7efa92a22cd8ed165e182863579377997a9ee50c8ac3aa4df1aca +Result = Pass + +Digest = SHA512 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 9aeed85b40ba7f86a228b5a1515ba190b2efff66993a5ece19d18baa9b4e4df92e5152fe1ec56a9fc865f30bac7e949fc4f62f0b158d10b083636b4de9bb05db69fe31b50103fefc5f8daf3af7156b4552ca3667a9d720bbb2e4bcdabadfd4b7f4fc5bc811faa36710a9d17758a98d4a0474fec27e9ef5b74f5c689935442357 +Sig = 9eecdbd7fbf618ddddfb6e75d64440f60445b853c542fe0fbaaa6a431294e6cb6683ae1a71ea055eb49cd2a3cb5154dc93d9aa166399f4e6294f0eb0652800d71e041c1ce1ad849c03c963bc0929dcdd11be5d67a050d02b64b29eaba655642b6436fbfb163690bf432fdceedd106c2f4972ecbf3077ed8b753bb605ec1ea03020839a318a24f8d4c1d7d8df99a7f0010ae41a8b068e2888531056a7dabbe921878dcd3c7d69416867f4012a606ae86855f15aed0da1250e59687706e89c9494baf37f61fb1703b79928795f90ccbe293a1e9472f6e0f4b890fdda3ea2522e3d11d5abdf0069519424d147b5646a5a601f19ec89729a8b48461e71c08bbe9cda +Result = Pass + +Digest = SHA512 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 654e189f06c7d42d5539a5872184f8336cf100691f190818fd02082ad68a7609fd095e62fc32b529853aebddac3dbf0d54dd571be72c90404bcc93d01154a9bfeff65065705f8e7eeadf8575b1ca48e28a1eed516265e34540dd867c79d7f175235d1330cb1706356b709bd796f43abaf6fce993f88eaa2fc67f0ab776daf732 +Sig = af90298bcef615309f235d5c3360f0df11f5fb988789f213d4c46134fee5eb104aa1fabb1307c9a904709de88673ed9951cba93167c67c09d827021b08a22c0505828ab4beb42e59a38832cb4da24ecf91f470a3b412c0712a8a59f6f2739d4e9eb4cc58d2c52592f1452dc65759abe43e8d2bc804e2efb3efc9b23cc1734ff7caefa46b03ba4b397d0714cdb8501a812c1b9f47411c91cba53a3d3b139edbd7cbb543f5bf3829ba7f5fafd8a712c0b111943f53209353afaba176b3f5dc060339d09b1fb3c213dae5d0f004d302828560fb5debf9fe491eaa66f597aa4de23eeef9176358755c952ef96e3672583b6ecd95a02e8ca7b21d7c20cbb7a757af71 +Result = Pass + +Digest = SHA512 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 121f80b43f9757b3fa80906aeab232195f0e2c41e5bf8c091ac0f1e0bc9e43640680a1823d649bdf86aba277fad8bc85fc957da2caf7323053025ff949706c1476ae9b0953283d34d7c6266f8db65eebe96d195fdce8e965a6383320ec3de0230ab2548eaa69a47a96d80398cad57e14ce9eeac0421c1a6eba69559dcd8f0659 +Sig = 06a2d74585f12ea7a80527b8c635a21cc11b45dbb0885a12722126811dd25d657bfa9fda774301ca3498d05dfdfb78a6aa16a9f8a95f40f1f04bd354a522f6a2d62b324efa3c006c22c2314b01fa0e91a3dba49aa35b46b19804b07ad98fe4bc990393a4a273ce8f1c85fc19cd5eae9af0b7d1957bb23409778a010b00c6959e1b67066fdb9f8495b4de4dcbb987358145b1ff6a39ef6fc588cda1744e0ab9e7eb002c29a78531d25157c5c2cd6470551560a02845db6dbee242f965a255406f6ef47b3221a5110edb44d38b94191aeaf433c0ece3480b9d1b06d8b8b6c0a232a04c567888e6372f2e94bc2be6b827f8712af48c6f1e4f223f5528fcf348799d +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = bcf6074333a7ede592ffc9ecf1c51181287e0a69363f467de4bf6b5aa5b03759c150c1c2b23b023cce8393882702b86fb0ef9ef9a1b0e1e01cef514410f0f6a05e2252fd3af4e566d4e9f79b38ef910a73edcdfaf89b4f0a429614dabab46b08da94405e937aa049ec5a7a8ded33a338bb9f1dd404a799e19ddb3a836aa39c77 +Sig = d1d21b8dfa55f0681e8fa86135cf292d71b7669713c291d8f8dc246464de3bbb961b596dfc8fda6c823c384008d05bcb3dccc36accf1b2bede1a95e52258d7d1bdf1fc44e18072abd45c1392015ee71692690ef8cdaaed337dd8546783f961bb9620eb5c7b8b6716e8c600351fab7765ee38a15d32d8a2c0949825c49a7f25eedd9be7b807bbfd517913786620d249823dae6fe2fd39ac639dd74821b0c120b42f31c2c639d2c61b395f09f86851bc809b34c4981ac65cf25b2e8adcbce190ef2ef67a0189039c9110f26701c3eed731c8d9ead178220ffcac7f0f678aa22268e1d01942ec51e80eef06e2112830855e87bafe8cc9c22fd737c7abbca5eb7a221d3835a86610d24b507b5dcb4618aa421f63a5609ef5d68f5760fddf970135602efad0851bbff98fe87fa58bc365f38ee7ec8ef5aab17fd11d89d91ef4c604e0d1f001d0e08869df9225e3b4cef52ff86815e13b3efdf45776f9353769a8a51fe7d891a7ef7035eecfa259848738376886edc91cc78f6da31c2f07ee362c3d82 +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = 2bcad6e744f2490ba6a6e0722832417ebd910f9146eb62baaa5c749529f79d6ced0b81a2e2a48852c8558e338735dcbfc2285794ae60f81a25237c66f6ce5d5e801a001e7f9e309b2595cb866de2bb74ac51283b6820ec9f6ebe482e1fd2d5680b7fbd23c1e62a2ee4edff35823fc7e4a295ea4f1c332792aeb53eb44b0bedd2 +Sig = 37d960fe391298bbdc223fa1eb1d3cd9a46ba8c62e1da8c563c89a8f0e67b864fc89837ffc08aab7122b84c435c7f9406e165a1029857c1e4dea653569277273b1d9b0a9f5b0dc24afdd214476d47208ad5221a7d793cab80671fb4987c86bd6144880c59d24871400f64bdc6d496dbd497f3dbf642864fe49af3e21515e62d60f0071db4884f49670eaa9e4e4982f269abe724244288859c2adf60a09faaabb07990e09e56de254babbee14be7eb6eda0cdb22f3d0de8724804673fb99f86efb4263dcc5017abc91bd9cd833679475bfac50a2be8db86296bbf8017889357371314604e83d68b6efecd4b79f0a8afa0dffa448fb7fce6d344709a670e0cff432c3e187bcff7fdc4f4e9abe1095c46b01d88b6044bb950e92859010d9a0e3b2d1f27a096eacaa24263a2a0523d6e0da1fba8af768196f7a51f92fdf152bef062dd1f8327cee1d344c200c2115ac6ec1dd8514cef9e36d0ce8c32e58783c4fcba901aa70c2b42966488002ff171d36414a144bf46775183a8815de9ee3e81f31b +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = c3978bd050d46da4a79227d8270a2202953482875930fb1aeae4e67f87e79495289de293b4a40d92746fc84cc8318c2318fd30650e2bb9ce02fd734eb683410d44bb31ad54fd53cf9296ccd860b426f5c782ea5cb49371d56184f77911ddf1ba0039a0a49aa7e763eb4f5a04575997808b0ad9f6b330ca38edc19989febf4da5 +Sig = 9aed20a8bdaf26f1f119020d8f3ea6ce915138d4c87dce025e7f4e49536c8ec079edc6caf0d603bf42bd6a454a6d52d0d99fd0f59ffb3b22e9e67b3d0bb2d275d9aedc6da96a72cbff35c43e7f39a996fa8a6d338a0725f785254fe91a20834ba557fedfe7152b9956feddfd941741eff9177c2fbb55e200bbe42162b32a940cc300ab375557dffd48dfa539f50edd52df158d9072d14982e96303bc612c2c2506dbca3a939d626d2e7fb444c6ad7d8d9f3bba8210b2ac2f696783c349fc5280c105402a4b3d86bef5026c3dd999e3b22380f9dcce40e3a9cc9f1d7bc38ef3dd7e9413bb579800c0e6c3e9ab912da8fec1a4ab21398e9680ba0d04f3b4c8d53c02f05c7ae49b70a5611cf82e38de84aa8c2426f0b63ea01b289f201d3af40dad5d6e5bccc75b9959e5c9758e79105af7a9afb12aee577cb3991879db0fd8662c5bc49022752498a301d95f4b1d08c01ebc313f89c00b1ec2735a07983fd528e6388245036f0ed4a2dbb65dd33ab7f124c014ec1679f1c2f11edffb93fa2d1d73 +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = 0c119502c2a01920a090e43357e7b28e33c7ee858b4330e05c71048931c0ed88468ca931ecf0b79c2fdc1756b7675156ec66b8335e3df09463f5aee7028fbf560f984cf698fe5c4280229ac96a2e5923d8a9d5299449bb665008ecc889797e9bb15d04b88c7210fadb8bf6f238e5d2dc41b9ccd1f80e9a3e6ad147948f273341 +Sig = 8abf2a30774e6e7338eca09cccaca3684399940492fb94b23b5ad62ce3e11d2dbef8966ba5269979eb9653baad719516d3e8399079a2f670275a2ed42c820a9a31fcd703a76637e0d713f32d792b9ae36d7288f60c2d1ae52683bb15941b1cd890d2cd64998b772585e76032a1702e0652cbf259a1ceae695d40cf2f4f6d81341c8bc9082cb96c752c355dfbe296dd21d69846fa37613e73817b2a07046658c9e3fc6d091e17591bb1a4fb6e2ac00a3194c1488e16a9d2903786db86ae90e96acb4de9901aaf1b0651fb76a58dcb3db473efbfb831ef8e30f89967ddd3a6c2f18979a0450657cdaeef6e59377c6db1ec46065f614024a69c518a559942594a46266e0d3ca1334296b968a23a4b11c63a97e29eb16b24c02d545d5b427e6aa585333318e63a204524e0e42ac1edb70d3456780dbead31f785f0b2a77ffeb0d37384cb5f65b4e36ca241f3b2b059105faaa3222d6c135ea5a36651aea396d22fc4ea1b404d7e834b6df1fb838bb5ba0d784a96e2ae2843db3eeea496c7ad2b4241 +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = ddbd8468bdb036f4799f428bc8b4374ed9b7cde541337ac439d441ac0614cb75b816b80c17d237b8db73d4a11bfd929208333afedbb8f2410c741129c53932b596a7881c6a4d7111ba104d4600d1902f6f4a1608e139b71911c11c390a0dd091df369aa29d670b8a7e3f53825f7659ac74c40a0c3bfef0d3ae8307e4bdd6cd91 +Sig = 4e377e2459815d5b33915fa63cd477b5be7c6b7f7814d1350034ce710be67ed69139db622ef60ec6b7638e94b202368bac631e057702b0e6487b324a6b98ed7e03d1f3f20a9814b00e217a4648e4bbc449a2af405ca4b59f8438ddfd75d34d1064e58bfb325c55bd54ea6cdf7712ba807c3e4c665d620cd59513d7bc0855247eb670ecc292509661812702703275d9b2f87ef279d7700e69d995db98144a14c81774a4cd890ec03d13f858f3769e5048ed55caa81201e8785d3771ce6da51175d017d211fa703794416f469b1129d731abde744da5b2facd7a9b093d6c9743509b0103bab9c81c6e5f38bc9718e3e4faa86475d13725a829ac61df8d15f0b27cb40d0eba0b246b9c360b569b81b3abf380eec27492316bc292e5150ee0607219a2bd80ba984c7e3f1989bc51e4c5da3ae5070676e0c150d037a86a0f91bfc07cde64c19f9c7a7af44d6929970041448d3b17c249d5e0b5862e9a25209e8f97d7a0f030181504fead2266c873fd235983df3d0657b92096e2b490df33ca115733 +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = f996f3adc2aba505ad4ae52bc5a43371a33d0f28e1950b66d208240670f352ef96185e9a7044f4ce2f2ff9ae01a31ef640e0b682e940c5105117594613dd1df74d8f2ba20c52223b045a782e850a12a2aa5c12fad484f1a256d0cd0872d304e885c201cd7e1e56d594930bb4392136fb4979cc9b88aab7a44bfc2953751c2f4c +Sig = 30b348624faa9985fcd95f9c7ead3afe6456badf8c0fedbdadb3a9003a6702973acdb4e86652367db23e0a8141880d6631834f9f171c94a8fe9c315bcb8680ecfb5a4f59b45d4e4c3c05828b7faaa8e4234aada4e766646cc510d07b42bd3883a83b5bcb92d9e7cc1ddf590a690111bfc62a51af7e55543ea5188c92453d41d3e8fdabee3e1defa9d0afdb85c8153a5019ae45563ea3080a3022668168f0c273a6db1afadcd5edbca5021c2e53f4d951c604206ae10f287f451867271d370482791cdfdcb6a4010f6b3d9b928563d168da19f1c1e570f8c158f3d490b29aa23abd1ffdf20866c34c6e63b9e8a9a02d7a1b196d055f4c53ce82b400e4ab9e1b9d70d0049d6d57cf0a4949cfc68d633882882dcfdfc50cf449df10acf20305c2aa43bda10fd8a10b4ecaa23100aa47e92936dce1bfb8d6595235bbfe2c8585cb1647b2beacb1e1d4b6cef758811a68330fa9c3a82573c08fa2cda5a03f3425554e45d98c1645c5bd27d12e6c20b2c462a746e882a3421a7b1b1e25b4c36c8b16a1 +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = 6ace052d7e99cd973bb5c9f6679b1c305e07208965fe58c63b10a692f1dbbe22fcd0db15893ab19e107ba2e42c9934a9aafac32adf6c73473f6969e42c983b8f0c96a4639ef77d2c8e88e8cc47d7cfdd08f68d973a7beaf401cb4d1311992ddac3a9c9e067da198adc6304745f5dd312a182e6971c34a515a6c1bae647e57e4c +Sig = 5f0e74f454754a3074faafc605f3c9af47604a8983650a9b6211fb191d9afa5315df4db4501fd4f04c741d764656d4a5d006388ad8fdb219ec6b756908e23b30cb639ffa7bbf2874713bfd5a1062c19d04e0e4a74b14446a7fdf5cb812e9ac7b6012d9ae991c47656d2aded24074bb8a38b1a88b1c2b131e5b09c93757fdb2d6b69aa8265a435fba00aeb36a1f629bc34b876089d28a948dd6ab4c899430da60a26f6c13603fc889c7b2936ca3c5156bd7fa6e34eac9e04800833ef0cb9b6eef788c0ef0021a4536fb8371fa3e2c8bb8befac16e8092d69c571c1e15fd255ec0a07acf9ae9953831efd3dcbef44e0fccebb1af959d71f50130e8acb4fa2319261fba12f2715def82bfafbf40e345ec5dcdab5c1bf5f66b1d0e9f7a9c62c9375746e1ae0c8f14a489184383e81dce2070ad4b525df76b446b1f22921d424d9ba3ce21577501df6280fdc69f0239ae1127b69950759d5f0b693f54e87e0763623bf5d3ff69430081b9c9e2445a05e115675e090bcab2aa1d75ceee2ad619ec8b80 +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = 0e49740fdcca6bfce294c11f45407805b3da412b01ef3fb513e70e62fd9504c0670db69c36b6bebd69a0bcd240179ba8a47816a0c3437a61fb72adcaf9096f2a22efe0b431fc422d225301e850f2f0f4da87d6944a8529ef79781909ad96d1f20596f93e17c57fb4d756974bbbf900521cb089eee0ded5c956a15b096162b07f +Sig = 7bbb3ddd17a42be7cc4e7eaf456509a4ba58d40c49a3d99573b733e1942f9fca20ba8b910708d6e750367e847302fc603b8063c19af883e7507fb0d9cc2be37479a37cca25b8c7c46f6bf661dc6a3232f88b483f1b8f41b46d49ba3f1795d68eaad4a2556fb5d7873bbb6501ecf06ac558235ed13990b0e16f67965b09366bcb362cfc6fb978f4f68d8146dc8b819804df424e8ca5b63cf1fcf97bbf300d0b998860798a63424383fcd81d37773d59bb13b4fa5d468cd128bbab18a8ce5173be5d9d54d3177f0245788409973df4a9016b944baefbf3bf1146a9393d22e35ec2be0ae6f4c31dc4981f40fc1baf382600699eafcea92cbe24e26ee846fa23bc193b6e721401b7ac3f5f4ebeb633979f8ef35f4ab1117a869d5b9dbb7482f0d5a59e4163548d2512ae067205b57d030c483f720d2c44350428f5268943fc5f6ea1c88e2ec13ab3dc1456e96a3b8e7c121af4d6a5fe4ee55e99fbc3592a487c194bc2f2bf6e79fb79c2876cf3365e075beeacc7db4db7ee69e7f1fe12a327e6cb0f +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = 0e675dac9aec910106a6ab219b4cceb52ded2549e899c9a24d5ee55177761888a3be1a2def6aa32d62f788132d6227d9309806fdc02db7d8a850ff2c6dff37fcd777f1a0acefdf18bf85f1a12979be86d799253945fc34a288f348b7923d764db27a2a2d5ae20e6b25372ef318f8596529d8ca23fd6f08a8f62e0a1b6d989f23 +Sig = 8052d95f12ce0e6e53a5a356a0eb353bdcc1a66514d6cfb3a3d96155310bdda0a0d1795f97643f3a4496634f2dd9b95a2138ee390e1e74be3134f3f47a919ee7b59f8ecd272ab88c82cbce7c217e5f92d057a5b00fbf0575cdaecd7dc285a4218c8a955216598f0742671e018e8e4e76839a575f50b2102a8b77d1b84f6dce98d78e5758e0a6f92bf35d6a2f18ad400925d7880f9efc774a8c7ebf64885cd2f6f629b54a7c12ec91d39b3c2518241fdc322d9b235a8ea44f77e82f3dc4f728f620c07d1e7ff4094f29c674ab0f0802efa1c9e6481ebb84e0bf13ef468d8cca114570b9edcddf98ac4a834fe7a0d5c6fae8a60a48399f3c8af42ff4026e42a81aac36114ffc053f3f729b7cf9a97a56848ebea0115aa8298341aa226963ebdf57ab2d8e4b9000dd051a6c5d69f60e1dc1b33f2094fdbf8e5b627bc0764db9522cbbc081dbf38c21b13f980813bd2b00c757ebb8c0b21213152e694039f306f7342857651f722bdda01212a8552799bda6ef07c5207dc744ef7969afd5af2e6f12 +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = f6a7a6e52659125fbbc8727417283b9a64441f87121e27f386d5019f10cc9b961e09f1b3b0db23630cc0caacb3858c6f93afeeea7e1a6a80dbe0c2bd9c7c939570302dec39a4a25cc0cf1d32a71a75b9a0c302bcdd80b046c86651acf30838cd52e30399a8fab8d03fbd140cdc2f1f02f2480405169820ccb32e5974ffb8b1c8 +Sig = 84603acbfe1f2f769f1a62b0f287f306940b225476714a4b6827c02d7bd052f303f30a5fa6da83e60615305669ca9ec177c5b32b1415eebef78620296ebad6dbbd520839d3aacc9781ac8602ddce0736dcfa7290b45f155b8e924d0afdf7dfc8d199bf09509d0176a68b145756eef53de456e17078859849a352a5bb654239d8ebaf8800ca8263d34a868d52bf8f22644dd9f3c05bd891cd92f263530c5896023c6b213ddb64ede1770ff1686c34036e281e911d9dc960354fd844cb7b22dc0cd81a96203ba818401ccc225f857e59a5cb7ba6dfc7f5135ea32781e63daa14fbda1bacc18ebc50824d4028b8fdecda49e810bae5acc8adc0dca2e236fc832a97330a1214fa0aed15cd10c049efb65ce855c060f05befb317b8065843c4eb5a0371fc6f209f6ffb948c881f2f2091caf0f59f60b72c5f67271bae96b913fd21fa1dfa975d5ecd62b0d50873b686d29c880d36edcad33ec3e2216c9cfcfb4f984c23fde815e280a802428608bed3739af9200de1f85edee2834c04942c068aacd2 +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = bb294b95d913005b110987cde45887484ae6df794873dfc5c41fb7e8992c2fdce70699fcac8004699961b3ad1e1fce9ec8ea5685ccec5e80e4d0792559816f68613434bfaca81a843aac459a6fe35f5369c48e9191e4a32c70789594c5152db8d4bb02260012a8739cf325ddff2aa42fd67b6ee5bfe31591131ff27d0273d292 +Sig = 32637c60798b450bff100bff12838357deff281d5b31e4f4c2cfc96eb779ce6d31b1ce8bd7aa7fa88ddc4279c8c3280604b018ccf452004a1488ed4750181c5025636511ac6724fe51761c27d7cf9a0c8782ea2231268853c4b1f7acb0005e5687c8f3df16c962f02ce56b23d387a2baadc8bec94229c3557526e61707a8b59293a976e32c7fa133285088f3ce3e677788aaa947e7622c757e844b117592be99fe45376f8b3013e8772ec92c5bb0b9fa301b95544599690ad93668d83b2daa7df05c66214e275014780a912d8b1932d7a655058e743f50b074b1d9691ca23a2f95f6affbd516d64ccb2aa43c236eb95d36d272545e3beb8ff5aacd95b30f7f1d6418af042cd9a0cf0189846262322a18875ae4c3e68e4e8ffaa0276cdd99a0047c86c0f71d2deefd50642d29c195e6d14fb46fbac33a508c1f03a232de08aae09faf1da8ed2ba2ae84bcca88b78dccbde9afde08a3beb322dc79356b29c84841698914b050beb75a7b2f6701aa8101a5a4955ee27bafe81b21d03b43e3c77398 +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = f946c6bd5e1d6b89092f3c487c0568fa07c356fae9b8e831b8320289039746a435b122cfbc4a0d316bf90d481d3b7d979cc50d98c1190af8dc58e0035557dd5e94f437f41fab513202643a77748f76c6b77302bf40c392cd18731da082c99bdedeb70e15cd68bff59619cabcc92adcf122753c55afde0817352bc247d1170b8d +Sig = 50706ba49d9a316688a3ee80a0bd986757d43ec83285af9e78196bd52c900d40b280fa0de54e35ace7d6660012f1a66204092f0e634b97e0e51665b4075e36f1422266c7cad7b2d9981b913df3fa3e6a5a1cadfc6378a8540e0faa26f1cc6fb2fb492a80d0a6945bce5bbc23ddb3b10701f0249b27407a6700802e8842ef3cc761c4823acb5d1453508dcdbb979e7bd8d00128e60a9b3789167c91417d93f0e9fbb00c9af1498e09eb6485eb94cea4883f6a256eab2caa826de4fdac01baca3a216e3d204a3d837ffd4d0be2b2cef711909054c4da1d5b93a8f98451c7002ae84a5e7080d98671c50e3c91c4087d0477b104f916010e742f2d207fb40d122d8f211af6d7c5eca49542d9acb0f166e36abc37155070c12e9f28b907d67a2ca70bfce554e1c44c91520e98fc9ad0c0ee477f750516476a94168066ce47000030a99c23e2c38755de946d5edf0d6aa94212f992315b248c1f82723b29c42216c78cdcb668f11278261cee9252c8fd0ed37d0a8580ca9b9fde7505615943712da19a +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = 9a337d4c0bb9a005b47f4765d696d19dec58bc8482f2173a4a203a0b6d38b4961f6a852e76468e807c7e457683eead5cb8d98642fb76c0a1eeab36414c1899597d57aaf96782ada586f61a423f57953771d520cc4ead90d569f23d950f8dfedddb8355748576e6bbfb6f2e91b3da71753fd2f4ea229f6d20e27db8d05e9fcb68 +Sig = cff7aa7f875642fb9343e07ef5e7303bbf5f069b44c19fbf83e59d422e25267ef9307414b6b1ef61711ed0013276d1a2ad98390474027a0a703bfe8a6e87706059d89c060980c9c9e60dc7e1fb9f777a41785ab4d2b663ba0e3c1921545c479c2a383a50da8e489cb22b71101d0ec148ac70928732a772195a140d080152762a9c40803a39fa2a6978c2a75ac4d8bd1bccaa1f4204ba65edddf32fedf2d9d0a3aed9b06c47e717733c577812d723dba74a852b2905235c812dc5f1d0df0f0de73dfb86221c6ffdd1eda119bbe98d148add36a4fe50489b06aaeefcb5c2066d90fa79738706cd18e474d69609ff1210c77de7cd23ba2a775a4329cb271a826d602c401a71439019cec10cd9f184c4d04584211827b19eadac3258d8a0f2631613f051aae0c613050cb24442f15ed4fe0dbd290e42629141bd2cd56d20584a1d10e1f2c2a9ec731433d5bcd1d318bed5243b4b7d0f9a7982061c55dfaa86b2c01845c021fdd2a978d42034212f43b3351b6adeb03bdd6caf7de059502f16d77348 +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = 32fd45e73f6f6949f20cab78c0cc31d814baea6389546a365d35f54f23f1d995b74101187760c89bb0b40b5057b182e2fafb50b8f5cad879e993d3cb6ae59f61f891da34310d3010441a7153a9a5e7f210ebe6bc97e1a4e33fd34bb8a14b4db6dd34f8c2d43f4ab19786060b1e70070e3ed4d5f6d561767c483d879d2fec8b9c +Sig = c389613717ec7476ecda2144d0e8c8f9d66fb469c167c4209ec0bdeebfb471665d33dad47b8f3c319a76fe8a8a9f662b6c690b74903d17f61e2314e5ea8d26670ee4db4dad295b277ca08ade880de2e42d12b92952764c1dc808c266dbbedb670158eef36e896f55a203fb99556ded0597410ba37486b1d841f3d6d5c0b39f2f49f0c5794824fba94a8ec7c2b2c91eadd5c8cbe44895fe3be3bc1727d6fc0e5364f53578639d3b3af696b750a07853694ffe145a28c03620c78dd7377d094d92c3e09546883d4703e62a98ddf81fd01fcdf3c4b215224fe2b1b4992abf31f20d12afa868202390de334a846b2d58b253ea8ab3c5265d84773a659e8bac7af44123d9ea15062e65d4d419cf2d97077d0624f8e5c36f2c7b35ccf95435d5c36886ff9105a6c1ea225e15ea8cbc7b6bf6856151cd76fbb75b5b98f0e3db516a8e218189fcb1cd5de3cafeaa33ef135c5d8b8aa5f881afaacaf4c08bd7281255bc2a33b76d4a36e0b170c45588239e5b38c679b08cf802af73b6d79b3935949461e7 +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = ab66cc487ec951f2119d6e0fa17a6d8feb7d07149bec7db20718e4f31d88c01f9a53d5ba7ece3a4dbc67af6a35d130eae762cb7962b9ae557ca38452464002223f61bcd3c7353e99d62558ceedfcb9374d4bbf89680c8e2b9585603e076f1cdb0058299b4246845dc79d1043b1422efe84018e4c932c45beb8851fbf485e36d2 +Sig = b51331552b08be35a1698aa6203d84dbfff9001ed5dd776f2be4ddfc07dd4620e9654e82a33465bd20f11863c0ed02a0aea27a44d414c328a938bf877e15838ab99d670d01414262e8865dc1d9fc30fd0812699fa690c34f302f637ec802cd40ac8591e976c0b8bccb1b0137af64a2870210e8fa3dc431fe0956b8addff1e4b18cf07e078aa93af81bb3023c9e594e66595fd92b10226ea126005f4724427352c38e9e85fc2e0723f80af1f61599550b5ef54c5b38ca405738017b89cb9468d9741cd6bdf7112162251ba1d083cc370a4a8261c39b6b94bf21a53b7564531ae9ebc4ccea7ebb8bd314b2e13b58ed1018ae5b415e0f9e3e19a5ead3a44603f90674a190febde25f8ad8778aeead4d0f64fbae37166a54e3a763e35559bf8c3f173f19ff7bab98f3ef803dd56c07628399aff87485ee73dbc3db34ecc7bff3a53226cf87bc81d256e80c09520c8f38e9bcda095e3635128e1bedd9970600546a751eb11dab42e289d6fdfea04bd58d4571a79d24bce4508c54e1ec4cf75b985fd3 +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = fef7fe89b9a59902a70a1d9caad09ced8bee4145edcbe3ef7fa6dab37635129f3b8c5e0860410ecbd9cec3d8693682f25aec08b071f05dc8213bac8cff5d52b576653560bc01575604e6ab90f67227fb5c901a781eddc027700913e54a7fe51318482c9ab42c9d2b911b7ccc39ccb290f9a420a5dad93394d4d7b8c53fe3f242 +Sig = 45068ca6d82f2c123925cde11971215d8fa4a4df6848bb7654868700978764854638921bea5869280dc6ad9581ab43ff7012969948a5677fa0a66136a316a4bfecb89adf4131b5bedf3d4693b780d133af9bf9c133305be78374afda3ba3854203324481a9d10b9ca9b92dc7d74df531872ddfc76caa82de020e2c415643cbcc4280e6d2f4371fda7d9249314a8f437648991a9b03d71b5839ad38a1555ad34526994ba56870b6ea18011295f2ca2b0713b2e92ad77680c0dc5bed8d3b9b31ac14df769949c4a43ea67f6deeb3dc9ed589ea4e8a2cf6695df46f946f1467b28e875477ae4e645080fafda6dd551d2c02fd6b2b194fc0bdb050e06d4c784105f5a33b53e73098055963071efc1bf397fd325f3a6f4e10d76f0411a001e62ec73729018316f56310f893a59363d1f6fe5c17444b6c728a4933b75212fdfa258e4018b7763951ab4e5096411df9e5bc16df3896e46c973d32ac9276a4e2b5b80e3d8d798dc0470b45096b4d738669ce052ed818e560af1e92c915187d66cc308b70 +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = 82b3840eeb95c9c57724c70f112b6c2dc617c31785acd0c823f8bcdda285325eb3d308dc790522bc90db93d24ee0063249e55d4219ad97145feaf7f30668623cc8890a70f4f149866f82cf86f98b0053b23c98c8dd5e9107e341460e9bf5d88cc8bcd1f2e4c007cc1c02c4529b93233a0b06bdd15925854ab9e3f156eb925bf5 +Sig = 0593b9fd4421452376d27bc7a280101cfd6e88a6727d7d77cf65ceb723ecd257f32fe10277e85798e0da75917736da1a3bfc22adc7658fbb84da6ebea0b07d1cc405732fb040b585c1b63c8034069bffb8220656f1ac54ce693720d6fb1b5aec67b03c887c8077da148d10f48af7c028f992b18f13c0e57530c086d775483da5f66f3a6a19187868340ac63c6212bcbd6cbb7beda8620afd9b66de47473ef24d1b6a36f4ece9add49514fdf1d84c7a785b7f0e00f382235899790f472d13f48558a4314742f376808dec96edd2e229e943f7b983bea5ec6edfa5e9bb37f588e55ef62ebc9214beaf9da502434e1088df272c6c77c1e1d897c47beab77e3bbe317f8d43d21fd7e94337c7e263e2867bf580a2a8ecb9e36ab7d3e1d5cf9a23230953d59df0d7e23558fb612b7918abba31b164ce178818a1a9e6b6687f4de685d70e16bef6e192faedfe0b2b95477d37b0a3a2d002f33ef4321cb905040ce06fda1c98a008767fbc781a1eaf3375dab8664b590336b99e157b8687a6602fef6a3b +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = e153cca4431ed9713f4744ba054f5f191cb37b280108ae3a114ad349a872d1308b46211a83758a3b4be32fbeac42ccfee7e23df853ca400147077bb43a44c12f299b917f3aabdf589eeb1709bb3d60b08bc71eaa3ffeba4e2903a5dbd8339aae85fa24b9aee76130000605857a6aa197d00926270dcda58b7de758a6ca67e617 +Sig = a835cd4146bef465642d494936268a311a5490d2c9f9166c6ce98216a9a23a643597300a0050e6445abd5a9bfc7a2d9b70726c824c383bf5acaddddc34d434a31e5314d25fb58e258f518866c136e52855c16fe64ff8f1c4d66c4e9e39b8cb1196d80944d0746c0a3e1769cd4167df72ab5e4c9dbae9cb35f4828e12099f9b36a5a70c48d4aec9872d7b19e1291b33cbdf08a2263d500c0a83b5237ef6ce92de344b3b41d0d07404fcd5467b046b52b8f85fc6b5d7afc437f1ee9e78390ca9bb6cec618885ece29758f2fd6f4e5f4f896935de5f67cc04055a4c4c0fba5def8d2caa179331a85501ed25822ae79da9bc815cc39c6a979211083e8683136c942e1e17e9eb8f84aacf091aa1e51665fae446bc48c304af65391f279afb98b92e04c2b73d9d94e991198fe7781f0f9696fcba2c03485f76e6de30b9535cf3903db2f3afa851a47bcde72d4ed2e8fabf9bb7d4696cb4ab8c289b0c21e1f979ebc532e280cd9010df4ee72f84bb9e82752828f167030c0fe348ebc31ec17b8f07d94b +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = 9c63899dfc7bdc0db384727244caf71ecfb9b8792b9f57e936b3c2f5695565a9b0979f3c78fd73f00981813a16da342392fe3ceec6e63ffba191cbeb4f4b90050d2fccd83beb0622b2c3fff159d9e608f3abcb843bdd56c03339b975b9f4e3265b32f6bb6ccdfc6c5752d6e0344d749699c74c85b30c04ff95b272dbcfd6c7d3 +Sig = 4d38a297302ad0770d9729ce5b7212eef287ce0250f403e32b4acc3617dc0d2edcccc2d580ddbdbca5722b70704058a3b807f592e400bd563fcaa8b066a614b4906f1433968ed2f520a2f6b034d4b2d6890a241afd1adb8639a6cad9dbfd2e278dfebf79740d75f295759d29130b19ab19983dd68f779de41ffefd4e82b5e62f72f90efb73437f08a2503dd9819dae20ba9706c199de9cf884433eeb756286a85eae14bf9f6dbeb705461d91822282f18efbb10589a578f2c9c345b079a7e9dd07fd4b34051b27119729906c77dfb7d2f8fa6bdd5faa1e132bfba9d391e66395e67f01353fa275eace8b53aa91cb6fb693e19191d42a4c1a85a0c504b1c85f49a4d60936dee4646aca62a94aa4bc7828c1ffafde8be656317d506abec179cc90191d12356ff50644d3e01aa5bcfdd71d3c828dc3539dc0cf3fe8b9b91e0c2524f6a3710379c90affd0d0a50d74387f9ca88b46463ef1bdba58cc9a36e5c2c435a20d968350d15d941c3212cdce815592b310d259860de1dc1a3d70ac22302a51 +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = 04846c2e676ac73160bf4e45652bdc6cc4d4c9284577b4320ab77f6ebbb59a1fe0e085588e0f90b346cde6441af3c9d0117d1f3bcd962e406bf5a465ab6cda2d51be598fcbb29ea713651aacd7e47d22d8fa3450904730f51792ea374761a4dc1fc6f1bc657b77768f31f463e4267fc8dff61150d4b343b9d53759cdd7b98094 +Sig = 103bee57e25be8c3a2f774e739b47f93435e414932c0494b6b6aa2475bf7c9305c73747e0adf82c2032007b3f75a69c93112617a62566c5a2deaa25fb95209da49fe9c161cb2ffa40fd9d77f1ff660c8b6cd3b54e3e79a759c57c5719802c9311db704ba3c67b4a3113754a41b8da59c645be3909e7db7e7cf7294dab44f74240f81a281eecd6ef31c7cf18b1a19c7d02a312b91d6edfaa954462d34740af5ab708db5a10b00c542be82fa2b2026b09ef38a4001457e27a6023770e4b4d5003267c85c9eea1d5f8d770bd40b554d5b4daf146dccabac3ea8a13a05c3bddfc971c5158fac027ca19b7232621e9d2e37b6a655af545e44a298be78cd475c22a48bff7c3494a5f8a6abdf1a46f9de082e374fd598867d61e4d51daed84152e43cc6a2affae205edc52613480d411aba84fcc9b69d1c28f16f76836901a7c5b3eb2f2c940d0a3fad38a8efab968a0c85eb22e11d3d0861136ced5f06734fdf8d4f151d23861b1cba9b9c580d3350c76d4dc808461d5f872ec548b2b427dff74b1d1a +Result = Pass + +Digest = SHA512 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = db6c9d4badb1d9b74d68346448b4d5340631783b5a35ac2458563ed0672cf54197587fb734c4ac189b2dda954cdfb18b41c010a77e90464eea6f863c5da0956bfa8cc636bf0a28be5addfe8d3e7e6f79f71d7fcbbae23ea141783f91d6cc4c8fad125811760ab57133818892471a79c6d04eafef37b2fbe506785318f9398377 +Sig = d480d5a979ad1a0c4ca329ebd88a4aa6948a8cf66a3c0bfee2254409c53054d6fff59f72a46f02c668146a144f8f2ba7c4e6b4de31400eba00ae3ee87589dcb6ea139e70f7704f691bc37d722f62bb3b2cd303a34d92fde4deb54a64dd39184382d59ccaf0c07a7ea4107d0808260ed8d421cb8b1407cdf9e915159282b9f7bffdbf40d877885da7399edebd300a7e77a908f756659a1824f95c8a812aa540ebaa64ab54a233723db55caa8b4466ea9ae6614ad1bb869e9d8e0d032f3901671e94c0b673be6537cd54278ed3da2e1edbc04ee3a9e8070d73ba0ffb93e60f30b87ff3862e9c53908f2c8e99915668c1f46635e05bf7163051ff9d92bc71a626553c69dfdd06a49f7ff1ed51e918f3ed801dae62ca276d7063d72a6ebc136ba06cfedf5aa23277e81008c63b2e0083d0fd6814f6d4b4b40a42e8c0206f3c356a5ec709b7c8a4b74b7b48d53c9d8694d27359c2c7701938d2f0161721a57313bb1a2e11da215872498182493d8517043b4c03f93446aac93830276542026ce83055 +Result = Pass + +Digest = SHA512 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = d5dd3b6ce9772d9a97fe21648497783bac5bb5254aad82b6f7cbf43b15a40f386eea8d151967db149e9465865968133f246e1347301adad2345d6572ca77c58c150dda09a87b5f4da36b266d1fa7a59ccd2bb2e7d97f8b2315431923530b762e126eacaf5e5ac02ff1aaef819efb373cf0bb196f0e829e8fe1a698b4790a2a05 +Sig = bf9e8b4f2ae513f73d788958003733dbe20957b147b17c3f4fd6d024e8e83f07b65d9f3dbc3b1fe84da021ceabfccd8c57a014fbe5a2bce3e4051b7d03e09fc0350b6a21fad214ae7a073277c77a40dc44a5aeea5194a756b69c93977b69ee9294360eaa73a574548fa6a974a7cd5a6adcf09e80631156af85a8e5c5317e189eead47e2ead65c381396b5cacde260e937284a8e90eff2cbcb9dee22925f2f7256f74c67cf3ffc7b8ce657e8d135f0f376d9d936a79792c981614d98e3f7d662a4fd46dcda96916b32f366ed27dab188f184b984df0b559710d8ff2040be462f91943501bda4840fdd5c8ec15d189064def756e545db319e007c433f0468a6723357ba47d156ab7652b06ae2b18874f0771c626466dbd6423e6cbc518b5e4ae7b8f15e0f2d0471a9516dfa9591697f742862324d8d103fb631d6c2073d406b65cdee7bda543e2e9ebff9906985d1cb365172ea623ed7aa4c7a322f0984680e34e99bc6231b02e3d14581608bc55bca7fbe22d7f03e904da4552e009e5607f0418 +Result = Pass + +Digest = SHA512 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = 591652b6eb1b52c9bebd583256c2228680110b878917dea5ad69e8c5d2ab514277b0ac31e7e2cceab2e5d9c45d77a41f599b38a832f6b2d8097952be4440d1ff84baf51bd70b64f130aeb686145fcd02953869fb841af7f6e34eaa2b996ccd89697c58fa255cc1e81f621400e14146361e31c709e84a56082231199539f7ede9 +Sig = 1de79d7216dde125deb77c34d90ab321a4de5fb11c296656ad9bf9a24653591117ace415e18eadce92823f31afe56fc8e29494e37cf2ba85abc3bac66e019584799aee234ad5559e21c7fd4ffd24d82649f679b4c05d8c15d3d4574a2e76b1f3ee9f8dec0af60b0ced1be8a19c2fa71bcbc1fb190899ec8556958e0782ace7196b36658656cf364d3773de86260fd8987604ef35eae8f38ec2cb0da864cca719219c2ad71c08506c412ec77995f37439c856977b71dfb9647990ef70faf43273ae60839cd0679ec9aa42bf914e421b797cba218a400ff9dbaa206cb9c2b0596c709a322b73cb82721d79f9db24211bf075a1cef74e8f6d2ba07fe0dc8a60f48af511ad469dcd06e07a4ce68072139c46d8be5e721253c3b18b3c94485ce55c0e7c1cbc39b77bc6bb7e5e9f42b1539e442da857658c9e771ccb86be7397647efbc0ccb2c3ad31ac4e32bf248cc0ced3a4f094526b25631cb50247096129b08a9c2cdfb775978b0feee265a6c41991c1dc4452615b78c906c7ed1bd207969d98d0 +Result = Pass + +Digest = SHA512 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = 8dffaa9151271ad22622f228c892e1d9748b3c394397f2cbb6febeaa9244a027eef28db48a9a660162152764830f617e1ec6ea1cdb0ed25b6f999a107175a16669d6dfc92b16d50363fac4a570371ea976343a55ae124b6301ea935ed655d44f28320899dba35122505933b3371201a2a45f95ae65ab442a9479125e68ed212a +Sig = b329aef83a56ddc57cd9a0e15eb0b0b7aea7d78d5e8ca3982bd31cc825a0cd1c444d9f7bea9e7a27f3bbb3761060ff95fee1a3e864d2108fc40b64786a96a6d62d201217e03a8ba2c07ee94c267149d1e72cc5779b737e8547acd6aa4bba3ff38bf9687e9e82f511b597ad7ec1d795c36a98bf83a90fc86b0cad41953360738921936a458674b2e9a7012ac3029fdb0a9d12318202d2544a0d976ee536e03b7e8d894b3b9c762dab0110849cc1eaad747e3d88d7dcf49f824df027e645c0b9294e655d9fc9e1ef95eb53aaff5775c349486d4b5d67dba29b6217f8b9976612b57e16fc1f99983f2af04579938606879b7c7253e870714b4f0f24e26dc8c7a6fceffb5f98e3b2fb5db949d2f98cd1ae1aa552696b48c39f678e154351cc756d3e9a97f79279853ebd0db9ae6859fb2d5721385d06f5565a3a8ff0992d517acda1af69a92854a1b32a79cb9e442a90b055bb2ec3af8d9926a0d857e3cb1e7e4a7300d1accb9492ec7832af453529ff0f4a6ad3259757f707f713aaa5df231f7487 +Result = Pass + +Digest = SHA512 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = 71d4163e708c121e931bb9692b217dddd35c7346f61cfc9591f7a4313abd4a9262af820bd7eb37e78c2b95b89daf25ec8e783aa1d4b78dbb96852433b4d478b109a6d65eed7d06f3fe122b172149eae7c365ced66578ebb7571ec218c36b65d2ee22dcdebb28c66a7138432cbdd712f7fb8bf78cb14860b25c2b4789706b5a1b +Sig = 2522ee3bda30c0434e54b199da8c9733964fd402b707f5b330f4f754a0502c7a713c7814f0e851a4a4db72690db96ea8b8813bd8629a948bb30c1b8272a816b30a755fc6fb1754167c3eb1f194395907a56cf5a73b4154383a05b78b731fedd9077f3c2267a5cf926697871fe0a4bed9c219552dd1c87aff50613094bcaa2dec42a35380a6bac673da2594f824a8f32f21d7593a3e49c78ee280193a478621d3b095c16dce72935314d4a2323eebe7855ca4738a19b5a31a5f95ab91fbe1289c02fea7a65b91327b7b9790556289e1b988e45d50eb8cea1581de5d5dfd21001c73b43921d8b21b9644b0f2b96ee6b09d73709c33338143d6a2fec559a436c5ec865d3acca5fee654f1325ae57255dfd42188c84dcb1f7c1e86028a74e31d736078741ee97c39a56e4de00fc12b8051835bbd0d8fcae737322099adc1017107022dd15c114da57e78b95681ba9945615b59da90f5a2a99a252eb42b2006eedd6e78476c2905473ee6b4f23c1c5cf0b80451c5426ea009141cb3fcb0df2ded92be +Result = Pass + +Digest = SHA512 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = d00e1529228c79a20a1c3668ffa4a54140bb170bc5c669fd7560d9309900175e91d5a0e9c5f5471fdfb714bc385d52b08ff7e4230184d8b735593f0dd8c73b8a49f8595b951a21b6a5bfec63b684f67c0af1b471dda1684e9ba3f241501fe957603dea86784230f0c4fd65666361b82b187330fb4267404c0e059bd4eb52494b +Sig = 1835dd97e5093a33ce1e62d683863f6b3507f358a62fc879b524350fbc7330681cb0c682eef4330419caf8543bd9269b6d91d8e107ec38b6e9c6eaabf906457205d52a900e05579aa11fc581375264e69a925798e5a348e5a16f1567d5d0e40853380b34deac93ad7377aae8a27b090d0d3a92bf7a824d926e2e35a0c3bd0e990b591120d74dd9b052a73568e3c3f29c5a77fb1c921bce9c1e7f764aa67bac119f5839a5303860edeb634814c2386c831fee6200cf55b6bfea058b795a0fcf26eb7216ae1b7587c82e5685e584170cbddc89a77e0989d4ce5c3c7fdb664aaeaadbce1f231e64798f6f9a85456b5a93a502126a80e2d21f46921cc3601f5ecdbd56998a63b865fce7eb299f76af40e91281bfc019f40e0d46811e383691e4024c94566f18024ff2b22aa7e1270233ff16e92f89c68509ea0be2d34511581d472207d1b65f7ede45133de87a5ffb9262c1ff84088ff04c0183f48467996a94d82ba7510cb0b36cf2548209a50603375cb82e678f51493345ca33f9345ffdf54be9 +Result = Pass + +Digest = SHA512 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = a35926685561f09f30925e94d74e5661892a2ddd524f751f8321163d611ea1591a08e0dffd46b208e98815a306aa8514b4db859dc1fe7bdcdf50c095554bf8b2f4cb9f884d70e55c2143bc26199c2f94b743f5528dd54689ad69eda660749f5c1bea8becaea632a4bf0c79a577edfcea7baaa6861e9d7f2dd5b4c4f6eb5f3d5f +Sig = b1a9c45a264d2c9af441a7b2d330dd788089ccef205d5d666bfe864367be9738124e9d74648ad99160bd3af81a81858babe667a5d95c980fe2f6ac34861eb2ec9b4b4e8b642ef3820f56ca388a556530d42754c47212e9b2f25238a1ef5afe29be63408cf38caa2d23a78824ae0b925975d3e983558df6d2e9b1d34a18b1d973ffaccc745e527ce76c663e903719355e45cd6d118ed0b85b70cbb8e496411353f84f8866a01fadc819ca0ff95bbe2cc68c8cf78da5581becc96247b911d185ed1fae36c4cad26208eb80883f42a08123dac68d88f2f9893cde02ef5a57661db2b3e1e9269cbb0e15c407bcf55d92e679383c90802cd0bffd469646dcb60ca01a1dead43228934018391dd81f8b7e797e527fbe1815b91bf3cd6a1f2ffbf5dd166acd5526761ca8bab5d463fb9fb820659f5cd50f8150f12f7e8d52e77773c1e6480c2cc184d411d641f71a9dedc2c5fc2ec37a2770a9383bfbf6a489cf32b56a12cf99378e39b50bdadb9f0591b2065f9d44e511c9dfb6158fddddd1bc2cece6 +Result = Pass + +Digest = SHA512 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = 1271a0ddb99a0e1e9a501ca33c131b0a1c7820a397790869090fba373703ac38ea00a9a0ddeed199d97be1801ffab45206710a61e5ed894c3319012ded0ff414386e56b548ad915d80afcc2bdb976d7c8adddca7dfa28aeb694033a5612660c644e32f85c2805651d713660a38914d70f0e41fdc4b3d162ef3acd70659eef637 +Sig = bffd010b2ec4e4a32777b77619b87622f8921dab56e102c8d824fe52b5df7a203fe71799eeafdcc0c8872dba6a374407b5639aeb5a30a904712f15097dba0f2d62e845412395cf09540abd6e10c1a2e23dbf2fe1dfd2b02af4eea47515957fa3738b06411a551f8f8dc4b85ea7f5a3a1e26ccc4498bd64af8038c1da5cbd8e80b3cbacdef1a41ec5af205566c8dd80b2eadaf97dd0aa9833ba3fd0e4b673e2f8960b04eda76161643914242b961e74deae497caf005b00515d78492ec2c2deb60a57b9dce36e68dd82007d942ae7c023e1210f0be8a3eb3f004824074b8f725eaf8ac773e60fbbb7cba9630e88b69c8bcb2d74dbdb29bfff8b22545b80bb634e4c05f73e002a928efd5a6aa45621ce1b032a2244de48f4df4358156678cbe039c9ebe4cee945a25b9038469fe00c3092936a8cff9369045f906733a9d2ab3660182069b157ca8f9b99a71fc153c68301e97a38fc3a87ae2b6f03754e6da82d0b0726e0703979c9320289feefbcddcd9d706b71b51e9a1b9dc1412e6ed4b56676 +Result = Pass + +Digest = SHA512 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = f30c783b4eaeb465767fa1b96d0af52435d85fab912b6aba10efa5b946ed01e15d427a4ecd0ff9556773791798b66956ecc75288d1e9ba2a9ea94857d3132999a225b1ffaf844670156e7a3ea9f077fe8259a098b9ee759a6ddfb7d20a7acd1bcb9f67777e74615e8859ea56281fe5c400748f02d1a263b1867a3b51748ab70f +Sig = 345e2f60f7c82c89ef7dfd7dff2bc2348bab020479330899d4410213b35e98d9bac92fd8ae806b5bce8a6c4bd8275b0facb4dd13f9d68ba67141fa5085264da6dd685a6d212170a2c9cbf2cf5930180effc250868c984bf50ff69d6069ea28f5bc1b63705d0732416fd829a5f5d6217462c22a33fd4652f7c1d198794646c08406024e8163a7ebe39cfb514c5443897b5894dd19a213e037f27e0ffbd6c5447a805a54dfdf4f65819d4e0fbee25e3dac47fb6b636e8de6190adccbcee937d0977b35b973606b0ca348758b50cdbba028b73d0ef01c56014c031c598fe8db87d2ca4644770aaa0451c376ded82ff5c6b8e7d2ed9d1c8a17c3122c128273c60fd1b0088dfbc9c927f162e43879405964cb11ef7899123feb8f88dd2734df98aa696d936a8df07000e84af90101f7006a9bd2549fdd0ad3f9de093012d32d2afaa828017ee9c607cbf5b54f223666d4b5f3e26e0dfec003961b83d83de39ff6a0e81e1883c1db4aaaf082fec5aa30a7e578553d89774c67907790c96dc4f5be4c8c +Result = Pass + +Digest = SHA512 +Key = 308206e40201000282018100dca98304b729e819b340e26cecb730aecbd8930e334c731493b180de970e6d3bc579f86c8d5d032f8cd33c4397ee7ffd019d51b0a7dbe4f52505a1a34ae35d23cfaaf594419d509f469b1369589f9c8616a7d698513bc1d423d70070d3d72b996c23abe68b22ccc39aabd16507124042c88d4da6a7451288ec87c9244be226aac02d1817682f80cc34c6eaf37ec84d247aaedebb56c3bbcaffb5cf42f61fe1b7f3fc89748e213973bf5f679d8b8b42a47ac4afd9e51e1d1214dfe1a7e1169080bd9ad91758f6c0f9b22ae40af6b41403d8f2d96db5a088daa5ef8683f86f501f7ad3f358b6337da55c6cfc003197420c1c75abdb7be1403ea4f3e64259f5c6da3325bb87d605b6e14b5350e6e1455c9d497d81046608e38795dc85aba406c9de1f4f9990d5153b98bbabbdcbd6bb18854312b2da48b411e838f26ae3109f104dfd1619f991824ec819861e5199f26bb9b3b299bfa9ec2fd691271b58a8adecbf0ff627b54336f3df7003d70e37d11ddbd930d9aba7e88ed401acb44092fd53d5020400eaf05d028201802d6db91eb32e36e5d5127deb034d14072fe60c1cd13c8c3dd9adbc87140b5e7136f4f89e61bbee7826f45ac1d99194fbaa8c5a0bb94db31d93723b51419d9c6f6eeb5f3610b67f4b4e2ade05cc6b8990e8832cf4cd40f2df0388c9a52072e27efebae20b4ad5951f4d20dd18943e58b786d8797652b2bb759c319d2b0046dbf69c53c075d00c287b876042fafa23fe4dd705e4e423277c9000311e94ea3f7456e32fd12afe4a2bde358a65824f1055064823c893fc93be3b8c658bb441d7f0b00ac246bf043a9c0053d319f003ef5a5533f74d630d8ce93bab416a82951e05b82c6036593eca89f0ebacd7d51ed9610af43537fcd266e5e47c0d25fedad6d047a1a1ee3eb444367e3eff7c7520ca4f779f2027fe45036204168454df4918b547a4d19e938f3c6db6ca2702ad9bbda1261c64d00b578285bdcfc9851f96a4f2cd14d66b9c1f65742a1344948c9f1da8d338ed4e3deb1ebadf11f8c281944e8849823496f86111f378bdd084c99f65fb9b4ee6271b1d1be424c294d185d9fd9cdf0281c100fa9977bca043a140e06158bc710f33918c7e503f1dd495b4f91920f6214d859f900c6a211849f566bc37417ec8a68f6874ce6160b34707a7341b1c00934e6ba3e60f63c3f4faf486be9780335b4eaee54ddd2f172a91b7a57a07905be685e49921e9d1af40e91b47be5bc1c0dfe3d10ad6b3b6aae0a43f82920c553b2e4932ff630297f2161918c684528373ed0af0d24b069ac4f511d8fd0301eff0365300a1f79e44d4ed21414940103aef3411568aae6f00b7c105453495c7cc6d3a76bcfb0281c100e16ae200e34b1638e158cf98278f3f62f75c97303be14265fbf11816941b366c4f95fdc3a7efe999d74b3919e6b10980ccd6e63e5ca118476b9144e59274c4a4c3f309e0497f9c8e21ce32eda4974cde4f28c66d46b6e63c2ce2bc8c629a974d4256d268dad6c7d5f80c3ad5ed4856d651ed619041acc611d5e2c30a7d11b60e5c665569fd9315120abc590c861e4ecb16df430d9056d517ff060947fe556acc7ba94273398339616f45ada042633bbb1df5e7cc313df660c02f11dc6dd0b96f0281c006d864e60c4be32d580088c14ee2d782fdccb15a5a4d35418f742cea6f410392183b1688d924e3efd42ee87ec26e0a93ab01973ca14955e55556f9ce7efbed1a1474b01e9dd592fb27b01bde028ae3b939c219aebb19d4474afe735e18e9398df62b0e166d7677f0fea0de612e3ce5bca3d5f0d8603356240c8b21f65a4c8dfeadaaddd410f488d430b91f8495b920439ccceab14d12b5eb6ac723a97a382e3efb2a88588bf8f1217d3c2b7d7da4ee64a0c9429a4e1927a8b8aa589353fce4390281c100c3d5f93ebec8efd817d633f1095c7d4d839061701bae2f39cb4d1607e0502ecd8bd58b562dac772906908e0bc63093aa3a1be5da2f6d16b3c593d803ddff8c126e4a8caf51820eb7cbead85a60dc8e46e80bf50bab1c9c5ed90b7d72ceadc30a6bb4f055975e5ef78d1625c662a927f0d9d86a99002fedb60a7c5d752f90adc118068ab1eaf809d7619d7ff3c605e31b1001d96dbf04c622a0192a59ba29369148789423ba5cff12c503c6693c4e515d7775250d1fa52d0d06c093c2226eeeb30281c01af7aa2c6e5de3ebed447b0327ed8c09460a78d700097a147d4b59df7d4ca448ff63f0a4e82f842528b750253309d41c74b0a8e3ab293a69a2ecfb589aa3351fcb9cee01fdf073590d5cc91bd86b44c0dd73ff8ac183a77029ab15adace35707b2e0bb94e02c8badae6860cf6e9d16b913b929a4b32b17872ac278653f7d65cb795c514f15a1944fc78095e9c6567f6cd5882e23e4f4e571a168721c8e70924c1a3d9616fc1f0dd3b05278243bf9aa920fa05b3a53660506f71d3fa0bdc8ff9a +Msg = 132cf50c66ac4cc54339751a0ebb865e1d3d320562fc905c4abd1e78e464066c46c3a0c02db0371ee35a104d66dda864c6133e37cfad9116e883ebb73b295e7016c34ea9911a309272ef90114d8f59fff0a75193fe5ae31ed99121f9c59209bc4bd507b1dc12bc89b79ffe4d0df9209762a1730136290cdee58ec828ccc88eba +Sig = b12503b7b2f783618884174bcb9be10877960431ed6363c807e12db71b8b6bd9d6401d064e253740158e8b900152d37faf20333a7d80b3d47c7c7a3fa12091ce31cd8aae272a4da15fe2cb5cfdea541195a469c96bcf695e0b526dfa48a59003c6763af8136392c4b8d24db314746f42aca550acc65e074913ab82232eb8593509158a8ba34bc0f0e3125a834a3ed2d6a8cb1d085f234ae868b86aea8d6f82e13a08842485066e48aae4837873150f44475e12602b552dcb34d1f9fdaadbc6bff5134c6fc76263888be67efe63ee1840fa08c49938858a9d48b1058d18976bf2e3bfc625552f75b3ea44eb91dd366865f240a0c336a0110e0fa09d09cd94c70cbc8895ae3d44ae3dff545f0e8c8cc662ecd40f9099a952494396c6b423ebb463409969281cdd54ad87a308e487ce19745b30d5da76b98d2aa9a007a55783b3037e5b8662322810bdd11d86dc3f61451149391fb2f14ed9c17c751623a4042ce7edb875ee27bcd1f19d6dc9283ad06d15e097e2b0b15a7eb7128adbca0aa6adcc +Result = Pass + + +# Additional test vectors. + +# Invalid key, no version +Digest = SHA256 +Key = 308204a10282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 5af283b1b76ab2a695d794c23b35ca7371fc779e92ebf589e304c7f923d8cf976304c19818fcd89d6f07c8d8e08bf371068bdf28ae6ee83b2e02328af8c0e2f96e528e16f852f1fc5455e4772e288a68f159ca6bdcf902b858a1f94789b3163823e2d0717ff56689eec7d0e54d93f520d96e1eb04515abc70ae90578ff38d31b +Sig = 6b8be97d9e518a2ede746ff4a7d91a84a1fc665b52f154a927650db6e7348c69f8c8881f7bcf9b1a6d3366eed30c3aed4e93c203c43f5528a45de791895747ade9c5fa5eee81427edee02082147aa311712a6ad5fb1732e93b3d6cd23ffd46a0b3caf62a8b69957cc68ae39f9993c1a779599cdda949bdaababb77f248fcfeaa44059be5459fb9b899278e929528ee130facd53372ecbc42f3e8de2998425860406440f248d817432de687112e504d734028e6c5620fa282ca07647006cf0a2ff83e19a916554cc61810c2e855305db4e5cf893a6a96767365794556ff033359084d7e38a8456e68e21155b76151314a29875feee09557161cbc654541e89e42 +Result = Fail-Invalid-Key + +# Invalid key, version = -1 +Digest = SHA256 +Key = 308204a40201ff0282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 5af283b1b76ab2a695d794c23b35ca7371fc779e92ebf589e304c7f923d8cf976304c19818fcd89d6f07c8d8e08bf371068bdf28ae6ee83b2e02328af8c0e2f96e528e16f852f1fc5455e4772e288a68f159ca6bdcf902b858a1f94789b3163823e2d0717ff56689eec7d0e54d93f520d96e1eb04515abc70ae90578ff38d31b +Sig = 6b8be97d9e518a2ede746ff4a7d91a84a1fc665b52f154a927650db6e7348c69f8c8881f7bcf9b1a6d3366eed30c3aed4e93c203c43f5528a45de791895747ade9c5fa5eee81427edee02082147aa311712a6ad5fb1732e93b3d6cd23ffd46a0b3caf62a8b69957cc68ae39f9993c1a779599cdda949bdaababb77f248fcfeaa44059be5459fb9b899278e929528ee130facd53372ecbc42f3e8de2998425860406440f248d817432de687112e504d734028e6c5620fa282ca07647006cf0a2ff83e19a916554cc61810c2e855305db4e5cf893a6a96767365794556ff033359084d7e38a8456e68e21155b76151314a29875feee09557161cbc654541e89e42 +Result = Fail-Invalid-Key + +# Invalid key, version = 1 +Digest = SHA256 +Key = 308204a40201010282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 5af283b1b76ab2a695d794c23b35ca7371fc779e92ebf589e304c7f923d8cf976304c19818fcd89d6f07c8d8e08bf371068bdf28ae6ee83b2e02328af8c0e2f96e528e16f852f1fc5455e4772e288a68f159ca6bdcf902b858a1f94789b3163823e2d0717ff56689eec7d0e54d93f520d96e1eb04515abc70ae90578ff38d31b +Sig = 6b8be97d9e518a2ede746ff4a7d91a84a1fc665b52f154a927650db6e7348c69f8c8881f7bcf9b1a6d3366eed30c3aed4e93c203c43f5528a45de791895747ade9c5fa5eee81427edee02082147aa311712a6ad5fb1732e93b3d6cd23ffd46a0b3caf62a8b69957cc68ae39f9993c1a779599cdda949bdaababb77f248fcfeaa44059be5459fb9b899278e929528ee130facd53372ecbc42f3e8de2998425860406440f248d817432de687112e504d734028e6c5620fa282ca07647006cf0a2ff83e19a916554cc61810c2e855305db4e5cf893a6a96767365794556ff033359084d7e38a8456e68e21155b76151314a29875feee09557161cbc654541e89e42 +Result = Fail-Invalid-Key + +# Invalid key, version = 2 +Digest = SHA256 +Key = 308204a40201020282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 5af283b1b76ab2a695d794c23b35ca7371fc779e92ebf589e304c7f923d8cf976304c19818fcd89d6f07c8d8e08bf371068bdf28ae6ee83b2e02328af8c0e2f96e528e16f852f1fc5455e4772e288a68f159ca6bdcf902b858a1f94789b3163823e2d0717ff56689eec7d0e54d93f520d96e1eb04515abc70ae90578ff38d31b +Sig = 6b8be97d9e518a2ede746ff4a7d91a84a1fc665b52f154a927650db6e7348c69f8c8881f7bcf9b1a6d3366eed30c3aed4e93c203c43f5528a45de791895747ade9c5fa5eee81427edee02082147aa311712a6ad5fb1732e93b3d6cd23ffd46a0b3caf62a8b69957cc68ae39f9993c1a779599cdda949bdaababb77f248fcfeaa44059be5459fb9b899278e929528ee130facd53372ecbc42f3e8de2998425860406440f248d817432de687112e504d734028e6c5620fa282ca07647006cf0a2ff83e19a916554cc61810c2e855305db4e5cf893a6a96767365794556ff033359084d7e38a8456e68e21155b76151314a29875feee09557161cbc654541e89e42 +Result = Fail-Invalid-Key + +# 2048-bit key with p < q +Digest = SHA256 +Key = 308204a30201000282010100a0afb85b74105f49f6836183d67b92602b53ad0d7a65f32a21d8959b8722aae1ec000cb9f22de09b794d7446e04be02a782615a659ceddb5f3344b6e566970718124dc8b8bf23c5aaa7447b7f11905f828e91f1a844d535624b987704ecca430d04cfee0deef46e7e2da65a3f2a1b3aae6cdf96795d24073a07312867aeb414e0bd6c23d80bd9ce6266fd90dac7666b019c141e3516ed51ced0d62a0b1db189860406ec5b7bbbeb49031979dba118ef6ad131365d6bd6994e695ab084592a5d2470341e4a9da14167a1387ec3d513687b7d849d64da896d4038f72f8a8a516c6402225a53eb813c1eb0e675af8880433545a90404946d7d8db2716fdd63898650203010001028201007df2de1548f720499020d0c98ecf931f3036c938fc4c76f9fa479294b2aa98b8b6cc1f2d8cc72afb926c048d1d783bbfee2723e71d13c9b2b96baf0850511b22ccb040f25c82458e6776f7541575a0b9300ff2224dbb726bde235226d48d10d1762433cfbcce5e8c99c2c7d266f71a2605fd42d54f98da8e0720cb4f7f7f70d2668b89cb57fde159ac7922756fd161379a5693168c388b7e1468552f67f896f69740e80e13b9badee87b7116e559c1e428276cc9d4788b0ee25f10ed560daa8339aeb52d8bb2b05a2e1e16e3fb348ae5feb5dbaf53a7d8a318865e1a746374df077d85120b02e3f0ceba47cc734c96ed6dac65f11bde2db2f1ffaec0da5924c102818100c045a3996d1465c73ca839c442b1026c82e418c68a5f96b34ff36557144a86af092b8c2873c42ac08d66e2f471c4094098be48058ed2bb0ebf0beb896f0eb18eea16d475914c901e35dffbcc257f19260819213c46eac7e508aae0114b98770471949f006d42a6c2e07d590e1f5f14747239154f65155daa4bea84f5ee8d2c7102818100d5f20732ea986dd3d1245dce180595a7f48b36c58f1576f6782062a4f1790871bfb2e31b96f1b596c59b6624cc2b56c441e4970fffe70e59c0fca099b598170106a60e32725c35401271ba2216039c627b18a2e319331c1444238724ba7c80e2f35d13fc0662638b414f7c12fe66db22328fa892a4b7632ea2c24f6b06fb3535028180448f5073e0127aec5d73bb0d819e6eb7d4c0931910b45f1f576df9ffe00b67153916df26798944995e92867115b40a7c8f3aa2a1e0b8c1dcd340e3df20cbc382ab7432942d9878775d4c9e13c0771eb79201abf93b6c7294f7cf3e90cc3cf48b9018a7cdd6280320d03dc228a805165d2371b9689329d83966529cd0b91c7bf1028181009f1bbed4d3f9067ca7a63709057e69bd1db5c6c707d13bc6b2b1cb0ac5f6701c4027a694a71e1d2102d6be1111b20d762956fa2d50f0221107e01904173403afa4a52c1bc246e6e73e904b8ffbf535815bf0877b030baa8f3bd97c31096b7c62cc0065d361601c8dbcc5830d911b274ef8713439d2bbfbcbfc092c0cf9852b1d02818058e7d95fe1a95fe10f60b59eba5c8c28c8eeaa82956a3035f37e7570f5ff91a104a5df77ba13a09bedb22018e2ac7461471b5e719ab202032cb3905391b7d15c74b36aff25c83987726e0ef1362c1b8f4f8282f2c4fd6a38a9a15e63400b92bfff31cbfc375313dc40f9cf19e031ededd32c47de6b3a99696a903638c4d6969a +Msg = 5af283b1b76ab2a695d794c23b35ca7371fc779e92ebf589e304c7f923d8cf976304c19818fcd89d6f07c8d8e08bf371068bdf28ae6ee83b2e02328af8c0e2f96e528e16f852f1fc5455e4772e288a68f159ca6bdcf902b858a1f94789b3163823e2d0717ff56689eec7d0e54d93f520d96e1eb04515abc70ae90578ff38d31b +Sig = 912209edbd684deaca5855ea6cc89ba16753caca12df2e18f56228f0c2ccaa3bb5e45aa2107dbe2cb5b5c3e1af159c858aa9f665df4433e5b8df78452da436310beded396ce5ab4fc3882ed72ccb1a2a9226ea4177deb2d341ae88aba789106cee2b25ad4049c47a46d05c94ebd39416674adfef4a212cf139a5283b8ec51d54c21461e302cdcbd8ce9f7659b7d88195912d706cfe30f68ca8419054e22f0be31f86e49135b86e3021dd43baec6a0cd24042d81f71f8a1e23079e6ab1f8cd7b3fec2882e93f6e724d3dec5a2e7883c56b8d9773036f116325bc6cb934968a780b66251e4583fde426e63951b8dc380ae29751ba5cfba759c4f192bc373775d44 +Result = Pass + +# 4096-bit key with p < q +Digest = SHA512 +Key = 308209270201000282020100cefe6a02d3b9919783aacc1e555888b6aecc45c76bf28f0efc673a4576d44db983f5669fa28bf31966d1124d01c0f1e9976796a4f7855115f74b59f65aa17d3e56b3a265ef91463a562fd2e770077cf7a0cfc4d0903c812622a141076046bd2b334e2072e21b9cd9d949cbaa010d73fc7c1f5337431a18fc93930509c713ee4e773818134912d7cfbaab4b57038d645cca237b2fc367f76b26200894e174d3c4265f58765ca0e81e2525db528afabc5d149e60ae2aae8e313138b27c4bc901f9612728ab7a32564d3d93aff6ba0033c9e8db84cbc1a2f0de32a275318836c07f07c51cf5ed43c5c727a4e2541a78c91e6a7609edf4c1c0cdfc59fd63621223ff297f63096f876cfa93449994597ef27e47371ae5c3ad575b6fda18fcbc314eda54411aaec457d52e1a44da6ea0d6f43ace949f6a6e9d5a917edca6cb38b217e9bef4279b8b98dcd603ca299dc3173fdb3978fa6926e8a0dacd58162e9337b9c5af7f7260b2c4f4cde6bc7a71f1a56974b72c721c57eb925860562b744d32a65cd2577e70e8e00cfc528d54186bfd6c3fb84a081ee7f5c8a8ff388296f021ca13b99e5ca6e773adfb6a6b7206a23078cdcfb57db1f1cd7d21e283bbd8a7c1e8d2eef46008ad2fd440d6959ed18bb84831d872d79e1ac4260caf481faa9bba227e15a1b61bff8249c9b60d44056118969242b004059f85c0125b1fbc47cfd4772f020301000102820200607f0a3cb727535026f9809ec37aba812f8bdb1bd49f07421d38a259afc3d9581ac4544b2723c6f8988deed22777234f9a5d9844df7f2f05e67b223d4e92ea281d9330aa04bcdcd8654576349e6d5f3cb1a32a457078445cdad801d0c67933c6e7ec0c0482940cd32210dcf92bf47195cae76f8bdba456f1a87a6966dd7fd5208f437f35be6322689cc52e222a6dc7d3da08206d6bd313ecc7a1375ef09bddfd1b46679f061f9d16308b2d6b958ebe3146636efec2b70d62b167950d8ce6f01ca9c5ef97c127a643ebe8e5a7479ec085e8202e102efd1efcf6edf56459f3ec594bee004a4589cab1c53180b16485da7c6b750bbbfad63863ceb8c4ff87c09d368761e95315c1187aa04e86a33144803b14f50b5659a5af214e3338bce3801b06cea9887a10cc17d826429f45dac630bffb0fddee5aec3bd8b85202d4b33e8aed30b9366eda3380feefbc243333ed5d013e7e91cdcd9ca9e5b8b269046e190aea052b62d59394881b0682dbe1c3c075cf9a58bf1a0b3fb87093a18337f8eed96502c24e92176e02d627e468e9d539f5c57e95c0c278e84f75f0bfe57044f94a9f29fc9752f9d625813e46905a3f863d95dc55d43c9cecea0b21624ae92911f270bde30f8174327abb33f4467e7eeb19b58fd6ffcbd4e9a9c24d8443550605a5bc1c47824f9e3da734e3b3999b40fb0cfd9391648ea4ea7a42cc822d384f3e28410282010100d36b7085d0e46e43171c196feb4fb4a620afb13165df1d4704840ddbfda6f5e0211a09ac4ca93a50d1fc4b9a1a6b3cce695240f150f4fc40749381640e03d6443c2e927e76961c95011a20ffe96c0202572e211e0f6ecd30a77d55e15b7d71fc0d2aa8d440212197d13d5449400ae65eae7c464fb5e019fc61f403249fd3c97fabece326d47e4246ed5f8f4a6cc7ef2074807397f25b3eb25c88fa8e394b1d5f25dff6dc7facaa2c4ff4e90b60c5b56841f335d0db13f1bfc2b3a84362f14861245e3010e4816c6261d7b29fa8ebc638eb8cb68bfdca48c426a56ae8fbda8a2db20727b1e372b7f11f56efc2d7e5aaea2d7c0f6b10872c0a3b4a7fcb788ab93d0282010100faa41019d952a30d1472b7185d7eee7aff729027383baf87ce4e691b8c16edbbb5ee7f621d006150761c6757f5cbd00a3a17534b1fb6ca777b7b6507421d7adc94e258c87b15288988cb9e4eaed4759041f34d05eb14468a26b98e2ba435697acd6366884e16d2bee912445a2ad91ba73a058f2fb03db6d4f460c2688303f23712ea5c601551d1a5267b2f782494eb43287a490bbd0118c247dfad2b487d1f20989b0f636ebd4cf28843de937d34e48b35d8eee7d9718f342d825955f4c04ee8d6f4b9e26fb1f7acba75f9b65d85fbc428408f623ed94c1f83f48bec1cbbe6dcbd65e1466052d350f4c17aadf7f3b9a4fe9f12d5dee380f3386478cb784800db028201001f5a649283bb0c9b0877535264ac2a5724abc97450ee38924a9a26d0041ad985c682ed024f501d64d4ef3c6afb16022b7e35038a85fdfed6b43317d235bdddedba9b11808da78f4f8d9d495d8a494936fda4caa6819565fa9c2c1b2b537d140554128a7d0791a240b87806e2e20b7bc478cdd74384ee5a0c329e9444bf2b124bcbbc52a77485d0e061dd750b8d7c4cfb1c2bdc78a12964efe08733d919a809100e36db8e31a4f28ba5c3e53799bf583ac0e5078b14a22d8cc99c090d0d4448fe96fd1cd5b47d790c520441ea298be596956005c656f9c3b6cb2066ed6c44298fc3420a61f820102543078a80f3b18c9a33ea9d02bcadbf1b3955c003f5b964e50282010070f1554010aa2847509b90de2de370db8418bfd4ac8658c6bdb49fb086241ee4a34ae1a3f8a59f347ec4b5dcf129f289693bf190bcadc5f6a97225486c0694c2a96485d571814b4f0e9192b8aa179b1272658ca3ca16cce29c28a964090ef88519e05ce7b72899b6e59811acfff9ed7821b137a0a9ae65a0f8ae516c7efd5c3c6d0da6aab570b523d27f5818af835bb05ba11f2166fe0386289526978686bb6c18d866cacbb009e89076e4e95956685642e18a667799b08a36a7b2520584530aa1328e40f74c1eeb7aea86a822e4a95aef388864212612237176d546847c37bfe8a8ec26a6692c4822c2bce1800617f5bdb738e99f12ad9cec207a3e55e93c590282010037217ba957fea90049c4cbe3b410b44250541ec5e846008a3f80620e7674d56265e22b8c724816d90bd9c111c003c3f2b11f5c56c3205ca47f61e036a7319d6019e06aa18d7e070cb04c7cfc7a66f1f736ef121e970b7a4f6d4f7c3924f135fc01d7cdeba27ea1bb7aecfedf05dcfd2f5311d3f0f458dd4eb3c48ca45ddf5ac2dd6c7ca3367ec8346c8f5e124be3262989aba3bb28012606b8727de275e7c9b5f86eadbb8b6f6acd583fb61ececedf15b02ce6539385f5df185c6e973a336a036506a7499d1e08b3071bb40eb71d166e748c3419642496ca46efe09c1fa0aa77e0a5adeec50536b4ef112a0782a9182661aeb568ced30b24833e7d4199f78f74 +Msg = 5af283b1b76ab2a695d794c23b35ca7371fc779e92ebf589e304c7f923d8cf976304c19818fcd89d6f07c8d8e08bf371068bdf28ae6ee83b2e02328af8c0e2f96e528e16f852f1fc5455e4772e288a68f159ca6bdcf902b858a1f94789b3163823e2d0717ff56689eec7d0e54d93f520d96e1eb04515abc70ae90578ff38d31b +Sig = 98a95ccad59ccd39b1da810b53c9c0ce7b4b0acd65c0ffb788c88c856ea3ecabbe7015d4bf36b7c3de7c4c7c18063428afc567b94d4396048cea1a3b56544928e28b15360f9f5be7e700eb3b4d64b47061df1c0e096015bdf1329ef7a8a507ef56fa9330df4b1f3f097968839a60d1a6f1bb5b247032dc60b2889085d1dea210cff53c444b3f614d051cb41d8f171df025712bf57497f57e3c3e424685a8858f431a90d689dc1f7b41f868f0e1a6ef612710f365ff2bf90f2db89d61d9ab9fffac16581daec6ae1ab9f49c8dfd33a55f7b1e431fdd413649070e0a915f25363d3ddc2091fbfbf0fbeafe49753038dfce6973458af66a3d318eb7caa44d3fea95c46f40976398299db270e04dd20e77360013fcca04874307590429b13301be5f47a9681af6a47e5eaa53dc7ea05cadeef4ac96bc2c8e14ec9d0966e035898525c92fe7f0bc3a8996246f42da5dc0fb14cd856fe5bc51c031b3d83870ae89e9cdb1cbb2605b3f8bf4a978435c80a0e99a1a60b4e1a45d77458ec39fbf0a65b9b5891738ddc44edede2614d96e62303f0138051ab899e67bdce065ac5ec8edc6b591220b2522f8f4920bd9b7d4084b30d9a79cc658de0260b6e76acd7efe0d5c38e7856a7dc22bfbe287fdf88ca393f6c575cc1db8f0d8e47b0456e5a392f27e9f2b0352da61e58d1c1ba23b32de9f82ed35cd862644d63ea6a3f09b3642347ce6 +Result = Pass + +# [mod = 4096] + +Digest = SHA256 +Key = 3082092a0201000282020100b8069f9b94c0075d7448921fde91f517219051eff1d2a7330bb8ca0e848916454a03ea915c754aac3f88da52274f22926c0ff259813bd8cb298ab2d15e9dcaf8db9e612907a73200670207211dae05696f9a9a49280060bfd56a5885a349516a0c8f98e7a46d25248e7a296bc47b058a5b9737cb733f928a104203fb863714c8160557278735eb4ded185199eb1be80a5cd4d8e0264ffbf5f3413051e81ef61d7919df435f28fa6de30ac99a3bdd8660c791ad476dfa080a144fa0c75180700e03c8e1a903298f0c6cb8857fa9c0f5a61cd481b2666316d0c067946622f9b6f9b736ff3cc601c2896c84ec382840ea814b63cd0889373c090f35ebac034592829cc8b71520aa8d84eca21421c91f259a457d71d03d33b96f746952b02f42d730e28920cceed93b2115f4610ba8f0d26e662ef47e11cd2f7ef7f7e9ef26eff09122a2ba34c7348b5f1b5a17099d46c0c1a291cbfae64652ceb78b3d2fd738437f436a0b481725566067040adb98d12841fb142c22774ee2f03d6760edd8f373633a13c39548681b0106411c19693a95fde7273a42aa6a47665a55fd101bc3881f4b8390187b8f2f9358e94fc7d756de376d7fae0d467a2daeb28bd04039c8479c9428dc6417d06ae5fe9f76cd6ffd99b7ce118da237c4002aa945fd3128d92b62f66fc8aa8b9d659e97d03fef1aaeab2c5516fd55a5ccb7382a9296ddcf55895502030100010282020100879ffa0983bb72b2217d4a944a486fc5386b50b7f2153a3c98aafbdf6f36493f8fa90b3b4e54f34fb71379338adcfbb1c60a8aa60464c30617fbac8639a13971e709f6b972767a9769534945d2c5ea1f26ad5e8004072346be56be1edf94ad77e701fdc2da9fc5fc073569498f68cb5088e80daad7a946aa9208d53e8e5011f4d4a5e2f1b2e8be1e945a93e948292cfe56245821fa9a802b67b7e790b5edfb9d051f583822ede483100d673f5057972dc4674cb99407eddcdfd33fbf2605ee8fa5a26b0d50d35425e80aa5f8cc76f59413335ad2cc3ac319de73781f3e2fa3f6ae5cce07503703d49c31ea9608b4af1fd31c1e83e7fcd936240bad40fcb84d9ccc82141f83d43f41f6aa5cc3248b0cab9750478d370c4ebb219ac6e6619e80eb0e35562ec65d98a5a9f7acc105787406cda54eaefc9f93bdbc70d32da626df775ae3fcb02d468d0bde8d012361799956b347610dd4a4220d5ba4f8dd44c6a4c6a1cc2cbed643c775116b36d2795e33cfb75f29f644fe49e53609450aa34867fabb5306dd258204370376de470e7484dd72d7b0955c4b003016c3431bb0391716c8830a9b739f7b224a1fd90d6ec0a719f1bbb6354ad5cc34e22bed8ed54d5ebc6648778979d6b20c6167c319201d61dc1eb556654f732a75d3996ea9046c1bfadf2bcc1de6c00e254f0d87639262213b58f4f49771e65cdfacd900ac1256c8810282010100e96016489e0f3e0f21f3b63383d74b4ca597f77391ac19885921a9f55b9893b38381f1906a7b4e5c328b998f681a7d7ec362d1022eaa0c0ea4fd9017716538eed39c864e1e6941f7c47b5a594b5fcf7c874edc0d9fa74b25d875d9cfab9aa21cfdb7e5aa8dc4fbb67bdd681f7e1b1c73083df4da1a842a32e3cbf2dc94e20a9a09aa8f9db62564a7f544f6f58666b49831036dad02009f3f310af7cf2eb89f238fce322692db963b1362bbd055170cc51f5726d2111983818abfb96b988e1081fa881f658867b5414ff4f833eae5d28975ad3580256e28c5fbceb1daa78278058289c7f97632bab0494a2cc750c9cd58aec851ec97a7c762c947a1b5441acdc90282010100c9ddc7d236a5374cf84db722c7357c8499329766325678bf7023000cc3e87eedb811c8696ae1ac0c00d435eab2a2adbaa56cfccfe37becf217eb889939276203655f96710c466e16e7d0c4723ae4defe4570aa6726834385dc1fd0f8d99c850d84d6995043cd77377e3835bb7d0ee47dec605feac42f73e1cb6bd6c76118d561902a6fdbc66b4813b2ed979271c97ee349191317ce1b1af067b633b5cf45c4699e86c5b047d5d84d486b3bb8e1f053903c881a158773694f106dfaea68b9e2ed5f934ef915452806d2e5bf887a858636b772e1d6f282a659ba20770513e4df0b4dd42d34580fcbd3cca1e608c32f7ed6d6e0759f2af25643dea0e5d3113ef52d02820101009d53c691fbe440ad08f17852303e32a820365b7e50a519ad5e912037a5212de965ed73012d97a4d2e8cc4da06cc8f6f33f1addd63fc92949b216b24deb8716a3828ad1cbd61a957b47bcf4c29fda9e50d012ecac4e860456262004cf485b7d9057c6e29060f47bd0a09e393489da130ac572a71f65a2d5a3eb07b1d8dc91aa1e000838bb5470cef39f9877783bbbff615e21768d9c7cf8de2bdcbe04b0f58b6af8e643ced7502b6df5faa8aca0c0623e7d8b4e436d7daab6e8e7a9438cdbb0eb3f0f0743767a9ba9c5125b44fcc52472c09f1d231f98acea13805b4c1183161078d913b3ebe7f50d24cb5976a0d2fa991f73322f72698c33df8767cf807325690282010100b34d05a6a718fad4a81c475561c21556a5c87507b6206e620415627ef427f74de8d80abdefcc8107ac58d18724a230537f8a1dc7fd53deb36e21ac1404db0148e8eb0d725e27d4b30db6b6368c2f2c0e87d939d22338266aa889ae10cb2126614aa35e4c17dd514dfe13a94e5e173346d2050c4d3772baa84d09fd1cdd16b4b952d70ec2142cc8398f0d503b284c84231793690d14e9a874ee79bcd679438be11088bee103fd6281ca984cd4bc02be06786d9f558e1929e9ab3b34caaeb8a5629828fcd56b5a20e266c2e0ec357f9225d9adf600f928a8df3bde8838ff61a3e7a37a99a84babc42cdd2ed466e60fb2c6dad74642596024d565d25e30aab9d40502820100736f2d8187bccbb042c3ad4f44be780e038673088c5347f452332ecfae5d65bdc44854e3fc6d41f787765d65891d9c36586bcdfd044b0b1f99471ec1ed095eda5027078c0810c150e4499d6b9073bf4a0274a6b19029d752b400c63ecae83bbbdf1c6747f4718f583c3d3c04c4351bf11a9e9df0a5b28ce704132994df8abb73d7c3c4dfc06f0f24735a1dfac76420fd594b3db0046602dec3c6db7d4503aa3016b9ab1128173c13aec99d77b49902df6d5016d634397ee4e5810486e8ffd9cc79106a046154791038c002c622e2f6303ba52178a3abba955f4cfe75a446f7779b5b57a9858dbf228dce49ff3b0c62597178cb0c43a848e47242f019c5ca673b +Msg = 5af283b1b76ab2a695d794c23b35ca7371fc779e92ebf589e304c7f923d8cf976304c19818fcd89d6f07c8d8e08bf371068bdf28ae6ee83b2e02328af8c0e2f96e528e16f852f1fc5455e4772e288a68f159ca6bdcf902b858a1f94789b3163823e2d0717ff56689eec7d0e54d93f520d96e1eb04515abc70ae90578ff38d31b +Sig = 782a4da593daba94dfbf323458d4e1ff250f38689db3f699778d2ba9ebd3e327d636cab93b5f77cf333f9219cc8b9295a3115cc7b406b889f1a301a4757811b17b1a7004b44f25b987a1bf7c3c299f550c4cf41a9a27678137358ab02b8956e045f9cbed8c00aaba672e6b6b279277f97cd0563f51ca495957083ce9c0fe1c33dd254dde9d610df566ced993f6a23000538f8b5ede07db291657ff1dc72c2b919877c64655d0d6f7a08c5692fee15ec4b4658c2e7414be9fc3834d0b47209e9120a5eb5c4ad6d5a9b598b163eddc7555888069ca9dc431b2b67ce18201323f0c20895015fef02d8d1e25a7115552292ddaee50eb658f3bee98ce423c788699b9d37d2da690b8671249b204a5b263ab079c9596396cebbbd04285b98b6b8ea03ef066a2e2a7b0e77b40682540d94decf311d3b49e1d0af607756888fc3ba7ffe05e03c24afa0c855729c30abe93c0acbf5e9166b40eec18c316a01d2409c7c83bf7cd8e57f2d7c8854dea49b704c4bf9c443fce3fac5ba137b0568c1200ff91c0f538d3a7d712154bbabe4862c19a32bb89cc44e8f358359dbd349f98496d9031459fa674827e92213ba5f9ad36e0416f4bfcf8c8b16f88ce77b4f39b1889d0ee648895a36fe4c4322ac9783094e9764adf4d72080b3549faf8d2af95e2fb696fee3d64761c8e719f67ec04339af5327a7227ad1c5f708befabb64e71eb5782fe +Result = Pass + +Digest = SHA384 +Key = 3082092a0201000282020100b8069f9b94c0075d7448921fde91f517219051eff1d2a7330bb8ca0e848916454a03ea915c754aac3f88da52274f22926c0ff259813bd8cb298ab2d15e9dcaf8db9e612907a73200670207211dae05696f9a9a49280060bfd56a5885a349516a0c8f98e7a46d25248e7a296bc47b058a5b9737cb733f928a104203fb863714c8160557278735eb4ded185199eb1be80a5cd4d8e0264ffbf5f3413051e81ef61d7919df435f28fa6de30ac99a3bdd8660c791ad476dfa080a144fa0c75180700e03c8e1a903298f0c6cb8857fa9c0f5a61cd481b2666316d0c067946622f9b6f9b736ff3cc601c2896c84ec382840ea814b63cd0889373c090f35ebac034592829cc8b71520aa8d84eca21421c91f259a457d71d03d33b96f746952b02f42d730e28920cceed93b2115f4610ba8f0d26e662ef47e11cd2f7ef7f7e9ef26eff09122a2ba34c7348b5f1b5a17099d46c0c1a291cbfae64652ceb78b3d2fd738437f436a0b481725566067040adb98d12841fb142c22774ee2f03d6760edd8f373633a13c39548681b0106411c19693a95fde7273a42aa6a47665a55fd101bc3881f4b8390187b8f2f9358e94fc7d756de376d7fae0d467a2daeb28bd04039c8479c9428dc6417d06ae5fe9f76cd6ffd99b7ce118da237c4002aa945fd3128d92b62f66fc8aa8b9d659e97d03fef1aaeab2c5516fd55a5ccb7382a9296ddcf55895502030100010282020100879ffa0983bb72b2217d4a944a486fc5386b50b7f2153a3c98aafbdf6f36493f8fa90b3b4e54f34fb71379338adcfbb1c60a8aa60464c30617fbac8639a13971e709f6b972767a9769534945d2c5ea1f26ad5e8004072346be56be1edf94ad77e701fdc2da9fc5fc073569498f68cb5088e80daad7a946aa9208d53e8e5011f4d4a5e2f1b2e8be1e945a93e948292cfe56245821fa9a802b67b7e790b5edfb9d051f583822ede483100d673f5057972dc4674cb99407eddcdfd33fbf2605ee8fa5a26b0d50d35425e80aa5f8cc76f59413335ad2cc3ac319de73781f3e2fa3f6ae5cce07503703d49c31ea9608b4af1fd31c1e83e7fcd936240bad40fcb84d9ccc82141f83d43f41f6aa5cc3248b0cab9750478d370c4ebb219ac6e6619e80eb0e35562ec65d98a5a9f7acc105787406cda54eaefc9f93bdbc70d32da626df775ae3fcb02d468d0bde8d012361799956b347610dd4a4220d5ba4f8dd44c6a4c6a1cc2cbed643c775116b36d2795e33cfb75f29f644fe49e53609450aa34867fabb5306dd258204370376de470e7484dd72d7b0955c4b003016c3431bb0391716c8830a9b739f7b224a1fd90d6ec0a719f1bbb6354ad5cc34e22bed8ed54d5ebc6648778979d6b20c6167c319201d61dc1eb556654f732a75d3996ea9046c1bfadf2bcc1de6c00e254f0d87639262213b58f4f49771e65cdfacd900ac1256c8810282010100e96016489e0f3e0f21f3b63383d74b4ca597f77391ac19885921a9f55b9893b38381f1906a7b4e5c328b998f681a7d7ec362d1022eaa0c0ea4fd9017716538eed39c864e1e6941f7c47b5a594b5fcf7c874edc0d9fa74b25d875d9cfab9aa21cfdb7e5aa8dc4fbb67bdd681f7e1b1c73083df4da1a842a32e3cbf2dc94e20a9a09aa8f9db62564a7f544f6f58666b49831036dad02009f3f310af7cf2eb89f238fce322692db963b1362bbd055170cc51f5726d2111983818abfb96b988e1081fa881f658867b5414ff4f833eae5d28975ad3580256e28c5fbceb1daa78278058289c7f97632bab0494a2cc750c9cd58aec851ec97a7c762c947a1b5441acdc90282010100c9ddc7d236a5374cf84db722c7357c8499329766325678bf7023000cc3e87eedb811c8696ae1ac0c00d435eab2a2adbaa56cfccfe37becf217eb889939276203655f96710c466e16e7d0c4723ae4defe4570aa6726834385dc1fd0f8d99c850d84d6995043cd77377e3835bb7d0ee47dec605feac42f73e1cb6bd6c76118d561902a6fdbc66b4813b2ed979271c97ee349191317ce1b1af067b633b5cf45c4699e86c5b047d5d84d486b3bb8e1f053903c881a158773694f106dfaea68b9e2ed5f934ef915452806d2e5bf887a858636b772e1d6f282a659ba20770513e4df0b4dd42d34580fcbd3cca1e608c32f7ed6d6e0759f2af25643dea0e5d3113ef52d02820101009d53c691fbe440ad08f17852303e32a820365b7e50a519ad5e912037a5212de965ed73012d97a4d2e8cc4da06cc8f6f33f1addd63fc92949b216b24deb8716a3828ad1cbd61a957b47bcf4c29fda9e50d012ecac4e860456262004cf485b7d9057c6e29060f47bd0a09e393489da130ac572a71f65a2d5a3eb07b1d8dc91aa1e000838bb5470cef39f9877783bbbff615e21768d9c7cf8de2bdcbe04b0f58b6af8e643ced7502b6df5faa8aca0c0623e7d8b4e436d7daab6e8e7a9438cdbb0eb3f0f0743767a9ba9c5125b44fcc52472c09f1d231f98acea13805b4c1183161078d913b3ebe7f50d24cb5976a0d2fa991f73322f72698c33df8767cf807325690282010100b34d05a6a718fad4a81c475561c21556a5c87507b6206e620415627ef427f74de8d80abdefcc8107ac58d18724a230537f8a1dc7fd53deb36e21ac1404db0148e8eb0d725e27d4b30db6b6368c2f2c0e87d939d22338266aa889ae10cb2126614aa35e4c17dd514dfe13a94e5e173346d2050c4d3772baa84d09fd1cdd16b4b952d70ec2142cc8398f0d503b284c84231793690d14e9a874ee79bcd679438be11088bee103fd6281ca984cd4bc02be06786d9f558e1929e9ab3b34caaeb8a5629828fcd56b5a20e266c2e0ec357f9225d9adf600f928a8df3bde8838ff61a3e7a37a99a84babc42cdd2ed466e60fb2c6dad74642596024d565d25e30aab9d40502820100736f2d8187bccbb042c3ad4f44be780e038673088c5347f452332ecfae5d65bdc44854e3fc6d41f787765d65891d9c36586bcdfd044b0b1f99471ec1ed095eda5027078c0810c150e4499d6b9073bf4a0274a6b19029d752b400c63ecae83bbbdf1c6747f4718f583c3d3c04c4351bf11a9e9df0a5b28ce704132994df8abb73d7c3c4dfc06f0f24735a1dfac76420fd594b3db0046602dec3c6db7d4503aa3016b9ab1128173c13aec99d77b49902df6d5016d634397ee4e5810486e8ffd9cc79106a046154791038c002c622e2f6303ba52178a3abba955f4cfe75a446f7779b5b57a9858dbf228dce49ff3b0c62597178cb0c43a848e47242f019c5ca673b +Msg = 6cd59fdd3efd893d091afdc3155d354f10d6d88167427a2cf7246207e51791a6ca6200a914cd2834a9b3c79fcd59e26e457e0683bc33d49267edbdd6e5d90902696f1e7b1a4affc4ba371339868c28015ebbb73e262669866c35db974ba69e468f2583b9191d15d686cd66fb0b9e0ff0a3b4721a6dc342f14f2446b4e028595b +Sig = 166b8b8aa7a806397d8f28c900ea0f650c8cee021d79f7b5bfba2bada0400981dba364873a9f55f9fd002528f16053706623869b93aa8d1c83705c4ab321df3ffe5bedef4de369b345ffa16acc5f5e0b18db4a0dc9e843ef51dc7126b176237d4d8140f6d7bc1babcd135a6e471d06f264bc1e78996d8782c8f15da0fc32009715bfe21a88ee0d34c251c94cde33761c8e398f0ab1878e478700f869a7684103d624a9be0496c85669394f4915bf8cd68fedb0475c9a508c40862bb3c3f8bfa593fdc2a93c16e2866086d5a8be5e94c82ef415ac2cd20eab8bb3bf1c0f68a15ceac46bcff72ff2e0db004f29c4970b86925e60a6b4439bbc7acd95c1d480e0c586cf2af5b62bd56636be646b17f7df1419b02c8ff904b0879518be09c79f0aadb0bbe8f599e44afe9b3dec90f740fd2c586619e47603e9c6782207cffdd522cffec9dcb69d17df3d66ca626b8c14e7075fd8b10fb483f66d01559932793a932d872087e2d904b4b136cd33fe9cc4e83630fe1a192006a787d9e293cc3847fda8e0454f440841e7cb4caed5aee0a395e7040c8e133f52a223e1d402a1269fdc7ea69023f5168756e27479c66c759ef64f432f11f1c1751cb70b47d32e0921a2a415433316090394aa51c7249783cb43aa44255527a9450f60e8df078d0b31089b6f27a18a16a9fc01d45a36ede9fa4d822512467952da83ef5110aa10eef552c7 +Result = Pass + +Digest = SHA512 +Key = 3082092a0201000282020100b8069f9b94c0075d7448921fde91f517219051eff1d2a7330bb8ca0e848916454a03ea915c754aac3f88da52274f22926c0ff259813bd8cb298ab2d15e9dcaf8db9e612907a73200670207211dae05696f9a9a49280060bfd56a5885a349516a0c8f98e7a46d25248e7a296bc47b058a5b9737cb733f928a104203fb863714c8160557278735eb4ded185199eb1be80a5cd4d8e0264ffbf5f3413051e81ef61d7919df435f28fa6de30ac99a3bdd8660c791ad476dfa080a144fa0c75180700e03c8e1a903298f0c6cb8857fa9c0f5a61cd481b2666316d0c067946622f9b6f9b736ff3cc601c2896c84ec382840ea814b63cd0889373c090f35ebac034592829cc8b71520aa8d84eca21421c91f259a457d71d03d33b96f746952b02f42d730e28920cceed93b2115f4610ba8f0d26e662ef47e11cd2f7ef7f7e9ef26eff09122a2ba34c7348b5f1b5a17099d46c0c1a291cbfae64652ceb78b3d2fd738437f436a0b481725566067040adb98d12841fb142c22774ee2f03d6760edd8f373633a13c39548681b0106411c19693a95fde7273a42aa6a47665a55fd101bc3881f4b8390187b8f2f9358e94fc7d756de376d7fae0d467a2daeb28bd04039c8479c9428dc6417d06ae5fe9f76cd6ffd99b7ce118da237c4002aa945fd3128d92b62f66fc8aa8b9d659e97d03fef1aaeab2c5516fd55a5ccb7382a9296ddcf55895502030100010282020100879ffa0983bb72b2217d4a944a486fc5386b50b7f2153a3c98aafbdf6f36493f8fa90b3b4e54f34fb71379338adcfbb1c60a8aa60464c30617fbac8639a13971e709f6b972767a9769534945d2c5ea1f26ad5e8004072346be56be1edf94ad77e701fdc2da9fc5fc073569498f68cb5088e80daad7a946aa9208d53e8e5011f4d4a5e2f1b2e8be1e945a93e948292cfe56245821fa9a802b67b7e790b5edfb9d051f583822ede483100d673f5057972dc4674cb99407eddcdfd33fbf2605ee8fa5a26b0d50d35425e80aa5f8cc76f59413335ad2cc3ac319de73781f3e2fa3f6ae5cce07503703d49c31ea9608b4af1fd31c1e83e7fcd936240bad40fcb84d9ccc82141f83d43f41f6aa5cc3248b0cab9750478d370c4ebb219ac6e6619e80eb0e35562ec65d98a5a9f7acc105787406cda54eaefc9f93bdbc70d32da626df775ae3fcb02d468d0bde8d012361799956b347610dd4a4220d5ba4f8dd44c6a4c6a1cc2cbed643c775116b36d2795e33cfb75f29f644fe49e53609450aa34867fabb5306dd258204370376de470e7484dd72d7b0955c4b003016c3431bb0391716c8830a9b739f7b224a1fd90d6ec0a719f1bbb6354ad5cc34e22bed8ed54d5ebc6648778979d6b20c6167c319201d61dc1eb556654f732a75d3996ea9046c1bfadf2bcc1de6c00e254f0d87639262213b58f4f49771e65cdfacd900ac1256c8810282010100e96016489e0f3e0f21f3b63383d74b4ca597f77391ac19885921a9f55b9893b38381f1906a7b4e5c328b998f681a7d7ec362d1022eaa0c0ea4fd9017716538eed39c864e1e6941f7c47b5a594b5fcf7c874edc0d9fa74b25d875d9cfab9aa21cfdb7e5aa8dc4fbb67bdd681f7e1b1c73083df4da1a842a32e3cbf2dc94e20a9a09aa8f9db62564a7f544f6f58666b49831036dad02009f3f310af7cf2eb89f238fce322692db963b1362bbd055170cc51f5726d2111983818abfb96b988e1081fa881f658867b5414ff4f833eae5d28975ad3580256e28c5fbceb1daa78278058289c7f97632bab0494a2cc750c9cd58aec851ec97a7c762c947a1b5441acdc90282010100c9ddc7d236a5374cf84db722c7357c8499329766325678bf7023000cc3e87eedb811c8696ae1ac0c00d435eab2a2adbaa56cfccfe37becf217eb889939276203655f96710c466e16e7d0c4723ae4defe4570aa6726834385dc1fd0f8d99c850d84d6995043cd77377e3835bb7d0ee47dec605feac42f73e1cb6bd6c76118d561902a6fdbc66b4813b2ed979271c97ee349191317ce1b1af067b633b5cf45c4699e86c5b047d5d84d486b3bb8e1f053903c881a158773694f106dfaea68b9e2ed5f934ef915452806d2e5bf887a858636b772e1d6f282a659ba20770513e4df0b4dd42d34580fcbd3cca1e608c32f7ed6d6e0759f2af25643dea0e5d3113ef52d02820101009d53c691fbe440ad08f17852303e32a820365b7e50a519ad5e912037a5212de965ed73012d97a4d2e8cc4da06cc8f6f33f1addd63fc92949b216b24deb8716a3828ad1cbd61a957b47bcf4c29fda9e50d012ecac4e860456262004cf485b7d9057c6e29060f47bd0a09e393489da130ac572a71f65a2d5a3eb07b1d8dc91aa1e000838bb5470cef39f9877783bbbff615e21768d9c7cf8de2bdcbe04b0f58b6af8e643ced7502b6df5faa8aca0c0623e7d8b4e436d7daab6e8e7a9438cdbb0eb3f0f0743767a9ba9c5125b44fcc52472c09f1d231f98acea13805b4c1183161078d913b3ebe7f50d24cb5976a0d2fa991f73322f72698c33df8767cf807325690282010100b34d05a6a718fad4a81c475561c21556a5c87507b6206e620415627ef427f74de8d80abdefcc8107ac58d18724a230537f8a1dc7fd53deb36e21ac1404db0148e8eb0d725e27d4b30db6b6368c2f2c0e87d939d22338266aa889ae10cb2126614aa35e4c17dd514dfe13a94e5e173346d2050c4d3772baa84d09fd1cdd16b4b952d70ec2142cc8398f0d503b284c84231793690d14e9a874ee79bcd679438be11088bee103fd6281ca984cd4bc02be06786d9f558e1929e9ab3b34caaeb8a5629828fcd56b5a20e266c2e0ec357f9225d9adf600f928a8df3bde8838ff61a3e7a37a99a84babc42cdd2ed466e60fb2c6dad74642596024d565d25e30aab9d40502820100736f2d8187bccbb042c3ad4f44be780e038673088c5347f452332ecfae5d65bdc44854e3fc6d41f787765d65891d9c36586bcdfd044b0b1f99471ec1ed095eda5027078c0810c150e4499d6b9073bf4a0274a6b19029d752b400c63ecae83bbbdf1c6747f4718f583c3d3c04c4351bf11a9e9df0a5b28ce704132994df8abb73d7c3c4dfc06f0f24735a1dfac76420fd594b3db0046602dec3c6db7d4503aa3016b9ab1128173c13aec99d77b49902df6d5016d634397ee4e5810486e8ffd9cc79106a046154791038c002c622e2f6303ba52178a3abba955f4cfe75a446f7779b5b57a9858dbf228dce49ff3b0c62597178cb0c43a848e47242f019c5ca673b +Msg = a7c309d44a57188bbd7b726b98b98ce12582228e1415864870a23961d2afb82cd5bc98bec922d5f2ac4168b056da176ef3ba91f6b699ba6acc4144868ff37f26fd06720868d12ad26ecb52572cf10416af68df03ab645a8b704857d2190ffc3f07eabe3a8e2abe34ed6159e884c4fae141d4333d5c3e0db044ff9cccd9cbd67f +Sig = 72a8d4f11321d8465ba3cf051ecd8e307367014a0ba1677e77a9c500d77e874558e245f3e2f52985e770895827a2cab290b05229168bccd3bfccea7e7128beeae070890de1c1b7f52ac90894ec52403a33187baff155a471f913e8bc2d96e4ff16308838f9f7473bdaa29d0ad5a6dbfb0d8fbc229cc46394c5e25fd19ed6129f28b0c15282793bd288ad491d1324ca431a63212b75ceb510b19d4f635d8fce80ad86e7539b4883c7aefad92cd2de9cecca4e2d7986dea10ca122dd6cf455deb7eb3930937892e713760034c1e9e8b7a0e566bf471845d125d79018f1b3395e2fb4a908ca3c39272a3f2ee733e56bf76930a54efb049fd14cdb67c728ab23f442fb0e8efdbf0389770a086a7451cefbf5b94ffce64ed0430b441897f5a7875420c9df2aa4b3eee7551d0072b021abd579279f8d5b42b129fd13fb4717a23eaa50e0bebbfa64cb973aa249d8095b68ec5944f4f9b73b5f2d6686e9a0d84497d97dde49f8b77a0141a2ea2de47f08d171d16a53fd2e02369c35de96530f5006c35e96857219584053aabe880d246066e225dfc9ac4f59dd295c131796d4b739de118660897c22e9964d7ec8e53272dd2cbbcc2b1342faf9ebbdf4c24cf31b192bdd070eef578ca8cfa02f2c6f29e1643796087cc3867a4a6be8cb35fd63e03f66b9ef2be3fe7975aabe08d7234d116b4c6b41ab5e5de0f93fc60d68b3478ad4ede9 +Result = Pass + +# Invalid key, size = 2040 +Digest = SHA256 +Key = 3082049d0201000282010000baff76a0e86f27d7cb0b843454475348f1a7b474d12c3ed1f479d2d8d34c0bc8a7cf9562bc43b3649585a0325e17d30872c19202af95b407fbbe701811a77937a0c866f863f062f1d36724faf5a44724aa8b0901bc61f8632bf6a1bcad8da8c26b38428b88413317f2975019e9a0c0a4c2ad5cacff643dc3092d053f8607bba83310ca90197e4f38f6507d60d3fcff5c42d0d9e2695b72490c0b622d783e22ce0986dce6047410569e869651acf168f59bba02326f5a2a5d1292766a9b5325f7e17c1820a1ec91aa4257483657f8d13fd3ab071b9ff361f8ddbb071b61aeaec3ec7338694ff2f3f7b43d81cfc9900a6b8cc5c426ef5c26559a5348c16b476b02030100010281ff26030c10456f630000ac44a18688412bd0c3b071169c11e107fb439b03c8af948858301bb3fd67180934f28d8a86f944fc5ed0d96eebd57ed1f3b241924522e4e5f016ce6332584aa4189171da411c9d1d75c9ccea8857bf810e4f6e5531389edcc0c0f6302a60c27b73babaa9bd1dabe04ef149d158851d825dfe751d3fb126355980af98fa7d977e573f58e428a309835958ee689242dfa6018c070d39809b8c21632cbe33fe3ee1a862e38ed13b6147115194b48922bb1de56ffd20679146251c8d2fc192c931c7e538299e7bbcecd81d3b8f8ff5ab95887b5bf3c621653810e2e3fb3b00b0817aed965d21b5ebdce84055c15770cef5d7599c79dee9410281800f522a5da7007ca094340bdc9136edd6ee0a80bbf3c6d1eb062c57d58ae69e170ee629fa269fa7bbe3ac78267a7eb260c5fe064a7ee05f78ba8ec0be8f1d0f471d3af0820bd09756110b4d53c6ef83211b10ee0862d879472e030c9ce0862c5b5aaee108d3f1c011a746629d90cd78d8111f1da85896b93d9e088205c314af510281800c3492d56d1ecee6d51bc376436baeab40a1a3eee530a5faad1f8db149cdc2fc01eb809089a36de466a620a4b997d8112b613c68fda78a7237506c90cc890d260974430ede8942e2bb34fb9473e46adc85aafc42ecac2a84f56fb4bf7d7f8469e791111cbfc75a221bf0e3d252957e5bb0dc78fd73509007e973014476c273fb028180072a6ade3a89a3c0871080abbccf701622678f26593218645012d551ef1145c78b146375b832dc04a8cbb5b6697c70798aa0f0d84ed72a5011114b5cd51ac65680795c9bb662ed2537fb8d432dbc401c6fc84f4c64ced28a541ee0fb4e97f28f17aecb5991a77429cd8ec1f8e80cf2043c9dcd053bc9e301cab437fbf1edeec102818000b46865fa4ef5134eeab376789e170fbc4398fb8a302ce53469c5fc9e8e4adbd2208ee3c98eae21a9eb9da6e53067415687debd1128434e24f377d1447e054c54ef698fca3992ab14b4127297de706d1b2aac3611043fd03d7b9dac10caf41249548ef0620258a9ef8311246bb04603754ac5919cbee21212e0990a22f147510281800e6614d7fe3a6c3ce1c1d2cf1d3eab9b7ae046fd78067141dd841726968e8cfebb4171d94754aa4c71ae8cb53d251b06e420f2b7f0f01a6a2e6b386c3554e0e81a74a94b053bd5c062997729801885f3c36b996b2757b76d09116e11af29d604f70e7dd63225234677796095551c64692aa52ba63aaae2dc836f92cab9def128 +Msg = 61 +Sig = 6041bb20241dd3aaa3eb8175f9642243e1e3cb289e52bad58a4d56bd8a10306bf139ae14d2489fa3575c74f53d851b7dd7c6bb7520718295afbfb5e67ea7b414c332fa0bf3df019c95ca9f6d0389a84c2020ebebeb09ec42a4985f47560c356979a7667937c94de9e16dd26dc4bc4c3a7f34f9b1f5f1166397c6493dab8760e822f41713bb9b1978cd413955a3d356f2d03d973036019a1115e502f65aba3c9b5a3955ba2d6155f106283657541faccce43db657f9aeb93f64e0331f3e71e3f569a26e773e1d103c2c04c59f331ca53bd44c271df15c32279f433359e1b1744fdd587c94e2d42ddbc899ec444718ae6a22e302ebcba861528d08683345e9c3 +Result = Fail-Invalid-Key + +# Invalid key, size = 4104 +Digest = SHA256 +Key = 3082092d0201000282020200da35475cb97abb30a924594d855d9279fecff4bf9b950c5ba8ed23a263429d1e075cc63e2438b34ce5ebf1699ed0ca590c1eec0e93dda1c5a345d01a6aa2b1708c74fefb91cb078b4725996af868ecae9390b836d906288c0d86f3991121f85059b45c24611d97df5d497a56176c3e1b9b83887e8a07f72bc2d45cdc8e5a90439ef77b09ebb1c2e538058dee343004ce2351c6b398f1f4896b165e2ef6ccdb46dadf51db109137e7db57fcbba406c16b4e8c3d741dbac14d1c1a02fbee6a58cd2472737be1c73fadfaf3ab90064bbf1d1b1eeb499283334c9ccaa68a875ce25a025f9cd49c6a64a00a7c065c2693a02cd4c4984879a9b46a7f88274b259ada9d69dcb62dbb9fa5d865841262a76b63018d06cd808659ad4cfa31e022d227a884969346de362697ce192dd839537ef3017f0f73fa080d012a82f596c24eaa9dd01fc10c875020232ffc1635ef094b050a118bf810d8d409df9399f5ccfbb3ebf25a96f438eef72a6b563be8efaa1f5ee5fd2950cacc06f7a208a311f9d5e5e9c97284859cebecd5527f76c7b80dc44f6a5856411fa53148a28ba3025ca02fd9b4f97245fe31fecadf7bf5683a3ebfeebc91695a3910f27f38df143cbf0b9b9553fcef262f16ae5170a1b5018b2f0fdac640afd5c318a9517ca8491bdf231e940e861e4bf3336a0c83a9cf1c1d53d6ba6dc129717f14fdf6261a0cd6c93eab0866c702030100010282020200a9520a6bf3293f33c52c0577d7f30204542bbdf9289b0199e67d0cd7a73a3b7cdfada7cef48062f15ac038f6025c75879f96270a30c71c0ea66137d827c2d2f948a4486fa173f008ad4e89bbadc28d55f1ffac5233194a415305d2e4859cdc784d035d34857f5727e5d56c6e7d826ab735775d65036aa6eb78251d61afbcaa912e3b4f6825522caf7d47221922b9d820b4db71da4ee60120d8cde48b80caf9a40396a287e0552f1264ebe39b1eee770bf349732e351b837f783cdeefead2eed15064d723dbd0a6a33445fc6ca7d603186cc1134665c015006ff1f8452a40730bf1278c2496b3201de7c4d19294049d97ec0a1938b3df71b5e9fc16b1831ea460c6a5813b96b542a809b4e92092d0c850a213936ea8bd48467cb4738e55f79202045a3e58eb46df455f33ab8ed1f798001006f620038b9557d21263dd1b3f849550d7c79d37a816ee6ce8a14bb8b08ce9caee2860815b7ad0c862e40c0639d7d5d129b501405560657a49b99ebfbabc666086a4c9ba394367f29321c7676ffd908b65ca0b5992f6cb65bd5ffe1c5257e584d6f01c04f4a4de223cf39ab3cf1f0e43b933f0f2fdff24dd8f03b0d69ec5d592732c960205e7a94401baaabd7cafc90b972f56a0d096a2ee366f9be53b97b820b9639382cd3508498a7f08543032f8d33fc0968596d4db961e8089ad17be6c1fec0228968e7b21ef164ff8c43479e1d1028201010ee8e72193d6b01c1f603fa872c04d0bbdf690cb4b3dca22a3cec552b788434302390004d118f53532be3774da84c9d2c675b81481d2df4e17abcafdece67250e30e76d7671b145c2accb57a19c1e95029936dd27947af246ec1e522c67f1979575555795cb6637532300f5b1bdf5f55f130d195165eec33522367dcf9331f9a3ac52db8cab35516cb8944f73c1903fb6936820d1430cf6ed6f3c52d2696ba20cc6098dbc91d392d44a0a0d543aa0382998cc4133d3ef3f02a2f563b9c2aede75cb99c40ebb01ad2a622ac376bb72adc2f23a3efb681d6b73e99b68d43ca306f68c42df1d482a490bc01289e2dc81daa76aaf7b4d17456b9d1f4272542be12899d028201010ea29ee81cb4b4ca41b489746ca8ef83675c90bea23224873af5026a01a4f172134f2da20ae520f099b65cb9a6dd7f50f8f0b0db6aecb1cbf3630e975a1f1af37725a8fb88f1a762c3ab790b80d60cdd320582d9b1b6adf8e52ce56d98cccf1770370c3e54cb69100adc2da03a50bb107095e4dd6afa0f8de4c93d6cf27d1a1a11ee21ded0d6fe4da95a3a0df2dc74aecabc5ebc99a30afe4a0efca184c3b4f0f58be76ae282222da06971390d6951f8124bec79a912deae86bf502518d6720e147bd6d74d7ae0e90bb42c420c957bb68498f82e81dfff51c4b9f9725b1553c25c9b49d7181942bed4fc80a1290cda56f2755d1f963b276e152bca36f9ff1286b3028201010e7ad41540fd8bf513e7a68b123e7dd4bc7d1bebc33bd3f6463dc656e9d514f59bcffd9baff25c19791950c45480077d82adcac367bd828ed5e04a78c6bc9b22c110480c339f11ebdcc90829f79fe1d5af3af5ba257c9fb473382d2ed3b595e8c90f1fbe8872bd2e913a297fa31711006707b152e7f1f1d4799dd6fdbcaa90b379060bbc5e674168acecb8249fa1efc317500f876227711cc4f6e37450f8aaf4b567ceac0caa2be031b909d9742845d66d074f591beeea7b408cce637fec1535cf509756594ea30e16b8afa5f71f61298b4242b0c7ff5aa685ce4482f6e6029a00161e44b0ccdbc3904253cf22c9293e6696ed9016a6b49f2c2ec061a86aed97e502820101081f078d07f8e2e5e566186c89ab891562f303c335601bd30acd50e4a03af65c760896eaf79ec4139f4889d5df99c3ff9bd47c5f95caf8b29341a1a42d375b8e44cc9a23d28f3e7258e03b503dd309da68da940cd747e6ec59c7fb1c41114dcdd4d04734037bc8b645407ef50dc724b6efb2ce086c478d001137f6a5113e889074e8aed4e510989761e596978ceff6b3d3fe8997a0adcff8e201c500a01ab5ba8c9770f867ef0ca643009ffaa7cd8cd5dad954c502245d7b7d7c862dbfc5a80ed6210e4bf54bbda8b47ceb9e4f3b582625187987dd3bfe8352665cdcaf5c7b593c6853a64f521d2ea623e4010a357ea786edc79a32946ac1f46f934bc4985da06f028201010d783f2e727336392f1f93272cca34854c0a2afffe94fdf19cbab693c81d17c0f24d3bec537b7be9c0ca6d57450c11cac258332e4d3d0fa82a6d1a2af223dbbb9fa90cd60bc977ead9a5c377ed7123d7b3238b56587780081f29caf322a99e40f982bc6189ce68c959b1106fff19c9aa3ec0a9fbbcfd461de51cb6d3e9b664558124fb88359043162cc144a023c2ff1ef9fdca01f1db3dfad8c4e0aa914f84b42f4bfa9fd4be67c5fe864166d62dfb779aa106f7d99866384f13ed8c6dc34ce9a950f9778d009fa1b8936a67403211d4bc8f99da77f0f82cad1e3e4f594ab7cd377fed95e720dc1acadd0d75d415b0d5bf1257c0c6ee78eb09973cef9773d3ca32 +Msg = 61 +Sig = 3b06ecdd187c947f9007f0c4bb77b1ea60898bbe426505fc9200e09e2ae7fafd8d563c92b57755a6e62dbd7232ebc59158c267bd965ce39e24bb795f819e92a6a5a1de2a1f164353583908b74878e8042e488041d3c9122e8006452544e1bfd279295ede2cbb02334e9dd818cac7b6561d4123898bddd29e9c59843bec5771827e95541bbb82e9e1e9bc9c5d4da43d756f35ebbba0b31d41ca446b3d1be046e062be0a2f585c9ef7764faa71d178daeb153f35ccc9cda28ca40453ea09e3eb7a0f77cff09fe074903a07856ef24a158786d417593c6e9d6d024da4fd7d9bd5eb6262810093e5bf9d250a84fa431f6a36ec713b7b0c8f7df2a551687129a9f1eb0a034d350c30c715d515099f2ae7094a754220f7403b04641b8a1d1e4c5a0fbb0082ead3620ebc21baa06daa561440f43d53baf6ac8ee413935ba1dc2af63bb34abc87e669ced4bab9bb40e4cb7c4d8c136a70a175e55e022d66ac18b43355faaf55ac73eab3f59019e522c4967c492f11a9e80305fe37bc643e2ef61c583d60d9c2afbd1dca9e40d2e66e077c3b2cb4a574f6b9c73fa6ed6aefc03c0e39632529cacab6c1fa6dbd645a6bc05a5b8e91f90264f404bde99fb538bee7ba15624e3790bc088c2a0a27d5dad111802a167d181ce930bfa2f1f8b90e5643f55bea1e0edd57b0997a5a84b7e36d5b107913a2b503edc2093998ca2fbc2f2a085d341cbf +Result = Fail-Invalid-Key + +# Invalid key, halved +Digest = SHA256 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201000997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8 +Msg = 5af283b1b76ab2a695d794c23b35ca7371fc779e92ebf589e304c7f923d8cf976304c19818fcd89d6f07c8d8e08bf371068bdf28ae6ee83b2e02328af8c0e2f96e528e16f852f1fc5455e4772e288a68f159ca6bdcf902b858a1f94789b3163823e2d0717ff56689eec7d0e54d93f520d96e1eb04515abc70ae90578ff38d31b +Sig = 6b8be97d9e518a2ede746ff4a7d91a84a1fc665b52f154a927650db6e7348c69f8c8881f7bcf9b1a6d3366eed30c3aed4e93c203c43f5528a45de791895747ade9c5fa5eee81427edee02082147aa311712a6ad5fb1732e93b3d6cd23ffd46a0b3caf62a8b69957cc68ae39f9993c1a779599cdda949bdaababb77f248fcfeaa44059be5459fb9b899278e929528ee130facd53372ecbc42f3e8de2998425860406440f248d817432de687112e504d734028e6c5620fa282ca07647006cf0a2ff83e19a916554cc61810c2e855305db4e5cf893a6a96767365794556ff033359084d7e38a8456e68e21155b76151314a29875feee09557161cbc654541e89e42 +Result = Fail-Invalid-Key + +# Invalid key, last integer value is malformed. This is designed to test the +# error handling, particularly that we properly free the `BIGNUM`s that we +# created prior to encountering that last integer. +Digest = SHA256 +Key = 308204a40201000282010100cea80475324c1dc8347827818da58bac069d3419c614a6ea1ac6a3b510dcd72cc516954905e9fef908d45e13006adf27d467a7d83c111d1a5df15ef293771aefb920032a5bb989f8e4f5e1b05093d3f130f984c07a772a3683f4dc6fb28a96815b32123ccdd13954f19d5b8b24a103e771a34c328755c65ed64e1924ffd04d30b2142cc262f6e0048fef6dbc652f21479ea1c4b1d66d28f4d46ef7185e390cbfa2e02380582f3188bb94ebbf05d31487a09aff01fcbb4cd4bfd1f0a833b38c11813c84360bb53c7d4481031c40bad8713bb6b835cb08098ed15ba31ee4ba728a8c8e10f7294e1b4163b7aee57277bfd881a6f9d43e02c6925aa3a043fb7fb78d0203260445028201010997634c477c1a039d44c810b2aaa3c7862b0b88d3708272e1e15f66fc9389709f8a11f3ea6a5af7effa2d01c189c50f0d5bcbe3fa272e56cfc4a4e1d388a9dcd65df8628902556c8b6bb6a641709b5a35dd2622c73d4640bfa1359d0e76e1f219f8e33eb9bd0b59ec198eb2fccaae0346bd8b401e12e3c67cb629569c185a2e0f35a2f741644c1cca5ebb139d77a89a2953fc5e30048c0e619f07c8d21d1e56b8af07193d0fdf3f49cd49f2ef3138b5138862f1470bd2d16e34a2b9e7777a6c8c8d4cb94b4e8b5d616cd5393753e7b0f31cc7da559ba8e98d888914e334773baf498ad88d9631eb5fe32e53a4145bf0ba548bf2b0a50c63f67b14e398a34b0d02818100f364e16ef12017ec95b192308c01e087cee619ab50a5d537cc01841dc92b30bcef0d9f2c6bbd5dc10bdf5b9f6c354a4f9f210520caa72b4f5c36b8d33f10324c55956141891e45b84b49f59ea5bfac6ffa38900aca5099afcd02f6a8257c41ce5bb2e4153832b5c22f91eb389fa2035c3cf9b3374531c483cb30ceb007259b1d02818100d95c0995fabdfcbccfe63e0f3262f806869ab571e1793e97234cbb9bd4b6872a7695389955cf6ce7245345a5df8021f7d9519563afbc2667f5311fad093de2c02cd069109b630d68e3bf767f8a788a6add7ab199f2d8f6a40b7c1910d9dab52ac80d0d333aacab321a9309dc884ddd4db637a0c1115ae3c08efa683f99eb733102818100d4f7ef9f9be947ba9d1b3bce59e5608839a1e464553e1b6d113d0f636758bbb473a89f9949836ead40b6f314eee3ac2244d7b6f379e83f30e17783ad68d5086897889c051c26e1558a4a220bfc242995860644b5d7a3ef513ac612b9c6c0a2021bb6b9cde7dbd21fe5858746c79563e9bab7d06b43aab43a0a5cafab4519a6610281803db2386f174f2ea3ef4b6bd1601749ce2d6afa8be35f051178621f16a23ad36eba03c073136389241969e5b87edb0fcbcf1a0bd6e1aee97bae1f2d97aabe19b17dbe7d9492cdb68a0897f572350e846c669660dc978c5068da598524fca8a136358d3e5f8f6ad5cf78d9089c93f473189162ce0f8c4902a19902b633b3e6926d02818100ddc971183dcf3450c43e06ba2af32379eedeb2d678513fb706b75a006098154041f4b09e6be385d4b25d80ec241c899e4a986a17b0a121daab91a1e4fc5a1802a7074df3fb3f7661f0e1c97799e36d21de937cc4209585db30a56af0a228e001036ed792625e5368ce101574a2e9767f07338949f0afdf358cecd18c6d6f3f55 +Msg = 5af283b1b76ab2a695d794c23b35ca7371fc779e92ebf589e304c7f923d8cf976304c19818fcd89d6f07c8d8e08bf371068bdf28ae6ee83b2e02328af8c0e2f96e528e16f852f1fc5455e4772e288a68f159ca6bdcf902b858a1f94789b3163823e2d0717ff56689eec7d0e54d93f520d96e1eb04515abc70ae90578ff38d31b +Sig = 6b8be97d9e518a2ede746ff4a7d91a84a1fc665b52f154a927650db6e7348c69f8c8881f7bcf9b1a6d3366eed30c3aed4e93c203c43f5528a45de791895747ade9c5fa5eee81427edee02082147aa311712a6ad5fb1732e93b3d6cd23ffd46a0b3caf62a8b69957cc68ae39f9993c1a779599cdda949bdaababb77f248fcfeaa44059be5459fb9b899278e929528ee130facd53372ecbc42f3e8de2998425860406440f248d817432de687112e504d734028e6c5620fa282ca07647006cf0a2ff83e19a916554cc61810c2e855305db4e5cf893a6a96767365794556ff033359084d7e38a8456e68e21155b76151314a29875feee09557161cbc654541e89e42 +Result = Fail-Invalid-Key + +# Invalid key, e is too small (e=65535) +Digest = SHA512 +Key = 308204a40201000282010100d3e94ceebdf732da0040d4ac1b3cc89b81718abfbb5661a516c4395d4d01689db558fe2dd875a36dabafa81b532bcd3edfc126e60d3acadf8505a2e45570c7ed19649de601042e10953d40639614437f7e380919c994bace28e249f9f2e28d3fd170faa7245e6836c97cabddeea0bc0c94c16d64348175043c0cf443d4886c39a9faf025e9f1b385a2188f206b726ad34f3a5707804ce448b42b04a25db31888a8e9903f0f842949109e35c0719dbcc2b5d541ffc7f7270fbf912f149ca47e90a4232ca40a87f0a24c37a299f04979553a0700dcb2618f3ca448dcfb2313dc028ee78b151ca7dc46d997cefe5b62b5a6f82535059cf8550d08ecab04956f12df020300ffff028201002e2e83cc82fe83f97a0b9ae4648bf19ba51f2d85da0f3b32bf5ade832dad3e43acaae37f4d2d601ce4891a419eafa8581e072bcb4a295c237616a288390edf00908b37dc3990ecc2d5e8c112f4e5bb63621b0446bceec06c71e1525464bcb7d8e2336b331be616c8174cdc9927fbfb37111a003ad89416de551c7fcfcffed2e4365ce61ea90836505735c36a087d5675c608806e361cbd02b9b5f9d93087fffef5c17d20475ab164323c1b6069dfc3116b99990ee41f6a7230ecf381e838bfc3265857963f92e09e82a658ad054c4593fbb8832d4e6bd42da4d9a6ef365534469c7c8f14843f3f69bb1ab5dd12b4f2150c3c16fdc9201366c910ad19809110cf02818100eed2c519d13351a714b5473fef7921c6f334a099178fe48404a567bb59c125281e05746e188b8eec0fa2f12cda11f386c11ab460de0b37131d1e3bb8ee6ac5bd8de72939d2d0660ba9871e1c96072c8759b36c938308d4876cc9f7df707939b1c1a3a642929a1d0ea277c4e4b217140164cc34d3360072aa55bb1782759e9a5b02818100e327067c378bd8fe8cb78f119d4a4e2abb42caf13aa0693cbb824ff2b0a71230b94e72f3a9ac2beba21707d7a004a6094a95ac891929609c8cbf1eb7fad204a3811da06fc64747451d1500b20a388b4246c63c309b19acbade72218edb41df4525a27d5381140918ac68153e2d3924f604cac5e0202922e6cf8d6bea7491e8cd02818100ea2f2a601918515b0c9345aea0fa01eedd0d29bf076fa9dc7582be17dd7c57718bd1991a45bfae267b039b4c3c28f259c6d77c52b04ce38feb8f3ed2f6eb3d4cb9dfb2b65bc3a0b37430e7e1a3a63079f098f6422330ddc6a09d336115e4944d3753352c6078ea92f2362f110709d431aa0e3ea2918845f7f8046a73e0d523e30281805a268208642fc360e107662ddac32d02c06e056a7bb7cf1baa6224ceac8c2a9342cdf60acb9c20d6579d4d790f7987c26dbd0e4343209ff92110a66898525baba3547e557a5d1a14f6dca1b04a20b4dd1565979ebddc915a86cc803feb21f296aac344521d2729b7557b7011aa123cce63bb40fcf0a063fb4fd026e92606621302818100cc847aa3a8851bdb581b1fc9926abe2760d1fa47b5993e6ff83a4abf3827252e0bcca53331eaef1eedd83bad6cf10327ac573043bb87d822a91c3c5d35989c82a00bac71f2b879d2f0c7efa582d2b3498bc190386f90f02e4a6b5166010439fd7070aca790b597ead9188e295789ac2bfcfb6ca039f235dcd0d0a7c197bc84a2 +Msg = 0123 +Sig = b62bdd9c87f8f409178a5155768b536c1341f52a28c881494baa80b39f4a25a841f664eec49a464adf3cf5c920975cb83de4b06f0c7740685f0174627fcb4d0511bc6a25d473952c33fa5763a8e9bdd00bcdc1e4e5881d061193d77335d7e245987c9333455c9e1a2f0ff45242cff45cbd9ab8859d1c81dda62680ce388caba410be15bb40c0a66ea3a4ef07a3fb1f0f66c656c754dd3b15e694902ea79d1d0496a83408bdc2e94b7bdfef5883fe748ed50027ce0f35380dac8245e042ccdad69cd98440a2f77085a6d02d097f6ef650400b7eb469b9e6ee5284c7c7aee8e6365731114490dffadce428b2d16dd086ae0ef350f8e9dffe22d63203d891394322 +Result = Fail-Invalid-Key + +# TODO: +# Invalid key, p & q are too close +# Digest = SHA256 +# Key = 308209270201000282020100b748949450eb0d3c045a8d34aad4e9c142c4eefca9486ca360f6351ecac183f232604aa81a32d0a5d62fc28d3fd2e1fc2e3e097dc2f53a7929574c46397eb666670d1be2e590f3962982aaf674f7cf345f2d3fc6aee1819b8140e9f97095a75320d5bc3c4e22f4451d4624cb42e9185281383d239b2db3128871a35f5bf02e804206becae433073d987fbb52870a1942c7e449aee9c757ac35c0f34d6ffbd535497dc08fc74fbf314fc5a9c2e98eb6db5ecd231b16196fc346346fd345347d6d3a84c5e98c57e5b39e8baf3573d7bc99f35e725011410ebe60616c1286dbe0bbbecc2b6ac73a2e2e16cdb79e49455d94f5796f353e02548bb5a500829271345ba941471ea5fa87fd36d7aeec29b159f1c0c7e7bdbd5599f4d3ebdcc7e46e37323ab81682d661a8a9cf88b2a1a09ea5fdb0e18745a3c63f51b31ad466617821796c53ba05e34b4e9a1bebb43641cc2fc63e295b6f5d8dd8bbc24568e504789a03bb6a7468c76036ede826f2c96aadb2c24e720906c215e48abdf0f10570aaf09778ef80758c2de408bec35937884d96f50757b29ff4f82824daccd2d4fc174929eaa66fbf8f3a669455db24f54bedfa74f388e01e5d5f6d51c49376ac529634e3be3fe134660eb453e9f0466446768ca1c4a7d854c9ed37b91b81343bde5b136ecd31cfe53c2d7c3b0e072736ea6d24903b228d814ed99e9b78796e148d0456f502030100010282020010d03bb10f6b409f8cd6b1b56f2670fb25a0e33b925bee7b5e5db7a9c777d11edab832a111263035c65c4340a9e6328cebc10d25d8489ec096a6477cf9b142124ac9cd11177620a259d47ed2751076959b558f502ea2c93cf6b279c4442bb659cddd4d934aa7b238d4e2a6656f11eb05468d5e2e7201d3379404b8b3fabf21c4ea49ac1ef8a825b5e4d372dfb33b9ded9e60b6d1b0e874867bb7e399eaf7f32b1c3ec8f767954d38bcd4a92a143adf536872f1117f097e532f9187e09dac9f04f22553f284c95b6d0ad24d945db820b90eb64f4e4106f2cf4c1023d5df41347084a43e27617758dd29825da1cb9eed62c8d206fd9f5e9f5ae1a2ed550d120d7763657bde6ccc337a623709e0dacdf98d26ed746593dea884ab3058f1328ef36e47ef6c104512afaaa1a2c00671b3178f9e4dd10a7e162ddcbbe009e39ac19e286742b5cd85c355a321b1075b61d7ca84fae50170817f9f512f453c58db40217013b24d1b8f569d6fbfc054f135e8fd5accc37d541676247c1723f26b15d7c98f97f2f56cd29b08f4b8e8d8c8d17167dac3dabe875cddf50ad8bd86330753d98613a36455eb5aeffc97ee216c533ce3fa4a5b0867ebda1a07746984881aed86415ee89f0617b43a9926d94eba3a6fcda514aba0ab0762def92f6ca30897e9a4941766c2096e794a935ddf30df230811ea59a355b4456f06e6544b5ac346a39d810282010100d89c9114d87810961378876909759f9ec38cc294f150180567faf3fa709810ed2f1f52a0f28977e6d8d58436605f7a741341f0413ddc0e6505e7e7d2afdb62ca901d525c75a1a9e377795243212c0121db3fadc53f0a5ae4205c32b31223d828c2ea85b46141ce004bcad0bce06288394077a72efcac5a4aea204b39796c22ce2c7ceaa53a15ad61804e642f389b70c6bdce3438bde7daa7ae1db4849adabdbfc54309b0185492003f7abe5ef4ccc3d892dcbc4d6e5861a2463fa9968e58dfe04d9fba774f40df95be126b56bba14c57fd0dce0be7a5e8c33591e15f46d921866eb65781d9d0b75f9ab7a3501735c8e7a2a4325262e23e1264d2f66e3a1929d90282010100d89c9114d87810961378876909759f9ec38cc294f150180567faf3fa709810ed2f1f52a0f28977e6d8d58436605f7a741341f0413ddc0e6505e7e7d2afdb62ca901d525c75a1a9e377795243212c0121db3fadc53f0a5ae4205c32b31223d828c2ea85b46141ce004bcad0bce06288394077a72efcac5a4aea204b39796c22ce2c7ceaa53a15ad61804e642f389b70c6bdce3438bde7daa7ae1db4849adabdbfc54309b0185492003f7abe5ef4ccc3d892dcbc4d6e5861a2463fa9968e58dfe04d9fba774f40df95be126b56bba14c57fd0dce0be7a5e8c33591e15f46d921866eb65781d9d0b75f9ab7a3501735c8e7a2a4325262e23e1264d2f66e3a19287d0282010071abf816d0627191d035f8198ef54306b5e83054a92e36ecdf5c3a9cba6992b8657a328a73bce0472c932006c91c51ce882c9a40228e509f8331e7de109b3884c48c1ea496b677c8fef193d1d69e9919834d2f8bcb414be15b7a06c1224bdd2bc6ddfbbc652d7b457c80ba79e3e6d145fa26d07d3febd2966db6f4c2fc8d5ad687522670fec25172513ad22855b47cc24ee8df4ec799dc8d123a5479222a985902d3e3499dfb03834dccc40a60bcf429bb284b48f7173a654628327ee7c48bf7d1c478be13c11f941d62dd216ee57e82ce316867a6f0d1ed5f3766e5f0f0113fd2e9ad925f13c0a75331fb6a14440d62415f9968d2ab97975f81b600b24c724102820100611e91ce0ee0864f439b9edaf16ad38e938ee10f76c2ba8272048aaf971c173ac10e023637887b41fda67e09035ccbc28f7fd900e7836ad0d0bd11abdd3d38262a477b4e094fdaa42a453324f6128ccf69463bdb5c50804018623e391bc106820022b6a0119b3789da71acf58285ab1e4051659c239e033de38b672ef5ca0e30f2b16f63758f92954cb9d92172f7feb09d197f4091a50adc73accdeb46a31cc086e96fc68ca21e740e0232a8d0899ea5d3f3345a63472d3f5ccfde71aa911e8fab3e1a94b3ec1a53414d70e30a6d5f9573d864b1e1c2f981ccdb03797c828e0d80463125ff4b1d6cb829ee0752e0c29b58c8d5e72a7ed5e5d95edd2ebecdd8e1028201000f8fa951ae728e6ed3ca21449a6d3b4876820526a76797cb6c405f811263333d2d50f67cd983fd9443124806d9506c1b7715a81074fee39bdae8333a89b0dd2a8186852e5dc8abd639dec8da27e678b99ac8fd090543afb995737f3a793611bc4ebcfc5d2469824b0e45be13742a638886d692a189530099fac01cf1bcf3e80483322b56e77bac1673e2523b4ce4e9f0da24259733e540fecdfac7154bdc384c4e2bcdeff5fa4e2aaf3a1aeade1789a7d595be144674b1ae3b7bbef1119518e9200f2724866ddb18bbffda1a17c72c791462d4afef89b63d1aa72b68af054cb50f4f4e60de5c3c40fbaa9e1f8032356bdbde2fc0c4e5961d4681e9faad5e7f54 +# Msg = 68656c6c6f20776f726c64 +# Sig = 5d449a4826dbac7da405ffa5eaa8b140aa0980d2a458ddb23f03702ce2c2b88c75155ade558d5e8a1a386fb49d9b93f202bf17f3e76a5be7640fec12f046453ec8000ee15e65efff8866610c51cac55ae8a5585c2f637db4be528f5eb5d71a5439c2ed908704a75453134673273e1420b90da80ca6705e4244b876947af66a64c409b41e6137243c1da35b3341b6f2f02083af264bb233832341aa0bd38f83eef03b720d36982142171e18c3736641f059c632effbe65f233ffa8ed45fd964f4e674c3b337d9ad7088547b2153d5d0b93a4c6531c3572669c30e90b79ee8481a197022ed9cbc54722b9bd02d74c3f236840656aef762e38638b82a97ee45d4952cd09b86d33cd5dcb57fd03d4a53b7676278f29809e60cd980788fa8ee504b82eb476e3dc9f231e0a62984c4cf2149d2f5dc382882cc826ac9d0e9f9af1c0f47010f2b8a75520fd95f60ae538d47361b52b83e1befdb0545d45ca4bc33bcd0a14334f9f1377ed6e419aab4cc77f73378ff8cb44f5f6a17ed3a0e0b079034471c8a107e96fb5d2074e570678e9cfd5eeeed09302cc4259cbd279dcc352acd958045dea17ed027e827ddf9ddc862fbbb2fe8aeb440248138eecd8ba2d3114e96e6242692aafe282133d3557c3d71768008e41bd841b44d7c5a8af2821f4c40de975bffb2a3e6e0c0ad1ec597c9d3c44c9f837a60768f689de7103ce64ac3dc525f +# Result = Fail-Invalid-Key diff --git a/vendor/ring/tests/rsa_pkcs1_verify_tests.txt b/vendor/ring/tests/rsa_pkcs1_verify_tests.txt new file mode 100644 index 00000000..4f334295 --- /dev/null +++ b/vendor/ring/tests/rsa_pkcs1_verify_tests.txt @@ -0,0 +1,1338 @@ +# Variants of NIST tests that test edge cases. + +# e = 2**32 + 1 (0x100000001). See https://www.imperialviolet.org/2012/03/16/rsae.html +Digest = SHA256 +Key = 3082010c0282010100a1a78a0092878cb43263b218d75fc924e915ae80f1d32cd9db690c1c7cf6942ecdb54c0357e0a55f959d53562d1f89abbd59bc24a03557b068449d0753b927a5a68921281fb92e61050fe838136ddd910ba13cd71b31045823b53d0a96e19ec97bd8dffb9923743060f84d6aabbdb44eb0470b34dc3223a91b9e79f68cb86ba616aa5e62ead9627eccc110a72e2b03879c360bfcad3ab0e7f3184e7ac154ee2803b2c7b57824c2fe54f600668087cba6778fdda5bd8dc1a60af7295a8c793520b0f02e35d16ef58e563b7929cb7045f9528e7a335888e5a2ad4a9f7539209924299f7640443bace8c643cf73c249fd43d616f111450baa403a9a8ce118af5e6902050100000001 +Msg = "" +Sig = 13b1addbef54e405580c0df21429fa030f3edfc7f7bd446907626d1e73e69dee8f5a2f1614f548e58b684da033dd8fbb7e9616408e1d1318698d10d536c622237febf2fc73d64718e791192d5c38326217cbfaa319e5fc1ce8cc4685d7d2f0b77c22fb11a0ce00467fbb918d5d0bf6926dd6b3bceefb15040f153abe5e3eb9c6ec80fe1064db69b332bf70cbeb2a483afcb09237420e1413941e2f71650cc393800efba739fecff9bf3a75b9ac88de483af0a0ee08d1a09f1de91f342017c53745fbe658a5980926ce56c14df45088d92e0bba61f16b8847d74f3fc707c60ba82af29face1c5269a54d4185e8efce9e566c3ca0c202ac1a4cc180d5320bf599a +Result = P + +# e = 2**33 - 1 (0x1ffffffff), the largest 33-bit number. +Digest = SHA256 +Key = 3082010c0282010100c2bf9ba415d7c612933ef42f350e621e12dc92cf9f1ab8c4697208e22643d96c0be81a3cb1e841a26b73d354756d3c00e83244b367ee63f171497bf1859841afd35edde7aafe6ceeae279b6762a726c67aaf19506590803c53a22f661496532c90d3969cd44f020290ca91ce9296120bc88d40d7be403e5e3ccc39ba177bfa5fa2f7828bec5e708cdaa1fc8cae1b26f63aa30178bb86ac25e1ee1877c17f37b1428d7125ffb6296098d4c72f4ff2460fd52cf8aa6988eb7447a638a9044969519c60b8ab25b56503708e450fb5af32248932730c261d0d76623c2dc4f75bbb77fe6c3576b2dbec3020d2c8433bef402e2172a243420163319a930997ef5a47e7020501ffffffff +Msg = "" +Sig = 0a5ce0746f099812045cb79a4975cd1a5b60dabc7031cbb36395afb632c600db13aaba61b601219dba672d2dd100b06f270eccb41de0a22542222c05c9fc86f6ece18e25b287ce69fbd5544967a5eb2aa633b9f940fddfb3eb18d5de0966e74be2992db44ad80f96e86ac9c8d06e3d0d0fd7b02f61b706cb59f334a721b5bec83dd941dfd029208d1db617adee196af6f3f23bd46344c97be6697f92ba6bf72d5c404dfffb0d47093cace28b99a6733d442137eb7a4c50c9c4beec38520978743679618a4b8def94ba246bd31c96bc84837caedb2b282886fdb0a0173e2e15c850641de49149fcc2d965891f641f21d401fabda0a7e96f6e5565da4d979871fa +Result = P + +# e = 2**34 - 1 (0x200000001), the smallest odd 34-bit number. +Digest = SHA256 +Key = 3082010c0282010100f29f6bb9c42e2025d15701b7278a301c92162928265ff63d08ec7c41467303159ca453cebc5709b524a76009203b7871464178497d6739d291e7367a1943f0d38b643fbb78e204c2afb99709b579f033e85e181dc6fc6c5ba20a65c5dee9ad7c44085f34fe13192f1be071fbeeabc743ef16b0e19bde382549090f200503c670a63c895b4a3a8f3fe6411b574d89d3b7b0e57f9922df070620421a1e55acc5557aa35671503ac0d21c64af1840fe4c0ffc9e21b3774f3583ac32c5481e3df8a85b79cadc5bac78bc0a37a08b0d51b147d31a6108af6c42a4738b3657b8fdfaa0a7f90f674771987c19d1be67f45ff14aff1adbaef2b9f78d546559cdc0b8d8c902050200000001 +Msg = "" +Sig = 28b85afb66dcff685336be3b7103283d3ea74d38928092dca582188816d59afa25d26d1cc9b8c67de01dd9465475601c9ab7b980f129652a76556b6245b178e4ac52660153ebfc2939ac08ca5ce5d8dae7c1b50f98d83c3419ff2b000bd2e0d2f6dc87539f42248bd4de80169e7015d9cd2184887211414d48a10f4eeaac7968ed1d5d3000bcc73fbf4eacb1e2a6db87c6879e4382e01f46a170cfa60b682af0af7701a40b3eb08e927b8a461dfabad72bb7fdc7769cd188c4ed103eb8ef49737e46e1c48157758f0461eb1ec113ce81b0eeff54743178b8a1b95b38ed7f24a550fcf8d042fe5c0ee0b9aa7d5bfb14c5e2cb5e81772e854122b1cdfdbec12f67 +Result = F + +# e = 3, the smallest accepted exponent. This is also the control case for the +# following test cases. +Digest = SHA256 +Key = 308201080282010100be5b5613b7872a0cb3e0fc3908d0eca9fc9c37887d6262d315c7425f300c56413c18e033f2295671bb843525898d32177edd206543d4fb68ed726ce7c3ed26dbb7ab39caeda2fa51f1f168b10ae7627d25cfa51660e7d599c9f2e1683d184388caf55c20c1a9f691ec325f7a5f89bc3e9c8a5a8620abb73070226ffd24fca570c6c002f4deffa80e1620b131efb195094120ab9a518f0dc974ad4ef63e32ea5b1f95030d04e243a986bff7be7bf3e0c8d2f03b868844beb5fd040db42967d2c2ad873867d9fd6d26f129b7ca3afc4eeee783127dd5a2f3828ec4f123de16871927963e2b5626114fe9894e1ce6365c80d7e2ec7b50ee0d04952f055b3831e1fb020103 +Msg = "" +Sig = 21f1d78d3d3d02eaa30886356f494fd4ce060e12cf4a808c3a4a8011164f948a1b15414f6fe0bafb174468e632b7b843059dcaa2d915028fc79e3252b79060801373a16b6d26e5bc399d66201357f284ac822544176f5d7bbcc402be5335d221deeb2c44ba1cc908e10340056b521a0f965b373cc042dd2b3e3bef68213cd526c78f0a5237a7c1aa74989d86420d0a0cb639362e2f49182e1c4c603e7dc1b494efbc581caebb03fb633720b643e72d524c8403e500f5a7be5caadf5ed0a9653a805df917d0dafc4e589e26373a84970ce6905359ae981bd3d56699132be04dd3ce02bdaa399737ef79c2f3352f4f4ab8ac1f0954111dfdd7fee5655aa408774e +Result = P + +# The public key was tampered with so that e = 1. Signatures are trivially +# forged, since Sig = Pad(Digest(Msg)). +Digest = SHA256 +Key = 308201080282010100be5b5613b7872a0cb3e0fc3908d0eca9fc9c37887d6262d315c7425f300c56413c18e033f2295671bb843525898d32177edd206543d4fb68ed726ce7c3ed26dbb7ab39caeda2fa51f1f168b10ae7627d25cfa51660e7d599c9f2e1683d184388caf55c20c1a9f691ec325f7a5f89bc3e9c8a5a8620abb73070226ffd24fca570c6c002f4deffa80e1620b131efb195094120ab9a518f0dc974ad4ef63e32ea5b1f95030d04e243a986bff7be7bf3e0c8d2f03b868844beb5fd040db42967d2c2ad873867d9fd6d26f129b7ca3afc4eeee783127dd5a2f3828ec4f123de16871927963e2b5626114fe9894e1ce6365c80d7e2ec7b50ee0d04952f055b3831e1fb020101 +Msg = "" +Sig = 0001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff003031300d060960864801650304020105000420e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +Result = F + +# Length Mismatch: The signature was tampered with by removing the last byte. +Digest = SHA256 +Key = 308201080282010100be5b5613b7872a0cb3e0fc3908d0eca9fc9c37887d6262d315c7425f300c56413c18e033f2295671bb843525898d32177edd206543d4fb68ed726ce7c3ed26dbb7ab39caeda2fa51f1f168b10ae7627d25cfa51660e7d599c9f2e1683d184388caf55c20c1a9f691ec325f7a5f89bc3e9c8a5a8620abb73070226ffd24fca570c6c002f4deffa80e1620b131efb195094120ab9a518f0dc974ad4ef63e32ea5b1f95030d04e243a986bff7be7bf3e0c8d2f03b868844beb5fd040db42967d2c2ad873867d9fd6d26f129b7ca3afc4eeee783127dd5a2f3828ec4f123de16871927963e2b5626114fe9894e1ce6365c80d7e2ec7b50ee0d04952f055b3831e1fb020103 +Msg = "" +Sig = 21f1d78d3d3d02eaa30886356f494fd4ce060e12cf4a808c3a4a8011164f948a1b15414f6fe0bafb174468e632b7b843059dcaa2d915028fc79e3252b79060801373a16b6d26e5bc399d66201357f284ac822544176f5d7bbcc402be5335d221deeb2c44ba1cc908e10340056b521a0f965b373cc042dd2b3e3bef68213cd526c78f0a5237a7c1aa74989d86420d0a0cb639362e2f49182e1c4c603e7dc1b494efbc581caebb03fb633720b643e72d524c8403e500f5a7be5caadf5ed0a9653a805df917d0dafc4e589e26373a84970ce6905359ae981bd3d56699132be04dd3ce02bdaa399737ef79c2f3352f4f4ab8ac1f0954111dfdd7fee5655aa40877 +Result = F + +# Length Mismatch: The signature was tampered with by removing the first byte. +Digest = SHA256 +Key = 308201080282010100be5b5613b7872a0cb3e0fc3908d0eca9fc9c37887d6262d315c7425f300c56413c18e033f2295671bb843525898d32177edd206543d4fb68ed726ce7c3ed26dbb7ab39caeda2fa51f1f168b10ae7627d25cfa51660e7d599c9f2e1683d184388caf55c20c1a9f691ec325f7a5f89bc3e9c8a5a8620abb73070226ffd24fca570c6c002f4deffa80e1620b131efb195094120ab9a518f0dc974ad4ef63e32ea5b1f95030d04e243a986bff7be7bf3e0c8d2f03b868844beb5fd040db42967d2c2ad873867d9fd6d26f129b7ca3afc4eeee783127dd5a2f3828ec4f123de16871927963e2b5626114fe9894e1ce6365c80d7e2ec7b50ee0d04952f055b3831e1fb020103 +Msg = "" +Sig = f1d78d3d3d02eaa30886356f494fd4ce060e12cf4a808c3a4a8011164f948a1b15414f6fe0bafb174468e632b7b843059dcaa2d915028fc79e3252b79060801373a16b6d26e5bc399d66201357f284ac822544176f5d7bbcc402be5335d221deeb2c44ba1cc908e10340056b521a0f965b373cc042dd2b3e3bef68213cd526c78f0a5237a7c1aa74989d86420d0a0cb639362e2f49182e1c4c603e7dc1b494efbc581caebb03fb633720b643e72d524c8403e500f5a7be5caadf5ed0a9653a805df917d0dafc4e589e26373a84970ce6905359ae981bd3d56699132be04dd3ce02bdaa399737ef79c2f3352f4f4ab8ac1f0954111dfdd7fee5655aa408774e +Result = F + +# Length Mismatch: The signature was tampered with by appending a zero byte. +Digest = SHA256 +Key = 308201080282010100be5b5613b7872a0cb3e0fc3908d0eca9fc9c37887d6262d315c7425f300c56413c18e033f2295671bb843525898d32177edd206543d4fb68ed726ce7c3ed26dbb7ab39caeda2fa51f1f168b10ae7627d25cfa51660e7d599c9f2e1683d184388caf55c20c1a9f691ec325f7a5f89bc3e9c8a5a8620abb73070226ffd24fca570c6c002f4deffa80e1620b131efb195094120ab9a518f0dc974ad4ef63e32ea5b1f95030d04e243a986bff7be7bf3e0c8d2f03b868844beb5fd040db42967d2c2ad873867d9fd6d26f129b7ca3afc4eeee783127dd5a2f3828ec4f123de16871927963e2b5626114fe9894e1ce6365c80d7e2ec7b50ee0d04952f055b3831e1fb020103 +Msg = "" +Sig = 21f1d78d3d3d02eaa30886356f494fd4ce060e12cf4a808c3a4a8011164f948a1b15414f6fe0bafb174468e632b7b843059dcaa2d915028fc79e3252b79060801373a16b6d26e5bc399d66201357f284ac822544176f5d7bbcc402be5335d221deeb2c44ba1cc908e10340056b521a0f965b373cc042dd2b3e3bef68213cd526c78f0a5237a7c1aa74989d86420d0a0cb639362e2f49182e1c4c603e7dc1b494efbc581caebb03fb633720b643e72d524c8403e500f5a7be5caadf5ed0a9653a805df917d0dafc4e589e26373a84970ce6905359ae981bd3d56699132be04dd3ce02bdaa399737ef79c2f3352f4f4ab8ac1f0954111dfdd7fee5655aa408774e00 +Result = F + +# Length Mismatch: The signature was tampered with by prepending a zero byte. +Digest = SHA256 +Key = 308201080282010100be5b5613b7872a0cb3e0fc3908d0eca9fc9c37887d6262d315c7425f300c56413c18e033f2295671bb843525898d32177edd206543d4fb68ed726ce7c3ed26dbb7ab39caeda2fa51f1f168b10ae7627d25cfa51660e7d599c9f2e1683d184388caf55c20c1a9f691ec325f7a5f89bc3e9c8a5a8620abb73070226ffd24fca570c6c002f4deffa80e1620b131efb195094120ab9a518f0dc974ad4ef63e32ea5b1f95030d04e243a986bff7be7bf3e0c8d2f03b868844beb5fd040db42967d2c2ad873867d9fd6d26f129b7ca3afc4eeee783127dd5a2f3828ec4f123de16871927963e2b5626114fe9894e1ce6365c80d7e2ec7b50ee0d04952f055b3831e1fb020103 +Msg = "" +Sig = 0021f1d78d3d3d02eaa30886356f494fd4ce060e12cf4a808c3a4a8011164f948a1b15414f6fe0bafb174468e632b7b843059dcaa2d915028fc79e3252b79060801373a16b6d26e5bc399d66201357f284ac822544176f5d7bbcc402be5335d221deeb2c44ba1cc908e10340056b521a0f965b373cc042dd2b3e3bef68213cd526c78f0a5237a7c1aa74989d86420d0a0cb639362e2f49182e1c4c603e7dc1b494efbc581caebb03fb633720b643e72d524c8403e500f5a7be5caadf5ed0a9653a805df917d0dafc4e589e26373a84970ce6905359ae981bd3d56699132be04dd3ce02bdaa399737ef79c2f3352f4f4ab8ac1f0954111dfdd7fee5655aa408774e +Result = F + +# Length Mismatch: The signature was tampered with by making it completely +# empty. +Digest = SHA256 +Key = 308201080282010100be5b5613b7872a0cb3e0fc3908d0eca9fc9c37887d6262d315c7425f300c56413c18e033f2295671bb843525898d32177edd206543d4fb68ed726ce7c3ed26dbb7ab39caeda2fa51f1f168b10ae7627d25cfa51660e7d599c9f2e1683d184388caf55c20c1a9f691ec325f7a5f89bc3e9c8a5a8620abb73070226ffd24fca570c6c002f4deffa80e1620b131efb195094120ab9a518f0dc974ad4ef63e32ea5b1f95030d04e243a986bff7be7bf3e0c8d2f03b868844beb5fd040db42967d2c2ad873867d9fd6d26f129b7ca3afc4eeee783127dd5a2f3828ec4f123de16871927963e2b5626114fe9894e1ce6365c80d7e2ec7b50ee0d04952f055b3831e1fb020103 +Msg = "" +Sig = "" +Result = F + +# The signature is a valid SHA-384 signature and the validation is for SHA-384. +Digest = SHA384 +Key = 308201080282010100be5b5613b7872a0cb3e0fc3908d0eca9fc9c37887d6262d315c7425f300c56413c18e033f2295671bb843525898d32177edd206543d4fb68ed726ce7c3ed26dbb7ab39caeda2fa51f1f168b10ae7627d25cfa51660e7d599c9f2e1683d184388caf55c20c1a9f691ec325f7a5f89bc3e9c8a5a8620abb73070226ffd24fca570c6c002f4deffa80e1620b131efb195094120ab9a518f0dc974ad4ef63e32ea5b1f95030d04e243a986bff7be7bf3e0c8d2f03b868844beb5fd040db42967d2c2ad873867d9fd6d26f129b7ca3afc4eeee783127dd5a2f3828ec4f123de16871927963e2b5626114fe9894e1ce6365c80d7e2ec7b50ee0d04952f055b3831e1fb020103 +Msg = "" +Sig = 2c8b7d5fc1db73df3bf806af732324c19c8374d486848aaf3f3e8f81a89f425987684d4af644d953046345b7ec65022c8658dc144aca59de421de359c54aac4f625f85a2f2092ca3cfff99fb179d5057415cea4b868fa047045071a75b9de26e9a09c69b2d545fa5f8a8d63486a17feab184f8a227a7628d5a3812b66da388fc20cd96df69a6a59da154c0726828588c7df9abdc64090e40a62c8396ceb84067f637680625732e9dd3b277a366977bb1bddeea2917bcdf259f3ace8162222c52d86e394364e28cc1c57d2feb5e9d9fa4a51b88555b9c40a1efbb6846bf6e9d56ce2a43d32ad767e732c81ec598a1f0217c03c7533099b50dc8d0bfbdabe9625c +Result = P + +# The signature is a valid SHA-384 signature but the validation is for SHA-256. +Digest = SHA256 +Key = 308201080282010100be5b5613b7872a0cb3e0fc3908d0eca9fc9c37887d6262d315c7425f300c56413c18e033f2295671bb843525898d32177edd206543d4fb68ed726ce7c3ed26dbb7ab39caeda2fa51f1f168b10ae7627d25cfa51660e7d599c9f2e1683d184388caf55c20c1a9f691ec325f7a5f89bc3e9c8a5a8620abb73070226ffd24fca570c6c002f4deffa80e1620b131efb195094120ab9a518f0dc974ad4ef63e32ea5b1f95030d04e243a986bff7be7bf3e0c8d2f03b868844beb5fd040db42967d2c2ad873867d9fd6d26f129b7ca3afc4eeee783127dd5a2f3828ec4f123de16871927963e2b5626114fe9894e1ce6365c80d7e2ec7b50ee0d04952f055b3831e1fb020103 +Msg = "" +Sig = 2c8b7d5fc1db73df3bf806af732324c19c8374d486848aaf3f3e8f81a89f425987684d4af644d953046345b7ec65022c8658dc144aca59de421de359c54aac4f625f85a2f2092ca3cfff99fb179d5057415cea4b868fa047045071a75b9de26e9a09c69b2d545fa5f8a8d63486a17feab184f8a227a7628d5a3812b66da388fc20cd96df69a6a59da154c0726828588c7df9abdc64090e40a62c8396ceb84067f637680625732e9dd3b277a366977bb1bddeea2917bcdf259f3ace8162222c52d86e394364e28cc1c57d2feb5e9d9fa4a51b88555b9c40a1efbb6846bf6e9d56ce2a43d32ad767e732c81ec598a1f0217c03c7533099b50dc8d0bfbdabe9625c +Result = F + +# The signature is a valid SHA-256 signature but the validation is for SHA-384. +Digest = SHA384 +Key = 308201080282010100be5b5613b7872a0cb3e0fc3908d0eca9fc9c37887d6262d315c7425f300c56413c18e033f2295671bb843525898d32177edd206543d4fb68ed726ce7c3ed26dbb7ab39caeda2fa51f1f168b10ae7627d25cfa51660e7d599c9f2e1683d184388caf55c20c1a9f691ec325f7a5f89bc3e9c8a5a8620abb73070226ffd24fca570c6c002f4deffa80e1620b131efb195094120ab9a518f0dc974ad4ef63e32ea5b1f95030d04e243a986bff7be7bf3e0c8d2f03b868844beb5fd040db42967d2c2ad873867d9fd6d26f129b7ca3afc4eeee783127dd5a2f3828ec4f123de16871927963e2b5626114fe9894e1ce6365c80d7e2ec7b50ee0d04952f055b3831e1fb020103 +Msg = "" +Sig = 21f1d78d3d3d02eaa30886356f494fd4ce060e12cf4a808c3a4a8011164f948a1b15414f6fe0bafb174468e632b7b843059dcaa2d915028fc79e3252b79060801373a16b6d26e5bc399d66201357f284ac822544176f5d7bbcc402be5335d221deeb2c44ba1cc908e10340056b521a0f965b373cc042dd2b3e3bef68213cd526c78f0a5237a7c1aa74989d86420d0a0cb639362e2f49182e1c4c603e7dc1b494efbc581caebb03fb633720b643e72d524c8403e500f5a7be5caadf5ed0a9653a805df917d0dafc4e589e26373a84970ce6905359ae981bd3d56699132be04dd3ce02bdaa399737ef79c2f3352f4f4ab8ac1f0954111dfdd7fee5655aa408774e +Result = F + +# The modulus is 2040 bits. +Digest = SHA256 +Key = 308201070282010000e9bcb0e5fe68c4ebd4dd299f1434ff2378bd1e5261eda8d7466d41e1485a92118888306dc03a7a448f459556fcc2375cf8ca4f26ad2b4203952b6b60f4f23d834e30f19650753a02e44606f39807d9c1cff27114e76cac6d4ee02e3c68aea27bdf5037ce912212725af0294cf4df5173a61349ddd40f1c21bdd4a876d1b52541e1a784d11e1ca5e1615ba0c8f978534e9de112c379f530a31014425e907c9a881449c90c764f12f9831dda121ea43c7c034f5829ce4fd1445749ee461f72b763b2ab4d0cf838d48140499564985132a69dc537259905cb69dcdc658c593620c26e822ee7414c9adb1132341201689a30efa1ed733a6b5b149c81a87e02ae0b020103 +Msg = "" +Sig = 951cea8d14c4fb4ae98746e4c404105f63e880692584155e7f6aa053e9e897ab07ebabf408860c0c725d454b0d206eec7668382dfb2d005f31182b1836ba1f449eb5dcfe026bc500fbe41250070e8f148bb8e4011a5730d1e4f26b228e484fa8c1211234a2d599c55c678cbed083a5dbe7857caad189cb7dd4ec3db5f16f2bef13aa2c517c3ad13511615c6171ea783c742ed87a9d451a73b968de26c2928313ebab7cabfa824988452cbc606c3968c8c7b41de733d9b6f62425512a64f89cd235681abc8498797980a646c51c3ae5dd18fbefbc813637fc6d633bb799d7dbb3c725b2f16b4b68bcdb5a4a859667f5bacb365a358d9266dd2158dbc1bed112 +Result = P + +# There are a ton of 2048- and 3072- bit tests below. + +# The modulus is 4096 bits. +Digest = SHA256 +Key = 308202080282020100d3f6c3ad0a0d40b3ff8048991b6a9ef9f3255294f0d894a1c8917f36d9490ced4471f75a407d34659f319cf9f7813e0201e2a469eaf9ffbe77c7ccb0347c4e34b130efc740ebf83d6689b8aee89292f94f189c717d0644cde45c147358b7575c5d650de0b5f4d28a1745da3cef185017c88ddd83235c5576ef5280a042782cceb12aab22f12ae1378f46d46310028f45a157846694537ab604eb6edbda4fb5762354357005baa8d0867942dc363d3016cab6eb2c7eb5bf5e184e8f0e2e82eed23982647b6d04237f22dfbfe1d444b7220325acb6cd96d9192a233246c2fd650f9bf193c3143ae0cd7f333118b255fe79fe333afdf84fca8485f7a5b0f69ca2ed3c95af14c6f9ec5e37625a091c9dbdfb46ddf625536d43d10fc97f4e0cc1c828665075fa9e40fb7178eedcec9134b51c6d6d504b1de02a773206ab2d467040001ceb8e18e4ec61d03de82b5cc2a317bacad1229efe228e2ab751616740ca2951b9620536cac4eb36db4c9b24c2e05c6511ee09c7ff9729c7fa27ae10b26b156f15c9fef683f67107f5fefac7fec4084bd8cc535d9c7a14733715ac37bbb5318604905e6dcc48b6c78be0fcadf6466407f0cc6666d46fa2163799c7fdd8518a4e4643dc83c1cf7de96d905233da230ddab73279d526f3ab36d2f63f17001f8f0f8c53ac8767f9ca4c9c10c9a0286f3c9b5d3fe4c314d542a1f54b6be1ff05efbf020103 +Msg = "" +Sig = 1dd98725ea75fd3e262b8b6846be45ced065073ae5c1c98a532467359c948bac4d3ed0876bb46fa450e47f964e5b34f806f8340e7987b83cac22c76eae7ed03f98ee47c18b09e0cdbbda07deb2190c8085871b18ca52ebfa06edd5ce83a4973cbc803879f697313d279f02f36289e382163c6de83327f38452c1018d926ef1b2dd0d3a1bd01ceb06fc7e043eacec0db3786883d5d3a99b6502c24264e96e07731d2efa0b4de4e798553e70523555e5e905148d57a74becc1ca0800927e464cf950376dec0190bfb0224cff204ac0c9f62eb3c1c3ce78563a38cd3d0a20b4cbfdbe48b82c5ef27adb262ba65883bc0b6506f4a0d987f559e73d67133fc009d9062e23866db9928e9b1163681d9012bc6c072002bea9f2512f20fa61d3091a979803036e6deac801772ecec18f153d61d6f93cf01e592cdcbe435bddbc436d462991370de5df2b21a37106f56b60c4ba40965d3b1ecee4d9bfab548b38a1beba4ebfe60af8921d69bedc6e2da548e22e4d7b0dcf1d5c7f83bd4e96835fbb2ed73d6ed411ca042221e3b29a90a46579f76618ad324deff1bc873a1f1e9c727ce4b73498e255ebc8975d5ee3bfb4aa4883a60a33900451e7d51b60d21e68ab4f7e80296627bb405745ac14ae583e1658f3bfaea06385b1527fa4293e0b62beac3439bc8f85a87ead36fe702ab412f78c7e26b0e20ac1dfa1074453f660f7409000fd +Result = P + +# The modulus is 8192 bits. +Digest = SHA256 +Key = 308204080282040100cd39f39b27a2731e7b2fefa1379c55e2a86e3a6b6d623a37fcbc535bc9e6453752a06349a85e4133e5daa6eb322590f7caed50309194ab78c290248a041434abf1fd5cdba1ae2922a5616fcf63a8bd1a806e89dc19237f360752210c1f3e082aa1463745bc6072e6a6051d9168fab0b54ac11d3fac3888306f06d44f31306c7b916b50cab75c7ac9cc33610ba87a61d8bf08e471174b517da710d4d5afb4cbb2aee8104b2a6bc78c5c5d3101447eadee776cc96ad874ed4a2e1e941ff73daeeb6eaf9c7014741d68e7fc6d96038b63f07dc4b0b4eade9b3d6f4edd7e8f1b64606a90d9ee4e221c0fb35dd8cd688a5c60cb4dafd22648a0310b2d18a6a2cbcc30f6444e29d07f179847d2ee802399e4a6d98f688a39fdc667d3ba01cd9681c51172b0fdfe6234a329d8d66dfd7709c1eaaecfd747de069f8bb750f0659020e1530cf10197fe95a0783d6c8651235e65868b0c868a1f10073da972050c0e2db911290e15e1a55da024679d3ea266ba3fdd16338827cd2dfe76e3c6c00f33dff27e6edbae1d2e19f54e0c9528a27a75e1247e25b15fc38465e5d6c42f83d9b2f5ab69090d62bf99cc829ec05ca7a1fe3fd9f24f3c08c4b4d531c30c1693510ddf1ce8f296dc60d3076f971c838bca793a75579d8368ef4427215a52d02b28d760a4ae0801f20383ee241f20170081d432124b80bf98629b40b25cf99a328fba652fe35bf4cf63a3946522c78ae874cb77c95989eccdc91ef39a9ccc0d86897a04d4105617c4ccd7816002d89f8ba94a936e82f8d15e615beb4993c67d5c02d606a8395e7319163996d042dcb086a7171bd2df268e2bf229f16a6392cba67b10deb571d69c73acbeb3d5310e24685e639c1b4a02f32b661c630199d62e53d319f4d64b50f90eb5d582ac200a2989e4eec5deb1c9d936300a1d59682eb483cf43ca0131664f647cf0768f12cfb0ba0dd92631ae89ed702bb485581fa3588bc344de1dd05201ddac68019750ee3ff58cf8ac40d45735f4894911e465823e8f0bc4bd3d0b0ce8db310657648b9dd327295b5a23f45e154be6222249fb07d31e6c251848c87544dbc22d5fa5d3475c1c16bf4407819d27415e9cc62e7057ae3fed23eacfad77bfb87b7dc48e4bc82c18654d09bd969a688a840871c005074507c93149d2aa46133e8c66ed10320fe4cd6e4d4e01331068e5d011ad9a4c94ea91287ba39a0647f70820bfca29693457a7446217d9f225df9ce6ee54c9674cba0e5a5c09ce27b11ff9e8b1f68c517712c23beb8debccc6695229c3415f58a8ab158e280bd4b54a4bbf279336bf1871b3e635910081311aaf713f21f9eef5f62b9ecddc49efb4e0cd686bfd65420e6f11022cd86d237e7414bf077a9f8f7ab210389cd455c6ae580f1c77fdcd1dafaa1a1e1a3726b6ce13f50e7c2617a152d10ec9cb03fe0d020103 +Msg = "" +Sig = 3bf15ae5d08a7eaf53c7e6c0f1a789a197ac9aaea21b6c2a14ea9a6175596c92432b224e9219d68f7d58649c476277d8daf5d2fdc61c80ba6eddc513ea0f91363eb9506621c8b32381ae6d0eda72984b2f450fb1aeb144e6c798d0af5117dd35fc4a27163d258a5b227b9e72b83c4fd72886f616b50d59c0886f6aa291b65b4401dfccb855d697bb7fe9ed7e29cda28df50736d3c2b66cd3a039d2f534b580a00395746962bf8d1af5fd4940975aa6ef17cd11b496ef11c3df9aab7434cf4802aae07976e685941b47df1a7a24d097cb19301cd5362d6d742d0f94f6dce97e54cde999c4dd1e201c867c9fcc46d30295178430c2ed8d0f3699b5cc5a9de3044b7b63430bfce3fd7c333f291a1f31e41c71735df949861d43136356239ac51156cc5d11a92dc3bd2921cd05f785557a24a0148abb9678a93f8082d8624e9289a3294921855a1afae7fc41084b3f03829afa6e4abc9952aa9d07d7495427d169fc47d0739c31d71657d44a40ad17184d3510a4db56b4ab5d277f9814b9568686c0ce6b18ae4d69b0176fb3f5aa6798396c6fd390df61ecbccfbf72fc3fcf34dc737a6a6e22884f677b1645a68f65ccf36c90a23f350947b514f89e1521c329b08d109d032e13f7680a68489c97a7ba6cfe66d37bd3eda7d97adf9d49d1430e07d34279207c98d1a589b7aeda8c45b5bed17a75efed9ca22043d9daba1a024f0816568652baf51ac1c8338036614ac834b0f69c6539eb40396d53f5d209f434ecfc3d56bf8295d247cbdb559725b7eb61fe5a93f6b701a6b86c4a2474dcc1014c0c82041b68c817f12d9ed410f871e227abb3d25b9977c3129f70b4663bec7329930eaff732433e6f5df3506d0f714d6119facac3fee635f1e5641db853307f76723eb459f5969376433a7b3cb688175e5caa5e0472bd3ba059992e314d1cbcc318577222a587b4607de7211a26ef6ed73676eba26bc8f12badca267aaa43b1f582e7679d9bd05c1a67675822fb53e6699dcc0a713508f7d7d9f9a99172b48dbe431f54e6fa15e1fece6b33989de0b425b83a7866570e557ebe958b0e384146f592f62e1f708ee010d4020bd580f88e469723d4a2c55ca4bcd278c3971b9d0beeaf93d674b6bd9ef367e3c5c11f24f4356dfef571c7b1aa65162c2f7d5ba0af81e5394672f24aeb9c66d5e9a53c7d4b1d3c526215932a648d131c37cf0fcb03458f05ea8b81f5eec5ff372717e7fd64766798319eee066f5632e8bd9ee89084fa85015dd4ce1853e56a7146f64b6b3a08c9cd7209eaec59a34612b62a1350332631dcfce94db871d735fb5e66c3de124aac76aadc63eacd2b84d1aaa3e8bee57cd2c046f73bb115b4f8aa6b570a37e22d0dbd07552d9fa44ae0c30d884941e9567ef0a33cad9c5068a98799cc711e87a05752dfa6ab5b14d2c25519472f2f31f9d2 +Result = P + +# The modulus is 8193 bits, one bit larger than the maximum. +Digest = SHA256 +Key = 308204080282040101dd858d9b063d894acec656a9bb8b1920bcea0c963191c393acfd4f6765479331d50ac9490125572bbbfa1d551f9b1b8bfea0bb40ff09e581b35bde4e58a54f0e954a6ff639cbcee04c4498be5442098beef6cd9bafea003d6a582bb648a69a723f182251fd1165fddaea382e36a6868e300ec423d0198b404288cc21dc7dc659ba9e7c210f54684dbbb3fa07844761a3afa6de256596ad5b950924b5c50be17a3a9d54df53307202afbc80395b8e0683da5309b9eebd26344e54a328da2a259894626824b811b568086011983d457ba60628df4ab40d0dcdfd903dfabdb55439b10efe38526de229a8ba4c016c84263d857b9ed6c3c3922263e8a37faf23adf9836735e16958f9d6ac73f0129a4d159be1ab7bf991d72fec0ddffbf78d9161048d3c63781bc2e1f7e75f417b2e157f4954460ae9e8132fbaaedd399085bd4bb73f194ecde81539de336e8a04c51c13fc8433e26f12b58572d7a6bba4106dbaad2b1c253e5746d3006296383c72e4c4e51e0bac019f5b9e8f7018da482cf93485ccf6ac233f1d90041a0f5706424852fa57e0c9e5bf15efc504bf954682ee0e1f939b075cc798afe985c7e37f8d63096391f4b8c178cfbf4936ba3a2d115b0dcc73a49c98078a6d068c6716919fc8e81c9536cc0d028be1bd7b1e23be2745561b38d74904867bf2975d6bc1e976f91073916deaccb3bba69626b9547233fb767100a4cfb306c4cfcba1887b6e843cda76d2ae53773220893cdaaa1ab8efaa71f2fd2a6fb69ad96d6ffd4ab45ab38698b87f6b491c58e0f9cc57b9ec1ce669f074f0735f26e8457534fb90ab4a56cef04c79b2245898e58fc1f8f441a69b0e29ec236d1b886b6b086b231af034e5096da42b2fba959cadc246b3a6d7837f8e7bd50d1f6d4ad39431099de63ac3d94206ee296841319e7e2caa2adfe4143425cecc55958e705149265026e58ebddac2b524187ed422963c9c5a5af4633058cb39972991bf1195e641af30109cdee55b45506cc5716039da39e24621054f3105071a037680210e1ee59c8f8c207d73cd8ae1c86f9a393998a74829f980ecca27a1bdc160a733ad3b98703f1d63f07b41df9315f68e014127214e6cdc53cdedac3f77ccf7a58c7735918e49c682716d6b865ade2f7648d21c1dc5a18d24e19c271f3f743a6f37ca904068db40e6b1dead262b29a1d492bd3fd9c50c90d3c5d51072eac1273ee37d91a99e89bfd035f097fe25f7ac1c319a19271d5c46e4f78367c4cf2b017a18716c6e8794d0d04bf580e6bf853552f3501b60da05969c71ed41dfc530531e653629002ee39d3ce489b7bf634ca1a3c9e896f7a17114f4f237c18b555d73fd7ef8553dc94cfa3eb33b77ca25762ea8a8ab446dd8592f6a5ca82e263fdbf0ab143deff6e4187de56412b0f97d4f12fca9b4954fecddfa2e4a79457d63020103 +Msg = "" +Sig = dfc9e4e1c3106605f5b847463dc1809b58494d981d6c067aa9085c9147db821a50bff823e7ffbe20fbc731687101cb3e4abf421f59eec7b5baf8e1a20d31bf114ff0cf02cd0e4bb284c6c74caaaf95f97b0398db80c4f5e70de423bc643eef4a0a96303a6fc0c8d26b2ace4b5dd353f57eea9efe5b444f9cb48a256a9f41201030e1ee226d9b5d66b292de430a1c12be9f30f58d44fc005baab7e5f325711ad8e8a37d79388e0638851fd49b2cf7d977f197f789d2c3dd131a5a0e820c113683f91df9800ed0c68bf1c9f022037805f2e4a1abf02c4154e1420f5dd774a3e824b5bff8d028e21e4fa413c9e35f7293f5aaa4b900dc272c3b407891b536d8a2918128c2eee1f225b145e7a514256792b9d1886013e8c15f2d70258829760794412d8eb32bc749984779b5aec57c22278f89c30d57d97937a1c0536b39e66d00cdc11f2fac0095bad249d2c40504b68f611902c34ff653a782d25509007764b30bc051d4f51e80f806b0a19df377ba5a9d6a85642a5fb87f393b1a1d57f847dbc4cdc2342227d64641c615ed919f2cf05084feaac3f500472e4112d169a0025f4db7ebaf8cd26783518de44d1fb4d15bf128ab63198069a229bd615340b568cd4271bd0999b38d502ee3b2eeca8beb362a330532e8f05f3149101e448f1a670cd350f56217bba47d1c58694b4399dde01bd519b38f4bd5e98599b6a8281346fc23579c151b5f6c193d42156dd4cd819da340c7ed1f74661a75a1272925e317b4999f5c284d872b71942a7055b8fcd59ade776294b7c26d95608b4a94c6142e57e71dda5476f7bbe7751736052a679f176434ce1ec9803a0fb6305162712ddb5e6a25dfd392cba964e4b526bb5ed45933d37649c131cbd40437663008ed3dd0a3130bb2d621d78e01223a493035ffed6d0c9c47ff71fad5e4bda62bab70dc222a5fed7a3e08a708f25958eadf0484d9d5541c35b526ce93dc6abeb6ccc86ab3b342295c112c84072a63074ad87b4fdaa7964e59bb5ba8d0634e13a8714f750e84eb965d46f9709204abf9dcb9a0a39dc82a4e48fe1256069dcac7ace75d0a4c42426d2d0fdc2e82901f4f93b64d923c88a735870bd9e0f59bde0425dd9ea595193e8cfa4ccb331b4c82edb2ec727049a79d25d00e3367c7b9f306cca0208a119b759feb24bf7af5f6c226249d0fb4511f74e1626a50de4251e254b0228fb6aa98abc5320171f9ea9d597ae15046fd4a5325dcdbd49fc54093cf2e02186ca54e97457cfeef373d5c9da7d9e839445429db160af5bd43fde2f3053e0efbda241c750f3d7bb4d12df685a6d060396306040518741d8e0d492a3f2df43abf4988c60b6e6722588bfe2853834c7424c033635727a17d8a7cd4ea007d765b29863d58903f41b517e9d9e6085b422193ff90a9af687ce24d8a393e803106c39b7f6cd964d8 +Result = F + +# 2048-bit modulus, p < q +Digest = SHA256 +Key = 3082010a0282010100a0afb85b74105f49f6836183d67b92602b53ad0d7a65f32a21d8959b8722aae1ec000cb9f22de09b794d7446e04be02a782615a659ceddb5f3344b6e566970718124dc8b8bf23c5aaa7447b7f11905f828e91f1a844d535624b987704ecca430d04cfee0deef46e7e2da65a3f2a1b3aae6cdf96795d24073a07312867aeb414e0bd6c23d80bd9ce6266fd90dac7666b019c141e3516ed51ced0d62a0b1db189860406ec5b7bbbeb49031979dba118ef6ad131365d6bd6994e695ab084592a5d2470341e4a9da14167a1387ec3d513687b7d849d64da896d4038f72f8a8a516c6402225a53eb813c1eb0e675af8880433545a90404946d7d8db2716fdd63898650203010001 +Msg = 5af283b1b76ab2a695d794c23b35ca7371fc779e92ebf589e304c7f923d8cf976304c19818fcd89d6f07c8d8e08bf371068bdf28ae6ee83b2e02328af8c0e2f96e528e16f852f1fc5455e4772e288a68f159ca6bdcf902b858a1f94789b3163823e2d0717ff56689eec7d0e54d93f520d96e1eb04515abc70ae90578ff38d31b +Sig = 912209edbd684deaca5855ea6cc89ba16753caca12df2e18f56228f0c2ccaa3bb5e45aa2107dbe2cb5b5c3e1af159c858aa9f665df4433e5b8df78452da436310beded396ce5ab4fc3882ed72ccb1a2a9226ea4177deb2d341ae88aba789106cee2b25ad4049c47a46d05c94ebd39416674adfef4a212cf139a5283b8ec51d54c21461e302cdcbd8ce9f7659b7d88195912d706cfe30f68ca8419054e22f0be31f86e49135b86e3021dd43baec6a0cd24042d81f71f8a1e23079e6ab1f8cd7b3fec2882e93f6e724d3dec5a2e7883c56b8d9773036f116325bc6cb934968a780b66251e4583fde426e63951b8dc380ae29751ba5cfba759c4f192bc373775d44 +Result = P + +# 4096-bit modulus, p < q +Digest = SHA512 +Key = 3082020a0282020100cefe6a02d3b9919783aacc1e555888b6aecc45c76bf28f0efc673a4576d44db983f5669fa28bf31966d1124d01c0f1e9976796a4f7855115f74b59f65aa17d3e56b3a265ef91463a562fd2e770077cf7a0cfc4d0903c812622a141076046bd2b334e2072e21b9cd9d949cbaa010d73fc7c1f5337431a18fc93930509c713ee4e773818134912d7cfbaab4b57038d645cca237b2fc367f76b26200894e174d3c4265f58765ca0e81e2525db528afabc5d149e60ae2aae8e313138b27c4bc901f9612728ab7a32564d3d93aff6ba0033c9e8db84cbc1a2f0de32a275318836c07f07c51cf5ed43c5c727a4e2541a78c91e6a7609edf4c1c0cdfc59fd63621223ff297f63096f876cfa93449994597ef27e47371ae5c3ad575b6fda18fcbc314eda54411aaec457d52e1a44da6ea0d6f43ace949f6a6e9d5a917edca6cb38b217e9bef4279b8b98dcd603ca299dc3173fdb3978fa6926e8a0dacd58162e9337b9c5af7f7260b2c4f4cde6bc7a71f1a56974b72c721c57eb925860562b744d32a65cd2577e70e8e00cfc528d54186bfd6c3fb84a081ee7f5c8a8ff388296f021ca13b99e5ca6e773adfb6a6b7206a23078cdcfb57db1f1cd7d21e283bbd8a7c1e8d2eef46008ad2fd440d6959ed18bb84831d872d79e1ac4260caf481faa9bba227e15a1b61bff8249c9b60d44056118969242b004059f85c0125b1fbc47cfd4772f0203010001 +Msg = 5af283b1b76ab2a695d794c23b35ca7371fc779e92ebf589e304c7f923d8cf976304c19818fcd89d6f07c8d8e08bf371068bdf28ae6ee83b2e02328af8c0e2f96e528e16f852f1fc5455e4772e288a68f159ca6bdcf902b858a1f94789b3163823e2d0717ff56689eec7d0e54d93f520d96e1eb04515abc70ae90578ff38d31b +Sig = 98a95ccad59ccd39b1da810b53c9c0ce7b4b0acd65c0ffb788c88c856ea3ecabbe7015d4bf36b7c3de7c4c7c18063428afc567b94d4396048cea1a3b56544928e28b15360f9f5be7e700eb3b4d64b47061df1c0e096015bdf1329ef7a8a507ef56fa9330df4b1f3f097968839a60d1a6f1bb5b247032dc60b2889085d1dea210cff53c444b3f614d051cb41d8f171df025712bf57497f57e3c3e424685a8858f431a90d689dc1f7b41f868f0e1a6ef612710f365ff2bf90f2db89d61d9ab9fffac16581daec6ae1ab9f49c8dfd33a55f7b1e431fdd413649070e0a915f25363d3ddc2091fbfbf0fbeafe49753038dfce6973458af66a3d318eb7caa44d3fea95c46f40976398299db270e04dd20e77360013fcca04874307590429b13301be5f47a9681af6a47e5eaa53dc7ea05cadeef4ac96bc2c8e14ec9d0966e035898525c92fe7f0bc3a8996246f42da5dc0fb14cd856fe5bc51c031b3d83870ae89e9cdb1cbb2605b3f8bf4a978435c80a0e99a1a60b4e1a45d77458ec39fbf0a65b9b5891738ddc44edede2614d96e62303f0138051ab899e67bdce065ac5ec8edc6b591220b2522f8f4920bd9b7d4084b30d9a79cc658de0260b6e76acd7efe0d5c38e7856a7dc22bfbe287fdf88ca393f6c575cc1db8f0d8e47b0456e5a392f27e9f2b0352da61e58d1c1ba23b32de9f82ed35cd862644d63ea6a3f09b3642347ce6 +Result = P + +# RSA PKCS#1 1.5 Test Vectors for FIPS 186-4 from SigVer15_186-3.rsp in +# http://csrc.nist.gov/groups/STM/cavp/documents/dss/186-3rsatestvectors.zip +# accessible from +# http://csrc.nist.gov/groups/STM/cavp/digital-signatures.html#test-vectors +# with SHA-384 digest d63a32378adebdd6450ce72175b76baf06e137d1d0091c18af157ee772baec79df341125789e4f23529aad7c13270b5a +# filtered and reformatted using ./src/rsa/convert_nist_rsa_test_vectors.py. +# +# Digest = SHAAlg. +# Key is (n, e) encoded in an ASN.1 (DER) sequence. +# Sig = S. + +Digest = SHA1 +Key = 30818a02818100dd07f43534adefb5407cc163aacc7abe9f93cb749643eaec22a3ef16e77813d77df20e84a755088872fde21d3d3192f9a78d726ef3d0daa9d6bc19daf6822eb834fbf837ed03d0f84a7fc7709be382e880e77ba3ce3d91ca1cbf567fc2e62169843489188a128ec853079e7942e6590508ea2faab1cf87b860b21b9546442455020400fe3fa1 +Msg = 98245960c6d4da684d9da2e78cf59d2a63ca53ac39740c9f44e837c9042e0c911115715a17251a0f1fd5f5ff10fec5ec75900c5e80842f3d4f11d59f6f2390df9f09bfefd66db3ef878a10fe23997650e08c6180b9ff4e28b56c20b06d9ec163c8680cc80a96eb2f0d24bc8acdaefa7e2b2819baeacfb188fe5fdfa10687e946 +Sig = 1ea751e8c5329879a9003f529eba19514c153ee0bdd8caac9c94fbbf95a41ebdb9ad54a976bc1218a94b53e69cf3362b0472a8781b8df4af3e9aa584099c71f9622a6fcc3fd3935b033f68c1c970676eb6d2184056f1b524acec26c51df6dbe9bf3b4e1fc144b8edf563a03f28ad78d457485b4a57ed0ce81e409245f5ce1014 +Result = F + +Digest = SHA1 +Key = 30818a02818100dd07f43534adefb5407cc163aacc7abe9f93cb749643eaec22a3ef16e77813d77df20e84a755088872fde21d3d3192f9a78d726ef3d0daa9d6bc19daf6822eb834fbf837ed03d0f84a7fc7709be382e880e77ba3ce3d91ca1cbf567fc2e62169843489188a128ec853079e7942e6590508ea2faab1cf87b860b21b9546442455020400fe3fa1 +Msg = d7eabc57c2803382d1deb56a146767ac80c89183382e01990bb5aa1d3d2391168ad6eaf768fb7d738d014f92b14d7f0595306eb7441622a49800edee0134492d82320707fceba902af2e0c95fe634a85727bde6f022709a09248752db9a71941c7e75cb107b87dd6414d329b830f8fd521932ad3fbc97d36fe778b03eee6c7f7 +Sig = 9dac630d264a6a53cb81a6901ac0baabfb24d73b60ad3a4ed3a0eb98a2118a573c3cfe294178fbee63da7c27c5826fa5e6d1682eb254da53a961ba4473672f57a27aec22d4b205f79819ab4cb18b0f3842684bbdeca71cfcbc30d1866d22c9f1fa9dbe9e1a2f5f6f68fd4fff6909fd2c1a9904204a3cfa30da4c87de35a769a9 +Result = F + +Digest = SHA1 +Key = 30818a02818100dd07f43534adefb5407cc163aacc7abe9f93cb749643eaec22a3ef16e77813d77df20e84a755088872fde21d3d3192f9a78d726ef3d0daa9d6bc19daf6822eb834fbf837ed03d0f84a7fc7709be382e880e77ba3ce3d91ca1cbf567fc2e62169843489188a128ec853079e7942e6590508ea2faab1cf87b860b21b9546442455020400fe3fa1 +Msg = 73ef115a1dec6d91e1aa51c5e11708ead45b2419fb0313d9565ff39e1928a78f5a662b8c0c91247030f7bc934a5dac9412e99a556d40a6469beb40e7b2ff3c884bfd28537bf7dd8d05f45419cd96bb3e90fac8aad3e04eb6190c0eeb59eccfc5af7ab1b85264be71c66ac25e53085c70b5565620152c32b0388905b3f73689cf +Sig = 25493b7d70cc07e9269a248632c2c89c8514fe8298ed84319ec664f01db980e24bbb59eea5867316792fec36cbe9ee9d3c69346b992377f35c08d19de0d6dd37482074cf5d3c5cd2b54d09a3ed296187f4ee5b30926a7aa794c88a2c0f9d09f721436e5a9bd4fef62e20e43095faee7f5f1e6ce87705c27aa5cdb08d50bd2cf0 +Result = P + +Digest = SHA1 +Key = 30818a02818100dd07f43534adefb5407cc163aacc7abe9f93cb749643eaec22a3ef16e77813d77df20e84a755088872fde21d3d3192f9a78d726ef3d0daa9d6bc19daf6822eb834fbf837ed03d0f84a7fc7709be382e880e77ba3ce3d91ca1cbf567fc2e62169843489188a128ec853079e7942e6590508ea2faab1cf87b860b21b9546442455020400fe3fa1 +Msg = de4dc041a283c488187ef9b75e701ab0a25d6ab6e5cf9cc702ccf02cec05a04e37507acbda58cec933938a8b4b75a4425ce4b82590ebf3c30cb22f982dae5fdf11152ea85a95e32a2e45885a82dc4bbd9921247ac7a2b8b37ba97e157d6c20ae738424ffaaa0cb53137b394f8c0bd7c961fcf6de135cb53e589824cb62a7a963 +Sig = 1cbd45327f5bb1f7a86758ec9125d28cfbcc235fe18269442ea9bb9491241088c20b2652c00dfb08ed0f0002b7c6eabd5299174bcd42f96171cec53d9cee01fb52ebfee08089feaa4fc6e1da5dcf57d123da6a964f6d610e37af8a57ad31857eda5ebbbadafc6e02bf8f326fc4f853734b25cd56fed04ff647d50c3127fa35ed +Result = F + +Digest = SHA1 +Key = 30818a02818100dd07f43534adefb5407cc163aacc7abe9f93cb749643eaec22a3ef16e77813d77df20e84a755088872fde21d3d3192f9a78d726ef3d0daa9d6bc19daf6822eb834fbf837ed03d0f84a7fc7709be382e880e77ba3ce3d91ca1cbf567fc2e62169843489188a128ec853079e7942e6590508ea2faab1cf87b860b21b9546442455020400d20835 +Msg = c2721310ab955a702b78c23fe70032172922593c30ec9fc4cbc55bfb26f54605e36830c56caef1fe8847a3b82d1e0ee696536445943d2f8729b087b1537b88c2263503951d3a7408b2f0345e2c4ff0e2b9a05acdbc841e6a683918788e19c4d0b363f648663ecbd6d1fbdff98d9bc054bb91a39c50c956b5b0e876187fd6e278 +Sig = 4efb676a7f2214898257240803890a42c5b2e746928bcded262af27b68cf38d364ed7d5989ea93bfa8b5194d53708120864bd78367cb14dd76e2f983ee9190fca55468922cb3a7bfea38dffb704e81cb9bfba6a2b1b6c5af6814a812ac53befffa170a1e3f70e969078a9fe9bec58cc4c2d7891171949ce8c7cf20478b4ac1f0 +Result = F + +Digest = SHA1 +Key = 30818a02818100dd07f43534adefb5407cc163aacc7abe9f93cb749643eaec22a3ef16e77813d77df20e84a755088872fde21d3d3192f9a78d726ef3d0daa9d6bc19daf6822eb834fbf837ed03d0f84a7fc7709be382e880e77ba3ce3d91ca1cbf567fc2e62169843489188a128ec853079e7942e6590508ea2faab1cf87b860b21b9546442455020400fe3fa1 +Msg = 43226431830fd187e5fd0ff94bd3b4d1ab40074e12ac1d3ee96e42cf783f9ba3a8ee09220d564f14238e786fd85f736d4bfb01e2d4ebd1cd444ae82d6e314716e672c80308894a6e3ccf0d9e79f15fc108a1793a8b8ba43c3d8ba0987b1d45d384156b7c7d9008bcb82a982f3571c2f2699a38fe3f73dfb45d9930b8a8ebde03 +Sig = 34ba929fd60fa28dbe9f60c08d6b55cce37e888ac2adc9b714e5796a7a600e95449e70bac5814e3f6826df7b23512d17e343e62881c1a96970b254bf26503b0853ae509e39421c94ff844cb65683f84200acac3e759f191fdee7d65969b72873c77d1e13ffb13153940120ce5cbe2076675e844d6f7588a9ac129cbbcfaff3a3 +Result = F + +Digest = SHA256 +Key = 30818a028181008592b5850b9ba96e7faecbdd67e50ed5fb2018fda0bc6a09ab6345910fc445ac6bdb0e7a4c6b72c9441649c9e78109bbaa1d79f9fafb8794a1a06cb638bd8f3c3416d44c43cf862b8ac1d5006310b05a7760d341d07077ae775f1695061d3c7297dd3ab8fc5d03d09ed1602a1bb69891bb377fd0aad6cd90f8b207467db36279020400eef211 +Msg = 23d29062797ec367d664542872324b63a72305caed23d04b0834b594801095d7521078cae54c21f33f04e622793fbe3f70b19c45bee2fb8fe98dba53d9462b6c9060675c150ee491b1c849e75ef1806f7db60d6fc7399fa986efe5e00546a399458c051ff10c33c9947a257f0a91b97b35fa034df170e4224922de45eb5826e6 +Sig = 02d07177f91c0db0b74e34b532aa18673d27fdee370b7aa9094ef765c9a8278b7128f1bd24fd3992e6376f83bdea9e505be10de15163286a7c9d9873bdbcffe0535f9f8cb0dd99ba34e24ec462e4ad03618258b66894daeac9415545e030bd963f2beb8d089183ec7ff1be67e6f94e6871d42fb7d7c694682a9f4af599bfdf81 +Result = F + +Digest = SHA256 +Key = 30818a028181008592b5850b9ba96e7faecbdd67e50ed5fb2018fda0bc6a09ab6345910fc445ac6bdb0e7a4c6b72c9441649c9e78109bbaa1d79f9fafb8794a1a06cb638bd8f3c3416d44c43cf862b8ac1d5006310b05a7760d341d07077ae775f1695061d3c7297dd3ab8fc5d03d09ed1602a1bb69891bb377fd0aad6cd90f8b207467db36279020400eef211 +Msg = 1e422f898ff258a99bc53648541709b3a3bba5828d36d070b42bec6a2117d6e6403f0d762ce6179d2dc220e180b1e52156a9d0291eed64840787dc91c1f20fda841797a0547b32bb83b668a177276fc4aee64b21fefa391522cc4e7372dc5cd5f2b3152f8e1973aaa48757afc3df7041b35b5e91b5c317cc0be48a38bb3d837f +Sig = 2e37c8221597f7e2b1970c40a50db5fefde31b1dff1e9b9d6a70b023acb014971580eddf1d67f15d9fbbddfcdf49cda14ccb7516c33b787a3a3fd43d005d02de10f93ffc99585ae5dfaa766c0f1f5bfa62e50e76a059a4a1e814c1ee9836e01595731dce48f94aa1ae36d9c5165a3eb28013fac271e091f7018fe96ec26009c1 +Result = P + +Digest = SHA256 +Key = 30818a028181008592b5850b9ba96e7faecbdd67e50ed5fb2018fda0bc6a09ab6345910fc445ac6bdb0e7a4c6b72c9441649c9e78109bbaa1d79f9fafb8794a1a06cb638bd8f3c3416d44c43cf862b8ac1d5006310b05a7760d341d07077ae775f1695061d3c7297dd3ab8fc5d03d09ed1602a1bb69891bb377fd0aad6cd90f8b207467db36279020400eef211 +Msg = 084e3b56d68ea7c99068489e2c8080b9d3eb5ffea1e67eaea9c82af33935c5b960956ac0aec4d0ef3b0b71ecea50ebe9ef89a6c18f77b743279004cd703da91e01459b6516898b9d8ff30e1d3ca9fa6b5786135252cae734d410f6a1fe811627f248166c9645a27b9506665ca7f377e713c8eed97249d628b5314894696bd47f +Sig = 1b7dfda3e6da9e67ee9f207a9e03559fb5d7ec88f0310ac051e1e0612119214bcb11d1003bb5fbea088354c2a9c3318baa0264f67f0860f17528bfa63ee35f22908caf0e8e57c0ce63b334b747cc1a31ff90cdd550b27a34b05695a39d48e900a5e1ab4ce3f5030d903315a5dadbdbb0ffae04134a74cde2b99b8f8b5305759c +Result = F + +Digest = SHA256 +Key = 30818a028181008592b5850b9ba96e7faecbdd67e50ed5fb2018fda0bc6a09ab6345910fc445ac6bdb0e7a4c6b72c9441649c9e78109bbaa1d79f9fafb8794a1a06cb638bd8f3c3416d44c43cf862b8ac1d5006310b05a7760d341d07077ae775f1695061d3c7297dd3ab8fc5d03d09ed1602a1bb69891bb377fd0aad6cd90f8b207467db36279020400990d05 +Msg = c65f67c4843110ad555134fa8b9ec51dd9c93ff9ad5d96febffd6c95eaed88be3cd584f749c1c561c46bb11e50bd1bfd939202598cbd7c3e274cedce0f0e7ce3c452c8f6edf2d640ef904f1ebe20e8baf4a621e82041324e606942c83275db0b87609b8819cc2c93ff4776c47ece129d238f026e0ef3a07691dcd54bfa2c8b7c +Sig = 116b58e45693d6c80065cef13ab2f33ed6c4d3b6c5048ca2fac4c793b962c1d8315f6a76e379a0b4daa8e1ffe096291aa9c18b9a182d6f4c5b5bb6ed02b4a0fd39388e4ca5772165538aad34313696fa2a303ff024e25a301997f94860080783d87c7fd24f4eb7791a3b6be09c3f3ad0221ef8268444c40fd845617416119761 +Result = F + +Digest = SHA256 +Key = 30818a028181008592b5850b9ba96e7faecbdd67e50ed5fb2018fda0bc6a09ab6345910fc445ac6bdb0e7a4c6b72c9441649c9e78109bbaa1d79f9fafb8794a1a06cb638bd8f3c3416d44c43cf862b8ac1d5006310b05a7760d341d07077ae775f1695061d3c7297dd3ab8fc5d03d09ed1602a1bb69891bb377fd0aad6cd90f8b207467db36279020400eef211 +Msg = edf40a32aed24e14439d8db48e80d92c4c11035dedd30d90a4ffde5dba8439cd274cf0bb63c155807a90f2cf5fac7add8297ffc5a4dd642ceae1162031dbf746a2229b3586a7b71d5bc2d6ac27324e320c5f73031de10a1d7046010a74105d0885fe7368be8d5b340fbda2148f183f7213f1c8ddffeae6ab5cb907e32b2b525a +Sig = 4e6e6482b8f163fb3c32ff454703a037b9882eec1f82dbd675c94accd79a476e12a347d2e9b4745d30164ce8484635aeddf1116df40b516e6b2af497d27f2194cceb801922aa6d55c935ad166bc477c8e54ab29c07f432b0aa3808e17d28254a0431fd0267e389a6b852f10df0f9a2f317c6a6e762c7395e743b38341828ac10 +Result = F + +Digest = SHA256 +Key = 30818a028181008592b5850b9ba96e7faecbdd67e50ed5fb2018fda0bc6a09ab6345910fc445ac6bdb0e7a4c6b72c9441649c9e78109bbaa1d79f9fafb8794a1a06cb638bd8f3c3416d44c43cf862b8ac1d5006310b05a7760d341d07077ae775f1695061d3c7297dd3ab8fc5d03d09ed1602a1bb69891bb377fd0aad6cd90f8b207467db36279020400eef211 +Msg = b1bd4eedcbef7c57ecab2aed92cbd60052ddeb201181969a7713d53fa18ad16716a06d36fd341f1e8decffa5c41e1d695cf11861fbbfec65aabe0cf188e0b126bff77111b81d13308b53a232ba68c0ff1e1d3df82186e8802eb3a5bb6690c095950a810764730196d0283b1cda7166ca80a8836eed9e32f2ed3ac925a363a7bf +Sig = 7a0225a29a5f3e4592843c5c4d543d14ac544a3eeee9dd5e795ffa87c4e16dabaf07ef75363d773d89ca712df7c32010d3ca024ed84a954ff9625390e498d04e2c676f3c51ebf0a46fe22ccbffa53c52f9a292886e6a8b64efe5717c527dfaed41d2290c79c18ab28a96ab5afd2f071689653550a64be24fdb5f90a8014df659 +Result = F + +Digest = SHA512 +Key = 30818a02818100a9f1795fc64a9fac0edd4553ea5b722b34b5266bef29594fa80dc8c64d33c3459edbfd36fd7b85203dbe4ca17cdf7ae53e5fafdeed8e8a688264858db18124438a3bf3110a721d94276cd47d7e5c2e1547dd5cb80212d594571432506987dbb4a250de62eebdc19a79f876228b2c4d04a1b5910395a8714520e78b997b3b6389020400d43d27 +Msg = b2abe66d1e6dcd75149d42445705b71b7509d393ee38b7d69821850e4268231e98193c91473b88cf61a94e97021d27a9348e04c310bc72cf26091d5b1f8a9349a15e4bc8733ee683e256b41863537acb79be737cd98894d6cde614cad65f2c3b95221cfbeb9e6ef7604d7eaec1d03ae80d4127a493c5a55254607342ae0e755d +Sig = 3f8ee147643e685b325c13557f44945c99efeb0aeabe719ac1da3f6923d02ee74b0767558225548f276d4bab34e8f09c4909a251cdfd7be3cb7f57f4d8f4bcd01dff0fa532ac3116770f0527b56c4415df19fba04858e70703f06b6f02cdd6420d255a21953ae328aa17eb9e151ea1fc0916fe3f3506d8f14ef8e8e09f6e2e26 +Result = P + +Digest = SHA512 +Key = 30818a02818100a9f1795fc64a9fac0edd4553ea5b722b34b5266bef29594fa80dc8c64d33c3459edbfd36fd7b85203dbe4ca17cdf7ae53e5fafdeed8e8a688264858db18124438a3bf3110a721d94276cd47d7e5c2e1547dd5cb80212d594571432506987dbb4a250de62eebdc19a79f876228b2c4d04a1b5910395a8714520e78b997b3b638902040083a029 +Msg = c4d94f011bee04446ce78f805d6950a9de2c6e59f7afbe1fc42ae619bec5c2c53b070614399125c0570c72e0246085ba9c26e1d8f061d45e86689e9a4127d5dd028707896f2ba26cf35d114c054828c3ae67c24e453da8a07e47b53ca32f384220429a89452441ef48c2b3ed8989ff6f1ad659e27fad048eb2ad75266b43b59d +Sig = 4052cd1149655d56d50c46d65c8213a81bc71140558a0d6c0445a180b64ffe3a91a0f3e6c3e9312966927d68fa2b1cdbb342af9fe729c1710076008c123db4901ed4e4a68f4a6c17b8938f2c99a6ae81c821ef65cf7d18a1271291d669d1072581c34a1a4badf4be10b00d2a31e0d611769cfb8576a17760656a6f64dd6817ea +Result = F + +Digest = SHA512 +Key = 30818a02818100a9f1795fc64a9fac0edd4553ea5b722b34b5266bef29594fa80dc8c64d33c3459edbfd36fd7b85203dbe4ca17cdf7ae53e5fafdeed8e8a688264858db18124438a3bf3110a721d94276cd47d7e5c2e1547dd5cb80212d594571432506987dbb4a250de62eebdc19a79f876228b2c4d04a1b5910395a8714520e78b997b3b6389020400d43d27 +Msg = abdffe0b951a91c54c7f00e1ff8e98060b413f131d9cb5589a861a053ed7b1e203b2e3414415873222ae60f527f1e7b529674b737149b7401d4dd3afc3c08d8a57d519c44f3d36af04f7b46f5c6a33afa6b12d92c53637ec918283b37a53aab06fefa87afeb928a5bc020337e721035b4ac6ec5a618bbdc6becc33f9abb98fbe +Sig = 5bdf363c7381eb660c572eaecc4325d0e977244f0bc229abffdcfe6a5e69b29b905b7cc83aa19ca3fa5c50917575c51fc6c299fcfce3d368326bccbc40b2437525fb39c103f32fc9e1aa653e2938afe0921c39a94110443551872b17728f8719d6ab98cd188d4182b62f6063720bb0550bd4f468668f4f4fad1ee3e5c7327fbf +Result = F + +Digest = SHA512 +Key = 30818a02818100a9f1795fc64a9fac0edd4553ea5b722b34b5266bef29594fa80dc8c64d33c3459edbfd36fd7b85203dbe4ca17cdf7ae53e5fafdeed8e8a688264858db18124438a3bf3110a721d94276cd47d7e5c2e1547dd5cb80212d594571432506987dbb4a250de62eebdc19a79f876228b2c4d04a1b5910395a8714520e78b997b3b6389020400d43d27 +Msg = b375b0e73c3a7d7013a9972c01b240228821261ed4c3eff6efca15113472f42a06e52152c25cfe34f1888b9dc3307f3cb91b98a6a1302f9cc7dc0f916ab487676d5cbe7a4fa747df5dfff5ee2608f1fd3080096fe96a4beee06bd3f43574e1904fa12f67cc6181f9bed87d251481bdef5618238296b76c71a33f08427ff9292d +Sig = 5b5341b5bdcb35e167f488f1510513fce5a01a813ee593c97264b2867fbb0846d46166d0eb2e07b0d3804bc0d3e75349a6687c798d82c54333ad5cbdb4d13c452bb479e08a7fcc2f7aecda3dd3946f68c6f02f47b69869246f2c5edd608ac18aabefff4891dc3eafc561a8b4d745c46052fd352ee63e427f21973836587ac4be +Result = F + +Digest = SHA512 +Key = 30818a02818100a9f1795fc64a9fac0edd4553ea5b722b34b5266bef29594fa80dc8c64d33c3459edbfd36fd7b85203dbe4ca17cdf7ae53e5fafdeed8e8a688264858db18124438a3bf3110a721d94276cd47d7e5c2e1547dd5cb80212d594571432506987dbb4a250de62eebdc19a79f876228b2c4d04a1b5910395a8714520e78b997b3b6389020400d43d27 +Msg = 2cb9740e0c1b8867866aa81c64122295854ed681e8eceabf0651bf7a65bc23996acfc8566f4bf42c151b7bf7db94eb57f0fb065546477549e829bafb8d4a67086dd48d87533378edf41d992e7fcfc425759a9c36bb9f4b32eed7767af6566f68ded0adeae25c7a70ca78ec09774d16c8bc357f6d6f7bd441bf62d942c768a580 +Sig = 1aece09a2f10ad4a72dcb389e771ceeaafe0d2b3ed89423da09784089f210e375124e65c040f67c44d2ba2f65ca7852d33e508831ec58e592bb4c9c440959337048072fa09d38b515e64940e35bc2a84764c4864970cd6b7dc6c63d284e6022ed1661149a4bf0c14c83b6f6f5d9fd7e22baf43e9b569ec26d8c42c4a597f026d +Result = F + +Digest = SHA512 +Key = 30818a02818100a9f1795fc64a9fac0edd4553ea5b722b34b5266bef29594fa80dc8c64d33c3459edbfd36fd7b85203dbe4ca17cdf7ae53e5fafdeed8e8a688264858db18124438a3bf3110a721d94276cd47d7e5c2e1547dd5cb80212d594571432506987dbb4a250de62eebdc19a79f876228b2c4d04a1b5910395a8714520e78b997b3b6389020400d43d27 +Msg = 0da95fc957f922a88554a6a14b2be6d22599e1519c99f808c57797c30a8417872c0ee326898fda109b25f56cc2422a6743a590cc9089c3d6ca1c8a428432b7a7ca3b4f0a6172ebad51585e29a16198bc62edcbe4ef79cc2d7217bb47aa1be65bec18eb9f680b1d29aed5290171effa798a59d9c13fd3d9b6c65072fb05a86c4b +Sig = 96c37595427da33321b72448c89addd4ce9e63ae6e32a089bb780d57682099d35c92bacb405aa0979fb70725dbd06af1a9f6e9ad91457e50deeb5b91138db45a6b1e082fe3d9778355cabb6e7f4934f7d0d7a1ce0b8face619a9ce78cc024cdab6ac02f3cb6f8b6adfd1e0b245b227f66441b3863e8ee04cd83ec08b456b0f24 +Result = F + +Digest = SHA1 +Key = 30818a02818100931a92071b310602a55840b8c0aea51e3562513e81010e1b93374cf4bbc50cdd94fa1dcb8d8b609e5dbea182c052e06d2a1c454755d9a279092221dc52d132e55ebe7234728a7692763636845a122e8752a319c5cf5065fb7c576460996bfe1e1b4fd319ed11400df2e6a18461f1a39c83996fe6886ed41be89cbcde6c764fe9020400a71a21 +Msg = 85254daa44d5ba337cf350e0679f416ed930168fd179ea484d4cd698633dac5a8ea8e86c46f6e311d31b4a946263cf2f596f1e2ae87a1347e0e22a5ec9e337452fa557f23c7926e48c5f32bf3ccdb03644ab6e2d07a2091f299660bea17148da0f2382844fe7ea734ec7f0a71c624c4b43edeee058783498cf726000137049e2 +Sig = 6f47d4d0ef70bbc71de2d6a88e044c6920dd81b030e8cb2e422a25101997e4186d00ca17bb6520b6d92075c7ab58ab84c7f4658bd955de37327817e18c3142ea6222b240b260489ea4008227de13b0c078f83909dd65852bfaa01bc9dc7e64ce80f35503fa9badde585652c9cd0fab0e73066d83ff9f343d4137778e3c09a58e +Result = F + +Digest = SHA1 +Key = 30818a02818100931a92071b310602a55840b8c0aea51e3562513e81010e1b93374cf4bbc50cdd94fa1dcb8d8b609e5dbea182c052e06d2a1c454755d9a279092221dc52d132e55ebe7234728a7692763636845a122e8752a319c5cf5065fb7c576460996bfe1e1b4fd319ed11400df2e6a18461f1a39c83996fe6886ed41be89cbcde6c764fe9020400a71a21 +Msg = be5e8dae6e3a61370324e23ba572996d4c0d6288d32c21355162b12fa6db1da554e313e091a795259a40f2dd49edf5f3eaa05c7e4bbd8ba0121e82ad535a0d9062473a6be6bd107e2f9d7e4aca1292f65217ecf1883a71d9a69f449cf147f2dd8e92ec9996033b0a6d446fcb4f6ad83e2b79f92bb52b3aa9b7eddd42a72b3352 +Sig = 206f738f2df12a70b0a1f5670be0c9c0341a1931d8fdd9491268a08bb42ca8dee88571f140bb7d4abc60f82fd284319e06b44aa9e384ba4c38b9a427e44013a2eed009e196a840f357cafd47485a978b7050342a46df3c4840ee4c56b2dbe605e555a3e7f6045d163f0641b6dd1da51a48c1e497d24db15f3b1a959438e18fd5 +Result = F + +Digest = SHA1 +Key = 30818a02818100931a92071b310602a55840b8c0aea51e3562513e81010e1b93374cf4bbc50cdd94fa1dcb8d8b609e5dbea182c052e06d2a1c454755d9a279092221dc52d132e55ebe7234728a7692763636845a122e8752a319c5cf5065fb7c576460996bfe1e1b4fd319ed11400df2e6a18461f1a39c83996fe6886ed41be89cbcde6c764fe9020400a71a21 +Msg = 544c1e697305e865ac0c00da5c17d1d369449101d55c741993581f7799245f0736a41b65a6f58743e4f59b0cbf05c4c6300dd93debc1505e3423b2e1f4494c2b0c612872e9f23b225865e07f9cc3858cbfc0a42c25f9f688677ae3b05e833c857d8c2cd664866cc9b364b77d1cda7eedbd64dc18ac8bcc5fd3649a2efe5997de +Sig = 73d0492938b07e39e4f611ee7f50d4558537dab9ede3f44b49448d88e447ae07790f969ad8f15c327b540486135cdb6e0a9725eaab5e343b64700233edd13c43cdb25cbc2f5311558152af4b2818be52ccb8cd0ed4ec475e7ff75dc7d56dc999b3d15b319d76c5dc6f690ff977407c1789e9531941062881b6ecfebb6dbfad2b +Result = P + +Digest = SHA1 +Key = 30818902818100931a92071b310602a55840b8c0aea51e3562513e81010e1b93374cf4bbc50cdd94fa1dcb8d8b609e5dbea182c052e06d2a1c454755d9a279092221dc52d132e55ebe7234728a7692763636845a122e8752a319c5cf5065fb7c576460996bfe1e1b4fd319ed11400df2e6a18461f1a39c83996fe6886ed41be89cbcde6c764fe90203597bdf +Msg = c18b5b1847b7e397c39a6f90402aefc1d727f11418f31f17aca308ac3956230286c510c3e01c228fbc091baa9d1236f1382b6b13d688eefdfbb0f99645d3cbad965df12f76cbc49eb2bd33be494dc29289a0d38676ba24ee6b979aaf04773d3c3a7983c5d06bd1abefe13f360d849c8a13adb2d7be33cad1458173603deb8098 +Sig = 0e68bca9c9d1332ece050f6ca2cf697b7b00a3aef4f3925dcc34449be05ea7a732165abfbf808e0431d6266d4d24595b94b3921c877105c6dbea351de2047b8e7373f775958ca0e09a7da0fc0c74638d3d2b42a5fdf557d47039a0d3092304627fd2537f907876180a8ac3b4d6182fc8b515b3a12f3601ba002ec59ea0072115 +Result = F + +Digest = SHA1 +Key = 30818a02818100931a92071b310602a55840b8c0aea51e3562513e81010e1b93374cf4bbc50cdd94fa1dcb8d8b609e5dbea182c052e06d2a1c454755d9a279092221dc52d132e55ebe7234728a7692763636845a122e8752a319c5cf5065fb7c576460996bfe1e1b4fd319ed11400df2e6a18461f1a39c83996fe6886ed41be89cbcde6c764fe9020400a71a21 +Msg = 992fe15e5f63f165df61ba064f593894c4db4fbc489974682d6fabe4a1a0b13f82637af5739edeca2ff18ff91df64e8e25c75e11c3c13964598883eeca4b3cfa444a39595d95d54f6216e4adebd1e83ab36b8857a7e93de33dbb4f5d07f9004888ec06d446d03fba20d8a168e273705e17ceb3d81f9ae8ad810ff777823165f4 +Sig = 233ae74861a1c0db26a07165eef66954400a4aaf2f12a4f0b66ba5ac0549669c6688d5b35f1e5b1f8ee054dcfb87d3ffcf55ee5c3df6753f1cf838a109370f1709b1c77f6a8a5189c0eed565f930c01a6630dd35130cffd12ec4a02848d77f5a8661f42e087277382a36e504293492dfa8a689ff35d95343effe0baa9a9a090d +Result = F + +Digest = SHA1 +Key = 30818a02818100931a92071b310602a55840b8c0aea51e3562513e81010e1b93374cf4bbc50cdd94fa1dcb8d8b609e5dbea182c052e06d2a1c454755d9a279092221dc52d132e55ebe7234728a7692763636845a122e8752a319c5cf5065fb7c576460996bfe1e1b4fd319ed11400df2e6a18461f1a39c83996fe6886ed41be89cbcde6c764fe9020400a71a21 +Msg = ae004a585df79c01bff18adc7fffb88ff91c020e9e0208119a43eac4b59450c0776cae3a90cec67a77626e8f50cb934213357e48eb2d56bcdcb6e6cca999a1b2f5fce3e6a8367a9194e265455932dbec858790ff003e33f9a8cc3b0a380de30f6ed973c26dd9c22e6098f96760dd99779839c09ba6dca8b045ac70e829991fc1 +Sig = 3d954f484b59c38ef3103aa65ef334c81d8f4619f55148c2d95f5d23730cf6764accdac01405ab16ac53db30c4c00d62b2a34bd6fdb480b05e72ab02fe0bffb2d67d17f99275cb9ff17d87a1a78ee3531cd5221af5052e3e67b01e9c28e52bd99460ff28a40f618f3c7da8452f3c8172886b7350435dfe64e399e5483c540156 +Result = F + +Digest = SHA256 +Key = 30818a028181008f705d5529b5bf74600abc485bc4bb76deb9627088e51fdd26dd0f37bb3b98a9da4094d275d55011a844884122daf8b4abe99d43d918eb50d9642436647f60577c5f60fb9b810147a910dd7dd610318392dffa3fcc41f89f461bb5be85bf885b672cecf00da3af4d7d90074c4c0144c4bcd2d49145f8097648ec7230747f7033020400d90b53 +Msg = 10c21d2d4afdf3502dac1a791216d0c240b6b12061e0cf3033a7043380fd8756501cbe385d2553a6c7078aa909a3d2c22c2e9a743bd66503f6a8217ccab1b4f50163d916373b2ad80da17d8d211074213d76509fcede06f6984c95fea9e896b68b5f15d0be879f6f65429c2f40a4e066da587ca9043fda92815b09c103ec5521 +Sig = 0411589c7d0860d41c7d4fef4d604b4dca0b160529209e762d5fc73df911e7bfdbe16feb0def70993e64eeb66888e47b3613256dfe04e75142ff2b325fd86b8e02eb01e4cd05b05cc788f014c170d584d092b7220a66133d4f0e949457eddc567eda792abe49b8a8fdfe177c6b6e0d7ac4262e95fa87c1277c46a759f9723cc6 +Result = F + +Digest = SHA256 +Key = 308189028181008f705d5529b5bf74600abc485bc4bb76deb9627088e51fdd26dd0f37bb3b98a9da4094d275d55011a844884122daf8b4abe99d43d918eb50d9642436647f60577c5f60fb9b810147a910dd7dd610318392dffa3fcc41f89f461bb5be85bf885b672cecf00da3af4d7d90074c4c0144c4bcd2d49145f8097648ec7230747f7033020309ffbd +Msg = 393f6cd3c89e67def9579e586c945fe97d567bae23c54a2e18c5f0903bc9df0b32ec9d9d533ec800c55b57dae2432234e065a52db1fd00ef27a043e35c15e9215167a22bd53856daa9586698e19735d08dd7e7a3996568ddf289b027ea5b467eded903e316371954ec7654fc31389fa7ccd3c978a4a489dec1a6c0c4ae42ff08 +Sig = 327269d1d4d871a8be4ee49be39c5a51482fbe89d522c0d6cfb0ea6bf0c6f0b343a94222ef65058e27f5107e4f8d0ce20a064f19ac39189f221c5e62ad4fd7006eb1de620052bd35c268d5c1c6ee0f81e8b3f7f2977d2449167caaee2ca54d458108645268749651de6f7acaff09591d19ac99dc17d480ef3531ed4c14eb85bf +Result = P + +Digest = SHA256 +Key = 308189028181008f705d5529b5bf74600abc485bc4bb76deb9627088e51fdd26dd0f37bb3b98a9da4094d275d55011a844884122daf8b4abe99d43d918eb50d9642436647f60577c5f60fb9b810147a910dd7dd610318392dffa3fcc41f89f461bb5be85bf885b672cecf00da3af4d7d90074c4c0144c4bcd2d49145f8097648ec7230747f7033020309ffbd +Msg = 036f62daacf68776f409d0595509a596a544b085ec7649687390324e1db78538fa90ea7b1abb0d659f9d50231663bde208433e35cb0510b79ec375f1f6eda97e128f186cd5d7cee6d5d22f10b076e8339fe5251a4df005bce9da4a1b795f566b72f553778652b141be2ed5e8c84a0fcf92b1cdfc183e0fbe7a5e1b9351177248 +Sig = 56c4af89728a322066b8c291b4f03da5a038e4a44ffd9b49be9ee5d1a800da1c58e7a852218eaee853f9695dd308e1a5fd95b41a441c2a6bd124088868fa26f384c9ce87849b2eb5edac55cb95d5dcda7bfffea621b3fa66e6b200ce755b947e778fbae07490410509f5036a07280f943b7300562926cdca3b20097f1ffc24e2 +Result = F + +Digest = SHA256 +Key = 308189028181008f705d5529b5bf74600abc485bc4bb76deb9627088e51fdd26dd0f37bb3b98a9da4094d275d55011a844884122daf8b4abe99d43d918eb50d9642436647f60577c5f60fb9b810147a910dd7dd610318392dffa3fcc41f89f461bb5be85bf885b672cecf00da3af4d7d90074c4c0144c4bcd2d49145f8097648ec7230747f7033020309ffbd +Msg = 8c25bd2bed75a33ac134f9c1d445245fd8e580d6148fae11591c2b65382f271772d0941eb0577d2b748c99e7500c207b56efdd56cfa7852a302b47384956a4cec089810ebe987af0e8e47a8b91c488902d2ae4170983539e3adeb74ed451e2815c98ac827f0043930384c335ff3507a347dfbea02be9c172617da42f3fe98a37 +Sig = 56254367f71f6f1fc6944ebd29f8a5592095ebc73ff5222bd815da17bac7f12290f747deaeb29b98c98d31a3ea32508d7683a67d449c59a0d6c16b4855aaa7d6f170c02c5cef61c9b6889207ad021017094d24246c4c90a0de055f02a5984efb67481684667eea36ad6373c36712625fa18d3ed41b1dec22f3bfb0d534e52da6 +Result = F + +Digest = SHA256 +Key = 308189028181008f705d5529b5bf74600abc485bc4bb76deb9627088e51fdd26dd0f37bb3b98a9da4094d275d55011a844884122daf8b4abe99d43d918eb50d9642436647f60577c5f60fb9b810147a910dd7dd610318392dffa3fcc41f89f461bb5be85bf885b672cecf00da3af4d7d90074c4c0144c4bcd2d49145f8097648ec7230747f7033020309ffbd +Msg = 2cb9740e0c1b8867866aa81c64122295854ed681e8eceabf0651bf7a65bc23996acfc8566f4bf42c151b7bf7db94eb57f0fb065546477549e829bafb8d4a67086dd48d87533378edf41d992e7fcfc425759a9c36bb9f4b32eed7767af6566f68ded0adeae25c7a70ca78ec09774d16c8bc357f6d6f7bd441bf62d942c768a580 +Sig = 156747b263be659661e5e35e363d0523303ded9eec1e751575ab3a43156773a056acfd0daaa68625b1cc068458ff9e40ae167594bac846cca2b98bf6e5a4a01e961adfcd70206c05d66e3903a64b61afcbd17391ad0db529944fc2d0d7be3a4da8091cb75910f670d9515ee4f8ff3d62307eb54657e03a330e3cb0661e6fb796 +Result = F + +Digest = SHA256 +Key = 308189028181008f705d5529b5bf74600abc485bc4bb76deb9627088e51fdd26dd0f37bb3b98a9da4094d275d55011a844884122daf8b4abe99d43d918eb50d9642436647f60577c5f60fb9b810147a910dd7dd610318392dffa3fcc41f89f461bb5be85bf885b672cecf00da3af4d7d90074c4c0144c4bcd2d49145f8097648ec7230747f7033020309ffbd +Msg = 127498bf44b97a4a4ed7ad4bbc7c3781e2f83a53149fc95c1a6efa27def23d376866ec4b0c1c23e0e21ed1f677140f17c268b1965aa91b15e62d5749d4fb64024ee7d06569ff897ca026f0f282ff2f17a70dcc2ae8187fd8cfd241004dbaa6b9ab416c96c32b5429703930c543053e88782db49928b39cafc0a4e2d3b1f8ac66 +Sig = 1976fe18cf82bf6ba851626bf94509348f56866930c771c82a6e12c30735c283694a0eeac9337e407525e0a831ba7eff77299c6896a85050b960718a40d5e34b7bf71eae4cdfad0d91d8fa6dfe37f30679ef444ccd360971ddc47e038123b7eceb3072f370796122aaf0b9427563280222328fc0068ae1dbd39a033740789536 +Result = F + +Digest = SHA512 +Key = 30818a02818100c946321761fc295e104cac20c4003e8f6b29ba1bfe247458fd006e27da27dcac8438d1f1b97dd6189f5d98aef968c1ffe5e0976d8a6cb93e9e703519bace48c0cdebe292174745e9fe24bd1283f004a022d2fc3b03db09a0c38a095d064f9dc14abb0490241125af6744535e83d11b252306af61b7d231e843463f79ced2f60f020400a97a77 +Msg = 046a758cd3cb2c2030aaec074068234bf5026c6de0940205461c7ba87581b30e58d406744ad5c24028b9dbe4aa2ae104f39030db668f67dbbcd01b935305ccd6c927171aca022e1e26f486d027f2cf6d21cb29ea4ab19593ccf5a9f2191289f27fed1244fc5b580253e453925fc7d5cea83dbf6134027574a0128f8b6fb0d2a9 +Sig = 3c2a05b92025d230664c230d8546de1d970458cdc68ee8100ee53d5f3ea57593bfa3547a8b91ac6cccfbfe61013c5b313303016d552af8d6c2ef239b30da5c5560539db4cf242edd91517724afd9882f0377536e095f64d7d61bd3b3efe27433717c2d76802f13d676d5f14b561e3e12077c774840dc93d49e9e27a1547d13f7 +Result = F + +Digest = SHA512 +Key = 30818a02818100c946321761fc295e104cac20c4003e8f6b29ba1bfe247458fd006e27da27dcac8438d1f1b97dd6189f5d98aef968c1ffe5e0976d8a6cb93e9e703519bace48c0cdebe292174745e9fe24bd1283f004a022d2fc3b03db09a0c38a095d064f9dc14abb0490241125af6744535e83d11b252306af61b7d231e843463f79ced2f60f020400a97a77 +Msg = eeb93216aa9f6030b5baa3eb3a4bc92d941a0aa2d5bb3a16a2104423450fd30dfdc552ea989b170644d9db85a3686e4a1ddca8187ab2a3f7b0d527daf967667e29bfea953faecb243a07252a2e5ec982960f330aec83bd0577ae12be65dce46f19aee260c65fe4533d4c692003b4449da7bc92c052b6ef08a0a2ea18aef5b6a6 +Sig = 41a8bf967f62204cf9a0e94d9e989907e4d07ce93741be7de06d5c527185c80d60cfb90557dceff13190729582c3fa8af4c28b2a6a43af6e5a13808824541241297af16a138dd281f72a170a00f7d8ef41310ec904477bdab2c32f4e18b1bfd6e3d6d7fdab5d2a23e2450e0e2bae225cfa633d7949cf9d4210e7913d49e5d5bf +Result = F + +Digest = SHA512 +Key = 30818902818100c946321761fc295e104cac20c4003e8f6b29ba1bfe247458fd006e27da27dcac8438d1f1b97dd6189f5d98aef968c1ffe5e0976d8a6cb93e9e703519bace48c0cdebe292174745e9fe24bd1283f004a022d2fc3b03db09a0c38a095d064f9dc14abb0490241125af6744535e83d11b252306af61b7d231e843463f79ced2f60f0203030339 +Msg = f9ea187db1584bae05ec20b78eab1c5f0537e2075799ef8efc3d8773853eef3975e5dd10526c2db1fc07d58a3d251b1ba0f206a0872112f078ea27a5b84ecc7d1ba299001a4bea6326c7dbad3ced7018ba7513ba71ba4464fbbf8ccb4e70b2e5922b3296307feb8c2c341868b48b811ef9c6f39e3debedb42dc69c2c722d093b +Sig = 44b4e5e060265ab860dea7823d1a7d53a1f79fdff6ef2cd4e93ea86e59741817cfcdb88a5517a21b69bd9d73e2426c9429041c40a32845dd098a66cba52d147c32cbc5164144dab8d8642dcbe3dbdadc1cc7589de3a35383165eed8fda2602a54d8a02a9a0a992c95732933efa30c0cd3f4d95519e8d661247ecf9bc5464e543 +Result = F + +Digest = SHA512 +Key = 30818a02818100c946321761fc295e104cac20c4003e8f6b29ba1bfe247458fd006e27da27dcac8438d1f1b97dd6189f5d98aef968c1ffe5e0976d8a6cb93e9e703519bace48c0cdebe292174745e9fe24bd1283f004a022d2fc3b03db09a0c38a095d064f9dc14abb0490241125af6744535e83d11b252306af61b7d231e843463f79ced2f60f020400a97a77 +Msg = e4ae864a45eddc459a59946c7bfd18cfc119394fdf2520bb7612873923d329e89c1c76c3fb6a8cc95943635b9fbf47e599478cc04c9d7d578a1c9589c342f24f1e6b069fc8df90908c0fcabea51ce4f0d099b2f8a592a2db26cdf032994f1dd093229da55656d0e25c46335e341dd8398d9813bf910d778f74ac00fc4c0592b3 +Sig = 8b7a625dbea9214f23cfcffa0554f3a4d64393f80daf01d01422857dcb74772f48b1215750319376cbbdbccfbf241d4cee1f190df04e5bd03e0e4e24e1cff426174a3ad1695ba0401c01fa6711f99fcc91a6852b6c77b2284ae5454d5819278682e6667bde72a69f1c111d1aee504c5a80dcdc6747d19bb287e85cc785714eba +Result = F + +Digest = SHA512 +Key = 30818a02818100c946321761fc295e104cac20c4003e8f6b29ba1bfe247458fd006e27da27dcac8438d1f1b97dd6189f5d98aef968c1ffe5e0976d8a6cb93e9e703519bace48c0cdebe292174745e9fe24bd1283f004a022d2fc3b03db09a0c38a095d064f9dc14abb0490241125af6744535e83d11b252306af61b7d231e843463f79ced2f60f020400a97a77 +Msg = bb825caec83ec0fbb33fb18c1afed63805b394a219bedfbe0f4650906420783751f2752bfd98c2c3f2c654facdefe2723a6684b920c47fcc19895fd9250647499f7a86fe707b6ad982975980783c1d5e9cd580eb1836192d6a3a657f12aa1a918d61b7b087ae60474dfae9a681ab31031148b1be69dd54eae8a1890891d69715 +Sig = 064210dffdb7ea65e1de82f40e0bc3d450590dac4a8ad44427c2d6f13376fa9ae291990023fb678dfbe04a994cb84ac4698d71a613010d886d0aa6015aa092d52bbf857900934f8616444f69b137b651b61105bc64618b1fc69f589cf257d74c0a199c6a2bed8f26e58a0ba72778ab10f4419ddf5b9f3c5ec1c4390c8611713d +Result = F + +Digest = SHA512 +Key = 30818a02818100c946321761fc295e104cac20c4003e8f6b29ba1bfe247458fd006e27da27dcac8438d1f1b97dd6189f5d98aef968c1ffe5e0976d8a6cb93e9e703519bace48c0cdebe292174745e9fe24bd1283f004a022d2fc3b03db09a0c38a095d064f9dc14abb0490241125af6744535e83d11b252306af61b7d231e843463f79ced2f60f020400a97a77 +Msg = 6d47a76b64deb512410e0e8b8b53104e27125fff792a2aa0cccdb006f48e038931ba0c0057ecd0ed2cdcf1f412787892e636d10b27a817a45b519313aeb77f34ddb90ffd5223b2b49180955fd22f687defb966f381628f4946fe3816c706c6b937ebb74a9daae2d136a1ffb514a169770c44239fcf8119f7577da9f885a46282 +Sig = 311263208e8021d33f3125bfcd72677f28e6a807b359ea71bc87b466396e98c6bc5e361b26c4c858ddd129a8dc9cc4dba02b1f39b87a51d184c6a6a1652ae35759477f7939b275e71d09ed52e4fc07900c3ec90785c6b2d6edfe59059a8181aa07a00a56c3bd5dfee7618ac17e0f1ec4e8d252a2c61aaee69abf62212c98f44b +Result = P + +Digest = SHA1 +Key = 30818902818100eb3b1cbf5b0e88bd44b8575e6b40b618103dcb9a51d36e83baf5bf1ab6c0e4261c12664bc1a4d2216820e2dba9ff7c98b23b58ee86e738e0633dc916477e94be2fb8acf19f532842dbb2eb7911f8f7d884ce022395967e4442396e3618f875c856c73f6b89127646df29ff9971c0358fbda0a7673cc08c3f3f26d71411712a5302036ff82f +Msg = caa67650963439fbee5e64bb2f5f5a34f7a9d110ddcb2bfe609803fa1e8606d0475404db50f04613ec972347383ecea6353172847cfa815b2d8449102980c8788108c11b2e820f3802c83a09de86484726e3d5f17263664a860bfb2185c7e354610ad49796b43b721838d18989fe6f20b00623de27cf83d1537741b39923006c +Sig = dec7ad8721af589e22dda67098a77fc1b5dd0216dfb77caa5d71bfd6ae256b49dcd20066694d6c4f7b20b355d8eabcaa92a8d91e077fb0241a62be5e34bc1e577a5fea84af6903dfe94fef4d626709ce5d7abe4b1ce420312f928e00c0f62a4f99409ee3f11efcdd5e390ff2b69af600c9b5738915beae3b7f6d3cce8af4bad0 +Result = F + +Digest = SHA1 +Key = 30818902818100eb3b1cbf5b0e88bd44b8575e6b40b618103dcb9a51d36e83baf5bf1ab6c0e4261c12664bc1a4d2216820e2dba9ff7c98b23b58ee86e738e0633dc916477e94be2fb8acf19f532842dbb2eb7911f8f7d884ce022395967e4442396e3618f875c856c73f6b89127646df29ff9971c0358fbda0a7673cc08c3f3f26d71411712a5302036ff82f +Msg = 1ac33b15b4837e06f6be09f4c0e066cf9766f1154cf1988edb99e0399383288677b632c5e52adfdf75223a4424bcb824b2c7bfe248d464c65e9079f2dc51c7977fee98687fd4794f6f563d5f6445450b59c1ff95d24eadc9c02b68eaa5df64edf81475e5cba8d2bfab021a2fc8a294ea56fcbb163287fafec911b40b365587f0 +Sig = 1ea5f7437790531ab98e5bc93bffd187c1d5a25ec93cb35c02ac5f96b188483fb593ccbb27a4bd9c335657aaf4d5bcaac7c10c7943e4bb4aa66776d35bba92307564cfc7709049b7c9b59e4cce3c6c6cddcbd28d14a0d91afe6439cedc65bca893e6d4347100296cf5b37b889eeb0512121dcdc0ccdc8c10d9215260028be3c4 +Result = F + +Digest = SHA1 +Key = 30818902818100eb3b1cbf5b0e88bd44b8575e6b40b618103dcb9a51d36e83baf5bf1ab6c0e4261c12664bc1a4d2216820e2dba9ff7c98b23b58ee86e738e0633dc916477e94be2fb8acf19f532842dbb2eb7911f8f7d884ce022395967e4442396e3618f875c856c73f6b89127646df29ff9971c0358fbda0a7673cc08c3f3f26d71411712a5302036ff82f +Msg = 0c5b2ceeb622c694a8e3feba0d6a802b19713107f7c2c20b029b8612375680dcea49c10fb9ecf17bbf392ba20a590e784e7c1067da091696ccf7426b817a0c4f50e395b178c1374d564d61aedc05a2f13e9603cdeeff9ad0cbf45ceb96803331a5ef51dcdbebc391d7e549e56cb7651f5187b23f1aee774067597c9b5cb01c0c +Sig = cb554ca80e9c492edd709f35092850a63ee94cd42740397a19cbeadc30306169d47db14b8225e0115437b25c2e2194af74636888a6995d4fbd574c3f3e0ac5896e9864c702019d5f19ae4bf1a5dd3d0f23ba9b0a40b7ab49bf95779cbde4533f81469ee9da651e913bdb62e75c1f166a61a45712d2210cf1267444558710c8d2 +Result = F + +Digest = SHA1 +Key = 30818902818100eb3b1cbf5b0e88bd44b8575e6b40b618103dcb9a51d36e83baf5bf1ab6c0e4261c12664bc1a4d2216820e2dba9ff7c98b23b58ee86e738e0633dc916477e94be2fb8acf19f532842dbb2eb7911f8f7d884ce022395967e4442396e3618f875c856c73f6b89127646df29ff9971c0358fbda0a7673cc08c3f3f26d71411712a5302036ff82f +Msg = cc8e2868722310fb117ca3a52e1839eb85d308b8aa00ed0bf0b76aec8a70eba4f0d14d2d85c5a0e876ce2c8ee59cb36947def6c40a587aa07b368ca8e8a08367018e45b984de0d7f1aa46b977cc18c0cd9b7bb897cbb2814aa0ce8f8c9843e03c86c19f2ba95dd2ac4a466a93aae4b3b05055ff148517ecf43e286c57744a3e1 +Sig = 44263cea7850a2bd4204388df7a14cabbd0bc9f600c3a166d5ab003fc934963165dcb890c90c59eee6893f89fa98b4e162650ce853724e240ff642b68631fc2372a76dd72babe88954bacb6279fd3c92e63115869fcc6e7b6bd95116f9452878508b441227342d99f108dcb8b3408c0f2c49636ebf96e49d7a5b89ce84565243 +Result = P + +Digest = SHA1 +Key = 30818902818100eb3b1cbf5b0e88bd44b8575e6b40b618103dcb9a51d36e83baf5bf1ab6c0e4261c12664bc1a4d2216820e2dba9ff7c98b23b58ee86e738e0633dc916477e94be2fb8acf19f532842dbb2eb7911f8f7d884ce022395967e4442396e3618f875c856c73f6b89127646df29ff9971c0358fbda0a7673cc08c3f3f26d71411712a5302036ff82f +Msg = f2f47bb35772361b88df3595fb27bd1c4bc66da330e8d159afcf332a8e76b4890b749c6dce22ef991b0041214c55ca2a7f16bdf18c09d60f3a2a32fbb24e64d03306c55008c60b29b7471e787c29278cf5dde9ec1fc2549b818e579aa7f0f7afd2749e65eea6b554c47a74a271ebf9ca17e3989cd25b7386eec34a1157a494ae +Sig = c57b082915a8946942059dff585c079a5574f665aa7962eb6c51b8abbc78aaabc40904586bababfa5a9e98030f46db40e7b06320cbb924a16e886b963222c7ace2bec5dfce87964f22e07150124166e58f62e53cba5f6466c6e56caa71be4b5039cf16a43d414e40a56007e86ec995d923db42fb9ec1054cc1f1e4deae73ea81 +Result = F + +Digest = SHA1 +Key = 30818a02818100eb3b1cbf5b0e88bd44b8575e6b40b618103dcb9a51d36e83baf5bf1ab6c0e4261c12664bc1a4d2216820e2dba9ff7c98b23b58ee86e738e0633dc916477e94be2fb8acf19f532842dbb2eb7911f8f7d884ce022395967e4442396e3618f875c856c73f6b89127646df29ff9971c0358fbda0a7673cc08c3f3f26d71411712a530204008aebdf +Msg = 032daa37ba23c04da51121e7e470f7d21c1c377e0ea0d75f6fb43b93f304f0c5ac339c51922035a9636872f7ad2c7f042814f5584a9309a3166d045b3577f3a7479e9f7c7b2bbf055d466d49f0b8d708fdf537e5aa5905cb4eb26a8984fff9bf7f779afe9dcdc62b3eb3fa24d69d65a641c7e46f5779319fc18a58640b236ad6 +Sig = cc71562cb955efc4a5bd0239f688e8828d2268278cd8763761b1274386f7520cd54d229e1ca4799d7efcb6c3e908307ea9233198b148c3e4ece724b9a769abdbe26685238c6ee88299b24c52337eb8c4753d0af63d3163d17093e4da9caa4181f22f1ca36063f8aaf82ea2735fb7d9f0ac161a33e64a7fc89f68c29fcd3a8c89 +Result = F + +Digest = SHA256 +Key = 30818902818100a16c7fcbb8d6fc602277e9cebb1790bd14999ef7670400c0bd0ea6116fc72e29b868c8b62ada0e7b4cd351b5a76c177f158b4f724f1d287d66df114eabd68e3e8d12409b69f96e334c0daff79392d184b9102ea5c4ec13052bfc509d9ae76851e8557a417b86e9d37687d243cf48812ce621c5f39404cd6b22a60beef744a42f0203681201 +Msg = e24695128cc0f0e9905a6dcc1c54e481ef431c0426a13e2a51888984ccbb48864de601e8b927f04d3cccb323985f47cabde033f89b51035c3478f881f5e0fef64621deac6061b59f5e1ba5b8971fcaf22cda70bdddd883a021874621753e48e9f47d95242877292720cdaa55c29d564363bb3a1a953ea43d403fdc2cf5dd0fa9 +Sig = 88b9604e95ccc993514a258d5a6785836b3c0ceda1f9a8359b1ec9592100c9b47572fb17d2c24dbd6b99ab46c408b7bd4b8094a44d05c2cde1145ab516b36926358f980ce1eb2e92793f65f34f09a4053f8deb77025052e12922e3f14823859d7e49aa54b7a7f0b20c1672e1a278ec631f955b4c19da05dd9c1f4487a0e08f31 +Result = F + +Digest = SHA256 +Key = 30818902818100a16c7fcbb8d6fc602277e9cebb1790bd14999ef7670400c0bd0ea6116fc72e29b868c8b62ada0e7b4cd351b5a76c177f158b4f724f1d287d66df114eabd68e3e8d12409b69f96e334c0daff79392d184b9102ea5c4ec13052bfc509d9ae76851e8557a417b86e9d37687d243cf48812ce621c5f39404cd6b22a60beef744a42f0203681201 +Msg = 820e27d35ad139ca305e9eb26c128ff59dcac86f05522e7e5721b458bf437fa22396493ea93903647942bef4c4afcb0a05a021d386c300a0260fd4395bb55c7473530b061f6baf983115501ea5f05b64de5e00e933f1d8f1aa20cbd6033f319ff9ae37d3c4508490e23e1dd717bd862ab36e2b5913c5fe996abc60d6c2c945 +Sig = 519c717e336e7a28d648acf178931f6cb958684979b23e1d53ad32aa242e327699ca1a1f294feeb8b6ad8668b75a3e42ca4ce08a91c3fcae06c7974e6d9e23e622363cae4cdcd1914d31f38f95002b1a6da863e70c244411cb1be90ffea30ca4e345429e58eb751f676ea7ebee4363c552aa5bda5d57908fd5a87142db8d9821 +Result = F + +Digest = SHA256 +Key = 30818902818100a16c7fcbb8d6fc602277e9cebb1790bd14999ef7670400c0bd0ea6116fc72e29b868c8b62ada0e7b4cd351b5a76c177f158b4f724f1d287d66df114eabd68e3e8d12409b69f96e334c0daff79392d184b9102ea5c4ec13052bfc509d9ae76851e8557a417b86e9d37687d243cf48812ce621c5f39404cd6b22a60beef744a42f0203681201 +Msg = d8330fa49a0a75f27470a2898ec1134666515fb467ad6b74be23dde26984d3f59028d467193307167717a2abc25aa6790d9acaa8f4ceb49274ce6f6d00161a2bd0c6dd9e7dee22e0cb0901f2c5c7fba31010ecb379453b39d0c95442f9c058bb40161291edc32e16184ea5a7bf907c8c16bbae1f1e9b6730791b72a97d0af56e +Sig = 5a692ebff6a43c5e63602018577fcac17415fcec4087e4c41065da33dbd7d87862de2e0c003bef2ebd0a411884811c7fbfa893590ea885acfb023857b904b0aff0e5061f2fe3376be5ae4de0510b2c34be6e0192722e63dd6f3fa9a7f8a191b7160997c463d7f7d46577e6cce534da08d1e5245b3a03b780f8144070cb66e6ff +Result = F + +Digest = SHA256 +Key = 30818902818100a16c7fcbb8d6fc602277e9cebb1790bd14999ef7670400c0bd0ea6116fc72e29b868c8b62ada0e7b4cd351b5a76c177f158b4f724f1d287d66df114eabd68e3e8d12409b69f96e334c0daff79392d184b9102ea5c4ec13052bfc509d9ae76851e8557a417b86e9d37687d243cf48812ce621c5f39404cd6b22a60beef744a42f0203681201 +Msg = 243db9a1c203c792db3204bbfb3cea400d6e5efec0c935092f0df759c016e3c04c6b331f8115a1da85ad2989dcb911f18c3927327f7c4a4128382b996ada552eb51b6ba372d4b1bca113ce16c06ed116ef97711f53319908b8e224cd7aaae584a573ea935be90121768b7cca6f0232977fb2c62d03902c442533685bb92d99aa +Sig = 8d1a40fbd8186e3cd1dfbb529e1ee9ab13a6c8e6cf04e663a4de2349c05334f0ab3c694ea89397ca3e70a2a1957ac75a6544842af88cbe3ebf641f68cbce75638da1c953c3f594f8ee8b3825ab4aaafb9fb152f05bb7dcc07e3b666ca8626e69bb262bc240398007b871b7790eca96512d64f3ff94470224fa075ce3164cb1e1 +Result = P + +Digest = SHA256 +Key = 30818a02818100a16c7fcbb8d6fc602277e9cebb1790bd14999ef7670400c0bd0ea6116fc72e29b868c8b62ada0e7b4cd351b5a76c177f158b4f724f1d287d66df114eabd68e3e8d12409b69f96e334c0daff79392d184b9102ea5c4ec13052bfc509d9ae76851e8557a417b86e9d37687d243cf48812ce621c5f39404cd6b22a60beef744a42f020400eefc9f +Msg = 186594f37c9ff1fe3ef55bbb511dfebdcf5b64723cacddf80f4425326e3b411c3a84aa5b4b1ead19fd8e120feb8cfce3fafd10b59a21d9f5480e6b77575d47c9f1237fc459231b617241bace853a7dc13f93200df9cf6a733de5c8ba85f13501452a5c552c14017fa7f79d1fa88f48ffa505dca1e31e581af4b382237f61d16e +Sig = 9301ae4d76e84df108b70d94400c0b2dbf0b024fd5cdd5821c408ca2f52b7d4466a43abcbd8f40e9c07c4e4e56ad1ff471327e2e997d4e372d82c3e9f9db4d40d4d6308b4f7e5ac91c4ee2c194c038f8275dff82b9cce56ccbbd2ac3d12550f184b1cf938cefc85afc588c45c1ea055da0d4dadda266895cb4b84b846d8fac13 +Result = F + +Digest = SHA256 +Key = 30818902818100a16c7fcbb8d6fc602277e9cebb1790bd14999ef7670400c0bd0ea6116fc72e29b868c8b62ada0e7b4cd351b5a76c177f158b4f724f1d287d66df114eabd68e3e8d12409b69f96e334c0daff79392d184b9102ea5c4ec13052bfc509d9ae76851e8557a417b86e9d37687d243cf48812ce621c5f39404cd6b22a60beef744a42f0203681201 +Msg = 2ab6c6ad26e227177b6458a1caf18bc083c162a1f18b0fbc77b0baac19b7223e3df988c8b39dc9bcf4c7ca7ca70d18706a2bd057cef7bddaa397c16777f1763c596314c2e3b4961d774b1801c89f84c79cef6dc0d1333bc99e52891f1c95cb75055c3444bb10d7638c580cd7349015eca37701850127d1b0f04bda7d118c6a11 +Sig = 8a270d2b49cd2897df192e12121ba6b92304e89a429753727e8cd7fd8395ee72788ecd58d91ab99b4385778fb8f9a5458a79790def0c05de8b5646c16f2f8f67652708573216f13335fbac257e4f6e46119fe5b50c309a7c01731c8f8fc240fc68f08f25879a32156dcded375c6ecaf0bf861066de3a034bbc00844dc74b8b6f +Result = F + +Digest = SHA512 +Key = 30818902818100ed88e482e9d7d30dfb6ff2e20bd93b5cf028fd5e49f9415b72f77602e688e9ce0d153c5131cf1223ee78e322f207edc1eab0832efeed4146e3af7715a301fe847605e009d18c05db26b3034ad84ecbf2728a6d384694625528e1002a83f47166e46dac3d0d7d146fc06419a2d2a64a9482267bbf30d666e694e5b2180c3e8f09020322478b +Msg = 079d6e31776603dd6cd9f0856940e75fdf130e4846beb3ab6ba33ca30c635c64a2598dd77e68ba8417f73bb5a33907d8e4b2252645f7648225b54ca473f454767b9d56beff3a3ffe8afe0b980105f1367bdcda69524418917b3355fc121cc9523970b1302365fc136cf64778ac2b0b414b9a155b972e379e13273ef4126223be +Sig = 9563554bdd55d7eba323e370a74810726a6357780b763aa86d8c1e0394893db72bf85cceb76ed11e801483717d746169cdaf652c9cc11e0fa006166e05e54d1c2dbea9f8a01402f929d8d8e8eb0f1f028b98a779d9c44642df01ccc649cac24a4cc760cf52bd7eb4bc0f1809be7cdded3e0965f3462841ae6d0a1626e061bc4d +Result = F + +Digest = SHA512 +Key = 30818902818100ed88e482e9d7d30dfb6ff2e20bd93b5cf028fd5e49f9415b72f77602e688e9ce0d153c5131cf1223ee78e322f207edc1eab0832efeed4146e3af7715a301fe847605e009d18c05db26b3034ad84ecbf2728a6d384694625528e1002a83f47166e46dac3d0d7d146fc06419a2d2a64a9482267bbf30d666e694e5b2180c3e8f09020322478b +Msg = 6284989fb234eeb086e39dadb61cd985c75ff1e00fb88c561a9632de4ddb0f89c930f470939b9feaf1533c0317d32c2a022d042aa5a1d95c436ebb1a1ce87f764bcbc22cefcf2ad6897cef5fa5409ababdbf0dd45a6ac4c77c535a503c3f4f83b0fd08bd0ff717db1507bda9a98cad9dbebc13c6773cd5ff8eee1968f60a0717 +Sig = 0db9d569fd848047e693ef1826fc1b7aaf1fe449882843455dab2829d418fde0b90b6c2a0ab2bf1122ded1708c9442b05a6a44d42bf5313ea793ca1482825e8327247d3f35a7fc43457a3f55c60e3f506d9df6b7037ab5db46b440edf014b4def3936a3ff7c1feb4e4ff366731ef519e4408863ae2e8048bbfbdc9101857e893 +Result = F + +Digest = SHA512 +Key = 30818902818100ed88e482e9d7d30dfb6ff2e20bd93b5cf028fd5e49f9415b72f77602e688e9ce0d153c5131cf1223ee78e322f207edc1eab0832efeed4146e3af7715a301fe847605e009d18c05db26b3034ad84ecbf2728a6d384694625528e1002a83f47166e46dac3d0d7d146fc06419a2d2a64a9482267bbf30d666e694e5b2180c3e8f09020322478b +Msg = 310c04b35510e779f1b1e7177d18d32eeaffd15b2b210054f4ee5b33c284e1111bdbf3d7173ffd511f045884f5756f42f40d21fb9aea67d6437e37003788a844e74256dd74dc0888712a90ddea9af3dea568cad1a715e84bfa153d8eaec8fa141eabf66c75d05145708b57c9656fa72c847894845d8acbdba21a36822e2b21a9 +Sig = 9029571a3b5a0c4c5cd165661cec2868c896240281172a4089d5bff1214d7721a692383bc733d131ff7b5b41f1c8a15428b4d80bb3b225bd381edc5df7ab230e499116e4b336d1b0731e55782b088eacb9c7cc4e31a629d29dd81a31d87f0d169b975f7214e356d28366002ae65dcfe857cb1be25083e8d5c24303a52b73fdce +Result = F + +Digest = SHA512 +Key = 30818902818100ed88e482e9d7d30dfb6ff2e20bd93b5cf028fd5e49f9415b72f77602e688e9ce0d153c5131cf1223ee78e322f207edc1eab0832efeed4146e3af7715a301fe847605e009d18c05db26b3034ad84ecbf2728a6d384694625528e1002a83f47166e46dac3d0d7d146fc06419a2d2a64a9482267bbf30d666e694e5b2180c3e8f09020322478b +Msg = a86c47e276bd53067d97392bbdffc290d338f3b38fd8d409e22176f1fd8d33ebb7ab38052f2a4197b333a430e1fd91d00c9b9858e2186b3e4bc5e68594d24cedcc1cd4676e4664cb410b9ccd7dd2162e2f83ec2fde9a7b4b6f7a67254603e0c0ae6623ee7b38430beec629ead8a9d910029af820cd878b9716e602b95c4975cc +Sig = 85b7f16f782fb9ce2bc1b00114aec5fedf2e279ba0bdc4ae6a0e38e41bab63353ced11ccf3e55c8fd5dc99736f97ff891d13ed59c1f123ba4ce3daffbe08aedbbb7a0a90ac042fdc3f54253eb61b29b64f194610d42087189763baa351e0fa61b50a5c9875c0ca8538bf2187ef37d0cb1e6b5352bd017064955f2a0740db628f +Result = F + +Digest = SHA512 +Key = 30818902818100ed88e482e9d7d30dfb6ff2e20bd93b5cf028fd5e49f9415b72f77602e688e9ce0d153c5131cf1223ee78e322f207edc1eab0832efeed4146e3af7715a301fe847605e009d18c05db26b3034ad84ecbf2728a6d384694625528e1002a83f47166e46dac3d0d7d146fc06419a2d2a64a9482267bbf30d666e694e5b2180c3e8f09020322478b +Msg = 155958a8c08e561a69d5f41efe76304ffb0ffc658a2c8765ee17bd1521f211b3bc027ae6184ebbf5b369e837d58c26cb73e7b28853392537719ff600a2a9402377b3c5e9647334d921cea72e51f07089629b15e4b4bf99c7fd4cfdbeec44070a0c144297ec24462e7dad39ecbbcb96f38fd32d5ff4e66c7c5ac6dc3647e9eed0 +Sig = 5535cc093d3e54097bace607a8f75ec913c4d0219663ce6a3b493480d14bac47e85d23c1b7562f91df292725965c31450558f46904b8e50b42bf2e0b6308056aa83691ca2349e39d167baf17d069d11db8390dcfe04b5550137dca253ed5c614cf9e50eae496bddb27c70ff6615a5c5b8a340fa314dd672dcb5d214728d51002 +Result = P + +Digest = SHA512 +Key = 30818a02818100ed88e482e9d7d30dfb6ff2e20bd93b5cf028fd5e49f9415b72f77602e688e9ce0d153c5131cf1223ee78e322f207edc1eab0832efeed4146e3af7715a301fe847605e009d18c05db26b3034ad84ecbf2728a6d384694625528e1002a83f47166e46dac3d0d7d146fc06419a2d2a64a9482267bbf30d666e694e5b2180c3e8f09020400903695 +Msg = 0a87d48ac27cdc05dfbd93afab38c18a339beb5055180e5a196694c0450880c22bd1ec67c6a8b5630589753e67ccb1b3c8aa54577bfd5c7b9847d45297f602571ee6e1e91828d23807028e659b365fe583879027837a2176c75ac020777ef5d88bcf9d59e184994c8c30c76c70ff31e80c3c85089617c6144da640720b29c10e +Sig = d808e2fc131998e6ac727bf628dee867b9849f47bb92ab663192e83659e5091511db6bd36bd2e5281fee2157549212982748584abaad8b188e389776896f5b60b82441b6fd83b6494ede3f6bb74a795a10c344b557b92b13d8b7f172721720664a5e3031d218ff2dde8aeecd21d6c96ecac396ef78001fec388ea8ac9bb17e9a +Result = F + +Digest = SHA1 +Key = 3082010a0282010100ddc1676352ca011a235db9b4bb41eab81a9f3447a34c3626a531e3319665edd9c9e269788323ac7f2db36b9106f4b2148b7c7a309a0b7482ff08cc97c792bf8e2319f42aa51078a29a4ff90c0e29563059a8608e8809a04bf45f1334b23631d99253ba230dc640ffc3a70c27ce5fc7ebd1adfe68e4462790007b39f5d5b47dd9bd04d0d08ac3b586fd6cc8e178d52ecbc09434d4b89d83cadef6c53cce17788e87b551aa0b507893f308e23da919a4aa01183ddc831a99a3e3c4e5bffdc7e8c8b6800699abdf11569ba66e5892b2e55c6f8578a12f5e304dc28ffbd5ee2dfd2bafabac77ba67031f588e73cf7ba344396d166f5392ad36187b45e15916aaf5b70203748d77 +Msg = 9e7d8a94561c95facc082974fcdbcb813e1b37fdcbb1013a7d9c7c53d6e6dbbd44d7961fa36a106404fd760ead4ceacd61a0e150e144c95bb239f01a212aa1b585a29024c47d7745189d022b13dee9b9e14b5b70ce92a38607b50638a503ea61e7473e4abf3f15c4914f947437770f6f48836f079a81d7e4057887566a5700e9 +Sig = cd0a22729f6a2eb4c7bd6c1ebcb9510ba1aa6e8921109d7c1fff6f7cfc36691b69e89656b9d7cead82356efd740faeddb0e3cba5a98656b841f2e98d296b995b758074fbd97af3baa4b28e9df89e9246eed76ae3eca1bd213a81b5d15411dff648b887a8835fa2f7bb2f78be5c4be8dfb1ef0d6b08319685edc437e56da3c8a532ec8c7382f74859530eef7adffa68ede91e3fe4bd29f43bc8ff813fec7d0a15aee6de202e4f32fbce4621807cfab47bc395ac10368d931bd73a86d40a38cfa898668cf76f0f4eff32223c0e452132c36b2c16f228286abe0f3fd4f0eb73e5ad989ca19872097948c6152320daed43bc2a98c3468a610d13ca086bd8ea89bbce +Result = F + +Digest = SHA1 +Key = 3082010a0282010100ddc1676352ca011a235db9b4bb41eab81a9f3447a34c3626a531e3319665edd9c9e269788323ac7f2db36b9106f4b2148b7c7a309a0b7482ff08cc97c792bf8e2319f42aa51078a29a4ff90c0e29563059a8608e8809a04bf45f1334b23631d99253ba230dc640ffc3a70c27ce5fc7ebd1adfe68e4462790007b39f5d5b47dd9bd04d0d08ac3b586fd6cc8e178d52ecbc09434d4b89d83cadef6c53cce17788e87b551aa0b507893f308e23da919a4aa01183ddc831a99a3e3c4e5bffdc7e8c8b6800699abdf11569ba66e5892b2e55c6f8578a12f5e304dc28ffbd5ee2dfd2bafabac77ba67031f588e73cf7ba344396d166f5392ad36187b45e15916aaf5b70203748d77 +Msg = 2dc3fc128057e1c291f9b55ace78d9473dcd3560a7ac7d1bfc59b301f3bdee5ff1b9593f2cba7e96108ec5bfe2763728a37c884c370655e1c6acaa526347c76feb4a24643056b2e7570864b67f16ee41a49acda3c2ad87d73d38342980073deae41f6468d452041e30109a27ee8085f907cf0a4f91c99b6728a6596e9326d739 +Sig = bb75bbdbaea3269a01bd9b5e492178b7ec11abfb59d417cd5cdabb8a4b922b0f21ae69e9da7a9f628c9cf396bfeb75c836bf734561e68e91fbefeaf0f57f261c936bef741527187a5315dbf584f332fe3ed8a44367688e28998675c31f2b1cc3fa87faa4abcadff5fc64025c9589149e41c45a5037fe1c27d320d5a40ab6119b639ba052ad1d8a0339fd3a03f1356bcbc056c4f604862df36b66685feccfe5f93f2fe0c957a02e8d41a574ab0e56d8672d338de761fc9e9a1b801ac5dbd56c1592efa77f782d1dce3531efa5c7f569ddc313f5dce62466ddf269bd5b780f7c7c68b5232e1f77f7b4a8eef8a978eeb56d691c3e4a95965867c61d3c8e7badda1f +Result = P + +Digest = SHA1 +Key = 3082010a0282010100ddc1676352ca011a235db9b4bb41eab81a9f3447a34c3626a531e3319665edd9c9e269788323ac7f2db36b9106f4b2148b7c7a309a0b7482ff08cc97c792bf8e2319f42aa51078a29a4ff90c0e29563059a8608e8809a04bf45f1334b23631d99253ba230dc640ffc3a70c27ce5fc7ebd1adfe68e4462790007b39f5d5b47dd9bd04d0d08ac3b586fd6cc8e178d52ecbc09434d4b89d83cadef6c53cce17788e87b551aa0b507893f308e23da919a4aa01183ddc831a99a3e3c4e5bffdc7e8c8b6800699abdf11569ba66e5892b2e55c6f8578a12f5e304dc28ffbd5ee2dfd2bafabac77ba67031f588e73cf7ba344396d166f5392ad36187b45e15916aaf5b70203748d77 +Msg = 02e74a1d1d61bc6c856a20fecdd64c6a011542b3e7629c1c843e2d3ee21de557115ff5e56c8134741d95c1b4e4efeace14224df8de2b3d48d1eb68c5a2dbb6c429fb7472ad0bb1ad61fee8182eace06eb3c7d1168b10c8f8ceca4c90da6f424053a30eeb6866fbbf588ddd523573f5f1e9ec1435767a03d682c423c412435174 +Sig = 7aaab14a1a89468ab4b583a8ad03df515e5d34b0c36eeabff6c4532385d448ce99e4ba35c927751cd499fe3080e004a903afe833667965fbd2d97f8a4b617f805ec88bba1133c5c304e2183797887db331a597d1e5f673264f6fcce750b504ed24fc066af248833d42cee935779bcfa02b73dcd29254b4dcbe831b70c289f6998884bd216f320e4615fec8181d17654b7201b62e8610e69dbd8cbad6de1a5cc1b4619b2680e7ddc27c02a9b8dde6efecf0f6c4551bd38b46f10e78692887bfae9cde1cca4e33733797144c6cded6b58cde54c5b877e5d10d4775200c0f4eff5ccde7a42788ac22f762411da48826b670297f2b07435d61a31e063ec1a2791a32 +Result = F + +Digest = SHA1 +Key = 3082010a0282010100ddc1676352ca011a235db9b4bb41eab81a9f3447a34c3626a531e3319665edd9c9e269788323ac7f2db36b9106f4b2148b7c7a309a0b7482ff08cc97c792bf8e2319f42aa51078a29a4ff90c0e29563059a8608e8809a04bf45f1334b23631d99253ba230dc640ffc3a70c27ce5fc7ebd1adfe68e4462790007b39f5d5b47dd9bd04d0d08ac3b586fd6cc8e178d52ecbc09434d4b89d83cadef6c53cce17788e87b551aa0b507893f308e23da919a4aa01183ddc831a99a3e3c4e5bffdc7e8c8b6800699abdf11569ba66e5892b2e55c6f8578a12f5e304dc28ffbd5ee2dfd2bafabac77ba67031f588e73cf7ba344396d166f5392ad36187b45e15916aaf5b70203748d77 +Msg = 4b4f319b5c8c53e7a4749c4ee58b0b25365a96da57721b2044af994c0abaa0ffdad106065ccbdc7e4556a03c2c84b46c9a860f7760b7332b2ddc5f165fa905321a887ec89797fd8ebfefc212f92c905c402a60cf780c57510283f6ac8e4d913330fb02a8b7f89e5d3ac7689af38c853f50cef0aa487b6fdbec2cc6d63eab2a49 +Sig = 1ee9549fc8cf651a593e8c4516cb1b3d58099e6334b2b35c5da1e1c549e4a7769e92d51b52f622d5da43f8778c0e0f860f7e3a02268ab7a64523c0eddfd7db7941896a67bb33895d577be6c8c86af72d4e2feb5968eb2f04e462a2ed9e648c36c2d6667832a640d393fc11494a7379fb4fd6f0bff27718d8c9cfe0c9f2dd82472dbb6b751a5398be3f9aa67919461efa7bac3c6d5fc42b2149acdf29f8a30a98ac89a6a48833a3b2658111094372616986479256617247e60d95bf797b503d0dfc61b6336beed318d36e9f3575454cae1df787ff7f163f40598694ac891e09f743e02f442a1ab5ce1148cb66fde982ccb8ec945e59c57cfd5747cd5de5f3bf12 +Result = F + +Digest = SHA1 +Key = 3082010b0282010100ddc1676352ca011a235db9b4bb41eab81a9f3447a34c3626a531e3319665edd9c9e269788323ac7f2db36b9106f4b2148b7c7a309a0b7482ff08cc97c792bf8e2319f42aa51078a29a4ff90c0e29563059a8608e8809a04bf45f1334b23631d99253ba230dc640ffc3a70c27ce5fc7ebd1adfe68e4462790007b39f5d5b47dd9bd04d0d08ac3b586fd6cc8e178d52ecbc09434d4b89d83cadef6c53cce17788e87b551aa0b507893f308e23da919a4aa01183ddc831a99a3e3c4e5bffdc7e8c8b6800699abdf11569ba66e5892b2e55c6f8578a12f5e304dc28ffbd5ee2dfd2bafabac77ba67031f588e73cf7ba344396d166f5392ad36187b45e15916aaf5b70204008ffac3 +Msg = f62e0e07bb71ca7f93736ce1d2c29a4fe7a5c8769955a364916ab09a19943063238b48648d495e73a376c6ade6249ec20cbcf69447383501ca93b7fc8a7ebbe341557d0cb9519fa247ffcdaf95f1a179a5b3c4121300572b9b369129da08a97b5973f62ac7f355b186f6cb106a916b1cbd727a198616d28a0a3c84489499c1d2 +Sig = 66b378c5fa44c443f0ec885d55dc877612246703342fc8ef38a98c26325e52b9772f30d29f4a23b67153cdab1f84a615208ef809d84be83c57cce32ec9f9dd07a64af14f964c73d5a8f9fbafc07a68dd046cfed8e1c54c6fed3a4bb7c9ec153b64bb6c1591f1f78f834c44153da1dafbaaa9d44b8406108d70577ea8497b33aa09c5f2b63906949f1ac098d34c82a80a37d2f4164ea88bcaa30ead54f3b0391485a8eba084de3be452de37dc52d278d757c70c1b75bc1ce7c1441b0cfed2ec5e045bd77e732715c593e2a3b21ad81f7f92b6eb9ab23f84cfbdadfc89c75dd4474e752bcf479805f2b4fc5b953e2aa82b72044fb865cc93124096c14e0a645947 +Result = F + +Digest = SHA1 +Key = 3082010a0282010100ddc1676352ca011a235db9b4bb41eab81a9f3447a34c3626a531e3319665edd9c9e269788323ac7f2db36b9106f4b2148b7c7a309a0b7482ff08cc97c792bf8e2319f42aa51078a29a4ff90c0e29563059a8608e8809a04bf45f1334b23631d99253ba230dc640ffc3a70c27ce5fc7ebd1adfe68e4462790007b39f5d5b47dd9bd04d0d08ac3b586fd6cc8e178d52ecbc09434d4b89d83cadef6c53cce17788e87b551aa0b507893f308e23da919a4aa01183ddc831a99a3e3c4e5bffdc7e8c8b6800699abdf11569ba66e5892b2e55c6f8578a12f5e304dc28ffbd5ee2dfd2bafabac77ba67031f588e73cf7ba344396d166f5392ad36187b45e15916aaf5b70203748d77 +Msg = 60c3a8bb6b10b30395cb1a4b8faf39cabe5cc3b79057b769115390bdb9afbdb8883f506d564ffa2164e537ae3647c625a5bd5cb7309899d693733b979bb9925b386834aed414f16fe32e0932bb869de2a60f64ab36e29f16d9864f76ad6fa58496c4ba468d6680353b2df99ec675a649ebd943594d3eb1730c1434229ad8de7a +Sig = 5d36b5e092060e763963b87b41b027a1356a1d5068c8ddee205f0b012c27d6906e75ec2fa93cb840d69ff3c149653802659ef116c7d740afd3c4050193cb488493a9bf1025ff3918ffdb073e5b2f705eb771e1e7c91dbb9a9e18b1a36951d60671e25e4042776ca265bbba032b1dd5aae000737c49583450e072c4571ece1b5af9403bec0ee4eeb1e14165c8df6d2eeb93f10ba3dbcb9ff92abc2773d044560fa162e9e5b7f6915184e6ff3548df75ef7fdc8f2c869edbcb1b4a6598fd1acaa394f501eefc3fe5e6945f4143509d6cf8b4c8418e4f26f53400fc50d00cc4491ad16b58785fcc6f123d52b482764225f66998b3abc3b3e2d5e8741f3170ecc574 +Result = F + +Digest = SHA256 +Key = 3082010a0282010100c47abacc2a84d56f3614d92fd62ed36ddde459664b9301dcd1d61781cfcc026bcb2399bee7e75681a80b7bf500e2d08ceae1c42ec0b707927f2b2fe92ae852087d25f1d260cc74905ee5f9b254ed05494a9fe06732c3680992dd6f0dc634568d11542a705f83ae96d2a49763d5fbb24398edf3702bc94bc168190166492b8671de874bb9cecb058c6c8344aa8c93754d6effcd44a41ed7de0a9dcd9144437f212b18881d042d331a4618a9e630ef9bb66305e4fdf8f0391b3b2313fe549f0189ff968b92f33c266a4bc2cffc897d1937eeb9e406f5d0eaa7a14782e76af3fce98f54ed237b4a04a4159a5f6250a296a902880204e61d891c4da29f2d65f34cbb020349d2a1 +Msg = 95123c8d1b236540b86976a11cea31f8bd4e6c54c235147d20ce722b03a6ad756fbd918c27df8ea9ce3104444c0bbe877305bc02e35535a02a58dcda306e632ad30b3dc3ce0ba97fdf46ec192965dd9cd7f4a71b02b8cba3d442646eeec4af590824ca98d74fbca934d0b6867aa1991f3040b707e806de6e66b5934f05509bea +Sig = 51265d96f11ab338762891cb29bf3f1d2b3305107063f5f3245af376dfcc7027d39365de70a31db05e9e10eb6148cb7f6425f0c93c4fb0e2291adbd22c77656afc196858a11e1c670d9eeb592613e69eb4f3aa501730743ac4464486c7ae68fd509e896f63884e9424f69c1c5397959f1e52a368667a598a1fc90125273d9341295d2f8e1cc4969bf228c860e07a3546be2eeda1cde48ee94d062801fe666e4a7ae8cb9cd79262c017b081af874ff00453ca43e34efdb43fffb0bb42a4e2d32a5e5cc9e8546a221fe930250e5f5333e0efe58ffebf19369a3b8ae5a67f6a048bc9ef915bda25160729b508667ada84a0c27e7e26cf2abca413e5e4693f4a9405 +Result = P + +Digest = SHA256 +Key = 3082010a0282010100c47abacc2a84d56f3614d92fd62ed36ddde459664b9301dcd1d61781cfcc026bcb2399bee7e75681a80b7bf500e2d08ceae1c42ec0b707927f2b2fe92ae852087d25f1d260cc74905ee5f9b254ed05494a9fe06732c3680992dd6f0dc634568d11542a705f83ae96d2a49763d5fbb24398edf3702bc94bc168190166492b8671de874bb9cecb058c6c8344aa8c93754d6effcd44a41ed7de0a9dcd9144437f212b18881d042d331a4618a9e630ef9bb66305e4fdf8f0391b3b2313fe549f0189ff968b92f33c266a4bc2cffc897d1937eeb9e406f5d0eaa7a14782e76af3fce98f54ed237b4a04a4159a5f6250a296a902880204e61d891c4da29f2d65f34cbb020349d2a1 +Msg = f89fd2f6c45a8b5066a651410b8e534bfec0d9a36f3e2b887457afd44dd651d1ec79274db5a455f182572fceea5e9e39c3c7c5d9e599e4fe31c37c34d253b419c3e8fb6b916aef6563f87d4c37224a456e5952698ba3d01b38945d998a795bd285d69478e3131f55117284e27b441f16095dca7ce9c5b68890b09a2bfbb010a5 +Sig = ba48538708512d45c0edcac57a9b4fb637e9721f72003c60f13f5c9a36c968cef9be8f54665418141c3d9ecc02a5bf952cfc055fb51e18705e9d8850f4e1f5a344af550de84ffd0805e27e557f6aa50d2645314c64c1c71aa6bb44faf8f29ca6578e2441d4510e36052f46551df341b2dcf43f761f08b946ca0b7081dadbb88e955e820fd7f657c4dd9f4554d167dd7c9a487ed41ced2b40068098deedc951060faf7e15b1f0f80ae67ff2ee28a238d80bf72dd71c8d95c79bc156114ece8ec837573a4b66898d45b45a5eacd0b0e41447d8fa08a367f437645e50c9920b88a16bc0880147acfb9a79de9e351b3fa00b3f4e9f182f45553dffca55e393c5eab6 +Result = F + +Digest = SHA256 +Key = 3082010a0282010100c47abacc2a84d56f3614d92fd62ed36ddde459664b9301dcd1d61781cfcc026bcb2399bee7e75681a80b7bf500e2d08ceae1c42ec0b707927f2b2fe92ae852087d25f1d260cc74905ee5f9b254ed05494a9fe06732c3680992dd6f0dc634568d11542a705f83ae96d2a49763d5fbb24398edf3702bc94bc168190166492b8671de874bb9cecb058c6c8344aa8c93754d6effcd44a41ed7de0a9dcd9144437f212b18881d042d331a4618a9e630ef9bb66305e4fdf8f0391b3b2313fe549f0189ff968b92f33c266a4bc2cffc897d1937eeb9e406f5d0eaa7a14782e76af3fce98f54ed237b4a04a4159a5f6250a296a902880204e61d891c4da29f2d65f34cbb020349d2a1 +Msg = 915c5e4c16acfa0f49de43d6491f0060a944034475ba518572c08366a8d36c7f1e6afc11e5e4649757bf7b9da10a61d57f1d626847871d8a2948e551b54167c79de88d3ebd40a3e35809b996a53348f98a9918c7a7ec606896ed30c271e00c51953dd97aa6a8fe1cd423c3695c83fcf45120ec0a9cd1644642182b60e599a246 +Sig = 3d57ea5961db8fc144301ca4278f799911229d865ea3e992c7fbc4d03c6551729e26034e95dd71da312340e4051c9dd9b12f7700a821fe3b7c37785d5106350b667ac255a57c13da5842d90bcadea9e6b1f720c607d6893a2caa3c5f3c4074e914451a45380a767c291a67cac3f1cab1fbd05adc37036856a8404e7cea3654019466de449ad6e92b27254f3d25949b1b860065406455a13db7c5fe25d1af7a84cddf7792c64e16260c950d60bd86d005924148ad097c126b84947ab6e89d48f61e711d62522b6e48f16186d1339e6ab3f58c359eb24cb68043737591cd7d9390a468c0022b3b253be52f1a7fc408f84e9ffb4c34fa9e01605851d6583aa13032 +Result = F + +Digest = SHA256 +Key = 3082010a0282010100c47abacc2a84d56f3614d92fd62ed36ddde459664b9301dcd1d61781cfcc026bcb2399bee7e75681a80b7bf500e2d08ceae1c42ec0b707927f2b2fe92ae852087d25f1d260cc74905ee5f9b254ed05494a9fe06732c3680992dd6f0dc634568d11542a705f83ae96d2a49763d5fbb24398edf3702bc94bc168190166492b8671de874bb9cecb058c6c8344aa8c93754d6effcd44a41ed7de0a9dcd9144437f212b18881d042d331a4618a9e630ef9bb66305e4fdf8f0391b3b2313fe549f0189ff968b92f33c266a4bc2cffc897d1937eeb9e406f5d0eaa7a14782e76af3fce98f54ed237b4a04a4159a5f6250a296a902880204e61d891c4da29f2d65f34cbb020307485b +Msg = 03d2f0693517cffb2b724c1f30502c5359c051c1bcd88dc1dd54b89e6981009d275a813b2bf016b74d0f6ed0d91e62d0884785c9afd8fd1fb7e99246cd4005cdda71a39cb649197a996d8ad2d23fdfb6bb015f24ec3d7f88af64fb83b4b525eb06607d133eec834cf7d6c9ab817b4c0dda370459d9cfba05ad0c1adc86a909fe +Sig = 511abd82218cab344979b2887b02600d2427f1eb12ac01d97684c2a443a9272834c3f79cded07a39dbee3770dde827a74dc994b17bfd8a26d07b239d26d58c42f79d560264c31b7e1c3dddef6d7556f228c394414f4cec561c3da2686a8eebec7702f32850809a93deeb84b2a02fcdba224d2fd9efb8e056e796f49b57d56e9f3e90d0b49b08bdee93a2e12e676fb4d4fa838c5bd88eda008f1b592a72465587be0ae17d9b156b904f44a7e04d3b58d24ad67b71b0f4c699fa51639546b62b9f83597ff03d465f1bb396ae15e92d0e92e85647d5df113e2c7518d0e3ad2e7aa7dac720c98347aa151e4f37fea081dbed350cc9c93f606b38f21a3e5de6d140d2 +Result = F + +Digest = SHA256 +Key = 3082010a0282010100c47abacc2a84d56f3614d92fd62ed36ddde459664b9301dcd1d61781cfcc026bcb2399bee7e75681a80b7bf500e2d08ceae1c42ec0b707927f2b2fe92ae852087d25f1d260cc74905ee5f9b254ed05494a9fe06732c3680992dd6f0dc634568d11542a705f83ae96d2a49763d5fbb24398edf3702bc94bc168190166492b8671de874bb9cecb058c6c8344aa8c93754d6effcd44a41ed7de0a9dcd9144437f212b18881d042d331a4618a9e630ef9bb66305e4fdf8f0391b3b2313fe549f0189ff968b92f33c266a4bc2cffc897d1937eeb9e406f5d0eaa7a14782e76af3fce98f54ed237b4a04a4159a5f6250a296a902880204e61d891c4da29f2d65f34cbb020349d2a1 +Msg = dffe42bfda886e1a73fe8a8dfcf71c9fb44deb054588a9bb9199d554aecce08f2ff88f2aa6f8a0fb675fb03c8e685c27432ca7c33c189bfd849d34fa7b2979ac1f57eca389632426bae0b98398ad60a3342557e14e96041c1bf4d90b46cf7ad1348322d28caf43c4f7e86c0924ae703c109ec50a84ea2a43df078c3015a52b28 +Sig = 8f4dd479239f2d08dc05d7d40539288b67c4d77210ecb16be76f0b1925e8b088570831e361a1ca57893135f8af64b8e2996b8d635899da4e04c68acb9b1b3813697d57da90c57f18509e0ab6705c704feb448cca5c07d258ecd884ab93f508cefdb25f2bc3061c4006099e2e33b27972c3edb0a0a33114d381c82ab506d041ff680af595ef3400a8bb6774030d2e38dd304272092bd32a553017f7bda4b998b27aa8aca12def327b1f11063a5342b0d55738183417d321c5682fc4ab64e79174216feebb989521e1e3d827647068003be34fe1d093964d28f4877c49b4065672448597a89b91919cfb55ca13836e7e6f3b3fd04f417cf1c16d9872538bf4e87a +Result = F + +Digest = SHA256 +Key = 3082010a0282010100c47abacc2a84d56f3614d92fd62ed36ddde459664b9301dcd1d61781cfcc026bcb2399bee7e75681a80b7bf500e2d08ceae1c42ec0b707927f2b2fe92ae852087d25f1d260cc74905ee5f9b254ed05494a9fe06732c3680992dd6f0dc634568d11542a705f83ae96d2a49763d5fbb24398edf3702bc94bc168190166492b8671de874bb9cecb058c6c8344aa8c93754d6effcd44a41ed7de0a9dcd9144437f212b18881d042d331a4618a9e630ef9bb66305e4fdf8f0391b3b2313fe549f0189ff968b92f33c266a4bc2cffc897d1937eeb9e406f5d0eaa7a14782e76af3fce98f54ed237b4a04a4159a5f6250a296a902880204e61d891c4da29f2d65f34cbb020349d2a1 +Msg = cfe99788f55ec6944942bd0a187d51b80fd8bd4051bd4f07c73e614eb75a8b9f997b176b2642b5f1b1877061ba9ce142c1d2a311583f072b7cbe08ed253681191c209d7b0d438fcdddc284d93d59d6dd80e48333a921dd31c9b6834f88768f8701e01102d3e8bdf074fbe0b8c93d9951f41545ef6eeb3be35530babc079f1fb3 +Sig = 9fd6f6107e838107f906c26cb2910704599f175b6a84db485fbc30776eb7fd53bfe20c38c537b154a3e519b662bd9fdc8e3045e21f6e5ae97d0ff6a9d8632825544525d84f99f80e3ed4e69dc5e219d59ccfbb37c23c84fe3b3e6fb22f402f94e5225c6387fdf8bcdb3508f8832908fe05771521e92234348004e8fe19a8f24bebcab9f074327c88d066bc12081748d696be6135c6aea32220ea786ebd7800e6936365ff25831c28cb6c8a59237ff84f5cf89036cff188ee0f9a6195f2b1aca2e4442af8369f1b49322fa2f891b83a14a97b60c6aeafd6c2928047affda9c8d869ff5294bb5943ad14a6d64e784d126c469d51e292b9ce33e1d8371ba5f467b3 +Result = F + +Digest = SHA384 +Key = 3082010a0282010100c858aea188541c0dd2626eec9a8c98511ca03870353128c1687d94a1be762a4940fca789831a720e108f2f7c1fc20aab38336b5668205d62963c51aad74757183faae7c0c59b9f679e96393e7f93e8a30ce99fed1b8e85e7146bd69a3f8dc5734bbacd51359f4f66aa507fbf4e69708877f7cd7cfb6868006e330869d9eee99f466962b0dee9080d9413bdec2e41445190394a49ecb191167350be411cdd6ade4eb38c4c4bf891b43c91b5981a3bcc8a66f85e5cbaef751e3cbe94c7f193fd78ac55048800250d5cc9e41b89319ac3d0258aa640299e165b0cf7e5e108f76a12f72132f6a2a4c239df0544d3d8407b94f9f38e9156c825a7eae001543fb264eb02032a26db +Msg = 6c1c4396f7b7f9228e832a13692002ba2aff439dcb7fddbfd456c022d133ee8903a2d482562fdaa493ce3916d77a0c51441dab26f6b0340238a36a71f87fc3e179cabca9482b704971ce69f3f20ab64b70413d6c2908532b2a888a9fc224cae1365da410b6f2e298904b63b4a41726321835a4774dd063c211cfc8b5166c2d11 +Sig = 422e70ace2a2c07d2adbecd9dd5714c42d0e768d48bc33fea822974e42ecf99c791276e44936e70b183e712e0dd9b484199b92f24a76c6908faf6bc20fe266fa03886781cead7c82aeeebdd150bf48ae4698e76807ef24d29f3cd5590395f4725dbe7e468540b4d4d8be84e673bff86b0c08af17e738af91cee4f14367dd6bedf71b5e8e148b61ea968f16160604834831d557879542598be7d2fd01c7966f0ae1ec2554d8dd653f20c551a1de6212481e2a19a3e2fa9cf005e5f3ee1962c34e3e85f84104f9172debf89db438c32f2a8061ac15d3cd3f3a6b7d75fd7c3f8ea0c505c6398d1e70eb12e9e16f5a0e4b459c02ec38f0dfc7a4a3139c1fba6f59b4 +Result = F + +Digest = SHA384 +Key = 3082010a0282010100c858aea188541c0dd2626eec9a8c98511ca03870353128c1687d94a1be762a4940fca789831a720e108f2f7c1fc20aab38336b5668205d62963c51aad74757183faae7c0c59b9f679e96393e7f93e8a30ce99fed1b8e85e7146bd69a3f8dc5734bbacd51359f4f66aa507fbf4e69708877f7cd7cfb6868006e330869d9eee99f466962b0dee9080d9413bdec2e41445190394a49ecb191167350be411cdd6ade4eb38c4c4bf891b43c91b5981a3bcc8a66f85e5cbaef751e3cbe94c7f193fd78ac55048800250d5cc9e41b89319ac3d0258aa640299e165b0cf7e5e108f76a12f72132f6a2a4c239df0544d3d8407b94f9f38e9156c825a7eae001543fb264eb02032a26db +Msg = d6a169031049b0b3b582d22bf40b9fca45d2618457146c2b4ac6f6ed1f34291f6de8773955cd2e21b7944caca65794621a7ce181e5ddbb45e9252867877dc4e35b6914ff26ec18890bf31f60fff1df367bc6c59373e58a1d8cb607188a394a2907ede95f6bf096731867f44fe520aacece76b5c3ea75023c9d3f3c080eaee376 +Sig = b9794f252e6907dc4c41de42ea5a0e6361114ac3814c4a92583ca70fd78e98190a0d9215bd5282e8520422093eff2e1cfa335cffcdcc27fe9bafe4516e74445d4aa17a08db754fc69b156d86ff26eb9e814f605142a3051d2fa64305d3e5c5c5f67c7d9e38c5054d069c14b23e4278fa5a73381f61f90a9ec428c883f1366e27ec0219db8c942582a284c161eead307285d0e4df6b0d7dea0e8216d7ef2e4b2ede2296e0b780e5a3f8d15f123f737b9d6170074f758de32b6f1e958b27e422b053df8f5fbbbafbc14119260f7022cd2934e8faeffbd7085aabc44497bfe07387bc0e5aa02399eab99318adb98f99a677aa0683e0c11d638cb13907fc5c3147e5 +Result = P + +Digest = SHA384 +Key = 3082010b0282010100c858aea188541c0dd2626eec9a8c98511ca03870353128c1687d94a1be762a4940fca789831a720e108f2f7c1fc20aab38336b5668205d62963c51aad74757183faae7c0c59b9f679e96393e7f93e8a30ce99fed1b8e85e7146bd69a3f8dc5734bbacd51359f4f66aa507fbf4e69708877f7cd7cfb6868006e330869d9eee99f466962b0dee9080d9413bdec2e41445190394a49ecb191167350be411cdd6ade4eb38c4c4bf891b43c91b5981a3bcc8a66f85e5cbaef751e3cbe94c7f193fd78ac55048800250d5cc9e41b89319ac3d0258aa640299e165b0cf7e5e108f76a12f72132f6a2a4c239df0544d3d8407b94f9f38e9156c825a7eae001543fb264eb020400c74c01 +Msg = eab87ecf61ca1ea8eb29498b510ab371784d0274e2fa77e077ebd18c86c66e6b072fb45e233baf4cf627fb75934ae5034848cde22489cfd2b7e9a2bb19b1bf402ec7c69627211e974c7fdc12f95ae766e717594fad8128ff8776057155e084fae7e87e217766b4b0779bb40b8e2201c1dd246e6186cccb8f6ffac356433c05c0 +Sig = 35720e6883452e78bf0f9ba1566a638c8f5060a8ee313ba66bd2496d67b78d01fa1d5bcd4e3a96aebe6b0e66480335a49a500abd126c5b1beaaa60135db4e51b4efb5a59b662ad3525c2dd1c867bcf609971806895550531d9f5b0ded79f804d1d63c4a00931a64244a2b5f004287b523e9bd23a3ae8b393d2607d1a835062282477c2441cf3176110fa0064350f2cf73b7c67e02bf498eff69161e62e514563d23385be16498c525967350e047392861b7040c9b4039b5a8a49eddb385aaa4593c14e20dc4aa2f67258290a51c6e836e83edc061d4bcf5b8f3db470068372ff76a0109be686c25e70638d15156845dfb8ca1e84d0aef538798014ae1c173a14 +Result = F + +Digest = SHA384 +Key = 3082010a0282010100c858aea188541c0dd2626eec9a8c98511ca03870353128c1687d94a1be762a4940fca789831a720e108f2f7c1fc20aab38336b5668205d62963c51aad74757183faae7c0c59b9f679e96393e7f93e8a30ce99fed1b8e85e7146bd69a3f8dc5734bbacd51359f4f66aa507fbf4e69708877f7cd7cfb6868006e330869d9eee99f466962b0dee9080d9413bdec2e41445190394a49ecb191167350be411cdd6ade4eb38c4c4bf891b43c91b5981a3bcc8a66f85e5cbaef751e3cbe94c7f193fd78ac55048800250d5cc9e41b89319ac3d0258aa640299e165b0cf7e5e108f76a12f72132f6a2a4c239df0544d3d8407b94f9f38e9156c825a7eae001543fb264eb02032a26db +Msg = fd73237a3010d505ea0ca786c5a3ae4d20c4eedbc6232199ce8ab4c9bf6f13bcf8cc26454f2b1b6ff900676baa3c07ccfc1f0cf7154e56d48425a0ca6d4ebdebe693206ba0f0a257caed8083322ba3c5ae3c2560bab710c3628c697463966d478d6f1ad36b88f1262679fbb8a7950a9efcc24100fd88d6cd2f6717ade86eab38 +Sig = 192d8fe5a69a1f9acf186f42893e458b6356b10a8fd0ee45114acf625b61c69d13884f7860b02acd67b5b5082bce20815e384dee608162fc9d19ac977842018e4b3f321d84bfb487c0f4f6a465b3f296c73ca3d8817c771c9969ae1144b1abcf6de251e504d1f662d6094d4e6fcd9ea3f85162883e1179e9fee4a3d7daf95bbadc64221fdc8c144fb4ca502f3eb11df85fe6bba561feed191963ff9f8441b583bd84ee540e47b318629ad59a251b759f060a40e717e50d9c0c0eb43122e6594575725382684c65ecf7f27e42c3e1f7d95c657371978772e111309bf4bae5241fadad0ad9cbd04ebcc8ee76b368439be21493aa41549dac8c356e65435f706d79 +Result = F + +Digest = SHA384 +Key = 3082010a0282010100c858aea188541c0dd2626eec9a8c98511ca03870353128c1687d94a1be762a4940fca789831a720e108f2f7c1fc20aab38336b5668205d62963c51aad74757183faae7c0c59b9f679e96393e7f93e8a30ce99fed1b8e85e7146bd69a3f8dc5734bbacd51359f4f66aa507fbf4e69708877f7cd7cfb6868006e330869d9eee99f466962b0dee9080d9413bdec2e41445190394a49ecb191167350be411cdd6ade4eb38c4c4bf891b43c91b5981a3bcc8a66f85e5cbaef751e3cbe94c7f193fd78ac55048800250d5cc9e41b89319ac3d0258aa640299e165b0cf7e5e108f76a12f72132f6a2a4c239df0544d3d8407b94f9f38e9156c825a7eae001543fb264eb02032a26db +Msg = c17eda0010c4add3f0616155cbe6d43f90568851052d9e825fa002591027e39be03966263f569b1dd94bb0456cb264afd6b8bf987323008da593d8d3b407d505d9a421ff95b26cfb47e827fafee9f3668c0e59f5dc66bbd085fb8af59e57bad9d5477352bbdf0ab562be2f3b2a9468aad8e1be31e8ffb59325628288761f7960 +Sig = 669f6c902798a9c91672addb4fd138ca41ba9b5fbc8efab9bed5e7e25662a40af734240a301d304134e75494ba961740aa6b9fe54a340851791726a864a2d1645daafcbf38f49a5b319ab86101ae4fc5f21b0f15cd12e7979b6e3b2fb61dd049f9d864160110a68cbb9d399eddde358571cfad48f2057dcdf324768d8d3903d0a861a5824ff3a5b715fb7a098a41624ad13219a0af11eaced337e8e8aaf926eb4ad60534422ff986bfb498c63cba0cd6ccea9018a96e9a41e4693586aa70a0d6dc5c6312418d63e9f91aaf5df8d01dcaad7335cf88badf6d8da7fa9cd83e32be840f1b2cca1c8103d73d8a9949d72b4b8c56eb7fbfc523dc1accf80de1023d8c +Result = F + +Digest = SHA384 +Key = 3082010a0282010100c858aea188541c0dd2626eec9a8c98511ca03870353128c1687d94a1be762a4940fca789831a720e108f2f7c1fc20aab38336b5668205d62963c51aad74757183faae7c0c59b9f679e96393e7f93e8a30ce99fed1b8e85e7146bd69a3f8dc5734bbacd51359f4f66aa507fbf4e69708877f7cd7cfb6868006e330869d9eee99f466962b0dee9080d9413bdec2e41445190394a49ecb191167350be411cdd6ade4eb38c4c4bf891b43c91b5981a3bcc8a66f85e5cbaef751e3cbe94c7f193fd78ac55048800250d5cc9e41b89319ac3d0258aa640299e165b0cf7e5e108f76a12f72132f6a2a4c239df0544d3d8407b94f9f38e9156c825a7eae001543fb264eb02032a26db +Msg = 92c641b80aa222fad6c757ad0a8936e0459bf8f4367f63ae5f41a68a19658452d91eb4f0b1c188811a78ceaaf03bf42fbefc6fc13c225c1816396842efe8ee3ba62360bdd8a1e859a6914fc7b8891d7b81bf0278c57b746959cc9aee2b7b6934823d0dc8862c8aad0278a3ac695afbeb174a7ac1da72f2c9b1620235d3053b65 +Sig = 5135f98250db1ebbd738c4d905db5a395c36c99f929d6cbe5bb4de9288575eded2b14220ea49ca7cd04584067b000964df2a4cf0b185b7a080c14ae05cc277b8751b2f1fc061de93b429fdef99c39704a158a5463041a109614c9bb1c9f66df48a67af779bfe85e179f289cca20d5618bda9686c0826ae14f8c86acf28645c5c28613446f202bc952ab1ae4aa06391edb0eb5355712b43d12ff96548292bfa072ff2411e7f9d57e3fc35a43c36743b4a384150f34059c815dbcb26f55da2be86ac5818e2a315a12f01b98e5e7b03a67cb4056a803be2280138d1611a2667c18d4b2a82aff86d9fd21568b2e6575b8e3c0470da8b2d7d6d0a2a172e6415a1b7d2 +Result = F + +Digest = SHA512 +Key = 3082010a0282010100b6515048e1f7a3506d6bf028ea0516592078a2ebd6db04af6040bb5dde8888787e1fd973b1d160da25ba9095450d866625aeb7cf684b522af4edbc20adfad09e9c4c42919b7691e1404afe8815f229001bf7f8e2b1c511d56207972e3efa588f04f7bea82b64c45bc28bbc5e3ca3b1be8652c54a3393e95a58c78c34c7c7ceeca983e91920467d184ecd5aad0114f83d0517e6ee82944cf134e9efdb68f14322517acc10285c892c94e6892c9659fb85af6d11322df94edeb77a379e97c7608e5d23c89b56a722b54d91f0811855c21e0c41ed362ae144e2f46eebb97a9057c673ddccc0f2ce178c3af086d1f93a092a2ae58bb0703ca66318913e69e36fd9970203662f3b +Msg = e5b327e067ed7a242749d21d78e0b1d68d288595dec82a55cdaab1768a5260b4346ff95641b040a71fd9b7aa1b16ac0a838f7550073cfb5865fb750646e0763562cc2af0eb41dce52974bc1662a4e0d2fcab88e4e5d3a60a33ea9ea908994abeb9f141182f4759c58d426aca1232551742a345b9403335527fa0b3c69925e338 +Sig = 488df2a0a8775e6e65c6f457cb9e29dcc8ab6c37a12cf820308732052bfe068e3c6f3c4e73c17615aa6319b76d62df6cf48378b834dc412b9e5875f7fe16bb2670c4ee51cdc259df813d5faa541472581103421a9718e79b8c671b1c7b50f6d4315b96423ba6aca9d060a32372c4c237f02eef44f54f872bf91b5a390adf9c5a7a884416add7d15afd8fb8073243dd587ac8011a88d5566cac84d5dc4ca3f2d6938e0d03a9e8d016b4aea22183425c2bd4696d85501e264bba7dd980c3ac45d77a363955565f4675c5246802abc015236d69005d164c0f18a666d43442902be38fcc381ffb6b5a046af05686b0ad32b25c1e2d82707797016ee63fc9a952d2d5 +Result = F + +Digest = SHA512 +Key = 3082010b0282010100b6515048e1f7a3506d6bf028ea0516592078a2ebd6db04af6040bb5dde8888787e1fd973b1d160da25ba9095450d866625aeb7cf684b522af4edbc20adfad09e9c4c42919b7691e1404afe8815f229001bf7f8e2b1c511d56207972e3efa588f04f7bea82b64c45bc28bbc5e3ca3b1be8652c54a3393e95a58c78c34c7c7ceeca983e91920467d184ecd5aad0114f83d0517e6ee82944cf134e9efdb68f14322517acc10285c892c94e6892c9659fb85af6d11322df94edeb77a379e97c7608e5d23c89b56a722b54d91f0811855c21e0c41ed362ae144e2f46eebb97a9057c673ddccc0f2ce178c3af086d1f93a092a2ae58bb0703ca66318913e69e36fd997020400a3e187 +Msg = 6b7450077038ca8478e7a380292151ad413c1949d78076efe497beb4013f036f7242375864a894d5732b3b906feb1ccd606315fbc79c5e8827a024fac432743cabbc5b35f2894c9f4134c1179261257034aaf24d16dd17ef42649c4ba80488601dcb03c7a343b88cebec7d3c18e9363fc6faf6684baa68cb3cca6ecf341d0784 +Sig = 1933ff9ae5c520efeb711fd17a571a209c2ba9e0469e39a5341a70ca46c6deb2359005fb21c9e914e8a5037345906204261476427ddbdf29212d84c6e4e1dbda61aeb21ceddad1c3789d99ea28ebf72c4fef790f838191b30587e00fa841d63bfebd00bf468b462ae935eaaef2f83ad596b29a0d538ad99b44d615217f0643f0d9bd755fa281e35bedca37b238a89b78f9d911a24c40ab3cf69dade4ce4a30bd3104f890a6cf410a1e76e625e28495f6f9b385d698e6f8a6eadf0df3af03b3e078f4b0c984bddf525f220635cb2993b72ccae40ad3378cdf775431c2ceaa1aaa57f355eefffc0f34b5d70d1a41aac9b052594f0132308b0e329e34c0d2fdc519 +Result = F + +Digest = SHA512 +Key = 3082010b0282010100b6515048e1f7a3506d6bf028ea0516592078a2ebd6db04af6040bb5dde8888787e1fd973b1d160da25ba9095450d866625aeb7cf684b522af4edbc20adfad09e9c4c42919b7691e1404afe8815f229001bf7f8e2b1c511d56207972e3efa588f04f7bea82b64c45bc28bbc5e3ca3b1be8652c54a3393e95a58c78c34c7c7ceeca983e91920467d184ecd5aad0114f83d0517e6ee82944cf134e9efdb68f14322517acc10285c892c94e6892c9659fb85af6d11322df94edeb77a379e97c7608e5d23c89b56a722b54d91f0811855c21e0c41ed362ae144e2f46eebb97a9057c673ddccc0f2ce178c3af086d1f93a092a2ae58bb0703ca66318913e69e36fd997020400a3e187 +Msg = 8b618f6669b9f0450a57cdc57f5dd0bfcc0b4812e1e2c2eacc09d9422cef4fa7e9325c3f22c0450b673c316929a339dd6e2fbe10c97bff198ae9eafc324133702a9aa4e6b47eb4c621495afc45d223b3284d8360fe70680359d515aa9ea02e36b5610f61053c6200a047f186ba33b8ca602f3f0a6709272fa296025258556880 +Sig = ac87aad4ce85038b8552c4a6e93ed94368bb3376ce17ba1d08812e004b43a952e27fc50daee8929094e747dfbe02584a7654d950d21700605e699561c03e64d2016404da7b9c0b0011ff64f206225db1c8b5f974bbeca720a7c2ec73e6fbf58adcc6f5cc24df6d09ade74416f30df70c4449820f24378b90c176f65651ab1c1fc82d3fe834e7b66d0daea47b8d1931a81d1fedd4e6996c56edbe496fa237fbd41876a460780100e4e6f0864b6f9282abae4ecd98630548b5cb42e66cf9eb890e0651f159f356283af40c02913d2f3bbf6d8ebaf6b7d88e6699f482d7825428ccb7ef8129dbc665bd4df8e9a07c339a1134e907e439d0846480ae6c888c1e9be2 +Result = P + +Digest = SHA512 +Key = 3082010b0282010100b6515048e1f7a3506d6bf028ea0516592078a2ebd6db04af6040bb5dde8888787e1fd973b1d160da25ba9095450d866625aeb7cf684b522af4edbc20adfad09e9c4c42919b7691e1404afe8815f229001bf7f8e2b1c511d56207972e3efa588f04f7bea82b64c45bc28bbc5e3ca3b1be8652c54a3393e95a58c78c34c7c7ceeca983e91920467d184ecd5aad0114f83d0517e6ee82944cf134e9efdb68f14322517acc10285c892c94e6892c9659fb85af6d11322df94edeb77a379e97c7608e5d23c89b56a722b54d91f0811855c21e0c41ed362ae144e2f46eebb97a9057c673ddccc0f2ce178c3af086d1f93a092a2ae58bb0703ca66318913e69e36fd997020400a3e187 +Msg = e2a14fdf10cbe13b0afa4294d073af00b19f02c2786987c9e3e80c79573e37aed1c01dfe20570f3f5225b7496c6c65fd5eaca387350c0fdf93fb6a965c17eccfb34eda8c25435b2b23f38830b698c2446ece487e9cf408e2c0d5b62745871cbe6c94b10f87586c0667aadace17bf6fdccb4a1a3013e81bd754bc19b579566f81 +Sig = 0e340359f9f1fc5e974d8ad8c189efdb2849ec93994b152e497e15289015d915014c73503bc69b83803dfa9d8216181fcdc64782c27fe9d464ce12359aa60b44618119df19a8f5defcaa171c44c0c0ebe1991131132aab4b19c02438b0fead22bb34e51bbd565665583bb6eba36e82068e2e3040a177dab3c1d3a6f81d0a3901a934c10e2abd73e8b9ef7a1be29a7fe18b304ce57d073f85b1b6873ab6b8ed94d5a0a0f3e5fc9b4857aed36de4ca72deac235861297fdc51fd9553eed189335935f23b4058f293c8cce8bd9bfc8fbb374ecf4eaa0f2a1f06ccea4ff3071beff69d70efbe07513ef0bfa02dc2c6b19b5ced674a16b6672b6e04a32ae14157fe10 +Result = F + +Digest = SHA512 +Key = 3082010b0282010100b6515048e1f7a3506d6bf028ea0516592078a2ebd6db04af6040bb5dde8888787e1fd973b1d160da25ba9095450d866625aeb7cf684b522af4edbc20adfad09e9c4c42919b7691e1404afe8815f229001bf7f8e2b1c511d56207972e3efa588f04f7bea82b64c45bc28bbc5e3ca3b1be8652c54a3393e95a58c78c34c7c7ceeca983e91920467d184ecd5aad0114f83d0517e6ee82944cf134e9efdb68f14322517acc10285c892c94e6892c9659fb85af6d11322df94edeb77a379e97c7608e5d23c89b56a722b54d91f0811855c21e0c41ed362ae144e2f46eebb97a9057c673ddccc0f2ce178c3af086d1f93a092a2ae58bb0703ca66318913e69e36fd997020400a3e187 +Msg = fb200350b60d1e9b4a3b1b4d7341c55c635bfa791569a438de3bec72450baae8144b1f28afa2e6b5a5312862851a10fff3437e37fa5700b9a40efe96c8af34ea24d365bfab6b4e2e2004dac7e44a94340dcb6118b7fe6f3d9f8469efeeadeda3523e3fdd53723f50e53e984639d93b42d97c0ce4f467da0ef62495455c0fbb5a +Sig = 624183bf2abdb79689a45158a4876a352b19077de88aad06fadf3abcf4d2683b126fbf84c01ef614448c63e8a78d1e8749fd89a9b2550078c18989fea591c2a7c47e6a0bb4491dcb1868a43e75351ae2a7afe27782195f453bbf10643e6c3a23c01f2e713b6ded81e1db7ca4ecb3554fa9ae8005b80316cacdb4530a66dc2a073ec494bc3419df2f275db5a33871d0a8d9cd0d8bcf90aa24f096a79a4c8f5c0dfd8b1887535e59079c974f87d26bfeda7022399685748414df842ce04783b6f57bd2a2dbbe2e225f89c764b9775d7721157498446ce3d613332ea2cc589f7043afe3cae32b779ea8f1ab22fef99f67a0720306dcdf2d2cf7b35b0bf3630e03bb +Result = F + +Digest = SHA512 +Key = 3082010b0282010100b6515048e1f7a3506d6bf028ea0516592078a2ebd6db04af6040bb5dde8888787e1fd973b1d160da25ba9095450d866625aeb7cf684b522af4edbc20adfad09e9c4c42919b7691e1404afe8815f229001bf7f8e2b1c511d56207972e3efa588f04f7bea82b64c45bc28bbc5e3ca3b1be8652c54a3393e95a58c78c34c7c7ceeca983e91920467d184ecd5aad0114f83d0517e6ee82944cf134e9efdb68f14322517acc10285c892c94e6892c9659fb85af6d11322df94edeb77a379e97c7608e5d23c89b56a722b54d91f0811855c21e0c41ed362ae144e2f46eebb97a9057c673ddccc0f2ce178c3af086d1f93a092a2ae58bb0703ca66318913e69e36fd997020400a3e187 +Msg = 64ac0940e3926d11b78494ee758ee6e7f9f034ddb622a99f4a15fe5355bcee188ccbeae909bf0dc4e51e520c0900052d41ce777e934af66bcecffcd365daa7af7eca69f547e401bc899aaaa07f0d9268e8d08de65bef0b1fdb3048acab98c2606331f02b440b313ec98103707ebd75e1157fdfddb719d00398bf48a6cefd2773 +Sig = 3853af577c8f5f96cdb01de108ef8737886118ded95a315a5f2c34ae22f8fed6aad5cc1debcffa3576cc0a5050f572cfd171413275254455f19312054f06e9bc50f9d2dcdd1fac7ff2fbf456c2c9a1217992acbce6f867b48291911de8dcbde4e0b85a92536157d939dab1a42fdeeac9b15e5ed3ca542d1cab43aae3723349e405f998705fd0edb19d9f4631e6c7cf7ad1962e99fbfe11629226a634eacc2ec2bf3ee2d87c2f6fe934a2293f5ff81b4dbeab62eb4d94bdb4ed481bcc4bf400c2050faade7375c811967596ab5415cc6f60fb6169faa95303ceed5ff261a93e0c2a2eb657501db9866fe858694f57ba25ec2f514d8f75980247597a006ab3df80 +Result = F + +Digest = SHA1 +Key = 3082010a02820101008cff9858fa12773ef90c10e8f142f69c0350772f999ff10ba2a5ec71cbee037f3a78a1c46028150a0004fd0198bb8175fa30fd9765a4e2c679124ded055cd37d4102b5e695d91b58bbb44e72c136c5e3da43b4e6d5604edc36774c353a729bb1647f4a33d74ccb70f7b003617bab798887b8f65cbe11aa8349dbfc0f5036042d6cd4c49b10634fdd9d9cbf61d9f85c94ae98cbf77172c61696434ebc2ac6ae8f678f0e4029eacc8fb1699916bdce026cd94780de58a707659ff650dae7599b6b1b6337323832b45a4ede37fba87051658e79248fcebde7c36009954919c87f836a2084d88f5237f72f4d208412e91ff6f3252574df7c00334a0fcf8fcc7ecc2b02030b8f69 +Msg = 3ac87eafcf45920e233638ed4caa54765db4b801dd143ad978130943f5af41bc68f8bc83a9ba2c57045c668232080116880d20776f818c19142a068b619fdbb52baab85eadf1c0f135d5dc801d9b5209fdc99af81fd36dee33f71ec144662dc4eba41a48c33177621c6941eff4a970d623b3cd8dd55404df3d44faec884d6071 +Sig = 80ab1f8e28c9f939a7a15a6f81b41547e8497b5ba2dd08333243352e9d7aa347dcde6200a5e1cfc8136d3c59999ee571347c8a48d91e185d0b08ca31c8ea83d578f0fea6ad38c820d68b10221d493ea93e065fd846340ae09b94c6dcb78cffc79b958540689455734a9adebbbe50bed6e998e957079d11812bc2b4b497f9b9fc1496a639e021337d86c4df2bae4a065fe69e517655a571369a4454a1e29370689f8866375fad63075ef189f0ec3b686b5f3f02ae84c99ea67701d6906ad867d0dabef4f210e533d7daceda12ee0ad2a6826178503ae472f278b7f25d51c1fe8ef4b3d61da0928f4d7315abb27e570ec36fbdfbb4e3158e29b4605e1b082e56ef +Result = P + +Digest = SHA1 +Key = 3082010a02820101008cff9858fa12773ef90c10e8f142f69c0350772f999ff10ba2a5ec71cbee037f3a78a1c46028150a0004fd0198bb8175fa30fd9765a4e2c679124ded055cd37d4102b5e695d91b58bbb44e72c136c5e3da43b4e6d5604edc36774c353a729bb1647f4a33d74ccb70f7b003617bab798887b8f65cbe11aa8349dbfc0f5036042d6cd4c49b10634fdd9d9cbf61d9f85c94ae98cbf77172c61696434ebc2ac6ae8f678f0e4029eacc8fb1699916bdce026cd94780de58a707659ff650dae7599b6b1b6337323832b45a4ede37fba87051658e79248fcebde7c36009954919c87f836a2084d88f5237f72f4d208412e91ff6f3252574df7c00334a0fcf8fcc7ecc2b02030b8f69 +Msg = e88292f68268095c2d1059d6c671ee2cc3bc8734748f97a2896ceb22d56b8ea4512beaf7640e2f9a61a6f9cf526a2df0f4ae230602d20b98b6b989c18e7ca3854c60dd654006a231c9e2e61e1aee0a193aa0005a4e19af3b1b9f994bc74dbb9edf09b4689fb72aca6dac6aeca6664e4c9d7a6456e1cd4c34bf0762e708459e97 +Sig = 4b40e154df4538c2de6fc13cd93522acb23305b40890ae9e9ef33df58d0d1ada511346126fcd55fca4206bf3bf988c2967ade215538b818303596ffc33d4ae05ffb321ff303fa9a2b87b5467723dd1e036633398e15d9abe62d9f7528b1f31f3ad6ab70fd5af6029da4a961d006d7ff0f6b7e2f9181fdc47ed5fe0f74802e9d63249bd394bd6b570187dadb42a1ebb38bf1c78ba5b57c0a97ae29a6c9f8680b493a44c4909790143aaf12152d56df38864a36231f558c624077a00ef3619c58f7ebad4cdf706c4b2a47c6525c76b78f5473b57a0802432dcc67230fce82c87e41282b7e8f9855bf72f0770dd6be3f7fd260a435d51c1f2323257b507f97a7c38 +Result = F + +Digest = SHA1 +Key = 3082010b02820101008cff9858fa12773ef90c10e8f142f69c0350772f999ff10ba2a5ec71cbee037f3a78a1c46028150a0004fd0198bb8175fa30fd9765a4e2c679124ded055cd37d4102b5e695d91b58bbb44e72c136c5e3da43b4e6d5604edc36774c353a729bb1647f4a33d74ccb70f7b003617bab798887b8f65cbe11aa8349dbfc0f5036042d6cd4c49b10634fdd9d9cbf61d9f85c94ae98cbf77172c61696434ebc2ac6ae8f678f0e4029eacc8fb1699916bdce026cd94780de58a707659ff650dae7599b6b1b6337323832b45a4ede37fba87051658e79248fcebde7c36009954919c87f836a2084d88f5237f72f4d208412e91ff6f3252574df7c00334a0fcf8fcc7ecc2b020400d0d14f +Msg = 3853cd6d1384358712da7c1c583afee73fea00ee4aaf41be5c32d2f827a8280ce6b270454f822206c340d953c9ac6292ba041293be285dcff6fca5edfb0e508b88791d3a7309b8cae29f8cc9bbd7d8465ce905da8dcd37eab2a3222646511f55846e7e55675f1e5dd5bf3c861705898a8d607fcba0e6f497f7eef0aaeebabcf4 +Sig = 55dd7641ead751bc1b160724dd86e89497764119a998d5f800f97defe942aedc5cd2c8413918ac107a705dab99bdb182037f051b61932fd4d41f0a890f6db996cf99d210084536e3711653ab4ee5ce5b066a569306983c2f5b6c00c51fa49774f33c13565b95e832588ad2c004b81887c3df340096920908979e6f168c8818062cb04391f5649869e35efe762628f49d6751b7a3e0b184e9f935f591e4f2a1db158cb78f8e256c74c294ff424bc2efd3145cb234af88c623afa67b3eae68b91dc16a99ca36fca81653aa3ea47338c5a5a2a5b2340cff80672767f6e9549c6adebe6a84a4232560ad431a5f42a3ded809fda302ea7ce944ea3e7be7853704e1ea +Result = F + +Digest = SHA1 +Key = 3082010a02820101008cff9858fa12773ef90c10e8f142f69c0350772f999ff10ba2a5ec71cbee037f3a78a1c46028150a0004fd0198bb8175fa30fd9765a4e2c679124ded055cd37d4102b5e695d91b58bbb44e72c136c5e3da43b4e6d5604edc36774c353a729bb1647f4a33d74ccb70f7b003617bab798887b8f65cbe11aa8349dbfc0f5036042d6cd4c49b10634fdd9d9cbf61d9f85c94ae98cbf77172c61696434ebc2ac6ae8f678f0e4029eacc8fb1699916bdce026cd94780de58a707659ff650dae7599b6b1b6337323832b45a4ede37fba87051658e79248fcebde7c36009954919c87f836a2084d88f5237f72f4d208412e91ff6f3252574df7c00334a0fcf8fcc7ecc2b02030b8f69 +Msg = fefde998a5de015f63b0a75ce7f79f4dc681d18dc298aae64b7cbfa74610b3f70ed35b69b81221d19c5ca6551037acc7771132327b79e0b2968fa689d7b9a170e3983e2b3a3ba160bb9248a96b25ebe87205a7db66035cf0cc21545adc4625648536d805b1c04ab5ca3ad3807d2a2659be4678b00c9fe547f6190f41de1e087c +Sig = 17a01e1254dc902e8c6d607226175416c17ea28d28696b20706790dbac60f73732c804b6756df87ce6b1baceb22d582a6e24bf3d1754ccf1ca57e06150e6da60bcb8b116b3b8a31a715e0872b6047c6a4d7f6817ef5f12d13356b2b50fd71f5d9a38a0c35072ca38beed29ba541557b0525fd3d6639661037b5b61bee51aaf4e6c6bf5c577f9dee4811319d671911138050c54bc273db9eed5a7bde3281e65942cbddbf909e87587c58c8d40c081c81950f73a33d80bea61a56ee4a8930ac3b954d4a0706aaf3c753efd304946f90f33a20cfde65e388c266bad024cb1aea8879c78fd0d9bfddaceeb84f10ab66cfce1aa4f0651d7b1f0b4ee808a2e1f490ead +Result = F + +Digest = SHA1 +Key = 3082010a02820101008cff9858fa12773ef90c10e8f142f69c0350772f999ff10ba2a5ec71cbee037f3a78a1c46028150a0004fd0198bb8175fa30fd9765a4e2c679124ded055cd37d4102b5e695d91b58bbb44e72c136c5e3da43b4e6d5604edc36774c353a729bb1647f4a33d74ccb70f7b003617bab798887b8f65cbe11aa8349dbfc0f5036042d6cd4c49b10634fdd9d9cbf61d9f85c94ae98cbf77172c61696434ebc2ac6ae8f678f0e4029eacc8fb1699916bdce026cd94780de58a707659ff650dae7599b6b1b6337323832b45a4ede37fba87051658e79248fcebde7c36009954919c87f836a2084d88f5237f72f4d208412e91ff6f3252574df7c00334a0fcf8fcc7ecc2b02030b8f69 +Msg = c0b2621f30115b296d84c7d4e015981a24435e1877a660cc6cd6ec1de088eb1b2efab889a79233993cc211f67e2e7607c911c573bbdcb7e0eb21aa01d8b03ccf20001916f3d01134c60d6e1d4cf784a3a28089f5caf4a7655adf506e752cd2f5fb8a2bcffd141e847430865232b7eb75185753a68a365ae220d8856c9e43d415 +Sig = 368416eab883a2643e5288ad1d97887941e6a42a54a44336f12336cab4038e693f98ebe3df7378fd501ec9c7f267d6f8fafebc5340744a436d99647b19df668169849032b852df30da848e4605015aa0a9ce39c9ae25368c0575e7957273639d957b392e3556742bc5d0214c4cb82e3d342d3a73f72b7184b72b2ae2225ee830b1ddc528460046d83526c6d07b2bb89d4593b459f248eec995442e4aaad368dc0d3a10907ee779eb23c8a60df52fa461ea99e47e8cea7b761a02bdf81d43e4a7a44992d1317211607e099141de07ea034e95995ae52ebbccd38d0964e3fb4756dd6d57fb01dcc44b6d89852bcc605dabe36398e53029f4397dffef3ece22b939 +Result = F + +Digest = SHA1 +Key = 3082010a02820101008cff9858fa12773ef90c10e8f142f69c0350772f999ff10ba2a5ec71cbee037f3a78a1c46028150a0004fd0198bb8175fa30fd9765a4e2c679124ded055cd37d4102b5e695d91b58bbb44e72c136c5e3da43b4e6d5604edc36774c353a729bb1647f4a33d74ccb70f7b003617bab798887b8f65cbe11aa8349dbfc0f5036042d6cd4c49b10634fdd9d9cbf61d9f85c94ae98cbf77172c61696434ebc2ac6ae8f678f0e4029eacc8fb1699916bdce026cd94780de58a707659ff650dae7599b6b1b6337323832b45a4ede37fba87051658e79248fcebde7c36009954919c87f836a2084d88f5237f72f4d208412e91ff6f3252574df7c00334a0fcf8fcc7ecc2b02030b8f69 +Msg = 84ada4599f0bc0a41db787310f53a1588282b8669ba82e89e7f20fecec974422045d0ac86b5ea366960c4b97c6736e6adebe180771fdad962025da5c2358cb2725679fed559619b0ba9f98a4c6f949942f599b82fa7af38ed91aa219b645142990d5490f863a8948317754a2376d999f1d5c281e5da76838b9d74d69cee385f0 +Sig = 8286a2139ece519ecdf8aebc2db2427c207100212008dd27b1058bf46db2a477ff55bde9f0d02cbc3d93b6a97361bcbb3aad990ee9d255c58a96bd7108311d3d9276247f274d5a0dc9e6e411ff389de34cb693b273b5da7bcaafa101a5fb6ef42fdd6288ff6b6868291ca914f564c75fcad55d7c2ca3bb5da2abe02a3d589686f79c4bbf24876cdba03ffabaab32395245d72051c4aef965c0c18ee7ae1d19d8c179086f6c0495df64c44b618d5e9d07f20e051ac360fd6a84e87f7f7a777059d0ea3eb21a11de8cbc22724944c71cef002b612278ade389530486df058cc5459c20dfd4e9695c04bce91dac8a1ec79f43f80c0d691a1cfd1a7204af2a7a1a96 +Result = F + +Digest = SHA256 +Key = 3082010a0282010100a17a08272e656cf600f4650ef0952b15d568d9fb7f1b3f3559aa3792743f7d895e4e26dec2bf09996de8a99f7c434bc25b0c7d61e83fe5647c213b19902abfa053321a16048642cd3800de26172eb39ccab029130ceb82e5c25c676e89007cb00666a2d8f64e59fea64628cbec9c361abe25841551db01f58b80ab17f02a93cbaaffc2630ffb6f56f206b8a6f8e0f1e5790652e7c7227258dbcd5924e94876f983ed02e4e82272f5d44967bc501d1515d80dc25d5c838d0357d0d1704b0253d6e78802c02931000fea2e865c90b266c8a0b472e8eb17456777973342da6978cb45d2100cf91ca6f6d69ff30ee8f3164bfb180de0b355c067bd8f1a8544b9aac9020366a13d +Msg = 41c00eae64f3e330222e114541eeb5eae1a705ca0c0687a68e7982fa07f1b3de3ee7402ab89df2dd8aa69ec06ba8e4460d611cb7aee88e8dea35e11fd3e4d77c4336379a71590ab0c3e909e0e3b6571915c86c3cc8a0517d6ac1130d816f72f6f8b7d946b6af936f76ff3beed2a0742ba0e4dba082b73a3eb924ff0c3a1bec12 +Sig = 13165444a1f039da049b998e332cf7655149975713b5378ac5772f2e176ddbf338a25e297d873cca5f19eb4e4157c532d06249d1e99c2857f8d74bb74cc7593bc872daf5b45541a373aadc43a0711b3b2f27ccfed06d9578b2a3c7d10a12e398d0302f86e05f154e3cfd2a0e072aae157cae529bd5688fd0ccea22f58181d069eaa0957a5b0eaa2e3f5a4aeaf3d1512a43dd2f8434579eb57e23852d7323c5dd22359e9dfec59dd75ee3b8e234a41863fe0a68c46f777a9f48887a786cfaa40db1c7d9e04efb8a882d8169764b47a013b5d1d15f4cbf758adc83c53e9548e77de20f14b3b5f064465beaaa32ee41755aa48264a14df837ce5fb85a5ab91bf6eb +Result = P + +Digest = SHA256 +Key = 3082010a0282010100a17a08272e656cf600f4650ef0952b15d568d9fb7f1b3f3559aa3792743f7d895e4e26dec2bf09996de8a99f7c434bc25b0c7d61e83fe5647c213b19902abfa053321a16048642cd3800de26172eb39ccab029130ceb82e5c25c676e89007cb00666a2d8f64e59fea64628cbec9c361abe25841551db01f58b80ab17f02a93cbaaffc2630ffb6f56f206b8a6f8e0f1e5790652e7c7227258dbcd5924e94876f983ed02e4e82272f5d44967bc501d1515d80dc25d5c838d0357d0d1704b0253d6e78802c02931000fea2e865c90b266c8a0b472e8eb17456777973342da6978cb45d2100cf91ca6f6d69ff30ee8f3164bfb180de0b355c067bd8f1a8544b9aac90203391c9d +Msg = 671ada018b6132b381978036f19cb9fa9cf7d07334642cbf718c59896113fe2d00d70f1c087743830a13c927be53379398abc3769bddb54772bf1c2abd3ec017a9a35939c315fe940e5fe0eb52f438e1b8307e5e94e1dc348206e203b4d77b5a8a05201e63424b30b4042f4a5786a62a25106bf3c67989d0c8ea13daefe4163c +Sig = 2942af5fb4e5230990bd20c2095fa29e9aefe6e6489111971f0dd397e8d461ab3f59c0f29b86d11ff187984c54c51b0bea35f479a4b83c33dcc8f149f56eb9859a71e45f3a33b83d30eca87bf19803eb5888ead3151d9b673546e2c0dbdb523c34331cbd3a83baae6b55dc465de20d40c5bca9647d74b8399d6e40404828772690afb93b314a55efb5149603c8421fd85ba5b61828c6f679b53f929398d87affb8929e4684631aa2e86d492d3d7c9a90c58e465080442f69623e4eb2080f7af2ed0442c0bb3f0eccf45d4f075e4474a2c058665f25164c457fd19e5852061af9b232cfd2eae7b60001364c013a1155a9af18cbc134d1ee8d30c157cde3a9ffbc +Result = F + +Digest = SHA256 +Key = 3082010a0282010100a17a08272e656cf600f4650ef0952b15d568d9fb7f1b3f3559aa3792743f7d895e4e26dec2bf09996de8a99f7c434bc25b0c7d61e83fe5647c213b19902abfa053321a16048642cd3800de26172eb39ccab029130ceb82e5c25c676e89007cb00666a2d8f64e59fea64628cbec9c361abe25841551db01f58b80ab17f02a93cbaaffc2630ffb6f56f206b8a6f8e0f1e5790652e7c7227258dbcd5924e94876f983ed02e4e82272f5d44967bc501d1515d80dc25d5c838d0357d0d1704b0253d6e78802c02931000fea2e865c90b266c8a0b472e8eb17456777973342da6978cb45d2100cf91ca6f6d69ff30ee8f3164bfb180de0b355c067bd8f1a8544b9aac9020366a13d +Msg = be91864d3728f895c689f09b28484138e0afa29589bba7486a68f0bf4b2ea1e287cc11f46344c7ba9e27a2e049125798d97921847ba3b3d6a7f672b6f875e1e43b875c9ec6fa0ac40b470d3a6c18fb8e510792da78a9a7ec8dcb60a5fbfba39f014bce120851a9f9347299703961166170e25e5f2ad46bd2446e2355fbc9d05c +Sig = 631529e0b149ee1528d514861cac711eab8c01c1c22c7ff6ccbc08783a1ccb2748c22e57a1deefa867dcb1ae74c40b1969db2cee64c0706af8daf4c9e91c12672d8f0849af4bd0c4c5f8e439a3ba7e3ddf38a9b38db545410dec0aa40522d6a3cbc2ab53a838298f0b93ae7d362158f04858fc33ec03fa6d3b7ff0f27d74cc4abcedd25642f4d259d41511456004c24385ec32553ae5d5728a8f68707ddd6bfa51c2f4574e1c96ef4db0715675fa4fbc57b9091759eda387e16057e9d89797f61df9196044b98667866e12c5132928eb735fa2d02c0ee7e08ed68d80fe1f76bd85756a3967c6d3e1378a754fecee72362928cb622731bb01231758ebcb805f5e +Result = F + +Digest = SHA256 +Key = 3082010a0282010100a17a08272e656cf600f4650ef0952b15d568d9fb7f1b3f3559aa3792743f7d895e4e26dec2bf09996de8a99f7c434bc25b0c7d61e83fe5647c213b19902abfa053321a16048642cd3800de26172eb39ccab029130ceb82e5c25c676e89007cb00666a2d8f64e59fea64628cbec9c361abe25841551db01f58b80ab17f02a93cbaaffc2630ffb6f56f206b8a6f8e0f1e5790652e7c7227258dbcd5924e94876f983ed02e4e82272f5d44967bc501d1515d80dc25d5c838d0357d0d1704b0253d6e78802c02931000fea2e865c90b266c8a0b472e8eb17456777973342da6978cb45d2100cf91ca6f6d69ff30ee8f3164bfb180de0b355c067bd8f1a8544b9aac9020366a13d +Msg = 4c2d1103c36e96d179291397b1238177d4af3b6fb9dc622d23ed80258b096be020346d970d7ea100fa7aa068d5f25d02d2d94e7fb081cdde3f0fbd861f2b7092cafcc86cd4539d9d72265fe33a41fd84293805e3eaa00c51557e502537009c0f516b6ca9a355524fea149831677627a6e2b3a7c4ef9fe82d7024812b5bf0b700 +Sig = 4d8b5ba1f5409f476221b3527be6389c1ca3eb50cd62113ad2f712cb2142ceff3178948670c9cb7dccd44896ddec9c0eba228370cb23919610774e9d70d6eade95865042edca6e90cdc007234400591e1cce71bfbf5a546548d483e68905113693a3d1719ce376e72b180b7f3c7ecd13469b8edd7ef95d9e330d78cb36e37b50e87d161b1abdec433421a3a65b49b39cacde0678de41df894d6a2b0f171cf91052bf0f0bb7cc89889bed7699e33540b4ec8f93ca2c690783dc5d80fa5b815aab0feb3ef4f10c0cb46496aaf6dfd2e5b3a7dd64386ab9a4da0319bd927facaea80ba5f4b1d71e16fcc7550fd8211756c35935507a32f204858e2b475d28eb56c8 +Result = F + +Digest = SHA256 +Key = 3082010a0282010100a17a08272e656cf600f4650ef0952b15d568d9fb7f1b3f3559aa3792743f7d895e4e26dec2bf09996de8a99f7c434bc25b0c7d61e83fe5647c213b19902abfa053321a16048642cd3800de26172eb39ccab029130ceb82e5c25c676e89007cb00666a2d8f64e59fea64628cbec9c361abe25841551db01f58b80ab17f02a93cbaaffc2630ffb6f56f206b8a6f8e0f1e5790652e7c7227258dbcd5924e94876f983ed02e4e82272f5d44967bc501d1515d80dc25d5c838d0357d0d1704b0253d6e78802c02931000fea2e865c90b266c8a0b472e8eb17456777973342da6978cb45d2100cf91ca6f6d69ff30ee8f3164bfb180de0b355c067bd8f1a8544b9aac9020366a13d +Msg = e896edb0455f372c01d222d40af9298bc17fdbf450b4d0923dd7e12d4095987752cde6ef079614061d83fc805526791e81d21c7adfa52132a5c6a148ddec09c97320caad8dc352ff1ad23c3eae69c3028d867de20610469602187959dc5e6791731701b27eedd860204848d4bdccef800b2364f66cfc26067b53d326e4f39b18 +Sig = 6e21208ce42d4ec6512c300f6f9c0d43163eef7e05365448380ce3fec34913a701a5e30455556335101af1ba40ea69fc17b30c4192730336e8af2094d36873cc83617a3feebd2b09dccac1b31b9352c1db3c3dbb7ea1e774578e44c92ea925dafd9de71c46d3f25eb015199150e6e8c26ee612edc3fe2f0ca6acdca9274fcaa87d97e104112b1f85d1c3f3e92f0be7932613afe5a683c0e52f9234fd9ef979844e277e31d3c2b725bbebe97a9a8e619f8308c01a9b3ee48e5dfcca5b153e4890effb297ee0fecd30fd71b6dea0694530fbad6c65abc4621f23263ceaf2cfa21fcd19cb180812667e8b1ae108323ec289826412f124547ddd92024c0ea9784654 +Result = F + +Digest = SHA256 +Key = 3082010a0282010100a17a08272e656cf600f4650ef0952b15d568d9fb7f1b3f3559aa3792743f7d895e4e26dec2bf09996de8a99f7c434bc25b0c7d61e83fe5647c213b19902abfa053321a16048642cd3800de26172eb39ccab029130ceb82e5c25c676e89007cb00666a2d8f64e59fea64628cbec9c361abe25841551db01f58b80ab17f02a93cbaaffc2630ffb6f56f206b8a6f8e0f1e5790652e7c7227258dbcd5924e94876f983ed02e4e82272f5d44967bc501d1515d80dc25d5c838d0357d0d1704b0253d6e78802c02931000fea2e865c90b266c8a0b472e8eb17456777973342da6978cb45d2100cf91ca6f6d69ff30ee8f3164bfb180de0b355c067bd8f1a8544b9aac9020366a13d +Msg = 3f49b00ac1f9255907cc03f9b45dc787c250d9d6833fb389e2f746e1ede599d390cbb45ea3b7bc1b28365f16cdc573dcb988d9d5843fa8d4877587ed57fa5b878c9423b1c7f21fbaf3e138fbcac39cf89b3ca9a84b2e0c109be82a17a89abf95b80cc4ad3390975df0365653b23e8b02f3d30ff6e0f62864a4b8f506e9ac0c25 +Sig = 90ac97a93a9f6c5c6e268e3464b6d547dc29bff8797d9f776e2f56fe1c30fefbb679ca9fafba40f400f08a5163d757e638aee083084581b760ab30071e075f90183db328e1ab519fedca1ed92a1e4e473b538e2470606b5379abd2e4b73f4c132e30c115bc34c73019880571c30fa6c6c1e320c13022317cd3acea8c520f87cf054e84be89a952202fc3f8d0d707cd8806b8b22bf2c0d7bf884688607a05b635210b9a7e2e1d2a28e324c1573d363d5a76ea0aaac70480671caa4969e5177448e62e76270197697fcaab720d811588c8ab540f053c8b23b7cefad205fd4c444bd5e73d80c62451158331face2b6f7ddb034dd5e61bec444f68d0c7e39d2df940 +Result = F + +Digest = SHA384 +Key = 3082010b0282010100ce30e07f34619a8a127f0e4401055bbea222f7c9eca47e0ace1d2adf756c0600f88aa165117a6f069746facb76a74ce4769d308669bc7d200763a2919ff119cfe6ec2a614f1bc8d4c4620921b1e60012fce58b39b19ee72ffd76544469d5e996215582fca819b7d6107224c6de0439918702e2de1fdf820b0900d38928877926fe8713f6a81be084cf0f43b7c8b16d065817855ff43a0c453ade8431b6cedf700733853cf534db64e1b7e9cd25f315fe2b66121829356d502d5c833a7240ba27b2eef11cc4943f3f483ae31e5bb9f4006418319520d2baf5821d740bb7ec2df1f573f3fc89ef27090453f9bec58dc0fe8544ad9a6b157fe5183136bc768b39cf020400ee7f0f +Msg = 594007ec8417ba706089919c0659195a06e8fe38094ccf18b5a10028d1a43515aa7ebe7cb5dd5da2754950649fb68b717d5546b690b0b71a79f6216c1a930d99f804d723e3ea6dceda5d549d2982ecfcd460f43f38ef504bf0720a93f60798470a7d5dc75865725e556ca52deae8c265d4b012ba4b312214e1bec587ae285c85 +Sig = 25c7ab6e2f2365bf872dbf31ccf19239ca06542a9fc8fc47c69d25476db031d7869d3a340e1e0a8933fc36b36c49a4ef34af62e53bde304a4ea28fb14e20b3785a543a05bff10c4572753267179b45e32ca403c1e60a49e15086e160b006cbbedd908854e271e5a72c1695411da6078c6157d1d929d1b9be091c41f30f839de4500162ecb8507ae963c0fee43e6a431b7724fa0286d1f34f67f6e41cd6880aedd38c4261e43223eeadfa7d7c21c4ec3a47d04cd2fe5184180e4fb53091b7968df377fe09f02f9fb9ecf4ad929b373c131628fe07296dff3b8c278f50ea61dbb5c1023dc311e67b45e2986ed4121eeb6a345ba4c32eedfdd76e78a036414b1839 +Result = F + +Digest = SHA384 +Key = 3082010b0282010100ce30e07f34619a8a127f0e4401055bbea222f7c9eca47e0ace1d2adf756c0600f88aa165117a6f069746facb76a74ce4769d308669bc7d200763a2919ff119cfe6ec2a614f1bc8d4c4620921b1e60012fce58b39b19ee72ffd76544469d5e996215582fca819b7d6107224c6de0439918702e2de1fdf820b0900d38928877926fe8713f6a81be084cf0f43b7c8b16d065817855ff43a0c453ade8431b6cedf700733853cf534db64e1b7e9cd25f315fe2b66121829356d502d5c833a7240ba27b2eef11cc4943f3f483ae31e5bb9f4006418319520d2baf5821d740bb7ec2df1f573f3fc89ef27090453f9bec58dc0fe8544ad9a6b157fe5183136bc768b39cf020400ee7f0f +Msg = fa742374566394a67041b2671ea19204ca568b0c1588f605c008335dcde1eda4e1309ef8ed3555c00da9b79db152439dfad6dbb267cd8063b0195ec2f27a089e0d5d04f94af58abc428d89aafb1deb93531b1acaa293c3d99b7ada727340dea946a45e61b6ccbc04d59531784528114e9dce503c0f0546cd48d3af57985af62e +Sig = 01c7c3dbf4d817f4c473b23477df5ce1de19da551dbfbf3bc2d1d5ccc0cc0e92b047bde1f953f7bd0617850f9fc9fb6df97cafb51f123006ebe6271e5ebdd9e5a78d3a537c723fe512dfdefcb424caa8918d3c1949e8f495e01ba3c74be7bcc072f9f9708b08d15380d5829553c586797bd8d6879fa705511e5f8471df0eaaa9fa257fa867bb2bfbdeca0d7e333e4551fe9d7fe0d933397b33ecd261ad3f0f2a387be15b86916b18a3c96a782aedca04b9d04c8fe40d6ad607e20d29190ea97114d42b21a5b852c5c60301525f59345e648e2f6729b5f28ac43db465e3538f279c0759ac5784cc0ff8e5c6d667465af27257718029c94ce06665562108a8ef93 +Result = P + +Digest = SHA384 +Key = 3082010b0282010100ce30e07f34619a8a127f0e4401055bbea222f7c9eca47e0ace1d2adf756c0600f88aa165117a6f069746facb76a74ce4769d308669bc7d200763a2919ff119cfe6ec2a614f1bc8d4c4620921b1e60012fce58b39b19ee72ffd76544469d5e996215582fca819b7d6107224c6de0439918702e2de1fdf820b0900d38928877926fe8713f6a81be084cf0f43b7c8b16d065817855ff43a0c453ade8431b6cedf700733853cf534db64e1b7e9cd25f315fe2b66121829356d502d5c833a7240ba27b2eef11cc4943f3f483ae31e5bb9f4006418319520d2baf5821d740bb7ec2df1f573f3fc89ef27090453f9bec58dc0fe8544ad9a6b157fe5183136bc768b39cf020400ee7f0f +Msg = 27291335228e1da94acb8a3b47f7e1e581e7763a88ffeae4b248f55006c363a858fd5d02b6e4ead703d9b6b6e2061139d6f23a39a752de3e0723dc3975f54b76628abecc929fc617c60ab9e89805b27aa6cad9e8f260e59e89b4df0d63eb28a48bf7bdfb7f68ba51da851d38309ccd8f3a96dbb133ce07ec81248635984d0219 +Sig = 017fd9586eab20cfa751dfc278b426ddf05fc29d0c51d1de59f1adc1aacef5c31abd2c5491994f5884f7b6e939c238ba61a25c647eb881d34cd21e99fa44f778db68268b46dc6e7f06dc36f28d9d96706e8e3c02bb2d6a7bf11c8fba3b7477697ed5f43ebf109c3f6a70ac2af0510d91ed7312c131fabe48df9ef578965982649a3aedee8e103845d2ca72f5ea5f33f5f72a191e280f732cfc4d2cbd32981f385518da19755bae7c90d398c15e75492391c4bc06e61ac883ce397ff2a464bba432c3baaf65a053446d6d2b98f15243c00f2b248fcbc3ca46fc732f7c1297ed346a80b93758ab55bf32f8bfea9eb791c26b642ae085321831c0f1df200adf3afa +Result = F + +Digest = SHA384 +Key = 3082010b0282010100ce30e07f34619a8a127f0e4401055bbea222f7c9eca47e0ace1d2adf756c0600f88aa165117a6f069746facb76a74ce4769d308669bc7d200763a2919ff119cfe6ec2a614f1bc8d4c4620921b1e60012fce58b39b19ee72ffd76544469d5e996215582fca819b7d6107224c6de0439918702e2de1fdf820b0900d38928877926fe8713f6a81be084cf0f43b7c8b16d065817855ff43a0c453ade8431b6cedf700733853cf534db64e1b7e9cd25f315fe2b66121829356d502d5c833a7240ba27b2eef11cc4943f3f483ae31e5bb9f4006418319520d2baf5821d740bb7ec2df1f573f3fc89ef27090453f9bec58dc0fe8544ad9a6b157fe5183136bc768b39cf020400ee7f0f +Msg = 7a55bdcc36e6ff6c685ac6e7c3250a6c881aa37c05dcf6fc5c95d38985ea9e0b962ead8d42d5f24ca02cda0d2e4874b4163cd613b090bd0047ee73aa201df62db83456634e075ffda1e678d3fb87cb796e40a6135e79216a4062023fa0e1dddf69cf80f761638eaaf3ee69e131c955e2198cdb2517816c62cc5947ef0e1d9d49 +Sig = 54807d1b14852038dc94c53e2bb8bea76f074fe33897ded6222b52f1ff0c9144ebcb38d83b70f6b2d59600ef9ad089d4e3ad1ed35cda4fb54213b3e4b7b29d5f18725a03e9a9318bb56d96d9538013b110e7d810980aec6a451b52330e7d7f8fe02bb29519ea98053cbcdaa8d3657c0de6a4d268dabb6536d050de9526a03b242ca9f30e7889088645fdb0e46ac09f8a7bd79914ed5873fcd66137f93e19a5e1c372869113adfffc2186c70f87eea2f91b83235ab3113439b5cf1b0fdca9d4db02af34ab48decab4b4b0db27c6fd36f8dad5fae9f395417b3049f8c995318a2e09768869f23a349072fb7c885efb32cd3aee0b35469fd8516ae252e45df0ea25 +Result = F + +Digest = SHA384 +Key = 3082010b0282010100ce30e07f34619a8a127f0e4401055bbea222f7c9eca47e0ace1d2adf756c0600f88aa165117a6f069746facb76a74ce4769d308669bc7d200763a2919ff119cfe6ec2a614f1bc8d4c4620921b1e60012fce58b39b19ee72ffd76544469d5e996215582fca819b7d6107224c6de0439918702e2de1fdf820b0900d38928877926fe8713f6a81be084cf0f43b7c8b16d065817855ff43a0c453ade8431b6cedf700733853cf534db64e1b7e9cd25f315fe2b66121829356d502d5c833a7240ba27b2eef11cc4943f3f483ae31e5bb9f4006418319520d2baf5821d740bb7ec2df1f573f3fc89ef27090453f9bec58dc0fe8544ad9a6b157fe5183136bc768b39cf020400b9bc79 +Msg = 9570e4ae5307f347703324da8bad990a8659faf8d17acf13ec232d3227ee95e0adef19f6c0ebc07046c62c79853b7ac82bd06a2f9108c07140daea55b562e2f861d75667f4bd076ddb5b6faa0770a6e5f12286a4db370ef95887049e0eb1de44bb0ee32976e38ee938db33969ab4e40ae038967c376f80523b13c436bc44516c +Sig = c442aefba90877c319e5b8b2a87b50778bda701fa2bf5af4724d3eb7f894daea3fd719cbf0fa88ace828a1c7ff1701077efca06b8717fc2953f055d69bf8cac6f5b352da3ea459282903d42e886642c5ecf49dc5c8579f22d88c951a562a335b615df1bffed752abaad6a60612b186a4e971ec2eb8c33d3595a47e8fc871412b8b8f5f2fd262306499dd81f373e29144776c04393a2d433e9e3dd221678b2e62e7f7df1d40238c2c10c6f923c83b055e2a14ede1ec3ec1c48ec95faf0d61831e8539dfa62a3723e57d12bda7f75c2a7bf77d8a4a96ad2ba9a01d615b6ef05bdaa85d4e1e4804e316f4d32b8f1c3532366872497f139bea71a4f86ce00edab93e +Result = F + +Digest = SHA384 +Key = 3082010b0282010100ce30e07f34619a8a127f0e4401055bbea222f7c9eca47e0ace1d2adf756c0600f88aa165117a6f069746facb76a74ce4769d308669bc7d200763a2919ff119cfe6ec2a614f1bc8d4c4620921b1e60012fce58b39b19ee72ffd76544469d5e996215582fca819b7d6107224c6de0439918702e2de1fdf820b0900d38928877926fe8713f6a81be084cf0f43b7c8b16d065817855ff43a0c453ade8431b6cedf700733853cf534db64e1b7e9cd25f315fe2b66121829356d502d5c833a7240ba27b2eef11cc4943f3f483ae31e5bb9f4006418319520d2baf5821d740bb7ec2df1f573f3fc89ef27090453f9bec58dc0fe8544ad9a6b157fe5183136bc768b39cf020400ee7f0f +Msg = 33bdcbfd07f82ceb4a4b208a3d3c24316f745360ec1f374ab092df90613031503d8e825e51d564d1eb68bfc253c72450b6b45de7639449c33a17e7af601bb01338ce2a2d8f13ba9f1728b92a1785cbb960076ca1834dcc274163dd43439daaa30cc6eaf32b7ad55cb5d1364af23ec27357b6a815b414697eafbcead2717ec809 +Sig = 2077c18cf72a6a6366fa6632a286e116ae694008cfc3f13b1cbc005fee635a317abea470fdc28fbbe9cefa2f9ed3796488d00a8ef419bae16ac54f5c7c5332f2221b4e753599e20d778d714dc065106d0f023276afbf012c5cfb97ec3a364d27392d2a530acde5b6631b6fe40fb825bf31c7e7dce52e1f9a22fff93f8a5f2a34dfb03fda309c580ba5cd174886ca1af32b24f4733093a4f360c696107943e88e0e9896f78011800e6cda15c94154db4167d4a508e331c08d0127446de659cf2d519f0451a50c38e14572afcaba1e8f0ac218ad250c32cb370b5390e7bb010b6ec10d81c05e86f99c63139bb7190f605fa9ca8c8decacbcfc4d3c6e61d1895c0a +Result = F + +Digest = SHA512 +Key = 3082010a0282010100f5596b5c452079319067a1bb3fd2f9c600abe8a8be658285a99b19dfee65f03c52d7e826943a934bb25e79542b7a9e179b6f95698bcc83e19cc6db49bdf718957206d83621ae4e384eccdf283b52fa3c4e7c0859859b574da49cecdb87249f20f16f0a9d63e6907256d5db57ed3cf12675b0ae63b458a1d4b64a2c508cd6f18a4ec57e5cdf2c62edebf1b739bd01d8a280d3bc88a8a81f9627e4aa83f0656b03ff04710ab4531f4f854a6a9fb326728b8752f61acdcc5e1d8f523e69b32b1aced6e9850a777048f294365ed98fb85fb4c0a0829279d0346c8efc1ec6afe7576116d15339cdcd1a8fbf4999264bfe22e9b6e5b6dace317c7689b866a72152829b0203534f11 +Msg = 142565e97e8f5f95ec31fa8325beec222b3eedd82062bef364146ae2fe53cca53d3e51829e6e00faf189b7fbb814b757d089627553aa4447bc14517b4c176df6adc5327ed649edb62e7be950f4b1f17eded710a900c29b66f0c171a62875822cabe38e45ecc82fb3eb2c1aeaa13aa27f9e4f7eddf151cb3a484255c958151231 +Sig = ec232493d315f0c4ad232653ec9de464c33f956af3718c5b9f1266e7402c61c5ee9c177f14f8dcadd1d074e8f4087516b77b2477e4fdaaf48fd138e89903ff04e11cd0fb07d832ba545025b921496443b52978e215239474a031c44bf96ecb4aef393fbe0fb52e819cae819af3ab41c48b80afc60aaf41eefcf36cd00c2aea08dd09e5aee0056ed1b7f15ba237daae1cf4fd944dd09596e5dc0f029bf83b52017018c046e0cb58e3f24593117a624064d5c9afaf9df69bf92c816b72e625bfa5e9cd96e963c62b0cf82eecdc1852c1c02147030fe540dc270e454b4106f8116cbed3231630c7c1345be5f8847f8627fa082675c680a98ff109649fc4399d40aa +Result = F + +Digest = SHA512 +Key = 3082010a0282010100f5596b5c452079319067a1bb3fd2f9c600abe8a8be658285a99b19dfee65f03c52d7e826943a934bb25e79542b7a9e179b6f95698bcc83e19cc6db49bdf718957206d83621ae4e384eccdf283b52fa3c4e7c0859859b574da49cecdb87249f20f16f0a9d63e6907256d5db57ed3cf12675b0ae63b458a1d4b64a2c508cd6f18a4ec57e5cdf2c62edebf1b739bd01d8a280d3bc88a8a81f9627e4aa83f0656b03ff04710ab4531f4f854a6a9fb326728b8752f61acdcc5e1d8f523e69b32b1aced6e9850a777048f294365ed98fb85fb4c0a0829279d0346c8efc1ec6afe7576116d15339cdcd1a8fbf4999264bfe22e9b6e5b6dace317c7689b866a72152829b0203534f11 +Msg = 53b72306191a180e86830fd37a1f13847739cf6ab30149ca6b8ccd0d791d261e29a315144982fb117f96d969e0757a07bdf5ef0dc0ef3cbb38425192b21a3cb9c9729c9f3fd759e24c6f9270353bd7ec21999953290ddedfae40392bef49fa99da2ca2f123a09a4a9416242ea4f691f94a2cb58213e398fd73906e205833c9 +Sig = 6f17ef5b663a05ad79a4fd77515845d7dcf6fe5eb928f4e6567d7d615277ad7963595baf26971c1ee8db870c9e830d5be09732b8911476b09c1493aa1ce8faa2b527349ebfc882eb93acca56f5c0f5682c784c4094ef86aca1bf36acc97b7a9a96aa349c5f8d2034b92b8a8725be2091f7adaf8c3a1ff14a1e900a35bc6f2eee130595411a3c94aff5d7a0f9f9f5a8df9bbd5b28676ebc587c1f1e26000cc8b789e8c6974cbd49d58c139fa5847a924f14074d340b7bd4f325773f09d82a0da54da2d7df251951c5950762c9a3a0d2db10693f4aeeb97780367698aca99a42fa47b5f185e4c607cb0dda51aa2d93611e2f5bca343baef36dd6b0bac18cfa6b73 +Result = F + +Digest = SHA512 +Key = 3082010a0282010100f5596b5c452079319067a1bb3fd2f9c600abe8a8be658285a99b19dfee65f03c52d7e826943a934bb25e79542b7a9e179b6f95698bcc83e19cc6db49bdf718957206d83621ae4e384eccdf283b52fa3c4e7c0859859b574da49cecdb87249f20f16f0a9d63e6907256d5db57ed3cf12675b0ae63b458a1d4b64a2c508cd6f18a4ec57e5cdf2c62edebf1b739bd01d8a280d3bc88a8a81f9627e4aa83f0656b03ff04710ab4531f4f854a6a9fb326728b8752f61acdcc5e1d8f523e69b32b1aced6e9850a777048f294365ed98fb85fb4c0a0829279d0346c8efc1ec6afe7576116d15339cdcd1a8fbf4999264bfe22e9b6e5b6dace317c7689b866a72152829b0203534f11 +Msg = b286242ed447af64ee029c7f33b5428d440503773f30748ff843be68868d45ea025387a58bc546668d31e9084377208d7bbdc76e9a630d2edf39d535ecf05cdc82cf1cc58ca7f16d5f097b0440b6c37c265721e0c26f5de7bd8d14c941c65d51ba62ad33ded6f8a1ebf319192f5c7481ce3dda75c03aade019a644c98df69070 +Sig = dfc19a45dd3b67cfa9a47615cb7f5365f28b85d5c11ca965846326849a2002e64b8f0e377be83641ca5e795f190aa609bc03f94bae4ea25e681959ac85e0ba28f6d298244c8c6f5c18edd868005c375221729dc434ebeb21e5063fcb281761d2b626276dd14b6e70ab53c3909e8df9f70f8a93a1485ab9794e7ce5c424a530329bde2834b8363e1f857dd9ff8908f4108c305ef2c303018392324fc600617d5ca4d041eea9a77f116ae29766ceb75a1c5f4931674044c5e48c7b214a2bb6f1da81ccd43ca056776da7b1c0702a9f39ba1cbd861251ea25620eee495e6a8cb00bb0a0963b609086ffe552bc8badaa9aa6a06a9710fd96f6047b8b1660a7680b34 +Result = F + +Digest = SHA512 +Key = 3082010a0282010100f5596b5c452079319067a1bb3fd2f9c600abe8a8be658285a99b19dfee65f03c52d7e826943a934bb25e79542b7a9e179b6f95698bcc83e19cc6db49bdf718957206d83621ae4e384eccdf283b52fa3c4e7c0859859b574da49cecdb87249f20f16f0a9d63e6907256d5db57ed3cf12675b0ae63b458a1d4b64a2c508cd6f18a4ec57e5cdf2c62edebf1b739bd01d8a280d3bc88a8a81f9627e4aa83f0656b03ff04710ab4531f4f854a6a9fb326728b8752f61acdcc5e1d8f523e69b32b1aced6e9850a777048f294365ed98fb85fb4c0a0829279d0346c8efc1ec6afe7576116d15339cdcd1a8fbf4999264bfe22e9b6e5b6dace317c7689b866a72152829b0203534f11 +Msg = a5374f49877cfd0734fe20ebe12c360d950416748ae3788ad69cb7cc4ac8d6c69b5ec23fbf84d6b19aa4a4fcdac1f35a200c049660b21a798af938866a8b2de7cd11cea6e5048320eec005b712db65c88ab451dd074f93235060da1e2ca5bd9b8279fde6bfa70a3e787cc9865120953d1d2684b04661eb6e6ff924fd59bf8ecb +Sig = 2e985464b882f7c6672154a107154add844b4be163ceb8053be6b6fd632cfbc86d934e5aea7d11878b4df6e24fb0dce099c5b52bfec0897dc57fb03465adc2067a779d011e64ceadfb1e0a7051c5d248094ec8cc239d80c6e70591d617e54f503158f2b22b93eeebe017897fcc8f44703c815f07a476bda567dafe122bc07363818c83eddb6f777bb9e84f11549f3cbc283b78b3f2277c7a54072c13032a416c6470395472303c84adc17dc6128cd82c6ccd907ccb93adb0990289bc5b2eaf948c2f421ad0caf2655cd5839c86aa854370550ce033bc05b7638b8edf67bb5ea997bd904df293b89a0d16535134b66a6fd5551aec3dc09f29fdecbfc6f474de6b +Result = P + +Digest = SHA512 +Key = 3082010a0282010100f5596b5c452079319067a1bb3fd2f9c600abe8a8be658285a99b19dfee65f03c52d7e826943a934bb25e79542b7a9e179b6f95698bcc83e19cc6db49bdf718957206d83621ae4e384eccdf283b52fa3c4e7c0859859b574da49cecdb87249f20f16f0a9d63e6907256d5db57ed3cf12675b0ae63b458a1d4b64a2c508cd6f18a4ec57e5cdf2c62edebf1b739bd01d8a280d3bc88a8a81f9627e4aa83f0656b03ff04710ab4531f4f854a6a9fb326728b8752f61acdcc5e1d8f523e69b32b1aced6e9850a777048f294365ed98fb85fb4c0a0829279d0346c8efc1ec6afe7576116d15339cdcd1a8fbf4999264bfe22e9b6e5b6dace317c7689b866a72152829b0203534f11 +Msg = dbed25e65429b89264ff6928e6ea9424b862a2df1daf870660fe8f4bbbb55b5a7604260f53bc4ee62a650fb3d18b91933e582522f068cbee8bd8f92cc2a097aa79234e052b05021c8a3d9dc4666b0fbed06b93e67f2a33ac73b88ec8d79fd92a2c742430a4abde1cccaf9cc56e33168db6c27292939ec62960c7d888c45a28c2 +Sig = d5c50cfbf215c17489ba4d29b5e2f84a4ea244ef0dcec72c3a077e12d74d586574aa9683cdd0546c3581a723ca048415c6252894e40d3bd803138f78c7c493fc679aa1104e2844bf51618c3571789175828cf7d59addabeb8fa2745d08a247d5937600f8bc0dfe2e1ea7abd257b3e1c207a3be3e2fef8344979c4e0dbbbbfcaa908e1c9c6da303e510f0bb455f4b91dc7fee576e358fd5b2aa8f1e6440bc229c004c31e6e61123aef01a0d382852689ac04424007f55b6fa6aa298b9a93b3eceb6e585f69a5714231e60e1db27b2cf94f7ca5f6fc4118c0604ee716f41736c7efa6c43a3af42b27b585cb9c6356be864e0514e2bae881f4ad5ddb9aad592d7ab +Result = F + +Digest = SHA512 +Key = 3082010b0282010100f5596b5c452079319067a1bb3fd2f9c600abe8a8be658285a99b19dfee65f03c52d7e826943a934bb25e79542b7a9e179b6f95698bcc83e19cc6db49bdf718957206d83621ae4e384eccdf283b52fa3c4e7c0859859b574da49cecdb87249f20f16f0a9d63e6907256d5db57ed3cf12675b0ae63b458a1d4b64a2c508cd6f18a4ec57e5cdf2c62edebf1b739bd01d8a280d3bc88a8a81f9627e4aa83f0656b03ff04710ab4531f4f854a6a9fb326728b8752f61acdcc5e1d8f523e69b32b1aced6e9850a777048f294365ed98fb85fb4c0a0829279d0346c8efc1ec6afe7576116d15339cdcd1a8fbf4999264bfe22e9b6e5b6dace317c7689b866a72152829b0204008f3795 +Msg = 562eea18d9654547cb566556964ead28616c18e0920dd7f691883c8bcf1cd6f90826deafc597d13c24a65fa9dbc2840c7bcbf55af281bd7d543d28a6dbdfe0e52c0756f7db88635f321930b82e4e5349cbc73ada81a8cdc60f484f52772e853d4a391b98251e43d87c189f2a96da6106d9c9b10748684ffa4a137935adf10f2a +Sig = 4df68855dfccab1e7a94430bebb9c631770e7bd75538a9017e2df5b35117db59f8c9f620c1fe41bbc5bc65155355a83c1c1da767bf7e6c40ed61464a53009d7d8d1ee31e7e82c4b97c520d74a60e0de0597b977d07ee95fbbd4e5486d7ad61ebe302de0cd634be178a04c8b9498c89b7ee1c674a074e70ae0f93e7e5dda89c165808a8ab55337a048ddb7eff91a8b5309ed9941ecdf3ddc3b1e235f7cf139b681b97cfbc584d9c0359b26a8011dccd7d5ff0475d52959d35e30ad66735bfdd06e63749dd775e65d9407375ee9f5f9e73bf77b75fe0a5923fa7fcafac08e10f0563dfedc2aa2abfaff6f73ba293497eb0159cefd63c974553a24cf0602353fd4b +Result = F + +Digest = SHA1 +Key = 3082010a0282010100ca1d2f73de2f586157f15beb1ab7c3cf7b8d99ed818cb89eedd10ce20fa3cdf12c41bf04ed06769b7f78fe493a2d17acd5fee9c147d4944c9df3a6a99e5b4cd0d4e6392733806998a05f546a046a6767d79f23e627dbada0404f2b7dff2e17a5bc537bd8efbe0b87e50f5a4645e4a0dea8a2799d48dc110daaeef895db6d6244627d45cb382bfe394d94cd122f8ad73d3c0ec0946669938c1204f940dafc4cbaa95a91d55ae84264390590dbce3b9bf7a6a085444906c774877ae3a67b1a6d19ce37936adb50cc510018dcbe3ecc964583ada6dbd22b0eb4a89571d98238894b1033764b0c4726fe8511f4207568aa4489cf7a57e84b9c5ff26bdab9b660f91d02031e5e25 +Msg = 014bd8a7ccd4c3924208a8a6021bb7df5f238021062ab5e1e18131223c583aa4278c03581bc07516e0af2f92adc0cc8d92dc6448137c553e16064312ff595dc719a6e22f3883e4a69c3a4d0019671fbf75c200891239f5dacc426ef7256f8323a0427d146a4498a83f5107d58c3639ded17e5bcd4a881e1dceddbab7f7c13320 +Sig = 400994dcf90a8391d448059aa51ef3ef10ac64df165d5b6b22fb745bbfec307bfed443dd912414bde19bddff653f6460d6c2e1be6db883132981bc05d66827540a0f5fdb883645511173dc3b3c900daf1c0c2da808ef4a86061777f0c6f3ef738813f3cbce89cc8daddf6d178d1a45c83da92b3cc0cb68be6de5f5d56e5aad6db077f23979648253a8b1758e6478605646981882445f46738c955c900d74c60771528b91a83c69ced1ec3159be138b7d3872aef5ffd2f58c02b50bebb5dc3164bfdab96e6f325f9d4293a6b41d3f9f53535681454051778b98655849174748b1ef1a3841532b5aacc6a4b68a0cf994993643549ca0df2eba94718b11b73d6c9c +Result = F + +Digest = SHA1 +Key = 3082010a0282010100ca1d2f73de2f586157f15beb1ab7c3cf7b8d99ed818cb89eedd10ce20fa3cdf12c41bf04ed06769b7f78fe493a2d17acd5fee9c147d4944c9df3a6a99e5b4cd0d4e6392733806998a05f546a046a6767d79f23e627dbada0404f2b7dff2e17a5bc537bd8efbe0b87e50f5a4645e4a0dea8a2799d48dc110daaeef895db6d6244627d45cb382bfe394d94cd122f8ad73d3c0ec0946669938c1204f940dafc4cbaa95a91d55ae84264390590dbce3b9bf7a6a085444906c774877ae3a67b1a6d19ce37936adb50cc510018dcbe3ecc964583ada6dbd22b0eb4a89571d98238894b1033764b0c4726fe8511f4207568aa4489cf7a57e84b9c5ff26bdab9b660f91d02031e5e25 +Msg = 26dfc6c8d3f37c12edf9b1e176ba99ea602fd989a3453eaa8eddafe95a1760f805d049415e69d7cd5ccae165b3a7ddf7a902543b26f293950ba2a43ec59c7c9f224876fd63af005b9285949c1667ebe984616d52b8b3ebb825d590ea69b8150e244f35430b4e61843832b4cfc481298798530c188011aed9827d5d366df2930e +Sig = 8b9416808240350eab81f1468367cdb6c2b770b7dd9d88fcca8786db9407179b9401c5f074bf9d7a85c5fe26859e8e3bfd26502175bd1a759d1a6bd79149c043b25d9fa70d80f163696ca4153a3df857c63e709f0c00bfcd47e66467110dc6aa8da6411586101eaf99068585962ff994e8e51b30319561648994f2533bbd8b8adc2dff2126cd753ed8b8abc5913c0cf984e78128e2c18fc1f9d8017c60d2c4dd642633dfd412cc00a0c32569b25e328f242d691d75cd2ae22f8359426548b04e36f15bfb9fd561b1e3f3196296823a3828bb791f19bcb75e172f7c06e30cb2e9576bc83a7b59c67b821fc8c1d4d9775ef0f2b33a44c19d3aad04abfa17b8ac71 +Result = P + +Digest = SHA1 +Key = 3082010a0282010100ca1d2f73de2f586157f15beb1ab7c3cf7b8d99ed818cb89eedd10ce20fa3cdf12c41bf04ed06769b7f78fe493a2d17acd5fee9c147d4944c9df3a6a99e5b4cd0d4e6392733806998a05f546a046a6767d79f23e627dbada0404f2b7dff2e17a5bc537bd8efbe0b87e50f5a4645e4a0dea8a2799d48dc110daaeef895db6d6244627d45cb382bfe394d94cd122f8ad73d3c0ec0946669938c1204f940dafc4cbaa95a91d55ae84264390590dbce3b9bf7a6a085444906c774877ae3a67b1a6d19ce37936adb50cc510018dcbe3ecc964583ada6dbd22b0eb4a89571d98238894b1033764b0c4726fe8511f4207568aa4489cf7a57e84b9c5ff26bdab9b660f91d02031e5e25 +Msg = 59e84c0d700305007789dd765f33fc014241ef0fa4b406befcbdfaf27175d3a4e1ce097d27caeaa39eeb3bd3e1ea22b0d5ac445aea712a439d4fe93e42df02d9003687ed1d167f737b668c9963e0cb16820afcba3167e349faeeed8957bb179abc050c86d8508d1919e316f36e7dbfdb5044605603fef878198350fb3972db8e +Sig = 39daab754cc68ccadaf33a057d76aacccc30ad5341dfad503b33f29243e57636a68453323d81cede8ba0959bb980905f4a464ac21880842cf26eb8e8801c105ebda3a866d0d3e8597d234a21c46adb5dff49174df3c36f7c3deb693362418520af227195d609a548836378f4885af1ef95d2d9373c53ed811884cc534b7d88449281b2155938553205d5b51e39439904757a50d6c877d686b32906dd50049a620c3c3489c9007633a04882ef0186af29c71518ae8ed96f307d68eb33ce40793de205caea711cf9bea7fee8b751cd764f4e4e616c50be2456a868803969d692ff8b8b15a4f0d4ead24f610e231d5012a31247b46a582f1d3fea404a5d29691f7e +Result = F + +Digest = SHA1 +Key = 3082010a0282010100ca1d2f73de2f586157f15beb1ab7c3cf7b8d99ed818cb89eedd10ce20fa3cdf12c41bf04ed06769b7f78fe493a2d17acd5fee9c147d4944c9df3a6a99e5b4cd0d4e6392733806998a05f546a046a6767d79f23e627dbada0404f2b7dff2e17a5bc537bd8efbe0b87e50f5a4645e4a0dea8a2799d48dc110daaeef895db6d6244627d45cb382bfe394d94cd122f8ad73d3c0ec0946669938c1204f940dafc4cbaa95a91d55ae84264390590dbce3b9bf7a6a085444906c774877ae3a67b1a6d19ce37936adb50cc510018dcbe3ecc964583ada6dbd22b0eb4a89571d98238894b1033764b0c4726fe8511f4207568aa4489cf7a57e84b9c5ff26bdab9b660f91d02031e5e25 +Msg = 73e48a5d845d55944fe63aa61db36d80724b2809ecdeaa106dd880827db603e1e91822f1b01861b520db22993d6523f162b249a22b029c1f9174929857d6906ea6bcaee9f4cfbb2d2a68816a055e4954bc1ca2d3e4f65ffb91bddf3ebf9091e0f0f6b6ac162a69e6b2b6dd803e43e790c9b0bc02e161fb8ab5daeedd7b8c0d21 +Sig = 5f566d4ad20bec081e05f610df9b972a69afbb71e2a345f3b4fe8b5e2243cdc6a68044e46996ee9bbdd90e6bc7354238566fd7535e6ef04b7d0ea8eb3cb287b23e2492f1f16c799150bfef616467f1ae535667fe76ad5f6ec16aa0f0491c3ee7afebc6da5d6e4ebcc0194e90fd0bc944b0279c9973e269a7452b87a1a317c3d8131804ba4ab2b7a48a8241fa20506d9dd4d1ad74051d28c32c0e1c7bc4099e25c6056a359132c3f0d8d1f2725fffaec815eb91d9bb902aa8d024b797da8035c024539514ff3346067bd583aae8fe5f2a54be488f053407827445a27faaf635e97a7888246d817e7b291d9ae5939e0ebd0cd4a6cefcdf4bc5a637e294a368ab29 +Result = F + +Digest = SHA1 +Key = 3082010a0282010100ca1d2f73de2f586157f15beb1ab7c3cf7b8d99ed818cb89eedd10ce20fa3cdf12c41bf04ed06769b7f78fe493a2d17acd5fee9c147d4944c9df3a6a99e5b4cd0d4e6392733806998a05f546a046a6767d79f23e627dbada0404f2b7dff2e17a5bc537bd8efbe0b87e50f5a4645e4a0dea8a2799d48dc110daaeef895db6d6244627d45cb382bfe394d94cd122f8ad73d3c0ec0946669938c1204f940dafc4cbaa95a91d55ae84264390590dbce3b9bf7a6a085444906c774877ae3a67b1a6d19ce37936adb50cc510018dcbe3ecc964583ada6dbd22b0eb4a89571d98238894b1033764b0c4726fe8511f4207568aa4489cf7a57e84b9c5ff26bdab9b660f91d020360e097 +Msg = da4c0bf959ae81004fed9e58752e03f486906288f30fd891d7a77e952dbc3bac41b9dc3f64f86610e4e2aa7a3b571bfb8750ddef3ac21e9e13c6a9794df8b8a1161c0aa94208369d41be3f434ed868a0ea294abe89a123ad8b7171c86d70c03941bdc0c05ba69ab04ec9843a177994ed9764d17e477290c527f0fe09f7edf97d +Sig = 8b31638425af6493fdf969789f33b2f44bb0d84923347cf03cdc72ad9f139fad79096d100e567caa8099ae15c2ff5c74a3ddb8b40f5fa5a23da10b6b39d985d2d2219d129a39587983660fc9d51f43b1cefc1ae1a102c6d9634b4748d3a2688197fd445a635bfe40dba7da006e7016b9f1a77c2be92f1f50181c025b22224785d4c9c7062429506ba2a1b18bd719ef72892029df3098e707bf1858f81dee73827f9e1d1f9fb1055d969ed45a513f39870250c2b8a507605468d75f0d3ddf1dd1ac3a8bd245101dcf1eae32822dd208b0dea4ef5722d22518de07712192178f57c523175fe4ba17fdaf7e604efc6ad5e2215e1f327abe9ec2004bf7b70505e492 +Result = F + +Digest = SHA1 +Key = 3082010a0282010100ca1d2f73de2f586157f15beb1ab7c3cf7b8d99ed818cb89eedd10ce20fa3cdf12c41bf04ed06769b7f78fe493a2d17acd5fee9c147d4944c9df3a6a99e5b4cd0d4e6392733806998a05f546a046a6767d79f23e627dbada0404f2b7dff2e17a5bc537bd8efbe0b87e50f5a4645e4a0dea8a2799d48dc110daaeef895db6d6244627d45cb382bfe394d94cd122f8ad73d3c0ec0946669938c1204f940dafc4cbaa95a91d55ae84264390590dbce3b9bf7a6a085444906c774877ae3a67b1a6d19ce37936adb50cc510018dcbe3ecc964583ada6dbd22b0eb4a89571d98238894b1033764b0c4726fe8511f4207568aa4489cf7a57e84b9c5ff26bdab9b660f91d02031e5e25 +Msg = f0d6d7e7eedfec55dbb2e7506ebad1c99ba7ed0a5b1f9b01afb07cdce20ad7d70f6b3b52e45a6627a598663a7454fe52cf9e4b275a1ea7bcdf06ceee9345404d9bfee62cce38f7f4bdd71dbef0cbd4207387134692b42f45e027fcad7e11355d99761e9c35e16765295554016b861bdc8e498e91894af947bafd4e402bd77faf +Sig = c6141f88f387f4250ea16d2bc2b438fdfdaf3f3eff539a4f0573d249502d08c4a57333c511dac0b1d0e85cc3ff3bcd9ede0bddab2e4141157e41003dec0dd494cce39e4e9e4d77e89ab266e74579382fe4c829a090ffe40ae17b53da2653876112acb2b1575613570f4ccb219ae51ddd950078c0554cdb7394906c54ca960fc56bedacf7d62e25b72d5e727d18b9cd378f8131b9de088216929f42420404d75b4e960a257927f82ff353217042b61a45ecb45457a581dd82c57a76f7160273de2be85b594db977a29e92813f74feb1678e35a339c42dc66eaec11c8531869ee64c8f6fdd4bc2d918ac29e8995a35f06edc7fb1ec494a86b04dccadd448620ad2 +Result = F + +Digest = SHA256 +Key = 3082010a0282010100c9548608087bed6be0a4623b9d849aa0b4b4b6114ad0a7d82578076ceefe26ce48d1448e16d69963510e1e5fc658f3cf8f32a489b62d93fec1cdea6e1dde3feba04bb6a034518d83fd6138ea999982ab95d6a03517688ab6f8411c4a96b3e79d4141b8f68338a9baa99f4e2c7845b573981061c5fd29d5fc21833ff1b030b2deb651e51a291168e2b45ab4202dcd97b891925c75338e0e648d9d9ad325c10884e1fcdccc1c547b4a9c36aef939e8802b62405d6e3d358ffa88f206b976b87f8b12b827b0ee7823f9d1955f47f8678f7843b4cd03777e46717060e82bf149b36d4cf3d0bc7e4d0effde51a72f4ced8e8e5b11bdb135825ff08873e2f776929abb02033c7bf9 +Msg = fc8e19e3b26bbf7c8c33a452b7ee02cbcf56fa94a58b7cee3e0866481fd6f013c7ff47d27e4678704d1590d74eb701be26c748c2cfe9cdb99bb80b4375fff0a16a2b87cb6900d4bc478c00110659b6d257e7cc905d5926b0b46fd706b2b48aa6edf921f6fd019b08837e3b276a3ce6b06c9dce24d8454d7a931613ba5d5f84c7 +Sig = 058bcfa4b10ac6a73918a07b9f0a8db1ebab9a0ee5c7f0a2261b98efb3592eeb6bf45fceae24ff20c2683e1b33291f49a7f86d7fe239c58a45910a14748e10c25a4dfa693e5a77138de2fe5f61de0a09078cd0d3c61b1e740bca7a3d4048d4fa12fe69412438efa18216819be40733500acd8087f429da734fce6a97fcdc9c32991dc847e4d653260890304f378a10b7754cb4ac5efd7a3db23bd44b6542b81ae9fc33edca6eb1570b1a39a0b8976626c3892afc42e6fbfa8bfbc191c3d026a6248e7ee391f977ea5f0442306ce87702ced7b3f00bf0a6040604d0a663859737ec6c04dc84763d1cb63c4da8381a08cc52b370ba09515b93d9a6d3e47c5929aa +Result = F + +Digest = SHA256 +Key = 3082010a0282010100c9548608087bed6be0a4623b9d849aa0b4b4b6114ad0a7d82578076ceefe26ce48d1448e16d69963510e1e5fc658f3cf8f32a489b62d93fec1cdea6e1dde3feba04bb6a034518d83fd6138ea999982ab95d6a03517688ab6f8411c4a96b3e79d4141b8f68338a9baa99f4e2c7845b573981061c5fd29d5fc21833ff1b030b2deb651e51a291168e2b45ab4202dcd97b891925c75338e0e648d9d9ad325c10884e1fcdccc1c547b4a9c36aef939e8802b62405d6e3d358ffa88f206b976b87f8b12b827b0ee7823f9d1955f47f8678f7843b4cd03777e46717060e82bf149b36d4cf3d0bc7e4d0effde51a72f4ced8e8e5b11bdb135825ff08873e2f776929abb02033c7bf9 +Msg = 4c587ab2ddd6b13bf7a916b5d571d7613f24258201b1421b9de4dcfb3d8a99f7ebd5f37704024634ea38273ffab4f846be23b913634f21556dfeeea3a91779be63078d16da637990f1cf6487271ee111c9bbc483674733378483008c9171362f1db6f199464373d97334759445f8bb4acab3ebdaf4e09f494a3bb9bfdedef7d2 +Sig = 052bc5efecb052b92821c405e6f22cf374dd1ce4bf691eb8abcc1cd01254a6e51fe9237cfb9cadfe32a8780135949399b048d26f5de49bb9d008d39b749527eadd13066baff87765eb255021517a2ea69e45bd35db1fba9219c94f944b2c9a33a37779505c8eae52d6061988d152f9f51f0002e545973402294dda7f7c7cc3135c37ced8cf723d4011d1ac16bc1d0bd670eb7f63f079f30dad8cf55c326a33bc1684ff17a91509f4ead4f93c3c0eb6679eab612e05fc71b936c99ca8579cdeb9f26200a4bce89e330fd5d84b1ec98cc1d758243001fb18bc325b630a58154c2d38a5a8ac2ae6cfa54a20f7580a745c206990c142e8a580eb36266a3a9602a8bf +Result = F + +Digest = SHA256 +Key = 3082010b0282010100c9548608087bed6be0a4623b9d849aa0b4b4b6114ad0a7d82578076ceefe26ce48d1448e16d69963510e1e5fc658f3cf8f32a489b62d93fec1cdea6e1dde3feba04bb6a034518d83fd6138ea999982ab95d6a03517688ab6f8411c4a96b3e79d4141b8f68338a9baa99f4e2c7845b573981061c5fd29d5fc21833ff1b030b2deb651e51a291168e2b45ab4202dcd97b891925c75338e0e648d9d9ad325c10884e1fcdccc1c547b4a9c36aef939e8802b62405d6e3d358ffa88f206b976b87f8b12b827b0ee7823f9d1955f47f8678f7843b4cd03777e46717060e82bf149b36d4cf3d0bc7e4d0effde51a72f4ced8e8e5b11bdb135825ff08873e2f776929abb020400b53999 +Msg = 425994d102a63f542766b12d5207ace27de9207630c2fdeaf741450413f1654f7061c563d7829e6665500cd33cb4647a78a9c7c9659ff749ef1c6a6b59a99d8532ecab1885121e54517005de386947d07b923602261467888852c27be6ccd5fd71436d77741f6825d20dc5d5b0ecfdeb6fea96a9ddeaf5adac2a74bb2322b4bd +Sig = c1f91aa430083ad84ca80ffae2d1ac2bee9b22bd0947175ffd03bd294f6a3cbb5ac63afdacf02f7a6a274fbc33f8aa25cb08174c9c4aad0cb9cbaf02e6f72a8deb6ac52ba88da773b4fd07b33144b9a28a23a1db150cb095cf03b208e80dda3263806b6b0e8eeeedd624d4eb8028e6b98ef2a3e55f38f1b0041425cf7557c41d35d4b0383448c800076eea2c22ca2f333496bdf53564f39d76822f55cb767cc1c2d516a22b4c6fc1525608ba61eb42c04c788c7050a48b7f3a431b2553dbb52cc065a9869c49cc021d7e448dc7012842d3351f98820bccd4fb7640b85fb431fbccbfd4e2544b6f3c7c270326c8cbbd216333ac82260c5edb47a301acd05c7c7f +Result = F + +Digest = SHA256 +Key = 3082010a0282010100c9548608087bed6be0a4623b9d849aa0b4b4b6114ad0a7d82578076ceefe26ce48d1448e16d69963510e1e5fc658f3cf8f32a489b62d93fec1cdea6e1dde3feba04bb6a034518d83fd6138ea999982ab95d6a03517688ab6f8411c4a96b3e79d4141b8f68338a9baa99f4e2c7845b573981061c5fd29d5fc21833ff1b030b2deb651e51a291168e2b45ab4202dcd97b891925c75338e0e648d9d9ad325c10884e1fcdccc1c547b4a9c36aef939e8802b62405d6e3d358ffa88f206b976b87f8b12b827b0ee7823f9d1955f47f8678f7843b4cd03777e46717060e82bf149b36d4cf3d0bc7e4d0effde51a72f4ced8e8e5b11bdb135825ff08873e2f776929abb02033c7bf9 +Msg = bf082fa4b79f32849e8fae692696fc978ccb648c6e278d9bde4338d7b4632e3228b477e6a0d2cd14c68d51abdeed7c8c577457ec9fa2eff93cbf03c019d4014e1dfb311502d82f9265689e2d19f91b61c17a701c9ef50a69a55aae4cd57e67edc763c3f987ba3e46a2a6ffb680c3c25df46716e61228c832419e9f43916a4959 +Sig = 621120a71ff2a182dd2997beb2480f54be516b79a4c202d1d6f59270f8e4d4dbd625ac52fe0e49c5fd69dc0d15fb19ec58c9312a8161a61cb878abcb11399937f28ff0803877c239ce0b7c4cbc1e23eca22746b071b2716475424c12944660b929b6240aebe847fcb94f63d212f3aa538515dc061e9810fdb0adeb374d0f69d24fd52c94e42668a48fc0a57819952a40efb732cfa08b3d2b371780aea97be34efb5239994d7ee7c6ab9134b76711e76813ad5f5c3a5c95399e907650534dbfafec900c21be1308ddff6eda525f35e4fb3d275de46250ea1e4b96b60bd125b85f6c52b5419a725cd69b10cefd0901abe7f9e15940594cf811e34c60f38768244c +Result = P + +Digest = SHA256 +Key = 3082010a0282010100c9548608087bed6be0a4623b9d849aa0b4b4b6114ad0a7d82578076ceefe26ce48d1448e16d69963510e1e5fc658f3cf8f32a489b62d93fec1cdea6e1dde3feba04bb6a034518d83fd6138ea999982ab95d6a03517688ab6f8411c4a96b3e79d4141b8f68338a9baa99f4e2c7845b573981061c5fd29d5fc21833ff1b030b2deb651e51a291168e2b45ab4202dcd97b891925c75338e0e648d9d9ad325c10884e1fcdccc1c547b4a9c36aef939e8802b62405d6e3d358ffa88f206b976b87f8b12b827b0ee7823f9d1955f47f8678f7843b4cd03777e46717060e82bf149b36d4cf3d0bc7e4d0effde51a72f4ced8e8e5b11bdb135825ff08873e2f776929abb02033c7bf9 +Msg = bb40a410b0183b32df12f739506643bdd2fa7e6aed83974918ecda402cfb09dd1932af4fd7f3b1b5a0e8269c5da268c25e806b204dd34e28653f304cdf6545bfadbe297f6bca7493936b8e91f08bc56455059c4c8ec36626972414ee0ca04c82e1aebba953e5ab531e62d823f16b7f2a1f51b9f6979b07cb16602e309bf545ad +Sig = 3f6909f674d4c9c2c26b66d8ee3d7702c560b193a8fbfd0ddb3a9dc909a6eb7aa74d446b7993cdd5b7e272d826281e4cfa08000d2291c2ebe3ee6a77a4e03a79248385359d0885c61c8ade8cf4de7c8e51e879cc1e6089a91a56dc58d2b239e185e9afebf733e2f0fd061270eee0670122c44fd17af6860b6f59690a1b2a91e16522e6a75903bf4e6c97237825f0b01e4c236052b173a8d91f910b0c903590e16d7104609ff9c0194ffe0c09dac1969ea08b01497c8169c7357e8b1f1040604dc0f8b967bfd075284736aa22b0822d3cd13c48a8169413e0b6b26af56c577c829b38e3fb5c4ff78949634d14ff3a40d0d43584d832d6b51d4065e0900ef197a5 +Result = F + +Digest = SHA256 +Key = 3082010a0282010100c9548608087bed6be0a4623b9d849aa0b4b4b6114ad0a7d82578076ceefe26ce48d1448e16d69963510e1e5fc658f3cf8f32a489b62d93fec1cdea6e1dde3feba04bb6a034518d83fd6138ea999982ab95d6a03517688ab6f8411c4a96b3e79d4141b8f68338a9baa99f4e2c7845b573981061c5fd29d5fc21833ff1b030b2deb651e51a291168e2b45ab4202dcd97b891925c75338e0e648d9d9ad325c10884e1fcdccc1c547b4a9c36aef939e8802b62405d6e3d358ffa88f206b976b87f8b12b827b0ee7823f9d1955f47f8678f7843b4cd03777e46717060e82bf149b36d4cf3d0bc7e4d0effde51a72f4ced8e8e5b11bdb135825ff08873e2f776929abb02033c7bf9 +Msg = 56db10c78e9fab7c1c356bf8b38e4adcc464ebd1a3cedabfe812144016baca547aea625656f0bf2e3f1dc2c9c4d310c650e01672520a4bf79aebb5d00600af805ffce9847e62b086b35270d367a3770fff33fb28047b5f888167b28fad647940cabaae3a4d1c08ea3f7d7d00e326061f9906a2d902499dda652c1263520faffb +Sig = 8432cca3357f5ee765bd37dbe2b2d107dfd840f8f720cf4a80144740f96e47529c553fd503a25bfac61ad76a24386af72d81522e6f05b66299f6aea3b98b23838e7dde04db8f8b0f32ae393f6bc0bd7070e566ba1fea53ca871d680f70cc9585aeece672d7c64c228c49bf1ce877dae73f9d8756433f5edc4331415d51957d23e490d4f25317d09a3ad06ec9229dd706cf593915cb156d7f7a32d68e52ca27aea7087d4fd1e194b6029246694742dc70c5136a26cf41b3abf9cf9cb65cd2e37ade6b9fe5ef6160279871230f35758f02c3b37789c1d74df0dc0f97f28bd789755982dd249c0960e64739b3c74b9c55ab810650529e7243bdafda7edef76fc748 +Result = F + +Digest = SHA384 +Key = 3082010a0282010100ec660e20d2b5c6d192540b0f7331da6f1df6126a35861ce249bd0b6aac48c182dbfc5b6716892616810e8c39f9d9c7230771a64810bd9b0146b965135c38751c1793945cef1ed8a799340990ae73d542e26701907b707c3e383f428f87ef5af2b276d0f8dddf8bbeee36824c524b4c38195b9ac69024b65fe5bd6d768166199f3659936824addd4ee488c42480090bad1fec768c339fc172d9692f0c9d17638884cef77c763539b5995573963f12a852511c410833ae0d4b9086a92754f47453032858e6b5f5f215ad48122bec89830a4de5ad86cece5677dec6d6e01ad94d42933c4820269c595e52fef3694521060280c7e505d090aed94bf0b0a3c1596593020319aee1 +Msg = 2d891e111a8812a6448bc2ac2c234a616997a8579335c36d5fe6acfe0b052358fd715d70a7e104d4ad7880e04a9a7535f0fd8c672e0377f6d7472f80617580348b60c88a424efc31c696eb49096ec7d358fee1663cb9b423a3ec25eb3b9709cf1f7de8c7b57700a7d60d8d5030474823e9c12ebc85fe82dc0afe15a66213c50f +Sig = 7dce8f644be457f76b46f3537cd3c1965832e89ffa636f7bca10a2505db17e9babb7c3e5628fc5323d505efade76ed8a9b702b84c22be49c70b8c3e54b4a1f6daf66c2425ebc03fc6ccb600dbf916048e395aed1a5676db004d917c4021f786cfd0ac332e3e0434907848229af099ee468d6324d54f5b2fd051c7449f55460bf519eb9c076852b017220500168e18cd0358cb2c409acf692b4bfe1c75c4d319a45d465f920fb3f92b5c7025c21479c3e9c85bad8a323ca1fa0f112f448aba0bdfe602734f149f619479b39ae5217a01139c271007748fe5a089294a8c3c3507428c6a11d9ea84ed7c7b35a90d07ac3eee713189d47d4681316de68683c1fc94f +Result = F + +Digest = SHA384 +Key = 3082010b0282010100ec660e20d2b5c6d192540b0f7331da6f1df6126a35861ce249bd0b6aac48c182dbfc5b6716892616810e8c39f9d9c7230771a64810bd9b0146b965135c38751c1793945cef1ed8a799340990ae73d542e26701907b707c3e383f428f87ef5af2b276d0f8dddf8bbeee36824c524b4c38195b9ac69024b65fe5bd6d768166199f3659936824addd4ee488c42480090bad1fec768c339fc172d9692f0c9d17638884cef77c763539b5995573963f12a852511c410833ae0d4b9086a92754f47453032858e6b5f5f215ad48122bec89830a4de5ad86cece5677dec6d6e01ad94d42933c4820269c595e52fef3694521060280c7e505d090aed94bf0b0a3c15965930204009885f3 +Msg = 8e8fa198e16acb264e1d0d9895af5ade743d7586d554bf39469e4e89a9c13eea2d844cfd7d34a0153746ebf49f3db2d595ceeab0c442c4b91d1dca2984fd2b42c8c4538dd9f9bf67356c10bba4195e11254fcec82812679ffdbd217b8dec3f644898dfd05e84d02432d8a3780c0c059a0d084c56698a4ff5d0c77b042d552357 +Sig = 421b51d49f5d95922894f0e44dfa5928f1589c632e2c0051b1e085c174e928d98f035b958564b92daf21408e130815c00b35b32578d320b4e604c77088dfa321fd69f6dbffb2bbcfd53d6d8023d9862598ef38f05f0d44dbe72d108aabcae0076d4dd48e4c38115ee7fccfbeca3fdb69ca26f233284d866aba242c932936a0e1f6d01b668204f7cb534164dac3183e08857b4f150ba6a4a38eb98c4ae2aa983c0c5971e62e687cc63fb9eff8148bf01d14011322cbe85a2bba650200ec39f8e3327196d3587e1f167cfaca4abe538f9f420b3ec5ac95c462ea32a700da870756f7fd759befbfed269956abf4d22d0378096bbef743b0feb15b30e2954cdf3ed2 +Result = F + +Digest = SHA384 +Key = 3082010a0282010100ec660e20d2b5c6d192540b0f7331da6f1df6126a35861ce249bd0b6aac48c182dbfc5b6716892616810e8c39f9d9c7230771a64810bd9b0146b965135c38751c1793945cef1ed8a799340990ae73d542e26701907b707c3e383f428f87ef5af2b276d0f8dddf8bbeee36824c524b4c38195b9ac69024b65fe5bd6d768166199f3659936824addd4ee488c42480090bad1fec768c339fc172d9692f0c9d17638884cef77c763539b5995573963f12a852511c410833ae0d4b9086a92754f47453032858e6b5f5f215ad48122bec89830a4de5ad86cece5677dec6d6e01ad94d42933c4820269c595e52fef3694521060280c7e505d090aed94bf0b0a3c1596593020319aee1 +Msg = 92547ecfdc67a3887d5f686c77bf982d84ef4a951131051d8ad628bcd7b289fd27cd5d54ec5b58b226ef1557e5ebb7e8093bd1c14d43838c8415e61222e8aa52fdc6fed05584b03012f796034e652ce1133a7eb866fc496384815d7f6b60457a9ca52aec20c9f52bc9e1b41aba153f4129541b2364469ecb128254a9bc02a29c +Sig = a4c509864fb912cccf022eff3b7e2f4b568fb08aafc498cdacc1fbfa3c7c276645a7d2d838ed703e2dadc205c77e38e0e326a84c3a9dd3a1d6c5aba50c23e6923378ae1e3edd125751ccdc38d80b91569c20dc517ff1963be1d6cc35d2728bd3cdd0d23d341ba91b58ca868d90490a6a5a88bed3a789d46907b9acb725f187843b57d22b17b3966971deb99030eb72efeb4704a91683ab488160a5b43de32319fcf609cf00485f2a9a5a3a8eef1ff1b9cc646b8645d958bd002bb152327e92f6beb9f4c3c193f4f35de29c6e7a8739761018430e5144dbeb895857bf5a313570f1e94e9ab2522c6c046f0a8190a995bb49be4cb7a3794f89e1a4c8ab295f70c1 +Result = F + +Digest = SHA384 +Key = 3082010a0282010100ec660e20d2b5c6d192540b0f7331da6f1df6126a35861ce249bd0b6aac48c182dbfc5b6716892616810e8c39f9d9c7230771a64810bd9b0146b965135c38751c1793945cef1ed8a799340990ae73d542e26701907b707c3e383f428f87ef5af2b276d0f8dddf8bbeee36824c524b4c38195b9ac69024b65fe5bd6d768166199f3659936824addd4ee488c42480090bad1fec768c339fc172d9692f0c9d17638884cef77c763539b5995573963f12a852511c410833ae0d4b9086a92754f47453032858e6b5f5f215ad48122bec89830a4de5ad86cece5677dec6d6e01ad94d42933c4820269c595e52fef3694521060280c7e505d090aed94bf0b0a3c1596593020319aee1 +Msg = 1a852bf321f978536e0c9638414beb424afbbc711ab742e7d85b01ef3521553fa10a4e7ac080bdf917398fcb0c5e5afa0ded36100f5cceda3a7fb76ce2ab0065ba1c0a754494991c8c452cb416f18ab115509e28ddb2848e9be5e4c344597f4ecb8207eb977e344334f814fa494ca3eecaeb9bbe6e028d8a645631fa4272fb82 +Sig = ed0c530de2798f47c15dfedde11d93fa134b243aa2d7ce2bba3718fb1a228f1ec7f6908f56f57166fc2f37c86c22b097f2324bbdccff72f6ff7650fbec45b0211a43ba885a6aa807470a93b08828e04300df4916640e4d8671f22d57ce20f1f0bc89b2f01b55e4aa5426ece11bcd05aabbb3d7434536cfa5256de9b99849e01ca9ffbeb770cc00aba63515aeaf92dac5e03a29f9f2746c2274d60f04d4353d76a174a17c25255a4dbddf8ff11987e2867da69049981e8ab9c1a200788308bda37c4fad9ddf5ea9b62ba42505bf3ae3ca5ab3d36ec5d67d993817caa1b0a7a225f0b3b42aa5734d7232d2d9e3c0b4cad51b26bd5dd2cefc22fa09ca060ff16801 +Result = F + +Digest = SHA384 +Key = 3082010a0282010100ec660e20d2b5c6d192540b0f7331da6f1df6126a35861ce249bd0b6aac48c182dbfc5b6716892616810e8c39f9d9c7230771a64810bd9b0146b965135c38751c1793945cef1ed8a799340990ae73d542e26701907b707c3e383f428f87ef5af2b276d0f8dddf8bbeee36824c524b4c38195b9ac69024b65fe5bd6d768166199f3659936824addd4ee488c42480090bad1fec768c339fc172d9692f0c9d17638884cef77c763539b5995573963f12a852511c410833ae0d4b9086a92754f47453032858e6b5f5f215ad48122bec89830a4de5ad86cece5677dec6d6e01ad94d42933c4820269c595e52fef3694521060280c7e505d090aed94bf0b0a3c1596593020319aee1 +Msg = 3511607cfd2eea7780877d2c585d1d2043881cebc97ee0ec20b1e73b4c1e07df8a22fb41ef901be14d026b48566cd73e04f7bd3c380cac24a1ae6c30df0e3e28e85964d9abd5e4c2f42c8a1090082ccdb1df3154941154086030a645529ed297175ea52a7924ce823eaee26c4d57a33513ea811925b461fe27dd9e63ecf84d93 +Sig = e91b444f45a604eb9203d83adc877a36894c5fd6d75c521caeee6a8e57904698a887d0c54398bbf82da4c3aaab349bfc706497d991bdb86b9bcebc4c87df1b901b47ba95fdd0b8ff4b5dc5bd3300d36ec48e895208e41d569b2545fc7f3776797de5a21dd228da7ec09ea154c987812b12cb4c349e6029e61b9e5c1d3038994445f9d4b5151246a6b7012576cf2aa23afc2e259255663cc1977ac1fe8daed2b2b5d1ac1d0b1a7b6e32e50be4d4c3b3d818d7b650f85726f9d4b505e5491468d7f286bebb4d97fd4dc0854e0f18c0cd0455fd54d57968aad620a670e0f4aebca070247563d69044c3ddabcc735177e91c99953e00b81de45d01eb3dacc09c1083 +Result = P + +Digest = SHA384 +Key = 3082010a0282010100ec660e20d2b5c6d192540b0f7331da6f1df6126a35861ce249bd0b6aac48c182dbfc5b6716892616810e8c39f9d9c7230771a64810bd9b0146b965135c38751c1793945cef1ed8a799340990ae73d542e26701907b707c3e383f428f87ef5af2b276d0f8dddf8bbeee36824c524b4c38195b9ac69024b65fe5bd6d768166199f3659936824addd4ee488c42480090bad1fec768c339fc172d9692f0c9d17638884cef77c763539b5995573963f12a852511c410833ae0d4b9086a92754f47453032858e6b5f5f215ad48122bec89830a4de5ad86cece5677dec6d6e01ad94d42933c4820269c595e52fef3694521060280c7e505d090aed94bf0b0a3c1596593020319aee1 +Msg = fe627041cc6368abdc8e193d731ea6235fbede7c969b050b1abcd72f1f96ca1570db942c0f94edd91b6f966df75a9a54a950d48e8073b164fa5c3753e4af464dc3f21e21739f22370e77dc80101a40adb8d5359fb1bb511ff1f7e4d0e2603961bf4e180741ac8f2b7c4ff3600386219753f309966f996ea6c735e78c5ed22abb +Sig = 3711a7daa81e0a5b897d3d371ab282b660307168c968cc3a1e4e947b32ff2f0d5d766535450b5c227f7a054b7f5110df9fdb6a8b8cdea54185d6ac90c9ad5afbb922d6ace388d121ce977ca4d778b83299a85a74cebd71234c04a1c2afefc034e9905023774b280a063a99a9c8d70cad6ba0b0cb943a2887caccfb3c0b436748a9880052a16f35c467e78243c0d175dcd92875f3f421313f69d040e8222c6ced1ff5ae12e352e8f45c759bec21a1a645c64611ec0dc94b69bc9fd52f287e828eeeec41f17afe3b62e7436d2940479a936bc5d82ff212967484550f1f552f301fe1f189088135de6af7f8e3a49ec5db80fd450bb2d9d52a95cc9607cc3cd1ce15 +Result = F + +Digest = SHA512 +Key = 3082010a0282010100981ff4f5e7569dde9ea2f3630f0463002799dd234a423f6e960c4b55a57ef478e9bd58b94fe4303c5cf3a97d076e3ff845fdef29be7e9ff293acb652e86a5a260882cb4e7724a44a08ebd11a168fc389588f0cde26847644febd1f7c6c031ca1eae47f9941a4dca32028f1408eb96db40a386bf922a8aed72fa27a937e181f8dcf35c946bd5405897a0f0fbe00f18b66de336abd51ee46b8ffe4cee6667f3de4dec041774fd79a08b0a2be1fa16806c6b58ed795ab9044b732f69a1cf88f61ba862f24462bdb036d5d5701ba205e37c737e8da703e9dff2208051e537939e1f2643efa2261f268ee31021379681cfad9a1c03d91a6f17a316cca2e810a0ffcc3020308475b +Msg = 7120a0657a833d7f9723b647eb6867f5d9f6f1fb1a77e8eb0c9acc954d5b3b6f8986643b9076bfe3ac23fca8315c397b555077ab42534fc16adfe1a91bd90e125316e716d51e641e7c305a00d086a76bd7d9af852e280dd257b682585552310176da0f40710295f7b052b899ef6e1a8c069a82d1037d8ae67c2597eb244c0e05 +Sig = 385f2fe2bb8e9483bbc05c316283ad01f8aea41bd83ad941fec99bad0f066fb1c7dc960d536d4ed5302958a0df7b943836878a1c906b3f3f778e7335407676c7766183ef61624c32da8e79640ad5390660a46610b2b172dfb7fdf48e556408e0da06ddeab4468a00abf93d6e3fd71c04478b49f394e849f1923d4a57b76f6407675fe647f7bcc59f7493128e62c0cbf999dd4b3c62cbba2accfbf77351abf76927b89cb6f57d900d631d2445231f75b7d2c3ef303a51b38f9e7f0d69a68ab397674628a825ae74605f32deab2a0ec2fde1fe820b48d824b68acef3f0bdbd7804eb15899029bc9d349951d732eceeb3c42ed02ab35d112841f8e411b28435ddbb +Result = P + +Digest = SHA512 +Key = 3082010b0282010100981ff4f5e7569dde9ea2f3630f0463002799dd234a423f6e960c4b55a57ef478e9bd58b94fe4303c5cf3a97d076e3ff845fdef29be7e9ff293acb652e86a5a260882cb4e7724a44a08ebd11a168fc389588f0cde26847644febd1f7c6c031ca1eae47f9941a4dca32028f1408eb96db40a386bf922a8aed72fa27a937e181f8dcf35c946bd5405897a0f0fbe00f18b66de336abd51ee46b8ffe4cee6667f3de4dec041774fd79a08b0a2be1fa16806c6b58ed795ab9044b732f69a1cf88f61ba862f24462bdb036d5d5701ba205e37c737e8da703e9dff2208051e537939e1f2643efa2261f268ee31021379681cfad9a1c03d91a6f17a316cca2e810a0ffcc3020400fd8739 +Msg = 77449a132998a90b149b91bd05fb1e53c85e28d7923e16a69cf7a122111edba82a156fc297dc2a9d222ababd8fbdb6efc6eedf7f3488a6ac6edaee59170b120505ae2afd9f968ad089ec8c04847e90078f5a4068529c1947bd84270bedcc0f534f38532e076ed28e93088efaabe8b2846ccbd4fbb6217761d31dd49f5908da78 +Sig = 240add12876bc54e013030c890f3abf774a109f687effbbb6a03d0b828e8e1ada27e424db835c78dc0d6905b212fbfd55885417d571e7da1cb1566a1cb713cb04a334eaa68545cb17cfe55c037230a5a71e941fe51517530392ed35b844ab7e891e9230d67250c7fe73a9d969523815dcbdae4c01322648cb0c686aebba24c4e57cc4859fd0e38a23dd43f86373d7c3250bd03d8400887926df0f98169c132f819180b9fc482ec77304b8af96a5334401912e6d210361218267c21f2c65d3a83c376516b869466278841e267d73237789b33e5a7ac3f1feb2a1a3e9bae60523ed5f814124805f11c151357fbb8a717fb8c858c66e647ddcb59c20c2bb8e86abc +Result = F + +Digest = SHA512 +Key = 3082010a0282010100981ff4f5e7569dde9ea2f3630f0463002799dd234a423f6e960c4b55a57ef478e9bd58b94fe4303c5cf3a97d076e3ff845fdef29be7e9ff293acb652e86a5a260882cb4e7724a44a08ebd11a168fc389588f0cde26847644febd1f7c6c031ca1eae47f9941a4dca32028f1408eb96db40a386bf922a8aed72fa27a937e181f8dcf35c946bd5405897a0f0fbe00f18b66de336abd51ee46b8ffe4cee6667f3de4dec041774fd79a08b0a2be1fa16806c6b58ed795ab9044b732f69a1cf88f61ba862f24462bdb036d5d5701ba205e37c737e8da703e9dff2208051e537939e1f2643efa2261f268ee31021379681cfad9a1c03d91a6f17a316cca2e810a0ffcc3020308475b +Msg = f99ed2fc9e07ccafe0704660b1906e93542e3c7220d8551c81d8303f3f6477e90315b09b179b1ca06daedf9ce3476268c511f61d931aba6f05cfbe3d4d2768659c1e17dde7650700eb5875256f300376c97a5d00a3c81d06ffa6ec9b79cfea70cca151ea98cf557763564e23ddb218666851ba40d7484788764502824bc4c5af +Sig = 268ffe2eef8407c215d1e0d02d3b23d387900877d4b6ab515a9d35e30d6c64830e748ab782191f2f9a9c133765ec3863708dbdd36d5e4ce9dd262f040766829e365ccf8e19b146355770ec4dc3a059581efe466e59fdf1d6a7d0c6a24b052c54b5a0f02e73390cd70ac56c0a004a9e45ae81296b3f5f1677db8c0dbae012295eb884130530215c175239e7160182009b46607a71a6186c48a1b8cb45c1dce3fd2f31aba568065e8e490f021454a674b8dda3e436b375f0daa3294969492ed269e9156011b133de86ada6a84225b1c297b71b3462cd3ca037585bb805179d76864a9083f927e8e1360d9302a2be39166bd5411c997000d882b268623bdc5dc9d9 +Result = F + +Digest = SHA512 +Key = 3082010a0282010100981ff4f5e7569dde9ea2f3630f0463002799dd234a423f6e960c4b55a57ef478e9bd58b94fe4303c5cf3a97d076e3ff845fdef29be7e9ff293acb652e86a5a260882cb4e7724a44a08ebd11a168fc389588f0cde26847644febd1f7c6c031ca1eae47f9941a4dca32028f1408eb96db40a386bf922a8aed72fa27a937e181f8dcf35c946bd5405897a0f0fbe00f18b66de336abd51ee46b8ffe4cee6667f3de4dec041774fd79a08b0a2be1fa16806c6b58ed795ab9044b732f69a1cf88f61ba862f24462bdb036d5d5701ba205e37c737e8da703e9dff2208051e537939e1f2643efa2261f268ee31021379681cfad9a1c03d91a6f17a316cca2e810a0ffcc3020308475b +Msg = 019d049056b4bbaf6c585c6aa4b7670ea52fd6814e6dad83eed6d334b82520d67156b7d56cc49604b88e6b2a983ea9bd33addced8d213ae5b6b97a4d420be913f80bba6bcf2f9d1416d094ddf2d402690d8a052f8dd506c4438d8f5d25225c90ff82b45a653dfa66ece77f8c9abf9a999a8dfb4e34d13cabfd19b96d4bb3a2d5 +Sig = 772e888d14c70c4e546fa77a85d1be25ef85bd24ea52db68c2c0d3889edf96a6d7d31696536a12fead53f44a055847be51567a6466730991383e5aee41da40c90d6c951e36c865fa4638490ab44a27cbaedaad7d415b80a51ab465c8a18df567356988020d7e6ec0404577ce8f02d581e48228bc342f6bfe2d2eb2dec17f66fae7debb40b839b1085c16caa417bf31a7bfa540405f76671c8d80dee48d8a1cd44b456ee61ba601938bb3626805c232ec3978936bd8dcea073ea483ba8cdc29841b442fd28b4b4b1a282298776d83b2174114766b2017e5ad547a1021fcc3b829ba30f0cbdcfbae09c5e0101f8ebf1fdbfa1e1d029bba61c1ca1920fb36ea6e2f +Result = F + +Digest = SHA512 +Key = 3082010a0282010100981ff4f5e7569dde9ea2f3630f0463002799dd234a423f6e960c4b55a57ef478e9bd58b94fe4303c5cf3a97d076e3ff845fdef29be7e9ff293acb652e86a5a260882cb4e7724a44a08ebd11a168fc389588f0cde26847644febd1f7c6c031ca1eae47f9941a4dca32028f1408eb96db40a386bf922a8aed72fa27a937e181f8dcf35c946bd5405897a0f0fbe00f18b66de336abd51ee46b8ffe4cee6667f3de4dec041774fd79a08b0a2be1fa16806c6b58ed795ab9044b732f69a1cf88f61ba862f24462bdb036d5d5701ba205e37c737e8da703e9dff2208051e537939e1f2643efa2261f268ee31021379681cfad9a1c03d91a6f17a316cca2e810a0ffcc3020308475b +Msg = 1c0c43b58a3c85bc56763bb26f8060b645988d11d0651bc6d32e886b624a1b38a2d8cb5ed0b05e998499ce0937bcf03e03585792abb877bbdb6206a0b192a86c7be6cae1c35bcef089786986cfc94aa85b8ffdc2b8b60e3c7e07714fd39f211732a008e96b261fe6eb7dd6d03e91b61dd2a5454afe482a724285911fd15bd160 +Sig = 5be423f5b70087c95d748e060004afca6b49fea89dfb37c2460578af2484c0b9ac384193dd47bd06736c071b557aad22684016e6d97e9597f49d11edd8bc7e6dc44ed1f94403d171b215b00c8f3a6721e1cd4d37cebf67b705dee052a2cc97415fa9fac97180fd60ae20667af437d3caf6b69ac87eb9afc3c951a49719f32a9e12062500b958a5b48136bb41e4d6434d5fb59814384e06a4e4d0a779f044e873d5ceea1249f9648153663234cfe9171f988e12926059c896793bb56630432c5d3305d70b436f041c3eb1b6377cf01b27f507a9a8389f57b2b17010b808123ef23201da72f39febf7ea3841cdbe376d3ac89471f2494e948702f618ce382fde3d +Result = F + +Digest = SHA512 +Key = 3082010a0282010100981ff4f5e7569dde9ea2f3630f0463002799dd234a423f6e960c4b55a57ef478e9bd58b94fe4303c5cf3a97d076e3ff845fdef29be7e9ff293acb652e86a5a260882cb4e7724a44a08ebd11a168fc389588f0cde26847644febd1f7c6c031ca1eae47f9941a4dca32028f1408eb96db40a386bf922a8aed72fa27a937e181f8dcf35c946bd5405897a0f0fbe00f18b66de336abd51ee46b8ffe4cee6667f3de4dec041774fd79a08b0a2be1fa16806c6b58ed795ab9044b732f69a1cf88f61ba862f24462bdb036d5d5701ba205e37c737e8da703e9dff2208051e537939e1f2643efa2261f268ee31021379681cfad9a1c03d91a6f17a316cca2e810a0ffcc3020308475b +Msg = 21ea231df11ec8a62b2bb1fb3a19d608e3ed32a531cf62d4b26c6e43e39ae719e83a32ef8063231b39bdce35e02a99d43cac9699fc83106fed956410701312cc2c5a148600176fff3baf075710deb7d0449ea1d62a4ac33cd103ccc97c532df3521072ea5783d3d89bca0667b27b5885638afc64a46da3c4c77d4d74eea05e16 +Sig = 20d90f8361337e7196010e8778794c721c881492e63ceac4a7bbf56daa41fbb9c1716be12b56b79fc826b090c3a2a73f85fe761c9249f0be8577ca78385d11ece10270c05d07590b8d3c889f4cf9cc0881c066957974804f4a74aa9eed9a7d26871885260b2d67c96b1cdac2a6ea61650d8324dfc37105b916ecc406d604f79bbd7c8a7754cf805cc9c74914dfa1bd2dd6ab62b0e228673ac84faeb9b38c94f3f1a1b74d83188837dc7cdf8521bb61c7378c3db6c2305bfa906ab1c6ba3c2fe557feaa5c97e28304a64f3b4153265cf51910a7636b3723cd56131ea16ab4ad865224088143d36f7fe25c9f18363953b33692c10fa3aed59eb70172d7f4708b +Result = F + +Digest = SHA1 +Key = 3082018b0282018100d8196d0e7875a3d396365b446f520f6706695a8046976fdf7917157e8747a58e5d30d83620703e743271b17f3c9763514c38c6808b49ea42ed3c9ad2514bfe059e095c2f17624b5bc1aa5060c320ca14da57d65024b7f1c09c1611b56a3d62fb104c4e458b18f6760d85c53cdcf0b83ff25b48b046d46c0110f8093f9b4873e99b81756232ab077c7195f711c86ae44de848011e028e666ce8f264ea34cd82193cce9fb055a09cf7d12d1e3cdc57f7efbf48237722e1f1bf499572a7b942a74e634751a1808f475806aa5233d122f7220f3f694b91990a45740d547b62582390ec43417037b05a82b0f72fcdae476f04128f2a3b3cf769c8e8d441db469f29da612ae4de490787eef11127a38510073a127ddf279e5132dd6db07275efac083104cbfa39acc224ac1755dfa8299ad4be9ec44b57d83837c583bd35ed8e857e6369281c41c0227283f137df0b29aa6940d126bcc46ee37c3774ba88cf60e5af2678adc8e1eb5e9b3b96c9e8ab2f6c7e69a2360df666544c5b266ff09d21b373ed020400edc8a7 +Msg = af09df21babe776fcecbb5c5dfa352c790ab27b9a5e74242bbd23970368dbefd7c3c74d161ae01c7e13c65b415f38aa660f51b69ea1c9a504fe1ad31987cb9b26a4db2c37d7b326c50dbc8c91b13925306ff0e6098532dee7282a99c3ddf99f9e1024301f76e31e58271870bd94b9356e892a6a798d422a48c7fd5b80efe855a +Sig = 8005d3a1f6bc9e5b25e4bfe751a511b741d622eddab691d10911019f2589475c2432ab9a90627020ab3117042e468f1847a70d8fc392b09092bfca421292c5d4ecc0540957dedf526914490ce8338de9451cbc1c9c25dbba91d8c3d447dc7d044d9654022c8a21c08ecbadac1e44b0fe2ab462037cb409a8e37f617bc723ff4969e4553f46a8532cdc9429c0a03b8c34cb41812816904c98ea31eefb0d9a5a8f0c182e7d889d13704ba616ef1e91df911ea868df5d03b39d30624f310bff100d404fe6e86fe5986abd597babba200a28bc961d6d8054887a2f44ff269129e9b085891840e926244281cc312282e6da6ff5e70fb44cff6b2a2c48951601b1db25b4f70aabbcddb7e1c33e0521442e81df7835dde8a2852d410b45705e8763b5bbdae5dbf4d84dfe782ae862366ccf37adcbc8e51c9769fd516bab1f1572d8ebcd80ae9d052b1b102a2c13a7ed44465d9c535e6cf202c981c302e4117b74475f1b129d719280facc628fec3c28285bfccdccb67d75a71ae7908aacff6adf55d0ff +Result = F + +Digest = SHA1 +Key = 3082018b0282018100d8196d0e7875a3d396365b446f520f6706695a8046976fdf7917157e8747a58e5d30d83620703e743271b17f3c9763514c38c6808b49ea42ed3c9ad2514bfe059e095c2f17624b5bc1aa5060c320ca14da57d65024b7f1c09c1611b56a3d62fb104c4e458b18f6760d85c53cdcf0b83ff25b48b046d46c0110f8093f9b4873e99b81756232ab077c7195f711c86ae44de848011e028e666ce8f264ea34cd82193cce9fb055a09cf7d12d1e3cdc57f7efbf48237722e1f1bf499572a7b942a74e634751a1808f475806aa5233d122f7220f3f694b91990a45740d547b62582390ec43417037b05a82b0f72fcdae476f04128f2a3b3cf769c8e8d441db469f29da612ae4de490787eef11127a38510073a127ddf279e5132dd6db07275efac083104cbfa39acc224ac1755dfa8299ad4be9ec44b57d83837c583bd35ed8e857e6369281c41c0227283f137df0b29aa6940d126bcc46ee37c3774ba88cf60e5af2678adc8e1eb5e9b3b96c9e8ab2f6c7e69a2360df666544c5b266ff09d21b373ed020400edc8a7 +Msg = 5fa7b357c3630bec6d6e119f4266ff9465391acc638a87a7ad565fa84cd70679d0a8b82f892b64cefa28be108bb690627e5f5030247ff86251ed12270ddd12f18c05e9c161ffd7a4eeef817d1f6543065885c712ab65d7154fb66fe54da717c27d066f95b1a80c75300c826f663bc287d9f2a7fa5f03cbc68ff99f6c75fbbbf5 +Sig = 1e84e79b2c46ca8d7a0e35503e4713f556eeac5b86116ded6c9ae1c14343c4c0c241424fa4ade7f76d93e6f845c62f0f2039e3cfda2d364cda93006199ba774842a7f0a99fc72bb21d583ab440a7ea37c371211c8a99f49772edbf14a18b8c1d112fe78af270c8dd3eafad00c004ba22bd521f3767b2d05a4f4ad87a850c4cd444126c6ecf50487053dab17dd624f9daa9a921d31ccfbe77a56787c13522eec9a7948626e560413cf210e438b61475f0fe3b53c29c038e8962781886eb2bf407b74ef7169a8302113cba712488fb9f2e27743d3a48033ae9b6fb76b768ac7014d73df1f4740721a5da04257c5cd72c0bb3de9e734f800e8db60b5b56e7dd58dbcb02b48e837f0264c2aa8b2543162533081cd579c1651b8ee4cd5981a7b27b7c77450e6d4bf3576e541409c2ebd09975d92ba4c35ffde2a7b2bbfb9628795de7c49805ce553bd632ceeda8e626fef36e5fb118dc0708f785680a5888096046832121d5427d7239e123733ca606fb991cae95f1ffc23ab0457599abf92732a87d +Result = P + +Digest = SHA1 +Key = 3082018b0282018100d8196d0e7875a3d396365b446f520f6706695a8046976fdf7917157e8747a58e5d30d83620703e743271b17f3c9763514c38c6808b49ea42ed3c9ad2514bfe059e095c2f17624b5bc1aa5060c320ca14da57d65024b7f1c09c1611b56a3d62fb104c4e458b18f6760d85c53cdcf0b83ff25b48b046d46c0110f8093f9b4873e99b81756232ab077c7195f711c86ae44de848011e028e666ce8f264ea34cd82193cce9fb055a09cf7d12d1e3cdc57f7efbf48237722e1f1bf499572a7b942a74e634751a1808f475806aa5233d122f7220f3f694b91990a45740d547b62582390ec43417037b05a82b0f72fcdae476f04128f2a3b3cf769c8e8d441db469f29da612ae4de490787eef11127a38510073a127ddf279e5132dd6db07275efac083104cbfa39acc224ac1755dfa8299ad4be9ec44b57d83837c583bd35ed8e857e6369281c41c0227283f137df0b29aa6940d126bcc46ee37c3774ba88cf60e5af2678adc8e1eb5e9b3b96c9e8ab2f6c7e69a2360df666544c5b266ff09d21b373ed0204009fbb4f +Msg = e4bc017c194430d1ae0798c2a122b56aedab0dc4f68cb81c27911fc3dabf040778e8c362e17cd7f20ea29f29f58762c6acf69204d22a4d112be029c18ab03184f49c2b9602ea1d75872f0f9873ad115ef7de8045ea51865c6cb5e0fbc934e4b1a002c27e44350a4262d76e76e439ca1a168b61ee07aa69e53339cbd75ef32476 +Sig = 2e6b315e6ae71c573f396ac918df88f2254b6c29d552dff65d30f37e07fbee166459ad9b21969e19adf0ef493d368ef4e889e002f636eab345a1bcd373904d8137262e7828f50c3a5b0be2d89f5cf0217a5a593bb4b58b93cd59870e3e61e682f8f2778cb907cae1e9650280748011d08cb9b1e437ee26099a876d414e7ed5a1f31aacc632f2503ce38d4a15cdc9b5d8c9a01a379e5cc6315b6d81bf657c4b5d876752e8682177a799c9ae4687b58ca5182d6fcf06c3048b2410285d5d4f98cf94b71d3af8f7328450fb0cd8189a3d354c29b425ab75c33c9a29aacc602bfd0955e57214f1b4def30dc2f06b8abdbd9d609e126699c7994d34312bfdfeda87b23c484a097e614508bbd9f0daf2e0e71ef7c20ae14a943499b82a294ba90787b26df264fd8ce25b88d14b636c6a5b587cff9c80370162859df1ef2bec3a946997f84a5c8c577ea8329f3cdcc97214e6071badf226851ab3b5c7c1c9bfee3feec017393c3a054adf70a58e8596fcd47af32ca062567cdd87c5a53dae3780ba13ee +Result = F + +Digest = SHA1 +Key = 3082018b0282018100d8196d0e7875a3d396365b446f520f6706695a8046976fdf7917157e8747a58e5d30d83620703e743271b17f3c9763514c38c6808b49ea42ed3c9ad2514bfe059e095c2f17624b5bc1aa5060c320ca14da57d65024b7f1c09c1611b56a3d62fb104c4e458b18f6760d85c53cdcf0b83ff25b48b046d46c0110f8093f9b4873e99b81756232ab077c7195f711c86ae44de848011e028e666ce8f264ea34cd82193cce9fb055a09cf7d12d1e3cdc57f7efbf48237722e1f1bf499572a7b942a74e634751a1808f475806aa5233d122f7220f3f694b91990a45740d547b62582390ec43417037b05a82b0f72fcdae476f04128f2a3b3cf769c8e8d441db469f29da612ae4de490787eef11127a38510073a127ddf279e5132dd6db07275efac083104cbfa39acc224ac1755dfa8299ad4be9ec44b57d83837c583bd35ed8e857e6369281c41c0227283f137df0b29aa6940d126bcc46ee37c3774ba88cf60e5af2678adc8e1eb5e9b3b96c9e8ab2f6c7e69a2360df666544c5b266ff09d21b373ed020400edc8a7 +Msg = b6ce2cd484adf679c884c35b885757bd48a50241733f215bfd5ae70547e25eb44311a88bd8418bcf88fe2d9c50601bd6cf979061abc8f5953118a4ec3b06f1fe57fd6bb025295fa8018b9e04e248804b824729a3c0fa0b45427cac2f5eddaa183bbafca933107aea7c51a0fb08b88f04a9da546e797f6d5479af8934781090eb +Sig = 01a0e831fbe4cba0309731c0bff9f3348e919fedca607b59d306e5f691879692ad2eda3a7e911da2dfcc2c1ece81873e8741ebec79dc58cf2884f638f393ad044d18c5147801d3c2238f10bce526f82d8fda18abf635e4c4593b44d4d1b9d390a62a9c3bdb662a0b5346e128c1841bf65780133cbb7ec1efa67f94a2ee8d503fcab70a0d9fa50c0ebbfb94910b0565efc6f0d79f1ea29ffdb0898a21c919ce9aae3d7349b2090a8c09f98e953a4cccfc8b0d19a8cd7a8a34c0dd5adc2f383b7dc2b5bfd7d9aed1a47aaecc54b5998c0c8e735b6f6ae7f737a68ef79d38fdf0756cee89089ceafc9cbefa2a02a0d02a7935c10a7826ecb6aa17a4d34b1c77d6942889457984e8197144907d3ac2a3e65ebe9d974bf522aada84f45bba806ca4b0534cad5b460d1bf5571a1e050e5494138f4c8bfcb4334968b50d9cb50b32c52aba4598fa47603de7d358f85b68e13432fd85b247c3759ff7e24dc1934d01ddd60a0156d4fe9d314681d3fd69f071bdfcc5b3a5b2df626f34eb95043bf160eb0a +Result = F + +Digest = SHA1 +Key = 3082018b0282018100d8196d0e7875a3d396365b446f520f6706695a8046976fdf7917157e8747a58e5d30d83620703e743271b17f3c9763514c38c6808b49ea42ed3c9ad2514bfe059e095c2f17624b5bc1aa5060c320ca14da57d65024b7f1c09c1611b56a3d62fb104c4e458b18f6760d85c53cdcf0b83ff25b48b046d46c0110f8093f9b4873e99b81756232ab077c7195f711c86ae44de848011e028e666ce8f264ea34cd82193cce9fb055a09cf7d12d1e3cdc57f7efbf48237722e1f1bf499572a7b942a74e634751a1808f475806aa5233d122f7220f3f694b91990a45740d547b62582390ec43417037b05a82b0f72fcdae476f04128f2a3b3cf769c8e8d441db469f29da612ae4de490787eef11127a38510073a127ddf279e5132dd6db07275efac083104cbfa39acc224ac1755dfa8299ad4be9ec44b57d83837c583bd35ed8e857e6369281c41c0227283f137df0b29aa6940d126bcc46ee37c3774ba88cf60e5af2678adc8e1eb5e9b3b96c9e8ab2f6c7e69a2360df666544c5b266ff09d21b373ed020400edc8a7 +Msg = 79d92d0766310a0011b4398c59543062ef8dceec5e5386e64949c028f4337cc007ae39448e1f156743e935c910e36714d009064456711f46b081d1c5ac60fa419caa106157684c8a803f0eb00be77d6cfcdf6d4f725f8777e58fa35facf679fbc2357905c9f5f7924f1e8be85149b893fd79cbb6bc0506a070d9fe9ffadf4219 +Sig = 1fd91927e15056b040794544ad1bd99a077f3151d9d705ced12c9a6c41483dc1e1b94bc549e06c91a35816ce9016a9f56b9b95f8ce2c9e4a33b445f701abae9c6301bc9581ae89ea2e83b725431d01a3ce1e266ad3b8cd29b217b27e1db105887423d25dd5c6e0c02b3800df9fbcb9f306b86ecbca65366542da71b03955d4063512998924a30283592516037e51e24ee8e8c6bba339e5cc6a3b64375a7dd96e7efc00d410fc0a63d0833dfc8ef518c74c2dc13f79cacbafc3fdc2253c50cf7a1f79ffc185a96a1602e5b7416123d874b5e4c4b4b35b3523309895113d7d2aa71cd895feed0eb9174ecb5b8dec252c53890e28648e71c87a8528be9c7b23de20550675b0b5072fe52cb1de14c5e1be13896dac73220726adb1e8102fcdce01b92251497a553d74f938c96fd9e5936392f0f5c5efe15a7574e01342cedc17cf4f750825424c7b939d0328d2c5a0a8f744826ed9f8dd4479a40da051b7924a29e81c13e929e4815474bb4a825d564cee8f22ce451d094c19d9661dc413e070c5a6 +Result = F + +Digest = SHA1 +Key = 3082018b0282018100d8196d0e7875a3d396365b446f520f6706695a8046976fdf7917157e8747a58e5d30d83620703e743271b17f3c9763514c38c6808b49ea42ed3c9ad2514bfe059e095c2f17624b5bc1aa5060c320ca14da57d65024b7f1c09c1611b56a3d62fb104c4e458b18f6760d85c53cdcf0b83ff25b48b046d46c0110f8093f9b4873e99b81756232ab077c7195f711c86ae44de848011e028e666ce8f264ea34cd82193cce9fb055a09cf7d12d1e3cdc57f7efbf48237722e1f1bf499572a7b942a74e634751a1808f475806aa5233d122f7220f3f694b91990a45740d547b62582390ec43417037b05a82b0f72fcdae476f04128f2a3b3cf769c8e8d441db469f29da612ae4de490787eef11127a38510073a127ddf279e5132dd6db07275efac083104cbfa39acc224ac1755dfa8299ad4be9ec44b57d83837c583bd35ed8e857e6369281c41c0227283f137df0b29aa6940d126bcc46ee37c3774ba88cf60e5af2678adc8e1eb5e9b3b96c9e8ab2f6c7e69a2360df666544c5b266ff09d21b373ed020400edc8a7 +Msg = 569b513e3a2f031a0fb2b3a2f3d51c321ffdde7dc9997f8248b2afbc79c3d09961ccb52e14a2aa29d589b5077e041c8723ec275ef2c0272c5d3cb7af7c2d4236ac83c6597da8d7e8cb10e6212a12c32688f661ae0d4fdafa468bb20b83c860127de90a283ce9913f3870cd58bfa41af7964213d4e3ed9dd44ac62837573c3113 +Sig = 0202f80676900c6ebdaad6750b5e0600af5caee8b03480b8acfecf719fb3508b41ebc57e7625ee0303675478f17de92710db1855557ef3ad3e29353a53794df804db4ea20e8cc4a9c9ddb78b4be6f2475833fc13d9810de1bb338bc45bd88e76d8bba7b08beec647f3e084a15848591592b0fa7ccadf033a958ff643e8741fac68e7f8e7f6597ddbfe0e696fb68811d910ae817a017e136d100d50e2de6f9f8569593a5a88b535d44466e97baa7f9270334c299a7684059fdf5dc519ddceb050678501637b48ef27614b042365900a060e438ab6f16e3624795d47f448c0e91661c8aae15e46ceb37aa58ba8c413b6a6a812dedd263f2d8de3cd6f7f3b396334248ecc3f4dc5484a4218e33de1359798dda01affcafe7567633076ae95b847b2afcc1919e296cb77c8b00ed4aba717bd8c79b4320adae92bac470019ea631cc2efde91d5e465394c4c616faab83f5875fbb67b6c6ceca73c891ef4288750b02bbf478d532517bc6f76f0fd48dc2c0971888dc94854017c8e5551f0fda68e681a +Result = F + +Digest = SHA256 +Key = 3082018b02820181009bbb099e1ec285594e73f9d11cbe81e7f1fa06fd34f3ec0b799394aed30fc2ed9de7b2a6866fde69846fb55a6ab98e552f9d20f05aa0d55c967817e4e04bdf9bf52fabcfcfa41265a7561b033ca3d56fb8e8a2e4de63e960cfb5a689129b188e5641f20dbf8908dab8e30e82f1d0e288e23869c7cac2b0318602610a776a19c1f93968c652b64f51406e7a4b2508d25b632606834a9638074e2633eb323324b8b30fdbd8e8fdad8602b11f25f3906439055afe947f9b9bcffb45dad88a1df5304c879bb4a6eddb4d3d1846bf907d2ca269845c790b2f0af8154aad9c4acb75e18a5d0e4f9f88137032b9964fe171dfa0d0f286090790f52157179a6734b5f9a64e3d2ed529722c3d3836d4501496f927a0f8e389ca35332b836d99e995f4a3e86f581bf9abdc7a10e06a6b31296ae3b43e6ddc9a0d9a7d0d9c4053af0875e851192d1de7b08d1beb7b857e227f8803a5620726a31920bcab922d3370a78033b315024a0fc1f6c276be565e58de77f294c8089ff4c43fb334d26006ab5757c65b020400ac6db1 +Msg = 921961e184a5d9657697e3e65ceb1ed10204ec56e739df0e4f906ee194c9ed27bd9fbc0d514abe3a6e480cb3155debfcc8d9fc815719b334f7500a769488773b68e31b69cd273c824f79f58306692c0c232fc5c0c83415ef1dd59a73a063e9d7bc6ee7bf9e433c8344b3051ed616c9473a90afdde393ee88e9a5849e5f642b43 +Sig = 55362a6854a7846c4d105dc8a358fd4c02931f117631968457f422939d266682fd705e2091bfd5d1bfb52b4bfad684914489ecdad9038b75c65916a9e967630b16c76656b58404ec11ac46d8684b3e72d4392fb6e7e6c929e43ad4fb6ce6198f241b39e8bcbbc058792dde31b195b91bb14236dcb82c28a5c24d633dd847d1548dd403b3a70149371f46432db1767a00c462758c2298fe9f1f04c2ff4b96858d084ffe5a624cb85c1f9be2a60fed40133b7c571c6c467f46a0f1e48ee6e2e6d65424bf8196b0d927e0fd4141264aa5df4129d52d2fb57b8dac9386a84ecd34ecb1feac3a2b99d055eda977ddf8027f1178348a30e4cb4ecef2291d7f520794018b39f5251fd46d97282ac21f6bce6539d19aa1c21c3c220a2ddb6feed262eceebd753eaf5e0eb98cb3eb7d324a3dac0a415a18b7f36170676e8b9d3e421a6f77046bee6d9591c93f7ef0242f464f15b63132a0aee80949709429b1e76d40d60f79b2a6ab362f12e2cdd0bc66868c80278043e179a36f2815e7916378b0fbdb8e +Result = F + +Digest = SHA256 +Key = 3082018a02820181009bbb099e1ec285594e73f9d11cbe81e7f1fa06fd34f3ec0b799394aed30fc2ed9de7b2a6866fde69846fb55a6ab98e552f9d20f05aa0d55c967817e4e04bdf9bf52fabcfcfa41265a7561b033ca3d56fb8e8a2e4de63e960cfb5a689129b188e5641f20dbf8908dab8e30e82f1d0e288e23869c7cac2b0318602610a776a19c1f93968c652b64f51406e7a4b2508d25b632606834a9638074e2633eb323324b8b30fdbd8e8fdad8602b11f25f3906439055afe947f9b9bcffb45dad88a1df5304c879bb4a6eddb4d3d1846bf907d2ca269845c790b2f0af8154aad9c4acb75e18a5d0e4f9f88137032b9964fe171dfa0d0f286090790f52157179a6734b5f9a64e3d2ed529722c3d3836d4501496f927a0f8e389ca35332b836d99e995f4a3e86f581bf9abdc7a10e06a6b31296ae3b43e6ddc9a0d9a7d0d9c4053af0875e851192d1de7b08d1beb7b857e227f8803a5620726a31920bcab922d3370a78033b315024a0fc1f6c276be565e58de77f294c8089ff4c43fb334d26006ab5757c65b02031ed02d +Msg = 8568ff68d40c9f240b5ff56d8919704a4819fb48b2f0741db6a3608a1aaddd861344d79813dd7f85e2f2f92bf00355adeadbc1d08b14fda5b5dd0f69c0fb37a9120e25a9ef166a0793352d9c7eb71fa3104fb11d55a38474220b205e6196ea04a94f506412be47f347b1f787dc3cb475e2fe31f6b9a6f0d026b6fd32a587dcdf +Sig = 191cae43b354617b1ebedb701c124e76339935835a3633b4f806fb835d0dc4b7e4abf00f8c575fad8467ca35bc0d37b58a90db835f4ecb9f1dbfdfaffffb6ef1e0b894dd65fbf8e36478adb673b116188d864f185be5fcfc17bf1e6cfccd499d632b3cb1722c75776cd4d8ec68d2512c1ca598b970f03f6fff5facb107c0e74d6aefffaac20f8e3aa6e825a1de1690a84c8ad1e766642f2a89d3032b58b8e6ec50ef6a8e69b6afd30a2755d42b55f9e21f69c8d9d993549d198ec6c17d12f09ab4be0209030dcb274afefa77fe461e6469ad51f56dc58ad2f06b620af36ba712fa798d9812d2b6ce8ff4554b58bd2a6a8abdd8d00920bc3ad3b61586e544eb073419a85bbc1dfaf775068dc004a7f0ae789d5023d013f3e6096ead893158ac4ba050b87f8186705179f531be573d9557744a70ee42a4b3eb89c824eb8ae1172212c177557267ef04157f9fcf003c2d1f6039671d3af71339c30fbf772f14b3d59e81739ef82d61ab61475e1b4c835fa50350da15610f45531ae85fae5ff9a31a +Result = F + +Digest = SHA256 +Key = 3082018b02820181009bbb099e1ec285594e73f9d11cbe81e7f1fa06fd34f3ec0b799394aed30fc2ed9de7b2a6866fde69846fb55a6ab98e552f9d20f05aa0d55c967817e4e04bdf9bf52fabcfcfa41265a7561b033ca3d56fb8e8a2e4de63e960cfb5a689129b188e5641f20dbf8908dab8e30e82f1d0e288e23869c7cac2b0318602610a776a19c1f93968c652b64f51406e7a4b2508d25b632606834a9638074e2633eb323324b8b30fdbd8e8fdad8602b11f25f3906439055afe947f9b9bcffb45dad88a1df5304c879bb4a6eddb4d3d1846bf907d2ca269845c790b2f0af8154aad9c4acb75e18a5d0e4f9f88137032b9964fe171dfa0d0f286090790f52157179a6734b5f9a64e3d2ed529722c3d3836d4501496f927a0f8e389ca35332b836d99e995f4a3e86f581bf9abdc7a10e06a6b31296ae3b43e6ddc9a0d9a7d0d9c4053af0875e851192d1de7b08d1beb7b857e227f8803a5620726a31920bcab922d3370a78033b315024a0fc1f6c276be565e58de77f294c8089ff4c43fb334d26006ab5757c65b020400ac6db1 +Msg = 88902b37b0db4246c41b50f180eb1350b1b6dac0477a3dd1accb0c5f541a85fe9637ca9cba15926153ce1edacfe66f574cd4b691adbe0c90ed8563ccb401bc93288e9baa06c7b837f191f8de0a5c9b2bc0a5b730eabfe56f13d43afa142779d8e99b86abbd791e90476ec64759d30194b631c6e425053134c3c0792f9d122296 +Sig = 9d64c3b9a4ba78889747aef7c8565eb075e5bd92a55f9d34d3df6a2d740cd863ff98a04be4866e9f906cc6d99270d208a3dc2e53201cac9f4f758eecbe8a44db0243a3e40400cac37856079f2fe02d54d9748754331d9935595c35b22cc6c45686ea964642ec4ca7e0a88e4a4c0a6166733e361c46a592469cad7009ca3170cf3fbe485b1c8726e23a6e35f9691d9bf4029d82756c64a4d31ad0b8ef57a0ba2d55419d7cfabbab1a23c8baa4bf043a444b127920250551467d7d528425dc7c903c2c824e6b9b65f543ad9d7055300f19500356100411271e15b939d496b4bd4cc3ba4b6aa2ce65f4825275404cb19512ae27cc986b0af6fddff35980c2cc0e96829ecbd9ee19944838e4c83b1eadb6f78669890f556781c4e97d8ede9664080e47b3adaf2f5e04bd42d46012aeace3078f9068d870fee02b088f9674fdc0ca0064e9f0f63205836d7a8771264c553c945eb7c87df2a13d8efd3cdc8409843e7a246089970abd43526f3cc9cf993d419a6beaaaf6830208686a1fde4733f078ac +Result = F + +Digest = SHA256 +Key = 3082018b02820181009bbb099e1ec285594e73f9d11cbe81e7f1fa06fd34f3ec0b799394aed30fc2ed9de7b2a6866fde69846fb55a6ab98e552f9d20f05aa0d55c967817e4e04bdf9bf52fabcfcfa41265a7561b033ca3d56fb8e8a2e4de63e960cfb5a689129b188e5641f20dbf8908dab8e30e82f1d0e288e23869c7cac2b0318602610a776a19c1f93968c652b64f51406e7a4b2508d25b632606834a9638074e2633eb323324b8b30fdbd8e8fdad8602b11f25f3906439055afe947f9b9bcffb45dad88a1df5304c879bb4a6eddb4d3d1846bf907d2ca269845c790b2f0af8154aad9c4acb75e18a5d0e4f9f88137032b9964fe171dfa0d0f286090790f52157179a6734b5f9a64e3d2ed529722c3d3836d4501496f927a0f8e389ca35332b836d99e995f4a3e86f581bf9abdc7a10e06a6b31296ae3b43e6ddc9a0d9a7d0d9c4053af0875e851192d1de7b08d1beb7b857e227f8803a5620726a31920bcab922d3370a78033b315024a0fc1f6c276be565e58de77f294c8089ff4c43fb334d26006ab5757c65b020400ac6db1 +Msg = 973606b2c7e5658a9d8f264b8f5a266d0992cfbd6e9d3ff95c31a69a32c4f0f1cf44a5759d090d5ccf089768e6497b047a9b9f8f3786b8f82681b18b2d65500ada2217005cb06852d249ed17c9d637a9ffa7a5fc6d66882f854e8461b9983ac63c3623fa0cc4bf9530bcf0ff3ee9a086211eaaad1927f8c70300e9c5db45f54d +Sig = 355644f5a26a4ffc638c44ab4d0b7359f37845235bfb994d28e63b114c0e0f97d2e29f448da8b12eb804792ccc686dd807f44211d6af410bdca1196df84016b3cdae180bbb59133aeac5928560ad2cf6be61392dc9e28d7ada11658cf4a873bd2626ca839e697c79a5c4bb3ed4c9b8f48f83f2800e1907376f2e8874c23f1dff8bbf3b3f98bed7895d486079a92557a553a71e18cfafdc155775f39a77455b432b0c2c4f09990d130060143e7310b9d9e1ae6f2b1b83b90b36c6581473f60c3c61a10e286557f84e5d04cc36e12cbce835234d2d773221313ad7287c9957d94a1cda8c1fccd3eec45dd84a5d075d6bf823123fcdc7d549286142ab514db6d998e377429494f07041387de3ab31b02ac1606e590572bd9003e5a62b90b95b00c0eca73c744ccf4eae44374e26ba6033dd2baede95e19cecc840a045bf995a3250ce7b08e0c3267de822616f93a4dd9e629eb38b479bd31071b48976cf73ce52c3734abd93249300dd5c40635842dd2a290276190737a123008a4f0be557ca6628 +Result = F + +Digest = SHA256 +Key = 3082018b02820181009bbb099e1ec285594e73f9d11cbe81e7f1fa06fd34f3ec0b799394aed30fc2ed9de7b2a6866fde69846fb55a6ab98e552f9d20f05aa0d55c967817e4e04bdf9bf52fabcfcfa41265a7561b033ca3d56fb8e8a2e4de63e960cfb5a689129b188e5641f20dbf8908dab8e30e82f1d0e288e23869c7cac2b0318602610a776a19c1f93968c652b64f51406e7a4b2508d25b632606834a9638074e2633eb323324b8b30fdbd8e8fdad8602b11f25f3906439055afe947f9b9bcffb45dad88a1df5304c879bb4a6eddb4d3d1846bf907d2ca269845c790b2f0af8154aad9c4acb75e18a5d0e4f9f88137032b9964fe171dfa0d0f286090790f52157179a6734b5f9a64e3d2ed529722c3d3836d4501496f927a0f8e389ca35332b836d99e995f4a3e86f581bf9abdc7a10e06a6b31296ae3b43e6ddc9a0d9a7d0d9c4053af0875e851192d1de7b08d1beb7b857e227f8803a5620726a31920bcab922d3370a78033b315024a0fc1f6c276be565e58de77f294c8089ff4c43fb334d26006ab5757c65b020400ac6db1 +Msg = 170dcd5458adfbdccc757e0b5abc19278112f24b418b995d395b46410da3624c0a8b49fc0d914fe6a02101ef6765adbfbb5e24739434be92acca9f43e19639bddbb012fef028c7c0449d52a9350b88c2f6e5e52a79648c0c931e8ace5bda5b8bd3a3afc4ca1b6e520012f99f8c57b3167bcec0d8bac30cb1367e8f4a4118d0a0 +Sig = 6a4db2e6c13ee8ec6174bf57ae5bb7555e66dc2e3b618f259d913b5b8b6c16b9760290c9c576b563316f510ad2461cd5086b6d9670551ec74b8a9d15ebd43ccdfdcd74cad660a3fe3f36992c86559cd8e9e4d3568924b1f7e55bc5d8df4cf53f240fb3b945a08d24f205d5a7081410ea3e8136ca282fc99e6be0b1fa2faa742c9d682d08a77b791bb0421241e6a82f84605dda359e4f8475cef346c9f6a54a085492fc4bbb30b1047c66f5fc529ecb6aa9ece561e5a3a62f9a19eca2badbfa32a2aa205713b16081519c2cde2f8e8261726fad49145dce0d9e24f6e085e44bd86f670a114ba98d54389f0ed683d062735cd495e6a8a6eef9fd70355b92b4cf6cf0c24e898b6d3f7fe51dcd1548a1adc67ba585e2d18809ea658d6ec4bb5e33e8501d11a266f5e0928ecb58547e72c27db8b07aae31eefef865bcf6a08485675d3037f432c157e5ee428d292bfc24c654d8fca7a60107dc18461251906521e1e9965fc80c7b5f582ac3dc3798a0a2937e76d7e7fd7122d3fd9083feeb9a44ad7c +Result = P + +Digest = SHA256 +Key = 3082018b02820181009bbb099e1ec285594e73f9d11cbe81e7f1fa06fd34f3ec0b799394aed30fc2ed9de7b2a6866fde69846fb55a6ab98e552f9d20f05aa0d55c967817e4e04bdf9bf52fabcfcfa41265a7561b033ca3d56fb8e8a2e4de63e960cfb5a689129b188e5641f20dbf8908dab8e30e82f1d0e288e23869c7cac2b0318602610a776a19c1f93968c652b64f51406e7a4b2508d25b632606834a9638074e2633eb323324b8b30fdbd8e8fdad8602b11f25f3906439055afe947f9b9bcffb45dad88a1df5304c879bb4a6eddb4d3d1846bf907d2ca269845c790b2f0af8154aad9c4acb75e18a5d0e4f9f88137032b9964fe171dfa0d0f286090790f52157179a6734b5f9a64e3d2ed529722c3d3836d4501496f927a0f8e389ca35332b836d99e995f4a3e86f581bf9abdc7a10e06a6b31296ae3b43e6ddc9a0d9a7d0d9c4053af0875e851192d1de7b08d1beb7b857e227f8803a5620726a31920bcab922d3370a78033b315024a0fc1f6c276be565e58de77f294c8089ff4c43fb334d26006ab5757c65b020400ac6db1 +Msg = b2f72cef31be4b7439191d9b342065e62513792826f950481486dd4289429b6e0ae86a05820c99e1ef0144845cfae05c0f6f144603c3ca50992387c38ab1f76120e2cdeba624cae61dc51a9f3010e76d6ab92936a77bbb34c8ffb4f9ab00f4b15badfda8834e050c292b49f398a9a39f9eb75f01f8684b7d0be10dedd576b9e8 +Sig = 8ca52a9040ac49ec2415054ee86379f297832a2a33892c9dec09de778982fb1bbff68b3787ef43ad15f9aa0c518847ba1b3075613bf187a6fc8a7fd7f0b43a6a24086c1d6c5fcb1db18c93bc508e609396ba019fa43dd19f95194c47003d6092303be35477a3137aa2adaa51b22618db29fce98b5bf791ac70be7e238c558f0fb42a40bcfe0e9c07e178afe7a2db74fcb03693ed46719d54d69d5de43ad6a93b0a5b7da6e05ebf7c4b02da42c7ac1f8997da7c4de00c7747361bbef534461bebc23477e93a48558b3ade7d09dce6fa6a378e68e7204ab35283c58148df0cf9444e5f91ad31cd0474815895555cfd7f9cef9164b91db4f98816d194f85bad581f410a655273e5d14491793141f9d928cb30a322c513935dfd830dfc75030b8b2ba1f46b763ec303bef32b4dbeb01781bc1f2bf2ceba27750082661558cf3d42f03d50409b7db521299009753c25926e3e6502bb1763ab68dd5c19dc0265b16a2d438c3ed23b74e60ecff88708e5601a478986dd1b607a2db0fe049664d136517f +Result = F + +Digest = SHA384 +Key = 3082018a0282018100e1b23c29762d8572f1d41f1e7a846876d9901705bb4b3e0228ae65b2572dd1b3305f4d42a7704dda5934260ae9afb1eb34e7d865bbe11ae16d292f170711487ebce1d7363cd00acda5894f06127c1d4a7d9897373b4767a118b1646bc7a38086bc7d359067e9857b8b8642294cd08bab7646ee8ae0b3c7a51527a58ead49dabd11c3ee8326dade7f803cecb906c73aced669d5c3aed02c373d51bba4ffa98018892245f1ee6b035d52a3ccacb2c28062e572f213d607bb403725b34c65ea54bf70c0613e1a8d0552489787e3dc16c0b8cc7ca2d0b4d3e37d1c448a1ca4dcba20c146e78e2a6b3be888c7f65e49a47fe83e491dc33c684a1fd8acea8be091fdb70945c889df40431241e96a58cf7042f7a54f236ab01214a4e17d713945f79f605a8bc1bb6a2c4a342537b95beb92bcd722b68c14c346a1578c567f3ae277a46c264f4e4ef324ec2cc20ad43fbaf4035df169675575374de658df91cb5b3830bb31f69a8161c98f3b7f9e5983d96cbd9204c5e356980589c2df25188c474191bf02033bd4ff +Msg = 5a145e4a9e0f639fafe50687c28abdb29650e220fa5b58359155710fd2640f1752590ad6462bd20b43a356fa4958240600ded182413b9bc5d89a4d7c8944634551cb6f79ed88bb48a148300c324376d7344e5d4e8c517cbb2dfa185d25b34703ddd254d99c1066814e3d5d658432fd4cbb064e2ce185423f15dd9959af9b0279 +Sig = 89d9b5c50dbf8ae358aa201b9840d1eec03db8797f9d32dc4fc5f6421ede24c52715c698a5d8a6b4ef2c85f4bf2aab139e00edb17f8abe19cdd427c1d72f4e2f9b97aff034dc7fb09ed1de84ae491a04c71ac24fd8b16622a3517746cf63df051b55ed218a2c1e6ab5d603687bf199af4192c1f11f49f0e7a9e0e85563a60139b5829fc907599c7be5d19fca86f17b6fc65b6d039a43447c5d6d3deb41f7ab77a55bebd03dc92157131691a66cabdf721fbeff93250591faada512d7403f6f49912758e030c8abcbda4712775afd2d1b2d0fa31b175fbae92becfeed5b9a34a6c61c761145b8d2147b5834996850fff9ce72f59b5cbb7314bf5fa951e39b0a4e0b6c83ea1632d3b3bffd560ed36e8dfcabc60d8e77787ba1356b47b979c4f734abb5d02463f264d842569826808447365692f9508d69002d9a21893848ff62f3747592cd1c6b2b4d7e8b118a3a89915633958371c373c7c677a499fa32444d21cff20ff35c342e4277ca009e948f56d9e5ca99d281b3624c38c33098c1c18448 +Result = F + +Digest = SHA384 +Key = 3082018a0282018100e1b23c29762d8572f1d41f1e7a846876d9901705bb4b3e0228ae65b2572dd1b3305f4d42a7704dda5934260ae9afb1eb34e7d865bbe11ae16d292f170711487ebce1d7363cd00acda5894f06127c1d4a7d9897373b4767a118b1646bc7a38086bc7d359067e9857b8b8642294cd08bab7646ee8ae0b3c7a51527a58ead49dabd11c3ee8326dade7f803cecb906c73aced669d5c3aed02c373d51bba4ffa98018892245f1ee6b035d52a3ccacb2c28062e572f213d607bb403725b34c65ea54bf70c0613e1a8d0552489787e3dc16c0b8cc7ca2d0b4d3e37d1c448a1ca4dcba20c146e78e2a6b3be888c7f65e49a47fe83e491dc33c684a1fd8acea8be091fdb70945c889df40431241e96a58cf7042f7a54f236ab01214a4e17d713945f79f605a8bc1bb6a2c4a342537b95beb92bcd722b68c14c346a1578c567f3ae277a46c264f4e4ef324ec2cc20ad43fbaf4035df169675575374de658df91cb5b3830bb31f69a8161c98f3b7f9e5983d96cbd9204c5e356980589c2df25188c474191bf02033bd4ff +Msg = 31fd8f67e35675269c8deca6a513b67ad8ad903310195027def430717edb6a3909d10536ebe0ee7098034a4b7b440bc12f22c1eff235b3d357152f543b771e82f999db20e2e14660e7c114ed99dd692e5470a8cab6eb8a6756e06db8b31fefb66b1fbc2dae9fa47bf18cf194e726f74aad5feccc4583fa6c451e93a5d01b055c +Sig = 6d4b0803da15feaeaa9ee2d32af1cf1d209693da7b8847d30a11f6fbeebffe29691c93a9687519bfd79506f33c828d84c4368297067b997379098236db4856a40275256a3803a9bc2c2a748b5f22a5f9802251b650dbb57952abc845d5c10e0587497229b78a09b386d77b17bad1f3dbbd4a539e12f345cc96ecd6aafbb6c163c333a06ec4b1eaab7870dad2cc496e61e0aeb2bd8a23a92d95a7e771591b39de73581fc3f45619ed3f4f4eaec26bf364514d25f52fce545a60856b0d57cabbdfeca6c1da78552e75673d97c544fdb854046249f44d57edac6f50c6fa99d4c29a6d444db13797f064ccc759194da4a228649849379a197e032d6cf9cc9d62cbb46a5217c69947f1324d1743d5ef0863d80ac8d3566e89d0d892095b88397db3e0e07635805593c4d41db8a3528e88671a699a2f4b100b8ca601e341650cc73c6dedf36a9bb860d222fa456e6013419158e680217738551e90b4df4fe3c41ebec266ff230789ad8a5482a9451d52bf9efb8fb44c3e1bcc9f018bec51f8e68e8c19 +Result = F + +Digest = SHA384 +Key = 3082018a0282018100e1b23c29762d8572f1d41f1e7a846876d9901705bb4b3e0228ae65b2572dd1b3305f4d42a7704dda5934260ae9afb1eb34e7d865bbe11ae16d292f170711487ebce1d7363cd00acda5894f06127c1d4a7d9897373b4767a118b1646bc7a38086bc7d359067e9857b8b8642294cd08bab7646ee8ae0b3c7a51527a58ead49dabd11c3ee8326dade7f803cecb906c73aced669d5c3aed02c373d51bba4ffa98018892245f1ee6b035d52a3ccacb2c28062e572f213d607bb403725b34c65ea54bf70c0613e1a8d0552489787e3dc16c0b8cc7ca2d0b4d3e37d1c448a1ca4dcba20c146e78e2a6b3be888c7f65e49a47fe83e491dc33c684a1fd8acea8be091fdb70945c889df40431241e96a58cf7042f7a54f236ab01214a4e17d713945f79f605a8bc1bb6a2c4a342537b95beb92bcd722b68c14c346a1578c567f3ae277a46c264f4e4ef324ec2cc20ad43fbaf4035df169675575374de658df91cb5b3830bb31f69a8161c98f3b7f9e5983d96cbd9204c5e356980589c2df25188c474191bf02033bd4ff +Msg = 8f3b827a1dc3967aa2e26c9d9052a97e64b047c186cf980070528708137a2246763c557ca197f8b8b9240d876cef42669085be79064e1980e51dac06d4060cdbb870d1c5906a9c739c4358b2c554bfe4392120ad56a160efc9d940f9f7b0ddfb9cfe7dbdb1e688919466d587632c27dfa8abf8c43c6f753765adc949421f9e8d +Sig = a5e1136bc2db78827f97e435352303519df3c6ba149748ecea4c493f3355def8f94beb1ab45870d8bb1e32bb10c6cda4546c0bcf90da0758fa1e99b22742302ff17c7d5f0c5580a727304066204f524dd206e1a2a232d4394b74f3daeebc81d8609034dafec29620427caaa72f648fbf39028ff685925b1b7ae4b53e154ca93821b6b152da380217a2f82c864437df45c32253a9e3ecfcda3444f5db879cd12f2fe80d0b88a6fad7cb69303b82e1ed0b761e9f829fafbf4a7027fa2a6164f7701684f7aafd8b5dbf41e6d4031ca28bb4ce360fb3815c33fdb6051c9741ff4f9ebffcfd2f52873ba5567c17d40eb8a92af139b21a184b2e0740e0ade97effeea733cb2e1fe7ff65077c200b36e544f61e90dab2f524a74ed46f10d5244509faadc47f8bb57cac5026e00d1438b24f328dd5fa11fa3add3acd33b20f3c75b1007bcb5379cd8cd8e0f964dacda0157952f41e128ac43878c55acc5967cc2fc631010594248a439820df0ab1b7bd1be5f81bb026016dcc65a674d9ea03bf1958e591 +Result = P + +Digest = SHA384 +Key = 3082018a0282018100e1b23c29762d8572f1d41f1e7a846876d9901705bb4b3e0228ae65b2572dd1b3305f4d42a7704dda5934260ae9afb1eb34e7d865bbe11ae16d292f170711487ebce1d7363cd00acda5894f06127c1d4a7d9897373b4767a118b1646bc7a38086bc7d359067e9857b8b8642294cd08bab7646ee8ae0b3c7a51527a58ead49dabd11c3ee8326dade7f803cecb906c73aced669d5c3aed02c373d51bba4ffa98018892245f1ee6b035d52a3ccacb2c28062e572f213d607bb403725b34c65ea54bf70c0613e1a8d0552489787e3dc16c0b8cc7ca2d0b4d3e37d1c448a1ca4dcba20c146e78e2a6b3be888c7f65e49a47fe83e491dc33c684a1fd8acea8be091fdb70945c889df40431241e96a58cf7042f7a54f236ab01214a4e17d713945f79f605a8bc1bb6a2c4a342537b95beb92bcd722b68c14c346a1578c567f3ae277a46c264f4e4ef324ec2cc20ad43fbaf4035df169675575374de658df91cb5b3830bb31f69a8161c98f3b7f9e5983d96cbd9204c5e356980589c2df25188c474191bf02033bd4ff +Msg = 4fd8f7c586b502fe11ae866254e333b688f33e29b41cf995dca4a60275778d6c1d114cc6899e6f3ebf6040c38552e0c4190b973b22e469ebe75deae5bfbd5351c8f9d46bdcd72cccc15378eba04248e3b935f87754a03e53fb3cff94e6a9678bb75838be68a86230814fd5e38efc939ad03b09e333989f5580078e17d483f1a2 +Sig = c5fcf6db007527d04b7c7b2ab744547521ca009e1644f20e793bb51837922ae9411fff23c646c2b56d99a3cf24b676b7e3cb036b6445c33629bdcc979fbaa280ff8e1c1c9e66b0f453633d3933b788590302746f0cad1be62e6f0ff1457358137cddb8574f9df59be5192a2556b8689beeb266a5adf6b21ba56e6b7cd0d6760f5c350f2ffbda1fe30fda8e2cf563f96d85cec8051c7b635da259dc30e868d917fa31b21e91caddfe5dbd21475a98bf6ab4cbb2d62dd52e35a3320f48b027fe89eafc15bce8f1a5e6c5a402d0d87743d3cf6950dfff4c616da976fac676cc944296381d81ed8c8a782adad29b31e4b2343e92dc8c406e022e566c0b9f5477024c73b21dee60128098d2fcbf67273aa12f44de44ff22bd36a0292723d026e34a0f1d545eec9fe4024214aa647b31af4a5d7c8259a720462476fdac9aa480668d726b9fe4f3c220bb492cd871f86527072089d60872fed7721f4764277903f90bb987af661b2fca1d7ff12694ab654037ef9146480d2c1c8c6c5e52adde601bdbc1 +Result = F + +Digest = SHA384 +Key = 3082018a0282018100e1b23c29762d8572f1d41f1e7a846876d9901705bb4b3e0228ae65b2572dd1b3305f4d42a7704dda5934260ae9afb1eb34e7d865bbe11ae16d292f170711487ebce1d7363cd00acda5894f06127c1d4a7d9897373b4767a118b1646bc7a38086bc7d359067e9857b8b8642294cd08bab7646ee8ae0b3c7a51527a58ead49dabd11c3ee8326dade7f803cecb906c73aced669d5c3aed02c373d51bba4ffa98018892245f1ee6b035d52a3ccacb2c28062e572f213d607bb403725b34c65ea54bf70c0613e1a8d0552489787e3dc16c0b8cc7ca2d0b4d3e37d1c448a1ca4dcba20c146e78e2a6b3be888c7f65e49a47fe83e491dc33c684a1fd8acea8be091fdb70945c889df40431241e96a58cf7042f7a54f236ab01214a4e17d713945f79f605a8bc1bb6a2c4a342537b95beb92bcd722b68c14c346a1578c567f3ae277a46c264f4e4ef324ec2cc20ad43fbaf4035df169675575374de658df91cb5b3830bb31f69a8161c98f3b7f9e5983d96cbd9204c5e356980589c2df25188c474191bf02033bd4ff +Msg = 68e2b0476e66a61efdb9e8e7388840d0e58e4b9812ad3547ff3dc41d38a498c80226b1daf8ff3179f6af63583696fde7b9c0a2c7e902ab817c4627779b23201b44b1215eed9bf46c6a75b0961050f48f1b8c6ddc4dee9e86d8f2e0127e63a7b2f72808bd9361785d20b3d7880edfad31d19ab3bf879995bedbebf6d4298bb4f7 +Sig = c25f7a4c2998ac04d2291a849323fe2af98810e8270474594d9287230da4fb4469e198a6eedb1ff28bdf780320da132de069af846a8c88560722bcb59acfcc0a04533de1a69175d0d16c070098e43042af12fed1d5996c1a5a9550055440146ac83913427c6d60be2cbf0038c2b74d297f981af211aab0e08f89bbf4bf37693ef40fc9f44bb3df2c23ab3fd829c483f6704e541da8c842f1c3096de5c30ab6363fa2ef55b99d7ccc31b65c647893008b5b791f388f55ac1dd6fa786cf317c41a0a8eef2112549b7ce8030d403742995890adfa2f2dca37ded1a60c0fe987b1479a8ffd7272c7165c477e311cf208020d840cbd93892e72f05186a4aefbdfc0c4bf34525bf6d801bc45bdc41e8a1bed2cc7862ba789091bbd388a770b2c1bbff64416d7fbeffbe51a961f0fea7ec7c643b4d3f59beddc4d908dbdaf028c3f1ed10834c3e4b6038a53c24f102d5d5977f2d1573ec0273b0b16b9278e291a542939e63b5854c293bd42a571f286b347769e5d73f38ac034cc14dcc0b961bb0af5cc +Result = F + +Digest = SHA384 +Key = 3082018a0282018100e1b23c29762d8572f1d41f1e7a846876d9901705bb4b3e0228ae65b2572dd1b3305f4d42a7704dda5934260ae9afb1eb34e7d865bbe11ae16d292f170711487ebce1d7363cd00acda5894f06127c1d4a7d9897373b4767a118b1646bc7a38086bc7d359067e9857b8b8642294cd08bab7646ee8ae0b3c7a51527a58ead49dabd11c3ee8326dade7f803cecb906c73aced669d5c3aed02c373d51bba4ffa98018892245f1ee6b035d52a3ccacb2c28062e572f213d607bb403725b34c65ea54bf70c0613e1a8d0552489787e3dc16c0b8cc7ca2d0b4d3e37d1c448a1ca4dcba20c146e78e2a6b3be888c7f65e49a47fe83e491dc33c684a1fd8acea8be091fdb70945c889df40431241e96a58cf7042f7a54f236ab01214a4e17d713945f79f605a8bc1bb6a2c4a342537b95beb92bcd722b68c14c346a1578c567f3ae277a46c264f4e4ef324ec2cc20ad43fbaf4035df169675575374de658df91cb5b3830bb31f69a8161c98f3b7f9e5983d96cbd9204c5e356980589c2df25188c474191bf020310143d +Msg = a0a014cd11ec9b3df8d54647f5ccd580dbaaca2f6197c0551b2bfeeaa9d44c6a2f780690055b6e61af42466d0fd99f52d952ec81484f5a450f0264019392a1b957c1e1d3b7cd791fda93db16e2fa6a5f658f8c98216d0052eb60725de94a4c4701c5d01f9109647e61112cc9d6f9deb068abd2fa55ba5985978e508814c2f51c +Sig = 19382307981e33064a7836168c5302d691c9a364aa0193165d7852145b3ce74cc70439ee2652e598c153f1bf5c0e2e7bd628f15e797a974efd47cd70d368d9cc0c4d7ad8e41973c935e81a391e56c1ba9b486f59653cab41f5f7a0d5ad0f9730d45c6e2d00e5f78056d5a527ff128c584f1735ba1d4436bac48e74e1a387ba7e5de21d94ee419b466d6d01ea81f5fa7dd395ee8c5f0762a08799cd237d4c078ade6222dbc33ec83736760fdd04a0f911d9a1e6c1f97a57b1dcb9deb53471751dfcd83e17539a0dfa5e253aa0616d301dd613a2de4873fcffa324700e2c3f61c24b3cdb0e0e2cd33b33bd97e759d34693e18a6a40029c00c5f7e9d7c2638c3f6b5df9ee16da4ea4c1556f572d4c935ef1d091f313424a6085fdef28f76ab8562818cbb19e0b794669f6e6be366af6f0a43fc85bf82ee0abe8df1deffa4b1e7ad16f8feffc7e6b48995a11bcea982c995ee676985f84d47f93f4f9973de8aef4bb56cb66c9ac2f02b75f9d96a097b18a13007d716158620342e96961d6b7942a57 +Result = F + +Digest = SHA512 +Key = 3082018a02820181009689eb163a617c0abbf01ddc0e6d88c37f8a6b0baec0f6cab8f8a683f372a53d028253a6ba502da462adaf4fd87c8dc2b03b6c07c2b6aacab1d8c8bd043d89f4effe72ea2547c73c6366a2efab9c916945820fb880890bc085564e57ee76f7107a008f71e941e9fd631aec78f82e410ea9c893faa3d553cd1ca628af1087ca1b0c6aef3b66edcee14d1d7dc48293ddd7deed1ccbe487c957585abb9509151038d53f46b068e3e139c7689bf8e8d38669896b8d082e65e458e1f82b8e8ec926e7aa0f97d08526e9636f2c00af4c2bd3d8bffc4bb93cd47b09af18883e11b639d47938d036f7cfeb77db74a2c09a6dee9df98b18eff2fda7d3f4135083bb3b59e2172244ec37bdbdcfe6e199d36dc949cda1cca123fb2be07803d003d76af3d7164453df77d44c7f2599636ca44d0b7a46218326b0c814ed322b9c4279b060f1b9e14b70f55a3751c4343763cdbf9c14637d2210c59fbd037be17ea6706846fdc7b9ab90278c01c458e64442f9256f3ad1cbceb22959d495063aaca1a3959eae0302034df3ed +Msg = 54a8d256702239dee2ebc1dc681938b467ce4740dc5fff1796b5b50fa3f31000085860cbb568319bb746216bb065eec9845fd3d95625159cb359d9720cf838de6a3c958a5dc12e8b35e6f2e5757693528588db3fa7a343182c26c2c5e8e7e375e31b1a9a51765834c593dd53a1954ed7d10f077bb921b2126be418101e08384b +Sig = 869091f55f7e61bd18d88b974ddb408df8a724ca72232b6326de301cfc985e8db211180ad2057a4f4f73c07e48973b00d2833655acf393b31d155c11e9ddc05dd5f4516ac50fbc674cd0c577c79b00e5567629cbcf880b729a7ae0ca9eb040fdcced198243d40f5e3b59f35f2992da079e9f174844f1b2d0f1307624f4d868f558dcd1c6064297a152c816db1ee5848f9e670d8d837911c85b221430b309dcfb4853c3dbf6a2d8c8a6cd3d697ec325da6d8740081bb86e98d092a8794009915f5f55ca9ec074cded2745c50f328af98f78edc94cb6b416cf543d59a4d493824462a21fa6e368943d9d541ac233a7d708fcc7248be670051abf60199c656b8595dfd29e19a207d5c2d33a97dd7b66737023e62bbf522077b8531ededd070a2b17f7d1f9dba47a89585eb72d21c3dc6fb321614604899553bc0834baf3b7647a4aafa046964a805f05477c9e1def5c40430e82d635e7f90713e822e355edd10f2a65c886c4d94bb306bac35dbf307400eb7d8caaa36e167760209c80362e8c763a +Result = F + +Digest = SHA512 +Key = 3082018b02820181009689eb163a617c0abbf01ddc0e6d88c37f8a6b0baec0f6cab8f8a683f372a53d028253a6ba502da462adaf4fd87c8dc2b03b6c07c2b6aacab1d8c8bd043d89f4effe72ea2547c73c6366a2efab9c916945820fb880890bc085564e57ee76f7107a008f71e941e9fd631aec78f82e410ea9c893faa3d553cd1ca628af1087ca1b0c6aef3b66edcee14d1d7dc48293ddd7deed1ccbe487c957585abb9509151038d53f46b068e3e139c7689bf8e8d38669896b8d082e65e458e1f82b8e8ec926e7aa0f97d08526e9636f2c00af4c2bd3d8bffc4bb93cd47b09af18883e11b639d47938d036f7cfeb77db74a2c09a6dee9df98b18eff2fda7d3f4135083bb3b59e2172244ec37bdbdcfe6e199d36dc949cda1cca123fb2be07803d003d76af3d7164453df77d44c7f2599636ca44d0b7a46218326b0c814ed322b9c4279b060f1b9e14b70f55a3751c4343763cdbf9c14637d2210c59fbd037be17ea6706846fdc7b9ab90278c01c458e64442f9256f3ad1cbceb22959d495063aaca1a3959eae03020400fa3751 +Msg = 6459ea1d443df706907ffdd3ca2f193f93f5a349b50357d26748b767cde6ab5cbfe76b1acb2b9eb97da5c4d2ddc8d18e3a3b1a0326d475c1c2c49ca73c0fd3fc9540cbbba85ac52d6811fabd693a3b09a281d535715ab784df3ad7292606d15a70ccd1a7e2b1b48ad92a6a3f736f9fd5522d9a869c7b654446102e9493b3ed9f +Sig = 2b72942573b825cd1f0172119c23440a2b384b7f2a3c5582bb02f764e2b159ea9ad880ca61b3df7ca249134f4bec285083c7ebf984b192808e916af687ef6c6a9a6722a4fa9189fac1521d03853f3dd5a95ff4b9dbdbf3c7077f720650ead01945ab5bfee582ac1643526fbf68efe1bb3b6f7d2b4b01f2155aaea38a2c7ed29add23ee791a703d11e3b1b7c500d9a6b647c1337bf537c071e5bada6faa025bcaf5e5d1196998909c3d64758826939ae7fe1466dc6efc10a2b25e21186c2d135ceace33cdf490b13a0d10c2527e04200aa70bc1d4f3cfb04b5d2bc17aee881d3a788401f45443470bc639232088a9553c8d792aa5707654f075476a66b86368d5a92b4c84a3b4baba1b0b98bdebb85b48b82b8409f2e9c1aa500670329ff3b6e83e25c561110d47b2fe93ea2946a74f9730da9b7d126f8d7c3fa4a51fc30144a827831c186390998d552a1b677afe5afee46e9d4a5774a56355a4d1967677e75d176aef71c3fa061644d7a9582385877de67f87724b0a6e868f3a2eeafb68c53b +Result = P + +Digest = SHA512 +Key = 3082018b02820181009689eb163a617c0abbf01ddc0e6d88c37f8a6b0baec0f6cab8f8a683f372a53d028253a6ba502da462adaf4fd87c8dc2b03b6c07c2b6aacab1d8c8bd043d89f4effe72ea2547c73c6366a2efab9c916945820fb880890bc085564e57ee76f7107a008f71e941e9fd631aec78f82e410ea9c893faa3d553cd1ca628af1087ca1b0c6aef3b66edcee14d1d7dc48293ddd7deed1ccbe487c957585abb9509151038d53f46b068e3e139c7689bf8e8d38669896b8d082e65e458e1f82b8e8ec926e7aa0f97d08526e9636f2c00af4c2bd3d8bffc4bb93cd47b09af18883e11b639d47938d036f7cfeb77db74a2c09a6dee9df98b18eff2fda7d3f4135083bb3b59e2172244ec37bdbdcfe6e199d36dc949cda1cca123fb2be07803d003d76af3d7164453df77d44c7f2599636ca44d0b7a46218326b0c814ed322b9c4279b060f1b9e14b70f55a3751c4343763cdbf9c14637d2210c59fbd037be17ea6706846fdc7b9ab90278c01c458e64442f9256f3ad1cbceb22959d495063aaca1a3959eae03020400fa3751 +Msg = e4dcdd4e122e9466560370fb59ee0c4c323fca47e57772a029ff1b216f194f411f166af725ca43d0ac3d0e4029a381359c8e36f21363511b6f0a620c6aea8d6fd915e80e2fbf24e543f5707c538c9a744857775f3b9d86d539c9d0c44364120799411e3a39f77fcda2945c58dd909f2ebe005535680c58f50fa32cee026e282f +Sig = 02ca1d1fe97e0c3724d649dbe493c4bf8825d72f0e1717a6a8767453a3ef20bbbbc62fdcef7b816af229dc1ee2464a19b63825f47dea9774745dfe4ffd36ea72eaed7137412bcf0d0d5a9ffb02ecf15309aa047fde0a32a16876bcc33363b7290b6ec9c019d82767d36dcecb841b6946dac889cf3e11e614c4dd07e594c50e1557665c6ef76ef2205d57a2c8e6d0950ad7e4e476ce2e095f7e376c21f96c38b53327c94a9c4547982ce396eb2070bb73df03a09efb3bc6fbe5c35dd89e3ce54ff093739c678aeced539f04aee3c4d391b1399cfef4e24529033098a29aad09e715daba9c4323837b48b5292bcbf32b39cf15c6430714a930bd840b8c15d7467e71e99ef6726e1ab3d05a0e96939082391956f7f0492676a05771f695d24d7c7c22c64d7ef99a295ce34cb882153162400a9d6bacb4e1002ee51317477fddd9923fa1af2ef60e40da01fa19a43e446144581b3eb8f4d44d16b31c0b155c7e95ec52da4676c6abc1075ad271e5b39a5b3ac7672f1c65a1f28d402c691e8024559a +Result = F + +Digest = SHA512 +Key = 3082018b02820181009689eb163a617c0abbf01ddc0e6d88c37f8a6b0baec0f6cab8f8a683f372a53d028253a6ba502da462adaf4fd87c8dc2b03b6c07c2b6aacab1d8c8bd043d89f4effe72ea2547c73c6366a2efab9c916945820fb880890bc085564e57ee76f7107a008f71e941e9fd631aec78f82e410ea9c893faa3d553cd1ca628af1087ca1b0c6aef3b66edcee14d1d7dc48293ddd7deed1ccbe487c957585abb9509151038d53f46b068e3e139c7689bf8e8d38669896b8d082e65e458e1f82b8e8ec926e7aa0f97d08526e9636f2c00af4c2bd3d8bffc4bb93cd47b09af18883e11b639d47938d036f7cfeb77db74a2c09a6dee9df98b18eff2fda7d3f4135083bb3b59e2172244ec37bdbdcfe6e199d36dc949cda1cca123fb2be07803d003d76af3d7164453df77d44c7f2599636ca44d0b7a46218326b0c814ed322b9c4279b060f1b9e14b70f55a3751c4343763cdbf9c14637d2210c59fbd037be17ea6706846fdc7b9ab90278c01c458e64442f9256f3ad1cbceb22959d495063aaca1a3959eae03020400fa3751 +Msg = eced7082ee6e916e753959e7dfbec00d9b424b64eb90eb2be7eb22e9c648674859bacc26d82edeeae158cc14beedcc19e713bb6dc71603e1c35cc22f799b29d34549221d0a5435852f14ac3ee77ef50eb69a495c31378b8b05dd73863a03eb9cb982b98f0c4a5fe766533f8ce3d7039410bf3c5aae5b49d0b3557b1692e8774b +Sig = 11aa09883b9f571237215bacf3ea7f100740a1bd72748804bca39e9ef8527692b5a8e1f94d255cab186edd16fbe76bb9d673ecef79f2614fc0bf4e2b3c28a93c39e6fb31de6c21dc93026f8ce717767d57bef1c91839568b9da11c1b48cd7e53e132ea7f9b12f80c3bc1a6b9ba1e7d234ffc4f251e6ada2588b21b457d9bedb51d14b1214144a81a3b987f00b20c6cbb314840363fb4a605495124abd45ac3d7e9d65e8b95dff0ba916d432749dfb24e5fadac418ff716097d86943a6bfa8dc5ff27dda853c63c1b2ce3383bd78197af3e30635d0ae65e203300ded374a790245cdf4d1640ba5d0da8d6ea35ba0263efde90c7b1a8ac1e3cd0f843e5fe57f681055de7ffea80e92af36bc183efaed08a5842f9bc8369626d60ab2c460de622b9b3c36e6e559787264abefaba843bf443cd9443eff990db82feece2cdb5e336f84f641176f82b41efa2377737089792b4a9596a32cad5450a5f6a93f947d249dd734be9b3cb6c825af53c27070eeb7c1713aa607fa89e44a542dac00b80bd246f +Result = F + +Digest = SHA512 +Key = 3082018b02820181009689eb163a617c0abbf01ddc0e6d88c37f8a6b0baec0f6cab8f8a683f372a53d028253a6ba502da462adaf4fd87c8dc2b03b6c07c2b6aacab1d8c8bd043d89f4effe72ea2547c73c6366a2efab9c916945820fb880890bc085564e57ee76f7107a008f71e941e9fd631aec78f82e410ea9c893faa3d553cd1ca628af1087ca1b0c6aef3b66edcee14d1d7dc48293ddd7deed1ccbe487c957585abb9509151038d53f46b068e3e139c7689bf8e8d38669896b8d082e65e458e1f82b8e8ec926e7aa0f97d08526e9636f2c00af4c2bd3d8bffc4bb93cd47b09af18883e11b639d47938d036f7cfeb77db74a2c09a6dee9df98b18eff2fda7d3f4135083bb3b59e2172244ec37bdbdcfe6e199d36dc949cda1cca123fb2be07803d003d76af3d7164453df77d44c7f2599636ca44d0b7a46218326b0c814ed322b9c4279b060f1b9e14b70f55a3751c4343763cdbf9c14637d2210c59fbd037be17ea6706846fdc7b9ab90278c01c458e64442f9256f3ad1cbceb22959d495063aaca1a3959eae03020400fa3751 +Msg = 404f0ccd8f6ae6f81cd7a4efe9a1f630c56ac1987002698e0138507e85f09a89e976347a1a1214fc6addc20b36d217a9c52844d274e017b1109a7a1484ac3d1eb475153ba8efe459ed843a5638231cb44d9205941f062be239f103cd5c1b077a6af4b7f98229de786d7516b639ba8ebb23500bc7bb9c2d8842e5f48f57648205 +Sig = 11368e0d1b3900af8ce2fa432a871bc448e0d49a71eee2b201b67b496ce00854138386c3cccd6e4210f84c2e1de653f70f16d0240666fed5b9fcfb247d8c77f0ae9826fc32d0ed6aff6e94eab735ffa2dd108b842e59e7d04e3eddcdcd087b30a3d65cd9f6566dad10bd2e9d7bd2b6c20167552e77270ca43a1ca5aee8c9e7bb5825970ab74ea79d3ae73b12d34274d58117b568aa724a6766ed40afe8d2649dffd5bb9c1c854a70a10ac5459fb9bfe4bcecbb04103ffba4d314c2c5aebd805acfdb113f5321ebfa19d0c809e8713e35bdaa8c7930c2f2ca5792206aaac8e44b4cdf1434f04acf6c1df428843b14e1c8401555742707bd5f9e4188f38206fe11c13f29947ecd97f5f576d4ebeffd1f29d38e43d76348bb43840d9044fb7785a0d7d04bb27206b2907759c29a70acd14dceb05d21e7c8bd907df3746b666a40e35245f7bcd723446b4e88ab0e2d8d5b3456041ba111a8276df1e4625e5863c5dd6b2c7ec1ac55aac7eb8373cea752a6396558fa7adea9d8c4fe0843241bd67f2a +Result = F + +Digest = SHA512 +Key = 3082018b02820181009689eb163a617c0abbf01ddc0e6d88c37f8a6b0baec0f6cab8f8a683f372a53d028253a6ba502da462adaf4fd87c8dc2b03b6c07c2b6aacab1d8c8bd043d89f4effe72ea2547c73c6366a2efab9c916945820fb880890bc085564e57ee76f7107a008f71e941e9fd631aec78f82e410ea9c893faa3d553cd1ca628af1087ca1b0c6aef3b66edcee14d1d7dc48293ddd7deed1ccbe487c957585abb9509151038d53f46b068e3e139c7689bf8e8d38669896b8d082e65e458e1f82b8e8ec926e7aa0f97d08526e9636f2c00af4c2bd3d8bffc4bb93cd47b09af18883e11b639d47938d036f7cfeb77db74a2c09a6dee9df98b18eff2fda7d3f4135083bb3b59e2172244ec37bdbdcfe6e199d36dc949cda1cca123fb2be07803d003d76af3d7164453df77d44c7f2599636ca44d0b7a46218326b0c814ed322b9c4279b060f1b9e14b70f55a3751c4343763cdbf9c14637d2210c59fbd037be17ea6706846fdc7b9ab90278c01c458e64442f9256f3ad1cbceb22959d495063aaca1a3959eae03020400fa3751 +Msg = abdffe0b951a91c54c7f00e1ff8e98060b413f131d9cb5589a861a053ed7b1e203b2e3414415873222ae60f527f1e7b529674b737149b7401d4dd3afc3c08d8a57d519c44f3d36af04f7b46f5c6a33afa6b12d92c53637ec918283b37a53aab06fefa87afeb928a5bc020337e721035b4ac6ec5a618bbdc6becc33f9abb98fbe +Sig = 183fcc6e78a7811df1b7442c3bf543e198ce6c691ea6b3aa1952bee39d3218a2b1cd55af26efe672b11c640af1de241fc1289cf10643992fbfe604e1e965d2eb9e19f3399d9fe174ec4129bffb0e041b15f8b7e7b25b535882cbd5d6983d8d84dbf91daf22078579670f70e1f46b723e5a0004f1870d88daa8d7d22df709226ee6d7b484ff47a44db43073f65bc6974493a807391861adf95535b560a47e0ae96af5239aaf1e524758ab6c7a2d3bdccc2f2cc173251954504b837e27f32e699e7604a11d8205893d8cbf9a5852af1f65f8e0b1e1851b4f7a80ff929d5f4f796aaeebddcbfc4c3835d6381b2341404b77d90c78be4d97747b2d6fa9b88610963795ee95f70bbc897b486cf4b313ade25d56ced2e8b6584b921567d32cd627e9497f39f743f020930cf5141668e127152fd92df34b44e3cd142c1668fd71f7f83246f2be3b2ff95bc1ed7e193d75adc5369fbea93314f03a305a825946846f59af8c108a14888e894872e4c0086599faef2f5a0edfb4e085c0402cc56e69930f59 +Result = F + +Digest = SHA1 +Key = 3082018b0282018100da3428fb42c2bd8b0a954bb132f3334b804b163913398188d6b7a8433fc66249a300eb5e7ed2b20b7e22e21caef328071993af0200040247c651a57d37160bf41db0af7840aa731be37c3daca590388ab93ca935b9ed94962f3837bf7df344855b2ce7eb4c68485c8455a16bae782d606a246a1a66229be6a4e3fa9b534c5e1c1100b5a15551fb0a70e78612eb2116f1a38fd694028cd2172bc7699105cd6e4c14b5c9da61819048c42b10e31c3019f8c97825f7f70312ee3e6348a38e0b4fe9d567e1a4087cf260944f57cdde56dfd9cd781c846ec73b523bda1539130c1750f24cf0b6d0d160f4492ee38d31bc44d4ca299effb4427e2bd4fff80f7d19042d988713a84d470fdb692a296e6e14c68d561addd58863496aba014ccc423cdaebe43874c90ba0981404398250a062266e372a9ab7f29c236225769f0baea54aa436705f0dad5dce1d608ce27cb34d22ec913c99c5a2d28103b0a88c8cbc3b9b37525ac45bb39d26d0615fb0af055911bcad4d724c208e1cde40259578df24ba3b0204008a381f +Msg = 8bd0e9c0054beaa7d19e08483fa541fa551ee71421af980d4b2b71e2f1117fb8ae5576c3fc63a666bd622a9c14b5639679c8a5a60d092f5b2a3461ee3fd429dcdb07bfd5078192d5d9d3829146ed4f1438e251aae0ec6afd4eb03a7e3fc39106366c2abdceac963c4e7b76ee7e55edbcb9f555e94461313ade26635b98e5a07e +Sig = 4197ec722775cc065adfcecce1af88d2556161466124f358563c84c52eb4ff711b9afa9a6c0bab52ea08f7a6f434ea5a6b4dabd3554baae2330b1de68e62d83c2d6217781c6e38376f142971e13c8806e0bf467089e3dae47b80f9f93e8677209f29d0b20b474ac815a2e2388b9d34b838373401b72a33e30914cc0ce9e1357d00f55d9736107d3db204bb13d77923566d35715a9c986f199d5d185f02aed6481dbd116e3fbc81c3bd4e3438928d3c93f63d9566b4af39bdc6361783286611a0bee9f326ac1678ffd9ef517ea0a6908cc38d3b153e68ce79bcde3c2f33d240cec3066d8c05af6d38008239979dacc67c2bcc14212909f4e2f92b654f7dea995cf006088be930061798d5fd0e4851c65d5a23b9440a83aacca0837059e85f32d16f390b02a57b910c6a9109f8d69af07d7a8a44beb4ddef724bdc475369ad34510b8edb5c2b36c9f9cfc775d1f1840d2406943048ba339d94f7f226763c17425543fc5d2c4f0d9fb0f4ca98e100be9c2917c13ebeb90a9e4fd235671cfca89769 +Result = F + +Digest = SHA1 +Key = 3082018b0282018100da3428fb42c2bd8b0a954bb132f3334b804b163913398188d6b7a8433fc66249a300eb5e7ed2b20b7e22e21caef328071993af0200040247c651a57d37160bf41db0af7840aa731be37c3daca590388ab93ca935b9ed94962f3837bf7df344855b2ce7eb4c68485c8455a16bae782d606a246a1a66229be6a4e3fa9b534c5e1c1100b5a15551fb0a70e78612eb2116f1a38fd694028cd2172bc7699105cd6e4c14b5c9da61819048c42b10e31c3019f8c97825f7f70312ee3e6348a38e0b4fe9d567e1a4087cf260944f57cdde56dfd9cd781c846ec73b523bda1539130c1750f24cf0b6d0d160f4492ee38d31bc44d4ca299effb4427e2bd4fff80f7d19042d988713a84d470fdb692a296e6e14c68d561addd58863496aba014ccc423cdaebe43874c90ba0981404398250a062266e372a9ab7f29c236225769f0baea54aa436705f0dad5dce1d608ce27cb34d22ec913c99c5a2d28103b0a88c8cbc3b9b37525ac45bb39d26d0615fb0af055911bcad4d724c208e1cde40259578df24ba3b0204008a381f +Msg = b8012a53d58a2db0cfa9e680b24a6327a01873cc7493650ea46213f26cea2020291f7d50039a32ffceed5b66323370ac0aebca5b0b066311a63ede782faac7773e8f1baa567a0b10c48bfd04ca14d46ffd63713becdb790b024a5929ae7688bfc0f90c4b174f404d792ed442c21515d641286f565f3b3064812d8eee3077ec61 +Sig = 584351aa09ff6cd9da1771735e122bea891e20c6c3e297966885f7c7768a395c455768a8c6066018cce86d2effd909a719bd7d712072efa0aa530b9ed6a1a24c4c4f589a006c077ffb013f4fd9dc0a9e13b516a3234d09f79ff76e8d46a8c5f1e41f229805d9ffcea507277511b5f8e71d13568574d01759cd851e2b6cdb6a7fca280ee10d7a62ae15db9069c0438ccfdce2b8d83dbc7e5abe6ddb1813ce1b7aafad383455b50da544bdec9dce0d93894927940d17159f1f82bf44dcd8e69631125695b7cbed538ff467d0f53258d815b8a817e79fa238eef0a26e53202ff5e2d57b547831eba68f71ee81b1d4a5af42de2c5c4e9a8e4d3f53d6e9832e71de9590851a5be5e18b381c94536313185db54f9f03d362971b13a8612d3456cd8d3f15644fbeb33f8fb2b9b6b60522f49b6c6bc5d6c3701371f66dd115f95eaf5889893e27df3975ea90ee3e8b9438e7dc26ecee1dd9fdc34843e3188cb020778b4ffb8b52339405f17278be0e6d9a227292363829cce7cc3ac2ba1ff90cf8c09dbc +Result = F + +Digest = SHA1 +Key = 3082018b0282018100da3428fb42c2bd8b0a954bb132f3334b804b163913398188d6b7a8433fc66249a300eb5e7ed2b20b7e22e21caef328071993af0200040247c651a57d37160bf41db0af7840aa731be37c3daca590388ab93ca935b9ed94962f3837bf7df344855b2ce7eb4c68485c8455a16bae782d606a246a1a66229be6a4e3fa9b534c5e1c1100b5a15551fb0a70e78612eb2116f1a38fd694028cd2172bc7699105cd6e4c14b5c9da61819048c42b10e31c3019f8c97825f7f70312ee3e6348a38e0b4fe9d567e1a4087cf260944f57cdde56dfd9cd781c846ec73b523bda1539130c1750f24cf0b6d0d160f4492ee38d31bc44d4ca299effb4427e2bd4fff80f7d19042d988713a84d470fdb692a296e6e14c68d561addd58863496aba014ccc423cdaebe43874c90ba0981404398250a062266e372a9ab7f29c236225769f0baea54aa436705f0dad5dce1d608ce27cb34d22ec913c99c5a2d28103b0a88c8cbc3b9b37525ac45bb39d26d0615fb0af055911bcad4d724c208e1cde40259578df24ba3b0204008a381f +Msg = 0803aa22e7bfadb1ae48bdc6dea805f2951c23650d81d2056509c6c2a432d823fbf963254a4aee46e6bc0bdd9a7b7eaceb85a2b8a01a0959826d638d61a0a19157ef5ab3512c6d62ca6be887dafe281870a442e9dbfda2c69041f2c027323ec4a64f5572024b722be3bd1b6ca8194a5babdfcba0c612e57616ec3c02fed0f6e3 +Sig = bf3adfd66bd872ad41c1b2465bee7befb88bb46c36d1a113ee3df6e0d2547f771fa7e72b7ba22d86673912d70b8ca1bb61e6835da82f6a272ee25b4d603bed423d6febc079a13f9140cfd22fe2aa9994125310b8f4268b3ebd68ec0ec781bd129d921502ee93fad8d96d006996e44d662ddca2932d8c06f088cff205e5826104b7f2860beb589a5161e8c0d5454fa7c522e395e843f025e6b99af27951ce577894adf63516b7fc78a6bebf17c287d199888e5237a17a88a765f929618c53b87a7e4660507dc7fa3e4ffdac8eee8963a960eb34f0f974d83fcac38223f24c79f818fb46e767cb3a807a77d6fdaa4d1b072f9d20ef025329da3f2933ab694b838996b0e6710cee35339f4e1cb7a145e3feac23847049977a6afd55038b8fd9449bee3875ca23708932d693657167ee577fa56d790dbd98537857a5d67bfa5c998c39af621c43c5ebc3976a0de1dc09890929ac3384abcfc22ed1c965254245bb2c6f68399ad3b9c4e6499d1f09ae800a5d6fe871dc7adc98293fd86930aa566523 +Result = F + +Digest = SHA1 +Key = 3082018a0282018100da3428fb42c2bd8b0a954bb132f3334b804b163913398188d6b7a8433fc66249a300eb5e7ed2b20b7e22e21caef328071993af0200040247c651a57d37160bf41db0af7840aa731be37c3daca590388ab93ca935b9ed94962f3837bf7df344855b2ce7eb4c68485c8455a16bae782d606a246a1a66229be6a4e3fa9b534c5e1c1100b5a15551fb0a70e78612eb2116f1a38fd694028cd2172bc7699105cd6e4c14b5c9da61819048c42b10e31c3019f8c97825f7f70312ee3e6348a38e0b4fe9d567e1a4087cf260944f57cdde56dfd9cd781c846ec73b523bda1539130c1750f24cf0b6d0d160f4492ee38d31bc44d4ca299effb4427e2bd4fff80f7d19042d988713a84d470fdb692a296e6e14c68d561addd58863496aba014ccc423cdaebe43874c90ba0981404398250a062266e372a9ab7f29c236225769f0baea54aa436705f0dad5dce1d608ce27cb34d22ec913c99c5a2d28103b0a88c8cbc3b9b37525ac45bb39d26d0615fb0af055911bcad4d724c208e1cde40259578df24ba3b02037e024d +Msg = 66617eec7cb213d31a231ddbd0d4cebf80f32ac36d81bb979559877f416e3fb1da54b9fefe02a0b5d3d66bc59bd98b218945e969d3448fc609fba516a5c7a049e3c6b60ad39a95a2ac69541a6328aaa07c1a5e2d2193fe647102d4bc1a2e16e12ac05d58220258624ce6c2244f4a9104017a71567cf770387477fbbac82c0943 +Sig = 72d24f9b4b3642043b7080ce66d5c2bed95b1a710776ede03cbfef3806760a6ee640def72c6b04477342dc3d1109d06d58a1880bcb8b3ffd8ea15c2e66de6815419c684962f79dd0c0645b2b22cbcea29c7ae85bb5e689ead0f07350a3cc8dd872698daaafea95b014e12132df28b50e63f7c011a9e6a7184376223730119b201e8ac5d61b6bf9e7c2896fff600a119300bfb034a985330de944ffebf67f720a33115fa680e02bca71eed92d0160c83a037be1bc4383c26ada8e1298dd92d0db9d7d918a59baf2c2b2b88e7996f630d5f88675b8cf80be841973e3c1efd0a156ac9f5570eb2797ddd32cd4575fba8c3ed5c39236af3845bfd95020463ffb983b9a0ae24bd244f20a5ada496f58c80fa5b16dd2a8010abc86c7a8474621d4ebee2849ea96e0e94956614ea0818c425c0ccbbff20a62cb7d218573f5aeba6920f75a7fb26ebcf5debc473d4a8daed02e1eab16212ed268caf07c2df497d1ef6700f47287b80c6635edab668c3665ab333617daa98aac9c1f71f749bc1dc2bb2428 +Result = F + +Digest = SHA1 +Key = 3082018b0282018100da3428fb42c2bd8b0a954bb132f3334b804b163913398188d6b7a8433fc66249a300eb5e7ed2b20b7e22e21caef328071993af0200040247c651a57d37160bf41db0af7840aa731be37c3daca590388ab93ca935b9ed94962f3837bf7df344855b2ce7eb4c68485c8455a16bae782d606a246a1a66229be6a4e3fa9b534c5e1c1100b5a15551fb0a70e78612eb2116f1a38fd694028cd2172bc7699105cd6e4c14b5c9da61819048c42b10e31c3019f8c97825f7f70312ee3e6348a38e0b4fe9d567e1a4087cf260944f57cdde56dfd9cd781c846ec73b523bda1539130c1750f24cf0b6d0d160f4492ee38d31bc44d4ca299effb4427e2bd4fff80f7d19042d988713a84d470fdb692a296e6e14c68d561addd58863496aba014ccc423cdaebe43874c90ba0981404398250a062266e372a9ab7f29c236225769f0baea54aa436705f0dad5dce1d608ce27cb34d22ec913c99c5a2d28103b0a88c8cbc3b9b37525ac45bb39d26d0615fb0af055911bcad4d724c208e1cde40259578df24ba3b0204008a381f +Msg = 1c7965099677664f23eeec41046865633a36ef29f6116ebd5101dbfc3d7edfc1bbd5a0674fcedb89b18c330cc6b4c860ced20c02dff8d24692a8a853fcf3676fe0e3087d2217b9c37fad30f17c65405f9c02aa97d6f4351346350148237118e3f1694652f8992b86f4188ef70ec1f4e90b9071eec44ebfadd6718de19a3e19a5 +Sig = 8b7a7e94dd13ad803b61a100b66075f011b9c52d8d443c49560f99256f0eef53a699d24dbd8aceaf85c2fc0eaedb6e34f1bb4e5a58a171b5f08170ff865cda853e599dd6f7b88c32678733198e1ee4eb586cb360f3ef8aa3c034557c49cc39bf02a5bb8b4f17aaf7a736b83d2965c4ae8bbf9cc81f3f7943dcfb74caf216b745f6fa6b941e6dc5d535feb5862864d4ab4d4258d7bd1f93ae81219f88d3b8790cd40e2c222b074a1d396a92f75bee8e088e0e71daa7120256c5842dc4abaf04d9784d25dc6374c0c33126055c4367d841809fb21f3a3cdbbee5aad204bd89b3b7aa4995154b4f2ff3896c936a1b8f41a95db16ffbb733d6abc23889ea2ddb07498a3bb270e259276d4bfbdccb94683a7860de3786c93b19e285685f4397594d1b18c1dafb09e614e8e59760968e14992f9b1b7bfadd283c3493ad5035b79630846b349e3cd294e93952b40cf4580e4fc24fdfbe77aeb92f8c6afe03624be13862880f1f939c21cc895e62fa4c78a3b95341092a6abe7d21b5bf5528b2383c20e6 +Result = F + +Digest = SHA1 +Key = 3082018b0282018100da3428fb42c2bd8b0a954bb132f3334b804b163913398188d6b7a8433fc66249a300eb5e7ed2b20b7e22e21caef328071993af0200040247c651a57d37160bf41db0af7840aa731be37c3daca590388ab93ca935b9ed94962f3837bf7df344855b2ce7eb4c68485c8455a16bae782d606a246a1a66229be6a4e3fa9b534c5e1c1100b5a15551fb0a70e78612eb2116f1a38fd694028cd2172bc7699105cd6e4c14b5c9da61819048c42b10e31c3019f8c97825f7f70312ee3e6348a38e0b4fe9d567e1a4087cf260944f57cdde56dfd9cd781c846ec73b523bda1539130c1750f24cf0b6d0d160f4492ee38d31bc44d4ca299effb4427e2bd4fff80f7d19042d988713a84d470fdb692a296e6e14c68d561addd58863496aba014ccc423cdaebe43874c90ba0981404398250a062266e372a9ab7f29c236225769f0baea54aa436705f0dad5dce1d608ce27cb34d22ec913c99c5a2d28103b0a88c8cbc3b9b37525ac45bb39d26d0615fb0af055911bcad4d724c208e1cde40259578df24ba3b0204008a381f +Msg = d02569c471a2139f9265920ec395fd1803fe857d1e1063e03a2b0f2bac1ab33010dddf8c98ab7ed1a43709e49333faa3d91284cb52138119d77bacb00e2110bb8630c0530329c9a31627654af16771007a07217d9e0ef397e8ade1aa52c5db3c5ba874e15924dc5d11be0e09853b4a780d65c659a90ba19f964a18e01f0bfcfb +Sig = 40bb34f18580db4e1af934834953321a7fda886fb8831041909abfc08db1aedaf64115791699180c18b14584457933033e9cd0347b3e25dfde4c77bf5983f8f1635cadecaf7b109f399ef891604d4ef0b8bdc49d24011e7b1e4af79c34d0616aec06da2fe4a88847dca5f739bbd8c4dd6e4b196d8117f666534538ba180f703bd5cd87a9de0a50cdf2ed4b9e542d4ea9c2eba109754c55bd4432f37dba8708bd528a244e2b8aba7e8e56facb218391ca9dd29d8c1a58d7bf749f047829ff52998649f52ac76cf540ced9bc63c5fbb8e470a91fa0aba01bdd1fb899bac38c7b9e6c5f69591f63af213c2b543078ff3e29d02327aad6242511e6c91b37074a94ead1753546d0db25048fe2f3d10dccad0624495a3e1efd1687c9d0854fccbaf13e1e4892ebaecf2d1336681ee4f3888922a75424ee61d229f2f85984d187c9955ae51e6707bda528586b7e373267834dbf5a31332e640b611be64058e79f02fc4fa02e2e238eaa4cb725c471e9c0e5a48bbcd6efb9fb851cac9617a4da16e17166 +Result = P + +Digest = SHA256 +Key = 3082018a02820181008aa12846ecb9d8b954d2ca0fd3f60826c76d2a98ae615f38f5a662cb6158f17f29050dc6a1bc2f60f3a9db2da6c9b27b8cabe25cfc25d005ad60ce298f6da3415ee0a0a00cd2fbaf1eb67d4fffbe03b2570ab56c10dfee9f4da86c05920993c92c4ac33a246f5102113a258e17736897f981b8b29ae695802fa1bcf9b41a5f1053bd77400a153d1d6efdf4e4c14703a34380da2921deac003b4a7246568527d9e37d0da956766f155d3b9a38ddb747f2706a72268542f594c90e0d2f0ef755f4aa67aa6a25004548c73861c0333597337a944c42f762ca2b54821425477e4e0e2a9b1842ed3f16d68ed31318dc396071b90e1e514cff975d198a581723cc98cb784d18cf197a14dd7b9d5036bd7724b9301f514236bf7c8b290dc5bd93ebb6bb2d18d3fc4f4d480b8d1b62ffa3de1224607976a27d40f912e50b46b915f19556781b2ac88e16c14982a0718bdb4cec77127165bd7151f0181cf56efa1ea345fee075a7b36a02e74a6f3eb035b608cdd2ceda4d738876fbd7ffb009019581685f020374ef0b +Msg = 1d15d87fe7045f2a6650659acf23faeedc28b1bbd64a54f8f3bed617e3438975a6a891f4a08f99e6ef72c52efce3e7a15018f5b3aaa6bb4f4e8dcd069f75c06cf03799bf989f86ca4471cc0992a9010edb077b234fcb083148bedfe1d871d700a4c9d728f6bb8e9d0d556475b8feb0fc23fe2b56f041a5668957f6efb5c038f9 +Sig = 1f1563cbb8650b8a7ff7f71aba6c06ea20643e4620f29e8d1aeb4a1be6f665ff9779ca9303437aad3264aeb0f2b250af32054585edeb44b0a913175e6006d31b43eeb9c97bbd679e5434e8f645b6e096320a5906a64264abdb9cdeefabd5ff61ee3f851484ec6bb0c7957d6db38942be1b3412aeaa7b0700028fac765cc4f03bd7157122420f1acd4828ea01cd32e0cacc55f43fd9bf58ac71961031f72024832191598ae69dc96b458a237cae0e3a81784a98a1b012530936529efe73d073eaf974f8e1680706581e0accb3a189d80dc71b051474e50cd9d8eaaf9e7be4108be1e7d8e6a89709c50c2d85034f0e158b208a205fc4b30922d0e19ca58e15e46384ec15650ff56b6eaef908b44c4f9d71250fd050ce96acc204d68c09493596ab2bf3052792226d60b684e516e92fa0b1585dffbc309fac46457c07a901e901dd659e4fbe4ec0b327f88b8b8bc689c3f678aac3519ec1f7392936a726b7fe4be534b27bac5a35a55e18fdeb08857850940476c14fa12102014872b81bc5dcf292 +Result = F + +Digest = SHA256 +Key = 3082018a02820181008aa12846ecb9d8b954d2ca0fd3f60826c76d2a98ae615f38f5a662cb6158f17f29050dc6a1bc2f60f3a9db2da6c9b27b8cabe25cfc25d005ad60ce298f6da3415ee0a0a00cd2fbaf1eb67d4fffbe03b2570ab56c10dfee9f4da86c05920993c92c4ac33a246f5102113a258e17736897f981b8b29ae695802fa1bcf9b41a5f1053bd77400a153d1d6efdf4e4c14703a34380da2921deac003b4a7246568527d9e37d0da956766f155d3b9a38ddb747f2706a72268542f594c90e0d2f0ef755f4aa67aa6a25004548c73861c0333597337a944c42f762ca2b54821425477e4e0e2a9b1842ed3f16d68ed31318dc396071b90e1e514cff975d198a581723cc98cb784d18cf197a14dd7b9d5036bd7724b9301f514236bf7c8b290dc5bd93ebb6bb2d18d3fc4f4d480b8d1b62ffa3de1224607976a27d40f912e50b46b915f19556781b2ac88e16c14982a0718bdb4cec77127165bd7151f0181cf56efa1ea345fee075a7b36a02e74a6f3eb035b608cdd2ceda4d738876fbd7ffb009019581685f020374ef0b +Msg = 50930141564ac38dfef23056b5cfd10efcf3bb8823fa6f5254f8ff45d4b0725a86076ac0b1b8042b0248006ed53d224cb08bd78b104f1c4b69bf9c96686118387b7c0cd193cd9028297a7cc27f4ccfb4281852b5ca7e787723d689384a68ff9437db319d86f12e2d7871ec7b3b64a2ed6b83722dd8f14b7f8a260e52022bef14 +Sig = 65862ec1d10c408e4278ee1421e773f49ad426e368a48136d6f77d5a6de96ef4643ef3b8f7b451f9ef9ab4d8590752dd7adf1d78ce23411f3586564b67172ef718e8824d357b37f105dd0e38c0578df14220dbd83588c56c4cc658b5d4b07337ba3e40b40aa6d877aeb3cb95256d25e55b702bdb23026bcf05387d58ce020d359348536f9f108d111bf69c3823aca8655bd73a64789d258bc90b5006ad01c0640118e17aacedbc0545c543df8e05f254fb7d8846703723fadbd4179d4a1a5a7c371e980309d33b2d79061f741aae529d4e84c686a4077d3ffc66a8b18fab2f72ed06a3372efee4507425610d317c74d5566f4829b079012e2e066bacde53e43dd702fae3861eaf2721e3fc5818de552b5a9d084b5f03a451527fce2d3a608028163befb91ccecdcaaaf5cc357bfb698f0860350136b71b4b087b50e2d97a9a6765a6077f1b26e168b5d60b7a91330c3e1769adc479ffd866351eea4cae92609c0431511b91b6683d0d8d4d2a72be8622c7dd969d5977127ca5a6c3d0ef7ff77a +Result = P + +Digest = SHA256 +Key = 3082018b02820181008aa12846ecb9d8b954d2ca0fd3f60826c76d2a98ae615f38f5a662cb6158f17f29050dc6a1bc2f60f3a9db2da6c9b27b8cabe25cfc25d005ad60ce298f6da3415ee0a0a00cd2fbaf1eb67d4fffbe03b2570ab56c10dfee9f4da86c05920993c92c4ac33a246f5102113a258e17736897f981b8b29ae695802fa1bcf9b41a5f1053bd77400a153d1d6efdf4e4c14703a34380da2921deac003b4a7246568527d9e37d0da956766f155d3b9a38ddb747f2706a72268542f594c90e0d2f0ef755f4aa67aa6a25004548c73861c0333597337a944c42f762ca2b54821425477e4e0e2a9b1842ed3f16d68ed31318dc396071b90e1e514cff975d198a581723cc98cb784d18cf197a14dd7b9d5036bd7724b9301f514236bf7c8b290dc5bd93ebb6bb2d18d3fc4f4d480b8d1b62ffa3de1224607976a27d40f912e50b46b915f19556781b2ac88e16c14982a0718bdb4cec77127165bd7151f0181cf56efa1ea345fee075a7b36a02e74a6f3eb035b608cdd2ceda4d738876fbd7ffb009019581685f020400f1d0f1 +Msg = b1fe0c7145b1e35a8062ed24ab82e862a0d695a53a1cc7430af1b9574bf2a40918229110dd8c6c750c295b9911034e79879bd631ac883abf1262c80a98de6923993a78ca63dcd434eb36340bbfecbbb73b39cddc008f2023a27d163ea1d64a269b1068a7bfea431f855121839c8559a2247821ae1e77a1f8210b4cfb4e226f9c +Sig = 43333cc1b7da9710ad7f58a595078672be48dbedafab37dda0e1328e2f2b8b91dc88d2c33e0d8e06fdfa3dbc43e24d827f3ed31a994bf662225e1f0827a205cd638c16f38d664752d73db2c84f26d12a955e237f7a4d171a14d720b43dda3fa728d69ee0ed95869fc231d8f6fffe93b1acb81692ab9ff0f926073280a3bdd4472cba3b84541f1f9cd4508bf780e96c80b4a705c9893639f127969343a1ff9aab2b98d154c7f929fc55a5fe9485d1d9ca411131e5c0ff3fbaef353d49a9f13583cf1ebeea6209c123df32abcb311edc94c04e5eb3e1389e5011499e7d0d5bf66bb69ba7a06586d414b1d7cedd0106259406235fee1cf0b2bb2ce679f247741baecccff27c6e2a3a514d7aaebed281cb6381e7fa8d8a092ef1051b5418fd9886747c9194feab56eb975fe193076b474c2056d20a818a5b4ea56648ab5e7d4ddfdca1238d95da14dbb51e0a72b6df8d4e4d708a18e1828619c999525772400a9ca91c20229b1a979d30fa7bf7e33129abcc8d91f61ff0b8f2042345c27a928b7865 +Result = F + +Digest = SHA256 +Key = 3082018a02820181008aa12846ecb9d8b954d2ca0fd3f60826c76d2a98ae615f38f5a662cb6158f17f29050dc6a1bc2f60f3a9db2da6c9b27b8cabe25cfc25d005ad60ce298f6da3415ee0a0a00cd2fbaf1eb67d4fffbe03b2570ab56c10dfee9f4da86c05920993c92c4ac33a246f5102113a258e17736897f981b8b29ae695802fa1bcf9b41a5f1053bd77400a153d1d6efdf4e4c14703a34380da2921deac003b4a7246568527d9e37d0da956766f155d3b9a38ddb747f2706a72268542f594c90e0d2f0ef755f4aa67aa6a25004548c73861c0333597337a944c42f762ca2b54821425477e4e0e2a9b1842ed3f16d68ed31318dc396071b90e1e514cff975d198a581723cc98cb784d18cf197a14dd7b9d5036bd7724b9301f514236bf7c8b290dc5bd93ebb6bb2d18d3fc4f4d480b8d1b62ffa3de1224607976a27d40f912e50b46b915f19556781b2ac88e16c14982a0718bdb4cec77127165bd7151f0181cf56efa1ea345fee075a7b36a02e74a6f3eb035b608cdd2ceda4d738876fbd7ffb009019581685f020374ef0b +Msg = 89574c2f705f32cafde26824389468218712eae98268588f02d683f17ad494df8b53457fd24651ef0561282d3e20e834960c8968f63a57342a14a6f2375bc10bef6d235fc2c4eae7d7c088985ca6bc8b1ae8c15c4ca7c5d0b1769cbae061b61fdc2e4e98e8e2e5f89c87ef2f392dcc6e3a2ff98c2bb788a9be84cd111ceb5b62 +Sig = 45c1da7fa6d790ac28f54716f23b2d594a637c5f6785e37fec8350e5d5334edceb66c263197702e5e5d543a2a9a6893cec3608512503ca26831d8847c2563c326bbdf3aa5edf7a583d8252e2cf35bb16cf30a0736ccdddd41af4b54729c843b9c675ab33d3ba1e1f7f63d2aa2ec94da2a9fe4eab9036b0561d5ddeb6d3dfecd1e243381de0eed5d41b8fd6023826d3bf4ffece8570e800c1689a57c2987a0f5629dac772c5f40b475ac61524c0308dd7de872d2f2d68c6017992ee060c607826db6f263f3276f330b7d267defe6eb91f9e9ca63e552531869f0b36784813991da6aa930736858146a42eac2b17c3ed2fac55ae3e0c6370b5302e693f84615e4174576150c6454a5c5f7a4f72d03630e899363db71eeb8e4e919ab6d15e87306c626dbcc18bfe62bfb1878a5105cef0f5b4f06cc4b6d7fc12f29e687ea9d0e16b7ca009356a2cda1f7b48b22e43883582cc770803f6c75892174168ac6954c76a475f0bdda4dce703e5d7737f7019a43ac72447b524a6132dde51f925fcbb9485 +Result = F + +Digest = SHA256 +Key = 3082018a02820181008aa12846ecb9d8b954d2ca0fd3f60826c76d2a98ae615f38f5a662cb6158f17f29050dc6a1bc2f60f3a9db2da6c9b27b8cabe25cfc25d005ad60ce298f6da3415ee0a0a00cd2fbaf1eb67d4fffbe03b2570ab56c10dfee9f4da86c05920993c92c4ac33a246f5102113a258e17736897f981b8b29ae695802fa1bcf9b41a5f1053bd77400a153d1d6efdf4e4c14703a34380da2921deac003b4a7246568527d9e37d0da956766f155d3b9a38ddb747f2706a72268542f594c90e0d2f0ef755f4aa67aa6a25004548c73861c0333597337a944c42f762ca2b54821425477e4e0e2a9b1842ed3f16d68ed31318dc396071b90e1e514cff975d198a581723cc98cb784d18cf197a14dd7b9d5036bd7724b9301f514236bf7c8b290dc5bd93ebb6bb2d18d3fc4f4d480b8d1b62ffa3de1224607976a27d40f912e50b46b915f19556781b2ac88e16c14982a0718bdb4cec77127165bd7151f0181cf56efa1ea345fee075a7b36a02e74a6f3eb035b608cdd2ceda4d738876fbd7ffb009019581685f020374ef0b +Msg = a8d283d3e616fcdabe06076c3368e022884108cf569bf363db860010955dafab0f4a0f54fc0c755982f87358d83e08a4136e15ea3d3b1015a87efc6e817e9908a86ed85bbf37912f827878bc56cb4e0f244b54af67530581848804e95b1954321b45c7305a1eb923658dfddfd497182a62dead66fc6b397018aa01c748b648f1 +Sig = 5961403c27cac4677ccde42cb807477e004b7cc795f8e14049e78326769803f852175ad36d6cc08232c168a34e33eeadb7aaee642b6a75928ad303fb4140eebbfc2fdff5a990f8bea12311529cc4575594a56f6d362a6cf8623cf6580eae79525e502c7be1ae71699e2b7916cde5ab5149840ce8db96e839d0d507bcc3d6184ec68a99c30a1b562959d7873027aa491a9dee9094249e7e3e1913f263e05b6d892a8787686baa7ecb9a88e3bdb52a7e45fdf49bb73588173c722c5503bb5864917410da43ff55e85e4df1af4bdd3b913ee5ef8b9f0293ef36641a775dd4f70df95f157569899df3b7f2cf54a5e34575ff9f6ef5b93d00699586a247c2b42ddccffa5c88294b7bfb686970e0fb9a1e7a823a8b16ffa9b5e45726dd3bb015c88307062aab622fcdac7ed30b7c773793d3f7ce326d30535f4bc289918aace1feaa02c620be6cdcde24d694e7936c58c83f9e4bc3dcafbc542afa4daa7be014099173708452817dc1493d3306053e97fd1c258b062a982a5333925472eb004d82d8e4 +Result = F + +Digest = SHA256 +Key = 3082018a02820181008aa12846ecb9d8b954d2ca0fd3f60826c76d2a98ae615f38f5a662cb6158f17f29050dc6a1bc2f60f3a9db2da6c9b27b8cabe25cfc25d005ad60ce298f6da3415ee0a0a00cd2fbaf1eb67d4fffbe03b2570ab56c10dfee9f4da86c05920993c92c4ac33a246f5102113a258e17736897f981b8b29ae695802fa1bcf9b41a5f1053bd77400a153d1d6efdf4e4c14703a34380da2921deac003b4a7246568527d9e37d0da956766f155d3b9a38ddb747f2706a72268542f594c90e0d2f0ef755f4aa67aa6a25004548c73861c0333597337a944c42f762ca2b54821425477e4e0e2a9b1842ed3f16d68ed31318dc396071b90e1e514cff975d198a581723cc98cb784d18cf197a14dd7b9d5036bd7724b9301f514236bf7c8b290dc5bd93ebb6bb2d18d3fc4f4d480b8d1b62ffa3de1224607976a27d40f912e50b46b915f19556781b2ac88e16c14982a0718bdb4cec77127165bd7151f0181cf56efa1ea345fee075a7b36a02e74a6f3eb035b608cdd2ceda4d738876fbd7ffb009019581685f020374ef0b +Msg = b2a9f33308f84f8718e860ee4e439ba1541a985f355c5dabc3a8df343660c69515ff713e5aac3ab2d10ffbf4c163d13bcecc1fed1eebd6cbbbb0f46938704be2983884c96b6063633a634d1325ee0715cb36c06f6a8f5225473bc5ad517f14a201fc34bd843d53001c8d5e34c40bc596130082ce626f582031ee58e6c7b5aa3e +Sig = 6f443dabd187abfeb167c7a76954251cb017b40dcd3c0de81909993fbdd6c99f64613e73aecc29eeb29fc9aab9ec54b55bc3539e0d34095248b5536b35f1a079a4f09ca2e83f51b07ef005a7e0a915be137e1d94ff2b26eda29a337b5b8d8652cb9f98703648a4b0d8c759ba48c1c37b2b76c3bbe116574c1f6265cc19703ce489186e3951e97e0d26230a82cd0b2a24def62b8af8e4962cf4e1a693d0d0bebd6fe45966b3a4e890e0a6f535919661beb109eb6d11e73ee2b97a3dd20074711bd4b817f442866d11c3fbf62255e05e466b36b8ffd57c6abe5592d72061d96435dedc32a822aa342b159ab21a993703b5ee7bd6d55508800b67667188810e062be554244db902947bd2ebc7f9e6c899f6ca1d3ba3a5c2edca8bafca8a5b54426b04a5a16a3c752d18647b578904f60a5dac531c95b0bfc37b7aeddd3c3564d0581f1088e85ed85ca366ef94eeb8f8d06b060f73f20778ae83bb884527fe9bc1a04d6dca59fefdfb9e14d68f97d9fb5fb1045c9a229d3015a4867efe88791554f8 +Result = F + +Digest = SHA384 +Key = 3082018b0282018100b9d8bc1223a849736371b49a5ca907a795cfb595fa5aa4ee94a6833fe0ba2368232fc0cf55debcbe7dcfda928bbae3f9069eaefc5c96cf490cce15585cc084ecb6cb09ef234e295b96fa01305f64494018cc49ebbbdc5ff99a2458a06501f33eac8fa9a69db092b3defa9ec09dbfa7cc36c9b356e05f514df1475b9c272d7ed2b63c37465d1554d0f7fd0df30cccd10f6a3d8052fdeb09fa95f305e421db0888a9276f1d1981f4bab7c2ceb4cac86e26c41fc10766b867f68da4c72d854b18acae0ef7631077b89f6bba28692b2a6e4af219770240c3479fdd4498b9c74416d3f666d245ab333f9ade406f9dbcaa3e4743dc7d210bcd6fa449b52121db40c2f8b3f1376be842806dccb7186811618f9ea4aed979e31e26b15e6497abf38ca47fad10c91d1315469072e0d64ca3b93aa86409f163460e750a86c73240d01f76bf2f7f1b947f22c99ae148673de8a3dad1ad34ecf33f1bd4f08f0cb7ea1e5cb62de9ffc98a265afd68c3bb0abc1ef12ced048be9ae9245b89f6c7733185fad0159020400c31179 +Msg = c084bf63aca6e6917b6b46a4ea65bb59cfead64d6415d21de30ecacc538b2a65a19764e1f293e44a387a45210369c5fe9b5ef6764b3fb741ff1f639c12be48ed614e5ba6a47d296bfeaf1177d28bb13cd9ba9e4971eb5871381b7d2ada133c3327320d7a696c9f3cf493126efed5675cb18735907f219df5b6897f3c5494ee7f +Sig = 3e81c4d40bddfa8fba559459acd314ed43381be13637b35d1f3856a3c881937e7338cca224cbe3fe8464eb0c96944a419857266bd1bbfb6fd5b156bd735f4a8642d96e40902a47f4302ab151825ba5b63d889ec54fbc100943d9b09658eeb654eef21f2168dfad01d2c02733fd192512ad643808fea2b1af43e10ba60c65548c82769df02c8d6cde973c24e9d92f31fc54be94a292ff2ef77cbbc53e970242acfbc40692a745208bcf96bffb862e1dd2ca3b90ae6f8be53fbc5899af6c7b4d1fcc530a34fe0856a0645181af615575efa02833b853775d252233f4c2e4bb515732814594ab2a82ba080e2db520fabcea260084627bfbe01af01e3774f3d8a6aaeb0cd80c901feec45d4eade1cf66cc878f190d3229b2df5b227dd4e03125a9a6d83a1580c0505e4a785ecb698e1ed0c83a2c62b48e3b44d3fc441364e5a8bf364a937e5303d16244bf016142d9841c04a52a8b3eebea3334c8b52108c7a62999801c840e98f30eca401772fc6b8462fe17c0ac75928ab068a16d5536df11170d +Result = F + +Digest = SHA384 +Key = 3082018b0282018100b9d8bc1223a849736371b49a5ca907a795cfb595fa5aa4ee94a6833fe0ba2368232fc0cf55debcbe7dcfda928bbae3f9069eaefc5c96cf490cce15585cc084ecb6cb09ef234e295b96fa01305f64494018cc49ebbbdc5ff99a2458a06501f33eac8fa9a69db092b3defa9ec09dbfa7cc36c9b356e05f514df1475b9c272d7ed2b63c37465d1554d0f7fd0df30cccd10f6a3d8052fdeb09fa95f305e421db0888a9276f1d1981f4bab7c2ceb4cac86e26c41fc10766b867f68da4c72d854b18acae0ef7631077b89f6bba28692b2a6e4af219770240c3479fdd4498b9c74416d3f666d245ab333f9ade406f9dbcaa3e4743dc7d210bcd6fa449b52121db40c2f8b3f1376be842806dccb7186811618f9ea4aed979e31e26b15e6497abf38ca47fad10c91d1315469072e0d64ca3b93aa86409f163460e750a86c73240d01f76bf2f7f1b947f22c99ae148673de8a3dad1ad34ecf33f1bd4f08f0cb7ea1e5cb62de9ffc98a265afd68c3bb0abc1ef12ced048be9ae9245b89f6c7733185fad0159020400c31179 +Msg = cba095c8a79360b72e4a9f1211fbbb6f267852c4180d8a6f5eaca67a6947d71c227e5483937aacd0e4195b648a4b9c5abbbc7f5425b33b7bdf3ac5c1a07fa26a2f7af9ca1ad0ec50abf728c3189bbbccfa4127b5002bb470e57b0adb9f9bfe42dadbad25a45cc73c6a2e2eb923b5c0cdcb51706d133d9c5657b89b4fd06395ae +Sig = 1390587a993b5f01af71c53023b9f1746268dc1486ee3466f66e34b02173781e8a9f971dfd1a6095f0a4ebe18324e79cdec45354822213a9d7efdb529abb6d1aaf8c86aba3f786f2412e1af6f392a9b2143f3c805d7b703e5a95ccfdcdfb4f2386766c99b99d90ec9217608ae513bafc062f3cf407a3bd684ed82b7b484e18a9ad507f75b066fb297bb19b1b092fd3741742f06887315dad3c30e3e5419caf0ffd67eeb9e986dde031968415cf33670402d35ef14f880b6d9e6cf7758497923c8575754ad3f9f7fda41a4e6021314cbff1a7f5b2799935c476e55458b2bbd61a32638eb45708d91af75723b5f4f4fea15f16eba82235f8c6f81d27c02242c5ddecfa5a206ae6b1e348c06a03f197c9a0ea3654435798abdf4908016709ac1b0cb6368b893b02a8aee9096dfb23897bea35ed7ba5cb897f50a6023e6d42355354545f43b1b8af8aaab8fed275efb57323e8963d32b1d600b55d5f35b52b1b0c937691c322cafbb32a54feb84ef38e221c9b00a80310ea3a1ca6e713277e6bc127 +Result = F + +Digest = SHA384 +Key = 3082018b0282018100b9d8bc1223a849736371b49a5ca907a795cfb595fa5aa4ee94a6833fe0ba2368232fc0cf55debcbe7dcfda928bbae3f9069eaefc5c96cf490cce15585cc084ecb6cb09ef234e295b96fa01305f64494018cc49ebbbdc5ff99a2458a06501f33eac8fa9a69db092b3defa9ec09dbfa7cc36c9b356e05f514df1475b9c272d7ed2b63c37465d1554d0f7fd0df30cccd10f6a3d8052fdeb09fa95f305e421db0888a9276f1d1981f4bab7c2ceb4cac86e26c41fc10766b867f68da4c72d854b18acae0ef7631077b89f6bba28692b2a6e4af219770240c3479fdd4498b9c74416d3f666d245ab333f9ade406f9dbcaa3e4743dc7d210bcd6fa449b52121db40c2f8b3f1376be842806dccb7186811618f9ea4aed979e31e26b15e6497abf38ca47fad10c91d1315469072e0d64ca3b93aa86409f163460e750a86c73240d01f76bf2f7f1b947f22c99ae148673de8a3dad1ad34ecf33f1bd4f08f0cb7ea1e5cb62de9ffc98a265afd68c3bb0abc1ef12ced048be9ae9245b89f6c7733185fad0159020400c31179 +Msg = a855f314f00f48cde12b6f316f9922604622960e60adaee1d6bb6f1af635b47897672259a94c5f23100c7fe2b3c3bf33cf847660929e48cce51d9d9289945169651aaecb1e939756e93105729d3ab8340d0b2682945db878f1c7350b55847eecbb777daf786c582d13a1ea275685732ca5bf8ebc8f7264ada3bf20ce858ca3cb +Sig = b360ac35950b6be6d9b9b604af60cfa6716a23a7e9c556cc2f3bc9b298cd8605a28225dd6a0aaf135fb56c1dad09b0481e573565bd13d6fcf8fd3f73ea12912ed4785093e3c12864e1d125c41ff4b30af81c6ddb4d9a722cda98e1095a2eab53a05d22ac1bdec2687c3bab14aa83ac9448c9544b685ef92f5aa3f02a2b8b7cf4607c68169e6c5d9bb4bd8a29beb2a2952fa02d172e3120f414a37de6ebc2f2f7176894938beff3666bfb852528841d9771708fbafd61a3f1410300b77b5efb7e682795f290fa0a469cc22cadd7e188a6a41c9ff25443850f749df159cb5748e071df8b5e0ff0e7d1517d3bf4e4b51263f8f76ff1e8114ebefc2b33dc3699870b29ea68853ecd5e6faeff01bbe8ea1595273ef6b0f0befc2d2cbe8b8c3c7f6a45aa1f905624d71bd649c85797a337ddab8d7b67feb3fa681be382f88b11eda4a0883e55c71bb452079f32ba8235888fc82b339efc574521e80d185e271bdded1df25acf2fca5acd1a9cf26ca30b71bb44ab61fff382ae7274669d5baa20d02a6f +Result = F + +Digest = SHA384 +Key = 3082018a0282018100b9d8bc1223a849736371b49a5ca907a795cfb595fa5aa4ee94a6833fe0ba2368232fc0cf55debcbe7dcfda928bbae3f9069eaefc5c96cf490cce15585cc084ecb6cb09ef234e295b96fa01305f64494018cc49ebbbdc5ff99a2458a06501f33eac8fa9a69db092b3defa9ec09dbfa7cc36c9b356e05f514df1475b9c272d7ed2b63c37465d1554d0f7fd0df30cccd10f6a3d8052fdeb09fa95f305e421db0888a9276f1d1981f4bab7c2ceb4cac86e26c41fc10766b867f68da4c72d854b18acae0ef7631077b89f6bba28692b2a6e4af219770240c3479fdd4498b9c74416d3f666d245ab333f9ade406f9dbcaa3e4743dc7d210bcd6fa449b52121db40c2f8b3f1376be842806dccb7186811618f9ea4aed979e31e26b15e6497abf38ca47fad10c91d1315469072e0d64ca3b93aa86409f163460e750a86c73240d01f76bf2f7f1b947f22c99ae148673de8a3dad1ad34ecf33f1bd4f08f0cb7ea1e5cb62de9ffc98a265afd68c3bb0abc1ef12ced048be9ae9245b89f6c7733185fad015902037fd99d +Msg = 52b8858ed4d0a638f1694e25ba9d40dd27d5579f0de71ba54a8292a842cc59a79049f2e5f5ff603194d8f16962475c41d82e0b41eb00ba0d3d2341e99598ae7c8ddd97d48a12afabf15c96e99887f66a7befcb00b1a002bc9ebc4669691d175ab03c1c667b51ba306fbce5ac45a436de7ade3ee547101b39d3164831a8a4bac8 +Sig = 4ffd27f815873946809b20af5e752506c39c881dad1e61ef880a245755ee35858578bb2bf826ab8adae135cdee5a132d3d5d02d4dd4af4c530447b4ee8911f57d29d1c88853cb415e0c9d041a30593cfd7f539a4450c4016f629d4d723450ca869fc247fdab20d2d34315d7292584961dff6e8726a1515c1d0f0ed1eb7ad902d940f1513d3c9188cd06ea8562ce5a288b501a80110011508c4e1e575c0dcd7fa9a7df22bc37fc6ab2183b0570fa5b53c583ebfc414b412f14ba2eba86e996660ecec5d2cdcf4a408b84f35718115237ae3e6ebc7489ad754642c25c2c60dac66379ebc1e4b0fb7ae3e8a5afafe83e2119269ae04465a55562dfe8f2139b2cccaff2668cc9805d15f0a8a159ef4d9a4f4f6a1ff8f6b272cc317e7089a8b9ec056978e7c65e5e8a234b1e992ff9b279852ddf70b5b8a3ce8ee14ba9b7a1ccf7787a9ea8c97fa872d0c7b29002e4548ee6bbd7878d43cac68ad58b37ce0310d37b73342033e98d4725b629ef5400cb389c95356e893259a7a2aadcbc735186274b7 +Result = F + +Digest = SHA384 +Key = 3082018b0282018100b9d8bc1223a849736371b49a5ca907a795cfb595fa5aa4ee94a6833fe0ba2368232fc0cf55debcbe7dcfda928bbae3f9069eaefc5c96cf490cce15585cc084ecb6cb09ef234e295b96fa01305f64494018cc49ebbbdc5ff99a2458a06501f33eac8fa9a69db092b3defa9ec09dbfa7cc36c9b356e05f514df1475b9c272d7ed2b63c37465d1554d0f7fd0df30cccd10f6a3d8052fdeb09fa95f305e421db0888a9276f1d1981f4bab7c2ceb4cac86e26c41fc10766b867f68da4c72d854b18acae0ef7631077b89f6bba28692b2a6e4af219770240c3479fdd4498b9c74416d3f666d245ab333f9ade406f9dbcaa3e4743dc7d210bcd6fa449b52121db40c2f8b3f1376be842806dccb7186811618f9ea4aed979e31e26b15e6497abf38ca47fad10c91d1315469072e0d64ca3b93aa86409f163460e750a86c73240d01f76bf2f7f1b947f22c99ae148673de8a3dad1ad34ecf33f1bd4f08f0cb7ea1e5cb62de9ffc98a265afd68c3bb0abc1ef12ced048be9ae9245b89f6c7733185fad0159020400c31179 +Msg = c59a84b7b6a11b30d6e4ae9f4d745ac2b122ff0787f0e7a107c5a8db20654bacbc9fad8c45c92687686969901935ab17d73e08de31682208891d0b7318426547326ac7cfcb4a63883b6ee6783e2aa0c13fd2e576d62db3ad8f2894d6edc8c64bae629a28510e1a5cd659ee00c53a81e871485f787e29e2b9a14e0daca7ddb8df +Sig = 7ae1169c0d774fa54ced1d2cafc75f64d46a0f154275191580feae3c043b1fc84ffb9f39cdcdaf2e76170da8dacb51c9fdcd3ccc4966911576823dc2a312afae8a502b6ed879a51a9be3a7eb8fb7f0ba96203722add0d8edd2d1267fc74be56b1bd3e42a24df1e05c5ac2f576713fafe6b105fd403589dc6c8734b07d6650c12d215b2378ad63601c4edfb7f4e6a5951112b7e9dab5da98c863d2f373def298e408110da2e21b32fa1f942df85457dbd8d3e0b86e89547471b86f27df3c1e361de5609b78771557a859901b8e2310cec7af6a889c9bddc61c77293ba455314375ae731a12589353fc31104613f51384cefd8eb83b465cad5ad275e64dbd252a1f602afd2ffd8f50216d5ddb17fbf9bc30325427ad02cd525e87744c4a048e51dad778224cbace8fca7228df229b3a9e84777c2b4d0aade9c831f51005ee51b700e10efad61099a4a5c1516c85d2851f42660290aecdf1952a189681fa8a74682002b69318b9a404973a5f139f2a6594a8e0a8cc14033f27400c9601d9018c363 +Result = P + +Digest = SHA384 +Key = 3082018b0282018100b9d8bc1223a849736371b49a5ca907a795cfb595fa5aa4ee94a6833fe0ba2368232fc0cf55debcbe7dcfda928bbae3f9069eaefc5c96cf490cce15585cc084ecb6cb09ef234e295b96fa01305f64494018cc49ebbbdc5ff99a2458a06501f33eac8fa9a69db092b3defa9ec09dbfa7cc36c9b356e05f514df1475b9c272d7ed2b63c37465d1554d0f7fd0df30cccd10f6a3d8052fdeb09fa95f305e421db0888a9276f1d1981f4bab7c2ceb4cac86e26c41fc10766b867f68da4c72d854b18acae0ef7631077b89f6bba28692b2a6e4af219770240c3479fdd4498b9c74416d3f666d245ab333f9ade406f9dbcaa3e4743dc7d210bcd6fa449b52121db40c2f8b3f1376be842806dccb7186811618f9ea4aed979e31e26b15e6497abf38ca47fad10c91d1315469072e0d64ca3b93aa86409f163460e750a86c73240d01f76bf2f7f1b947f22c99ae148673de8a3dad1ad34ecf33f1bd4f08f0cb7ea1e5cb62de9ffc98a265afd68c3bb0abc1ef12ced048be9ae9245b89f6c7733185fad0159020400c31179 +Msg = 601f9b9b34cd3fe2fecf6244bb33a668c00aacfb5e76d95cbf045a98113c6598e677c299dbf18bdd781f30a05843bd4e8a3d60f336a426f3841505fbb9cb1f37a47045c63833ba6b7a1b3a859e9b3b416c66730ee9849a5134a6715aaeb703975db32b0893bc56f3ca6b8ad9d364a8a8302dee32be40bfde975ea79e36279a21 +Sig = a7f140de7666dd42f10350ffed86802c528fb6062bb7f2e1544622191dd93f337d2dc831a7885c8f96a22ed4b318865b73d9a38b994410ec4464fd6e3ac496df6c8184382a633240ea5bd6069e4d6a1789e230ed38eb46f117b286ff7721b7463d1a7a4d7e2117a5902ef1a51977f664b81524c2e42a4618acd8a0c4a2af1e8a454dd229f435159f36b132a1579d922a5828272a776540ae827adec7aa8e5d06703956f90c0a5351ebee317b3bb48ff14ce392d48d59c819c6111b37914be142038628416209656709a084d963fc5e213e0847eca013c83f4f002712ecaeac83d3224af740c764bea479633527632324745aefb28b87080e16e1febd5c435e1a5e17245ce65fb049d01706f3f5682f7e8bea9bdda372ece37a51fbfb611b8fb58c06d2c0ea37a6988a716fc6e38da4e09f66c2f745e1b51180e37deed1cf6bc7cc5edd6e149489cfe0045300390280ff940d762e0d866f5f9da73496d666a97c9d2f4f69ee3a51b77641e7faafc409d03be7afd79649eb293d61069b4479ab6a +Result = F + +Digest = SHA512 +Key = 3082018a0282018100dc09c7fdce01962419294bb4e9c7896347d9bbfffab1d7f35b2e36671d7766a4a4a6b16e8bc12adba6503d4d967efe51e89be652d42b8e7b1b12c0ab34d00997b72a5ab3859bd7d414c72e2997521384fc0ce01f2488f443f1afeb043b14099b3b1efb0154020ff10c50eab077e534270cee6e95fd9352c2f70350c0103a252fd041f9583b67bd92d5d712c21d6036834392b72e622fc0f3d3e1d1c09d512fc6486e7f5465999dffa16e2c5e3fa25267d8f52dd639c84af6bbbb76afecba35b8775ff1cad59e8280d73cb3fbbdc084a60429f7dd9bbe9198d2c8351c27c4ab61ab68d54e9222ebd9177550439a5b5b9ae13c49467aefc41afe435f0dfdaef913238a1f6ecf4692167c19357a2625b06942a5c5856100a6c9d66fb4ee37173fca4ff9298d4d4ba558aac53a75f14be641b1701550fc2a1e2cb4b2c734d29b266cde310888397ac19667fc577422c90a897c3b2e65ed62cac471595b18bb124501a663b093d1161d697f9df6bdb151bc9608534a25f983b14117505040fb481d5302035a75ff +Msg = 32e5485f4834ecff046b3f554de9f9d02aa8f95b2812d0d4fd1683c06a7a8d3d667324377873bddf6542d2590b50e3b58d4abb21b0ebf45d8515bd6f4920db978972ee85894ff6cae7f3158d7cde977f83702f11fdb583e45482eb803ec1764ae4092fb044729ea7d3a79157673c1c145542de91d6198650b086965d1205673c +Sig = 4f8d07925bc0ac7e423a824b1439cdcc486e9612f54c93f5d4fd34f64ad67369b172388e06da52ed100d278c77d6efecd3fdaf56d0a572dfdb978b9449d90951494809c2e88b4a25cf879967659db47dbd43656182958dfef8bc9c54c3a4d62fdb48066735ef5aa39cf89834e479a99e8d22700d288abadcbe28c6667e437515bb47c3d1662d9556ad98abc81bd1ce1b8990155c369ef3827e631164ce8d710c193246bd625692086d0e7f239ce3aa9d6b8d6a5728c64d24992465935aed196ab1715f88bc36118c52ba3cf48cff4e61fa0080282645cde0fbe9493150752093054f1f0889ef7a55c5814d6cf667913cfce4aff2941d1999dcaa5525bd497909839223759c62fdb1387dd4c84f72a32705ae7fa14512af2d7002b315c8c183f0bcaee254ad976270d035fb9d2f4cb22fa2e8a2535d9f345511b22391171aed821e754922b2f6c797debc339264fb28a9788a1d385f99a0333ef388113be22c7b93e18cc80b3a91d6dbe9dd46587544eef85335030a70ab73283e539498f2761e +Result = F + +Digest = SHA512 +Key = 3082018b0282018100dc09c7fdce01962419294bb4e9c7896347d9bbfffab1d7f35b2e36671d7766a4a4a6b16e8bc12adba6503d4d967efe51e89be652d42b8e7b1b12c0ab34d00997b72a5ab3859bd7d414c72e2997521384fc0ce01f2488f443f1afeb043b14099b3b1efb0154020ff10c50eab077e534270cee6e95fd9352c2f70350c0103a252fd041f9583b67bd92d5d712c21d6036834392b72e622fc0f3d3e1d1c09d512fc6486e7f5465999dffa16e2c5e3fa25267d8f52dd639c84af6bbbb76afecba35b8775ff1cad59e8280d73cb3fbbdc084a60429f7dd9bbe9198d2c8351c27c4ab61ab68d54e9222ebd9177550439a5b5b9ae13c49467aefc41afe435f0dfdaef913238a1f6ecf4692167c19357a2625b06942a5c5856100a6c9d66fb4ee37173fca4ff9298d4d4ba558aac53a75f14be641b1701550fc2a1e2cb4b2c734d29b266cde310888397ac19667fc577422c90a897c3b2e65ed62cac471595b18bb124501a663b093d1161d697f9df6bdb151bc9608534a25f983b14117505040fb481d53020400a1befd +Msg = 6de2659492e82a0541143765c7cb73d457c9b695b608231137e3b81fe97b23820f5ad7b3d05660e230b8f3373f9e4a5d909eaf41edac5617493eef9ff6ae7ca619df60cf5a23b993e05cf0877c628fdd24a5522ea4148077903d7b617db596c570ba286f9717df22374856dde6dfe95dfa26c8e341064a37f32784ede4591be7 +Sig = 1ae7122bd67306b4f3d0c3c25a6d3f3318b8ba13c64267f1c4264eeb974131d51566fbc71108873b4920bd48bccf493558b63ded97441cd674a3f020e1fe2fd09e093a18e654a4a379443394e540a53f5c24d67cce5f15be955c446ca872b2505a3b07be1fec5847261e76cf708dcbeef8db95a6fcc87bced3f7cdc1f524616fc0539df58075f818608fc38809ae8e489a35d186c8053f9cc26e869866b98347f888f701635df245248f29982efb7b05e80787cab12cdafe54d065b2ae3e0bb3a03ad0a727d77f6fc3cec60a32c5af590983d08b0d2d0a51dc50f3a6bb2f9786d6c77c37a32c917b91f5b29c65a6911a6638222256ef04b4bf76269f846db847b29d9edccae04effa28e357a76499389b831d5e8dc7c42036bc4277a71b4bab0edd152ccdbbddb8957a3bdbbaf1e4cbfb2b8af678ac7706d16ff6bc40c4e8fc4cbb30146f66b8e035363c935c5c72d78fafe2c8ddd4f0793b98a71a6b7ff6b6892c7ec193d1076fc243ac061801a72cdb78ba2f1c34881c6212af2a7689ecf51 +Result = F + +Digest = SHA512 +Key = 3082018b0282018100dc09c7fdce01962419294bb4e9c7896347d9bbfffab1d7f35b2e36671d7766a4a4a6b16e8bc12adba6503d4d967efe51e89be652d42b8e7b1b12c0ab34d00997b72a5ab3859bd7d414c72e2997521384fc0ce01f2488f443f1afeb043b14099b3b1efb0154020ff10c50eab077e534270cee6e95fd9352c2f70350c0103a252fd041f9583b67bd92d5d712c21d6036834392b72e622fc0f3d3e1d1c09d512fc6486e7f5465999dffa16e2c5e3fa25267d8f52dd639c84af6bbbb76afecba35b8775ff1cad59e8280d73cb3fbbdc084a60429f7dd9bbe9198d2c8351c27c4ab61ab68d54e9222ebd9177550439a5b5b9ae13c49467aefc41afe435f0dfdaef913238a1f6ecf4692167c19357a2625b06942a5c5856100a6c9d66fb4ee37173fca4ff9298d4d4ba558aac53a75f14be641b1701550fc2a1e2cb4b2c734d29b266cde310888397ac19667fc577422c90a897c3b2e65ed62cac471595b18bb124501a663b093d1161d697f9df6bdb151bc9608534a25f983b14117505040fb481d53020400a1befd +Msg = d9fdd81eb8d725ec727cf671386e9c4d7968b23e4d37a39414cb6de55a8ea401fff5b92894547c7b07f6e0b1836dfe0b92275d8a8542715f15a161a34a400e489cc450505957823c46b242c8897b72d5c6d282a78927f250e44e126c59d50d0ff99525fcce87401877d9a41e1241ff935f92aafd218d2e50c8f908a94ef6a93e +Sig = 9658a72570e4ee228863702a79115dd33a0d562762306cc603ca2c480aec784df73a32c067400e5539c68e34fcbac59457b0d89e6eb6faeac716234cae40a5a40593be11cbc9100280663007ae815d4515210f2f6220a09582fff1c085ae1dbf7cfa9ecbd3113b0f1803c47c65893e8cae0802177aa0a056007bf2863298cf172425c61d4798cef950e632f1f6d7618521dbd7aafbec3cc3e41c3f4bc9e80e437e71b4d6f924b15509cb355fa2d9e91176b861b81e4eefee72e988e7ed8e4eb7b93c4ea35c28332aac9de918e49a7575473d9cca1f117aacd06618a1fc9e1c6c6f8a7b0d4cb5d04187bfe930e4fc5a080ada4888e6aa5dc3e984c7841a225c50fae637369150863294ce5c0398a0c7d045098c644256ddea27b63b921fd87f86ab719962b71b5d8582a91f762cdfe3b1b2c714dda16dd91155fc9b5be378bbf2635997ad8effddb3869bf0cddbc113cc97d67fd69ed4b7884246cd18f0ae3a63c2db35ab7cfa4b73777cd8e005d6e222215a4d8818bd6426c4adc9b1c69565a6 +Result = F + +Digest = SHA512 +Key = 3082018b0282018100dc09c7fdce01962419294bb4e9c7896347d9bbfffab1d7f35b2e36671d7766a4a4a6b16e8bc12adba6503d4d967efe51e89be652d42b8e7b1b12c0ab34d00997b72a5ab3859bd7d414c72e2997521384fc0ce01f2488f443f1afeb043b14099b3b1efb0154020ff10c50eab077e534270cee6e95fd9352c2f70350c0103a252fd041f9583b67bd92d5d712c21d6036834392b72e622fc0f3d3e1d1c09d512fc6486e7f5465999dffa16e2c5e3fa25267d8f52dd639c84af6bbbb76afecba35b8775ff1cad59e8280d73cb3fbbdc084a60429f7dd9bbe9198d2c8351c27c4ab61ab68d54e9222ebd9177550439a5b5b9ae13c49467aefc41afe435f0dfdaef913238a1f6ecf4692167c19357a2625b06942a5c5856100a6c9d66fb4ee37173fca4ff9298d4d4ba558aac53a75f14be641b1701550fc2a1e2cb4b2c734d29b266cde310888397ac19667fc577422c90a897c3b2e65ed62cac471595b18bb124501a663b093d1161d697f9df6bdb151bc9608534a25f983b14117505040fb481d53020400a1befd +Msg = f5277358fc0e0ed9c50e381423ff803035d7107e961281ffd557f42625585ede55fa23cf02b6e7dd0b3ea0f24564f0fe7038b33c6a71d4b6a30f640bd13eed70e57c03f53dfe1d0a1b50a341563d48554fee9a6c2756d7992fcd03a5a0fa370f8df73c5115b05965dd8c6888be502f3eba40ee96358735af61d8f87bfb56e5c3 +Sig = d261372ba60cd5812e0230d6103e1f9a777b77f8bc9de3f27bcb3d32e23a60f56f4631350703e200ed9a97d3e2d397234576c5f5c1a347101f62142cca0a53ef9e2b22e724c9d02e5bf4fac684e2803e95640fad841aef7626bd6ef22e7a97ffff31237a70118504ee8bfa0f0e71fd80b195e8221a296d62fefe991e4be69785bad174ab44728605a3d1c41918d33a60fd5a002465ba7b02341c30e6b058b47cca3f5c8a289f5ea3401c2dad9b32ca2f3511538407fa5c03045528e977ce46c8dce655f445588d4a1cb8cb5d76e84776ae86344963b675a3428ca717e4f940ad29199cbf87d27334eab76b878bb015143bc2537fde09a8aaf2649ed29a5d09570959f011778677177e4624e0ac7d9146a2493d5d1299a408b1383ba61df26415d64bcf38e1441c4e0123dbc5ce22e7e077cf9eba5d632d308c23654f0453758a984700097044fe48c61f1873e5a3274c7d5cc7d68b392e26007a534cbec0167760adc5f8b5fea3e2e949e963fbff9ed89e844a3ff2e145d7b4b1193f724aa014 +Result = F + +Digest = SHA512 +Key = 3082018b0282018100dc09c7fdce01962419294bb4e9c7896347d9bbfffab1d7f35b2e36671d7766a4a4a6b16e8bc12adba6503d4d967efe51e89be652d42b8e7b1b12c0ab34d00997b72a5ab3859bd7d414c72e2997521384fc0ce01f2488f443f1afeb043b14099b3b1efb0154020ff10c50eab077e534270cee6e95fd9352c2f70350c0103a252fd041f9583b67bd92d5d712c21d6036834392b72e622fc0f3d3e1d1c09d512fc6486e7f5465999dffa16e2c5e3fa25267d8f52dd639c84af6bbbb76afecba35b8775ff1cad59e8280d73cb3fbbdc084a60429f7dd9bbe9198d2c8351c27c4ab61ab68d54e9222ebd9177550439a5b5b9ae13c49467aefc41afe435f0dfdaef913238a1f6ecf4692167c19357a2625b06942a5c5856100a6c9d66fb4ee37173fca4ff9298d4d4ba558aac53a75f14be641b1701550fc2a1e2cb4b2c734d29b266cde310888397ac19667fc577422c90a897c3b2e65ed62cac471595b18bb124501a663b093d1161d697f9df6bdb151bc9608534a25f983b14117505040fb481d53020400a1befd +Msg = 4ebfb0c3c540ba37f357cf30a2bc9155305d091f7db0a3d608477abc54a5d6889150f3157827055c77f678a00e487ce8797cc1b28f1b7fe6ea69ba09483ac4b331070343da41f4d14ae57064bb512f6543568a54b38e85bac0f00c5f60a17dbc770d67b3b337927eb44d3fe67180b0b5d713eb6db3b1bc3ad103f9266582098c +Sig = 6c640306e33515434ee5723d46bce72dcb4c5716311c9ad1d0182987a3090c1b4de97bf8c7323cef9f7d36fc0cc929b2bac1e7f6b1456409f51656b9ac3b9290fdf7910f28a2d0f72e56c94b1d1e5a76daa35e62c93e373b6c6b4435dc1394e131af3c0658e41dff438208bf6b159bc54f5dea67d04e0f794a251256f915e8f9770815c8d89ba123e0c057bf5286e95f017e65492904975b7d493286a634fbf3163a18adab3caaea230c2766deaf36243a37085377f3db5f091cfc707805cb8a9999a06eb3b931bbce312bb2ff53230fcb0c920a816164afbe947ef666617e39ac521db2156631b0f1ca24daee37a521e938be66d36a8819d2c648db87914cb7c7db43ce885d1db4b58b99b3c0a35af19c9cc4e0af21db9d133cf7a2699429fd06faeb3365e18cfe8d14295584167ce708a047b2eb3ab1c25bd1089c4fa5f9ace5ea02a8e7a5f170c398940270405eb6fd2382733247f4c3faca94b368d9e104668854bd3b3db5a5c8e9f63e5547da813ac8ae5b020013280287832703af91d6 +Result = P + +Digest = SHA512 +Key = 3082018b0282018100dc09c7fdce01962419294bb4e9c7896347d9bbfffab1d7f35b2e36671d7766a4a4a6b16e8bc12adba6503d4d967efe51e89be652d42b8e7b1b12c0ab34d00997b72a5ab3859bd7d414c72e2997521384fc0ce01f2488f443f1afeb043b14099b3b1efb0154020ff10c50eab077e534270cee6e95fd9352c2f70350c0103a252fd041f9583b67bd92d5d712c21d6036834392b72e622fc0f3d3e1d1c09d512fc6486e7f5465999dffa16e2c5e3fa25267d8f52dd639c84af6bbbb76afecba35b8775ff1cad59e8280d73cb3fbbdc084a60429f7dd9bbe9198d2c8351c27c4ab61ab68d54e9222ebd9177550439a5b5b9ae13c49467aefc41afe435f0dfdaef913238a1f6ecf4692167c19357a2625b06942a5c5856100a6c9d66fb4ee37173fca4ff9298d4d4ba558aac53a75f14be641b1701550fc2a1e2cb4b2c734d29b266cde310888397ac19667fc577422c90a897c3b2e65ed62cac471595b18bb124501a663b093d1161d697f9df6bdb151bc9608534a25f983b14117505040fb481d53020400a1befd +Msg = 6739c2996ed518592cde7619a0a5f361c09c51c36a738c189d80af0ce964ebdd24ecea5f5f3561441814e59ab2b4ff952281828fea451c4d4b912c84b65fd39b85f54eb3e80d83e52232d9caf56d4d415a21c36c763499fcca6f82afaa289216f01e959cf1a4a5c4b002fcb2521806edd244ba63f6862bae82e25a95ab064fd6 +Sig = bd4e9adfdf12d10d9de2d3c1d5324cd2048a57e0cac12ec5cc054f2f4c974b5c5dc3e8aca34a2a7d2907d3b930faaeb194f84fb6a9e99a2a7762346545f70bc384181b0213767f2a7381565cf4a17f3fd52c0d107b12d964605b576f2779411c38129a99300c902c28336ca76920b6c8e52e1c366fe92afe8c7c0ad93f38c07a9fd83926c1e634e026dbe67ae1f3df76a9bf6c75ecf6ecd660e68b0bb571028504bf233443e238aa573727713d659bc1d15171baed4d962017ab5689ef894802a65b4d522bf3b377aa2d3a42b718c8c7f205cd4c9c4d12f4fb2657bab0460c22737a5ee6524e96430493610178f19eb3750cb56f27e6088d26424ae13e863f410c7505899705168015e14ee1c5a1d4112b097f1e0f9dae32f64b75e82558f8f41bae65ab7cbfc400cbc1fd45601b53d26abe2f53a6ac660a7e940584e7fa90a0b8c4d906c46c4bb3a6eeed2327ac4409fd28b77b24c98e5c5f14a8e3678f965c46b455b02d7d0d58f24daf5f7b03362554d6809da7a90a3da53d81148eacea68 +Result = F + +Digest = SHA1 +Key = 3082018a0282018100d7a6b5b175afa3bb18fffeaee645a096d8ff28cf96e13dce6d753d3eef4c0cf605dd06f0d25d208da216eba09b3e7e59b304210e63118c5fbc3185f1b845d18bdbf113c4d65ad2880bb2a5eb5b4e7210df30296a4ed6cbc637595318e72e2a6439e4d244d63defad0d2a7d5c06518b0981fef4c916c533f3495c098b40254724fc5a44b0f1d23c3a275466100eb39de3dff6dd48e8322ac2251f3b1f09ae8e6a6136645acbf358e7baa89bc515a12e78cf0f6c9e257b816be1e7a3098b9c1d3b47a4c955b390dc576cca2f9b391b61af5e0eeba21addbe728c58eceb8e018573962ae069f91c538e3161e5765db7e15b352ba3978edbab3071104353d122024e1f3e31f6337dddaae90a2a646074b5691b95b7d82429192c897598a00d67639c326922407002d49432b3cdf84c095c021c4dbe53f7fbe80a497f75991d195122fdb672c67fc973626583202c8230a506f251600ab46435acf51ef6461bd55d0c14a76bb4f1c0b7e3c1affdf21dc8e514c2e8732779e62c3f1fd8626c4b80c68302032fda05 +Msg = 711cb316a158e229d3c4d2f5d6c7e5aa29b4ade40e95a188df2715eea5256946e7c98034c09173be343f8768c4235d9d409c6951dddda5e588ed874b79f1306a0aaee6c4ca4ac456cd52b0bf47028ea559c0b3552be99da93bd0e12ff504648783d2ce0de60b3cb94608364386eae08a1c2674362042ef9ca2d90be341e56e65 +Sig = d3c03e8891632b8fd169dbd4ef4a51f207ef89b50dffbc23fa2d941491d8e185f3c743684677df40b18b0d8cc712ae61a3027ad5be4725d6a8e7b242b2139494bbc5c59a0122b26e0f9afb8df76db8dfdce8e9d2c38818bb0140a41f9060bf23e6ae364220eb56e3a62eaf966873c14dd82bec57876d43d1e07197da109fc009ab8b45e48ddb7cb1ff34ef3fdb3f4226eea8597c5c59ac573d15183489ee52db3af1c13feddc9357722978e4172a3bb26bf2b2b537f121295c00151e1629e28cbddd7957a595cf5effa365dba30698d8049d4701a4dcf03e9bf53e4ad449a7aed4abb6cf65ebd33cbf763fef760c1fe178f5d748fe37292cef145d61cee1dc02bf1655516a5de3168dfbbf4136e6351d3b8313ece067edbe34b1678ea34387636506192384489556efbd133a9912d51780d7fed8662ced97a6dd49e423da4b0019fac0b83e96862eb302910284ff2eb190ac61dd2159ee24e0b233eb38d383b4ff6633bdba58d85cb81abccb072ad716eda8b33b6c8ea9de43e8bc184f1882b9 +Result = F + +Digest = SHA1 +Key = 3082018a0282018100d7a6b5b175afa3bb18fffeaee645a096d8ff28cf96e13dce6d753d3eef4c0cf605dd06f0d25d208da216eba09b3e7e59b304210e63118c5fbc3185f1b845d18bdbf113c4d65ad2880bb2a5eb5b4e7210df30296a4ed6cbc637595318e72e2a6439e4d244d63defad0d2a7d5c06518b0981fef4c916c533f3495c098b40254724fc5a44b0f1d23c3a275466100eb39de3dff6dd48e8322ac2251f3b1f09ae8e6a6136645acbf358e7baa89bc515a12e78cf0f6c9e257b816be1e7a3098b9c1d3b47a4c955b390dc576cca2f9b391b61af5e0eeba21addbe728c58eceb8e018573962ae069f91c538e3161e5765db7e15b352ba3978edbab3071104353d122024e1f3e31f6337dddaae90a2a646074b5691b95b7d82429192c897598a00d67639c326922407002d49432b3cdf84c095c021c4dbe53f7fbe80a497f75991d195122fdb672c67fc973626583202c8230a506f251600ab46435acf51ef6461bd55d0c14a76bb4f1c0b7e3c1affdf21dc8e514c2e8732779e62c3f1fd8626c4b80c68302032fda05 +Msg = 1b51ee87dd2a4715ad8de13b9dd8f46243d37bae04e392d39380232ab4e8c1044615d43e80edf7157bba9e3cf0d9fc2c44b624bcc1f86ef127f81c1763783d109e92d2ed79ee30bb9738a59f5dd15e26f5c588d699feb6090eb783fb6e3378212bae30bc5194b9af0bf13e8d6928e3f760e9f125135d33c250a3a0fd5e8039dd +Sig = 397e6e6a04b3fcb3f0379fe1f9b9e5cf5c6d433e383b688cced0a6ddebc740b8ec0266aa5c7e89d5ca77c9a020716dbce12dc044c00b3b1b23fe3419630bbd8bde5c9883a6d26232fee11a81ced86ccb338dfe46faa3fd58720b80f305d40f1966c268c56d92af05c4f1bf66e6d1c5c810fedff5b316f3b61089c8ab9a4f2b4d7a46bab1868008ff3c0bba9800634c5781cfd7711a9b51f41b517ea428a9b63eb36609c763cef555df2cfcd25e16b8b3c631fcc12ed78904111188908a21253544a8f9fb0615570b3f2453a3214ecfdbf44f403d1baf0fba84d17527e7cc23e15cfe047f4fffd89bbfecae01cd3ebec787c3dc54d9511af93a3b37924ef9d6d5fc6e147dd9e91a39bfe101e3e55004f096b9b889e95b4f1fcd561ea76ee6b19276e8a26aa3aa3eda99de7ee48ad1b1c907cc302e909e89f5e3dce32657ebcdeef78722b7ac95a87930facd56e9cc976b501edda38b663d98c9993b0139032dc95fdbe4a17a9eb0e82c40402365fb84c1195b039246cd424233c88fef251ff77c +Result = F + +Digest = SHA1 +Key = 3082018a0282018100d7a6b5b175afa3bb18fffeaee645a096d8ff28cf96e13dce6d753d3eef4c0cf605dd06f0d25d208da216eba09b3e7e59b304210e63118c5fbc3185f1b845d18bdbf113c4d65ad2880bb2a5eb5b4e7210df30296a4ed6cbc637595318e72e2a6439e4d244d63defad0d2a7d5c06518b0981fef4c916c533f3495c098b40254724fc5a44b0f1d23c3a275466100eb39de3dff6dd48e8322ac2251f3b1f09ae8e6a6136645acbf358e7baa89bc515a12e78cf0f6c9e257b816be1e7a3098b9c1d3b47a4c955b390dc576cca2f9b391b61af5e0eeba21addbe728c58eceb8e018573962ae069f91c538e3161e5765db7e15b352ba3978edbab3071104353d122024e1f3e31f6337dddaae90a2a646074b5691b95b7d82429192c897598a00d67639c326922407002d49432b3cdf84c095c021c4dbe53f7fbe80a497f75991d195122fdb672c67fc973626583202c8230a506f251600ab46435acf51ef6461bd55d0c14a76bb4f1c0b7e3c1affdf21dc8e514c2e8732779e62c3f1fd8626c4b80c68302036ce901 +Msg = 45d9c631cf0813fe85c7715860bc3a3b38f2a41a8688a12e6ea6030dfdb5e47eafd0458c3475f5d97381b535d05b996faa6fb16b28dee97536732ed5cadad2a46c0c32def50e96b897db58331d9f49f1742550476b935495b7555cd23a57f56b8577d54e9b3abd41f7bda479d1ef11689efec9d6d60faa33f932d72cd495157c +Sig = c7958952aae21c256809e83d7f1833e9819d3b4e4cf562ec71bc0effe7a797d62e71d1937a79361d1cdc9cd5726207daaa9def6249a0fd3da6a23683fc8b084871325e07223a3317868efdad20f52a0330f369a0ba51f0fc098afde7d2b72b7f2faab6782cb663c4701fc07bd82fa6d4ea77205a7ee8473a9c8336a781fb64c03632c52e6c1451c3ace7674d5fc9f26e8613c12137977511484487d9a8b928666bbe23cf0eefc849d9e0d0c125cc2ac42f342cb658d164ae57ab3d5606b8096fd4b4c81d54c9db79c5db70106cc474bc64ca73b713385dd9539329260899054bf6f74a45fd5363f78de558484a124a113ac2d2bc6fb8ed19730dc746748b62818e6e62f558d5d9fcbd2c6f4fcc70db6c7fc5c22524a89f04229def949379074e7220cb4717d6407364062095b615464e9ce9c50f53c4358d9f80ffbfe70c15cfd2d9d5f0b451979412f3cdc8f9619e189bf23e71116eb3c620c8f0740b890bfbe961f6cf8854ac6b2dc4fbfd62b6be3bfd1824070cd46b1002b61c1e572437af +Result = F + +Digest = SHA1 +Key = 3082018a0282018100d7a6b5b175afa3bb18fffeaee645a096d8ff28cf96e13dce6d753d3eef4c0cf605dd06f0d25d208da216eba09b3e7e59b304210e63118c5fbc3185f1b845d18bdbf113c4d65ad2880bb2a5eb5b4e7210df30296a4ed6cbc637595318e72e2a6439e4d244d63defad0d2a7d5c06518b0981fef4c916c533f3495c098b40254724fc5a44b0f1d23c3a275466100eb39de3dff6dd48e8322ac2251f3b1f09ae8e6a6136645acbf358e7baa89bc515a12e78cf0f6c9e257b816be1e7a3098b9c1d3b47a4c955b390dc576cca2f9b391b61af5e0eeba21addbe728c58eceb8e018573962ae069f91c538e3161e5765db7e15b352ba3978edbab3071104353d122024e1f3e31f6337dddaae90a2a646074b5691b95b7d82429192c897598a00d67639c326922407002d49432b3cdf84c095c021c4dbe53f7fbe80a497f75991d195122fdb672c67fc973626583202c8230a506f251600ab46435acf51ef6461bd55d0c14a76bb4f1c0b7e3c1affdf21dc8e514c2e8732779e62c3f1fd8626c4b80c68302032fda05 +Msg = c58629fdf3aaed600121e5a109ec1f62b360ab46abcbaeb1535ab2d0b53a40dabbfeb195a241411bac8c65de157a5fea49190f6a54940c6e9a0ff3ebc8d3ff030aabda877f8db3bbea7d9159aaafe7d8ecec68ed1f361c53a8afb4c8d7b71b581a554ddd71d86cc722be1119aed4e0b4039f5fd8f3fb08e8e5029c6dcb2fbb5e +Sig = 40ea4940619e7611473537ef5b108f9e1216e2ab9bb7fd45cfffe15e70621af6590eb571f9be970d30e5df0dbe527b9a9ea70e259b964e496735177d417de3291d16e0b055cc9b8f4dd5498bb7a78d8882bfba624580d81ff0b76f6a82f9a15d2c28cbeaa0e6c02807901838500e36cb403acadd6e431196c794c0bbae65fa6b7ef2ab4c58c0fc7f3d27bbc14dd7699d7b0fc42a3dd30504f7c7e71d8504c23fe08a05e76c8061337687241d27a0ba2411619d2befd66a00d894f302bbdc4f3ae7a562307f21cc43c377b084d8521e2f3d27315b5c8b494b5178dab25fb3a8ade194cf3f909e9f29d888f15a75d26d427e7a17edf63f7f5dd814c67433ae7e15f668637579a3b1d59c73f153e094029e74b8966a9a4b72efe0d5d0e7d9c44c63de6d0dbf00e76d459c3ded35165eac8a76883ced93359c34fdfa94ba74bb58464770051537e9b71f16f615d5615a7b8d380b4bb9ec2499b255ec17131d2161d10709c357687728de9758cf5a166e81fbc086a2e20dae9b99c4f4f83c5edc0ad6 +Result = P + +Digest = SHA1 +Key = 3082018a0282018100d7a6b5b175afa3bb18fffeaee645a096d8ff28cf96e13dce6d753d3eef4c0cf605dd06f0d25d208da216eba09b3e7e59b304210e63118c5fbc3185f1b845d18bdbf113c4d65ad2880bb2a5eb5b4e7210df30296a4ed6cbc637595318e72e2a6439e4d244d63defad0d2a7d5c06518b0981fef4c916c533f3495c098b40254724fc5a44b0f1d23c3a275466100eb39de3dff6dd48e8322ac2251f3b1f09ae8e6a6136645acbf358e7baa89bc515a12e78cf0f6c9e257b816be1e7a3098b9c1d3b47a4c955b390dc576cca2f9b391b61af5e0eeba21addbe728c58eceb8e018573962ae069f91c538e3161e5765db7e15b352ba3978edbab3071104353d122024e1f3e31f6337dddaae90a2a646074b5691b95b7d82429192c897598a00d67639c326922407002d49432b3cdf84c095c021c4dbe53f7fbe80a497f75991d195122fdb672c67fc973626583202c8230a506f251600ab46435acf51ef6461bd55d0c14a76bb4f1c0b7e3c1affdf21dc8e514c2e8732779e62c3f1fd8626c4b80c68302032fda05 +Msg = f7653ea73a08384cd5dc0f14daf59160b94ee19eb76b83109f3db3cfb446fb0febfe04a45774adc6e5385a1149798ecf386bbd7ad8eb5b7d7566393b75f711528ecf602136da73885ba0c5ee5569888919a482d9af891a76e6feb30c46b738a446a2f825bf82b51aa1d9f7b5e50ca614c2c2d8c4248de8845accc84b0ed0988c +Sig = 4ba672add725521df81acde1e1efd18d169ce4e04cb55d39fdb2c6598250e0c7953867dbe189c327f76bb6afeac0e013853e75829eb50635622c26667d55cf3bf81bcbbb94e5c0fffbd853e2d7d536659b1ca9105b777d6fdacf3000c7c287e484933d38e2c52b301e01a3fd196b4960b4d8a983466ec376ec1d70bd26e1d4dc707a87ccb32a4e12f56d00d1a8f9dc20794a59a437e93fe5c79a1ecd16dbc0191589b14c30e5187e626a0038b6f2396bb30c9b4c73a5b21db2128ffe67c6bcf81b0ccbc68a6fafb94296e334cbd28603a4f44da05a4c5d243e30160cd44f08aaaef7135632dd50830010bcf4b5282cc55e070478e51bdc87ed68534b8133876222986d525ec26624ad87e4a6910c6e3caac92e32e2fbf0945f8f1b201de5ef522aa4e84e06633ff3c092f8f095783da7f929013844458e3978f5e7679b633152a94880b6ccb064e5093a126ccd0435381908df6b4c84e47875edf323742429b7428bccdd889d602085d6b40ac2c05c705a91b41a9081586439cd178edfe7f909 +Result = F + +Digest = SHA1 +Key = 3082018a0282018100d7a6b5b175afa3bb18fffeaee645a096d8ff28cf96e13dce6d753d3eef4c0cf605dd06f0d25d208da216eba09b3e7e59b304210e63118c5fbc3185f1b845d18bdbf113c4d65ad2880bb2a5eb5b4e7210df30296a4ed6cbc637595318e72e2a6439e4d244d63defad0d2a7d5c06518b0981fef4c916c533f3495c098b40254724fc5a44b0f1d23c3a275466100eb39de3dff6dd48e8322ac2251f3b1f09ae8e6a6136645acbf358e7baa89bc515a12e78cf0f6c9e257b816be1e7a3098b9c1d3b47a4c955b390dc576cca2f9b391b61af5e0eeba21addbe728c58eceb8e018573962ae069f91c538e3161e5765db7e15b352ba3978edbab3071104353d122024e1f3e31f6337dddaae90a2a646074b5691b95b7d82429192c897598a00d67639c326922407002d49432b3cdf84c095c021c4dbe53f7fbe80a497f75991d195122fdb672c67fc973626583202c8230a506f251600ab46435acf51ef6461bd55d0c14a76bb4f1c0b7e3c1affdf21dc8e514c2e8732779e62c3f1fd8626c4b80c68302032fda05 +Msg = 0ad50e46eb42d8f201ee505c91168bd00494cc1945b402f86b4491ce98ea559c20bbe42dee081492247bbecf0263c1d4094d49af60d451ff76ba66ace937aed5a7902a0a53ec38bcea645cf1a6593f3c220af8edc0658b85481eaf6dd1ffd5e7e57f6544e0954b5899ceb22b449e0ff197f3623c2c10b9712799f57818ead0b8 +Sig = d4abfe9247a4fbd27668d0ed8473bb4d40eb5d5ccab3fa2dc7662d52dd613c12335fd0f13bc99c34d6966aeae422a7e3c9a2389d80480c9120eeabacb884ddb2906ea80511641747229e0a07c2ca082b354a0a52debfb93e1ffa19787134c8d7b8f81c0a07be5cf421fbcbca0084ae5b2410771f06c4bca56a920139ee50009ef879631609f0478b21e6548446752ff85905d0c5a80414afe6021a3ab737f061134f8fb390b030b1e6a1a016b8ec34b0cf3b38cd1b023ee7dd6840d459ff83fb2c6b703abf646478fdd64cf0347b9b55c78f2c731cf7b0242de2a6f247932a5cfe1391d7d19480a7945a105e3088c3ac5b72c8e422991b0b36e3ecad0904fdcb42a64271840dcdb1625760361ce81f4f68bab447390b691bc63829f60af23a77edc2cf97c071f58cf8a7c414ce5fdbfa7a6725203cd54c3386c4c85cdf17f770aea7e79de4d8368fc68b6f6c024bdb4ef9c346e0d78494f7134b0e9c651540dd2cf8edb5812a5f8d9943622fac67d5ad8fecef405bcfb16ec1fbecef8bc1c787 +Result = F + +Digest = SHA256 +Key = 3082018b02820181008c4b17ab9a0da366f67416075ce284ff69a2c1112a8b7d821f66e8bc5386cd1abfe499fb9a09523f1095729f61433cc17fed78789cde81145ba02d22ddb560332ec795ea6a764b9fb380f44ac63d64225772aa4503df2fdd20e7c1d17115d3c56176f49432b2930d417b84f997ed4e50cd557e2786e0275be8025f6f039a7a3b8ed421b4c224527c01c1a1bef6becda193eac7f484ab0a24da31d4bc8bb6f2d4a5f3817a246bd5a9c81dfbf55e8c5b18a8a63bebdcd245726ba5b6ed4f8981ab83933c00714064985d69a17ed017e3cfd7fd5d2c6e932a2e021d226013126e6272231ce8bf626121710cd19d0ff21227e4c4255be507809aeb0aa548f42749bae8e1a3e3b312d08f0226c5245c45b5d96eb8eaecd1b8a1dd3f9f908191325a02cb4ca57b25155447584749e2db23360233d9068195daebb7ca943311b58dedc6c809a5981ff1b66a803a4135fbddf1f4f2478559f9d2ba17d2da77b0f0b6b08662eb50495a16c301759cbf7281f4fa985800c14386e0db6df0422bbda9a26441020400e5a4b3 +Msg = 897bd083c89256d56a247c12e265f3390962eace1cef2f7504e197bfdb7ea144ab3256f2798473a48247caf6c415e658c0f9ee627f6ccb68d3838d4ddf660b9cd904cad40f05210428009a98adef9a73c8e0453e4bed9cfff36de8edef6c5c839c59f6d393ffa61de5b7b2a0a5db59b0a77db7098859e863ee0970461178da20 +Sig = 7a172ef111b0f2f9ec43bad8f6e8fa11e19222ed9575571716e55fe46b43aacee433447632849e0f486744054e70bdd98863f5f015b94ddd1571e64f6b9a26302e151d4865423791d596063bfad7e3b5c5494f4a3c5ed994c53b6d915824a1f1e8e3639f8873f9095a7842d88817a93bc2651e6ba94acce93830735654fcb5a4a01cccc090ede15ff5ed745a92d92d8186a746a693a94db4fae34db26c6ad0b4904c63001600947ee994e24da490a3de240e500b31b8be8b1b415599aa684c77116f12e3cb218cf388424e3276b1a3622f1c4115125f5af47d581b78b609a067ef5f33549fadbdadd098dd2c337897f113c8eca9a20f3da69aee2fe4a89bd3ff73eb4e8da271065a9013935731addb3480f52d07fb3a91261d8a030ee2cd9e0ab342b3bd62db62e359475ee9a36971ba37f5c3ae1f1939c276980140961e9542be9e0a4739fce668549fb606ae18774bbe62b20148dee0379f0f38fe982b25bae164785d3410c337b2f11ea74558d79991760847109dc0c77272a55afb0d3f58 +Result = F + +Digest = SHA256 +Key = 3082018b02820181008c4b17ab9a0da366f67416075ce284ff69a2c1112a8b7d821f66e8bc5386cd1abfe499fb9a09523f1095729f61433cc17fed78789cde81145ba02d22ddb560332ec795ea6a764b9fb380f44ac63d64225772aa4503df2fdd20e7c1d17115d3c56176f49432b2930d417b84f997ed4e50cd557e2786e0275be8025f6f039a7a3b8ed421b4c224527c01c1a1bef6becda193eac7f484ab0a24da31d4bc8bb6f2d4a5f3817a246bd5a9c81dfbf55e8c5b18a8a63bebdcd245726ba5b6ed4f8981ab83933c00714064985d69a17ed017e3cfd7fd5d2c6e932a2e021d226013126e6272231ce8bf626121710cd19d0ff21227e4c4255be507809aeb0aa548f42749bae8e1a3e3b312d08f0226c5245c45b5d96eb8eaecd1b8a1dd3f9f908191325a02cb4ca57b25155447584749e2db23360233d9068195daebb7ca943311b58dedc6c809a5981ff1b66a803a4135fbddf1f4f2478559f9d2ba17d2da77b0f0b6b08662eb50495a16c301759cbf7281f4fa985800c14386e0db6df0422bbda9a26441020400e5a4b3 +Msg = 77ba90225f3ba1722312f52b1a07c3f659aee2a085e939c3e5ae77a3bb0a0456d56637285f0ac93dfbdf89781479529c6e543ab1025e0daa0ab6fa4458b48b31eb29db76c4e80312f685d5e0fd5ccdbe50d544ef3ae7e7bee5db6864b853732ce28ae4d537dd37383c8b3f2b7db91ba427b96722d28baf489fa429cb83efa38f +Sig = 1f442887263f403f6ff9b20fd2780937596e99e3c9e640def7de2006f14026de1e140e0cd5d45d7fcb1f42a9127a661c87cbaa4f9b600d8ad7fde5beed5c125294ad7b211d550bc35429c71f84a837eca906a580aaf3e301b46deb59ebfa4b66323f6e136d178f7ecd8440d891eeed5c91ed785ffefcc725f2792868e296a8eb03c5683ce791b554636a787d579e3db81177b45aee1ac6bbd90d84144a706196d557b48d7fa8b551c3bf638ce93a6425eac03232256f4cca758ab2c427d996702b522eca24b0781f33aa2b61e1256fdb94b166f98cacea3d5da205f818d19b432d50309d8265eef151b0f40fceba927fd6b5ec9d1c2ba54eb9af22aa354299ffad07da5071a1fb4314c69399a5aa16c3b4ff3b61937debf6e55b5f44e91855ff0a64ab59f549c3b4dcbad5c4306b08be4b1be99d000ea52665e9bd1983fbfaecb15ba18adb3e88bb9429d6d1aa85f7f6304c253692ea0ae579123703f9d89f69669fdd4c12607d8c1b7a28f814e75a45122956c21cae47bba9e4ec1afb707e5f +Result = P + +Digest = SHA256 +Key = 3082018b02820181008c4b17ab9a0da366f67416075ce284ff69a2c1112a8b7d821f66e8bc5386cd1abfe499fb9a09523f1095729f61433cc17fed78789cde81145ba02d22ddb560332ec795ea6a764b9fb380f44ac63d64225772aa4503df2fdd20e7c1d17115d3c56176f49432b2930d417b84f997ed4e50cd557e2786e0275be8025f6f039a7a3b8ed421b4c224527c01c1a1bef6becda193eac7f484ab0a24da31d4bc8bb6f2d4a5f3817a246bd5a9c81dfbf55e8c5b18a8a63bebdcd245726ba5b6ed4f8981ab83933c00714064985d69a17ed017e3cfd7fd5d2c6e932a2e021d226013126e6272231ce8bf626121710cd19d0ff21227e4c4255be507809aeb0aa548f42749bae8e1a3e3b312d08f0226c5245c45b5d96eb8eaecd1b8a1dd3f9f908191325a02cb4ca57b25155447584749e2db23360233d9068195daebb7ca943311b58dedc6c809a5981ff1b66a803a4135fbddf1f4f2478559f9d2ba17d2da77b0f0b6b08662eb50495a16c301759cbf7281f4fa985800c14386e0db6df0422bbda9a26441020400c15efd +Msg = 34a83157520e0413bc2ec4b48034fe5cc3fd2f69fb7992f95e5437ad99d555aec606e1ee98155fb1d9faf94b175ace2b9aab8c18999a41bbada96e5e851d5ef3dc17b558a8014cd9942b3cf7b1b6396768b2225eb483d50c8e894866a800d6295d24d61ce8997295d50bb73eb612e819175818c2b4fdf7f5e93aed4f69456559 +Sig = 7a1699fcecfd4d337bcc6f4904d2356fff44aa24fd4a0324945d4a4dd9a9a552c59239dc9268783067477dade944adf592495a3b1e5a6eea7f58762ec4d5b0f3515f3b1eaab1273476cb0cc3080fa8c7d2f2695f4417a6dc538b8b2c58bfb248b7c41485aeb668a0a39ffa324f25074c75c0ae1c70496a4a37c9332fd73ced1d2fe561ae120c6c19d1e526c211ce8869ce236d06a9dab8f9ef453f8854cb4451033960a62fe279830667845edd5883734e730e50e7bae3bbcc619e5c4211ebf741ad2526bf0226440b7d076faa02a30f2c79132443de9fe9e6bfc12c65d1ee703ea274c06ffd5cf945413cfe13d1ec63d48ea477ba8c60a7aacc078b988cdb58691911975f26e1b33c2c0ff3e5026d9b1d7a6293eb330ad5513efd19937193b796c40114dd1ff32a2875963020f26177ca1b6a7d0c6a40a6c0be44b03555c0f4598f91600a336c73099fab278271c46d96f16d6882c00d5b3ba59f2a0bcb98f39b152c55eaee62a4eba026234f15963d7e7395de927e94893a8a175c65f0dd43 +Result = F + +Digest = SHA256 +Key = 3082018b02820181008c4b17ab9a0da366f67416075ce284ff69a2c1112a8b7d821f66e8bc5386cd1abfe499fb9a09523f1095729f61433cc17fed78789cde81145ba02d22ddb560332ec795ea6a764b9fb380f44ac63d64225772aa4503df2fdd20e7c1d17115d3c56176f49432b2930d417b84f997ed4e50cd557e2786e0275be8025f6f039a7a3b8ed421b4c224527c01c1a1bef6becda193eac7f484ab0a24da31d4bc8bb6f2d4a5f3817a246bd5a9c81dfbf55e8c5b18a8a63bebdcd245726ba5b6ed4f8981ab83933c00714064985d69a17ed017e3cfd7fd5d2c6e932a2e021d226013126e6272231ce8bf626121710cd19d0ff21227e4c4255be507809aeb0aa548f42749bae8e1a3e3b312d08f0226c5245c45b5d96eb8eaecd1b8a1dd3f9f908191325a02cb4ca57b25155447584749e2db23360233d9068195daebb7ca943311b58dedc6c809a5981ff1b66a803a4135fbddf1f4f2478559f9d2ba17d2da77b0f0b6b08662eb50495a16c301759cbf7281f4fa985800c14386e0db6df0422bbda9a26441020400e5a4b3 +Msg = 72e970c5fbeccfb254bb1313e33470e3074dd8d3fc60093fffc7c960b2a970c3c113a8fac64b71916a616844cd06486e29a1b1c5b2a02845c00c606a2f61b7a2069c040258959038688f62c1100ec05c64e9f2be929f49870dee6075eaa2a2d78aac0c457973348f966f8bf374f3df93014a2426650673ed2d9553e8a915384b +Sig = 6ce37157a92a7eda47c16b5b2d961c564ef7df9d5886043c07abbd1e74ec7f549c78b07e2140207e6b93e89ae69a74a5a76184e00ec03f1dd36c0699535e0bedb4f28634b194fcebe13d2c4955e01e4ef459244a7497fd647d5e6dd5f7ec156929d0e2f1e146d3397d3636726bbea13b38d7d38d4a5e4ebe68df7ff86c62c3802e18250a2cab3d200363c577895a33dc69c18d15309e7117ebf47b3b98c893785c99dd0077982ee084b4ac08913de46415e5abdbd223aca6ac5574ff4a61f5fd7631b776113f12044e5e53960a5af3867c8366e3367a20de73e6c4e0f7b9075a1a79374aee0232d06280c53bc6a148026e1686059d652d96c99ac41f909e278b3c408568adfe35cc55800caa58d03ce9f1cf533018ec4fcb5d66a50758229716c2abebe4b3e3c6ac778fc008db8985e5032d7825fa333fa4d7468504cd0785000f92833d5cdd61880bf40f803ac298343d75e18c003a8471e06449406bf1bafd988e162b0b8c62eee5795d957f1fe5d7abc6e7c8b3b43759f212d01def9151dc +Result = F + +Digest = SHA256 +Key = 3082018b02820181008c4b17ab9a0da366f67416075ce284ff69a2c1112a8b7d821f66e8bc5386cd1abfe499fb9a09523f1095729f61433cc17fed78789cde81145ba02d22ddb560332ec795ea6a764b9fb380f44ac63d64225772aa4503df2fdd20e7c1d17115d3c56176f49432b2930d417b84f997ed4e50cd557e2786e0275be8025f6f039a7a3b8ed421b4c224527c01c1a1bef6becda193eac7f484ab0a24da31d4bc8bb6f2d4a5f3817a246bd5a9c81dfbf55e8c5b18a8a63bebdcd245726ba5b6ed4f8981ab83933c00714064985d69a17ed017e3cfd7fd5d2c6e932a2e021d226013126e6272231ce8bf626121710cd19d0ff21227e4c4255be507809aeb0aa548f42749bae8e1a3e3b312d08f0226c5245c45b5d96eb8eaecd1b8a1dd3f9f908191325a02cb4ca57b25155447584749e2db23360233d9068195daebb7ca943311b58dedc6c809a5981ff1b66a803a4135fbddf1f4f2478559f9d2ba17d2da77b0f0b6b08662eb50495a16c301759cbf7281f4fa985800c14386e0db6df0422bbda9a26441020400e5a4b3 +Msg = 6147121ced1b5f1d73306e4a22c31669b76c20764fa4b4467d86126a9ad283565c378ec3aad26e51aff2c4712e1e8a821559483a54a48a48efc5913752474996e6c27b56e15c44736290c6d7bd2e1d7b13a394cf277b195c6c24efa763f5a359236e419e39c2c7cbb392da4378fcb89bdbd46efc6f314bc91c2c948272e479e9 +Sig = 8b5320215e2133754a182f38444a68fe9f3cfdbb7ea9d8e55d006789fb1d75c0fbe5e94201b15c97613a35c3ab54d61dcc62b978a8fab0ae3183fb7463814ec498eb0f4b0f5403044f33368afcf692b1b3ee3ef0ec1492c5c2ec370d75163b777705a0675252908bff8010e819bbde67b86b33a35e1fc43cb8da167691b6d69ecc19ae094a5461cadb0e977ea6b7ef6f3f639e4571a073d6033cf464e5eb17323447ac079e4e69caa7966d3083ecf616394fa25d2e30ef4e5b7e558c8c46802c2e35db02b7884b53b89f041037bf10ff30f291003323112dcc6b8eeebde3bf97e373305eab433061e3a634df865642743908ef822df62cedde8f4af403e7a924e22e667734e91a29d4b6c8f1c12da7023a1b22e6a3dd33e878efbab31220f4f2c923c88f1bb0d7b7497a9c687fbf59f9eb4625e6f92d7285bca5db93ae63213e3fe1333801fc3eca1d3a1ffa75319752a5aaac461d7a799659ad31569230266c1a62e787c25fa635b0d3aa248d047d9cee43fb12342a4c066dc971b893a7dbcf +Result = F + +Digest = SHA256 +Key = 3082018b02820181008c4b17ab9a0da366f67416075ce284ff69a2c1112a8b7d821f66e8bc5386cd1abfe499fb9a09523f1095729f61433cc17fed78789cde81145ba02d22ddb560332ec795ea6a764b9fb380f44ac63d64225772aa4503df2fdd20e7c1d17115d3c56176f49432b2930d417b84f997ed4e50cd557e2786e0275be8025f6f039a7a3b8ed421b4c224527c01c1a1bef6becda193eac7f484ab0a24da31d4bc8bb6f2d4a5f3817a246bd5a9c81dfbf55e8c5b18a8a63bebdcd245726ba5b6ed4f8981ab83933c00714064985d69a17ed017e3cfd7fd5d2c6e932a2e021d226013126e6272231ce8bf626121710cd19d0ff21227e4c4255be507809aeb0aa548f42749bae8e1a3e3b312d08f0226c5245c45b5d96eb8eaecd1b8a1dd3f9f908191325a02cb4ca57b25155447584749e2db23360233d9068195daebb7ca943311b58dedc6c809a5981ff1b66a803a4135fbddf1f4f2478559f9d2ba17d2da77b0f0b6b08662eb50495a16c301759cbf7281f4fa985800c14386e0db6df0422bbda9a26441020400e5a4b3 +Msg = e9ba77e32581fb11b3d44a885ce8184207a00b5835016418cfe6e25921f4e30b26d1cd120691ac55dd711d11bec86a74f83af667972fdcab2e83d327d48055806d0900eb2b173c3f546a1e4f45788c76b7aaa27341c755771eb0567d314f39da46cad7159bfcf1f89f2516e7f9e0c671cc56d72539b218a726d535033e4ada40 +Sig = 17c273523709d84746ae546c8f58086a5ab385aade0707b5b39adbeb507670453a56bd356a9b549fb0112eb3be73466294c0180a9061b04128a001f62025867277e28508fd1c94109061184f6acac575737ec4f93c58ee452089e6714c4dd9f23833278dc66332a914ac8e1b0ec33472061bab9c29cd8d7a0c1778c71fb973c851b6c9bbb7b7dfd24a16f146eef248d1aa81e4f62cafce2ea146314b2a8d5711de6625011ee7ffe7ac49b03a5b7e2d842e9b35969a934c75d16b6cb890f8d4ebeb6f74a08059e70e90ee39816cab34c4702ccd4e14718a8ab5c981f9c8f7cb3e91bf066ba387824c1b27e33b27a06d9eb3ff3fcace0b285f51cf83b117005bcc12da946b5a36e9308ac98e9103becc8ec5dbb048df722e5c8e6cbeaad8f2e27af33648c9ce5d7940013146f5d3cb8c30849ea75b209c36b745dc3179617933e22dc25af5169f784d6128af2c8694b5caf19fbc0585ca1780181150e8f8bbd8d12ea8b0d41f86b1b3b27771b3f36d3cf5ac6a2702b8711d52edc1cc96ce071eab +Result = F + +Digest = SHA384 +Key = 3082018a0282018100c151ff0fed6cd9251edd8df49937283b4f4e67c3bad0826d46b6df2ca7657dda4f099714e70271d626ef41d2dd2a2d6e008b6193e7ff2bffe4207fff2b468b7a985ec684ff7364fbef587a1787c73840b1d0b5781d0428a6af38896de1e9eda5756af5545459e49e6ebf19d2a7be83ed4be2ab8d99e896a2d6338779e56ecb1fbdd1b79f813d0befa58d67aa8c935eec4b8f1c9895d225c8f0fbe7c960d5514bc78ee3c5af0d1bc8a81b1ea9b2caecfe37ac5d3fef9a0327ba7051f7996a901f2cadd1833d059d99e5bc2b512ffd5b090f80f0ec647f60c8756864b7f85d605fb391f614ea5f17a2766508e92092b3d8354572dfb947dc59f79d98ff945e9e3b83b3632464360fafc4cf2528b82836a685a29140abe524eea30b3bdfc1417959b46d933c4ec257d71696d74e89d7e024dfe20cbdebbb263fc586d22ee4b1fa688ee1ac92a9d7084e017ab4b1645158d4785ee8bb2f8eb54b5f70142ef19fe124269f0f83bb88720941d234269c2885a64b9f35118b900086d806b0013398404702030872bf +Msg = f17fc496ee707a1bad8d591e059c1e37bf99e6df03594431116d91ed324983c2eda601cd7d24365d8334e5f9f935fca467dd6b5f59db36f010bac9e278098dcd5ab9b8d7d3c6697b051af4890cae7a6e33f2beb6686f33cfeeaa5a10524c4af9a08190bdd69e3afd99062fd7274ec21f8d9f86ec1a5c63571305e97fa85ce5d1 +Sig = 3ae65cccca0d7e3ffe189b1631aaa79a70bcce76156782790bd3b6c8ef7585b15509ec5400ed771f8b8a41c001257bbed0dea39a3ec68bffc1395849d44e0f4b238c7305fbbb0c41b0ef7c4b86fccd363b057886f504f971d5a072713ddbcfe0cd6953c0b9aa7c01c651a89b5de9d689701fd09fc609f098f0e758932b186c10555cb48ab6c90b3954416cc50232b427595c4acb19ffcd97c806b23c504071fbcfd2a5ce6cbd097d56c5822ca788bbf6fe935c2caf33e8e69b77b35e6c6c077781999e146aefa448c839f9293c6ff5d7e3dd791f34ccf9ee5f358890b59a2c387bae4232267ec2f8d3cfa878f507184e3093b50ad891675cc564442d99edef75bb86fe908f15017da5d263fff9d50a0b1638d5770a3db54c2f957d52b9d6515da3eb893ded69b2d54732a1f433c78d97bfd63fbf9d2b2650c18a95a07f629a7f0505010a43dbdeebf765de8e0c85eedad07672bb6b627eb8488f8d172ca6f95aef2c3250d3d10ff10ec2c347a540827bb57913f710d47e31aeeefa42cbfc6015 +Result = P + +Digest = SHA384 +Key = 3082018a0282018100c151ff0fed6cd9251edd8df49937283b4f4e67c3bad0826d46b6df2ca7657dda4f099714e70271d626ef41d2dd2a2d6e008b6193e7ff2bffe4207fff2b468b7a985ec684ff7364fbef587a1787c73840b1d0b5781d0428a6af38896de1e9eda5756af5545459e49e6ebf19d2a7be83ed4be2ab8d99e896a2d6338779e56ecb1fbdd1b79f813d0befa58d67aa8c935eec4b8f1c9895d225c8f0fbe7c960d5514bc78ee3c5af0d1bc8a81b1ea9b2caecfe37ac5d3fef9a0327ba7051f7996a901f2cadd1833d059d99e5bc2b512ffd5b090f80f0ec647f60c8756864b7f85d605fb391f614ea5f17a2766508e92092b3d8354572dfb947dc59f79d98ff945e9e3b83b3632464360fafc4cf2528b82836a685a29140abe524eea30b3bdfc1417959b46d933c4ec257d71696d74e89d7e024dfe20cbdebbb263fc586d22ee4b1fa688ee1ac92a9d7084e017ab4b1645158d4785ee8bb2f8eb54b5f70142ef19fe124269f0f83bb88720941d234269c2885a64b9f35118b900086d806b0013398404702030872bf +Msg = 92394393057dddd26253cee4bcd5d9510b69da5821e95633e001569ca9d8768f17f23952ee559fb34eeafa912d27fd9d04eb1662c7a9fe831bc98e44c44bd44c5cae66aa4b10f615f39627782b0e9faeefd35d8955f14d1ac38a1a2c60794412c83472a304f70982b91ffda39fd4e80a35ea59d6b4096e7f410ca55c66a8ef68 +Sig = 5bf8ea11a6637f0258d7b66b9a77dfc1b7d278e6e3acffeeb06a044a2aeeb041e83feab36f27a7cc416c49cb1e086dbbafcc1411dd5b563e4731c72466015e781984434604c8f455b96714911330ed9eba40bc0fb2a38adde08db1035926225483ae62c3b90af042cc3f49a18906ee749ae6ec85e86a73e4d8a451ba77b4b11853dccb173ab2049fdcbfbf568445eb3ad539f4d4ac488cd2a13dad7d3e0dff3f92a6879a6ec7905711ab83f5825f7eeaf6a99a9c445b9edecee786a88d829f70366bcd382971649243643da2a87d339b3c6782d655a284a4f4869cbaf296453a2fc8a96dbd29a5d2298561dd6595f2c6a30f0c9e66fc926368759a0792c3110ebc9a9c90bbeb5c6fff1b66ca57ead5e556e98f69138ea792701c572402d0db36a1161c3f129832bb5db1f49b21e9476a02259243986e6437a437acc7eed412cf47ee2034474b5e4391815291abf07a2fb743a628a893e4cf43a3773dc7827aa5c0bbe083e4a59311f5e1d5e5c0e7704335b7d93b76d46acce9496fdb6ffa4fda +Result = F + +Digest = SHA384 +Key = 3082018a0282018100c151ff0fed6cd9251edd8df49937283b4f4e67c3bad0826d46b6df2ca7657dda4f099714e70271d626ef41d2dd2a2d6e008b6193e7ff2bffe4207fff2b468b7a985ec684ff7364fbef587a1787c73840b1d0b5781d0428a6af38896de1e9eda5756af5545459e49e6ebf19d2a7be83ed4be2ab8d99e896a2d6338779e56ecb1fbdd1b79f813d0befa58d67aa8c935eec4b8f1c9895d225c8f0fbe7c960d5514bc78ee3c5af0d1bc8a81b1ea9b2caecfe37ac5d3fef9a0327ba7051f7996a901f2cadd1833d059d99e5bc2b512ffd5b090f80f0ec647f60c8756864b7f85d605fb391f614ea5f17a2766508e92092b3d8354572dfb947dc59f79d98ff945e9e3b83b3632464360fafc4cf2528b82836a685a29140abe524eea30b3bdfc1417959b46d933c4ec257d71696d74e89d7e024dfe20cbdebbb263fc586d22ee4b1fa688ee1ac92a9d7084e017ab4b1645158d4785ee8bb2f8eb54b5f70142ef19fe124269f0f83bb88720941d234269c2885a64b9f35118b900086d806b0013398404702030872bf +Msg = f5304ceed3b78326d2020a99a63f697c40ec35dffe3ce53222bce1078336dc1a82d5648e408bb7790eb0d9a325ece38b98569eab86dd50fd94e8d6be9a39f3729d17e828feac45fff0acfee92f37c1aff001873613b06a00a085b6f5713f42642c3c014575e2d4c1613da2f42de9abf1303319060e7bd8422fdda8356f1071f7 +Sig = 3dbf093e71870bc6cf17f01719dd3bf09b5b128d3396eafa0b806611d5d5dea961c0c1678ac69bbb3139b0aef0ba6be387cee84b27f49422b7c9616b78f58892eb132b40e6f1dae7226306284fed9174df4c36cd0ec83531cc1f854fe3edac489d6c42552f4701bb37b58a5618d8039375a367f414021959abf0fa255793e6589a0234fa4fa8e4515e38afbc0d5077703a3bc138e3e12c0cb9e2d457def3aecdc99ba5687521dd93e2b9dc031efcf2681cfbd730fda3556cc97a018332ed1be584a8c9b230f2766ca575e40d7e20e2eee711cfd9c773fda2ee1accfed4d10d39d9cab7c78ccc82e1cdd692d18a4c960676afbc742b3e38587e20d045e26fc72bcd44113d70d5216e4e15e5c629009cd88cd225f2b304da9cb7a61ab03e6f1252f7b65448b593dbc6a8b813e09ff71d8c90895eb962bdf7a2d0ebd4834708c1f44b3a5405d500ef7bf8d44719da03e76d8bbbb66916797bc244555fa770668fecf7ae30901450cf0b3046d0903e5dbc982e13b64f06c7bdac7f81e6c031d95478 +Result = F + +Digest = SHA384 +Key = 3082018a0282018100c151ff0fed6cd9251edd8df49937283b4f4e67c3bad0826d46b6df2ca7657dda4f099714e70271d626ef41d2dd2a2d6e008b6193e7ff2bffe4207fff2b468b7a985ec684ff7364fbef587a1787c73840b1d0b5781d0428a6af38896de1e9eda5756af5545459e49e6ebf19d2a7be83ed4be2ab8d99e896a2d6338779e56ecb1fbdd1b79f813d0befa58d67aa8c935eec4b8f1c9895d225c8f0fbe7c960d5514bc78ee3c5af0d1bc8a81b1ea9b2caecfe37ac5d3fef9a0327ba7051f7996a901f2cadd1833d059d99e5bc2b512ffd5b090f80f0ec647f60c8756864b7f85d605fb391f614ea5f17a2766508e92092b3d8354572dfb947dc59f79d98ff945e9e3b83b3632464360fafc4cf2528b82836a685a29140abe524eea30b3bdfc1417959b46d933c4ec257d71696d74e89d7e024dfe20cbdebbb263fc586d22ee4b1fa688ee1ac92a9d7084e017ab4b1645158d4785ee8bb2f8eb54b5f70142ef19fe124269f0f83bb88720941d234269c2885a64b9f35118b900086d806b00133984047020374dea3 +Msg = 22c5152bca7a2d7c48eb5bb3a50c937f2423ce8625220d5749349b9fd796939f5fa8a3dd9d440f1a9f4ef9852a8cdf2e5bb865bd8ad4556473bee412980437eae1f925f386093f112e490d3459529bcffb50348c69566e3e79f56716e50c4d1bf1e124d44e71c3473d052028f806ce4a4d12c4598c4f60cba300ac148856df19 +Sig = 58d2bab8f32a675ee83d4f36b0f7499adf4cc6f3335f5159d69302349741a472a39e8171b3ceba18230614003b247e0096dad35dad90226a4822de9d7108ff1f76da6becc3e5b41899ce52b85626a59522902297161d0bba1cb38236b6c80fb01e7e55278ef1523a3c41c232cc3caa3529211d50cece53060a5a36523b3ecaf1949fbe3032dcb17be1003624dbb280a926fe70ca19f6672fe100fa90dcf8b84bea122e0cfa5cedd52571a2fba21bdc0cd2f7d79b1d33e950e4828fa0d2fbc0d708ab428c1b6680e85e0386561b3e30d58bd4e0dce453d3eebe8e4fb47e6a1502db77d1ba0e6ee5b0aa71d6d0d91a38be4e1d84c7c95f68775d8b9c192ff61ce90644dd6a34b926dc7c8da5c3b1bf47236bb1a8cb7a5bbeabf86d649707598cfc9b1d4cdbd123e757da4238160054a3f7b5b4f77c1f0631f07cccab6a055d763b42b715a0872ea188410bde9cc2988f66f691122117d001e8942a20ab833875c2839c4bee53e82de7438a561aabe499453f49a0287d7a1114b8761202c6a4dda3 +Result = F + +Digest = SHA384 +Key = 3082018a0282018100c151ff0fed6cd9251edd8df49937283b4f4e67c3bad0826d46b6df2ca7657dda4f099714e70271d626ef41d2dd2a2d6e008b6193e7ff2bffe4207fff2b468b7a985ec684ff7364fbef587a1787c73840b1d0b5781d0428a6af38896de1e9eda5756af5545459e49e6ebf19d2a7be83ed4be2ab8d99e896a2d6338779e56ecb1fbdd1b79f813d0befa58d67aa8c935eec4b8f1c9895d225c8f0fbe7c960d5514bc78ee3c5af0d1bc8a81b1ea9b2caecfe37ac5d3fef9a0327ba7051f7996a901f2cadd1833d059d99e5bc2b512ffd5b090f80f0ec647f60c8756864b7f85d605fb391f614ea5f17a2766508e92092b3d8354572dfb947dc59f79d98ff945e9e3b83b3632464360fafc4cf2528b82836a685a29140abe524eea30b3bdfc1417959b46d933c4ec257d71696d74e89d7e024dfe20cbdebbb263fc586d22ee4b1fa688ee1ac92a9d7084e017ab4b1645158d4785ee8bb2f8eb54b5f70142ef19fe124269f0f83bb88720941d234269c2885a64b9f35118b900086d806b0013398404702030872bf +Msg = 21af062f995cfe8325632c751f445cad6102d56607d73bc47726b4689fb14a437e0c91a7e65289a48016c591109ccde9fa49c2590659401660d08874e3b3dfb59677311e77bafa51783167d6c8e2b8fb5393e8de8c8290c86a5609bcb056d05072d92fbcd5fd1a31169c586cce7ce38a74c6901e23baf2819da07c699102e7bd +Sig = a3d26043c5f0eb27c6d22818dcbe19f156e246712850ddcdaf7aaccea00d028aeed43d3a39833bca74a7812143a80d33042c19952ccdc86fe4608b2702ebe93e398b4bbdb9a34f8500bc040e26d5b4667cae0e653ee6b76236f367a425567c93b31bc5549c2ae0138daf99fa2bc0d3986cead8ddfa4bc4e751b2244a1f395d449f4087dba2a9d003ed059caa4f4209435bcf266eb8070be17ebc7253d2327ffb6d2fb958c69b020557f1499987f78def362f1c36ab7f436423b21e729333b73ab1a6ae0941056339ea42a4a20c644e19ffe825e7814f7b48438aaf34e803995bf36044ea88615e4e91b7255938234a6304de76bb6b504978f49c27e85d98fabdeec915a408d4ad8bdfa74032fe285acdf5f20fc908a1482cb2861d64f1f960ddf7fab77a327c42ba5fca17269b4a068e44c4b599c51464c26ddeeecdeff81919dae58e6f5b70be99bcb18235edf47a4aedc5ad7fbf365d87cd94416499287e7e522eeaf172ca83120eb9210f7ed88f6249dd1ad1838080af68ca6106c6fe7305 +Result = F + +Digest = SHA384 +Key = 3082018a0282018100c151ff0fed6cd9251edd8df49937283b4f4e67c3bad0826d46b6df2ca7657dda4f099714e70271d626ef41d2dd2a2d6e008b6193e7ff2bffe4207fff2b468b7a985ec684ff7364fbef587a1787c73840b1d0b5781d0428a6af38896de1e9eda5756af5545459e49e6ebf19d2a7be83ed4be2ab8d99e896a2d6338779e56ecb1fbdd1b79f813d0befa58d67aa8c935eec4b8f1c9895d225c8f0fbe7c960d5514bc78ee3c5af0d1bc8a81b1ea9b2caecfe37ac5d3fef9a0327ba7051f7996a901f2cadd1833d059d99e5bc2b512ffd5b090f80f0ec647f60c8756864b7f85d605fb391f614ea5f17a2766508e92092b3d8354572dfb947dc59f79d98ff945e9e3b83b3632464360fafc4cf2528b82836a685a29140abe524eea30b3bdfc1417959b46d933c4ec257d71696d74e89d7e024dfe20cbdebbb263fc586d22ee4b1fa688ee1ac92a9d7084e017ab4b1645158d4785ee8bb2f8eb54b5f70142ef19fe124269f0f83bb88720941d234269c2885a64b9f35118b900086d806b0013398404702030872bf +Msg = f00fbccfb64b9cabe7abe3e25e2fdf96881d0e606cf63ee4e8a8f1a83d050626ce74961f24e61d33360cdaafe7c878a6d1e1ed4341faa35d82c5d54c5f743dfbe370ec3f634e7967bfff5d15e4469e4c956fabc96c3f87971b272adef8bc25fcb96c84d67b69f8700aea36bc5c939ab05e31109bf4ab34b93a36b80511c7064e +Sig = 095f3c7b47d3c07fefa316f5b09de27afdf7337ac4fc4c77a805cd9e104cbe3344dd9d44e14130dcfc6e90b1bfdba92ec2e7e0ced121b08d9c4c7d6b39f707ac693ecec0460c850af7399b813f8d0ec9a0a3c6feea102333464b80cb1aa68d179102e9f600e7d69b68ac3bf31c7d064b8ff4fe4658d31a6910d6f5474f0652a6a76c6d2f75a614d168366d63f45a4ec8f69f754a57de0c8ef0a7b007f8785ac27e38b6f3f23792d20d2cd89082ff664fb2277817c23a0a3b584e6aff2800eb09ec7677d7fad80a4e5d8ca15e296772b5b89e51120b11ce2b983e6e430b764464a11a0ea16319b7b0a28e56eac826bb527a8c05dbe47ae187f22cb4714d4564d783f45fedae28bbdcdea7bd9d88474b72785a0ff9089e1007247144914712cda36d906c11d99373c29411f9264a9becf9c351f4dade4ef1dd3d48ebc6f27ae19d94cb49c3bdf22f685b4b9c3ad7f8c9cc5251499910c4a9e84945a92a1a6e0fc6f0c030c94ce7a4194280054af88c2d6e0b6934a0f25e159fa89a70c077f21a0b +Result = F + +Digest = SHA512 +Key = 3082018b0282018100acc1658b0b236d34992af6dfcd916f29c532a00faba18ed2be4835b1dd03951a5e3a46f2da3bb27a955606bd81d2be2d797ae651af241be9e84a52242e137c0d2fc5be00d692d094fd1606138fc280c113aa7e8250a484aea7c7e6f83bdd76d4966a5d1cf1d3ad1deb899ed53b9a633ed6c4617e38ec226523f6480bae9397b34ca5adc6e0fe854ce2e161866bf2621afff61f32b7dd08ce3ac931346315cfc6b66ba37e292bf0b5d274cdf98f175d247222843ff90e63e3d85427134dcc00fb20e51d84ac1b1132393fdaf7596818b56a9b019d65cf4b4302e9e11057ff90508d0c0c2c7b5f9d57e180e71b2f103a60ef6edbe40b1da27d16018bf6d4a4fabc9c73d5827f0e52c4a16e11d4bbcbc6cea5ff5bb2284ecce4b6080064c2794fa1cf6789565e16842882a7d3caae5051a9a45327b74bf4cd5885736bf5bb9bb045082aed3454fd40fe3c83397bb56115035f358735c290b43d5cb1f67b8853651dbac0cb9a197b46abb1121736a17d917dc2892eb2c5b3c4881ab472db54a5c4ad020400c4d755 +Msg = 76dbb0c0d2069fe7c8287301f57169ec11c79fdad4191c4913f111362d495e8da5a058e5104dca6a32123a1a64f46d35384a2dee60154967cc8fdedc1307d51f14ebad44dd277a9dccad2ee9f35518c8c1e8aa72df777fa959f29decfef6f7ee09e53646013cb868dd21d9d46c3c728df4c8a0cd1aeac7f70141d6cdb6becce3 +Sig = 2e34f1e2f8064b52d770593345194f13460cdaf2bdc502e14e77ecffd093bb57fed459b1f1a26c15d58ef9ab1da879917cfcb2d5793b8c774bc94f0494c66010ace1159c8b546f616125bd79111d81614de5b0f6cc42d95c41bee3789e897adc94aaffbb3bd51e5f022d0385b7a1956cb013353c1167dada2a9c7d0052a0e0cda5eb0bd30f310099c1dfd36c809e0ed49d14ada4d39551a02d6d7e6db2a3a1ab499854c9445d2e9513529b181ebdaa6f97a3e84c246277f4e9ad6428a82c3745c050951ddb16a074f477cb10ee2765ec436c83df7342c6055a4c4206c88d826d04c7d342d5fc46a90c22a5b68ed57de78287a2047149290f16778ebbd253aacca35602f2b2f855a277ea263fc2ab286a42f5531248ae38adb65b8ce4b28185933d8a03f4787ec35a41d9965cf8a3a46bd970831842b94c99dcdc748ede26611f151fe33a64921e197ea329e26ff3cedddc830198a94c1917e8b6200f453c69e04cdaa9e872167aeab367ef9dfe7905581ab0796d611b15b97e4f6b351869ef3c +Result = F + +Digest = SHA512 +Key = 3082018a0282018100acc1658b0b236d34992af6dfcd916f29c532a00faba18ed2be4835b1dd03951a5e3a46f2da3bb27a955606bd81d2be2d797ae651af241be9e84a52242e137c0d2fc5be00d692d094fd1606138fc280c113aa7e8250a484aea7c7e6f83bdd76d4966a5d1cf1d3ad1deb899ed53b9a633ed6c4617e38ec226523f6480bae9397b34ca5adc6e0fe854ce2e161866bf2621afff61f32b7dd08ce3ac931346315cfc6b66ba37e292bf0b5d274cdf98f175d247222843ff90e63e3d85427134dcc00fb20e51d84ac1b1132393fdaf7596818b56a9b019d65cf4b4302e9e11057ff90508d0c0c2c7b5f9d57e180e71b2f103a60ef6edbe40b1da27d16018bf6d4a4fabc9c73d5827f0e52c4a16e11d4bbcbc6cea5ff5bb2284ecce4b6080064c2794fa1cf6789565e16842882a7d3caae5051a9a45327b74bf4cd5885736bf5bb9bb045082aed3454fd40fe3c83397bb56115035f358735c290b43d5cb1f67b8853651dbac0cb9a197b46abb1121736a17d917dc2892eb2c5b3c4881ab472db54a5c4ad02035b1365 +Msg = 3c2cc086a13b1d1b232f0f131032f1ef2dfd616ba03641680dfd012a00c221c38b59f1cf30509c620080643f05e22f4bdea44341a97c4ea6263da90018a8dd43ef84678ca5f1b811e6f9805873682ca8c8ddadbefd227cc0eab9db778eb75db8b2d6a823c9c57a111bc2eac7226bf1f034d1284a63cfd39fa29a1ff72998a80c +Sig = 51fb0f16194df6288533f7b91df149c79e8d474b4d44a51f903902700fa561836c4c6a09c9c5211737217b2de1d6d73106f4709ebc219a4c71d02516a9e42dc4ef9e372db5c3d05e3ba2c3da25e5e8519cbdc3998c0ac5187df777acce31f039480e11d745c6c0b235075cf1805498ea1f15bc911f6d94b3d332084ffda0000ee0d72572a5a24f303857447081129392a1693552c5da4ef6791e2a0f6e68a889e98c1ca7d8dfadc7beb60e8ca4756cb8f56efc62d3accfa16462f597363441dd9ce27328ba9014ff366600ac42140e1b4a4b9a068bbf05fc37acd0eb7c9fc6803a4f87d706d72b570e0fd405f6fd5b7a3926f5e7206d23bf2dd39598de89fa1e66a2fc4533f516d15f0e44bccd0e8d405ee95f1586d17ee25feff7bacf0f3a008e9c0a15129ded95f5a50fa7cf129517604504ba89fed73cbd4e96da21e824b93df4cfd6776961d0d14e5c3a11cf29a836f5c87fcc60e9c837717a632d070737b470f9a374c916166b5df2afd7250cff6f03ddaacf68b067bdf0edd1ddb82d2d +Result = F + +Digest = SHA512 +Key = 3082018b0282018100acc1658b0b236d34992af6dfcd916f29c532a00faba18ed2be4835b1dd03951a5e3a46f2da3bb27a955606bd81d2be2d797ae651af241be9e84a52242e137c0d2fc5be00d692d094fd1606138fc280c113aa7e8250a484aea7c7e6f83bdd76d4966a5d1cf1d3ad1deb899ed53b9a633ed6c4617e38ec226523f6480bae9397b34ca5adc6e0fe854ce2e161866bf2621afff61f32b7dd08ce3ac931346315cfc6b66ba37e292bf0b5d274cdf98f175d247222843ff90e63e3d85427134dcc00fb20e51d84ac1b1132393fdaf7596818b56a9b019d65cf4b4302e9e11057ff90508d0c0c2c7b5f9d57e180e71b2f103a60ef6edbe40b1da27d16018bf6d4a4fabc9c73d5827f0e52c4a16e11d4bbcbc6cea5ff5bb2284ecce4b6080064c2794fa1cf6789565e16842882a7d3caae5051a9a45327b74bf4cd5885736bf5bb9bb045082aed3454fd40fe3c83397bb56115035f358735c290b43d5cb1f67b8853651dbac0cb9a197b46abb1121736a17d917dc2892eb2c5b3c4881ab472db54a5c4ad020400c4d755 +Msg = 9a3482f481638f436c51f7b74d3bd19a91e99b02473c7f028507d421071fe80b1ab6fd87b8e491a9f587e3499a4db2b40f0f48a07e61b7663567636b4ceac0df88aa5dab80f622a4fe7bd605a85ae31ce07d5e43e82a42124ad8fcd377422d36aebbab471fc1c99c51d4d8d3c189ed3cccdae5d2cec0a7708c04a941cf51b679 +Sig = 0f5c8dfe8b67996bb62af65fad25c816979b33419babafcfb3d35c2887a0375ee7461487d4d65b1c03306919abad43793a93643b912cf906c4095356b64f8a3e01dddd2446ff3c07ec62bd6c1b39fca4efd95904ccd0cf87c1bc5f3659825b86daca6b46bfdba8790c4f958ac9647cb1991e2661a01925c79d1f9b23856e8035507b1cd66956a47e97e756443c6ebd46105f8788b0713f6d3f04c3f16849aae50dbe920a35d5e5c1345af610f38ee98c153b02dcc6a1175762af98587c203bb6bdc93300af93a64798d8f621a0805a3212ec9edc90ec4bfbb63d6121ce478a96fbf3e731285daa14a638d5bc9dfd2c365e9d1d70b80d3cc461bad93e7b2ee984228206b52c9bd1ca44561efc558a6133e93d82079b1d5bfc5006742848b95a7e50fc3b14f3590f76f1e86decfb7af82d49853b3b1a8b54d8bfc7bed9f50c78ad01a1b8c7a24ea959efc8c54e0a6cbde288d36673fefe3a3a308cbe895de7e1ce747073eeac6df67fd3e15b38de300d9555450948d2c72c592f1a3182be99d760 +Result = F + +Digest = SHA512 +Key = 3082018b0282018100acc1658b0b236d34992af6dfcd916f29c532a00faba18ed2be4835b1dd03951a5e3a46f2da3bb27a955606bd81d2be2d797ae651af241be9e84a52242e137c0d2fc5be00d692d094fd1606138fc280c113aa7e8250a484aea7c7e6f83bdd76d4966a5d1cf1d3ad1deb899ed53b9a633ed6c4617e38ec226523f6480bae9397b34ca5adc6e0fe854ce2e161866bf2621afff61f32b7dd08ce3ac931346315cfc6b66ba37e292bf0b5d274cdf98f175d247222843ff90e63e3d85427134dcc00fb20e51d84ac1b1132393fdaf7596818b56a9b019d65cf4b4302e9e11057ff90508d0c0c2c7b5f9d57e180e71b2f103a60ef6edbe40b1da27d16018bf6d4a4fabc9c73d5827f0e52c4a16e11d4bbcbc6cea5ff5bb2284ecce4b6080064c2794fa1cf6789565e16842882a7d3caae5051a9a45327b74bf4cd5885736bf5bb9bb045082aed3454fd40fe3c83397bb56115035f358735c290b43d5cb1f67b8853651dbac0cb9a197b46abb1121736a17d917dc2892eb2c5b3c4881ab472db54a5c4ad020400c4d755 +Msg = adf9b0a89d93e05bf18d5610d03d9e70474d4a169bbfe6abde2f2e4fc1587e3ba9da89a5053b4ee4de2b48d5af0ce57d78b13af00e66f571b53193daf058d33f98236ace2ce3f8f968333bd8197e82c82fc265591493b4673c62ad86feff72a4a25dbae9bb96c6e2b72e97dfb49c5e9995063418554d0bd49c49e41b905643b2 +Sig = 3b62f0d4fb1b702eda45e08c47d87b2caba37728133b54bbc654f1e39d4290050392a412226429384178be20a2bb8a2d737f08bffd1396052e4c82d625e3ff46955852b4ac9393ff7e620c8fb7ab5a7173f3cf67978127df7dc4496953488365e500ff13a1ec170ab95d48ae4b7c0392c4822f531a7a534464c91401d40561384c0ef1caab31f449a926e2b39dfc1cf0a048d121080ec31776da00f2c392783f15dcccb369844d7cec262fb6cb755660b0a08f00720b059b0c272262f2a943b6253c353e6069ccbd3c70b0c3a1474cc1d6f878e7a8495b4aad1d963351f9d23b69af996928a86f113ad50b327c26ccd599425c67c4f7bf8e495f7945efd4b11b952c52266ea3ebb46e445d18c596b8d2d6a9e8c70f0e3ceec51784c7477b662b304a5530caf18c3c8a232fd11c63258002714c298c258d724d8e8d4f4117bd74d2d92dc66fc324a257ab2f907aae0c7a8ed9e1aef7e9d0657472349eeb3da29972b11a9005fd93dead2361df7273adc8b968e0d608d782878ed75fd7113b7d67 +Result = F + +Digest = SHA512 +Key = 3082018b0282018100acc1658b0b236d34992af6dfcd916f29c532a00faba18ed2be4835b1dd03951a5e3a46f2da3bb27a955606bd81d2be2d797ae651af241be9e84a52242e137c0d2fc5be00d692d094fd1606138fc280c113aa7e8250a484aea7c7e6f83bdd76d4966a5d1cf1d3ad1deb899ed53b9a633ed6c4617e38ec226523f6480bae9397b34ca5adc6e0fe854ce2e161866bf2621afff61f32b7dd08ce3ac931346315cfc6b66ba37e292bf0b5d274cdf98f175d247222843ff90e63e3d85427134dcc00fb20e51d84ac1b1132393fdaf7596818b56a9b019d65cf4b4302e9e11057ff90508d0c0c2c7b5f9d57e180e71b2f103a60ef6edbe40b1da27d16018bf6d4a4fabc9c73d5827f0e52c4a16e11d4bbcbc6cea5ff5bb2284ecce4b6080064c2794fa1cf6789565e16842882a7d3caae5051a9a45327b74bf4cd5885736bf5bb9bb045082aed3454fd40fe3c83397bb56115035f358735c290b43d5cb1f67b8853651dbac0cb9a197b46abb1121736a17d917dc2892eb2c5b3c4881ab472db54a5c4ad020400c4d755 +Msg = 8b02e84531d5623e528e208c109a68ad04ffbb6ed29d075400b41e3b08a7673dab00d3d589b31344efa70934f0727c9cb7650fe31bc874487466dd81ad4db3a29bcf8b418dcc56d82534d76a66c75b6a0d1fa4d825f126add69076797eb2ff4b0377f7d167a791c09c3b74769a206ddfb037609517a0854bcd38d06ba060b1fe +Sig = 8a5503759f374b78b8bc654ffda8f1add7ea05e24218f9e9c140709a90c5bf8868f081bb2a01a43d724c99e47ebc2634859dd11653b1c5a4d65dd306719b7b4cf2b66f7ba3c93e8731a7adf715c5b0365e0f9453b14d08dcc88052c97d4fdf05f4c92dac2ade4708abe6fe752ed57a5f39281b0c5aa349e3c4ca056f66ccb6fa07154b12657ecd5a94db390e09320dbd2c452e84d389bf2fdf4686b21905497830aa57bc5ced3d23b519f6d6c300ca5d3903ad18ca426b13dfd5bf56e7b47300f88ae7fd0b085807951db84ca9074ec40d285334e85570f0df96afa9d85c55aff0bcc2ba28f2d5fa4860159575ee84194238424213b7673d0f50bf903351e274eac603f2e4218ea8c626fced0aa08097f6630d92139feeabb747ae20e2343c3d8c7647ec48ee2c0d00031b9c882f91efbc7e8487a0010ad3c51f160b902b59baca8f19e8fe90402e1e0131b37a936e101e15f8e4cfedc727cc160c6ae206f3c70ea09f08f00c9bd1837296785536d1bb9785014c59665cd2b930050161d946e6 +Result = F + +Digest = SHA512 +Key = 3082018b0282018100acc1658b0b236d34992af6dfcd916f29c532a00faba18ed2be4835b1dd03951a5e3a46f2da3bb27a955606bd81d2be2d797ae651af241be9e84a52242e137c0d2fc5be00d692d094fd1606138fc280c113aa7e8250a484aea7c7e6f83bdd76d4966a5d1cf1d3ad1deb899ed53b9a633ed6c4617e38ec226523f6480bae9397b34ca5adc6e0fe854ce2e161866bf2621afff61f32b7dd08ce3ac931346315cfc6b66ba37e292bf0b5d274cdf98f175d247222843ff90e63e3d85427134dcc00fb20e51d84ac1b1132393fdaf7596818b56a9b019d65cf4b4302e9e11057ff90508d0c0c2c7b5f9d57e180e71b2f103a60ef6edbe40b1da27d16018bf6d4a4fabc9c73d5827f0e52c4a16e11d4bbcbc6cea5ff5bb2284ecce4b6080064c2794fa1cf6789565e16842882a7d3caae5051a9a45327b74bf4cd5885736bf5bb9bb045082aed3454fd40fe3c83397bb56115035f358735c290b43d5cb1f67b8853651dbac0cb9a197b46abb1121736a17d917dc2892eb2c5b3c4881ab472db54a5c4ad020400c4d755 +Msg = 379b6b72a139346febdb0fdce95394c509a6c5f0876de862e47b922594c00549f76dbb298a5943f05fa44c5bca9a00c05eda934f17b71b98d9dea24d19397949da14d0d2dc7f841b10f3380d4e38a7474a853864c5ead47c00ebf4ed766efe5bcad7d1f5ff719efae710fb7cdef43265b8f1dfb7f7cdba1841eab18d12243a86 +Sig = 88f3e8e1b41671191471092d34520f6a43742702a629f1cc9d2b806c9e6cc1f3ab47fe1b0281570a0825c0de59b24554d4b78b00de2b807a92c51dcf22def3385635b477b9129a34c8543d24173f13167ad7fd7bdc108dd5f8e3f364c3f53ecb26fcc59145ea6ac74aaaa7cf0f1aff4b1462256b87e8d5dc9cf74ad2419b965217cc9ec90337cc01c7d9928ecd310468ca69cce111a16ed5bf7a07d3fe4dbe0b34b59645527547ffb9264ae48eed86d05d1caa8f519d5391bd2ce830d8ad0bda965a735cd4c061797ae661d0bb0431a8189a35aa0b4d2a6a6877b703bea7f09422372913e4ac4e2981e3c917f7bef9f9a1727fab29af9320b9ed44d5229460b06055c2ae911f4eeaca72de9c3b6269ac23943b13376e5009ebf8d349d34a28a07ba2f85466c2d488b6593f7abdf0f221c7aa51e142ba9e6828d23283e39671a41531f01a04fcd3dc70172dcef185e26bcee509a143150ca7f4e2dfdefd2be9dfb98ed0c7b12de9dd8d5653b88758ee1889093dd529657042a86507426caa6488 +Result = P diff --git a/vendor/ring/tests/rsa_primitive_verify_tests.txt b/vendor/ring/tests/rsa_primitive_verify_tests.txt new file mode 100644 index 00000000..3ab76fee --- /dev/null +++ b/vendor/ring/tests/rsa_primitive_verify_tests.txt @@ -0,0 +1,65 @@ +# Big-endian public key parts for signature_rsa_example_public_key.der, +# encoded in hex. + +# Basic test of verification functionality +n = CEA80475324C1DC8347827818DA58BAC069D3419C614A6EA1AC6A3B510DCD72CC516954905E9FEF908D45E13006ADF27D467A7D83C111D1A5DF15EF293771AEFB920032A5BB989F8E4F5E1B05093D3F130F984C07A772A3683F4DC6FB28A96815B32123CCDD13954F19D5B8B24A103E771A34C328755C65ED64E1924FFD04D30B2142CC262F6E0048FEF6DBC652F21479EA1C4B1D66D28F4D46EF7185E390CBFA2E02380582F3188BB94EBBF05D31487A09AFF01FCBB4CD4BFD1F0A833B38C11813C84360BB53C7D4481031C40BAD8713BB6B835CB08098ED15BA31EE4BA728A8C8E10F7294E1B4163B7AEE57277BFD881A6F9D43E02C6925AA3A043FB7FB78D +e = 260445 +Msg = 68656c6c6f2c20776f726c64 +Sig = 048efbc9eb5f7a6f55f6d7b9f7e6c3ce58e2db226562ca905e7f972e8f43b6969b0ad878e0d6b290c5bbf2c05410a1efc9de051d91e5faa537e454306f5f526c828379fe28a17e50c8bd4e7c834479da482305a78e198c988a177b9263cea27a2a99c0da98e03b0cc8d880eccdeba7c16dd07f78d980739753690953d1b63106145a80059ed38f52100a9a8d2c7c5371d91b70ce5b7b36d6b97ebef8798d09c01e5b6cb8a6a7fd1a4100d3527327b7d23f8a26187985d8702f8951346ea4a7253e87f765ef587a728021bff37be55d1a8639809e3453ea5a2da482bfedeae18579b51037cfecff5bece21d8c82ee6fa8eb0f43c43c3a23a983c3a2eea4e7d2dc +Result = Pass + +# Test maximum e (2 ** 33 - 1) with too short n (2040 bits) +n = A614CC5E164699777CD3DDFB8C63CFBE0F1848E03CFF5C03066DACAE5BF77F90621835E0521648F5B4D5B1BBD0F26CB776BF3B8C431FFF73F88BA5D0675859FCEF3C194B71941DBA0EF8E7E7933339D53EAB4F2AAC90C17B09351731A829E620B0D3C8890366AA23AE1596DDB17772B4C23AED387A0A6BCABFE40DC3F8E5671CC519FD2770FB7EB1F89F63F23B1D6ADD8929D8813019A97EBA68D1B610FFEFA94F0369EEB02330836DD32515E33286A5ADD80D9C6D3DACD16BAEFD028545DA521E9FBDC3158D0D28B5B266ACD57F1AEFCA9634D8C4F16AAD1224E15886A994371D0AB99C84CE0CDE34512480E9C86C73F09C30C6AEA16827E745F7D30FBC4F +e = 01FFFFFFFF +Msg = 68656C6C6F2C20776F726C64 +Sig = 9E62FFB36FC346B07DACC8AFFA5013F5FE339035ADAF666223255D51BF81B361DD382EB6D9468BF15ED474A18B477F0A45E49EA71EA120CED66A8039B2829CFAF45ED31252D1093B59C6C8543A282C7922D429A7E187207B7370E080E27181310E581D868BBF3F558ADAC0B27E65BA09E507AD2DB275B61DEE3153E2BBCA1EF9FE6BCD2D41257E9E478603EDCE8A545D9E53E5AEE802E4D330B8140054EF32EC3D6EF2BD131A64F8AA66D9D547E75C3C59B5063A5532A610F1A30E1C610749A9DE318313C1028883F40D6E5F9BD2B8629F522DB1C21C3EFD666F2AE3867700FE8BF37CF678F7FD7388373D17D345E96FED83AEEF48FC6662708C258621336E +Result = Fail + +# Test too large e (2 ** 33 + 1) with shortest allowed n (2048 bits) +n = B86EE74B2A5F42C57156C3FA7CF6D88F481850D19E8A85CD1FCE6383EBDACB0E45302D68196B6A9EEAA584A7E0B13E38BBF43DC6E7AC5791789A43FC0C1CB8ED44F28AD81C4B69106C19D8086414BF50B9A2E52760FDFB40252048C9398C3E9298D5CF18BD7520BB62C88D5FE85B3FD4A2DCD48497CCC5E03B7335A81EDEAB2D90BBBCDBE6124BEE43E7B8594B4AE09BFF5DE65D24E0682850383B804FAC4D735C2967B78BDC7B1CBC970247FBB2648CBFFA10B9AC7530AECED949DF613DA85E505353EFFCA7E142E1CCB533BFA99D743071D41037A17530F2401BDD6B6998811DC5ABA431F53086F9FBB568E144AE590224B908A58FC401E283B61F64657413 +e = 0200000001 +Msg = 68656C6C6F2C20776F726C64 +Sig = A7F5989E8694C6444CD2D97D22D2F2CDD7D088C36847A25E8E861CBAECEA48F1828586FC5B40719F2606FC82F9B826C2B55070753E310EBC5A4A9E6BBF82C41F3A0C30E2C22B95ED3DE3866E332048F75F562492946988F5AC7A687793C97D3DBC3E6E3D96C8217F1F873EAF4736594E1B91D7BCC8B037A19850EA1F178EF59F4855C353D26432E1E573BC3630F8D1C9C280ED5F52AE996D2F1F98D0E53C53FA58ECA5F74D97D8DED59729F03241F5E7D87D7B72D549C559B6225BF9AF626179491A2146A3ACF8A18C82BB0696F899359D8B7DBB6FD350D5FAA3C4421A1C34F34895F30E70CFE0A98918C67F97DABE0D24E479A44B787391A22A5A1803A16708 +Result = Fail + +# Test maximum e (2 ** 33 - 1) with shortest allowed n (2048 bits) +n = B4224346F3222B5848AF0071D9A2EDA18FE468FD76BD9C4F5A298A9A089929527EFD835CC28553F990D12FDB6D52F37716FC8E1CEBDBACC8C791C84688D5568DF256BF6B4C10FF039EC16A1E842EE605D3F2B455B3579E9635084D8587BB6871A64B1447586F1D7D015F26FC70792591B127371FDF3812C1D4ABD17273EC9979829FC6F1536C3E3BE1B8830BE03E3BE079BF557A791DA66CD6F635B90FC0D0CFD449814948AF1D9FAA7BA375640252CDB0B19BBB610008409EEE895DCE70D6A288030A1F38DFC37A2738409DEC62A4813C6B78B7AA148AFF2796F5D30A631E062AB0AD884834AEE46F041AA563C048074616ACB71A35092EC29B607973ADEABD +e = 01FFFFFFFF +Msg = 68656C6C6F2C20776F726C64 +Sig = 736495E32CAB554FAC3E81605BDBCCF2206D49CBC682A6DFE20A298354109F0FD5644CA06F281240AC0AA6F33AF35855CF6D24D870E795AFCFAF013C2E46B54EE09AD13361A2BB275DC3F0AB14AF075EABA9B3B094FA6970926E41B9FD0951B8BFBA67F3827CE2F1D5D49EB3BAB34211A759655A33689901A77EC5384D9A26979F2AF295EC2E2A5EE92730EA4C0922075F00E43E900FF6B8EF702659ED273B1CB9B95E811A4708D6A0C175F344DE8B114B7E15C41C1BAB9A7C19869FD5F615C6E5455C920A4C8F41D440CAEBC8713E2CF9B6153E2E56659BBE9CC056138F942AD988FBC39F153721FDD67BEC29A990492B1A1B9AB84756B423692FA3C98EB517 +Result = Pass + +# Repeat previous test (max e, min-sized n) with swapped n and e +n = 01FFFFFFFF +e = B4224346F3222B5848AF0071D9A2EDA18FE468FD76BD9C4F5A298A9A089929527EFD835CC28553F990D12FDB6D52F37716FC8E1CEBDBACC8C791C84688D5568DF256BF6B4C10FF039EC16A1E842EE605D3F2B455B3579E9635084D8587BB6871A64B1447586F1D7D015F26FC70792591B127371FDF3812C1D4ABD17273EC9979829FC6F1536C3E3BE1B8830BE03E3BE079BF557A791DA66CD6F635B90FC0D0CFD449814948AF1D9FAA7BA375640252CDB0B19BBB610008409EEE895DCE70D6A288030A1F38DFC37A2738409DEC62A4813C6B78B7AA148AFF2796F5D30A631E062AB0AD884834AEE46F041AA563C048074616ACB71A35092EC29B607973ADEABD +Msg = 68656C6C6F2C20776F726C64 +Sig = 736495E32CAB554FAC3E81605BDBCCF2206D49CBC682A6DFE20A298354109F0FD5644CA06F281240AC0AA6F33AF35855CF6D24D870E795AFCFAF013C2E46B54EE09AD13361A2BB275DC3F0AB14AF075EABA9B3B094FA6970926E41B9FD0951B8BFBA67F3827CE2F1D5D49EB3BAB34211A759655A33689901A77EC5384D9A26979F2AF295EC2E2A5EE92730EA4C0922075F00E43E900FF6B8EF702659ED273B1CB9B95E811A4708D6A0C175F344DE8B114B7E15C41C1BAB9A7C19869FD5F615C6E5455C920A4C8F41D440CAEBC8713E2CF9B6153E2E56659BBE9CC056138F942AD988FBC39F153721FDD67BEC29A990492B1A1B9AB84756B423692FA3C98EB517 +Result = Fail + +# Repeat basic test with left zero-padded n +n = 00CEA80475324C1DC8347827818DA58BAC069D3419C614A6EA1AC6A3B510DCD72CC516954905E9FEF908D45E13006ADF27D467A7D83C111D1A5DF15EF293771AEFB920032A5BB989F8E4F5E1B05093D3F130F984C07A772A3683F4DC6FB28A96815B32123CCDD13954F19D5B8B24A103E771A34C328755C65ED64E1924FFD04D30B2142CC262F6E0048FEF6DBC652F21479EA1C4B1D66D28F4D46EF7185E390CBFA2E02380582F3188BB94EBBF05D31487A09AFF01FCBB4CD4BFD1F0A833B38C11813C84360BB53C7D4481031C40BAD8713BB6B835CB08098ED15BA31EE4BA728A8C8E10F7294E1B4163B7AEE57277BFD881A6F9D43E02C6925AA3A043FB7FB78D +e = 260445 +Msg = 68656c6c6f2c20776f726c64 +Sig = 048efbc9eb5f7a6f55f6d7b9f7e6c3ce58e2db226562ca905e7f972e8f43b6969b0ad878e0d6b290c5bbf2c05410a1efc9de051d91e5faa537e454306f5f526c828379fe28a17e50c8bd4e7c834479da482305a78e198c988a177b9263cea27a2a99c0da98e03b0cc8d880eccdeba7c16dd07f78d980739753690953d1b63106145a80059ed38f52100a9a8d2c7c5371d91b70ce5b7b36d6b97ebef8798d09c01e5b6cb8a6a7fd1a4100d3527327b7d23f8a26187985d8702f8951346ea4a7253e87f765ef587a728021bff37be55d1a8639809e3453ea5a2da482bfedeae18579b51037cfecff5bece21d8c82ee6fa8eb0f43c43c3a23a983c3a2eea4e7d2dc +Result = Fail + +# Repeat basic test with left zero-padded e +n = CEA80475324C1DC8347827818DA58BAC069D3419C614A6EA1AC6A3B510DCD72CC516954905E9FEF908D45E13006ADF27D467A7D83C111D1A5DF15EF293771AEFB920032A5BB989F8E4F5E1B05093D3F130F984C07A772A3683F4DC6FB28A96815B32123CCDD13954F19D5B8B24A103E771A34C328755C65ED64E1924FFD04D30B2142CC262F6E0048FEF6DBC652F21479EA1C4B1D66D28F4D46EF7185E390CBFA2E02380582F3188BB94EBBF05D31487A09AFF01FCBB4CD4BFD1F0A833B38C11813C84360BB53C7D4481031C40BAD8713BB6B835CB08098ED15BA31EE4BA728A8C8E10F7294E1B4163B7AEE57277BFD881A6F9D43E02C6925AA3A043FB7FB78D +e = 00260445 +Msg = 68656c6c6f2c20776f726c64 +Sig = 048efbc9eb5f7a6f55f6d7b9f7e6c3ce58e2db226562ca905e7f972e8f43b6969b0ad878e0d6b290c5bbf2c05410a1efc9de051d91e5faa537e454306f5f526c828379fe28a17e50c8bd4e7c834479da482305a78e198c988a177b9263cea27a2a99c0da98e03b0cc8d880eccdeba7c16dd07f78d980739753690953d1b63106145a80059ed38f52100a9a8d2c7c5371d91b70ce5b7b36d6b97ebef8798d09c01e5b6cb8a6a7fd1a4100d3527327b7d23f8a26187985d8702f8951346ea4a7253e87f765ef587a728021bff37be55d1a8639809e3453ea5a2da482bfedeae18579b51037cfecff5bece21d8c82ee6fa8eb0f43c43c3a23a983c3a2eea4e7d2dc +Result = Fail + +# Repeat basic test with right zero-padded n +n = CEA80475324C1DC8347827818DA58BAC069D3419C614A6EA1AC6A3B510DCD72CC516954905E9FEF908D45E13006ADF27D467A7D83C111D1A5DF15EF293771AEFB920032A5BB989F8E4F5E1B05093D3F130F984C07A772A3683F4DC6FB28A96815B32123CCDD13954F19D5B8B24A103E771A34C328755C65ED64E1924FFD04D30B2142CC262F6E0048FEF6DBC652F21479EA1C4B1D66D28F4D46EF7185E390CBFA2E02380582F3188BB94EBBF05D31487A09AFF01FCBB4CD4BFD1F0A833B38C11813C84360BB53C7D4481031C40BAD8713BB6B835CB08098ED15BA31EE4BA728A8C8E10F7294E1B4163B7AEE57277BFD881A6F9D43E02C6925AA3A043FB7FB78D00 +e = 260445 +Msg = 68656c6c6f2c20776f726c64 +Sig = 048efbc9eb5f7a6f55f6d7b9f7e6c3ce58e2db226562ca905e7f972e8f43b6969b0ad878e0d6b290c5bbf2c05410a1efc9de051d91e5faa537e454306f5f526c828379fe28a17e50c8bd4e7c834479da482305a78e198c988a177b9263cea27a2a99c0da98e03b0cc8d880eccdeba7c16dd07f78d980739753690953d1b63106145a80059ed38f52100a9a8d2c7c5371d91b70ce5b7b36d6b97ebef8798d09c01e5b6cb8a6a7fd1a4100d3527327b7d23f8a26187985d8702f8951346ea4a7253e87f765ef587a728021bff37be55d1a8639809e3453ea5a2da482bfedeae18579b51037cfecff5bece21d8c82ee6fa8eb0f43c43c3a23a983c3a2eea4e7d2dc +Result = Fail + +# Repeat basic test with right zero-padded e +n = CEA80475324C1DC8347827818DA58BAC069D3419C614A6EA1AC6A3B510DCD72CC516954905E9FEF908D45E13006ADF27D467A7D83C111D1A5DF15EF293771AEFB920032A5BB989F8E4F5E1B05093D3F130F984C07A772A3683F4DC6FB28A96815B32123CCDD13954F19D5B8B24A103E771A34C328755C65ED64E1924FFD04D30B2142CC262F6E0048FEF6DBC652F21479EA1C4B1D66D28F4D46EF7185E390CBFA2E02380582F3188BB94EBBF05D31487A09AFF01FCBB4CD4BFD1F0A833B38C11813C84360BB53C7D4481031C40BAD8713BB6B835CB08098ED15BA31EE4BA728A8C8E10F7294E1B4163B7AEE57277BFD881A6F9D43E02C6925AA3A043FB7FB78D +e = 26044500 +Msg = 68656c6c6f2c20776f726c64 +Sig = 048efbc9eb5f7a6f55f6d7b9f7e6c3ce58e2db226562ca905e7f972e8f43b6969b0ad878e0d6b290c5bbf2c05410a1efc9de051d91e5faa537e454306f5f526c828379fe28a17e50c8bd4e7c834479da482305a78e198c988a177b9263cea27a2a99c0da98e03b0cc8d880eccdeba7c16dd07f78d980739753690953d1b63106145a80059ed38f52100a9a8d2c7c5371d91b70ce5b7b36d6b97ebef8798d09c01e5b6cb8a6a7fd1a4100d3527327b7d23f8a26187985d8702f8951346ea4a7253e87f765ef587a728021bff37be55d1a8639809e3453ea5a2da482bfedeae18579b51037cfecff5bece21d8c82ee6fa8eb0f43c43c3a23a983c3a2eea4e7d2dc +Result = Fail diff --git a/vendor/ring/tests/rsa_pss_sign_tests.txt b/vendor/ring/tests/rsa_pss_sign_tests.txt new file mode 100644 index 00000000..670e8845 --- /dev/null +++ b/vendor/ring/tests/rsa_pss_sign_tests.txt @@ -0,0 +1,151 @@ +# RSA PSS Test Vectors for FIPS 186-4 from SigGenPSS_186-3.txt in +# http://csrc.nist.gov/groups/STM/cavp/documents/dss/186-3rsatestvectors.zip +# accessible from +# http://csrc.nist.gov/groups/STM/cavp/digital-signatures.html#test-vectors +# with SHA-384 digest e918e2fda7c3159676ed33547b08e1dd4ec2fcbd0799d51510ce69b5d7302132b6fdf793709a3509773313b5d507081b +# filtered and reformatted using convert_nist_rsa_test_vectors.py. +# +# Digest = SHAAlg. +# Key is an ASN.1 (DER) RSAPrivateKey. +# Sig = S. + +Digest = SHA256 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = c16499110ed577202aed2d3e4d51ded6c66373faef6533a860e1934c63484f87a8d9b92f3ac45197b2909710abba1daf759fe0510e9bd8dd4d73cec961f06ee07acd9d42c6d40dac9f430ef90374a7e944bde5220096737454f96b614d0f6cdd9f08ed529a4ad0e759cf3a023dc8a30b9a872974af9b2af6dc3d111d0feb7006 +Salt = 3e07ade72a3f52530f53135a5d7d93217435ba001ea55a8f5d5d1304684874bc +Sig = 4335707da735cfd10411c9c048ca9b60bb46e2fe361e51fbe336f9508dc945afe075503d24f836610f2178996b52c411693052d5d7aed97654a40074ed20ed6689c0501b7fbac21dc46b665ac079760086414406cd66f8537d1ebf0dce4cf0c98d4c30c71da359e9cd401ff49718fdd4d0f99efe70ad8dd8ba1304cefb88f24b0eedf70116da15932c76f0069551a245b5fc3b91ec101f1d63b9853b598c6fa1c1acdbacf9626356c760119be0955644301896d9d0d3ea5e6443cb72ca29f4d45246d16d74d00568c219182feb191179e4593dc152c608fd80536329a533b3a631566814cd654f587c2d8ce696085e6ed1b0b0278e60a049ec7a399f94fccae6462371a69695ef525e00936fa7d9781f9ee289d4105ee827a27996583033cedb2f297e7b4926d906ce0d09d84128406ab33d7da0f8a1d4d2f666568686c394d139b0e5e99337758de85910a5fa25ca2aa6d8fb1c777244e7d98de4c79bbd426a5e6f657e37477e01247432f83797fbf31b50d02b83f69ded26d4945b2bc3f86e +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = 60402ded89d0979afb49f8508eb978a841abc2aec59cacef40b31ad34bac1f2d3c166611abbed1e62f6b5fbb69cb53df44ae93ab7a724ea35bbee1beca74fc0188e00052b536ac8c933bf9cf8e42421a795aa81b1bc6b545eaad4024161390edc908c45aae1f71b4b0228e3104048d816917cba4ae7f2afe75e7fcad3873241a +Salt = 3e07ade72a3f52530f53135a5d7d93217435ba001ea55a8f5d5d1304684874bc +Sig = 5f183009708b379637dac2b14293709aa6d7e86c267a0b690a3c275031139891267c64e5edecdff14c2cc2f2d985b62f900aee6e04ca51a70a5f946463691cf16c2d45547c5374f15bdb8881641d3040ef57807532cf5b2ced07623d0f638b39ebc2f2ce283eea2247e1df3af5430554d1d4b88b7b21622993419971b7d0d5449122a10fc31b2ddcc53ff751ff4bf4d336fac667b646780272db89a3ea4226afa20877bfb86ba3ff4204e5cd56e13a1dc9d53f5c9465b97a182b2bf671512ef89e6c3969f97307a3e4beba39a78e0ad1bb9799cda92976ca39d99db4ac149c84bb9bc8997e8d5e056d67ca23fe4be28e66c4bc00a25d65bb9d7d623fea2d3b9cf859dfd9efa9e52268bfa297afb1cc2883db0c9c42fc04180e2ec6f49657c7008e4025061f896886613895a35bc2d3655a8f50a9fca2ac648f352eb06bfba2fc340aaeead4a8457c65e2e8fdba568c60a6d8d381f5d9caa30127771f4a94fdb8cde7be4fa7b4f89fe379dd3e1ca66ae1fdd63bebdc0015448e61ef1666594b8f +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = 2f03701c2fe07d47f5fa2c83a8ea824f1d429ce4fa1df2671bfadd6234ca5775b8470249fa886dc693d2928603b2a3899b48062a9ae69e5196da4ceb1d87b5979dbb46a2813c76369da44bcecc6f20edd753a51099d027e1610712ad98cfb418a40643100b2522ffdc1760454b4c82e59b09827e4102177e462a3792edcada61 +Salt = 3e07ade72a3f52530f53135a5d7d93217435ba001ea55a8f5d5d1304684874bc +Sig = 8291bc1be9c981663156ec80c1ed1675763de06199b9f2760caaed5207fb4b3d6037bd08462b100bb1767e3340105b1a68728bc45c7d6fd078dc1b5e7cbfa193006d52f67e77fcf809cf26172a46db384eaf552a5fb8e33840fa3ef3d6b20c7b46c32ef019e8d15dd38eab66f6e40399ad0bbb07f94b8c555196901c27e2d4573958f53060d800cfff40c602308044b75d6451801c688d276525c3fee17a6792882a074c8a41420109e2511418c9eeaf3ab47350dd8c2d3e066abeb7913e08f0a40abe71d397c3dddafc41fbd04cc8fa3b0641bf53a90031b61a2a9b63d8ed8aacc9b301593c9f425105498cc4f84627f4950758e01a291b9b1a33ba918aacc172b68c9fb2c767c65910816921281aa8e5482512cee686e51cabe88e18f923fde170a506ba3c340fd1d68261986347d30d124931db2ce17602150000b794c050e137f4ebd45cc41f70ef3df1656218ff76f2e75ad96e4167eed524fa2ed9fd1a0cf76926f382ffb16124dfc87bb1a4110928d5b1cd3b16204ceeeccb7db88fce +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = af90f131f9fc13db0bcebfae4a2e90ad39dc533f34165e3262bc23ffe5b20450538669bf6a5210e1ffe4a583381d9333fb971903a68aa08901f14c2a71e8d1996e59889a36d7c20cc3ca5c26fbcd930128541a56a7926a8ae49a5ae786c4ef2de6527549c653ce6440c80b1ffc06391da65b7dc39ff4643bf3fe74bf8c0c0714 +Salt = 3e07ade72a3f52530f53135a5d7d93217435ba001ea55a8f5d5d1304684874bc +Sig = 8c45e38eafaaf10a710e131bec63e51e67741774a9ddbfccdd131a123ae2a03067e7a6a92e653a25178bf527b93d6aa83fa366a2bd44896baa8b7f3f54830e4d9f5632c2d1bcae2aaae8c55782132aa7279cf1cbb6b7a81e4965ff84635c296c5ac206a04680e91e7b1ee7e5793701b1feb832250010d4ad4017c1608de8f405014ca73c39adae7c4adcbaee35fbbc71151cf955acecd8083677fe49ececcb62353c0a89c9dcb9c507979b56bfe060fec45567517c05f29e262df50767df7547630d8a7b32483b923bb1e3d510422dd4cc2d61a647e4f9636aa7587d4f8ed84b6174c1fdca9a217d9b907972a66c1f5a2ec2dadb60b93b515bf74072d315d17d54d57d721c8f4ce1a43eedf2025e51a48e9ea28160cf300d7a26010383c3280a186c44a53b7188e6caa364bf4dbe0baf4dcbe37d70e3a475cfdae339386558ccbc119873b1863975e2300ede1e420031b4cdac567e7b9c5d575c8bae27eebb37097050acdc87008ca2380f5631d190029a1d712acda147c5c4378cb6eac81731 +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = e57debad3563fa81f4b9819405e41f98a54096d44f6ed119dceb25f8efe7d7329054de70173deb344c59a710cce03b16af9d168f6745eaf0eb07f80916648e804941ce7e583ab0a8a43a4b51844850edeaa4d7c943135efa9e770e9411a2411c586c423fc00353c34483f5bff5c763079f7e60eba98132213d64efffa94af7ed +Salt = 3e07ade72a3f52530f53135a5d7d93217435ba001ea55a8f5d5d1304684874bc +Sig = 851dcd2d4e1d34dae0fd585af126be448d611acaeacfa34f1492aa7d1caff616707dc31b05186cdbef769479243afb341577803b579e105070ad5406a6744f56e55f569370b9fcf6ab10e1aa0383f9182d451afb41358a2f8c29d1a571e11c404e6870cbb04f6ef30414d9b6d7f1416bacab0184eebd8deae72f2a48bea3a7844a8bf472a5f8d349d5973ffde3b1c40623dbaabd6f681485a9691c9be12618bba393b396f41cfeb89e18e378c51f147c7b0ededbc403bb1306454848c9bdb89f947843d0aeaadcdf09bad99efb76e742322521929f034dadffa483958df58a71af7da45461fc408c7c45973fc60c37a6358743315169b3100d4cd54f810d6e0369b9847ee38795cfe58443019523c3c9003edec4cdaa70de31d00958653058d8509907a5149a9f81be0ed028724f7232b57f93dc62ccf093a2635ee1e5bfe6ca9ea017ffab79182eefff542d278c471e1a2b34231700423bd0e757f6a572a14a99c90329dd0701f347d8a679cff25fd6b0d380ee5dc330d6ff1b4b1a347fc98d +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = 28db8ffa55e115df7f188d627cd291fdecfbeea1109e1155e0aabc2157f7fe2a1284611e190365d2fd972d2a23dc793a5f28d4aac4100f5fbb2eed57532220d5d8d774bfa7084b44400249c19dab50e6c3c3af15966a960af1e2cec1f697a694a35c31a5a6f8ae7b73e148f09347004a3f54e7a82db390a0aa4fc526e95d79af +Salt = 3e07ade72a3f52530f53135a5d7d93217435ba001ea55a8f5d5d1304684874bc +Sig = 72c5555111eaef954236163753674a6ff81f182cbb379bfc6b548a52f9a5f260a0ed58f562a6086cf5ed00ed30adb023e90076a8adfa17cfd7d74f1e7b1978b210da847eda6b49891e6bd3fc6cd4c87b9326e8481a16c66e40021e5f878c303d3d8532bd7d966513717d5499865b2d03e378e76f7940f0448ab4d112e3c52cb332d340af122de3ee849f2e2544a40691ddf701d902bfe629766b36d82449286fd03f75bb2632dd61d6b3c6ce1c9ea8e5aff92ad2ca95a950eecd998e495e90e1f0966f922b7fb3f03380385f3b143ac1960c3bb688adbfd91d8fe1a1c32160243d3bd231a31c95dd78b6648c1175fa9c3c1244b1fa34d7c6f3255853ebacf5b3ec19b864e0a4eaee63fd719c21a72fc25b30b03207cf2aa45fd15d7102e5bae90882d00a812959593031ea3a436898582cae5eded5c7ce43de3dcac30b8690631e8db9f7a0a7f3f67b7524db275aafe02448727ff629d13afa94801d37526fbd9176fc4c216211037f8ec26b4f2672975887d70bcdbeef1e6ae99edbfb6c9a9c +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = 4839d71aabdad8b15d9f37c3d37a346758d8941b01c83909e460f589855ca0e691096865cf62698353787e7ff517561801a6ca98304f6d11d76065e75ff17a8ef5c86d9582798be4ded181424175721afac7477e6309476c14c5e750576ce3cbdc3d8db3ae68655b6674eb149fdeb1f3a903b4d5823feca1015722cd55140224 +Salt = 3e07ade72a3f52530f53135a5d7d93217435ba001ea55a8f5d5d1304684874bc +Sig = 796ac3f6adf4eabcb7a528ca63a6168ca6d31d5e357ad7a3fd180334a90d22bab20b762d767a6e3077c2cc8732784e81330041dc79068d50753bd4109c9c6f9ba03b5ac44efbcc23ecda27948511645fa17897dad7c122957ae56bf4ffe3d7bef85010b33d3b91785b0427417d94b11f73fda90e6a8748e6acc1d2d582e8836bc7dbe196876a9545b2a3207c1d4ec28acf8fe6f24c240b56ab3b4e4313a3d951aa1a558230e5f1eaf38cd7fd9b393d58d359f58f4ae51dd3971b418c5b81d0707cd9e2c33a148e492e74bfdd565eba8b1f3935e37a9d1a8764cd30497066e3c4622611fc14c45bf46fc85b3ed3f6c9d4d65e9925fe4b85ed30ec35ffc69c5fdc2bfa35d1bbdcb20e399cf934fe938f4c5798cf091d51100b4db4be42e81901e5dc79a98074119b7980b02821f4c3ff8ea07a2fc09a701978364bbd00ce4c5e2e45629526e34a3652719d27a47371480daf52fa49844f6495f35e6f5e3116c00b27042b3cead283bfc577905f8be87f0d5daa13d1ca74203a9e0d9199e885f4fb +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = c0b8b24f4b8e0bf29168ba73aa912c97121f7140f3259c40a72a6d6f78da2dfcabfcda00bea48459edaaf7b5fb5a9aed2e6d97959c393cd1a524a269c15e8c207cd09142be4f7e7d5016f6f19c735b8ab4c0f28e96954172af3cbcf29d65a161391b213dd5f7c006c294fe5016423718abffc8546ba373cdcb5a053196573564 +Salt = 3e07ade72a3f52530f53135a5d7d93217435ba001ea55a8f5d5d1304684874bc +Sig = 8503b85dbd9eba8d6fc57c6ae2103a78df1fff3600585e3e18f6ba6436a3acaf8e49fd12dcbb37c25b4b765037f545c3da8c39ef6842bc9ec264af6f519272f3d8698ef2ceac55393baa9846a7961b738e41f6360053d866763c824bc5873da14a28eb47d68d67f0cad7880853aeb561045f757a31d9f5c756f54d793637d721c88fb1f60126d3d16478f1fc15e0c4edbb531c2ca2e2fd9e8dabe1df2c09fd55bbc724ebeba290a7646249cd779fa1a923909b29345e54a2e25dd935bf0612a5580018b233d765a6fae3b46ef51bd8325912f439a7dc40148fdb754e2d866f357b8f0ebff6f18a6504ba31d10fe45226c88c9207b9be3c63261d75270466b43c271f75b1ab3c1d6b5a00dda8457b4d5c2195f320b0bd545fdd0679c84483c14a46b4d43c8452879725aa91d01fcc2c3867391c72200ca5d628ed9b566389f02fe74ba2a428a7ba31c00ef6b8d38c6b82b7379d2feb11031848fec0fac5b6091eb7607138bf0b96c3d2c174b5713d0dc8470b532eee6ea0ca1e8ffa3b15cbe0bb +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = 4935eaccd2af7c5b99405471bed9b21da8965004f5e6f2a6b7ed3ee2dd26cebcef4d845fff7c1d5edc94093f88de7a3aecf2bc3ecbd8c435f56e0b89bd099de7ac5f6c4377a5eb1c2ff4d801b8f159547cad4b4e60cad743f8e04627f61e1652e9354d8024710d1cfb2969be365a77f2bf8fa63b9e045257270a96c572ad6285 +Salt = 3e07ade72a3f52530f53135a5d7d93217435ba001ea55a8f5d5d1304684874bc +Sig = 66d1cea94b9603efad92b6ca8a1fbe0c6c4b9dc60ec0ab2c33bb62d27a100e839378a39208715de2102eae384ca407e92787ce1118f91a0ca2640a5c93fdb78635bc91082c99968ceab289890b3ec210d6cc6f1cf7e0fbe2dae88155e88f2fb7b325ab5e529e4b63493e551c53ae38c3fbfae49810050a81cdcea627da21b63224612d4361b9df19761d6ead44488dcabb50127149f077c2963afc049ac8837ff2c29e6a35593e22531ecc2e9ef8bcbaae4349bd7227ff3e13b31bb929bbd49e50059f28fd9ffe8c296a056c2760e5f6d8dab43e9bd557793f0759ad8e08b5c3773a305a0d316ff9bd07b43106335942055adc461a4346f05ab455780f32027de8b8bb6d4845bb24d0c5a21c293d2b0740e8d06ef5fb9dbdacb4fa1c6225fd4e19dae69a8e2cbfdff1ef8b7f21804ead0a45274c735fccbfa1d60bf497a3aa931bebac2e0c8beda9af596dff0cbe11e8d4602d36b2f6c6f5bb80f12f4b9daf2c0748f591098ea63d3193f50a1f4737efacb62ea85fb6fb212b3ec8effe788e55 +Result = Pass + +Digest = SHA256 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = 3b8a68da11b61b5fee1c2ca00a6aa35bbfdbdd42855b284320ec8d0c1848edcf6ac850427d8479eb57bcbe9a11771637886974bd561a5387014592cb717e8364a8183fd4ad463c89c980215ff629d867956ee5e75f71f7a19ea7bd589d7efb915d44dd9789448bc1ac32fdf7a2c911734db2dbc589a83c1a61dab6bd83907ede +Salt = 3e07ade72a3f52530f53135a5d7d93217435ba001ea55a8f5d5d1304684874bc +Sig = 790058355d7ab9eccb46ea12368f3be9cf6b895e1734eb20a13c749557b9fecf92b316870f0f765864b607439ee5f7e510e2c83b2756a0d9877b48e0cf257b13c997b9dc70421d2d87c9b9e5625c36a17e21e20ed389657a3e544c677464eefff08a9ee4adb091a9fbce7626cdc127b5cf817c2a5f069e32c720bc2041cd21a6bae816dbbbe28552d022b7b608fa99da4d217dae8a69f54004fa3c004d50540957648296e14cca729f791b38e3645204c2c6d4cb678b0db63a181b40cd9851be84629a068415d54cab5cb5244c8dac8dc9799a0df1b58cebfbcd8377a391778869dd275e0dc8305eb0351d81e3afa46719355eee4f90894f7fed662dd3b03270660adff637b91e18330a4f3a62c914f0d32b4eb6a30b79371ab55190578a1e7d43294bb0a721def7dae3e021981707930bd9b5cb58675851c83acf330c6ba3aecb3a890ad3c151a1e2b583a7dccbf204850daa9f4679e759ec056abef7ba4d6e0bdfa57a5c5afb6368b048a2b74e3530bfa8991c55de7cc8bbfa990d118ada80 +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = 9221f0fe9115843554d5685d9fe69dc49e95ceb5793986e428b8a10b894c01d6af8782fd7d952faf74c2b637ca3b19dabc19a7fe259b2b924eb363a908c5b368f8ab1b2333fc67c30b8ea56b2839dc5bdadefb14ada810bc3e92bac54e2ae1ca1594a4b9d8d19337be421f40e0674e0e9fedb43d3ae89e2ca05d90a68203f2c2 +Salt = 61a762f8968d5f367e2dbcacb4021653dc75437d9000e3169d943729703837a5cbf4de62bdedc95fd0d1004e84751452 +Sig = 9687115be478e4b642cd369392b9dd0f3576e704af7218b1f94d7f8fe7f07073e3e8e1186fa768977d6b514e513459f2373df6ec52e3de9bd83fcc5cc3e6b97f8b3fb534163c64f5267620700e9d8c52b3df61a7c3748ef159d6b390895afa3af59109a5478d016d96c49f68dfc735ba2aafd5012c13515ed6644f0d4109c45556e14a3821e1aa24beb8a81a48da27f131de84f7ba51581d81b8ff31ba92b8a1fde867f07e32e6c2709253448174dd31324dbc32b05f07587f76a9997decb80f38d8c13d0f6eb3c10e3d96a2293f7464f1e04602ef6e84c2d0245d7db256a67d132a47cae9abe06b61a8968f50a1749995dc15ef0dcb1d5f5959e4d454c8547bbb4d195698f484617bfd122acaae2d0e8c76d28b24005ab03caa781ea97b1c4d9396a16f7998eee7ddd9de4cabe57032d9438a5d99c6b34a956122350263c7e998bc61dec91381012e686d079e39e96b1ea4bfdb7cdf630ddb422c6b580e5506c9cc3d6c100f2041d17ceaaaa54589249f04a1370ffa3bf3ff1adeb890688698 +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = 752a9916f449aebf814ce59ca6e82fa8038e4685419241c1488c6659b2ff3f7b7f38f0900a79c77a3b57151aff613c16f5020ad96ba945db88268722ca584c09b4054a40c00901149bb392f0916cd4244699a5e6a8c37e9621f54b471166797a7b58502cff4083140827052646501f5b5f1bc0b4e129147d7cc157cf6e73ec58 +Salt = 61a762f8968d5f367e2dbcacb4021653dc75437d9000e3169d943729703837a5cbf4de62bdedc95fd0d1004e84751452 +Sig = 6646a88ee4b845da4931274c23840dada6145fe0af954829d1d56661546a25e46316e216bb6b9446b368884ba14969a6f68ccbc1cf5b4e7a6d3aabec67f64963f63b088fa817c855d776ddcada57e5daa50fc1c877389c3cb9d99095a869a963bc91ec24b2422ef6b8dd18fd20d2b215fee6e98cda415ae44d2d2616fe1708292a3ef50a075170b3a7ebab02918ab0301794c17fb35e2038f369d94dd49569c066f7c392889dc4b878c50c7e52586b5081114d202338d23304f16f912d519a9ad21baff0e3d21761f373d08421e10108a983048fcb90eb2adc7c7f12ffa1571b091c781b255a77a880e97975f14f42baf5aa285ecc142157c3e1addd6aa0c09253a11c59144abd3b1e212d89e27ed96fb75756afc20ec67423b151194cb0b0648c659987a5583cb7757779d8a39e205e7101a5351ce1af2c9c6b0847cca57af52593323905e3d2297c0d54541a0125621640fe1deef13e759f8f6c56a2ec2a94831ac2c614b911e79edd542fef651f5a827f480575ae220c495f2a2842f99ec4 +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = 0403ef219938b8cdbf85d3b88cbb9c60d174134e43a7284cd87936d37456cdc3c541b4566b682e575dfc7d8f883fa581b9df7257bc82bc1bc6a2ea2a109bb5e6c5022fac1e390306cb40fe2196cece8143a10af3ba1273c368ec7a30e27e021dcbef6609f9d2be41d3fa5e54fd90a0c83862e40b837ed4ac8600edcb31283bcf +Salt = 61a762f8968d5f367e2dbcacb4021653dc75437d9000e3169d943729703837a5cbf4de62bdedc95fd0d1004e84751452 +Sig = 0a217503fc4870481264d8308292c663476b25f8dec08ea1d1276f0951ec6df27aae3beb93d630bf8fac08b6cce50bd92994851b4f310fdddce8e0d6a8b7a1e866a567b298c5577dc50d8a906ab1be880084e681b26456279149b4b85201621c445de13d127fb77e7f236c39df34052b4629572abe1c02c09eb198188003dd852f88f4f767f1000458680258fa4b63dafc761822ca8b98c1a121b72b1455393bee416d24051290f02a28a7b49b18b30ccb29c26fbac991401a3a6fe01fcd0608920facae9d5bc56540c80f4740af02c9b7a078958a8d8a7a93a5e5b6d2571f49d775ef7c35a6d674290b52cfbcd67277e2b2e829ec437fb70e90537eaa6fe4548551939bfa98fc98e235b264aa6064a505a8d67946e2c33e5c6f0f34fa86ba65715c258f238b69e4f6e36d86a89822b4802d21ba0ba760b2f3a5bd061f50aaadff12e0d86627294bd0c4cd1085b5dab6a6ab30146c9bbb37de3ac5c4f8ee29736d46047e450cfdcb1279e4ca83ab69e858741bfd01a779d475dfc0f71c621d78 +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = 453e0835fee7cde81f18c2b309b804c67b9fd9e96ef0a96e3da94b640978830e5cd1c8940c3d4af763f5334a7caf2d20f0b82541b3434fa138016b92dcf14638817a833d79b79bc7a71223a7e0144ed4977bb217ba8d4f07d7adcd38832c05b0fc61c39a0dfcca3f32971931fd8e6dc9b81107d44c77af8a62d5f9c0c7d0c75e +Salt = 61a762f8968d5f367e2dbcacb4021653dc75437d9000e3169d943729703837a5cbf4de62bdedc95fd0d1004e84751452 +Sig = 6ec22bd58c32d41374c017a77027e770f678fd81017e20cdaaab48a8324b050749e5d864082f1f77fecf67a59c2885e931c3c2f58130fa6806fe1ca899045114b09d09cf9c513ce1109d2210511a3b2e93af511badad2716f48555310e6c5f547afbdb0b9a684491ff3588df933d6b04dae8883f5f8aad62a4570646f72f3656c4a7085623f5152164a81a06ccb59ca478c5c2315414550b0ad8eecd0328b2db01fff7db0f26596c41f970d032925887f1c8a446da889be64d48925b9c6b79a3d897700ab40af20b451aaa6b427ed162864db89f7824b6ae9b475b5433b865335d6f91491c1e32f635cb930dec1aa3ee7ddaa08e8ebd67b6b11a46ba049922446fa69f1a804acc29f6cee487723f2e61a40007865d80cde0119f3fe6e161a339487f5789e1fd23ac0a63b4673969fd8722e3edc9439778928f09610cbefbb42fe6242c73b68d466cef889da156d9d4ff888362db4cf9a941e80f577c944b79fb27dbe0a6967e88f1f67b91b0d38e083fc0c0228cd49d27352521312163f90fba +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = 9aff46c14fd810a039c0a62eda403f5ca902ac41b8e225c6944748a36cb45f8a769ae2a18f713d362206d2af4a1742bf3b1de8e0de69a7fdbb72e66e1c6ed82a6f1f0138edf0f6677940643fcbfe5337cd76ac29456af902b5656dbe7f4c24944d36ab6db07dc39b081662c8a31dfb2c29b4ff04370ea43f4ac7e57adf77ca2e +Salt = 61a762f8968d5f367e2dbcacb4021653dc75437d9000e3169d943729703837a5cbf4de62bdedc95fd0d1004e84751452 +Sig = 62a505b3f3adda45c6badb61b464a28bc45d4c66159a34b63c1cce32604242eb8fcd9ac6929ec6ee4ac1144932d725cbf4638511464ec70dbb5543a4487a241396adb804c9794b271f9d35310ee560368d949a20a2b64cb4617fcf63cf7b60978cad734650dae86c7e51b766522ef0be48bceafe2030564d5b7b17ba125097bdafee48e4df60fbb7ac2d9f14af9a270c2b7ef18cadac45b9b54ef230794339d279d72ba48783bb09b1d1d5c1c65301276523fe90e63789ffbcd489e45f8aa9cf98f33de8f7d9c5cdd21a9ab2847896de6dce0b92f07b1ffb4230ee71ba1fe8048c22dd38af80f8762e747cdec6e99f1ce0d1c743ef98ddbaf7c764412446dca58e6ff5ac0dd13322649acbc96f1c5e0bc58d1a8211853a7d2f51538c5e5e803de0b13044608d6e650bace12945a7008194586e3b74809714b2a52e9f3824be41de9fec3f36175a289baf9fd68b7e92f3754e00b41782d055faa65433c25259aa653fda069386b083fb31aeec8e30c769553f8f0389b6e6d4b392cadd24ce3f74 +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = b50bf2767250f14fa7b6f5ea21a54da8d01e91151eb491107fd88b2d4a5aa157c72d89ba896b87e0fe989819442bf0213e4aa7fde8d6b026e7a70ae965193a0e1bc7f8b8af96298c41f60d154164ba678333c903958d4ffb50b50f57ad8eedb6da61a6398ddbbf9c9955bba6bf5991c4c6615df1cde156d8e188003dcbc3a399 +Salt = 61a762f8968d5f367e2dbcacb4021653dc75437d9000e3169d943729703837a5cbf4de62bdedc95fd0d1004e84751452 +Sig = 1f068bd083a26534040f41c1387e71a8c00370c5f1c958127e0bc721751b5940513023fad02a6101bbcefaaaaeea2875952bf859d494bfb23fd89149d91290359ecb44ecf2fcaa5775e2e61e5f8d5151343576fe9c7167e919a5d081dac6bb8117229c420fd2b0fcb521f4e72366bfb443e688a65fa392eaa5115c292ab05bb4db65468aab267178653dfa0a5efc960636fcce86433528dbce955a0b1aa188ac33ea128206ecc0feeab8f7df6f8c381b10489c8cfb2d02459e4cffc16f43a66aa4eaa19bc518ccfcf9fc1e4861cfa13e9b41fcefade2cd2ebc001ec8430a1cb949a0f2f876badc568c703e4209e7ca16f688ba9705c14fa1c882e6c4871b9deff31521d2d418e0342e189c40ed19c1b6f4320d89a36f78eca143d3c16dd3eb338c0743646fd314c725c2d36a13080bfcdeea0e431de71d61f652033a75424fe1e1586695c3dc463ad553c1cf3ab24a41ff4e031f9e0c2cb0024cef68273ea3b8c1be9d923d3e9c9686c41977ac7be94a6d23181936131c17a39a898c943dcc8b +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = 5ff000f84a951dbfdd635a4d9f1891e94fc2a6b11c245f26195b76ebebc2edcac412a2f896ce239a80dec3878d79ee509d49b97ea3cabd1a11f426739119071bf610f1337293c3e809e6c33e45b9ee0d2c508d486fe10985e43e00ba36b39845dc32143047ada5b260c482f931a03a26e21f499ae831ea7079822d4a43594951 +Salt = 61a762f8968d5f367e2dbcacb4021653dc75437d9000e3169d943729703837a5cbf4de62bdedc95fd0d1004e84751452 +Sig = 18cb47bbf80bad51006424830412d281c66ae45c0b756d03e5d8d49f73037968d13df46ebebd9b5b4c58b164d91d0608e8ebe31d8644cb0bebfaa8e2ccaa1f5746ac8f3bc02ff6930e219f53fe13fc070f910ba1cff0617aea6eb312c1ef285869746673ac1348e89c3646f583d7633f5a2341626bc2e7e2087ff9d8f13d573dc6455dc0068c7ac6eaf5b3093b081614f7b252170c4893891e469121fda655a2a55d67f5df0ff6e29ce5f9b0c3a1a88342140ead748edeea9706d6570e900f1cf3a9adcd7ae64f207585417946b104b3990d1a2d950e0e6a5533d3cfc8c470250e4c797273210f248b8922ab00422f2ecf85aef73587e8c5cd1c2ee6ed9509508409673fe07ee2c462c52d091e7a795d8d3c55fdd5a710d5450695a5a31ed76f115e71a73c6757d2def7ef472571b0bdc7558c71eaefeddec946860b0c77936db31f2001d0499a381e5018870b41ba04c8d42ec0dc55c9fa2af237dc1c405dd8f555b07a237cc50cbce46c3016118cf4ea06c047599283ad4719d647a225206e +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = 531dc2b8566e01a8bfc580da607ec212fc1fbebd5a2590d897046f0ec069df20a1c2278ad70006642d9ba28625d7c1efd4473b68f38fb064346d762bd2fbd5376c2e77de13a31a32a29b88264d44c9f27d3a97b8dc4d1267ab85b5e05c6389575d6a98fc32dea5dbc6cc1a01034a42e1a000b8f63ae720a9a7511474872a6148 +Salt = 61a762f8968d5f367e2dbcacb4021653dc75437d9000e3169d943729703837a5cbf4de62bdedc95fd0d1004e84751452 +Sig = 80baa663877615c2e7ca9dd89958a74e54012efad55ad05868dd74b0ce78a661e2b893c3ac1fd837f282327efe4b041220942649b5472c1ac702070787ae5549398a57653d5fca69cd5446d63f6e9d0684925a235acc96b8a10bdf14fbe209fcd4930b5945910d84b08867b2055fe8eb1d771b753759593b90d6aec5ef182cb33bf2fe29e8c67ea4e8433ecfa3f9ba4ce461f0ab19997f299e95409af97bf57e2de410ef7538f699f385c1abafdf9337f7f9d268da87b2b389131fe3dbefd8c67bd2a158cc4e04f9ab7fee2a58d74d063e6c16958a90574e3e4cb881d32c3116987e46bf5bd44f80abe6b9eb717a9fcd4c0cfe80dd2ca62c33b5dd3a59c64810073e0476085ec7b76638983291b69559c815cd3bb87d4b07e24c6b9ebb7028e800a04f09b110c167f6ee3a3bbb73695d89bee92407d4adcea3eaa47811e23f8c7f2fdfe891f8cfc071cb984a63846b95ec04d6261bb1c5980018feee15c4e7bf632dc8306128fa22c47decfd9e8b099554f17253635e6316712e0b95efa3fb00 +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = a454391a7c3695486c337a41c2add417d8e9e9c6466d2ebb56ad5f97b9e7ce30784cfcd82d6066e372a3a1639a71a9369f2777435c87d100fc5e6638b3631a0bac639f36429b4594726613e5901816cf3a29f9228b96d66090844c7d0026d2e327e24ab924afda6554c2f74f0e69c2e8913798ec3a61e4e4fb6838ee08f89dc0 +Salt = 61a762f8968d5f367e2dbcacb4021653dc75437d9000e3169d943729703837a5cbf4de62bdedc95fd0d1004e84751452 +Sig = 261180717edd905b647bc869f5259203811606221f545a3aee5fc123f297cf7d8a7ee6cee3dc8f97d24284ccdec2fd4680f1428ee75797e0379512aecb9fc1667523413e323c4bd7dded5caf9e5c606e5ee0c694d4d1b5a1f1cb613b980129f64146e42e8261c1f7ef5603954d34d56a50f7431beee5ab291a4759168655a5123640d596b744d97979d39f874ea7ff13a7466a7655d02edb492b58049f2208852297eb023e657f3240c5da9a99fd377728bff3cc073109c31712d94bc24e08c433533d4b86a73b58fbf2c598ccad78d46ca0a055601850960195aac1364dfaddbd06f14a78aac2ab4d374505cc61fc72c1050647d95a733517b709aed2d896721e7484208501480058fa4f6044302dd705c273fa7fb42eaeb02d025092b252e16d270d88dab6f68fd7ad571011f89627683e029d1bf1edc149d47452ebe87ec68679579940f5aec25999b0dedb820a5483ec6901abfee041c03b1a7f743548a2caabca613ff5d9f8fd7c694af12b29f2c2468eff55f9e008757443960fae459e +Result = Pass + +Digest = SHA384 +Key = 308206e40201000282018100a7a1882a7fb896786034d07fb1b9f6327c27bdd7ce6fe39c285ae3b6c34259adc0dc4f7b9c7dec3ca4a20d3407339eedd7a12a421da18f5954673cac2ff059156ecc73c6861ec761e6a0f2a5a033a6768c6a42d8b459e1b4932349e84efd92df59b45935f3d0e30817c66201aa99d07ae36c5d74f408d69cc08f044151ff4960e531360cb19077833adf7bce77ecfaa133c0ccc63c93b856814569e0b9884ee554061b9a20ab46c38263c094dae791aa61a17f8d16f0e85b7e5ce3b067ece89e20bc4e8f1ae814b276d234e04f4e766f501da74ea7e3817c24ea35d016676cece652b823b051625573ca92757fc720d254ecf1dcbbfd21d98307561ecaab545480c7c52ad7e9fa6b597f5fe550559c2fe923205ac1761a99737ca02d7b19822e008a8969349c87fb874c81620e38f613c8521f0381fe5ba55b74827dad3e1cf2aa29c6933629f2b286ad11be88fa6436e7e3f64a75e3595290dc0d1cd5eee7aaac54959cc53bd5a934a365e72dd81a2bd4fb9a67821bffedf2ef2bd94913de8b02031415a702820180073a5fc4cd642f6113dffc4f84035cee3a2b8acc549703751a1d6a5eaa13487229a58ef7d7a522bb9f4f25510f1aa0f74c6a8fc8a5c5be8b91a674ede50e92f7e34a90a3c9da999fffb1d695e4588f451256c163484c151350cb9c7825a7d910845ee5cf826fecf9a7c0fbbbba22bb4a531c131d2e7761ba898f002ebef8ab87218511f81d3266e1ec07a7ca8622514c6dfdc86c67679a2c8f5f031de9a0c22b5a88060b46ee0c64d3b9af3c0a379bcd9c6a1b51cf6480456d3fd6def94cd2a6c171dd3f010e3c9d662bc857208248c94ebcb9fd997b9ff4a7e5fd95558569906525e741d78344f6f6cfdbd59d4faa52ee3fa964fb7cccb2d6be1935d211fe1498217716273939a946081fd8509913fd47747c5c2f03efd4d6fc9c6fcfd8402e9f40a0a5b3de3ca2b3c0fac9456938faa6cf2c20e3912e5981c9876d8ca1ff29b87a15eeae0ccce3f8a8f1e405091c083b98bcc5fe0d0deaae33c67c0394437f0eccb385b7efb17aeebba8afaecca30a2f63eac8f0ac8f1eacad85bbcaf3960b0281c100dd553696db8ccb107609b8917e688bdd8373a8926bc9d114c1c77f7958070e236ca1bd2025ded59a71093b63afbfce39e92bde9ffca983959e7c3e18d75650612258c24eebb61a1b4a68603a2721e3e2483d6da27475a228b1341c78f140948b5c922822ccaed76dae338dddec1e4c5c34b9c53f34a09ff0b2b61a62254e73e6f0ac8013edc2cfa7ecbeb86fcc7309cb0f5b5eddb707af4b9337d34d672af413f3b6efd11e3b49c978f06a356f6f4e0ea50a90797fe32ccaa983547ff18ea1670281c100c1e3089e1bea1141638ca912da01c134f67231a2f737d97e28486e004a43e9c5592ff968ee18109fc71aa4c1a97aa88ece5c4734352bc0c1f67726bc4aac59c19301f23a705be5b3f7825fb284e58a950d795f63d18fe72231eaba9d6a5f90866f8dd34b2b0dfc132db8348efa5a62634e5584a788aebbf073ccb4f3e9f5cde8d0c2e831412485c7f8cf1473abffabcc5d51d8a2a87a22f39d1a250b3cb66d90c573669071aeba9b1080dc079243094a9ae0e5a62e4e8b653cb57f54f4eeaf3d0281c05f8d638d1e0c47794d9305929b4b87281b69397f51b0809573edeb3dcb82f2376ee419491adfa4a9d7f6db51d9573f50d025cc64030744c05794d3350a8bd45b3c5a69b8552e6cbfa2038fb33d4094dd8bb1095c36d4356a88c6ba114cad0c5acfdd224b3f4bc1af30f9a1ee5ea5407a8ce3c71dd09a1ea33f44e63cb9c0cae176515e1e323874adc5c2b788e23bae5123a90b964e44ec2e9be90b496bb537967d05715e3737cd4c35f2bc87ab7cc9ee70116ed2528b3d62237413dfc56e0e470281c1008ced58a9828526335c9517b5ac58c5ae7e74c9c36a7e6c7f571878f3319f52cb8eeaeeee64694ee4a49e582c53b77adac0fb6c808830560c4f130d925e7cbbcaa1221c8a4d54ce116b4c4ce52a56882c5c38000c441673cb91d381a3c5b09cd8ad3d74841fb8d7f9d5cebc4bfd273d2fe28a08fc2df6a57207bef71c6a9d63d54a0d7677d450c6a6d4e9a937a82be8cd4a1677e7ac04712949c7683f412862d40aeaa899640503aabc8794a5ff13e7c72df049ee0fb8203a99fe94a5003c225b0281c10087d010acad9e1540cbfb2c03dcd987d3c2fbd0fa2cd10f2e5b216fad7016a58a98fb43fcaee266b21c99d213089696a0faea4710f8ee7bd9a5eb2452341e58feec965d76e2133236f8b44e8bdd86a591acf8af501cdcc1a5cb1065793b09c0a5536ed414cca22163758b0b41add238e62ea07acba89144f97b9e1509584210aced89986fead9b3d22253f0a7a7372e269a01356070d2e1afac08da15cf23ad29438b0b3fc8d9e8e9f99c8ca970ae703cca71974335adb96a16e85c97689c3a8c +Msg = a05e5782a96ee6d6f10be8830d8c27c0acf272abbf77e684dd6a6c19e5398381e5d0400d3a21927cf904cb6e8e425c1ca3ece04544f25d6c40f0c640d24bc45c807db53044adf63fea835d8cb93a0a4e55f760ebe4594e247051d38d8c34c1413b0ec1d30d3a97888b2fa7c3d59db8c08ab9f985e8d4411635339be95d1b0299 +Salt = 61a762f8968d5f367e2dbcacb4021653dc75437d9000e3169d943729703837a5cbf4de62bdedc95fd0d1004e84751452 +Sig = 87d80275df7b196b7e1d0a41147719d773edd80b5627301a500d91665ba86076e6a31c8f3ae86aedb643fe2af223976ea4eb3d4dca2cbcf81ffd14b7ef7de3ee355a8d0f4143e5b0f0a0950a42811102e602cd214e1c945c47e8b7b66d507103c3456f404f9c48aa7fe48dee0aad05e599f242adcf8ccb0cc9db3a6c244a913551ab595600ecfbb67c25a95b54f4054397abe47650e5c4991edaf1441ba9c8e3fbed904ffbc977142ebdc84769865a215158d5b052e75de318d75012172e28c31db2d8bd4edca787216dde2a7387c543f162fc91924918fd6c845bf1ebc0220a1027fb4227340ca4cb0f183e5b34b1e7f93e14fa57bb9d2d2ea53f86d838bcbe3f055b473b0b469afd2960c0d76ce2c30f3d49a3b29065bb9260248e728cbe328bdf502b109e1f20b9d037860cf9e261611b4cbf27ff9b5bf425b2612afc7cfa3138f78ad26077cbfb947fb2aae6f4be85ab2d1a15860839b822dd03a1a92a19a5c7244e98bdf561625ca2a8df410ff855752ebdf3d49f5eb98f228acdd52791 +Result = Pass + diff --git a/vendor/ring/tests/rsa_pss_verify_tests.txt b/vendor/ring/tests/rsa_pss_verify_tests.txt new file mode 100644 index 00000000..6d3f0bb1 --- /dev/null +++ b/vendor/ring/tests/rsa_pss_verify_tests.txt @@ -0,0 +1,335 @@ +# RSA PSS Test Vectors for FIPS 186-4 from SigVerPSS_186-3.rsp in +# http://csrc.nist.gov/groups/STM/cavp/documents/dss/186-3rsatestvectors.zip +# accessible from +# http://csrc.nist.gov/groups/STM/cavp/digital-signatures.html#test-vectors +# with SHA-384 digest a57b08a04af67086b065b91789a09f53b940b51df4ad7a56246211d329f04560415684d2ce23658a691cb9d14353ab01 +# filtered and reformatted using convert_nist_rsa_test_vectors.py. +# +# Digest = SHAAlg. +# Key is (n, e) encoded in an ASN.1 (DER) sequence. +# Sig = S. + +Digest = SHA256 +Key = 3082010a0282010100a47d04e7cacdba4ea26eca8a4c6e14563c2ce03b623b768c0d49868a57121301dbf783d82f4c055e73960e70550187d0af62ac3496f0a3d9103c2eb7919a72752fa7ce8c688d81e3aee99468887a15288afbb7acb845b7c522b5c64e678fcd3d22feb84b44272700be527d2b2025a3f83c2383bf6a39cf5b4e48b3cf2f56eef0dfff18555e31037b915248694876f3047814415164f2c660881e694b58c28038a032ad25634aad7b39171dee368e3d59bfb7299e4601d4587e68caaf8db457b75af42fc0cf1ae7caced286d77fac6cedb03ad94f1433d2c94d08e60bc1fdef0543cd2951e765b38230fdd18de5d2ca627ddc032fe05bbd2ff21e2db1c2f94d8b020310e43f +Msg = 7518c85b67e7aef7f26bf006899faef76e076f0c6c946e5dc9c83521771a6d298a9cf5adefdb314b5a07a54d8054c22b879fff50ba552c218291033c918401fd611a7447dddad4815e0f56ded825bfe256557622a385de4b4a69e265c1efd259e2da6db19aac3fa0e5ca2d42fadb4e24c271fc078feb2be10b9afa256f228844 +Sig = 992d48b21bb3d2219b44e8fcc8633cf3aeb591de90f4386496ac7ecd284cb63d7dff81a50b8c4fed9f2ef737692ea6be05248ca138947b49b4e7f3cce6640e049ac2154c40f57e22fa14f97e7a9507e1dc98b206ce6ea0e180039199d1be0a15d1f5093a459e5101aaca2a23cb1f59cad2f1fb99dc956b9d4344bad2c1121d63b915004acbfc7ac60ac9a7b0b1c6812b30bfe087f7f0c7d1625f9c4f458515e11478e3604aa39d14d08bea30b01fcd6189e6f9b701d360e4714d45556b29815c8d8fa8e46e10749ba5e8d445a4c0f487e70ab5890b7ccc1651282a54e87e7db4bb2f7d4a671e71c43c55cf6486416f171d1955037474d06a71dd078767848e5d +Result = F (4 - Format of the EM is incorrect - hash moved to left ) + +Digest = SHA256 +Key = 3082010a0282010100a47d04e7cacdba4ea26eca8a4c6e14563c2ce03b623b768c0d49868a57121301dbf783d82f4c055e73960e70550187d0af62ac3496f0a3d9103c2eb7919a72752fa7ce8c688d81e3aee99468887a15288afbb7acb845b7c522b5c64e678fcd3d22feb84b44272700be527d2b2025a3f83c2383bf6a39cf5b4e48b3cf2f56eef0dfff18555e31037b915248694876f3047814415164f2c660881e694b58c28038a032ad25634aad7b39171dee368e3d59bfb7299e4601d4587e68caaf8db457b75af42fc0cf1ae7caced286d77fac6cedb03ad94f1433d2c94d08e60bc1fdef0543cd2951e765b38230fdd18de5d2ca627ddc032fe05bbd2ff21e2db1c2f94d8b020310e43f +Msg = e002377affb04f0fe4598de9d92d31d6c786040d5776976556a2cfc55e54a1dcb3cb1b126bd6a4bed2a184990ccea773fcc79d246553e6c64f686d21ad4152673cafec22aeb40f6a084e8a5b4991f4c64cf8a927effd0fd775e71e8329e41fdd4457b3911173187b4f09a817d79ea2397fc12dfe3d9c9a0290c8ead31b6690a6 +Sig = 4f9b425c2058460e4ab2f5c96384da2327fd29150f01955a76b4efe956af06dc08779a374ee4607eab61a93adc5608f4ec36e47f2a0f754e8ff839a8a19b1db1e884ea4cf348cd455069eb87afd53645b44e28a0a56808f5031da5ba9112768dfbfca44ebe63a0c0572b731d66122fb71609be1480faa4e4f75e43955159d70f081e2a32fbb19a48b9f162cf6b2fb445d2d6994bc58910a26b5943477803cdaaa1bd74b0da0a5d053d8b1dc593091db5388383c26079f344e2aea600d0e324164b450f7b9b465111b7265f3b1b063089ae7e2623fc0fda8052cf4bf3379102fbf71d7c98e8258664ceed637d20f95ff0111881e650ce61f251d9c3a629ef222d +Result = P + +Digest = SHA256 +Key = 3082010a0282010100a47d04e7cacdba4ea26eca8a4c6e14563c2ce03b623b768c0d49868a57121301dbf783d82f4c055e73960e70550187d0af62ac3496f0a3d9103c2eb7919a72752fa7ce8c688d81e3aee99468887a15288afbb7acb845b7c522b5c64e678fcd3d22feb84b44272700be527d2b2025a3f83c2383bf6a39cf5b4e48b3cf2f56eef0dfff18555e31037b915248694876f3047814415164f2c660881e694b58c28038a032ad25634aad7b39171dee368e3d59bfb7299e4601d4587e68caaf8db457b75af42fc0cf1ae7caced286d77fac6cedb03ad94f1433d2c94d08e60bc1fdef0543cd2951e765b38230fdd18de5d2ca627ddc032fe05bbd2ff21e2db1c2f94d8b020310e43f +Msg = a3bf44cae8aa8347fd07d84a33eec5dbbdd7b6431368887c988c4be779c5473dd8c33ec82a35f1d3dddfe55f3eed67179b87ce86a4a50088172538fe9d1b06c6ef6897eb3c8e3618cfc21353ed4343e7fceb09a2eb035441cd5c8829c79b81582dd5d69ae85c5a001bd8e98e069961342a2bee00ad2b8b91015ac5cfc1f0c2d9 +Sig = 877f20eed60f8ce286108a5dde9b6828b37e3fbdb08fe153e591513897440f21f81214598fba08ea077394ba8c2a44aa4f0d8f3a5fbaec3dc69b3bddfbe28397c90adf35d08ea771c7aaa31eb06413c1c62b77618af940f4c71859fa4384d29b48e5cfc941d69bf0a3804d2008e758742b8ed68754bc71d231623d181347c36833a7d7160f742a37ce7d432d748e514aa7d8156b50c532151390d086cdcf9d59f122c6d97f4ccb737289f7b00a237cb6b4aae6ba79d41ff73d019a26b59ade04c967356e2aad52f115357ffb7676f190db38dcfc98666e5b258559c8c85fa32942cbcb99d757e8847e56a1687b3302415698708191b136d923349b02fe38b6be +Result = F (1 - Message changed) + +Digest = SHA256 +Key = 3082010a0282010100a47d04e7cacdba4ea26eca8a4c6e14563c2ce03b623b768c0d49868a57121301dbf783d82f4c055e73960e70550187d0af62ac3496f0a3d9103c2eb7919a72752fa7ce8c688d81e3aee99468887a15288afbb7acb845b7c522b5c64e678fcd3d22feb84b44272700be527d2b2025a3f83c2383bf6a39cf5b4e48b3cf2f56eef0dfff18555e31037b915248694876f3047814415164f2c660881e694b58c28038a032ad25634aad7b39171dee368e3d59bfb7299e4601d4587e68caaf8db457b75af42fc0cf1ae7caced286d77fac6cedb03ad94f1433d2c94d08e60bc1fdef0543cd2951e765b38230fdd18de5d2ca627ddc032fe05bbd2ff21e2db1c2f94d8b020310e43f +Msg = e1c46c309b6366fb4d56ac08c9393cee9a7c95bbe7b7c0e79a3d9187c0f42bc33364c28a770da585e3fe7b4901a3ccd037dfc42aa65a3470521ddafa835ce2d16c92ac670bd4d086505e608781736dc4dd64cc5080ee19e586c8fd1d737dade5d378b32f1d5df1e8dda0e32a125024b2d53334943c18782d7e69825a580093e7 +Sig = 8ed1f28fd16d45d416a21554e104c006fd7868e5895e8b99831ae0938135b543610df64a8c3574d08118bfe396f9a5609a8dbda21b9a8530ff0ba90e629d6abe30d2c1b590600db971fcda80e6eaa84017e209b9bd3b641f3c81d5d27f842bec8019790ed99a0e5db4aedc1c070b047c19410cbc56e9a0ff12d8f6e5d7371b1011ecfecf7be7a74f94403590a52f95238dd69e0b5f4c1fcde97ecfdb1acc3803e59ad8b3088b2bc509e3dd12d40d875625dc8362c579176799c75e4fadcdb392c68f401f68d854e46377f084c081f9d83743039f6934722e30ef3f0226bc841d79a4eb68c5cccbb6ae0e9200444e50ff0d0953047ef955d2d39a70c3b837c5f4 +Result = F (3 - Signature changed ) + +Digest = SHA256 +Key = 3082010a0282010100a47d04e7cacdba4ea26eca8a4c6e14563c2ce03b623b768c0d49868a57121301dbf783d82f4c055e73960e70550187d0af62ac3496f0a3d9103c2eb7919a72752fa7ce8c688d81e3aee99468887a15288afbb7acb845b7c522b5c64e678fcd3d22feb84b44272700be527d2b2025a3f83c2383bf6a39cf5b4e48b3cf2f56eef0dfff18555e31037b915248694876f3047814415164f2c660881e694b58c28038a032ad25634aad7b39171dee368e3d59bfb7299e4601d4587e68caaf8db457b75af42fc0cf1ae7caced286d77fac6cedb03ad94f1433d2c94d08e60bc1fdef0543cd2951e765b38230fdd18de5d2ca627ddc032fe05bbd2ff21e2db1c2f94d8b020310e43f +Msg = 925d59f953cb3ffb6d5a3a55c079cb1083997536e33d7c8aed50ed76aebcde459938f79229613200c70dde2ceddceae08c10608aab9e30ec51842f14a65e5f8f553471da3497881927ec400b4207ef3e2dfc2b7fcd318c9520b8b22f69dc8a1a8efaceb7be93cbad569e67db062362913005dcff902018ed22937fad405fe84e +Sig = 62b07f6d1b8f13651d7f22ce2ce01061090029db5af7dcecfeafef20621dd9e254a0fb914f76a3d79662257489cb8122708583d30778791a77da83c7bea81140c61e4d0484806e20fb85f24d1bbf774ef2ed38809c9b14f2a58c6e8649b760baa901544522ed94bd405c77201d07c8d12864a8d1e97a4d322c29994b214fc83c2ecd5c955b9bdec424e7ca5a1325ec0aae4ab0c202b980a2187f096aaaaa5e85550ebd325799f4f30ef2ead07e79c7a475667f5965e6b50269513659ab5962a391c43cbc3a3da34c0fdd1546c40ea7e2eb5352ce6a06ce6a6385ca0ddd5d162c137836df9ea1f89cfa00c3eb1671a43bd625526f3b6ba8e48a7a2d56fb4f01c6 +Result = F (5 - Format of the EM is incorrect - 00 on end of pad removed ) + +Digest = SHA256 +Key = 3082010a0282010100a47d04e7cacdba4ea26eca8a4c6e14563c2ce03b623b768c0d49868a57121301dbf783d82f4c055e73960e70550187d0af62ac3496f0a3d9103c2eb7919a72752fa7ce8c688d81e3aee99468887a15288afbb7acb845b7c522b5c64e678fcd3d22feb84b44272700be527d2b2025a3f83c2383bf6a39cf5b4e48b3cf2f56eef0dfff18555e31037b915248694876f3047814415164f2c660881e694b58c28038a032ad25634aad7b39171dee368e3d59bfb7299e4601d4587e68caaf8db457b75af42fc0cf1ae7caced286d77fac6cedb03ad94f1433d2c94d08e60bc1fdef0543cd2951e765b38230fdd18de5d2ca627ddc032fe05bbd2ff21e2db1c2f94d8b02033c6cd1 +Msg = 08d3ac24a595da811cc9bba78828f1452ff390ae653f22d1ad91ef6b22aa7b7b15a44ff7f83efcbd7a755eccf4541eb4040c7a4b774749a26dba3937b7f95c6c8490e3383d4f291dade5f35a65b1f6615fd4998be18bfd0ba4bc3a2136ceec909dbeef513d6f6689fc4202b9a3e78134877374d76ab246f49cbe7a8f65d034cd +Sig = 72ea7d669ac699a149c13aa168eb3e148f590bbc0424951f1c3144c541915573ecf05cabb5275488c98d0ebe55b1f1af49ef8cc72cf00e849897c6afa53833caf9ffc00eb84cfe55b8277e93a6ac3e04b111c9d07ad62082ca32854c40de1e0956a18f8460438484403abb91e6fad12b28f114157f1b6ef563d2fa438ccb8a16aa3afe6ec5e98365c30d9a355e7e14b039bbdecf59f91248d0f1e317d2e3c819096ed68cf98361d7f9310b354f4f45e2f7c4dfb82c218cd438f3174a6f017f0f148a71c40ad5b7e2c8081ddbaeaa764d601bb2e075eb3618aabaa4b5060022c6d23ef072643686a759227daef0331b28ee76da4ab3b5ad5dda8991b9937d1a59 +Result = F (2 - Public Key e changed ) + +Digest = SHA384 +Key = 3082010b0282010100cb59aae30883db678ea7b2a5e7009799066f060757525166030714a25e808482e752f04f78611b3509d6005b411530c9ada4d8fbddc85f9db3d209eccc6cf0cae9aeb902e96688d2547974b7eb3323eeaa2257cf8d5c7c97f5176e2cfd29e19d0487380e3e64338c73bd592d52e9dbcc9606ed5835758c1a112c6a004256b5c4338322695df2ba573be0e79a7b9f9afd497dd38eed39f05f88d7d399d1e984d048067596ad1847ce51221babf51873bad2d81fa91cf3d9fd307e3ebd41fc49a8b3252ed7a71fd2357330bef2f1f89f2c80f740567e2ae8d168e56f007e8fefa33d2eb92b7d830a4f978ffe842ef0697db50602b19642afc50ac1f837e476c0fd020400cbb343 +Msg = 329b4257ece34ecc0185031b0bc665c9c87ac66ec01a8c69281734d2076e97b0977d6c6cee140f86ddd0818719a4af3798b9f70f3e78e8f1b9e54917aa2e5d4a05836654ba2968b795ca2f9f621093165672fb77aa4d20258936147c2c8f8208445837f59848e1c7ef1c174c30309acec84cdb8c4cc0bd6c5fb39bead7b88d54 +Sig = bc7b0631f92c7dfb0e3e8694650bdc73623d0356ad2897aad8eca32ef4531263f3219e0af3ef2fa3b8a3eb878b3f9c293c634263bab59b1dbdee04afc3fe39dd8bcf22a0052e6a081d3b68399294c8c6aab199beefc49706eb3436d95bd3e655d21cbb0fb3488052df8819594ab0f9138fc5ad4e9e3521425e375684d94dd74b9a3a7a858aa1023e967502a38b67ed3b8b8f6086427e8c8b4ca608c4b394fc8dfb818daaec3d4f10e77f51d80c0a103569dc28814a80eca64100d9fce5d6b9081f871bf8aae624f1786151290c86dfac7643b21c74f4f5313bf8b7693dabe4c816d7d309ce27f4b08b59d6a26795a9c2278ffa2185a1af12257a5a6de57c1a41 +Result = F (2 - Public Key e changed ) + +Digest = SHA384 +Key = 3082010a0282010100cb59aae30883db678ea7b2a5e7009799066f060757525166030714a25e808482e752f04f78611b3509d6005b411530c9ada4d8fbddc85f9db3d209eccc6cf0cae9aeb902e96688d2547974b7eb3323eeaa2257cf8d5c7c97f5176e2cfd29e19d0487380e3e64338c73bd592d52e9dbcc9606ed5835758c1a112c6a004256b5c4338322695df2ba573be0e79a7b9f9afd497dd38eed39f05f88d7d399d1e984d048067596ad1847ce51221babf51873bad2d81fa91cf3d9fd307e3ebd41fc49a8b3252ed7a71fd2357330bef2f1f89f2c80f740567e2ae8d168e56f007e8fefa33d2eb92b7d830a4f978ffe842ef0697db50602b19642afc50ac1f837e476c0fd020324f1bf +Msg = 3cbc49d73addbe2875dde779689a363e42cf88b3e13ab520fcfe655ba246268fe32bbc3dcdd8b8809aeb4d95271f5e9aa828db969bdf4ebafa9fb1e7b5ef83705f611b2027ba3b7f0b52e85148be796015adef7b901084bff97e87151ed666fc16260d8932cb6eab31da61b4b3bfaf15f1246969aa157fb661618defc543f8bd +Sig = 37c9ca333ade423c46419ea16c5d79f56165a03bd5c674fa0127500a1bd7f5c2d21547d7bb45f558b3b986624c8eaef4db101e4092dda2b4fe48811ef7fa694c1384f460087f81cac1861425e44b86bc2fd825eea94b645afa4afca29f632edce048aea9e1365185a60821e4385de7d7435ec00d307d477b2e6a6e3cde0f340c71d2c59624a7ac8cfb838f68b436c403ab3b45f9a19a0a14ea8f47407b7e25e51a498a902ed8eefe9c493421421695a6d17a9cd5b76efad7b39b8d584cc2902c03422f06af528c6bc65bcebd8876b5f4d1ebb68ce22af5de05105837c15f5ff5c4d41ed8019d6a0448c94675e192a51d5eade91d2237ed57773cf3b37ba3da71 +Result = F (1 - Message changed) + +Digest = SHA384 +Key = 3082010a0282010100cb59aae30883db678ea7b2a5e7009799066f060757525166030714a25e808482e752f04f78611b3509d6005b411530c9ada4d8fbddc85f9db3d209eccc6cf0cae9aeb902e96688d2547974b7eb3323eeaa2257cf8d5c7c97f5176e2cfd29e19d0487380e3e64338c73bd592d52e9dbcc9606ed5835758c1a112c6a004256b5c4338322695df2ba573be0e79a7b9f9afd497dd38eed39f05f88d7d399d1e984d048067596ad1847ce51221babf51873bad2d81fa91cf3d9fd307e3ebd41fc49a8b3252ed7a71fd2357330bef2f1f89f2c80f740567e2ae8d168e56f007e8fefa33d2eb92b7d830a4f978ffe842ef0697db50602b19642afc50ac1f837e476c0fd020324f1bf +Msg = 59632917bcef9eaa6edb1bb6013bef9e5d285fe212c49b44ed78f129ca804141a8aab16a035aa1d25ed2e25c1fb022469fb8ab0882d44e7f4459994a158c5175e7651c54c5937db266bf052c0215c8d764010f2941364c16c8f553797a8cc6b63c1dd19daaa01892af2beeeb5271c89ad38af10cf7f27f51a0d3857ca0878a4d +Sig = 77a69f4fbd9456eb8cb973e2623d8ea83df850f3c7bc7c8f976728f11b2daa6204ec45e15cd36dcdba5d88bcdeca490bf488a32d12be8c93d9fc63d2a91fcbd79b4bed113dd98bf5b93673a1c143828f47935aeeada7938c65717fb8b370cf649134f6fde56602ba7d6f890ba166d3fe1c51e7471c98b661a6022d7d1d0caa5be5d140e94e70cd1478b9b33622ad69559e27cd6878925cf07f37f5dbd1ae457eea785053d06e2e4d010fd885b897f743ec09c2b06f774407123ac30cd91f81080845f885062fa4be9da31f4e6f626c61a7fefbc123e8b7b80978682b773b5537b2366d1118f506464d27db3991fc2af283abbed6d0c552120f82f906c38c2e0b +Result = F (3 - Signature changed ) + +Digest = SHA384 +Key = 3082010a0282010100cb59aae30883db678ea7b2a5e7009799066f060757525166030714a25e808482e752f04f78611b3509d6005b411530c9ada4d8fbddc85f9db3d209eccc6cf0cae9aeb902e96688d2547974b7eb3323eeaa2257cf8d5c7c97f5176e2cfd29e19d0487380e3e64338c73bd592d52e9dbcc9606ed5835758c1a112c6a004256b5c4338322695df2ba573be0e79a7b9f9afd497dd38eed39f05f88d7d399d1e984d048067596ad1847ce51221babf51873bad2d81fa91cf3d9fd307e3ebd41fc49a8b3252ed7a71fd2357330bef2f1f89f2c80f740567e2ae8d168e56f007e8fefa33d2eb92b7d830a4f978ffe842ef0697db50602b19642afc50ac1f837e476c0fd020324f1bf +Msg = b9403622a632794f7cd74fbba93aaa64c8d91b63144fe7ba23305c4cd135652d7a995d1c6cc2214e9b24696e976358e1bcb7514ea8950d5ef38ceac01a6d8671bbae8d3a0810cf7a76809625b53b360de536e56007bdcd72b15a60bd06f8ec27e6486f836264ac5973b37eeaeb0c6d6fab1e7fa2170f507fc763654c7f20bed7 +Sig = 81511a0c2eb37d5c6fe2c214c55d6b0e5fcea17242d5a5a9eb4568ac1f0af9b8912498ead877ca43cf9e19c743c3d8ea6f4e67301de53ebb81a1a3eaff67d72e450ffc6646b6b45ce8826957b9afbb13f571c38852c3eb384f6a595538ebf467414f3522471147f2ccb347284d0873018bf6329f33e0b49f4e86338b423a1027a6c4718187d19281aa896a286b6c89622e4cbf4cc6cf4c3ad4443516aec8708006dcbca5f42c9b943fc8cdcee23d9099edf61185635b53ad4d8853d8a511cdc50e189cc8929dfd32f9dcdcf2754adcc19b855f41d25620b65090180ece407427e9ab602a38f1f289eaf3299db856cc5bbda17de17a74bace89913813d147d9ac +Result = F (5 - Format of the EM is incorrect - 00 on end of pad removed ) + +Digest = SHA384 +Key = 3082010a0282010100cb59aae30883db678ea7b2a5e7009799066f060757525166030714a25e808482e752f04f78611b3509d6005b411530c9ada4d8fbddc85f9db3d209eccc6cf0cae9aeb902e96688d2547974b7eb3323eeaa2257cf8d5c7c97f5176e2cfd29e19d0487380e3e64338c73bd592d52e9dbcc9606ed5835758c1a112c6a004256b5c4338322695df2ba573be0e79a7b9f9afd497dd38eed39f05f88d7d399d1e984d048067596ad1847ce51221babf51873bad2d81fa91cf3d9fd307e3ebd41fc49a8b3252ed7a71fd2357330bef2f1f89f2c80f740567e2ae8d168e56f007e8fefa33d2eb92b7d830a4f978ffe842ef0697db50602b19642afc50ac1f837e476c0fd020324f1bf +Msg = f991a40a6c3cda01f1a2fed01ca0cf425588a071205eb997a147fa205f3ec10448090e53f56be512309cf445b3f6764d33f157749d5199c7a09ef6246bd5c793b85d24d9093c4d4b318b48e11727cc8bb7aa5ec8699aba7466e074e1887bdf2a51752ec42f16d956fe5943cbcf9c99a5e89bfd940c9fe447fcf3bc823d98d371 +Sig = 6b42514e88d93079d158336897dc34b450e424d61f6ddcf86fe8c9a368ae8a22c4ee4084c978b5169379da10ae6a6ae8cd80028e198cd0a8db532cd78a409f53baf7d231b545835b0dc06d594d76868d986889419a959268fd321bbc8bad5e800e452fe1a1a2a5a851d542494473deb425171a2f37ffc4cf0600a8d561b20f777407bbef1b596f92e518c0929e8bd52b015c2718d14443a56056f65015515673deef32ae5399ae71f97873ec1508f8c41d6a66a13017685134e5425c4b580a7f6986c26fb272f0ed215d6698dcec9e7c5258173b295b3611869254a538945de952dedf291837df0d7a205e1b76b01140df4edce3afe7245d46ee3b292bb117b1 +Result = P + +Digest = SHA384 +Key = 3082010a0282010100cb59aae30883db678ea7b2a5e7009799066f060757525166030714a25e808482e752f04f78611b3509d6005b411530c9ada4d8fbddc85f9db3d209eccc6cf0cae9aeb902e96688d2547974b7eb3323eeaa2257cf8d5c7c97f5176e2cfd29e19d0487380e3e64338c73bd592d52e9dbcc9606ed5835758c1a112c6a004256b5c4338322695df2ba573be0e79a7b9f9afd497dd38eed39f05f88d7d399d1e984d048067596ad1847ce51221babf51873bad2d81fa91cf3d9fd307e3ebd41fc49a8b3252ed7a71fd2357330bef2f1f89f2c80f740567e2ae8d168e56f007e8fefa33d2eb92b7d830a4f978ffe842ef0697db50602b19642afc50ac1f837e476c0fd020324f1bf +Msg = a95ece434121269f4bf036395e54718c9b3b247de3534fe147b7b540bfcd2fd81f6e45e54848ff209b81f986b49db65a54a2366d9e7acb9d8798289c88dfbbf395bf3d4653a187d98685a753c8e933c281eddde013b6489555101abc4357532af497ddecccf263d1f242672904008fcb0a65405da9ce6ecf9a65b3295afe9e87 +Sig = c878b4b14526efdfdb99f7287c0e871ef6c0aa7b4d2ee29299a782c8391ecdbbb60b8aeaab5343dffe7ade8af07156c45b16842775cab5201b3403dbd6bf0769ab5533d4c40deddb1eecfd8a46b933627d0d25893f0338e6dabb2a778649ebb2193a9d7c99d069c6c209b4436eda411184d99be0f80e3b293b5ede00f58ec4922fe8e1c6de04e58fd443d1cd96fcc9ca4bfc23343532a3eb840fd5c197e7795f2e3982a928e602b1e8f5cca7ea20da049eda313b1ee8d4b1a8e7960e4cfb5b16082ba73060f73c02716324658d3f00a3ff0a78dcbae103d5048e75669053645156f6640d4f6d1645d02e772dd8e70fe8866cad5ec2878ea6fc5c47530bf9eaf0 +Result = F (4 - Format of the EM is incorrect - hash moved to left ) + +Digest = SHA512 +Key = 3082010b0282010100a677525e1a69546a96dc7b112350d5e4864f0f82e999a714fa9f43ac681517d3975910c2d806bb3ee6dbf5dba1d969b38889e113c2da76eef4412a60cbd89faf35b2bdcb0de36a2cb762cd8f2f29aed9982a9ab60886cc8fbfee9b2ae09c88161e9159d4fc833adc4f80e4bf629d5a9551acce7a3938630c2bf9956097642e3bc60ac6522017841b65c7a25197865e697753b08169853681911443a2b25f1b7c4696f946155b2664b67b40878d3b45c3e0d7034d5b5ee6f5ba8fb3cae7797e85789902cf8f9f86ed3ef25ae0736178aae260fe875bfef5bcde9ec05f11e18fc7375edcd4a5533618e6f991dd48aa3062e6031e291dfcdc6e7fc14ec60e539fcb020400eac839 +Msg = 9c3d5d23d2746d15d616bebf3cf720c6e6012a71cae22002f5021a47d0b8636ca3bd201357e132a680fc5dec9b28a9db932d08ae8b3d3a37d7e2ee754b342a69b94fec26b50412289bcf77e6d4095faa545f15a16783d22eae21e18464150174e6db0b837347d440307655d56f0409db307f9773e81cb19282a93c9ca4c3b135 +Sig = 98657fd8163967fa7d263bd45bb890035adbcdd1645fd48b28febfb9b4e15172540e38b7c2f673c40a205fd40b08b60b4b81ed6e236cdf08f0d6b11f50dc74c60dc466ac372e0f467883aa9a398f4aeef87b040e14a51502dd467e8e8dd89812dfaf6b1dc1c2f6c28448af084590c05aec499dd3b148e66f3d71cf75e239db6d21f4074b8bd9a6bde5ca668634bd47953276ff2d0ebbe01afcfe0e381903736d6a6c672a45fba4ee326e342dc5925169517c5f57e9290724576a225ba89cb4dd091f4e6513be10dd4181855bb4045d6ef6437c16d3b5589ef9d6836682711c7d66025ae37b525580f0dfcf3db7fe57d7c6b15777cc41600307e58a1721b6f7bc +Result = F (2 - Public Key e changed ) + +Digest = SHA512 +Key = 3082010b0282010100a677525e1a69546a96dc7b112350d5e4864f0f82e999a714fa9f43ac681517d3975910c2d806bb3ee6dbf5dba1d969b38889e113c2da76eef4412a60cbd89faf35b2bdcb0de36a2cb762cd8f2f29aed9982a9ab60886cc8fbfee9b2ae09c88161e9159d4fc833adc4f80e4bf629d5a9551acce7a3938630c2bf9956097642e3bc60ac6522017841b65c7a25197865e697753b08169853681911443a2b25f1b7c4696f946155b2664b67b40878d3b45c3e0d7034d5b5ee6f5ba8fb3cae7797e85789902cf8f9f86ed3ef25ae0736178aae260fe875bfef5bcde9ec05f11e18fc7375edcd4a5533618e6f991dd48aa3062e6031e291dfcdc6e7fc14ec60e539fcb0204008d8853 +Msg = 7759420c8d1a39ba0e3e1681d9b757fcf30cb40d844f4a71224ff998520e0bb44c761611ff4723a455540fe6b8ef32e3d5a23f8da0206b57987ad2ff4c9616ab1ede493847350dcf1b2ff9b98e813f74f8b68c0615243091501f7f28416c77e174f8a32b6cca3e62e7379ca16455c6d8e3b2651eec45e148d2a4c9ba3978767d +Sig = 91ce8e921f85de845b9bf7503dc65a328224d15b23e8ea65dc3da6d804fbef196c305e0fba059a7d842c8c0f580860cce77652d4dc779073d6a3b0a92bf2dd3ec6c0618da1485036fd594bd962f7b5a1c61d53f1626912c7e312aa83eb4326288a52437c7387916bcb11084a40c219c84cab2ff66e83143f858647f2dc914da0c7858ba39aa8ad8147ea5c9c52069eb2b2ca941d8a5023748dc401e7664500846c85cadf0287e39b8b8b46794a82bfffa752960ab3b9eaa02530b5903c24aefa108f10aee35b6a8a3cdf8795a182e5c04ed36bb68c18785623b42f0979fff319112e1514cee51db437ee32289f61ded61186c6ed44ad722d18d556821f888221 +Result = F (4 - Format of the EM is incorrect - hash moved to left ) + +Digest = SHA512 +Key = 3082010b0282010100a677525e1a69546a96dc7b112350d5e4864f0f82e999a714fa9f43ac681517d3975910c2d806bb3ee6dbf5dba1d969b38889e113c2da76eef4412a60cbd89faf35b2bdcb0de36a2cb762cd8f2f29aed9982a9ab60886cc8fbfee9b2ae09c88161e9159d4fc833adc4f80e4bf629d5a9551acce7a3938630c2bf9956097642e3bc60ac6522017841b65c7a25197865e697753b08169853681911443a2b25f1b7c4696f946155b2664b67b40878d3b45c3e0d7034d5b5ee6f5ba8fb3cae7797e85789902cf8f9f86ed3ef25ae0736178aae260fe875bfef5bcde9ec05f11e18fc7375edcd4a5533618e6f991dd48aa3062e6031e291dfcdc6e7fc14ec60e539fcb0204008d8853 +Msg = 864f4f5890a03653d08daa83d9e2992fab3393b7ee152d6f7b8ea3ad1ec9c1219a0e0365eef2fbd5d7cbf3a19667d421f3fe46688264191b2583e484d209ebe2975e4603dbd94015e633febaa43c615aa5cc2cbd69fd6ad9db970ae81bcccdbe8026625adebdcfbb04ad12f589c70883c9878fdf2a46e750a4b15f03807a2d5e +Sig = 245fda2e66d2bab102d0da4098d751650f5ef4738d14dabe866c782009ead9d6d05d43ac0a3014a382d62ac971ee19798f3b8ef49f9bc247fa07b368ac2d0e8a4fb210af5acd87b6b512e135861b30103403304732a10b75c9a149552d1ccf0f9912968c6431398b7d48dff48cc7cb7184e76a0ab94ac9a6b0035b91b3eeb2d1326ebddfc13250224538c143fc0dfa3995926415a658db8e6691504050a1a30e34b21af8d12707bc4454f174385cd84c729e2ddfc5cc9178812059b5da4a1a605a2a81642ccc1bc5cf953965f705673b12c5b46ac8c1a03c1001ae4df1c39cc83cb54b10cb7d33cd5108033c268ceeebba6c6ada92882f46562dc658d3525574 +Result = F (1 - Message changed) + +Digest = SHA512 +Key = 3082010b0282010100a677525e1a69546a96dc7b112350d5e4864f0f82e999a714fa9f43ac681517d3975910c2d806bb3ee6dbf5dba1d969b38889e113c2da76eef4412a60cbd89faf35b2bdcb0de36a2cb762cd8f2f29aed9982a9ab60886cc8fbfee9b2ae09c88161e9159d4fc833adc4f80e4bf629d5a9551acce7a3938630c2bf9956097642e3bc60ac6522017841b65c7a25197865e697753b08169853681911443a2b25f1b7c4696f946155b2664b67b40878d3b45c3e0d7034d5b5ee6f5ba8fb3cae7797e85789902cf8f9f86ed3ef25ae0736178aae260fe875bfef5bcde9ec05f11e18fc7375edcd4a5533618e6f991dd48aa3062e6031e291dfcdc6e7fc14ec60e539fcb0204008d8853 +Msg = 71abf895e56ba8f6ae8d0e9e6690c09c759270a73db8c1aa95d05980793537fbfff3472c8d2c34de4abb7e64d216cc952e798314034197d50996a2dcbf4c33485e0b68910baebf0e50ea29bacd3060372bd47b13526ec04bdc81b90dc95a8ac2743b814cc5b9ef8ca9633628bfa4248b55eb7f2d9208e114f4dac69bfe27e472 +Sig = 243c570cd1bd85522e64817361cbb949c83876d7a3609513aebf506fc06750ba38e820232c98acbe00ffa50b36c538560069fd13992ca0df7d9f6d956b883334f1c3af8a74adeed5be15b033d85b207be2fe600a9902d699ccef1f4a8d588672c446401eb390d174d572b918f9b349e2e704775300023850a534cd14e0046e385181d345a01dbd230c7965fffd71d4e9f9bd274d2ef46c556c7332121362e71706c39f08919efa3a4f2f142150c8cef4b30ef788f6fffc2ed2aca0262eba873a251795845da526b78e2b24d66f21d40d5fcbe5542a7553a9178be5a9805bb53579bd108cff733b37640789318db620a6a94444e9203923ae325500b676b14798 +Result = F (3 - Signature changed ) + +Digest = SHA512 +Key = 3082010b0282010100a677525e1a69546a96dc7b112350d5e4864f0f82e999a714fa9f43ac681517d3975910c2d806bb3ee6dbf5dba1d969b38889e113c2da76eef4412a60cbd89faf35b2bdcb0de36a2cb762cd8f2f29aed9982a9ab60886cc8fbfee9b2ae09c88161e9159d4fc833adc4f80e4bf629d5a9551acce7a3938630c2bf9956097642e3bc60ac6522017841b65c7a25197865e697753b08169853681911443a2b25f1b7c4696f946155b2664b67b40878d3b45c3e0d7034d5b5ee6f5ba8fb3cae7797e85789902cf8f9f86ed3ef25ae0736178aae260fe875bfef5bcde9ec05f11e18fc7375edcd4a5533618e6f991dd48aa3062e6031e291dfcdc6e7fc14ec60e539fcb0204008d8853 +Msg = 4b648de2e390677ce1727191498b76d2d2438d0ceddf3db502ade5c5fd815bc70965d42f9b8d04eeb38986445fbe7dd580177c00d0f8a36c24740be3efbf656408e6dd73adbd45b4c7196fb86f40da17b29e91bf91ba518b4c68ea18e13fe7d4cf4d71571f0a71f7a58bf59684f8d5bff04096f2380b8e3b03f14909d9e92c3e +Sig = 277fe81a1540341c9c04fb5d3c8f70c1e72f87fa7d04b93ee54d56d1184c141ec4e125e2e5cfd0acff1055c76697a1c3079c371cce0bd84ee4437bfa1806aa76df2955935331915fff879d87c7372e75e5e8fecc906f9d34a5adc0b75409a87fb6411e2990cd237ac8223f7223444f5d527a115c85b9ba10287f3e825e1dc58eb37c8a9ca055155ff6a5aaa6565690dceef6f647729d071cdd9f0688c7fee8f9293abe658d0e1ef855c86a28d8d0f8f82f72173186353080b84f142f965907377178fc1ea00819d81afc2474becf79e1e3b70c7c2a8407d50795c3131bb6df78720c31b2f8c43f705464d8982043c45f04e339aa1c6f4e26aa7092b3e6261299 +Result = F (5 - Format of the EM is incorrect - 00 on end of pad removed ) + +Digest = SHA512 +Key = 3082010b0282010100a677525e1a69546a96dc7b112350d5e4864f0f82e999a714fa9f43ac681517d3975910c2d806bb3ee6dbf5dba1d969b38889e113c2da76eef4412a60cbd89faf35b2bdcb0de36a2cb762cd8f2f29aed9982a9ab60886cc8fbfee9b2ae09c88161e9159d4fc833adc4f80e4bf629d5a9551acce7a3938630c2bf9956097642e3bc60ac6522017841b65c7a25197865e697753b08169853681911443a2b25f1b7c4696f946155b2664b67b40878d3b45c3e0d7034d5b5ee6f5ba8fb3cae7797e85789902cf8f9f86ed3ef25ae0736178aae260fe875bfef5bcde9ec05f11e18fc7375edcd4a5533618e6f991dd48aa3062e6031e291dfcdc6e7fc14ec60e539fcb0204008d8853 +Msg = 7811a407fe653ad2343d83c0499fc11e2951ef0a4791a3cd9a06396be5f72e783cbbca2cc47002babaf09cdeb70194b532ccbfd24691ae8eb598d59f2e6becedcb4296a1debf417eeddb4d74fb217072091a597ddd0893ff02d6ad61105098db2e90508bd4b8bec5d6e7deab9e651dfdb8210532955e1bc788a908d7150ef8ec +Sig = 3ad1f0faa9a36586154a382a1f2c10e819dc318a68be35f54f95401b0ef2ba5cc895f0d6bde28c8d3b364f60de03ce75a7af29e5807c1eec4cd70624756e2631eb46af010ca8cf93ee7d86a4af3ced5dd2a8a41c1feee6b4572070873939ae7a2ce75193945937461d0064eeba07760c495c5c70bdb04d89951de3f96525f8e44612493d490731e7ef7679a24b0b1e2b24c8003c2f94114e4193d6e54c0af9e870530b008530210ac0b0e4c7c79f379384e1bb319b5f2a0b622517ae5d27f0eaaf7958cb0b41849126075092e86e7e7be5eeacef9a8e3ec595432ef619858fe0d0517871b8b495c01af6f18d4e6d250dbd19280ef4f8a37d1b59a48fa41b831d +Result = P + +Digest = SHA256 +Key = 3082010a02820101009c003978e1f71731e2d1128e1be81bd6c99cd3251672b9c4186497243b17ce523ab113bd4fe397178e6fb5f3090b0680e42cfe78b3928c22da53ef43595b1c5792a2794f86622bc4a997932dc20df9cc429b5010e18d73c71796df877fb66e72d372081260fe7760d46ff916ac74292ee6e1659c2480a22c9522bdfa1beaa71ae2a5581eb0045bbfb7b1d687553cf3cfb061bd2e811e6085d9e4849f30735bb95b34ae40aef5a5eb399331704907b67094b8f418deb76b6ff419031a5b2cbc7b64487b49d418d67747f1609040f08adc42b1b0724869d838bb932511a580ac9d872d5a053f3b61b3f51c43fb2b3d510a696a9068e093eea0670e55e58571904f020333e58f +Msg = c3232d8060a3e3f8687dc05d8879004bf5c3a7030336bacaf4d9ae8c0daa21c5f09bc8a225dba963fa568a038d7fa91b274dad04cb83dd3b0f35900a2b88e46550b9b3133b61c30e09f73d2b4d9661fd600077f7f8e409d2fc5c4f2e97baeb7c8c84d71bc9bd9bc13e66c31def4590bb48e5ee27b1dea6556356d5407ac89dd2 +Sig = 21bfdd610a56fb8b3fba9f3841e7ab9cb2b91d16c7bc3ebacc266271e05eadb6d209a043a29d542b57ad832a3ed03933088abd7b56b86fcc295a95fa66e27f5b9b2c919b82d4165e2bc42b9e46eebdc7cddb29888281250e6954190f8e13b6d9ed6906e8d603520deeeb5cfe4f7e932c88ec1ee2dc9b971a0288bd71a45ce6037d8d7ef2325ecaa573c57ec753916fbb6335e9ab5cb695ec0579b511074a6cac3b21584e5e4532621451641a4a09491c77555972a5d42a627f50ffd490c79e32c855aef0e2859c933321341731e796b2ed4c6c50a98a3f3c6995bb6bd53e52c531b15d042061186677f9158eeaabcf302626c8ee639685c832cf3bc4357cbca7 +Result = F (3 - Signature changed ) + +Digest = SHA256 +Key = 3082010a02820101009c003978e1f71731e2d1128e1be81bd6c99cd3251672b9c4186497243b17ce523ab113bd4fe397178e6fb5f3090b0680e42cfe78b3928c22da53ef43595b1c5792a2794f86622bc4a997932dc20df9cc429b5010e18d73c71796df877fb66e72d372081260fe7760d46ff916ac74292ee6e1659c2480a22c9522bdfa1beaa71ae2a5581eb0045bbfb7b1d687553cf3cfb061bd2e811e6085d9e4849f30735bb95b34ae40aef5a5eb399331704907b67094b8f418deb76b6ff419031a5b2cbc7b64487b49d418d67747f1609040f08adc42b1b0724869d838bb932511a580ac9d872d5a053f3b61b3f51c43fb2b3d510a696a9068e093eea0670e55e58571904f020333e58f +Msg = 0d8235883f37654b35d3566174cf731b5b22a54ac15718f9d8e2415c57b42003d80dc2537e920b37dc9fb21312de8dfa39190f20024c0f9299ffca24d0d22cab795a4b6d132b35d6aa36eb6df856ad06d0257838bd14ce11e6bbb509346d0235b710d7bd462b6b90664109566e5e5ca7e8efe97a39d6dde085be09f2cdac2b07 +Sig = 6530d456e14269bf37a95ab7b2ca4f534a47135052665a2b64e9eff970a9566ff0304029d2844d5649e643212aaa7f1f9103bd5288b1bebb7797cd8df3393373852cfc7001a4257499fbc92444609e0afea095927ebb773b7b666962faf0686a8b173f446fa562e82be1467111ecc38697103cdc1e700890b60104eb35575d25b9565098544a2e26003b3150c9a579c534a44bd0c1569b58d871d6a5af51b5ecf3cb2b0650793ac95a44596f86723c31ce4b3b1365dd61d2bbadf394b16f734608dddf991595acfd0aba42a12095966bc005c67b60776ba104c9681efd38d2e91fd3995588d9ce244c6bdfffb8e0086837946c35627a09a2f83b325af71f474b +Result = F (1 - Message changed) + +Digest = SHA256 +Key = 3082010b02820101009c003978e1f71731e2d1128e1be81bd6c99cd3251672b9c4186497243b17ce523ab113bd4fe397178e6fb5f3090b0680e42cfe78b3928c22da53ef43595b1c5792a2794f86622bc4a997932dc20df9cc429b5010e18d73c71796df877fb66e72d372081260fe7760d46ff916ac74292ee6e1659c2480a22c9522bdfa1beaa71ae2a5581eb0045bbfb7b1d687553cf3cfb061bd2e811e6085d9e4849f30735bb95b34ae40aef5a5eb399331704907b67094b8f418deb76b6ff419031a5b2cbc7b64487b49d418d67747f1609040f08adc42b1b0724869d838bb932511a580ac9d872d5a053f3b61b3f51c43fb2b3d510a696a9068e093eea0670e55e58571904f020400baa86b +Msg = 84b1e3cd7c5d6011c581302e03489fd37aefc841bad659fc81d796c6ddd6a1cd9199f824bada3f70b29b40e435ba306fc2c53333440f233af2048d6474b9fda447c87c6c625a56661a85216543d9fa9b9835120c5ddf6a4242d4da438b5d58c06ee3778fbc042e5cc4e7db9b75cc87c0c2e76cb34b6eb47e39f1844969ea3989 +Sig = 1864eb619e358d7e0340b582288e3290d5f8caf1b6831bfe5978f4ea56d15762247bfcec56e2a44fe11507e5eb6fda0706b7287b09ea770d577cdf660c523a76e2e70952177f0260cdba51efca71148e069ae6540f5c4722a4b4db6336168eea86612b6b4ecf8b5b2e1adf3d4f79c3894c617ae0ba56a930c658f0f55c0e5f2719b4b52b7785c30489ca13c9799ded9144404409f284c41530fe35967c2d844dcb1d2d80c10a985164466ced3a4d74573b175ce7288418b39962d4a34cfbdd43ba5a6b73af0f9ef55946b61bc7d5c0af9ab0e99bc0842edfedfc91e213f021842ccc785cd73a5f85d8aa8371c80151b836651020e71c524f92d3c654fef0b37a +Result = F (2 - Public Key e changed ) + +Digest = SHA256 +Key = 3082010a02820101009c003978e1f71731e2d1128e1be81bd6c99cd3251672b9c4186497243b17ce523ab113bd4fe397178e6fb5f3090b0680e42cfe78b3928c22da53ef43595b1c5792a2794f86622bc4a997932dc20df9cc429b5010e18d73c71796df877fb66e72d372081260fe7760d46ff916ac74292ee6e1659c2480a22c9522bdfa1beaa71ae2a5581eb0045bbfb7b1d687553cf3cfb061bd2e811e6085d9e4849f30735bb95b34ae40aef5a5eb399331704907b67094b8f418deb76b6ff419031a5b2cbc7b64487b49d418d67747f1609040f08adc42b1b0724869d838bb932511a580ac9d872d5a053f3b61b3f51c43fb2b3d510a696a9068e093eea0670e55e58571904f020333e58f +Msg = fcef065e293ecd29ab52046c68c6e940aa0e2d5fce5d4a2b40c516f2a7a198705c301b95218282891098dbeed1c73765105db8532e87ebe53772585115b1585f03df272944853a1e143dd34ddf18d2e1b13ecee7eed464584323cf53dcf6b9aad74351a0f90e9ef1a08b1313f98363bc73f897a4740c5d8c4a1fa37f64386458 +Sig = 00acfc93e41faf5004cbcc252da290b9cf66b56a6a4849c572461d3212cc4cf1021eb96e8651475fac7dc87faf3a5b52923123378c18cb83906d1ee6e53502bf0e89ce66f3cf5a4b7cafa13f2d97f99498c0052fcd640570e5e1dacdc66e24c2a54f02bed338a26748fd17c07bfee5492c4dbe4dfe111932e3153394721b0556a440788a2bcefaa2765ade916653f4aac20d5ea587fde0fdc255dc32c5aa52b05e3ac2db4d7c3a8b02ee1733fd300801d1bb8e8613386f3deef8dd497bfe803523491ab88553db60b03d29c55ff52e71c546873cb1b52bea1853c8f0070d1776545557becb6a11310acfe1be060deb53d16f0dcbc396c1d30e03c4c069c3ad48 +Result = F (4 - Format of the EM is incorrect - hash moved to left ) + +Digest = SHA256 +Key = 3082010a02820101009c003978e1f71731e2d1128e1be81bd6c99cd3251672b9c4186497243b17ce523ab113bd4fe397178e6fb5f3090b0680e42cfe78b3928c22da53ef43595b1c5792a2794f86622bc4a997932dc20df9cc429b5010e18d73c71796df877fb66e72d372081260fe7760d46ff916ac74292ee6e1659c2480a22c9522bdfa1beaa71ae2a5581eb0045bbfb7b1d687553cf3cfb061bd2e811e6085d9e4849f30735bb95b34ae40aef5a5eb399331704907b67094b8f418deb76b6ff419031a5b2cbc7b64487b49d418d67747f1609040f08adc42b1b0724869d838bb932511a580ac9d872d5a053f3b61b3f51c43fb2b3d510a696a9068e093eea0670e55e58571904f020333e58f +Msg = a6a2c5c8718c64105fab8d44fc69d334273aa71e7475d924ce625cfc61944aeab77927eb202f6a33589939da64b375d3bd22f61db010183d053676ebdf3af50ce33c05e09cac237d1e5ea27ceae0acf2120b84a29ed80d702d759019e098ba227314e40eadaa98d4fb215090589880796f1cd7130476c2a6904633ee2b56a014 +Sig = 8ec5b4e7671975686b72eb3930f77ef3622119d0b2ae0618fa52c7410519c4f846c986001d3d82844ae4c13e99dee463448a498a652e9b725ddeb6323b83d5521637be0dee7b224c50dcaf6c7b9a2d26f9b0aad81ac6e4651f241d7a860b51c96ebfc3df978c5373b7846d3139f509dc16726f712c0e61af620b2c6db0955d0ae9cd4760bb9de6151e04bfa19df4d5aca2576f91ee7aba9eb446fee77c604faa5af87536f22fa6e239e898de906642fc6594be9328571b35a3a8420ac697ef993016f78def8a17d13698cc4c1876ee1006d814dc60161214a8f8b6f2a345c8b0c0fc645873b6bf9d2fbace2246f643a6d3a2e0b88929623a2e2a73823f6e325a +Result = P + +Digest = SHA256 +Key = 3082010a02820101009c003978e1f71731e2d1128e1be81bd6c99cd3251672b9c4186497243b17ce523ab113bd4fe397178e6fb5f3090b0680e42cfe78b3928c22da53ef43595b1c5792a2794f86622bc4a997932dc20df9cc429b5010e18d73c71796df877fb66e72d372081260fe7760d46ff916ac74292ee6e1659c2480a22c9522bdfa1beaa71ae2a5581eb0045bbfb7b1d687553cf3cfb061bd2e811e6085d9e4849f30735bb95b34ae40aef5a5eb399331704907b67094b8f418deb76b6ff419031a5b2cbc7b64487b49d418d67747f1609040f08adc42b1b0724869d838bb932511a580ac9d872d5a053f3b61b3f51c43fb2b3d510a696a9068e093eea0670e55e58571904f020333e58f +Msg = 79220b8d86942a13861560882a66fb4c5c926a661b74ad2586790a0636a802d9d1df8320dc5f5fb8d18afdbb72ec4fa45c7903b4df15fe950d5a063e1195be16c311d85c799986c61f3831688a436ed809992e903d2a34932bb6cd5490d7bbd374427209024a878697a66559197342308a7d51c0ddba39670817c7105a77df58 +Sig = 54835466397784e6229228ea1e462b37d77757ba17a6624fbd3279408e89fddab2234f5ee20b56cc7095dcee3cf033e4b04cebb9771997e3b9f50ddea290080888fb406cf1af4b2d14c12be788cbbc6454c52276bf64ac3b3158049cc78986e38413bb09d408f04e8234228a9403eb901d6f2fb21887996fb228c292a2aa99fe8456172145939606eba9cfaae694e5fe824ffc3a5547195e24af5039aa1f1dcac9a9cf54c51099f82cb1a5aacd8c9419d1c7ce880366f1276fae7b9e1848e9ceaa7ef7244e5cb788f524bb50231ef4d81e14d59d3f884dbff575e953a145fc45f7661025e1f6fd95874eba803de03b5fb0a8f5eabdc739fbb91c45ad1c29128f +Result = F (5 - Format of the EM is incorrect - 00 on end of pad removed ) + +Digest = SHA384 +Key = 3082010b028201010095a31458ca41cf7a280fd060660fbecec18b6242b72cf99d8039a890ce07aa5acf432d9b400160374b3626a46c6107cdf51f1e8b519ac26ef169cd75d3c5e43267ff391dd0a93730c39c166fb77c4c5409c19ea252bfc8e990d873368607c8ce032bc0a6968a0a6a5a918d49d35a3fab9a3e69632816026d433d65bf765cda3738e8c12f43e869089296b36ee84704dadc37db62fd18f380ef76334d882809881d6a6dc8a8f49c4595cca6f85e9dd8ad616cd984a27f4938fb9aacfca473f1a4f00b0db47b471f04b4170ea909cced5960d4a3d269de9ad4b2a63e8ab712f1f0f7c3e9ad471e15bcef3614eb4dce291eae0785ccf2399b16b51a84d1df8ab395020400cfdb6f +Msg = d5f5d567512a899c0168240b319e6abcd8b92a8d6e20b9d3ff80a0447ecf92155b8ba15f5743b1c798592c5ef806f7c6a39ea597e116eb0030c354b2966436f93563e52c205826486dcfe7d88c4b2d18d78b4d59690b5fa734cef0aa4e5bf7ca8c060a965270d267a951bd409275f2f99b058a9daf08fd103229daf54ebbbcce +Sig = 672403ce06f1ab0ea42fd043666e4623299fcefead6cd204599102fc8d543d3bc93342fcaa1262d52e6ff344febda6faa57119ee7418cb78a893aeb245f618c072214e9740abfab998a0896a1c9066a823dd62b5ddf9e9fbd7bd6b68437eef595e90e725180b3cb12301a989cb78ea2dd48730521caf4b2754679c4df2d8e2c12b8c8e55f1327fc6624d85555558fad198db6973ab155deb56cbcfcd44d8a61f90400dd3760b19aaba4dc167742bfe1da0d9ce20036c284729e16b8aff5b6ac3121fbae8cd55fc0779fd0ef7b382c85db88b2ae79270b1110875923b2d72d8ed7d37e2bdf5396b158a89fd1ae95c146737db028ad6cbeb0ed43edd421197d23a +Result = F (2 - Public Key e changed ) + +Digest = SHA384 +Key = 3082010a028201010095a31458ca41cf7a280fd060660fbecec18b6242b72cf99d8039a890ce07aa5acf432d9b400160374b3626a46c6107cdf51f1e8b519ac26ef169cd75d3c5e43267ff391dd0a93730c39c166fb77c4c5409c19ea252bfc8e990d873368607c8ce032bc0a6968a0a6a5a918d49d35a3fab9a3e69632816026d433d65bf765cda3738e8c12f43e869089296b36ee84704dadc37db62fd18f380ef76334d882809881d6a6dc8a8f49c4595cca6f85e9dd8ad616cd984a27f4938fb9aacfca473f1a4f00b0db47b471f04b4170ea909cced5960d4a3d269de9ad4b2a63e8ab712f1f0f7c3e9ad471e15bcef3614eb4dce291eae0785ccf2399b16b51a84d1df8ab3950203646e91 +Msg = 6ba3f34bde03e48259723bd599464274df4de2b6f3bfc3b06970b507234a4f0217fbd5e352eb5f783d7138ed204685e4e43a27c71d25e25d4821be9c50f6adbf58d66f98b44bb326386d7f6ab658d177c2dd87c9b8787cd70182f4eb91a83a32b49c870f0b0a26b5d1ced6f56364705400a0c961cd9fda461cfd1e9ced483c84 +Sig = 236f23de25bb3694f5ad9f09224f5ec1e78cd7f371ec50097327026fa53b1689a95eaf54738cb75e5abba87a964d32817fd5071febd84d60c7b11d95e33a7f90f22259bcafb9425cc1a79305a00a1b8ecfc3bfab326b6463ee57d1e435db91f45cf4edad0f9ee50dbe42130cfd1bc424906deab4906571688d1a514d98dd074139d57304c0c2d8a87ef5f8766486da8df827f9e0c81fe3465ea52d1984d738b9fe9368a0d05384e9cb298330671f65fe52062a0d3c4af210ad471bd5ddf9d72787f40ede3b77297c1d3a5b29ccadc574e9001bef89e4ac093986bbdf048d7b63bcc072a3cde800eda63bfa8e068fff4cb9f15b5f98c255fcde6d46f139e4d30b +Result = F (4 - Format of the EM is incorrect - hash moved to left ) + +Digest = SHA384 +Key = 3082010a028201010095a31458ca41cf7a280fd060660fbecec18b6242b72cf99d8039a890ce07aa5acf432d9b400160374b3626a46c6107cdf51f1e8b519ac26ef169cd75d3c5e43267ff391dd0a93730c39c166fb77c4c5409c19ea252bfc8e990d873368607c8ce032bc0a6968a0a6a5a918d49d35a3fab9a3e69632816026d433d65bf765cda3738e8c12f43e869089296b36ee84704dadc37db62fd18f380ef76334d882809881d6a6dc8a8f49c4595cca6f85e9dd8ad616cd984a27f4938fb9aacfca473f1a4f00b0db47b471f04b4170ea909cced5960d4a3d269de9ad4b2a63e8ab712f1f0f7c3e9ad471e15bcef3614eb4dce291eae0785ccf2399b16b51a84d1df8ab3950203646e91 +Msg = f3169de46af85cb510fbb4cf9c0aada9f875301ceafbc818f428a59679e1e6cd203d18a97e96f979efe082e8c43a252ea4c354872caf42e4d99aede1281b5cf8fb9d25f43f6a33a8cc09c6e08ccabb98e09f0e6c3f2d9d5021232f811bcbb4bc4bdfcfadf69d91aa701d88a13ce3f84f75b168b36c9e60c3936c725d9a177780 +Sig = 47b74ab96c333f1b60313998e9bdf5e313534c96c2f7b139f4fdc8295c8e53a1ae275b235a6931c69690ba8f1cd5bf9d3e1a6f8a23c9f026a592ddcfe35dc498ebef292ed49a87b4813ddcf04cfae8aaa6978f629ff58f24960985a452a09439a3aa027668055ac5900d62f5f584f8bdfaaa72489792fc32b6adc9d289dcbf5bb9a278ada1392b42a4e5b9714a1c3af00f937962477fe72b820dd4fce5cd2e25e6a56081d6119df474b7b7586b801680c4ecf9d067f584d79a9cd0f451aa90644096bf9e80bd469727ad7b7ceeb9cba63de2abd423ea96675d8fef64130e357a5d2f67da0fa528fb3ddbe2fd553033e517533c6d1c301c094ce0899bcbbcd4f2 +Result = P + +Digest = SHA384 +Key = 3082010a028201010095a31458ca41cf7a280fd060660fbecec18b6242b72cf99d8039a890ce07aa5acf432d9b400160374b3626a46c6107cdf51f1e8b519ac26ef169cd75d3c5e43267ff391dd0a93730c39c166fb77c4c5409c19ea252bfc8e990d873368607c8ce032bc0a6968a0a6a5a918d49d35a3fab9a3e69632816026d433d65bf765cda3738e8c12f43e869089296b36ee84704dadc37db62fd18f380ef76334d882809881d6a6dc8a8f49c4595cca6f85e9dd8ad616cd984a27f4938fb9aacfca473f1a4f00b0db47b471f04b4170ea909cced5960d4a3d269de9ad4b2a63e8ab712f1f0f7c3e9ad471e15bcef3614eb4dce291eae0785ccf2399b16b51a84d1df8ab3950203646e91 +Msg = 599d4ceb774e4906332eaa216b2fe8e1fa52506f381baa87c34319cc80ac425fdc9ab0af581f779344d71896cad6a5912fdf268056d63a8e867802726c4a3afe64cfa9f5f4febc1e99f36e96c7e56a6a2b58746533940527d05535777bc4dedb76a6ff6554d45ecfbbeb72cb69447f94752703c9d73b517b2b417c85b202761b +Sig = 0745457af52fca56abd808f094951d3eecab89ec10b74dd49d51a9241c3b85972755a1f80bda2cc96cda7cfd549eec820bd2f99920ebef1d10722918adca8d408c3c883d7c257b117842420afbce88159c7ac4f4bf27f039c24c19dd275643d0ead111d5f04912571cd3a7d40e3f83c32b44762eb6d2e2de22ac006643c498ce55f6116463336cfcfd0ccdab250e9931fde68c9796e05b012adfb76359491f26f69ca9d06b43843a4976f2b017643e6cb80b8dba2a01f1b01231ace075ab31d40319b30ad738f62d2b8a1f43ff1bf67f83330fad67f94a39c2c51db23aa775aa43b708ef25c9c62eb565606e4f5002ab15b00dfa829c99e3dd96b454c7448174 +Result = F (1 - Message changed) + +Digest = SHA384 +Key = 3082010a028201010095a31458ca41cf7a280fd060660fbecec18b6242b72cf99d8039a890ce07aa5acf432d9b400160374b3626a46c6107cdf51f1e8b519ac26ef169cd75d3c5e43267ff391dd0a93730c39c166fb77c4c5409c19ea252bfc8e990d873368607c8ce032bc0a6968a0a6a5a918d49d35a3fab9a3e69632816026d433d65bf765cda3738e8c12f43e869089296b36ee84704dadc37db62fd18f380ef76334d882809881d6a6dc8a8f49c4595cca6f85e9dd8ad616cd984a27f4938fb9aacfca473f1a4f00b0db47b471f04b4170ea909cced5960d4a3d269de9ad4b2a63e8ab712f1f0f7c3e9ad471e15bcef3614eb4dce291eae0785ccf2399b16b51a84d1df8ab3950203646e91 +Msg = 73a125e5705e14e15f2446fe326f563785bcde93d2ee46abe4efd9668e9a1e089cd9656b0a0aa08b74a87449ce279068551f3edcc5ad3744cd17bcb5c0aee2b98df92e97f10f61d5eb4595fc7109899b610e3a8ebaaab3800c7c25af2d513aef2e48a7f28d3501c6ac44d19f82dfead791d1fa3318ab606889663dde3d4bceb3 +Sig = 7a7a4e5b349a06dfdbc9ab958d5fb70b650b1eb2f7eb43cfdd7508062efc9ada3ec0739ad95b2066009f760c8c5030e909189f36b0f7756a67a69a38d2db57d0708a4a2e295b165411b2ebce13723bdd9194afb288452d49c585cfaa3148f5f5464145d2d673cb1803b6ade6003a9f25bf27325f8bc4b883ec7cad37eeecde9ea1a62d0b30da841e2446706e72ac2588948b15fd9ce09ecaf105bee8bea71622e2c58ffb9eae9bce35e9caea8ccc7e0c8593128a6656267ed088bc26347b7b249ac45e06f68034b6d39a4e2eba8c6f5c878450654bf36e5e73468413510e7b50d0e63de67cd7ba35d4f2afca5b460cc7277f04faf2fb03fd7c8995c2fc9b7e6c +Result = F (5 - Format of the EM is incorrect - 00 on end of pad removed ) + +Digest = SHA384 +Key = 3082010a028201010095a31458ca41cf7a280fd060660fbecec18b6242b72cf99d8039a890ce07aa5acf432d9b400160374b3626a46c6107cdf51f1e8b519ac26ef169cd75d3c5e43267ff391dd0a93730c39c166fb77c4c5409c19ea252bfc8e990d873368607c8ce032bc0a6968a0a6a5a918d49d35a3fab9a3e69632816026d433d65bf765cda3738e8c12f43e869089296b36ee84704dadc37db62fd18f380ef76334d882809881d6a6dc8a8f49c4595cca6f85e9dd8ad616cd984a27f4938fb9aacfca473f1a4f00b0db47b471f04b4170ea909cced5960d4a3d269de9ad4b2a63e8ab712f1f0f7c3e9ad471e15bcef3614eb4dce291eae0785ccf2399b16b51a84d1df8ab3950203646e91 +Msg = 86843b3170034a9f8ea79a39657a5e7460c50ef75c800dad690c8818cf25a1e85012cdccad1e7a886c4cf648d7478c334898f044a41bdd5526b4fc7d5e3e089c79c43034c2f4bc7b69d0f4ae83a73da7534486b2c865e29d466f760eaa5f961988042b12b66c58a00f9c5d137183bbf8083199eacf4566ab53a4c073bb719487 +Sig = 45dd07f00a1727f2e992cf0fdaff0c233e6a6866128416456fcd2db6030a4f3cd216db9c4cc2bc7440e06081595e9c51f3c81af68166f6b9cfc0ba4491bf1835b1c946d69d0a6b8c39e1eca84a3bf91f7a299cecc1d98e6fa2ec56cd01ffa04d37423933d746295ce669cd8974caed44f45b88cd7eaffbfcbc70353a3b45c53895edb4e6b19a65564ea3ed404506a4b8dced831c2174995b4455797dd2fa3430f575c6ee80b7d74149746b415ffa6613fc8404ae9e5625e1b8e2b74125b341bd1cd8ce2e87c06114f162fe464d299aee6ed0fe70cb4de523c5b0e10f1f8996f3fdfc9379c3267c268cf29823af84fa756b99ee42f4e0ab8b691e5145f43e38e2 +Result = F (3 - Signature changed ) + +Digest = SHA512 +Key = 3082010a0282010100a93cbcd5c69a8e24b6be4f078652e6c8bf6d516b1316e842d5c8e757e387243c4905b37a66a30967ebc6ed6da56f690f60bec090652ee1926526a78317d41cdff392111fba8a6a91109953fe102c8a51e56b3b6f8087dc53e38d57ac31cd7bbc46f6d14bdf488852db296de27200d11dcd067d776af73c10cd044636aa4d9ea5609c75691aa164eb8abe0f187c0286dfa4d1f5f4332e7664c3c572671b757667e221cc2f0a3944926331ef73bcfc58d1ef8595a2bffd240f2397c4bcb69826ec26fadb3a154e58e86fea883d516d21cde6c162ab55fad9c52df547ef0e6b946d368daa97585084e43a32e029908910c6f99b4131c3961d0543fd583608e8a3e30203452b3f +Msg = bdd8719841159aba3f353440ef98efa92cc503da8d00745bd12094c3809bc971cfe3907dc4f5c2ee9c2e172e6a61e8bb0028391e1277f62199777d3d76915d5258c85d9bdf4dc1e0024dc8edae0e7944af3a9f0fd47b13584e47397c5afecddd2032e0d8da451df7383a516703c52bac02a440931a325168b83ad16a7409a27c +Sig = 2e7b28803bbf9d58be8219ace68c020a42a4b42e59c2c2e0faf56ca17f7c6f3a427688f124481308e249e4d579f576dae5743bae68b349f4d04bfc21d60a969b965827a67025bd8220603763cde90a42b4308f2c84bc2c4c8fd5de0efda349e9cad1f47140d01fd27021ddfe16873067213636ad961cc85d79a87231e1019ac4bedf9630e2c31f4b413d98ffeee53fd46ca6d62449e86fe7692b59feb18bd9296291d1bda77bb9c7cbf15bce21aff1c6f1ed9cc95a87378b13eed54d7b54835160f88f7ec710c87eec07c2239b7001bcd4a8428a1a274d1c78d89c2153c46f4ec997df9a19838813cef1381dcaf97bccac39739a3142aad21a966da1be5c471c +Result = F (5 - Format of the EM is incorrect - 00 on end of pad removed ) + +Digest = SHA512 +Key = 3082010a0282010100a93cbcd5c69a8e24b6be4f078652e6c8bf6d516b1316e842d5c8e757e387243c4905b37a66a30967ebc6ed6da56f690f60bec090652ee1926526a78317d41cdff392111fba8a6a91109953fe102c8a51e56b3b6f8087dc53e38d57ac31cd7bbc46f6d14bdf488852db296de27200d11dcd067d776af73c10cd044636aa4d9ea5609c75691aa164eb8abe0f187c0286dfa4d1f5f4332e7664c3c572671b757667e221cc2f0a3944926331ef73bcfc58d1ef8595a2bffd240f2397c4bcb69826ec26fadb3a154e58e86fea883d516d21cde6c162ab55fad9c52df547ef0e6b946d368daa97585084e43a32e029908910c6f99b4131c3961d0543fd583608e8a3e30203452b3f +Msg = 3858011a054c52e3b659066f55f219dd58464bfb22b8c55dcc90ffac24f0e141f60929f28b8e0c2c7069204378ae790504cd1295820b6f77343381e73388ca6fb3ffc2b888ab78a1ea797c8e751dfd02734c2f715e2cef4fa109aa6d9f497b85f6a29314058ade67acefe4f95229edfc2d2d6836bd038d0e9a7a42e7701a3bac +Sig = 311e1025e0a8820a5ddc4f632628bac218baa94fb32c709ff70db3ecb3a1957e31513fdbcf15d83927f5840584af5ed90b350833f50cbeb718b12c56fc260b41ef627776bf1c0a67f39be26cb0045e6c2b60216338a085cd867bc5d9e744a27ff77baea199eeb669a2e0096256d081b2313f3b79ed180712ef56a0b549eb299b96029fd93e4f68bee5a0e6c8ee44ddbb06b8843fd4365cbabb229d2f8f2a9881974adb406e6ffb39eba8f20da38b558d0069f45f91c85debf6872a4ff36d5a79284050faf42b78b1770b176c88b7fabaca9111e511dc73a2bacb30abc3a841bb5b0f0b844e756dbfd3f5db458c47861df00b085a06e07ab4e788a080483ccbe4 +Result = F (4 - Format of the EM is incorrect - hash moved to left ) + +Digest = SHA512 +Key = 3082010a0282010100a93cbcd5c69a8e24b6be4f078652e6c8bf6d516b1316e842d5c8e757e387243c4905b37a66a30967ebc6ed6da56f690f60bec090652ee1926526a78317d41cdff392111fba8a6a91109953fe102c8a51e56b3b6f8087dc53e38d57ac31cd7bbc46f6d14bdf488852db296de27200d11dcd067d776af73c10cd044636aa4d9ea5609c75691aa164eb8abe0f187c0286dfa4d1f5f4332e7664c3c572671b757667e221cc2f0a3944926331ef73bcfc58d1ef8595a2bffd240f2397c4bcb69826ec26fadb3a154e58e86fea883d516d21cde6c162ab55fad9c52df547ef0e6b946d368daa97585084e43a32e029908910c6f99b4131c3961d0543fd583608e8a3e30203452b3f +Msg = 6883a018b48af70d2875a7f5cbb5a303d7338b6d76f988c3cd2f787f394a4bddd880aced4c7fe4e6bb5efcbd1ad422f6aca84fbbc568262bd45e1ef4a0c0e324d227fa3cb442a48638cc06a93cbb867b0cbb781629dafa2e49851ca29eb345505b60d22e753dff97a6a60be2b8d49739005450a829b7cd75338cbab0ba8b370a +Sig = 15be3fb200858d24ddb7586470ffe706eb299da157880a68aae79ff20aa92eca298eec75ac4ada285ecabb10479fa593ee72c585aba707f45599de0dc792c6e3390da5729ae5506100b31c617ee12445093a7593bbcd0e5a155fb9a41cf332c9d65b0d8f077fb417f027eaf728c5c326bddd7be7bf3e69a165c57759337105b94623ee203641ed2bf58f1907e3413b00e08d54a10bb645175449f02da9366b11952364c0328fff018723c30625836a0cdc7a13c220428d03efd625fce63f022b59508fc68ed4d16294111fc391052705ec115da4ead8caf5c50af586ba4dbe1b29d04452f947b5fe9e16a798f5d00094dfe2ba910e6449bd52d3f938c045ca9b +Result = F (1 - Message changed) + +Digest = SHA512 +Key = 3082010a0282010100a93cbcd5c69a8e24b6be4f078652e6c8bf6d516b1316e842d5c8e757e387243c4905b37a66a30967ebc6ed6da56f690f60bec090652ee1926526a78317d41cdff392111fba8a6a91109953fe102c8a51e56b3b6f8087dc53e38d57ac31cd7bbc46f6d14bdf488852db296de27200d11dcd067d776af73c10cd044636aa4d9ea5609c75691aa164eb8abe0f187c0286dfa4d1f5f4332e7664c3c572671b757667e221cc2f0a3944926331ef73bcfc58d1ef8595a2bffd240f2397c4bcb69826ec26fadb3a154e58e86fea883d516d21cde6c162ab55fad9c52df547ef0e6b946d368daa97585084e43a32e029908910c6f99b4131c3961d0543fd583608e8a3e3020334ddb5 +Msg = 20075fe0b26832c234a861a77078a8e9a42be3862ac4d0d058541566a68385620e6c9fd4b9ae5770d7bf1a83cf840c2c981f94c866091aae8a600f1d93822e72bada029e7dfaa9d889ead78fddc01ea32d716cd484e7d57b2e549278d5c54a6beafa91274775af6312d1a2b3e45566b72ac97392cc88889e0dd7a75fb37560b5 +Sig = 9166e91b18c8518760131ea0eeecc443023b61148a1d42030ed09d509d4c02cd0068142fdbc6e56073a68f5a942c0c93a7f90882f160522ea005f4afd34453c8c1b1d3a4e5204d0f9b797bc00b84d0dd96e311394f089567e45ecd0c795be010e7fb24e46a2842e8c7dae9d2c760fa09e20a29a623e6c53e3c436d809032b99ac4a81e63ba95a356f86a62dd6abbb0aac1d0759e44ccbfe225f5d206aba8dc7261daa9451ee1ba04de1172ad80c08f0709d2012ad8ffc8c5152508bc1e18ab53cde79ca50da9eee9b3b5229d38015f7e18f03612ad6270727be16fec06a5d9230ece777ff6936a3ae8f3a631e3e13f930256c3903d963ece49c5a10b5a6da47a +Result = F (2 - Public Key e changed ) + +Digest = SHA512 +Key = 3082010a0282010100a93cbcd5c69a8e24b6be4f078652e6c8bf6d516b1316e842d5c8e757e387243c4905b37a66a30967ebc6ed6da56f690f60bec090652ee1926526a78317d41cdff392111fba8a6a91109953fe102c8a51e56b3b6f8087dc53e38d57ac31cd7bbc46f6d14bdf488852db296de27200d11dcd067d776af73c10cd044636aa4d9ea5609c75691aa164eb8abe0f187c0286dfa4d1f5f4332e7664c3c572671b757667e221cc2f0a3944926331ef73bcfc58d1ef8595a2bffd240f2397c4bcb69826ec26fadb3a154e58e86fea883d516d21cde6c162ab55fad9c52df547ef0e6b946d368daa97585084e43a32e029908910c6f99b4131c3961d0543fd583608e8a3e30203452b3f +Msg = 46c4bea2eae66ba40f3a6223a28a9756d7c980ea6e4976e2342e5fa1cc238a45af4bda37727a270048a6e15fc798f698efe7f60e682776140b5eb201a4b77682f67b3e35003c9c737f54da6db48ee07a672259af2ce712b1e5c4a2c788675033233a31c31d9391a3be2c9475f1d21da34961eff443ef135ecb48791c019be200 +Sig = 85f33d22d92f3e4f31c5fc0f17df916ec770903445f73536bef61966918efd0b380b9933d2864dfa10f5613d8a232412e5b3db44717eb576fc180891800c5d11597d2d09e477d0392740d700408f3482da6f8d9bac4da6faa220ca3cfd2287f5ed8654bb8dc8ac45e09e52e93bc78d8cb4e08d76e15cfa78c51852c93d31d64417c29aa7e22411746c280e3e275f71c4742faa0cece8e540d1b8bc393db120fc14244a2577650b514c73dd1e5391da76aaad375f56a3cb4e0ca942bbbb542213b5a38445cde0dd9eed4f7515c6c58251dc94c25f7dd929d714b2060da252584af84b82013f924fa91700d92523d69c96e0b0f68203a977affa92574cb241c0c4 +Result = F (3 - Signature changed ) + +Digest = SHA512 +Key = 3082010a0282010100a93cbcd5c69a8e24b6be4f078652e6c8bf6d516b1316e842d5c8e757e387243c4905b37a66a30967ebc6ed6da56f690f60bec090652ee1926526a78317d41cdff392111fba8a6a91109953fe102c8a51e56b3b6f8087dc53e38d57ac31cd7bbc46f6d14bdf488852db296de27200d11dcd067d776af73c10cd044636aa4d9ea5609c75691aa164eb8abe0f187c0286dfa4d1f5f4332e7664c3c572671b757667e221cc2f0a3944926331ef73bcfc58d1ef8595a2bffd240f2397c4bcb69826ec26fadb3a154e58e86fea883d516d21cde6c162ab55fad9c52df547ef0e6b946d368daa97585084e43a32e029908910c6f99b4131c3961d0543fd583608e8a3e30203452b3f +Msg = 25e9e6c39ee6f5c455d81f868713362929cd68ae87300aac2bae94440095ec56b7e3e7f56a5b0d197fd89c94d0e2d048087f6296504b4e1a2ccbda959fffd42a96361bce842661fa493c2ea25831286b19de93198c5114463020ba5a23fd3eb78a8b8a34337179cd79acde996829c7fc2293031d816ae19afe553b7bd2b9b365 +Sig = 2e0b30ae35777c9f951b22740fccb88fdfa94e7d139c9eb105be1a1ce542f6efdf4eb3d1ab0b2342f8e354a0878e31f0bdec1eb67ed19491a086065af7e5188ed0b95e0dc88812f66d6c726fd672e03652432f85a9fe4766a7c315c0c695fc37c45ff5441d3177c4181f01c243ad3c9614e4c6f4f8b879ca8167a7790aca6b34c74936cba58e64cc4e32ffc8ad6c09c48ac59f1eb18dd11871ffccae98c465abd5885bddf59dcec5ddb31ce4ecd86bf6af207373a912b2717e726ce9ff555f3502e8cb83e287cf0f7c938cd4b26f075fd50e4127555ade94c974a4cf604ea5c5d9e94ce91fcb9a2bfc8743c06e69ca41ef029881c3d64078cc6311c694dee627 +Result = P + +Digest = SHA256 +Key = 3082010b0282010100a6754738bdf94dbc846ceb937a3896e747d5c6222453a83f6c86310e5819129613f9857d5e4a06bc5d927bdb011d23d8219549ced82c20592bdc419deb67fe43da87fcdfd01ac1acb07e513170c45d1e058fb56d8cb090a7f2565381785c4478362b253d47e056053516be15f448878d01c9dac06be45957882ccffc5ddaf06bc131c866349668de950e9121b134e5ae1c29815473a20028b9b7ea64d9dd8253a518b766dea714f7b37185a1d707a21cfa526a7d76f55119af728626b77e5b66328c2b37ec78be56380a4cd3900fe6a757f21b5728d31e5f1344aca933042b99240f89dc09e76a03678b402780bf64813c339e79893a3355674ff4807b200775020400a54611 +Msg = dc4c136c805849fe77b4b381e4c6b22a3ff69947a9b5aa6b7cbe42cb279c50e8396d0b6ebbe5e55cc396ba66466e4e982e81f63bac0895fcd0aaca4b57fb6802c4432747b28099b368ae5fb4ae459c2fdf04aa6a40ed0c2a9091a418e08d2669a555cdbe0c304d498d840832c35484397b071d9c0b6bf73be5f937fa6b5b7367 +Sig = 723f89429e5f8443defd528d57798d67548279cd169d185a0052e09472e1b37c313250136b2a5f8910e31229363515ad674ca9489d6c7ca7974277ba323110c152f664a79cfdb3453d4cfa6edd124f81384daae9b06f24f3599884e13db024393b5e211ca352149521eb37d29902de0c4392b44bcdf79d2f3792cc0a7edc3995aff9629719507a2bb35eaf2be9a88b74551a068e6e556d78f1662f0a78cc29be00acf9af7ba491940b8a731a3af7003654f15205c6171d009a015b68d423166e971cfce113bf2c7edae6af28a500d43e2f3bcb3b8dbe940eb0f8bb1a077bbfeac4cd20dbfe058605c31b3d1be79aaf1d051e27daab45597ac2838763e49caebe +Result = P + +Digest = SHA256 +Key = 3082010b0282010100a6754738bdf94dbc846ceb937a3896e747d5c6222453a83f6c86310e5819129613f9857d5e4a06bc5d927bdb011d23d8219549ced82c20592bdc419deb67fe43da87fcdfd01ac1acb07e513170c45d1e058fb56d8cb090a7f2565381785c4478362b253d47e056053516be15f448878d01c9dac06be45957882ccffc5ddaf06bc131c866349668de950e9121b134e5ae1c29815473a20028b9b7ea64d9dd8253a518b766dea714f7b37185a1d707a21cfa526a7d76f55119af728626b77e5b66328c2b37ec78be56380a4cd3900fe6a757f21b5728d31e5f1344aca933042b99240f89dc09e76a03678b402780bf64813c339e79893a3355674ff4807b200775020400a54611 +Msg = ba85e1f4f9203ba8d3eef645d7923e10c614080149cc5ec6e282f70b23d30bf91ed665fc1c00baca924539a1508063cffc151d78bfd504943e220037cc531c15dd5a9545bea330458440d13f43444a8a806c7174e805753f42097269a28c4231df56975648d246229327e6a716a49a493a612b7c2c235acfd581742a0d452653 +Sig = 90bb73e761dafdac0b38e4ada5deb5f713ffcbe119ee7af2152ffb3664ed8b7dc11815fdd39f398050ef8d901f836945a89dd0c71ace4b60979ca7e426f676ef3653d7f5045afbf7f38af3eefea2bb2a34ebad8ba029874995d24e98926faffcc79f110ba8f9de35b48829197634f0d842a8ef0dedda72807df0676e08c6b8f76124ae2994151c0379c21dcf3ee33297d8b13eaa74511ec7edf8058dea5d5ee4a6d6701d0700aed62ebe6d69dea7d0b79d01fb5fedb4e291542592e977fd13ad1d49d3c9cea4abaaf003764ad0d3cfd75cae41fdd740e6c17b36831a8f88fd8f9432f45d2bd529291c58215c221d546d71e78a4a4787630af5692a43e1c83af7 +Result = F (1 - Message changed) + +Digest = SHA256 +Key = 3082010b0282010100a6754738bdf94dbc846ceb937a3896e747d5c6222453a83f6c86310e5819129613f9857d5e4a06bc5d927bdb011d23d8219549ced82c20592bdc419deb67fe43da87fcdfd01ac1acb07e513170c45d1e058fb56d8cb090a7f2565381785c4478362b253d47e056053516be15f448878d01c9dac06be45957882ccffc5ddaf06bc131c866349668de950e9121b134e5ae1c29815473a20028b9b7ea64d9dd8253a518b766dea714f7b37185a1d707a21cfa526a7d76f55119af728626b77e5b66328c2b37ec78be56380a4cd3900fe6a757f21b5728d31e5f1344aca933042b99240f89dc09e76a03678b402780bf64813c339e79893a3355674ff4807b200775020400a54611 +Msg = 284748185ce9e8eb0f872623d43950277e53f59b362f9b40ca2db01548f7c3c3cc0af4379672a9915fd4833dedb2915fe6ebc375e281a138c39f3cc249db65f6e1b81e1dbe6f4ecd2befb90f20222ec013720238108cbe2a0c6315cb77781937105aae10fd683e681bdeaee193109112aef09c2dead65adf4d812178f959454c +Sig = 49193eb45d4d355537d9bdf3bd2bf0fad9d7e33241172d231dea6ca7c9d7bd2bc3ed85285bf01bf379da0db4fc04cb7e53cbbb38695fd689bb73f818bd4e3fbc042013f8e002beb92847dd0d5fee9867cfa3fcf76f3f648cc36f4a67e295aff914f796cc0cabfd4396fc6cf171f468361ad6ecef2023b0a23884880a17ada5372c7cda32cc1e3b986451219d7a171e6c6d5608c3dbe55403b4b42f6eb3f87948d0d72f51de963ed80033b42b5e7ba76c6fc5f74b9a5249b60bb507dc86ad53f5b9b710652a2486a3cded83e447a4c114c4dccabddc51787c19687548c4ff157d887c7886b19ff85543c7f8340a6fee320ba49e02c463c8bbe10d45805c67cb6b +Result = F (3 - Signature changed ) + +Digest = SHA256 +Key = 3082010a0282010100a6754738bdf94dbc846ceb937a3896e747d5c6222453a83f6c86310e5819129613f9857d5e4a06bc5d927bdb011d23d8219549ced82c20592bdc419deb67fe43da87fcdfd01ac1acb07e513170c45d1e058fb56d8cb090a7f2565381785c4478362b253d47e056053516be15f448878d01c9dac06be45957882ccffc5ddaf06bc131c866349668de950e9121b134e5ae1c29815473a20028b9b7ea64d9dd8253a518b766dea714f7b37185a1d707a21cfa526a7d76f55119af728626b77e5b66328c2b37ec78be56380a4cd3900fe6a757f21b5728d31e5f1344aca933042b99240f89dc09e76a03678b402780bf64813c339e79893a3355674ff4807b20077502035bb217 +Msg = a3c2ec4c47f444bec34c15ff25f2f811fa94f9a5bf05a5de982a6458451609695174a8a68c25a7a9bc2b181290c646ccd5dc8e92ec9e71b17c69e70f64eaf56cf48681e85cf966c5643dc46f5ead99b9596a966a98fe2bf8433fe5935b76f965f3c121199eb6a69a2449be1d79f01961ef05b735aa6bfc3c547406ed13023edd +Sig = 039c1de64720207c408ea9889471fda297c7b3828e46831ca5ee60a938ba13a7ac524cc394d5ea12d89c2cecfb06ddcc6d86994ebfaf84eb91f39ec470898d89cbc55a12dc47e7be7e0f389dd12c5e59a32d5ca6a37a3e6456fbb8c8c8101725cc3d529f5d1be12de765750e5ee632e43031656442ab0e49f9471cae87dec5751130a2622ecaeba85ef337fa31c472d6a9696231123db350f5a390c8d7ce1f1a839a4c674aee4e7af60ef62e689117fe645e4c322f20373b9fd75dc8606e70d659094f2d2c98108c6c32576adda57ac0b30c47dff442b0901448c68aa1afee4879eddd84d9f2f954971249d87811219e433f3d0d5adff57133d0e9c12f82deec +Result = F (2 - Public Key e changed ) + +Digest = SHA256 +Key = 3082010b0282010100a6754738bdf94dbc846ceb937a3896e747d5c6222453a83f6c86310e5819129613f9857d5e4a06bc5d927bdb011d23d8219549ced82c20592bdc419deb67fe43da87fcdfd01ac1acb07e513170c45d1e058fb56d8cb090a7f2565381785c4478362b253d47e056053516be15f448878d01c9dac06be45957882ccffc5ddaf06bc131c866349668de950e9121b134e5ae1c29815473a20028b9b7ea64d9dd8253a518b766dea714f7b37185a1d707a21cfa526a7d76f55119af728626b77e5b66328c2b37ec78be56380a4cd3900fe6a757f21b5728d31e5f1344aca933042b99240f89dc09e76a03678b402780bf64813c339e79893a3355674ff4807b200775020400a54611 +Msg = a14e35290344465d6d2f43688a663ee418f80f13e1dbee22ed4641aff65bb28a1c0985b8da3128be39070c1c43bcb417bb5a0cbb0beffb217eed3beeafd1691c420358fdd1fdab7c29b0a3a7b723356a3d5e609dc986bd42e8495807177dbe137a0357fed1f2f621a7f1af11cce5e96606cdb3c104e95c0d93223d0415a6daf5 +Sig = 93775fe8676f4e6ed580f3db99e0697e15f8e0ad168a9321cfd004e6d0bd555bda6483f51b1df63ad78f28a3638e70d230c5e654eb4c86c2c1889a06e28e2a640210523b90fe14019d03d0a3b14c7608614fd88a84ba2c68f7c0e01f9502269382367a07f2d90ee53e15abcd584c56de4602f7573f493e41670026fefaa6e12c615d19d1b2ba25cd0f48b6ab20a8bf809dd15ad9172bc8823302993b51f0ae5f89e5c05ee0dfd91f8926abe7fc64c7694613a996be5728ba3c6a4d2387331c5d3b21377f9734b587fba180577aa6cbba1f4a2483e4e46a5d7c355b4088063d32a10c99bc654677eb08a9b57ad40d88d378a8111678e8dc60be3c789a0639c056 +Result = F (5 - Format of the EM is incorrect - 00 on end of pad removed ) + +Digest = SHA256 +Key = 3082010b0282010100a6754738bdf94dbc846ceb937a3896e747d5c6222453a83f6c86310e5819129613f9857d5e4a06bc5d927bdb011d23d8219549ced82c20592bdc419deb67fe43da87fcdfd01ac1acb07e513170c45d1e058fb56d8cb090a7f2565381785c4478362b253d47e056053516be15f448878d01c9dac06be45957882ccffc5ddaf06bc131c866349668de950e9121b134e5ae1c29815473a20028b9b7ea64d9dd8253a518b766dea714f7b37185a1d707a21cfa526a7d76f55119af728626b77e5b66328c2b37ec78be56380a4cd3900fe6a757f21b5728d31e5f1344aca933042b99240f89dc09e76a03678b402780bf64813c339e79893a3355674ff4807b200775020400a54611 +Msg = 555400784d0566105b91dca7f4f0849d832d51f0a3c7d3b9925651fae271199672d014a19dae9ddab1719376a38dad2001a60e3d27f51a74b6ec876e421db7da4b5845b56f13dec8dd0f52720d39eaa7afcffd39e1c3be56a4645853913b3da7c833ba3b2afed0e1c8b33f219abce33c75ef436b37fb68684506eb2f37945206 +Sig = 6dbc3049603abc4677bfce12929bcca60bff5350809ce3f98259ddb72967faa076bf02206c9bfcecdae3421c66f2eaf846b4effbb5e6d774e000c1f1f7c1cf409b98f5e0ca13cb2dbc5b1692c6bf7e54a743e4b24c53451387f277aa66e16da87246d3ab7ba1fc5ab1a9029546098d12d1a45293860e2c8f4838148c89921467285b0f6c916f3b0bcab98dd01120055ad1acf9ce18a2f276eb15aa6f9a0fe05652aec728f831063fe6c7985ce3be11377703f76b4904d292598abac7be35bd1409dd7096fdc851abd2b20a1883f4f915309ecf507ce76dc9a75b36394c6f1fa6685857538ff3b847affb483a670969ff59c8de0391ce73bf1e85601d6bce92c1 +Result = F (4 - Format of the EM is incorrect - hash moved to left ) + +Digest = SHA384 +Key = 3082010b0282010100c5c92cfbb60bff3e7f9499847e869a4bc37250994789c2958ac2f6a168bce2a1915d38725d8596cbcddbd463c2a46a52561a551f8f49d527eecfbef5589030891d9d90090fb35e43e8620c7fed4a056cd1c4a56e6134433030fe8027d1819c09638e43e359c7c389ccd1986457ff5e21673808cb436608d550d62120d9bdabac419cd6249fec945f10711874f10267c66320c701da90d7354b23e1646b89b22cea44d9e67c706ffc04a57927a5c9157cb049b1090e0f86d6cdaff29570cc629fef0646f9e5f8a7dc67c24052a34b91ab08b2e83b141cd0c098e35cbbb9fd408e7e107932128f6eb58e604764a7fe00acecb9b03203a24c9a760ca0d8a5886023020400a26a2b +Msg = fbf1f99265060ab82e3cf1a3cb86ea71748f05c4d69e79c209bd3b61c11acfe1c8ad5f9aac1b0af7b5db7ec31997c9a373d56ce472d6b177cebe3f3a81f6ec7a33cfd2b5f668a5a433d14478e4708d6504a4765d44a9591e00bc906e717f42a5249e7c6dabb384c692676a4d95dadfbd0f464ab6b6df19bd86fd5585fb7c7a6c +Sig = 89e152374ee953c4d9e69e29c3100f0168eb71d0f5ad31f6eeb52ab6caa465ac028b81478947fe08765d77dc9d4e75bbe2cfd14f25124e42f7bcff6512193cfe3ef9dffbf07020cc5e4ab0b0c44fcc4b2bc8285f16fe08be89b432fde26b0498c9ad46be8bca8e1354c39b571a8e30f07aec84a1fc9d1a8e239d79223a6af22b4abfe36ac108291503a4f557a7bae28b25ceed47fd5b81182cf391ea409de7ba1eb2b404d4468eb2b47c2930845e2e9199fff4f0c838e3bd5f3a0bc798fd6fa4be5e962070cb45d01a84170638fe2234e8df928777213a87be0adee56b8ae514cc05c5d52f872416b1ea2112e76c364ce82ca33027e0fd1f8c0424276659c08c +Result = F (2 - Public Key e changed ) + +Digest = SHA384 +Key = 3082010b0282010100c5c92cfbb60bff3e7f9499847e869a4bc37250994789c2958ac2f6a168bce2a1915d38725d8596cbcddbd463c2a46a52561a551f8f49d527eecfbef5589030891d9d90090fb35e43e8620c7fed4a056cd1c4a56e6134433030fe8027d1819c09638e43e359c7c389ccd1986457ff5e21673808cb436608d550d62120d9bdabac419cd6249fec945f10711874f10267c66320c701da90d7354b23e1646b89b22cea44d9e67c706ffc04a57927a5c9157cb049b1090e0f86d6cdaff29570cc629fef0646f9e5f8a7dc67c24052a34b91ab08b2e83b141cd0c098e35cbbb9fd408e7e107932128f6eb58e604764a7fe00acecb9b03203a24c9a760ca0d8a5886023020400b2b5c1 +Msg = f2280564177a0b97e8089b77d7d0cc8ed54849a90d44a7dcd319f5c6d70394169fc4494e348e90c81b2333f6863b1cedcc26672517b2bc7a5c4fdc77917179d41a364b3d844960567506b4fbe3df01cc85fed8e9872bf1fa82f1c073abfc48164bc634b96f732449e0f9450f55832432e818c47dc777ee632c46c8408f6ca9e2 +Sig = 7f65da249423b1406aebe4ca1253075588b101d47207acc5dfb7198dd45548ee71ffbc1bce87e7befd256ae20250208c451bb3a4dabe87c0dd67601ce21a49b1fe723b224d02c7304876e5b2f6804f76d1d57fea8edb951b536c372929863cca988380373af61402e746f71103a9d012d0db121c4e2f636e44b6457d16d12e8b493bdec5d05fd311b502e56ae99071d9bc62dcae68b27f8db50d030963e2dab44e4215be69694a55bb113a8c43d3c2412af0ba055ca740ca628a6254add0e0cc51593cd9a283cc70303caaf8e543ac71bae196f208cd4c9373e2810c94029da46b78b421d6aa8bb00bd83c474534bbaf9629f53bd2df3346200631f7cb9ed4a6 +Result = F (5 - Format of the EM is incorrect - 00 on end of pad removed ) + +Digest = SHA384 +Key = 3082010b0282010100c5c92cfbb60bff3e7f9499847e869a4bc37250994789c2958ac2f6a168bce2a1915d38725d8596cbcddbd463c2a46a52561a551f8f49d527eecfbef5589030891d9d90090fb35e43e8620c7fed4a056cd1c4a56e6134433030fe8027d1819c09638e43e359c7c389ccd1986457ff5e21673808cb436608d550d62120d9bdabac419cd6249fec945f10711874f10267c66320c701da90d7354b23e1646b89b22cea44d9e67c706ffc04a57927a5c9157cb049b1090e0f86d6cdaff29570cc629fef0646f9e5f8a7dc67c24052a34b91ab08b2e83b141cd0c098e35cbbb9fd408e7e107932128f6eb58e604764a7fe00acecb9b03203a24c9a760ca0d8a5886023020400b2b5c1 +Msg = 55c50839aa7d0321a6a85cc3f55ba7f6643bc6a18a8faf73ae9a70d4e527701b7b65f70194f5f0551342eef2bb116eef94595c159154d8966fd639fbe0de525fe96af5db8990b6419bcbf10dfd930f98f230048fc5cf1ca4b0d6f883fb75d308687d0bafcf76dc4c06ec6efc0309125b4569c8f7702906053741b4537e147b7e +Sig = 0b853828fa2089ce0d1955d52b20424748a4b227b56c557ad63782471cd0462295cadd808c5250ed2f11e7d2754c8734fa9d13c8b96496eefa515f3f127869bf42fc8c6bd0ea0247863b9c56747d15b16da322064f7cb723e2eacb4457c241b3f84a63b7bc307dbdd63b4d755b9b4a6c0b7590e5c1c7c5dbf9ba61eabfc29a21944ca6166e56e01a42a94b5d8b898c0fd073b03ea998f35e26289454012e62bb58222fe9a03c9b0a562b9b16602c7794ba835245a1401b8e3ae28e00541cb7a9aa8335de46d063739e8c71999b65f7c8fec3701a46bf3c60139b5b780bdd08c679117e14136c84c93fe403efbf346213ef4c85bcf3e2dfd44a6b616009ff47b4 +Result = F (3 - Signature changed ) + +Digest = SHA384 +Key = 3082010b0282010100c5c92cfbb60bff3e7f9499847e869a4bc37250994789c2958ac2f6a168bce2a1915d38725d8596cbcddbd463c2a46a52561a551f8f49d527eecfbef5589030891d9d90090fb35e43e8620c7fed4a056cd1c4a56e6134433030fe8027d1819c09638e43e359c7c389ccd1986457ff5e21673808cb436608d550d62120d9bdabac419cd6249fec945f10711874f10267c66320c701da90d7354b23e1646b89b22cea44d9e67c706ffc04a57927a5c9157cb049b1090e0f86d6cdaff29570cc629fef0646f9e5f8a7dc67c24052a34b91ab08b2e83b141cd0c098e35cbbb9fd408e7e107932128f6eb58e604764a7fe00acecb9b03203a24c9a760ca0d8a5886023020400b2b5c1 +Msg = e4ceaf62ba10e317e1001d8a6a008843880790159597ffaf56ef666d8081bf747ba650fd6591d3f15a81d3b7f33b59490cb8c88ecb1b06e4dee6dcfb036ca0eace8a117ca79282cb12883b1133911cba91a883be1a93702d6715e70c4266965f65e0b88785fb39ce8f7b1b4132e818be9d3f894d8ae786b37be64f454355eafb +Sig = c269b61d34cb9814934aa8d2eac38f5d941d7b69e1e0cdebea5f275f9fc4a94007cfde1b33a0f9cec3d2b60c6b6675d8a91e7a3251d78c31943524ba75824cff10dee098205f0c84d0f941bf1098785597a88c10058f2c857f85e53a205de7cedc10ad3f1d2abe3cf7c61382c14eeb6d7b409f690f9690fe9b72eb84619fc1f95a8fab7bf9a35248d7e1c89559798c0958a75b85fcaf143b41c3a23864a548026d57209ef64c2d6d61bf9ac15257a531b10fcc06fa97fd6e3fe1a882bce6fd2b8eb5a6267835dd8eb0b5e3e21350f6650de66d27c719980e98ed96006115caf94c061fd3669dc64653843853269b1b6df0515cf67f3161024ab3cd99a4ff5f16 +Result = P + +Digest = SHA384 +Key = 3082010b0282010100c5c92cfbb60bff3e7f9499847e869a4bc37250994789c2958ac2f6a168bce2a1915d38725d8596cbcddbd463c2a46a52561a551f8f49d527eecfbef5589030891d9d90090fb35e43e8620c7fed4a056cd1c4a56e6134433030fe8027d1819c09638e43e359c7c389ccd1986457ff5e21673808cb436608d550d62120d9bdabac419cd6249fec945f10711874f10267c66320c701da90d7354b23e1646b89b22cea44d9e67c706ffc04a57927a5c9157cb049b1090e0f86d6cdaff29570cc629fef0646f9e5f8a7dc67c24052a34b91ab08b2e83b141cd0c098e35cbbb9fd408e7e107932128f6eb58e604764a7fe00acecb9b03203a24c9a760ca0d8a5886023020400b2b5c1 +Msg = 71ff5c8bd950fa414c774075da8ef7a1a58165bf4fb7670cb1f5c00cd07fb1ce0c80ca719babffe73623fef91298c08b12b35e223bb527a3685bef5e3f04a94a63153992eb9d83511435c89a322b32bceddfadc4a96cf943468bfd510ab55fd1db8851f7b26cae084c764561238d75bb9ccbfaad82250672b34f93ed19daf8ea +Sig = 77b82998fac61f387b1a3264bd695ea3fff605bdcaf4c2d3a57f87f3f425134b16711c7812ef1a6c7a5d191fed835b90769883da3e7dbc81e141e3a477cee00b1283e80dca67998835ef33480caeb10f5eb02374cc38129156197e81ffdf36a09e4c22ba30adf9760c441b9691925a2233138f93bb0283be4affec35094f9866e1de3ba4a7c3ebacf88abdd8a1034e968d104235a805c372daeb7b7844ff292bf1e02f3fe8912a28d92e0724f285410161f4fc8c9ff8e0ae91feafb890de775f874de9c8fd990fe77c21525d55f882c432060da56561811cb7fa2a7ba4ad907faa5453d1c2a8834eeeb7400f17445d59a3344fa64db8ee9e97020c5158def04a +Result = F (1 - Message changed) + +Digest = SHA384 +Key = 3082010b0282010100c5c92cfbb60bff3e7f9499847e869a4bc37250994789c2958ac2f6a168bce2a1915d38725d8596cbcddbd463c2a46a52561a551f8f49d527eecfbef5589030891d9d90090fb35e43e8620c7fed4a056cd1c4a56e6134433030fe8027d1819c09638e43e359c7c389ccd1986457ff5e21673808cb436608d550d62120d9bdabac419cd6249fec945f10711874f10267c66320c701da90d7354b23e1646b89b22cea44d9e67c706ffc04a57927a5c9157cb049b1090e0f86d6cdaff29570cc629fef0646f9e5f8a7dc67c24052a34b91ab08b2e83b141cd0c098e35cbbb9fd408e7e107932128f6eb58e604764a7fe00acecb9b03203a24c9a760ca0d8a5886023020400b2b5c1 +Msg = cb254c69cb296eae328fafd8354396594c74e8f9ee4783289bcc8a922031c2f517353c2fade0359ca8713a9ea899907dace6d272d982dcfe771de8803d28f707ce44736583fa12856bacfdfe90cb32e77c4b26eefc54afa4243b221b93b0b8b3f9393731d6dfce118426401e7743453fc48a2d94e026c6c1aa0c808aac32cfa1 +Sig = bab31e3b71988cd3f2a772cd0e33b9db6d7aea6b6b99f631a0259ddfe9489bc662d9c6c9e03916592f212bd4e9619148dcea0b58b475c72dff8815aa3f274ad19d19126d67dc6d120e985ce16a3aeb64aadd785657fc0370c701ffebf71d83260ccdd9da04a8f29a69a01c3a9a6d2bd942c44d5cb91fcb44af60a2b8e2c94cabc23ca04ec6d3005a82cbe06546c38d4fedfc56d549c785a2e23b04ae0135b03a17d63ea504c51a0d129c172ba2ecea5dc6b8db4cec7b7a4d021da03ebe8cf6cce67b8e032b4ce780136afb144e5d8019e7916932ba87c7d9c963c0f51d62c873af41396d87877ca5ae888ea7d322faa79345080fb9d2e6dd98b7b219b6662114 +Result = F (4 - Format of the EM is incorrect - hash moved to left ) + +Digest = SHA512 +Key = 3082010b02820101009d19bc62c9c1989df660e259e9c3b1fb805cff7546d2ea5a479d29ccc4e18f1ffc4f78a9af924e04001850d3c56a91c8738f047ae12c89fab3dec2ed1dd7a207ae635f587c101fbd2c542e86726f7f72aa47497162dffad87eb321426e8929afaedf4a94c132ffb2966c22aaca737550feada9f92c07c2095739c3ee524be18c1a34dfbd2e210868c7c25a2fa222c65353dd28008ceb10a570206a59d2a23b22cfd9f38daa0db78c4843bfe1ed1a366dc128ab4d5dd45a28586ca4c8b0ffdd90759028ae29eab9c56cb0da94ec13d3d9fa69333c6065f3ec4c6392259e1c2f761eed8f8aca57354c76c2a0aa6b9045e5182a95ebd332494d642ef07c1e3617d7020400af8e8f +Msg = e74ded82964ff874c9e10540c9f1dedaccb376b882e61f33eb5afd316bafbb01205f7c8673ff1598edc179a74d3e74a1d7729d16ee08869be5d8356c13afd855254eb4d2b8b55f7528a12f88a253f2f48193df61d7f5cd9f495ba34421bb10979e227cad8ef93ed21f880f2bf3b8be99721d26df64335e08bfe82f03bd5bcb91 +Sig = 23cfae518dad78ff6540e64f54ecb571ae4fa33fcc57732d8555cd25b44b46f46eeb109f91af7d08c89e16f4cf6aa119cd9633515c55ab3fad64c8932417ca945be3e26028b752bca8851567da6408e211df8fa215a8ec07fb6faac5cff26d174a1b5b7fec9ab12c128489c4ccaea60c1347b8451bce07ccc9c21e90c2e5dcbea4a292c16d60ba66ca4e5ffd6c9cc3b8ce4ebe39df418573e0e9f42ae09875a11050a434538790c5c700b5adbbf700db2a93f3e5ac4c570f8543f0a1c1d664f29d161b064a0892db495b68da2454eb983db0fb3defb0f688b67c8506c20dc7997e0bb51854a85af613a3b9a0ca3e746f3d8393b62106c58f8ececb502824c478 +Result = F (5 - Format of the EM is incorrect - 00 on end of pad removed ) + +Digest = SHA512 +Key = 3082010b02820101009d19bc62c9c1989df660e259e9c3b1fb805cff7546d2ea5a479d29ccc4e18f1ffc4f78a9af924e04001850d3c56a91c8738f047ae12c89fab3dec2ed1dd7a207ae635f587c101fbd2c542e86726f7f72aa47497162dffad87eb321426e8929afaedf4a94c132ffb2966c22aaca737550feada9f92c07c2095739c3ee524be18c1a34dfbd2e210868c7c25a2fa222c65353dd28008ceb10a570206a59d2a23b22cfd9f38daa0db78c4843bfe1ed1a366dc128ab4d5dd45a28586ca4c8b0ffdd90759028ae29eab9c56cb0da94ec13d3d9fa69333c6065f3ec4c6392259e1c2f761eed8f8aca57354c76c2a0aa6b9045e5182a95ebd332494d642ef07c1e3617d7020400af8e8f +Msg = 19dc8b8a9da18dcb3cdcd54fe19fb766a8635ede3904bf27550dcfb5ae36f4a6fc2bbaa54d8fc80e9c411252a6de509ef987aeb74ee4c5291868caa05dd70596c506852ef1e313600db46457a9a49317c47bce632aad4fde01968d709e04b4eb9df653ef30a3550bb7be332491f9681b32c824aa7667448f351e82ed18c4e9ef +Sig = 694678413019405b4650f73897387df0a9a0744c345e52c02dbbc7d0083c71e0304d0d8cb47e08ac78ca34bcac209679671a036e1262285bddcf8d65082d8f49db6637bc2711f2ffcbebc84b0a96f581bd2de0e53ca24c715e416cb4f4da2eb4a4d0df893895910cfa4c346ee002f35792cfc066f25f048934b911dc748ecc88f709ba96f320b3f4ac84b740d7ecd32af63a833612a6b153e06f082e25b195fb0498e57c0e284ae03fdb27124f3af34b468ec03c8f9e2e4182a8d0d18f10221f79c13715be8ca77ce322f81f7555a57fe2e759f280d2a095d33ccc89ae1629b6386014df1215bc21cd8385548b1a149f57f2cf8487a6867a1bce842240050763 +Result = P + +Digest = SHA512 +Key = 3082010b02820101009d19bc62c9c1989df660e259e9c3b1fb805cff7546d2ea5a479d29ccc4e18f1ffc4f78a9af924e04001850d3c56a91c8738f047ae12c89fab3dec2ed1dd7a207ae635f587c101fbd2c542e86726f7f72aa47497162dffad87eb321426e8929afaedf4a94c132ffb2966c22aaca737550feada9f92c07c2095739c3ee524be18c1a34dfbd2e210868c7c25a2fa222c65353dd28008ceb10a570206a59d2a23b22cfd9f38daa0db78c4843bfe1ed1a366dc128ab4d5dd45a28586ca4c8b0ffdd90759028ae29eab9c56cb0da94ec13d3d9fa69333c6065f3ec4c6392259e1c2f761eed8f8aca57354c76c2a0aa6b9045e5182a95ebd332494d642ef07c1e3617d7020400af8e8f +Msg = d122c9b539021a26f4e66a823f29791780a879da291b1858dea5baf0daa906408fe0a5dd8ca84647a49fe61c4d714e8b46eedd0c7d60874e2f1b1e715155d0762f38f2f45336fc0ca89dd49edf6b4fbd1263f561a760045c78eab8903007ca5ef85336625453425d4707bc72bebe83962c2e494271c4966a003910b34166fbe1 +Sig = 57619bb864865b005fae1cb334fc5e60a23cb148e722a781b1da7e822b849b93fc502927ce9d72bf8d2f809ca6afaaf268133a7820ccb1e6c5e8a7252f67f41c8c67f97d19c718b15c32a2fd4a98c69ea535b37d6a1c884409603c80e1aac8ca32c48ad5481ab56a02526a8f37b884f15585a4989f0a7c7f3afb20718f143c4d49fdafdd33944445d39bf857f8c03e4132b1a00d52064f60172b44b67919610f2b69fdb7a51b69087915f76a2a0896fe53103c81c27d00b8c805b42d2adbd31b21d1773bc1f96b3d5f9352f224cf1ab93c18cef97134fb3cafbda7b8e4c301981ac4027486d74d1308c234f84a13cdf0e505d02c3f1f2b8e9984d6b2fdbe0400 +Result = F (4 - Format of the EM is incorrect - hash moved to left ) + +Digest = SHA512 +Key = 3082010b02820101009d19bc62c9c1989df660e259e9c3b1fb805cff7546d2ea5a479d29ccc4e18f1ffc4f78a9af924e04001850d3c56a91c8738f047ae12c89fab3dec2ed1dd7a207ae635f587c101fbd2c542e86726f7f72aa47497162dffad87eb321426e8929afaedf4a94c132ffb2966c22aaca737550feada9f92c07c2095739c3ee524be18c1a34dfbd2e210868c7c25a2fa222c65353dd28008ceb10a570206a59d2a23b22cfd9f38daa0db78c4843bfe1ed1a366dc128ab4d5dd45a28586ca4c8b0ffdd90759028ae29eab9c56cb0da94ec13d3d9fa69333c6065f3ec4c6392259e1c2f761eed8f8aca57354c76c2a0aa6b9045e5182a95ebd332494d642ef07c1e3617d7020400af8e8f +Msg = fa0e2ee8d953ee3589be814638512966d3d5e1b4ca874079170f9fb87db17e070dc7249eef6f86ae5f816af4f6c4cc8d2b61810c19971aca83b10b7d15350d0cec5fc0a259cd9502e27ceb1a8af378da53beeb46001ecfca1fffb3ce472a888b9fbc4a1d9fd7e3d91b974ce07d48f5f452d6678b08842822f5e1ded49cf9b82b +Sig = 2fba3258af60a9c026bacaaba33076b21789358f63d709e4b2374c7e010a3f13d77d71aa6a70a116eda22a652706ede6234e71bb688c32697087a0c12c422e98cd6ea530ad7adf9e293c5eda311578cf0cd6b2cb32c9342f5e2e2f3fd8b27fd8b9bd7beffac03adf6148e72d9775c27ef90aa232f49bed02af05a0d1567817116a9abc0b81ffb02816ec6bac841e559fbdd7c2e41df9e4b66f76729fefc844d6dd6a879441fb212d4c065ebe6af9365fb2ff053433aca778d3a667c901dfd7dc35bc2518640a79aaeca1270646464ca55b872017a51cff49b56b53f70324168da72b0b5a297b790c89b1f71fa7937eb1e514d77f33284765b66608010c324013 +Result = F (3 - Signature changed ) + +Digest = SHA512 +Key = 3082010b02820101009d19bc62c9c1989df660e259e9c3b1fb805cff7546d2ea5a479d29ccc4e18f1ffc4f78a9af924e04001850d3c56a91c8738f047ae12c89fab3dec2ed1dd7a207ae635f587c101fbd2c542e86726f7f72aa47497162dffad87eb321426e8929afaedf4a94c132ffb2966c22aaca737550feada9f92c07c2095739c3ee524be18c1a34dfbd2e210868c7c25a2fa222c65353dd28008ceb10a570206a59d2a23b22cfd9f38daa0db78c4843bfe1ed1a366dc128ab4d5dd45a28586ca4c8b0ffdd90759028ae29eab9c56cb0da94ec13d3d9fa69333c6065f3ec4c6392259e1c2f761eed8f8aca57354c76c2a0aa6b9045e5182a95ebd332494d642ef07c1e3617d7020400af8e8f +Msg = e25750b83c69e4e14cd31a1f366d7f97134201535b3601fe9deca9e874e68051b6ee3be3eeb5d7800dbbe43e5c6e24b0b5965468f3f04ab9a71940c20dae70a73eb2e122a630803bb9217253e28fa967bcfbb59385fdddd5d02a6f14793a5461de6be77c4c20089ab8ce6b65b01836459139ccdef9a3e3da7fe5dde8a2d25504 +Sig = 5c3ff26414d2af68f316f7646fe4740d571d7d08a4553c250b6abf0187c2ccf16ede3ba33acf57e28b20ecfcd0c77815d280c08ef4bc76aeba9012939bb53a5c932ccada6323d8de5b00439032b0fb57c77e64423a50d480d9364356e0b3b841cc8a61bbff8f235aa8247c4df7ac1a31faa85a855c76109cc0a8baff6b46feffa65ad576eb2ecf1713baef88cbf8a9d939558f95677e749045a06b8da3fddca07b8c6e25499c8d2dc6f2e152b75a9a85af85db7c84152291bb03a6ecd65a1a0209d8291cca9db5648acebeae1faeaf488c49183b0433d74833812ddd35ca6b483a9f24845f10c11a18152c9d3c8ce5209ec4d8c10c5960cc5889950428e557e3 +Result = F (1 - Message changed) + +Digest = SHA512 +Key = 3082010b02820101009d19bc62c9c1989df660e259e9c3b1fb805cff7546d2ea5a479d29ccc4e18f1ffc4f78a9af924e04001850d3c56a91c8738f047ae12c89fab3dec2ed1dd7a207ae635f587c101fbd2c542e86726f7f72aa47497162dffad87eb321426e8929afaedf4a94c132ffb2966c22aaca737550feada9f92c07c2095739c3ee524be18c1a34dfbd2e210868c7c25a2fa222c65353dd28008ceb10a570206a59d2a23b22cfd9f38daa0db78c4843bfe1ed1a366dc128ab4d5dd45a28586ca4c8b0ffdd90759028ae29eab9c56cb0da94ec13d3d9fa69333c6065f3ec4c6392259e1c2f761eed8f8aca57354c76c2a0aa6b9045e5182a95ebd332494d642ef07c1e3617d7020400fd7a0b +Msg = 2288961b2d0b66e75dfe4079804a7f99cd9735db1bb50721513a3f611e6d1ca8ea636c5f0c685dce3da191de4cef70231415c219ac1e7daeddf9db01d967b06a2917fbbae80ebbc42f4d041cd0ae511e47101c32edb3ac4f6fe52fbe7fdf0821c9ea6ab329c626d11b4bc1ba7351ca934ece6aae483e3d0bef48601f789eccd5 +Sig = 394ecbdd1159193f00fcabfe13f1ebad7d74c0fa954dfe2fcea5203b54c93e02960490f51c155da452cb451aa012f15f27c9ed603014eb88b714cd3232b0b08caad1e18f80cfb81345a18c4419b88a429a4f69c72149e96acb7f4463deca7105938d51f2a9169297e2462dcf4eac45208bc509cc3e85feac0e51b3bb32974ee82fbd23b3e2dc06da6e7f64f917d00befb181b264101de55cd90a86e0fdb27b3e9e8ffb458b39b1718e20da779408de3abc05f98e196f5f92f4dc22b34a39c28aaed5d44ba5fc8a50fbcc355bbeada239bb664f2d8e32fd53a0f8a0ca081276c32cb61c74fa9523b1d3f6a795dacab8363680ef62a2a964f66e3f5c0ef5d663d0 +Result = F (2 - Public Key e changed ) + diff --git a/vendor/ring/tests/rsa_test_private_key_2048.p8 b/vendor/ring/tests/rsa_test_private_key_2048.p8 new file mode 100644 index 00000000..26c480b1 Binary files /dev/null and b/vendor/ring/tests/rsa_test_private_key_2048.p8 differ diff --git a/vendor/ring/tests/rsa_test_public_key_2048.der b/vendor/ring/tests/rsa_test_public_key_2048.der new file mode 100644 index 00000000..47f18a7f Binary files /dev/null and b/vendor/ring/tests/rsa_test_public_key_2048.der differ diff --git a/vendor/ring/tests/rsa_test_public_key_2048_debug.txt b/vendor/ring/tests/rsa_test_public_key_2048_debug.txt new file mode 100644 index 00000000..a859a8f4 --- /dev/null +++ b/vendor/ring/tests/rsa_test_public_key_2048_debug.txt @@ -0,0 +1 @@ +RsaSubjectPublicKey("3082010a0282010100c8a78500a5a250db8ed36c85b8dcf83c4be1953114faaac7616e0ea24922fa6b7ab01f85582c815cc3bdeb5ed46762bc536accaa8b72705b00cef316b2ec508fb9697241b9e34238419cccf7339eeb8b062147af4f5932f613d9bc0ae70bf6d56d4432e83e13767587531bfa9dd56531741244be75e8bc9226b9fa44b4b8a101358d7e8bb75d0c724a4f11ece77776263faefe79612eb1d71646e77e8982866be1400eafc3580d3139b41aaa7380187372f22e35bd55b288496165c881ed154d5811245c52d56cc09d4916d4f2a50bcf5ae0a2637f4cfa6bf9daafc113dba8383b6dd7da6dd8db22d8510a8d3115983308909a1a0332517aa55e896e154249b30203010001") \ No newline at end of file diff --git a/vendor/ring/tests/rsa_tests.rs b/vendor/ring/tests/rsa_tests.rs new file mode 100644 index 00000000..2b29b261 --- /dev/null +++ b/vendor/ring/tests/rsa_tests.rs @@ -0,0 +1,319 @@ +// Copyright 2017 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +#[cfg(feature = "alloc")] +use ring::{ + error, + io::der, + rand, + signature::{self, KeyPair}, + test, test_file, +}; +use std::convert::TryFrom; + +#[cfg(all(target_arch = "wasm32", feature = "wasm32_c"))] +use wasm_bindgen_test::{wasm_bindgen_test, wasm_bindgen_test_configure}; + +#[cfg(all(target_arch = "wasm32", feature = "wasm32_c"))] +wasm_bindgen_test_configure!(run_in_browser); + +#[cfg(feature = "alloc")] +#[test] +#[cfg_attr(all(target_arch = "wasm32", feature = "wasm32_c"), wasm_bindgen_test)] +fn rsa_from_pkcs8_test() { + test::run( + test_file!("rsa_from_pkcs8_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let input = test_case.consume_bytes("Input"); + let error = test_case.consume_optional_string("Error"); + + match (signature::RsaKeyPair::from_pkcs8(&input), error) { + (Ok(_), None) => (), + (Err(e), None) => panic!("Failed with error \"{}\", but expected to succeed", e), + (Ok(_), Some(e)) => panic!("Succeeded, but expected error \"{}\"", e), + (Err(actual), Some(expected)) => assert_eq!(format!("{}", actual), expected), + }; + + Ok(()) + }, + ); +} + +#[cfg(feature = "alloc")] +#[test] +#[cfg_attr(all(target_arch = "wasm32", feature = "wasm32_c"), wasm_bindgen_test)] +fn test_signature_rsa_pkcs1_sign() { + let rng = rand::SystemRandom::new(); + test::run( + test_file!("rsa_pkcs1_sign_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let digest_name = test_case.consume_string("Digest"); + let alg = match digest_name.as_ref() { + "SHA256" => &signature::RSA_PKCS1_SHA256, + "SHA384" => &signature::RSA_PKCS1_SHA384, + "SHA512" => &signature::RSA_PKCS1_SHA512, + _ => panic!("Unsupported digest: {}", digest_name), + }; + + let private_key = test_case.consume_bytes("Key"); + let msg = test_case.consume_bytes("Msg"); + let expected = test_case.consume_bytes("Sig"); + let result = test_case.consume_string("Result"); + + let key_pair = signature::RsaKeyPair::from_der(&private_key); + if result == "Fail-Invalid-Key" { + assert!(key_pair.is_err()); + return Ok(()); + } + let key_pair = key_pair.unwrap(); + + // XXX: This test is too slow on Android ARM Travis CI builds. + // TODO: re-enable these tests on Android ARM. + let mut actual = vec![0u8; key_pair.public_modulus_len()]; + key_pair + .sign(alg, &rng, &msg, actual.as_mut_slice()) + .unwrap(); + assert_eq!(actual.as_slice() == &expected[..], result == "Pass"); + Ok(()) + }, + ); +} + +#[cfg(feature = "alloc")] +#[test] +#[cfg_attr(all(target_arch = "wasm32", feature = "wasm32_c"), wasm_bindgen_test)] +fn test_signature_rsa_pss_sign() { + test::run( + test_file!("rsa_pss_sign_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let digest_name = test_case.consume_string("Digest"); + let alg = match digest_name.as_ref() { + "SHA256" => &signature::RSA_PSS_SHA256, + "SHA384" => &signature::RSA_PSS_SHA384, + "SHA512" => &signature::RSA_PSS_SHA512, + _ => panic!("Unsupported digest: {}", digest_name), + }; + + let result = test_case.consume_string("Result"); + let private_key = test_case.consume_bytes("Key"); + let key_pair = signature::RsaKeyPair::from_der(&private_key); + if key_pair.is_err() && result == "Fail-Invalid-Key" { + return Ok(()); + } + let key_pair = key_pair.unwrap(); + let msg = test_case.consume_bytes("Msg"); + let salt = test_case.consume_bytes("Salt"); + let expected = test_case.consume_bytes("Sig"); + + let rng = test::rand::FixedSliceRandom { bytes: &salt }; + + let mut actual = vec![0u8; key_pair.public_modulus_len()]; + key_pair.sign(alg, &rng, &msg, actual.as_mut_slice())?; + assert_eq!(actual.as_slice() == &expected[..], result == "Pass"); + Ok(()) + }, + ); +} + +#[cfg(feature = "alloc")] +#[test] +#[cfg_attr(all(target_arch = "wasm32", feature = "wasm32_c"), wasm_bindgen_test)] +fn test_signature_rsa_pkcs1_verify() { + let sha1_params = &[ + ( + &signature::RSA_PKCS1_1024_8192_SHA1_FOR_LEGACY_USE_ONLY, + 1024, + ), + ( + &signature::RSA_PKCS1_2048_8192_SHA1_FOR_LEGACY_USE_ONLY, + 2048, + ), + ]; + let sha256_params = &[ + ( + &signature::RSA_PKCS1_1024_8192_SHA256_FOR_LEGACY_USE_ONLY, + 1024, + ), + (&signature::RSA_PKCS1_2048_8192_SHA256, 2048), + ]; + let sha384_params = &[ + (&signature::RSA_PKCS1_2048_8192_SHA384, 2048), + (&signature::RSA_PKCS1_3072_8192_SHA384, 3072), + ]; + let sha512_params = &[ + ( + &signature::RSA_PKCS1_1024_8192_SHA512_FOR_LEGACY_USE_ONLY, + 1024, + ), + (&signature::RSA_PKCS1_2048_8192_SHA512, 2048), + ]; + test::run( + test_file!("rsa_pkcs1_verify_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let digest_name = test_case.consume_string("Digest"); + let params: &[_] = match digest_name.as_ref() { + "SHA1" => sha1_params, + "SHA256" => sha256_params, + "SHA384" => sha384_params, + "SHA512" => sha512_params, + _ => panic!("Unsupported digest: {}", digest_name), + }; + + let public_key = test_case.consume_bytes("Key"); + + // Sanity check that we correctly DER-encoded the originally- + // provided separate (n, e) components. When we add test vectors + // for improperly-encoded signatures, we'll have to revisit this. + let key_bits = untrusted::Input::from(&public_key) + .read_all(error::Unspecified, |input| { + der::nested(input, der::Tag::Sequence, error::Unspecified, |input| { + let n_bytes = + der::positive_integer(input)?.big_endian_without_leading_zero(); + let _e = der::positive_integer(input)?; + + // Because `n_bytes` has the leading zeros stripped and is big-endian, there + // must be less than 8 leading zero bits. + let n_leading_zeros = usize::try_from(n_bytes[0].leading_zeros()).unwrap(); + assert!(n_leading_zeros < 8); + Ok((n_bytes.len() * 8) - n_leading_zeros) + }) + }) + .expect("invalid DER"); + + let msg = test_case.consume_bytes("Msg"); + let sig = test_case.consume_bytes("Sig"); + let is_valid = test_case.consume_string("Result") == "P"; + for &(alg, min_bits) in params { + let width_ok = key_bits >= min_bits; + let actual_result = + signature::UnparsedPublicKey::new(alg, &public_key).verify(&msg, &sig); + assert_eq!(actual_result.is_ok(), is_valid && width_ok); + } + + Ok(()) + }, + ); +} + +#[cfg(feature = "alloc")] +#[test] +#[cfg_attr(all(target_arch = "wasm32", feature = "wasm32_c"), wasm_bindgen_test)] +fn test_signature_rsa_pss_verify() { + test::run( + test_file!("rsa_pss_verify_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + + let digest_name = test_case.consume_string("Digest"); + let alg = match digest_name.as_ref() { + "SHA256" => &signature::RSA_PSS_2048_8192_SHA256, + "SHA384" => &signature::RSA_PSS_2048_8192_SHA384, + "SHA512" => &signature::RSA_PSS_2048_8192_SHA512, + _ => panic!("Unsupported digest: {}", digest_name), + }; + + let public_key = test_case.consume_bytes("Key"); + + // Sanity check that we correctly DER-encoded the originally- + // provided separate (n, e) components. When we add test vectors + // for improperly-encoded signatures, we'll have to revisit this. + assert!(untrusted::Input::from(&public_key) + .read_all(error::Unspecified, |input| der::nested( + input, + der::Tag::Sequence, + error::Unspecified, + |input| { + let _ = der::positive_integer(input)?; + let _ = der::positive_integer(input)?; + Ok(()) + } + )) + .is_ok()); + + let msg = test_case.consume_bytes("Msg"); + let sig = test_case.consume_bytes("Sig"); + let is_valid = test_case.consume_string("Result") == "P"; + + let actual_result = + signature::UnparsedPublicKey::new(alg, &public_key).verify(&msg, &sig); + assert_eq!(actual_result.is_ok(), is_valid); + + Ok(()) + }, + ); +} + +// Test for `primitive::verify()`. Read public key parts from a file +// and use them to verify a signature. +#[cfg(feature = "alloc")] +#[test] +#[cfg_attr(all(target_arch = "wasm32", feature = "wasm32_c"), wasm_bindgen_test)] +fn test_signature_rsa_primitive_verification() { + test::run( + test_file!("rsa_primitive_verify_tests.txt"), + |section, test_case| { + assert_eq!(section, ""); + let n = test_case.consume_bytes("n"); + let e = test_case.consume_bytes("e"); + let msg = test_case.consume_bytes("Msg"); + let sig = test_case.consume_bytes("Sig"); + let expected = test_case.consume_string("Result"); + let public_key = signature::RsaPublicKeyComponents { n: &n, e: &e }; + let result = public_key.verify(&signature::RSA_PKCS1_2048_8192_SHA256, &msg, &sig); + assert_eq!(result.is_ok(), expected == "Pass"); + Ok(()) + }, + ) +} + +#[cfg(feature = "alloc")] +#[test] +#[cfg_attr(all(target_arch = "wasm32", feature = "wasm32_c"), wasm_bindgen_test)] +fn rsa_test_public_key_coverage() { + const PRIVATE_KEY: &[u8] = include_bytes!("rsa_test_private_key_2048.p8"); + const PUBLIC_KEY: &[u8] = include_bytes!("rsa_test_public_key_2048.der"); + const PUBLIC_KEY_DEBUG: &str = include_str!("rsa_test_public_key_2048_debug.txt"); + + let key_pair = signature::RsaKeyPair::from_pkcs8(PRIVATE_KEY).unwrap(); + + // Test `AsRef<[u8]>` + assert_eq!(key_pair.public_key().as_ref(), PUBLIC_KEY); + + // Test `Clone`. + let _ = key_pair.public_key().clone(); + + // Test `exponent()`. + assert_eq!( + &[0x01, 0x00, 0x01], + key_pair + .public_key() + .exponent() + .big_endian_without_leading_zero() + ); + + // Test `Debug` + assert_eq!(PUBLIC_KEY_DEBUG, format!("{:?}", key_pair.public_key())); + assert_eq!( + format!("RsaKeyPair {{ public_key: {:?} }}", key_pair.public_key()), + format!("{:?}", key_pair) + ); +} diff --git a/vendor/ring/tests/signature_tests.rs b/vendor/ring/tests/signature_tests.rs new file mode 100644 index 00000000..66fd3cc3 --- /dev/null +++ b/vendor/ring/tests/signature_tests.rs @@ -0,0 +1,16 @@ +use ring::{signature, test}; + +#[cfg(target_arch = "wasm32")] +use wasm_bindgen_test::{wasm_bindgen_test, wasm_bindgen_test_configure}; + +#[cfg(target_arch = "wasm32")] +wasm_bindgen_test_configure!(run_in_browser); + +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +fn signature_impl_test() { + test::compile_time_assert_clone::(); + test::compile_time_assert_copy::(); + test::compile_time_assert_send::(); + test::compile_time_assert_sync::(); +} diff --git a/vendor/ring/third_party/NIST/.gitattributes b/vendor/ring/third_party/NIST/.gitattributes new file mode 100644 index 00000000..ac046c23 --- /dev/null +++ b/vendor/ring/third_party/NIST/.gitattributes @@ -0,0 +1,3 @@ +# Preserve the line endings on the NIST test vectors so that we can use +# sha256sum and friends to verify that they haven't been tampered with. +*.rsp eol=crlf diff --git a/vendor/ring/third_party/NIST/README.md b/vendor/ring/third_party/NIST/README.md new file mode 100644 index 00000000..305bd16a --- /dev/null +++ b/vendor/ring/third_party/NIST/README.md @@ -0,0 +1,9 @@ +# NIST Test Vectors + +[SHAVS](SHAVS) contains the [SHA Test Vectors for Hashing Byte-Oriented +Messages](http://csrc.nist.gov/groups/STM/cavp/documents/shs/shabytetestvectors.zip) +from [Secure Hash Algorithm Validation System +(SHAVS)](http://csrc.nist.gov/groups/STM/cavp/#03). + +[sha256sums.txt](sha256sums.txt) contains the SHA-256 checksums for the ZIP +files from which the test vectors were extracted. diff --git a/vendor/ring/third_party/NIST/SHAVS/SHA1LongMsg.rsp b/vendor/ring/third_party/NIST/SHAVS/SHA1LongMsg.rsp new file mode 100644 index 00000000..6e31a31d --- /dev/null +++ b/vendor/ring/third_party/NIST/SHAVS/SHA1LongMsg.rsp @@ -0,0 +1,263 @@ +# CAVS 11.0 +# "SHA-1 LongMsg" information +# SHA tests are configured for BYTE oriented implementations +# Generated on Tue Mar 15 08:23:35 2011 + +[L = 20] + +Len = 1304 +Msg = 7c9c67323a1df1adbfe5ceb415eaef0155ece2820f4d50c1ec22cba4928ac656c83fe585db6a78ce40bc42757aba7e5a3f582428d6ca68d0c3978336a6efb729613e8d9979016204bfd921322fdd5222183554447de5e6e9bbe6edf76d7b71e18dc2e8d6dc89b7398364f652fafc734329aafa3dcd45d4f31e388e4fafd7fc6495f37ca5cbab7f54d586463da4bfeaa3bae09f7b8e9239d832b4f0a733aa609cc1f8d4 +MD = d8fd6a91ef3b6ced05b98358a99107c1fac8c807 + +Len = 2096 +Msg = 6cb70d19c096200f9249d2dbc04299b0085eb068257560be3a307dbd741a3378ebfa03fcca610883b07f7fea563a866571822472dade8a0bec4b98202d47a344312976a7bcb3964427eacb5b0525db22066599b81be41e5adaf157d925fac04b06eb6e01deb753babf33be16162b214e8db017212fafa512cdc8c0d0a15c10f632e8f4f47792c64d3f026004d173df50cf0aa7976066a79a8d78deeeec951dab7cc90f68d16f786671feba0b7d269d92941c4f02f432aa5ce2aab6194dcc6fd3ae36c8433274ef6b1bd0d314636be47ba38d1948343a38bf9406523a0b2a8cd78ed6266ee3c9b5c60620b308cc6b3a73c6060d5268a7d82b6a33b93a6fd6fe1de55231d12c97 +MD = 4a75a406f4de5f9e1132069d66717fc424376388 + +Len = 2888 +Msg = 6487972d88d0dd390d8d09d134860f263f88df7a3412457adf510dcf164e6cf041679b3a19fcc542af6a236ab03d66b2e8a155d1061ab7859f75732775fff682f8f4d5e50d3ab3770f4f66cb138155b4715d245b8069948ea016a45b7ef0fdde93188c57eef4717f3425181de5b9a5d4e0a2963f2a67a340eb1ae994b98a48ab19b90ab74391c50426d28287ac4f1eb93f5af1a68c7dae40876b8afaaf35a19293c1952e957978abee40ec32f2aa880c956c7eb72f117b397cefcfb4e75ace3b081776e46b13521e93559d453e32ab74ebc0859b9a8dd4d1d39000ebe95f984d80a3f5004dc91a051dfbdfe9194f4f9a483e4e7955577fb0933464c63eaec771044d59abc3029a079519f8460a693b25b4ce207ae9d9447fc4c5446e6dad234e9afdec0c562798cd0297318399e838be385845c6dd79ede66e2ae80afec6738d4d9bf44c8d9eddff6c5cd2c94e340e0ddac40384b9a1408c9a4b98c37a6081d5220fba92f1d03144db +MD = a135e32581bb06289b8c83f040e9421ec79bbe01 + +Len = 3680 +Msg = bd74e7f607cd7d905e90175d67650a6dc2f8a4e2d4ab1249ca88812bda7984deccbbb6a1ba90a0e91434ddf5e6137ba85e39a598890a7f635d335242fce0e9e037303b6c51e54aec06614ad5ccce06d9599c80016530d7fbb1da6eb548084b2b05babd7d553642443efda726a1fd71a8bc087c44f285e2bccf661ead475a72673e4386fc4eea5197c4f13c0feb0a85bc8e67e28ab872684bbebdaa527f3c253debb2dc12c2693f8e9e2651b9345c0abed7a0fafa3e5d305386c95acb7a172e5413ef08e73b1bd4d0d6832e4c035bc8559f9b0cbd0caf037a30707641c0545356bee151a24068d70674ef1befe16f872aef4060faaad1a968c39c45dbd7595de8f472016b5ab812d77e545fca55000ee5ce773edaa129eac6473410c2499013b4be895f6c0f734becfe994306e776262d4528ed8577218e3cc5201f1d9e5f3f62230eb2caea014becfba60fcb1f3997aa5b3bb622b7205c714348ba155c30a79a2cea43b070cada807e630b4086b129051898e1d9e68d1d0ecc9429d20d6a1403e0035a442b37bf508eb87e8ea347a3e68427b6d48ed299ba65ecb37b38754f4547423eaea2aec403338db2dcfe61cff4a8d17c383656981e1838a23866b91d09698f39175d98af4175caed53 +MD = b22b87ea30f4050913f8f0241fc2ae2c319f52e7 + +Len = 4472 +Msg = a52638f0efb19bff5ec95fcde4ac9aabd95e14d2e5f84c551f43bc5376855e71519b6f877248739a20cd790b85baa00d5503da5cb056f02d4aacc760c91fe1fd6efb26def817e5a9c56616023bc9e2fe662765dae2c0b2edfcbe17db140da30c466de65c49c6f81496bbbd1acd81666455f23bb243dd987d7ea1362a20faac841f1a36692cfcb4c3dbf5f6bb058c36296b8be64e9b56adc5187cacb7b58c054f422a9e6d6a61229fdc3b494da98f5a33ed1bee14b2d2f6ad1177ffe99a6bb553f7c4a6d0cb9e498ee0b63f388235d86c26c9d96e50fa7d1eb3bcb9279940c47a8510d7fb175b3279318d5fe45823baba5dbe31c33c7649fe447061db78b33baa3637b854163fe34915e931b9f3040807d9217d7b3fed62370dbe806c006b21cd5061d24490f366e4d5f23e201a7ec83ae31b46fe2108d1af56cc9d42f9117eca1cb5ab344c1fc334b9cf0d7f9739043bc3d413b3aa6e9d5067c240c52b4c5b89e25ccd8a136a002008a9273f30dec3f2c1736c04a1c7ce0087c9f25d5ec5bff2ea7ec0b0ad7c278f0ca712c9ae150e472521d958d0bd6da9ff0939725924b2ed7b410a0ce2fe3f6b0bf25884d885ec223605e318fdf6803218a9a06ce5103c62ded035087a98519b4eb180d778d7656b3d4811aaf11a128317d1acb3ca3166395c51c90a3cf164071d0d132c54b3810a8211ec7774d2288447abe7afd030375a3bed4c7cf1b28097c02e98ea36bf49e74d89fbe74ec6cc1def5cd8c8beb5b8adc3cb48c56182ad337e3b9778e4a6c4 +MD = d742931bc51d4d44ff938783be73dc7beccc980b + +Len = 5264 +Msg = 892af4c05368aa9242acedd87d0fc68de483ab59520aea621f264b65ea90f005952c8163903d86ee5bd6147d4691ac9b7c8260213f6e370b7539d384649e5143ba23711ad04bf7cc2f0d512054857933b0ea1d12f3c0fe888a4e96356653fde000f50d0f9afac5d4c73aebe92d54f5ff8aa12a54f5660584674edaa17917bb856f8b9d6776b2b7ad2a462b015b67e8a71190cf0ecdca15a5121fe8ef245255da10cd694decdb96006017599066251ad34d9f54690452f59395ab0848f06c9186eaa3b8e785dd2a747297bdbdd4f5532a47b7008c21686ff7f8d881d464cd383205f6d45dc8203bb267ac9eb12f415a5406be1c9fac73497941909dba08dd12856aac03d83e0d916147404694fe70f8fa929ef0cc2edb4cc07abaa2236405e62820af8e806d0af32a1b3afb8dcaeaf5c4f43dc4392e074075aa3ed93601ab7ec22fe5bd7cdf802bb5ea8206c41a1619593385e00e3461ed3fda048a1c6639a0fca038d7f51cd8ffa9bc00af62765e2b62575c8b74c8501ac711f3fdfc1b15157e7a8f2612aa7838af999c3d8f6629f58669ac0f93733c91b557f579ffa9a9a4efc5d1f0fc13ca9e6e8a3efa7273e03d6e705cb292bc8d18b0b4f1484d975b17f88ae87edadf34f88f96ce2c3424e9ccc17454bd992cac786031d0b00d6d953540d0bb18d5942010b9c6341cfc02ad6a287e7c78d249ff796ed578fa68b4bec5709f320515bcf5ac95215812f39494de4b94bc2a639eefe282a9d26d85f33d902fff358fc1de1b95caaf2255416207f2d1c1fc1c74b0e57d43b3c6538db27c5e26f9acfc0183fa9301787b2f0df46c6c630a24972e0947105afd3df2a779e2f6fc947f95ff32fa6de28549e67fd32c15a8791ce1b8307e646e8f1d94fcd1d7225ad997a2e07383ed14dd76c3c186b0b54915cc +MD = 20a3a677c117c61ed3bb19e2ac77f69987896d0b + +Len = 6056 +Msg = a5045d24d07578ca31987db3d2e25e12ea38bb1da7a8bd642a574261d4ba3a50c009504190f1ce6b6d8abac3498845cd67b567b21e9fc394da8dd01e63b83a5f62b886d8213df6d392ffacf793f8111a70d07856a999ff5ff6bcb6138933045393f9461209bfb8aba8e1997837988aa00c713830d1fe3a6e88cb3d6acd935ed55bb4d716d2e1de9bb817ca6dbdd278084380ed691d363c6897a2aa48b741118dc3d1820d030a2e4ac88987ffae0da2f91de5e02816a9cdf62c2948d7d0a3e522d2398f1f25a17261e31f185690b0d11ca388599642bfb5c04e485e3f9f22a13d91d24673bf1070870ec1c499ee25cd19dc529fdb2be1bb6d05e733a8ad270f850685ee3259bef1655357d4f14dd35e97d129fc1e5975a9a559ee10398018f5a33b3bd1837c13bca3b9c9908537224c3e88f7b68753e5451253453d1aa25e1c3e38da358fae779be848ff407e337a5eb70ba21640a197585afad402749b624cff034b637e7a5254dc09e12c03ca435daa6213646ecbf5a9255784a76ff18b4c8da677a377650cb02803589c3d82e512be9333e83c5965021c703b73322e40e69229453da2f90d77743f4ad753e6c8429ca8e9ead0d45129e64fe2afe6d9ebe0b3929c7828bdbe7167c3a1266e7b55b8eca81cb152c420e72cfc62a4b27bf3039aeb669d31398565aa9943d1b6cbf23b559cb686ebaf3a04967da197bf9bc017ef3c8af4e4f6cb1de5c91a20525d08927f8b9eb1c21f0748cbdc89d334c1bae4598bf0c56a7bf95fbf590c5a6bb90086137dbc7a019bef7b7421019f3a76493181e28058eb5075f4e05303c9286840dfb97bf828cdac5a643852f042f940d5c80f4822f48efea9a4f1bee6b3b2f13265188b3a0551d8b0ccc079400598aac66faac6bee37b0cfb369aa39d6130dc3ddfd9b86a57b2aa597bb49dd830403984effa623c6bdb02d57482090f1bcbb2c817a30770671ba7bd39bbc7a00b18777710a82684d5d6699e2452f82629abf93dd31f82347db25944ce7dfe80dd49eb07995c1a7e6993c8be0fb179c9d2f73c03dcf5309fe19f47 +MD = dd4374e29b17e2ec533813feddc5253765cd37ac + +Len = 6848 +Msg = 912e0dc25b52540f4d33d26fdcbaddb420f5570141bccb8c2c94b8a38ad32dedf20596f35d8fd6dedb9296828512dc9cb358df586f941a1729c79f6eace0ae725025863371d57b86210c49081ae6a85ff6e720c3a39b1fbe1179492f2d0d0f951357838a7f6e6a8e85689306837e6884536cc349c51703094c725eeef7a279dfa361350170a0cc7e71701e86a822459431ad6ff3bd51ed80427a87b1f1e713d6690b469f2ab4c9df4cea8f8f711a6716f874cdc8739106ac5b596c8203240604cb1f5b6d96f288387e9f912ac6adf5920f8785d0cf1f751400d6b46815a079f132631f719ca132116f57ca5e8f251791e0ae3e13ba42634097bb076c0fa4952307a137b5250aeef287dae233b4c8f79ad2b3a09a1a43f8b98ace0f94d9788124b09f4e411776e5642eef82b11ddfba354d5d556cd96a5b063fd871ea5c64667c97260a1b5c2b3feecc6052e1b2b18beab9730291ddffb5af20a0d8767eb06cb122fd134dda722319c9f3f9ca5c8890427fbe5212104a2d3d93f0ea3f28a3ba4dbbee12df7b92b96c8d71207401aaf1c40506eaf65893ec37028e4f4d438679d8c9bfafd725d52a6f80a16ee88a60d7f9b41275459f211a25d443b0a8b5a1d0d8b439913fc2819eaa0a4d8c2de0f26a67f4ac9907cc3dde8f71d7b559683ce8d7e324611e39df3ca6943b214be9a8d1982e9afe45c72f60fe41120567429fe95cc048c67d72372dea8434d64b8fca3514c8a54d07783fc9faacbc49da2d12faf0b26c696355d199fe44005334b99fbd612c952e53c7b541091a9c28ba10dc431a215af1d8caf4a76b3a673f0e4f709209c03248339cd8efb5f37b4b10d246ed6275d807e5b9e97fb8d03142e23885db94ee4444aedff1fc859f2159e35d98205017af53900af94a6d6d2505b75e26c1881d92c9cc78488f018656fb3c981a036d6da77ce3a5693013780d3095a89b6c6fb4e580964f25d1b210e2d9226b13bf40e0872be6728458315baf6b84fe2b03d01d0511134cd0ea1fa68c9a9dbecd7b51d91907a05a91eb4f7dd35c8d4820ae34bfba234c589001d1ae1de7b5798e6029be23b91943d710f54643aeb76ec0972202cc5e4759af3e4e925e6773859f964ff86ee859179ff0ac1ec6070b5954e3224e026c0e3973ca20b814c3dec848444bf0c23d69bc31b2fb6d23108fef23bdbc0b25f2a9de25cdce +MD = fdccb6e47645928fbbd51ccddc6cef48d6afc011 + +Len = 7640 +Msg = 2298096d8a02225d4a5a91e95b43bee70f5a23f95269b1602fde6f11967b650b5c4eb8e783e416b1bcba54f62af4561e695130fccf5f8aa4f1eb497d69bc6c97d781333e260787cf11af96cae520be298839acf0ba49c5069b83c4436daca5ca9c17c399fbd33d5e51239d8c142ebcaf74f8e0fd9c91282d348d2a8c2ab3da4db2faae208bb1ff0784fdb3654088195836781449fb9e7cc2c4f0c17f273ad1c721103cfd5d079672b3251e7df0959cced59f90ff62d8886c5496d245eca753e1f243b755fa3ecb46e68226fbacbd0fb659579b4556a716d4ea66a405016428432c796553e8bf642b23fe1508fc6838bbcb877e436173eca1914881e8efd71894d79c901cb1f129cb748031cb69fee183321782230aa4d37c4e24af163d6aeb7cfc937edbdc3be4cbe0f1c46d7ae7d0b696eeec0ad9a2930d2be277b6738468a5a14677b6f2075bd66f371415b88ccefdfff6072257d6f4fb2f6b21f0198c59b4d19dc5d57abc57922a3b6aeca953a20076161a930ba6beef62a5f5eeb8ec84549180af61fcc1a0a718e50d1ad7a5166602366c857e7bb890cd793bd5d70bb12bebd77c820180febe421e47c6caebf0d7ac3e461f36beac8777cf3ad0ff51aae1e68a755f1060397faecc5e18088bf9fd7b17f089bdd5607b69903b04b726361f8a81e221b1c9189166d89b391beff97d77a7b2ec9b2a9c15a9a2869c87f21c8de0a50bef6c23659d722b46518b7db802a8d7d47056232afd41ef63bef71d25d2efdc37f2cad7e64ad8aca787de9ffd3217909d3c782ad1da385e1a93900f1996c00faf52524b6441a24205049ebc91b5cbb8577989a6585497d6f242d931c0835927bc368de8a629d8d7aaf0523b3d34cc38484e0fff8814654134f35be9e13fc40aa4c6011676ab8052dc728386c75723f9b8e4949c29c2aa8629d09ca0467209a2af2c383e9a6fa49ae4b2b804f7c5d7e2f1629fe703066f8d16fe26bfb5c52ed5278dbac6db1c4b990ad9791d9727f0da3af1b947dd86bb3e46a881acf7df3d8d52140d18015a7e36950f4f396d2477cbdab9682480ed968100f433d1d46a3db17ae6bb9ad4d34459cf7bc0c04365739c1ae137e7b5e1083e8b0ac695130b3729e52e4cb61c2ca5eafe46561adf91ec354292abf6420a1a5d3013c25f7e6c32dddb1246d3a010a9d26b9799b00951ea7e9af34ebaef12d3c63737ad99db3536b5a6ba3358292559f75e9710e88b4d765f692da79b869e3c61e89d11aaf30e4c998d4f9aaf7f13bc421e6e432b2c2c97c0f9673e02cd595b178a6e75fa8e9d7a71d7f9043f6a83da9bf543bae2b397568990ca9c558ee83ace67 +MD = e50a54470f59fb9b654bffcb4c353e58b683ada5 + +Len = 8432 +Msg = fa15cc7f0de294d7341b1fd79326c8be78e67822343c19922ace4e7925076145ef5f7dc91fdc1de032d8c454dd06effea2b0472ea2421c4db20c0fc0b0440e10184a8648d230d39f4e7afc57d3229de514e0245205a840e1ec7397f2bb42b8269d6050c4cfe8a05cb1882eaa1d84bbbcf7fe765705746f98018a4ed7ed0a45d0a7294305bd0c6b5e828ac413623432cb7292a5064bb090b819d99d36efa39f565e2cc7d245a21ceeea09255b4a38e85aae2519257f638b8a5be9ead96815ac00e9f145f50fb49a54118cb94a7f9ac7b1d33e397c49964856f0419e860169561670002334c249cfd81e9be8a7a662b61808666fd54f50ae64006a220662a683df1de2cb58066aa2c23abe1a3c6a969cd6752423f63c99a7fbb2eadd2132d41da4161ea329851efb598c7eb7cf704063344300bba8b6791b642e4b369e1afc0bad833c156ee46dc2e63d6227296367f27a9a82a0b365f9f0e89d149747c12435428dc488f1ce5fdfb174f3d212e91431f0a1333adff3200fcd27ce67e2d05783ab5c3f6478e9fd3b025ab72151aa4e08dd819af1f405f7605bf3000d38ee9add2f173510ccdd4ebc2117387ab0501d5f8b61402eb94684cbdc2a32f311c4f72b18e62cf6b5535a4b55d2fe46f580891e406aab57f75bd13996f3ed8035f97555acf2ae7dfaf32ad1e8b38feee9e49b2d45c465d676efe690d277b71c6b361c433463420d6564c53420e375d854245a74e296f611fea8c9bad8dd1b2f7c23f5def761710ebc4f335e468a386efee8cfdc5e08e472572e849df04e9e213167070c3f13c1e8c85b7d35a1cf5e17aed7004b0344b95f482a1f2362f2ca5b50ab5bb652a1bc045131aaa37bdb713a2e99f7aa176ffc429b44a03375f02643a196f7c57934eac81f78c28f1ad6f94144d7bce2e3b43682162311b473713a42eed1e51ffcf4d29df9d9cee0c7e77c93b93955d9af39ee8782707990a29c8fc1fd032dae2308fceca8fcd580ca3684985466cc79c326acb9a6d2e1ae4b9aac2697d5d5583698f01bf588df566bec98b8df0729a966a4f9804cf250f6b59219da84efe7077cce3794a526f54af231415b20c37250e1db5b443a77ce502aad5f468cf86aa23ed058bd837d1d44a62c05e9e143b1587cf25c6d390a64a4f01305d177996711c4c6db005636612cd1066fcae82eeda87f118463115318da50eb93e20c79e53c56d949c4e5f8c9eab9e60466fd2d2f2832625a8e8af9f4da925d92e31441ec0b3c302870f96c5c67a6f54e26eae87ec0dd0a66576ca5008cfe93893b58988566bdf5036e5a392289e25bd4707606e258c73430247efe43d9dcb200529d27b635234d5f25d0082339b43f1ead683063d83906415e89adc5a773e57f90ae958960b462c6fd2381686063c9b546890d0a287ba8206e55598ee00c528f5d528b06cfb95cbf5e1a4bf8e4382320a1a146de31d54355baaaaba76aef21b72150b134 +MD = 9b3ed390fbb328a1641fca93691763000523569d + +Len = 9224 +Msg = b718c968e8ffe4ea282fc33f96da233b8a8ab6ddd55781244a5d82237d6d9758ca039b3a9978d211e179870aebb8f38b59e161c466d090876f015959b34891c957c23100ad0bb49ab5b1c1b4e4e90a46258174b41e16789fb487c901d1a93779643dd3e3aa1f542cadc0b9640ad53015f65137d48391011520d71b445ffa4f11fc5cc90b1a1b7870cf8cb743e3e52da0d539f14d1faaf291bbda9749e6a2a23824075a9f8469e90d25fe0379f97fc88ec921ec467ac715ba8e768439ee09f897e626cfc771706facb7fee42dd40dca88dbf16ee81a523039a0942c3bfd9719d549a170ad6898d1f58b75a488faf5fc351291c05a89b10cb5fa1dd5789db4cc9b55608576f149d98fab4989b1f5a1233e76ea2ac54f4e71d7a2f7c81755c8da91134b564d94eb4d231f64dcd04d770a4a0fe2f351f28f2747a20c4d41ad3b0c5e8a4b2b58dae6f658edace40f88e17802e6626525fcdef5ac0242ab1e2e7528abc3464bbf4aa39cd71f0beb943045340d0253c66af5a2a4afc8832cd55fdff61fc425ffab6d880748bd683787cc0d07156b9b5f476342fcf7feb6168fc9df406397d18f44c9fefe51cdaa1111e5a0b9bf2a2478e5d028c52dabc3b273f2decc1e443143b1e86e4b9d59bbc15a026612b546d4596cc3bbc7f8d89148aa644563f9d12c621b523eb4d268828f89abc7da9fc7954903c563ca018c0a205ba77acd9c48ac36a98dd8029903e7c3c6692bd824b64e92d25d8895efcf1581af41e7d2aeb098058423a2fd9931d2a43bc2fad5ed1ae77a021392f16ba99ab5cebcf23ad812d718d39c066c7bfa2b7b0d409c99a2fb474abb6feaa61d238202dfa005ccc17553b7bf7e6a18e666da90676b7aecea61584924faf67cac44b3b10a73875111e1f32a705338ca837ec82b6fcafa966d5501c1663b1f3bc115160979bfe092725f9fb80da2d748fa49db944de5855ed4de2af8a8bacdaa039c9354510b77548af53faabef4af5af2cffc122a44840dc705bb37130069921be313d8bde0b66201aebc48add028ca131914ef2e705d6bedd19dc6cf9459bbb0f27cdfe3c50483808ffcdaffbeaa5f062e097180f07a40ef4ab6ed03fe07ed6bcfb8afeb42c97eafa2e8a8df469de07317c5e1494c41547478eff4d8c7d9f0f484ad90fedf6e1c35ee68fa73f1691601da2e87b00d1c6f256431227576398bf21945cc44255925bb7b6517e34676c959812eaadeba7258aa1562c102938e880d9466aae49bf361e852c54858ce2dc02313ac93fadbaad8aa936b17a9a740adeefffa7106caa497657a72d5fa0ff4c506998f8b2df82eb7cee7356d9039b7c33d61e86ad438d591d9fb5206f093349eaa1ac1d89f9a65bdbd18a70adfd15a91a1c318dd736fec15edde4f2263e25614b89e29c27748b7b11f2ea838bff793e1c32c72110ef753ec492a50737a82c0efd82eaf93de8b8c5d9e32223d5834ca794ba4de50cb5670de94e73c3f5efddcf7b1d03b91fbea4c87e02bfc62d10f6522e03444e0d216adb2761dfdcf36db11f4ec8eb506f7ed5ff88d211eef5211cda42ae28c0a4cbe713299d57a6b2ba2c6ad30700538f91c2e784e1c702c05c06ac7d3b89e1661d72324a217 +MD = 09bf403d8a9d2334f28fab704d9cab87da43731a + +Len = 10016 +Msg = 32245df514f6c273d252271a980929e50a7cb0e77b05c7d46092abc3049321327d170d4bde314166aea193ce99b032c8665c3ad129b58528ba87c58c6539cf47e3f53a6b890a295cc08e658eb547af9052cc544a6ce701833e3ed9a61632c5c54e080bde7e46235df060c6e354944746b51326d9ac61e3edd4fe10977d46aab4a596a92b24b0d6722661dd54de61a3f1797ad90651ecd26e641191e9043d271dd0e83cdae20feba24ad7d369bb746a9985499559c350760fd6bd852312dee307b646eb74222a09f6440bcfaa54954546c1c8815b6b5578d7124b14ce0ef2877a41f7de804bcad974fc45faa00f8edc01153ec693afc380cf000365716241ba7e58453e86c5b702265bcd7bd25526d6d169f58b89f86135fd892ca1947593251ce376330ef7b92d1447ea7bc88f24dcbfa533f9c6aff8406b930fefc0afb06f5bcbd3e4a14b980245a9e5220b235195d2b14138d13a50482107f5787b78604144f6a47ac6281b28c16a0697227b75aa1275676f320331f625ce246450386a43dd4d311c06f60c489070950395fd58c287daecc7727063f281cee5dac457971c30b8c1f3e81e3109bba5da8ded13c1863ac61a6718ebade33df17f02613daf7545209e27f406521448f01d5eb124799d32223777acdbd9725f1e3c05ae537af5226b0edfb21739104238a59d699749b177d78c21b7a8ad46f13d620b33ffbf45d1835a43abb9ada6ae67bb739ed6f76712cc618bc0b9f208fa353a3b79aa480c5a4eca7c6655757e9664a708d6484b690ae8fedd4f786f5f83f00cbe07bddbf3c3b6a5b26b515a3f0117b1839c550f5f6715aa40ec4ceef4935520bc659e41a216a2350c43172492f868210d756509f0323aaedc209d356e324cbd5c1cb742c05bf9c0b3750d9b1e823f3ecdebe002c5723e52d872d40e7668bd2cc6b36fa5f598a58fcf899d868ca78451ec852fc3862f0bde5c6b573fb43e90b623b22d34ebd78dea87082eaf836f1fa291ccb811da71889a92918f90cfbbada19ba25bb5471f9918037927dcace3f879e546e4b769419dcea06fe4cb70e8fd35550a60f1b479b1636c64f2d6af0af81e107d1b7bdca632c1ae8abfb63ecb66bc7a72a4b0d8ebbd11ea51f66533ed05d839f9c627dba92fbce56c861be26fd17c31628fb95b80a56ba4c99b50e09208f188404b810d517c076c9ca3c003d927bea36389d6e63d51b9c35349615f03eaaf26dc14521ba602ea6ca27c6d4a134ecaf7fcfacd212caa436e78685e5848915b3b558761acb0a7ad0d077bec5e2430e856b64a67b3549650cebf60107267e73cee310e786978549776520604e914b460e818e16c45bdfe2a0bb09a3f566ad39c68fa105dfa05f2f1d00b877c90ebc179d4aa27a47e70cb174cd37cb3ac583cc1d137f5d9065f670342ba651dfdb2417d43f485d70774e360b9b16f331b3a0cf4507124b4358f9d15f5e808afd8711bb25c7f61cc87d1304d7bd1dc894b172a7d0d2f07b6319c7a6f111cd8fac82e376148d2244ca7909925babb297be5f77ea431f905a79f8ee859bddf3dc576f37dd12e75371f0fb805329df8c0d291e3f0b1e457864e2a6ece1a21b89fda8ac7d54c37f1000d66515eba4d0f0755f6e168eb4dd2f274784313fb662f66ffabb327188bcde9de54648b06f28868cebdfcce9c95f1b2e13115a144b4ccfafd81bd5b7e5191595983f7745eb3ec49038d390a0ae33d2c5dfeec5f3d3218c39bb5f059c6b2c6b84798150109b8c2 +MD = 7f32d7486bde22ed00eeeaae073858144dc3ee37 + +Len = 10808 +Msg = 9f07e6b7ea8b6d2bb301d6ce7019e0f27ad55abbb799e6d47681fe609af63434fb84be4309e63159b3638d0d875e7af11a28d10baa185e8902dee5b09e14621610169511a214be6f3d65a667891eded056e44b913bfee3597caeb19031c21f8da5667409fd3c9cd31aaf28c6c08495f9f7b1d135b173fbacae9b6ae79d28f201841b6213618751ef12e81b1172b526d2c5396adf569e30ea5e4b199f287063da73de6817181d672aecb88730e8dc19c587211e7770a8097b5566c69f1bbffa803b578dfd682566eb72c9750a6a1ff7380714f5e548b80ec75b9577cfbe40405ba42dd9ad9ac7d49c6ac0ec893fa647950bb8f81126f7c837388036175818bcd37509540ff52d3ba49d48f594b19a91435cb52ee4518dbe31b3ce0a5f3372f7517892070cc37c226bd307971306235eaac2b4a04413a1781e9527fc8f9574773b7371f98a4adf1259d3a5daef87683432045d541ab25b7f67a635128fc746c6fb2f4d3272d47c92d667cbc60e7c929e43ec57544f77e45a72ae9d564711116cf774cfbbada77b2a4a552164592dc82145404ba8c9aa6491a9750ad0a0bafdef99099f9b220b05621d664ebbb8e13347a0c9e056729302ad73c22287800c31d948b864dab84a42c3b762fbd314e2fb97bc4fbf68317ae735375f8d83d14dd6b16b47c68159ab59d48011cfb553764799029a8fe5eda63bb15f12f4cc79c613006c7f6f97ec75721de13b73685fe63fd6d871f9d6906025aa52a4ff6b62bf114db228042458f1b72740a78ef41e7a0dd5a79da54201f0cda778dd5567727ff720a50a303187674e79061ec9627a79d61ed8e73a31289e5c3039849fc89350ee01adec99c4601e5f9c9c68ccb95a2dc53ad11461acedb2facdfd638496ac781e793298e7e8cb601316684d3e01a5dcffb0fcefc1b93873ce072c40addaa440ae0f9cd4c3a2b0739171d495c74345cfaf08c03f0363f12a01652ee4c19c65f0c74c5369d5fcf7a0023447071086214efbcb84cbceaf001fba706b1769e2d6d090b7bf1fc4fd892f8ee8296cc1d221a00b80b25ccba74d9a22ae4ca04db6df2832d849bd38ad4c685c14e18c822f2d0f08afb1baa152c1e361a93749141f683fd437570ddb1529939540d92ff9a62de11ae1e9adf9b842419ee995d86726595e9f5d53d5523c08f760f5781dd13e095f689cc2fd7be2b9fe02f4cf16edd19acdbbd1a3de482bd2dde6b9261db000a9d11b6ba471ced70f60b4544bcb4f2a14d44f1bb1f063e86d8d4f174bf93ff2f67f5ad3f7d39b9f2ab0dc9173bf3439adbb83c4e3d34b7dc34fc2944f77251ed6b04e5e23e98943f435a431aeb945054ec98053a34ea9f1bb6b67ba9b600a8c32ae1f93907c41ca543932be63832a96e0476e50582a254d3c286710957b9843f3bff4faa6536a3c3102aec0fce38af4497d7543692f669830d0ea1ea692754bff2cf51cce38ada275d941bde0a20d2873b3bbb5402515da7ea9176d366b49ac403d4c806ef1b2030706133f77885c3944316b2e44d4d91c0efc1784aed0bd6e9d391eaff0472067cfd14bcd295c1f2fa63eab34dd045b65c81012eb7487789afd6a962fba02a0d6b58211f05ee8fd128024a351737c43bd942f2f2bf25823384a16d98a36ead959a1608f2e7ef29febb9297d0c6e05382c5a9f96cb8f0d664e6b861247cac674f77bb4ea12f143adc13b965eed3767e2bb02a97053b26ce8e6480267efe06018b92bc64d211fa3ce9dedb3707d346aea717495e54cc53f5207c9d10009df7e6ea599dedee571d9aa86b7c7db43ced5f85798ab1c3d2f4c4bbad63d061d2fe91dc6ae44c5e54dafea84811cc7c86d72b37356333eae585c7c06578ca1b43869ce21503f2ba91ceb369f33f85b927a07c4cf97747227 +MD = 37b7277fc606556160f9bc28b06fd55f4424d9cc + +Len = 11600 +Msg = 25a43fd8bf241d67dab9e3c106cd27b71fd45a87b9254a53c108ead16210564526ab12ac5ef7923ac3d700075d473906a4ec1936e6eff81ce80c7470d0e67117429e5f51caa3bc347accd959d4a4e0d5ea05166ac3e85eff017bff4ec174a6ddc3a5af2fcbd1a03b46bff61d318c250c3745da8c19b683e4537c11d3fd62fc7fefea88ae2829483871d8e0bd3da90e93d4d7ec02b0016fb4273834674b577ce50f927536ab52bb1441411e9fc0a0a65209e1d43650722b55c5d7ef7274fb2df76ac8fb2f1af501b5ff1f382d821cf2311d8c1b8ec1b0beb17580ca5c41f7179e4ab2a4013eb92305f29db7cd4ac3fc195aff4874ca6430af7f5b4e8d77f342c0f578f714df4728eb64e022e9e13dcbf00663e34f35368a362a91026ee196b746b4437cd1c546184e9b1301e8103367a06adf7487c8cdd330c04a6f6546897d19cf3bbc9eb75ffb18e05cdd329d4dd90fce9c84844cd2138487ad1bdb6d749c1f8e873ee47e3ada307be33c2f5032282779c19aad88ec521ac8e390391ffd1d4239508a0ce27ebc7eb4d1a947f38b5cceb5773f6c46c499daca1356e524cf076917bd297cabd4aaead34ea9e24cff7eeec8e6fa284c02efacd766f3494490627c71f7a29ea1e3ab5c1f81c6682537946efb35534a634d5d783504f1cb47e936628f257dd98c54c7bce193874144daa936968dd238534dea262d14d8d5f4818c05b970439433ce06f262ac74d57191c22ee115005be4ab9e9e07bf2ece14016b4c37007b395ffa71e6e7f2168c7604e93e24f6641bde0f81c80b2c7d1e6f10dc1f50fcad2fd87f0f81bb90f4cf1ada254ea65787e108209c8c81844c2ccd57e6664e8c62de6607e9a925ac970424bc7f46b061ef132b87f6d3b0ee2462f67d910977da20aed13705476c6f85955d51fd0e8a3b261b0fec9783e1938c27b12be5f1140b7207e0b96d44d90048e88d42aa8e7c0fb45f7cf588865c9a0ce3c809eb046c4add515d352986b48768677c368bafce021f493a4dd0c2692c2cff01beaa2bc9bdebf40e523ff7452e6b78f1d6aa57c73ef13f109a7721507175e125f32a4f718c2358bbb9b97ed31bdb85b5ca0e6fb0ebb1abc885868a58906ef2fc4f7456ade00de52e129e02a8763ff591b9bfe0d130e8f428b504e4cab2a09a4d7b8f2ac5e132042e04f76d0a6820304a4bc69072361d82f9d3f919eefe9142e21e83b101b6191b8237cba64219059eab292a69db25d8bd02866e100c9dcb5081e159d5a9884b94f354229597b076a77bfbf3525424a20d0d7769b16cb6d62ef36c187c047e4ed5490305225355fbb381682932245b01dae04df5e456723842ff66c8905bc1ac484ceb7a35bc321d2a8619d5f394f37f8c45b1179111f97bf66f7872f8f678ec53c3b58cb61c6c637452b6ff7cec14a48b014bd9a0e67226b10a491d9c1dcc97607808408db92e56f9ade6adb574e5f73fdfc242f91d05c2da9782d16418e534d6318da0a2dc9e7c215f51e986738f0011a6bf5a85fedcd6dbdfca96382eea4b1db7ecb3ddcce460552fa0bad7333947671de92a2ad01cea1baaca7500a903659dd2cc8127d32987fbe77b2990fa0c55aa0ee9b9d1ddf08702bf2975a4cf5a09bd49d5136637957b7d4d893c991130b1433f6610636b7e34f8e8909f0ce914bfe8e6b07084414fc3412a73fddac0cce398780935c6c3ee7965eba7f9213e5c0f836f05a0673980e7b145e0743c4e097413837a32e42d69deb191158ec9185882f7ad7bacf9674f6f336879a8a5050eeb1b27600fa3f017ec44a28363edbd309fac68bb9b2012e5e43159e6a1fe2b04d0172b63d2ed561f2a87e6988276760dee0a686d75c68469ce12e1ce67300912ac71582c85a9a5a920e025fdf24a8b17f87a743843d20304b33ec8da0322e761059076632fbf26df57b82659bb534475446256c40c2cd8de1d1dd6b17cbb0d1866dc4db0d91621e75678b255e677e9505b2bd4bad8bc4b1e9317d3fbdae5c26054bda4b98a98dee9a586919979a0c1cfc33eb7c2af6aa3ed +MD = dbc7ace190c9dc985d2c3fbed5fe90328352b3b0 + +Len = 12392 +Msg = c29a1ab020e6434a50a271e5525a47a29b447a76162eeec569b51c3379b8b7b7300c8ff17e71b5bd9dc5e0089a780fe2114070d5380e81751e4075393518d9890f6d771865a07b745dd2d4dc0c54dd513a5f3def66060c7e0a683745212a251ee5259ad0dd5bdc9817301509b3d7f917a10aa86eaafed608b59629fe43d7e29e3d9cc0bfef8a215154476b3894e7aa5bcba77bf70cde283aa630140da5055a319c39b18da21693c69b7f9e11b96d3a4542a07c35938e4a3c65a0c0194f9dd3fd8c6634e3ffe577207440753b2952effe8d5b74cd47f684377a4cf5cb4788962d948b13690ce0188667f2b95fec7c12ae34422a6a30ff1e536e9e7bcb97acebe73d0e14c6d3efbd21fdfd32240bd5ea7cbfbb68b2578f5fb7c7fc19c047f319530d5800a25cfbad19bdc9a8338d44c191b730f44dc38f908c10d099525d446a9b8ed19ea7adea319530bee3337ab0dd15a40897e47ce8f9f9ce81c12ae38624e448e1b87bd0a691bddc45aacdda03872f0cab191f8b80e2278b775af0e0a39059c2f114c6cd1515ba4bc4c7a9b6240707798142a5f741933dce1a2b4c5d82f61f84677c31aa2105b405a5006e15fba5c672f2da1fc812536420d2fee4610b9e6116adb56371b1a8d2904e1ec40070a9948066a83407da6cc408079963f426cf4501298a052aac473d7629e9557e6b5a982945758dbb8324840e21c56f1ebbd3f3cc45c2bfdbfc2a1d3f9c28c697d402fbf8f709d1ecf4c4cdba884ab0e8b2f094ff6824388e8899997111a5c25393e7e472e42ca9a21593c695a4f0d059f36f5022f97a194a38dcd996ef26efbb90517c2174a6bde6cedb9826de7f747a67984ebe628a0918f43a06359e74f5d6b48aeb8c103eb4bf07e26af59cbe4651f4b2b75a0a1db1ffa4fd48d786577dade5d9583b1ebe3736a8f2658b4776eee98307b27f59fab907306bc6030f962f460c85ebb708eced529951b06f486f1447fddd68b4b7ebc83880cda941a1fbb2ab12d7ce8734907f1bc247752905715f75487d01818cb6869b7d6a1819a44cafe4dd1726330c7494990c1ed942e844777a4e2fa46e40249d370d8c3c148052cdf7578d1e44f65fd5d55d1c064158af055ef53a79043bfdb21419793db99dd5b5ee6780db415c18e9d69f8b24aebd7cb12927e8a9cae609703b8a7a4291639d0ed0f43a88b2a5687aa4b8b15a127e7122e4cb7f5c49a70f7cb346d773233b7181a6e8014b1f39172d4892d7d1f405570197c948b907e7d9818437d8f9f78b1ab6772a1e4c1180edacc91344b1dcb9f5f548098be98e0f2d25b744c5fc95bc61544ba2d9b410e2b29f2f254221520215a7017290146685d4105354e5a386370c042b3879aba2c72dad83af1749df487dbec9ee9e6015b396eb605181175163e36d1dd448585197277fcc980c520af3f6e3a965fef825ff3a5ee722e1807ea7b0382c5e8ce4a4ba68bd12ca69645c6b48bea7bdf9021ed38a10eeaf4d05956d390c5dbe8e772398b80e5d2c76a65c193bf6cedfd5a786964caa80e00dce1f1c4792badc96375799df1ab6a67b419263973423b3da0ee7b049d3a29d6804a41ba2714aa0eb4fc726a48a2420bf5d86b2231fb0215260c88949345ecea8cfaad4125215f3d7e5fca5d006b0828b20c16fa8607c1283c4b2891475bb5b1356bbae5fdd24bba0227c802b3561b427b5ca00ee9e8f6cb6632c18713dc22cf2c25e1150b97ee28f2dd11d7dc03f9fdb4229cfbd82f2193464be9e293479298c3a1c65af8f2b4eec2f82e68e4e5229eff06742ddb4acff42f0f0830403ea3b2be77b13420634e9ff4f18412688a33baae60bc315dbc5082b2f4b2fca521d4815f10581d2c7a0990fb61a980c1639be554d9db92f9f461b3548560a43c81839937f421826797748668b1052099f1c98384ca58cf1aa361faa64997d370ee5f7edb9b94008c5c2dd4af783d7e5cb55b39b0caca324a19dfed0aa9dee6dcc8c696bc8f2623e5388400422fa8f6844ebf5c6b43968902f839ff043e9c6aea9137655d475e491cad159dc33fde259afe648006dd542fcfaf1ea5156066ec24d8408f204cb30c9d3a5101952143882b74f93935f079931aaeec73d0c7a4c7161e6068b817bacae150d4d05a9c8f9a9022dbec5b157d6f8e8831efa8dcfca838d425768730dc2073910 +MD = 796135c20bfd2dfc7a1ff2087aba7f93b2814ef4 + +Len = 13184 +Msg = c3ec01c755385f27020d88ed2c578e73185c6d514c9192d13cb29ea4261167d33b2f3ff8ff897aadf2b42a4570ac2dbad66a6ae7e6b457f76d39bf1e22ddc287d2521d8dbae8ab2d35a62cbb979946d5586cc9967539370b139f84eb65151a82d17d20ef4efdfc8f110a16b968c5dface68b13c5c0c73bf6770b7573b76077ae80dad286836f74bbcf0871a6acd90327c7eecfde9007699ee1a61b1ee066e2f2268ebaba21e61b9ab6cac4ea2b7cb72e45bf8548ada1cbec9898fd55a7d062360cc460f4ef0cfa12107597edad5705a9a623bd6bdf3c69c8e608a37ed64600627ba24d9ab686180c23347316fa12f480334400afee80491b111e9603336fc35fb95008163eff7e71392ddecfd9548c9b344ad57ca11775cb62045d4a87f4b3130ef719ce4f1d32279888628014c5d6e2f15dc53ac1a6f5c221df80bd997cd867c4bf092cb1883e18886e878f710ed93eb1a3575116d8cfe696da88c233b03b4322cf5f962be9a92a5307d465b9d79e95be47132968520d21091afcc31b38e3906f50a37687e87c47407ad16ab3c72bd15e6f812a7fbfb75ac1ca64271abbd834f4695e338b2cbe5696f0060629878ad8da442abd23c5d37907104956f8e22319f9431735005e773f9e90fca2e1bfc3947aed95481b0c6b65231431b87d54cb25c50556e4ad25b0eaa0833aa4a516dceb85924a35303d86085dffa7b571b9d842a2d8a3a85c2a703fe3f048763b34dfc7455dd2ea2a002d49fcf930b59bbb5357d6e487e9d315bf26b100af7e6bc2d30f0074b4d1d1fc67104a295620c400434caa50890fdb8da58750daf626ff68c1abffff7850ecda3c458db8a05eb430b009664532823c3a2b4a09a8a5d5bdcdb0828a27a7d14541b4d10ece96d733f4a27552ea08aabec55857248f45f26f9aa87ee813c8bba2dad89a1591c1f309f4227ab66895f029d63596e9b95de7db76b28663ed6376cc4daf89ea2ca81bfdd737ffd9e661ba4414c8efa04e751bca0ad48341da006a8b414186d4c5d4b5d945eaed048df271d8281b4b907515f603fe185bcb0428ffa65f977a1c85cb2b63e8422a7f85d27eadb936900257c6e050f986f74993629de74eb84b0b9317e36465479f92f589478b701fa83e1c0f4177a3253f03af37ac14b6ace3e7183f47a367013485059d363af5e0798ceb798141a5fd1b407e2e94f6417c28f83bccbdea9479d29fdf98b281ef81ed34ec8b0876a716744a2bcfbd55952f04882545afff94b65f29a802222a0708eb7d49cd3fde50793067dca28ff95acd5eddfd3284ab10c0c46b8b61f0fbe47f5ab127c78c40492d39e0ba3073a9395f1d40ec1ca4b6b0a0eaadae3f83bd2fed2416b1025866393a75fdec00cf2fd9ec2bf91a8a77e81b5db837392343378f5b30f40c050c16c9a9ce059a9a0c51e47c6f50ae046509faff155055969833add0669563580e19a1812b42ee8793d8ff18d18dd012d6e0f48feb422a1fea773054ae40dc84c83768ca73fa0e4ecb8bd4c639f7aa3d3236b2132153df46a1cdc1eff03c9f10a037c78c907622771b340b908fd7610ce1d3db969fcc9c9325fb08aa14d2d58400e365d069fe538bed994c7ebb7520084b7f181d4df58b8fdfc9ac8c024aa6694f01eb9de6d9c811a8843e97a6190db7d80211b21315d1c13501569ea3ec3945f55a00fcef51ab91b3bb89e3360b50a3f1236d5cd97599b19069ade7ddffb7a35ab64df46cac21937806d66a54921254fcabd524875e09e859cb5a6f99cd4708e6dd798d453354a05e2fcd35e9f87b516363f010051649edf6ed043ec09c12fe01962dcf632e6c3fcdfc154bdb83b2228c10672b3be58248d197545d38b5400c13aa11c3ace590f92d3757b4147ce04fe17de17a1115dc825093f1d3eb60f8bb84e2cc70099fe955e7a63a797a2b2c60c871070770ed7e22dda885a8bfe56291bc0407df62a69fdb611267a1f7d7bfdeabb381d93eb491b0df9db5e49e8ba71823d86916a040d9130442853472c9c051f10cf6f865b33cb5be3b2b906f9befd821289b1fa9b6bf8638003d3bd24a583f02440e6dcb32a8b8e14a8fb41a5d61581fba440267507bbb661237bc01a0af324623723f5a78fc41b29288568619262083570dc5c155323af4411ac2e613ecb12571ca76f8cf61d898dabf809d1765b8b7c79e729e0f0f8c4c558e5269ed384507f5bd1b8f7dff06fbecdc39469e47a921d29e10e8c43738d4163d767274ba745478f43406cbfd52438e868a69f8f4792b40b6a886bdd5c6f64ccc35e9f29bc974c217cc45018445d9896579ef6b93b33cd88d4160 +MD = baa2e9bef9dd836d3d37013c296ec31919fe7840 + +Len = 13976 +Msg = 7810aed4d42c0606d0c1f76943d0c63f38d261cdaa6244b58c36997f0d53a37919815cc123fd5da0226fff19d91bc0c25c5be8d3d04d6c7d72c9127ddb96d6f082dd8c6982ddc8419de1fb2e816fde174bc314274a7c0b21059423f37f95128db90a87f379340d914aff32d0c434e9e60df02ef2a055e8484d7f130981ba1ef8c8f29288906bf53a30b2ee2529d3aad6abcc7d5b5b42cd9b53732ce96a6cc4d8b67bf85050e848e157e0755838b2e6902c3e4b8b02a980c11e56b4b8c212cad58c8fff724014ce31c872118f793a68bc982ddeaa1df4ca63b612f4a10f16f9985115f117e9574ecf8a5107f275d3f701f88380df348a7329248d34cadbdf19c90df51466d11a9266a563a2abb3e65a0753277652d0d343ba6fb1bc5badd5f210c917b18882c3609c229229dfbbd95a77b1010b2c783702bf9f64d37d0e604b138c630fa484bc811908c5e3b91616bff91af98695b51e77dfbd90c25785e8ee7d5ec178e35d6bbd865fe4195e4b03513497f72eb40ef06bc3d01cd2139ad5a1f44719326d973adb8b30d614f9e20ad7d12fe34db20b15a613e0f048d6d58f2d2050538669b990a5cf828519b064921b77eba529b634f6f076f6f46fcbbf7e5aab8057bcff4cd4e1fb5dd873ab5802e3cfd1250ae912f9119418108e17df0bef3ae00d1c59d77058b6c9b7681346c4f881ec4c3a732c87d016512cece5bd9cb678765dee9ce2cbd2a9cf0a4210b63f22344100007b0a09f6a4a630d25be29b750a4c3079f3f64d177c76b947c931db2890da2aa32935e54be5210488a1d56ef59b6a6c06849a5eeed6c7adc0673e00d43fbeb36ca634859782c99056e01e7ffed1d6fbdd775666205fc8ccf4116616ece6f581a31a8f4fa222a6bd8440463458549ac346f5b2cd76c083ff2df030853930887e90adcfad346ec17159e8d4f7cacdbeae892637fbb5a1002fb12c24b683c27e907a857b06140e21951e01502f1de448a3ed316c59a8a94642caecca0f9247dfa1abcd1bc10ba9ce121cb2434319404289bb3ed94d16815d22bd58abf92d65b39869ab3848e1e7d1ce9824349d868ab34a3c770740c6d14db5d59a4edd1ec4035dfd4759025e7231b3dd7eaba42c69a4cdb5027d9b81401ee559d73b212b0dd6d8afca065749eff6a832e930c0d3861cfa7107c3c40f76d998903afb2f1de835f1c65cc7af6c092994de8d4c59428823b9b7af6225381c86b8c3e8156dbbfc27908c2425728d66d1612a9186d74218c1f2ce21e124c4da2b2c3b0c1145cff2b49d474ba70875aef6f65e1e67a39bdeff8dff86c82b7a57d2dc3dcc781e1f71e40040f8d6daec8aa03bc25b76231581e4729206a0a1233c82b01450d15f7522c0a1bf54384ebaa2d8189d713bc077aa798acfc8f0ee8730449007c1a47297ad4f680b8757cda69da57539873ee28b00c5bbfdf540796edc1f645d477abe4db99a3e6eb8bbc07923103adcc608f2172cd0ee66b419aca0e71b145f09d9ab61eea7092e10ea8dfbde204fcf562056e4d5a20c502e01eee4fa408855304ca199f680b394b66e9ef473dd9c5a5e0e78baa444fb048b82a804bd97a987e35808bf762d22e8d2cf592c8d4f0ac4065bbf6141bda5caf22440c6d7275d3c4b87489919b440728e93286bd27f7f57788e92a05315f0e98b6e1ff3f1f88dbd9060c9f0841ff37910447278ea74e459d92f5b408254c6ab7fe8ad53b2132253d96bf48b6276254780699e1c7e36221354c6810a78830e56f61a52adc37f02444e312f3459bfbd22078b161f36ce1fcd0edc6cc3daaab033178d77cacb4417d81939e3b11104a353cd314149b943c5cf32f8833653cf938a0bc88273736b47595f0b79cb344cbf22f9e38761b09dfb60e6a3302a89fca1a3fa53dd6e63fb7c0d4b30574a67a0f9d6b32a5031c2e5a8c95264db662438c1c50bb7ee8342fc9d3e022fe7f6540739b9258c047f9822b653a0c3eab3cd8cdb3a667b1f7cb9779232af909097a389671174930b14d95c0c43f548c6d92cfed8483427d7206f72433178dcb9f4fc2e6b27cbc7ceb82e9b92e47c7cd7a0e8999e389d447d360df89885859accd605ff2d4350afb3323fe8307d5ae685d0a9621652c8597b873a0e7975ff523005690395ad2bd3234cb34ace55ba0f3930196328dddeee38db9fbece480e8d4d49ce428cac85bb87cc33ca54b5c27d5989dea3bd23068b1cf9e30f7f47d9d18b6addc5f88986f0457b666faae59aba4fa3a02abb6a69b98fabaf0a74ba89a9522f3d93c38d55f9c721f541b92d6b4e814608010cfb2efff9b7abb595e9459a0a6196b4d3fd1b5e7386874867d55dbf593abd2f961e7ee6c2e67e1acb1b362e1bc892311224ffa8b371c58d9d2497973d4668bc431a81f55200d141fc9984eced2cd71166492a5eeeac56174463425d9734b1b1f9395eb412cd4b3011ac565ce8550d5cb9b3 +MD = 3d40608ab9bce3f372bb29a62ff3fcc68e48385d + +Len = 14768 +Msg = 6b50d70eb3d958730f650f7f99f9fb046d942f985a112997dd4e60674f8e1c005d1c8aabb93210090f18de583b90c6f2b9724d165c9402eb43ec0ec20af90d9c3d5e1cec12d1339e5733b657a90046ffe7eadd7de6c11ac16696d9084520075bf35fb559267e6a37cffebe054c112433df4408535f611a202d94e9c06accb34667647b7b5d035dde5fc11fe98c8b089689c8f5222f3ca911802d6572e0c5b86482b899d92027b39aefc3008cd2359931cdbecd71bd1a709b47ab75a70fd3c0be2aa235fcd5b11574674d8a7484d8800b946db7c973c316c66a5443e55fbe705a4869786ae66a2a72afa7e42b0c3c652cc41edcb1b8fe449ad271f4b7384d7242c55689adb91a9b9faf193839d029ee9d471963b1f495a2206549b3a2024a6e7e87b1904db8890f0050ebab243a67c66503a67551904ed75f0c26a630257b0b1478c2b7d0497e2f9f78646776b0bd938ce20d3a1af2f28c5fb04ef5e809a8f20e7fd024c0d6c2a38310cd94b69cf5fe1bcb95d99383496829370ac952169bcb738325ffa4c61e12b4016e596d65d5ae19a5877b45ab1a14c48ba24af7b51b3d4c6e0771058157243b318fdf2273264c8e5a2b47b6d32f3738925e9f5e4ceff0a027bfa26a6f38821f8a784e5d2eaf7f83d1c96670614e7a8e3686f11045e08d779694b95bf888d468f371cda7fe3af0fef2a9fffbbf4085cd5d61679306b6bcdaa3d0de60840ec11e53c184864b8d460aa5133bdd53ccfffdf1382a71f93924cf36b93b027b93f24a94b19c847d722aacd24e42a087bc9127d953613184306e613799f5c845df0ff49d893d29fcae44ee61a33bcbc2d7e252fdfa355c116541958eb6373b4ababf2256918efc300c3bd73a5a4ee76be49b864575ce79079e4675235927e1f2ecaadea710b8858253b86f46bba57becac63cb990b5310cea42508dec9ed45a63c792f7850e24c584a62bf6b0d650facf7e32ae106ecaace3f8556a850b2eccc74d41eb19735da1bbbe2ce929ab92c138cc2aa05acc3ce6e360e6867349e60ce5a62b13a2ed9b6346cdfa5a4a8c7598935a954ed46fd041953694505bed82812b7ccf2fb5df5680925024a8780b71e76b8402e821bc5d4345c3ef5683689cc0252b9e9dd6bb27904b0f3c7256ab20342de2e43aa7541c7281a34817ae4d8d404f5d29dc6a237708cd4592464ade091556f1c984e9a99645d55f4f0210feec98266bf169f48add50858dc672e93684f1833b13757d3f6333bd5264a4701f233e36e275c51a63b31e205259a6a6272c5f1f29627ab6880bd2b617198d3000d988fd5b378c3040a0a81a3dcc40063287c4973727034a15e8993c37de1ad556782ee630a71dcaa41eb4dfaa9eed7deb0fb897fee1bd8c6b920dcc1f32dbd48277868e0d44f86df0959aed1321fd91b32ca17deb22e811eb8086f247b84eb2076036513bb1aa8ec8ade0cf1225fed61d7725d5865b416f284cbb2b3bcef1f277baa4dc565db2919eb01cf231fb6fbfac67ac1b4afb27f8a44f00f385f7541a35ff588be7a9af3ae554b5f2dd12dec2c286aadbc3a32a42e2100ed790b1f39dd496c7ec6a35dedf3ef4225d7e2cba64025cb8836ab3b6d264382b44069f4ef1d629897a5882eff30e27087ebf799127ee424baebadd6c2b9d1fecb5321fc4babd1003c22d01411ac555dee2fbb9d182d8efdaba3e60a8b31f3fd9c7ada3f36cebf2cd30723180bb0718fc36dd3e1a1964adec326fedfb0d4d3068e7f3cc696cf54a5c61a2b40d5845d906c6bea6d930241506a3b9e5d19eb96a10929f19855f6b7f27b248d96587042e853f2a647d8b79bda08ac6e8daebd6756753f9ebd598b119b5cecf4227abc481ddec9af7956fe7f05053f157658946cae3b8aee3e8cd68929cf3c06eb24af96b977baae0bf71e1558c9bd3c20fdb6cd30c1d28622d41f48233eda6bf93f925544858b4b03a161865bbced8a94866cb36570de11711bad7611108fcc54b1adac4470052d6b3e0dfa964699a8d9dcfe46d3b078353348c93a7bad23d1056448c4439ff0fd4ab56b9892d0873df7e5b4ad04ea669a7143bbbcea7d5e21133eabc5c87c1462a9eec389d6c080f2f78bd611808471e933f4cb25e6e8086586291ed65c6e38058fd15df5ea804c6fe0b5ab99cde861ca7f43419df556e844660ce81f86dd268d044680035776b35bba4b7c6e757cfee45f18644ba12fc767bcce52c9ce31a4a3113575dba40c7d5e8e3491b700aa10e0da5b7d5871db6d758f59a4fcbcd37befbc8685a659a97121635a329df4d95e65f8f4d4ebedc2a217e89426dfd92973180f21f58cffb4594c41a4a748db70b11cc2cbb12d9e4c2ef5ce671f9bac9c53c712ee10b41d97fb8730fa37df3cd9d1ad3fc85c460be2d8b649bad957bd95e5a3ccd61d473bb91f7839442c8aa07b86bf78d41c5dbdea690361759a3c957aef5545bf636ce1828fca636acc738ebe98fa73d53b9a3aceaa831f81ab72bbb43a8485932b4c985a1223b75560bf8e0ace083ab5ff260cf460df8ac45420b7ac8ed99538bd0ee7a96f2c3beb2f9928c7f18ed55ab129bac656beab27dc6f12c9b2fc7c9861dc57d76f +MD = 8bce8c69fd802389c805d2945c7499c9dd279ea2 + +Len = 15560 +Msg = 43b1ac9c15fcc2b0168aa9862db0304441ce0c5659db1fa80244fa18f2f7a02beaba8cfee1c2f6805e8153df26bf1b4017ecceb354b53966a2d5f619122e32d1e118b2d19cf918c68716634240a8b66ba0335af5e213054d07575d1778d3b8dbee7126fb8fc8b1e95af0e396c494892ea348b7024c1d0cc6f87337fc6d0fbab0da6eee66025848519cb8dac5faaa1defead6edc4dafdd5373fd18daf370ac1b86cb614f83cd06566181551b62a13f9173b830521d3d8e909a21866181eeb545b6ef2a09b8759918f95b04f519cf6a50f5ff7060381d9cea5eaf1cb1f6cdbfc01a6c99836291b5237da30dc7e987caa3e1edbf8512a250e71df03c3ac67014012dee406b16b3d33c3b03e002565cd8f0b3fd7e4f317e731d748f756a75986a8f6dceaf1f495e8b99cdf82c42e4c10dce08c92d1d09045bd3eee748cf88891bc15698462e6ef436e2a2fa32f81956e1a24cbb5c7d2dc673c0e9a236e873d4b05d84c5a6071c177d9d5684a4a07880ed03ec5e7cee0457635ae12ab033cbfdb0aa54f13f37c52ab8206511e1ca66c19869842d1efe2119a31881eb65400586a53e5385723f0eb08f223b3c8ad478bb6c4990a1b31c189fab70388e967b94e206901d0d0f9b3d4b6b09656ef05d32b0e13a9e46c9d63f5bf4f8717ee4651ea24d35fdf247cae55dc44c5023c2d309548fa30996c39b19d10817c926df9ae749f19692dfbb5c9b6a2371a7f562c48118d0296f2c40f93c816d64bc20d86ba34b8c48681feaaed3e3110fb94e70a01e605b144b41c27f2c0f9d55a6f77f75b71985b1da4d4650036b157d20b94cf455ed792a0aa1b87b4cbe007126053547b756666985f26eeebe64a9506aa0784fbbf2c2a139b6a39c332f3f2db5f48a301864b6e5e789c4b97962250ff3ae8310b522b03064eb145053d5c201e32feeed5ed6ffad7b7dd86eb8e64132582dedc5c5ffda4df8c97b16433401941a21e3cdff2f9926be692a7ce153663e04c928fd82ec995081dc487c75eca63ae77509607dc12be82cb62b42a75c0ca985eac516606b85fe7c9e1cf15041f88cb793b0335f5e1078430f6b7e6f42bcfb581d32bee31f289e658968f386e6a100270888b51838ff4d9dbf5b7eadb9ffb9f7daf2359f59e9b6b918ad117e4d181ba23de3643cf430ee99408bd1e7243d4be1ae9448d9be41de03d669c9aad7c655a5be60df32126db1d25d7d06a0040e47b202993736aed98ac24d1f9a91394434ce0481749c160e5db5509f8b6cfbeb33c56161af3ace194370e74ee2c5c41a4f77aab5c2ef618b48ceb473dea25e4c76a8559e0f6a7e897e9c3f6860bd1aa0fc3f1b7e5880976ce99b038a8ee4bdaaa6e759aed62a5282b2a0a01c62ebaf80c180c15b94142a3bd686c8540aa89c9e4aeee804a21ecccd762ad3ab87e5f52235e946de03fe9c70963e6d50e0626d9fb94b8b3fe19c4fa24f9724b63e107e1ddfd5266636c460938f1e8d118eb6c3179879adc113477da985722dccf40fccdc15d0ba949aea192d4793821683fa1fae6ee5ea38c584c96bde485940584843d58e78ade9aef418a65659f6c06ec0e5bc833caaf766f8a531b09621c0c93e859280196ac5f166f18711ce55af8d8fb7da9bda7a9d7607a3c382c821bec57704bbb14f6bb9f0b73648206d29448edaf8710f4bc38b71364769eb7ae3aaeb76338998973b462b695971f8b2ec2fe1174a28640d3051f70902cd510ac21599a0b4b48c6d53fb0ff1dd9d113c08c202e90f69209b2b7165f458463a14477f5eaaea95235e40392ce52511e065198b82b4caabcb722f7a5c8cca6d2d040e58b8e957d3f3d67a90f0b7d2891cca991cdf0f0e78cb2eb6dd3936dbbaa076712216e08ed954528d8309ee685afcd901d6865c4d48b63d5c0a8a870eb71ad80a7c2724e21deb7ed39fc6fd5910272cee49072109a4030a8992cef1d5db129544b7382b142a1fa7f747b66927411212a8f4dff1b6033822b9f6851bc3af1e5aba73e8677786776a630b56c645564436ec6a7f42e4fedc2277b63b494a9ba484c622a66e9eab7932915b367955c84416030a739918ff55665d42502eed393ba01253f0a4fc119b9d2cc7c416bb3f881c97654b68c47d3a8aa53b72112e004a39098865af124155067fd18e02f7f486d7040b754679f101ec1a020fb48f7956cc262063f163c34c0b150902e28ebfd6c1f35d6f969c0332271626876d840cf7b5f2cc89f0831fd71786beb11a01c9ee59cfdbb8edbd2c41b8141987c09e439392f9dd2640d2af9cc84f93173dd3db342b0416efc05fc4c71bae7b7f4250b5c0ef95e2e746e4fae379ca06a3b2874c4ea23a9f5292f67528be4f9cdc572dcbe638716e4b973c9a61b8a089f51c9e95a45bddc5affa13b5ed3c722e3d93980e99e9f6efa1963c069e114dad89d08c6fcbb4683a565a29ff8b02a08ff17c11f65290a0e7a7e885b7def03be1b062d3033b48545dc427cbba98ad6532c6754dfb86a909d6bcf28c36caf1e5b72777f51869843cb098075b8f8ca94ac6fb138eb6ccbf8c4d6f48c20be872f5ae4d547517dcf48bc3306d6be6ed62abbd2ddb66909b20c2ac2d4fc99f9e1fc627909ce58a0c15cc163bce7f4911760275cd41682158992783759bf56a7244f1c3afb598d78d74782a08aef83ecf50098157ca05d1ab753553e6a1f804fb8ee302e9333188c77d0a6f258389304d9d0b806be9c239fa4176addef623f7a05a1 +MD = 064c6fccb707f0f3929084eeb0298e800d542370 + +Len = 16352 +Msg = 0a72ca03c9977dcd0169da7af1fa3f3f02e374175886de21a796f54348daf8148c2ddff950ca918ed1c65747c2de90579c73a7d036d3430c95babd4d0519d7a06815ab07cf53e1d64773255ef6dad8c966b50645203a99657d31ccc3b9b4e2eb493317746ebbd7700b772e07b477805e07b07abe3f4448f2060408f08b337fbcd58d0b8a5788d923c4da5889243beede286ce982ba78b87cd93a5b1ba41f18dcb42e708faf4551b61aa58d2e6fb08b1170f23ddaba5f51ca9ddbac8b2b0014148f1b2ccca177a6f2b7dfb43cbd5ebfbe88495c0e677f7ca6fbf0e289495cdb2a0e5d298952a8409f4090b5fc35ccf3af17793066e8639fd69b80e75d26bdd5e6d8fd4d0eed5f878560c078b600828daac68b9f29669024232493a24fe9aa6a12960382a29825e36bbd78e4b24508f7783d8693a1089071553f31fba7bbac0274ef75af8e7b81bc1affbfe3372de797e12372f314f7e9f0349363daacc34a05d68c5dbc1bc0fb7a5bcf9e5d8ee0a6d7ac2058a7cb5a260787c93027a72a0cdbfe14c2908e8c1b85f4d51c380085cd1ea3de3f960e5acc201888a1cae0177aecb430ad15320a6a45adb8415dd345e4d38c022faa251f65a2ad79bdac9fb31da0c28825324e5f6f23502015b44f477460303730ca57d079f50f438cb32c257c60efc332cf29b6b285a3b7a125beb4042c57234bdeed968e81068f16c8ce961f92028adcd50c35bcd47022ec9966b31d9fc86e87cf2f982ead5a0564d4cf2e8fa0c4842c2a3f0414797d0cfef6916d46214dc1ed8365ffe0e3d24c7dbd751453f0fd5a29b70a4c42da921be0268509071aacc483e3d7f22d8b370d696d0971f3ec74b3dc64b535cf6179f7990f8ab0e8f2ae1e53d7cd9a9b0b51ef31cad26cf8faf3384b1a87e64275f949319bea8a72111b7765488e1eb4cce89bdcbe1a2ee984409180bfc988237dd9b9b1b1ebbe2ce0bb79bf1c63a70036c4b8723027df4ef12465833cc442fbe3e2ee2038d7759fc556ca6b3d945d06b2aceffc0743a5b0a9675c5a7abd3d510edc91861af4d65129b312719169674ea66ae8802db4ab9514d11f0f60ffa0ad668f49ec3e8b0acc759bfad70229ee607bc44a0989c217889a2a56aad5d1949753c2bf598ce338980fd629a7771e19c59a83be9c03b7120ea339a931c37a41983d3f9bd5ec46893b612c49e9d78e1104696feb4383d9c3b197c7beae1143ce378ccc846846fa253fd165ffa30cc2fda5524f7a05f17253f8de9c4028a77464fda832221b8248332cc948f5dffd020630bcec12eb35c8e96be080d5a86d552a71fa381ef58878db88b09ed3a49296542e0f0f5cfb3823ae93053b25354b2d491be8a820fe40d247ddee2f40fbb3c50e27b27eff3fe0cdcaf7b694d9d72946e883db49cf3f939e9cb2ebc3e5ea48d85da10f02a4bf160d642059559996efe630323ce2d4bf672305900e226a7c391768268d62f382c32aa49458440c7b855649af713cd687a6aaa8fec11376b66eca583d94689390cd6db3dd192adb8dd3de5a82e41f7e9d367bad846c60b1a2d039546f8cda2df11e1eb98306ceaed5c1c58b34fb52740b01de3daa75cfc54745ac8542dd8168ae9c85dd0c85fa2b593855064c209f5fd9ed1b80f9452957adb66a1240f025edcd31e948020074fd231ed4f052bacce80de4799df8443512dd0cbc24f12b8e6359c49422ecde05ca3b5d8b74ce31a2b6b1cd41bc30dabd9bde2deae3dcf78373573ccc925387753ba7dbc2b749ece972cc8fbc072770879db8033c7689bdcdc5d183dac0be638cf77182c1e44b5569c367142fa4676c5dbe7475f90680e33400ce8006d5b5da12a7a138cf215ad3e9528943e5bb783805a6196a6bba4ad380cd571b97f9c054cef23de7359600ce33c63a042575e03a47feafccd8bb6ef379d3733cd753683989814f763c6dc4ae0dc8823f36f929dced6e3f82893074ade7bb2acb0c0c34f10bfbdecd29cb2edc40006adc6170da85bd9dcf74c642e568912c84b07f4bade41c09f3d447dac7be9415f9c4ee027c9c81346a8ad719478b40cf8ad37839597a84539573ddc216bdd0b038dd25d6968bffda15ac03dc2580bc4c431d3efec21c0a80cc9232aba442be782d104d15b0b90038dac293b404aecd4ab8741bc170307838a0198fbcf7b32416e246b0e6538e4bf6c0b4cfc86e7d3b71efc255aaea2094251af03c1d9979cb315f6594720572aabbcf6aff41ea55cd6af2ed35e3b85227ed41ff81f712fd7b72aa5642e151cde32f10cc6b46019e4cddc9de03916230f8381e2fa672e8a6fb80cd02025abc07bffb8ac35b0039c081717a7e07df7020d1afb766f2b5a5db1505d0501c05d08806c7463516961d2331cf0fb489f36b8c78f9168daee9d0068fa6b927d70b14b9803a4a0ce5313230279f8f67d0f5dbdbb6bf438d2335f28e320d92717c941000f4fda02e10f9024d2a880381250e467553a9444c96c292dbc6e2631553c74dc62cb85085df1514e3013272e9d06536c2175e23b452b7385513cc32fba4cd5274ee1260f799aef05b7546e4871924322aca87e8ac9e3d6d64e074090bb7cea77003b3da6e88eb1f1b4e6c62434770c31533cb991bc17cb770f782ef2dd3f1d5243344c5d1f2f5288d544bf205a4746feb1bd340eb049ba1e11e9ded49425e63f6456d2a0820f393184e8c9fb57655c1144a47e403afc3b01f1e6d09474a3ed95003d510fa5a0ee92306d66e3b063e3ef888ce8e4b0a1b6e92bf9b4d0f34b9c09933257f91e86eb01842d2697f9c5570ff9d1045ab5ccc62a2c8cfc18948f69f399e0480b4113a735ecb28976a80c2de9250b6110beffd14b803b06c9ecd1efe980c1b194b1e9bb75d697f00e2f9 +MD = bf2d47d4435ace28d3c336acdd6313aa8f9c41fd + +Len = 17144 +Msg = 09ebb3463b01b2c492ca2b1f6ac7e6145eb40646537230d5b945ef330d3f5733a2fce963a290b79c4fbec9d78f6bbe42a851b69448f8709dc8e2b021b106e4e68081060ca687c49dd39fdf657410d1047b96b2415e5a5ca16221ce3919c4cec029e0d3e850ce21eea5d63670219f65805deac1f69d803c0a0e6910224c5f5ee8278315a0a74e16b94ec996a19c01c3ded9b5aa5b0e5358ff55233f8452c1dc8702d097dbb3edeb2354e2c6a0ef1c334774603617b8b9f7a9bdb5230934d090c4403120427d94e7564188901422dafce3b8512dd3a49b6330d0888457f976c1c86b0d777d0c2c537a9c22baa63b2268d92cf15736d8e2e2bb16042a16a99ab9ba0acb6533699b77b6ee1a0dfd44dbbd5258a87be95e74bd721691ddef4d24bec3a6d5b20c9acb9b33bed751c244ef4475c5df63933e3b3c7e58986489ecfb190bc69226b2a9a2071994c14e9c4445456bfafcd5dd7e1ea607647f888e8e0912b9f26a88ca9d0a028ff840cb344bc5085b7f699a6e28044534c3b011a33b35f0f6b3c5a2ff7fead6bd73bc92316157d46edd8c7af043d75f2efc91c772fc67fde98f0b3af65629c9cc8c9d693c8ee3f3cb9bcf3c08d87e3d1d978c71a3d8877fbb10a4195a2ab124e4cc4b19fddb51ab9c4199aa60eee127281c08d9ded87ebf93bef907d104692f2cba2f6a1b4f89450658518aa08de86477146dc5ca0332059a2070cc03eb3931cddeaf233ff37408336761a570bd7b3e330722fe0f618c99f7be722f9ae70974efc0340e10cdf83e4bf630c3768782fb847b914c56fa74c2d32068f93b00c13eb8e927f137e8fe2d758d26ac5df2e5e491fa217647d7d3c956cfb8f2903f4ad853e0ee955b496f1fdab5ab27cb078c41830b3a4689ff8ff6a752cce241ab8a8ae62df3c225fa315aa2f527fd69cd5f5a81374482c57a9291ef310a91f64c6a9b9a599c3f3c022e27f4d602f6de4c4776b404a7f3a251c2e255f5dcc7562bd25596eb53d64a694ccdf8dfa4dad28c2adf44fccc61c98b09310225a94b094fabfe036b7f4df4377596d8987671ef96f2db58a71994e1304ec51e49d8e6b8c1dbdf0861876de47590c8b989de83da7185b3188cf753934979e7d0e9d3600b874c40ce56d5fec22b85acc63b45d73e25cdafad33cf6787dc71df408e0181a9abe4697cd2d0c8355f3c8a24351436c1bbb0163f24079964f420f597bfca103b348da13b5be092e61b9caafeffb1680b3a1832f5e809afd2966d71fd0596d7682b2e31337b6d267d668f537a228635c5aaec49f8063b717bcc409a99e7cd9cd997af618bb9df4aa149fdcec025f965971314a4700607a9049d81b994edd7283580f7796c9d9fc7facacc64f99074bf287e778b8471d41d18121816159f1d4325eff0c1fdb0136531f4e55a4dec5e0c21f2ff455ccd09965d31eef9458605b451ea81816779a4ebeecc30fbe3bf1f142978931c21a510dc7b04e9aa4c29f845607c9200d181ba23d85c958ee4941f9fe9171b56fb7e50b71b93f27051105fbcfbaa0c87644ebed398abfd5a77f0c57509d7803c11e231efe5e4f2957cc4a0e2c97ed55e476a16c4d6c14ea8c55d7b5d30c0a8168c581b4b8002cf5ff6cc257f73ffd6cda35d2cbe39a772c0f662a92106db7c2c9369769595f27317e7b0545ba035f71ca0ad678969644fea3188b587352fe4c54f9baa93cbbdc40477f9973df929219265e42eec0f00cf6e9e55085862c4c92be8791f0ecb6cac70cc2e55ef25e23a781b89ebb0d384d99366530a5b37a311a485883ecd3c0712a111d7f537cd682b16e925059d5cf754a3b10a235a5cd3a6794e526d9ac794dde06c7de1de99c4ddb4f83fe47b53612ae4a601bc1b795c6ef26c5e153b141df77505a780ac30fd379a705ff0125fca429f6ec03b683547535607349f79caa947a805dd3a683b1b2010780e912a293b841b30cf0a07389b3cef465d711c9141b5c194a777dc6127825d38d22f8a58bbd8a215b78fc02b6010035260f5ec13ec2907d98e9fce4b2844cad93632fb9553267a45ff345db69fb9db53c592b1f5b28bc3fd191a07a1264e9f83bf0245880a56ece72f60a4805f1ebf7015af32e29bc33e27d1514f0a2a88245df70730d8e8504024cf7a5f32a827f6d1d7b63880b0babd803caa6d2e3adaa09065a9842ef5fcbe2368ec547382bcca9f930e8b77f8568b30e48e2bb6612c5d43915108313a43ae0d811d4cecf6c58102d11ff3707b80ef5e51664f4aa466a19f0465858abe0b5709a3750e450b2a64211a513813422130330998a2910d70b5cc454fc3e0893e0240555c6425cad3bb25f50c2107541f97d6968eec34a332e1f1dc758adca4c2f7d91f3a143439a9ce35ebb877f5ba646c6f80aef5da6e946c375241a22616817efd8977e71b6392e47a83bd02847ad6f7284d62842c777fa0c52e19d265e761dfd41c7ba5824d77471c45838a5d9e5f7f27871163d2c5d9c3c4f867e341204c61855faf161001413d42b973d7272de64e94b5225873608c1e5b39929e64c8294d39db79016e86d60f1468f3b08b3052aa9860ff2cb7517ef9b37702c873e7e0eb1716423044e42005bbd96cdf31ae8ddc5b0f0fa7489f999cf33d1f2c19865883489a7369392306665f94472ac0af7e2b044aba90cb52c34e44105191fcab7b5df3ef7275f54c6f7c2722ea5ae13c0de1bb9a68b1eb73e658ce7a00bec46130c1419ba91c2167458d3c0abf373b5b2245aa8581d04e09e902b802947c1aad5ff65a287e25657a6fe2c6d42c887717a59ef6956db69c1cb4942b317593a699f045651e5b5a688fd5c3ec099b173c757e35ca52952b7eb52f564e8d0bcb0f2cccf68a03a781d3ad5f77d63073aa337f96524c435ff69bda42904aa0bfecfd6ed951f361ca634dddf548add11c0a033cd33ca4f034e19d96d58946f2f7bd1a68009dc5bf2cc87f267f7c9974feff55b41e3dfbe17db229eed08a6b091c070b212a242ba635781090e55cc1a28150d1f0609b +MD = efe28211673e7bb68657243df023d4b70c0e5325 + +Len = 17936 +Msg = 46cb5d391e751146ba9700b4fd5f36ae7dda1758d8fe50fb47ed0d6275786d8491e23263a1e7be331afd3bbfaeda19096636bd30f0d277973ab9b54440c67786226603db799fda10eb52eaaafdbd0585294392bb317083c7b23887ebfc7f80cf21df376a4ca54e25541c773e910fe46bef89ffc140df5ad3d7f0e91e52ac6fa5b7d336d8c3ff03ba7ee5494313d89d03df8f6a09c827e603d06b44a7e9542c510ccc68ed85b7e0179134c8812a20189522dd3c5c6f510d9fc631014c6b7f9e1a475135703bd5cc84b4925cc07ff03d69dffbde82dd64b9eee0c886d67d35af4a90eb052b8c5fb1480f866dc7ba4ff4c73f72b643bb68d13947ba3d0cc97f4628112040e4215f76accb98635f824625f66ac82e67b1663dc8228f8cb8f7644bfbef7b4e64a1dc03f81050a6507fdcb83f8788adb56664e5e39acddda0afeda70c55819773b5df407405379e625a1995eabe379af6836db1d2d7fe978d982140a369bc84d8056f1567d3d4b45cbb05a43f395f5ff2af8689dc00a922485a08ff0753b37b5d38946a1ba1af4e0849a9ce851d87637193b9554b3d57e6969eaacc823ceee5c8f65627d69851d62cad0cf90695380e3bd70dfd65b88f4b420c10905a4cf62be2e9be34e1e041b2918f360e08c6f9c817228b697396d9b9124b4131d8aa52b373b7d37984a0074cff9530f6d4db52f9cf1c3981bc02bd98d0044599447f8ae743089ede06012c0a3e6a0197b2facb09296e212e8a22c45042de25aee6f2272e1985254cb12a375615b4b1dbe94ced61eec04b56231e75493182e85a052cb0efbfd572a9cb43b0974d1c49a9c3f83f67e6b9bde2d01f59eb64979684eb54ad94fba18ddf9d762034ae49d0e886264a84d80281bbd94df69fa5c63814de93a68496917cd46fe90e9700e44e827b0094208d439fc786cfd7cbbab7d4f127112427584c497289c402270b94cc5eeaaba7a4ce231df01fce81d96c1175050ef5aee5087bfc9f3230844c970250641b520b76614a051deb717e2f837c2037da68cd2670c59b45b3551d6e6bd5e57c551b46000e615f3633e15437c7a2df6fd591085256d3304b545a54f550b6908ee22ee2a99f1031223f458e570028b9954599e7d1834cc2995d67b24a0e4d5b8208b467d8dafe85cb57c6b1f9f5b9b79273a7f20bbfd95a1716a6bed36d414d4010d55bf789d46218c38c47846ffbdf4ca7e4b269d122ffadc73d00f9353b6eb142b8486d7239d1f1cabed86036963bac2977ae5183ceb943b75400242de2c7bbe586b5a25ed6d83eb684eaf41233d39a40896e2c9b8690c12f1447bd1edf5f4743662bfe145382e7cd0707aacb7aadff35427b63e2f18d0f77a45c2ad0d93f3ea28131e95e57d4d5586fb6e92812d3c150c95c5c20b8b715d72dc7d50b796d864bff4fcb028ad8ee9ee4801af2a44dcad94799811d8217bc97d711249767f30986070d0cc995951be98deba3f1d7210018e3bb39a0f8b3eafec9c1813b4ad9ad9ac1f4147b2013457f9281eded54594d55c649eb73c29588552c5f53c0ca255cd1568b4be0d25b52a91cca60aec2fd98d717cb015c87c57fe4277302ef90e1fd71ee5a1abf54742caf534d64fbca13c9e7ffcae224ef49b5f3e386f68e441478c3b0eae7e24d66b9d95e92629e14a5c7cda6cdf693a42b14ca881f96658ec7b50fc5c21b0f663ae36f6521c05d47ba7cd1335ca5704b7383b13dc74c3e14019b9d556b1f0f47f790b89283e8010b5bcf3bcfff57858f27e9ef2a0580df81ca14b4876b5aaa97a5aafd0b3f40520a8fa852a13f7498155130cd786198117b2a089d834c33a7ff4d1886f8dd3217e95eef5fd2a3647288f83f934f63fd9caa2a5da1729514d026f5c29b82e5251a53d08caa89b48fdb8e25fe89d6941748b8d1fc067ccf64ebb5a89084d1e08121eeee687beff85e9acfdf55f6367b4edd4a28cd14c8818ac1536b6a880c56adf562bf691a2cf93779f52e2c2496a10b220b35b8157f33f01aa94838f15bcd135e584b78ce673f833ea51a6b591f8cb4e0a002a64fc86efdbe5e46e205e7cf1a23789b7ee1c850abb289acfadef9c6b3dfb4977d0bccb819741b6d500dd8e32a0e69b6619978b6159d49ebc1fb4bd76ee7edfa2791b29cac0588c66b505692abe5d4a40b3f9ff92bc78de0a9f73d454fc0f3358a29a39f1e3a4c58191888620571606e621a649f54f7fc91981cf99abc316f50901bc74bd8d9102c43ab96dda17ab61b5074f032f7f73e0877b0a45d1f04095120ae452740aa7b48d252a98be5c87db3bc936b3a7e8dfc4d2ffc6917dfff6842212c46bbbf7736b6ac55e9f33a225e3f8dc0fc3d5082de66a6486e4f64eb352a7ddbf190be06e87ebbfc7d9d095101c6ad43cbc5d59d8b5dc6dcdb8d168f17121b046f2da3203aa6e58f8d11b81e0d500364015975a8ac3a76ffd95a5db5b701e3eee71ad78dd438145543d8b14e2be6776bc6829869e8039dfa903ca123bcffbde382e0c3155d3b2f97c5795aac028ef19f41c6a6aae8c2251527bd4aa2cf1591296806ce807eb81e9d3b7c1dff3b52594a9bb00731537ef598c665c0fa98494709c0145f95deb6c9afce6a610e7d3a97b2fbc523c6d240f5cb97bb6bf3bea5c7cbb293e01d263d1815a5c98da2714d941f8a8f63330d0f0df6bf47b455ea31f9b7680ab8e1fd56f316ea240b83be9336db70952d3fabf32560699101e7c3f4c61507014fa60c0742fcc20042790d14662dd45feab155f42552bb22bb72f2f6142cba000d37fa5aed0d57e79a4c06d90d5cde760352b21bf514dd814bbe1e3fcd45a7905a5b7057dc92d1607bc350e911b1b861deea6b6f7eeef8361793f0d8d7a8f6389ed91605f7d258f44da8944c5c7487a8e54127f8a62834ca89b910c81c9dd081417a936c2717122978c1790bd4ed76d47f1e8fbf5609b8c408f72517826c5df2ab06909452a72a8a64d7a82d6363aa6c134a4acb77daadacfb17d7cdf35cc4134445b48661cbc69c7ab1c8baf0204ef80b8e0125efe43a0bccdfd0f356b62e6c75fea8493dcb0fe9201982bb626a8800ceb05cd3a86c8867e218b59192c3c286a4fb13e5ccef2cf8bfd57e37a38a800dc47802df88bdbf4ba58a31ad91c8a9e83b029e63f87f4551c0ae63369ac860a6 +MD = afc01657b55fffd0c739cf017294a8379f60c2f9 + +Len = 18728 +Msg = ec2f7852d0a6e6d13fd4220233a00d9c9c063d24f65e3b5620e1efc66c6958c7f378818c2b7cb08dbb51e02c8d08719925e71ff332b031b06327f23e7cce65eaa9f3350212eceb36afa263445e4c81d5337d20a10f614bda7443b0c8975351b1b7a77dfbae7fff94c6cd9592cdf5a4176cd12978b4f8f39efa4010ace58185e1c59c42c126bc546fa6dc5d5e038a412878ea23be4afd90c29e23f9318ddf67457adb6a9aa32c528ff7d6a2ef2893c2d100d0f4bcf8f9890f07f655a0b8f660a47f6bdecf4d5562bc62c44e8e63988ed8ac8c86bae773484dddc10b418d4cd9c57b5487a74bc1eabd8ead4883dc220d052325bf003ef33444ca8a035c356b3871179f4c6cc6f8545b25997816bcb8a7220ea389d52601b5bb745b2539d7dbe670fb531464e580065ecc91c68f2be3c4f5140fcb83c726337c833b59209c224c8ace78c9d9d1e36a8e2d9b1a35502acc48de706d5048e9164da0338758accad18739175211b1a9e6b2f0c25c51541527e113ce5685d2d3c7f77349972a2e5bdc2ee3369755ae58e494bd0b742b5e2c3d885c3170698c6bac42a38771de4a5bd74875e080ecf07acbfa3a804a0b97f8770761a2a2469f392ef5d9f5fdbc2a54299d961af5209e9603ad1228c73927003b25c928d46232c5b5dabc9a240bf3cd3af5efeede37e135f475eb0bd1fc35ccf2a93dccee076e98aab7f57ecc15d04f72182763237ae0de06196e32519ee9e5055c6495d97b7b3973552ba9de20e76139cee781ac31c419a16342a430656cd2da06e78b7b0680307a7c07244375608bf7ded75161a4b46e2d190f69549ae61bdb6f6db6bdf2a50626f330f6e15c645514119eda2b1ad96612047f8aa7847e496f5e9f1f87851442de844f27a21c1b48f82fe525f0dd5a88b8ec380e106d5de3fd9c25cdc209f26c0cf50cc06dffaceb0b0053389a33605d8799e2fd769bab71eff2a6c854c46a0c170f0ec7294b3fc6b64b911d0f65136ce8d22660c3578f7cac25ca1927ffa1ab679afe47c049fe625fda46dc39ba9a3d4160ac3edee9318b9c003ac72201c2d0645e834519410f4670731b7bfe7c1e58fb0c1b9faf99ba26274a9eda2c14f304762346cb1c7b9afa4fdfb80448f1c6467f9c1b8b1eaf52d5b5ca9d5b2f7e5cce05b0efe0b13ec80766e6c47efe63bb8e34d8560b13722021ae49e051128827b679ce258dc0d4c0f41b4fe8f2081824b8818a7126762b4d917a8f0fc4bd7a79443a4590d93183ab49d8e4cb674e592a4cd07817e52f2300ae8164d1bc179c7d01b0ddd9ccec94b18f046b16e5b76df5d3886bee4e269f62fe2c90ce420a355874435da86eda4ff94d06ad70752d9eacd5102b9e6c44ea9b0be1daaf5d7e8f35265c8fa4c8e1fbac0b4872821d983278d8d280d0446f4bd25d090c1c1659f03a9d613976e1eae1f1523181f3e7de72806635322ce09009307a0decbc7484a18f63bc24c6c1de4af1a829a46cdbe8a6ed06a1085947906ddcec5343387fe7ea5d00d3183b71a37cd49898a195009e16e6417ecc008155bffe3b45d8373f6a12ccfa10dd7df823c0c1a7e641155ee809949d3544c897c947c0ed4a7562bdf66303dbda3a355e445de05f7c4c95fdafc91ea42c395a90d34c488cc9e0610071232b2a98f80bacf09d5a47c08abce6d99caddecc725d745a18bea02ce2db10c59b6b70b4dfa6e90ec657e71bc3332050cb69d27db97a4b48f14bafda4379f6d813ec3495b7af1d8621fec8f6bea1b3fa9d7908a8d4591e842017433bcbe2b994d3d5fea348cd5040f67871b744afa8c15c0608b38ca1f4f6ec49e3b742be61df224f57465aa98b238ded6ac81d05068c4e375b08a9fad6869f0918b66fb7f7a34a82c5e6b4ead5192d843c8f114ad542bd35880df30ecb1c808168a01b7381c79195d2eb1f39370a1f656e76e8261dcdef27172c3282dba0d6d65edd0e9a0a3340b106bd633eb8dcacb988e36943e7142d3690cc2d010efaea337fd510d597cf9efde8c448a060781aa813405d463affbe8a7c54ad316d1204be55f1e9cc3283f5a20069960837c6b15996f48cda1f76ec4a632e7abaffd06b9f67976026e2378bc7d612141d46aebbf59967bea59d61fd9fcbc15c45cd1d69ff3d303f8bb0d3aa95f3298b8894197ea3a401bb4fbca83ab03e751b7adddf440660254ca5a23f9834de14c3f029ed438c402a4a818434eba643b27e00390045db57dc5019c3639dcb1f3d84fe0e1452d7f44a35e3feeb58a863e04e80e966b4a7aabf1292182703823f0a965a4a74f3ad49c9421c31b6c8df246753a1f3fbd991e2355cb6ab741082c5e5c0abe5f76e36c60f3ad5267e857211b0550c61a5fbc286a5f42d83300ef33935cb99e8840a99f384e4b5e329d58aaf211c683b4e64611e79a3a0a84543fd246180ce5a0211ff58910a6572a0014f88236f5e87dd5a97321831b72399f8c60cd3a4ef435bc98f7e9c728cdbcc50e8231f18964f3a268c4bea6619fb1674797cf202a7ac767b72ec0fe5d324940c7e087bddb79a4d1067f0570a6f38a3013cf926619b9c3b6ecf2a502be257df7b38c0a1876a71fe5f51aac7e460e327e5370dd788761b92eccfc1c90c607b97e73fd2f7de56db355d7100a2bd95028c69943f6d40de31633b9a38e050f599a396bac6e7a924e0da50f07a505db5a0b9d5781750517be796a45717ffbe4ab8ebd1d225d7b27b88d581f5a0398c69c296710d1ee983f744136f2fe78d2007e057dfaf7531bf04dc0e38a9fbc61259720b847bdb9e9ef750c2e4492ef23cd419cf0a78415c9966e36dbd33125db62cb70058ead7d86926148c4bce7795da576c3b98560ec0084aa5db57bc6d68418b9a5d33819800ad299757ebe547e0c43be083d27066c5d3582b3e4f6c954d7c1d210a5e68a87c32abe20d0db7283ac1267e8f00efd0d3c4377c80ed6a11762c8b56ef21c88fb6c052fb94f96ba10b98c14d476afad552a190a08779df69491c7c41f5c3c9d3141fc6ecd6f72a3bbc12b3559457bafbaa330aa03d3bf226301399e9028e92fe0016b0bdb94f1c7cb3f7a49e5c1156cd43424e83887bcccf92d88a56ffc84c98e16fb874274868ee590f3e3189def7d086960351528094ecd634f690d5ba1e271ff0851b072b3719162126150107c58ed9f6d2138293730666ef85a06aac31352262c0b94040b08453f70752aed3e78ea52b63d000fc91a4a9d1e08da8e6ac49518c1057bccffcb7765787f1768c865853fe5d90b403154e07a2af5f76afb8ec16381efc6220423ae90a4ef94378c9 +MD = 8a148c03dfc846b484ec15809d9cbfaa4b74a060 + +Len = 19520 +Msg = 0b6edeb5f06b22773d0af727dd59bdf552a130004ca497bd7a233d9da0a325eaea71faf280e445685ae2e30756a5b57887bf9976d05c9930b2c863ef6331f9f820adaab4c37f410e98967c1d6d56c003e89b0a151efb293c604c2b9a58661571562ad741e4c47e31a02cacb04bf3455c1d3c6c235b09aea82cb87ce8a9cddf1d33f167e3093b659919af590a1704ae4ccdaba5e9b20c903dbd13401f7bebc0c4600944df5b6d5c0dac246d71fa12629ba0ee9faf498e36c3bc655e88f94a212d847a548001e1cc570195cf2e1ca4c911400f40bd48160a02d0b6be6b48716821484d810d231f1e3dbf096789a4424b765215725ad82d73c1a20f481093e8ff685489b1cdebb0b8888f891dc9ba74509181091ccf2159d9cada77e4be00384cca4f36ce097f1b0400181cd93888c3402b72f226654a25a4e31ff77abfb7e8b90fe15dbf0a07e8686c03ca831c33b6830cd0d877617b163dd51996f259e180acfeb3056c15aca04e95f79b03bee6d681fc41c4f90edeb60a67715c34d5a6888f606d36bd7595ca1d449d984166c7a9a3c36dbc93b3988c7463cf51287b2d89c9fdb7f89a70ecee3d3f9dc8265cfeb94f28fecb2d97d420e48fda7eb7929f0bc29d3754eb50d694164e9e3498e7b48eeef599f6b003b8fbc0b53beac7642394e2089851985b7d45103b48e2805011aee9f0e847023f6ca4719b9a9d4137e2ae910580f889da098893cd44dcc7e03ca3a6e293c50c9319a3600a9da00e5404e0375e9850a714a2e607cb3a2a53dc5ef58f924278b647e781f4c9effa1403b0b23cd98761d8536ee6d4fed1d20e8f9e2a0bca9c69e9a2fdc594a236b33d8b0ead083ff53305dd9810622eb2dedf4025cc8150499f8bed84f7aa5b1bd47036475803578ccf17fc46ec19228555ad361a635bedf2228571a3a09dbd4564954a833c96ebf13cf4f5a10362a4f14062baa67500693ffbc0738347d5905d6b9310e9df27c1cf828613d0dca37a9ea6e514f18cd88cd731233e4b74ba9c0af254d0a2cb20a3ccaab39dfbff456d358f1e8c222f4b1e63cc951924afb4a8f5ffbfd2d588e75790ba65da4cf5b1455e04f56a62e7c1e68ad5004b36812b7ec59dbc5dab9ce6a5c4bd8313e9454ecac00b52f5d83aa2adf5534b1da87187e423d133ba4c91835710b8f591fa7783c404af1d76adb2563b4b4e5ed7a30830a3b7a50c32dfef28331bb5a399a814bafad1f53e3508d7455835cf21c14ecc8e8328202f0b8d3c3c038ebb75761aa35a35d0e79d7a1230d8cc5bdc7c22d247094b1f4a858d7d02278d10d3536e7aaccb3da98c238df245755e6480574456010ac5432cf402d8c8509a4a0425cbedb774da03ecb6b5d19e86d8f9c09a6d0381f7b73dcd65b0c51721f1e456d3d39d4dbfd486103f3cd7c47100c1a62de6014f3aeab436c1e06d76015c85d145cfb2f513f2dbffa7682b3ea09f6539f8f777f33926516deedbf76d58a1d57e63065438d8fdaac1d482f694797c8c81e3e78df55e32bc7cd6e68c848f897e6416c2a99d77be9a5fb0d15f4f6661df87d7006dde10d89c6a5f4c54440cdc258b4449dcac56fa54e0229f8ff6cd140552ba883c36b6de994073537634386275fcd6e513edde7c804c1132ae11185ea7ea76c82583ba0d5c05f9451bdd7be213beb5db76e9770bc5ac67d4e328ae076d58f1084e4f832d8dc1d9686ac53e26aad9c7762f278a6ecb070bca56c4f7d7fea31590df217906d47dfb058c76e7f4e056f6fd632f7d6e3b65e55f306c5b9603d3c8a70182045fd7404763a878e0155d3c29b73d8abad3bdceddda99a9420b23f1f496dbf98c024112a5cce7518f51ca9348ede2bfa765f84bdb82b80214ff070480a6970e79b5b8fbfd86718b5e6fcf643ae87d56aeeb95e3c7a1b6ff393a5714541c5a493341e40437da6dadb43913b6e9ed34d8362f3b9f897dba281a84ba2a58434f33226e6f343b100340f8753f913c472fcca6f79385095eed061da5d84c74629b53af03fe94f1705dcb94ecfafd1b3c97ba680c45a0308e7720ab645a8590c0693140ca3c2a4142a0d6ef66ed036e16942ae336f8f5e4547ffe2d8ae8da94a6df563f89ce0014cdf7ea71abc0aa1d1b4da57f3c548e0ef72d2909df2955685c254912095f1e505a888e82821afb1194ebb2a4e8037297c0aa28a92bc6fdf42a64922312958adf317b4a8ab4a3fc30c895daba00aaa965f71e83733666da2158c4bad86c184ea79af9a6f10a04b7630174a4294df43c62e4b1c3d1c8b2f5d52d6c489bde917292dd2a2b1f49e5349385b0985a97863274ce896f2aa85255f9f285c4d331a8fc874135607d3ced7aa69e703eb3a60b9385ffd10fe59fed0276f036b7e72d04f66d0f42cd71aac5918691dc1f9d4129677cbdaf2c6c752b05326ca8a8419a4e672e907bfb645a158119a91ec2813288b741514b4d26f2b66517b1021f48402d58b1090671bf158452492d5bafc53fd18abc03cefa7bdd332a0c066da464e74ad0dec50bb7e8a3ba0dfc64be6fd331ace9d51a60bbd3004d5df8b211c0fd564cd79d0bb35649cc60ba1c976c8911cfc0db74e028199621aa05c5fe15fa7b56dc75d62225d548581e5f900f9085e9e3b668819b4f9b2c09f22a5a32a2db47afa2b371538abc4f0e9b06401150ecc2333598e494fccafe80ced49f96dfeac729459856e60a94c5b780b614e8d4450389e6748513582c724ee60c7c71f5af648b6e2d6e23cce4121b7478f4db451816ab71034c5f8b4bf13ae1d9d90d0bb2869fc4799f51f9349d022053c831cbee62617d4e22c2bcafe40d67449eb04a7c962bf084d2bab80dd0342b4f78338d4d4f75b25bed8214deb18f2254b3a3da94faf89956f0a432f512783e74ec29b4c045adba3497e8ba62c288b711002ee2821cce68f8df588f76cc9801cb0d5b67ccacd33ae1063cd6c37dc0d1836e988acf63750571891ef618645a1b5bc110cffbecaddd6824c692874cff16b3e32bfc0236b417c9d43d8f624387352cf19114d46d0448d3d7cd1438960c2ea8482d5da3ff544608aaff83dcd1e7f64786275ddf989f262a099b845dc2b0c26a86e7d83a251e3c37f2aafa0e764107b36618d2a5d3481d73a1760b7f3ab37a0283a1925010d79e5e94871b819b5e0f787bac9dad87c5d5b887a7d12565ddfd7729a3b66c274a178377de0fbca607b79fab2de37f1ddff800a376fdd7abf5f4d15f346a17d43e4db085f7fe470102a72fe0e1cfa4fb5e2b54dd2ab71e74c506190c9dd6d87f7ae8eca5190fab12178630011286a38b0a18bb1d0d29802813dc561a2724378ec79140bf8e6a6f4310fdabf606330434ab673d4b6578872fa81d90701779bc6aedf0b2bc9c381bfbb4b3a6a705fc505d08c0e24f7bcfbbf24c72cff6b800f07bb4ac4d828ca138a1ca512cfc59090e70ea +MD = 8ff89c859a6ffa3d3874d3d1be4125f9de62c9bc + +Len = 20312 +Msg = b0517cc1d46ae79e220c9ee73a2a54d67e6da0f26834f63222d9d665503643d13067771be6d2d56711651fbfa21fe9b9eed24e540227e12436e2e6af0567c3161b7db1f8b053b79315c1d92c8ccf8db15d7b6e9e26b7341d73b2e4718e584494991c921fd9f5756b55a634f6a0432608f3f16a967eedd76600d036749611af95d0cb825a0ac0f837fa9f98e485829d04d7bba805b2d0b34706c44680c398ed5feb12e96febbd263f2b316dc0e494dbee326192b26a68ae07ad177b5dbdf7e53a10792f2723f3e8ca11e61b506482c70e2b6c8e674dbeb1f01c503cd22d367e706889bc4a5b6b2721d3450a5dae5348abeb6306ea03d9a5487cf7f3a8bb5ba2481ac9f9a03a2bc98d9bd6a3ae690f480e99ce610435c27058f49407a70e7038094ec24cf0693db7548e224c0d3ebfae805e36077d8b7ffc68adb0e097cf7c27fc2efa1e048fa8dabed6b06e40d56a62476221601dac1a2fc0cfd2e640a5885969dffbd8a2557519159b087210d5184babcc1ad4ac419af3a78183816a399bb5988c4de09363ab5b9f04b3be45e7d153f6c4a6cbf1f1082f67eb4a19dc33bd23d05b76a09f60528aa63a38bca7b29e616e744fadb5656bcb4636af165f3af68b5a74007e8df5738d70651fd3fddf865e5d029ce2c044cbae8d8a3ae0bbf64fd57e0073e427c9154c45abf16a11159230099615d2da3731c2830e74dfb810cfea84275539338540af6f3735eba9fdc9c0bb5943e5cbe6a3ee72ebe47b1d307fb0b41030e57ad0fc9e352f73bd8e3e33f6ba72ad845af82c1aa048131db4fd651056e48b50c4535201debc34488881d8ba500adc155116d12e564e872b43208bf2b1caefe2d9b549c0b305fef45f6ec1f5c349560276e79c13dc25ca0f9340f93f0eebe303809feac3fc335c29daacf58d5c56a5b1921494af7af4642f6c06b6ddb56fef1b83b93cf2016dd34fc2e47c6c635a508c6c44c1eb78e3dbf5961acab6ee7d9b92a8aa473609dcedcedfbd5f78207ce0f9ce202cb01d1cb9c8d8233db1013d70d0b81b13755da7310ef9e0a59bdae5dc627e4fdce4b3c4850ffbca17b535d8f53d7ab3a99946f82778d8f456bcdbbccc2e457ad9708006c834c8b661acd476b341b81b10880af4587243a27bc3692a39c5eb492c3dcd08099e048f237d243e304538fa502cf1c54b6504921a97cd57aa8f3863dc32e1f2d0b57aff63106e59f6afc3f9726b459388bae16b3e224f6aa7f4f471f13606eda6e1f1ac2b4df9ef8de921c07c2f4c8598d7a3d6ec4b368cb85ce61a74338221118a303e821c0f277b591af6795f50c40226127a2efacce4662fd7076c109eb59b18005e7165f6294a6976436ee397774e0df5000b17579b38d58fe0e1b5a2d1ccf329b4fe10f71e8180fc5165a369c705f6150f8c8b20d8b7b6d64cdc0ad69f2b8373e734055a2ea90575c5658610dcae483b50b73c6fc4693a74f363f681444031a6a0182c67804962aa4a7776d3ddd16b2d6a96138c87d8ca307e8164edeb93638986b46d663de9fe6086a25bf9f3f7c7b40631f8be488cccd3953b3960baad82e5420fb19e8c12416221ee1bcb45a7c497cc8ed44e2f0caa25df9b5e23d915f7827b31de58964a9377c4639f91fc69caa063b78d8465e0caee05a8bb7e71532928da23dedc821c5c66170acf933fc5419574b40da8129096f6ae6a38b8aaf07f9f06ec9772790d04f8c1ea93183744913fa68b3a025da4740583eabe1bab7363aea894f362a3a7f3f56b0bd46a0b6d2266a246feda6fa5cee22c2f33ed9d643c1f6824d9f327719225bc7678cfe4c85cd210ed4077701b0b5650418177a74c71b8eda3306e2ef3474f5d326990eadea84a9686e822878c932997298e01f2b16c42e019e21bdfb67b3df5478df444366c97df1bdd23dc82ce23abee44d3a61e9484e88ed642634197b52dbece451b59118191b309c29884240b31988934ea185148ae0bf42be11c0180ad9e13c996cd00d055575347e31bfdabd430476ee6290b54da97241e82d023661cef43cade1ca04cd20ea3f9e4cdc1c93abd65c7c3d82a71133b4e626ee4642e22ba488e1acd58bdb1e0e121c425d82e0b47cb88a9ad166701fe5a40cce02ba26806095e736992ea99d5f507aaa8aaa2f0d761f8bf3138fe4de83000c44de28896db6e811177b59c33f6c8f3bfe09fed90730f612eebf6fe9f01b9ea80b2f0a954415f411b7f299b274a402d2b5420d69526bd091d64b92e9e52db452597bdcd4841c4e4ba0a55af1cd946fc158c9326a4f55339b522ea57f3e27f5bde84b1bb1de285b3159fa3a0baacc3aaa51162a568eab9391eafef4146b98e72d102343d792d8bf655c67a35aaca9d7d056af31b860cd7517f9332b43ee0eed32698ae190528bcf5a1074237943bbebe5a1fb050a96395c900541978835e89c606cf871868dd01f722eb646f1f080cb4cfb9000c77f8dce8cb7c0e54be3b4592992e27024a544346fff946a2f43871a989bf4a1698d292f80593781297800c81063df69f5594682861ba519bbbd3d4e3b3b9f837b5f9a13fd91fbf78b534c5d976845db72fa559e670b4ed211be21cab732f71377676ef066daa4a4fc15f58e3108cc211808fffc7537183fbbc6c3349f1aa1dde82506694e9bb835e6209ace7fddc8e76f15a4115337979f24779000557b264f3828fed3376dbd16f413bab2d64fc2aae290f0616375239ce64126b27cacdae401d3c6b293c909c4805fd3cfc6e75fc81d1b6381488862957ba3d5cf67485638bfc5ecabf62654db25755479e42ce6eb79155be554d9db354f204bbbb7d61eb9dc6fdf13d10df4a75df4db5590a8fe71710f68022af1d3e8fb36f70bf0de9ae3e2421c8eb7088fc5944ec6c76eb41cf6af7a066c2d69031cea68564474aa61535bed33710a7e7cb262f3a553c0f6b8d78ed5c587fe97df6da734e7d9e5f1f864c3b1a26f6e08420a3474058f59e958b099b313e9f116df47bc1d2a40b72dc6a4944ff7de341e8619935055ee7bf4730e5a927006b75e79378381ac2d5ac662af580892420f29af8d1a0914d5c9b0ae4d3be46862b3e733b9b812dbd4534442c1898c003f51c224b1031ed0f9a5a650f9d8297b827939954aa44137fa333feda7a33ac03a9e709c42190208ae923e119099f217fa69de2466e28d5ee37d01d9be2fa560a867ad6c9cb6432a8931e046be0baecc1f283d57aafd67af4483428d61a94c501d2fe11c4d5552c4fdf75596be97e0168516efb5635f60a781f86a7f5e8ab01d1d69a431c080d1569144d6582ee90675a0c86da43c72f8e6105ef235f15e41360da77f3392c31f5dd7bd1b218b59b26816af2fcaa2f290c994097237c69e9029826bca983096cd5935c26c796084547c3b5dbe9f1338d8f0718a52fb4ab62d6600192ed626663bc73ff772c62ad36d10a336827829c031c93d741cf6fa5f6989fb521483e0cc1b265abea6ae66c17cc3d2ec240c33132bd25c3958c151d4e4f3f8890417fc42cbf51a9a708890f904144ec10bc1ebcc379a526c6ed0edc120327c308618d544cec1f42d78eb25c483707b67b21fa +MD = c0af54b14db7ef0c68b1300b7350fd2a82fe96e9 + +Len = 21104 +Msg = 5e9d7b803f8a40cadd83200abc49e7ae245635a7d1c2d16dec6740443a4497bf941f8d82976ed44b9c78aa34eab8ab322b82e9e21de93e858adfe1487a9e38caa747edd831c9447b9305ac34d630948605787fb5e0ea5bced4930ee72be553a8815dc40a7763375fab724e93e7784ab1988020a8828ecf50b3caf0a8b5e18f6208a939a1cf045601ca06bad8845a76bbcee1f4446b9d43130dceaf13815a95fe26727524a3734968d90a158b179cc0ad8de5221004df5e20cce572b0f5180c87c202a01b5a79b79cc1c68a340707cf8ebfd2d395b31bc97ed65861087ae29d02c39fe10e5cde49a668823e5cbc634c664bf12e59e11b2b35156fa6a27982f07913926086116aa68db8865c8a9e78de3d198a5ce6f7a52d4e6f71660658beacf39923460be1e4765998190a47150d2e1c11e584c45b8277d0cea8ccbd815f79793d99bb2334166312ef85701a89ece30a1b49cf79777ab0c3195afd4e5a2d0112e73ee65872c613c1a710b88b62dba6101f00658fb254802f38d024414defe9c67f58f03103bd2e6ea703072208a31f3505506d8e73da911d1252671fc06fdc9ded3000364fc35d1fd7a68868e30cf581b5820ffc24d288949127ee6f1d7380a0190e3ff0bfa048de1f4060e45bddd1fc17dd75632c05109d9c99e2b9cbc47dd6ec39d5e6b91b96b2671bba1fd9e05aaf14abc44af33bcf3f1bee6b86322a7c484cfbe9a0a6fdefa4977dbc9fc3db39a19232273ae13b6d82f76fb05cba6c25fc229aa3a7ef0efdba97af8eee839715da7abcc4ba5ecf936e1664dac6cb541ffc575f2c82fa1665fe4ff959947fdc9763b58fc352d2bde90c61151049cda81350d192acb931ddd278a8a24517217167432af34d8aa5ce1663c0c97b6f2831a8fe7a7b4ad5fb2aea2f88f47901d0202c82c0328aeb3fcac37b1cca43bf44b7871039622f5dbfc7552bd9351ed9f3af8e296193a1fc0879975d5b5e8fc18a02578df58e83d9e77abc7481ae5b28f4e7373ff45dba4569a33b1067ce87fe60d9c17e98486dd2da0cc7136aa759753a90cccc60d9ff4fc80f569c266255fd2f056dea09d815cf00451d0f7a673f482d72f8d98f4f96a18e86910a82611e46604f02d93086a458c1ec67709b3836293554616c6806a7c424d0946162150d62597c2954f59a42f585cb4c3eb46066a1ba00af90d3485b3ef0b506a9adc447d884578961405b162fb4a87582ac28f637243c8b4ab85bd9995cfd8feb4db7f73048a7cb0bf912498db64c89446dd80f74dbd19da4ff884a5ccf6fd82e293643f30c33965708070298f37f318adeb8d8df47878ca59117d610b1d4897a298853a83ac4934f55826ad6d408155ee7107a00d12500555450a43c69f44ad735f750d7392269fac9cba9d1bfb1dcc770271c5fdf75a3bd317bdd686197c14e35c962097115c1604a29e6111d402fce6146e785db3d1ae410dfa81d008599e61147b0c44a65438ac1e64a1c577eb579a2b503f92b4610d3dac52ee1ae8578a8b1b963932cd9967f1748fc7cd33317d21cbc974339582b907575973fd361079afe67a2fb7f3b6347329824b9fb27fce1b5a3cbec6b3b1325cb370abcd7dfedc6de989686ab5151ebfc1dec5936210dad56b1c87b2bb67199c353afe223c8d2343a9667bb18e409725c217ae6ebebf23ee82fb678e092edf54410af381de360ebfba73c222ebb32e439eaf6e8844b529c5165bd6bf1972e4038b832462efa3df307143d4456a0754a7dc189e5680ad5d07b9b03ddc88ddd8286915f95bed31154482594a8f6597aab0fee5b67fff024e14c19b356cc3ca1c416e45fac36388516a52166d778afe80fd7b993f5b1c4e7d7ae26f35c656c230dd0f85a13fcef40420552de57426a687ebd6a5918e650c5ba880ceb79fbe40b659c1777537ac0ebe052fe21b2be52a101a948d756065a6793c111c534f66d00d46287def317752ef6736e5a6f522e3c9f839c323a79ab7569437ea615bfcfaa630a91b87b3ad4b08e50eaaf1768c8e06133ae9549a70b9645f59bb8a5bcd2b2197c7d2d744da71aafd1b9483167e6364da1c6260df941722ebfaf236b563dc0ffa0936465b7b41362de254e45b751e56eb62c0d0dd517b22c89040ff0f5da7b1b5e1b86d6e0c444ae5f74e9dcc0d196c9582773d1a453fe473be0a3ba026f8c779f5cba4f309e559b3cef407de92ef168700180e2cfbefd88be8c0753e3c59a1b499f29590f0ced315dde7cb09c2f9d52e7005bc7bc2058f6f850644302a44e0d462cfa7be5d4b479aa89c4fd419d438fa36d2d08d541b79ad273e210c6d450577c4b563e1abf547a0c3741ed3e408a288e901d2e81e8c07a343fa844961c4701d54465291695723c69321b07fce01b248fb054c027df1ea007fadf66dc45dc11385e4ec4411eb9c8abc079d3e3459d8b8d16f94631ec771431edaeffff18b6918ce23a970421ce25b82a83da5c36b965720b354806d874dc9c603e96675a7e88bb18502bc5685c5b7ab863a3cd7d17bb25d5304f0e6abc022e9ab6b37cd6dbffac48b907edb90973d7b13eb79fe05e948ebc11e2b16cf88ed1e53fdfa55376fd47ba9cb3e5dd7d74b95f3f9c3b2837f9950a018a57a4cf866c8701a04d98f68a74b622b8149c616607088bdc071d49f1220527ce68dceaf4e7c92381d96e04ae1b83739de1bd5d52a9f54dff6d863d841df7ac364cdaf0df2af3ce07b29d4872246ab6eab60a183f866eab8bd42cbaba6e26b74a6b678a501c4d29bc40ed69dd77b31428fa493b3588bacd0aa4d8699cfddb71932e4a604ea71f5d27eb2610f8fda6b4de14436d3c9623dc034450f131b25d0198fb4d19e1b2b091d01c0fe4ca9c8abf946ec0575d98ef00ff1e5cfc8276f690e13b365d112649ee4039718e5b3da95cd26f88a19f7767608599c62f952fec46f757ced6e7e9329cfeac14b5b3c949b4217f62f20b19d3251d1d553474c7884a61b5dd2a6ae4b3c292dbc002db26b3ee080617f2a7677b764f12d0b3272412c5a7bf2b01a3ff148885303d1cda3e2f33106c704a7d49a67ca4e10053b430d2de52dc7f0498239c175e1152adb8f704abbf1a32a295a89e5fa3f0adbd25d10fbee973a2da53369497a5e8c95a7d3b7c7da07628a1f56aa946d5a89e9982f1138cf4ee5d2cdc214430e31c68cd32f1ddd238e919f0a7791059c0719d8ed1772471fcb476a239cdf4089e15f8aedf0170d111dccc37b3bb1bc2eeb470441c4b8b95882db5e37421ec4a613b40a48a527da3b2b50a1d1f1a11a6e7d7e0646a55901f20c1e4989504731cb1f60a583dce4c6fa3de9b4af57d3c303144b596c47d7a384cd8c968a260d3a618ae1c72ff5c245e6dbd47673dcbe2855661b78131ab930795da2efca51c52111dcb3f99d9e44f9897bcd61cfdee4cd0de98aeceb9c721b5822fd9fba520398549b53b75d14f1344a9410f103fcdc2374f50612464b96d699c3f920eab54d02922d4d8aff283b98a2bb6bbec0a508be233f0992c3b69bf4c697323ddbea05e263291deef41698893a682a257675ff1fa11e21e8e45bf5f867331530fe6ec2da4015214dcc8e9ca87a20d8cfa5ce23aa7728db8f18aa4943e42e2e94d2b2083ca1580431f8eecc58ea5bf417cf4c1af10dd592ffd13fea79c5cefae3e9624a9c0f88433609b58c3ce3900888734e4985edaae4a5be7b7e0c94bbe6a8b2ee0e7af32c4ac +MD = 4c66ccc9d6a9f1d988bb7ae0fb41be3a1e1a648d + +Len = 21896 +Msg = 54ad09ead61540366364b6f311e3d9e3736c71c31bda3b695cbed40f5554d9ef2ab54d10954d3b5f9e909c01a6e97ae8aaf356a4c6ecc87cf86765be2740e55364d586966f73ab677d0fc97a383783f50848143b91e0ee027d96a0ac7be9fdd487777b276d70d97588490507d0b53c3414d1732f839ef62371b54f825836699a1d02f569952a0db248a71750754bedcb56f73b29a40f28065e2b38e7c70f70ccaedebc04f18a8f45448fc9fc2fe1dde2562233d0fd19cbd4cb602484ce5c5c92c07298a18978a657046ae1b4065f55a29dbb24cd95a529b441bcda0178057315dd2851e863dd9b1011a1281f03ad9d32b228d6c7759c88cf47a72405caf3fe7d8c67ae80899fb697f29a66e62db3fdbb1dd31167a3e4314d6589c838ce0c44f25698781203a83f152fbf63b08d5abd6567229d5529676c5523ca8f438b398f9bc1217745d7de7eb15177e62629882457177f41380f0b800f0ad241ce096325a0576b73c20f2bbb94df29b9f00b267bbab551c6b85bbab7a4a109a68051704f2aa0de3430b3763de5613fa2b53b1d0ab5c900f57e175b573c70d885026a4a556123e28138c9a74dcd60206a1dbf531971dcf494324ad6a9fe00a5a8fb5cd77f6c68e024825ba533746334d9d2a1b2f01675946b7cfd13f513d8d9d51430011573f73ee3b5705a3701f2e3b679e921d7cb1d4a440237f983a381ddd5f5edae5ea05966877911ada19d9595cbbd9d8715b85b7ee56f00729ad5811870459bc8a31915bed8784586b86fd5b2de43c7cef306b7961769606683d162f16dad43362c06b3b09d5714cdc5a039a2b8b66eddb9ddb9fba29860bb87c0abd296d4ebe04190bba3a0c1866a10574acd21bc9b9caf64ea154ea6075aeccae522b1639eae2adfb6ffa75ca446e1bd8e9ce0fd55f31cc4d14ce3385e2bfa169748870161882e1a2c2b7bd0754780fa8f75bf23a4ca4a24f70928f96b16fbcd49aee0573e569769a391e4c601563435d5c184d390097fade2b2e68e3804351684bb840c3c00abf5a598a9e6515c4796e6e9f8b7229804871cb1e5a2cddbf11aced73ac9636eb3e6b9a894d76c3fff464c53e377615f21d92d6ceddb30857700b26acb36bc89f66468296b425ae9a56d8f690dbb56471dcb9b4dc6e16be80ff1b5dc00fa4e37be963883f7ce2440803235923d2a07364287f0ba375d86ee011561969fbe226151a4b31f0024d12edabec8353d6c7e15d632b31d0af7877e94933dfe70293ef0f8b761634eeb699af939d0bcd32ac3cd22f76ddd0556787f1294d17d3de4accafbf7c9b8a8ccf56b26cad38ec80cdc446efca562f12360dbc13fa67ccc9674d9a28b7387d76f7c8ba9995b13e3b9d3640269e31495054879eabd4361e6e89c03359be736a47b06e1cacfefb3eedab0142567b05bbba53741d435309553822e32fb51ae2fd4999c55d19418d6af16793b201e929f29aa351bc9d0f681db0b314d3dd34fd8327044cf050f5ce4f01638c33bb51348a8bd4bef0fb61c8c462cae3c4349529b85a90837b06946457781f493be54bbbe00867fa5ef0e2a1d5b8cace755dc40df94ebf07518c95b610c00b693f1251169f9acdb25b100a99ee3d43336bbb39f0b28df0372855825a1793b85ab1c4d9db25bd867579db62076a7ab4c11bcf8fa89092c4914413e2b6b85d969c386f7e7ffedb12a24fb55170d6cbafd60a2d0d6c0ff7bca4493a2f528f7836ac3784978b978e02c72120816cbfda8500bb365bd18d2748febc2ac0c4198e091933a6bd749c40c752b2bf5a618211e4dfa38df36f949be9fef1786f71c3099e51c14868c1599de0e358e444e5c9fc4fb157866cacb2e02023ada553e2387556e444ec22087bffefe7a831e97ff40416245bd20fff647e7c1b253446abd64bd35f42f461a06fd134de052ab0869cc3e8a704d3860e25d16e341c978025190784115003b02f91dc50351421229020b627c7f71d472f8373670ce861c8e49d42f9b8d0ac861cae5be29b49c7c8233c4563f5b711dbf9e9ff07140d056960cf68a49469216bde01ea3c7f0a9109c62c1c1dbea953ace3d5beced81f04ea302be305526e34da1a3901fe3efaef7fef9c84c59162553273e34d1ec782e2e3c93f6cac6174494927b02d88798f658305ea29fc0c668925307f248760dd11bea2764ffa500fc131ad03d76bad3c85cbbfb176118e2a71dd9025df89428233f3426d278f9c854f3c00a0aa285886b2a2636ee3a69512a1c41963c8a4db16ac2a2f806ddca59945c0c912f04ee9f28ecf979f1d4bcfd39b8142a59a5aa90efccbc05c8d5219a047587ce7443000147c7bd2be6d418cd1c18d8287af2b1aefa830bb6e2080573eb67b827a307c09410e5f9b396e586a91a6618f768186cf1d21216711a1f7ecc9359280582fa3841ca6e357bc9ad0d797dc759ffebc0e342c19f659f3ac2948d42745dd1dbc26ff1bf8af9ea46d4b5258b6525a8ca921d8a0d5381a90898509f41e0e1f174076d8a355fce68d70386968d68035acf3522afff55f1f54d4ab9e8d8c43ccf15723bf575183b5d42e289b2caf87c7dc052fa9bdfce3dedd07fd7514e48f4d188aae01bc7dbc9315018c5628c3b17796690ae34f5e5eef85be0b3c2ed969361945864e372d0fe4dc94e428f195c5cb68998446488c38b7db4155424fbd3a1e60024d034c0216517752b091fbb81d39df111c711e28f9ce6a4c5c35dc12aa4c895b52bf8f7f383f81c5821fcb7d3059465a43c254972aa9af398065787c1266e1bb47d166071e259857c920c58797904aff9ad8706943c01693827f895c0ae425ac8ce7643c009a079406539e59bb75695b7211f611cda83ce4a2d2a3250c5ab199a2700e80b8037c04ca169a56348f0e087a1d5a1320c88e97921d4a799f11122d28f9c9678d08422474e86e1f7b33c5810349110005b78836a0ade3dc2bddc3b170f32972f80f167d97577e27f80a0c4fbe23bf4ab4ebb64c8f02f39f3ae752d11aeaa315918e456ab1d24ed243886edefb3bb965e6eb95439dcb1e6564e42bf6974ecad1e20c7b8654e754d0d62559c95b0f93e3f41db1b65d44b8b1024acbbc769e053a5210155af1052486486759795e0de3476518780f6e3e56f4cb81ce7d2966f6a17a3faf52f6ca3284e2c4ea6964c50bf2c26264d910e68db3093f80d33027f3c9b2c1a6090695033f5dd489340fa382889462148e05fba17e43ca9f392b5f90f5a46c95d781041b28120cb253cf47fb8b43bde3a8bddc46b913b986295b8c62c7c786fb690685fec1a7e3f2332420bb4d68dc7ea3a906e1f5f192c21e712ccdb284a74317f79902be67e0c56c9eac66716c243229481a17a755dccfa2ecbf56386454097ed4bbdb510a89a86aaf697189d64b9a841b743c5fc8fe2b313ec280ebff03baf84e7cfd4be84517a7d6d650e92fb9345ea3a3d491b38d5153d7c4d22fbd4ce43e954accd199b9afce9581a921e0d38c13713784bfbdf0de855834be861775f19c79a3eeb4874dbd296be9dec692410e4cf49db16c30cf2f4020a0ca81a6358fbc4c26b7573977dc52da7d6649ac783765be44df19c47ec00ed1777aa4d201faf88d21db2c48de99d561cad42da7ff93e82edb823ae1963d6bdb5743523341efdbcd53beb61dd8622b8230acd50d2da05ed6b03f52009bf3c1be9eb92c429bbaf08d0ad69720fbb1cfcc7d54e254a8e93436616af1ba068fbafbdc40a5787608b13cd5b7120acf252c90df60d806f7db02de7d999c664c6db2038e7e305d4745b86d32d4e923b928dc8ff55528ac8102453f434fa4adf41a317623d65f59a5fe508eb0b46f2440395a1a4db656addadb65c980f1cce99 +MD = 0f5176527280b8e3fa69a6c14ce1f759d6e9c67c + +Len = 22688 +Msg = 04c873c05daf299923a2bfcee193aa104fe90717193083f1e20f799a897a5bccab28531869482a366b70689a24d6bd4758c29fe8dc43351d9e227413e5148857d93375ec45affe9b9cc1c68a3ae1b510ed399dc8b4591de4c62cc6c4d62b7dc896d020627a4e6d6fbe7f1fc7aa1e5912153648de28da05ef6417b8d6e62703c6eae79ea28f8c3e5ada91bc78fcf373f6d8a1ea53c02eb3e67fca92719d70e2f9de6135d50cd03b06f6dfe5c6b9cac9633e62c94e04beef6f202d9cbc826ee20a79242e237a842a181d51e1d9680a250250622df87df083354e281ee01d8acaa1c419d1b35f0fd43b54cffad8911b4d7b15876079b22d35de11a35f05f62a6465c52865ae46d90115a54176ebbd65097595baa9f82bdecf137186a85196b876ff863a343bb44a784e178f9e3c72502399d9e44f9d7169177b77b941ef849ac9160f35848333ca038fb2a1baf03b44618ee8eb9b920b38d6bf2a247205483a255366039eae4ac168807f5f12329da98dfccbb9d5fc81b1d38693b083bc6bfe525e958acae3829770c885b2ed2822e76d8d883445065c3ed879b843bb3b745017dea4b44f4a61b4e30fcd8095fa5166cae7294632d52346ab40a3c663abeb973d7c9967770c718089ff5db350d1b28e6bb2b5d6e6945e3115825c22c333583a8ddf7e8d88513a642a3e3f3167d5cec81a9735cba7699666dee7e93d23fc44a3ccaf5a0dcb4043c68d747be4222d2c7a9d3db00fbe7c514fce195401cb2d3739c59636cf8802140f7b4a17b2c802550ebd4e2e8973f61a53adbda55502efb7643f3a19bb07be35a8bc671d85a37bcfea426fb8210dff76da427ee220126a4e8c01430bb98f9d2ff718759444f9c12478f44a54bfd6beef4c5601154c41c58319d45a15b169c78866571985d713fbdb1e9b870d4b145c0c12b1f145c0d829de7380273d8bde63cb5c40fdf72539527d46fecee8ad100155921bf47b641ebde803cd518d2f349a7d419cc9f218b2ee9157e6c5efce12d353355cb2be205daa282f83810d85b393287c33257f97c8f69fb91b17299461fd8d633bd516dcdb172760695ec476a5775377cdb7a48bc19230d3656a9ee847a58c8582028b80e22d6bff4891bae8506d8799322a6bdae6eccb0f8c6757b30af4d601f7e326f4b8137e72e8c1f7c4fe9e4b4a2924dc6d7f29f8d457b55bdbf311f5416320ee20a5f2e823119784f3f53127f27c4dfe2cd4743f8b8ffcb24a4a2471ab8d61ecedf3f22f788bba685c7d4fa3f9f14fd9ff2cf3299afce665e65757d0a93f4d2641e83adddb1dd4abe6e02048c851cf75cfd1ce3d6a66197b9961d09ca23f8ca606cef379b3918a567b64cb9dc56378db82092e0363953dfc49b2b75cfe56c77422eb448c68ad866f0253792b59f1ef12021d3b04ed51fbf1e0903599244ca6967f88569d623a700162f35178ecc1df2235551cc77161fb61454472da7ee9d01603ec513408ffef11858d7c0ee79dee1405f8fad5558ee454601695a773f5eefb98615cdac4c6aca952682175b04bc4ef5950fcb403a05ed2194dc6886b37a74e252d9f15fd554fd0b1ce6933b1930abb18a34beee15f13e458332f06ce78a416919943701c757f8f8a057cd2513f68802c3a0e0b5992a891050ef5a805808c5bc6ed707087eee4edc55681daf71585477c5d6e91d203c8e2082743f776170826ab714d9fa78827f24b09a0d10ddf0a17f053930ab47819dd49c63f7a8a05c07e286d0384e40bf0a602660341fa639ef97066a4fd66ba438cb13311b9a9115b6b2528b9a7a73ee612d3b5cfb1266aeaf4e4dcc9f35291eff726b5e23c3c0582f58aeb989156eab23da63d2faaf9bb961034fe2c73dfc4c5259195da8ca9a7dc253ffec8c95bd7fc2f644749b3db2049554914f205751d6c1edb1c20305ac012022da970d71ccd6bf1f31b4554345fabcc096646317c628deaea8fddb0b517cb943a34b9440394a78a3d014c156c41657c5d3b4e805c5ccf92a83938952476b0e44fe6ca9776f359022941867feb8e1f6e2ddd32797ed3db1dfc615a650ea368f95508cc58dfb429629e221a19190e80a862921ba5488f5893cd4e6aabdb679cdc32e2e610a59dbeb186ed306b5f883134e2a3318a2357effc054991ecf28af493d0bc41463077c1f7c8ebf2fe23c6da1a97589bb278f448618b9af7b2bdd4172815de0482e809d93c4c618659ce8e226068f882a5ad2f0ac94789c384a30daea2eb8f584c351daf89fa9a1405c9a9b1103ccd0de92ccedd3d215e1eeb0cfc600a3919652d7f79eae5baddc5887bdf3031fd1d65085b996bc401602f6e606ad667e7c252ac2ee633597471c06c4bf747cc9231b18aa45a5966cfd81f95081fb8c1dcd34852aa2c32ec109f2e38a3bb9de8e3511af56ed7522b730e15e86ae3ad2102936ea55b138ea676af3775eaf1db8dd8c4c8d320d9fc1cd54a3af0ef7e5d8e404ced2faa63f08f8ee902aa8762a8c359d4e2ab2428ff40ded4b534ffb771107e44ec78fde3ffb04194b85fe4d6ad934ec79006e18c04a074f3af3c035791afa4c59406bd5c641075fa801d681592049fe6fc6bbfcdb34280f15091612764749b150c635397c6b71361836a7be6fe1f34794b6226b2b330eb14bfba83ec9366497c7d172559ceae0412e9d1851299ebf5c8a8737e05ad729ba5253fcf71c58d97440fa89d6d24fc2e55d9d7ee620c70cb1a39272f8c480e7aeba9a9af7da3f26db3e9a0229a6fa97b727b061f9bffb69cb92605a1102d0e6f30747f8ad7d59cb41334871ba757bed2b0f8e57e8819c652eb98963d58037961baad49c848029352aa17e3f25d86421a5878fc74f003a7d3f9b760692e73583ad37d90d098d2e031c1bb3e0e84a13d3db222d46a9a6561092baaed8e5825b2e1c10cda0c8fef8a379f481fd7e453b822061ff4c64fe5fddac89ac5159fc08f3ecc81b2e3f4fe994e8ee50fb54441b9b19c97e4f1d72e82301aae6e64cbedf8393e059dbd91aa165dd4ba95106d164bd2bbb12d54fae6f8f2670f72e5a453f3ba5dbf25022c98084cbaf039502878736dad95565680b66708f8e459fff19b8ba973d8d11b8e73770388af83dd3b103b6ab86ce75e3045d8591556a9197c6cc5eec677296e7fe16c69861efc206e85aab1255e69d6d33c52cf058dec9d0b6fab719ec5b664c78aed68fc662b7f8b7fc82b3c9263253142de5112b0a9f2674b441b45eaff662d1805e731ae986358a89ebe44315db3120083c882e7698058a998d2020d8dda7a30b9cf6e1fcc359fa533538762dfe83e1d491a9e5cb3afa631b07f1c56e629767c1306fbe14e5b262190d34b4e722c7c423830ae340fe7188a930bdcee94bce9a41a75201ba63fb6c2bb24d91c9de7961759f2fa9a0590775d495c8afd1ffa9b50d60425f65d471630be3079f5e9815243b348c9b41e128b51db5c6eaa0d4a5427509c5199fadd1014a1dd7201dd62796f4e1b65aae1d51c0f50f1cf1ee816dbd18f23ed2c05686a166a150e6701f2d342335114a5d742f23eb005f78137c5f9f79b8341d90750eddd23bf9350dd9a276569d41fcd86bfd487047f2cfa83bf76417da295c687fc6112d3c34ae3fac03f7ff88ace4978b58c925347b7b1536b1a563c6a311b0dd68e5c83097b49dfcee139e95d6842358de006a545e0cf2f33acdfe0c15c0121453b643a786ea9142ad63b433437df43ad998c0261ee7c9f7ef683729160a04cb132d200fa6a2c223ee52c0ef681492c7f7fcb73832bdf2cb5beebf9c1831f1582394ddd76b9fa9070d8b5538d8fa77869596cff93dd215d3ecdbe7d390ea60521197ddad5a13ae62a767d19e0a922add5f116af794d69bb82eba507e1495fa2f49a0bfefd6b15add3862d68d716e2552a0d728a1dc3e0cde9df489da17b707764839f52d75eb26cd2d16c485a200ef7d07627986786ae1bdc734e4a61ed0109da9ee0dc4bc43aab911fe3c2510dce1c2ff4dee140e0fa +MD = eef7dfc20c57895d31ad15aaab13cf710aa0d739 + +Len = 23480 +Msg = 13c123ac379146d066767ac02ba4bcda80fbf8a4e4cec5b0ade84fc3a0d19435bf4dd49b622642a4892b004171794a0965f9f2dbd72a0cc5af21ea24e3ce4b0d4880cfeca8abae6b14eaaa967b40423c7ca3299879bbf630ede71dfeff811ece5763fce730a9f1edaeb9600672810b3c6d008623f108ecbb0e42d0971b72763f93fc43d423a873f200a20ada7ec50dd1df18f1c36899542cbb3aeb39602abc2aa5558dfaa82e9c42b2ac905bc692b0c27af453c106f7974c9bd8562af63056553476c0a2e8c5d4a46bdfdace73735cd9e79b9265f2a91ee35723fab2040cae88e965c6140af483e2d344d17eaced79dcce1598f7553750b99624bd1bb2472a8d6c2c8598374411c293e25bb29a8a6f94d66b4bbf562a949501e188ab2a68342b64d3e776973be60d53c261b165d1a6c9a8a495051e0954413f6444ac91f733297960d3f551636a8abaeaccc4344a8743ecc85d10d45cf783f9b5d764127c8f5054dd305e8e440603716482332f7e78c949e08b29a1ace524d7da2b1cd280af689d51e8f97564203e20386d4680f4e22567f30698ad7f85ec80dd261bfc8bfd39fbc5e20e2f4d22056e6c74454c342e1def09b8a51f6041a29dc5b2abb623e08a174006e5e387721e030a7e77bec7c27a892a889820d48010d59bb61228d2c02499ca3cc6ba987a5188197525fb340803dc5f5eb8d765abfcd16619997c1f06d0286b6cf8dc0aa068a5a240972e03668291af224e6d9a282f392ec588d79218546c2c7ec470654e2901acc7157dbd46bd4f23bca209fb6071b4fca12763b45f780f145a729e2feb5e453ff2e710e90f7ebfc215fcd411bb89ead795bd480c4306b62ce94a90f2dfcd1863a954100f298b899413a4f663a24184c78994ae232dc40b7b11936b35913f2321d4a5a5b8fcac54a19fe1967a7b5f2ad465f2bc7f837cb609bb975a816b7b0e805b23f66bf0abc8f2a2fddcdcafac830711209aaaaef45fded09c835dd44b808926132cb06d4f8e8e023ef113a7f038677666712c17f5ad0336eb0e51347521431dc06e0fdb5f4e7da9edfda7caf3f0fc7a0b698b2546487fd7cc24e5f4c29ab62971e511a2a4afc87d51271e7f7c54cf0659a9513fb1d95a9986eda27afa93ea306db93d2ae65a7668b4980230550ce703965a05cffc089c6663900f2fe5b3e81bfd111bdbecf78f515c78da4444bf4d570ba3303cf07c4e25a935b57b4aa3b7d36915341e802d1c1f92ee2f23121507ec00ad59ee55de78bea1061ac7f30b5f3ff9ef0f5968a423bc9e22883587b81fa8bd9f084df3d520189328c879a691e946f5c435f66d05af0fc83d6de16a4d9c7589a2c6c1910a501dc7c647fb2ce05cd2a4bf2c5b57f8c50058676692857f873aaede19b2f9240fb484061db34d9ec0ca4f057ef2ee246f7795c7fcad9ef3e7df727a8c88f1cc66c51410d40bd0741d153ec1b221fa32b45cc986b69b7e54c44b1e9fa4ab42aa5b39bd0df4697f097c9db919515242c99d973acb1dc4ed482768f974eb83b465f9f6c82503372006e4490835e2ec8f92301130bfb790b277171d4d22e8790ea645e57d7f8bdc7c125e01723eed57a93577b0f58a0f68978b9c5260d023f31a1449ee234413c05bd6f1ad405cfbfa58597a5dd053aab26229beef7ca7255a9e580cfa039b244b85f9a536bbb6933f64a64001084212d7dcfb86dde7cf7517631996ef66ad45e5c124828228753d8d94c6d182e681ce40cda9fb02e96f9b903100f0b792a2fef6d8ff917ad2c0814db15e35cab2356654fddb2547ccaf202fcfb52138d0a1d7e69331d90600c0e8e5831974bfb489627a33380d94d6b88b5b07df315c67d2591db863620ff99df9bed29c974b33a34b1c3968bad251b2647b9f262909a15e0b040f3c357b067e3d406692a65579aba9a1d51434e783c534f960341029c46d7501626559346f8b3ad307a1a7c4ccca0271d0e484bdb517813c12aeeea31926207d7785d6207cee7ae07c71a4827527e0f4f17fb13b2ed3d6ac7d3fcb5fe8b293e11745b52975cc85cd8eaba476bbecca92028ec348381fb8b1688db045793956930a4dfd36a150e10405f7b088e83e49b3c9b8c3ce1923b1b39d40a43d13e2f2fd1844b62e499f18eba9fccfa04347e4bf10a6b8b41a09481ae201b02fffd5ee8509d3e9fbb5e4b2ec416309a6132f231e9dffaae283f6064e0078db03863bd295a4a19d842d45356e97d36682a11e8e38386ca23f9c1471b7bf4c2da1ee3c2794b257dab1f9ea2bd971f5ef1d353bae75ab95a6b5ac8b13bee625aef17fff74eafb9ca86a60fc1b949871ab5d16ae0a3ebd21c12bfd8374c93fad67dc83ad41fe47191097aba38e09d4eea32b8ea02af935b9f88ad5231a4290895f48406d173a5e75192023060b9fec14dd70e3399710dc0455b87d938f8fa2649e1fff687c050859cced0d4e1abeaa8d63125ea0d8e97aabdf9e3dfc5b1a3de42d4708c5fbc70c6d2fe7b4a243ced4fe3dfb47fe75eed7559e245c86044928b113aaa3ad19e933584df45f2b0f3733127111e67af785baab9b33245814862d74582e184860d145c32bfd551105628f6f093e823de518ec54ddb1db9b133812d505bdaebd57e80a55d3ebdf7baeb5b0bd0c68656ec70e36f96c88ca7687c6a07b213eaf35869649b74ca4459190995da58379d53626cf5e42519e3912fa9a9f0fb49861d77644cc909e12cf7d357760ce75581bbd88c32cd693dd7096f31bd738c7b50dccae585989d21cc56425b57fe2eaed7f2a78526a5e3a2bb62bfbb1109f607cfa3bb63cb94aeea96e71e6bd8386eb2048a57be4de814f7255f999c411ec8ad5724d1756b47afda313c902f533647ed9c0581be151e8d999932755bca3c64aa8bb2a581011c104f1fc9701c75924ae002d69dfb18c3be088b9deb7028ed5aadd1ef901d19ac90d7b7101699abb6e807dd8004fbc54216d270e4548fc9ac2b15de3e39b0015371f29ba2fc4d523e8fe380946f46a7442865edc858f138e35670e520fad074bb643e31e4a99e2573d2f1a08625524b247361569c514af34d5d5d9b3a5bf4d04ec8091e67a71281f131b091c7dfb50d8d88234ff2e6039524b02a64dcf593a0781de1b5be6d30f4513cbee8ebf6c58ac9c74a3e4e8fa17b13ef75e69b304361e1e6569c2b747ff8fe446b2a64f32a2f73c134a601a6ab31957bae74f7947a90f6b1e6366145560c72e943bac56d598805f6711bdec3974523e552b474aabfba30f10f28e26869ab39bbe73e8fbdba011ae79e14187eec1239acf11994eb794a2b343fc811561151cd1cb41a267ce2470d150a036131104551431808cacf3ddd4fec06a88086f3ac978c38c21c1358b666ff438e2b72ba4b0538262698de73c01998e25eb27366f8439af3eae32993dbb306e8f8e9cc309fc00ca9e78181c1af02bb514f29b401d13bc963e91e281a237bec58f81ea619b01c2121c017619e06a5d3e1ee58c15ad3fa8807412f87522a2be011f05c88dc2874261c44cce66f437d7302d0b213b85d0a575c8799dfd25c3db2b26605ed0e65527bf7ea1498cc01f409328ad833c0f8e5d7e220df8a21363bb4a8edbd5b16f341a3432470f12aaea4070f613daa0b24175a26a1732eb544a06663ebe55b9c5ecc3c9c88747801c5f81ce81854dedd5b098ea88df7261504065881e51056e5045c98528a9195f7d47a8b5b04b04ade2a46c5c64ade18a6f0d7fb616dc0e5a7807d5713af5ae35356a602d6bac286740e59903e7c9a7f11a78fefa0ea69805a6f98e93e7b22e8dac904f3f9af1e1a4573bc8e4f77aeb1bb74b875ceef8caf640e49df5152ac1ec49811df2266356eb8f6ea1097d0ad592b04cc5e39e1accb5b090a99fada38ddc7604734ff547b0c45045cb7962bf8edd6b445d970654c7ca5cc55b979866bde49be3f95cf0e816b70289ef3c8ce23e8452fafa800feee3beae4b5be7bcbb778d1ee45623ff8db14d0d02b45be5ba0c0fcb3842a79f2f47170ce9509703e9e35d68d032ac0b7da90dd978c3dd5491210740c4dd139f601c60e069e2ad543a2bdee16e37fdfa012580ceb3c3cac0ada5f4186774ccf8c9891e9191ba3396f47498f1880b20b6614d2c557a5d2a1357bf5cbb +MD = 93239fa543e8bd68b59a4bd55a7be068f18c5ea1 + +Len = 24272 +Msg = 595f40b057ef2d4f8774a22899acf28da129fa406d530c9416b02cced6637fd119f300fbd74e754a200ea2c3f9fabc1466d02078c84245db693eef3f5672a65e6d106790b6ce99f0f73242ba820c7bf85244225e56d5ce720d1a08f05349b86c7b3ddd399d78818a3168edd7dde919828c0c66bbc0168fa129ccdda976ee9b446b02cabc3452165ff93808e0b2997cfa3db05656ad0d71afe6ddd834676b392e66e796e222673eb9752bfc9ea8258ea88cb858f9c6c15ae66bd46058cdc878719475a97310bce2decdc831d9689435d3a2add66ab33a338ce139dcdc500b42571c336c37a55beb172a970f599aee5bc5a61737721b80e5ea6f95b689993e7e2626a945f68a4b3facb421ffe5e53ce7c4c17ce3d9a79c57483e6e552750681427dc609d776694c8e592ed6747f185c1191b664267fe9570ee754f217e1d92eba264dfdd83e23f6c0aed84b04567d1d10cdb5cbce4c8731a233dbd8255a6c3eddfe6ae6be2a6521562ec6c43a8ef28ffe42ae7b917af3e3c30be42e075960301258b56b15c59d8aa36b82f8637309333eb2f8ea1c959ffbd5d1f65a3a7935a0fbe7a5e15b8a3d613ce7854e3bcd319556713d9dcc26ebe87f289af33b145d100f0dc4e01c02e5638725564c1fd7fc34da1fd50d2ca9781813723a6f95b566fba04d9afdc3a9f5f016a77e688c4dd9803e1167ceba97c52937416d45b6f6b3d264298080eefa1fa56fd05629fd795a05f6f85e49026c438a5f089c1c2b32f412cf142e1ffa7da2e1f75276170fe4ee34a927310270b173c9ff4a5f397f14785b55afec2172af2034418076a6203b06aaa9308891a1e1f6469c891f440ef5e11a7c6f534be3f9281ad2fca05ddad653c69ba6bd6cf2881baecb4764c27761aebec7b4fbe5cb062b142019bba49c312616d4fc57fb0f0e8460e007c81b24d231d6ac233e95943099aecd8a0120f0e62e2a09a3d0d2340fa0fb8f3ca1d4b3e22af0be2c93c1dc1304491fa01949556fac6e8e3fc0792de5f1dd3d689a8590fbfa7b5253a3f10f17eb81ab0e7c9446285152f712af56493c07845f1e0a84489a10f52d1ae7a9a9d9cfd70427a3784fca9d75c8dee5f0127c529f88cf8a7737471eec92f4c76248b311b79f8e168beea0e15577f70ced1621537d2eff92c5098d64d02873dba1484e61b1f1a45e458f55dd7088fd9ca3c0c59aabd620ac042bc7933e521a9ced450630449efcd31bce53e23570551d9aaec388aa02c53eab1aa01a85a44b73bcab74fdedfc0a2d9508258032c28ff8583cb5be06296fd32052817b549398f88608152b2c8d5eb647e94547e6f410c552f7169b3ede83020a7ff63609a495a3dfd751587ee76d158ade2d99c08989fd116a60b0c286a133dfdf78cb335b940e3085d406538eb7c3f44359066df75e182a032e9f2fb63cf1070d73bb602d46801ebff7b548e7b13a0ad5521e3dc20faef36dcaa6d4e1d8b2169691770eae1fb1f0d236c5dd870be044f0a331ce8e011a13e6df78509de70f94e73c9e9d32720c5d693be87fe10a7f2921c6e17e9ff4e1e22ae774315efa61f88bef829a7ef007cae1617dbe9a4f3f2de527cdec9c3daf04864d3ae5898541b80124d394c81c2cbfd73205f7f73cd8c9b7502796e75dd9e1a5ab2cfbb20a3769d367020ac25903b2b73801da9c75b49314dabeec25c7eb1fe57bdac26d1bab746f408e6ad238f53a0dedf1d50e6c5b009a21c47abc2e6b05e229c4f82f1c266e512bd9439c2e99bc57ce7665a19344a893c008c13ed3d23a184f6c0b5c9e20ce1593930374cc69b00143effb1a8d09d1ae3fdc3e126aa932f457305a9a14330a29121c58e074ddcba708cf33bdbc033255ebbf6fdb55587702dbc2844c10c5a90822058283ca7e55c567a47e2fa2d941076e32c4ee26787cc0379317070661213f3dcf3ec32fb3e4c8faf058c4c3e4644f31d6ebef5081bab91512614f779e193aefd9dc2337270f4e3d435231a1cd32a9d10c334355fcc759ded11189e6c4e78792c5f92853402bb1991dd8eaceec3293b653399ec952192f0f5f963ad67e22a1d11404471687c08fb8d07b54add9ca897c4c6d360d1a36a5210e7df6c942311625348c13f3767454f71ba803c11e81177d385cbd93cd8658be6e27323199b950f9a7fef37c849d9dee4ffd7c9b12ecba43d7769a1fe4aec6220f207191ed21fee90eeb7a144ad2c708fdda23be5f73ee6a8a496ff3e8165a0661f8497cc4f15c5db9c01c4d218a6cd1a5cc9d8d7cad204bd15383a24043a0d5f72d0e54a9ae15d2391b6e99b14afbc2c8434e9ac2fefc823d1389bda5bd171b4f2d44bc13be97e11d6bc58c628af066d5eccb58faefdf882e07f6a850e94940da8781159ba97ef4c72fd597cdd0e7387f17786a6d0645d844bf4ef50a5e93e109aa57e39a0527a7d6d6034e5b934cb1f451ea2191c8cbfcf197e7161a93a3668d241db8a7581e54cd0cc30284689d6e063aa52111bdee60b52073ae0a2ee45bb58357073bf8ef960a22b966e0c765c6f5201deb653c099e1ff7690f6166d33b2326a851d08e07e62eb64aede926124771a0d8e2f4e9ba2f827b3bccb8f1fc8f46ac762b0d7df3cf9b35fc0a160b3f79ec4b4aaa594d8c7fad2a50586946ccb2a08334f53b5f3fbce030414defed59d8c57e0793fabddd18c0836b54faebc06fb1298932e29848289e23bf2bef52ddeeadb7844261d148758d24d135063773f1092dd776abbfa9ad159eca169cb2582605964538172e3b30637d266ae3e053f108fea432ff3bd0b4e6fff6a060b245095d78cee7930b41b3e40aef794c4cecea412a73fa45a359da92c5c95bd3a91113260d85d36e1ee88a7f4c70e287f3bb37422fcb2f277cb178a98eb6ab8e2d68ddef930e7df0cf9c3e95b06f292f6b2b827c7d1e640d2e54398bc95301c8a5a8c42ac7cd69c3a3d91ad7d53edfbb19ca365090e21b7f4ede77c9f403114bb85d60680a47097f222bd9b6397458b39623dd8f19bac7f6449ccde49d5b3c5fcbf32d17e90fef5bc100d5a14b84369156a4e268660cfbfaa63ba64c33dff5ad5706a4bac28c7e1206f4b9398a02fbecd1e9ef7d145d1a04fa179b9145e5df9ce00441d14551581a7a73dedf83551b1eae5f4f4d833fc49da6dd083442214cb70d889efbefd2efdd820ac113b61f06bf3261ac4a51096e2d32e886b5c706ef7425e0168b0095b7e3c425fa6690b5613704bd61040c6e895c34b6918632fb1a5cdfb7331f462e42c597620558b1bc9d2e9bbf180af3b3a88312e3b33614926ff9717a8f292ee112eba22b5c6a77892d0e7de33bbfc59d4e3a53ec6635fa5152a2a1b695290972aade4b0e7a0c80cf934f11c636a2f06fdcfa7e3d251632bc6510e6d7cf9f84476d061867e8bf3be452790dd4b344e2cfe74c08526a478c3809ac977a990d2dd3ec0b70e42313276c0d04b89b1c263b21ff9778c8b05a3558d2de5a0babf2449caa471aefb378c1cb058aa885ebb7580a8865561c91ceec93333ea4f752df87262a514d070480a995ee635421ac88d7ee145e16aa8906007bbd45eeea483553f4eeb2adb6a0ab2d312a37520ac91b294125ca310f00a01f86d37cbe40d684498d59d3b37b1258eb314b6f188debdecaa82f323bb6831da829085b8997985cb6541e3cd4b0d42a621ab4831e376f543a87a33ead4d9aef28e6ee5ae75af82f58ed8e66a81460900062081be9a3de0c07642437fc10b2852054d8034e07906c7fce3ce99402321a648bb881f13fb276afc224c6aecc64800cd767ed2429db94b95a9c3e3f16d33a0d1c486dcb878714a23627634bbd2b606d031061003e444884274eccefaece6f48783a27ef07b6766d149e86498f6196cf4c540778b164f86ec8a71e4c468e3ac5440058c22ceb1c8ef20cb82eafb1938237c558e42fb814e79347badb7a9d1d01f42d68eb837f678662f461619aa5f74449c6ddd915a83e7d3ba32b03b765966d0d23e0d197fde7c1cbe82a98dc993273f6eafeddefdfc59e064bd75b99923784e386590ad6e13defb15a7c2ad205d5afc3a444592aa95ad8a7a448497d8d60d83bc729fdccb3aa6ea7cdceae37963146248546e162af6eab743f1663ffc1a2e56a68ec20e60fedad03a49a8979a505d5bdf06eed145c6185108eaa217cd99e2af3de082abf30484979817842f4cca3dcf48824f2ac2ae403f1157c08912f83176ca91661b4df7ab26de6e06145779bda4ccf1188b6b556869a66148fc95e2239395c8f7c6367d58655475b7 +MD = 2393e09e218261acb91ff9fb4783253e9b44b9f6 + +Len = 25064 +Msg = 215c37320fbdd5520037bce5b02b12871b345bbd84169d87bcf1c134a1bb3d7ae5ecf0c6117b4dd1c90abc74515e3dbd50114f42d48b10b5972ea5b981d1dcf46d70106630214ef9d74ab559311223058e150ea7c55cafa17c8c66e8a35d5a15424e60b975981ef1b460703b58300a885ba85f936071c270f373cb681148fd04ebf0a568e7c605e2e8b2b2c3cfa13b6e42320baeacb2914d844b9ee2d3780eeaf0bcaa1a8e944df4f9aa46999d4bfedec81bdba1b108635eb87ca5fdefd7d4eeda1c367873ea3c4e71aff364ca189b0077cc9414775982cb166ea9626f4c99393077102a9db11c19d82880cc5fef59fdd6ab01ae078f34bd278a71b85abea3f27a3501d714cf337cb47fb67b63b781fd6d21e9186890c25c7136c7a8b9173c4241bdd127e12ecaa08f1b5d16de5a5b27c59713faa24674cf7edb71da933eaa510b7948c40bb428adf0643d48d9bf2fa4657348fabe97913fd6e238f5f01b354663d02d539a4b97ca60c21db65ace459cd51e50c3c36d63d3ffb1e4a2d996274ace2a4a7f97da5d1f669dc60b6c6fe4369e01f3fbb9af30b483b23d885497c684d6ef65ed0949c3d58a5d01ed148a569a4783f94ba8454109ea4c0a506c065c1d02884748f8801114546a94055c07e1f1580b295a9916defbbae615a126cb2f3cda5bb8366d668f034d2d47fa4bcece635a034cd1930c4eb27dea24248cce870ae7d1805f6ee585cbfc0ce474e9c86517d4d22a579f0edb55babf0080a5f8aeafb053666d06e43a93e970311d3fdbed364ee08b95c405cb0cfacd715e792feb52be4733053a4cf7849dc2f89a54f0b0e7509537320ad76701c47c3f66115c851b9716afd1140304c69f68ff9631f0f4536359f5d7796df759a034313f7468c533c529a2799bf2a98077cc0fb7dcc102a10e948f2c1aafc33f165d1092aa39f3c2d0e7d4a5d7012edbae54efa55f4d22fadaaecbd8f48512d9af5fa406bcb957ef3eb70dfcd119dafecb6a6909c27a9b864e0f72840fd82e4ff2a2b544b1ce38e3990314269020f6115675438b0b32b76cf21f4cd7748e5dca688f0bf39162e0c66832b2cc1c00ca3ed8dd46d2445cbcd54e47207a2a91e872978c6dbc655c95bf34acaf967e9f9eabd8093a8774e0f3e8ebedb81439c7176e0902a54734a4a0f684d8d32bbde7ba80de63e751a4a6a4ce507bda4eaa1a31e7465a793b06224994e020e534e1be65e6725214d9db9517ae05574fd084718004d4fab241e3bed7c1d0ebaf58f30ee9051d3e8bc7219793b193ebde41cfb34aee3d4c1800d46094a4dda2f740fabe8c04668f12c27e9362ff819d514a94cad8cc09b67221e0f0c6668eab8693feb6970bd6ae7272fb72cabf57d76f92da9d72c7bea28a4b1056b62e6c6f24fa08de5244f30173809f1a141a9e00ffc2a9145f07e67726276b7aac25fe56981d1e1e04d548f1dc9473748737dd7fca810917e9b3089d0f5cf944ef73ccc9aca34b5ef6e65ae777557d686d3f9cbe9878038e56f3ad7c0d93c29dc93f5e2e2635948671a0b3490a6cc7df0c596324304e9e61eff15c7ce774cf6b80b13deecf7a037ebb2ada805e8059bfaeaebb195cace379fcd29d0567a627985df3f0726f1b9f2e1cad57f53b3a39f299652b05e23ad8bcc5c1f87f53d2d20aa82aff21cebf707ede51b30f6842715e15a73c518b9f871391e4f652749fd9aba981f362b30f7f57483d7535af3f09ed6c9c74631f84f866aa631ee692b64361a81e529fe8b2d39fa19a25d1d6da0786e46b5ea46690329e5667f9a375be1816ec29a73f33517440328f4b4aa6ba7510c73d7f7c286c3da1de180df2e46060b1becb77aa5d946b2043457008e7875a755b3961542cbf21598a9de539a844241a662b4c472e22bf291be41b7361ebbf9ce9888b923b32e6ada11f06e189116c392c73ad806da478410493d5f3db8cab6db85185a01d6d95846dc5fa534f703ef657c823bce4c19f52447a25f01f1226d012bdd8e49a1736c834b848f6c208a4393154356459223b4324c293d2f32639ad3df40bc879d8cf603f1f7831aa82a5ea003f6bde956f54fcec93a7012070eaec821da6b2845a6a34d623126ece8549f10db14d93604ff365e414eae56e9743752960310c81420e2c40ec9f14f7ba9936a0d164eb816a1e66546ee3e6a4444c307ae6353d393bc430c7a1a78bedc89ca101c7374fc269e0e783c81b6d8c1e0c06bdd73aad74eb9328b16ab03a78595b1b77bc4e25e9f43ed0ba4b18e0ecce8bdd395bc6c4fafa83fc4770448b6012dc8a4bd832d6bfb24209411f64a98dfbd19f379863ea92119c94d1dbeae56c9d29d8c6426acb0c4cf37a606b872e374ee732ffb9988706d8e7d897d32bb066a24aeb2d237e6b9869590c5f5707d9b16ed480d9e4ed031cf66bb1e07f8d5514c845adcba2f71d2ab27da5850d6e11c505a06f0d42ebc69d143005f6079a3a3eb82404e7e85c4b8ccf662e1bb2433d39b854e9e2fa193850d93fbe1f94dac8ae1aefdac81c355c84671c9069710fc7d631f6d5a13400c2ffee9fc2a44ed4672b95ac16b7670bb8db22a8b1b77059166418911a931a26ca70fa58fbcd5c10807cd165a0fcf164c759aa117b4dd7a992ab142aa2fdd115ba6ca6734fe1e616796a772160dfe1cbf0c5a45fd572cf87a372cecb542a8455f8bb9af7a82a166fbcbd2fe93ea85fc59ee8bb9ba670807cb183ee7b1861596cee257decedee12a2af3da0c4229e95dc368b95ccd88d110f24a41b43d6e978e40272f75b06760237bcb173baf40aa9972174dafa5212aac9649efd29760b0a459e69b24bda0a0fb64ae34fd39c34c37ec76c332dfc477531d9393d38e10f371529d453c453f161a8c099dd1802640c1a903a486ebe7397cfec3c8375fd3d26de0b7985ce58751f95889cc5900ee2abf2e5a8c0c480df3b2b037176eab3dc0027ab20ee72d2dc710309b4ae43a9f5c98f2c7c43382ad487ce889ebf9eec36ec79739336b7a76f807caba8403ab9e78e77cf7f7bd1a498a33fe18c06998e91135bca9906a6c0767487d642247c27fe213434790d97d673b8067803f2e482369d5518f90645053975adf2480211dc83ab4ec532a492a9afeeacb3cb2b86b16db1efc67cdd9e5effa97467838102bfbd534be871e6cb03936cb8fcab5a87027e77b23aea33b9b4123b679ebb4a56b7f642b507007b49ce665bb2ba6c27f05cb01825dd0bb29cedb8510bfdb80515ae749f1389a50c14f071e22254d639c8a94cbcd117a60051f33a14eaed4159488b8193eed629413553fc2a9134b13917d09a8a3c5185c5e0ace0ab8bd720eef6366346cd5653c1b3dd4e5b87c1c5cee5b9e2abf0f16eaa4f02f13e76211b6d279662df3871ed359678b19c8a63daa13b4c6c4775612a56a8dcb7f73435fb7ee395c887b78fbd44e70b6b152482b75920717f8551078173f32178fc4c7987c8331adb65d3188d97ad7dc5efdc86259f9d10658d0e4d3aa636bb7d75465789f41e0ee5a2137423d5f0b807523ad8ec1bb9116488339a1f997b910e8bab36c7a9ad572c65000b47a7b8a37965c7ded4747c5cc59e4955f6f4c98b7265017d0b90e7def9d72045c3b50e2663510a01a553eed9d0f6d7e8885e2991f32dd3961b51d48b931ffe8b5ea6f9290c3d8ca9265f1871ccb965ba9d80a18bd708a6e8bf937c4744671f43df238294bd52d33f2041010a030e7c33fd023c61672004dbc1fee8f852d40dd70fd3b04fbeb869295ba0b18dbb1ea3bb6f8bfffceb9d74d7e83b1f8706904fadb65f8b435796d6d19f2531e33d1062babcc3f442aba77f44fbf229dda8c36d2f9c6e1b56d014a09db47888f2d10d4198ac54221cee64ab8ac3ca0fe08094efc388a96971705c51f76140bea4be3dc9bd07e39172feff8311086cd87ad52c5ed343b77c7d809370466f25dce04ec78192951b4a2d219e8c4291808c92f1b342c696425c6048e486f2a7d1e98dc7d4f17d1ea15433a06a508328ad34101a50210446ef120410751a63cee9ed95728ba2e76920b76ec38a563d939bd6db992b85f51e68a54f206eb400af18f1df97151b393f3e7cc5d12626d99bf37dddb66df501e5551d2bbff8dd331104fb537e99e4d968a3aa1f146849bd085d2efdb83efa90625d837f373b1b64bb5516d96e408631acf84966d2764653a280f323e9c51b0a5e29de33ce5ef9f976b44759b13288a7d3e562815478a5023105d3378f2be0d7a161362ecd89fc5b0ac998bb8d9672a5a411fb58e297ef317c93d722f397d15ff3ac935a7ce6aef23f3b10e74b94cd92e8251fd3c3faab4a4cd305ca5d32770a1cb2fe9e229a9626ddb2b7c6325620d667c8d3da41cb61b4696d671814245941e31c7ee208d03c60abd8963e8c01f3d9e9a32155a22f99d79b0805 +MD = 7d90c7a14fc71e228a4f4fd191d3b7ea98c6509e + +Len = 25856 +Msg = f9ee55f87ae8343e45f01fb285953c752c15a1d8927314145ecb143caae31e6f62022952ed0573bd10af7fb50f415e9b154a2fa2d5c1e2877251417c9cf43065fdc33346d30d32fcdea6792c7c81037a1381f8fbaf8d74ecece38aa417ae89c790da7dbd7227f962767c14ff157fb27aed6205c966ff53ac9528f99c6138b0fee4ee0f9d147c5157a2da59172260f3036d945df64341063035c9954cc2bb2d73c1a8efd0ff33c14328684e5aeb4f4e7d59c008688e7815df946d669c845f898deeb0273c7b75d28fd1cdfdb1b7724c507a8d0f098fcf092079bd7575ee4b4bb335adbfcbd26a0aa165b26e04d0f174e498a479bf8e6c685dae60c9bd47a8fb4f5c48bd644a39f4e2acbea83c7cf54fa17bac4e74d277bdfdf9ff6a5ed89d21c82c282bee2d0b15ba6e9ab33f04a663f0ea4e960fa4198d682342613ee95346866df51053c107f79272ed97f7b02b3b37ae325a784c796205f4d0b547c1f2f1f1e759757a4f5621d081605c4bc7ad5cdf8fffa29712c1c33e33526e5faaa1ab7161fa614b1e1f1bde639b0b2293535051555e74543d16397aaa6f9570ea88fb6ea580dcae788b6e22e045ac665a469ef4c8f6da9717a24b221fd03161cad069507994ef8ba3c2a106bf0645fe65adce2fb070db48e68d819c5b1d4a1a92a17d7fa6dea0cae8eb3cf0ca88e0d2fcb1686cd4737f4ff3ff635126fde9838a22c063f405f9538f2ec74ac77084ca667af512fda8cf94861f7aa947181484fa7cb9642ab2020ee0b4cb7b7f693aceed2ffd89f3b6d2ffe7154d0d8817d60529d6f1eb128cc2e423a5d0ebba1909c6d7f806387e4791795d0a64e3afa234ee6059ee5e723c41bb9f295c024028f99a6dfe9a89660012e83126489485603827e72d3a271369877d9d66f928d83f1232f76940e3728b5f36ac908089d2fae99806795dacbdbc9d1065872ec54c065d76bd6181ae6c908049137194295e174f2a0565dd5737dc8a5e3fb283416224e14f060de3531ab67b0bb1f00ddbf06073c32b1b448f4b73564d73108104e342a6a31c95f03844a65a62cd367209527d5c4cc1c019bbbf260ac748c8af769607b55c452230c6b4082538ae6a4b1a4a1512ae0f7fe5455c9facb307029600451c1560cadc2a653183e2749db52176a1d09ecf5d7e2f94ea8647f8f9e8bc08b628ce99f3ea667e82bf9bfee23f7a851f580799f3e57f103182e080639fabf8b2d4e9ed07746c77706557bec52fe1ae8b5255f318dd5d21f83c81329052eb3601c86d4650a4c5bac31d1f9c8eaddb5cae6991c4168e522f095c31f6c727022c6bab628b14a0f8ad438efa8084e3f2f45143c2f6331fe5a22a89f9b44f467a40b825d1a49c908dbab761f052f0f7addf3a88f070b8b89fe2246bdf5471d8dbdcafe0c178309d0c48e93d09fa1a11948532e1231aed830757bfabeebf7505ab671a813af117effebe9fcb4e604a5a304e00f664dc19a5a56ac2f12bdba3f47449bfb344f69badeb86a2b3c66cc8f908a36e6eba9e85490181f7e4a09142cebde9661ce87002ff5907ba9c7907db17a5ea42f12e487a95a406242d54ca9cba0fb1d9642d45950ed2a9ae2e7017cddc8d8d4529c7c23eb1155f12744f6cf7e1f108df341c5e9c02ddd44812b285e46f4af23fbb8df419c6dcf689609a609c6beb563f34bba35f0303f04ef0473a69f96483f85288c755fc823151993c8fd37f8504c20b14fc2537ca65896f381da3a161a63794c121397a8e7a31c83de0e445487830612f5238c9bd9cc1388c15dc90cbc5c6293fec0c698838f295a63a16e6bb1b51e0128bdedf61fbbef34b0c5aed29476bba0a0e17f0f8d25ca77e87b28a6755ec2ec79160a240eb47477ee967e10494efef2b71a23867b237a7cdae0058d28fcbf3564a0639e1d526dc2c944994e314196fa9fbf4695d3f4b3c9b974879862fb4d8c5a017cccc1f215b5df4482d4e2fb3e38c9657aa60e1600ff12ad2150b9f70841e7add858a33016c19f3aed5cd4d83f2dd291123fa003dc7d64fe553e745c7a169bf9e8aa2778db66978c1b3e9d65345a39b6bfdb204ab0d53eecb5ba48b80d4ac59a3039c558fe2546ccbf02932e983e6d6ad60105672896fefca56c9d865c7f12f34190134cd97e3b512b316c90d55aec11f739d5c5ae2323a2b6cdf933c223f2998f3577b117e1d3cdf25360389630444095fe07f2bc1a4b736c46d26ce8c9f2f19bb2994213f0ae9796d14492454ef47b24b6227accdce4f3287fbf8e3ae1729fd96fce6c581b2a52ab53501a5d178b26360a9bda6afb7e869dc12714330b2ff8dae5ad9c7ec1e5638222395d581a66d64c63fa7e10e676b21ec39f9b5b9759a112bcad5ee2955e5ecde656b7c0d8161fda4ac4f2593e7c1a3def8f802f16ae0d135d54201e05f3b8e1183ed621c11747622761b3ae63ed037dbd7d6f28298ba14f20188c9b8453e66e205814e575f8f166a2775e7ae7482240b5ffb4d110710248dd90f0e5a0ed8bb7a74910965729b26a146c4f59392beb49517d0db49c0cb472ce240976ec2f0d70158845cf0527eeef25c702d3f9f6b2da287bb64cfcad1c6f8a6812e9b6a6e009e37c20c9d0822b683f0e15457a373d8593825af4e2d0ce918ac3b99890c397f799bb3e4169b6dc67c8a7e3586a7bdfde3b177856cf263f7b47cd7a1e1b33b9cbb0bbfab0313496506b3b19772b131e4677a17aed120bd3af69fbb0e4b645b9e8c104e280b799ddd49f1e241c3ccb7d40e1c6ff226bf04f8049c51a86e2981cf1331c824d7d451746ccf77fc22fd3717001ee51913d81f7a06fb0037f309957579f695670f2c4c7397d2d990374e99f36408e3ea3f71f60825452f82810d80d9e5e71db95a897822f48470c5a9c6c5b16263d02e539571e988014852c13b2843808dc8e260f4bcc8a86ca463206da49824b614adf649786759b7b26f5b9d76fa726fffa9ca7400aede12de31464c1cf2cf89172fd197f3c8bdefd5a1f63b5248e21528d840122c1dbcff84f8c06a16058e65407c8c86ca55de3219b03a1ba573f808ad3569d5295b6aba008039d07b1b87d0f95bce1ee556e407e663d14755c4decff489eec5ddb011cbb8915784317ae254aa963f682c13f7f7a48360c74c83b9f2679b76ea3166d9bb16f3c290226ac879b9f3886b88d33d89bbd892a170f8b4fa6c35aa4d0dc4e911806d23fb343561c68f3b5130dfe0e145932a0cdfab6bf46e6d1d32f55a116a5560c922ce5122d4c3943541bd1b8009b394417989e423a4d6d11cb5eafe9683101dcd661060784af830ab011c22fcde5c27e57fa50369eabb00fadc35e39b5dc91f4298c94980eaeecc633955de9c87c7b2ddc63def85eea3627f4eddef671f08ceef5f02f482dd2cce27906e35a72c7c9ff2f75892bfd9195f73b3ea0c44f255929e64c249c54a3aa0bdae711167f70454ecbaffd35ed3a25f9db5652178fe39d3154f1130935aa1a8ed3c6559220ee63b93b6399aac03c8cac6fa55164c6a3bf91dc7f7913234e85081e253f52199aabaae940ecfef921208b62ac2d3085fe46c7e747d54eb0297ff3f4742ccacc1d93b07fb865b70a8088135eeb43ff404ba9400ffaa6106e9371cf1143ac80aadfa256494aa24776b339d0bee3444588247da6b1087a0cb134f115df044d0858795e08e0781134c061ac5ffd149c97b0013a4864e1af982a867454c8466cd637432d44dfb1310369f465fdb3ffcb7a6a7a45b1a626d5572cf07208578aaa5ed9e5a69681969047e5f3dd565e254f4219f8468eff3889ae4b1b80ad27318416b2d9407a9088ad56d6d898d665f5969340f3b31cdaa71b22076016bf91db78925496916d6707e6d49f2b1f1a56113fe271f4f207c2f32836e456babc31f8f65621860feb8fb4eb25a153e67ec8e8b9c41f94a9cc329d3f716467d32f821a8be6cc50127174f018eeaffb759018ec829cbc2b40c6c415af55fa3bf6960ca0b7a8976d4f9bb149fe83fd7a42ead0ad28e0da513da3d1ed1649381b9b6c2c3bf83025462dd6bf331a7a2c68e4eb8aab2b44fc8f16dff693f2ef80bf482e8b3ccbf1f863239f193beb55bf4fc21ea156f82d953d52d79c9ad3ad666f73698433b182734cc76139e4ef9b288760f0bf411dff26f488275e7227077bd4a389b1b13756488b9fd9ab9ea5befaa8480e2eea1b5e444d1d4b96aa6b8223676f2b9e25cbd1ca880354d8e98c35984afdc38ac25ebf5f9f88b0ffb41fa1ef902cab9411eda98bca985f6c56219393b7e8bd5d5a8696eb6450f3d42fc1eb42f762a65df62b320edbd575b065045d7fa7af581122f1797a541c90be6de0c2c005b7983652f30fb62431246f869307be72982040bc4ddb7eb731f4390f0adce93371fdc7a8e397345c31d7d43b5c06d2a159b25676ea317b3637aabe739e7e111958438c786b6cebbc5e2c8903cdef4ecc6a6adcf365100239a430d94c1a3afa1fa105ff31f8f55eed2c8f18707735a55c30d65ea22cfb8639fe02f3e90ca7e6cf02b18a761ad50067137becf1d65e58c943612613d05879cfabb +MD = 07f84b3990bbeb9fc280681dc25d96bf8626992c + +Len = 26648 +Msg = c8c107930ac3ec654f043992cfaeff31552d8ab796374b18c109162f57f48e603d19dd7c1071a8e4b81041f240aa1f94e4568c3a6c929ef3b98768d29e8f7197f1f5668be1fc0bac8922770ac6a5817146477648e24e0db92ed09c134e2d8b6c0bdd098a266cff04ebc242a40aa80d10a388aea9a0747fb4476a18b80fd7c326b359313f86c96b3306790a86b3baabb822a29e254d0cde2a2ddf46898b94010f13f24374aa1c368201ce38796ae443b3eb1cac84911c116407b78d50676c2d6d502fa8ef396d4a39054a3245d72dbd47277e428d16ae00aafe7854d34e6730899599c879dcc28ea0397361b2a19d01bdfe51c70981c993443aac05dbe68ef0ab08b60bd93b25eafec6d42d88713cf85d971ba3c17d76b279e2da0730d7e8561bd111dad9fd9d469dd3f2ff8eee13886e1b673d7ab0bc45921f8bc29aca7d4a20192f9b3fca328ac389573d8dc1299a3ab1baffffc2a334d718469ee16756b503089ab8d44ced9fb9108a514e91861707829e50175c336790f69303cc557a7d0dc5d9976028d56bc78f13a1960733e51eb69a98892675c605e0fa59253df18c837974a2ab09f3d7342e7b9730cb37eec77437401ec7703a7eff0408b2c6c4c8b04bf33f7c954dcb4a174899e3849a1849e4fbae9ee82ca9427a38783c99fa1bdb64dfd89c74ee304f6f051176da654dee2f704bd130b2fd9a7a1f118a5d9b6c4bebc0d4d44fdbec8c613766b2779f74fc7d1e7f7e48091cce273f3c66bbb0a249091c9beace1de9491268005f005075bcf58cb36fd739f026a8235f965b40a71de67d95a698bd0dcead1f474520803876c0424d6a864b5fe92650e4e3e453620fa96a2ad256c3426258e5a32b7d38a47205c8b738fd465361c8503115fff1bb677b6cc234af356f4e3b417cdabf7fa3f7eda757a1e332b3d4b7a9b0f453239a6c830ac5964c1d7cdb80bb3a1b8f5e1d4ea066976ce018678b1ae6c74789f0e767eacc9bbed482504e4cdb45b495dcf8c0458dde639eff56ce1a8ce0d848618aa0d73aac74f06dd5f2ca2a056d78011d9305a4934cc2ef6ae5df25626d397d6c5f73dd608248e5f20e1f2fe310e0d5740f073420f0f7f08a179039b5cf034c73ece53c20af83f28fe9767245637761e57e74c4ec17e30b9ead564e41c64fd6888e56df52c24a9c95ccf57c9430e2ac592673dd5f882e478fef58ee6d1ac524948fee4f608444eceaffc4d4393dccbeb6512d06e10d81ad4325bfa0a3920c3d7d35d413b0bd1ae977ca0c029a52dba0e645c9c7da6c8443a397b2ed4bf7cd292dc931b3ac34739c2475f58f2139b759cf4a70a8b26ede13978d5a5bcb11aff18a922cb8bab3f80bda47a60235b909f15baa4a32d1db3725084ede748ca85b9c7edaeea9440051407f8948e33d99797171ab7eeca07b397fdc2367c0f6847832f0e79f0eb1e42543fc8402bba3a2aee0f897355f85168a2bfd541dc6726cafbcc703657069271c1a3a7dfd11ce9c5146dab49611e973d2315129270e662aa840ed746b55d491dfcf20bf606d264f09acfe4bca8c355bba97c2e9ae203b840ac94982d7485aea166a9591545713827f194ca3f858cf96e96737ded9855a437e5cc377d2ce63f969f1833a0158fdff5b95ac0649fb21ec09a9974ed1c4292fab034399837157877e6ed1038ef74c8c442806bae5ff9125bf63cc82bd65120f3ac5b13213b89e5c00e8673424bd68f2e2db4208f3ec8908b59fbdc2c6f07cacd2abf588a92ba04095682d15ea31baf8deb548389b48705e9364525614eecfcf1cbbf8e36e53c5fbe5f50bed09dba868e0be0092079daeef00bb7385cee7723ebfffa08d8ab776549997e906a8439b098fff535e5c72ab83a5aa08981d61cfc2647fd6cd24e019155956afa6f0f2fca2947f27e3c550cee22a3cf9d728e64d22b34283ea64541804cc3b4516096f31fc9647666a68be81d336762e8a18fd542853508d2d739dd9ea9b4d939e1a42a4df3e5df63b6d442c20716290f9142f4c9aedb1dede7943c68e6e9581854bf4bb1234cbc19efd6a358f8507056c45029d41286e5c459dcc45baeb19f815c60ce05f1f99addb40b905e9176d762ad200b0e5ad8df1a908c2c034bde3de94b0127a8ca8cda4395db804f5d29dcc7ce4b1eb4e23198454e2ac9ec58afb1d4b348ef16276718d017cf09a7d5b9eedaaa39cb7433317fc8c52134735fb679b827709aca9328c4f7cc7e730475d78c3fc36497d8d8591439a807e234cb7314281a40b15298327d4ef64272c1d7e3435b9c640a3f4c08e40c695759ad26761f88fe11a93a9124903a57b38f8c566d92a2b7a0a93408d17db57b980148eb2fda7f556c08ef386fac4e535a0fa07be6f8c987b2eb3399333fc971328f949410f36fc2d846ecd8842fff6b9e99cad2eff4249f0346da77bea8bccccf4b1cbbb9e8de98bee9c00c02a9c21309a457d5d8f348602a52851ec44703f0b6da4dcc9b394079a877e54d5b984aec23c5c41f42a4a97d9074b008f4a9338f9193a441355339d82d67d9070f89de596564bbf9ad56cc39ce5407c0c03ddfebe82dcca408c52f26b64027e38edd00dd57079c0f89a825374c46e8d0a7834db8130f038f860d94f7cb773e4d6a20670a6134e0bb680748f882e3dfb31af82156aaae054e5dab0fcdd59398bf11f255432c5326a7b8f2abf01aa158d2ab2adf5a37812e7ad01bf41b7d2bd3b326a1602a1118da3efd08c2b06c15e0c9d899ec35122f0b8f8deef6632a866bb408dc2c21a7cc77fbb4a831bc0f98041313a3ec79f30e0916f7726b275659bd5c59010dcc59048c68706f5d656dde3f18fcf7449b32b4c38b9d64d6ea990c64f6679e797cbd47940fa0acca5f1f2f0e75f4f2790b59b9b767f034de3f5b24ef2cd52313c54d0c0b4bd60eed0b9c20dea48c341e5ce06351369040c5682529b86a223d513870d86ec7810459fd5d4a3c1f232a99025f682d71ee3741277f815d38cf2bb648d1234aed220b7596eb01b3506a447d9e4f2ea8a47a86c5efd2d24a034c9cb778e6730c3739a2e48abdfdb0e2c2203073083d5f38b59db813c7730b742afed93b195e4f3048591b2b5e84d140bb2c564342fabdb9300abc45b61a1de5dad09021e23b6052deac8e0b353d80e4c5f75361581d40a07a4c36f8370dfde2dc9070afe9910c395d0ba1acea9e3c6962efbc6fefeb8488e4e0bcadb2e527f5b0dcff4798059f3e53f51a82e70d80292293f5c1530bf5dd0056b1c8c2262888f814908b65ff95ec44074d1fa331e8be8572a40829e521076d1cbafbdd478c3702c5e8ddebe58ccdbd90bde5b771d293fc0a2b96ed0d72a28ba13c997cdfaf6a716f4cd1825de05d214ff1778c63da33f6d9010014fb8748dc92bb3429452eadc47f40e8d1df3d050f936c47aa7e6c39165dd8e62a25bb34e05fbb5e5b1e667b6c84799642dfff6fd8f992d88a3804fddb06f78ba512ab212776c16a8ad2035dda0d3b6c6de6a4082de109acb417310ca57301930e58b3882256420b40f671bfad782acdbb79c7387ee84526a0927ce016107b8ede5e80c4619cc19315f22e2b5763bc5ca40fd5ab3c8db9e8e8305512ad6db9c18d9a8f7055b8d4a4726bb52b583e547bc01f6bcaf73ffc65f387360ecbf960eda4933c167f18dfb1cea9933a3096a7bd883ed6022f7d61204afdac5ef231f565bbef13216e5b674db36244d260db1a9474d4b0fb55d4ac9a670a346dc0a5ebcc2c04a11b73feffcaa8fc468e799a21930e7799110ac42356c0434ac5b7c3b8838d5a628f5051fdcb17fe14b8db42512bcdaddaedaeca59c7ff2f7be13829e01e4876d3d7541305d1a8de3bfc16722de13ade12ebc255d4706c25246ad236f70ef5d0719e2fa09c50a42328c2bb981c35ce8ecd85d60517e2afdaf0ad068961d80dfdc84e239925cab24367a72b22a0ac014657566a56989132a75d42557fb50c09654461d05b36c25bd58503f5a06fa66b8b6cd7efa8dafe8d10c6a54fb8751d609d8263d66543ba095fed839bafbdd765c46a84e69a539d27adc9404592067ebc1ceede7645d12433292d809d9f2f91a887dce7df9996ff8ae4d1cdd7bafdc2744a063c508b639361e7a1956bfd49878c5c307b4b2519983f4c7c989681df6b11cb4507f5948f8a2e12063c9758700b89a801a9b9db6ff9ad5b262ad2850feb2d0747cbd5ff997af01ea7e0a02f57903901cd0d9c1aee966d876b0f4c4323b51e947af2623b25d84084231c06e044d812efff11727229e0e857b7b0343aaf7b7ee94b062ac5c944a7e8f4593c29ec259fc9245fcd5fb67bb64298a85ad9f780b67c5481a03dd8228e938832d05aa22b4823b9331d51f8c95fee9a7200afb0876dd413ff62e1f6f47d3a7b0333f10b3b94963a55d2f7855c3da21987c63a5ed20d7705d9d3708a5cec343975078b8be91d8734129e9ed096e803b2642bf856f30ddba69b825826be64274ff2ab98a8a63b7d1303d0d65f2bd799d191a2783d8cf77872dee017408b7d7a2af69096e61586fe73940a2ca56d94cb139aba2876e242e3f6fe8d2c5c5680a3570b6714c8998871c26dbb1037ee981dd4e9e38797b58894af84da05fea2263950ab9f80c4b4a87d7beb541f8b216a18b1f9af1414592111090c67429bf0c6b2b4519a696ef96f782c8775a913a8833227548d6c715fb4cfa +MD = bfa71db73fb3d8103fd7f2965eb89f2394f0b751 + +Len = 27440 +Msg = b00250cc952f6dc3042600e54b896d178c8484f5bfbba96afa81327df04b116eb964b302d1e2281b62d8838bc6cd842a476d74272a7f519bed172b64cc0dce308aada1d86db0cef08b6ca39c444739a4107153cb7bd3885d6d42a508aff94decab46e2f57383a969054828bdcedfd3ad6cf8e88cb89e98d8046a6711a1f7d5cba5953e03ea42ffaf5ad6da986a7d9c6ce56afc0febcac73339f73a28abefaff5fe047da7dbd519e9117c81d52309da0a023057ff1b3e5e979451e6f5d3c9249141fa668b4d233f40b3a4e41cfe6bd6af4bb0c10251e2a42b9ee1331f236d7ac8f3dfc2574816b8dcc7b5cc13058cd881495302c0949ee318de0de94fa3c3f9c19e1a59b3d595cee4d51701653f5227ab8381e1e3ec5a6185dd3ecf2c5ab4eba5c915f345fa89c78066314bb8b4a60d5382a3281061fe689b21ddae5f5026969bfd3758b8c1d8ecda016d72b56d71d0a2cc1f9df1fc723e8134504e8f8d0244ccc1e84fb2326b85172e323d037199b9bfeb5f092ec49e2b609e0177651a313b5f9d90a2db542ada6275e9754ac80810d267c9336fc26b7960e556f188fe9ac37d199717dd2ffd32e15ff8e2347ba41d05c6c7e55bfcbf6ea893b983a24124264ebe66775dcbcdd7bc73c84c679157277e92c0e59a7c8454612f91f758ecb9aaf91363890631800f1c39c17b8b12077865521cfcd54aa071b242461354054099a7a1f7177d680023293a4b3749079e56e38f42f2b46cfd0ec45340a03e97a0397fee8ae76d78335b0afdcf474977030a20d09c8fdeec8172bfeae665bda7c3d3aa8485c37c6a03fee80bb374326a1edc439d919bfcd116e7ca90a22c7a3f90ae4feb4e7152455756eaea6186ace8d713747e89ddb524a3b30dcbdbbb1d66ef1497a94fb9981116a939243f4561fa16f9ddfcec1eb2ec0f1fb126fadb4d25c84baa48ef65f6d62a40fc41b778f6a7c3d4a39e23269a314473de266554b283039caf50953b139d7a635cc730e916f8c6edf1ed94bd16fc29f7bb5585eef588894fce47ab05986dee598140125e67f3078ced70a8abce54a6f3713ac271be3c40ac31b798892c4f6e6c9233c4a091a26ff9bfafc7b76941a3ae275d85a4b4a811fbfd27c490784ae2e2b729b0773d0de47b90325aab90cb08710647345080d3e4835d2097e1246632041aa93daa133b4f5b8882c74deafbbd84367f393dcac5a28d77297946d7ab471ae03bd303ba3499e2ce26786620d8ab2fde8dfa333987316173cad2853922076c3467da48db00a8558ba6d3bdd96ab8ba27fae1fa75207b477a8b0a67f3d25b413cb6ba421da866ffe68b421cbebacd6c384d545927986787b4f589b4adc42be320afdcb92933ba27085b2c4976cfd38e3a0ebd1af7f8dc68488fb7340efe609809dba675a6a98b1418a1f90daab2b06854c683038c47c4335ee1fdaebf8ae0a91fc0813d3d12c30f3fe2103002694e42affc0edd8f8d06312074c1ec6870955e89e8d6da96774960a5a8db7a25fe93647238c66fa7d28aa7b4cf6cb4b0b666fe70db0b1558df054f717ac1b3bc786915c60213837d1f38e0427b67cf3f663ad3fb1f8ab42b53df24cce12aa26ee0b79fd3e35ddfb87bf823f3fe1905be87fb23533eb97fb9dabf26dd647e10e43d6548c0620c4c01efb2b7eee2e91dd52290379fc00240a77c8d9ecd8b26c5c6975a59b608889200824ee55cae41e12b3ee157082bccbda04131d4c3de8889bbf78019dc5b39795c3cb4f565eb881769e3d6cab6097ebf4a329310e8e60d246b64bed25be588c9be25cc2f30202588361957dad0e1820e4d569c9a632a1d5d7fe6fcca5a2edb49cd467fdae6d582fc3be94ccd7e3c3f7252b632b95d3221fd9f85224b02bc9bc232a6b340ae93063b205a9deceaa11db301583eb7fe877fcd724a199b7a1931fd944d51a7b1e0190c8c75327f399884980146a9da6db0a192a13cc702ebcd03bf9c444258174723382741f3ce96a9dcebfb88596bd335ed17d36315ca7d5e7bd3f2926c9b074d8c889ac6c920275d8d72962438b1579fcd23b1c8eb39575600003d3fb9b8a97cbdc18d0c9abf143bfff67b242df62275a87de3723299a23df90d255410f6265b1caea71c50f186cc9b3e518f1f805b3fe6ee1069d0308599d0c354d8589ea672121691fdd1ffa596c714c16ef8992b86ee3ee0b6af4729f4ecea6fd37bf8504a08c0f3b707319823ec3e73c89f87bad02a35fd60b525b6d5b54a214e604c4d6a64757353d8ce88fb73850ea5fc922fa8019a0c6fcc1453c593aa0f4fefe2c55a8ffdbcd82e209ca4c2b13b0ef704b393db37b8ecdb5a284beed3e4e11001dfa3f220744ef06dfda8438aa10978236d1b20d2a6deca405eef2e8e4609abf3c3ccf4a644bd06fed28f5dd7e9a1673986c73934814d810e1d39bba1ded1a8fe9a5dfc56d32e571b44df7762badbac8c251f8c25ef42e70c8cb2fed45340ef6b8cdf74f9caa8cd0b7b22fbf1bdc12f6473ac826d98c3e682d4e15df14d5e6982c0d9c357d0344f189edf504d995ad90b98f584d326db65b71c4e41be7634fc8a5fd351388ed9c688d59fde3ef7ae90c8bb83f8203e8f4df48d82130573c991cd90558664ab9f18a44ae90d8c7fc63de204dc471c8ae984814f04398cef2611917ce8caa2d08e2eb4224545fed8a9c9a29c8ada8fb2f0f3a6895c1d1c9051621f4a1385bca5aff000883bee5dab5f1a50ab1518415eac82ab6413257cfe546ebf235f1f78d10946cfa25470719ff11a34580368fa35261ad707b0bb76e2371bb82f53009ffda4196b981733025d66af95ccde3481df65a1739abb46d0e4005354957790f9d0894f1a930da0d88cc6c3bd2f2de39f057101c747bd2e53abb9fdd97e53384df3bfd225bbbc1dbad51a3df2a879dd1c4f53201b343ddac7e069019011705e650d4e88d437ae1372e069057d5f4989c06412e8b789c3b4f42a1947c177556c07c73f5b6e306bebc654bb03a67d255152edb63fe26fd723a132d0b6b4d78ac8fcc999323dcd790b7fda181fb42a959c9c91480fe60e028f98a09638b05a98dc0bba64f4873762dd65198941f18d22d364f9cf3f098dcb609f1b73b4ff28060efe43a98b9595aec73fba1551a3cf535c73cc53b79414bbff7f4b7013e7685cc89c0b6fdeaf10e333d764c5371317b1a091b3dd5fcfcd58d200d9943bb1432371acbbbed51cd08b88f3c0a0db898ec3078556731f01de2d42e96de815a4e0e270f7fa9e5826fc2d2e5c75ae254c5c11fa195c20df736fbfb804ae72890a68212f4571184f13bc528dda2cf7fea6a823df136ee9876ea9989a17453c80290268155dc733a22c3a810d348d844cdd9a821f3c33d8ff38b33f51ebd94ee04bd7408a09a5f83ab99b4216343f5cf93a5cb5235c54f42f19b63c464813ae93b60e30f60fb36dfd020a1d10a0eb87eb051344523b7845ff5bda18e0f59b667fb2d0c1c238989cd44ead9b6341380e0c86eab813a048d45845465a86bc187e8e894579544cfd8da7e7ac4377dfcff842050797d0556ba8201e238aa26333fca78194e3151389475f13309eb442574d77c9926cf0208ac9412f98309bb393eab1e4e6846d55e5d2e21b613283317915921bb4bcdbca4d40a1c0ced5d974e04f96f862e6c5d9b8361a47668a4a75dd597b439411f81b5b142a18ed00c46ec4343d0631908368ab7beede682b72d62a211a895cf2b1da5d4dc2811c3ac468e5a08e557a0a11ca66aa452a8e9f641c0973573431e86dd1faf45341830a412ceb9b712f66ddd5c790cb0971016d870f21591a8e3d7a95c6db10c4a14bf8a3807f2eceda1d903926d1e421fce81d42771bda4bdda8308f82a8a9fde99c8c522d495f8d9fc6aba3b1d3ff75136c37ff1b9efed26a9a92c4cd08c8e6619d4fb6fbf03896c689b67d2e3b23edfdb54425c453ce977d3a299c6ea373675177c837b11dc1d1978f3a2e66b4597104eacc1c3ae151825eb07c802f22b5680051803e197701275a00bf1e21e4a8e96e33554b45f2907c542513d6d62d93d1b754fd31f9a7007e5604cbb52773183d84b9691cad2b916ba8c177072c6b178abea8c97a1a54c6c0d4c1e85b3f0ab1558ea48ff639365e39a3ab2f7cf985487b5d746c7f44275cd31c629d7833517c19d41c5041b3bbffcc8a0cc39c05222e8ddce06caa3ec7c9a1760d7274c9ef80729d483266e1617a0ea80bbcce17ebd2a682165362d2de15102aebf0b7ca8dc5463350bfcb8bd1d9e544d1a17cf9883baf983ba80ec611490a7f239ea9fdd2547fdc5d7fd97bb3243ba585fa0d71a07191667af418e30a6b76bedd05b32c673403e197f9f878ae61f7145050e948db7d3234f9bee7f171863b3043ab3b1df36dbc8a25b591496a9a01d95a297846e3667c4ae08ee3b8ed9f431a7a1aab991f08901e2f3b0ab790d6413cca1021325d3456ef58ec74ff27c075c7adda6968930c69e7df14cd8ac81e9f85c88a4fd5f4f0a76d89610290c7f0b97e0271df52f6812e2b5bc7408ab97903fb7e2167f84ea1590a9a74f5317438f786a169731ff070c733cbdccd7e0cef55e7125cd261134f530fb3aeb5abd69e1728b34a8f962be01b4758dbdb3068887d91acc3f8d9ec027dc4fe96aac6962d02ac609a9a814cd914ae2a4dd166764d634175df412781c3bf70a0b43d495cea9e5acfe3fca6fe6399b268ba19e9de45ef3f943716157999015cc490d4fecfdfd47929ac1ccde78793993aa81a8147780ad23254dd697c8d2bd190b3d9ab98138d53957e64c0af4ce8acc9a13cf559ef9a4477bc00ec34a625152ca4b2195f8eaf2e3ce03b46ffbb81 +MD = 92588ff54cd3903ceab98afd39f1854835f54492 + +Len = 28232 +Msg = fcee0a4b7817f88402166350bbda8ac2f4be6ea3e6692c72a3f289a94d48cf4286d2d87a275268d5350fc06211336f40ee726c6188ec628e14554bab7253403daa278f2996900fbedcecb0f620a156f977bbe8e31ed7a3c76c3fb5f40556077751375ae12c99954adff65d954fece7f675e30ab20ef0992694f9ef0b6c1acbf861485f285134a37e2672efc608dbc93ed230fc55c200eab274cb2278116735c9c4a3c6896d2be1649aab8e12b337a5d974ebe354a0ce3e74f4fc76c45a05edf16090b889e844f60321e86000b6c822d0455bea3812243e72fdd61276b1bb9a781f565db22b488b63a47090187a56e92a2bca36887fc891b6759f1f167d52e467e73fdc8b9cfe478d0c8c44e267a9a1ef107ef2cc4f83e04846a0c42d269375c5a2915d9ca430d3883f84a5e7e688f328dbc0448de91dd32e56212a421443f29a37950a6eaca4d65c27a0daae5dbd87dc74d85451b75e11728f6a78ddae2d06ee8e9309881a23f912ab280bbf350e0413c30e4ba3200e431cd7c2d7865e1857ca8fd382725775e4b1b26362a3d74413d5afaa51088cf4103218736fc68ccb8d35229c9eb5cc623e41269a04e1a9275b2b22f38d0a63d921be39c367249e0f51382f3884d8e0b2afcbee151c01157e851c043228300e851dc722fbe829fdac4bda9eed5e63fa2ce155f21cd08c821338b13bb04a02f3c0ad56bb62195b116a2223570451df849a79ea1af7480958ac1df1b0b219097b527972ec42234542117e1b42c487d3e5c2228f4eedad00fe12dbe44b83c0cc0e0228239de12d6cf96809cb487728c7856c824e764727f9de0d1b92f56a65d415996371b689605a9c38683a4f635b43cc62412e7a4edd7d5f64850494ae31a7f6e0d1651f80e4969549467040d249d0226b08384247f813e9e1c04111984bcf1b9c1b06c00ee0a84a634976040a1af5ef4e7f72b67d9f44e44a75515570dbd4ea98e85d817d7c19254e19538154f53b9bd44de6bf37fb97b8684b3d477e0b3ccd9be1704b13e26f8cd15f0fa1f702298ec51a9c43bc3494ce03eb0cce0901912b6cae49041a3735e9b6c3b34b3d6b4730e9909a2b5571c38ce3fcc6d45be55a6cd4f6f096d8a6f0a3c3ec46676c551dea0755ea604adaad5bcf277440bae020f79b616be796542a22c183d0dccdea3422e91194c9e399d9a490141cfa6f1a6a368999c4e19b6c6ace772f5a94a8521341556d9e4d68d3cfcdee6ac9e9c1bac0906543036b3114390faf99ea7645b542b0141012d620b31840b1d280f7fae8aa6df90a2e6c9e741e4d2f698b6aeb3a4ad6eea4f74b545e3b63a1f34b0b61ceb1350b934fce2bb6a1f0c0464258e309b21aaace56934cffc0a08676310d3d915c5164896d7820ff4a602ad81928764b02e61238369850bc305e27023be6d75c3427cc929152c57aa20535c817c2e928c3a1ec8a9f41a8bd12044d406f7c7755c0200b56c244614c3048a9be440f87c77cb2016b9a769b2beefcc0d7d7b864a488a4e87f08363ea07c8f4d61a9f59751b58319842d1f722e4dad48707b82e872141c2cb26b10a29c0f43ea5a4d5d60edf67bfc7d632576edb57fadb361c349e7edee9f99f4bad66870cd485039302bc4c80271fd416eec91b1dab6479361d02a9a8409dcaa1c222d27932fec735440feb28041acd1e31f41c6262dd51946c564a3453223961fcd13bdff67d605b3e7c23d5d34341a6c56267ecbd804f95870bc9198e215bea92141b978b7b5f6346838ef02123a24f2d86860317f7d3d81185beae7e05a2ca364e0a365e9324fbe0a8953d5a369f85bee2ef4c1ece8eda807683999f59be8f6df170430c3f4173b17ddee3faf669d91e0a0c3e1e6ec0fb5830c0316e980f888da0f63400ea45692d55b4aa9fddc1b7af6e854fa3431ad8fd56fd2c584b066439def48fd91e915ab8d2cee7956717b00782b2f759f60ce2045b82d108dd43a0e6fe03bcf166c5b6e8677621982cdc40aad94ddb8ef217b4f1a109d5ece937ad09a0ac51e63d430c30a652fef4999fe7fde48e52dec1bbb049e9ea9180d96307364946d5242ca9c925f1edc65737d31495372cf3b5df79627178bd9a4138463de16a7bcd378f6a8c3cec9f1e1c720664f543824490c5c14a1cefeb56ba8061cf9f76a390ad0ff5b3e9f8ff6cd0e2ba57929c26bc1bff33e580b20c6d593c462ac51066c5d118ebeeb1a9774901045f4af19392c0a3f641b351618934b9e653ddf6aa2dd35024ad7b2870af39295175dd96dc5f08c5456b320360fa4338f92b57a8c6715fb6ddcb07c2d0ff93b6549e7df6e8d3dafc5710f02b42d82f62ff2d365fd7d9b1518eb512f55cf10f347829aa961ba9edb5c5e36c1d899b4fd462e9e89050bf7edcb20c0b54771bf22056a7f2091739878dfc53047ea7cc2af9ced1fccee39b2e9502307f44b1e8f3065aa9d2a45e1b5ee174d067a32fd3573f8d85c17fe3153736e9b2ed6a9fe068530eafdb0c42c7ca5cc9fbf44f84594b324965f537f1862f2ec303b42a838ae892dd1a59b577b7506c663638c837b67d6e6d03066b71967ce938b381f91f50fa526089fd146f62977cc40fb3a1cc83744072ed53aef59eb6e2b542c57ac5caf3fe137f33cd9c71f61a8de8e350b548a644f5758b56e03763c7c3220d1419618c12805a7c35813df2d20e624679846eba085f4c0c17e3d8e9f4dce1b7598cad291c11ac54d0a05f241fd00c5b70bc7df5f73ac1645652fbdff67d0252bf9216319741f54c438c2df0706d37a0dabfef00adf2861286c038ac593df46dbabc355bf0bbc5d0f2a752ee505084a51c114a5079210a954dbde7d5797a3876df7d730ed4c98e71628446845c0463e6b953086bf540bf7b0faea1f1e3bc6efc925857a0a015cfac17a57148e01365d446f7b1c9aecc15224104ff78249ed87d87df7bd7ef0af9ef867d7ba288e80afc2971dee0124dbc29867358eec87c25680465280b0e23adca338ece37b2fcb3cce543d855ac2014ff445c36ac2bfed64aacac14c0a9ea5bbaa36bd16efaebf0d51f003670e8fda0220f321156db716b93f4f6aa8f3ee9744f5a673dbecd2052931b1981e86530fe205b978175638e45e251e751cd398b87e6cd335bada62459858e0243229d647f789def0f6e409ff5a467f0b301365b171f8042c3c21272663acc4ce295edf2b4a95acb03c7ef410b588b9546d191d2a257f8080e829e9519117a7bf8d8f3863e21269e1708ebfbf77d516775a4e88caa3ea9058465a6f6e2a80cf1fe523a796c8e65eaa1b7b33b3a914dc9c801a6d3af2227cdcdf1d832437ce8515ba82f56c02fbd334c4ad1895532d54ed65e696221a0e8c363ad8eb1bbeeb11c99314ea8f9a3710a6f38c360c7b07c68f9318c9282495088be0f570fccabebb64f8404da497845c29318054c12b8c7aad921acff717a1370657dada6f602fcb0e7171e85602c901e504f13c5b6aa3b76de8527035fb1962cc29f1f11b8a2688ee870c814ae2ee4501f747b4834134c7f71f2a738bd8e4d108dda07da94f8b3c2dc17ae12b3fda71a68fea85e1b628f074bf08a2a0b7eccce0fc5145c0b8462df2a823d09f2277ccfb5642771cd4657b0c4e56c31d9f189b7c0d6b1209cb40a366c26f154e92aca029d3b851dda0d4b0e6567b9fa9995085059856ac2c925fe8b19ac77ae2976133578eb2ddcb245dd62b5edffeedac7cd3a32679dbd0158c43fab591c500397ecfae1099e18f67e93602efeaa890e085ce7d3e3e679d5bb0fb699d36bf5281ecba56e0d626d0715e19949004643b3d51bbbc680c173d6cb15928d91f308076913c7686cf74374ba6c509c995fb96ccc9e5872c4cb4555079a55cf1b3e03220569f368bee926cfca783882205364894d59307136406900fee27306d59960f882329bf769a4a168c4b9a3924bcdbfa9d5e0c64a4bdd593b2fa26cad67b1cbfb5e12439cf3a62dd047854455623b253f04a99c568bfe9094184ec52b48038ebaf76d6cc1f38a36b6b18f7d440a085fc94838252e5d20a98c273bff18dd0b33b7fcc889eecfbd565c912cc0d6b9c1a9c91ef0f35a55fffe83fb1e8ceebd354562cca81dac1ebc076264e1b195e803adcf078889330cc91a2bf25ae1355f1e5e5be570ba623702b448bb42c20a1b2ad64b80534970c83886e4bb75be554922c8f3e5d6c2a9cf2e077ff2c4649bd9c3bdbf17d5c66c3eaacf3ea4f366e6f1ef3fdb3c3ed90b3d9a5b88b9eb2bc39a4aceaa4ca482bdd6bc4daa4d586d62efd00d62571d6fdf18d43af36f2b9a29d34c738d8d3400ce06d9aca8131944519971bc39d4e6f9bdc7682030810a12372b3556e95808c315658f46c8a4ca8e2b9540e6c2144ff92fefd295c09e0b2663f891e33e3b973c3c6939b68c60c09d5959da078bc3ad00adf880264424b36948c1dea30cb663eeab98857653e5a014735d898907319282a0581d3c0ba3773d4e2d9810c546f36cdb69eef0bf81fd660226fbf5b50c7501afa4e651b798eb24fc724ab7087bca095453d2d04fe41d147e3c8dd825a2d90034659801b88363b2cc6662f046a36c769eecdd7f558aa3a25004dbaac99332f0d6f08eb68ee1956946408d66f08c3f2723ab6b6890c40592102641d8216c2775fffc570abb31d4baf2b70685a664c68d8b061926624ed75647077cfabd8c0ae227ef7d58ce02c61a4a207ad6c8eba72c2d9343334a797d815d2ed99d0e7171d7d7205e3b27c2de29c51356c4e87f358583b98609c9e28c85db12e41994cad0c99655962c68f0714bec1636fa759e162c460f6e34510878e6493a28fad0e6cc39dde5a1a6f22a4403379f77c200d6bd82bd0b482d9059c725103b14db5353a89b26670d3563bebad22015b5c61a97801b8113c06fd864fbb4c86c34158ca01a80084035423e5c4a5b4e2f5d71138f22690adf4365b9988b37fa640343fd4a866aec07b667d25176e11a32fb4d8bfc0 +MD = d947e8fd7fb5d805d70c1a21bd6eb5368f312885 + +Len = 29024 +Msg = a24953a800e0b73b4554d4be70f6c1ba76383ebe38ca47a6b202e91d758155615714334769d8387e29a2fb17f99d0445d035266230341033582b1e6dba147578af354e726a4892772ad8a820b4ee8a4901ed1f1834bbc53bcf212c7025756b4b13764d34eb77ecafb1c082e08a317b4e7128cfe72ca58e447eacbd2f9feb6062e99dd892d4ae6fac2420325f61adffda88aeded7003b94d8cf9476b00ebf7c469a7396960d3543f8edc15fa523ab3c77ae46f5f098c5ff7e29a001fd5c3ae67e8fc030477e548f1b726bb2bbb6735dac4bbabc3bdc8bf7bff49a061e6fa1c7922f4c4dad10537b9b1de5d2a8044d8801c7d0dabfb5d4a32199482c19313f460be1de96d1a979310255f96974f381e6ff8a51f88409ea2b2e7e721cf8885b8c700f40b3ba320fd6d7816d1c286d569e2dfc04bd93c213b86e0ce27ec35e3cc04920384b70945d95a30b0a95ca5915d81486b3d2f3c6987268ab5ff9809a2b0b1f7c8f06fcb5ab94ed5a987c659e07be3a8e24deacffc180a4c4b03539247095788b0d8e657f41fb3dd6df78fe267175297e208ac753d50aaabd9edbf5e45385dfb47988b3d966f31be7a6329fd89e2869bc6f7e4bac1e3a0300f193bdc21c03d9629c9fefaa64a410f5b7524f9cd5fd80b2d96140f1e23636f3710498a61239f0fa3f7920dc8135a368d87f175a5d1cf8c626dbaf0a6a26cb00e5d78e787e4dabe528be4e5606ce5da8d261fdfa7fae59621d969fdefe334a8e17b3a720a867928b201781003b99c51d6da10c6583db29ed88371857e5853c04cd41ec86d8b02e54ee2cc2c267bb633070e74981b1caf2cf2d69225c694329ccd0296492564f06a95ca41884d35fbf47a5dabe3750a43b6fd4d2c6d6d095974de812172d696da3f030278c2ec8ab62ccd2237270aa908d37471a0bab63a410efdca40e3d5b328b93335f25a88cc7d325c06a6d1205b76f8e4deafac46a981b1a768850ab72c548f82df1ebda67dc9abc3756b806aa4169dcadea99092d9941367c66e560f74f6289e688e6ada31240f7ff8f5a35e155038a30c1f262f3cd08abb7e5d64331f75fac25ca1f0787904c40dfbe5b86f21bc6fe9e170db8065ffbe2efae2a3b6ae6c9cbb45f9dd25a7f46fea08bc4e024bc39a1bf96f0f1ac759f41ec69e932e843274d59f068f46506b6980a9d9c2dc060e5db5ae4a5f72e387e3175bd1c0ff537029add258957f04e2578e59deb540e2e501539a934b0d4cf1f1b5452cabad7eae11a07a507e1427f1b05f932b93d564f04b5228ea306e5620a654fd1fb1ad6834c35a119ea7ca5c01ea70e050fd0e0eb8925de3afce0ab1bc8792fe2b7193c2bcb5371283b0f5f39b8c6ebbdf4f5f32965cb355747256c20e0bdbb2c079e4f09e7dc417b0181b91370ca59037194d9312211ee8a8abf7199da9bbd58f29259462738d7b944bcfb76ce1c207f8d95d82c475ed37dcf9502af3f7afb0d81dba00914cffb8b0ca76d895b2208d850e039425d19aad81d8f668995c13ff4bb626d7b34097799622a57759e45d9b7c25d449aebac3c427d95e75167da4fb5a80f07c3124f128a4d2d006120ed5ac3ecf5405d797e5164f58fcb2c3a2cf3f750cbb80b33079307d698b176678354a5d58e77b290f7b1e690655b44981ff562bc7cc678219bc3b70453b2dcfd6d8f0485112fc2b77f236f5300dfc1081b1c9ff30b7a3463716a43df474bba6a15d3890567b1b4767e70a748469fcb13882f56fd611c6781f350526f5ac43834e1e8dc5c7645b1555c60387620e2883fcef72ee364f43803873c8dbd756480e53b95a4922832e1dd81bbc7e576f22317553cd0acfe49d07297f79bd08174b7048aa389b064c26b955649ff9e3115c22086c5e460166557568a4a26b0643c081a36db35bd113b780541d285a837948ee4c75c1108948ef435c8fad366080499aea7024dc119e62fb6ab1d040b72b7aeea81c7ffaa5f0dcf99b9d24cf95314924844e37cc5630bb92ffdf322d0c9c54aba1dcf5751612a1109c59939712fb31c71774568cfd7f23df89d1c87fe23088cdd013cc102812ce20e541641d7832b5fafa8efb9ea5de2e49af560dc9d6ac69ada97d6e4c7a75d692fce120d3237c2828d3daa181bdd25d69c6b87c9b685489c39466569a7bb03cff49b55458a32c1ad909f3e2d6c3f013a866958f54f5cd6bb8375b0f7aba6673be523a790e75e700a4236739fe46bbf38e1569c0973d7b71e3f8e8037d94ed1d68bced09652a216be2a6a11168b4aa6fa349a1bac27de35eff5f89dd13b9c88c86d059700d2e6fcf4d0a4df3c6ac200a5079d9d87755996532d1bcf6cd978d638132ec67670126bd2bd4aa6b688bc1364e3c6ea4264302374705fdeb0b9cb014e06b3239f330fa98078c62e2fee21295d4e7fc984fc4b247a452c9147e57b5234cdfa772423c3fe27897e3f4da2d788b8d23004f54692e18d35eab1d66572110ff06d89ac4817b4ef79dca1b8aec8789ef73f613e49eea1d3c70106083f96860af87223e0abf312ffcf461b1919da43374415a9070e45ae7783d958827dd1f94a6c730b6853405f8013267718ecf730aa411aa3f79b814e9ff1da6fef270ab1fad4d70aeb48e4e499cee37b5c2e06862076b619b7fa88ca749a6d13f54329f740b906e81293c9e97387e5f08ee7ef8ec06c52d1ef33446a1d05f80b3cdb151344a1686d843bd5b535c6949d55209a90b3aa5495464c9b75c2bae5206df6b84d2f176561e948f2920813584c5ae0efd320b8262b644f77358d429a1a309df9ec29a0658bebc307c614f799c3452fd6a1301f2e5bf243bff0a42481c12cd7c03a59c6d0b430b3fc9a80f9bfcbbd1537400a66d6ef98315bef2fe800dc0aacf57de8100ea46020b95675a2322c6a9bfaf9d81585adfd20327a57178135712481fefe068723241225421a785aaef5c80714bfb5a25fca182ed843386b920a484a05c131a3f924922aa69805a01906a546d9e9cd97cba62236531dd326bc7d1f39da5c18cbed07a7afc916d16a3444389f907ee5cbba3a4433310a701a7b71b136c4f54465c9755a9df4bd6221c8588bfb80a585a6f32e880bbb3498af968f072a0cb53bdb5318b2da6fb5422e9de9a640f28736904029f6a739c3d24dd77e28fbfbc387935495b74f8225f9f77ba08f582e4c7ff167d395eff3dfa75c04e61c93d748aff7939771e475350de62a2550297c1be93131d56dcb30ae9e44e671ecd8e86b3c6ddac4e9828f0f0862711ff19d241cfbb866d786243a5b3f6d45c59fb47855b55fefc4260f19d872d21a37789b6d793defce80e9e0570c123fe98a3d0ecd2da2349b4030745bbbd1a0eb14ef0aa157373c30799de9d0eaa0239969cfcd301c8c54a6e0109a9ddeaf33ad5f5dd406e172085669aa25ed1c707f1f095cdbe94afa27d84bcd68276993f327bfcbe0e43c75bc06f9197ef5ca0abc4114ec1f40de7415f92a6fc54085064823dd40168593c8be09d1f1db321ef743c82f88817d008286d024ff9b325a8f9a6760c45e300cf47827983a23ea3ebe7b7b0436e9e7daade226e283d1430fb651bdf15fa02ccf805027f7fc406652e7cb243b003fc7917c91c30b064fbccc03d5eb381ac4c205f4b0d3954019ee83fb9d897cee6b655078fb6f488dfde5bbff8fb9dcfcb23ad6d9fff11b0d96c9f88158746e0756093d2788f24122c3050131e5f1860e53dc69b5a54a306c9f41db0163abb953e6fb8013a1139dcc8965c9214059dd578defe7130aa67d641c9c510328f606da048242c4ac9b0594374e395809bb8adf49bd777896cda9fdf52384100e1ffda599e8abc113532080b506795da6dd34ae708c426eb1865d3f131e9caf7dec45bb8b73e2923c00979bebd5b2b8818784cde8a5707cc39a41335cd5c069dd278724c46c10bf916d11eac1050cf2008321439b50282b34d2fce0b98f19c597966ae92a1b5cd07861377720ddae928d98b5186fd592016cf4374f1296cf4b11029711a7c7ef4e5ba3b149eea4c1208f8de5544e7bd788d3c8998650300983b432b5a422b9f0c1a1fc266815a36c256e2b5b001f8b1f48d118cb8f59a6eff6e8f06dab823a88afb2343edd7b22d828913abf24ca4d91c8cfaa74721740ab2b1602672cb190dfa2f613a2af0a682cb16282b8c63609569033473d35714562aaa4314a3296031c21d561fae6a8bf914848caeff04d07952867b7cee24eff3ffcfc45bec219dd68b5b7e5ed8b3f6d2f76abdc0ca9f68e7719d1c2ce8098b467a884066de62264eae4046824a4b6bb2dc2f37eb6fa19e824e9db30e61836ad0536a63cfca599e2cb3924b2473cf5f1b4b5897995e99f5bc323ecc8bdb110323f2fc9ae1608669d32397f8bfd58e457ebd5d39452816e307d4c6b53fc530e8a3d1a5425611572de486e7dbbee026b35fbad3a9995c76faf79eec29a4a0618ff287fb16985d6a3ec345f8709c34172d20bc2274e05c58a1fe090586250d316d728e647422b53e2111f94033e241ee177449e007d4b82a8cad9bb9576b5c1f05b64d87e78fb93189331965b22b89fa06ccec82eec0f06aff68df6e19d22d98ed305dcbed29c9e2bbb91ecf57d28cf97f9d0c81a64f85a89ec23c9a49e3f22d887327b6f19b77c05d1681e3b171bb3af6672272bacae851cf4c4bc4642b3a4b7be143cf915f3368c1dddb593b83a55cefade6cc88eda8f525598582f51276711c2d3a7c58ef9d2aae6193867272dbcddfe391f5bd024811159c624c8934274d0d99644394c705b4676442f1e2d9bf0c5baaec84b3b3362434677a977cfadd2da4c859cbe1601d64713852220922dfa6c7662f00097b03acf65d26da5cf0f891963ca36bdb6544d9706049ad51e8ae1bc7a801ee2ac42119dfe00fabb5911a273658a9a9cf210c71d97ea1fa5985aad9c0d2edb594192f0955928d81f365b24d29cf051c593dd4dc10d5f37f8ca4766f37994aecd2047de9fbd738d3b2e94171d4e21e29e6165e66bb28a6c367af715ab04dc1fa60f0ae4a37409a3760864833cc448d591234d9a03cc9445c77112c2abf72bb64cd7830989c411a2378e757116468bb304a3407171a4a44a13774173db9aacfc27405955 +MD = 66ba577de1222642fd9e3b2a6e20741905356c2c + +Len = 29816 +Msg = f7a5098b2a4d92a7e71e4658b458f47a0b5e0427adb967da3a60ced4ff361abf0fd51492958a5fb468a0ab64e0e22a58e95b48a4556097de77d10880ed9b618dbd81eb78a41d6b41aa2154e1fae33be8f1198b6575e07a0688043c801c7b76312932f504fe0da096d529ab97a9640e724c1f3630b442fa999581d09d36de41f37d6f9a004b62e5fa103e174d966b8b3e21f5afceba8dfee1c8d12e9fe0cdaa1bdec14232352421b783ea00cd69039a939924600730c96d24477bbc4ec44e99f076af5564625c3e1357b4ceddc93123bbdc33afa2beff31ab3a07e4728a6cf6bb6dc13b5c7a122357b424ea465eff0efc11aa06690b3631becafd0dd2da2ca9c4eb7f5de3264cb8cac1c3bacfd174439f6012cc22c07655a51ee69e375a989a53177221c00e14e5b6a718a742ca98abebf2f1699684c785a7604a0169b5b7b2b01921f0bdd97192618dac1a66f0742c2aefd2458d0032a90db5af9d309191d7231a1433a02f6ca7149c057902ec0fafa27f3ac8cfdcbea920479fda54972ff2f342d45032ba0b0c17fcad2ddf65721d9dc8b35a23bf746d253ea1209c6e98ec69b8e8b13b1f58aab2d42c9fc504a35c61f5c46352515ade67c23ed7d1bed4abcda5d8bc83095b672d4c08367b71ac56362cf64b253b7be22df9fc67bb31ec1967302ddbd11e1b2ccf8ecb59cb5394f16695cf7a6125dc62be0e6639226de71d7e826e75ee06a0e2e2bffc727b536417385ad958d1b68747632701b3ce1acd9e5bc223f1a36af26fac0a24e8541823aff3a09c4e3c978377646d573e87e1a7864719d5b9b6f21abd7695ca231e4bd9a1e0929fc26970d8dc0907ef43146a7cbc88af0b34ef451fb28788768ba1938fd547556a1d21e88f5d9a1d51283e5c542866ab4dca180c0938290cb188a4994c32701485c82ca7aee15ed90657cd5f37b22b3523e3f7eee036a2490182f10418a2a2f57929525640529e619536891d2e421d7716e75694ad933b66f1e14e7dfb0d2620ccaa5b9d4a97a2dd862f393b40c08696ad3efba578393c8b060d84acfe5945be09b20e23d698b27662a8a7647614acbd7151aeca470fede2ca6e5b38286f44f7b5a83491eb3d1653af0b993ed626d812e88639ab24fd9590c46c9aca82376ef25af6958e926e159ef8bfd8716bde51bd9c4663ef16eb7ec07c700b0912990ad87f03f9c3d213f87cc22c2ca63a2561e715faf33f26c1ee987be0749ee27e5fd0ad3728d7b314081797ba5c854de14eb8d908b2425a672e4048269e30faccb6036bfae9733d598a97fed132b5abfc615772da68a1bcc686e16ba85168606d579941b4063f79cac92480d974df5c5ce2ed68d6dc0354c43da36dd054ee1e478ab9b7cd45e26e500ce4a43aebaa69eb19a14166d811284a9dadd50571693c44978b56ad6f0524d19a02f25c5fbfd98f4d9c87f122734341ec282bae6e81c04bc538a5bd4c4fa436bca4f2a898c5b432c805c1df83d0aa8f733bf83514dfb4435ee82d63a369f568baf32d845d6502bbd0057897c3d0671e7a0fc2012b2b1f16a8c274083dfa1f4edc162a597747cc12aec43383aa1c80d449cb147a7b0c0aabecef0415e3ab2bcf6a357190af121a1faa697a0a005c009b27987308cb2b7cea719765f05b2420d5ab7a8b8fcb6ef2ca0b1dd5948c37ec5a5e9e6913e5307dbb81e01d036d0c0647e80bffc093055efb1b07cd8917564ef934047d038fc2150662f5b6b5e30ce60c6910558ad17c659a2050e95269612d5ff2f3384092894db35dfcb86d84cbc70e76b216544b7e0f8f631fb2554aff9276df922032b62f2caaba1ea99517f2b1345718c988cab165c22c9daffb82d88425450abf42c259bbd4c18213946528ac66536cf68d16bd6e1bc3f168acd8950b546a829dd680b10117ba517dd23616c18cb3d325cbf74b33836f4565d116de2feb97234058b6df065cecb270b75163f78fc077dfaa3503bae079be2fd0025af9d31415322e2d8bd28ca0ce73ab80b85755bf80ab92978c0d1c29864d1365b270f2297ffbc2ad5c6e8d1ecc0e1689bde7c7fb1612ebe78f341dc7c54700068e9d311e89217afefae149aed5c9603519b1cdbb5f9b1debb335cd9ba2a601af9486783a5d2ec0e70e33a698112df14c75bd504686ce906ca11a12ed46f07d266f35b0c720aafb31406c8e23a7c13196781136e5b133ac3100ebd604d9b0dc34c5b2bf0bfd1b92a43795e898c00d89dbcbb769e00953da0479ae0029826b85a13f038f4f1a0bef089cb69c3f839a5fe215b7cf7fb5b580abb46d78a469abe235843207da9f01792516d5916019ef1c74ff17520adde108ef582f26bdb7f75ab83d470ef6b58698c34efcb143a995295931e1d9c8ab60d8980dfdf2bc94d855f111488ee98421b4a9eb32e3305c12ec59521d4b0245b95a6e7ddec4e827d53ba9a93f6efc335a35a096800f6e5af0cf3b0ad19200d374f4394eda848a997675a8ac339677eab98470f7ec1d46cab639c90307950a7e1a10c028f91aea114369b6c32deda2d3c707e1b581f600d4ed92c9e2c63c686d3215ccb4446e50b8c5809b96345dc4130b27ba794480e4a21c410452176f61ca446b2599c26804b683221ecc50ce27d50d4cc5ea3fa43959cbb042f900163ebad87a93807bf14d3205b8090d8926113f56dfc8b1794b492483464b7f8c19486777a9de1178ef7554d4a82203e84ecb796d468c75fa5b5a29ca6be68dc060c4f9a862cdf3c04cc246775c3254742e9dacdaebd9dfcbbeb5902b87ddcba6d4fd98f40d29cf5bee7d2d763a00a836aece0026347797f35aa2822b02f6e0455b3a6ae210ba4c52bfed345aac56a834b7a89cd88b2d447a1968275445fa75a5dec29afad44813aca55c80aa19fafb782f71a97857c48e69e151a62db6b031cf46de4ec4c19bcb718a103ceee9b54a0a00724e8f00051fc79ca3273ebee2bdca79d6afc9407a1daa55528eaf834f3df010f3b4a4eeb59c9c31a7d410c656c09e61f2e490b7afb15eee6a9e7351907b34493c023f889fb0f088a5d32a34d5e354e57a15a18f002e953da095c5ba40adde919461e8388a01cc89e54c147127cef3ecb56c8531363d57293c9b2a26267af4d245f928663d37371cae6857e614288360ec0ec3031985ad9c85d72cfd0b8b80f395f1867881fb3a294a4e7afa64990d286726e36f70af9e7ec47252a8b78789dccd728bd71ef5dc98ff280514decb972c6eda6edc056233b54294248df217187534a3bdebdccc2551161b819e4c632c544952ebb29e47732a44632b1584e334a614ada71c83281d3cd65175ff740cd1883fb7e258040566c5150aeea83492e557b3b7ced3dab3cd4289f2699f1e6c90b09931db38ff45146ffcaff6afcbcd33705beabc76aa123c497525e5e6142b70b4a0e75fb956af860e407bc990123b27d9526ef86fbbf0723ae413723c1df27a7c9902f543d3eac38b2a95f1b5ce85c87ae06a0a24d5f378fe1ce497090069b4f0cfa9263e3c9fd3cf0225f684ca521f3b4f067bffc0c3557b66bfddb5863728f9890579125a75bfc110555e67cd4b3205e56cd1664309119b09cccba87704de7d0e3e7628f5158e489b4bb3c59e180bbeecc197c3286db5454f35e94a9b7adc65a77ba5e6d526484eed2f7c060660b250aa30527d359648617e1fbf04b93f2c9a9ce48fb5c151f6ba4c2a4291cdcb2da168de8cfc332dd2d6dfb4d63c9bfbd60335a3bbfe823e9e7401648cd0bb03869b6df6cca8e9d95c8eba1cb55b0757e087baddb127e0944b635304e22a97adc525039e9be92143ec70577fe4cac6fa541072bdfa9aa3fc02718c32cc072b74f02670fe8027a1138d64fd04ecf0a08e3985a6681dbd931dcd85f318d3cf3dfd1188fd4003ca32f04452f5d354345cb898cd9e09a2fa78a0b387cfdb7eeb96f32f32f289ac3a9c821b228815a400c42278d2a2c612b8192cbd6069a656c1fefc530c970404dfa77219bcfbf265bb9e74e17bfac7f45e3f6af1f6099fe2ba3dc084fe33d692221b68460999911eccb355dcb0ed35d056b2015932f6eeaa3e1ae9caf0102ade69bf0babefa91b579dcb6e6f59c4382f073a9afdfc7abc36b65e1c2dca7426711d5c044f5772b79895ae67a55fc8f797d99fdde33ddb310f88d103b674a8f2d2a7bafa3b2a3d8e6a1c23e783a83e9b9334a87115db6274bc1e3b466cd6f4b7896da196754e52c8549af396131d714ba8801fff9bc057aec5df648d58d99f9d1fd9d98007adf98cdf77e61e5ca6a8306025ca2e7bd20206b332147f8063f3cb1b52295ff82e7a02911cc424662c2a72428b71a7bffbaaa50c8112c4ee5d366a053f5bdc51b81c53f5ef55533a954038d61bde126f2299b25b332705aab0b1a1660a359e193529a790596150dfcb32aaa53bd816912f155625b01beaba42ac99c51a804e588ce725ecc3afc65db448f23654265b2f0967b9f45fb61a28fd6f79aad7039317a59ff69093085bbd3aca3511cf918a509ad7024faabf3efcc8416a9da988165d689841043334b70644ff9ebf12e14bfdc9ac5abff800fd3c8a6c9427f8d57e32bd1c2fd109fb8340b93052c787de453d7e30e8cbb23f00f22d361ecf2cb4749e8c71e87e7f25677383a57cb1954f2118a1a9d5fb3e45ee2598e8311eadeaa0aabde09393fb790aa889a64206a3fe86961b6048d705da70deb3c9f49be442a95d38b15998e7c015e7b37bcc4d1bb11dc0d29d6ae86fc52e24662390ce378338c0e52c6116aac22f36e96b430e64318e9dafa862b5e5d0cfff993c2c3f0f74f4d9ac99d495ac47019f13bfcfd2e64680359ac859c6cdc1fc77345ef177d5df86b2763fd99b5517332919c0971f09b79b917c4677a490615c951fcf07fdef8a9553296799b20df96cdce3b3c480354e88b83b6ae3d69778986043d79559c73dcac2af593b613cb754c15ae37d7ad2d1efb2c17cc6e449ce57e186c0c314c3c2cd09ee5de8314a1794df6497eb9748097788f4c447570d2a421ed1d0bbb54de04530d0bbc8a89fe2d43fea16365effbec941be8a8fb64d5600210d51a2c4cc5eda3d3cba0250a3dfbbe7d5a9855760b88de50615c58970183af22089a3c9a805353a19a3bfb1bfd8f2e10b98000bd1be6a7db4ae1259de399897f4c1e34d489dfe2e51be265159932135762bd101bb9a0810af9d9eacfe81c11a6f408dd816eedc22cb5360badbdaefe9fdaa1dc1871210a6e12a900d3ab75e827b50c7f079bf781d6f +MD = b1542439b3590f2e43fa30baaee0ed11a9c46bab + +Len = 30608 +Msg = caa5cc5d0d87680eafc29429bac55c9e33167d485789c7c124b5c57a1ba8a00b45da41c77460b694cb62d7fa80cf2979e14f0220957aee5b2547520dbbc74fde2913e9d72c83692cf220ff58db5cac6f7d015fb0ea685f5a35ebe8c2329c19a17e380eb2bf56497d2de4566d52d4ae290d13dd21ddbbe0675c89d1c10a91c6fc4c30f683b5431d30839622616da0f74f9c6dc29bf7db3a2aa3095333ca0d1d969ce5e97094b0afecfd1fac5cb4264f882ff75645be30354a1153b740fb78e718753e31a1e607c55aa2653c85b0cf7e7cd099e348bc239870af50450f2439ec29e023153f32af28217a511a04e8034bd4863bafcc791a2d4384e644c9cdbaf472e47cdc720110a0ea8dcb8d02e42b80385ac503f87c7eba6c98fefe957f62c79b8931cf61da92f45de4bcdea72dade34f521f27f44db80892f381b99cc0992c4bd72b3635459dee21860a561a4af33dc2793163e9742edf5e9e55be051bc7ed2ad7505915ca9954df7b9f3b84c3635538d4e4ffff794a0678a06455f91554d0e190897f2af2eeef3ecc61d50c2167f55a6d1e425de57347870194c5a038a99e180abff19c440487e7803a6edbeb66e3d04bc8762c40106833c9cf58210b2c1e764ed8f8924944e4819f114c18a9c8e84176cbe193108b322601fc54a516461aa463beda348714cdb532cdb8ece4f4cc56f70dcbbbdf4b6d05b1030253e25f584a5157dfab88dd0b2b3f58fa7f225457b6d5787ecb34b8e17bdfccaa54f6e0a20f218d511fd408678ad1995af8ee4f510918f341ec983a552e953e94cfda2fbe9bda4676b7f1fba67bed78207fcd4d81f9c9655b46923993c6da4307ed17b67497846c989c692093a59ddd933e49b6b02ceeb81500aa1d61ecb7c24dd634dc8eab28e6fdf6c4def5b1e8b0fc5ae9f3a64a92d3b743684e884832a4acb1b908d27ecd9cedec889c9346d7d9a3fe356a2bfcba9e89365535d08156cf6da62fa40ab97b76b2a63fc4360d7041d050b68407ea7001d202f838003f282cd7df1d17fc033a5c934d70bda6adbdcecb78f3a901bbbbe4dcced9c0e22cb2a334810bc971051336d709a4efabcfc669db9f7542e317a42fedc381363ceefb1dcab7812230670decc70162c20d1b92fb4aedc2b573a831ca4e097700d72d0b80e3a7088a03d03166ab5e329e9338296a5e89646c7a136c9d47c743887b92ebb6c5792769b0e8868dcb479ceb07cf93a0609ce3cdbf035d911f256e34efc4a2a5b8566727005814476ee529112f87d883974dc5420c1e0b8c204c7f6efd6c383706664f2cbbc8e37ddd606078d30901fd4dc59432270c7e779064fe9d6b32b652f5d067e0a9dffc1861dfca88bdfd16f5c82bd705d976be3bb894742802bd23e0cfbd37ac914666fe408aedaab4091d5252a81722ea04d4bee00568798ab687c8da5448f63da52919c28a53447fd820fe3164dbf3225dc7ea50df62f7cbc4eaf25fbe212773a34e4f310784c0e71026e0ad86abdf492a9fa64f49ea0a8d905546a5224aa8fce8db8ad3280784b45a38e010370f4e261264d9266b891a97c2cfacf6a94ce0a01ddbb1f21663faae5d5de6a09e90a882be1f6d1e6ec68fb201610c987aae3626ea53acd4f923889cc29ddaa7e4b55625d5d8497d7a2ad2a6f5124ed4bff81458f64d63c1f8cc98483000a46b3007bed70095558bb63c493b47ea5af29db3e1fcead0be033be89178508f2d35ab0d4960e76079924b845d389ff1183a3e6604db6de5a5e1ebfedbf5ca515b4c7c4f5f8731409dd8618a7667a43071f4ca99e7bd289300a23097de87454f17facd556915873ea9a61ed7fd8effae4b6768d4f16ac2e2b78f313a01f5698f4a85c3a8cdd390608544adf25876587390dc41a08aa9e4dab2f0176faf09df1bda3688cff586f5b01afa3463f1e75588269b7d841a433684d90d09bf4d894ffbb155445247f95d364e10dcb32fa9a1f4f7ec430909015fe7152d30b0443e6035b52a1eba2df371f90acdcc697983e2bfe917bbb5c0a9080b4c99b4ccfcf0bbd3d0fc3f8d0e3bd901377b2d0d393ec1f2e6630f13a503d8f9679abc9bdd6708dce915cf56529a3c56bb602627d6a2e594d51a64a821d978b84f7670a4506aee59e7bbf59a60d8420180c4e040b877f7ad9d82e5fe9df18f50ea75f96fbbc31551b437d9e3a2bd94096cf182df47859e4628e3b79c7f14c6ca22e17f84873826cc37d1a4b87f10da76692e358deb9483655d87050a300ac52dde00296c1d92c9d358d07ea25f9bbb505ec221d10c6b4d1524b5f5d1199b3381061c20aee398a56cff7e8e28aa24e0a032f66d3312d3a55b65b4af78a18fb9cf817b8cd2431463a21421fdd2c974f16ecf12423b6594334108cd5c872fadfe1e39659460a4ccaa7a7f02f228225395c01c5ec7726d769ecef64824862dbeab76152460e16e8a23fe286996b31e8974a00121255f92418f0a156d2efe028a67dffdff19dd08147635f89d11fa25dd371566a5838b3dbcadfe4e83a37716d9db62d93de7dadc324a27d5e88a85a018862733300a7cd4b0a1b18ad4aa77d173ae069127f16251ae47dda89029ddf50208df500be1bcc1e5122bafa66c889b2089d40e0560fccf4f165e5ade18898e636644a67e32d36a23a975a6421131dca714d2361f5b31bedc5fb2d11a7c11d103485f1bd0224739320e9658f0c0fbfcd1f60af2bc0b87871ec9e2f78c80fe28aa5436984bdba294d9e896acf8a16c6366d8842b25988890ddfdf5b37c49d7fa1f35d40635856be5e1df7e89a1dd0e792e6147c7a329bc42e0a3f3ec310224af2b913e4bd7472b93139c55d9349c69a7f03a5bb07ce6aa05f162e58cf4d16eaf96117e51794a690635c72383f9050353760ac8ccf8f8da42d6e2d27a0dde3b61285c9afe63b6ada60f08f16f384166e7867a96056187d45f58ccc29ec452162fa81b9d3cdcb280db6b05c68539771ac9e932ce41fdba21c63fc8bde060558480e0f58cf22d66680d0f69aaad43d0a56367d9786a16ba48dd537dcc282b0e0fbd969371089ffbefa4c4daa5cfa074911bc7179a67f2afd10e5c94f65e6ba63e4c939c536578999d085200c0d3968a665bd3963e20d9c045c021b4446a694599969fb93bf30067f9a1818502a16e3baa8a51fb6b7d15152a5a6b86bc346d11a90381923099818e8bd8190e742170aee70f0af12a66edd70b4602b269a5bf35f5fc03ce3a3f4136db13e1461c3ce30ca454c61e82c3a82e6debaedf50a3a6d706e7eb1561cd898572bba2d204d8117c6ac04c2a7b7c8f41dab137b57b176c20622d0211ae2ca1a6d739245d34de4027c0bb66be1d79ea39d90064def1ea5737933710682842d1bf92f32f8db237b9342eadda8271a3013df340feffba02b044216cddc2d8f861f92c538b0a88c9c4cc3cfe711d7ee01b76aed9cdc3df49be71923330c8c437987b2cc0ff7dbe7ea8177317f3384c19810c953499cf67a6cbe470f6d321f6e5c06e1aa2558e5a3daf3c5a5e287ae4377c262db72ace5a001dc5421c8c7676eb1ff97f6053e466ed1f647a3cd88c4d2052ec00cb4866c041fd3d910d246f4a32fd45e164c228e97841b6591aca158fbe4b8795d9ba3fa250b374e43063b37ca1a479cb156901ecc55d5b815ec7beb3f7b11f7447490207158791c3ef10eb141f5bbec2db121876bcbb7a7a72972fc0b5cadb267ebd57f878c1bcb6b1f5be1896693c501e83148f45a23ccabc020fbedfe0e432e7dee57c61a81f46dfd8d592ed171afc46859f3f485cc9fba6d006b65d396220e973559bb885dffadf82d7890cad814ebbe05e8fad2f489596c8beaf171d7c79eb464e5d65a0275b1abb6d06db7398cfe65cfb865c64e11ef6b3dcb1f4d65ac3571d79cb50411df0f84a3f1041b088062dc11e2d3e42be202d590bc4dfab258994c17eec62b0e941e2f9f4af29ae787cf9d66e8a39130422a382f1f1bde305500afa04c98134b4d63e8e35eb78b391b7b36494a8361ddeadc0f6363f77c721a2218fb3689617a63875d2a9cd1708fa41c133378c1eaa7248ec7c83b7f59fa206414a35d38a9fe6eef08df95ceef5dca28d0b0040d700e87b8fde805f1fb3af05d2f12f1243159d801687cca1e5c15f607db497cb4b6769ce11e2d441dd4a71263c4d4c2babc1f2774e87cba2e5b6aa05fbf5a33560291dcada51276518ad10f1e7263128a9ea0e5902579e69d41ae6196e98cd86008d2bf652f223d1b625b3ee3c44891024d918b199bdecfe9c363a223e63bcc712dabbdae28f6e8fa1f882a6a16efaec06d739047b825d672352cfaad21f18007e59f7fff0eeb0a7bf6ea6a07f6e2cc3362a99dc0f6e9aae53b6cd3894948b372c5205ece6d8921ffad147643f0ac99d9c1a5fc0bf484bdb12a95b55eb89bb76040c0d292a15bb0139678c7b470b768320f1b439f3da18f44a74a1873fc750c4edd1383f266dd555647a9e6c0138dd7baaf5bfce11eaa703e260c859f917f32ad2e7adb540a885216250a5bfd35ba6902270a9078241a30fc2b3f8507f3f4cae98979513e28d756f1d31c8fd273a79c770a8996caea7b221d2b558f63a07025b282918e273e64d467c672fad649ffc2a7ce6b886fde37c40fab011d29239be366ae55da95b79b4af67390357f250dac02e712ddcd8bfaa7422ea4a6cf09b274946138df0010f53b0c6ee6c833915b9916f9321f6a501e4c532ac2c4dbaf7e69ba5facf40cf6fd25481cf91baa1b842a62592bc5dcd72d13c123edffc5a13a2346de34c1f2c63d8a081249b8392ff1c063ab72598b9da1ae0aae88a0136b7041d88162c1880b10d9eac35b16774b4efb9944a852fd00167bae2f256e5b8adb35ddcdb96b034221b55eb49fcedaf9d65c81d9303ab79ae5fd0a3a36a2f46bc58fc537ab271ae7ea7cd27a9a49dab83243abbd9c8931eabaa2cd345ef674aab9b03d43aa9e2578d5c0f469ed0ffd02dd4175866fc6f26bef1d65c1e0c162b4323794665a38b9716df22326ea89c87651e68db80c5c8f9b0dcd42477eac3514c99669341c7f5d7e3db0ed16155fb36f1aa342c704e24ff4812301597b0f6248ea4d2a2173ea77dbaf6dc0dc1ffa4479a1f83337ebd0ea0503cf216c887370cd0edc65b2e3029f364d893ccd4cd202028255dd8f13b0b448e01200e50970f71dc1c49a6d0c4049fa92a3bf8e4e8f62b6366cb0313efa553cc0ac4e7780705bb78d8646b4322bfeb5094dd783778aece1387d49c2a026335d0fee5888800a2526dc91e92d073e23e23bd7f3415a4d173ff33818b7f9bcd5262868cd9c8a96c9e82987f03bfdff6ffe84e2c14c894e681f010d9b85ae36c124c4ac0c27f2bed0881ed8fa7588d829868eee90097717560aec6e40b0202c7de55f1892b +MD = 18de122bf588dc3d1eca78661673fa8d8acf254e + +Len = 31400 +Msg = 141fd0b3d111b510ddcb31dee887a3d463461a95ef72687a15c17892375ce1e7c641ba03b6e5b1b32f1e570b8641beaa6b87464064b6b44d7afd842b311f814ebed492cb756cd71781b5f411d71fad436d1eb465a6d0be2311e0dc2154aa093b639fff11f6eb50c33956b1f9c5689927cfd10b0f9f08af874431287c8744a2371d6caadf21ad433fc1ca36ca3766a9dcfb69f34336a5affe7aba0f44b13674c954013b3cdef9d9147fd92a8c145f06ec57ae160b53f1e5121c413a82bcc9a67970275931151639c9dd4a3648469cd7df4d67196ede327a4a908f513e8f4260cfd9a6acc4ae4d8de641e70105b465453b435ea775c0b1962e3f6cfb7e12eccc54f846ddff91e6faf4157634cb4602788aa3596626dfb65f47919fe04c2d0e0f8f33cf94eaa629aa7ac0c076a2e4ba9753d421fe8b2488001ceff2a9afc8ef5408f308788cd65dc500aa8d709376d6cb1f3e7e18ac77719f36bf2bfeb0cbd8c148a1ba32ed07cc720e3ba5c9a5e49e3b7549375c8fc1b7651b6a1386551e117ed6a3ad6a1522bcda2ddbcf2ae1165a10dd5d16713ee8a379555972eaa8aae2b43a63a9c70d107625e4f2d53b4df55271dfe2e100c1d67d036cf310d2b155938bfd4776f1dcb7427abce87da3f467ce87044061b01e718d2de69fb4e477086b2aa6b9db918a0167013c25900bdb551579d3df5e2a5fa31a1d4dc728cb02acb3babd20a24f20d52fe4ec11d51a0ca87070d528a0158c536efb28d2322d5a27b462cbe491d2a51ae048541516798e4627949081ee1aab69cff000289bb38863b34b576c71c321bac357fd9719cf6919820c8e5311e1c6cc86245c312a049346fb9ce92209c99c9c20396e01a7c5a508c8015707d211e466dbbec454a9c983bad37e096d238d1fa83f162fb988034bfa439a7103f7520e1e15e6c0fcdea960a6821940b585b6b1c66715c929843063d9390066b1484e4bdc7ec6d98e934d33f151941563f8ed5bdee25ec3b763f4f38cf35abe788faaa3885c8396738e5c0485881811dd44da24d8f61aa5cdecf905fbb9d1ffbf92111e0bf8488013987fd9496fccba8c3124149cec71f8d2e8e4a00ed38db3f01a29c54b9a3b1dd6785ebc254dd99bd8877433130c8a422e2060cdad88b56172ef9a9f318a84f825f8a0b4016c66392a0d718a239d8e0e48591393c0217292add90db4a50f4c9666deedc9c5129c1ee88cc420b5e9a4e18a5ea5fa2fe6ebcd09a02a0d9072bb8103f3ef045a88a3d17ccd14fdb236f5455bf6bf0ae21f499aee0b98b1d8fcf84062ff4b6ca616a2da4c950a2a00cda9c123e809ccc114b381c4e400a867f22c5bedcaac0a9203c1c2c2af4eae89f6e7de4bfd2a47b50d520bf3f109fb239f7e5a0a1bb8e406992a0f44e2879133f8d72239fdcb83a4514dbfe3fb5cb1f64a17c623bb1705eb1e024c3cf55ddce81da21756b093897829cd26fcc9a0d2c73a1e279f73727227db74fe11b17a968fab70450add2b6017ddfac6a7257e677db8bc03e6097134a418a5af2bde83c710eb6833be4e3a106bb5fb2a4ad59e77020c19e46045bb54481dc0e6f24423775325b369d8c969a25af8f9d74fa2a70a3d7e5c5175f1f9dafd31eb2cceaa00af3fa1786fc217601dcef01b571c5442281656aed38dd3d2ccaa9d4e0827d9c276bea6e0cee200c689aee38a301bb316da75db36f110b5ef3437aa1302659a12d5b87d130da24b43efe21a6dedb286cc2742561d33665df7198b9d5fa2f0b398d3136f38b469c2815651dded134b970b18650f8a21f793938490c15d7130ecfb78b8c2784b9e2b25c6e574322c4dac7cb4c74ea6442b216b7c2d5d32f68e0fe3cc8fbefa5bab4fda47852663c0208ec6034e5b98236bce26094ab809b970e2fad880ade76bf7f646e2193ca9552c05920de37d89461d616d33d01b08433f2fe5a374d56604eae7119e8afe2b75d8d988db6ffea136aba3e703a5ce571b64bc4f355180a0adecece484beb412a78ed14f74d824077a7b5c3d80b2191fc94551de9701f4bcee65cb679a9ea68574b6b690e00838e49af75316b3df4488d64cb83ad06a79e34fbd4d41ea121cad62b650f228e5815f1f85521ba21596b9c9e0b80ce876593d595c3a1a7c035db1fbf7671e535949a1908f1ff4573a58db2a6818fce80cdaf193ab5a9c5657b2bac7e1c3bb694bd6d2757c8348da37d315824ea1b1d71346288610756d82f863f04ddd2b7273a2721857b446bf31f54c9058f91bd4bd75e309b8f4523508ccb87a155169eb7748639ebc9f3002665b0e7334d14e0ca319fabdb3c0ba9deebdf881a7a643cd8024f18a2fa509b9815060e79e3e010290e7d26bffda754c3eb26d2c8c4582c1931e6605352e988c88be89141fa8fe5e8cc7b53c22ac4bec00925da44b94ee6eba1e083658a2a621858cd2213e770bc79fa1e958a69c04223a4711106cfd4e7dfc0c21461f69fb237fa283378413f1e5d25db7e613146798f6b8d19977e76b9562d0f75c12eb5f387fe8e47d78e577612ce3670eef7b3df63bcde567f5ba0e5ff253d2a1ba909a088c463c1ca25367e3b51b41fac4394ee3126e94a16eddfd82b67bfc3d9ec1733caea4d53b8ac6881276ee8dcf19b662088183277068ba01a7b631bc5747e4b47cedeaf503b9a7a197764292b87759410d93f4e6fb6db8e176f95e59173b63236f5200e59cb65c7b19be0199db658cb2994da9196b043f679687e81ca604a489bee4ceed2d094fde415411ea606bb77f54b98b08e7b6b759b068b94d2c2a11ad11ac3c54de3be691b7425ccd7011406ee8de80fb980988806ba5b734d03310590eb03364d9d38b5e2290c88a33e09048fac47139a5871ba47044cc18bba90b5360fa99634359a50b2b443f68d05f0fd43574470b37b8d68d6650df4315136964ad92589a47559c617968a8b06f1725dc3ef5e8b976232202f6ced7fb05fa92549e7e56510a50d728b503eaab3a8e3b26c04f3e8b895068ccc8c89e89b3e5eeebdac87dd0b7d2c028861eef9e574eb77c618b30c899c70eb383451b35485ce5f10a78b35e7461be2895c09ed4eedf03a4c9b0a5bacd117e7fd04e3646ece7df2dd594e244698739f289f1df9428c78566a1c687a74eb51ef856ead706c60f4468e426f1cbc0cb994c0bb99a252c90a78c91d6bdd8433b58e6be21e6bbff5b7c6ade35c8389eb547ffc321b7d023c1d0dc40e62f95d52c9310affb4baebe54effb6cca4fd62dcea9d358301fdd35e367205701c5262c0e363fd281ee272c8005e336ec6eec959d288f73efb894897dd61e7d2c67d26f6cab3bcfbab86d716927e9e3a30dc1feab2dfdbb646b3c4817849f5b71fde2c7cb59cc4daf8fcab497bbd71bf7149e8f7e1ee3d999211f993ad96a99d76f9e5bb5a8baf4665d841d912b7388f16bcb70a0640a7496c083a56c3d49de66a54e54b100cc6de908e4d6dfdd86d098fa90ca99683a356131b194381802d227873ad948c9cb6040793204093bd79bf5aa35c5ef913ac3045df18d23d25e1e21feaa13006b80747199b6d297ab30920e6101882c46d4c8872b8bb8b7d3256a5df0e529644eb052864fb8661297575ced083d3cd7f1cee9f082c63e7b841f5de1473444f9db26a286827fe8026615a29a88320879f9f1d0494ceb47f74b13a0b7e9df8c4978a90b7a1c5481ed80320c1bc7251599c605259a7042fab491cbdbe7c02e28db8e003569047f585d4d76417aaf618abfc0d28fe9d6138039bf0db577b268413786f4c95b224897d935a9eabf272d90744f1fb74066a6010e3ba2d671a9d7fee6c64d6f595ef663eaa092aef016d04f3edbb645a60842a4bc6f52e7dc8cc1886fb8d3ce69a0d3e716f6fa36176693eea8cc5de024a43191cac1e490c1436f065ac34d8f96d02548e89fa92a3bfebe96378add30c022b9f1c09b227827b529a1304e8559e5d635b1e503673165c6996e757dfede846a23ec2764d24816cc378177c341d5609a4b48978afcf39ca66b9fe90d87927864b7a98684bda7976fe0cdba894aab0e05af35859d2f19e8867e501ba342f3a3f9bc516563ab3eb0866dae7e086882f7fda8a137a2c94b514e18aa94a5f5aa0d0f7c0b4c6964b56bfa264b4da86202246b7fb436039330e0e682d5db7d695fbe8f3d00c4feafb3d0b153cdaed102d49c387d95092652719c3604f8789166b9bf624857548a55e0e6943c5b2aeb0ea0674ae76d3875d1b58e27e53bf44bb460176ee53985751fe5b58b291e485e4f0d8e8b08634c56d7a5bc9f6fc7d6121afdce9d5bcede27d26a457f613d90928dc418e227a0cc332be93087e8c4a64d6138edd6f43de70839169f562de18af0906d0d368b4b40739628f2c8995aed6651b87a00f6af28811b92cafad532bfde1faf76717d8d307ee00a0848caaf31c4b2268005aa4b2af83f85ce51a157b6c504325a7a458e25bcd1397cf1c3eefdcf4c2904cc583a74d66e98b445d879f70e059fc1392b75a795305a56aacb3dd6efe76a103d48a38e84707383bdc4bf0b1feb9eb396776b3c71c7189c5a2bc4468c4a90ab40c1af01680dbd43a0ab5279627dd6397970976eb85c1858eb2cadd40e3e44debd0d8654ec0d1ffcd8d659c93d85f05aca5f22c4d2b8059144141d09dd8b2eb09c724f0f773740b74c8dfd841ac9931f718c33c627a385504d2b3e6b61f9f529c53933bb7054c97ce41866316013688e563ff3fd1fe5409ceebb3884034f425121a959df412c615188bebb58772917b262c089f02345e07d0f0a33dc2957bc31960ce9035187b14020c82581c7d347907b561e28998c0afb986156f93dd70cd00da80daf082d6050947ecb35b8dba0328a4bda2beb82681f7108c965a598d9366fc7eb6ccee61789cc28d6fbb208cc9f78e5e4837fefa2f08347b5a8cb62cc6ca2afabc10b797ef4b10e6d5c1d2170df2b6d65b7bf9b6076b466424815fd8d7990a8763727af3c982978b9df61ef37fb8d2a8450124e49baedac97cfed30c3651ffc74558a50fa7e1dade10ce63ac6fa85666ad5dfcf05c31763ddc5bac4163939f1cca39d245fac76f60e6b14c9c8e4fa673ece90e73d9a18d13bb0e38230fcc5d1a7a9c6f2142c1a9b68855466e3c1d67729c48c5e9945da3eda1ad22fb6b6abe22cf06e84c006f3e416e10cd7bf9a00dc533e3bfcc0ce43f4e18aee96536fd36d84fffea00c40e8184107a6e5057660dee3c405885b3c3d3a79899f7ead3025b9d65edc0fa0e4e081108088585d5edec702de52cc1198af57ca9e4dae6c0089104b96729823f9c565acd31cf86e5962ddd7158a8e8be98094fb5160ef39e8e7b80b2e27053e887e0d3c88c88de16fd46a8bf0159770379a39352a4009bcef27fa3dae621d9898f3c1e928f6de5da81cb445f85baf698be48e9fb256c49c1d311e099e8da7da310cc9db3a0db48b0d22042eb3c59d1eec46da627008e8817aed6c98870f6cab5bb16c394675d713a5cfa16eabb92b3662a867a5ecbf3c150f432c12f15034b41fcaf32bd4950f9c7909 +MD = e4ae28261f24a10355fd1aa1c2554592a331ceda + +Len = 32192 +Msg = b85e29875f6e2a2ac2a2b8475376eaecfaff0f76ad2fe6fa415512e480e3c8de7b74cbf4220d9af511a3e71cadde4cef701d3a6881ba3253888f37f7c0b983f84e9b797cd126db8d3a583dbfde03b912c9d0e5195583025cfc8176fc6b8f7d95d7dc1b68944255bae4c9a0770d6d9a1bae21f8d25213bfde4632b83aa8ee1d7dc13e990095e87043b7fdf98d62a255d3c6165bdba0f1d2a20daae3faa05ccd77b2cadb8cf9a094f25dfc3149062c5402babaf67c66a5a16dfaf2e0847a63f54d5287c954ebf3298d7bce2ef32193fd703112b1fdcdb8960ab51198205f8bfbc54b7d4ca0916797ddbc7cdad3da5dbae4d42875a5fcb1183fe50ff216775b48a842b44ab7138646aac50c1c315a14f2284b0328be1b188ed632f5d5ade95b44bde235ace29ad89ebc4189db54c93f0c023dabb48e5476629546ca2b2ede1357ced0075b694ee408dad6f801854e67723b5229ff5ecd52fb45c696dbe17d0ceaa1b7323e945632eace2c63750c11138b9b3384f375ae34c1ae5d61cd0eefcd63003dbf3caada4aad5eecd11f313bcbbfe988c4771d20a41c97b134e9fd5bde2cb10ab53ff504b5ba53be4be73cf41876eff8f2729c4b2b74c96a1617f6eac8ab7cc71c2ebbfafa787449d8b574638018732c14ce3b5650310d31103f40c4124a2b1cfcf045e4a14e8b36807122b18d0d3ecc357242699cbb29ae29492410447084b05e6fdbeb32a65e2c4b038e05c7be187f5a46f9ae967be588691deaf7e784512c4992c53736e7b7d442530088b591c8ed8d32a74ac6d70b67d8a3daa082f05837c6414aef35785cd66c4ac062dfef18bfd51e9668b43861f57fc43b339d1b627adc64b33bb5c315d9d2ce15bacd41ce9d3bf20c2ee907b1d7656657dac06d369d93e44844402fac857ac849b808edb32ec59652c4ecaac1b8927274bb744e9e47f3a751325d24e7846e21a286175d8f1b7df2b053458b593e0fd1dbfe402660200596162d950a907bb6bf694982f72a0b6bef6d037d104311e369d4ccad5d45d1d099df5c6e4a6d15588ce52cd2254ba79673d3fb1ba346da1624a64d425b15025c99f3e7724a47f85e6f60548e4ebc9706672864a7ab2941b1e99ba88789985ab27c9bf72973e5cccf4f20ec3ed94382c3b4b565a990b5edbb9ff906044d9582d92c1fb41a2d113ab4166e1a6a30a911d640c227aab9b2873c30098e4210d622d98fc745cde191e914ab92069bbab5eb46f597d23290e8b63d831369c83b21e1bb8fdad2caf52e83f7f6d4da58df31b81bba7b8dc77c1e23c4805fbe1e343f678613a2859ad3b0ad66df7cbb2a07e3225d76b880f3e51e76dc0f34b6cd65f85d42026584c4e1df11674ed1d3989a95cf151394d43d33ae568a18dc795c34136bf8466cf7d0898357052b1c4a2a000d674b7858b12dcf976bd8839d2e530b5a38afc6ff0746326327455ea54868a21493058d4b3e4c1fa05ecd38c0fd3b51936d6f6a66dbaf43482731cfb4f4dbe671fb4d3ab7a4218c93d771208c0f9a6e87b1401ae89d9326fa02d06791760a35ee462a67e20a357f377dcd214b8cfbcafead2bbece727842415e2a0c84f77df8511ca5fc15990e5e53f9e824439ce3cdc009373e6184e8ffe5e448a7d49fbd956327c4e198793692b0f2cb12be65dcdf946c6d82e6fb6ac5ad3b3121ca955176ec0c91ffb3d1358416117cd102126d68437ed373a8ff87fc620bed60ae02c101b476143caec9919b4cfe054b57c91fd096e874f7eeb6c50cccfe854ec80d96a0820b5481d08bd43e1c606d6607b2787f525255f7ff4baf5eb3ba00d25fdf57ba1f7359b7633c85d74ce0bd0c59f702dd4263805c24e4ca58dfe766d3bc9f8cb654572bc4ad072dcda525fc2494bd45532dc4fc0ca5aaa063182ec03b2876befee75fd392f7125388efd83296012fc847da1dd1f1cac4b8e8253715f1e98c74f9a032580788857f70f2a0684ae8721322121508f2db5a9a4dcfa96ddd4708360f4979c20daa893aed7526a52791b1ae4d9d54a7f61f96cffcde2cd0e78c128ca8a8db198ba3460a674211f1174312222e4383b9e7df9ede5b1a6a47f7fed4ff2c87016668bce37a461f0a540247bdf52fcc4a43ac639a4fd44a08d9f5e7731603ac92b18e3d880ff2d5b9d7cee6dbb2b7ff504f2df3b3abcd38b18fc98d1a5a96df3700e46e5f53d32cc581646594de2da53ee452d71078b0aa0b6f5b39ef514bea985d52968dcd51ebd75bac0f0f03fb86bb0b0356db41e469be8493321a858b945ccfc0ff3d05d5dc966b8e2b75a8886a70cb28b9398bd13d73d35ac2c47ebfa42c5f16ef9584c5c5abbbf300ed563c19042ca94954e0dfedd266962f15c24de3af133cafbdd18b6fbd53c1d7a0947f5a20366e4b54c77643824431c234db9f198ef51b87de748da27539e2f8b6eab9f76cf25f0a61c9fe052c7511c34a511b0d700d99be20f635257b773cab56e052b68f6765cda16ddffc7702207a7eaa2b89fe619f9eaadeeac27615b938a8ffb260329d66db3f3b81f00cf2442ef9703653e0fc166da5b4133f0e1940e6d5ce42bdfc9d4b7d61bb4da9924d6729e22aa434bde3e47438011a65ec8db8ff05d66894966efdfb3076a9eeb21b70b16261dcf43d20f3fb8c4b66fcb8780bc95f9d8daea718639dd3f3fe881465470fa19c485b09b9294ac81d5fcc19e3208d0cad1ad4d8a464ab72bab5405f33d48bc6634f31c9b970a815fc6d9cb8d5df92348e75ccd119ea6c375434dc3b8bff6cfa3e593d2425af5f9b72f8363d563022fdc6085e397fdc294848e5245277b0fc64b6ce48c307ceb5810668604f6efb8392df3a54b9df212acd1e2fe249fecf812d52171a4e66b4f3f04125e3962628fe19617275f840a3b7ef5f79dccb2844447c9b9a7b6c4b4b600fa99787bc859fdbbbd21a889faa4918d5922ddb7efef78d7a18c033c5bd7a4607c82713669449629fbc99565525fb94a93fb2a70a87d0a44e51f10902c429ebff263b513e5a0cdbeea657a7c3baa17490ee700818ccb8d022ce96c7cb68409820493d07ecdfd18dcf19bc4290702401b428cfc650d3955a1b181533c7b2a89592bb93fe182b81c16b9c30f165506a803d7437a859a6518a63b6d8169fa9472a7c04a7fe694702bfe9b71b7aea605c3c535b1078dc4dd2a822304537fb56069f06aadfcf873a3ecf72f2e5a6c6aae27c1c64c2fc80ce02fc7f0fc66081bfcd3b5a37a5381b0c1b392ed6f63da236e587c317b5fdee33c7cea3d9c257dcee85489d336002cdc5834444eab607250a4ba66efc5142cd840b65b619a1e5b2eb140cfa2477f5446e5d39ddb68eccf830fe21469cff95c6c7b50adf54cad2acbc64d0979454d9290f916020c3e453c2b0e440727e25bc8106ad054614a7e6716b5cdb9c0a5e7623ae0601369821652c90e74b1a2a2d80a548db9e14e09fe9aa00e377320ffd94db55a66446beaecadedaee8968297da9da96271d71411aa2fe81e3ea812a99faf80b58d179bbf14a7f96e04382027fffcaf779c984be80da16f8437db0e39a7123d9048ff71954acb7caa7c1903d994a1b73b9eb76df3a59996ceb78e7c269c104c592e7e75f3eba30802a4bbb6335517512cfcb6e2caee730e6c22350506cb242daeb217116173a8fbf51292afbbadd81dda3b1952e454c836db2c510140c0b861df585bfc546f57f9004a2078d90b6e6db1de5136c674f3909a3a85296b1967798995af6f435b3a6f92bff77a11fa44d1426ae0f6e7dbafac27b123c5fc419be52c0ea412c4b3cac05ae89a4c0ce6f5e91a456b1bded5370a1234cf6f6ab5d0253507bc6f3f0573ab97585b67107dec059812323e021e341ad839ea9e3d02aeca43356add48ccef81f693ed53d32ba1c74a35e8a5f7f3115ef834f7daf9948244c4fc31f5487678d3e70fb27abb5cb19ebf44e11c37107956d0ca999e1707e51538e0944fd4aeba21e7303d743f9d960c55a3ddd935e2b683104f22601bc951bc2d67243563b21dec85b9f0b8d66ac980abf711957ae66374355734b98e5562ca0114444e7c3d3ea430e17ec12650b6ac30a33eb98c880aaa9e574312d538629f526c871394bc76d9776b3a1595cc07ef723cb7bdc1641686d9e3dff486df0bdc9fd46f0d339c610cd7abb52eab4917baef281f2aeff711a976615de719d5b8e257e06e93df6987bec0176294ed6470af05e9d7893ebd7672d2746f6314b8e4410914f8500eb0555fcf52d4b0c28aad2c651663415423cf839c8166e0fdd5288931e6beba37fd546063d28e3ac14817c37b3254fbb6d6874c231ce6f94bc6f02b50da045ae19cff810c1af17b70196af4c6a23f10dd22384d14ab5204650ad597e4637b8aa23bd1025690a0fb457af140c5fa54094da35d06dfb15aab001d435f6b1776e1e0465394a1d80f42b7d95527f7af667d7ed65ff9e2c34345738ab402637aa8f92248f1989c55aeea4dd1012ada45d8c5f747cba6cc55ce7c55bfb1f15be16428eeb0558e949e124a8dee7fc9fc321d8b2d543a8e0aed3eb81d48c7dcb2f05b09bc18e9f73915abfbee8e4b75cc08b725a7a7f7201cfe167130926005173bd01400ef1962d8510e66f63cdecec84e382dfc9fbbfd810d08304649150ae70875c063af7e4210e4ac242b76b4258f67132c72c7e386b5ae669da4b9416ea10aae974ad683157124f7bbf4d8662a7fd7ca89c0acf85c4936d3e2028f9fa0e3a70d212cf0c27d57a68386e8be6f3e1834e0ce5cbb74deba5ab2d5b6286a321d61f3c6809aa6ca52fdd21d8da529e0f6f2d872bd6fe38e676e95b156104ba2bcb0051ffc10ca8cf18f66084a3930b37a96241f5956cf0bff06ef3d58d3ae635035b395e60f884591cfb1afa4c71e164183461cb6fc81a7efa841b244ef2d04565781c0d4f37a74d25337ac33fb4c99ba6ed0f35ccdc61297b71fb890cf22066d99e2195f591bbb21ae7a566e2246ae63ad475bc146e6aca5d7ebd8c2f037d9d4716707db9cd6591e25fc66b9f896d4cbc30b8e7b047e06887f386b51fed8ff49729324d05b54ff167e3035bddaa79d6154a033f062f690ce118818d4478ff72b11c8f8e400f21da90bb84bd0350378a2b6a7c4b7feeadbd5334d39b076c751f7e3aaec7d1a48255452e72197b434e72e7d74b93834b5683c591a767ce909804e4cab880223c1b686e85f5f8ac4b679631db999f7b0f09661f75237a02ad1128cc13d4419a9f941ef40934e0fe302afcf2bc8ef8cd02706f49296f5b0c8b87941f5e2b93a194947cbdff585cd9b93eae10c35125e3ec33a52bf5b49252f2a34ec3f3e5fd9fe4c38cb2b288f1a5b04cb475380bae2495fa11ae201aa83eaa0d60a21a2908fc57cb55bb69ed29cadbfb140763e31cf7c56cb9b8f4c824377a6cd1a31b1f3a21b551dfc16baf8bb002f4d8b08b02f5c64331a732b7e78ea42c69aaad3df01e74c60033aa01f59fc0efdf0857fa8fc4f8d8f2e305b29e6fef86abf2aacac4395e527d586073e7ee606963aae4f6b30ef54c5773172d164e7f51dbb18108c21548207356c909affff93728c83ec8965d24670761527076b3bc54a0f01a40133998f98836cf0b725af422d7694fb85f38eff0abb59dc2e7260e59a3b65db9de2db8a564ff59c05b88b7f21896fe0d3728bdb1ea75df6d9130dd26 +MD = 290d124e77abc911e4be375232ff1798c4b48cb0 + +Len = 32984 +Msg = ff5be1eca7d45eff12e9645ddf05c1735b973bb8b06f6c32596bd13cd9541d86ad03d35d7fc8132d9c0cb444a83494d891c92c4cc1d668af9892b586193f5bcbe3520d3563d4beba4908b753384ee7ffc2477a0a933aad8fecb7e03c547aec558a91b8fbbdc207afff279412f81b61eed75a4c7a8e63e3da3f2179e6f1cb7a2c8809fb38f4589513a8af74094e63abafb948ca251b19b3997819a90c5afbaa59c7ffff73705f11ee2be97ec1a3ed6c4a4e591e92a023c5d37fe79837f6d226e32dbeeb34999e2248701ddbc160824dc580d76d49874ac0903cd36dee2d1796d2a48de804d7df712a5f93b291ebeaf62a3608e2d336564cd8972551ba6794a12f13b31e6992e8a69be0922cbaaeed0e815836a2b7170f12b478246b220c0ff0016179b4ed328268a4db6371c30f523ed0cda7d87d903cba2bc719e4ae84512b507827d3181f755f4c384fa83478e32d217fa3aaae0ba7ec466c4ce3e63822f9243f05a271c189349bdf9cfa965066837b557440d1ef164f0c4f0591538e4902869e5a4a8081868f99b8928e6fffa4eae73761c36ea4528b85588c157cef90ef7d7d70f2cdc533174fac7b8d4aed65086b0db15b0e922349b9702898e9c4bd6812c48dc3e1f65975c4a19d1eac82718512bfad2f38215031b17d2342237399144c5bfae5437dc0510080426a1f268f0ae1369d6874b9a3ea7468c33ab166ec9c332bff7f7bc030510c32b0982a41893fe258c92d4ac2e21d0a1a51a91b037ea7cf1ae3b912297120ef9e2fd1563b25cb1c0e78a743a4d6717c7a14b6eab416de2911f0bc8f1f4a64b1ab093d297c2c579741f3fee6c7478fd16f568aa5e07ee948f96cb07a0985c65b4384032d6c658a5cd78359bb93fd1e11e35d4cd4ee7c6f34b8a0bd5c51e8edf44dea4cea739a0d72ba6ee04b71bfc744bd73250048d918f638d409bb5e3c8284b0813fe7fa9187e1d0fcbd1dc7563273e5de3db0555c8e955f50bf2298482c14569205ac6713a1b2037715bafe8b06a642e6bb6c7dcf7619175b051667d694aa2664c5c124e803ec392513a87f24ebe3bed5c8bc28f87b8b473e032133ac61510841a8af97d854975c50dc71b1e98b3440f18b29bea143f2d742e3ca64933c0ee46fd6fd2aab3cbc533e9b9cfba48ba0b1842d3aa7907656aeacca996253cdeba237763344286561063776b2c71b962ff7d4d5784c8ebdbfb6c7e21796b4bbef2be1b0d94c1974915d85953a7c1752eafb2aac691362c036d6da53cb667eaf2265b5ae78ac441451406f21bc816067d8a5cdda9765d626c2f62c453e3b78508d39fb9597cb71ebab973c42c140be7e02de07868aabb0976cfe06dff67e6c47378ffa90bf116aa1a64a351fd020f93f6e8c1ed8c84bb9bd3bd7b0497d95203b2950fbc477e6f6df4a41a2e17189d85126985bf9dbafb93d376772ac5bea5cd56962465c47b2dc4da065cbaf2ce3255d32eb06114b3d78c26897943016e3eabd01af237eb7dde592af9cf7b28a97a60a986c67479e5fbdf2d7505dfc38ea919af81eda5350cfd95680cf6f12120b24016202c5c45e7c51758b781739496618145796b20299f1804319e77cf64da866e998976ab012fbfdf48cf8080ecfbf48d42501f4b31ba9a1ff84ca6486c1d6366b40129c3243468717e3b978a4545ce9826a46e9905c600632c9626fecf8fe5a2f645aa47278c4b78597a2b1225fa7c3c62f4dd6bee67f7585ee95e74d7a869bdc0b59ca9939dd57e7b09afab179079d467bfe0668416cb79ffd4d12d4cdd8c11a3ef655cf0ff92de4378b9a7928e440ad5641c0b4f391942afd713aa67b5a949304198f3b80800325335cdaa1f7a775a1c8fe4bca8655d3cbf7e9a5ee0c76dcec65aabe0616da9f51acf502526bb602cada1df0d3821f3e2cf29d9bd2069360d069922b575970c911aa3e5ab30e7aafd29386f7f76d599bf5f675667af318e9e519b71e57d0a84b0d361f29ed675b465efc21a85dd16ab3ce0c594d0f5a6f3fd37c02de2e03ebecec5780b927fec28d191bd74a2e35ba4e5d3a3197b9c4ff2a439a5bb5037aa273571649508a5c154ea8fa8e279122b1344d8ae58d9fb83072dd7cabe9febe33a9f57962373e08bd4fb6a12f85af1fb72c44045d77eabe6ade4829d8c3495608566f8bb3b66a8a2359e916a3adb0b434ffeaaf819dc15e15372da9cc8b09ca87426c512414366bae33e963d0e7bb699075e9933a464d21994533056d8969a31a3495d59e9bcb32c5a75f90a07bf8c73356e6b86ebbb68e5fd00344a5058f6828f5921e07915167d27bf3a3fab09055856a8c270645232ecda0446e5b46a3a1194e0a34493fef933c784ca6c5cfab9bef7980e7eb2abc874c7c9f8c7795ced65404a5204aedce3d6b6613a0eb207022d74a6d0003b2ab23452ebca5e03a379043e20ce9f4e316edc70def9a53eb0871a6a6f97b3827158a1e7c42c1807d08564dafe7972d68ee2bb834899be5789b11c555cc5f71cf2542412fdae83ea566b1da32dd33dfc57e80a6a588ab890e50889a1f8fb496f400d5140f2b2302fc7b28523497c3f143ef73f92695d227f74f608fccea828edcd1cb01e3de79b4c86f431e7dbd524b28698d19805819a779c1200b2384d243cfbeaa6e759af33d526a8aa4d5f6e5d5bc13546e7b7887f1ddce5176ed06ab9c17effcc58b089883e293864d04ea867749165261de9e25ee6b9d7a37f2171681fb8d486deecf706fc012be81d1423c19159a0f587371fa846a5723b8fa601adac2c017ce669883e93310baa906a610a369c612bc009a0e9c2423d560cd89bf8fb5aff050ba0bdada84b5032b69bd08fd8dc2e3f64ec0691fdf2a169732390d891c835b5bb4cf7c28fc282071c3302f0fc9b70a6c258c14f3e49371c5f3180dae3f63e0571a8d71bde19299e1dba68ac265cd0f884ca616027b876b52d6cfc6e7657808acb5ecc27f7b1af7e57bc823fca82b7bb18db57732eb2e8ea7a406401dd7ea5ac24d95765814e9c1e4693e01a6dcfad64eae613f6d7eaf612a24648436dee05f02aa2f952ff2267f466eaf2ca94761a6c97854779a7a336c442092991cc0829dd2936328eb5efaba7252c4adeb31897589b33327a128e1385d5e3887b5c5f99e9bd1d93576a08df8d2dd248b56e499caf627a9556ad0e24cdea8fd57eb376deac62d38c7b70006c4cdd777ced1a7ba2e789b5c0bdcba5d302dc48910a45c0507b96c29e396c68da3cb07677f43c1142877d9f450e12d7b6db47a85baca7eea7fde595393fb394c1f34369aa4967bce405ba71a2d6073648ada94995e44e344da9cbb5fdecea268bf712cb848b11d11fe8cce76a842d23f0f06d86c03fad33a9e5a59f4cdf7490c0be8b16a707cef04eb7316afcc6d933485a210a7b1d498f45582fcbb665f765e8c028d5826df38d08e76466d9ecafd6d731502f170ba799b867b6c5bb3ec7186c927872971c2429c6ffe285a28415a0f61c777f34994bd57baad717dbc8781ad4bc069855a0d53911774821c71bbf045d7203655434aad4f7880d3c98819f0fb9833f916e7a8b4d70d3e1d5b811e09355e8809be67c491ac485c59e61f8804973aea0081227bad95d9c6c1c06154eb077d67b6d6bcebb195b2a9cd7d89be06aab94b4571136f85f3047235f21843dee4bd2506464aa554333fcff535cea13d5b9bc0928cc16a861a15ac439aaed52cf4a52ac1b619dbc3ae763699b7f71bf3d36ab0ad7a3455f63294dbb1602cf01b5ebddeafcd3276472de04683ab0c136e39ad835fe474191e620a6648eb997ef54b8daa97349c5c26d803687ab71370f8b6eda070728a9c46d3feb7d0e4fd6600e29ef443935f77a8d869024586161cd772b171a8cb7dc8b6adf83511f26090854c7725799184ad17559a7eadbe1cfe5394815dcf985584b5178048d3becbe4cbb0a0a602d611e8b9761d427a082efeb645e5ccac801ab78c391f58ddf0454a1c37a2dea60b110fd86479b8740b530446ac6626082cd54b843c5ccdf82fd7aabe0804342cd8890aba473946627093f84df28bd4ab438e27e348c010ec2388ecfa4d4e125ee483c1a746e2560edef6c2113edd3c5d6e4b33f184d287817560f8182b09df02d8061ce989fe4f3efe854bdbb9e3c7e6551657f8191a9b7ecd67b660ccbc02e15b1b03c7391499bb784779f28a25dd0d9ff67b3e2f20b4add2a60f1a58efe5c316c95e887ead9c4df34535a0db2be79bf5f4870cec6d3bd42d24e98df62aef70b01815757f50bfbb1785682bd17e4b59fe1663aa7b8896bc86e92e02cff688afd21010d665856dcf8d11f8dc96a5730c6366f86002f92f2d83fec4c10bda184924ba37f357d50b4ffdf1cffb5228c57fcbec2c76aa496defcf6a9512d15f07074d1d73137ec602040e2bd3d02c90ab79dfafe8339affb7c91035873d490bbeaff641aa7f02e2bab669c9eea24d638cc147b715e1fba37784ef6884899d69a309c62fc5800ab19b2db6d207bbdd2cd020aa0c99c6f4bd14e8130a7340f2fe1fdf66eead5cbeba0e309c4f05610370de5eb0b75e2aaed6f6bd25233ba873549bf77d86485b47857989c347d2dde7b9204302bf4a57507585cbccbcc60945f27d1ab40080c7cd9a45fed4c25577b28efd96482c4794032329dab1dbfbad93602e10b3633ce67782db5877c976768c78dd2129063c28ef674ab17b8bc2db832717a121b764026ec4a15e53621d249cfe28aa4e56105c3bc95019d3d103da3dce9f95a705df61dae801da119832c70ba847fa5f24ad7810d1a3da61b7a6f3eadd2db3ec54974be276629258709da800fea0d90376fac49508abbccc44946eb2dc2bc499ac730aaef72c50d1f4460fa4899c0fe256df87f3f5d087bd80b393bc54009055155be567f3c6da242b16431fd0a363a5cb440b51217b02db74eca931cd14dfc998372335f09af8f81df38e985b1e9ef4dd1196d81212f6cf2728fa38cdcf799c3cef0d3f780f74f5d3c63637b3738876952e71af52ff2b40a14dccfade9926770a6cebae128d15c4547884265f0ce9d4fa84e40069a869d7eb44689f87daad02089405a9477ca20da8efc08ae74f89b615f936f0dd77783c0cf6164e51fad7e44050a2599d45e477d815328ed4a630c2ec76b1a938d21f160c4a1e2fc2616cc6ba890be69e4ea3abebd12257ad78a5a38ae49b530123270df427c76b6477344f7d258977d200a651e90ad710fa2db1fff4293d15c1d159cacb775a2abfa5f628910e6234c0c3b710dbaa9adf442d1c7f342fdf18ff447bf599211f9359517cf8fe2ade46f0009c90c898b3ec11dfaeca50dcc98443e45536670d5ecfbce58c68cc6347d5ea1d1e7ab8bc6a60ecad2e89531a42801619b1333c235f0570c7ef20049fe30837840576b3fe06635afe666342d09334fe4b5597204b695efb616dc7aec8fc085e9b192bc246d11ce53b1c0127e605c985e20a081b6dc602e719cd05d0c5d8fde7cc2242ec7c11b414ca190a0943de673346982e3671bc18bc59d984747ebf0e5b7ee7623a880f536f142527f1d166358fdfc7b3783f94c9008857e9a1dbfb6340183134b252131f7f810700e677e75c21165f3ceabf963c3d0d10df60c4d3252104c8605fc36543cb7a893cf01da7047151277492da099afa52cc0cb8218e7c83a9748d46c14ce5dc65718317abef5308f9e8007a76370ac0be5218b1da758ff06ffd637135122e38ab887f640a07746d776a8baa7c66b516b96cac53d7d087efbe2a8ce708fd4569b596d6de20378d283175bb28d5dfc284abe070a701e78b09fec4adb0205652 +MD = fc8456f92f8a8bb38a3248e988a3e12271061510 + +Len = 33776 +Msg = 9cef2854f7879c830ba861f6a92ef7025fb98aecf1520fac075190f0247dc464d776e3313550b8c38681f8d03ffdd296319fc764ffcbbc5bd5524e76579565c8d8ee0c05cd4b8044811c86030a70026c7b5ac6d75b9aa88f5679d7d933f56f32061e4ad9a7c01a8d6242b498f0ceaf0ca6b32e4ded07facff290d4219fe5092bc9d046b4abf7ae2793bb2a96db6100ff1b6fa8ce9d59dba4115dec5782ac5b3a89caa89ec13765987a4f8f05b26f1ecc4159db6353da72951baac882c6938ee7aed5179fd1ca666a81c68cee5d4131fb7f387013f7d0e82a783d0faa52e2cabaa0b93bc0c3f6da240fe7c858c31f60153fd30ee7718464eb91de6ad70ee1363cc83ebd087f04e94f8b7bec4bce50d3a1e8f35ee5a93e0f61cc578112e2d7fbf48c2c4580ed3cba725f4a9fcf651eb327e260071788461013926ffb62b60e406a554a7a2ef6e57615f21c8aed70cf282f94e2b285f4e390894ced81d072cc2e278c61051c804844c1acb954acd8ac594268410736d65eb74c609aba63fe5aedb297398d5274ae4dfcf5e9a61583fd6fe7c544ad3217fface3383e4f234200a493e09abbd6bb5db9513573282e5a0a91a713b54d819d0e98d63aa1e71827057c53cd4c37b23b9eaf45d4208101451ae809bb5a8e2c52d3a2aed08a2b4b93b39c79c816a8eedeb857623ab85a962d779c9523fb19391d96f3f261c2c2c36f502c8d38c2b7908bf5da2fd0035af3f867d4d3b46295b3e59eb22a54125688a425561885160ba22a9b6034fcc82a229033b84cd656ab9f943408df13408ca3197a40a116db4d2ba2f310fa27d1712bdb237187f29e030711a01d9705140e1bb59712b055d82434dd451308bae4d814c37e270c6e0344f2442a18dd925884f862c3f5cda9d739c4c2d991e61bca07e72f8e0164b44d1769151a223622d29543074711817a9e33e339f6b11db44ba5ac069928162a4423736cb7622c1d4bea038b6b8d5331f7bb992ae59b34ec2e5a6932e8c4aa3aaf1118314a0146ec8c2b40d87791cc34a879ef7def78b32a3dd0289ac3fca94b5888604c1b260df55aff02d5b34772ec7914ec1a5a7023d83eacf02671f89ac4053154a572fa07a1800e526a67d5d0c1343599ea6eaa0b5dfa99cabe3ce1050f7fb4fb2597a5be58c401377fda636b1c9f83fcd3754ff321393dbc4a6adf72938eb85eb2d14eba83f080bafc551acd6384a720beb586638cc240d1b244196ab8f9e583356a1d8188ca32e2c920217d00a9480a947778e4065f4b0ede12b874e68ae47497a83b9dd11bc0b7cf83a10359d60fc43b034cfdf7d6067db71ce31985075d39bed4d096c4aad141f4c6c2e8d8d5a3559da12b37c7f0182523a9c3e0fd39f7d8943503f2cb410e892130abb3e36daec5a1993d19de752a0e0b038051b7e85b5b0015fd3b4da61f963f0a85ece465d51c2e32a92ba42de341587041f419dc31c9e9bae6f8b2a2ab70349c771b4286c2632eb698f582e0ecc5f0392e528cdc202b396de5b261fd5a20ea2eaac965981da2886b3100de55eca2bda670f279b2d088d77622f0c47fd6ad4708467db5638ddf249a9dd321558ce1a6fe2f5c4624eae8ab1dc63a42f0c41f357272c09aaebb24ea8a03f6b4a87489928b92195dfb16549daaf9184317cf7f9bb356197c434f78c2858cf2fd164ba26b93c2b024fefbd29564e2132fbd9dd460141b10c3e8f0e494d1604e6667b935185fe7a905f7426d7b95aab26faad6266edde92dd766466e48b7a692566268488137288d66ac922a3783787e69a6237dac56e7f92084fa21c67f874735d0fde68e62ade3b1e79413b17675fe86792ce202c63efb070cb402f6712af46a792314272a9f334d6ef02fd2b8c9ba2eea985c587715bbf2c41b1bc0d5b8215f2580dc34d52606a2094d8680909b3acac30ff496af95c24a76d8730df258567b9cbc459dac69e218825321a4451307c0ca3bb1a5b7e69778e89312c311331c26a580574af7915217a0ab0727205ba87ac8c19b6bd72fc3e2e3f301cc7a70fac80a741b23fec5db072afd40ef6998a55e844cbad15699ccf22ea0470e753879c9913f9811082e0750e9f0d5e668f587d6c88217bf7e4b3c0f9343ec734ab31f920389d7fa5ff35d5aa52dcdf36498d4495a0bb91e956d9aa0d884f9e24008778927fcdec8493e658e255c30fda7a9171f0390a8d4e4296f0fc60a7542a0600617c73eb7610f34a852332407ee7751d5bf8bb9edcbb3a542c3257e687db2e256a4a9f76aaff9ffad0f952d59ad1db79893ba2d8fe94a099b24bd87da7abeb7ee9996d0fd984ec7fc2e14202e22e105e70258959618f07e029a55ced4210c06565c56707a0658b31e1578a58e350a604b742c980b3fee2c008db7fa5d5ae4f81757b181e8e05dec9a2e896382cee2f24b51ffdff5468c3a1c65a9b47e0d8db5b8f16fa8500ea69af8e00f0311d5afe36f0299115c1412d0df8af4a43e225064c191578fb9777be3c192d12c4432ba5b3fedc2d74893c818d0656071a581752dbaa133de2b0523f27cae988722cd4b81447b42d9c2aaf637775cb4c4bb1344392c88c93daf9fe8edb19b2cbcb38ea97d0514e0bed141e3585cd8ba4489be04b09faee1524b2d10fde9c15572ff5e1e780a21652f7e41d8a10842389a166bffba997b45c80998e449aa88db510f23f09adc089ad3d0901d3a0200f76d6a037b7da457bc45f1c6acfa7f588503eac7680a02334453cf17fa4cd27cbf668e6cc12447aa0d710aa0b037ed991c2d9830cef104082e5683beb7ff011c572d899019d50bdc01f65c0e37297eb3697a22486a766bf11f85f56e9b7a164a89696355cab876556079eff98bf7b90e318f8ff583c2be55de882c0defe6996d1bc225a51ef7127df2a5cc47f2ca26123f17e72163fc859c34063084fb6a12ecd6e2d6675bb767bd7e1ffae2b5ca4e285ab832b3504d492de9a70abc072f0a31826e7e83ca23fb7bce9281b01c1eb8b6491a799393dd9072c514c19c5b5d09a3e71125e0b3605920a8a46a9b6eefec26d5e6c4a974d3e5d290f55d0b3f1b95aacc71d4685e990615d5fdbc8af56473dec6c419dd3a57cdb511f1e7f3fa9138aefb36930212f48bc11d467f64f7a6d448e45b82172f93d28311b1663bd5e879173a0968961999718b4727bb13bddc97caf654063f99ac7ba558dde2cb1848e04e52925d0db9b140dd1d47797e8f2f45cec656ad3dc1cd5081ae1c638b0bd8f6b90b78794d3b647e1e654fc18db4c765bb1a0a80f9ef1cda80db16f263f5c142c12c63c43fe7d9b5b5e8e6992876cb7ff9bb18865b6bc1a00aa674963b202a4dce7ffd47cb04396c0c6eb50b371b641cf07127c84c7ce52b88d8de58fbd23c9d49caeb09dadcab2c8abf641ea2ecb9c30803df4cb26bb0016039fb3e8b541fbc98d6d81252b5587c97a29ada5131f3fca93bea1c778149acfc917453d3eefa32256b6a6b1dd868e49be0ff482d32394f3bdfed408103d9b4c2a8f09cbbe7f5855750491b218d02ecfe413c6f1c36b44526b893beba3c879f1c4618232c893a3f954f1e2a481b4e1d298df95807878b65d28e81a008737cf7713294ef0c1aeee7492e91a178cc75fe828cdd09d76be737a72962ee55efdf4329350b0845e33c06dab649879be69f187206918c722bf0440e50dcae88f9d90cac172677bd2c4a23b0afefe498b2f3f162c2bde9c20fcd136dcd97ea89d992d961a08c435e3d40c633e12ac157789a13b8890826ae5ea72d2d663ca940d73132b297e5740e5d4778cb14a325c080bc06de231a4d1d62a518b7e473f4953bdf9f06c6db13b7d587bfe00f0218bb117f503a589c65f961f05e720ee3d2704cc3a9c6f3142640ee2726da9beea230740e7b36f0367729a4af86c5ae354bb95306d758e738b891ed4f3221800fcc07f28f0f38b28f8a95730b191a8a11675898cfb2256af0ce921d296d1d860e9d28d12b92aa6750a625162c9ed86c1d2f356347c19544e4722bc5da5e3674931e7b59098ef3d720d3c1d4399d661a04aa38fc958c113cbbab442c8d8dd5144555e9d4528a7bcaa81a51f65b9f2e5c6ce04aaae39bff1b1d82c59b6883602ccd4c58882d0faa089082bdc4b92b97fcfeda51b75677c8a9b4fd965a93c74185d20bb1bec3a4e8587f14ed867cc909c0619f366918a7d5ae25279fb137e1dee7fd98ddbe3bd19d841dd7c984cb01ec723d37e20951b38df21b05c9e87c5aa11af6fdc3d0be1e315213d33a06cf5ca9d83cab3cde2824573c3ca1fa4689b9f1e564424a3c74140c8b09102653af61a6bb04022b32c6809d5630021b1487863511f06d5c49843a96f7a69777b494994ce23d44994b5352c606a030159b9d4ad7664188e0411718385d936f1371a68a0317907a6d72f61f3a153434ce20f48b3eac009abd6a5437588678a0e4d20cbe3420a4ab8fefd771604b931530eeb3d4d2abd4acdd0d641e603bfb33d01eefbd45c623dfe60a1fcfa26f66db224c03aafb2b66c527716e55b642c72fc19f760da0d1b21e5c0bf6c2674b548e8b810c9721f35ded83e09b65c463829c9e9bca38ab09fb71d83983d118a5063755d6f522accc622cd9a013d5f068d5824f5b12c6d036a6df43deef841b4623de6793e7d4047e1d8b11fafd2da41767eabb27773d761f5b7183406163d9f65489a900093391d13511143681f6473ae1dbcc472127048dc12e81a702f7ba7c4142036484c9bc8d53c7c89cc9b74197ea5e6902370be448801e255dfac727a291105d097f1eeb791eb31674faf8f9f72b7a7aa1e2727d18414958a9705b862eedfc9f3523b8875e3fdfe6053f42d9214b37e86c49e337c5acb800d28c3c40e9fc0cb1319821f9045d532198be1b48dff39d99ab95e67a166872062178f1be9b674a7b4505e1a8332116ad759f0eaef7cbb576a6ed03aed41e7f53de5902670cd5bee6b8927efbb3322f74e40ba074327a8667a57ac33bc775e8ce515af8a203ef6fd8d469825c4b3aa95d2d2a5b0058a91855ef63ad8ab716b45ec1a05ad94a5d653adfaf7532c5de894f9723c6bb31ff7426cdd14a016ca8ebed7856b073a7c6a8f5228fdde4e7c8d9346b1f690d8425a1c487ec2009add49662bca283d8e3d241efe52f44dc7aa0a1f3f245cd5f1bc2a71565dbb90b4442bba4d6ac596fc62a371270b73181450de77471be7917bc7f8f03aec79d6df799659d0e9dbda2177692450a502d3b12b8b59f33b1f59f30046075acd752998f819934ab9d34d8a05d5a6ffc22bf72a749125c7f47ca5d3ff82252a53462f5d4a46151f7d3487a2788987a8f546f8ecd6707939ca77fbbb004de84e20555eb8da7c4dc386880ee759f544d080ec5f74cba9a2cd3fb9c1f4dcf9bf2ab73b1e18435cbbeb784649d524994d0b27a4a16ecebd50f6c68aaf3dc02618448a600417ff47cddbc4d7def852e62ebd4bd855175a2c024af18309e2644382200c5c972478ce1228eee524dd8f7c586b502fe11ae866254e333b688f33e29b41cf995dca4a60275778d6c1d114cc6899e6f3ebf6040c38552e0c4190b973b22e469ebe75deae5bfbd5351c8f9d46bdcd72cccc15378eba04248e3b935f87754a03e53fb3cff94e6a9678bb75838be68a86230814fd5e38efc939ad03b09e333989f5580078e17d483f1a251f620c7135939f3651cffb235c8e872c6e3718aa514b57ade873e746f931b1cfd9a328dc631d89cd7819f607fed6ff203f6d971935ba7497d84b8b5a1200b83250e19186a7968b33e485df653b552a2ef3be8a2e6b69e4bc6c6a3e25174e95e30187b70e57a10c10237e07b9866b60af37c4724846dc2061f14a80167d5de368681019e2179f94d8a17d1f73849c5b3757f9dff57c83a04f1376f1cca8c12928f1052a904c14adf40afd7721aa6a724df0d933b460e2fcda5f89f3a64e1acfab28f17997899 +MD = 94a5d77bc308382a8aa317be7bad0a870f006c67 + +Len = 34568 +Msg = 1d91b86acc6ea170bfcf187f773b577b95e29d36fb30779d2ea23e2ffed9e1b46aede42bbe03a904fe22ef8f874298b5f4a6afe63f6ca9522863eb5cdb1c8d4bcd445e43e7302875e6ba3592024c1185cd3a92615f551698b0bd0c6f45f6b6ae0f3e2c9c901ea52a3f40f26f2e804b54ea454e91a21245d88c58a84f858fe344f884581d00f5a88dd15b2e0e5407cd8b1170ec5c52ccbe7885ddc7e6e30e9c754fbeeaad81dcb90563b4f257bb081f900b6373acb5aa0ae263f4711ba69b69a9de94e83659fb61fabff24532adaccacda0c5eb6815d5b07cee44afd61860d3486bac5c9fd17b27d4abbe3087701b55a8973f5d78b87438b0ee7688ff7f8261babfb14dd0318494fcf0c0ba3e4d7c488bba78d0c4e7b02be52a31057f242c9c68a249c4b0c13d2fd8569feb3f8cf72cddcf194c33e9b110826b1e2d3c4f840ab8db1cc829c9cf80d1a404cb7275b688069fc9d9af089e6ff179e5081f48b2351334d3612290620f50a49663bf50dee46ef23180208a9fd1991c2d9e1056dfa5e2731697845f1c65bb1cfeba0f649ac87d90f8486cb8debce21c9ef8f8c233e08b618c73357e28097bd5e3d848fa10bd9b40c73a7cda80bb3440e11dbdd5d57078c6defc1e35ac83f997eec6545a684a30cb465c3838b053f7519e1549d4eedd0f6ab43b27ccd15c9c29c78b19cccbf8a4fa1cb88819940e93187ce9820aa5adba14b436398abe1bcb55152f8198614e5f93f25655c75473715a24a052be236ae08e89f73ab89c48f0e180bb730551d4c95e6f3c8588190af7e23e42a0378f9be89ed986149e926b7296b236d65cc4124a253c7402a50b5c8e7771d853be12c93c0d4de9ad84c90db93c50a894e6e1914bae0006b26651f09ee06568559bd47b43a28c2aefb268b52d9b051a94e8d1d832c264f87f12144e90e6c3fd8d16fc3965273f51c06f98ec367a7692beadbb6f6929105450f37bffca51339ce377b38c0a620d640a0581393ca34e1bfa7cc8df56abab220c4faf8ab6e95c4f3f0520fa9a1d9f6db4ba4a24a7dc33ba309c1faf6310dd689d6fd777bb75e71d89096c0d7d1e9c73a6d71c35dfeece794856ea67f71f5030ea9b1c4f40bf7b0fa9cbbe4d1c2ead7fc8a31ef54ca1c65f2af24e9079a1a981db1aa699af8dc12b88933f41dd147a98026879eb56bcc374bfb875b1535f936458369cdd6fa8617b0ca91671299aaac63c6c54a066096fc1edef8752ec1eb4df493526a4e8d802071e546d656986e5115ef9d89ae24e6f4d9de1abfbaca9b4fd96606e7482e44cd5a7de69a603a1d58250552c6334546e21b8d40a35fbc73cc328ff99d8a596e9f08d8d34bb61b32020fac87a83c2e312432411cc87413ff43be55ad255b9b47e5dbaaaf62ce9846ef4449ce780f6c303bdcbe0187ae6da836cb6b83f752607b625147cd68205db680417179de437bbea97938816955260925e836308bf54573651854dfd441c81b55a5983c436ec946fd76653f060ee99c81a35a156bbac6ca9e9f46393fa953ffefef42683ff7f1639872b87cb63204ccea7b2bb51f2940db5f34808bf2cdadbebf6ce4903c65709f1aeca6dd22751434b0de4f920eb750402796b81a963521d234cd1336c13dc353e552a4d2a33ea44e855b2a2ec2eb817398244197a2665cf4f08e42ee56f7662c983356ffe0f51184d860300dc44c30f0217bb175afe7bb71630ee8096608d573a40d21a7444f08721a8c15919b400b3043fb8c27072fc9f21ced972a87089dd3894e998b4592e580cc4d3f6ca06d5cde8022364e50a504d18e98c4c4327d2bc6b88632fe7d67255b8e0211f18c3ac235568e443e04ee089a18aef568e0cd0bc7c23262835442644ca07931b2b72ec7ff47ae4a78ac7121d67b8ead8b2a7eca4136e1bcbc529b1eeed3e11342a9bfda76d3f09da0bfc4fcf107b6519d7808c3ed76f2a5fc0107b1bc78f83b03dc7476367bf3c238a75006945db486223201a5071303c2e4d7eec920001d1d88e7c327d8b0366c92fbb8bb1ade17bfbc10efca388b9377e95fd6c1d419ce3f4424526bb80126d1524555a70f194e62cd7d29cffc5100598c01463823269a14c84a78be7eef53b4f8ecbd36db8fd723d8ef5602cd03f8cc4f54c398a7a6ff4277a2cc9c77fb2b6bf98a66072ab2205750dfeb2f1504eb6495c2b56fdc1b7c2cf4c5b4824d953c8ac676d6845720d881d7d75f917ee4369711e3b22a3b147f58a23bc70c5a4df586026a853afb4c6e47d05e29c6751288f8263040644f02973a127d8aa74895f4d21fbe088781953ffddcece05a621040fc5520d68a72665265c7f365cf72fda91380e9b71684bbec385ffc19b9f08e0d18214deb195fc01f402545ff01740580bed88647547ef0f17bcc141c619acc3bd01d0ff4ad61907c7ddcdd9cc9c61e2a38791c0fcdcb04ce2cc3cd8eedbb5b5bb89aff99932277e8633132e5a4e3c7e415050396ef0337f0efb970d7baeccbfb363d9520871cb6f194d4de500f57937cd8eee56344b23af8292fb68d55a99e78dd87595fe5aafe16773a4872858c0122f8a939fb4b526e526d88f7265a7c337312eac47e3b67bdc5aec409b3940b719508c659d57f6e428e2177cb2915df3b787ada5f21e4dd769d90248a99b75095316db8fd785d507809e95e9b1c243d06e789f891d19e7698ecdfbe43ab5bf5cc86ac137d6a71c34f5429cfff561220364ea4a7f513b4cdc551c203ed5f1e659813584862023911590b672e508d4c233a1c6f8b015ec43d6c6afb97b02b6b1a7855d6da33f63fd5258e25fc47285eb092ef5ef43f19496ffe86e0ec6496de9eedcccc4b6bbcd279356afadc4b9da652c125e77616d9b0b01c3416645337c56d88f68d1e91acbd97f9003a20c673df74655e8da32126a6b815f110b20474cc00ba51bdb62e6c4d9be10c888c503156bfc007d5edd67677d2ac5c443800d45ef2f26cb2c49a620f0f9dee4a51616ca87f819044d8bf5fb0ba1fc44578d0ecfabed1b620ac7e346e6d80041422827c414e2ab64ed63428edb910c778f6ed153bbed8bc7be0424a0830280c5a623be6ad961bb87878ed889b7a0fe47324cdf37e8d67ee29027f1958f20655a1b2e6426a01e535462333f526576d99b8a4ebee5fa50fc9bc758d28dd1d9b8e7e7719f5f2fc17ab3c87bfd53adbca55add9df8c3b9050edaadc150f012d680535315fa7e4ff1398cff8e9cf3591a6a6e7460153bec9abb878887f2271abec588a742fae9c85697c75093a4992f3731be97c09bb45dba0c8aa1d54198b13a906d2b1f290962999c4d03b29baff9bc01328de51496d20b07cb40d1c4ac9ff2e8ea27d50e46e562500460150b9c7d50e3b2a0f607481435b633ada303cbab8dd5e7e28b31091858bcd5afe17bc8849cde26161bfd34ebe121a82f74865e9fb45f4ca56a1bb8c424e7a83741749bd548fa76387e7dc11eb74f130f6cd6cb410e8f01b89a53bdb16ed966415b7d7d3afb3f8b4e440f57775e485d96b27a7c5a446cef6342617ea7dd9bf515571ed6795db64ba0983b5ebc7f146c096ffad7b1fdfefcee8bce656e19343ffb5edf0e5b17669f75a08a3eb6c1bc2ab3cadf4610e24e11a09c21d8cdcbac2b3b98498da8d1586f178483602dcd477edbecaf303d9a6317c29ee2418e9b0ca01c2ce3bb283292a4cc6daf2ae94abd4fc8fcf5fd01ce46f49cb89a0777305b88e7423501a2e31e24dd839405b1e12687c32336142426fd927613d0925133a1cae504c8c5e08c04d992edbc5a4e3a8b0d1489fcdf6e4992d798d60c4ae34be64e5b982370a8d44aaa32d4af8f89fcf3c90355cec5a7e00cad492ad697f72133fc9426cf6bc363fa7e075ff30e28cf67a3d8b0352e969274fbd337b7e1535c8fbcd7d7521df9e21b3f57b7123df35dee83dac1b8820408d1a97c243690c0a503766bd236ed11f9b6d46b039486b44b905152b1df2ab9ea2b9e8d1adc0c06a4961299400245d54fd2258b6cff50314455f588a7328c7ddf8bc44d402fbded005078a9493f8c0b8d771afe1add0233ee4657c4cc3a11188ff80206bfb90c3d623990e31474297c5aad9b0e34b50682f16a604e477e2151a37a40febe025fbd715a438eca2986f05f7d9001e210c3e6f6caf66d418625f1c319667f66901f36d6ba77f492e70a2f44eee1204e75a127a56c026be2db83c196de5dcfdeedb5713861155b95341d00b00976b39d6c080ca55a6d8e5104a586c5d00b364fa187334058060cfb9b272c4bd53702fa7d605f9f9c1d1fb789f10bf7f759fee132ff4796a6304feba1907cbe5a0d548b3111e63a38fc653bf3d117d55c2f6dbb2a8474e1537d6c8dd0c1b5b1a0def3780f836a1f38f1aa06c9ac71070676cd06117d81c968d4aa0aaf20a2cbb09425eaa01fb2f5a3e3343f93eae234fd1464e96d5437f8ec1c528ac6160ab5911533096a4b886582bc4d0fdaf232044af37b8dc8705e13e73fac349e0cb4174b4b65fcf770b217dc633b9e242e2921f4f9591aa939bec562240031be686997e71c02eccff7f9b2b9c04613fc058e30031048b799171eb363b396a9ae93f1e06c725400784625df22bbb897e7df2bdc801f8e8c1f724788f5d4b5c3f7f61498e234a1617cc7fe451d3cd7516f24c6ca720e74c2c3b202ea1d6fa7a720f89a68514a323663e14b8db52bed6a1b3d28a5e1c542810d3f1582e56cb27eb1004af7c29b4fa8b3fbd65eef70400973901913d62b40f0868248f754b31f703378edee3c113fdff67f6561d5f31857008661bc572ab638b5e165f1722d36a42dc74bf4c8934c02b3d4c13d6e9dbf7c4988c74a6fa9eb8022c5321a48c03e4327552cb26d0abc397362b29bc2547c9fd7fc1462239128f156977917dd558174a98a58cf335cd8aebd910023da0196e8304b10ae7dc8b5b3d8bd00933ad545603cce96f42272e88619c9727cbd8d5680dede83d68437daed30a190346526d32e6789b0c9433434ec0f72d14f73de048f691c358240c6dfc8e7a9f0a268327307b3236cf59d8a030628f4e54305dee83c576cee59ba5e0b6b843fea864bdf6c13a7049321385d9ffcebb776017a7349b032387503f9e5a7fe8fca448814170879cb94edf41d934ef7e1244c30da87711381e793290545fbab91b2c74fcdc18d62a73c41175316591f90a12e792e01a68ccde11073e7644f98115e3b847dc544f5c4625931e2cc089b8297e6847dc931439d8db488a62cebed973868ce2d0b755ba970fbebd39fa2943f6f3af8cfc75a61795546114a8316d3aba715d6e47a68bbdeccf0ed2d7671314d8ff37e2ce3680ee9a090b5dc531a72d6130c44aafc643eece0ffdef838bb9b3661d9bd9d05a57176d7581d63833df19fe413bf8778b30c5a12f2673dcfc9f9824bb35e291557b3a76067f0e7fbc8788f83f3ef84d79b4cb0cc902f0322e374b7b74b08d9fbc7fb05a485d771a303312c56747da8ff65277775a0df521950345f0c6764b49f3d72170b797a0763354201c65d11fcd958c43674eb1e329c5a6001b2d019c2e9004065fe0d80b423a7d3933c7852864dbe4c75333995ac93472026114ed00bc25a8c77e307927dcba20d6c1e8be95044dde6bc1951ebc7e6609e5591a8319810917ed62330576c436c1713d55f7d62a4ffbb948efdc98c7eedff169aa8e370bdee400927507888734d1a10cabcb7c2576af284fa03d70141366ef194148f9bafb9f798562f9cd9438f3eec64693f7a4366b415c62cbc301882116fe7b5dc22d03ace0c17946c689c79aa2e0a30bc92523d29cd58402121eb1b1017fb53730c06b9ebebd4498f3c6452875e26d7d7106b3578371907addba347947238b6fb613b7d76c0f414ae5d8563fc041f2737fe7598cad871490966264fc50607a51d2956cf9810dfbe71d4e5f432a95de884635aac463ac9cddcca5e7bca5ecee9816d3ff77865fc0f7fa86e4c51d448e2684801ba15e4875ccf0f3212ccfff64ace35de3d4046b5ce81e106b5800e48dc89b452095e5e15be8a3e895ef273e890ad871be8153c71c51e889775e7dec5a08faf35e34a31d9bbb45f4da565410b83c56dde4221ce99ba +MD = 515d2a8972936e6b45b9b457d9eab8e2f62cbc3d + +Len = 35360 +Msg = a24a4cc29e44d50386c9cada21d741d35cf8aa713c6a5f72167e7c55023ef01a8d52d449ae25fc35fc43cc821d064de58271802b515cf37da3d191e2f0b7be05c7ada439c339c7baba22e035371ae88b2ba073d3df253f9e2d6e0d7ef039afc9b923639ac4c95f192a2eadfc575d394ebf4f296fcd0e6c5d1c1b9631ea0debedca7cb974981decdab22edcde651569b5a6444a0a035fa242d9a1d404c67c99f9617f50d0297d9586bcec14e44a8b9f4948487fa9696008d6cac871fe6ccce275e8f6cdb55e3182a4af2efe15ec0704900e227056e759c7a058571228c545edeac6a7db2c1f80dcbcf3bd427934d0c0145e9cc41865910628eb186188b731e3e0635a203c54b4cb56f06187180a30fa5da17c23f8cb51eef7ecd106292bd6ebdd27d944ede51376fb0ee175fb576ddbf1408b37fc01e1a794c14ba9100a7e2e6b7aebf047bbe60632b507b52901d08a5aa191a52eef895887d44ef1473a6fd311c457cc53bc74a2844d99efaaf2a12f202e5618967e912a598ca286d5a5f103586de67f18d10773783e60ca871028f4c94ea1363b94404491500e11c2314ee6c6dd60b29ee3e5a196f024efc745adffdf683ba7251adfceb78a5b3a16c8cca3e57c8d0ceed8575366cbad0672787778eae6ed145cf9b6f254a151a8da51b5633db334360f9aa5b17138c2b69191cf88702f7d25e9170dd6effdb80416b44f4d54e81fd7090f17e43e9d2da72a77fd57fbabb381d35e2ca2100658f5d0d9e38ab4841498e521f5145563b4824814490c12c259d122b55a7f3f24f92412a8b841e5f0dc21aab786683ff320eff04ffacf3edc35bcde03e19505bf6238e309189b6d933f1960b8130983b338952c105aca056111eb1032070be93f5cda4ce449c0d6d40428100ee41fa90dc61d033faf22f2b9b305c0291509740cafb2532194d7a81df5f7c1a041d13a68902e7ec542028a4ce3b3f4d052b92c8e236703a8410869d5d82e7b567247bd2c6071a3885b9057836b9db60f08419b2d7fa26161987da36376754618beaabac0fc8e7c7142f4e0c4126a0dce7dc949528d0a7734e15bdd3197722bce6f22b98e2c2c11683e57ad789fc302f5fb7abd6313484c0a63cda0a602d03160cbd643fdbaf3685698e14708db4f9b6cc87b7fcada03e8c967f9732a813561b61befdf756c8d8b2199b935da8eb7e21b2cf517edaae4545b3507de25da4ac1b9a694165e0c9f82b38608ff587fa2dfeb71100e364b9397a6152069ffd6b65c4fb6ee6f2160d453f2aaf52ee978b999c2ddf3ea0c84b7b9944f6c9d213d2137619125722431d108c84ca949f43fa4188abac736d61ef8c30c2a1201f1d7355cd88060a7d04641a91cb34bd8e39e0a64294eb377fee200bcf5ef3a1ed86c97d29acbc7978d69ca3cd52804631d5a938689e2e037eb9574ac39e70e7a3fc3f2a191ba83c9c46014cbddf3fc730a3ee88590bd76fd0502ff9bbf57b39f8ca5ecd2a395bcc5dbf4c85d1b5c5a8f1211b16928299c52b4f047926f8a541529da2d6bbaa399143ced8efb77ab47409d9a953a386c7abd6026f49831c717627c2a5e77bd2d433d4d130dacd927ea0d13a23d01a7cf39c6716dafb6ed552410ef5d27fb947be2c8782eee7829196c7edcf151c65f9a01f54f8d20f38b7da4a7e83a2f0127d59d3e2405d8674fc9f41b604f788f4715f9d3624eee57f387bfadd18a1f905e839c26b8617482347fab6d08845a6647884ae71378c1ea0ebb9cac11159eb121cc08089e0a6ad0be83b8fb3a57a052473a1bb9c8d243b5c260642b10a3556b58fa096c3dc86159d61c444d5f92f25c2f7495d2ea251abff8c03eb336fcecc6eb53c6dbfd630226659477ece0fbf78ae77ee0b9e239ee10992153cbebe70acac22068dd46a2f43e5131785f235b58e658a023f617d668b18bcccbfb972e5780c5a816f8804edfaa843c702e9279bd7868228712f0c42fa9b809cdcba2977defdd35f9b6132f6d70e4fc86e2941fcc47004b3394d7caec00062081c474eb211ff00d399e680d449a5bbbe3029013305b09644f0433b247bf5f58106d75f1ee19e779fd38e5b00c2fd0bfae16f01e8fbc69b505eb6b42e7edaafaa24e0e7389e4abc16d0df3e06e382a5210a71b0892730a867bd0e9437592cf4e5ef0a5379d88232db2a4fb6411bc53ba313c7999e086d21fd93b147c98b7b59c6ddaa407d00e3605f48563059fc3323f385d72992200abc748b454b7f962462cf79471a9ca7dce905a39948bbd56af2b4e926ecfffe67cc8f0c411ba409e694523a776e534ddd2170d47f7be157bb2c49a64d50420422d68f8f2b34e14700631199a1985b63729e23537f3654f3c2354455a0f002c1ba5f088c7a23b1de2063602f5c44ff792bd39f892ef4a13a1ea2176fd848bcc7acea8caca474904fb4f9d0641de0da0f6756481df553307b1f07456d39d6da8668fd7e483084071c3caae4c05cf85586b39aaf6a68ce9d6741b940d66c06d67e7d0c6fe7a4ee70b435fb0fdc9fe80c8faf1558070fc3426f254cbc23e5655b10579be413882077b82f7ed4016d5c598aa85ab46c30ddba034845f9de1c8eb30c97305d4440a68688878ab3e72bb1e6f84def5712a27a8eb419199c7d97cf8893aa4e3e02650d27b5ecc331e681851f58ee27a282ab261af2165c168aedc436761f5a28d67ba0d5c0bd9cd097d5527d3d27a84944d16cf96dde61fa7e64f9670444e89028eb2e0b29789c0273bd868b1588f59dc1abbba467cfefaad0b3cb74ced98df68239f15260bc2569f290adc362607422a190aea6706949ca2a40d6fa464b9ede6aee9725f6e6ed59acf534a0b46cc87a3d36926a2848f4bad3a298620af9bfba5b8f7c006c874863fb61c7cd8c0c47071cf41379ffdd950f654f8c467d82450cdc833c6c222bcb1b765cb38449ad945bc95fbe6057959f3a67ae2f122e73e368567044e3c832e9e2964ca47f7def24dabaefdf97c00f77be5354fd4f8e2d0f3f51cd21e1bf3b294be3c7f719a94f6d167a1b138ae9b9b32da0ba73692d3c2d0466f0600087a30dd9e74547dd5c2cf1918f67e6d40512d5eae8652df97c1fc15a0e806b9ab2190bff094af354f72646de436cb5edd2b9548882eb897b0b5650a2a103b14abefba83dd25fa5fb1ab9d15f6e802d42b2fbb38918a422685b6e7f70d6e0dd8b1ed96708cae9cc4a276625874948a97d2678875f1225653bdcc6923708be5cc64210dd025b7fd2ccbda9b8087c3cb6f7bdbe249cf7e5ee701ffd4d77ced29ba6d9505e9d2c8855fd3df30d356fb2d24ce92b3fa5327c0abf8580e5b591e436873516705b96a9c24648d099a0ac7187d7294e1d1a7a4e6644bde00f72ea6999e1f5b1c6a0224aa4423ed0f1ccaacf44410e95516f07d36dda19a92f3230b952619bd0b60d67f1788ba0628a3bf34293f4f9af811593b1adda392ad9662d79dc7087f1b315d024bb5d1e03d7510e61f37d8adb10a0765f92bf9d0372910911b4894a73623be35af960f8437dbe64a3ef3522d674825833a904a5c1af458c27672663f438022a0a9f21df9fc1d69e9ef3d661f0414d91d47d43e3c3c3f60f1160d264e298eb0cca290a2477683c04a98dbbc8d6fb64bbc87bf7e7a875250a663e17cddd2969140033947778b5514f6a396fb7e9076a5e76218b21ee174516ac5b50ef325dfec8432b5b49025da8c737636cbfb4f9b0c2740a9822e34ef8bc3a45287980ab3ea2199cc909a2b5b514b7b83d60b946faa03893894b46709253c68818dd46958b39e9e46849e85208a051845c1b64738a703a58e93b7620b475a7908c8b02a176e83abea37a21b71602ab7433704503f2baffd7325400d3d1ba73fafe23336384359278152b1d596fb41bf46defe97cc5d90f7aff25650e6c6aa2340806673035ba67ad37cd09bd682d298165eab0527652dfc09a301134f73eb8b814d4fcac0def50ba85e09557b1e66a97b601480976c0e754ae0493ec148f3e03ceef823b6f4cb44c89f63ebcbf6845c3d8c3ff1659abcc83a5037b9826d498b370e69672ec3b28cfbe8e7450f33b41823893641da16be5fa19cd26cda0b75f23b53a97c7076314b08e19b4b8efc7e46f60001563c099ca0476c233f134a007f0f65bf4cc433d1eab83189e6927a6b4c7e98a61ad39adff5f466301b745171997dedb6be722218cfd381b9fc61d4029383fa2f74e9f20ec56f3503e6444950a74b9393b9c16d9063217831764433cb83cdcda34bc438b177817fa48acc59261342fe6027fb39c10e69bffb3d83bf4f8423ba0b89ad955175f2ed19ed54aa79442ad725ef66b1323975fd1f38669f15ff4f696e15ec3175268a266cf92364d4a2cbc5e8f94afa6b4a0bdba34e35fca65a1781d4d7c933a5f210d3a59483aebc95ec71b32df13ff4abf401916937fd88ff44ab46b78cc369414e9bcaa8bab0bb8557828d73a2a656c2f816f070b5cb45549e8eca9d7c0b4a7b0a27e51c119358dad2a17fb3a45718f9dec3c94af78d65c3ecd36b71e230cf080d1efdd8d07f1cfc26768fd5407bc2b770af23e1456c6eb3f8212e1b065d81511f291bc43f9b8d541ba8c7c1be3adc637482061ce790ea8c88211d8330b8e6bc07f046c8a610354878e02f5f66bbef67b3e67be3242060b5657a3f92a86988b28f1a86cc4c059c4107c5ce987f27822af581881e4645599857d59c2eb599ef9c7d50e3b87aa348a88e00ac5253a51e1401fb38b593265c9c25da3d40a170a1e09a3966747812c3e3d638d176285e4a8da1fd909154ecf129993029b1b21528e8ae7e16e88e79955ca71646ed477a8efd9b2f9a98d0bea0a77980686731b10c1a81c6fcfd04004479c842129df82072ccb8385db351c5f27e8e71034c666bd3e0daba1e9921d15aa403633d7083787f62c0c1e1cb1d286e17a0ac0147986c07a1830186a52e115f441e21d04d2fab3c287b712fc67d109dd877d86a3f10db2fc442443c0a73ebd9c0e226d21b45e13284b1f14e8eb9a5052ada9e471e17e1d4b3e02b46ae3885528217174bc40d41e7df29e84609190e307692a69fcbf3a67dd5255dae7bc50751f1859f432fcff4e5a2acff2021e574a62268977a2eec51b292d8837c58619a5f75f364c344d322b43302dee3bd64feed98211ae02f4c0bfc52c344b62c566603762b0ed2eb60f1dafcf32c97c4dfd58f3e88d6dab659fbe17dac4966e1ea92c55cf346790cc08ce163479144209e20147e64746fab5d4aeb7b5c3a935e66462d9014b4bf8f391951d2c5b7f3b8e90802bf7c9ba8f69e1fa2b59bbe468b12acc47856ffac5c14c1b0b03643ac7408b5e36899f48b7f65a38d91307d865035e9117d80cf485c99ab886562e0753c424e3ee38326232ff9fd3478e5205b9518289c075cce9c750f006059113458f8e1fc9c9702da75eca4561fd3804fcd42048fee7fb0a2af90c0e7c1f40be75c902be684ecdeb88b9facd6d708cab1e53f3f468e4b45f38996f289329e17a289ec69357e4ade676c315aa4e3818befaa74117604d5e36a336dee0d3bbfff0de8f5e2101219cc902088f6e9cba48bb025cac447d98451aeb4fffc9c64bf89cf8091e0a0c9c16edab08ec8cc18db919d5c279fe094bf59681432635e36067e905aa9a90c2aaa8cee23291776518d675e5975e96abdf0c1405cf06d7a38fca5fa7c26867dbe3df07381432d0ffe21d39a249aeb0cdd7e52dd93206019f309c8b3f0eebf1b0be06112d2c350bea7019ef9c380edef7bd1d4e8c1aa8562ed96ad63beeb9c0d9bfca6731f91c9abd5949025400d363a1f510f08ee75247eb0091db3ec03657cf6fa883d6f95e0ff0f4270c3a22b10165166cbe6236b8594c4cce04a8420618fa240cf19cbb7dce2de73087ef2c1c1ab9a78cf2a6873efcdaf45bed28d29d96f293843ae3adf077bc98f1efb37b6922081efe47bc375ac51fbde7ff0100615431349aba5c4f5a7f358fe7be579f4cb9e8f33d2813e5a02472ffeea4e149f5d34e6dad1a571e105711329e7e2c162b44c4aac61e5e0083ad7d40cc994a1dcf96a2c557b574a8b691e8376299a16e895533cc2584fb1689b2b7172e26abfa5300c6c21726256db1a222f4e0bb7806eb5daedde8166ba626f688e97fd7677e24c432fa67e709eba62a49f1a53de07dc5d0ae466a2d302dffcb9b4e3e463d07b9336fc4c6626280e87cc5c40cab9b41ad50ba9c4843e91c58c4469be5ed7d3 +MD = 7fb74b4dde68f8c5e0d9b27878040123a9ed5fde + +Len = 36152 +Msg = 0e2fce9e123c9e83a8ed6fa9aac879f9b112c0f77c9f963e91e8612a265e9ed441fe26431f26b0e0d3a7982b2f1bdfade779722df4e6af2737ce257a5f349b610c4654a434359210c74359248e1e750d596cbfd559a79bd7cb2bc576d68d4e0eb72fe12b1b114bf9ccea3afc907845014f142d55738963349426ca845512bdc489e0543f9b63e3852cc4c41bfdd15772109846160a350e28dce8bb0ea26bf269cb8235477bd3639b2df87eea9dd3b146e5219280e652a49ae999207b863ff5e6c63c0dad8408d22219aff1cf38245d6716d798fcce892e71055f8233c936cc24bf3763d87eab38043610a333956c63bbebe1e0f08c82b2977665679e33f9810a019abf3031639e28cd441e7f7d54c92cab68f2c5e6e43bf384d15a248c301c7fd38ea91d64d90b762572ea19b88399a1a09357e4a558ce6d79cce02d9b83a36d7c3baa07e1b587d688c38d6b0ea3db01108b96b3918575ed9b7d8321299820bb45c849566e9e1a303c5f91db475995364477379c7114375b340dca68fe1a9a51765e0f72d43ccd6c8a6d7ed32a4fd1278480c2060eac1d9f8aa33d6ae2af1a17572483c4da38a772ba15daba802d96bc18cec05931f62da2e568658f9dffa7f52f432db24a3ab02a14812ff8119aeddd4788b9fca099714a8f84c940f6b349d348e295a5ebe9f17de0d604f5a53fdc725ad73359243ef180cf1ef2e3b7730899e82a440684ee7151653fe21804c46e6399e2b8d7848db42dec5e66e2a6e6ed2f5843c13bdef03990ece250cbf5d0a8984cd2cfde8a2dc2372f6dafa38cb5ff7de05494aec1984f20bde7d676420b94fabbce01d6fcc72388e07355903088476bc78546c5f48ebdeb2077fc7fb11f396f2effd427a302e0064797de0f5c05cbe257005eea41798bd75dba4b4f0bb19fe0ec8cd23a4787ff9bab02d48ad6d795c8d6ea64846e02bfcebbd74a4e176ccf363e9e8375b0fd8b2e56dcbe6867a4ad078d6ee0fb44d063b783f682e49ff5d0576c5d6e41a50d89a68e4c2511d7151985c4b15bb68b8c7e79fe41797a69f7aa2dbef01b07ef5f03ed9c7a90edeed1e32cc3de5d1f0bdd19fe71deb9763f18669f7b80122d569a00eac88f8764748113e2d11b6c9d8b6c3b2d27f5ca42e7000b94ed34dc1da267898559b392de30ccaf9137901298d5e0ecee67af32442958a1f65a35003d9b6da5a6990d3ac3eb5bc1203e67d678afe2342978337be6cfc831ac0baa06f709555c35cec6067b6dd550772bc540a6e21a1cc6a3aa2c8f9ff7c19e48bc77b2b3c6b61a41057f6e7ee3657e49d4d988362fabae303ccea6638e5cb45993d9d56269bc3d3af32b04e62d071ddfbc288772caeac76710e895e13407d68556b7cadee6758700b894a66c5a3e3c34a5b60c6092dffa8f4f02c3e292ccec152e96f8efe4eadedd7b42bada1212c391b6097dc6309430f220a5982d50b2de514200c75d0b212c1764bcaaf6ff8c9a3e17ab436d4b114fd6ac577c8c15c19481bb7c9fef042457f79d8adc89c7b3a983f124c71d8c5c40841ba3d7c58902f6edc093e86e77fb48c54b34ba5a1290d9a86cfa709d9a7fec44940e11a1557ceddd7acb0aa30bace8c99942aa33892910f4afb7a5b71f823a5e3f2292e821385f9810af6d5369411e4bad3d16dad38837b0e3e2d031c06b11194566c362943c3667abc47a4939c1d192afad651899b537252f0458d427445bbece620ad6579258927394974c2235ebe7c818ffb583b6f698bca4a568fc15ff95019fd00e1242af618fa62d23cca453921f084c7938955e54b14a1fb5e6e4e5e607a47ed06c52211b2882a597e016f1dbde04b42c615a56a0377f2e828ebbf5f908f97ae50dcc980a65b165700694ad092a959f95a50bc5c376c93a999ca117152b272e159eb7fb746fbad776e5246f662e41757dadb2950695b3abc0b79f338498b50027c71c32a26d25627026d11f380f939eac2156adb1bdc2e9c087bb318c782b5ae52f0224dc887b6d2870a0a5c8f81082eaa800f50c15805c61b5fff976f312a3157f71bb6ae84262646c9be95e0f4289ffeab7555ec6746c6ae973738a30f143805e72de93b405a8edc2c9d4427cb01cb29083b5f1f72682a5ca1e880f5850a2ee750b75a01549a78b19324cbb68e2a1cc426cfd0bd11f04d801081e4f92b728276c4669d93298c70519df3a12fb618216a77b15f57ce65ccc36391e9007af3df2ea2ba086347970256bd787905cb4255568b7e5f71f03f04910ba711bdebf491897c103ef42750ab1b722197ab463f4542c295658e2ff2a173792fd384070b4621c107a5c8513fd72a4c9da1b2af755da9cd74e62ee6171fd54c9ac2e5549e6952120ee1424dbb130dbd3b1bae7f7b2ae60cbb65b6bb12cc40f68654744d2477c4dfa456048558fb30448859e12eb72991f0d778c8178c5340f750fc9369340de49a56988190afdc2c6314010d45bfd6381a3773d563ca315fdfb94fd52153782bc2940d4be816427c995c95855d0bbd43097a0b615882e2f80ffdb2bc1df95314f8fb48b60422da8b67c08bebcd214b3d1f1d93ee4e1ce4a418bcc9baa79c3b3aadeacf726d6be0e35eee58a32e770ca0fb7091eebd1eb2de7a64f94366c27d0741e0f5e39c48120edf44803de9937df8ff31a9f54dfeda11b594c608d3f2b505657c709c094dca887951972e96fd1bbfcacf30744943c6e85abab45d67a36faf792bb40e4cf396caada401f7af1a626fceb7c9ee576405ccca4548c3aa6af9700d7d34bcdfcff36ffc9a552baa81ee837b79dae5f0f6232994c307ce04a00ef182cf771a2a396cc2e6d3153d01ba2c857183e7ddae708ba93ac255ff0ee90cae89b0ffb8c4c66f6decbca69e5d3988f011647547d849cba63cb1c7b941ac7f0172b0331b280d77eb7ed59de21566a05dfbaa07b707084fbb0b1fe1af2570d294ee4bb5b3dc6512b63dac7f8ab2e7ef2990b323adc332a452367b182322cca3c35cf20c154a73cc4879afa00ace23e1ed711e3d9e953f46064f41ffb7d2266f273f318ab20aa0012ce36dc3d4bfb115140d59c9fbe5a4c131a602ecffbc04913b1598c60c85705ddddb554f9b1005e527c5e46d684d09927edb4c844d38edc67960765297536b3ec5f1f497a05798fea34b5c7c4623b426587f7d4a42e1485b5cb07894e4fd07309fa7ca50a70ef0be110e009b18125b1928d313a3533dbadc7f761e2177dacabfa56d54fef1ae93affb7e9f2e708154d79aa6ae2400b6abd63c31b57cb2852c5881c312f712aef840bd2d76cad20947ee184abb40cdd491b52d73fcfb4774b277bf4992ddac98951cf08b35e4af129ac91c3fb98e3d201315bdad43418931e3b9b851431701e4009110284af07a25c3f521063760b1219664875e36d40a35367b078aa237d529b149a6752492c5cb59fec13ea36cdc41921e04f736274d07315817463eb478c23da32e026130146bd35277398c0711089ccea118cfbfc4205acd722487117f55ec4a01507f5cd89fb67cbd875fc3f1ff2ce2f6236201f2091947a2a609e34b5d638aeadfdd7da4cf79e9fec8ad27f19dc8f77eb7ab926929f343233b458e8f3139f225110a16eb83a436c54de2b7826cd7789535fae59c2b8f6c7e54a8879d79b62c5a8493bd2f54bbcfabb79ed736c4fee2f43eee700d5634100ea2c17308af8e75f5baf8e4e2ab27311c76402b816e95c2f632e4c63f6297ea6e762eb5534b298b8114a80297ff8ce7920a6508f4a2429525a27c6ca4b91138187f2ee30fc4fdc977323faad1da437f96f47c1403086bd60d1e13b7cfc2369596fe606080b591ac62841e5202c3e155b5c503c12f29980216f6595c23267e8f64a451d278958bc0bd9ad27cbd34fd0658ec8a84fb5e5db5dddbabae415e6f820be181ad39dd2292f2e6daaf63b5ed0e0aeb7ef3da4f134dbc2e8942acc27029e7366e5556f51c9face8b54e98cf37c936326f824e445f464c7f809db80b26c39133766f5285c0433620e0febed963e48561bab4ea06984c094f103415810a0b9439485faf07c42a491ffc24586d07dc52fa1f002fee64ab7d0db69a27dc804e6ad832aaeee37eb13046555408028a2d395bdaf872642b01023be234716620287f90f3d574b1867496348af220327133a3079d02641081d9537a318784c670166cf3da63e2ea41e0e55b1ba33365339c2a9dc3b2777bdf90cb191327d475e6949d5174dabc065792982a65dbd42377c33a8eed9d2efebab3e3c91589d2ecfa1f9b6a41ae529e2de64933280064f584554d4b8906ed2199df37eaa72212942133e18ecf63690a3b685305a0b578440faeed641494547d036f31fe46951624026dfa4f8c7e41d316a550028e7f8097605c95592ed9d7797de05c8472375fe5042a601cf7738fa13609caca3fa310782ccadfab162bf8af6fdf321dc89d528fbcf59d779ec7a4cd10222dbd32d4aa6edb9626da892f3a775fb83d1aa83b906c835c1d0ff10f23ef4b7ae36c1698a0d3d32af557f6381f69d417e81b9fa68c03fdda69268c9e8f503e60a6574943b65fda15e5b3cbfb0a0f535abd812d42b7fe82dd0c5bc01a39c86f9fc0ff497a3d5b26d3526e98dc9cd0640d47fbcfb4a6b4c8e0612049f6c5905574ddc4a5b0a86e6fefd5f8db514a456cbbf1dbf550dabf2691221478b8b540968c5767dc7ba9f20bc7dad311ed94e6f3c355b24ccbb686224ba998dad48b719942b8295c2fa49e90f7fb9dcb260f3d9fcfee1f2479ec92529c722deedeaa7be4349ab9b3611acc85fc92a9658f0b91a74e25631adfcf7c2de00664333bb4e7fdde596960a48ef451425a967f8d3cbbc0ba962eae81e19c1ad2f0ac36701d4e4cac8ee8e26e73be89659de587b4f4f47281aae24df4c58abfd1ab9677105617572ba598c7236b73a4d2d7070c7ad6e4135ffe2e77acedc07358a1936390f1bbb3e827f96d67c8cc2a26b08b8c5354f34991ea63ba1ebcc5dbf47d238a7672d3d94ea0ab73a03e108fbd94d365d2e1ba7bc3fa0293cec503602198d75a454bd83ddb89ff48611df95c141e8f478e2f923062c7bb83319921866c8f2f6161ff41682b5e857a2efadf05d6980fafc97122fdfacddf16ebab78e531ba8c2e711f97de9a98de776e575a13519be4ed3968d53af866fdad617ea1d31dc58e1fd70f5407c5c36acea3a5c31b31b4afae3279317de83d87e5178514f68d1a95c42840fe8a2958aafe7388c273e36cb0616914c04d46bc0e2c82414ab60c3443a9c9770fcc21e31f753252d0b3d31e978521edfa1f906d11024645cb98279d083f5ef3f0446bdd48c184a66661ad54d5a81147576b61bb10f4b80510234bdf63f34d5a589953b1b771cef60bf3cea9fb38abc350c717408e727c01a0ddf555e774191ca12175fadbf495c439e0b38868c555e48ea93d77fa19f6be062ec0aaf33046bd52734f3336c85d8368bef86abecca42d599850dbd439acbca8ac1a4917965abee5054bd5487baac610f509db6dbd1af059faede6bd80226010cc8ebae534c983f16df87b917cf21edb196464e6252ef008675113165bec5ac7068a7abc8a17bed003d170924ac7d02fa29471b873548edd54470b6f4b6f0f43f089f33e04c9c2397d635edb73908c7717268c7546203f41582c1a38cd2ef0100129ceca43543076113ab0dd65e0c659ed773f7d1c1673fcd96cd9f36fa09fa3bed667e1b44b8c1e85a40108c03cf0409c12e55053bbef385ea5c53f91687077901c5924e62427ab414bb9fde109aca3b996389f8b64e3bc6e53667dd0eb15240b681d043752b5a4baae561d66db5e2bbc5d83bb21b613d16ef2282eacacf001b7461df0466b988378286ff7b02687211af56123c533d210070e94c2932293c8fa32e68991e352d00066620d5b7fba3c6bda4b69d452a1009d0536fa12f072c26abb0120884e7702c9d4c6ded75b59c61598cd0ddd87232bb7828905aa7b0f867f4af865b7f167a45ae018dca22e0866aead40805f65cae9dce305a5d846dc9dae6f36b9af90b72d3a34e2974a8c28869d845051b862fac373b3372b1ac86c708ea436acbd90f815ce3f9e9f4eda3cbe78aa7702a6f34561228f8835e0943197866692bf80768cf6ad6ca7451dbcd766c6ac2f0379bb3d2b5fb48336d81ebe8b2c42b55286a5e8384e48b73935987b27edf5d2e4cf1f348a81eeb2ae5fec85b3f6a529064ec3bc63375028dc34e18a7a75142d170593ee174f7a911ce67209ba6c2a686b37445bffdf1f86be8a4c97c6e283782acbbdac4a0f04a9031a43ccf6f32eedc1debc6976dc036b50a42e25a5bcd05e907ff101bb46f954e159c64202324f43daa370475084a81123110ab68f7a674ad89 +MD = 534702c37c6fa8e1bde879ce4d87aa10c4cc8c8a + +Len = 36944 +Msg = b3f197b98441a1ef2bb353f6f7ea1c975d1ba5e6f509facfc533eaf2c24bb0b194ebd3869a844a9a2e97e4942a27e7afaa6ef71014cf3a56560cba726fb90bb931f02d374547b3476fff2561137ea432f9ffccf24d89dff2ea1d1f74d8347bc012696e748d72251c7754e002bcd79a48cf38ec33a71f2fca08d0e1a003a549eec0bc5ee47bede641cdffdb222d1b1217b6801f7c2b797307388cc79dfaf5be6ac253c53016a03edff966df676d3054ca353f2c75df7ff2d002ba9a14c50a205da0946b006773771e84f3b3798300a887d5dedcc5cd1af64eefc022ac6aceb7eee3e918fa744fd825f50d21017a7256761cc3f715fd30c5a88607270ef328cd4612b993c9471aa81dd41befa7576da5c19457450c75aaa8074ff771e167ffa88cb56ba513e8be302daa87e61224dbdf8dc5028d533f71e793d3f8c7cecf3d91e9556916815d21b87efdb8ceebe9a34a05362d9991636cca739973f37d32c9d085791aaebab02d873858166fd9acad2e4e6f3e2f6fe78299d02acebb95988bad87a9e63467e9c8e7824009908577e1d593f89f1895d59d9bd10c73e8bf0a6b70176d35722f0edc1e843ff9fb96512786fa5ab61caa34a4199fc9c842a28e51605f4e6f2ebb29507567dc4e76b5436788ab1ced02570d7e5b61e93790e72f25c684d3fc31b2410c3453a070ca8a538924cfc6ab94436715a940f2279c35f2cfeab1854543bd5ff8a36f11c8bfbc8b75a28ee05798164a504b646e002c35e137140ceab02b848afc0ae4b9bc1cf4f3134a0ff35bd77abf1788f4e429098e03468cbd8ca6b3aeca00b0d920b5abd9924c637b861e1915cc52aa19dd0cfbe960e299edf390a1e427ecde77cc1c3214700637f92208258f7ce9f7fae010c9ee01f485c4a5d4becdaaa8dce647577a4c952a0cb24e81c591d4c5b8c0759d3d44ed6596692cdcd2125a1cf24d19d04b2a0aa12bce92f1bfc3decc3492241b1d942c1b1505100ea55a403168d4c8ed6c56d651dc7476c0dccca1e7b59976f23285c7004abfd7d4fe4e62cd85a5de18a777012467cc8356e45525ff81fcf28b44c0c5fb7cc00b95a795cad992e5e3b8c235940113ff401c9f0573fae1e4214c1bec2ef3f42f33b866d8803ed7bf5d34863a96cf29353678d58592c21d79899e7eb20bd2fb35d8a704bf8ae29c59d6f6bb2b0f78f195ebd34d7c8a3d7de2b4ea36ba637fd7fa81c949f1f2af29dbd56529b307e3b348e996d093645549482a960cab3ee2d0a5b686fc17c08cc56ee3e9977887f8b776b827267227f1c8d2710cc52ea4e3305f0046e7d8fa60ba3a87eacf22969f4445def017c0dbf843a913b22cea9e6a3d4fe571d0ddaa154e6649d0975a3dc0a4e0e5576b25885402f498f20888335f419eef6f80ced792ca1ab104b8c883431d6d55c6e94b37ec4ddc863320af6caa8273a6a9bf528abf768048ecfa137010f815b4a45ad7f0a86c8967dc3d084f3349f791855411ca8499bd95f124e30c107dff8c598674b970a622c257273ae7e3dd51386c09b49fc97cfc207b00e26029f354644d35c89c2c45d0200ba6ee39a088aa23c7a4e31176686372f354b67344a43bc5e82f7ba0c48fba086082cc4f53902adbfcee452973a31a12bfe9074d4ad6dd36923b36cd20cd0902be827b30e53ef8e775af83eea8754a8849877ef721d2613fb323a12c2946e4968d70a4e43cda3dcf98af4469fe281b5df8f5c278b3e0f068b3ad63c4c544744d3512ee7442ac201ccfb531a05b03b41833fd7cd8e647b23afaa2249edd0de0ae1e3002e7ddfbca55818bf29da94d3e4164655420a451ce3cf0c98ec05aea5142b1948745f711630215f72e68ce4fe061f2f6f157d4446df7fdec47342223ef8f54052696773412abf5c28d07b451c3ff4578fc855e69b6f18ad1f7021f00e11f704a87e345adffd988b4b984419a0ea3c5b31cb22908d2b4fd41473037c9507a6e2c513349c45313369457e65f74ead5da6ffae71f69e8c8c004dec854c56326b4732d8f6bc036e2672c1236f5257f1eec733e2c27d321b339e266d15d3d43adace7c2fe93ebcfcd83428f7beaf6f40563888f872990a5ffd2a384543a791797bd4fb988a98b475cf29f79bd282f7213a77695020ee69b33f20ee258d3c1086a4e75b93595e9c5171d0b7605961820ce2005f9a4bc1e2bd800ed28e5105d3eb0c91f6b0e3f4d72876a4d2e5a1cf927c036fc63751c7f7f756606fe03d994e0f09516761a8ffe7633422f4bc4a219ae7152257a7e1653bc928b210abb16b017b31a2284626e46f8a30e77724b10c1de68da46e7c693e00db8d708f714aff70a80c00a3aecc26b206034ee4df84e39df2d382852557970986db2826b178cb2e2dfef9842c275b617f11e5c84d245c9d848d2936134b249853c84560ecb9528c6580f9244ec6d6f05de3289bfe1dbb9f142124fbf6a24b3fdaab54d8a38b3a3df7488c1e77094de12b0da3ca52ef95054a15f2312ffb9f82841ad2f8466cc6954bac2edd458d04b64ee7d3fdec088d726f020d803fc575f2d88d5c4a75ec9c34eb326deb3ac0bfd2620825813a06e9692b4bf363968e82f340793d3982793f9f5e51a5b2b722c3d7ecf5350ecd495d5bd77a3055d4b53b16747502602c9105370da072ee4b41b53948257ee1066e3dcd2c0340d16ae802deccf75838b4d2a19e81a561d8779c08791c1f6fc285d42f2f718da160d9857eaeb2768b3dbbac892842b6df1bcca03209d149840dbc299615406fde7e911c0328dd8937e9b18d2076d97b6712aaecc68df04a584d29ccf6f131205495321a34bf9695dab736f2fc0cae697677a2d03a58018858eb4f3ce6559c45a04f3d1e87e58622d040ac8c905c49e7a99534f9020a7d9a1262ad07d8b51a564e070287713d24c6d4f092a871e8349c6d15e1d5b217dcd5f16dc3ac428203c8ca5732e38528eae8455179e51522e6ee3d5439e4cf02a7e282571398b85f111381aa3ec1483b510dadedd2b0febee96396da9da4cd4d574651a92d5baebeaadd108a969f1ed6efad7b203d9a92fea48306338da4117a7357cbee6173aa03397c0372caeb9d9e2f5e39830b008674b0c307e99a515ffc74bd7d91606f1ecf5576c6fd5c1528f398866590cb912da386aa1857443aed55d3edc33c9aac81958763c784caca6579a3cc8bd40fbb0d2daebeb4170bdf6e09394f593a80ca76e837b9a1938779b792d98718c747ecb955816767a361ad36a8fd789c25a3377329feeed1c41281b3c1c24c98e4f4b496cdb74aaf76e622fb9798eff8988271eaed3589c4710c90dea8c68398b7a69149f8b8bf082bf9ef1167a42c1aedaf1862a484011634d6158c9a7ed274a9de012768fe6aee1d1d501c9ba7a36f9f79895ed252eb337a0f9e622953afc945fb92d39100a4ddd4d0f471a60bec6348824354193aaea8daf989e3c7ed7213168fb4b2f3581363edb54aa519496d925349e4d6cba3d1e2b25466861894dfce961ae56a127d2d0cc22ad15b5808bd796a40dc5b7c16eb7daa80b2cd7de23f784f2db35d70d85824fcb216d8f4924294d8079856ad1c61d62e0f0d2e7a6e179c9c289d0191022b68e7db99b271aea35126feb74cd11ccb98b77fc43d90910e9817ac00faf5832d352e17c87c5196464af19697c28aa08f11d123865f52e37b174c188dae00c3d41639f7219b16e1a1eea27fe84c2c3022edf5caa21833ede386a40ea19f655c967895ea33a324294cc8d41af75e48543d99afa5c60ca608de62b9fedb4375a60af8cc618d092bd5bd45e0e8635d61852581697560813bdcd237e859a93ec4489803380d8c41706f6a026378aade0a3b7151bd99e02a67c25572d9af79f5c3acd424734ebff0a46ed96ac63c3c54a4efb7671683e37cbc71eeafe870fbed165b25e91895a68b3a4c920ba3b3a665b43a5e5dfed3e8ecac33e45baf4e7d991ecc23ad6282ce6594910a51667f6765ca73dc92f10a4eeea9a10ce298889d9e5f8853fe1b96963455c4d8d898effde95a54b8a27787a41747419ee12ecfca415b182d579e319c6c006053fdb585e874e62589090cec86eb078e30d3ec84824693e4165654e45f7106fc225d46f1a58cf09eb4231b9945de6cff59476c3763f29c84a556ea3f5dd7dbe0ba63c783b385fc08d0ad4e2e8f65ea0d7e980858cdf9c76260f5c8a2f62511c692ada1eca1148afc54f3ff0cb215f14127624b795eb0b715cf9f7aafd6dd2b063197706cecad0001b7a3b8c46c633532da22c01964bbee0747d06ac66e74aa381dcdbdb4f4b40d817f1905e5fcd2084b0d45e0a99e7fdecf602533773b6ff1c4bd9ce43567ce062421d060d201e6fd02376847ba5a710bd6bf0a4f42ac33a444a7918e6e945f7c32366654291a1685e0fef64fbc3733e7a5baec28b95f642420524806e138ecf26433574a4b93f5257fca7c733fa33d14c4ca675a3bc37613f0443d080d93faeb128f0fcdca0de77e2700674ca52cf0f5ac83f84e4a56fdd63d03ccec74540dd8c5c01c5914e671d28f5743569d32f41cd56e1b9f85a84ffd5f07943e85e79a4e067ce976cccc38d501259d0b8863baecc7ff4da84e3600fbeec60f68e2cd24ad5cfc13a1521d80f83501d0e5e72dca080c9e0b03346e955454d5bb15fb83419921e4075335590eae93528b7049ff85d10be0e03aa8d0918939ad13a0309855740dbb5126e71d268a94be2935116782ea5e6e49b94c0a7a2cf5b2a5a2327af4d068f87d7707b85cfec1ab469eede455b67c8cb3f97e5ab392219cdd9671b98430dc11e8dde7e9368d929040382ff452c7dec2cb95b06fc26b45a247f76ec2a807cf9e2fc637fe37b99003b27b68262e910da6dcf892a84b1aca99614f9a24b4e7cc03beba5885d505327c29e326e83d9471bf84ac95a2a21338b8b5f9746e5f3359c91234ca0e92e3027ff309dcb90454b3633f1c29dd6c0708a6b29f9dfdfb8ce184c6d01d06f5f58865ca4a0a2707543b3888e1dfb70d48c2d9f3ac67521e570b9d48f6c1fd729f2cf40c4e2fa0db1581b5ee7817ce1a6aefc8d5aa71193c242099151349509d5268713560cdb4e41b2f41cc697290f7eff809e5144b91d976d8fec7d013aeeaa1e383c23c54d1b6c78c92cf10709e3a4a7403ae64478a7ab18d34bd97d176cf2ff6925f3b6595c7cd31ff5307824455fcdc5cae3505319476c5e172f4e336cf3f4a3358e8606f9b7ea80df4d93831ef89995b40e0f545bb391b7b9451c96d7f7226dd4bbde5ddb66e673520eff2d54b7343a622f2a825537ae6697e390499344b44f6a446664e8d0ee81b63d642ad1e4c63c3a1048e5f01bebf41bd351538a22d0d15fefc525093f2b3073a06c837bc77621a678128612a671e8acdc08bca2db9f7c1c85a4a827f9c40bf100bd3f3ca86d730d2e2f6ca42168cab1c55d8dc5b648d707cdaaf32847e2979924ff66fbced3b9d7fb489f8fd4f8239457f7cddafaf36b89918010f671ad5ed1d6db01a082cf7c6ba70528b9074779bc5a7f84c9f0cabe0b97cd0777bf4ce702dcf817120c894333fa0d0e0c02805791969cba7ae0f25af3a83ade9579e8ba95ff00b03bb42a9696bc09596f0cc9427bd2f778d41196c7aa8c6f9f36e6a860f00798d402c2dafdfcb4a012c96f4ac4e2d838c5c1cddc8b990b1352444fb5607dbc6a8c4f7dc001cdab7b4004712d642e6e06aa295aec3027edcefda6fc3642a3e61edf0a2e0529726942eb075b97abc75d092ef201ef3ebbf94aaa4435548fc94c5cd61c1dd0fe51b69c1bba75b21f166cea59050a0d3bbff82c60064237ce59b7cb786b924a07d35a31d90506a64a816551334abd6db19ab31f28d46a0687baef13cde0d59bcc601caa2cd0589bb4710ee5c5a9623827b4efc90996f7ea4254bcdddd632dead561c5af1d03b1b8e34f314f160b4095267577d20b342f0a888fe6d1b1dde45fab3c1de7b3865a25618194372e56a0ad354512e336965b8fe0d3349650344024d55becfbf6419b0bb67100431674caa8dc8c87a493a5c2a0d3886fd5c2528a5edb24fa92ee1dbb9268853c1ed54b06ada3b29fbc2947ae66e8165f35101d093846010f55a40004e10127126e73c59ce4131f22d400656508a7e5cc5f417f07d89c59f2ec1fd4bc2109be48dcf9c9d376b33bd89321e830af985d7efa5d5fca6668946cfe677f2c7906b2a70f6e3ef58b0b6f88a293b6578344e73caf6da49b0b2f19453385eb9c12826af7b0da0e484aa421fca85eb922ab32e9d0267738c2ee7b52453580fe531304500066462015dc05bbfa4e8bd7d950eacd000686028739d3a633a960a29ba515cb89dab95ca369b6a34b3c21fac399f5f995f79fea3211c07dd93a2ebebaf03c435cb33baa3c184043b719280929afdad757a3ccd80aa0c940fd8ef139f91b01203f9ad4f226112a01058da9ec53b921cd0daf14b4580e7655684db1fda04feccbfb378d1caa7dfc47ff42aa8b89e0534581c6806664834f25e22076f1f7b386aa +MD = cdd84a87e1457601d899b2abbe2e0974784491b7 + +Len = 37736 +Msg = 1600a349990df42aba9fa03f70deff0f75ae35c1a882b48caf75026ee097bd216284dc4b8f3c37f59d2e4a3e7e96355004090894494e3e224e70877ce211cb7bc6016b890e10ca11ca200c34e67e1dbe4f72f55857141bff5b6268b4a3900e75899fd96dde31b468899c6e89713dbe3f9e0f85759b7b54091e722e80eaba8ff8f585ac5dc648fde022caf9a5e77c21bc38083f53da2cf02adec96047813755ea50dc6fc390fdae63dcd334f110e24c1e6686ac5adfcff749e58e86702eb06835e3cba70602f7cdd801dfa7d3b418494b70b152f3710b724d79ea2965bacdd1bff67bde8ee5df6526d715dbb49ac5202d9eb0bb8457886820e305d08ded359772d1149bc3005c7b37a79e57fd8b92d7ab37ac6f775aefe1a96b0603508e91c234bbbd670d1d1719f2b8a2a3144f2678ac85ccf43242e8e5d058164a1667885beffe9ec9d402b7463f54484863ae2b0a1ace39d41fd71a7d7df45c2e473ec3688ae0e0498078e50b06c1b8cd50704696dc5b1a97a4e02eb0988501364bdce9f4edaaab6f7947496f2f481bba455c2123da7498c32b27cb8709542ceb8b09a30400a326c427378a7aa3319998a93b64b9fc61dbe21b729a08b8a906d36d8c99a2ab157acff310513448c459eee4d5b7602a690a7bdc8a433d8eccb7785a2f72d5d646ce18439945a6074984445ef2c0214cd54d17d6376d2e71046662bbb8d7a6697f4b28809b0fd7c90741237e5a2a034aedce3d7140c0e24a9a3b17f6f06f1b4c08198613df56cf7447b911aed49b0f0cf9b275156fe66102d65f21759fe33f67295fba622ac397f1511398562abb4c7a4124482a8a84b37f00fa089e8dda17a22a464dd747fe36296d7840dc2234c27d0d4a3c185a45e1ab603352db81fdade652f5c6d9fcaeb403e31090a985ab79fba44cdb47a7cef16d3e33899345f40819eb94adcf137b1a66fa0210251acb7add4f53ad1f39caeeace122342d9f6630253b4d8b23520f6f3cfb7748b8ab39cc0c56873909d7dfdd529227dc1358fb2ef08b46e73c820fbb6c2e96c1cbfea0776f010f076b4bb5c846996a08ac385c096422a749826b2606dedb8802c4dda684ed97139fae5bf5b6703e1440600631c9684a99395dd4fa597a4a74930d0ef3fa7062bd8a3bd047b0b8c94d0d978c2177e3494440358633bb28c383fd0c5930e1dfa8334f797152bd06813cf5b990d519bf68cfe5724a7a35d08dddc72b88054121b29d76cf08bfe542af0a822edbf5bae3ef62b17ce677ce5af1a979d161192320c82487a75b3530549bde3c5f35285f3726272bbc22d18eae37109c65ae158ec332f00b68345da7248de1aab2651612a35443db98c8307db4a739b75135a08bf237288a7959df519bcd3b54903568da0fc3e149799e3ea455884c52fcbf63219520f48a449262379fa213c2626bc6c063b927fec86ea00a772473f5ce13065895357d9530a98e5f1956917d8ed0d7ca877f3d81ebfe01b703c1d4292ffb3038d8beeb32a5640dd3f22fdf0c7e2c4402635d4c5a4c1607b4e2a89775873d89ca470366ea0b8d849b107622f79847b470e09a7c1251805a08fa21e5623ea2ba15ca4c1543cbea9ebd5d7285c746e8d01be480f4306403a3bb3573e677bcf26b214ae020c74b440143c06d2d03efd9400b5855dd3cec668ad67ae8c13c6af543f7ad08b0fef462553420ad4533fae0ab4825625ebe5172b660b0c69f39ae72eb9edd0ced6f2e0e4399677bf3dfd1c6badb31efa03ffaefd061c156a7f7f1330b1ec034fea2620e72797c1f5f90db5214cb6644cb4751a57fe294e002fd9cfe4a8040c70b1ff62b8cdc47e1b3cd804e6120aba8065cbd5b6ce911acd7d3159c50cb440f3e6f542d36cbb009141f28804be2e7657908a6db3f8120014f02c6d5c607b352bd19e2dc1a4c9fdeac0d3bb2781a04c14dd274eb9fafa92992111570543d77d9b0a50a00e06afca9a31f21aa90d0e905aa429054347d946ac7886c37a17477ec409b3360302aafb221dd43313c0a7e78b7e160dda7f2c90d16f032f056b49bd39484c4c5b096a0414dd0070e24d2ab649d364d50a0163159a8cfcf641a05cbd5d6e827f70bb5b89e4f7fd60bef2f580f83cac074c6f2b298a5b0ab5b9670ef3b2b4dc3bee78fdd11507219ee452a6dc292231f10c28d351035182e9d72fcef4ebd3d00e2ed2df8e178323680d0c9d2c5f2cbd3ed3bf0a30b7e91c0f155b2b353b43f462ac496f257ee46978935167060ca4a45d3da21e2cfaba2c920e798249538dcfd5f14d2b1bbdb36a2d11f192ddb4226dc89472adca4e2d4b1f3d1b9285b6f9a8d4987ea1f55668bc11f34d9f27d84e9ffd9291277d44bade02fbb1aa8ec84045fb0c3e5236cb8cc5b3c1c5ea890b51a188929e29da610b7be9f4cc58d919d9fd95c70cba449f881d7f180b0355a00428e62eea13561567ab40a2dc1bd92e3f5641537a58c354f339f0408d883248be8c92c2157274e487d2837061622377d8d69a2c07ac276e5691a3d5bdd78357e9431af690d5bb50b4883ef7ecda3c893ef4eccb2522e54e1abb06622c7fed702cf2eb26fcab8deca632efa3dec278c4fa47d5bb535b8196b81c945049efc503f1f28ffda962810ab578f20ec7e98ccd7335c17732c480bad74cda4aa6b59e95c0f875c53799394d6aa10293388ddd0532455c7913ec674cc0b2449bb36ffea8124b392827cdfb374e718dcb914dee0ec00ce35ba741a9af3cf37fce005d59bd8e814690ea6f5b2ad930e0227298344c94d312794d42cc648466c87c1e2c34386e212a8a000bddca8385c6324d0b4431496e566c769e43ff3fa2cb105d4b12cb69a1619df901f788e5d69c759105926f26052bafc382b4f1d73e04155e4879c8e998682746004cd868b9df66df15a368d35e0eadb4be73cee37ee0058182ddc3666ccac06785224b94960b7097b9fb80d9cf7c00ba9024f8dd0c0b6b77a8c34d7894e5f3edef3c54f1f1ad4d5b710f79a1eff02355a62d023c6bc2a19128aeb998b7662c49ccdf86f95331378ac963a5a4260790067f107d79f4c2627e6104ba3f3ab7f3fbaca054134133d9b6217c8789082ed15d7953bd2e5d7708901079a1e49547c573ed133ee83231ae5e27cea1a90ce261bb238b63b1fc5d1e66855213116db22b532c9cc9e0bc971ff33aee869cbaaebbb00c1be3bd67d11e625e42805e0a739019d9c1678526e0b905d940a8cc87f059dca189cfa9169f8323e9af7c1322089e288315aa5e27bb141691598ab0fb63d681825989fd8f04e72be61d58e91aed901fa70df4d435629ba5e1bd9f029b559c4f0d0f953337ada4daa200c9487b9f306fb41ef96fb693ba2448d16819de6215b5c01093d2b6f656c0cbfe2fa9ba99d98938cd0ab941bb1a224529786f3b05fd263a00e864738b777eb25a0e956e6a05fcb39cbb296d352610554a428b47ad9d40d955155103b9815503c8d883ed8c405aa3028d487fbe588ef7a858e67ae580763c81ad30de1d0ee42ebf300dde8d02f395a2f38f1fa33beeaac81e294b3a4136c21b127c69226abc91a1878bb7c8e877f9d28075b3804acffd2e149c3f185a131895d7bc3b764f4edb145195efec4b584e25a684e1d1ff935d5eeed7dd0c359b8e667f48db65070b799c20b50d43b6150120e8451114e4e959bedf649b825e20b2217bcabf9b3c82eb8d7751968bb32ec138c82ec7c5753250d298cb01175e53223b5fba5e654a45bf7cc7f3f200cd05fcf1c8ba7c603afef13e9d53943790933d389d804e7fdaa443ee8534c66f5e4b12c06c70b571a0bfb9674fc6cb6faf71818db7c4e637485f3767516c8a13f16ea14915d9f97640e4f7c1327d1d2bf56e9dcf20f0ec282db7085b9f33938b20d136e0676ebefa961f5af0e7ff10092cfac0617b8c96bef55c155fd10299516723422ad3978c5b0abf515ad2b53a6390a6b7e929f09c8839af0cd88951f1f33ec5317cecfcd824295559838537f2e7dae2d2cabed5540065305d4a4aba43ed1247a37b15f738f27c71f1ff621fefe2663fbf8aaca363b3f270654977a3f5ab7c1b0699e12f05227e85b9130bb5780fcd3dccad65d3321f7bffd34aa2978dbae6cfe95dc10ce3509a00fd82e49121ac7a4d88a78cfd45bf6c2f15c25e0d72a7ecd6aa3b480949f979945db38f4b8364e7ef720d847a14f04d9ebb350c9e5adef8bff7c6e8acbf89778048296e3d03b5a0a42743eee2366e9acf223720929cdc84fc2065258faa7d2e855b58f40e291b3efc06ef2ece1086ce20e94d5cb2bf2d3c0bd2aa70fa916108f3e5c6c3076a021d679f73b68639e572347ecbf357485d687f7d1b7da61ac1915ca5f76dd15cf6c6776f5638a328e7019a614796f8bec9a4b78e1c8dfa8d1b423fea6f26f46885b49be52b07cd542806a32f44ba2f891e7b54944234609edab61e41a2b0e9233b72559f46b63d4204ebef4747cf644da856d71e010380968c47683a168e0803648a250c5db6ab892a4bef27d5692f6313b1af89fd6dd32abc80be324f01098fad669aaab4ab608ff481136f51f9f96fdd264e767bf5c0b1c7ec70d8c0cc462e729216f90fe724ccf0360c8c62044ada613f5452211dd1c24b05308bf042567660873a85b40c40d699d53aed6a1aac294c3721ab7158aee2c2456dca7205a2edd3d075cf458d4d137de91f20feaf85d2ead866e0e1389089aa379922ba88b3fb58e8493438ecb23a08ec39c57425706de98d74a0f5302f2d7f5643132e3e22357c493552f2ad1880c7490b298f3ef460c4b0db5a21c1e354ce2bec1a61a846129a7dbaba2730d8ae359a13eb943e7a41e8fd1b8afb8045860322f4b6e959c8195fe059c84b2a8b08e059d47a27b68a97d2ccb5a1e6ddee37aac61d5729c500c0293b831bb30ca8273402dd63be299db91eaa2a3d784d15f041af96a9a77c889d82c9d7130329989fbd2f9f26cc2a3c5c291fe9bc24407536542a20fce6d2d807e925b64cb03404c8e82a8a31d61adec79e8894bc8f7a84705ec02cef6c7a7795e8d9b1275eae5549519e3f13609e0da1cb8e8bacfe3dbc34ce2c1aeface5dfddfe40584142eb127766051e59f00641615c9c6f0c052c950a2eb88b8c2c77893696140c19118cb4f9b1c9b86408e6028cae3c9f6848a9a756fcefff236fd1fc464caf5d1d5f05b546a1868dd01fdfc99a5ce99d301d475bb1b54cd663fb77b1738e8cbbdc7fe8bbc4d1b61f0cb9362ef0c51df8f217782a90e459a1cc33cb4144e836b8c4e898111abec2ec9849ab7b569364333cbbdebc7b069101aabd5f1430c637c4654db65daec5476701658267023436cc6e7ecd59d6a87d56ae0ca5a2ddb4fa7f4c03a60a0771be1eb6716d4aaa24103505c4d6ab4a2699114496319592410949c7aef9aeab6091944611becea4ef7afda1428d293c1d5ed1ecde8534f4d6eea4969413a4010e5c383ebb194b98f2f196af6c535c23094909256a03398c0315200777a682aed798aaeec1ef49ecdafe90bea6bbaca566e2477cbd4debbe32173cb8be14e31b58b13cf4eab36217040c6c2d86389329a2a4ed613cc7f402006f6b18dbd11dcd1e409edf8a07fcae0aa5899a8f6cb826692b8b618d03cb0dea782bb6657dcb4a74c1211d245fa2285b548974269a843216c0a1fc1283d9284cdc0effcf7d540a08bd642c4e1ccb0c8293ec48f0747fc3281eb1af61bab6e7c40575738e424082468ff88b6be20fc0fcde1297517d135039904ad9ff2aecd2dc8f0fb0268f2949cac32eb90221c8fc36adacddde06d76fb7cfde3a5f66d35ff2d33e143c9676d6e1f19743a56e8f04dc8d0b9b0ab444882f17dc1ee6c11315a36c713e150aa1a04895c2a9ca2ada713af6cf3d4c07e3200c12c51639fc146a6ad5599c645e423c5b2a3169f4d933d7fe75685336742bdddb4b49aecd6a6fe4b588479d8f03c111862953e29a1c139f8373576b4e8b86f8292baa47258e8e0b1fffdbd0198db6a6760daac23e46023e569b2cf3e8a09d35523e978db6eae74416c686d2887e8b919751b68765f9784b0437497bb975d6ebf2fe61d1160204361666c8f35038c8396690078085a8fe3c08e24d61255dbca297d5c9bfa7668d47ab4b12d0f55ef52450430e6c31d6fc87d1169952b0dac6ef9d6f1fb80f8abaff51fe04ea0c538ad900d54ba8eef60bb4f96ecdbee06f7e299024d448a2d145d386fa1fbcf9a901dde4e13fa501a8a459ee354b0438ae5af6fc9197eff5ec865ad6c9b3b841e1e29988d16b0f3e414edd2c24a1c12df9e5ce5f3fdb1c9d3f24fbbdd7716a7970b59249304e35e96273c53f87628434e49716147a0e6cfd4b8a4c98cdc94214e7e35eb28869c7977eab98a507fdbbe1f0f764d8eab25f9a942eb413f73bed88ba046551344e22cd186ecdd910e3e6b9a17f41090c5742f99b9ac8abfe49bb5969813cb1ee5bd5fea225db582ca5732078a73121597dd59ed45700cd4d633a0b68f24b30f1235fa0ce7957bed5c30fcad8f79bbe5c9675fee0dbd2f45f18f8234ad0276af7253e57dfd1b95986bd1afd54f9073c7021a29e13a1e5bdcdeb6415819347dc6ae1e09858b776d4ba04035c7f13fa285eaffa011f318f85f45b0c76afc422f1c6d9f4c6eb93269d0a38774cb9e0fb0e5 +MD = b51232c68cd82ce9ffb4bc1fea0ea9f71354314e + +Len = 38528 +Msg = a489cc5f00c1835ddaf2f0586710850752abe68d001f4e4e180b2f0043041805308adcf8dc3af1861046167f2b23382c218197e4c48025da42212e39effa3e73452f40d5299de360705842d4a258c30dfe6f3f92be7e646c9ce9583494489f70ec603f20725122930510bb7f5618ed51f05d28c27682d5ab2c4bf41ab95503a52c0522fe3cbe76c8d457cba9cfcc7da10033989a75f23e40fc304912e78932b90d063299114ca6a7e713b87a93da3ca434d9d842423868d2147ea045a54cf355974bb41978637cd7452ecb192cacf203963830e365ba1b0a7a1f41db7b061021d3bcf3a6fa6bbe01f68e4caf22a866652e36e7a567e21e9038f974fbf11f4fc4c84236661ecc35cc031d8363fb38627302bc47afcf173b0b56f681cd90ff79e77ec3c4846ceea9e173c1b75e41c3acd51db3962a25c03823dafdaf7adf0f5631fe28e6266c3ae2e74e6432c77bb10d3284011d3df247de81cef5482a67b5ad4b4f5ae475a716a7879ced3ac732694d3241902411bc13f5cd39c89204ae5a47dc79400698a4ebc16966441886ed55347e5a46f3cd0e8c45ae245dd6313e67ed8d85c194b7eb22f934b451142b34dc8abeda0dd19a6d1a95cd969c5bd99f4265067ac7d5fc052115908cfc75df8f661699c6cc08a06325afd2976d6b22575577ee6039128d7952dd27f82d85c9875ba1b8286bde06771559642fb84c37f007edee40fe9392cf1c1b9effcc8a12a324f3c307d19cf532525c2b6765473ef2bf8ead2100a03490e695a0a9c1cde16c27d4616ce889941a4480d1465ca460e3e721d40b26819a431a14d3fff4965f69cd0c3a5e97ef0cb9548cfbd586abc44de66f0a06587dee701f60df084d2db3227e62f7e5c6148497e84a531bc9a493b72440f81b7edd559f5d416dcdb5d9071fa3a040095d41253a6a8081200ed6f4aa095b455181eaf9593c7f255412e380e9a28cbcd345be172c40f72dec3e8a10adfd8a9ab147e9022524e1aea74e934807e5ef144a64d381f5d477fe883f080e4868939f41b925988c7d31b1ce4f318701d290f077a3c88b1b8cc89cfbfb981703b23ffb0bbfe5e115af35d5cfff056460d339f660eae45f28d2b1b04d58825367435657174270084822b6c3b4445708aa4fb0d10f227122a40dfbe286400de9fb83a05a6b280f33ad3e7b2285086e9b6aaebe278c31b5ff15a46ed9af9a820247dbe5ad115b0a8bcd6c4e9b4832934425572ba1dd01f91c0501d23ed04e29c5d4b1ecf711c1a9372f12f5d607aa0e2b65b4bfe60c7984a1fb8befb8ef434a5b296e7ee17144345f5b9a397ac9582779b12c429f2180a0b780aa8df016632debcf7b63133bcbf22dda6ae22f9724265692277b73220093861bc6738d4c951a9e4c3e6334773d2cc733ecb89f78f652e98f0d330b19e0a63554476a389ac1589c2a2145ec2b842a55ee86837074b6f45b3047320e0d0821ecb3963a9906cf300cf08bd3e56187340094a20a4a934c54d3fd3b4025075f4cd5c119ab579ba8ea1627e4d3c4202e92efaca716d6dea0ba7a7f5225f80ecf6e150539841b5e32cee456930e3471618b4cbefd6fbb5c9a6e783df4a82e2a40d1d7075e8f8c5956239b05024cdb5a08683c520cdda21523b7f4bf8a936f6398bb4150f1925393fd3366bd985561e60b72e9f13b28331221df168e7aac65c2c0757b67585617140d446b04bdf06f1a52ee7b22f417155a7e2c08312ebcb64ea047aed4fda381e5709fd265d9e7ad00c6271a6e9f73f1f520e7ef300c8a0a10207802204641390d0c8cc4655400c29f4d64ec5ca2046eecf157f6147ee00a0e29529ed29df7e694cb52698e970457ffd0ec1c7466923546d7c64264eb845d52a11bab72698e3083933be86708ba13293808d03e53e5ed0bbc7afea8bb3face4721c508912cfc1e14e8d697810ec9f246b003143d2c43f4487bc506955d99fca829db69e007f3eb6e391164a1860a2f8531c660a49f9d3f820d4602d231add0ebbe604399a69520a3a8f156486dfc5aed7a4971b214a502f6f0a577f8cca0fb8033e63e24a54a3e63bcf8e4ec331b04ddedfeeffc3805ff15ba65de4f8b0dcce44effb227807d951ce98aa91381e0add5216903d9563a747ceef99e6cf95ed5a653ff3808a4b9d54db3490b44c6e7b671a91a85d01bad138b02e340c7a41e9634e777485e9e897f64ae96a3f66e8adf11e985ce86e4f84cde7ac56de5f7c79f2e7dea5b7fda66e3f03005dbbf05645864673d46544e8690d5cae25e5e70e450e18beafa12e4dca37eec093af517eee2b7a69395cea4e2700f77fcca87abef4bfc95db9c8e5a455e7f47334a3f1284eeaa2c3b355ca4967aea16671b081552f0de205ecb68874b456fb5f671f381e0dcaa6ca69d94ba0d12040aa3d83629c9d014bfc70f28185928cecce55ac8e27d4d46ec3846fd51d0c5dbd9457ab8758e7a2ec8a6c04369f9592b00626d15b0a4b0ee2f92ba0d086c16d016ce7b05654b4f9adf90875118a656f2d50011707901982ebb387f3a4a49759f37a17183957ad0c778f6ecb780dab2b4df30e05fa81e6386f38c0f0ba3f37287a050d6d97287ae53096c391d5f20fcff73977239ca55c3657d1fd1f781f48e28057f136d890c28cc254324c8fff3862136861f956c321868cc66609470b7390ecb6ecfc63572d071312e0860efdcfec88c9f6108ea5dd30f55f253590cc6038a66b2646a24565600d17f8c6bab37b7640a45eefad11393a79e45f2bb92ab6e595bdc69cfc210f9f97ada095fbebe5062241c11e1cd0dcae029c3f742ced1e9ca3f6f486d9b5d6ca981a007a396bb5a716e7462642aa709377d0ea974fdd3f67b75dda8da1c75febfaa742fddcfc925e04df158e86669af2bfc88b1c8cc2c24db9399d38bd205509a49c8ba64c662435d47257de52ce04d2c4cc488c4a634e5792d3681093885e2d7e4106fef17114336ee5349f0da8563b6d24496ef0898c8b2873619c8cc7225e70ddd88c34e50a60bb83d3581ebd3736a217b74ae8fc23f36460b06410a44ba462ba2cd87b89adc5a1935d91efd550c94beebaa99984bc972ee47ef088e87e073c1e286b2f26a669095cf9d2e7b849ff51f279116be9ff7d6f45f3c95a5b6590e652f4ccb9849c55dc27d0a46e2dc9dd9a681d0dc6f293af0dcc3676f0c5a846489eb9837f6b388f003c0a8eecfd786d0f9bcd2212692135f2c1707fb1eeef324b499f19eba322215fe3ce19c9f000b698d2b2dab7145015046cc86d049ee15ad59dcd1564f30112e06444cb6ece06c01e54f4bc1dbbc9592d1467c6539c26c8cfe06cff51257e6b6a06952f415f3594876aba50ad2834095403741505b16784225ba3601cff4033e713e9caab6b3239bd5c2c1fcd22382b617f18df82a54c94b4569bbf2c4af0723ed1672615b9a8b7a67274b0e6707dc93bd17bae31407c026f197ba4e9cd3531578938cae5123d172cf4b78b61dbaceacc41c4097c49a0d63aeb6c97bb52b8771a82833e853e996036292039a42b6d97fb161c79ca8a5f16fc1696210a9f204c6f06710b5b05659aab5ad441192867d7b09aaa8584c962cc9fe020c93e7e16b83e5b2ab8d12f49cd75cffe2b279943b2d31397b510cf50ff0a923318bfb442c46fcad5cd4d83ec027bd0c4803548a8304dca0a91d764d2b82573f695f60c4b77ea9b9bd239caf741a5a54ec7adfb3f5a04072ca2414f90fed8cd92c8494ddada9716a350fccc1190db95c588f67bb037e112246fb75a31d90be62e39213e96f35e8316cffe51e3f905e9514c7890a2cfcc321b809f4b5e51a608f371e7a928cc28291bd5a72115830bea19999b01bd2baeb0395e62ebbe6f917909f70154376ddb51dbec5f034e36d5dd46fac798aa526dd4a5906902fa3ab5819753d9076cdc61437d9b8ec1361b4c0dfff4641b114cf3e6889e1b58b9bbf86ac50ed58c6f23a0472a6b9c21763956c16d11da539922262e0911dfb4a4f8437abdaf5faae74a82a50ae2f1ecb699dc40b8d89108ebdbf0f451701fe062fb7ffba4bede287c57eea4448af5e99d41c7d307d1f202af7f387f874342a29ccc9233a5c3bacfd754cb8d01eb11e2d43bfdc2828563088c17e618d413b0c3fa71666be5475a67a04803a8688bab9d038f6855537b4de42aaae1076066d00b23f4e1ea8fd228b87e3c7d3da2f42de4d143efd49f3b195c3240139452c70c41c05cedfac9ea8b891a372194d6aefd7de6617986914e2d394ce16307d3bbcb2f78b271e1bb19eba31c41d7f52d3f8530ebf0f0b44e3bf3421f96b9a70acc769bf4fd54e88fe6b1cf2b6287a7cf312bc788f93ba6018ad1415466fdbd2081734edc4580576ad943d3efa319f3e30c5908648342a4d0c431fc925a17913c622b10d793dc76767b0a77120b7521915676bd2896edf6e3707a3d8279f06b87f806a88dee508cdb536e8539a384790399eaac7b3a24e3631614cacccb6e9329ca6de0a75ec4e3c1ead8c30e722c425e5c1c9e0678cfb4783f676b17587a504961c67ecdeb20c14fc6aefb398056c6cd28765a7157d6b24972dbea0b29fdec0f437a4ba69e4c6fad7159f362d5eb4b76845faa63e02122ff37d80e5145ddada4faf20fdb7e313504734274307ad11a81f83f54841a984fc116c69e91b404dc300e95921393b55a7c52d0454b76f27b170c7f217d0d2480b8980d63727f58c0da05ca9bf7e6c1283c986a305cd134b5604985d9f6c1abfc0c4415259dadc3a3cb69fbf42f7e3ee56dcc7afb0b9381128336ba44963f160ce4a246abba462ccb2bc18f63626412da3677676fffc5c0d8a85c8629068e4ef8683b09bf70537a812196eeb1389e274fc0209954e16fd950f9415252eeb63a08c296c42767da970dd56f80a65b36638c324f78725897b3c29b6f8485f4c0c184173ce1ac48e66ab770d4ac097033b0d8b58d6c900d473876b96e868bc3b3cdb392b3c616bb7cdbc71a4ddda4229ef57d7160dd78a7864fb379c4be2c019745de5885dd2d67a6d284fa63783d167e1ac18d5333f0cf5de0c303fb962f5774104d94398cb9f56b3738399de69df7db06ed32ebd6c12dd2d4ec809b745e6c5318486c583d810cd4f229fe848f8c6bbea34887b22eb368f01177182ac27fe93b44170869574e55e7ec9f729edbd11a2ed81cb52fa48d29bc80acf232e75b75357c0191f442e878ae0be4bd763336ae338dafe3ea9e19174009d2373a4bbab948a84f2f8265171c31383f0691fd81ccd5aa4b3a6c851ddb8395320ecb56645c7cb14a099a2aa3e9775cf77579a27b1e1d1836e23cc2621c8d0a15a06c702007d97d3748c4f85389885d5534b58bec4c12bdb802e2bbb0836752c115a501b76268f561138838f0a16c25a168cd1f9cfebc821bc2e7daceb818537f94fe71f21430010f936f5042dc2b9a233c49c552db244fa54bd2868662a8f79645002897c6398a88f000a911dfcea622d6b2e7d88b510da0c52b269e2920245051328f6e1f8c761551c4ab25555d30e85e90ecf4b74ba252587b24dfb787c4f3e01c0c41c830affede41be46e4de1fbbfd693c6f071bf8042a48e711b1e5bec8194708d6682d1b8bc1014b3b345b5de4dac73f1022c8f6fd661dd7fcc242fa17253aecf6a88ca4041f8cb8cdeedbd1aa1f315da1b15a8387327f5c6790a760282c7d1e69305431b023686fc4ba676357f130fee85bda89e8b6f8de1cc31bd842559908f7a78da9d8f21fd6e83f06fb327a4b8aafc94fef691c0fc5e104a74aaec8151068b640f6c4b739570026c08182e20a69bca2c19d52894d797ffb529eb5ae79a0830474ffbc983c59d6169ddd9051f503d78f397aeb273862be4f24bc9d2f4e1f113a31ac08bdb24430b8a6f8a4ee95c0ca38bd707b1e5ae965a8258cae721bf5daff7fe5ef4f227fd7b4e2b805e171095c4458664c963b743eb05ef732a06889a6fc6792ba76157493b15a06fd531144545c0f45a4b6616d0f0cd6e36fe0be453dd8f09bb259128a2b5714cbd26cfedb7b27ecf3cca6563aa167953aae5ba390673c23e81c21a12969501aedcd53bf34994ef6590c8fa245bc67a4e23738a2d2ebd0066243f54ab9134174563631dcb97678355fab99cbf427b40ac552a04074923ba4ef6efe96a2f2d528ec552dded0d94eb2eef3eb5bb1acf7cfc947bb07dc24260278e4640c4dceb2409971704ce38b7774ec2aaedae311d8fcd85db07e7369382ae6ee4e35206f80c343d421ae59559c83439909cef11ffe98d9dea82da1281a231fd4e497849ce8bad4c4698d9afd65e8d98825c1459e12abb310ca9dcf2b73f50dde50bce21f912c338a706f0e4b79aa983f293a4656bb3e503c3f556338eca99754b72ca0be2521486e5ddf1d0981d166053ec25c0fa25797a92eddc7182d45a47d446d284249a2fbb758622ffd24662d248ce0ef906f0170a1c0be6193ddd41ea21c09e072a7b534af8b82acf00b70d4e23a1c67a2c941c36a1d7f9b70a45bec0b6a883218e765db9c1cc6fcabdef7438871fe2d0d5821784d6ca8dc792ce4f600547085fab1b7d8c733b687f34404625d580fa799c5a87892d6c28b741a7624c9024b40e2abb51378f9dbb593e59d19ab18d63e0db8dea9818254122a191a5ead9da0cd96806675f795bcef516acd50b8d8db5a33d8ccf46298e6d863cfd78cf54df893ded6d2e48b30e29bf77b99efcec1a764d1ce79417c420045e6e4b596ea39dafa845602497df2d3234bbf0bde33fbc1c2b041ee7918a62bc17d01bc64d18ace6a4ea7fd8d150219ed16df +MD = adf2ebb0c337c89334fe8580b53dae70b25d00a7 + +Len = 39320 +Msg = e0221d19cf617ed827d8d8cb8d2c8ed81b9b3354a832f1d14a402b371a0a611737c0543b0eb06b82d8ba56eb6304f1ef16ef6b143049a7bf50c4e2493aa69756d8c39f627fa89d9d741a99f9afbfeb81de1a5becadbd867245b984de125ac7e5ca1146b6abb2dbd204dfea1ef6c444367c064b05a9f556933109571d2b8cbb6b1594915e1934efc98ef39181c27dc4b8f7998286ab5bdfc91d9ba42f0ca63991c232c88351989f291d3dd64c9a5132ac57bd4a983c56e8bd1057b23c3d0e0affd8d5324cdc44b49ab6a501a407a858bda559e963e34e3b161225cb6b472ef65c5f6418e241a2f6c6631359b390ebfc91e854a80e28ab9e7d2bed35e4b16cc45060c7c26c08182c522b6f27a1bd80e7d02898cfc293d6da9a649739d003323e85e1e67813ba1020e917a1b39616d0e1236d0ca6a6ad35b714c40b1f57c6e72aa0eda982ffdef198312d9245b92443b232c09875e3fd31fc9453322fa081f2514c89f82757fc235dd2772825326e4221a4282483a00b3373c11af2b1d4bcbd7b2fbfbbb1449c0e3775fd4c9b2a7c33f721ae98190660a1e2442034ec1a00af6ff196da66ed471aedc2c6e7eec9d77ffc5359dc7f3d83e412c46ee1299bd330f73b173d8f7b84af4960dadf6736068ff8df31d9fd6cfc65cbea0adfb07ec0a8d9b548cc7315dc3511f8411e4e9a91cab3703e75dbbb548bd45efe18c9ec4c7fde0633705ce4d6140e31038aeb1c0197f4ac8999605312bdf7c75272bc0d011eced6e00f900ffab408b4290d85e5dd60853b192ed55cbe65facd0cd7d00866eb71cf559258bfd07dc728bb8e651cad8c2cc6f61a82fde1eaa619362e4e06034f8f979ce2fc1ce1d81236bff4d4eafa83b2f52947af5f02b4c353d75f7e2e61b3efd6bde5c44db42bb2863f2918774aacdf6fb99ba4aaa92b1923f851a8a9077d5a35be85f87bd1df70bf421479ea28717addae00a8055eb76f2fa0ee149e7d17985ba9a9dfcdc15d1289d19d416b19394de6115d0598aac08f22d71d0a364ce771f28539c26c0b0c608ef3acb624a76d1e33e999018c14ae3fa2a5c6d199fb57ad9f5b1ce97f37532473b029223a5973b66b3e9ee50925e9485713d1b2ee12cd130c323c9c2fce9c24e310fccbd8b7b4dd371853f93663d972eb2827f55d1ab36ce1128023a4574e29841c0efa244a985a3f80a0843c58e68403edaee2109a7080c504d0c5055ad0fbfedb45f6469988f72a7d6dd0438c79484a684fc02c1a6c17610e14cc7a5f8c62fa568a09672dea7aa118a2237286f88465a3f3d9dc220ff95d3b347e2defe9262093c679af8c27ac4b5828c6f1cecd01ffa68073463bc1ed6090192443914f0e179cdf8f4540a855d145e501e9ec5e87be77e0d792eceabd1217a905e7ce26e48879bf9352d1d43ddae7c21b826815de4a20f94de9bef22f1dd7cd6b3f2dd76e1a304ccdfdc5122b0f47a75ee3cb59cd4ca9b51c7338410c26d86e9c7336c87576cb70846fa6cce9176c7d10359d911d6c18fa8e57e23f1bd82372e1ac7162c043511102cffb693d9c5e2a7a9f6427965177b2e9be445526d8bfc38212670d192acb198d464d51f0432698e44aaa8200a4cdc476cfe7e9f3d1b447c7cc9f3246d3406f6efc23ebcab6cbad955df60a230c23187db352654c690be8f803a13710e5b8fbed1805a1929d5553d701d127c732809646910d2ff748cb8c5cdef6863f093ca551c37bda129fcd71f05ec241b3bdec261892a1b1bc17fc1d3c8625859be6d255e4240eff10653aef299b51c0b05670b03dde9551657ea682e022b69eeb2585f3ec6445765597a4b4cae1060c86a5121cfb9c7179b824d2a390db3238f96d5a67b2aaa9a8a9dc13aa1b576a8dfd51dc529bf4be907fb2886894d920ba8b675b997e1fc1fdd3dc90b8642604acdc03d63a640f02fe80cfceb93343088e6aba8f7298ea15de9d4022c6ec755ccfed6207bda015c82a8424ae7eb741721b5e0ffed847352db1cdb0d2bdfc6dfb60f61777c1952e957e52592f9f66fde7c92f0eb1b4d42592df2cd3a783dc3668c5c0c92e2f8d80f361b4155904899cee00a45eafef87e4cbd18252a901d4f72b68132135f0ce36693b700035966749102886a8006fa89a60ee97d4e01f2cd8cdafb7c793eaa07680754fc3ca3b4a2ad4a99d93ad1e7f6ed99d320255c62b02d504736250074d68be75190621dc7867c2ecb1c8bde35489bf481d840fdc1a9dcbce109a752e1c36aea4967040623a2962578aee38a56e139a561e01164a41d03874571908475405d56a8daa31b3d8983d53efae274e1633f02ffe2273f9e8c4a3600d8414393e00bd30c85cfcb99adbda49aab091c594114b3b848e2dd057a194f9fd869eee224ced5c0d2da75ac81bc19f819b7ef230d632e17aed4cb6d58e93a7eec5b04d4814ed5825c53c80a97f7bbf3d18f6bd32aa2e8ca6e9d995acb329d2a7e9513ef77e468ad8cdc21286308f0fa6ce020ee1b4c6a1d228da542239dde2f19b8aa978b27f5ceded42f8a75585f98366a9cd861d8289c4525adb8048383f9483627614d920352eccc31a5417e6e39e87f4e2690ceaac45105e120e07c1525848e18e101bb17c61134d60d59e3937bddae935d2aa87721c0af0e1139f008105920fd7b79fbb9b4f69e8b27111065ca90693af091fe04413e71730d9387d35620bf53a508ec6f9c0779df87298d6ba2ab4f73655927d88f04fdce7a6f8c1d738599a9f220f58fe7ce5731a1e5d2fb9078c1fb3002be7a87cec45eec30a53cd4f2406ef764bfb124a5a7300be859cc10a35120f5014a50a7f635d2d7894bb816f154210946a369df37ea492993ba23af958d8308e723f18c15f298c0cbf825960d355ecc493910740fa0eb9f9a5cb8c9d9c7a0001703e380986b3f4c9b22fbfe907476a4eee95b8f676b95b24eb9e1fbeaaff66f33329d42080024bf5964a1ad459217179a4c919e099ae616336a35c24296f49aae68853cff61e7bd9925bd2e770eaeb8fddb690c50cf4b4feae63a996c2d2936fafe41ddc90106abdcfeb4febf5aabfd6c0e2866c77933a3d7a656fdd1d312b8ab6c39a0ff5df02e87481f8a78f69d59776d7649e8094dd68c33117c1e193f94324b03232ce9329a4aaa637e5e7301519261d9023d2fe84c6b050070ab701e5e221304d0bc235c93799e1736ba50667a6f93a74c313d917a06a49a9804682d7aed4cd53647acbc9ea68ba150270f4b38417b87646ec2d7d3e18a464eb371eb7f0660eac039d60110540b98372f001e1fca71f00730403a0e8e3ea9f1231dd6df1ff7bc0b0d4f989d048672683ce35d956d2f57913046267e6f3a2c4beddc8e1f6c59df735c7a01993a94b66fdb29883dabfc449ee9353ba7f6f543ab7e2e6fc4ae3fbba591d5ca9958aeeaca74333c7d09713d7cc5add81fd7f8969c5ea40a4347f1e6fe37f36211f14d65e4a2a0d8e7f816b8d750008a4a64dc7b9b09adcc2fbc28c809c943469796e8de6ae0f2ebe30a653d2b02edc0cc3fe99923f9cc43fe8d3cf534c056169ebc29baa9b989f412b2d530e478c629f9bbd845c3c98000143da6f52bb79c20abd358614d97067fdb83ff3aa00c1a14678b0127f6d3596f25401f2e3b099613236f1d88a2f3d8edc1f04bc0ca476a1eaa0ffca639a1c90f9626ee270f40d45ca9f1e187667a81dc5a7a3359dfb526b715cd334708df5f5fdb749c660507c76bb40e3cf3f47581b9f9945e7c5ccfe06c5f454d90f0d67cee899bb271b898efdeb6169844d98f690543d1158ede1217accb0a940a6e11a22a151ec8c096aece1444ad8bf08212985cbdb30127b0064d070d8fbf29fd2b7f91026037d92ba3e2aad435709d8ac9a00ecbbc99dd9f26f0f97b3717560a8e65c1d6228821e402be00d930ee825fff00c9f25057f6d7ee93f2b8a3453532b4e51b04b852415c55c0c4e8326e657e4d4aecc600c42a16e7b6913a56b13de2298e3b12b3feadf1179b6575bc78bd620eef05bb5056ddc89cc94374c3f3e6b576b170848815de4ec29e41063185e0a7ee5d9346c1889859685c87fc7d85b619070f79deb71038c1e14a061e242e75cc5627140cd6f1d065e4d0dd35d5df228964f8a585b3767406ee3f132226cae32bc0cc1651f2fb1c6a9cd6c1b58f68c2831afd822e2fc0e66a63ee06b69bf3cf52d8cd08cac83ce2d3eacec3ffecdb0c82838eae1c6e882688ccc73f40063180ede89a79eba91fba3e79396279807e6734593c77f50224aace936b4b52f7fcae397ac4c819281c0906a2a70bc6dcfb68e4e6877e2c8d3ee9c8423ab973d3cdbde229dc91f7c7ca55c901885e4c74ba9820c5e03f47622f69e273c5f8074c1d2664603265ebfaa336f2106da88eca346b7471e729ba138eb1c9829d8591a3737e2ca866928a532f132e59b799125001595c750ccc1933c557da0911e0b78c593bc77cf9c64743c670ba48069e5ba8a9f85539b1a4d9257ba29071d3a7dd6946c5b1586c6fa75f21e63255cb26ef3686bedb5a76327e7b1a488957433967ccb4d276c53f0d1f07a9da331d85d1218c30236b31daf37da719a02123e1140b193bb8843dc21d32dfc6c31909c70bb70c2eac916a50665b2c025ff4525dc62be1440e663cc61e773a114770a4ff650448ead0ca5e67199b9c5cce7f7cf9de3eb7563a995c9b8f50c901cdb6699f4b9dc4ed2692a89f7bb35a91722f0e45cad80dfad399f7b2fe63ef20cc76e2474de802be2476b35a1b36f938e18f80d1fa7c579a4ff498ccda052ef6da2e8957da7784d640e32937669afacba31d7f2f0b9026cd2615da19b0c90aec6d49d9718fc0bdbe025454b7ec53d1b22d6543ad6cb7edfbfc8a1659f123f589fc555d04cc583fddff66c04c1b060094e6d398ddac582fbf19ddf7de39ba81480ddd8e821ea26dde8e871664810619ec7604c95028f56e7f246dd946f8d140bf284ed889f533da083631b1b1acf8801141556f7581242cc4a2d645049d2c9657c225e58cfe80f7138cf31c83fd31d5bbdf61e5ee4348ed27fb83b597b501049a71ff1ffb892e67690957c18c00668d34b696e70adde81201b512c580df130dffae36f26623708d7121bc4b0a44eb19245d80cd5bbf964dfa65ffdf5059b7350fdd69f74d6c0bebd47cad03bf3953fc033aac136166b7f36a64a77d76d381fc438604b921b165050b50a6a5fb5c25b849d47553bc71e1a4ea57962a74caf7d6234ea3927391f06b7e64458c4f3bd4d060c17908bd5f87d4f2a56860cabe8d55378da32dc39c5281b62de6313b56e5d6f08823acf48e3f060be48aaaf91cb6fbf8c9afe5922effda3af4253f401bdd3e717f01aae28c6baa9e8b79837064092cdf9906545fc85ce7857d6f00ee192f695c3c9f9d17e882453300b164d132f87a546262f48d06ee3c1e204020a5cd50fa293759fdf511376861eaded99be809770fbc3230ba59484a7d633508f7a6e66350f5cd481aa4ef8693b03e5c2111b0756a1ce0b3683def952bdcaa34644454377c0e6605f9021f1250e76c57114e8227ebfb1ad71723489e91e33c3d7c142ee902d7c0a200b74abe11f6f574dced02f11ddd3d1627b7e7e9482d578e9fa4eaea7df849b6d232f6cc6f75461ff47b97536839c41b4a5a41e7d70188a24f54fcde45c68dcede13b7dfc1d8eac2e878d3d163a74c40df98fb2c97064c032bc2f91702e8e92494c7e26aa198600839732cfd889c321167d2581a30a21e3b857d44373dc6088286de1aef974a324a67e9273a6f9f121763b4fd531c7b7bb61cc282a14ef4485334a4c5f10b54ce23e449371a511668cd53bf6f49b2e8f10d22511907ceea45012eda87f1864eb00f3f21f10ff598b2add8400270ac80faab66a79bbd361e7b26c5edb57380ae7476f8e1d9adc59c6c2341d57b6a61ba051b3a147f440d17573e9a3cf2f992ea87f57237455639a801e8211e1e996b1abcc71d46383ebc5b65b32c66a4f6258967056b60e8abda3220470658808031296e4990ab4b0fdc51231efcf96febc1019e11251d28011fc123da523325a14c4ca61d34c24c39e59f1bfc7c43a85cfdf999c33fba881882eba91ca53c928f251b00bc6a19a03f50abbcb63af3e2cc24c7e6762bd78d34ac081c787fb34bac441afa91b11ffba2b5fd81e6b97893bbde0300b479e2abf7e3acea983255b58b31a2e057aa4392e67e1b080868505faea21175089a6a78d4d250bfd67d8264ae76697e5896331a7d216abb95c8099b16f999bfdd0ddd585de079f8cda1d7dd787ac5112f355cf6f9488329096902da774d025dcc64c9def5a6bf21e85fb4849bb75c4545e82fccdd4bfabcedcbdaa25224d1bb311fae712e8d66c7b107a6fe6ad48587273f39e08ba42803bd510f673a098e74b59ef9c37b1d2756a22a2daf782ad7536d9af9e697099179f2a90fad91739ef6c4734a2a6dce675b4637c72c3652c836638bee5381b4cdac283469e9fafb89ddd82d0e3a7929bd4217d0f1d947c4eeacb3a295abde6e32f6c8638cb0c8f9e5868b3cb4682fb77fa791563c4b0ef9a122d85f7e43ff7e78064de706769e07387d3822eb27e3e044f84d6815060e7996454c1306d0876e0347331f65bfec9bd94e7960011e484ca3c0a6570a7ec8cd1460797dddc5e8c54b36128d090137306e66c98494afcf45027d26d38b39c05cc2110ae05198a61cd65f66a08edf006d5e52a2f11450eb71e79a594e25ab87b125e35b0b00bd31cd2b2f9a0a659dda9b3f9e90461ea62f4bc9b4b827586871529633f42e69c83e5ec023471b0be2184278a70bf402140d4b3f38ce0f91e52fc9b9af50eb0b3e1e6a1bd6d86300305c0b9008807b7d2ef7f89eb3056770a6157f06921bc153834447c4b6d862d10d185f1c3f984cde5b81cc9eafe8bf532fc4fae3a89f41e14c52a0214fc1ab0cdcd +MD = e2eb69f7d6fab720a3f038ac773b3274b6d113e9 + +Len = 40112 +Msg = d2799441abcc3ba3bd2aa715899eff2f18a12c453c483e3a18bb0c99e2e91be1e87ac221d1058bc52684dbb01105d68b64a27d5cdcb2195aa841dd0025bec760ecf4c7ba0e3c234d9ef01a6d7022c8d6218e494057ce21334acddb1d847ef1a2e5ceec33e9d7cce22e56aa74305f9cb8574fd91835031e6e084750198791624fdbf079b4eb3f4e2cdc9ed4eed8231cdb0fcc750dfcb8d7b2ea97821bb660e210d642b6679adc71d5b2b0e003f1d50ee451ed6547365715a8f7a6ba4c9a51398ddfabea728116fd82b87416da02df3b7e239af0ed6a47a0f8375a3fd3bacd2e6dfd165ffd2556b9ddf5d3be9c93a86b4f8fbb5f2721f04049b29c5bd99e3d8a5839685b3110026e8e71b31f702d9865ff9c38fa1fe2babd4371555486cf0715f89a8a2735c984e43d34fe827f5717f33752f909fa350dde8f7b6b7301d49597f228640b32d842e391479a2ff1998ddb9fbae7d4e3a2516cd5d8c80073354dd8f1ebde4e50c6a63332b1716eed7b62e6dedbe8a300b2ee30bc915243037b999f9bece13ab619169bc97a69879b86fedc9dbee5bd79ec4cefedadf383da2de0b6983253158d5cfce5feab6cc12441ca858369c76b77d9d3741034920a1fd389e391c51e28fc14bfd7784a6166b0342ca939e674f522ffec86cc2f161efbf6feef2eae28bb2ccbc73ae0622fbc66e88d0f663dd6a3a1e8fdecc9a56908961da6a216f45b1645087cd5ddf8c00c6fe45680b374d4bc1d1c706fb09e721017d0e9c3f29f9d806e5446721816fb9df3b0edc4c795558abd21abd72922197da7972f1c69b8d843cf368dd738c3c8b919d5bca34ca74353aa8118ecdb3a46996dfbe0732445f3a59136b9cde6080fa609da29e5e7b385600bc41d756fede1aa92836491ca51d6efdcdc321ccaecb8adec479e5142c003f90970243c8c44d2f93db8243e04e16968d7b1608c8b77ac16eaa582b005d6a566cc0f9407db4501ce972086417aff945aab3cace5d2b1d1292a7b3dcad8fd53ee7b28d59f04fa5771c845f364d3b23f0b7f057cee46a3102ed5513767613ef5da3e444fccae6bba29f7afd46db80352c47c9539709054526c12b0d74f4ba073723fea6a55819f133f4ce48f25d0f8b5cdca734c3457cc7d2c0a1e87493c2cb5fea3a28e04279e4bfbf06e8e54c49c506e90271bff44147ab6e425af1fdce9a3c695f5239f457048a50bd537c23bf40beff73a109cff333252c94db597d5df26123b6991ef861ef485c49ff436de0acf97263392d12f318c48e11d027acc162429bd8840bc8fae36e344562c7a55e582b0459a08687c176fdf531dfe8f6c97865444da98ce0b2bf506b3814654478d0e807ef8dc2790ecc56048d511a05a6935dbf8e602eca09a1b3738a9ac8d5c0b5950f7d475d710b87513e7cea473419418060034e4e0f6058fbefb55c5ed3d664d67d8b63b40a7836740598f1dd2c721161c844ca770b67339e3250df93b92a6d10f4a269629fb56832fc5a0e68394171967aeb7b46588ed01eede5ab04102d4cc8e75adee5bb438b128548a654e517e082da4fc7286137acf264dc252c536f6282d80d2ab9f7b32d9722ed404fda65ecab78ea3489d00228bd49bcf4790d617cc34931e35bbf84be3567a062a563ac0494d9534a070f6ed1d40ef09f86a893ca0ebd818f577d28bb71c61a93e23b6ab6c37e138e1c99ee46db272f7cb1af76f8c997448519db1fa3d0c0a44aa2ac1281bbc9937726ea00e64724c21296ac9b778889236b2f33fa15e6d9d5fd534043e3e25e5b7bd27a374e8c7a40f7b20a71d4cfe586b8143218700894482270827f5bebaee4229be4f1ce2fba24a270538a7f044ee6e245302b40ca625360870d15581c3dc5f1ef94e103b54705997e1255f4ca27dc705eb88316b0d6802e032aa677088d79704a24558d91b33c4317c154d495f2dff8ad55b050306366f17175b3273510670447fdffaa69716145f9db178cdc5259d1dd82438bed8b70415e78cbe736591744459c20089123ed0880ea1e8c11a8e2925bb8bd383cd1249436ae414560da12b6df7967169d2d68013958ca50ea78f2b0a4737dd392b70c607670c3b06915e1c27230456302004ac6afb1bb89ab4512c3344d15eca3bf804caa8ac3b6939efcfdba3b3b6c544f0ddf407f5284f89fcb40a7a005f1d45d38af5f36b1d694c7cccef404d991086c49a1983c2fd146db749f6b06de61a9128e0ee11f1e8ed142f9ccdc27708f92ea56c41352c3fd0aaaa755fb0c0fea966208f1fcae7a4dcd72ec6dbf1db096883bddad4e7d9f76d86febfad40a0acb20ee31eeee5f55a20dea1d2839521a745ce346c3a5f712dd24adbaf4929b5fa1dcf9815c52cc211a071b1482c75f1e7785732aadc669de7e73d68ce9932a8efd2f267fd0b65f7d144d885b13d5af1d3e966de1d20c3052f94a9cea306252193babe795c28593ba2f45a4795200ccc728143604c6f40500cc1d434b7f9c9c7efbb7df6bd84d0378d98401c7a3c5328cc2636e1bf32a326875607c390d8e5430abe7506a58792939918d32eeaf9f7aeeac18689ffcfb531a63b8aa3b80c423cedacf0cf9e9966f6cf5c58a56cbfbf05d33b7c7f93b03e167359a5fbb7fea85b9e6b347c2f221508354d1aa989f674d58f7a60ec033b0680f696a0f31315de4827e58933e18a6872d6d16060c706dec827687af7d8dad41536dbc2b556b8aeaa8f00391c3a3924dcb7d171f5b158c584a2ec11c999f4717d3b1155660751de2adfa68b61c49714ede236968ecc52f1b108ed6e89cef0a6610d1e9f31af47376f1ebec627070dff4e5ee61754a25d2af86255da6000383969b5ece93cd5028122543033998a01aca733cb3c6ebae23701b70b9b76b633f23c3a617aaf01ea84ea8ae41adcd5dce49f6acc4d049c47e1730ff7f9f278499b83a4679cb3bc670770c7c1c31b70076fde09d09140d1f6f0f672013efccee2fae5fbe595708ce1d45b13b1757ce4e8150d1bc15148e0552c34e911b0be4166d90b48c2ae0dfcc0b154769c7927b7e99ed4a586d54451ce5cd27b0f995d583dfe9c93e82fb2916c6703f96818457471d1dab107655dadc74a7b31e33f049cd03141e23e6089d54dbe0fa3fe97fea0e777c8462c49ba7aaabcd51175ebd993853ca23fac88b74fcb7d217d464179c5b558456dddc88543de7b8826ade404c7c5e666b11af167874f6ee08d285ddf6a423cfa2d022be38dcb4f3d757474aec0f9f6364170e1bf063f57f5dd8d325718f6eb8e8e83bbfee2d9ff9c08b0e1ff048735b9f596a1e753050107755b090a56392caa9848bdfec970554ce64b741e1dd96b98d7757908f60734bf5b7c2a20ac73c9f654397c0bcbf817f6172b753493555f7aeff3b04a78afb7c599d6ddc0a20c8819c93f3f4b6fd90e41a43a2c68ec65db0843f990d4606454c037536a12c16c32bcff404de93d7b02d6945ee0e3b270a5eade705fcf368dd1583bda183f90fc8f86ff25ef0bbd47bb5cef81dbcc6cde86c7c53e66628394f736af52316f98226620d0d76dda78a3007cbd8a634ca3164647024dedb6cde08e029aa5fbc95f4780317a3d0f7df5f89ade0761c18bde82ad139b833cf29fd95e6305babf766fd4a662063e1d1cbcaf5229d5ee3db0a58983d39bca9a3f7ee72e02f779c49e502f9e5b7bc4dee1562eee052d191ee480938f2e070951c5f472c88778ca546788c230c3e1b69bf24adf361c19caae4ef8089acde928a7ab88e2f2999095b5fca1f4264341fb9c772029f413a0e9331794516c58480ee51ac39f75e048c23083232c4782a27d29996173ee95ca5ef666ddd4cd762da552392b111906a7390d2594d45a290c238a7f9427ed48a0113f645afa85cf9fd438314aa1a5b0b6e394097e5328df87d5065341acb9d429ea5638932b5b0ca683dd29a8b5e3887ca60d586811794d1c7be63af06a1ae26ed2820c10d019d54a9a8a4acbb79936016bbf39db76141ad2fe735e2ac9d81a75af0c055a4f85d1940287bc3d0d90624d1bf3d55eeac3efb244f2e77631ba23486b3c4df81268a98ba11ca6862190b3699cf15379d54c74c236aefd5d0a8aa6efec5a0c727f8905386091302c5961d15cd801dcb49f78500cbceec666bc0e4a701cae695100b28ba1272d84b91fca652eb56b9898b00f2c98bff96d19af0fb8d5e1808d1bfca9e6d0df3ac7b5da9417e71d76aeac70d9af6c251818fe4b5497262517a05bdb37bccd6efe24a6f1878e90f76b4778489e8292d893f09ef9a79069cfbcc9960424b69ebec2c116ce6b73312b928a859e254c12beb21c801fce4ba8c7b73056e1387b4db6cdc68cd8086dd0a033a05adb37b6f2c1bdc42c27926feaf550fe22d93bb4e23d695c91772625774096b080689c683cc8fb122b77bba43841cf5b8354f408633ddcabac138c422df203e37dab1c09f8bab52c0479119499937b6e00ba2c20da9d6fda6514036dfb9ec161db0e7e412c81333a3f935ce515d39d602174aba34e456a1144e3534ee72c195121f88cbae204bd65652f633fb4e97d586ee8393ac81c157ad2e6448cfc8553dbd8d10c19212b9bd4fdb4ef4b7fbd637f707f9e8d4f0cb73a96869dd03f8fb7298700c709f2de14b18f8ac8b07d3797fdaea1a143ebfd9a7c182b28c1ba338c60b6ef85305b057121a319b617b64060f9b0b70c04a4d50466e13eab08745a1cabee050e366788fb4ec2c8812833be089bff27a57a837d3e207825ef4c75eaad30b5aa29c41b4ff7607301f08afb9bd50d225b354b8fdd90d3654abc36c6cd88179646a0828143b07f3f2ccce616bd1074a1b9831fd1dd41a73113da6e6ee9f58916413917a04a6dd1adafdde38d0e00fb05ab599f4f669bc363ea109b75283baebf04bd2c804d758145f3eb2a6774efc7d5987d72135ee45083362765e470a4ad18f5f3682a3511b58f60be62acd9230399e8b84125af65751a5fe876c2ab76aea97da574a5e88996145f1d346524e5d5da02d2b48b3f665bafcd187317c0fadbfb0599f7f950254b5b56d248993d7d651e5093724ff82f29cae78207eb97785a95f3989a2f542dfcecaea345500c33dcf039c32479c00708f317edd847183853ffb06a054edbe8d350d059d492784f62d52529710f813820b3c5208e322b81efc2a5d7df5ecf9ff50e22bc9c686b181e577c8e021b2208989157e4d2b5b89d556539a7d068179a8dae0e9346d9cdd739fda7ba7ea48bc0991636014cd7a7d2af70d3a182729b21c1b9fba879ee84d5db4f0c758eb3a4a74ac8ca3fa3a0e069226cdd8f9a87437cb9b651c1deae79572ad61487da4f5507d4327b667f184ba9d8e0be37c3acf7f29e2d77a71c2194a8511927b7098086265ed9b23d8a48d1dcf954de61a3eb9fcc98a6d722dc4fbe0f76a1aecec44e1f4e1147d58d69375848ac50a5d7e24b2353ceaad8f9c641ddd3c2f40f95b2c208c515034e1ec7edc9371a5d7b6029d56bcc69c0e2f681feda3d5c9cb4d17ce329d3919583b84a730def6b02c8c3208f5f8290715ddfb68e9e956c21034dc9ba6ac2ad86de239ad00ab9c6c8f4c96e83e8bc6c44b17d0cfa10231c0966d0424db4d8935cc526600caadc5336673abbb9ecc125c147982c49172e92de44218fa6ed5f68a2a28b4430d4a23cd489deb13754dae27085f8bd839d00f627050957cdff9d57dddc18ed437051a62ac37cf607094fcbdad46468b189df716d105042c8d0db8597db96044d6532bbc17bde3231f2680a869da5d5d9c3142b37cfbefaa14a601d5707cc30579d8da3201aca0ebbf66dc4fc4683ab0632e64b0da91a2460547645a6c8841a67ffaa86cf090931afffa524c539c6933dc09ff977062e6b0bd563250b86846a8873d08b57af634514f4594f68dc36348854865ffe4ec074acb770e70ea995c7bfe148da3f739feff3bcd1706d999b37eed6e2a229ea99ea4ae1e5b037997fd916315b9c0fbf87d9534155ad5dd7bc43782ffced81408173ee3b0aab0fbe0a49944b4ef950fae1ab3c6a2d2ebffd62012c451c668db940b79fad26fd1d81febf41186c18898b760cb71fa01c1b75551814018935d5bd9d60651f83d1e94822e2267efc2242dc0ea5ca48f79ffaa65d31384b8d83e1b561134879674dfc7c3f5b4a66453e0354711e80ce7bdee2f842f49e0c6e783a07547a51a31b99dd861dd1b6b99095555b661ede9771025ed3cb08502a753b671d3e3d8785e7de14cc84ed705d254fbf59b64dee8c2432f39fc216568feaf5f05ee704f30812442ab83c57823c4c93cab62955b795db972bc4edc5b62115cd5e3117769b12e6f2a6b10cb6f33d4d89fcdb87db419bdd598daa14be7aca3dec3700953b898ca911101ebeb3cc476f5ae02e988a9584739fa1ba01a9aa71ac7906322afcc55fa4c8f16918f51444fc2efb182407ba3ae591f05a7b2d4cfea89d502f9e6155711f40d0f9e325d31b3a2cd702f2fdb8a37b5901f349f26a587a809f5eb91143ac62a03536e6ea12b4727dfb52cb1298a97d1c5cee34a10b696a497a2942b597f7b411a888ebedd8f7eb48ef7277ee613332058ab104e23818bf216af703f457395fbbb257b8d52dccefb63cc8be3a1b28e33912a6815cf84dc32ff631c2778d5ca9c5da0b174b191bc4ef69be689ece72d8e37c3472b853f0bc9ca63d48e54047db58a90ccdf7a5ccb31afeba3cc183f8592951c2a19d51eaf38f02845de779e23c9ba6c3a580d8c704608326034c42a2ae3318bad4b4fb21b031936ec8253f1516b75996668fbbf4ffe8816985e611581e2a5983d4a5587e3ba9e06453469ac8afd34aeed7cb543becdb80eb8a38fa02f2369d85691770e9db2071ccc4f392e351180234c2ddad8512600614daea0488737e6a285ab24c4bd9becf0fe4d3304e42ae08ceed6cceb8baa09d4c3ca337d2e62b4bd4711ff38a7daa81967b8f7bf2cabce4262021bdbe2cc2ccfb7a0b9cc99664c5f174066d900f0d0fc851ce7cb5336a1fa225a4847db0ef1c895acb3a53ca5262e72c0ec343d70e020c2d393980c3e240acc39c2bdf8e4f135ea58b1a59c91da91e +MD = 9c5bf7e24e8764745642e23e7cdc5fd44f91bbf9 + +Len = 40904 +Msg = 9c4ae2217c928dd5864836be5d4ec281211471aa441a594b99b013e5ae01b48c5c4ffe479c80d8b69cdafcf7130bf0c9d16c37f29a86c8df34d6bf8bbfcd53a2451b08e5922d25d046f4697a28e9fabebd4e9e981ab62dd1f6c747df033f42077f3566c405a25d6caa1fe51145f0c8a50e420e626bb17169060d11aa235e6903312582ac9ee566d2f0e2d882122942c9ebd0ef1a357f7aef8d3087b3c632b0e08374c36505002a4a41c6aa96369b51717d81a986222932abb2b60fc495c400e49ea990b6e1fa901cc552c3155a4edbe4ecdca46fd8b680e59e2913a3381b3f59aa4c5368dbdc7f8fa30e8cc7254bc96b5f6a499cff2e4be47810fa19563f5785cee673439aade1ec04826b744099044efeb1fed7409a7df169f42cee97392eb133fe580fc7759d7b0f37c9e3524073d5f23b2ce64301fd54995c11eaa510ae24011c6a94093d9b84edb40fdd0449fd4863903c92af6bb3552fd011d525ccbe285fc8119a090cc34fc581a32afebb8cee783694a32ce0873c54d89476c2764503758bb5e86eeafd24c027ef92e79e07105ab79ee1646961502ffd029622152dfe6cecbe47e1df314a062d59dd67fb55f6319bc114fc0d29dae9c6c3fdedb15d616c74947f0af4470abe1b4bd228d960e8246864039fd5c722a9bc3f73cc53bd749ca99f58903027ac107a2c3acf400f2e5ba8f177f3c723709865dec06601357f2515479a1c9cb97825d064dd07384a0fffe2cf38a0ee260cde4c09ab65c5adc92f40f50c553ee6b525a85b8376caf9d4389f660e4f4fb63da2f626fe6ea70d9be1b10f77e42094ad388778f4c4fd05c62d661ec1a8f4bc4d0ced9f7f2cae3d3d63f0ffa3704aaca684f725f79ada542a07bf5f1852e4218245b8daf744e225f7de852b58a2c217e9347fca56a067cf4bed3291dcf627cb2575df412d614bae117af9fd5e2292bbbe6ea8cdd77dae5e7008481cd53bc6a47dc3ea3aeb29f2bed25ed2db7c97c2826c5af89743d9b7eae0808868cbcac893d458622ff744de3e83b39b2f7ca958533d22f990615e8859e47c7bdd864a357f705ccf871a5b17176ca0d96024015e1577eb3320fbb22b95c424a7e4cd6415529af6b7aa1c16a62fd54e16d63d47dbb263e02db0d77da884c8a196e36ac071f39a4ea400c51c927006e4d9f98e23d81149266fa6bf680510381bd0442305504ab88d1df1dd16e3c1468bab31e13b5c1a71e8816c781a4c205bb9db6dc1dbbb3f3cdbabe52baba209df6b13e6fc3a6fb5224cec68cd3c859b7aa441c80cecb9ba6d5fd4447884d63217ab9980a8c619caa67a37048576b66bdd048abbcbdd52a3954223768c4887233774c567ad876341439beaa7676fe977cc003cb0c8598ee2faab1de32fa0bdc486ed2003d327540242d78db83dd025a78fc0e10ec906765fe4c34cf3293481fd4e3f31bde24bf5f6eb55a9a1cd4073e36d6d003d978c11039db2370f41abdab6d59180fba19d4c03853ec5c9e068da13b02f22a5fa9468b46c9f669d41aed1d7650c9626d9c564125ab96a983df0621f9e2dceaeb9c6815b98b26207efe46d4844d7faa7526b420cb0ef1f76ae7f13ef80908cc09ec966e16a15b2b313f6b6f1ba1c34e4d436f0d7d0086ccbf9bdf66c9d7fe4436f461f2c2aedde0b778bb4bb1100cd4727ce755d022bd9ffe754127c3f235f9ff5e4b22620656f75e24c708c8fad4c3712dcd9848d80ef7a40e96f08aca4843cf84c29b693a2ec5b1be0f14e7e4b391c5f082436bb3035a5cc2716f92d29dc8240258bc3cdcfdd24ebf13fe724011d5dd4f95f5ad26334e652b30e350adaeeda9418e1371412ca381a246341caf87f643a5892d81b4072a69c385fa68be042aabdcd32f9b1933cff70236442b758e79858ccc398def0794e705c1233f863605b84eb86f1ec7bbbe1b5964ad43548dd61f8fefc81639bd14497c72ec3988ad156af1be6070cf2cd46b0241ede8af0ea27e095447df16700f2d922bb40b47e1c02060458235b1ffc962a76e747ff799552d93aa474d17f90befd15c2919467c9c6534fe72d1f2bcf39eb34adf9dc0b674aab95224c4c090912cd47499e806c600c5ca3980da13ece97bb0578db69cde7781e4dc9eea82ef1550f615b4fc0b56a3beaa975ab297e8218629151d5eee89d42fa0b9e422d15d2ef8c0afd8c9b6b6fbac50885effe167225a7813fcfb28411110676ab3025e733480ceb393d5bb6f5f3b569d0c26a2c2724537d4bb1fec7cc4e0b37f7a1d6cb9dc857ac164a46bd864d82745f0ab3e9277f2e2c7c631adc555fd1f58a7b89ea97d734f49d9ba5a9a930f3d039b12274fc9c0037dace4ee934ae20596da8876ba9dd6c6bd418bfa1e704d226669dfff62de591456dd8e217f2a1c00ba70e15775b42c7bac5aadecec632e51defb8929643c0a9ff3e6a1d8d16a278b240977e36366e0d8978374858d020f55edbe8227dc5970f0d546d4874281812f6412a08cfc1c9067ff3a846668d37c9903217f9d23bd18c16b7c7abf3b06b5481b1aefd6b84bc7a4540e6202084df2b5cfd2c5dbe2ed6e8c270628e33370207f8980da33108ad308367d81eaf3d81e16a430f9769250eebbb8624395b4447f306fe2e434ad405f1e06e65883b4083b4610ca8effaa8e15ca601f7f39460a1df51ecf924dd712d85045f77a5eb164f6cea60dfac993fb7052eeac206061278948169569013658bb49841f5bee8464bd1ac489c187073f8acf9486db8d8e235db3f7e2dcd143a8946441dc61b5a58e1aa50cbc779a4cb0c1aaf23df5233583e7a3332662407778e02affad40468d478c17df2481860d05b17f983021b3efdfc39048de9dd14a501b182e006c13a4377dcdcc4073dca084e6b7f71bd5d2258d7e25a979e40654b4c1b64d84499f92d48c41449ec300afd4bdde8f4f85e06f2383bdf596e951ff1d608fee876d6cd185241ce89e0384937bb36dc159b681351850e39da3f236d200740f81b84bedd8efd1bb28dc99eaf3d073e05db8fc170ff28211022fb33755e478af976579a5216b119675c91ab639695bd084ebab14784873c0d3a880d5f36feb0a903d5b15339d60496fe1ea48ecdcf7b90760582bd660c29d729d0f9542d9478b1c9e74d097dd4a4e67c5ad457671c3f435c587afc2f1daf17f7b93f7ccd71abb9d076b49c6d14c100dd2b82e7eee3d3c9079ce32c66249575ad2d26fe9dfe116821682f338efc238b297bf565ea8efdcb7fb703749488a4985213f70225a17167c3a706f66af59130683176fae18486f1cd9323fd40b1a429ee52fbb2eec3945dbe19810e8868d597a3354dce5d2d36e2f8178aeff2075dcf8ad477347fcd43f31ba8e8a370bbb567e26fc208e5f1d447082a827133f296332c80b6b0602544d1e13b82dcab58fa492bc71dd102382ac706b651ab89da19fddf3eff4f1a355f9e18b998e2c0a56ce48825a5503a6afe0bf9a240c67f27acd4a8f6993834645e03c80c72dd370cd2e10071a3ae18ef19bae9d697ea9a4118609190cd95361907a7fa1b58f499f3f5e79b935f12212f437dde399e3e6490244aa1f5e38ba9be2433b6ce924f6cc49e9f627321a5df9343fce1b59deb647d9a3ae00b234414ba7b4e020d67173be693b05cf9318ed981e3def931db18226e40d757bbd4e8ff75d5a1e8c021748bc19dc4920ed6f69762e9cc2f96a1ee27cce0ca0dee409ef257f9d36fcf068de6bd83800a985a05a29f1e6d8aca3795fa0040ba0a8aad8f76c8b18d9f225f8bd3420f8ece8003e2819e4a6a12b6e53423702950577864e31230c37781a27395dbb80796e6af1ab6bcc9356acf42f3f42b866234fba1adc14ff7f8381c358cd48487343f580ce6a8dc87a616ca57a8fc99a9b50dfeeccf51b485187979c4f07059175e322e7eb1e1683f67160adb4d75f540e884694014bdc942ebe19e38e890dfd14c1770efc189e85b3e1197b82a86c8b5c4404387c22a169738199577bc5ca01bc895244660c7e442f4af7ad48758986f11ea94a822c224eac9c8666bb4fd235e9854546bd4c3e55c5199ba19ac12f0d69729658b7cad7aa4649717fa189bf00385fd074565a672111c775f6de0dd55521da6bd181813a02ed22eb20e2f5d9070573846be5d9814c91ff072ba6de1514b6d08a4373d1b1feedb343e8e426c8a0fd6ac18bd02c052ec20adf9e799456b294df822d035ed7e4e4652c46299f06647ca02852b9e47b4e2e856ffdcad322c54861e40cb46b245b5dd2f4b727c10ad7ffae195ee7754c2133f928981f0cf1a35e0210510b992fd8b6674dba633f4e6212ff251efd51005e8ec09a1beac45bf3222aa7a87d6b42d37aac87ce605c5999431ddc01602a304c7b9644e7b27bba3b41660a519e4415d2371d4371a3cab4e40c849ea4c453447196c4b99a0ab5a4c2482ec90ac2d6015b6833f132a1ecd8e8dbcded877e5eb5747ce6588157e4944e82ff54329f73ade58a7b219fef454e0e3d44591802bf1bbb7a75b26c2e8b1136ae524c4798bf73f71a7d5507e0567cdaad9261d505f6efbd3bfd4788f33ba3f106b211d8231bec169494fc0939b2fdc4a942885cec989a002dd798865a58b52448b93562e30b7eaa956c97123fcd4952bcaf4d0e1b06b31abcbf25d2a884dd46d0b227564d20b459795ea6c17717d80b5463206735e3c36384fe6ffc822274bf2b477840c5de2579cd05bb85842522651cf89306b1923381032fe7725bc42413d4e3a8a0d1a63aa21cdc35dcdb77c0e652ca155b02a48be9b3be1cc2b9dc63db5a113905151b7c58c55cb645d1823c05b26237d2cd9d45041343706c00fdac8c274a89dbf4a053046301bd4f2ac6ec59985b7b0c66def766ae3aa2ece58a669cc91a4b93f4c7674b8265ab573bc86a4891104f76630c0b97e12e04a3cc153a83bbeadecb9a0321849ff300fc79093e59191b359f46870a0e5878165f292090d78c46b3f158f60a4608247ebd870bc111bcf6bdf595e26b4070b3684d813ef21e96b88b93b5f29a0677944508da429af8e91d5907b5a0b7b4d65a7b1d68c2e6bf77aa9631458b495c5aad247ce73034752a0997443a3477f1d5f7bf3d444ed730abb784386c42a0be2dd97d783277261cfc45e9399830148e0bf5a53ba8455c28bf49d647ae9b28826dc3b0894069d866dc4ccf66640625cff4eeed770948edfe0eec0cbd9117596f96e67e2ea59ad3d946a8ca490239145e0d4dc89debcbf527371888289829abcc35ac36e6b67c90fac7c46a50174b68bed19cf71ed4411a4ab459d9074844a83ec69f6b3007a1a831dc3a1029f7bfbb48de46d968373ab5cef31a8fd8061ad71dc63a9b992d8c8214f0746c25480864a27fe5e008992b502a9fe51d1975fea10fb10838907cafa71aa10dded07ca7fd525304bb7e8e9591f40743f15a0c82ae8b2372d2a4998d8fc97a50d8ca0a20fdbee40dcc486c0bd3a1c5b1bd183e2947f67a24ea43e8a8b497c907ea506505ee6eaf6b82e4d5f09dba57b8c0b28f6515f83178f00d0e83be0c297d943231c937d811c88fd240d668a439c3bcd774b88106f5f9845e6f90f4ad283c66bde4dd6291b78f339f214fcd05e85cf1e582b62189242107b6706300e121bec271f2d517020d4a2eba1baf2345efff107b3dc070153879fab3d57c6b4ec29f47ece0229ddf8f63c1b1848703fabd2498e70a79e531cf8eedc4f34f8c5c7738579d41589f50ba66acf3f05a077adc67ebe77d44f94545ba51685e5eec80bc3481e17ae9742c2aed411fe3ba866cca2399cb0ab444e62796c61c7b1d1451fdfe57780157b4b83d521e83d30b094713021320374a208b01ae9c6fde2c9c46d8f038cf7915e98b7e2fa5de42ee1880236df875976944ba505c74c0fbefdce5c9d4a63656b68b2c79e0676db7b62cae97d1aa398fa409ea904acfce58e96ea54cf6406b0ecc02019d1ee3d0a5f5ce28ccd7b8faa48ce8924dd41dc6899bba1bdeff67dc2598f6a174259ba5a24f75955eeaa5275a867947e592df77e29957a00c3abce81fdfc1928bbf0f4b1105ab5aba74ef4e36233482040185210844cfd83142803d71f30b4b3025bf3f96dae81f5c10f7edbbd592c705aacf707f307b2afa91824ab0652c322e141bf18811a429d0597f7440201c9d76f8eed49beee22ec4c2137e4fb8bcedc1d4a61f895c7820a388b67087a55a5be46693cc02d2ad4a3c3eb466c46035e49811fe07ff0ddc8a42596d60e6a7a4a8ba8e3ed5288e3503ad71f582a2fe1fad1d4684497dc839dd3935e4d3e1d9b40a85da406e916401f1b50657606fe4e2bdcddcc95279fe188ff498bd380dade0d7b2d55926c206ac8acf664a7e8fa7178d265f4dc168220119010c671bce86b3b6ee09e96c3ee89d35791c5f3b86c73691b3488214ecd68c0eeb0b72eda906b52e73d261cd6c8c4c983e82f625e9c7b861f122f6ab6c8e01e81f10512c21a06d8500d962b8df6433197c44bfdc3d2b25847c791c136bbb1b2b29b58255dce6357101895ccd0bf2f93fdedc1cbcd563f66f91a572db6ed0204e7755a7091f3ab568f26cc06876db0771c2b38d4656f4b389ed529b71ea7fc9d8948b1fa47d3055e35ffe3e19a46ed665c4659217467fe579fbeae655631c70401dc05cb68b49af66a6a8165f1930fe82505cbb9e0847f4a629e8f4147d38ac1b6f9ffecdadf92a696314e9b749b3d83df3136a5930ff799513c7453d7d56e5d0f674664879c14f6211af48a0ca8a0c1f29244eb734f8dcdd36203a2ef7e9a5f76ed833b5533486f73ee183a9f006029c7f09b956a8e6a6d4fd6e7367817364f52555e7a2eeb5798f47465b416eca443c413e3aa5f12b5012f61c61758e86cb60a657e28f90d69f90d7680ff5ab4949852c3c53339259712dacb494e7939621b08e68c4d9ee1a51b24ba142352a059afdac7e837e20d3827b8dc17e1c1524006b39f2ff204af3485a30ac729e5f81b10c2e8f6be4112bfc8315cd9db1a7a2fff735a101d15bf3ebff02c4118fd03014473ee94d13e7e557dad1236416bfb578fb0ddd7d9b858ea5275e82bf8810a34d256a16c76c19721cf94c7d71d9c1bdf3dd2f12b2bd5c460c598082dd25855dc42d2c826b7b2a74c454e4363769423ef92415eb41d5549c9a0c352eead6c2c1f1d4e2d6a9cf9f4fd68434e83553d5bb11566ec1bb61e304d6c5d901791a4d728ea3496de2c7fc75d +MD = 7731a20dfb7725e61d7aacebb41afbb4a05ffbfb + +Len = 41696 +Msg = 198a696de98961e3ad0f953339350b5871d87a415492676d3ae88eb859c583758e2899bc5b1903052ce139f6de7a9e7a81455f135dfb9e7134e6d043c751634d9b3da4bbfd55e1b54424ca3356861d136e5c83691c84b5168d09e29c0c965530c9315311d92542197f401191aa3fd34abe87ade99716f383ccb88e6a307ea1469f6c6c67f7727059649ed3b9e18f0748fb2da73ed897a1e1795d9a553cf08eb6a556b7645d22b19e7ba4db53035d0034acb5370ee7f107571c5fcf0737d365a96357feb1151f4e104dbbf006199007375a892602ca0a6d0e3e26f52529116f4662d807f5274f8fd6614bd97a291264798c103bc18bcc1b2d661ad45a1b91f1b6293f9bd9999cbb193fbd5f583eca5f21cab240f4321d58dd1da3334b133b362040f6820575ed1c0070774a485da040589dd7fb42c5e76e46ea29dca31cf785ad30638420c329f8b47be362f1907c4e458be736544e11a38f551495083bad258480f069d2893a985ce8686efcde46d2111e4ab7d1d48340e1e6cc27237a455fcfb804f8c5d1074421406d381050e614e3de69476260258c6326b95a9be0a77bb36106fa9ea278432b0a5c86d6ec455ce452aaadaff9dfd13e9c43f51875bcc15a026038080575dfa1ce9c21f6bc49f23b0276b35fa7995599d1d3c244426a78ec237977a900e65eab1595d117c8db1d1276361f1a723b629d4bcf87c44e9aea904cb982299eb3097365af5de116e4278e3750ba8a63ad3e7194a10d43a2355d6f06882031e4c5281e49528ffeb14a56d9cc2e4c5581d7313f34af1c6744211ab1d84e1869dc0203d746e62d139ef7f31bbd369d23d5a1852cb1637cd83e48697d4b7333788d53e1c4e6d300cbe6d1457b93d2749d65f480629524f43f989091fbe65f3907ffa00c0db081d0cb92c29622d5699a6a3bb66c0967594d4458e3dc55317bf2bd3bd2cadb2c5965beaab12c380b62d8335fd18f48b06c4f8e882890b0b42d254348cf6456e3c1864a348551e4bd27f4a0d72b3248f7c4c2c62f47f637f8de9c402e8122a55c22fd173a284a4e741fb658adae9c31c4c96e935627560f84f71d5df6cf4bf11fe590cec381629fb7b2e804e941172aa0e31b9e04b2f863e0de7142a7a02961b5700817d878e0ff0f48504b91cbe95b117a908f41cf235995fd609649de021ea52d2c9980f50b950349b8d6af365beda1f6960d156621192abbb101e5701f4f7782c6fdc3e02d8a1b1de64d4a69b508d8bff5c0896038cc277f2e2d813ec81db4d99ceaa9218c05df2da2566b4c3fd33d3d7551a4a3b19a15b39dbf283044b0e39978093ba1702fd8dfb69c19c7417758d9dd686f18d4aa7abec762df2edd2f8c2a2002804623308d9ce8c55cc2021cb1f9f7acf0a7e825e10874bcb020d9c238f45c7c80f9ec2f86cd027a3c25cbe8d10789c631393732cff96b75a2ee81936d5ff62044a312544cd8ca62c2d8e4063f695c5d3ab407facef97636bd801dc7b6d3b495d32adec966270926f5c3959c8389381a1102a1a565705ba70abef58998b86083367898b35c20866ddecf26d326cde5a5c0094d5a1dc6e36f909150ff9d76c0947373883db72d0be083e2ded2af9f2aa54fb352417c63d63658df78514c759d6e9405f58cfeb55e27eee506c2a666d0c3c4e6fa830caffca66892b3a82d1dbeb9a01529cbb92048e927c1e6ca9389a0a6298c8b4855131d65ca904a2cc9d7ed1ea08a6a2071d591ce345cc613ff725ff6858c4eb7def5001b86c38504a709f0449b4e01b3ac3e01801fa0eec47288d85de1ce8bf92fbe6e71a211ab59501d90d5994836adf5c260a4f074a5067233d281443a8a35d0d72f0e286406524a799576a3605036d1c975e5adbf350189db140ab6b892944aa60b9c1fa3dc181f87c7d1bf7e9975cabb09e8606be4dc3ee867a14030ec3e2395cac090b676d256adee8ef88a57936701e458105ffbc019c293eee88ae15ae60b332482841ca97855d155536cd3b83001cedbc683c1d4a3d26098b8aeb71118700f70fdf715c50ce639ccda0d550aae248f1989bf8041637e9648b884b68a432b264c0af6ab4d9ac8ee9e945324b468d2eebc61fb7e2ee22ffca5eff528eeeea6405eaf6a2469ab62b87189278adce774b569561f05c4a64e5b5865e75364a2482551f639c943c61e5feec272cdabb170aaca71135b2a39417b0822438115e6799ccbe74ce2007363aabc461a364850309687b9bfc8892372245e2ff2f82842a16f74898bb7cb3a9a62831d090ddb4c1a4048370c9609ea471e0193db00c63e2864f6e4de8fcaa4294fed50259a8e2b9872b4f1e00bd1182a309b56e5e317637744f6002eb425387939a0e65824877711f273f125710a348224d181fae74238f4d61fe6616c057ef2e844e788f5eeb7ed892e3fc10edbc7b7c04d1a0156704608e4169d610092fffc24825c9f53ec7493ff8de19e2b6d5831cdb72ce176c8131b34862d14b8f34200b4024c8487a9356d1c37e1a20fe86f5712b6bc849073299690159f64db51d064616bbf1fd94c82e2a8d546b70473959359f3d4d1eb9810dfbe6bfa38b3d32f92f365bd5890fde35a6a0e19c45036504c68167bb0d1604e608631467786a2e9f0329a4f17f6e6e13d2b8b61b03c5a2beb08c6ba0988f36d80b20f8b0b9de586e8e5af7c44512c03f4b3f326651007abd601ab98c45978f5a608acd2db40c58ce1d64f4dc7eafad2e5caef71ca14645a761b6e1dca8c176c3c52b122cfb66a8543cb20c8880976d579382749c7909abf331eb7510169fa5ca956c584cf49fbf8758dcaf770f6c89418c442b644cbd06276d12d3d5238464c55dd91ffc33fa06ee1e4f6e265f819972b38e9c0290e2fcca5fd79e8a54026c5a8aebd9b93e1836eee974c9050589167185ac3705ea1df842a6a435ae3cac04e0a93f0602877c980047073091a5f578b49f379cdcccc07126be0329cf21e3c6fe352d25768499d2c8b351455a952948b24cab2df59d7d0ffd227eeb5bc84c3b09bb40c873c9e25fbebafd67de77c6ff013a917afee0961d2c50620ad28447d9a9a8146f98cc089748da66288bb2411407d564f4474abe313ae47708d1da591b4488127b341f5f220d7e25f7e0c91a106ca9a03a7d1057d4bf4b0855c85f027860e7b58bf41868885322a7667c40c48c7613ddbdeef5f5801ff0a0822476e69995239812576bb722d07474f4ccadd2e0dac077ef3b4019bbd371ca0e74b647d747d8149ebc7dbd9a0bc029134064c7a5f12c095ed0a326f0704b0f6b4791d8ba0f81c581b1b30e464bb21e42860a15546fb2fc7d5d83cfc68ce8cb190b9e0bca32ad257bc5c00bc036a6cf22fc023e649cf1dbdb206656967fd797a84f3f437077a6aeed77194880533ad60510e1b56f0f7521f8c7bf6df8df93ff9970fa2255352aec473423471f07daad99632d1ccc3d996946c213685602aa6d5d1f532ae1019648298b7279f4eaf2c0307148d714bdeb1c459df6f846af976b73a8decf9c53655cf4eb8b739a633fb86ab9d976c0f6e6a585b9de70333cc7646dbc0172ffa1349549e2d2a678170df0b8bb336e697f28af87a43e82b410c6f2bbb74fd77381708b98ffec95366cea03aad3fb4076cd0da4bbfbab8231e222a0de292e4fa05aa59a52a13dc22ddb505ba1b2a57f615721ffa31e89f1452746c95590315e0ec3405c07654abff6e8dd834dd5a68dc1a3e24acd8b6e726636c006b27add850721dd5b37baa7d10a2bedf4ff9b92ee0049eb00abd0cd680db71ad36547a757221ce8e2641fb9c7d00b0e3b4792ef32b5af98abce7d3b64b42ea3a9ee951336f80adfbc0d1314e6f11ccab0a64a0fde4a4b77b695ef1cdae1e41704ded195b6f1723e32a3232dc0e5b7801fac3f996346b3f4bb92b5064d2f9dd17e868bc35996f990d0c6ce88e81681dab2c9d20044335fbc25655d6c2df5a26f71a632109160f75420c8839abf1c0247247fafd8f388d52a7e5e46d31fcca84d788e4301f0e7f204ad58d0f7d85e9f31ef4e378813cf8acc411e1fcf751d05f80ddf6d1bea84803ed0d83514a666df477da5e7920760071df7f536b5d07f41fbbbf9eec300cf185f35d72e75bbbd48e44a276e8b60f2c0ac1da42a2ab46be2c4ed7e669bb63020d236c63b8f8ada4284ff330ad892e04dd32c8b7882935b7ef01ccd530a8d5040546e35dae6864672c5e7696b0e1fc1153faf1b8071ffd66ce9e46732a3f897ed4246969b0f507a4013ad2afda08a1dad5e0ff5006d4c55332ebefc93dc7a8f8e285a78ea7e5bee40fabb083114544e8c9ad97846e91b60784b26cde528a59fa973144d47981b3aebe79b81b3edf0dc19829635e259ef8092ab968bb52cec50d5befe9430f110b8a766b917e4a1f25efab1c0be51443b2e18ec9896623dc13b896893ee451ddf1009f4ae4b41b4db4fa694e372123c80d1816a977e9affc6c84b0c5eabe272c8b99a1de58c69bb1e16839878e1b3b7430352c23db4cdc75f8f8116c96d97a4801dce4ef96bbb092d5c3858eb8da429043c037fd5d959491de9c2146e93e30777c52d145459b443ab892b42c5e66226470429f00a4cebe9647f8491a8cf433022481cea70e6f3eefb15e2e2928c8c138dd42cbf459fe42cd5a95efb22603693120f344df993e86fae8ae5a4dbd070954b24825a1232e087e40fa7dd46074bc4b99309cb38d1004a3860aa25fc62be0ff18dc14ceab65f7f120af5949e24e139ab6be3cec93eda031b3fa6d29ea3d30833787004599abf96d233dedd853995564a0278e5252de42ee96072471d244e02636d051cc9408f53c712b9f4b5c5e6cf27ef3f8ac73ead22058b82d002548d8313d40702c4485d4a43101d969a4a43f8c79a8e4c49d1a38102096f19e8c5200ec765dc32d52297cee8c4802f9d473b679b9d0b96079755c061728d812af68409e07b2b39666fdd661a98781c493d3b90365f2df49ae03264965f64b263595809018c4a9312707ca47b146c0928acd3070a597be47e5cc7f233188b0a0c7dea80bd21d0bc43e5141e6cb0d262a60680309a346be21c6d94ddaa36770490c4da0555c44421852e3218820651b56bead1b16848747a1f8317ab7e51af4e9ade950b6dfc1b7f50cc35473d7d507dc4ca25edf73e2c18d24dcec021c29a34851baa078831dd12214fbc0ef19e65385b151b5ab96e094aef1e38d03731de42da1c979e26fdff76911934f460e1e651996c208c4150828cc084d4302107c2162441dc13bcc8f9390ac91e8bedd08a660a2fc407019e3e5af1022f8461bd1c1ade3be62ccc1b50c608cff72a1af297e227e0743f8caf7341eb26a9318bda12cd726b542dd77dacaa159e4d735ab0b5626d1ebfba44fcf7be2962efcc01d76c9a8b4094bb51685351bbd49fec3fa35943544b04fbbd1f023c363761b8665d702e736c2639ec53fb5955e35cf92c32fa2177f5f268777e49589c248d8b1ba4d3e5e53e974deac8fb2d9e4b032ec2f82e69429006a4e6a3238fc5aae1b8b465fe6d3b48565bef4fd94adf8c30f1766b5ca73ea990259d16273e4d4afcc5a3195600f019e1e86c511c3da42744e5c8f50b47e6c34d6f0d5fcb008d753d367a37715dae13d877e4654a72869cdd703d2db0e7b54d8ce5a9e8956310ca318fac38e6dfbfc6888eea04da85e16d6925458df3f334d8ed2e15391cd271aa6835bb961d13cfb2a091dfa852f46f096689749e4af6efd5dcacb1c9a7cb2ab65fdd1ae78a7638688f2547d82a2a6a0153f13cd70c6f40c4d9e61222ecd9a64e66ca5ca5c5839448c2bdb51ce6b47cd5b01110a0dec8c236636eb8dd427a6ef33ba2034944d86de3d9cfa9df1f0f1207194d92b428900eab17ab18515f2a0f454cd8715a8ed12fba32ef989719b6b405ee2b356970516083553fa3177974e1a4f8f2594219fa444c7c71f3fd8d37fd72ad1e7b495c89726faa710b9847c780a2ee641da86cd0661b050b5e4adfff38ade4bbc6cc33a4aeb09603946c40ae86cf9bc220e5fdefef966b203a37989900380377ba6aac4f9006964be00bea965e7b6f81159353a55b4f2d351a2c3d81eea1b7c6d8cd0cc6a0c229de70efac2b6236f8256e38e49d33c5b9de709135465e6b404d743bfbc66b83df1fb9800bba4c92b4239d3f5723f36a9f70c01f1652ca055b604f6fffab5acc14a44c859fef781f3200251ef20624de5c80ab2e6733dc0057a3bcb16f01f8fb68f08c48cf177f2ce04f88706b8052716fa274379e65eedcd38c3ea8e046c0925a890b421feebc5c4d6649bc1a3ee6c4474acdc332658cfb3d8e57cefa063c4157c24c1a08c1da1dd7e8eb5a849e6c5771ee1a79b9bf30fc243e9a9bf2bce658ef50b139202d32f22e4befe4412b4dab8e00dc939aef655ff5f1798880d739798fa8fd17fcad6179af03c9d1c6722520ea2796d95c52b487415b672d1ad1a003c74f623ed4bee004d8b4fbbb9aef6d5824c6eb9384a5891284e105e23758d488149893266ede292449b4180a151f90d1bc632d5a9a346d823f06b8505cc93187062902671187c76860958135eb6f39fe1f80dea703abdc46ee4100fff1af3180fa75327973482541bbedd9d7847ac36dccb4920167585fd1013472399c876ef6800195b5ea9bdd30ca11745756aeb7815252d9e22be652c116458e95c3ce44583562ced51e0f59c60995034df897a0d93f0008d1c7c26f97abe8a8acfdf05c4668fd203f53ff2571f90ce913d0b1f9e5e120b148c16900b520b262e7b19a0121b9554c6d42f7bab526ddb851858a3d37f75965cfbf66b0ba13274fce6537fd7aa4efa5d75195a400018bd38f7d8cd53fdffe88df1837fa06f1bbc1d9af368bc19a40bf0606355bf3178bcd162f367c7e09a4bcef4259473c5ae46b91f632468727ed1a91e7735d0ed772279e11137d6312d05478e44712baad359f7fb097b85bdc392ae36bbc11a3dfc3557fd9a0729f79f5f214648df7127723fffb84f34b8005d97273099c34628f03f943df69d673adaa184a49aa6ed43733efadd9c19ab4533283d957801fbb73986572a8dc13902c5139731a08e4606be9f10f357f006932d8c17ebbf45e2f1c053c94ac73d475848fd8374c35f25783baa6881ea8270f3330ddfbdd855a3de6ded11280dd838434ba66ff66be031a2d3a62b0fbc97926b2df1ba902af9e586299e5949c559b5ccb657843d01da138b6cdd802635f714060381d2ee1dfb50f2daacc637598965fa7158ead3eb15723bef95904dbd699dc99e054f5e19228d29696082792f30f1d565f1c8409359f7bb4517820cbcb6d5bee4c5596986354433bf02b597b1160065786a460a5f6e4a +MD = fa47305e71a8e1e536486a806cbb839d813caf9f + +Len = 42488 +Msg = d2f61e1a3e370e78db7a356cff4e3e0a40800ab936d79b89820131c60eceb2cd979c4f1e691365b36a12a1905ae8689c59c876afaa77c5ecb648b051544a588c47c0471008d15369c781c5ccace0bbf36281cb28d62ee99f3cda8b0854d70b65eb4a4c19a4dba042f8b1e9497c9dffb86295524b4365d1491ca10a1496de92ff8a21a761c49814e80788552f5287fc9262eb5341788243935c84749da2c5b6042c2fa00ff0707600fbf050a5b606792a696b1631fdef0824066a13ca01f63f19d95b7e4cb1cb9035ddd024d3318240277ffde2445b12e8a6213d2dc43ad7f5e89a8d8b3f8d11282cb40f17e24a631732ac8901a11955aabeb6e40bb3d5d29f1976ad0d110eaa0790889772fa8a11c7f3f9f7b972bf1f1816cc47f5be5a4e075476a44de9bcfff507624f7d4278f518116d2f53dcd6d7f8566b4e320d52b3f340a15893f01e76ba39491f7fe39c75d135111a1609e5e713269be10cc945682c85ffb2274dbc781dd045efc2057efabc06eb9e4c2174b6312c65e8c91ab9d77acc989a50291e6ee7715ea78ccea7ed9f2d06a43b4b0bac1a13d04bb2273867a4bd75f957accdbee0c69d3026699eb4435167152db033319581e5f20f19498074ff9db584fd50d2d0770970d8fcebb9701b18d7687873ad6b1fabc52817758ab03b18b81f452f107f2caa50e9b01762ed3220d435ca548864942aad444a42ed2118efe870abf3e2b58c89b8a3aca919844087f2dbce5d2a48886a90adda3a128f3f292fbf5823af393fad914c192945fbea551ba4ae16fcdfa57458a9eee55fc257ce74537447ded4ee1fc12d1e1f4d1bda9336d68f0764f1904feb81aeca3d8109e79f7526e7d94e41e5328ee4149bacb8492bba9cb9cb45f403337d43711595fd7a976d968c076fdf09cab7929096762b7de298fab39aa4779916e4d5624dc7da924683edbdd0fe719273ef5119a640dc3942b8d47d37d6c1187e008b264fdd483493ff53039cc59e89147f493933d47384356150a00ca37b8852178e44819ff16a6628efe5d38a0ff595afa177a5f89767a3dc96a37fd34df17a7206444dd77a3ba747eaebdd166bdeddc7825b6575f0e87272cf0efa2dde5cdd591aaf1a4b8eb03ea46b9d23315b4dd60f136ed91327128b68236ae47ad7d06513f20b4fc4d3cf14879b840ba2874867cf7d376a99e4ead609b93da582df56f9eab7e3560af1a20f38a227fe3396da784ee73f80d1ce7a3b9cba12a50d9ff5812491bc96e5913118fea70e65aa3108f2d57a0c84818ec9a3684d6e4be3bfb5e60aa720771d5b821823d2c2a6d0ffdcbbac5d28dc72ccdff4b69bdb01cbe69e0ee422966179f6a0f5ed4cca2b6da95dbc1bb91bf26c2fc518cecce02f8fbcb9e2fa29a7bcc30b9099a53dae5a49d693dd6ab66b2d375f82f5f807063bf5eb0d4a93e5d9f0c1415bea92cdf79d2b2f8707e07ba2f49a051e757c74d38ec618a22ff97eb7653c410ad2fe222c5bdd5b4020c63147b15ec9a27fa13cd190c9ed8177721bc684fbb2a5382f67d5fb2503c61164ffe3cb4b5215fab18788a9c812b10c47e490b3c83d32036ec27be7cccf22c3020efdaa29497fd0f27c7f42892f3ad4c0029c5b698abb1d035ba5869a665b1de8861db6c055e8e8ad443ec1d6eb25b9249d72e5a740476d365bdb40567179065e8ecc57d81f592a29064d9075ee79a2bddc9bb74a07dfdb4feaa57dca978568ab4e90f5384ed97eb0eb35152ee13e76d1e89e3b1a898a4f952f8ca5bc81862a18eff4f8a98b71cc881b7dbacb6c7d1fa9e903d8df6b50b151531720f5d78434ed997dc8f37e28fcfabdade612363d848d0653f5605839e9cc7dcf573d40886e7273b5cddece06f64efa4d00cde8868dc46715fc66f64ee04bd63ab05b6498c0eea6236f322413a2ccf9e672c22960229835d154b9ed967c1986e29419ecbf12ab594f17b62758e9bce3ffa3baa2d42b4f980f6521e619a67db44f6c3d80024cefb5c22b3380dcb165df21fb7cfbe99032b758976689e047be89079e90c76b5603e2031571d6a7e41016d3e2d2dba83989bb33524f7df245252c9494da6a01182f079a3b38d2c26805af9dc082ea170f9ccb29fea56b588afac57eb4e310cc7aba4d1007501c34278cd307fd55d141f8b210c10330fa18fc857e4b687262d565eedbecdf805b0507edaa9a0113382bdd15b283c9b8d33c850d7d8517510823bf11dab62d91373ef26f5bdd3584c6dfa70bd8f7b9059dcb0cdceab32846a9be726c71f7584c5ae6cf5b0f59ff6f24643cddaaa639de01ce7838ee5e051aedaf6447c935c876690586f9ed94c89efac286d35117b20da74cb36ab10d15957efd7fea09fbe5da0fa4fe911e18f9d7ef016c34f5d28d58364da4b95a48c07e01b0a99c5ace173ff2c9216bc96df8e3ab2ad54abd60308857da336f11986e9f21d1cca6e438c66cba7fd6cf17192f8ad745ab5bd2480565b1f948d3008387be8467cf50cec05a2a10cb050430a604931b58d5b05c1272b6edb5cb2c4c9373a4d27a9ae241ef3b419cb796533b9ce1c81e6d3b918247e145b213a4c320509b19b41315a4644bd179054a720460812def898bc5456c6eb9d8a91dbce0a24165e4d13828de605e859af38c7f5fc9df50d103bb5b16430f623879daf9cafaee3acfd3f4bbd75cb0bd6b1086a6ab9b3db2363504e54a2fb2442dcb5244cb51df83a05f4cb6d881c7e2b5013fd0320124bbe6c66e4b2a57e0c77e478e8629cf9da620204a0129f62d5d4071bfe33a211bd3a85f0175fee42053f59495a52d9baf0d17bbf58412e46a94d4060fc90c23aa6245a8c64b0efdfb50585b6f8b1fde9d1e4ddb5528db7304f139683668f03059d08648c4b6a1cbf8267043251e47bff043892673d3cbca85db36403caa2d70b18530e8039c01769f3d05f5be48ec672fe39544566e2b1275ba95362a750d0a39e90e2f8ce7742578fddf1842ef58fde26537de06e243725af51cf107b3d6267964e7c6667d43000ccfc555bafdd1aa9133389c8c155b13bef6941adb4bd1eefa5f82549948b630e21980542d59a096c5b45f25eff1bb1d2824c458af2546884340a8822e2e14dd8244d9bca3eb0de805507622375dabb721e776548a297d1cdd7121f82c19a72e75b99536249b5fc9da6f433a6d40720930a770b6743fbdd34e58b55d9bf0b54c42df7f69b951e060cb7990169884593cddcc7b25754f50d4205f2c5a849b875f711d5efe69f5d6d660d6235dc010a878b0be5f4996417c48daed4d96ee01658e8bddf99c3d6f8a5221efc4b8edcca7e432e6e4cbdefd8a570569e1bae10c9601178619ec3ba744fd972a3dcf28a09da9eaaad253566bc228283db06d65a364e19d8086956d864cfe49f055497874d4ee6073f08804746be4cbd0825883ae1556a5320840dbf2e97ebfaad3cfe63092dc1daa0713f2feceb2778a1f224216f287b80667958cd464a582be800879bc209ba8b5df9b28f234bbb2d34f74abc1439d5d636a3b8815059a1996249d3900c65289fe40c9ac39e3270713d9f6c49850bf1db1dbdbd79b14860c9887352ee5cb2a49ebf24588b9241dfbb2864f978360167f59801c8250d990e42e70796151794a6fe6bcb6c45c3ec518181e282c6bbdca0bc121a78f1b9ce128bfa810d92d16da835668c566097b48e5ae69288936ad024952882309e3a4a060b2f8a49e62eb040ea3bc1978a821ceeada2ef8b8ce79e6c2747c39f5923af6157126dab9d740ee9734815b0120797eb005373fc119699ffd90c4915d0fa60bcd63fa5c31735dc0a6737e320a5bcb81be984aa6aa01c455820c29d24842300613f03ed20e2089a3c3c77d479a405fff9cf930d57d6dd42fda5273a5bf1320106c80b8e359c50dbf77984441b9b77c1fd392b1734244df568cc86ab1c96abd50627b31381949313b494f9dc96fa86b09eaca9428ff702ef220d8d59f6e2f50ef7c4a727956963d3fc2524e87c5fb75e66908a39ebed8092a1fe97e16b64a21144353404d189379f5680a1f22c298e0ded9b6a47a8664b72610622bbfaaa378e83dff665c68282d83c6dfda436f68f418c13b606760fc820f7bada54251239d93f4b6aa4f4d3da011613a4591d251fbbda9ff9f0b5288b00de831b446b4b0d73cf0e1d6ced0ba1bc8c3812ab5f63c3bf4196a280e67f08a47e0561f73d933700bb7e6b080f887e6cf731e4f56e012fde69ae4c519a41c58e6ea84b072ca95ae29d32f010ecd8d494ff9777c1d9ab989bab3d53cd413f562118f232deb8fbcdabecc22901f57b28c70def67bb12b1b2799eda556e6bb61eff1569b5f852e923bf12829275c9fdff659a90113bc9b1f1fabcfbcdbf8a44949aec7550ee9b1fe1beb71ab8c6dacfdd033e2020be3f2acb817e18293b1d796b66f6ab702bf1fe7c0d42e1088f986f2622511602cd039ac3c06ab6046ba5b2e7f5cc82a02ae813773d3e8bfe3a836a8f458bf833e2b7806f19fb6bcbbba38fbec9e6817d85eded57c1026226524c305cef473d3099bb5a2200b89ffbb5a77e4445dd2e44a783ea923b470a0d61235f33820b6b854c9fa681071ac920e421fd0d1c08ffb21a4aa9bb0e74ea1fd1d955979040f9ae95d4e400bfaa8db7c1938a9d9f026c2248928936ad0498da3ebea1edac906e18efeba1257ce0444cd87cb56a5151fa31dd0c3799b98e8cd90243c2ca39723f50c5444c63d144834c836debf7d560304d22080358966b4c78c71936a1c95ef3e2a08f74405f5fd1336cb7ccca8db594f0d2269af7c6334e45f7af8c08cecf125b2c2d874f798aa48dff1aa6570cda9eb947e85d0beb7f08cd0e672163dc3b1106a29f13e5b26d73d8b4e72721b547c402fdbdc7e96897028a95d0a547543b8681ce6498b78c60c59028adbdbf29758b6a8e177a24b013d1eb089c7637d948d968ea1e84197a1d2040b4eed883dbfc8b5c6395d252649ded8ae0fb1299dddb9008901d74a00deb0a67042b16144f351a5508b96ed6f86dbbc6a9ad08f1c47c210d4ae1d8cfba62fa7f70d2e4f4e5c7dee0f7e2be46ee3bd34aed02d7d44f9322d3951c2f1d021d57069576d38a521d3f8cbbb23f16a860aa74059cfdc5b1b90be7e92cf60c6762d678dca74068f6cdb2c4bea86fbad974d7de9debe92aad7652d6c184bc026cebcf52d0c4d9f55621ef059b25dec7d3f0b1d71070389795338e1cb8c3efb38500c820fc500ed3f2d23adbbbbafab23a5cef1a07ba5a710b791426395b0f84425a477fc9e93d694f572cc3aae8420e7f31d603ee3acd6b62cf8b8fbdcaa9f92740c3abc3e10449ee194b39e33e433104e81d212e621fdb4daf6ab5d0833d86a66cd35174f7e1ea31a10ccaff1d8cce8e081afe52d0b0452e812834fc2548b13236ecfd576e64cecc86e7e359167d3b5d1a5607f5f72d2d87ed5a89ab214a0d6d2776fbd5d4fb5c1113730f7ba9a30c049754ba8255e518ec6c683067f7bfffb9b707f99acc1436920f24cbe1578cb516f7ad92827d868bce56d7a5ad29191caa7e2662f0b45dd2e1b2739524a098caf6b3b72c60ce7ffa90652f660525f3c8a1e558c4720e16b562b5f5f7b00555c2466407f4b7d94ff9e4ffe60dea8ece985284f59ab969fd62a77202601df6521f68812668021e64ee3e8f81e9d7b408101eb5a3522138704f228f5f6ab9140c56ef838912aa1e5d5c0fac89a657464ea4792fd88733fa0def665633742bbee2ed4df3a6614a4997c7dadf73afd3b5f0e9f43c1ba67c4f24c7d57f4518f0878467064a14f05d30b2c61280c682f7739d350262c33c6478537d1252fac571de5f389b0f4b3c4d642cbb5948f8bc1d0fb23a465c85b5873628538f89cb065a53d1f69eabbfa1a544642c118080a7cf0ace5e1251d9be4ed9020fbf8c4c6804688b1563b7f8bcff5207acddd004f287c54015091b159346017ee624c2e546fa8cf9199cbc6d0ab62d75a210bffc18d1ffb5e39ce0ffe0e7200d9b41d62c4fb741aa77ac11b30764373c905c98bc8727faae6e407bcf33bcb52c83b92e97cec526fdb40450313f73ffdb1c03f2ecca14469809862419f831415a23dd44ae60ae9d815358108e1f7ff7cf99b966f35e0173e149f072769adf55151030a0d681ce25c3d9f9ab1033e2bf889def6d66cf8a0338b3f1ff6bb83150fbcd55dbb6cece4033bc7bb86df946a7949d186ecd7b1864fcbc1d234fccb1d57cbfaf5db594098d6f7f50a10dec1640821bb6f38dfd2719abd6d476b934eb42f66bcf9f597e1a6dc5971afd6688cc2acf9e6d843ec250b1d498aa722ead483a1756192928e97b51e4a82d361e6be2c6eb998ea936770f9df586219e2682532b4e032e739a6296da2b0719e37be1f4954491acdb2b67ce6e8d03bc632750868708f77217247617872758737e25a77c26991b4a828431178419b5ed69a7946cdde6b7867c5d9057b967f09c7ea208e3eb279ada37b75f657f19f1370a2dca70a055a7ce2bbc4de2114b84275d57a2c6639ea4fe835b3f52c00c6a1bcd307f3c7ee45cdb9db70b40ff606796a2dcf18e205cae09cdd67d49f77f652e3b460f2ab9f15b115ad454ff04453f5cd79871b591e03a9eafcf85c575d196c0dce506c5f22b0711ebaac766a0486ffc7420afd748d7bf2f819ce55fdba163861a740288b7f0055fb890bf3254087df800fbf86da591c03eebc51873897d5fe08c996efd6bceca4d5a3cb8ccaff3edd1f68107d338acc23f56ee9bab1fb3e062abcbc89e8e35ba8d38e550a014a9341cdd564ac2929759b35b5feb510ee3997ed0618be6afb37a71ed4103471286e52b1df24d9623cfeb4d51cf841fc78aefa7c311456040d67eaddfc63d4c3a1b759f40db6cd86ce4fb3fd283f261da28578fdc516185d20d3b9398fb8b09fbd569ebde883503ee450e3d7633b2c1c73a657994888cd1e3c635c5a147692ab85336935f7f32a3288e98b8854541aa1f4f9df7744d13dee69ff1a671304409200360283c26f2209c102f23b83f3ba532b675ac040593076b08f3c8915cc82fa3648b0d1d15d016b98836116797ed2db22d60e9bc5886e5e18fb0ae7a135228c304fbd44ad268f0213542041bd5f2be0e12f44315ac6be4daa2bccaa3fa7e6eff5346f06dd3394733d5d77e5d7fc8d0b6e5b44a9877beaeb6d07caf9778a98cb8de00f3fe9ebd8691b87ae2a50bfc004d341562cd40fb8e169784cfdd247feca013ae4165ab5228ab7b80c37af0f8b7218c8c2e2caeaf1d7a66499ddd744e192582938b4b6fb3c7e18d9da357c53b7fe43dacff2f0745d742db5fac20fea08cb9a9751418824ecee46d3614b40f50c4f5e5ec785ce16c3610551b7d400a13d1ed06b78e45598fb824a8ce6a2815c520e703bf0c2ed36ec463622183a34d24632018df5c5a7be31e12beeb461caf051e2825b93d2d43ea1c9c90e641d33e3ecb135e4100d050055b4f1e012b1a019d1749ba5f7dc0b94a895c5ffe5a4833ef7 +MD = a94d7bf363f32a5a5b6e9f71b2edaa3f2ae31a61 + +Len = 43280 +Msg = 9b5f37f5dcedd96d9b7ff6d852b77ef90498311d24dfa906b2979b28a7e85a1893309c41855581d92b59d1133a2e859610cc8a2f9982c1c26f894a8745df027285524af338db0be0272ef7b03f8f11e93ae76fdb7c173e8f3b8c08fbe3143277b9f0c975be2a7e6cd629ee15298227daca11688c9749295460c85bec4b2ef10e76309f2ddfe8e264816f40acc0aed1510771fea7b0bd89f92464cec243d6481f063a568562be3faf702b74dbccbc16363b30b895901e6665d089e6e594b43d93af3776e311539e37eb83130c1453ff71ac751fbeff12c982ab5e2dbd066fdb50ba4f85b1b25006e33a9fa4a6611c92eba269b98ac441b937ff0c2ab360b0273f6fa90d560e5c809ba4a8af117bbfd98a67341162a9553e6c12ba652d6c1e2b48156e953aed20134772c6bdb42ae3dc3742fdacac74f360092e916794f062ee54f5c5a6c51743c7d0ed2055f93630a2db7aec14d1eec528f799b9b751b523784958d7c75f536ea41c5adfff476650335c582bd03adf739d1c9b59ddca830ad21184cc80706a49b314042a430783e897a424df684e0fa5c7617e99626921bf0392c2cb5960257bfba0322aaa9f55a3d699263364744502afae88a2cd9559e913b659fcdb974aad84a92b07bb78a426f925a54d4d164b325cec039ca6b5f1300b6393888d7ea186571538e8fffa381c082feb55ab9be7ded60135af7633b23ef283b697f77bf4af7bcea1f5fc8dd92b099e3e74046be2ae26d76701c37664b8d0fd0b50a2f709cff8baae583c9a4efb065ce7d1e2ee03495355e0bd18e6cf49adb9dadc155ba98fd7c3a7364787603506502d96cc8c14586562ea09faebba97929f6b63d80d9c971fd0d3baa3bed78112625ae84baddb8265e8cb0df3edef4a8697050c7477aa8ed8c87b09daa57b86317ab5f1e6b922705aceccf38a54340b9289f1ff70ff9b1d0b95e74e74a613ed6b8085d92518afc94cfc35e048885282bd5d7865540f36ebbf1e5faff728695dc85c13c890324a3644594efeb3f111560ffbe066a90e44a1fc4b2b54ed93437f51f7a7e5b06fbd5f48cf5e7555f8382f904b7129f6648de6ca049266dd4e6afb0d3788580c38cfeb6345af6db60391b7493675d7c378d9633231dd0d50c3a6780505004a2cf347839aa4870d5c7ce29341a2329799b4f0bf3bba5570cd59be9e3f4a55e3990aeecef7d22f7dd1c9f46e8079f192fe7f9aa3ee873fb8dc787c17c5ecd04adae38c7581b8efe69d548fee0fa1faef7d419eb75181e60c0588a6889fd5b9a877e8e91f403e0e7046837abbf50495d79b63c5a26f8e9195d1f1059cd3eb5824f97fcc753d4dd64256c07f7e3a880a72e24bd70d4d97877bc71c61f96b18f4e7e712fe1e7fcb8d85557264dfe717a0e7d9629c9ff58511e5706f82476e42d718c90848c30ea27c60c900f2850398a15f0810db016e3e77fb52532f2fe55347e028c9700cf3b8ebfc3cd4f11996f25301f8be5edac0ac01e7f7313258d7328d678abd3ea035f7228035552942a90ffff630d2ebd3f4b6f7cee76f516c4cc7f1d47a4c7c28dc4568153deb62a942d6ec6538b64b941043a0dba87755104dfaba4f7ddef04bf18c07e3dbfe63f66c2f647799d046c41f3d4533c4af05eee0b332021ddb63b27bb3451197f6f5d02c02ad54da8aa30b268b2e01c3812bae10da9f13e1ab9e0582a26bc8f93ce0df8c371023834b2c132f15a36b2b548df8e2574aaa51b666eb0f41c02f8a36eccc93b7d50d1d7aa78141c3ec99868ff57260127bf0f664860c28788e6fd14de03f496844392f81dd00657d50b45b9c29c791f47a0c571ec411d82f1baf56e986dfb733a5cf41c79636a22b18e433e2f19d7de38e27fd4aeaa2244eb118a273a455e4003ff9dbb499cb00b58d5095c9179d2dc800696e52be6616bd96d23c510348d9b85bdd86b0b0688703f42109b9616ea88c18f9349c0906b5641204aced6b619c4141a3c923a1b540fd987e171a99b8f6151e00d7929229092b6fd67baea448378539742d753559328cc09048548525204d5aa5dd9a23781bfbf37130fb75a4b16b8b78390e34fd6596b37f23cfee5b2d1b1411d01e829bf2bae8fd533ea71e13da7ed675576648e204ba7231f49b022566936b37857839965294a16dde025d64bc5bb769b693e3b0bf1d91f82956c3111820dc9b37cdfa10a9408605434e0aacf86a429e948275d7ae240502d7e546f818038c839c498867a933d4a3d553ccf476f3a09b5afca760b817f6d7671132e24e84a2771cb488a339b7b2cffcd94c431e3ef8e86ec92152c73d8bfd3fa22fd7a2eb47ff1fd5a5cd4012481220a731a1d893730e3ab18ab5c2dfedfec960e7e0fc7fa2a40d7585eca88dbff3a98624168c393994247c8a92904544626c13ff044489dced4e5cd00858703ffbff3ecdab2279710296f1cbf01bb7b7af8f82224c62511c634a522f2a3803efb08a97d367829b43e1f7d9f2d74a7d6e6f9c76f6be3e1f8b8c691f4958308ef89cb259df5394e7d8b7affcaa4f05de9229fab72365c13b51f3148ac89c28588247e04b987541a4580f2622996134234b66110d5246d1ec951db15d51fe08aab4387a36a7d76f1ceb6ec3136714c095c0ad49402b6b577c7f94aa5e8f85b8ccb6f7eae2b3810795b75ef096bd718f791a860a1755db3c3138df655627392006b10c96176579f258e7661575437e8a1a8079bc5b799e6654e8864c0cc42229a0cd00e89d65c916ada10f9876a04599bf1b0fc7d43ebdbf2cb611c54a0c49b9e13159463b5a795ddb0ddfe2627ccea5af13cf934a4d3f2e03cb093ad6a7b5b91206a21abbec8fae2c55605b00811f94338f4288854d2c9a1f4ff612793e6e127b7360cbe3c415f0e69e1a6b1a55425093b7ee0f4ce78cedc9695eb5fb797daa64a11dc17c8a120d5213947b76a03fbf17b45d8e69c3680e4941cb8b24ffe96b15b760644de68fecb8d956f1de0b1ccb07ae176fa288c7e5e700c4fcbc79ba3cd5deb21c207e9375601be837173de35baacca218c0deb25aebced2708a8ef904ee3e9a51bbfd269091ffd3b3ecdf9c56493788f38b6f30559cd27b4f57e7adada6fea06be709502595ad9ecf24994da62c175166cae049be44354a01eb2bde1e46474cd26c4a1a1cb24ed1f2861200329b9383db47dc057d291ec4ee0e03943f154027ee126a8b5d310af483dcf3bce2ded3a8b9c8096d7a93b6737e8817d8f85d12b828a10eacd15a0890ecece38a9e3c004768160f889ecc25de1a200eb13164e487e6e0e0835e74712c947f8b714eff42e950f9975fcf1b928d28a09128d274df1d9198881bedc96c51e35c9379da6dc015d93849f8f6c7250912ce4744c3d32a019291ae79679f2286414da2aa2acfa3536b9dcc5dfc1908d93e72d90decc9efbb4f93f9a7b23fbb531618600d276c122b6eeec996c75960851656ee8b36a053d4326611acb8f15e40ca8677a9b78e36264af4e7a941cf589600412fc7879e80d3a2d19f905ffc33d6c55f8c86c37b37cb6777cfa051c2159366fa43c8c90d9e40079e4b5b91aa639c706b4aad347c3ca32d3f2882de7cc204af4ad496e233d4a4c893bc163541161b31715625f0d96d3505139b58d243857143f9873abc594b864f799bc9330a73d9713b5bf6e1daf30955bcd029146086638acf06bb3dc62b6e03178f7a734da360998fff29eec7f6a786036efd8c1bee62ec94f9214fc49be44c374133dc52ce380f36eac5fee79d9801ae1edd22bbe5f4d10f0775d999c371929f58fb58601ae73df8c5d2fb8311632d8587cfbe8a92a3a109d9bec28ecc9c3d187ddbcfc0b2f7899c3859cce37a90715252de48ce1ef6c44a1704f4ebdeeeb56a58d927bbbcf05decea60594fffa737db260fa8d0b175a29a684f56f820ee635d90004997615820ae84f28a0fc831e6e9ac6cc6d871a9a3c174a8d0fdbb24adb9ce551d9cc8b93aabad14476afeb6e5448bfc8a2d89193086e4164a41d718fc45b9e28b141a9a13ab0ed078aac9bc9eb46cc7dd191f4eafb260a2ac0d9a53b9cafaae7c457e8413764f2d051550cd7801f7d6a5e25cce8a0d8f53dea92f5c4a1038c1d6781dfea2d31734d6f4bc70dbf2d330ccd16723275f1a31c95dbcbb19df1c2483f61e90288b0eebd38e342e2f51a9dd382e69d4f070a84453716af98cff4ede6904aac20d66dd5ce52de18ddde420e6d341896a4b08e295652c609d0d3775f772ede91db92c2c8ff217eb174b74e1528351f06ca2ee702be8d7c72f0351397885f7022894a5a28ae3957954e2c8932932a8c5625cebf90ec2bac637d6134468896c1e6b0799e857a1efb3cb0aaadf74c78c31d5e1c72547dd1d863eed463bcf6892646f78cfa6fe136dc2042ce06d3a2a465c4c994a9edd1f482ecbb2b2c9b509b2fdbb501083852057ce87ae33e483431e6d4fec3b09d87282e7678c1e9423541310d8f82427f6b2f4feddfa6bed57fa5b8c6642641141bd15d999e353442031ffc64cd6d33b58b08d7b8d76502fbf3747e31a038b5c1fe8472be9201a82b588bc47a154e567b4016a6d1f8ca953c2e22897f29779927ada6106dfa939f6e94193ba5ed92152118fd3fb1ba3400069e347d37766f65c5a7daa9104e77847c444cc470ccc50a57741104d0a22dbdfbb22ecbd2fd9ca62c8b86cf5df42a11d4e79af1832973a07efff688c74734397c0875f7da456bc4bcb73ed59f9237a2290c9845258a1a7217fb125e0dffd40d180fbe73c5e4695bf6c9677e6d8f0cdfc911a922007525f9b323f8d70d5289a350464cd22e4121d68b20a50c306136053595622a8c512291c0d92e965dd5c186a53ac5a56bd201ceba5b5c01a0bf2fbd0f1637c121d49cf4c1a9080e68001831975b9d30174da5af34d8011106df7681a602be887945f17d460229c1c447fa3e97375834a8ea79e26b35389cfb6886edaae94ae2fb4bcca5ce731832fb43f408354c6b15a95eeb22cde17727f6d0fd4b8e488153104c9b08bb8a37e4655a7228e2096a45811195caed6b212471bf3635b09ee66b50cec900ada62d589b12010b3dfcca56d888f6554a40eb250479ce36c25adeae5558e33805554d0214f13d49a9a50fcc184b895c54f1299c279721c9241afe6e7661862963263b736b7e634ea590af17b8cfcb3aadfa511c43addd57663dba5e3c7f0e3f47876d1ef7203f94c22e2ccc429c389aa5db1607e1045d8c096196e0201807e412f74677507d0eb67ffc0d4c3e175dd6ed01dcf198612eb17df51886b9b2ffd265f47c1f0feb7d1e4f78c52a13f7a789d40d1a6bd21acd723486b3c481d64264a11d62787e01e746a122e8e85c83a22e0b5b42d916b7b638dd850d2be1089c3564d09e162336f9da2598ed098061ea2df38b0acbeebe859fd97e692f7fb059af119c836aa82111233d3946001808cc241d0ac6a6b29597f1a8e16c31b664074c47ffb7087526c9cc7892985e9beed48af8691b0c1ae379f8dc4c9af51d9a21876868ad5202de802038133897849aafdd06145c6e801eb7ffd41e59cc2dd9350b0365dae9e9aed0e91c59bb2d5a829a94d69b1f407aadbe8130e53d396f97be21a985d422822e386195d4a492963d414cda6bd82473271a17732fc9cf4b6c2975bb370dbe74b3233424f27959b031205f92152b7cf201474d0b5c73e049bd0371c907fbf03a042ddb5a519e0540f4a4679e156dcc8fc2b27c7a09b03f0300d8a04357337a3a67c4b1a670a707c0fe69df4eeb339594f208303fa6231ddfde257bcac328befe74647189be18f3a8b4dd312514f16ab9f5a502dcb0311f58bb568ebfda60310ea0997574b8683b60ce7b07c1114bbe5774156ec1c66eb6061ef833a2eb5e72e372e04807ee09419191cfbda36e86f305c3d5ce9f473074607f9715149497e70571b563b3dd90c8b3b547ed3c9b57cb4d8b62ccb5b12acce0639fad7554911ffd13a552f8f583133f9f7ff10d062289872148c3b592b2420e519e5755b9de8032df2c9057c464d3adb6d473956d7bc05b3bf45e1f7a6b5652c00fcd2622d4ba3f4aa79640c89a6c7691e1ef560fc7f2221201f643c6ba8c56456059772e18207adcc2ef5480a84032c734becf8b9bb18469de16d316245671482c96b93a1d458e0bfb06037b13116abd298c725f6b60eaa9f55a3dc74d374c4ee10f7ce558bbe15ebc74ce167f4276ea4cb2ef09bba2dd38f41af47879c13fc01a2e22ae5ed60d5b83b614f12145efe52adc85f900d9c4bd36e387a84e66d452346d5b0394367a78ed348889bdae4e242063e7dbdf7849ad5a4e77b54faaa26bcc6786739d4fa14d558a994eb8ee1a2de9e374f0ac20d46fbaa6454dd20f12834e87257ceea42a3f5932b7ce9787cc78d3c5cdf60b45ed9af4a560d099f6ad1f4756c88decb67dc564977477cdfded8b6aa5534a517a0db584a65acbfc13eac62340d0352c09047604535fd8e0d2f5dc3aec956c331fad25d733a3be7cc953ee7effecf1311e56d7c4e0ca7064896df1b11614ea04b9548288d7dc168099611ec6ce6f408068fd5102ba44ccbd93be5269ac42326ac99c42060d6472cc06aacd7746e7b18e7b60786a5a6f4c70847f74c139add3b9e2dcfadb3ebd41a39389711cf3e6b2dfb818c4484baa7e11ce29df5428d85c96779f0375067701abb295b0345fdcc2e8b19ebb490876e015f336089f14321b750a6af26fdf023148f657f149e53a602dfa6ac3c90b6500f1763c770e664bceda1dc94e3832ef6f0fe138baba1ea02933f4f58464eee56f48d995b12ea995b53a24228d4aacbf0964e5c07321867e7c8f33c763990d8879609fea2d8c48a08d19b01f262396c1aefc7677c10c9755e8942968e7d1f1cebded2ba26283edeca4fd3407af5fabb7ae1b35d72ad7cba6ebe7685287ac3618ab432f46f6b1e3daab5932849f6b3601b5558656f71fbde1f4fd530cd98434f6d016fd5030a2d51aeeb23e1e6cb2d03023400a8fdc40d8a7925a8c0043f698f9babd2846c6b33bfe0d9cb92d9de304b3964f14da30e79668526365c56d7fbc91c9ca32932f8f8324868d364ab9684e0c7cf737deab708194a3bc92d4ac8c2a4f9ba2aeedb184350ed7e827ee35af06bb45bd0605827824cd04da75b687a86c939efaff9f132ddc1d704210809943d9408f24e1d77c6afa62042190d38550fe0e4227972fcb08f2e0ee3f82ca6ab3302cc7b37ddcffd56d04104676b43c22490033bd18282f91f3f9b014f1041079a5e08ded1c7e63241713b79d99e10278f819c21ff510d75559b85486edc62103a4fc203650446ce3632178bb7ce27ed165cbabe4b06248cfbebd49f9cb9912edb7e04d23abb773afebbdc214822117d82c962f9fcc950a6d7d690ed23cf57c94492d5339a15ffdd61b39222d5c3553d9a6f9eba5cc4172bb305c21c49453b493e343e0ecb3a681e26c24278a6d97b9728f775e9b11c0483551f72135743c616910c454b16513a671791f30a038b0cf2f208f06f44fc9c1685cda6ba94f37e9805c1f5d2c382fb1ffac8adc034018fb6c24b15325d8a694d0db768f94a7bed3761fc538b1af735ad980f788280648c4a5e68ee1b44eef28eb484bfb8bf039b5c6f64695e63d5 +MD = ed76c5bf4ada6a2092e6dbb40ff40909b8ec06cb + +Len = 44072 +Msg = 5edb47d07e856a3dee51f60a723ff8dea7cd06c7f21cd37fb64e00eeca3234ef2a236e57ec2d9a3476726352efcc4904f3b4f3208b63c64c5c36b6781e575cac509a49042aa59bf9d454cee1d55cd4b9ce2e6723681e9eab8bc4be4ed1a2533d3a0880de213594146ebfddc00e35c188a0020ad771948224abbec078c95b412a4e35bbedb725ad0eae7b3bf6809f39f6d1f986448f0f9b4024ed63fcf0ca4efcf6e8a13ad5bc106dfb4f8e8b15e4648dc9db8072a8d510865e1950e42c37a03a99ebdacc6443e2bcbc047f88b34b69d4f170a36aa52f0a7fc20a2f3867e9626c9e040fac4a024e805b62b5f4441b7053af7f94336f65b1b1b687a7fe8829ba1b6ffce8e0714179433f31d9d7af9da3936cd2fed5ecbf2ca6a35a6040773fd0ce739a0c72bf488e8cd039923adc19281b912f87590685a4e6f24903051c73cd0d12a824691e5eb3e476428924b3d62773845fd7c6a4fe40f7091d38565f0cd960b4ecd7ce75cd10d29913659d1c1ec924af2a9724ae732963529da63a28541b50c130cea8abdbcfdea175cfadff3735b579576f7b0b2c86b23393f6b95f91bc64a13ab0ffaad11590f6306f5d446a94ae49b006d4a571806a16c5cfdbec0ce325bdd226dc59f70d71000cecb4d3ff0e9889fb0536638a3f1562fddaa9b70db9197bc2d846a094dc0828d1efba943ecafaa00113aa2dbeea3a7f01bf2aa8dc66ca44d16d4567f1adddd4461f78706ff15cf68ad937eb57aa62d5992566a8c011c081c68ee19657a6796d3425f54dd9aa46f35effe5859ba614cc8fb4669d03e381986ae223160cef635c63a83a15c51e41ff442cbce4d307d8ccaa153171eb0397f3851212cd58b123089b514dae7b75d4820508c5ee46f4363db1f0cf0ac1998af8dfc5b6a4851442d8a4c8380243d688e4693c078c3e96b7876dec4952cccfe0113fa41883da3f473645b403f76569e48d38708aa70114e212a6b2a62f56cb23a56e563f539e5bba8948bdb477285870e53a4b5725d897404623eaee8ba5b5da1b358433fa1a8f2438738c5569d6c8b455377675f00b47578cae3b2a4d02b68edd5ad6fd6296040cad8fc9edb4b5e33943f699eceee24bb24a0d4d615db5f6c652a5f3a47159e1fa4f631c85420ed18618405bc509a5ccd6e909c99ba3069c0ae2e0843011ad4f7686b92b24fa28ba233ddd6407279bf14dd26a57e0063dd0e2f5d130aa29d87609ba57a1d2c44dc59918955dba320de39e6cf89e3971a1bcd7f342a019a1237d3a5306249788c31a6f1330eee71143c9511e7b47adc97b857045f97c8561d68d92b98e5c7c2ed3e22d9575be95ac85ccee52baf945f713563651be6bf75039cd9855b7f3889fc5455c052d76cceb1b14fe6f7e5d08e3b155b0805b1575589466d48d498ec4c1e16a83cd20bd94b64cc809dd8f1bfe759daa663a96230a602e7fceca0bd8367d6f7a2a54163cf6f562119503b5da2f961e7ee0e8393dbb5150410f75c676e8bcb69cd902d79bf990a3162c4bb842a42c7ef9a7f00a0a921142d41ef44213e264fff9193f2a81a66f5800551c5ffc6420034242bcd23396894c5f83b147552a5e92b87173d996037bc8f699de73b0775bf68239b2585fcfa1b60ac7129de4ca93b7036a06aa831b9a3d217efabd05e6c49fe0153c66374642c7ff71810b69caeab6ff8a6166f0f3b5fda88ed602a4b84245855cc1c2630252c86309655b8c304ad6d65cead58495b551b451db0d35f5bf319899a9358a0bba0161172653f4069d60b0650abee80880816d4e71a55fa522ac42515b87546a63ba1e242cbc4a54ca9cb42f29eac45400d5fa0d0191cad153fcab0e41806b26343bc5b7de5d3520b9d20b41b022bf821b958416f19a1f813969fa57c2e8744714cb7c59a6005e74524adc23052c8198bb0832f2ab8806bbbe3d58b546861ad6edb46b91eb6b6c577d4b505e92d0b3a1c7772d2895232689c9beecaf352302daa63cbce7166708d2221f8f79bed8fda2272a9c40193228f24336dfcdf887d75b27ac94e38dbcdaeb290cc0fcf00a06a5c369a8c29e7fb3ff12eb5897f57a3f62584c1e0eb93289ac7a5b0c6f923077b1837c79378cd070b61f26809695c4e2f521637fef0291be1dfd549a5b0b10f7cf4faa36274aee0721522e7e51402c6a1f6a3be20fd1a020459b3e9348c3732f060f3d081842a11f48934d7b505f7c7ce51b1a6df48c28582c3a631ebc2220c65eab7b1694dbb06031cbc99f1c587ac3511c4948289df10ddac309644190e165df0bad89227de574e6e0eb113c95efe46a55109c336ac3e8581f798c5e757cb492171a884b9006006fbcfbfa387ca28a38aeb6919b5d6691ad34fbbf9c39ba5a7eb80c3c957cdcafd245418199775d5bc410854eeadca1afe1ecd62581446300abd4c9cc8aaa2f26196504cfe6ede6ff1561c3fca7513eeafd2e54e597fe3f4d22549a61b280c7104c038e0ba746061f338bb9c25b2303ec07e1bb2866d015eaea21c72394676b137107255e65e985632774afc98dbab95a0aef54157520af7e0b219839b8c8e5d7925812f0a6402b72f806ec38c57e28df0b3f67d54c57d3b28e3e55cca609fb05b6e09de8f5b2c0f5ae27ba388cd7172114b93c8f73de4a2e7a5f4503e7947645e6860d6fd7a70b9352c15ff1682d4fc82c451a6c731bdc99d76cb10702cf1d3e2932acacd687d5f5ebbb248ae4e8997d5ccb4b94d278509cae4ce1ff7f24ba9987ccc0c879bbe6c281fd512c8570bbe8ab33152e1b5c70de06e91d14e7fa13fd083d92ea48a906a31d6f2efed52d7db02165c162d32f0208e72aad6ec0b8f213b56b6a3bccbafd40c5f903295b88a97dc64a965a8458cfc159f7d83495c81d83953f90e38c569240848317d49fe705f9a3c8de3bb5419fb26538e88feb915cf4b0a14b0911e68f4c5ff5b3282ab35bcabfc8df30ef513a8212d523a64c7b790f0f7ae4d5e1d0ba0b60371f4d835571982233e35eb9f067da69b7d2a23fee3a7bb9b0a370867edb268e31a36a32330f0cd5ef30f09b86f06270c43caa4d5269e0b62dd0028856bc44f1cc87a7c0b7ffcddfe60e0c1d7b9bc131e5abe7fc0fcce80fd7b3b26dc2240e92ee122db448088448fec7dbc83831a0b4036580d78d2c39cb9894a9bf29da2b78808d24964df1d91921a284232379a6ff04b39e6335507bf257ba0f05f3a744ab6b40b4ef3083735936e62fb7a53d7c1cd2dd692a6d02578dfc6e0bc887530134957303455886fb1025dc060a2743c913532b08b39e0874a36ef8c58f4fa6091ae86e3c232dc21846d6cc2ea60f5436ea71e5a486312b7c3c97a066e2b26805654b78850e17fe730430fdd213c6386bab1252642c8c3314605eae164918609c1ea5db06907e04b4511db918d7b5b70f5e20bb712c19e8e618ab69fc4de957774ce0dde930ca9a82368546287c4399ca098268f20e3f129a6b661a41758e153ef7e3c75377638985ba4eed2b8ad7a546b620a1105b6578d86278090c4a6d62982796e16eebb29866e561f64987dba4286ce2aef39af5e34704c77e8653ef062de5e17262161d91cdbfa6a9a9fdb65f1b34b0d6c253561b8f593cc1d7187cc8a638acc457800d3a6151054e7473d09bc5157263a60ef0e85969bf1926217d71ab29df1d74afeb5dcba2672cd1729123ce17109bc6542b124d3d39d09bf758c9e3bf62c6e12d1dc0b3bab28ce98161bedf4272c74bac6f6012dc902c60217798f7021d07c7820d2cbfa2d0b6e428a833a09f812e5c9f249b514eae769a2740a68efaf9274e3421689a61a7f2e9efce4bb835231a22b4b28bb19c79f574921dbb51b0dc709dcdc33eeaff2188205f3bced00c41d1c47381f8dbcddbf314e8759ee82bb028ddd55a74588525bfb2ff57848f2dc49c6b64f9aa76e9bbb6a2b4b018fa735b9835d24ed38bfa9ae1c7578b349e9f92c33f1083682bf90087477b35f12f91c708ce4e06232c666a3486f03da8a46a958e67fe85fca20394ae2ac76ef1318cdabfcfd0ec2ce2d27c011851d7a64a97b3450cb6692c82125e73751fc2dfa56c7e0761e167b55645b88fa502bff7382dd62f55c195c1732b461e4d0c9985363a9a26ac08df882fc70628548c5f631534e5956ba673831f5834f6dc155ca98afd1565d7cdbc6b16604e124d761db189b5c8bf75ed69392ba010444ac2711449bdd90c0bb86727b3197896b94863ab3eb667f59c1fe1ad420cc250bf9b418e1c82cd636f524684adf96cfcc08b9817d942aa7f08c342a50aa23362622934dfab55d9b22c22c249ad08138c89c623be055e79a4e061f4ea2b6c49c25bf3b3ce9d3de54069b044405a4f538e3d816e686814bcae4d815f444e72edb8d38124249a43d9564f85322f5dd515490345e0dcaa6b5be376aceb7a1bbb088bf25cf0a94c6e9d3c0628f5df5da342060498e1e4746c3e8c84690056394f8084df0b802558c61a3ab521f61803bfc00d6705d9466e1d4df09e41069e51363febc3163b606953369884f99ca1f73379a6551130cb3f887159edbb651b0a782b08c5068821251eda9d9c374e44e0075319f6464f3b8fb5900d985f85950d1e2e220e62d132342eef92256376c7664138ad712b9c5e08aa9355c8b5ced401302f82c5b27d593f8b5bbf46067bf332eb0fabef4880fc50716379a546a99f8fb41571137ff45fee3e086c28a7c590ec0cc05b972664dc0f12e6c156997cbf5fb4ca35204f9d0ce84edce1f3cebc663cad3205924caec7ee9306750436b0fd1837351613ade227d6c3c165ce03c83cc8d54ff10742c88594feaadcd6a6ae1f62463e5e141e2a7a5fa69e42e1cf51dc3b8cfe671f9118deab5aba3ff570ddede7e8cd534d2cdecb2cfe5abe55b9bf0c3bda27ae02c0089ad8b01de6881ca4314c25ca3fe35e64e3e4d3df22524a7a9570c8b20fd757fe80c507bd19b8336db13c051d68013c258a302d14b6ff08ea3f845d88d2c6df64591a678120ad3c9f365d91af17cd4f8987b815e1c1857d77d11ca28f3ff9dfa1ed7ed951428ebfa18857d066936f1ef9a423922e8d0c318a15e39db09d95df1d049a6315c98344dd6fd3cb2b261032dba71aade360bbab89d17e58d436c56740661610b5fbb654bab37988e716d8119859446de983ba73dece98dbe150af0072da99e51a214c76a01bf01180acee4599824ada263e3211efd4d72cc1347b311b2acbec2a827033f771e16ee0307b5645ead3fc83d84b0d26abe3555a2a5283a31c562cce684812287bf3a5edeaa6ca035888dce89b2cf0ea1a655e96795c7d7279dfadef19fc9b9902cfc09121982b3d9610813ecdfe42a2ea054d5b6bc0a7f008117873deb556b3cd1cc6b21f78005a6a15f36bb7e889b8e36a2c9346a7898693919444ff9bccdea683c03a2a6fd2c29d3c3b59a1134f93cd3d02255338ac9ae00a0948c4d5848353acb5108ba528dcf72f60eed2a61b9b7025d8f9da9c9796b922e069758c06089d3ead1c8a418a123f966a1494ca763894cbb5f723fad2e0e481208d59e7dbd74ce2b1466e6c80cb3f1862b22da7e7d200d6a107757be6e229d0d19eb90f8a56283fc776814d9370bd5e4fb0e664f6d17defa5111a475a0252b7fb83dd2b9beff8fefa94090d4a67821039f5072a2b9dd3bec7fd5885b6aa25dda7240d64970986c64f884fd32e1956d5286bd8200f9ecaea11b3785d83416cebdd6991e2050b9840d03a9bc8c6ee005525f9a16f293d291c8b1bc1f8472fed88a33ab0cc6d5ff713849335139a4f4a393787a93e01e0bafb3c1e7d7e8ddb715d037fb44a576c6be8737964de32a2fa2967fe39b620f143302ca2f217daafbf120420e3864c9abc67a6d5714e1750d9ccbc4499ff0dd68d6263906ae9b812a14eae0586a5d351b1372490a48dd0c2afcb3e42114050f9603aead12b1fae6cddb90a17e4d275f91301f59045c3e55f44cdf5e0e9a172c08460c84b7ddf45263cfc1f3c4733b9faaa6c22bf9c17de8e5f7bea07684bfa95c07b05e8aa5103a686bff65df5f027bd3e21b204f1b244b9ca7d249dd76670dfdd33aa8ff99f735583a99563373247a897c7ad468bbc9f474b7aab8b7e195d05a432bd28b1ee1a9bfa6306345521a2247c071c6fb35c75a0ab1b88baa58d4871da1d499a1b6982e1b59551ba97e4bf9ab7890666b1ba502cb107c21194eab98a4a9f53cf7f35328d7ae67cdb45a426700ef47313cdffb75227e66177925738b8bb5ee5ae257db20912fe9181a68860104af16b5e4f53337dd3626ed6e9fc4e63f402061f54678bbb4586979303b9f4e03327f72f7edd4b127f21ef15df0282f3be34bf0a551b440dda2697f9a45e6a4a903f1e6ea3c6877af1cbef1cbd915dd0e19c175771c265669b85989bd1a04bb42be0e90306356f1df20973d3cbd0666325e116efed84762d4e4ca261d2a71e88cab35ed6ef538c634983852250e8251252abc4b8148800ccbc22bd33ee9a6b2d365f88d0a64865b5c0e02cf1960122462fa42a9b2df78baaadb0f2f96fa1bb0b378d6cd7723b82791dc87128e341e66885724f807ff89d2fe99e489b9be6948a94e514d49d546c1929e55aaf80d3f8de1cbd3b5053b4c0c33793c801bb8e8112170e87b06dbdaafbacdcf26eb5dde012bc2ef7f1f1537bce6037791316c4070b86b1cd512b9bc4896e583e4dc988276a2d6c8a4da1fc56b82d3363baf6aeb0ddaa75efa11e19432936ff483506fb54503620fc4babd7dae9632f8edca17403f04b03f487905cae45cd79170cb25fef2ba1f256d2560d8ecacdd20362603f88ad3102e4eac78f8d44fc6fb3bc16db806334899fccecc6fbc132c5c9357b37c87a231bc7b40cd8698e8989252b7a989060b88edf20b329a73759b0e83b3a834ac0eaf6a6cca75fc88b3c6e744325bda689f4a81eb6f45f1c950b39695ee54c96e84e3a881ae04d35a3dfc7a8ea61734b48b2806576f68fe241100b5385c3b9355817907686ffca353e383bca0a74e20604b8bebb4803e27fa530ccae981df3ae7a0d9f77f84bfd52c41173e08aa7315f26cf09291461807d273325827e3b2189b5f81093580d0f139d3016f5524289de14bf09b6c259906431e0bdd821656c4f709f8ad28e8e2800315dcd0e4a8d110c3750676a3a333bba2a003db768e3fc8715cbb63d82136ea2e86240355ad0f270f74acb4d6437a8097a5b4c283bfcf8b90b443bdb1de70c802b0616716a525393bd74dc6828ad00d888b9933282fa886ebad2c3b5455128236010f8cb625c5dfbef9743c26fdc6ab0bee2b9dd2523d62c8a3df3d1e398eb11f1498d492a363732f77ba8631f0d0f18839d67310dc0077ee34c7539e0057cd444797ef6aa280bc03be8b154228816983fb44537201846e92dc9f1f522e003f4c36872d7cb7afe2b25a6099c5e95a8b85bedfaf64775b9f7d07a0e0b9371aaf7d4dd12f673733afd1b7c5643bd7ced013d112f766b1d882f342775851aff9767e1a1065a8b5ce7bd8734415226840cfa4ee88bc07259dc19c19ace6a9ed4f2cb517df50bfc7d2cf4d09471d080f62e2cf639b7db4671dd3ee09ac0c30936e4ac8c368712ac1e32295e658fc5b51a7a1d9ece5acfcdadb225f7eef397426e9591fa976576858721e4996e423aac381957ac6d1da5f1558457705f10ee31c32c020367373f6e0020aee97933354d9832628adfa86498b07a5ab1b5bfd1be7fd1870f6da4754ed0570db64c09c18082eec49eeba214ac07bdb824b8a746d1e8aea9867255210f +MD = 6a5fc2f4a741f17a2e62b198d65e4a5ff6a1e748 + +Len = 44864 +Msg = bba0967875c4743a54f5b6375352cab3f662f2792e6047cd7dd6fda15a6ee80cd7043ff781ffa11a88e25527201ed644262b8fbf07d6e3fddedd70b4dcb9955aedbb31de985aae9527cc3f7709d3658b74dab8a04f40e43e4ef4f2dc5f42c95345ecf493827da5957bdafa91d71a80702897f684cd45537717430a81aab08cde26c00e80070f8d01ca3510db529a2edb898ccfd34a8e37907ff3400b86ace6e3da5f090befb96fc05d0409bf41fc77b4e0decdf58ec39870cf2c1ce3bbdee04ba7f06d9e012252bc7c706ba36de763e375b87853618b7e014e15276f11ed81fcd69bc0a006f23edc6fa1c0f19f04fb51904057538b8ef22a46d7e8185082d2dfae8a8c79c7d33c087dbe8f109dfb46e4799ef25ed375fbd3fd99e7463f44d9dc79e25890096b5228efef61682f734c8577fbd1dd02e8a2e4bc84ad62a7dca0dc7dcead4f97628b250d5ebd611f14161dd47f7d36e08eee46cbc0c1d250f12fc50474121d3861ece51f302b633487ab92d6517dd33510e7df7274ab00022c8c8154fc0f62b3107f516d9033d6357414cec69a591ac9159598f9c9f4528535c1f6b58f2c87d1164b513fa45e22eb8257b7ec819a756446015aa7e62332a0b3d60e7155f2f25a1c58cedc9433af1e5a7e378f2fc74bcd4b320bc6f3c0071d4ed1afcf75e80c16c9afae8d893be695a49035f8cb6803cdcb30949c1a5439c2afbcc31617973dccc657db9aabfc2d1a079698707e05072c6f04de72816630587e9e318f6585ee46ba583b4b2100ed732b974a3d7027beb2deb5d08f507e53a66280e182843c854a4ebbb8e714cf8f69b99b32a7c8559026c04b513db0240c760469bb369f446ca12a8739b8abef79c459ab38f8af18e552bfcf4bc2c9e1c38e0c61a7f5dc230913f5c4a5040fea154cb2cd44764cf725fc8148a567c23cdeb721718d056363c667577ae6146748cac96d0b3e6bc87ab8edaebe4774c3bec6b9eb9f55af5d8b0a67fab2e330dc8fff02316d0e1d4a2907edef391931f6ede35c14f5e73bf2243cd9837484a096491ec0a7fa9dd5fb8d78c4ecc202e581549d68417b2bf149b5c6869dc6b1abbcfd8ecb77bad1da022d74394c60edda8c785da41c380a198bc60f36eeb2529a7634b7eb48b5937688916415b71cbf5640e389d94d346afadfe07fb01e3f4fb5ee7501e8c2f4ccefb542ae20d7fd61a2c41c8bcf7c7735dd6e8a7ebed67590444948d4898e7e628eb0c7bc22510bbb0641abc94e500a510a604c7426be5dfe8fb2359897545b3f9ba2a8f4e3d04eb5c9df19ad1e71f4a8c9dcaec9b17dfe7fde4fc5b5dbbb94495eb26ec02afacf3835c5ec9d06883d20620a39e527bc61fc78487f931a6c306a1e09a087c177952a901caf03d03deea31c13743150228c5ea6c6ec9a1f0f378925cec6b06ef0a875230be74642370d18411fe713f458898bb0f19233b14bb28db92a69a5fa0d11ff36bb1ece251fa56617551bf4da05606ddef0fbc497c8a860234510cd2d75d7b21154db03409cbb77e7de973dcbd217eb77ecafb79a2f21e9ab464390ced10274fbfda74d5d575932f8e2e3548f66b8ecc50c34728228251098568a56a7c89b2f3ede091442f7867f948888a3ee6b4a5a0e79145f175abdbd349c6e877e03a8ca202089c0b8254b4601f80d90b086d61c9b5ad7e4206ef0d8c541768b1c29342deaebafb98789af6f885bfa859c61631ab4d8036b670bc749946c2bcb49e34440e366046777cabae371d9d8e97ba4f93ca11b225bb2da48f8e94613adccd9e2eb55ba0f335091748804992e2415f7a06aa94abb1cca837dce0cf7b89a6fb21516860e5883d985e64789c4849e3200618c158d571677ad6eb144a6a2fbf817e6a9bf8b68c0db4f1709478163be9a6a438a2d0e7db18000228ada7b573630af5b8c4859c6531f960fb487f951ee14db4f4c39f2b555af26a142169f61b5df237fa7699ffaa26a03d7319153d8966afb8cba8164886acac4f3bf403a48decd1a57e26a868d17873e7669adb8801c627402bd4d8a7c589a8521eba073921bc13ded26923506193ceef4432350d0e9c5ebb93be48c1b87e70e31ad7e73c9d3853448592bd4ed0f53bb5aa63a4250655a0bba1d8f93ed5f790a2eec2162746ddfa670657b8dcb63924faf7c3bb788f8eb790c4c96c77949171f1d92d2671c53983b6e30cb86277cc24ffbac6ed6010b3ee0b7af414f47ab8bf50886d9aa48ec789c49a462e789c2ab66461e1bc842041de6c42dd753dfee9b35f6b07e5480a0467109a88ad9799d143a99ba8ab4d34d4e333ab0a2fdca7b1087f0f8098d4dd7cc61b72389848075c673fb6803c33d4c9970211fe8738fb9b192fd46c17c35f9d01559ffa80f25b28aba7510cd1d076bc8458161f2ddb60f48ff2582ef4ac26e1b35fa232fa2f1bc26b70e9a31e9b911a15963600864c7e79b757094db1e7c9f75689f7766676bfc6211ceee7750dca5ee55ce0372304ba8749de764cd21eaf2a55652e394831bd80870bdf4e779f79175e0cb327768cab9991f91db0d7b94d075a81a4f032189b9de7ee495c88c923cffa361d56034ca84d2a277dfe25302a2ab0600a3f9673e08aee04ab764b3350e534698d575bdd570e9ce9f5996d1bdce10170ac7bf7dc12b3e41f7430114696f3b707818fe2b72e5a44d13326f1f4cbe6c8442a39d8c9a8c5647f422e8d7b5c77dc90a8743a62a4bcdc4db50b66237d887f4b020dabc5291c09a483a6125a27ee2fa550a8c55830b2adefd9db2c5078628105b24c03470a443e3fb75b326b7fc32ab618a2060078b84418300ad6d432f19804b98951d7c2ca6ca16ba28017caa358337ed48f03e34a2957460ed85733a20eb8865a29efe91b2f6a0f006df79eeb22bde1d4c2daf6e4e83d9a7bb331f1106fa1b712fe07f3a2f10a10196e73731734b5e00743ee2a24eb2b9bc5f9fd01b92540ba6840b8791e5bf22d420423ddc3e8ac080074b5f366bcc1c8721f30dc08ea160ebe8469cfd9bac2951ec171355dc900b844f7eaf946d760bf049545f68c08b2227a5b948e61b7fc160418f4206150647f392fd59221c5a8cdf1eec4d7bf2b85a44018d12b42bdfefe969d25155b0947db719f0e54a4020aa3ce9e35f61ead0102945ea82d09474bdd4aa07c8ac77e1b4b72c80db73a0706aeff2611d83717c4abeb8f721a01de732094d5630723096f4db13d4c40405f0d6e0818d10474e6412eba4dd768d90e0567199e80f0fa45a450b15162867374bf5f8de8fbf164b2f6f984fc30a00b40632f2d8e5f0eb9bd6b02f7b6b8d03fe27cf1d5190b2592e856aad02d2635f5002cd755075586eddb23c2f8efd7d40222d6d3821b87276c010091205320b132d7b30e34bbed1003195f2f393f47f866a04d632972e86d7c97556b0a00a8a85131a61220febe2096027d864d5781c3d9f5412f1fb1b76e2115f596d1b82661cc9876a1ce42214f13311f9689bafdacd89c72a5f95a6cb015f741932bdc4293f196952b7148bed206ffb5ae82cc4449ff0032563acf80c9b7c5c9ee8d0f55a58c96922dde650f7fedf8c05cdd1dddf199cb00be48938c11731c0f0759a4082cea22ee175a196baf44a6d01fdd22335a45577e5cc758f73df444818c364cb28096c6197678e88bd687746566277bdcda9e200ba02b625a95a7d9b1db875bed471efa94d9bf54b88c32fbe0de308d32f8e0cf2926e9421ebf0a662073e17420f6ef2af0af81e0aa36e3a7d2c67cc8fe4bd9bf575f859abc1098544de3c907f5f683f1ad66850eb97cf602cbed80c17739c57b36c884bedb40de4eaab99299c4fc79c93b9d3d416ea506973c81d1093649507d17e06b40c4b6489fb763f2ac164f3d2c2bc1ff3b427581cf9541e202c400e75fab45ada330f773c204515db182854a94ee635f2edd34e426769c384098d7167d4146c068886acc701220383c62252e8e040fd1ce8789ca36410f48354d625a607a9247f333a6cf14514f16cf6da56591fd05fb8ce9da9079950996632a092fa3c786b8f5db320819524c7dcced9c6c2b4a0440dc6cbdd36ad319a76cd75202a1b8b277c2e772e4098586d1c76a60cec46b89264f989a0f749bbdff84ddc37004be9428fcd1000f6f7bacc7417c98e9f7e1e33058f5f5a1415f75037da5e3f42759aa2106306fc6a5952ca2bd9cbb6a204dc0d38afd57353b8ecd67a9a82a0b940a7314717df8c666726508be333ebbf7ffa0a458174537ddba25708b8d0c22d5517d57b122517b0c94147da5e8994bc977e11732ec3635a2522bc2a5ad00e665bf278f67b5f051126a8956171561b62f572090cde4b09b13f73ee28a90bea2bfb4001fe7b16bd51266524684520e77941dddc56b892ae4bd09dd44acc08bf45dd0a58dc3ad1a938727eda37017260c922c8719ae522bbf181a955d8eb4ff67da85865d8df18308eb2fea115ced1ee19413ab01f8d839669fa9e5b193069f599043010399373ba1a8dea604cd4c7f933463b812fd63ba97be284cd56c1dd26619b9c41497d6bafa5ac4cff223adbe9ddd8d3cc10ebd45bf1e26492d7c633f09f12a3e04ec68778f7b72b65e0299626e09f0b790bf2d61392a14594e468f4ba19144dd59195507bd855907ccdc87e180445ea706814c73b25c82fbac5cea7ee9847a3085a134d21102e822b33401d28106f799a6f78313a73fe2aecc122d4f3e453ac61f16706d266eb095a58b8fbbccec7bfdd68479b7844ec3f1221890331c5e171c99dbb03f7a4342df185599e3e04f5c4229aa88e5d5f3975152e2dbd100399f826a734cdf690b0f7d9024b90147ba190524ec491518e8ed5db2d3689f865224b6257fceb39f3086ef817b559a8fb722c53ccc22cbc9793654d69ccf051b5257263f53be52694e49b370cbf7f604c109f0f5ccbe70643ef2f5329157983b9497313c91844273dea847e28938ca63524f16c46074b975a4b3bd6b43cacf63a3758581bbc8ea3b4c533b6b55608e17f562a54d19ddfd7a44e8fbc53671112ff96291c324f4e02c21bb0c5f9337978f24d53ae46b62b2fe9a135ef4ebf3140d20fec4657f809ab2f9501953d5069d556b27462ed79b805f0eb3555ed6b93e6794aabbed2df4908c3da300dc8d55f5f732c93570e0f0dc282d595d87893bf6ebdee6d6ceb2d958046934514e4ebe47e1164ba77f19fb3cf67075f5f36613e3e66a33b38ea0a767b7f674694d7ba7f9af701f0a9de52309267289bd170fb97c03c131c0a169d736137ff3d74ea69b81beeac3ed51c500e7549e04f186e89525a07e418cab80f149b3602319c6520176abe0daae3f4c0d4dfd7d9851b7834f8768ebe37601887e18f44192bf3900925ed2fcb3fbcaeca0b38d7b844c2d623107b9a4a82b47e2e63a629ec3263b249690d088f024692983ae7122895f5cf8022d1f32f00ae322c2148ac224ed4150b6b321300fd6ae74fe95650cf7e9cac70b6e06116b9377ba8a3de9763872cff75b4c516c73711f71aa1ec59550a9fb61d550faca7b635a3ca72ceb059e654b9afcb2cda8bb821081fe811f4633ee632af86c89b89fe92f0bc1582c0aa72348be238d127f589846386492deba1245a6b4ed273f7659934aba314608efe34b4bc36841ac5adb120507849a804b6c3e1a820c07688e290051baaf8d2e4fe32bd96d236717b5a38df161d72eb084b23643050d83a16a9eaeb8af6483f885176355fdfd63d12a427a7ff9c4b5cbe074dcc4c04a2276961afd03eb28c0f43a008066084ede653358562511d5c64f09348ff4465a7a648b3e89b80044da9dd93ee16e1ea02d403b25af755ca2e6c64961ce7609a6e1d7d479c34981411771ed1324f2a389d6eedc6ae4e53c948dae3b9d26be8cb7ff5cec4d383ce0b63e0ce03dc978297461ed8178a4f9342321735a471722322639704d3956f6a11c84cb4d0f2d8332f864c8b4df5e25c5e758c22fe01e65ac4a169e71bebe2b34dca2399e17ef98327e45ecf11f8eff84498a0726f8baed5dcc1d53e45dcc4f2e8f0ce45dd87e2bba8e9bd6c0b9a5ead1e23baeca115b2dc904c42d3f871fb700ac2b3806d167b22d91bd12ae2e317c4119f445a39aadab708c9186cddb17072d9c93b123932ac02e30502d13edb02844793a582e24f0ead6dc0bed29ba40b43808ccec2e8e35da1ed2cb928c98b0837e887452c420e3607e7b99ecddb52b52a2594d55923317649201a5cf828fa0f231b038c2201ee3a0e9d3d1f2445c4546ef167b6a09125df40a4565509063000920990e22bc8f80207b8d3a9a18001d1580b8fdb5cdbc680cea0680a230936c4cadab5af0e3f32763d5f04a40a351115309b94aa58a81d413d3cd9e50ed9134114b5fb5b940da67ff7bb5778280bfd073ecbfc8d5ba1300bd3a22f4c911fcf61b7c2e94e85da5c037cf4548ec3abcc8ec9c151eb2c6e09c4daf7f5a97683730bfd2b07f0a9505aeb1531834ca3bc86941ba51a2c94b6b0569866b06383ac06272c15ddaac715aa200a9a6d1b8fe734007aa0e0b75b212ba75614eae28143909c8daaf4e2a9d15489a359996450d4dcba2fda2af6495984a15b2c2a8e37ef1a546812d301152d5e0d28938f8dae2a89a9817a80502503c32bf1d4f9cf6f59aa3605750270d4d0d296e073d800719240b7baa86a2db9caee2c5e34de0def294b2aabfa0a96ae64b70b141efb2361b30bcb218e71f5cb530f8eeb7661b080060218a3c972da6a8e16530cbf80604636f1cdfd511c1124492d38e0bf0a20ea98d9e8360bc2a6d2f8f658107cf01ee7c2fba6971cf4e78c525112853a62c5f588d782a9e88361ac4a5f01687dd2c40d002f3c371580e0cb168204210cf008697e04cf47873c72c12b5a365bebaebc8097977824644864a83fc8f6fe603c4f0d2169b557117543d944eddf32ee0d6d08303b42a832d4dcec722bd0625ccf03aa1a0d1d20adb63bbc3d23e536ad753f6d73218309a7adae5f59b47a9628308d0810f9f0eb8488c231bd012eac51719a7607532190ea5a44c99c6adce2ede753efac331400be7240016c91a3df0186e6ed95d90685246305f2e356df8dd37dbf2796c573a782fd1df4f4da2c16e63e8b98c4b918307c5158a2d57e69e10179387775b6f428f8afc2d2fae4b2982820f13f3dfd41d81baaa7a01aec6324a06325a9f20f7eca4913956329b81baeeeb481aca8ad68c728f959b55ba8b69fd7c4f083b4d7fbd79daeff6f265d51a06083a1a6accf7543ccc3d6a940b8489acf2300ce641652951b0a69bd9cdb3ab6a814baf4f16d4f952f9285447026035daf08bd51a9d56b4decae3916313bc038ebef355f208ee00578edd04d94face2fa0fb8fd62c1b2e463722d9428d84ca6d549d78afe13b0fdad05d1e8e533a905aca85de2394f083ca25efaf0959be3f9e08a5edacdb7bc45e5e69d8cd56f03324542d12028a5c521fde9c25333df10913328ffb1db756e7d74b9964d344239ed6677c9338b668838e89b1a187e0260f14f8e409cc1cd4618ebe752b68c6dcb9b72af9ca90bf1bfe5f4fb68dceeb6539e9822b817fb3fe18cbe086955384226c11c62c1dd14e7eabda573450d005b46fd9f9eccaff24dbf5d6d8530b5e25fd9f2a629df5c20a977247cab35255d71d992d85b04c141673e0f6cf64f34f52753a4c27d5bb2d9c703cedcfb9fb2509a79f2e4dfd6f8531cfc274ed42b6efb29325bd3d5bd5d8ab11ef158fd0b307425a69217a5e9b1c1ef681985974bd06ee5e49c5cbb7ad8be0807507317fe2c52a3fe0513358389f85f007aa3c826f5caddf8caef972a910e3c7b40bde4ff0256a5dea05a175aed70dc63af2bdf533b8981cd7bef113332e5bee9669bec645f0aabd7084ec3c658c5f7f04b8055473e4561f133fd822b2acf0fb0268f86e49ed91655b +MD = 280ebf4f434e4134fce0d3f7581c2434bab1efbb + +Len = 45656 +Msg = 52a76855b415a357d6747842140141dca75e257d1c3731cf0426aad2eed4a2239262ca7d4f078780d8fa48b12a9216c3c1ab6d150b4d4a7b1d888541a5a2616d1f7562454c125e11e0aad7227baf8813db363e4f50a0e9d37079f3360ba0d0e662a8d7b4937f5093584dce9cf19fbf565fc54135d378376066c19cb70a161815c1c5d1d20d96848da7abd42873ace213b4211dce7d1f5ca968272acf894b6082a592faa8a09e2387358c92cdea1c19d342127b2234dc7f37dc7442837188d1b677d9f73d35e154096ab8af933c388e1d7160033ae1f6c8902b708edda81593389d60739ab5a5409caef6d48252486679a9d25c1d6db6603ebee3b6e4173acd9081f014c506330ec76910a9a31494cc6f52312fd3be646fc9fc9562a0a63fa847895082c812d3e71303ccd5fd6a63e688d4452365be481cb74c4e391a3e6b4be41f4a66abbfccf307e4f301983dffdc4b97d6e1da53a9909218d5e359c507deefaaa46874f768592b744dd47d73aed74104ac103a67d1f3e1c7f30965255b8bf192272f2da1ed42071ca1f7b3f6b9fff0818e598ee1066c2dc170534744af78713e9b64dda5a4d52442b91142ac687be2774664dda99123fd6d1468060c4bcdf718c8ae8debd53b09505bcb337f02749f4f9ad82fa7ba41d935a6f1aa6376b30b8775b6445ac89b3eac50cd8d56d111ad6f535e8cc3c8ee4980f0953c337a5236f36c240adcc41e4cc05fbe58181b7b9641399dfde50551d6b7b8fdc3639dd1ffc4739fe75813ecbaf252479daf29d9e22b133e89f5b7930740c7d047db2858ef6353cfe4b7fb2c10acf00f630243541797abe839db27db6584e5b7d18363118c36d45d08dfc507d75500bfb2f9b014bfecc744147f9d5277ebd95a6743952261a6bdf15cb9b8a496544bfe927cba40619230f922c96020c5de6d60140307b3f31cd832e62d1e2cd51399750c73a70086f1aeb06ba2ba6cd7c36772ddab02edccfeebc9b0243dc61cf9b1cb27c6c07eb5710811f8f0f15e36039037cc23ccf773b5bf5dc2845f9bf46e5da9ec5e4ddf767a08c3d09d4e206907b058e853adfa70aa1c972237cad2e4da63b76121964e5174746ffb8f19d7f8368f7c3923ef1e4c44c91fda23c69475a68c9c90f8e2f1cfc715bc82b09aae6cf7f44cc87cd98a8eea909cf2329d092d38a00181cb7bf077dbb3536ce619cb4bb4a96f9c44b267be0637b7704b955897f9678d3b83a774d21816dbc11bdd5620d4748ebd65c3dc64ff87175e55f8aa3851a9e9c606afa566e705fd89362f7870bf1e5134c55412093d4864c33a0c269aa92dbc2a3edbaabeae4961cd1f5758c5dc6f5f084eac3134284248a8e11af54467bcaf6f1272ac5fd6aaae95be9d20a6952e6141e615606e283c691432693ebef51e6a9e69bed2d3c8f08de7fb48f59c5125fee877d5c73ea5006f0f15432a91b91b94bf2d0545a1ebe3a5cdbea2012e791adf04e8358f2c075403a272eee1441d7ad5d845902c51a64b9f4eeff16ce473d6ac9d217de0c0b601cdd331b38a5f8705d7f399a7b06b63ef2272767e5e46a8210cbc0af5e1831acf74ac3ada4d6a61823f171191f9788998d7423b91fedd80c2a7678be5bbfc9b85a13575ab53ee12bab84d95982e00800e65c526727430648326a98c9495b4a2edfb75cb6ec4730275e89c0d027789af1976042068e9c7ba2a3187f54b983195cd2b74226ac87f997b770c6118fd9d8081af050fbc852beb806f0bae52ecfddeeed83a64e8859c3f930ea57922e8c35a0dbad2ddb76fe3604d893c9ff1b8a0e318abd0773026515c8755703d686084a5873f73709ed07780592622b17024a00e124b3d458ad126581df37496318c66cab5e5eeb2bccf70b26befc6ca165a87c6a66289b43eafa49b1e91b96ac794f32f5f554d89589555604d8c2fd32c7fdc729a95bdae93e7528d51d648a370a1b33d4f3798dfb949aef1c5a465b5fabe287cb78edf1ad2a1b997806b282775db2d5c4c32d59b281404cd9cdf7156c83df24bc5f5fadf44075f1f71f761e01e69e9f51dee0ea5ed1edd5c9ae75aa0de24c2478c7113e72e3ece8fed23fcb4b2736f6e8b144ae5508ec4058661287a839c20d8d3ab3419db718e4dbc97008d7b2348315e4c9243998c3e3329f8e4cb01cd9566644b645d92c625c3a6fa7552bf9ffba45e3deda70f42d54b4c52957d9edea85905f8ac9b9a651d5773f464ebc70f1031529063f9fbd610b6b5174377a3f7e2197f5a12bb3c77fe73ea2fd43fdb9c0f3f04ecfc21a57077dc2df0f6a15842ca0e9a1aa1a6c0244e7ed550cd38426e81353afac107553993257b85b7e304e4e8a11de05e426e9397e0fa0257bd46acee7dbd62b9935358ebfa697d8d25f008c438d25353788ded600021eb7bb72d7edc7e55cbecaee6f608c1bd80814f65d4e73d7f1c87316759324814b3400c400dd5a0c9dd633e583b70e440389a49a970d816ede302534200941f9a03afa5c781604be341252cef4eadc9ba4ae0fb04051f2de44fcdc7670a0eed7a83ce6a0a0206e7699f3a61f45847daf3615b4ec0bb45e82c08ef761e9e281b7ddaa74350b64ddc249eabc4ae80c47db223142824b9d1b18cb77047afe46b0f6bb04219e3c8c093dce77f3c67efae1cc138127377284befcd04592161055e320cafa5d2095ee4725922beb365cc8c1ee6495d15022f3b09b796b1ee7d298aec277dda580ba143e262f67110f240e7ebeafefef80df72a69121680954b7775a686c2e99131b8644cc10b9f3b547346eb94fefc02dfa8a076a62bcefe1318a9c6ef27d867c2cbcf163c0a501bd38c3186aef25f1dc26923983b7ea4111d34aeb62b53b1c108040daa9c9b8c9ab9b43024fe813030fc623d3798b609b6b0f20adc02f07c864989a56ea8655c9f4c12cc2d4e547622d6bc75bb867c06d5167a47a23ba33fa0ce821fcc2a11c713d6cf8c09641239dd989f538dcd78a25695f5ec6fa01604f6df18042be846d6dc9d12f920086481488a3260133551e521768b82aaf7f1d270c372daf2acad90e3ea0499da04f2574bf49e23b686b0d71e016390bd09dbb2f6c4ba2c8b3ceefd1004ccf7a01f63c2ce1d0a25de873c81367da69e0f9e7daa7028157f5d60b0254c359498d82060cbb94e9fecf4019eea4f347b35087e7fc5c638ad5dd0e29b117dc38106ecd09079f4cf85025ebc7d1a526c0bdc10708808e13caa4d4c8958c88cf7bdc842f79cd468e8e3ef8680821a286e7d1b8f3d407da77c34d8391c8f5262197066445d2be4fbe1e139d21555f1b782fa7aedad512b013f7184ff64e7b8e571c16858c9e6b29601a96aac429da7e9efaa829288601ad7cf8cdc06290901ff46d957e8047445229160097bd00245a5ffb4bae79618531272ab65b7329d3597e2e0bb5bd77fa585d9319fa7882ed2d2f841aa529f1edd9871f7a978494a5d958bfd1a1907acdba92142b3982fc6565a2378db3c6a1dc05314972fb234b87fe08a58fe8a5fa5ee74b1bbcdb59075da24c882d40ec0bb052aa2b37fcebc90a662271aee16a612e6d0d0c5766872e164182f861d2e69a0b30465752232a97ad702a96b7325a39acca4c88834199cb2ff1e9fad3f062d75d2cba3039f48c31d1ca85a72141f1fe6a7d8df2b922ed791b01e621fc1fcd4e26b66a5857e77d2227c3c8058596ce29e7f535ed61510eb268100be032b7a258e84bdb32448269d3000a76444ca74b4695cff8db34727a01879acfc8106e7e92228b8140784bfedf0aecf4e5ff09f5def47c3b3e7afdbbe0fa00b63c3d9abe8455c3f1258baa98a0a909d85d15256a4d94787199dd5950cb5ff033dee2c2eeaa02a3af33c724c3c25aef953c178ff53cf653308fb42bb53af9d7dd02d88d7b7db999100dd3510cbe90eccfe57eb043078a8b0c6297db75ba8836266a67310169db12c81638a5dfe00bafccfbd32cb047d18e49b500eefec46b79845817741d18e7bf3bef6fa9b9e0fba730e18d5be9685bdb8d1987ecdce314309b5e71cd0ae57fecffebc0c3273c1141703935d43b039a014af2854b7c8122e9b0000e92676a043a68be0488a45bbd2d2f65351c41841c8e17c291817a49181386df366abf0105062ab88360bdca8fc8b2e8339a897443d0581c25354285543c743e91bc7e6502fe9a7dd5f1e002e982af4499e57f5eb086a061c8cd61d077c30cb0991e31e08e825c7064a2978f5b09690cd0639fadd30f6525e4b054a4e355b4d7c4f6562df81fc522b7f960da64bb94a38fcb66ec2bd93afb1184979d375301069ddb7787d0458927687cb87e9727a69b205361844b828633d7c0a703e44975ef9c43f288b7820cd0de932ae652cc13762ab21c109289db729feb0f836aa787d538b673cb1e63c4c182d3149c38176fa7175df31b915daf39e27a3d963b0bbb6a1ba967a96559357c0dc3222aa7982fb07ebd830fd87c65fc37d4bdb6e5d485108da33ace3cd0f352c7d9cffc31dcb824a9674867d874b43c18a11c6ffba0796b272a8983f5797308698d7a9b6743ad765fd1cfae01c50e6bfd65b61bdcde0cdc70a5c0753f9148ef3b54be82a86b7417ea93656ce4fbe91e6e7927551a0bc3d6e2ab7c0c7bd6c989d5d6083c85c2b09be202c60f1277b8c5e471fca623b812fd05b218d42ab8896ac177e4437fd7c784cec64e1eeac701f4e7e682899a419eb152402346cca50d0486c0df11f7194d4519448a070e68592de12d7579ee56ab9640ec27eee22ac8d97e375532ac15965f4a13e671ddea32c388dd31e18065ee1e5a0c93370bb8517c4041e32fef4b5755e9ab0fc9d9bb0368177c347b00ddcaac262801b999ec1b4f557705643128f4ab6070528992595f8e45611980d04cb5e20dc4dfd12d24aad5365d486a224ce2d2571a5b3b9853bba87b424dad8f215432a9799a3825f064a05b5b08cc2315c66d35ff865a4c289c4921864d4b8e0a1a1051acdd3924edfd233cf6d2e4d41203de759660603e4665d2e0b395056d557c2dced4f56eaa6bc8f073c7435e85d02fa89e7575d7df4bccf83140b1459d91fedd59989f4316f84c7a7832c683d8beae4e3923333bbf87260b8bb42ea6af4e16918a5e17410b121c33b2cfc91f4d5c0441ae1625064fb7059f5884698312f857fce99c1a02e757acbecc04e76b5436c62595d4c7c21029e02640480e65591f3771ffe903e34c27726e1c689e127dcd786c68c597f9a17e4a22ab6569e7f231499325ab617c9a1001e44c61498f2a8e7f889f8f22076412a827226318656ecce2c30389bf39619fdf93a485963bfaf85ffcb297d285e8958eb62dd7a6883f40a7a401da79a42325600edd5bf0c36fa9ae5b4a66460f9f556232262970aad43b1c98b9342d376f4f47b85f4ae59fe900cf06bf70d8df0900c72db3df2347de2a9623921d467da68bdb2292e8e14c079c56919a4e27aea5f6222b5f7f1b09ad8dc8d7150c51f15959aec020ac80323beab98e53549ee906c417ad717fe45ae2d30925ba67dc1d08473733810c2efd066a8c4f833acb08abe8fc16a2580ba5ee98fb820ad6415b23b318df2c8e59f6e79a336792672897f5d364095aadfd85415e048e8ede2e564c4ba8358bb99dda60083379194034117521c3f812d826738b90b8adaed60f78d27f89d9470476f2001320d6807c7a0fba42b055536d32fb1dbf7c61f354414d66ad222cb6f551e838797002506266ed35b49dc3a4d39f768858e44de4df804e7972f5c28412db277979a5af11a88724680600a58fb1c8905beb74b40bee28f67b5f991d06d35f3a63b2361f3c95575fd1957d8d6c7e4ab2f8f5a256d0e6c7dffcd170aee7bd7a9b57a1a5f549ef53fa031168edd3afa268efe60188cc8fd9556e6710fa8f47a9b4f5d679a3b1ed098d6cd857494dac4c1cb16af6dc671fca01508efe7265f85921aeaf35bd1d34e4847f78cd22432ab468edc306c4293d367e33b79dc91446256be2ba4e93d44d8169cb613efb4c7187b7e5acb5c29b5e9af6988f734112b78afe428638ea8f9d4cb7d1302146d23712a44976987a260a6434ef65138cd9d2f6534e819903a7bac2f9114418977cd1f19889bf033d61b72ea3b8e6f30ee21ef3f5573ac381a51c60a81c4b896f94d8b11f16f4aa9ec6eb56bd85739649b402006f0d106ce71038c24f42850831b2c1cd9271a5d310de1d78fcc59981bfd812a82ac0b0d9a661a6445934aef9707f1393bd3a4131261fd401ec09c729f3c6c767b3227abe3221db83406317e1be2244cfd9d1652960f4959e05b29b1367f896ab92930c7f3cd94efbaf4e5e657d74dbce82c770403404e889c46073b29ee616f033a2b48108e07719f066f0d930bf5f1c429cf10a21b92361c283efac0b37bee230d2218838dffa6abe3d6dd17a9a353593b265ebbc99fcc26aad7d442f35f4ddf491c1e94f304f6a533223d2ad7e04a6e0b85d69671fdb08374d9b3f9d996f6009622428ae89cc957a05b1416bd333ecd40f3607a3c324cfb2d4c7e2b8aa74f4e9e3b6caf93518787d08a4c218524973c8379e4b152c807557d381d21311ac290066f84491daa98fe6bb7cc94543bbd847c1e4a81da47485b0ea67723f478b59079c672a1ad2f64841ae87cb75501186dd2ea7a33fc3579d3859d7678fb4892149d491eff6c6954e1852744d1adfd10be2ee55c0ee21c01868d26016a6f12c0e51aff71aa82dfcedc537b0c2c87b80e413718d95cb183483ccc48003f785fa7cb99f151ec16193b3e2cedbc0e09b878bc968ad76394f3b6bcea0b5c403db5af8dc225a70b50a004cfba833cc05b87b8f8f2433f6db1f3b3d09077fbb5e79f40f53ca55c5059fb8f57a247748aa6ad34bdf44cfac0300ba73e6695c6e69da2c2c9b079560359b2469e8f414db312b056d244acefa43ac3facf136ca51a88489dd2c5a77f6c774e906b2778ad85c61a8501896b0563f7a4144b4004819bd01839d82439bed3dc56d48812f47e46eb7228106b9226448e355d7a946640af9c9affa37436fa7fb0527cbbf9bda63fa841a9c89428398e27fe3e24b899cc9f145755fa5ea71db91acbefcd84dc0fb8260e6ff1a935258aec881d1053a50bb362d6a4a68a930ec9424895865a589ff88c61e25355c2d480035a63070e93e732ab9f55709f02b5f75151d6ad2439404903c26ab53ed52db794fd79d1916a47661a3bce1d46fdfa8b6f6e1a0c8987d9f1b3ba6fe10c791879c8f7c53683321295d4317978268ac5ccc328c969324b5139c3d0599d68b37d0cc6d2b1fe8cf432080409bd48e8b4fe0376064b8dc68d92695c8d90b2fa8d44b9b715a4f055b78e07d04c015433808d78af910840ee5383c9a5787ce8690e56c8c34906d586830ed96081af65b0f85a73974f694952a70ca1c71986065d3e998111f53e75c7609ac8dd302e4306234e3c56cad47299901538e9f814d68026f62ccaa1b698be571a1a6fe2e6b6de094f1a138ab2816c1786d7349e901e77cd551015d6d506166f76183d1d3f86e0b34657f7156c3f724247c6d09260a7ed3c9f761b1a038675b1960a706ca17ab3281c3929f56874541b414de45cee398879baa604f8a8e2842363382f54745c0070b709d1b210e8b9aa5ab49885a09cf08e90e8f7f52ce0eacfc3e9a35f20f26e94010e19d2cb624af67b421594e097ce8208841c9bf8494fbd9f67f4140d05a69be19227df00acaf078d40831115f3ca5e09c19c7172e45df4e0f849fba35c4f8d3edb2361198c8fe576f60a84a6788b297de99fff037bba7c6ce5ca9d4bc11273023236de7dcb929920acd076fdeebaeb4b424cce13d40e5d2d76a1816bfa975414df88e09431612a71aa006f811dfead5b15cc650bb9029f0af2f3306dd085385c2a40eec685a4a05337c0f59acd007695a9474c51f03d4beaa3eb30b70b8527c25b86917b910203ad9d3892b0c5684ee148e40c4f416869b7cfae0bb3733e2a2eb9844f1b1b245c662292cd2bcedd3d2738cb2c6c762bff58bf6748c7cf5948888d5fb30eecb2b2680ff32e74b0074c4fc225340f552d +MD = af75e59940783e84761dbe59727ed7908a8709b5 + +Len = 46448 +Msg = 0287fa0e377c9dd608cf9853907b010bcae4c2160275a7dd8988b522ad86be41e84f32b558dc38dd6f23fd00ec3a4c900ac060abf779f6e78738a64f2a0272a91c70a0fbdb55c54ddea123af8485347e4bd887e442bacb9ec1772a0257aed84004b2ebe8a8306dacbc12af6840a4e15ff4f5e0c7cb814f899d0ce9421cd1158d09dcbb84a8b55784713e4c3108de7aba6fdf125f7b15a93084c18c1761b4541893b8bad8c12bac5c65eda014c47d2818235ec6b138c0021bdf5cbb890ea0bb6a0b0c8eebdcdc93bd00e753185cc71200783aa4c7ebc882d314a61da10bdb720ad7a1dfc5e20e352eaaf30e45b80561fad63a53a87d7650df8d675b6640ada280613f566fb90ab937cbdb79a4c17e3c8ea5287c5cd41295c7b0671ce19660735510ad9af04b184860cb653b3c5d7ccc454dcac6ecdae47814e76d0918f33b0c104bb554507e7f0a32125afc16754538a636e8da5f7533224d9943ca15418596397c1d2c983c89263408816638f222a93ac94c5fbd8f49bbfa2daf06e0668738590aaec9cf6c7cc5ef15a41facba5b47876cbdfe0e0f6c6aa30d7a657f4c891bf75d30d4fdf6a10ee9a289cf7ab738391788025f5bdde557d1a06c91fcd9d2669bdd6bf42ac1402aac15f91fa8cf01a87286e429abe1fcab0b4e4c2f5ef7ac42cdf227d25fb7a140c0d8bcb640ecfdbb1ecc2b050703f88eda7fe4eaae8d5dd716042b16a4bf0b79ab519a3e49f5759ba5c49f9a762b2327c59bfa67f3822e4cfd7b4067ffc1c8fdf7ea5b5cccd2b16f8fd507910041c39f540a575135c067ca0bbf2e6d7aa61ef32b0ac6bad06bf96062662d91ad2d211d0f35c34e7d2e5078c638bdd11c545683d018a5005da89596a8e1d74386d785ca7f820506d2b4317fb84eb43bedb4b7d76d7ebed67b71cc38e8adce4e922736ce2b5ae7233c3a5106696add52f6ae8b148aa3d9e233aee86fab32da5cda067e509b262f4ac3a8f93660f2febf3e2b1865b0efc0cf8c472f6278d8c212645aa378584ca62570e671372550e02acd11a8f065ca3a438f24ea3ad707501a3a0dee6fe936145c4add013040ea4b39ac4a81dd349c0ee6432d601e50274a1c6405a75dd64a41975973f1493a2a0797e2bceb55a2cd0562b04bdb376ca079bfe82c166aa8f2f47da69188ac9977dbea7751308039c5e75cde64a1acb2daa5acd06883bce695f7b638200f7ee83890db74ef978580ed7c7fd661fba6ab3e968b24a3357e189a10eb1806ceeaacd7ee11e080678cffab8b709f2b314ddd321303eac475d6c76b08c44c2d0d156fbbbd35c3ebe9bf3f68deda41a88bc8d21fe6bc2cb38bec7a6fa6e8de7b142ab84cc5ee26186544c78d3b63c5c25140126ed55ff158bfe9b90eb400d5da2a4f10f2cee510ef22431f806bb33260cadc2385a994429b58f50cb0f8b33a3199acfe159fc189586ae5d0ab3673906a3fc58fce29022664a037fcbd3caa1467a76b0a1d012b993b83516175634be7c7f822deaf1f52a59bddd8109d468c6b669db1bc72bccb4980b6b05a45bce240613d1c9692512bc72858ffd1b9de024815c3a99d7c9848a00f4b2a448507e1a21f56db41de893695f359d5c577ceb4b25c607834a45d4ba6d08ae6a69c0def16e98a8666fb8d1b16e428827640dd49b123bd490950d27b64acbb0d08f296b5a3a723468e51258152e40c2d6c7dd26a4d522342a5e9c081e18925c6f2ef6adb5141674240481b1052d94fff2d9476be8fd2d88b8fd8ef042651113aedfb500828a09fa3044836711dad371f43ef91ee7e89244d4f8427ad39eac791807e11e431aa129062b93d4cbb460db536f4eba1226051b06e543024243e8ff234e0751873480a32e303f948358e18eb8c0d4b80843fa6db73b2d110ef33b1859089444cf663cdb00e8e320e926ba2e7cfa17a32ab0f6af7e605d419a0b374741ce14627c3e1a4336cc2af46dac7f1d1861741609fb6e62b50b4ffe841a522e460514352e1acd7e383083a9716894ed23ad966b2691e62a038291b25d9f001ffe53f027558aaaee7dec699a94d990112724eb1cf102d257d26cbef78717e5aed32144c3731c571680265952587df52b8b6deec609ccd79eba2024587103674d6cf39e94073e3678d794ef6b3cc4289ec8ef1dd0c16e5a4123536e3fdbe0099e14514a13926eed97fcae884fa25adedd883ef4e7c855def1966cf928083c40f361b0f3cca53cd0f657d9a07a39905c7a11c410558f11da229be351ab8686a1ffed991819a016851681ace465531335f72e24dca47630c0569c4d1434f74db11610801395238a7e7b02aeb0ab9f41ffd715c7c67f1e11460020009d5eab0fd2d862fc92c990072186435591b77eab1e9c61236a2ff761cfa1bfa46973422b9bb96d650221862b12eadc17f41361bd26a9a8ce44519270d1cdd3bf152d2d4f802b885fee377654c6fb258c7449e9068ca1553ec16e6fecd0e704a70ce6fcea04b15c53b365d122b249c8198eb58505c4f5eeeb8de0f024518fbaf2dd3b1169aded41d6fe5726f379492c55aff0c6397429ee5ae643b3b5d82a6f38e2940b6cf031f1602b65f875609bdaa764961d200ebfcc1387213b2fe939b9dfd97c5b626021b365d72cc5f71c944ba528e00a47e91a108bdce3f6e0e94ff35e1e7e81c8622f208e6e16001711d507d579991e1fb7db445a541667776cdfd43a2df50f2d9accc1106cac4743c4d097aed31bb915ef85efd579330d61f86ba50a848a64006e8d0db25f6a0c0bca196397d1d26bd8f48c7ba3d8c4792f00761e35ae9910cf51e27edac2e9beed76120426d267b6d75b51603bef450b3d0971885228cba608e96f8cf01385d0477d4ce1e271462a7fa8974614292f642a98007bd67f7c843b9976c0a8edc8f0d8343c95411af8275050a085b312fde466208581392f364be5e6bab25bae4d90ee3f6386c95be84de7f82fb79f493b3c7e378300f094836d76558dca8ec16e2117f3544ee1a0b0feb4e377443f1861bce1418ba3a35bee598b6a7281b8e3c531d3f481563085ccca25b729c4291d0be61dd2f1b1b7e1d1a0939a0b607071cd33b0b76d253c67a630d8e7a9afd3c38468b26077e3b4d2c7c31d78aaff4bf7f0b72cb09a444be2d7b34cf9997fc5b885851d7e6092008b4b41876af3a681e2ca2ca6747b2c0573cbc1d0715bbc854869fbdd815e454197d69c6ff5580ed8ced414bc779254ef971d0d21c372de891fbc0d611dc385fe64f44445bc5a80a718890fed3e624770c925c5bf84716e478ae66a46a822dc7d9f2ed997047db4835c636ea74d8d8c1f8680bbe818d9d4573693730cc51ea16582d0bcd2822412d406fdc17909568b626bb8205a150eb92e9f2db811d8f98d3cdca46e96aa00143fa4b298e1066fddefc536c383fda27534212fb9f47855e879f8f48f31d074412cc21c656dd93bfc0e3f76f5d43717a11e5913f93307b65b93645b6f62ba031211cbb5a77dd64d5e44471337e945e0c523c374e64c2b8d4f1fab43bf77bb3f1f853df8efafa2168d2858761a21ce904a1aeccd11ae386d4b853a37d00f588ab1fda560ae61b119f131002a1d2c2598b83a3176fbe7d2b8d94a9db24188166881f17e87543287da32e4ba99a156ef8c88283e1d15777f026106425d9480797b07e745c781a08ad9baba046f573080ce425b7f29eedb91dc8b1ec4744976f614ac7587cba72a5e9b013769f59f479de06f4a5127f892bfa9a01a9090c0da10d7e7f2b0ee453e6790aec347e6fa1a7b65778b6091c31b5cfc5870435d9b286e2763054db9dc5b3a4d0c144a9df817bdcff38529e1cf03fe370cb6391558f042a57613dab8ed1f4b42b170de8509cdd9725bde29b28cbb17fc4562fe726ab042b4c9b4d465e7e91ef4278f7056bfbb630f18dccc6e7ccf3ebe9afd1fdf40e6f2f7a65ec73b6d5739e3e6b6ac6d7a5ecef8c327ae702faed6f065eaf9b68c12b7c0c4782fc3edc80084679cef53ca2691c1e3452c8205d885343ec338b29cb225a28c977a79d9da17783288b5844fb13ffce19be30eafeaadec9e0c494e0343a13f774343d7c20bf311c0309b895b7d4e0c56b25e607e43c59c0c2c97d35055deea0cf1f85826bc07f3a8fb1dcd7de93062bb1efb32017270c501bac0fcf4572324b63a14958888ea90556e98eb37938ba2774835fdda0513f9f71d41257fc612822b6234fa57f0ff7a4df1a94d08faa44e13b4bb2e586a43ad84fa94e743212184a520b6012562db140b2adb7d828d3ec828eae74e1d10744213a938acff06c49eebfc2444717ce1e005808bf704c9afa32f5146c788a61a7a2bcfa90103d59053483b1c3ebcadc870d5895744204e7b518f9e56353b89ca9855c4626de22c19244283fa5a6753e348e3abb9ef657a2665d218a211a639f93efa3df15e1a68a394736d3b12222dc6dac87e104344eb45528f6696e749352ad0a172e24c2d19d426533d7b004d89e7a8fc6716fa3f003caa2ffeb1209519d3efe42991d29abe2f5c5a9b26bf7a06ca25e7fd2a7eb45780df3c478d482a46890f3ac89c6bd3d419a901fcca7a1812e2f423a6c74b555fb6542cd797d87959be910db67e9278ea378ed1e8d2faa83cc676280a79ea929751cb7a354d5bf2b1e927d59994c0fa6eed8052d5dcabbae2e93e7d8ebec6ec8cc787ccd73a4d36ed9d363ae89b81b8e0c0200d4a43f7c0b3dfaf8cba027ad3aeac2b6d33cb26a66b5f3ea609df4f64de33e059bca5794a1dfe6bee02e170d88b541903e19c72d1c983c39f93fca46eb5dd43c0b37daac78fd9d609ffd8437b9173f309471aac4976cf47901d600b471610bceab53906b99806807907536d2d5f702be60ac24d6df1764d1feca5fe7e6d62de30387407a0b4e8fdb3cfff487e53cd3632731fd0bfd83d46a7a82af8852a680a29c39b480d6515a032a0188feefd0fa46736afd0df8968b6bfc68b83ebeb84d34fdd3b226036f11a8e2e5b8defe9abf91cbbeeb81d83ad3fd0de341b231f4dbc1aebb03149992fbf1ed114dcf17826a69b8959112a656f248345b148bb3427470385b6ff1a0a16107d2ef0f7b447042f8c158b56669d13173f938f7724c8a5e692219bd6521848b1119e5c5878c4c90666e6d20252995d8a7e4e3b30f05b4e2d5f45fb71a2223c1384b5d399ef8fe9cdb473d9af8ee892f0b7ec21009e5a848dc379423b5ae664ba4efbe31668e6fae7ed530eb87c1957ec84e3ed509f44fd8a5721fcae1ca35707c8d70768758850e779fafda79a9a10c05dcc0ccb63b8fda592d6a744480787ae9addbd0aa5e2904ef2d203076af9522ebb1aebbb9c151951ff1dce886d717af12d8670677a744d70e08ecb528da5908a254716bb98f7e522044ddf050d8fa5820957ce2953bbcd0fbb77c313432d606514d72a45fabfc5983b1d5524a8909bc3a6d822aad227b37dfc2376c45bff2642025182d531fb5f271bd2cd71bf42d2589e7e1a766646754e1b2842d018a96693863cad03cf38f6512f24b476b214cd9348b0121690a6a6e2a0ecd3e109aab5ec18ff253c22d74f98dd7986ae4164f2164e14a605d1c6bcee15e79651bf7178be232f77f8ed74bf70bf47c082cdd1f454172252beba051bd2f2bf06bcaaac438c4d3411c48f8fca7b3d260e8eb7ea28df2c5f84bbba006813cfb9918c4ba98ad8ffa38f298996e51aef8aad3caffc241a0622c89742371622f59de33b22f7d316a2f44c824c18b3d23eec491706a66a872d22aabbe327aaa30ca26863b125a0e7dfbcd6897783ab33b3d14ea87c6760b919c597943d4099f69d8dad7086a168af1e53b9897c663fa1e6c04a6b41cd9b2244820bda811068bff0a60efc03f9beeee76f621ccb4ee5bf303fa8ca17379e5545fe93d98f159b41de821960c99d0829b3466cbe049c41ee28b6065f6d33dec49681bc2b97deb63e9fb859394819d8d21a9f35d788ecb8b158b9df95a450d0e2aeb1d14b3bca2df8bcaf5b0fffeea59a85d06a13f89ece9b18b191076cfd1951f7059fb2fb767722cded7b3f6199f2c57d7055dda441082e1133c72f27c71c75280363fd5742362f4bd946520d9a54f569f5a5af4c71d9ccbac6ee67551d6ede8a21ca74cfdbcf80af1958e2646e20ace3d6b603318fd8097dd1736a758e64e0c5f73fd3d5a1c7c970241f6af683fa4e739a2373f4196766e2f9f2832988a34e43ea4074f912936c276ff646448a467c81c66a6c14ad2c578296e85bb19abe598c7158e2baccd6db4d739a2ecedfa999a6e1e76613997b7dc53ec14ede42faa51822f5978b2ee6b94ac5676f15f278384b5346fc618cf92c335829f6d0000cb37f85a32dfac76768b7ebea918a7156daf7b0f5999ee619f545896ece675049071b0ffdf08a14cd7c1d4d8030bccaa9e424717fc81c43526b84392c5fe4c2541283284299a9958d65d360e4b72d6d06066a2b42027a1336f167edcf05d8c4925830753d83e9d82ba882cc74bf4ce6ef943134e8c328d43c19792de35ac3d5a85abb6d2b49bb3b2cd693f6cc93abb6cb200224d094b914d666306fe5e93673fa9c7c76b845ae6d05529f6638eeca5b1d3c657195f1ab339a4a162a631b913e0d900c38512223bc49befda1562b19427a4bc3b1a5646fdefc4792f3d78c749255d7e3187249cbc76e7e472ea0c3191b56d0b55b9b57877570d14f32bf9640ff67c6899db836f70cf812f464b5615a34375da2d5c4657285ac99a39d77d396f3b80e683e8f7445fb5b0fade9e0605d3ba05524c6dcf8c18de3e3386abcbee70dcaf22781648c39211bd6ac34ce5a82800659b395219be4fccb605640ead2a1ac15241ffcd3d9310ccf0a97cbebba7aafedddc7c75ec96d60d773b5a68e99576d3b06ea1759f5de1cc91df915b50a9619cb53d9e3c10bcb487c9fbf12248d88bf813cfe57636c80efbe8338a8a6b5756c334e726114cd7f124f66dafa2929b6219c18c5339ca7d9e403dcef0b5d6599059a3029c5b698f96cb45bb1f518f85011f03ce732423239982d7d84b43575617474ab58981308ea964fd0ac697063f72f021bdcea0086308abff78219cb7f7f476712974ed667935d667852eddc171bd766380eb1643e5f2a2fdd6fc28bde32ecd6086e506d6fb3f0bcb51de8986c2e897114052ec9a505f4f191b634e33c2cd335ef3643447bad1ea71995e051edafd3d72248c8cd64d579a9b6fdf79df3eda92b5987adf805ef25ba08337b75162034fcf55205cbf83e36bcaf9f70e8bfd5bd1ab9eae6f4a90ab46a137f009e60203b570fa96c61c9b0aaaefe23376fda75bd8892d894c6df80393bdde1162a76104579d3c7730b73cd53f52511b19fee5df8f976c92dfb13d022b39a022295a280e1d9e434a04560f4a123b6f385f555ff1de1c84518ede07b0f460a4acc8c8fe29efba3697a9c2bb740cf26411b1ccbc98ad629d4ec2bb0016d7791337a6b98c5eb53b3de787c3e95813be572e7529a4dde4afdd12e411ce3bbccb14492bf57ab4576782c00620410010e970181535c1c66b4c6f245aa819278c9fd06cbf436f34bd872aad8ea36a73ecb9d956f7b8b85e2a81790c8e488ae32d3d6f27ca6c13e5cfe2603387120db98d77b770857a34aa09952453e6b9c87689ed1802b4390fcf76c24adc5936d1dbdd6a35ef2542dbb4f1d29780ccc27ce887f7f386e56f0bfa986d102f6cd75fe0c3dc785a41d95583c87efb1ba72d4e420ea2293ac6d9ae6f1e2cdbb429bd5ed02613ab3940084b1f78e277acdfc0e58b0838e2a7bd3ea135f147d3f4f6af77b3f058f4158a956591e74634bcdc44eacb5cff455333658c54f7061f763c76529208f37b7487484ae0fff159d20580040af2407bc8911715d51ab1e8c264da9674562c69e19feba314a62d0f77c43edc51b242ab8e3d1ce7bf418f5561d4a3ec62c24be6e13a441736c6407e3280441aa7844ffe2ba13ca81a54e98fdaf699fb63349719fec01d4f4c4673cd8ba25b651550ad9c29233f01ee3a07bdb531846c7f94592bbf993cf2610e0e250a904b65a2fea5ac102dec9944dd31087bec2be6becada44ac2d69a97a0659ad38b3dcc356767f5766260c192324af98b391571229be5f8a4ee46e1ca1169c8e9c73d62739a083c4b576672894f7c894e587d097c75933282c2712f2dd261eefbf3900385464f91c8484c56f9e3ec6 +MD = 06f0df10ed7bc4b446f9271fdbe6ac81e36bc142 + +Len = 47240 +Msg = e36e18eddfe2c21d097af7bf9f8d89f1934ea6b434e8a3a10bcdf7d8034a8b3ace6031d883cf71aa8c738c85bfd3bb47cbf8b855d67b7f4764e256e17b2d0b4505ab7d6875125dc3adcf364b1f9baba2334f018fe9f9ddacc02f4e5ed6a30d0a50f80486fcd40ece3537fef9080be26b95fc894bb7894238e75be7375dd61af079efcf1b623d0b35ed52ea77c04be708b7a6587286543853a00f295558eeb95f4637e50ded74dc5e9ac905ad8f8442e361f677ea9f824665b4f31d9e0f1273bf81794e46e6a209b307435483bfde7c625d93ed9d4a3af5d6ecaecafbc96bcf79f05c13ac95ee1a9afb69e1e297801cef7227c271cfa4cb0e0ee93954d02155f35c893b294181987d3de3b3b05e93aaf16757fe5075e95275e24b70926a5b8d968ca7cea433820bc39658d2d75d3eafd005cdaa2185311273327d799be04100ca4a5fd504b41af9d4ce70473ddcaab2f31431cecc47a39271c4265c597afd35f85c5956330a71ec18add419cc22fe3bc45c2a703803685ad561ef1fb37fb4b4868b3c5c187dae6bf7fb2c506a7963d2aaa4619a4f01a7f209d180cc90399106de9fb0ec9b57faffd97f1ff5012701000db67e53f88889e373dc806adaeeb9b266605f10a4de7c2e2602560e7875ff4c555828a41be236b37d4a980278e757408896eecf1b5c5d83464c79a6b7ab863feb530793a155d5ed8ee26f9b526c9139ab080832e817c483a1252fc2a611bd5f356ec42b702a8f160d6dae3d50c48f24367f533ff458dab89f55206c2defcd379c73077171a98bb864b4fcf05a397a8993c377002566c6a9a9a3f5ab348cdd4c8928776f8c19f25afa7c02bd58117af0299c1d7d648bb1de25d85688a33116286257bd2caac4eb85379067ab3295b6e260d2edbd9a0dc3e07dbcea096226a05290c681b0b1f09fc083b7d4c3d00d57e6a02c8ec8ad35233617175a3959b3a2527c3e6a048be6359346b8f10c1ac184855173a9a6874bfa685db14d1d712044b18d86202f1eeed686e85c658ef9f86646db6fe5600e976fffb5526cbf90b4b0f62a684c39544faa22d16bd95153fc25b1a7e8ebfc2c60ab8289c15f269fb80ba9bdaa962b1353d8ee6aadf45e1213e84e1ba66285c8f0d67940c7cd5a87748052ad15a50c4540897319e95fbc1c86d7a6a070f300c98d176c422c5f642e30347a627122e4d15fe43747e9c1735b9d1c409f104677198096e4f7b8bc4b7e3452a84486b4bb9ff812c45d73c38cb59fdca47e4c02f19f117c69c7328c175ec70065bb1b049a97533aa2c1500d0e14d6425ba7edcf774387f1811a6479d0b53366382ffab988a1b78557dd4846015f8873ec80bb5710ed2c1cb65814297f6dbeaea908e97c8ea56e1b6d1822166d7efe9adf737d3fc48546268fe90b442c6db1fd40aeb1f5b38bbe236cd9a8275b5880ddbde6fd329bf31e3694351173dd9d547e86891acbff3bf0c5da8aa01ed2d755640d4301d69e1ffc754ea5ee5e9ce5ee560201eba77a9d4b2b4192d3a6dbe2c75857f152d3d4f2270b449f69ac702dc9b03d7fee302d9a197a285909657d611ce12458b8d24652e91ffe8c4b05625d2bb2bd69e90f1f18a0dd18470903c03d9d26fae0fa7bfa2888d905d55c13785d5d840c29a5eb58002a7a98c49d29ac5c925064f1e275fa5d4d62e0e0647bbc15a74fb225ea6de13bfd7930388b7f4aa74386e7f336694ed780e217172be8366e503b35c77f3dc1b06103680b9caca106f7f10d4ebffefc80698033e17800ed4ea26f1f762e020046a040c9a59859b962f8b95d6a45dd0e3f5065bba5156be99fe314f799bd64a7e70157da6e472d9ba18c055fb090ad8bfb7cb937cdc8d232475c51469af50dbd7acb7023cf71d14eadfcfd9c8667177c9e36a330c05addd130554f93e09ea24ae647b52d2eddecda6c90cb9b5593c3e80fc64b2de69333cd40153566d380ce5715bd4c7ff4542748c88f94e486dd58d73674dab6a73a7d2e61e62c47db6237eaee745da28a9e2a9fa84383007f0a7f52fb8878536b1962fc7a0e5cbf600e850e59b6111c56839ce7f3f2bd76aae5df5f46494c8d9af68b4072d6ec55ca4a61c83ec98f77c2cb252993e56dce6e352109ff007feb9c9a9f023386059281df732285f6003a353d6e6c6f64b99132c1ec550ef538f6d9cd4748a466cefded95622317858cee17a21fb86fb6c9466052e94d5b70a034ba562b1cadbe701e7733d6d3dabe5a1acfc2e0157b25c6755fb0bff8cfb9df2fa5fff28536d5127d8583793bb7e99346c765578c7bf7d8a797a3175e50171c6f038e458c27f4dda3814bf062964d5efb66532f245775266270f39988c7d4807a3dcccb376863f917d154e6516033e4bf14530ee6f7e7d9315267ec7d1d3632dab9812d90e26a8d61df66010efbe34d1d392f9dd844951899a5c9b94538865a17e175129f7b51c10a1149e9a351a5c09a3dad830424c60c24d1dfa7e9020b22b71c6f236b1c5fbe99d1c4471749c165c08996687280c4dd593e725f70620fb044d13908fcaeddac9686a0c373ca7e651683b1f62941d5b2c0544988e23fd82c466a99685a1713b38997a504bebe26e82494c8d3314d42b3e27c2ecb4883afbf434e58eb8e4149f9fb6e9bb3000cff157324a1a7928e530a461ce7d0a915dc91c5e53e3a9f12c7a974724a77429c52158a9c061b54eb4fdc759e3d3e0ddda7c9539712fd9574d4e97a0b7af98b566610f162bdd6804b8054f568f8be7cc3588f76cc9edb784ebae197a1f2e1e322852d31e08e811e982c9750e4e0f7ffaf360db4eca87d5187bfbb529c7bd652e8f594d17d43c434b99cd00d78bc929d898a68985ff98b27092c9c3365dd80e190ff6e59a0a246cc961825b58e56365f399ccba78d59ac03bb49aec362e0889702ebe352b375b0ed17e7becf8d748c4ba7b45c6bdf8f88ec855d1989fc4b967d26011a431d82a9a02453c4e3dddf3b6cbc1a436bbb65c8ea4fb2050e9be85199e4893cb44692daeca5a25f7ae65fecc75e15a92f8aa11405018e99d8a87d62f525ca702d966cebd9821db61b0fbc476676efb640b50c1346843afd7189d37099cf0ddf3775da836fa30cf24ec2bdf350edee9125a26e6eb4befe5a61a8b2248bcc9ab0594ba24ab7f0b73a9b672b998da95b6366bb8fcd589821d82e6ce226d502b90c1c808deab85265b78b64cee026947e538c6736d638faed9e623c2a1d7f5bb21b077c63087aaf6091a5226e7122959e8a1e0d2d345ecda8d5848253b28fbecc04a2a7ec4f06f1eeef7109d3f38993042fa4173a8dd2f79ba41da5268c0f1250f0756aef6463fe58f97882c40f6378f96ba6ec268a9a620e34b40d685406418606092b36f299c0e6d941f30b6db92bc366adf4b8d2c0f448acd122e4b17d32b66fe553879fb11ddfb455c56eb49294aa474097ba0e4c979335fd4b614c7bcd2852914bab13b2ff8db53a61b68df79bf837e83df2e5443235f7bef3a6cc08fa24d8967a6af7a44d36017a2dab9fef28f35d2c4e2a00b2ad77199f7f7cda2ca1f1297b478bf390ef23c39d9314938223e5e2943228069df0a1c42558ab1ef0aad86cc81cd8ae7dcc9c2129faba10b87414eda851b5a00ee2fb1fdae6fb3f5bfd21ca066017d173cee843a8ca66bf9a03c9a7f11498760c6dcd53459134e67683146abc7a11037adc5152a16ade472fb84b37f6e19b2f9f785e87eec21dba4822f87572d48eed9bde1d769d44ea52807ce4c63f218473cfecf7e45edf7f64d9c31712b0d55637ddbd95d623bf54859335da7c553d1ceca5afe0921c52228b314fb76affe53088495f019bbb43e38a72cd7680bf9b2b4028aa61b8b081ced859ac21a4e66ce588e5ada9eced385e09252a00fb05a5791761c5c27ea3d64bf258c49de9eed23ee0bb8fd4f242078ea9b236c014b0c2cd1a56e94a0d7cb76083367d72619d800038d3eeccd541163b1323d7fdf44759f0f011fc428dc38ed730fbc1ea337edcf63733b0d7bc73ce2cef80f701c252d4ab429ae7f22601c276a3b0774b88164fe786e5bf3ecf5e972be4cf7d12a75a9ac4b8f793a2febcbb06845d87de87ef429acdf10149388cdafe9a1a5179cbe61303f932e79a407fe14e7a08d8eb59901bd8b35d603f1c85fd6eba685b7e557ea732ae53ca2112cf9c182ebb54ba25814469e033c36aa6cf6a43ecc283686eaabe177e6026819c36542a487de292144b2315fd7b1110fbf48745d72fb1813df3c07c1263e200073b714d6f576abd4e7522a4b23b347a467cbe3c24b7cd0febe015271163e6e77b675b494b4fd581fa87a7dda67d13f0aded76ef7a62bf5b9ffa25e024691a7e1f407ae68570092740091c89824896b958d1162782396fad82c75971f37c660c1c5037ecc5bfeff64984e870eda5a51f70af08ace443c54dbcd117a125a4b2db9a1ff822b2466f383d80735a909a28681d10b3464788aa8274a0c83763e9e631c0332651f50c72334483250f123207dd867b7fbd53110495d2bad5fc5454ea57b6162a413619de31841766561d722ac6d478d4d8b1e5bdceffa9a4b8a1eca695a5506aba1c769d7828c39ef956647a6b2e8f1a60090cbb7523f59f32f1ba0232b56750844f2a9550561035be670fdd13bd49b91e028fe8d265242d34edc4e7780de54366783db0033684936ef87b3c08a92d19d745752a2deec0b5843d143badd652aa2a3fb8d4d8f2a920d1b0b1809019c4a3567ac66bcde651a1eb88b2e81a3734ef964ba2eb16af0745ae38b88ff43594bd62488b92fb745d583176a4d407591579734503dc06982468ce3798537c2727d0c257cb87ffc06e421eb0f4e9bb637cb088d4e38ff0d28af3fa565ab36f1405453f508e3221f30bc77adeaa0d807ef2fc9fa14bec1c88c14cf83d05961727b482a1dbdc7ba935bd4f0ca8cc2a9cd2fec57e5342dbd1e04fdd9093a1e6ba85bef1b09fbe4adead0a429db4642758862873ee93d1445802be0c8c01378aa159abf933453b8709847d08f5ad79ecfcc3f86eb709ff0ff9179643b32ecd6a14c90101f4745c1a72e19b09dc391461d0b0f71fa15cd424fc475de9ccc36e6e5afd4a73b9d528eb61edeeae1a003c6e1c76acec7435586ba9b99d65a0671f7ebd1e0db64b10a7e21ed0fd5d76abf9fb273c9f3ef73b94cd4896dd21f7c3ea828354d33272cce1e8f0b1507fbae253f03a2b597ef3178f302005a684987ed662f5c6234ff5b1dfe321b8707dac4c53359d6b61123170517e7a2f7ff64d41eb065b9d85759e68a8bdf70fe4bd159200b298233f6476efe39d9e3cf0dfdcb43256fd00810c3399445cbbdb34a9bc5c6350737b7cda8d3c4c77d45381a80e7eb23b2218a07c7decbcaab447e9a86b5182f5759c9fde3dfe94f2649cbbb7ab48749b140d692d4407178d2c788a21e819678ae7ae30d74dddc4f8954025757bb97e601906658850955def69999f7efc5d1af811d8b82d8683e370b167484a457ada707a2b1af3683c96b7b4d0b0266fc5a1253b43be47b095f941fe38aa9fd33290b57fa512d756a4cbcd5545468109f806fbad17ca8f93be0f55c5dcd5daeb8aa6156f9cd59de07604199422e8f7929f5161ae7b646cf6a42b934d7b5165562a267a9437e9abcf5a4782b98c1ff0d161883e88971546a2ef58e3e03ba4a6dcb917cb349fd86beaf79ef30bad72d48fe7b57c8194648660489b2dc447580744e082f098fc2a43fbf61051d3ad690b94d8df02e29ada92f657fe5942c5f5ee58466ed00875659dc8fea5855ab48cfda8dd0fb8f3d0fdd32cc38850a2de01c5de94e355cb3213e01bb86677e5e96413939e4c86fb5f58b1cc3441f82cb906f39f71ea662b5cbb74bacc5a0fbf7478b31cc29e54446f70959c54323a287f8be0638689eb6e1be6c16de18a362f7e50460df20d0a1427cfe566c862ffdd5719f4f27acacddd961b2ffe9ffcd27c2f75352cd5a290b4affc0bf03bd92d946a379713f6b5f2c0f6e22633b0baccefae6ee7421464ce6c307f6d0353a0ad95df6d3190a251435f62c30ed6b9cc0dd024c3c316565cad83d2e17566b8be6828df432a2f25a6a80103474fad65387c67b8fd337244901343bca989e3133b45959242eab928bc0af001f55181590800fb93a39d1c850ae9f2175f13400c202b231ff1d9f5529c4f7283567c19404483d5dc3d6bddc2d218d90a8b7a464a74041bafd860ad4c4d61d0b1f0393fc0f2ec3ebc54047da3ee8740beb626bd763fb7c56980e5a7bdd72652b44eeeb9811c237c5b6fd0c4cf681d6e5a677f6d378a2c697670d2ac4e43883fb4f505502cc90fd7e016377aef48c4ad0727ed1d365c4b4ffd308d84a7986ee1d86fe4cc69029a9973d1a166aa946343ed7dd8971bbdfcbf274980f76fdebf7e4942f5f5dfceab083e297651a956e17933f1a8a18db527001c4211cd4e1d655f2ff99e9337352b6e66a51e0394952897020bc504344db45b03a3aacdee5e47ccb119496d193f001116ce0244125a1fe581549788b98c8b1804f5b2c1f4a84d0cf72c5d4c2bf5133a742a88dccbacaeabd95387f4c47b947f49bf916f0b045f692aba42f8185e4c30a84319926893bd303190fb12fc20b8d7f789ae9fd979652972495f398682933ddba11e2f911734bdb2945ca80a85dd6a39dc731b060f4795f6631ed71e6ad1a735cafd7ced41fb9a83e6137f95b2ec7e353e47aa3bceedf5df8fe699871decb7dd48203e2518fb0fce0f865f46adce5c133a921320bf40915456204869a3ceb5fca3ed40e0a41a64b8951f0fc580694cfc55bd1f5ce926b07e3e32ac6e055de9b961ce49c7ee41e06b024559b933a79518192e969855889c85d1858d3c4a839a3d0c2a2082fd59cc0fdd5f03cbcc6f818e0d4e407b094f9b909781b37b7a2712af2b688eb8da4870cbafd7d6a255a85687b985e4ae0f61f6c7178ee6d49e31973847f25b118bf814c8ff149ae7d53c5d2aa63c4cd86fa8f553d915edeebd887200e72f4f371a4f002e557e17415512dea05bd93ea22f0bdf5c657c9173df16eb2e938731cf8e377b24397d1459dc12211060c683b35971fe09442d9a080cc249ebd462cb84f097cfd234795bd672246da33e69e3b5f4c49883fd8ed0574d74d65e3028e3fb47564261cddab2611f300c807c2c254d09ebf6f21809fa08a914d8b0314142df9b5e1df98d08e2a2ec1e44d1a27613259fce607d1d05e2c3298b98085f16b0d6f596a8c1fb6cb340e0d65ebb39ae73e5be551d4c95ea4e2fd4bf5e8f410df5885ce62ae29f6cece40441a168c83e0e356e687788081f07f4b299726c5f8fd89fd836ed84017157355e455700d78dacbbb8efb459fc0ed5bbcb011bc8410522c0716e37cdaae4badcf9cbc6aaee031522a3d21de6fb1e7f2c28e0a2cb70d59b95307751e8212bde80dabc388f9608101038f9fa588cb7cfeed01c4f9c73690bc61c3783fbeeb08bca0bfef3d75604662e7e4c93d638418baacb9f6a64d2273afb3d97142f9ad98861937b40a9b75fdf237db42f8985247c07224f3b4a1679f0db9c7f4eabac109fef7a19662d408143973d171899fdc96aaedc160a77c6c6f40e40d87798acbc9619c8c2af8d79d35a34c75f942d28961d4601db1e136a750f3d3288d81d22443689865d61eeeabbec9f2272ec6d8df45c789a86c0458af009107879b963971247e7bcd2c57b1ca2c083563a6882b44cf0ecadfe3835af9eaa2e1c916291938d91da7009235996f19f866c9d4f942504a249452dce0c60e7b94025ba1ad09c1ddb0bace9c3b3e00e51506b85ebca6986383767facaf2263300ed9cdb2a483c2aef22775cecaf83639e8a5bd9824d07387a601d4d730e88ea45de88dcda20fa1c93c6da4ae77506564edc44815d45878432696e0e12890e7451baf1a472815e5c909fdb99fd2ef15128ed2f64c4d972d126fd6325ef8a403aec2ae01d3a92f150ae5685327302cdbbf566236cfe314e861fc2027b523aa7a2ddd65b2e7a7c3a61b493ddfd941820fc7dee29805576a60de56055f683c1ca15ee656dbf7966c2f76cfdede2a799757c882e48880fd0ffcd4080647fc94631fce5801bb980790f7b9c3dbccaf3ac51a2dece886d7566e32ef8ca35ff6ef165bd8bce6f02d7dcab530dfb529bc17a3ed84675f115cf61d998d4e5d35cb8ebedc2a8f87083c6b81ee987deb83f592bc3868acb8c6965e86a739e7a4380f05c517104a526249535eea4d28ef59c03e66912707a60517e241c271c308e515d6c1a34667e9ace8b7aa5ebb5b4119c07d3b6e5c12775b6643d7a1c17b0bdb94941cf72982ad367f1b0ca28f9 +MD = e900914d8a38d14b307d1eb8e569a509421d811f + +Len = 48032 +Msg = 383242c709fe5f2ce782bf8c83b645d171f2bd238abc655d8fdfacbd0fbd39df8ae52fecd6e8b00fc269a028fa74abc52a11894e6618807fca462b1b5d917bdf3bb9fbb5f420582b2fdb20239309cacce763f7d17715f7d0bacd8f0d3311f96895d52d8c2a4d5f6a7500c9e6171eaacfef138f15855cd136a9995ffa57e4bd60de624dd84117ceb2deff22d74d5a54b78b47d9825894169bddd5234a92b3cfb15f87e4010228acedb000b35fff66cf6a03285e81b766cfe69fa76464ac263541606d796f32250102342d05e7f3e923d29fdda5786c7a03ff3737a8b26de4f9fa293b94899cb9d5d9b2ac9fd5f28c59d6a78e36d03d77baceedae7a9b9d9623c2011abdb9078a315a72a50992c4f7785d62659af2f306fc3a09345f8703e3b98332327d673a401c6dbb41cc8731d188511987584456ced22dd2f0e1de6874c52402aa5bf9fe849ffad7a76f1b01c29299141ff8302d78438f910b870994f04e8dbaabe0d81bfec1e90c017ab5fb749c1d9b53031d42ab58468fadd96e4f005da6a15c926c59558a22a37476bfe98cb1c5f64b00735b10183b11fc6076614cf95701e6fc1d8031028de32aeaa091b5d6796c307799414e8b566223a389917b2a882070a354573c3213164b5ec0bb951521462af0f9bc0eb980c9482b10a836f82148231177a71b219a82fe5a8731d475a5cd60f4fa93f8ab9f8d947e716f246c0abf27cdf03879d70b716c675dba1bffed46fb0a0490b3689cf72e2616abee8d2bcda35f25d2fc5d4f29bd0caa1d12b9e1fc22bb7f79e8f8604f3eab65273b646cbcbf50803d4cba4cf318d2d62360ad6a36fe8ed3173e64d2ddee93c8aab4f7b6d2a526674012f6ec16a5404994ade36e3bb70b69325eb3d9e86468a6fb0150ef597a6c44a5f61a16dc8ede6b38a361d65474baa792efed5fbac8b167e3c977019769a77e329f2db28bf834a5d6e8318bc95d24f6fe9a1b4b9943f7722ab472d2d597617db0b637a76c0dcb5d38245b74e29cd0bf3f074385cefdc131986c4b4c5a2f21a9e6e241dfc7f52afc2400e578e75646681ddd70f4a01d970bf4960a567057706a9ecc5141e4d8d9eb6323d9811fb60f5b60c5a78259cb016808ddb5d75d37d5289e1c72b50add6191bd373e76d3e1b2fed066f216403188b09ae656b96af9d84baf79a923822c4955f9e11d3e4b02b7bb356958989c74b34c735cf4e3dfc2013b998b007395ee19a1e1cb7dc3cf3fa7f95675e2f1b6bf0ba25be5983d04bdd96024fb7e8d884b5adc3b9d66eca7c0091ffc339607d638171b1a2949af200fe72318712b5aa66a936dd0fee1a11aae6597ef4a7ec343075f1f77d20f217de3b3ea3c9410c036744cbe6897f4ca713144c8f763a20d47556b173b85f27b615fc61e590d34a87f900d36cb10aa50f5702c1adc2608ce284ac4692eecfba515aba7283783a0fbcae75f3dc0100819eb94a8f5653abaec2f0df17f18af3187e1f0de6e9e9f5a9f5fa1c93b103f180e9ec43dc15c48c051a4c77ac0c1769d0a0c56f45a56096c7e86e5d4988347e117552975e687f720e3cf9fe893f1e84514e00470532668dd7f87db06bde1cd6b1d57ebd7ccaef0e48cf7bec1626fad338ea323dac0d865b689a9acea10f27cbf06ed31ebdc9bdb1433664b9094046e6f619edabb0b32a7fe86368005fa7ef9e4bc5f233a7c155fb6c0626fda9178d3ff7319529a9bfdd7bd5d747ee1e44cefe225f5eb4b15e324d41a345229c09383edae5cb2ffd8009cfcf6accf05342504c22bf7aea610ced3752b241b048b1c2741f9ae23722a059fc239259af954d1e08bb5ac97d4d39e14a2da79f3f459dd66013b59cd7cf9d287170e290846aa182c45aa5dcb5cc81b8e620f7d0180939ce9375ea3d7a4ad31fd035dfe4173a0c290f8f45275c6560ceabdb2766e309f2257ea49d56a73aee7a98f0eed6c089c96b3ad7ad3bb9be43bcfbbacad618ce6375923e436ad7065bf32c2093eb28d085d3e6c2428c562dc6ee665e36a031dd0a297e91710c923388041a536393a8b4bdfd83bda98bca3a56ed7c240f57b6ac62db844caa9e51490f17d3e7d262d8acde42a24846cc8e7a70349daab95f2fb2e9e653ce54b2accd6dc8f97c74cb210f634dc2e0aed10b44af4e4b60d93905971be45da503cc0d270071eb8faf4f2a72e9695615460bd95f60b515d4c377c0bf8550125f4c4ceaec83ad3a7006614d6ddd4fdc64b10f60f130e38d752c9df992a2b4026b72d7ce9443f566ebfea41266bb4bd64d544e4ac09c6402d0591e08c6e07abe382bdf40a4edd4e1521c8a11d40ff7d44db43aff340fb12664fd7a86b2eb3e9663ebe5b994ddb63a20d475b45c47ce46c46567e6c2175568a17e25ebed1f5a3b7d176dc1ea9023e1f6ab0982660f59be6fcc579a012fbb3a245fb2b0ebf9681dc252e9c22c91a8793224b7f467a304abae7d8ca167c57d1b5c06a37e15f5e2adf202dc62d17ebe5071c60392f7cf798eeeed79656c84f59cb7277a9c21b1447c7acbd80c5fa3c01824037ed69cc102d8cf80908e95cacf3ec426aaa365a827f9db024f274dad6830c7618c47ad443b29befb74556a2354621188a61c7856e7b6813ab46c1208212ada64ae6ecfa5acf24ba29782500b4fb71dc20f7fc02a1e330bf9aa1343206566eb8167a47a81b2b2e41a7c7dfe0efb9e57674935d3ae35efe9b392d56792af95694c4a81145506fc16c795a0ba9b02984cfce5e7395fb94d98fcf12ae5db8a06e239c9ad439bf42e523e65a31c3bdf356cd7680c57cb32ec983a678c54776f5bd4be57517eb314da34e37efda96debe6359b320dc55d1d4d65f0486219d2ea04bf5e96463c56d3802d5b5408d8add32b45ccf663e891e2d090b32644cc8a649200aee8d3f2e3daa0ba0a576d20781f850bc107b758162e26970783bce31a79745703d18338e674bc59752b8317591b83f63bf8709a4659afe741d332d3ff832c1111e2ec74eb4c438a3032f333cd6198a3723b18059eefed1006b73f35963c39cd3d8f784d4ecbd6caaff035fc418c438228622640ac7b6e9fda824a7e9aef2dea0b59af189d7dd6a958f5b3d751e61510b2e023c1eb6694f511d6dd256a266905ffb3f97d53ccd394dfb5f56b8b297ded9647891fd84bf09e61277fb0807c8baf8f310fc21e535e1b98b3931f39a0ee57670acea0ff96221a2cf69aa67a5bf6252e532aad398bb6bc0870e57909f6f71c99ac7cfbbdcf79e6f9b6c68db43f4925719d029551e0ade4c36094ef5896287ba2af1c86cf7298934c0a8bbccab0e51eed610ff0d3fc84244e14fa08c208e313167515e87109de9d984442ea2a3b6a8ff661ab665c29e9f8fd00bd4bb2c9c76169b101875f0fec645306946c5f4949d730f17d6c37133fe174b6373ec74335f510c557f9e5ff229620b3e8d9d664f3b301a2fe591123066c39a7f0486c1fcf2cb0249196a242119175fec8a93c090871fcf896d366e3ce07b04880ff1db9f396ac714714209359e4c729ac50dccfe8b28754ef51a4d007327d2a61d948ac33c17a2dd0c8cd4d3c0e98e71c77450424e3455a506a5772327b04d00b5d9961002bbdacc74b14ea588d7f99917311503d829b8b7273fb34e04fcbabf5f27c630933cb80b301a3f53fdfcfb393daae3ea32f1e4ace050ca2913f4640aa3e7e3c8f78484bfc82e6f852741de79c249819f637222abb940855b5b80920a0a7fb58336798613c454a5e20f8ee8822d75b9c97396b9dc3b77aa8de4898be71b5804065905052dadf6ab12bccc637c069551106b43f368ed5e0166b7f598c85fda98fc680f4b350b7b47be36e1958fd613121e52631677575b548fdbae01d55c6d390b697e9e54644b428e86b7c7e12356c49830dd6b3002d769af589a0e389c7aaedb663c47b142ce6329b335409d78c62f290d993abc753b096f37a30716a767c01566308d762c6c7438c5424ae95acb1a77f27fcb4338edfc777fb0339a039e37617242bac8ab8d3b62c5c82bed53cd4f2ae67765ecd4570a6e38a8dbe93a85db66915a15d146998250baae2cd3ea3494ebf26951dfd0dffbfd6b75472ed48673cdcb60e5b985f80fa9acdc95c0a868b2621d3dd845b4ef96cb1ffebf8f5708c93d283c73a8f012aa16a439aede13d171366fdb404609eea4815c2b8b344d73a35fb1d707c5104f1d3fa8afbe55b5d8980ff02bd1095644edc62ae4f2463d2ecadb6d17e8386c182fcbc3250f4d16e3f197a916d5b72358394392113dedb0a3065865e5602a8cd3a763fa84e7edbc5c4273a1829277f994509f9b9ab5502d391e7e9f2ab5c3f9ea4eae57b28f5d31a9544ee05951725e5ffa834e679f983c58dcf725cc302a3ac3ec55e1984fc6fd34efce6f815acfdd21fe97b16146ec65680668ffb51988d7c849ffa01e6e50a663da9b55e4f5b7fb432582cf6ef17531d1657c33cbb804595f2c559d2d3622b6a0df5e9a686a52422b37edad77e75b27fcc1d9cbf854c747f25efedfabed65b552c4bf47f700c73942fc7f556571c5d04fe227ce2237f829e8a8a36e82dc4029e052656378013f68f03be1ce1ed7dbb2338f0f4533a7c088a9d0ec53984bdc9cb451f9f6d2b3e1589ebeba208c61c7571192383712ed47ea9d9e8095d782609535892209ef5fd690b24bb3549657ae474fb14caca751b4da2cdc083c25c8f59dcbc289a2b64c459896ab74702300bb0857b5f0adda1a2fddbe502b516c67c33bdec3d6cc0fc457f9b0a6a47f1da513248f65ce409392e27dbbc392db93a5f1f7d655b08ce20d343a6a03eb866b8ee123618b8e70bafff3418bfee5e282cba8591c40bfec177003e32b8cf38ff5034b8b34edd84237aa8ab196c6cb6f21200fea164cacf39735ed7d5a0761a1a34c79e66f5552c0f2dbd05644e6ec8858ee4f312d401fa948a4198f613de0c55db094bb7c89a7f1d4daecb7fe24f1380f7b8fb6c9e6bf171305afa1a7f616020b78c493c2517dddc3ee075d2a4a82842e11f80253043544e09fd93b94f9ab6095ed30f5a9777d8da86049ce321e46769df6b29c3163283998bbbde6901048e7e354016999c14e086c78d9947c69e6154472e40ccdcb41fc21a18329030195a0ddf85e77faf99856f57ee03772f209690bcfb6db8e0428976599548d559539926c2070a834e505802dba853d7a83587bdb535190dbd584114beb5899ee94ddc576135f83af4e3b8dfb74f130fee27b529a48ddb31e07fe73badeb6d537c62842e41a5291d4fbe28546f34b9765d819f632f481cdbe623dc49cbb97c996f3c3109f7d715809b6a371f880bcfb172dda7089a0666523aeea0cd8ca22fe74e255378e84e562b7452658f8636ce37ca968c78993b403b5b3ac54565380fb3a5c87c09877d637477112422ee482d7fc1468031917922fdc392ca3fe9ed8484e2901b2a79d6b5d1f020f37824b275fff35852d2072287200071101b8f3536e1a116a15a23fcd5ea9c0c740dcdf8204edd5654c88ed9f5389e604766c9919f404dc6af270a524c24c73df6424e9bc4d2ebcb06838d01f5bdf9ead0b02d951627651ab50fb17970f6fe202ac42b1fcc32ab20f8a1863cf106af7b3c762fb2341d739d2372add4ecf7cd6d61e1e7f6bec497f29b810eed8fc92b9bfb37447b8178f5c8aafe53e7289da1703c5a19b3153f4eaa8fc08b862a7c0ab78d52104386f068279c114832bc6f16d32a6b14c757d91bd315ee80a94985a9687374f7ccbcea3734774a0f5a00d29a00bcb37dc5ff48abe6fe5982c9657ca4293e1e7f597bed0f69dd16fd9fae6ea77353b1c91183f45b607990066916c767745d9d2b8c7c6f5d523de6a7a60d99cbb59fe46b4c8e62c6ca4820900ad60c8fd4529f60d816f78d680a5791ffb6fa7341e1d9f8c9671a5aaeca9994111b9269b3ad93d3bed3fc2c25c2e850ff32f73aa2d9f0e63ab691a3687159972e602fa1bccef8e8c35c03b60617f74936fa268e52d8c7a7f2f56f2d91ecef2db53c0ab43a475d0467e7a4b7a35a230f3974eefacc7eccd2949be955b59dd8ac4817da1dc6a72edb2f3f45bd6809f9f7794bd6ec9a3c8eea9212b6b84df494b7597c044adc6efcc18b9b6d13eeb7cab678e774f026827c547e024dc1c591a1c35be12fc805ef355c0fb4817771d433b0aac02f820be123a4bae3250ea6e59e44e1efa311bdd8670f1df33934cbffc36a917e8d3eb4f9035fcb2db2fb7c70d8d06de004b47e9b005f58dfeaf8479ad868cf7b1462ac0a99ea415aae14b0b3efea627acb2cc2a7afc122e31d2e6f26012fb73e3bba7bc655d89fe24ce6ee3f41f752087ce724aeb3d91ea54633cd31cc23eb3089928e9cd5af396d35ee8f738d8bdf2180801ee0cb1bae8f0cc4cc3ea7e9ce0a74876efe87e2c053efa80ee1111c4c4e7c640c0e33ed4518c74df6bd12e5f2249305977bfaf7b72ed08007188b2d4bf7d71f8687bcd294cb1c3bc73d9bacda075b9982958d6270569f22e27a4a3330a6172f18ed947ff02e621ad820a0a2f83b34bfdacbddc79e8391ed2b96dcc29cf1b2ff3d907929f9bb3f678406d07ccf28b4e4ea9f6a7b940e5f6b6ceeb1600333412c6f10c98513ea0aae6570997ee16862a54c709212f38f6e0a10f2767fe603382317ff03f5c1336a5bf6ce6a3db172b47d7af003122f5f3465a2328a96d7ea0e7fe2bbb710a43fc50cb2a0d14dc1c030d9f08e2bedca2648faab4f6c293b404a8f39c7615a1f67b11d13685d0394d95e5737bb8b2a365d12359679a9cb92be62fd97b29136a5339519b3b56c13ad369351cb089f4c066c36a2fe61b1d260bcee3776fda53ad83c079efdf89ce27d60766634e5d6c7bcec2ccf4d9812f247b442c972193bcb2ae98ef96ca25de477df8e10efe3d021bc554b16fe7d5b9f9a3d172ff385b38c0fa471d58a532dbe3f1c30de5672f9eea72038169b91ea2eeacfc1d785d3baf20925769fc18b9ac435af051b2323e282efe56a4aaf764d44bbe4e95ca3839071b9c503d4ccac039afdf07173b066f883091d582fa48af3658004e43bd706029f741b8000e64526a6fa891c6498ccca638510983215408b05d9b848d19aeb5fdfca8191a0b8d7427cade16c5a46b5c6a8d697910e6c4762aa1b778dca599426b74fafaf30bee30580aa91c7e144c27bd79ffae8f1240028c6d7ab3992ada0e5ca55ee4f3d62f8de575302d5861d73685423c2e6a6d6fb3be090fbc2a701821b6d8fd5e8233f794b6549cd0bb52b390ac31478307bffa91a9bd9c1bf93ffc846356fef008ebee4bb3ee148e0fb1893d188e4934d0d088a433d14a596c5f2e3e49648a22edc6bdbcc58dc1edbd440046b3a169ca2b68c2f5458c40fded975557524dc97d998c0cefd277cb772bd4c1b263b1d0cc824e508bc837a78fe3b119d86557e288740582eac3f559b4c22873891208a5c23c4bd96ea21aa697b67324c869ccfecbe7f9c8b7814f932bea0abfd4a7ec1135c12705a7bd7d669ecda61b2f48f244cf582f865ef3cda2640c404d9a0aa63cac79aa7e3dffa80e2b9212a915e912dd1b307063e500b7aee78e93c4e3237e4dafcc9be93852e2c7c76c7e74833473f038d88407569254de3ddacbcdb7dabb6cc622c4f1a19d75b9f9c3b32480115fa6acb6331bb890ed5bed56b00f1f17a7c37ae3eb3c7fc8a70b49007a6215681c270134454714e1ca4d7f6c093322c288775277d972dabac1e63f8999d64921f39abeb98132716f33db7b83a0e0c9c3a7b3d746563cba5d0a7164c7d82724242c276cacb085d721702d6a023bbf1b024c9d8fb92a422898ccd53f2201fdae590ff892779ae74fdfc86cd453a3772067bf5d04361c2b2b534d395903da02f0a9e432b8810701df9185c03fdda0b1e0db471cbe26f59fcc76d7c638d02ddcf1faf2006732bf7b921fed503508fa1564442d0244f27d4812eab0a366f3c033b936828825f289fc6d7249453d3c784ab38cba361d007ccb059520fa6bd25bb05143dcf27d292f2c7a70e0c6e0e1e3f9d59933e1d4babad3ad6071f0cdd7c8fac00b4867f43f77b4c002fcfca45f03c9d355e32aee87fe061333e9af1668ceba0e740e0f149c2a3c4711e30f141fa063b4a6113af5ce120c3ef7d25fcdef34984468751164a9106b1883de26b587826e8076043871f9bc8e369272277bd3c33b69cec6956cccf0ea3a423569110070933fac054de86fc53404ee1230a77c434c858d4ac5b56e9360b5343001aff3347afa305ca1e498f5a5aff2f9a2d9527c72a18f46c7c6f8c2769243171617c694cab9ea515becdc138a3f8571a49abd3556c3bb05c327d043d4d85631cfd2e3592c82c22ca489a3e98abd91c05e702538a0f6f9cee26160de218f54c75567b04b475fa034a341553d4e30fd2ff9e6f24bf73f31e84bfb0f5d06bf2721d05e9731c4576cb2819f5ad87da0b1069d818c3703a84b9c287d44862a71b6876740fe +MD = 581562f2a9f3097f760488cbe87f823d0fa7524c + +Len = 48824 +Msg = 9d1898f04e38da85c27e6317c19ee81c3bdc6b1ae72102622a4edbfa3ad07ddb8375505c4a7d60ef90f55e0b3940e8696df709733ff304fa8ca74d2726b3d9b432b7975bcf653f8ff9db4a6bac2f41e84c4b3b5244fba2fdee443534b3f85372738776d52618fecfc4d8301f63927eff9f81089f3f6264d316cc9a0826c4737d0c8df4b098bd2516bb96170ea692241830407942784fd2e4cce8858dca42c23dc57019d56b7d3ccba4ba0722bd57bd9ac531952437eb7598da40fdaae697c71b68d8ed2ce77fcc5848ef0842ef08d1ed27fb642bc45dd458077b0a47c1ee0a7dbb6f799d56ec5c246fdb235685cee6791e47ee4066ce778a1a42b44da46d14cc88dac411feeb7597e0265f47c7d086a572bd3c4c6766e798dc3c04a2d73c6c7195c4d66e29a59e196579c5fbfd3738dbea0455350d4cabe81512012fa2849ad2aad3b89e1d415f12c47c5b5b6f2a85834fc541e5a1a94be48c6bb4dc4d6d275991af718722e840eac6d62b4f65d2f30369a709426aa450f20bf023921f1e9a6d1101091382c2ca09332f3dc026560cc40053b436b266417c5849583761c07b75f171892983f684d8d3319794fbdf582edc704aa8bf17a6e93c1d5bb45c7a53dbfaa6f8b06fadf7bd6e8243b52c955eaac4a7d47fdbdd08a17f1432f25575a906f4495e928c0ea921cbca4909019fa69e82a058a54ce3ed0ce9d7e7d897d8055ea701c4b62342246db3b2af7ac126b873dc02e1015a4fe092420e824d69ccef4bda7731047b70f007eee17fefb6511d929b76747b4f4a669b5161093b1279f0355753ad64dec193594401c14f26495c6187a31bfb71fb098fdf768689db068f84e43c40be925d97c97db77b845a35fd4a6732dd690a8b50d6b4f8001f0c9c55a04adaf3fae06b84c160adb7759a3e88b404cac3ad6021c3d8988d80e5ed62c9f250d6cd001013e0a8b68b7c0a2e8c86072714d3b0bbe6ebfd53dd0dc3c58173e0c0d8d6b86a7f35e647f8d32b5d467faa96b7175865024faeac91afa1de20dbd36187170b36d40ae3db9dc2c07095f9071a5c978ea59c78516d516e677e688a34fa8c97dfbb3de8063a2254b1afa07e857aab5a3bc2dcec505cc453fdee810769548e5f1e42e056b92b2e8ee66290958c804b684505eb35114293654b7692dadc373675ae13e5dc6478697a48d18cc784f2e5c996b6f1dbfee666ad395dc38cf36a2ce3797675026de77d1fbd44bd9ad5992086141d15647d12e331b0ed3ea418b717b165b3b8513d410f852e024a98e83da5a5a981805af88cb5fb966c28aab2e4a0e55c11d5503c4dcab584545c4923a61b313c2c5a44d61d8213d523ac2629ba6e8945d9f488d2d553b6a5821b34ef9b2b2fb464caab7f8df37f535aefa1e4012aa407543f7f689f55907bd4aee1b5e57da9fb72f8165ba4af49fa591ca34d817b3f8cc7dcbf6475764ced913ed8db4cb8a6f89e0d0dd22a5f79b06759b2cb010a61bb7df3d0301d5ef1e203f2a2cb98852f932f31184ce6aa155fcdce58c64b7e127cbdad38325fb6874470f3c6eb918b4bb46f8bc031a13927eed4a51ca625805ab7ce3181d4052617fa2168cca5ff730243a4448ce923b3b645c10386d458b84254f9a8327dd555a7ec5e7a3d60a9e45c28178305dc34c1cb4cdf121fb6accdd13c863ad49499ec42026f519f835887624b1071b1729c0b6deb75fa6eb5e8681055bd0eee831792ed249b147d78d4041b95d6361a142238a40acae3fc3ad6300588e54d08b118f0b23a2bec5ca6e50290ecb3f9c82890f0789127f44fab3ccebabe481eab8663ae982c6700c6755329c73aede24218acddf268d455f171e3e937dd2caa5d6ac273a7e29779424de522ca65cd1b104a3fa51977192f6af5932a82ceda19a9c5fbe7e844037e59966495a1569bc9ba2810f0f6a73eaa409e1338a57a9a9214ffd7b3623bf33891b8992952f69f17c818e9678fde8aedfdd32dbda8c8b43d28801e7f1eadaece751b4987e72c212bc38490b1ee05462128fea75e919f6f436cb198f222847d698a283f5767df682d33d3ce771b05bb6d4a864ac56ae914cc68f80cb578a6a8315a454240dbf9bd469e6d6b611cc42efaead3de9a3b8debffa5be447028fd774d6cdb19ea4a61689d8eba2f16fb2ceaef904d2b840a733c05aa6c06ca386f31e648538dfebcffb15c8a22e23fc0243675c55cf82ce1834f06ff681b6bb2e62023771366243abbdfa81b0d4b83719359b40f680f3ac7a56b292d1c4bfc9d498a2d80856c03ca7d3cacc7e3338b18639cd3f9d93655c5c1da96bbee5d250280b82beb106644772d0e8d190c62ffbc7b47fb08173625e1bfe27631481b8de872f246411b1e8e46b39e7696f0a08666c3a253c68ad7532587ccf118914bdd570980a608105a8a41f7348dc8f7b5c81d23f404ba9ae0879901e02ef731b6bc582ca972cb56e3e06fe218fa368a686ee98387356cb01b6844166556569024d3f1c3b6d30f558137d85a91e6680f8220d2cba10f65324e9f2eaca590bd165dca2cb7eff05e75fb378548e879e7f0cc85e1e38bba2c8a42d45face605b52b284811ee9cf23f1e1b897d9566da3a930b461db38d5d491ebfaee0ff71dcc5374ef5a75105003bb8a7d5c8275032e9620a0a8f24ee2045588dd5b88b8e3e76a2987af6c87243d9ab68c26fe8f1a87dc3907a3d1cf82ca79f73f2ef3a84534fd4cb7f063c2ae2a15f26f979bf90657d20643e3184f1a9f75a3aad8ef39d42d835b2abe09376061b3da922ee93749071e04ffd734522bfbef3aaad9b9d1f34992e14a78bb79ed7d0abb8e4d74ee652e16b195f0945d39482d18b9b212253501b25b81a0f8eea7c47121de73bd72ed356298a0efd6e4c53ce5ca51e256981bfe58367ad7502a11e08db9ed42216943a588269af57a7d42227fcc0dfb15af1a87fb1e908c4fa0de49c6c045394f360b06dde80ed1dd7b4291719a385ccddea34721506d2045d74f78a2f160b9a56d95c1fa5956d59e83592251b17b97fdab68b451986b43d151f7e5a8a9ea53b274867f53f71da12c19d82da6ae423d1399bd480243055780956a295e762c8804ef5f87714dcda514a3423bc6ed26acae2e238ac9dcd5ebd21618bc2ad2c1d6fb328382e8c9e151d6b449d5590a83772bed2de50ee2576124587606944c24c133f294ea1107e357e0c13182d363031d2b3b5eef47e0046815d114a1214ecfc71d83f63590645df7c15eabbcaca3001f1aad19220b5267511514770468574d59367b49fdcd8bbbd206e11aeb6b2714ed78c70f05dfb5facca0971fb8cff218180d5ce29b4eca8777100d01a7958bbc18d3fd83032b87293b56ed7126deabaa54008d62a68acd4b577b16f279922d6021aad517b285428d1d966c1de70ae08ecdcea13c9817f071e3b6a35fca07a89b886bc25f9c637490f3fda76861db3d3fb5b62cf2f86cc085ac4146cc216c79d8bda569ad194ca9df4edb33f33fc61e27dc5575083fffda0121b955aa08170db251d62fa2c1a73eb29edd7640d9621ff1822b3e0ee757997ee46d747bf6bdf082b57c88b31e19bfd5547302d3b7259f0747b5dc5986fa8b5954fc07d465b7bef489070960970ab992101a5e1e618737e3ad73d47a875f2c1b03d3a435edaac5722d14262db4f098835251dca3511d571123f3bb0470fbf85e6192ce02f6fda0761212639d0071f9138ba822e51e4e991a3ba3f469cc677c7e0ea7d9de0a26dc8ae890461101f547ed3c9bb56611915a696503153d021825045b817c29afbcd62b110c423c21f0f16ad59b08a8e39c3779209f91d0aa948e8be8ce1978403639d11be4ec70e8fba206f72491200cb5acd40ee7fed73e43256f36dc363c7419541769b8a951df8bc65c01c6e35de5742704806ac0a335ca6648b63a5708a3dcc158ab060d517e27dad4960073c5065e228515a66be71990dd82f766f04f68071e2f204b9ce24d365bfb145fc6f807ea4bd03f0964f5521d07b86af09683391ea70599f7bc96a55dc65a1d435169329eff608d22506087e551539155ce468f8a187658a900e14ef4a65c1149a79b4ef2c9c0508f92bb238066eefb04ebfbd3efcefbeccdee5482a1788b80d14e00957c177a598fc067ad54a4d5189c8435bea656f0d6d4f962e8cab962fc78992bae9174f8d8c14de89df887c06a7b3b66a8443d1fa76ca68f09f6e57cd4be3d8f02d96ec68eb2bfd07de2ac1b713f5611195fedb2cee36a5b3ebc9933ba008fad3aca616dcbe28a91b5897e50cd3788c79a4fe564cdd7d93a2f7221120cee2408aedb094910cf32bedd737b0acf1227fca39aa09014c867ae24be29a25de57f13e781a2f31dd74cba6e272e94074dd812bdc6cbef44139a49e6f72f6f2d7515716d64eaf613a93d06e02b05a6f6590dbc416ab3bcdc77e58fcec38ed2ec1b7b83b8eb2dccb2938846cbd59c9e2cb23d6be6ed04933e33ddd24489e4681a4715dd428b07d17b54b2dc99ed5ff41ae7db8416d41b0ce9f5e7c3f0e0bcb9589668e0a2daf5cede3b414ac2a8cc4331788c9749967384702c97d75c3e7420f7780930524173ff3bd5b813eebe7df600c2b53807daaa946146728edf199749a77a6b3ec954fefd44a28bba7684c1a71984e9c8d9e73ca72de1ec4d01f8b29dc90c037e708c1343692040c0e29243b0ec0d9edc28628647467d79b45d624297dcab7672006d4d5c29ed5ba9bb7d80bde8eb58e47bc333ff3b87bf3759dcc3b262d718bbc16f09c1f75850e7899ce528a09c8c745c8fa2398d7f01588fceb297fc2d7ebe6c17d4ff51ffa50ca5770d8b939fbe0e433e7d80bce2049a57be9b92f90d1cfc48ee3b7eea51ec8bc7a2564142737204b836025f3a5f1d7f4a32fb4df9f487e7e058b9cb00ed7be738954c043da62d1a343cfd4f9624d069efb23e136f822413daedbc6e3620f791a0c67b2ed5a653913f89babc40f1b1fcb0c2e0adda2496029123cfc30aaad42d78bc503bab029a0c42c2c73fdb3436aa25cb9f57ba5a32369b817083fed9961d28fd67b54e39550dd66eaf34b57ac2f4c752a6bb90a1ad12628d2b0b733bb1e359f02e160fb9090872f3df5570240b6f1dfea343fd895b487ebd7bd4084fbc02544b1ff890104a7ea0e8d3fc8bce646b7206218b417fb12b5888cf684e94191cc054b9b74fcd8de2d8b429b478d8629c9c2f9dfc0d03634d7875b25286975d7526a387eccf4f47d792ec4cf7c7e09a54d4d16500c0a2d621671ab10d70d7fdbdffbe07037f240ccf5807ba30e9655036c47233540cdc8e49acde38037dc47e59941ac385dfca412ca08d0e1a6de538b4d3a87540421ef018a236d3df0deb53dabc302a0e81d08991f4e294feb5ceb8419adaa75fe0f8a020efcb00fab1bb22a3b094b6e7d5a54a71ddbefb7861a0638f729f462d99e812f50de14be109c24f5729cf06bc6bd7085eb368bdf1e208aed1035cde23bd7bcd075540111c668f5e77703575f6b4d447bb3e7638f5c7461ec8b599dbccdc0242da8e3dfd276870b4673c6ea121412b8d09a77e191e820717d911dccb936649f8e0f1516c7c702505a8d6e104b6815b5ceca6d6cac692ca4e74a0ac2a11ec8163ad2710eb962e0aa6dee8230d40f5d21bb6b516ba7879ee074dda7e73c2ff6727a1a7f306fee2903c5bd8ab473b2f2e6e0a4ac484beb800f6a737ca4510ff599960fc8e2b314e542ab230f03f1f9ddea859e056a603dd9181233125faa66cd75d6d8d38d4b7c1d4f67489885158b2517f281e439ae24b2e3b446f0810ddd87ed819e289a00cdd9124153ada2a911d2536e74d11dfc49125898d39f73431b29e8e188506f9aaf1f73816cd6c27332ed88429f557e1354015f0503a59c14c9be503cbfd276e1ccf95a6ebd9c4d3d977d9db72bf7c4bcec88e045fe8c63478f4b0cdb6a36169dc96eaf516b86abcde78a7a13404057bdb9adc39eebdb32a614da0406b205b69551865a72a11d44ebcb1d079e05b7a0de657af059f21b70f701722005bfc6c0920a4a431985e78161eb3c2ca2a3e405e995f74fbd3dd38403fd1c481fb8019b5c9cc1528e3f6ec8f6eef2d165424fefa4f32bc914f18bd892b1df649dc53fafbbb0f47018f83a82717d44de300881c7d9271e44a439ccd36cc5c35cc710066477eee98301d8d1189b3f3c3b4b2001f34ed9d8a9b73b1cdd58e0d018e5bee12257fdaa748f06bdf03cdde1d0feb057ddccb062e1931f065e1faa0f803ffa555124863f2c0bab86741cfe3b8591e10ceb1a54c3d3800e0fbe89cd877d1deaec59a630ae92bdeeb20b024b53434bdaa787026e0366c830c1665eee40f5c6b62da2a5a4018decf8cb1cb76b30f076c4b0184aa62b84b2aca3bc66b843d28387a094e9894007e1f059110407da7658c6af06bba3411485aa3d2969d097fa9c85ce98398871e7e5ffe251afc75abb39092db81d0e50fd8a5418162ee1445759d73e145f499e153e4df0448052b7a963b4b298388e5d2909d0bbe97e9153cf01a678722173ce7834010a524151f9271df0c40dd3cc727f4946ae0c2188cb4cde19051848ae0afa1144b9e3b86b291caee5ed7fb86f96e794df7ae5df6fb4b536596c709ca459821b3d835fae494e725fbab456ad20d24930c2a6de80ee17f2528d35e0e4fac3f99c15f32eec9370107898a1fb7b872d8d6619ba5dcbacfbea7adee9d2ea5b5045daf38eb837f097de41a63dd4ea4baf9c7e093fcc89526887f6740fad746d094f1e00de665a08ccc4010d0f4ac115605cc0bcbc92828766b00d762fd94bd8f5ffaf636a9e1b8416aa02f4a0c6ca8c49b6745ab9177ef4fe4d080cd2be37451c3ed745bac9440c7e788a8476aecb597192e10abec3454137472f607fc4ff5c87f2dcce57509b470b16e2e41b6b8d23e0d950f554fe9e151a84ca97be536dc43d040725c899e9dec56c523e1766d8939f71094302305318aded21dc17d34726465da073950ef578b46321b7f0067351b544541b51c12af3fa6a7c5513ac5629abe3efdf471689bee1e1997930b228042a3979a5c819ec4e09e4222a3946627673803b9265186b5853cf00ac5ed4bd540737bf0befa061d0e0415c84110933b4a61bceb4777e64ed12169f7703d3fbeb532870724ebf5022896b728b245e908c4d9cee6c05af3c25279cbe03a617aa6e16f3d2046edc82ec0c48ac66f9ab42a66feae4e29813bbaa994ba578cf08928858802ee9d661c0d56fc2513e195912a914eff83fb712a921700a9bfd070e7adf22b7cb490eb4d085bcc0ab3a0ad1c53e449271abeb14cd35b5c0e9bad4912c1b7b80f34b9f3f7aa5fb290083567a260c08bb994dbb81f08c6f57d8d8c1f96ee56cc3ec17106888dd32e7994084bbfcbc6752b64eafc1dacea6b6ae7f53ae09e5fc68ffd6e999c0d46be1be9a1dfe0ef56a4011d54f3c53a462c5b3d61418c5c2335774b0b339ec33adffb7b9a8aa2560186bf20b245b23b6ac6c31068b9f6924197893ccf4b0d2a10129cbc4ad2709a479bca018b58411ab8b936e3640acbfb5b7b3a35337653bc76d4743e3b5dc826a951b65238a20e72b0822b38fbca58d1a14f1ee6c01c2ee4cfc4167404733585a757187542c986be02a01483986f49cfe3818ba40dc2eb5dab3ff7f00eb93521b20a44fd42252666ff919755b26ffb4072c1250f74f1156169c6ad34e29643a569e9e05cbf4b89f837d50821e25309cddf7c5f8b8e3d49aaabe68ab508a0fd6b2f845f1612b31e0c2bf8fb6a90aee1e29a11bfaab1edd493e21e24e2e95faefd835835bbc4e24efd4c6bf5b255da0009333fb9df98b952b79cec10511d38e4c6f5d3f8a07e5fb95629ac6b7b9a7b00bc2b44c2acaaf640704cceb1821ca33b7207961c768791d9a14448e128e6e85075f2cf8e94514b3a786234acf850452f6938fd05a0791f2c691cbfdb6cb3d87bc11a4e6229341e8d1a8dcc571660951d26faa768b0db5e2e18237fdea99991ef28122fe1ddbbe6d4e12fe4348eb5f9a135dcf3aa2a26d55b28e9175f5200cb27057b128214614a8e66b91ae9a3d909381040804e6ed42b3025ee04c20871dabff3a564c78fcca03605c9eedb08324a6e30d5cbca017bb6499992c6cb3f7557167d21b52682468e4868c2be8d2e6a13a031fd44b184761d03fe87dbcf6973a6c70c807223ae776b51ea44387488e91b6a7e3769796a6ba60bcf3dc2430905605e1c422a5366c7dddf14bebb259a27b8498004c89625c507ad761508cab0931a2846d75c1a3dc05c4c72a2d514e4ae80b9e1f5e09c390ab8859dbe2dcad2b51ad1f6c075fcb5e94d268e8104c6fb05fb380e8b200036b51f00b0899fc7f1d408c7b68e168f41bb46f9b2e9c8b04f968e4080252546814cc1cb2917dd5690886a9600a09c2673aec0329a4daf655508b06fc1646ef3bb3a472191d964db214a96a96fa89576ce4c4f6dbf1d176aadb518125cb94b7c3725f5c0755ed4da4683339e4df690d4a41c5b077be8af14ac241be4bca46964a77874043e089be852dac7d1362afce4b78769ac5b20b507e2ee42336bb647316eaa388966872869e8a9a9deb2a6581b5b2601a8f765e7c8e47c019ad44f43570f43c +MD = 844e1f50dd792b283902e66bc1086a273c05d511 + +Len = 49616 +Msg = a28331a966b0865892c2c76c124c50a04a6ecbc74c4101554f75f1205d391f684b5b2f15eeb1b2418cb740f69179c73983b422473838ee1e4790993fbce5bbb31020aa4c584f492dbc4a208c2b96b2b74d890a55b9af98ef696d3baf6ae49f67d818c9d40a52f0250ac38fb74869b8238f37ab7a3770a7cf9d5400f6d0fe728c8d8db5376e82512f5e69b4fe50bc828431042c3d1a41c4c7cb8c109e55fbdd2b16c595fdeaa61456a085b8e9ab55b7e21a39b627cbeb97dddb5e922f60a2874a5b0992ace888e19fb85fc200c1fc0045341d70bfb036c71bb512ae2f5bbc19f444a0d4cecfee5e148e3ffbccfb7b05b666fa838d32e9fd8941f08e28ad113a2eb9d482ea07a136bc0b6d8bd4bf996d3c98161619b9cee02e683f57a1be699302a2ebc589f8690f9f153099a0761de1e0b2bb52ecaeab191210493423f68ccb77e72ec4320a0d92c695d24db989d008a99d2f5f8d77494f3d22544b35bd428b9570e5a86da55766387499d0a65e7a8b9f3fba64847e702bb887a9c45f7b527b65255898c2310d33fd98ce4aef5fe311ca81a6895a2ae7548a2590c829988542eeefcebdba16f8a31eebb8e21df3d243334b39f896e27873bbe6507f1c7ca38939b4913edcbce05ca254a1c1b78110c9e186bdd6c010e93054b13310bf8f74f74c5ee744b18b8d0691bacf0f4573664adc18784e601b03325b6d7fa39a3abf3531d319f7c0ecc64af4078bf35030996e2debb385ff6b8e22db047d6236e34eeaf0fd6e7e914554d0d2221d955f2074dedbe6b5a6246852a7d95d75731af4e7bf8fc23002acff003f33f3cd1efaabbe42eef0c8d7587a176a5f60affeced3535c180ca5aa9a83903f1f62e3b6a9393e416ff332402209a41374f5722cdbea5a6892c2179fe238cc7a9f57a684f532bd8465d63c0b0a7dc24921040824c89fc38c06cccc080c857e95baba5fb165fe03b3d8812e5d983e39b46d75b70f1d5c586f7b120d0ea0d46c3b797357648205d875d0db506155b4d1fd6030c8156388dfbaf97b21d9278c5f12e26ad3c6d2b0047256cee93cc84751cc021e835d218a211489f1529029141fc200881effdf654e53714243197a6083c85c252f10dfcce626315ce65c2cd674f4d8b37f36318d80c02a1da41ef1652d9a752e155526b5f597fba22664ba39265074d43d944e91606088485573b7c018ea55227e557cad1810efac5ad15aa5fc7ddbd4a140c0d7b7dc93ab9e4154d70c5f05e7b0386c1c15391462caca9582c0241599f3620fc94cdb532ec6b04e14d1a18c67f4257b6ab5b972acbd78f13938ec2b0d7b24c1cee906d1ba17e72fde2e59f28891443300c03911737d02f8302d7e241780ac604d54051435d70f7e9cec2f4034d1be1b44fe60fa9d509132d06681089e4c2274b0567f24894f4fc4b8d3ca7d52fabbbb9f37d734147f4d2681ad9edf8c25af835eb71d0a9cc7d08899abd3b1ca55629c7a3245c7be515d5cacc87db2c8547b17bf3f86cd5887b952a73cf1e4842adc453bb853bc8510ea5cb780c5883a20adb73bb66275a3d633ab4a4ecd1f67c1513e4c91a91a50021baf0c9d1e6acad36dec3ae35b0b67fe6619eaa80e695d61e8101385eee9067119dc11e7325f60b4e53c248f17958b457926ef135dcb4e53c942fa5cca3191a30b6b3026a66fe40a3a3261823e1ef7f4955ac157624c20e01d5c67dde7fbd8e11ae4d02125a23e1e9753598479ab9352e13cc83cc4f4bc4e0ce7c4d1ea4ec3726ed058a1550156382229755d704647a986546d8a2ccb0ae5bd6a78007e333aa02eb7326ede93149f033b1bd4caf6fb3fab2a160841daf2ef596deb3249b125b1831fc5506961619d6311b4b32fc4975e79472d7fac285db20778852ff3d06cee9492790f9e7123786a34a9c049b6034c183218b714bd3177f014aebe2598f89f8a97b67224cd44793f2b60c4bdd72751af73417822a258863bc8cea98712af0c8cb7e442a47daae80b7e4386362cebb766930e8a7edeb827111d4db6c0457a7cc3786b47c5873f0df5b6b9d05abf38c46619e9b4cf793ba29a9a93ae793a42395665b44930f5e92f265a2968d197f4c2d78d39bfbd7cc83efdc7085859f7ed896e0325108ccf9298c5f2fd1744bc09f7e1786574f2ee4645632c157e098664b533dc2763821b218efb069ca55b375dacaa60d79813d79ffdf35220e630ef9004cc77230cbae37e5af01f6edabd0fda285dd0f6f6cb40baafd6c09359773858c0625c7fd1db2e9144cbc4db7e134c67b5204d2a55bf307fa233fed49f866ba32f1c14a57b8e054293b57e4b5804f7eb991b61db7c9aafd62033954d80048f5b9b2326fbd27a6f7991d5d426313916501d7893713402c5a76ffe0c64c499ad674a9e1aeb9d48741e84544ed4d159b47d895c6b54459f7bdad8bbeb8332eeccaf85b679dba69f1c19b55974bd000dd65a25f172ed771bd857a393bb1194abf41b9393c935b32870526c0dcf4a86fd86cf385f2fa2921be40618ad0276b0782d93be5c95608d8a77b1f197e6e12ad0cbc40cce2bdc5d4aa8d07f324b194efb80ff4c3a62c4fc6e391f8b2041ecb52fae21e765ec04a14d2b9b1f491b6438dff4478654bac9c77cbf8283d069d1f0c135ce124cfc8026cf7651411bfcbe35ca9253b4d324d7b85b10c421cee5faa02f6ab3d5ace3bab4768fd82dcf758f0c65610b1ede295695b434cbad433dcd902055b977ad271813ea801a2b8e0f40865769580b9e4fae272e34816f56fab4873dfdc6427652040ad451fd838050376b48b220c53a2147367217ccaf30a3164c2e6ac37c30ece563dc086b7cccc2dd83e2454d92db248a8a27e596b4f8c05aa89aa4996e027b23e4a9af4b5f9bed9a95ca29c5bba9e2ddeaf6a7c6c7d7daea6329b42e6015892656e44d84741458d76bab667287cbe2a91f87644430f5782d4584a16c9a909d558034eb0003608bfacb2b053a406aac57f28124f83779228b1653733a639c401a2c4290a654a60e6d7ef20d072cadc94d288defca248c606c9d3d327f0561f8dc20b6445eaf0f6a964ca986c095bdc0f58c52cea23e55bb38a3ebe725c606500425370f105bc326dffcf8784dc1c119b6e579c868cefdba57f0059a13efb4cdf8036dfaa4a1e9caaf5886ec96f9e25df7faa9e6041cabe6324c325131c792f92182010c03c9a9de6d26fce98284481322948b2f5e7088c52f7f1a166798c95be76a9b4e131b2ceb832f0178fbac1ac39e7bc6ab5e12bce1b75066f09da8807bb382e2c6bdde9a79583b3ea0e9b781f5d3770362ed496ec23388bee8bb41e0e2eb937f7eea5c1b0e54125b6932eea4322950ea5df15fc6ee09efc904a9a91117f965197e80dbd534df7bffdbbf99ac0108cd22a3539aedefa34d304e4f283aa243c059cc69a4f372613fd2ff7800c0ebd8b8543cfc430b4d676a9ace9608830c336ce7728bff9b5042267edc456a097701d72731d3a1478ebf0eb08b648f15dc2f306a78d033f657eaf8a87a0f21ae2debf34489bffeca3c12001a8da307189aa1d68be41e8a2b0ec27dfae2bc6bd895fed3524caaa0bcdec7097fdc39b6b3cff024f1c05f4a62fe307d1c1b3691af38a341fa827bd044fd48f1888110e50f0284e344147abcc5ad9dbfb62d63da5a9d4003e4341ad68a20fc80dc830edb54bbc5da2ee6572879a5720c6f212d90024c3fe2b76a6efab7cf4b7d24ea1de2a9821bd35540ded6a96e152ceffe7bf9cece06a61c2a6184f3939db207be244036e0ee946129f70d7b8ef0e7dfcc345fe7aaff17ba7edabb65f25ae52e080a3e245ca6e7fbaa8a17178f6905e7944208746890fc3a6dc2e93676eadf40d0b9249b7fab92cbc97f3aa6f9ea4dae5d8c3d9e91231f43ffff548da7b668e61c183ac2cf655d7890bebf5052da88dd2ffa458dac1f467e3d7a44930c2448c8f60fc7c2d63d12ab072fee3c24a17e1b12746a6841ec3a922e1b03702d9d468d658615c31c99770b35bb0e93f6a7f7110fe2f258d8f2c328dbcbd84b928a2bdd72656aec28e256412248697c5153bb672d2c2684fa98a8e84a700a4cc451bf6223940f65828175f4d6bf4520bc0f91c4753b4e152e48b37985f3e29d4a5ccac182fc4c57b2dc9ccd5a09eba7bf4343d0edf5b232fd6aaa84943da863ac1114a5978368ea405d9573b50ca338e25597349f439904ee6456b07d35a4c973da64b46912ad45b56b2790efb2b4fbaeae5698930e4db2899f7fa64ac21df4261e849600926191996d19c911e26819aab648a3d03c14655683ed0e03ce5d0f4d443af464e9cdf572cd34c8218405ba5fd534fe5eb63745de79678fae40aa4070b64f769e01399acaf240352a7fd4055374e3514565fd79a8e7b7d155004daf18db8bc3b4c0eda7284405b731bd1d2310f91e438d30b02a3c36a37dfff58e86cc1bb584b1103045152b4af74025283c1eceab7c3ffe967f23cff43bb509b4ea15de97609ad84c9c180fd99d5e9f3c77035952a563b9f9a1e41871b27e2309057a8cf700790087d3b95878509413a2fc4904dd66ff481fb7077be48b622bd3ff838d9e0b556f2a13806ef0b8e969a3f4773612661d9351ea155f136d690a5b00b84a542a370f7c83f6ba087e658985871656bb4ec482d662952cc8019ca6e92fa229e00526c7c74ca2a28a4a105c90dcadce9ec5fdfdf8460f49c9ef02e8c4b4c8930c432a7f51950c8f3cc3f3c80e1cc4058474cfecfdbe0b20dedea3b836b8b2f19e8d4b1f6487bdeae89215b6456ee463340242372ef41218d17688ff8563e9a95f8a9290464a3c19545f7e0f7efb935078185ec6d30dab996960b8a3fadcf42517e306b83f05118649d137b901ea5c34165e2c8134345f0b6d443b8edd4c5bcb8e3fb08099e0c5978e90479e1664c477d77bb351988fb5d7a6c91aa676daa7058b4796d09a04dfb6ed45b6a5059155818318fb1c49463563dc985cd50caf5f3ad8a3c2918c99e74a2c988db5159896bbe2dc0dcc8d826718d6590902e9f20bd13bfa3ca9b5c666bb1430d3b890a20f8bbb70f047ad6bd45e5eb32a1553cc34347df40a025eb4e3706db69095bcd6495ad87bac77f028039e3a4ec6f5936561ca663a3683ce8be6d3ffd1cc34e25dcb91ffa64a42a0e27c3e33d3e58cf1e41afbbd74c8134f72f74b912a907d495e1d96f999d19203c0c8a811ea8fc1b471e72f4c4ac69c27919f40ed68e3583b02c8d38efb494e63eb6e429c3acd7c263651ced9623a059f11651ad934ceadfe7153ae8575bb5e068af6769c6ca6a58d58df402d672b36ff1ad2421e365864dbd24691a8ae2eaa35c6e9abd827232532021aee10ffa2168fd36d1e841589651a4d2ae3bd4faa1937c7ce4819144be25d5a883e49d2a68f9765be17d27a6998030c860c8dff379556b42db727db26c55688b399a2893f885ef84d96d20c01e5de34e274e067de06d8b58f5fca23bcb664b52368e1cc75ea2db2a3014a745835f2f0c6837e2ea65206f47aa8ca94169ed0095e11cf42519b4cbe47c10359766e8866bba12efd9862289679faeed73b63e3abeefe3494da840342c13fc564647ae8be4836b97cba1e86c611bdff9433efe2c45b95d86a198d9a679ae2573d293f5a21f6aae852166e67aacc59c6720728187b2b40826a149f58545911838bcda726b74c658128b43b156a3137081abef8ccf9e866fc3fd5a0863286360ff6599993a7d2cf4ca59a6bd62fc8bd903460464565196e0c8f647a6c28a9b8c428d4fcea1a10501372d2e8f3211a542567f6f9cce847c27b03c713525f4bff6ac646ba74378f519c366498b467ae648e5b86fba9aaf9c91042085580fef373c97bb8ba7627d638b09a5665602a0c5694b91b3324d2b7eb95f52f263d2e2a7ca8ec30e43b116d6f1746b2364191bd90ff29ba8985890a90d0c34270d3177782d1c4b9200a1edd5c99e180f29dc5487c97526de513f678208b554b1a88e062ed0aa958562a75ad69fe13c683bded358123dd3b2f17428b038c52510ca5b273251c44176ee44065fd0d868ed0e9320d066d712d4fd994cba29c635d2e71b43392cf3cfd5080a48e7f8fdfdfc168bc57753bb7492ea115bf6382307668360f299cea3912e546cbaf594dc9c23e84b29b35565799b2b7ecefaf0860a4a23aeadeac37e55f137ddd50f20cea3d2f833c62ae86f825c46243e3eff49befc4c76ed8287ce5ebc36f01f9b297ea5b7cae8432489242f34dec3f24890f8b60b623c2a17a82e4bfde62603301b572210e4daf966b44df0e339b0a39e721d6fe609610c1081188e14a9f2285472d2a99cba8e8137f62747b60b8ccaa6ff224d2aa6a7dbe3cf1795bf16e6e78ecc8b9ca9c065533ecb5ac43ba8aac008b491ee27de533227de96035b9166c93584ec8bc69b11e7d1a052c6f2b5bd3c2a2ef6b38bf515a7432c2e5758ce1465ef487fe781bef6c79721a9f079a7169781badb4dc5af4193dc544af2551152161263a0405980967b05abbab11ee1695aa6049a1d4341799049d37674cf0fb28255731816bca4736a93bb2f897118f7fe1d88bd92a370102512263b4f350db8031f0321eb398f002ec7ec52fa0ea2750a4eb3d05e64afc7badbc903f215bfd540d570683e4e94ef20289bdf8356125307c0125cc0e544e2c9ed385b0def8a8ca42f6755706a7a72f72c661fa5d5ed046f0820dd7ac3f403eaecf0bae320f260a5734464222b944e0c49b7bde20c972bb88d6bbcec7f21ad96518eae12689bd3dd47843ee3e076d2e8172d14b868a51b6cc66f757685524244a16eaf2c14cb68b422c32006579694130b22dea988ab56045988b1d9650a648e532d2890c41591b27b7dc239cf7824059c355635dafe8e17ad53dc659cbe76dbed26c4d0d50ed160e8109fded69fe53850d115ddde23160f386d7fbb9ae30b95e607ee7ce62bca37cf280365fb726a43af82b81210cd70539111f63bfe1c9574c42d1fe575d0cebfb720b77fac9425803ec6976301323fad3e0dea7724cfa6d10e22d3bae2b261612697068c7879a9a655195e413e15d644959db6edbd80b2433a65a46ddb2524b4a3f78b0cdda7590ea8f7575d05ccd6e24e6e061006b43a33cf81fc6ecdcd7b2295cebf715a81d62190ed2cf716eba3debeeb328ebeeeb13b33f4564e18fff74392891e7a5dbd8397a36739afdfe6efc26d91d6aa44a4b9b20e295c7c6b510b9020c32268759ef3d9670227f7df32fd15e0ee6cf3165ab640c4bd497a23553a80b6e955cc30caa95f422a525f83746e419f7d6019c295395ffe1cd7e7ef7106adcb783325fda506a1db6c53676b1fb5ee2fbb5a5ed7d8a577f0c472261e38f26fd50c44f65ad2be397924a57004995673e824a662a489ad21634092b53e11705f79f205ddc6c8129ec20fc329ce75e26b7f45ee95d74c92d4bc1dc425dd9f12f500e5f01cdff9b63a3c6a36f55739cc4d4bab9d98de86091a61b880f85b366cb930448e53f4dc1ba45ee06b630d598691d3a23dcc38ca625b0abd539d557bc0245e9a4b13a403a5659ffeead37f69a3b1bdd649a0648e512f0d78b6955ad3bfbf0243b0dc7bf505e676123ff71bce965550b43bd5e04637fef0871460c9e2ddf1b1fd59fecb349faf87b6d52e610cf0d542d8aead3a86a9533a750790210d8d54f413a12b3026e5493b7944f9fdb925c9ea9ffcb6e1c407b461af0a93fec860613f2310c24950791c07c5f9da3037b79bde96b0836482d5ab0cb197fcc1b7d99ef9a843546545cdc073397e4fa72d28c3953954934157b5af72093a2b08405b76ba1f9372127b45bf14204cead0edfbf985147356e6970a2a58325bcf30e6888107059b7bdf7593605126e01c3c1e938644a4774ee2e565b415b99729ea3ec33656d6b6023aa9196cb0b9d2544713a1f24a65eafbc4a73ac5410b56eb72adbe1f301f9d75a2aa5a3cc9559e33908189d61cc548edea710be650a4258498a7bb94094c9c76a5ddd848f1969e3a96dccdaa226f1b85e2b74b9fcb007d759ad15e4d68fa5d65c2d80629dfd96cc9c889efd6f1bfdd643c0e9c4a26cce94f17af0893d5853ac3781d8647caba8461a41d52e50133f8f964db507dda55d3718d956d1fb599bf203402bb3b68967fb2c80bb97ce76808c5eb921ab38c47d67d7b28de49af94750c854c276d3019a90d92d965d70ad8874a3ee75d8382ff6cc35eddee9a29f1d6d8fa4e5d6597a0bb02a30afabbf1e1ff06ed3f9b5674f900f3a73910899b5e7f25f18dbfbd25c800125714ea742320da8c650f56b4c8c13d8ee2aee6b09a26b864198ee0cc50ec22bd4d9bb7981511943b34db0216f4f46ce5afb3d3779ce72d23c0c6431bbfa99d73f4e3d4a04e40d6a3db2730059fef29a85cec59772a1c37e585c86943b87ccad6db91d425451afc46d6786309103dfe4778ccfb17b8328319d719c5acd1d25546603a488f802c8fa4a5531d89fc4d553391ba3ad1cdc67931431eeaef9246a7532121745785d1fb3dc62bc210cab9c8fd26589b4dd14494dc485c3b6480464b7dad0c1a05dcc7e982c776e325f1efb414a51c9ee47939607b655659a4126dbc36524e9c22db6ab50417d90342087bc11aac6aa82e1c11668f08a1a836df09740dbf5d6d273836f84245a6a4ed84da5a6f9ae7598330790197c0a2b9952cb5fd7442dd1f9b49a92dcdbf844a90ed87fa93ff0735ac6cbcec262bfe0037a20fc30a9b3225f7a65dcff703d666c4a9011c18474e9 +MD = 61ca85608418090c78ebe8614bb2b80113fe130e + +Len = 50408 +Msg = 2d18667cac7403ce75175d390e00c5d40025ad5fda64c5d678bc634685bd28e03f3de14c7a4dab40e86c5b5097fa1c08bbef5a38aeccdf8f35d23c6b05726bf08606b258d6beca8911dd41edd0251d7eef8fc220944016346cb9e26a384e7cd689d9a347c7afaad478d3d9b7bf6a105f236fadc092a8b0eea6d91dea2737a2bbd01f7ac156089147a6b7e9576eb23cd2e0f6e3c0b3ecf6e46a9ab593d81626c7e44100708ab1c80a22ef3a74e5e3ea00ad8c2bc7fcf5303f4064710f55d450214ca5fdf96b93974674e594b72be6621012994e7d77a9a626b09f1a03a65768f290b539070194452325ffbec847a4ec2b9785158b2bf19fc243b3781ad189b66139d87b40559d1cc8bca7824e4404d079c5b9459920b6653a800853fae0518297ce758c4c6e97625ec144a6f227ed5521239ba94e5fde3eb7f006734bda9613bcd7f635d45468600cbd3df35bfa49c44c3a940853ef5273611916a0b6c842b2f7dcc23c8010fa5efb37fc3131c5ff6521900d294fd8fb4b5f859ea1e2b13ca770664169f7a933a452b7e8281e8ef780c9af6cd5eb23c010dabc083f799d6c3a50fcdb86e227fd793ac5699fc85f195d6b1f1ad4cfd78808f944ba422095bab3bf27f859e8933f27dbeae760d73f4d44306680eea2fc3d7de5a71e72819f0e59e46e00acb2f4e1f45cadca31f4377b7c400e05eb0d9bc6b5c56d9a9644c65075e8595b45e752ca29e6977bdbc74d8b4ec29f1092b7ba0bf9c21c9878110f684ff27071ec30b5e40da02f6026f78b6502de9f0bac4964f490043e7fde8e843e2f2b3cab6b352616eab3fde2d92df9f1e0be985d016a9e69c4b25ab791662cbb5dbb446f899dac4806468969be109e182f87116e59c37252dbf5f9a8593f0fc520c910260d115062ab825c5e9b4982c0396493a67cfbe7971ef4a2bafdc23645c27d2939c038194d1f8ffd27397fadd2447ba56d32bb0520d5d8dd554796a8248900160e6abb0fefaa94f42e605b283799f4cf2b42abd5d548c832e1fd636d48be7a5f0fd3413a3196b9cadad784fad580f8994875725e9fbeed2ac6e8d38e9ba8128da3c273a3fb2928069268a32b9640af8c2c93b9a964816e4c6cd08c120491f1273100f95136ad0630c0d960c46123402f3f6427bc0ed774213b7d36016abf3fb523567a4cc8687ed0cbf362cb1d6fd30aeaaf65a1830927309cb67a64b77b23c0e0899e9d9ba3b56f1b7e524bb46d92a6933e1a60ad5eae01f5440042d20dc5cfd0640e4b96a5d6941842d7490d65a38aa4d7efff7220321caff06fa3a3bd4e6a5bae725ea0b807c82a079acf109f2e3e83438c88bc95da0a33806f8f12d3e619e92e71dfa3227092b99443e4a5625c4b9a4a98027207cf52e8bcaa0f0796b465e2adb4d5862c3b7a2db27991b4f854384fb3bc767cbc387c356ec52a6a4fe1d5aef3e348311e8d08ee29e4dd25a73f8d0c489febc2fd3e10845c6be9234794f2b5c8a5408b4091c564c12dd0e0b845d338cfea692b1109973c4f42521ac3f64260f4a2c67ed96c38f741fc72ce738d913a1144f9a142c099c40ff270380e2f4f153e83e1f23349ea1073f8ccd51f404f7cd656a10cd68c9c86642448636f66a13d70f09acd944e61151dcae5de05859665e5c76b5216942ae91680e4842dc4be415090f8f845a32770081ac5d26e85ec5d08405f5c4a01ca55ecad4b8491703087a70c035b8e71c487fc8f7597a068dccc05698412bafa0532b0548549e3927f793c0bc3deb6e0bec4c1d1fc17e455eb1aa5e9e25cada861e9281c9bbd6b54317ed936416a07179f8e1e8962388174a3b0b06981236d3268e01dae94c770dcd0fd443584e5c73fee4cdc5fb0e4c1ee8bf4ee906a4d40c1a28056b1784e3c52e46046af94393f7f3468c3faed02eaeb2b4f2707a4c46f7d96319dce4f3c15dff30ea74d7a4cb700f8499b03217a45920c2a2275376e418dcc5cb8ad227844ab876f2fb63d0877e9c2572c2154341a0cb5eba8832c35001acc6770f5f8ea10dd27eba692e553c6631bfa3efd8f17b181aefc81d98a00f24b1fbc8d4eda7ac39d5cead38b7b17ee96899a983ed90d511880c3751e59b661494cc1d762cf10a415acd47f47053b35a9969f038d3bfe43f9b2aa4cfaa141933bdbe016d6df94fa6aa211726e8ea7e4c5ca714792bcd0d04dcc17cd176b88d14a5480115512ee0ec7c30974a91b434211ac782cf4646c3e3c5774c11abe73629e400891857106285299254da0b6f799b6c41d7a5c3bbad5edda28f0aea3ea905e27e25e0e03c48f33abcbc4fa66ab2fdb9ac6f8714aa2df89dd9b227921d5a1b38f754099d1118d938164a35f34474ea9b7dd6fdc980da237e8351f23401cdec40229ffcee1d3689aa459b07926b33c48a2c8a7442de16720845eae5508a88fba076662543df4696f9b10b4ed47d741dfe3f168521208766b387e99b7825ffcbc279432d4ed5ad83beef376669c9ba79603be7aae4e6817418dfda6f0b52a6cf3e81b37f5f7effd252669c08a2fe8b4968999a4ffe9eb92ca0a439ea9aaf22986d564396065991f56cad9580107a4b207fde9afedec782e2d37b84889679d799e73d500bc3f4288f562ad07742cb9e711e81564225ef635939cc56e39f614a5634cd753b28bd17e2b764c958ba70d9cdad0878843474fed23c2d0d6605f40f4fce7d3fcea532e4a208f1ecaed7f8a188d40a6e6fbb06a9f06304349a7a808b092cc2fc10b9e4134fb348b6e43bc17a550bdda45efa02f92636e848fb6db531f4c84556bbe75f283e5eefb4834679b894bd18b6cca1f86106305fd7034ff0b8b5396abc2aadf29810544d6216986000da80321243235575f2e7c14b4c91d173ace8a9b8d78e4ce7484be84c189242d798cdb0435cfeb8ac8eb5b33221e3c5f75e6e98b96cf8cc9a589e46df03d460a1521e29d674b480793c32bc184db64cb83c339e5a358e0025c3d3ffa762df67f288f9f52824b54b608dd7226a0a89d43ae8c05107dbae761e1c756911a003b74fcfe9b8c4d7a18806f62bbc93e2bf0af3c6ad274ec9ea9cf7b50b19ca55f1ed1d7955cb4917d9b4b0f798b14280f64f776842a79b7ac2f327300d981e0f1a57e027c6c3016ffe601314b6c6e25fa0203a4039487a88b807411fe55aa905fda63c5dc536aa4a6ff881dffe53ffc95d1bb0e0e990685e4a47b9d73ad7d8050c56967dd97c8031af0ca1bbe7ff07687d908fbcebf5e175ea4315f866a64776d6d7632a6c2b4fa04c1ad73b0c0e75b7822d0b56a91f726a2877c9f6013c63c5eda736c605c95530c781b6cfc328d7312b5fd820b943a7a575546a428300a98ca14495e32ebd3d4d91ffb4fcb5d4a85fa9975abd9528dda261776b7074a9a535924de5045f9d64614bd346444c8875bdbd62277fb52590fb7d4f42025e8dd35b4111c8ac00d0570645bb0f390fbaabb5b75ea309a1c07e2b194a827a9923b0683e3ea53ccb0ca1c72005644d67e1d6e227db71cdd39fd18bd5f7a14bcd01c8d6da22ff591688c10e6b40e9f3fda463cd9f67085ed30a57c823e522e852be8931b57d5b636c0b415677fc04bf3968fec28e8fdb1f18966d5a93818be2d2a07e0350ac3dfe43da8f39d6a5491193a5f48b65c46e912cda7ead956b40cdb56e23c62c1e1b7c269d172317cb3b9d94e1d162c5932747883d284bb9f0e60b835df6f4a861788f9cb975acbbec30b5c5b331f31e8ab9c4a334e6bf61b0e02ec51674096604d98b0eb637212366dcecae9082b6e1099a7b165836733d29d399e32e378ee586b3110529b83afee9a4c4b7e04028bd9e2ded4a2d9401acda14ff65eb9dff97459994187a95549ee30cb05a48f6b2f4b6f89dc71b8bd5213038a1d5f533d60beff186a12f3b0893c199423e2112f026f28f0f05b88a884acac333bbd175aca3e46f8b37ce35c17e23befcbc0f216ae4cf55a39e7b1c757a1839177fe6ffee0fb147f454cdf209ae8802326c79ae8d8eabf11de9d9be374f96feefaacc2f04afd53f7480a51c6bb54ce7a5b7e726d2a526c5b0805aec382bc5a90ec4e77f9af4ce9a6e33fa01421300f3a926ee06d4c8be681dfa853312af22bc0746df8e1b8f1c0d53f7234d374842aacf51d4dafe69d13ca8a0df0f314a4cac6ba90ac700cf3becb842b75ca5e560718a91522fc9f91dd8032bcefd2e7da1eeae73ffb6d545acdd2d9f2cbc385b08ec6d9dec51c1f6e2be9fe3eb6964c9a117423034da2372ed43066509e849199a7fdabfea0d70f3ce44f171aaf07eaee8aab95620ad55e78ba2e54cc56d72b1a3a0747ff19f51704f2f8a4d840ec6add72d966e69acf70406914cbef5b82fb392f2ad6699a3ddecd3c2dce01d30f736faf44bd176658168cc82af23f154da8006eaf80c28a780d9faa35bd1ccf36aead2a34c37cd438f866bfb7f246ed02db77dfde6c94516e4b82245a98b19c2ac29ecbf3a09d4d36bdd53605f38c49673ba56bfec36657e7417f92e28848a2b3584b7bc87b023a1b0de2155a1c9892467192f859acc103ab979ddc16b46a489818ba20fa7c3401af929344ff95f2316524466f35502cbf81f4e5eb3e459ef8a3a9f5a3d2cdba0cbaf1f2ac3c87228c8cfdcab9dbd72ff333005da5a2626d1a9ab404ed98931cc104d50733581ab00d85a325bc9368520587640ff389345e1446e0ede594f9e38a54e4d9c29d75251b17c05f62a42b1e5e46c803be3de2f94f6fd6ba720d2496ce74c6704251c1091d09f9819258491a6638d340ec0495c633dd3e737e4d3fbdf42a24d499bd25e27d24f89134f5eacf85242ece6627754e2957bf1ef09a70e0663fa60eb129ca3aa230659a2fc435c324d381b515eda91897a701c5b03ddf888b7bf32470ddd798f4f5e7a16d0d5380a90e73fde0a05aace693ad6fa57eb63ccba5b421c0207585db3a27b0d5186c8e7e9bacafae86af937fe46b25b9a41a858e87900a883ccc88bfc9cdce4f2ca7730942d5d369e9d154c861e2eed3f935ea3ce730e9b077032908688004c3922cb9b4cd966ff80fe7772bd4bbd2dbc32ff33d8e3bc51f1a43f01ee0e859199324e7e602968d43411a850f039dd9ba4b3028fa445aa7bf6cb3666af8aed53975b78606ab7e3432c69205dcb8310c56d95f12d9d0359677b77c12527a7a800c800c1d7e8ef56dade8767ff9b91f7298b4e43843fc739a2f41c57c3f2cf36378fe4c34b574a43f9cedee7bd0ce0e136826e822a18ebdbbcf54b72d9ad8c28566359e54132432b2e71e2482c8c1a6f8af759359594fba0240367aacc9448feebf6e2b03006848ce76c33d1b4959902853ea0c64d5071376682f3581363901a769f11acce4068e9c312464cfbb5d74ab3ecd7ccb7b7e6f2030891035477ec0b74e06943427c7ab230188bf258796f98a56660a17b57b7706808a344f66dd752655f5c1c53173486bcc3976a513ccc8cc85fcdfcfeac8d332417cc957fa1cc8fd6505c8066bd20c7d7c7db2d7c8c68979b2d9227b812b2aac59a5f6d66b0460436880d27f3baba060f79d9b440e4ee39ac543fca4e46d247ab24ee453205de60045ac06b90ac8ab1c27e058734e2a7e36a58395d17a566aa633bebb5683ef013ce4d28d3b41efd6baf29012ecee2303553ce1148aabada438c33fa267fb815a002d398e8d46e9c94142f3f03858011aff71a4a157df3c7a364c17c10ff0dd9853082b3238837e2bb9fe531bdef28c6a3d2c1666c17ec992aab58f41d5cac9643e5deea1c35e75a52b0ef6ba66268c9c16557d884ff01d979be6ef4a42f20e66c814cb02b64198de9e5a25f6595bc85793d522328a9e002f12c67f03ddce7445f9150a7d9a93ad7f1ac927f73ef80944bb924d8af8ee3902163f87952ec7c2aad948f33cf6bc7d2fa74546e49d67170b967546b8234992b9af384e28bd46c23c7195ce645224d0974eb6c8e5ff0fba532c6654e59318d1fce59a1de213b13aa4c8e5e22036336e5e1602f624ea58bac4864ec039cec1bf72c14b3ceeb771f389e61e78962b511e2d081218c6e9aade07ab13d3db5eae24c44a34f37231efb594d42ad8eeb8e6a9ac2ace76f6816defc4a39fd2f4cb45c89a893d8a970a92476d99ef4a51665ad882861e57da3c09b6a277d808ab9bf0729a844f4884c9c173bb3d5716e7bc15715824eb059aa1e7f84a2ea8bc295816ec6f45507662f6e6ff26c94983d7427f3cd50a1bc65f386d8064d0f63595891efcbfd42a5c581968b45844acda4a800003a24298e3518a04159766a9bc18b7726b3337c3428fbbaf5af6b66a6467ff018c66d448a4971e147e8bf6ab99da697900727805702e6323b9ab286a665746e8a0cac615505a7c0684e98be31402279b85259fd62d5e9a2c981ca0942b41dd1f077622e631c12d40ef592a3975b97a40c0f3b220c347e732c1f429d0fa4e4d0c8911f0a28df5b82c8782dd950326e8d07b85bbca7810d29dfad9c8061aa51d19ee433633ad1da531130dabdf0772fbb37c82c1bc95e2e3d50c74871ed470d5adfdb6fe80d9627db65da19dffc9c43b528c93cdde61e4a342bf6c6d0070d4fe2f7f0f4f7158ecc7252be7b9de91452f137260e618263f994cda69829536fb1f093df932ee74e20be546870962a71c5f5ff89014522a1a4e5c2715cfc36d0dc0a2fc1aaddf736cd25e762895745273539fe4cb5f74b79e48d86c155b735f316962871acb2c9eb4a2f8827263fddc6f9439ffbbd06613f2112a72142f8e5290a3b1a5a291be3ddf061b340f7ee38b3aa99711066e10864031b801b851fa8f52f5f71d5a097b9818832f52a4eb10a8fc1a1fe254425a5aad2eece1a9cba15e9ee89cb8e93a4cf685a39ca5dcb36a7adc703b394e522dd563922dd990a569069c03083ef82c19a14eedcaf55cdfdb4b033252df9ba86f418ae4e2b215e53cd176cea4772ee8cbdf9ce9220acf774a6199e8cb9de44c0ae449ad7534df95010551d1d62a347548f997200aabdb819e06c51a1039d144e407c9744d2797bca0eb58950721b1db7a376619eba22807c17faf51887b099ae7f132c1d253e46300cbb0a1a0224e2348e0325c2eb55f109a1780149b2d3556faecab1d6c806f910bed847d07f6b354993e227239ad28a5111560ecb115fc7e043e5c0e8375e04ea898fab2a665877657975fe276512acd0ec0766032fd071cef306e1e7ffbdea2bf163ac7e4367292693410344b6b0e907962ebf886abfe37a20a09d5c8da119639ad6d4428331eaeb75d5ef122c17bf63a41e63c16e787d8051454bac6da2231fca6bbb2dc2230d5295971a0621d1a083aa590b5487b4d0600967855e2c2b97cf1494b9767cc530ca77270c9734593cd5fd811ea852df6c97bd79d2e825c7d7d00dd467e31f92d5d19ee83f5bd018d4d9221906336c72b295e20e9ce106e173e12acd3eca27066cf6716d4aaa81bb191bcc735a9c10f932f91b987bcf2c12ec70dfc1b6b22fba76a793288739c59a6a0c3132a4390ced7e2fcea9d80921d6b1edb16468219609837378acad501851483914d94b909cb9e4b88fb54a3564a764d62427bbaef68e03d8a65c05a3f65a5400cbd9e9496d091701b33d3aca80ff65c8cc7e2990cdb2785580d9289bec2ffe11eaa6d5b9ea3585b9edb4323ef3594513fefa4a9d88117158bc869eae663ca6dae5e2c96890d9a14fa3bcb909285f7366500e972bc2256f709df6d062012afeda31f01cebed6ffa1159b947cfbc4c712e543d87b1e858c33bc9ac564d2955568e7361489a7c6310cd943c56f91bdaeeea7009a4c677362cf8a409a8d66b566e661eb8e52aba5d55d2d7a87efbc3752d1937f566d00b47fd55d1b1307423a8770f98597ae323a969af88a0286e4f95bc3910735674f108d4c1c71595cd0ec620c974e5627a44e19cd24b95dbb71cc72cd89e15fc0be4f313daf8b931376939fc5238cf4446aa909fd9850c116cb783ff56356fb03b43815affdb1eab59ef6e6a08588998dea130c333c9655205bc5694507ac32b59994e1aaf02a86c9afdedda7a68a6b8b8d54ca76f8d54260877b99c55d2b2b60d42b3d376f408ed711132fe16cd995c5bb33edceb453af5fb861767c4e1d0f8bcfc5cf5c63392a682b5d8256c0bf3dc4dd7a1a43585ac5a35740a972c0c805bff12a4223b25e840367847f0f8b828c0e59effbdecc30abb6cae0d9af9c763683a2213c9445f7c1302c4fcd13b36ba92d995b38a6f81d8a207b09af3ccb6dc95f4a7465b6044c0c77e387146a22c2bca9038579a4c56b8a67d083d22034f5e7db51e96791d7a48b61f2f4fe1dbecfef08013765de1960d2153315ec63be58b8802049e72da7496675c25e313371d968d4fa37a45ede468bb10b89a20e53dc63d51d5b90935a81c63bbb8d55b4212a4f94564edf2cfa63dcc4c0a59e27dacb1163b1e907cada95d33c454913a9b808cdd17c44be4e5700eed5ba3288b93a6be9b044b9f7da0dcdb4ffc95913191dbc0a12d6e1e8cedb64e96c60f707c95d0514463f9506ccdd70920dad86fc0c388e2ddfcbed06b370d9f4121cbec4612ae0b9ad0843dca731c894ec5b98768af1c55ec0c32fbf06fda5374d554d67888946016b098b2273f01be32639572b9c30abc73e2670bcce6911dba8746d9747627d140aa937803804b2a643b18ac049dd868de05d78a4139e6508a8dfe6fca59dce19124f0d9dff54d506c92afbe09ae09fdb2fce0f20de83e9e5d7ff803faa2381380965d722cfc8cb2b420c703195213ed7b2e2fdd83600e59bbc3c03085edade9b79525bb6b148de3c35beb25b4489aba9f101097323fda051dfff36fecaab2d67e97e6202acbc54612baa8907affe2d7a7494fd9aad626330c9aee2caf57eb5c7e251b3aec80c76c4ab37bcdddd +MD = a1f35ddd6a6275fd21bb8c2ebf290a06a2563df7 + +Len = 51200 +Msg = 3a14145dd1fa9e46c4562eed0b0da10d845ad84f43cdb16e29933699b8f7151925295133af3e36503079925bf2c9226bc3924ba24cb00a559eba2e6c0e83c50c43e7d4748dc44b2578463746a2683a46c9b738c3285954ab044f1ba182f7fea2bbd506e81292c30ec6458676c3f2d0e8be50097b80d075b982da65febb5aaa21b67b4f56e7b288533fffe5b2fe70cb97c9e62592fc1b57c741e4734c62b4b0d25b621888b42c803c0dfbbdc3fbe9159c1200f4d04344e01c69f4af521e0ef8fdd311c7442006951158c177726165953fc226defdfe53fa02219380da986f6aea4510c653d34aae1947da7985d8ec33c701e14be0d44e8cbf91484eaa77dfeee0dae87b7d7600b29d03cd2dc40a87d77ef6b7a3426e3f7e9ce29b828c64666c29ba205089b12e8be5b422faf99c3d69aaca324eeb732db8e13c148245070dcc0b0c40ab412bde2039806247ea3917d194a4dab4a38c2121d6c63cb7a007dbf6cff9d1f66b8d1759e192147e60871bf784ad363e326122a3c3a99a89640dd9d2bca85a98d07ee21e2410c006232e53c4c10dce525f993825ef0cb76158c00d491c4163f938a746574c23ef47fbd7c71e95eb2a5af3dd6b90a31819a546c9814135ee74816baf4bec9ff227a9b02a7eef466fd3bcb7d4c4ca27f54abff4cf3da351d516983040f9c566a6f39409ce801d1dc350e270274abcc3cad2152a7b4758b61ed0a650ff59cbe866d870d06cd591620c2932e97d064ebfbf3711b275a947acf22b13949672e46f5b60a5cbab86345d75e716e97ffe6962fe031953646b577d79ae47c1ad4cf941ac129bc33499ed562311f537d53cf3f5acbd97d4f093726fdae1aba2ebf0f3a78276ba7fae19a394412f369c26c8d6c0f4eef2fec22b7fcc3e4ca5fef965b8e905156bc9c20b4060f5c943e01aa8f80bfc1d9299823a65dacc789e9c7eb3324f5c7614671879ab02676883cb5ae6431eecd2df6dd8c90ee2adecff4523e34721b0221f22576accc2c1935e248e8a9d40ed9641416adf612b08302ec190fce1a6289ff2c227e78be728d33cb55e9af0bb27ef20dee38446ff06cd95d86c06e727ed77f70f32f7d0bbc6af8544702023d5c168e40de9c0a5a4cf4a9a52600a41ec263194d11da28384c3afa19a6f231ed7e386f594249c66638a2fa7f6130ed73dfc5633cf93f08c8b475bf97f01acc909b7d3bb3b3e1f72845f05238d2e1d9162976d3bd23aead318793cf3bbcec20cb262d69fccdc52af4f775276df583c57a21efe14a2ba97417381d9f8157f6dcf1b0f17070da93b060cfaa107b43a751147ba922507bc00bce388ba7156bcb5fa8de41f5cc84ae45f02107740d47bcfa79792b0d8c9e82b2db1b668c4462ca3754e097507c36a55a37adf5e8807c45301dbcfe094afe5227d26326a5bad783e28a6a7a16ec7af95b8bc92dd4714bd07075a98aac2825ced928825489c53488ffbdfe62cfb9bc1ab88104f7de6c40df5a25e1697c80af492561fb68bf100429cd740ed9d150949a2fabe3ec4cbdf5d25b82d702e0f0f561bb0350ebac17b116fa210e57c23d7ef7ff50d893c5f2d549d3210cff7ff59298f8710545d738d5b104698f5528fce5a4c6347556d0a759b67f94f5b7b00af16f7c5f9b1fd71fec985a92046a5c0b633112bb2cdde3581d98bf4323b417bdbc55a51384d21229602d8b5ef00001e5721d4359616174617b70f0a0198d2d6a3ddc013154f51ee1caf11504f4ae81178cd9f693d5ba0a700ddfd250399b47bd00732f3d8df153d5a773664864ce701e3de79afeec202be04f25c2c816771d02aeab6d9c827f677160351d8dd2f84565efd6beff073c4f5ea9f3506c329913f782f57ad2e4c7b0419fa69949c1b4878b2d27b118c976eb37c8b8f9d11089a2f847d1a5752792d4d2b0587800b37b9d0a704b3fd0a56885f805e72d8b32c1608147d09bf7cd492b813ccb28472ac61c4043c1b9bb2d79b63bfc2e79ff0bc8c31f1d62bcef48534ae9bf6f28818a1c8bd9321bad4cb432e26015df4da12e18514e331886a01b59b98892c4f74463f74241a5c988e9fc1ca100dd7a4715fc28818b136297ced8c4ddca615d23044aeef5f6294bdb2747af689add9fc4d20881da5258c15edfe31d4e4ba5a82a45a15c1d83372322993963af9a70b06549c5acc2305dc54a37dcdb8168da268b9d09c70f5549efed9443c1ec8c414c96f1d611efa1acdef88b2877fdce6968a55ed6d86208fbf29accf942b5ecc9d4d87e9c49a932c08ed83e488b39d8fddf261faad8bc0aa7dbc897bc7e824874d9b8249acc9540334567b5cf7dbc04e20a8c63f87053c6e82be5791fdde80bdcdba4a854131a666fa335a63fd80afec07b26a04217efea3733700595d93db35c4b2c5e5aa5cf21e028b073fc229d131391a3791a37d6d11fb2f6b1b10919eb8db8cddb110d29ef4f3666a386d5e8ee45fe8142d368bf17fc0af801f3e602f0eba4f79309a1914ad76cc6b9827a84ecf2022e822022ff2b76abe27ac0d86f8ff080380ab71bbba1432c6f2a5178d79b825d29db62ef1d87fa265480ca88d5f536db0dc6abc40faf0d05be7a96697776816ff1a32e2590ca010abcb8535fdced1935f74b5a42e3b08f79432ea3b4eb1a79ab247de48f0f4e25b989860dd5cac421f1830d4510fe4255077bbb1bf398d3c59f20c01853df90c2b3498e5c734616ebce1f80eea6a5f0f820f6b4519e074f1fcc751e4c4c883e82a88b15b1c0c551d10c4b4ad98c8138e366128f072cbcf8c2b39fed02b1afb3cfe9bcc0c036df017c3c84cf782b0686a1477dbf8f28304d68d51fb0be2bac7d14f75d23ea5de9a237ef5a835d1aac66ac3586da6c08f7d97cb1630dd1230516fc61fa93a29e7bb0be954b1aeac3e9558ec0cc4420577a0978c918690e30500dd0aa03b48b810bb95abec4dac3cf53dfa369cca14e8c4d79d79c8e36b7cc03be5c4006eaf7ae2028a6cc66575a85626184a0f656392fd89733ac531b506e96c4d9c482cb996e4f8b1d6e8e25219eab97ccf6d7f792baa1ddf769056b7a809fade397f5cac359f05d48f5caa8bb7375ced6ebeff9cda53fdaad52f3cb98ba74d6044ade6d17e9992b93f2aa768a9c77832cf0bcd15c781909c01acc902d64bcd9b64dab1709a5c05298f58bf3118227614995bd12c1bbb3e7c9f0ee7dcb27de257420fa7d1b070c8ec26f0dc2d2bcebc5b75b7f328fe8a6f145a5e7d8d47c6f45b8654af3be95b41caaef9e5a50b55b4cf0a261b5397758b2ad7a3725ebcad6b70d7afb1f86da7da8bcc7cc2e1df3fc53701b031f30f04fa87c1e5b0973abbaf5edd2a964e63dbfaf62a805b29d012565d015d1d518dbf25f3be2d1e80e87628ed41cc4486f38008d5700d98c50658d107b336c7b53a2f72357682a461ef683ee4ab9da4e7471d6eee462b61fca8989dfebe4217663edb4a1793ec2a8176195a0dc2a69ebb843a930952e39e18df5b220acc8af6aec04b165fba739829a610e22e2fee1b48d560dff03f3c375fd228c8f282144ad3e8083cd69520d6a1a7d540109a7d01d86015ba6ab33f141aaa87f7808aeafd1edf992644ccfacd31a0f0da7ba95c3ab14de48c3e56f31d908e00177a8c14f5d7cd863a7107096321b9ea1a370792ac1bc552bd35d2603b0ba71c90a92f981c46da58e224ed5681b81c49670b5a274160f0e9b517cc8e54d11c62cad51c8058b32c96852726e8103fee9828c04b24dfc7f530ddacef86512b165b2ec6fbd49365eec88a405bc8f6fe5a5cc71e81907097fcaf9bbbe04f1b61bd8d2243739ab4a546775b3834fc1d3d851fabeda573db192fef580e4af198bb38820f162cdca3bb5c2a5fd6588e6b449a683cf55ed60895b4777d6bd375b281b0c25e05cfa148ef5969fee47085ca5abfc0e2fe55c0df52b3cf709b23e250fa4cd375d904f28b8865bca02823ea21c91cae05cf3139489a55809b66e3405a6f353fbe5972d654d0a7acad6c1ac457d7dbba0d319b492bb3c1116593bb97b728928e9f4fc2558b0d48c08d76fc1b56cd216c62ec3bf970e6200a35ec52f0516d8c4682819b7718886f81a90e72f805f3194d6cc8b850ff7b9af4753751520f864bf1ceb9a645e389457567fe24624c90e8e4948dbb56c0ba56568c3d5fc6d9baf616ebbd8bc6d458f226300db96113edb9b94002eb149ceb7db8e2c625539753b63e4155f102d43c9d1c6d02dafd4253b255d9f0f191795536a2df9a4b013197b2f0384b8002c97f6fdd84a62e3fc208fb3fc81f74d64141aa9deb8078d890cf13b43866e1cd9d678ff3dfc15e2e7954bdff74571de9daf701306e4154e19a420012a96dbc6b363d25e6e41b11d25081201e446094d42ebf62e4d0a58823383aa293f329b8e57e485b3cfd7bf0342fd64b23a201809f23e1f5407974bca653fd20be7e627e425bd2577f91aaa25bff9a6796f5048950a3a4e4ccd1769773d1d4a31cb2dfb68ab72141360771d04fa6169b00a42f58f1955254104173c2919c075333f86a07c6797e42eac99622190e9210e8194b9589e0316f952f32e5089ade578eb6c919fd893182223ee13fc01d55edd6bb1fe8216e8a5de2047ca7e1b5a1d8b255c59537cf822866ce1cd04cbda95b52f275f7c026a4467f2919b023d397fd293e26237c32b95c3ee10d7cc6d5d482e526136d6ef0c951f504d1a9d6de09ef7ad8b46ad59d1d4833df7eec354d1f8916bfc2f033b43fa6cbff6c3a03bd3fd52d8a371349f5f711cc3135c8a10dd2996e254a28185a4f6e8981b10ab15881d8cabe76c5e1238fe2923dfab713fc35d974c173bf24cb41d1b8f169c2e8971720dadb3a29a40f2de10c6c976191049072b0f9055a60ed5df6dfb95c09b06248d4e5494be79aa11936c226d26f260c2a8baa36c7a4d2a9eb068640528812a15e1d716f71a6cbc29a0a3cd47589d7fd4c4debe1824284e8322835ee13e7153c9f2208b7740e4058fa8503dc4656aebd3ee0fa60fedf7e907b85752b66cdc21b540c31881bc8004c7fce9ea80e7fb235486b5f1d0321c68a0e44cd5f15e21f27c402754a2f7c1387720e959e94abeb4db216a37e59b066bf338fc6f2e6cf3746392d5a6679d182f01b6c7128a28362eec30b4dedc7356616328be64da23c0f61f9b46a42be70546ec111b8adfeaf1efec46fe5d11758cc765262b8d611d0b1614dc02d47c90191ebad24f59571d62766fd6df3920fc0a2c9dc3cc1f6fa34242c7d792add612b414e28cead47c3a0860fb62a00987816f0f618408b15261070acd106e96d4d966d7f78376a2dbcb742e037d1934a1901bce54e979d9c5e0b9ec79190f25d56eb1d65e586b3ae24c063c0c7883512bc2a107ec6687ff168cdb467043ece1744d257eab9e41132c266f299b0776d572738f3a9c7dcba7e0cffbd7373390401dff225f53a780b215f4ef65238c8c38223d46e4e9b1bd5aa1449bed326a81c85eef48e6fb26b29e4c32377d3a8a0bff978a68755884c58dc4652c16f65b49e0a3b7f9b3e67e4f3e1b68b7e04482aea25ee5548a6d798cb7e6cc3cd2f788513f88c3c524ba20cf281002e11cd5f8bcb6e4d8ab929d026b7f74c43ebfba64203b6aad3bd7eaa0aad2c68b63b1637eeeb3d5cece1c7ba1fa4afaf7b22bb3914f4ae5debe4bfc907ac4bb8c801c71679d0f8e424c866dfaa180e5c127a57772270476c2ccdf7452b7844b60f6dc845540409add976ef85f09d7c1db1fbb7a995fee9a140820c679d98812b3086010ca80fd67fb4f44bf518ba61b800aec3169427fcc2cc0be877869468ded6545ab29d77c9225d4960774bf825f6a69a64084871e8987b6e71bd0df56399a7e0bc815ac6485d7b7d1852b1dd309f4cc780c5d86616ebf2b591805b42d9224b310dbf0883bdfab6995ad071f3ea7b993e00966d8eec83dce82f0a970332426b4f37b5ce378fbfb8a30d37b4c2bc513606cdc32f70d327df0d33a1eac1d5c1af4320abd569267526a61bd0a1d10cebca27cd94459434a1a32e848e7c022c67be14b2e844a1eae4aba76be361a8430ffeaaea51d88275b7d1520c1974519efc41cad3b6446843d3edb0e5b81bcfca867a960b410fc300321182b289fb339347df6e6d5bfd44990b94c87196f8cf0718e5f318ad13de3bd90ac55e28383273114107672096c0545549f8f7c7202e648ce8caf8dd0b5b90766523f83c54d5a7220e9da94d3861dc77b4475f91ba7748ac2a22951920c366cfc9a4690e76a49542ef391b2a0ab199397cbd913dee2f1b3e5403d6a97a9c24aedf5197e6c728a6398ce1a5ff3537f46549627612e6e0440b0d75a3d4407134d94f316b0c6fe842ce8ca02f13e07b53c1c53ff45ac7112ddbfe81e4e49bc7fd18c04ccdc7956dd2cb987ba1af34061f17965bf45bbc4b3d76ce2e811fb228e735dbaba660613dbcf6577ce31b595fc12d64be5f5fea15dca3268563ceae1b5af64755dc1ffce26a1772aadd9f760e9fcbd8711bac7cf7722cae8c7038b629be25ac52594c8ee442f8900d7883b39c23bb997b128a987967d70d4d91a7f3d87b88b4ab032f3ec9ae605aae9a0e3990b4c450e42a436724246decd0af618cb3f9e80567c410351b151677942c893072b9ada5b54d1e107f0fb5f21bb0afaa3fa10c478e83369b61dfe390c7173cc0cb9c3f3ff56262bb139179c8387ed97506d9be232928ea9724738f4d50416f0f21c442c7ac51589266137f152fff27148f0ac4403f9a7451eb3be25536946a48ff997ee4e20248ba02fb9082061de1b0629de748d8c31cf23e9ea45181f77491ea83ba3fa05c795e6fb274b7c7be4e7008f8efe0fc8a2aa2a5049ce83a51d7126ceac080ed4935a433a1f35b7accb77d0885a4b2b4d7e588a9d593c3688cd9f50c36564ed2b1c2b4d82fd516252e64feeaabce66079296cdd17a518a138fc35f53cf4551567a69b7e6c3e192d2cc9d1c37d134a4fea48598a6599ee44342dd7ac71e5432818d72d5e3c7e074888eaaff76619f13a0f3fa12afdb4279018d6e6ef2894d995bd2253559a29b67505cd2ce2fc2d75bf5683d63746804f25458c0635c79f62ded31ca00cfbcd711311e5fb2ea5ca42505eb95b27d69adf7458b19808b5719973e93a85dce7d5f1a33bc97d23097ce19d9654c275344052fdb0ec2ed09897c7f56de0875dd4dfa2b5e1ec35788db1cde78bca8ec7d63d4431ec903d35e79e88b3efc327084946fecbb2d2a687b90571deadaf226832ce2da16a5235a108d2466fdd36e754bba870451cf162e901e477d38a57100ee09f79dcc886ca9a92ffab69b4d04acbb270a1c28edcdd04fedb4a769076fa04461da34475c24e9b1c6302421513b3e5b43c0db497098774065664285e7322e109c54468f079441aeba8f5796c65d53b37770eabb3ebf4becef24f7952c03d3d7212d7bad7304da2a72dff80296b0124c29e4f086418a73daf1b86e9fc02ab6235a2d7da886bbdbac58e8ae6ea87da4adc3e296b35f411892d5e84eae8aef017bae1bf1882a036dbdd37122e1e40b315eab338449822b619d017d3fc7729ad96885c182564622b8e44b44fb6332a4e0e84b9f615091917782df3febf46072687148e5d619c161e3a92827e2fc7a8ed9d209edd5d174bb81c9d5f5f73c3cc0d61e5d5095d985081794d3e37fb5a41245a44fe78ad213f1a8fb4d690ea8eecc4bf72dca689e795f7b2eb240799598784ce78453255e567b149fae61d63e5fdeee85201bf77185ae38fe2e0579a43f0815220ffa517a25a0ec3d60a6f708753ee74f9f0ae959913c758cb0fc26eb7f0ac9dd5aa4b43068aa595dcb001a0e19345fdd1060e65f85525b619eeb297141c58fa1cc18f68707df82885736e75734077eb8dce5988a49381204619b293f6e8290f4cd20c088ea8890456c1205ebac006b676c61a4e2c636c1fd62d4cf5bec89f361c582ba39f9ecaa1d725a1dd26b674f72279cb56fe29490d5085dc3cfa522e16d1c078ba41d55f997d1d7d61457845162745d713a8699a813ba00aca37f9582a23b77dbd13c09a43bf151d9ba5a9e9abebd6e804a9b8e313fe28332dd6429fd87889a54c63f51d4913a90cdcc5bfe510e69958ba707bb52e2e7affe873b277ba46c389c8d0f75b122155b5b5041ed9fdbe09b3a5ab4683483314cb8a8ecd7238250185b2e92bd6275e87b2b50f6b1acab8948346a88ddffaa282208495e811ea89a033aafb27110121cb9e4d361929f09ce6322df6d61dadf34f894717b6d939eb4c1e01a56d8e2821adb2ee26adaa07a16b6abc24a3eedabbd9807282ae3abed041af776663b014c49a9b384f9cfd988ca07781a06ba61952bc80776532a8e1cf4d624ccc9e294f810ed18c1f6bb6fba501f30ef8b1e5e26e6513c64de8b63b3eabc11236915c40fd96d08a149e48d9811c67c49c0b20be456fb50f9b44e523b509566832d1cb9180bf2292ddb9359ab75c304318dbd9159e38de83ebbbb853b8d29caf5fd3e9a9b0d44236c920ffb7ae5e06faeda89180df6d1af39dc19213b0940e67fc1c58f20492b9f6757a29c8ec7e366c98f5cc787f58d4af400b251c32ca2622c61f7c230266f45241392646d84959089957fc64f4a8a64770dcc3b5c5e16e501c61d58520cd7bcadac287aa185be96f6d23a3eed5b90a3c8edb0078d07661708d67e7c0f632dad0a0cac07b231261f182fd457e99267aff186a6dedf8f58a2487a6454ee9437bf4119663226ef94d4f8949738cc56d631fac2f5e8d95eb52bc99b15087705be9b5cbd9d248729d25c9deac90a1e0ea6d1e987e74c03dc445d941fdac1321f89e862de9b045c46a6610f17b3f465249f36c8bfc233e572cfddb0f0fba7a84a624f5c66a6fb2eaed98857059d1f2bff89099e51cfc408861c5625f4c0e160ef0f78513c073184c8337b7c9aceb2f7072cf174255628f382f56efc157198e274590a494806cde6fe7be286c090d652a4509751239f862ecc20cd3c3955f3b74308ae4d72eaf8dcb77b647e5e29b3c33ebca23d33f1 +MD = b09d1a963ba9bf92907707b7d48b96e0d37dbd79 + diff --git a/vendor/ring/third_party/NIST/SHAVS/SHA1Monte.rsp b/vendor/ring/third_party/NIST/SHAVS/SHA1Monte.rsp new file mode 100644 index 00000000..b823e856 --- /dev/null +++ b/vendor/ring/third_party/NIST/SHAVS/SHA1Monte.rsp @@ -0,0 +1,309 @@ +# CAVS 11.1 +# "SHA-1 Monte" information for "sha_values" +# SHA tests are configured for BYTE oriented implementations +# Generated on Wed May 11 17:26:02 2011 + +[L = 20] + +Seed = dd4df644eaf3d85bace2b21accaa22b28821f5cd + +COUNT = 0 +MD = 11f5c38b4479d4ad55cb69fadf62de0b036d5163 + +COUNT = 1 +MD = 5c26de848c21586bec36995809cb02d3677423d9 + +COUNT = 2 +MD = 453b5fcf263d01c891d7897d4013990f7c1fb0ab + +COUNT = 3 +MD = 36d0273ae363f992bbc313aa4ff602e95c207be3 + +COUNT = 4 +MD = d1c65e9ac55727fbf30eaf5f00cc22b9bab81a2c + +COUNT = 5 +MD = 2c477cd77e5749da7fc4e5ca7eed77166e8ceae6 + +COUNT = 6 +MD = 60b11211137f46863501a32a435976eabd4532f3 + +COUNT = 7 +MD = 0894f4f012a1e5344044e0ecfa6f078382064602 + +COUNT = 8 +MD = 06b6222855cae9bed77e9e3050d164a98286ea5f + +COUNT = 9 +MD = e2872694d3d23a68a24419c35bd9ac9006248a8f + +COUNT = 10 +MD = ea43595eb1cff3a7e045c5868d0775b4409b14a3 + +COUNT = 11 +MD = 05a9e94fdc792a61aa60bcd37592acee1f983280 + +COUNT = 12 +MD = 7d11aa9413cd89a387a5c0f9aa5ce541be2aa6e8 + +COUNT = 13 +MD = 37297d053aaa4a845cc9ce0c0165644ab8d0e00b + +COUNT = 14 +MD = d9dcde396d69748c1fe357f8b662a27ce89082c8 + +COUNT = 15 +MD = 737a484499b6858b14e656c328979e8aa56b0a43 + +COUNT = 16 +MD = 4e9c8b3bce910432ac2ad17d51e6b9ec4f92c1ad + +COUNT = 17 +MD = 62325b9a7cebcc6da3bfe781d84eb53a6eb7b019 + +COUNT = 18 +MD = 4710670e071609d470f7d628d8ea978dfb9234ac + +COUNT = 19 +MD = 23baee80eee052f3263ac26dd12ea6504a5bd234 + +COUNT = 20 +MD = 9451efb9c9586a403747acfa3ec74d359bb9d7ff + +COUNT = 21 +MD = 37e9d7c81b79f090c8e05848050936c64a1bd662 + +COUNT = 22 +MD = a6489ff37141f7a86dd978f685fdd4789d1993dc + +COUNT = 23 +MD = 39650d32501dfcee212d0de10af9db47e4e5af65 + +COUNT = 24 +MD = cd4ea3474e046b281da5a4bf69fd873ef8d568d6 + +COUNT = 25 +MD = 0d7b518c07c6da877eee35301a99c7563f1840df + +COUNT = 26 +MD = 68a70ae466532f7f61af138889c0d3f9670f3590 + +COUNT = 27 +MD = c0222aae5fd2b9eff143ac93c4493abe5c8806af + +COUNT = 28 +MD = d2efc5aa0b29db15f3e5de82aaa0a8ce888ffb2f + +COUNT = 29 +MD = eec4f55d02c627dcee36b5b5606603bdc9a94a26 + +COUNT = 30 +MD = 0e706fb1a1fa26aab74efcef57ab6a49c07ca7bd + +COUNT = 31 +MD = 2ea392ca8043686424f7e9500edfb9e9297943f7 + +COUNT = 32 +MD = 74737ef257b32a4cb9428c866b65bee62ccbe653 + +COUNT = 33 +MD = df3e86e49a0429fa81f553b04b9fc003510e9a51 + +COUNT = 34 +MD = 79c3049944fbf8b80dadadc7f5174e5cfdf996de + +COUNT = 35 +MD = f25e2eca4cfb6da8e8b7b62f581672fab80754fa + +COUNT = 36 +MD = 76509239d9fd6c6f050c0d9b3777b5645e4d4c70 + +COUNT = 37 +MD = cf4bb3e1f330c862e239d9b010bd842f302bd227 + +COUNT = 38 +MD = 4eeac7ab2ac9e4c81ed1a93a300b2af75beddb08 + +COUNT = 39 +MD = 46443ba72a64fff4b5252fbac9ef93c2949f8585 + +COUNT = 40 +MD = 5e9c42482343a54aadb11ab00c2e00cbe25ec91a + +COUNT = 41 +MD = 93acee1977128f2a4218678b32e2844f23eb526b + +COUNT = 42 +MD = 226065d299b2d6c582d386897b93f2adf14de00b + +COUNT = 43 +MD = 672fed0d90c21d4ec0111a7284bcf1bbd72af9bd + +COUNT = 44 +MD = 90d642f12f28cb3dad7daad84cf0f94ded1137ae + +COUNT = 45 +MD = 4a2815b58ffc858e5e7e9e6106765458d2af4ec3 + +COUNT = 46 +MD = 29fa3679032421b78b7a08c54766c1592f6739c1 + +COUNT = 47 +MD = 19f4e30393eb66c6e200744fa8999d224e6df173 + +COUNT = 48 +MD = 30650026be77212088ab50438e04b4b8e3761977 + +COUNT = 49 +MD = 993d0e135bcd598fa673c6f19251bcbde18b7b34 + +COUNT = 50 +MD = c9eaf20b473219a70efe85940620426c6ff6f4a4 + +COUNT = 51 +MD = 6325d0b83c308bd42854ce69446e85ba36348d7d + +COUNT = 52 +MD = 2fb354f8a68030efb747f78812060a9c05e92164 + +COUNT = 53 +MD = a7e33bd16f770c17e8818ad5a5fc4fee673eae56 + +COUNT = 54 +MD = ff23e7105bc9f4dad0fb9c6519d1eae16439a5d6 + +COUNT = 55 +MD = a31aca821e163213cd2ae84cf56c1134daa4a621 + +COUNT = 56 +MD = 94ab9cfd4cf9bf2e4409dbcdc9ef2c8b611cc69d + +COUNT = 57 +MD = c0194064ce48dde771b7871efa86a4a6e87eec76 + +COUNT = 58 +MD = f1a9065e3e7f98753c6f833f5ffe74133f6b887f + +COUNT = 59 +MD = b8b3cd6ca1d5b5610e43212f8df75211aaddcf96 + +COUNT = 60 +MD = 33c3a8d739cc2f83be597aa11c43e2ad6f0d2436 + +COUNT = 61 +MD = 4f5c67e5110f3663b7aa88759dbba6fa82f2d705 + +COUNT = 62 +MD = b1ebc87c7b2b8fe73e7a882d3f4f0492946e0d7c + +COUNT = 63 +MD = 01566616fe4a8c7cf22f21031ac6ea7fb7ce15db + +COUNT = 64 +MD = 5650f3517a393792781d23b4c9d360bf8bd31d65 + +COUNT = 65 +MD = a4fdbd24cb4a328b898b804b103caa98baedd3fa + +COUNT = 66 +MD = 0cf01eecec4b85aa39f40aa9b4dce208d68eb17b + +COUNT = 67 +MD = ae9ac147bab7c10609abe6e931a5ab087a41dc5a + +COUNT = 68 +MD = c0328145ce63fb0aceeb414e791d2be92009b1ec + +COUNT = 69 +MD = 60343e5fb7eee00d31ea507b820ddbb7ef405dc7 + +COUNT = 70 +MD = e0b97cd9149ff9955b6a35b3a79ecb3bdbd2a5a5 + +COUNT = 71 +MD = 4e4fdcd382ae0f3f4fbda5fd934eee0d6ad37df5 + +COUNT = 72 +MD = 9d97dd237d193482cf3ab862a38843762e69077f + +COUNT = 73 +MD = 2bc927d17ff2f8a844f6f36a944a64d73d431192 + +COUNT = 74 +MD = b91200306b769aab18e5e411b5bd5e7bce1cc80e + +COUNT = 75 +MD = c47493a666085e1b7a75618761a80c402f46546d + +COUNT = 76 +MD = 31355869b80ff84fac239db694ada07d3be26b15 + +COUNT = 77 +MD = 1a2022f6330bf96f025cb7d8f0201a7d70b3b58e + +COUNT = 78 +MD = 0f60d7c5ad49efce939c3a27da9973f7f1747848 + +COUNT = 79 +MD = ceada087801616fc6c08cfa469658f3dc5239ca7 + +COUNT = 80 +MD = 4ad0cf9181122b06df714397bd5366aa90bfc9fa + +COUNT = 81 +MD = ac6404e6b9d5c0fa17fa77fd39850f22b76ecd83 + +COUNT = 82 +MD = f0658218adffb9ee9328577854b6387393957a3a + +COUNT = 83 +MD = 6fe9992747897389957b9a91467a4ec983829ab6 + +COUNT = 84 +MD = 74320b3ddde6dbfbdad3ad29a7695f5a275b2105 + +COUNT = 85 +MD = 2009ea5d6452f51d12477740e374e0e313134779 + +COUNT = 86 +MD = 7dbf33d7125709f101fea4ec03436ab95a900c28 + +COUNT = 87 +MD = 0c05b78e324cb265bd6adc7452249eaa85bccb3f + +COUNT = 88 +MD = 10c1b9b2de8a9050fb6f4b10a99f7e1e47159f25 + +COUNT = 89 +MD = 20072c1f691142d9b83a090dd01f446b4e325a1c + +COUNT = 90 +MD = ffcb6a1525f20803cfc79deb40addfd3e7b2f05c + +COUNT = 91 +MD = bdcbb4ed636e244bb0fe6af4bc53998936df4ebc + +COUNT = 92 +MD = f58ccbc65a2ffa5b35274dd0ceb4ea70eb73c26a + +COUNT = 93 +MD = fbe95ac75e4b9cccd1a5debf757fa1a502d07944 + +COUNT = 94 +MD = a8babac55950dba4993601d35adff874a2b9bb2a + +COUNT = 95 +MD = 594db79de71c7651e9eef2f08bb7be3d26b6ee99 + +COUNT = 96 +MD = 63377d45d0e2d0c987bebe8086c76a5e8b63a14b + +COUNT = 97 +MD = cd1e7a192130866aa87fd1c8b43e9b7a0eab7615 + +COUNT = 98 +MD = b3c69ad5dbdd34b7b45b2a89dad72f4cf1d8fd73 + +COUNT = 99 +MD = 01b7be5b70ef64843a03fdbb3b247a6278d2cbe1 + diff --git a/vendor/ring/third_party/NIST/SHAVS/SHA1ShortMsg.rsp b/vendor/ring/third_party/NIST/SHAVS/SHA1ShortMsg.rsp new file mode 100644 index 00000000..f4010fea --- /dev/null +++ b/vendor/ring/third_party/NIST/SHAVS/SHA1ShortMsg.rsp @@ -0,0 +1,267 @@ +# CAVS 11.0 +# "SHA-1 ShortMsg" information +# SHA-1 tests are configured for BYTE oriented implementations +# Generated on Tue Mar 15 08:23:35 2011 + +[L = 20] + +Len = 0 +Msg = 00 +MD = da39a3ee5e6b4b0d3255bfef95601890afd80709 + +Len = 8 +Msg = 36 +MD = c1dfd96eea8cc2b62785275bca38ac261256e278 + +Len = 16 +Msg = 195a +MD = 0a1c2d555bbe431ad6288af5a54f93e0449c9232 + +Len = 24 +Msg = df4bd2 +MD = bf36ed5d74727dfd5d7854ec6b1d49468d8ee8aa + +Len = 32 +Msg = 549e959e +MD = b78bae6d14338ffccfd5d5b5674a275f6ef9c717 + +Len = 40 +Msg = f7fb1be205 +MD = 60b7d5bb560a1acf6fa45721bd0abb419a841a89 + +Len = 48 +Msg = c0e5abeaea63 +MD = a6d338459780c08363090fd8fc7d28dc80e8e01f + +Len = 56 +Msg = 63bfc1ed7f78ab +MD = 860328d80509500c1783169ebf0ba0c4b94da5e5 + +Len = 64 +Msg = 7e3d7b3eada98866 +MD = 24a2c34b976305277ce58c2f42d5092031572520 + +Len = 72 +Msg = 9e61e55d9ed37b1c20 +MD = 411ccee1f6e3677df12698411eb09d3ff580af97 + +Len = 80 +Msg = 9777cf90dd7c7e863506 +MD = 05c915b5ed4e4c4afffc202961f3174371e90b5c + +Len = 88 +Msg = 4eb08c9e683c94bea00dfa +MD = af320b42d7785ca6c8dd220463be23a2d2cb5afc + +Len = 96 +Msg = 0938f2e2ebb64f8af8bbfc91 +MD = 9f4e66b6ceea40dcf4b9166c28f1c88474141da9 + +Len = 104 +Msg = 74c9996d14e87d3e6cbea7029d +MD = e6c4363c0852951991057f40de27ec0890466f01 + +Len = 112 +Msg = 51dca5c0f8e5d49596f32d3eb874 +MD = 046a7b396c01379a684a894558779b07d8c7da20 + +Len = 120 +Msg = 3a36ea49684820a2adc7fc4175ba78 +MD = d58a262ee7b6577c07228e71ae9b3e04c8abcda9 + +Len = 128 +Msg = 3552694cdf663fd94b224747ac406aaf +MD = a150de927454202d94e656de4c7c0ca691de955d + +Len = 136 +Msg = f216a1cbde2446b1edf41e93481d33e2ed +MD = 35a4b39fef560e7ea61246676e1b7e13d587be30 + +Len = 144 +Msg = a3cf714bf112647e727e8cfd46499acd35a6 +MD = 7ce69b1acdce52ea7dbd382531fa1a83df13cae7 + +Len = 152 +Msg = 148de640f3c11591a6f8c5c48632c5fb79d3b7 +MD = b47be2c64124fa9a124a887af9551a74354ca411 + +Len = 160 +Msg = 63a3cc83fd1ec1b6680e9974a0514e1a9ecebb6a +MD = 8bb8c0d815a9c68a1d2910f39d942603d807fbcc + +Len = 168 +Msg = 875a90909a8afc92fb7070047e9d081ec92f3d08b8 +MD = b486f87fb833ebf0328393128646a6f6e660fcb1 + +Len = 176 +Msg = 444b25f9c9259dc217772cc4478c44b6feff62353673 +MD = 76159368f99dece30aadcfb9b7b41dab33688858 + +Len = 184 +Msg = 487351c8a5f440e4d03386483d5fe7bb669d41adcbfdb7 +MD = dbc1cb575ce6aeb9dc4ebf0f843ba8aeb1451e89 + +Len = 192 +Msg = 46b061ef132b87f6d3b0ee2462f67d910977da20aed13705 +MD = d7a98289679005eb930ab75efd8f650f991ee952 + +Len = 200 +Msg = 3842b6137bb9d27f3ca5bafe5bbb62858344fe4ba5c41589a5 +MD = fda26fa9b4874ab701ed0bb64d134f89b9c4cc50 + +Len = 208 +Msg = 44d91d3d465a4111462ba0c7ec223da6735f4f5200453cf132c3 +MD = c2ff7ccde143c8f0601f6974b1903eb8d5741b6e + +Len = 216 +Msg = cce73f2eabcb52f785d5a6df63c0a105f34a91ca237fe534ee399d +MD = 643c9dc20a929608f6caa9709d843ca6fa7a76f4 + +Len = 224 +Msg = 664e6e7946839203037a65a12174b244de8cbc6ec3f578967a84f9ce +MD = 509ef787343d5b5a269229b961b96241864a3d74 + +Len = 232 +Msg = 9597f714b2e45e3399a7f02aec44921bd78be0fefee0c5e9b499488f6e +MD = b61ce538f1a1e6c90432b233d7af5b6524ebfbe3 + +Len = 240 +Msg = 75c5ad1f3cbd22e8a95fc3b089526788fb4ebceed3e7d4443da6e081a35e +MD = 5b7b94076b2fc20d6adb82479e6b28d07c902b75 + +Len = 248 +Msg = dd245bffe6a638806667768360a95d0574e1a0bd0d18329fdb915ca484ac0d +MD = 6066db99fc358952cf7fb0ec4d89cb0158ed91d7 + +Len = 256 +Msg = 0321794b739418c24e7c2e565274791c4be749752ad234ed56cb0a6347430c6b +MD = b89962c94d60f6a332fd60f6f07d4f032a586b76 + +Len = 264 +Msg = 4c3dcf95c2f0b5258c651fcd1d51bd10425d6203067d0748d37d1340d9ddda7db3 +MD = 17bda899c13d35413d2546212bcd8a93ceb0657b + +Len = 272 +Msg = b8d12582d25b45290a6e1bb95da429befcfdbf5b4dd41cdf3311d6988fa17cec0723 +MD = badcdd53fdc144b8bf2cc1e64d10f676eebe66ed + +Len = 280 +Msg = 6fda97527a662552be15efaeba32a3aea4ed449abb5c1ed8d9bfff544708a425d69b72 +MD = 01b4646180f1f6d2e06bbe22c20e50030322673a + +Len = 288 +Msg = 09fa2792acbb2417e8ed269041cc03c77006466e6e7ae002cf3f1af551e8ce0bb506d705 +MD = 10016dc3a2719f9034ffcc689426d28292c42fc9 + +Len = 296 +Msg = 5efa2987da0baf0a54d8d728792bcfa707a15798dc66743754406914d1cfe3709b1374eaeb +MD = 9f42fa2bce6ef021d93c6b2d902273797e426535 + +Len = 304 +Msg = 2836de99c0f641cd55e89f5af76638947b8227377ef88bfba662e5682babc1ec96c6992bc9a0 +MD = cdf48bacbff6f6152515323f9b43a286e0cb8113 + +Len = 312 +Msg = 42143a2b9e1d0b354df3264d08f7b602f54aad922a3d63006d097f683dc11b90178423bff2f7fe +MD = b88fb75274b9b0fd57c0045988cfcef6c3ce6554 + +Len = 320 +Msg = eb60c28ad8aeda807d69ebc87552024ad8aca68204f1bcd29dc5a81dd228b591e2efb7c4df75ef03 +MD = c06d3a6a12d9e8db62e8cff40ca23820d61d8aa7 + +Len = 328 +Msg = 7de4ba85ec54747cdc42b1f23546b7e490e31280f066e52fac117fd3b0792e4de62d5843ee98c72015 +MD = 6e40f9e83a4be93874bc97cdebb8da6889ae2c7a + +Len = 336 +Msg = e70653637bc5e388ccd8dc44e5eace36f7398f2bac993042b9bc2f4fb3b0ee7e23a96439dc01134b8c7d +MD = 3efc940c312ef0dfd4e1143812248db89542f6a5 + +Len = 344 +Msg = dd37bc9f0b3a4788f9b54966f252174c8ce487cbe59c53c22b81bf77621a7ce7616dcb5b1e2ee63c2c309b +MD = a0cf03f7badd0c3c3c4ea3717f5a4fb7e67b2e56 + +Len = 352 +Msg = 5f485c637ae30b1e30497f0fb7ec364e13c906e2813daa34161b7ac4a4fd7a1bddd79601bbd22cef1f57cbc7 +MD = a544e06f1a07ceb175a51d6d9c0111b3e15e9859 + +Len = 360 +Msg = f6c237fb3cfe95ec8414cc16d203b4874e644cc9a543465cad2dc563488a659e8a2e7c981e2a9f22e5e868ffe1 +MD = 199d986ed991b99a071f450c6b1121a727e8c735 + +Len = 368 +Msg = da7ab3291553c659873c95913768953c6e526d3a26590898c0ade89ff56fbd110f1436af590b17fed49f8c4b2b1e +MD = 33bac6104b0ad6128d091b5d5e2999099c9f05de + +Len = 376 +Msg = 8cfa5fd56ee239ca47737591cba103e41a18acf8e8d257b0dbe8851134a81ff6b2e97104b39b76e19da256a17ce52d +MD = 76d7db6e18c1f4ae225ce8ccc93c8f9a0dfeb969 + +Len = 384 +Msg = 57e89659d878f360af6de45a9a5e372ef40c384988e82640a3d5e4b76d2ef181780b9a099ac06ef0f8a7f3f764209720 +MD = f652f3b1549f16710c7402895911e2b86a9b2aee + +Len = 392 +Msg = b91e64235dbd234eea2ae14a92a173ebe835347239cff8b02074416f55c6b60dc6ced06ae9f8d705505f0d617e4b29aef9 +MD = 63faebb807f32be708cf00fc35519991dc4e7f68 + +Len = 400 +Msg = e42a67362a581e8cf3d847502215755d7ad425ca030c4360b0f7ef513e6980265f61c9fa18dd9ce668f38dbc2a1ef8f83cd6 +MD = 0e6730bc4a0e9322ea205f4edfff1fffda26af0a + +Len = 408 +Msg = 634db92c22010e1cbf1e1623923180406c515272209a8acc42de05cc2e96a1e94c1f9f6b93234b7f4c55de8b1961a3bf352259 +MD = b61a3a6f42e8e6604b93196c43c9e84d5359e6fe + +Len = 416 +Msg = cc6ca3a8cb391cd8a5aff1faa7b3ffbdd21a5a3ce66cfaddbfe8b179e4c860be5ec66bd2c6de6a39a25622f9f2fcb3fc05af12b5 +MD = 32d979ca1b3ed0ed8c890d99ec6dd85e6c16abf4 + +Len = 424 +Msg = 7c0e6a0d35f8ac854c7245ebc73693731bbbc3e6fab644466de27bb522fcb99307126ae718fe8f00742e6e5cb7a687c88447cbc961 +MD = 6f18190bd2d02fc93bce64756575cea36d08b1c3 + +Len = 432 +Msg = c5581d40b331e24003901bd6bf244aca9e9601b9d81252bb38048642731f1146b8a4c69f88e148b2c8f8c14f15e1d6da57b2daa9991e +MD = 68f525feea1d8dbe0117e417ca46708d18d7629a + +Len = 440 +Msg = ec6b4a88713df27c0f2d02e738b69db43abda3921317259c864c1c386e9a5a3f533dc05f3beeb2bec2aac8e06db4c6cb3cddcf697e03d5 +MD = a7272e2308622ff7a339460adc61efd0ea8dabdc + +Len = 448 +Msg = 0321736beba578e90abc1a90aa56157d871618f6de0d764cc8c91e06c68ecd3b9de3824064503384db67beb7fe012232dacaef93a000fba7 +MD = aef843b86916c16f66c84d83a6005d23fd005c9e + +Len = 456 +Msg = d0a249a97b5f1486721a50d4c4ab3f5d674a0e29925d5bf2678ef6d8d521e456bd84aa755328c83fc890837726a8e7877b570dba39579aabdd +MD = be2cd6f380969be59cde2dff5e848a44e7880bd6 + +Len = 464 +Msg = c32138531118f08c7dcc292428ad20b45ab27d9517a18445f38b8f0c2795bcdfe3ffe384e65ecbf74d2c9d0da88398575326074904c1709ba072 +MD = e5eb4543deee8f6a5287845af8b593a95a9749a1 + +Len = 472 +Msg = b0f4cfb939ea785eabb7e7ca7c476cdd9b227f015d905368ba00ae96b9aaf720297491b3921267576b72c8f58d577617e844f9f0759b399c6b064c +MD = 534c850448dd486787b62bdec2d4a0b140a1b170 + +Len = 480 +Msg = bd02e51b0cf2c2b8d204a026b41a66fbfc2ac37ee9411fc449c8d1194a0792a28ee731407dfc89b6dfc2b10faa27723a184afef8fd83def858a32d3f +MD = 6fbfa6e4edce4cc85a845bf0d228dc39acefc2fa + +Len = 488 +Msg = e33146b83e4bb671392218da9a77f8d9f5974147182fb95ba662cb66011989c16d9af104735d6f79841aa4d1df276615b50108df8a29dbc9de31f4260d +MD = 018872691d9b04e8220e09187df5bc5fa6257cd9 + +Len = 496 +Msg = 411c13c75073c1e2d4b1ecf13139ba9656cd35c14201f1c7c6f0eeb58d2dbfe35bfdeccc92c3961cfabb590bc1eb77eac15732fb0275798680e0c7292e50 +MD = d98d512a35572f8bd20de62e9510cc21145c5bf4 + +Len = 504 +Msg = f2c76ef617fa2bfc8a4d6bcbb15fe88436fdc2165d3074629579079d4d5b86f5081ab177b4c3f530376c9c924cbd421a8daf8830d0940c4fb7589865830699 +MD = 9f3ea255f6af95c5454e55d7354cabb45352ea0b + +Len = 512 +Msg = 45927e32ddf801caf35e18e7b5078b7f5435278212ec6bb99df884f49b327c6486feae46ba187dc1cc9145121e1492e6b06e9007394dc33b7748f86ac3207cfe +MD = a70cfbfe7563dd0e665c7c6715a96a8d756950c0 + diff --git a/vendor/ring/third_party/NIST/SHAVS/SHA224LongMsg.rsp b/vendor/ring/third_party/NIST/SHAVS/SHA224LongMsg.rsp new file mode 100644 index 00000000..aa5f3a69 --- /dev/null +++ b/vendor/ring/third_party/NIST/SHAVS/SHA224LongMsg.rsp @@ -0,0 +1,263 @@ +# CAVS 11.0 +# "SHA-224 LongMsg" information +# SHA-224 tests are configured for BYTE oriented implementations +# Generated on Tue Mar 15 08:23:37 2011 + +[L = 28] + +Len = 1304 +Msg = f149e41d848f59276cfddd743bafa9a90e1ee4a263a118142b33e3702176ef0a59f8237a1cb51b42f3ded6b202d9af0997898fdd03cf60bda951c514547a0850cec25444ae2f24cb711bfbafcc3956c941d3de69f155e3f8b10f06db5f37359b772ddd43e1035a0a0d3db33242d5843033833b0dd43b870c6bf60e8deab55f317cc3273f5e3ba747f0cb65050cb7228796210d9254873643008d45f29cfd6c5b060c9a +MD = 9db6dc3a23abd7b6c3d72c38f4843c7de48a71d0ba91a86b18393e5f + +Len = 2096 +Msg = c39147fad02c6ed5876eb3257837c3f456008694fac94932aa521bae9c8e77abb65524e298595abbdc5b261e9c9f0f86359dfa584bf94b740eb54d09bba6d4ad652421adf50605a170ce4a4478204e831679f1d4b61db1c9735114e595cb47ae58670403f01bb8b0c92de64013a3c6137efc33b0421dc45b638e38eb33e617d61884968e8f80bb1071e1c3b97611c15cf78e8793f8e1c95265d480c29ce08d4c2ce59ff3dc1e56e8f053a958a75085890897b625de520bd6028bb512d89ff1391cf0e7dddfdbd160ccea5fc5b04a5ac03a7f890fff56d10dc01b9f85f00d8bc4710f35f29fa073a28f0dafa798e58a2913aec5f960d662222aed06c1eb11a216b2a952da2456 +MD = 2b05b170d4976409f23ce885a0a2c0a943226688d4f5bbaf35fabb46 + +Len = 2888 +Msg = d488bdda400932de56a9f105f0e74ee79c2ed869faaadc31665c2b5dd7691d7407b8d69cd5bbc80ee78d79c8933e8781006be9e2881177f361a2add47d59acadaecb81e70ec0aa9d9e40d64d2df1edd47ca050999f1d6208a64c47427d79ec1211ec4724b4bde071c3ea90fe86a788c657f596f40776a4567d80820fa070e58c7841afb98f5d70749eb22d4265096140db93425d87c545c72e66e4a3aee79f012af2410f6745648c76c1378094be7f2b4ea2dc3be9b24e420028f7666f85235b7028858e0420c3a3953f3622d96feb6df949edf6f3e4c6ae3deb43c1abf37880920b049e2e9496a04153b08ffdc4abf024b1fcf66e04b5f52bda4f1a29d8a65ad8c245a8ac49e46bc3252f2fc864c99a170291a221b924fe121aa3dab2ddb6cf8976d01247e9b5ec63de3a6a01f84c5519633464d6ac19b13cd6c76a0eaaafc9ef4e2e46c719120b68a65aa872273d0873fc6ea353859ff6f034443005e6992f5073e6aaf48301b01c +MD = e12c2c07628185fcc930d02b5fff6408e8eb1aad2bb0032830e04ff2 + +Len = 3680 +Msg = a67e008f13a29021d1493c7ddb0e7f4126a786f9e01991eff52c9b45d81d3d408094d0e7b1d5d2cd7c3a8a2b09e1ef3194a2c79eb6440c8fe6f093943fe5f009846e94a46111384af30a7f278bf8d6fdafd59fbc622b9054a68555c73e247d82b8f493edabbf8b413e9f619ae9b9fc4d8028587b6d38e4e63cd529045e43ad52260f17eb1845935963e378abac8e29c70d8439025ed2d2eeb3c7577325a84822d6a566c52f0c183b6cbd0e835bde241660cf897abd6020141042263e1dbc1699ce9fc9a4787ce28e601469497e10b6e081f3910a134c97ff5d30e08acee7de6018e688b07cfdb8fb48d2d2269e8ea7ce76d699dbe6fdff58a278cb82bf926a1ebc61eb10c2f8642a2bde914242bfbf874962e815c1db20c6e5022f4b7823807cc0f73aedd3d3acc21120eec4f20bc5b4027dc8df294ec1f230b656108104e9222e92bc6e35f8596c038031d436da83fca7117f61a8beac838a7c87f7639b6db70d19babc72cd33cf07e6a19c9794bf08420556c4c593a722fc3c0928a552d3e466737cfe12bc0194283a87419ca1427fda41953009357b778cde25cccf90e550408a4a5d9b2c8d626b642beece6ad40a78ad84ccfa0df029444a230b69bc69a3a3456c0197859de2da4cd5c9 +MD = f6430298cd0e80d919f22cf1094988241f84b8753838afead0156940 + +Len = 4472 +Msg = 012d3f35fe162ac6999ad84d9057fffb5cac15bc4e780917dd2530563fe682e8363c06032dbf8b8e831b993d2759a7fe65608e94ffbb3e81809cb02acd211c36fdd76b376a7def8c080a5286f6f1ccc953a399f55355ab8692049cf9a8b7e631fd055618dfd6be89d16eeb6e26a7d625cf7d1e2972d0b6eebc66db0cf7304aa0dfceafefb154604d864f4b3edf032eda81f7067683b4c980a5c957abe312ae4c4a3a5e040b7f3ea0ceb55c3d488e3ab010183725ae874b05f535f71e94e77cfee7524c9f13debe4a51a905b58acf636f25e99a7d1dd3a44656b3a3ac31361b7c5e1d5f08f1f94912b8322eeccc4e11de677017c8f51f3b086e49439ee288f38e56a38086ce5848c1ab59bf2b3794adc67fb7974c61f47a16e502c03cd1646cfe77ed9863d284211fd125a1baf3289def14c6005387d9c83764e300ce2352ee936a028de524043ef4d39ebae127924b21cfa33c238f568d3293f6ec9c03dae114d7eb4955ed60050858ccf3e8fc5b1d2458583104a2f332d019426cee9785ad4a65aeb2fb5421e02309b83516990a7dbf56edc940e8391dd99fcf690b07dabafdbd55b21e82ce360c8e6966b52627d2bc7168ea1e88afb715cca6c93c7c6271f487e730079eef6e8c8ee76f0bcd3b84e152d37ee5aade684b49ce76c91ea338f96a6d13ffd10cf26bb23b3961b4cdfbf7a1356cde784c9945bd4f56fa142778d20eee454c43ae2971a16cabfe03659ec505979c511783b0c9d132531687769a481c72ad361b5c7b650382ac2ce38bd7 +MD = 79e084af148e8073c5e86aab498eb1b7472e30d9093930bb6b819224 + +Len = 5264 +Msg = b418141ac57d6002e5d473c10797f137184f4be031fc935a12b78f21cc960c9ebdd07460c121a3a9a770f72ce2b0a6158104554a6226e6f0a209913257bd363d8294f18f3f83f0723fca81c378d76ff81b688f62c7f196aefc3d2db2d2574867ebabb331a669ed67952a3a0f32d6f4e9cdc522b0c9244c9c089b8d2ba42ce921e05fe1cd5e9c458f92d84a977674dcef7f6135bcd089afc1af6ad6243504c27549f6a4eccfe49ef21c1bd8e3ad78d0131986f10f45e66825d7f43326eda77a6a0eb923156108a1991c3d0c7c40ab775c847a7e308e041ed0697fcab834ddba0817f087d07cd2f58b7b840fe995d57ad2a68503a715ab7acb4e54c362726d2a584ce3f7a5880842d01f3909b216be807d68f1a8fd41a2231d6cbb47ac0f20716196d99c1ded733271f2a321602a2d3266b20497b979b3c2ceadfb7e1f73be382cdb1c9dbf13db6b75db0c807a38eb38946d08f56327a4ffe7f85e8f42060f26bf05f22314620895e4c1ba4e88aac1390f7f43ed83b23e816e342aa29d31dae424faa456a343c159c78ef6b213e774dde0d2fea4a28249f16e4ba8e1b95ae91963a4795df41ccf5f252908d4a257cfcd0e4d804547ff8df6ec2420721deb026e82e9bb618f56fb4e067a38ddbd6299b1a1d713f6fb91d239f2a7da7d514aee8b8bb3b089fd5a0bce7269cef5ec709930a25afddf45a0df6287bc1d2bdee1751785e9a2fec58fc78972de1143b8e998f318bd872aad947d18b44b33a34b165ebb7973d7e76f5cf9240dc14af0a8355ea20be8f9fcbbd57403803c620e2053731e6e39986d832b674a4cfac22345bcb3e483c29b80f8cb8cccf377f394e6ff7ae96c222cb88a63daa13571be0515e75f618935b4dbebde8c1b15e52e5c24813cc37c18ddef0c6b1ad1d30f89bea21c29c224298e +MD = 662e1e83c3a4a506a649bfa6f6c6eedaf5b3b6fa05825d45c13ef2ee + +Len = 6056 +Msg = 51bcc9e9244e2fa1752c61e65aa5c592138447ef9287fdcb3b120bcfe825c50c308c14d7e9551bd7eb871a5c171192f29801aa3769f6d1e917d8a543c9c6138a7d50c0e394e7a867919106791ee27357502751f02be46af66981d53377401a20c17295b42feb207aefb3ece676feb0e9c15e06c3e1381119b6756447fb791ff782595bf3c148c9378e53954b274f91cf750f8f5792da0e7a881b1a265c5b6d364b6dda4753e8ecc7f5dbca4e3abb5d32f4a0b55646b1a94266ddbe79a2cd4b06a116da59ecb2d051acb1519ab62c5e39c47b406505a72a99d9221ae7d5b6008f0ebc22d0948ebffe3c3ff2d5a389da0d6f06f82ed8a3d8a66853f419fe00d5f819c77b555364fff62ceb77a809ba1ad57daba559c68efd929bd615b62592126a4b9fad90321cd960041fa6baf1a666ba74d10e8ed84edf84fa1445675054ff0c2aac8028389f95644d4249b4623706e4dedffc7415ccc6a50e754bd4892ee3074057bcc66ed37b2c8ebc263d6554417a423f37b385f0fc1d5e62f1a4d708088215062811daa1d3dd4ff406fe01e560a5295887f430a3c8137241fd8043cab4a62f228db286f1e4a21954b09e3ed3ab8c1a92b4df1fcb71afd37b380fd35c309b1814b3507aacf7a17243eec624046a589d55851b5951401b08796afa91a6c48858436294bdb85402e529861ebc61e5303a09c351e61e7d7c99a25be88591b7957516622556ff43eef76f414d0dd2643d7a163628cf1970fd0f5dd282b60353ecf9f77aad50680c8d327be7fc1f402ea6e4e5a6491b2960c3f11499702ce5deb26c4d74d1b0daf6061db640d2fb918c9401dcdb5bd23897f9c72e7659ef20a112547f163b803f4a8240881378a8afc62f57649c07fd2d5bc51a1332e5089ae4323bf72993c87e5128245a2a952e80249e70e6b3f5a2eff54f702a95bd7e3def3aa81c74808e7f502150924bd296eeed0ad4c8e6cccc68adc054dd668959f009532456c1abdc2a92944c9a3fd7e7e06b9a0974fe34807fca404b936ff0a19a7ba5360dd6bcb9675eaaa1d8ce4b293de4779950c3d7c8 +MD = d2323cac073625fd6dd5d937cfa2d8bd01f75cb5afb15b7757dd8ac4 + +Len = 6848 +Msg = 52f5a110dddc9f44f8a534eef9df0b22785706470cd4246c5604a8e041b778fc874bc3447867e6aff7ed9142c52925e3024f616df0243e00fbfb179bf6e30deca81faa6687d6c595c30ca5ae86d1696b7bb8a6158d8b53e2f13de2826620b0f5bb589f9f9290019e65ecb95bc63e9c5feb7c1e6969722abd40b451be18d727bfcae0ea1722fd6573e47314710cd8896a5a820e8e0e3f8c37f146ac77946e3bf3dc9ed3f5be85b8bc488b0017e107f732d1b2c1af045c41f80add3ad4634fb439fa7aa262ef90c120991bc375cc33ad5f57f47ef2d12f11a9966044fe0ce05a382b5c9e853c864948e00aa6b455c4749af5308c7fff22c4f29ab7121d178bf599772c10872dcf18dc2542f1fc0422148bb24e347f169b217a20caec580db74c03e6d2408f4ad3f6836eaaec7462b555d99636be1a9c04f1ea2f811ad775cb281f813776c61cfbabe5c52adf45f6e6ff2ca9d172771bc4fce9d0c4e3c3d73151954f41fa532aadfeab31aa1196481bd92ef40597bf1a430a200a7b9144bb508f0c58d9135ffc52b97dbb12cb90e1bdac857ebb771922e9e337e58e6a81aa90aa2da5e80b121b53a202694a555b483540d94fdc58aeba1e4ed569e5b7a32c59699f3d5428930e1682e3453bf71e05ea5dd3704e83a66a4a15a29f68bfd1c713950a2907b30b5d0520c857cbf902a143cb1ae8fb4028bad5fe488e00cc340526f6186fe7f3a191874657a6e3a22ea3aa5157bfc9d75c3327d26c3e9324f46dfb546f19de327e3103ba3b3a6c3bca9386b932fea28f6b5ca858b9b80a103887f877b72ed3b6c9c5e3451a1b4c0c00fa3ec952ac6db17dbdc15ad4034ed828dc862799b7adc9abd68eaf9d526d5df65f3c4a60d11285b9dfd89e682746c4edf30e2bbcbb56b14ceb6cc06be5b576d44ae70303767853484957ee1b2dd91caf54f64cca42b5b6d38ce5402ddf0e9ec343a7bee4a189635283a410951cf1279588a7526855b222694161f68a455f1febd3e441ab5d2cfcfe1629cc7ffc752ec8168a0540fa353b359348ab2b21903f73810655ffaf496874894cec81d64c797086062cfa3b264b60090227b77a884783d675c288a1c9eddd64773642b16050b36182913e206d98112cf732d759317f45599a50ef3a92d4613011746b9598fbbc2e68fab2b0f36b7182909433c5722edf92dbc7dc828d652774826ca3 +MD = bff3139ac7bf14524d89645284c3541679832b6d4858b3c47ebff434 + +Len = 7640 +Msg = e563453d6ad52e08bb112f1e6b6c208ca47815a1c91d27a25aec78bf18af71466a454e1700addd58b6608269bbe47f1af29e721c98e81fb6286370b97b8ebab63498426e5b73008a482aa38dc374d5066989bf0a5234d0e1f02aba003a9abe370a052a2cc450200839189870cb45a8b7d1e204523d2cc18c7ce85e7b9dfa0432b6340d38836cc43951d16bfc1a7f8395f25047dca1f57a1d92466211ecd7150dfeccf37ae0ee748557fe2417fa49eb08937c9290c8ba83fefbecd0ac6e587732ab76e5da23feb8541546c9abb1cb6a787e0dec56f9a165957f81af336ca6b40785d9e94093c6190e5152649f882e874d79ac5e167bd2a74ce5ae088d2ee854f6539e0a94796b1e1bd4c9fcdbc79acbef4d01eeb89776d18af71ae2a4fc47dd66df6c4dbe1d1850e466549a47b636bcc7c2b3a62495b56bb67b6d455f1eebd9bfefecbca6c7f335cfce9b45cb9d2be43b9f6b8e42bdb6fe3a3a513aa6dbfbcf684cc55e35bf245745d645054fc3a0cbb4aed0adfb56a2117dfc6cc7617da048cbbea03b514cd43eaf44fbe2bb71bef79bb58b0b35aaa02de78866f7784a01cb4f0c255ce3b82b7073e164e5f7efadf2567d43b0d9ffd9d9e0a8e8cfd48b47e05c00fbc8d4495077fb752915eb8594444fcea1a5d09e759dd0229a595b87990f5a60cb870a486cdbadc8f17b807b9b73ec6f4df100cf9b011fbf239cf68820e1b1f53ca26ffda622f3a1651d9c18ec09972aee9c53da738e35472ca08ed403ddca87f720eaaf27d634ca2c0528a5ac8eb7c52cafb00626cb7b825c6e09b46b8c0bdea30962a7167ed709ef3b0d6a0688b309b131fe9cdc4157385c0d51708074ddc1e966c12e9ca3462756c531af2081f5be222a27e4bc763230d3854c50691fa9f9713eee8ae1cce8ec08ad7ebc2200e4ac2aa21226eff475336adfe49c4f15d54fe299d1030c81251faefbdbd8358ee89a6fa2a7aa9d438609c922009b59dccb88e57f52e3464b658aefb52f4d81b269529931ceb7ece9cf7a97568796b0fef16f21f95970b6b010f374e564612df4cf9a51586f970770b64e7c8363d57b03b1cb3f0ecef4853a8e23e592615d61dc833b3f1e72901460a54c22b27ba0e3717263e6c799b5da7148e2e9c50e8947f3ebfd0a8bbfeb3c3f033d2eebb73f10d29b00bf2aa2fcdedca4f72885532c04c070a75aa73ff0a69738e94b34fff929ad966a7142d210b8030b2c4bda188fc3cb7a03d97bd8e67befac181f973b18578bca69a5140f3b916ee647facc45fbaa9d72d72d0e7317e2d0c792521b53e2c1f39fc503aa42c391a69b11dc64c2b6e1bdbeecfe68f9c904c1f11e8dc8 +MD = 08a9d2171e9c2ff730050bff7fa4ef91e4b004bfa06a452a13d6e087 + +Len = 8432 +Msg = e5949555fbcbc3903d660ca9543c79d9a4f0af7d227666bf65d21d73ff230c3f0de15bff0d639167f0a44fea70463edba4d746d3d254015284eb6fa9de05eb172e845d32c549b28806fa8987bc022f9ab1d9ce957c85e1539a61eb9dc01d694e700605b5cb870c3ba6f02246df77355df17daf8cc712f00acebafb194e716f2efaeeba52c62589c8f80f82f082ad366b8f4b51805c0214be498006e3300ce6fdf5c4e3cf5e29107625de124d4cad1b0db1cb1d39e25d37b9323a74c40df3b4048811eaf53c9d888f55e63824e67ecd8b8086797e022b4041b271ac848d30c38bdc5b368c0888db59afad5d3ef728332d2303ce186475179ff1ac18eb59c9f9da182d2f5c69f3f01d5cbdea6428b4343bc2ca85d0af43a41b16731fc119c94038650c3d2c08e5af22849e455c2129bafc8764046c8b9bcffc4a4e29cd74357fefeb82c8c68d6600b24dd6d8ee898facb99858b5b4a287808cb4c69ed813179e45d11638f09f7ecb13e2ef0ae409eff1ba1d2eff72990e9f117d62e7aa9e7684834051f573e636f88e69714205485073473f6f496c1b3814d4ccab6a0bbc5b1bf05fb967170c956f6b0be2ea18efba19a825a2fd6bce0ec71dca2890c315cd4ad657d8f7a3b6a419f2efcc69e6a535cb24f94f82375a97a0349e61c19952d4f97b4f360be18e6adc6b3eb6273713ca7104e0fe409868dc886072de66571b78102870590d973cefa11d1f298cd2e080f49104389f56a0e365ea6b28e5c317c27825e2cb638e683b5151bbac0081b5603a108d840738a9b6211ab3c6a8a6efb917bacc14778eb957d24f39c7eb0a3a702ccca36be0082c5da238724015c74b66d62f56baaf5fd74a0e5fc202b53616bab20c6c74928cd0ded28ccf1f96f0d1cf9dcbaa4775c86b1cebc97ee6c6cdf246b5171327858d3e43975ef3e992e72cfe55d8ed4330921dd553d494fa8697751a1b36be0c21d21d94dbf50629717502fbe49c4a344785947e2dc92dc65e5c4840ceb196accf2516d7859a2f649a62fccc3460e7a42469791f61f070d3b4e312c0b4d0c28ef54cd1167d9596247776c17b2c6bec1a2e0673bed69186a8f1f57ca0b7db6a3afd10f558ab2e64f06f79fa10b307821fcd242b6576f496ce7e5a2eeabe19b8394d392aa6f7adc151ea324e91b37ad13a698a481b2861c9cbc1dacfa6b0d3d2124f8f1a074959d4ce506a6608130d00f36a0173e9d41f4729243c07da7751e04d69da6b83897bc6ef0ae9e97cbb0837d2395154d56277376f0e4a8090fadb0b7305e1c5229f5bbe3c7e7780f692b3a0603c4292eabbb1c126e7cadfcf21b97a0b8a6dd1ed7341e53e15dcd37d82556024dc9bd62dc5150fd51685cfa0d432579d604636ebed75637c37df89197338a2a68126c7a869ea46040543f609fb8fc7b1ef349d24f63e5f7e4d4a4ad24ba28c6f94a90e62907a913c1bccfc157e19f4d09effaea174e601cdbde3c0b1 +MD = 4e5132de5ad5300a472df3132e85ebaa94dd7dd0d910d390900adaff + +Len = 9224 +Msg = c0b461ad07ae4ab2f42e33f85e7fceba9d6c4db29c0019f13090c70ea8fc4882a6315f532df258f0fad9f85c1898b08faf85151a1d5695094728620d31c7b3dbcd292ccf113b9ad54ce1e489ba373f9d561ea07beff4772c7ea29a79b7dc7f50dea4af69dc107728924ee1c66de5e3ac3b3dd51f3d6228227d05569861c415aa81abd068b6fa57b37328d65a5929048305ed9c4d2d2911b3eb597eb45806dbb05d447716c680a23c9878aa8ea58b0aeb5d33dd4ce7d099a771a7f913c42a3b2c1b7a8cb9352ac18ca94647aa7a935daceb19806594df27c5b6f6b1fdccb89ce46252f79a2a801a6b4d9894f6ffca658e56a66ee05cde25d6634e8dbc983966a2dbd6a001ce0b16a12c7879b95db78a5947e28d056656faa21fb775975135002c2e0d703549521df5efedde3dbbe335d465d6c61bdbcf0ef1933a51d51f32d44a02ff4d80c2dd98303effabc842d4ccc85989026ce2cfc98b66de09bf29ba49c6ffb520286135ed1ac0b7c8a31914b9fdca03273ea4e0933841ac869d9854c767ce36d27650e1867b1e1c1e166a2b623b614d1eda4989d4bfccaaaeb79389b6f4178a49b2b469c91b003793685a9f314ac66ed088f853f4e9aee26a5443df7f3681ba6f24b85620c20c0e10e313fa8cf1a06e2490d9c45b7e905ca3bdd0e088f5b5cd2b14812ff237edac7ecdbdc3ddf99756013915667146191f3f3b61143af85bcb64c93a7ca7434916c36f7f838b2b542d51ccd4c19f08f23328141e02fd091abd048c09c6a7aec956c91182c1fe4d7ffbfb913d5b4b8ec2a0449030323aee9aaaf2a516935940147276fbee059e27c0c9e7d079bedf9e326e7df9bf2c5770849a165c8a6e27c0d375b474ead8d383bd9efdd1af72c101eaa6b995f279be57809558f88ddc78f8ad646ac59ec00527218225db08fd5b7f9150e2aef2a0d56b35a4a0c34667b5ae4b49803733479cdc927d4738ace913dfcf72df8ae72906744cced603de9644ab542bdd10d1f5006ab8984b2ec2be53eb4e169871f89db8396c1ce2017df18eb771136b989f5199993dda190673028269b343f5ad4d8252833e94ac054901fb994a081119c6e3d031c64c9908e63f0722a902de850f633e1a6a411d576d4df41b8612b7d96e330bf9fef4b47b44fc4cded65a3b4066c5e3c697281b3e0f5edf03cd394521bdcab3ba8adc50a9b4c2b864e253f4277932a94f6d538f0458ba251ac986a439de2f313c150c56d85f18b37e76f5f1827131f87c96c962ef6feb2f282000ba69f7eaeb47458aaf516c86a5f23a491b99754b3816b7927a487c7964f57ab070f931844ba3c260415c0494f689d55658b3ae06d1e57bb7c156a9ea2b48809caf30b384b8173596f6404fcb0f0bf024911944ed2cb1873f1e631cc8eeebd9ce5d58a6729a6d4632b54774b2564032bcaf145e85af42863278b5fd9a14a42e4e63b731d7586b9c3e65b79cd234f0442598ea2458c3601e98b99575e9053c2722aa957d395cdae0c1f0d9eeb112e2cd6736e3bfedd1d2f77ac84bac3c287b6b54193cb1230d81b9c43df593d956df768b6f4957cc3f61badf8d1fc91be728a3ec97f3f61ad32ad04e3453b2d26aafe7982d62137e76d50f +MD = 86b34d3d4bde0f05f9d5c409c0ff134dbe71d2c41640e081a9d3462a + +Len = 10016 +Msg = 7b3cc6f18a27047f4cdc35404e44eb8e51b1855d4bcd54ccafd1fcfaeef71d1b3e3133cb9a1bbba10a2e98082437b44ad308eaee576e24448d63c03e71843981e1c503bca463b639aa1a6fb2959973657933166ae0d7dc451242ddb893736edbec5ffd6eaee73d6db50784e5aa507107cb98d17aeff0c3f6c4d61b0f5cac054ee869eb86c38f9865b25d9d4a6a45f35652a0e3c68ba123802e8742ebd41745045c4a93afe8430e4a29838388dd60447d95b313f5bcd2420ad5be19f6049d7825d06abd8f27ebe844a2e3fe480b8aaba21d3a2ab08a6b6abd43e169d5f324e4d8cc3133ce876f6f7aa6e4d532fda96fee709bf19efe54e1c1ff5afa33a995d346d907bc1511b7e815bceed2edbaa6d98818402d681f75ef3d918f94b62fd98b977e541f0ccbab9e3c6d69bb224a6a31989d8fa9b5f6b6de5982eaff068cd655f24480255abf34d81840bd5978b6dcbf4885f22c2e8900f43f58d102ccc876787fb2f396a7f538ddd1bd53749805e3cabe5ad07d7be2397b149eae67b0eca03e6850153a9d73a0f68e6c91d4293f699c22a3916543094bb903d9e8f459ff3cedd2a64fd8e243556b77d6e040d46d557b9de99cac2e041cf73193e772700931cee73d073a1e6d3e84b682a98141958fb057b35b1ae6dd967cc95313a89c136929cf9ca626faf7428970f8525f17c2fe8277893576109ca092f1a2d4608623cb46b24b95651deb4bc1d0c145a2fff98c3b25f3928a5747217fd1079260d6443f6cb7d33bbf31504075fb64e812a04420228b7ada1c60e8038c930ab571337bade406bbfffbdb2f08ed1c69a577a3aaa27ecea576f5d6862d015c33a55b45d2fdf7c88b4be3c58f8d715959e398af34fb9819fdccdd5f2a8726570bcae6b55017ea25cc863d9778b649dabb093e6de811b89209459ca3dbf942a9198dda2bfde408440517d2f8f36bbcc817813184d0cd25615149f94ca16b9f7de554fe4ee24a984ebe686a910694134bf6b2399df41729af5d41bdff84c583f9f8881bc70632e16a7fe0cd0abc1a978ade041e605ad80aa4b693b0668def3745d992f93d72852cc1d1e7c20a1ae38dae5adfa7740cf61167e3a99a29c3d1038a10d860592c29c17b3be512392ad840deefab9e82125b86216cea43f02f542ef026c418c33e08e8bf46428541f3e1f74327d0c93172edb1f9dabd7362d75e029ea2bde822af09e9b57867e3c77de7f90589b6f02a3696d918b38cf127c5d8c5bd0c2a9a1f88130b865cbaf476d1d08f4b9dc6dd15663d48a582be86e801abc074ed75f461d010985a77a480f3f686013dec66579908ca44c9ccbbfa4d91bd3beccc05bf918fe7d658538e4ee9f4ef9705fdff255e262416ac1bea15fd7ff87e4c3142c256ce800ea977de27fed4f599c858fa100dc7350675f6b59ea1d343d0bda494c75994c387746bfed3da9d7f4eb186bde04ef4e45b4de6835fe093857b67ae639441e9988be2b8541a265774ffe50eb25dc8b4195f5b72bd1e63c9a8c571d617f3b7d5e7601be54ac48a0abef48f78404e240fbc58c822c9a4d17c93f704a518a96361984f467a4698adbf4475d54dce7d090db68fbb7e10b9d3b52e5847a2cf81ec9493a08cffb25f387eeecadf14c6b020b7ed4c5d0ffa24117b61326355a242fb77c09b14fdf5e1d24da43ad6558fb011144ad7d55cf0af32d614cb7f46fab33710078807fc77e624364e0ee2999145832cb5774ced5820dfce2f6dc4fe409e496951ae8c82a036d6 +MD = 197136a53a6bdd29e64182d93435be4427f06ba6a14675e3cf886b57 + +Len = 10808 +Msg = 561fc7f9570f612df1d6868ea2922f40c6b55171a5fe05ecb0a8e7eb08e1bb2d407d574964ecbd423a69875bc775882d1584b0f634f630347f48df73208cdc63d716752df7794807b1b2a80794a2433455c201e3cc122f414052dc2ce4758347a153eb4d169e4ca5de17b3371101a77f0dd60ddf763a493a7b2da6be5b84f801289a8050cc430f4449016e95457bfe33c52a9c933956c747b94105d28ea282baf454fbdf1e50da0a7bd9a3c938f68e7b062576a71d4ef19280f6c11083b56b9a8bea25a116adf522fb05187bf25ba17d562f62c22a0a0f405bb4a11f44a6f9c877c2c63fbb42a8b251ef96527c937d6140b0298c6972697ccfe36ea8d95e756d4046a66015f73be306fde4f6dd856a50491093afe16f476c66ebf05248c427b06cdd8cad2db5f5dca199cc101d18b272fbb868d09ae7f038a734efc69bbf56ba85ee41cd0a6220c6aa2a144845369ceedd0e709a9dc4ad091a2633abda394bb213e38e69b4e802c8a91885455bc66fec777b73b2f1ecc607482a83aa0b194fc19c233929342de30b27cae7b06aaf7496526838c39e498359b8a6a96b3847a80faa160ab4911b0db6acaa023077dbf312f53b8873adc12b28f2046b9568aa9ec3c424cbb3d399c7f2be1f9d6e8c313388e85e2b6a253e089b7faa92d0a42c7b0673b542cd038e58e7e7918211b0997e21b437e9510ea760dbe602e6c6f3b485ff3d3138ab28e409bcae6877c2ecfb1a04e0308ad071e47c0faf722e1c5d2b06d7ad0076f54a82229a9b0d4529473f505bf4afd58e55dca4606364347dea7744b5488ac1527150eba837e6b4edc94e684b791e9334c27920f6893fbe8fa38188c29838e46aa636ab0f095c8bb77a0eaafef6e48c69c0a237f8a96b95fa8f3119252470a5e6f01cacf69ad8942e63685e9cf36988d6583f328e4c508167b6704107749bce6e58ea348670c095fb8b44cb4cf8154f23913959e2f956497e21244690112225a9e5888ce6157d57c5fa8b3a378e50a8f77476f41938e5b7e6d73671e7826b73409fdefc401178a235b923f3853c825dfa07df4b5e91659148e08f0a354fe07fda8ed5cbb9ea183df3cff63e5d8b1334d5545ca6d78d3ea04b451559a101e81320bb53437b2ac4f2a644eb63e7026bf63063d64cacb3d8ac980db2a5541feaf5ba2d41aaae58e687f621e9a94d29f26bb23a3386068b9b7dd6404d38763150ee4fec884979fde5c58d6dda5ab488115a04e35d9c0d9ef0daaee7ce582ebf81c687010e6805a029741030a5bc46a82e8cce663ad6e8733d8cc8091c4ea452e5450c73bd4f7ac91a5c2a7232182b10b3cab7c9b47bc093eb5ccbae21620171e433834a7c45ff012044813c69b58b4806da6716b2d5bc84630f60dec4db6da5e657978f3293bccea3f6bd9532dd8dd9918487551b2a05d00c702ea2ed030f75537aee49c982dabb0b38878675d6594aba92bf8cd9c3c2fe4d46de0184201069936430802858814dc0d387161ae91823ebcab6c5d3e81c9790581704727b97090edd063c375dd80e2a8f644d095ef2ed8bf61507f1e13b223c6f82b29d5ccdde2dad1886dedb0885b133c6332a7d0e2e02dc835b1bf54627b953c613ee0ada6f569b0d650518383abe8957d1658d9571b745a9c7396d652f6ecc8c2f4dcfe544f2718de2945d91b6b757bc2ea3d8ae3b14f82e563391c2c1c5a27c0fa3f116e66af5420473f23b800666a052caa4821680bfbc0df1a98265259c3dbad6b996dc24f0d1d38b1f5d20117ea946c43a39896360f8f65cfdd0a3f6847838d06f8dae8a29e557c22c201f42667f1177e2fa1d26a48c185ad5d204a120d492775b23e5036a24990160ab0400e8cbbbcde4ed582f53207bd478b00f8c39facfb5c57e08f67936a03105 +MD = d1c82cd0224a5a141643726388c004461dd8b3aa540d4779ab7f0321 + +Len = 11600 +Msg = 9fb6b9c886fd33af0fe62ceb277b147bdf5ba18dbfbbc49f5cabdbe42c9a28e99a1d827856ec4abdef2da1a7a3f6d891760d282281f2a4718d1f6b6de08e227d577ca263b56ded663b7067b079a443f563fb3b55a73e84843e51012841b9b782ff5b81514c8604f31c34e6ce508d3beecfad40efd9a74c1e98ca03dbf823cd42b942870ac34178acb90386c8d0baa9c5e2aca1b9be36e488c311db4fadd44d03aeba1c55c1a62fd93b64af68a23276c3c37fc478fff2340ae6aeef4c07d5200e054aa8fbeebc12c2c9e0c9746efd882d9bae13f743e425eb292aa99aae2d2cabe77b93c5f38b09af8cfe3cb5db24c94e91c2f4fd33129d75b50c70004be45b217cd44578781bfde7ab4670f392ae206dce42d151778685eeb2dcab47860394baebdd26df2475d4b34f40cef63ba374d179b611bcb648c69f4823c4370690bebc5d1e9fc1a0a0785ba075bc857d0cafc3bba61c06985e46d09d6722987496c370f92016e593a4cf27c56ca36a00f0b88bbc9b5af7c7d2efc9dc332d32771a8a1ee86af414a68ac35ee7adec6b6d577771a31d3356e8aca8d12b0c4dcdb826fb0e5184a21681593b4a2dc1fd516c49d4bd99b20feda6f25831b27cea30dec1fe875df786b3cb191e31c02f40e3a4cfb7b6c5e45682a6aee9329b0a6c2492f47bd3344a0ab32dd2565cc77f1bebbef008a5503a70de93e7421a0b3f3b717cc65a38fd0595dd4e8dca136b3af82f61b5afd2613cc5c913a64b312ca1bfdf433f83ffe1b18efad752629ed4e73e79362494852173bd0bcef2ecc126ba61359067df6f07d55fd26f270644290e558fe548a006b766c16b6ed30d102112873d0a4754d297f96f2dbf169e4e9337a5391526b99c4c9e37b298519667442f9bbd5ae6cb6ebba526d36e26120439eb96416ec8c89108a189a8f6756f0eb79b037e274c2d8d9962ec8c255f4aae44b1906e9a35b62b12f91d153046814da3de29481a82607559b7291f8cca2f94db12fb873e7569b3932d5dc1eeccb26c307e73e3db8f4e6e242d45554a6ea7fe27953f550591cb70b2c6b074d710ebb285054b16117bddc2224ba8f608549b334fc2c4a09490c3ac984b7df593191569cbfb18aa644ff7b77a99bbca6d82f47c7c21f22f967a38ad6c442e0dcbf016d729e641687e128397559fe49822029821d63b32ccb15714bd573a2a84279bd844c850301504cc69a8dae68c2acedc716a8497ea3d8d303e2281b4d9224e2441facfc04c7ca185913332f51c461a16669eafbd844bd30c9e24113aa3aee9923b4067bffd64fb46e37f8454fab5aeba5e077e3666be2bf41c0d3054f0f29feead5db8d4ab94ba1647d6f98c903e31cf43eb1a89fa5e3cefa023058b28b4193f7e9ae987bed587fea57eb92445ab4c5efc93aa3ea6f3af0512b0b966b3bdfe8d983f23609eef0a05e5c0eba480c3a66e714757ded4442b3e5afa736ef9d5f7e1e2948de8b4aaea33efe4b794ab4de8078a4f49f0eb1a59a3604a5c2963c3ac4244e050a666cecf90ab32467d2d12b9312ff2a7fc533de13b0de79c215751c4b8a66d93221d22632501f2c0e76edac2f54879998a73756a0f471b5ade3e45e84bf0817fe5426f4bf9da6b4d58d66caa5abd2c4923b58a9c25f72cbee68168bf040a653c763b7d32141ce6135acd921a697653dc4e804321870663f1c38682f2eadd61f15d7214be7fb1ab3d74bb12ba295b367d943d699e3d5a081bfdb75b28054fbcc6234dfc97417f02f12f08b531a2551d527c52c4be4ddd63631a7bba0a5e49c0e44f36fc6662703357111c4328dc4a4f838e281c26c175bbf2a439693ffcb4b3736994ded3eb6b8599a45f8446e024153952273981a00c5af0235b2e70e876de9afacf6885e35742dc703a4034b5c9b79c51b7e375f38986841d48d24528798982894f6325521eb04bfc133e9963237dd31241e1aac1d488d61c681d65c6a3fc539e7b965a41a7170bd053471ef318ae071d2bfcca12d5a80fa723d679c9de7e34c1bdcbcdb6dac1477463236b6c92945ffb +MD = f97cf08fe663a2506c5c8ff6284bdd9edb71181e9271d3fe19d4d205 + +Len = 12392 +Msg = 9a56a80c07149fd9d166e0b59a31486032d93ef168c02e75200a39d9a6a42a0a4284ac5a0d32bb26028759b558b4826410876100caeac474dcadcea4a585eb981f5409ddb4aa0628538c643dc275440f369b922921737d4c4b772a5a2427a972594e285da5866629eafe6b13807b77abcc9d383215643f4794f2b5c3ca934ae117fa6fa287cec56fef65d50039cf017efc16bae450c4f4abe0a6d7a640d0b82b81e1477303880a438b470acc9577ccd1ec8d8207779b83c1561af9cc2ee6d998c08a1999c1be1dede52e723f3e7dbeebc48af76335f2d4d11fd681fe3ade9772fc7d4bdd6877e6b527a17521d9e8c116ad9581bf2fd0cf236262d9020fbfd9ff5c434705a0bc4ce376297b3911c1bc98cf3788e5103d5cfe484767a053918689096373d913943abefd4dec508b0f96ba51f7749b7e4163acf90c95a2af5c88562b6539236707958fe195302ef2da39c45b5eaeaa21e5cc739c39caceca29c6aee9d200a9441d469e4d89af9bec2b8cfe17f39cdaa3307f9c59566dee4dff28db6b312f3453df353367b2d15f210977afab3ea7f2a92b646e59ece8c8dfe79624da0a308c3b544a965797ff413b7ce2213fc737bcdedc6433c482a22529e8f8d05ee66a79a5846e0e46c09f0bdf8cb59afc17b5fee74d6531c2a103ccd20a36281e4b45c3397887e55cb61b83b742d86309b587816f8650b279d073878355397443c429319e377e61c000d9726ba534c48f29170d1c8d0efc14975a1ce4d2e7fcf4d67e8d7dc93ccb9b26439fa3bdaf04b6fccc6a966c8657b97e20549c8829075a0bac9d7d37a86b14b1bfd40693326da5b50d5f862b9f0d910e2df75480e8de9cea1b2a4788a9885428b7d73c2ea64585dc44b594d04365c3ceeacdb3c00acae4fb34fb82c4296b82139271ee97f1d57df9d834676559a67747bd9d6252781157c75ddad7f40f5dc7fbb86ac4d4fd65b69531a4a8f1c819d7ff0f31083d1bfb1fd5ff8dee1f43a44b66918a65efb03d5837b7cdfe7d7a060880494f4e8adad264ad83dd6e4dac8835df85997aeff4a48a68d277121056b53552d1c0dc409cdc4dd84f9200863453adebfc5eaaddb0e474afea698cb2446d84fb114c59674b6303ddcd744bd3c24bdd145ea29ec0cc433f94676c136b2c771d056fba6e08ceadae44644af83b3fbaebe1132dfda02f0a139fb1484f44f61b29f855d4c22a0d0274967bdeaec791e6ffda83c77086c380175930c5e9448ba1d05a2a60fed5f0ac805a7cf6167ea118428816389f786fef74494caa8974d15139b55627c9115ff2f818ce5bd7685797db72354731811b9d51f86ec1d6dab1738d9041f1cce7421b0559d9d59a8d9badf32146becfa6afd3d7ecfcd07980134ef3745386ae5e8170cea3052c07f656a0b21bb36320f114d92eaf60a0196ee02b94e8f4ad187f04397c81ba27c5aa6eb93feae2ffcd6930f77dc900f95fabfe5298748c30b251b3be3678608f7db1cd40c3153d597d16ec75ecc046a3f33f570b26a083d523dc774625125f2cd614597d65252a3bd901319aa51e99657c32d29e66f541651428361a70d61fc679dafcb74ea1136b8831e5b0cd6a6008a38c565281fa2ea72c3eda83414c09250d0b9d38a5115fb233aef1fd8f2d05550f56cd719f38b265142549c7bdfd83103bb0244693fe76d882813eca11eeef1168981e41e735366573e56d2e0e70f651abcf782a40efc0a51cb1b35e7b3586075858310b827b2070f2872c025c2dcbae0473832cd36ca5e1aa463703f68b32fe85a0ee169892da4e39117089cebd68f0efa12c9375fd8d53d349b4ffaa765bbd97773dac5000cac7ef8e200d8da737df13635ba94d2be0c440c1119bbe80690d37e60613d24f5aa3bc0324d4c0739e4219c0f8b4847d06fc99b6361f5a31c4b60df331944706f1a94a7a642690aa07e2a8c1ecfd417c67c385310bd3a810d480c0a9a677d7aef6a23efac74d25d3d988696c1dccadae6be1ac3877fecda50233f90d4d04a9ced357438c3790a6767cfa03cb7469f09d7b1db7d665eaf478b4965f290e83e6eeef8dff379c363c1c58011fe6d91b31d1fd404e10badd431253729b04d23bb597b20f1a03dc880e4cd56465c3352b98d15b1218f05f20e2fa488f54a67f753f4f84a43df8e0ce458e5bed7c6c6ee14e25fb5bbe +MD = 05be5210d70c1d8de9c777a2d7c5a3957a639c53015c1020ec0151a6 + +Len = 13184 +Msg = cefd494f2fa82277de69b677e76c8f814808bc39a69f23ba3fc619d920a630ad98a2504fec3b0ade4c3028c606e98942fa152c204e938ac5638e297007ed6ec3eceab37f5800998f1f0b9f48cfabf4ef2ae98a7bd91d6c9d5e0f51fe4b5c71c8b11b9767dcc178913d424383a879798ec0caffd3af06724b1a8eba0a53bce2c4d17e2690de444eec901d3b01fa1cc029a301b3af381543d67d568b1c89d468bf335b8881c852c4a8ffe3b04a2e5d70c7bdd6cd97db14884671aeedbc546eacc2bffae5c200b382ce71dec9e4aa023171f590751303c9e8a3dddd08731c5055d45da264dcf02f2f66d054af59d8d3ad2e3379d5ac15fe0cf6a82c03c84a430cfef59d2d56fe8e7376038e89311f9a89065fd712e97a799b47bce30744440f79476f3169b89497f808f2d480f2e61d700162f357539a033e9c004a3b6d737c43b7b3a7408b19136323856ebc26972508282215ca70dd639dff5ca8c8ce3f521356aa47d955f5cb5fd0a4a36454997af982888593cbac635f77b847d5ec1158902d3a585da18f84921637bca10554e4ec177c8adbe96dc92c0cfc6d8b514f5763434c24f3f45109a4fd26019ac0302b89f0e76dca548a5eaec711631284631833a0c9f1c4d8a2213e8d59ba780d95167714af77879369ea8aafdd71910db360a94d9708f8d4ea9308cfb82f6274eb6f5f8bbeed3b2e74356bcd49de3075a9fa6d51a0b1b6719228a9ca2ca8817e9afce85efa1a0dad1106f7273df41942abad26b4ca33263500a8ca869b6cfcb20a86bb944d452699aa26d6c8a2f971ff23407c7fffd871aa9ddb120cefc4fc99a3d47f359eb5ad7aa65eb1b55e366331787c19b926e6bf58d1882a630ef8a9b9ceb0dd4ad4b3cbd66d7430f75bf314621229a26a27a637c60579b993e2502a9df1e07ddad987a8376730fa977f78af19590fc29aea60027c9f7468a55113a8ca762d06ed94796b24fc5cb89db40c5adfb5f51f52565c47020942dfa0458b4acac35f218bedd13d2694be110fe1f83d3b8ea4619955e12fe1a9abc58ca5fe3923423e75bdccd645c49720aef7ee8582b54ce53178cf38e2a0e976c27259b59c605991ab8a19d1ac866d48365cc2f84ed5577e37f6aaaa87c7306d805948f89c0672226afbbc0a99f47efe5247479ccc2417371a1bcf7d47dee556a4495c0f619ff4b75b179ec93597320caabf64b82129f5da82ef26f9496e72fad94a7c4112b3471925e6a556a7f6f239e5cc0193786c572d197b9768b6fe3e21c56590d7d8c8d3107170baf81899244cac760776f776a6fa84c60b10b517b19210a18119da68ff64e7bec6f9b009320ea6c65ca9c6ce4b076ed8683b6f4033176307354f411a35dc2ed7af9f96cd82477cc3e9740efcac1c7dba982f0b012c76669d95c13467dd41efc35f33f36d7ebed576961ff789330359738134b2e20478c06d89b7dcd55d5bd18bbcfcee728c3d5ae54cf1a8fc4783ab0b0d948c6c23e5197ffa7860ee1ef27d36b044b063168ab31af1334add4f631b8b2395c026f2851bd9ce4de93a88ce9acc225161c8836e871d6e2e04b5b56c50faaa817799d7206c85ef7e9f4004b6d156f96d272a3bb17ef4ac27ff0be066f3608c9ed84b3b7db48b4353a988f874cada1fde2d0fa61b41a9926962673819abc6b0350cc687659cf1b413309acdce2c637bec99022c747844073b5651254c2133fe8d3a9221a0cbc129085bffec8da0f6f5e194883583cbcbf5e403520fc9fdaf5ef08b3573f6eb038978533ebb79cd9d7503452b2911e04843ad90f15e56e642b8a42739e32fa1bdbeac3fdfa4595c5fe39cd57270e662c2d9de26b77abc84f5f4f23526db1297f9afec486a0ef6f44527f26be572caf7429fbfec2bccc280cffa22dd82c26875be4480966861193e552a4d300d978547cf7d970bd5ba3282d8b27c49d700f9e21565af50610488e199d2f74c7148defb715bb0aa3dadd3311905489eacfd8d8704fac29fdb610c86190837e69aeb9fbb302150f2ec0e6c3699d9cd078a20ec0c96eb01aa60df6cd5dcb554260eea8e2e15b7c00b6943c638611854aaf8d3dd18d020b49a77e67275eabf973557ab74fd2705481c3cb6a9e077a825af7e7e2a53bc822396a9dee40f4b10483bfd9818d06ff32f4deecddcd6e573883fa487996761f796c77c2f8b4a088eaf5f8617444df36abfc806f229c1b35fc582f357f3f9c76854547a422fcf272313ca7c92be1fbd503eb20c8c564ae756239ff256ffb4f7bea6662b7d9845b3b6bea466704fecd58ff53688032c188b3febbe2aec873df8dfd42516498d55b1 +MD = 12bfb13c57b24ec9088ed5f6fe67ea38010d00f6744cee29629061e4 + +Len = 13976 +Msg = 3d9446bd9e5c72f122b7ee181ac32e663f635cf3999355b2a0f8f5a2a2bb94486498d05c0c328dc33eaa3bbd866f5860f658354510f0fc81e611f2d67fb4fa2b7d075b3afdc0c289bfb18b9b879d3c67c24b52096dd841b83351b6f8d5821f10cf086dbf39ae182bebf6641ae4f5e464ed643ca979f52a3fd0e3c86e6ccd0be0a3c4905387a398910b9e51a2671e5740bdcd7a8bfcecc2fe05edb0a20c3ec78141634b5eb04749a366d4d79bd6c19de17bab9419be680edd1998f7fa7d7c5addf10c26487d43334a46be806dfa85bf316e2913b9860f18c5560b24e08630ccdbfbe7aa79b33f5e6cf184d3809b13c417e06c7ed51d89e79c026fbfbbf1022662a61d5e5a1de2d3f2b04f583d8112b47a179f5dd44c7f834c66eb50f384996f5c3cd6cb5182d599c5cb47980a732b97445ce8391ed999f5bbcaa860f0089eafb0033977c7a9c0b8cb8a931a503a06765cf76f981b8c7e44d375cd761944b8ee46446fec255b4939ee355c66789e4a58aa305d05332fd7787ab1831bd802903506469fb2d1601b231513c905e867a046164fda05ce884b9a9ac4f2d69408ce8bd853f24f3580dc7e286d037e0a5daf47889b0d22546183b01af7412fb61f19f9a4b1904db78335520e8b315945482063e85d1fe32d8026c5e29299aea40f198652a9a034c130cda8b1b57c1f00ef9aa21ede38d0c1addddedadd21dcc7a0773aca834b8aba504d87f8330c57a51bc60d12637e7278b25005ea200240879adb1df487b8d90aab5cf8cb4c08899b944babad371c50bb562641faa263634dc4ec38b8fd10a81809a302124a983e4a22d385d5a138f3f060089bf2ac6dcb7fe75392ff2c7a804e32c9adb573e6fc1a8d03a173e8fbe181999d19ba86470287cbb833af5d1fe813ed77019d10174e739c850970558ca4d4c98ec63a781b90cb38c124b2d82668cf045507b06856b9bd1901c5b23013c453b882a75bca0efbb5f6196ceee5b888eb3d0ac6d7c5c9c760ca1edb23c1bac7642d22c603c34acdabcc66134dccfdd1cd613f46fb6d98ffc4778555aa4fa73771f1162a1bacf78d17845122b6d41ccade389b9002a9ece951eade3a2e24029be1cd05db8ccd3cc460e481a010463efc8689c7abd6c1ed0e70ead0939986f47c1c8697e23c6e42f9eeb59f95456a8aed2e1e6a9f5dfdc2f5873e0367d2bea5618ae7754615d731b429be520a3c8829273cbd2d7581a5942700af20bec1133cd293b7470ffe50307e79c94305dde842321a2fb83428008a2a4105cfa14ecfe1579fbdb445de2067dd469c199110d2fe942e3bb2e43c57cd88b408b7166138be7916c265f19f90ff5bf8017db3bd8d85d7e2abc48ea4f284c8bf7f8128e298f8bf608e021b28e82080f7bd1775cc62fe829d4695394819d873cc34d4dcb935bab2e5e932c96170f1d3ab9b8ede2599911ec6d3ceed1014f11042ed593cce582ad80d9b9d05326f9bdc7d628bf6b17a6832c71b16b2e42af6278973b84f094870bc416becd6832f4523d3d9b5c6564ca84607e61691aca50f41098e981d534fb5e3e723c7453cf6183116cab555fd597ce3eefb759150cb66e52905a1af92b321d76989d558450d3c8daffb32ac8fe70a90e424dcbbb8e5209b54a27c0cb0bddb1f2d66bf1986bcd8bf0434d5d1f23f7ad55127f315cd3a68ebef2bd13c93b50c439d812c90e84a15507f3f46ce10a9f53a9dcd61aa7514645e6369474825e3dbcb1fa4c5c451011ac787e32cabcf6ca34830decf7f99b93c7b182487374c8e71401d9532bdaa2710ac83e72f6e19d2ab867322e49e227219ca76243911f200f52afe1d1a83dc051e88dd14f821d521357ccc61490ef68723d4e63004dffe7f900f2a04261fcee36de1fc322fcbeba26bb3a462a5d7ff408120ce1290a858546a790912fd986709244248097c75429d73b264eea10223e55c3797908674e8c7aaef030f47f691be6c3029608526c45a750172cde5954cbddb9faa738e4b961f79fa80c2ae41334b6d350700f5e658209a2938c7189b611127e26d824f364aa6fe21e8f4d88234f84ed84ab272bde63909b11ca3e2194a2967874a87723ceca262eca36d6dc17e0d38a25a3ca4b457ebeb21882bed19ef4dc417a8489e66645ccce319f51604f8d25219a06635d2917f6802e325dea238c56619ef8f7cbb9a1c658fb2547b558a8fc5c782faca207d3da7db955a60bd0dd874158622b443762a5477d75143bb1c8bb83469be0ea4036cd1340692197156d01694d7c9ed06e1cdc223eeb6163f960f54e6be7ca6680c550d959e95b1c6fbf3761d494ecf0dc14ed71c61499ee7e063c067e7fa3d747e418487c52ad1c4e48ab9384478045f00f5bae996d380bde3cf253f4e0179ce43765e91e31b2174f9dc0a6d300e3104840a9412f71b67c9859babf459580280413dc23c602e48dd23338f4576d9010537d58c20 +MD = d07a5cfa89951f608bac73886f5bd9f9c5bf4fe49e9b0ac7d307abfb + +Len = 14768 +Msg = d8aff08f7f75b638cdef556e35d970d41f0b4b2e8b938e19f80745fa841a2a34546c279e36a7173485c7cd0c4eb9578cb02883db8994a3954fa48ec33bbde70aadd3a222cc7fc38a6c52697a366a0c1a024203f188ce49a038c880d066453669aa8b6804872644a44a3933a0351317e4dd02d15ad16c07a27c1b24094dd9a0b9153d812db0c422e8e723336795dc01540910f7fcac946503e347815637a2ac62b490f6848e80e3c00bb970b59cee51d04d137dc1606fec2b35f19fa06ec7e2cc502dcef06b8311937da3f27494718fc273b4698f372423833ac387cd3871ca5fb0bb115b8df533c80688c18ac38c4491419ac55077db9371ba6540c7dec8ed849ee3c7ac3dfdd2c96e11e6e17268f7a5806d99eb69bec25e7c7fd274a7f3d2a1e04df9cbc3c375fd7de5685fe82d3066f7d7eb4855f23ab349b846bedd1b01203fa0af9f6770a4ccfaad4fee6f02773c707ec54f83a283d6e9b8a38cc66703678385ef12712ce89eaf10a3754d0f558fb10a2ee83af423312428f1c5ac005fe074a3c30b281ec7db62b76ddbcb7d51c784242ffbc410a42ac2b03953d50d9df1d9a33273d66fcbebdc49b50a3174f44caf74ce70671f8e2b8af7821d8ab746047c2c4430c1467c37e56f81e9c71bc486faa1152f6c49679b45a6d40b1226e18023e7022b31cc612545d1db60d49b4bde2f540c201bb5b9e2bb643705b781f6cd977b734c7029021ec316ca57a21c11ba1434ba2cbb8c0b68b4dab4f3bff10d53a091a07cc584e78b28e657b677c59d8373ea273996f5e694f8b052bd739daf7905d18fa1770599d23ceb88659cbe77a2121d5b30f219d1d04e8d1a4c1bae63a990e24aa4cfd69f5dc7ca674d5930277db9765ffa1820548480191286ff4bb24b076dd96e151c8192912efc54f543357e329c3a7d5031f71654fd4454669d23c5331942e69102c8db61bd4e63ba1e2a0c4439f4a3e17443ef93e1b89f9acb3e80dc8f8ff38aadfb9f011f6563eeea8e8eb6f296531512bf77056c754de1fe8be4ca77c87f4a48a24537fd493adacee76e517126753233f41671478347845e935ac478f37117f94537ccff03d2c6f3bf13dd5eaff081fe6835a01aea76ca12dd48943a1ab13ae86ddc88cc9911fa809de5226036ae4a9ca53a5b8cb2c1fd43f11700664426fb3fa19c320d16e1bd9e0a4ce720c596d535338f6845e40f63185830d1a47abaa1236adf94697f2959758db0f646639069f0989a8fee884a46ba99f9ce9bc35476be4f0d7489ded1142cae79157919844ff55ec59a2fa459ec503cdcc1f427dcc038d88e9b143ac037ecf50f0d61ee5ad06d0c774faf42249e03ca407056ae3bc8b98dcbd1b39ce009dcebdba5a7eafa32802b1778176993a3fbca8da56a6157d668f72add0e0b18d4251743a7f3154dbd55420fdb0e228e455fc42a26d84719316d9d1489cc8f50deee01b0d9ec7839bb15d9c6413d74fdca574081bb47686923f107f29b9630707160328b053b1aa772e779a4714b67c87b0dc7f92e5fcd30f21cbe2adc13f761d3a3313af18803802bf4a81135e103d7a0a6e0fa46c97d54e715492614eceb094cde8627667a3caa2e63f17553a75112814d14ecca2d80bf4a05304c0bc815512639bab82bb9cc0fc35dd938944458626528ea388332df576313fc0688507b21a7dd54570aeebb96320aeac2c06120ad965fea443981a106796834bb552c276219f2dc6bc9c11226c291ab7c9fa5b2dd5a1b9c79b3c2ceb3d62b60d2380321fac29fdb5c31d9d8a9bd1ba4ccf8b915d8fa84893fbb9c6f46c08509b5fa7d6fd3eb0dd8910adf150669cf5e1b95445188bdc138ff17b78ba6809eb6cb63431bd4db645b741c7ad1250fd660d23cef6fd3edfb311f90bc2abd5e9def7c3afd2de4dccbec6c2e5315eef6573257b66276a3d059fd09ee535472a1aa3c304953abed346a14e10a11e849687b5d14cb446edfb0042323f92312ad93ef264f56eb9fd62c6a5a3b765d531eab6a686f423e606fd3232bd779d56b567a9134412a7010870cf347e33bdf5d55084bdbd2e5f7533b82df9e8c351068569fbbef6f8d8807e71c2c623f213e0ed6c7463fa47a184f2a046003a9f67d10934a93dd3f46db8be0a43e33b8ef236e8930851b4dca485c26a3cde29884c46bf6c341881a1f12a459eb5142b76f3586568b2df7359d308317a54ec4c0a78c816751ee7869ded55a3b3a8b18a2671d5d261f695bc4bb77cbe3530d2f89277d5bcf3dc233924ccbb66cd9173ce2a082fbdf355fd062ebc63d73f52fae5bcb400014d0e443ff319dbfd5101b36e0e20d696b1537dd77f6c5dfafd3dfc69e5c7d78204f7d301655f37e5e27c08f03f466aeb0071a0b6ba51bbb7f344301baa3dbccd905b480417f73f9f0652dceb2a034d2985330e1a6be71d9cc6283e6186503032939b2bde779c83a71138b7b57ac1fde0a40a0e790096e3f7ca3c8fd1e6d9d25f7329e6e6f099849cb79011e59e1d1d9ed1793a59150bbf779403acf3582503b2a39a11c43f88c2ce4dfb8402007efcb2b2130a41259ff09a98100e3c56bc44bac96e34eca0d4beda68dd76814e624bdaba3a0 +MD = 4d6d3f7117c907aefb7bfaf2fc0f01960c4968e824fe0483ef66916d + +Len = 15560 +Msg = 943e365bf18e4a49e5b21c5e43022c6ca5820325ff1e69837a34d7677f532f801143ab6e614513279c9b349a084b8d934f214bdf1bf378b0e2286f43047b93bf13fd4061715902d6215c05e8d7b5cd5d51f9271ceaea60926df8b454270809064075de7b4b547e1d1bfd7990d8c7549253128026978b89f1c1ab90e41181fb1b40b26b0514beeec6338477d935098bfafc753c43485e5b958649ea39e96ed0c7bcbcd047f71dbc9710fbe60d1303d85cf52945bc26ec3f4565dba99cd858f0d25c9cf6891afb4f595b69b0729d3ea482e53681d958bc9bcb0568b75506c6c304c759c413a5df0fd3bbd7bc50f841583275a5dae10656d8ed10f8fbac9a40b125a6fb212cc15264cfd94cf2f14f945a354d7d371e5a435f742b945de9bc4e22fca08bf71e96dbb6135cd03a9cc8c0145314c67fd67a0a97270042c55396797e525e0f2d2f4b026d69ed6b7c988b4cec5373889c528e33e7d0370c1b334d482def8792aba8084ff1973426a02ec1c04cff11cc75dabf47b93578fa47d10c44979bc41959d1f74bab65d8088ea692a59b1d9799f2b534cd74206a133275f9f3241ebdae1ff13d7d019d821a2f4825814176acf8fb2d174d7f57b55fc2673cdf3d3f1958e551056d5c05d963695ba3dfa6d2f9f078888d4f44a202e6e0eefe9048c78120933a75a4256786eb2529334432f92589510fc05c2acbf9b17554678daf7f9c0c11f2b5a9c28930ba4cf8fe3a4db2d9cb6f0ad8fb999841c767df9e5ed82c132747c1ee049d3380d9c4112c485fc6bdbfb8c1fcb5f9d38330a0d8cc8b2d998d761df1483e1c2f1d4f77bce4f7d0fe786c157b5511b34266f50687189c148db3037cc9eadea944b1244b414ecd0820b3db6e820b972dae931d8333ab1af7cf2dd54a90fd6cab39e1602ae793546ff41512ac1c45cfd0deb1b0fe25ac8d3d28a2f4718fa8718ad7570cfbf7db146d44471bb5922b42049c69b75ea6447b4e60ba69d70e1474ade6bb30a6b94d946bd6f0fe732ce77732ae63388dfc9b6e923f1e3b665468fd7e2eb4d21275125ccf73b9c1cd319ef6c0dd463e726fd8ed718d767204abcd946476ebfc297351f403e34a6eaaeb7b4818f1bacef5492481531169179b596bc2c78808b5d2fa33e56dee4a0cf4a0a3f4a0b269f2fed0a6b0a094a03012a7690e0f2ab206f554e0b5775c62a492994182c2e8f8b1754e8705c0dec3c851ddf001a52591f57bc77fef88f4393d6c1e7b7be55a12144209ee051bb779e440432721ef404e8d4a9c3918077f78df6a76796670d15d214e4a043a19e76a8ec72137f9564591d34b1b35ba5ec6c69274eb64cbcd1581e27f58f02b23353fcdcebe470e43fa01d1668b9c5cf48ecc5f72c3643263ee275fbe7ddb609f6aa0aa3d6380ea1c29478e8436958731a2314d4c47a0249a24f79ff4ffed62f74e342bfc580a144a980b128b6249c27dc99e65eabf4128da7e98aa07274db891a9a45bf3e50c143610f4666558df9540cabbae34736ec78bc5b388e13d24ead743973f0b52ae734758aa91f8608088e26e2f3013aa508815c1ef42688999812fe4b6e12ae61ab8e43ad69b2ec15424cb7da3f36dae0ff3e13af5de8652d5040353a94839ea756b777c208dedc582f064bfbe002cc5d29055f86c6722e200fbba59177c21a6ea1467e72f6e1fb2337513fb295e3638c1e8dac2fde2237f41eebcbea986c8629e3c1c43ac46abd18e3941fb8b15754f0682d96250597372c066714a066d1866bc6afe583e1d796abcc657858d2ecf51c6e6b89e0cd3f903a6eb41c4d639f8f96a2775ed8efc71c5e4a4bb62d7b02e882c9de13fd9599d791b0394f6c3f24f65d0fae9cc43ea7b292f59d75a10a3793a5d2eba0d61f2471e4638d2a673a107f0186bc2bb06f07fe0c56f1234e00f98b08421adcf49a6df385011639d8e4e07e3670268837f156530cd6ed3baf1fd7232c7ff204f3c7d4d106016afa3bdff3786e84843ec556115626fdc84b2e874f1074e4f7d53e08079ee9fd01f80a8be7f20c0c4bbbd31dc77bdd5438ce5707dfc7942992ba4ddb64c1935c619fbf692c7fb1aff39c0ba8f748b242a531b2f1f7bcecb66920adc28acdb498006dd4f84f75d1c7f23bb9981f212871a411bcd62574f103c1a4c85dc827a03874fee5d9af78feecee37775bada9c249abeaff34e76443aa62b347fdcb73f8c625af6c5deafd9b974dfbcf743156f2332329d49ecc1f570292d88733031720c9991bd32580882a5f78151c7238ad3ad6a05ae764320a9db4f881108deda5baab55b0a4a0fe8d4d9e130008c622012eacb9faa235b7caaa39fa497e7f099428f3d1fa7b50b39157eb9538fee09c17301dc6859f73dbb3eefa1eae2b76d556ee3b9475a1c54e18ebb0854c7971f543d1a25c9839bf0c7aee7dec0b9215ef828cdb23aec27f3ca87b9559a702cacc0b95f2f28efb67c8642b5dd8fe5cdca69b875af60257defda479f288d5258b9ef2ff681ee66f1eae2417e26c02f62b99066043821ccc750fb1896099534c14cc8e607a484b0f441c2f56d42b95c8934557aa2d5e5abac1e1440c6811ae00f703328bb1e509566890da4a7b8e437e941a03b760f1488d5620c085617841ceb2a183b3979bcddefcbad975710a8872beb59f2a96d162ce924cdb86f543bb1fd845f68aa3c2f4f380e8916a3d36c13f63768e76278535f916a3e9838bfa767ec85f1f736f011b4e95a8968b3889aa4f3 +MD = a44335bfa12a61f8971109350e6ffc62c1237f3f662b7ec27b520370 + +Len = 16352 +Msg = aaf94b876975eaad2ad5223b24420b374cae59d2265cd604dba310708def4e8de708c907f897196341e6eee30ce700a90078491ef3e57195ffae8a2cd88bfdf35caec4516c48daa3fb4ef025647d6216019c6917f90192d559566fe7679d8cfa3372a42b6e9015b47f9792cbd40d18c776a22385e1b8210a12222769e12ce3e791dcd25ea678b2dff6483b9b039d0a048813de2f5212067d519b1a7aef41ea05a075b4b2bb079a6c88ea525f9a3820155f7501def51829763f47b0e239e3899b88c4b3ee5646b3a35c0441dd40e342412253f65a72d1733c04b05268661aa8f0715238dc1e3be6cb9b1e6fde9ea858d1fa32246b7046ca19c75e66d61eee2f4d82a5a942bcf01c2e6cc144295c8e4a0d0e9cf3d9977d1853b0d856f20b6806fae3476fe9d76d3b12f8732888219d003d8718cb6b90804333e9a68885d38f153fbdc0f39918b82cc067bf83c195de62a98c2f14ea03573401975066561e6c456438969c1926dbd880e02abd9d615859994667361f9708d405e55e562f95057cb07b53d133abde269a8b3e3ee42d14cb54dc4b99cff59d0a87f959c2d6df64a36caf7efcad4cc7fd5591826f5ea018a2237760a6c5c51dbdcefbc91114a591a3e1fba08450b3a047fa1a7eb6d2636ec44e3f30c3c8ae91d7231434abb18f9262548840d1e48871ebd14dbb7c0a1e1e1b1d5b42599f58003fce6b24f8754471ca107de64b317240d12253c02acc782e8dd7f41ed1136c72dd172a2060286d36c25c031b5afe1a17e135541526e119a804c6314d91ec92f0994576b14b91b1e7317f4265661528fd03517743da11aa9367303b5603f271805ba27a5d2179b98e01c2614fd73c43fb1fc0e4d1ac23d3f89e5e39c18eecb22d0b745baf4aa82d32196d895e153c13171dc8c44706e13bde9098541799a4fcfc9104442c2ee6b4dc61c8e11c88dd415be5b23f2e4f118b4d2726b4de8ee0f8f7d59a5b5e35fbf693c11a921098e675cf5fc67c0def7c6a4e4a4f80a1d4694e25c07ec8ccc8ae9c5f21adc3c2ae21567a744ba46c4eea81e7e15ce1e5d307a58e38f7b4fe4dc84e4869c79dbb30548d640a8bded3d4237822d595fe34f381a53b264e477d2e12b35781b148828848c2950acc53cbe9eef6070c4200159ca1f73373cca8d0d151749351b3eb9f1cc59c165d572adbf514a39d6fab0e11362d437e05b6007fa0503805c214ae9b5693c3eee9748c8c605e28ece61851af29ee3025c657761301d6a8b3ba1ebafd9d79e025986aa16592912dfc5ad0f077ddac672f9df633135eaa6ca72217374d58409bc4518390eef37859d6b11c14f1bb2f90a471da5e071e952be9e3484d14f1b09bd1fb0582afecda5581d544e5a6293e528d2c4c2077a95f8d7fe3f922d8cf91895780399e31e37ec805ac908a1d90a355f1b594a1ec67d03c730c72e1245aab0c5bc7670dfb412d5b6b20472cde592442d8f4fa08eec0afddcd45fab07dfac6cde7b8d7f6956fafb6ba18b3f272ea8ac14ad1c67e031cc61b9375dab76d17a973023bd08288d3cc80fa7b1a0560ad9c7950343f2ab5e3db9bcf865b207b191da7b5389cd95bd74c623333c58c30082413f105ae358b7db708885fc3103068ea110797812296e2f6036e27fcb06b65e836362c5bc60d522208c7e85ab1126cd8580040c886c25b930cb33f0799982bb28b25918e06c4cae44393096a2bab8eae25a81cb82c66aceb2408632d6e3fc248bac91d8f1c374ec463f4aa39a68334361f08119b3c0a3cc6f4777bb758e892726a27b6a531ef448b0df2b3104920c836ef2708b7e03673ec23076fed7e1c03fa4349451a6d721601eb960c373c0cb0773c0dea563e73b9255ac0271709627da7ef36b334f74a2aeea5e79ef6a8cf56c1afc39dbe7e48763841ab8c7d2043684013f6e63cf8feea1ae3ed4f95b5ef20dcf0500b37c93e12ee7fcf8467ec462c8e5a92c8799717bd4d4cb1085b8af6788fa6bc1a0b47dcf50fbd35f81c94f3315969114035fd1c0a4e883ab292506cc5a37910b4801faa8863a2e3d1e541d2df68eb7b35b651953be6409133802ed76ee11353c0e07a3031b1d7e3f50a1b6c9f8586d89146bc0bb7dd1cbc756d4dc1dd0e198d26717ff759c3033d4ed34948d776e2313b2b6605e6fbc3c55ea3d4b179f536c6ce7c5786695fcff7c387f4eef104a88d1bad760b3007deb3d869ec30aa5d1007a0482965c74ee31b3b7043e753f780f5191615a5fdcb148fca06bdc5d80d4f57841f1e1ddd57e6b0a0d45fba671711701dac6a5cb50d0e601bc36ef86bce9cbf62475e35124481bfd9fc6fef932c04060fb99eb7c096732eb5e82851cb689f4622091035cddc5b4fce309c0f41fd00bfd783d83f862eec027fbd125961a3fff4acad5ca578e61d6867b80ea1d853aea45d53417a709c21e361895597934764d1e87b6b0e7a2b6e128cdbec2dc0f6b6bc8a7001f2e4aab9d943961893ca1b78e6bebb65f83b73f75625e25e3b60aebf1044243f2f4b1e5dec0d2a84d66fe8e03a17b472e923855f3b1a158e54224371a674b523b70ec1b425a78ec1e7e87647d5d9afb86b9a2b4fca53bca1ff6d7c7688036cd614935b678bfa0af64e9f8d53c0eef46205082b6f0ab81fc2c5aa2273bed79180ce44b41d26ece54b94faf5ac023ccb9640d54e66033286172d3ffd134eda6c486b88937fff6669e9406375fba3ad7c7ca2695cddbda738c8bf95d5fb42f2445775c6c2341d51dcf8da41d7e8ac284e3eb52c1d7b41017efe031472d6a10963d5746807e58993879febfce11a24948b01018759e99626a0e182249c4a74060fe9eed52b3a4916b207fafc5c3a13db79f00de0d7cec400e698c32e1affc2d191bb6d75f6 +MD = d3b2c5168685d9419893d8bbad9c144bf4ad7b416cd5bd2c2d90a11b + +Len = 17144 +Msg = 098fff593ee4614b5cea6b1c5ec57f33602950074c6fa4d7b5e8599b0371a63ad147a4fd931d0d447c6c43789f0b944054ffbcf8dd94ab5f49ad898f9958f83322a599f432b9d134f61ecdff9b5dc33eb4cf7b2edcb00f119c75ef248f5f27d0c351e52463df358393a7109a9ce495954940969391ea565775e991402cb0bd7b7ef290776eb7c2991bb01432e8c791aedbfb140e436b0a989eb079ccb970429b1930a3d49a6affdf56e0e2adc82f40ef32a7fd863b5ab23bdd73afb17eca3c975db52522302075bb0ce081f5844428c115ed5ae5c2e0d7aafbda39d5c3e435d912261e4b7800aa960457f9f0642dd38d4d7532121e25004cc08c2122d0e6b4c8002e9636ba3328d907ee5388b013c9b9a3e68df59750b589f3326f7fecf942ccee7396cb3ee177eadd4d96a4af1d90afdce97376778a7fc95e7329d36145664da69d25f24b301d334e1bca2baa74b2d5c325ed7d04fae474c7f8590875f1a8b3ee554c932b4ba41a2200f707e93fb7951f4302f288c96ef2f7690605712590678f4312962458940920a6261fb4a72556b7eabbbd491ea5acb66d39b29d0ba7cf510e7fe37f80736711b25f5b53d4867f54c31ec690221008cbacf9f740c87454fb5e9b6384eacb9cbdcfa8a30ded617abe7536f6a4fc376f00cf4ebca3877f5e57dd6ffc7abf2310eca30bdf2c1b3faebda90833cfd5a24a1b7e40e90f6e51562b310297ab26042b66d68ff7f685a78319079e6657d5daffe560d866caa571a240025c1d5d48f555f2113cd3b45421619936ff78852366f8261e1d1b1c5567ac5ef98674d94c7ef65afc1b5cadaf35b007df334fa1e8ce9ba65f18f14fa6bcdb4cbd8786675b2776643e33782bbf6cd829a943d5f34b9b522ccccfceaabff796d4f767394e9d793dd97f8d1074ab4d41c73d36f0c2755484820d4c9c74c9a047bc4f2f77d839fbb380692f0dd19c6154ab42148a588e81986ec99741f6eb4055cd6ce6274b58364023a223558aba2e779c61e58afbbdaaf8b9a8b6a7784e5e28cff79431f021b04d88d271d2e72c3e136142b2d8f42a580b2b54b3b4411982288a97417c0fbdf34078a21f6a301b1991c38c825c8bfe12398b7295529b7534bdc6f5f6f2f0538783bbb93707acae45578ae85efe076161eaa3ad6568cc8afd4f4ab9bb7ada0cf27c19c1c090a40e4ccf7efd4da6b27acc8639aa2add1d7f6446df8a96fc1710be955a5fc3ed6062b6606674573cd272db751614ec9bd67df20a4d109161ed867235453d470628d309710cf484a8b07016200291b4893fab2d035cf4b38fa59697c3a40354c34489cf6c3626ddd2949d06edc4c9898fa0329f99d3de046f866ab4a93d59f20cfbab8fb8adb169a2c5213245266673954039d0357c758de9da27514ed8e52ac99762d2bd393f31018d232291ee0d7a8368e9473d1d6255e6e7f8f71a3f5203e25ed51fe3a1753bd532cb5f37e568a741606a8c1b7f4d644cf7032c753946863f992dfe92affd9108fd4270a1d31f01b870e327356adcc30550707bc78d69bac88f91f732297f3b8036b0dd3580da90cee07ca1f5a6ba79f73a6869780465a7668a2a932bd8a23f27253d2f5db3405d6cf75f80c2fa8d8e0cff1380f066df55ffd01f59e5840fa7e3120fed8036f96f7bfeb14f032ffe0b2ae69847987b82cd7caa99d2c9f56e7b9e44519f05cfaecfe13d9d93220db4f73b361f46d60af316c660c0843df266c13f0429ce5647078388fc48d6865c585a2638d20613dddd38c33abbf9aa459f83ae9abf01da65ab955683dd9f97e4913dd334d70eb8bae63c5d80b3b979b4c2c8d34e3cc0f9f3430c35198277bd6d08a72a7156e62b6ab6297b79cf4a100877999667c8931bb776f10c085fe560be64a013397817d6b5f607056e3836d90865fddf2f8a03a87bed4bc2969e71e8a04e3076d2642820624edee2a715053a7e35fc96ecab9708054f22410c64a3bddb6e603b8543a1703b65b7fc6c8f3d9d308e9ea3e752d8a41d457f70b2dc0447376b374a9a3d0b3006e4993a05ce6869e819ecee68a84ce28d776937cf2b1bef7ceebd8b5979edc78c728d84b9f90d066c7eed5fb7d57d2b1c8ce87eac7c701b719efbe70a20cf9d95b89ac2d239b5dc8464a9df1b00f3e8912d042d92f58c34df24f844f459391ae95ec8dc96b5e753fa732954de52347fb501c62dc7bef6a38e27bd8c604db4a64f0b1fbb4e962bd3955474a846f2ca5a50b13564930036cf465050a59624c7a99067a845410309c41caf92c19c083ddf2ae459bb40e3d51fcf47bb79de05fb8b741b6a63b9250a8e582b8c8927be13780a433b1a158e5afdf0b306ee8018d7b4c3cf6dfefc23b599117169e6313ad68cb975e26a592a4dd0733c37eec387e38c452abafc5326934d0e2931c200a40d820023569155de37ff1e8b5860f177a77cc2d5584706562a1319faed04dd2541c4a5f5a07951d39ff4ba48702b5012acea01784fc55dda0551f88ca49410e5f9b97092c70894300d160e1b88392980793fcbbaa860a0dba97074885e5ae10bbdc92ba3d328681e09cde4aaa771c3e996e4e8436afe1680a0d95596233d98bf155c9ccfcdc013c51c8102a0d5bb68748c3f20bc9d8908f271f3635dfc287c2b8ada8dbfbcb8de4ccd9a31a31aff5e49e2ba3bcd4ae8be58a4256686f000d674a3acc41ba8f811dca580395b7f25ee9120bc001d780380dbc1d925b808aeeec5e938098a9a67f49c2b9ce2720b166074cfac38552fc296a35176699c4b1a0c44e3e726b498efcfb5e754f48dc7b8fc1976f4ab1c770d47d7dc64fadac12c78191921e142ad77e94e61113657b9f40aa99dfb211b59ccdda0e80aa01972cd796d134f04dcdee88b90223c7175ebb3d14bcc2962fadce79e25ffd2230167e359685ad755293528fda3b13b6d9265db9a288ce635600946d38fa8234a3ba7575e3175239dd2b92087ae9678f2542d55ad67649a64f5e6d2c3056c65de6f3a12d1f1ec99a37e72b871d95a +MD = 9ed5ae504ccd18400fbb45cc91cc19c72fb530ccb323d1c945a94bcd + +Len = 17936 +Msg = 6821cbbdc2171d6b1060e4722cc4d583893334a4b164eae8f1bcd87d52716becccef709db77b2a9a8216a294a7a43f2bde4d966a922483919106791807c516f0ad86fb0c3e68da202b67d0a98f7ff62d651433c4f99154d79c505e289cba221273af13133f285587721a16b6cb9e21118550b0b9cef482417a602eb5f996b7db863060b8a201c256c1f91bc54349e960a5c8b851f995385893fe92c806a1fcd24fd18c054f3c49167fca88dddfc876a12f45f19562bc9ca250f43267ab251a7f345c3c022e20144e135604078762ef5c8a8f038cf1b1d6a91709b59dd068396a9e971ab628f74886e765384a23607c1a1e6e973f8fbb0ff55104c46f5db37f1cf64cce292307104762bfccae9b0a476153aa55b422246f0c67ae06e73a4e171ca2410063089a9217ec2b673bd7a875bc910ae4f593321d78bfcf240c4f8127f20c3f576dc0f6f681ed72b1fabf8231b04057ed0acb2e42c1c32fc5e68494d8279a0d7b4e3263650acd5c54f23ce0a1c7c85917f9b160056dda95927ec2ce5142b675150e452b073cf5b1f52b3409ed8891d80bcc2c0f8f066bca32dbef79bbcbc73dcdb6e395039ecb393fae91463e7b039c708b26840714e0974e05f5db3d4a352e4a4cf3e881b8b8bcd78239dfbc29876cef3c8608961da0c28e05ba3c0048671035db5c6dab13250168af161c8e19831230e934e164ab131399e228e62b4dc7ab3568086ca73678d1983e0e44ddd36154da9917579845a15418a42620e7dfbcc6f3fdde2c9da91bf40f360ba1d0e087fb955519b45b74b24bb2549b315c88ae2b16a1c6f7b6f57432769ff47990c75fcf0b24213ed4beaec110f97162b1cf05a0475da81319a1ed537582b11544104f97e10e183f2caefd7fda9b8ffb0f3c2aee2e386cc9f035ec1eb3e629bd1544c11dc21be4fd8ac9074ab742dd449d5883dd723afb61603adb5cd9d346b92bea1c2754546ec1179935ed4ff7438484aa7934bc6b3b23933721d58e51ef50ad8ac87e3fc09ed2faa5ed2e4bc1a905ebbb75bdb3d41557b1b426517b690ccbc3ad2dea2c675d7a5c7598d753a9f70dfb11dd3e007c7144e13952984822867297dab332c35291ff65929fae0eb615e5db361a804a6b38334c4f0d719c85438d4e99c220ab8823aa3c83687c25f0ebd5b5b2954b3aaa506c1a7dbfa61f982c641372c27a8d11fcc30ad05d083f5f6224ae0bb5667840a337724cd0fd7a65293f0cee1b0910f60292f602e51c050c601cf0cbe19bab3518dc7c43a83f55f4236561943595dd3e1f5e29a0677e1ffece03a37983b07b9296a262eaaf34574b001f3bec78e69bf13a71cb324df7343d9522ee9e026e925e07d349c94ea32974aab5c27f4dc3f3183b110340fe4fecd29bc1fac1c69d95a152b55b69eb557377076f1dd41af58dba0987f953e24ef1c4ca28ef6a37052f635f91c051f013dc5a01947574484510df8e1bd6f261bce81b099ef422bd6d06ad16aea009c3a30c277f6ef1e54078258fb114c2a6e3607ce03f6c316fc09fc2865f56221acecdace66843bab1695973d35abce4f6d003531a56dbcfdca8610cf722cf6e0b775b649da65cf75f2aafa3b27159656a906d15d13531f6eedd7c8c074762ad642813db562001d178ed415c35df346c8a8b666b0dc4b6cd2fc7b8e9beb65707ae48bfba18be7a708319d847638a9522df2ab6fdd7ebb47d26cedccb2457f6a36f3f25a8ec680efb08163c0b445bc3aff0d324723692712d5b5bb2dc421286aa32740e4ed806069a904b3551e03a083a45ef7a7233a1360657d400c11fd051437c514153e780aa77a2228bc14010aaeb67e77ea7d5004b30a1a38f25c3779d97d73d88611ebe42b7c60205026bc3f2ebdd21f9b62498f8d2c12e27ae37f1b3cecaa0a91d87a9168584536dbd693d28622f07b24a284f851540df8f048224db0fdee36d3129276e07657e899943649478e6007309ea0e3920a51d91d0acfa5d82996c9c450c219165f0e9223f00227e538973029b71be5e1c784ff3babe5a805086a4fe003980c8c8aefdff56a85e2d1ea0ca28a9c5453a3042df7e69bf2b8da12af35a0bb72a5b582522ea874400eaffb46caddbef8d15858934fa86b757cc9c0fc27a0d8e09923cdfc1a97adaeffd1e4cc159d8f67c3942d8b62fb8afc5856abc7724afc704b49d644005d67515aea4f031f449e2fced90b4cde5a8ad5d0032b97c219969020ba23a09c6441a5945b9282445d5bcf47897a7e1e3febc07841d8f3739727ceddd74eb82b46bd3a309847d0215258b4b237e385af261e1ab5b53c51233e309ac733aff1596f4a7db432e76332ce057eb366ef0a0da792631cbfbe373d9931627151dfc2936869fea3bde9c1f52af28bbf98e551b63ef92811d3e71c4f12bae460b456c255acac1b639bd752f4f3a07a3b307f134546b2d849943f86c4452d6f19cd9d673cb67172885f38bc9ea28fb8bae004c5177940020863300d39ab198101101c37a5106a92866a76657ec220d5b30a2ecdc9213123e2e350f61bbeffb8bb2e7baa2b34f7d9f26028c3f1ecf44fb82145b3b6e8f6cc7d772af7e6eb5074ac7b04353bbe99d730b2b87eb45d8a854ec7f21d8d3b114a1ca1167927cabc5359887e6f52f7d118e5e4adfc12ce4414cb50bc419892114b64f3bbf05ae783c356d922cf0d8b2dfd666891a2b9a9c18cc27dfce68578674ecad18403fcac575308df99cad7e3111356d0ec28f56a734bd8824c72c06893a2d2ecf71a99839760f41e5bf92e9a2af92b9015e5729af9d05210135cc5ed170601889dba9e27d49bbd17e1b08e0abbfd4938b77eadb595c8e3a9fa2b227071d6db46d04a86e38f61b85eb3a782df74be543d494b0344f783e1b26954529d24a3b4aa4760f05138316a455a448962c5aac11033d11fc39f9ff0bbd97ed2cdbfeb42255b9446fb6fa9678e3dfe2e4f3f5114540fb75fabee8b8548c2f12f7c941bf83a953b174c8628247be75acdff323fc26b55444f7874c513cbce51c53451b44b7c8cebcdcf2c4c15a0dee104ed5ec55fd87d2e6bb3c2db10c75417408f7952c04d9b2cf6edb273df9f9d074fa40580412e1fdc40e8493c20bdecc80de86b65db3048551f32b93dd6caaa542acdd70f2ade95c44b807876b83200da99d +MD = 491242cb9704f4776c51e53268c93bd4c3e6ddbdcf6e153091fb64dc + +Len = 18728 +Msg = 5a9725971f5bdda5936d9ebb8921015b8f9e1b967e2aaf764fa8a19a305eae20d7fc5bc817da2b55b18215376c6e35686813c294af1e407c0dfdf79c22a1a30bb5826da44be41a63f859831176884524742cb9e1306027c348193620cef4a70a9a324374e400129512fcce92cef697575cf3e8c52a78ca13a905486e5cdf22e32f12c67f09b77bb5a473e0ff9d4095c8c770388ac5ef9334d8c813cef5ea7c5f1b2ddc0fe390be8959c49fa30aefa6415eaa8f76284be9ed7c6a8188c19e1e4606886e6a9a1341dad6f9f5c53e8a3188c9a9d7d37c1733073df479e3e7826e609a2d65d955c86d6fc61ac9ac6099a067af75f6e7e8d8db4bc56de2288f1fd5757c23a7a43c38aa12cf2d02a199a45aa3b817d6fb9518487eb9dda6a0e3fbbc4c57721e1378ea6189993c8aec1134c7078d965d56ab5ee26bc44cac9008a089aed123b06e3166f89dcd4e48d5efd04f5ad6fa7542513311d98cc3dc432996a663923c47fc8e35d916136c24a45c015a633a4b0505af1e3d8fb9491e006c63793343c8ca06b8de6abc129d06a07f4e50eb6292f4e8eea7ce56f4e75a0ef9916ce68ccc21d4d7e9155773e9d612813f99baf6d72c3336562cf6e5a478b6f9a8e543145234ae12df41aedd587c42895c9d989d20942eaeb4bf3733886040942e4e138461ebdc9147558af9f3e178c02ec54dff7714217f48f0e1869bfbf4f1ad0e1e83022ea57da9bbb36fc1ebfc4d3c77a0c5e39453d09a25bb88e62f1939ac8d2cba3ce553fe8ddaf1e6ca8315590e1c5b976dfc0dca33c78edf70e5f993b43305d117f82c3b7c1a0c0717920d0c2d1d441c1b3497959a3f22334106da284c68706f9b4f795dfee3cb79affe2a8d20e024fdf725395857f43f2d62780520fc94373cd1d2818b999df7e49bb1b5056fcfc2e209b53b3cf34dad74da25c2a24c1f20e2c06a8eeed7b058f2e191f59ba351e87158cde468f5b433b1b1f359d6c571f40670fde6ae3f85b6498b88347843cd5c55ec567d04e5909b8cf0cc11e5eef27a53ea74d2f25982d991a07db8c3d7ade734cd364e3a4c48abac9e9733f74f0b7c6e35b89ae2ae1089732957cba5e85851b704579f30b1462cbac33c07337122c00259b086a7c5988d962d00b346fd366285979fb80e9cf1e55d68a2d5c2dba110b55f43de692680aea4b45fb8cd9eafe24791f8e0fd95b1a03e93b3e5cc15ee322f4e5be94f5a31b442c75c2463532b98a4f749612525ee23054f567e78a873ee192edff082e814671a6cdf3d2fa5124d45d37a81add3103759a173eaee1b960e1b08b63b2a58908ed4add04d5a1bccc9d12c7289bd287fa4e293f36f57f6c158dce3ca126d330cf31892179a0b3ec1d4f10b1bc17faba432492cbc56dbc25b9605c702bd7600f25c8c229d6d6b945a364d775c7019e4e5a93674b7e7a106cc8e3dbc46836b47a992db65480da2a7fdb68c781ddfb35babd05074cc69d24a7b092dcb7eae7591995dab6301c4d7ff131e5616465776995f704033e4269517d2ce7dfb9284bb642a84a525b1d832220534555ac01e89256751adb9e56413f338a7d4556b4e664bc4d170b23e92dc9a39c12e4b717c15872d3b400fb96c7369155adadfef539dcbcf0ab412923afdef198c8cf242bb424817f6a13c4686defed2b038a307dd896eb3f81b4e9318bca70c5f15551b2237ef8f49774876f97c3cd57196a99c3251bbd8634b6d2b73424c7900717ee5f81d04fcfe6b3c2f0f74aa87659bf7949b1f3aa713ec774195b765ca38497586861b0fc6db241f5b0eefd05053f097d960187486cfa775bcc4427b66cf4540e8145a9954a94bf9e13f143799053d9151c966f0de60246e86490b15b58d0ce9f1e90229102f87d3a9ea0c66c84129ebe61e3136188f0a6a866c3bbb1f3a47788b4f3a48613781b49b57fee547d05caf7fa6a0cf9a220171a474faf60c9d9df39d8c2a7daf87e0a49fcd133d7c7a7fe503aadc42cee1b38cc8ab6f4ce47fb7640fe9fb5063e94dab9d9673f5d1063a935c720d171b96c5c2da57c3470fa83cd2c9aed549e32270d27df84595ac3e34c3714659d7e807e21cc2c11d6ff5e0d546b223dff198fdf020273cb2a677e8167c2a6eeb099ffdb0a06831a64bffef2ac7b49042cfea41769e83a9e1af99cd87c76f31e935a740d758b5ee8663939ce25db63c256c42b5a9527a89fa387ab530ab28d97ce46898004c8f42e43f1bb0a610a170b14e06233246f22227c98268b8303daccb9c4acdd383e073e868fdf41de95b740effa051b882d4be8eeb19adc95e96f3ffe8b5a6f7058ecabc65a32df0efcd9063077607e40c09a35725a74d083e1cf53f4d11ed15da828f85be7326c62bdf0cd8ecf20f5eee7819ab0094111fd7b5fcb455c668d40ba50a6efcd7a648a37a2f97387a30cd30086ab20348beb6314a4e85873ce0dd9ede839ca636741e618442c5727831d9d8a3dc93b62c1f7455c434db6bdb1cd79e14413a44f759ef6de78d8d2353db2bf030b977a1a6fb024a09f6de8a0ce66b10318d6e5e841d63cd895815d273f66b7f9647854d1f19071803dcb56b350441fe1caf607d4488238b54eb8507404a418ebfcfe64100422cc8982e8997c03f006fbdef3a289f61d7af2e8d064b229e53249298c105af3e1961b2338194135f506cfc9421e8fd72273f0188c02481bb4c49f7ec3f2296d575eb3834c6ec982cdbfcc1e83f44c681b945b422da1dc56ad205d611881f1bcfe96f12797f26b56e4627f431bcc4625738c82fa47cbb56718d611750c384a8f31cf3284ad5cbd4ec3cf57db8c0f03abc4ad15a56d0889c982764a3f118daa40ab78262eff0625c6f636f44c57251b47897671d7ffb0b00a94517603cb0a777dc6121a8aff773b5bf639c32a0fa6e3952c892606828cce86a92803779b3768831c3dae2d4138746a4e5852d9081cf3213855a0b5a7d54bda5b3a910ef49cc41d184b4f8a46b2579e691301ede2ffd058375c8069b222ae820539ad4e7983309844db8d26828d5b54c0ea7eed32b7f1c6a41e3397340d6cfa4185a69a9cb324811c6ec5867711f639f05f283b59edddd9091b48c2cffe1dcf8aaf0b97d08526741965a73eb6f8ce9a71d17c7ccafa0b2bd0b41e80d86d276e6b267abab7719ccdc660a093a49a3b02cff20a162874f02b85a94335dfe310434d8c4267a4211e0aadd02039d28ec20f65214f8bd4d72344a24b557658e87f0abc31114348ec20b72a44c4a5c34f0a1ccbffcb6262a92b23b12aa3a6d5f5aa1131c565c1f86b3b6fe62f0c5bf94 +MD = f33b1abef61613d17ecba21d6a92116261003daea6ed288a456ad012 + +Len = 19520 +Msg = c7d75b676a1e38fc653cf9acc416bba938b04a2a76fc9cd3daf09e7150db34eb74f97a76f8455107468e170e67cdb56124b6df766b8d97d6f43bf3ce23a12168312ca89a87aaf0bc6a5c053fdd4c989dc3e0478c45b01e7773955d2e2e027bdd45986c3bdef4200318cc4ca8ee3a6c455f5709d2cb0c379ea12563f937a74b31f9644ec1c6cce6c4970673b062403a403e43adb2c74aed33c4148d980738994e95b9d69407da4ce7303302be00050978a8cbbb93ff11451e25896371665c6b1b61be8d1c69c559552b7b813c9132e1d4e717bcdd3d0a49470cad6eed1cbbcb80a49cfac1b43615f4d0057991dd6eca3c425038f747dd0097c0a83574f0fec065a87aa6ecafd489ad66fa7225ac62cd98009eb54be53172f48ba1406fabcd52b2b38117032348bc693781f260c6b5f1d06a28bd40e1aea847b3c0184415cf8a4f0ed8d770d839b60e89c383aaf3103fcdc817d73e02fda979812f445df6ad6f2501a96e9996508085a5e8ac6bfa1bbd7562928cad0fc67d703d134c20160f0a1ad31962e8253521b7d317f60ba47d75b17fc262f6d1b02d162f97b9f73d9b6117ce523dc34c8fa18b5b78e7f2b9df6f6a68cfe37f1064c0529fe0124932fc7f05387c8694d40609e88434098801e8b28666e097b1938a3e0bd419df7ebed869ca5abec6c2864360b89773e436434146efbf1d05f424c9b02b1768a9fea9d829507c4184b528eeaee2dc5cfe624991338bbbafb5b189c91d99b0f5f630bba3c57de62d48d582affc4e9b18e176d9818144a4be2f4e8b338d3de7e9517ebbe2483bdfa99b8a5e2c51e41cce15d8bcb93900c071fc35f2af08ff036c3f4f733cb771b0dd033c8210b58ca6a720f2bae063a959f1a3cc86e497c74ea54a0ca95a1c07a2f20a53b701302e83cb8c2a9a9e0526b566ac7d0f7b417d0ebdf91b26e37ee4fb103837c5a7cbb2f961e1ea269d295f1cf7a0af541b0f098cdcd4e5b280e6f2035e145074ac8d005192a5992482d63cd8cc05c91e6d0753102864d214d95b18040526078cb57f00d385629e5df815a5300e663535193444e2cc304b1695e53e442df6c2d46da79bc6639f6399a5ed826be5485a61c69bc249eec1b67e5c8c4c0cfc0dea15790fb77453e54f9f3166bbd27835a06a1c46b68fb79d7c15d8592ba49df2e81784bf3d237ebbca39458838adf0b46f17c53c09fa4e4e06a3af53c154362d22a234bd161c0ba93c2d895ce244744e2f316685a1d3db5cbbf08983f764f047027e311328a723370d44a4e99fde2d894880aa2a6861884d02c30fefb61bf2c7ef7224c95d0beeeea6463f3758c443f023cc363245ee7bab45e6e8a1e4c365355148b5e59c9293556dfb014ff63fdd0826ddb5a51fc0dcfdeb1fbda16aa2701a8fc68b71cc823bf5cb2b93385f95235bba7bcd8be020d4cc5c3736f531003cfc13b54f74d7240d54299d9cfa7d0e3e70486d26ed6f568b9ffff6faa72027f06644dca8f7a4c032fced1ac59e36f456cf367c69d2b4aa28fe3e23b2bf1e5eb5dd8a053f011b9ed175816ab62b748d9201ed703e439764d3718088054315ecb3eb4df6bb9a240513454b5516a91e231b8dd6114c4700cbb6812eeb9c3dec1a1117f578c6caa73f20f6b5a38d211cfc19fb58263ce6d728f6b5ae151eb48b30f8e9ea53059a8c921f10251bc59a5660b3d4da79b52804c3be9669ce34b1da768fea954f2211bb4738190586631cb399119ec6d060166fe434abc7dd863bc033ffa15c34c5381da5959bbcac12af1eee5ce483f4e5b701d3807c310cbb5a28b16f97a8c9951598f65b1db255785c7ca6bc2b79adeb14a0d7cb910d217c16f7360852e2d73bb31580b5284f493d2ab60a58fd10c21a33353a3d73c4e57078160bf15c70265e177d8dc943fb4f0a22b46259e1b0fd1c1ea942fda9bf2040876d78533dbc7ea74bb663bff61e31874a5ef6e660c12496dde23834bb659a934ce4c4567b2ca7be56aa4ac0c920b55bac9c0d2801ab003376ca6409321d1a12cd643921a02a684a403f8cf44569a42e5057f0474cd65998f3480da594516a6514d31ddd341d8bf4115f7082f161c5aa3c75e86ac9abf7705b437c2f6c685033291bb9b1bd6dd663d2f13d925571e2757ae03bb90190a161b7a5fad03fca9524122255c6c581123f8bdd3c4efaffc137127e315d7bee21130e55cdb097de01e1d9d23944d3c30732420bb5dc67752b990a39147ebf2e3d30683b3df6fb0e5b128611ac52709a7ce20163ef642439e8426cf82a4356b6be5dce3f94cbf4c26d5f1fc9f718226e3af7cfcc340fbab5c0dc40a3bdd5c7f06b44464918560960fd6eaee163bf74a80a1ab531ca04b04f7b0c8c21135c9a420e8ddb4113c0c251d4ea3a41366febaeb2f3b977fa6c8e71e07c5a5c74ff58166de0920fcb30a7fdba79ccd1b84f11e9fa29e6870c6fdd82b9d4b13b2ae688d352e3759b89cf41cc76c36b7933886dc1ac654149483424eaccbb9aa67c3ab2e183418bcd94c41727d2711f21ed41879f8e4ed4a5f6e4eb10e2da1b85b1235ea8c8a0dc8e3638b174942bf0b12fa3e8e96a8da6845da6bb5ec2d93fc012c81590eba971c4b553981c8598e71141d6170906c9bfccc6a31a3b365f0b40e7525e01b20351595a3c53886d610b296b019c652aab28677903930f041489eb78e8c263e75684336d1c6a1f142e65e1f54d0067a0dae83bbeedab43f5a2c0aa0cb3c81e504c133c361a664841a6fb2226e1ca752fff0732dd89ec3dd1aeb866ecdbf89ab68b055afc5fce6dbe71d7d248e682f99ec28e331d00dd6660e37a056187da3fe0bb627709132af5513801dba183b15ab6ca8425c87a062669e60d71b1dff7769885337aa35c0348c3a37f237ae1de003fc0f1f2241ef0e6b6627990240cd6a5a4917f4b1365dfcedb595b941a279153014bdd817a15220c0dfdc74c0436ff36cd864ed2a15449ef63039d15cb7e52bbc31451ba11872402375ffe8b9784fb8fdb0ca8f79452c61321484b8dd30eaaa04fc35485339b7f2efc312637271f511a96cd96a23686e0a2dfd16fe67bfe206a6bffefca2679bafa231b4837fa2f893dc66e1fbbcd191e04634510070b773d81e0702971334a5dcd76c46a7358db2c62329a4c2aa23208a1754d37d8cba0874d75bf0a62a236f10ebbd597d38b4bc1f0a3f724d7fdfa27e1df91eb4102a28837f4949a86bb64fd27bbf5d43fdaa8d04fe12dafaa2599022d68b8342afaa4c8a52396e2c3c6fd097f3ecd2b9f8c1ae1e6b4e5f58c643622ebd76b1a7bf9cfce00cc6ee9020a289d7e0c05a3dbeac87d1fe4c7ff6300f90d85f551a61c484a22b1b5c4b72cd00e428cec4444db3cdb2b61387ad419420b4d618a13dff52f3e4c1ea73f552760d67f11a7321788ca7a741579a77c9472946ae95e58ceeff5d3d4b16987cadd +MD = 450587633e9d302f910baae17d3704c5c570a4990b894df1bcbf92c6 + +Len = 20312 +Msg = 729a8e1c242642376db87cf530bfc351c82f0511361cdbf87e870f3e4e785c3de14d746d235148921690833474ea575096677d4d94ca7731ae691915ea3b47d7ff33000e72cc9c43ffe6515e3ad0fc5e76a61e4de6dd2573021ceecb2c4d87b394f539e759c0c6b0f161ef59ca9839e33194f1fa747c6e27434996465cd6a43b683a28e11f554e43b3a9640f6c6b97478fdafd3a85d0d9b339971a70c2fd24d542abd3e20eb2bd630f67b86668719df258204bf66201ee80acaf812fa6eb91ebebef44d36c009b77cb43f44805d1d34d540de117543635f66438d36d4fc872e42caf839d82666ee9b0e41f9c8cb4c1be4b4ac983a197377d28db181106bb5028cb939626980dc02086f3414a4541f0ae047f0b24914d7b7ec240590313ecb21f90428758f61d18841517633978a1e7864853ade06e80895ff80e9e2bbe84203145655e1ae3bdff7d24f98b536dfb2eacdf6eb9a17e57ea8a93eded714fab22c6b0a32153a915fc737d40c47f6c784e8a9179364e0bfb25655b8750bd0d8841469ba5daed8e4e97cee69513a5bc40ce86261c2dcf5b94c25a1781cef741440419cc1390cfdb9058f628a082aea67a360a65fea50cb6494ad091866f073306f4a70b944ce1d702c8540b081880724f0f7d17c8a6ec6642442f8f3c3cd52bf7975822d0150bcccd6e4e5676dd0468e6df470421395ab2a838deda4b3c49713f7895d770f3350018d24dd391da22cf6831d0f4b2643be1a3ae473a5c784c4c051cc4f41cee47bc0c7dba480216c3f1fc8a7faf2331783c5a2fd17617f6c406710d4f3f7b0f2948d1f6fb7e7099cd14cb74befc1ba8f90bf642e45823c09be5add29c81365dc4ec8ec57a3d846c2a81fc76f5a542d0a6969e70e8a629deb732def31581f4e0fef06c739d4ce696c080b8198a7041b167247b404529d05602342ff820095ea1c09b9287ce753d1f795827e3e626c05325feb53a64a9c1326235c66a27df1ca7f3372889747e31103b53705e718f66bfc66d73e6abeea37ac17bcbd191ccd5fb7d0a5802f6306c70f0b7bc129372dcfc34b7ddcd83bf1f34064f67b3c69831a3485d4879be5393477fcd3286b598ca1255241c7655e5dd6a19f9c19a2e0bdaa93a77207633af519ed0ddfb423dcad60a13fe586987298423e2c1030d31ed75143da20981bd0b4b7ccb2f3ece95ceabeb558bb82f8351bc6848ef52953705aded38242b23c4312ce9580a24b3236cefbd0215654faf252f4036cad9b9a81c273b1246ade3b0e79aed5fb8d578516e4b8804e28751756f83b3919bbd01ecfa8e06b550b74aeaf63d91c87f78a5869a6655423a45be3cf560c942aa29f56b678857088a73dfd826bfdc7ba835c229bae92ba467c71d6b806f8b313f431e8d2bbd35f33b072ae33ec5d7607a3558a4947b1312b036f66cd8570046a23303bb0dd7a85ead9bb37308fa88603fa0ee5ef1c514745cbad2a6c5c1306a1a222c5bd77bb831265803f14a03f9613d9e0dbf986e36b2b47a37810f552483f13822d74f536e54ef65a1c3cd8b324cbe553c2f531f81b5009fb0657dbae37a6d9c6c953e07d1b050eb15535938390a08f00316e880fe638850c2bad9997538d77792ff6b3fe92b9012e808b6b218826395eadc2038b4a593b6f7e8e999e3a477f01d7ba0a2bfaef901a149aba2d79b196d7ae9c3f0ac646af8d657766334a594309473a3d85a22d1e1c88001b07c3f719f3aa6994fec865640e770479e7025775e7f4e3d8ac36d61d9e51480831155b253b37969fe7ef49db3b39926f3a00b69a3677436600079f112816df0c49dc425b36bcbfda46997877bc13bd90acb3fb027d24d56011b2cc9b423f3191a297612e4ec051beab6565ec099bf298af9a894114b4165161b7030e6540ec32ebc52c111be8d8c786c1868a9c48bde1c32305f8957b82a46092c70d09b26b5a85e40796067cd18f593c7ef5fc909c0677fbe57b9801a6e3aec48cf9b80a3b82f172883f9712b860a344a390a30a09614e73bc6c74dcff999ccab966f8bed946bf0f227056411a05e56898ed082b72aca738df2db463f930cb23f0c73456c1105f087adacc6e62c9a016c38dc46b842322a9d241ef4d2043ba4eb7bd03588f6a520cd5d152112f3653ddb7e54040aa7f31453a3b7def113cdad9729ade4aa0df286ad7f69fcfdbd6813bea761451521b63997b9cf8d028a6bd22b5f33d8381c952c0f5acfe00f524a8afdfc2a8f417823a252ac8e876f2fbc1d90658a9b9cec351adc377054b079b4ab80c5d86df673e1566ac51b569ecb6995ac83d9b53c457b57fa5e74e048fc4e7d2f4a92649cdb995dc94c9f81f9251942680148ac82ef0feb5317020c3fa1bf08f3d281fe9b78f2c055894191e607752dad26010ad5b198deceaa4261fd31b054b2a6ccc25b129586f8c32a0dcf37245d613c29569c54bf38525e5d66ea73c86a560f9d38457129b79944817d1b7ecfda6d89eb1941a12b02c97d7ba46e31b051c55319e9bf5c575c20526f6a32a41eadba566dda2b5d84441a4dc3a1f2310f11e9ba6a5c329dc77b74361c5b7c71b8dd2fead721c25374042d175ee7dc3c8eb3a88eb81907fa201f7f38afd861ad4672b38f52776e4aa14cea2274fe961ad53dec152aa9a43c0b4d289f5169491f6f75308b06629709b32339b82c6c86938bba9c99e993732b2f0f57b529979c90dced8d271a6ca5595392021faebb166f582fa0601c5fda8e356cf4c060e9c2c835e2b2abb61d0002299f2da02372ad75e6a6e0b2ec96432ec46de8091de8238f215d875f04fc10ccdc55a283b31ab26eda2643d981bf15d4851819d8891a27ad4864f38a29913e7f15b94910853a8f23dfb8b31c0262b8461f777075cc0937e95302e1765064f0e27bd50a8fc25aab599b6318c29808944d3b92d5270d3db90cea3c36699ffe8fbeb7b0ce4791036edbb62f58146a3811b0816f3137743d17deb41cdbac3ee684db70527b811bbb4070d9245c5aa17a973998186aed2a91b7275aa9b88756a436014fc4fb85870d89dfac4b0cdc64568eae29956a9157c103af83ebb5410fc10cf8fb0d349bfe7eb1f1d6ab50e1dc555ed8dbec176b2255613ed8ebbb2490c470871d35100ba898206e004c11b330fe6f7f57275bc3b4d63b9b01b0b0760235c9785d45761cace23f1ed137359889d9296b454e1de035ccf88fa5427e808c9d7e9162444d1733e474c8f273a6d90f6ff5634b67450bccbd00e26caa0b8a5782f99bd53a7f44642728360a084abde9473930147cba8ca133bb5c00ef41dc8b6fa15d5d2ff3eb6832c42ec2ff0b8e40ea5e9a469466abddb591c4061906bd4fe9dea1a32c9154668dae79c25fd0923bdecd698ab830b0a8cceae429314477cb7a182d4f3841c787c150dfb130801303aded6587ef00e229fe2e820f3ee25028a9b7ca085ceb8bf3551127377b0557bfde2556e641be8a89d6c5676048c8918efe2340769f77e9d1d1581bfd4746a798fadf034eb652f0efd9175bc558de812402c5574209cd2949be8f81ab9c2b4ab68882356857a55c84918c26e5740c6a133c03d714a2 +MD = 1fff3932e74bc6a0ef9f7e994889bf7cb3af3b892af186983f4b0b1e + +Len = 21104 +Msg = 8756a342c15fa13c38118db26afc86d419edf8f0acbf1ee6d374c6dc6a855532a0750ab858ac871fcf838dae7f9c073644744a48be3b9ba5f6e3f1f64477fdbe70ae688c17c05c75507845c1908ad9e5cb2856b2dcd00acb2768195c7d8c7b0940274425c740282503173e54637104c8f630a494d026753fae2bc575dd6dd6fd570826eb30d7f3173089ffcdc2f791c60cb4bc5760e6e3e9d3557da92bc21681ff7a9646192bc6331ff5109673c487c957de276455b85db1de0eca603132447c7ea51d9e4be4a8611884fa153e81eeb81dd46c227643ea7f167d3202b56666d81db0425b8faba289625e44b4edd6ce7aa7be13f88d30923bc4cb3ff78006877c24c38ee5ab28bb9346aa76da466a30f93dc5a45060265dcd301f79a85ab9ac50db0888a56702fb670c9119ee13e61b1c2711a891b9ce541da2a2677b0a27df3c89a4b8018de16aedfc3ab45a1af198cbacc9a7225ed07e14627c91d95af9272878c2a662e36f110e5dcdcf852434aeee1515276d17d3e498b7d47f2b10d78dfcee88db313351f7b07974f2d7f857656eaa1eb2d9ae7f8c92ebd2bad7f56817a0341eded4433224bc9655a6b86001c531b30ccfcee97e80eb44a0c947d155cffc92ad37b5dbb8a11bfd98729022dad720780707b49275c8890b6334e16c45bdf94f5d6f3ac58b75b3f666dfc7078ba2234136e0f46f0f6a568746840f8de1e87db5550dcdc854a86ec8e774c5d7bc2e2355c1e4f449f27039026e4038fed158710abe99d5abbb4333bd42b9f35a148406fdd19b1de7c6e119c206f0c385bc15be97bf9bba37674de91ba036b7573cabb6818e8cd71334c6e010341c1aeb4b284aa4819ce33401ce7a2b28747a98dcab19291f3f8b93e3267534204da4f72598ff792c24ba6a30cfcd3503faa5e39b8d193cac3c9f307d09c076f40ac973f26dc45de7b9a6a09d56ca8158509e0121589d045f0c7db2a778a91ed5dcf1255caf809adae50fa0f06e595650ffcfba17148cc75e368be10b791873ed4a84d709671d762e2f5d30d01c62fe138e9ed525cad0ced14233855117f5be64dcea4fa19d823a0b1ff919e56acdbfc885751cf2815061e1b8dc6521572847621a8c56cd57972d983e4922d85f82e2976dbb552741f4c8b521ed4a214399560e8dd0b3359f4499fe13b61551036aaea9ccd8496b12a44a7705d0fcfce2313390bc1f30807c71c46427a9b9f75f6b6d262d34c067fd48304ceaec43583cd626112fe29356f706f7f30088d5737a6e6536153782c309c8c35e5aa9e7de5a7176b96f7fa56116eb7ad328bc326c5d5ce0ff0e4956263f0c48d5dc6faf3543eb6caf03602e46e309952b27ae988b0e1b24ac9fd20538a5fd0ad9f9a66405ff2a501c73ebf6b06646902383c5ce7897957963513a58a24681509037b6cef897186a27488ac445a68bb2e5c6689edaffb0294caae9140c278161252108b5b4129c01f909a461adabc145967701ce5a4f567b913447041d52e686be3c02e1e1789d5eb93ea096917dce8f611ff7279f8e6eb65777bdef7ece960784120d1a28d205ca9070e82999259cd96c45b27152c4e023c9fab19cd7a37b2c9e2a92273127bb8ba626e3e26caa116adf719a741afa940a0c458cd4cfda7c3d340cf7d1a37fa7e922e8f98bb314178ce32c17f7a03771b34be0b75f0e7980817041a6e026e2b12e2c3e92ea156b9585a0fc91c48b836165ac5498053d8b71417850051c6459c1a0eeb116c93bb8729e3d6c70a184e64c695727998e041536c574c17e4c02ebbf898dc8edeecc03981fe2011c573369180875e421c10a21b7558d1d773aaba1932f340c80217152ee50b945fdae3f13ae872e109767f8b6dc39eaea5aac058125db0903352cd2af5c78e7bf7b6d51edf631a935654875dd8db8b5b38e6bb8965dd4343775d69621cae197f7ff5e10fdd84d0fdaf22c2a9db21b13fd7b3f6de52464de30a9e666b120d1ef76ef47254d3d228788a6dbbefe33ab2e5289efcc7860d12f743725e965469117c3b5f137e50bf93ac6e91cda08f8ad2e3920457c56fb644e8d895bc84725693866b724efcb2c1a501c23b926c4e96c3b3ba8072687db656403054faa5fa3a07ae85fa7f50986cdf012bc784939ef2f7bdf89fe7114ea1c985c15cb38b3a98004d01444f0a7035a42311c22ec6ff03d19ad2bf206040ed0132220951a4e204fffa63dc188ab8a086f00ac7fb66fd5df3b2df7ab8c5f31cbfcdc8e76f735ee5692f344e7661f02219f08d2565040875d0ae853f0ac2d3a537c13c6367772fddde63d907e320a55ebf9cff77061eaedffad65a88a0e7711b1bb4e329d430b332c220f894e93756aafa6df84969276ee0d4c2c5f4259459e2de0153973030b7a8a6fee971e326729b4cec0df8e8beb74ce11c6dede359dc90e14f0437f5e77b941f56422b8b7e87a4497f87220f351668b22ba8f264c897a9e7e68b88afd59d897dbf892e2c90045a52c11a41673b1ab8ca790d9e4431099234704015c88b8bed54a334f6510b87220b393dc37b2122d19c9d123dec53a0ee6964d84bda69d5542699bc1093617e9fd5504844a597cd37aaf04d7dd7810c12f94caaa75ff0f842861ba5195e026938439ee03180ff785f683b15ca904999a466803db4b3c1633cd591865d3b8ec56fd88d8c1697d8c2bd66a601a0a12de82723c80800905ba4a7a7a3b678966711baf694b26044a42ae638e9a79c84ae55ffc35caff750104b277ecadbd8092bdcbe305ce9ab31f22f4e217e6e1aa53b81b2c7d68c258d9fb510cd6f6d180e3d94ce183e9853ca432e69e2dcdba7ad65f9c4a3ce22f7935a81081609c095101cc88f10c244f68807c6cdef6d66cfe7ae0cc9e99c1b0a2bb11d71db429cfba959e655bc80860ff5c086fe99d895fffe8459170bd8bac9916408f2af7258a844757cd66de1c20c9dfdcd508486efb44c796d507d0cb8b27ec3d1eee5416a177be00a75b77e8f88eb2028883200ea997c0d97facf906b414e60e6eb2f1867e5ba3a1db82baf54e157c826ea24cf0cfbe7b1877a760c69128abbd66bdf6fc88f89d405023d0ca8b27e66271adf49cd7829f5aa5402e92892be452ed598c01271655e7f086e0f0188c98ac78eb429b27abd4a8f1bf8bf304e438d3edccdb1cc37c729da2f313ed5b0c39686aa55c742901c409436b9e706a1c504a4d5f0ad5c4f39d6b4eb1914bbe6e719c31236aaf434c1585838d9091249bd3bef55a41b493437e57dc098191a87cea52b4ad95d5df536f24996d88de98296a38cc05aa429634bc6c35430b4881fc4991db8b046d64df7bef6d53afe02f8ebdbfbca76a06368d00af3fa759f7b0b739628e04e1ff3ab8e0ede7872d1e5191735bad8aac88db18f12ae37c90269f7560cbb5615113c9a64726f050292067fc341485f49651ee9b38e40a0cdb5eb5fe66d738eb7e32787158a36ef8cb6fd795aaf32d2e50e8d5df7ce59a9d60255a19f48bffe790e3b1e0ba6b4bc53d920b257bff8d8003d5faac66367d784706f690b2f1f3a0afafdcbc16866d00a41169734f418d31d7a1c3ca9ede99e5b986f1294710fa5d011d5fcd13fdbef02b755b49cfbf168bf3d39a00cbe5d82bde2fb4ad5cf0fd65b1b5a3db5ad724dff745486da2830ed480f3e61795542094dd88a5e3989ae501e5ff10ae921c8913330998a871955f55a58a0fd8a6325b66de192d95a4 +MD = 3bce1c957e773813765d44d218a7c14dc9d03a57489ad36331b5c90b + +Len = 21896 +Msg = 506f894899eb517c95709b5525a77b65274bd2d8a68b22fa4db0a0f922ff8beb71e1bd120541805f9e36a236a0e2cc71099a0fa7a546c0ae850b865ead28b1980d1ecd87b31477263e79700396ebf042da583de49a637b4a4709c6f4e7847e8f0d6fe22f092ce1d95c832c446f8b90e084ce8318eca8fdd47af0894339da9bd75a1c24917050647ee09aff82928a5454ed440aca03deeb570809f6d209f4af78da6dba35514aa81fb107114369b0e3a5ff01f98247cdf0d8d89c3629c098637b77aacda312e056c3b91289125bc5e6dba04f79c9203cb261d2f170d0c78f5fe7181a84641ddb1673df029074d09004ffba74b225f6f4d9f9de4fcd5084a14ac4a50608ffd8028f360b214df330dae61834b9cb2131be0ea9e400752f6195cd1b05b680fcad1f6a1425b5e916e46b332ef666ed423960f978cc4a8ff8c5358ff3227215e403f84e1516078b65520b944ae8c33f1276a2416e7e76433018473954e382ef3d4157e442c45f5c69e382b172f218ea18514e8e93e3cbbb61c1947246302d3592d102d4a2180584a9ff9731b1fcac15dc302a8af0e1931c122ae4e3d2f1bd10681ac1c53dfa402aae0f14bd0ceec8e9e77c00db8c611491ccbaff33ff0e78a749845e601c535976fe79bffc8db0b48ec09e96296f4c983f16d9ac0bd670a723bc779f4c4609989123a760973b2ab82beffcb41da288655178efb5135dfd91ab4a5b4e31c30645a3a5ffc1351e451ce8fd00245e2cffc3ed7a64e0f29e9e8068799831b99c30a8d30aeba97f3fe727ee7111ad951597fc3ca5a1f651a13cba81d496118ad871094adcd2df1ca5f92265d396166a663a5765800cbed76cbd881fe0beb54c7fb0af30a21c2cb558645575acf9288426cf1b90940e022d090b326a2776e7a89ad5e3ace53058f2610e084482a1ab8c5d3e91e7671088fa800c008930276d4530c7ede62c782b7ac7e183fde0f66729136f018f837819e7d7aa3aa5833a10cd49701507ff5b6df692c40dc64b6023045149b2b370af7d9c18cb27e5a91598e5edb7a337e641e50dcb9ef0c74d47a9c51eb6ee79b41e7cc04b5910722922cd372584de9d6a925c687959722a6d13bf13839efb09d92cdefb763b3d738bc8776bf8bf0f6212b79aafa4dcdc14342c2e9687e7228c67406af7a359f611586e5d296f517ead67166789540f76af28fbbdf7327aab2ae4c4e959d99b8374177e4818912073a7f0188b9e92da8723d3e636de8c3fde0ada1f24cc21e92bc3505f00e0661536783525cd9765255998bd565ff29e1e0355d0b9e0f6822b38278b794d2af6180e47bea6f61cd6d832356cb402dc6f0061324ffae87f0449f0c75134f79e4a12453c1401ced4ecdb5b226a66e54407cb41cade4a0310af2b9ccc29f8c5e369e92181bea01d68af161c883fd6d1d06f69eb450511f8518cba835d9c2d80a25b87eb3b44e9ab7f2772bc8f716a8d2baec0a7ca4cb790e9a2dcefa3313bf08229d2ea952f4640c25dd5855e8a8ce3fbccbabd813ca49381f97a26c5708add2cdab468b5051ea3d95829bd1e12a399e9d23e74935c40c9c09a7d71ece1820f477614abc351d99d6b2054adf68f17789cc733162834f4f94f8ccb18400d8c4d7c06d9fce898def620be409d0f8b4f48bdb383e9674d26edd5d74e63e87b0e617390eda34b649776a239d3d4908db5d1f39f1536792e406bfb84ec9a0db37211d31f37e8163c6be49699f79ca21eb0dae792d144865fa83c699a8f04d63e1e2644b89f136ea9c20aa7e7933b6dc5a82d40949f5db569c828c6211eea6ca37c6870650d6b7d3205ae7b2a8efa180a0590a7ad67c72ed306f6ba228194f66af29efc2d69396b5f9a99ba6ad221cc7530ccc4e611cb1a25cc70efa3a04a9d1cea9293199bc560b8ea930daf46f8b08f8fa93e4685b1a1e8815c0aaf63548940cb0adb2f8c5783c65d641c02d2c7eddf8beebed5acc1eaa38c83b64bb2f9e15efdcf7c792237fc105cd38e6a5ed5aaed8d65eb9c6c431ede57ad99817583cefee8a91fff46adf41e4da90bf0d26b1042fbd46ea2ae7e642249a15b58943877a9f45f6cc8e100937999ae3d9b16d147653e04eef05bbbe5f5ca29a5d9f76105e689bb0adcd97900a8a9aac973134f76debfbd148c5942c8e2420b1f0a86459f3e0f83a24318606433e4655a80af2dc536e5c68880925b366e191070f52a2e6e38ee80db0584fde6a3b1a696cbd3b25df417e9f1d4ec4e5723b80040a2c962995c8e7a5e2b0797af7f7a37255b682766a0bfecf78e5162528885a339174c2a49325739d2bd8877e64fa6deb03854d407c3449843b8a8e05025e9c1015e9ccea643b284e0c1eee6b49c9d64df6b810169e40eb57d59d91078834d21407f9f96d71605243041232a41ecc69159fbd5f6b48b850b4d7acb3af329178c9f803fca0533b9e269440e8bb4ca8b2cc7f03afa0f401161592268a6e89fb1cac56b63b15723378433d3975335bb53ffd0539757a28c1a814c59979c806e81a35c47f394f66de6d238f5a6c8ee4987d01d2bd35396f60831cc274063e31df1df091dd6bb09992d961db2233404fb8d685580d8371307433a81954b443834674576f4f66eb93076968d12f6dda259ce8f215a8d4b4045336415aaa187a73c4d9e4bd43af52eb9289b2e1e080ceeecb20c29c2dad6463a40762d6f28745abc0ab22fc68a978fbcaa6da8dd3f08103ba2a914bfa7224d6ed33a74eac952763c0649cbd0ce9e04c166d4a458841b31cf042c8b5adc757c6852768f256d6b2644a92bc7fdee50b751c398ca95c08b792e415e359a6218fbb027f32928fa05905d5b1fca52d3f6cdf32980c19ed9a10fe2c207bb871f53f3ceb879e8f95a69dc0e84ef7cd963d771300056327bb9a51c73eeefc429fc6d8c4a6fd074a273df33e08c618799873dc98fb1e0c43246dfc7672cddf989e1b0edadb3bf762b2faebd5adb3e909a286efd98a2e720cd6a963948e69b01aeb7623f7feb0f969a7420a104d94d42e52cb336d33c32ed530b14999d83ef86a064cca94681887bf92c7b0866ef5842817d549cc9e78bd4cd139f10ef6ba22d68d236548cdcf2ce4f3e08190983253b76019956010cb87d426980c6c5057ca00de7e767d8641536a5920ffd74ff7ed3cda2ca8d0311828fbaf5ffe2a7bb4487978d290bb381b95c0210d8db2fc929b28d462e685860b1b33e9f638d1df4c4890fab4268a49ba5e76ea0aadcc34bee81bed70e10875f0d90d44ff6eeb019c24f7c297ba5331aa280f22acf28b7eb97e8683cb2ac18785dcf87edfe2ee7900781e6ee1cebe86678cf94968de69313ea8e945d626594126b175c61c4744bc25bc655e46d614ce7ef7b5ecc2d3ee02ab11c4a2266638294fd115d9390e9631785c6d2f2b630e606ce2d58b4f6592498b239907305cd6a68dc64916caab4b7f84f2a64003e7f3e29df8c8937325feac4b68e703889cbd4f5d0b900d259ffcfcb7f9a14f74e77ddbae841f93b2778b71884c3f159388749a3a1b8b3aee6ef34f9debde9bd2e404a1fb2f3b0a91fca15fbe67f1bbe5b2650da1608b1e999ae6deb343ceb3b26010dc2054bb76a60808bd5a26af75039d37202f8520269ba64020849be22597ee2af09a9f1156432c0a20f812d8cf51cb436830f3daf1891387bb7e4ec97007d0cb75e658cd281dfb2e00f4b70e3964af124c62372bfdd66536162cf6e51166ca7ad2802c4f7a8ae80d03ec8da021c0cb3c431fc983a9f80dd3c70d0eb588493da1ace49438ac1e64ff704bf14f36daa229f2d6158294828fd9249b00cb5333ace85baffae96b3d04adfcafac6be736c653c231c5a93bfa6dbed5536786f0a +MD = 40a3de5449297067bc4bce3068abf627d229543f34ac71fe9710d7cf + +Len = 22688 +Msg = e43cceb6d7dacd6ecbe62ff95dda944257a73d57265522248fe93e819d8b2e70dee8fa9fcfd6333594363ecbec1fefb765395a91cc66e5f0e8a8a275683fdc0b1911f06c5c4f5ee8d85620626cd33b9b672b93b3fc1a03ecf09aadb296068fd8fd7f5825688f790ffe0c7ec6c33f9f74c74692c39eb7a4a10f86084010296f60f3f9d9d0dadcaa3270210000dbab44ccec52ffcc9986ef95ae355b27bfefa32a61491b779a7f19da955d4d169a5f512a3e1781d3d7cf0d5233704d6f8aa254beb035c7218fc0f08ed5870e13eaa2ef17255cc1e23fda266008fd86215888a9a5498685d7a3e654d79869eafcb2be461a09eb6700b9ee614593a4af4513ebcb669203fca0bd3b6f3c46c98adbdaf97dbb528a1a362d54e68b3e2f70e1a211e189f576d584c5056945477095b7499cbd826802828b8355deb9706470ffed431497d9a5b78ba48d6a7a0426b499e9ee2df8b41a4807a3377158900d58a6dcc88c17a65a4bbe401b9964e3b28f88a139f6a49c9c14b27642c6ef08f0cfdf57ea7091c35b392482f61e8a4ddecd8c59c33f0e894e8d95e2c006063fd67eb146efe88d9a7028c552682274ab7017adf9d631bfe4fa5cb7d0f758269d860c2491201e949263c0aa99b7cdab633114f46ab8f43e136629202930e5d58aca224020c5372d13fbaada3d2c46b6dfe96d6892b1af13805b9bd9d3b3d49e6e68680edb265ee185ff8e5d280fb61d8560c9125a0b8ac791a05ae9b8c84e06b1298595ab8ab9375138133c40a84469bf5dd1f8aa0caee1b0ff0f58bfb77b97bbd522dd763b70b7dd6ee27e6f3e1921f4aa2d246bfe43e9443e622fcfc782d8f534e6ef267face99268a32b9c1b5ccd8b0d849e83277068b526fa75d2428c51c50d7ad2a19f9556d8f0fd4caf8536f6ee4f7e6cdcd05ee56a7f8032af6ec08b942a858ed1e2528518cc98e88fc5cf238438c4985d4035e8cd119b6e4e94470dcb51b02c9c920cfeb8c51d0726234edcb58ffe2aedc11cf945a3f43297fb485fd04ba3b3ecf5ea4a22a334b15be6dba9e91ed42876993ba13aff328572edec0a0de0052ba85515f0bc2e84ef1658a01388abec9cdf11bb6714ebfe70c7b05b95e8d77f9db8f8b478f02eb6c83fbfc2a1fafff18d1071c4d43c3000fa7e8dbc88cbfab8100427f06b256a7145bf646cdca8e28904f0017d6f1896df2b7fcc376c1d0f598c7329f150c2ab5e6d7c8fc44af81b5c0869090fc011e4440bb2b5f6c846df0919ef48deaf31b925485f88f275537413a162d0a24f90e4d6a3ff901e24ae3271c060cadf11d95c6dde50961fe522b356d7c49f5ca5fb5c3efa4fa4da08bdd03888acf81efc225cde3838027320cba1ccb375be6849bb152318883a50fddb80077abc1ac0fb7480215dfd1515b0b8061e3c5e75ecc339d72e06949aa88a700b869c7878f0933791de5589142e1d4faaf47b670c119cdc6907cb590c0b38e43a5cf8c859d44ed358bc29c24ae5edfa54f47679cafe5b0b95556fc1d8a18e9fd33296950794b3b19a64e092fe63aa20cec9377af8dc883021c0fbb3459114099eaf7cc5c8594a37227e82e077cfdb28de19c654ded2abb2d6f276169c04528a657cb442e54b9cceb7b11893fe52097c4d8d29edc4094df97c90e8d42621d18bee4046f2a69130de20a5a895db14bb83e2cc6a2ff2a8f56ddb455ad42811187202a438bf52548ed026033dcd563c79a5677f9100afd82c76bab6d2feedfbafa96950949033bb3f0a9173dc23b7f3cc4aa24da44a45c1797ce38e5b3abc081f96ebeb624c8fefcaf6299c8f7f45603ada5ddfadf4fa8a64e71c73fa70dc5fefa3501da8ddaf17b7fbb5275dc949ac4dbd5edcb3e6175c751f2e0eb988962aa7375f90702adb5c8f80ffbb4fe90bfe8d5c6eedbf08e35e358ce1069f6a328ed0b9e1e9c11b5ae6d9efcd016bc8d37f811d54bad842a8b92b96fc03b4fff8b5f1939fd3a49876dc1dafe8a1bb4ce956b169daea067cac94e0a649af012d2fc7922c5ef41f897566e4281842475e94ada5a9c625519e3918da228eaf8ddd21eb3bece9f43dd6a0aeb4c2248c15e71ea9e643e115c290956ca37494ae61f8144a753b077c03683fd918e5d62930cdcd74fba1f360603a08bac30223528364510cc7817f347b259a1295f9f4be9dfaea366c29c4ae3484dc27c0360343fd0b2058ba261ac3acf6f87fb56647f66554bc16c2451ba8445757dd2477fb2ad7d3c856d592a0d29ec3a348ff94977691c58d3d845cc1f59a99c304762cd4af17a69330a02ed9085a75e196fbecace92934a3d33ad57f3e3e3466c33fbf5679c76bc70ba3608c0ee7f2fb9132d44df5338848ff6c1a1b2b360e894306974931ee0aad126791838b4d2439602bb54442b9abc1e9a3925d638c1173ac531c757e956a8d6a732a842895f2e22c6ef85779c28459ba66a50f8f48246e25afb6a209c375af3e4f91588dc643401c84034f4257fb579a3ebbf756702ec0d6a0cd977a80125ab48430c761e8019959f440f3447ff802b0b23cdf610e19b2e8b0c91d78d429d8f4996e984c0413360a46150d284263a4254a908d5829cc8c836712fcabc8a36f2716b295f820615f5803ec6395a82483208e20c9e1ca2f96ce4c10fcbc636668758466840a47d35b6bb22cbf34ba24e7ca07525da7f82a18f2e72ce453ae5b0b0569f12e2d7e51746adb3de7ad7f491a4b3c8f0f50bba55917c0cc7e17af6a9f0050bb5b07cfc3f07d0787a3a7ff7c63cab540a9851b88a263605a90b1707c6e8dbe2cd240411118cebc72bdcb43a6096ffbcbf1ed21bb3b014e3ce3c8f977bed53dac5d81dc2334828566fbc052ad5564959ab031d4266c1712dc3f055045d80054a3c272a9e18cc4e7cb272e357b8fce0b13adf83db27dce35a06c107fcc04358c79cabaaf3467ba6c0907bff2f6ffd8e6a0b2eb6245b54d3ef231908ef6899c6b963d01f7020f8c9b8864199308eca7ada885b24dc85dbdb539572e83a9b15e7b62e3f18735ca63fcb005e41f98a066e893eff40624bd4522dca79168cfc2a34446843069b3e16718eab4c99f8d613b20c8b859933f1d0e0e45e661444f05924da8e766a5669cbf769c376f1ad1784edbb1a88bfe03c53f01dbdf482011c2541ef1d53c413442949f305780984b2dc8a4b5872f4f57fc01810659ec03fd41103f8a165947071d0d190cdca122e3c7d1003c1cf08c220c7c182e1bf5f5fbc9ef39d97267bec673536e9a8e7cbe81909079ae3073bf4e3bd74dbbee0cfff3a3199248b10baf598d8d254035b9770dce2e96748b63efc2d23ba8159ad927cd18b5d53e9aef21a7b3e4c7689800526fcad3dff4f566256618cfb2a5e70377716eec8723f6bb1c9a2c80db7980f75990cca5dd973624682257bcf2d19d33f7c7ede5325e8d17a9194288e9dbb54993561bcf17c51547c0ded529f1028310aeb8dfc95d5927a9ce0d3b247af5ff9c08aa017716e75c743582dc3f35a16243a42a8abf917b8c1c955c607e15312699c175c4c66063d155d0f6b22548140273e10638f0552c831606eff9bb42f6f1e7c59dade37fa33d9298229f04b2c52b496e352f8331d4d63f28ae4e0689ad292e1c0c04f6fb0d67d396efed04f91aa56c529eb7a1addb4b410381a68573bc9618cfa811295a0b19bfd043e24ca77d378695281a7252aaabc19f514b60878c004be55b1ba2260419fe5008c8054355ab3c40bd9e1da7a7bd6a050483c04d852f6f660b6c89e66030391e24e556560ac73859448dcb353b4be13c8497cd4e0feb2d5ba24a07238626184081826867045422eba42da382ce1bd14cb7cfae1193fb2dcb07fe4464e0c342c005e663feaa19a1fbc7c7ce18c9f7e03e87728c1f772816be22d06731d5cf60a59a5b6ea466e05e9394a2737f92a5b619dbca8efe253a903cdb079812cd1119f82727b1df9f6f01baf308bb3d93edfce59a1ddd3803f9454e1aed0190305216c09393553abe8f3179 +MD = e4c064eeafe8323b68aaad4aa6fbed8029771b7644d49849d2cbe96a + +Len = 23480 +Msg = 7b00efdb61a258fa37c34195a111f6d8ef29ee70e34face6bb63e32b6b10dd742b471d4731ec44d6c0cf318d61dd6ce77198c585dbc4388127631400b4e45d0641986e8fb265e2db11beb509d4d2a7e75e04e109c89cdb18e0bc7d6d729585dec7da28d86c75fcaf347a153180596e81be578b23303f5d53ef54669b2f8b1ea4c4f7944de68558fa31e9992eefd88b5d9a780bfb9d1586d95b1517b1722eef0041d6fa13a8fbc0650ef58928a9b9c422f94fa9ba96861e532ce6d7d8c4e6c298455fa2553a41f997d5852c463462e278e4c4ad88a4faec686baef038ac1b5d17d87ad33925bdce398e80cbb11a3dad0962bf5e8c4dd9b9c11f57a8f8b2358923020fd7e7f0d906f33fd0ae91e3b0ec7a7b2806ef1c8b4d0550c848415e9c0e64cc06f48823fc686cf25c1d0d1525697637e7ebd8967870dd06e9173a39b8b4843d477344468dbe4dae0c604d3a03eaa39fe455704508eaf14aa25f0ccaf243285ebb9c42e2f6ce3d7cc8be7ad9b238a9ba088edfb0a482e823db66de99b082fa3548b6ab7e9e61e5637881bc7b9a1b319139dd4c5fb2026b9a7c76d92f5b3aa2cdd70ba6a3ed3eed6b04ef3aa7235ae32a6089dfdb9c3021b66dd524135c33c82b51e15cd84b2ffc9c54511de5b5bf668f66dbc2abc8d4b37f96cbe9cd193513599c81f5a520fabaff51ee8cbdb81063c8311b1a57a0b8c8fde0a24de6fc082b5ea2339892d468d19be110b0b8941681dbab9112688aa3093931a07ae56c73b942493e6d28cf41e678edfdb15db19969d2bb84cf65f05c1d3a730f9852d140650d7bec9dee7a4da49f5efeb6357761c2b4483e7cd639acae088c35ceb69235d6c81f83506d3b53b0171a5be7c74f35358a3c053f43cd5b61ac665b4598191bb57b1d4cad2b7b1db5e80b5c6d9b9fde6a5b7e2240351431e02de7c82580cdb9a92c5d8fddb2a371591b18497039d025082ff6dda83476f6d393f9c695f616d95be5c694088a191844b72869172a4bd0b80f8c7d9fc65b71e1e7839bbd835c4172ad42a2543947da1fc425058bf577a72101284c4c752b6bb3306c90c6ae07ba978db902ec49937e924bf665f422bb74ec10b290d8c84eacf1769eedd8007f0c728b11fdf64267ce445283d1793981fdc04112926b472cfc42c100fa1a002dffaab233d99baa2a90dee4b49142c3300b469e309a2b7b2d234e1a7affb536775be80707de020b448d070671ec78482f66252ef4ef43ebbae8be88f443d12ac6e7d394755654ec1d8d68c2a22c434ee8d606f947dbd92039143a14560f9465836c14606687b8d61d58a91f2f97ca5fc22391080fa416a0146f69c588ab296e14b25273c0ba5750acb571260076360225146d62369321f5b1c1f4a3735fb6cde38136d66d3858e2326d68ddfd10aec07973430fa2f023a67ad282b6fd73640b56a168905346e4141748374e0faf5b1f2706ba183d03433cd56abc070f2e5aafd7d98fa95c2f236fc30e86811c9965a995967b84ed13aa3e2c504a9d92d9c141cdf3532a6f393c7a9e87fc7c0d17f3e62cea2d5b9c6a7f34e64dd3806cbcc049a0b55e1a73ae58bd117b4249cb712d5d54cc79a6314eeba76b29ffb9871f8050b7e8558152d49ec182b100f03def3c967602076c9408161e23ac784fc94a28dd7c54e367f3f4370d5af2dd774ad94819f8557eb5ade02721769de34a1c84e17956c0aed53e554a2a020681e8dc76786f448d8789641d4638ccc6ebb36717d3abadf55ed21b41009ee0b5954ada0ff51fc072c9f1a1099dec8ded3691924925fbeabc9c6772fe81f35ec7c1a62bece7b1d6cbedf44cea51c421db6cec846300f173db109b2bd5f4b0e303ac03b95575aded629a9b4d098d49f05836cc27ac8b16b11a61762e0e815ed632ff696b92c79c6cfd79ed8cae7701632c3c3a626eeff10c43370063f15284a11c61e129ea0606bd6531f2f1213776e01e253d1def530bed1c3c42b3c68caaab897b71dba75a7147626bb265a9f630d0f799de4079e0eaba6f164304d45a595c41f524690fea6772bccf36ce8fdcb69c7f4224b452bd18dd026d0b4064e2171c0b76ffbc6bdf6fa63a0485161c108faa7ec5175fc2141dbc9deaa34dbe4c6f53b1a60cba0260124ba5b3a72395bb4664bccdbf2a130a7fc10a3412152ac1e669f92e524c1e96d6c9c583a5df45046031000025fd8bc9c85210f4607ef06906c6acb6d95b05a94689621d863073146778140650c174797fd976d29672576b56d392e5aacd00c0e7f1442852006612e3a3be88485c14412dbd0575bbd8a8ef5ef67264cc8c5703436a324d113667275a19c72e16b8b44a59668586d7972c1fa79815da477e529be15df634ccbabe7b5642f79fc1bc9bbc8b3cbeacf3992821b82244f0248d39b0493056848b74b3355e861584514f13be4ca7779015c5e71d19fac54e6aa05369044d1be6544c8e7efb4deb84cf5b6278220f7ada4803b03c538a609b219ee9ef991a0d01312a967db3ff3f4842c7d11398dc8d31913bcaa5ed39df805171436a9001f37e29f6145b1104da77b27ba8b73376793dfa557e826f6e08a40300a901726896044498503f9ac484ba275e2f8b7d4505a78a3a14f86293a5b03f3363dcc5b9bf3c8bf89252d8a804b9aa5aaeb8fdb2fb1749d0d4314d0f7c4b0bf2b824145b34cd05fe22bb5216241b42566c653b23213440000555b84a561e7125f201e4b6be61bb9347a39077aa89f83bb2bbc00141a776b3f18b2bacfad078b4579abf32249db39d4b321b345faad3efc8e213b52117f3cfdefc2f9d320a288730182c37302bf705748f7ab30b27db5bf601bca58a2dc03d15d04b85c4748a87c4a2b42da8b38fb40be3355e76a718678441443b4391e4e6de2e08cc79b5a59a5d61dd7c55dc81915755d59c67d393fcb9c932de16ea67b1803eedda197682a9417d328cff4fd783a20ee1d4a8535300dec20ef5c9e15285452a82176c5e279db91d38c66db499743236e170ffce605d3b5361ea251dac4c73174fec39169e5c0d69799069b2cd4b51f45dd735ecc3f918a5b124f2477ded532fddbf4a45efd0858a7c53b9f17df04570de71125683bebddf890bf806ce502d9ab3f9659420df69a8c978261ab04a56d3eba65db4a892712a6e07fe03a65d4980590353ab3b7300eae96578d56f43ce450ddee0ad3b5f7eaeea80cee50dfcee085843dc3147739379638477c9c1c2f3edcb8161ea420c2a9284de2e550b15665a3723c7cf4dc76a7dbf3ceb9faeb00ff4adf7a913c881beffc589e7fba990f79f7e0ade2c5457cd1d86f49bfe3ef368813ba880cfd2a6811c33eac17eee55eaffb660e7f1640b04813f16508f7a7446bdfefdadc66a63bd1258678387e34c87a1668cabc585cb56d27209d2fa691bf3d07d5cfaa197a0b808bc69f7bd8e5e15ae16f8f251c07f0d38a735e9e613d1b6e1402e2d086245bc27e559e3c9f971de4d4e0b843c1c0f6fda67025dfb817cd618d0dc0fa2d13a0f965d9d10522c6e28a7972d282fa263c5e139d8f5e2ba059c9eb4cc6818ef67f97eac9f46012d3e3ce478c6a8d259635674a61f7a43c655509b74680011c1b4c40758c54c7e06c7622b7a3ecacc49f86cbc353fb5c5ae533a3699179e36510ab658eb79ec70bff3e1a423fe57c67a084de16ea06b1179e6a198aa400c2fa64f199aed22ec7f5ea90378fe6c1667f57c420ad9aa67cf2ff8cfe92f4d10a3c86d33f4e4271554edd10ecf90f1d158c13d935fffc670a6d9700a50b1a5733bc04a4d8f5af22f9773524bd063f64e40e6328809675a4d3e7e359bf5b7b0fc9e95d0ae93d6ea02f0f91602a4fee156c86d42693099d0c7402631ca01c9d675744fe5a027e177550586047b72e91bb1985d577dfb1e8ea654d94bde9c6f7fa467f77369730201f2812204fd63ad0d2757be580d937dfeb221a06b21ed3213531d936152a0c1f09f0ad5fed19fd11e80ad982c61203e86b2508279d91d99fa483e2e97a3d6a6ad2548a8da404dddb58344f4bdc1c9ea907088885e4f532d9c4c73cdfda43c3a9e4ce5a2809096593cfac1d9f275b60883b272b900cbb8746226647a7b9dfb042cdb86ccd909a1ce1aabcf50b3c41020c741b61d489474f8b2a0 +MD = bc824308b8955420c4eafec6a9948bb5d35ae2f027f5813a063f3927 + +Len = 24272 +Msg = 887486fff7922768186363ef17eb78e5cf2fab8f47a4eb327de8b16d63b02acb28029899b8a4f6f586d4da288939a036841ac5b38bce91d7c373f9d569e3c36916e4ebb0419f463d05546569244bbcea4d0e03a89ad5ddcc5d42b8191c4ef47fda8447ed986d60681c4bca5af109142caf732f167da31736d3bbb5e085da0536fd4874f8c7f48c9d5421d2a2f75cef2234b10fa73a1e8740ae48bad3aa6d3db5069a3978d61e1104333e45e93f2a97f463306c01db30740f75508d9a95f0e5257de15f16cbd139c6430aebd9cf5d52cbc4580dcc67c028ceb03bf7dc4e4c45adea84af79b0f74a0b0cee8c18b1db69cfe092bcb1e7b5e9a3e870c041db67a576d6edee498c778dfa1550ef4eed8e24273e443f5762f900b6a359b073462b4da7c983e73068394abce699dd24895ccafc67d85f68e073b5306c5d8f17977f846949ae61d44b25c97807321e418f2fa575e1b4e4896a0b4f39c8e424d8d44a94e4e0d623dd3d23515701817a4f06eefbbb3642966406a918f84156385b0776c33f1563f6f4471b2b815af0b9f3f78115f5ede83da1bf3556965e1c934b37ea5aa370bda2c16ff5a01d9de6a2d769cf3b4c8f10a0e89a97523ba79cfd4e6d8ea0377a4defebbf99f6544fcbfea364c2b4e8a32188dfa1b8540da53f3e0cb04adf24ba79a51b3fef754dfa0695fff141caf0b183bd31db7ea337df6d1d2f08065d91b9aa8bf8f6e0673125012f911635c38c429d078450d289dfde8f645c7daa64a7fd496a2bec52122759239404dd84e8e6ddd92e81099d4c2e280bd93d181e3a8d10bc0a5b292ec0581dd48bfe4e1781230a9ef9cf0dc5354b474b457ae04a276c7a6d3331b65db7ebf97cde2770d6d66e5155311664348c5ec3b56fbbde17756cc1c2ad549ac63f09758353294ba92eed3b649e0017d0999122b321a7186b6ab46f253f6edd50a2da1a52b3a9e779d3c84f3408332d83a30aeeac21e69830506d0bfdb32488e526856f4fc5524d2c0b28152d3757ae33f4f1ae083821664c6dbe1eb2cf20a16c1533fde353c984ac1f3516b7f315a3cad26feb2e2e0088a90ad02fac5c0a33ccb50b4a7623b994df5716d93b0315132f86ac2c88cb2a082d6ecbc652218943ef4f36e071ffc886affaf4e71f30fe064a58cff97dd748edc2e3d66c0ee846dbbc2adb473aad9e610352f6c6cd427884038f00da751901404faf19a74777e9021b9023053bf5e42dc2a54500ab012d9642756958d85afe08bb1bbd02669719c1f4c736a4dba142f2d63c081d2334c243ef502ffa0f62e64df06fea02d1107e1f2f183bac81775fb9265f68a39ca5e294f2697d4980f96218d5f3c731f1aac124b5cb5aa39741e4899a558d1c7e1a338f330879cc94e71a7052ef7d162e2d8ad86c28bd1384c5786b1a689e0f305c5d3e9b754b0bb3f3b55d4faa3339f16080443d778983b0ccc4668edec3051c3309a910f71c8e46e7dce7b46d1223a00c4c6f10ffe97c831d7082de002685a966dfd77bd714deb38936176980425ba5f99661ce090385658223c7f316ec173fbf86d0c55e5a8264a26cf4572bea6966ef05235dddff26bec1853eb36840434604a79cd4d11702bff9258664b633d64db641bca7c306e7f6a33fee073d489226fee944927b72e72e580ad679684429c015f3349303405175f0f9e0d7df2c8b4875f5cfe6a394b71885c2eb7f8a46ea29d6c39408e4d4eba3705a1a0c9415b712317245b790a4fde549f6ce5c6460a2efbf58e3f0afea3de9ea0ba68ca52b9cedf909aeef8bcb3efc6c4e85fa3ebbd87a995b2932adacd0ad28b48c415a95c44296621375dc3104c7b6711a3f607e14322b736eb623402b58f0fcd212fa7cb777d1247b31cbfdd6adef08941511d2de7f3f49bb645cced7530b8b82e6cf07fbf670f7ef0ba0583d16debafc639bdfbfc99b8417249f7f5a05410aa3a71f5f1a253b8576eba269c06a4c30591144cc3e7808cd8bde337a3ed559213e3c33ab9c6efc7318b91a59e7120112b30655c2e4f44ecc1e7a61e80a2d1d775a8d53140738796cdd5d504f3a74c507132c15e837a53528d8e071f1477453b5ff82c6c2e5ea7b16cebf8c7442f960b7806ace67c1f4858ac1f8abbc7c11c4823503d6dcbdeeca19f2c816ef860999cb02a8c6660a470599e2ab5672316e388705f8c98a18ab2e1e525e35e98e0d39eba1ce470e98077efe42dfbc3aeff2776c7649e8f67d896fcdf46a338ae36b09be66c59786f59db960e97d233d3c0548d891de7b4574f054cde2d556f90c8dceed5873fef7a96f7b68e06ed4a3a30f74735d9fcaa28548a7c72485e75f91d9531f7fc1c6893ae78fbe2e981793a978c4e6e2751c3339f92e62c0642de3fbb95ffde4973563326cbc09dbe53435d8a9fdd92846bb20176bb247c05972aed194b92f8ede95ae1965c9f1f03c72b2b708eaf338fced92a807fa1d2b4bfce79bd22a5c857c2c91753c7f2074841a32cefe52dd197dfbb17233d08d0a2415b7e2da7a2cd25b4335d058a63b6fa774dca6f4fc3fd3b32da4ff58fa3f64cb03462c1671497c6121c2b12106edea8cc8d9c650b1bf6f84ca94d7df41da41280ebb04edd6588b78105fa1ff66dbeb1b5e51b67b3908f4da1ca8802e6d07aa23803fefc7730408875634275a8fb07d3c7d6bffde5cc06a9c690984af466da5a49ff9770c0ef2fa763c6acb9a4a12a5d76f4f28e0e290d9b2fade6bc993b53d93b512232570cd692d0a2915275daa6dd47a26b9e8921f4a031750bbe31e8677d808b17b78613b5e9308988e6a901fdc1be7183b603516c4790787fe67ad895d5be0ff086ea9e4df927ee0bdc9ad19fa95fe4c35af931c50fb14aabbbc0965f605872451700f72f711b3282aad7a42d02806eb2f3d74daf57284e17b4afac34abc4447dfe45c8aabf9f0995e7fc13f65bd491cb172a0f7bbc4a056c579484b62695e90383358d605307d5be0a548bbc23d0d0844b6de1caadab02e21b1baa445f51e28e6c6cbfe0c9fa2953889d85ced8e9bd66f71f8f1cb9cfc94175a1977fb46cc3771047daac82ea770ef9138caf09a3bafbb0bb41d25f2cbae30dc2d6b8d46b0e45f54368142c6d3138c2732aed34734bbafecdb49c0c567a4f39fbe2902db11583a20bd2b814d6fa697b28cb09c7fd021d37c351ca5fb169fe90c945862ef39bb89cfdb518dadc353999a0f775529550aaf24893fdb7e21c7988976a1b6696e34d5c9589b6fcc1740194683ac052d0c9dcc4aa1596a34d0438a7f2eac0531f9eba575fcb02e94b3959f20b0f6b5733d03b15843135b076a3c47578220572f2209813d8e39d2ebde7bb38f5dfe6ce23063e6b43815b5de39d955773ba6b44b30b6f188d8dd64bbe21adefb546c32642ce6f4c8470680a083433e4921e5256d6d197ebfa045ebeb0599a7cc5be70fe07bb462fa3a8fc53791a18a33fb86b17d1f5baf48af186f639020976b3b170c3f63f4b8b4d8578b8aab1cbf9f933061638fa30d8ccdfff90bcbd9343ebca530672dcf7f5de807da8118dc67f4af8c3c07051a1ff3c1a28fcbfdea09aea5398441206c3e5c3346ba042208099a18414a51c8e86de655a83c8b6f7b9b24c07a0eb586f47d1b81bd34fb0fc82ef996f8932a22347fcb4fba05336ab57406d311d8aca58ec40199134f4e28465d79f05920785926de0b787ff4ab34bf1bbda7a5ea0cc7639c7645f114e6b5a71e82f00bf825b6e8110f98a010db15c218b204df4abf329a8ce24bff89a9fe16f97c5cb72317819fa03e77c461ab57e6f44cb16702ab2e5c1dae74e4b8804ab977cffd04aa38027614ffdc94f004415236f278e41aba05d1d5408849a953e3b81fe39b9b946e8193f3bc91b7c4cc1a2f660e1fff98d3fd203f014fd5630b0f3c7a20fe23e9a3451ec8dc5cd6e5ed2ba40c076f5f86dd6072e0599131ee8e176d0eefed45b1be974018c706995c4dbcdab14530acebc274ee42b1150452c6437266b631a9f5a7bf206de457a730d614f9dc302a90d06982bdec6fa4f7979ada7407de92f6bd4605e84e9d16a9696e7d28163024b13cbad10666fd06b2c6f1269a7bd0d8d50f83b0bd44590d4610ff3d8fe6ade8b7379dabf239c103dce7b56d0d49f3cbedf5460ac9d68102272c709d57d40f3c4bcafa56a9ec25621d00cdf8f4f9ae33e7767759348c7bbef4c5a9e5a868bee915fbb91b52078fed1f1b210f78136bd76a9afee626eeb00954e4925da92b22b7bcd4c2421512696a873f99f9c12091801f6ac3f9c68588 +MD = dbf37238c302735e88483a64a3eeef0c626defd048fa39bbbfedf112 + +Len = 25064 +Msg = 2eb0eca524d5a152f51af240c51bd815f2d52bd9afbb64aeee06a7bb844c016a8754eed3fb291e78ae6d783261f0606b2881358e14041ebc0ec507c1060ce6464ef243474072f7c827c334c45de5c567b07b977d0ad87929525c20da8d016e7b4931f4ea3bdbb5ac27c52cdf0024916f516a598ddb5ffc5d7f73faef5f52207141ba07a33489df8b751b6a6993d24bedd2f681a8cdc02fc160b19ee9c5288490fd34875972a7fdccda6cf64c5e1a7c48fcc819b52a249abbbcbf13ae07ab2341474879f63e5b97d91e60d66ea922abe89788289b38b2c6b45a4461286d0284eae59ee761e0cd361909a014b9bc1260356bdeb74440933a1503e9913d3f5630f5a0ddd882a02761f462d4b813de1324973f70cd9789ee7e447f56aad7c4ceadc840ad5541c58ea1d2f3a4c866594d7d76dce9727c5dec1bab9632b4dd459385cd8db86586992c7d1b82b64e9973e7f63a0befaedb02b598b01026b8370acc3f6a4fa3103962297d37d8b551947509144b922a8a9cc1707dbdb4d9bccd5ba264094d195e4269ad298fbd47da3fa7dd611139440da8e24553394bf4cb87803d7b1150c05889f6df0a89f914f082508864f5cae240e5ad5da08c9d1eea4dc0c40cea204005f751e7a78e53c59b45b935a55d0baf293c6ae0ef1d720023076560a0fb85426e72c1ee88079402e3702b0aadb2c650d29560f6c55692417d9db538beae476e99e38f1c365a8472d1ebec2f035dc17043d9d8c5ac9ec58a01f7f975ee6a2d6b9033049838f1ebbe6c9e44cd2fc4c5b583ee1a782b5dd283b5fd783eb89800e25b48668b1632918ebd717d0cba5199c799be6e35cbfc82d3a3987cbca59e887a000cfd1c59873e88ca4dde132b6b074f90301c2412e19d23d3ae4b163ce58ddc896613748857b9579d18ae0b0a79d5f56d2b6b6f8a75eb1a4b282e7505d5d7affd3deeba2b09cba13ebc361be0e5cc603a99a53bbb20336115ef6d0189d62d9c657bd717cb073c0fb31fbe6c3316b439ff6110b32c4b3f9f39ea50e14f51594bc80716b3efb8d448062b8d268e745527c26bf4fc655cd57dbd001f3ee0ac21632ec9f3b51f845af53fc6ed70766776d38d9f9b41eebdbea3ab1b213fc2514e8da0a9b645e3d398bd64da24727557e1e467e54ca850d4c2b80a229f0d7fa6a870248fa68dc40d54497f4e7b5512ac5c0359254e59120ba865e3fce1cf9f15f6b5c5630cb2499a5740970a3a41d6ceb0d86947ea7dbcc93a513d932faea8050203880d30dffbe3694bb5f6a95d4726a50aa133683cd6753e2420ced1d224de920377755a3a604e5112e0fa10d2ef1a024209d110bde9797d8895950e629a076f5c9984d2eb0244d93c20feb6c756139127a80a29297c3cbf23a2d0308793ea61b7f620df1b692ec7727deae465027a186286c4fda71826cb9d52677d6896ee2fbc9732cbf21b72e45b00a6e2d47db5609aabe8d260449f6b9faa433e2e2b7ba31283a3dc97a27af8a0b01af83b4f2e3178205ff17c880f65d1b44aba00daf98362c2595b3386accbe8962f6ec2fe4b52a4ec0fa2226cde82da77653b072cd098535d3e90ed4d7224dcb8cb8b9314768dc517e22d7a79748a63fb7d076aa869aa8e5b39c2ee8133cd2320d798d31916a883aabfd9ad363a451349786752d72a81bac4313a5da9568c66d63cddad93926c88ac8defe32c967b936840a3e73f7ce480a11041634e452a4de0e0a2470c54a1792536b743e1f1f38a60bb03506ac89c88f9bd1d28f7676f7f48ad2fc90bc30f011da179f6dfb476a13ad3cfb6e0747279d42016d32c2422a5168acb5c19477dc69db67d24ae45cc80fd6f4e4027ea2bfc3a21768d76e40d66505ec028bd48b570ac5d0af3d40ebdceb176c917c99092b834a8837d5b0ff66b001354547f2e7da8537e6a8edb7511335ed288624ed06e56c99d87cc650da65c2d90d008e7629e169901e31b4be48f590d6ad34a3c11867d02e8c8a11c47e5e0e0bd7c6e7e4ae06186cebec3aac200e5c626f2f71dbaa3d6e5718f2507237a9f20829fabcb4f0a3122ce43ad82772c828fee2c9078358d087d21237fae0a2f42f5c782ea56d9e63076e7b9025a6bdbd672aacb3ed6e90cbccfdeced89965ca7167746e51a8513a0489026ae9bb06d58976421528be3ee89ae591d658519a14d37f71a908481dcf5563089c8b2cb0e144a39e5377b89ce849c62384265d13d51144a67b38bea76dcc0ddf980f35d1c9af02a7cc524c6bd6727a7a206b4536d5d2bffc2e099356db108e71a69e5ed153719a43cae2031378bc0a80f24e926ddbbff65909a24e91e3caeea40d6030184832745b934e64fc96d07d1b41f8cb1fb180f3a7532c77c24ba23662177c320e6f9c96d870bff88ffa55db35579178b31dbcbecc55ce9750dc3f6d920a1bed1b92550aa0a95d45326bf42cb57a402193e81b5db257b135a35e4a9b1c2f64e7a87705d89d864fd54eb0557983f32d4f26da47da3fa0fcd923996ac8e7ce80aa1be75506b54fbe304c921fc9870a8189d4bae53c5d7ad80b385548fddd2f96bedeaaec9ed24bd1dc92d9fb25a90664580552a08cf32b6d544a598c42e599cfa9578874a7dbc3b1638a4d9094d131fd4321681dd1e8fce23bc16edd9de75653f5f049922ab8ff854d9bb5871ee7d175d290c5071326356049055ce318ccac492910b4f02e514776202cdb87cbd32ff38dbb31045b941e0e047eeb47ba7ae4d9ce1e9336bb8ee3ac66a78539a47d93a0fd0873bcb01aff15f694e2b18bda452d6b84ac0cd9571a4ea6737c44b0cd44a4a9e055d91aa01f9ca7b00bc894d4196a88a9c7189194368569f88852f8ac8c2619ac9d00a10ec7cc9e382c35dc51a6bbaef5ae05ea2d7d78369e70088200b14ed6d214db4e4c3fcd63960ea06b37364663d02879ed0a385095cdfe1058b3fc4567bc82122843cfc67e3079af4a700f3332a2fc1ca113ae340eedf81282abb53354d0af4d37d9bfdf7870350d80e279aba0d3f3980e31294d2a6627b506d224402678623384f75642d7bd09601577bed637cbd5923c4aefc270a053a2ee0e9192641b656c1686dd14267ebe51121525db7ef36ab5344749bc690444814249435496207ea1f66c9c80ea1d1c877ea6f5e2fdb179a6fd117f639bf8c1f9086a83ac45f1767a2a93dbabad01ebab611177153d6ecc109f8ed9de90e594b24a5999c2f8f5149ebce1e2c0f692f364c43ef39ac593299923a89f56d03483550ffecdbf379422b6b340f8e54e38fc5bae15b0991d8659e9904618f2e14b578a604166cb8a366669189767423c5bcd37277ef83bceb124a9ee508ddb4d94d7f8440aae0d7a43aa60f2cd750148632fa1376111a75f7b518145ad46389c75cd48c341ebae8e23b44249cc6b47fab8ea41e7a64406584baa189e478b325458ff21e5ce66d54f3f4cb8267b913fdbc2c6be3e35d980428bf5170005a4f1ffa4372cb39967ab43fd3c6a90c22e0e72ea8bc144f6183ca4a2fb2574cfd89c24c13b11348a3658f4c64bff8f898bdf479600f102d2496306f884eb018d715c4c17d377708a1a03ea0340202bb8f1d8e32feef77fafb31cf0f55811af27b558fe0ec906707f5dd5ab1ae4746d38a621cd1e1d7ac4779f90eb013e3e8686edb9c20ee4673b5345f5c175ffa45ceff2e38dca5523d71055e77e84ff1a8f9060a6207feb42d9ec1b8bb47a595700c61f46ac9a5e9ac2641d4832e6634ed12e5848a1c9a73e533426c10a93b93662a57471b1f8ff868d593fdb8e8f328254491bc6cc54e004b011b0bd4d27e8e88975388d244b028f3ed902ca1ae7345d21c7f2492a885d3cf86dffa7049daf167d1cb4c18efa2d5edfcbb03a5e5731883f9225f941cee88d342f5ca8b85fd46847843036766f499b77168f55e345f0abb690fcfd9c8c479f6b3f0fe8f0d41f85ee93f31364111dee0fa4e843301a3a6d8fabbf7ec02b431ba585608e34645a167a334781e04873fdae5c022ccd3fd776d1c9b5a33714a4a9eae897c20c774bc2f44b72a8737c11735c262737431a8f6f84d4279588ae32f04353fbae0175bc3263c3bdafa415c0f621ea9d8c19152a00b1b35d7b3b60b599b7abd5779ac7730ecf8370bffc7b482e0690ad54d7976fd05f4e9f7ed894f44b4fd96d4860d338fd4172d3ff021771c512019fb706072788968d35c6e8b1b8af12c50b47da02d5a7bf7a2e983e4f03604e23bbdc2dcf1acf5e58667af31fc96d0857f79c90bc10b55482c8b1388cc5aac0df49ecd456104ec0977cc37f45ef2c397878700a6ab3cf0573ea7379378048721e900e8304d1adc332bdc8168df294ae0ed8ebd172849cdc33dc0688b6fce56cc6d96bc3412493701172b23f5e994e6e025d346c3e4cc5e0abe691ed730127b4c06c2a1b75d3a8cd1de2 +MD = 4784fc2495fd5a20178c7a8aa50686679138f54d4b9cba149269f191 + +Len = 25856 +Msg = 8f4754c41dc79bd76b8a8aa08ee17e15788b8c0b7828204b00f0e4e9aba5e4d17ec6efa36f0640c123fd5ea6fc1c407953e6b5e1025d031c26bbce4b23633c10e817575b746bb381987a508fffd7c1dd6dc78ee644add8564cc53b65b315f96453a1549534df3b40526a2903a0fa4b6a4c94e1c045fee624fb76f3df66a361f449ccaef9b8482126d836b1ace66e24477ab774170d3a76acb936bd6041f6bde951002c2e0790ae5ab144b02fd919949e7f960f94a547d016116d63904ef4546af4a597dd299d270568feee3781e4e594e19b7cde140f3c8b8883ab18948670a0b823b7ad2759d74e82cb326ae7b75d532a2c829e62780233a8e05ea01b9557b328e3544708aa055e89124670127b4603e1b3e87c986c6935f8ed44cfec0752cac94b3652d47af85c053df0f20a16e6cb8f97771fbdd2bab90010244e0ec6a90d25c4247793b0f9717cb3f998d87286d4bb40f730d9913ee949b2c7c489b8a4a5c3b7e85e4e3450c578dc290983766d46ed163056f5933aeb5a3cf6da66c78bba2b8a48ae0dee457f802047ee1309e548ae81e93a17bff9e7bb147738acdaa573e6a70d10d6c620c81de71dee9115340284e9ec844afdc206f5a4128563d83bf97b74ff2bb3a428c7d59971b20481a39dfab6ffdb9335dc6f8f53916a93ab9574725be5a8ab70a6a5339e0ce174357a419550ebe7fc4f904c1188ba8e453afb0b54c2882ec612e289bc5eb624e9180115df1f77518c3426c204ad579a816db5e6a713b1660d72249cfa4236236c1480425f8c6dc14bcae6fbef292e354d2c0a2ef6b526f78778b40574b0568504103eef9dfd93de42fa171f5a640808b35f440bc610b08b3d0dd9edb211dcf3baf5844522dbb35178ad0355cdc6acbabaeea9a4a18c16c73517dd7c3dce911495a99a6c758f93c1f5c9f0c6d1b7e4f46ac182220e912255797f06d99c4d3d919d15c88b1e7ffcd7c237279aed9f765eccc116ac96879add112e9d2d57f8a811da2156cba615b53be6e0f0f8aae62b9fe7d4af6bbfd64706030be99ff736993d55b68b5394b8889469ab92088ff4cb60c4e3938714e6f17959fd3458036edabd15bab04c70cf3b8b547f57f424311e4869d70b271a205fde1beec480030a313822170dddc3c497c7ae4685e1f106eb00e0965f735bea5bdc4fc5e33e7f71675685b3ea2f13fe64f17fe765f97fd9fc2f310ad7945eadab1bff6ad7ba000b44c045788f69ebe56ab0d04a3f645513177e6219bbb2abd2184432c4e81d0d408f1e6a4c43b4d0e170ada8575b4afb1d05957dad52f4cbbf6afff1bd608f2f781217fd1950384c5a408f0ff600d2fa5d8e1b89ade58345de69f3433c8537ed1b935404c6fc1ce6b8a0ff0d0f7824d93d79b98f01bc87a196ddc9302aa13ecf91db7d8a3b9089276359a5ab8a09692024901696911f27684e8d28c06dfacb5d42b239946053a695c43328f04ffcc9587a99dba645568b217042b9fceed8072097df302c1d8f9cba41f531e546996b08a65dafc705a8dc5463c424eb95851a9ff62c0b595a8a921e43696790582778b812a43b02b95f42898fdb10954b482b62c85f7224ff8eb147335573fb6bf017f02536265e49c1e4495c4f2503f66862f276410c93f4e120bf7782fc2e683a713947da19e49d17eb1b32e70c3c7f2ee8d6669a82b121cb080e79b8ab2f384eae1ae05abc9b9da87e88796c6d48cfe2e59602327b836e9691ba9fbe2808c174f51c587cb68b32bec61799a7ef30cdcc80bbb1d0a013c488e24d535e1ac1edf36ec51809b0bc429feb50fa5d3bfb6033e2ccda3e996809eb244ffc5e2960a31542a086c85137b69414bb0459f9b172613351e7420d8a27057e460187feefcb2099320b83420377e569e12062d05bea9c9ad33fa5a582041f19bccca141754c5d9a0510002a286cda1349b43f6800af2d3fd94a2e08578a801d38c4749afb10146ea0fb08b2af7cbb3a7b2ab96aa8ab5c4beb70a7de119f72b14351c7af88fe8d3c8b3563829f91cf0500e8987e5bc570e69119d6d1b92d3bfd64db642b24fe0f2d4f27d94100925f9d5f58a44b22e5b33754ad8587551b242a23ca11b4d7f8e36973383297da66b32a20e0a47a04f36b67bb947aa8f0517560088797f2aad452177fcf352e36f713d3ccea62b20ad8e19d4f367edd8fb776c69c78be8fa47aa260fb56acab1b2cc7c0eadda49c3b7a5d0296fc58ce3c356f8566064d30ced31b6b70345db992ed161a022133e09fc226be1a4cd222feb3a7c4ee990e7f2ec5076166d110fea2224a099c1ed7253e9886f8638fb281de1967acbd9ac724cf39ac6963958f2253b3a9b4413c571321e5c3d9f72ec195e24ff7655a6f41c7b61854acf1e8a1cead897c4478e37d534f8f2688608fc703143d9f164d82440fed48455197320daab98a0ae0ca7b0f8dd080f72d261c8c767ccca7e81f3a98a47bb3c781dedb9c5d7e9f9db1be6cd668ad9e7ef2cf3cd79421e2560257fe042f683f24644c4b169004b17bdfdc1e9a8dedd303fde55671050b68f58c7d385158bcd6a2216bea43ea54a6ed91acf923a49806cd76f0d423724247ccb01a4f47c6805f8be1c321ea1475683befb7663854b71f2586761db383cf652394b5abae22bcc225cbda56d5b56fddad2284cba345500553550199e9dfb9ac4260d6b44e1376e7b9083af2ca764bef8b529b912a206ea29f0a18b08f2f0803703d05d2ef42b8b68ebf6b5e92ff10851ca68521968d16dd50cd44ca6b1ac451f753cb6d58568917ee19f301f5f7c686a947c9e1ae33529eb0c80b4f4749f6801dc9afed52f8f2f21f3e5c42ba0676dc7a5def3b3cbb29cd0520f8a7e963a6772bc73abaa5d0f92f6a552e8babd5276ed70f809606cca4539800903a1911da1e6877f23c1985a9b61786ef438e0ce1240885035ad60fc916b18e5d71a1fb9c5d1eff61db75c0076f6efb29d12c53ace654e800ee722ca2ff98f2e6b248c8f31c93870f0083281d42b7d9639f4d50919c0560ffbca2ca37f69455b366d521e843113883110966f218394b2614b8ae972e6114892b30918ee4eedf4df611ad81bade394578d0218ed73d77f9983713c784b12d25a3e22bb1afefb73bc8c415c86942b3dd9ba002fa690b856493902827873cd25c8c823da841dc060546b500c53987ced4e441b13db4eb9eef6d8c94c21d4c2cb54fd672798000f334d7ae177f10f3b1b0ba7ad55fa225ea238ff3ff9d2f2763b852a76f2e56a2a74fe27502fed8d085fc841416691a0090875f8d13c2a6169eedfebcdfcfaa0949ded1d4684a7764713dacd81e6203c5b8a446227538686105ddbbdf6862637e02690b90f16cd7f89efd998b925247bd8c00ad79d0075f50c10ff2d6b2f16b49fa79f874466bded334c3b3f81d41cd2d3125fa5bca38712bfa0b096a6683a9b2589500470f4f763f5a1862e665387d60d29b97900bd18839d75a6a632c21050145468bd0f320868238830e1c123e3f9d95e8eae03cdd8bc381837b89abd2677de81301d89be7f5e5f78c1f63cd5cfb2ba2965d1305616211200ea6a48c9eb76f6a84ca27afacadb0bfbbfd833e999953222d56f00d67f56bdb84527b768ddd1ff2214e85d675952bb79910440cfd015d3d333f40fdf62c19da6ce6d712a8c2d5a973f6bab84c959e08adc16edf901c911a327fcb7c17ef62464ecc8008f64cd9b601288dfe389550d97f76c8615bd036e2b17e5933d1269047b26b3eff7f647242534dc850427d8a5398981b38650696bc39a4b2ca2cb9e904212bd9a04cf3ea75f2ce31557035949e7f902f0cb6a7f7d151599de83090b6a62374189264df8776651191b6cca6b6e1bcc5cc865799a2498105e435e6933e543eaec47dd012926e3480af1b5eb63845d89eba4d4fc6df4b51104d5b55abcb37fc41a50b96725284e882552a2d4e61f15a85c00aa614f6ff4ae2a1ff85bea377e49683e2c0e911e1087e498e41577a0dcae1a865656d2e8ef3e3a7cc7fb50f3b7e1326aa555e15ac1cde54eda2b7cbc3b119380593b8d020d47c29674a7957ab5321560c5eb8a80ead093ef059589c399697399338dd24dc7613ed7beef1c3f0ea29daafe2e1102f4267cf3e6c20359701c272b65dc372eb6012bdae74049b32cb917b3de9c095366360cf80e6f9dd067a02ad17085402751adf5fa8e39c26987fc2015b7c3d814c985c055dcccadeae8abfb05e44771ba12de49b1243a0ad4b8d2534b3a1401a986ac33a7e287b7eb6b86144321614079720873b949df778737d21dbed62b1aa4360fd368a01f306468d50313b88140c807b3205d5f88bcf36d81dc0b1c77877740372c12a601cbe8890f53f22a15d7384c74cc37e5c43fabf2583a9a5d77eca54d98ba3064cddeda249b6368f69d884ca8b3d3b36d1074034ecba5f749aa9ea0b6caea3c5cd1edcbc40fcdd29e96d867b4f6c36a660bfebbeb62aaac418e221c044448b0febc7d4fffe30fd992805c3be9c437b7610534184093b513e5a12b59be7b6218eafc11b920ab85e862e8681bcf829d44deaac8baf +MD = 735f3f0ec0f653b00db6fdd424eec183433cd77461b21c2ebb8a42a0 + +Len = 26648 +Msg = 2a243246bfe5b5ab05f51bf5f401af52d5bbaa2549cf57a18e197597fe15dd8cd897650f43bc034a902036d6c051a1d44684f9390e872269bdf795083bb3050c6f904217494f5d0506cc0dc0af77515ce3085760d76f9d619b0a56d69f1b0f2775799207d8860b04ee60695cca5c071335b08c42ae6f10b2afbb80a93236430474b91d86f9495470d046125218e60b20c3e25f889a6fc2838170da2bfdeae8ccf3b8ab3db380827134e5d049a1fea4ac15079adaa457fcfd9a922d02072048a67bde04d40e13db2ea3a56bea6e8d1cdfb48803dfd20f0648818a41d658c1a9bb9393eff212eaa8d0a5eeaadc8679b9e027cb63402e80288bbebfde50f9b35433c33f363fc8ed307ec02856c7f2acc4d8f63a81a5c090aaefda98cc17f1e09135934a9f653705bd617ebb3755b80c84eeaa3c27b48f28d39b5c7fd2d4482ea8e98c1cf309671895a16610152ce283434bca381b18a331ecb7ccdbba2f0787e078351df9d6610f0165008db8f477f84716de98267704913d6db3134acf35d2820a16b67b712cd349d5d59be8568052da786fc3107abb320ee398914b5ddaf7d6c6b84d3f85d04bb51a6ca36cf9047b42990421a1c8cefaa74103bc8480ffdd24d5a24c0fb8565e8d5c4d0b0d870b5ac7a0251aa10a48d34fb07cfcbfe1aa6eb45f5c19b1b2c5f618c2013c93a59ed7b3b65a16d7e72ea450588cb9c228e691cd8b6f1eed1c25fa9f750f9fc6fdc3da4c022c7d0c088a55f060ba5b56fcb82eb98162c18d9e7f516a9dff9b6d37844bdcad22b7081463cd78f08f4a43052a2ebe6abd6c57dfdae5c1605a9752fbe912a9dec52c93b4c2f6303292ef51ec4377256e098615883e9dece9a7fd3beff918fcbe9b457590aeb75f4c4bb048590bf236b4cd778d40b361325e6e34f1bebc431c752e68754f2ff84e6642f6eff38b87386591a688b04219dde838a43c0e3a7c532a06fe5d994da146a9002a0f63ca1f75a8de7dcd80f2ad33ae8bb5e3887cace705a970f318119b8d3c0cb27050d0a033a63a632657cc067dd9f2cfb0d389b9212fa124007182cc6b48eef8da63a6f4bb8630c059ddd60a0290f25a6997698d49d076844b4fa91d2af52f6215445301557145fd2fbb1aa20cfc15bed77e250ea70faef79e588c76116a565ae89adfb1488f03807099a0b7e144e263c22ec4268215d3e4bf3435c067d0eb471d0e53eade07f1b2e41e6e2fca92e1b2f24f4ebc240a6cb5778cace1754e76917a47b6965d0297fb52f38ef40f0b9b112e8accb7d31502d18e08f7c3830d809fc8ee109c0ea77ec484c008ecf8d997e93f874501d85e1ca0cc4f204cd83590dbceaa6ae4391f2d73402ce201cd245da3eeedc1817b0e428af90a2f66beed2fac5624cb5626912c724fdf261ad51376a50164481f034dfdf7dce02af87b5de47a26033bda1c2604277982dc1e59cf69594096e3c3ba42d34f3e7a1bea58ae37ae08f0c25865063cfc85bd0af7a180be2675289955e6164efae77f09249d08b0aec19369b847585c573d37ba8cf54cfe7366c573bdd0f0f6609f98fd8d9292d8e31c9337e20b45eda26799f3c59d5eb0aadc1377e3c0f952ea2e6dfe0f7f7536b5e09935bef8f47644cc8abe8ae0dc5c329fbaafb0fd59eafe5ba51491abd8538dd44c6935588d7fa534b322c308ef8b737763230ad1374606efe947fc5fe4b5d1c255dd2d713a902d67bb27585bbec3d52cb6dadb82bbef68b3e0a036e3c1e6eb705b998f8d2132442c4cd53122728fc0855adc09590f6c8e6c3326287f966e41a607a344f26aec524c0b3537a432749c4cf8317d9e5845dee589e2ba7b8bd33d2e010533e83e47bf90a24e502b27fcd14737e22099c103c2e58bdad51eca9f45cff0c743b9c5caf3bdb92865fd78aec73fc0f5d9926f2da133e1185fb17859c3507cef5eab26fd579ef7cc5f634e12e6fb3a758fd08d4be29832a4427cc08a1e7a4e876b088a6851fa054124a5d1b197454e672c9c41e5efdc268464c7c8b9be150e96511618944a988a8f9e0b281240e3a4d5973eb3842fc766c2afdab86e0be96425fa1ef908ab412fbfb3dd7cbe4b9ee3c6b8fe0daf0a209a6609fcb9326dbdf63b4d67544cdabd9cd84d62f43b1e3eb343772374efe8b16a765c77f38b4c5a6fe0323b52e941d478e253e3b913238bbe53bcf712cb31407cfc8f918d041089751c91e01b66464e6ce6ada8f2cdc04da9fe6fc00fcb4d967bff8a93af222110b0f8529fd64b53f21fea43f9c8f25f4b1f4c78c79377a57b0d8835c5836fe7b7ca7b5ec0ab21cf893af9fd1e6309674ec646bf54c5589fb7da9e786e2e72cb4868ae9b8bc36e22db6418c35eea9a401e46f32dafcdf5a4118b493bd7dbb333893597f24846bdb3b046517d03862e5183485ca81fd4d61d52c8916649b0bb8844d6404b3e5c93ecd087ab13535e4c0445748719ed02847042387fe10ad511333ff6b18fb62b7a3403d02f6d979b7cc02b717e69627e8607a9841a9462733d9a433bf1a4f8def9f310c9e373166446eefee8497ec47164484f546b679bb2c827174d07744c9b9992c019d10e1ae233f48680ee425b02a79dfc4e7843fcb9394185d5fee6fa8ae077db690124e93cca3b8be2779c715ad66d771d4b0eccb1184f537bdbe149d5580b2960799ecc9b932bd5b5eb734ca0791f8967ecb254c1eebb4ae6a84f83a189b671a743650b27172c2ba253b135fd191dfad56115dc1241ec32bf6d17ee19fae17de56760ee07dda75751b63d74993dce920eb421abcc9c4ad3ad3021d26233f213c3eb76bd646e021f691cff519b6d9a18bbedbc0b16843df459fb5579a7bc53fce9d991bf6550a74c938edf142b31e9568312d04218832d5f6ad59b2a0e1e6a00fe38983d330dfca67612c504731223120f2d4499fb2082da89c7db2cbfe0a1e6ab11727ff52d6bf4bbb3996a9897b01506450058e7e4a42e5ed7fdc8e38a5f78976b09cdd4365b000976438ec549f9271163ecc70355fc23900fe946a2a40b7c6a4e446ff8b234900965abb820ae640fd88ef02e78fdf080c87787ee23b70fbbcec30bac88285d6d6287ba30d1505a9702cef4d46d64e90fad16c0078f4ad2fd69d046cead21405fbde4563d01b74485382be0020b105096e8f47adb0de6bc09e380dd1b8e24442dc2856829d86988a221ae9c007a8b8bde20199eb0c61235a9e5d8b9dc54b9d1a11871d93a7df090b6665e1016e15d04affe8e15cfe256a5a317e2c05826684f8168b08fb919d4c289ae44258c680c21d02a5ac580883a74c020a5dbd92dba2696594b74eed39b88e2a266c1a939224c0b4b85980be0470ac8a929f3a59036bfa894496f20d4cf498be9cecdb67927ec26091875b71304d0835977ee057865807fc0b2679843f76c4a2c8432fb53a168ea0e1a43cd49fa2cb9d996b6410dcdd2e2868f469f499c5be8138ed6c0ed1a2a1fff93ec95a9af8731d08e31a176f81e9a8ee7f37b0e457d2d45f6a34d6f19998d878b57575cad4ab4e768496ddc6eca707fc25674b97a3ae06bc480e902271dfb4c0b6c5b8a7cdb0ac62be5ec66b54029022857d473c4facb2cfe54dececb1e33f61a13e859a2a4fb14dfec673d57e690be22dee163a925b431ae0972fa8d04fb2ec13448f4a90b4f798c482688dc266c5cb7d3e5b2b3236422db86eeaef5381c9c07b7c181197acd9f3be07170ca678483f01e26876a5da3a68eb39a148c205ee7f4849c2978583e2bf49c901dab10a1dcd3a7ed0b55393865ce78bd51d92588b790842113500d6ac8bd64cab6068b8b0e6b578165fc20ed08a3bda09064af64b6e49d97682801191ca0206964643f0ac2bd142cbee77b8837156a8cf7b627b88af7b8484f899c13cfa4b8b34e4c94e6a0d3c7343e9fb0d2992d67c7ae56f34ddbd1be7af1fa461f8ad114f19d46f2e64fb459e20cab2993d7f29c99decc7deb527b957675036707f5301d6a78dac1d47868b07e51934c93986df24cafa12c5996fc2784042c6791b7c8b96808916976c2f8b65034e0839985a44f27485c6761505c5aebc6feae8678a2d13174f25294d66b519fde19356f46a19d71d28598c928a418f5e200a4ade2c44e0ee586e5f85bc96bb577c6c9db826cc27374a5265ac5db48e881bbb1d09b38164783d38869fa1aebd8266fa9a6e10ba875574379dcd009d20dcab53eb54b0613247563a4ae5b67b951139d3c980d8835bea2e7f917f0369dace678b1259b342bede4bea29025b7bd6867d7ea78abea53987e190ed3ce6b930dfc8c74e832cc48e9f76ae8d70113df644aa61b10663ae949136220d712b09b773577edc6bad55161d7f1e04b9682078fe3913726e37fde1a884997ec630b9d34b9c38687d8582e9dabdbf1b38d0c1d2f5b20a683cdc11c530657dbda6986828aaff7a6f2365cc7e59cae82d98db9098dd9dbd1efca098a3cb4125469cd2830c23f9cb4d17ce90481d2f4fd833f92b3f1864b1e31825e101dbb046a6037f9902393391aea5207cdb87434c97a4a9e03a28af7f6139fc8963d42b586894e028af7d0563f055ebf0ad4abf74e8658e6e2ea0c67c25bc64f04e572ac0eaabb4a0784217c8bec4b18a31b9ec4f46e0e70360f3424e8d2a1fc425d73716c8c26d9ed14ac316666bf1b80d6762323fc1646e95a2bb5d240d8d639ed6c8c06f735b826ed9900383a +MD = c034c032abcff2da1e21f1c210355b929c6a9fd188232721aa13078a + +Len = 27440 +Msg = 515f1be28acdc061fed8aac89cc2dd99303825fe87e35a01d33ae3ff509a795a28982d6f9596adc84594c39202491e51927255d2dc6b29614dfc0b3d7a75de4907fdfd04c72780bb24c6bbfec20308505facc722fecfa2034488161122172eb3b435928a69a9c1a465169bf3231722fe5f8d81d733384e4d80850c628fa7f400f8e9f5e7c343f9eace2b6a5b6eadf4c459be8dd7c4ceb3a8c89cf51a0a4eb5979bc12c051d1eaff528ae301decef070817e7f30cf9b85b7de575da20db34fbe2656441cabf616b2d3a46f521e203e2335fafb95d191fce32a0b7c25c4a804d481e7b3b20f035b5face9cc24f9b110eaefabee9b16e2a9231bf0ab6b69f5b34318dad23eefac216c4aa579e8f5e4211e0b0bd8af23e0231e00a18bd1621ec37057ba3001c232f15f3972092c972bd75304854a507d2ce33a94b86df64195cde2db005da91b4a53bef5d9fa5e520abc1088c2a41d872b71ef348ff2488cfd2b10ff47aba37f44b0e20c47bdfcbb0347ecf42e8664d65e57c25ca29956a8b7739140faaa7f52d4a18ef945d48636a7f33ec33351c4ef57fd4a999ac39f39572fda4c83ea9b3a5c9e1c294ece99695b568c927ba6cc368adafe67d31190934ec8528e8dec859a6f1ef028dd1c94a7bfda6cde61f5d94079994443e603b95b20d5a0638310dd076e9cc1848b3f06862807360370bf8a91a680b2ba3e0a98055fc03a87de07ffe5dda006a8a3b67d993665aeae32644eae9459c03765a6bb066e20874829226cca5ec11621e11358356d6e0d3b3194940bb56d0347d75870f2ce6f2d40ef00b2294468967cbdc6250f3f88f846c8c0f91dac32e2681da0784f131482fe8a235e97411f0e05844f727b1f5ee63d9269fc78cb53f424930f2f6fbea92edd94fac078b74cc378ef3fbefd9f585d9c19000c81a5489ee9f20514f943a5975a99f79662298a7d3358e7692b31fdd4feb723a7eccc7969349522b7602492331203ca3ec80a5081c15c071f7879c7d2b207256cfe937ee9a106d88538d3e7b8805cb3283efc2787af52ef2069d94edd6283b5ba5bbcb1769bc1a71ce7f42e6e222f72f12b5177e559e8304a73c2eb6b9cb7351e788ac9b6a1500eccf1e7ceea73d65a1811bcda215d965acc2ae925f3bd1c3407d99010204e2c8043eb4151a401fc090b8690c6c226c7df43f39e970c301d2314e36f3d29eed19be038734f21390ae059ee7fb65e51f72e306265b72bb24492b44a6aa95a2fc9c2406df02ff8958d7061dddc314c4bcec8100bd0fec8a02cf3746334dd277d8f83d3006a7c80b3ee59e1c928b01280995d713452e6698630d5c3d2304128549d61167434ad6ff0b7dd2844f7cb57ad012ec2808df684d0faaa20fbff9dc3417dea994dd13afce8749ac3b5cbeb720d70ec9284c4b7b11cd4f11a54f51b8ec09b70ca01d2bdde17af1332a01788f84e72f74f95a99264c67a4b2e71b372e15e80a42714bbae89fac1d6f3986d3c60cc71df7857af2f266a3508cbd6ad1c7177c7e54f1afe7566fe574695132f6e32241815ab2f37e66c74afca71086470a5a8dbc490690dbb1bbec9e28584e096e2d1b03a36a0f640ad7244f0cc6b5c28047e36b299a38be80ea8a44b4382236f0951e4adc9414cd66fff8f2c2c9406aaf444534fd94edb74c64870e16d7f6a3f0c112ff0c184be003a5908cd1ff6f6621ba7dbfccdcf8ee9c90aba3551f1278f61bbfc93cdefcc66833b2c6425289df5e1251b39e5aa18cf8d8bdac79f6bdde8a0aec5173cd6fa61d0f27481ca9d8fcecb28ab97bf62fb9e8a387d08b4641fd35f6633fb9cfeba9aba3b6b967eba2e65504f0786c98ec9cf55acfb892f6e4fc7e47ea3a16cbbaf7995529c22c0230c4216e4a9978281e5ea6635e0b96eeef03ee664aea93aa22b76f8f470a72d5cabfd65a62c3a88e0e268427fc72a016aa3c0bb94bf837526c12b6b8d73a414cb7fffe2ffe9f03b2041d160e7095b6565ccd60a9b40c0bacdf2ff537a2f9a14f41ab2055e7d4917c476be481841be3964ede729f4fcd15a0c537b47670f09bc6aeebc534e50b5ad5213776e6fead2cbec998cb01e2e45f1764517bdc08c6369947e97434bfec67a3d8a955a6a7f29bb61322f23836f8f1f706a6d3d134247bb154cab5bd3f1ebfd0b5eb082a4793376674a56fad13b2d12af15d43bdbab270f41db910372b4a6a42002217d9a63708b63649cbc740ba09966d9f540963171f4be9dc0e0a4c1771e301790b1a8b87178fa0358ded87b7a125c4948c1bf7fc909e025b369e6a2edb9900166a57c02a6bd7f9923d89ae529fbe3c63765c3e08cad6ae5f115b4d36b04e4421bff70bc90c788a8763027e320d481f35973400e4d5d9361025aabcd8f8e916c38f62350c03589b3d88c0bffff2adb331790c0437b991e295fdf180bcbc52be2364ff069a576173dc332b396357d44180a34a13aa7ee5f9171e9961890471846bc538451c10795c8bedabb30443a510499d58f5e52dbcc5bd120b27e8d62eafc03b74bc39378a9c723da8f78abe086ab5f09c728fce008cb060ae9a803c71894c4d1c319ad37b7cbaab8acb9ed1e595ec238051506798971790e982fa3d22583783966de7ec34448bbfb9f8e88224da15be6a5cd2026c2e1b2a26a6fde12965a9654b38c78b9d3c0c029d460fdbad815849c459baa66498e4b7cccf32316ef8c97ca359e2b69eac66fb9e7cbce468d2de4df511b35c681f99bf43c54034d959bf4f079ae1781fdbc033256496a43e15cf52654c632b600962c8f250d1f353cfb466ddc16cd60812433098c44623159153de7cd2721b349f685c43388a74c2a3d04a8e972ada4199177c61657369d78f907ba26a8934cc29d3029d4415c1101e3a8283e4c48bb2b8639fe60fc67f6a57b1b03fde507f10efcb43683e1ae223851b962370e1f144b74f1f9189e66cb831dc05bbf46e03e93877a50dec40dde5239a0fd5022a15dddd0586c99d7d38a7653a037e758cc83d4effb2f21630bc3c3fe074036447fe6673aa5bf51130ec213af231f02851d7f6778cf2808692871220144d145cdfb4c8c169277faea98e0df92c187ad76637fafc46ec1f030d444e0f5f2370b39a40e90f6871ce3c902952eb123e824872f033255428385449fdd854e97c7f3122a9b3a5cfc14a838cc2da55c92d72441e0b8739de2e3142efb99837d9e3a89d1cf70dcac79f5b4a46638c827c6db093128fe0820e877495a781760057dd56c03333dec87894695b661350b95184a6fdf58425460aba6715185c5af68df4ee630d6410e50927dc7c93db0e4170fcba4a6ff33ecefa4f7489eb522c62a1afd94c52928a6aa2e11c7675c1ae63025d56412ae3126207ce02bbc76bd48cbb967f44abc5349f6d499111b5d019672f2de1accb5c8b4959c0787155b03abc04324812c006f6cb8fe7a414fb0d35951ef6c351fd6690cd17ad40743d28463aa30a9d80385cb8373343bb49ee82eb34f83f63f8660a0a34691bc18c26dbe14dc1a7e454bbd0622c7fe640763736248ee4912b6bae4fdfc778946380b8d2f13f868f8757f369dcf09b5799647e31c6e90b7382717e3ef8ce6c9f8e1a9c145f56194cec51852f0ecbb01e30db6a7cba8e956dd0d17edd3d916dc5aa207aa914dba3667d0a1c2ae107e6c46ba3a31ee9c5a9077e5455369657a18c1f5bf99af7154b63a0495e633beb64d0b483d21f3ad66fcaf2c2ab51ec6a337f5693c2eeef4e3acdbfd8f3e106be53ca72449f889408103d95e32a3425104923b5907dade6cc972b417d84ac28c9da3a0caeb160e1a4b4e9cf7e78e92b920c02a519d1e0c3d98b068e01b9cd8b5422a9ec89b1af08f28254095d3d78e438a3a38ff8668e6ebb3ee50e2b394b15a6539f799d467df13aa308a94622e73a49368ed9f3e5bfcebad75029c5ad2eb00994a21bb219d384c43f8d1902ce40140fef4cedd3f67bcd207fcf4795bc7f43c30d3c3a8fd1b8a9d77d69bf59eb8b59d0f464315f40cb52335debd0650f45b51de7f43efd173548bd852605121ecef3d56d5e0f616cb6463d9a2b2cfb4d88f05f4a5290c4935149bc804b52f71113c96683c3ee9f21458f845d18c31f1f50dbd15ddf96acec14941d96610dce6c61c3ca5d1935e3087f1651cf38fd9b2da65ebb4922b97dcb861128eeefa060d6c1c94b25eb4ef3c96cc3eb171643361e91616435a461fed7b0a924b17d7275f839c32f00bea0970b147f9c5f37fbb79b1acc154aebf7f8b999425b0694ebd57ad499bf181c9399768030aacc258fe74b488716b081e1331849c51316bb734703973443958c8fc0b3b7bf5e8867658ed7237baf8eee89779dc91b95087a72943b8c7a039f97fcd36ac11500bb85e774e6b38e280cb8558cf0202a2905595084ccba54465cc3429b42a718d88c077b602101a9c85469af39b856dc1635e175df5b29aa56f79bc9e0e470b22d24768b1b2f14b5d88b88fe479d7418a6bf994a6d93e2657996a4fa69f824ca49ab5a7e6ebaf498a0dc9eaa7f4981c51fcc0935f619ec6bf862683b0025cc48724839bc1e67aa3c686d321ba66185cdca83ba9f41984fa61b826ef56b136e13f1239dadf6e03d877866ccb887908917ef0d33f117b614fd291e3e91736b15150e650db9bdcdb56317f0f5ebe97c938bd691fc91401b42576c606175e0d5c635103612483ad51bb78f33331c93cdae11c6389ee98470e19e2a6e5e0b7af88b5b41bd33c236a1766b265611b14e2cdf91092aa05fab5dfab9ac70bdba097d6b6fe723f88f79d9ce6625811413e24130f3e58e8a5d7c8993903a8f07e9540b6f5a4b8fe917cb242b92d4de +MD = 5e82f3d3fe344c0b4c05023e58f9f81efd31c8caed10d535fb800867 + +Len = 28232 +Msg = d0a43de391d492746ecf322acd6e5bd78839495c4b38b51d3d079cb2e22941e0409e75c740b8165c582ad61a67623df5e019f2902b2836af489db1efb60e71b5932d3064049dd5d3d7043efe67623dfbc0a1e030046df6c40e45ce5354d242e61278f422a52cd8bf3485f33c961562d170f99da69eaffd42d5287c46861ebd5b05a84c69ea0c260ab8d47c3ebc24b460384ab158c1975413e66d4230129ae8fcb4e4bda19ce5c79aa81a616aa1363b8e60bca2b035cc021d893da979c1edcdb26655d1328361c4594f7e2b2a0cf400442f76fa14c1f70f4a05c038895bc0746364230f846726242df42961e5c7050a6beea140ee2fc08480a41d77c9a8bae3f8f775ffff10dcef00de428b02981361e9e664fda545ce68a9ac7dee9f7084245a65732a0c462c2eb956f231eb48c30ea85ce8b8a1cccac3ac660726747ac53f6ff6471711d0bee840a461dc079fbf188e9b54f94a8b5b9d711ae4a6b18f263a21f4164e787739257d10b613be64af8785ead149084c2affe0103bf6bc774f1f57a50b58a70345ed58e21a5f78613a647490872e43d5dff0e18f359ffffae7f6f9534bbc083c8b49b961b4479d5c09b642d69d3263ef21795ce0fa28e0df97c5ee44010201e9b34088d6ad53951ec485d9043cddd06298a1394cb119c9f0069620c053b3fcd465dbad892c0bc96f12d920628bb6f2f6ed70601983fb21f3dc707611695660c3482110c25af89f169bbbff37b3453273c8eeb98f975450b1c35cd87e6c73957f041a99c95ea180dd08325ecddb12f6a0d0242df816afbef261602e4e849303d042ce31e5618ed58a0147256a2ca6a746ae19a29a2791d37e5e8760cad83d127daa46be608b4804e62d013c57ce88ae2d0ad501bff384f71c63d6573a91f92a50e3892980035677b935688cdce840711d8a6133ada10f92961857f9e6d64fb30f969f5b8ef24094cbc084fb40a2575aded9c41fac5abb0cb224112f15d0c815836a913bd17f8fc5e3775e72cd2554d0379d06ac06460ecd39300ce210a7ebb8740866b093d3ca71cb02fddac999bf3af27f30c4018c923df2e351f820824004aa1726a41a1579ff490869197d262102d526494ee755cfc4a7e6e75b8b895062ec40d9feb06e25d92631ab1931f2008fa93b5931fec84ccb1ee0d6f199e6a238032b88a69b0655662927cac02d28e749356569578f0e91b8207a27a494bebfefb87f3b832304910e1c8fcef8b8ee5b98434d7fa7e14e26f5755ce15ac23c2df0d1e4f87f92916139c514c0a81b6ce6e4999aa6093eb194e8e52d0cfd6d8576a21604c9812ed44e4fee5ca7b89fcc0f9500f5e365ec5f62fb3895b174dbc4216c5184b57241f6dfb85d0f8b0f89335e13400640a3347f1895353ed6a7541fb7b8480fc438111e9ddddbd6749724cb5cc72174c4ac5e393e1da6cd867e22bebfedc44bffbce7750e242f596b37b7bc90176be87766b2b75dfd51edc6e18ccac1728de06de60a23bcf6233f77d7892e836ce50962ba781efc9cfe44a0b8d96b46b16b77179fc44f2fbc7d30a15fe348bb2f59808c90f799a462777a1beb52c8d51126b803cd5b21eddc06d6f0b80d32c2c68df4fed1784ddcb783383f623f0af6fa854a3b5918c280c086d66cc84f15209b490ebe6343652c03e9261506e85831d452d6c72c435a70cec5db1d78f1195b145776d630a0071cae72eba4bd94db0f085303ad2d241043708a8b0cb13a65fd9b7ed34d1fd75c3520e62ff5708cbb17fc517af743020d830d9e8e405974228e9785cd2c172f8bfec20d9c0e08191fd21913e2ad582779b70cca8dc159e5779470350d7a02f1bc00faaed8f96b812fc6c763e4d553d97b68d7d430989ad58d998d563b3fc76619c131938bbe830c157d6f0728791b613b1dd5841ecc038e8b2458b0ff844ed3c7cbd0825e633604f67f77c855a09a07e25e6ea400657b579abe380aff507f83f1a63d44f8f26eaffd52496e1353b71298b40afa7d6cec77e2ed952de6ab42bdbdd8e2a1037212574f804bc10c995acc84a511503ee83d378a3cd8e25a9d7fc853eb266024ec0a421791e789e57a6b7bcfbbeb6ceae156dfbb3067ef032f1eeddc67704b05673eb87b0b848d49fed368a07e01162a5f1fb79c53ab1c8b68077480d22a284eeb9603a3788996de2e78db2075b918a66b8006562c0c33975122a566b6bbc0a781fa6ab85f606c4c11431b77287c39050c61161043f3fad2f058c7b79a8bdbb62f5234e24970d73caf1c72cc1fb340f04baa2df321c63be14f8f249a07024126ff86aa48bd219f5611ec2647e3c4f60e2e4394274deebc6f76b002388488b99df97e141343db8b413e998012fb192308c01493d34fd446226ba4aab999850cc32422ba6a630664a63e0dc852ef188f850605711fb0dfa0a238516444ce610242885be376a60af22c1a2e4632482b012e0aff7834f7769498e5a17801ac8463bf2d0fd85f9350fd7cd9e642d88db942abd3e8ee3aac03e8ac787b2d19ba56f7e51c27e24cb33e4d3d831c036c462a1ba369aa1c5858ed6585fbc6ccb4804086595c8c47658c3da91821b8d217fbe551bed52b4ab7829cd3cc756c9df987a8d7c6f5244fd4a8b6dbb5baa1f7003554afa51e55c07fb278fa28ef54e81156f7b3d2f0d944be8f0fa9bb56c1ba517bdefc004c0ec5d770e9a1427066f5247696e22554926c4ec7b2dcd3fdff622f56ebff766840a2e7455792c1008a0b596deb2c68293711a9da053ca4b84339c44de381b078d2a0d8b82a934ea7a874d8c560594377af79fa507290d78e758538e82f4a5687ac05d252ca6d916ea876ca055c305d47e4ec67af5fa213887e8fb3af35220f9ab619fc999fe8315c725a57b6477a5fa0bdb41881363801ad449f5c2b5ed183bbd8267f1712cbd77aef68a65f88fff08b2218364d5e1b4805b0fd5be3121e5bf1fa72835489e02acf05e7e0888987b90ffb5fe99c3f139198aaf0d95fbad33f4504462fd76dedd3639d212cbab1da623430d258f541e7846f1bc1fe28bcb6d6bddeeaab2827bb793ea05cb37b68bf9202aab9ace0cc61c891e9b9f1c58290c96470a620cf1d12c569f4e19c561600f1824f5c0ce548470606fe1edbbe7228bf3fa3c2b654b9b95feb83f810d0236328bb0802a18d1d62e5d74038e39cf64861585d859440627aeecc33e83773f8b1dfb5bef4935fb37a0e0b995132e675b657b68739e31b7f1b1a14eefb38c6fbb1bd79577b09e4735728aaf0afef24573b48610a24ca6b7a658dcc9b773c51952d6b0ebddd2ba2c3c0dcbd2c9b43df039fdd62cc8e72baba20ecfc22a56a9d2eeb917cd66222230c7ed24a375d569de3aabdc0b7c1028fa714e2aa6bcdeb312fb5d6cc8c5416efb75ab15cf83d4fe95e249083b204a373a90815e05d37e695fe51e205c5f92e8c2a1922f857835648dcd400b4a49e7ded28c62da5e22a845205875e2f6b9b9384cf86cc283c769544c583b35977d8b7858c14d302e1f0edefab21f25365806d5f0d6858f38f5f316482f9517d12fa7ac33dbbaffd43cf48f457e545789bf0e3a34b866d623886553079fe83255d4ced30a48368a1ee10bdea739d00a6f5351ddaf3a9b47b20332731135af15b401539532733a6f3cbfa7658660fcae55b96448b6c99d4482daecfeeb8d44226a39f85b42f9513fdc2d798c698044c3eb55a803f1e1e76d1483e76f0d1361e8f6e30fadc256f55c6bced4ebc71432eb8ebcaf87d7100421d5a2d44bdc4462f9c8911c0526f8a14569f86bec35996175ce52ed5cdcd06df3449c160dffbcd1a57dc8afe9e77aef9b655e81062b8c3af318cce3eb79afaf61eff43f3dedc928ac850e2dc49a3a2abedc45b6d22f6939f3fc6f15cc440a22ee362fa2440d15f25f6cb6383da5d30d303d629fd8a7bce8f8e7ce0577b27c6308c5c301c8f41fa93e936531bd90c1e19017198e722af3c262797e45665b730a421d42b0252942c7da97afbcbcf173524ee7ff25472fba40d11fd43810859a730a8b135ff1231bd8b3f7da3bc43e83d9dd2e77d6b03c5d0ec54984501ee73f27f2bdd943b56827564b2299316bde6fe2bb59182555c76866af94e34fe9f6fda37b13f90dda6ee1cb10a651200c5794077a065483905778f2f0609569fa2b3270143bf730e8add79194f1869a2e409ca299a4b1940872fb3e486b0f50d7ea9a184e84583f58bb755458a2ce125a1fe65e8ac2b3b916905b9317e2b5770beb70f69a8b90abb30e578dcc388c0b185c1d95cddedf75633636bbdf862c4efe7473b578b034e8702cdaa8700144e6d17b8ee2e357995b46eb08f31fb3d86b283c0ebf79a0c988288d8b3ee4bb8d582df4c6b06bcb75dd5a153ee3490a4e4e2198ae8f1dcba2fd34a6e5ab8ab5c9b1865e51a8b7b9097e154b6506fbe7f25a7320dfaec5af65da4d0f8688e29e8e95532ecc16679ea8aff0f407d898db6922855b0e8901aa9681aa3dca617cb440764cdc7293fbeaf7f585b593c2b0531738e0ade7c8626b9995f4a84d9fc9b593d6bbee01abc53c5be14bf6956fd2fd81000dafc7c768610389b4d56cce4a10dd3938e9e5c883f168f5ac4d894a61294b0a74b73b10740948df535bc4678e4491003c468b6498a883a52f00fbccfb64b9cabe7abe3e25e2fdf96881d0e606cf63ee4e8a8f1a83d050626ce74961f24e61d33360cdaafe7c878a6d1e1ed4341faa35d82c5d54c5f743dfbe370ec3f634e7967bfff5d15e4469e4c956fabc96c3f87971b272adef8bc25fcb96c84d67b69f8700aea36bc5c939ab05e31109bf4ab34b93a36b80511c7064ed7ce278d7521e4769f362b4d5796b4fbb38ee361e128f1ec685a476ab07c2a1cc5ff9d0c585d83a0074c0570de3733551deeeec23b9d05582cfb9eb4e0c3d88c0c68aefa2c051f17c9928bccf75e61e523b9f7670bf1b9240e81868ca68457c633702200fa00fe036d72870aadf384 +MD = 4400a4675f4a2f3ea0ba303ecc354da665cae6fa1a30dfe1556d5e39 + +Len = 29024 +Msg = 96e237bb18f47db8f32eabdac743f7901932b8e39b76cb4fae7d35d1265c09414dc18de22a29983803533e1920f4af07d2ac5dbdb4395d0831eb10d846570297895012b96b13d495bac233736a145be6944ad65cbf65f4f35f96718e9bf6522953771069621af8772063d20f2b0bc1d468f46ae7446258b740679f1bac9fc09eb21ecd1997a7ce883e1e6216ee40aa7a54926286cc9751fddc46e4a601bb169eaf2d92f293201c6d1bdc2daf381ddd7f630c0663de6ea76d3c1c865723b31ad3518ca71cddefabd1bf8379039309248d9a4a9ea3024e21ae67cfce5799ed95e2a02454befd7a435a33fd8f3a866c454903357271c09f8969654904ceebd34e76a4dbe1017c2babb07e30b77b9aaf095da5b3caf3a1caa5453f7070e4a2cc0f35669a950ce169ad7ca80639ee5538387188aded512c353eebfc2e5abf453f9ec7ed4aba08b49b0f66ba665cbc42709a2cb50c24b4ea491b02a46a098a5c96c4d541d1961c7e2b9a15bb37690de6bff63733b6b744616e0633400cc66b703849076b197171c5801632b363a808cb8e16390a95ee281b0dc526d6fbd98a088df5047208952e14024b64abd161d67843c0db43901089a08c218271218a10acfd90755e88497cf0190154a969dc9e7548bdc5e58e678e7655e2f016652125e4f0e1013880d483e32dffaab81360894b03d59ef879396027ced017cfafe5f039ceb15107d77f6a74a60e0dddb737bf81decf0f8538cf263b61b2a0a3e71f9a32ffc80cd377925a2cecf625223da7679f3f75bf92b37109387552329bf6174a58ebeedba447557a91677f9b8e8df9aa2d908d572ad26731a8717676bdc2152931fbeb66832f0ff32d807017299075afb438e07e527df8c512bfe7131334615f4795865477170aec889d9340fc2c629fbc9f36dd149c6dedffc66db2a53442132223884e89e78c8e2828aebf0e4a0aa1cb2d571b77170ed3f6eecffb79ab026e480bbafbc087de0097878a3b68d3b3de6b4a0ae183d6239c7f9fd795997fe79743b7e10424e0486b5d24ef5d10ada67d235e18d741c1f47322414b290d9a3ab69b8dc810bdd811f70065a5cd10c22ba77bd14aa4b8c1c97e683cf45edbe242f5d6f736c8945883cb0ab4733270f88984fc0b66f1f1bce9e5d8f99add0d41497a7e5bf2d3b049e4100378223536390a3b2d753465f29b9dd1fbde054eab9e956d1a23c5db19917ded71187a7d6c6cf4f597757ea9c5472d6a5754fc57bbe06ff733b67785d81a968bdefe43b3197990d9c0740a6472a7e1d776c449a347f11f40507cd07bf4ca7712d191457e4647261032dba13fffa20041e094b2d856b8ed6ff9dd9865758b67a9d3394887fac0fec175100be27622d4cf1b2e009ff11d21acb74196ea6444b0786b5e13753dcb5f150f7d10f4de0ea3aab1f8fb9f1f080221101093b3c8dd98a821686ff1175093348a88781e404db6f92a5c6a81e861d9f38eb25768a93d68617dc024a39138e0456e9b0a07a3c955e50cc016ec5410ee4db990aab00f4e67ca08ccfa32b2698f70411d8f570f69c896e18ec8896cfe89551810543303f7df0c49f5b94783cce7df8d76d0b88d155633302d46003711f233339b1c9a8c20164ec8a328890a4932b7d90d92d023b548e4820558f8bd327010929acb8db3b155b90e3f10a151c9b623ae4ca047dc32e6d35e7ec819074a4d14be7329b37f93e475a22f39366032bd49939ac1c6bd7278254c005d0c1c3fcf663e90feb5f8ac0ba90cdd6bf13d6e8d51105fbcf5d05e4605d4f3de7905fb3f2f9a57123a26e5127ed5af6e7af2636e64ad045a7b1cde98997fbf1407c864e5965b322deb1227401b840f097887fbaaaaf3ef6301a9dbb509d4ccc75f6f6408c408881670c358dfa8a1640693021c884a69899f2e803be67e5c83be2901e2f1e029c096704161354fb5162b746db04f6c983ad5aba8e873209d4ac30c87c5e91346447594952b8b36478d41c3cf9e483a066bcf1f29c8a416218a9cb008f73685e87b7b83c69d2885df300f2731cebbd93d8253330cc5c08970ac12be8c5f205d96cd6fe5dc9e566505695f499a28ef74c5e92a8f58c611a01016edde1ce5f1c4d9a21b64e0185bfe42a0f7d112942e3124061cda15b2dd848b32f5b7be71efe1386245a6d9f280771d3ba066a2fabe38e443f0bc4b736d5c6967f2f27ceb64dd3b75b653cf140df81fa322b05042e8b28c0770df03f00951301cab365e3b96df6a443614ca664aabce4045592654f4c7a5b962e84511f98b6abbe92c6b4ace104e358d91d3cf7eb6b57ad1062c182a9eb6c38f8217be84319eab747cabfe53976eb18271f13af34159ba8d616977d260478cbf5383dff36b555414cd26406f9d5221de5c2d8cef7544664212e5573334e17cb903905c8e63161e91c7e5f9684a83eb69fc8eaebb79fde8b8c1a8a296430bfb473b461d9d3e6971b213ef0f87c58879ebf61c889f760ca6b715bb3e43b54d712fa3ae0b6827d6b540594c6c1437e9312cf5df02e294fa0a07b6251582b12f463ae2cf0c3744e652044005f657c72f7df39fe005cefa4d7a6f4dee0d9b5f3ae230a1b20951bd20b0c3712197979ee1c40a9c2677a9d19060b9821f10d5e8f5aed9875debffbb0d374894a8361ee3876d3795b942bc404823abfcbe057a74e810fd3dda98896633505a50a3ba32bfaae24332a24c4f70ff2b0e64d6d3d02a9c71636a31fa37e51c61c04d190d1c5ad18af61ae87faa893ce0a9616c642033983ad4b768f8506150d44334121624db84cd17f693c114b288aa469c8a9fb1b764d118cb89791e01550fabad96bd916b4b13706dacfcd7136af1abbc376ccddd89a0f7509b67e7eeb57cc05faeeaad31afc4c728391739d56a1da16a7cb3bacd8e0d39eba7a9f44ff88149f36185be563748e5ce45fa83201096f04e605cc1b0fb82a546b4278d4da4881010b8760d016c089208d58dfc1be5c4600feb502aae59660409cac9fa1043f8db5fb9a5e25bd46a957ef3b8eeef7010b95625753dee2f211edcf17782bf5c3973886efb858cf9d7b8d7a6639fc339e0c2ca17b44299051bbb6532196e8278b3a032df5e3dbb63b8c1bcf77658c0c99d4414c8f680d664bba34f949706831ece290513b75310987379d4ecd9610ea7b008db402140ced26b9d4020d992e7d6f2d8ab12ef0fb42272a8c8907402d45b7fd3c8881ecaa8d99373e0ddc75ad9298773c9e4ecb9cf891b163fe82f833b6e747083a7d6668d0199ebd9d34aa67f9df5c30a9298998853d88ae2fef32b6a67f6a5b3a5305ca5d1e6ced00a48bd01bca4901322daf7080a10ce59d9a64489ce6c3c008b13f317d1e2e3708baae8880efca28f9f991a77352aa84b813214c22c40fb146069740c89f5f45e5d596f3c1a66c0240ebf4bfc5d90e160ff7de43b08d9ab942c1927ab8288c745883c9a446848b47a7933d2bf09a941415a71fb1cea9f142bf70b541d430126cb153ab0c8800b443ae7ddf7e9c1dd8f969af5a38e5afafd7fca27438954cad7980b3dfbf2eb18390c61a502a20e949506c8f022b9e1522f38ac553c183e49a255722cc1e830d65a97ee733a117636193aea4cc1c4060f73ffa67d86f288e851aa52ee4bd2d7ac7184962fe85f832be4da0bf0c8d752998f7cbf876a3eba0eaa3eb46de1d96804447a61c154b3bddcbe8d30c47f1c4c594b56ff5b30255d2277ba9f90cb256c459d225811c636abaf6efb63b02db87cb571356ee120cef88e7ec51c3f50dd6bd6422482088610d50dbecdab9c1cd66a16c7c31502816113b988083262b929eb21fb27e88cdb68c35f74ab1170929c9fe517a5fba49d08360b5c2be9e24e32768d92d390860f66fe0b593c9b14d832a288278628b0bae9eaecc4d549a557209382cdd284df68340d7b3529537036c1fb69bf0ca50f212cb6c486ae5b941c1bcb6876c9cc7d2ff77815d019416df37133eea9df79a71afa23fb6b5f2697e54aa4a853636e4aabdac843f1b56cf15969d181aca8ac62ec7bb8f93b90b297f9d5a8a82d46742d2602846c62a5dce5aed25d898f0f4727e1d6fd27bee8087aa1e55fd1cb1ae50de69a34f7e99099323bd35f6e1bbb51dd3f347aebbb102f2a25a2508bf788cad434c8604e4f1facbe489560971855d26e4fbcb8aefcb02f8dcd33033f77372a6958b491d85bf91c731d40e86e4e84d3c159973ed9476f118de0c0005314d10db49a884efdd7c6f13801fb7d5a84f15abea5ec94d265f5dc11a873d03196fb7c9d42692025893033f43eeea9c38444724d7ae443031eeb98006b72fa3fc55f7d0c97818eb83bddeb911a42f3111424205622a7d2d239f94e4472e506e769a51be9e2f8201eb37521f6de1fe3adfd396ec1e35cc9a980c605c405f57c9049755b1c6bf65ec0baa1db0bd1ac02fd062c6376062bb1efb9fbc5686cc9e5a12e75478d7aa2d104170923b83d12d76af9a5075ed23d100cad3f9618ee8bc984e050e62557240053945400e56878eb5d9d4b635f91ba7168243b81bcd460aea027ac40ca4aa57316f72a7b7a9b07c43cb9c77e6289ca596be6978d3c67721e5dcb325e659a4db3b309359a5f1ee7ec7016c061500493527dbafac380ece9a023938947df90434794921a677d393feb627cdf120f4840e306690c2971aeedbd5a4859031e74b0b71f5a84eaba34374779b2cc9b899df7956ebc76caf5f4a4fb6ab24c9b0c8ebb8cbe28192aff56f98a1c822e03a44de0ee1d78e0abf50539e5bc99081690258d4dd8c5812f35e9aa3bb5b2ae534a9f25787b68f1d65a2ad200b6c5357c91824d82d4fa6501423375e3ab0bf39262daebbbf15352520aab98d6c1fe7cd6f9ee24b41c8d6da9107d80096655a6c8d4475d3ee500ab27efd0b2ee460b852bafaf3a6a1746402e850ef3354e586efe882ea089c038a35ef0e148d0abb5f7839b0db62c2def87988b30f7f0cbdbf43b65d7df24ebc3e2fdf42584055ac47ae6a552c082c64ee9ef0929b4c045a8df8755894098cc69110fe5e58c14b900b85db5c482f54a2d0f3ce64251302485d8ea408deb6bcdf2d899aa698885323056efb3ad210c2152a0870cc3f6c5d03b876d0c2c09 +MD = 1878f939aeb1f29193f9b1b6fa4da7431de33404e3027537df537554 + +Len = 29816 +Msg = 5a8aa485c316e9403aff859fbbdf00219e3b15a21cfe59750f261db2f9be94d1480c3978d80b6b92ba1c5aa134f8275508e9475df93a297d8ceb18e10caa62b1d0ffbae5c1c7db5b16e36e2662312e2ad1bb4ae6ae2f0a902990b667582ab4457bcbf073843081c2d7be89d74e735cc7801be5e443c746d66f7bbfede527d1b5d0d8a3cb2b30a4f08414725cffa4fb549d70e2ffbee82476e515fb1abc87022a588f9a95bdae8d0ca54cf25c7dad51fbb12207e0297ceb9814c63197e4348fcc99569f784391853fc2d0d180d177a7e243991d2f8b6ae46682f72b0b6514c0c21d96781cc4c3d2b16407d76f02e94431db3ceb93ed9a5705b90eaf1f4811dc356cb8ee2a482bbc891259cbd118ea721101753bb556f48ba04175867b94122d4c0c22c94ad8b18df0552e77501c6477aa3eacd33dce60ca5da09278c651fef930873ed1237a3d8b0db4eea192153e9c2319477cd25ec65a6460cf4ca887bf89086573ce5e38b70009b701123f0b6029a41baffe1c0c0e84de0893cccb3f3c25fd2c2887a21a07320be6d0920006b26657ca4c21c5e22090f32145bed4815d153766c7c59827166a3ccac1e97d0f1b9a62b186ad72e8e4c6ca324feb6e530aa0dd9ab750e867caefc3ea3dde5d2d860fed55c669cd25436e8cc3181b3fbf2b0f175160f039e20c0bc9cead3a4869d80b2140721e7ea123cf605d0815efcca8aa0f122a6d33a1c50476ff77c5e8cafad725f9f4942d646e326f8787a3278269b9ea657d8e7fabdb23f1040547e258d4bb2208b29381770adfe1c9fd8b8fea5784d3d2c11cc50838b06365bd88e11b4efe40f616e322e1e11eddabd296ce0b5853f0e25ee0acc1c2f3f3ab094f8b1c51eaa649864bb9aad9378bb66e8c8dee556d691cbc9fdddd6333ca5d50668862c3c57d8c6c95eedbdc7114713a357399371b67094324006402ba0f03f99381f58ed8ec442f87687ad116a0649c592916e4a5122f5c36bc5f86ceeb266e9f1ede986b1cfb37ead0929f6c5618fdbf566d465391186d9cb9d5d9b8864d16520624cbc63538ec85cd2830bc5f14c630a3a4446c0d4ce01fa0cee2c007005973e2cf0d305e84b62208466b4de3e05d74b7c5c53aad511b871952892d97c79fcc59e848f3bf66fd8728f3386909052c533cd7b3039ab1889ccb6ab6495d2b5023147563558166297dd6387f56f90a9995d7e3f510fbf48d255f1d515a82b3d441ba81469fcc0ca2ccba1c285ddc770e0132f073a9f9a094ec7c7442a92de894eef411d918c7e1d03c7ba71cc6dad5f260f5061516bc3f04b7cb75717e8750f6f16a2f040a9b6c1c95c2e141d91aabad7ac82dc39e6b58454ff42ac721b8756314c3e2afbb6f35ec9e36d380dec581a717516e658a2e74bf7c9e9b2ad9e7df441da833c2746cc5a9208084c21c02e047ff3bd0e3222f1ada0571cf83ef3c14ffd5c028257dbaa3bce447fceddcfa4ef7f92c5c25ae93d2feb417cebbabe09efe04b4ccc01e80578baf3444ea66d4551fcfcc1913768525934f35a0b855fb05a7722b247b9fe76a804cef63a202b97d2547c50f96c22b99019f764e6435b4cf64e6ce3a3f47166302811f61fcf8d14d722abc4694d9adb8b06c7fdea69334869c2a4515f26035ca78186c47df8f434d6e3f5cc7f604340a087efb5b65b6a3b1b60437bd7e306e284cd7801c3510380581504a99a58be816729c90ca8be728d91c3d4c3bc900e704e58700e8e5c3d7fe142331c488b6f0645490e635ff6eeb85359d2d96bd17c8e6abf097b3d7f049bf8d82b75186cc747c1720a6a3a993153d69eb82d641bf3a5606d9eb86f3dfb5d05633844789179ee72415781d719ece8a20f1f2043c3e65dd5e0ba46821d844bad5fe41ae78dd942ce23603aa3fd63df2c275262698dd70021b4f6b6249221e0474ad968e3a677ed3b84df052fb848bffb740c6473ce4834ea56be87b53066a369a062af0b9fd85641020e61d8df0df39681a796c109bc8486527c2bb27cc51d9aed3a6dbdce7d16851798e14dd6262273bcae79ffc496478c14da12aadbcfa741adab1588b6c8967e21e903ed4223c51991ab9e7e838826622a32fd1ce1d8d8f45e4f46eaed5d5e72dd793a45877943febd0974dbcae489bf1f311b7703934b297b817252e6ade72996e3f4c52ab927a97b528d760f4de9e9403f2e47c5615667820c185f173cc8f8ea93e40ab0460890791158fbc526df7759b7861dbbd583250e29a97e038c7c77452358849cb23f4a12c057db90f1d2ffa854b3573b6269f87c74b62e301f6a0b42fcf2a16470644cf4da1a83d7515cd8d8814682e88a73485977ceee31581a4b409b230f9c22e00f8be911831ca7e59956b7b03f37d0279b31ad444c6bd915bdda786a1d982c6b083457cd57e577f5b7af7270da9db60f67717fc6b76414e4c97d3f486a0d0f4dcdaab0be80a64415ca3f4c18e3aebe8343a589c6bd9e9dfff4b53a3e635f4e00d64b7e558bf39ece47a2af08f8df5c3ba65a35b4dd9fc6cfc5ff03dc98036b4ca8933b22d841da77966605d168a4118105ec1e1185dc41fcc3d72673869de959cb1e51c6f405a9aa5cf60b02e191610bf8f7ad7d44c871ef64ba1cb39d833ad0a4497c927dd36eeef1df090dc22bed34e5e95e58a908e9102f34511d7b57e249caa0f615d42facbdfb9d9a52a8d7f884535dcb2411021a1789c25e117e80722da4c168d1757ed58fe09e2981f42a2572d7b15e701b48875e1ad0ae1035916ce4d9073f55f0459bed376d511c32a6e698c98092bd2640a37c590bcbca2f1f3507cdff0403c318424e76979b71f2b2de6edf48027bd08f00caaac0318fc96e6d1efa25316b7c6b7b3c04895333a2e25f6d5f74283c988831e1a69a79e1a3136792f3f6521d6ab3a93e87cf22c1d1ca0bfce0916e6ffcc08959c2f6ff503ab2c6fc320ee06a3c955ebe76e584bcedbe46c5f92c5f865bdca99b96624c5bfea10dc33abb670260650e343858e385755392311fa186206411050f7768eb857d82ae7084a8405664b72a586285e9abf70e90c6aa9d4cce74121e5e1c87574d25cc1b9c964216d6b81055637c18e1a0f163b51f407c4dd12a6467efcc2a1a1385d1e79fe6056513d8e4f21dfb7e75f4e2e7617377daf3e8e56c744d2cddae892c58a5030a8e959e55c992c0572311284a0e389ba715c97633bec5eea52e7f1e77b4b66e6a3a22c6ad12a9f315a34daba54cacc054c948f9a3cfdf4ccb791633f67a9e2a8b94b73d4d74ca3ecd7b760f731730ba0771fce394041300166a0e6a271eeecfe52aad52b554560bc51844b4321256c1458c5fd4b31013810c5dc24198160ae71d689fb78325efd2c306144a60c2917e7594ec4d5f68534813e0cc2ab7f494d88adae8cc358dfa2c1dc17f329d8c835a4e181cae177154ddd37fa6b6153eff4cc40e13112ae107905bd6effd36e47eed05727b8769cf9aaaa1a6cc541e59bc9c3f5ec926f1c38a77f3b2d11adb6f169f52508359d4d7875734e2b78561d94f4f7359656e18aa157b7bf1ed0bd980dcf9ab2ecea5d72dbd3bd3bff2da5e4249ef069a62671e091af36af07e50dfde24748669b7ebef36bee1249af8c382091ef34f7e5a9250651d78375b1f7a5cbb9fa86a9dc9ac8b86deef9e0053c16bb240e4d491b8807e529f82677e4af8becda10dce379e684a92cfbfb68c7e6479b2524c3c50f6a1f63603aa81f67b5c9468db0d27c3809f9afef3b9f49be31d4aadc581cd58bf8736940c490d404b067c31a02f1dce2ac2fb0fdd96debb2c6c4ce90d3e2e055da0ee00fbf66fd81486b4ac82fc06c3f762f959ffbedb76b4c1ff18bbc9c4e36b7f5ae1652b304a726dfc2e15fc892161000471dcaa813b06cedfa133cd386f63732bd9da6fd503ef2ca15abb98fb73021aaadbf6d25684ace37d1717b0ef25d03cbf3ece2cf490e53352a6f669f44565236aecd0cec1f0219055eeda0d5f933c3cb3a4a2fae57def227e9748e809f4e4bab348ed1869e9ef55d89ced4b0033f1e377901b524e27877a83a0457b832e0b311264be27a4fe60c493a5e3e28784abd1998579bb852a289c00565ecd164d633716b4c675099a403d059e307c4c11c48787e950af30f25d07832e073539cf772d2edd98991e39e85facea6560d447d665d1502295b81c9f6d7a9bd15c4440a193c933a6fc4979d38d081ef548a6a35bfcf44e8217a1155a0e65344f9aec3d8cfb745b643711c69c4595a0628c39b0bfcd6f38d19d8259378ac16bd489881293d4ceb962a20dacad29e4232fc4040c9c57a0a3a3afb27492631db6f290be6c40a026e234e5a39880aa51fbcf58abf35c1c47237ac6d7d40527d8ba3c58e5a73dfe2b4a2d7a6a16a1378dbec3d28821899bb11cc96b69140a3990ca143a945fc64f2a65eed8d7a3a961f5c0afca2ef39f568d041205cc911c18c48b1cce40f28403c2c9eb6962cbe3aa08c5e598170627bd197dd74e98f7a555e251b88c820bf1cc82fa95d491fbfa80551307d4b6c59d6004feab7e54a4407178d269edce0899f9c95c8082ebb04875695c7908b4be7acfddeae14d661377ec0671b37a8b84e72c24843e0ce695780993f6cb9c674d4a6ce2e72b1463e1b63619b427ab50ed53c422e620cb08f7e3bd83767208651e86b7d267db6bc48b85d0010e3908a4be7a622316db45c97425f1a6500ee5249eba412ad194cc1e7d615a7b046a0b0d84c586c38ab025be76b9468b17f4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a651c34e9c184c9032b5e302adc100a0d1fca9584b35d2b0e71510b7e2e315cf1e32a6f030cd545434d5051e45b937eb51a017453033e179cc94151683caa12746d55959f132fe4592d489e58e92af88cc56a0256f47c2cf503cb0841bc09519b4bc42d249f3baf2d136fa0ef4e7d7f7c672ac6f64dc06fff6719b77077f9224ec4a1bffa78a0ada747edde1151331b6d4a6c489bd8b1eaa33c50e65f35208b752111d3896607e6b010e9e027bcf4d445b45611ae5bf8a4cacc9b1e75be2697f8ab3ef2383118632eb88b2f97556ab3edee10a8959f3ca55a5d20e51ad9b44bbfa750a371a07a2b0b85fd52cbe53bbf4d40c395ba6c26f63d3807c6b65072b1b3606f6f9c7cd6462dc064d129330f014df19761838a5e9e59a57946b1e907d0ba1dc1dd1f8dd3bd7eb0eb351b098f7fd64bb3935ac08ba598eb9eef746d1cb0bd257175639b1a97e49fb705082d6243ce94 +MD = 77236761950d47b374cd31f3ac68d5347092a37b63e84c3e1639bc59 + +Len = 30608 +Msg = 513a52c2b8b80276937cef3dcf54046d3b6325638c165a1aa45930fc140a5cf7dfada2d48162f5c42f15e03c61f524038e27a38a36bb7c7b26df7894f852a5b6d91c40398f7dd883ba23b1d9599f6774911ad3d8aa4432615b8e841f479933e4c7eef59aeaeff3daba0e2bbbc13c13e8cca47ff6ef9ac4f4c9ce1e4309c64fa8318b899f9ba28ef2b93d168ba0b37186c82e6d8b0da37a5bfa080ca847c1412aa05bc4efa97cf1f33e1a3af0ffecc9770c1e66400d499cbf76a217f7097251939cc66e331c676404d20c5e93e5cf63e320de32bdf6737147c30607d855c1c70bab344e12fc4a2e4dfc7b4c1b5a4486f18dd499a9d009421c6b9aa4f23596eab9570d2d35520c98f744cfca3167337bc9da6a63aca4f25765f6c8b6eeb0d903c627b9d3432597ea2a3271a17d12848b948f07576f7918f84beaf70473ce725a59a3a008e57ed26c0d4fc799a6651ffb7a35123f9a57626df6d18e572a9849379b542a94c364a565c9223a795568ec16a253f5e1d546b8fd8d32f777bb1546e2b4c1c03e84dff81f8533330b3122d42335711705c64f02f23896992ccd4e52a2cb73c8cfd1f7b3e06a0b1815e39bbd695a17e075187928922184dc3e084953c108f0ac1051b5bff1a031526012db91313aceb8f871cd13266d8428741610338594c2d2c6ad20029a4e2d4ab467eb36c3fc1d07557a51a9f5471ee5979cabd8379770a4bc8c4165229d8867d88ad29667ca8d3555da0fd349d5db7b6f45202c1e388388b9971ed0d3b4c9109622989765c9a5aac0390f7a683f4253c4b6791584a082e88476c12cf3bc78afb4d746230423edcf5e4158849baedcd35e9abe7daff7f52be6d0325fcbdc1eabfb53e2218e00ed0af698f1db2a4a2f640597f54be86465b9a74d7753a33d426c333b777849872ec452e6e5655d3ac56f80552867770f59fa8f969aeec3066c5a243a0a127ee1376638d4390c7ca7265a987d5eb8a42159566553a31a726024dd95f6a5d6743590567109f7b6ceb8d88e15b7a028b7c2ed35f32b98bef973f35d50174fac75acc2fec52e274d9c966574bfaaf59ef7199effffc783c2a06660421b46117cc76e54c5fbebcfb82e6855735dff6503ae4ff31c52cf6b0daf61f4f4bf2bf22eb3a2ce12dde7f9dfcc572ef2b95ef83d228b75f4b4ea59896e8e35db046dfaab8171b94f31cbacaabe8b7a5b996db7359bf6aaefedc0541d2513ad5fb1b431d979029be3c03ef1014b2bc015c6d7a9d363b81c76c4fa64b11b18e4e990aaa0a1e37eff3652e9cfccbd5f89880842d600c1f853ef0240912e99c661df67f54eeb060c6ab0af744ef35a515c1c265747a2fcded6c46f39e47ae744acabff3d43a02bd566b99e86765e6b26c139eabd03a25d942d5bd38e647e4dbb4db3202b88a69a007ab9e8c750f6370940471a1c12e92c3fe01ef6e71a221353cc61916624e79bb62f1855e1e3a1082062ae7f1e7d5eb10a7773a0ea0c4f8033b21c1c971f4a761f0b3ead7937482493aed6e1694be8331b7bc4984244ebdd84874b876682b672629893b83a55d4d48bad2808a58471fc9a7478a795cadf726dd1589b7a5415d8a85e803ec9442b6030e50abb7b31e052b0e8f7958ca41487171aaa207c9d4ef018e46b06d10c3710a9e0e5c492591d7e8561a92acedc7164aae9a9de13654902dbb2bdd9f8b6de2c1f2622e994040fc74066f62d047add514dc7bd9de8b5ee561850df7fe6490afbb93d27f3263aa07709804668d5844295283b4e24a3942534f84737c044cda2c6a0af5ea9f204b7d50a3501a1ea04877964cdc43ceb0bd6e3a31d2f64ba4b8ed5fb042dd5a0693c2868108fa1ea019445290587ad6821e9ac405d2e32efc9b670f3c2fe3dd87218b94e9658307e8451419e6cff3fc3de46d7f78c9bf38c5202dfb07338aa412631d0e251c5154e94a6b4ec8995b9a44ad5acf234e06f38eb5a69599e43e5838d70b44cc83c1a01397be83ae4afe5b26e7f7256dc646e9c9ea65816cc87b347afbdafb58326053f7bb823b106b78996512a734e0d8fb86072cef211846cdf35950107450bec9fb26345ae7976136ef8fbbff5ff4ec9142b70ba806f4e5a2ff446220523e7f4b000f80ad1b9bc2d5c7e75274194277a4ca59e52495bb2b96d2dca0af1789fa800d143efd39a616b1bd3c6489f33200a2677067f97fb39f15f872a9f136bbc6f56ce4addfe43ec37729df60c5605c2e26b49b027b0776a6aceab6dcbb225c5b07c9e17ba98dce5f82a850e5ab0319468e3c2a233ddf8ce8c81409b7518cd42d538eab270ea8fd5150b321519f3df1f05558be68c66a6ebc042efbd858b8cbb45535a21e53c8243f8dd4d13336839e9218a4c841893a84c6cd760d9e2548ab96895956e03d6ddb708687d118f57647c254bac82c1ac2776fa093afa76bbeec3a6c544a1b0ffc9b9ad746b1515088b60775e53ea6ef84af3d0a025252807e16267ad0ec0d6006ed24fc8be2aadc2d41b818beac407c03a495864cb64e0828a1d13139cd55c21f389562d1f553fcf6737aa9c1916734c1e03f81dd1be8672127c12c095e72aaa80672b6b36a0b3756d3c595787ea9ce41fa61a92e23c0320a007cc7ca2ff28e33ff3344aaa12f1fd0eb0f886dd4769d065bc258ca4e43dd45d47aa0e6b243e1456b5da9224b3e2af711deeefc236c25717cd81d3bfc01dd670c31240975e5484ed35850a4b8c6cd2bf0aa35bdfbd8fc35d5f952fdcd88b6d02036dd8cfb5527c2dfc9e7bc8a478b01f007f91dce7b85a60fccb68a33270e23b90249fba3220443d918bad4204ef8fba86ea5b60b92665482b8a45bbd8b27d42f19d5d01dca624467cb66862b2b7b8b8244c7f133dbf2b3d753b8fcdd23b8640ae42da4bbccd6470468574d0b8ba7340620dc69e7a6cf66660440e8026f1455c507add41d87b4be2766298331ede077ac995f8a978160ceb760e8a7ddebe02bf5eac308b3a9922c594b49d33ea0dbe8fe04cdddb40a3b6f53f01cb6b02890490604299d0ea10314028e34c79262edea72f9b3cddd9fd3cac428598f3983a94f8dfa3e1b8eec6c07cbb576badd929b0e93fe8df564b0ae6370703bbbdaab8fa1f6237d0ed50a517a1d477c2770ce67c7e979c8cef9fb4fcbe16e1fa703fed7e2c71662d1418947ed6fcad1b7dc64c8a8ec0200c50dce1c56bf8891eb460c068489498c2d84c7a3c43ba613c6a0f45214040db27200a7b8a643461ef331419ff9a543555def6419a1196f9eee4efb98abca134a408326993d152d3349263e08c4b38a5afd11dd0e06818def9936f8e0e2b6a954daf5a9328dbda46b77c55fd5782c9509857ca0f566fc978252196adf3b52465e8be8de191aa55223e97f359a8688d9fd71804e6434f302f3a336dfe8181560b3edcd03b15654bce928b44dac7250ef836bed33df12fd66cff74fa6902b888f117b22d89fe3442b47b015069fbe0d4c47bee3ffca63841953d8947d7bc81437e3be7abb39240c43bc0a120ef8ec1656c6f52510bab92fb14bc1d5c2ef8050d1a712452a11ab158cb2b12bb52c6f14b56da92105248648c4f44d63f58fe6b712d82112b3cddaf87cc82fd297cec980eec845685bac4d67ab09d5cfa3b16dcf41f37553d6a2561d7a68e09735347dd34953445b62969124f9d8e5895c1888020595699911438efd2c217dfa0c121e947b8b407ad887d3d9280e17216d19b7e7c41a7842d235f820086e526b8adc0e4cfbfca4572c04982ccc05c51875299ff9040f4bf1b7de242e85bbf87c4fe6df552113fa70bb7150784c5c89eef2ec82ae5bf03f1630c095612aa6eaacb9e70445a16dad4825729f442f7ec00574c712802249dc30bb61ce606d9bb36d57411fa6e366575df87cc728fbe9220c694db206fd88add1d65621c4d526bd4eb68983f17d9a631282e47a9f18280a544ee503bb54492e6a000241e6e7b492b13624c3adb6767b16736e2c0f2ab7f38da4216a15bcf7d879d6faa14f1be1ce4574a771445486e9ca386e5df1aa157818e787679e9e012671b9a3c275f82aba6bf085ff4dae4839be5069830f0ccd0276a78b8ebe8e11a2f2269227e3e2ebf1a52854c0324a47056349e43d8fc95b2d3762a2421df395e86bbc4a343192c20e718a78869aaeefc7498362d02c662c42cb97702405650a315ec93099b75e396b619575a4df42bee9e19b69fd4d79ccfdb3b459973d58eb483bfbe9ab0dcbbe92f5e7e09d78bc40f7bc006e176b6ac9b87047e32e0e55b58793c2d9faad51ce0f9ee02de31f61f27b4940f3b11ebf8f0d91d0815af0d1f569f6ac85fb1e96e45bdd1cd2180bda6fef09db7f5cdffea96798dcd8a09d642779c517824eb9e19de2210c51aef69c05bd8e4e756d179e9540e5cb3d916c72c8319f92334837f8574d1b2d410a381d407137088a746e15cf44092a449fd684542bd6bb2d89f111bce71bfe14dc78d4ccb4a4a803153c0ad3cb9388723e741f67b31ae0e5868de41b6ab40d31781158f6d2578b939219c43f51e5643b0fbdba5f81cca1dfc056d60f2273c94b7f9a205b54b04190ad80086e71af2c23562bdbc7f27c8c90c9e46e14b8cbb0b7559bb166d65f58aeb9f71ded95316ebfd436fa1d9faaff9cf5df22a8983c52098c6e92a5b1a54f3239e79b39471c9a64fc77abece3c87958e68f8a574b363bb6a6ab3a94913283bfbfe9f6de11d14db721565792595588491e7e0b9d3c59cc4316da1fbfdf8794cbbe76b7486fffd72af57b83ca8af2bb0200333cd7060792336f73b883f70500dab8066314bbe8f544eb2fc6e1d2f070083e3774b112d00c1c12e0ab9d923b46612f2170afa02cf679750b8764dc0f55c01b1379a7fd33b84193d95f491baad3f3a6407685975c794d15974be0008fcace492f82282fb3255884a64a231dd438069ffbcb432bd7ec446f5b8adfdaf24d872b0444be14dec1d547e002c7f337f12e8ebc0544b82fcdd3c4a0dab0e5e75c9f433a27d667071c2c600f0f8446568dbff4f9bb26c6d4ac8fc83fa20f9bdf865b1439b20d70dc92e26f9bc70471a06c4f553d3345f256f6ecec608748773b495f306b69cfdcbfd47bc90edfb52fb62b51421f244eb5373b6f93bbd108029b14200a77b59a05313f7cfee0a002bb08397a2de8049d79f5f87c70ca45aac86f852224c72c0884c1624a93a9be99be07250e8b503abecb03acb7e5e42bbd33390af9e1e24377c5f0bb8909d291d6a3335ca2ecc05d1f22f0c69675c219cbcd7813fbf4418274634fc9acd3f3b046053d6ebbc4b0d25b1c3dd49ca2bc863301bd4eccce6d6f9ac72f0b2a847590645e55c9dd95ba40ef015b653eff6bf7af7a7909c0c2ee71377c2f0e868dd0b8be094d0c7ce2450f479cd9e6f1de38f47 +MD = 1796669a13a3a820a69a2b7f4206d71406dba0d8ef397ede6d00823c + +Len = 31400 +Msg = 1edcfff2ba6d61ce5e16e8f4fa58208f9b5aa69ae38b3ba3b78917ce37427f1cf3599aed5bcb81c478d2954bda091597d2d1f0ace1f4d7446f8997ccc018a6b025fefbd86f122373a98892f307163758195653b2446c8ae173e83ba00aee0dc21c94cabadd8b71615a0286f467c7ad5cd9af77b3f6397c032a6eaa51fc0bdcda3fe2ae9c8d7e9018f1061a57e463a02b7ba505b7dea3d431fce28ce77db93c80f8b250856732ab20d85df6236534374b6500a5c7e4f4bbf4510e8b6b773e553dafca587d53f1e8ff75cfc160d1809b460188fee9f07258d391b84de4d1e34e98caf36d8d39016f3f322323161290f3a4b605b927ea67d45624a97a5a73f04f1ab2f537bb01ab69677623c64e0fac68ebeb3e7d89ba19560573a9bbd545ad8249cf9860119337fe00a8954f10b01c22a50afcf31649d10769e480b85e2e610db089a48d97d7ed559132426962dd2748597a07c3d67dd60e09e0f518fc195618d449e06854b61597a27bf2ba4e7e160290a32794d13f72946dd0d183b8ebd2cc3f7515995016f6ebbceb6ceadb7b317ad1ed240e1078ebc11e1adca3998d1e5078770bc893e1d97a66ea7aa211bcc0d5a4c0c5da9a0e8abca328de1da7e782cd07b58a9c26fd066c28e0e28af92a0b3e9184d3a077eb97ae84609f9ceae1456b75995abd1054c5e88a356d499aab5adb21a11707b0f55abe4a2ce6c66b64b151488942d459cc5e161551e388fd28f4d4db7f56b84c161a157cf37d4331560ca80bef0c890a4f181f509d0cee288a225248865b5b533521daa21c2abc44a19f9743327e8329c43d2bc37fb02425b72c7dee1fed97ce39b5364511b6d9ad2bb2477aba616bc1121361f76096d1fc995a7c57b0d314c40c1f51ec39e94173de8de037ef7ce8d723e3ea73a9879eb317f3780ba3d67b3d95a7521ffc8a9d9ea07789033999a375def4eebfc04b3254184198905ebe7441bc946266c26394375bba6a65007e43a22b9094640faa37e6868a05704b53a6d96930a84af33acf44f69cace5acf47167f2fd04e9fc6c52724817e633d05cba0c84c14d52f7d8f5d05966770ba5c3d5cb1b8467d6f1582dff4630645f57a357e3f59078073705afe06c5ff26053b316d68f6de5b455377095681da77e47ee2664a4e552ef1988a57e17d1466b1f8cdd903400a50a90d1c33c9625d6170806cf997a080394062b7eb142029ab46f15d102f385d0600aeeccfdb89119b302b3f98a5d40b27e67b4e382d53b17c4ac179b33b5438d3f2a5636dfb6a99ad99dbc4c3e36d68733a2ec7bf7b8c4e5223f5be22b6083052d5ad0a7eb78b57e1141eb72bdee12ab3d219bef1bd3e52b568ea64ff3dd8d5fb40226c728e6fdf0e45606100f6b3c46244a89e6f30ee612e903c38a9215a9c45c881e409ee9c916d844d6d13d979c7f6e877d0989520ec16205783a10ef1f5cac5581b7556760187773235a4d597a7fa53f4100e485a76049fb8f077652364e2cd116d756490b1f494bb5564a981d6e50d99b720c91f719274fce9bcb2837c36464a745a8781253d535536b393ece73f8bf54070a5c47128368fe9b17586ae2dd77faac53dbbddba397c7412432d5b624583468e5d0de73e5aee7b262ca17d41e70d9b2605953df3bdad781125c7a605c0c023da5d40665d5895086b56686c0afb90affd6dc1e8926674cd30ca405992943882d534f0510dc6102bf1714ffcf19b8553cbd4b64ffeba5edde19f2bd8811658ce1f52b249b819ec60691bcc929e3d784111d8d6e6912fb844b412eeb569edad701964fab2e4da862032a462df5957d5d25ff8c84f023d3d7c18c40d72a580b31343ba3e2f3c7e89e5dea9a735cb811aa216a2feebca794b0e90310c92dc65e6122ee0f100f77c444bcd9a0e385d3fd31ac675ef3f426a5d56bad870987703c3174b67b7fade5a51aca0041c4986ea8bb6ffd01dcc026700eee938bde5fde0e67d29ccf75f39af4ea2c666360bf117a0f123401f149315c251abb0592dd993acce3a6f33b091d177a8d13effd2045dbf73c14447ab7ced1e0992fde6b2b282a2850decf1918f678929310cee4e391333995a6b3bf3286370910f7fcb26e134443c04c4c5648ae7dfce664e65d317eea9ec6f13608e1dff7662a1949aed1e3f2e4dcf7503cc0cc907f2f1721af329368ee77fdb69cec6377c08d9faca9791f9bd54ce7c411a9d818e2163266240d5816f14fd319c47c9a20dee1900ce9914fa6dcb724911e2a5a7dee42bc9c02eb555a6ef77a49c8b90b5a8acff553b73ffb7dc2c6b79dab6cdb266b5cbdad92f3139d2f17fa2cf0ca3e8e8afed5685babac874e20a7d20097e37d210b3e801c4e1948fa565cac83d7bb22a71838331dffe92c4a6dfc1764d2f8e9d7f845fde823efc1985ca7b0cb0a0b80a9c2279c45603bd47c57be532145a4d257cbdd0c3d9b1e72d1d2e31f0e89b50e58a6a88b1af829e7ae84f6707d196ea0672b0b9565de2dc16c6019e3957c41367c6cc6e8e5ef3bcda69cac55c176debcd0c0d980a613a41833ad50e3a80c375fdcbc869bee6df9ef2d48e6ea34837d8c59334eb549620cdeec6290078f6020f0413cf28c7d99ecb30a30ae172069d279cc2c721d95f4eb7b6026e13791a28453739711a4da9b9b8207fb0bc4cb4f66ecf0524e9ed4f1cc5757a24c5bf7f7e9ef3a73ebc94d9c8ec5ea5106d97e5ebf4b8c4ee9214c8134da997ed85b0a89d92c5e7989e41dc44ee27cdca53e81be67ff69c74c8f47caad6ced618e1f0f80db72a650f2de933a62438541f2dc1c96e6714f667dce0bf7be751cf3749051047829dba02e9df727524ecd2bf599970ec20805d386c8e02ef05defdd9594173b36b9c513460b91b2a76d1b40b55e3950852b55b56e631097c98c2bc7f614a850a08b2c4f410fa804e80738283a144c81b64405b53e89e25cd36a9b58a1f94d693b05d8fc279085449d83ed8c8ca116ccdebade7afd219da2966006399d294eaf919091c30178719b4f4b0014b4efe05784f5a8adb3138a9499d43312f28ef34929951e4cd6aeb23185c63967b9e4f14a305d2bf56947f157642feb8aa90f845f8b7a483eae1a902dc75c622ea36a93ce6b5a2efb26a41a167fdaf649c893481b40a9d74191a455b79d7541107a680c0bbb547b66f2144cf7733b1cf85a0488a3cf8893ff883447f99079a0b647c5a528abb3d8dfd57fd022c6bc253f64498c1fc081431d9ab2b01827d045c7126ba64dc0df0e0ed8cbefc003c4d8c5f04a9cb89cfab146d006d63febe3f8ece14157a48440e59a02e1eef9afbafe3305ef0095e95da32030180294621883cdbe2fff527e3e242c5ca918f454085f30ac20ffe03211e253c5d07b3f16d8ad11b01de8823642956bec0bb4da7915c365ecc5e2befc7e368894178b698f8c3d61c0f3585a35b2fe00bcf009d2a749f279cdc6f259d10c6667a7d3783a539afc64f499980202f82892d43e6005650cb315570b74d938233c9705ee8bd9ec6cb2c356f8f0a3257adbca3adf019b3bc6d0e1937cb366ba2b7ec1b64e0c6fe2682625eef6a76527a2de50f8b934bbb1df0f848802f626de8cf58cc3dd4323bbf82233c27c076f8fd7fbcb16b6418d50bf39a73e8384442cae69a13381771e01836c95dd7356eae580f8e39abd6f3a9fcf16f1bee8a6e62cfaa2a70e24f2873b71cdf244c1ddfdb2079e418eb508ea27756d0b0f1aa43567d667475cadfa87f2290df20150e4d17cd3b58df98852c46e1a079c3900c65864ab81292604d846ad15f43e1a06b38dce4c056ee41d96f1fe27ad4d45815477abe2b9f47411d4ebf49c4a7e9acd915a2dda558d565c1b995f0225c63a8795bcc5e1d5504cbc359f4f26d659868cc86023e56f92572d2be2171537ae20f9d24d39129de7b8ed4589471b6178e82b9ec637d51924ef780cf7b0c7adae00be53528fdcdb5ebf8c4ad263e4b383c7915cb5f2121ceb272507feb27f4e6de1c060f450a6556069818da12ce794212ca84954da044091061c6420a3a7e194cbe6415a03dad493bfb4561f298dccfa1e57afcc79144cbb95466b840da62fcac6183dae30df209fc80ded73e23e22b7a586d44457a80a13db89645377e400b8db3e9d155f1d012d8d7599c7df636000c91d01e5fa2a4041e0ce96b46ac91b051141aab919fc3fe514d2a340a9624c7c93057ed7ec00b7edacfe4ad06dbd4a5a7107a9c2e5e4a16e670e5308c7a5afd40a249341b59437be48ffc8ce0828535f0179e5584c3df1718e0ff147c19250b03763884bdb4c885cbbbb58d7c372ffbbcb7fa5a1d56ff5958fbfc5242093f9b620aaa41fe89271700d18421327031617d70230c808e27683740417c86a0f7091cfe231e264cdbba24600cda9bb43601a2be8cff36dfe3be245c82e5b2a6e7ee74cf175bfd5642e996f5a42c2079ba56dd11bca4b8d2c0e5b08f25304e517eb619dc1b9dcc5c192fe900ee9859471acb7d18169f7efd2b596c76aceeb25747fa6cc394461bb4baf78af030a1be92e3ea13104f41f1b5af93a8918e73971ec025fe1406077406a4db0d623edab8f3b23d3fb8bb2ed9a2aa2ef57e4e61652e73b33e2c05346db86334d0c55da5e0cfe23f437fdec87f3ac785f38b612a94fcdf3cbd9a066f514072af85a81185ceae105aceb44ea15ae4643303476b41bf007f2cecdc8e1ac7356fa59c68ff0ccb04b93a52147f4c05462ca0a530c1493bdfb00e5c71f0c9581d96b175b68aad6e7a49384e0ee52af6c67d6969e607a3a3f12e5b8ce8f2ed5c5f944db1ef28ea41653cef431214b0c7ebd2f7b1c5a2e38fdb468eeea009197c71e4f4c1916e35bc5c20c9b1ac828fc12cc9d62d5e377b47f4a532f23587b0110b1521353bdf3267d581521a6cb32a9b1fbe8f3d2e19fd64e3a6c258280353b271816d7d4cd042bc47db02fda12ae3be2b4d7d51a3eecc8f1ee7c760e60076e94bd6341a5305f922599a76dc086e7da2e5f33b1b5e0a7aff0cc4acad0e038c2e00601f9cdcc4c842514c0825f0d24ac1c62c42eacb117b6d43ea0cacee9125e925db7a6548b12294e57c417bf90acdc342652f50697860224ab441d1261db6b32294ef04353fba827c87ad3e9f8c890fe13a5adcb7c3abe687bff6ca432dc1049d28f81a10e4d2938d0ac5fe42bc0f1039284ff04477c102915995f8a425d765ec03ffe76a351d60ad82062b813dc26ca09b993b8e09420ede3da9dce7ba6c4f95a2912cafa4fd524469f856e976457dbe10a10ef2fca173f4c8acf78c3fe23a20a1463a6fb8f4e0e83f1700d9e9faebf83401fb11b661da4b8709c8e04afbbe238c799118e586a51f8deca9d12d650fd552367078eaf59a68f55ad1a25ffb3404a0b5d149bf450740c2e3b27da51681dc17a91f870eef4cc3a01a9230e373445a9a857b60aa92aff26a86db1de581ca82e0f448da76c169e1f3c39b2a79e6577bd662effc3c01d7bb01605460633942504a829cd1c6ee5a5a7ce05ced87e6f61ee0d8af7ae80536f113eaeeb3a29f91caa0ee7c0b7 +MD = a211e5d1e24dd8b638dcc0879d6dc5a84cb3cea92028e9fdaf487539 + +Len = 32192 +Msg = 7e00aa080c127cbabfdfa5d9d9728c7b25358aecd26f5850810cc38a9d9da75deb9f1ad16200e8d93cdf40324d94ac8e94f046f210c52a5dd4a927aa5ef8bab725183cc771015a256ffcc60b85aa2cc1e34968095b33f6bb72a7a9adb7cca0d553f377b2e21dbae781bd9f2a28bff45c3bc856f95bc0a4b3828eb35a4f2243ff9eb932595c5cf0689aaa3357dfd8eca7c3f6798ab9741c8d2de4ac7acf018a7d2ef1d78588c7e4ede04cea5c52fffceaa45a39841d5746919a33fcd5de725d962a23cdfe0d657fc17e2a2d00283b0c6c057dffae2e720a07f2020a33257ca494bad87c8c953fa72b9acd620a0a9504760fe531d195cc51365cda405c4b2747bd08964cf7c55b45725dbbf3439f13cc50e91c39b5fa6d016701420517f97b2f5a39e8a50647c342dfee7e467390c04c42bdaa7d22035e04e208c2c12ed78142b27853ef83c37f84ba759ec56284a16d94b01567e05ba640ef9ae2dd678c40690feb619234e095f54b1ca1d6d724c0158dece75db6a84d9fd6df2bbf8bc1c08db7ba99f6e1470f7cd90911e39b18242d7699a7c96e935c08defe24d0621d0a94f30e838354a0f400ae6475537707d59e97dede12cec3da6250205678b34925680b0fa8a254924d6b1056568e3099dc4e38e413a09fe1cf97746c472048ec19ef47e48fb9a8c521a448073bfc91774027a1d3cedba894448e920b812ee7afef13efb6c13219e278939d9eac05614909101ad2982bb3853f2ff2248c0c593aaeba4aacc4736f915b205943311167b63ff0ea09f7f8865bcb62dce0ee2065345ecea1ef22e67279d033c22053886c67ebb15aa175aaebbfed0f976731d4d54608363ca662f1e943e2b4225a99d23804153ab2c29aa9a759af1e6ce0dc8f7017b3da63fa0dfe9e96968bbf1c8c579334c3733a93ed5d85d01877a37378b8fd5067a25e13aa74571bf6a0e28cb27f459fff44393df62f4ccd3003844a8cb945982c767418c1bbdd7a09dbd2d296b315eed095f9e73d85c3f700a8568aa0f910980b3eef31db3bf85ad725d917bd59cdc93f4ec0ba4bc8b4f78f4f635e3de025f70be215887f5b6f6369643d83b1db33d75257d7dea761e574e6e1f1ecead64e5e354a2f4235860c3ec682473df99f10c11398867ad9b61e170b44495c2f4351758f5f848a85219593f6653f6e1d0f2b2e8afa14b76a3129880862b3d7948ff7e324075e86f895d30902f76d3da5914ec7be63cbbce139cd6ee5217685a2220851f92b035e154a8e49f11e18d31a8f3f34b7bcf1b2c635d171a86bdc8de0654c6618b4bc3b64a88efbcbc48a570470c71c7deecfc0a28ffe3a5b272b17d6be8bcb8888d1456e189ac699d009f2e99cae2819e0ad0ffbae1c71053dac4d0d968c2751918aa3ba007c52622adecc537bbcff9279d3c65cfaf3beaf94a7550c5618237cb52f7ed1c9fa482eba510cc975b949f0a3880e4adb4ac7601664575b64f7670fde07fd39dcdd500568a9dbd4f26cb03b45150f4fb9ea3720aa2a7c832af19a15f35b497c9fec11f01c3060fb5a9eda7c46c2f0f2fc9cb4f73843eb0b0ecd6493dc7389217cf134f6be2cc4c615176fbb90d7dabc0c26e6eea9f5cd7b7a556f938197e6b1dab2602036e62ebd8b9f18fe0a9cf4335250770ce3894a5cd54f601cca0f88b321f93e756ca6c76924fe7d4f9c5967e134e40c5acf4789358784e2379f2296afb88c76fd48b4b65149fb45b52e555a4e1ba850de5576b38ef8bc9bebe81a382e0933afc0b35724fd60601839a8d9f6007066e8a25e5fefef90bf33408d3d98b77bb891c793d839f6d3f3a0e1f22d628199e47faed04b66e1b754533e76d4dbd276e2c619d27f1cc3087d82b7f599c75900ebbb08958040ebd545a3ee8b262c076278f3be5694f6ec69c569c397654d0e0b4244ba9347a4965258ca57b57db1dfa843c3bf095feefa5c95fb0cc1d81b2a24b3c3ccb4e7ba6996567181da1f92e1ae0bdb23d1282d744bb3e09a5c3b5a35b204e044deaaabec09063f75e355f896dd97e6f29836dbe29de8c1754ed631b51dfe422cfbd69fa71332dd3ab9670b849db18a3445d21fccbafc46a681f1c934cc69928bf2b4bd231da0f2d8429df235571f6ff2c04421bb0ab71634dbd44a39290d776aab8c2ee78d192758683fd63171aa3e34f1d40a37f5e1da2746c7db4d9bb19ad00ea61a7bcd6524c11294defe551a9f00c0ca02c6e3413987a911a4f78a1fa2c50349a868434c901b28e5332669373960156d30f23ca0dc5debfbcebf5e1d385272be00355996136f917afc3117c9b55bd806bd4268c66ab0f6cd812d8074047d434e4b6a760a56c4379b62a5c697baf9f1ddd03ecf7b8c89b1cfe4ca56ecad505e3eb1900172012201908d0cdd6af143483a926fd987eaef0448201d494cdcd3abd9592e6494bc91d7a0a4edc60a0240c5652b5cefb12bead7825caec25e380d13666ccc06382d1aa115cfd1e83f94f951a5c28e77c2f88212c3c10627e86a067c2c11f24f28ffc44735383fabd14f74d2447f8bdb83f8c09e5477ace1b319c6d0747129a72bd898b24904bf7787ddbb32888bdd81b9d4ab617da5285987ee56f586b3f87608619cc8985ed9b42ae3d657ba0e0bd32f334c44857403f62b91bdd5aa01e8248841da726c6c16ca820ccb2b212f9e37acbea92fb60bc41f69a903562880801973205a990b56fd2257fda49407171d17f71dcc0b5693f33e07de3162475a48be91a82323be4517227161697cb2ee10dad9f7bdbeae3319baceda4de051b7c879a97f3cfacd61ea3398de20ca6bdb00e81af482320614bdfb864262b78cbe89b3854db00480d100be931cd3667a0674a982bd254da65d6769f7c175d1419812d5ebbb842b1fbee1292bc489372798f485d8faaef9d5379f6ce8fd9015b76ceb45a470c255f14f13dd287e4b27bab908e4e652231ddccaee6c239eba6b38639d6d7815726c3fad204352f1201d7a90392e726e8ea1033ddbd16e4dfcbb0aa5afb42e529a5751ff90c270c61002b1460ecb45f6f66c92b8ef0392b25ded7659a98190ce44fe6f6ee9c14ca523bca502102327916468d165b06a5774e5eac4a8143e64327749e122b5aaac3462349eedc59ee0e7df7c086aa86e843b9c983cb9765273253c20ee427be4591ed452e62fb7a537a16f907eef5f78e3b18be026b55a2585509a6be0f6c4d71b0981ffc4ef6e9ef5671c8d7c1d5cee3a7cb9aac9c3451f625b9912fd6817ebb99e72217f5571f3e2e0ef594a1b273a52442edf6e0cc1a8d1ed41fd8ebdfc88fd84aea1608b480ac6b5efdd301248c2f3b2f3655db755289bae9b15da20fb16ad633d68afb67b4d698e2501762a47f0e46d0f26deed8a078848ae402bb79dfd92e5285db4019222931197ae638aad2bef1e8a0939d6e6ad60608267c7aa69a574b07667b69216f30be94fca405b02dada6d6df5b599f382eba12073f722e8771b6c2f70ff918f279abc553e55c4cc676e01bfd49b5f39eff1b08f4a0347a0d94ec25c5fd52783260833aff3eaee95397383888d334f3f5a3938d7d633401b34d759041c817c7c581df567d04701e4b8b19ad008c5928d2c8cdf01fdcf36e1f17cdb2f8e4ab70125a0ab85bcb424424cf0efa02d994fabceb24d14a91e50787606ede59f7a009bf55bfc0fa1787f365df72affe4f7af22a6732b18c169b76a2d3c392f365881d03014910f66dc3b48538ff2f61526da781e9721162df8923f7ce867143b2b5f2b3e94118cf32880009680ef8ca86ff7389de5d614d5130a7dcdd01f9d973cc53187a3258f30a475e78e92cac9851a2ee78a26f31da10247ae87bd08d130d3d96c7408751f05974384a48c2bb5946fa90f4f221f36790c70591278cab8ef37c3636b8da8445a4b115f3e38b959beb58d3753a10369457bad07d6c60e5abcb2ac9ed5f8660617060801c65c1dbce93605e8fe6b47bded95283f3b727cc0808abca61b12596e241150f1a2c1ffe6fe3836a9b847923b59a30689a942bbf121081a02a3a3278369b410b73c2f05e0e6044b02e9ff8ce971ec726d880074f58974ef3ad773784ece3671dcfa6edab187e26a7bf959ded11eba927440724ed59e1662d71e49f5d53ce19ae746452461cb19bc9d511e30fb46538e253961f2984a359c60dfef452299fbb360877d8cf999f368ef5716296dd2008f09db940746741bc45d842b113dcfcde6d024deb980d8b696fa74087231ab09bda68fd536e8040e035674c6012cc49f59be873054fe72ab704410bdb34fb7b63f87bbea2784e15781d41788bcf962b934b2173b047c4e1a1b5794fe93cde04f3e31c99c8125f53e655ed538ebac8f62a0343cc77200544bc2bb6691bab50d1be12e1fb3ecd0270ad87d16a0354b35e3c5cd5e9b45956c858bf6f03ed10f2663510427f7128f5f0501b8428643e03b84ca04e58026407e129e9299cf80e1126fb53e4730986985750997c1b3bc72898dd7623a3ebd0b72382417c80a6e35bb873661e925296782a317a2fbef490a0746166ec39db1fd3040450be7b9441208f3fcf7749f6b8f3cd75462590192af9df7adb0e965ab1ea17228f85da2a981e1fa2e88506606eb9c59e75e41b33e6933e7c4b0145d5277ab15f665928e46882ee6f49ae442a3838a70f91e1ccbf640b15f84f7ad4e4f0f3773d6dbee44c332d7fd77b79afbea5def65b22b5312613dffa7140c1a0049ef2ed2f1e1d98ec784c588df66d9588283b180390c4c50286705079d77c53be91d767b6fffbb32fa88dece54300a2214fdba09b749714df2c7acc747c114c7d7a3f9b677bdfcf905450b19fd9b932147d1f048536b29d06863da2e3971716bba899dca31a404ab90c335af0231dd1dc4093d8536f9dba3324578859c0f43f03ad54c01c63b3b10420b42d98c7a50de32ad8807877bf18cf7756f149723f21f0091eda15e0a0aefc4241cdfc3fd542b3ac3b9176f7ad2545ff9a5235336e6beb4c468f3209ad712bd16a909ce4252ce8455b7fd167de6c314db04faf8cf8695fe77a53f35720b3fd6ead39fd5d1b08db76a6c01a30c95a0bb2373e1ad773c6e84b18bcdc51b0f3fb7a780e80233d8317b0bbf6b3faf47b5ffd7d91f9ab5700ff17a04e4f71b4ada07559a2d7bef30827a3f988211ef64c8850120fde8118841ebdaf8cdf3fc23d76ffd08b6688d2247590edf8f425354a2f8a82fc3bf13edcc1ada4dd1e245040096a5b2cbf295154ac3807cdaf9647f0bfed5eeb9464407782881ec36ec7f541b255880b4419071515e9e58ab5fa84eca3f8f4526a62b3e0dbad8bd4438317af1c31b5ab87c069d25d26f594a9ca927a965de1c540651fb527be5a845efe3e04a19f82821cb7d038ec8fb68fed7ef736e15ca5b898f3ca41010b2967f381eedeecef6d235577f0a53e84b6e1138009be2f95cea0e6976a30f24476d3b3c6809a48b1d403d48931a3ed96651c9e86605cdb99bb12bbb875e175daa17c1224c9c35f8765b80c6429b154454fb6f0fa91bf7fd909927adf53ff063e57a59134f0e6abc080948f812f5a1d01e524ad44f44276c41884c694aac61df00804b37fbc80980dc33db068d91aa26cb40a460e2e727aeb867e0140d0f34790110deb5d730daebf8c282193bd5f8ed63acc3dbea6ebd6cfd1f2cd9c7cf2fd8f2115c +MD = aab8b76572a544eaec4cd64bdb5c84f3c6674e9cea12e596afe88384 + +Len = 32984 +Msg = 690b710fb47b7259303305b23440d0b5374da680367406205754e449cb64ac4af8868541d8e0d38b9ce7ff7f96bc7a5c55bcff7f125319da4b10e6a1adff1a46373346a89da25b88ea366a3c6a20ada7c770cb6872e2585244fb9b1c6655955a6e383eacca6912366247cc507913727ed49091a21fccca708c3d8d23bd0f256ee4bdf5b629df017e4c43b0238b3ed0c9c644da95e1b7771d6afd441c7bd5d26be2ebf22c80aa2f48ef519b1d6849cf70e3b62da97f4c683f25634771684ea537b0e9bd789872a47d949a17a6d7db775b740b1246c332a4bf06991e884c23a5bb96e0de0039e069038345ab26a19cd173c06e11d47311338655c451cbeffcdbdfdcf8dd2e2a9b85c4047be0058e36e49e1105b3bb58931e7b5a0f68a0197f4d8cc9584369354c00a75f643cab664eb8c5adf87f633a5e6c855ca0ec71915705a8a6299818209be393db274980f18f56d1dd70fe35e11a258ea59f65a5202a0b1cbb9262a5b42f3572c1ed8fedf79ec5a8e995b6971470527d7b3559a48ea165d150bc2b77b9b1fe2b59dd95583f260d34198e31f29d07fa3a278a52d6a3631daeadcf7af6f7c846a6eb20e32a92cd375bb584f7af428925acf0c5d7a326193b9a1af2d88a361d16cbbfdd01ccb83b4a07049e8e34cc9bdbbd200e7173e16ac57fde4dcc9b3d5875821d3d78a479194e1f4f0580eb02e72554fe8fa6ae9affc5444209de91d5206cb34c68ce1c9d0f4c8bdee0553aae150a59d16d01bc1a7f42d18e4e96d4c61d024695858e9bebc44a33f958938b96cd93b5e2d307052993450e0a437dccd8f83f2340bc3d882ce153ffe895c44583b6c74e79e742f28ee3d5e3fd111ae2d2592b329537654d280d6cd7f2be6fd03e78ae0dddd139e91316fa38b1dff57c7ee7cf5cdb1b8d51a7f19fa361fb1d948cbc50da58ba74537ed4bcf56cd69704a24b32875c933efc7135f34b7b7655f9382ab69e30ca7c9998c72402771e87e0072d5c9c5ec4ffb64d8071b789549f670869e73fae28d821299539471ade4d7a753356842ad958e7057a1fcfd2c08346c622eba71afd1055f9e604ac9c3f7238b408272508f8d1f75fcc077ca0e08afe38fccbbcbc70ad9ccf638b1a47687d848b52d7693f4af34f241e31a439dc3bf727a08e68dbaa365d75b3d8776181f6c5c3ba6f3719f645551c17a330e6dd1f995ab53c92c1d23302b17ff3ad33b4666224e7f676dc2450720e606709ef0bbc4d9be4de22b4112cf24c6fe2a2052754c576827410d1fe9a0ec3a185159c8d9d79b0d57afffd8faa950e2aaf401f0248558132f2ec40a9ad920481033e358c4787622f1b13e4733453be59626dc86eca7a0da076f27150116497a8eb6b012f44dd799ac645b0e6539426a301134993639ce1730b0aab194cee44bf4584499f1ae5bdc0857dab0f8ec00cb19619ea989a23c654b61c382ce897d56e177055035405f6465fa31b176d3f392a2867f3a5f87884eb81105eb26dc6105c6b196d8477a7ebd75da04925787975b7c0e5ace40401e3df73ce66d361e5bf324866d94a0d326519855a7d6238d78700657b5d7b4627abd9943f98b64e5ba897b73fe07c9e0e2cb4e1bafff534bf39ac1f114d924652a380ed493b84bb909434be8ccc42b0a2085179a81607f49a5164f68fc5528deb947d85d5996431ec4ab16835e3c5cd58c198530d0bc001d198cff3dd0de2a258467765ccf87f37d794b5ba236e2d7c971e3079cf2647e2cad6961de36d6b0d0381179314a1fd55b938e8be3cb4a246c8e8c2f3d8afc51fefd3607d8a2d1557520d051997dc0513fafff37b69ff4bb151e7f5c70eee6141a756d619b8940707afb1e8ff3bf0bffa02b17ef9939550479be372ff5b2b44cf5929a0fb56eb6aa58136684bea27549139163041a0bfda900ea4e0a3a6ad95516f12652b4d7a65b930652e078bc7ec6008f5b25a7ac5111312f1e8b9d7bd7d5050dacdaf838921cc2404e23a0619aef0d518ab4c07ef1c581094324bd5a3245364498291e260c665c4db2ced4365c3c80945c420318523e76e5365608aa7b1e2132629d951477b0d7ab4b22729f353710d45a5dddece504996f72901dd114d85c53b6d8db785684bae551ff0a20a857148e0f58bf813c905ee482835b6281fc5e24ef3b7fe63b6a7c687195096f3815221dd5d33669cb6a3e00d0704fd355029d228665e0d298da92b124850ebf7709b020684db10b140abd31071769a80073afd916c8bcc1f14da45be56f78a5c7ad55221138ede9a8fa62f170c9476516d7ecc50ad45238c74c17c53e84e5b6ac68778f7b151b89eca1c5beb806577f0aa7fa52fd394fabad4e73998a95b466b7d39de50072e86071993c15476f186a4e5c5f1f4838039ef5dd2e2563e2834a5c674ebf4bc2c301ba595c81996418cb746d619686712c874370ce15552bd0b61cabe07aa79539e2396a9d804875c6f6ff63c835327518f91891d9c5d8b20b5e7b0a29a3be6acb966145859dbf24a19151d7f997d6b46778d7b8b7d36915b187fa1a50c70aa3e672e4628b3677e1470f0e225c2addaf766b237e0eaa70d761e71c551c60f6e1291c154a34f70d4c15e4a6eb865ad1c6e4546e2a34d7aa777ae04432d2ee0d92e2068675193be9b59ca69e9c0ec43dab3fd92a75d0d750668af8244c1adad949cfa6ba7b9e8187ce59b967ac3be38bccc74deac959261d3500b31ef96ac3c466409123b63b7471f6cbb19494b435369c3947219d34405b538a95a6d339156988c33a54bd766142bf6113a7fdfe35e8aa0449517a08b2b55277144e520c5c3321e626b019e5f44498c85414408061fc6696b90ce82cf995a254b3980e6b14bbb217dad833f08a22034ff75bf4c1460c628f3ab650378186d3b1f7f660cbcb6dc9e6cb3f942cbf559f86720193675e731e4c32e04abee70366fd55fbe1a4dcb3c9c17c58c300f049be0a588794b917cb0a6c361d50199695ccb5521b099ce538423662b638f3b988ff3a2f50815d1e9eb75db8cfd8de2cb8857870d6610a6175b3c412ca8eab979dc3944b1ee1b9bf58959f3f6a7d72f5d611a546b05073ddc6aed901280c6f06f2bba740352e55867335af3e8f968e9e8901ca282b806fb6d58403b2315ad4842247f1b325cfc71089081c3aa1bc77934bc655b9ba5964891ce3d2aa88f2629b96e8f1f8736e74ca049d54c84367c45098efe65fef43e8c0f74eb45e816bafb9eb2f26a4a052e53f7055e74be7210b72faeeeaaf3ce872fb0f152752dd0ef26b797b1e2c3f45aedd46d25249ff60a366dc33d10c25bf8993cee7aa0bde85012cdc6d3713928f2810028314570ebf2298d75f381b2c219327b126cafe1846228a7e660fef6cc7e7944df8bbd7a7851fa556e19e40c2c726334062f8be1cdafce0fa061704006863c663a397602c6ad108e53b72019c08c923171cb1a05eabe6dcb9cddb160fe93322ee0455653fd91d300cfd31f1ea7ee2938fc49469503176ea481dca89ede2cc3667ab647b44482ab728877c86608208e124fb0f6d842433762f8663d41cbda57d4af95306cc30a00ad26aa03380cab2b8711081217cdc932cda8845893ef24564228e9f8c4a3b03a7a5275b8dbda16665eea59819acc31c6ac3a3de1da729228768dba89040cfcc19fb4decf989ce9a96184ac2da968045ac9559ac05f7cac35388511ca742577fee4f3f031b777ad5b568408fd8cc8c858eaa2a1de6a33fbe652b8f5a35b17a85713b7b0c48095e9e3069576d98a160827d8c85c2142c206a18acf6efc03091835f2aa28713a1e25ab395dfda9ed77492f5b70d372314f55cfaa7284bdb2244d014b725f212f3ae91ab684a555fb1515d83a420dba7d0371d9784840cfb190d121e4b75dbaa50fbe9847b376c6fd18f38a3fe512df6f05e125bdfaa91848742cff85222b25e5c82b8db29279e23aa86cad3002eacb4f7e2d1d402fc781bef8e401f85ad04b378bb961c0c8b592fceb07a9d6409e646595de28cb90a3f25d46839104085413e280ee7d39fe32bf890c4ce6f9483494f8737bad24c544546b83911670d4c06430d15547e5dbf94f2b31c3cd61c1b741523f8c161475b38d31da94f805651b2867a373288c08112c2783f5c4d5542c55b9229aca6348f687f771169e8b646d46d021d289f52c823cc82969341fa99db776442c31d9e8172805709e72ca78bea6b370f9d0e9f05569554ba7860567114fd1cccab33efa1d5aa200b5db894a173058bb706730fc9199151338205037910511e2fcb8592911041749e14192827fcc0628c0b492f73eb651a7a36cc8c024c180b04ba8f31afa0ead72ad0cabc7ff6207df7021d78965a7522f70d034abd26b645b3eebd478e05fa9a39ea59dc19edaa1090814c65b0d545dd428b65d9fa3eb060e5ee9c4e9cce156063e722f19641c1dce10f728153ea5bdbd52850c45a029aeef310b8b15c47bfbc014dc2b775910c3551131c55f0082b81476a50745d00ea42641b7f0a6d315dffca84c5782869fdac7932a65df5cd398fe1c7e16463c802fdc1656bd41fe984be083287de3f2afac4b1c4ad0405980a3a5cd7803f0ea6898393651b8904fea87942cd96342a5297f0a36f9cd280071223110fb95ece4af28642b0eaa3bcdf4db412bc8d245a8f69c2c689f2640588f5cca6e6f93e2323b24867df75aea809e8f0f095c919702fc4bd83aa4a12f69c09b966e3cc679daf6d7c6b273924471d1ea254dfc6adebb25d3363570079d3bed25c098caf65ae6c7884d54e918f1a77335ac7f1223c3dc587e6fe06b1f34d7ff446e7481ea2d5d957e42ebc3b59a2a6db9cb280585ed6c7d92abc4feb39944dc3dc98bca6c99484a02cefd6831e703a8bbabcf3d5805737b5811678f89778a6e5bf8640b4246aecd5c191440547f390b8673fc2264b2fa3c18ca53886b74b29be52387ad35dd9706d44ab7b3e60bd47d614c371c709d07a71afd104f1f38c24d22747d190d060cddb28a6f29ae32dde8935e0993466da5a4a5d3244e6d6cc56b5b11cdb69268133a3d00c20a759d5b3365d0f9efaccbd91b027419eb1fb8c0ddd922ffeb8cacb705bed53abe03f356461fcb90986b5fadf47a077790fbc3bd8be1d09c22c279fd267d305fad20ddd709097654f64bd0281753b5c4a4cb36c35dbe422bc2fd78ef85c23ab8409403e4646afacf7113c7526dd5a58a8f55b8db3bb6a234330551940bd51acddd260c883f8c7e89728deb34dc4a0050b862f20c0d13153fdca2abf49efdf926eea0a1c882b52b095f7fe5d54df8ed9f89b98c5ebb1bc5d5279c2e182784ff4cd9c869ae152e29d7a2b25c3ea92895fe69242dd92d17da7d7bba83078fb053c608670d41e03f9f7ba1eef975d6231ff5c0697d864b4e7cc040c552c9bcca1e1ce1443489cb2fb57dc6fa6484be2eb40cf751266cfe0ad125df864267981987d7ce29878fbf48956678a0447247947ccc74a4cd932c910434bec2fce80ae7b77e35dcad5aa2d064be1ea641485b9b9ebca02a1d04be2d3b7546442854f97ad69980264ff25e104d0b22d5040de18d4365e3aabbc69d239e71dfd36db44f1c0bb016cf1560d95076d7ebf535c9c1b0924da6ee52e1afbe57aff236730ff3127e4c5f9fa6abfdd807a9e1ce7c85e34db4fe4fbc885ede458bb7e536e36dcda758f4c35eabdbb0ef290a6c277f482fabd00048dd054411ff6512229b65d6c522c131aad3cbf9dcde0381f4cae91a8d140fd9f719729b30350a470f2da053c3cae08a7cc7af0c68eebf96e17d6003e5ce9913c637776c2230a5de16b33debafe9de87 +MD = a22cb5c43e39024cd1b46d349e84c9ba81fc42a3323c7f8ebc8c1884 + +Len = 33776 +Msg = ca5893a1e5c06b218d91d87dd4e89259621d9c7f66ecd324d3d7c86dc8c6cb314ff148014bff5765ac6f8e69e5381958a0ac0dc8b0a2fad647d4c0b36986a360a069a1b5f2be02a810be32ccd03acc18dd7ff7eaad7cf54bb427f975d81c3993248745c7c045977121466baf7d36d120825c00ee47c2ed0b83961cbafdd0b6524315dd3e9fdb3c4947cfe219d47350f8f50cd0db65bb099c1aead18bc0e9422565d9102376ca19b7ea203e12bd3b7229a05710b9efb07288e3eabfef09b10495f29d877d2c585843720228a220d45e3aea046890cce94f5744608feec06e25295227e954abce1e75473d48d2e5873db33add7f69e6aec98fa712e890cd69cc6aee3fdfb1da7496d6d19945a9f49c371dfaa8fe4b244708ba73ca73de18ea22de2caf119ba191e5ed79dec82f355b73ff912e8c3f6efb335f104ed8df89394f0f753e261ae86e3642a5d3786d910c1ae16737d24cac147307e666be9b099d7a8532b3c7369754af5ebe41fe6aeef6534be48b787ac6d8ef395ddccd1b7e60ccc6c9d79bf8978978c82df0012f366247c670f125d1a590d07ddd77ae66d2c86c5ca4724b67ce55ba0859a82ac24f981ed97332815a2f833d5bcefe0984eb1e82cf294c7e8b25029da7a931212d23e0ff0d5516351c4dfb5f5c983a857eb3a938a5c22cdd6d84d7482c87528d78988212e97e65e91fe83e5d07a3f3cb5b10b3b468d6db0f14d41be41f5ad516a998c581f556e7446ce69560e557f08323ec821e9fcc22bd88fb179809898065ca0af371b94664ef0a3148907c1dfb54df2e5f9fd30ec78fd2e3138d717e1c22e2d5520cbeb4a39201af9f14575bdae696be925f8b03922cf97256eadfa070f5fae32b7a8b096dd45a4ae215fb7a56e2508463854f134d3d05922ad8db574684191bc5e3a8ae8a5d1ce858baf2e337f015671a39a7a6be69ff2ad57fee0b647a47656a6e9e09c2d64f734a2cc3fd45b7ee52fea51c24af59ee22a0069f24937d8ca96043f484dde7fcd20092f62f48e0e22a58ee35f6e6b5da62d396770a9b35f1cff08b3286a2372aedc21513e30712fad8703f7b822b24ccd1b656fd26444c7dc0626ee176da6fe1acd8dda3804bf63d448ebe7531484eca59916fb9de56673962fe1388be4d3629f789112e6edc34b356fa93ab6b03dcdfe1ab08339b98312b9e0ca3afc5c3350bb61fda3a14827364f7fbe7a599267610524d4af4c6d34f5d5dd345def304148ed1e05f51dc055b590ddbe2ec2177c36792bf5d83c5cf6cd7859c229eb0d77abb3015c9fa2d2c959981e0ab076dbf6ceb8a49686802542e9fffaf617664060f98bc053fbe6fc0c92c3c536b7ee3c518a42233932ce32a3dbfb4542cef77577c305bfaea230b8a9e1b257c49daed53709b43c40856d218423f8bd3a88f52936988f63af1b3674fbd6d23a26ea1f22f1cd7d345ec6e36e8e5256b73ffe15b827daa760e7df6ecdace2a200e015e5a22c360bbfe6afc7760cd7b3e7d596afbeb619dc1beb67302f2785a03092b968cf40d3fe437a789fd49a349eb39ddb49a97bd69c192c3b2125e6306b4d914d3f26da47b3538ce9c2f6a0e955aefb446a14f38175cd2cd3b82e738361ac6e39cf3552d1c954805be778db76973e705a876d97aad7cc5fb97bc559ff01f1ac17af773532beeb174763c7845cc1e68f96383fd2c3608b4764d26703f3eaa1bd5f46690bbaf27b9454ce7f461c743bcb8fe2f85f6b7e8e765e52affc127a4134892a97410b028a99dc8dec9b360ca296901e1377f3a04a6f1e72fccccb4f34841dc26e7f837d9c9a7738abfe2a19bf835f403dd70c6443942dc9d9d09eb8003e95b46b11b4a226088d4539e97929e714360fc3d706490e77f4cdb3b20d6338b6796719923f4ebb86b74a22d793abcdbbccd3420281bd0fad1bd536eb87df42ae4151069b53a1c1776d9dd3531a1db80c7c1134d3ff3ecb85fb96cfd79e6ac26886189e77c269dc6d18d6e7e66cfe4a68dc6018e5ef4cc6a52c78eb20d1b41c87a0146dc1dbf560da518bbd0c1cdc096356366a92d275857d170215319249d58e37dad0f430d2f331a002ef3eaa25598e821aa67539379c9053a8da94807a61eea5e284a9419118257cf2dae88568df3ce8635907940150615af3b7c3fce4661b82b1e53b8eae240850c22cb43f24ff10e1c6fec463715572a579194a981646b746cf7f358888cb6cb407410c57c82d8d16bc142637f62046cb9f8b82c26e88247aa1af21cfcf52c52f28b46b3ff10f13efa915c7720e255025dd9b270c7b9ef596bf118ab4d07e941aacf35b880e0847e5148002b237f9215cb9a481e6bc1fad13ae32dae83a837c1f1a8a47a09dad9b8f84ff7278f2002cc8ca543de1be7ead89c58f8cca7c25cfa4d7e5ca1a1e63715780c09126cadee5027606a57de1309951bb842aec03ca11349b926d651ece8bd57e9fd95c30d9ec824358732bc2d9d313e6cd3fbd6fe4e356ac1c8c120d432d7204d9d579b2a5a5d0c8b6016bd1eefd38dda735cf2f0ab873afe0a0916865e8b58a0af01fceb6a3765c9bfaceacc47a4916bea791afa003240d9b6563bebb3038949fc3aee38157dba596a9c4a20edccd187fff95904945d04b8925298e97b643ab24cab7af9a55890a2298de5022872d6977c85b4f6b0310f0468a33469fcd9f44267fba71660ef710cc628c45b41be260127c435b89cd6e826fef1175480873e6114d37e788f6be4ff0714ee1180d94b2fc85fe332a07317841ce54a904d99a0771ddb050579f372e3b6f96b0e2debcd8729fdc64d043025888c26d407ab35a2ec48ba46a668b0a12099814438901b32731147e7ef0f369999155dbd9fe484cd295e194944a2c9fc1e79528079f192045a47e44d010aadfb1e7e320e423fada894269f14c5706708461d1427b89778caa4947d006c3dbdd481904cced703d8bc966af5b1131ab24ffe4f7042ddcbf40db8c0ba0916f08caa2913540546792f8f98f0c22814e8d158afd50dd8cfd52e540093426fe96b45087ecff1bb77e9d7ab0081af7fb222edabc27895f178fd4f27e3d5be3accf50e73e88bccf9519afb9837e564c0d30f2dd19d00ad95bf8b7f0ec94dd573a6d80f75cf118dc6bed6c1dca6e488f361f8ba51aa35ffcd8cc6e5921ac43021615a72959b27db2ba6e35101b446c31e4325bbb350df33a0c7f7aa3a3f02774ce4c45c5cb4965e2fef0ad48fc8d2bf4b61de5980f6c5f1175966f58f9ecf51fc175ef7508325bfda8293720c4c512181a36bbc3f06b0e039285bef18a0f3663ae26f6bfb6e9ea63447c65202a78c94c9f1130b78e768a80e1d1ec05dad355f0d2d41e0e5dec7ba4626eb9df84148be2a33206fb301b5f29e20f68fe62e5ee47ee01a7d943c6aa41708497a77825047ac51d80f79bc5f66f21a2d843c89369c94e3436a92ee4d0cafd3291206d26bd85733841451802dab11f109c9e6288530571e04d0675e39981771d38d2d99601934c26ba5c4b5e86a038fd3836c711347cf7aa4d799f2f5f356c88f12743ff8b14ae4d7eb59c3584ad1dad2dd57cea88a05dd6da6b2144bc374c2a5c9642cfb49a1820e0d981245f482bc50fd2da60ba10031a5663a2b01b17a465cdb84c8318842855934090a770f1e1c930b79610533c85c953eb79fe0646f3bfe705c7c611734d300883514b544aee1e430c0665ee866488557b3d7b0855b8bd1af75ae559d7f564b30a396c93b38f58b938c1fde6ae1dbbcd8b53d39bb471d1ec156c8d3c32cf48255dbfa799bc73fd05e64f34c5e41ff84ea463842af3ad92cce8730a4314297ec1e66a68e0c60a7fbb6d14a726f8f9b23b5ed3095083ca745fd9150908ec926d2b4cb04d0380d1553c55a8d1643d296e260328df86f556faf76fb8e5e82ca897c3e927a06c4d57121b38722018212da09149db8348c8e19b3624d54d8b74ba832e54472fa5bc1a3ada8e072fbd5574ee0f8b7171106ee8d99e91009c4d2576b3cd1685372a3d7943fcbeee5cce4aadaaf35071356867db4a932cb14eb7ef3bae12986853744212a1f4438e43b561266bdf21515cdb344742b6606df1561297d6b16267011e7a74e953c46d511d398da53586a833c364ab666ac4ad10923009c20bfd17cc73470e9e8dba1211605431eb98f8dc66cb69863a32d1d52916d81ff494d0e1123d284e16148d03112911b1b37be064725dc34612a100aca73e7b28e2de76697eb6aeb2048ac5b6ccd2228b7150d5e6d2e50289a437e96a178389d3216b66076e8a3ad8ce52ecb390e5e73db9aa51c9f51b97cf4369f4b4068084ad14ae18416e226d30f7ff7a7029fed03700faec84754bf36594a9ab00d0b01bf5412915adfa19a65905f2e772e4678e05cbc4febcc000b60b0c8984d7129c906a4b6ee6b3aeca869f6cefcc425cca71389e9b10c961d4501e1f8c0abd5890827a77e1f3e8d8cf8e92b1289144ef921a3dddefcb30d731522d3223b519ff4672847b24d5b414a31ec1673fcf213948f9842e2576899c921ca708e30c739328d136b999f4bbfecfb7b9f3b7de3db6798fb9f3feab4a2e914019f84c896090b24effb7c3e956e3a009daeb036710f38e5d3db3bde1e909994cf484b2b457947d1c5dea351c1b5fee55a2b1c4c2315d01d28e01f5b2fcba2493d532c805cefad3e9cfe560158fefe55bafec5ea8156f7e9029533886dbbccdd52a96fef64d506137c42dd76e1b003f6c610f436143a74f16ae2be8e62c8def517305ca2e4921af76e927fd7e432d5708547f058632a11dc67af0a95965ba23c92d13abe648eb19378d6864ce9ee3c6c008c0379f78c945302e45dc490dade57cd75536e6c31938fa5f638ff794b00923dc873c156c9c6fd426a0043d8af5bf1d002edd885e38792fadbde151bb1e88946e189570a4a6f832f273b3bf640e1b0a1625124360c5744816bbfb95888befa23c18d649b76578cd10455d472f7383c4a7bc77b0814c94f418f2511b739488cda4ec70f8fb445c131e99835d53b273ed33796058263a65842305645c02a4fe875727e81706e03c956bf4a87a773775e427c08e92c61b50a8d349b7efbc49ab5fb13fce1c50b574e486cb4f16e09f043a13463508e77c00a29853ce4f16ff39c751b875817f30af510da1e9cb4645a96f746f061310b8d031e09819e29942045ea71680eed8de468b5efcfaf00ec7dfe4d9af7459c87e69b75aab2d52b99ea5762fde72acf43ac4f3f951153db092124aa18c0235751917a354e16b080e8197be6a74bd5457c2c51b7b32ab0cc230daf16a89224ebd3564966dff658afe775587c57de36d8a12a17243163ed5ba20a489a32b770df73ffb010449af44000c5972ff5e6760f186f498ef6043310eee0973c9e752ebb9b52563c654aadbc9ad3df0469acbc734ac38efdec55a9746f574306d4158608b219e4f22a4eabaa1c65d9059b78318b9fed8e7afa9e780e8e36f500bcdea14c201a01387bed1592f0442c397492fcdf80b7f20c0826c766b14754313f1aa7124c1e5618407113fc7d3881a8da4147f753e762bcff36bf05425009a1430fc0dfa0ec8b996120cf712b09805bb6ce375c81468591c5168872a71abb58b107123d834e47c3c6436e78627ed059f181f695739c0493430e49354a6d135f7248c8b35d0a329f58211b9a8a601aaa71a2ac2a90b186ca61662ad79111b9bd6c1a08ca97e9f534fd04fc5e0b770557207980a33f4cb43f086554dfe6cd547a89c7fa0897b3388b9e32394c4e8b3a67e54e9b89ea3736f91e54efd5b06a8c9fb096c8f8c630a2aa24f4fbecb96460e2a7682564f838b3008c7b224256b10b32c9ce971f8c27dc9b75926ac7b5c920d1501045bad118d45d3b2216ad4267763ebbb8920752628e667b54ad64ab84223bc78e2315dd9e40171291f39edb5778c8709cde377ea75f111c82ed4b015b0d28f42a +MD = 6d99e24ae740fb14d971811c6958965790a4e45afa342823a2451cb4 + +Len = 34568 +Msg = cae884fa25adedd883ef4e7c855def1966cf928083c40f361b0f3cca53cd0f657d9a07a39905c7a11c410558f11da229be351ab8686a1ffed991819a016851681ace465531335f72e24dca47630c0569c4d1434f74db11610801395238a7e7b02aeb0ab9f41ffd715c7c67f1e11460020009d5eab0fd2d862fc92c990072186435591b77eab1e9c61236a2ff761cfa1bfa46973422b9bb96d650221862b12eadc17f41361bd26a9a8ce44519270d1cdd3bf152d2d4f802b885fee377654c6fb258c7449e9068ca1553ec16e6fecd0e704a70ce6fcea04b15c53b365d122b249c8198eb58505c4f5eeeb8de0f024518fbaf2dd3b1169aded41d6fe5726f379492c55aff0c6397429ee5ae643b3b5d82a6f38e2940b6cf031f1602b65f875609bdaa764961d200ebfcc1387213b2fe939b9dfd97c5b626021b365d72cc5f71c944ba528e00a47e91a108bdce3f6e0e94ff35e1e7e81c8622f208e6e16001711d507d579991e1fb7db445a541667776cdfd43a2df50f2d9accc1106cac4743c4d097aed31bb915ef85efd579330d61f86ba50a848a64006e8d0db25f6a0c0bca196397d1d26bd8f48c7ba3d8c4792f00761e35ae9910cf51e27edac2e9beed76120426d267b6d75b51603bef450b3d0971885228cba608e96f8cf01385d0477d4ce1e271462a7fa8974614292f642a98007bd67f7c843b9976c0a8edc8f0d8343c95411af8275050a085b312fde466208581392f364be5e6bab25bae4d90ee3f6386c95be84de7f82fb79f493b3c7e378300f094836d76558dca8ec16e2117f3544ee1a0b0feb4e377443f1861bce1418ba3a35bee598b6a7281b8e3c531d3f481563085ccca25b729c4291d0be61dd2f1b1b7e1d1a0939a0b607071cd33b0b76d253c67a630d8e7a9afd3c38468b26077e3b4d2c7c31d78aaff4bf7f0b72cb09a444be2d7b34cf9997fc5b885851d7e6092008b4b41876af3a681e2ca2ca6747b2c0573cbc1d0715bbc854869fbdd815e454197d69c6ff5580ed8ced414bc779254ef971d0d21c372de891fbc0d611dc385fe64f44445bc5a80a718890fed3e624770c925c5bf84716e478ae66a46a822dc7d9f2ed997047db4835c636ea74d8d8c1f8680bbe818d9d4573693730cc51ea16582d0bcd2822412d406fdc17909568b626bb8205a150eb92e9f2db811d8f98d3cdca46e96aa00143fa4b298e1066fddefc536c383fda27534212fb9f47855e879f8f48f31d074412cc21c656dd93bfc0e3f76f5d43717a11e5913f93307b65b93645b6f62ba031211cbb5a77dd64d5e44471337e945e0c523c374e64c2b8d4f1fab43bf77bb3f1f853df8efafa2168d2858761a21ce904a1aeccd11ae386d4b853a37d00f588ab1fda560ae61b119f131002a1d2c2598b83a3176fbe7d2b8d94a9db24188166881f17e87543287da32e4ba99a156ef8c88283e1d15777f026106425d9480797b07e745c781a08ad9baba046f573080ce425b7f29eedb91dc8b1ec4744976f614ac7587cba72a5e9b013769f59f479de06f4a5127f892bfa9a01a9090c0da10d7e7f2b0ee453e6790aec347e6fa1a7b65778b6091c31b5cfc5870435d9b286e2763054db9dc5b3a4d0c144a9df817bdcff38529e1cf03fe370cb6391558f042a57613dab8ed1f4b42b170de8509cdd9725bde29b28cbb17fc4562fe726ab042b4c9b4d465e7e91ef4278f7056bfbb630f18dccc6e7ccf3ebe9afd1fdf40e6f2f7a65ec73b6d5739e3e6b6ac6d7a5ecef8c327ae702faed6f065eaf9b68c12b7c0c4782fc3edc80084679cef53ca2691c1e3452c8205d885343ec338b29cb225a28c977a79d9da17783288b5844fb13ffce19be30eafeaadec9e0c494e0343a13f774343d7c20bf311c0309b895b7d4e0c56b25e607e43c59c0c2c97d35055deea0cf1f85826bc07f3a8fb1dcd7de93062bb1efb32017270c501bac0fcf4572324b63a14958888ea90556e98eb37938ba2774835fdda0513f9f71d41257fc612822b6234fa57f0ff7a4df1a94d08faa44e13b4bb2e586a43ad84fa94e743212184a520b6012562db140b2adb7d828d3ec828eae74e1d10744213a938acff06c49eebfc2444717ce1e005808bf704c9afa32f5146c788a61a7a2bcfa90103d59053483b1c3ebcadc870d5895744204e7b518f9e56353b89ca9855c4626de22c19244283fa5a6753e348e3abb9ef657a2665d218a211a639f93efa3df15e1a68a394736d3b12222dc6dac87e104344eb45528f6696e749352ad0a172e24c2d19d426533d7b004d89e7a8fc6716fa3f003caa2ffeb1209519d3efe42991d29abe2f5c5a9b26bf7a06ca25e7fd2a7eb45780df3c478d482a46890f3ac89c6bd3d419a901fcca7a1812e2f423a6c74b555fb6542cd797d87959be910db67e9278ea378ed1e8d2faa83cc676280a79ea929751cb7a354d5bf2b1e927d59994c0fa6eed8052d5dcabbae2e93e7d8ebec6ec8cc787ccd73a4d36ed9d363ae89b81b8e0c0200d4a43f7c0b3dfaf8cba027ad3aeac2b6d33cb26a66b5f3ea609df4f64de33e059bca5794a1dfe6bee02e170d88b541903e19c72d1c983c39f93fca46eb5dd43c0b37daac78fd9d609ffd8437b9173f309471aac4976cf47901d600b471610bceab53906b99806807907536d2d5f702be60ac24d6df1764d1feca5fe7e6d62de30387407a0b4e8fdb3cfff487e53cd3632731fd0bfd83d46a7a82af8852a680a29c39b480d6515a032a0188feefd0fa46736afd0df8968b6bfc68b83ebeb84d34fdd3b226036f11a8e2e5b8defe9abf91cbbeeb81d83ad3fd0de341b231f4dbc1aebb03149992fbf1ed114dcf17826a69b8959112a656f248345b148bb3427470385b6ff1a0a16107d2ef0f7b447042f8c158b56669d13173f938f7724c8a5e692219bd6521848b1119e5c5878c4c90666e6d20252995d8a7e4e3b30f05b4e2d5f45fb71a2223c1384b5d399ef8fe9cdb473d9af8ee892f0b7ec21009e5a848dc379423b5ae664ba4efbe31668e6fae7ed530eb87c1957ec84e3ed509f44fd8a5721fcae1ca35707c8d70768758850e779fafda79a9a10c05dcc0ccb63b8fda592d6a744480787ae9addbd0aa5e2904ef2d203076af9522ebb1aebbb9c151951ff1dce886d717af12d8670677a744d70e08ecb528da5908a254716bb98f7e522044ddf050d8fa5820957ce2953bbcd0fbb77c313432d606514d72a45fabfc5983b1d5524a8909bc3a6d822aad227b37dfc2376c45bff2642025182d531fb5f271bd2cd71bf42d2589e7e1a766646754e1b2842d018a96693863cad03cf38f6512f24b476b214cd9348b0121690a6a6e2a0ecd3e109aab5ec18ff253c22d74f98dd7986ae4164f2164e14a605d1c6bcee15e79651bf7178be232f77f8ed74bf70bf47c082cdd1f454172252beba051bd2f2bf06bcaaac438c4d3411c48f8fca7b3d260e8eb7ea28df2c5f84bbba006813cfb9918c4ba98ad8ffa38f298996e51aef8aad3caffc241a0622c89742371622f59de33b22f7d316a2f44c824c18b3d23eec491706a66a872d22aabbe327aaa30ca26863b125a0e7dfbcd6897783ab33b3d14ea87c6760b919c597943d4099f69d8dad7086a168af1e53b9897c663fa1e6c04a6b41cd9b2244820bda811068bff0a60efc03f9beeee76f621ccb4ee5bf303fa8ca17379e5545fe93d98f159b41de821960c99d0829b3466cbe049c41ee28b6065f6d33dec49681bc2b97deb63e9fb859394819d8d21a9f35d788ecb8b158b9df95a450d0e2aeb1d14b3bca2df8bcaf5b0fffeea59a85d06a13f89ece9b18b191076cfd1951f7059fb2fb767722cded7b3f6199f2c57d7055dda441082e1133c72f27c71c75280363fd5742362f4bd946520d9a54f569f5a5af4c71d9ccbac6ee67551d6ede8a21ca74cfdbcf80af1958e2646e20ace3d6b603318fd8097dd1736a758e64e0c5f73fd3d5a1c7c970241f6af683fa4e739a2373f4196766e2f9f2832988a34e43ea4074f912936c276ff646448a467c81c66a6c14ad2c578296e85bb19abe598c7158e2baccd6db4d739a2ecedfa999a6e1e76613997b7dc53ec14ede42faa51822f5978b2ee6b94ac5676f15f278384b5346fc618cf92c335829f6d0000cb37f85a32dfac76768b7ebea918a7156daf7b0f5999ee619f545896ece675049071b0ffdf08a14cd7c1d4d8030bccaa9e424717fc81c43526b84392c5fe4c2541283284299a9958d65d360e4b72d6d06066a2b42027a1336f167edcf05d8c4925830753d83e9d82ba882cc74bf4ce6ef943134e8c328d43c19792de35ac3d5a85abb6d2b49bb3b2cd693f6cc93abb6cb200224d094b914d666306fe5e93673fa9c7c76b845ae6d05529f6638eeca5b1d3c657195f1ab339a4a162a631b913e0d900c38512223bc49befda1562b19427a4bc3b1a5646fdefc4792f3d78c749255d7e3187249cbc76e7e472ea0c3191b56d0b55b9b57877570d14f32bf9640ff67c6899db836f70cf812f464b5615a34375da2d5c4657285ac99a39d77d396f3b80e683e8f7445fb5b0fade9e0605d3ba05524c6dcf8c18de3e3386abcbee70dcaf22781648c39211bd6ac34ce5a82800659b395219be4fccb605640ead2a1ac15241ffcd3d9310ccf0a97cbebba7aafedddc7c75ec96d60d773b5a68e99576d3b06ea1759f5de1cc91df915b50a9619cb53d9e3c10bcb487c9fbf12248d88bf813cfe57636c80efbe8338a8a6b5756c334e726114cd7f124f66dafa2929b6219c18c5339ca7d9e403dcef0b5d6599059a3029c5b698f96cb45bb1f518f85011f03ce732423239982d7d84b43575617474ab58981308ea964fd0ac697063f72f021bdcea0086308abff78219cb7f7f476712974ed667935d667852eddc171bd766380eb1643e5f2a2fdd6fc28bde32ecd6086e506d6fb3f0bcb51de8986c2e897114052ec9a505f4f191b634e33c2cd335ef3643447bad1ea71995e051edafd3d72248c8cd64d579a9b6fdf79df3eda92b5987adf805ef25ba08337b75162034fcf55205cbf83e36bcaf9f70e8bfd5bd1ab9eae6f4a90ab46a137f009e60203b570fa96c61c9b0aaaefe23376fda75bd8892d894c6df80393bdde1162a76104579d3c7730b73cd53f52511b19fee5df8f976c92dfb13d022b39a022295a280e1d9e434a04560f4a123b6f385f555ff1de1c84518ede07b0f460a4acc8c8fe29efba3697a9c2bb740cf26411b1ccbc98ad629d4ec2bb0016d7791337a6b98c5eb53b3de787c3e95813be572e7529a4dde4afdd12e411ce3bbccb14492bf57ab4576782c00620410010e970181535c1c66b4c6f245aa819278c9fd06cbf436f34bd872aad8ea36a73ecb9d956f7b8b85e2a81790c8e488ae32d3d6f27ca6c13e5cfe2603387120db98d77b770857a34aa09952453e6b9c87689ed1802b4390fcf76c24adc5936d1dbdd6a35ef2542dbb4f1d29780ccc27ce887f7f386e56f0bfa986d102f6cd75fe0c3dc785a41d95583c87efb1ba72d4e420ea2293ac6d9ae6f1e2cdbb429bd5ed02613ab3940084b1f78e277acdfc0e58b0838e2a7bd3ea135f147d3f4f6af77b3f058f4158a956591e74634bcdc44eacb5cff455333658c54f7061f763c76529208f37b7487484ae0fff159d20580040af2407bc8911715d51ab1e8c264da9674562c69e19feba314a62d0f77c43edc51b242ab8e3d1ce7bf418f5561d4a3ec62c24be6e13a441736c6407e3280441aa7844ffe2ba13ca81a54e98fdaf699fb63349719fec01d4f4c4673cd8ba25b651550ad9c29233f01ee3a07bdb531846c7f94592bbf993cf2610e0e250a904b65a2fea5ac102dec9944dd31087bec2be6becada44ac2d69a97a0659ad38b3dcc356767f5766260c192324af98b391571229be5f8a4ee46e1ca1169c8e9c73d62739a083c4b576672894f7c894e587d097c75933282c2712f2dd261eefbf3900385464f91c8484c56f9e3ec6249a365e1fa1819d44cf5c1cd4371e28f9276b239faeab28865cbaee9549e1ef725806c94fbd1fe407bded5569b5e602d35e7307044f5b592bc47fa9439dc98ca3aa +MD = 69af5ff4c109182dae8ec7792deb6fd309fe01bd0b81bd8df8208a73 + +Len = 35360 +Msg = 81f0f1f020766e876ca103cadfd021b3a05d490e57227e223f3cfa937d0e2087b089b208c9ab44aa1d46f06db8034ce4f4a699974b943da76a9274b086cf42f3f325acb5f39c27e2cc3051f61dd4df1d71b6d69915c5ff6527719418f0b1400b744b47be46500078a1e58c2eb549c2a63f1469dd5cbdaaa59f5fc49261bd02175883ebed6ccfb8b4c5ef0bdd296dddc78548b828c98527aff9e66ce881fa705fca5600080a2135de60d634cb204518c86cdb2d4504245fcb5e8ef2e0fa70732bf04aeed8cb4f613e992071bf43db5cf01b542ffab4a23941f6debf437127f1c2f2e91d25545f231c995729833a368f89ba3b251181089c58e85e3bd89128d36df9bbf5b7505c62bf8802c3ddac5e9bd973197950155d72595d96ce69ff7a02742d47df55654b08708daaa996415c66296c75928015a9a28c7c0fe1bc6625651fb51541c93b36fc77d0d64276a237dac0cdd7d8692cf414396e50da9b6c32e3b5b9ad84d97b24261c7a0ef64477f7dee8bfc7b3d20047b0a85ae123ccb9a866806398114ecd1e6ea7b3db2dca67a559e76ace8b8439a95e21694b2217f68fd5c6d95d4fefd82bbc5fa2c34fce1b473506f573c848802306ebc3154146cbef17d04384a5864553f88d7050c4193be8598d883fd2e47dbc904f8fc7e71fdfd116e6ca957dd9bb9e0a79440af5736e8dadc44db91220d77ce495f6ea7b6cdb3cb95096193eb2e315da6b477848a35c4019f26969eec6366bea051f0567f36639e855ce984fd765bf51aba1222673ae08856107d7cf9c44928be632a0127d29cf8b3e9a981a10e8a555807990f8a90ceed9574d8c1e6ca6f8ad825943e4d1cc068b5323a3062714cdcf34f74b240e1df8fd1d630f41fc07a5391fba7745b9f6e6cedc91407be29341a80d45da146a8a30d9fb72e8a2140da218067dc39dfb4f783d210cf8e10b0a09c65488c52e85fa9e5638a2a0a77e60f6307fcbb0546080c3c06abb51a168242b1350eb95dc2616495a1e1abeba01a9a96bd1ccc5d2b031cf40fec6d521c287b1764b93d185178639cef303ca426490c4b046a78a80b309a5a326560ccae0dba2d68bab01901ef1769b00844ca770bc4ee6248587c430b14cd32a937d048cc9071d5959ad67040009a78dc6cd50edd64ff7b48d4507f1d1ccb652a4b0388cf8e732fdc55e71905af9dce2f1d5a7a385d0ca3ee84bb2bc102e36e5b12dcca9124afdbf199b168ca74e21462cea135972d7470abd212b5a16793a2de47d2aabbc3966e77aedbebe91105d039f96fcd9456f565f3550dc938cb5a9706327b85aa0ba55bc12dbd1f0be487a5f7360cae9a59ddf87785f2b2e1aeb6df756b3e07e66d8b28709edb7e8d6fe5fa3d0d0e6523a6bcac8add682f567226d0ae6a909deb698659087abd96f8238f416dd6fb6dbade0ff6bfc3e48ae1c6291f13a929a433604561fb39e9d4c6a002102c3c4a34ea60467b78e1de522e0b3c1f37cf6fd7591236e7cb54d6c49355dceada9581672cce0e8f68bfec1195c1ee559d15b993c6dfd93efb640af2c8b58e360b8b1750ec87b6b6e1b66445b38aae56c634bd660739baebfde00ccbe16f74863185929eb41ded96964dfd6af1b60a9715a4d1ca84a04a83554142dc77b44e6fef0d89bd1e00f182d91f0dfdead461ab3deead3dd9a4067994104380f6547a37968b432874d181202c822c7b197671e7915a863c70d58d533cc59575d7a07681baa7755d72f00ad3231fbf6ed81c89e0a2a12352e4953d94a1e9af17a628c1e2edba86e872fd0d304f605d45d127383af43adafdaf6395a275e4f6d2fc6deabf826d0e460f48f6bbf3cc8cac8f36fb3b089033a93bd134213b50135424e06f9c2b1761f2a27455dac2ecb3ef5ccc41855239b3f2046e878544b37b07ba10beed3a42287ad6ffb9113f19699ad447b99e639fd244a38c0e432477946a468f57475285d84b075b8ee3cb0b144b8039a1daaf5b253d93ba36ef7d14f5f834acc72ee65ad7efde0845e6e91a5a5deb22c8eea7d413295f99afee9134263e2f099cf87829ddd5a5967c9f2bcf826e7f936d3eef9322b4517ac7c5232d9ba8701647588a7b20990886a15115a352e9a7fc2d4fe920ea4b340e2d078599dcd3a26334b39fe766a6714942b1093e124c0edd779626f5b07a51a42e2a4ae1402c5071039e1ac7068a6a6eef33a8e867221ea7eaa61baa4bbe44dd79a1d59c8c2ef4b0227cadc286c17e57e55d674ab7f851fbe4f44986e283882a6e12d8341767f9b12fd3ab427dc807a4e3a2b6cd9b3b4339f50543343b66861b99d1a5405843e9e46a37a5cf422aa0c6688829f977675cf2995d6b3aacd3e9117b82df39e56f4fda802d2fd17a45d44cc2923356d30929b650615402cd580bbc818ae899452685f400089bf19cc60ca8a035655e349d13e5a8c58005036f786d5a7e53d6de2646d1486e9c981017d45a80063278229fb61100de61e9e586b9b454b1938b36daecf2f7d3844d7aa7a5d2c0791d4d139d8ab907208c09ea4a4a120ee94a1ed5b0f2c96cbbf57a43120bb20ff2a8459df2fc5e1a4060fd98069416e779ca1a4134f2c535ac62b6efd37078bd2745ea084c9560b8a2832d655832338ce7a605fff36786c1095e7c07687e87667b88b30916f07170bb6511d8cbbee86db7605a6868cb8ecd773b41f04d707e8a63d33916ce7800c11f796378bd74a5e86d7b901101893d896aaba150ff10ce9774d7c497ff968f2833427abbc9fe1cab7e7a3f905a3b23a35802029ff9b9e81c22e91e2316f68d248b52c0186dd58d156ecec15cef5bd199b3e0fe43c9e65b96f2998e4e91027b34ac2cec250575a7b4b2fbbded1d65b7eb22baecc2ec20b986686bad511a34e9d70a3347584d68dd17ef839db770e34706191266b3ece3527908d1e3f10f18498a29f88a2892299dad78f8d942864f1f790b69e49d28c8d6dd386eda94ec272adc8ffefd1c703279f3f3be1914da23a1b27e33fec54c2bb7218b84e9c33ddbfe3cb0c938ba641df269c455a5b4c8eb6e50f6031de2a39673e486c6a9f270c1443910b9c578ea36879d8f522798ff10e5c2e759ba7beb938da49ea683a921519d3034732bee7f36ba0d99361737c92ea896d6aa5cd760ad64d057a71f5dcc1759d09077b4719f78fa189673ed27d3bf072b48679dabcf3ea9f6264ad596dd8d1a98c92a27a8c787d86ceb9e21cf9b2cb21ec133c56f73d1cd84aef43edad22d4fd7231cddfa83ddc5792d075dc58c0219efb5719c78eb01301a4645c39056727a3a52c25ffd610551abcf51e97012d9befcb9b36b7eb147822580b1fc6db6e71a30bcbd1617cb790d9347005d75ec1e01e4326bbad7531f2414d2cb51b98005b038e56f98d04fb349be2895323d64499334a42d13294cf2a686d0f45c1a5e58dcd1514c70cd4a4e969ae883004d17d6d34ca35a0cdb0b5c79e9ffcf83e68e5ae09874e6165567a594a80b4c301b735052baa484f0631ac72eccb3af61c4bc766bdce4cef20f0452a46405635a2f134081fd2c30665807cd358d91266e2b5555ff3d1569ac60ccc0465d6b6ad6fe5421f1929eeef7303ed91edb2cc70190e553eb278b489de11d890b02a1c54f1fc27f22099102fb723c655b03cb03e48bd90ae03abade6f06731752e24d052af9eaa283c0a73f1b948d1c6ab6005f5f72cce55ec528ad684769f5ce7ad19ce3134956975625d5b02dbd48de50715c0afc2d7db7855948323a5eaede4ab41f00024ae5fd48a179519429851661726c5f6e772e9ac9c1015545ed9cf2c088ee2a3d8beb0606ae9c886e7e5bb377a812c57036927921049b4a00935abc7aa49c9a2b68c0422ea1a1cd23083735f166e1e577e823c319786868e0cc628be7bb9d08628e20420f3f4b884873920e6d534c380c186d1911a0eb6a6d054ef1861281cd6958657646bbdc52453d06ad59d1d4259323c8dbb822a6a70bda7a7dd46dcd81a6541a6f63cbe6a3bfc11fb33586fc36a3a6e19b6b522cb753c86f916111e2adbffdb99dc4c3fd050eac17808ed73703c42e21c8a9d3e003cb3bb8dcaaa363a9fcd1cd72085881eeb84ab8c5c44716f56b0613f4021c6314d8b0c0a01f96c31f136cc09cacde07d943496dd3845b1e840edb32adf280188312d4219c3e5083756a2b2d6e00e9115d4624913a3d87a048362a0846f9c382a6fff256119585173587997e76c2fe10d32748dd7a6e516eaa676f0f5f964b3428f6b7c8b0a3a900e7e2443e37518198e37d32ad14854cbc431906a278368baf61ad8113e9f710e3050097e7304b180bf69e7e8a8910de2b7ad1ad8bf1890956e97aeaa23dfe610ff5791103f20e260c953188f0489f8a2eda17b0068bdc48bd38e5410e1d281e1a61a24c0eed193ffd37acfe68f39fe558e951baac87cece54d87340b21802bc84b222b57291faca7066872b6eea80541c11162a0875cf0ec030bb5628bf2ca0c17f50c9e9713159e8aa46bc7ccdef6b0af9eb8a94e66b8e51ea13fdfc62f47f6311d315ae1b4b62c86b620e1cfe4bae880c3858cc5a02c1bc5d23a487b3f8bcec1220056ae0b779b2227fbcc9fc137325b093112931435d521250e66512b7ddcf18ae359a71e4131887d624fe57d57d568f7240360cab95a5a222401f1fa0467e7df412a74f7fa38dd43bf344921011bd115c627d6c8a1f39751e2e102b40ab9cba88292bc9e8cf64cfe794172b41d4abbeb80459b18d6e8003bb1cd2d627618c66e0d592719ddb4fa38f83f093e92ab5002b82757c23f81bf67fa8e1a0a30cd00b84c475f72d7b91278a4f5b5c84a86b8e1d793b3ccc306f95d23ec70b71f1fa00ea62309b1614fba47e52d1f582c231b10465256404cbed9a696afd86e2d58cef883b7d0dc62bc1a2c23adeff920c9a0186c2cea25c1f284c9b99ff93941bfb4ff4bc959fdc4495cafc63eccb00ec16f80b0e8148409ea254ef6847c1f439b77aa67224f1b6e3ea55836a85e87de54b1d07c507e640eeee2beb42508291c3542823d8a583f48e320b0dbb34e8578c78e91372ad0cdb746e3a05a4b465db2d53b0e36c91c703a7ff23e1e2744b2c5652d4a483fb1c8ec39517c52beddc5eec28ad6baa645b62c5c468a65cbe717ab75b7831957ca5b951054db03467669b846586232ea781906c0421d1968e0bb133e53c4113ac3919b141343d5abb94ff9a7cd3b045d5fa2b0f40e7ea3c6d6a7e6092a9698af436fe48ab73f30b44d81972e10e89ac7a2581240d33569ad72e10a1e6480167ff2ff59bd67547c2bdb077c234af15bf0e94415ebb9cbd5e55c7369c5280bf3727a48e2f44c0c21d60ae78ecea2dfaea0db6c9f3fe7c74e353b64ea469ebd9850805268768eee877d832bb7764138fd9e20da998286b13b67b8bd74e8ef216be1af26d18c548217eaeedbde654e87afb36196ecfdbd1206417a85f1f543bcd5edaccb077ec65137e4f2fdebe1f2512ca746a67ef8b571168c2ac448b3c1183f3b2249f0940ee25032379bc5335520db42761439bb9556d30f6f83616b92bc0f94b7a9761651bdcb9d66bc56a39e7b264b9ae8048d8649a594f2c92464dd30afc013f2804bba6b0eed27698578f6eb748c5928c6b8b0d3f4e15a9e79e8cbfd8587df2cf57c6e7383ea21a93afc84f72ecb5cde69823a7b28c0500a483d84aafbb1c35fbff1985d915bfd845d757127bad14a11d4344dcaa9f67c1679ac2fbf77056694c5f25eb29f0a6202d72ce4038166cccaef151047e04e85c9f47df5c4634c71d3efc7e8f917bdf92c8e690614eb518a10a26fac7a338f142ca1f8fd42264e8b2225b75fba603d6a096b74fee1615c2bebd58848eb0b80d045686570c128d35d8b4f0beb7ee2525ca15694f5f2494d586370aa0d23d1eb621e320b75c7d1a38f15550cb3cb05c377fd381213d00cedb8815b1b23a9eb9671bfe53335de8985c8c81fffe02c315a6424f7367f021304f44c7f23b105c349a62e6b25d78db843b0ad962f9926ceddcb1e7d486210c55ab3cdc20cdfc0bfcea975aa29845dc6a3f0cba0e30743441553f4b090e38389b69e0a0d1cd76149ec219c8c8764d41b6e302b2662520afbcaa5ad7a562be2c9e25c0d499dbe70c86ab6a9f8869e7c1f6b17d311f5a1035cc46951c2e161b5eca496de5cd5bf75a41111a6d56f5bdd3b644ecd47e41cb7cdca46e9707aae855ac5f483300dfff944a9da9a0d8ac27dd51f7d21b277edadb7a6 +MD = cb4309313212a09afd1befe509427ecb3a644a9e42c63d74a216eaf3 + +Len = 36152 +Msg = 296cd04c4d9ab493def7aeb6841a45309e777028868efe45166235c56b2dbac9e852b1f37e9324332b84a9dec13f3f01e95a7af46716e032a0d9926759df2fcbc12cf5afb2c52955341fb90543d8215dd2a58be90f8c3af4e953289dcf38ee2dbbe2e5a770988ba100b12853904bb1ee5f40ec2f0556d533f9b6418d56a0c196df5cc904407411be97203cef3202b8599a13e5edd1de7998d9ec235f757f6eae3483e9edaac1855501563e02b163fd498b07bd4bfc8aedca90db163cb53dbe1ec23d8c8b37e7ad0d463975b393d84a643902be720dc4fb72266d644c9d42798e9173fb066e4e518f6fb32b2b62c86552aced2e8a8cf36938a48853b6b5f667a5aa0e7f85d85e3b8384aba691a59b17bcecb156ba027e00c311162da385c24f0c14f45e30fb80328f8b08300ee5b8284a02347e2bf6cf88bc75fe383a960cfb6bd70fe030611afd5e8eb40fcaa98960a3f560ee05f04dc9cad828bda46f3d3169fc454fad9296659694968bec79758770cd1ced6f78608b96437c030898bebaae8980f1ce155a32e0a696ee9ddde46458924fc491177095c8bde2548f9af65ee389a710bc71d02ce3cb9c7e045e3ec0044de3bc9454e5b0074f42f660fc4ce4b001a2f29f315e1a480b90854a83ec631b06bf1ba0b828a4fb008432a5462a16bcfb59df9eda6ec6b66e5a4996d5541546c3cb29dcca9f394dd890508301f7bab07eb421e1f667f6d6fde31311dbdf9e2d8eef307112b336a5df4e9824b41a9933939bff910cb17350bf112ae21df5c5776e13768718cc65aa1ea752b0e7fd7bee41f6c0d6a5b405cbbdcdd83323ff53cd6c1f444465538c059c81c54e2207288890adadd748d773effd006329766311d68efbe2d380ae745e61c63a27eea067aa88a80ebd7d858765899014ee9d8bc43bde90985af147e55b765cf963d23001fc32cf2bafcd2307d5696733aa20dd37a364c4ae024185a7a7e22d4a29571fbf25950b4bd6be1abce6a36b088488c331b727806bf2f7cf81e8ad1f75a103d667ceb942b75adad26e414186daa55ba4791f2fad19539b8f3cc7e01cc1f561bbc19ea75db862a9b3e58e4a9ff33524e8d8828431fe4cb52ca0eb820b784af637973e66459416b226e874c79d995b68f616882ff66206ce0e75fd9bd3e0cb4cb3af55fee0939f7d91419bbf6a153fb138fbda37e28fa86d9d83a4345e419dea95d28c7818ff25925db6ac3aedaf0a86154e20a4dfcc5b1b4192895393e5eb5846c88bdbd41ecf7af3104f410eaee470f5d9017ed460475f626953035a13db1f2f59f92ffc3ac6bcb9162bdab55cf4f6406226cea89493c168d1ab499b1295c6b74d7f7d779932e01992e910caff63a05fb2379c45b068c9bb92392f3e2b42d5456bc4cc2f833a6e7a4a30e835e058f6b891dbee92fced00c374a4bc2ca60ad4437c71240b4206ef4408a96cde47fc81b4c7bace77bf4bede83f95f84bcb144c18482d8df31dbfebde92fca3ae7b77c8bb1b7d43dc43a91993bab3ec84e189c52c97a110cf5b8de8b2b0d0958bc6f0533656cc55a9ce300a2aaea79fc03290c5e73174b487459770272ccd4b5e6e8fab8b404e0dc6a9074a17e31819e50452d6b1de4f820423060aa5cd9ccc10bc7e5724a1ac721c1c5861c021af63dca0f77ff265da802c3d013f945ae52087f8e2df67418e8d916e48d58f3014848e4ea649128fbcb8e8dab1955d9c4f50ad6ae6ccbee89a640ee90130ead7ee84e25687ba79249e3221433e96665b8363695aafa5905d7b027cd3abf93bdfe56cbfffc35c8fec27f5bdc1cfca185e2961a20f68f24569d76cc1756db9e911a2430f9282b7bdae0009a69a8cb8db6fe85342d2373c45d457acc71770f75c33cd11b957eb516934d076c2169ee81854684030eb4409f766a2c87401dc3bfc0d0edfa59627b4fd444044fb7f2de235d6523054a2b8e4c5e661cbb27ad80e31690bb4bb975d68dfa7f87c371b602f9cbd4e2b963ebb52161e3bba68cb8cf6630d6f98e3a1b6f379259f2660346056b3d1033ade0974dd53d4d99f7e3d217dfac2e09305fe5adf3185dd485d1055dfe4da1a6414490c0ce2d1e281db16bf2b5e5006ae09f470b471915cec16f76653969f3ab22047ab672cddff69699e8d87f77f8bf0d7cc21f8a00fc1197333bb3830e90c2aea4b777799bfd85e0f1fb4192e17146257ce943525c8b7d85c0b7d191c8038d75b9d9bc392411468b5df5c6969df4c0a7241f2f26a84e430b9c6d47bc12c65be59843dd47d295b8f4327ab0011a0d8f20e6f62b8d60af02972ade7e887b53be9cd4a8630c34057dca23fcc658f226322149e0d0ed12484cb6f08dfe7d6e2645fa0359d61cd4eae56b86fe520492d93a06d171a7cc398481f991fe301167c8528b88eaaef021b08066eff1fbaa9891076ff22b28a142fe32cd6391cbcaf4b494dff9cd760c96e0ef2ad36a1ba16fd83acb406fdc12db1fefa0f9fb2a30a1755d55ca94a3e8c1167245b5e94a8f8539448730d22a874e640922d9acc3b8da854c8b6fb2b10b2cabca461bd1f0db651ea54237d4ac8529652fb1670920ea1c6ec2ef7dba35fa362b578a89b6b6fbac02ed7ae9f9ca73088db3db4692da3af38c5100691dab2c6a1f9aa17429f596b6707dafbbb41cf74858461edcfc5821dc78875cb65f791854e314295f9e45031101e64f21960c88855f56eabe88134543bdd662e9f2284473304460c0762de74811a7d7b002218d2c0d56cd5fe8a40bd5c6bea1786851475161bc063b5408a9c83a52d7ebaaf49bc8ecc645357082ebff1db096e6345c875c01db7824ba7dc11de647de38d2ee3ac86845d0d3b2287c1c4d4cb1b7e8d29b0f9b3345111be5d3c5a017492c2c76c0c71a25feaf400d12d9bff39061f83be8e88853eb74eae9483bf241b74a0a46e4317d172d5c9cb976a3f045a188e4f0f78373add9f4c9e0a4fd474786f71ea70b940b79fb301ab5ee0788a3737121aa4d4cc7b19ee51b74509629a966c7bc4fbd6b4fced6de5c7b0f70d39d64cf50c060b10effb8da620cf17313d7a54085896023a4965ebbd481417c8bb41407d4cbc86cb3f8a64930230e309062e0d5ecec9a59c460d15d15513a86fb580f9f3034eacc512cf5b5f85eed3b29db981c54f1c27a09aefd368173412cbd299619f5845e4c511d05b54d09351f3a92396870318f00fed130ecbb6ffbda4b7965fc874279895e4974ab80ca7c496d37436eb114468b0e97fac4359fc12c20f7edab77e7f2ffb322c12d460b09461c2b54838a128f84d343d971628b477ec805abcb59fd211c0a39599f0f538281d1eeeb4b7dd4d06ac7655b58c4cae55ecb231ec08ffaaa5ace0dcc954f3c6ea92912562b0eb3afc9658cdf0efed7215884f0b52f8c58e55869109884781e34187c1643a6af37740d381af2f8532891d89fcf1d6cf1a0789185e22c012c71595c556b2232f1e8d3c2b9b035a98447ad7b663e960d3259ca728ed3158feeee74f15f9180845930356664bcf586e4bcda9d92cfed84e0fd5187fe93d38511eded53d529ccef57b61f84b3b1d134f6e0bfdb8ff352686ff3a44e5f84f48537e84900508495e87fe3089a413f47285d5bb3a1d829832c41e549321c26e704e3760e837c424a04343f771377a5d5d57a965c8ce602ee44f93aa6efdf0a2988870fa46992d377c71733e17cd195ebc0c12910f933fff257187c43b3f2af3a84a52db10f5ec89db58b58ee52d980277ed37c87736c814db70222b63b0176a88dc058ab011a822a341326d42219e4e77424191687da274f0958b664f18600e2086b08f8cb50a0bbe741266966fd34ca25357754a3275274a28ebfd663fade858907c730eabb94b12397cfe4ae0e103e167a2fb851beb36d37169790feca5fe194190bd9cba5eea89d898bfc43c6d7b1dc74aab8101aaa871b72e61b4e9f05a49e315f5a0a9a1f10a988f306d4b22bd3cbc760da6ab5a850e44623dbcfc3704d2bc32a4814129677cc389d9add4a5d0288c4eaa5de3a4d6915e2b968fee22029a151051a74a9f54c99fad43eda1a1bcc77ffb090c6f30a2e24eb4f29586585e8b35d6847a8caac0d87524f59378bc8a03dfa5b21d18a5f1e95c23dc368e82208c66adc562cef3b4918c167709229e41c2f2732ef6a6abcb8ecfa1d9dacc474e84eebd9dc7da2237dc2eaa52b567f0e9ee028e0401e1ec39b9f15573e90a50f25d162d931176de52a1a1080d010e5a8b6e551ebca4910d4252086831cb0e4413fe262630a86bcf0cc82e593054e1832d2a334adf497db9ef415d019be8a0ccba4f66cffaf4809e6d391dc54415a614da0ae63af4576e96476e38493aa88a90ee381d517b5e7ff37dddb673d0ae26b497f6b51783362c4c52c1e06895749337b7a195d33b4c2e75459a418c5c86290c6ed6e709144d7f8418239f8535b2826a1d72147ec12757cdcc590537700577c46692c53730062fe6a27abbc8a0cc20d02993e3799558c0a31a034b9d9593d783871297ca5ec80319f7b07d5a60283512e2ec4aed3f45329e387e5be5529812f1da3fa5e927fcc4c61fab2d63fd3089d751669002475874662db47d38307cf0b766ff36bd12083a942355130afd4ae3c87ce7ffdf36f850a4018bf9beb6a7397d343b936ea7552d2c0a947778eae00c8c6d58ddad948c8c00bded169e6c82b5ea4adc05236e4b6535dc52a0d54b59cdcc2ca27393e77ef12168c11d01da732ca7b2c8d204f052a958a176d748a91dec30bfab09bab93547b00aef560e89e3655c74e9423ab4d3c33d62e864f98b94315f305de74a91195654ac5e09ee003b29b096259fed4234798b27908f1179266602879f546af892e5b654f87ec8c7e1404b22662f4423df94eaf656a0b8fb3b51c0ca589a427508be7d0da4fdc5673f72d61f933c68de3adc04d922de159a3bbc420372fffb90e3a752dc4acd0d67bb87f996940c81fbaf187ed7dc9251dd8e6d3039d4ccbdd18b69ddcbd337c74fbf465b8e51e7b603a51203f86c04934d9c2c31756648afc169ccc5e125831ca8b278a50fb1172f7d84903945ba7c0470cdc3edbe10bdfae7e397b32629f933f8fce57e229fe315f1b35bc8c5ae42ccd18af80d1cba71c5cb62944ea3c7e035ca05558fcd009290e79c3b5981319d12f5399539974cad39f64f893f5fe88249a33490801abd6dc7e8a6f7947f29d7fe6644601838aeb97eef103f2d627225980df35df811bebce37b395920c98036baab11225306c9ddbb3e0f7ec1b54f12498faa869fb9ebc70b29bd27a6671c036b4c0aa291098361196cb20da35f659185b2bfd11e1a2cd568799a2acd5fe7853cd195aa7b4ac58cbf0063b67a689ee974fc9b071d3c6a2f22f3392a3ebbc70653c31c00b9d078a8d582893feed9e0643df7a6f043288b1e601f00efa083a6ccd8aa066df2a482fb857b8b71a9b91548092b485339e579e84a8658409cbd6b20f40cbbb9cecccdcef572d314501024deff1feaf9a77b1ad509afaae6da73fe4ace73a3acf7523f684defc8f08ee7f56e485bf2ab33f3582fc5225caa01ac47929066260e123dc213b67ad2cc084570400b67ca2f88541a3ca568d852b9712d405f6eaca6ca963d15589c597269327d9b71ccd84d4ca64746d20884a6acc99b9b66129d3dc46497b75adcc5a857b604c9a21186cf28f1c993748aca7080bc76eccada619babafba41e4c37f377adaed10c5be3b7bc33e876bb2771176dd52a77bb64e608825808dfb20d8ede77ca520b9025b5e1bc6946918b456c0816c94169050f702ccdadef82c34a3787f0220850b82715975d8fc57e1a3af4159d489ab73c05cb02e74d1e31e48ac88c9b75105506d879352a27d390da70bfbc6be394f6b2f05d07898613617857c868b404286ceeb267479cb1ff7e5e7f05690d2ade8c2c57bcc70f097d960129ad88e48fbf1cf22d564b4fcea7ab18ce9ba7eb7ec5fbea9450adf247ab541188ee89a75822f993d1ccbc9dde7a8b9bd7b8f5a16fe9da804ebf48cdc12b001bfe11d776fe1277462831181151d6a44a3303dea96ec89c8fdf6f041bf68b3ea2e1adeecdf20c0aaba939ea44d95a99b658f2cf7e0bd0a65bded68c47583a7428ec195c26d45e4826cd3dbfa2c554b072d20c5489b790ac86b58c3dea76c7252065ea9c1c05a7a43a0cc2e4a5b6739ce206c6ea77029703a30c06957fd29fe62bf7a82b1816669368004005e81d25c3868fa90da07d4240134abc2f71ec431bae19c885a57729ba33105bafc479f9b8f2d5294aa07820d659ea43686b344f5a1934d2384eb85f7d2de57c2ed55d5dd1996fde0df193b15b096302dcb63b23161fd14bbf6e5a7650aad8082f9527c0c20cc82de41 +MD = e747c2429ba8fb94875c77f8c0b2d0b5cc8ffe8d92ff3aad800e1e1c + +Len = 36944 +Msg = 3239b2ce4efe4f6a6255dc53347400a6446ed3280c65422386fab471ef09eed6cb94339329fcb037287718b9babe8cc4a806bd52d632547cc947929066203365fc6399eb85b326062927ea9d04fb7eee29862f24e76c5f2b4b1529c3e55e44d3cf8e2a00ec8b797f6e4e99279b949fcbd0d671c6c67c2bd7144ec230f52be8c94cfd2ffae5ec7049fed26e8106efb704a4dfcb61fbc880292dd8a5ff1defe6ef7a98ef01f93ed50de19db1d0cd768e40ad87851d0fba26c99d9d1a59e61207ec6148b43baee96e722095aa3f7990eb28f4b7e62189b9e45e6c836966d7fc136909f3c4d38f550421c2a4a0f391a4976380583796f12c8490a274d94d7815d20d7b8268ef21eb5ec1cfb1dd179d1c5b9a5a50c1a3d07dcc094857b33751c60b81bedee8b8ee1146fb50a3a7d1255ffd758889c971ac13856e6613404beb75886cdaed8c557d3082774c644749b2d5459b14e99a281056776a0292c5b2cd8c0f77d8999cee56b1dbdccbdb05a9cbe6fdb5055a7bef81ae69a326bb8d937f71694abfc95fad02fa19d3d5f02816f9faeb6a64c3b3ee898324c1d976df178a8e5e8c97651eb808750403738bfabac379d963380b8b4eaf3d716d24ab02657549b5e568542137f0896315ac94c1bdb1cb8d48891c4b377b44164f0d423fa7c80c38ff3b80b053439d00b089f3c6474b58cfc060dd3bd07601db0e9f24de020c3ead7f17d01333871ba17d1091517e1a896973c436a24227da8a52df3727a0c846dd10052c9101476a0f234b54a98da5c4210abd0fcab41738e9c5d76461a9848e90580c7c74e208f2124b4225189a7472c12d5350f94fcc84c20d8e94d645c87d8dff34a80200541b719dfcede4ce10fc0f838fe2783bd024dbd20cadcc9a1d7b9eae85998483b24df6c08192565000c8d4b578ab8f9fab82fcbd5a988cd30af0890d08354193abf0675dd9feb649cc40d76a169485a3e304ef757f3e5e16184417c3c4658356c66c8d1b0d174ce0fdcbe24b7285a47102147ba38386898bcde01079c11290f78b2930a323c75f3e1ad0bb009367322e901967ef6f57575cb42a3cd60822b29c8290189c26f4398aabb92b3082207805137b7c004a9b0eae528b6383a07f2e6e34070caf1b8820ed39edfa83459abe1c15a1827f1c39f7ac316c4c27910f4f9428f7d6840c6a5d8f4bd4f0a3e6bb4c9b1df54113ed195a7bd833c06be4bc5c36e6c93cc20082389769d6d5356c6d69abb4de8065c6237f46cf4a87f7a06c9c7ef7e3071200b8f82d1b5b70e4e0975e7460c4091dae3fad339f176972cd095892e2afff1b13f4e77beacb8a554921741dac0fa2e2ae552e6acf042e84747ad99a2f93eb86411e4ba65d8eeb33aff2f0ce1d28145ccd4d4814e7779dd69ca764bf67f994fa921e6dd9fd0c5b241bf41db13d752634130f44596fda7f104d7844281148c3200fdc953a50aea2d0930e42eb935fa21288836a60f0949cda8fd5bfffb5e83ea0bf410bf1e0da87e12228a6a7a74f4e9d35920152f20dbcda6ba61f69db41cd21ab33162735f9d4fccd2b920b02abf47e21225356fbada7bbe8d3aa900cbb3a4bd99bff04d5744fcb9efd4e3f2bdc5a5d541ca69595dc24230f44a99ccfbe4cc753620faf4ab1c1f69c87226caa4b49e0d76943374702fdbbe7e263b5adb2ca3d216e8b511c1af125cfb156ba085f88b2b1ef72639987f82a789322012dff7d5449a9be11d116a9ff40643150cc7fe179ea987a4114d3de18ca402cabd70d2db5d5faef18f30caf2cf686fc577e151ade8b4ba5fa3f4e762fe6d2cbd93344a108cc48658d0a66cc55f90000f6a788fc889bf039b6a3618a14d32f44b4ca0da3f4377d69999c8bc82252bb8256ce404f20226e7f9cc672e0729941e26323cef9211d80436433e36b3a089ecd9e7ba5db4d29afbfd532eb42ef41eeec0ec6f06c3886393b1556d67d46239028f7361f67b8b69a41886f327633d120a9df3cdcc4e17b9099d58eccc5edac7bda898816bd08d4174cde03b144e754be62fc0cf9c9c3026da4cb612d0cd8aa462c7bf8f2a3e6880e29ff78ce76b3cfb0608dbeae438726b8a52059611aae25d966f60f1be2fadc67211256f3d23e4cdee8bbdb65f9d4ec59e4fbfed0b718261cd02153f942ebd70a7a4023872231d23045adea85b4535e38a985d7e3abbeb3f7b1254ef48a6281e07cb069f22c336a8ebd8d73763cac833e3ce56c00bd47d752532988758406e3cf718baf9bb9ed1be09a80fe9f59866351e4444591b75c9715fc5688e2f68004c09ff87eec9007ed0e22b0146ad389075aebcaebfc5fa4fd28f5d4d6a5a977ed9c4f205d4c7b28e8009e453c3e715e7642979ee5ab7ec8107386cafa246594a449ca2ad42340f8159e5567ff83fcadb8ef31e9bb04db6fd8def6607cc9f17f33b1553f6bdaa8217bd1913ce4a23d1dd64b00d2f67140425e528fc0e5fb17dfa1ba3b87abd77b48227f98ef7301f957d73d4e821d5873e8a9b5970fbd219d5cf74ec2291b8381181391b4a63409fb03c3ac6121b8233d0ac1f157788aa54c9f3c54344e4446813655f02a89b0220ac8a38283d64f396650afec1721d6eeec5078b4d71dac89454df08245c26eb5ed4e7ea6f9c96b02b6617a901f3228644517b456f4bfddb29303ed314c76f6286d3e5c000e2393e6f5e62ac3b6d4096f1e9af722d25b5f2b340053e486d0d1e552404578090c504dea86c86f252e007741844900bb1ab85af0ed2a833cf5865264fb42f631ab299f5eea5b7bb56a95e4747bb2d8f52472a98e727bf5b7109dd96a185a62d029a64419baebcfabad501e80273b92c9a0147fd8364d243c479fe12e3e96a42cad4fa5e39d81535222ba8d2d32eb167fb6274394e2a8f716c213d17616fca48d60ad28843b23eff1ee5a9a4241cb4c5f90325f8b1d94568baa81130b48974b3d6a4736c33ddc8bcf3cb8ab89ffe11cb153bd3a85901a29e527710eb57b6c7f83f2a538694bb10f35325d2ac811376fbc2a513c4ae341586a606c2a3b578529a62050943e0cac636bf8d07dc822d52bc93b75cda1bd12cc637ef9cf6786e932ef1dcfb40a29d46fb9b7990e51d8c13a20aeb15553c6936b17a8a165ffada080a611aafe9549311c679741432bdb058209ac8d3c29a7ce1ed007eb54cc77b3fd13246adca715cc50bcbf4f861dd4a9edcc5d92eae808cbced4c35f059689298f7d7c96b50735acf401584b3ef06bb362b0e847c85b9091616d0385de258e0a202e44b6f07e50d9f17f89bed26c472dc8fe75343c49e828c1e0efe648402c5e976ca253f7d40e5c2d7b7b2fac59111e09ff2ee2af79b898d478b109acb10b2edc80bef431d1193c92405526337f708f0cf839d88ab4a7e9847c6e76703ed481d7b2c121063c16810715402bcfa60d87b934be9e33c25d24b73351b6feb02f607049d362dedfb034734164c7e8958f0ef8fae6bd146b835157e67f50bccec3d28f8f1b4021808d5cc00de881e6159f2cb191d8bc9377c1764bde23cc146239df1ccac24237e85501d5c1f5e232eee5eacc42bd231aadbe9d7b6063b36d32388fff43eff189dfb12b9aa5b27132e8084f3155bd7b10d623cdcfb7678c2e0869eb2042cbd37d2d49e3f70048b64fcab164c912ff4bddba970f2f2a58dfc1aa74fa670e7e727c99c430d41cde39f15e87307ac0ac1be821c36a83005e358de000c5bdf12f56efecca1b193f9d83816a33bb2da9eb749bd34ee6b382a014fa74b552083107053cee05abaeb2ad1b65b75c0dcb13e5dc5d97e18ba7f84707702c3dab32172d09cd671ae87bbd3589070dab2f3a47c2dd9737246248aa7a9357d23dd821ebc9ea081fb4da69a75d56ce34c828648da9ffaf79be727cdf6242172c60dfbff5052e57de798a5eba4f0921f35a002f2cc2c90e2658c32ce0279b18034bcaf27c075f216b11ff433c302a6a1309bf856e36c31c06995e41f6f026c31ea9a1a4caf704cd8f254101762b41105d7f6e4d992d7541e02a4aa167e56c7e47206abc25fea6c5125d597eb065d77b9661156ff6ce68e67db28f367b30f4b244582f22d644cc70bc604ea432097312895abad2cd422371a6da36e67cf646c8defbf7be25f0fe3654d7285a433d9e3ffd10676066b12e4c214a469bb062eb26ddaecb78592ac57fa469f0872c29df6ab92b2300084212ddb6a9c73c61996a36091bb238bc1ca7b372bfad1536f7bef98654f79afd1d568e2fa0c2b1d5c64b5f2aeab4e694eb2e3a878067eba6ccc3552c33e9178b6b82c653d63de2540f170807c3d96a2ac2e27dab5526f1c7d377e6736f045dfb541fece9f443b7289c559b694c2aacc6c74ae2a5e6f30fe031611423b04d5595ffb46abaa1d91898968d7f1830ae94b022eed23fdad52d38110a4803a0cee7a095c9a78e8609edeb25481cdc156d0b2ffc56b63fdad5331899f8e8dce58efc663de60b2c4ada1e6a700cda7da470f78c7d0bf46e8dfa09c8f1b55e7627957a2d2094fe5e9655935da06421c284be4210cc94f6949c4c989042c910990fec4b3e655ae8ea1280340cdcd559745d5fd20012792279aed3c6b8b4ba680d449a55e135c131996565eabe4de9ea5bd95c91a77643e2e46c987c876e12cc996fa7825db8504133380c9bbc1b273c3f9ebc654c21799d9f7da2a3469958a607381cb8fc158f8180327b304f6d17b7e8548738363aa3ba708bf9213e5c155d1d4600e10475065748fcbc92bd6b42c41ea4c6f1aeea49a3203ba6e0b4e0d059a4425be4beff3e2c523dd7a74e3f2fc9a8368078fc59f4bf7737b0c6f34c110263d335a972dcbe69679ed2594c0e66304fb1bdb568ae2b763c271fbd42c961c024a2971868330e744fc7b78ffd03705fdbbd85903a12773039b2fcace87f46fbad578819e72db7b7d25f8e31ab43d4c01403e1f1b9ac5f5534814e7a2e954a1bc799119438f24098b70f5d269cf91ab9c12bd8c02ea56b4df63c1d115c34f5883a103971a4a93181c87e2e58184bcbb4acdd73e5e1242381478a7158ba83ceaace650898717b13d9cb5408ae69616e189bc0b9481a521057ee1353378fab5dea4b4086f1e78f6c08893bf410d6648b4d577cb2d12156b938b580ca9625d32aae7848bc65500ec776cad9f866a67cabbba8ba66693d59a68d6279df5dc224be5f1e26b1daf21fa98b56d61f9822d055ca5522def6b88360bcbea59974afc6a06605826d3917eb9caff4db6e8f928911e2285b2161d8fb6e2f91ad00c434e05829f502f96b0599274a6e90ef313ece676be70e3793e6ea584ca3381c33989a6f12b6515c570452d3c48a9ca9676dc8e0cd5be229732977a77dbbeff6aa251d6c880f159ee45e3e268511a8a41a689f03704c80fee8ebcbe229a37a95122191d7f2caf7c8fc5984aaf5ca5be930787a58bc828fbedc720d91b721800151d51e39baad9ee1863f4de77c7f5e7f93e381681ac4b8713608663d91fea9435189ea184781b3f16956c06483f6586e29f1debaf0dba320def3fe6d1e019f62f88520ff010ddd018fe706a970f8f2bfdcecb6d7a790f7d3bb7bfca9c6f407663010e673501bc517df39463ead4dd479921a3445a8a95c90b7ea8979f19d8c58e07364fe9c71123e4196a9aca0bda5a435c57d8e5aee7c61b986cc6607c6d43ff0f7c4274dd86d7b9d44577ab3100d49ac33bc392429fc4daa99eef77035872347e12b76cb187ed8db8c77304d0db66edfac17cf7020875c706916b595b34e0ccf7cc3747ff9ec5ce4b63156d57e451eb67ab6d7a59cc397f43f6d26dc07d1036f0fb4a8cf43600f9e0aaf75b529655e19e4c2d92a6558051e621bd4aefbb70f0fe1269b24bd81faf2d0161454d6bc38f031635e6943efafd71c47477455a839973b40d3e731f824c84f91bc1a4ff2b323aac0edc9fe309b05b3190594de4e88f0652ada7e656c9609d045f46f5bb0d79a97020eb25dc2d39170ba98785e4e0400a70d38532186569b9b5d44bbc19ead3e4050498c2a4e5f649b5288869d53b5b0491173cc2fee6e68f8ff34664a633cf5ecd327c02b7b45657c085b286203a4e9925d1553564be5572f544dd8bea78da8e4b32fb429f28f7b5a059bc57606d891cc1aa64f5d45c44f8783167ae514a6407117ead1eb5a45907f71cfc4a20559913d6fac280d85123a49b418b2865091a3d927de7f3b5c6d8b3173808faca830d22d85b1452eb3d7ffbe11d9e96b0356bb640d9527dfa01153b933358d5c96643be6833c1088771c862bbfe3885ad6fb6e5cee972fa0cd38d25fda76267c78fdb3af92d6f0e277e8b7dbe9bef51c708aa607f56a01468bebef6a90ccc2d2f50424cfda054d055e437a15b5f09a797b0a4aaf47980399843192247cbdc928b680758f825490bad235b7204b03de389c84429a0fa99f615d12a3d3c7d3a34462798e37b3481fc77bc75645d47f28237dff761073233c65c1960bc09896b9eea2f7570f946b63f403003fcc78eae200c683ce5b9b90416e56c6b0 +MD = 633ec87b5455c12af54a3edb3589b8fa32056ea686b9205dd980477c + +Len = 37736 +Msg = eab3e88d00f2f164e92e95a8c9cf3391037969944fd5cc400e95dc66dbb2377c63f80c4376c5d3a85e0e3be86fa264f8dfb34f24d89293f6ccba5159091069fe8d69eeff1b4dd8c38efbf9216eac33c8c11ce7de2347b0e7197052e9a368edcd100d77091611687c22fdb799ed7506c850bd1a09597c8ddb9ec0c75cd1432ab195ed8da89099ec9cc21c5d9a158346c1359dceefa1ba919a03b198fbbd288872c40f1926b16ecaec1561d46a0d605c7c17c4ecd6248724ebef4cad0e8c9f6fd7447d04c9a0176c31c4d30251fe94aebe9f3b5d070a6eae970a98eedd693047aabe3f34da861c3836767ad09910a5a652750907ca7af49767fd9d44af7a6478b1d95b93a08a0698c2d45f26886a1dabff4036d4679ca34820706395cee7c26ab53edb0865d55cf39c8689ed683584248ca8cbab259902278d0af3cb80d9d3867d94c67a6f8ea6b18d33000b7f98607bc257cf734d99999d757454cc0e781d32d38425d308de6d395d83cd6a16bc3b1769f24a1627c3f1139f568e82c0eb2ad77db6fffa76ed37f5d420f7f074c99c604924457bfb4091efd456aad3dd5b82de44d15cd701e28f4cb9af8687e3e60cbe2992c68a1138019adc1fafa9afefabadf07e4552f3e6faa6d6db8316a93b1299d2e7d82bb0d2ca7d7f57a5eb7cd02fae4964c0539220026bf149f5850ff136590dc98046223673ff85a794818d259648162cd8c228b92e04d3a4e4bc5d300066a0e1c8c3ad8d8487b5b685522a1766e2217d9287fbd806d7449259a2db1ff92953d6b78a9aff867fd82d7f489ace29e63000f88a53a6134d0cbb5a21d1e7a808f050558431b3004eb6b38b4a277166bb0c5c11b47a4bdccff2c9f22086af956c3df9ab97b9d27a5c17f1b0411728a6c97d3ae5ebb7eeeac3bf61268843a049be0476c0ac7c837c11c38ef613b31d70784b427d1851b7c3923b2d003f50e24b640b729dacc0ef8fd5813365a943754c303d1be02491cff1a52ed5872ef59c23c81b93487dce3d3a101b8806eb0f5bc2591c6e16f5bf5efc636001c33d7af75a50fb81cb09ee96062a5734e0c15ef55b5bb0e22875238b6a339958bd55261a776675e52e3667227a8bfee0fb147a6b9e9ec1201d8a047fc57fa0827c5c422d02714f6777ee83081e9bd83360caa9e6148b17cffd1eac6294ae3e28083c165a84d952aeb01888717ac3acd616cd348e43887998d118615b60283bf26adbeac784054663e09cbf84176944702503638ab5feb123a0606c92b0545f87a923069c8a5ff32d1062706a7cf766aa96567d03f256851772de15300c9c7190cdfab1021e4e20b54751e34a31d3db2c70adcc2080f6be1d4f7aa35dfc673bb4df4a3521c93a97a38d535f4dbf676a9dbbef960ae94824dc401c6040091e839ce6fad820128b1e9eea4f2e9bad19dda6800624e8b5b27efd4cac9202ba2712efeaf2e32782aa7e4e672e965b8353fbeec6d9bee36a9e96277c1282ca98ebb056f41a9e609ffd7f5c0bd6e0b6ca7c8b1e9550ab2392733203d73678c12ad224790a5a50f1f4ede870df3053d309fb56ddf55335cfb4991b386500bb0ff84538ff379a420206e38331e92439dbc83a24d4efcaa20f5978196f2e5995db8aaab29180c2bdbc5f451648339bd8f58fa0bcaa8a9d3b0d0878f3503b274c4d696a5bd6efba0746867c6a5cc57b7a4ae795e808cfb548ee490173829354298f1ceefb778b6a68c903f14716a5ae650157816e96c4f811dda47b5fae3ec674c62b9d5a1b5cba2a6d5f0b741edd1ae14368cd17fb734fdd00a24e807b4567751d1fde3f6b6b9394592131bb1b75a93838a0dfabe0e4a2f67fcae29e92af1d74ba7e1b740ebfdbedb6d1cde2b67342b0078a20f2ec1edaa283a59f819a84d2b8c5d3bbbfad607c7eabf746b296e1cc93d9abf8b4c829dd2a34b9eef03ccc6d8a67a326e9f0575c8f611c04f363c63127d58dd0b81b0d95d6b99135b42090d632c778c3ba7eab656700c76f6dc72b58b524b70ec78ed2e9ed3bb2dd95edd8f5f80fd9fcf900647d50af81efe768172984edb11ca9c981c0b9e1a64f5b4caab223644f38701d8b8e9096d1ec2bee928cde5904602673220480d4f4f2cee410f5fdf061e0e57e277f70de3fceff02a569099037440534bb9c8b3b242db65e11a6ccdb975a21cb403838af53fd2c4c56a84eb9d22e10b65670223fbe6ada61b5add94d790fecabdfa1303096e17a73af31f5fc5d880d9efa688c084b10039605f26c6d90670dc60aa2a08a8fe2b020b8ec468261b9c597b06c13bd5387f9a4085dcd6363cb4ec5cc23cfe4c76998fa78c28973662900477f64fd865c368435c7d743587aa175502a0c0667c4dcf8aaf79905f7f24086566f38938cf0876cee484617745e524b0e2e458d3b10a599d73d5b03348f661e6d88d01df796e17879959492de964798a8dfb6ac87332a432a53eecb55c4039234d314e3efd7ac727eb6a7f9bfaae724c54548ab73b3d5bd4a403ca580197fa85257ed2c9b395120a4b169973e2399b60e69e1d1291a0dd1e10c2bd9de174229701c41422346364a9490c0b38488c7182b526a67ceef394594c0a5ae9645b4dc352bfa6bb086c4baf65b9694b861d810c308ccb58dbbc3e20d62916dd02c3e8b4a8bfef06a8063377118d283033734677e94ed038c051270f4fdd65fb65246fc5644371978bc7c88add15cc88d9043e506fdb799f3558eb7f0965ec96d4136f8025f8b2d02c27576538d1cab7df76c51004b11beeb339f7eaa3710f620817447f6e3e476321bb8c90b55fa74fbf11a741787e2bc9c28ad8fcae7d42df5986ab1d9d8293a2e4eab497c30de6a3108b217f1b814d92dbb20b0f7af92b514107efe534742c21ee3b8bd4f26b0d645c39d0036e68e5ec67560aad99532d7a6711af50e3716562b6246ef2b3f58005faa43f88f19389391ddd54519a49ddbd341a560afb08f3d7d54bca5b984be30a8460cc6a45afabfb37be8485fe1b909c20a8705e1ba94c13b4184a8a1fccaae471e61341cb0bc2b57d7ff7d52566fa89c5327ac4a5e0e288daf05c08aaf65c165bba8089f246620a37a84aa9b0aa80288a5ef1f92a3e3bb9c28a7b41ca675b32aa34b0bd7bde0e4bfebdd98e2054a5daf8746256292fcc29033d24e00e8e3cabd60b005698312bfd4b2740fce503e0239819485623141859159ee54de7d984f477a41be007ee5fb0a58afd707f26d394d1b4208398a9a4bc520638f5d6e7b89ef7764fd42b73fdf8864f8b736f3be4a13deb6768fa5f05e57139ac726c273c2dee1838cd7350ab2775eb678035c187cb45159970e8829046db7f9c4e1816a403b3f053168002cbdfece50e21534651858fd93325c3d2f863096e94d35b4474d2f1a52b59d218f48463d30bd15838c662668cd1121cce82cc737d32cca62f22fe2f9d2df1d9f199a7733bdd1aa5175ae471c6dfa063b3e3d5a221d274993522e7b64ed799182b4fdb8365fe67da70838e3a1ddb6b294180313e031075a4f519423e30b49a0d347b731d07ec3358c2d4b217d830dcfdf5dc418f87593a49fd6a701ff9419f399b9110b8882317b09cc31293ac9c60222f7c991f25395d08acab13e3ff0af31dcf4536ee6d4f8f725cd30245f16abf567cd5aa75732d3851913f8012c87d303a4dfc58173dae050e818913a75d18250b5c7be81ad79176c539ac5734cc14f11fa62af6db6fdb12f5a959c92036414ba15cd3f497f92272d40475fbb2a07ea02e565585938a5323b842d9855913629dc8dc7232452e4cb6fe80310034bbf6b7f6ed0096e7f3b2c1d6dc6cfaaa8af895e289db33cb0d7cdda54b41e7039539b2f9c8b0ad41525677c1d4987bacf37fbe7eb3837b920d3f4178b43d22c7b2942bb777fa3b282cdab019d9f09ac8e36481fe07ef7c32b4007ce9599745f99ab28ca07921c304c99c054f4ae9da96d1438b00e583a805786cfa67b9c4c301b3f140555adbc78fdf36d1c2a608ad9f539933f7dae4a1b2f0d14484436a1c88a4fcf1368b9ccaf1c427b01489c1a63ad0e217736696dba383e9d5cf84ebd4f6e42229e489c940032eeb3ad554993701df9aafd406fec86fc7f3489a0cce6ec4d80d24bfe405c91c65fdac559513e27ce63f57ca3aa0fa602399f77429765c7b171aac4918b6c8a60fcbbf45d9b63b147b5cb9a68011d42d2d5a7cfe9998209217d71b109670b14892f1de0670f4a351055f4ff965b6084f5b914399ab984da260ceeb96fbb8357c760c73182953adcb2ad385435a21e92f24fae5c5fdfb5614786ea85ca6f1a7aa5f58290b3157dceb4235f414ebda09451fe3de13ff35bc70c532dbd226a19a5a85716a5047759329e21306de7942eb39b2d886f43debf33fddb7f087f96c8025aee4b177ca31730f90e74810b0f0f16574658af718629cea386a80eeada6eb64222e98e2382fef24c52f324bf168de70db07549d3d4e0c085bd6f786a1e54ece85cb7b402fa589d1f5575ff0d91ee4b45d3a7e471b02e302be69eee084ac3cad5027e2e20f46b5cfb7ec2bafc687b6c8817b628510359461e6bfb17cb470178907e06a7865981556637a1fc94837c725de469bf7db3aa2ce5b24f9cbbfb561fa13617c53a0fe0b0eae8dc6ddeca39854da2894efdaa690708256124e04f0ce7919479304600d0960ff739b6e126f9cbdfb9de80d7cede02102afb58432b6af7e7fef391b1129b2f5ccd817fa67d066f9b9130fa15095142842be3e0eb78b7782bde4f90842f88a259d27b6f33b9a69709924767bf4209f2ec8fe263e01c3c91e69b53d4c63ede188e6ef12f92c0226cb225eb6ddb614f38d1bec08a2b01416b9f9dc8067f27e6b8840aa967cb7cc2151db0e3b4734d6b3cb92045fcd30d0d2dde4c75cdb8d2e8abc20c6dbee4d3cdbad29df8e58ef0a5272f1d3961e02aea002b1024d278272b18d0de03dce7af8d855a52f2a835314421b81d63635b3f1e0c0f519bbdc70ef92837e6336adbf7489c3c3999a46ff89251de888ca84b34f2781177a335ad6f98027e8ec710c993472700b8b482442dd5e028c67cd8b8f1ae6dbaea04e2333251d02d3d8575b86ad24f2f390de9bcb956f61e3ffb9caa5d9a129012866d603f6cb7cd5a3742b066303b50236a82e0825db9495bd19c2a62fe901d58f17e3d7e31e1e54fa31eba6eab15ebde94f5b77132543083c57f3fe7210ee9220cbcd0d7e876fd8392b2dc6b890288d253e9496e1ced5c1da1edf2d54cb57ad9a0d02333d89d9d5ecba62043132cb0676e079f6264ad53932b904a12c7ad5ae675613e784a7f4e4818a18edf91bbea05aff6c03353bb9f4b2c0d4f87da1d11af53182790864497a93f4b2d274bd7bf14dc5eb4cb2f40c7af6b0f091ccd2d259e029de861d41301e9094d050388a6b6fcbee9841040635425b23c81bae707201a499789d57c1413703e4f1e5c925357251d3d37ecd04dcd17c73cbe4771d08a8af2af10d3c57155a7a6f88118af042af7c102d5462525baec73b8c8acb3b3e958c38c8742f94f4ff408f1352128e2b8db71e167058814a40c7e58a8d2f5d6c7eb85d7f50c5ed98ac02ee1425d45148837f781f413414212dfb0c365a07f61ababff3763183c348d74de71b1b64dc22274198c845798d68ccdd1a207fd987d1e00fb55d84edd8be076e14989138a160ffba0a720b9d5f89a3ea89c97d38a52a7523fd85c9688040c30ff10d25b4236d633537cce213fd2c59afe5a1b099b07ce099569f7d884c79808ff6f9478be4aff83fcb398771f8994499b839e8714c41b8dc3b0b2fc1afd0c68ab0dd851467b135561f486a3bd4890b347c025353db31747915494ea92cef1b7c993a5ce21f099104ce69f8e61353f40cab9bafb5df9499dc9fea68b3461cd5d22a804d799d3191b8331eb1e53782b59eb1564c1bdc139f83155efc547df2bc27ef5fc54f4491be0ce7e723cda3adc64737d2c6fa63170c193027781156f904ea521952d7b7c28c6f7753dd140a3d9cb2b9818ed5e71755eb5ac46a8e43a86695ed5d74b7694c735c4bd53c3cbdaaaf4d80f33232daad0395ffc6520fd68947b72b9cb942db88195ffffbcfcc408d749458982f95d040ab85b99dbd3a82043ecaa7478f1e711dd4f6ee281627354e83039af0f5835a6aa45702db0a72d8a1924ccafe74aeec763c9da0fa9df1fe766137b29e126fcb93847655dec86d3cfa08ba0111e8888019b6c0a2d3c5a11e8d959d49e004dfb643d2603d39857e3176089f0432791fee70ea0c8e543ba9280c76a0cb675b37ad040491237bc02a589e08782ec0a4f98a343cedadfc4e9e8d7baaeeb1a4742c024c91a5a305e6e614ea8eb1fb5cda99d5ac25c09c2cace5b14398d39727ee017896000a26788855f8d401f8f467a86573714b41d365a513560cd6fbd652377c5278e63b484412ee66f31899a4618d00c5fc03cdee57e5abce2fcbc409c3cee1325daab562e9251401c0193085eb06e05fd4e5e14743dd13ac351dc8abfd42d49accd41510d81d7b3bb3ba4a03549488a374781868ea09ef52a51376375f01cafe3ed8b6cca19a6887564232b74eb46e235320cfdd9adaa3640863593669aa38df3c5f2710d5fa70771067a72c29e505720976941fd6edb442c773fe13bd9aa2a03 +MD = 2ffa408e12424846b83274f71c3c682e1dcd13867058b01801a0df66 + +Len = 38528 +Msg = c429cc1d6ee0cbfa8da6540d8950baecf142a1401e85be76131adeb8a88e2a1ce8cfa91bb73e0644b80594316dab8fbba0e6a56a02b0b42f139cd656416b9bb654da952b09bf1a46fd544542cdd33e3a7c43bb9a1591c7d491e2c354fa28aab5d1f39935ae8b8e66263b6f27f1ef4fd34c02eeb89d517ecb5694ad991beedf8127c2bb21ecc9ea0ef9611bc821284beddaca43ace317627d2a599c0fece4c3821eee05d70ca1b7a5406f510da5a6b9efec44c45e2f0cfa52d4d9999db533dd217d207f3f553c7b93c10c17dec49021434b1778b7c957ceb31ebdab2bbd02b5c40eff304211c2c13f45e17723c80e0b50bfec679df8226606ceaddba24d7ad4d5973420c6865b0e13939678c4f74a007e106b9af905924bb4ad5030e8adc3c1bae16657b4fe2dec7675d222a99a698735053b18b438d10426834fb2e6250404ddb43edef5bf63e2d0b13d7ebbf89629dd6705e9b4d90719c318516984fd6526a4d864bc6f1123798a108093e05bf76ddefe7016e3305b12f233ff5eab7c0fae79147ff90c3e95370a5a436a0109b4dba19225a62885f6781d9e019841eb2a24c331379eb38de3a7b9572d09074bf6fb8cebcba16a1f00d3ab1ffe1f2f92dd11e9f836b14c45324effcee77ad869e55608d00b109347a0a9047f9ffc5eb951fc552e213dbeafadb6458919c55eaba8737e0b8dfa8a45fe8490858b36b5a8ae6d6e9ea347f3137966f14e6af07f5968da5462f867376143ebb6fb6ad51ba61bec9c0f62d9d2b9c1e66de6820525ba4c14f49ef55f82e39767e1a7e6e27afdc002474806fa43e8abbf1f190a0b37177da8c4872beb5312217f7653a563b9f3c636d71238b32ee95f7871aeaa0b9db8221e2ee4431292370abbdec54f63c0d15511b435a00b7b050699ca6f090c3fe564ff987fe4dd279a79a381c68de777df941a4779e50a1381c8aa9122d01605e66bd26c1eb752fa8397c0c71d07f9c664acd9f6a6afb8dca8cc343090a631d7025e1f118a637cf43a8c99199464a095aac5d62a83a81ebfc13bbf0e8134669d83656fef8b9160fb067fb6ddf14ce5ccf7059a4cd97643a4133cd193bd22bc3fafaa486ee8e908f83198a07dfd69ce539497acc270c12f74e7f8f4270b173ca5cf5235f66b127bd40101de5f80606612c9a194f61032eb158597af3234bbedb72a88bbefdab5c175bfdff8ed42dcb2f1dd4cdb4e81707e7135408a1c01b7d75e0a7264c1fe79e3c5b25d778d0a83bcd91abf08348a24f06f3f1b0e4d37b30280b538b7d49f07e8ab24a0e2a9a1fd8bb0c623a30ff5f64af6ea51c22ea156770674033c918506d80e5bd3c1a8d0f327602a9f3447888d93f0800a2f2506493dd98ffb7c5e771fbbd8a01c9df25d0d99cf8e5c44440c92d344476ddb9b2d345cdf4e47fea43efa9af03ba3fcef10f2e8e739815a6d48ac12da88a350f9dfbddd02f9104acca23e7c3e74916907b34b1c8e7537ff2c0684599a8ad316a5e48fc729d77de93c6b946aaa930e69a20cbf3eae88a6bae80cc2af6c9726b3090450223c31b7625e61a36b1cdf418628e5f7542ebbf5130a230d1d38f5c4b18b07a9f6224fe53d994c14877ca1534701049a69f6564d92f8130daae6edd49895b4414cc579300354f38ec6b2226c3495315182eea1d5c01ba46b5e5ec77fee8ed4c12b0cf7c03bf91fba31a6a7b2d64c36c4a9fee4b624db9ecf4188cbec3dde2fd09cdf10bc6def983fcf417b50b48fda9ae50e661747a1c8e05c4c41440cec8d17a6260e4c229e26c7a969e56c57c4e47c3f067021afd3eb47b69370aee422b63d51c9379ae06e91f7c5072c2f45551d11bdce4afbe6dbcfac5743a1534ce771eba5b1d4cb32c7a0792d0499c008a84d026a4e3ccf741f3cb548461c5acca388c9abc42c0a9d111df5e946744728273cf64b6f8ec2df09fa0d908229ececbfc17e6aeb897dabb4ce12ffb705ee2b38b1966a1787feb1ffd05a37e1103135a1e5b3ea0f314ce3187b79793e93db9b45758ace2f70ab716b8845464a18502eb2bc0f34166da0cda5eed25ec26836ffb551797fa091f0a8b4e875c4a48a72605a0d3b4fea85a1f2c4eec4b72dca28e0f00a0b865032f6dd42b993b9d9aebe5102a2de4371c176d9db42f78b6602d9c55e6be9ea299be5987dc2462ed0cc5d8b1041a1199569480b54b314e255577036673bbbb31214e462cdcd3729712c7696eeb32cd83cc43e0e9509c3c5e21315bb734128e9f2e41bc19aa00db5a41632f802bf2688501b816c080cab3af57cf2ddea46d995b354b33f4c0571d751d1b93bb62f3832b8b638ac1383754c76dc2c23341276bf3cacd4644bc10b9960a632e671ca09dd5cdd8c572038c8004d79ee16b96da66d7534a5b7ff9f8202b9ddc5829a57429124d8a5f496f14d60629c5e3ce11f11a946334fc0d1667f1a45be9c969b9f8a56f8eeaa0bdd77ac739d8ca42015ef607a97f3f90727dda9eaea90dcaadb6a8a35c069c3255d928c41e793e947bba73be950bacc156acea979919db047c27fe935648f1ac97d0995d326f7553b3d0d49fc59d1f07103ff26d0232b3ef4b8a8505fcca9d47fa8a6703044010f8301ea33bd9a808ca35838c9f58683ae3925ab67b9e1fe1ccf432fc56027f940a77105a034fc0ec934d3433af2a4ed299e7151d54e89d81842b76d3b6cb9270f2ff328396865c5ceabdbe720cf63b0d7ac04624323ad7df05f6c287b5be0d2a5a4f119a661beebc490d7eb2392ad16dfea47a658423636cdaeca282d358644298ed2a18e27f0c9d26c3118ec45696569e0a0e5bdb20a4bd7b83a34f80392c3c473fe889ac3e2a721c5503623ef7fe69f1778e6197b13043504221684ccec989edddd96713c7bcdd8269c0d7099d6e1a716387215a637a9101beb947a987c0bde53d793bb9aa58220147d64794a589ea9654651593960818f83fe77826f2a63ad5e544622e5470f21195b04e90aec64ce8d0c4b8c3f75d5dbc6c186435adeea3285bc784c2648bc02bc9eb666e17a7d3d15f02756bd5eed1b6b9e8b666080e6965077f1e16592d1ec86ae4098d8eb2f1f855caf61bd031178fbfc4c928af8a00047ed798aa80c9606fdf46a29f625c39c66b7a952464c891afd439370df2e6099f386d8eff99e5379abd6febe441181db3f69ded461219c28f9da26a8670a6e88dbabd5b75f304f6c18bdc202c897b00598da168d156a94ca782bcde12a7511f687c23a8ae3aad308ca12809a8ca09941f97219256a0fb72a019d52c33155920b8035cd128bf427744b3bfe31981285b8eb99ae4568f84e6d1c987cf8839439ee4d6a57f461f793d923a2056df2d7ba92f5b79f95180da0be5184122528184ec876cb9fdb6d995f5fd8ad5cf6a4d581f6a034b2bc8137f74329caddf529cb19c084be6f6db6c3d22df4c6cd75b6f6210c7378b063ab5c99242bd0a50d8d93e2fffead8d52445e356cff541e922e20e4fdf6eb60319f65cf8ae0ff31185c5af0ad6cffc2331f50d0437fbf18f4163d10f1b1f58ccf643be19dcebf4bbc9e078cf1561cd6b85083ebdbfe6e83447534ee0f2dfffae402c417847f79b9a15c82fef3456c9188deddce5c03cb272954edc680f16f731982eab9687b9344709eb38edcc157bb4cd148c1ed173dcb4cba50e06c85afbf16eb940e704877b4d16a8284d450451bab31ab0bb6c12c3954af4583fa7225a68245aa5fc5708bd16bcad727027c9e7a4e07edf5e0890037ea3cb4f8523f3bf0059913f48e7b3963e7c59ac08fcccaa0dc5af8c793f7228eb66785889d74586448eeb915f4efe831ec63b397a2c83155fe33b3c9f694f8065f3aa078039ae3ccf34c830a1f56ff0423ad0af464f93b615c99064232e7eb668ebded13ab3846eeaebb591a3637e8a434aa871ffde6518b9d94d97c6e786478eaf755a0bed6e8921f44238f611b0ad9c663135f9418d99c6a2c14bdd3d0c9021cf0be6663fc3182f1eec9afca89cd6b81de94fe51153d5d6a6aa04e897683cdcbb012aec3338985cac234c3960999210f25f4425d67e39346556377b7f2fba1a04037c00502586253c64a12f023d6c415401974e0953509a5f6467f86cd984543a717e453f206e23304f4e6fe60ec1c3e35eddb01289986305331b01d8ec1835bed9862d28afbcd12841b85e84744f12f0e56c1e9a779d18f760d50a5bde021901ba481ac52a0eb9a4da538d761440b93d33e6cc09a3cb36967c0a845e35ce88c37228b09d25b0371667c47f3345532108a8c25ad8a4af4662c340026879da0f44cf9c6109395df3fda86fa634ae02d4e3d2834d8fe0b5c2fcf4fa06f310b11735f137bea1cb745adaead99502b4bc5f6f3f9e16a7ee7b26c58fbcf49690e02af7a57f1bef527fe62ecd76be15dffc2b0b5e9748b9246c0c4cd1fd6dcb80e3d50a4ad72b5a74fd2079ceeb93f6a65ec238adf3462c3904ce038a3fd4fa57388ffe6fd44f7b9968844c4d9cb91dae40af87ac46b18982d1f68a06e8ccab9a5ac64472fb0abb363eac06e80e90033e3e6d78d7e5fd49a8501030e6acb777a0c7126cf2cfefa1e20be24a1cb5bb4ffcc4666ccf658bf4f00ba59897e027c72109eed86da760b8034cd1766a268d4c506f3503e14a0014107111319927801291afd63752260076407df42c4ed5a880ef9b53bebc17ec1f800cfd9c68f762f2690542ea3ec03154f01bc4dc39477fa610d53d0dce33927fb55bc52995b442df1dc6cf61821a85ecb8a2bdf6b7f084f46aa97b618631a5dd26ca02799df2a2412640d64dda797095f0af5a0c59754b245384795a72a698805af4300cf03703c1192fe1ff968183f94e9e23ad8c2a549e71f2c17921f6ed31c846d8341b05d9c77cd09d0744b7328f08fba52ace9413cb3c70ee2e0297064a055e55bf9cc3a6dcc7cf41f5737efebfd6445934af571b43299b59e9932b9631989742eff404fd6960988b3a916d5b143d14ba2b9cc7dd9eafbe8f4c6218ff90d88e2a559f5e4005fdb8d3572cf6da1493c932a0158add26556718b6ede3b4e06baf76711d24113ae5acb4cba4affe4970ee6d12b7f49c82b13160d995004898b877a1d2fbeae360cee0aa18a6fd3a1b5b00c3f3e2b98e2c298a01f4f6134d22557356eb9a3729100ff11dce92631012c88cd1d4243e349b44fd66b99f812535a92ee03b968d64d12f5a9a4e057602c8200f11340af7224899e82997efde531b5a06e8336f52292ca389aa176eaa949427f3fc83e578d9cc7ef6a510759f697bbe97d9739329e87b130ac7cb3c75480f16c80e547237cd9f8a9573a3bf28dabf6d6e2e7c90791554e46a6dd9fd6a9fb19317c1160fb8602a33412fc22b1f195edcd671aee5c452329e0526b4300efdf4135fbf593c7f53f51f86040c47e6c7e2837d2d8b019001acb6876cfa62b7057f2e0c539e76f0fba895d0cae2a42448e307deccb18260b62bb44dbb1d0407288b39aa18465db1d98d3cbdced5be3c2ec8c057d992d6bae2281de49b7ca283e9d0ccb597e13f36604b7aa9aa65f4b2ec1c4394deaf8d03083a69c888c9bc91cbc85dbb3d0fba03424be620c803f60d034618023677f3edbacb1e85fd64b0d530ea733782225c8cd206f5bfb24020cef6eea41c9b7cc9bf5c52a29973ee3db2dbaf939701b97547a2153fd2e39b036d596e7e60583e7d1c7f89ac6f86b6a1af0e8045662645b2d834ff0b16f6852c6c8d5e0d6a073d6c6996b88294a06e8b4e5c24ef217a5793930d1d1dd8459eea311535e79622ea364b3467cb955b66690546d61765885f762c9d07beb36b38fb7f837e837125d56915cb2fedee124ea968514c548ebacdf8f957378414d1e3ae9c4aa07787aa7f537ddd79700b5f77faebfdd00d298c339a8dde34e499144f921bfd342a460b58a3d7edcce879ad82ac04cf09c7b29720b94e9478869cacad3472fdb21238d2e1c8b87e92cdc586ff5b4727621aa64605f3d01c8ab0bbf5bd1445de92c5dc9bbb40940283865b763e7727a9715c913363c8a6d8e4196399df9fe9126ecbbdb04599ff1bf7a8b7f5d08e3ac7a023ffc9bab6374c0d2720038555e13b9e8a38db01335e1d67ab6770461ed4f486f74e838b2b06086e406dcd5ed4c2acba87ea568eab35996c14f6801f979ad28e5d09eb55c59770901bc951cc7b11f84b5b5ecd3e701a126d6bc1afbd9700c43ebbbe8b9ae470271b0fbf2b4ed733a0b96ae2a9a110701af4167559b07b8b5c1099d8cecb26048e67a2cbc46677cc389d3d3276471aec1598bb6e1898d3bf0c9c7de53f76f8d938fe5b5bb793bb20225f58baada0ddc284b3b13856c73df0483aee60582edb729947bffb7f673ff3f08833d7da4ef7a7faed9e50aecbf8e3b18451d6a3435c4531ec4727864174ac159055366691f710ea9ed9439b27b2fdbb014ec49b64e9e59554776c56c2d7bd14104342ed1a3a71d650088d866aeaa2d72a4b96caf402b83608c7468b6bf79b7e807489d868506f40a9928afb061e779877ced99c8145519671bd227e9d42ebb7596f77a2dcd75dbbf41de88369bcd071725f199a9d10262947dfacbad7581251139a98f7181db19ac7f1229a364461e49252c34f97f1ca70d39521caca95a3ce379c6a2f7ab22f7fadb2a5b9dc43a074506053161278a30fad744e18b78a14914ddb67c6a5231bdd1dd8fe6ccc48f0b344fe65a88cf344584df37e4f5ea3e94cbeee1e5707ff0b3580ea992da6b2e703e8936751782022ed3da93eb90081a653132b0a4b1394720b8f5e0276cc2ff7e8a3b5c4bb545dc320e50bf +MD = a8d270a4267161167dc6e0b1427a8b8476645be263d29c5b8af924db + +Len = 39320 +Msg = 9f363cbbb7cb244b6fabb15d4f0bd46fecfbebb4bcea38b92a6d9248e63c5a8d7f7db1773346e861065d38f21142b4411d6f7b3d70de324de7ccb23345bdfd36cbc0778009f453c5f34b4b25378e9454cea111f8d109c7528fab9121dcd614c3ac84f69ee0dd4bbe5ffd50bf69f75cee281a13ab8873dd12499297da5391887c49539698600ab99572fcb1894e86f4585361eb1f3d245dd33e0a2c2551f63fa9cbb4bf383282869353cfd4488f4244da76feff1c972530de959ab8cb7e0c22925930d944fe4d98fd2bfe23c7d33435bbb97ab96a3e7d3c7b77cba39583db197f1c4e4c856b74d91e211204cdc362ad45455c80d0db346bf10c245548086b0db73b9680c322fe303d5e92e12107d695be422cbb171653a48a7b2d36afb4c5e483df90dec6cbf384a10906218c4698d66fd873d40796e0ce8ced6eaf9130f0882b30c5cc550d5cbf934bf62cd628ae56a02db7326804e6d340897026b523f4dff755bcb33a9040c85b4ceb6ac75722ff996c833d02076a9aee78ba04e436dad32e77fdfc3bfda78741336d432678fcb8a1bb5c5d9d48760bdee1d4b2e611a94b1abd110d21fc99e48d29021fbd3642680142ccfa006e110e57ed4796835b692e01507f50b3341fc7865534665236fef9022b5a7cf422448ba3c49a1a83bd22662c57cf2bbb4e401875e08a80ae233752ea9b8f4b410c166a088d55a5addedddae3fb8a08fff105bfa2f18cd599a3f65b01bcf1cfafd38f93cf71019eca67a2726e64374e49c674a455b1c3cddb5e42fc91b60a710520b7ef3f97256fa2ff771614b95e655f7598b0d647b6d13bfe231de0b162970d9a9764a227497ffd4f66ae1e2387b509a576c96cdcee478228a1a637d47fab8dea36db3e4bf536a3fe7622d4c93ba611fe18d86198f1997886c57fde47eb134eb79c3d5d29b2fc5cb5af5a7ed401a03e2a85c6fba2492de5c096911d332e3918aad27045e90739ef1c1a3f646b620b57cec57983237d6d917e1cc23cc0ce83b36bdf5e3eb47d5525dabeb7ceb7e54f2595e1db404216c0446760fb8215555be6a1cbed92b29bb8c698a4ab03df12d47024e0d37c289b8dc5236925395b4b287af49f07870ae9cb9afdd2044c0c7102ff26ca487dfc943edd5b4026a7b93651380e629367e5eff468b252a8f1668b429c41a7248de78a3a54b7ebe81458a040e5941c79786a369cfa5e2c813a14e7fa0d1d804ef21104e9f2de7451ca5f105c4c31d5a103c2452c16aa66766e3f0d941b635caef4a18ab37e79e24b10f70f0d348b96f34f14a40a853e0a6ed70e86768ebb442cddc0a400c22f3ebd2d4824bb644a6657a689dca00ec11f53bbaad90a2ecc3fb0f395db3884a98f8e6a79d7cea5174eb54e4974557bdcae0c633a8eb6c33f55228049b6c38d8edda80fb3b0aebf9a55f5907bf4909336be8117e72ee414bb8e6aca03be09a58731f2641d38c47a7a83ffb447e4bb1d78579a1fd940fbeae9f3701aec7973933c9254b0e0f6769e5fe0bb02d6cd3de249813fc2374c630d718b1db72c7167215408b63d23722df2f37511c250377eaa5245584929da8345fa5f57ebea2e4e15789b00510f35523fdb49ea3bdda8e63c3aaacdfcd973c55a2c7507fc4e3691384f541a35ccc64b4dc2642cb6a3aadd62aab986236c9e9013b1d7163381139652823aed3181ad82e44ecfc17bcdc4cbe24a796b060de44d392e8d6ad8ab4dc72bb8555f8c56735dcc27918fd2817f1885c1f265ede2cc62944e9ded33f36a8b8a9aae5990749f46ccf6b28003e7612c13b82c5a1f13de38ecb611858b82f44939cf4cc48303b9a4ae633b7b5529f46f54d63034e5c9a2370911f01c2a80736bfe003886ae2a4adf38153367126cc04a10c405d9872ca1c7b305439956146d58a2d578895912d95f33b5a22e80db4c230e29b3334d636251b13a11e458666c78edf516b3cce3ee8b66ea91b7e79b206317ae43287e976d3bcc5a62e5789ff733a60919ee4ec411cd9b5d06ea91d7c473f3fbbca264ef4befcc0a3f84fde797f197b88a2128ddcb8c98b60cafc5b5c1b96ab72688459483d379f4aea93165d21a86ab7034a357a331269ca8eeca5d9d9f438a89c26aad9d519ac0ba3c5a4233163c8ad30e055a22220db7e48fe9f8e38c481eee371b6322d0f9166825c1a53f4d81fcbc99960dcec815b0c77a6aae18e83f185cd1a0de99b85c9cc24caeb780281ca931bca099328b062f599895a6c61af123dc7740458a708cfdcf9968a07d0dd73a3d5f6926d3d4a7dba3cfb109748c26e5751144c07d6251df97f53987be657857e56a3adb3b09c15dac0808feaba5a6062f88f479fbf572eb23466794cc99c8a733c65be0f1941c5c7d2ce0aef2cd382f12c298958b91b9c87a763bf12e0f8fd32e59145e7ddb80811c218241d16ca60827a8783fb69eec1ea46bfdc36c319582de0cad7d6848b57493d136ded0eab6387522dc9d0384d497aa0ff5350f66a15d4cc86d64384182dcea2244ad78b0316804190bd7faac39d993486b6c9e157d0c7f739e3c7830b16227fef3d75024de3fdd734e16237ce38c6700a693a1a8ef367ff6862cad7c08ad544c8c84e1af8766071aed82075d99592f1eefd0a086c083553a6d5d618d506678f457dbb1baf2848af430422db825e8f28a8e4b2417b89d08269df61bcb50349cdd9c054aabe8426feb5e7f1df34de0b82ccb2eb4c39e29a0a15d20649ed2c0c7f1a32a34eb3148bde6c1606078dae989eced9ed9f23cd22695f403c36e9cb10117b370f5e3953d7ccc9f0e7dad93ad6eb23ec51a0c583da1e9abc6c0a378b05237160217fadcc9b58741b0fcfc42d16e6604cbff79bb151985ca92e3a52c65c33a12062297cd956ffeef6f66ccad0092f088d810a12d009751998eb5dc80775b06f0a59c243249b219f17342849de0e1381212d6ed75a621355fe3bdb13e8f2384f8060f08d18d86c08ee3188eda196326eaa4d8c35db1c21966b8838a2c54219c715202ab7207f4db0fe771512c5420a357b49e8cabc67fe5f43690d0146f5f37a5b0fe75df620352bca9d3355b392195a26bb1b1288f628152846becbc87e53bda498acedf44bc0ddd4ec9a22e6f6de614f098989cb472d5c8cc9c44ec45b99259442e1e395625f5ba01d8006f9f0c7cf36cdbabcfddb7c99d33ac426e51e5226aca72cdb63f49f09be88ab7e47007418706035188b13a461be3224d095271d55403df431ea72de7c72b662f568b651b1ae797f191d80232880486cc84f063916116fce83938dbc387f3f4d18c972ef4f2361ff5b0fb17772dbd6129a8d4c540d72c5125ce985a6a2368bd03503d6ab3581c24c4aec282fb52373acb3da69ec9ff6c6760a76fb2c6e3b1482e6825224094c12dc652d44aa83f9a991a0b0df71421ffc5028a66ecbe0ef71dbb9df65e83ee4cc26366da77643b0d067ed9b2d709850cf47440240e39ee61c510b7582464aee56b03b07b12198fb80a5f703d469072bc7a1d91522321c918c7977ef57ecb1bb6b10efa6022ae84c42c2599554d913237e1644498305de843abb7ba7273a07ee41bec0a30af0b6059f5381aa2f2f40ba4b0b3239d3fd5930bfad7327a0bcb1f9a3205a894c2186b9eec01bbce3fa1462b7071f40a577112983b61afb34f3446fe7cc29e3461bdefbc99e6467e3c802af6a80580868119ac11f6bcf9c546c33b388389b3b797e232db8450815cf07a012ae0d98fbac4b5aa9eb450d859f9614571cfc3aec6696f7d2136a83610637511f2a154e94e282d5469fb8514176ef4aed1e6d95808e14c18b936542b429d5aa47471de55e9b569f29756c374a6af65bc7f5231792606614bc90cbe2999a71200d8dbdf9c337451cc534a72c1afc49db8a49b35d9c7e0965e7a414cf7bd88846d4764bf86d66cce2ac361fac3d9b383ea67474c3f9478d498f35c685f57489735e996e7db77a5c6530f22c342cd86fe99f1e0dd7434d501435de579270ff0359fe5f8bd63c1282390601535063245f80e69ee524150ff07a5df64e7188c8645f26312aae659fccb29dec3b9d6b1f65892f8f7126c90ffcc06a26219fa7715ae778d6d172bea29a866b0b3b57cf2a3066bc68585bd9bdc3ab0cd67799577a25a7689906afb1ab8a08eff6d93be9c53e9e1fa1f13fe1a9e38ea89f96eb0353730367f030d1e91b09debf27ab965570feb3ebd4e24f5b44eadfbfea2601558db1801984f665cf81986c3b2619139cddef3c83698206b12f3832c53e9b78a8997fa1dfbfbdf7df7fc435f66aa8101a3c8eac98e886f29dc95a1c5b156dcd87072bed3d28fde483560bb0737def38784d5b687eca379f4b93cef0e3f7235c7b4744d6b4294cd865b4dd8034d844e91160e404b7973a79751f1554e26c42b1efea58d2d759113ff10cb819acf24fae8017a705c5c7f5fd84dbbbbcf8dd527a7f50e6761930e187bfde39e15e5475f54ee212f04be4f0a8155a309d79d2b8f2842b6c34ec39344c2ca9c18bcb974e59c850c6389c76c115810b027af7d50cc6a8ca58a3d2ea9ff9b1effd5d77033f48a6d42f5349e5dda2627eafd9f57cc47357ce4a276fcd7b1d0a112beae350cf4e44fcbce4d6caacfb2415974ee50256750ba7af54154a6c227fcdfbb892e884d73d2b0d41c58dc57c6070672e692e59385ed6f6ae65e9d9a69d76eb5af832e67ff9ff8f1e88b7ad92821f8e0cd4593359abdcce8ac4444a15ed9c592695d86aa505dab0cfb2d0cbfa13637a7ec90b8b458d49859dd2b2340cdabee3cffe4197f2db5d20d9b651a70f9eeccad8b9cdb7887d7dba4bf3dc3dd7ff5f199b93f6e4c5f4f74db115b2d54f8f3bedcf29184e9ef719db19ba2abe23d5ed493de970e7aafd29960a538ccd366ea151b68963c6f5748e768b88263b5cd8ea111b8137f72e2e749839e2480550a7eda5136d389728904c0b1600474c0f72e60fa8ddc4b9bc3358d2c4646d042ad551468a571f65a4b4e3174d950656985e61738a619f95c19656c43e3c744021717cb47fb98088f66ce41996c8fbe1a3d5dd0b24bf3121fab1eefb1bece64fd106d07d6806f4979a22bf80861e9083ae93c9250c4921d4b42091d5c1f84b99c60ffd1fd7e1f4080c60d5ea90085c9314f2a66fa581da248a6cdfe2d4d11ca45ce7430a43bcf750d9c1e7c64908c8c6638d0529850bc2a7d9f139a0c929c1f6124742db300a87186ea0359225b25d6436bd56112f4993c54f583fae2344d415928a9cf1215d2bb557967fdc9a779312fb2e398508cd960346fc425957c4db793a3b81eaac274dbe011f07143bdb02492d39f013b60a71e85d77f230fb2c409795c4c22614fb75a917946bc76e5f138d597b3a3b9b829ffb0f35bfd361edac0721d0be42003c2bfcf7b12e64c6764f35ec6c786b3db878a1b8c01baf408b563e5ac9d6bd028be9201ddfcf8ac8a32e0962882b31212ea482f69186230b7807a3cd2abbf5704d25c9168abf97d978384e5848d31bca57abf545449fed274618ede57dde99fdf27a3e6e4c8f1a9d67e69b4a48f089bdc5e79f3133c94c18780263303daf08e03e4f26819fae9178f4c16694e314196febffe726f982fe73806caa39e4bdc0eb732ce7fcfeae7af0a14136e4b1be39455c4d43b3006d42bcf1b0296efd7b6064239c193cd40f6598effe92963f4f67f279685b41e2d8d7593e65774bf27855ded20520cdca31bfd65351f045d65833ebd5c994700b661adcd9050a5d6e251fd00100a52c4bb6083d5dd3d65031590b95f3f965ba04859bcc5407691fcb122cdc3306fcd4d31ccd32720cbb61bad28d855670657c48c7b88c31f4fa1f93c01b57da90be63ead67d6a325525e6ed45083e6fb70a53529d1fa0f55653b942af59d78a2660361d63a7290155ac5c43312a25b235dacbbc863faf00940c99624076dfa44068e7c554c9038176953e571751dfc0954d41d113771b06466b1c8d13e0d4cb675ed58d1a619e1540970983781dc11d2dd8525ab5745958d615defdaa266b6213b8abdf34ef3d4f3c184a62d3fc7e2a98027993fcb60e8acb933d6e63b5e7faddecb73634e08591d19f7d8fab6c7b7b4c622427499a8f0ebf49d449e12def181e81a41c8ae3eb7fa9a31f447efc2d71b36dfe8f3cb07f7709c0100a92ecf52c6e1def0cb747f38b1cb9bc2bbf0a18b0759c453646964436338c9d3b19717eba34f7e4813aab2226b359b0cffc34d1ba0b53a4a6d79a61ded515c855b56a00441bc64114957bfbe4f5e9a98ba70adcf0dd4aa97b905b7cd366e22de517250e5c8aff71314848d5486d0012f95fda8ee773e7a00ee147e9b651783a63bf311d55fb19f161d38062c37133699387428c20579144eb5afe3cfa2d5e7a4c0e2ca1e2e49c4e10b7b118d8bada39e4adc1491e00fde49b5ddceb0172eb6a1894663065effce3d875596c1aa28ae06743e53a42f8842b897a62787e9ac58653e27c3d6175b26f239cf7e0ebb0cc1985da1cf431b6aa6640212d69c43d736b8868dd4d580e632c8c8f0afbde6df431dad0d6fb6cc3f74169f2ac4374b36b66209817d4dc2275b87ddc11215552b9c5e0e8b1b44698e139416f5d7a02951412a700aa68404a609f61f488f602d7733202621bb361ae0eba60e7bf81e06b040d9633137c36feca5de378f0fe4994c722e9dda38d409bc64162fc510fb0adc193789fd19522b809507cc9e78ebbf31c04f1cbb78665baae6ab22da057d5c5c360c8b7632795fea4339877bb4bbc7ae854a4bce64343b32d92c8fc3c1ed25b8fd2010a46b8034b3153c1030a99cda4b2ae8d11ae486cfdda5621d862a938c79d83bc190adaed16275d70ec541d8209115f157a7e1a33f32b215752d2ab6ba262e244641de4d5e7fcad4294062b6c007af2d847e41d4b4ba690c3fbfa89fd64766a446bfe7a305937c +MD = 8b8a54913b5a4c09432ef2faa98ea704e6bf068af26b35cb22c4586b + +Len = 40112 +Msg = db71e06debebb085443de3b1b744f546d29f16895a5a3872f5c966b026b757ec7ec1435211fcf54e28de2293355bf9620c4efb094f1b0daa2a92cb3d411720d8e700132e913fe4578a4158cfe81651c0bed1a184933220651382fda805bf51cb7df9fa0a53fca628d32f2e6bb6bc26e952f1b2020de79a2e1761a1f959f6134ba8739eed3f7b62496c704b7189979f632e76d38ca581a38a9ef6623624068ee2d035a7df3d034143bbcc59e848ede5b8bc28ae28434a6203100ae5695035e9175d08bee935dd6b9c2a0bfdd9db071f6f62cfebe1cf880020d665d599c4cc4d72b7b48b110f5207df20f4e14b292d76118a3232bc3184a56956cfd8cf6812e17c4701b561b3a83e910550ad461ca612259b1a29c352867767f91096122451cebc73b7e5e10927373c40e709d39bbc1a33fd4f7bfd18d5a1a127efb96ae0cf3bbba49dc298fa191b673b819bf88fb5b6c41799ce726cbb49a04936e6df84d651ff437cf58e6cc4119b5de60ebfdeda105f53c0cb2b377e98eac5abc77af8ac3712b61c25cb4872425f0edd083071734d8c188b192f5f67b509051704422499167c6745fb587769d53bb630315230c898d3cfc36086cebec8856f414540f1e716c3bcbf1e3ce0f1f3b7bda5332d032017bdde304a396acbfbe46df3317a45dc5e711f51387f6a54c45c8c05b3c9d3c5f2d1ae9a7d4f1dd574b066f370fa0ac2170df7c5ee2affd86fb189175c2f86fd5297a7c9a1d0cd265b70c20aabc826df6820ace1ea4386c71d3f1da5d36606115f9831855fc56404d9ade8008aea837c7a31a66ed4d5e667f58cb075c3763949405bb5955f35c9b816ee429db46a07e075c84c3353e509012022ab51d26809ec1e6999c24828e48a39bb37a9d24f9c55806e08fa107dd6dcc58974ffa8435d44204847d4c2a69dc16a9c2feb8ba22921c3a94189b3a435420d477547ee0f1c976f82259377b8dca7d31a922c886a958d670460a9e3630e7920e615f34cd4302e329f9dc60c65898299bcc93470afcae19404cb2248c149ca25eebbc9699b8051922516372cb68c9be70b3acbec7aaf657133ebbc8bc6cf7d44e5d193ee6bf447b79ef8ac7db1cd3ae38e4eb9a4d22c612718283f547a86daa755be17824d745ac891aaeea76035a7b5cd6dc53fbf291cdd3beb724ae6572973c5ea1ece48e8d0ed8796c553cbaa29865000b966498edfbc259a1e16112ab1d3bebd6f7a6438f2500723f829f915097ea06d5bc07943f2ec5d9f0b6003e8bbedc79fd42da94d081699b951d0f25f90c4441e74f656319d946b6001cfc5778fe968f8138f200d5a6ac5c096f1be6e0381c479cbafe83e28ddd847c80b5ec175f02930f549d0612f7214a09033662caddca9e82a943853daee2bba27bdd6adb52a93af4203c231d1560dc2073ff180d5fe79d2574c4d59fcf0ec23e88d362296be2dddc264fc66863f398cc3bc6751c20ebf9f1b803036d60aa4e9d122850a61d47f233c1588e697551e678b53d089bd3500b63ed8e7d4b065da74ab25cb4c5f9612e77abe6e9b4cbf46bc28ac350f0e9bc68188fb7c19d228162c3d3d10d0d52a6d924206b46ceca639f1636e9dcbfd679867c192f6ef837ce07951135d7e0eb8198d5d956440c1317d70024111a5d2c2ffd0b0445e3d0d89c1c3ad4eb93e51699c3f9314850111899c9fcdcf9885d4d382241ebabbebb67640721a972df8e564800fab2b209625d51ee88ebd3a534cc3a9ccd39c15e0c76ce6ee6096c09413d24c676f813ce7453e89b20bb6fff782b9fc2e979175068792399f47f27afa23db89aea5bfe1dcb8ec67640d60f059bede04b33241e2444011c3ee975463125da6be4b168c175dc8063f685c631462485948c36b55648238100c41176384c5085c73a88a91e752bbb49a25c06874f8675350c70b7503a8b9b89a0190c8e4f96e24312cc97658a3da20ff030117160465f4a525db48c89f0930f797cb2a8b97d5277e3f9ae273386d6ff66ae617046f8863ce47a077ba4d70a1ab698d328288868de549c67d3ff9bccc07c23911461f19c9539325a9e19b38333ce1a188d0b2c97debb216f0c4cf0e5dbb73c0ace2fe5f4dbd7331874671a70d3466ced37dffe61f1ae34fe30aa0ad4a99e54491e2f3a418934e8bb9f0b807581b5fdbbb9256249cf9423cfd1a56dfbc2a818c674de52e515d8cfce6e7569e3b773691ea169ecc1c1038a4e7fbd7eddbf4ad62d72cbe4721a4944cb63435b5dfd252b80511c126c6e82e4e49b50d1fce81d28c89866535b0eed043d3de3b936cb31b18b78ca67ac3088a03c951debcbe5959d32463c24025c6a7a8e2ed528209a3f978a58d35103bf8b58b12d6340ed202a8ff51ccbdb2a9b181458e6a61c8de2954a17a1f562f554118aeca4cf65b330629d8b7c73ed16339c6e07c5c50ae14cd945cdc47f121396a1a349abb0cec08ed4325ff5f2de77ce5df4257cb077cd317216f740fee2c10fb22e4292c5d097a3d5db0d099723a1b3d3233c5c06d7a429064a2e97e3599027d9a8720a6d3f9b180e13fd37ff51269ca287b6e416cf08abfc3bfe39cafb03677e9e526325506d43d369baf189fb98e132ae1fc59eb25d22ca78c0c7242b8d57177c6e4d7cc760bfdc48c0d6c5676b1a19e2e140dd362436079d30907d7fb06f3acf2019d1e928047f3da95840390fafaed2a60670aef05e29f5a856457bff286f030268c34a258a32b4cee678f5092a8809d886e79143f3a83ea268fa84dc0b1ab4afbadf6eebe99d4abc11de0fea133be4f342a08191af18b4a9492b4ed99fd450627074cbdd8b256bfb5afe0e24e210e080ba4a045bd8e2144787561e6a5f1262d53a21f59ce75195073247543c2fcda8fb5e327e15099ac9e7a3e99820b15b68726875508c96b8626a284896b254b89addbef8735fd9b942141f74307f4f15edb49bdd813f11a0308ebd803a09e97832a25d1a689ea1b409576a747be870e84f3634c8ec26d0cf9c0f627cb2b55672fce3a906e253fa11ac2c0578defedf392951d3d615c66c9d1146a79c9547343f760c334c55025b5896fc80efce24d28ee8a1f97382b03d7f1cdf0d6e56220b342aa67c69554c4e0f56636d47eded03602991062fa756dc0c3b32f47079f83407972cf4dc57743a9c66db1b1fa2d9ea4348c99a79183cb0cad8dd0d31751c5710281a2d13d02ca99654de1ae5915defaee2a616de49d464119257a83fdc10dcf469f895be53d833638ce6fd281dfb9c1973a11bcdb0a06e96e41d65ea13784e1ad932cf1a56f940ba8b703265bd256809685509c5e14328b14aa8b6cebfa522fa027329e65e1259d1ed244b0cf38debf55d3c7165501f2b0732842b5c4549e41852144670ddc5f7600e5db7ac65778063beb1d31a81a70dff382a342128b90a0c54a095685a6691db7b96f8c26794ddeb097fbf640a7d1a0fc82551abfe852d3c96a2a72b5876c1aac16a9ecd9e484ce1c9d096b03f0407bf6ee0145b1b30962f8494ec385c990f646c331a4c5e0465fe8c6ee9ada3ce3f9498f4eccd234e0d6b9ae1e52deb3fc38ec8aaebcd4b7bb177ada538badd5e2a15d2de5b608b3fdb576634126a68cd9680831c93aedaf0a813ba1df45650166fc9a906d0b3d77888a962e6047c79d4e0e01812928f7125c2293e33bd0e8099790697f8fd358c9aada81d823be272e84b33f42768ddc26d884eb670e3420359ce830c3f31741f18a2f9e293192b086a3de2a3c5a728334a72ea9f60179f4cc9e89582440dfe037521057e833cb48efd2182a367bded483f0a83758bca84b18c4fd4a6a1f311de2270613dfd072d9af39e8a7fa81d9b75ddc7bfb55e6c90f5f37cb6d5d3717e03c33983bd4b18e4a0f01d6094e156c1408932e5fb427e227ea1e7b28c53198118b9e4e35907e278357526ab8fbdf9dd3cd3c49c93f29fd7b01a295e569b4bc981890b06adbde466ccf532d1cc98676dcf4ff54a3bc9121f3ebeba20b12698c5d2b3047427c79f1edbf2da69d7fb3ff17c505d854f40a5777f2202a0288f70f480ca69a263df833ee6e075ea4e70d3f6d88765d44af3aa6ef5c69b33193084e42021b317ce4031157250adb97c73d3ec4847a69dbb5c9164372efc702fb414f3156b795ad3a4195102c5ea7e0e8ea040602378681cd60af5b7cdaeddc874c1cff51a14d22075bc601cb2a4ae512bd9a194ad83b9ec1a77a1fc252ae2701d1bd923802e14213f8ac134a964a100c5d07e7a483109a57457e788b7e904c2f7738d45601da7425c1502cf0cc31c8a074535658618edd58e3c34c21861db1d9e797abf2c7bf22075eb93506f1867494a78750ad993ccf8b285285ca93ddbfc9c9e201537b18b37f76ef17d430d27eb1a0a9bcec53a3d9babd3209cfcd57dec6c41fbdc2466e8f56b1fbb8a2af9c4dbf07c4815eb94961ab496bc2785b1377978058c78750471e54b9e402b8966c498683dd8948f0b8d1277506960c6599f005a69407eac02ec74033b2dc5d0ecadacdbdfebbf523788ff6e90a6fd51572b3d8dedc6533bea8f5e3ca6e2ddb3f3f685e5d2effac780f05e04c7f3419912526d8cf37c9a9743f0d06241fdf7850525bff0a763db4170799ad466ecd21013ab3cc22ad1b95087a786fe9cdd97d698c1b796cdc5d5629e8b52481de21358e39c17e7e46433fa2e19ee7c2800332b47410942c6b48dad638c00fa2d71a9c60abb7b48c0b29ef6bfde735574145de5692a317f228e4884581223454619fa09e18ff37f403b5ed8a55bc234f1787ca7a6e3acc651d1aa79f4a425b3d859987700600cf5d36d08028728377520bb13f46913f792e51d3810b1c8a4e054aee9affff22436fad60f26ddaa6fa0a24ab83e28218e7f5ccf55cb27e61d455b98721738acd5dd36f4e8980178b741c6a5dde77c92fde61976981bcf82fb4d5d84c64f43069e33184838e8ab19cad33e5b09a2defea261ab9183850125db72cb125aaa8775e9e30f5e648b22e3f6cf59e8afe2b7bb386c93ae9c9965551a5024cfb3dbaea155679c95e012118de7b0a9cd5519af5f1c71623c37bb748744601afb463500ef4d3b408d5fffef6e0a01be777dca1e50bb1a87b9097db742e61cfe43a65936d64dc88bb328c7251ada4d0885ae769d46b0c284a3765295fe8c014f3738baa8ece3b9de95deea5b0ad4ed08664b91a4a78a03d98a02dca93082979e2491cbdf998b69c9a3d6dbe9b4868c4e97f9cdbcd9a35906eb337e698f865a5bba362f6372c162dd6bc53e69ae6b853ba92d6d4e73992c8d358caa4f41e3c428668a37bcff022f7a6c1e64436ef08260084b02e1fbd808ed077302c31e475f549822874494ea4a311357001f6cb1ee4c33f7211fd8fc78a6cf8afa7d6b1da680ed8390a2ead62d820fe374463e2c2360baa64a40a152f63afc3903d6cec3143dc521d640474263fda058436039cbec4e1adce10cdb880c2a1c01b157aff432dbcd81eac560db68047329efe6162d9354c30f77ccfe0814e4bd897588851d8cfb4528207a9dfda426f6ecfc6029ada32551b281196f6fbb0b4f14e2d1f4ab8d1cfa8929f87525c2d5b9f5db370ae8a620356a9f7ac60b68fe4f486bdc652aada12c3969c77ce03ea12ae91ef3204b16e5ecac25599887a94e4ca882f05d177928789d62602bb96219c84b3a2d00617fd6e5dbb53e3d40f67bb599cac642fe7a335e39963ae81de7902070bf3d21a83b83cf8db1b14ae3caf718b095c6cd4c2b224b9297e0688a39b4b21e00bc1aabe46cf846bd2b37dca140f471966a429d06a5df4cc9d8f39ac2f7fb97c12251d91512fe7b3a349a982409c7412f39494d970e77acbe9d3fac3dca7b7252f84dbc17e650bfbb45d9a29d820fc3d2ac57ea46fca356e895934ae4ac902248a684c197778d68b2d77b78a87a4c6e234be50fa0d0f0cfca5a9503622f084c14c58d860e47032aa37206a6cf32eba49380770a3f2bde6bf674cb4230c2124439ddde75d6c5606a2fade1b96c4c9c0b95f294867c7dcadfdf5c9ca3daf66caf4a47ee1d9b8313ab99d3c30d1a37ac07cd1ab3e0e347548ff77a8f94cb4c65e1a8ac32e9c7009b53848bf12e5384ba2d8b515bc5fe08e9f0d1672a817c24ac9fe7634366e3be6616725f1299a2a434e1633f0292374329a6ef9ae416782f8f1e8915a6117c1d1258d5959ddb8216aad7d75c3ed229766216c4ae42b049cdabf1f03bc185eabd1e9f30f7f9706c7c9a557a0167024f2341c4d2e9cceb6b7f81bedf3e2c10da1ef95e26decbd4dc1671feadf7219f12da3735acf5f92457b58ee988955c6ea4a3212a09b27b955ba4d0480585d5250efbb0edb55b4df7892041e69ef9c8dbe4fa24675c2b8f1e658813a5f3361830be085d518e8241d18a10495a84a3f805057471aab0a28cfc8430dabcf990612e8a908b158ae36b4ed535e399dc5c7056a0b2a76899afeb9c224f83d1ab2d368b0f24d88e5d2720cbf4d1cf49085bb86d2135243569bc2199ea34bda87a550ed2a625a44057a608d563a46adc8b5a36a5116c7675b34fd5622670d695d9b050920a239cb01cf89a07ac0e24c8e7b0819afbd92cce08e36d8171946d2e5bb7b25585af20721f874abf287fab82aff70fbb4afba582cd0f5074460fffd672e39a79c318bdeac1da918873895dbe46a6678289447f58923c24b73e53fd22a1bc7f9b2cf0e3aec68b14d017bbc9c03e46ff8d216428a3daf260c6a500e3978abae8162dd820227ff13b428f776e3d19415e37bdbb2ff919ba8b2f248741a970575a97603f01ea60a57b3c355cb9894a3dfa1eb8b9f3ccd10d1a5d3757a5dd053a4d8b4e85f75b1b206b49c3cc3a49539559aeacf11283935274dd58027ea6bbac475e635d7f18f1ea71e795567ed1c7c0036404f11ad1d333413c01184a9b0645cead29161798a78c2592348be5c719767deb4b2a6b2c031805d5bcf9782e779f49e41a503f6e8e5dfcd62bcd0d9dbb013f810a0d9206b5891946f636a5e572014f9fa19c74ef28f87e2fd5aa64da3f08aee1ac3b1dd66d0f121c474052349824563c794b56af09e4100bec9479e12 +MD = 662eca1e9e98d532113093abc2cd6300c6af1fbd159d29210727d4e2 + +Len = 40904 +Msg = c754eb208677abaac84c9bc8e2e35e232561591dbb50b6c2d239affbfd750905d640de22e90fa08fcd245bb5945f3aa366574dbc68a989ade29011a3a2b6b4ba9b4ab6b8d253d3fb7b4481b05ed0764680ff6a2200821e953f449d0b4341c1855e9bfa490aea4bd718d495200adf18f3bd8237b84b827b602f7cdb9caabd3b4d665a323c5a7e100cedfe206d5e332a9263083ce41052aaf8fb6054be9ed327fcfcb0e7fb88b42b8142e8a9fe2375b30abbb8020f1999b343eb198fdae62b8f7968c59fed5c36a31d5fbab83d204cbc450dbb10a22c009c2b46cf14564b6c7aacf2c0e57aa0ac80ca8b9dd5911f614c2aa139ee03122f6f9756a96c9c953ff17de2ca3e0a1abdcb6f0fb98962e65b6ba1be59259c93cd346e61d01e128c4bfbd47f0a340593128bf333355b193fe32192ad433cd47682f19ab06cb222f739a09912a94ed4d453c8403f39d41cf0a177e5b720bb1285f8b0028ba4b133a0b0e8b4e3ce15dda2278a3d7bef7ad4c13c748222182bc086d4788e39a0a2ac4d59dc0d3aa20f89c836dad22f7dd8a97c5d21523652134542c1522604890df7c7dc838d5f4dc6400c29bfe7a20b7304e7ab843b3df7fb09816544b232877a7bd6e0e61a99f6c26b38a842641dc2d54bcccfa8267d2e6b740a68591a0cc172a0410d0b9d32c58970125a6a31e8c985e8f17092fc3f20eceea7739646da607cced20cfcff70e3a5b963e83f374b490b411e374ca3cbf405df1e2e051fe48b216d4f85c1269c789eacf2f9c95c8e6af0c01dcbdd0569d33faf3840ad8b716be8e5811f60fcfdabfab389361189f853bbcbb5d64d0961e521c6bd529673cb28599f3083e368dda54335ee471ea7d22df4ccadfda496fa51338c750bc9c038e9fc0124595151828e009aead3f89c641f232aceeaeb967e40fd6a28144d5801d65a742448b3a1358dba494582a852f652d14de0452af033d908c69d142a256e18fa61faf8103f3ecaf8acc7fe35afd0ee859dabb5678c6245db099db4690ec6d7642e6c127013e56e422a38eca79d3a1ac882f6e3ac5252abfe9cf09c11fa533a2145433edc0572a1202b5ff707037bfe21648b77002a4d34fae55e732ad35b6ab80c46235afd2c8a1b1705c55cc8dcc318ab30186cfc9908564eafe1bd80278fb1ed3f6af5e35d52ba57f2feaed6a59135bfae6ef6b07f4e9a3eaa90d0e9ffd0954ef4bab29f4b208651ee4b05141e8f0108cc22a92e472f4f1d18256ef62a55eb992fbc9b193e1d066ec1546a6a8ee603ef54dc8a5e39d2fc52c14b9c8ff2473b35b618b73a8071c21632c0e4c03fbdc3da0c43a3289d6029476da8649c9dce0e8a51750ee8584342b20b377cfe773dca32be00fb75ba005e63e4e4cd057411ea00ca7ba90c0dbb0fa81263390d7f8e9f6030bb9a2bd9db240eeda8dfb2bf395affe8d38f8fe803b06210e923d39fd7cbca2b1b8934421802b0529ca38bc66de3ef7225c8573140ad46cc7442391e41d4da76c8cf763de081b1d9672079d0d60f3831185d4e309d8fbe10aa9f2746f344f7db6b74db125b277a4bb15f62279b6542ed55555b2c40dc31a23341865d15a28820ac814a08b07f716f24663011e66d766d84b8656f511f074bb8303cacd177f70e32fdaa68080eff0f663fc9d7dcb03a7b4c8f563ff9dda7d3e175337b4d4aab6da6f0e57a8a5e8cf11ff217c1a7b5f7dd55e115e55fa07b0255175112b1a30c05af62e2865ff681def88500166f04165c48b68aa9adefeaa0bd1e80b8260a829df65c89d4ae5e449e98026e205b26fdc0cd169dd208535c74c093a7b6d40875ff22e5c2aca01f3ff9a970482594a216d18b0a36aa9a533947077dae54e2244df1dc0675555dc0d9b7d0d8766e4200c8572b993d778b77eae139e47cda78e7723cccc68a180cc9799fb741df438bc97a1954cc9a820347d50affd0fb90c0d84da8992de93dd5c2897b06b36deb9a8496e0afaa3513294c638a014a12bedf7f44fcec437b0ce1347011653707b095b98374e43bf671250dfc28e659a9ab0064c0026c1126cc58a796297ad395d8a5f1a99d9a87c6e6201209ad5706a9a049102a80c29ed3c762a1638df09100acf1b2702379978bb842e4f0e2fb58f8e5e20ae83f95f26b4325ac3f046d792e74a28740cd2b722f30b20a1b8c7b577fc2f4da64078e16d489cc4f925599920878dff5816455209896990cf0767e0b267fa709049f5511f8e17d13c4491ee476ffd1869bb1a2aab0321e73d967ad7dd663221e32d191ebbd92607e3da8a17761539fc1f679b7175d4b6ac63d26b0b475b78ea15563eaad0de69f1a653acd54afba722efa873f6f892ba48d847c2eb8ecc3121ad41e0a5ecf235f6fa5c647824a7d725610a2e0ba1b18f5511531cf9224cfd71219ca9606eb92cb036316ba0918e4c6c09e914201fb5b85985a0d3c49042305118b2f39ad487b086108f0ccf2033697f40e1d0e4c113c7bedbad81de57307c39d9214995cd026410efd1d2544f2bd0c7bc60eeca14502ffd59d59196f5bc2394096435e1b6ada9c93a9656e07ccbf4edc302c830a7ff73bda6b59d9eea39d9081ff8231f0fee14179738f4f437b85849fb23e7c8ea76154838da0056a33e0f0e8369abae575815948c5656f01e657d74db60e7e35a589755869f644ebf3d380fea153a001b5030c8606ad7749f57c6f6da362320861b7c4e268233e7acbbd694aa9748b4ca7af81bd9d300e21903e7387e103400ec33369a8f2ee9c1ea3e8d255b6c725cf33cce174f4b6dd939fe30c24d8b94f50b4448d33702006e0639ae4a53112139142a4533472078ca60ab461cbf04b07d41a335809488123c6f31cc7c4801e009aba7d00847feac262b9f99b04918312a4df49f1b4e4d99cdb3bb6a23a0db392f385a010ec832827d095fae157232715c8e9cb81bcaaf0182423af9d8d3f9871a38955aaf4e68964f784fe5c4d0e00bb4622042fa7048e40ab9451e2477d9746b2b0e3f62511d521e06f4f336dbad6a928703b24ff597abc7774e296ef3176b929e0941d066ad405913f338f3f8f718a76bdb7874b117d3390adabe40ec2fe710f03ae47205a4eb914daf3984cf6980436f0c18114945f4eff25f4f22b98f7176c007a9bf94a0ae5712ad7751b5515bf72f1a13ae149e8b4cbc605e8ce1b295249bf40421ba0d130ae16264f3515ae6431a89fd93a9adf0dfc7625ef80b35ccbad2848640ec66b42d5852a4d209f2c9b7cfd0387a7ee0e039b1f9d2fc7c8572aa023d9275822a0c4ed612998665a560b5ad8146bb1ae3b3caea8b6cf2ec2e3162a983cb6831e385eff916c578eadf65dd3211baedf402f6040f9b5f73a09c837546fba371720fab712fd3bb32102d239efc06077ba0db21856fae5d17505ce36259099d39a92af782e8dded4a6c0b445b79d2befc97d8c0cfa938d82661ebcbba6e321b196db1f485b299ce1a54e622c32a0c43d94f984e333acf43595bd5c6ddd519cfa926312d0a2b9be03a716a49468b2728ba3e763450a2d63108b4874f5d4c050d5179250b80a258c61337f442662b97ffe7fb0f1dc85fe223bcf29cdfa9319866bacd0a0a79c554e24d1f10889279e31c0afbdf64daf0779dfe9c62f25204586e3d985cc455f314c7309d4ba65bf4ad1f9bb753a438d31b0246289621e852b986626199a3b5ba2ce776491206433a4a6d02c3f846429620e31c1d92d8ccab2041c1cf4d331988e1b57698e032c8a93fa6e88859e588a83dc2f8e1d5918f5c4112c427e3fce1fdf7c3ca1342a65cc0113fb5aae4ec8b87d634552bfae69104809bf2020a5bbf77b394e92eb5fb802d53a9e27225d5cbc36e89c9326f428222532fc3f40cea0284c9ab4c61c68cc33f7b77f794893bb9d98b65bdcbaf3fc3445d50c26488323bb38e697c52d0e4b674ed2c7d78ab78e638a14abb2e3738e4d8f39165d9e8aefb729671e158819daa6c4d39eca4f937c16f349b49f093b8575eba8436dacabaa2406637240935123f940012bd900ed2ebfbd9e9d2a94148ab44168bbddd8b0fd0ab723baceb87ece67aba6978c038e4b66cf5b8fdcecc6451379c2a5358c5f8f7223ef1f455e6783f9eb08096bc13e7c1111c8b13b79195d997cfe29fe2f820963340fc92fecd5e9b6e96faaffa2c469ca6b2c2cd1a4d57b4f306471bf29df12e6d1cadf13cc90a8a68d25a2cf0feab998c5d12726d3c1463b7e3ca200e13f5302e2698a7a656069d1c07118636e76158407fdcbc06fa667674ecde74ac16973bf5034f1eb1f0dd440689a34442831249419f94029e14c85db8960662330271b2501733dee625e90fa6ee920f9a6e38fd2e30dade9907b499e153d4716963ff33dde6e950b961c4607bba6010a4f54fd464e803a86e3fb5ab7dcacb3a85c7aa20ecf6d22cb230f9d70361902008a4b17f7409c118a44936231c5f5d263e8a0d1a0bdb70bb572ff3e3cc6894862c19285eda2a7577d1a0d0611b75fcbcea37927fc8e957952e9b4d0735540feb85befee305dea37e5cc2ff0619c33c771f5cc4d292c4f9428f1f5fc1eca844a8bc02bfac957add74cc4c2c8295bbaedd54763ea2f7d2d83c1f38c6a430c9e5461570e52bf7a385f39698d356fdc396681ff04a7176b766fa5553fc1ed05d645c58a5f9e1aadd2f835235ae03d07fb59fd87782ce8dd747f5a81d7a9219c73453cc0e885e2d7c4cac75aef719ac447efd2458720aaba6ddc6add1ccce9b9bf7b50626fb020e257fc7776158f8ffb644f87a3f82c66ecaaad5dd3d5cf4c44001088d6bdc7dcb5d0b6cddf94e222949ba3a40795f7235a731bb9c9cc5d53267f2c6c859a711c387a2252fe34135d773410b2db242ae9ec104e0829c71c044584f585d7cd56ea539c658d39bdca488c77c038866e6cc08ac86dd15a8fb4698a56965a35201f4dee7daa06f9f6aeeabcabdbbe703b66b11ce4a19dc4ecce8add3f35740559744ef1661746a7a8684bed1a88cc0153bfc38aac11f3cfa5126d2785fb59b041fcf3449fd4d4a99ba073080af0eba17d20ffbc68e65be384271c4e710f939fa06046d0700a386997fd6bf6c43ba2b883316b9b60475d684fb69f3c4b99aa393e484f7b21e1fb4d64273a9d90907aae2b99120ddc5d82c6cf66fcd75bc324e5e25a152ef980a4bfc9c7e8e7b517faeb3e01f9fb234f5165cce03d09e8b38b0d5641a0d24110bb2690857ebb7dfaaad783102a4e7e4653ae0ecb6ab93c91661860a3f84d42b8c9ea7f0803002e5e12dbc46facec356a0e075cd089cf9d863e6ec929268941a155725ff97fa0116dbb5dc7c587bf90e20cd97f97a43254ba9a77587a316c89f2e728f7fffa826e4f2cc755bbc3aed6d7d58d40c7c2cca954029ad73f21e061d4077311c37d8e8d2ced7f36f969a05170ef896508ec84e37cfe420c1ffecc106f3ebb73ec0facb52b87ef3226817f47d6e437b60429424c5c17d4c1c3d117dfea1369e623b9c43074817d11ea113201303cfefd6081ee2a19d4b9bcd2a2ab166e0fe3321082be443063939aef23a1c7a77d4500c7fc71c6debe59c6f5776ffd22b8921f5a72823a87b69896dabeb4e163317688dfa3b168d15b1ca6d45a4bdb2f99de75aa91f95aa000f4ce56eb53968bdff85d507d97581a366b26165227fabc3730fba7e809eba4cc0e0709b1662f48103347c3920bdde2d4ac0c6367eba0f21cee7afa7e9b37ba9f500c9b18d5f4c14b8f0ee0ebf64051bf492165a28016f9cf82bb4a5b98840b0321a4b528882d1f1874794e8f3eca8e7ea82dc10acca4f8d852834088e61bbf7fe996ffea672289ff4a52b686cdc0c29933f822a8b89117c0c89d840c6f44fd9c11ab20655b1b2889795fbfd9896d149850492e822c27800d4ad0bdef1946ede0ffabc1a14a5f233d6969128f5c18ad0469e98da311ac584a42e3933ace6bb8d51c5e89a71e37a3a4823756b02d08b465e5a1e8104d69cafc179fb0f475f98603d08b217ebdebd0442d933445e38652412c37e7d2caa6fbad31ccb925f6397ef184fc302e11c3d1a8d043545568daaf22a67331f26eab16e4f83259d53973c9279e775fc00006cf55d5105de8a34cf28fbb1f6f7823bf412ad498360d25ef8e2d88c5563b74fef1d5a2c2f8067c244411d301486ad02ba4062dc7f8d4a4f4f68ca8aebca754f160aea121ccb8dba9cc2f56e365d25d3869006b8848339ecb29cb68f9390d8828436b38f48205a824b371ac8b6db7b12bb5a0f6a1ce31f9bd4e722f707774f7ebc391d105c1f6cbdd205f3dc10922b64fb36f36da31d69e108e0964d91be48b8208aad31a32922d1c3c82714fe11a53eb88f494fd192a750c101971fdd0652b34393ea6fc7ce1b4292e61b1fc9ca770465fb776d0303666fbfd29bda43c00bf4a7fd3b27348eb494b1f84638fe3d1f6a95e41451d1b015a237cc2b09507bc300c01f35e473eb9d5cc3774f1d15da1cb5cad196aaa859337ceb66bb29adaa264c2e825143f05523ef29db8c18ab31ed8a775c74b3f14f5e742d2ac2b795db844b45bf23c2446be6e067ad83d818c5105d2ded452a6702e50c7f90d83fb3708b82a83e03cbea8064b4ff55dcb8091403b240fc7e6a642465ca7531722e8109aa96b87797dd5d431bf1737ced54d6af560e631286e063246f228075171089274fdc0904567317147b1a468b3c2b1be785d616b80548fe735f9943e44d62363a09e71c6cb639928510840ae95fa7435cf1bdae656ff090a1b5b311f76ba002b2672c65093d7d7a155ae3134fae55e7804819cc932d73c4201ff48d3718668930c630657252cb1835e8abf206deb372f1f76ee3d9c44ef38eecd2081bda023425c587b020acbf0777184349b7374c60226e4176a1daeec94eaad0352e072f9e21e386b7ac91a5c249884d6cc96e8d49723b260773c7df9fdfd87376e6462b21858ed1fe6ea83bc33da72efdc5daf29991dc8118d8219df1b304305fcd1da158e145edf6ff56dd94b4036c5f250318dae1d0e72d376eb65978ac9b524ad41ebec5973f33d73407c15d0b9a037f8d6c87e2a6cca72a059551913018f1082fffcd93014a277ec636b3894e1cad3dc07a1b24cca639188cc7648d4d4dbe5d77c10fe9f293546e6406f5d94978aed852ae2f28b108359b7ad8fcdd428e0ce351fef03b19af4d1eb3e4f2cd7c427ad79a951e5f02673f2b462694f1ce7e7f12352608f6b4f27 +MD = 7f28550790116649a20517a4cd930792e2c349209d7d2d366481669f + +Len = 41696 +Msg = 7b32391369aa4ca97558095be3c3ec862bd057cef1e32d6237479c81d2d03a3e1abe5480e6e5824cb80b7f4734923876d7572349e5d9d2d8a39ec86cc7d28b412d32fb8acb28e1b6e737cbf2879a18ef2a284fe5b57bb5d8b0511e1ab23203111a54d53a00bb916e6ca49564c524b2788c0d82aa4a11fbeac62a45937c39c9354bed8b976ee6b9fcad1a84a6d4782e9965cc64a18ae3cf964defe6df0b2c063526c4c4a9fbf182e9146140bf9edeb5da1d2e9ed15e385765ad69a8074956e19a15a32979902313bc074072b70a9e6fc41cfbd843ae5abbde4f6034121dfe83ea7f50610e16c595fdf081c297ffff83decafbb9fd638f248a999c31086e6b13b0cc941571731f2f3536ead766674a19b090f5ea096320baeff4e448f126e6ba716337eda891790aeb41445a2c29c85bc3d4b3136f9855a497c90121d62cb7a0b7ae0190bd561b4da77956f2f12dbe6f9efffbdb35e9750b0a7ebc63be6826ec0914baa7b7ac4c21f146ea48be5b777dca7a96ea653dca16ce7ddbb6b2c27bc7f0fd29d99f7a56ae5210c6039a9b3aaecdac4ce9067e9aee6d2c26c4b922fd58f3d117cf7ca87f1b513fb3cc8ed54e2931fce48021932eba6ff56732db70f5c89af94c31561d1091773b794ba1f1fc177dd42856bd64cea35a3f64ab2094ab3e6ddb90a636c350374a6ce027dbd78ca03a9bde14e2d9c1d1b871e6d5917667e3f5e0abd623818936543bb009446f46ebefb8cf6198da516b10f5b55835ff71deb970646a253f01b51d0eb098e5a271212495c3e6e84fc499eb3299dd1515105841f4840a44e502dd2b4ea97dc55657696299824bd9206385d0905a0c37a18e7916d2d45d895cd2d50864645fec743eec2f2cd337743576544777bf8ca58c3168bf74190cfb8ab9c63cb6a6e763e56fd216b67f52c0764531d84f920667bc424ec4401ebea25801d84dae3abd318f32429c9f4f45c5cc17420c809921831b0852aea0aa1c87aef032c5b3e7885e5ccf644b5008b88b1d36af6a729d860390cd9d04fb84ceb175d0fd2c2c74f0f3338d61aa2f75521b53e8a17b8e65dcee02d7564eb9757b2893e7600883aa9ff7fbb56141a55dbc7c547640c53abbcc4d5b70a6154145cbf5f27e84e31f513a729e8f8b991b879eb60a28b3d2df65fe2782deb5dffdbc681f78dc914468316c6d03630839f7bc9ed25b45232ae62c19845f69aa3754a1f7ae0f4baeb4c611daee127900a9a2c467d73117b753b5d8c66dda5baea2aebe23ab9e1103baa1ba2f00b3189a7285679fcd73e498d7b631ace8dbfae8aa73d9911d0d77b9de61f511a8ce8afe1b076defbc09f5ed3e50fe74004a9081d60cbbec0c44c5f8a86e8829f04b15552c8f9dfeadda92df0eea09c5ba0f63a0aedf2cda812a43e7a1313b1edf1202c72e87c075a7d00296d1ee18482012bb6ebb55f40382a939af5010d8987d0c997ba8569efbb3d28f390ec3f4a4393ce21384d7da111aa8ee773d742541d31f219a2264ff39d8c97ff04ed165820d731fb692cba7a94e10ab68f1c6ecbee834e44b2419abd61e9b1be51880338aa5a0b97f6b9a237528c7b8aaf36cf3bac53428b737dd697b8d31ab3df438256308acf99799ad161dafb65d64cbd003db70053605e21803d02e7377236a6104b63e7d2726a46b4849ebc5e2bf0258e3c9f391565eae323f7c0849c6bd0363982a50fd8b53123b81a0e5dd8ee21f6e5d2d56becfea2293e628239ce23346a6a96845126c476d8788caa4e4aaf5aa7937af9f76ebd0c6a3c07b885211aebc93ff1725a6142a3cb6267030c47e222ce13af6d8a0f03922cb941e3e559c56eb9061e0f9a0c9230830233a9263528f2c0d2eab0824274cbf712cb84d8bcb525d06996bc8e8d45a585c47cfd1ab6e643267db7538ead83224ff4ef2bedee5cb9a5e6d5f9a667df8b4a459d8f58219cac65608fd6fd94b12d9dbc374983534e828fea66577020b25a46f23fc07d29de971427febb5dbc715676f52e5e377fed291500c2468a4c808b1266be40e8240e8ba9306e612d796635521c5eea88e8cb05dba66457434faca622ffa37127a4bef2ab266968fb6fe232b5be336ee6126ab12a67e6fa49aea9240f3989e1ca20628470567a4335e487e72847366bdd813eb3a7b1a4bffbee089d2da0cc132e2b8b99cf5d0b807b8bb9bb1033e251ddb9d975ca103808d8823d7a04d20475f22aacaaeeb6b7911aca1a370420c1c17520ad7018001b756e1fda332b29ad9a84a2584074dfe905b2340bd37a8a4f2b225a3d5b080db9863afb4151172431e17426f0e2e8452a4ed03e2128f9dd050f73db0b6f1095bcabbdc9157c4f6e3bfb3f2d091abf92f5ecd36cdc9ff8956deec8079a54c8347f6664edc8ed3a542638442923507135c6605a2490b10d5ff439bd745c84a5668c36defdde5c7e627b3931bfc21c939a3639d31a00048e793280c2a5e4772ea86dad7a5dc8226235c56e763557e79d5cafe9bca18cf3228da3446620a4b4da769e2ac5a208d7bc3a7f58804e6739f4e9ade0954fba153009c10516592fc61f6d884f4f5f22f4b2ed1387fe4f729c40cdbabeeb98f9d35d8a063351d3e81393d9c68b85e9a8f20cba2c6d3edcfc86f77550f53e01dec5f16afd6fa7155035ae57d35007d60d78104e1488c05b87729f7cfb03fb1ecb559249111a94821a94e574394d23a8b2cf7405865b316f85e79f41336ba144621ac680ebb4a8ce89c9cfab62c387d65b809e8cdc64f07d8a6e7d6e74acdf17158df4ced7ce324f303cc359ea6392e34a33f62091368c0a077fb0514947e30b6817a36f8fe7ef88a076672c2a9dd3541152117d4f3072998f83ee962bbd7b95dc40590f5e622f0f4d0f318ebde2d7ad435386ff50e322a085237ea9868e074ae4a09c1addfd8f47b85fb8fe1ec30e5352b0bd3360df4ab37ac6f718042a04af13b0e31e88fa7ec654e043e6c7def5fab2022a95d9852946e2f6ce4e0f21f216dbf9a486e9e97c0fb54988f543670ce7f3c065a335656cdf503b8ad811f65e36bfc376e06b5b05885bf3ee960c1bd1cfaa63e4f80f0073e144fdb322b727b76331d6c0b7a7cfb9c4bb77fb45ac6de2f618752ef0c0d6dd0133b5bdda59268c40d48c187909a7f759463e15908ecd9f1ff06cba19e56916939f1c215b92934b341a6bf4a11b844c9aaebee3e32dcb8481b4c30cf00737af2cf9697412ddce82d165eedbcc47d5382d3782ecca23e831efc8009e0f80b30541d5563cbca558a19d598d4467392b3865832286b1fb9405aebcbdf3c4fc6bc756b54ad1a583c255ec77efa4ee49e6cbf8140648470f5f9e43055384bcd4e253f01bbfd969f38bee63135e93ee04a871395ca6a7d5e9bb5a413459f743948739926b3dba766f25f985ee8297c2f3e0b6cdefac3c0b1537d82dcc399225c5faf6a2464d0b577120f5c95bd4072992100b1a2f6f6b331c45866d2f9b0baff39e09c41f56328983fd71a1ddcb886e69b6fca2ae68bc0a5974e383e0d6ba5e87e0e16c68e1d689221bdba3f6e1922dd565f9ebef30a4ed77367e06827524be0d741c0fb5985dd2d61cc25439be9ad48f7d817a545fcc48d01ac469870ee14aeec8282277b23f030a70941718ab28fed29e21c2903e98c90e92452160fc6691c64d844931f7f07659a7ef71064fb2f949286969055570da8d2d7ed292d63b0f0e74cee886b228c92e332306a504df707dacb6b2364d0af9c64cefd1bf24b53f31fe5684c8793e5802a2dd2c5772f4e0daaba842a58dbda3648106b328508b8edb1ab9a279c5a7cf71678c66a01299c6daa59c9ed5901f63c26a520b70f2249a648a66d63d200b7bf4f1af5a115c34af081b222b38dc86b77a59603f1b71f6ce58adfc747500c009f7e1b46b2db86be5ed7cd78c61fbba2af6eeafb2aa6898b741f5d921a3f06be604b84a0e47cf9617f56b0b16c355f01ac29a9f2a803e70d19b028b425c67658ca5d5ced8020a59b1aa465b7eef83ef1357ddccfb5f7c25a9de54917b00ee538a55dab14ceee10d5f969f470948fdfdb14128a7a97aaa1dac765c7a1023fdbc5b9f279fd160fc475e24e63c6a522ca250f91bbda96430cf561d9aa3c6580de67cec5cf90a0ab49e59efabca06bdb8839efa277d9fceb8b1331e8fbcf1ff97886ab7db4b5b3e9258bf51707e52ce0a07d7becc75e0fc9a79c013bc14179d3308a19c3315499f1e2d1ae4a4a7f31599a5b7d18b2521906e7f89779047cbb368edce03f4d5598ec071e933d8f55c26fff3abbcd419b60c9d48fbb4bcc672d491be2c89810a0f9021dd96a98dd4f26495581ffb47b222d3bf4c9375922ea17355e059977821d045aab6cfc023d55a711279a0f7568cfc783d20fd24a0dedc021e0ad1a83acb5001d393e1124b54f8becfaecb3b7108b78cbf3c753c79658713627431465954e377250b771a650251b0458dfb5227c3c8638e15b8377c413729cbd2d4fc445d1ef82773fe32f13c09f81c8dbdc5fb3cb3af423312a039f070b7a2ad59349c5277174363e306708065f8bd348ef16bd21dc2741b310122f1a84f8f4a1a89c1c360571151c20f836e0a248ff8eb7eea324b4f8c347fc4d7d352440a5fb556452e8f2a19d417b87a536b2e3d715fc906cbe09903257b75b90413477c44a63497024822b551609bf5ef1d582e04685a420d62517164a0ae67024fcc8daf69bf57dd1fb38c501924568f7544ea4871cd1c8544eb4f588ba9326c8c4596e67c20d81d9a6ef766bddc4cb32776eaa4187bf6a1fcd8f5979920cb913d4520804a33c8523cb79efbdb3e29089850a7add8f171121ead1c98559f931ef73dc313705288f97b2fdb85ddc47bee3c84c9dc1fc81c241eca2ce14d6019743eb1f6f68af79aa1da2a45ab5209c5d2a865a9a5796a487671d29ef8ed2cdf2f782424dfd6ad8db9de5965c2b47897645085cf9062529677bc38fb45b15054af2816d505ffeed2cffc1fa462918b50f1c967b433570b76b6627fba5e36750a71e30ca02f6335fa42b7ff8a1165cc9339777deff4e40f7990e91964b8e90561262d67eea2ad1d64b0a66baf45adb6ce79ef5afb5b85d91fb5c48882dc557c092a6bcb490649ffc2a82c065c75d5d4735195613eddb8f2c993896f8d3ee863630d22b927d0a6676487cd324a386aa0224f0e334301f9e70798bc10ec673e35ff3cf69403886eeefaee1e91d0e3f8944bc0be43a05ec5107a53b12f48dba37e4e383bee7493eff0d6297487892f0c4b50652a14df5aa71962532d1cfb02d496c08d774af399c61786e88385eb7ff21fe09ae619387c1c6c8ff5646cab832e3a06bb3d2bf8f06dbd9d99a03f704d569c7ce056e37439918423d91b90a2c33cb2813001f40d3e637d8acb7f06a01da63b75b410e5fb19a2fafe7ca71ba9497caab08a4a4598ea33b1ceec646e03676d977ba488a345a2dd3b503e9b70079c6a8d25389a93347a5b04ea7af4e802c1291aff3042addc5b8cbfc9bd5d30461282d44fb9575f586545d15e05a50736a1455060c5b35827aa5e02db6780defd72521a908b252c8d3180c1aa0af93e078e6eb240f37f54d025adaf05db9ace960254bab83c786d4b7598305ef9661f0dfee1bb2037fb064e44181ec9780fa19869074f073bc5a40b97f8b7dd5f700ca2696af58f11bafefa8c09cca6cb53da8d0ce6420e079163562f2ec2a5bbab998d5456dbde0f23a17d741f531e441bebec647e3e4d2e502da381a6eb588c7d47f75621f8ad8ee9803f82b52ca080ac581f163b9e452ea6658c560d9c6650699a98d578b66e2f613dd93e67c3ddff99a1cd88badc7676f89d6912af404f85f503ea58b7afa04f3f1ca30da3b3171f684b5042589351a5db47d22e188184bbb40654566b3ee48cb7bf4586f564fc7eacc75fb9b13d8729a2f7502ee5da96600b247f65000e9b667f983920d973ee8bbbb8347531455770f42e5b9b73b604f18ee0c3fb1279355afb39f671cc4a6dc5397086fb7535731a435f5cda6eae510e93cdba9f1f1952d8bf06e5e04a631ac98a82bfc2d9a84a9424fcfc82231dfb15de4dcbb78269746e4fa1bff2d05855f743815751faf84e6cfd9983292daf7385b2d39fdaf8e40a9a017ccd2ffa94afdce8ded62f45b00f0341b7b9160abd4afca6117f7fcf0395da990aa60e359298f8df0dc4c1466a0d05a5d9e6ff36d1f1d94c6a132c816296ae5addc303fdfc91c9ba90abae7980b8d28e72953b3e77f8ba0a4fc357cc6b9d93eb58aca7c01d4acdf009e34d5b9ea2f850045c608e39d00d64553887ec991b19bf2deb70388ef48413dc0424690e4bf5bf21a4f5a2720841ef0ccb438e758fae3aafe7e3b3bc4f6a9a79a6da2e6a2439103cf76117db11f60ec8f4010e7b7bc002612a78be4fbc0ff87513c5183cbc60f7c8cc395abf8da8482c5b470935500d9ae43bb5d493cae2b251038bb2f084dbda57bbf4f799cbc72fa9699bfb1dbcd5689b84118342ec716c9fde748b201e283c5c1f1a5b146ce139c2975650af02c5f019bc1236b7913a6bb40d361d35d8c492589e100199d174dafa7d3ca663d24dc5c11c3e8b6c69ac44202846c5bc554f70ef918c97b4a9f097d3738568d69bdb5e344d0cedfbd6559a86b81d313e04075c6391d669df46e304c022e71461dffd3de5c6f3dac057b4b33a252fcc0575bab9572784147448da865303c835a01f31c9580299de747e4842cd07f512dd1aa81c5ccb2c043e1035b10e8ebf492bca0794fd98557562aa9eadb1c903821f737e09d6e524d5875d82f9552c12cb4f70fd2568f0bd1c257d16787af0e1b637109ae6481e04f4da5140e3b97489388594610f0c94374f27564e279b08161bce628d5632ce52eeb1bc0df4bdf0891d88b4f1966afb6a8b02d6b42fa486f72f4fe9d3be298e851fa7fe48a0d51888f6a3432d7006bebd6c227ec71509f62b6d3626fca28ec7122427886f6c91650f307fdf53105226a64f10af256c3dce19521baa6687f5108088aafb00dc755e827778ea20ebfffbcbc057e82d99d287577a5ad4bff2def366b9ccc69b64e37d991828e405874276844c62da6e224aaa4c428e464767bed82b33e76bad9a8e4a99bf0a6d8f66dc5f666fcbc6559a28bf9e47207fcb5b17475493955a95f1b83e3ac887d71d0f2ffef896ed6c8265df2f93f4bbd18a417ab95935412412ef03d0c2b13bc13ce4afdda14e521d5329e082e3d7baec22bf5bb6dfa5955872f6f39ae825a0ac6d8bfe83f7129459663acf41f47c983013292cb82e70ec5854adfa05018221093d697e8a60702eb13a2d1df54c3fee4dea137045ec03d0b42688a997b55367581b01b24983e38bb53 +MD = 078f1c8cb726ccee15853d9f94d8f6681505175a3b8acb071d5e6c7b + +Len = 42488 +Msg = 55a143004b932f3218460cfcd400530463a7a47cf634673fd564af1c5db0637144809ffc259c58ef38e33f42603fe84d6cd82c969688cce8509056a541894d5c8a9d849e4df6cb0e7077cdb89eaa39a48ffa20aa8a239f8728e6bd315a019668ad5eba8ecd8bd0b8486a7f05952a8e2f5575495fd8eb2746e3d0ab69b10188bc372d0873ad41ae1549241bd24ea52e1645b26f5e8acaae4b0bb4e7f44d726981b07137f6f302af4cfa0e69c6cf046282e8175a4fa8a77abe27fc3a7c363a82de9e910fbea9b51986e48e338a2230729bc40dd1d83869d4c8c00f6ca675431bfc8bf75874d64235ea8d0d3fc54f10a68863fd9ea444fa04915d55451c11737c03fe0adabf83904ba17ff456205c8b45724d4d8759d341524086368d8612b4ec1a80325d48b789a3d242a94043538b9980086755a0ee2606fdc41a0b8b81edb56998d7a8b67a1484a65c96c5d53bf7e8db1eb1d0209c9167f29d6988d465061d19ce6184b2d41938455721ad7f1db67baa1795bf82e56abe449b8bcc09c6e66d52aa39b9e4ce8105d6bbb4bfe800b29a167979eb6dd199531e46e99fd1ac77ec3bb5c50ff36f3234810eb6c4b8ecd28d47cec71d8a69076ea625e9c9d420a0e4fd766e4e88c0150c70da8f8599eafe9b649de61b81b49a5704c0f411bb29499bbf759c3d4ac712d7c8a6a6c731001e0d956f3eadf9ba3b55619f73402ed05a5aaa3bb8a5e28e12dbb4fb655528391b2b04cb379d9a84d3b2e54bcc1ed41cbc69e64f284ef71dfb625a6033f6279adb3dd63939b20d1948b4b74b6973561555109a395600327ab7b2e25d7871d62d478b3641acb3fa8284a40027b0075bc30e97ef82a8833baf2c13757a9d8fdcf9475d4a6cf86908c56dcae7680ba28c2fd0450cb1889eb9c444cf3b400818e206c4fa3a41859ce0eced6d9595e10b91608164194e5d1b54bfe52d5b3622d48f5da4ab2f49bc132afeebd63136990b115e0a3a40e28fc0b5aaf974fde5538a8c05d1b8510a03988d044e4ee4d39d6ab5325410a7f48656848c67ed4bd3040480063169c70ec3f1b105001bd6f554f024e3462d760ca9a4686e17e06a8a9b081469ae05badd65e73f09e8852e2326640679c7dbd6b262740a57f1948592825ff0352fd651fd4f42df19eed615e67b9005fdc160ef6f198c124fdd53c2711fd1bb729b22b5f8ebca383bfa54b2c5bb3ac7761b05e8ca34b5275fc36349b1dc251d28dc320d56a047f379f4492e484e2bf4ecbd12e94c1cb7f18d8b0d43d92025c060d94e829dd580b7dbc4fbb0f79d2b35678fcf1c7b395a1ae31d99d872529749227abe3c57f43e2d6853b3615b0e0232f07883a7e2f3664769614f2f03dc446374a7c9620b6449fd2887b868fb0a77928e6378b206b3a222264077711425f4b46048b81c428d69ce234954ee5ffa53fd4a35f46671dfd75322a058c52e956ee4ed45d39483d766486282cd1b10445e1d2bd740eaaae1cd82656b3b54d8947c9c238662ef56aa0714ec186c16955260973931a467391f4c56f88768469a8ae4840bf4ad58436e15dac9f57908768a21167c2b6705a7031c77e2de27c2fcdf6f43ac75fcf5d38b594102ff3c183c566840fdaed3eb7af3048e2b56c0f087fbe5820ff296ee8d6998f29e20fc6f6e1dffbdc3a02e423d59ce43dcd97af9c2470ee83a54c46cfa709d95a53f03349446ac36d6ebc131759c403dfb4e9f053529b21e3781ce97a0092fd120439790373b38533f75d4e1ac242325939c753b690a98cb0e63fc96099a154e161601abde636bbb0528af7a69593ea2a9ad45c4e5538998c5e19592bd8d18b58f9f89ac11260c1730ea992335a35b5d476856c8316a4d2c66e2e3b2424800ae93c676bc58ece50ec9a5dc04976a40fd74b5f26ed6b9ac31f8502c1f223595e02b7312023c1dbc49d640be461716b62b397c5fde5ba66e4c8412b900e5ba9ef45e8ea3a744215a6f62a388113d0f858f9da5e641489b5a271110d27e1141e59135ff72d2f961872972b6818c92bd75d0a819cfbf26ff396aa732bfc130313060b6aec7ace1430a1f1061f3e09d894e9762be627f7c3ad3bd4e60c7f0c9f24809eb84ea5d8630adf8438c2434e6d9d78bd47de7aad2b4f0c60f82333365ecf533dc67220c7091365d141f5db1f616d955053fa567b1d45830f1804bb48b87fe869040b8e125cc6ef58902e67f54a91d9cfdeae5df9f04d2a1fd425798c32b2dac0ff8f4052f4b1d69ad1d07c588f86809c567ef3926ac28c13ab09f0a9640484a61751ea016740b60855808ac1b6d8544649f0b9ece32203ab0b36b308a2e180b8fa17ed960b1ff831b9c305b946f3af4e27981361eff83b167310232295d65949f635cd99769c37a76cfc9fa7b6551c148dc98289e7b18d16813ad39fb35f7909ca2ffc842031dec9edb19b359b990559db2999dd60ea93fba42b46d871f95a58b48b0cdeae9d6819ca669acb5d2c055e9e2ccbc4f21fca665a55ff55581097b763cb7101682b6e2771a000d1718a96c345479ae901adbac7223f5f9edc419bb64665cba4e3684b7371e28ff07f3124087f0e89a21630cf9e8a6c0a3d8518e0d5eaee7f31b6d0aa7e59927aa0ecbc479e99e61a98b625736cf1506199d8f2f186bfc9fe2038f0e5b87754635b30888c063462b035581860b2f571083c4e5c6859338cdb09004597b2899cdc87f1224bdfcd08fcf07275f1f1156260ad5bd19fbde4ab9844a35b3aecded048df9526017bc24d5362abbac1b7cf990d6597ef223551aab87b888e39c805932a9a92e0676ab2a455f45a733a67928950ed88f17a5ff91ebe16266b3ee48c5a147170fdc84d2cb2672e052bd690fcb7edad85a5028e595c0b9d038e94c2e19978dcc5eace638edc2998324110c46cb9363e34667540d0f74378b644e5d383d5da34f813c47e5795ffab785f936260e1cd180bb22d381e84d851a54aaca70193bb228e2544de25846bd03dd3b8fb87d614c38214b4a490694c8056ec53ade9678e2e0e7bea03670bf0bf094a0c00300aafb91e1a8646b53902bd51c6656899a5e5afefa41e9e9ab110c0512f0710f803e06156102c7f1b68bd311c557c6790e33430a82a4d004f086e7cac0f349e5e366964c0a201be216cbeb41d05e31b6db40c48ce7b0fc8e2664c5c70470f18c136ad3bd44cc09475d9999eda7444049e7cd060d902d168f37f4cd854731110cf692e4f078cc3827723d059eb1d09a391c223115e7e3c5100a7e288bf2fc506e7625f16d0ce9528a3dff59db56cce78e61866c2a5399b217874afd616b9a56b97a6d24bd6aebfc79a627ba2dfefed1509d43dfd63c1985af969f75901cd3ccf5e9b0a367f89ae0fa95fc521b1130fe88ba9fb3a00a29e5dd1fc7b89f6b6e5a2bad3796f320bea618f2c7492df728163e9fe3101026927aab0a08ed16c235a762ad4a26e9491ef6d8a5d0c7eb19afc27834561daff61bed203fab3c7e88ee5ca2d1317ad2da837644965ff3dedd8caa4061420304e38ee644a7f7ce5d256220f30133bc363db5d163aebcf58dac89759d0eede99856b20c202836cb3e01599c5e2599119bd97cad3dd32ff680ef6ccb9823a0f8f1b54e08bbabae5ba6849b78ea25aca38b16a0b3dbeeff1e400cfe563788a35899692b811e19a9a41f16ef5ba0e9b19a8d5ce88a44e87594546d07bb84263e3018db11204f586dd1301f1eed865af31e2a131dda80a7d98144784fa587e3b9a8f472c78d585242086207f1d7a75eb955e8a3074d9815730c99979dba47a85beab795176f40ed72713b362dc108de4a6a52756e8993198a5eda31baa2cc5e6e1be8aec76f1013443645149d52b3c3ef83edef1a36799a679e8fad6f061eeb38661024a034cfabff7c080a0833aff3f0c9437ad3fd538253f54175828e463902f1b65f6a67859dec6e0b7e350c04589563db7f608628b8948b77f0bbe14b2e13e462c7edaf3bd15331d6d9ed84bbd926793d648a7800247287b986e4a835b4b5689dc4f0b5f82e7cf0f184f843da5dea35f293197be3ae37118f9fc38a0cb22ea5edbe3d20c49eaed1e5e51ef26cce2abd8172d539da3e295382a32230d90fc7c2dd1d9a99a70932fc3866273976132e39726b8557ecbc927219fac741a4b5c8e7f249d0c8aa55519a756edabf02143ed24ee4f3802210b899dd0d7a66738b793eb6aaa754d46b50d32164002d17b9a2af9b47e55a8222e4ee54420547507921ecb0a8e6e62e337acec6b2612abeeaa1fae4fb248d17da5d9908022f8b42670a1c68ac5725be9516b4ebbfc55ffe8f84d8ae6878c2e6216dc381b6bfdb523d7af4671cc0ba8e7a6bac19f3f473df90947383f6a8a1f9dd5a9445c47ede86e3ba9c3462ea4ca6c8c2dfd7b6b50f69d516f3ea0d7ed157f86d33de96343de842123d57e49d840c696375ad70d2dba54655806c15c0fb0858eec9d492a89f8040c9ff590ca00aca4396952389117e9acc9840907637c615e7257dad22a4ad54c62909c141bd85e840a367c2693ba1504d265ede98abdb858b5978f3adee0f6fbd788417eaba9d6c47d114117918ebd0b24800dee4e4e1602ed4e12d9b4f6cd60bff97e47160fb603f6ac4991f6f0521e4464f19c0a981aeb7dce1e4538f6c939a066bae3d7747cb12b49ee0c409964bca68721695c363780ebaa09f3f76b8ac50d52700b6c728b6a7f8cb70d1af47574bf6915dccfb2ec61bb645e6c6ccf82c17b3f45f44174728e67d73d1ac27c04c5137d677cb178a9ec617f9415058d318d6eafa554f314c29b78dbc89bf39a832c37467ebfcdf210af727e33945e3f27a75c060693fdbdec1026ed12271afa81288f56c41c61d9811962c2c550e35fd59db7e4f247cdea5f9af69d824295067f38a020e0290979abb8b6ffb1e11169bbef26bee0c6e024bd8a6c6fa1551e38eddb0e374b5c416cd11be38791bb74e74b0a1d166ab7e0e7567d0cd5e7f5031c4d8e2dfc8e2c962d91a17cfcdd468a43137d0f6de8912cccdad13c62de98e02b2ed083f2f11074367df7f7b21d18de27a5b67237f2c9402fbb258f88edc731dff230b4cd3cbe6811f66dc859a9b8ccef6254fa0711e6a79a77e88acaadf674c5483d14bdc97cee3a8b9183562b9cf314e9c6eb5dbe7fef9781a892aa87ad2555913438772fe2733abe019d3a1b3bcd22ac9adaae50db64a168d45bab1351c01b5dd4947bb875937cfe1c9a77e12bd7b30b2f4c6b91afc332adfa2a4ed99ad1811e9ccd2e2baccb8bdc60ef9225c39f20b612c537c96377d5c188a2f832ded62143db2710d1fe87d1c97d210b51c980061de3b975907cef05341e4a49c7945a767e3e56c653f1650955afc355ed7416ddb2f0bdb76f72b54b862984b5f061baeb1e34b0b11a1bcf7d01974b045179e01205e8366fbedb57132818d6cf55bd8409b43ce9639cd443b74db22c993631684d9738a821172d40f6aa8ad4f8501e525cd0d5554074c14e429a9eec8704411bdad740a75e00df0f507dedf3c387ea825ee49c78ea1a596ba998ac0f40341f775456bea888f4671ecb22c0b7a365c8b07a6fd0e8c2f6030856a86809675e23174485f120346a5c0bc13981952a622f5959f331196da064c0c44a516f6edaf25825f59692e2fb3432dd12df20cb0594e957ef2b8f4c91e5118d0f06a5c94313c673260d9506ff7630695f07cf07e88fdd0ee43ebed2630a771b56e641092efdeea687c4ab331f9881106eba04535376c0e952c92ca16c4b6df9c27ed590e7174d5a9b5a29d9b421b14cd25475500ef02171bb895d4c363e52a2d24eb81304064ee9f14ca57d55982d891a65766053627b229ecdc5055949e190f6c48ce22e318fef0a0aa2908c62725fb77bac16c9743a967d25089f4e04975eb07ea8909e2f6cc44622a5a5c1270c3b39f56ae5e97bec27c71d7c6c6ce4c0668febbf910c6682244603334f8c4c7796026157403c001c611d15a4ef6e610942f58a1685c16d5c697a4abfd05649310aa15dd5d8299727ccdfbc26aaab0fde7e71d861c185aa581e6367cfeaa7b3c513b7398af03aa7aae59f6f5620bb57cc63956515e6a1b3f1bd91c8c7f10902a01b8482db3b07c82225ccadd7e407cf3fbcd0aea767adf0d5c1760c5c85e2bc4ebcc9c84b1af96f0a17f806106718dcb4c4a4139ac7131760c490a0d20bdd474d61d7885f128802df36a1f6841c8716d82590325487796e2f216204ed15514a28953e318ba44c3a2e0c4afdc786aaf3f65a1599891b398b9d727ac6f214d72b4cd17e625562ae6b6303539a4f382cfabbccb4a7ad04ebe648323b55859ce77136a1188940b0471d0aa67c3a8fa365a18517edfb14e709049beb344f1c0ffa92728e8d14d22f7ed5a18ff58d0d5aed7eeea631f26503f97d1507f6022a0099358cf44c938e22de1bb40a8fd04cb13ce94502112c121e65a64002e11d33f13ba0f26cf793e95ced55bea08bc2c258dc7744b61c06b088b626b97695fece746a8b2f62ee845810151a2e0c79c302c434bf5a2cb320a4c57354cded75355decae4ab070c1e36f0efdef8e98ea6f8255ee17f1f066f8736715d719a21f4f66cc6f660210f24fa28c003c5cc05e06c5b05127a88bb7fcb0e01624096ee4bb7db62673b0cdf0177729b497152d354751561654ea6916bbd1c31ca2399e75e8171c8bda28f25bd9715a8376443a00af99a9a626441313a44a7271f816ab4373a781d83ff748961415b115506671608e133d791222142f44af90be8c2d2fcdecc368c3eb981b2f45d8afb2bc085db581628407bf10d6da2b65806ae4d9967591df43a78387f497ed2eb9042f86797027fc1ffa73ace5a4a700d40f88c879fb217f952b8e435f5088ac6f82117d3f30c0346399d632cb0f75f5fe04ee66349f1a18ffa87256d5f986c635b50869296808cfe19e6d6ef18ae6d980e38c3f7101ca2fc5a6c63ed2f396009e058ac6c2a650132c409f9df397981fff43f8b09993d04899cef067e0cf04e01afc0f02854c4492a658e36c4bc5f83dbb7eaa7628f5bae7ee59876e89ec71e94f110bc90bea44e2e22fef46548695c7582c27dca987f882360f01bf38ec5b807ced1776a100df78623e09a8b869df2157b4e76095cb07abf327e5e6784f205a56d8a887ff1082c7991bc92fe1d052e02ca16fae685f66c9c86caa50b2757ebb5f7c359970a9bd550941b4386b6a9f88698a2722ab8594600825d59a820fb537e9304517a03d1db54538315ebf98f39e70d7b449d9fe2f0344ebee30616e726496ad6d8ef83af24caf77f70f48dc1d76e5028da07e29852801375a9edb2214a5ea4c056bf323f99fda794bc6b1b47bc638a319b302984552bf90b15259cb3a905684b33b2ba8822348c4c61164a27ce0ee21feee01bacdf7f27078e757ba42a86defdd890c092a8b6ce2ec7bdc36bf7b681783dde601ad9c2c6f17ba7f8fdb4282f61ab21ef6611cc94c2572a2e1b1ea58ec7eff3a1d62c3d +MD = 825362c8fbb680c9485933a84e343eeb488634cbc9e55b020c93b369 + +Len = 43280 +Msg = 6c49f1ac16f820b4845c2a307a7a13ea2d00e29cfa29f5fb58e197f40c2ad5369cbe8df005f5c7dcb0ea487ca3d965a4f5cc163884774b37ea6083f8ac439ab4b5b4e2450306762da16ccbdad55e88299a3e9828503c7d20b377e7d30a648502a0741b3278f1d5b03d29dbd378cf2581069e91f4c83f32be9c6deb0b8c573d2746465e40cc7f8b6c6d6b9eeef4f5e3b51f342825534a131a8d8cb92a9ce36b2b8e71d3f5687841691a783fb3b1986bcbcf4786425823c83b6f1a76b8a1cfb7175f3fa4dcb2a49eb02a9ae4aa188064cefc21d2d34193f82a28604d3b03e4c8f2a3f6f67a13cb4b488716b65c8f7477c39008356175624beda2a6643d29ea47c441dff459f4b4ef391737dc507f3e4cb47245d7735c586b8ec334e3457da9db952142c300bb28338cc4447e0e51a48aa88a20df915e3dfd147551f3dc66e82d6e2b678ef7d2efbf487484c61f6b6fdaa8c0e07543e3d8ac889f46bc884c71e55647957bc79fd13a751140da0a3767e3bbfccfc31253f21df1295c65d4970aaa565d16b2f78c964c1c82c1e2571b534ee92633ee851653fb57fad81645b07c247555305c0fff059e44af4c078f81fcc23a2655212594c3ecc3fc05f965fd8efcbb172ca19762e7d8f5802c7039d02be8b7e47d8278360a983b162a33bbe70ada308b52a8181c04a237dda747dd70a6686749f3390862efa9ca308eefcfd7b665dd9ae99a1a9524a213ae07b103c935e9533bfe6f5d813cc475337a532a335c46c92a3b9e23350f8390db92d83443a21381a3e74cfdfcb793460536875364c225fc248eddbd648cebb74c91e4f746b48ffb6af7f7723929be448f0ab4d2d3b1a87f712b7f6f8a65838fea4bfdd53a3205c976739944a259ed77b93e0230e7f07a59f75aabc10f60f2209b0a495587e51cf1b1a659f99e11c7e86c1998f407494192a062893c5b46e0724814f3ff95957d7d02d7601b9417f49e8ee49fa69d82a633538d4267d6def78edab3215bcc09d074504dd532ee341da108e83ecf10645043f821fecbe9f2dc7b372cfcf2950bbcdf8551e1c41330eafac36a9ef6c8b7e8ca7667e4eefa483a4149caab4b5661e9c5882bac5b6bd302b0a6b5e6a32d4315d1b7a71d5a73aab7e9f6d456ee78d4002e41235d7e5ee50ecb98103f5ea7cf805ea229d097badefb7928912764642ca92398811db6542db55483c2d1b09e25d07c1f34262b39acaffcc64a443481318baa758c1389b574a0524e14c3207a0bae30161147a056de7b77b848d5e636ab4fcec08d6881e98276cde14e3e37a34ac2846f095a7e7b3a06f4e6d00303ed619c9461cc4326581fe0ce24b8697b81aab37f1262884b0f8af97a382df5120d1c1b064091cdff6b13865bff996d767cf22a29e864f8917a94fb1296a5d59bfea4742b46242d9488250f7f5a3b71b0fdecce8bd759d3d72321b5c3e882c82627c14e0b59cc8c6d191f243f1de49eb06a5e48acc88740a674f8cf95160af83cf23b51af62d3121384c76ca530dd1cfe2d113f95a4376885d4e3f09008868d64c6d9261e4a7fe60d33e690b87b6e1222accd5c4c51b272fcaba8c0bda63daf270b647560f71931e38c433780e6dea8a4515947dbb93d87936210e923d979840c2aa5e57e53e81a1ef9a80a065a77080d837fa749c223cfd35fe310ca8780379b89611f7f4536ca45e0dbb051bd7f57e5a905249f56aa71430be9e0bb999cee5c9163cb6bb44969e0aba5d269f93fc0b22db467e45c1c966ccee9fefdf812d1d8aa72904b8a6b1e77c1ce1857f4ff69fe76541820bcbf65d411ad15988a2d0a963d551626aee111938a1e292298077a50ecaddf5c5edc07053afbcb953934be1eb0d5060408f66bbb6e5daed2cb9e1c31f786629f2abaa387b39cc8fbec6e18f96dba08ed80f15478d5524e70770d7628ffa94cf108a362e0e258b5d28b243daedaccc3eafe19f35127c6b203839db2bd6cdc435ae0dd6c9a31f63a23fd9f58c561d2e0026ab871cecc818293d793f578a6e8efe39ab1e83c0740fef52c248fc76996063eac14f5772d4b65295b3a6ae21595fa931e67fe4fcbfcaa50fffe0a3b59dedea4ac75a8d5b0ec03cbf7d9368222aa09735447d85ae7f3e53c5e73f2a99b73103f5325b26fbe2b058493b784e033f1c78924999be5c2ed58c231cd6f99961d4314876b3acdc0d11359171d7a85b230d9df77a47279c4b2abe96052a894b2a31f2d318e68781ca6d4546b5340f80530ea7d33b1839d550985bad44bc62157cf4e913ad765f73c72f17c77a1ffc196b9a0694208f6d9ddbb8e3b73fff0c9ed677548888e59d286fd11d9244fdf69cb93a3ad8af1f4b5c4916f7626b84f13dc343f5b05fb6c92640fdd7458a407770e859c51f5b4a5ba7250d073d6bc0b878dfe51d19765c4be3d6ffd54fce9a073c658335b6a98306f50c3583969554bad668d56b228168cde78e61881f967d1e65ad40fd5d0e6bd5cc4b1b0d0c9c8370ed0a8f4069f54ea7b7f3cd6043563c35734c1d9c611e7760a37e18040dc60f9313419d3d6e468061cb939e1e49a289d4ebbe7383714e08100121c6f918c64b69ef8a69c29df9a09498ea4de290ffd8853570ed52fc11c06c6bb2a25ccbf1b99de8618f70878311b8a664778dc7b29acef70fd57b600e22ee59cd34bf95fcec77844368b7a97776368a9e85504c8f530a96e7d67d4b97920e41bdf891e53c66bf49cca018724b20a6abf501da9dda93d0aba56ad92d42a054ba21586458348abdbf59a0037072b3719114779d3a28dfa99ba50d0f7393d05a3983eeb75d79fafb4b6703193282a13fb0595118bffe890ded732790cd1fa477365225fb73712a00749123ca26ff6c69a04018cd8dc04266179c64fd882a8f44370898b128be8a65d1548c86dc5d9777e775492c32127e5ab09d2fb633591339c233b168ebb6ae83c82dc7dfa10194f2dc456cd53b69af543ed1f24b5d3fb2d04e5ffa933afe08f2ff89405533aff753155cfe29083a57db18f7573d7422f0a051f9fec0a5092c2bbdf3a058029d3111290877c82718fa57e569c90d06c75f12737e1861a84c7aa6a9f942887c7dd4d56df46413266a29731a95b22a837140af1968e206b34c86fc3a06b1372fa644f87a9d3d9a74b247852f27bd1678d567eeba46e610649de384e4b867149acb23f2c55f7ede9095e736998c547165581759dc948f2f2a94f2d9406afe812c40d46ce4d7a25018698adff03fe29bd77de16906ee57a373e63781c3aac20d72abe8cf4f82428f6ac1a519b9af12262dab58a4bf90ea2deee643e6e5046c39fc60d3826bebc9fd0622b85c6c765d80f684ef956d48912eea398aa13ae457673804172ed070c31988f147107f221f3cb08f08a3a651e716f4449e192be71e35a40a464cf3bda87551d1e3fe681ee1c9fa2e5657e1697686ab9bd0e73e792b25cee7c3356c2ef480ff38e14ebdd94fb911f73b3aa4ebb9ee5ea3c573f906f8b8172120a0a05131dcef9af1b9f6edb37ac65e39c477451bcebbf10e47d23d114d2b4ae0f726a0dae9b17c879899c8b78f55d7d47dcf22269812080deb50780f8569c986a165aa7a27d35205932d06b6876ef88ddf12ff64eb1f5d36d70a444dd151317447e3ea7a27d3b00e1207044ad36044e850e939412822652b83462e56c18ff74c5337cd655a211b039dde6deef3d821568bc86c65efd9b45e88ca92a4c664af814bc7efc64f4a0788af19801d7945326ad827052da283cf424fde1dc2507dae85aa1aae1767bcea0fce2f0750c425dc97de9b9012d0df2a6951172c3a104998fbe6b6a4c3440846fb63a5401374f8a450078c99b00b4a3a4634fc4a766646d3469a12507454aab2ee1802e6f00c4c0e45db709e8fa233837b53f3f501c2f401e82cb42d853a12926a43de5850ea8e9ecbd2edfb0c4649aa5b36a4c866c6ef99632712b88034ee89c28f8e10c0a03eca64766b4ba057faf3687575110fe2880e4a11c47dfff58cedb94398acb9bddb15a24e6f1cf667a6134568eb8b77965bd50f653fea4efc7c52a1189488c6a3f20507b36fcb78f5f97e54b98e743852d98225a9fb8a17aa4b4d0c76e83151f3021cf75df3f3a273639938bfc487ccb89f9a1f487dd9c49f68216dd72a32f61b99c203a68201fd7052e8441424129f380c816ed93d55e04c519447c1d10a2d8e1798cf159093046d6600093f33c14a51bedc96c4b09af521960a2cbf632362db0a059c33b61331cb0b651a996a003886150029a38df56dbfb3f77f38572b3082ef9cfd79490f1039c18beacb3d5bf445ad9099ee1c01d48729e0d1b5236e010646d3856effe32a1a06e8ec4d34310820e7125a1ce15ca418765aa6ce6e786ee59e2da67d113be9ec7a00a187d52bdea86fea0cb8844266d417c970ec8ee6d4a1541ff33c4375ca316977ad1396a9023c969c04396b7f975a8cc1c2880b15dcaa173ede14fd2d658973926168ff34fd6df9bce3280d40b00c43b80e2979a1e19045fec9afb4cf264516f55100855c3aad17b11bfcf0523b79eb20d65941077dd46ec46864e0d79704c2250e72bf8b448a6f0d3130ab10b423d1a09d9ff7a32bf700441ccd27d3223913860c28044ea5766e45a55b93f8948a959bd6661421566898e27950f04e726279bcbc990a22c80193ef0ae65196671eb59713240cfe97b99713e088c0b5e201631d926e278436bc8e6db4695a669670a006d68278975a5a997cf4ed1f860ba67e4d4feff2ff8bf7bc36344d14e5ccf0e38f82e9bd8838dbfe7218e6635b59c219a027c6d30112438bfd2d1a179055400e85bac2624d9dae6497ef1d428256d4c3dadc5b6e2564409c16e148e8f2e9ce7f8df0c4fd5403523a52c9fa23b78d5f1b41b0461ac91c4f5b281361ff89d4fcb4fc9739e53804680e374bf58d5757e16e7945ff7f8884f0478515edd1d1b16b4d7640b9c0761b404ec9e797e5de60dc6be62feff2d048b3ffc27b54e646f99ab77f7fcd057ab28b7a6f2f79d3d912d0621cc0a01b2cd20ad264a63fc36637fb717c96ec3ac2549a2fab85e3cdc3e84e0f819ab86f1abb757df048f6ffcbd70e19f2388fb6f99c0ccd037d9e4a2b7ba5b2b9208155166f8430d9b612d1c461630f84d720206cd343e11b88d1cf7c3787fa27f4a363ac58a7b995802c000c616ac088f5560db894efea383a56c4329665546289871149216076c839ab00e051b5db831599b5497b61670e0475ceeb22be4fdd41b4f489343ed6d645083b0cacb4cf17aa53ddbbe138d5f179c7560266f35b0ccfb573c91ba3783424dc34ddece8099b462ced7c50d6c576fcb3e024ddc4e48595f12595322ed9867b9f74c0acd019925b7d4b0754dba4231fc403aee1839abc16f0607a324159319bba8171470d8da15cdd9cd967b7f07a6590171d3cbfec34c55bdaf4768b95ba17b5d15c45e0c43cecb6498f03fc48e13070b10c29ea3764436bfb70895e0da47229eaee440a5bb97dafe784a3f90bfc331e67d843832aeef3d9289ae5393f752d8f44a3abdac2cb7222dd56d26eb82fdfd1822e143b252978fc08b014cd99a0cc4e551907e287d77ca7c18229addbf08932b66a0642c4a8257d127c925baabbb0ffb2bac2a21961ffb70a72f436f5e2d1ca7b08b45a77ef8bb4bc4cd893e13a8e0be41566a9f5ff7dc93eb5ccba847b4c0126a688e2bd643e3b8c9d61e6eb81b60b5f958e6abc046966c4c73d79162e5a6f6fb00e7c13aaaf89fa0ac8c51835bb768bc79454ca1565083333a12309807f7dacb1bf66f92742289b0177cef5cb20c5ff380308bea6d3361067b218fcf64da474281663fc6ea88fd61df96512c66872304364e6e83d4678d2efcafb6f04278c4c8f9dd39be5453831bcb817ed9c0523b5963480054d3138f148662abe4eaf9d9c54c036462faaaa346a4e67e4d08922f58cfc54645b15ff01fe0e27891a4840ea14282c89b23b6e64a326c5a6e8672886b416e4a3fb87437b6d4d825e1b841ecc4a3ff6d4f189fd3903dbc19268218cdf982eb13282e7aec4328ecb8bb6d59fa9637255c67228cf37e8d7dc35c43ac866a5be3a9ea5c98982da5c53b060cf4c080c6999ccc87a5cc7de95861f812573b2591fe156b8af7c2dc130cb5acdd39c7e8170635648f14e8f61bf5fae137407594efe55e9500bff2b83a682f9428519637f312301984fecf4fe9fb9601fa91bb1e3c408c4e0517b029e182b0a63564b6d6226594d2ac8e07f21c133d3fa26f962b3fb6a880e2278597d20140ca4b99ad2b6ca8697751e91a457ce4f88379048d23c1f0b812e018f86ad38ee7e8b41805a09983b7efb93a90b2d017ceb5c578286f8a96c7ec4512920aadd1aee8b60a459c709d87242ca7ef9fe253c8becff3ef75624fdaf6593cd9df28719cb29a97f687ba9fe0fdf458c1767841ed84df9c6b9e11c3fb1866bf57520b17ba2fa8e69fc83f30cb6258768d9e5b8845f03d9b23525e9b313ab2c394c9206a0f452720c8c9c7f94f3b9f29dc7f53d1d8ea30199ffa137f8544866f17ad2d13a3dd616cfaf11aa274701298358127c4af5b013e68fcf616fd1e2aeb6867fbb97ee09cf3bba8ffd242eaf9ec200ca108d129f93105c2d009a4b0e6600f5d5205a93421dc96564031c28f9c4c25888746463e5e1bfeb268ff7fe302f694f9f99f2bc338501063a368fb4842e1cd5da22517807823dc3688a1989dc5d480a2ba2e0c732877b338f11ff5fe34d39ff3ba4e4bd9917226b5f697f6c779235bbf5b5a542e3b78063bf1fdb997bb4924b39768ea30ef2f64977b88a14a640aabbaa5cd0cdbb77c91d56dab4efd1d6be203001cfd6cdb831f43df1da20cceb2fafa602c3c62e5aadd6e2bd1bc16a262634cbe128a779d96dd23eafd00f70142cfe75422eaab0d2b716ff5160ccc94562ff79af19c387d8f299e64d0c3f244e3b3e94855209d7726d53e91224505396ecc6a59623897c396881c1440f4e4debd2d68066de5226ac49245c79e6fabdbd3c40fc60c687cb6d58405c3f399b718f7c5cc54134221302d2feb613293a5c0ad9f4da89833cf9f71a4c23991bd523aba037dfbef3d830f8834972585b8db3023e38bc6ada278c69570b93ec3659d8c2d70e4c3a8e12e50fd2ab3dd40e635755d1a33e9f4bb60736771539a319b805579936773e6330b3ab698a64f0a259bd684cbacd914886dee0f2ef8148266e3dfc5f46fd5533d0217d806d8448c7ef59ac07f5e5eb611887eb63011765ecfae703a1c65af9506fc2d8efcb1836ef82b0a38bdb140825d9a6d84fd04866fdcc9510092afca5496dfc6fe0399d6579c256e150d0d461f748901a01f3b0d5a971cca3edeb7ee39f6952850a2f803ef71cc0e7ef7da3a365e3f83331e1cd2ca0890221c89e3e2eb2d049bad6236d3df7f06319c0480e26e23a23a6480119f65360ba3c31a9d70134316693dcabb0ecfcebc2097bb670670cc9c705ccf813ad32976935b194c5e5941b1d82762ef7c6667d72496a5f770e461146b4292d46cbde9ba3b0b0f5775642ebf3294b23be44d513d83c14899e770e8f1753f5271fdcb7fbde3fc83287ddd1227bdab4305102c94d885412eb332bf6b1dd47b96c2b5a4f269d356fd263e6bf5d1c2 +MD = fe345afe05c43be99842c395b02e515e02c96cdda43210344f70ca6b + +Len = 44072 +Msg = 3bf13f77155a5d4a56b055b84862e45bb07413e801db0ab2d02b296f886f553f5f5890ea889bcd69aa9402a9922f7e8b25087d2f98d1fa72e3f5c4b5727ad4e11e2cdea75df8260db5969526776b0c20a9adf88544c827baa000dacc2c581b6b62b35037fa3a113b5efd37b75fdd352326a9ac706d873991ef96923a1cd1d1e812370f21c92935fd8d130fe5b24ea29b8345c07a7bd7d900b8fd1489acad9e5d16fe42ed308c3b5a2a1e4637d886fb90a8c95c2bd680af0de37e894043b32cd456501224992cca5b1e670336394de70b7d7daa0ae64a62c3586119e848ac2054b977a74d6bd28b064f366f683d6b0e12e9a8cf9f14fd9b27ffeeeb08256125e629ba28f00e442565a6d3b2574da719b0d794f672c6600143c06d28284197e1918e60be96ea4b41800b85f38bcfcab0ea2c87450c653c3d1e8425f7d10419fc5dceb290c667ae875d67955a8b2d9c7acad1cae4f45a59f6c0315f8189d6ae1f52d2f8c708ed379e06a04b10dfcde52057aea5fcb20c7fd532b163eddb1f1df279827a8ae4e4ac2f83a0ef3d0f196d4999ab5fb5cfe276817bea79644c472f1cd9c67f02e3b4d6e1da4dc908a377fc9e99b14236d24605a3a3c6e90e66b6ac467a8751568cc57d5d1591219a245159c75ea694a8439ff6e3b32cfa12b0d55c1765ab36af677f694b3c533e1b1a0e4d6bf0749e32ab540fe8b203f599b20a0638a11c7735fd4b6151557b69b20b16a0325801a8fd90cf195ba83522caf5be745036c05b0fd58f2e1a6af0ea8781d11ac69d37fa317d77dbe39da9c9ce005a6c082d812c6678b4984c829c09c303a782ccc7fcdbf5f7b41f299a4732cc5b44b7088d4630616c236790a6660e8e1a00a2efdf3a957188eeabd5a6f7a5ed8fe61df75ef6b1293b43638ddd36400f4c4440d5ecd86eceb78d488ecaa1695923a7657da97bf5e56c7b54ec2ff4e86f24db2526f6beaf340cf9befc0d2dc7379fee594375bc45be88350154a4884ed5272d198b06d49fca109bd5c8778307af8c25bff1caa1e8dc16d8336e45dbba6adfa2e4ab220288b94ad9559a108c71eb71b3602fb01228669eccb2e219d37456d3a34d305530b028431c0519e12e4c10d60004a330f74b85a97846572859c3c08b961dbfa446604081cdaeeef152e249437472f851389a60be46b7757b56f1d090e51c03192ce0298e5218c148e179bc417774d41cbe5d20659dcce519b044b069f612a1bbca780af2150b39efc15a915771d0e0976fdcec26e54e4f0a5105859e33c7449208700b337c4ffeeddccdf10eca4fc3cc345eed8a87065a571f7b7ab8030392a7cf0f56dbf1abb94a181904edeab925c3f62d4a18e9b9af0704f0b43ecd8d3301059f1072dbe9120f5f88f17c39d6b0839b8f2c597432f622e7aa5eb8fb2ed0a89466647ea2cfb0439860e143206e0a140ccdbbd39038d6b1aff29eaef4ae11a562ad7889ad263ceeabeafbcb0548db7e322e1e10a692f7bb46109ca920d59dff59bb741a66b55d187f6e689b512dccc9f4fc7e981c090248934c8231e76a1dbe60da81ba3446bccafe344f3b6de584fe397d02f15c659f617eee75ccb13738eb5e50c7ef7f9f000c0f83d934bf38ac25ebfbd3a5cc6e750cef3d9f04e602978d3d666d44b089d2e49aa52d0db1eeec44f1bc183cd6eb2d53ce822860ee94e1ace4649b3e2dccda5c88e0754eaaceeb653309fa3ce1a66e3e0306386831b5bf503b927b675f30bf7bbf7dd68012a1528f9929a12f5465e1d4770ef5a5182cd9822a373246ae7d2a4928c37a2a502fc8cb0b66349c99f12e1d10e58a9e09c3d649999deb63837ac2cfabfc89d4ce40f6207106dc0c1712fc21b7d21ddb6d405fae700acc4744f03014316e2a06f39c8496b352c006368ff3e9551cd7e5ad6c1bb897c7fd795ba81b20a0638649270a1935b99209125e32bc7cd00cdf432f0fb36ff61ca7812e672cfce221c524d2545d066b0edeb8f7c1ffe212ea5e7d5df1cedb7650f2e827f80bafddf00e205c40fa10b20d68816905632401fe7b1c9ed91505fdad0535ac225f417b1a89c32e97955b74d9cef41dc69149878f5fa759912ff4747909f027acd0bba2e66098ae20d9f09bb8399a79cc31598be631a6f8dfc6b0c4fd25a2ff5f08243c9bb82445a56bd60df3d1f9e6deea5df44c1aa2e28c7f42d38182d29c03ac843082bcf15becf615b4d1bd9bcdc6645bac0742227f6004b18b4d4708666067e466e3918659bf20b6769c2608944a485e9a5fd0ae3722fd05d3a89dccc53dde4bc606626ba5e491c03d9a33c6a5333e6ba69eecce729c114792dcaca72163bcc138325529a923f23bf0150d5f6648ed8cb80ac00b9894e97eb22f9b20e29ba74ea4b09247cc46eb307753db5b4153fec8b8ed71ec11d32db21aea93c070ab47fbf2c9424d751323a6ba9dc6409d1a18288e8d2afa452184ebb254bb0d335b46cf0ac28dc30e5443a5a03af698e167e4b2233311bb9d45963262b73c91947549d3d4e69a32fecff235137492ea77000a705d264eb97f090c8e12593dd4f9bffb0d397c9222ad4dd95ffb91c3bfc6ad316a25b00a7c54338e08aa84e75dcb0301871fcb9c198395a02a3edab09e363801a764176d8a858cc3a7127e62b473070649701ce1a1e871ee9fc597820f2f67242f00a49e6d78dc5473338fd5615794b05912b7894144a76bc47810609a19043f0ae39fc6ad97ebe874f30168ece171a7c1efe4bb82ff00c0a33f8c73c85cd5fd41f3500cd0498028b33b1a45de78689489edeb9fea814495440355e22060a303da1afe9960f565bc37f42491bf833f1fb7f6135e03323b91adaab1d62b8e35fce03ef394e505604b08046577156cbfef55f1a620557bac5de81ee9776f4c558e58497526e5e03a7d2f55261d6a9ab0ad6ac5ea0c66c261a1fd4544ec7603c9614c22cd77eaeebbfcb3cdaeab4575da00ff5c284bc1702004f2090c5ec81c5a1ec3b143ae7b97aa6d9c56474a2f6504911b9da704ebeeb22ed15187f4ebfdd06dc6de1ef42143d07bf3d73722afd2f808c670b1606da3dfc8a204ffd76910f3f55c91a870625af6ccbf37c75a4d247c0c08bd8c87d0f66e7a6b0cba2ecabc8b5f8db2274bc944e20808603f1a91c35945ea6c81a09c5129eb3650012294685f526129e4acdb695dd8d639e78c0418575c7366d8d4571bd6c40ab81bdb517e3877e1de27bc22322ee432aa06d52d893df9ac91d94a8bbb3eacf02c52808865de7614ba38a225051fd3239be620947fd5c39bd6cc2bbf9b294cee94ec3ac28519f603a35e876c4bf64db2f4cd93c263e5634a1ef89e7c225f4c0fd832308646b19fb482e293806d7cfce69d04563e9b3680c14fa6cc49b8a75358e16c8b5c106d1b31400cede8d17985c77fd392909190c307521edcaec5ca09d395e272cc4b160f82c324be2ce1b5935d80816f41abbad42310a8f733b1911787dddb0e5f5f7426adf5722dd504f7ccb1895814d8537e5a20708c4561e5c1257ca2a1869cb44f06bcbd3e636aa108d8ca839eaaddf0a2fe035911edbfc725dabbca7a030cb26f57b602cf887322b160b0549c58d9e9ef67d6b58018d6c084df4b3eafad35c29cc2a4ae6ec378eeb80c6ce69a4753a82d3da16b21ed2c39a5db34e787aba14a9dee8da8633c026de583051fe09ed394242a6a633c954b9851777fac4c26d8b43b8579d8f61c9807026e83e9b586e1159bd43b851937bb46505b3374444560663e2c71266f8bc324d574ef2b632706935ce31bb900fc02ac6a2e5829b931c3ca6e8d7b7a15b00a2c283e50cd30a8c9762d0013e7380caa316799f7b2f11189469250a2bc31b4f587c173aeb66532b327d7d329f70a8e3b3c0e4316f7350e3844741debd40bbe0c9d68bc11d049ec4b0c220367d1beaa3b3728d5c0e0cc505a2bda9a60aaebf7d8d7e7c1820226ff198ed539d55d9c8a34897df6fa5500fe76638d7208271987e09b052908344292a515ba1c7a84eb53ad9ad54fce3e17411554554beb31dc95ac52899dac4ee7ce780a97555e2cf5302fd2f88743835a40be66f9ce12b17e49c5653cc475395bdb19d3358b893e00474199ae47610c1124f90143a2849045ccb23ae6476bdbe6e010da5c6704a355c06b57be3731c184144e8df96f49b47a46fb3b4fcd961dd205e686d390d6413cc43574f1feba8bfa394672e4df6a0764de29cf3effffe76574223e64af0702fc7b28580f450550bdba6818cc98ee704dbdc35d7c85ad22e9524c6cd56ca0cddf0ccb6be0b318fa13c03de77942ddd67b0b514fd206a8b4a4caec77ef6ea7892b9fa6162bf1fd6f45734c48b286402337ef5c0c052af987df018bc77a5e2720295e42bfbaa6bc999afa1da1400c1e3ec9916bfce09aa782e122b0c43ee32579216f26d0537b5b5e5c7e385bec7b7f0f791a06872afeba8cf453e4d603a6ab7c5bfadaafbf18e4a8d12626df7c7b6b7e8fb2b515aafd3b8f5ebcae65904fc0111e28e7c6c6245e5e431b6e94b8b6eb735280010e29403172688796d9ae856d20b420d47b2f48d268f88498e16ad106d60bad71da6f6fa41d5ad9249a25f0b991630b2938c42b47ae398a2c305877c58f03608ee144319c777cdde110bd39ac4c74116f644b76c5174d55b3e84b4e2e867fc2de8c702e226a15b854a33d084e3a2f592d668dd0558d7e0cb5700bfe4ca4cafbeb41ba0f3dde6f9506bc6f04a841db0ceba852e2fdf812d8b832603024cf2b323d69ec7cf6b9d09a7dc119d6c14ac15132916153c73e52e04695128cc0f0e9905a6dcc1c54e481ef431c0426a13e2a51888984ccbb48864de601e8b927f04d3cccb323985f47cabde033f89b51035c3478f881f5e0fef64621deac6061b59f5e1ba5b8971fcaf22cda70bdddd883a021874621753e48e9f47d95242877292720cdaa55c29d564363bb3a1a953ea43d403fdc2cf5dd0fa97e848c19ba70332ca86c29c0c1e0d1038b0af8d86b8c507dba27206a1cc6397c0dbe2c52bd54baf81e808cc23bf0257bcb5014bf06c96ea6b7c77ba39300b0abc9b2dd99da2ba8d1ab8f3a23d9d638f34c14f5970ffde6015ea8569e01935a7dd9e808b4b9fee40077239bab4299f4b335de03282d30a0d6d85117240f88213c66e8136c01d456cca9c317221e413f02af37a63a096b836d4d4a28fd65e6ec2e973b68895ab6e67f69f8164f17d7032ae2a546944ab5790de41ceff1aab5a29d95686dd36eab7c60e14800fbd3612771f5b24bff99176affc54ed6c886fd2dcf87f78c12e2bb00b6363e3deefaea932011e61d439e983c8c19684349a3c7740d96702c0d61ee5aca935f35f035772f7e5dc824280040d8fa08f3a03da61a5f9eea5cb48d914d72e41e3551c92c12e3d502e0c97668172691b976546c3affd6ccaa438e5a1adf304bff47f74086c2976b27b672f47d260e9b5579c79e057dc1ddffab213ca5ad7d495f1d901feb90338af5d3896be874795e0384619baf9c081a101ed5fbdabd3f246640852c05829f7894be74a350094d23ec208a2ae16494cb0623125e601960253b373c3079a3c37d2bff9d645eee743237d4aa1543de4b380843402ee0c9c694078a1ff2f2f887e3e21f6a76ba2ad4d30d2929227c1116a83f04c73301d35bb9f1c2953c168bd4f0e2a545a00bc5574e96a66f1a3506de65d2f110356c4105db226605d48d6390ee531995abf9c8e4eaf9d3e4c415c389b5ea8f81fcc81bae44c1fed9830088a5235d04c1602e3a62f15f38f1eac55200e1af68834fbe673d3af71278111703f9d826ec33844f23bba9ef5efc52ecbb2c3048037ff8f62f9a06ec2b4a4679db7654d95c52e2078cd65bd2cc6fc53304f4ecdee8dbbd177aadf0c7d0b7eacf1803e19cd98641fb7c9b4e2f0ab00b42373f5b98a00167ca515e3fb18a27c4c0c387c597ed3768d6fbf2cc2fa129ecc05bf7c79fb257beb6bb953dd1e0029df5e2ec49f41fcd203e11c31bfa184030557903761aa6478984c03a30505ab03d158019b5d8f7b031dbc7f684b7f75f9eaa984bb132053792db6835615580996cc9a2f6516dfe49635724734f8fc7ed0067c0b7bf0f55919f64bc6e1809db26f2b9526b64dbbbfe7e573022c4a90e521c34f92fead821bc79c6c3cd9d93f2bd968c9760384ab7384986f4ec2b2e57f5bab74c9b78b6ee20e8aa853b371c4dc821eb7abd13e178608d8977b7cb452740a49bc0e3b2d04625b3b80b9e2fcc75ad5c7d016a3ec888dc120bc26ded17089aa1865eefe04fb033a4975ce0cdcaf1d60ceb364f01286f16a0b2dbf4d9cb816b78212da74a5ab5b281f080e7593f49a9fcdc2155a329b374ff26cc36d78a1b1cf21335f4371adb0a136a809d1b520690f3f9c9626ef2de60f6109d192f7c5c13d7047ebcf1b6ada322ae63e85b2caff2b8ea365fa8ac78414f18548728c8ceb9ef9e11e9be57b0e6766331b260f4cc36145670359a7e077fd0e5fb670b97f9760186f561e7256e39d632f3e273d3e6c6cfe580ca8c911582422099a0201064b3d767320eb3476e050bc3b060dcf18409b1406d08c60c29b16c70371caf5c97d637e7d1d66ce638b3debd7014e3752e67820f3fd68f18cc76187edcc200a21a49eaaed9a3582955a914c93be6d0886c4809f9fe1b31dd84380cf2907a5b0b7672b865525cc1394c51788e1abeea51c7140fa7b3c1f282dc6011735b2c07bf32bb68b444e9ed3da512d1b514847af9c6335cc166af1b305954efa946c04de5d68bc442b832255ee953e6e53220c8a7f20eb8ee1dcdf30e857d6e3d581f75a5ea4992b8b51eb0c49f7e80c77b7a1c84d10bebd6e203c445e74356d79a2fc728f75f9bbd4497d8964ffa6702f77abeb8ed93bc22bc39d4fc070f6e1e12d98a968534a7fa6c85e3fd812f633fae09f56ace0ff47ab4576d5c6e477fbbca0608171a307e1735ce1a20be853c26a90d0bc2fae55b85d045d58da3555155ca9c87d140bbe7bba75bc5288d64b95eef6f46e9fb7fb9ec1aeb54b62e9fac95188550ef7e3dab8ecb142c3c7734a4908818ef075943d6569a3234ff988f5823bea7ab975c1e923aa8e19685035dc3637def4d439a9b7a6c5700bb91688b1ca6c4ecdff263c6646446ab4d2ab947df80d5dbaac648ee6cd6593f339426fdc2c7303a36271a9ee9b6ae589754215abf8e98c64cb8eaa3753ba8d5e22f5b4c102d0c7bf65e0a0ce9d8e7d2bd2bc4ff2d36ce977c4009245d444dac118b8ee0cf80609668c1b9792b72f9ff06d6299cef20803682862cd8ec984faa07d04721c66a3273d475b14e782bedc9bc7ed89bcef3b68aa6b3db27e9e0b6b90e250e77bf918cfa82a57af198abca17254a5a629258767d30ef9f791ec38ac06cb26c4a809d7513b9779acc539b98d08b63365b03f6caf66761fe3651ead4a66aa0e802d337f6a6c3139b4571a360de34f0f4ece876b9de953282c64bfc9c5550170b077e07159be6a205c6b96a2928691a1d7f0b7f4b1b0089b392d4a2e8b4663e5bc149b4dcda6b4c5eb6f499fb967109387b32ba8996f08f1800b484c2abf33e6299fee7534b9a38307dead7de1096e4cd4826ce7a37af6c3979b2493122413fa8f5634781d7ba8f028363cddb7e1ed4644eaf6427e784479e6697993e019668b43e427d6e6415785d2f2723f9c8520086f49424968cb648d02d2b1eef303be10edd613022dbf11cc8ebfd8041d77a91baa49fb5d10f8e995638367d4e9878d33e388809a62597a3cb1faf8cb991deae89c6 +MD = 35eee77b8adf8f39931ce0264563f68b51b36614d6f44735e155f023 + +Len = 44864 +Msg = a98e234820f0e682240872a79a386b5be663009e53b77045b5cacdab4de901a4ecad0eb25bce9a7cfb3caa7ba96caef7e4f0be32324b23e3bf0319e548f8d33137f3c00a10820d770b046bf60300126f8ebb05676e099876286330fbf23a4b0ed28bc0b605b4475c9e863b806f9b9fab2ce960a5ce98d9e736119c5313587023059b9620030b5114faeaa581b6e55e9306a554541ba1ee1f3236e55773f94a58184ccbaed12f328667592e61a088561064156bdc1dcbdd0564f9916ed9c6e29652c5e6ca39c9f2992ffb6089f5298f088d612ca59cbfb08013832aff0e663fc3fd2f6fdb01819a3799f7c25f7d731265cab21f1760246f7a88fb3874db8269c95fb1ee49f2fe3047ec75dc4c000be60d6330cd9b30a320da0c8a413406c2698ec074ec7bd4e9bfb0719f37b9459c13eaa002bd97d6e4cd88e558cfa757cd46fc6a9ff1db6fe94c5c709b5a0c15cca2e2c8517775188e7d6b5b8c6935984c08faa45b83d08aa7e1323091cdaf38439adf2544849bbf49396db84f98468fe6b86fb5d02cc2efca851afbaa190876aa03c8fd046b7393bf087542c8e24205445d45e625731964fb41fc170dc58197a9e68599b8b4635b95f26c4320d291c30eff637f83e03eb2e21cc0cde4598062e74afd4189e8d5e176ff38017eed9b8eeba6b1c811fc97a1261e4f65545e6fa00d371a3d9f8e30eb0838c2c50bbdc931835b1708f84e8df8704f8f27875bb519c2b5c3d4212edc42f3a4f2d6eec981727f257d895f5f898167b8695ba5d8ba95afcde04f375141aee04bb17e50992c1b870dcb916fb5f102b460c548d55de6dc7c865af60b7ec7f67736e50359b633f2421ae9694fda2e44fe4f8c374073a1b5d0e91711c23dd6e45f6c77ae30a7fcc05954bf592956a90fee8ea4700ea153ea53fc00e88716d63e41f550c7fef4f14c73c336a822afc92a2c24f73b66706441aec9fdc380922fcdc4da5696ea267960397034a0646ff55f5f196ce070673c838958f7e9d5384959912273621dc4fbc25362a287171d97742f76eaa6560e43788bafd4a3af908caa4fd58e75bf56e13b68a169a66242163246425bd73dede2e75dd87e3936236187a7fc8f15f764929320366f456e65da614985a6b94f8d7f99a7dbdbf391782eb9419e5d8bed77769225289eac630e4bc9e347b395b475845710bed518e9185c09c4c3e21fca16f5001c7fdd2268c6d131ba916ab2942d57e7408b53f26589543cd9730518b6ca77a4b04413f0a513d463766ab35a163e6211e04a3cc72e557d1d27b7aec0d81a6447877e2a5f4380bc25c0db76d3622f0b9f98017ae06b033e735796c55d598e24b1493509b56a92f14040eb9b66a188bc570fbaf485451c01051019333860ae1faa9f71983a41d3db7c9da20a5bfbd2dc03ee7c92fee4272d9cfb47de991603befa313bbf38f1cae2a07f08abfa9793d369dc503c926fac2a00bf28afc7a3146768a69a66f5a1ff6f769026668a9e560852823cda8a0e345ff905c48e0c2e6983bea69775ba7afbe8c47503245537a0e585874b542eeb46364f752464aedf8b7bc2db39d4cfa445b753d9a7cba18bfbd1cc958292c62b6a16c9b64f17f6df01b53dea886c7c466542eb621b45b7c2ee34ed51eb7d9af9286731714d912c56539bf67e8c230989e4f353b86678df030277b1658dfbf27b09924d4d27b8986c0a94b73d4ee2bd9449315584904e6176bd00e07970f515d994fde6f3e4768247ad0746cfd592e2901c63b76ea2ae8444aa3842349d544c3c5211c30a8cb23112c45e6cdd2919bea4e6f3421da37f91954e879e3f1bfedfccc936ae3b2854eef3d800f10f536199f92d48be3a9babd0903356be41f2dd16b083d56d2ebe43011270559d0c5a50bdb67ccaf36c9319895ee00b68e32bd838110854c98a5969b29814c5387d46d0710458e1a95c91b10426dd1065cdcdd68f16de1d8af8fead49ad4cb8890920c8fc0b4bf5a7b2a05b8811b3cb7da6e0c161e88f96781fb7f70d78a1965959ef1fa7f2dc6eb615c5ff5f47e9a677176d80f7aea3295aa88b2f47229ac77014bbbfbae294b49e2d0a85cfef07071dc77afb9991a03dfa3a833e3fd2c0b396e38c8f7d02f92f27a376d521329558355f121a8fb910391e7ea50a3db199c3936e6b77377b9548181f11d89d371c0088863ac5204d7a878f1bfb7c89e7af5d2e5c5f5f3274f0653b48e4748a272467dee5fce49575678e15ba8d7c6a9b8aeb3056712fb41690f056c7f692322933f5ff235f5f365b5eb6770361f32af6b0d36203a8cf0688ff4f3243501bdb66d312b2e96b1e4b24e7677f9d81c70f1fab7f890c0c2870f3c5ec9765f8f5ce058b26c0df29091cfb8a09f331f5e2623e03557018a520397f682d4dd5f80a532fe399f2aca009f106d0049c66c32a6a7d3ebfded07ca0ab53727c1b3a5840b10c64d30ef9d904116d40c142e5f5897102e6239adb98910c986b40ca3d1e8132c3953ddc6ddae3c55963a6ad5693e6bdf582eb6de301d9a575d9e0228554b41c7dff3d26b1ad8f55f2bf1ca45fa328977f9b7e1f8dc062be1346c6ebbb01c1b861283cb26c5aef095fde8cf1ab2f3947c8b8447883dc129f9a3959ed862e8f4e989aa34947e7ea28c9485c5ae03e0015f761a5406d5dd38f313b01f08fe2082649ddd8b3ea5e6afc5783f6a8a7d96549341f093ef24c8cd800d326bb7d2513879d7745b8fcc656cb3219c0a3a707502aa978d83bbbb025c030893017f9ff98bbbcf25020262895de8192241289d0a9017bf67aff70918590e9e588ccab798008cdd663b20f8b117d6d7488bef43c5816d5215852b8f7968f527094a23a9ab1b7f8a9e5375ff7b1f01e495670915446b1dd80d8fc3beb3f0794b1bd614f6b140f67f53e78c0755d7ebb98f5ee081f591abb9b63c4a274683ed6306bd091f2915a3f41d53ad80bfd706ceacd0000a57a9898fa6273959bf97d417607b8a93911deab1614484fc47a0e5bc6467021ef92759c263bd1bb67db0cfd0af7e13e487ae5d1fb6269cea5baa0adb4c805140487f7eea658a6bde0f4333174a513f925b6b5d9782764fdb8a66e8d3cbb8681ed4367b7021fba420e2d3a063d771682daab96ec15cc02830426c021e787bc0fb0ac0d1ec3fad5f3fa6f68a3ecd7b1806f43d2325bb70b099123dd913c946f6757ac304c7050be78aba00730092cae9bea64b0d2d151473668830e06c44b6631e92a196891883e7829a95dd71dded37c55f877f400027db390309ba805126b146f0d119bae0c1d9c7d73b3beaf55e9cbb7e670c26e3377271110cc9e895244b8f03f5e0d5043238baee5500d47f8b72f1916e361a54afb3bf40de811d874bac674a748e5fe9517edc4e67eed6d310751827017fc2db1d297400e392878de95e6042d194c416ac36cc8608386aa689fd9fadc56b98ccec4e2fdfa050cf3fa9dbfa6b91769a02aedaec13aa8ff8503486e8a42e6c04c0b98c433bb95e4d12f9afa64338c65a33d5e5bb75c3580876bcab8388a103af4cf18e7eb3831d998e4533e4683be67d20cde1cb2ae72333608ed610e9c1c4f0d810af02d592113d28391345392f698b6fd3599bb17a63e1d42790e146052261e8b378aff06acb906731c8493467b1fd6792a79d9821bc9c182356951bffae8af54675b6b271bf3bd1cbcd50e889725bae9866415d417fdac2eea1acd9f5bbc4944610b78a4b6eb7ee639cfcd4190d2ebb3110476f6e30165b060c990eabecb73c3ef432e65c5c6d1395a1bd757af4df04193fe04d0c7fe746e5f1da3866b3db539d7ab965390af3e7de86134b43cbf51f9d4fdc74a0a1c62d2afbe0d5daa39970ee2eab7545fcc4e1aac48ed3e7f4f97459ba7c84df682b5421755d655c3e7a2aad8a99a51794588786b7909dfbf26498cb2a40ebfd159f828618a0758fd705d76818f4533274375fff09c907e466bef35df9da18ae4c8b0eb5304a64da2fc50d8a545c2e0b1ee9b1802588b025a4712aaeb3a8a9477f867f3b66cbe1bf8b204390b7219425f6d84296855015544e239529e22d0c7d211a4a8516954ac48bb00027cbf504078e9b89ceb3cfa5e4c63ec95bffe7b093c3af072eea472e7d93fcc99c0d371c14689bdd753b57e05b9f3b3db18759444ff9bd2b953c41fb4f565f1689f5883af0f761d4468679632d5b9178c6f30215f615dd2e5497264fbe255f6d5e1f38ff11cd76049f1fb49cde6de9f108dd62d42aba8785e985648a4e938634a4d4e9c6fb5d50c50b818a0be3589d4d03a10bdd524a34d8c0817d3985236c12eac11b2112298abc08367a1ed0ae33c323d86db001677d8d8615e0dbd657697e9c6e4d9bfaa47c4011b905643ad14619f60df8eabc74ba1a86ad2fffc6a216de3636d1a61960ae07b483ac7a66543cb8069c4dfbe80483165ec1cb03ea85ecc834b577cdf2e0b8696d10dfbff7b98003b21dcd42189960f78b0e3286968563a3345480821ba6f3eba80b3fa37373c8a3a50d078bc2a5cc3477bd07066f230415b1be8c50f8261914f1bd1cc34e157f1e3be47d077abc3d63c188b8f1e8e15696193e1bb92ce0705bd6b127ae0c110bba032eae63b53f2cfbe4dbb8d78842d39ae76d8f290e589246c381b0a221f9072d87661c1ee6c113634e408735b1b9f39aa8b7873f2101076c44a9787e142ff9df25053697a3c4a9408a31c48b19c94f1bd9c6645a197c4822e682cf6077384c5588968e7c50cc370a1539c14614f33ea506f4d7084c2ccd0105c82617bfa477171e94942b923a45267bc33df537ca5abc9ced3fd82d850e8d3ec42cf251f7129a5379e823dcb16c2c2a587b26f6b11bc927fa0f385237a53e0e11449ed2a2a765c3d0eb0384a41491ad740949d64a0a6114a5d5a74e970989e029fd6bb6299defec142d294e94c6ed71b078ec5ae7af0b0f9b23a36735a3f74198c7e7710e7ebf38ce2f338f05fba613784a7cf92c622d652469cb50961d0ccec8249097c3b25a46695180ca7a4b421f35ee7a358adc5ea1fc287d8f3add40d452a4059eebe137716034bf85540e47d193d56294856605626cd04877865d39eea2c6a50ae983dd566d593e4445ed2de6fcbfd4aa9e97b8130101aaae1b153e9a32fd0d403f02b271cb3f9b8ba2407adbfade3ecc5909ed30433d12a76bade553adb78ce37ee66d30144835c00ba0a50cf8e10f8e27152b46cdd31ed7fa8fb4a75da6c2790bc7543dd313bb85e49633167148d5749b41e8c2eb643dc44a333301ed1b4c5577fe0dd782129b51bf99bb651e761ef42828bc313670edf0dd20c70fb6b5692d362300b99bd543981f1394954b094aa140320c1e3989adf215d1070d54e5c754e8aec340aadc42dd65ac55137172f6f095e65ef66f0f0c2c96dc7997322cd550e229cbf9198817a635bc736c3c3392567bce2b3631817724d2ab8539f90b21c5c50c816f7279406701dc85fc05dbab677442076a4b817d5f5bb6b071f3f12b1803cf9a0030104bb45c85036f68cbb09811fa6a1ef77f9d50848681bbcd9f5fcc210b6c57fced9802983e5222cf94206cd74fc9a0dfdc459d0fb38f93e0364e56af188ed31381b3c6676118b2c4c5a95a26cabcbc6f3804893fa62076d676554bf09f680e3e5d3d942ca5bd9bc2c089e4a2f3a9ae101368c9a6d6eaf11ad03310a8088e65b7d093e06a74b75a54156090be4317128ceed0c2d7de458f17d4364937ec68862a9c353f9346ac5ae344bbe2eb319b76103adb094514d69d67d2fd5a22a39ccbf110b00659a3f32a1adefa6fac578d455477e601613314c8858ce6d7fac681b3c5ce82d9000532545534ba7b942d930cc436904fce81668cfb42812722ddbde9f3263c2c38f2c0461cf66aab152c1338e9f75848ffa8625733a46adc2d51b7bb13d82a7466f5438bec849982c1bba456202abc8147108eb3b912f27b8cbaf5c3a224fc561c7532a24e7fa5770c84bce111411b9d6752522f061eb669c381fe7028cd2025cbfaf415ad483d1c57ffd36647eb23d1c2c63325a548354b643f486d02112477e81f2e42a36ebec756856e520e8933d2dc14d844110fed84d15b5a06d89177d1132a37d5ab63b92c7ade04310f9bea2525a687e6d3d64d9aad5ea9ca26de98a5bfd4b73b3fb7aaa027323b9fb5a3a52d3203e89a684be4116ac1ce435759158a508712efdaeb01c6fe5a6ada8b30f37f83a560eb38d13f7d7c2d2dfee4816cd367b9d160076e6d05628f188e0ab463809d038735dff6be3353e94f5978f80d3587f589383fc23adff678cb36beae53c4d0c6d226c82ceed7a48ea8ef6f1d751513c280d50e76f9db1c800941119f72d0d147c81a8c045fdec0a5d12d517242e6ad998ec2de0d288b573d3959ae081f29110edfad85ed7fbd5a974e9faa86f54eb7e2d98e38f55545491901dcde68d73212949f3c6078dcf7b50b87c2d4dbeaa1c5571793a9bffead34abc9373d42298058616d638616d612725af3138ae1b184483ebf7f9add9327dc5e161545149498451df0af71482992050e371e2728d86ad33237bea6ce914992b86ee3806096ee7af29f7cbc9d160b0fadca5f2421ddc9d8ba26bd38139796ea334a2e79a6aef77ca7e057b28649c1d4b203331c5d1025db3ef317d93d147455672e528b674b479ca659cd1d84237b06a398567a4b3e135d49233b04bb768666cc81fc50230a538d7672493827317b180af015b86cb5f6c1614db3351f5c2190cbeb88425a5abfb170b058acd002668b40811d7141f654ca0fc90d04c933fa65edd182ec8dbac09b5d9a77e62f04a1c2fce1ca1f6badc1b9bd2b94de497c6548baca88b92db91abd7597337e84b6d1718888a82d3a1aa222e1fc073c20b3e6dbbb4ce622cac4329a614cf7c0819769f98bfc24253deb9a982690c0a8ef69137157bf37c3d56a9cb499124166a634dfdd7fa2ea91f77eff8be3b05daef61a6fbc28b80a26ee2aad9e858dbceb531da79fcc1357fdf7736560b1a13aa8e536500ea6cdb9a6757309aadf25a6a9189055a309c3f8b3ae3750d91909e4413d4b690b3a46e2ccfbd2257bee60bb2a875b6ea9a14b496d9c5946377240e6e25ec81f148bda0224f1d675843bc55709ffcd56f63b0fd6864247aa1e65fcbf16ca4ae6ccf3fd8438e7ee9e565fd9f6a21264a32b2f980c98209110e05c73d959203254971b0805635e88f464b305369d4fcfd7bb076a681db7b40f4fde6cd213c12cfd0559aff24eb6341c21fddd8356085d69284afd7571882ef99f544e15f14d89249a484bd7559f8e7a2068c96966ecabebe582c7c15e12606461667e315c25d57fb85f7221026ae6a2f2ac6f554a6d19b485176fb81dd706e4388d9390ceea9072f217a96bffb8eb0aeb3125d36afa457789914be64b5670dd872224d0c3fc5882d9f958148809ea26ac9f93606324bd896588e2b851114cc4dfcc885dd5db8c43d28d04b745ce828aa9202e88ad6cc08eab56dacae977d93e950554b46f18aa1a7e4b45c0b38742bb539b5db8b4431cdbcd937a8a5f2ac4bf693510610a34309b2fac81cd5bb4891d4e49a77d023821153ec778733c8a9dabaf0421d031aece3a79394f49a8e6e444fbc3a25231cc5bbf815b2b020c27a2a7e8db2fae7ff8d17ced6a14a2158ee2a6ee81c4b4ad704b3f37c728d348729228992280484f92c8c6fec768733c2ce2d7990c8530efb46e18c4a3e8537c0bea925282da3a2b1d32cd2fc9c1498741834b7dec7a33730942d0ba79f00f0143fa99877483f08ce89de3f2f99571815d42671f8a0a58d20f57fb7ba1c66282cb6092ba601407ff9578afdadf7ba7a4d08edef06dbbfd87171bfd9ac3d20a7af2ab126dde00fcfda4318559d3da488c6be707931015bdfcb10d5b9a48a943546a488d1466e12c0185871 +MD = fc2503d7b8baebc96e4af56824ec469b3ad8829aba34c239a776ae91 + +Len = 45656 +Msg = d302a518d7c625756d3e4c8cc2b1d973a19107c945fc04526b88a4e1ab40577b07ea59b9c58c286e7a2e3b8a68e0f13e09ffc861ecb5cf13c0bf5ea0af7304a7ed01c17b90f975c9a20d997b74192ddd3660f1fec518d85ac42abab5ee33494aaace4625e015f5ce0c65ce27916275974f3bec687730086e9e5121ea11880ead69d950815fe98ec4e1bd425665c5b1b67d192067ab02459977bcfc05c07a3b1950ab4855b37c29f5489e5dd09849c980e781f5c30998782177f4b1cfa212b8d487cb946a84d6afa76a8f875cd3f6a53eb6fbd34338f98a4fc580aa1060576d2637c19e887b0006236e1828c4bed52e37110f22b1e12d616b8ae84d90a15243598816cd763f0118b17dc1a8ce00ed4ab521464ad3ab3de7bdedb504160e0920b4a15188fe79e1cb98bf136f434147e2fe0d27b3713f30028c176e366c4f86ee7eabfa39e6d1a909225b95e5ea2be9df5bfe3bc655440e9c22309b4a580bd19300cd9a47f7ee60b9957ad0728d64dd27141c08e94663df9cc55fc4aaa3eaf0f98230b81af9790ec33a434a7ff2942ba4718e18850b44aceabecc72bd1596ed064bfbdc1ab419bb0e59df8d72e264d93cba7df3036d8e7c6e55a02ceb75b4cfa4a5578eaff07770843a7521b5257bf1d936101fc934ea5810d1037b9c8def9fbad66c5741743b350c242e8cae83837a622e70264128ff47b87c1ce63823ec642f2761be38090c108e613258c7c4217dbfeac490d21076514e9c14f527005626ede05f4cfc77920bf337a80c67afff01d8b235e3e3b6f67eba7a1230d2ecd3eedb498d87f586762d21efb831f50ec50e95ceeba9dee028d7e45e3f209fae0bc3e1aa14f98bfd607e01d08c4edba71bacde850d692a57b363b48fc34cf710a8ade74a1b2a27a6f7077b2449eb8042a7e49b21c4ac2fe3412b1357c53c43d84fb4d572cba12f47e4cf78311a914ca914bdb4e837f9554b7735e7fc6d79e9cfaae1936a4ce60da9cfdede4125c6a7a3084011238fd80459ff8b1ac7e48a53bd613b0a7ac58127945e3d979a9215f9f72b749a19f3d1a4d38135920052f7e76a1cca20ea5efbe7d03cf389848a03aa6e276138148c6d9d82a43939efdf490f9d8297be0141dab4240f089e49351a22d0a10fd15a8133572e11a1f5dcb10732203ba9cd0893a9f5598085bc30bae1cae544874e34fbac3b9f7075b00ef3b9b7b9f00933477fed14373671cd8041e00874b5d098ea225eaf9c68bb51cecbe8083149bdda062a307886dad4b882f4a045479ff295c41dd31cefa17dc064611b8c4fedcfa88dbff9890e13b7657ef9a8ea24a8f62f0a1593eb5ec4c2e518dedaabdd8546872364d1af978a21bcbb78805dd478e34d03312482b27993a8316aadcda1b82b5e12413f52e8e61aa5839ab1081fb8c1d7f89a104bb267f7f1f92c1d5a652f8514a080cbdacad0aa081c86c252cc1098b43177dfac2837f6a8b64db1baef915c931646fdaf05f0dacdcf653ba2a52771cef6f1170fda9098b5b1f4f2560787b9c2bcbe5e3961edb1dce45fa56270a6530c8f3042db921be600324a669477b9a389d90d75e1a670371da39b87f9f6344756435be7781680e771817797dd06ce22d0b65eca0d9b207579544269cfff7a54945c9b8f4e2e66a3f1e5a20d9a7b6f3e7f9cd7e62609a672d63e7bd34c532082ae2017c1c5a4752366a8f44e319f43007fd1a05095b8a9371eaa6f4ed8b9cdd98dd8f805453f566eba1094e40c3af36fb69de290c170d2ca37e04661dbfa296217cb65e336c6b18cd366aa57911426930d4ac52f11f9c9350b282795bddedd24354387e400022d869bf1602d2af485756c1f70b4ef1a358080ca3a71e62d9127d086858f0bbb7363f8fbdcf03ea3b71cbc630ca7c29dbeb1800da97dbeafec74cedd886dbfb82b2bd4ca462734ea6590e35fc091f1480dd2f23b9941ae2c97121990b80485c3fce716a7c75b768f37dacb5bb5f9e6e4caeabd9a34461c6b3a0997e73cdfc3a28e9ea6da87136b5ad4015a9e126708389d02cb73a21371357c62322a3d83e21e8a586cabadd77b15e50d7a720063bf0e2c21030d0b3016520524d0a0e27a4bff981d4f62612f0e861107121da776732c224f4db29626718a7e575b92544b650d5ff63a46cda48c7701f60ae82e278c5b259491a86b7ceca58f04ba48ba7e971088ea12a016bd5eae5de24a1bbeff7263ddf9b738b3baee6adf32d50a3d9b4bcfba02c0b86703eaf3ccd4b9fe7e858e0cf485a8aa9669dea217e99420052be8139e452cd6e6fd9910f6d241d99741461e0f414a463b102615de31dfd139b6d6a4dcbb3e42bb33d3cb84e7c9f330bb0360d9338654cb372d8bdd139e6702c27c4a1b6cdf430f2d01ee1e183a95727c2e9bf765451b6d665bccbc96b92887d944cd0361f5230a74893f6b6f7a07850b2d9714df6de44a26189f22c3185df18295f43da16928d38fd58714f3729190f06a1cd6a7e7f789feccceb7a0a44d6746d7887134249b93064b8dc0ac0a7bbbb44bf2e5c79c9c5477df1f2438434212ab735246230dc47162551b18a32b0c30de3ae0ea47731bd017ba5b1190de82193bcf1765750bea96295af7c4dfbb8d14f69eb08d2d53bb2769c34a25b25e56a57e54a27632085629e6c2ea6b68a3469284df28758326c581f263b309a5a906defb6aba2062eb51531ef4bcb547cc7fcf1165114b51d381053c025f6571a9daeb3a7a260b0e9c213c5b5a354c831d80f6249732b69d4237dcce0917e01f441af5c3eaafe03e020e0b245b1dd5247d902d46df555f715b2f2d30dea122b5640d231f241d47f80762e9025f3bfb33d6f99cfea440edd406b021ebebc5d43ef0fc9ed58e38e7469263fd7cce5863b70f016dd44fbc09cf2b04e086974d9ebfd02f8d6d92c7692f8c5b701a113cb8b810f1c55046915b68b271918949ff2742ecee196f979474bcdb9069648eafa03fc111cffbf2878aa983405d7c6ba518ce2c816a640565b1f3684b11e3ae79c3520aa8b05cbb663f9a86b96be86405186c782fa7d44303c8de1bd38f1ed961cbfcd30093fc0af52142a423e4559ce8d023b842f945bb366085dc720c9d78315d42045f9e6145fdd9a9c3c8ef497b15e7fbd4008741d4c521ee946eb0e9f1af242e850ef915d6460ed7cceeb54e695606fcb4b27a4ff67ab5232910a289aea4c5c73e55cda0239869d5a8de5debce71d52f409ff9f8891bc12c85a00b0515d7eb15177b428896bb92aa3de010a9122ffb9b61112dc2f571f00f8e6612e690123c21f9ca7f579576305e753bf60e9d582148fd4e3d37a344e7d62ea9e0b3861b60f2ca88ad948a93ebfa373936a4d7b4ee3ffd9f52dff95c51894cb39cf45fbb009074fef3c8dcd86d846a20f9f3290a0b874a4c94416080d42ed0ca6f3282bac404dd747a7af30e5b07f8396682f9241f28ca9d2ae5417a18cfa13781f359e05355ef31693237fd6088c8cca6d9b0c8d32b67da3d530210c673a942f9c24bf5568b907fe979106c2211c221e080b7bfcf97084af4140d0b8623cf320024c0c074afaaa422d5e62449a9ce7f3d0074d1ba74953678afc832ffe6fb51bda3200a56c824e93bd121ee7e59d430e5df51c53dcbf5e6f0ac9d4fdac415e559c6d49ba3dee6965df229906928bc7affa8b565ffa312a28594f328bec50637fb15423b04fad8f3afc266d2b11e6ea6b3e00877a904d3b25fed318754f2b48fcc19d3b22122e2485ac8417efe43d3fb2b11b1c4e2f6205da542c13244520835f459efc7a161ecdc858c205afaa0d1c38cc21a145382e1ed80180af135edea709a5eff442dbcdef859976c304b3c5144017caa2fa3affea817f9748ed0cc4389e6ae69ef6c3da0e4fe708ec6991f3cc8afc6c9dc7b8660d7936c67cfbcf6f9c801d3979007eb1ae89b9fece48d527895c128dfe5830dedc11bfa4b7ea173f6751355eff1a5ce354c58adf054cedceff35d2a5410624e8eb0d8298861294c20d843badbd9efefd7575e2101dd05c5872cac559126c1512ceaf1848641fa886139ba8cc20f8c55e952d5838646da162a87d530fcee471cadb88f90aee5bc2fa0dfa0520c5c25085485e55ce958f4d6bf4b0044fe329db9fb62dad76617184ac5131c9520886211fe38b43291dbfc0d2ec1571700b86a30fc30f9e0179db5e0b71d56dc685bea77d1b36d90e69799c35f31ff33684957879a6a15332a403df9604577af4b9d6642b43d36fb5053740139e223209fad0cc8bb57555905c8559da7d3a79631157d7b8e2037fd37d935cea61ee9640eac30fb4940e2d912fda7d5740e0d1a828cd82949a29a1d03ef83338e2b79891c0e6b262b6de33bb8a7dba8af3fd2c2a7ca1f54cc0c84e41c5e0637d752fc17309a6753492681085e8d991f41ae1d170697f904ffa61fd8ebed67e26adb9a94b419c9898bb3e4c76e78884110a317a008bb0e42cab79383d6664e3c2f0e7a8a0f543cd1d95b33004f3050160566e8e515fd07151589086d468f624e0e33c580a91066321b68973b697d9aa6083eb76e96268c86c862a51ca4324c1ff091a2ffea18efb43920370124270efa0275acc4f1fe449ccb8b921a5615b4b7bb713a8e3a33805f1bcc3cd9e8f55319d951f16e904dd85f064cf8efc601401f591bb5b50128c13caab3cd4c1db0120b771babf4d9dbefd762ecff215abd9b5eb0d73afca7c05952cc1f13e12b20f2d9c21a05df3670320dc5b5ce3a7c136b7caaedf1ec94c3f1a96a5635207a0d9c8aa49825b50ed3490819ed8ec293c959822ea4030c30f9304a6da15c91723fb72604db3301c9cddbd044dd663f07a80c77234698e4e429bf3cbb48b0bd7c7decb6c92c5848ce26906e30cd7f3b3f782d637319d7fd161d45873e93582bfe91e340ddd3bb1487a612e9c304003da501634f0566e9de309b6b34dcca7d63624143cf271886ec5b140649e7cc12cea00a5742c174f60f986cd94a7f3446ee0e56b4688f43de59b23a1797836bdd75985db0448f8d2519b85836d10e1adc536c98e015fd9bede2f5deebda7e2a88baf5c0175d57f79e83f6262ad271c4661ae2ce6cdd5969db0f8ac92a1ac2513c2520fc349601fb8ad5bca05f53907a0dccdac203c98bf5d068dac37d5f3628203f7fd9aef675e11198718c7a5f5384f9f0bb3a4bdf7c87f3764d948cb2c2f75d8f7b1e2e859cf15a537cb326fba229510eedffec2912676cc04c03fe1a4e051a9d7d955b4c5c738e8e47dd093165b33eaed8d98faf36dd64ce3dd97ba0c29b80f2eb04de529eaed4d239d1cb088468e759e48fdc78d130032989dead4b0601b7152e345ea04beb55a5ba591589e791759679eb7a8cc9a9705899da3923037fe68eafed843c49723892323b8fba76750feeffb312f30890d4e3d495ca309f5d35e6d5f6f830828ba61e0940e0a51a5edee8deb04bb5742d5653a1d6067bc3e2cda407196184dc7ec7d3a830b052b992090c7eaacedbf7c71f2f6a67950b5857d650af1c673e4192c23875d3a9c73c5ab9e24769426d78a756ff960e20e84404777334c8b3689810c0d5d9f1710e8cfe16f3a2b45071de16244c8d944f1b7131d994fee5ed09c940e8333d51b02f8fc647c6f554a0f1135ab19cb6c1c9abc526243b753bbd2abb6a63d907bc0f302ffa75e3a912d9f4febb247a7b5c37a02a2a7ff00191c9d258d6584fa1fa351b53e1c7d327b4a3838783a56b432f40038787123c0ab1bc0987ccf01e71d3ccf7e3c4661dd602a8a596f85ef977008ddbc38306a6f8613cd7309353cde10f79cdc6eb79491dc68d62136474ab7d98c530c86783b7336af1453b74a8e45775e6a4e69e29e066c6fdc2e60d1209bebf910a7d7bb0f52394855a91b717ec3dcebb842a259e6918cb9ecef83c5e9ca23c9972ca06b6ea30a69d1f18a4ca6cfae29f767ac7ff6c9a9d188d2f3880eb92d9846f9752bd1ec36ae49ab982e6ecf6793b80bece747156041408744ba17ff45cfb0acca5ec1842a6ffd55d9b96f4995b37adde802701b3c83a45b0bbe9de318ea54a52486b60172399d8ea35000d4b4f3a02c3263da319b0314ec9d17f92b2372b370f83637ea8a958a94a994cbe741fec895307e1e0f086a22ba9d58c23de1f34d9ec9dfcfa5f00e452630fa3907c91f749776d393fa11034e2360f37171c0d6939d1e05d5da3efe6db1fde2d0acb6e004a189e6d489217907d5ac6a9f8d6cb715ea792af2fdb3f064a645011b4c97db2951ce3a6832c625d03fb44094d731ff65054fc19f671b8eba91cab7816df88b2316d840c79d7bb447d03cf809f5bd29d18c266c43ccc223eff2e3889b97355ab26f1c9c6b1fce8edf259b03675f5ac10bdd717d7885445a655823f6d24efae437d92fafdb301b2ff6ae52f5257ab74f7477d597b6371e9ccb200084bdfb959223d365ed80850e123ee8f93fdcde4f4f9bf9b72d8548bd5571e90da4c733b1ef16ec73e80374f3d00843f265e6009f2bf2c19ab15e30ad2f0a21aff9867dbc758182ce21cc8688d3f37dd2e9e978037f196de4c5b9856a83f4486bd5643031afe444d92d544029b870c51f4e4fbb28b3605d49dd1fcd71feb0ebc5dae901ae18cfa1296d332842d810d83c0591307b53682e2e6a096f6fe9d08a426c9d488e2a94063353d1a580cd4415cda2467e87f9a14f06eefee190ffc392762cf9ab4e6fe2028b93b84e50029b0c2896f7fbbaf0ac4e77ee78daa18b1a92b57e86708b433a14968f7f993d128639e165fe4e90e2d99ad5eb0fa0fe26360994f3ac5eb16efcbae8b9600ca467861d9c91e1ddb64ac9b2b5671bdb235bb675a90f03bc5d2daa740694322f228c2b259ead4b2f8792ed249ae525ff9d961c554623052ffb19d3ce54c24e6733fad5f08c1a82ba7145c47f0ad7c674e95fc82710f2290ff7be093867a61d4b653e26fcd96c31152ffde01069c175d183234a798def0802ef84ab20c3c2374212c08ea8fb04dec60005b0874c34acabe79b33ab116bfa7f4ef84a35dda924f1d91c8d938586d4239e07c65236a3e35aa2f1e46a300ba8fba2a366e639cd5ec134cca43afd64b9d4566e81ffad91b26431f20d058e406bfe66f071904ca15d36923b530dc721084eb5c473ee0570825f1105fe2b70acebfe2879fae2aab798d89df32a8a774e480968843cbbf2e2dbb1cc98383a8b93818143aa734bc882aa1d948e8b4f823ee18abb482cc7ea4b36f2c1335bc133a6c51e64fc7b4a2a94f97c325805bb7c857d493a6ac4c0502c2ca89b61d94e0d693f2bf90a635c45611f8ad40a1a6ccab463cb6276a503c9081539c7ae213f8d2d58306c3edbf0ad7984b015ff49b1f14e4d97cfe64e20b951992cb272c414179598d25b1435a5c730b18264b2045994b59324ef541095a5bb20f7f84a527a41248988322510fa27492e884cccea92097cccf92d2a9ce11287253215af3cc09e4c92a88debfe5c420574183a9a6d19d426539b25e4637184584e51771be38593805cd9cac34e5aac07fae8bac4fc4f9924ef71461bd4f57fa0e4dcb91af747a562408275558163c9b35b4049b728a1ad0ac9122a3b91bb68e3914a3826d8756864d6391a2d48063fb9fdd563fb62cea43aa9042ebe0a51e4b2cc1090ba179d410a8674258502b0526e5b0e960c4b150356d7bde02daf4757710dc64f6f353db3b5e9ba34273200b6530b526c6432133ec20da5db15010a55b0ced1c090a1c555197881a27e6665e00a8757338dc847db1e93627beea02943f497d990d8fdc29987ab410ce5105e43f7477397f37e315ccf015a4f14fd12c6aee1342c9299b3f5930a9ee005a06876abd43e163fb45e3855e023c14288553262438810781627fdbe0ef1a85ac702ec8aa62d1acd1b3cf245b8257ed1c27f3b91373bd8d3f38d168b30cfe25ed4bc1a2645b73226034c1f00e1f5d46d4bdf36ce24c5f240a261d46d18a00a8c69f274012b62e8d51d0a132a060b6e5f7523b87ba4bcd948a334bbe61f18ad5de754aeaddfc69b44b8f573339cdca922eebb352c2f970a5686743188cc703 +MD = ab103523d6f3d051bd1d48b3c9370269d9842a611a83bae98e5d4e87 + +Len = 46448 +Msg = 1da80758ca2d0bcf157ccfb41e84930c5e26c95cde96df24ab0559a9857d22f7d70c2427ec2416de5f429516d3ce7721e5425cea5f8f857faebdeacc97d186a925f3f618e6d042c7573efbdd9c1e86f37487b75f6d21a2b954cead98f090ea9df0a7a4b321f93894e4b72690e03e688af43b03436f13dbdb8482cb94f882f5da1e6e57800567a04df0f741b706f4c6ee4ba7671ccf2edaeb261f6c49176e506898913708fbe121f8624472da7809482863130c74f43a47f421eeb73db61da34f47576bd26931639f22e7e1829d45953e22c719d246ffc9fb5f37d5fa3b589597120a1c66b81d0f491728b836dd6f563b720ab7bf2d44090ac742ee0810e5ce49e0f0714d516ecdff2b4e1c7fa05132243a260ec211d3af28415629ed9b8cf76d9b53930e9aeb44c845a337e44eb1d203626145635a72625eb5bcae334617b8092a79a931fd5e1dac4d6d31ed4f58dddfd104852a70eacab30bbda661784cb82775abdc3fe18dffb32cf532220c0efcc17156f5a0bc02902f2b9f390098f5a0ce643054bfae4293e6c883610ceb9ad7b029a1be4ca4845cdafeaa8e9710d81707df523839cb43814c0a5ee63255c615b4e12b07b69136d5bd6a28ceae47bec6d9ce57b035a25870eddad0ea1cb3585fd5813ef967ece2a4df585f20cea56e544c1988e63c9a4b08d2211f95536b195c1cf220bce61b4e7148b198ad7d92b26a68a82dffd51be3f202c5940e5ee7d1b5901a1977bb8843e3015b1b9c467650b036638e26898de7d685b0777ec58d48113ae273526f9988a211403016aeb911cdbd33f281df59205b64c8100c11c745192032747689b8e75780471f433fc3bd6a05fea3385fe5562aa6f7a6e1c9fc92754cf3660b914c26aa57572f4a80fd1c2e17aee774919a50eb532483247593f5ccc60b8f3810bd0e429d5aaa54f9cdf5c2fa29075dfee0d8457437edfe9ef637c6946438268d7267c85a37d688339c12cdb6594a1a2d20b4e010172d97cb8c200cc0e5a8fd90d5f9e396d6fc0fb5d339f85424fad4a6c0ad652fae8b1684bd7746527529e4a14d8b3c5a1f631007d833ebdb745db2f22a8b7cd9e34ea351f1061c50fe01034942e77aadfa55b4b215c84d5330bddd98c416cc179ec068bb909334c46779830f1cd346984f18233df0bfc7c540607c20f816fef0c7278a4902e739b598d98c7c4418482206f58430d3e200388c8fb8132d52b96d47cc3484b0cad12c78694517207e27530734ff1425f7a1b4fb91b9f8ca93a69504f78cf20003a430f171d76819cc8c333a1dbe704ec7514177b0a65739a16d70e7f0ba1d5b5c5bc9ea386af798cc1ecb87f8e6ccb61ab9e8e832a7b9e144b506d8fee78d2a9b9eff4c07244d03448622d70ca2b0c5b880b03460e6a42a442660c06a3bc8d38914dbfd2630f1c3fd6b4010a218a5e3684fa2448288a37c686985857ddd58c0ee6664e6ddb46b41bf762e1c02703278f3cec400e0b83b3f79267d117cf6c557923ca3ef74d944e4514ff3e174d3e0ec22a42050c19cf6db4004514ab2ad95023c3c9e0132c603137d9d9749406936a7bb7abe1d6f5c5bb982ac081a662b5228b6115f0260a430380908233bad59bc1186f7a44d3021f23f0ac6aa68df978330c661eedc469a53babe3a9e9e04ccfa924dc4dcca4d1344d69ff9401b661ab18435d551752cd1f50164d8105c8ee97993d6886e7a0e59d8e608edd01d43dc638bca1492b75a709d75c38d825c90d9c07aeaec6047ba1c36d80e4b6555be0421ad4fc7b98817a0d47ea2fefa8655c357b15198bc189b83e71279bb04ab1fbb74528a95ccd2ad892184cbd683c224d0c79ed3338ad4f7b772fe11e4b707ad28e2e24527d57c62520cef04bb22f8442797ab3865d06517df5f039d6f8551b174f5c54624db6e7f241d271656e110fef24f3f47d898b243243788e703777173c635645635e7904b26dd94c94ec7f29a5678c1c931e9a3c2ae81f7b54993503b4729253c0200ca1081d39ee44bdc87607d999b871bcc20dea4c5b7d0e9e3d4511e5971c2322e04145c88ae31f729b5978f3a34463c4711dd2e8c30008a6fe6fc754db1ae6d7926a1e0822a76f7b56589b3e3f4d13c655e08765cca0cd43d6f86718e4bc95dea18fd344b7c7cf689807c121d43efc42bf0a7a1c0edbe715855353ca3a9dba888c270826b0a0b9aabecb9d46f89677ca3ad02da3d01dc06c58252fe1431acf65c0c44ef683eeb8b25938820622e020bd47e60475d6e2f3e8ddc24de6a4d03f06cdfbfa5cc7fe372ff5b301e7d9a881ac64b0b10a79c7fbeb94df5052c64a93dc2212bcc1e34bcf73f2efbf84836c15082fd495ea3f4943151bc0b9be2dd678666bcce8be7c73ec1eff32fd34b6874560f7a6359dadc353d5b10b0c7142203735e96f10bae9f3179169215da0f996bd375aca128d3bd2c8ae13329b14b9a45abb499db74fb245dc6bdf2f5321b326c70bd7a4af416003fc1ea0cc1820eadf7d770acd6ed57be8a51ebfd1706f79940d5eecba8e42c0b378a7f83bf62e6c3df9e98b6289e48d57fc2a89ac27c2c38afa9108901219c48db8ca7806a785a44c7a936a11ab058d105c0fcb140bc417680942c9b9ed2ee1df5706aeb0cedf29875a05154f44b0f1ae4f3f02bd7efbeba7d4048e9c720abf44bddd0acebe83628b129f2b7fe96f418e4048beed03d2c6e6c526f5bc3335a34a77ce2ac4f92af5a45ef20b280ba8f34cc9bd6e373cd11f91675a6d9dc328345cff5a7d18213e497f798e32dc1df68d4665fd7f207c8f8c3434ff74b5845af8f8bef2704cb925d4891cd43100a2b086278f99804d6556634ba8869998096647aa5136b2e7137a3d3d9354943a3c9f644cb1021ff269de5b445c904ab9c4a2d6ee3087a35bd2c3da29879fcaed4dfbae4274d78cd40c8fcabaabad169f48c8fd30f765d03f796b31b9540653ae596dda85458a7546cfd3481b202d7bccf821411ef071a7e67a08ea89a338acd1d15e6fa19d8b67ef164139e25491f8a775443904c61bb90546f55b06dfa7550c5855d413f76ab311926236acb39afbd322ba4b8ed2c4720082e909bd73c2eac250dcae48fd990572a6bec4e6c78913b492fc0f29c11c715c903c8d0a0a1bbc785d6b64dcea96cd76d5af5b0cfaecdee04871ea41fb74259e01683b990d3268b2d07a9e3c79048992a1cc6f9bd8469bcaa5c47383fc8c0d395904cbd6f7777df64c9290e41342b85a9d8e792fea16f8f85d5c114c4e94a6b2f99a8440438b4aa7444c036033d1d8331b7e1e15aafe64edb1b16a276c4e609f85821b618bbe7d6a39ff5c3d654277b0be13a509953d7e1f555cd481d019f9536f63e7c73ab174a3a03501d82214f55807d7d468237492f1bac6f7080487af7329b87fcddae4dee80975aadcf4b9ff9d6b42f2bde03442294488381683f8118346d859f1e6c90aabf849ad9857b1f4f55adda66755fd1a1aa5091e39d91bbde8397bfcdfd8fe8663df1990a6b58d640479105610ff1f695a3ec22fde7e43032693fbeef44bc5d0a4407dda94a8bccb2f28739837464bde4c846bd390ee1e9fd2c8e086bb99df87e1aedf01ceabb098ea0b8fd346b5e2e776183eafed92fed2515ab27ab25dac0aa07cc5acd139196bd974bd9dcbe875036b6ce31b5117644946cbea3154f1bbe7755cca1228db47a261f6955e333892b090e4d1bc47e60f73079f102130107f8cb4a144f851fcebdb0823afab29309c7d9b3282f94e8930de3836ace0c0146789030cdeb5d9384684506e54fafa5b22d8ceb88f58d17b78e93d4518e68188146ac4d1efe12af8081ccf593dd433329640cff95f617d375832ab2cfcb8e0e606809ea300f0c3c6a132c956b2ad60319743f3776b99be375f38f660c0ce8ab8ae88d4e2ba6b201e9234f2f96c0d1df28660fda54c77f105ee6aa382fd9ddb7a8cd22c3364c6ec8a6bb1c0a3b279a8dfe41633256a62d22d864636f60bad5f96120af8f7987a75749e27b7083e59bd5440d2285a5e00be18d76a255c938383a5ee81bfb1de2c67779a154a796843b81a2d2361c68fd831422234f308fda6f42462d504f4ae231f0deff8ff89b8ce157bf99863fc883fc8542745249dd29e0d9c2f835d32711518a210415abba83f7214469fa35edfcdefa936f93e8d9acf4c77a50b2cfddf68e0deab8cc081df3e4a5d84b7a48feef903cbd1efb55abeb13d3153daf8a93195140e0249d57e96310ac2446eebe23e57c13698970d77c6ea6c73cc7144d720300ecac4f70df495ce3fdd0623ee0866509463fb7dbb774be136996f7c960a23b05d9f6412ee96365c56283a753f64cf79f9fe6b0253eba62c482ccd4b70b4a49c6cf6503bdbd5f061ea1e51e1348a023a6e4077c34b177e21fd98566c49693b6ad96a19c07a366c756839fce671da87286de4924f25bd2c78e386ab6d948a40920f55314f3e3a031d5d059c037bf8c6ba85555af4683f497786522cbdf6aa6ca89b6237468c434cb0350bafa6c7475977211d225177004dd452956aebc44c0824f9fb8c3508f4a1d49ca6b86ec858b7c4dd9698e4f6b2b1e5c4cae655a1e1bb8da79bb09928d0cb00d08146ca13af5a4a276c2f3d5bc91e42796d1fa9f40def4920bd34e1603a00bb8d05cb272dadc97d7b1845b91ab5db60dcf687475f132bedf1fa99bc43c2eb7b3ebeb6246af67db565057cf6b80b81d76be1adcc37b3f9f297be4f7847fdf3a65216a8307ffbffa851be5564b82c9a0ca2c903971242c1ed8e82d6b3e13da1e3539811e9c130b7ccedcd3f819fab9c772e17293663522c4542e2cfeda4148ea8dfdd73aed3374e79859ccbdbd30af1ad4a567f38cf54817051588b840515127d43315dfe2a622c54a5b76ae1f6cd42259401760caaec7a15465eaa1588b1c5c71a4e21563b63c9d4eaa79d228f64f6669792be208a6c6eaa7e5f9c20b36d211ce18e7e558a9eaf80b0e7e32be15496e6d194b812e276e78675e5e223f9c9acf5257cc56a9c8565de94f2dd4ca13eac3cbe91e462577e6d5fd99c0c9dd039d1c652838713e5ba55450342dc2353659ecedae4d38d3de5789cf5bc8c0ceb403836f54d33dffaa0265a8872704e5c7bf7139337f5f21a6e91a476f1e0ef8f7f389d8a446c2d5fc9319590ec2a0c40d43db193f5dc4f715c312cc9c69bb451495b809dd3908a69b80f7cb92a7a0b9520eb1f4998f6e3e750ef9c5a951d09c52129768ca53185ccdf28867da7d0babdc477b320abc65dc0cf1559c5f8054e4fa92ae5e323df9dddb115293b0edea84f517c23a5a8cb2bb2395b0b8869b4f07543c8654dc9fb3130d04dfb8da9f442be3a60c7651a95cc101229181e64dcaeca839a6b0911f4fe4aaf4b73f213a2188ee1be44db6b86bd8f0bf815f463bcb7b3eb196db1968d43afc08608e4d678a83609fcf275364e8e7369407ba6f105d9c5dcbdf3e3c204afc4969640f26cd85047f59576cee52dad61ccaabfa2a7285374faf0840c2f0b912da3e4b2973151df395720385502d498dea89f5873d0a4d345a869948727f2a63f7b09b43fee65738e8115bd8419b3ef3e8f86eca707fbc7bc7781bc01576a4d9e7e7dec78de93dbbc05fe8ce8944bff25e409d298d79daf5deac150f737c305bf40a9b1ce9c5d665678431d0efd2d77193880a0d5aa2b088e64b0f9d543ad5d264415baada232a1c24a7bf443cea8b59d0f93edfa19f451d297c91d280579b2480b6a5d928ab42c93ef018933836e5905dbbc005281ba29ded682416be7c8a3a908e01119a042555fe88c626ab5eecff82f518e9b8bccdee7b364fd1d851abfcdcf4f7baf9d7dba6ac9751645d0aa88e87d0cff1182ad0fa1b0f9b6b947d0552ab0e103c0dcb6da690443fb416e12226b3736c87120eb3a7141b8f4cbba9a0254704d3ff9e89e23bf1b81a809d8b61ad4f0677126c107cdfb081b3dc157c855bf6ffc96c74b8424f191b692fbbb16d0da3b379faefd73589356a8f84699fbbde012778e9560196c94e94b52938fb4f2cf7a0f9a6630ce58decfdacaa81b94a94b0a36adf0e0ce591d94b85d5dc100ef493f57f80905695d31d6391b823733b674a9c27b76280378f0269619d6e99b24bbedb93ef3d5e4c4210c3c6141875953e193935d71b0694ab1016d1e8b83d441bc27abe5b34cc12c40c46d4282766600063a31ea9014505cd4d795e1f80a5cb4be5f9872c3b47ef405b14425a1aefa59771016a93dbe691ddffbb8fa88f784fc3708077cb1b77ec9f43549814b8b76bea8b7c9fff739041c36f03edecad5fd96bab39149e9c0510c70d2f5fbdc867bae1f83c47548fec1c67e57aff53a1026f2bdd4ae90e859964a100cc1ebc13a69a640268e9faf8a12ab1a8484d4635081ceb4fdb7b84a0daee1566545d7b611d145bef280e597658738a02945f2b2f1ae5934a155466b371b80c85eea46179732fae08a63dd9d0b900d83986be6b58dfd40b141ffb1d8705ca6ca7c37cd62551f4469507fee2d06bd8859648f16f7800f03bf522f812e43f2a1f12fa6c422b5f6909de76d9dc3c17037761ff809e5724410b3746d4ac91c7e20b0ebcfd0e544498e02a19572fdd648a98e2d6f45fbcf4d06421b216525844fa1ae531b5a068a989b3c318ff437bfb74ce61f3d31c7117a42cfa8f466eff5f7833dd801f612f35436bef9c5a80de83c903257ea83c3c36c54d0b04ec674fbf663d40d2c0b97191ceeef7cdee4fcda5911e77a0f827e6f93cad9c3a91a5100ccb22544e2211f564322623d246161109d5079f804d4437071036f459bc900af0b0c9621dcccf845777fabad4e73e72569da6e5482efdf60949ce5d88f69004111c1ab166465de612a65106fa5b30b835efe3901d24b9eda6f05f1defc60dc81717fd8b521921e33cc7154d6d2953ab4dd5a6ea29b6e1e2870cd07db7b46f1cabaa5a3609cc85427de02dd854d90e134756d739946cdb9e54a509c508481ec975db19fbb2e7efcd7ffb81efd8f3cbb7ca7a5ec686ce10e9b4c4f23d090b82971cb4222275f2c94ae71ff9d92100f1607f4a23d92665e88a4f6f732de384034d493d5df37b767a8260557de05688e8d60dcd0eba9cb8cc4bceb174dcbd3c0ab5a37db3b6ecfb6a3d90a4f54a9f1117e11e0c08b0114f22f2d98fdd93c0b9fd95d37c0ab2f00701431f1449602525e849570df704adb353481713969a148546b680424c30ad24a75bb6ad616a104bc2d562dac5ff976bc81531448739e0284be053d85f784ed9c44ffd7825b0880c0d4fe77b58e6f8ffe821ce2a99b84c2876daf3452dd2f9aec0e59b7c7e79b4ee327d8df69a04f7f81a3397ceb25e820f2e6e0a919c86d72c03e639c1520fbc7b9727fd5571a0bdddc8153437bb74a764da623dc596db0fdaf5197e508bb8c93ba517dfa0c7017136598d4c6d9d42e6b0e47f36e7021ac941ff4813300fbd03b5c414dadd83703c8c356487793e10657ab38d9d02c78c2fe787399f69c86691715de596168d354665c4628f6288264c4aaf54191bcf766656f7b5cb049cfa9bf7d653bc52cd98b64c6d4e093062cbc4a8409b533c01239916b5843f0875c34bd09926f49a2be1b4c69bf1a0ecb349f51dce2cf36c45daeead2b6ea27d3a07c7830c26e5f58f576a5db314fa9d65e60630c1cda0b483e28da5bf3b9c6cd30f3798991a386be143fe981e7dbf4b5feb1f6a8147021aa3849f86dbb2d7dc2723c497a7cc940409ed98ff44f598fe89a06a527662c2a98e084cd6e69df8d5208a96099d02a2c9ef9d611b8d432dbfcb4c0c7009e588662ab6bb1f48c2aa5fa58ed476e5850ac17b9b8073623125950d38304ca09afb5b60d515e868e993839f75a664e61d73f4962e1e902985288937adfc6fa547c48f19af81bab0dc5b48f488355d0891856b26a063f84c08e0a231f198607eb58b0a3b8a281c8762abb78d0fa9e8b3abe92d143776353182f2e8e34c2da795acf7d5afaf329655422bd652522a8e4f314742493c80cf42bb09633608e3cd50f4b0f75e66c6b0834582af2b98ded544ec46b3acf6a84ce57acb1c106ce15919545f782ff70cf37733584a012bf048fba48f8724af17368489e01a5bbf50d35795ac6109a92de69ad457adba51866cda21cac69badf41486aef165fd4a57c3717f3eb9d6c5511254ef25e24053c9cb4a2a9e79f83a686f53b2 +MD = 1d5c7c600564a3cbcecda0efe08f5d375ee8135a7414b3bf9db6d53e + +Len = 47240 +Msg = edf5557e15473b747a819398c9ac1459ffdb4c97d0072c124a16c723b63d57aabf888147d6b7dacdd44ca9f3e1e2ef4d95c0a47b5eae44a122088a1725107b612c88a761e381accb7c6efbda997cdf416c26bb651c0393c96be3cdc9971b398c7d1d5034044cb957b90e12b3b722ec1dca3417bbd4ae21736fd219a3d3069813fb6e032803c00a5ad55474e7047b1fc9f81242e64c57f68874fbf50ca378a1deeba448a5a786a6ba1669abdf48307f2e3ee9c44f4da51beec386e96ccd195bd598e6a713b7469561c5753f024be81432e3e1235d9e40978fa49c7d2c1a92cee1495da9dafca7e035299fb6b7d44ce7be3121e97709d172515e653ab2528b02e84531d5623e528e208c109a68ad04ffbb6ed29d075400b41e3b08a7673dab00d3d589b31344efa70934f0727c9cb7650fe31bc874487466dd81ad4db3a29bcf8b418dcc56d82534d76a66c75b6a0d1fa4d825f126add69076797eb2ff4b0377f7d167a791c09c3b74769a206ddfb037609517a0854bcd38d06ba060b1fe8901fecd3ccd2ec5fdc7c7a0b50519c245b42d611a5ef9e90268d59f3edf3384d8748a7c37c493aff0ddb830dffecadd779ff28656b1ea511c276c5c7eb5eba596d882277d162a461c872f6d3f94e5f6ebff974af224c049c47e7dec886c43286c35cd16394a59522acc14a1fe4ed3d64cdc03f6173ce39aa273f195858ca1d70194559191e98a9ac1b54f1243b5fc45403f20d1ec83bb0c5d11aea09d9b6f78fefc01e0ad7a24e78a48c908374fc80a6f2fd5259a80b1669e5d9d55f72314d40a76b94ab6858f012d8f68cd02a7a0ef83b40a3848bb2b720c61a6fbbcabf8b3ce096518d49332b0519215a8cb42eaba21d6a7541fbd92f65024b2db13bc83ddf1bdee932e2b77bc9e58b9e0baaa0f34f39e95bf470d4fbb11aea73e25dd1d191c9a3a00edd5c5ecbee93abef9667825a113bac1e733c889f8086f6a1a962e30f7a932aa38198509564d828aadfe8c55d33dffa427b86727ad39f0a8196f1eeb29f1bed838801ddb118c778c01fab28b30254cae3023935fd749143f4af155105b7ac7d11591f62a94af030b1be3549160d28a292afcb3f71e41c179d6a33c67344d33def6d578be8abe0d512341d92d0c4c9f5b3dcc31b82c28e19ce50d39ba5d71ec4703d20b5f99bf7ca4429aa928dc9c758d8f19746aa6065bf19eb8b5cf7deed854661218d469bc3a4d9f782c4977c9f3064b6ee4d537e317c02a2b196f3dcde14d441d05e6a3bc2e936462ca5a86db00109750e9c085c8fd51b1eecb624515ee79c8793c5defc840c0b6e1eb21b0db86f19b49ebf538bcf5eb5a8a35703ccee62117b02301f4e7581bbf7cf7689ed06cf281e0523af9c8e7d74d86bd61cb01b38d5c4a24995b215eeba7bb56f5f7c29a5b6e9e865870f3bb5eb36acdfc99b53c05bdcda6efcb7e3a799626709064baf7748c09ef17444559c6b4bfcc0a4ff269d162c311c9ed07d50db346ad038dbe6d8403abf63e1dc6a957770c225394c0223874b3ccf069c315ee26a2761519d9e3d5fb0c0197a57f945b25d9369f11284f831b26412ce6bbe36618c2318db11042ad9bb27ae881770018e5af72b66d31d8fb7ea3d7440cf528bbb12f4834fc6d70550b27c7fa5cb6d7d7e0143d6051e4a5e5c6b2f602857bca36187021d2a3f7561574f35295dc45ffe03d93ff6465479f8c1adb062cf655b31f760d262f4db6dc34fe9c8180a92b627b25b1218b5065ac37a3a76f8b0a89c9bef28fbd12a3b3ebfcd0acbe856c70e6f0c0f8099dbb43b52d899d9ae76721f65ab57d50444cf569b313ab706acd1d758635ef20624deba3b7f346ed08b524203de65f468ef18440a2ee1ffef87339f687ad1ecea1af645c1d0928d1b59d9b31adaebe07b63a6956118a92d2f707cc50394f0e7c2488b6caa7f5cdafb8c68d10f33520fb84ceab95480e8b532f30df6de5444690b181ead49ddcbdedd7da02a557a2108ac25652e38ea393e968977834d2b34e741142066146e97ef5db7e03d8201d131c3679672a2d7131fc69e4a28d4ac5af8e0c72155beb419a2d8b5c969198d0b319a9e0f1516b9fedf4fbbe626093a2f04869b91ca9d40f99ffb11cc6b805e177e9e433f84091564f3ae6cdc295f6719909f2c12533497901d213669835b078e7f4ac1985dfe6bde034f2bac915bb5b33386d2f37e192a75c0d7be016f0e1be8ca2cc3a9e16b4fd274be62d7fc62a87453fa3ae5b9bf6c2311aaf3547d2e0daed5c0a3f4ecd413dace78ccded918b1d57855ce49849bef20960770b33c1f4f5938830d09aecd7a6f871aa431a5e2547f1725f79f6d3335e6b479d0be3a66637049004948c5bbc60924f09360f16412b9c6e76167d219a2fdf37e7dc5e6a7ec7cada4f342b02389202eb714fd29f27f1dfe16763361b3e8ced981f26acf384ce6dd0d8577fc99564d1acaa366de31fc24333fb0728aa669e1ed20b93d62bc07373d869a6919919ff86f97b92e7c971c64fccfaab5bb4598df94d74c9e3f97adf665cc8c968580e8ba93cad0c493864248b152cf6d822608007722170db44f939cdc3be670cf0ba2fc3dc084b9a1a41057f745991a6ddc39fcea7dc31c7f686aa31751328864766145b4154f8e2565090b4524823cdccca13d8556bb4aef6695a19da8fb6dd475962f9d359ba2ad4d9eeb118c25556d6bd04ade597a0982cea700d5afab619d7dd4025fadf3a797c2446fe2c8fcf48e5e399d3bd289d8d805115955d1bd343de38d6681ead1fd73679c124f87738abe085fbd447e65596dae5703a4bbbb36246b34d49a78c124cea1f87aae2423888aeeb5238ea996dba22efaa838ca2fe7ef696cd51fd44bbe1805fbf1854b779e6395dc5850d08900240b7eaf988985da0d6297d06889dc19de08191f7b59fa0cd68237c451afc64741c855922a76577ceceb486f2b05fcd89f2cd26cd6dc258452384a0ff783d911b9fa11f8952d0f612c67e109dde5186ab9f8aa625e4e8475752c9593c8f93c0fcaf5263b3efa37f74a6d0428e783c950dcd02398481d9150ade3bce83c7c6992135e24d2ae8a4bdfb56f2444de8e8a1b7657b0574ae5c6b67ad1f285c889dc3911a970675a39c55afbe2c3f62941d53af503e357cd33bf174a8c08e4f3ae1e75444bab61c8a52f298c7c65b56e6a353ff7493ef25563c4e3bb76529e5455aac739d9284a703903abf5707bfaf444148afbbc15bf5a0282ac4c35521a511d0bbf50c69999f781cd52b573894f818c1dac50c12a37619c62f15b2d99d18060bbbe278851d8c50bf6ce4b0a101b6c9e9b24b4eccec3029e003386e39c5c48dd25542cb2f37f4f341a7f3488a2f73bf8278486b3861aa393c4e35ddbdc2330cef311eecaf0f61c96a2d5f093b45b66253d4c54a9e276cafa4b912e9adbceded28f67dc34dce5a3a02a730dafb6c081a266cc9d34669fef5ddebd97950da7896464c6838519c68aed0bc6fa214ccf04fc1eb5cee774de971b28d9274ef455e7111dde63302a0118d9d15234bcc8cf669edf786837bfbb48dea4743c4d22527e4504eff9caa03e03f315954bc6cd5a2d07238507a989ce7b04cc0f65041a15959cd4abb5b8fec5a2c54310add3bce7dec1858c1bb17580a41a2a1b20084e17e374e772358f98409bcce454e9683a00e26a7fce22f4056a6aab29180bce20e1de69c7d3e7c32f37458663c27cf8a72dde4e6ceb9bc5abf42524539676ca550bfce7f0515ad81602366e6bf9e709a6d738f9e76514bafba67a122416ff813ceeb57beb7aed42df39f501475ba61f9b85790979cafc585709cff1350a04875b129e9233a13da7fd66f7cb807838aef7d114d99e7dd10250969d4de0e0345122001ec74374ca5bf2e1b549c1c01d4c6e12a306cffe216d7ac56884c259fd53444fcc87a555f1f35262c3e875d3d25c40e29a0d78dc6bde281ec83253a7ce12145a1e5fd3d562f28e329a440713e67332c9605a43991ef90b1b22e31f8a352224a79abc59638bce2909aed90020c805962fac699aa4c93276431ef37041b0e7f7b0b8399090eb0a95307813fb5b05a7fd9dc4d7f89ff91f0c1ef2f0109ecff8001dfd3423edff2c654f9c8153431dbecb9c4011d7db0d133f1765755ad1f0c6d047d0489dcb36a81bcf82ada2797edea293a4a3d2f693a381c4ecdfc98bb1c8dab6e7f348c930021b38a0f5535eb77bf51c790a54631b64668fdfbbe73c819291f39ab0bf5859cf06039df4f073460b45af23b1e6b112da6000d4762e64fea898866efd8c0942634ec8c0290457a92116c44b370460f85a10a061bb2985677f50d7db56194c586367f0be0e096c5f41eae4461637e36a77daf6ede7432e8a8b5d607646f1a22a43e3f3fe107a21e6e23497aabbfbc8b7b8216cff8715b0a65100c8c63caf9b2689357af6ecc128ce867656efa4ba718e9fa68b0d171bcc69650d7921c3ada7dbb7fede4edf88e184a3328a9b7d0e8e4da2bcc9ad13cfd2323bb5ea3f687658c83482a64c853bdc97ccfbdb2481626f7345e6b146099c52af49aca46597841e6aa3735b965a548a767834a1117e50a5ae1dc6ca6e651bce1f1344204add717931694376a2eb6d6baf197f84f8a053c14c7eaf8d8cb2c8b5203d3ef635b6a8e9cb1a75700894e100b0352eef30b3d632dd0d3373377f2da8510bdf9edc9fa4f0861b7be02e0349ea186fd5585015727aee3dd503e526b5080013b872a604e01df100e93f89a31278460e0548dd419329ee7526c81c55f964dbf95c1a188304d2aa5f2ff6b1f0d53bd7b431494eb4c2905c678b285369554f43113d0daaa66dbf008ac2ae2d790cc53bd6ebc21b0b8b7eb67984bd10ed6317b3efddc5d2cb9523921843be52a81374e10a875bd8a248259b2f95eeeb6ead5ecd09a0cb378f15b0dd8c15afc80aa3fb75b3b67efe15932568fe514629499e94ece338963f4d69d7515adb1b041d18a95866db93f1e2070ebe6a295b712ab15aa1f107bf50a2fc178c08e6588d5bfc0f078879435a73fe41f9f79087497e70007ad7909f121c66e1fc1ada10da43c8ad01bd01f5ae57e35faa2b295228a16536d5fb65be0a0614d7100528bc51710903e5692833540a70b84d79566485500b5e51d0e9a4af1c9057665c54b3a940279411113e74f218010c6276aa06e5f6dcf75cfcbeeb57bc63f36d94d0af484dbede2349d742eeed3eac778786e1d102549285d337eaba620a3ba4233f07a50639628a876515c1166418fb408f6dbd0efca03b08f73b3da9ed8098ac024535e62191b53e6a861f001be27c16260330795fa10ae26f4567f09872b9739cf0a18a021c31e379ec3f56e089689ced5aa1ddd825640422a1afd29572953e91824e5e45429f1af5d0c8674c8e4f2947dca7a900add4f293d8abdc6f10aa417282b2cf85a54b5980dc30ddaa61ae6fb7f1a877639aec124542b25a8fcd6740a26a757a2dc4c5038d571f169493f4c4c0322aa56b8d0807b97879e962195aa0b3b1ecdab821aacd8de9d9ae95a5b0bd0336b4cf92e4b72762f25915a08502e628f1af6dbf3c5b0bf50cf702280770dcc357cd6284428815d448d64ba580fe85749223af9d85543375290dbdb6499398b31ddaea9a26e9477fd48817fbad8c03292bf01cfd8d34f860c6643deaecc775450173e44ef25920d83dd4e71d5b59e3a9177b3239c46bbf5a7dc10f10515af6eb9b1edc3d4556567fed4355752ad6ab86fd5b8becbb66fcc4b77aadd117ec922963322ecf807f4cd95b69cfad8c80cf4535e78680e2b52531fc179697b0eaeb80c264789044327877009ed23100f6c36669c5ce80dae4ed24c41e65febcd44784511c3609f0fe6dcb8588f98a18972c6cf16ca086f464a90f97f578508c474a9697cfe3a727519169528ea22353f07ebb7542b8eddfc2fd64f0435a57bfa27959fef60de247ca87b2e036688713711ef46dfe843fed7e3ec7657e985eb77438210f351165e2c7b54ac706b94ff7b7918a33e67ef7bdf4f1a9500d9ee0144b1b9e40f39a8c88e7be836f8610c871328aff7f9125afb1c5ba8d5886fa765685a8242cc805d09a98e81f521b0b9b00505fb6999504b2797f0dd5d76127abeeb252452b18efdca869d651176c063235bf74622a5888ca757f4025652292db5d6f9e93e46cb50b22b91ddb17cfad1881de8d64aa524e32264515fe7a51e89f130c0172b13a01d6aa25031fdbdc4cd8651bff508218b1940c7ed3c39f558561b0161f743a1732e99f3c4a91ec0871dc50164e984a225f6aa87b2e173cd3f5cda52c4d1ae77ad49e824d38d3c0dac8aee34befae7af5a4108ac8695beb23b62d72ad1ed941db737ff3f67247e2d99dca9f3b77259d192c4013f53a2422eb432b99170921c1cf7c0854b67b70da7b8db9d453697018f35453e46004e26c81292298f890a6efbd7ab2351bb8e1103704f733224b30871ab8d67cc75e29309bd4bcf2d049bb342bec280584bf1b1ca28ffd2c2670c95ff5c6423d69aa5b0771e255272c98e137a14cb4568ff2815834ab463fee8ead1c2b1911a6e57e1a69c9be75b67c02bb52a408f1989bf7a66b63d36ceed8f97e44110def59b94dc9c009d5b9112d2b9c2daacd6a5c47331cceb694dba97455af504e2115c6639e0bb298d479d7de5826112bf68902003936eab36c1cf05f07a2c9490f3f6d52e332aa1d17426b0e2ccbb5be10c83a657e9757d0c59b63e7940b278804c6cf35b1d12f0d3aad5b1b2e0f83c7a8c265d577a08ea53de174ac9f4af381ce465c5a8e89b9cf9b0528a3b063f3ef2ae204dec90507973199932c7de4a5dcb828a55fedaec2fad5044436785b8e7b23b1a7efc7175b2d4cfe5fd5a45ac6ef4f083aa433d2e31565053e21da78cc220fabbf970669e1ddecba3b36c73fdf301f4f7cc615788285b79287145b2e354a5b5acc531b7f343fad47a5de4ae647559578fc43e71239e26936bf7c6efe427aa3294ea26ac9dab8eb11202a93f097b64e0f299c4d2271a1e66c47d8aa6b8c2953a1c71368dc4dd042b14aaa56e158d8a59c853d9c4bb25abb9d90a781f86adcf95ec614ba18f62c20a285dbf82b0333388bbfb678d0746355655a678a17771c10babc24c3127c13216f524dfc501f6c7377197557634052403de597275b395d264019c2085b482ba162406ed7d315dae2c92328bc76aeae1891c2c4ee461a1696798f8b1e55d2ec4d45c0cd2f367f15030c7d1f1c8d07ed2b0b926f434aa1df0de15dde6994a4cb716463d746fcc38160ab87e6fc18f48603f5a504dadb592ce8f2354a7e8a464fba58aa1bc3888bc66840c40edf9ced0f300a9b03f99ab886b426864dc1c93fef849cf409298c205a9646b2053b9b69ff4b94e51b33eb3852fc18c156d7b3ea316c9bd23dfd5a39948737f2489496f3cc933f13892e6f61382d3386f434ecedabdeffd5189385202a979ed5677f1202fdc36396fc2d79bb9cc3f147b44dc6a2c558137d27a09f7c8363e60be06f9f201948acefd2d59cb0075cec740596f3b20464812af9890bc7156897e631ca80c3958f659eab9b6ae6ee548fac66b4d693ef80c37efcd15c7877023ef4da247965f9243823e50346b8d8475541660bf1b0ed3954e9a00df4092eed55c84811ebafca939f002d91d2be5bb1c7e37220d791940aafeb91937501837656d119f759e9705a04c3e3cb715fcf0071f31977face6a515ef52ff651fa3b39bc9fbe6946ab80e403df8614b525c8cfce00da95ddcfd6b9cca709cb1d4baca41194a3dc247e72ce16c3a3020098df8c469d23fee30e7fb083718d76297e6e41d04068b495dadc74a800b918063159b276188407bd12bbb20dd5498c292ad69f93338ba6fd391474422746cb1887edcec7038964ce75115ae652bc717ea9ac19b4de8b17dd11c1497fa7ba9fc9f5025dd3fe928a999e2707876a64daaca3254cbfb1c58ba81d4960baf2b30a9d011ddc076a3deda0f653448b9cb10c358ff8b53e5de977009433567ea89e900454b6b5ebd6ea0267262c8e4d6a4f9aabc88ccfab23556e591f15a75529fbc492385397fba5356d7ea6196147439f0a61f5580870b2a7d6342656bfb907492cb9548aeea1859e8339eeb05a23b90de00a9ef10c397c3f4304327d2c24b1051cfc11b32697d893e83b7877d54d5b3a90181dde276ff0aa394bdbff5922c7ce39dcf862dc292e9410e5cbe66f4e7aa3beed0a76067ea0773d9d8b63e33dbbf2e7de81107befe84d71eb61729481c7b7a12bdd6f16001c14a45bb92146cffe11cb734452925695fe9f9ed1a2c19193050b471f1fc27ec401222 +MD = 9e12e074960f9d3d59a9363bbec9625d7a6f1f5ac0343b043b57ed7d + +Len = 48032 +Msg = 32c2c3a0a04af8dc989e8daac785bfa177ef4ade647fdda7cb46cb4dc5d20357d36742dcba8c873191c9c8c518b0e3484b1ad71337b334c40db9d0287500bc5f243a763ab17560e8a4e571d2d1e42bc3e437cd4c3c93c967fd5f785a60bc0dde4ec3c8812e0d6c49fb79f29a99297f5969ce94521b2684d7c3c32caa2f0dde1e788a9e78d85d919bbb0db2e51988c754026894ed7b744e5e886a52e28afc1765cb1861e9586cb8280f2a197af808ebfad98c34e404860d4274de54c8188fa0fc6ff47a9a5543ca361d578f23dfb2d39413c2df015f63abccaea6982582d0612b8ba64f5378e8ad0e0d1c7ca6768c6869db92fa0a34130e445f4a88c06fc7433948b74ade69654bf8080148cc64a190c35785eec82a9f20f2ae528a63887b2c70cdaed202cfc28a3b368f5b5d52f634e8af222303ea0ec71dc44708d475f4051643134e8652055421be4d1e21e7953d210cf101831c68ed0fc8b169dcdd3ab774d16f28339b3890f0c8c3f7e0cc8591b6967bf10f67b6790ee3161543695629d2a048c7d1526226f17e7a4f61a8ce1aef7447597173ff53633d0074d1c04f4278d72993281f8cfd6c06f98f6d2479be14cfdea26fe94b6356fdf6ee4e8a2decad9f97f4ffa8bdffa988c81dcce88c676ccec635d271a2912e4c81eb8171f80eba201c521f98fd13ef2d7063469b12fc409a897861b20dc5355128d3331bb98fe7813f1551955421881c78c7a2e51065d85aaed5e65593e7b135730e2c3078597ceb89a55b47cb12ba7e68b3aa70908a7c37beb327013ddfeb1fea0434593b53c185806b055869ccce7bc98e24e199537459407aee5f12952b38161d133e0c65fe78aecd196d37380c3a22c0d9e334a807e7bc9101171af1b9a77ec29086f2777aeb9b345d313b3ebbe4fbb1911c68717f09bb6228d05ddcdc95aa5975d9f6717e07cd099b497fc724a0dcc914343d9622e9c4542d32e43cdd2a234c88e11e3b52f3ceb299600bb990974e7029d4bbff39ac5fcfd7e7b6fb048d7001924374be3ed82699201ce5fe45f1d80e9aa4eb940b7d143bed94dbff99e719e25aaa00e08ade5b24f725177c8cd5030b2d4bd43ee2826c0138e45c32e45fa755aabcc98a7d2cf7bde824a91dac6b56cfab727ee304e3ee87807c407a2d1ea1c44821d7a560eb82cbb9c1a1c7efdc59c2dbc0f26cbac923368c078fc1bb4c8f96fd8232177b4282b633a309649b50944c87de37c24c5c9176262b51eed710f9339187e3ca165a81e51e73e8dbf9ee90d6757355cb02c3c2b014908fe9c9926803ccd7f1a4795b06c242d8471451dfd4c66e28557124273e4a1fdf519ad9fb646e761b648fec6c9ab4667b2df7eb4be8863aa53e9bf9af8bae0fc09de94f7373dc56fa4472b6b5c4235403a26c0e59557ca1911831ca843342acda7dbe72211fb5351d9a34205f0c77d219af5b0331a2126b94ec1adfcdbe70bed6f8018b2eef61db2b6dbf7292fa19a9655aac13fc57af5f57c14080b3b29f0c5b169ae2c16b4810cdc6faf475176fa18ead4783e2fdba47829f8af55e99365f12e071bf031cd29cabaccded31eae2813db0149e0a1b9de9bd8ee085f5fa9f7fa35d6e6a1c8968466c2720a7edfbdb13196afcab9d39bf0dae972a7aa05e4134b5967a2a333b70d7b93fdb68d2d3c01dcbe3e5f1c2df887d00c1501a894c8446f0917b4970b8541839fde77908f9fa68fa23b9b9a296600059153baed54cd07cfe585b0dfc8a7ace95682a22b6f5f2bc4f335e4b64e5af5d6299d17dafe68d9f84f300bfff384cc474898daa05500fe0721abeef3255dd5dc257fbd13da323772d6854a6a04b30c17f66f85b1c91b89e0ae0bfed316d52c82157a2f0a70afbcc9ec13d0c084a908c5e09547b244057bcbf8e4b8c8bb5776629a0ac2316a47b668206a5375fbdd3eeb87a875344e653033b2a491668b5b2fe803903b2b2f70c0d7f3d7370cc2d61af35bf7b2ba50a143b23bfa0d1eff66c5ace2d8de5a28d17883d708fff7721a2977ee2164b6e34022c22523a0649ff0e40bc8134040fee02a065a6e02c8921fe6d3beb42fac8ec859ddeedfefc9d58fe79f13fde5620a0361d9fe8503f2ab5ddfb13e0e681dbbb0558ff97d4fd148aa6cd166f7524fe2d1cc7923dc67f8166a707afcbea28ce28ea232e59a44fd61c6d03d317e0b6d01d1b65e7ad2b36b7bbc45ab7b33537c9bc9cc7133a563b0a96bae5cf410754bff69ac1464065aaf33d9cbcd2a1b1f6f6fd830c5542d309d981f739b3f4d246f34203a155ff5d235e7297f5a89c45ad7b7507b99c7901016a638bc8263929d39388bdcebff1fbeb20e41ecce2acd9a380ac919892e8c96be6c7de5ad117f445c75130102a1e2849601b970a28d956212e29876fdd96138e743258b75c961be2b924c42e3f8fca84469e6c77212ca26fac745307258bc8b33d2e61a66ebe86f38e89e1f2a54bcae5fcf503db76aca6d523155b2813d0ce22684261f0af981ebf7108ef22045a11b4a7a8c6fecf624a9bbb9409994e6c0f231ef7c05dc92bc990882a568706c58639723f1ba8d25477089b7ac4247f6772fe87d3e6b5617f70acfb767ee9519310bb83436ca02a8c1365ec4ff38f4ecadefaca603bc0229dfc5cf375d0108dcc9984023c20af7d1207fad59900a3629c3d6010262846b18c53e898adb2c3637908da18b09f9d74ec3c0f7fe2522864e5767880ac130eb9545f9811a88dcc7aa14506ed295132b62499ec12b151e6fbad718a437a65e1e0fe06b487eecaf17c4c374fa82e9e35ecc205d9b58f65a5d0fd16de80188787ce9132832105cffb0e82c8ff7148ee70bdcc6a1d9003f62c8bdc4dbc600fdfc82c15ca4e087706b1da4cdf5d72fda9a9d24caf01cc956c44d353fe6b0be5d76ca293b65d63ccd5dd88b164b0d0d837a9d249bccd91cd2fb550691134a825d63ad711def85b8aa645c0ba4041b65e003866cc79c90634a747ab266e5f5f5443fb749a2a67183be0b2296e59584a196d1d36dcce3c54513dc18c92fd345afc8877203382f1c166ebed6bd5983cb490e422e981a370a2ac57ed9ab6a7fabea40c7684e6cee07e942fbb2ff7e5371d4bce0d27c3e0ab19ce5f917e9952fbb6d537c048baf67a794c14e71ddd298fadd394a79aab6d36e13ebb76e043e77d6716711c13b8e208d7160237dc8e4a8d8baf9cb8e84032592184d56466bd4fc9fcef22548de67ad1c37a617515123279e0675008b98b175b02291323bb0e70279be8b22e5f4ea71f630199676f72c79bd384175eb6920586abb4df7a853e34de6d8a8a7331f84f38df3212d693b5f33a8d8d5884865fe22044ada0326d568238995c10ebaaea5b656096348928e39da0350a7d40d2fa9872f79dbd131a5d417b47e7ad5d732eb4ee0eb3684ad705ad13f483ed5b42690dc4ea0ba0e5355b5bf0a1b1c99234cc401b101414df48210adcf281109d7db62b5e457fb0706559b7dfcc44cd5394cae9348f3ea21122429e43568b4ecd2ce9d8873181557c535d3d90f3281f663b329680b2bb78a80d6d508f492a0fb5f608fe88d69af7d0a672d54a3ce32993d20c2f48a211006cb3ac080af2e5bb1b841d84a95b51fe35079d6757cfff52a4015e9bd486cba025b906aefa7a44bac87d2f5232e82fd3731ee8dbfdd504015f6f32c46c876ec29aca842ba808cf74848a47506ba7bbdc52925a19857678a08ec58f9158cd84cd948c2c655cc50f5216536c669cbe7d829a0cfb0a37d9e596f7aa7eeadf7f9529dba708455ed88bba487fa67c0c55fd2d1233d4945a27d24b63c705b74bc5273d37c420b3f56acb15e0b7fd7a0495c44683b0eca03887c82799c42fe0e2c8c473708b7a986aa358cca7a27a48cca55933b52a4c1717224e926348014eedb0f3324da320da05aab94565e924ceacae445e704afadf4020ecf487fb85e7b3a53de397b51a630ea876eae23304f5ecd80e2d7cb800e2fba82ab5ce86c2947ece28ec16686e19cdc41822e52920a3d34a3e0aa01b66068fe2913d0091c03e94533eb6926526e68a272654387382c1aa2d5c5ca51b323546f7a8f4e5c388cb3e5d07a9d3534ab18cf828eaa1b83238b9a8f08b54616e56660ff74344c52125c4140a2da0dbe0621c60a74be9a036ee48e483ff7395215138510790e73e93326e9fcfabc3a5f2e082872adfd8d598cd9f099c1fca5f540e04e65f4494d7e7dc8426de89025887150694390e35fc60bc063ec45523650e7412f688c8143824094dd3c031269ca8e8f0b05c40cac094a2c4ab82094452576da9a808832f0852a312ccfc09f71b5c4187021cdd5dc63e6922795ea1f6cc37e1122469dcacf07a911b391a7b3c7aab0814b3004db7b965f868d0e086017bb7b69693323d5597a2bbb043a2eebf649d25dfea91f8a03f1237ded791202d09ded57b1dec0df0a6d50919121dca467f3b8130d05547df004c0ecbb7f8d7421bb52609e91eb346c418639dcd13769a738c024f8dd6a03ea61b6579979e14075c42918a2050991f9a75b1869c0a5c83e9989183489c6c83d687242ea0093d45718fff44e90b2643cff3db1aa88ce3c889681716292d14773a993333fac3bcc405a456806dd5c2790c9ac9a219207333fa037a4e5913fee27a587ad0cc54f74cbe878086d339d58af9736465174f748ae571a47400d6948c3ecde24c3e4258a54442639e44bcc73f3d8592adc99f4e96f1bb7bcf45fc3d3c2dfe51f17a17459640dde910e8e8015e81d93cc0579a6a1fc7e8e9a9510f60bceff5b005a55a28e95a5ef923e644e9af6c754be7eac82eed0e00d5484c9767d22dbae8d1ea94686439cf7a216758e8fca763a56aaab003c76f0c26f55d1ab9478f53df9d6f4c6dd08637565092ad670bd9ab3491beda52769213c6f8ac22bee2bcca7fb15c0a9ff4e89f74f990cacca5ab53dea44ece81c31e1d9c996236de6d5d27af54da57669a080ebc6388378092c5658dea8415fa73bc339020a7df81ae197056cf11b92a888d8c16d8a37dec9acee828ac86362351135b8ad4a2a30f6f99af5e6a28ba538720226a9e092377856fe597327cb96624cc9f72ff7c0df07684ebae6d47e2495f69d6a0fee1b1881a4f63c2c48f272ab38e0730e75ca28c8b832d2e2098b874d80fb2a04053b08922176a91aae606d6c7029aadd46bec4c783e7cc6cb40c43dbabbbe52ac89a7e1666e03ec2babe1d428cf60cf10d17296045ce05eb56a8e0acc14019f8aa81ef8abfd34bb91033d8b9e9e617fe2b5bcd3f68661de273c9f44d7c3836d21db9d36bc6b07e62218a463f117a6a6913f536c1763082e69de7e54a36f4ca6ba48ad036061845527129dc4e8e1362a6699bec72f9cdc37c379b3a0f8c165309d17d5c75e87b2f0e719b1164da519f5a9e8854e06d8e5df7d35c7929e61d5f512719eea7f8499a0ac5366c1e60a58eda257316863c02c0fde3941915cf6a4db617e8fd48b01414bbceb472d7cb9fafc980b497c0ffbb8b02faea904fc28daccd16530ed4aa5b3da6007d9c3d6590709d52f55f4d33292a8b9bb885544a180afab4f099e8319f636e0d0a6e9be9388fb9fe9dd37750dc0e1c18964ebfd069e6b3863a34d00041245846d3508fa0f84bc3f616aadbd334c419240c82eef023aeabdca8564870f10f194060e8953740333fdc183be754d3db273073986e13b5e1385ab3749e1e2f72157c5bad2916b0d48202eb1d263029c1bab06415b9c5911ced72f4266d624cfbd16d0c04d7c9babe3f2d27b5151fb706383666715e9055c03fa7d2d212d7da0ac194fa861dbade4ecb9d569a305e0c174434f331c8ee7459a37bf80e4b09773d8a86bfb757848c14bbe5f03304758983533e82ed953a6d77cd61ac41625174f280b4b3ff3191548e94996d261e10bfc8e9a5adfb202ea178f1fb8801e55a83d848919ff4287bb83aca1a55d9c99a2f567c2cccf10615d0fbc59c13c6608f044d46cfac0ca8ae37a7d10b22c4a39c58ba8f167845c3aa5c6ecce5d805505976c00fa180cf3e9353445dce6c8d4871bc73a705388fc536a4405c4b2d5531646bdf17c9b6a256e58b9ea4e68b8a04c4db00387b7635a745592f084ebc2c801a5408d39ab63c8dff51156ae6184184f024eec7dbb9bdc670db796562ed01c8f5bfcbd7b6e7e4405b3456f44f8b5a35ae3aadd9c89baecf33bbbde81a385b88811f96a880f4301a83b5b1f5756d2a83398cbbf2a4648f1df87a7af4f746c02b46e407aaab43a6890345e4c31a26391a3c8ba78701dcb53f49882f306c60a63db1bd8d72686ecdf844753e01805f1c5721b7df2b634cd79fa175491efc4e944c4bfc96747ace0cf4e1c44c255a703ac683b1e1344b3d5cdb9ab25715293900b38031c14544e9ea1b45a38da30af21ae4dcda4c561c36cb6f8fdfe7b775e8722ff8fd8c49496afbb7faa3810f045d333e87c18ef568c189c81b5e697a54b57efe10a056150aa9a8777b34b4cdf93a2a302ed81796c3564e71a7ae6ad268287dca61cacd2d1b2e76b631e797643be156663cbe74ae8e6d5008cf405a5402c9f4f156ed4ff5cd71fd10c92ca7665f1b5e4d3bc534c15c9f54d9ecc4b673c7127b2f7a885d03c40c9203bb847348d5208861a68cb663a034b371aaac0db6278a86c1472c72db7176dc0b638f799030998b2ff795a809ebf5f27c6356deaf96aaae53472a3fe1781931945b9e38b0e3fedd14c9405838a23ba836c16597a4b6eb3851f53202ba2a8c493b2e311f3f71c8d4cc763d6554657e3b4d2f58c749ead4db49cbb479ca1b48796c45f8bba07c70289398ed4df1a846223c1780fc13b4fffda75531f3a5bcd658a42d559c68369d4f269bd07094ed2c037004ae9476a7b515f70c2b0eb1a19e5d7f5ec8101b62989ee219778bc29688457591122f07259ccab56b0029824c38fe5a54d0d52e730abe427c42edef46f36ed9276c3a39d12f726eec71e2ac3f1eb1c19a004a05da5c23e44ed3158f80e5f607420d34831ce5b3902ac0b873ccc82e51b8c6fd561b1546340ba8a137a6e8618c7b85ac677b47e4a580ad199da7bdba671b955d83b7cebbbe3d240f6c5b6337d53e56107b7edeac3ba877946e4267ec8e4d0be91332d0eaef5de5be8200feef7df50eef239a0270aeecb0978a1f7f4b43c79b3e891ed46a43d85e4d3d2a140ee35a00c6f44f6bb89bc7f8c165a14c4d1415b3ac59ce319058470e29e2493b0ca1b7ec066211730a6ee4b070858a57686bb1f5e109d38113992465d315e0ec7f35a9214bf192a0ecb4ad68436e0d3933d716c24b1dc13b6a82fb05e74c8390bd1ba830f627258db5f9ac90a883dc5a25d2ceb9690a19d8fbb2356eb4fa93d06cc02fab93874c821caa4cba2e6b5a52b4eb444bb9634fd24d835df0faa4b41404dfc9e1b2769a36773318553389298b677d11e9ba9dc5cfd692ff4cf6df46e40ba6e183c18971036c4089f25661ac8cc424b213fb2e3e2a3d4d73c3580edec8e7d210f25f447381524f3c02058965df416e9f6ae9a8fb69d83f66048cb7ee2b2fcdd2cdca1c2428cfbb8904df64d7fb75b7445f047290173dc53071036ee7834a169176b094d5723b220b9b32989549c7ab5b50ea3f8eaae49b8da96aa87d89dd38f77d912339f63aff3e05ad790072bd971ef0f95469ad530eb80e10d8f2775f915f42fa6ba41d35bf9b04be9acbeece1739bfb04593970fbb5a2f9494f90427dc43774ac2c66fc1ef9ce8d4822a168fa8260dbda7bee0711dee8e7440f398ec664e8b00ccf356461bde528da3dda268d65e6b6fef1e123da2ef9b2e8174ae03cbdafecaeecd7958a0b9b2589448eae00e5d69458063b4bbe6d7e621baeecc14796322f7aca731703ac988b3c7ee889bdcad87dd001240825621e00c71d46b84fb91c8158b3327032688562db340d3e2adc937a4e29c3e177d68293d3ad824dbcec13ea30ed3c2a81060ab34daf2855b1e2b092bac8415e1c91522327a3c508f6f8bf73eac1b8cc5750ce857c345f57b9a6d6cefc24c5077d5b35b9ab4a3a7265a5ca236e77cedf1b0c7ae04f0edacba9eeae34fc85786500fcd35b47e9061272bad903a457a8ea3703b5ccae83c239eb83e0cfa33582ff0e3bd514e3c754708301971974a96b7512fd285281dd3f29e62d13a4d77b0a5d10e1e3e9672d4a150240a96fc7b4420914c27b79b062782402b3efbd819e38086cb6a4e4bb6310885540ba0d83c1532da519554a245b96b1a7df1e218ae735878c82c10cc7b1cf51e6c970f99218c6692dcb5ecbc30fc0593d7745d8d89e2962d60de169745faff91ba3733dda01c44514a13f0676c81fa32c440feb550b3c22b41fad04a8b4d7075e956ce145c4754ac260a00326ccdb17dd0e2161e775944e8d7fcde44cf97003166803ebbaa800ffa0d328c9b9651b3db69d264278265c6ec8f6e8114977a176aae4df6520f68dec14c1806019d8079e20b8 +MD = d12c093caa6eac327c6a36dc80ffa41b3905029ed6d9efb4147fbfb1 + +Len = 48824 +Msg = e01f2ae593994249a4eeeb942a6b8ca7501a5aefa0f1c139824806c8ff912aa5cb4311378317e4133377b3151b335fb0b377b782ecfae12cb977fc60ce61033ca7d3f4d6cdc63218558628cea96730fd8bb3b37656e891ac8720c3c37dd13fe97db61be9f90df6fd120394e45b6dc835e0b897f367239a61f52ba4189447a55654d6ce999056f66d72d63d82b9aeef01ba6dab20a513c4f50a81e7879c2dfe2b341a550e1908fb0e7ee86cce4c926c0922ba36269a20d60dcf08d43a1cea120f266af76f1c8acd883d1f68f09b8209f41f87822dceb39a544aa9b2569ce6a9ab30aefee421463484b8647b112fe48c6bbabcd55cc832d66f854dcb06a4898ba75dceb097b1a3f8aaf5a0eb598e21be15fa4278db1007530988da6570bd3b7faab2b356ad5309e0a1feb901ef42a2679be7ffb3d32e98d9c8593ac9bc6e644f5c3943375190e0b612db9905fcd3ce4fa489dccd6caa4f305402533f13406cc167f9679da9ef9140a492263fa7c70c3dd9e9c110cd0d931f568b0f0e9dbabb9e70fa08ceddf88247002d4af619a8c6fbe10e97c21fdfcb6f76fa54808164b9ad22450c1316331c92cdb3eb7479fd634f6600442c89a661e85b590cdbe8c6cfb822e15db47c29c7ebb42df3fff04f4b020dc8b29634ecbc52aeaf1e68f96963851bd6e1f93661ec185da249e0a625e5dc806dc747473844751605726fddd4dfdeb32d822a6d63f1e26f1ad55fc2079ba467f76d89eb1361193c62f038bb8fa98992ed268e48b84011939e7fc36d7dd424696f8ba248047b05c7ce800abc232b4e611eb76ef0e73f6d70342f56ce10f9222fdc09db8593fa0260520a2f0817cbf7c8c81c128c7858bdafe7cd5e0e4770676146ce7ccb4846d8aff476edc6f3f34a6ef43dc245f4f2cbf7bc412454aba2bba6b5c4cd41acc74f5bbeac8d1e400a11fcaa02c643e2745df1bd73f0c9c3f7e5a632d2161046e62e0db894563984781219f05365adca483c44f14c0a9417d8af0ac4e09e5f9e093f6ce917923f4aa4166ed018e9ab34d5309960b2b9df2fabdf7a74d7ae573d9a4821591b875817f8e4a351399867a9830198138e46cf94d93e9d499d8e20aaff12d310897faa75db465f7b9ebb06b0ba76e811c9f98ecdcb941c4b1b86e16da2652b174ac060ebb5024a573099b3d2e2583262491a4462e8a99e8239dec20fe909d1754492a002efe10decd57c9496636f1d0ff8f118db9744ccf7e0ddec173ec56c32613f9240efab504376aad184a683521fbdc633c1422f4eb1f6cc870d0862a457880e60301e28ba62fc6c9324115c789a7fe0bd9c5030cbb864f3ba7aaea923eaa1462f57e41ff4534d0a02ff0dc138892888ddf22910ec15139aaee59a5f8ef693302a3faa5aa61e53cc459c037c3af39f06bb4d359658cfea098bd6334f90804814766fd69f77c9f4fa8583595325e0cca28034db8cb7eed08778d5e140cf92a73a3e6fd2b70f5e1adbe93d790fa25897a4543086b8b37baf5e9d6b0cf9f33398e9a8c8046a17e4acb89a51c9785864e8535ec89be4f27c6ed4231f1c43a56c036adc01d67f376492d9bf47b355f00ba7f8c78483d61cfcf532327a79e68d44d00603a2afc016e5b48681a89d701156bcdbb6eca657da002cc0f1038caa52c3e8024533f6f35d6ffa0708fbf18f644b0f4454896c2ed492fbc58942bb579cf131a9c93d15e1b30a4ca37bc8167b90f5897bc9e23e25b1b94a8b22bf6fb415d79442b8487352c1bf92a4029874fc3e5910c73c7f8202197e0158e203118a637cf91439da780e2f95b450c7f173d916818d72d5e9a28eb6e70875f49507a12ee84968757d8cdca4959af0ef5e7bdcbf74e9c2bea704912dff472a7efdbbc11f246a8694b81785c8c62ccba564f4cbe23a0a001c4112d329cba6bea9c493b2dd3746b6bd1381d24430532b0f8d466f26dcda731a40321b50550e7b9c71f93b1129c44018173288c0dbf5565560d99034614065dd2bce324aa465a7808c54266303cb6bce4b9372e3d0fb95a06516f6b3d1231c908a4de1c0c0958b7c9d0c397acc458107380a5756164e30182563684c346de159e617ee5ab2846fb92d893dff8c19c8ea6400fec1b5d46fe42729afa79305fc60c59421bf811c9a5ec332f9994b2f89a059de30cab6779a2df3d1936bf5d3b5ceb22c449835435694e87137f1126f0b509f0ab51c201ef81a12c1dc4163bf54cb32471d8cd7e3e98323adbdafe8c19823bcee555dfbb1d2d40b6352d0e4b1207ecf4d76446de39c52fc4f547ad60d76413af0d8364f177082661ebdc18091621010a61567022bb72afbbdc4fae33beed1a17a054e253a1a4dac59e4bb3f4763a97dbac29e9ba38232a960d5d8173348fc77f3a54e8401185d647e90672abb686f9ff14791423345938da04fbc7addcce946c380dd7554b1d916f4896c48d6bc8dfdb46be7fec3477430e6f94d1521c2c195515ea4ff1b2fe94b239774a27ea6292069f549d83bd1fe18989c34efe871abed07074a2a3ed8b7897382243e9c6d6c8e7aae5ed6832b58cf200019101822d0d54c4278fea6f5685b4c112626195a7dd14d5ecf03839dacdde4eda2819b1d57d588d9d68439cd2746160e2262dbb584714ccd4364246f1fc84e2b7a4957aa697524920bc3e0aa1ad4393fbff8ccc6abf4ddc263034ce8db1ac481477036112e3e8636c0c384d2698c1d6ca6f2d3d418e46a06d7e7e451085ab0b9b2ff1f99cdb7178d9c8d0b8e3df62a5f7f57d729f3c85a624618d5f2cd11799962fdf98b6f693f5e48285f26be9bc9dff130c20b6529159b589f051353c687ea0072ae2f3bda67736b9c66e2130260b3a4847bc3968e037cb6835efcc2014273336725cd5a94f592aef20a0a65b459a4415bea98ad7f8ccc08ccc7f5414b12fea4e246adf31f5384b93131e5db371a7a70bef7d4d2841852f5822745f82a5f51faeef9172f01e7103361c5bc9e150dfdd8b38abd2f260fd726ae683510289136de90265236c41b00c58badd7d5d598f422458b9de9ecd9234358710db1cd1072f8d2b5a72fef561b16b6d17ea9002529f579e2ba2b5fdefef3862a1502a044d0efbb8e5e420bff28cfea19f9421d1b62fa59775d1b058630de427b942c2996176c539abf999f80f0972f6d8fc7b4e268d9ec32cde1693a80ad934cd456f06c0e16a3bf115933403b178eb58a604ee203393afc54a61060b80882851ba97e2f7f96b2e69ead50a7d0f60ed930377282fac24cbb389284629e96150eb24d5a48309389f8acbb7d1d79ddb8c1ca71a82d171d2959c2cc4ca6fb0056cfe1690c1de9b62edb84ab420afc7492569f39784820f2d9bc3a7df09696ed4db1ef261d1874a7ab796ea627d62262a77ef9b56b3cdee865cee8ccf8983906019a26ab14a0980d08b8b1d4b5e9b350fc221e0d087119a8d47513e2ed16aaf37a73cc21791c1c904b82975c73ac77e59b2b576ad74f99da2e9b05e65777b25bc0252aafd5f6c9d97ebe6666e98536ca8b7fecf4613f25257c270401bc2319e7dc97887eae956790a854671ca0ddb7a6d40825d22da78731c501595ba682a73ed5b02eb58f61be5dd22be2a41f1dc3227fac4a2dc4f085a711114c1b9cfc2408b35a637dfdc295e6032d1f26eeab22e69255a22cac83e82f683f246a27f957ef7e7c70fe8220b5d6434165cb96f19c9918ea76f86fc67770d3732b6fcee109993ffd9d5fa5e3e7d39a4ffeba9e55f8e316530eb89423fc135995a753191c02aefec732c9ef73f1851140301c8e41006e9678b295a4013dbf038de13d90120ad7c1c17763e6399b96affa4419ef1c7adf9f41aab726c8041dd8432156bc2be9bc92d3b456149bafab7d6682d8484e2fe13a963d45a2df17d5e09fafc524d0660478e530c90102f36f816c3182213fe71a6e5fb567a1b03e8e238ad2b350674b577cdf34e533d73187c5f59a3e02576a3243845847aaa243f0aaead348c95a5e5fa4a908d134802f9e51e7063574fe7fd2c1ed6f0a451deda57ca9faab160f68c1fa2cf4b68c67b65a2b2cbb8ffe9cf0a2f18241dbfa890352a1ad8f05bff03028864e40bcc1f28d635daa027329998349da2c18e0524f4ea222e0da7d4d63803a4ff8330a5d8b7e62ef4b22097c5d017084d13a41d4d5963a0628233c47d21e9f5d1316c9e8994fffe7f5657a7f5031bef85af0270984a2c5556fb16a35a4d300b8853120e884c9e14f9211eebadadddc3db082ba77c43ce9179ccd2e9f4167056938cc38e7b3b4b12e096f8cb664cb715bb93821a8fe2a4e5597bfb00e11a25577122f396c90d8168d42c77dfa54c4265b5f5a852498359d1748cf190a7c4c99eafda24a0082fcb9732561e90e1490a344892f0d71fc257e6397459119ea2c78cae06c932af1ea41e89a84f77b0af78f1e1f00e21990c298436c683fc5c30b9b20a2d63d72456857f58979cfc8a0c192f208152ba4bed494beaf814c956fb1a9f32d287060e73fa3a0da899a7d3db555c72eb61198ed2219dc48d8df1156e64b4c68aa537d3d37ccf375f98023489d80a5782bbc7f8475d0a61fb521c2e07229323ba30f50b0177bf64214a8412b3fbb94cebb53e0ed9561231c603a2f761ceaad8e5dcb61a9a957b02a213b5f4d63ac9d18b0fe448f4a735c282051e17ead37c5491eb0398eb309291367600516d3fec73e50e732d25cae57293f8e5e62eeb783552fe65fc8fe3869e72f40bcee56571b29e433321e92bc1e09031a3088a413ee98d8945bc0528d798cc1020b3db3609fbfb30dccdbb542b9aeb51dde5a9af20ffb60e3b6dd76b060ec65d07b6bb3c05de9079b89718deb2e029cbef13e97fdec6611faf786344826ed63cf93e01e1f5d902605f049e25c87eb0226f09e62dc8fc23102a62552fdd4790229db05bc27a69a59748ac97c40cc532d7d63e1c43600f509224c21997970778c06db40547e3ff1e810dd5a233d032166ead36f85b345e9e18370e2d16105ce478d1cfab0cc337b1b0073659efb363df595c7b06dfc6884014c9ad0c26098687ce7259c96ba87223a6dd450b6236c8e22a7c70c43b971b0b0a65253331c332c723b7e8ccfef45cc8c7e8684335daefe35485bebd191665437b921d3ee3ddd0273b2b034231475635a5c136add500374759f0cb5dd2d5158deac8eb8b96c9fd2c57442fb59d11dceec2e03697ba573d92cd561d2303539a3eda7226a5d518084b1a8bc483bcd47f58a1ddce8d7040613a011e3aa9250271facd46351a29388017f77a7858fb1fac07c512851b713c50b197c18a5cb2622b36359dbd54fdabf2f770889191e243f1709f16e0be47db7a9e13e8a2ca2603247595e125f2ed02ef7e184ed6cb0cf1de27b25377e26e8e4d63f7ec1a5e0a65fc4d70c8f55051bdc41041258e60d5a9c0918170a1244fd55787a64447a4d9fb210258ada219d63d1f629db54effc6cc47429ec6f2f08631178db1a9b11b1f432148b017b29be5116fc980668ef46ad9e0cf5cfee3d38c220bfaac54ed4d44de8b85199fad72f8cb23d99bc1d4eb3c731b7c6e610a49dc48b342f90e5297e50dae5be79e092babdada07425f9740b5f855ee2595cccff0f59beb1a1e97a76a812811bcab5c1258c100c706886c91620a3ea92515b1e264b92477a20e22e85fb9875b0b3ffce39a0e26bd6ae4cb69caf92411ef69300d9213fb6d03656ad73f272aac55d4820bea22ba4ee1ed2a164b75a4dce6f8edbe23867f3fc0bcf5f0834aa07a2f0171f7c39f39f00e1a0f337de04f4eae5d418073a12e545c6d4ac0b6a48738f93f5333b0e4344541e3e15ddcc9720b97feb1d11cc4876f58feefc463b52d8d36e69c4c2c9227b32fe356d1e2a1bb884665d54c798128d5390a3b77f50d21db7aafb3ada11992ce1a90b65c2a099a493c1b223f3467712a6ee7e457f50cf2a836f33fd4b8eaf3faa464b6490d517cc2eb970f45b7e80ee37d4040e0ee452e77fe49a75dde96c9cd5fd7ad15172a0189d76212ec8e734074e68bf7bf3b4623cf232b70b57cad82baaf82216cd1e3970271f4c3903299b4632d236f2f86707112680122583d8fcd5705cca9acc82ecbc16dc7a7dd1edbd932d3bf1dce3a5494e61f7342d27bcdf807154fbc51646c0e4b0d73262fddba3d785cb79a27d1831dbecbfa4890c1e8915f3053cff7211bed03e35fc504d9a54f883a955aa8e66c6a00fffeaa3faa4037d3f9a15b0aa8bec68072160af8bd3d8e06ffe0d5ede37118511e08fe1b9f9549e9d390e40845d549555c1e7e77d2d387591f12a25343418733c891aad10c38462540bb018c92ffe3d6e3d1860ec517ba130ab33665a04e550d622136ec8ab9cb0ae37829e41a8f0499bbe7c829fe6a94b9653b08b1650800628d5038ba958a36ff1e50d3bb37134a2246c99b66095cb5b091229fb31c0ef7b7ac8716e7b73a189663fd757e832d22e516efa62f506e7b8d210271e73fb3c991423e57e06a39fe5556a6a5ba992d0d76aed24f027e0084c3974315ca3aa6f463d0fe7231291a36b06914eadbc393884b610a1c6becb33fe8567d01d8b748e6c3eb400c566e4b803c0da09b7e9d0121d7e00f74e827172b600108bc9f102a3f25f39b7cccb45e395cd6d25e0faff64890ae4b1ee3b77cc5cf098eac89efbb5c0e8c695a1095c2e0973732a8fb56d38b2a2e55410b0884ad99e2675825a08cdbe218521aae8d0a047fb149e2ee4c3957f8e2b6a1baa4af21352e3b560ecd1f2d4529ce350304a4138ad770b244da884d815dd7b77f165cef354f631c81efd2ceac23363fba8711ac2d0c5f8d9b9c50ba581230d8b4d82e661eb887123b63583e8ba732a1419ee32ceae25eeb5efc235ce1826aac18649404660c1feda7d2000b68283bf014b6892458dc07420b946073c230ed9806361e688fbc85f533b67aa3c628caa2c0688400db6be1282ddf98bd5e9032331ad73e01104c61cf8b8b18a63a2b674fb12f64610714650432484c882b42c0e3a2c2634c7c3e2be30bba7a6118928a4d83659ac340580b7cb568fc62ccab12404a823ec948045cc620ef1082f600bc22a3b597863bc95ce823bc18eb974bbedf7e911105f8216cef87736b8a66f865659ea9fb484dcad1dd19ac32713fa72f07bb699a610127e4d59bf1ebc5cfec2e9cd09d3677faeef2d1e3d3c9920a4fdb5f9d963b88e78a5d0edae531e3b55e702ed609d9a3c7a8485d2ead5edcaba84c4d718164dc3fcb2df1c0b7ae62abc1c2a23b9a354a28894ae566a362af78331a67f3c5a6e96e6ce024ea03e1a107a89e8d7da909d9b1f462e1185065891482ae2570dd922ef7d20c2eb3344c4d7d857c46f8c0a7d0f88c28f6a02ee807f519700c9523871b60ad1a65b8d37eb661eae465497b9fde40c3158cbab95a8a9e6a1883cd52263d3d508370676bd98a594b5f7eec3472403f1bb129b46a4dbf74f7003185c3d012f26eefb55b57ed27c81955ea5d859fb547f8744419cc21e51d32bf9c4b03152b045ab7cae1424a1d32f7504e29d9a88bf00be762775987b9fbcfaf0aa99a75e3f7966427a59540d92e47e6f0bdbafd52dba8731b499cdf9c950067231de472ec50c47d3224db81fa1e9d8298a5a43ea84f60bfb50cf0aa0b7d87706c149b8c9284477b90cb8f8dee886aabac5e2fccdaefc715f63e0f779529b7535c2a0a337526a1e7ca262bc5350021ca8263b82889114e2e255953b8b80e327859cacaf8129c563a24b12ab84bfa7587d132c7e231786860e8fb47fdf2af6b580b83585ae979f6fb56e926d7b1ebb83c0f67f98a42799846a77056a7b391d48ae7c03ccc6833e6a3d75a8ab405687c8fa36fa7715a897057e7652a56993a0089651dd2dd2d4eb7bc0c71d0dd94d534db23b66c47d84c630d3f561d7b122c71cc0a08c50d974eecac8ccb83a50ed673a706d8a26e5a26f2ef05afba959ccdaacb4cfd9dce34a8f80dcec43dbad1d0ab8bd34304654ead9265d0ee8c36b7b20e2fb48897af93e16c5858f8497f6c485ef1ff81ecbd2444e41a37af0ccee16e2e41c7167d12138cac0491d451735cc200620211d5e689814a74905db6deb8568da9fb43a8a6520f59ab3fe4c02711c23254817f5a71cce747fd716704d69b0faed0d78c94ccddedd7a489a6101b39cd6761e426e4df8ceb6f1d6177815707fe044ec24ddc0605bca89925a4ebc0234811e2a0b50f904802227cd6fbc6c09da6109c7223e8d267d06ef18a4dada66cc6b48f4d8625247cd0046448601fb3aa9c76123d9b45c272dd8d362e1cc04e74cdd1a05126d01c99b9779c3c412690dd458768ab107d56c54875df97aede18e9c1fbce42239ad92d430e6d391b65f8a435d708312fe9ffcd85cb764d5051a62a57957196e8effab5e13b5fb55b485b8de1d7797646363dfa39f062b5cdc566b4d33132d60349f1b23880fc478d5829f8ee2b14c0ffcc81e9b9875d776393eb27d9417a75ff234ea09d71cb562e1ff4739f2492d7b9277c0aa8e29ef8ae5793e1ee58c0fd2926620fa4703567ba0a3b9c89665bf11ec17cdb7cb4dfb02a9b018166f99ee23dadfc6dd21ed2f2cd917fc24162e8c37d4514ea9950783454b8b464f7767cab993 +MD = fffd444e93ab3d40a103e64d5dbfb6dc9cf7a23378de0c065ed8513d + +Len = 49616 +Msg = d46fbbabd323c656b036d590075e16e30e8c07e3d41edb07cb561fb7850b9da6bb9e81629330ba2a2212a3ff307de3fd3c8492ecc0469d13b7686b4c5bc3c05e3359e2864d8efb57c995bfc597284e7c807c5c766b748fccd91528ccb33ae64d4588273f8aa55186aaa57009c1c52105e25caea85c0e7adb3b43a05f12d7d71bf81499b4d1dd845fcf2b00f338be2243690cd0aa1b7e26e7e5db192b02045a7155e37d0eaa9e5b893f10b5ac83791adb1d740aa5302a5b99ddc6dc5b0a2939f762de1e749d509fad023ad85c2a60d078067da4c1247ce1992dea3115b3ac3a5429edc30f335b18722193b02ab5d90ec02d0de5257dda7f8edd315f8183f62630b2f9b307f3278e81a302873fad4e9a5b990d16fac6aeff20f382b0c9046fc43503e83783661cc981906ea3c39a263df252667f67845f27f879c46a12be7fde0926a497ab12a3901bf0c14ddd02c9bf2d61fe68954155c0be76e1d687388f3a5423131ba88122adf7cce2cdb56f9fe8b3cdbf19ab84f8911af3c03c4dfa05a2bf001f0ba23b03e6bc2bb96b746810802d9e90d9d2d6b064b2f749e48f8c4bdbf1c7afaec0c6ac0412162e6f4276844e42dd58f232bee5ff318a64157377c7b09380aa4d2bac87cfa3942920461f631b9b9101aaf2c4ff2b3db4f9192142e3e84d31fa300b75fa0e14ad92c8a9ee15afdfc2724a3b7066b07e7ef036c275064ac6e4869f87a76f8b106951ad926802d2b7789319344b82569eef31b57e9897a0a7a036e2c7cc4d0c3dd14e172a17924ccbbc4c6106dcbce54210a5de7c3400b0976ef240f46bfc5a43ec725099822ee4c2958568d8ab7a2414e732f8e5d0a8433f55a203360de43dcbc3a39f06313c64450c2678d34125dcbc7fc14de0f5f720475d2e71b4396d7c7d5cca4b99ad2692fb2817d71e2526d5e2dd3b23962a5511568e7ed39777ffe100c1d09d7c7d52368df140cde3dfe3d72d0b86c32ff72adc14f17b70064f0232fdfa9bddd4292a1aa26f8aa447f8c6aa45108c75d2e4de4a2b8d0b922a4ade381b0d1553cc3a1405e3abdba274f73615d3f43380a77ad923406a177f2beffbbb0304254689377abef7ac1d1192649be27fbf652ed740842ffe91888030c7c1835ce6b20036a8c30e887a3637c8c85cd7f07a09c58abf45350a0944dd61599957cfbca6c7f91557bd3b1e105d3faae3bdcf2d078ee77d85ff0fda35dee72de900048de8e4fa079e93ba9f91ca1f92975bc3de47d11704ad53b30d42cbeacb1a47a261609f62060058ad05a3c88f08e07b7597b0d642dc23fa9ea952eb91bc95f25241f63f5998e5d3bb592d9db79526e38c5f2ce48e8b51bc79b64f870587c1c9bb33920e0647b5cd8da21692c0c0d15cb13fa344269b9d60ec3d20e76eb4059686421c52929ad80ecbe848efd21249ae8c3dfb3f309471b09e44ad53f3cbcb1f5a737c542519b65e1c33aafc1412f7a1c4641d1bd5fc347238d6de13bc557a2de0d09a5ce54db785288c2401af4841fd02b9f1203c5d4e6f61f89b6ef2da7988bf605eb1fdbd444a98fa9e45cb3c9089ed465f988e3e276fc2b4ccaebde032f8a02bb19d93f2c376148600118e774d0e2e1250c9f228273a0311591944f10c452b3a7966d0729ed1433732ad2380de546c25aafc91a2b697cb182af8b0946f360794a055dbc73b23ce151d61b0dfad235088577a92343c4fc2cf27922852c395dd410cb2dd7804345c28a7755e1d204382423d881e66212a91403931d5b17128544aa7c5fd0e5fcc9679b93054c1a17ba95b46715dc1cdf0e073461bdf3bdfb815b657d56410b6b2240f3cdbbb5397956ddc597b76cca869566e37996d78760cc78d062c390670afadf216beba5b6a5778cc5df0920f1b5d9c3bf5f3a7ef9eee13d89b10a579f58bd92b31217a62818a6f333c16d8138c935ae26771b628c024a19efecad0f0ad0e52c1734c22ef46f6fd19dd36715f64d43769745bc2ab427718e717a2e1f300ffbdbcc686db8b2062c8872897847c0ce8dbda06f8f2018eaf21bbcedf000a5628c5251119cdbd7797788405833af0ea97ef3c04916fb10a9463230bcb57be174f10033c4b1f0db45eb6195c40bb4568a91b98556e614320ed8726b6ac0b96ab3d465e2e65fa033d7d2a4d15172e02ede506f5e3d7ef3f378434cdb7cb471b7aba103ed1ae85287bbc7b281850bbb0e014595b9514412eb61f131ff67031d3ed8e16ac0c70e903d6e551b24d338cd6abfebbd3536c80980787cb245be3f1486a80ffafc7f14d1db7be56f49d08c6fcb56bd5630529d403918405e4cf6bb0025a597350ea7bdafc841130f5ee1694ab66234f16939164f9bcde69683851968826e11c965e54b72aa7a487bd2aa61c6926edd0f1e6ed5901f05c9eb780deca6134e09f8909c40e2f863f0455370086c15d9300fee484daa495c74dd98d577518ee1ea731d41504918bac4ec4ff6cfb3873db884476a0106813e71dd74907be32bb62da97a78dc3da1cb20e126832a358d08e10cb858723d8d384b7b89a35ce390276e0c26b767391a318ec485c99a5a8dd743f9cf7823a793b66c2846a28ccb52d2062ba06163b3f87a78f6dc2ea29b00054bebeb6d97dd5b454e743a029e12ca329088862b6446b3027a089816e59f9a2f73439a8d41573a718cefe24803528cc597933669db69d0660c6a5836a5b0a2c264a16b7bb2adb7a781ebdde75ef3010775ec3f915b85e7119aac7af29576b04a7a85ccad5e396973d8086b65038cdd74d5e4105647234d91cf4faedf276a59442f513c86b692b642f9b639458378589a122b471d30daaa62f4b43250cdf3f43c1da439bc5e4224b15185b60d615e38e3c512425aab145401b57ac3fc0bcc178eafef52a2b7b04b2b89e760212f96c4ee694990831858f0fa7c13c245632b49d870a315de5565703e1d6bd62540caa3266931c04b0b20f7c9d31fbba166b9f195ea5fd1c3a9ea6a556673768e47524a086f5b4006e5f4dedc34ef2ea478f0a543878634f747b7600e0fbedfd095d62010c636ae5b4b5d2cbe3c1289d33c57db6dc2a6aded914517c4637e5070decedbec1844599cadc257fc331a5b9203681a714641ab1b292be8152c5296f36494c3d6d014d05f8fbce6f2c477227570a9d8fa6ce7cb1461c4677ca4dc11ecd9d07e8d8818a11863b5605e5ab96d020685ad65b0f97c4dfdb6fc67776b3fb190fa726c9ad05a6bbc344a8b804199bc2783fe4fbd074d3c3f7c4d621e909ed64c8b35e0a2dc5aae0bc20bf6bfb046f8764d4214eb819c73b97ca108f4ecbdef4f0b3fa61a8d2073d4d73b4c7375e36b551a1f61b7090868fe30bda8b4cffb513ae2f6197c635a31a9fc3ee94612fd795692fc92c9fe1fa07040e9ddb8baf5a072ab0fb7430f568bfd99bd59a20803a6fd4050347ee1209eb225bc248b4e2b4188dbd30bf8e1a3c732480d1a01d58478bbaab0d35052d9d82647baf9a6fa1ad90ffdf684287ad0980a8fc4a70ffbfe63042aa4dbe8b399d15f3f5ce9963f32cb5a79d0bc3c4b4b62c8c96a8d06fbdffa894892da9293ff1ecf751860d39e01ad1ae7f810bed3a2bc0f9d75389155b7a39d9d014c08646814f97183ebd98705d2a3b0d32e2a94450831645b46398a03f2c39086ac94b563586fbd1607229acde0877d0870fa0dc0dbf0c6a3125a19536c9dbb8968d1f77f5d84c0453f4949b85b58a4fe65c7b094aba02ce3399d7404857e86802d4abb2a98fb2397f0b80453b789b12b88fe2d4efbe21f72385e3ab5b2087a01566960e39f154f94c7f95b3e698d2a266717c43e411906f67b26cde586ae1e9370a89948d475bcb22177cec6f5e588656caf26111fb78be69e81bdf287e1ecad08a2c4b8dd8ee38699cddf8bf125546f262eb335ec6016a8fee98b8b1a465cc48ac263b22ee36c789d75fe0bdfcf06ba10010c3b4b852fd438e8a71dd23de750839206c32cf5b00ea8dabab5063527cca6e0918f91b94ffec8e99109345b25076f8c1e7a6c4846bf48969616291a301d7727d3a1735eef6f1b76e9fbb5009e2fbb3b2b36715d9911092400bdacc0a832fd51532f44f896cbcd1b1253c8d0ab500309ad85c0a83f9a46fd8b09f5daf893a5e78077ab08de8b4a40aab0044de50eb38225f6cebaa2b1ae9da589b8cbb9b60d74ec18fa221f341f71f38eebdac3b2593f24f81ff75b0d8c8ee0bb5a05641090641691d6b6d14cb949bd4ee3f9dff1709b1b0828f0d0f48d4bbd2d5e3a7049db5f7050b549ad3ba412487e813d9232862078a56e39ad0d0d4eab4e39bd76b84aa18a041a5d0b877c7625ac482872fbf659ee6e743437cda9222bac8110dff26ae4d3fa7a6364c68eeff546ad2d0ab46dc1bcb1cf7309acdd40ceb6a8d7246ec883eec259ff516f67da07ec34bdb20248d2942dd468ab21163504fb2562eca3c0292aea3d7349e893eefdeb537d116c1406e52127a794c0e0795ee88b668137fe2f18e09971c6d8af7947f29dcd91385bf9203a3d924f12c8783d1d5f349a71ef105923f27d50a5f71376608841ca1d8d13e5d79acb428d3adc3ff7f56f8107ff773c42dcf86fd72747f9d3875c147223d1a697a3a507a6b3ffd8070279dd60cbce62cbcd758cf2ac8142ba3f7f18ecbcccd2e8fcd216e5c06d85d8eae627f2c0704d1d2867207ee349f182f54d4fc3b4600b4a1ab4f8c0ecafd9dc3336d9546a175bb5825fc2d2881c86cc6d2911bda735a04961d015ce9531448f6fde6a0c453e2f237fc20ca3f7736304fbb5173111a8425586b5f675668c4670f55f6260de3f37f555304659bde926cb2553b8a4605251fcddd9234bbd3b500f583c5b189194f699c72d086a47e8326d7e978eae2fae6fbdfbbc24b815a901e92cf7ac8a0bf9fb8f3a0adb5c21fb268a6be2f1b4ec26fc0754c163511c6fdc6cd803df4ba9b8a744127c37b5d88c639071e89a3f125677676d9b779d1dea3028ee038bb3f77b9a6704d395fdd8268a2e24fae0c32ea7626ccaacd9f2b6c2bd9bd3590a89719d356675b37eaaad540a91f9ac5de7bdb45d75e077f3086363c5443c870402a49818a0e98e7a22c49f559a647f69f33be7c911438f5b34a067f7906e1fe0d61d16b4c4d4e6f11cba530b75f9e6bd9c15cc35cd68458b0dea29c52efc86296a27838a30cc3f7bff0b398cd32e749138f7dc0418c35d0afacd23ae7e6c4c563560591983341a8330139d6a20869bbd604e81e471e9184391b60013ed41e4ffde6411d31aa0ea9f56800913ec76de7a98867837774e19dd593129b619f1f27ebb8f485785972238d8bd072aa593bf51483c098d7776c420c7cb2ad58310c76b536e5707529b73e84d47121eda41b0e9f5dbc04720d7c9c653f06e229703063e4c7de872f00232160aaaa450f92555ad37f236f4d1f57d36842d7dfde46d217ffd2a572aec800f5ac744486190a3000374fbd837296460e9deeec4f7f9a39b98ec104d8fa6794e1ed9c088e12f3f528543652e5e85891758dab0fd81253ae7219fbc0611cc7280ead89bb020237edfcb09da940b74f8031bfe20622a15b796a29e8a4b61bce03a473a3288df1bd5da1d5ea8b3ae8615b6abbf99ad63399e2c845f0777fff666fcac85216d5e86d90424b87c07b817869470a5a939cd1f531b5f67b0063d076b2a833fe4c82ee2fcd0598da10ac8d7bf3f1336bb91b8257ad58c3f1080b97e515673c0f933d0ceb5b12464d437511524190be96d4fc4ea79fda34ba571f5c9de02f6bedb3ae49898392dd46207d17e59b4b3442abe63dcd4f62d13eb54625855b274900747cadf18dade32f706da61c494a1cd6078258b2051923e6ea28fc85ce785db19e4f400cc18ae26ffbecc7df92b6febcb078a63c0926b118bd6ee88580492f66f8d10bc06652616e89a38116c0b7625b6e6f2f54a2b2033df8c0f26dbac348884ba815f6c62ce994e23adca91974d11b0910fce31ae5a2be61c52025c40e2f805f7c669727410149cd58e080e616d364480214cfb7e61501c1267c96e6516cb5fcf60789d2b931f514a596836ec4ee9ef4ed8002c2dee470df8b0ea668b5888eeabdffb60fbb01007dcb059bfba7ac31d57b466282f49872859add3e91610a75f07a5604266ffad2d16f35aed3e79486b35270d94151b86e79fef147aa7d7ad1d8d5155d5efea3d3d73c2fa53fab2e03561a054e451cccce845d52a7fb336109687543a80090846c59d7fa69871b0311867c0ea8d87e5df96e600948cca946876903e8cd544c26031deb9ee1f3609a190a1f92d1409ff257ffae1c106507b1b2a2260db3a25b1002ed1e24f4cba27b81abad99b0c5a61350fff096e90d762af2dd87b84432e5cacf8f18938c56082fb231cb2c2db1bc484c35cd7cba0e1e3aafe0cef4674b11ddd4cb82f390ddbb3d15642351304a081ab36aeed86bae26685174a2c6043707d0776b044de7a8e32d110b5d12a1dab310ed66fab1e336b63d4061ab38043cf02b223545a87bffa6880df0217768a7e4b362f19a100ceef840e56f92514da3f4773cf3ee0c332a2fd573d915876efac4897bd376fccd1d12f9a666ff19c8b43a3b2d6ba681f770a49caa8fe44a991a7b1c9ed3357d0e0c2cf0ec0d99995db6ebff5c661610af1b2e661ada34c8d25130f434bb7f9bb7046fae202d09d8f5f32e4c33abe6c04371f4b92b81ae0a02e50b97a651fe5fb14b02baa88ef6de76b12ca81904bd9a9cbb1f20454ef9170f1f358f5a5e57d0e2290e9ceef809b4ca390c9e763743a4a040d620d007bdf7e347d664baa935f733e8bbdd5833ea61d7d3f7b3b30d21e8384a42433475a4b364a5159c2dfc3eda8ccf3004500640ed87c61571364eff6e4d1f8a10d96054527c801bc11a1d1a83d62596993d3bb461c05c8d5f68c2843cc508d80f289075dc1222105aebd572faf73314248798edc46cdb8805b130595c8a4d51c987ccb05a0dd11bf007ecee45d941d32e95e6941e728c2dec7a6226d682361fc55fddadd357d6640ad62a356e6296fb3ed1ec5078bab7a59b291e92b0970b6a8b198c134fd7791430c057f07d7c7cb3dda274cad92ca4179a282d45f4b01359a41b9f8ad6750153eb2d3ac6780e3923927044a949b09aac72dd57e8aab4971597cfdebc7119b848c1859c6069001674e5a42696d02ee38caab26323d88ddfc6ec9c134e27abe41c3c304565573a5bce5ea4df39778ec5deca0d1b9d882233922ce904eb0113cef6e496fd7e4ba3505886d93a3945b889cb5b5845ffc15bdba4de207a390539beff40208c534c253d3be4abfe3f4394767ae4faaaf08c201e228aa83de03d06fb5fd834b98b62a7699e0183f2f2770bd613ed5b1219f0594635b9e91589b160cf3d343c4dcf95121daa63c7e0fbeb03efc0fee34521f5ee9904f14bcadc683180c1dd9e11c6ee4ca18794e18e01a7650ba7a0fa0ab2a3c760b8bd3623806a5f57155ac4ca19743e3d5c1c37c4adb11a70f05a082a7103cde278a212ea1ebfd39c5e3314436f30d0395181334ca7130966c4b5756e081ce6696d2a47e55d707697c7f1f8437128ebdc904d3bed96d519374b38a99b1ff6fb3bbedc3ddde6832f90751bd791c766756f3e07b96e22fd3429ac6b0d7c5d9af5a194405c996003e5ce933918f618f2583a86381498f495418610d607d86b0fbae317df0de374f5829a47d3253a0cd27a858e67b433b4a427949e020076f05d34496e40b681ca63ed3cb97265254c10c5987e1c01070a33d09c7f76611f958d491bc2ecc13c09540efc139d407e80b41fba7fe063db9c4923e5daba909b02a6e3a03a6994dcd9d1cd217add1e0f50c47235b939427815ee08b9d857f7b2deb0e921ff419929e4e112f518b9679e624aa54f53b206a71b2a675ea1d4fc2cd2b443e638fb36ebcf8cc5be15b983f4614da05175d0172e5606281d5cb909d085b8d9370e20d5e945dacec59965dbd9f3d64b83491dddd57089343e318f8567a0c7935ca937ddececd41552cb46d515c0ec8e2cf420c1660ebc710949dcd8b9cae6599c30c8b6bc6c8183add3e3da6f71975195a16129a7dba5c8c6cc2b698eac1f1341cc5cc7216eeafe1ddac453b0aedf7c0776697e627c4e21bce201a2aeed79a991a47a7ae39a156feb0872a6a01ecdf7c89bbf295d9cbf6534b1e8eae136fd03d5e1aa36c9970cbf6084743d076a68aa2039eb9061e1ff7a766467a9ee2fb10954aa74649c0ed7d4c277527ead3ab97d5978761d35f3154aca2107489e7f9fa45828616a24a67c98590895d35a34c659ba7fe737a37b0cbc78104e2db9cfcfba2782f8b1290805f26f60c4a3d50399248a77c6457121e9b7c75bc6c107c647340ae1c1a173db79c94aa66755e74d3ac812879cb1688cb6250127f76c4f0d11fb496d45a2c9c8e1073303075358bbaf2b9ad8efe250657bed6c9f68975b4b35f62c4d0b1df5774493729f2b04f0f4023769924a40f1533ef750e8a1a8f129b90cfbaa9c78bd8faa554fa15bd076a13bd2c9dc323312ff092bf72d2a09da4fa727fdab7e1deab91c3512311f1fb46960e600de31237d10e371a8948c20de64062e7b793b72449ca01b0279005970f57b5a57c1ce78f82fd5b1aa454e57c411df08bd3b5be192e141ef689e85e673ec931616ad929a4c04e5d34669f81556fd399f0b1a64d19e2f04998ccb372f85f7b10285c903f241361dbfc42812c15ad01cdaad3ee0aa2e2ff301b6269c9a6dbedc06ec3eabe69e6e855d +MD = b3327b383d73bc7b18368f4180f63e26b5819525980645c6943c6eac + +Len = 50408 +Msg = 984e1a22313c6444064cca92e2ab11c75f1b4ac5aca1b2e48e7dd68aa55ffbfcf1d8bc73950ff573dab5e058763b7e320f4239d2fb53c7254ad051c1062ad5beb955c9c7307901707febd2ca455b7836314fb576c5d0bb0a5a624cb9653a206ef8ac87458ce34fe6fdd4e812d674c67bcf2907d9947f563ac81d0f994af7a3b3b7c53f1630b3a87b5d5a6a55b1ef31aaf0ba7722efca5f5e9ce8e18a3dc92836fd883861a453d4d7a6649fbe5f32816b9de94c7a5f18a01ddcaa0cb4c718759ed2ddbc4f71299ba3e0d9d07267a77e65dd9ed0086bd2df20924dd63e6f4c54943eac11081e9fc58713a3459c51b5ef41b8c149f59b5ee50ec5b88851becd8ac04add80b3331b192a48a94662a6c39ea6363b006877257a907ed369143b04e2c9fd5851793807603587d31beced3b513d60f23d8a888f654ec486c3b06e5723586005cc81b6ca624fd6090b63ae84d1ae3dcf4882550570ef9fb9dc4cdf2f141479cc39f435cce7213f335fef7206e6a0d5ba687966ed611c1754fe1117f57fa65296dff93b75b753c93960b7bf2957bb319ce69744b0017c353f6f279d0f2ab5f34907b9522d998c7c0353e42055eea8585b0a0376b718b8006377b5f9e7ddea62cff95b015c5774617a839d1af2710f52e11ce684696e7781a660e3b4e362eda90efd08d16ab7b47f84370b3768a99728146467f72dca62bef170db556d8065d0f05be848bf82f4df0ab656fe1f5ee9e1de2aaf566df620c12df1c264ecfefadd5c5a22f0c37fdb87f549a5f78058ad8526b5e52990b85a924029c369c8a555da3943df51df7812812b3820abf15e8a1dd44e32f9fed9b837146103ed683d1ece715e46f1793341d596cbf1a1db3a28b0cf3dbe4c1e21e1ba8fe0ad78368efcc2ebf3805afb7a0f891d4a3d61a7b2304601cab0ad5a577e229bf0e790995f98bd8f4ab414cb1324a7a7fc2f74bb8f4ae7513d31a1194536781fd7d9bff9799ac745ab0ba553c629361e2aec6181981d9ca7dd68b2c4b1b2c302dead8cbfa5a9e8f55dad97f95dc63f691c9fb05f97526cebf37e67c1649a0b2e4d887f51a96d2987a9c172279ea2c9701a6eeabf52906005c79a48792695598a6c9421184d9091e3d76fbc445366dc1b6c81960893807fdea1e5de54be4bb4fe82f9f97c5bb729f22fe1ffb842b9805259013ca220cad15cc987b0bbf6652472d9df90e6998cf89af83cc2ea3444befd2a1665f5c1155e6886a74714948bb1ceb76d6cbcd1b706c47cab8e44f0af9d0428e7986940092feb226d29c8616464fa65cb1767c9e05b590154ea2d40a1264f989d5d66644f4bcbe302e040259944df2b2219504aae003fd05f5e0deac260c6c55f3c54f48fbaf2128ef4e3a8d15963509af8de1bc9fc6031f5724db7bb5352f656be9bb9708546f638eb18b1b5ac6f1e5a3e7806da57a26b3eaf536f3407d972aa6aa37b9bb3b1d9294f490aed44ecdb8b7288d18919efc8619c88dad485448282c8d401b84c1a0189a7dd79202ac0d0541d75457d4b2e8e86c254bf44d47c6e066197156e5968b77f7c3cc7f664d545dec6a72a5ff54706d7a720e82cfc687e60bc527d65e085433355cebc19fc118250f58648d61d217879d5521b3206effab5626f0246ec58edcebafa1f2ef95eced3337a668bcda62c97d4542101f9fb2930d9546cb982c9fd78332bbae064a3738f06eb4e250cbd69572a8cc23fdd7354f6ab6b8365acc0ba5849c653d444c8b7abf941c64de34e79e16164c595ba3ec3325f1a0ff371256e978334b3b5a1b4e35091e497ab5842a25e0142f4aa9946be0a7ecbd70adae05f5c6adda22984513ea5583c89e6767f2df69090152781728da68fe5a453eddad5d08429e7d8f48612d3d5b263a742ee62d098b5f1b37baa772f1ad03e76b4f91a1b5c814c6cf93ba50190acef95c6778815a01950f78ed6c5cda8f36d1a37267564774b978a9b5841581293f3590903e8ec3124fa9ac2dfc0a7c0b8f9e77d4a2dd35ff091dce3c62c00e2d0389a1378cb7ed23eb6451fabade6ea86a9878e4b8b929bd9020ad86bae2088c98601edc077f30bcf4da0ae23d7b1aec6469f7213d7c6b36db2bc823011e08de8a4369ec13572643f8852762f853195de98da3188599a2f136899eafd9b6978945ce02e654c2366f62d047fb8fe8e263767ddd49458349835ee4917bb96e3d13474a7a692062f985d045dd2a48befea397b53631e1ebc763a0a75115048762132b5350d32a9be82dad70676dd747c674c9ce2e40df15b4f8a85c5e1a6fa48eef5e72f6b2c7ef7add66ca67349015f27d99132614b1a38ad8d26e08ea4f384c3e5d240c868cd03a0ba8ce6d2d27abdb24623ece1bfe07d17abb76f20317d50256a3d0e2dcede0ae3ecff6e9a5f26c18efd1ab86d518d4f164cfe19a037ded49eecf241a146f833ffd68de5d3d74e9045643e3d0ce968d831d8c587159d5f3ab5d3b7822db864a67bdefef486243a555fe55624c66fb840f0b7d260874b48a7f3875579d80c6b8cdf6e1942ba2d323662e72c14a3cbc6afdb51ed4dff28e145de7094cdaa2a530db4eda77877da7e5bd8d286b6ace6da4c7b0ee0f6831e713c00f73b26abfa645081c3703dc51365ed480d2db2e8a63b3f575772021e1442b4e182142ee465e87ece573c3aadc030143b02e9af60f433b1f7926a1ad5f39ad4077be58a5c5125be2413d31636c928f7381881551ab908cae42991e5b2a1c2c4fc4877e51ba86439095efd7a691692bfc7b7bf4e20db03b1a582af0cbc0702ad485392e52a50ed1608a0810e4c90b9937047693f7a446c8fc2078c36fb0da1b77102fd329033087ea6422879ea1de49cbc3048d32eda8b8bc41eef0c789ce90901bf82755537fd996daaba6448a65a0232db24b04687a7ce3231a1353a9a20cc80f1e7568246138ee441ff76701464ec5baec57ec9310a7f94a76b5a49f18f2774fff57c1e479486936fbe58694d4a82bd12f2e6c0c2fac773e81323ae877e43675374903121c6a8039dc1b13b3b54eee270758f3221c0ce555c613770463547e0542c39c4bef21dbb31ce2aefc5ca55522e14232736a4bbc56b1f3f9714fb5c686ae520dd055f0c4395ae6b8bd2f3e293b69847a8e9edb6487d13e22cdb1aaa86fd66ed87de579e242f291b1a4c18ba2f6ec8a5bb22e5e968fa06c93682d858c2757847c73120fbe56906e2a11a8108aec06ee56bc9d27aac4ac19cbdf17e8fa43be3d6a7e6034a0eaa0f6a2a2476f2961350afbdc6fd919cd50902ca105376b5b56f432ee648b428590a58bc523fa071ce38a9bb01ae57c103a9a363c7a1367c4ce33664173760bae0c057608c233bc65bec7e6c632df3a23d672893feaef681680956526218764ca6f90d1dba6beb1e2134d4d8d2c18ec8e90d395f9dc4df4d72a74cffaf322066137c22fbc460d70088da540837b350b971617dd18c291967d086bf74e7ce84918f133f02924728f4f8a4a5037b4b60ff3b2c9df0b325cb57ec6e58b7f034ca5482840c3b0c6b0582d95c6fd184d1e722b13540c4fa021da62d27bfd2b4ac1b38549830ad1b13973393c85c7b3c8d0ca839460f564a0638dbfa789bcc1a7e9fc46d175460a586068e8eb112088ac7f81b3d25b2ad897b447ebd2a95ae09f17d8036c91f5d930d791c33de398055c6d202249bd0d1a1a76818dd05547f6b4edef415763aabcef01863e8197aec87d3c3e6567011cb78d3cd30c2d1814727dde9a973e54c523d770ced16287d530736f34e3b6c1fa2f8469b4ed456c30f25e6c726b9dffe5bc7ea7d4226d4e9bdbd3789c23b579f5e084af9fa7b5cc3de4db19ff34d2cf8cd569092e87ee56632911eaecabef83c088f250fbd1faa28bc87869a999994e1b0d1b2746988239ebb6b3289ef2c189ca77720061e28099bb1bbace09f03df610d1f984b4dab56365f33bc43b8ed7f6743a78306a6fe41c4c6d16c988df5d422eb2a8a3e1a4e45d927d10403ae69f546e5079636db091a4a02b10eeaecd63cc952d9d0755adbb92d192d52f2570842e0937fa1bf47b15cd66e43daff420edf014a14b11994b97ada4030ee383e332ddf57f7ebc9725fce0f107017ff1a058570dcc3765251505089a1c01ffce85080e83957bd7be379399ef21e0f12f922f6be0fcf6847180803e246c62f66dfc901a640875ffd2269652a1c36085e69cff994ec1ecc2171495a8c362b649faa0479be746f1978b7951a5c94a14b0ef174589a7999ed07e47b1e3079d507cfd16bafdbddf833142b6720dc644520481a77d977c0281222fa06177518ae5f1ddc646da38408f4f804453e51940cce346a4145d3c9b4829a3a520d041a9db6b2545979be7088a54dcd993e632add9ffc6b3a63589a2386962dc7c884878952b6c1b19cd5a9618e3a0bcae6bb309fd9c5a5cafdac3d5f663e59ce0f9e675c7c50a9d49e903879f7e84840ff01ad3cc5ba9f5ad977ba4e6abb48cdacfac3fd7ca8962a479624ba287e0b6350ddaa9bab00e150c16217dada35822e653fa2549ae70f1b5f90750b6825dd9ba3f52ea4d3c2f3167a145eeafdd38d5703150d491e359d0fad25345301054550bef4413f84265e12cf3697651cbef3b24e260bc44fb9c66efafe687c3945cbea6a80eb540854a9ae8770c8357f1e3ca50d17a4ad779c15a00ec2196d590ef7d16f4135cba5755c516969fb416e1aee9a0a93e0ecdc050f0db11a4f0ea887526d95e1268ca4b1ff623fca377131da93f80b40c869c61d3e1dabae134770d96327a405c7804d2f1b4bcf3a85ad0f87b227d9c6630d7f0c2939c3256c00f72bb26563571e8de7183773e262ecdd5249d48f3ccebabe4ef958c7c328632187a6c8909b7f369cbc93dc423fea74e940478098fb00d3657a0c5431715eff9266712c111425149612c99120b07925b922aa3eaae003b8eb4c6fa4dd9570483bdcb6664e96f0c26132e2de75fbb708363f99962db18071360c47d035f9054605339affb1e98847e764054ba9e94e2446e13d1189371e043002bf619f64c602d6b1477ea1d496ab0eef5a612442e381d24ebe36263a867bc075fcde859d5a8398a0e56b8621c2f6c01d0aa74fce2128c3cf438e6c825fddcdaf29cf4e6d6bd131469b4fc796b331e4343da69054ad20ffacf4a0c4d6523341f66cbc629c9ef58bec92b1cefc1264627d1ae4509e3271702dfaf494ff07840393ed2e29f29df68cd9f219021a86952240caebf8725624fd9a7d1245c625d8fbced5ad0b3710dc1e57e20fcbbab8ce0bc57543ee99c1408d3aa48340f1553811ee4cbf70329eb028ac8a1c91a24f16075341729cdb1ccd0a5698ceec483eaa2d3d79eec0acf079912113c7bc9bf476fe33590268ff0fd45b36817bb0958939370185c1636dae3f43fea599b46d4ff4d6aee37bbccf415b68228612f69eddea178398c0c13d7f0a258b6719e2e0079b780a0863ff115b6d1962cf1c252ce3c7b50bd87442e40be31f1082cfacbcc570cc8fef44998e040f563d8521a40742d7f9e070644f29fbd119d41e437bc8307dba87c1a5f20ee54b07fdd0a7ddf7a322cc4c86194ed5f7ddfb2061feb8cdf1c92b38a50f7259a62814e8d73837c4aeb114954319a9b0a60ead3c7687c993af5c05ebc4098136eeaf6547c35b1a350a8bbb04ceeec682b16c1870836618e2133f32e9451b876e65e6e261bb99ee1460b8a7e1501f0f13bfff2204b1240b82c579987751cdecc9b4d77480e8781c275741c274f035ea2b79d0b43f27480c3a6c1221e010a8180f838a01ea72820a37982df204d7b7c19187e6b76a0e5a82d4b013b46aa9337308790572e8803f210bca8421db2c2dfb0e904911cd8de2d5163b83385f45f6667c3f52b0c23a36c96d964f363f1820006a3c02acb0cd696cc9b26a97050b7a57327d79a2c0c9ef6b23a4951979c317386d35186e5bf576b1b5c0d0b8a52446aff3da802f2a55f26df69b5eb2d1549a0bde209341152e920ba10bbe8386b7e3d787fe71414705c839ae24b2e98ef331e187a87c0c28a044e2563b3be0f2edd735b69253bf6002f83513e69aa6faca65222e73dab7da72149f9df950b72feeac33483e2f90bd740acbec8a1dd15bfebd369c29b52974cd8aa83ced04f086e1e93804a90c9ea682866203b74452fabac2859973154c3dd82f66fbbe5f733fee17abb37cf2d06354f5611e1616111f24fa78edf903077fbc8a41a4146928a23fbdf61d5eea0e3b13df32064e9bf61264ef755f62864280a024a2fd992bf8f7f963800af8fa4078e7ca3c8308dbea1aa329e5b856a7e58aad83efd0f3acc9854792b142f22d4e60f740e75decdfd380092f31c07f6dd9e30a3192e3caf485954fd0f18cf388213c6cc89b5ba1ae9b8dbd88bf3f82e004d3e1b6f1fec70c126f39a8a8b2a3159f536debc046d0502886e8bff9fd0a084fa4579876eb91fb5a5b2e9f3e7aabdbb1ef232fbee620ce64b6b15946c1bdeea29c96618771d1c943a1563f1badb3e24056b61ffe033a2f356441e00d554399e605c6988e572f7fb788d80fa813623332d14d40e665c57b85d7bfdcb87f451101250ec6f26652249d59dc974b7361d571a8101cdfd36aba3b5854d3ae086b5fdd4597721b66e3c0dc5d8c606d9657d0e323283a5217d1f53f2f284f57b85c8a61ac8924711f895c5ed90ef17745ed2d728abd22a5f7a13479a462d71b56c19a74a40b655c58edfe0a188ad2cf46cbf30524f65d423c837dd1ff2bf462ac4198007345bb44dbb7b1c861298cdf61982a833afc728fae1eda2f87aa2c9480858bec6260b1916e8e7a80fb12a60e60fddad614f7e9f6141b527b85080a199b347b20b984ccabda1a631a2f6fa8c309a10ce5fa0e4bdd3721ed9d416c1359c5f77083c0d896fae604737f45651b68262dc89834691eaee0d9b47d03ffd1bdc57673ffbf8596e75cf4b295851e86647d4814d70931edd0d5eaae0313e8cbab65588b7bfdb254d80291294536c2711fd79bfa8ac38e3dabdffee418b850898c6b46c1e0c3885936a284df78a2786401fbcd8199a8a798a7c5ba5ca23c5f94c9a0e71c14592f2c6a0274dc140f69e872b387b1ec01a5852c51c8208ae53c73c8cce4a40007ce55daeb0a2902c6bd84dac571936c15af8da249d038b9fc10aef3b7e4618c158e5df024eecd2b0f9bc1a1fa322eff2eee36717679aa16c802ceb128905ca1ca96cb1377c7d076312b262f1a738b8e928a0b01a06c8088933b5a69e9909c256f0f27aaaa3e3bca76973beceddbb0028aaa91bb8e51c2f9a3e3da85c08b29024c20fa1f86fa1511240488413a13a7415e7652050acf76504221d66c76290c1ea9f2cad9d3a46632849c9694cbc278355617d548da8ea675b61dd786d3134c63ceac224059e33715de87ec4e669129c4bab5a2edc737594f4700643b9ef1f1b7027787bcdf608fa27aed12d8d428c4d8d177425a997298c83ff206f3a16a04048f7b83b52fc276c19ff59198dd2e5058e4863cf918e66ac7e41a4416a2278b31bbdf9d930fb2f45a97c7f0f8484cd62c3b0a18310c3cd73580a1a60c6ad09126cfcc5ebe48d81255a88cb75fdf295d3c1e2a5f693c1be7f859aeb43dc10c1bcb12694c9fa2dbd79a1b6c6f35686eed70d50e980b712ca3f9b76af7126e833308cedff19ce4644c11388e9fe1acc28eb0a7df4b7e73171220e4fdf6f13bdee0c54955d51ed81a77a3461bcfcd73ce49e4dec5002a0a833c56278e3943eec52beacdf47e8e44a662368f3a8760853925f4c0e74077fe182a81c745497150df1a5fa0e37652f1af15b359145002a9ac2bc8966e92cd167fe38a0d4bade129d5b80c0a4b45d4a7de9603edd1b11ba9cf6248a7817f941b606f5a41c8edfd414e0ad95554717a2ddbef0c939833134b49d25d3d498e34d662d7d8abe3922c5ff31aafc72584ae4d4d28b892915c5358c383ed9eee47150c2e22eb92c523d54d6cef74aae706d7cddc47ee34e5b74197e47ee11397329f886c587d40962862d160911244c17d5c76315696bfbcc946d255ca22e46cd83b11c38275fb7d2a3ab478096fdedc73a710f45c977c3d1ccbcfbd6f975996c04f6edba7ba0ca2b0c5bd5b5e75bf606f1f63cd62dbb391373657c57627ba3d7245685dcf36bb2e426bb6b1980a3174fa2c36626f49acdfa2f03215e6bc4e887783c7f102d04f4968946524c0187a409b36535e8bc9ae50e6622854c73d5ea05673533e4970121aaba8945adc86e3eddaa58067be43020c8af3012a219132ad977bd3edabfe4aca920f09fbf73cb4a33fe28625119ff13a160a8441fda212d6c30511a531634080a6318db01622358953532d428bc5c10312117b3e625746436178d30fe2853c656d77e7214320aec89d613c63359eba8e076faccc5998151df93ce2d3c64d85a17147e1f5851e6687a5747d32151026047d8cdf91e94dc98c13b90698e5a3655b3a0a41d4e504a6eff4f5b65736044b8cfad0de351a5ea8b738570606487022bc4e29d06869bab628114ab07a9d63734f08a37061f4b4fbc7ef7eacc6f69a05eb370a56561b28de5984dd33425413e4742e6d5cbd803509e3c196be80f70b56107d179b49033766abd615075762fee624f5966bf0c5ca1c34350705db54a95d55a6b766e728cd95458e59f362cf0ac387e38665a3cb5c7ae2d3394980145e62e03c5180d892d3b44f3413c00ba321c1c482a5127d9bd16c14239452173f11acd9c74fb2c549320bf351aa36f9e72a2a045a5c39273c133af2ae81e747deaa8469cd18c25656d0e2576c861dd5a30d446ef111a448b6082ca5fb66d2b8f71032b8d8147832c09781a30d0f3d46ddb2582bd12d1989129a8a5592acd913952dfeed6fab9e028f6e2f00bc +MD = cfa7c3f12054db27ab677227b21948cd4aafec0b179027dffd033c87 + +Len = 51200 +Msg = f61363eaa08cce68283076fa1ba17ffeeade05f89e216891c703e7e0b5e671e9eb94b763d12486bfa91e5465c4df1941f63e607e476f9d91eb28c17a75030c46472422d94d1b62eaeb0b734f330c1f7b5ccf65456f81c9eb44f1ef56adf4689ff109ccd37c3909f3d441fa3fcff33cb404da3dd47f1d95a5b9a59afcc7822efbd18bdcd9c64524e14e0712be005b16f5d6a60fb3dd0ca9c9318ee9f529750663cff47b7393095abd40a4e3532e0b5545ba7d046bf315ac5e96f205c83d9597ded38ad02a4b4b548e91619486c1cca2ad98a544832802476dcf1a15fd69aa8a74c597048556d4b95c2b864edf2166a5345867f683e39a21fdc44e421d177b862d8d613e0d1c6c3230f55b38e7b7a105e2e20b42f38ea4e3165dd6b4afaed134121331a74806da6711d7277b25e9456abf1ed9515c90e934c082f9923b96743c2a404e67c07ae8ff07b9343e2120197ed4f4194b465131bd041b000449362c457efa02a5fde15ca31a83c8aa64c5e6e6284d125837394325e910333462f8c1f7142a938985a4fffa531d2ce7753e744dc30f0d9eb9b0e9157849da470d43fafcf6b94a3ce22999adb970a81cdcf58b59ae245248531ee935b8ae3d68d380a0f92c8d6fe69cdaf263546283712250f3b2f072297c8eeb0c2cb128a4bd3b157b99bc904aae391ed1c52ddc070fceb9730191e3da62f07f1aa36b9d566ecd6b5381b0a822bd435c007a4bc77a1e6897d5ee9a5eac240342db41eff79ca411eaf05c0fbf413b42fe452bb70925c57952df2012cae9e74f9d17af441cbe8790fa1ad0e2bced4fbc6b6980778c502d88525a400111d7d65bf6959472f6043ed104988530876f213b0b34209536437e1dfe0df5701abe16afb61e99826bb5f25c6e332501080fda46466db418f145dfc0c0c2e865cde8d2d3467a667b651bcabaa2b3555e2714a26684dee309a49f78faff3fc1eb129c30500c71a265cb7cef7206e0bf4dccc8a0212d4d566f379a7252244d2707d12158ac72caf5488521880c04810bd9df71fd02a983b552917cf55195b4c2c3f2c07372df4f092d7a52be110360e1074858e08e6048a7bb9c8d287dbb3c3b265dc1a927bbc6831b9457b9086b43e7e1efc5724fbb63d4b03f173461fead3a38fb6c21556df80e1bba77a079a3f3c86ebcffdbcc209ee53c62604182c7ce6602b20804835fad5034d4fb9bec15382ab69850428df8bf8264edb1766a7c68688b6bdf793af8adf16ecb2bd4ea28d9b6c269fecf1bac8f5232c952fba08743e7dc0f37a901a0bf9ad1854f70fa44a013991952acfda2d6feaddc8bf9ac4e278cfb8459bc60bfadf366ebaf9aa5d153e9438e94febb445c2ddd0fa498173bdcfff2b48dd9dfbd3da334e593787237bbe2c9b20cf0def9e888cb4be4ff67b429e7c9851b2807033853435c4232e9dfa0a4326b02a7ed2844b77e7695572723d8ed86e14ad25ff765aa9c3605f1922fcad786a3bd4e703b3661fe79fdc7dcefafb833af63ff70028e51465d24ddf6900024ce41860bef99872e543d6478108077f1d7d7aed6c08d79ef49b7e71d9c6b0c33112da506f3aaffc887a914914a3ef73f7b407380d9feef2dae2e95da0c26b4ab574f626903d665d49fa4543b1391f94b26d4fa2543beb8b37ca9783bcf2bc134a88f0459a88583fda5186b9ef2e143bce07a8aeb84369c28bb0fd6696ce0fa780dd5d500691f1fe8a0eca2e16f969f3bb11a6dfd26cd6334744af88b6baf291c8d091b86ce0c02409808412d1218d370a29de981b1ead480ae4126ca55ff14cb31131f135fb4f4ab965490a964cfa702bae947a0abf7b9b471dca84eb137842b00db29cda580bcd1a0b8d67eec24e59a02e7cf819e5bd878c503c53e07c141e4024981df27d6245cc11c5dd3327d53df807fc84d117ef972b39ec6c2e004139f3f466e6f6d1ff2f1fe686bd1bf43bb7a3e9a7c2b8dc8e64d4295f304c268c204c0b839a600c4ef3a6184499f1adfe312441e314499a166af7bd09429385515ba8c892bab672be3dff1583f67cbb7935098f530bfbd7140416438f15cc733d66aab9f8aa72abe9688b6cc944e5b3595dc4405c1c581a03daa08b352c3f96acbbb26e49ec1d2e4cfdcb9c9927e51c0b05d50382b7e6e9625926c2afe865562bd56043eb122e604588301357f1f35bfab7bc274b8110bbbc0a39a863ece638473e24d9709f1ee88f72696faa458909c4fdfa4a3aea7e078d58399ad5ac3ac36b70809d6ef5773d7756d81fe4952e9be6431fdac566776332eda71899a8cb7e14f7041e3ab7cfc5999ffc92bb635c88db218d677f87a545591512b0145520cee04c1fda6858711762d8576673228b571003d36ecdc070347c78fcdfca53c34c39ea34307c5a03a96f7a6919c065339d2174825f349370970983d62640073b6cae5c01deeb2f10021c10b21b17bdfdb18c0e0ac748932f037cb03ef209f1e1a6aa1bd9243959fea7f515b2e8ed7f424abc1add157e21f3f062a887e18ca66e90a9945aaeeb6d581186f3fc11b62b99bf4e2599e849d267f447b751634c973aa1496fe6ed75db94b55e55fe0406657c859ed891be3017137588771c05ce36ce5ef6090e5e6d273d29c7a6296e529f63343a8e74f5d5825efac1625837861792303bfa418045c2c9e56f5f1e8f2f4bc651bdd1b42d8e86d30a7f03967708bc4eab87be20d17450c35ec1fb3e04f0fd4e54752cdfc3dfb6f80b1dc54742ca972c5765bf1ce08d33a21c4c05185e4c2643b31d0a48675d7536a32a31eb39403ae39a5287a63c04fdfea48a072df995595f03f1e48e767c44273920d412b91e19ed0adaa24d226012216df86bff7570f8e8bdb066227fa0c64253ae262e4098a6a11f6a9982521302c2ff03bdfd4043a78946c4e9a4f18f6e00790ea2ce7e6473b84e8ed7d649b2524bde5887b7e8a1c7a935abf9765a8c9dea1fded443b0e6039b2ec3d7c957b29334625333bfecffdbd110c21027491ce887ceab255e86b1d8b2268633dc2a98281541804c65bbd276896ec3c8281bd4d041fbd0205f7e3c55a5cc62567f20c78356e26c5c59d3be1a4a861d7c096138d7a12e0a5fc6f60a2cde96c4ca22e8e55781db73cdfcd307299d1d3bc63ba7bd813deb963e358c9fa0d50c4a0987d165f71e73332bdf286236e98aab114f6dd74f60ab20462bb0616411934e8eee78de0495702700714243c4c854f7f7b5121aa4d1e314f209ffe3e92cd26ee4f74d91e27f28cbb643bf2055a2128ee3fd330c23da3a00dc60c9bba28f30178612de36234423ade7c70d8c5c1f39ec50984f004f0206606fb0ac4d12a132d4fcc1993f397ce729ff8babec6a8841ace806d4ab88e1deb0268a261ccc0b6123b3940d21b791e9dc880228c4e385a02cf4d9526253e2297c9b5db5bf31463180350ab862002bb241fbbaf2aa698ffbf9117046d9429b8d22289be988e4ba2a771b861984b592c6d6d52698016f2fbbadc87c3054d776604d78c5101e590fb274b1a6af1e4a7f9e279ec5877e56bd45a7745d9d8984fb595ae679e7e4009f7005a1dcf773313abea0d3285f55d2d14062cf84ecdbdd92ced70c2adf8e6de1d9a666a97147fc6c9ecefccf7e3c4604228c1482bcb033f5374e54484552038f55d37a8caaf12e8db52e861b62a632be727ffdf77bcb4a6b293d4962d7f363f08b29480713032a06983c099cbb082b78a6bae623a871638d2b00660b05c701addff469a937e2816fce73f1e3d5f692cb35c967c7c14721d3a35444913d615f2fdad169d38833c731be62d95141e5fb1eb627ed3464b0f7d728854f960d46feeee25c9326826b5df4fe851a959d4ad6eb8e5300f9f14377f0313fe199f3dc4373ace2a002c4fdd811f557400136b9c8ca54d72d99057304b743c0c51d6fb5df4680f00b08be6fa8213955e424aca723337020dd920fc430a4d6d44480ff5824e015212e98ed45509b310d71806d9778af86cc9b657ebb8e4170d70a751137b6d8cfe29543cff363f882fa72a5080f5ba6ff36d183d0cd70058845615a53d8f78917b0d989d50e44c1958951f2fa732ea2400c3a9db47e7879b39bf3b115b07979930865eb9afa957eef46b9fac367743a0f9910e388532a0659672c0a0552bf42b875c4e9905cb88906cef54ce150ced6a48a0f25cacfe744002394e571343b4cfe7560f443893088626eae39d2d390f0a53b8fb50a6942bb3e5da8a407e97020db83e4ac23249ff588c23f7216446d20984a0d11b593cec47a81e1e627c6f046e63daa61cd935958f05643663a37a5dee42221dc5af3edf82b1cdb2c5f612e2794ef3cc59179ff0b2f873486ad31fd941f40487578fe12def69afed72d5c9c5b7e2506381d3ce3b49cf19d63eda7b6d8b040fb6d8e06efe13388b7870ffdcd5ae87bb149df50b9cddf11e88e8a2d64252d90b53508c2d7978872bfac75e9339e8a6fa87b3649e3bf5c64a056f117a7f21dbc005c87a66c7a5bc551c80d9351aeda5d663ce0acf4119b665f6db11ae4d7d72f6754692610f2241d286a2570c9f43ee1751f3cee6d6d12936023589b9d4f006744bd5bc657a787c6adf35c25ef174e785f82c982a21a68786d28460e43b01ff032e7ae0bc302ed7e4d04201743708fae7018050e44b1f381d0dd08077ab39c56bc63fe6ac58ccb80a00cffc969a858e0713f8df5c7bc5a4c35c21d0ba4b1ec074bc2bb67e1bda89a218e79b0c42750aabd79a2bdada1e3440678038f4443a59e5b846397aa0e1b175bf8fc61d565fd89cf4701da690b44e5bd5f4a06fbd15f688619955e71069984b9ed16512fecc5fa213829d07c40f5cdd4f86f071df350123602bf30f92f8a6ec5cb4603364430784dcd694479fb5c48f7c3d1043d124e07f5c05fc384f18431fa2409fc8ad4c380cf676e8ac4830f0360521e92dbc6afd64fe2d56ab6e50d7ad187e0a19046f5a000a6a837fe708469d913a6176c88dbe9aeeadebb01828ca5f65758a6e8f35d529bfb84b07a6c3308bc99161681c178de8d38da18e752984fb322e050e7625124fbe6a2a8eabeb14c7542dd249e190d11756d3628facda6e4926af6442e2c8773aaf88075a1e075c1adc169a623e7ef1ef1e8915f9e6c4ee13ea029052fba46db13818c9b428a06f4c0655a3fb5c6b5738d4b6a2154a6d6d1f252f7086e8435d7e04245ae4f13db5257cf1d35c63de6aba1f63f02b015f5436803ceb25d22dad67b9b3a132a066966de6f214cc7a60923da897e98332220920a333eb79e0e8c73500ce86e65da47aebeb614d95c9783788165a7464063cf6a5351b57c83bfe11b0807cf147527dc968344566fd79aec16412b47918a537818ddffd165b0af7f59fe2c5ca9ea47bebac69a6464db28a999944aee1e5369b149f48e0127a7659d9cbcdb1f9337e26497f318cd7cc9b9525ef534f9214e1ee16a418cc326da7ae27fdea49674e060549a9340000c45d56ce2ee8a075ecd0baef65f9ca5e7bc47d46fbe194fa3764a054f11b09a97b1f55fc1daaa772b7288606a791e07eedf54f9e8d599a9b35c17fd3208eb0ba3a0a1b1885426e72bb14dbc53588197b0b64ab977dfa643392452b2cfe34fc1c49462f882e57fd5b42ba4093d6877a3b1d361999926df9a894172bc953b6f5b5f0fa19b6e0925a1792423dd851360da76b96210c935a62e484600710e7bba36e774f6208639b8f8cf3d55afd6f3cd9a73daa4c584968a5cdaa47486b82ec0f30256c91e87e19a4a4af9b2068f842e624da9a21e57c40cc4d4df57541ebf140e144792ebdfbb49f450dbb1682b4ef3d048b8f291cf38ade4bb69116f9eb713e6a1aa0c2efa0158a59545dc5b36aece53198b1ea6378ede4ae2e44b3fd4a1512b4f007d4e636e46cc7cdabb364e4e0e6914927ee23d111e560fb36d5b4d084c3a60dd6ec0984c84e77c0ca6afbe874490ee51abdc5c79fe948658e038644665927bb3692c2546a375174e572e23f50158fb6b1ddaf223ff94eb675c6db7065dd21404f4f796c722f3d3322517fb11b52fb0215d84baa981b5a3412a51b1a27567be548aa9495873f2343a9913c057d083c126d360027535954298e28ae0b54cc1df2492c7c97516debeda3b980052040392ee27d356017bb24db10d7fd0b9547efaf7c5b993a7ac37d793852b277a902da9e9c37541e8d48b393c13b6ee292d0d86307c25346a749c12f8fe33c24c35407a9c2ebc4295d08e798c8db6a57f26ec35812e613828206a057d1f485d41440a8987c22ed492e03a9344e3f5a335d2a95d4c6513fb7b3020038250ef54e44cda5b3f4633746a842e2ad7bf0a43e7d0b37204a8a41ade245cb1bb4b8f45cfc03e6424f360ae774cc784c7675b240f7199184c7197f2cb6d8e748a67aeac4e4eb548db823cef53aa955596856ea01765c8b47658763fcd7c23e0722dc3f4fa38cd5dc55b3eb39a1e25f1c781cb648a0dd0eb34b5a53e4ee0bb6a050675bc5e2ef52764e6dc978527e80dccf4e7ddf1da3000ea21db9aea3bc395a59a2a7ee481ab4a4ccdad07df5859fe39474a68c96b64ba19155fc209ddbae7f651589927e17e1aef780690f3100a377f0179b18b31fd5b4418c84038573fc559b496a782beec3dcf6e9faf5aef676e10bbec34b1be5888fda49b91e02890d2524c5b369f8a54175f29dedf8156fff690cf186ec77104a798315033bbd27c8362811ca2d8c4642c31222a8e00e7326561c384cc56ea905bc6477ca205d5415d2ceb6198c91d8b00c7f029575400bd3f2621c7d9ca9b6a09ea6f776968b19dc3f3e3b064eac64729960c51a7e543eee830724813acf420368711d6f65ef7d05c6a128fb3a87f170b2def1a1c5f1155f5232d9c16789521661ec721d55308879af1f065f19ca87929f21109110c0960ea70cc1a3ea7ff0c1d3407de92ef7421e42df5c9ab31d2ec0a750a9522869cbe4cabd66908d5823ec0494c639b7ebb4ddc70ab214d026efe21393454cd593bcc7026c50f116bdf47f3d11d676b9b5e59f85c791343890d1e02b146be7dee670a09841052c4e556962c6df3409fdfcdd4ac53f7f64b201dda237f8a38b0d0cef58d4650fabfdc98d7de72568584869a5c7cf99060c08211a107f6a76a028aa41d5fe00f6d4ebc065b8e80cfbcd65a444ffebfeae92009a90134b906a8ef86b6f015e394011dfe3fbfc10bb74cf1a54c2d96196fe5f63114791e29209bd45f47fc33c3977c9a3da562fa95a5bc53121283c78887edbf83148738d99db95d7f07c02df282263fd4c7e3bf913391970b57d1279fdb66e899f9aa294cd677f75056ba8902dca49b6e17c06490c9532a0b5c942ac1c2f81dc0645053f5535e1e9db569c9770f6e29642577ae06df77889cc14b4590e707abb0c5283d559cd24f91b44c63c1a2e966417177e085fe753f2a06750c8fa01c3ec59c806a003b8b16e6d3e0ec753fbcdea07c5f9070aee2ba4d9c9fe41096bc23796af75e6797def0f784b5c7f42e3efeebb67d526959368682043a60b6335e1666b0fb7f0e3a445a6e57398ad10706439db08f9ad285f72041ddc306f2fe7873f7ff1b6066ab51df95bbeaa99e42a95930ead4de4edd9b240779c84b5960a1b8c7b5c59703639ded283357a8be798e8c3fc60b91209898ee6d68b8a25bf250713065988756eb8eff705dff1cb4142c6934e282581a7f76fbce4b22b06d2c0b29dc9ef2b5e3ab8ba3088c5f5a019b098c9ac0e7977edacbe8c46184da2f96384f16c262b73c3c3a647b4ed6f54976bc42ebd189d3d032fe11ca7c5d93f5a97e5d996066efc31601b023361482de5fab48a2a50791b12084234adc2b8261de33d1bef98dd41ac18812baa29667428e5cea59abef65842c0479e0016d09f6bd0f48020e3608a5b714188c44bb3708bb57c46b669fa3ebade5a2149c90bf16ce572d0d1efe01e66f5c1e227d1166b33f1253726596e13a3eae28430e4506647aa20d3a9c54346f62c6a007bc276ab4b21303e91963b20246c47905c6e864425a76450516c734a339da4ac6927bd79f9cd0724a02947ad66edf00d766f97d42d65a71171ec567244d0d8ac9807d21d657e11b0fa197c0291f547c325f06a5e886b52dcb04ed605514d6cc9b26a9ddfb9bbb6ac476ec166cc0ab37912f7e72a5d41cb7ab699da4d849dcacb5c5906071a0d5ede3130fd233fb69cf9e58ff67fd5707cb32cd549900347587a40daf5dcb2fb71105e681a7f13806a0945bd7fa7187fcb4eba0b0d17f6d3809e06f852a7a90d5708761effc370f08672da8b6ae84df6221507420d2a86c9a9fe56b805b027cb798f225894367d8f56fb4d009f8b9c5ee8cebc823111dab23a63d624f63f53be3d6c0a20c12263e4436e462407d72e3d854280d361131c169d9531430e9c556d0c69d57d6ecd4978b6926c0088162b1e6139fc3e8579717b395c0d1d330f56604f4c2b78838058d1152e689b0b8ebb86e47bd8ca858c036b768013bb4edf7e206cdeb617e883b879c90be1fe798904ff76cfbb804991fa6dbcc8ea244855f434cde71b64861e90f83bf1802fb84d31107ffe4d66bad37e0a73fd3a6007b9e124d82f0567439908d4d2a7ed38b222684267d13787be99b5c803e7ad7875536c79f77d1a27083b4a97f5f7cf204d52d11b960d21e83e2aca32d54ee973796abeba919a02acbe4e7bc80ea7cff073249625747db29323cfe3cd4ffa9659fa47fe6f0d4f66fe4b18c6f0848094af0bdfdce86ae8938f53d02923dab35d33e2335521d562ee2699e25196bf4ac765fdccceebde156ce4b875c3bbdf40e6081874eb57509b412b8ef3444227cd0f1b313391b639cde49b3906d91dc46ad8e08452e799e6c408151495c87d24d015d88e5c50d1e4d8a3babdca95d2f3f9dbc30e17716fffa3eaec120e05cd1e1d80a4fe8e31c545fe524c2e0a1d61d2b599ba9e09b362030290b96fa722bd7d7af98769125c18c6079956730e9952cb65b7cc1c72d2f95aa7a18415a847d2a9b0288ab531fa55ceba1fe2741e322e44d3e002 +MD = 45ae4c1aa7ab5c5eb3ef6ed9bcd706fcfebf72bdb5f8f327e1f0bc02 + diff --git a/vendor/ring/third_party/NIST/SHAVS/SHA224Monte.rsp b/vendor/ring/third_party/NIST/SHAVS/SHA224Monte.rsp new file mode 100644 index 00000000..5e608846 --- /dev/null +++ b/vendor/ring/third_party/NIST/SHAVS/SHA224Monte.rsp @@ -0,0 +1,309 @@ +# CAVS 11.1 +# "SHA-224 Monte" information for "sha_values" +# SHA-224 tests are configured for BYTE oriented implementations +# Generated on Wed May 11 17:26:02 2011 + +[L = 28] + +Seed = ed2b70d575d9d0b4196ae84a03eed940057ea89cdd729b95b7d4e6a5 + +COUNT = 0 +MD = cd94d7da13c030208b2d0d78fcfe9ea22fa8906df66aa9a1f42afa70 + +COUNT = 1 +MD = 555846e884633639565d5e0c01dd93ba58edb01ee18e68ccca28f7b8 + +COUNT = 2 +MD = 44d5f4a179b33231f24cc209ed2542ddb931391f2a2d604f80ed460b + +COUNT = 3 +MD = 18678e3c151f05f92a89fc5b2ec56bfc6fafa66d73ffc1937fcab4d0 + +COUNT = 4 +MD = b285f829b0499ff45f8454eda2d4e0997b3f438c2728f1a25cfbb05a + +COUNT = 5 +MD = 206d442c6605be0e675b0efc76243c2f18f2260a93375fb36e469631 + +COUNT = 6 +MD = 1cd8ea34d8483b6a513c52a74e416bac2f322bbaeee02c6b0b05a781 + +COUNT = 7 +MD = 00cee48001fe8442ef39c3433ed05473179f34205d337940d4bfd3cd + +COUNT = 8 +MD = ead3ad27819401912bc9abfdb50037672a3aed0e94fbaa1cc0560621 + +COUNT = 9 +MD = 8f4dd5aef9cea829d8802ffcced2e8ed6b48ac23bbfbb0fae2fad0fd + +COUNT = 10 +MD = 03aeb918feab459e39af29ff3aaf406088bf06d793338bbd563641a2 + +COUNT = 11 +MD = de80c312b153fbd7241c8bc432d1ed253d26dcc6f458b953ac2d9259 + +COUNT = 12 +MD = 3eb8d347cc2565ddd71f7fc21cff7eb3a2cf8e85c5e1d4c751f69f26 + +COUNT = 13 +MD = dbfd7033a4f884ecf7053f07b4c51f3efb1c09084cc7bbe667196a3e + +COUNT = 14 +MD = 5323fc60310fe29900eb7a500f29897001c37945c5f8849674725553 + +COUNT = 15 +MD = c3d9416549bebebf679c0122a9c5bb86c0b514c6a4e9eda1e9782040 + +COUNT = 16 +MD = 749fc9c8c21957ddcaf5eff69c297284d722c79be1fc6c910495a586 + +COUNT = 17 +MD = aa307d91c4037372ff0ca60eb17ec8f1faba862601b95754783ea808 + +COUNT = 18 +MD = 071e361909c38791e941d995b0b25a3294bdf39456cc012806ada3c5 + +COUNT = 19 +MD = 18751a765f3b06fc2c9a1888d4bb78b2d2226799a54dba72b5429f25 + +COUNT = 20 +MD = 54b39c96f6377e3fc2ae0ba4ec89049a6c04808da3fa0415c9053ce4 + +COUNT = 21 +MD = 58c1eda7eab2fc4046ae153ee95de5df036dbba25b9bb5c5428ea882 + +COUNT = 22 +MD = 3a02eaf55d04b6052b7d79b96d1e316f90f5dbbb3217dbfaea55faef + +COUNT = 23 +MD = c8b5eac17f450458c60c075a8f75a24a1dbc58247fcd0ccfaf03e446 + +COUNT = 24 +MD = 53084cacfebbc4d1ff2db614b42714c18ddde36c6b7c2fbc3b1a8706 + +COUNT = 25 +MD = 528b867aa481d42fc4931a47d24c3c905aaafa8f6dd5820c67d3579c + +COUNT = 26 +MD = f0a3cd3f53eb72df80ab67d264a973b6bb2f58bde8f636d9100e8864 + +COUNT = 27 +MD = 7912f20299d803ba917f408a5a59822d147bcd1008ad5c7b678e2390 + +COUNT = 28 +MD = 6f0e49505c15669302133d66e45d192e0c6ad02fc5b9aa128aa5517a + +COUNT = 29 +MD = d06aed0f18e6c377174fd00cc74a92020b3df218c376eac0501a094a + +COUNT = 30 +MD = cb1bbf7cc5dad591d32534c570e5bca93b8952832779dd6e0ccdc91c + +COUNT = 31 +MD = 4775bc11834930118654a3e66e5b7f51871d6f5068f4305dc2845574 + +COUNT = 32 +MD = ce3b5703ed9f946ec4af62fade6e69c2751474ab8da570064ecd2ef6 + +COUNT = 33 +MD = 49a9e1aa84700874ac27eee43f193df69ed6718b131c4854f729a32e + +COUNT = 34 +MD = d2c6592251a27cae7d819ac7b476c8a2ff608e57b018f79e0cf19b87 + +COUNT = 35 +MD = a861be4fe188858b913aad179ba575cec91bed54c1ca27608daa27dc + +COUNT = 36 +MD = bf7975e63aa7f1bef84e7446f1c4a00a75c13285fd7c4a7a8318b1cf + +COUNT = 37 +MD = 5d125b14e966c9e431bdc5592d3e6305fae678dc5d6dd064fa1345f9 + +COUNT = 38 +MD = 8c0fbb471404371145dbb66e8b1c6fc428e6dcfa263e3f5ddb47b30d + +COUNT = 39 +MD = 7148b69b04457296fca18e6f7b7f2145d9af9e6bc8f48b8571af0e53 + +COUNT = 40 +MD = 0bd47a04fc42fb3d9643496e5b0719c22262f741e862adfcef91d61c + +COUNT = 41 +MD = 3dbb14133351e5d4bc885d9594c07f7f0f99d4a7c745eff3e7aadc2c + +COUNT = 42 +MD = 94f6ba7f94ba9903f7e9bde9b131353fce560c7de7159458f1a39cfa + +COUNT = 43 +MD = 65fc03fabbf57904f572358c20f004aa16e0b5ae6530fa961ea10b9d + +COUNT = 44 +MD = e46532e3e4bd0a0cb389abfba5d679e916a7c193324f1bac498ee1ee + +COUNT = 45 +MD = 131d096c684345311cff958706eded139676a74d97a1beb861998485 + +COUNT = 46 +MD = fe3e03637088ac8ee2e035bfc1e7f4e944304663c832c26089e85f9f + +COUNT = 47 +MD = d570c2b7040fc721b41f2d213f6ee87ac1e37f2b86526cf46c699aa7 + +COUNT = 48 +MD = 82ede72ad163b914be7c22c085cd99438b6d5557ddd3b752f0a9fb7b + +COUNT = 49 +MD = 343c21a0cbde3cccdbbd66eee32c50f5a54b0ac267ec3f41ec07a67f + +COUNT = 50 +MD = 94ad254f3b4a76f6140d0dd3775bd75eb3c081085fcb76c91b4cca92 + +COUNT = 51 +MD = 65fa84f358bc32caaff799129bc2cad883636826415703a2dd1a3cbe + +COUNT = 52 +MD = 1c2f47c532856198d03dd85275357dce085c8f6c5a871aac4ff4ea28 + +COUNT = 53 +MD = 1d51c1019131b41a076cc603f4a8e56b2f4ee70dba326af30d926827 + +COUNT = 54 +MD = 9789daba3a8e9702d2d0b319878f88b08ebc5876dd5dff6414bf1922 + +COUNT = 55 +MD = 1968789785f1ef61f849bcb29fbc1491c006021f729718e72f29b80d + +COUNT = 56 +MD = 62dca9550461f8a85e1abca4192a8a55a6e6663ebcda9ba6fb95f10c + +COUNT = 57 +MD = ee190aa251c1a2ae0a376b4c6b6ab3bb09f743fa01eafaab68d170e3 + +COUNT = 58 +MD = 02273be94aaaf4a1d22496821e8abda8c418d3a4c278947c27d6c912 + +COUNT = 59 +MD = 3998a213e392978a38016545a59bd435180da66d2b3da373088f406a + +COUNT = 60 +MD = 7308f2145d345bdb01c38a9993a0ec81ed5164ed0c6caabfa3b23fea + +COUNT = 61 +MD = 3ccde61f4734978995b7489bad8c1e6bafe03f7c3886e9b4ef0f1aa0 + +COUNT = 62 +MD = cca9745f59f3ae2bbb8d65d31c171aa33960c8c6fa4689bb7e6d2152 + +COUNT = 63 +MD = c976de72db46c1a254293af6093c563ce43232077c249584c016ff6f + +COUNT = 64 +MD = f1448af3cfe317aff1470f0a3de7bf533d77dc7f55e8dd790fd57727 + +COUNT = 65 +MD = d4be0ccfe4913851c9636ed036c625524e72891c5c0627aae50288ce + +COUNT = 66 +MD = 6bd99c53693d4e2467ba6094710a6d2f48cc2ae907c4ae28604586a1 + +COUNT = 67 +MD = 2eb4fa0872ede2a378386e40002cb00b4d1c2fca3413b944ed210915 + +COUNT = 68 +MD = 48b624151c9d3a1cc8e9d6665d42d4e640ac91abcd3556a31ff0250c + +COUNT = 69 +MD = 31159840b7cb040d819ebee1ed0e52d09f5805be523cccc22eeacba9 + +COUNT = 70 +MD = f9a67791dcae0aea00f77f8536ddba439e9fcf7e5b1ed827f83818a8 + +COUNT = 71 +MD = a5913105fba645ba0df942da96d271a1d5efb923a4f61eb463450ea9 + +COUNT = 72 +MD = 6ece291f81eceaa9eb5a5e228c9924f165b8b10e2cf0e143dd5fe601 + +COUNT = 73 +MD = e07ab143f09eb8ad0d381b888adb22229c2e2a8b067e0fd012ef67a7 + +COUNT = 74 +MD = 88a33980be5bc911c1713d5c2bd2e5ecca7fc87879501aefa9722c89 + +COUNT = 75 +MD = a709d188da8ee187d91bd17069f785ebb379df013d78844a45b2bfe5 + +COUNT = 76 +MD = 306fa7bd696b3e9841f84d1c861712acba0febddd7a952499b96579e + +COUNT = 77 +MD = 61341dee2e2869112bba2e1077fb409375f755dcafc1457bf49e0e8e + +COUNT = 78 +MD = 0959a6e3b727c6213119b9e8411132b5819eb848bec6ebda0b75578a + +COUNT = 79 +MD = 11cef0312aaedb9d0b26de64656406c8f4c358e6d3db459d364481de + +COUNT = 80 +MD = 5de71b191eec70e591c22ebe3a5d2973aa3172f1c272e926cc0d4873 + +COUNT = 81 +MD = ab218bf4268aec9b41dd2db80622e4c0319cc0de12a60e06d80414ea + +COUNT = 82 +MD = 5c83874afe6da0443abfbbbf8ceef38f9400b63593ee7a29d467b4f5 + +COUNT = 83 +MD = ba0fd01f699a0d00a0dff4c63f6ad19e9530a7ad11fec504e6481816 + +COUNT = 84 +MD = 835ec2c57424baaeed09a7c0c0b6e8bf9d1cec83de4c719846c990fb + +COUNT = 85 +MD = 64d95f2c92343d8fca6f6914fba8814478850b5d4c2eb227f4ae6fa1 + +COUNT = 86 +MD = f8dd5355827ac4bd040fc05ed6cb2914d013f126487a6d5f2c22f767 + +COUNT = 87 +MD = be5bbf68d6b99749edefa6b113638ca5cf5fddfd8fcd4d719aeb54b5 + +COUNT = 88 +MD = 3434d03e98d0af69281e7a7ff8301369c5bc6166cd29b83397ad3fd7 + +COUNT = 89 +MD = 747b2a7cfb8c4fef7de0a08499f8b19f37e9161b855a84bd50ef84c5 + +COUNT = 90 +MD = c1c1fa2bbb10c5672b040ed0c33d4d93e0fd210d1373fc7fd2312c0c + +COUNT = 91 +MD = 671f67380b7676ee7c9fbfe71f3807e3575745ec3ae3128420a141fd + +COUNT = 92 +MD = e88394adf710b9764a448abc6d62928b0268c6b119306f3c93d7b6d2 + +COUNT = 93 +MD = 711cc90bfdeed121bd5a8629a9cba6df7bf8df89184ec64ee918cc67 + +COUNT = 94 +MD = 3f63432484eaa1f389d27947a84e256618f9bc81015993cac386887a + +COUNT = 95 +MD = e00e0bf2a32227461230a065bbd2eeb5364277e83a850c53ef5c92e9 + +COUNT = 96 +MD = 1977311cea23a681c83dc58a6863e362bf6c02e30f4c9c4c8439ab4e + +COUNT = 97 +MD = 2853a64f56c6282de53e30eba9418dd62eccb8c9a662c313b4768265 + +COUNT = 98 +MD = ca9d0a2eeb484b9809c3850f166362d893f951f5e93cc7a3c72522e0 + +COUNT = 99 +MD = 27033d2d89329ba9d2a39c0292552a5f1f945c115d5abf2064e93754 + diff --git a/vendor/ring/third_party/NIST/SHAVS/SHA224ShortMsg.rsp b/vendor/ring/third_party/NIST/SHAVS/SHA224ShortMsg.rsp new file mode 100644 index 00000000..d8a946a7 --- /dev/null +++ b/vendor/ring/third_party/NIST/SHAVS/SHA224ShortMsg.rsp @@ -0,0 +1,267 @@ +# CAVS 11.0 +# "SHA-224 ShortMsg" information +# SHA-224 tests are configured for BYTE oriented implementations +# Generated on Tue Mar 15 08:23:36 2011 + +[L = 28] + +Len = 0 +Msg = 00 +MD = d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f + +Len = 8 +Msg = 84 +MD = 3cd36921df5d6963e73739cf4d20211e2d8877c19cff087ade9d0e3a + +Len = 16 +Msg = 5c7b +MD = daff9bce685eb831f97fc1225b03c275a6c112e2d6e76f5faf7a36e6 + +Len = 24 +Msg = 51ca3d +MD = 2c8959023515476e38388abb43599a29876b4b33d56adc06032de3a2 + +Len = 32 +Msg = 6084347e +MD = ae57c0a6d49739ba338adfa53bdae063e5c09122b77604780a8eeaa3 + +Len = 40 +Msg = 493e14623c +MD = 7f631f295e024e74552083245ca8f988a3fb65680ae97c3040d2e65c + +Len = 48 +Msg = d729d8cd1631 +MD = 342e8e6b23c1c6a54910631f098e08e836259c57e49c1b1d023d166d + +Len = 56 +Msg = cbf2061e10faa5 +MD = 3aa702b1b66dc57d7aec3ccdbdfbd88592d7520f843ba5d0fa481168 + +Len = 64 +Msg = 5f77b3664823c33e +MD = bdf21ff325f754157ccf417f4855360a72e8fd117d28c8fe7da3ea38 + +Len = 72 +Msg = 10713b894de4a734c0 +MD = 03842600c86f5cd60c3a2147a067cb962a05303c3488b05cb45327bd + +Len = 80 +Msg = 006470d57dad9893dc03 +MD = c90026cda5ad24115059c62ae9add57793ade445d4742273288bbce7 + +Len = 88 +Msg = 6f29ca274190400720bba2 +MD = ac53157947aa4b2a19089182382a4363d182dd8e4ca79cd8571390be + +Len = 96 +Msg = 17e8556176fcca2addbdde29 +MD = cc6ad0488db0222066f740557b5758a19b30372b302332295d8c3aff + +Len = 104 +Msg = dbf163601db9a122a4026824de +MD = 9849845f4e47e1ece9a1c1e01a0d896ffea61c6c8894a75a11ce5f49 + +Len = 112 +Msg = 5e1ef2ad86ceaf5439fe87d2ec9b +MD = 223c5d5d4a0116b32cea044f9af0fe44babea1c5ab201502591bcd5f + +Len = 120 +Msg = 65f3b9866fb8002b53cfaf806f702f +MD = b1e0806a218d593821fde8e9eacc44ab5287c32209a94f011ab66b75 + +Len = 128 +Msg = b776708ffb91b3515ac46598ab9fa796 +MD = 427311b1d7ab2488791c4deeb4251d783fe5f9806bfdfb5188c5443d + +Len = 136 +Msg = a4bc10b1a62c96d459fbaf3a5aa3face73 +MD = d7e6634723ac25cb1879bdb1508da05313530419013fe255967a39e1 + +Len = 144 +Msg = 9e8f3c6645c1749b55c50d2018ce40dc2427 +MD = 2f5a583bf588c8988a572d128a95bea5ef1b66780a7d4be9c29efc31 + +Len = 152 +Msg = 2db6d207c0b7d9117f24d78ee59abf2f316978 +MD = 35681fce28307cae19522c23cbd4a77969347f7d8ee4a3088ba90ada + +Len = 160 +Msg = 3df5e7f399f6dd61a12a9d4e9464fc4997c1f37b +MD = a3e68076e30751085a843a6cbfbf0f3dee63d9c4219c914372e50b28 + +Len = 168 +Msg = 65781d018f27ca0c72a9fa9ab4648ed369646dd3ce +MD = d15ef0d872d02da6427b8d0349dea2f204e67133b7365b4b150efc3c + +Len = 176 +Msg = af48eeddd93fee69d1bd7de428a63986011d10945eaf +MD = b89d428ee42e397cf11029ecbb27baddd036c8938f51c8ab56b875ac + +Len = 184 +Msg = df2bf0d5f9c994ac69d78baa0d512eceb74d8a047531c1 +MD = db8e1ce68c8c6b84d6db755c2b8bf54f3c4b081a881efcddaf303294 + +Len = 192 +Msg = 48d2f20955ea2d13433c20bc0404eb2e6ad79ed28f7cb4c0 +MD = 3617cc3179f8b59adce181eebeed5e2763f62650949224a67e53694b + +Len = 200 +Msg = 218f74a42d3a47ef3b806601fba024b078cbff4e4b85772e0e +MD = b5f40b95dcc363b97e9d00b67c5d7c37f17ab563297d2d67a4df20c9 + +Len = 208 +Msg = ef55b1e797000b04fcdb9b3021b09327e3b4e269d20cabdf418f +MD = 827b223d51240c2e3271c534c19c5637b6fe10083e85bcf06761ef21 + +Len = 216 +Msg = 96df4387dc2c40297043bea36483f65e4eb1e07e93359cb7e68610 +MD = 98e430a63fcdedafc9419010f7f59a4d816a45b4f973beb62530ff8c + +Len = 224 +Msg = 3ec0aa8d30d5ed825b77dc7095f421b1e608158797a377ff8bed641b +MD = 3108321eb7ff857f6aae69101b937f32a51ea279a6c14ba5232ac8c1 + +Len = 232 +Msg = 8b0239712039f077ce323b35f4e306787b9b35270096e57735cff45d84 +MD = a5c740d3ce46bb2e0a048488f2b0605c6d0ca0ea2f382d043d13db97 + +Len = 240 +Msg = 044be30167a9758c46c727921dc4eb4e0dcb965623423e6fdd44e7a4ea52 +MD = 6eb78313c743ea8769d8340f284dda6ded64a1db64392f21abb82c5c + +Len = 248 +Msg = 57f6118bacce47ecc31ce8b0c083d3c9219e0dbe9e4fbea154537c41231acc +MD = 0dbb53c866d63af44c222c76c825df0e379dcedfb958db03b6fd29a5 + +Len = 256 +Msg = fe1f0fb02c9011f4c8c5905934ed15136771737ce31c5859e67f235fe594f5f6 +MD = bbeaacc632c2a3db2a9b47f157ab54aa27776c6e74cf0bcaa91b06d5 + +Len = 264 +Msg = 14fb01ae9d6015ecb3e56d6ecdfa4bc0533186adf8457f5e4a5c57c687895f3db3 +MD = 178272c7d7cc71b15074c27e3b7997d4a3ba99626986a1a16cf30030 + +Len = 272 +Msg = ff6c49712f044f4063c14125c0cdfba18ed8b7138453768a45dfa2d82a05f1e84227 +MD = 403284c888a7280bc8bfc25f0c34182cd378306a21a1404d4e1c40cf + +Len = 280 +Msg = f900bd7e0117247f97c8fc7a665c76a35f571c3366571d6c4a3ee5d7fb93f1d1f726e2 +MD = 48235b9820d66d8885faabf6a9ede63ba2a21b6177e987a33242373e + +Len = 288 +Msg = 42d38188ac49440cfefb77db975e083e6b22348c4c67f0f8692e88ad140d861dc828d595 +MD = 615344f890e5bcf71b5efe39de1fc942ba1fe30dd9e9146adb6a41bf + +Len = 296 +Msg = 74fdd7d958b8ae7c2c3c5cff4266dfb2b3b842c9f59ecbbcaff575edcbcda08ccd6e08b764 +MD = 66d7d6c54fc7775a0ba845ba3e11719fa535b9289f20b098c5f7a342 + +Len = 304 +Msg = 934416dd0581e22f2bfbece7bb64afe820451fa21342df7e6f9fb37c4103381a1f7cd379bcc4 +MD = fae8f1aa22def4dbaa814c5b0babdec43394951792c937050d2963a6 + +Len = 312 +Msg = 102401c84a716ae72579c6ae79c359ea309ffd95abffae4c61884c03c9e99df77b6c92e492cacb +MD = 8f34812d57a16ef8a51ad987660c5f8623e0fa9d89846e28d46d14d9 + +Len = 320 +Msg = 79bc8fb60f85d15a2386566e3e7314df284533085add1c7bb6ead3ff760c86d5633a66404761b544 +MD = 65c54014cfa30f0bc27d1c6efa96ae8481f4c2505bff272956eab0df + +Len = 328 +Msg = db3121ea71294983b185207a9d8de3e484a66c0431bf07c962eb82977c4f834b7c3f1e7931a4a7f7a9 +MD = 9316d2f021c2913d63a7e66924c87c161c3cfde0ea7ba07f54772862 + +Len = 336 +Msg = 0dd51aa660c5cb4b7f78c46852c1db8707ab451c1367b6187388c8bb3873a1aa4210d0414cc6792a29a7 +MD = 31989e7a62a5132a5070d77250d8904bb82d457dc63469d06b50185e + +Len = 344 +Msg = 487fd2e5b694b7071d3789a258a51e8604dc0d3e8f5d62f39131968e602abe1ddf6b0278962a512408b553 +MD = e798683438284626d710877d9eea3a0e02f349fc43acb7f9f8f9e81c + +Len = 352 +Msg = 11183bdebfef58e4da5b1cb73be0d30b20da304d8659d921da2e270fd14626799537e4d12119e809ee97004a +MD = 96870657d6cb668be3995aa8bd31df77840d1d1915d72482e83b6b2c + +Len = 360 +Msg = a239de5c8e2644e8f030d94d98f1a30664e6fd961dc2977a9c08be5c31d8de89450945a53d79299ea2a1edde7f +MD = e99743d4fd26c8800c36a67b6762247c29da6b62794123c59de06dc0 + +Len = 368 +Msg = 917c4577aa6b0f9df49999fc1c958cb09b7fd5fc80be949670f03545eb27dcaed052076b24f96f5e0f2e2f4527c0 +MD = 7ecd693d4d9cf43929464698efa0bac33c2e1424f816edc769260978 + +Len = 376 +Msg = c3f1e735a6741aa481ad577a98dbac1f03cc80ea0dae1b94db2369ed4e93facd29c64e4e77b25038279120bdfa3715 +MD = 86f0d89d8e14fd8b6606412d71a7a54a347b304ea5d49c208f2266ab + +Len = 384 +Msg = de4fbfd553cdf37019f25afa82dc6b9970f4bb1ebbc37f80d3084c88a70722cdc523a9e3c2afbad0dc0221bfdec9a2f9 +MD = 4c5262acb4a2a44eaa9bc6757024fb202ef4d5a7a16fa37252a422b5 + +Len = 392 +Msg = db2e2eb636610cf42e9b33433acce1b3b925949f297dd83199f45d2861d64cd910c2db74a60b2089045e22cba0a536137d +MD = 16bf4e45bcdc60447c68dcb30e6b08f55ce9f4124a29cf1f9a9d065d + +Len = 400 +Msg = a8e729d336d5d6ac50e1e22f0b193b66e26042fc6459214129875e740ab2b142918c138aaf941863ad3b7e6065450613b273 +MD = 452bf2e5ebfc4e451cc434bc09e2a10032eed0b7627cf55e7e5ed0e2 + +Len = 408 +Msg = d05317d4b535f9d10f739d0c2dedf3ffb090c1ad9d205089b1346693f58273c4925c0face57ba45ad6fc687c66a88fc78878be +MD = 4f03c439e097b51b00e314f675937c4d911505859fb7ab16adc65e44 + +Len = 416 +Msg = 26bb4ed4f0424c60fe4212ff8c955e89e2f553a7d7701be59416d2089af59fa1074724e214e919b1e30f33fb78374b4b055bbc9b +MD = e7c899e27009d4dc77c2d300f191b757e52c9e7eac4b023bfab2b52a + +Len = 424 +Msg = f015ec83944f03292463c4345fdb1c26d1ea07645facbc9520ae244b6eb191e53dabadb4ac0fb15cda4ed77dfb9e1193abfafb1b81 +MD = 459e40b3fbd612912f0217c60099379ce077cd02505871b0c9c14e7a + +Len = 432 +Msg = 0786706f680c27b792d054faa63f499a8e6b5ddb90502946235bf74c022d772c809cb4171bfa4791539aca1abd91900e53ba93ca0efd +MD = fadebab7c3d0fb8e97e429b79083087735e4ab385a789521260ef3ad + +Len = 440 +Msg = 445e8698eeb8accbaac4ffa7d934fffd16014a430ef70f3a9174c6cfe96d1e3f6ab1377f4a7212dbb30146dd17d9f470c4dffc45b8e871 +MD = 4c7ae028c0fe61f2a9cada61fae30685b77f04c6442576e912af9fa6 + +Len = 448 +Msg = 52839f2f0853a30df14ec897a1914c685c1ac21470d00654c8c37663bfb65fa732dbb694d9dd09ced723b48d8f545846ba168988b61cc724 +MD = 2f755a57674b49d5c25cb37348f35b6fd2de2552c749f2645ba63d20 + +Len = 456 +Msg = 5fe8c2072d8900287ccaf07f3f66b0c22acd3e0bb91d9573754e19e373ac35271d8b43443436ac0c162850ef3d7f281409ad29a9bf716c77d1 +MD = 42909757f6e229f69f04cc7a863c4e70e48c7c3575057b455c959775 + +Len = 464 +Msg = e8064d83f3d643af8718c87e3ccd6a9733685eac61d572a22ab943f232fcb04f70858e8984449db14a76bb7eaf2458efc3ed2a32100622c52b7f +MD = 1a1d8ed54cb45c97bc970754b43eb93d9eabde4c7b07f76ad82d8ede + +Len = 472 +Msg = 87c9a517e28d1bb54ad20fca76460efd894d7786e68ee8d746b2f68208682157c8ad06cc324ad7a3189e09c6c39d4c768719c0a49a41669f2767d5 +MD = 605977cf87b9b309bbddaaa64e528ace66b04df9f72c0e7ec88be1da + +Len = 480 +Msg = 59fdac3b6b32039291801c7d6f46ede8d26dc5b7a192e007116739b617569f2523680b3c0b6631af453e55805aa760c6970833ac06963bbc9dbd455e +MD = e9f0cb1dc8337e906385892f2348a8ba4412318ecad9b96e3711531f + +Len = 488 +Msg = 30350a4df0b58ff49c0fa09e426fcd7007b290c760c825c1855d9b0023b82caa51e3cab4c60cfa61492be50568e5ac0f6db0fd468e39e4536403e3809f +MD = 776cc6636c02408fbf65ace73ae80017108b917c16c5a912fd860241 + +Len = 496 +Msg = ef797a0d43c30b4fe1014bdb9420879c2ff845d27e73d55a7df22930c8ece73253d8bb265b4ef2ff9c69455cc56ff25229b4126bb7bb26ee2c9ff36187b1 +MD = f5b9ffb102affac352a4a535a00f89b06c268cf4881d712668906025 + +Len = 504 +Msg = 716944de41710c29b659be10480bb25a351a39e577ee30e8f422d57cf62ad95bda39b6e70c61426e33fd84aca84cc7912d5eee45dc34076a5d2323a15c7964 +MD = 61645ac748db567ac862796b8d06a47afebfa2e1783d5c5f3bcd81e2 + +Len = 512 +Msg = a3310ba064be2e14ad32276e18cd0310c933a6e650c3c754d0243c6c61207865b4b65248f66a08edf6e0832689a9dc3a2e5d2095eeea50bd862bac88c8bd318d +MD = b2a5586d9cbf0baa999157b4af06d88ae08d7c9faab4bc1a96829d65 + diff --git a/vendor/ring/third_party/NIST/SHAVS/SHA256LongMsg.rsp b/vendor/ring/third_party/NIST/SHAVS/SHA256LongMsg.rsp new file mode 100644 index 00000000..5fc13a40 --- /dev/null +++ b/vendor/ring/third_party/NIST/SHAVS/SHA256LongMsg.rsp @@ -0,0 +1,263 @@ +# CAVS 11.0 +# "SHA-256 LongMsg" information +# SHA-256 tests are configured for BYTE oriented implementations +# Generated on Tue Mar 15 08:23:38 2011 + +[L = 32] + +Len = 1304 +Msg = 451101250ec6f26652249d59dc974b7361d571a8101cdfd36aba3b5854d3ae086b5fdd4597721b66e3c0dc5d8c606d9657d0e323283a5217d1f53f2f284f57b85c8a61ac8924711f895c5ed90ef17745ed2d728abd22a5f7a13479a462d71b56c19a74a40b655c58edfe0a188ad2cf46cbf30524f65d423c837dd1ff2bf462ac4198007345bb44dbb7b1c861298cdf61982a833afc728fae1eda2f87aa2c9480858bec +MD = 3c593aa539fdcdae516cdf2f15000f6634185c88f505b39775fb9ab137a10aa2 + +Len = 2096 +Msg = 6b918fb1a5ad1f9c5e5dbdf10a93a9c8f6bca89f37e79c9fe12a57227941b173ac79d8d440cde8c64c4ebc84a4c803d198a296f3de060900cc427f58ca6ec373084f95dd6c7c427ecfbf781f68be572a88dbcbb188581ab200bfb99a3a816407e7dd6dd21003554d4f7a99c93ebfce5c302ff0e11f26f83fe669acefb0c1bbb8b1e909bd14aa48ba3445c88b0e1190eef765ad898ab8ca2fe507015f1578f10dce3c11a55fb9434ee6e9ad6cc0fdc4684447a9b3b156b908646360f24fec2d8fa69e2c93db78708fcd2eef743dcb9353819b8d667c48ed54cd436fb1476598c4a1d7028e6f2ff50751db36ab6bc32435152a00abd3d58d9a8770d9a3e52d5a3628ae3c9e0325 +MD = 46500b6ae1ab40bde097ef168b0f3199049b55545a1588792d39d594f493dca7 + +Len = 2888 +Msg = 82829690aa3733c62b90d3297886952fc1dc473d67bb7d6bb299e088c65fc95ed3ca0f368d111d9fdcc9476cd4065efce7c481be598537f3f53bbbb6ff67973a69837454499e31398b463288e3aafb8b0600fdba1a25af806b83e1425f384e9eac7570f0c823981ba2cd3d868fba94648759623991e30f997c3bfb33d019150f0467a914f1eb79cd8727106dbf7d5310d0975943a6067cc79029b09239511417d922c7c7ac3dfdd8a41c52455b3c5e164b8289e141d820910f17a9668129743d936f7312e1604bc35f73ab164a3fddfe5fe19b1a4a9f237f61cb8eb792e95d099a1455fb789d8d1622f6c5e976cef951737e36f7a9a4ad19ee0d068e53d9f60457d9148d5a3ce85a546b45c5c631d995f11f037e472fe4e81fa7b9f2ac4068b5308858cd6d8586165c9bd6b322afa755408da9b90a87f3735a5f50eb8568daa58ee7cbc59abf8fd2a44e1eba72928816c890d1b0dbf6004208ff7381c697755adac0137cca342b1693 +MD = 5f4e16a72d6c9857da0ba009ccacd4f26d7f6bf6c1b78a2ed35e68fcb15b8e40 + +Len = 3680 +Msg = 5f664be0c0f3d2fc9a1a7ed6b515ef9c52ad1c7fb3acf2c2de943e109f91cc12ccadd041cc4386f95ab616cf8762ba25fed322fc8c351809e00c600a8f26e25a5bcd0bc3b44170947f65b4f417b8ac769187c2ee4561978289cced04c036c37f942ec10f7fd4d7f6908e22ed6cfd0fb89330c2fde417b956643aaca53baab8a8ff38bdcd35e60547159b26618e1b29128a35ebd2733fc4adf6bf6796076b09fd2554c6a4df5e40ae97f389f986f843ad00000515f9c001aec9c4e47e2c60fea78de8a33c8423d1539dfe125c5b7ea4b17cf8d86e7f84b88264afec06b370dfcebf5e1d3e2c1f005faf248b321593964587852b830c7231504fe947d6a385f399441cfc52df3914fa55cdba25bd215f91a80fc8ffa872b34113dbbd9504868331a38c081fa659574b186169db590f48be67fe75885b6c877d37ec16ebde5ad7be6414084e88670f7b7f485efcf44599f44cbbfbc62e48f62b438319823aeb3767101ec6868e4c85b113ea623193ab9a5ae0ac226328ee4674bf0a90ff1f20eb542e110870bfee01165ab03c2240299319aa3ab1045247bf7f34e8410d96e13aae465597b42336cad2de00b67602a7cb5832cd7253b239ab752a85f452a6166e9de0523bf9c20c2a0c274396d5 +MD = 044d823532092c22a4b48181cfb2c796e1f5b98bcd713a21f70b5afcceef1d73 + +Len = 4472 +Msg = 9d64d891d99bb8aba23a29a8f69b32482714e031d31dde3317b046d000f6b7fc421fa8212d91fb66dc46d531b06faeeafd5ea40302a215351f746c0c42523ba5a3e98bb7b13870d04bf3e0e13425c4fdc11a505ed57c90a90fbc447242b3ee03268a29594dd73c705808efc16a059e08dd118b4a34f178175151760de963f89d34c92b12e9b58ace694fadd73a576193b80bfed0074bf5074cfba9e21da980fb366f39e76d1b8073e88ebf2d8d623827bad051f736d02e02688185fbc7ccaea69244fae2c15146e63b8ed0cb496f494b4b272bc8aac94c8f0dadb45fd015ab25b210170acd9f05afcc1786b758c6bc87d3d93449497d7637a345db161ecc9f00fc9b37677a4de55701f189fba0afba63baaf1584fc36d5819212a5299b39b2c0daad0302aea20d6544e3829f0b726b68686e7681ac3a91f543dcb79f2da30aecb30d23e252e7a661fcb619a98056f61d46e1fe473fd3d11b1c6bbc80be54d20cee843e0f4f65d7d49032f523e6a4830abacf56de9f46bd7c86865ad4359230a9f5dafc928b61c9456a1fbf1427a53cb82dff264eb2de7f9feaf739a47aa64c4a2fd70772f026a33cf1451e852a9e47ae083a159f62e23c0cae8402f775d84f77044204b765fb8e418d6cbb7dd7dacc74b148cbda95991f4c3cf65dd60e6f61b8dce59e6ad127b2dda65b3d0416a0f49392f1f107354c4de6fa14f1482db5a9961f867b921ef33697a4db4d22cf37e69211fd2f2c2944f16252a86755baf0509835ee433733a743f8f0b493e0eae8cb +MD = db593a375cb27df689cd78b5154949e5bc30094a05d704c0295d547385176662 + +Len = 5264 +Msg = 7dd546397a9a0129861fb6815d419a307f90d259d55f3503961754126cd1b776d3236aa2c239b93f8e2837220b80057cf42050518d4f1c2c860840102394b2b19a5f05e4bd043055d8aa9178dd9332c2bef24a181bfd07881d448a37a241349a9a3020e9b021f0d12e4bcd6a1aa3a968a5adc795c7927e7f23743a6d30fec3989a3fc298e6b8811d56b3f2df0cd7f3d871fad0b0d83609795f3f569c16f3e9136433f3d9a6f2699f188b08c1f9589778ea806c51981031de9a4ee8ab9d4a2d73beb5bb9437f632c13e7b18f72a4d1db2d8e8a3604d497d169c48f7820a281721716d23b1e2ed63ea8e2a2869e7df0eed02d97dc5400876892dd68c09a8b7308345023219efff8581d24143ff7836f09031fc0368b976a29f15a0ae28be1fff02011df1b2a6531ff0d0676ea124794e052df93c32ffbb8bc11b4d65c793880d076f6566654e12b99e5145b33734d1adb3be7731095cfeb9550985b9ce7019e0f855839b1b3163dcf31c8319a9f0659702ac1ee8d71667b3c5a5f2b3259dfa023e7c1e98ba956f0e57fbc8a8dfa05e935abe976b8276200177b83a5ab46254fb42acdf632bc35eda32b4bc69c18ce32a23bd8ac2f3c44e2bd50905b764074f516bac6d06570357c5ec10086338fc1de2c5729ef313481cb94562fcd01bd3128e20467289259d8259edd7549f2a373346a8a27c08c94ab0343189c6afc20fc639cb4093f27cd8081d9ed1472381864edb3518cc08fc11322400470c5c420492dbd3637a4b46fd119965c58af92331962bd29b35fc96e6cb0f1a6476dd81f79ffba077cf9c6a54c456ab7dc529fa8032bde8f25feb7e11a27fe7a8ab3c693314219a4439ebd0254adbd9bf9fb9ecba4b19e0e6f3dd9cdae1fbcfdb5481e1ff1ad62991614260b8cbb05554c0b3e32908c8203f99 +MD = 0599f88c429a3d4fcbb0206fa57e344121afdf8e56f78e3f5e61ba3bcf134ec6 + +Len = 6056 +Msg = 42172d5fdae447c4cfdd13836bb8b833c0cb85f7327f92983501a4d7583a5201830266c37c908640b0351461314b526cfb68cad97bd7ed615248fa5756c6213bd9eae98d2f4ecfdf6a452f2e68c9687210b53c74d83575e08a7ace9b49b21056cf377c64f80669c884742e93181c426d871ca2715081733e68ffe94a39e6677aea51e8f0e1a09d258629d7374a2b2884e903c577eba32fa2713f130d2e496eceb4a0f4daf105b31bf9cef4c306de62dfbcd46e2fb283f1352fa3138c31c56d7bb48d6aca301bf3d464ca4bde521d37a78bf66340ac09011e2991b36e4941aba8727e1067a7cba4784f85a53138d0f104dbd16d54e21ea686e772b95c7fa6717e77dcb05a5dfe102e4267c963bfdfd61d36cd53105aa82a95f2afeefddada07254a10104a5a9a7d1fc6d8811def322f1b2352df1e1e90d372d1ae1afa62c6b5c47380f9e0a788347362409307d1b243252bc8d72636bfea460cd905fa1f52c3847b9632c44bb17d519f07c8c86c455c64d49704cfa81cb6382c9776a61a67788ce9b9859d4efc9fe10495e809c9d4c000a9272ec27e8e8171b84f37a65aeb1d054550b814b950e44d1952bb71ee48b8202fe11ca7c0ff9119386b0ea1e7c8fa1618c594d0939792ba66a708a9e5878cecf02b9825745630573452c43fcae457e8e87fe17ae4b8f25274fa9958b67b848d736e68e4a47ba453356c21290a297ca240e667b9b59b4c3dcab43427670ae82b4013558d57553536c221ec07af7db06da562ed360d28e8a3f03ea2be021effede08027c896ce2d2864d9ef80c2ca3d71a15b3d98f4470dab6ffeabc48e9e12fcda1fa63c68cdd250a2fcf03d49f769d5bb391d8872e0057dce5e16e214726980b6579a92d53b6ed704f2b8e64fec7dc27c6456ae90db164295c5adbf9b824ca0fd8fca71e5fe47e412230f22d991c05f6a45b0b1552089224d9b36042bb603843631ff82a1ffa5a055f8bc99f1ce7cd50f42f23aca97a6447d477a58ccf6d555e9a4016d1026d23354d789f49e8bf74bf3c4e6f0f529b4d1ad334164872a0c3b9e5098d93a +MD = 6c83f9b69754facc3155da93261ed99c38e4225e748e8ebcd04ed62719fa56db + +Len = 6848 +Msg = 9c4bdc3b1af6ab9dc7bd2dd90e2e429a07d5dd5c48bb7016fe2ca51d3cbd4f45928ea049e2cd9c6d6f7bcd613773396983a891bbbcaeab28807c32fff5709d2f5d935dabeb1f5b13d53ea190ab155700e701f253c520a834551427ecce03868425e27c2adef4d0d7238d102e131c86a65c6868eb0c1a4f82a47ceaac6e80f48e1104638e6354e3007ef182021691ada40a665b4d38a3885a963de5077feece934a807c9f21487cd810f15fd55d7bb4421882333ff2c43b0353de7fc5a656fcdcf8de2e25c1d783a50115106f8fe282c8ae45588ae28450c602e71fad8dbf65b141a7e0e7ea0ae0b079e5fb9855ce017ef63633f6afebafebcbe02f89dc31f3595062fcae45e87b419fea8918574818ac15dd2a4a020141bad752161f3bb58d1e4b97e9427a793c9f9bab22b63c57af9936c2a65082cfec7a4ec53c3750511b465bcf0f6b30c50c1496b02f3bad04af8e7f6e10ced85c997558bf099bc60f861aa790d6f10fd5d1e6b88216705156fed31868ce8dabb031f11bcae51243f7b4e25865a69bc1b0755e28a8411ad15585b02a384a55a4d49a37c26d38636f108ee695d3e732eb5edec40faa1604d4092c6ddd67eaed6bcfbe8f73316a57f462fc6d8764017f38e8f6609411fff5037bdc51587c181fa7a98340569ce3b677f5e7c1559f5c474d55a379e06463b406b27ba5c4ff3bb1006bd39495380b48a3d23528280c6055d5adcf591a2baa0a84b6f2b14878ba6c201c95d1558d4bd41d00d0eb2834767076f861466bef3bbf25902abd0d70ff18acc4b140c121092490879e527c9e045fd83f4189fb36809b92470a113b6f717d4f6b0e29fe7faefea27089a44dd274eba48a576af18be06673e379f5f9fb7862af1a96d4372ca32bfbc2782bc2592cdc82df8b307573c3e76f6d61b06f9e7c9174d9308892b14f734485522d04ba96fa1948c525b17891e72feca98bc6dfe5d047aec48f3797199d25c101f33a7d180c12cced8fca21b32e5b6839ce26461ce8d0a33b2f4f666b73457f6cc58d2b1cdc1473ebb7ebf68f849ae9f9c1b65c87a1b6bf7bb102a4acbb4dc77bea254b0930c846a7e53a808eb19478d1ab9fa88fc2a10a6d5d77db433ee49f16ac296547d1d64c0961df46187cf21ca9d608b39c153b8df97ad7929ac4b3112551c2023e87e58efa7203d196ae5cde69881a031760294f0852 +MD = f574ac85532bc0c6c4e7614a2e084dbc49fbc474cda593144af28c5cc5f293f8 + +Len = 7640 +Msg = bb64be5c71918756c611cd6e001dbab53e6bf9be164875537ce76367e5f9824cad7da126b6da63a0532b3fdd64dacab2c2703912ddab21c9a3d2826da44504927458803e5161c29d06108ef50fffe0dbfe8a78a81ee19627555b03904f0e50bad89c628c8a4f2fb5a969c29c4bb5859abc62bf6820115cd35a2dedb72d7bef2aa1f250f8a9cc2f5002dde4bc5e244056c2a0153a2d64f9377aee48ca87b5684c9701516af5ff4cd6db15fa3c91739978d9eb83068b02f7b97d471cb0a5e3438782726dcab7110daffab80f042ccb1866c9eb10b48312dec32adf7253cf2e094229ecac00382afa43276f28fc775346895a49c42c5dbd34bc4a5f519a4dbe41e7551817f4bd709cfa2ce24f0cba34aa4954ada756612a830ca56ec26d66ba73ddce9db58f910e7a3dd0b88b1c3c95cd0f7ebec21ad782521a03b5ccb4644a288c5c258fb7fb2a1d72da9ae514469f3541a1251c6106ec2a502cdb77578d98e65cc755ab5542ed0b03132f63dc20796c49858abd1137919215e789cb3f2ac938b5d6d71352af7ece564320105c124dfa8df293ae14b29812d1fe67d1528208a3ff5353cf948a05eed53214f17d64406577b0ebf650bf2a32ed371c9079df7bb1a20470e5051bacf1e6a7b410255d7c376d86389dafa66f7bcf5b51109d874ae906b1d75f8ca99961f36ba8743d4629f7d93e23ac18ae8e74e032ad5aa4c39ed393243044107ef4c563479725ae676e2e229e532a7220b0a68883d97578db9ff8b224229d7be0e6a69e00292c5e087463b06f711fa744fc9730187c69ff1774dfc9785571b418978b0c6107903771631eeb7824949e629bd13eb73f3f23bf461142e972c8a36d2efc1531d95920ea62e83b83158f3fc2b4dc1c29cafeca1a3c14833f21ab3029d3812137468f00ba99470856eb1b72ac703e3035c4aede717f72f64209204392b0a3983cf73bc12a31c5babb4f3d1f67f781e4a5d658460c36b201b9d332c4f2eae9e20894654a8252eab977e9ff2e3c702c9f40a703ea338a5d0e6e26e69b8facdc6763c413830a233d6d556068877303c8c8cde0b7b22ea3fa8427ab46b0b21c028f152f4f5409cd463f1c5d801354dadcc915287c8644a811cbad0a59eba262e6c3e57e20a5c9778d95938750b8261af009e0285b4ebfc12b4bc8ea2735a9a70d699d598f5e904a9bd88487df5f33ee8df0f5875bf2e518cf6b3ff3b9740d1301eb0367a267a76ef771b50436f1c17c3ae61eee855affd28596dcce169217cd49afe05163a8560a29c6eea75b5419ec7f532105df6f541ad531652346750ffe6d1ffbbeda0ae447ba41f91858728367e49fc77374 +MD = 19636dfc80fef6d47c7ab8fa620909ccc387126cec56415c9a898f64be728515 + +Len = 8432 +Msg = e5098b6a0b1cfc57c6a76537104a39c48baecb15c6bbb46fbb0b745f9c9e5c05cfcfabb33786f7b7b5b0ce74eeec9eb84f87d2494fab3ec1f4d3bd9c99821890ee352a1d40964264fbf2c93c6ded2583cc75dcb27bf4fdb489cabcf97bfa5cc64b2352cfb0b3a707a0579eb713b697cd0b5e3377d1feb9f181d7b89cc86dee4fed8269f10e44ec48adc6940c6badbb40122c1dc2d9323920e4e1fbad0b4397d4dc38b8ade3b3dace2926f464fa3b5b82ebc5e3b81cf647e8bbd2cb55c9e31ffd212f8729b66739421c6106e64ac83d3b9e13cd8321b3a9f10d9171bb8cb74e71c34d1e8d0fc8d14b8e5e12bbe2bd2a1431fc224b70d228e4e2063509db26ecd9ca7cc402763e69928805600a4a80eab4ae6a2c3792b98c6942195e643f98c0dc3fa3c2b07431cbbe113e38fc0b7b45c51c4431700ed29d2736b236f63f75932329aa60be9009bd7832f1e1b9ac1503ec84727a1e6c8423c7c5b903e763262d559078e654532e0868f206a468b5b5ebd3eddb4f673536e5f0f8160e5f3311561b7cf79c9c440974355965c931aec5c7225f69f776f052ac4bd6b19f85389fd61df60ecabbeb00c8886ff7983d20ac5d81e303bc71253f40806772fd81f938740205a5b7dcd07cce083da258b493d275967f91e4815d656936b342727cfe45f973b2a5ac257ce64c5eca4f53be8d9fd90c3dfcb8cd1e2cef15c307449ed02c2e1704f4f1be76a40b311ee7cf81987b5089252a807ef3fc99c79eabbc0ef657d897037bced04620d32a425015283bcea1b53e0484bb613d30f14c1422f5f82cc29ab7228b8375c06bf13d746dd9ff00953a90720badf2577d3ed62cbe7a5f15b3c929d26ffe8aee9d2d17391ebc6a79f4bd235d5f7b2db2455343d9d7c6b27972cc6071c36a0d112f86d98972fb06a186e900abc64e9ab653db9b05b70079c0c84a64e8cfee8690eaa68a4bafbb5be112632e46894ec2cc6e7ce697a4513d517deb3e20dbb37ed5963232671e27ef9f62d6b514f0a22c5a5dde2d77e7e184965958f5002fe17d47fbd5d9c407644d443ce89eff427360cae9aa788dc8d7d9f62439916f139f094ee035884cb29dfa396941f0eec9e8e782da88cdc18e5bc1d9a5351b57ce15ac520ffa47e666f87fe5b18ab3c8cb2a48ecf81f36fb8397c6a7a5f59a9fa96cedbb4ecd1c7a6d9d65afdb6bef7791600b6e0a18ba23edb06fc9ec21162feccc54f2665611f10db53401b18bade263b3b972da1a612115d144a5426097efdf5c6a5d1f3c2d318f687242f993f5f1884bd95f2ece34dd4320cea46f5a26c7c945b665402778233bdda9d97c2acd8c4a4ff39dcfdc3a3fbfc5942e3ab8ca9ff4aec17293c1fbaf583d603002f93f9befe8909485eb7c30d0e91fac6c228c5fa6c011eddeafbdbe30af20ae53a85206c03d37ac17a30096bfb4f584cd3f72ef28a3303cea9cc636095c70bb36de0eb50577704d4faed05bd54da020 +MD = 3380c8dae5c0b68bb264b757e2451c21cbe2b899fe7a871ab1bae6041f48e7ad + +Len = 9224 +Msg = 681737f93ffd835d7b51afa871235694481272c75a1adb4addae0a3cc30723c8debb33544891b5fb02945c3edb660cf694d7298d41b6156ef2e8f4ba93b6b33d116b48a0bf1f3be0f7ce65ff04adf8f93fbdbff979a0a7cd99ac7f97863efcc6485000456a4e1bf2a2265352b49f208393ebbb72c97f984e1a22313c6444064cca92e2ab11c75f1b4ac5aca1b2e48e7dd68aa55ffbfcf1d8bc73950ff573dab5e058763b7e320f4239d2fb53c7254ad051c1062ad5beb955c9c7307901707febd2ca455b7836314fb576c5d0bb0a5a624cb9653a206ef8ac87458ce34fe6fdd4e812d674c67bcf2907d9947f563ac81d0f994af7a3b3b7c53f1630b3a87b5d5a6a55b1ef31aaf0ba7722efca5f5e9ce8e18a3dc92836fd883861a453d4d7a6649fbe5f32816b9de94c7a5f18a01ddcaa0cb4c718759ed2ddbc4f71299ba3e0d9d07267a77e65dd9ed0086bd2df20924dd63e6f4c54943eac11081e9fc58713a3459c51b5ef41b8c149f59b5ee50ec5b88851becd8ac04add80b3331b192a48a94662a6c39ea6363b006877257a907ed369143b04e2c9fd5851793807603587d31beced3b513d60f23d8a888f654ec486c3b06e5723586005cc81b6ca624fd6090b63ae84d1ae3dcf4882550570ef9fb9dc4cdf2f141479cc39f435cce7213f335fef7206e6a0d5ba687966ed611c1754fe1117f57fa65296dff93b75b753c93960b7bf2957bb319ce69744b0017c353f6f279d0f2ab5f34907b9522d998c7c0353e42055eea8585b0a0376b718b8006377b5f9e7ddea62cff95b015c5774617a839d1af2710f52e11ce684696e7781a660e3b4e362eda90efd08d16ab7b47f84370b3768a99728146467f72dca62bef170db556d8065d0f05be848bf82f4df0ab656fe1f5ee9e1de2aaf566df620c12df1c264ecfefadd5c5a22f0c37fdb87f549a5f78058ad8526b5e52990b85a924029c369c8a555da3943df51df7812812b3820abf15e8a1dd44e32f9fed9b837146103ed683d1ece715e46f1793341d596cbf1a1db3a28b0cf3dbe4c1e21e1ba8fe0ad78368efcc2ebf3805afb7a0f891d4a3d61a7b2304601cab0ad5a577e229bf0e790995f98bd8f4ab414cb1324a7a7fc2f74bb8f4ae7513d31a1194536781fd7d9bff9799ac745ab0ba553c629361e2aec6181981d9ca7dd68b2c4b1b2c302dead8cbfa5a9e8f55dad97f95dc63f691c9fb05f97526cebf37e67c1649a0b2e4d887f51a96d2987a9c172279ea2c9701a6eeabf52906005c79a48792695598a6c9421184d9091e3d76fbc445366dc1b6c81960893807fdea1e5de54be4bb4fe82f9f97c5bb729f22fe1ffb842b9805259013ca220cad15cc987b0bbf6652472d9df90e6998cf89af83cc2ea3444befd2a1665f5c1155e6886a74714948bb1ceb76d6cbcd1b706c47cab8e44f0af9d0428e7986940092feb226d29c8616464fa65cb1767c9e05b590154ea2d40a1264f989d5d66644f4bcbe302e040259944df2b2219504aae003fd05f5e0deac260c6c55f3c54f48fbaf2128ef4e3a8d15963509af8de1bc9fc6031f5724db7bb5352f656be9bb9708546f638eb18b1b5ac6f1e5a3e7806da57a26b3eaf536f3407d972 +MD = c31bc10bed1384826cc30369b2d0b5880422e1a34d0eea0b67f29f40de17ba46 + +Len = 10016 +Msg = 3842b033f3ca31a6f8e5a638b39efee6bf73cdcc5aff57e816d6ea21d2b17288e9cb47dda98a495507622f9a90f71c14a3817367de75ed3dd662e9450b18037c1b10e7ab35086830d1eecc029eff6af0bc3078292ccd1e018560cef2e8d4d8e135da39a37f8cb4c0be502577c40011027348811b2c4f11be8a994431512c1a42a1f1e5d0705e588c3752e101ea4039d22e903943c742effb4fd5f1092e67f124c61d9237eec57a1da2baa8a8f80808e956d145abe3f0df413bdb7d8267ce84110c26e8e2e20b43f968512475d7a0a9ce54d3505b699f0a17b67591a4e4a9fc90dbd391d83576daaaf2dffb6f6d5042098e5e0059429897052869d5788e40802a9bed3221cd4f67b8a72cd59fa360fc236e3afdaf5423af93f980f0054bda3965b43c76c694dd14a9eeff5b0b6217fea35b2ef06589877a4a92828b5304c04fcc8f8802ce716a0707312234bd90bf7111bd048181c80e1fb159374d6ba23be9e4929981414b3c6859d75b09bd169e7cf6fb82570df8fec751b767df540b912f37263799270c9c602848738211ddfc48d87f711b1003a099b015d9e816290a4a4cb429f2899bd217fbeb3246c3cc23fc42b0987493d03cbe58d95611bae2f062aba238356ee026b45a2a5ffedbca5ac1b9f6c10b9d471a5dd16da6024720899edd592c0adfc3e05fcd6cc4515fc1e8bfc7b9b2873650819fa1379162c5ca1f276942cd18e32c4742dd1a27e85998161df361349266d3bbac52a1dfd93dc8f825d7c4e2088203a482119a516ad0372c04c5560fd136b80eab6c115711b6025cbfb0463581c4303f4af2550a80cd86729bc6010beeade7c3c475f1c2af385f951d7a328c2cb29b60c007b319d2576c2f0b7dc8f091d4492121f7a8e85ecbcaea68c0efb0b1532d4f0cd81d480776d4ad7b73148561b1c472e7799e91c47828a2c807e569b7b0cc5357edf95dc832a332142e4e93074f41fc41843b858946620664d97c7ee6cf61b6c9cfb021bc94c207fd38dce22ab3a909559fe78b563e605e65bd1cb9e8bad5be8905ab5c8ca319745f19283a73e7e2df4b520a6dd3660af2f23c2de062790eb4c01751d6df6890c0625798638af2d6c64c250cf1a7c8480934dd17bcff12f6e0958e09565ee910352d7c962416dc6b0880a155e07a6c03ec53284215648f748931f03da6b1307f19e9108947c0ad8bec0e4d4d01f65821e476a517b33cf76ff8bbc8548c7f45c7b5bd99d9922f6e1db91eb15d1ec1968c37c5ddfc5d2d53d1765c9bb6d1702ece51d2a1edce0b2709b8da56ebfd832e2a2d69575adddfaa81493cf3ca3d2df57e3550af2fc3fede373168c36167e526e5108a9b9af9fc0467b98257fa975ea2bda85e4c0638ae9d8f6bf08025248e88a4264f32227a296a6b105750aea9ab3b75f324fedaf6c36bf8b09b16a1fc285c4fb9e1a35c2710e27594e2654c39baca8d5fcb5014c6e6515d46900c3bb758a8cd0f6876aeca59776d8f4c1e3d103656ed327bc71a6ebf55a376f8ea5d1cc87608700b348229ac2e3b47bc03e9f6c5e87db45bed55b6f582b388fb396ef520cde726f2643f0eaf11c7055b9db8b20f87252f94492d6831dd75c4c080d60807b65278468e4d3f0d27f9105073130ebd3bcde94d630b4a1a70d1727047fc1e263731ad2f3a14846c78bab2c40d60d0770c5d2bafc455265942b0d932174afe255b6c0ed4f1fca7750df031dff408c1e403bd3de2f375c2955bf8422f762772ab27ece35e3a6d6ecfed +MD = c3cd7be2de832774c614ccf60d030d75dfacf3cc7e49a37af349a4c3c196b106 + +Len = 10808 +Msg = 9020918aad4ebe24bfbad9f9109325d09ef520bd79ba08986d949fade1592cb5ff9dc2061586c4063bdca9e53760fd8c9d5fa8d03b8673ecb3f8c82e6a9eb9f0a1be45cae2d0d6069e8d0d541448c2bf748147e045b8ed52047fca660ed3b917c0aca140dcd3fb0c2ef48eae70f47d536c84845560f77fb2a6502cbc94a03112a28f61ceca383b00353ab35c130b362fcb90e89854eb30f4e295769ac6ac2bc98f8e0ade76a69ecaf98605c4c536f33bd9ccfa0fe93d0800007331676aa0ae24d1d126d7a6c62d53c3010b4f4e1dbe5fe0614223e6950fbe4814e48a4923c30baf813c212340ef81dad24d6575679e832677483c159a4e1702a0176d2bde716670c6d524b5bbed3d8823536f03bd9c8ff43495c33cf5ccf1753e5277d878c01d5dc7784723df2d701319a6d3c1c6be6b92c3b01e244e9136ea171e10179ab818beadadf53755b900c4decdfb742b0e00484a21b7954ba6cca95302a0b1ec623fdb9ffd93b7c599d7e39a504de79394345ef271f55797129dfa19878f6f15c57bfbc6ee8a6cd6d3dbb874b833e1a757f01be2273f31d8dd8f2591334617bee9b2674a0a421e3171f68a958b14290f5f1dc943cbffecb7108c71e5912b718ed7cd6852d923957e7a0fa32554588872b4a1ae3ce59c50dbb27b283a26a7472e96b54406e2969864f70d494b9866c6785f6612f6fe7e25edcb4390bb7c235f452e50438fad01f18befdac52fe1a8abca67523f989d0d339464cef18d1a05827ca888af15c2cd669c6a5d5ffab685fe10d44f7c4b4bb14279830395db88b6787b0b44cebfaa63c03f717e5ed4a06589f1ae4410378fd2194333cac3cb4f9f09e95f6ceab6ec29c61b0a250ce426b01216fe184483f1d8819b790bc285f627fd6fade74922108942d9403aaf53d0cf6227ccb56058f92b42295faedb3205b51bb4fc9f332a9eeafa2018a59048262841cb1e02acdd30332494ec9c56fa04b32c61547bf2f61fb4b8999c4ef7ecb12477aafee76f3b1d58ef8528bb7b047c88f81dbd63cdaf1b4e42ecd31e2b67f82bcb6d734cf39949036aa31cf49179f59c4791403f0b7d182260c0c5fb76e083a606bc85197e203a9a5e97cf30e280f557e164e4f7f587a097dcbd7bce1e7fdbfbf03e3d3659f77a8793084955b44206218e3fb274d3f63a157d8cfc806c6e8794519ca28ccc489130d19f934c50e7af6215cab09cedf16f040ad550f7a8d20fd7f17ebd011e3805ffe004b4fefe9679823face8588aa1c5cd4c3f801d1ad6fc2e988a947e99f1605a87deb4520677eae9d48e6291f32ec6d60b7393d90a9fd5000d6b32ec839b29ab8fd59c2fafb38cff9c17252d71bffa880e199112bf5822b519c79c31255de959c192737f4272e72d5ef039164a7ce84b1fd883b282276cb58447dc37c76027cce3bd412907db81d9e4c0a632c68e1888045870a09b3439671692f8e4b1cc6b6cbdfe0f154617e46df430746b2f1d12a5864260c452a814359651fb222ac83ea119fbe42b474d984f57e8aca7cb505f0c6d3e5b06eeab8286ce2bead87b7c26d3bd5fc85351a623e9d58f56d0e450862381f36a4eb9640dc384c9cfeeed11ad6a72d0c375ae4a0fa135cd78cdc0450f548a0a9484f9fc3c5281d2b14bc6af5bce00f6de79a460e4e1414c1c86a75683064f2ae290f79b979c8def99d94e7db7672f7b20477c112810bfb149e3e3ab68a099fc5a5afb67a7096fc88e7fcfa4499ec70492c77e84659578a708ccbb6d498c302807cb4d8bf302f10498258f4c99d98f3c3ae2f1e222da34d4602976c4ab31dc55eec9342d04edd94bbfb3d79b308150c8227e1f52e846bae059e25dd718f7652b193dfa766033f0470c12efbc95ffd25352844efd3e41d474fbdfb8cf174692548f +MD = 888e223d5a497fc679c3ecfe98bf7dc531a4adf3ccf0e6d586c8912ebf781af1 + +Len = 11600 +Msg = 562d412b2b65b5b906848ae4c8b6cbdbf34726e6bc659d4d62267f76bfcd974d1d49a3e84afe086cefc8c32a1d3da30e2933b53aba8300ee200c73abe7fa1c98ac489b243083d5edabd1ede1633370a27c07cf2f12d113c2853accf414594a27ae321025047c8605e3a8ee4fc11e996096ca5b0fedd73c903aba70996e738ac4c90fec35ef72827c3f53b0bc6088880d1c844120721ee422e69449e21ccf4235a5e8169a19ec311a66dc197267f8a474b93d69abca2d743e32ce3e1647f5dc43ebc4769ca972fba6014a13b8fff7555c13febbf71c8c52adc672367f166ebeb643acf485c88c48eab7a685d5500c038cd2ce1f4e91c4e83649871b63b2c1525654a7789b9dc380ac31f7561281bf16cd9fb67df6515c9da36416d40b4276feebc7bdea28519e0bb5164570b7bb98f6e722bdbd3883dcd8bbbe2649bfef162c3c43f632720ba651cd0f99ba0c25200ca202ebc75c4fcc034500bf62c7e1284312715b38c2f461bbbbc4fa1c58e8debec6e74883aadeb5850ad1e9076a3f34ab35f9f3e55f3459af49dc707ee52b5a751a7bddd96a581fc6d2daad20f131c2cb6d82c71f93f216963d0003c8f9171d9a6763b1b2e3e5902e64c21295a4e15b0d82b4ddcfa4561ed960d7bce2ddd4ae93754accf45eab92258a32214ecb7486d83b393fdedb89fbde7a0aa2b5d98995ca0cd6378923d5ac130ad2e133ae15cc9561b6f53280b3350f5340bd27345e5ba5f4aff9577a896760ad495a2d95eab4aabcd605b5dbfb52d3b2221621387c878ef47e1a48abef49743b409422c71bc680143e794d338adc916157b48c2b0ba1ecd6eba343fd31dcb77c5e98fc8dd18a7f319958e4d2885bb32688a04e56323227609d9b2fba74a892384c6da12f34890fdb8dab61fe1c55a0ca5de051011ac1a75b3d0af628e3346b36b11bfbf56b4a99d9c279ac006e54c0157d7e7b74ebd6d38e72f97f8fa308ab3f36abf0269f5583f4e2caad20a7df7bce9181b6f6ccf915c3e56eb239dfacbb1b83246a0cf73337f492a74ca5ef7f39bf40f2e9d0e5b3d4c03e74776dbda901923f8e50ed9c6b1ba17c1671d96dba62ae33d8fc4b5f8b794e2410b6726585e76b12f18a12b58599c2482204024a1b5e64123bd6ad620a6a353f4c579100cbd470a656ffc36b0a18219ed0ed69ad2795a98424613e15b6103d382f4212b6003067a0c49948e6810084242a1456bf68704431998448a11ad32eb7c1603daeae6219ab443fe84d72b8b485376110a86555ffc2a527112ebb1ccf630b9759115cd44e6dddd9ecc865aa7967ffbde18fa6ada0df4d32e2e32351e9e514d0b00693edce8e97509c81e33d9a738b0e0f9cb4e1f02f9b8e03e8d9dc44e4e5f488b6da1560b77a8a409d73d9e150e23ee3f91657b75b9621bc666523a80984e92a49b9b4ce908f7020479ee614a60c33a5cb5479bd0a46d455855090ddfcfb99dee6b832dec0ddea84a5ebccfc1f12d79d3df7aec9e5b490156c2089aa6452eaecb560f859f06ce1b3dfe2f46161fb101374865da594e73b46446078d9ea8fc69bdf386c06c7453bf61e0bc40b14cfc84e9b89f017bee7be2e3495c43035bc14348cc9f7afee6fe2958aefa5c1e197e697d888cee80bbd02156549d578eee0bcffe399021a0cf2bcd84a15004d705a5236530c5fe02570ee45fe031378bc04a5440d32f310cad7b30687053b756820f473369c0bc6b1086905284ce6fa482fb94b321c3359d025ae696848c00271f1b495a6c13a645a8e5d9c0babb6c43969df5b78dd2bbdc5e494471665f5bb35d67ae6cd025480c509b153cea8eba038baffbe0aff4204511d4fe9b8e4446a59d62eacd3e7c1e39d814d729acbed54ed2b02ba0e0adff51dd7c697774e14d588fab830e0f8e95588ff1941969d24a8ffc3ce98ad846c5ad11ae1997b2accc5684900ba1abe359d2e89fd07eba5f966178b4ca00ef750f915ee8836eb00d602a1cbee92acc00b85392ae10ec06bd254dc8964195aeaf39a8f5ca3b7ef599954dc886bffbc86d4d34ee7 +MD = e65812200409ad7e1684a2df8e15685dfab7079449c52d032870d80acceab3f6 + +Len = 12392 +Msg = 5310977a5f3689bb9acd32b9ec2a60a027e912ffeb3c7fc1c7835a5fa01d5554577ee4d0a68243b04b01baae69a420d52bf79e39aabfb5e4118d8213ff9341a32cb711c650e6f6fa40ab243c5a007b7824644e45302d68cf43205114b53fcd541be2a6c22409ab80c1f1f9ca89e579725b57aa8c452fa16aa4634ecb8dc8004f6c282b2eeb946a2a16fbc0c2bcfc23a918f93b76b06d679d7e7f019e4ed7e37c67b029716d2e39e086f2018bbced8006a371886c3b8ec250179bf2f6bf137cc354a328f37280228a5afe458d515f987143e819d4ac3bba6bb9e0aa3caa25d50d7a28ae1cc2322c10db46123042fa74d341867717cc1b58d6aa76b0d6d5b4f6402268455424eb5f5a4ef3f3dc59671b12e572299e63d7a37a32848c2e0869e546948a74036253c451fe2c6df95c4e951877d5b7d03916a43d9b32c7aa0decac0518b7c491421362db321a0aef1456ebcb3fd6aa14158161082baae8b4abe45367f617bb668dd342e131e5512649282415859e89d4c1bfe4c42c1177b3a9f9e05375d1e3ea0a3a6a4c44b4ca07c36c48dd9054dc7703793557e492fc0fd0d45db0de0ec48683f1e402b3affef849c9600ba9212c65a4575aab9c52002fe81dd16879f5e4a0bea0b8edc6007462a5e77386182dff056c005da69b7c0b7db97b45628eafcda285eeecf4c5ccb4ae9d6f8938259fe0c1221d45322b36a3600a97c086656307f29e838afef73e4742fa09aa0818a0540090551b3692a85240a4194abc463a18fad10899f5a57bb488835cdfde3857e52b7c51e69919fc9f8650a8ebec785c8a20e82522c017ae83e602112fa2ceed1aa8afb9ae4508571298d4ecacfe44f0e5cea9812c4795fd3dc63dcfa33c22897be0f1347c21a7e334dff88f94daf21eaf6bdec5bf726790698ffe3f42957c54913b096a57153dc88cc38636ac69ca10725f4d98e329d4908fa90b0914932476e322c1044709142ea3ad448bfb9113ebb511bfa3a1542525387c2cd4211f6116fafbdfaa54e5723cff03fc36893b17da01ebfb8e00dba376eb702b4872227d5c5c2f2c038791a01a2a2e74df5e501c03dd54cb0009a693ac30edcf0e0e82be71932770b8e7f6e6f1ac97752d83b66b8ed1b4f5a1c39d40ee8f5bdfcefd296d7d274a73707cfa8be90ba5c6c8ff574ca46574421a36a9f1659122242f48fdd1a79efffcd44f86d929d1bf3159da19066d22fa7a136ab0ed39bdaa66daf6e8341882b0d58c678316da854f7c881ce6e3108faf6533689b7d919b5b6c770fd1dcf85ac4c43fcdd78b23b0bc70fccea529b535fbca233753e995b49e00ad9c9f126eafa39295876c802dd96ed55ef83e21869a47738bdfbf796f8fd9e824a33c1ea208b507389f283d1f88cd7355a09813a848f9261169c67544b576ed852f8f48bded61eacd1cf509224641118ad09d4746c77bac60dc52243facdbd7784580d8e7e61205ff07ba2e5e993279a48f3404869d33cd1e404acf85fe726ea4eff715477c2d1e73675ff2fa0c08714ce6459490548b50f49d95be4132a17ab234dc4906361bfed444cb9e1f242bc22adbb93d8d74e9ff89fc1d3999d1d2c2491d17ba4b9d446dc8a7e879f46b0334e5797648a583b7a08664c988b5626c0f12b091b03f371032f7979dcda268f98e26c565fdff0b5cfc92de81f2be6dd729b5f730750a8fe8170b1cd2e050a3739a94c96ea3c49340db56712dc0dc7b7ad8d9fadd50d32a32e2a93e6ffc27a5da1ed88c7a831ba4cb057925b63b3613bfe426c08188c292575c7b065d674ff597e399166fe62dc56541a40202a8f5bd0d1446510266014ec04d297b8269ef1b10b180703712227e76587f11fa524001cd31deb54a32b5e6d47d5ba5c74c2fa0af4f35a1b85021576613b15986804068650399f43f3409e2fab3b88d1456380bdb875fb1dce752d99d38e3e28f791d793e521c17cbb323cb9cb9e83a52d132e4fb1fa6a98921de8b848fbcb5fb86febdc0e61226d5f92b29215594b4670345b479e0b490a944edf581e2e5d9b4ef0bba53872127444c4a82f15064043d359701bc922e6e2399a6a0fdf70556a0fc6efa60fcf12402f5a7607471ff31bbae53562cfdbf4bdf6832136197c535a9f54c054d0e2b24f63b6c4a12820e43c8b89f3831e80d30c5f9b9d6138acd7db621d0618485 +MD = 2916d4595a3ede77f4165357977cf3529c672dcf4c39e76ec3aa848dba6ff4f6 + +Len = 13184 +Msg = 3cfbc77b8897b6a5613f62f6b1c89b0d68f272c6c19b9e0ec6331ef616702006e64322d3460a57d3a5074c719811cb5dd78900268890da0ac177b40d487735489da374843a1a6007198160ae77b1363cd8ac29f24bd66360ef62987ab60ae8ee690307b5ec309be8c496e5d6d610a453714336538fd501b758da1166e88f02a0524b218fe5b2ce1fae2c25103d96dd4aac376f70def57bb705c868f967704c0561630b3aac0ac254df2c668535aba8c8916e1c72bf9e9b09fd15e65aba138bc69d330dddc99e3f2e607ff15c45b7ce7527d18580bb38275548a7d0b269e28a8a0fa46ea0c5d80d55380b0ebef62218fa7648f2c3592be842ef687128fd4310fabd9c78ac271ff3726fba04d3cf544bff86bcaa6221dfa679f93f10e5fda0e4beb104712977daba2d0e731dc258b5322b6013f6869bbd29a26e13f410f160cf7df3c5a23f3e732a2d1b1d9fb419ae94270b371e57502b386457ce66d261eb99df89c5531402510b1ba1a2d3d09ba5389a8f0e6afcc7929d67bb57ae53d6a90a8e7deeccd34edc259ea5e9013f6503e72df582219e885b1e54a29614bad802e92fd72754a2a77c405f31da7128ff316988447a8d641cec84d31473e030ed5e006d9d5734a9979923054c5d6ab4f295865284ddf4770aaf968b1ad659dc9f2515edd968b512a59b9739ff5a360bc5990634bd959ffeda0a1e25bba7c8e775bff15a92411d025aea64a351b91b5400a4b0d5f889d6221567e24800ce7578f7945c5ad1cab4a33cee52ea4a6262b82c1d4dde3da1e10b422dac9def33a8b8ae0c1e959debc41dd51028b7f23e525ed06ea5f692c507e0e9c442cc93bfa9ce2190feb5fe8c9398adb6b0b15233356e74fe80c601dd91ca92946c7cf158bfe3d986c55ffc956a3b4a4ab081712a5112a035a6f591d1c7f0c605f45513e7341f5c583b3da0ee912e3632f1ce570cf070dd7bdf2c4a89f17b0c7fa10100554ea9346c28f7f180509af9d83b410dbf58b0b238f21335ee5792ed6a3a25c08856aae82c5435f731efa719a256829a2dd1fba8d4a85159e6415ef02e886c5c6a934901ff879ebbeab57c20fa0938063ca57946b7c98fbf5af6069d33537bdbe24faf064c88da4494ec4296471d0b5ad61a51144a1d746d33bfb37ce162fd45d7d0037f7d20929b15da2001f05ba59de27aac9af36ba96d57e48d16a17f98a233606ef5f9176ec657c73feb5f88abd7480bb1611b7dd5c7b0adbbf2d970f4fbdd4518ef283515cf40fdc6dbfb6fc810f01689f02b19a18125616698f3feba57bdc728f5724130bdbac3de5a2cd7a251c2e25bcf8908b5a59d4ab59155f192bfbb30c78f3f056699ac60afef5a87e1a1a6b950879f11b83a02aed1646911233abfc61c46f747606afd1d6022ed482e0984e1909fd4fe53493bd6e199952616d0b1d350a102d0c53897421a7b4de2319044a3429f8f962dd9300a0eb943f71289799d8a29c8683e0c61170483e31d913ece478e0f3aa0eff2c992804bda4dc06eff6df364b2d673ed43e347c115c1f61b0a159d783ce5409ceeb55ed7c2f0c8862c8ab3dc26e40be325f00abd4c950a30e0559762fd2dc9e087bcd0e562a8d1dae63ef1198d58aff6ef847600f1627284394ea453e53f31c57cef00fe243d837016cfd5a150fb062f89e8b3116af0d91ffb49ead55ce52154b59613a96f768852a58688fed595b995dc64e8782107e50a108e946fcae541941af9346fac1c858879ab32b886ee6f30ce3f3dbe7c6f3e4c5e65c8aa9708388d946089d741f725187c86fa55cacdd10948c3db6ae5ef8dedcf16ae0c2b16af4709123a6997cf0d0c945e095f08fc86273336ea04c3517af64ae8701feed74dcb635870ad166ce86bab7d875eaa41379375e191157e5bac6eb625336b4913bb20887a532c26965c3ea8299bd817658c53f80cf9247ed6cc5dfd132277a291a04e62c00a6d3014118c73ab6d57b7302c71a2ff4ab92a8981cc06fa62cb621aa55ed771bef89aafb15df44b2662f269c0f45d01ab5cec3e74c1b9241eeff2767257d1d79656ce2fe1ba1350ee8230daefe5105b44962bbb4d47fed87c6cb86dae413738bb0e325c4ba9b804ec3dd949624ba3563eee50c9b363bd5da4c81ec60124f1dd54a830fd9735cbad491e557fc12efd38c1edc1304e1fdefcbf8e8b4b1509e60e8aad2fdc6d6334942caa0c44b3970849f419e7b8c78249fdf54367c28ff7001385a497bf733ddb01be6b675fe08cabd300fd2a29c694e7a86d7119f41af726336c15cf6f54caa83b27e8cc9af118ce1c0d1ef34af25e9e44509f0ba95c +MD = df5f9f0898e0fa1bd9c3d3196fa8f7e6b01331d11eb214f7e5629bb7a1b7eb20 + +Len = 13976 +Msg = 3fbcbd3f57a9912b9717f91e81529f6736c6d06f8bc1309c5e7aad742b51b106da589c85db137137757ccf8d5b4a249481731d8c2df061d551c07e13182f238abf5891caa6e94c91a72616eda6311da1698874caaacfc0c26bd034458ac0bfd295c38354dfb38a02d41db484898df457980cbc722ae6b62a55b1b553a98aeba805a25c6daffa9252a46a939b2de8107eb307dfccd4beacd4b76beb859c1710d2b7fc035b3e44ce49c1149979bac9d9de6582c420d1de08893707bc228cef971952d96066b31ca5aed023b06857b9b73e538353b649ce3311808c1274a098e6457f425bd837077f4b7ca0bfae2c3f1267281574d5631796343802d4c1019c671ee53ddcf7f18fc4e66a92ae9462e352228a3d0fc7474098ba0871ea52d683816b2dd5cb0d0a3bdd4845016562212ddf3522050cd21ed1a06a97e23b6f48d39bf6fe0f1060a9933039b3f6cb6090a622689774533f1053180d8e5cb15f7f161f8501f59338f72026815c77cad6d8d581859192cd56444d676b94e8336ca2d374e1dd8e3ddf1c6928e7ea8f490b20426552ba68605ee347f54c528daadcd99302d23be2f49c3ff79c340243314891763799b7fdf5a114c92a786f53fcf84edd3120c3faa1b68850eb304e9d68d553f85d20335a7565005c6eb694421208263969921cdd2d7620fe7ea376a4d7fa8d5041b0d485c6f3ce8729d06963d4548c2f12f1ef937e242f89bc55226066ff680749104288d293a7d3c38c95bd2a23a6489405e3257e08dc770c0ef9dafe2b0ba4df0a266b7f8cb3c7a4b3c158fdbf9c0b5796a19a13695052d895a31985c79eaf6a642834b72819eb340d943d336e9701c46cd0fa2791b3a187b3c925e51b4bb152e7efed61ad02c7dc61b773b679bfb0414e194ea1c62ced81301307046f3831fe5b249d656495e40279d1026c283ba23706249d6951e3bd2dd428c6cc0b8db7d8886e4dab95fbc9101b8bf33fc2345f0f5a98ef677a0199f566b16a233673cb473576041a885bfe6c108d4d1691d16d2f131e4c8388ae0940b055fcf33a12f6b32ce4ca9c84de0c801f7e18d8db3b5601f95dbda5c511967778bd83235d91bf84335fa718d3ac7ab212075d6fe999a2ebd3fe49b57753c7008790079be818af23138fa477bbecd06cb0cf23c20314d7576ba8f99be79b2544a577914323d14cf6941dc89f85c79715c07f72b970d47fac8704d43f5d1237ab991a270355e221667db11c79786456140bbe523c7a002152f0b9e28920e0859e2d20d4c3c773b3dc98f2a6eddeec95d35935cc3367c046b16e702b627a2c978327329d6bc2ad8cbeab8970e4fd86dcb9718be786803e7531c8d1b8b0b11ef6c350f78ce38cb733757f1d82441f5bb42e1d69ac1e0d9f363ac883905d0ee029c77018a8136dba306adc57e2f78a92a49a237721e1560e1134342fbb4fd997b8f64f3cf9e3afde0c0489df9ae3865435664c5c50b8a2b18f87d57c42705a6e2cb7b40c883c994a4eaa505cb2f25dc9edf860c1418b3bb0379b73132ca6d98b0b74692f5c0472277ec6f777300b551857b9274dfb43673492d8d69b81db9d16e094344e7d25839c24bf47d71e15b86af81169a986c66f6526a7c5bd49f6ef38307fde11f48514d2c9fd082483facce65a69ed7ceafe9b6a7e6e09218ddf1718859c2f1fc80e6cf1f4e8020868a1dab504277c6f2fd2326c1f966a6e557e5de06655ee2101a6d5202ee8fc29d4f229fe7eb5de2a5e297e929388b04da7bb08b55c11e5bea8379587fe65c02fcfd503ea5179db547fedc50561aba3658d7e62c1ee39da9fc4a8f54fecc714c36232aea104dd3a95980550ec11660b5f0eafb12ca433966c5de13da08076c18d93f1734a1f47c597b35967702b23afe232363e1e0668e1cc7ccab5a143da8f346cfa9a0d2a2142ffd7d151b93849589702fb51be9d408267274ba57bbc5b4561f5356b13aed27a780d5558eec040ce2585e63234f02443e6694c54557462adbb358b2e8433c235a85ccdc237496fd936c4e028a9877aeaf147b50b58f1558deb34e22a883f593b37cc21d8bd5d40416fc5cf7c45ebab402fcb6e12acbd9eae98fa24a8455cff53ce6539e2a8831acd7a929d772fa3200d49fc5fb17860a3d86b9037f0e6111c471530fd2820446547ff33305e90374019e6e27130e460ced20bfd054a91e618ddb33456f14c268a75a5ae727c8f30722baf868ad61a478666224974fe6f645bde51792a8754b3ef1f150d49185515200d4cef93ec3f9c325a557d6e53a7124d11960863306173fd0ff7589f79096eb185642575ba7ee83c774e9fda92617957402be8e7359bed1c0cf2955be8d4c48d5c9f311688fdb20b85b5ba9f04c71fdf31b721a0de29a9b5ddaece65adde9d1c5aa71a609ee482074c31d3a7eefe8e4fade3bc7472332f2e4bd40aa5104e84c54621e83a435ce098936bf4d9 +MD = 46d6071814544b8de5db52d4b4d22023ba2e630146ef4e47b9b280341985f189 + +Len = 14768 +Msg = 1718a57fe1a0a012daddb0d30069525c5abe69147ea9df4957fc8f7f25846307c53ab9d333bd0c884d00d0d5da409d04ca3a90cebf9aef74cdb60b0b7e7c6b171aa9265c253d91f1282b1a96b5547447a5b6f512a4e13c25f0ab162b5d25a3d99dceb4c3be067875f4c558bf998c1f50729c5e8634670f8546447887c9665273d60f2bb00601093b383650f78ed0e545b95394d57712afbc59e7f8c6ca27c10d4dd552ca06168b6c7ce5cbe79d08104f03435fa575cb66f1b1fd6090685039d08b89f2bac52e482f493c9037cd1ce695d6d4869f377b7a4cd4ef768facca00e31791d3274b2f86ad25a2698e27f5b040bd6ed36ac40834f64c2303689d7b5e6f7957bdbaa1038e0d9b7f1c94b179b5773d790cae245cdc17a103cec6444c9d9c3a41781bce90a878303c72f275913f63e05dfa15605dbad659f6a14fa7250491e1b9cbf1dac01b166e3f33507b26942b2d8265457ff5155cfe6342abd0efda77f62680e5ce79310edcf12755c91efdf9ac5115e6890b37d117b47a83c790687501f05d9eb1a5308902ba15aa6963c2f2e630d1a18786665c2d50117f92f2f6b48b7e2bc58b2b61ae6903c7f763db2b406288621e8050eb25c79fcf463bfbcb5c1b3ab10165f30ca6983203e3bd70800ba8c291047c500e556d097c81ca9531943a8bb9fb46e5799817b192168109087a414424fb836e1614a8f6dfd745a76e846fd9095a36e9efad6fe63c39b78d0cb6b478e3ad9e924d89fecec1f1b619cb55428d6bc73de7b80d273bc8f465e6d4e789c598bfd4a4f9ddf9f9ea7624d3902f3b0da4ea64c71adfc71600ee95fba833499209dc2e8c633721df220f98bc0539e3c27f6ab2715e4cd8e1aad04eb4d0c57b49ffaab232d3c0fde9316419be729cc114c3f030cdcb7be1038f4199f993c3a75142d16a7f90a0157dde1cafc01e7f5e6c3723e4c4ab946ae477ea7db23b5656129afa5e59e4fef105f2e062ab520b4030a5acd83c44c1fbec2a7202c70ea50ef4cfcd95aa15021ae736573b655668f1cad332141ee0281d836f83302055d95a5fa8f117586cd6178d6f2a41d772bdf9a0895e9e53c5f157110fc210a65719bfbbef0fec4c319f705d68007de9ee32de1c91d880c23b4532fed3d9a93f5e8ec7706ace1d6fac88aec1e882f58411f12aa4b247c2528c4c35b2807003d4b05ff9e6e2d7b0a825b65820b658b38e241f64a2b3536aedfe2de896e12e274e96b5dd851ed1b0dee354f6e19b29bff16fe7157d5da5827adb11d310bdbc1c9358b8fcb6e86522fb2f88106e5f9d1f933a6fc49d78e511e0691f7f89dbc1ea8d3e8fdddf063b10e6517a2f2eca5ddd5ecddff96accbb2009f180736a04e69a229063096a41fa81879154da89a31101386f603d4c20cdb6dcba5b371900d3333c955b06bd614a7ec6363b9ae7b461910b6a1a16ab3dc6db410ed95400972fbdc296a05e422ed50e8b8a59f6b0c3f397be04340fefec4c97203322518591a3419cdb59985f704039bed3d6764c99721a3986d6ad80f307f361725db612b5d6c5b2acaf3d7eee3607475adaa224fe842364382a7ac61aa1f6ed13b20c0ecc7154ec51cad406715d810e678c039ebad1b9276155fd2a2bbfa9aa5e4ad9e19e1bf33211d1e55fc15daefc421420239402e46a4a82be12ec0c12819b4da8f2f37dac6c36edf9f0a6df97f7329b811c55bfac153cd746e7272d3b5a11e3feab933e868206459723e88b42e88049afefc5af1a107d7c1c12a2cd2c1e0932657346078a5cca02475f4e08b9b875453106ac7b3543559ac8f92692ecb3cb6564b2d380bee2c94b910da1ff044d57b88fc7d2cb06960e59d3067a2482039fa284d103502cfd4d49fe93a91729916ec9529cff4593f2efe0c4a0682cf9f5cd114b369e20dc939c23155a2ef9326b04a101ecfa94e63d3f58232eb65256709cdc434a6c97d48dff025ecaf84c26c25f67241e8c5e076147e8791a2d3da35e5628f475345e1ed4be0e624bceb90e80c844449c7d4cfc444fb94ccb9596e8a64120e520c01cc24f216ea8467ae8f18c8760e8cd9505cfd09ef327a9b6042b30a5e99eb1d67ac6e5704bb921c280d7cee4e298199b3288eb7ebd8f1c573076e4ccaea7923f203480f2cc1b466f2ac92e27f2dce8597a2d7f353f0e8c42c1d0aafd958929c3b51307f01a581b498dcd9497ba3da29586c8730ca22b613d60426a7fc6cbe029e26c61b25cf80a1752eee87d5f42af18fd60af4b0e6f0311b5d20c9b6af51e3b4e467880bb817aa3203112210c7478aa88fe1b3aaa60db86678a7899a98f4abfa1a933a25f7dd3b3a0a0facbe7596312cfa99f219f884f631f7296c1aa22ce7e859e7a5f6f737c10794289c3187bd91a79692347146fc87284914f5a96351140a02b350114ecdf82541fa550c86243882f468ff5329baf793fef89ae94517bcc9a5b4cce756f63d0d94037bc1f9407259849cb7321966a41f7942d03cdfd74ec1c33a80fbb8470c4afac284d449b8fb95d79bf0908e86392558924a269c16466cebd2f0b0db36e247f6b5e4c60ff410c25df54ff0f17003301d554d38f25b3035700ca0c9485c5b9f086c3 +MD = 0a147f33ab036e8ae148061028c6a557e2eeb1a6ea71b3760548734942743557 + +Len = 15560 +Msg = eeb1a4c660be97e365dfe42a4d3400c6e661caaca02accd2ef41be9bf15b4c9651891a696bc60408b0ccaa2b4c2d2cfe079e321a699630b42218e814a9cc30492255f51c85df8042fdf7f8d68ea02806fba3830ce72665603a809c2bc64c27ff2bbc3dc6f73192f91208d5135ab67d448a17c5696003f53cff23e4c89202bb213267fb510ae3c295b8a64acaf796b2227ba3011b1d5468b238a6c7d35317731500fe37a4031d987eb7795de3ae6a4f0698ee3e0966424428afb44e3552b3d7445d28f7a72d099d1dd72a1846c757dd5aa7a1841b83f513082af37fd4d7fc7016108d4542cfcc58d8e06183db8a87e3857163db39bb945cb9720b6499291dc5f4e3d6285d3091511899c5a58b3e22e9efbedd4c4b5748a8a34fa5056c923c5f449caba9e0997e1146cbff863c2d4f770056b6de399f387e2e886968365882c46f04b3ceb352bb1fc83eb72ed79d37162000979aebdb8d66c2e7fe97ddc4167edee397a1bfa3710308ba94a645d7024db78628864a536ee8c7320d9a4b1e2015f801ff2aead4c8466c073ef56c23d7a52dae10ad3c4f048da5323d7766aeca0f242591701d2ce76f5eec5e2336c8dea5ea41f814aa1676dcc4af373818bb3af6cc19f87b41f4f70645339c398a1041d5560687c57df1ed5e8d71a2e5488f985157a3da533c751f9489a29f3e4f4125bddac766c79b289199663f2784de700da92d8ce001f8f488a09102103a6fa4b4e6dc4a3c22ee038917b8e26e1fc1a7c185b69bb18c5bbc59b2c71a9635d18116d7c658b2de5dc9fe60ec231ebddb7cdb6d599af6fc4f14bb5292b4da385d207318feb97004cfc417fa68c8df67133683e9814f5659bb43d6095a96834afbc8f232ee351d9c2e3afd6f96995b24511fe38293847aac8692d15e88893a7493c3bbacfc9461ac6174d747dd6037fc7d7d20bff8ff09fd9a49d5da8255a7bd0d57f70e929de63e50bace08a4e31ef7809965291889ac52deb00903b1c2712d51cdcee117195159e3540a3c55ebb61e40bbd8465be90bb53a0e96647d9841cc486d67abf3d14d060289b26a5740a778a62ba1a12ae9cd2d96ada3824f9ebea3d87eebf78d8a804c95a2ef1b12aa9a0d9a30e9bfeb4f9ac2dad359e78d9d91b9ea4a814a4f0f923384e7e8d6eef137e60513d82a08e41c7defc9e01aa15e61166717522ea0272cc3b7a0c62353dc250acd1d9569e770f865bbd75fa3f1a6d7c3352e862ae899f6051615b08aa9350d81dc934904f2bbd9832744fe0be7409bc73ed744c7902e97008a8ecf9458c2965418c01b838f8c65dd1b5ae7d8e9f3542a6859b48bfeaeb8bcf9524ac8c84c698a6beb346f28ac447e805f3f956186aaf59dfeff009be100424daa4aaf619a2d2bbc5bbb5024e41f6b3c9c31c7b6c2472fc40c4daecf8e18996cdef7cf8c768b40f259d9acebfa9ead3959e2f8506fd0e0c5ccc51c037fa7c9403678b3afa62bd0f72db60de5b6684d5dde7daf9755f010888690d29d7a56dbaff9f6e034f3b4e3b21f79fa7ae2265392722875f33b4dc8f482d5580748cdd6a37198e08125cf810b774bfc12447fc5bf5e0bd1ccea8f0ff307bd37a7b1b3c203e48739000423b3ea7c539a15a61cadcceb504b8a2b5fee6d5e70f6e77cb0a8b79bea76175759803777ba5cebcea412a05e1c6b95c4656c48d0151d2e736e8fa6deea1c30e818f1dab0a7cafc84c0fd25029aba557d48916da3d534e35c927fbaf5afb5b27d090dbc6f436db0921875421eefbf3320b065c41fd7c47000c780da2760c905dfd3dcc3fcb5cc70bf5382dff94602957347f1358e44543c27b39beebd26de91d61f66d89e266fa2d21a2ce5dcc50ce440b23ca936436daf98fed7dfff287ebd2a95b4e49fbedfb094147c3a0f9464894d9c4e0661fd96311d513d93358f30f3a2dccdcd45a4a300cdea79c7dadc92ea62ab30365599572a7c54d3f3a7827d9b079db97dd90143fc44432c7485c51f714987e91f5a4038027eaea3e79d2aeb1b217f81daa2fc480ac3c89b2a57769285c9d981abba1ac221eb07b5585eae04dcb82b2cceeabe39941021d0cf9918738da94901c1bb4e7cf08b090f2c333750469448c240f76f9e01f4f5d34c94d24bf3b27e7048a705efd5265abb4d64ed56c27c7f4c17133500b937ecaa8a8dcda11eac21d62ac466a13983a2c1a139f79eb63a78d03d843be524a1af5f70cf30fd765fd93c4e5b9a1c856b8a2712f97eb08b94da599992a7d8aafae6fae5a124e763924fa99cb3c8e81fa6b9f787eea915aa534eec1387a25eb3093981d34ad1e84d0f2b25fc16198b71fcd939e75ea154793f7b9393a95301a7974efe21135e879c9c14b856cab58fe1358ff31c928df5621f0a550142e348ee6cd078b744f44db802b26b9218c37cd918852f0dd29680ccbca23b459879bbf05065f87d25bac10a08ae4598486bd8c06e63f4a266e47e1fdfec4b48f33ee3150bb5855bfdd96bf878b04e50a2d72dfeffd04bc3959e77c24e8f8ff09d5a47c6646927391678d3eb195f8fa36e2c02fb93753a58a8edf11fd2340f26ddf470692529e6ffb6c0824cb2640f77f395e01ef2facc49e7f8769d3283d2d3fa34e468149ccb9526d9ff810c66d7b67a384ed1e306067e9ae88da43823e0dd3d432d29fa6bdde3aeead2f4ef0eed464b3dd47c3041f2e009e4bf9caabd412eee49d3169e3e25d1951b840b22045b11aecdfa859f5597557c1592ed51 +MD = 07ddd5dafcf04956cc36c1ff290f07c1c0e5832cc8dd9aea502da677ea04fe64 + +Len = 16352 +Msg = 22e9355dee8f5bd9ee753acca4e28a5eabd4dc284a47d49549b3928e03d77156bdb5f4b236defd4e7fef405c0d5cf87e0d6cd8e6f78545bb66aac2bf2742ac30901b27ec13ae58d813a5d581f59a59047b22bd2c4d0a23dbd9e075ab5db50ed44222b651ac89d43e4f9ddf85842516b99cfd7142745dd7bb495d9198ceb9ff0c7cd2892a2af6d94adde147aee18495651905dd709306c7245f2affcfa2d5e79ee63489beb47ecfc26579f645353f40d09942e9fed38e5dddc34ea89800922e53274f9c5773a71e6f8e6bd391a7df7ec1c5bd7e335b7c00b01cd1733a10773cf3e82cab3b8ffc2e1901c1c5dc60ebb602457d82585458176313bc47fffc0c7946d0d19fb32f0268876683b66c88eb5259c08adfb5e5ab0cbf4f160e2de9d94e1388485e077b43328364b78d8b4667b98fdeed7b9237fb468c79e7af0d01672124b799d27f9c46f5d3a367327fc2e8536c48ad403771d32d92383812e76c3d5b3f06cae163ba931a40cc9a8c9025f588b7a6d214ebbcb8299835101f0352e3652d1de575fafcb30792875985089717c03a9f65e1f84034a2681777bea8dae2a5b6a3f1758d8b2d26917bab042d3fd563bbdc6c8ea424ce00c88775d7202cc185a141f7c9648f89de055198f24946b7d90305f20338910fab812d1352b171086cb89efe59c72f5096b5b02835a2d3458adac1fc28fbae7d0c5bb05817a4d140c2c1630e0dfe9309b86a4164b6800f08df07b894e537a4a2891db94d0e4173f0ee85372fcd50e43cabecac535d2d22873e5493c122329a068b91eff820cf80a05accc36a81074a71d70398fd13f0334a1087fa8cc736b92f7b7dfb6333981fd86d5eaec61169ec31a477ad6bbe106adabe6994fbbc8928a7bfaa849630e279218f02a14c65bff3037a0f94a447d6f0beaec20a19e97310f6c1e0339700f6b6022882440365508670c194f5b0978aed7e4a5a03eb363e99a2e7e6b070891cfd04a0a43ef3fa66ceffe1cf7798957488a3f9f8287b8c30ea359b86a229b59b76ad603138240a47f3384285c36328dbeab4226621d0d1932c374486b1c86bbd4a88cef0d99f7e3c1ca34c8181193a093b392f6a95f2efad862e49af865793c8a11a53abca6b3f8d71c9688a58c3b244a2bb87cd2deaccc721a414c9c9dd1405a2ed5828b29034821b31fc67f06877d547c1925690bf522825200c9c2263d8bc768843303a174463426372e1f210730453d3b8cf6679671ab92b99ef37f0c63544737d8b0a0759770de830c006c38d18ee7961fe5921f5e3054c238cb38cc6b735376f01c9685a07a547a0ccd38aad5b3f3cf5ad0fbde3cc320b12393c3fc08b715b805a1f422e5b320828cc026cbb136fa3dca23058191d68f0cfbf7a129cfa1f67175db69ebfbbdbb4328a3a72a089a5377ea665f77f1ece84c0e6170c424a68e39ed43383f46fc8d225cc24a342050a7e448056a4fd178d4e4e75b8369bc373587c8541fab5be22ea695b68078acec60294faaa667b4fccd6e13607968daf694e1938860aeaf2118466ffada6602e004bd7da0946e10fb4a5e2efac370154714bddb7aabb7b51bc29847f9b89ad6be1df76e91d4a179f6d42b7694f1ee0fcb4d930c9561551244c602ba5dbb757ce9048d7ef8b7c05471e35ca6c975510ed597f7a35322152b2e8b2c3371538489f350e64b4fee4944ff00782c02ce37b6f89c623c4e5e66745b9a6b4fef0156626fab784ff1c89aafe0a3f462cb7d007cc6c34933e186c7923e7c466c215559bab05cd9e998d73309d94658079e0249e4a2953326b72bc6e959994414b2c00ce757ed81c4bfaaa0f74b802976f4ee82733e9ab69129cdd30e3f79fae60dc1fe7cd8e5e65db0b372dcb9c9df3d6aa248acdd3c29efd3dd7a5552a6c13cbcdb8cdfb5de9e111672174ea68befc769bdeaf6110223af2feb3b7335a83d952a8d66a471200f8b7b770cb1845ed1a17ca207e36c753a6ba87784dc4ae6d69be157ea5f8d52c1293a22c199f5bb3b580def1df9621db491d7f2e4e514fb129d6bbba6658d0f3976fd15e48c5d197357a805abac746448ae28edea42265d78364439195ad28e0ef11eb0e3fd3cf2202cd5861f7125d16d3d35d8f367f1768de2e540c1b40087882419942e6107fda84410d117ebf8ed78bb69449ecb08deba2fe9731de599645b9c9830425c60749239d486f371603111954db14aefcf0e8369ab40ac740facefa70505be43b8ff748abb0850a5fe14be775d8f964ad68e704ca529fbe3c5d9baefda9500bb9406b5931ee5ae0e1530e5ce036fff6091c71735819f6ac96e7353e3935e98286412dc0f8a9f69fe57fe1e05f9b2f4c59350deb0ab3197797bf2310ec9d3031eabbc5e3c88a6231b38d4cdbb8b08f4fe4da44d4aac51009840eed8edd882d012fd6bc2c6939a57c93a6d7b5b41c2ae5f4349d97fefae148a8fb1c1fd69fe7d89bb99802a25dc76acdf20bd71b8705f7cf6ba09acff7961e4aaf372a9d8a66a0788de4cc3c9ed1e2a8986fa7b59b2a6ebea6d546e4673772b151c619fcf0b23f0c7925f400a6cacb6dc08c8e4afda030090dc50307f0ca2b260a5153b879d49fa0a6e5e1b31aba0f6594e8f5a1586f27f8c9f73afe3a5933f10261409cced3a67b3cabfb20a5a995d5390d428352a039d302f35192eeeb715a607d486f97b73ee76200aa0eeda04508da83dfb8933950e1df42b28bb489cda94d2ed3f87b884e2a406b56449aa607459dd03208c445536b896bc3b1333a2f25f0fb4900234fbd8dff74678b55c4c3d3aa7ea53b8dc92ab928f6eecc14067f17726c124f37147558c7a345abc60161fb2a159e1895cfbd13e36c9aa3fef5a5c7fa0996ad5edd5dd3bf81586c9465c905 +MD = 2ace8ba5195f54a7c501234431e99232dbb1d1365edbb593a3dd3b5810326570 + +Len = 17144 +Msg = 9ed1f4045de7f9652af2c672e265d35757e111caae0373890681ad045b753c56a9f8a67a54f303bcc732bc6d5bba93db7b5de381078b297af56bc43c3e2af982f8943a8abfe1a8815ad1d63c9cfbd02887615c84b8497fcdff48437a4da0b8ead3cc399b6858f09c2bf69d456acf9225c317023c89e47c6a6a40b3284e7c807681c82a141501e4f582ca97f190dee2ba77a560114405293a7e7a9bad0a695a0e4cb1955f8f848b75a7754ea8d4d1c7cfea33fb6caf538c23851f8371490d4c9a7aaf02e39e88ee02e11e4ad300504a4c65ea5db39477b00ec556f3dcd210610254e9fa0809b513857aed11d8da02721930f10d50b9189ae4874874566f1b9e2e228804369ab404e7b80b2d212b90471f937193a9e6df548b131c8d47e6d60d072cb3a9d5172dc90ee4a02614baa1d144d6927828e573e5edb1fbc71700e8b573b993704d49c768e445d3821b51de1971407b43337d7e55f1a90da92e85fa9e5b1350e107f82beb5025cdcb9db6ef268f1a557c3475a5ac7e4279bbf43db3d1a880118469ec015939cab68802b27b0084ac47ab929692f37ec66885d2f0bc554049fee2dcecf0bb897db542b10d2ab03a3e7a59b5a8ed32d87b01902e65bc320db64082c9c2a0182786f280148fa63d9718160d05735d6f74aa6d6371655c71f60effec9634ba78fb2d96ca920094af85824250eabe8bb43a9ad38604b84419e29b62a9ad0be6e4edbac9a893279f0febc326a9cc531f0812955c824d261b32bba39240740ecb62e574b2a37fcd6d64b024eba013f8c074e4e130deb67789c5686fb739550712fdcba57a42bfbaa6b6beedb9bd277616fe98c77622a67238d8d147f81db6bc62ba8793480eb9b6f30dfc66b7897094cab1168f57d785e0cd76de727d7301f764a30186458ed689fc7252d60e8b571c84924681fa84ba89f3a4773a6fc39d7ec0bf22c8994a7efa68eca887e54b42d4ebab10e588b1af35506c84e5f696f2191d16d0a06bca1ad3df84e6bf65529a86a8035d0228e6cbac8cd5edbc3972689223b1f455e39710da0b41f5c7b627c8f863a2132103ac76b550e79a0761e267b07b9777302b38cad8912bbbe7ff5332f3c3911c8a408a181a44ab730e956b573acdd03f796835ae941c4a2166695c423e70d75e85080919a10f286118fe97a0f9c0653678c51726d852a70f8e1bcc5fa3137cc35a83afe21359674a6fc3edaab5fd5d43746864996adb496ea53d2af0e854893250d807d937cc6e18590ef5de352cc04db779a76f13603824f4f9ff5fd6da0592b0309667d70e47b11f0438a243f4973e8721650f9b897d1bc375d213354ef8cdc2b2e6f4b9c7faff09cf3d5fa5fde9fd2d8728e3cafd1f395ad92b74cd576acace877ee9a6a08de85e978c7e24f0be72f1d5775268652668004e92ea659e64711cd6e6ac66400a566883ae6588751e851a30dbc43c689b8ffefc90ddc7caedaaf4c8a7a7c15178306dbc2a7e9933121ef2c2dba10faf85969c0aacb5b9840e5d9d8548417f78e05eb66a88301fd3a125bfb3ff52a9e1ec6422a06fda0474ce72603451e1675f49c78bb351e2e1fcd482ca2bcf3dd2a7d8e3d8e860b5704135d185fd4af143aebb5533c20cfea857b21d5b51d4cb52a952fa060707acc4944b635409bcd8d90d3feff8bd41eb3c8c43deb94d9564f08e6191f328ec28ca14190e14802ffef122db7d20cd791165428fae2e489a7175ff0e91e8719892486aa6bb0f8a29cb559899e8f4193ad8eb219f73006a6c58aaa360e02d0a9250073dfa538b4d34a7cc158116bcca0fa895d37a1778da928354235f670a1c62cccf361ebcd1f4d7fa1d419af0c0077de92cfd2880dec194583e26130ec7cf916c67fd19e029a59b2c11c6ec5e47f90e03794ab2987a46fb412f5585beab4aa69a9939f3a5da8806a570497f499bc7495e415f1f4593924ea5ee58bc5dffb629bd2b92b5f52ec7a2cd02755c97029ab6624fe7777173cc15ec44d6c0d40b3aa23ce6b266b76b87f70d8eef8a32c59ade786a88c203601dd97df9779a0c17ff9a81923e0ed3daf38bcbde6211002cee480659ea09e3a3ad20c2d5e451ec6b2d99f3f7e1b530c330e970b874faeb7ebf7c76e5b654f984a37522a0c5ed5b4feb25fadc4164b86e699665e5cd4cda0534032ed694a92d4a275d0521c177430a61c8fe0b06235222c41b112d160fb407766498f42b12673f6362d32181f68be5b809674ad9f8e6296901db57f74b63cdac271a0624968fa97c0bf568ad721b2818709e6262ed5dc981d02d2d1709ce9fffd51ed6263d8dd19de0d1beecf3db1ba886091b48099d4b340e6e751f51ddc497f50b2ada1049ffec6ad0ebe682b30591d2113c33548ff7a94505f8b62978869b0f49cbe816ab7b91305ab644268b30fadd1e8fcdd71b1409fc5c7e859b872b34ac4081f7589c8cb5bbd8e8aee84be20c2d99dabb992aec7bbcdacf34aef2fc89535813afdc027b8091b049cbcedb64ef4ce8e6a8a2a2c5280ce7b26a6aa141c38cf94bbaacc791193c4ca144e323fecac2757b3afb6de83874ebf0cfd87d4209df8befbdd0d113a94412b8c02c0bf7c515a76019ab719dd27c4e510cff6c4684d576c8634e0a4c572f6c56e8b37c990acfe55feeba982b1ead799dc9e857975bf5229e513058834c87c142647f5c2abe77993e6131c8dc458ed29cad99277bb7c7f739327ea5ffafd37945db9895f30c962ac61917ebf66fa8c216611cc23bc0d45e60ac3ed809a99cfc27f6070d3c1ab300bfbf74e8c2c381b2d28d79121f9da3bddd677ad9e96269b1b05cd3ae4d105683f1fa51a7886aa30899d8b6fe6e77bd7d760c3990e701c202a7b5045e6d17081b2473b510908c962e33eadd6d7275a807f44384e54baf2f56d6aba307e5574f301fd2a80b214fe08a686cf54971c0eec21eb362c05c93391603e4b690fef7b62aabbe328084de0b8600060779b47f1615be05db0963d667a8f70848e1fd1fc27190df5c57025f9f88c25f1a +MD = 4c7118050c64cb293f54c5cc199e99aa87c0a7aaeb7256af498e82d535b994c7 + +Len = 17936 +Msg = fb9de43c9c7860e1a3bacf321b5922ea1d15e6f43950c7dd181f538a60a10126d890725fcd15f6d2b4e152c31079c11296d1386a8f1deebc7fe41cec045601ca00df2a43fafcf0d9c24e425054eda5aafffe7856c7887da50783957d5b32cb51bcb39450edd555dd17292640b05cd69ba0c32f1fa7387b7ff92547a52cde66a5543439ef6d472ec8f99b87fbe96e5dcbc149e42df8d6f0349df1b8cd4101daac1089a08641fa8281b1ccece9cacc4124aab81fe88109e5ab3b10725b6044305038db527f329759f086e3dd721a1e8a8da33769b80c7a60cc1ba9fdb9524f6f771351d54008c6bcfdc208e2fea00b40edf3ee48055fd06c7f85e5df4ddec99f0bea14b3338b2eb190ab6584f5253c6c2ee306463744b40eacc0eca281ce5bc9f3054b73be827843918b1f4abf71591637bba7ebb680ce503b15e5cdbce9acf417ac1f9e4bb74b77e8a861bdc44c0944f0c3f8beeadec53914ccf8e965f665285f27b8bb41f050577d4b51636c7ef400414222473c2542d1202d4f7de6be2d6db3bd3d5208f62fea38bb17c720cec35112824c0e121cec21457f0f11a609adccfbb8d6ec08918f380242dc6e46061e404bc99f9cd58d6c306c0c632e0d9e8c4c1f5ead10a888184ac126c8e248ecacd3d4604378ee3e69077e1a715b834773f607f8e74653a573275fb002aa8c491614958f5f2ac3f78cac61f2612070ca0ad09ccdaf166eae48d7c228b34e7ce4030b779d1c3bbe827d29ffdc5c053cf0f8e5c4272b09626c3e63d4d602567e871cbf60d4a13246a6e3863e1f8a934f81e63a684c83a697a7fed27b01184bfcf80938397a1797c22a66c90805125112457bd97185e0757527302ca1f31cb55d00717eebd8a5f39cd7affc44d41cc7eb0460c9c51a6aff65b37b7a2df2371a0967fd9a5d3674cc3b756626dad5d27e43853c124e5348cbcd1587c30747910468f5549376dcabad07cc3350b1505afd8391b8bdf278a3621613fd0f173a51fae2721e712011731b68a3bc81b38ddccc11f07cd09bd0a24aa97685664512a085dfa5053c421ef4a0c6c3acc1c7d38174576a2f5630a46e0dec05c6d17919a52cc757affdc34b55c389f5a918d56c707cbbc67954993c2e32498a69579b9589770250c4bc8de0bf0d19ff5b8fc69ed26ca7ce04d4bee00b4227cb150193cf73eef858ed7f87255904dfa96c2d80b2cfcd824875dd87d82dc4ee9273d6490f8c1a1137d25099624c3241bd81fbecf08e26b4fd7778dc6bbb4005a52bdea59dfb82b6b41a36abdebf1fa80145fff29f38ffa5b5b0aca5e3dd3fd6cce42190c0e9ae4d996d3aa5e2db517d3f5d437b08f4e0bd38c881ca86bd48c8d146a8f0c17e2740ac75626fb6c752263d74cf6d74eb52644d68ff339d80e3437bfb7aafe8e174f5b6d7b8f2a2acaa0dc430a9b22945dc02be382fc86f5198af91a89fb37d3b1dd67e3e4414eeb2df989b39db30702907ff51df18724656f075dcf820e6c8b3ab49ce500dbee1007b318c386dd190bf5ac3cf06c21768b772fb2490042e1172a5b86cb51bd9c4bf063f5dd5657bd3305db6ff5436a01e9da7aa301b53759fa0938a2116764bdf16062ad7b7cd187fa49840ab727bf6b03015eaca3f15a2bb64fd27b51b27fe7a2e0559c287ac8fdd4294ca990799ff66974624b8a4539dade66cf7f06b35d8dd2f8a36e6ec0bc83533d8ba92bc99a588fbc2bec3f3154ebd4f68629aafa8c350401e280a8ff1abcf9fec7a5e3982cf5d830f22b3d4619d33c777d07a8e88a61a894897f8176620f2ad5970c5255c652e58b7b650ee4172567523a959b1de68843390eb762d730fe785a6068f28304e43a142e462eabcb56f82f355ffbfb1f3d6667e8d4d791e60f7505ba383eb0574e4873613b06fda4ec6156f3c34610a2e58499be345a271fb673601ae6b16e3be59321daa0326a425a35720c6c03ff00151056e56255174c8825e1f910d51d214e9c97e1323b721224e708d5c6a006b540bc17f4fb72d2eb08ff13db33142db5ede74e2b5d8c95a2e0e873f64fb4d830fcca65734c1dfa799d516e37ca19405847e5dd0f8ea04552f2dc4bc483ccd411bdddc7d6e0c0ee76d9df69a5424ed596f12a9d04420121c0ff1508e6ef229ac5e868a79666063f7122fb8e9a381f6dd05e1836a014398b7b4a3533c40e808cdc10ed9d4838486de72d38659d181569b2f351127971b412c088af44f24e513aa2cbff0152c421ea473d1857146ecb59bd6547b8e6f70b285f1f05c4e84b0f24d88dff8c4cb60d352ff70dfb96b8abde4e087ea28ef0a96ca591bb3c1c7124cbebbb7186ac7a74feefdfabcb9a622147d3716867b80b193012754203155d3c903af8f798e88df378354b543fa607e6271c14976118b2c513443e3cb2596bb12264aaf42b876d03616eeea9d03026450c56868e3727644796a9410dd25f291cf2f765e9c70f941f2b1b2e0f15cf29d858312baf424aac1b3ac04237eb9d11fa7241ae5af3f79fc135b88e1688e9af1aab3a988d2b1906ba6017a63d56a9b2b430f1e8ca2ac5ec7421d58332a206127675b141aa4a18f09fb71df1a0bbfb87e4bf7699b9d40106b27fe0a1f5e9aae0963853bb8937a0e655a04198e474190e066e5e55aca81f7b0690687ed2d85eb5d473806aac7c6774569c31107b2768b193ce079114ff97b5db03db5e5be677fecba7d5d37670c3172d3b5afcf74e812f076f00d075430053ca6ac7d4f3acbd27e655b28a99bd5a4b43ee2dc2db41f8b2ebc1d8a8502adfb13f15ac772c8364cdbf0da4f468da838d253537e689aa2609bb570d6d380f8c7ab394f7c97913255ca0202ba57620d5596b90f7ec950f9f7ff0af0da39f799cfcc27948206bc46551443dc5223458c63c6181ec598fbacba2263a67eff8f187d3d6230c30772fbb4815d6ffdf45caeca2b1a893a1dc6430fcc6698ab6c6ffe38c8932b26e2dbd7dad9f5c3a410cffaf28d6557c49fd74760c4bed047c9c0d36733628e92de1e642fe4b6e130c0c7f944b4a1904d68564014d311563b5ea91d74477660f144642a1c6a45d0874c6c312667773dbcbe6cb493c1083070735366c6cc78a92a5cd4b007324d9893fce52c01708e65f9ea412d45564a68cd50e635c58a0f71256e977e590574423a185b +MD = 906c5b84ec1e480195860d89f859fc7d3c5f67f585ef8b738ffec08a3c07a98b + +Len = 18728 +Msg = 58067ff7959a1966d37fce5cf06a8dde6e1f1c676e91b02ddc4bbba5e70e0549b4bcfe9953745360f2ffbf38506b245075f5da6da12d462f8254af96a9094ec43f25a405f4e3110c3944a180afb129b7dfe293c12b0076a80406eaf65e6d9a7861081a42622d7bf311151d3af485c59914aeef69f653661fcc2911cded8310ec832e0858839aba9ce33bdb70072f1f807c21986fe86d3e1c4185cf243e93d9a80b6014504174f68f157f8229d0f761f37f0333daeb982727cbe1c90239e51c346364e9318301565511a7ba6e3625b07b851b6bb3e61a49c9d207aa6fc6c00219f1022d03308b03753d7b2d462400379ff632e501c03ccb89bebd1873cd6eb3de1f0489ce3258257703c581b97fd11be73a104ccc6346d5f0f8ccbb173635560b5430a49b70b0e3e4ca4b5ecf30e087dbb97d461db6809185e6fc3d62e95e1328f7502771d2dd6543f9d66d911f75a104db417bfba13125d0f114435dce3013be722ab9594026d41cfa2e550634d891e90923956e0ca3b95981de780ecef57e542c87035aa2d258f8341bbf3658508012a9ed397edf1c76a9ff20817fcff37c738d2eac7ce02a185d0f65532a712796082565113402e58347d1a309b8ba7433a2fde95dc7e3763dd6f3d3b8e968a3fa52e354c5975e4609bb612fb6bf78bece69e47ebe4491feeee8482f977b260dd5784d81fdafd986308e168c309ef0197350aab676fad309541d763f97e992ad4e03c9b660855cef1f475781205d09cf4be0b7592ef292e096fce5cc613a93ca8e7ac1b99620d0c7ff6e8ed72e02ad277da0742f8d32b4ccde0dfe9d9c7613adbc659c5348891b57f78b22560197c368311947ff3cc4221351d9277cf1a6f99f014dc24c1ec627e730277bc6422332db91d19993e2afc5fd19e7c92f08d12de685b89b6cbfe1dabfd2c901ef98afe4c8c252d3b128fc84d45ebf4d7f88ff96ca6f318f7bd4e11e2604fa1c99ac42c077ef245b22b6b246de47ea19341a381e95e73d064004cfda66ee41348b26e4ae2f3ecd9bae33d9f565fdef97166585ac8d17666884f8b2f6c5b926b18ead9d9639d7d7f91c487a78afa8562eec12ed29fc25331d0f5792598c8d31fb6ae97660dde3cadf369c9cb7046ea84580c8797b28392c8da9ca78ed0291eb7ae78376f5638a2cb4c2d8479aae7a6c469830308b5a7cda201af96a9971eedb96cc23a63b13f387e089a38309f4f22a98fdf11a41d915c43f298b73451fcb8ab8e3700c1b354762cb53a659ec1dff6ba377b43f85ef2d7350a02998d955517e46f213b27d10ad46dde888d02b72c8b5cfce21a840e2ec6dbd457ae33e5ba841aac2b3a04aed4eba7e0ff2f1ae3b769384c9df5c58fb793cece1275b5a79f75b4a1bf9dd6814524616928cc35dc0308a2a319763b782fd67473bd70816f7665290c58d71c1cde0720d37fd4e21481f2429cef0c643bf9f77341d33f35b1c1fb0e38716643c6020c7cbc7ee9ae01c6ae8e968938ce6f988f31d4de2230f3247fcaa2a3dbec0143bccb80906b084853b5ed3c727bd877adf6369948da01b7f09bf4f77a9883733590a3cc7ee97f3c9b70f4db255620e88cd5080badc73684c8b80393302ca8803a107c0c74d5717300882c0f3c581626c7a41ca8776a3dde0f5c7d029f28a9bcd3c4daad2ccf9d604563f95501e256d6e0dbeafc304386185701d7c201fd258d8526464b013831a8bc8cf3292095316d5af4f97352d3bde812408a5df31a9a76e0ad25429c900ca0f87b901812d1545eb877deaa69ab33b1d3812b32fd11870d58c21e4059675ced6ba8568e43372e2f6becf10def3a860a1d4c30ed8a7259b5601d87b0b24ec0e288abcd184c273d63f7bce71a5df23355522a21ea25adb103991808004186c714f1fe5a32a831e070ee70075c3062aa18047374c55933fb7c663a05db91dfee192a088469c1d7d5eab2aef85ff11c88f6c6e0afeb8f95b7845a0c079efd9a94638362e22a33998c35d6b230722a802e45fbda49d9435363cfd6f693c71f475868a085e9f067f751f6dd22365f472e289a25c8c92b1eed8e937f9210e06176a8ad03fa0258f961e58238877053d186f667d744a44d7cd4a693b65735775ea913a52027c1c04279b58c7b5a751c541b163372d671ace7993a251dce47f8714f17e577a7bec2ed9f205a1803baf5496b1691aae6a7e5d9bbb7ec186feee043e923f29ce24fdd5552d49f912bc89b1bf765e6c20dbd74edbcbe4d28a480db40f7d630e27ffb7c143540b1693b246a563082c76aa438c67e0cabbcd114a425e30b9d44fad9583b9496d33412aa34ef82a70b9807528077153c0edfa428df6cc484e7833876dc7861282a8c2ff190972beb5efd2a915af33dbb561a1469892c400453904de10ecf0449a54e13b9bdfdac4dfb4b36d8fec7721b2ff0a44f37c0f00a5fe08d9045bbf88be1ee606b238fae7f7f26de9202603cdbeaf7d65271e75ef76ae89a1d37bbb85f5ee1887e47c98cd049046464fc5a086e25941d1bbdfbd75c133cd5d04b3ace447acc0e7bc137d1e0e7687aca43116f425e59faf3726b13b8d741d36206d594cbc40264dbf6571831e8c7742a8d32dc08f3bdf27245d17e9e259c054ae108b665d9392e277da3ca33aba6031e211ad922844496309ebb827c8ca00de36040ada318b4cce6bdba5286de888a0db545d11f9e624886e385c9b48af23fd41b09e4f40119b3823ce75b7bcfe38b8190506e6090abac1dbaccaf069f072d8567e0f6d930ec948281d74fb31e4b8a1268a70b960995134d9afcccc34763598fdd524dd31681c28012e6a99d38250828a4d633107793209efa928d8af27b464be1da6472209ddfd366b1f3caac04883cbb4a7f60594a569a602a7bbe4ec366522bf5e526fd753f2503b5b8abf87e7ce732903b162d0f17c8522111ddbae05c2b02111a71fbcc82cd605e52b19bd77880a13410a2717606914712ea89b5367a4f1ac8aee3a9f82d6503386c8c04c3edc16da27a85b503859db58c6022cc4a5336bc890cec967ca16462c0609bd1a85f021e57e340663c273633da0d396ea0696a8deeaefd3fee81441582d95171193ecb29e0d55303746e0338985c4e1acd4f6305461fa604b24fac91fc215d618b2f9526c9eb4e2b60cc7d3a53d7c16f1557a8994bd977936c6ed64e98f300316283f87b7f7f824c75b51ccf790a43da3d34b3d04c66d24a715179c1e5a8fa5f53ee5dce8e1cafc527da5a5e946e45ca99490d40e43256b865aa0f826ecd9c49c3c13d66524d27440b8ede6e226e37deb +MD = 09247dc00c0060232407a4e69050b5112c9f72a65d7b0ff077f6be180c482cdb + +Len = 19520 +Msg = 0233e1cb2016c8a4268a16fe8d3a980128ba62024d1b13b135bd5a94a565b9b4ce8f899673063f6c49b1ed8da3b00c234ea87823ba5abc835b7b90a74fbfa01c41388f888dde3ce1a56f44deb379c8ab80b470e19496afb59f2249701701131f23d3fa8bb8c7476b016922d905bc54038489512321f675b1c75a8ed645509b253b0bd3863ae9e972274a8f66e0a2399122cd23d0aba395dd9bcd66c420d7bf96528521605c6ba95eddb8936d8e53febf2429eed278c597a3e521d91ff1bb07da30ecec0366751098ec5b37d655f62bf45044bb10d083046a6bfeefd00027fb599de63d56a031a5861cdd82897eb3489770c79172fd056399f60db1bf9541247b611b1b4151c5f09134e37d6e50b3de124a5979e046743c9a4ef526d4f83109a943358eacc3597921fe182e6e151e74cca7a37a42f2f818d43b5f56f8702032490dd99e7f3c16c99f40219f6f131c932d4e4c9c804ab87daf85f34a11473628c585b154a205236771c3a9d85a94d3c29d09fde78396ddf693f3580908c39a72837465b7fe66a9db014f56df18de6e89849e5e64311e8e08e84f379bc62d7598eda19dcf79a6d0aeb6acd0be903913704ad6161a7329f43d165f370932cdee2369d600a5fc0fbf67f7a1c07da9efeb005779ce123200361c85ec015a33ea2e9a61d9364070e79f8e2ef7ce224d471dc0144f2d5254ec7e2d9ebd3c96b3cd5c853c73e8a9bb7797abc276a1b76388d139e71fdce4c233f1f9c79c91c699bfa16d626cbee6c707d0471be6e243d2fb31f139b382cf651db907694fa8f1cd0625d83b8c5f017adf72e9a10f38cf84e8627273d1c81c24f4fedfed9f281f36ea0f512f9b7401be46a41abcb94c6260978f44fb4256d2e6fee70ab954ba58beb5875da660a4ef7a868e61d4abc6044e4fdeed3bced3f995859d0f373605a54cadb78608a498d296e5594651ae4dbd365977f7993ce89a18cf4876ce0cb20dc91cc553bd2ff7b2f9ac2d519b8a899600fd83ea7f563cbc57240ec8e5a068991b48d94c2dc96a988d22310b1a07239695832a4c54e278673ace1a8ce6b8d0502b7a1cfac03a998a39918efb36ecc3c6db3393a780a943a3a914924a381d913ae1f9b5e4df492b93e53f6baa5803102cbb55e7826b7346798c3d9f8b4397545f250fcd93f0c0c9b87975f19ee612b3d21d304d667d0828f0cb9268d56feec1c8e0028c8d5d651a03de7b48614ae253c0ea0deeda1e2f92114e5b16b324e97f7cf81b195c8c01c77bfa99977bea3b99fd0834f266b6b22ce3fde0d0aaca51378357a29d87e75b7728b617067230e52d9161ed8092ad579d6ec168bf44c9ee90e6e3df3f97d43dd313fb3cbfd083a7b684dc80c0e76be78eba803c0a08898833ac86192813bd6d8243af52e71c4a4addde6034dbec5829a6d024a5db7e73e7c7dd279a7f8309b42dc0bb9fa9dfef9749a8d753f92adce78eb793e9572fedd2f582aea86d7020da7c93086c2ba0d953a2ea2823412760e7ed77b750a8a2601365a1028c1a616aa716c37d0095e7704992aa3beddc6d4af26c197624f65f3570be450d8eadde4fe3a45801a5103d1c40bff2f8f8f28404d0b3a3baab68efd2b2a973b6f54f6f3755cd5b7ea1c42845ffd1c9478eaaf2f44969206a2f27d9a1a1cd35e50b279d8ac63ad3db3dd832534f713810f52c41842536956ef65aa50804d39282165eefb0fe93c800c174e3aef847453b76a1f81b2bc40cae482adc71a46293765f1bee11c57f43d575c2c2bec2fafbb05931a02024b88c116fbf05434a233ea72e872015e3a64a41a0e757ec75335f57e603c0fdd9bd1e81b240a8e6bcbd9dfecbca0f251fb1e82f8c0e2a9ed8997b186540e0190f79c9e658d64ec2c3d9b8637d0b43a7424822847f5dc43db4d556dc1d0f89dc91949526aaa87e3f261f95bf8d72430514120229c2fcac32d18ef889579941ae26b78a2af0dfc0c5af363ef8432897a55db88f069d146ae4f76d6a095b0593f7958ab1da72a29cbc24c7bbf8e755c7f1e5e1d10357cd87baee19b342717c041fa7b4111e771a9b8c4e7912a5c1205b4f7436d1093a4e8a1e7d3bdb1ee1261e8e24deb2df496e449df5f54de919b2dc29d15f96fe8cc0fb776e7beb84f22a68add4af9d032ec71f57e1e374ab3633d2e6c50328cc964a632c8780ea5bedb16ae27ed0d9746f4db523d9e98dd361cac3ee18ca9059a01548a791f3e08d1ae2ad96ece86e1853278d67a6b2a248e29f39a9925ed58ff249354f537bd501c1e6b832e4a065d9247e308c10e4baf401dbbb7ffa64ff54d30daf8c97c1d29f2ae4131c2fa0c59e287924fbdf28debe06a6d2d81a8717928d8940c6236dde4f9d0547be958f964ea941f31bdb25158e3827041cb86d243066e66f65c02602f96171db7fdd15e1d3edfd2453cc84674ce087dcb39dbe2e16a74cc4d136944585bf4f57c6d1dbad143dd6400d79ecdce046eddf0591233e2c97e2c8734d60afdbffc744fd378902f9e0f4ceb0ab067d33b282977a5c435a5a80d102b1cd3248e46903298bd8c7e86a207e56a42a7a512b6c6e8b7bc5c88d88a840fbf47db1198644288ed87c3b684f439d6150beef60b1bbd8436e9557dc9e585839a5268629aada61fb4cea9089909278761e2f0db3aee9e848bd949b5184d841462a9059803971d4f94fec6c541655381d75447d51083cc821ce8a39f3227022aaed83d1271952a90f494878cfc7d404debdc6e742a9fd9d560b3fdcca606823eb54c7962534c509c6a2c75b048c5605425f7ef28f77739270db7b2adf27076e93c923518270111ca5c231bdfb4e2562d0c131473f5ce8ccf6a505cb395d97282ab361aa47b7800934114e48bbf38744114caa8e5a3fa27670d3a668e0ec5e7c367a47487bf058f9fbf8e6a24c64c5d38b68b06ee907eab666cc26a9ddbaa59041859ed42603e21383ddc073b68a2636c87e0a8ff39e08b461f84d3537b1b38cd23e2df550d766805329a564014cf49650f4819a80eb449ae9bfe2b5f6b8d299720cbe5402562c67f3455d1c3691751aa934dd3799d6e68d8489afd023b648dfa757179844677bf1ec97b0445d43f3eb5da4e60d444735b7bcbe7a2fc5955e85fc88016a1cf29d45c58966847c49b430f4ae63c58b267a4018c60c79e43c5cb3f605447294e0d88d068246839d8b0112f4b91e06765bfe5020092d5788938a931f37a857b31775ee38ea19eac7f121b9e72cdd790ccf060d5df0a471ba822f4afe86f5c28180bb92e228a76003635e4c547169c65568dda256e13b6e81f195031b5bf25a0703f4a18ca6b88e58c9fef4c4ef8a94590fca359345b8f7e6c802e4ff1c68c84c896642becb141cce0b4ad8be0e078b21ad14ef9d85e4b3f0efbf15313320b358f85b9e01ff82b16d118a21ca36aa54b42804f7fb07874ba74e14bf3906 +MD = 7b2e8b28951a825924aed1b26e9c197ec080558a97120f34d6e22e341a90c978 + +Len = 20312 +Msg = 03d14676ac6afd0eecd67c8ebbb62ebe952dfcf935952984a1717a1e66a39bd825e0be274e6085382cda228322afbda334661565c8586b1faeac9c435f868d33827ccb57b54a736e89c65021ce1644de1220e9e3644277995e43e924628a5b38238eb72e678e90570c824e9049518c163744be9c90bb179bb61faaeaf717cf8e0fffc8d3ee96a49cbcf664f71bca5df4acbbddb8d42b11cdc02626bca695afde4eb5476fd2c877e4a20bda7ecae77e20786b8e5eb8fa2ed68341a7c3f86cc4cfe99a7c29998ed0d8c4a7f74fe012b941a33e19b6c590365f075973267405d60ae795ae2acd4f791f2cb3048fe5b2d4ff361bc5e98256f10f5554d30ea3c6ad36508d2699f5723862e21849695f2e980438e9db1f78b2278f741c0fa30b1810fc2d6c2d9f9a61d649ecbc0e03d8f0cdf5b192a37f2d0d9f866c976f0c3664c8048519096443831b7b54899b85d75f3b7da9fd65322bd0229d46af3b72ac109ef5607c020f7840cea122663718e5e3a94229126960fa61787c094bbafcf3865778c67d62c9c200b9625c3a2ce489e4e1ec38b9f62f202a69cabd5235d3952cbe34c0046fb9a72ba2670cefc0104bcaa924dfda56ca2791bd2f6aaef41e1a6c9ad255f97308b1295258396c3cc4b3feca92255dcf5797003b5519463f0608adb2f98e44b4dd686391dcec99e82a4ae60cdd122aaafff6deace1d2025eb3e956cf5271cd7b61533f269b2c5e0b6797eb36adae2a2fe9ce93d87e9bca984c44d1b984097d0fbbfa26db3e01a3eea6227512ac0243a53ea68787d27e8637faa28538385b3aba14e581766d7350da0d74ed6680155e562507228185821e81e48ada141671edc2949db6c0cf8b4d15c414b9fbd1ef6488c778cc8d40af7abf33843814c5527f7062a92f810d5082e7f48a439948993b844b81ed75ab0e83380e180702ee06d60ca7915281cecbd89ac55ff2078c1acd92daaaedff6da61f369ecfafa43896dcde8ade8987bb0235755e1a2d0f467a00f99c7c34f42e8037ff0a3098c24c09772d34173b5d7cff83bfe8435e771ec2be03b87e2a1b98a2b4dc7bc42b26d1679143cdc4cfc9b8caa8c18a63ec08bbf9eef65739373e51167c151911ce9770b811667c6daf9417698ec36d013f8ac627781ba033c42301e479f20ba1eadcd105dfdf699b428643e61b0cb8a5bfc5e65443babcf63793511291bb7afce8be9b55e3f6bdd5f066e14839e694d7d481c489391bd20afa56e8aaaeb78da82e0577b105f2a0a421fe9c98cf972920e68508ce41850bf5733470b3b72f6d2f26790c202d1d398f3d1419ddc4689e075d9a592943428f410cf58e36946b411937e103aa43bdb11eac71031f02a11c15a1885fa4289885752c60ec3a2db332ecc80703572f1b2fd9d7dd0067708acad01a17c346d6d0151a3a3f32c76a4f683243b1b530d97fdc49241fb8bcf66bd1c2300e2d17363169b7a05808e533860a720fa8c03c2930e0f5fc01d5267c8b58734c3744203005a6d4c573149d70a2413594b4ce8408786265c849fcadea33886ad458b168ad92f7fa115a01f609e934023a9c840e5c9d8a22eec0d75a28ab892f323a1cf7932282afecd475f9e6a40c61692a8ce40fe881b3d82e0e341f3b824acca52bd6ccfb6f7ebea818adef1af0da89248e0e07a16fa0ec5b4943b52b9b440c61890c3e65e7ecef9f941a0d9509f6025331922e107c72940e2f90d3c2fea35935dca1d3aa1283e7818e48265b7e3c3c7f1e7a6a7dceb0371168226249d0f21aeacd9e711117ca0f16b14023b57835a070fdcea52f90e23c2a9d0248083cb6b948030a02e11e49cd25a209edeb1f6794ed7594c66fe8910d2276366f4767799d1727ed6d6351898a780cab6a459a5c81c02ed6b585fe4411c09ac8bd4e7cc22e1fe0509adfd611afd5952f840b129cd0afd19b5ab9fb83b0ceb2bf1c64a11ad428d73a719cd569a205e59c2284aeade78306ec9d5207d65212652473d3fe08f7f9b3b3dae4771acdd0a5fa2cf99719300374d0669a49c65f565cfea9e1bd14ff5b1dc3bdfde3ab97fd7d5189b2f46811f9c44f9dd7eada3f603e55a8d703c65416bd73023042a4675614aa23f7ee20f42b9d712a52119b5bf8b43257fdfba75ef23aca91c5bc8ea7a1130ce110adcb4063a83ff553e78f19e8669c9e9aca3e86b73dd0520478f0bea72180ab4458f05d678dc0e6229440e2f7fb9b65f79b13322c6d8e2e359f521430e70d69dd1818b3fff3fce6063f361fec1c37945d94afcb1a730b0b9f583c11040dbb032114caaaf582fcdb4911f7369070791412dd99ba49f650d38bcc371dea3a926259758eaa10e3c7af31310d91aba068cb5e9f5966819f636c4123caa0ab169b6ccc62ec1b17be654807c7009605530ca28b0278368a164ec009847e020f4add0ac4046d65d3badf9012fd56af65326e81e02d7d942b0219b52b17daabde7e6025878298f00c803c6d9cf9994394e49551a449f0e72e0bca35ee066603e0592da35e05f62489b884c9ebe350b95b1289f8207d5a9659da6b279c76aa73dd844b6e91b50d6a1409c08b48e4047b806453609cf2420b751703727b912f619ca7c26c68b96828731bf79bfb243cf0cb81fa6f5fcf30ad496a9b00d47f7c36e6699b872b3a8cc76f9731e14cca80800612860fb33dace49f793ab8ee68195b8372dda5215f03b0d025764483fe5893f7be0027de643f183defe88213738f363b6b90b09351544a5e6ccfafe7ea4d91682e6f9f296b70b1ec72ad4689c86531d6fcbd8fc93707fce1154307c1b3e6e31f0adb5fdc7bc81774aa92ec999023b31bcc6b2a0b3aa43020c7db355984acefe4f94d4e3fbbceb39d419e5d8bf35223d384a269a182b44de42b9e21f783261e81a3cb569a540aeb2fdcda7fa71879ebc6cb6a34d236bfbbf5e994b3e3d8dcd8bcb1605e346d0428f1264c3b35282072bc4acc73e87f4be11ba8c5d464ac56865fcb114f562f45d3acc4fe7a7c4acf207da9cf0e2984e2291e103a6ac4271d8e3098e80f48c254522861f822c5a70f5dd08f7cedde6e0bfac5cafa5e4970b85af8c1ec87524db90f2da3401c586667917fa4d9f94e644fbcd97e0d993cb0af507eed259fbcf8fd708332e0517db160245091f118c38f34d823d37c02e50e8bda8cc59c40cdeda7dff1b7e0a87cad807f0cfec933831644b468724e808bb3d25fe8f15850ce513fc341da46089c8452087b926b33d72207b973038bfd77c60f475b1861b8074f4d8439421c5b265e5b2864f6defe07db044f0b2d3b60f270c7f9ade2c061c00c5a8aa2986a886262254790d22a7e5b68c3dff798679142d984dfa6f97c3241b3ed3c4383367798b937cec8cd58991bf2cccf00ed1777af28cd600e029d12d16a8f04e6ac8a10108a1923d28f6e398ea0a889eed451fc83862be4aca82cebba59c74951ba6d3b11fe54b076c17745fd9bde7389f41f07041a25d3499030a442aa1d744d56e8e0e53d6fdc7e0b78a5b00af6f798f688817c0d4396ad65b125b28219eba22801e7d26ef20eb0147b41ef16787ce581955031860d93a0cdb85652 +MD = a5e93544e86eb9960dcfcebb6bcc461d82f119cae1947e340c7cea1c7f351c0b + +Len = 21104 +Msg = 08be55573177d70c9eca518c96b457677ce07e31a126cc295c536c175d28a67b3ea50fe35b87fd9de40f3e8e30050a6254fd35e6f5d9a9b15a8f140ac52cde0604195ef1439d4def24a47be312bfc090d26b36ff5a96a520e75f3fb34a1e8e6982a4aa4790c4af4c87126e53e3ea633b1bb4e8447a67a7bc2a4c55dc92059eede2cd5baeeb010bfa35e081a64b8fdaa95a5fb27ffa5398cf4cddbe4b45e9f5d7491cd9eefc5e494255961ba3f4b40d22b5f5fe7685625e9f749be3c90cd27d72e11a8dcf6ae2526c0fbca3148364e4f054fd33f2c19de275cb0c2a1d8fc91d05d24edd19de950cc08ddb83bfa3a4475a60ffb8bb560b0c9879bafc1175d5bdd744413293ff806086f47a226cfa7e1ea70184f799edb5c552a52dc26b66ff45315e79f50776aa36056f22e8e530f951205e1357542ea1f3e977ebe2f40c4e9e5b48808c3bea1c7786235a3df1ee1dc80da03440b3c0d97fa6187ec6740ccaae9d2bde61f704dc09513baa8957dcf36cb6ee6f1a804c6552d1b06ed4b3117b5e3f2f19da056cf4d6aedd9a34e0a1822362714d4e81794b53b266417678c16a97887bbb612cc96bc5e532b3a654e5d3d65a5155427ff09569906381138cc49e3fc2384c5d33c34abd3d617c487b52ec6ee7b5105f41584b7eb5cfb512b8c31f3f338d5236e30398a8ff927e801c8ed7d14fc5040d915a737967d166ddc266f68023a3575304315d6d74ef3fb701419ce9daabbbb5359e1741ef911bdb72542ae9dca1e21e5ef5a2f4e19d4956f014419cd28cbdbdf6cb3ec095385c749236c361a5b07cfeb8f56e2591c724c3b2aed0d47d93908f9c89f1dda0eeb210e8b3cad2c5f8ab5bdbdcc9e8cb9356680fb9507825e5be91ef8237805adaa3173e74462385a0fa9e9050bb25d62969accedaca7010adcf2db75b18910925b9f15a203f3c2dd1ee2d9df94dc4fbb2e5f6b9bb45a4861149cabbbf9cf9f6f67c070460bd0505b21171ca8186ad825650b09604c9fcd139b6cfc454cc9e697673bf06dcc966546cead2e18d6fc8b33c34412e5d5f60384e9da69ac2af69a9cd2682273b6a47642601b9a8c80efed58d1811496c0db8027887b605b24d4200221db92e26a9907b09df8ce9d76d3532708588afdcddec78defb67cdccaf12b49de1cae4448c29e23d0bb46a659456100e020e2753d7e4e2a98121b9b7dcbf0e68f91f113e1efae1e90d9af418894ab88f170b7a7902888800a14c921cdc3356a8ed1e7dbb64ebbf356ea54e9856f7721a4ce770f866c1b10ce45020a2b854d4884631ef6468e5c64ab53c428e034786d72a0ad1750b75a6f5d1962bf2770cd02e8bbf30e131ce3c506ac996a296213bef38dc659bfa8db0e2f1847bb3214291c2443009d9c7906a6e16b3137b196cda8afec6f40f3af215fbca83d78ebfde606df9eb3ff4331198cd406281c29312abcf052e457cd38a1d6ae6fc092b58c78556335a9ddb7c3b0e95703ea81e0dfaf6e7d47d2188ce3f1254cd55d731f4e748a779e4ea36aaf413ed2eaf4f388e0c03faf41c50db32f83ae405f80a499b25f08554f1edacc626f0fd031d40b71e30192feb719a1e079ddf3f184b6a1a5669c71a4be96fe6d6b8eeee76f04144c54e82ae43e6c7f9551547908eb8be4d2c9b138ee635388ce59253e810901b878c4e84a083e29e13254abafdeda5d08926a41d09ad3b1045f89c6712576596277a18682d34cde8157e2382aebf7c66774b6a2db22964bfb919be7495d5d879cd9895767cdd0e6da66988e6cc8ba449bea3d68bb1e1180c914fe0c099124f8e20edabf5b6060ff56fed612d7fda85410736d07e2f5dc0c175a3ea944595339bc981432f02383748181296a0ee338715fa0d414f5426c2a40c1bc438c1e6ed696f5c466a89f9ee2d48e01087421e128f3e2f0f4747c3887effc256f4368de3c0bb879aef72d49c6ea760b52aa2238e757ca424ac31bc7816f59d8910cc127f6755092906e64ea9d1de996ed037cb63905b7566c6399afc3697b643d3aafe2828e4ead9f60df17e1f959324c2299df9a884a9bfdf88e47ba48d146d87f9d945c9103294090e44811f7357bd499f22b9859e48163d45225d297ebff072e029401383ea418512cf1b9b21ec23abc1e009ee525b522999dd098d13c0b2dc887880cee21ac8b3401bb459475a3c30b86152ac48e85debac9be998f31e9d0f184d6dc2d8c811dbc1afb5238caaf222ac2dfd8827fa1ecba5e76412c6e19852b9316fb60bfe0345bc1384bf98e32bc7c4ca704798967d11ac46e2c236128aec93abee7423c388385ad08bf5140dd16929c215b442c66204eb42cb71e9b75d26cd4352c2c92087fec36d318fa831cb4e039d5396ce91b5ed876288e787dbf84890810369a51be9dd1e72dd53fb5601be79e191b4e3005e14ab2e7fecb983439a03ee6a315ebf941e9368f90bb6845b03b31839d72a1946c17d2f194827b926634f11ede19c1171084cd6ec7d80c3c164dac9b2c74ae6533c25ecbec2788489ed9b72f543091b68e56e441e72021c1b28167d644cec6f6ecccceed72454ed547e109aeb1d4be462fb243af7b1e49651988ebbb72eb8bb80bb9abbca3465fa6f5fd61035380a7445949441df04cd3a4bfc6b0b133455d26f4fb6dd01bb50b5c2d8145c3d5cefd4fbf6e6e03e31650ff29cd4f5e0286cbc25d149dce280c0263630f2076950a10b6a6943a07c01551d2cbff20286d0a48188887a3ed74d5b54b1b1999823dec9217c37d308013c456ce2aeedb96df4a62a82be728d47e8c9471ca13197d2cc0f1f17a6bda035aadc05fdb2eca3fd5e1abffab958509a1ab3076049e18ddde31a0c25002af08112c3ef631117469fd5a646d7c3551037abc19d63f1d201aeeb93f08d8b41814b3ea232fe13972cb920f5c90322915488639a100fe12c7bacac21d337902bdafcf420d7b40294ddb508ad4f651e33a4f40ae7684b6016833fee6dbe0b560f83fdfde5e46f2435e0f95577e1e5016488e3674fadfeb7b8a2cf781fb8f1271605b5219a6416c3a3bcefcffa866b114b89bd437be8122f3b5fc413decad14967e78b27e75c912506fcfd3ddf46df98112eeb6612216e0ec743878752fb93052cb1e9d973d6c89285258d69cd2929dcdd00d398bd5efa9c83d57e9c24531fa38aec36fde7d9a35448c106196d383226d886dea124a99e23989d1219fcda5d6bab1fd95cea6e0ab27857d016677ae0bd29487448ee0942e92e23abc8819936a5b7d23cbe259ce5f33d70532862f81cebfacefe56c487ce376bf0b26f5c979098d58dc6eb3f6b1c60be93f61606b8cff670a1e2944d292a557a8b8dd735dc558d2ed9dfaae1e39741244824aafcc4df27b5488ac732f93f8b817ca6c8b2716bccea3defc4b30d3ede961842aaec2436c6f14b5cba1afff321a94c640a7e5dbc9d30425e025cf0fa7e3d89b9df7ddeba1b4b33c234ae422f5e19822e643fa82e48286e952a8594b16a4125f11158fc556dec8623fc96cadc8cfaa66e9f9e5bab14fc4cfa04d5024cebc97452082585ee06fccfe7db799fe0f173408b83427d1a4bd161f65af541b447fdfd458b8b826c2ca2937599ffca25d5add9edd8d4166233d237f2f28c59cfc60648306432fab928065c37fed1529182cff8fc66fb2f6d1424555495435387b20cdd7c59c3f5bc4251b194d1973f0e3f022620f560ce2238f243850bc236 +MD = c525eef8b2ca56547565c947bb7e964e2ecae7c9c82c29228b6c932d2ace181c + +Len = 21896 +Msg = 5bfe61888fb48779d4dc6bfbfe891fed45a830b345edced1490d2cb8c82e2adf309b3216e3bd5f187f47e55f63b0ad3c6fe63f260a41e5536ab50d85104df02791d471989cd548c739c75f004f817c0569f42161b918b1f95e27d3e4e20a1b7c0710e8b5c3e688ae89c4a386cae4d671bc389e0b5a5c78ecacca467c484df50819b85d165fd768f6f7a6779addc101a8ef1c7dccf3f48353dc052ef649fec4f34f329963789030c70bd5a4e48e0046d18a06884e8ec81a57764252f9ed05d16531e7644317f928484eb9f20be789ed141560853632c0842003e87b2e3d4a6485483f855e42fa98a247ba28b8f0443e9a19913d2fe8c40bd50b5f713c40b5c57b1ba3c65d047bc7fc7f411092b01a818b1e0178dfb7bcf59e140efccdff2f3b703279ede86264fe7f7cb470422ff1fd0faa18feeea7908ba4a85fe486809e0f8c162ac3a6669d8553c87d116f75b3fb4c473e9605c028150f4eb9f011cdec8af64e1f1040170ea49feb02bbc28b46c36d7cdb0acc0b6cdb078f84ea16eefff1d762bf9c5d7da0a38b6bad35e278949d98d15720ea8f4524b3f129983ce9c18f56db712ea6a139c941d2e549794483d1f6cf1aa10854993a3bfe0ec22cc818ab9c409f90c38ac25fe6a711bd2cf8fda6aefd8c54cd635263c83e9c328e93ee8cd019b0885b4024ada5739b5aa59ae965e8e41603e2c356e882383baf09502a7b1bef0cdf16cc45fba4bdeae88c352e57ce0a1e74ee7c8f11907454004509b4c0a5481b5d9e350f910b0d662f88ceb6c185f90e709a97e3251a7a4deeebc574a395af44c9988369b603eb77f6426f68ee38394cbf8e1b3c6e4ad39041a38d526c13a9f2ecafbf3ab4b4e08507621f2c250d50422971108132460683c11468366249c08a8f89f06cd14573f8288fe7eaad2cc85676eb7f9aba369b9035e75e08ce5d7b7578ce1ee656de2d382271cd8acfbe29f26da66f6e4e431a1e67c377b0f877621b702751908ba995adbdb1dcf5d3ebf97dd847e8e735950c941d51bc1628c0fee43e3c9252b7cb33c0c0f7191101dac25f7d79f2ecb953f95c20393422a65fd639acb4e814236f8fd7f5ea8ec7a0b40bff24e2966620a567dd3822e7bdb97d738080375cbe18bb325c22334200faa05dc7972adb3bb3b4e07f2cb4decdab425b23836ff538dcd7a3b5107a3da255c73f1e9dfaca54baa8ebaac698203bc2d518887d01bb6ab7ec6a4c87668896fa51396cfdfa69997da911c6cc76b5f0475f32193698b63df32210874f9f2ac53165d31a80d1c2f243ddd83b07f5a6d381072f3c75daef97d7a01cd02fce2b16422b968eee27dd48566fcb723fbefacbbaf6995b046f6d62aa8f168ef09b947074cc09310fa6c081fc856fd13c79b9c23853f7dda9003884b51686285aad6cbd1070b56baaf475877e484ec1c5cdec9f4547d22a2d3559e7405ef50835adbbe45e3e20a589b9044024dfefaba4629a4a27fab1aa57b5d771928feb95494289cda65fd445729e73963572daf59fe1cbaa26931cc5f129ba0cf5d0ee375e15df6030fb59b52e4acc70fb2b98097ff287a98c3b9be3c1380b9faf4988563bcdc4854339355b856717b5bc30b04d0b3cd72e9f19b76c918bd1110923405aa91341242941f2a13e9a5a4fc1a9aa2b0d68c222a956f7c827c9144c4b869eac708f5d25283c17ee238d9f2552bf0f0a4b1d516bf019e45f4b9bdc37bd992bb258e8207089522da9fae8ed1fb69965518f048bf2bd8b0499c7a932baa7856ed529c792ed94aabb3c8c524d253761376a9fc5789f57d3e2df629a1dbd5071f07daad3bc85906d490ea174c51f1b3c0abc4307205b081b0397e317a62801863713a4b5a51ec7c2608701f660f5ab5468af45728c0c1688f12b13c7d4e302eccdfddf1455a17fd2870f737f23902fd1d8ab6cafc39bca443301ba53afd79bca3aa52399d5f701c4460ec0b718d6efdbe3187f66cdf16c775183a0623fea1448047138ec2c0695c125ecb04846b032980f5e473eb3f44448d3178c9d8d05b490b5cbe5b462b882f1ad110bd7b5064233e7e58ce07c8e99e0422747aba011c4c7d41af39980f4127b65e6990f6ec165d2f01615f430a6b567261a9a3680f48c18eac62b458da18b88d5d1229578c7e49eb457ac21d824de0405584ae3369854a97e37525d91a9363f863b6d14db0207beba11170f7aef5ddf6949225cc9e364a218d4338c95f35bc9ff8d4332a059155a8aad1f6721f17a21d955e94941bf032c410795789f67424dc82d6c97ceb3589cad918cd1d2117cf2dee46651a7137b6f7f383fc9baed32f46a85b0ec6dfa16aaaa2726f49737ad79ff5e621d02c712925dcdfa28eb6d75e66cfbd7d9861598ac09d6b579774b53dfc42ba5555ac211bd602f8e3d3ccf514a56f9a8051fec26cb530500077b36b74bb5b3f7a0b7eec01a12c6c3afb4fb0f48b1e6ec194367072e0f1ed047a9de21e65b5e20a6223266cefafa61265bdaf60a042a6bbcf76e85ffc588ede10b2cd8d83d95e710a2764c04a0342f4c3a5250b5d72ded9745e9e663fdab1f7ca9082648e3be168640a2bbe28ddaf6c6584c6374b3563a5234c0738440ef2ec0895b515ed64373af039ff99048567e3fbeb1796d1e0f1994ccdb748a15bce157b50ba2449d8ac734f3534e37590e8f5d7267d8c8a2c054051622319d057a01e63502611fc0fdd9bc18a704ff496cf1c87e58c8aec7cfb14e197ef1e3979156180f26d61ac80273f07b83620f9fd66b29e96a934714a5f917ded5fe875369a8924d61495a3c035b7823d0af90e3b6c728bc8780ba11aaf3076b119eafc16abffff79a010aa4675afb187434a99e73cb6cfe96d630464669c7ca181a846afd630513b9475089963822635939835775409eb77fded03ce221ff03d4ba2dd5885b4caba5635471f8bd940b6505459624ed65f02ae0c37ae4e5561c2bc5d28a75707dc6489d3fe7f5b1f91882e218e3e89c6ab07f233088b67b741f07859d122a6a406d893c3970f5dbfb93971624c7291355ff66f140efbeab02134f40b4f411113ca7508a6996600440838cea90c94f1bcde5c7901a36663fa801eb3f3fb8902c1a7c85cdf8e09ef470f049a68572c27c7a6b8a49e8e515fd0df0c2ca67e7118581f4114e0ed6177334e2b5922a48eafe05989764cf8532afdae8be285308fbe21a18da55d10133493462baf6a8d530691675d629f99d271bb6f2c6a32da3b60c8defc92a6ce85b3d17773f1926a1fa8454082fe08eb55b0a4a14c3811a40aacb8181c6140514f519852a2d44cd32b118685b8bd0b55536433e589b0b44683fe69fd7ba5cc50b6ba328826abfc512beedf976d0429706209039c63789d3a2dd278ef88b4bd35723a4a587dfd235c987cbb05fe87e5c4f81b7e3657f43ef77ec54f6ec2327587f87e3a74174c545dd767a3520b9cc2bb9c181e53d5b80be6ed43681bc68387b0cfd2ad4b912df1fd8f2c12fc12d742ccb48b6e756b48a6b0ffd95d56f44c86585ef3fd4f69f69e842626a47482bbd890d7f1e90b970a71ce2cf399a0d9e1d3d72c4eb500004abcba1303b24bf9af16707cc80896d7920fa70b3e9799f5d802c5ce4f6f0e02aedee7fc3fd6f2d6456f14298a6797ab53d2c400f6f192c6b395acab7285b9df87779638377cf9b70344c454c5609e90e45dada4c9124bcaf90ee44a5493a3f559095d6d873ed10a6d5a3984e59e1c16b822ec7d3183f5811cd1052162034cf2b826a5f2ab77094ee801cc40877a80ab33a4e8e0bcb14067937ea7d7276f25361931f86e10d012f307cdf50e07707ccd0b662b75b744bd0cf17a14c21131bd6df0cdcd3653b48ea541215c4 +MD = 31600a05842b12ea927796eafa30e6b1634a97f9bb41a2f75abbb2aa921c17c3 + +Len = 22688 +Msg = f573042576d47a37216e1a4e3b45682998abff4eb1063bf3f7d3351e67ebf40c5f05e1d0b07d7c3cf4544e0422771e215f446874174a0bac4d5042692f99d5a1ee679144ccbef51b776a2ef695444606a0b09888f46a87a326836f9498a6dc084aa0fac9f31f4d9d51baa26cbd3246a002f875d16fef15a22b72a5e6c99970081cb806a94d29ec8a2a4c93adc1cb87b72e23e999b1601f6f0427caa8ebfaf8680cb89c2a01633baaac26e702ca977113cb39db26e2450cd358aac7232552def1c1a7a3963856a0c57d5288b3001d6d7b824332c228274496cf01859ca028896be48d0533198884a245d85c088ae5e1b9fb47d8b3ae8c2f801236eb5e8304619e1c73a94acd83500aadbe4d4891773693dd50b4419aff3559c951e0b0f76ece51126077227bcf6ac55c0e42bd3c5cd5d2d163aeb61505bee89c584ed924ef384e6e5c57054cf23c9bfcd022adb41b243e7e8aae58462832f631551c22310e075bd76f313968762c54320ad761203c8d9e8dcc9c7156eff94b334f32d34754a341f5a2ed07f6e3a4b7a8c64821a94777bba53260476ce27baf484f78348d4875c771fc73b71ebf0b8d060b5d3577c54a5e6fc2e322b18a20ea185cd68c2c72e3b7f385ab910a94c99ef3e2fee4b13e6d4d92860b4c4d6e51c34c7e34254b5a56d822467edddfe946b21851137780384a51b786c10c671774048cbd7a45138937f1a746d2e2c847e9911d6384360b3d483186c9eea9270bf3737f229035ac86eccb298e91e9eb351c02a91d39697bd4cfb7a657786cb6d434d9ceb45e3d3dd9df2e5124a13a703b47cf64891b58f78647a9c038499d3cfaa1fd217ccca4ee0b76e1c712ec1d80e1d0bef8ae104ba8d918d07b754784e003a0a91e80c3b4e9a31bae326058da43b020980a940189b557abf480145c68cb799ba370ca29b35329355b3b14cfb8e02f9f244544d75b478866dd76206f9325e3f9b4bd62e8ea57252cb1893838007fe7b52c4ec5780986f3b252069e674b15ca22a4ae4ee6a11a206778c5d37afb4a5ecb76d01fcedb9920f81cd8982ed9c3b57e3bea980d20c7a2507896ee7fee671e47cc715bc018a9979e039315ab85582c75411a4843ae84314e78a5902e24feaf93f4d980350adde10ecfe01ec696fcb76f7de56472947957c94299c16fe4389715b6b19617f75e85ae4866ba6756d6dfd4b8f4f6811bd09b299c1b892a753c6037dca1a64d28530be836cef1760b0f2b0cbaee055888ae85d74fd3f147203391602c50b6bfe5e5fc2360bfcbdbfece247f4b7c9adf263d9e39236800af2d45b3f77067d155763cdec68fe2517e773c50953346bcfe3ca56db8df83bf48e4994d666e8dfcf7227f3c3b8bdf8a48bd8139b739f3739d110e7bbd4dcb34fb8c58e714ef6b418d32d79be91c5d7f1f1ac4674b272bc7a4ee9f4eae33e969b16fa90a69baa9a7ffee6b85380a0436edd42d61bbc398c1fb1b8070f45a846650d3b53ccd99ee36359e6481901c7db99834e6af6dd6e0688ae0da69f88a4531c101a408a852e2f7178ae918591b7010098214d9cb27abc53a85d5bf218ad3d4ed419df362ae2ef18efa23d0fbd084412906e2673b80a2def15198fcd624d857bbdbc88763757a2d80353934de006256df0876e227a76cbd988d4ca7811ef9c012164e4b146f6db1d78454c96b76b25612cff8d2f665b26a188218498941e019dc3b57c7db63b087792f9c1908f91b4aaca491bd10821ceb577525695655356a00920a84211bebb7507e38ab1e50453994cf682dddc6514a3fb19a8f50229fb9666390094f5dc54742b851071644d92bb298a7a9c5f9fa8fb77da044df6fc710f6f611decbf2e64139270eb6569d7f29ee4673ba30e2bec0a6205f0e6b0655769892b48cffa2f7ac1c11983f4823de393023f7e6864a46e7f6e3fe785cadf0f43481a19a5134a091d3bf162a539d9f66607558b82ff93a0b8e0ea6071a2d4090b20901902b7288f74579b100ded569b56685c1b593b7413556e97e450d4eee54fa73fcf7f42258e65c8791475391e5302a9b58671a4c036c36bbafb99dd7a248f407b956140db767ff30dd8a199abbde95ff45552d7f29b816ce60eb33920373890c6135f3fb4e8016bdbe4e98b892c78df8b10732195b21de68ba643545badd9fcc1b1cf9b4c53b8a765b1d38b212f4fbcfc40693e340b076d2e5ab0db96f8e1f8d10948effc3a041a3dd7e6152e46cc8cda5d9b6a2816cc654084821b6c98ff29867241aa5f0b6248c6bfa7b5eb037da377d080521c55eb7354bc4db0470e7fe354955056ff5851b792e18ee9f1d5e1b58731ce627b58c2fbfd7a6a26a0d9e2dabdeaeb7227a150fb14d6022ddd4e87277b09cc37bf9001738d476ddb148bd66444db79889266fe67df15a80e07dddc6db5b1003e638c258e96abdf6a1c84a9046bff8116ba29a8a25428f6e6fbf4601cd9d000e301ad8d81abf015402365095fa5bfa888f959ee1f167865554422a0a959ef54c21494c8113fecd5f9c39d45ca84a4466bea884d52889c79e55af91c97b857725806a263a1b4da67f377ae0cd98b35e14c083534d14cfdbaf3bae8326c77b0c0117286cea7bd4161c9aa07bd011bfd1f85dcd1330fb6249f2cde60909c0a73e48ac28287b7cbda49e8e54ae4d5d96247c5d2fcc68266999cdd5002a5aaf329462081561d4642dd96ddb3e802cc25fdf07875087dcdd0d54aa19a3ef01dc4396b7f39520dd7b4e3bf14905f95589438b00a4d94c74687601f063785ee68f03cdaf35506c7e0b4854939f5221b1f969afd17c7121180ecb2807792782f21099c0b395f04d9f5a43acb9a7cc01265cf9d3e1d7c110b0183551572357600ba62ef829dc1acb28b166c9cd271ca09df81d7f987d702024cedb05482bb0021a9beafb7bd278ef0158d93535e8e906ff17fb3c5e3627595c78e6cb4258dc6f0835f4530f3fb2c01397c5785bb2dc3c32ffbb919bc98ec4415e7d2cad7180afbbbd75874feb704644b65218a54d9d4920f88607b7ff4c68b9c8c9aff13f47cb1d7a9420a29e598a7dfca79f7d80d335af4c84251aa00a4eadfdf1dc768ad6ca15b67aa56f1f1593a7b3ed954a142609c941dc732d746f7c06461e3ba419d8b48ab74e9e20374d6aa8214b8073d240cc5521b779564224fcaaeb7855e4b6f39166c739941caea9156a8eeaea627fc6863b323cc0fed4d0d6833426b19c27cf6a902c630ecb4cd09ed344f15a7ee6633f63bd94cf8ef01c10786851d736351546f02ef39495d86b0ccd8a89592fcebd00b509e62e6c5fb0b470d1205018a86d2e6e1712aee21c21683fa7da6eddfe7cd019605b6602e833c955b5bca3ac487e29f22de7e51ade9bb910e40b21f03f49b877081bfeb7554e580e5d4c5858ddf13f64ba9bc0a5e780072a8945fad059ccbfb74a4d7ef26da8688311f9f8862e6d78ac0455c8ebff795b74deaf82e614acedc16e196e1df7ea019c19eb0a9d049bddb2543e8355ed2ebcd62a72409838914a7dbca8579fbcbb2b41bc4916052723755ff17e7b497b463238b7b5bc4f8c25dfd37c22c1e084c4ef5a433ba4255fac4999253c38306f6ac582cba17f74d90db3acf5af324816ac54cff6eb3d6774de5f4936a0407392417e9caf5e106de7f4ceee7075343f3c1c63881d7e68322d63c1586dd31d78ac74646fab13f7a47e803983359f4e2dbcbc236d001faeef53e077ac12fd57a985aa7fe106e8bd7f6659fb518c53097a5f339c67e7f49604ae00872f6d45746de48cd8db0a06e96866281c42bdb9eb8eed2ad65c1925a8da0668fbc7c5d4fe2b93c17646fd9503c64895a53d0ffb7ed12e48da36dfdb6cd923c3da5e64d27d4d58f2620828bc9401d2479d29cc3e4aacea36afdb813e6b69cdb72ddb9066773afcc7a20bd3a42381cde70cf03aadd685e89b5d3547752cf3cbecfb2692b8765a47e74035467538ad001cfb79a16daac5f120ed2a78a937dde60c4c27b2 +MD = 7ce7f53dc2287da4cf28c9fe64d5515e484c9cc57fd81ec76e66fa38b760565e + +Len = 23480 +Msg = 1ba0728993b8f0038cd7afac17dfde8c712842e327187b5f7df4899111f58ea2bc9fd542b94e14e20912ee2315bcbc8e96398d85b21f6b796786e15e2d19ba5cd76d0ac8bb91735212e6a180a230175b9aee2e68bde75ad9c206b005fb67a51636b21901e1a894bc71fbcfab0463765b44ee2c728f98d0e6561bfe6ec308d9369f1708d772bbff86ecfa808b837c61f65ee28f8d72595308eb6ed481cd24de26db43e131b8f43d1a4c8bbc0a69a46094ae7160a0ac526da748a6392660e23a4cb2e0acf6f979d5de58558c0ffc02fc9dfe44a69286aca52b366c3645c66a7712eb936f107e724f3cda01f78386bfbc791402694d488f83fd7d68d2c645e51cdf500634668f08349b9836064c4d022990b854b1b83a229083e5411591267bb21aa7e102e073620a625c9dc0539af4c94ab4e287bba48e532636a0078eb153c02db9cbe26674aa5cfbecde2d80b4bc2710cf53f23ecdfa554e372cb1a62d96ce7f4e6ddae0d805afcd10a055bce584c848d050fb29fe8f1c64b18e1abfe46b65782e6ff536e89d8d40928b41ed7371365c8080a9647f7532ce6c6d4ac21cfb0c8020783851ec9a7dbc3948f8fca7adf8b2a78c04d898d31ff630724a981e6d4bffed30ad172c2408a9cc7f82d2c96096b40d1b146b91d16942c545212732eaaa5d5d415b71ef61b46f14d7e85521b198c879d6e206b1999a1cf28dd7599f9ab20238504a477f7c0c76d9f9316ff6c98758b4647592415039eb80f27515afa4ea5746088382229b9527e28d650792d0ebcb876fd5f58921cf17381e0242a831dac24f0e0d0821e7d9e8f93a8d053bed4a89b79c0b19d132e308dfb686cad3680bac1a0df0c3c4875f22e4a8af503a482efa0f951ee461abfd2540650a947872047e70ab359a52a3af3e6c80d6d2d70a1e865602164080b5a6d822d19488df764d9e1990e374156552a2596a0772595ba395538afc14787864894ca22f8e4f9d6f76dd65023b53f3cfb8730d4c180a62448fcfd6d7488f1bc29e8781e08e120ff16c84d29bd65575aee78212acac304889dc928eafc30ec645809b16b1706ef35bead57eb42d631478964d2030171434fae464598c6f3da377975008a91cac71365799125828c4f7b42f9de0de3ffe4f200f0ddf773363d7df4b6effd07b13b3091b98358cafc248ea193afac00d35c182c654c977f7c98d0505bca52f73edde5c9e9a905aaaa32ca2bcec15de6903b1a86f03bf95a3b8eb722b039fcded801db84767cbc901b0cd65807bd93e3cae471b74e068d8207619ad270b98b3d21696a380c68de19c3153bacdaef0ea6c7fad623bb46d48544b403e5f9c36e708f571a7b1817eab636ee62a0b4effeae3be08052e4675ed288188ae3d7e21737965d74c405e472e3faeac3ca223b14487b3838db36029d0845f18842778025e0bb0f01996269073163bd078faf5ab0242a6438134c831f8512c1948875481b1a81de3961ba00080d25b78667b8c982cfbde73691847346d7531b283c4d8457337f3d94b3796405f5957cd8f8eb01ec89aa439cec7a5db38dab60cbc46cdf7aca07bf9c153cef8189577f67a9928e5e00640bd36a9aacd6066024e7b75fa3e65cbfd6c7fd512cfb16c021baf06bd967b29fa282c261eb2ed035fa148b929c3a5a0c0590d27286d34c84266b73b37d9a2ea19a235a6c834e898132dac7a202e74070ee9f4afd87ba8907dfd19a25e555c31e752db9171f9580d67192e20a826dae82d43bbd7eca116acfc085da1f9b3b1e6aa61a54fe1a9454aa38e57138953e02b6691ea062a86850307b00ca2d29aa9f2abf71b48e0edb7360fb3adbb8b5e8db801f80aa35cd3fd7fe51cad0cafb34d3b323ac6e4366db7bbf3b1ba8176efea7746a2a218482f8707e076c84759a6a4aa87552d8caad04cc096af06cb11adfd507db73accb74329843ee3e5bb981ab627f16ed9a606be7f2e41d617022541d02ced5e5a2770b7eddc488d8dd033b88c9bb9ae509c10e157eb3c4e778f7a526bf1dfc08b913d32dbf8469c47eef4272dec283c1cd491dedce0cf3eaed8d889d4899b055472e45cfac080389c7da10fa1048441c4b8506016f542ce4247078e15da69543e322ede521c3d8713e5031af1c915e4d1ae170d0e13dc28bd43ce0836ce91d5d039e360ebf5c7b4348ee2ee2425254eca20ac8dcb20e671a733f7a03d4c5ab292f0cb89ce3164e587e0063342fffaa63775d8895505a8d4868148fd343b0e100cbdad0202ba5d4395443692543edd15a11563a9b5ab6a77e4948ac82285f31ac70953728f76faf5e5203cb261cc16c38f681594f2f9748248d484a8101151f54a3d83827e4f8223ffddde3d7190edd789d6b6f314d60d1e3ba9004605c772cc1dbf06dad62c3ff76ce4e5d88d72aa7917c70d6d242c7f73447bc449098f9dc5c9f9a4219ff47797b39c182dbb5a94d3c2a3e3ab28e210a8ebb29a5a24511908d5512400e191732b5c6c41e40530f40a11d200542be009e5b8b648215ff52fbec931501ea5ea7bdcf0be26a573dc12498dbc2c11320eb25434f09645c163270f2e00ee24f2e7d6d1f6f991170c4736b6bcc92f8a4754521ae6c64e6f538449228a26c7b9d170ce34f68448e2d857a8792862d066719a326256a136461c3edc20680ba386496da92a78c913afdff5afbb59edd84eb9c89b520dea1873247a2a304d174a3262c6b0dd052fbc262a0a95a4d6d410e925c6d3129207ba9d7321797bc3b2836624642b75241e09eec07ca05b277d3de0c07c22cb6d62e46d12191229514417ca982d62195efec4b0a9351909d4522ada8fd2d2a52761608a084c3d618035cf05c50a9cf23a38b313ee1b48d565b99e809cb12ac7476ef59e5da0424bd6ed71c0b4e3232840329fc0961874e8631c607aeeff715a55f06a4e19ff6810ddd4c5a26ba13de2f8554f5ea913e66956e2396f8da6f085da4f88444550f8d81d529554f42a3348eb098d9630f3e781c473f107828cef715df21728e97b3aca1dd0a77d57684d84a0b71f1031a2bd58373750ebd49bb5456643dfa10b67760f65b4c4c69a42d2bb9fc5ce73b707b01536961ec38bb98c2a7da9a758b5fef4ce7d68b4d7c79f0c18719d6267c70a0ae14af82236b0d0ba482b8c39f5ee27fb30ee523f57e56941c09da5a3966b9311e3f9c525ed49c788c6f7545b1fbfcad55d3edc2deffd87badeab4759a5aa8a0f44ce65ef9061863ecd6a6ad67e2ed0c87cf86d454616e1bf9824ea4b3f8dd74a2b4e4048c6fdf524840a3471bb461f1db6a16c5005385f97168ff5420a1a630bc103bef83727fc8214621bf67e0ca01c32c34317d36be98c8174d206ae5b14992d7448c68ce6839fa4f7882b6e8a3b0c19e5595f59b867e4015be85fd458d33e9829447b6d4372c45d53e1da34c7d937929016f33e26c1e8bdcd9f15241889402aab1cdf8144b13967fd8fc978cb60e3c64be29a2bbedfe0de515fef45a31ce80a8136ba71f42846e97dfbc1e19fba59dc9e251bc887a9148b7090b6e001767e6133fcd4e458c0330b5c8c89174acde1fd11473fbc8908cbedb19a329c3b7d4a564ad4f5837a5f47f721a9ebc3d483c2512db0ceb0cce24f2c9ce62b22571b93124d28e4f661eecbd254bcad8d46c246ff79c9904b5921e66fb9da69196037a3bdc45f6ae4155607c77d2c981ca774b3307ef84c3637abd9de91dfb32a5bb8c07e37e14ff69f7d43fb25617419ff80520bc2a6cc186e6a70a3ab5ed3fd5288337d2f165bd3064dc799d3c3092b56ce6bb9cf3cd69a0744f2e38fbd8f394c8e44e33466552352addac710ba1efbb54646612d2033640923a9c9c666b08652b23ad8cc3907908b84c6ad63ae7d3023d02a2c62bcab1d7ceedb7ad7bffe8e6bdc5f8381f737c0babcd1755407ec73a9546142f877056d688dd1214a3240f69ff4f90dda08ae5be73c44446b2d346c4eba31ca77b80bfed6e7d3e4a8254069f6e2519d5fd4340a18ec674531881dc21aeae3ec65e98375cde628eb7802c48d798eaf5c99c4917557b4819d2d806e1e15ccbed24c71367d56711a5f4230950a2fe15a720f3e8c43ab7cdc77e87ef12748490ca1b3b8ecbc7870ef688f177b8921c19c0649abee1c1d2cbef9e8 +MD = e026d0e1228ef882d093fe4dbb2ec5134dd122877ac2b380d399bff447fc9fa1 + +Len = 24272 +Msg = 9e014421c88bcf4c2611981d723747ecaec70e75b8f6dc3a1ee9d4233377fd6863313bb0c39f7e7beccd39bd0a0616cb30e0e87bef79e08726ff05331b76de30cbb571bf7fb2721aa000b40fcc96e3ee29d275a5fabede2a70910319c279f29f8097d096244b12f1eab3f15be16e171b42a69f3b014d3ce9a3a6b81d4f08a17c27df3f7dd9f3c8ca70edd7e971171b1b23634c842eaf648d67470b87ebab53916b93a5bbc631fc6bddb65000a31756b6731166c9a76bbcde667be49ebdeb70a4f1bdec99148d149dd71644e99ff82fb3dbb9d4529409aea3454a2babee4f607e6464fb5feb8f7928061699ed8e4110dc02617e671e11a1a6afbcc8f6a5608be76a91ba5572c093d414bd3852987b60f791144c506d0cfdad4adaa4c70ba45aa6ab4b11c2d2a7ca69a6140960e42d86cd2fd72654a8822981beaba56648a53385d19ae8f032cd87ae6721f4619bdfec2685b4f4bdf7f98feab437b41a83eb7f4a81862725bbb8306cfceee29be41af9ca3ab29ed183fb96afd487ba2de4fca7be6518b6aa95f22f6b1083b957e8641580f7d90cd9740fa69ac5a29de5946211a925577dc7e703ea7349e663ddce48a8116432271cf2be27713090478bbba527d3694c65c3d971cb4c4f21c675bf4b1a4628c4d5e4248e81fdbc5a9e66804b5003d8fd54e895c638bdcb3ccc67e3f7d4e5ec98ff7732091d0612078cc00cdef3031a74337c40899b90653d5cfa61d33cb657b48e1e45b76154d99ff8df87e67a99d8b9ebc805435b8bc42e5d786267bb8312226821851fb6aeba2bc90c18e94c8ebad262140a7be0779116b9270d3cba12c4ea77c819c985dd5db2e98fe771d1a967c982a877b9921b73fe57508bd99f2c1612a15b293d34aa693c3fb01d0571b488a632cb7586d94113ed1f3a03c6d399b0a4d021df042dda87d2b3b7e22e9475c46f59c62c681daf18ebf92f9e8cbf2139a7eb6361a5d6385e7a2deb5d72a2b6c42ee1e1c3e9c62e2b01cd7584b2ca8c5a24da69d7a8998b973e9596b75c033d2feab16462913c86f4358355dcc05ba1ba22857b6a96dd9ad926d3fe17711fd2aeacb19733e7e77f1a910317ce3fdc2902a9d4e141f5092ecd39d06ba63b5f3fe97bc9c25b7330e1461d350384b6b4edd9c2afe28650870f1a7f72278c41294b875fe12c05bd7d731fe0026123ad4bb2e873fec85e2cbe056900a279f00be6bd3160e11e574e37fe4ee25078d6ac0943d6c6a9d9f31316d862c549a8fa22ff5e8e87b1e079adc74a7a2b0991c33c56674cc3985e6d8cf74facd54dfdd40ddaf647db3aba9462931f4cc413f412e49ae5f271b39ef420c934f03898c0a354e14d036462f4d0f605456cb458e9ec2d3d866fd8e3e3ae55f44dd5f7103992807b2a6b2b12d554f084838103beb8799ea7126c000e73c6b6e06304199fafc6180f56263733a649d877a333b92fa8e0bf405190f21d9762c8f63d24a62c6c6aa4079add91abb0d637486b2cdf92024a18710a84b5f997ab159ca5dea79eb6a4accabc383f643824935ea4117dce0fde32a007ef5188bbc8243b61da23dfd69cb9c084de4b44895b7721168d99cd14c594370e7acfb44be17d3c3abf22d6147c5251bc78bc35eaa268f988463d765c26c69ce8cd36648e20a905f836ac6bb76900e52aad9b1ea221f04ec3e470b12e2a51395d8f8e80cdab2f0063e6ca86098d4ae49826efe6fa01968890103b66d1f8bc743468dfef50aa97944278830f5010b8b6cc8bc0773a6ae20fb572a47d8eba8fb73702329b5f466a285f93e0eed51ad2c38e8317b8aa835d4cfab1b6dfad9553692c028e6b42a62e2680e0e70ce0d12174a8b6fb9191758ea52975767276b38ff1dc13fc4740f46ef56e06a24fb8602c2fe0cd74ea3967fe830868ee1f303ccbb90fdb8317a355affdf1ae19a0a7ed7b5d00708aabe882334f613025cf25588f288c022bc3b1f37ba6d08053e8f3a19767ce4646bde7eeb76ffa7523689b2d64a61d31fc34b3f65958d523580de5a307b313f8af067ed2124d9be0f1d3dbe6d19b8810ff50f086d27bc64030f9c51c53ab962dcd6ff456ca4f0e1896f92da95f6f96463b00b2c96d776c7ee492db3304b6218ea9e093a469df1ac61ac1d89e948b0f7cb82d3feab2b48f867ac26e11a13b7ac34a42a1e177648692861226effb55bb597fbde10f299bf7fffd6fc8ddb2a46a73b97b67387a461b23e1d65dc119366286979add615b926b9272832fc0c058b946fc752dcffceca12233f4c63f7897cbaa08aa7e07cf02b5e7e3e5ece252bf2fe61d163bce84c0e0368454a98e9fdebf6edbd70b290d549ba5577d476af04194f82348d85e9b299f08ddde4ed91675067a1707cbf19eeee675d73387802246af2717f24da7c78fa840457afc4666c26875c4240785093a5efe6aeff64e7136491800fce3d0935ac185c510fdfd162fad07eb15080dd69ecae91899daf964792a76e64ddf0184f3b37f64889727ae229cd993c213b28e84f3dde9197cac84771ae7d2cf8c6424c045d72aca13ecb605fe93c413739bb853a283e657248d5799e113ca69311efa2a41351fbeb973b73f9bdd86f06ef2dc739d83163c1ac4674546a4d903155a8e9a6d404c4dd0e539383b5de2414edc824cac8482aea57a3ce4133f0486813e697693a1b85da269c258a6bedfee59833346992e30960ed75cdf0e8e55d8bdf2122779006bd77528dc07a3a686dfd80f76c92b2a2add9e02519c0039d3e2119f1116e8036ea4924a0eadfcbedefd12a8d43d292078699a24a385b0e8868cc56defaaa755c8aa41f6e0b277adef2e5174d40a5cb720244d64d801e84277bf2083334a809c81d3c954db7edd1bc15bdb9efe988c982cf5feeb7a776eefad616b0a65603981a206748d8679f5b25d6dfa4cda4f806ba3c3f4e011510b98305bef290e539bab322b88c96a0c8917ca4af3a7f19802d78e78786c23f687e50996f109b58b6ec339294e2f0d9d5ff510dc11d6cad9d884f4fbd2b73aceaa7d3ff9bcd1e2707a70c0ea0ee8f99641f238099b01ed7bcb1bdd344ae8dd413c09da6b97aa1d6a865bcd55101bb65df5b648bbd852e3e7a344520b282895b70430e3d6c9bcefe15c2b6b529bf1ca5c43ea4bd911ef338428a65968b39ee898cb9b61219b2edf3dc2899fc9f892bff9f536464b8f0065b922eafd333473604c59f15c34552976e6811d73a270251d9ed14143f997ae02f058b74354f3ce853b76dbddf73fd43a44618eeec549d36ab2a1b449cb7420919093b635b338d8deceea01ea52a058b5bf2985181bcbc3309d2b3661a96c809a019b8fda394bb8f36b7c0a8e2dc2dc6fc0a3a9fa8a401ef6c63870927bc9f3a5aa38e93acc73974c7cf69fce70eb89efad95a39bfbee0b45978f0ae429d1a33bf5326c5e55fa9d72671e67b4036487bdf0c81a04571eb3a477faab5f9bcdb8e34950c14dbd26f1ec96bd0b47ce75fd61ef04b73b84193d9bce3ffb0cb9045a260e5b900fea40bc426f9a328fb96513631410224a6c24d2b20527a4f26cc0af8bad1c80adc68f25fd5c7f8595ad7ef34cc6b60238f58a9a72827a4b199a47e29a8c583a2e385d55a4c332ab609006c2a46cbcff0e0991bc62ae009b8a2ce319db14da669a27f074bf0e7c4df84c46abf170ebc2d38f83610bf180394c0bd97cd7ad69abfa7d92a9d6a4251366c786d4bd390bf38f6fa6b0f3b4c4d0671d743515c0ccb15521881c72edf5a4b1eb0e658f2fe43a4b9143d2a45d9206e44cfb691db3cc21b3fb1df61a51b4a9e19e2587f0ba3d3d0edda1eea656b383ca7fb54378f031a31cf3985f573829c9ffca14616742e0a7e03b0a2d7f05eff0219eebe8adddc3de99f1407eb00a1dad1256241d7c2f931ec993c4b7b9d40df5f290e68344e4497b31dd5f7cad2f58fd222a9ae0b7e91f4ad2cd18b3db2ad739443feb3ac66c8d21ed9f3b80d610a260382ec1d5a1d84cd502d14e496e6e13651f924535badc5579d31f1cb3b413c37e5a4ae021c165e1646287aea3f90a8a208b713a9da89e6a2bee464c3dcea1820093663eef9ff6a8a2f8d780e60465041391c4149a181994de43fa1245ac23a88ee86a2465c4f56734ceaa0b3d18e749e63873195393b59a3adc24b5f3d7fffdcf633edaabb7c8e7c5ece698cebcf82040896792f1a0da46e9c0ad7e70d69f496c0bcaa8ea00d9f0fb58756fc1780052c98a86c69bc8f05e90f77bb5e43169540ce8f7d64a288e4a7e1c3dd83fd467a82a45b9ff7a925fabda8a +MD = cd26132e2c223d19d3a75ae0664f7475b478695d7824dad856c19417ea0b3794 + +Len = 25064 +Msg = df753c3c6eb6f4e34dde6ee5388b5b818196c4e7a951439e2d0d7223a2e0a4d304a5d30a4c43da8d4033e4258f3c258d1d81c88e9cbe28695ccf427564726b09c14d3e9c1e33d92b95a349dcc59142e02569139d9752da0d41b0f46198ecb8ebbd77653a0d0c5887f436835001131a4240578f5cc493c15283b8712f67d7f53fa12a302c4158c16703f57bc96c48157b16522313490b45ffcaef9f27f8b989ce146f87b9e19e7b946de719912eba9c525062b7094e42cfdec05e6791741ddc60bf4d522b1567eed6d81446ef6ef11590968f3487fcbfc5b50b0cb1b4028856bd4acc79c8073a82f4ed85e82a5474eafd8fe280d57a0a914d530166d9cb845fac5cf4e4d9dc9f9fb85341e88b0acb8161e462843bf1ab996e41466c48f6985ff69dce7ca5bf1eade8b2502f5ab57e44843d182801892a47df7ce2ad49ac4dbe63b7612776d640144db4bba4df8015992e400a556e6910026aaddd10241529e4bb4fb5ce92498c3cafff892e619119ea269842f1cbbae531d57c407c2058b639c610d35a42418b8ed63bc2b72a10129e35ebc8e560a32f3ee99012db869e7c264c9fc2b1cee6c37089116f268026861d23e2a21a754d78906e925b149e0e021114a78abd7e5fbe4b92289763acfbffcfb824da7752e0478f2c29230fb0d1d063e7ce34649ad50488b72a4255f5b6041cbb5a78e33f8325a3ebfe73b4040e6e858dbcc790696f1b8dc1bc78e6a57f1e6cf62b8248835e993472b952ebe2ee65ddce1a4b2834568dc4778842fd0380d3272f40028d679a2baa8a01c99c91993bd57290c91443b1e293a336a78256deaeb52f40ff9a335f636dfb7edfaf5a367bd440c5473cdea9a0640b6eb05ee7c4347ebed482572fd4cae58dd99c0c85edaa410162d0884d66519e78d76477fe58efeba3a492aca222e77b07ba089b5ae852867d0e69e0d70f7ca9b319cbb6e2c26662a8573781d670429533c82c45204cfa0a7c721c2cc6ccaaed81dded03dd2b214c939579be11e7649dd7ac0ff021442b35c636f05460c762d2adcbd34735bba9122d08614b9cafd4f9bc0eb985a3f56c6f2201ee40ee252cc0fd8a84683399851a3e56f610bfef1a13aa9433edef8a45205a7b1cd8b711901f3bc308501fee3dce8e2741f5c1d0bf5169e9840e4d293eb0344d840505b117572d1d68e541e15a95e42448e3ec794a1dc0b3b4d204fbe088791f2ead1e2d48d09c41ab11e09b63d60af415c0861243de789bcc205e27b20ef19820b94baeacf24fd6d9bb4643e0fbc640b076d8c533fb5948d3dfa1d53dab63616412d45cc9261085fbcbb902596be1b01feb2ab8a1de2b63d1f9162f07c79822029e015e2ad2a5f617288200578e23eb6c09c41315eeb693cf55055a9acb598200471add5460d7d038bce96461cc539a9fb6edff1793c281d3dbb6817e1d6c2968f46600d1366ebb636e3557008d3b64bedceea4303516d4e87370ca392799c0428d2ef027be3261a226b000bb39a1f2d3620f29e73c7b3513057d5d5550aaef94f9bad4e15eeb67fccca0881a384eebe53098b6c511b94c5e7923635aff655d682252d5848060787a494e16a5f20af8fd2ed175511a98c0d0b7ab04ce9e94b3c5ef3e1b9a8b5a3a228302d3e5d09cc12244028c13c0e03a71a85d673b94fd98b448c5cdabe7a155fe6304e66138ceed5c5a7223936b58614a3280b5284969b53b1531133dfbfd7216d19b78a1936625b3586a635a84c9de623e5e151e259fb2653ec816da31363970b610b12e4a2d1030263273ef71fb58c2b53db0a490693637acd3fe09f0135116f8abb88fc3eb57daac127cda9cb678707d66ae42f28de9bb4599f353a15d631081b4b64c6868a1bad352a6a46bc2e67680213680b3d474f8f2641c3eaadc16643773d2eea06b97d6813918d448e649dca4b570e73b067ff69c7aa1547458131c043035fcd2bee1389f10fbf29aeb49a8d36c85fef2ebb1be2924ab1d67990140cf3206fe682726e8161f7686c99a8fe4f48c9d4d414ab35783aa6220eb6689d680c26e7dc96f0eecccaeb2193db9c397ef5edf5d8eed2cc99054ede5698953e8fe2895005d5e434eab05d7325d108dcaac2a74b5429ac51d3a6a74f447c8067d33aca20f8cbb6a169a6c0c5a93699384123884dec61a265a673321d6efec4a9e0696be32be502e4a802a7918478a80cd0bcf365e8135f68801f81a12c7bdc9525f2d10f25be334f4478847f4df3cfaad7f38b2bfdab2deb0ef018730390228a126bac1d6cb3d271bd6ce9e76c447a92d54bc21883b5b85d8199691b8ac8512934385f8677626adc81544a5275e73375473a1ab420bf6940b67ff6033880c2d319fd6de2bc5656e02ec31858e1588492bc42f7774b14cb24ec1831b293460218220f59bac1ec414d143df6534524d8ab82fb0aea6972588ab0f6cea201a49978eaf295672ea09443d02946e9f7b8b9f059d6a77612449bd293900f6a2a18e375e35bc370392fda84f1199c859fa0a331af4a6fb2bc07ffad02788673631f9a8f998f467e97c68e80e58369aea3592ecfd1eac618fd390e7a9c24b656532509367c21a0eac1212ac83c0b20cd896eb72b801c4d212c5452bbbf09317b50c5c9fb1997553d2bbc29bb42f5748ad83dc6e538736763eff646f0f9aa6a5b028e575de074f5fe5de425dab8e6b73f0662f88d49749749ae7b55aaba9cd38deecb3bcf6f3ee5a6de5589b70c637b82aa6aa67451847f5aee60295990350f8c6c18d1d02449b6bf037cdfd09bd033de2ab16b4adf47620036511c7e192770cf0103c4009e49ebaf83c682a805d172aa0dd3a1615121f1e20caab99893c8a9ce43f89cc13ba3f700c5cf3cbdd8dbaa8eda4e036845a89168d7e98b39bebd0d22bb8396a29aec6b5b5ff3487263435df4f68cebb02b4fe31d3eaa0bc1e8692d44ce117c151a87ab0798df507653cd0f65091cd4e9808c49779758b5d1bf518cacf24ea7a9590a58ae36efcf2a18cd3157887a5974c3e246f0786203d9920aadd3de8793cfd4e8d6a780a11f1e30c86664eb21e3d283e66e106872805a0ef90341c948db090cb7a79c2cafeac32a4310e5a7b00e934f0d217fddf6c5c394a11f9f792ee7d56edb6df48148aca963c1b3824481242773db03674f6b1eb6a1977515349644c579d88c392517cf417bc8d0a35821df1f90b4769f334c2593d440866ba21b7c59cc4374d29ea9dd1be0ccfac1492e99dc244e0d60301664fbab30d60b382ae8f2c480ca79445b50a9215294749de3eefdbcec3a52bc56475e84ecd67c7d413530f134ff65bcc8c469bbde3035dd0e48f4b9338fff4e88572cffe92a17c7facb84e0b486507e6e92ee2ed4407d7cfa2241a79870ce5d291ef77a9a2395deb4267f01a3e191ffa95696e8e957c3f424256506af7f386eb5093e9384655ef819c07fd277b3d2b7259a048861f891e938acff64dd1dd5f9c89072c94c61ebca784417e1945f7b3b5fb7b76bf2757fa29433414095ef1f94b06f248a36abb4bc6c0bd7adae56f402b43a1021ff80e5e6c3530b088e358db628dfd464f7a5424471922f951a3cf593cfbbbf390d9d5cfc42769d4b1ab398d47e7d02d7f3d13d09057190366c63c8750e97052f911d4d799e287876cfdbd9864dc12051bfc1ed60b4249a10198e051cfd7692641e934fd532f33d2a1200b831f336bd60aff9dbe1fa15bda0a5fe33f218b4e7752a91dc95ad415bb385d4dd6e2b685a9368eb911333ef6b769646dd9aecdc64e1399b6c41799d44d1afca81a142b058586f19955b1dfc33e07efa4a8df6779b26c002875f048188d2d4546d61c5b9673e26f6715004d6979ca47b3331a1f10ab45289a654ea78b855a7f4f92640ede7a325248d6885091709bb6c002c8bf33418657351a9a80d33c8af4ebd6530b85a25ee06622b1afe32a6382f49e520d897d18d6211e3a9998baa3ea402b511c34f34f62e980e33406af08f4768e1ed2bb66e1ed85f998ba83088eaa7918c6079376eb1ff97986a5a30774546f5a96d57004cae389311aad3b2d347cbc261a9549321b61bc9402cb613b8dea068b21e05160bb0257502a3969317ca731dbb68eff2fc86e5d59bf6ee9513dfd64a826b906819d9014de2f25b51d4d7502c200ba5c76d89002502656e2546ad7b0390f29367056d6eb61913ac6f8912c546061e1090e350cd4029d4af549febe13c743f88933d01c0263b74045ca2f15523f42caadffc52dfaf68d14ca3ae0fbb5d92aeea9d4f1aa816b0bffd99b0f7821e6093ef152723a9cb45f7a082ef8d6bdf72cd33b5aa3c79102f43e2b74199decdd20057d0e227ae4c57945582e2e9653a9b16eeacecdbc5aaedac7e35c35cbd9adede7f83bbf36f8b0453d61416a85a17821885b3757d203fa2560a85c4b4c10 +MD = 176b0c71e213031a29f56009aac7ebec591ba24a8b162d80506b2df8f59e11a2 + +Len = 25856 +Msg = 6d7262476da95db63b322c5193ea05030923c3cbf0f8e8b17bdee2fe227c8dac47bdfa1c1a236f07ba5eaeb79d1d7a7731245848c39e93d5a1b582a97b610da00f7d6e9b06203578182a8f42771dc7a46b2f0da4399d778e4a41452d896769410ddd472ef849b9f29fbf5659eb93f474ff6c6b471a9a9cc2bfaab2f31437a87989030c3cb946025b95458b66bf2707ce3404f9992e400b5a49175261e478d22fca17452d12be189d43e3b7d0bc800a99531f3f033d34cb3f2eb0abe0c0d3f04b19427a68c859049ef1c261ffaa4704bfa4e4c6eb0e21e457b69f47d972f009b4beab3457a6c0cd48e70a115b5123fe276f7c15ba6aad5f8c2b09aeb2c0762554017cfa61739b7b816ce24f4c78bdffb9fc0fb5d9198043c5d31966d5730e4c1229da55eef6911733c972a43ae9bc0f5d92c42caee34398eaf8f4f9a8535f87d680efcc66f84ba74547e3978d6ac936fb7bc304a3909e66e2e0c5ef952712dd884ce3e7324171369f2c5db1adc48c7d7bfd35c41fe738b697d3b2ce02b9ce5711d6de2eb899aac929c0077802bfacebc56142f58ab1ba8ff01be32059cf3cfc5766072a61c89e6acb4d0a76f522d289c2ef111e4bb6cbfad5ff816c013203d4434486629595f6206d198e33ecb7a55e58eecbc7ccbe14fe2ec6b43b62aacce7bdb7845ebdca5af4f76dba365044ce7270a8977974913da3e3b9a314e4fe3f3eae0829a73f2d71ec5191b6078a92f4cdf3639ebaabf6edf1dd20777feff803e0fc809cc48587e41363cdab2e0069c078c7680715d9b7ccf102435704eb5ec1d59165063df59f5a6e1669c1331c90da7ad6fffb0f669a83aa3b696c2c40f9202653ff8e9bf93f7c0750ac1f9f45d1e9db066fa232bb68ba2471dbde7e5691c9da2c985d65f82df2e5fae0eefae2f295a3410223053ee818688ae2d48396ee63f903769a235a326310fd4b55ca5dbc88db6efea71058e4467d70c476c166d7978cbfe26e5e861678913f357d991df7678b75ac55dc7122ec6b09c9edc22f150d994a24019ce6a1d86faae88dee8a6bddb93e5456f0f26cb13b3f3b610e5a716c2b8b847a68e19b2bb225abae520cdf906fb03ed1d441883df4f860f92b4db05d476a4a0147dfcb1b6397c5084c0b1d28b4b5b1ef11c83e399e1e82dea3729d87f7cfbdc0c348fa4e88ea7fc264efeb4e9134f7d82eee584d4298e738fe30ff9342a226dc6385f06c2c052105222012aa0c1656b3b31a9c20e74ed72ec2ee9d2831cbcd80affc751e54d0f3f80f075ae3304117a829b6d45b95289ce8791640efca33fad23016510c0a333cc4b20a8aa1029e81e11729c6a5540e7d8faa0fb08f17c0f5fa6d3b4bdd5516469093926c8e8c15de8305db3ba72de8c14bde41b5b1205b0521efd42d393e6157853b08c650d58f74b97b34fa09279eb1439c1417fdeced746f3c47bdcacbfcb8cb31d2618fe5f28da9029ccd724b1895a06cf09d1a835c880bdefec43506cfb189fd5a05f4c5286f7b217b7a8aa03fb589d63d11b1ed928a1e5d5f0925f7c389e7280679267c1762586139cafa2ef95827636339693275c1cf3fd45640a5be8a0e394087ce12a9b068493e856afd2fc7a29acaddeb5bef77470ec4712e18a9fa26b86ff59490c49fd261f2738116ca4b2104dac7df70e7f2ad51972398586d22562efa8c1ffd5279bf31be5be880b02acc27fcbeeb77447c2a91b434266ef04ac7224b1418613a84564208074743cbaccc8d9689ba7af05be655856c7f611cbaa11cc95526c46409c01b393d4568011b49be12f1f280d2d7082571934c39d8b90ba4dc17f22fb84f2444bac68af53cbd6a41d6be3c92d23ab989e07034fe0b902d43ec2124a91ea0ab46f26abff563dc589d4cb83fb7d8ca200a3acce0b99f883080613c633b7e427ca848f08c6d5ebe3b5ddaa6a4f7ccd1662fe86ff7727be73ce4a43057ecc07ec1f22622986715ab3a06ea52125a9695b2815021222f87f578f61bc5a9c4cc9c9fadf3c68cea70ed7d22e38232e91f5f2d87dbaa09faabfc0d3e2fc201cb8ae4406016a50fff57cb2d382dffacab4d76fec9f1d153dacf42234448f1060ae39ecc93f987caadb28c72d1309127a909244fcffb5fa9d8db10e091cf186188bd116ace033464fc6979737453ff4be93caf45225f1db2fab7ae6fac2a00ba4d0286439a9c7386f464da59a90113c175cc600a4987d0174a4c64f61dc371b76298457f7e2c0dd89e8bf74bf99f933155a37fc6ccd9437fd0807a9e6d013303ce699645031bcb0101c71772ea9648428fa754a034bf3d93933c378e234b0d44995bc1bdafd273aa25fe83f6064efa9d2dc226c107a085fb9b69e5efc70bc823cc580d110db7cd7a131984fed52f71ea36db3f51d0e4e45ef0edcae8e1a82c476e47c466a233a31ad20160b2dea274d0b3d9e57714f222649bb22ea2fa8a0159870f2ce7f8afbb316a9c5f3ba90dcdf7aba6615b5d3407b6a39e5b4499190f00209a8db99691de68e4d4cbc1bed942082629fb2632115afc109b98f747bd1ee53fcf31070442d4674790ea6ba66f9cab2d4afa001cf1e5ddea902ce38bdef5afef965ff7cb2b65d59bb80662e835a287c6f1a810a23c6e023a64602fede45d0735d75eb172b3595be93365ce0c951e45fc064b7f4c5bbe1308017c04f5371e951b7a775e814177a038eb4fd69af6d68cd4712c74a2b49db75a4ec8892c3f0000a868f226803f884d90c70ea21bc09405581a93182db0d3963a338be71964cbf1e4871730f8145409f9afe95b175a1e588feac79374b72759af980f45450f460fd8c02da57128a37d7c8b2729142e3c2c81c7120cff3262a8c1659acc36a63a038bfc7eac71e33d50204311339ca3b829379abaab57874c2a798275a376936f740521506e82adea2beec0efa2362159f8b84c089a0320ad88ded8e8f48d3cad0b4f18ec132bee71b6ece8099d6b10e6410cc344fe8b634d6af94d3ae4010bbc7070ca9ac2f50e9b9824a4a64dc1d928ab3ce9b60278baf476d0cab59d5c66634a701ea2a36675307a9edd0fdac2e2e7df4fa5a6cb518c69576e389f4725b76b4158fb4bdf088bf80361798d6bf694ea854dde5b849e4175b3d87d4109e5659dfe2f4bde9e63b9badc75626628e457fb443f7e1e53e841e0331883e30c23d8bf29fdf5a307fd6540ace27ee23a1494e0c42c6c3760b5f3727e3430cd786778996acbe1e24360f9501cb0b74bc90eb162ae1c90eed490c1f23d376e46743aadf567a0f7e37914dbb3d4e8f3e7fc5b1849aa17d28ad7fe122a172624972822df99cb841fedd29f75317b921c00fc822f5d5f261a5590894fe0b50b3a09bda9764e3c7f414a768b2d91b9b419dcf10b60667650509528b8deddbeed97e25b57dadc629a45408c606d9d3858d2c3027f122b969e5c93c71328e9dbd5256a29b3730be7dc13183da49c1b9d852fff5764ac7568162697932395cbb4cacbeb5045aaa3704e931ab0e121d4934418d71945980c94c397e9b76f8e4df0d471abf895e56ba8f6ae8d0e9e6690c09c759270a73db8c1aa95d05980793537fbfff3472c8d2c34de4abb7e64d216cc952e798314034197d50996a2dcbf4c33485e0b68910baebf0e50ea29bacd3060372bd47b13526ec04bdc81b90dc95a8ac2743b814cc5b9ef8ca9633628bfa4248b55eb7f2d9208e114f4dac69bfe27e4722acbbbe625156c623b6ece36103bbf989205b8e82bd7a5393be8f30cc57aea5e69023de69289df98f052196d29bdda66cb6b4ecf86a3b1c198f566ea881d4390172a30d474dff034af593e5470f21cfee96668670934b0b4f24747bcaed698101d89bb3932dd46405fc966744ea22e67d23c2e3a1d52481a3327bf0b9f6e91e46467079b364c8ac3eaebb8532c94b7a97035c9cf2bc421fc42ddf65ec2add516d30e3b85e7f363c637075d7b709160cda99b61ae9953e46107b1133d815a0dae51c5807cad9c7a502e657c748461d1da67b41d60d0c739526aeb3e30433fe0b2c8d3fe0af00d7669b74c3ec4ceccb1d891ca266c39e8c7d653d2a1c07122f72c1f81dcb6180f0119ba06cbf5b89aa8d00f23a45a3b7d37f5aaaf617471ccf9233e1743088d6ac0691fd94a8fa89260c9c907beb33d5030b757caa9d5ac058fa00ddd5a89b8e65d60ce0ee318087d7ecba6c09cfda9275b25426b9f6a8a9461aa731a4ac0ff4b8007b0ecc01a3f23adde919567c3e6cb604654da6bbb744316495b183a36cb60d064abbd061cb54c930b6fcd478a5c04e623735e3650d0d85785aa1d537185eef682a8c7e0a7d2c0d85929b163dc739995c2884128b2071ccb674972bcfb93bd996690547442fe4625d1a789e4409354172d7cc9686882d71bf6205f9e5c5f95621a49aaea75a1a82279d19df13f24fb116c353f1ffaa8d1ee3b172b211a4f3ef9a5bd116bc823ac765b8f34b3608e572e859deb74f1e0d1ed3c17206cbfcd7f050fd2d31fc4ec1bc97fca97522b393013829b1490d394a1c0030684a8d340222f6072372df064bcc5eb680ff5288e4e6b6a16 +MD = 36423179904261f57bf7405853a319058065857e67a510128baf09a68c30b987 + +Len = 26648 +Msg = 3ac3e86e6d6d65ca203b850ac36fd596e8e01f214bef8e390fbd141c4a9b09cec4c21568fc454fb36c43a6f50e61810b1f77a2b8238a503d29fbb52a50fd85738a4ce0c6a01d7a1c7750f98f91ed9e6bd6ce28879599f5d6c6f26b3992ee969715ca123062dd2c2ec7cb447d53fc76dd964c7936a804c62b6d0afdf116548562eba2734d486dae11e61a506a5c744f8ae6595c6c64b30b65a6ab35fce6199bfb963ecbc65db548ec5ca7e5fcb53f729a4e5d9ad1d28f0cabf93dd9ff0a231d8b9e04e242a69d41e7afd9cadb6543273456c0fb0ef97e1026ef28b2a5885c5639895e806a2d0ee32c6917c9b0746ab58087eb47cbe26961fd0fd488936aaa8d2ee1b36ce6f9ee74e011cba823eb9a66a7684446af93394559e1a92374b8f709912d6b6f5d12273d2e305c30dbd1bd80d18234c06316d40562ee104aee782a138bf6ee5178819f863c4d3229812eba4c255b247c8f7324e93fbd6fc7a9b42bf344c3a3dade4d409732f0b55bbc0b7912cc7d7a43dab0103819d72f604e73e2f1e31cf4d1377ef0b739a24d8e356fe21aee70a0ddecd77f3c17c2b9de85be3755918948002d1d992f79e962899462ddabb1bafc126eef5b3b62087408f59c12667593082d6630224819505c1580ec520e40e5f8aa08018b7e2130c7a847155b6db8c19a218ac27347415ca3faa116298cc179fa6c6114f74d7dc31c842331fab2819c67a442d874771b979f00a0e74a6b5dfc6c21223087f09e48da662ff9d77df9abd77e367c0d1fcc88b8ee25689df33bf8b591f25d23aeab4768141674da16477653760db526867fb7578ed79f0b6e84f43d847aa4b3d0cd4930567eaaecc4958541556f8ca7f55aade2a65f967a225f796cc2620c1f9e2bd599f610a4f3d108610ae3060778b485f1c3ff6455d358f50eaa12519e4f60ee730bba7369d883ca9117e87731810b290b60618fe2ff586d3b5f3eef612b5e3dabee6c4f018423039dcf2c6d0fab426e8423948847e56af088f30ce55d9ce04106abd24e75def8da0e99768eabdca07be3735ff68c6cd6a67ece45db9a882d210ba8b516cccd4c786adf90820cfd6e79b0b78b82b77ee3b6a458b17821d98e06434edc4f0e3b65053c0840f23af7f58f7459e0d3d202db4982fa1765f9754b18340511a2440f8ca8097c4f863eb07ae6b5c02692e4df0486a11a404a2a46ac7e68361ab6753109895ba285e51f1248a5fe542566f6ffa7968822f5cdbd32f8616747c035a98824d1b9e4a9b8e504a6f5d47da5f80f490ba0bf78fc99b92379e8b7a2cbc4e8fe25a8aca985a6986ddbfec1a36def37a57acdcf861d542600753ce2ad030d3b7a5335bb5adf58413730e74c2e46f476fb3a453fb222a70cb1358470d230b8a9e5f8a16e5d8075e849edd9fe86f8afd533942f9766d139741d01e9e778196d3b255a134d1b30a6938b5afb5d134bc75b36d0b36009f4b3652e2193d10687d3f823c1b4e1fcb6934ce5be76f33e07e511ea36fb210351bce8cbdca9b5e64292e8c777acb169dce31a3f6371486df3b0fd380e2c62bbb1fd04dc7b541c7f125313fac32245c8683f06818f15e209d8d129089f71ac9bdb1dc14a46bb8d39bfbe82a2ec3e2682234e16938b8a4b7b7eef9d4332f0850a99c527fb8507907c107a3ca83b2adb00d5b9545d9ff70b2aadb360cf0fd17870b19d3fd8805fadb0ce3049f5f80beca94627c8c81284a87d2dc479967e3d0a36ec4c10c97fec6d3dc187b2706b0ce2e43d4179ba2e5bacdec5ccf37fc75cc5c2127ba2b7c9d5578cb1287e00db52441b84af6f1c39a19fb43f70d3713155307debd1fe88a743f40366bab58f92089ab5e118b2d77c810766615a23560551d3cf3ef72b26615eca0ba7e66004d6546d1a1d244bd13f216e5ef432eb158c773721d59431773f4d630d3e548546f05e43b1007c41f4caa95b03bf9f31960bf0e3d9765119658839476ff1ab2f3f284fa7e451c89c27644257bd8c4affc1cde35f61ead6ead78649fc9b899363d6c54f1e1adaaf64515614e9f421db5c7e1979341ff9caacb47fa60cf7ceb62bf3118532bc61daa25ce946991047f951b536d9e97d6ad668e6bc77ffed87b98e7e521a6a30aff15e2f6200ef79c64ce44e6d2d06e107a1255485e55be37e479560d1364edf8c9b9eb20c6c7498667d1f31069a14b596d4ebe62218aa437906467fd6ff6731bf806ccd2eafafd3ef340a46494a9a60e016c284da377374419eabc4a8a03c8f1249cf680ff428932818ac767d65204aad10b316f66b3fde9eb8cc17913f565f4b9ed06bf8616841dad20da7ec122edbc569c584bedb95e957fcaf61d7053b0a332675be311ef643cd0a35c2dc7a4d7befca01b67ab0fdfd36115e88c31975f9928ac84a02545a03c9672db096c50492f5db6d957211ff8201a0e1769da38c933072d1f5b32b1de79691fc57621adc889d431407ee2724e081503e11adcd063fd48497a88bcac659fb31aaa187a15cc5b0abfbf53519f37f7eca7f433abd6d67486b224cd35addc0c2ef40754f840cb1f5ba2c489010f5c8c0b5acf38e9b487252cd7ac7d402eb84b172c5ba00e874b53619aee64734b0210ebacb09ef9020c8bb53a803d3eb770c9163415ae3f71d37396f89b9a2acaef33181e66ca6c47cd14aa4b3e61b3c09c22969bc3c40d98ea1c765c5a8e8a177a7f2b10406fb5ee4f4c969a35af31e290d432d3f485fb64f59a8a36b9a633a91a317f22ebe3586e09cfe498046a2b96055a556d16687b5e9c9a4d0837959a0865168ee6b7c9e66f92eb3ed539171343503188d7b7e02fee3578394132c13fade18af4ac3287c23b613aefc2425a8b8317d647a447816bac56d0c99259bd9711f5fb2b13eab18e8a0b3b81ff9e98f6cda2c51c4343c0c1118720884c0aef32dd3903ac9e5ebbadb3d7698fedcc56d79bb78a71453b32c2a62ce4000ed4da85581120f3abfd1aa2418c51840d4a18c0659ca2d11aac3bd2e2ee879b3b3604112b24df9add4452fecb606fe8de965323c3e88ac6440550944012a7e451acf068beda9c0ca2d30925ba1a3138f24faa843f11cedb41d52569565fb165f2a823fe9ba8e2b38d1781c9860021feb8c463642faecb5aa4aa0ed49e1c308a9ec613453a16404a0c80712cc7b8dea4c2a322361e262cfeece291687feeb1dca67552df22b9311a91bc3bf1e7aaa3b5804a6b9ca2fe40227b1d3187742d91d6ba34471eddf831bfcd1966ab7e6c3dbb7258b3ea26cdc15fdfc883d4237f6d033a918496d469ce940f2675abe473f931292c7fb141eb1d11ab62fcb1065aafdcb80b7fd9ae647451e871dd85c2386291154443845cfcbfe23e7b00b08535e6eda300bd59b4aeaf53e97a22cb90400655b74e83d60069264c397f345538978e909c2fa1899f7efc2472add9efc71151199fa9d518b4c6ecaa0cfdfc1188f6237003d6e10bb77bc74e248b6764ef32df372ec4abdee28c7f962965ec680ee822066a94e032a50bbd3b6fa15fbd611b0d58f54d7cab32205bab2f5589db32d426be30f823a0d0d52a66c47e276bd53067d97392bbdffc290d338f3b38fd8d409e22176f1fd8d33ebb7ab38052f2a4197b333a430e1fd91d00c9b9858e2186b3e4bc5e68594d24cedcc1cd4676e4664cb410b9ccd7dd2162e2f83ec2fde9a7b4b6f7a67254603e0c0ae6623ee7b38430beec629ead8a9d910029af820cd878b9716e602b95c4975cc25322d839d2966bd810d53703ba863df4f85c314f506248a07b1be2a1ecb9578f928fb0f1e41564bc3872345eef73b04dcef55f1a040cd8c0c84a45ed4b2c72ef1ef947844a79a1b7cdda05239bfe9e5717eb7a1145c0e05eb07ba3ec6259456d63000a85884ba9773b6d37f6428f6ecd8daf00a99836f5d6de10ab23c4d825670924885a1ff3f2572bbc2b5b659e980d8ac081679dd79fc5aba9ca37d511b9787be73f96941b02f3f9477da787b4a08389c08acfa91b34b7a3c76f7d25ae781e35b89ebf672951ca3e8fad7f3b5a2eec151f7b366c8a6b0950da29883906d7d4b12934292b87754665f51956c3078993b74dd1503a9d89472d5286cd81a35f1898b97e8833edc3f50a286fb2e1354716eacc3b91a5dd360da3d0e5d1821c746636da0c4112a4f452959a1f08087bede21a2b087f20b1f7a95ec5e528dccace5a261b3be86a555ceb82ca85ea9b43f481efeac67d5dc424c6b8c20327d446b340e0edabe28d67842c6c1a52cf2c15e172b67bf4109f8c63c24c25ae731b08c9d6e1d1cac41e63f091bc39f42a3d7a4b31185f2fdd78633b487381658f13997878b35827017fc328b7fd89f88041d988597014c8387ae0f1b5d965b6d0507155a2eff12f3f241da30baa8ace65cbcc2f38783d5bb619ae4d96e83320eb4418e7d1d22d61b1cddbe6193dcce44f5dbaa66a8b2968ead6f395682a8a1234710885a2147d6d1dcf76784d41c0d8a15a3d947c13796e2b25897f961adb394069b8d58011619fe79b75b03430f72a0053cd6fc9bb9dea1b97b852cd2396d49390b24df8736a7883c462444a95e046e0dcd29effee174b10a008b579ff4d92b2887d657795088596dcc4ab1cdb1ccdc747e5b86b15762fced1031e08e88fe201b382928a00bc557547053b079aed0d38479f32b7ec2b068aad30030689ae4115945a7bbc410646c385bc9ab73 +MD = 54290349fbb1e8327a65b871f3fc2c6d3975775e48dd1d7b2c368142bcfc8c27 + +Len = 27440 +Msg = 9a9667955c84473adee8980b59ea750bd6414a4541f689b2c06a9e5c439a24c45ba259814f80cf2b6d1b65779e8476a33d7b50152935e83f195cccc5305858e2d2cd2d08b564dfc63bcfeeefff07f8f9add82ca318a002da865429de4ec3c1a1a61fcb70b6b9ded4f10c1bbba4fd63d3cf61c73735c03f4daf589feec565c8c87fa01b017906341d36dad422b6ed1efa4b1d0718a81c085f3b73153fbdc6d3210759060527d34869b342016d5d609336c815d5909a3cc3d7d3aa74175d6c4c72e35172c2e7a984800f4b8ae5c0dd294eee4f1ae533a9da7e1e07a2bfcde19984be904981e20e4f2af3fe57cf08ec480c67d5bc609aeab31cc591887f36ad241f3e1f718a3f8d112e076151765c155836d8afa549f887b8796f500e9ec056530a0b05d42527ab3355f27f5e21e5e1c195ece3bbe874094f5cc54d1d669266900fce4a589ac2f21b675d5d6717cbd7ecf1497be88437f7e28e6e8f9b1dd56542f42ff7e73037e9322cef0555a135803f12977e126768d9d8d8131e720cb0d9d082d5136831af18e06b517e0e074b6223bf7ff523d7303899005c03887b4c4ca48169a6c2e351088eee2ad07c91370701c2a8e7021db79a8dcef045c7b2d04525b992b9df8f4640a27b230486871ef73fe1bc5c9781248a1c0c78ec15f8654dbbf2f952a67cb54886dbe42013302bb847e5605dca4a9f8dae809b015c9733ebcef3467cfff4c7a9a0d6142f0dd583d47f953ef083c2522dabf3028b83d561a7c685203cd23da4ea5a335b365bbe51d351bbfe20aa2f63f17b2e559272fb18090c702f9c07a073931bbc633fe533bb3b241d48f227dafa6186f63b1f11507f9a067c1ca387655d2d4a37d151937ce9965f85c270e20b400634165c38481ebfe11d708f5938d4893f516d50754de0046b6cb917a1c40a5c67ee5461e8ffabff66b9162fc703351f51972686b2fba83443b281ed8db31e770d1a7af2341e4168b24334a5f4d0cf49eb84291b10851da0a599a7ed3d9890b97e224eb6268d26224c219398e988eb2d968040b897d384711989f1beb85ca849446c9956c534a254bcbdfbb1ac11d1f3d9f3310550cd28ce27ea290806e5ae50e762227919fbff268b7e34984755c9c43d45c5a9425c50e058241575301deaf5ed6ab3c82bcb83c140cb05f4c13b1bc849dec44d756643cf339f7eab3deba461e0ee12eb028a784d630e376e23aa0e268527f698f2d44ac241c42b52353623bb47550889a62224f17dae92ad748ceb0779862333c08fade108f9e61321e8b02cab075d4a2079d0d61513de5abcc8fa92ae6412c5e77eb45512a7759608e893dc936cd9d87779c324b3a5e31c044683f0ab2a8cf77088a746e737a182f21e14f287ec44d8b3094702dfcc699c53eece48f83e59716297cddb0d0f327fe7727b970fef65f5dd10a29822f03781b1a823c31e0a41dac5926f3d0e99f037f0cc0ff2b4dd05d5fc781d0f03791674265cc989a4f40cdaa260d594723ca34f1414192cfd1eec201828008f0bcfce1dbbf209c11266811b00eb4707bf5f12725c32e16c731ae27f3a08933fc05a272377522b93f1c76942e71a0dbe7f6c0646ce0eafdb9c39af9968001e48ac82e92f63647728c77f8cfa5fd56ee239ca47737591cba103e41a18acf8e8d257b0dbe8851134a81ff6b2e97104b39b76e19da256a17ce52d81eda10ed83a04484ac6f7e73fac3b7e93a3b724902510bd19d07b7b270ccfa47aeedf95885c0607ba720391d725076ec0260d815f096a96daa7a5eb0cc188ef35e67749f096011c66a7b589c2e83776e505938e5aaad0898cebc9ae36e438961c9c1432f9301d10b82db5d9e63df11f6806f055694f6b1f97648ecd8fbc062195da5c598971816916cbaa892d6b5defb2f2ccde753f63df63da9d4ffe931b190a66f7c589a256b2ea4b3c9f7ebca5702b90d12f64c3df5258159d3c6aaf9f06e2098e7ee20bc3709b731425c076ee2a3baaa552202307fedfdc379cbd59b96e858bc98d7af4f12d910cda22dde263a44b06f04f8fa7046d5ef91378ded991db5bb44ff93ba5077034dd369fbc482966c16e5b2c9b97fe273f32d8d7b57750d4cc4cc9ca0c652ec2ecb0cea345f06bf807a78df32b3a1cb2e8502ec22a7b1ee2401ade09d47e8eaa214b4d3660214fe3837c2fac26d98798c31bbf40252c228b1fe737bd7d364eb03b775960f525fdae9fb4e95d76bc6761365a30598ed4855ad17b7beeeed6975ca2fc9a2aec429ee1c2166210022be393abd72c154db96ed4be9e53a40fa59037bea2ba9b2dc15a04536c43ccb26e23b88958597d4a2306834e1867e8c8ed62c8f8315ebca1ea58a0bc7c339a6ecc505738a65f986e5c75eeeab05ec101f43497b67030932e04c13c640fdb811e8f92f92089e76f9fabe29df830e138a2042f2d6128d82bbd59bc61b3ece389aafd1025a9c89908c6577519e25e975493637a116221fe89372f729611ddf2bafa5ff3633b2d1c6dcca958e90e02291dbc593fcb1f2349b782cf0b63e6a8b01df7fc623b3e7e19a697e9b095e6e63e9b0630a3e402f661bc8881ae509a16c7b9871e86361a8437b9115fa8a6d0d17fd7572ed0e37261efa02f8c83e695efdc96930b87db37071fb0215265a3368a93d8999dee50d72e9b6b613ab3ac40fb9abd040c8cb3fdcf7892ae0c12147fda24a6b2c324b498230c2605d1662b0101a635c069bd45d5a3eb68a2d3d5811389d74a8ce99b961f09ebd9039ac3e941cbab06b16a4319254c2039e4f0d6735a5f56cb0d567b7ed3a7df8a43ddf370691f4f39be5746b75693be0d5cab3e72bc2449311f54ebf41cc79143ace21e48dfc63ad5ce77eda8d13e6eedf24b3504a19f5785a9291381622fa80b28f06af70d8815e2cb136173fd15d7df8e1ae2b3719929ce921e1cac0da8cdeb9f500207592c88699c73caa041e2a2ee185e6e0694da6714c47b2efe85faa8e9f74b0c002d7c3a7029df4fb7076b761f78600185722ab85f268870fe33ede0101927b168f03ed4025a9f1841b679fc7c9668c1b97351c4b8a08d0b347d491e65ed2c18c90a3bfd2417fa4ec6b5d4db0c5abdd929001634261ad12728ccd509f25ba46aaae33b5ee0483a19cc6e44bcd7ada96f5e7f42b0b27c9dea63895a4abe4cd5ce94e3069f3dd5a5a0dd489147e67572acde5a9ddf63ae397f6c1aa088d1a6086d0e72636744a6840c80ab8223409c61b733f7ef6a4199ed0ccbe96f6c3453866ea0f81b5efba31e843effe1f9ed08beb9e4c000f8542301ba095c8f9eee3994fad2ddf62d6cb5bd319dad7470f6a3d1d97a1b9832a535bcb0adddc7c507427d392d89bc7c9fc2a73b271b04316253e1407c727ec03bb867173fd3e18988558752386435f29ab325c964b258e339023815722c7b491e924a1647a6a3947859fc6e7bd7293867717f03dbda3a2f84971c81e5b1577557adadd64ebdd68bdf3822b47f485ff60ee3fd1214fc70bd4afad6ac5c69daeeedefd87edb824219c5d9424dcb20a0d395f0e71e977ec3349313aebd5fbccb59e8421237775caee43324a360e8c8b4770682844eedcafb3d67caebdc7612f461518da529a9b3e39430018f165ca6638b68801dcb9d46e07fcf07d7332ad31bac2fb8d77bf9f0aad2c5584c97b12475b7c4d1fabd2f5c39a3d2b2b8e7026709e28aaaf156ef79c946f911230a6ea9b1a2215f634b2b73d05079b3d723873686ac6a4d3ae114b70897d4145c971c9ce0f58711a09d1af26b2fcbf27c0d3fa95ab2d888fc45ef12316d5e493f684267ca57ffcff8dc8443d3e7d057efcdb4264c9bdb437da909f30a72a09914a2687137718f81b530efcdd02190cb778c6e16250f7c660736e8c05d4ca1ea22701722efeb420f1dc0e5f82a8514345d72f4e2adb8c2dae01316e3f0a36926b2f8d5e2b96c1d6279b5ed2ca8ba637ceaa6cdf0ac3bb585506a1bc28b2001330c622d195f9c2a60103690d113698589635184aaea435d50a1607dc7f86a70fb78d7a42fa72470f22c6c544f33398345139a9e772e76c323191fc658fe2abe643e7fc48c5aacf701137fc40fd0d3649641aaa5be427ceee702cf7ddf6408f458a581149940dbc8730e966577b2de306634a821e9ecfee682a2972bc3f3ab19bef6051cbc205aea3265d9c1f0a003ef9c35bd985ff5a4b4de42a0576c73bc357d7a35655ec3d0652460715fe364eaaa208c11948825155fe229128942ace2517f763776e8f2e642334786c7b6c43a69da81cb9ccc43faef75a1144aad65c673ab3533d7c073448846613f82d3899c32b25c14399319fa6d81f0ce20156810a6e9fe5211500e913f44f7c517a07bb70f906413f1456dbee0ed5f6996e27b67ef2118bbabff8d766f1751400e876134075ce2f14f4a08ed50a1360d317c6773583bcc982d34b69a21a6b7d7f0ee04ba22fe1ed5d80ab230c584bde17b4bf3dde820620e205953a65dd971b2433f2df2695e60e816ee322f48803c0efbb8e94da7b622470bd52a412998c6fa92e1a283e364f051905c5291e07cfabb39290f6a9ee6536b761004148fcb00d7623c2c1799f91539cebdd8ff96614011be072fddd4993fa1e972a8c6965a65703db89253910319c8597a8d207115563811bb0f4d51b52c12ed63e000462d3eeeaabd9ee1d56b4225b8f9399d79818457baab78631e2363e6094b726aa82dd27832b316696d1ad97973a4a41db68d1297424131c742cc2c44c69227abc3406b375b02c3925ff725eb13e295493122471f30e40420c597ce54aba0c76ca04f4f53b0126d05b5e970a41f1ad6c9f1266c180cfbb717b06b934040 +MD = 683712362407cefd2968ce6373cbd86c1a6170493c84025be740129120d327bc + +Len = 28232 +Msg = 92983501a4d7583a5201830266c37c908640b0351461314b526cfb68cad97bd7ed615248fa5756c6213bd9eae98d2f4ecfdf6a452f2e68c9687210b53c74d83575e08a7ace9b49b21056cf377c64f80669c884742e93181c426d871ca2715081733e68ffe94a39e6677aea51e8f0e1a09d258629d7374a2b2884e903c577eba32fa2713f130d2e496eceb4a0f4daf105b31bf9cef4c306de62dfbcd46e2fb283f1352fa3138c31c56d7bb48d6aca301bf3d464ca4bde521d37a78bf66340ac09011e2991b36e4941aba8727e1067a7cba4784f85a53138d0f104dbd16d54e21ea686e772b95c7fa6717e77dcb05a5dfe102e4267c963bfdfd61d36cd53105aa82a95f2afeefddada07254a10104a5a9a7d1fc6d8811def322f1b2352df1e1e90d372d1ae1afa62c6b5c47380f9e0a788347362409307d1b243252bc8d72636bfea460cd905fa1f52c3847b9632c44bb17d519f07c8c86c455c64d49704cfa81cb6382c9776a61a67788ce9b9859d4efc9fe10495e809c9d4c000a9272ec27e8e8171b84f37a65aeb1d054550b814b950e44d1952bb71ee48b8202fe11ca7c0ff9119386b0ea1e7c8fa1618c594d0939792ba66a708a9e5878cecf02b9825745630573452c43fcae457e8e87fe17ae4b8f25274fa9958b67b848d736e68e4a47ba453356c21290a297ca240e667b9b59b4c3dcab43427670ae82b4013558d57553536c221ec07af7db06da562ed360d28e8a3f03ea2be021effede08027c896ce2d2864d9ef80c2ca3d71a15b3d98f4470dab6ffeabc48e9e12fcda1fa63c68cdd250a2fcf03d49f769d5bb391d8872e0057dce5e16e214726980b6579a92d53b6ed704f2b8e64fec7dc27c6456ae90db164295c5adbf9b824ca0fd8fca71e5fe47e412230f22d991c05f6a45b0b1552089224d9b36042bb603843631ff82a1ffa5a055f8bc99f1ce7cd50f42f23aca97a6447d477a58ccf6d555e9a4016d1026d23354d789f49e8bf74bf3c4e6f0f529b4d1ad334164872a0c3b9e5098d93a5c15c497293cdbe9b07bea9c34527ce0bcfdf065c653cf633aee5dde9d8c6e2887b57ba7579ef5d8254ed994f8ff859339c7ca2e687742690ec4e430f3a4d5e190fb810bc777eb76d2b841637ab5b414895b878f817765a08ed5f71dbaa9b66d602ffe4be38f64c89f034a8f203bb16d92014e117919df10a36bbf2c5a64b8d5de9919f012ad09d875751ba2545b23a63e00473ab92659c133cc64e53b9a8420f180fb81bb9b82ad3a58dd247ddbb2c574a29b95a7657abc27410dd0c516c256832ecc86481f764fd8f2b79b028407d41c2d72a7aca0eb086812e276619f19807be9b38820028ec7358cd2914d1ecada1deaf3fa319d53addd870c5e75fc31a5c0fad80eab0b711c3b6d568dc571a3e0612147159c255bb46de8b3106bf6b3cd3ca964a05104c756d0df6a18d24438edcf1a95805600ab24027cfe15a9554700d63d7fc67ab33a7ede2836b9dc6134094f1c06c4c8f6ea05838c16f499e19447760050098ee2709a4c91e3f84b8e3d3cc970c26859cfc05fd7602335a16143a9043800f0f55711b50262995d8894fb8f255ff0f47052d73be8404c612b9ffb2f692eb60417dbc6d4e8e37f71f93b18094b2fb9f07749d4a09d74b9ff9e6165e08b2a9bcb5d353701e65cbebb074a39b3242844e5d57a6297de439397627029c45373d7cf2d2f0b43e4147dc31a8b08939694ba5bf2ad272793f702b1df94eee3a9539198f08feaa3ca54e5129bc42db48ab942d836accb58a4d62dd67d945c467610f2ac0f1e7e2780641e2ff0be501be9e105e6093ef732fa293d8da43a1cf4a0f32195f0a46cd9ee8c4fa2834118d299522a0cd32a53be7b37595fbc4cd6f5114446dbfde95fc1fd14a1f4bb152de08454dad3fc398603104aaad32d933152af4b8b049db4fde693433bacff01384d90313dc1ec333909a2a858715fd7d6126450169a37ceee5099624552b9cee121a72f7a600be013d9179a8ac1bae06d3d179a0f253500db07f8b9e96f5044cf65b098ba38c207bd7a5968684ca7759ddcb0729f2bfe106c1496904d8a2c2bab2193b224cf7772def44e5a1b998c600ef51620ee36fac6487e5d2f992bb54b1c5b38c6e1af93e71f50e0b8cb30d267699333ec23cd91ec184d34ddf6da536ccb1d871b18607f2f2895f6c99f9ae25356bbee1d66792b48838902e48c206e555f6e68fbf268a212a0cb77d6c05e22eb7c772ffde1c030a4323bb18a82846ecf8157c3ac975163572ffb4d275604fcf984ceded2b92d08c6cc6b2818008fbba2d9de80772ea32cc87e2c5f048815d74315c9e4e519451b76fa1f4fd530c7bd960e0e87a4dfe4642b356695b57e181b93d86e277e2792d27e64610e0b38b6dc72c9ecc07bd49e7249fcb1d78161952faf75c790e50b9b93a5b1384d0040e48100b18213443258c0ea79160db259147d5f93dc0761eee8c7b28aadf4fe71d812066fd76946249bb5d5579c1f8e8d1e6c6ddab3753bf802d76e96c6eb4bf21af94daaf3a8cad0eeb9d43c4cf55e263a649ff456c0bc507029a17e8d1a2fec329c9d0bdfba185ed934add12c78694bf1cdbf86cdd2291fba2712e90a6af487a965be3aa28578f7e48e29bd478ef925ca10933b1e91cd8c69388b8044c1e0ea05bb77de44f332c3983010a8a22054dc4d93e4b853e7efc004c3d2eb43093d3ed105919fceeb8de97c802a3c4717c39702bf79a874bbd6e21332b1d10f2851aa92add5274754d29119e73f1e3d598e7e72fc1cb187f4cb1b1eeceddab1086557d21a081bb7184ae5f5ce16f98cd0fdba24b3937b967c1693ae5951af308fc06d18b4f526261e3a0a9a9b78733d625873a04aa7afa83aff714ae1a4f894a7ac13ede363ee9d4eed2b90b82d3456f9e6d06f2b20f5c616cede7becad5ce5376f71d80f191b2390aa6e5d8bfde5e27cf0fa18bcc6f4f7f8ca01c8e235842c2652b061a0e056c1ccb8fb8b7eb02ee6d3be192367615543c83c03b92b0418715e9df810fe80477eea60fba2f70db66ce698541993b8bfb26e6c0bd62fe2bfbac698706e91c19562d2ea962860dd267b9dc6d381a794db4dd3a242a857972111468b4102c26be8756d9ef3a720e8251ce08fbfe30dbd511bdd26cfb609eae77dc6bd9254f745eac0a1c33ba69ff65c56973d40c72cfbc824753fdb88aea5b9072e778ced9918414a57a395ae45cf7331aa167db66c16e97184378ea7af8e3eb56601575411ac951b78842a467a3a11b501639f3835d55b09f0540f9a726e1f9157a31a11c6c98f3ceaaf22f6a601deeb846bcdd3ef01c6f5a3df87e9610c04a3e7a5fead1f37d6b4976ca44631ea84da1c7830110262d43b831f1d1de33293f2ff4e2aaf86bd138b6503d8bf83bea88aafd0f079d7c02be57a5efabd5fa6778688e7c69f6225eeca3ebbe7e80444f50426bc3493d4e373fa6fe245513f31566768b8fc061a350e7809ddf9491d46104f6a8424e86293558349f52762ea9bd99e8909f26b18b61c9daeb1356b348aa4736270e9ffea977887f2ddc877c8aca731d122d056c36fbf42147fc4d5b3da5779f5c8ab60d2b8860e51e24f18412c692b2a4abf4f832aa06d258fce0f00fcd1680dd3919483be24214e4ee5cdbde2c6917bcbe7dfc0ad6729c8287aa285b8bb4891dac4226671fcc6d167b11fa497676daceb6f8de2c1bb7be594f015a8d8bd2268256c92e298b607c277dc955e13f3c6a4f37fe2512e446d651959f0d3227efd7cfcaf6d5efdfaec09c48db8531e13a54d2b416576bcab062e00ddbc6d60a7e1b4a7b83a44666e7c8f97ed0eec806f118edadb9eb733984e2991a300de58dfd6f86dad81fb9cbdbf3a3724218f00ae124f4975157d5ab24e3e13d4448dd3cfe53098b7cbeb678dbdf3ee5979a56878b078c1385331faa20d56d09711e4981f15446efd9e7c8e877fa302b49c977e77f4f2884bdf39db0f93570e15ed4a71766f1d38a88516db520c30bc5e14cb0b50e5a3e6d741ffc5a2e92b16756327247cf9a13ddf052114966c84647f69abd6ae8c74250402e9800316b830e0f8e47adabdb9c7cba80502fda885423e219ea937ef4d8cf9a961d3d922e8a37e36e73b38c34e1c93f52a6d2dc71d9dc4c60b4a93181762dfbece88cd16a1b976a4992f3d1146856174f91dced133bf39df5c826b0fb8f0ddc9986586f9cdb8f1ca621d92b18b4a5aaed8d989cfaeeec4f5f81967da1a7e1c532633add353e91631abcfdfab03b3a82a306a06c878738d8f47d72e832353c4e3e2b9e9ad1b940e60da0bcb05980873706a99ecc47896bd35b1846912bdb9fc0233c1e38e0d0100df599afec93190e209ec2ce3cb969e7c709ee7bf8dcff6ec378111427e117715378e4421ffb5941e7c20eb95e6bad5f1c676c9d9fe4153bd0a3573af850f4075efe3d0dcad0e5c4f516da0a71ccc8145c1a1f25e6cfb189703b5acd2acefa2478fbe08d6dd23309b113a11c476b4eb9fe9872af7e0e48da1ab6a8752fa99e6b4a089b2b896dc582d43f10792fa5a5b28c591394c61e6fa0489bccbd878f553e3a9ab9729e1211b2b6ff94ab9b2a71808dd25e604f7e8a6e726143f0b2cec33fc328c7fd2c5dac3be1ebaa2e2a6816c66b9adfac8aad3da7308d8ad942064cc29c394325a4aef960dd69cd7b5ddd29d6ae28f3e3f838dded0b972db1a5c466890e52b776b7848dd412207b0d95f80f43edf35771289fffa25c1489146e67b4d591fb917aa58cedf818763f7f73474b907380570e8c511769aa6c499c0c8eac3adfaa6dbc1f167e6f68f1872b6659734f07669f06a3dac9959f24cba2f0a7a14b4fd5a88584bfc38c7c18eeabff8d0ad1e20c8be40fbb6ac872c4abb3bb2158695b03ee9166f761e1da52d26b9f8066bbcbe89a3110719f74fdd25658dcaa263799bb8c5a464bbe020c45ef04d6a23b7f0d816678567bbc2 +MD = 76e3a0221b6d29a43a0c2929baaf46ab00b85571d59ef2b3f0facb315621f4ec + +Len = 29024 +Msg = 2e523e9d8a5532127ec63b220838f11b0f8a09e9a317c1e4872d7fececc1b4b88060076ba769b068087a21684c28ecca22f3e12a8778763444e96dbab8bbb005d79e806973b2ce1cbbf8e94901075a5fc0000cafddc3b1362d6360b738d8830e3cf4f0c0759956d69c28dbecae3c0385ee99d4a12d5f38924984a20bf480f47ab64aa19735840e3db5f23f7adb31afe2b6a67f2800b4d3efa0327add741ccdf14e88d9173cdcc0fa0d3f5c1a104d261e1f0f566bdc2a4cf53b562f554112d41d0b97e168110a32b5acf57bf5d6f82fe231bca1934c296a4d21d90a9de2ccd2a3f55d01b13d742d159bfee432b49a94d6f595a8c7d519f49f5aa153dadfb08e2e14c3801b468478c2e140dffa339b1ba17283b2300162b392ef985237c128d26471b1a8cdb6a1dd6586a5b475d9648debb16c09f5576c6fcfe7a54eda0e9b64ed1310bfef143222a69314aaca315bb15eb83af3405fa0effe4aaf91eb51710d7202c60eabe9a1102c0f740a22c0e951a091d3b936a264fdc621a061930f11959b47bddd27bc556fa002af1ca4107633594421a301a7215fcf735f07f9d2e5c40fe9db748b15b607a974ac2879a86b2032d70af8c9f640dec248d4cb4721546277f00a1a007c2c9ff06e5376c8102ee0d2547802b518274247a8e7f4a285c6367a653118ae7a1f011cf78c4ebad1293be3c25207ee944053059c80cc3485a309c14f38b6bc96f7f3d6183ff77772c3f90a2a80509cf2f2d9a52b879925a954a3f3b6063c52591c3ec6d854ba267b63e1f193e925e5bba49bce5ee4a49d793fccb9a285f29a4af7aa933fb3dfef7473bd400577cdf476c062293c7f35c37ecd4cbb1c9c20b9f1eefee65545aefbe65a539f891192efabadf65ecd4093bf3f66eaa02b330ddad66a046623f06e7259806bb4259fbaffe3d31f14191008ba44736f11d833022382d482bcb09d697c534dcf2ae30a8e4ba49aa5f329d5dadc165aa4b52a8247bc7c92418f0435e53f5e2946a7cb3856fc796a4fa50479524c3c854e35290924ce4c0e0988289e2be6017c97d3e4125a39e7abe6cfb2e2b8333e5a3838ddb0e1817baea14f23c28397c5ae8b583680e12b78c5331c3cfa54b8a54329674f60c5fc90dcd38bfd87347a3027eadbc96b35f9b320fb31a9a76d04f8a7e86a86ff196813ff65e4bfd788b9cc4f7c07a6b99ccc202409b901d34d3ebfee3ee88a7625ec8c7e20047099c579218f0881d4545fcc483a245a4c653a8f837ff38964ae31b184c3cc9018b534e5b54d58f45b22c620b2c813bc93457d1fcac4cff61b8e85df83353133bf121d2213f23206440d18f1e6389f88de5b5e151f249ad7b7fd699d0f3c16936e9ac85bc0e75f5f96fc9f666df09066338f249907071bd341e52413b24045582d347cb64593a7a859d6a1a8ce5aaefd9cc919d50cd51b93c02dff6af3a9842b02c8835b2b5dd189958567de91dcc0f620f183eeb5f762bf3cbd42ca5ae09cb4f73f2373faafa7a953f039313fe090f8c7efab0f8ad3b8febd7d355a704b559a137fa52638f0efb19bff5ec95fcde4ac9aabd95e14d2e5f84c551f43bc5376855e71519b6f877248739a20cd790b85baa00d5503da5cb056f02d4aacc760c91fe1fd6efb26def817e5a9c56616023bc9e2fe662765dae2c0b2edfcbe17db140da30c466de65c49c6f81496bbbd1acd81666455f23bb243dd987d7ea1362a20faac841f1a36692cfcb4c3dbf5f6bb058c36296b8be64e9b56adc5187cacb7b58c054f422a9e6d6a61229fdc3b494da98f5a33ed1bee14b2d2f6ad1177ffe99a6bb553f7c4a6d0cb9e498ee0b63f388235d86c26c9d96e50fa7d1eb3bcb9279940c47a8510d7fb175b3279318d5fe45823baba5dbe31c33c7649fe447061db78b33baa3637b854163fe34915e931b9f3040807d9217d7b3fed62370dbe806c006b21cd5061d24490f366e4d5f23e201a7ec83ae31b46fe2108d1af56cc9d42f9117eca1cb5ab344c1fc334b9cf0d7f9739043bc3d413b3aa6e9d5067c240c52b4c5b89e25ccd8a136a002008a9273f30dec3f2c1736c04a1c7ce0087c9f25d5ec5bff2ea7ec0b0ad7c278f0ca712c9ae150e472521d958d0bd6da9ff0939725924b2ed7b410a0ce2fe3f6b0bf25884d885ec223605e318fdf6803218a9a06ce5103c62ded035087a98519b4eb180d778d7656b3d4811aaf11a128317d1acb3ca3166395c51c90a3cf164071d0d132c54b3810a8211ec7774d2288447abe7afd030375a3bed4c7cf1b28097c02e98ea36bf49e74d89fbe74ec6cc1def5cd8c8beb5b8adc3cb48c56182ad337e3b9778e4a6c4eae6d7c663469d0536560f07675e67ef1b3e14444d540af4c3a05d9940260efafc9425d55125ffdcb7c5eafdf276efe68af2efc97c92f25c2f6ebb25a9c6a0f403a198b11ab3965788841541d3cff4a5e328855ebae2e1ee5f307ec31b8a03b9e8535ae127b8078191dbb95b70311f320f28fd8b6f0e7fb13b2ecdfbfe3cdf5194f393eddffcfd5fbb12fed433641897f53a80d803dc75adacb0d156bba2dec5eec86a5ea9461efbec700b33832f86dc7ca636cede156bea98fdb15bb885a61cdd1c08baef60125c0d3e0900c75b12078eb346f468810871e95e96935eacdf5e4b35958c1810828a07c51fc469b0632212abd9d20ae7f549851ba88415e132941f5c38598c1f168ec04a7605d0f62234efd416f12a10da7a567c0eb846ea46c541d919abb255756f2218354e64f5f6460f7726d832c55d0d42c8f1b75790c5f998f46109f4794835147685248d75885f59db300f88cc290933497807b29b54380ef538fcb95536e87dab8e11b33d7f87b54a5d1f96ede4761045cc32bdd39d8b8a23c50b6aafe8914700779c3e1684c60b0ad58fc2f2375cc10514c0e20048f9f5c831be6d50053859bd694e96c83f254364bfe776a1c9c42dd1793788e9fd8b352aa39d2b0036e39b2a8bad231b57ab46a043b019c443b53ef1232116576348339144310c86239cf58e06434ed77561fa068b7113214c38dbac3905f6122238d7473c0179ac736a4f3301987dc3404d48debcb2cb818d54ec4be46c8fe2e3630a93b295d838cf56915fa53219a86179186f01fcababad115a164bdd498f4ed2b2bcce7692f3de66a35b1a9b8b4e7fed530280d51a6955770b5597e08ce00a8cb80bba2b10a549a46d6f875b3a7d43b0dfdf61c880812d8fe850effdc09ec09905c89b3cb916b718d8e214f88dfd54c9a64ecd5a46bcdc60d94f7cbd4d911702803b9c32f40dd1c9cafeebfcee955c438f97ec15d2e20bf2c79965a79c81b8ce10abe2942b543fbf2c0931efc40f00238101e5808dbb614e9877d34413364a059f6298eac5b1a802e74c11577631ea7366d5e123df0e877b3631ee1a1b7776b014a6e4bd2aedb49be10fb1be6ec4c23b255c078731a52481870fddb31d0ee4d556c0ee93c1d00c91049a39ab138f2f81a6db8033e946e1697558c9977fc13b7f4ff8dff7f42158ec3734d2a7cd5cda4fd19d73af71ba663ae756d94cab5923b3e695df6e2aaa3fb46126a43904f16bac8ee909842fc95afcc44f365c079e467b03e11582cc316af26cb9d6e9201789a1c50669398d3a66b8f68c074ffd5749de8e22aaba407f81ae3f32903f8996dc345e3dbd56f1d73175645575abf34ed7e570a1c69eef5c2beec2dcfcc4a8360d6f41d62a64c566643bf6f2a8fa534996968fa68fb7418f10bcddfe3fffe3bfc45a5619daea70b0a61294aac7c384112efbd478308c9fe2d91f78df8478a3f8a8fc864df5705a7da00326c6fb8fee6e481c2761cfa66f1b2e207bc8f1b851aa625db7bca27eeb95f915948e6be5f9278cff71a7958b1a03b6c5ce01ae46539d9a85d2ac0a9d8bbf5a51c64a404d0d06a1ae9893a9c509621a185ad2e4aa1399f77dc0665554a2c56bbda542a14f92d13031866d33dca30002210583bb6df766214c6732aa2c986dd36417beb774f051e08e217d5d564fa414e7b85b5a1669cbc1fab15731acd5803b4b0505a9438f4e5acf530a4dbd7718fb725ca3ea2dd0927f90851f145cc1c54a7c5860a045d89045fc035e2b9882225dcad7a4923b94810215cad078c4c506a9fef617c40031de4a1b19bf2070d88be3f813a37bc71c61f3916ab3876d4709ffd9c9723cfe030111367c7654cce11a3403f6ebcc59d2f9f90c4c1069deb197f515b8b831c7b7c2415416cbee340499f9f36ac3ae791d13bd8f582f469f697833bbaa33cae1b3e7827ece051630acced9d0567249b06575e62176574539d97460d3892930d661387ebb8c6ef6493e837da3a141c48513e81dcb8ed28e33675324633ce38a2e287fda13384cb306237e8c74357848818d340a9488e64a157ddc2975aba9016f6f82418ebbe878f0c388af49f95ffc2a3c2154844cdca16882d81410bec3bd23a00a5935fb8a6b8d86688e2cd53d090b8877a4a3c3fcbab2de10903d5d78e5d122dfca0fe17ab468d5e8d024b15c96a9dafda1fad38dbe7ef84943037011a2025dc93d2455ff7c0616ce1d397502cc8e987cf49065d9d4513a4ed56adfd61b3db9905a7d4062ebf1b3e31f740a78d3412cbd446d622625b50be6ef7a920f790a9efbc82188ec28b012ef7bdc5606d24afc853a9ab0bdd931d3d8393c7104e3f174d4301817e25ccb9dbadc7a42f3f132729f7e1e39e6174efbed5ab765fd827ba3e1396bd38faecaba0be854b6895a7ff4d2b701e3e80792e9edfbf354417d2f93eb8c21a63a4736d3ab47759b0e32bcece58d4c980dd28706a0c3f92819fd96acb9d042772a4e974f63a2e2d7cba46ec1a1aa063f9ba0b5bacd5bd0c7cd2a365715aed72da8ec7396f9a1a45408d51fdbceb337c0db98a36e3e6a801ba52b9afac5cee7b2fc49541035ebc4f80df056a23453e70315e3d988b999120ae82947ff92d77aed6e8cc125e1294aad211b9c7e9a301fef91a8df7207908d7ee04bc7cc447298c646de433dc3023c5a8d7e78d7c9f2e66e96103e92f0f6f95ed3baa0cba3464a25cb6661c0a51fa4e79a4372158a4245686d437d523b735f920a9d5d6276fc97f2464da3164d27893b8d8f12a0a3c843c35f68 +MD = a7c4cff2f73c911d7e3f2f82b20adb9cf2caafc9254cf5997215a11046846d0e + +Len = 29816 +Msg = e70653637bc5e388ccd8dc44e5eace36f7398f2bac993042b9bc2f4fb3b0ee7e23a96439dc01134b8c7d3a4592d24b200f689f25405d690a0bcde95ed751e227a1c54dc94c4f4f29399c6913186defd9fe53bb3db7b622915d1c271d29a8efc18ae175dc74b67f6cfbbed17620c4a0a8eb82493dbaad4321d832525551c0fe9605864439fc3e8b5af96ada3552dd47d4fe7eb3ebf049b400a396d3cef79ef8ec3b3b22aa8bef5b3c5c28ec1a55c2cda661ce5f0f02925d76e8d01050c24cc30c548877f5c9d2d8594b806febd27b186639fab773979027cdcc6973a35ad1493e77f5abe360eee8fbeffbcb71700e125cb18b21de584cf84b79e8638e683570c9cc0b263cf54b746870206874d885a2cfee080717eccdba3a17d548db948022f77c5151c833f265e9f578aebcb1e7af091bf9d0e7fd1b53e0cdb9895085bb460eaf50924ebfeaa1c6a68a0610a43d23505ee6e416303fad86c41b90b6e4eec4578c8e5298443b1247acded639598ee5eddf58ab6c2f40ae732483c4d4581f841a3c95fa6c68ee9fb42ffc870077e2dd28c7d78db1a22640f114798d748a586d9fe7edf093d30a2f54566d822ba742f3483ee9f2ac30fa4a46bc86535c21a0692db31c9ed52e97ac704ab82e8290b40f976b18422682c3b3bb45317e55c600600dcbac6af9219efd503365f2cfdb43195b77ebe5e740896598d7037627217e38885525bec953250a3c38fc38d82ff4f9dd8aea43b7115447259983a49ad925dae47a0d010b6d37bb7c8106676635d19765ca9ec45e9d2d41aab4396e7697fa2e6961ee9b8816d9f857370be64194e1db3a628ed1a38d1b3b6e50ad3d8202071c61334ff408f715a91782911f31f52caea67843d04f89271dba93687a87c3538d1217b97453b8f2b602892279fe00bbf6ef35432b2a3858cfd6a8f18b4d81e667c536b383300079076175455c6f5c959d5ec01848fc43b63a0ab5d0da9ce5c994c3b7c5896877b0847b6d83304eb2c2893b4249918d5149449ee38ecd3c9703fa51c377eec3c6a1169a9a625e61a94ba4cee25f6ca50b1ad6d959b2cef43e9c83ba82521a099554a304246c4c71ea37d45ec9e1430b1930d90440c4448e829d16441bdd75028bcf1402322963451c8e03351e577d8822933367bf4c97d00d0d9a39b7a06876511c52dcec200ba7e85918990a4a82e4ce4cce4affd32e8384f4f9df7d24592c8f4344da7bd9ad5df69ffbd3b541bae7c76290f527e0736f925a1a7f96f0b1edec4ad14407dcaf30ed68942b46c48d58b2dd63af60fccd5bdd48e560298dd981103be361b7b27be876bccbe8e55b63013ac62ec2d2aea4100dc542cc5f8137b0a41d617ab4e2774d38a48854bc8fa4a80524d974a47e6157cbda19096056354250f932d726f40d26dc27b3b5f0e7b816bbff4b0efff46af6bf8e526053933afebbd640c03470a43d094e3454acec0713055f6ed70a9928b590e9d51960c1adad8ebc727d06dfa3586820f3791624fa678b4d2919eef4035ee6f38a7cb167f81770b4b055c5c97440a0a5d86c5619f7d9f4d0641ad28e64b76bb55ad16b0d82040ac4e29299b47ebd5ae5cc7495536732e8f10724dfedb18ac5362b5fb93cb33c04f7f07aa92a29973ee9b5dafb59b33a11b7fb7d3c9b549d9c7ee76fc17af3860552c3561eb2dd95f3b87de7afb241b9142a266d1320b3b899967449ab52aaacb5df416d1fd50280225a0ae0dae97b779c52713e890238a56385bc35a0494074bda55309d519002072d84610a383c83b4f38c436c8cb492ba353a57bc8e91da7c5ace2706809403d8c3917be330a8fcfd5e3089ff8025011010919624ab9aa0d74fdd4ebff2a289f17856731b1063af9d75b23bf4030b42024aeff334e414d6d739f13c2c206210dbcc41db246fd3082fda9ffdfc9dcdd20b54a3e37fe0a6f90699a853dda24945123ff21891a79d932eed48346bb8e33d95be6c0b3809b793ffff714a46f0ce731f33e5bfe54019dd053e4963e3dcf1e12bf886cf2fc7cd140ddbda73ea8478476d587b3591d1ee426d3e2220d77250695893b2a3b9b36e15baaf42554ae5cd1e870e411e19c5616fa17d50efc921b53286004e2d58450105a0fa4782ea9d3384e6d5c5ddffa349b15c6c54253b6366d94eced7c09e152c503b3d68714c0351f7173f77f9b5e3ddb3f89baa55a0a00bca0d6fde11fd7c56a203f923a4e1b08f01a2bbe5f5df1fb3f3f08bd2159b700a916c63cf75f903066775ade7923e3d7120f3cb8e56ddaf52ddfead59d97e4be9abc63b3a710341b21d1adc42cdd4027ed1950eefa1242b30ee5d80b025dbac3f85c5669da7cea0e03f5df4b3bc25982e9ff0c66849651be4b1a796636f361962cbc466676e9db9274ad997b8e1b576f6e8b1a2a6c3f2e9d4a4676ee22a100bf9ca5dcb364a02f2edcbf835d0e2f6177e48322429b5602d8753176abaeafc0c7b2dec0578de90d6ba3f444f8a148a020b3b0cbb4f822f4f833a222a6c364c835d531995ad80b9dd03114855530ac3cf543dabe8a6aed2d84eb6322e6470941916c6410c52c5009e5eee7ed7aa4a45c7bfdc8a3ccdbfdd504073a1d7324e65264e140cc9f73fe763243342571e378283c47442180329c1300eef0bb56404324349b8d76f0945e0e4096c5d442d770c9bf8a14e0b057100f01084da5968568de8c0213b5c177b8f9965060a3f366d4678c2f01896331a1f28ebd18833bd99ca9f17e99321904545fbcdace3a8e7aeb292c9cd3c4a2aa99e430751bfc4e2629aded77e994002379673b9ad7401afafe38263b523874a93e0c6e981cb9d55355110755c9847ebc71399afa425ea0ce55bc0273468ee117da93d08ee462db4869fec88002aa9cb782fe6161d93b27de38dc49ab766df1dab3a0debf3b9e65edac9bb6615cad61fcf5de19376280b712efc0824dab7eaddb115c2194e8157d2a68115b5e9e36d673120049e3a6d45852c19135c0ad691c023eef2073b5702ae7e3873fe092ec0105208d79cf6de01386f877ea6c44d54638818063c56857750c6726e850fe78ec9869ac31627f4bef96da992ab9386a3463213773f3ca7164813a15e014ab819f153386fa04a3bef56ab0207c0f50d1ed6c673dd763a367022ea47daf9661b02065c7435b1da3e12ceac13369d655b2793c9bba177fbbe054fbef86db3ce7ad796e6d0add15455b9cff57fb787610b4e1ba05d5bcaed98564d16157ee70071fb21a6c03065552d54d8fb8a0315746802ccdecb74d57c7fe39964419709987aed1500e57614391f648832d491ce1c2be625f9a8852e44bf2db34def3e71e3003e0f8992e7348cc6794c4fe1ec27d4b158c57556f54bc2e0a5391780edd69cac6e6f956afc6cdc9cf39397348aa91a82db19c6694da4737eda8975992d9e11d9fec3d8d03e13851d740c9d4ef5c87a2afd91815206ced3043e22ccba664eef034f9ab86514cf22c27b05e683a61c501430cb2a93b9216dfb60a3a147205f80d30152b88c29064226691df785240b58d9053526c0cd52a0eec26a87d1f44673a3948a5dc7e34f5fb3ceb334c5f81bd0d3fb5e0a4bcbc91838d415e4ed5a9a440f79b01cbacc00c7e53c7442c88ad474bf73b459a72d0b307426044cfbbbd15e71415279b75bc1375502cf960f54bba0d61ec67965797f961b38d4248fa0723f635bf009400b171a6de233a2fcfe37e1c25d02fdf939bc95b87cf4000b90f3637049f720076278ed9a3b3efe33efdfb40eaef85bf4d648cbb662f2640215eb77029c06625fea4d2d847e400c2692299405852527cae78ab4afab3dc505a7b0c6a4c27c54dc1b2a56a73be561579d9c0e618007c5fdd618cd0e8654a788bee9fed14de75bee6d86f56cf4ad72395abd8f8d201edb002a79915db4d5900dd40d7c129ec60c0969f9865028f6c36e61f493f2d5e8bb747d039e07972ef2f77f81bad34596c9df98d885fb595fe9494bd7b83d21e40bcd266d3fa6adcf54e819ed57add2d839b362ca70c8f657386c60dd68c6949f306cbf1d12c579354a525bb6cf0cb718c0476045e333906b554a498c32199e88cde5bf79a3ce8a0f27c89d648d7a72d6f1ee09b139e5a80aa4657e5a80c0a01f28caa0296f2c40ab91bd577d1f7186714329d7b2f139bdc3ca4077cee13659f0f58df992d1894d990c932266f18c7296387d42c1b5ba42152b5dbe6feff52c7ca892245c774ff155ed0c86c8a015b7a4467ae343e3e1c57d3c2fcaa3e9778830b699d8cccd0aec70d76bed08a7b7d639f18531dff83ab87a913925018a580daba3e75f9a4f248f784043cdbd74ed5ea5ce3ea6fc8f4fab8bbf0c461f3ef11d5c051d511b7a276ababc16c13d9420a1a63109bb00057b1f2f1a1ba64373fd47a03eae35e6eaae0ed6af77402f81ec5f89ce7906a0e75783d336d9de14b5b71d36c51c7672fd12dc4a9ec7c309dacad8eefb0ee245c16f5a2699e9560990b8fe8e3cdaab463de063950eaad242eb26be345b2e0675101d3287b7ac96a8819d6bf51a7b4ce739a125247372e6615f9a6ff84368cba5500b8d8514a6286804bf0629c280c3cc5cdfa19761b287eb84907eb96841aa5d0d94db8d455873de96b82d9ae95db86c33e6596c6e0c3f5816a36ae61e4b3b02a5539d3eae561162c3f372a6d394835d4b7fcd01dcc2651d723da50cf9e7f64cc3c242e7c401899af90b45fc35b7cd05ffe67cf65297a1d213d9bdac7f9a5481c56b8d373afd34edb25a48097429edfcedd4d9b843de6dec9812353303e4de5836b9ac9b57ababe18c8ad93d037d7ea8819563d6451931e36b417c3f4b6a1c16a4275182ce9f670cf3f77a258824f7af57d2bbcebaca964d0a12232faa6c66637a4efc9be44afec6653abb4166b2d167dd0742003984f39ff0feaa92a59e75c5459b0e255d20cbb47ccf1d2f23a9a4788d9d871935bad242bc5172f6c162a292729616ed8dc3664d872f003d436bd947e6100b8823eecadbc8c52cda824b7571adcaa722faa556f830d514fa4a8bf85c73094fdba89345c1a2c438ac6ccb76e933932f842849065af64bbbe4ad8c7a2cb0e3b462284acbaad6d916eae5652f4fc09a207f9b20fcdc340d759af0efe74f3c39d9da2777d4ede17e481490aaf73bc14a1a83c7bfb2f29694d27b9928b82a516630922a9cea013f1e6cc7d2ff7723b22d8e2f3297c1348a7c43051ab97544ad135938a63c839b5c43d56330f517ae1fbefbd0602b90288c2e57d60 +MD = 977495dc59e74389b65ee1a7a33295014abdcf7916f9e0d1ca39a7cd395e6c41 + +Len = 30608 +Msg = aa2a95be717ddf5d676aeb0065f400e68855c23034f057805887c9c6f3aeab57d77f0040ad9058d939223c9ddf9bcc386637a7e2fdfa0bec7be93e98eb792c2e4848514c850bd97ed0c7060e1845d31ecdc0d7f3e7e06b9429ec0f94a73b0a2c86eb518d03d6aa73b6c211fe18d85bbe4458190cfa8abfa1e9f806612eda8e7818d2c8a82ed913e173792513e83ead40536736d53fe04f3a4475e9a88840003b86637e480efd5cf08d560af58f5d11cd8255f7f5bdcb6288c1cb8110be53a89c59083a13ac28ccc78ec0874d151fce8d5a8a21157c3142b3e8629642d7fdcdc41828c6b10f43ac8ffe1f66c3836a2ea7626e7fdc85fc35e241a2f0e5db24b9da4b2ae8cb3f37446f63da6dfee02877432269d8f3df12843d55f456a2d3b2b2077a78690945eadc90475b65a73440f28b23e4f301925d77edabbe9121c68e01732e7910122846bc1a31091565889ae7a5ec4599afa7c3551acb696a09bca0ee45ee95a78ff0322c34aa4c47e1e31e9eb906f692a5252e68eb3e5ea603bdd0c0a64334f427a6957306398cc1c34db45ef0f75da68a1485f6898b0410b6d206c1bdb4bec1835159dab966314cb2ce44717149e49d077db0481c3ac26fcb022a37b3c99bd44af965a975b9a3b0566fb61d6583f23ec36796a6cbd4028ae956246baf0a34f525a6a12861bb4bb55837f2abf42eee5267da2157bee02b2ab9d4dca5da00efeebc61f59ea6f38f23602fe06345d142a19ade38a51ee6a517e2863b2d5b323586b63149556be9d8c1155d698c81f455f3057cc3d6136ed7190d74274a5b286f84bc1f8593d9268f5820cb736fcf208f104fbbab33c4012bf8e2a58945026b03b1753291a118311ab02881e75558db58c021a4d6045a26087b08214a6677825bd58a7255c74f92e391d685ae8444b018ca233d2d91fc66d66c28f050f5e3f5ddb8a2e7ba4ca7d250c3d2e1ae45ba2437f7fc909821d348fe91e91b853a6d4df321669aa67a4778cb0dc39dd1dfe2c11d0f55a500fe0754e6b2f4a8d07d3e1104d97d920297570cbb3952bffe9ce50e33dad5824b6ebf12f799f0a218057dc977a991d7b7ec0117880d26511dc2eb93df1f253163ba230b990d860e471b53feb6574772acc16b209952e85a159a1bd98aa8ecba2e2a5cc635d55ef64407e83628ab496ac85ebdaf58cf3fe3d06c9e679d3bd323960592cb31ba1f61f71163fc356f3fc7f50a204c2c4ed4f335809cc57ea182768295eca3f78472584881edd54569d0921a0ebc807d954e922c1d3c7c97a2a0bbd92093d5edfbfee21f9ead4bc062a5d21eb2b8d2b46e56c89d8ca6134f05d5f885efafe97de66c0764b1cce50f23668feb3e3ccb379f949e701603120d94cb376d4a67680e0f63cfff02712c9871bad168fa72f16ff0af1b8d017b023b15277f7978e3d9073c8c43d8d9c5a6c41749a17d2e80cfc42b5048dd95356a405194d991c34cc4d2368f6ad87ef0ddfbdbbc0612218eea9f161e2b461c5ad28410b84b9d71cab1d6c5134de5381959a687bb090f1cc5cc667bc2cfb1dc11c26f193be085cb84297bb0c0f2e85168a02be1edb15c674cfc8320e339071e83c36936c69d3119a3b329c13f63ca0f063cf4b2fb06e24a4c025ccd2a732e2ad75cda2d018c8aa34ed848be38a871bb1bb567c18c10870ded675b4c3e84104836162ac793b476b0ae1f407052c7c79cce91eed849d834f756b2e664c97494c0c878c1cc251dde8aeb107a9f36cab3fc485af0bdda65d251b06b67dc704ba1d9b40a07045ed0ab772c335c138cb81c21b197d539e6bf4763221a457ddd1221dd23546537e7d4c3c099114f93fb9aec5430d1041415ef7d75d548e80fb8d1fb123cdf412c673110ad5b31bce92b770added8fe71611fc5acff17cb85aa88e17c1283204ac87f079859a1b09dbc5575e041159e5077feec8b99d3f1d2556535d310ed5177fef18e5927d58a0327143d011c4b766ae0aceae7a01187f3a6a27b5ac1751e06d46b13e1a2d6fe7b5d641484b2d32d2d458a3f35b468f465f8b1307786b2dc93e34c46b66d2e8482e9d5caefc75519241117581a4942cda5d611d3bde31f139b9635754be934c29636d99ea6ac39d0cbdde4c3f9d1278a3fb95503926922698a77875e1699822f41eef02e4dd409da9106731158de9fa0a03cfb1e998b5534dd01e23fab10af21025cb9e859f14d9d101532bebbe403a753bb64a337cc300c2fcfb6b87dc1145e540a875b3f766d9ed5a4a43a97640c14d6df3220019e3b55ef3b7547033d4a1db392e90572c5e2663e1f68038fe1116fb5f2e4136b83efb897cfbe69dfe7c915ad706f65a8726479d5ffcea7e9edac2e5da0eb0bfa1fb59ab616f2af685309acae1d8afa250e3c4019b0789649dc44b75a53b76811c43582c68ba27640f194693204bc419cfc026f95fbd66d245f63b128a5e9b66713e7e755a84e6cde65e1c1d5c083ca64be3f3ec71c688b1dc9819234f1f2855e71356ecfe776d1b5029a4d15cb71f300e74b6429acbf7e7abd46e12bd252435c7eb65fa1e39c634969f6715eaff76a15e9cf462a274bc5efad0c1469c1997f059ed35078072f90200eaec52cc8848e0848237b65168defc11b49a27b4a2896de5424d7cedcb0c6bd532bbf1cbfb9dd5c85006a56f5065ab37a9811dcc690394b31135bf2deb09595f9e5d58af007d68712bea97c3d35a52b5d7ff90ae150c4d0b83763a087cf7b3e45759f1403ef181c93d6af4169ac4d9d3659be8204fad8034c097544623df61ad853723465e000816ae0e25304cab27d97bde8debbfed1577ef2074ae8ac84a024e80558807b3e5a1a65e90d99217260f434fe8d70cd4f41c3899040a59ba582addbbf1cfe21100b24ce39ed91411bdbde2765fabdf6a066bc48b6b2038be726f58705ee397224190c824b7f779a0d42a83db5b31dfb831abbb7e11b8cdda8017e828048ccdee918543a944fc6acd549f4c07452fb5c55e2645f85e9cc3186b6bb4694b922c7ed6d7e5fbabb18e9f23646581836e089976228883ba93c08019b3e5be9bbc5ed9facfd5a156db8e1e2ac1f7d17fb6813d5fe8afa68d646c197337a2ac5cd30807e3b53c23ab45115251fe2a809fcec8b803c0e0ea3fd871eb613e14bdf6a0d5117bd1410a14b6c044816225154d80841248f143d538b774fecc126278d1e86afea86a0dddf8f543fba0361118f0925d5418c502f1e0c9205b9af9b565557672d654cac724bfcb417f97c21511efcdfd855a8242c6a0d51a09b53c350deb1193a166379868d00062d94f4e5a89b4f909adf6712edadea50d10032309f7f9807568c6faa82f955c4f10af220808a6de2cd4d3daebb803ff9f796ef55aabe98cc1335c5b1e0475a7b02c9e8646142d430c03db05a4e578ac784bddfc4fb221fd1f0810a1226cd8a82c3606c13c37b1f25142f5397feaa474418e377e11930b9b36f1ca16def126286c35ce1c13f89ab1a49709c0a450ee1ea24a66c4c7d60d2daff57200771ac8ef1831dedff3df5149ad0c00e03c9fc074428851169a04917d311cf0a8186f24c5d7321e5203753c8213a8c0e26f5d813cca50e0bbb2a4fe51656f2c56e779a372514176bc6c41c4237e73320e6414983fe1a8fbfd363ebc72f3f50e520cbfadbd2f65ce6755cc51f698763eab444b6f45309a8a224f5b33a882b77fe3b0caab6f19a70e99e79c4cc106b8cd03368b6d165f2d75732482cbbababb6552fb200350b60d1e9b4a3b1b4d7341c55c635bfa791569a438de3bec72450baae8144b1f28afa2e6b5a5312862851a10fff3437e37fa5700b9a40efe96c8af34ea24d365bfab6b4e2e2004dac7e44a94340dcb6118b7fe6f3d9f8469efeeadeda3523e3fdd53723f50e53e984639d93b42d97c0ce4f467da0ef62495455c0fbb5ac71614494fbe9f611966cca52cd0eb7380dde56358982a72d276ea60bddd8856aae24ccc465758aae705ddad64368e0d2a77555d8c9b45b25b03d107b71d3be0242b4f2ee146507375a233268a130b59fed0c59938781516b852b004f2d9bc405d788437c7927104ebc536d845704a9f25729be0033581e512ecf01d1718f3be7c5155aea043a1a472f74e8b3e543327c7e541fa95dc70699057fa1bcee3c8a2aa3e295d1662ca9c32bee3061dc7ae380aaf1daf9774cce85b1d35c5be4123330ec8690acff5d33552a55d1289d1a31b195a99c7b1067cab9ac508e5903aecbad1767b7e7307a4b4fa3124772a7bfa191a6e1b098a9968fa76d8dd41ecd60b7f1ad1c881ab9d256454eca0fda9cc9b7836710d3ecb35781d17dd1ba3781e68ca1260b8db1fc13e8c855d396baecd6e8094edd62e1be2945ba45c29d1df19ebe3e0abb453767ad773b80c588be0845c7b5d69dea123a9a4fd46de7193c7cf7d11ae3a22b258d1d86213826323e8fb4bafb86e8d5f8b91904b24ea5ab3d949049ea1966bc06fcc29a1be46c4fc6d3a2465ce834b2ffaa3408d67084cf7bc8e69d0e346f8456076b278e2e0e1de1847d0e5c63080db18e69c0b36c0af2918a695f09cd23009d6d45c2fa7d92491912c3677c9fd94298e628d0dba9bec0f979a6f45f3c37ad377f00d0d34b8f4dc7ff13d63ff73efe2041ff9da1a206972df71de19119f406debd1ae5bb205b8888b9ccff08f19f9ce2126cabb7fd88f199833ccb21ef1e99ddb7f28624849da5d5c37d368a2771bb48e7ee6f81149c6ce6be92059413edd2cef0361671f0ac1239bc930115f16bb5df32f37d9f7fd7757ff9ac256a21083e2ce6443b55ed3d5a2ef5bd034ef7d4392f642a3a55a7c087dfe4e99f16aee458621aab5932e297ea201f49a187934191942be14a6614ce3080d0d8f72c1618ae28fdd9e48b79624ea789c760726c4a7ba7dab712235f76ec0d6e08b20cef0bbbcc106e81d20a12f43fd5b4c471eb4533f5011a262fd05136d01ce7645ba233edd5e2d7a5a92d30775383a0421888c876e62f98eaee2fc39d636e03627ac827c0d0f583c4734b21448d04087dd8cd5aa115c6a1f4e0c6647c41c1db40ecd96dd137c91162b2fc8bf846e76bbc3541624eee56d3c89a2caa7ff5b8dd84445e6cab94cdff050aa9d6ef0b9e2891b05d75ccea609cda8cdb1c04f9c388b103bfaa9c5284bb2fcceb78a555a8ed92ccaa1bc784646bbf3b4a2fa7c8727b3b9d75be300b7db4478c3a07c7bf882943fc9faabb66e2cecb28025bd4dc36139884390e132a2998e0cb0e0ab2a3cc5a09c2a6d914ec6c4492d58c2718bf9ee06c5a4210a23908d79ffbdfd7e2acd5ee78b167fd709f515baac65027efed0d701b82597c59a2abeeb9b14815f4255585054b5bae3afa4272876ce6c4d6ef12311a8eb797c611834cd26daf4b53c79b8c23e2ea51e +MD = 6a5f09b3e0a8ae5d795f2dbed00ee521aed5b0875d2e487a82b2c687b527c278 + +Len = 31400 +Msg = d7a5688c0c385edcc1604930cc73ba22678cec50ccd3fabc02ff5073f6195f6dcd8296b579378dc98a54834447d70abafea701e498d5c3fd70219e6b66c087a22f5c0b46ef5d898f09679ff23523e2fed443d28481c00dfae966c221dc9369e6a43cb1869530baf6e5a18582bee0a9b492684777af1e3f7c13d7a4dd811b6e01d4296fbf943a89c6c70a1d3c0995c6a5df1e48074976c34b967b2de77cdffeba682b2d3713035cc656ab50673fcaa399646ebd7a7751002f1b5b4386f66782da084ad3383b119cbf3b8b044d8708a758c95f8e1963365ef04a7dcf04173c602a5b8f4a0833eeb27a1db222340ad53aa9b5faa32c32ad4555caebbaa706e5026f0a0178ef242204bca5299365f0bcc455d046e4fb0f3e1d2844adeab8eceace74bca846373633fc507bf73d286042ad25c34b3acd20724e2f5fc9497ef0d42e001a8d9c2690ab01fd46240ac582f15ede36118bec8dd04033c449be433b2a89daccb763065b127a8aaeb9e1837f503d4bd0a1c19e7fe15cfb1a34304df47447cb792e811dbeeed1c05dbda9ab7fe7b3333a02c22c1e2b08510a9389e6443bcf9bc9fbe0b4e2c96d67f8384c85a93f295d1c3c78de9138adfb3c6db05453058b1266256612ef2ab6472a33b15926df05921c58c9fb0190b4c257ca8ddf485de2f7f5b4fd810c9a142798b4c06f1e4fb09ae55d9fcd95b9836e04b308d14cc83c1421b18c4761a0efd0edc6610eb818933d1d53e19a763d84c7ea2e097086d0012f8f23fbad17c4af0bcf6e7c801cc115436d4277abcba41e94b24678061ffc9a11ea1232fb568ebc9ee7b6f90b73d29d737c334848bd74b89f03003dd93ed46d82d887187945877f51dca5c0f8e5d49596f32d3eb87437bcae866640310ce1e34a0188976f0d365eee5643ba8f994e6474793940451774918ae27f6a58b1aa65300f209624d523c23bff99cd17b8c872d5b75e3735ceb49ffbc053a19554b859fda754fee1c6d714027caee2da69ca278154a409d1c37e4ec9c8ebce2f1d912879732eb5ee08d9ba09788be21ed5ddeb3ff9139f611b5a06bba14eda6f35bf3b6c1bb5a493c2b11e199936b32c238826d94eb4e12d01d02f9af484ab9dc4caf99e47f1b3181de8a6f987b93f4c7c544015fa8eb77c9b69312e68962b01f138c9d79eebcbc44005bc73eb1c6cc508c8a1bca6a90a9811ac743fa68b40e2e59315dec8aad2e05390c74d6d6524e1ee6cb196f90ec0c78c226195556bd48ac862447c6e36b2b480122f50b49e4ee657c8d96a9cc4c35234515ef71e3fce3fc12ebe7938985188ed125b4469ced21d6a657f0236d3f98130c3d42fa90e164af87eea9dcdd799a4c218b5f133fe98ce50ca0d2470444c9ba9002c039de094f396da32afd6fb704f28aca41ebb358741307fe999f21ea3eac68ecc3ca3bd3081c3cafd79fa0dc0d347579095a97b89bd330d7d286369e5b4b0f71ea262aed23ea6d7b4c1e214707646a0e11ca4d8858c81fb2f9b6c2efc428ec388fc83ba62706888bd50351868814d10007c545564f441d169b9b474cfdc89787414adeac860306681ee9c22903c862d537d62f90c3e9c189249e44346c9c9a049b08945ec5627f86862bf38d0ee178243e676cd66b1b9571114a3a3495375c26f99bed3b69975c6db76456510e02894398137d75a97c11650e29a9dc0c0b5674e97f59c0f73415840f0d7ae385be2ed9b144e21d136dbddb67a70389359b3164e71d6a9dd2ab33700991c1d30a56c14d26862b3b1d83035aba6ce7dab669457d7f108010a07f5ea8439bdb9e006ef9147451c93e4c3e7a5972c5c72ee2f83b251dd34ac7c522cf93398618a30c893ed617224cb503f29b6e3d5c12145fba6b024fe01b31d5383ed747db19909327faf87b92163df961eeef569a692981425d8b81c181dd352204cb1b254ed518bdc5f23e0bc61780eedd836b0b2ccd0c029b375ff20f288962ba151fdf38ef21cd1859cb09ccf02f1bff90e728ed7d348dac7c46ec23a2368cd71bc273685d22d87aa5af169b46785bbdbe676e1bb8bf45f9f0b32a6fe8c102d4659f8c4d9db052655c56bcd198e130a0524855480df0be1c0b3137346abd675a792374692f3eed50f45e56e055fe2d3ff32678f2fb6d787b425d9d2186801ca1dceae63b9042ebc5f4229f480c23c3f5276e439d0fa9e7a02c84c6a7eabdb562f7623c455f50e04cd24fd08939f6776855ac3fa6992a9e1320334e47f5caa4165f05f116eaed6d5e1532a5244deac9f2044ce7c046640e5cc4058e72363b7b347a52af10d17ce56243778799d6753e2ab9ecb64a85eaaae59e6811c73a84ad35efd4b0c38183eb01d38ae26a622a468afcf835d5e623163615d772a7613abc931618c0bfa996d0a55bf960066f8e759b43fbe0d2d5a1b2c6a0c02bb358d21be4837b3965882a48d5232f6b0e5cf63dd4056441c1d2eb132fe5dea74b6fcf5da2ce889545cbb2b619efb97dd2b91611add7cdc3336c63b9da4b7f6ff034a704464ddd6ee0d2c4aadc18041304124293b121950fa810a0195e582f004245dd725787d620b73be4999412bbb502e7203666795661805e34a4147279e2a1f1f75a4f12ff45497576f4fa863cfe7fa6137c46558e736ca3760c9540cc81afe7691ea565d567180e005f47d8f439aaedb0c7c93ca9afbd9f08956949a387cc94c721e2f6e4e09364253b34919e01350c7cbb67a54491039f40e108e39b5f78688616905caa5c4c263a1b293686efaeb0cbd9ca05cba1cf22d371eca5206333f12a6f35ed9234c2b2d3719e3e4b5f6849427538f4cb6c80d814ba8d04bf4d9fbd289e3c5028f4679875c11c1f57cb025465406cf8a05bc91da94d8298e4791c3b05261bfb0b25db5585ac2b6038dd0d50a8bdbe6806f9f861f58d45c81c7029e944897d6485537e68a77534976aefd9dc813fa5e94bc19f538e0c4f18e3bd59466b4ab91333e7c1404fcec03b6a8df8368358cbf30b3d4e50c74d1701c6db1ad0edec578d936d547ae31b76b2b431f92d339b98fbb1e755e855b236292233ff2740e0e14a204ea88705dd9093e4665cfef67a8589dc3a7688adfe14f5a26276a808cadecf77262de32c97d65557b5844a50682a13d6a100c044633bddb3e101d1b9fcb893e46e552dcbec908daa8a1f8de606ef305dd5851d9d942367d32a2142b919071e1491deb5682e5793396e8f380bb95d55ce32840f2e03641a8cc865699a8232e4643afb1885dfa40ca0dd43e74601fcfaa4328df37a33767c4d264eb4e2dad48d7fc46ac5b9930e605d50de0a397336958c6ff3890696b2e390de3dc31675545fa3b88e5b57daef24eb53ce1f4a8f92ccc345553e67cfd217045ac3029a044af19ca1d6380509dec0c76094a4eda9a9f6f55d4361f2213c5cf4267ef201ea10d9b6fae2ea25b245ca6e01b229b763e4ba9f022eb25a4d6a4bfcbbb22fd2b95e8e8f3e34f05e66ccb86bb1b71c2c40cb6e3cfe77ade4a6d45a9aa50d0a80d48c7681d63cd8f389dc113cfb03fab0c2d6a83b8cce9345b0030f3a5cf01080ce13283b7d7b02a9bdec4b5e483953e96c9eff37478420e21b9ee0785e0bd077289b1a187e601bd55575ed4c13b7a63a907cb99cb958d53e2be064b112a0d8c8567cd2a5739c72faf3116d82f81f7028f0f88df84c8d0ede73700291356f8808fa40d86ed770a6af194742af6fd13038e0aad2c69bb15c3784d6508510b87c9d667fa1d1149d25563a70130de56d64eef20c3e7401663bddc27bb4f95f2c150a3d91a578d5728d84d934453af3548cbfa78517ad280c3c35def8d68a5b3aefd3d21f89d284813dbf67fc6fb30417263f63bdf4ce7a23bbd41ca60ba49f556b9ee691955a9c59c46a7940d912a235bfc2d90f6c54724d693d1e2bead4b60c26afcd607e9d975ca01a8faa37b65820b7fe5a01d4db9ad992e555f2ea9729df9f9b09249bf8001a5f541d81023a9078bd56792dc4c06e58e74156939168554034f52c5674166103508ba56daefbe5ae2e4fb8fbb2af676bc4e5826655c4d2ce9522a96e9d5524b83235a9e8b496b221896e8bf434f51052ba468c13de392ceb2ec7f2e58e50d59962f6ad5aa98790736d27849fb24df3de45f8b6046141be266049bb53cd860e476123226c044b1b3437ff1566b0f68c3ee650a2c0a55b20f0e82c4521b1610912cb6fab754b5d8cb47879c0d1c79b34251a02d4c100f1dfdb04d432d7f07e80abf010ab0ee52b9fa4bd1c19795cb896016f73be8e0ab2555574f606fef13aff737dda93a17851be65545a81b5e6bb2c544517e2a038f92bf086f6240f4a22cff9d31217d55b6c53770cb98c200c3f61ae3983c3800252ce2cd9593c7151c28cbf8e5b8a0334b8096a14bdbb402391d07fcb3be3a5fd4bb67ada9392ddae96b0350e0b7cb36ad14abf2adb718ec37ee33958a4c59a90306f5b1949d99cb71bd4ead0c6628e844491d6ad9751647243247b9052dbc651cd635df3c0734711ce65418500cdcd078e79411b85cd89a68b1ea6d0cab8d1b86f3cf418abe265353adbe9894f21276b2b5baf030b6836d6b33c5bb870cf153a9256adf660c96f97cdc3436c061f063587c340e2ac94249948080aa5e991296ed34aebfb937acec01395df9bd9f9e1ed404ad748fdf3bb44d5fc242799a186bbae745eb698892b3488de2e971f4452f8c15cb28453e9638fe9a338cc0572b5b7807d46b60476dd6bb9f6a0ec5aa0d1fea773634362e7c5d0df77c8f1c1771ed8f5c064584bc68dec0399e71a1081d7554f1979f48f915aae33f4554732415a967ae8083bf2fa852c1212619ee559eb9344d967265e688a7e83935e1afc43d1768c5ed2df8e758ba2520a90e92dab774f151dab4743cfedc84aff540b64012c0fb69f349172d9e9f54fed05977df912df3c60c6d5d449ed220672d7972e0bb2b86613ae10349a287b683420183ab536ca273d3a608469110222b8492c9eb60e073766bfca6838dfdb377a70ea08826b96622d8665d89fe1ef4c1a295a5ab2b6828702ea3e7228786b3a1a989b5bc329da799c3b544570e85fcf13089ed66424a0f172addae70b7ac1ecaee79aa909e9fcda13b9ba5f6e8cca485d6778965cd0e8e3208b2e3b346f65cba1ee6674c93484002e82168afb67b53433b6660f0f53d0f8b6f2a6f345cecd539e2d8d338381e6884734e75ca9d1b70f5085e5c4ee15ef9e8084e383b1f17f10fe258d89cb6abaeef842bb48fc7336561e46864c9bbf9b4127b252710bafe1903c56d5dbf3477780ac2be0d465c4b9950788a61a7a896a8d16fb724fa532ab3df33204beadb082f9ed611693683eb74896cce3931d2be3dec8d0d184213212969d6788865d3e83c73672caea8659c5ed6673cd5af61f8db2d7c2ee931216de16a537dfd78439f05511e15c6e42ae5bffd11db1d697dcdea5ae422810da69545a95537926b53b3f400a3d69732f94fffc713b3f9a64cc4d23c6ff2c61ec922bbf082af30852dae70479d770bdafa6186fc15cc52b0f9 +MD = 5ba431851b1e2be373d818c3c6884e53d82273219c3f1c36c9aae099fa6690e1 + +Len = 32192 +Msg = d2967ddf69ef62a9e23c9118dfaa55df92b4116322f1c9275131e3875dc92faa232b26b28aba6f351fdca8f1fd5062bbf0c26db9da9c57d155202f6199b48e31a17cd9a6892ec0383b220a254aa995671ea098e452452ce65a490bca692697fc91b21e232df45c987c37411d8e5ef5cc64771a4d5393514ca9d4ff2a93c751f33ef47d913db44b3f2b43d54091168ad0096f795ba42ecded8aea93eae040c4ffef6b7f58821596138f6d4cf51a7a5d5c57af3f750fbfa8af44b350701839f806eb3fabe0c4c044fef2de30a6f33275599460f3055aeeea7c2156bd250359f6f17b978991ca5d5de79abe08bae2e5dbad09a91e724e629c3b67fb63716849c5a9e79ba2d45e93eab5d0345d99b03b9542feb34724b3c4c6d45fccc8bd11b16d1577757d0f460af152dc68b6ab25deadfebba5f68351bb6e2e51ee766fc437f71c734aa3ac4b6b7da506839b5708732acb87a8b4f7eff09e33858cf5f14a866aa822459a11355e939696ad940823a51590ace407e8570a5dca42cccba96b44cea0cd8beca8cc8a3d0dd30d2a233c19753570807abe4fb2b4dbd2d68201ee1a2bebbc4720d7d89882f207cce4111c7a52a11ca592e1a090a94f7bd3a25f9daf8a73379fbf08202f6b2d78114b3a8b6eb5bef77ad9b9124b470c86ebb12d3eacf21f86bb50a26df8fea76e05e506509da5734b28d6af6c8c93fb3b4539d29ab86cd7f0c45b0d879b454633d03dde35b12aa85ed6112978fa9704e10ac1b6797cff83bee269b036bf48f30e99d828004f4c457aad1390fc3e5a10c161d241a39fb30c393c01f5420c0e974688404d7a211433e5d5634dc1ffe4052473f3dbdfca9058a6fbab43722c9f1824c7fcb66bcf8958e77589c68fe63ecd5068acecf6a59f505046ef038fc40360f07b94ca9b01b39dcab50e652d9b6f4e8e6785dcb1d7e7dc7e46569b617f4255f2cf90f0d15e9bead4be799165c57f7225980713d60970e577236774b00265e171e97992d78e48284fb852b1fd0c771f5f24b9fa2de243518404abf644f874ebb7f1d717733ac23d81cb222fbe1a5e3f823323f7800b670aed11a889e507755a0a1030e76e0a1213b31d6f7270943cb9d7ecce73952be4f6fa74e8965ad77218b36d0e6a8fa53f912cd9c4e2db251975a67841d735ebc3fff352f3836c11720cf932f808a0b4519e3625a6e7c673fe5b37ff048928f30b0c1fd64fbae35d7e1e2684772967de512417299fe9fb26f253d1a8a0f336eac404c72586a187629d36818d1235aecc460a180f365040e7fe45bd9b9c7b2779f7d1336a20a21fc9d73c517551943b25383881fcf4845e5e29194401808bc247ab5aabcba32475393418df64bcaed69230959a1a5fed1d327bb7ac02d58ad0fde8877770998f4f5bbdb37381dceb49bb340baa9101f4440bfc073dc522e01942b640de82894a76d779f354f438b45b474f81fb8962ff9d93b5f24173eff465bf1e6d2929fcbfb25471c1cce6586fd3df86e0d3290878ee6fad5efe33c5307c1b27f6a18c7955ca7aab06217fc5867a2ae30e7b997dc5004aec35bd2e2afb26ffdac38bd4887488f331a89ce6065f18d16df43b0249509bca7b5dc68ba9bd2a133dbd3228b184b2640b918544a364757b2c7a5a8cf27f869761c06173c7df51fe5bcaddb17ded11783fa724c025fb58d12989225e02bc8b5aa644d60e0ec7636939d3d39773186dd5d7d4c083138e8a7a6b07d9a1016e70bb53d36c8305de28fbe1c15d011c6b8e23dafea3b4f584d41ffadec87c75fcfe616f546dfb348c675d5a7ac317fe4f3b0b510f137c5445fc68dff43718e8d0fdf502ae1f9d243aea36ace84d03a32d3e3443ee5903b639cafc21336e9ce151351e15cbcb925c4e772fe0f243ea936b5d48b883bd70a6c80884c881b431e9e76e85ae92b8016432d7f0fc7fecf7547361ecb9b686eba95a7ca7ddc853ff87fa6fd2d8eb3013c54cd2200b79914f70ab11ca4c6ffe9e4957ef0e67ef912d43f201ac98be79f006062f6712c77a1d6f7d378a7c966baf0d272a616edeb7e4a538ecbbf8f3dcbfafc7b86f1b51ef87d75099d44e1316467d32f247fb7d0c4b3632f8a8ff73a1a949f633dd2dff38b5328b014eccce478c22e0126814b4da8b7d49ec1bb52410d55bfd695c51b99cd0079835a3fdb046a8839a506dc46b67cb02e592bb23ef716b6d4322928e676400dfdefd79e99f5ac329c676fe108afd344e6fb03150bc0b9507302527ecf1d96c41c523799984cc059ace4ac202f9e2eee84d0f2445742779b22c3cc4733f403db5b56d4a1448e49560189562a1a05e2058e9773d08fd0d3ff59f2d112c39e49ac316a59462d1ea9c030e1e85f567bbf227aab024a341051059f1c1b51ec80cacf45091018c0926410916afd407373f8ddcf781801d275714658ac05951d2ff9bcfcbfa3799d7e0adfc9a0ef7def63419ff3ab3fa7f964a72a1d3f2a4ce40068eddf0a7de91225f0763010495828ee0bd19da0e39d078275395321f3f9cfb69ada425629f7dd4ec78c7b35956fce58ca2b13f5ae618b436deca100ed1c3ea7021aed3f12264d4cf28af18d5e453e57ff04fd15fa86032bf3cc7d688034cf4631283631d0e4e0a503ea39840e48f7503ce7bf8e528afda0a9414ea557d3e0389a7a93bae0b435eb7e32b9b6101b97c5e64be1cb30d0d945f0f3ab63de6a1fe2b09aac56cc34cb84b3ed08901e1d8e4d9db9fa59200824805d5c0a008e67ecc91600e681fdb7000557819cae82cf494bc5ba7fb4aa917de450d2e127d27dc5703d35b8b8efeb81e1db88fc6de8b16744f0b5c86a3afd33e67df0d73654ec386c98a1b9882d22afaeb27b8e5aba5446cda1448ae65bbbf50b374e32b88063b412aaed5f6c3ffd17d07ed1f9016248864a49ef3dc5774e1fd70f43ba2aef54d706f67120d192eb28db831492de9adea44f6d0e4764283432be8879a3f9fc300fce1dc59454c07d713481bc026eaeb71f418d2a3e6ee8fedc361538a6c22195dcbc5363206233147f8fdd40be1e283255c52cdb8922341e5ae24839291019f6ac6669c25b867550a222084b2c898200e65ece9ace4a94135d2793d3b1402fc31d50b37bbc3e01a297bf8523d41d66835f52d4d05424736e519a7a90b5eeed8bae1fb2f7b8f5629abeacf6735b66203a1f55e224e16c7c8fb6af8f18cd78cdd0bd07fabee8491299856ebeb228e059a5a4ec78f0cc7efa081acb23a46e7a6b12e8cdfd39a0b58c3f8a995058a3187d569e6b0bdc9bd88667ec91eafc0f702fc2bfb63d0098a759fd4ca15ddf707b05bd5a761d30c6059c2fba88475826d6a67080753cac36bae6433a1b39cf07848d5a67821fa5e182c5aff312cb714b3a399cf97f6e84e14ccba1e16b76afeec16eae5403a5a464dc7d9924c5d9bff2f783b8892955334ef974b9c11686ea7cbe34399e9f21a4c67f3e5bce16149ca4bb0f539e27833fd62d6bcb57a10d1767d7787ca5a9263f8ce782686d87eeafd6e126eec6ee7af2fd753b87139f5baf06a9a5f807b615cd3ea1e46f719fda620ff684fa81e2aef54b5d4e5d9365f529ffa1473c434a92e6424adea188d26a4bc68783f76da881cf36422ebf45a98c10a96ac6a9d6db00033e2ecbcef1a400d58100be75d8a4b5e954c0573cb8be72eb9a42ced140ec0fbc98da46487a995087d5fe8ef6516b9dcc1d5442564b293c1358e5aa330ff1f46ad8e9d8ae5236bbeb2bdd9fe96661bbfff67a9a8c9b8e5a405bafe35f928150b674b9fd5136e0b577f92a4bcf963b82ed76afaa5028325fcb192e24a7772ec6f802e72ed1874bdfa6c4612d395f3da52d24600c315fd9bf4c27ccd8bb3c3ea9c7f9edd7bfc1bc8cf0241ebe872ffc753776383ab0c0d8eb1bfe2869fb40559baec03aa27c74d76ffc8ecf7a69970c8584f294b04ee9a485e302bd630821e7ff050c49f9882f10db247adfdb2112c2589e1011f77c48e0f219dbf85e326f8a567324b857735efd60f05edc7b7e21d260fb551c8ac95d02c228f065b62a77912471aff236be62f193f8c151b5b152a131253820f4a6948e78a8e6820550d8b10b79048431d9f981e6a648bc246b13a33b944fdbafa49de8781204d9b636115e5df1d8eab3467142cb613b98421be37cf2d0f2991633b7a562ecf1d9535aafedae848392459478b8c4e2305289445082f963c6d5e2e4a049aba2240d673f03037fa9ab1763445e387581cd978464c959b1b5333e7027b649c4da11e26c43b92443c9a5f696c6c0563fd849c3ae0dec65be4dde2f588d882a40dd51f4dd0940c49d7d0a9c5aac1d96864e5b637090083b61a62e150676846f92545ac124002868df3c4f851954e47e0b6c68f376abcb4f6e5689ac0483399e5bb7a2b3ebc8ee859b6ffb5d6d61a38111ab08f02ab1941616c79740dd34261aef8fa0699eb3f1af54b08461c142d9244b92a1e5f73201240d81cd7feaf9c889d034fa3eb761d05a9d86715ebf8903fc2babca4176ad70fda50da2b5d8549f4fa05006cfc04308fbd86a5880b2a4a25d046ee89f239482179fd39d9f0fc528f0d2596c7943e81a1787c49094351632eb9854935b8887b2e6307c34780bdbe3f1d8c981e7acc172423e3dbff5d15e441c39e541031fe761fe19500ded46f95ee74618ed87755fafe06e2e3d21f20d44538ba9783254443dd3bcf7706b6bbe08358cd015d5381331969a2eae952173b245e009bf45b02ea4fb9deb028ec49a6e612f87815d6fac95b944a77aebea521c57e99e7cc9cdf715ca3ea33aa3fc0efffea097b68c765c4aece0313882a708f10dfac0474b083e2ee401a89f677c9c3b6272892bef06d2df961f545df5f208cedcb6278525f9744ecd99739725c0b2bf3137f467f17b80b249347951c265e214488e3cdd071c3a03db689cb88b52f2e9ef4331e1305ee6616ad228ba545d255fd5f568a55adaefdcb1f17c79f4cdcd59f136fa3e282b846b9f6adb0e38423300098e33848dc01637d5c69b61ee7bb27deb8595b5556beb4f4b8118b3eadf9ba357bb45e13c663db3bb4a8206f4f732c432b19d0d248a7b7af3975a51f86fefc8550ee841d337d6bed71fc8bf94cadecb7b3d88ac2211b58d2c30284ecd9d8fdd65ebc33ceebf71e7bd98c8124a611702099be108ea9c49e469cdfb20f6c2fc512ee44f18eb578f9ce358189582446bf6826f2e99ca84791f10c36b7ee07ac5d1f48ae49c55ba806cccc022cfd8ff5e1759f9da056e64f39bc5d2c19f374f6cce7b423c0dba3304c5ee838f07bafc5df314fe6ba232a829f8fd5eb62847ab61a507acbe03856b8d36dcf4b603b4c5fc0827df6c16a3e88ca53be9b190be0945044e1cd30453ce7a4dfca6201a32e6a8c5270f43d95e80ac2ee5e63c7ef6f3775aa325138681c66c69e21a55d1c1c8f4b887109b40bf1b0904afe6cf398ef489169b681810abfdc41901c3dfb0fe076060cc85db03421213b4ee5de256e286ead6bb2839294eef21e9f035263e240c6c5c6bd17b8783f06cbe15de0e6d9e152cf97717ff36c6f5064b21d0b1eff05288e9e9860553f150649edac9abc41e49c02d53a9e2dfc0a9d1bb0b391b3ccf7436b7ca05f0df169cabc591b35320ef7f34b0d5407c7ab89824b830d0caab3ddc063481e3d6bf604f92c0df2d9cda8e3ffb427 +MD = d305c4ce0161386004c267eaa17180eb2433280716c894ed4094c2597a582da1 + +Len = 32984 +Msg = 0f5452e6b51540cf219998590995cd7f8785fa40b4f217fc79f07322a2ec5e0834a4261a0177463779dfd958c33c55730dd3759f20167778372688c511967d584572c336d67f99f807c57c71704be39152222d8928a4d8307efef3a606ecd637e9c410825bb6a1da72526aec384ae1a2ff7a0948f425a2eef7829c0daa77d26dc8a4f545b9a3c6a5638e891142c2b66ebbe3f123ad213c784ab96c4125bed9c18b195ac917cf71208182c227b73bcabd2f66cd617b1e10961eab498c9e4954fcda2b27549ec008147535fe78be3b8557020a854b85a685121b611c343da1a9e65ce3442f7500f549e6af234a804c4f04ddd80229f44003b3eae2ce822c4d4247ba489aa2c6179e877df91ae625f5908b68d62a43ef75f240333645be90d585e79c630ff4b68b6d96e21acc94d4bfb0b54a0ee6e09fcbbb829d666b3094c2dc8ea83a8c6f6fe6c83dbc1a209cb530174a2c881f492cccc441d17927205d9bae0389d8fa5919af1945b302fd45f1d22d12b54bbbc7bd007644777760d516e8630fe5423ffbdb6fc77770d94dd8b02d5bd48e5fa4a07aee395536690098e532637a6582459ddead3a999ba7f79d19c7075a5eccc01c8c1e763ab656eeb1f2ff150cb09ef2874af1da73dc75e3dc552a9b6ace9af9851b1893bca046126866dae38c6fa1300046c40fcfd94af9dd8bde7dcd86d235214e65faa39c415404694834c44990e651faac41733d2e21e7e469174b2d7c5e3a4e8c11b751509ccf22d3717ae775fcc38f33d828ae2943448855cfab6b9e5b16431542c0687ad20fba020077f057599c2de13cb6d444473a9e2a0fb7ea4214fd5489f48588c8de0d595d4a830d3fe724fb3dd5e5598615124f6e3e354f6f7139a96e8ecf5a40a811256db765e6348da522cf0c7de2f89514c2abc3ee452e5a116b4f7a6686ed196349b9b0e7223e3365ca1f47451aa0b087206808aa7286b7ccc2b11f12b3d4174aebca9bcf6965c1ad19b6ef06a6884cb5902e74307e7f70b3d51ee59b89ff8b103426e1e665b220c53a1b6d8831b852e43b846f4a12216d0ecd1d34c8b2755efb4b57ebf4bc2c36f553d627936136ab5d48f261bed6759725d1377462d33e765458e520c116dcec858d7087efde0c3d68e000b2557182d43f0af20d319763bd628556e7141cc82bbc0f70f4635142f24c2b37cbd78c500da5a0d968fda3eb1a6ff834aab775fad9e4025ed6b962deb153501e120ccee82ba0ba71eb8ea2de74c1d906d070ca7adf438dc394b7b8ea61c3783ef0bce05114768044ffac3a44b5a15155c108c34e2621d9259826fc6dece5ca1dceae6993b26f1bd90d1e1326c45788a8e447078095c80d0f49cdd57039016f4512ab12b7ebd5b3b87badd68b892ba587a3f43f18137f52060f76ecfa305f8e3e267b83c4a9ee6f6ab2212b7cec65d07a65d9121c8a8dd09452e7e813b946508e70e663c2d30478761b42b900d54c330a93bc2996e13bae407ae973c3bc00ddbf5ab45aba515df6641dd7291f2c29f3be93662b8d00d11592ef44321321d35c594aac12b30b4110bd1faa22e1d9443b1fce9fc10acf972c131ac0cf0ad008f5e2aa9730b5e8faee078b814d4fc4e531b4ac2e931435d41c4a6125f2b1b2e6d2e4e13d5fc8d3cfb9cdc8255270d654fd0596dd48b31dd20cc02d3a420eadb718e6576645f5b10799943e5ed84df5d8c89af27289ef6cd725fbe7c8682caac1f27174da8a436bebb5e655f387ec0abbbafc29b6fdd10b2c8e85f5970b10924e860ca060d7bbe9c3364a75ae0957fe43fab2a4714d60e21970e6c16fd4c44ba4fc3f43c2d46313d7434906550396b7b9b144ca6b20a5d9e5f3a4b1186b4fbf0b7d92c5c62845d16e056a70b120af1f65063b026b1fa6d9da3e492f5977b9d4cd318e8e357b690cd1a4351b8a05ac1d8e221db63bf26dc83e7a5da2fca10a74313fba06d677d5aa49473270a85d94987d2c754da14002905ace6672c7904b867ecf9e9673c293951c16ead5d2ce707a7b4dc82f66b16b177663ee0683ec84f2fd0bc3a4d204abb3923ae4b3d20047aaceada0c352eeb247da617cc8f85fbba0f619b09abce623eef5dba8736e9d2110be7384732c9fdf06cdef991fed8ffa78b021eddef90f052d8b20bf7b6f4a079495c8fda7be6cf83e9835cb732b244861754c03da512959589e32b0359cb1ff1e99d392c5cefb07d6845c9d2d7bc7ae468bc179f48cd9255674390307bf7a149614bdcb3625f713b6d78c94b3a320320c3ba9d79671c97311555c415b9e4d4be44cad30628b0625c6d9ec3a6e6bd6df9ccd2ca627caa14a708bc3f19803d0aef08acc4ab1c7d044eed4a516c69d92bade89716d0f5d08b35b5d979b26b4ae44a21541a08ca3fe78160edeb024fffbcdbab7a1b4b5f3a7b4ba1200c76d798d15e33735ba59e538c926d0c091ee5bba1f199ee3048353265875f325fed51c162a9936d02181562540066273408e7776b8e18760e3e0472ca475482fc7c663f08aae5b395c6dbe6ee49e0c1e456a1bd8a1fcba40dc349561a2a05945aba818c33d08ee99f384e5bbbed616ea29ec1187e1507faa74e8066f59df6d9031e301394c9137176f2d92b3d497c7fe737a202c80c71ec6356262fbd11bcd38e1dfe7f8be2f7ddc57d28ffe30c76983ab7e0f6f8748debda60b71b0133ac264430491a89bcc0a1033daa245da5042a05a5fa7f7fdba09b74f4bfa332626923ce0bbc9f2ec4f24d98cad9430d8189b7e0785b06dea07e5dbb98bc72f12c585e93f6a557eb8a01462e8b32c663409bb443a58f2785616bb526b319e4ae001e593e87bfef307a722d1d2543490f60aec1b7b4034c14acfd244eda7482c97c0f86164548cf9e14c954fcff872552402742b53a540f0cd1a74d8c8538d7e3fec087c3a5fc73a4f77b7036907b05ec8db9c9b49efdcace8dfe736839f34e8e16c5b0cf202775b5810ce1627e9b452e97cac94e686d19da2067487a6f207118328393815a7630705ff23af910646da90cdec3db0d2e66c037763f3bab3cca23008ec282ab554e45d2cfef730c6309ec4b6a3bf313ce5c1131bfca1464c4c42edf4bb05b994129a687fa6168b9239458d1f1b41f12a9443dbd887bad2244f9ac4d4edf74aab65d22ee165332bd02878f3f09aec7705bd9b62974b65e6a39d52bc90cb2566641534b838817696eac6deff1169e74b362671b04191cb0b31fd11dd109db89426e9670d6e43085646db20b86ad05bf523986ccebca113c836387f303dabd75d5aaa143569f311f34e2fe527e41670fd36da34c3f2c366a61a1645bcfd3cab486620e23913d9b8f36889d65265854decd6b67297c93fec2c455f0b8a39995cddb3137a20523d26e0feb29a43d6631b4a6af2ce532b5ccce220db78a0da0b11a4a94b83f2106683417773da0220f9019d5c57effeff632f5011523508c6d8f226b08fa6b7349df69f3b923e95298f286f13ad7ea02d9c3cff818beacae74828ea31a98b78a62aa781b2d76d06db6db847f7bc22429c4f1c76d94f3eec23a5db78925fd93d4e55bf6f440c105d1ddad8ae704b84ea36c4f63d7f66d978643532593d7a380c146666f159f7cea0d620b02be6244ba3e243f3dddd9864759142561498c252efe0a4c390596250d9f0856946c10d207288133bdd59ad87ec92126f310dfecced9a58ffd3ac133e0f52522b8769cfab61117df5c55d6ce9e44feda43903f8510e2aca4143bad23f4be4ce1d774732937763c94a1e509e3365af1d1db3e276875b7842b266eb69fb948e43689dc1fd81bc673f616e9a0b0c789de90327114116db6c087ac7a89e1bf238f7338140fa1c3905266340a37b1d23fe987e1dfa21a797ef63c0eb573b476dca33a7ac2def0df526c87719d2b60e70bb73b51e04dde295e79dac5c6206260e2c3feca5eea5fbf8b06bc68391838667bcc2d1b1973f6edf3efc68a12fc861dc476329f4ede48f4b8d58770548ac2d0fe9cdf95f1b0df47ddac9194228489fdf01e78722907371f5a3d7b3285df7ac702adb56aff8101b75a54beac7b350892043122db6411c48fedc2fa272392dab926835102997108cd185cc01b93aa6c7a6f62e433867a5bc6f1eaa6b6d4416d17e89244e555ed5ee99649286a02413007a0081f33169d7774f538e37a1e679c73b77ee38bcb626ead329e6a202d95fdca24b546328b17a1ea662242d95881f35d118dbf7e508cc2889bc107c69c1520528bdeebba5a6565c7d33b476d190d1c1495635b358ba904fc205583e5c44b4201340992430b032d6dbae8639dd685516aa1842939e36380787eb060d64ca4cd86cbb9bc65237d837c8bbe19f427673dafc454cc03ee28cfadf59611408bbe3d23a153dc892a30e254c420fd08724f5b647c79962c02856ced234b278d07f41b98538c752795d9d48702b56f334d9a151948571a0ad6f5c2b68654164447e2e33560b818e8ecb4d4a3b5eff30d1fc4154ea671ea28c1e67baaad456feed2072e8b476b2a25956e5d0b6c351b0e7f79b665255e791e59f3f229f69396e52ced482a761a4b662662f85e743969bfd317830d33713954159ac0c4f0d31ddfbee1ea637b49df33264f10ed8c414199c129f5975f5ebd526b47620c3a6887371ea16fe6d57e68050b6f416912f15504b02da8a4078b77a1f186405021d84573b2885325033c78644c60043186ddf6b9269ef6b3da6bfabb1ed4064145b6eb2e11232eae82e872d97fbdd3d7765ba90f9afa7a373684a91669bd0e402478eabec0ee7cd3e31709cd0bc52adb6fef0e8093ccadbeba7a153c58add2ed3c82b6be3866a835925c8fc7773283bdb22c89a497920baab490d1b56232ee98fc88e194ee184b542f0d8741487278ef0b889ce42cc70e9bd37d40ea2cc8dbe3f2e00deb687fd0bff7ce82d3060174ffca77cae7a9e840f285a3e5630eec055eae2c7e2a1e09d2c9aaf404f5266c02508d9e95f7b5822d5f599951b88f2905598cb2b4c9a542cc11a7327010301eab91b35180ccd6013e32bdb1f84333ec56751d37644264b717188afe76bca995cb33da350dbf6201fe0d20a26bab83c27321ee1eef4cf2d35e5eb4bc6b62f96dfba760bdaf480fe0d75f30df0e59f537d5f06dedd821c6240c44b2e0d0aba603b76cf55fe80f364a74995ccc52b71ea919512b0891695525ab7b142038ef45f38904f6a04a7d5b9b305c02fefb7b56b297d49403bd9c3654b66236ef26b64fb9db0ff303490b065fa507c1eb5aff33d0ebeb3763af22d04da78ac9a20c8939d347de590d6640bd044d3d2815e3cb4c80801583ad08a5c95d19651aed6ce07abc3a00b72314a6f625935c94033857e74dfee417543c9d682f6671c935ca54a8f13c079bf8e6b6383001f6a437cb3dca95a2c750ddcd625311294142ffa74e4afec86365d35ef6f9b0339bc7281ed53cf4264fcece3dad00cecc4416bf8635b75169a4a366efd1b12282ac7b6895c6d4e5f3ddff8a0fc60794ea0ac309d9c394858a3bd3181bdf050389b93f5dd27b18e7960251b5a655ce2fecf5c643344058f7b4a9735b55875bdfa332919c678a7f85874d63c5b3c4caec5fa59f0008648b44836e12c54f633c1389b90088a74d8f2c322fb43e9aab9456bc9acbd4d88891e840fa3fda4beb0c5b87ad0ac7145cbe584129a174dd72a0fb8e35cb261725035fa7fe390eed9762f4379f2ebc513083a61ebbea2cfea277474f171b6866d2661712cabcd796f0d69a140fcafcc05185723566ccbb60c38dc669af4b302a1910ab0be029c8fa7fbd99a76f9dfd04482a692faae7a +MD = f98918c63e3a9238e78dbd5bebe4e47eaeec0ae1627387dcd2a5ae4725f7e47c + +Len = 33776 +Msg = 109317556c21c969eda65a94176d7a11462c9ae18a865b6db4d4466eb125bd0a1783313ffe79968511d214afe5a20013898b0aea5e39b8fa282f137266c6a015df72919a7e483d535fbdce0e2ab13939a0ac74497367e35c5b8e131c66c4aae790e89e2e9396a61b00f1ee778fa00fcab3173ec47218c3db7479ae365a27c5ca516bc0c3e66cb9251cf6deb3bb796910ec55d224035442c19c784c86e9f8d8044a855f201ed15eb8da52048a58442e5171ed9630cd244754fa1455d6bc3ecadea4bde30ee4ce7d1e628fcac30b0748d66a67f4b2798fbbdeb7d431ec7a0185a0879bb555e06afe9ddd3497287ecc9ee7004c5370ae9e84a5fa414890cc49f0921aa83bbdb9adc97e73cad27f599a18cb5a221a3415588bf2ece1028c5a1ff3fc866bde0e189fc6094bd8e591437a9ecca274b3c456c5b80cb43fc8a7cb8a7625f26d060fa449de858ee63726e5721830fdc785e818edf43d7ce000a8c893615687341c8906b2f73c637d3006e78d6e4095a5f86a03d925cb694e1458f8419cd76d4a8644e5e2fa74f32438f8f0d0894492957411c09034ffa5106a7f049c10f0cb37ae08eae2d0766563b7c5a8454f841c2061a4f71a0a2158ae6ce593aca3e9c981fa9dbdb95f8ae2c21535b9f3a94759cc27ec4f808d79a9b080514e7a3e0991b2d4ca056f91f792caba10c8e27fd774242eb171c9a74ec19f108cdc0dca994851a3586a0d4d079c020f1e801bba7a93addfba05fd3feac803835fe76d2de119e7cf10969a7a0029f27a2786a54079dff1a0d1b2253d93e562418f14a351292afbc0b72e1e022b602364f28588fb1c7f77dabc204788924046b2e70db61cb9a315dd18dda2ccd06a1c364823cdd2aa9bc7f644f86e0a2f02363e2e7aae78d8adbe90fa492cc0376e6556f1087bac6d5d6a5a31e29faab153bb4d2b02944cd0707c41241ac7c6a795872eb5dd9a73abebe7704b85e450625a5c47a74e6f80e713da565ff978c66a0709245c4a330ead6dc69f5a8a44e48840a1946a0647fb66be5d38738e49a8c6eb73a2adf64c65bb0c904e2598c84f6c2c129c3cd124a7959b8f4f2880415404694e0f718af0601cefcce775587677564738c7e5570f6bbbcff703467768b36bab21d370ad24e71a4002d1127258458db99a7e2c410f2f21851dbd941dc7ab45d674567208f2e2fb24ba74c48d76a15ba9c027db372ddb10e38ae3db176525d815d0ff3f43613908c57d385351d674063f332cb8e07058ce11c5dfe3104b0a6e8ebb389e0579d4894bd285866882a4d7a57af38ce5e08ca338561774ae7f404d69bf6959f6439bc6de42c32677821b16001de61eed8560d980c6f556990bb1bdcf64f836bfc67706a4545afb29dcbf0b7ba56b38a168bcb7109cdf507af64308e8314efe080b4e93c890b2cd239a7afe3b99eca0a990898411603f2cf949e075dbaed37878180ab3707e336410c433366b81d01fac05ad89aa9b7cb0bd0b6f4bd163ef6eb8f791afc5a746889660d2fc31e67f7d53d0120e04d4fea56f44d8d3f1d90ba670b0cdcfee9251005d783e98b54e618245f89e5a46932dd2b6fd035564978dea4749a45a13c7be950e1361522044def62a853bb7996071013b3dd8185125df00e5cc009a5ecff30f513a22719a4d5ea0ac80d06b25c432f8a60c3f66e10c67b0f340c8d5f5315a36cdf4693f4af3494971f045bf1146d8809e7220853bd38fc419aee454007559d12b491e0259bd07b921dd82fb866fcb61cb7863be8902be02fe1d3b5fa8245aaa12412a03ef3300b8654f6e67abc57363d625f059f0225b344b95b73d14c5c4872be5738a32de9c0ee54ff34ba9d2394e6782af9e9abad020a71f3f386ee0ff311e3ce2df4d45448248e4f8eea71e83e9259588d5af52848fbbc1bc96dbfd7370924e5f4966f15ede36176699ce2fbafdb96864455672df482f8514a085a5880b3024d311a66854e859ef2394468f4752ca032937b8a34915aa73309e945fa6cc9fc5248034348c695674182736c690b0016cc1f3fd6c2abcd492f8d830b4357987393cdc39dc7028d8ae2d9ac65affdf06ad12c14c56ea0656ea54957f2b9ddb9289016ddce966ef85a64b3420d5fba680ce06e9cde8f1bbd8832d1fac4c46ba66bc5d7d46e2d8840563583e69bfebcf18d584b2aaaaa8a3016669bcdd9f98deabda37529e4f2db001ed3d00cc9e392075cc7366082475857a9af2b53badfc0e0aec76350db9cd3b214de3c26ffc4c6240babd4b12dfc12bea27ae52edfdd8142af9046ebba720ed0c8a31cc7a608c5c20a849a9ed62f55bfa1687da1b1795b6b509c845cfa18e8e6bac0e65165361d8be9dffcac43577de526e6497ef849cbd5025aa02712f7fe5e5bc64d76b5c339cc1a1c7f5bde1b17c99372ccf8fcb54f0a55392eccbda5bbb23c01a68a0036a72d2bc897100ed09fc7879c9cb237424195c9d684c02298ad8ccc31861ddd06e2099f72d87b6e1e928963d22d3d40876fe1d0b146a41a5740489ca460a4c4ca86ebd599b7f0746b8c69c8a1f2ec90eb1698fa47f8eaed4810702df8caa12fe7e26e7ebbca11aa2de9f3169a8262c0e3c205a708f0071401aa8de09d28a5a6e590ebeb476341880c37bfee1a501229081eb27772d07b371a5b0c65100f34a25a2f0ebbcb2822865cf22aafafe08d51de7949ec242ed9cee8ce861bdfe2b0aaabf92150b59d173db6a5bdebc9c836d3cd6e16658b4f8533f35155858b47ac3851abce5aa516a2169fcef423065ba1176b69c28416d7101ec0a0252270a2a9d3f193802a084955998eda77d5d42f4ea52f08b8b8653a0cd7d7176f834e982bf5f26cd16f5d89a43eea549384c1b7b2058ea77382e50cce07bd438f28637c9526da842c6b137c008f58c9d1a03d995da100d27d6414b3e616e9a11e725de487df20760bcdd8850d0350a6dcc8c628b4003c1650ec82b3f79dc2bc97f1ac4476975aaefa081b392c235887ff5efa0a57cb86ff788c9da15504fef28636cd30d3d7efbb719a39fce077d6c9c3e327a2ab3b77da6eb4f3f080d4e4ef63b23f1e42295617fd04d364cc695208c4f5fd7641089553adf5f4262d962b0faae480812404344116d865f5328060a17cf7da199b8b55d7b0e03cb69db117dfd65e1ffe0be0f0c339757022d555694056795bf12d6c3ff311d42c2673ce61dc708f9be96c58222aef6c608207410251dbeae1917903ca223b7250fa22366f8203e952d7c7c22ec4933de5775aeb924287dd097ef0ea7ad1a82b29b63b91b76d0afbf34da0c7ad3cef6a4d8742adbfbef4b0321e4798c8ade26f34cf1258c009e047ebbf79c0f4003e622736411fd1137d1509f3cf973a0374cf00b969041fc53e5dbaa1c556b99b2ac5f118f8aa8cecbb6bef940b5e557ed9cb0c19822c3d4b7f9dce9915f1547a1f063983bbe639a72a3561738d66917c7bd3b54400299ee92e98c609ee195b3995937f2b1d4b6ddf3401fe16c8388488e5899aed6594bb4ac5cf0f88b037444618fe20539f529ff1734214023e5c9520a14d3b5a24e628ccdfb12979fef3961c33b6cbb1a494568a628641aa724b49e039aef53eb0a65e0bc6ef92623ca6c748505defa9ef7918168c3f1593e67d1924191f86ffbb5dc17425cad8e5fbf95e470943fac0b2896b024aecfe331d6a9978ba2f3f018764f99276e37b59bf33d194c9197b8aa03da5ea49006a2c89bc316ab75eac08b7547ce334b9e851f91eb7be1a3ee06c3b1e7f4ae129f7c4adba77567b1e4c69cdb4c1e2d9beae532bf2872f6734d7e9e5945d80bdca15b01c1de1e88feeaea92d0e4f1df0823bc1ea57b6655a8bb0882247a74839514263372ef77d6060314b77b99af0f3852f4296d6cbfc4eb418cb93a102fdde500c5291962ea186e372c5105f2c086d37f749c3c83e50ce4e6f289c28f70e3766e1f2bdcc0dd18e18e1aa995778c0c82b024bf3d4940f53ab2223be47da15bed651e80e390ba9c0511c60754b17c69edefecd99545384696ad0416ca64290ef5eea972575ae86d82c719b26a27f664bb43b4346f0036c99fe0816499cb70c43410a84760a7cf5301b9f9f4fe6163c694b56416f100a044fe527f6b7c3bde4452d3044825fdd7152aed4f1338e82c57224be4c843cfe0805a0be775993bdb58f83fa3bdcfe7687da46d04584143b7df0a0f1c928ef55c455c14a2c81853cfc6ce5d6eee85eaea511841fe0b41fa6e26f709f5bbfaf87e5aac7497ac220b22577b344d227090c55a2d6f27745f96b8f38f40558dae62ad89f133ad6bdfec3cd3a8cc29a3b86061608c0166dbc49efc107abc264ed3ba5098d35ace4c767d8502fc2ee8b784e2272bdcfea287989aa44361854e479089d150fcf0e1960f4666ac206174a7fc9f7d82c66fc5c102131755eca4b7c00e56977911fdcd92d4d04598bb6db3bb4a1ecc2ef25bb6d12a90bd0ec220470074a90adbbd8a7c88eba28b8f765b8f3a93e77df807ca5dff3999fe358c01e851eb0a923da69dd5bf7c45a159f932ef6e0283f6a5aec5a29357b64294f14f81f99b0297697441c081b03fedbeebfaba9dbc79a1008e526dd4ab70f1f19a13f941ab188125d07b2514ae1ad986f4bcda10ec51e5d0507ca60b5e4e73152e553a7144d5b83a6255ecc19f5dcc78bd7f360fb89429dc9b48358097d930c8561b2bd18dc0a470d1d6fed0ab912e5dee4bb6e148c9d7ed18c0027b7f9791d1ba6fb4a9af61ae8ec5064189f93d66fd2f2842d0c57856cb6eebf6443e12fcfa0158bd40d1403c5ee8ee9e34b2e9de20261fc222572a0e3e46d1f722fbd2da09d4df2edf1ce6b8a6df95fd18fd1efd8e7e371e202565670e487bee5fdf5d94c7da0aefceb8da882f5504477e03622b0edd793e1258b4c9021bf0c441113d90fcbce3e955cca416c1f04162aeec40d06aeceb0b40179c9ce468385f11b9fa3870217202bc80cdc824585638f0df3d546852976bf18ba7487ad65ca916011af3eab2be234afddc081f364ab08c04e320d1b785476fdc5c358d0e63899a0f27283417cf35486b593d7b3226b1c984b99a6cc5bc88003143cbe4b755e6e30ba94114f7ad1efef2ccce00f3f125f187472b03224414edb2e573497a3baa3a1e26a553fa61c8b4b8be257622b3f34a34163b5c7625d57e89c99382ff1cbce77028bcb9c9f219b2e8b7a9a56675031db4ad33416a67b2fadb789558ed0004322836ee0d0c68fb3fa83dc255683e3db12f947978a51392abd378df93edef6a636ed9a3196acb55a520dad84dd0168950cc5477c9d0315fd79653dbfba6f2d6c16c9743a38c240e2a7a1553564505cf40b37494fe93c700c74f90ef57c110309547fb36741a7a1017db769c386f14f7ca0d7c37dd95df5dc324b88571e55260272a8ae454bbd642b46d8619bbf74ae93602f5ca307f805e123d52040fbbbe4ebf3bceb60a173f8c4858cc33a685b08dccb966b4bdf8b3ebfec3e6d4faea5fe3a5a24e1260d7bdd61dc4d152c3c04ccbd45b575d4da97feccddefd5dfa1b3a05208892611ca3580879d81bdfd851288c950f502da73aec49c8b51e06d7f6599d7a15230c0722190ba5bc3440aedf4cb658feda8c955202ea3771d1395822c394f9708879e9fd07c5e999a4df0d13be33654f7ce2dd99cab762399e5e464880d0e6c249128adc2b1f8c97f123bd9588e9042bbf9748b94b9990360edb690f993b8932ef3eb1658b01d8dda573850cb2c27dba2a139e578d760b90a819892015bc29e9016428433154139447392e2142a5172345bea71e9938196ef4806e22fc3a0f0e07eeb51c25fe86e360dc817b42791b8f98012ab376c503f87b79dfbe569f84ca894321996de979f377c443c3b928d125ac42f1c12c071158c46aa69c2cd2ce4510cb336113fb33eb14593fa0b099810e08eac2eec4e48ab358bc896385bb35a623eeb51d1f +MD = cf17b0770212e87516c080aad008d50cb5481044626a325be730d54a66f66662 + +Len = 34568 +Msg = f60c89481488d65c26a6ba364c5d602134ed1afad5c2b037609bf82873eba67d907f6609cf6228c5cffebb18f2839e55ca8d1386ce0174685237cab6b65f9caadd1d05c2e07709c004f129f4eaf635bd067a624e52de9dae44141e02fd033f0fc32d8ffbb18f2253adc82c539b7ece61d0fe30daca22d0111e781a95b1a038b32bf62b3ca9721b89b3ccebbb6de31147115fa5b39c95b79ac8ace6f63bfe2e9ffec1020e30e79b67fc428fb7c8eca579afe6e86032fffa502af8abad01e5cad922d63cf8aeb74af771753fcc146333ff94db2269f328413c2da391436d1db46b817d00838baad240faac2484b90e62dfa6867a5746d83364b7f7bf3fe66d935c02fe76353088d84a802e66661fb5db23cf2e19b095d678d2b13a5e29d39f10b58ca0c7990319071ee9442cfaaf2246d3f61d26ff47ebb98e04b5958a9e79d27d09ad1b346d2504c31f369ec9cf1c4af50399cac9c4df9e9e96b08de9aec482bc606b9990d7737a41084ce65ae86a8f93ddeb2d98737ace0c51736dce6b47c77b79236a34a7cc0fa18ece293563d5beb46e5b76f3be83f2e01c455ec13dcc4ac13c1cb5a847f86bea980392e3a6257f619d30ce630cc4b120de70884b8c19b29691a0a3751dbf37240d3446eb1b2279a152b45c6fc603b4d6813a12f3c0f8a80260f55c2293e91b57d7a970d52993557c752d499f5209a209ecec2542412ed40e916407370f3dbe8cddaa362a3742bafaefe4bc7b199e24c207cde8bf7886ddc10c35cd3cfb84c9cb077fc071aff55124a621de8c8389e208ba2784f2cbc76c24b9b0d5babe86e31a3d6f3732f875c201832cd659f99483e3ed402063a3b8283d801d4839c00bb58367c3c3f67a8ab4996e4ccd6ae185b05b8862e59b6923ba164ac34d3f69dbe70d6dc48b439dfbcff550caeb48a425107973d3fb2183cec9b7fdeb0d5621bd20c037b7b8a4c992bc1c0fee577aab3c4c4497db897d5b81fe2683ddaf05507b08a5aee7719e6615231695003a885d920bc5dac4b7385706016dc2e15cd55edb48c3b89bdfbbdc4dabecc848bbfb21eef60225d4afd9e1247994a43f3c4cb3a688233e1a2a829302fda5920e035a611ab405615596e860a20ea1103e76f4b7a36fcb29ad797bf4fcc149da99392d84dceed6748d97ed3c49699eed273355d39ca6c55f9cf42f65029ee1883286fdf2fd4c7b48c5d771dce1329225429af56d57d519ca2fc5254fde3c7483211250124575fec34481fcaa3210869fd7d45eef9ea3cd51ae11e51b56440ab5ae04b14e7b1266cf54bb140d03ac81432e0818bf37b8ebdb6003f82f335eab052185a50d69cabc533bad436d1dae8bf98f5fa947eabd7a528ec0e5f53c31605bc1bcb6b8d54607364281103349bdaca941019bed815a839d807334d33b66309fd7d26bb5882e4f62b15c03c54d81ed3b8d15761bc2360da47e426e33f6a424b9abee4c6d4a299dbed068a58cf1a45597bbc3c03877fa204fd0551a7c379443928539e248e2dff832e6cd7df0ffcbeda6133503ac664dc486bdd5c016c4de9510addbb4af1af968a63db3145a3da0bc4edc90c6de58d802318eeae9696529221c6afb4b08b81ff5021b41f03075cbca7860ff92381443e1388cbb1cdde41df39f06c12dbc85f8a82ec99f9bdb6df41f0de5a8ee2164356a83fc71e1da08630f7fc756e434492d88138ff69dc4eec2c4f3b4b362010e56a4fa2933c0c898a37ea6f6e2f8d7cc659d97b46e7c52bfddc01415497641db4f97865a2a420f5d8449fada8cef0cd549f0a3822ec2ecaaee1b564f92b34793c84b0dd67eee171faf7765bd7d533d2e8188203f5ff6fc759ddda3acb5a07cfe68c978e6564c48a5cc10cee5ddabd19db46ef43428a1e9e9910fe272dac648e3d818b0d2dae50bb9821d1c9bd38030eb8aa809a9b24a1bce73b9fbea2bab140cc0409ce23440c62179a439278759c2e0ad4045e62479faeceae1d55ccdd9463fc64a235e89e6e3a65ab00cd122beee43c23d9232a7b7ee0a9f915a10ebd84845953d2f8d045dc810cd467de1cc371fde74a8d7d7638a5ff239d0714dab2e80e6d321a7b8ca2fdf277970749eac4dba776888fc1b7f7db56a61a7025d356558e929fe722706e38eb30735d952eb8728d749e5e8472415583bbf1cf686b20536183edd7a22de023f7b1e9e9443b06ed1c6bdc885a279dcb02dfa3a33114a948439bbc5a6f17a13594867b18eb924881d0b6c38ba76a7592607bb06a246249ca91547bfdedb039e44e28a78adfe6f607570003d6f09d5142093a98a2b6c69a40d748bd20a29a12c67112efbda59b87b3fbb1edf8ca52c9607976dcdb7cc4035181e2e0613247b442c9dfb41fe112763e4b57027fa90d46644dcaed72cafd2d632dad963df11ba6efa4d9b52ff6fe69fcd269e1c9f12f40c3d2a15b1745b470fc37134f2573b85323aeab336c7bb1ab761d650c66475b4115c484a627519c66833ace6ba63e90519523ceef53c3dee33078c2d2e31ff3dfc0800f4f21930776aea5198c3ec6262aaab0bf198483c889c2912dd5beffab755a818bb6a46ea839c5128f116d8efc36ead1f6727d202107a2e2e095584ac4aa5a65949d1e68d1286cefb9aba11d850ebc040f6a8c1d5af537ea95925da5e1c72698b432fe0624bb1ca903ab77d6533ab4d354625fffe8cb1814a74d2d85758475976548c1cb157a4aeb07a1606de9136bac700a573c4d11b9fdb036465e124a9dee122f182c25ee7e02302de938a951271becc310571a31a4022ade46b42a82260965565fadc8703cab179170bb264c9d8e251d09d4c2c35cce91b59d1c30e39475b96f16c48fa7fd22288ca589e29e359fa388a239c94f4abf6f4cb7fac7b77fbf98d9cc04fe0e3623dd6fe61960ae65bd028677faa03df4511e1435c451962e438e16ede3761b8e1cb0cbb0ee22f5c462aca709abea07f02048ac752d510846bdf3a6fae48a485b794d10947c9c1cc81d1c6ac5a1f935b4b96966248a68865f6b842a819ccd2d24b60cef1f494e8bf768dc324a81705fb868eae1927fea88bef899e200509122807f7aa7afd8ccbbc8c2569de6dec1ee81db579f6d5269880bc1bf9df5c488d0d52210ead4af6934b2b6362e48fe705a976d3a0003b6681ccc736f9ee04d16a0c94a5a290c41d67f4bb0d533ef850e3c6fbb0ca3f41058bf576a14654e7ecd2aa364c0d2e51487040a4ece7f28e6fdfc81213a0bcd04ddd8533268919ebe1ed719edef88cdabed6b64fc8c40a3b8b223625c5c97ece84a004658b6a46faf7e2e835230ab448c8c0df2269928de5eed3989b8fee8d25f3fbf8739990e2fb78da9763e2ecad81ae56418696fa8476de1b77dc37b7f2bbe217ebc718a4f5d5aafc0791e5457f6fb8c266e419a3f6d5a422595085cbb47a991b64c8d04d8872d671bf25f2be33f92e29d6a2b837ebea880fc95f43d3db485f30ecde8934a1b943604789d2ffcf0657b6172a3c5b6c9dd10a4c713776700f7e7e0a710a014b923bf228234daf5e807c8eb3e26cb97fd6c93d6cee2a5d7ab63c2c46e91c5b8be5044fe95d2a76e54ee5dc323412f92f7db6ceb03ee5300125e26328af87ea6b9ae79e129e33fe6e58dac61a87f4c3817ae1e5a0c92d960e44b74a39291357f29a2c082c4d2eec0086a374f542dcbd7fb592abc5f7cd37a7fb050a00c0874a28cb1bb4bed4e4eba4c0870f4acf909230171147a6318bbcd73212ca05dcad6a1616fcca509a1da161eecfbfa295d8e89c86a5e2ccdd31cda3d128b3d1e64b60c36316746a07a0b63ff8c4ab84fc7e68cceb97a4bd65851115c08dedeb442ad3389bb2d8958337d346c6abfc786c48b9c72f2fb4032f503134e7899fdb60126c7ba4181e5876a8a07f40cfd9064d00839538b53b26a559d4082e66f12aa1cbd39668906f3c48bcc4f14f776bb7076c703ff07160ac2d6aa39a7e6a0c5f6e1caf90ce62f3c8613be8a4d9eada12025526cc3eab4c1f314946f1bddf180231cea972bdd5d1842aedb3a1c7714da0a7824d4409aa260618bf6415d50b3c9c51a968431f3232f8099aceef0254ece75cbd8eb03bb717ea4a94a50fac37a1b43675950bdbc13dad6709e09671dbe0718acc9117bb1a47522f90b3e62caa6fd248fad7d3d9ca1b2aad03929ffb4e51c69a78fd81711bddc62f7b33a23caecd7eef00d7a20195f3f741508c118af4666cf2897af6450202ceb21cd04cc389e341934e3c803b6aee9d8db875f4051648edfcc7b27f1f16ddf3203c30ebab84daa29cadaf756f9034a3f703f55153fc1fd11ffa4a23e7a097bce1a3fb87dbe7da2a72e5d88a8550ec91e9f8b62f5eee129ec2e9edeb85e857b25d19da293bfa0a5f7dbe5ec665f23ef0ca605d960d3449de4f5d41dde136465bfc6674d7b30593cb2500ea32f7be53460203958e4815ed182d1eee04e4d28c422751739b2b4f9df6d37223d424fb531ef9a90420f7da26d5c4f49d65740350ec44a47c7d8b214f67edddb2b6d2f366fd161a525303cc1b9c7ca7f60a7a13bae3bd253a84bbc3d1a6dd093ee0eaecb26dc31d28305230f5f5bdfea0fadf48f3aef89d52b8a37d4c3b09be7058552f62f5687c2ebdcd51db68efc2443d89eb23d55fd36f212c97e8afdbc4f028f9049c1e6bfd0b045c76f67e7abb89dc624371e0589137c83c58cc88b9e26558c0b2886e3569670de8e66ebec6b118de519a06584d9d52b4bc0921510de277ee9183506f2e87ecde57ea6ab13b6c984b3d360ac5a5c069ed95f20e8f3e8acff453bd19a9be21408193ca12dd42b3b22b1060a4adc8c2247cad5bbcccb4a31571f0a90ea34efd0bfe82ce8fcc41500e87b160fc9a1e6b2a68ee8c528fd7f4f16e4f8f54e544e5f65b0e3e0906a2095366087e3b130f8324b93fccf9610f4709f258b716f70a9ea8a21e61a711cba729d1fd0289a103d1b9788765d9c9c4620805f3687a6206f3cadb9980927726f23acf78330dca621e92acb09d194f5e0e94af08eca8ada2ab040c69e3f2c019b12b68615bf0199432565da1bde27b451355f97f89c960458dfd3f75d2ee720eaea7a4a0c0591301d5ae93420c5bd6e139f5ea4088050356635e7ba595ae176caf548c1daa714211cf42577bd4ade79b48198b3431831f3ff3cec9e1735b369b7dda27c163602d2de7b9b0345bff36d9076be241cb6c3b6706f63011b61d5803e0e27e72324d5cbbe7bca755eb7a4c043f93fa50a0e7e036637eb81da41b040c9f1497195e60582595f243c6ca45b085b839d84af61d9514d40d69ed867ec21e84177c9f30c3a8d1b9048c6f408aeac23a0486151636e2691f4b4c6aa36d1aa1559435eaf09bd4291d998a39976e83258d9c0b9b48594f9d0de2687a451195fddb32c8e4e6136593885a460a151b021578aa6fc2d3ae65186677c506b292ba9ade9a3f745950e279c1eec7cc04b9effac5d6ba74015eab43f2b56cf7331712e02673a181937dd34291ff1565aa6fd33b3ac7f5981891aa847841643310c824387a66f7f5dac0c056c03239bf50663542a0262816616ee844c2c6b5a491ce7808a31b48b77741321d16313ac03dc69d76be9a59d6241eefec96ea6831fe5196b96a399cafb229b1ff5ba42052bbb6933f5ecc92bfa9c947e2bd5584c19e7807b49569fcc5d2a0c3645632f45c105ea0054663dabb37957690ffb0113eba6c5260ec526ee121cdf2b4d084bdc585e74b303f083ab217ad065c23a3188f9a55ff24399dfdebe5d9c5579142837762791d281163b88a92377fb0f3d59f9c865a966a42f1aecb67ecc4b561134e59ef3b9d56841b5f2cee5c67f335efb14dc6a3a099d0f78b69ef2c7836089f27537456532060d934807343488db298538aa159a518ab569badc4c468434d8f154d38f2c7ef6c44416e6b15a9e632798f3b61a42b519bb7e68030da1d42f98b212f8435822c71058ddf1cf913667d3a6c484cabbcab68c275c879971d9dd43a52e1a04a0b3d37c320b9cf180d755a82f399ab97df8ed91e4f6fe822f2baa645b04cd457ea8c862703e6cd991f7b92f92a16c58f1d62b8747c5bc5a42303375343566885a87f26d93d4c +MD = 10e88348b55c5c0683f4d4d3ef56c485be9888bf00806040de25204d25df4ea6 + +Len = 35360 +Msg = 6b1d94bc0c6e45fc905c509ea667853e4b2c5a8848dd914efcef14d95b12247d3766b270bfec0ddd453bbe334474b0c3a177958a3157844b7c0ce7e2c06894d4394d3a2aa01cff80f2706759720d78b5f1131ce64d78c69f38b4584e3abe45abf938f291b9e6630e1f6513b63a1a233cc468b743a4269e71b85031c5d2fc7d2b0090a44e113380ae54818af2a383fa7fa0de30493f4a53e9854638f18f0b857cd5be1609b0e99f891a2c93b6b53045a710dd4ea125cd2e312600367779d1a5c5012811699ff208c6f8cef8aa79094cdb99cdd8f35e95776e23e4f2029837242f0a385c16e534038e77cf7f75f6f75644c51697e6f38c76cb055c3638f5254ce17a55c1b98a99d8091d98f1bf35e0ad091b205323eb99726e52cfc8c197846303d8e606fa9708ce5e758f15323cae97542354d3524ea3b57f95a57146863ab2bfad55f48013682eb6041db57415475d4a6618e11a259485275345f96fcb31813b800953f406a3403854aa972dc89547156bd5432377532b8d161928e36d4f189fd96aebfd78a04c0dec9f84065b7e9cddbaf4c2164cc8efdb6588c64b747ebe1440e0834472479a5c546244a6d8eca6c9dcdb269bacdb1836c9fa9a4ee9a5bcc23ed3e570fb80724e155d9fb746c6ab0258f43759a074f0c8c9d76d95d3ac5ad05aabd72a1c331b0bb6f75ddeaef4f4b0b6a6bdf92f7bbdb9ed8807c73a7ae0661dd0221adc48debabf9745c5175dc9f97f587f2262d8c831bd73308d26f996ae0eab8ee743a70383b8a7211489eb71083a74467d40735957c201b08fa010c4cdb5a2e23a5939d28f2a8eb7730d8536036f61dab2d134b753839a4e74afa7b1ee9a1ee8ba27e492069db4cf88a9135e13a78703681d042c4e88a7d3e55ca7a63746886610b4918d10978133fe677e325f684e89472dc9fe705a8e0889aef6ebd0404625e3082909d3a25daa7b4facfa103d1e33f9086d76e080b9b209ad7dc8e210c2eddc2c924f7a45b0fba76886fe4dab5fca23b6d6dcc7828e9c0c612485953f6285a327b6a72b09e2ef2cbaf4853f3c79177040ee784ce9778d3bd3d469105490b7df017b580e745b4eaf4ddfd90d77d4df85ad9b91983cdb4c3e0a73bd7cd7b34938c3cbac4d1083e0db2a2d40e0e4d8ed0d05c771d20322a2bc0eeac90050320458748de90d65c36c5558c803e00cee08ae50595e23c7b3575de822d5c54877b0e41ca95879f981bcc8df966a34767cf7109739a1b30ef833ca9f0229f347e91587c30641b6572696dac881bc05aaec83dce24f82a96358feab3b710db1d3f0fae7728eecef041bc3331a70437a31a474ba3783482d4b3b7fa7c559c82776f429ac3128a04a89c70b7cdd4a45bc920e9251a0bd3d6950097f6744a1a37eb75d687f06bca7ef6f91355d19f90bf25590a44a24e5a782f92bc693c031e6de1e948008fb3347073ee30b7dd764dd450394744ccbe3cfa3ce071cd241f1d96e34ff39ee1773c9ba7c2453851f7302dd2381c8009e9ffdf2580649ccd0c9c35780075ad96265752fb3bbd61cf70ec4e13dbf690ea40179971e90142a74a1eec08b14ad73e5f1928f6a125ceb691d697adab61f1de6f28abba90e46943661a0d2db8ff861a7006a012a90ad9a7c883acf81ceb1d56a5879867fe6a7b11cf122b5fade044eb07843ae7a9d90d038377f09ba6fe9e03a1d8f1f2a82ff2a3139bc90706b99e0094366bee2a1ce35a613804f0d018de35e2711af324816a67a21b58bc39d7ebfb9471b58ea042f72cd0284ca03ec6689dc604a5d1da2b4ce019257d07ddb7d94c86ea9a41b2f7b2fb6edd5a123983c77beae815275f7a04acd72e884258f5c073f9e5acbfc887a1367bdb9fdf56dd7580cfbfdb5c1afa3c1e6abb1d24420e4bf25c174f51678f4c7ea58790602d4fed2cc2e07af8a3285dc5523fae061f6dd6582be4049ef68b0f347a85de3d1337b8d082fe76857e70e4221c40bd604790fa05f7d06f011be773e8494acbdebf31432c7e6e507b038059b52742bddb6114219c3e60e1204e41150ab03b0bbd67d9269123b49b51d8c3491f11da31dfd263d78b6e19fd54e4046d2c3dfaf061c38bcd9f0165a99274c61ca04a6bcbd6420c96440560264793cde6cd50ff2c5448b5c2b695f61dc55de55ee96f7bbe57067ae856a2d80e50d3ea0c5e87bc121d7e0380785fea6a530abd8a6acf8ebbfab63b4843b4e5f8190b05586040b64425c9e1a134ddb711d3f1bb29a509193709c7ca209bca1e75f8cf9c55631a7224f5b2cc8fac8de0a6b0a97aa7189aafa23cb1b42bbf30f62a88881b8de783744715df40a62fef0b8b9198589d3602b69fec1a65a43ea7e16830db0f6c6e0a312cfe95daaf4f8f7c52cf54e176adbfc28290587b348a9d74c19a2ee46b572d3d49287cf6e57bddc77ee255b1cdb05057fcd1f24157336034c91cfa3725335afd2e1bfb2203355881727311360d1e32fb61298e7486c9be95e141c374049312054e51a6f8632c9e2ecfea2ddaaf27f60141ff73713dae070caca1212793f6e0ca1c51f6c69fa20d1409cfe23c4e6e081e21dc47b3f660b82d7da389ce5dcf55d02aa57129033623f5929d04c74560e7b6933881d94b72606cf6d163e4bc9cdf9bfbc48c9c586981380cc9dc083ea1234ee8ac984da7638e3f8aa355e74aefeca20227cface9ac935fdadefe6b949f396bc491218d94a4a039bba1c66293191b66c057b0b7419fd8c18f54d28dd1cb9881a99e84159dc634dffc453bc30fd8da7ed8ccb667fa83c0219cc40edb90a6cf14fa2d56721d38ba96ef163ca51b8fa84e9e0f671b7f18f7e47594f9e13bc15bba48b60f2fad8caff2e69d3f6560be035a9288496e49cfde9ecc502a1b4d9bccd617d124aac93293788532baa059d48a1758dfb3ccd518f294e37e15f640a670fce9f71d7ffabaf3ac4d7f44d281739b29537e5ca3bb74c27b5d87540eaf72069321a0702bbc965ee2a1fb5478520bc4f504dc9aaf6763ccb6bd045ad1047eec3d7155c31a794513c0250f6ffe561d860eff83043c63767feb746d90c9ca3da0503b9f6cd8cb57d0c939540df0f8195ceba5fa1fd73a2d6a6e062bac657b2ea17ff2e5f3f32d3f1472614194ecd29fb7ff9aba440c45e90ac2f4e6f44091d28e1139b1fee6197b4d303f50cb4e501135cf403c17482149df9ec2f80ed7a8b9c4c8628bc41e1a8cd9a72619e7a20b0e44df3908101756b06745f30762871a54d3ea2ffc0a279b04783bb80590646df763b3d796b50650cd204cf76d85fb81343a0ad45b378f35427752579c4c11f35d20c1be708c71a9e0993862c2ef9157c865bf0251b2a153e775af9756713725bffaad502decf5bcab408ca78015e51881f55b3c58222a8163f19809bcb6509f805fbb3f177d1f238d94ae482d7f534e015783e4d6fc77383859aff14771daab5ede9fcdd5b33a58f83431c733b28852c70abd8e66b81402e53c5c107f3a51e3abe5bfaed105f3d77b7dab973b25e0e1338d5cab8fdb8d5bfb0820d9dc8632d2e8038f34a20bb829a7ff705a9c600953e76e05deaadd4fbdda5b92afd7dc19e3a3c6a301b13b13b9de282463efe74e35532b3d6a4033d7a30385261519a253b05f9d8f9896fa7322be964c55ae223c0ff72368010885c1a617335fabea8f9ca38bf6a96bcbe072dea9a83ca23fb75f3e44051a253c397a3185e4a3d6e2ea4147a96084edb8738f582ffc89cc4d0d346ada3ec83983c57dcfc007a7189b48ee174879a6a0f53a2529c201b8563eaa37f02a4ef6c057c058eb661abe036c21ff9cd9908327fa9ad0be00365cb29cf4e678a4942a5c20a0781ee89c6d09ee1bf232ed53aee5411c1eaf5b28cb73d093dc6ee9cce76f86ec77d4b81b48ae998d6293f4119e6b51346b584357a91c720d764d6a57927cf31ab4a75505b563e70ccd1a7e88b62cb38a435349215a1f19a8308e86b2cff6eda1daf15fea57bc5f009e40fcf79a9bd074332aed3472ee101ab7ccff6d047fef18476d3947943a8a0f5291e00cc04b4098c749900f782bfdcb686314e4b48a6ff48655619bef40c08f96a7d826abbd8c4e5c29e1f0de3b4b40cefb77c87478f8bd04547955ed71bb17b6dd35d3d1650c2b7e5653a709ae810157e08876a8fe01d86dd4d104034fd22e5fbc9992c5c458b6ba695580aef827838fdcd77de67c23dd1f711934c53dae39ddc073f1ed7dea567cbd682c229aa74e032ad54ca165d7419593a256a7bd97d0dd83457fdcd449a151cd2bf80928a8d72e7512715e5d849c7cc71cf82f622779bb7f8e7b0879ef2dc632e172c70474a57e260f8a91c5c4541185e987c0ade59b140fdf91f4d153323669592af0c0c34f7ec83cd6d0310eef005a888400035acb63ce8943267d1e754eead39efaeffd1bacc62b049e11dcf3c5bf8a7b7204ef6127464c1d11cf995d6c31e13d59e48ac094ca4a82500aa6d8ee1f5fec7b152c22cad1787e4b5b6c611ad91284923104a4a32f1bde9a6e0524c60489459fd68956eb2a9ee537a2f016d74ae8134867f35e747f3f87e1ce705e0a19871564ab9f93f4ac3fe06b38dce52df1c257c10bcf446534f60caaae60eb0698e9ea4e16d75073c0dc0e5a8f7b528b8841c0b06f00fd11eb0feb69705f62683d2222d0aab922f512e3bd9a1963f57c58d6fc7b3420eee6fbcd82a2d6e43a8b60b05d70c9bd61d51cf77c8e591f347cfe0259a5edb7a070f1bf90fb24680a0c9e1508c3166cb3a04977d9cbd115a609d24466b4ee2db83c776664b6fb8327585fe0a33bf34f9ee312f543b713efa0bf902db21cc80b7ca5d7528c8ace9e38fb2073bb4ff2ce7a2a23e048f493f5eaea922eba620dd984499bf486cb1041a5618a7ebf739771dbc1d6d967e8c3d0bb3762b7ee19220055945fdce21c52f60327e8423e3b53c23a66b6411f2845f8b8028c69cba6a72877127d6c0ce31923c8bad46ea62baa482c654ca7dd277ce647f879a4e19effaa5f409f3285b3e5736c96e96495c91d7c1869f47e306aeb121165a509be66ae1e74ab1fb0daf31a3d654871c47b783fc684d16854a75713147af6b8f8c09234ed5dbe79778b455a1a594c07fec5cd63cff827f29ba09087660b18000286b626af80f756f7051f1762af2e3674033d2be0f8fa3de3ba9baa7f484624a77f26f5cd74f222afd6e4c4dedd4b67e4c24c1ab1fdb4a4ad63dd0ed8990d9168187914dfa01b57127f4af4c77a303691718e92ab8ce3b1592ae926fa93cad0c4f131265ea8ff7ebf7c9629b4fc890d3a9f5946461d040e878e24856dbf2a5d3e87c38cb2e5fb04174d6ad63fda925620ba50880a2491f6b8ec23ac9a81a8a1454ac4ca84edba71aa703d8cc0ab08cbe440e8da703a1a145de36b0f1961a24769c899523d369a61f96392afdfd448c905c1a6d010d408e1e7027f1f52f5b3ba2c7fd5d65447373f84b5eec1f5eccec805cb0eeb5478faea04a7b46fefb45973fddefea962960d74cce5b6759b6b275354bb75aec3af4c971761cf7348141fff6e74686dc0b989ac32519e0d48c5def583119f7cd6cd8a639fcf04cbe49b53d6febec7762708384065a7fa2b76835229017bd0e8167a40ea1e2e18cc5db0a1751f4c8054ee3895dbd7574f42bd2a2d586048be62fb3bec95032d60170c0a9564507c27ac9e912ec907ce21d58530cd2e2006bc900d6909ff0f4b6f1e87ff8c2f22ec21cfa0c86fa2579b0666572dbdf4b1345fd1c5a8058262e6ba554a061220170b0350ad34d4f2773c6177bb877c5694601cbaac7f8bb9ceadc65ddab4b3f19d6740b20c6cfb33c730c78c1ac494be5a0877bd2a35f91fa2ff179ab291ee2e366f7e6656e74ee0c806ad060d6b73b6729bf55be781da2e7069228e5a241d1062a1f100152a5c740a2c8697fbe2a5c96ea92a193cd9ab60c75a7bbb49c1ed52b2ad5d01bfbc80880e10e8947ed0b751beae6a67c2b3d951187187a3fa11cb5fa6d026ddbef477773462479e0eac04f9d32a5ad9f1970069d41cdadaf38a33b1afb8c306ab888ddc2d8f281713db3b2c5c8b5fe241f9bd358adaf9c2bea1b2d34dc5d61f0def50115a060e8226f4a653bb600e134c524c2ecd2a48fdc3dec54ef195b4894e7f4ad12a457f81d07ef32a6046c9ef794749cfeb895cde9bb7f78f4b8702c7f5defa764eebdf7878d09dfafb8e37c9413f32839686b9f7bec3a61eac48357d9c74db8b1867c2e8b890035fd +MD = d46ef45eb47aa54032fc8ea47150d10334b208dc6b7ac5e09e8718231e87cd1c + +Len = 36152 +Msg = 56ee7cbb745a2b1f3a77c8a9bade1e4934a08645e7d05adc2742ac2ab093384b3a6998c34dfcb71d57d688d3fcd7f86ead7b21ee7c60c06c2e02e9fe92c9f9db1247cdc088ba319253d99b44a9cd1afb2e7d8970c60e0896a8aaad7eb5817677070e8279cc9c81c455086ac46ac86c38e12c26936fe41aa2bdc35f70bec39767414821b7c2a990fc86ec5b1be7d1d56cec13601f1ceaded894d4699d589544f2e77c114212e944810d0cd710c7ef40e177b7a0db77273d80566532cd290165612133bae26364869d13f0476cb22b92ddaba24c9028a31de12aff22c7d90ee2fc19f4845f5d233f96c02111f7528cb4a9af5bce06d76668443929a15511c4a30bf447d780a92d55b53b269f794c1a8e8dac6a8c052b7904f1ab6b173d792c91d6ddb41b0eef8ab242ad8757ba4bdd08d0ca58f055cce3db30a74dec48b84d92a5fac4b8d2d6433c853dcda381f5de0bbc30ab60bd63acd3495558883e77308fbf73fe1691075fddc5147fea98f2247d9707ee460798ddd683de1354e75ddb716d71eb9d162ae67c4c592593c5ebb748aa76a609f9127ccb286a06b60b13581ef71c11b628e6e10060354808d188a0523da65d115c7a94997e20ba177140af80a59bfac78ee357534ad06fb08470e68598bf9ac6f7772a2ace29b6e0e28de67ebe172e3a11ca505c525122f3a54c91c702e8e69094b248655fad827726a107ff8cb733757943d403bfe1e939fec3aa02c549c8d7f9d2f5327bd3a746052619ed55a493e28ef5ec30dba74dea557e371d270bc803ef803a7968c3acb347c1252f6205d6e717899fcbecccd56e7324430071566e7c3e641e226fa61928b31c32adfb0382eedea6f6bc3b770a2e205ed393ea5143aaae25a916d8a4770c12df484f68c6215ea9f5f7eb10d1729023d4f1bedc25cef6076ce33bebe44dc72cb26ffdf0753a9f411eac41b30297fd462da4698df997c610e0d57af08f23c1c93bb09fdc3856196ec81da46b3101de4f12f57c46f62783922a86bc2ecc8261b125121d7439fc34f79b51fd81863699072aeadf4f44059656f1fee7eec4f011ab169e5f009db458a64150353d2ac098361e8e7af00ab96521de46e4789ef73981b65b4dc88f07ed415f2232e7452741a495e6357171cc5abe99659c14831f3ff9af51d014357b5b91a0d0dec7fef1fe1838fcf919a0c5dcf3c963f60a9bef8cdca688ce2bb79a0a5ea96020257ea8365cafd7ac32bf2c528a1649d9a10def88f1460930563eec627025dddf48edd35036a17f3802f88a26492a1e2f2202a79b0234dbdfddf2f8cc8eba4c057972fbb66fb6fd83d27166bff9aaeadfd5a1a02ed51b06c208fa46ae8210b7790035a7cfcf975877e95248856241b5d1021361a734a193c01e7e5e7112d02523255f5f031dec98fb91c4b8e04b9588edf17f7270e56e89c369a8c97e07a29feb3018acba235cc6f610ef3f387d4e6a1bea0e5cefb02bf0b22f9e0e3c282d2cb96887145ca790e852affa64f5c115644334e8a68e5f80d074b988b5123f1ad47516d52151723009f6b60db07fdd927d4d1834d8b4b81432f34f8f466a12109f0782295b024ce32eca6d52aa3f996cbd21de1b7bc885901d1639db4aab6bb89657f4ac49d5fc5161b61beeda9bbf4b2ca7cec416348c9b9ac5be93493c10bac04eb48673334c23a9a20a0cc8fc15d9d3c82f57315f96deb0e827dfc987c9bd26d209de618502010f7680d2fdcb65bbb96a4bfe54b16a016768bce854f36069cecc3ddc9c31e792991ac668006e759ce67668df0892d2abc72bc5d671e89b68c22596aaaba1c37f517624f7594f0d2263d5cf22d46a9484d91a8ad1a9ce445f0ac35d6d163b5e6f3f73e1a791d4f7f5376dc8f041a17935a41d5300820e21f9ac90d95066697f0b6af7479f2f67fabe6a289a71d69f4966301d678b860efbdcb27354782292f0fbdaeb9c08bb6fdd2505ed8fcc1bcdccbe86000f9b3d3799b023531410d21d77e697382909bd5469d10fa3ed2a9891c9e6adb093582ef1c51e081a623efe74dd75aac436cbbe7d666b9034fdb2d6540a86ad133be9e1a545cd68af862a2ffee94f1a790b7646549c9a9187078d5c7f55458f134e76deb9e2674bfac8feec23651cef3eef31db40d207188453e2b27873cb5a971629ae976491bae370dfbe4b178631fa2c2407a9d25a301328da61a92cc11686d928d8a593f5bb52c5f72cdec933e997087851f7623ade1cd09df07847cfcccae09be44d373b592f106ebe4441cb1ffccc5541934b4f2c879152e74f8e9c834a73ab5af6170b9962996cfce648f7d911bfe260e35442213cb421cf95c7d143eeda7fc307fc0b85d3a8186f2aa55f21be2b48355047bbc52480332eb2bb15149e5c41a7eaaee6246b859a9e7922aafeeb56ae4943eb6121253fb08f0e3211ff4242168c06f5427e10781b113c85807980893d222207dd3c2837c07711f46d0bc2d528fcc399c89cabc8c351d9978b98650c1d4a5664d61f16b2897023c8d041065a9f7e89611f8525beb9e5ba2070658327754948caf5d0d5f63601ac77e2a7f71ca39bc016ef4164a2265545e8dae8c0226da55f00e2594f4bedb314ca4c487b625ad9d080e2d952bc312ae4b66f2805442fe802d044c16afbd60cc386b6297b73efc322679e54d65303ebfe53d72d3bd7e0999b00c411104d1b962176c754e09888de1c93cbbad7b0c320fa88bbff4821ab41915909502888e1d9976128d090194eb427cc12143f1c9a52421bc3a7166bb6674ca3bc869af5535c8b0e81a5753e68ccacd91b69f5ddb0083dd4962c8bfc299334a684bc4edc96a7664679dc764ffeae11838dc1e13b2cca537ddd96911e2d4eb1290af92b85d54291d1b87b7a933ae3c0921024eb803620ecdc3fed0f17ea1e2bf6f5451b3736b67277e78d6b5342f21fce4e9bfbf2f89370bb653aec30878e0ad3eea8063be1897300ae1730d73e6398feec2df9db97aa47e0f68512b12c23b6899d2bd2daff46fb33b423b16757bf91ec95e3cd813eeeda139bd468e2036797e0a9d56859b87271d9a2b8d64bb48c745eefc35f2d13e58f1efc31d60a31e1159fbbafb00333973fba1fdf87ca7f55a81da2d897263e19cfc8c0a34473e11999907abf921f993ccc9ed49fac2ddd9f95f157275eb6e81203d890339a63399889798f0ff7f411ea804d68002dbdf8f4a3a1b6ba9a233956911713e7c02361e54f23a1a7c5cbc428c38e840af2bff8db3af7669835b6586fe34df2c99ffb82885156598de6ecda7efd2bd0c6e37e05ddc2b910c915b76ee55f41d4e11d32c40af9d95fcb409f7a7496eaf33be9414581a3b05b56246ea23e6fbd623523124ef2ae765a69bd2ccc93f6949671ea4fe34f45a4f04648221d047a8744d09ae149c8d7f3f26d44daf96286f16071cff105cf115d76a16b1d06bee86821b768e8dc15de19d0e1bcf3296aacc8fa42816fd48a6da2966f74a586f52028a1f4776f305f2ab09ccc0fbd8331d1e20bece7117707c23cf8b94b03c5308c8f6d8dadbe6c312380fd37248130415e083c78e81f16ce79f44387d87feaf793652d8df41cb91031509c29e3865822b90035ed6ee0db68f8901fdf03601ed29d7188f933d33f86bcea21aa3416215a4c929d53609dec5ca9d836cbb4f0884a127c27db5229251a2c1433c2ff77b6737e881db3a59e7132f3962d52d37551e65b4eb23a38679455e9977a7a2cf23df5b6a95c14272b93733d90af7c4838a02fdeafd01fcfd4b3bd5b3ba0d9a3cfdf665ebc037ecd8c79a6f18f6252fb819eac04672991febaabdcebc74ae84d56c350dd8ab9f97f084d53765beedbd49872e5353d6698ad5fa33aff0522ae10cf123a9bdb278e25e8340234bcfc20bcc44662dafb2f3cc40cc45d01bbd033d581f3ad0076f444a875583c937a3427994e3fac59672b862c0936cf57b2fc7f85b58f307425c924eef4e188fb5c3dfa557e874a1c4a037dcb9e20186bb24d9b06b30d4b5fae4e34e0b0f76fd42cc0a1d69c46c4896b5f2a8a13aabea3836b8e42c3968629da2a7e66f0c07886b0642206f0a3a30a94e59351affe4b69ecff601f2d526a3a71060a69fb672b79b1d287cbc2c76d068b40c209bc414724b6b1198738687efa3b89decf1a121015f6b1d80f59daade51916bf98809e383ba928c2612d014ad2005c048295eab0c349aa1bb9fe03e80e061090e8443ba8188d0d63955444572887268468b41692e970655ab1f96aa8eb1ad53fe04f401e222a07020af55a2c659990646bbfbe3ef134899cdf923874e31d0ed467ebd623c148bfa9aa586a52f2fe42ae72fd0c3d415dbeea2b1195d55ed66255675e253e5daedc5f5cc59d4f357ee36a64b7261643b3ae4b7dbda852c40e7accc7f154f75e25072d08831bad98e01b9e2b3534515dfeffc7bddf9a737e8dfd406fec8bd62d75e81996db0bf382ee9454aebf5f77f9055966d3bf92c0f21b94ba4697f4643066262eef1595aa5b6ef393d59dce0f7e916531a7a5b9c28980e7413639b428d0bf6a71f979e3598a29e3648816aba1546aca2f21d93700ab839ddd271cf6aa754a5bec9d4e1a8879e70acdaf731bb5e35831682aa23302c1ee5e96ff86e07388cda2a6c4de65c08f7010d932fd48d4922342e5a84ad5513187d475a7c09a0a6f11e6a7546fea87348b9e8df9f95a85cb92a4ad851747746517a58107124df794ded0f8374ad168d0025cf3edb27951f66e00c8a752aef3c36579c307c321c35dfc08a053b743e8cb9bf112f46fcbbf797ffd3ff8423557b53bf941901d3df5343235a792fd68918e1f06f2f7777b57bd8d44195e310127a25fcc058866ca158049ff16da6667ea7f55429cdf13afa12a607c5ec3653debf29a9b17d9e7efaca90a10f41538687b07074e17928b902629bf4e170e270f2c0cb40e7d69e8d541173a0d492abc95cd8ffbd16bfa27456d2074624b27bf9f705a75cc4122b1a35c31a4a11d013a14677dfa74a1fe2ff6fe78455f02f675164243a57e6bea898285610f727982fa0dd13accdfc085eacd629afbee4462919c272f0bcb01abba9a450f4228649543a9942f39b9d079a1ef20ec5eb61a555a58a986705c0d4c8a1223a1066ce7225f0f37c309aadac19c87c0d835608bb719734fb19cd896b54213a88023e609119469425d035ce44523bbcbc54a93a06e1715a11657e8a5ce29c45a14613dd24a2bdc3e67f174f9ed7eb3c81b63f860639964281e6934417f894ec4c588194ab56b92b248999d1ea1f4983f414936d37eea8b6b31996372b0a8d86bfc5f247a3b9eb32668c37d5d49ce92b8a1c4f601a851b0f3b8b01e4049d08bd91faf0369c20a66222f39bcbdcd55c8bca29be0f3c715fc4619770cb432478f959840611f33f9d42f05c2034715ce63d2ac989bb0c47f96eebeb3d6d553550b27cddae4a577b125d45225fa0109848a832781d04088d7a6730d2f23ac9444271828453402747b809a7e2b48f592be66567b1f26acfa65565b70b29c3fde5a0dee0f48fa3e149e0d08f19c952b96c31fd3113a46fb0170cc304e03e99817e1e234ecadde623e64f6a613408ba9fedcdc824f9ad735874230790febb1bf291fd16f263a8775da1360fc4dded079b351c5ec9e0682637321abbf1a329cbafa5dff2925b89e7fcff4759305400ca39c6a04986747ef8bad566589d9a0549374e297e951eeca89074f5df2a42ce82da06fbe0e1025c5b81c28855fb3fc7e527ef8bf3812a6b499696c40a1936b0b21a9a71ed70368adefaae133c91010c5fdffe59f9dd0a604badd92452939c51f869e5b497aa6d84e3a3ec8995058a2ce9ee1f261a0f3b761f14b0a9411fd01c96566d36a7f633d51a0c024dc7bf47b443c0b672ac9e3a173489b1d56e149e9b3c5eb57a76fa15e5d2a193e27d34a63cde0658c25a1082ce3c6b510b322844385ae142f28d1c7041bde2f5ea0dfc3221191d7a877afcb205973822ed25b15d8e629c9a2162d3ff732c6ebcb6f27c77fba5749054b7b92447c58e8bedc1466707f3cf2f9990c70ff4bea35cfbd33bf436d3aa3e9c78ec661f57cd007f8d5ded3f8f2787dd8f4c2e40e50f6b0b28c1136d443cd9d136fd03f6be823524f27e5c8f8504173fc709d6d220214b775b927209779af6958a616a687a2c7e70991e318276036262c0569643008792c2f4268c95ee53294bebc025ef1b4a60e4d9c408b2f293fdd913d8e8fdf680b5707b03bf9d08d3c686c38fb2e5025a70f43ce65e9b5b345df539f74b6d82cb47f26890a77957bb62b8ba268e04dfeb13114b2b8fa64072e7599b384a3c35c5beeb3583c0c56b789264283b33a8f46aebee8cda286e12ce4e78b02241d47fee8 +MD = 982c20c2493fc9ae405b74b65a022662c014a38ef3d707217e56e57afac05994 + +Len = 36944 +Msg = 876804e2e7f2b045cb5f6095fca5411b31efe0fe8444400923632aaf48f2c44c6bd865aeb6e8a8d4b9bfbff55fef0ac5205de8f379e7cef6994a96095e4319747ff5ff0e0b8bd600121e62cba1d9348df45b7e80e85c26c3af94195dc7d8e27f2d877b09ce2463503e44f01eacabe7fb16b24aabb9ec71f8cc085cb26df948f3dc5580a7e7fb764ca5f912f767ad4a98ec2af37ed4dcd71e5770071037ee735af328b7f13e58387daf05705dba2686ebdf8a220121777fbcba92c27f0dfe8a3bdcc8c8eebb83d16ac52fb1588d60c27c589c7e3b8904925a5c363308d773b51ffefd5aa747c3689c4d407ef0c8a127d4bd26b034f2ca3780a52605b27d931e8dc18f1522c8622599b1017e2e5432dd7a77f15ff4461297b7fd29de86e8a7ea0d8d45a36928a631eb57375a19175b0bf6efc534846b24d986cc06678afef64427cae8a9844dd8b419a9adb9bafa63dad18c69d7eb4b4827767a8647c8a8ca5264e040d279213fd5ac0d2a4417e5947192b5a7ef31ccc6a60e6f712648cf693c4b3815c3528a25bd2bed75a33ac134f9c1d445245fd8e580d6148fae11591c2b65382f271772d0941eb0577d2b748c99e7500c207b56efdd56cfa7852a302b47384956a4cec089810ebe987af0e8e47a8b91c488902d2ae4170983539e3adeb74ed451e2815c98ac827f0043930384c335ff3507a347dfbea02be9c172617da42f3fe98a372d453e025b56801cafb39d6d022643be8b5592799ba276b08b4f3561f3e644f91dd85f16ba64d891d3ba30bc0261e4e8e1d6892bc3761b60a29d936e5910b7ce1398364704f0f4fc57e1a3a967ac932a31a8cb3d0a2c58888dafe5ded82e8cbef8cfec1ca1c37c6422701ebd99d0f88b63147f37d78ed43234cd5437d70a6bd1b2c3a81ef9a517d21eafcb7e0095ba136062cea2946238657f3f0803c06afa102abc93d3745e6d4d32e6d07604c281ca0edadf04a8712b2a564c28c9fa17e4824804d5c57bb527dd465c552d0e21f7b956c4dbe87b835688a13edc12edd9cf2ff5e2957c7473ed8a435a832a8478c2e72067e9d375606187485b4e6501776420179dfb7fc960665d0f2881f5d0908a5c550c324ffecff32f33eca34a9ebb4a5c977e3156e0443b5d930e78165831f821dbfbdde37e99b4894b3806492c6b29eb5ecd5c8923e71493b75490158622b33d9c7c13185d864e9c76899deb1350abd653d2a7a0f81197056441f07bc12d64b87fd7fc74035e66709d2590b7bb3276245dd43824c9896fbd801ec1d07018b39b6b53bf81d8e9a70ea95508368dd932dd661d379dfd1842c3f4332a9afdac47ed4a3985c745efb67d80612deeef0c880a55f3cd91fc86b91da9c85463cfb1c9b603d175cdb0373ec50c9126694a951fb2129f228a2e9b7bd5862567b24eefe0fe7e63b81b828ae5ef332d1c2f073aa1dd84685d0ffb1e31f372928a10e22e35cea337753924b05302df7c36c68cc4b3939598a6a9cbd9827d5756e504f335702d5a95d5b0fc713106f7c79db843faffdd2c7627de0692177d1cbaa116e9cd38248bc40006749527046356788d92a62dc231490539141297faa906e6ce2cbe35ba1e0d1dc6f3e3dc020b71f0cbe38ee54b8d5a6b3f5d21abfde682dbb524d010f7fbb85475e024f90bd7602dfc9d7bce7f26f17f7a4a86fb8dbb75a9523aca71e30a0dcf9da5202524af6a56a728369066e5556971410b2eb21029772dd476ff873453b3c5a99f09577bd99355ec84d408b2d052acab76ec74cde46ecf5c9a63ea5fd42b7654694dab23f30e8d5130426e76a862b4f190dfdcdaefb6bf38ff451474d65c370e4598298f01ecd7bf00819f1726c0107921adf11f927685d26d4b0e5ca271903ffd92d7a74a58bb9ebe3aa37f929548adf1febc8414d7aa90ac20dffd8090094f57e4bf541878c256301483943408e5f4c77b43f2bf00b5dc836a8f41b7e22ba71c36e97cb174734f1fb8464053426eb56dcb904fd9192e1dbbd2270f918e7dad142f5b085e7557f152cdf46a396a6b5aa997ab85ab4c9eba1cffae4e54bc88ca06781fe167a3f4a593fc96fa2ca9644a44879a7a7dbf8c1d6e9a2ce84996d266bbb93ded1425d5d1a8ed32d77527e2ed06426718979a80ad794aaac4b841e5eafc99bb16ad247fdf5a47d3eb5c0b6cabb6711a45400602d205b82ecae9e849bc8fc0a34379c77c3571b27e1d287e8bec1ebbb9ebc12b9bf4d98bc3e223b184463cd7fd5cc137523db5d83d5523a7c61804c94ef16230d27bbe6c6ef4b0c420efcd86cf48cd9b8c5dee5e177b93afa5973142e03f6b3d30d07c0339e8d64aa51e087423f1e51cafffe3ef1578c1bdb0d16dcf78bd247c3c59dbf72ba6de6b993db74a003e51e2458a5d313d32f5fa702f7f181d53d5137e7fa3f14c17104e86b3a0af6f175814d66624cc9992778d6c1731c4d7e9c52a7eaa9b98a521b31cf3e88c4c766444dae8fa006931808e9f2cf2497cae673deac5438c953dad11fc694442c9200d5b5d05b0b9b00be58358392990e7abb5857adab03e8f1da470176f2f8ccd72fbe6c5b4ef164831a79edf1a22ceaed5bbe503455b792f4bec19958d11300076142c3a7e20e0daabb0275d5747cb783562a5ad8faa051dd16f549d4b52f70b334177e3e9a9df0d7fe666f979ff4eeed1900c9f3f07a900b7136857325aa996b16b0de87ff3db8ab733a3dc07b121b8b32e6302ddd92e8003c29fecc9910e48f9783772c8669cf85b7e252d89c70a7de325f2fdf1885d46bf633f849860edca12523da94b6ae90071af351588a8d2e5675b01b9047cfcfaf2de9146282d10c304df67b490688c4a03ad1bbc8bbc419a49bad85e9d1cd344a51bdd5b00613ddcd809fdbb1fc64b7d18621f491a6b1e419129bf1345d2accadf016beba9653dbd95b646e881eeef41b9b589e5bd1d3385458ffd0083064d37a87a821da9a0d80d43d08b613d464040ed8ea0b7fd3a460b6fd6db4edf1e7f31086e6b198a79d575eb3e144edb38051fbcd5ade8612a207e16e5a125e1830a6008c36f08d35afe9c93e829d8e32b08892e72f89f7255898443a497ac129db66eaf62d4120daa192b46b61227de870f244c4ec905b62448c5fdfb040cf9d44b000633e25ebfd0efc90990166254b3e3981d4f6842b7fd27eb4cd2326c1f9190c1131ee3157136481fe65e7fb1cb194c8ea95e1c7dfd49ec9b381167f50a3a4e56e00c1d5eac43ecd4e408933dcd2011aef9642fde0e71607fcaa0eccf44394d6a75e3d962f65fa2910b769b2ee130fc9f1447e78e74db4b3f0967092155f455a3d88d5f48daf233fe6491deac90b1d30a02f18db5b7f17583fe4f0513c3d52ea913f0f739dd6468c2f63fa6de600b5f96cc48687a5d1aa5f2af3e2acf18429f252ef6e95d891e0786ca6939ecdba768ec7936c206f0bda534261dbe7adba572bf2f867cdb6586d8f1e6f8e0ff89ebb6b311a2e181f8443bf26bd50a3f95656d1e2087fadcf905a5ac54d2e33ff14010949d730e12fb1630d4844c5644cdea59eb08e3a987ce04345e1ce18ad39b0f3f37249391e1839b4b817b6ceab10b9cfdcdf081d2056be94eb0440b1de30fbe0c43aee9b217173b56a2581c0dafd8e3236ddf49bc7d581dbb4ad63ae399d6b73c61445db9dc405e17de21430866ba279172dd23b1181e0943d3d955251b77609a38ecd7ed57846c58dee0cb23fd3bd01085f3f7f7fe4414aef456442b917a23ed71b03f98b16ecddf499c9ba69ce346684e27add75652a5c35454ef3d246867fcb3987d001183e974c85e9bd96d39f16174832d9948d1264b9cdb3ea3fbc79390a7ab7a6da04d29e1032db30495c53ac3a00f5f85fe48fe0f73f419a440221171f4f11c298653f3eda111cb6e3f0f875579d22ce39d3f95d482a5688a18fe486743724c7bea1db05f4b12cb6091a041e0a8d47afa503e536570f8139bade5a03a3c37f3aaf434c900a8399b22b3ffd12cd41d33133dcea089e6f50220275e81b18647f7ffce1fa498618d24fcceb49d01a6b63d768c76e4078ca31d60aef25396caaa42c29d66abef1d164c360a480f27c6a6826b66bf87a8090a4da568277eafaf69ba3b8c9245cc85ddfc178e428e65dbf5e83af330f1340632783580886ac5de8b49b1c02ad9f840e91de8832a81858dab592a5a518a732a2487591c9a809ffe18d66e64b6d13cf74395f21089524d86d1bc84c4aabb2c1ee7635965e72607b81948b89ebe945e52f14e7a5ee568866b6ff89158c4ea298983f27d82f6c5c3b49589d896cb8a26f8fd2ecb95c92bf8e78bf7963f26813014011e0d9b4fc69c9994801676641b5e926e1f2cdcba036aa02fa0dea058e60a6768ce50da7b8f5a101e15b96312afccc74d08e45b4258a53e62dbb0a4e3837f29c0ea8f65018ac5c03c300b875cae3a40a1d03c3be892726a2d9053724ebe560211591264691ea452f5b9520aca806ea572617ca4341997cc96a710342101599c640521003cb2c16d5298d714e48d309dc9a2ecbdaf56dc0ba8092f0fe5b34e9cc0d5046000b0e2ba59b6e2cb333e4ad0ad7bd3afe0af0bcf689cf82d213bfead2eb102ae407fd0e014f9ba5a3ef982e726d47ba1508deac2e049b2b65d033175b581650f818753888b4aa9e78d27a28a3c952abc8559438a17f9a7d22172ae9c5d2d73ad4d30325ac592f59ba9317060f8a729280979dccf15921da7f6f03fcb2e9e75b02be237fdcab7e79d197db51261f0c00c64577d3ae3fd5d6063e5aaaa31bab240a405281aa2a3c716657538477f5936901c59f0728823af23f1b9b8e06d6a74833f01ce58563cdd2d1680c3a85bcad5debbe9fc200ceb5a1826d53116ea9701a4843ef160ec6c700bb3051cddfc2ce31bc96e68ec783ca8698d9fddf3b127a3c9fb2559d96f19cad7c46e0c8d6b65a972cc50fd7dd300df3bab808420c9049f1b2d1ccd6ce42d31bad2225b60ae5f6f094ef6837c251e48b90ae1ed443a1440c1a18c17c1558feedc6489d100cf007d08d6cac290767e2b083128e1080d41cde3dfdefd7fc9274964020b3612d5321a98ed338162cf08d053a8bf281449718dab7078484f49dd897a34105141c9dc8fe119998a9a37a47ec0f80c8a0ff68ec93fdbc4c0d8dc99f8488300eb32b2e6250ae564a3dfb73a7f77a879cfa11d7fcac7a8282cc38a43dcf37643cc909837213bd6fd95d956b219a1406cbe73c52cd56c600e55b75bc37ea69641bc0184b9ce9e76ca27311cf49566484f202df67d35558add045d580126876963832d7c5373584c34238f11e83bed4989bd77b85a30acaefdff5d88e61cbe790fe8be8bed5794e0a44f9a3e77525fcb825df714ab109654d60e5ef458a7744eaeb559b670c378bb8075fbaa8724e354a2c85811581b3d05d0fb08a24010d16ea9b0a807c2ff2c64315b5a5d01f7a26e51c540b8499ac948538d049c87a0fc6366a25385cc53d96320ca5d60ce14c4a0f71e581067d462a6c78bfaea139c1eb54f5202387607a741b489afbad4c37072fc99472198132ea694be9192ce4f5eeacb8a5c29a962bd855462f673fd4bce6dc8ffb5f3c59d58d022ee729e9f00e58c4110095f4bad44b76a1bdb9430f60718c3174c8fd7bc06acd9e245156df6da231badb2e2453163605d7d0524550a43fc56abb1fcb4b561c32264b100227a6635c029ffbb8033430795501d2b53d0a99fe7818f4246d3909c633a5e66a5d4b14c984c97f1e3fe0b347a5ccab21490628be0638c6a735dbbbf052df54fde4ce2ef0bde238c55d9e46f7468b5bf7f929548a717507a259a0cb571051ec4b52a22a781a64a95c00bf641eb3e855d7c1d6b5ca665847d43d3a9050e8a80cb12b598fa626db5130bdd683147a4e391f37a0c514317d078b551ba374384c46fdd366d7216fb0b0e1e9763c8f0637765ccf29fafe8f3db75635968d47aba91b5fef5c8970518f58fe1810e8c4e43e8e0efcb4dfcfcc34e7b3536da631af590a75d3ad2f0988c1b9c3ce29207c90bdf0a454d3dc2e74dd093132e3a6c8bfd694ce34db205351e2440170416c1ca8503ecb4c29888105a0ac4e58bad77349ac3ac7675915e4698b9805a2dc341b777fd8d257085d7e1b1a41693935d0d7f9446d0fffc978431c08166eda6c10ffaaa74f681a02d36c11c4591058f72b5d3b29bbf6728ebfe605f25f9b8b737b3f9e6112dae9bb72d1861953e23c614f898bd6a819442b654393c4c41a3a74db51ef27c3c96a64c444f493e24d682695d377e5a1f70911f0f26219f4797c02d9ed0985c2a1f0c1404cc9ce54b04099c6c16ba14a0e25f4fb68dd4c5127a48fcf6769e5900331336f4f82235bc96a5d3ad9e3c400cd1f26ed1d81e67aa3688e5437acd1cc5b905db9d3ba2d37e759b36a937cb856c2794a3e86ec72d18b1c80e0f43ed4d8199282a85fee66a998736efe74a2e8bc7cb8a1684b797be63d5509fe139c6943dbbc54c36a7b4a016b6bd23ef3d2efb25a51ff02c1b56 +MD = 8e28867538bc2c6c94d3428f05b1458f428d3f950430b09238209efe6bb267d9 + +Len = 37736 +Msg = 6b9e10c9dba055603196cb2b7fd7c54a3e8d10624aad1c342e2d5d75a271f1d952068372e1926f382e0b27e9d628d513fa15426e426bf670215fa11c5b3ab91bc509650d4c959a21399583e3b4232756866d464323ad83d0e75bc954a0a0e76a4d0f7d4525901c43db9ca9c421b0023c6bfbe487f55a0d7d07879dc7788ec2f1718094bf736a3ec59b885f3225b7b0ed3029e6e3c05cda9f094de71bebe993d5b9c472263e0d48cf02c26ed5c92077905d5e12fe8d9a325d76146df8019aa241ad43df208f60828b97b09e5714d3a04d7a01328163fc5fdfd543f807c389375bd665a3556d4b331fe2bbb65d0fb8724d107c0c134b6aa84eae4450ef389e9a4bbb93856fe0b6a5b36b4b8092c0b837b8a636695d4ccc54d28a7e3d5968c2123ae4334f13f0891e70bbc9c29b31b935b6c59710066e0aac92ef5987ed5cdbe950daafc7eba6ace77d599b45236aa4b66df407cbb7b90df8b7683df5521bd265b4246db69f09084803cd2bd1d071620008bbee601836bb80687a925131ad90cf8f4ad7e3d72183882aa0e02e4a50da5bada2b498d0ecfd8bceafc061311bfc6f08d553183af706f1195921233a0ff3118532c13b88e4bc62108e2feefb6cfd8c484c4b1b70927ac9f980587948b49769b7f27e11e724de4e589f48bf36a87d6f763726b522fbc559f19decf81b49adaa6b6b51e196b64c95cb6b719e8bd86361bb1f4caef838d1e92a3945685cd51c1dcb23a3753ca1ef7f93791351a20397a83f8a25ce995384c1ccdbcb91b261ce0afca4dd9382eeae56d85197a12231008c290319ddae53c828fe0ce63bc6f4aab92976650410a47060c17c6356b46a8857a10f90a2de418468e853fe2d40969871781fa5908dcb1fe77781e138ffb7164fd138f2e6d224a0c7b3387b30c74f807b112903fea26ca23122e8780eac1f93bedf05a7713104038e8743c50c03284a1f1d1ce918f68ee186e83a8fa262abe5eaf3fe170ba4ea97048bfd44899d28dfa5c47ebea43239c430f4fe90baca62f51c36acaa7cd3dc4373e8ed606e3d5825552dd9ea6bfd7533766cbce21f8b4cab9bcf96c98b65e5ef21c59c82858abe057781b4d535004b169f79fded994e71efb1e745da02030a83574b9010942d646752e798e7cae2c255f4424719f0bbdaaaa4a63f47a75455e85da2537464cd52342f880c88f14ce3d8bdf025ceeb798ec2bd330e764301cd047bf16d14bd138f52568c982074e6b58742aa1c745331952144b739d19db17ac0f960645a67a723ab0f1ac4171957404bca99b673f08af8ad815949be7f0d65051e19c2ad29301626a25a19d5a9488c0a9ee47a338a2dbe50bb42c5a7afbc95b934410e74cc5770aa56751ec2eb60a2ae07b5f01de9c1eff13c9935f3f66712c58103d11919c33a2175935c46a948891d4b31a197d4ef94784a87220a1cb6e5124e859203d51c7c7245db59caa9a74941b282140a155fb3cc2e341354e9501587e2efd99acb0c3c850f769fb4b426eb0086d0d1df72b857d730c7903925deaa0b876a2f46c23984421a8cb66e926d75440d42617cb4a38580976921219707ad88831e1a6f814b5b91b044245e0b23f2f491014b4ba3c747afad414f74087425e51f32247dd1ebca5a17c673eee7f067f8583417b206cda44cb878a19a40cd1a0aa3ced5d87ac1d785983b2a85ed7ede38aa044e1ba65ca5400135a0fb07b995df571cb4e844748dfa7bcbd28ae6725e9bd19977ed4c1d5071d0a1d2ff25e09c4b82414916f7adf1a1089df2679b77f00b141a1a90beb7afc86de4c10f61eb3a396e681cc85a130d6287da1283d1339b70bab0c06cc5d3ca2d1f25f5918482748e61b7b667364fe8263fa9bb46534e67b00c82f0e92819a7892f8cf5ef564c5433a4569e5c53088ad379337318e8715cb452b9326fb13050c2e542498f9ff2e1107f6e5c0e79e7fc537d9fc56157448364d47c0e6626c1cdc2896f79db271b230d392779e47093458c93163689696ee3a8d9f40d365073246f633a0d39b67023131ca87c48ffb56d6803c050f8e6988469ab48b647f7ef5fb3bbcc8e131399e8086e1aeda1f0f57dce14c49a1796696f8d90a19101e3dd8675d84d84d0073d7ad678a4555609fa7ca50f4b9c4c408aabfed12727cddbe39f9d03e475d85a04e263826f3ad1136d72d73c7cdf00aea240a2b501ff11a8acb41284b9eb93d4982799d4a32779d5f5674be380ea9ca65a37638658a23612deccbea3f56d693c9e515eb567a1b6193b64e94c7e4586f15a97288a5396a5e122f088a8c084c25cc1699c6fe332f0a5e77099bf9f7928574968d80b1b65c5dd1f2758da41b606faa7763a4840618f42a09443830b0de99fcfb35d4fd796fdce7e791682a18e9ddff8802089a6b6fbb80ed7cfe1e9893093957f9e9fb0b2b77be6eeaae80791efd35d9036793cba9dcfda412521617667f943d48342ce405aad008ffd549c49649e7dac64622bf4db4facda2e8b9d5bf59a81baf48258c84e2c7463f50e883d650702df928a9aed1eff2babd066c2c0423ef53ad9a577d3fac0e9727b5df2f558d7912ea83ab22bcfa800bbf4fcfb2db6ac4a5b1af452e8c83107c5788b02faa7d6d5a38eba9b385412d31283936e2bb9ae2626a0b7128f1f467763d2dee2d3b8cc73452c527c9c17054bb963744341b30a32a15136de5067c8e154739fb708f581161c6a4a7ddd7e4910b77ee7a3f80c8915d616b8dfb40980eca14115ac22c5bd643131e9c885f3a5cb14ba33b6d72cf377cdd8873c426b334151268ae6a88f47058b6779821cdde324d901a2a3667b10028d7de91e83f6ac886c09449022bde8a232f640d628a4c9c20d3a7a932d62a85c1eee27adfd12b268fbd18cd018b668e32fc487ea33af204eb84d04adb547822d881488103a280c890568aace13e28f6f89bb95e6c468af6fe221881a8593671ed3d65670c29e839492b5e6b49ba924ef48c2b4f3643640ce94a04e0125af1fd6081bd7f41bdedf31aba088a73673f10a75c02a3999819912d6b19d8b1e0172fe2fcd55c5cf4ee8075611d7d16ea8bc69179f40dfeeb283e4ae3cbfdff7f3283e4ed3160a665865bf9df01c5acab04eb336463e0de82fc6ec262afa2738ec083d6f1563ec666320008825a06ad2f36f91da9d6ced11612ad1456197886a54dba4997b839359d6df731e99a8270fdae6ab0c8c11a4f0b0773c13cadd2c1492691ad5edc026c61b6bc067327fbc08cb7da8d3fb775d0d8574d4994d163bbe107a482a5360ce36998c8e6bd96c4f452ffa3138d2e43ef146ea42ded388dcf035d6d6a095acb230b809853377b6094f6f26ed42f9a16f235da22dea427d383369446b3f9becfb3ce0ac4ec6f2a611adf1c985f958f6192b30613ec6843b770e148eaf104d68d0e2793b912c348490e71faba065d82a649229f21d797f0ac00a9e7a4c1a94675aabeb7ff56e2398ad866093e78f5f8777dfae1c710b1d343bad70d1e7655633c01e9f402393a92991111b4b017ed6537b9a29a6e28544001282f05a2bfa7d122bc4fb46c3a3ad806310ba99983a26d7974c01591aeedeb56a0e87dfbde0ef4dc32368587ca716e64c0ca44651cc355bf47c9efdbe4ed29c6edb9d26481f962bafc54f40f6a5cea1748c411ad63bed27b9b2685a79ae08fd43709bf972c058f6183216c4daa8bcf90218f9dccf8f35820f76c737f01568201455e71ee3ca1ff425f027add0b5c8381e383456e3d1f4b61e51235dce8bda4c0713eb5d4445d26fff89e8c27fd6daa4f2755a4ebb0814090dcae495b91846ca44310e803d3a59adcd85c3cd9012da87a356d38dff3c7cc4056a72a559c594e3f437b74d75b09cf7b86a1f94aa72b0275c6407db5675142e2db735555899acdc3fad508e95af8294e8c263e176fc45cd43255fff68bcc491ae3b966f5b9d76004c1c4009443ff5ce8414f97a9cba7fc0802341c3de187433af7efbb90dd7db96440cef872b69ddebb5e94827c3b4474a3ce616ed60920c5e5907cdfd1351c1e54e03c5cff2342034a2c8b8b293f186b19ff4474695317458d45e750118131236938b2aab40a9a7f17439b1e1b679223ed0d73a9626fd9569470b598ec223b4d13b2b86e1bdce5a6a52c49b7ed1540539f81759a5bafe55dbda96e36bb98b91fe6d6c413a12ad21e665f2de4f8f8b15ea3e3a0b3afa3d9df4b7887a62a6538f0551d4c37ee74ee5afd44ae21d95243c98cbcab71f8ec156fe036985393181982d10ed7475e3b78c0bc85510af8e2a608dc64fc71a1d92663fe9bf6eb9011f93c0d23fbde6aff200436999cecf20a26b0f584fa2f44fb9b7008f149caabf346704be50049bf307279edea08543f3964467a954b075ce3d2f881def77d412c9fe42fdabb25a56fceb6650f29ed4b00dd3dde0e559643f26b821bcd967fea3e53fc1b6d530ec80db33e1e6157f4aff1000b8268b058a4d7d39119459d4f21a9012cb1257e5191aace659c993926d87a6b342a2cc1cb09e4999a1ccf726761ed25fa639ba38a8cc75ee1420f43e05f1d7d4c17d33069cda92c2198c3bc55357b40e9b528693633d40325b14beead9e4ab4b7ede452b17aa609bc1feae1a516e3d08f286415d1016149a75cd7b00b2092b00c1ee8cf4e8b6bc0ce047d78b370b7633f3fc75fd78fefa0eac72b2e758085edcd2d48fc7d9a5adfdc0923e81cfd56578e6dda9dd639ef876462cec0793884dc5f8b9d60db01f3c56a7056c65df7514c012506664999e19ba8c22b0c82b31fea47cc5ea2f36ce70ffdec8e89d30928bf1c07e33fae1a562c3c67d8692e7ad7b62a61f5293335751e1ad043a938ad5d1f4388e9807045bdd773c64f6cd90a1cce5bef096a36f65e7e25be1ebadb4e6edb2c2a91df3cb6991bf350089e1eeb8f7170c5f3fc6b19e3beb32868255786cea12a6f74b27fb778684fb78c636c99806dfd895d463c2aa54e5781c87f29c10cdfb2b9fa9095f2cc5acd4f53634e9e9002469badde46b323ab676ca83ebe979a0579acac002be315520099f5f441654eed008f5e2b072def64874b9fdaa274f6b0d3b9f167bdf2d3ec9e19dcbcc1780d7cafd6e6c2f9f558f81ba107d961e3c3405564735da8bc9898ea6180236b517c3fa904e02c9bc400d4b8ff88b1795e6052733e9a5888aad3d569e378ae8b8bebb4809bd2de68f46798d3d99b09556f5e55b1aaeeceea480620b1323ed4ce81fc59cafe274eee210da2f0a1a73782712dd8952be9473a1eb01944b03b3c80ce2ecdecbe65f497b4538183fa45d29d1e5f3992440257e489520d98f0062c6eeaf35f6a5f0765f228e9b32235ef50e1c153173d85c25796227cac2264284ad542caacc85294299a1930c640071c390cf4b9fffb63c1ecbb74804375af0a0e507045249b3b94a5dbffb92961c044f17b42e4426050597dc0fa1d82071333fd6cfdd355376c71614436f36b0c140220c916728ce0fe2191432d94d65b432e8e873605cd3187b2f27f696ff9b354dc3d52f9d53e01af92bdbe8996bee6b162383bd34ceb2dffe1cfca019f53dc052badc5679ce456f725599f8893ba3de06780f730193d6147865fd099f207fac779088cda2a0e356761fb62b50c46d542b70f45e71b429fe109391f8d189493fe6cc405ec1d1a4162d129a49970f3217ac929a462a3892e7ef2d1f36573784c3c4f66ecf7e6a6ff9beb5ad1a0522dc6db26769f3d427f8153dbb118cd832167e3c9679e980712b45519058654307519f6576ca2c188a45d121c6cebffc83e9b97335c97470f1c243102c01f4f8c67bf4ec4723ba9e686063c3d5be9a6c31e4bb945ac638f5ef1b3b2110128dcd6540b67062dd660dc931134c7049e4d044eecec58ed8fdb8751e75acc4f1f96aee8a2b185061f60db5a029e41fd764cfc5f1382e58678a618ab338dad108007668409d0d981632483595ecb26bd0e312bbd442f940dba89737c2ced2bebd699adc4a5276c263e46350f8a5dfdb9c29412e7f344bce9c1f0283337dbd137afe7d5190937c56b2d2090fb19d92f8a3fe0326d9564f8b12b74b76ee8ec359a685c8cff9a747dd6ac5e078a819f4484e2a00acccef2afea5371a18dc490b17a8c7225f6fd8fedff2859096c6642d550374e1c7404907b0be691672e3f5bed5ea8c3407da6ccae2b4dac26ef1c564a72ba64e801baa0c27c313e88becdb031cd39ba5d120acd270178c1e0a1283c2c42f86eede465b61ed1efe386be0440372cbbe1ec52ae03f1083624b7112e76e3675dd6ae9a9a42f8a35f2ad1ba576e6623abb47eae050384b6026f2abd7399085677269a92ccc9e8472b7efa225bad371885bc7482a43e6a7179ebac14bc152376c0f9427b81dd5653c14a7084657f2291e6647e7f10370ae0e934cba55c6dad6eb7a936a33ddfdb4fad27d56f2976c1162a46ed01bd6ffe8aecc4f9edc9250ea4e7c0d7a87553dfa16b9189310c069b1bddde50a9205bbdc5f136c75ca6bddf9fcddab609acdbebef79121c7881b109298d8539d3cd7cb128a2e4b48069aa98d5d651423568da78805223ffa42f08a3b595e61920396581295e6931e7866db2dd9dcf0cba1dc21e1a8341b352587ff346a37b7f0ce888965ea03ec0008199b62d809e9616504544f488e5c7f +MD = 022aa46f368252ce0a7b2431d55ac4767455865dfe65d2e372f4e82691a14cb2 + +Len = 38528 +Msg = 2c97ef4f65319444199df671deaee966d19628052359f791d5810608bf1499b3d7c3e6fbb064be7e41a27062e8f3ebe9afcb2246cd10b5b070cdcdb4b92a47cf089c163c7b59e20bb10ff573d4d55869d6623971fa7c90b597b40354195106fc488a46bbcdf84812f14a4d4ca93b7a0dd0c1352eb387d2c8d29e6f8fe5701c621ef54020ae2938bc8abd40946f0c97fe2352de24ff18c113aaf3da0e276ed2281245ca1226d4f93103ce96f32e32f8645a7bfcfce618a7bba61b0c79e6357077ace2ad393ee1d498e4e71613ef94e566faa6565e706dcaeb4f7fcd772bac3e767534b13efd381119b66f8a99b91aa52c8d3ab5f0a60073c92b85e5b0fdbb844ef4a49dc96cc1f8de00ceb83095ac82df9b9fe15d8fb9e97dc4961bcd644a8926b1983b819165d00c4a6b687e8a32c2a7aa3ca24b33807630a21b3876684196273579510f760ae3ce1db0642ba094aeab447bc0639b3e600a4b7a05521288f37807b0a81a2399774aff0473e0dfba8e14f0c3024cced9f032491d470a6908e843b0a3084b9efbd5a87bcf5c45508daa09377d31aed43b6ed1246ac94575a7bdadb6bc384af1164511167ae801faf349b39f0f1533b64a220e62cb52ac3f4eb9e0a36202be24d40ead5a6bdfbde6d5b53ab2e276817bf053128da7a9e7cee62504fefc2c503d1c7aa3ce0b09201a1c34c5f85e1c402b144b042c65979d2b55494050f47fa746d5cf1cfac22dd3a0ae0f7cf8ebcf19cf9e500dc86fe4765c856dbd20b1c36c46e9563f67f9157d80758e883af256b36e75ab55e82c581c6b5cd9a3f69bc046463f57359c1687c7c058f81146d97ab81083a4031404ba345fc4d4195a1a3dde4dbf1a2521834c586a3e973ea50a03cdbdaf8240d55fd46941a4a847d59604db6351e6387fa62cda8511b138deebb99c7ee18f33b1a56c6018e39b56ee77dbe690dd05953de9eef21ab88f2779e663cd5a011105323e4bc4ec6bf66e2e258ba7dd4bbd66e3b35c4a301b7932fe62cb085af851dde093393bc62301b61c09dcc5518357d0fa6b3c8acf22b681f6c7b7f485ac97e4420afe6dadf30357408995e9f56e1afd097b575affb5903de97cf039e3062b41e00c6104a9c34679220e80bacff25015984a7560c9bc4d8e5deb3e807cee541d42022ba5c27b10424b0163e1eaf83f3f2f405e47341f369bdc7b6871594d5ba0f15224fa0104aadd42c807054b6931a457c5d9b549c6938ded9438b3810988f1746614ab6d445c708fcd34cffc2b6c6c9741af530f99ac8b199e74effc0c233953a4c3600e246d24bb76b1e6042839be781ca8c88e81c8bee601e5ccd33c749f1776f9c0ed8c27204d2d48f46b46dfc281be8cbcce64314ede2653f30d83c34c47437d731165d08dcd59bf9e396fa8a23a9023d9d82c2d628973860bb2c857686b7218228395b192c361df8e778ada832bf835c4b3bf05226e5145bdcbf3791a0b6d927549061258b8af706c2d7fbe90dd5f8928670701b7152959b15eeb718ab09bb3136d9e3b0634aa3adf61369ceed72ee8abfdea684906618b8e769a87e1e16442a5f64773c5bdba04901d96bcc8a1cb1af57c5284ffca63a1fc18e70347273009d2ede803bddd47982768896544c4a0e7afec269b02e89563a54eba2ce30967ce43596933151bb9bc4b4bf7e08ac7131781554ef67ae8619b2e1ffb4bde0f715a9f42b14bf6ff7939a4ccc676c3328e7112c0b1dd8e532e0f429492a85fc1b7758fb1aa938712edd7dbf6df6c178e78be0b34399766af638887b3688b8fa89fe6bbac3b53f1db7e5d98ce2a0dad6139c613bacd6e2b876acea586633c964b9277ca3e4cd25be39495825e8fa0ae363951d35955a80560aaa945156c029b32f9ee656cc659eeb0984542adf76c4192df27f319ba8e1bc48be10f666c27c6e63a1433408f30d1ccf03680c348ba8fff950f1a02e268963a753daa8449f140eebfb1ddc1909f2dbf0630e3a96cd2c004c3d3f01db67e9d4bd087bf74eda931d2ee8d0af7b1ee2a0f41fb136649fcfb2acf391f711e17597d0485f53f3e96c11b316f63ebdb64ef46085eb902c98068f7220a4c06037df25b7900f5ee26021650ef218fa4f44aa5ebc5227d86d3a530f5240d21e54bf68f6a98bf66898c335bf98f69372ae5e87387df0f06f94eb57bac3d0c4615e0cb5834c78cf1165772b69f7b100386978682a1beedfd6324f670a3d6cd639ea84476406f2d3e9f71074fc91ade9abff16cfac1ca8409cc3cb13862551a1f898da81116f96bf42bc13a4fffd49aa5dddae202706b9cd33d7e2dfa7124b922dd7641503fcb0ebbc32f53dec9110ecbe93c2fc23409fc02bdd2b4df59a97215a24a555c424fde3d6ea39923b03900b5eafe9c63980c6d3f55208c0fa14e0fa0e1f32d5da7eca31f340555473bb4390be808710d21dcb7320c50feb1d17a566aa158117af709240c1d3dd071f3eb8174ec42f6e759e1a282ea4a52ee7194111cea6148dbb9102aaa32344fca5e449f98fc94721ac783f6d8f7f6d0ed0a06065dc4f61ca975687da17ad01d7a06285d2023e62fcdf32b7adb3c3dc0d72337fed638ffd30cb379e59afdfa81a8730081b466207329663ff734c00569d3458fc02f4d64b62bfcab2a3dc49bc27d2b32d4fbcf2a8756a729358a8b38140af776160f0c0d0d2fd7661331d6992920b8281e9e65ecb37b3e4ffc86a6bc09a3c154c61e7be3203fcd12691f3cdefeb9a2482744304e3ec1b41b14d0187b90c72b919905a5cc36846517f4aefc5089726ffcb6963939724f90f3440fe95bf19ebe95576c8fb1992627dd7c8720d91171a9ab953c8793954e5a4155eb2246734f01c9c8fa437b8f4c9bcdc951af60e0ded7bc8add2246f0e59b6c100eca235f037d93b358c810611e4a4da2b5b2cc3ce282995e211338cb3dd9dc3a1de9dafde1b85ce22e265a57c5bbc6d15b30076ea531a9d9b261536e7d9ff99ec3885295123c8d1b236540b86976a11cea31f8bd4e6c54c235147d20ce722b03a6ad756fbd918c27df8ea9ce3104444c0bbe877305bc02e35535a02a58dcda306e632ad30b3dc3ce0ba97fdf46ec192965dd9cd7f4a71b02b8cba3d442646eeec4af590824ca98d74fbca934d0b6867aa1991f3040b707e806de6e66b5934f05509bea572fc0750c52d10f15f6ebf50966f7f8c714742f5de877e928d8efe53db92ec60854a5c133bdef99c9e012cd9c5d0110e49665f928059cfc62d402995ea770d363bd03e415371f2f9ab7b376fc2dbe4dceee12ce1307588f5bd054d12fc46afaaf8f61467a6968b9cea35658f17f3698cf450317e493b08a5cf56bf679b5232436f5484f2afad21faecb84db42fb72da2dc3c13a6454aed5ad6ad1710425a3373e153f67ec9365498258c467b94879f9318fd3a15bef595896580ea898baf31d1017cef689dc2a1f92719f641c0f53df23d2c1b2910fb9fc5fe7a805fd1c1abcf4247d64ca7c288a253f9c3a34f709724bb314d7cd5ad7a74f3e29effaf420fe3164d519741c677085ea4351c9a9a29cf05b5377d978ba42af8619ce59ea0ec911fe5d7d5263f0bbf8991c11a3cc26435cf106f97b126ab6c7e6fe09e0a5eb07da1a9df82bfaca51c774b0e389099e51d59eb5c77cd0f0e9df87620a58cebf9fd5e21ef3c688fd1c3aa4862d440811ada48ae948a35953c53f91cc38880c93794a7c67d4ecb69202985126589d70873f11dc29e4ba569b312f2bc5fb3a086e7d81100105652c90ed2ba219cd59ea08ef63bdfe03876ed114f67dd4bb346a5893c1c772ecf991ffc439c0e6f3431d9da5e454ef0dd44afc58ddb081e03fd959a354c844f3708ee86f0bd3153122b24d49daca846a679124e42cec54d223fd7a95803cfe8191ca52d5e9022ff1bd5021c38e46458308ec51a02b58d6faa87fc2518e4b29fd25ee45e01a75bb9adda01ffb48f1bbbe81038c74211d8ebe96073abfc61c4cd1f4a1c977e85541944a4951da50f26d84997ddc4858620487b43ce8c86fd8ef64c68ce78299ca4946ccf4bf46ed72e33e17034a041650c1becbc7d652d2a69b1e6356a6ea76fb5c1a2b4970286899a652c43cdd90a40f4cc9a34f0c4638afd66793a80f95c71101772eef6c69098e3d2a68d19dd44ac62d12047d908de71b2ba71d2a286cd433c1c59f8fbbef187a302ccb6992b94f9eedffb6f96c0d28111f46ca83fb57e48a236d44d066a4dd8408c2b4adc525fdbe13fa806aa8b042b93cac625c903f413eafd5e55b736fa0d54c53ec443d019a4e276a2c794a5d7f3c0942ad5ced0a3176ed664cd7ed37a89484463cd802366f78b2b780cd5cfc25c20e6e722c1ca2fd5a668840edd9e63eea39056a0e1dabc4623b48450fe5747d72d4997b7325eded13a1a488454163aafff1f73e909547e1344a8742e6eeafcf75e22c8eda0ed548c92620ed862c9634fa3784820672f40d1767db41fb7e9463f3c08d7409e14158a37e663759a36724049014fc17bd9991331bac08f59d0b8013f726f5a7a61863ca30dc2e65adbec144860f756c7d1db5afed63617d53fc6ffd0e5ed85c6344b266c4ec9953528354e3a0deb6adba6ac1b36666123ba94f79da8d9ce7d222ac8d9ec3fd42ca9a9e250867e784817c67fd690c1ee3d6a6ece4d2fd4ae8aeea383b9ab476ef738ef77cdc6193aa90ccfcb1f76af39ef753bcf80ce5cfa49bc4d006831fc169f63577a187184aee83b1112485054e0945b6a5ffb1cd93e33fb65c34818c4578fa9804db3014751a02348e9f3c6795ee69da903fe83dfe6c42cbc40ebb846ae327bd8774ffdb7af4b45c5b6a431732130ac46601dabe78094d08f0dc5a8e987426aee9b21df7c345423161cdc39d8b40d17e0d8daed769800877c9e6853337f19f7310deb2f0b6d453bb8610e4820a3f650f6f2b8d11399a1a1f357365faaf233912e63fe54cbd6b9003b37acd4d15d7707f73239ff3501f2c081dcd226b69d29d95521fdf953fd0a110d154a78616cf97d600bc0b0516d7e53b6a3ae30ecbc673033bc4c852a4cc2deac6e699b574f0841d0040facff48aeebf0203d06c3ec662658b77c70c5327dc9a7c78cc639702df5c5af593da50ffee9ccf70120c2b9c12c22980044ab6a95827d9526817e7cd4f99f624ffad93ff8edbb8c8d176f80e2c22fd27a894341a4699c7bc945acc187ddebc1465d026527683a45534330fe5588eefb4db72354151f92dfd78b3aead1132940feecc6fc04d9c7d5d64cad6e83d0ce76ec46d21e71f4ef25e3daaf552b29e665bc228d811bb2f2a2989c3b7e184a7cd9f8c0c61d458a000270bc709d008281a41086cc80c6a429301caa71896d464898d5ad85bd0a5f73ea0099352eebcdb9809e921a77affe0a02c4ffd63d1d64d0380575878a3ae5c94106095397676bcc8fb8ccedc23250e39f4414dff58326924c2ab1420141ad6eac13755242eddd5925f1afbd1cf82d6469fc82054f38fc0d29a7d94bced916e28f9b75c7ce09a2ddf7cba30ed46be3faf760bfcca6c955bf64ff561b2f4bd2b37010831aa5255cc959b95f6984f82515cc1336cc98aed41792a3d026cf24315fd21515d144db5bb9e04d2d43ab4761535c867f5b9143f7a41737aff50aece3463a0bb6624986201e0ff9a533b3b419223d2d02102d3320f3872d7e1c8f2049151c86dd641fd05a645d415f904ad8bd10c2995770c8f6f07456e7a2e3b848d33b0df8f34d24246b3b4ca6a51fbd1fed8da13e07f400f9e6a4fb18b71112d1222662e4b094130cc2f142ac2e0897140b173d9d6c2041d66414081332fb1b53b675dfdc7dcf58f40224f3c44301653f964c1c3a1c7c17f6f93ff2799f285e4af097b942b35562749944c4819c80b40d2f7aa186916e0fe626874ebe741f4821710aa3aa09cccbf908ef3966830ce00727418225538c762e7c8871442a566561a85d1384e9abf21bc172c6e5af1c95b83e2f2278eb4e073a5bc20ecd4a54329616fd8d65cb697137638df1717926319aa4a20703c1292f9454b27b9c5c9f4c393d6a65cf279bc5e66f8f4dac69b030191b3894585db44bb6e7e84c43d99dfec59c225123a6a97ca335f53ff8f9413dde02517ed94966082c95c1f55639e6d6c5b3c3c4059118e1e8675e5ce9b06fa733fa9b1b28fcb4d16feede0b35f5f060a404bd32d7af60a240643908e1279208b54453fda9f03733fb439b0285a64138fb1f8d322c3a274a25cd03d891c73edefca03aaaeebc43ac5934975fa7c36fac4554a22675c9c32612f24d505df7ec96647ebd8769c990a6f45241972ec5c256ed549a9446e6cae2928483e4b86211cb77304b27ad9074b066fd282d8d35efa58d8fd5001219b4ec1ef4362a337e54eabf8562001cb986553bc5c9a7458c5e349076f00e59cb07cf32b1d27541a50c70a7be90b5599d3c01bd1c9478da41847080aa69f3908339f8584df77a859ecef9ca7c659bc6c40c4295921736ddedf8e5e88aa16458cac1e40a49039e519412f2821f4f47f6c68da44fa6c055a2fa31f1329844e5151a463ec3038555485d5ed78947bc2e6c0d268335cb3e59dbfea64ef963b2ea57fa3d551d3dfb23dc2339252a664ad389106d8bf28fefb7eb53fc4ba77d79d893d2fdc36338e3ae8fbe0877fffb69cbf068d90b006532f443927a73b73618544b3d2e065f84dd49c566533c7487976c148eeface9dbc6939752c753b33e0cd1f0a1349a4cb2268a3fb4bfdf129b525877eb17ce0964091a38ed597825f5c5d626a7a80bc5417df43131a4fc749739059d1 +MD = 5d1f1f7c14e34f79468bb5de195a60f3b422c4e48757facf1df01d1b022e6764 + +Len = 39320 +Msg = 629b37b9a056e74959346e8c40aeb4e2073e97bf2117d2ffcd13237a50edadd981b09ba88b6f06acef371876c8427238536dccd8aeecdb43e03d78041a5afe153d33f4f49b5becfa0202aae9f72389c43ffe1be3a4c91046f5a3592a4fc98dda9b0c8bc8588361dc9b7d6c0c53b9c12dd2dacc08891537b1132d0d1476a120d1a524a84a494d2cf9c090a608666de21b14e72771e738192b43c3deeb174a80a1626192a2f62217fb7c239f04b8a5b3380e0e7343459a7e5d8c4d12d7ba2c75f3daac93f9e76be887d41ea029cfcafd29c738faa92ca32eeef6b3f2ffe8afc66f16eef177a58e6848d269f19e35458899474b02c923bbf08789ddc68c283b3dbc1d0df543b7f55fe37decda8c727c1c2e9731d4cbb24a8dd04eb3d6a50338a083f7f3e786a5069503dd90a31b0cd98190bed0b8d861b8ce704c1e6973000eb86bad860f67f82bd14efb3b93728dc37e68c412f518b96d78108b04c91ea7254d1d46b0b40f37cbdd6cded6f3ba7da2dd5eb2ddd5b241d15657144f3ccd80e52740ca5720a5ea4d7f068e4a0b1a62dd64198f1b9ece814c2feeeee50ba814b70d7d42659952991b80c4147d23bbc6dedc4263b399960247ca7c21b07ed8ea01c87cb5c1683ecd9ca74d775983c5300c0c80378d0e304b28f0aab696dc858a2c21e42b53d5900d38be4abfc5735f29cfbe7c129145c4e5596920b4816fd67da1dd5eac032771e2578b62f5a83ab1388fb8defca7857b5640fd8523587df44ac7c79141b9a808d361d83e20ec21e4e5b4c34dfdb7187c284774820c034f077905a626f15d9e7e68be6b8548787020b8a6a7711ea944f0e2d595be76692d3693c541c4c5d752fa29d70ce075346f8c3ace2cf3666552ff0d5129e269745ea91f6e6114c30f0ca59f1285f7b0086551f2921a7bded38ad03025f895ed0b2c89a568cebdf5ee14a651d89d7100dc9c96685b38b08cdc338cd3b8ca800b16ddfead1a5068635ab126c7921bf76e985a8425924f3b7a66965a7f72674aca7eba2fc0eeafbd143c2c4d8aa6c8300124e843b09d27c3b05afc63babb979c33290b45654bb263107dcd42217e6cc5c1688efa91e688f134a1abcf0ffb211e4c001867259923035f03dc2e1480cf5db64d93d251d33a6d1021ecc5039ace771feb28be8741c8440ab8a138ec16b8a1e9b941f277ce04de4cc4066d20006650b4d3857213a969cf1783648930a7f0386195de828b3eb0edee7143f0ed96b150119e75aa513ad04b914b6c48689a40cc26cab3ac168b04410010e976f2c276204036418eca5cc4617dfa029e1d596e02413f08969f1cc98389884126b8ed7f674981314705780cb9e5776eb3d54b4284b9db2568ae5bc65a92c39329c68092ce32698cfd8af471fad0aaf8ae1bd886fa9688514bcbafc56f22a827a7a4e178fd05d59cd7e23abbcd477be8b87468000be12dd5677f808c69411f44c7db7af99bcaaca7fe94b0b2d951d285f86a637960a1b1f9e35137e5f1f71033b1f2b2dc5087d8f69a28c01dc7f69718978432baa1defe05e7ca3a96af4d633d8e71f0ebc64640d1d227d1c63e3eb2e9bc4b3b8875a0fb419d70f2674a4a00a886e19eeca20ecc7fce184a73e7320b409045e7ae84f090f52bcec7226bf7d0bcc0c923a88fe8644ab78395ed6ad98b653bfc9ef277d5a568b969228db95ab9c365b1e7e733daf078b5f019fc6e3c189fe4f8c91ef65822e370cb6972dd7ea4039c21527036ef5852efe83e679b619b38b3bfcef8a880efae777b06977e687ac58ea2cc0d412c84208ef26cf89a52fd76d1db17493655f511f7015fc44522215162bbbd84fc9b5d2ab9970b75131724a266d40ad847df1a5418e6dec3d9b383ef41f58d9e0e43c9b7995e83a7adb6fa039930116f842747be01b1e95be42387e753d7a423202cb11156cf3d56113966e3937993d495346598dbeaea530b7a1480bfe96adbd95ffe7e17729f4ae7a74f887c36f8d0210e5a2acd194874f8c11404aeb3488ee2e3964704d0124ad6099f3b7bf0a72bd0be10bc00c76b8653006eb947bea403e2c063b44670ff2086663d44b82e0aad4c4b6d969c7bbb51c33d0ae8b391e70382ff4c0c05dacc92a0c611eb5c78881e3abd5b00c8bea09cf182d0d819b47a566aa738996897e369cc3203788f568945451dc141ac17823185d6a8d3a2b0c3c441c011a1982eaa6cb1b0fb32785175eb137286a2710ec9d626427a1f760c2c15af53be6dbd278b65f84be16340f0b5d84cc4946b3f2bdd547ccc2e05bc501c105e662745fe0bec1a48089d510ebcafd4991bd2e43df72672307faccd9d05fb7ef3043470836137554af117440b3ccca7a280285494f90dfaea60dcbf40b230271932cd3875b1d3dca60d38865ff874180efa7e056bb9f8b25179a623cedf25d376fadae3fc8428770364e65e317810f18592bc3debc050640ed1f3406e14414ab26343ba3f609ef009ff0a13a94506f8b14fcb453c957ed6c970a95f49daec537675f00567d09d0e61e58deef1e6c0f63739916585c1e8d1295fb2c886b88eb86a39c90c9b598d98b31e55372ee3a4b2c258f7e4efcaf81cd6a5f4c34e378f3f35b6b7160485d657a6b34c368bc51cf6f8b5e50ca13a1581794a5998c9dd58b17ff5a06dc9dbe013e3ab59322e128f8881574423c398a6c6ba57c88e1e354fd5f2fc6e5714e31493120e63753f5565310646fa727f6d15b440d328ee76c4dd7534d5071d0a26d8a1dae55445e71305b92f8bf141fb40c913b4c66300f8146a57ed885507d52b9503e33713eb4dd6d9e8a32d0fd85f992aabbd38600ccdac5f44c61b3e5c9d7ab482d60c88af9b2548860b343e7ed400a0430432075a1c1422046698ac66899c9be65b6c9bd8f689ba5a0ea9657c82fe93a530bb40320ed51d5f7706866bc218b4f7196034b08889972d55936c1a901a6b97eadcf3dbcb76b71d9e6eb4b47076667db9ef3b7d79ad48c787fa3aa026dd90e2da9c089e7a7f570585d71d89b93f183fe2229888f17d33f04de6b9566ece6b4ea70367c3437867e1d449ab31c8fa34063d0033191782c1704f60d0848d7562a2fa19f9924fea4e7733cd45f6c32f219a7291f47713435a0e346f6771ae5adea87ae7a452c65d748f4869d31ed36747c328ddc4ec0e486793a51c6766f7064826d074514dd05741f3be273ef21f280e4907ed89be301a4ec8496eb6ab900006e5a3c8e9c993621d6a3b0f6cbad0fddef3b9c82d36a0407972c96d3d88a2d082ad9cec520f3a0570bb672846be0d6b1f8ae376969c87424e5ccc21e44555ff224563e77667ebc9a2afec7ab445fffc39d73000ae380ca9374dfb939429d01450779fc13b18ce341b0e6f0d9f99cd37949f456d5b5158fc9b0cfeca337d3c977309f8838b6c0dd043a09beaed00a0a498adcdc5873192c3e2627cceaa89c010f2c418344da9cd25832c151888c3a0ccaec86e10191ee38773171da8e29585083770a4dc691839b9417c889f562af4363cb7d057f96173ceb8f38a5fc2e9b307a9d54783c6017617e6569a88417cc56aac439ca20f42692318be6bfb31cd7193b0baa7324eacafc4db83f3da30033af164347af74308ed0bfb3f67851988e736b4e96cf1e8600a4987cb3c9d0a057c52ce5211607dfd2910c93f270461633e771d283fc67c67af2f51f51dd9b9cbb21550640ae4a56742b9eb865380f1a69ede5440c8bbf307c7fea3cb3d97249d05c354340c8ba38f638ec7dc9201b1992ef4bff9aed733897a3ce41345df33c29de34188c05e5fbdb218c6098c9089831740c71a99222535ef737b96dcb7ce84a1fd7f29ce64c13957de50d4ea3461ae804bd46d33a5b1524f2ad21cab29dd293a9a76dfdda6b24a7b69ce0654f62160929b4fb82167c02ac1ea506d5a3c48fa8f418e71952a1839463fa66771dcb1e275ba9ec40e7038036e3a5d5090f8f73fc97a2fa9a0fadd4fdfea42bfeaf1f97c50302b59a0c903267ea2618ef566d3400fcdc14da31ee7d16ff208d6663ae1754b835d3e7f7907db18aac4ef328dc2448ac3ac26499c200a1ddd62748ec15217903d9b3d54882e6964dbef3bef76ad9561e358fc377e6e411235b7600a8d32a844e54f1cc7ff5e1a8bbc483ad3277d79bdb52d9718ccbbbd75816f6381a66b719204e0a47fe58134b5d638b487aa1839c6c294be928ceec76f4af2459c15e3baa021b69d25427e0009af2870b307681da391f33b4dc8efa72817a7ce02e184cb96c439cf601f3dc6b0d17e37fe44546c7dabb3d4f287a6a5c770f8c55b1234eb9d76d102d983a6ced2c4a4d1106bc3707b963d5229d2fb0975dd4cf451b1dd63ddbde6fd3876a15f950e000692839f6fc6dcf87c99b0d61a59e70c218ac4667c7d24e089240016c22439fc9e2c95cfb285044b1ceb291f219c159e15ae56b77ba530276e452aed40a5cdfe6085a83b81e197a0f8c745be6665f06b98666cb8ab7f6b237444fb0e1f4150701546c4cb24021c5edad30d9b31ddffdb725a105153305c3c62c97c61a71f4cb98516f167e20f1bec88ba889eca2bca576a31496abae38bdb027bb3cf22684841789e38f704311db4ca22beb07879d945499320eb29be81661a03aa3ed643cd70b686a063d28fa91d6ab4b8b785ecb50ed72a9bbce8e9c547730869970cd962ae067532939452478f2e177d9c37aee51bdc9bc5c53f8ddfe4d533f6c30c518f633213f56f92a17f72e0f31548d7e7f1d32091a3ef76d258a7082c5ba91ed4dcf70009f1e014a5da2f46f289a2acbe629d6ab23f20d4dfb7f7d39aa0308a8ad2d239ff2ecc6185df2c29bae091005cbee384a6a041a2dd843bff26cb42979af85ca59cb51dc26a17d250f322ff19e9900c3416ce3b29f348dd5477e6c68f2dd6fe0b898db97f7c0889854658d3408c5d8043aad2f4ae4a89449a36f8a3b86af51e346ebe8ae0e23cba8e5a89f5bd6dafa67909b3567c09d2d8990a0ac35b7adc26e9f151762cc53bcb34d9bd4cd8b50de89ddc7948da59a801199c230dbf84137cf0bd4d67ad4c8b263f68fcc2d98c00ad79ca2cb10f629527e1934b692eb1238a1178ba44a9a0b63177b14f3e07190f5ed37cd57b644b20b2ba988abfee2993b616cba0f569e84456a45cbda9ac85c26174997c8d213dd20a6c53e9f74813eb6ac55d0861354dbbfc8d114fe90ef7a11f24ca27cf8e5f3197bf6b6ffa8497b40de8d7f97255f7a58afb770ce775983500aab7e029f2dac7c27b8925aeeadf750745e07c0f100d896ab636fc8b2b90056dd007ae8397d51cf1675411fcc210b6bfa5219820afb8f00386f727be770699cc5c639ac5c379b68d4c753dcc5355009fcf41558e7a1f61bd33629666a0227a861772aad7bfee1ffff293b107e6d4d90e8de9bb3fb96b6400841e506cef0e2f04c9dde8a1d35bdfae21577493c3b5cc74a5c1d31cb4c3813442d45db9acef40ad3a4b5c0c46e87c01a1688d5a32215e3ae070a40db35041c1352bc6341ff036e831650dfe62bf8062397007437b4019c6069f36fbfd392b1025cc92c48f36981f78d303606d057338b314e735e5398481dff592ccdba7c887da5ec95346eceeb9d53c461bb0e5dbead5fe371ab93527d3321bbf6a95c29e8f1b8a74c88a38c11e1148df15738542e268d6ffd9405b8b25c9b8c5bb73b13791b2f8990aa44297b5f4a0d538fe0d2f873343455abfd437dd6a75ada9bc9d1bf3654f4303dc33fbe845ec306b98a62b4100ee138581c7b365defa7e1bbaadd01ffd37779a7933721eced3f8958a78bd78957f7042cd5d8823edee40f8b30ae07b425a3fb7c56986c055fe36a01daa6d94bb9d6579eabd3d815efafc2af0dbd371fb5da24206febe34a315f2739664c3fd3af0f81221115ae5fbc5b998b9492f67f2eba924851aa2e380bf32f640d0481cda2133f5ba7e68b98af87f2a567c7ec7edaa5a438ae3bb35b3a400116213835763d81e0afd2eee64d43a56c80e9b47f8b542bf885c849093066d63ac4358fc179cbcc03a3149744ea134475a2acf1362125ce0db4523aa633fc264af2cc53cc54e76216ba0f682dfb98d59c8f23f696dcba0c3258be98f0e274a09026582cac741ae4986905ea17fe3ee95faae14d181aab5724c77fdc9fd86ae5c8e36b82e873d0b41744aa95896e9ff01d9a675d3067544f53a5187e09724966539e78ff16b0a35101b16fe308c9167a84b228bf864f5f452d561b15a43c8a82becbf2e9add6fd5be653b85b0c9a4cf8f39697dc703f26e9307eea1c16b3c8fb69007beb14436935439036860b5e9dec08cc474c94c3459c0b7427f9c7646f10e0b0866bf082516d97eb4ccc8b92a3d422a7b9884a5825edfcda37474ccaf773c47074f4b900507551e97db713b2d931dfdd6108277a525fa305aa8d0d53ec8472a4fa0dd469d0dd000f4bde2a5bb8959ec1c054b2b665518caaf4238f8bd8d379e2782fd91b7d1530c139aa35d9cc7ffde979e65278b964282e96a34a0f26d148ad61d34d919fae52a3b993dcd98f417bd8d045ad5dc927f40524a4d32a711e7d5a59809878c318f42b6e2375b77b8a770475eb29c23eed7ec30070a17a220b869dc1c0501d81e583cca9e197100bdb9df0dd5f3e32655526fccccf4b7ac438d2dc3d0aeb0c5684800c0f56c76fca854f22791a714ae6df9af6ebf917a8c227009a1dd8ffc1bb86777e00eb6d234248191dcb9559683ded3955e086cc90c6468e5c06a2d4ea1b5be87711282ec6dd747a4757686d16d51e809e3d00a0af2b17da966a0120c20085419bd28552e7269ae133aefc12d346e41f4463ff5a707b3b83edca7c5a0615831160a79b9ff0a83bec6734d8e129fdce53cd07cb406130f208a6aa6ce70294e5e64a12d35c7fccd80a568b775e87844dccbc6b0cf91de70be7657c5b6e64392e2edca +MD = 6025dc79681355ec9f3886a74b39dc4d1d2e6c77180080e9d296e5ca7742d04e + +Len = 40112 +Msg = 2c9bdc9d3e5cf09addfcd9c3f24f6bb182d76c1d2f3b3ef502f4bdae674a6bdd797fcb01804a0aa3b887e4a2552cc6c8c37f30a032865e8c52bf27125b1225775104168f862d82d360ec9fb45c59712f537b35a2fdbc00deb399a47d799ed3763b9287ee57efa0515c95cfa211beb40fba3543c996c36c12aceafb98c8d6bd01c091e4c7fb76ac4634e83f137c44d6907e1322bd0785ea51c61bf50a50a32a416669f6c17baceed9714fb6b0a4d121d9297f992758e8c2c387925a7b19eb645db8828585de77ae339a31fb21914edb1343e072af8fd63b8f79b8f2952c98b17e3b4559ba2cc1337b37f5d70d4ba44d65529e73fcb6369ede24f584fd90905acc791839096e71c6dad105121cdbb9bff8e02165b7d4ef33d70fb2da5e4dbda66ef964ee1aab6faf78efc874f7487779f374d00f87f2eb42a3c255ba5e6c05df8d43924194eba3367c19a6c5469ac5c27f97153b1517111369c548eda5f4524b50e008f72036f5a30fd707ccb0d98ae4c4cf57af094b49ee52a1f13bdced8b34e05730db65954d3d58b25352de0eb025e9a7ff340a967b1a86ddba6bab5f98e0643071b40c0f934d8031f21f78411ece17a47392c0018fe02c010a47b953619805f43249bcadaf1baedd4dfb2578bc2675501c91d4936e886c954895afd0cda3eb2add631e7689ef0b3ccaae8dbd72772c3262f9ee55fe5a6f22de1e34dfc64b3d5ad9cad9720911bfd8d2ff5917280763d2ae91b54d289d5d3033aaf18734d6240c8e4696a918c8f139ceb7318fc62043b96622d285d59b5e45af018ed0fd8dc7c9649ffd249c5ec9e5249ebc2b3408f46ef474ec05eb9a98ebbaeab2c20ab84f18c39cb5ea7e1970663e7ca3f55a079d79be4facd354e336a9bc2e0566439fe38213076703a7420e4482198df5216766632e7bbaf9f6be5e071d9531c39089ac8ebca6ba78fe20ca055a3d23326f6e78b3aabfbd7fbb72398e45e7dbe1dac0d1c4264257506afdcd332daf0db42e66fbf19ce55e6b8949eec59decadc9078a7bacb9a2e593d51f3f556238f283449516a66bb344c74a89a5358b6c4f820130d2cfde900d4926cf47f463a07ba89b44f2597ff2179be57b8864782e6914aef9fdb4fbd2777b45550d9797af4f2a19bab792406981ed4267bcdccdfba288f82f25e37a31ca3119f9bac6662c1711a8418cd916e228c749956c25f09ba2e5c61871e5c175af718c03760a38e17a652f1f99b76923b430e24cbec54bd61233fffe0a413a66cd4585ba68e97594212f959d07b3a1f6ce31f5d6da4644749a7b8d27177f4bcbcdb4ed68b9ed850eb377c403fe5626211ed06a79e930453ce1c457dcc1285e6e56c6aa53909ed117d943a399a526606c4b17297e1309b5f79016456430c3da151184a5c31683bf773b9d1aa625adb8a1fe0e1a2d7f5bfc6d4e793f098bd82789a5f5c6027324b8f5808c1174a6739486debc26cd56ad8266c4f62d11fbefad92bb22f657ce09255a501970494fff5de5942933a8bf88aeaa9a94f7c5a791d3f7fb111b094fbb6c6e554a1f6e48d97c84c75d2a04e373ea00775c866db84503820ccc1e6120c1f7f93429072bba89572b2061f42aeaf69e320354c0515594a5f9975be8a766a32cc398be0ec7cd9758a4463c7762fb993006e7868eb8a7051f2543c460234cea759327101d8ca88ce6b6e3f69df33ee50945cbfad9ecd520daceb9116d1cf71d393389271dc074f068289c984d27dc6191b756b78733086d3ebca14af9dc92c4df69670bf4ac584948c31b286f44fd96302331c581d66875b4b6a275eba94367d1fe69c58c987d21ed4f08b1ea93c80a4f52042cb01c1cbfa286649c2bcc328f76ba365bcbcc0affbf940a38a85c6647540d76f4fb4f4dd371f290c6a08d89c3366477d89b8f286c2659cac790e7ffd5a91a2f2649b5223a8ac3cefc34336d8c79c6d341e32bffef8a68f0658a7bba3ab441d8ca8498c47b53c0c545ce080871a7a6f3a08be6b6105387231b7e61bf00df4c19e6933e5a1e36b31ea9565282fa28cd7efc7a097657e97f0bf054e237ae910199845ef00dac9a628030b55a03af65031d5e9adb664db51751ecf4444acd312a01abcdf505ace79794e3d168b219c40f78cdd2a6af791d199d1747cf1fe4298df864c89769a6841802c993c3b7bfaebb36510ab078638a4b967a33cddf7be0f327b6371c6122dbad71eae3b53b298ccd00f22a43ea946577e51ca184b11bbe2335a902cd17a95320894faa8466e0c40e7db91ba52d93146332057a3dbe4a2be7cb4511f2b0c25438f3ffce795f6bc04656adc31e68e801d8243ea4402d938f0591934cd357f646bc570239dc4f52e63d32d70bf8c31c929d63ce09d5277b52462e9a9cb732cc92755c61d1f55d1ea0baba3ddb7967b6317c98bd9044d48cdc724b62e7e869cc9e2bab23800bb256558796e91ceb7c3e453b6b1420d45b4d96518ff417ac257ed3a5ec502d6875826c6a6de3b494293d36a383daa3cfe546e6aaa357124c8e6b99adc6f1c052cf2b4f2ce7318dbd973a6b7c8917007b990035472e93c20fcb1a5909e10d2012e8d86595addd8eadeebd4e8e24d31f21a002eceed9b10d3f05137982e6ac37f0e711166c67ef9eae554e46a0fd17e80821d471684cb8dd2263df63e07dd6ec33f45eca7bbd6da706f476bb7cbbea437a45ff2e7d2eb019020e057deb4d9427253948e988556190fef4bc15e8075518bd340a89f428a2a9252d0d316bffedd00cdb56db5cdad241de7da9bdad895f4f1a157dec97e19575d4e980e6273aead031051109bff2c9a1eeb6c41993e810d0d910e1be2c029164566ae503e8a7920ddcddffd978454d9a76c8959261cd7083424fbd677c329e60f5d7c4f276eeed70558baab4517c6613bddba491e1df88509df7994f4f1ac551f758a61a99b603e1e3389a03103f1cf50c157a7cd9c75f203133fdde6d610d1da51711e319a7dd49cf0c552c7e357826aba19ebc122cfdd94729727c9db07fad473990b5bd6a828e622e65996307818fe2a598ba54b76b6527017f91a8af21e925e9a8f84ea7fa9ae1c752b0875d4018f94af1dd6610b0aa19e4ad855705fdb9864de31495054e5397fea2dbb1ddbbaa37b7308c12ded49265fa83c0705b1b06b48dc872572d85a3cbfcdf81ab32fc2be515dd311ec9e004526a89aabb5881b6f5d2df785fc7a771c4e890093b020b854b8b8033537bdbe7295d47ab02a539b39244b18f747abda4cbeb3edd2af6ee9eb142a2fa7999cd2533fa462c0be94be3d30ac51f5deecd26282d70643fb5af605f61caee58cebfa5b56a0d939fcdbd30ff4da391e3cce2de23d5ae0644e856b19c118177b7bfb74ffad4244a86f999816034d44bcebc01b4040c812bff36e97bb27a4efd6017c00b496114b78814e7bd3ce8dfb7e665349012f96f3b3a4872a5e7c3b9e8197cdfc1e93864446dc6adcedc904c3cf270825a96c5029ebbc5f81784154aa0ab971e5923839c58fcb9f59b8855a441bc84f4fad897c2bd4b5684b9d0978a8dde0f84bb3f67455afe92c60c875f6e300a4a9059209836feb1a31d7315720017798c19d0850ee6b43cfc290923d53270a56a605db6efe6cab753cb2d99cd35a746b8e67e3ca007cd7b9d247aa2df7969558b6cefe1c65a8a230e96cfa6d1afa30b38f2aeae44300d861dc2474da7c983e155baf8eb421ba4be7e874182a5f87591b746492123eadc242508596c52ad261372555e1a8db0825049a56b75739883a0dbe835de65bca21c5d0096470baabab187420bb7cfa18aa117f935c9601537004ce25c2d312fc7376cb1e725f84aa7843f8ae5092f772678918988c496f9f878b33ca455afcab33dfb233450411455543f36d65ad6b9bd9e5e5f4ab03dcb2dd1b8fcf7a00915cff6b15f660e0f902de9324ec5f0ecefb6dc278365d37c1440d3022c3c5464988129376c63a88a47950abed8991598a17bf894fbbf767c5b98463ad35bbaebdc32a034521566d9c0f6818bde3c0e025873ba4cd142e065289df207fa3b1ac3684b21511a638f2583b91442679526539b06ecf80dd55b5e04b79f12a8c6bc17c4327536cb346d9519448c8b7c8ca4b3f39c543fb55f2d8f754e1403e5e3e70d7951648a6d7246520901b00d2409cf49e79dbccad3ca9f2105ca1a81b97ae5cd0e0fb5f509046383db564a7167f4f13eff71ea416efdf93c3c9379342d74fc800bd33221a5d20c5118ad205e4d3550b9c381a64a8fe08307a111f9c548b7754ef907a1b34cc488e4476dfc7ddfb534e3bc33ba903d5b85abbcad61dc132c985e5e12cb5603c22163f0fea476245ae7e471f0ecb98056465015cd7b2094bbacd9c55c78b0d4b41df69cc8e0f0240db0e36a21066e60b90f1c35db0d3ad54dfbe6b34d6f69c682c5c7d1337a94e8b7d608302cce56e66c283aa33de0d1dec8cbaeb24d7a2ae11461fb1aa73809773ea27d4a7b0d1a1957d9d0e75dbc8eb516655949c45f9b2e5239bdfc8ce4f7da8c5c6740748a6102636a078aa16919641d110e011ae763b4259433014a440817874cf19b810fd4a77622061373ae19f3c716f560b7da2a7c73bc85b04921e23819b940e209621b12794af60a3a543768fabe37f003009a8c26f7dc91f1422d4429ed7f9d744cdd4b552afef75d241acda04ffc39672159ee248e602dab7192449e2ed4552995c258f00a476346e36a29a0126bc249040faa57c9380bdd74b83f62c56790920574433432f8d65c5cd185e24fad13127265c6a5ef8db4f114493d5cfa61d91664981408e93ad60756f5e84e4ee9b42b33024cf84a86ae4d19ea477414eab51d79d9d1537935edaf987e5acc56482efa0f904337204c835b4b4563925d29ae0f0ddc84ff2810a2bceb15e444b0f207e9ceb4b44aba06ba8172029c9e1b474b55e84c34f33ff47d9617628c9ea50eca5f3718a61860dddc2955c9f780976c1455d2cfea17050807a6e40c5cc27bc5fcc41364218b59f970babd407e2119be9278930dad53c475c7521abc5c987a3e277f2a402e8aef81fe9c72123867e8684c26f2b0858fc262460380199309eca2d2fa4452d3fe689d0f363ce52d3b4e90cbc8b95d7ab349f80a22dfcc09fb1718869c29451acd0d772af2e3626686915f95c4aebe95a79f5e9d15ff7cc65745c9cacda0bf0be02634d7372e30ea2efafc34849a7bdd530cbd8746a8d2d306bcdc26f57368ad1ffbff9e6ee6f7c11dd18f306e443c5ba0da3d4e1ba27537efc47a227c68ea0872d3fe08fdd361f4395e420fec76a815744f057cfeb40ffaf9a7cb47cb48ea24c2f8599c4dbd148a6ce83b5b65f66715b9b53e9856a845250eabf61c48da130af5b039e2c66cb88b9cb9a29b418d226355520f2b8b44c1be151a242a5ce80ac1f544c663d0a8f600b317a058e7038105326fa1bc05512bd0f53a7cf76f387a51a8fc27a6d43876f0984b5d19c1202b0536531cd32b962a609854270dea9409c3f81f853438e5df63339d006636acc96a4b48a7f967dd6778e5af4cf433c25f1eccf707936677d9616c54b1c7ae6e023d58946ab420ec8a1fc4951432b48a256a0bcad64dc4b60ef32bba9ac5912f7f8544808e8fbf8c3a5e1d4ca751d4b603af9fe119eabc6923205815e0e748b7e74af9543b0faa851f3cd81d2cd9fa0ca0f66f84f9f0b55ac3f1dbaeaeb639cee3955e5898be4a9fe2c1de50cb509056a54663fa9ee9174f946c9ccd2ab9cd3c1b6d5bd4ce2307a22bf5152dae40fd5ab9a8638d2f5c49113e9b84ba7c786cc836dad80f04c64a55a1e166fcfa30a9e185235783d4d2b5686a8679bccd7b7f3cdde4bd5263307981ed8cb904daa9fcb2b1bf2725b7d2c21bc034641c454b6c5eb794f2e513e8feeeb7fef78e74325e97e484bcbbfde4d8f4e7ad2e230b6f9df76df160103b763f64a64006e2f0533756c67bfc8dd1905fb988f9bd16486f78cea603ed1b0463a6ab6259d0487794efb800abd0e2595fbf334a21fb4023d467ad0bd3824d9536998a94513c08317eee853a1d2004bdd8612ad62ccfe8c524d15a436808ef177782cbe431316945989c851bd7d5392684ab66d322205555ea1e9ef7cb6549b1afc834f90099b4db6a627f4ce3d5cabce906aeea0bd8d0fcabb541cf0283a38c65d38e7cc65b321d7da63d75490affa691dbcbc3f0dea1e2f1000b72174845cf210ba0148b5f283158d1853d0f5b1f0d04908605d81a102e4366c489119e76a36bd8346a588de13f844c204c3faf7418c88fa558cc7465092a4f33bbf96c8030cca2102534cda470877ed64be0f044f0673ef066d3d4e79a2d2321b1d69aa99dcbd1fdee2807b8ebebce6ee2fb05d8bc690731d4f522df0ad44b5613b00f3a13f1cdc36d3b2366d937a6b2b897d678a554512e4d3a469580a72d9a8890b57ab9c4fe2a497509f662f46d6876bc4b6bd3b283b077ab2851252f32b5b87d73b3b8cecdfa2bdea1b0ada98a59c3724cfb6d0a077ffa4fb15b20f3c26e4c7f312b3797a0faba7fd4dbe3de674d48c2c16e9be544637f2fc7fa9a7b468eec9ed72c5fa5e0f39f5f88c12b1c6b0cadb3920d87caa224ae515378bb5024de3fe34efc5782f6ae8186a6a8aee9fe5d994ea720564189892ebf3e1baaf9c623ee557ce348b648f009fd17d994d08809b49ae8ef33d2615ca8816e2c90fe9228a0fc4a2b5ac74084dfcbc19c045671d9a79f3ec144069263c39dcdf294e8f2b4fee1a01ab43f4531aaf88e39260522921a658fe0b1648467281d42b7df3e4d8eb00b67fa7fa6bebe128d65f7236401ffb4f5c592a375a02f7e08b4c198880b7f5d828511e28215f4c1912d1f23fb77e71e56c62042bf4c856e670d5ae84f934fad4fe4a8065db19b5c0cd0f94d53ed1100907cd2b5ccf12fa04134c8f7194fc64a796a0613befa7b8e0735cdcaf3c94600accdef2524f8f6bb9e1153ec71a6abd9080175302e585bfc8844e3c263744ec9b1a3c1b94dc7a268878c45f0dc00c80505903b85343304519ae5825c2c57f101a7e58e9ad1c8fb4e028de42ae4c5e37377ffa13b58f33f334200 +MD = f52b3c537f28d89f0df1efee21c70f74df186f3928296d19582d5c51286e98bc + +Len = 40904 +Msg = 18df82a54c94b4569bbf2c4af0723ed1672615b9a8b7a67274b0e6707dc93bd17bae31407c026f197ba4e9cd3531578938cae5123d172cf4b78b61dbaceacc41c4097c49a0d63aeb6c97bb52b8771a82833e853e996036292039a42b6d97fb161c79ca8a5f16fc1696210a9f204c6f06710b5b05659aab5ad441192867d7b09aaa8584c962cc9fe020c93e7e16b83e5b2ab8d12f49cd75cffe2b279943b2d31397b510cf50ff0a923318bfb442c46fcad5cd4d83ec027bd0c4803548a8304dca0a91d764d2b82573f695f60c4b77ea9b9bd239caf741a5a54ec7adfb3f5a04072ca2414f90fed8cd92c8494ddada9716a350fccc1190db95c588f67bb037e112246fb75a31d90be62e39213e96f35e8316cffe51e3f905e9514c7890a2cfcc321b809f4b5e51a608f371e7a928cc28291bd5a72115830bea19999b01bd2baeb0395e62ebbe6f917909f70154376ddb51dbec5f034e36d5dd46fac798aa526dd4a5906902fa3ab5819753d9076cdc61437d9b8ec1361b4c0dfff4641b114cf3e6889e1b58b9bbf86ac50ed58c6f23a0472a6b9c21763956c16d11da539922262e0911dfb4a4f8437abdaf5faae74a82a50ae2f1ecb699dc40b8d89108ebdbf0f451701fe062fb7ffba4bede287c57eea4448af5e99d41c7d307d1f202af7f387f874342a29ccc9233a5c3bacfd754cb8d01eb11e2d43bfdc2828563088c17e618d413b0c3fa71666be5475a67a04803a8688bab9d038f6855537b4de42aaae1076066d00b23f4e1ea8fd228b87e3c7d3da2f42de4d143efd49f3b195c3240139452c70c41c05cedfac9ea8b891a372194d6aefd7de6617986914e2d394ce16307d3bbcb2f78b271e1bb19eba31c41d7f52d3f8530ebf0f0b44e3bf3421f96b9a70acc769bf4fd54e88fe6b1cf2b6287a7cf312bc788f93ba6018ad1415466fdbd2081734edc4580576ad943d3efa319f3e30c5908648342a4d0c431fc925a17913c622b10d793dc76767b0a77120b7521915676bd2896edf6e3707a3d8279f06b87f806a88dee508cdb536e8539a384790399eaac7b3a24e3631614cacccb6e9329ca6de0a75ec4e3c1ead8c30e722c425e5c1c9e0678cfb4783f676b17587a504961c67ecdeb20c14fc6aefb398056c6cd28765a7157d6b24972dbea0b29fdec0f437a4ba69e4c6fad7159f362d5eb4b76845faa63e02122ff37d80e5145ddada4faf20fdb7e313504734274307ad11a81f83f54841a984fc116c69e91b404dc300e95921393b55a7c52d0454b76f27b170c7f217d0d2480b8980d63727f58c0da05ca9bf7e6c1283c986a305cd134b5604985d9f6c1abfc0c4415259dadc3a3cb69fbf42f7e3ee56dcc7afb0b9381128336ba44963f160ce4a246abba462ccb2bc18f63626412da3677676fffc5c0d8a85c8629068e4ef8683b09bf70537a812196eeb1389e274fc0209954e16fd950f9415252eeb63a08c296c42767da970dd56f80a65b36638c324f78725897b3c29b6f8485f4c0c184173ce1ac48e66ab770d4ac097033b0d8b58d6c900d473876b96e868bc3b3cdb392b3c616bb7cdbc71a4ddda4229ef57d7160dd78a7864fb379c4be2c019745de5885dd2d67a6d284fa63783d167e1ac18d5333f0cf5de0c303fb962f5774104d94398cb9f56b3738399de69df7db06ed32ebd6c12dd2d4ec809b745e6c5318486c583d810cd4f229fe848f8c6bbea34887b22eb368f01177182ac27fe93b44170869574e55e7ec9f729edbd11a2ed81cb52fa48d29bc80acf232e75b75357c0191f442e878ae0be4bd763336ae338dafe3ea9e19174009d2373a4bbab948a84f2f8265171c31383f0691fd81ccd5aa4b3a6c851ddb8395320ecb56645c7cb14a099a2aa3e9775cf77579a27b1e1d1836e23cc2621c8d0a15a06c702007d97d3748c4f85389885d5534b58bec4c12bdb802e2bbb0836752c115a501b76268f561138838f0a16c25a168cd1f9cfebc821bc2e7daceb818537f94fe71f21430010f936f5042dc2b9a233c49c552db244fa54bd2868662a8f79645002897c6398a88f000a911dfcea622d6b2e7d88b510da0c52b269e2920245051328f6e1f8c761551c4ab25555d30e85e90ecf4b74ba252587b24dfb787c4f3e01c0c41c830affede41be46e4de1fbbfd693c6f071bf8042a48e711b1e5bec8194708d6682d1b8bc1014b3b345b5de4dac73f1022c8f6fd661dd7fcc242fa17253aecf6a88ca4041f8cb8cdeedbd1aa1f315da1b15a8387327f5c6790a760282c7d1e69305431b023686fc4ba676357f130fee85bda89e8b6f8de1cc31bd842559908f7a78da9d8f21fd6e83f06fb327a4b8aafc94fef691c0fc5e104a74aaec8151068b640f6c4b739570026c08182e20a69bca2c19d52894d797ffb529eb5ae79a0830474ffbc983c59d6169ddd9051f503d78f397aeb273862be4f24bc9d2f4e1f113a31ac08bdb24430b8a6f8a4ee95c0ca38bd707b1e5ae965a8258cae721bf5daff7fe5ef4f227fd7b4e2b805e171095c4458664c963b743eb05ef732a06889a6fc6792ba76157493b15a06fd531144545c0f45a4b6616d0f0cd6e36fe0be453dd8f09bb259128a2b5714cbd26cfedb7b27ecf3cca6563aa167953aae5ba390673c23e81c21a12969501aedcd53bf34994ef6590c8fa245bc67a4e23738a2d2ebd0066243f54ab9134174563631dcb97678355fab99cbf427b40ac552a04074923ba4ef6efe96a2f2d528ec552dded0d94eb2eef3eb5bb1acf7cfc947bb07dc24260278e4640c4dceb2409971704ce38b7774ec2aaedae311d8fcd85db07e7369382ae6ee4e35206f80c343d421ae59559c83439909cef11ffe98d9dea82da1281a231fd4e497849ce8bad4c4698d9afd65e8d98825c1459e12abb310ca9dcf2b73f50dde50bce21f912c338a706f0e4b79aa983f293a4656bb3e503c3f556338eca99754b72ca0be2521486e5ddf1d0981d166053ec25c0fa25797a92eddc7182d45a47d446d284249a2fbb758622ffd24662d248ce0ef906f0170a1c0be6193ddd41ea21c09e072a7b534af8b82acf00b70d4e23a1c67a2c941c36a1d7f9b70a45bec0b6a883218e765db9c1cc6fcabdef7438871fe2d0d5821784d6ca8dc792ce4f600547085fab1b7d8c733b687f34404625d580fa799c5a87892d6c28b741a7624c9024b40e2abb51378f9dbb593e59d19ab18d63e0db8dea9818254122a191a5ead9da0cd96806675f795bcef516acd50b8d8db5a33d8ccf46298e6d863cfd78cf54df893ded6d2e48b30e29bf77b99efcec1a764d1ce79417c420045e6e4b596ea39dafa845602497df2d3234bbf0bde33fbc1c2b041ee7918a62bc17d01bc64d18ace6a4ea7fd8d150219ed16df2a052fadb1de98da31827eeceeb4eecef5def5675c4b0671cb969b893c631f82fe4c0cff001f51414c46f63dd28602f267ed9df90d05725e754e57aec2eb3051909c101a35eca21d46acc8c15e9f81161a77106868005b14029c919a35ef0ff4e7db8526d8af5417289b3b9f1a6833e1176597dbf6a5883b7a6790741cd685120bf3b14a72cf2fd6f9fd98008e47e0fc65a07a7a3d5ac37ce6999d6500085a5305caddaf8ab4fb03c1b9270b43a54f0e0c0f016ec788d27f4d19009568ed5661dc4a507da8c6804589b730e9c0eb49c0159974df1c987eebb7cf012bdced41e1985a54db546d864558dffbc18d7f96ba87281af4c2f08f682ca3e850e470e27e42e12ff11711d4aa3619d0bc33cbfea36aa33cd643facda0b57dfc2b09de02dee1c92ae8781a331d2b4df60239354923c7f122ad271d0038594586e5d29f69a97df98de800f06b464063b6ba27273ee4a5fc14a0f4c0efdb21e3cea5c81bdf881f59a01835fb44cc7c43580c8608a68b0cab5ad7344d632f133f1c9471ba2c22cdd1aba1a1a38658e8d52421dc4049c304e63b7b6e2b24dc3a42b8da58e517219149f5abcc51f8918a026121b437ef32969500b42bc2fa8b9bd2e99e02026a2a73a9c75d3d6b63206cb0593493546080c9a1f2a9f27aade440d8f908f97bebe87ad969df7c5b8fac96c8528003016356a6f056834bbb048e303d2e41c4b66300aec1235a118744de0e3395308ba6c25c336b7769beedc83273e7d171eb1d991d174a3df685594a5eded76a6ab4a943397afa9c84d478c17712c029bff61657e5be5afeda5e3768d30e9e18560473af9583860cfc14c4b70614af80546e0b6300aadaaf2f278b68e5a46fe91e056ccd1a54f510f807397286819b1c58db638617e3b3981c65bc103daa3123e73ffc676ef731f0a03340b9a0616e46f2c38688d272cb01caa232298327ce0fdc398c43397420f41d223f56fcbd0f464ab0dc31d85e0c326065557a5f242df5227b822b24d1ac64975ca00f419c66648929cd49d2af5d7207378dcd77a8361de48d48e4d618bc873567c9ad17075be8d7b7c197676ea50be79f42e876bbd1ce48f84439f85137a620cd24f82805d6195be020e440a2ce432725dc940265e6527643e0f132820709801617b7199ebf413e2f52f80453bf63f051c399c3af5def97f683d32bb513f87cc80cb495dafea6a729bf9b5c8960b269ac5fbf63a01eeed39994a98cf143bb3c6d6ab542c27b90bf58cf95f04d997abbbd19ce8741129751b57d39fc3f7f99e98c9983c85d1f49ae43ebad67a652010d0c578dd9981f313ad1a54c24a6afdcabae01e6d0b4d0189b7279ad6a9d7391882282c501b02e06b57674a9ac2ebbcaa95a0aa502cd7744ae6ee35ba039e4705386033ea78e285ceb2b521a3bdf8bac0c181c8a05b2fd1611be8f7fb2828de698c040c0723cf37c0478a76579c208c9fb709f5b826b48d6e9eae7e34780573d7c59a3130ac179ae27e5db5310de186b9febfbe120fe42cc617b514e083c28bb29d893fe1825a0397cfb56aca53ba4d8201098e48875d23f9ef837879cbdeaaac7c5784b447052672c418138e3e29559a568de2c61d7df79cbe90057ad0b83507da9b9c035ab767e5f40c2be6fdad136567a3680542d53c00ed61486e02fddf6740bc02694def4c73c7e8208f42b42b75cce06a9097e155d8f48dbdcdf30dee3d473f444080fb48aec852adc18decf24dfecb77027d20d9877c7bd2152167061c469bde43a489d0f97dd200383fa5fc4065db29b573223b8eed9221ce0ea7ab66c7683ccd190999d630cce45de87dce0faa85ef240a43f071b08729632b3e32bf521aec576f0907d7b9c9a69d18e2dc0e355223f8b3349cb27db1557f079950887f3a697d16e68f80515ee3903153aace8ec6848dfe4294d3ada7327c14477954973d40a89150a542afd317b1d27ebec31f697d6e5c1c7d57a8ef4ce4d1d711a64299ee647ea5ed911decbf8c6c928c7e7fb16b144d10baa127e01133d0b6bde009d6df2b2f74cd1e33f2478a705d98732814fa1a51cde16283300bf39174d2a4358aaf77343bd82c7a9a4c368e2e6723912a96eb0ab265fe5335b9ae848ff4658e1bbbd31d69735e6a3b3a0b06937d125358cdf0c85cdce7008786cf3a66a7a65c00a0c95b9c43367b5b9d827a0b4eb1d7360be62b2b9abf239c1fd0139740e937efdac47f32ac173671e337691460a4a528ed1593bd43e924f9c15bb0a064909a2fe64ee8cb32a32424a794544d374d45c7ce19a2704ce79d1737bc9200974f0b474fe328d46b4cbcda5723bbf4472e21993b5cc7e33a5ce47adf8d28363d76f3cc740bdfdcaa9679098e6010c824c9c103b1798494809ba3ab2547e3cfebaafc35ef334e4294f2d14899c3f33744a2bc9ddcda68f2b436531ea577752c065d7d0a3df424a4aef46e0e15d9c3a01b4b7ccdfa09d58c49bf6b4bdc862cd931f10ecfdcb8d3815d0d97d09f1c02b13d167a2ab5826acfb58954b9371eab65e32829ed480bdb5723c0f716720540d91ea64d2a7bde894b8c46c7fd418b51409e4546e91c77bca4979104665b200e96247d6e43d968c17e325a0d7e8866bef7b7eafe49a666f7e82d003836a6e6bc67030e460d4adb93e64c45cdc3783b54f9e47ba89582540d9058910b1dd1d3eaca2edb6cfd3c8181023e9c6142ad73b3d59899ee433ce96e3baec6157288720a4e0c575b9a4b0509508dc06092749a4c0948a827e94271ba58a411bfdb274bab4120249a4ae2d0ad5fce4454397a298e137948fdde1fa75265bcf692ce3acb4e720ea591a5907eed9e54aab49e3aac1a72bedec8b840d4c6e17df716a23f6b542f3c6cea20d05a3a8ad575fa27129c41a56ddc310e3284986a4b95b42da1c65cf71ddcfc532f0d24a3a508ad9abe74c42a1ae39f268151375eca5503970e46d9583798509309022c876805373f8abff28f4a678bb799b5343d5eb78d94d17759c12e018f970ad3c29472ee3fabf3f85d3380fa8f28081b1f949d2faa9da7d24ed045baf1a580fc77597a161f66a69874b532ff020e490d49e2fa3fe317ddd238f433272f6517d6cb44d22f6ed60f2ad992f4f79cc0d90653a6ea7aefa9f00198ab5ad8a14c4c1d3ef51f9ca6909a29ec4b3b66b7e63490bd6f023308ba9afafe744141ffc17a1a32e8b6e04f1cd4003d4c6aeedbf4e826f789c62ac6c01b08dadd7ae5837b4e68577e3c9cd0e149683d2527d27153605392b5aab4b2611cb5ae455c45e4c015820d441514c46466ac7c53e6c420b839810f41245344040cabf94a89e59c368be1d4c8d4faa24cb8576b572c366269d049cddac799142f57363c6b78470254fe123e7af0b0e2d0baf39aad5cabaf0ec1086ed118f87b59a90ef826abecbf8208adbae8fcda1eb6fafb8ad51c967f0d986762c27cf402096e70acea99393c7427feca815dd8ae55d4f9ac5cd0794aeca2c13a3d780e40b51415db45c4df0171d8900de2a82f2a33e5588fb32cd6ab328cc06590aec9afe33658f3b6b320972196fbc56b40601ae7b8a2956666311865c2cf656a6598b82a41d496bbe8b075f9efbca1a9cafde8d7ab626de5211b0afcc158ca39410df1e0c2f334d3e9f116714f3d232cbc6b2c8a5a1269bde1f70b7e24e7047bd59bd5bd364f4e8d1b85010e3207ba42892a4e86312d296f3d4782505a1494a087b4dc061843545601cece5734a6e7a9a5ddd741bd3d2d67779f1819cd4c0b55cc0b9d51e579d6ad4140c6b2d3853bc0b6d85f437aacd635456025411b07c8fa36e262273a4d56113e8d8 +MD = 1ca0be9286023fb0b947f07cad056e59cff9d2d16c7cefdbedc33950a9312685 + +Len = 41696 +Msg = d9db535f11ed31c906af44c6b10a631fc6b004c289a4b066e3fcb472b5e61a1b6ce9d7cdd66d46cd347ed51c90cdff9e50f77a7b0c0ab1c69d46745d7620ee10388dd805807ced5a03a49e0dde810619279920e2c80438d38d2b9f467bd0a3a4644fbecdb8230eba9eab0561432e62d8721e60be66992dd7dc359df66cfd202018b7f2ee266991332b1b74df69ddfa235a0ca1d68dd27818b1ecd735f0b04dcc7e4eda3071565e0ed37a5250f596b64207ed4af3e6b501df35d7b3caaff012efbb9bdf5a41f25e93bd52077c925f7e7ca048c5dd184db1738f7e9a7f52c557d2fa26693640467709122afb2be6423a1b4ea6795ccc9f6e1ee869f51a813704be6178e18a145992baf98b96259946d265388ece38aab5212668212a64e34f01f91818ad1f653398ec9bfc403154732ea387882c385996b3d4362da325211436cb488e37bddcdd6fe81f056119bfd2371c621cfb26824a0a707b15c625e28f8c7e1963e62b205e01f6ae2e61a3816ad31af2d3a3c8ccda10425e62fd2bcfc6e959b21e2133dabe345d7000a8984244ebe35e348ce6e04dab91089baf0190c337a33c47529bb206f2678c029ebfac6668c0cfc81f4a65abc5a7a148436dcc8e5ca5de67e02c4f3d225a2bbdabe265da30f96d15c2bb04fc45ca50f123382b2d42a7c10533ae5a6bac7f74b738c715a82dd65fa5de00654913433d1fb62a57aacff00ca9b3e97a98771e907aab3765d6459fce00dce22f99175a9159640af50cedcae8dbc8a558cd6d7fa68e6efafc6e629be1ac22290bf53956742895a2b05c837b7d24daa99c1275e9df79e7d884776b13c1331a9da06461810d13b1b82da1784cf20b51beed6d77a663c58099a2fa484f951d2b0597ee772185a2201517e3b685701995acf3e85cfc59f9a00400fee19786f0bc2b979b637f035d4b81142b246e1ed40e3b578a0a34e99eaee3468b1e33bc3637d549740de3b0cd98c3cc80aa4f25c62432c15b6a953d3b14fc1ca9e76a5e7603cc54805d94b47970a5e9ea306fac77405bd86464697a58391728612486953988d862c83cdc36e93ced10719e17dc6ec87c45ace1f6cb7e85fe15babdcd88062ec0185290015ea66264eb1edc8fdd33265eb03bc7865633607889bd9a8860655d4e2028434c55374cd222f8d31fd64ec0c9bf1a005f4302324c2c71a3fe44de7d4822523b05432460ff5d07690fef4800851d5072c9bb706343a8dec1795dfaf677c5d6627450f608b2435487a652a74d5970e5070ee6075b25a20cda3fd24030a3b2be9ee1a234abb57ce6162d24f60e0e61e2a575eb4e83bac504d799cc3994949112d9936466b0ceb1c6fcec90baad6c974e3645f2cd41c9b6cda1cf736b881109d8fad3bc1581c68afa232bbb7d913bbb31a1c7250dfe1c206f1e29ee6075e4c21ae9e9d2c88564ae8c7132d0c622437494ce43aa952379a9f338ef66a0c4d365df8e1dcf072472c683d048f51ec84c6b7ea500a9ed16a9f960d66802b1dba79a30d1b6db5ac6b679e827b7520ceb1d47f70e484b9e4174b9bee0ddeb1d242708149afe1d4ad3fa70c25dc51118f37fb107f161b72f0ba191153d96486c051d5893d13bbe5eb30452195cbb57ca483a51b736941628dbfa286ed7db4224e84f31b55eb6e51fcf9cc8f60be14fab5216ce0ec52990121b4527d095f401cf34873c8329b7bb138d8c7a60527e1e427adbd11486684c74324b35445f28acf4518b21041a8668c4569b0f5f19dbef17265001d2629973d688d4fbd11dc16c1ca72387401a6a13ba939030fb4841e8b3bf3e074f3f032cc085a8217fb70568ce9e1916400fade57baa34843dc8f6319dae6d8a9407efa0bb918e4e56163dc9929e34770be3950591054fb42c7f42f35d5aa533a7a0a5f74e144f2a5f20b0b6f00f3b52a97c6b9b840aa967d0566f567c2aaeaa92f46d580276b35ea1bea8587159f74e23c476d1da2309463235c48181884f965de98feb5e1f829224d96bd69ce4301480a100cd1db738f85905889df4db529f0e6952daea77846df1574259fa18ad4cc8fd4fb7d42dff264dac04d15e8a7d6eaf5b004a2ee781980f227509115e389d04bfacb888ef24781714804646ff99ab47a6df65b3d540bb86204c0d6c1c97af3bcf5ff8c0646f95be23432334a16dfedf34385300aa8a7d5f3b0f8e90bb932b7515b09e04f4aa264ac39791b0d8c30d7eec523c9dcf2786a15905b307a4f4b9ba78e7d2dc079bd2c4dbc2b8430c61832cb6774713aadf7f546477a5583e820013e34bbed1050c4233530dbf74a51006f17aed9ce9a57a108143ad8b0bf005a9873b25876a57c31e9f13c0cfcc0b983ed620fd64a727bfe02fdeef8ea824445b1f69bd583063880d1102230fd2a7c1d5e291efc7d6977798661d85d6b84108bfe2555b57aa9225b78f0a7ea80edf53701eb30becfd5f6adf2ee8b68ac3af197dd8e747ac604c60c5241218c1081c15ba906f99fca4e6605e9027ccd34fd53f3c0908c880dafa03dfd5033a8349c7d05842aee01e539421bd93c20dd8e61d42a47e9e28fba102d4acacc32c1658464cf53c56297b93d174a340a1c2c20feee95e3e92ad443cce9cd5b03b36a1bd0351378450bc3aeb0523b89dad32b853b0fd1251cda08433c42201e953a04c0164a7c62485e185e498f4a5b5cca7e338cc4767c03649e20f4e30d960f4b141abd3154b24dce08104f3b0128de7676a48a88c0692b4ef8756d38c051c04b2a543b7656e8a3c0058d67c1fa62fe7bb760bad9797cf31db9a93bbff2c256ceba351785dd6608f8a32df9c080aa2b2eb2f08432fc17f9456444b6d51f68415a4605e7ec62caebcc636a9bb34e6ee323fbcc7d31b2cabc5a6ad08534a0d40e62507f13067177aabfc8dbb426ce11c4dff46d0c324815bab13fc51d4b21661c6b5be93f80a40ce44745e9d9776a332ed72f4ac7d12689530e75aaf5850bcf09f9eadcb3d754eb16f75d2d8241ad53bf9e1efe267ad88633b68eea947eda4f45826fe216871ea2c144911f350221f3c59945efaebbc8accb5e0e1c70a517975d996d61ddfc6bc451b3642768254283ff5d36a7c700915d984955a910744e17c0a3660480b3c6b066c858ee9247a994bb5e63bf15e5ad29091d08290a78e840fd34dc129549ba077ef7e1cd59d5a19698114f8e11c7869fbc4d8804b52f60c391c25244923aa029f8d6815c255bd51a041a7cad2142b812205f77d4a71461effcd04af2ede323a862c8da036b46ae8f8dde5d84ead3ac20b3d73a1166a44656bce338a62effbef34b533e6bb222b87793d174bdc4f6fd6c052951336a7b9868407fade6dbccdcab211a30ed807c6d62c49844a05629062492ea5fc328e6c2c5260a0d3d5af70730726254116cb047c18ea76fe4f4e6611acb7eb83938927fddec26f90242eab913bde00a7fbd6ad224506338e447cb988f3d7aed1e0ffb0a12f13ad3ee1a348cc57207e671190896fbc8604236c5251722675380da158d0c14d3da30495750dce61d3e5aae0625f0c845331e54e39f5754b79cf605ffb4f054126990bc70cc33c64e17e97efb2f9a0a55302fb729a6f396ccabcf2a052f51412b8d67affd032c165319157c6e91dd42870bf8e60db8567905247eaefc48a97c8d9a47ac62921036eab6611ed7094501491afc5a16600a7c0f8b771d1b9d5356c734933a27f59aa863744eeedad26bb719e1bc9bca1a7a003a456aed0999f97056d0ecc1e3aa35fb6bd75164c0a9abe487e4bc139f644fb613e6aca73cdb0649baf3b6ebfc2c5ca05253fb095eeba00a01b87d6a1cc9d5fe2af3cec42bbd045372118400f7f87927b57ebe44dc14c2a815c17307a8a7c758fdd143dc6ccc7e2dfabed6b95dab35f203cc0dcfeea19e3f32942f64f9aa7e56fb13ae586685ce29e350116d9390fdbfdba08bd2fd3e9d4ff6a5251a563e6568a13f50b0bf859ee79a79d6a640565ac19ba09b269e384a4ac078d68064d0371e9ec8ed7dbe284ad7ae9098fbda77b7a7c250de03382b1fc03e93c64f9c0c4dd93224d728090a5c8a8e38dac6c8519ee2fe15a7215183a840af6a66c0724f342909f7a04826886e60b7e71e9fa0909af39d8388e970de5e3cb1715a9b6e1564ae9495db467d4eeb0aca0fc6fee9a1266a2f0f15d42ca7bc24e35cf42915fb69ba50a3eabb93ba4cd92327766d09ffbbb7313cc069db5c3c899361d601d07daddccc96411ff0571e6c51d2af629828d55b32810b13137879eb604472be43f8cb9676e180dc2991da34e475d457faa90dd6a17068884b98debad8595ca6d7092d67de0a2c7896170ab349a587e5d7fccfaa0c8f6b020a19e5884a34f664003b5de16094a68dcc432a77ffd62c7486908555e2227548d58828d4544bc26e65ebd763ad05818432a2a3e3857c548cad00e96ab0fe39a51470131f8522533e6eb7248f21d13fe47fb21196692c72b6a1ca464907770aaf6d5e3eca3b4d2b4c8119cfc45d8c4436fa0dfe01195b195b1b59367144017ad0469ef6850520bd21537023a3ceab30e447f2c3a4148cbb02504a2483f5320cb016dee4a061418b554c76da9de3928884d01d0cfff935ca4506f9baf1998d32b7748a93dcee240840d28a5f133ae6bd9128e9248525eae99ba5f4443abf778f6ed62e5e7afa4cd68c8c272bb4331c3281b8f3b4d439107b6e93d67adfc595653ec236df0b14205880efd9caf17ab7a9df16a9385d914b023676fca9514a4b66bfbf30801dca4310d6641ea74b602d6621b8962991ccff109bc5f36a1fcc2e066a23a7dc239b3981e59f625b32820209c2152703014ab11906e73727cbb991c6b696095dacf5584e46e84151376eb9f768c2f85f3ca8e5adf071548cc5913b2a2d9cd18f2a6733b862d53823da74d9d16e287688a4562121f0fac7e3adf17e93479e9ceb1c7f6062d1ecb34d8c32d60a4aec2e29c8d0d82770ca0dd6d548c0b49d11d7ec039c42d01ca55f28dd37231497547bbd1ab79f21088582d0ec05c5e086acff2c604c7f829b8578604dd06582cc180bbd3a68ca9110a3e36c42c6e2b9acb69f06c31e5afce703bb6e4ecd01d7719d4a9478630f1a31bb9bf389faab9277c51415ac70899177b674bd505b8c84f06ab4fd8544c10ee4231921121f852d606f1ad37ce17ff2d60450d8132a6a0de0f6e732c17c74f19070e75f8ba403ccff0affbab4ffa2937a73bc38d7a82ee4cbc83deebd78bf64df2b93195736ac03bc2f5f56050995f5ed9b337a4e634fac1955358be9c7f4db18c988e8f535e2642052a61fbdcdce9ca7d142f6c7ca50c642346a94d6f8b9c6e5c14538f6205b60b40b50827f8ab0ea21bc6748d46bb6c5dedc5983f57972aabea964a3ca945b8bffb00b28aaeee180f3b31ceb04c5f62d57b36ee3c5d8b4091bf84393f2f077385bf7226cc058d4d3866bd047d957a35f4560273ee884f26486247e93ffd34308612732e960670f64623d2e09b29f22ee10592effae0cc24f75b4822e519b237e97f6b9090b77f5a60fbd828b310b195c5104d2a0b6de882c633eeabd98d6bd0d78bc2156122a3c3af7537a56c529db2c7009aebc7388c87de71a04ec261454378c0e185b14fc2775a19571f6ff8a0cc105ce3fcd648a17c679dc8d1489b2ad7f3a52ea82a44c5bf8a6fa05e630aa12cc7ac8f23e1a50da98840cdfd144501d571c21246720b95e367007b29f18e871b157906299058ba566ae1179ace66b28519a0f62631ac182b18534e49c18e3cdf2249afd68a688ecb35080e701e07242f14c64011102d38dfc6f082877a11a7c015a7f4f178dd734f103d1a46aa2f411b89bc5acfb698dc46986080a9c420b00816183c4401c0502c2309a3e61de6f091a10baa28cdf4eca9b72aaf7749c23ffd4f26f095ce180ca897f311161d3419d8843a9ae4fa4a4f504ad676bbaeff3ce9e55876ad86ed910c9484cc9f5222a43959d190cae7a1ef837aed3f3b9edf8f1203363754d247c6a041423c4966b77afc4859f6a33c01b38a6ff671c0bf6b21c1cf499b515a2f93abc7b7c9dbfefc81697b593337a07383ac50797312b9aad83d71180b6ec5ace0774e6bdc1fc5f7a2c71759af4ebcfd473345feaff935a59dd0122ced71bcc7954afde5dbdb60b2c66047e1d2b038aae765780e8c3ddb6259c0da0baa23e6879b6dfcad30d87a35d37a317a0424bb7f4c8b0e3072a552ebf256f03fab4cecf4d828744b41deb986b35efdabad74ed865cec32edc9fb434852da7d5057b4751635c28d4778b5c5af4c54d4fd356678c600d20accfa05557f5f94a8c415222af69a856e2a3c2447b888a3def704c301472183be556b8c319a03cb9a254f60b29bf0b7407cf4f4e7a74d95422182523312a548771085577ea024c97afa6c34b70d1da12ac30aed4c868570290318ddb32e76695d86b030e59aacd471ccd467de550b8b5589e5d71f5c177dba262c2a2ca37a2e973e55dd0e8f8235a722eec1d17aa0bce855ed7a0732eb041e112803447a9bdf4ec0da27a0878e34438424093884c67e0cb08a9ead0fe94d7c4c722ea3babfc3a995a9d6448bb8186e7add09ba7c6417e921240ab8fbf99ffd607473f26bd023d14428b2a1a1e82b4f8d8287006962d0a6302387d1ff0344c9d4949cd995b547ed55c18260d406b30f44794cb253a7f16c65efdda021ef8207303c6fff4156772651db102829faf9d5282b2077421dc26249f0d4cc6ba5a2dffdd3b60d779bfba4bfdd22a2aaac45cac000caf73fab8bb1638f33fee50deb7ac1c137aa3d6c1a8e273181755e05df15946114db513993803b32c4dd9610a700076dbb7f9db11e0c113ef54a4deb0ee02cb4c4cb81b023f85a434d1286941c99544109349e524d48066c46c980471b501162a36ed6f6834147289744bd82946b32a4eb704837f0678d233b99fe024e8fcad4796d58f4fb828a4b6a1c44c355a128fe27dba4494e942fcb9d63cf02efc5df710e6f0f92d3e3ac128e42223da761bfb8861eb96eb1f573cc34cefc314619d8a0291d04b9528d34e7ca5d5fdad4d37d38d0e1908f5fb2e18fc8838c769bb43ecb941f3e4fc1a8aa31e71504812321ede7cdcb2f95a1f4017a212987b835be9959151cc53d685b9757ae14171adb70942d4485a066bfe35cf60669f6e15d5e6fb275bda26c8fcf82c3e4ffa38c45ebfc73ffb7ebec01a6796c41ebe0d85bbc4a3e7ba9dcc37e2cf3dc5481adc1a9b7ac1fc408160daf66e04298564d857701b164f1887b297c99720ac5403fa04fff2c9b5c202bb3104a1ae2d45345d0f9552d8f9d048888d33e88b5fee460117ee9054d8fa831c56d7baeb2bd89d1a128df452449 +MD = d8101ed4097b4bde7abbc16cd854e4c122460dbbabf08a9f56f4f2b882f59b00 + +Len = 42488 +Msg = c0a4f347f790b9985d95426bd59a30eea659a0d77d5852f8b61a0a14d79635f25de8d0afbc478658a13718b97aff026f385e5c45537afebd0f19e7ecff13e08bc7085c4c254ea36a332d2f84e64f56abdb722aba53609ee57c21ea95f26f3074856a5fc33d8d58f49be14f75227074ca16fdd3de84f2799b829ad9b8b8906ed21f78a1bf09ecec1f62b94033354ca4f37167205aee19d905abec7dfc5a60e1d01e98e9e69354a9120f1fc96727ca2e4e7518d6d699bb044b7e7f9e0adfc6d393093400e0e2abd5f62a7ab4b901d15904a979c0f98ec1439683bc04894fa98a4668b3af56fedbb9f23b32c7d0ca4b6f3d96f0a56cd414de0e43097622b2f34f0fc47dbcf0f0ca9d2fcbafcb558a1fb620c2e64cd7739a1dda45cfbd7d118b6a16a3faef55bf62c8d4615887ef493577d6b7c47ee0743d48231177a141735923849092122e7389840a8697c5471075f986fdf00332dee4a6103067ea17e145c28110adeb22152917f9c1d34b05e6c786591ad4a373b97780ca290960a662378e34adb344daab29cac89a75e2d0d413647798d6264c0ddd1e7884c4cb97fe17d0c6ee0ce3fd4071e5a099e35250e141dc07ff605364e300c843cafff291bdcdd15f5b209034d9e9b0a84786632e15393632d5d9f36442c7c65382249e3da841d6257d571527807973092bc6dd1278e3ba1fa4a9cef3331a5fcf349a9742c65c2a43db1a397d3c0975eace0c87a31327b0f7f337acbabde1dddf69c9a54a200414dffecfc3df1681ff74b6be2a8aedee5fe14bed5560e80486ada71990fabc22db226ce07cf414c959ce6d468e6f0e1e10063332908ebc6ca35e79f21ffca49fc833afb32c6541c9cb227b0a7bf87fa10b8d336e27ec42ff7b1d64bc1cf8e061233a4fb29bd9a26a9d956674b9d0475d989fd30ae02181a65810f2df4d9576523461d24390f941921651b8ea0f9d6e3cff649c6c84d6814a805faac37a7c705942cec2d0d46d252a7f7ef8d64708fd25870315fddbb24bd13c3314d06d55d55d97a9a6c030dc561b2043af9f27b8fbff79a5c725ac5ee625d4b4b96fedc7ae48791b077b69eedd4b41c964ad785670b41d71384dc1815a2c90092006c17a0201314c6c694a4cc1a42a389f680189652bbb90f2dbe0c4b0d0b85bd2ffb217d97006635df29a9e0a0d23b7e9388cfae04c9b297d39d2cfeff793d155c088463c7d4288627e208bc06d736ec885df50ecff05655fcd5e491f8b6a9433b30bae31102be50475a5bcecae6386c6b7c4348e2c406c22014edb497385cbf33e02f8c3110b9fca3ff1d996b73b276b36004ed0bb95654d3c692c74972c9f1ecb37cbf76828e13d44cc89c47043783e6a5e45b9944c7869e576e5a8dfa7383bc170d0d7fdcbd1e3ecfe7480c1c2a2c7bca5c251a0adcffd663eaded333dbdd28876af6ab83b9747a04e43d19202cc8e929c6ca1c5ff8f9126892d4c7b38566c88110fb882c25ceec6869ec0cb491f1c550decb0ec8ce3ae8d1e0ccc9fde2d90280898ca41a64862c86c2c5354e0c3f86ebee987fe9af1db03c7f376877867c6d325f3a7df30822a0cc99694150fdfaa43770c2ce172e1a0f04a8a501c4d2f96ee2ec85742a833cefc64838bf71d9cbb3e02fda97f5cdc85bc70786544a7ab89e2ecbee3545682d6fe079c3fe05421b2c6266306be9f0a13cf0166bae8cc032617277e52fb8198cb7c7889b8b9fa971742aae649888592d192c5fb59f10560f5f5a7b0ac21739c35dd80f1fe6b5825731c572f7cc4549c476b84e049459aea7fe533fbfaad72b79a89e77d1addb6f44cbbf5e6a65a5552fec305bc92ced3c84b4d95074387c71184e875d413f65c2b2d874cb3d031d0da7d0311383d72f823e296937d8f97bad17a62f29ef1a091f39be8233c01330d5c4c9170fc501b5022ca29f605e6c59220055f2585bcc29e742046432c41475301f4d7eaafd6b024ee8d6c854651f99925ac47d72f7d43cbd5430975299855ecf0fc3b46f9d419bcaeb2c90ae9d71b1509f782d0443c0d603f8d997fdb0f461e52ec274e84543e608bc2a74b9581134ff36e78d86dff07a5d9845f29ecad00324f4d02c8f55d0758ad446e12f356c98f0c9a91b752d019e2ccb2c13d017b6c700ea6347df7f85ceb3bc08525ab5e251d7b0236349ab62b5e3f9f2881c57f721fb87f2535302c25635dbf564c64a11040692ecd19edba25625bd1fdbfddc3fb8874603db848014a063dc84851c6287041fea7c02cf5e2ef3647d2a6bdf44fedf46bd2e4cde87fb31d0063c3fb7bfa2f6861f47536573872222c2a8d44b02932a9c55c823eb8af48efd1182f11281f33fdbb9d56febec4946e325f181bb95bb0f0a9877fd15f98f2c6d670f55c78a06648332bc94ed08d3e6180fbb10cb8ed51103fda434f864297e837f27ba41084ae91f22538ec359b59443f86bfdd55e5fb53b0dd367fd4b6209e1d272ab09bd3f51f20130aa196f6cb5f9686aa57374d98ff2418c02bf2fb7630b0956a4abf95223be47da7359ba77efaae85d942072c0f5dc2144a1987197fe617c6a43824d31d2d66ec7770ebb5585daf0ab6666c8b48b5b3583a123c1925087b423e437395ce3dcfe8e21a2f2843d0c09ea88a0f712b4f1f6cfadeb9024fdd038fa23354e11db347f750fa0e08269a09c8177897e6a0722dd9f045a5dce5aed83736d06ec1f2d6f5a329d9315ee804b3106bf6adf38f670526860fa8b0cec321c264e26a3c35ef0273d57f3f317356e6fe0dcdf99ee077d0db23036b85f46407b69330ef5ace4695efbcb4e18aaed8c91b63c522f17be7b6812eeb96633ed9b29d2a83a624a523d7a04640bf7081d185eed6a5d1f44802de9f118dd152946949fe93a337a1a2cef00ddcea80ebd48b41ffcf37adae300f71bd33b1c25bde5ef462355849daae8e07bfe47bcd038f4c26d7b4415f2719559663fc21148504fedd50786a84d5afad443cc8bc4dc19b5d5cfdee8c8e67ed1d761ad4a46dd9ef922950c4a0929c8f71d00eee72a92cde060af9e6e0e37792af38692301765d856103ea81c318373423d3bcc068884d418e59540304065ef25306d95101d61bafb591a7179bc1ac880a74cfa465932aac3f7095acc29e24f35105f1c66c351b56d4fb0eeff032057170dcce043072cd085f78444be053d27ff05f39eb0a3d6460076aa86f8a164ad99b33414792cc3e3b3798ea4727cf6e7d7a3c3926a294fdb79606fb00311381a7d4a0b1d55349832f0ff90e085fb703d435c37ae0fee2f141c9f6910bacd1b4c3634ba5163b92a6ca2fc238f650b6966e6a1d8382e4d045e8e863f2f6c4f9ea14905da572114faff6de1cf079c17231326071dc721d0503923a74a42a41332c84a3fe39519f27a49a652fbff97c93db0861e80e1a712a332908523110eb2681fae355ea1babc38f9e0c222cde47c29dd8b3aaa0e1a7e7db949a24210f897bf15f9a8b3f38fecb77e91b1dc090eba77e8a9fde1a2e89e305bb3813fa8ee5da84990ec7c11060e66565da4a017730e986076dad056bddc7b8862a4746f7c5e943918732f60b99bc60f991cf79fbdd30bd35653ee7ff6c3afdddb7e78cb1f253352f4ff4689270f6708d87d4b085bc262cfdcfba4b52fee5dba8291b552434be625cad349f0bae3c9d0a05822d7b9371da47f248b6cc5b705acfc60d28b852d3d3fee81a22e01b35f056530078472bb9cffc1711b2d54a82823ad7e28dd516398ffe49d079777f8a705ab977194f4ca71402863cc6d594c35cd2a3c50ce346989e45187b2c3aa2e326fe7f0f98fdbde2b04387f27b3401ddef7d74dc2e4aab9a09ba9d46c38f4ce6182becef7eb84813aba6625b575a59754324904f7a720de5d7441f57c7e0443e50c7494053e7b3e20e125e9ee4af643661b0404779c4342110cde8d6c0945391d6bbde299df4c7f6e071c4e4aa9ceac55007ccecb1a6e7f7bd3c3eec34134188b0f0f3d3e6464cf829aadc543087b2cd18137c65ac81f00ee5796ac1adc5d6cae84dd066b5450a8ff1a5ee17fed985f4c2ba98dbf2be1510906bb37cb212d90086b9bd099359c964414a42549cfb2be255e6677509c31fa2c6fc6345cc6214d1901e01e407ea501f2081203493536c40d97e325c7bfad56e9013c146811d4de61063e520996068679732cfdf694b10b6576a41b7d0c9011cf59814a45cab4de60d70b1e5d123d9e4ad45987ca94adeebd592dcaf8e9a6954fe74a58ae274dc7a902dad5a389b6b3f6aa2c333d8b79f885ede4b6c3fd4d6bdb28dbc1e9de1c14aa08220a85531e520d631982e80fc1b34f736d5156adf11ff19cca0881458c6fd455754f6b04b112efadb5e9228801a98aa82c4d29823dfc33b199bf1cf42b13b87948f6dd253b512dd865f8a59ab645c7eaa5ecd50080bb1215df38157084bae6f211a3542af9a74871be13b9ae5c0277c96ec2b1af65b70d27ef15f33105cfc04e63d7588c988fa01832dd07396f8a1aa2eb5177e5599a95666ddb4ebc4accd4fcb3f562d07474f52a48b6f6c26d273125b03b7058d8b03b6fbffa7088b02ca56b96affb8d39e19826842410efe1745bc031c333606fa27f9279e6111cc289a23960498b19456019ab69c6de0848fbeae0f49b49a28adbc27d104098ef1e4e6be4c564ba1b137aea175df1b6b210187f268d262b75c6e6b49e177c80761ff562dc1a83e0f9409c99f8f5475353d364890f4ff64180803dc653e40c6058441917adf429983a494f99deb43a0c841f7a88e9d18e3429635b686d2a72a0fc27140ad8c6b858549a0e7a171f4c7ac930a4ff64a6406bf6ccca1b184f31dae83590accb26c2a9eebf43ab609ae10679d37e6d0e32cf615f49047f03c6ec6692fbf98e1388daf55f2599be19bbba383c64815224fb8dacf94494d4ae25e4ec82e6c91f306163c33c797b22c0f61a988750383f67850db72b6be5ec85f0cdc53e8289e0b044ffbbfd076269e4de94afc1432d953453c2188c1b8207099c09993c6ba67301a80128176bea03f3e9bad690a9bbe429ec3d3991dff3b4c79c2ac0f2eec936a30f0a9012136c718c8befb56bf07dbc96b2f192b315b5864e7593e4f8984cbc12ee8e9c83aa74430d49c5b4c9b3dd8f394c61cc867941fbeccce77dc404bb63efcb0f95d27d9be904b7bf6d206075cc502d104f7267137640e697e3db909fde8829002485294de3e13a4f470682b0f499b97f941d7bb495e97727cfa5e8647c8a9d02c1221a04c44165f7cae29729a864862222ce03afcb24d31989c96893de457b79e42fec4afaa3af3b615b1a4a584f278a742aab6f96a1aeefbaac8dc8746758e816050c9af7669aacb2c6889d74c7f22b10b9df7e78ee5f0ccac5e45ccf6ec9dfcf47f78f5b28acae37bb7e8d9e5d9a8680e21c46f249680342bbf8db4faa22c3887f3972965859c258b048b5257e652f3d39fe7393614e65bae537ce95c81835da013eef3984268bae3b838ebab90687ae27d26eccb496a68bd82d9102470ea92c84947f952a876ca0c3cb84ce8bd3127c4254a30ec1c5484e0b46ed45856a8ff86fd68e69ba10d7c8cf7d31c1657f62000fd1bafa075ebd6a05101da021d06cd62951a607b1576f8ed5050043e45ff8d1e6f600eef3c788784c15bcd29ac4c24e47a250ffbeafa67b6b1f9ab666f9497a6e2e3f8e15943be156c4453d6ebc22b9514519d2209dff1708194ba99bdfd6621be6a137fb594a4d9bb831410c2af0bfccb66aff95a6dbda227ead8dc178121176abe07d036b3615a14e2badf195deba2082bf086c5eef4d40dc3ae39656af00e50a77ddcc5e71c20e027ea4bd812f40d316905d333a8bd8f9ae7e3b78ffefc90d7ec1dac4b7afdb1881b4e5de7174ec7b0e899e88ae44159361d205e7d866d2467578e47aeb22d9772868e1c2eb42058eb7052cbb4eaa7bd492e0d3718496b5368ae79b5d8d8d45a08305291963092464cc9d886970218403be3514946911da342ba85ffaf331980b1e041c205d5ce1b39bad4211d74bc6c7502959df0a4ab9e5e435b2c1d0d2593d46003b964e9f95e1c0deea22d87bac85d538039ffcb3ecc2211a24409ac201bdb76417e9cb53e985c88cd13ae853bdc5ca0bb27594efeb4f7eb03505a59319e2deba3179381c35061f41a7b8ab46631dbafed6fe87512de469a2657fa5c80a63286d08e3395b00e93187ce3a85d644e4049bf179288a2d275e7b261d0fd36ba521171eb63382e5b5abe9c52f0c75cbbf436d92941ced819ee975077c4847b63f5522d340ab365bd1eac21d04a3c7701603ee2acdc90da3a1775a79fbe3876278313ad73124e7cbe47abb4669e02dda7eb2983a94b16d0bd5a4860e3a6635091641a98af62519be63d83fd1ad462b535fcbe632776a8e32b1ed7224b644b3026002f97f1e204ecbc68fca3f6d4a42734fdc62b2e458e3a0acaeb96dee1383f70c01c52407aaf94c831de4f0286105d2b550a82c7a00fffe5c84c63a40374a5f60aa870a41299be92fef0a845d3ee7ca26c4f11f86f7557417fc232a5b3468940479a9a25920b90a338fb57c7a185af21aa607fcb9a066ca85715abeadaf513d7e0bb77cce24d328248c70390da1e1c3177047548090b66a1b80c757a5eca6d423bd3b0a0eba7cdb7941c55a96401eb593b029b76a4cb6db50a71395d290dbc09c2aaeca9936189cb86c2f519297645225e23985d5490a76ab50a9e9c21062bb5dc07d4f0c3c28d4585808ae80fc55213482f1505ffa03f4b21a04d3e30fcdfcdf0b30f7c641302adf820bc1e003539b461eeb9778e445bddb7faed4b3d3903d9687746565c9d0f8c496835c4e30f238d12272dbaeac424aadde227cc2f03bd61ab19218495a5dd68df219ae29f9c3727c1a418d6f968c139fc1ea3c8f0a335ee21614710f57694cc2213967e1e219e09d82b23d4a5785a127d770847676195073219610166575b3d7a05cfa247e97fbbbd85f6bbd53b19bec6b5ff517c84023546071660cf8f5a454fc0ed55023b03c6da7a389371fa24c441a02fef1756a6ffc5f50f341767ba6b090d99a0375e51b195d1916460fda3ac55ff4128201da9ed17a9f4852827a33710b27b89ce9b93045854ab378c8cbfff699cdc057f223387a4eb6c5ce9173c32cd773a1bb03aee488ac92b13dcef9f43e73da98c1dad6a56d5851fc0427eaee3a6267e5bc3838c0492f9bc01386d6d0336ab4fc7e00579e1103db6b91ba620d30485f153f0bd95c0daac040888504ec4beae77beb17486b0beddd94f5cd5bb88505e390a20323104c9a9ab30b4de6c10e70dc9787940ba4c482b2f8bee54a78cf077fe8839288659c7ba5a81a560ef6e1992ecfd1eb23c3c14f06174b76b0b674e98e9d624e8bf463ca5b904411dff67bc0389558a1235088cf31612a0610f9fd08ba1fbcaba025490336fc0715fc28238294789a3a8cc3917fef76e9180ddbee017cfff12e577092c2c25bd1e6c6347f5cccf9f53bb +MD = 9570f18459f97be85bfc8fca837e0891ef248ba6295119679280a136d60e57f2 + +Len = 43280 +Msg = 2d819b81df848a0b7e302b768f4748374581cb60f42ed16ac91cff31b9bb1940b77fd04f2a86dc0a9e7b4b14b9ba194c71b4004f7d95913e092584c1aeec4d4ba19af0a02ba6159559345f17f43cfa6fb3e973c4b03fcde21901d13a28d2a529559aa07dca2b5d3517250e882716132972e6ccca7573abdf5f788da40eb34a6139478aecef5fdb704014016e3a918d011774b266b47853bb4551600748d8637bb76856f88288b8d13ccae0d114f39080085bcda25597ee013256f46cbd89190036c7aca66bef1bdd730f52ba9f84432cae63c6854018a4368e4deeda570e94771e2a320092dc2d1e4eaaff2fc28ecf90715445175e439ce4c0fff95afdaefb68d65a930ddf96161b3365903b65575c31baf5f161955fff923234bbf397b2765bc81f75d53b67fd5c8b06ade370281199ef0f736aceb6f4c94bb4dcad0e622fd95b4081618c950a6abf56fd31cc49164f7a6a723bf28ea4107346059048064b69f7875eb8bc6967cc351d292c5f0294dbc1ce97dae73037ef12b4dea52ee6f59404bab4e2b12b390a5723d8dc129bb3c62e038a5197e4d4ee90c40ef3a84a53e1eaa22de85523abad8c2fb34ace5b9a9627d0f2a8e8f2a396563f3e829f798dd812076fd18e99e23c3b0b627d798c72d616ff78e5c4a1cd6ecaec155bf9bccc01e2b122a546d4093fce7d8c7dfc74620b6256c312123a7aff55953c85a05b38e5c367ef6d641d463eac4ed953405b93bf739e7c36ba05d1cf60005a087a9ef80b1ef37e30d0bcc1c23d46f3062c8b2c79b19e4a5aa34afb6851f618ed71cc35fb591b76f672f9a452e92c7f9ea74b56c28420d685b7512052913f1e3b6c2f163edea87fc7321b147718ca28249be2392154eac7bfdd61661389a313fa520dc45b136143acf86c3bb832e6939fef99fc1e89c6c610fdc4f835a0ea9f330daf66da621067acac32419d9f496b178bb8c8418b7a7b8100c0fc403ddb6bed845d2544327b96d036b64eaec7bb56955787c413c2ce8d19cc9e9bbaca401f309f5f2920ea6b761f7e4088741303fc1f3b4d191b978ca5e14aa6fc2daedf630446fc99f6f4a8afa16c181a76e9eb07c01f54eee1707a6adf621f48205180dd72617d9d4fb7faea5ee9852a3cb2391c7debe26ceeb662851dfd53a61c1bed3881d82a5fb19b29cf5fdbd0e14fd7b6e5608740bac9d20a9da301883fa874ed1a3a934b04a708fc05ab2c426636be2a0a70dbb602fa2a3a5b7758073a4cc4472ca37b28b7b6663d354ac221e279d15d33b5cf8b690a28bc67a3e818c09073c415c776099e681db2064587b57ca1771607384c0919803357682f9b02f9fde92c7dab6d35e144952421a361485d35171f2e0038763ae4b2d20621570f0c1a8e470e5949f5a9d2375a2d6c3a20acbd1b3e51157d1bf3bf0ff6ea830685226fcbdc6ed8f0911e9b691ed3a8f98692c2ea3c188001406d98b18bbc5c8fad628506b545304c5167269436bb6086c237cbece02a48ae2dd0f7005923b5dacff5e3a8983c6a447cadfb216b8c9cc91cc26089f430756a2943646427c895cf3302121a4efa8cbf5c17a37685ee62aadc5b09293ed1101f7dee6845be53045620b298c39f28a1a737cea5fd4c8bbc11492c4f3488b620b472fa8a0be76b0b57e02dff0a526eaee356f9891d8808b1e6ac5ab9129886ad114e8f531e68b8b0bab99ace593173bd5b01c1d83d001049114d10d02b36eac01e59d44ae709e4fd67f4218e1702e0d5f7804e19c77d498d7a74741ae82c8a5fc3ddf2f7cc9494fa46d8ecc6ab8e5cff9f1ac7d422c75b840969ae21af410d95e82011e236cf72ae40af20fe7f9d90423b185492b6a6ef37a773e76de93c1c67756b57948e8426213bbfe8bffaf724a6b3c21fd9ebe2adac3adc4784ffe65edf5206ef943a79585b20526a8f8463bf33ef604d3429423cedabeaf5f057077c046739ff6aa477af65d8aecef985aa09f2d73a0928d88f4502e3e61a395b671dde9c4cb09f3245d3464a1b3d826594acea5498793f60916ff1c918dde572cdea76da8629ba4ead6d065de3dfb48de94d234cc1c500291063c444c7677e03028ad3073193435f7525aefb4ddb16637197a6a9fe16f39bd4c8833e3cdf8c78cfa6fd0d9315c2cd66a2440ba0593050f42f7a519794a11fa447349ec06e9538fae6fdd2f4d8c0ff488dd37425838bbd39c0a72ed466911b4a88e14c993c23ab4bf1da409e03c55fe38d6020247fae1009f03626fcb54bf98c32912f0f70bd398c709c3ed8bf5754fe4bf5f6e47521b32c672e2359a8581f33ed4d316c33ec4a830a4cb3e9340046636e99deaf8e6d0c6ace970c31683ff707631c39f6ac3646f968f1891a89479dd89f55c0cbf119858bcd7ac9cd1c88e7cf390630f7042695b73293a7b3e7b4c22686308481c8ad84560bde4175edbc59551a13fcb562419f820f3af5fc75d01b15ca32131938b2739431cb5e710362b45fac4c8679ef11cd25a7ef5b3c5c22116c146353db6bafb90de6490708850260b697b8b68ad21d8566a3b9c1bdc3330df50bcc2d0f892cbe89d36124839b25c522845f753234ed300faba10fc5d3897576587489fcb9b1ead0a01a9e2a6f524b6a1b4aa9b73d0a37e666ae2d9db3aeb2b8a26350eb24c7a5a9f47d5b4526115a5803803b6214fb00b47de8038d8d2a2d8392a26824f2f557de7790441cebea5ab2e509147be248f54097577adc86834d9ed038bbef4ac46835d25d41f7e466b34168ee1a4ace7a7d545d0478d4c84379d3032d309454bb4077adec3b1d390ccdcd353637160118ffb677f6e6bb7bf11be8d38aae5a3a62476caf4318d71364101ef3e95229a3aae52f8c35addac6169aa6ea561f8b2141e6db816cc26d9af7e5fb4b1053c9dbb8968744cab379d2395ed5ed996a6d33e1838dcb6f1f27f54cb22de5b2213fd1cb7a8649bce2e0c7e2cf3d875b774998c9884b3452194c4dece07d68d7a6d3ae6af9f440132156cc9a55a55ea52e6678815bdb641f9726c95dd8b07d87c9cc9a1e7b98d4d8572409e758d71a7e770efa92660504de80fb92290191cbcb7274bc6e683bab126e93a754409964ef3a8746830f93bc95be14cfd7c2e7fbaa89113de228a56dc94de9ce6675b4e4ff5f1a85dcc04b334e38b9a9f08579b42df7ec4402239ec305dc6ea5a75ff041b6ce0fdf26e0f71210d63248fbb1109f5ba24dfa57c2ee55cf036c559e6614231c6fae7be7d75d00e480c6d380ae74633c737b87686b5cca2eaa2905d3f3ea343a2a3e82aa0c46a6d01ebe7208e36da9d852c012bd87b2ca2bb9eedecf6c381917e8091bf4e979abdf98624f1abac319382862c3df7fb6ffcd180308193bc77dbb8f556f4fd5c0b916d6fa8f3e9a3d5a63dbaac355b9310e1cb0b0aa39c65f062f096ba64238e1757fc1ce5dfceba5156155e03aa79feaa220673dedb877c75c7a3c93e7567ba589213f26dfdd16c1f13b7c4c505e98ab61e226f1f81db5c928a412155a1104d49d0439493d68815a97f83a362b010b3af369d616f4f0e72b12b6723828fe3c3658319880a0269537aea076e5f618626001bd5df208ba77b6c1b7434579a28b9263af4213309dba22df3c18a2d72c04e533e7a5cd5d01cc32deaf6f8474875ab26586214a145759e1d2d207b5f6c4599130ee94f11a504e6710a7dd3d42340f5c07bf1c6c75dcd83d2e6d2d667c68c92ca1da14a5682c651d00a575b80a311459f1611ac37ab2a1fe9c1271fd91a0bc7d2db40c306f1f791b56b41f3cf507cf71ca7405954c631aecc3cbbbc15cf59a4d7d8363db56b0f22ab9d9c3132b3daa6b3b01c42b1277adce4c9ff3fb06eecb64384f03ee46683812d11e4983d35b0b11eb0e3fcdf574c16ede9702f3b614b78a0720d3b166cdb39b478a99d516e95c2983a65ec31de4bd9222b9cef195edc78792ffbb6bdf69cc8cc3259c511b70047caace0954b14e0b03bf0f403dcb03612280f3a366d8c4e9afecf8383e0b786bd2099028c9d93b12895ea1401e7fdeef247a0573e87a6474ca6b0a56e60d87f9f347f3a36abf323aeba775b7deda04d756273c133aecd3d3a6e764df8f4a2716a60dff627f88bbebf341958bc303ff837d30a06ca45799700b090cb982e9df2ab403bd4d505f5e8d67d509a616225759643c39646de33cb1c1790cce0713379de6d0344d256aa488100ad7ee1e6192c3d2f410e4dfb746008fde6c0465f0b8d7021d6d4845d11445b689094d25e63a278eff2cd540fc3fc43ee13245e6a7e941d0916e27f9bd372a21faa7aa71d9d6ef6107951dd9d9ad6496296878d06153411ad541d3895693a01803b7ec4b63ef8213b154a6f2771a4a5f5f15856c457c40a690ee333dc3b210654f43fdfbac0c486ca77056d3fe0ddd612a4253027ceea73d6b7b2e5c2d1ce0ce8452c4c9dbb5a93491f117c3950f856433f6ccda2d31dca70ef2ae30bb577a1c4bed29fd18730d3216e0d00c64a7aa2f2139d73b81cb49ac205a9aff96ed44174b1b14de8dccdc2fdf4469f4945db48b9d135c6fa04654144abcd912e566a8862de46db55f4a7ef39425c9c44db90c404f8d44bcb12a67a6331f55b1d1480c3298501ccab9755c46dc8bdac3b6441816deae756bdcfde92b838bf524821ddae435680a65c1d4dcf05f7f833bf88541d5f37fd8c34b49426ce409a1b21f6c7962ac331dce9fef67b8c608ac723a04ef443506550e2395d92efc9f41a4d0be5174a4b93e4c7c4e6667b92f3db1a54a8b2c4d4dd5928f6a183c7358be42bf9acae4c5035629807a3fc5dffb1f4061de7b55e25c3e99b54f665df239fed411884c79b8184babd2fa5c9ae1743867954829879d397a69bdcc2b58214ceaa2f1103ffa2501071b9b5623ae66a2716e6a11fb8a26ee6f4ad069d0f6a7986af485bb0b30b3c470c10217fec9178eb39c07c05b252483078616afbbff2d256711f51018e30b6b70e430c454b29c3fe43b94ddb0223ffe2864b625553b5afcc7426a98cfdad5fdeecd4ce58c329cbded913bf162472069bc2bd8540671d72474cf0cd996dfb883d1c57f021011c011b7e72283d95d6fcbaa24a6c2376b4ba55400025dd6b85c040312f1a44717af422984711b7c2bd32dda9745f94eef5f88511c75acf82e6a886bfcc952990b11582ab25141b57bf59634cbe081b5c6bbd4526d8c4c62098a18f1cd30956eb7905ca4b7ea7eec137d0ea00a9de0d2b806913e3970c77e1163ba7dcb4df42ee1d2557edc635987bc129e069aa4a00f8ce8c7ffc948a5b30e9e78f74049f741527f4ba069e45bef3e5c4c4ec41e48d30c0b7f7c653d6c68c7e25a47724b2610d24046f2a6970a8c61052260d0336185fe14c19d5577a60705d86756aa7c0a0129bd4f5bdaa2f1c6edb22824060a728f2bae934ae01ddaf79028a70a2f032a7d1e9d6dc64f2d9506a90d6583aecc03585b7fff6b4f5791a03079224c4b090eed7a88a9184b6180b25ebee1630fa09d48552f0ce8ea4f526aad73e10544b63fb705280a3a17653934d46da4ae72afc7c7e367c2a9f92aa5bdcebfeb1b6331444587229814fb6248f2d3c1b74a1f21093dcbcf2a97c41312015c054878f0a3a5fdc8215b8e3e803656236221215e1deb12d60e4b989330229e20ec01023333eb498fcb5c912ae689c68bf9ea1977cbf6aecccd2e95ada95cfcdf1d1da3730a9d90a6c8a20305bdccacd52e1b1cb154b17a75b3d9775ba749836440a442fa4f4339d3c135ce182c846fc7a8ba1156e0a4dc99695624e5526f9c76fc9fc60e2b66aedf5e1ed8ab5c3b772a10d2dfac96583dff96ad8693d158addcf91519f8c68d569246640b0675782cc50d6870fc9f540670e3e484ac4d8c205fe00e2200474099b3220f4d709ec4f6624886ab8d23209db4f705057aed915bc75992c96dd707df0c99288833ffa63dc7683378a949456c937c17f343daf1c8dc0baaf6899d6b906354b5a395c1a669bd1678bf96394ad9d5172335503b34cd659f5d919ac2f31481fac186df0c4ce20cfa5c689d1cb74e417230b3e939e0d42cbcb482e96d28d42e345119580721107cbbe75c061a1532a035465556fc7f44f70bb5b1bec7903631aa6f444adbac5cd5022181195aebedba086d03deab98858f346a0761f8b5a3540322effbaf752cde7613c01e05c1e75791aea5ca6eb4ffbcdedb6a19271f845de87302b4ac05e960c0c4025c4220873f7b1023626f5a1a45b10fc32f7c543f15006865bdfae3fc24873c2d1c3a8e37396c9c65eed3123ef4570efbeb20de3e44f40c005ec097cbef74842aa614955f0f0c5953b6c565d38f75e0f8953b45e7b26b64bbdf27aac08c2fa3e242f9bd6587054fd6026bd941dfb68ea475f40fa4260e7a7f8756a342c15fa13c38118db26afc86d419edf8f0acbf1ee6d374c6dc6a855532a0750ab858ac871fcf838dae7f9c073644744a48be3b9ba5f6e3f1f64477fdbe70ae688c17c05c75507845c1908ad9e5cb2856b2dcd00acb2768195c7d8c7b0940274425c740282503173e54637104c8f630a494d026753fae2bc575dd6dd6fd570826eb30d7f3173089ffcdc2f791c60cb4bc5760e6e3e9d3557da92bc21681ff7a9646192bc6331ff5109673c487c957de276455b85db1de0eca603132447c7ea51d9e4be4a8611884fa153e81eeb81dd46c227643ea7f167d3202b56666d81db0425b8faba289625e44b4edd6ce7aa7be13f88d30923bc4cb3ff78006877c24c38ee5ab28bb9346aa76da466a30f93dc5a45060265dcd301f79a85ab9ac50db0888a56702fb670c9119ee13e61b1c2711a891b9ce541da2a2677b0a27df3c89a4b8018de16aedfc3ab45a1af198cbacc9a7225ed07e14627c91d95af9272878c2a662e36f110e5dcdcf852434aeee1515276d17d3e498b7d47f2b10d78dfcee88db313351f7b07974f2d7f857656eaa1eb2d9ae7f8c92ebd2bad7f56817a0341eded4433224bc9655a6b86001c531b30ccfcee97e80eb44a0c947d155cffc92ad37b5dbb8a11bfd98729022dad720780707b49275c8890b6334e16c45bdf94f5d6f3ac58b75b3f666dfc7078ba2234136e0f46f0f6a568746840f8de1e87db5550dcdc854a86ec8e774c5d7bc2e2355c1e4f449f27039026e4038fed158710abe99d5abbb4333bd42b9f35a148406fdd19b1de7c6e119c206f0c385bc15be97bf9bba37674de91ba036b7573cabb6818e8cd71334c6e010341c1aeb4b284aa4819ce33401ce7a2b28747a98dcab19291f3f8b93e3267534204da4f72598ff792c24ba6a30cfcd3503faa5e39b8d193cac3c9f307d09c076f40ac973f26dc45de7b9a6a09d56ca8158509e0121589d045f0c7db2a778a91ed5dcf1255caf809adae50fa0f06e595650ffcfba17148cc75e368be10b791873ed4a84d709671d762e2f5d30d01c62fe138e9ed525cad0ced14233855117f5be64dcea4fa19d823a0b1ff919e56acdbfc885751cf2815061e1b8dc6521572847621a8c56cd57972d983e4922d85f82e2976dbb552741f4c8b521ed4a214399560e8dd0b3359f4499fe13b61551036aaea9ccd8496b12a44a7705d0fcfce2313390bc1f30807c71c46427a9b9f75f6b6d262d34c067fd48304ceaec43 +MD = 8ff4c479d1230d8dc53493395e89ca712533b80e1b97cb5af448e0e78fab0f7a + +Len = 44072 +Msg = 7bd0a59d7eec22eb806483b0b95de6e15c142344252201d531fea96913c35a9124335fc11afc3eb2dd3b3304963fdc28088f367d232ec8b9d61d1e8b2622797f7dc8c52144a7cb65b3e5a846e8fd7eae37bf6996c299b56e49144ebf43a1770f2d96bf05227431cdac6bccbeda20333a92ada5d629e92ebb31eb1f4d92c9bd0adda536b4dcebd9b26ed485b4912f6296c160d08781a99d6a37a87b7c3c21b13734fe10779b9429dca128bd6f38b275886be0d3eff15e6941025549956932bc60dba8379687f88a12ee705b38f531d3d938369756a292fa093bf971e04082474b79ab9159c79e651efdb34757f035e451d2690306bbccb889899ddaa5ea9bb8c1b7100807840e20c675f96914534510b7de81fe4665950b8b95486e2c8f05788a3dde83eae5d125d3fe4aa9b643eabfd50787725dc8745bd5060214bc5546f06eb21de948136eda0c42afef87eaab5971f28246940bf1103185d3b49f67e88735bed6246a356da93be62f23cd701046544a7a623357949265bac4371beb73a4a60a101b987457f92695d32dd1fda1ee46b578ae82d3e649394cdc83790a6db18b3ed3b61af8b33196f5a2f5dbb7e7ba0edb8212c8a86e9e77e4248101eb6015aa0227dd37e809bb53aea46333c969107666a3764ffdb4f7e529a219fab7d338cbfc1578386ce2fe2569e1602059af5944fbe0c25dfb41bd4dc46034ae954f82b8d7a46f65aec462d4ce62d2eb9042fe414443de3bc99c59755c66b863ae5b5b3839ddaa06d33a4f27842ea3dd95a96535e9d3b231914d31259aba8f62297f2b12cbc6126306c92de8344db93c916cf8e89298268678ddaf2726669ff32f435a0f346a8dc46dfb64dd85c8fe50ab141e21e69b2384a8d33a42a772d25de83050f71cce047030575ccf20a658630c283eaa8de38f7149b7393dc5e40eea7bcd75922dfc60b078657e85acefb1bbdb30c24930785496821216e129c63de011a232a70dfb87cc6dae30c9d2abf0a141b511c77763583b7c6b38f67b1f4688d138ed0064d3630c36b9db613ae3fd5d663e93eb09ab85a85f4a074462f8112ae4160f63db8ddbb7fc0ee8168b9fc0377153b07f8f58c1245237eb928758860e71c50199192fd617e636bdb06de521778a7cd049b073f6f87dbb4ca992478d7ba1cb2a6ac7c43e721db8c4f78abf0864db425b1315030b6d095d92522ace0ebb9cb2f19d8d51fa11c81c64b387345d47892cb9a36510e8c91ea62553f7f3f1148901c0fc12e0f23c10eb04ab0f4c0868bfc352c149a37554e31d6e74a3c01ecf9041fe4dff780e3b1dac0ea8c810f10fa38d8f3769c29a58814ad37fd33d7d33dbf91259fb22365516e7e9725a8700845d14d6cc6c783f1b20b5bd3a3171f78a8fb166e8afe552d32325fdd16eba1e0e16e09047fbca4ce6e6e7956f6564721ad7f261c2c3c94afd6eecb28dacaf31f7f6772671bdc2a901fe67c1e4171ed72dd9426baeded6061b1cc7706dbb7022852463fe125b673eb48ebdab62eea80f09bd2cec75a8156e75583b9f3a4405da01c92c82f27cc1f347bf72b9b0920901f6ac354cdfcb8d6b5348d2a7bcee7440b30c5819d8c9d9b101b80d5598ac49943ecee7f4b4ec46e3fc1413f0bb62c73be216712a8de9b65e2ca216e6e0e471b2284ac94abcb649c0b9e586e2ff4706b5d70eff1fda8560e40ea415d451e18742fb4863b7bfce9de8d2e3b4e64f463795db1d885f8545e029efe79386b34c962b00f23ea484df4a458f352462750764c3346b965256d03d1719921866cecca3577f6ee177d48f59bd37045ec0373194262a1fb06017cf7f95d3ce2adb690ab8adbfe4d49a7786d13a1477eb665e6cd0a807625ff18ee9af8a64c3534d4eaddc150a7da073356dbaa36cb752beb2621f30115b296d84c7d4e015981a24435e1877a660cc6cd6ec1de088eb1b2efab889a79233993cc211f67e2e7607c911c573bbdcb7e0eb21aa01d8b03ccf20001916f3d01134c60d6e1d4cf784a3a28089f5caf4a7655adf506e752cd2f5fb8a2bcffd141e847430865232b7eb75185753a68a365ae220d8856c9e43d415276196bbada58110acf1029c18b8d2069460ca8fe4eaf8dfa5d4f2043b3e6ab80c4d03e2eccd6360d71a8a04e64062dc7c6197b7c057a8e4519b3f3d3565be6512151a4da0d2ecfd5e71c5918498c2813923612607c6937a8cf413207200f5a4a1838203b2fd436ea7bf5c4bda081c7d346ed1e59f7fe128bea916b3db573afd215de40c0b96913b1ccbf63ad1d79556d4098ffb72cab9774f80f10058b2b3f9fa6ce77191e5fded245f3c674f4f579680be427067ef43eea7424c0fd258881f947834392e31b00b2641d6d93db68ac4a253924d6535a9152eb7cee62f92e2f75749726cc9c4d21d8c3a6b9884555569a191299956e610744da6208f59a8e90aaca64a134ae48aabbd12a3ad0a74e10ce540ac5c2148a2946ad8ea1236e2c4dff958643598da003e2191281fb95b5635d628c69eaea487fcef16d375b0879cffa72867da9dee5d5d207f9ff67851db6ddc101d68e541e734422683c2aee198f01fdbfc0a4067c99122a3b33b2e9f983a5fc259c1ae69e9c5cdd0a3011736e13cc83ccace698f6b618fc60af5c58eb627c70423b2f162b536f6dedb38d5cf9e6a09127a2d00ac6c55cfb04c2c24645db97c9f23429675740f2716d271cff4f8034c24b330ee07f3f54a2922e83369b47ae65b007985ea4ed9c74231b3eded178ef83b1ede19e829ca69f93432dae7e4f16dff625fa6096a1a3e289f0717012293751f623f6a96365b92e72911012414a67a55f3fde119f15df391c5733579419b2a98285bc95b41302ebda98e90696d227323585a1f640a2750444a022f9d9e2d816e183b1f7d72d2a6415eb06ffe17ecc2323c7e4630de02bc0bd8b9edb55ed1e168d9e65245f2c8603ced7f872b398ccd4a457240c695759fac14a25809ac0fb25014644cfbe99ac6750103be38fc8bfe321b3df36e560962f0a8c456e1ae705dec70bef3e77fd13fb64045fd6c8770bcb467e7497049446b9f3c27d0848c7b480596fb3151daf432c5524c2d1103c36e96d179291397b1238177d4af3b6fb9dc622d23ed80258b096be020346d970d7ea100fa7aa068d5f25d02d2d94e7fb081cdde3f0fbd861f2b7092cafcc86cd4539d9d72265fe33a41fd84293805e3eaa00c51557e502537009c0f516b6ca9a355524fea149831677627a6e2b3a7c4ef9fe82d7024812b5bf0b700bd6ba077ffec88bf682c9379e4fba41004317e4945e8291b95e898c01363880c17e3abfe72800695f75697e43a363c69979cd09b76e197c2ceb2dc0be8c1d8dc66bad665837995789c7aee9af091b65aa4dbe6e10af4f9cb226a963561726f17b2da69d5bb3ffd106180dec28e72dc8a31d60844878819dd9af90e6507de1566032aac75a03a06064d50b0859c4374a249757eec7704bda13c458cc4606e92716292e66ebcd3770268d3ac0aa36b4749f1a08f0061d2aebe1237587af688addfd6fa61e797701aabbbef197a2b521d28333f84a8ce59b4dd24b7b9ae51962f59684a6309b77bb5aa4d8d41fcba60bee6163aa50e450196a678aef989f7fee1861f6a35fba65a11a627966ab9dafdf12ca2793a574e321ec018025e32722a880f03431fe6ec77f6484ff0ddd812917fa2e0e48bae715412d40c9d31d14a80ef9b1cbb68f20f382c38cf85e282ea8431efd764e03937cf3b895a65b990056addd373bb5a4699077a1daf3bc0dfeb3ecdbc90df8020270c61880c4440952d4e195e0f2c3b0b124ba9a0f5fcc1169c281bb0113eb48cca714c792a210c0849966ce6f8f45468006b8168abaf2b5086a8e574646ac4a5a667c302bae36612e2a99e1037fded86edd1ca1ed83c47b42f27f1af914af892455790cec67496db7fef7786d32d4e8d60e44c69858a5d6b210e080a9ec5977c2fa7798355bbe48aa8d0bff0d46ebea4e20ccff2b983b59ce4c3f22d95c5eb8aeac147ca70a09847e6b43df543a787f3fab11a607c0e9670feb077bf7d313ae5000bc24a1e0bf93cbf03ba3e27c0efa3303bf65cd6134a0ff93b5f695ff0cdb4f9efb1ac67e4508ebd25fe7388a03fdc0c132b8ed07b17a05dce71d242ecec205bd3dd975313e5686883d13b6e31bec5179f819d712c464bb0d076a22e0cdf51b0210fb4eb8100f04783fb3ee25ab687d848c032c20f1e3a7ca937832c38ed6e7f400dab3614e94ee28e4325eb036d49d776aff4c90ce99248c0791b42585f9f51989f233cb5e7abc10d729892142c349d92178c900ced7e9d7f07127b557d0ead918fc4064d442f6d66503ede763b70b102c0a11ff57424024da811dc158fe01b93a4379bc246016d03a5c0d70fe2249b3072dc7cb1c4acff9223c06f81dd402306a52404fe364a494a39c585c86979e482f5e5b126253f1cb741c63b81af544e525b3247e75c318aa5d4f6f18a179613621063c63ee105e222cacc48fe4c4423df8e0a6e67ffdfb77b3dfb223b36a3b0378dfec1df3f25d83c86799fdefd392b1605548065687b58333d7b20c40cca4469325facf386c7876d3c76470b0a5bec5d8ab786c8e02ef5379c1ff40ee2315660c82e8e61ff15751eb66a486bbbd1f01de3db877aad2017ee228ea500ff006e8316127011f2342cb5bafeabe857c4bfbfd9698b62177845c096703b81ad60143ce6b459eba64f349c11da7769285bdfa934099b68685f0815c26fbf7b3279d1f3febc51d7658c133983a5b4d574bfda45bc62bd74e6fce7556c3138d5d7722c0e27d161bd751353f6d7076a16841738fa391dfb6edb786ae85d5eae77e473aef6299b8f851f0d7b3ad7aaa213a08c7f2f72e15d3e8dfa19375d9f2949a1a6dd13ccc4e517aba2146c493364b41046394e3057eacd45ab7da8349cb232553144cdd8f16b5b61f9a5f6f64db6e11b6cedbe3b27aa014ab21da4a9fc501d4a3c688d14cc283a893bb63fa69ea2820a2624e75bf8a5c3e638819485670cefc6f0d3b949fd249a6a8fd0af20ce2f7f259e65315872e4fc5f6532de9087ed9112740cbb3f2c67654d1e7aae2e8665c0b4f93804f93e6e92fe60b7ec9201fbeb76f19bf9be00fa817a103ca4966e4d2eff6225c807044b6f0b52982453803ee5398f09dd8e21e4d8398c9ef9212deeaf4effb5e54b6b8479ce625ef09aaabf68a575dccd76382d50d2ba2915976c512ce8f86fc38a1c209a8eb990b73127855a00cc9f3340edded38cc36461c0d27c8e1676dcca8fbf27b9957eb6e0dea098a593bbd776b2e7fd48b1cfd743640879bb20a1826321fba2bd29da59d56abd012fa66b0efe95cf959687050b244ab5509d4ea0ebf40778989093f500fd9d25c7e28104cb33b04caba7578e876d3b82071be79c9fe70adf11191bf633c03e81f2a46bad977dcd0749626892d384ff16a81c35bc24a2f2d8154008067a8617788b5fae8ef944b2a776af043878d35e1b3a8a7e29048f870aadeda44c5eb7eeb398fa90d079f028d53b7671a8fdc02036c64c0b0ac714901ee00835f166bb8cd9245d5a9b9fe9f7399f9ff80beab50c11534a2488f39bd7bbb779041c1bfbb99334705316f497e77aaa13e189c819eb54e96c11cb128b228a382859f603dd3c89d21bc56aff63c04164b874491e5485a7909a19faab4c3a336dfe7ca7a8cadf620546f6be48b34935d677f97474cea2b051bc853d4746e75d5ee1b456922b68c7d6d92f3b58f04bff0739b73153ee0a1a33ba9dbe6de1f0b012ba4a2b4766a05f4bbcb809b6838f46ffe4f7a9411e848b3f7ca9a2a5851fd69172864f51e54fd36fd7d94fead2dab3c7610103c8c6daab7ceaf114789a3a74e3efb0ea380e3dca4712da367d47f7ee66991d68704cd224f2edbd3a6c880a35111b1023824b31eddd5602e5f649ac9ee4739300c019359ba96b543c0bb757be21ddee23b903f5e438899b84dd3fc36b4ad6aaf24095cabbaa4dff43dd8fe9ba1e1c9112649d4f566095eb3dbb9302ff9facab6778285b29fc7c0677697987cf0dc242170c8308eb5e603b3617ac32ffebdcde86f13bae90a7dfb1ff37dbfba5f8b6495a381ce84c39d4d29779f21b16364e8b7832348d96b45d4703cf1e0be5e6e0ee0470d0b621f9d8fa8969cd84ea89eafa64c37dbee32ae012adbaab8037e028793d3d073c11a753f93470a53623eb9873732d7c0920114f58237fe92142ed76312c252940c5492f18bf15e2fa6a65403dcdf79b38f57191628da63fb8af15b25ffab29e8be5ea539f52e1ec9667fecaa199a941110953907814b7170b2560c44bce6ccfe5188fa7d6175b2cd2c1be1ee700ccd55e05be33e2e03bd8e44dd7943dd1da221506421304330b087820ad245729e7c1e590bb62e718bae909cf810b7d2b8400e5580a7f73d179e94e2ed4c5383c826c6f535105d0e4bab44252670f5203f2d21bb6f0d369172e381e903ae7d463253ec3f68805e56dc5a0597e8f890681adfe80c7faf72f2db15baef1e77371c4599fab2068486edb621514fd0362dfcf3ceedc3432d30d3c8abcc6f7e4525887a5f7ed79fab7b3561a7b3d74cb8026122708f7a4a0504a6c42c1304a386ad1d592ae52aa453afc05733b9a8eedcd2275f7b698c04b5430e460d4b393eba523d6a72ca25b51ba9010f7bbf4f173301d1d335f89303bc805cd6c5c167a06ea98b16cdaa533271db8a02e64124564905d35636a909b7895124eeec122a69020768f691e22dbce4dbcdd9f9ebe33c9d72be30f4176aa0ba19f906f6a9fc0913106972761e3fb4e30e4eed2d2be62a9eccf4fc04b0204fbd6f4bb77c1556f120490f22d0cae3ab0b077fb4f66db7c0cb791a3fdf0fe51501b58f68c2d0b5c19815cc703854c40fbb4bf2e9fc4dd26fb20b9044f98303b1257156938168b2fb190b13f323685b6372302ad49528c0a7c0f8e9c3dab62684a74713d02e49b8fdf19d982418520446de789a0d57ab0d09a6c59934f915a800059b59a72000424ad041ab7b8dce791a4e79c30cba310205a1f62110db3e12c3aee28a711d08d972239bd0620a2a046e40b8384b43475a0c610f13d0077be14021b148d66bd009046a10998ff3f140a353b85c61897a7fbe5284e3faf46bbdf5fc8bf73fa3024b622224895e01b0b86a05feb1b7d336ed7bf4dc140a2899e355add7282538fc0b2bda5c025489e4d622c5ffead6d7092dd5d68916862a630c0f94275e2fb439d2b2013bb6ec130a145e22303a46fb6dab4c66207de7607392546e010ba7ab583ca51527f9bd239d0d7c89445280c6d0f0402216bcb6612810f499d8b32564c39375a4c54d20421a3c1e9980b5fcafdf9771a8f0556bb31cf2409622d74196f891942e7843bdd50dfab4a189c7434cf60b315931ca8fccbec0c8e1840a54a883919120d5600e72e4f3cf5fd418dcf490c60fb14f9e8b147a170e0a50af072fe12ded1a51146aa24ba1df12d42d325d4c527d5fce53f630fb4f808f3d47b1839dc118797fe38ad98e7f64692e76dbdd952b0aa3226d5998aed4b0de8e56ec4a15f593dcb65fb78f39f6efd1378831fbe7ca2829e04d1db201612f76e87f2ff9e625ffa288eba939eaa2d1c973c3fd4ed0ba56528c95bb139f5f4ce6c002f4f98afcac698c09b87ffd0dcae087cc763ccc7635cb8bb9da43d549a9bc9994c3ff70c43a90344c6da80d923b84d804354c577816e3624bc3b94f9ab666f9a7154234272ac4f636417888ca9444e90dc +MD = c4558c7ec68df61d6bb65238397d49cc320a8c213f7bffdd4a397552d83ec20e + +Len = 44864 +Msg = cb7090f7a465782f680fd44cbc558107825c9e53f24e4140ec5b68208cfe33e8008250d996c4b65f193a96395e348eda1a62210ff69764e3e6ccf9c0b66841d6e6bfcec0b7d817658673701d594a3916b89855f5bed8dec06fcf16fb4ccca111252ff2f62f28040b56c14a42d41fe8820304234d6f9916a0306ba71a77b3ba6166daa5c2253ce317322d0ceef83904e7a4b0735e3463764ad0a895655ea4f48e51c9cd6bc19d1d52c1bd9e6aed22f60d42a42e7133bc6588f88ec6242a27b75f8d03533a2dd21b84ac7be8feda6225bc86e73ace942f4b205026239f02c46b9dc39020778e6344759a6fd3f1e77ff8bc178081bd804191db7f77941e0f0478109a791b6a0fd9ffec34a0458d3e03d9d49f7aea861f7c9d812e8902e8786e4780bbc52b5ad5bbb6b32216271804762fcec3da5c709867d8da04655346668b3eb5cd7c3a910b91d0900bd962db645e61702daac1c4148aaaadaa12718001e1c67679a72f55d7e4b54c97f2dc1e8445d98385f200cbba6e7cc4c79842de70fa488d674cf1ef613accaf6f687f298cb2fece72b801cab39ab4e50400b0a7dc5e2ac03e766aa7d21e7f803b433243a52e381b9d06ac0c2696bcd90951a2256c93d6d8a62a81c452153589a28bdcb5f740ef30aee3e9d83cebfa687d93ff9e4923b29d49721e9008a957904d4967c8a9708bd64c58a0751c20d85909cfb15b9a9628d6cc5529511d614b5ee485bac1e34674d51f6bb92cf0bdbc76540c9fa488729e4ddadc8b50b9c57abb0e45bdebcf4b13f5d0261c45dd4b10850752b1c13b417ec8190d2ad5025e4c6e7393588d9206cefe0791b1080d513b4fc9a9cff9da8a2f1031f2ef2723b32a41bc7673ee57ff0eb76bb361bca857a59c431ae1958ed619edcb93c290424d7afa91f7f65744bf3ce9a59412abd5e5b6341caccfdd7eaca4268ff68c5688b2a562991cc91081cdbe5c5d3cad1bbd84d6defd688119d3943885242533c21c6c14417defd56137b1fed83ab41b5588bb6d648e54e091b4163dd03328a11c26032e5fe57800928ef46225e40342a15d13e38c767bd28d4abb1bd06305bcacd0fd5a8377be33eaad1d540a04310c466413a01f5ee24054bc0a3a4d5dc66eb940e40277dec957b2bdb43b514247608ec7430ce4ed93132f338c030fc8739e8d9e3f8d01c0a15233e5427fc0454c25bfab2b90a5cc953166d7c7dcdd4d12346e139763eac64f0eb24e4e8720b64845223a549228a2f08441cf452e8094ad17a5c773ecf997da717a1f60bd383c43a7ff9c457c3618acf307448e62c1444b317ae15b8ff8dc4a65d2810088d28046339ef986b497d6d265025d28de6605f5693489d7b7ad3ca7d1019cb750b42958d14678a0a413836ac478439d0c3781b2a71de970c9e260fa9c50970c7ea7e0826941411ab272c77af7b21d7553fe5d8ad37b26ad2e5def4bb0079b8878734dcbe3d57d7c487b4c0ce6f814361a814485d6976b174ee792a0f46ecfb1a7e0173b274b544fcdf7b7277992506acb89dcac96b9de349147f10350cc5c1273b6e7da1eebed19a9afb3d498c7f898cddecd06fc29a78f6047b37bac6b693045bc64b1aefc71654368e61a2be035498848c09bf02eefad21ad8010f0911f9583bb37c7c0c807b805edf8011a252e04648f5d745b11de183e4202cb0587a6c8977c07243d95d89c560592914dde0c51c97a4b98231b9b571dcedeb3d1952551e7c47dd10bac0c989e775cd3ac53f6b81fd3330f32914ff22819bfd13d02c4b9dd5e41d51455ca35460cfdce20cc15c2ce60bce26ebe2171c5ea4b2b3118ad86df11fa383ed73af9b48c1e8a8f9090f63eea8f18c1e93a5d5e0a2acc961d054357a45003737c856e51bf6610e3e890ddd73853b91259c13e5a4205b9525af775ace0ed3d9a8ad31c856c7e67021c3dfd0214b1ce4857df9a215884fb4f17a8a6468d76ee9b4a4b8ab95d0d97d674bee12544515e4d2bbcfb1b144e9b739c435d8d73961e5e0416405358bca945373c0eaa91da71081d7fe8b0400ca1a830ee23e959f3d6ca005bc6bd2633a439afde0ef7c3f50f617551ea48a26513d51cd17fc208351dc98543a55d8f19909922cd6776a24941407a59884b0402fbe2a916f9804905fc43dcf6649d5a16764dd930a48df57f0e8d75c04a212c8a60b61ce2198be20b7a1e4e9b8be451d45d3c1c304aa6863e7f30aeadb832e2a64b3bc060684b9bee9f43215ba2993af84d5033f5e3281b2f9b126d495be6f0fec358dcb56d293e56739a9d5d3226de2d4e7065a6f77b7df96a19fabbbaa61d39d0f5b70cb08b91edff0b0ccac2f205196984fb6c0c077445f42e9c2c5dd830007afb9a8bbada5e584a7fb4c9db657664a5753d6eac33c8bb423a9dc4cde6f2faca50cd5a127f6b425cdcdf8304e7fbb70b2973d55e6940025b2343aa91362bd0c7dd98a240e080513e0cd31fc5e05abaa189e5c8ab11a5c347d3d7073132a2297a8a438bcd67672df7f5d8c6a6b85c14717ddb701991bfa50f30a002364021aee940153c407be77f8f8138a030d7c96d83ee9cf432525651ba24e8c427ca6e071ee557de2183c7ef0f9739d4eaa6696fddc2717d7ebc326e5096f5758c3752db21625298f9e9d0247e1e258b5d8b04c089e3a23384381aa5da6d113beeef95d2f8a04b934f14cac7e40042ec0fef61088f37773dcc2cd89e5e938241d35aff95ad868df6ab6c7d7f4a24d9208a3b49f0f5a837c4de013200e7ef90adc6e058cc48fb5fea9559b0f5b772314e56d5841fc51d2cef4320f1747a6985a84ce9671fcfe9089796432dd133d2949ff927da3f077d9ce782efdda121e9a759efddf5344c37d1243592babac62c483bfd9713f5c1b2d0d323d8bd30e35740e93624cab6c6cd02bafbae205879689649ea8ff6ebfda310dcae425ac8c99b967fa926ae4b4693e3806f002654536ec6f146764cc9c238a42aac957d12d99ef144d14b699bd371bb9f19ee96565c26205d9bb4dd361959d3e4a538ecb51d469b6035fcc24f754fd43e81e137059d79ecb270b171db08eee6331f95705a9d7cdbfa5e9f830f341574863042d00a1d4d711b4ed4d0609adf253ea413d0a96029f83ad29e728219abe49fad772a0ce58cf8bebc87c16cd414d82ebb1ad6496e333b491b5f58512bf96cb080ea0db4fb1cc9c342320ea7c076472aed1248e3cf84ec4fc14cfc2473e753e1320140aa69e72c53683b7dbb65ebba5bc063ef1e8c0253734acb28a1f75ee35c4a268d9537d36996b70bd74dcb5c78e8be7693a3ab97b7de4046a273c144624650c0ba1e6bcac7b3b60ae308fbb2cafa6fb1fc19372a62b82a243340d98319cacc3790ec0fb38fd2eea06b91fcd3f8b95a7df12935a29a2891cda3b14501500d47f2d7a82a750a1de5363593d6a94a4c07433b7bafe9a856fca9ba6d0fa84f3a495b57f9c5fa7dba25320bb4921b07dcfe69a2b6ace6d46bf320401d3f5e5d7758d9d788e72933d136feb39c37107990c859ee833581658ffe9afc68db0dc3ecfed421fc98ea738b9e00f5f4cd72e691ec79e78951a2a5e9a67fb7f7ed9ccac3c2b4fbfee025840fe7a29b645d289706f23355710831daa2723739717cf3b7212ce22e36c8c2af86984b6b93ed1ad41863eeffe262164de1eb2a4a7f91fad530c5c4824b57aa3c183a622f2a8830e5efc511ae85683946cf97c0b2c933996b1814c3bee696c373ec5451add0335211b2a3062a0221830c94006238f66ab8c001a248acae8bf69b2b6e7fae2ef868a18a82343b0096dae957ae76a6ae3e3f1d12f5b9124c402cfefc1154f9ecde5add9eec03a927cd2823402866c29bb816ca73977fb967bd4be288c33858b1ed100d1768db3b20d0530379f6985563df250f4d100369a8083c90f70f9391252e72791c7f24ba93a744d127a07626aebc5534c8e6ace9b62be850707acd6df1a86969d6b746ef2758e4d575ae66ff25558c800ba3e1033b2e366a1b8e4eb4bd64db246c9ba99f85ed1a5789a9d2a66fb4b33c3fce0c7ddc170d2521d27f2e3068b2f307b0b695556dcd9e8b1921e435e1b3b18bf0942043f057caaacec6a2f3bed41ecf80d3983ee1e7f3a484bb811fe272241890e1b418c1fba1dd0b8cdaae6e2bedeb92696fe8504f9efb740845d4c1dae00d365b010290e1f2e3103a9c087e9da7846ee1e3fcc2ede7ba7070f8fd86d22c936b6aceaa67f105e46536b1a9f81496c19da1bc2240a91506015b614137414fd2b576e5b84d13210793eae13ae37700cba613c201d06b720aad314949de1192f19fe70cd34b2f907421bcf36348ae2ec9119ebc427d1b44ebff5a78bd82293d19ae250ca3672d98549716b1cb2ea068e467a9748c4ca1d4d47c3eb6442c7198716c98add1abf582cf7e5fe11b9d37f6442e9eb08847e56aebae45cb86e3d1ea2260a8b6051f6f960c5dff4cfa9e5a1f10f1e439de75d04e581cd87e2caf317d5312bef1e6ca841b34bc5eba1137f12c7135e3d735de48c7444e5d98de9879972d0b40241db41a5b6e23e4f30872e5658e840351358b361ed7cd3ee243a79181d8d2981852e51a9ce31bf9be86571c129065ac718783839c3820e12104e361837bef2c952c666d27ba2b05e433ed7f7b9e6146fdd3ce158690cfb020c855d2e43eeb6663533ef9441cdc702eb83cf6e8e1ff39bec075d627066311a63803caee4a4dad497075a83a31b5a261bd4c6aa080c7ed7cf77fadc6c3636e7afcf732e7c79d68102b146153203e0348e926c1eca441cbff20f481aaee572e65bb39f318dd6401802b210bd512fffcaae5d1e51475f6390ee2dd3c1cb0c7b92f1dcff3c9b228df6119a790092e81f34e5855bc601a6da073e541c564313c77a0ccc31c4271746a7b9cabd7379d4b51fdebbb3017bc2e69f4d22804ca983ed07f6d1d55ca40cd0a965d37c8a786e57f7f460a288382c2fa5a519ae1960e532c96abe385aa47bd277903524ba012d8e39c104a8bea95b0bd6c09a0440fba05f3ab2b1f962bb0cb29ed3705486c69abe71cf28343951c8018f4a341157ec5db8d8798d86f93a08078baa157a751b2e6f2c693be37cc40bb75b8c6863c2b565d62f29817f82a41627ca8e850509816126b639c034fd729e83b821b75a15e9614dab4d3e3193abbfb9e7eb5f82c88bcb6bcbbb45873fdfe8fd2184a192d5fac875e94f344ba0936d34406af58216bcc5a4c9684c78b87e838a242fa77c675c13f545b9d42c3e0d970d8067f771887708683bcb3577fbd0e6c13cad39955eafdc226d17be61c07cc5cc047cc5dfa26cec3c9f5ea1037e799b28d777f86c304879a3abe3537aec6381f66913f13ad8e0e988608d1fb9c4db0937810a346f60c884efaea733d5f65453f30ac80a01b07598e22be0f1f94377c963c5eeae2d8492767cd1ddc01182b1a46885f360c2adbd72c05df4d8508ec24434129f96150058d6c1a1e188ac262e0bcd5730960c450affa98333233e1b5d122ef387bcb4586e1e54bb6d0e14350be277eb1a3a3d0b00a804181673305daabbcaf551628a1164c5bc7adac0c853ddd11eddea9dd36410f476993938d5ea3d998e74672814bfbf655f6cb53156e73640189c5c616de4ce7d6792f5f47d357843e01d438dd2b7d065b40d76e03e8397c80ba2da057b018b9b5d71e736b4b40d33763c7104529e6a5f50d9ba4dfdad64d15e8dddfa794efae6ded277600b0a4ef0a77e7a1c02d7cfaacc5dd9eb02b93fe487b9e2c0f7217ee852214110fe9ccff3fa3fc94561f892e07d066037ec5b8b8a1db382f9632d9a085ddaceb9fde002c5f51cd900fe753688f96fe7c528f8da2a971738f44bc7decf588b6adb877889ef1e8233ef46d23d1ca806cb1337159e5e7a317f421f84bfb5e8afbfe629cab7c7dd0c6460c9a409142f47a49295366a8e3daeb0836ce8bf5484b4387a635b2ee8b707e4f6054f4cf7f5beeed3c1dfa14267fb8708a278402393355ef8b2ae51ea4321301f68485b3071e914475b75e5137f846d725e97f48bbaafbdf1a638c314f7d4c06d8133c6664a32bf7db0ada869eaf5de310fec4f25518fbff5ac8ef5215baf2030ee761101e5484ad76fcb5dbe40ac53c524c9b2690e51ef6534256a77d4fcda39eea3cd8bb98630f4f7639799073458bf3bd4c0cf2792c6d0db708580fa5a58b920214e7c5d692c46d61ac882a51a778fc381ece053ced0b91114e8e53244266f1193365c478d775d9a3572f3b0cb1aa74a45b9151972979e6367071d2346cdac416df793ee5fbca992682974a0c2cca63eb49805df0a75e1410b628133eea8f12e1614bbd85c66ab7d075e8dfb8df7fd2f430c0b1b03063248567dc9ea8852fe3620104c8c0fffe3a8b7749827a9472c7a75a7cd5408c301d7fcdb4fcdc055f408106cce8fe702d2b3ed1e2bcb9114b4dec0eda5206836c07e52ed9b44032c92f26bacaa3a7dfa091d1ccdc14de1fb169ab9302ae6cdcbfea9fd3724e3ed315bb396327842315ff742bae5f134f864c25cc321d74d961d3cf9404a8533db2ebe9a24a0a10dadaf1dd36bf923f750ec58837335329b5d84dbdae09a34aa595f1c349b79cd135f51ed2d9499e23b87fc49ad5decb57670ad8bdd4298abbdd45d25016f1054e9a302f5efc92ab4481a0f0648c7aae8559bf1ad6eead852e4f8a3498f2426c0f7251cc8687e3e02c363af2ed4551233cf2bfbb10e5ddbe2c622bc0a4c3f0f99d26219c54638465624115713ee9a953039ad164739f015a3c7ef21d7b7344d67f1c6848cf76bd636e08f9165d5ecb6662b9bfbd08056184e70ba5f325e886283dbeee77ffa9d602d9f5ae89548eff83e1b74f6dd6ff4562b4710decab0cfe1a60737ad2ede51669296efb712b5f8dd209fd4a1de576f41c2b19f2ae14c5f4d16fa2d601a010c7c1e9ddaa77e8bbbc7c61f177743e50b7dbd4691ce168fdaf78f2b5c8ab20132f319ea981429589d5a972fca01be877d6c738ca522eb09b78357113197876d796e2d23a497b39b12080c2878bb9ebd19907dea55e3df387973075249112a94346fb0cf8c9c9dd1ae52adbf801f7504847c44e6006b539a954938550f71ec13e86a5d54bcbd588ae6ccf45b8ca7d1ec32a251165133e8ae9f6832aff1547c7b29d08b49b15464254fc958630aef25d298853ae1a4c82ef2fc72aeb99b132c286d44b315071c513f4dfa728c775fe1664aa75ade97b266f630db05086948abaa27397d4d2a5fa04775b2bb3e4e64a505bd8b4973966d5136d113de12e86f5b8eec2132689798c1cc3b94aadf1cb7e13f65a38f371d635e2351bf727fa4e1bc25208e8aedeb72464c1412ba055ea42671d772849fb93eee4a37309a950b6a6e3b68f3df4372569e2593af713780b3c55b878ac223e65a921a06099ef99843b20029d3b81fd8d04a074eed58fc2f817e4afa5ee04a2140ea2122bd0823e8184831e7b09dc99b59ca6f8a3ee9b9b78791dea46137a8f67c46ee31dd5e9a5752913f271d18d7165dafacfa269bf6b520b0652a346096d28748df97cd1ac3828d2d866c6b81def6766a6df336f839a4f74aacd04ad3ba41dc5083e90eb545e6126db63c4e8137a82e7b2129d287090375c0e44b070979c0f60e698a34c687eeacd23cfb189f7797d05244e2abb0db5d26d3ca0f0b8a5bec5ec2ff1fb1b70028970b894d6c252562169067d2051e272e74d3bc70cadee700912eb30e181f55107b7a3987bbcab7836bb5f86c811782d40a413a34c76f91ba17a233d9da67ed32b49ebc5e89f8a4784a238516a24564fa31bcd1bf73c4e2856cbdf0077b193f0bfcf98016492772bd2c798c64eb10541d9596f16572676fdf0ad2561b7cabc1089f0b33638bdfb8ce9d287cdbbe10b6aaa07047eb25df80437caff48a41b829b53 +MD = 7ebc665ab5e5a1babbbae9e86bd00a09bfe68c4ca91b9f0da092c853c7732c3f + +Len = 45656 +Msg = be105a6c585a766aa1f290b632219ff864ea6674b5e3f9846d447d46813e2f92b78ea82f0b515f46511a6f161d429aeae07f8e4853b8686c191877f5a06242dd4884ccaec76e16f3cc24e6ede212c78897a1518dde07aa19b3634d4efd090a48b81a4e535359a55b57397da44a3b2dbbd37636ac1f77c875824c88bb62dc90bc517ab78579b913643d81bda11d62d469da29c50bdbb1c967d0fcafa29582db1f59c98fabff3669f8c4232d4d2332c57bf6e08613dd5db5d6e39b4a6d5fa4f35b19325c2fae79aefe36485610235007da6cc3022cec2295ac0550e18388eae156d9dba8784e2aea5ed917be53e767a26c87fcc0bfcfa870d07b43fd4cd8fbacfae1ecfaeea7f12600f6b9ef7c351d9f1b8eb048324f984e2a909d253017805c2d788edbf9807469ccd45571f5d61a05cec80a23ef349a37a28b86e2970c20fad9e7e8d201a35ebbaabd14ca249207dc6d7e2fd85c46553420b325bbe980848de57724676ed6552482f71e8473308c2ddff94aefe34c724c8c52a3388e3b541d396d6722a8e201ad3ccb9a26497a50ff0e7e81f1eb109888ceae27e1ef0537b3bd14dc8c178f0c5dc081b0390d36fc5ae158fc65db5870eece0fda3f72a6d55559b3a82c24a41b3df6618a44292d374640cde4d31deda28975bfe4d980e5d70ef591f68a35ebd953c6b34dcf0427aacc132761c31897d55ea9056c37828be5e379f7ec2fb42aeba919be246306ecfdf342ac9abe341db17753289ae2de60a6decd2db2a2072afc47d5cb35879743d7c4b6a5b84bd949e0db5c719761fe2cc306d97b716b98b3b233e422a8c31ff5e0455559e2f36fe10792aa288b3c48b7e36386295113cd8db5772c0ba69f06cbc1800812413d5eaed1a527959efc26c9affeba7e7921107fae1b97ce57a4b48a227db816fdb10f78e31bb9fff628ff29cfde5ec3121dc85245250cb2e25992fdaa434baf3dd7e807e8fc4ab0be483aa0ea0b5b4143905cce219f72006f4606eb02daab22293852228650c1ee1ce541f6a88e973d350136bbeb90b30128f4791bd24abebaeb5bb6936520060238867bf3b36efc020ff8bde14a01b6fa33ea5456c19b6ebea8c87a202e7301343bb3505eb0b371d7fafd5908e7f96336b8b0fd6477d6a1758b08089289529acb4df428014a66dd031e9972f76980a2fce0cfde0d9d034128b9a2c6b01dc4b91195d26ba2278e2acfa2537077799e5b93d2ce5d19db2835205d1e1e4493d1464c3cd4810aef333f83afb4bc50bf5c7644b735e44fd84f65a29d057714928129c56983d3014b5d04676c43bc4ae2c1db57b78dda783d7fb9f9a1de38eac3dd4ac44565c74fe31561c20288d92c8bd67314f95da75cb1c1196c9231cb8cceec9190f804c6bb5e623ede980b7bc061a224c2a62db2c3dd1c6d42988797c25ab7e773a9e8390e644d830157550bcc0d2dd7abe586657568989dc4da6604560f4432b3819786109fdd187467edef19367f7515dfee2739fb3d913a81597a0e979d5c99a79b1789b41ae57fef5b916f85a1e449bcef61d93e1432ecb4e561b497ca4b6d437c52414e0cd36917285896a29a0e8fa311791bd82466219c94210ebad1e9777fc0a10013bcc87c09dbab553472d92ebcdbd8c87275162261ed22e5a5bc1cfe81f16b8dab31adfeeafcf475e3312f7030d5e6a8b3102b382a78cd000393ce4c719617b1bf736b38e5139abf59e0f79b27870b8244fc8ba91fbe88297a5ce6a778380f34f78be8721fa905f83b8719f8c87ab01fcc4120bd6a46bc26b2214c58be5ebadefa800ef4c3459ceb342c7ccf3c353b48f4e8d0be3098d2c055e9e8a76a908076715ac405f770c95fead90a68ab4016c364f885f29c3d30bf08bda2dba457c9c60322f1eee3b1f41b0595aa0a3c24a758c37926a3d3bc40eb75a4623e9639fd9459df7ff8b19083e82e6944ff176858d1ba749b17009d690c44a6101665c084a91a9955688695df8e0d5bc18d659490f5f0efcc96496912e91dcb94ac3c74c7cdef585b898d4970d5497607fd4e31b68b0ef5a16ad6a7a54ba61cd64841dc2cc7802579a2eb339e858abfff97f9c6345cbb8b02dad0df89fa8aa0be329c801c61740797facbdcd2657a4091a28fdb7130a0bbd72d5f9a26be6f5f35b176e8006174079dda53ca723ebf00a66837f8d5ce648c08acaa5ee45ffe62210ef79d3e90272c738aab87e8d80107242f1aa6c800b0077d9fdab62ba4deb06c92462640b6367e0252fc9b9afbe95ef5405f6cb28c2c321e4e16276356b751fc828c0b6c9b4805307a6e8cf26f1e0cffe32fd3fb3b7f17d400873bf43d334ebb29f0d52c0606cae64928e456fb49192c5fb2620bd552be85fe55794621f8ae8fce9b0be7c117d40d08532a3069128e62fe0fa14b224c2d1a91a769c1caae7962b8b4350492252b8b0016e7e77f20728b066f1821ea166e7cffa594ce00feb81b3064dbed42d5d84a769aa2e3061ccd8ec0f950f6f4578991907981d38a9072a27ed3860999d1e230b506e38cc5ada75374d6d03309b884438e48b83a310bafdfea28bdc05ec151270483334a867c09c26a2d203ef1e169793f3dc269bd1777babc8c097a5b4c2e16aa3918850f31fac3e927c9817479401bed7d26caf65dd31b3b26f19f561b80e4f04f1ca52973833e3aec526259290f10de336cc3a385caeab01ffd9718d64f7b1eeec7129ceaab1ba6a3434b6a98e0425a851dbe8e37650f639eb5cb6924a3c27c3da034303f7a42737525a36d6eba98ab9bc0227d1aab729ccca2a110ad85a151652f74ad1af89be9897ed22b55a6fa189edd5739d6a4fba3d04b82d71afc00e78dfc38da222e0f5208d9406cf3aa50e8b6fdc58a145893bfd338d7841311c784de90e980002384f419bb55f8f0d182640aa7d4377cd0203afdf206e03fcbde718072f0675cdfe319e5ae7996f52079d4c363ec0ab5138b5a750079b347322ef69a2ab357dc6b150793391410aaa11b8008b975c96829bd6864ea96c5d24e9d5a54419c182bce01064ce58e2cb65b51af0232d73d3c1b9dabf139c7dd892814e7d73e1271ef108e6038384fb3c25604aad9557a2edaf0126d457473c514c77ce34ba97c2cd13aa65b7ebcbf6c759b1abab4aac664e9b006f4872301431a33bb97d80b440f7853304147f9462178317d25bbba24a61263608ae0cfdb204375bb4ba4ead1e38d631358ba764d9872201333180cfabdfd12087578ff682339946247dad18b6fb77339e900bb3a9a0c71c62ef029b17251c5e5fd763b1016a1989ad2a045da7d9f89893b405077efee2b7c5c6e97b28bb682e16c030b3bbf268a4a351ed026d3ecb0eb98a3be6a5fbf561f07b7e064d0d653e30846f851e86e715ab97ef9d73a47ed4746518c7db227fb9675f68b2e0b563fd41b6889ba572155b1a3e548557a584a858e714217afd020c9ee51217a02e14e9aeb9047dfd5e83e393e7d46095bc6ce8eb82b689f205fd0a0bcf029af7e1d891ec1e7b826296b35d9d16e7a59a53a81480ca9877fcb7f100326fc2b3447b2f748e49566f81d514179a3e06dae1f5b6c9cd210261e78d6eada739db0732549a1019ec1d9be77426b01fdfaa57193d29672518bcee4f10c650decfa3fd3e08a8d2f359397de00e8ba5a27e4ac08c74608b3d23f0639fdca8984d93c60bc3f1cc5bbf2342ac280e8366a69c70add8360c8459d57568563b85f28828a9b960ca8518e1dcc1ad0bfede71a0bcb455691c8e012faf94630ec7deedf2e0d79ca0dd5378ffe82ed72849dd6535417e7ddb8255701314e5fa260c13f9226ed81be0b4c81a5dc7f2d0f98a00afb8ed478d9bf1f36f9897d2844872e582ab3513cdbcdb437ba01eb610ec49f8bfbff297eb26f5f84e44bae2a7c286a438d1b6130891db65fb5b3ed12d9ce42623cef3f83cf908d49a9c00bebb30d1d08a5a647e731c1fa037d3badc7d77e3096a5a83d0e9aea518e302db9f552fcf0ad589e28e93982272afce15408709e122f1d714ca87a44515a61dde3d0bfbe8a3c90492fbc0b28e5dd19ec0a5e0cf48f368e9194d7d76738b52417af02641b95bc34f181ea0d7bde23bca6f64f134a50b2df513c261a1caca761224515a8dab6362cdc49fba943b704cd554165ed66fcabf8f96d1aa92955390047ce91f2c597b16052ad7546471b883542122803103c29c1d14e3ded56dd72e9ce72fcaca2e035b89dd5e24b50b0b8dab5921fbb12b835222008164e6de95b04ff58e03d3a39cb1c04eac922261e9ba5f5e9d27e3317d60330c22d353424fa3a21a9c40d55487974ce14b332910e397e4c3ec9b53a02154c47a50b08753359717e8c3184bbb849a8447a27e359289b4e00b98dc6f020f8e5aed93730f6c180925c2aae0a332f43a0ae45ad9d4513c8fb5a84a51b1d1a8ab6ad8539168074758604abc30786556e44549ccdc81e78c86fa2c4991a8997d0a78bd19a21daf44233be36f8e37cd4d27d7da810ccacfea49020a4f22dfb40d4a192e6e1b8ceeaef83d2f3d606dd5177317291fd12b74e63481c4a37bb3cbd9d8a08ec964522fe825d870be4d8717766497c7e1d00070f0d7edddef02c15b5334c360a422f9fd705a826a6aac200eba6aee197f6ff63eaab1aac89a5e74bd09fcd64696cde0d1e7f4ef7ebb12a51583f46e906127895874403d172df56a9b7e8f7da319cba347af936420380792d643afbdef0f9d1638de02394c325e0f61216b0df895a2bdb947a484f16a0185cb79eb40680317496a587613ca100edf98832e2bc992f99cc130a6c654b976da6fa7359abdb44c7f67642a51336f7e57bc24274ba8aa26ccda0b18acecaefe2d3d5c1d1132cba344aa918d75faa92314468514e1f843c0ca7e3788ad0bc2fdeaaef9106869919215ce512e0692559371c21645833ae83e122836654b449e0c9f4f1eadf4e4aebf8f2d337a679ced560cb95857a40310154052984d1c298890a7982d544b268b720d51a8f12d7cd8d14186dbb9c8c353ecb1a7cd9e741d2b20b014b591df91b0601cd63220cca4b09bccd510fa660e1c1af27256d7f7b1ee43354f47e526c8a5f03a156f97d9b70d2beb0e88780045d1269f5cb4882b6a5a5ea39244ccc53de4a8e1b9a1b4b93636f848adb2e12c0d2b95f4c1773d63b8e80987a83cc71f63e4f0a01d89060f84d687422d10945dc683efbf3b1f5655202faa5ddba052a9cd3f7df1cb761a2125546f8427322ff9f462aa4b440d61542299d7a2b71ffe08ec5c97534e095fb2ba49077b0698029539505c1556c1ed0552af07d2b4fc379153b4e3511fa34528961ce59355a2bac3e7c55bc9fdfd67dd12e7b17a7fd58df775d0c857aae478e75b5890599ef2c6ea824a4fc5a3e0604ff5cc7b06523c6f8fc548dce38a4d49937c847e5a4cf8a59dbb479e94e34b44d27dd5bb12f6816aeee4859791483e65a17c193601ea24d541e555deb4267ea3f91d8bf80cb744fe79360f6ecd3f482b95dc8f2dece127e46b82fd76a007fafc484767c8701f0798d35c5ee91409eb29e5007eec77dc52319f2696fce4e250cc34adf192d9b849d871a9fc9cf222a7df139a30e84f36347b4142cad7ff5010725293a1ed95fd7c2bd8a150d0d403fec9a60c7da7bf895efff669f1ae6bdbaabd06aaf14f51792f017cf4f44b5638605820d99db15540325e22feb3d696df8fdad546882e8895c2f7d3076f52e53a6d28f884198bace54f045b9379e71cf6507a4318af01a7ede88d7f4b2a9e0d8485baa18e89ad3303059104aacc667a9a7d09e4740e6f3bdc0020d642ae733ba14a7bc07b667c64041662b2b723cb1c4666081e0b0eddb10a9a607c807378fc0b1beab9bd289fdc72c217ea4b088b9e84bc03742028c3a3d417bae6870215cb4c8a8611d6588de8c9c92f2fc8e33e5dcfdf7a6b55f4c780d3189e88b8e2e025c006dc4d496ead35937c06d7d35c49f6a250db883efb4fd4821d89e7a89e5e9800216be0a8e3943f4a5b3d86dcdc34e586b0b53f2d94c31b6b871b97e88cf79ea76ab360574fc96268f731c157db9596f76f8614c469c7d1e9f5b1fddb3721b610232130f71bc33b79d091fbd6e2d2a77efdcc9d75d2d474a7e9ebadf335835ac51b53f6ead00846f767ccbadc8a728387dbf73dc4786f800fc4370ce30093194093ba16a4f50f016c3d4072cb2afbb7ac9aa47a22b2ff909c1502bf0d10c75e1d3cd214d8034df732b19ba8354ce4b047ba42d7332b1b12d76d0d28f3fe86b5b5672a75d6735b94f5754cefbd78b409f3ab60d9583938733c3c84df1a22879c93b321be42ddae772ee8d2ada636f0313aee7cf51485de5e54f42845e215109f529156528f9accfa499cab6681f01fa28803f5befa6983209c3455f20e4ed82a5c9246e72f432daad00155aef34c98ea558c699b7c7cbd568c6dac67e14834ca2c3661c0945f47054ca75feb5ca4f2754dd8572f1d37e38ca0108a1bfd99ccfb4bee45837167afa62a0f38a03071c2efbb883cce4f139c2f71bd7d82c5abf72a262a40b428c4ddea02995e62116b7096391c891d94a85dbb6bd4f530dc074a03658b01b73d1f486d30e65fb571da822540e5da71806e9ebd08f79faaa3244be36481072120df758c6f66bafed4578e096da49f8e94cee5a0e385cb64ad9b5356bd9caf66767dfbe408aaeeb2ab5aeaaf09b946a94441a913661006d36dd516d9db4e891b908321f087236985896d2ea2bfa47e76018f8f610b16e08b765a0ce9481712a52187be3e7550b9cbd0f6c070f9e695697ed0df266d1ad70139929c117e76ea878be3f71a5db36e1a14905696430029e7feee3eefe68c58b92a274acf08ee6f5742208330aadbe4d4e6b2478f2571ba960400150a11fbf437ea809f8e51fe1f88e6d5d90dd73abca0b9e529c81bcba5e840eef81179ea27f1dd2710ebf4268990dc7c7f0e8d4053f1f0a163dd806eaa5327e36ea288c7627b9493354459e81c03b57cdbbf179d593d3d6f8c3c0deb066b1b85df29c9244229835d73441dc37555e46f75ac10a23b06f2b809601ec16894ae5ec003a57135a02bde51579a38f40bfbbcd33202ef57d3b30371e63d723f7452d6b7ecb84ebb64109e65fb79c9369a6dfd8afd68d55e27e0ea4c3ae48df96eab763d317c0d41e9c426279c16f4ab95ada9f36aad04ac782ec50eea9e6534f80ac5c67e6b4d77a5a90dfcd5fc3bc1625d3aa31659fdc148df3c1051d5a860b5133dca20007fbb2c41ae7c25b40f2694df28206cfa114b1e84a8172d24b80b0a3756dec2d6249af220901c07c8ff39b1b61ae1fb07ff987db1b189b90624a27bf9a96ad346dc757bc84b62f8958c792d745b6e2d0e1947cad8b0cea1f47eb59edc9e04ddecf7f93d9b48c784b427738c9c923b9f76deb79a8c4e7c546a16b2d752ad134f331794cc2c10d018af60a7439127c0becce096712ee3096ce18d38a9ee6f3ca3b3abc68c0d2c1330d1c882d6e4b494078aaf32c343070c480552a5ab125ce787d9350d1190f2f769e5bfa4db19a13c063aab3b256b32eb722007884f60ee8a483e33d6d15a1df33035b67bb4a2760f275754fdfc09ff2d77cc1c6f0b5cacbb813d38b26feb059d005c5d75f811bbb4075b4d29db91b458c583e1b863680ff1af60b43e21a6326b76c4152219d9ea9112d0e41d38a4fad3e7c227f2ec0590a34f4326d8bb3e3cd4e0076e1e9e8d7b4ce632ca6697c64b455b113fad09d7d766cd4f00f080f58d6ff890d8b9fa8ef63dde0b50846d582e239bfb995541313cb2c60ef334176e9ca31cead592b260e3ea76c527054ddd0be526ebe57a26b448fdb5ed4e01e32be2f4b98ff5175aa5ace94ceabe57ade77d00986c749a2ed374ce0974a1f878a0090b7afab7e667cfe9a0dd0676fa01e9fa0c4ce7f713de01589a5d3f7f764c5d772dcdb58e5e4e3202b78382e16aee66eb7ec0f8bd9598e05cf91d983709d2c6a5f22e4ae90d829e9073ecfaae38d7e0f9cea119689df3d30a50c7397921a07e2def19157862b9480b8c85d81dd232ea8d7249c4687b836bd93 +MD = cecddb12b508e6cddcf3e96635abec8bc6031d588b21a4a4859cbdd79aaee47a + +Len = 46448 +Msg = 5ab7074f7be12272f9f47fd8900dd823ef716b676974502eed9a0bc038fb5ea149ec615a15dbd47c7d7bb3e37d220b38a66f0db9ce2f603d0681bc72cc39b56a8283d4561fc9ec9125d6abe0d33b70f89bf15c40d641acd9b7e146dc7d6091e2edc38aca007115b6d94c9057f921ae6bb6428383e971db0ae800d083b4379c1273f6ab3e209bf5f581268ad0599c6e99e0a9a80b708896d8812883f1d7877b01fa625e3ae711345505adc0d45a73588bff6df45ed14f844c6a9f87ad5018d9b76b51cc47bd9a7bdf4d265bea64701348fcd78e06768b4e6d8bad033f85b25c3daf091dec0afd729941dc829bdf5948d8c02f9e8bc5079b44cc9c1f30e01dac9aacd378b23603c08dca165e6e33f79e4432bd4e73288a14d716b20506c72072d64cf60520a9740dc3ce1b17ebc912be9339c8c44806db61304f39da4ca48556fa76bceebecb1803413634d49a07724fcdbf9a2891c7c329576177c987de12ff0d126b581405b64811eba9bd0456defafbab79a3d7d20a145232b5f741dd901617074c6dabbd18843bd4c2fcb01f1f6723e5ae5da19178cc2bac3a8f0109c642213fa7550a5c0460c5d8c7b626c8fd3d5054807d776bd4f6eab650b750ca7e2c31a1c438b94b4383b9e1ff16efbb402587e2392be1c8e83d95373d97b5887e7c5215ea3d41f19d971ed6b341925eb0c6d276209168107a4636194a59b8ab8fd98983628c29b5d941fd9e2b62971b15c938f87cd493ac53bcd443bf22e19b79ebe0d3754ef901c12b5d23af9f875936d5c251961feb023b45789de41db9c0045b5eed68ab3a3c1bfd464c8720e97fdc937667b698f77bfa89290f006fc783f8d10bba86ca73cdb05ec101fa0e45f7cfaa5e2323673f7f5732ef815d43934a1cf4f02016d42c1e48f7d42a51912428d7c3826d27b54b771be5d2db41bfa67e396d14085ff0ed96ab708ab0d5d00c7abc86e82e08aaa4c90e4cdb05f50b878817e3805baa473f9da070e879cbf48855459a9a4c0f6dd1dff80f11e7c150bece7eff3aff3f01a99bf09ff86e7e241d213ca8a0b184275a20a1d67d6aecb6d4ba36694cde6645b4f863a7c1773589554667570043afffc8f3d1482574c06450b306c8bddf673be61dc12d4b7d374bb72c8e50c4ecd71ea1c24f0d13ee8383ba20b8c596e9890cca70d2dc9f66cd91cb3c7b3bf49346ab70f4e4ce4fc17e3a9b6b1207dee616e0e55a5e59c41c3f831adcf5bf962042cfbaf15833dfd3f9b27afbdd379dbd54dec1442c4fc285d54b2b75c384b47a14b2092073e3cd0e3c12df38e0fcdc568c2fe5940564a28bd70e8670ae33558b047be4ebfc8721598e83528ae5ffa29905fad9b4b1406b158cf7b4337e74823a5953d4b9bdc6e19b392d5c59b2e7f76e0968260af88c250a3d2b3c28fbee426f5d6160f37c4917be8337840d115de3bddea15300a2f0d85432d5a6b6ec4a9d1256ce10ff02b7caa9b5ca530ec7096f6ecdcce8fc76138ddab31b7b441b2f9b0c8dc16c4617b90344160d50c59f92a2691e126d683d9e4c840825423c4e4645434a63fd3082f7c977f029039860a18596199a6babbf381b3a781c83054e37a2a0d5db4a260d18242a8945f4f0d1dd1edd068d6a2dc48a04e44c28c707e3a9ba0b7552db8e7ec51c452b8aac36bcef77272c12f056143c0e6acd7094aad444966d73f039d19ea5bab01c20b2d0e77e985ad452878e76f541b4401d7556ebb13dac17dceb5835610554a42e8e281a3387604674b63db45da6abf056ef73ee98b7b2a93f798a0ba006170ddcc9a41fb64e1fcaa106cb941d443524448c69a6a00d6571406ccee70bc3e29d54eaaebdaef581a801fda0dfdd243b230fd3a0db7246afb7084b8e9349469e9ebb79adbbc3826d27bb25245c444ca636de4c8155b66a77c2be9e31d5039731563cfe09e29effca90f806c0d5fbc65ca5d98072db1382a5db8bee1f76e1bc850efc0229fae773822bdf26da10aa9a47b82af6dc373195204a97c1bf3e8abf800d260d77cb45e77c40990fdcd7f8ce4eb7f636282fb9abd25709a27bf4a7a70c9de0a55a1c6162a0174d492cf08d6c58e968c9bc8c53cca24a0a16ba62df7d100452543ab6e3ecd6f8245a3423127b4f97a5360215a601786ac1a7e54edb48738ba6a18062728d062a46cc5a3a2f041a09d80560945b513c0057dc628143101f7a011492e6b64e18f6da2708fb8b0ea18727bf40cf19c5d654f33d9ac3bedefb198d36d90a5936f4a408f1a530cfa1cc59baeb099089642faebe53f5dbf4b9efaf728ebd98004e837cfab4999fa2c583c6ba11239d53362d56e0a5dc938ea9e386d8a5a756559dabc5d5f74b11ad83ae174fbaf6be1e43b99380bcb5b134b6bfe4e601fd0e002b55c9c443254d98e23595a06deabd9294bcafc61ee9fe8de96b12c42c2886a9006aceed1f8e1d0aeb0085d6b2676158301cf0db55e1424249d0589bae9187f725d01d7813ee47aba5f7321811d571181fc39fe7e90445faded4fd930d9fd892a171fe8ea7ae94241803e38f139cb6796a97031160b9ce5eb1604bd3d3b943237c33b8576434cc1d4c0adf633f24f82418826682446aa716c95d888487498e52be0095fad1e9b73d4af56fbb1dd5fec1316b0e621c7e96c92fb1fdcdb2b682c670bfdb9f77351c2d19addbbf361892f7be3944d8715d641fe946f2d7db68e7289a58d370dc81c595c1196b9911537a6ec5d6500cca6fd9c20102afc98ac7851f42b2c5928a33781b4b20676e37f07fcf51297a27af1bbc577ecf7bcc483b235472b7f93009b5fe6abeac16692e5569c2671a0a51a8ccd7896994a0089b2c8b6e314eb670df6d1f2822a4c1af80ec00ee119147b13ee7f0fdc93964a40e028316885f467a96c5a2fe7fefb06bb41b0cfc56767b70f8d5d05ea6a510c92625d4f47dd3ef77b6235193de772bc3534c54933fb1ecb55ffe3f5209c2eb9e6dfd46af1b90fa8fc5f1f29046237adfe4e6a15cd22be2a9f9ca0481f9773f4c6af3a0f0677fafe94d964e9cc0dbe4e8ef51bbff19caa77451a2e9957eac52faa56dac5e6b8855aed57a2d605387b206fdf46a231c77823dececb433a0496ed1a7d430a22e943505e605578307102d6095397670e21bba2c54112e056837d9f9f791f563b8899817079f93aee45c9a1f3f87a690739c986b107a1fb3dd5cdb991d0ac34a1251c40cc0b0aa89f354446a8347c328d7e4641fa88e4fe507a1bed9a2a961ff43d2020b99a065bb3be0726aeadf95e316d96673a4b48542efeec8e20dd5992953f6993c1bd78aedc4e96b47fbb8e4663965e58d8d568b729c2c43dce6f531704ba3d3c8cdbee1c6975578283f3a785c486f2b95ebdb271e164175efb673f27e32c3f6d737bb34efbb0ee1353ccd196b49de7eb444ab22ee6617a74103b6a4f8103d4b90e237490f38faee987cda8e3b469c2711222e4389939520fd58260f89edf91a1c559be9cf1703e77687c7a07546906dd60ccc5498a5a22a493a2bfad7d2dfaba3184ddcd75f1013fae3fe17c152a29a288bed1bc2a5280b4d332d2f8ac6d7454cb4b7eace1808bb491ae5bbc671baf53126f962b09a0e0c33ca94744bd2c9313fb03fdb5d4bd5278eb4e6532dabc0c5196558ef098c3c752088c892c2fd9db8a5944f762bff5e9fef3768a99d089c5308d0728a7684998e3ef33151964f3b20a6e94e84e13c8b6b942dd383bf9137e725f0affd9f880f9eb59538786fd08bb16936a4cd260a44d2a61d8eaa3b4d77c8984c780f2ba385efadf643d1f78976b51703b819a372711d4d9003e6b84545408a6c3387c3dae4c74d9cbc22d381e272d7d9f430ff7bfa95b00d99fede7f8a9523d94a2e0e37126fbd110934aec0b931d23ebfdae32ec77ff81cb8bc57052c108a1a23ccb5c1f82f26dd94cf2e4fe13a2fbd81def791c1264c45c8e6c8df15f9e8b728295f807e4eb086c3bafb3544d517dba305e2afced1d5113145dc132b986439bf0cb57d8d16829600bfbe7ac84ab2228b174d8dd7c7bb075ca139ab58342727523e5ebf0bcdc595b2a41f2757e02719a2dcdf35c55125b0afc287ae821758094888034ee2bca0094032c543d8e19f48501b41ae7eb73b92936f6f259387206809b04c33f82b3c7c143159d632934138fe9e1a00ec4127377172981772cda7cafd7ee0753762c075956982e94f3f3670122b1334f6370e27af91ac8c073114ba8cbc681c85a8557d2ba2e982162ca578f68bd45083e01be8b795508d3afa8fbd1e308b31cc47231b3ea336ac6fa4b7d91086045f7d857304ef452e20f372425d1ba3f2bbf38551d73635106c42ed941acae34b66cb6e4103c16bee501adf5321ebde45c2e2ab08397c201fcc775063c38b6c536f55e3ab6b94cd3822978aea91f6a62b4f81006fca762c0cd3f7154d5dbae7c181032cd9c6cf35b2a052bb3036a4c64c68b8ceaf118d207f89a884796fc11d40a5bd90f49bdc6907d134ba4c975e0451186f5bef9629c61ff773e50f8107d676e26b5824732231ddbd23ce673d8a2ae2648ef158e2b3e49524407f391bf4d90b40f5cd90d50957dd6d0840a9ae92fea656fdd6127c91438819f89b1dc6f0f0a8c743346149f9a1aee8cc583974dc4946f5a45244ec2daba1dc8181e30963e1f5803dd8be575ad9f836555e4017d2d269496baf16bbeee48877c579b46db5759972cc00d08894c565608d9ae51dda63b85b3b33b1703bb5e4f1abcbb8794e743da5d6f3bf630f2e9b6d5b5451105ec2db32fa283d937ee75e531abe16b597a6882244fab27134db4265a6d3ab77c5b879d692d4e1ad1e429da4fc9bf7a9f6d323f0ff5dd1386996035158601cdb770d3a50e980c645838e4aec38aa82ded4c2b517ee644542172586385843ccc3dc89c8a7e97314e315930c34b633e0db9a3ce7a0f8573617a75172228ec4e2b75cf4c8e379f7f20f3c198c835e7e3828ae096192077dcb3d7fe26f17e22b873f5f15e50d8052885260e771e118d3b34e7af1caf5021f2d3e09a027203cbfe2e44db5c52ce8cdff33e9c66456cc7979d464bccad2d08584a2ac533f4484c91c2d8e9c104898b07f3b3f7e0deb62b9b142d6310b305bf7f7efcfc2628ca2915ca38a926f6a78432ff0cad713a7c2db8321371932178abdaeafdcb636fe7e5fcbcca95f899870ce38dcf2991f93d42718f7ef3cea8f451ed2693af763a5017b913354ca08dc6898c287208bd8b581e4984f6662d9a174638ba6514d9286112cd55df19d913e48eaf478ba76e717af5c2bae0353a75400d500ed89806bab97bcbfd4ea9ecfc5f80cf6372a22f3c147d5f79e30d6fdb1cfb95ac64a57951b7c71781fa59667796046f14cd657a5b9329827a655b583beca5ac0b9fc9bb9dea69428c68c4c046269e00d4028dda50956ede14fd8b6e085d9ff5b4f07147efdff6cf651058a4c89f9217199867b9ab99d1b4d1f22a2bc0ee5ef530fd38a8d7f6e430b497a16e7f5f95246e25afb2ccfee6c95a09b40c15fd473cf82c8c58d6cda5f8f3652b97eae52bbb3a00b2304553026de5aab5a958290d3f72e4f8c27cc2d09a99ef53bb9bdeaa4e15d01bcca524d9253d4bbb6e07fff57f49dcea903a84e89810bcb643f29ab55f7a0a48d26cf2cf81996311e4b5c0b47ee57afe2c807252740043cfcb9fa7c151ef25c60bed3b5a05b2877577d239bea0ce258001ef29a2b0e12b0cace39442e7eda91fb3d66d0d13f13f32c1fdc968977c833cbaf7095dc12bb8f9727edede63ee0ab27499065d5edde0f64d98de66c5791a60a2089fe84758a412b6b1e5e86878c12ac8a5a5cf28e1132c6524072dbd3c31b871c45bd695e042e4e43d47f5580672e52aacb9d714a34c31c33fc221e13e8f90849adbad3f6b3bec85718389d52f868e14eec119a48d02c2c23cade7c4087a8564fc8de0c651e5a604ef171a424c7262020c39eb4b16cd4bfcbb18e3f82299039d79f0f5bd2cd68e0d16812b41f5dd1d8c85b2d09ac91239cd3b91aad00551978893836076549520e878403136a41d2d1eeb9a7df62c6818de2ea6a0fe393abdd0c9d3c5948197eb2194d2c092ffb8fd339e7f27ffb935658a04d67ac526bae2e09d60799a0c556962ecb76e0931472a651ecf8319e800ac6b7e9f7ce76668a3427e9810f98d640816f07c7dec013e211dfd09f3c7316059fccc603bb770ba7b70fe0910255d3a63a8308094dde8047de8b9bd1eaa3dcb0ab8aed74bc7ce36d7f68c21ebc0244ef8a14d6227314e408d3fc567581565b71b196653019ad754553db981283c5b18339c77afc998bc68fb9db09734ab319b17b9b36211a334995fc106954a0c6a3ca0f46fb7d066bae4357cfbab38de3a0d9cf3f692e0736e7c643ae3dcc5b2ea22cd439618f04db248c7781731c920e784f762a053e27ddd841ee5e1d62fb2534114f47b519d903b1d2df983b98a05a277d3805123bc351a36dc5c70ffecad2e3e14919fe02ce0cdc7d58bd1b0f00f237c9dc78990c23bad0b192921e880e5e36048a5744342b1e2ef5aa981967fbfc309d2c2aa0998f3fe7771b664fe810f1b5e2daa88f9638602ea39dd04089d7a19860eec432ca4f08712629ecac0618b1e9e301b4e8103dfb64edf90e955ddc08f97aebed5487aa3ef62584cb3cca6dc95970c624568a8117583c85f922cb545ada53eb4e10b8ea09fcdef4ac071d595f8eeff2a0e2ec4dda93f90a3aeebc85bec453b68f6d4555900db8413716e5229c0eca4dcf931ee96f9c8a50780116b85d3ee21357741634fcb01b3213700c11a763679f5a71099dfcfb591f5c64c3365ed068cb4e2b13ce746e6f91e91d786ea91430b0e88493b1aa39cc3f8e1ea944ea024da61d9c256d21cd1d2460261381c9aa8b4822d5a56ca0dd4d77b537b22d295df96c6ccf32572b578bb42192c39130ace22eb06b2817076f439179b8c5374268d4e5e2ca23d5b9942208d36972e805a29c2b394e02fa0677165384a8c9ac5eab47d92897e12ff30b4aea1fb407cc7115210765871d5dc67e2d867b0fa8d2a4afb80fe63e53ad02446c20ad7a6a869c8cd98ade1d5f886e0bf2f209f549f23dfb9050c3c560970ec7ee7324c3835ead8f2c7b4918b2c227a7cc5ed4639453501838646736f2343e1d3aab2d973a9bcca682a45181fd5519d923938460713f068c16137b98f0cdbbcdb6906fff7787235a43cb9c5f28876b29605ac2f5c8fc87e19425a7f441aaad5fcce993022268d732d7b9d2ba1aa1461fe979362981d3fa9e19619251cf133b5be38040a9238713b7a6369c9abdead14427b88704840c874c0c90e5b781508d4a621b1ffb622cfd6f190aa208f8ac351f82e15d8eb9ef5872d77a472f3fa8ccb4b383d700c79fbde496fc8b0bb32d993963ba62d009c49298e1e761bff165201f3d8011c03b277c9e86d5ffacd6b72618300d3cd15ad26047929fdb727fcdb01568da7544a40d6224525da8f24a90034653a093999662e80552695c4dd229a51d9c58aa93ec9a96fd605c2be5f5005a4b323b1031a3bc525d890f8c5ad0c026c041c359b5f91341b41a9a338dc05150ad37a85aa06b28c7d49f5714a062dc5c84bfe329b3b5c38acee7de66f393c90ff6c8ae1aeed4ee6ff4fc0a9c2771c36ff47f80c39406f19ad52ef26c1e57b2bfad4f14f824c855714409f0cbf8e3be8695e762ce60d6e49851599cee16f252875b33a39b492ea6f54c2cd04a1aa215c9f16050f31f0ce5adc8cfa594e44ef29087dc23ac65ed2a2595ce73c0959410618f5314dada903c01c4f8d5058f52d902b9b25cd281ef2627a658a2d672a3f776f726742a994a31bbcc3cf3ea1fe551047a1d15b6a31be52307302334b8b6112fb243398c62220c046903c9ea9df1a0be50851800d659ae4241c0be816fb4a7b547102ba73f00140321b51dae105d0f59c6522b571f91c8abdb6f3d669f8701303ef7112437cc92e17fbab8dd8011e6fd61ec176388ab7c885da4668a511667c7205eb4aa526ecec5087a6220f5f46dd1abbba3cd189012fe50c903968d4921a273afdde299ce10d8465ee21f78f0ecfe2b28993dd726d2373b45da31590876eac251527313d4a041c0cc028110ecaaab6999bf5ace56035ba680b404bf3bb0c792acdc07c969c529fe2d88efc6d1f001ee77dfcd0409ef9119e258b6c6ca15606d2842 +MD = 03deb53fbacc9e3701311efbff2ee0566c27355b6f30a22848a5b8618f6c0d63 + +Len = 47240 +Msg = 86ffd5bd3bd1cae10706a61d247b2257b165f37cb53ff21761077a2295a9111ba6bc4b5b5f6ceca445b74df91fdd01b2b611b7cfda75628da54598370452383f72b3508d07b73e17b21e15b2c3884227ac2d6f8a08cfa7c7dcedbb7e1d3ae511734dacfb3d9a0763d5a1c5f015652ce01a20e154473508ee8d66ab9eea4760b930f2264c08fd91af36a9275d1f5c09028852d6d6a08fcc2a411830407362f060320b882871c822245e9f019fe8561fb87e2b15b81ac53ca27f6b120cbf74df2efffe98397ee303ead4e91c5e7839b828851368a1bebfa07fcfc718a9d663734a21351f2439367c2820f14043d8ef1a7a24729539936640e8b9940cc0c019f5dd2016e494aaaad406cb1d34f50f5e8dd7e4b06529a1a06306c63ab4f8857cac0e820bb12fd82555ad5cd7c21d25705b674c35a019f05652017d21d8fa2e76e206d17b4c9dcb9045455b86b063230bca51e4690eb08971560067b1426ec3eeddec94ce7e878bd4edf55191c76e101924be34b5769773d7b52b0a53b9fa4acbe7e9546b0f9521d795e6c562cfe7f481afd5c57fa276b672b7abf06d0449cdf7462598bcc76e948385403f609075d72bb4bf1e3058f45b28a6a8a169ec01535942c7e8286ebbecbf042a47f3d2c1c2ff7aa3c73161b968e3c849a4ad39cbe5d925f8cc17cb2331725bcc66835c73bce54baa49e9856ee88a67b780a3b34e8a5f35dfcdf1a74f6c86d34f2378f732cec56dfb2bbf8bbbe005c91ac0b121334ad3bca5721fcae6a5e2b2db073b6ba6ff8729c0f51d3d475a3c3699e9414d212d1d00714407fc91e26e4097993280785713c71e306a61bb5d17f85c85bafdc13c264a6cca1205f82d12c7ac61c6fd50de518f3f630dc0bef27e568c1b84fabb7ed4e1bd8ca8acc28db68d42e75facd59d2ac94b167022f92059975134070cb6fc100f8e1232ba980b42db7fb46653b09b84bc69d1fa4f13ef9004d257aafa5abcc31a04e516f821ad9ef98e4f41bb89e049b1c21d130eb5670be5380cd88e50c8d34b498cbe2b067db32f95405aac06755ff07e8123288791b282aadcf68e40282aea858f901eee8367c5bd1018eed261b0c1c486926630746e22514d6dc3d1e2ae3fdf77f69882c6a3022d46e24893ac226cbcb2c98e5918250e55e9a5f5ac00499180ca57606a4e50300e6a2283f25f9f3890902e68a986c08fdd3806ec7989e22a90131b3f4d23549587043f6796810e6f65a52abec9c528eb11c1f96fdf86605036d7a9fdd34e9979c19da1bc281a5657667b265660dd436a1a0ce44886fead4c9aa06b62a5d60526e3bcb04a4f336138b89988f917d7fb5620a1303d17f9b066e5f5c8356bc382e316ead4d9b4d2165c8687b96f96ba37f54a0946173a8051e53f5f2840cc1df7f782ae7530fe025d0af6ce2280848edf91c1cb8c9d96997813cf65f34971ed4bab4e90fb18d6c81e8930f52af48a5cda70ad6f6c99d44f0d36be8f9219023b6847a318ce59e42e41225d8438924f2b12da357d4dd19ba7f89733656b78260d3513a8cf56bbcf3baf1da503b6237c036e19817e970f94ab217e5770e72e856d9a56863cfb0640f74ec22ffb0b6fb8ecd674bafab1196762713252376e02c8627f5a64e82601de6b075824f49f3eacef3232087705b7bbd4cefd4b4269bd97f4cc656b593d75529ec329ab74da58ff136a9c927ffab3380a21256a1a3e27992c69c0c219aa2a4398687bed0524855a6167fa8199f8d4870b53f3d946570877113fb393b0d3e85a62df97122ee58c65df0f94fc4e67e150df4aafbd4e1a28d9ac348503a422773f0311c541788536c7974bb12c24b0a33a8ff0a141bbf14f650331803c7ffd9e9983e54da2696c4b2991049a39a539e2ee222c118a144344c6211fea66c8ce2610eb42765e8b029332d420984a596b6514a0e546c3e178d0a20be40ca808fcd84d4212899d66b0d58b6889f187c7aef65312058912abf8bba2cb6a2e2bc6ef7af8903cce8680dcdbdb5525ed19776b5b537f73229ff82acd6d679798178a0fd4b9dea88d4263f06bcba3ded628f1085dbdef1759935378cdacea559193ddc4b036333e0ef897524e035b9af2dbbeefc4396ad9751641498506598b62c74576d41a97e698d1a26c4c2a85438b5b6586586ef9a1c04f4c06bb24be2154dc4c8d090b128875f50ea42ce827c0e7d06e37e105a3578067fb1538ad20feadfa7a7117b1ad0ceb8b6364b8e74bf94e61626926a571e3fe86d6dfc44a880cb548568ac6b66f5a43bc2713b6ccf8d60a36c783f0f7692d82d266cc26a3fd32b6ef6841debf615ac5afe418ef42373f627828ef07a3961e54763245285f8758f61738fc267789f5b88d21dd2bef0f1c9d4f0a143350fd9cbb98c3b090262e66bee64f246783f111667d67c9317b885504e2f75a3ca6a89001619f7627a2fb4556873422698ea19715a83d44cb8faad2df5a7629e94f9ee36cf85000b579f5db06206f5cf43e9f700e352bb6bfd37e7c76de10e903f0e77b45855eb50253251116da893cd03bf582994db987d6ee0b3910974b0252348c42d3324ffcd5d991d0cddc0929c42eabb7fd187020d88959f2f6adb2dd9ec0941f6025ad3ff8b243fe754f778b9abfc7f684bdd7e78d4b71907147cae0af3f07f93286ffe531874384545a5cc91895532674657745bddd5af9c78d1d744d57edba927ece564900974bb2263e4d075956311637d6a32fe61c1740a832023fb04f49c835a1f908c4493ad9daa87e2eb2d9feb25c7e67ac0fc0d026c091f04ef3348e1cd20038357c6138109f1fc45749e37590fbf7fbfc004d0ebffcc3a742c8a571d67d737a9acfe52f9e9d2d8748c57c7ef73dc7c5e760cbb855854f90e3d6a9da3d608328fd66df06ccfb592fcad0ac01314a782f35d743b62e83bd12f8c648b19aa0b7a827e856a5e2e22b24a50f7ce68449929fad0fbcf0921d96944b3f8ade35689863e0fe53f428792ccfa12cf31539629b7f18ad3e4dcb7b6080a2ea784956deadc1ef50dddae5e9e39686cf1a7797bf1d363e5cd1b820c6a63dc66f19db452a7e2b1e85fc426359d9e21b9ff7f2e8859f2ce7c27e16d826ed337f75767a497593073346b811e8f2941c2945956f72dfaac9db874c503cc2bfca94a4950face775bef73a1a30bddb9eaa7868f9d77ff3c575e154444e94c3a36acfa68083b4a7abb9320a29872a3d7ff6d0b12d1055e97898c3d16cf82850227bf6203fbcaadebd5fac5deefe7640bd66f9c838043cea4b9a47a5ce363f92c365d2bdd8a4d6b334172cdc6f7eeb0be264ba5422997e1ec7e3367872f122b10e902b2255227f4f964b7c2fb6edcfc77657ddfef3b962ac73db57f45e0f1ad48b65c9fabd1deed96e6262fdcb356b9bffa7286db44b2fbcd7eb74bf9c7a6d23c34a73eb197f6c7a41c4a7eeb43c07b007bb64496d372e787c795381341863c73da8f39d702f3f5a99d813ab7beceb2e15fd593c2465a706e9efbde32cd346e881e80fbaca15afa0fd086ddc282b5e3cb2d4ceece3bde18ea6b37a8c8e925cad187090e730190675f6bc7f29c1e3a90264a88c01b12626393c2f5226623def3f89aa3dcea8238a000b5a0f3850fb15a9b6e25c24978bbc2e32c90d56aebb45c65cfce0173d1b856ac44be6b4dc5be8592de804fd9bd1ec9610eb72c67cf6a6691ad03f6af4e93ddaa9f7cc436eeb6a3953234c33c8e1fe995ffc4b1ed3d55c504a8d246dd775fb7943c6888d0d93e572affbfe6f23a33a5ea6645e05bc40aea4749b55cbeda7066e1921e43bc13b9f2bc9d9e058b6ffe80e6d8a74243d1fe38d20629a2a3e68a8e2b36ea6f592cbe18d2a23bc9788de4fd03dd85423615a4432d74abd33d39e27fd9a169762892bf3c0594358d3a126b8cd9cb5c8a92dda19bc20bb848db333cce655827f2bad431debde9f7cb50ac16b2d1589965eab85aa52841db9e0e60ddfc66c1926f807fba73742a1f2e4ca95b0172dbd87ece2443e1d8ad822d67516a8c4684253709d3cd8cb0caf8109e98ccfb36eb763f8da001e45ba54881567346e09d067d03b79ecfad0c433f0cc708d0f2a5fe0f22d9c9f93f19cf9b245c4517bbd2cef6302a3f5536df39408d4667fbaa488a0fb302f0be349b9306a0f955415060542d56d213d2ccb203a91cad34c1648726048ac9b2a5676985f761be125850fe1c8ed23fdaecc11d38d5355bfdb6c3fa4869f47e9e636a0c1f09f10b0ac13fe4be975cd3f2f7d6894f5151e331403b1a67cc9a92025c9eebd49ad960ad106fcc80d3312eda785f8ecdaa1cd36df25c501a88e7b48d1598913d46857f87ca830e29cf19b11002de862a4bd09d12418a33c74b5656ad12c994bf798f881953fc320fe750fb221bd617fbb327a0bcb2574df47080e8c0d8a45ee1c0424ae0414dc0a9b8717d9f27d8ac987c7c9ecbc946073884d1fb96dbdb583aa758186b16fa429dbf15b8d5bb48cca71469e7ce0ad8e7fa14d3ff6d90c129209b3b71184974304277a82d644ac8e0adf75a0c41db8278bf9d0174d39be84a3a0866f5766d6e024e5e935bc95abb9103a1e78cb5cfc521ff89e4fc5751c323fd9b651613d72a30f7f071b4836fa3464eb07ce9986c238c4067e8e66756e45ed1b0a0436f3b4b54f5b9cdd810fe1288e58f94937815200018b397c3922fce436cf4b31de6ee43e6ce370227009a7bd16ebbb91ac37f4d35fef97c245620d38a15b417f62984a65ec7d4a931b0a961a850b174f008ef0d9659a6008931eea69b628b497c9572e535993f3d78cfbf468631fd32b3c708d399bf55cf5293fdc9efd9e6c201b95d7303a8c3497cbc50ace3691b8cc67c4141c8966533211ab29ffff2530c360398e2318d0d37bde4e207588c88edb8972cda9b8560c67534c19b54326ca28a12b9b547ac7982acf807e85e02c1dffab610009af2e503bf508f6e8510700f6e65346ece8d94d4da6426b25c7252ce1d37bf563f654e75601c906bfb2329bd53599d713ea6eb88b697b317dc41b85280ca7f4e0163299617e769363ed0d636f98e595f009eea38d221516b65f76ee7d5bcd44a8962e2e0475f7e3fc8a021f69161fc9acccc1d4fbd8f763f8209e3088cad62ee2feb26de6ed343eb11278996eb72fbb6ebc4f137c94095f6a90fc13f060a8fab7d7251fb0ee14eeaa0cd7972484fdb35f5f002ab85d33543536f65e5e252cf04ea7ef0c0981823a100086e2338471f9a7403ddf583b5d88809af5db79224a57d0f978fc9aac63690b76ef4244c074d46de46cfc04366f4474456250ea5eeb79645227b70b79a0c4c2f7797eff3eec8ed9d5f747635751d039bea38658e1f59c333c660403f021935e0a8c600b08c36d159a44891ea5ec74f68d22456cb45209643e9dad2a18ce1e063890ae1126dfba46bbbd89dc282678d43b4554cedee80820e1327829f98face308ed31b89e2abc97c0c81146e9e823fa4f767d2567a1e08fab8e2ea89b4d861d020cb1a97a8abd2e32cfe704ef1bbf90511c86195863dbd82619974e07eef5dbae53f68bc2e903339939d4bd43a592c0ca9e3854b8183f24da3b7ac4445c3f45952bc7077c2ed7cf7b6ea019eb70e5b041665b7b8fa7559a4e5da0b25a7dac843efdedc5b241812962d613c2f162ff883edbb739e6f865630ae5d2be523b86c0312f316c6b0a496bd5d9f55d5c652a7149651333c4f3b7a6963dd693337d1320f72b59a4b07077ba5ddf0d953560ac93eb6c39143180928c7bcb74d7052a9dcd17572d17885e52418150240f833ace15ab58ef823587403d40f97633d02c6aef191d776bfbb92325c99402764eddd81f1292fe25d9f007e06d2ea24e9d6ac2ad86e4fd48116a3291bd136f709f3012dba7802ea724a3309d8ad1c2d173ccef2fe5138857d359c7abe63533a57d1bc36ff28b46ad1f88029d204c9c635b3a389ebe14e03f486e2a9bcb6315bff08635037b1b10e2d088c708b606f9ad5c9ce4229a4ecda97892a28af403df630059aec0cb9952eb4189c506d567a0567eda3ce2ff29173d6cab79a0ea7f573bb67c77cd696bd5737a7446bd04d75b07c9dd8807780d85a22ba2f504343d46ef19d8d853ddfb612081329058cbbef068468b10b88a62e181bd605fdf5aa773273153187ab0b0be9a60aaebfdb2842820fccd1b1ebf90f1812bccff58e523a88a07d6816969f1b38a1fc3a1d54291cbd8f48cf2609eff7e4b7ccd1c985c1babc0a24a594990280998c467f907024ea13734aedea8af184f86b84dffc647f645720b95e941adbc886b597d3abb7b2171e6c61c251b7b412edbe833f10b2f1c3e4848a1797a4915f8ace5ecad1b3373058cb1bf0fe389e3e1f21367388f9af55ee96354511ceb9b2102719e9a4cb4ad23d2fe7ee6286167317241d01c7913e96dfe6398b84e1cb6cb16047a497986359460b440f0118c33e6047a58e7f11f60322e5154f83863cebd90a66801c82f7520dddbef77c791b1c84fc7e6df2148c2762234705703484bc0175f500b6139d38ef27c72c172f8489efc2f634e2f1577018114d31ed753959c53381aaf6d2cb9a8469eb116384a5f32b2bbb57a430ee79bf4fa6794db0d1419ed38af35148e8e34824994c0440e604a1a72c5ac86bc7a0c23ec130338fd30fe8d68f5e57de9bafb4d850306bcccb2afdb5c7b2b1fa6991bb5f5bfb115ac5215daced507d1c4a5c5505be62fc90dbd299e81bf413755aa92531a53e79ba0e0247d7437e237a8b75a32d225849257e9800bea7a34f64f1737a465b8edf26344f41d6204bfd81c58819cf3a84d40359e7bc99e924d831e46d351ddd40b417de44d639f22e6dca8f00436c557d2fa2c44e381a5f1d40749a12d018a9089b0742af7f7337b9f6ad4e7a9a7501b5ae9c64380da087d11a9598e0f5d75d5ae69d27db98026f632aa29a539989cda2e348a031a7dce204b92d5773f0ca589c4911e445ca7807ae6c52e927bb0b27e970500ed7911ffc1cce945c386b722951153e1e9a9134af105e36c16399899eddb81b167643fa448dad732daac06f5e2ded5a2d3656c8c42d52b699a39f7591142d224daa5afc39cbe84232479a02557723fe96a5b5c4c559fc6af844476fbd01620e1af020867a7c017a009b52ebadb17ba3f1652899412aadcc63e22bd85149d92714c44f3955027b931f12757bd58136e2a3f119b6b614094342e9b7302c421515b1b3317577f3d915f4498c435b5af82344d613bda2aa71683be774077c8e8842782961db41c48c8b16ad01d2ada331ee5a80a11e755288b3a557dceee083a545eeb36acb5109185b0cb9709a5afe76cc4b8d4c49dca0b1be25a76c26e6b61e987bddc6d604160f1e2cfb530ac1b129159e687fd017198ed02372bc700dba46a2a604e07bf98fd34d1dff13b4a09feb82c98ea631d32172a22536183ab404a00d03c5523dafdaf75056114d2845ef107c637c69ff8f6cff9cb16e39e77809cd200b9b869b759bfdc05bfe69c640334a6ae2ce3589aa3098383e878c16c84e209423f418060927592595f2f42f1e00fbe6cde09370c230defd531e794933464cc1e36b611dd9219bf89abb76b33ddc97789b400e3555c23664659f9bef37869441d06e0c3343ff38a1d0946c033e3acf88c188f057d38931060c876e894393b98c617873f6f834b1c9ee3a3e9f8d8fe6afd7180458d9ea414aae726b97f5d20f1a1d1732d9645689d94a0978d8aa608f46526994a8c759f9bac1cd0dabbce6177379d6b33af6d933485a8ea54f23312bf4aa1a3bd82a7ccccefd03ef2507245510fe138fcc4e21409fb6364e8376964f337496545771b73d0fa6c36aa473316a8b206a22edc8e33457d39ccee612e45b7b186a98b74b9dcce555681aaa7f81aa3a6757172005838109492ec11796cff3342c0353780694fef89f8e79978a89b6b75956d6f37286a91c6d68af7860ad890715fd2f0a413135b1db92f1fc32ddf27a6cd5ece89e612f19e6d6f4890f019f6c6cb485ee79f7139990023e58f6e2f00c2870b36fe7a7857a1bf63ada006098cca6d5f2a51f5b1b186378993e453d21e502a3d509fcde4ec59342ecdbc34f27b04abdffceafe1bed6bc52ad1cac412a8d81ebcc473c59ed84d359752ef621aeafdee8f7bbba0f612d012ce454aa935c7e3ca5039824bed42052867e13e78ca023b9f3850cbc48c4b3d863c9a6bea84a2f898c157d5481b520a776625b35e4aeb4824a223225323be3b893e76367047629fefd6c773a26e32e3885cc355fce2ccace7959bc933049351839a82b121c62e6037583164432f0718c511662c3adacded4ed960c74e77f308 +MD = 0b6180f72608560023802ef42e0d80f862759a2a6b107667d7819e07bef00b08 + +Len = 48032 +Msg = b2c633e3181ae5fe7828707ed5b70e0460088a84465eadeecdbcfa0e9ff19bb165d29a0998c7545294892bb6ef297c6e0855d12be3d757b4345e92d0b9814f66cd01dae33b4e72dc504dfaf53459f1017a88a46af52fa2d3cda871fdd3527fe712da5b3aa6b925e3d2fe44024c4e5603db296d0a246e7895c122ff5d946d147d5be586d5841057b1422370a6e01094bd56c093d41a9dc0403854a4b7a5d9f46ed0abc17e7b59ef8cc945e8a998a8917710d67e8d7cc4621d59c7c9d4ad9e09029bb375fb339ed5bd8feb13d31b1d377934f29500f5e945744d02d47d55c53983e1850b1556e6f18cbb9d59eb12776d0ae89d42f42b16538d3c8d2f7845556e37cdaae994893a2b4075e422bb24bf1a73545eed30c65273af4df1408d24568f6884a9794076a16b23e746d609fafc28fda2bdfc7d6fa68d24a8b571869bd1845c310a22e1c523997b364ddd9e3b367eedf742d8a3ce188a327661292a51cc355bfa564b3e1ec89d918d81a0429075048e7e76e96a8ab35022df7ecf40ef528aaf07145e2027995fad126985bca1c2a2275ce0979a4b7cc83c0a93cd911c686b9f81ccc24f8b9dc717ed8df5d6152440ffbc094bfabb7ddac720288ae58118c0729007df93f0dcbe164775595695a4c65fc4776b5380bd6f0d48c56e03c56971715b4b1db4ff5f2af348aa1705c8491c8f9cb4616d42446d54abf3e1b5916466e40b23e4795f2df5f717b399ab571b2bd76d489310aa1bbee570394bc18d0f8713c7149cabb84e0567dd184510e922d97f5fb96b045f494808c02014f06074bd45b8a8ad12b4cb448ec16285fb27670fce99914f100ad6f504c32fa40ab39beec306667f76f9ab98b3ec18c036b8f1b60d4457a9fe53cbab23a0ee64d72d8a03d6d8d67a9f2ff6eb1d85c25d8746c8b4858794e094e12f54ab80e5ba1f774be5c456810755ffb52415b5e8c6b776f5f37b8bcf5c9b5d0ad7e58a9d0fa938e67ad5aaee8c5f11ef2be3a413628ef27f593a779085da6e641c19e79dcc3e1961ac53f9a573860cace8cf79ca99d3626ed0097460c31bbd460b8fbe6d57a6c2c662846e2f229298f443215d96d3506dcb3f2faac57e24f2b78c8e38961aa9da1d84b22e13034b5ed0242077fe78cbbc9d8df540491ebeb4c0875f7d9f7b0e0a6cf92364d97c7806477315f08af00df7eca4a35f740bb1ab68e44bb410e49ff9bdab1f360af7e338621848efc2a4dec5c06b812ecdadc580b78b980672bc224f1781f0cc2ddb529b28fb019d2ffa05ce22cad6d6dc6dc2dbb5648e9a4b6b60b68363dd4fca908ed7a1048821585b4cbb19a9ec7e29b16f636b587799265921d407392de76a7e5f95d51c24a4c5307934aef0094f3de295c1e04d992a88ee2d51aeeb29bb940d8c7dcd291f4effdf55e0e88776719f69fc9d1c2c3e76fb924bd67d6219f4d0a5df369014bf468dd2a868cf577b0bd7ac6c9d28deaca406ad450b7e8445b9a6ae1e6926c64db5f76f3a736b465f456e15ad6c0b4a2bdd32a7e197b83af4339f9012bd982610c2c620d2aac53d6c48eb0b86b0cd57054905e8e823336d6f8a42b383dbed1b5296814c3ab5e425e83cd6f5c11277ef800f09d82156f803ffe5177f396a2d8f5958b05a383bd0e41c49b83d243910f9e658c6df56d90ee6ea6ca75dfb1360696f31dcb495e492645095174a78cea05c7d4bc3664d537dfc784979b3927e8f91da498cc1185a318bcc4b7e84847830028e1188d3cf6d4e2ff3a116eac752c2eee2c748e98b42b543d791725312e0c6d260d19d90a4cf8865a19f046b6037ff6ad1d49894b4472773ba8f7d1fe8ad6db43db48b0394203388cc68cd9d25d750eced97052a5d0f8e03be6f2650cf882a906be2d9966708587fba27f8e7e0d7bc5d803916134c42f2da2856f54e8f19074e33820fb0e431fd32b3020eb357e24ba3d0e154b84a895be2436e7382f0070bd7ddbcb5b8d5402d8901219668539e06a726b8457f1e8cd20256df2752bafb3e11b1ba541800e0ed6cebad186d9cb3f451c9e673d192f25e22a8d19a27b49ca9e5f7a173372db747c3b8ce1d2cfaca1e8a039266176c63082a826b526aa893533bf69c9b7d266d4276b1ab2c0c358b8a381ae4a4b77589d7032cd5d9815c8745fcf7d05352b2abe66d1e6dcd75149d42445705b71b7509d393ee38b7d69821850e4268231e98193c91473b88cf61a94e97021d27a9348e04c310bc72cf26091d5b1f8a9349a15e4bc8733ee683e256b41863537acb79be737cd98894d6cde614cad65f2c3b95221cfbeb9e6ef7604d7eaec1d03ae80d4127a493c5a55254607342ae0e755d3c0fb513f882a994a235b44366bcee67b9c02824849a2bab842041adf0bff7155dcb20f6e0121dc272b75cbe983e1fb243e37fe5f430b04825ce86f2e59c38ccc2fe658eeb7854ea967b8006a07e5430735133ce2daebb93ff124bf9d2cac2eb31518ac163d9d672d7282705c6a5154913b34cc6763dd5f3d99297aa02741dd8736b99798e6029c4fd665aa251dbeb65e9b0d3b7160584d07cf972edbcc0cffd50f6999db632d746d0df20c58b475cecbff1cf88562d5393b1ede4aa47d662c18f979315217a686218388156ba12f2465b1d48217edec7a23e16f6c9ecdf5e8bfaf88ec9175e627f9c1c853e276335dc85dd466ad63f6a66eb1eaf32f30349c557c192a1e2064f04253135631a63ac1407d9d24ba579c34782aa18cda469add66f9aa885c99bb65b7b1f98aeda3adf57a8b8f3ac35b35aaec9653783463a11260a29d65d134520eb668fb607b10f560e2f23b275cc16b8018af4163a239dfe1df0192611092b141cae299857e50a9a9f65c1158eb3ca64a98b02bddb81bbfb23e810a089f3761a561a944584bf553274123b27df32f6e60f9535324fa9bc90a0bbb64bad194dba017379c5788715a6f3fe38ed5090c2c79a6f357f7ce3c745fc31b52f66c2d97d85817f211985757f86f06171ca17578eb1e3abac4c7704a39f12b2549a3742ea4b0c4f6051019b4494b15eba330dddc3beb73fbfa6ac9c31f12658c332c1af8ab9dc908a0742af7d850ad6d075bb7bef28b498c271cbb7775b354c8317a648e338b8eba82391dab2c0c071bc76695a9957a25fbc971c7cfe4306399c2f2e377f316a08c18c36436caf9ed885205fa249b3493bb6ffe7144d1262c51764a3a1e60ab88edd2c791432b96bb33359e47a87a470d5b79174a7ed311198fb9d4bb19e2d6b2604eaa1728d46eea9cf0b410adc92e1d4c7350a5c6406db5b50c2708c31004b773faef88704bef0635f1dbf7bcfe562e1eed3f35b3cfb88b61eba585d27ed1f2a9560c47b1f8a3989ee77a4f5e905bca4355375cdfc77df506e6f4b4a065ab1e60fe94e76661091c28101389fb05ab7c4a39dd9da2de2a9d247c8937b58b1c754b42fde9f62b9c0b622a3c5a2ae4d1aea419a67a956a3aee3b2ad7719a4592a1b8c1bbc1e9aed8d0ed84591266b44afbd16306663ff24b62cb6063e4c73baa2e49f952f1c9615c272accfe5526ea83ce62a48202fb1cc89555bbb313b4c3cf657f68680c1df972589a429094e3fe28a0c85cbdb36f203ee05a9b5980fb747f01b98d4f834fcdd7ffccb3b4543665861d8309fe09f4d31afe4a9dabbef3c4356d98d69dd9e754d977226eee1596b7488f232ae779347be929b6213e1046498f138de2b7726d3513794bf2824b7d79dc90193dee73a6a1360d2dc495376b6ae89e1920410f59d50250a9dd25886323aeaad5b197abb3d96e03020625a6cbbeee67bb1dbee325bb22a7bc8d5c3ed02b5b4a09346763f48b0dc5e35483c0ef9becfaf44975a0696de0e904917ad15d175ef7f434d24ed14c91a0423e14185fa870d2551229c99d43e99f02782602526e263f57116ccee284a64c9f317b3f946b26984e363fc12a03993436afd23468a64d7a82788b6690c998055acd0d89163a5a875ff42c2997f37c3331b6f3da0846315406c8d29874920365156f6fa76dbca959fafa73558fba0f26640c2f75a9c47e366490c6f7066465065fa705fd03688f7abfa7a9e749bdde884e4dd999d5a780ac2c4eece4beb7294389f264fc6fa469540e9a34518e7546d360ca86b90475f52fbe8198f40610ecc734d001480b16e3807820b726a686e4924c20bb45cea6282b9ba76f9794f81bebd0ce6f527e267a8a7cf986d92a59343f50deebe28cbea64a644ed561b3d3333bfe5c039e31699adc9d8337db9272c2551f639cf1d7360be688d67ec51b38cf221df7629dbd46c0f15a4c5ec07749fb5e283d43063692a59a79dca05413af4c58a03f00d38a44895323b3400a31656bc4dbea7292135b2fd0c7d00e71359d372a258172d210e9509c9a56a02b695b7013daf9b017f605e713e34efdaf09991c212e6d1d0bf9bbb3181ea4d3967772c4e585d9602a671987fe6ca81280081967d82b5073f3ad222d50313c7efdf461c6946d08172bef0c7edac489c176a994a6b99cea2c3b93c32bff728bf6a4589ef1bb010459aee66528437b52af157691653003888a2645f54b6032f1cf4c2c90c2c3e26c8c25f5aa30c301912fcee7a60ff5ffba32464c5ee81d232c8d37e8ddd649719f4323954214d3e7c3c81585391355d20d993e1f66ae90a38aa4fa05dc98b64f1b031a3dc340f0ae790c7bc7c12bea2ad143502792eb6544aaab251c138684cb6e308c57b44193c61f618437e4a62d7ad3b54f0d5a4b0576fb042b84292c4f8717700c8b8b9347bf356ba14e0a0e8a4253636d395329ebcafa449fe6740670f2a535fd41cfc286fa498f6592a7e1ab01fed23d23e424a2a126e0d4ab9a8193ae75f6d102e73bdc17ca41437e54bbea4a24865155a3b7a4aa1f7d7c5bf33a221b28374a57687ba1983625cd8986e9d27b72f43c57085f7c46325ee960149c96b92a7babb7ca0e91ec2bb1664cb517fe2658a040a0988893f61e19ce7075357c190b38878c927107940958902065b2c7cb441f10bacabf763a11427dd5ab715cab28f2607e482f8d205dafedbd2f46b9eac3c52f1e1590bd92da4d8a281dfc82f0224dc8e551b69cf1a70bd17b68405f056636fe331f78b490d7bf75e04313b978858f236a5592b1b86410edd3b73c319b99f8f0a22ee405a477fcc386c1735ab4b14af265ba3055c51333955e72a6bc2ddd6fb8e3ea6f2b5e59a9e593ff87d1353415d87ff63c03b843085a9450fc592cbf1fc960d876902eeb3b7e9083cdc76a8c542801900245f261f3cfeda8b9b328ad9d84a16fa6ce86bb15d0f4c4a1a7c538aa63a32e2f9713fe7a47f3007b3492274d7d3e165c50f637ed9f3958cffce5b76d3dcd1710718d8720551cee9d6809cac4359f6313a20de0173be6a695214c873108f7f1516fdf7a7a99f3c9acc7fff686203dec794c3e52272985449ddf5a268a47bc336edc7a76ed78f03835ded53907efa208d9a9f7ec920a8da94661af23cd8c7253c551fedafd649aa0b5173a10bdd6644ed165db4dec31784b3b62bc0d9f49c2d8f16add352eff6b9996fb8f0c3c76ed24ecea48c49a40cda0c95cf122640216497f81860406abeb8978065489f863a53188c1d10f20bb06508cbaef20b037f51bcc3099c5f8fc8306c4c21b18761f34fb2167047c23f2bac0f1f71677087dd7d673e279098a53da9809b9534639fc14c863444399f8aa4378a5ac0793d12646efe321b43d4f644a93b3568d81b89cbd4fbb041ef7232438fdf4442315aed3baeeb678cbdf9c806ba05e243a698673a6e795110702480323b78a5a096b0608cc594a52307f064ab634669cea4c08135a368de59c49bbc96c3bb4582b125b27c3963b48828a2125a2d6693b0dc7c1ee5f93120c3f4c12e9ab012ec8e88a22d3594be5b6228f61a3b9ecd289256b58772fa3adff7077d1e6389e4616f261017df5d0f635910d3c37740e3f01b195105032eece29d05b6d31cd6996dcb9055b9a11dbd9516e72356369b11b2f42d3adec01caff35cf75696eb2099d84bd05b5ba45b30b741b5cd1b9f35bd38c49a565ad24cecd8dce444aff8ed4b6a96ec0845109fd0918283b95adb98514834688fc36146095ac6d468666cc819ea55ef46be0c7205ed7f58cf5b114c33abeca0cb5f94937041c2cfaa026f366a222fdefc0fc05a3791e33cf7656ad7cd29934af47894ba875577def2cd28c1a7d8cdc3128155e1ce46543719c20ec38589d16cf1548943b85e8e08280dc0f036d5d6a56f5af38f32d47a521db82498c5955010aa3b9ab76a23ae56340b5f4b80e1f38dfde2c1ebcb03ff94eb90d5dcf413b53d0777ef9c046d80cefe0f2b5bedc3cc82a363e87d029b88066b92481979ccabfcf04fb17df004ac7b6f614fa7e645088c492390cd3d63c0ae8605a6d6be88d8544d0a08df95b0d9626d48f1b8d12d4fb3d76bdf64e5244c962233169c2a0ee44d06f11b4c5b39af8de10e3a1417444b00368300c963a6d7c62862c1f2252878ef034c134baa66d803b4f951452152a27a4cb319841db1074481dbce60179c3c432d631765ea00f9cccc525ed3561ffc2a0243531e7d0d841a13e6666e6833d7506a7d502083cfbdf113608b441d720216417ad51eea81f750c8cab1a581b5f21ea3e3e607de9bc979706dfe22e0155b48efa2c80cccd708ec87d1d68cc8ea34b6c1de009f612cc86ccabfdff406ceb0c8f50153718ad55ef83741feaca69a461faab4c672754a60d20b9f5743f766a99c3cdf9fd38e44a27bc263508b848ccf6148ad610783bc39b41a558e961aa5edceab86d3bd3feb7b7e0f7ff5b3c88978858113f9e6f14bfc19df29ab75d9522566293d18b40594920806dd14acdc59e9923f2cb59828bf510a4263d6689b37f86aa04b964248058e218fc4d6fc26c4c9906942bea491e0df8e2b4a39f8c91a0fe4f7f974ee700719d1927e632d1092c088e79b3c9293754fad8227f9acc9c411db168fdb40e562d821f751e2c7008a7881a17f56eb9548486f2f42410d04fda758e555f2c110de7518a6867b50607596837e383435011f73dd1ae337a2e28c79624b92e2f8574398bf88645852971bc596690dfffb3ec378fe2c5203f3cc3b2e013390d26e2358e81c83359e540d44abc34745dfc2b4fcfedb4bd6ce8828d06f3d8295eba9dde60e3a803f78df2ab8f0110129fb14cb91ad7a60b9c0ea5f14e31f21ea5433ebb5b11e68cc0c7a563e3d897f017c78eb4c2fe5544100a0dacf33aef8d73694b78d7ad2212282adf9a03a31a91589777cf329240db7b73200c906f3efa3b952a736115d958903007ba48e1367ac4b98e64f463d75630c2938c905f4ef9804f725771dc7aa4bb7fc4413e137a20fea6391282b3a738c280bec99d8bbdefc400b981a47184aafc528bcb4dda340878d60e6468322ee7b326383ff2650a618941468e536595cfc550c4c5128612b5a5c184b70f4fed07953b665c497b92d34299cfca19292c87b91315ab06a7949d08012297026d500ccb38ef9b0d4005d98272abe1605c976749f1e509a4cf1843321d6e90cc3af66bc7972a98a852d1c8bb547150b35084e2ea75b94d775d3c3c966edf10d7095ea93ceebdd1c52465456fb796949ca5637f3d271902f8f27eedc78deab3ad78d7497d980fb2ce155ec42224b23996dbc1c0947e7aa6a3ff3ecb27f317d5da0a2ec12c3b96c83dd61cc955242a9c1c640e2b92f454c4f2f41a793a26fd13c73d93a4ab31e98e9ec73dc97b2e864897ced724bb214dda8071806c9091f0ea1f63c4688d238e725b69204926bc4bcbb38c8b407f7dbc53b6e81f19bddc99c52d4d2f813478ec201e4c62ccca45e1a1da1db903527226bd10d82505046f5e317b3a339353ba88f431e173c8e863fe479602def1c697239318c260b316b2c4bba3cb8ef34d60fb7b40b8e1c2039ee84951cc6b705e651962592720b8675f53c01161804593f4aa31c5432b4cae4f360397eafd238c64aea73c77036978bd91eb6e9cb5eec9fe1ba43a10cecd4b0d7e22f2def26fd30e29ee4d52775abd65f599f5fdae7351d5d63f09922ad85c421703ed28e9d9c4ca31840619fb10b7e0f55851e4c857be24508ede47edd274959742d15951e5c4314c14f16e1d000aa717a2fce292208162110002b286600660855c59d0b90873dbd01d899f4bcd0820e3167187aa522df7ae3f216262e5944b57bce13f8dd63612741a595e05bc32f6de0f3a446f61268d6e98a4c821f790ae84e101e64ec39d8d9e77cb0ae9723d916f19c1995fd20d7c08a92764420aae12936526758a550ca5b5d2692655636a792ca2a1f6fa29355bd2ed03b721832f1019b5e96dbf0f25e36096be40d8246c268d56560ddcdb509573d0e4416f15a61f7e5fa52f6b565bcf155124eaf02995220781581e666cc1c151f123837926a5a947cef43b0dcf20d14a8e57751be777e431d012d935521b57f3ca4c0dee3aa035ec804 +MD = 71b950c0085388ddf90444c0918d72aa700319e789441fcd2da539c12a32ee19 + +Len = 48824 +Msg = a053265e4f9b8cb00d88917e4a194567bc7c32a0542fed397065eaa252ab946dd1cb9d554ef09380ea0cb501f67704a1acd99ddf1c49453568b6469d34867a54597ea5ded9e2074a18dd32b749221a1726d46b33e4a41ff066394fd0b1d449bba034e400d8b71097ffc3b1a92964ae51933644a59486a1f0d0b4ae42afdb2c2b0eb402c334b8d5ed0785dadd7f83e8d85cc7d23b1438f3bf10f00afb17e5492b0bc8a82fd32d7fd798ed545d34c8f133e74fbaff4c023ee58cb50c04d238c843ff367e4d9e5e35da1ac1c8312e7bf1ea9e96a7f9252baae8aeca5c64c71cd2fb52c72b247d922080f5cadd5f57e40f86e8633f3085fd5e52ddf9a123dddb8fdc6c4358bc5913685091d03cf1964b748e2c802aac56be83aa8008834afebc266db572ac1e182734d2579b8ceed2f7488ad4b311757eb7407901c0ace01106bf36961cd051a417ac8fadf2765ff531b20347c59c94e730be46c7e9c1edfd0284c075086b5de32bfa0efc9ea24be641da80ed7e7210777024993a4b6d7aacf89b92bbff264bbfaa43d7ad68b7ba8d6fe9892ea53cf118c19bfac2ad568d052f2c35d1c9a9221fdeb27326155eb5d20307a67204a13fb1694bf2c7d92431f0f1602f1d2e9beaea0d6c69d1703e429d445b6021614a0329b15b08b195806b55845e0a09f6a4ac0a809c411540006cd67b0e3ea385de456ae1f4c5e8aa12451c314f4dfce86d6f667f6884594c4b3865f047c96038060b5b413db0d4e081c62e405b815ecd9e3be651f8b9075dc8b032eb2f87c1416a5fe4195f51defe75f671f9a92d966ddf1872407568863b1edb26b4ee022c6ab148edb081306cce98decea462d90e90d60ff292071a3eaef6c12792abc20a7984cf5e4fccd6e8168f852d88ad0e2dfe2e274e90d555977ef86b1ecf8f4dc4378afa1f3e68cab89f05f477eeb3525b7e8d696e8208a4f972cbe0f4b1c12dc06c6cd319c57c944631a031921e9c3000da9cdb3bb0c78ccc5418288f8169ea68e0d162322c30bdf894084668608f2d84d802879b613b9778ea864cd986b10a235a62ae53baadcc388fe63ae0fcb4d35041677577df8c4c65fdbe53b90abf1758a4c7bf65b81b496debe216e13934a9cadc75acb870e133fb5467451653bb997184a79d4e6ea2bcfe70a3e1556137375b73d234445d62d5a3b92a2bdaaace16d5c3aa51f82468ae55e6d2a323bae4066bcc261505ee39b9c3f2af0cec572018ec2979e2492298a7d9151665338d649d63b11a57e26a8b68c5c89df034a2d8261e7dbc582baf582df2c5182e6d21df84a9e85503c21b83680f039ddf9ad31ec9d3891abb8515d0ca08bd8006b9c07c44a73980218f4746430b6b56e206311c8773133c143e9a2a0583c6f5f5ffb06364c46e43b73037ff801fc771006005f7eb66e4ca6a40878b66cca81f04273abd6c674d45cf8d33d4a8b5e195429097da7a14c46bc672241d76492ba73a19a6b2e5faa02f708e82ed42347f6bae7e2febbee67ac72fbcb808bc631635a0bd3c6956e42da8a31b6e73d6046a9a4f1315523e42d087ad068d74c18233703cfb440b478dbd596f1c3d8eed8d6acb2a35903882918c534838e9880b0f480118bc05bf405d17eadc7938650e3647a649cdeac5133c77d2093b156c24701e8f3ce6c8aecabc0502f21aa721c169c8d2b3c4692078a959adf7f55949940f7dc3ae63d5ff6c124d49bae7d2e98e8eb6f8700056723942fa8c1b4ffc47e1532d45781974dbafc7b8693bc900e6fe0bd9bf896bf9e2df6e21157b31488d95a3f5bca2f2ed6a1a430e077da67b409849f9d005ec9999f19498f32184834437699ed132d587d335ee17ce8968891ee4b0ded2ec6a7fbef71e25cc152ef693500cf12b32a98b3f88319a6366f573a86ba94f6e46cff47a797391495d19e9a367f4b373a95841d59c7261711c378108b49a164c1c023ef500fba311032ba39b0489af50a0c9f1bef81a329eb414fa6348ecf91375eba556131e25cd0f4e6ea4b032ac6b1ee4e3212492d692357628e4ad08c16c5a7273c63b44dd24876990e6f15a716b2b915f27a94115f6a74451b06d5436fed27fee6cffd595bf756452885266c7f9cfb8acf80e8eb6721366bef2103a1f72e5fa6071e7391345e027fcb358bf76bd134113bbdbe383ad80c3b7d01c21456f9bcb0ffc7bd8205fd199d68e8dcd465efe14dc9999a74250f64583721b71719efdda4436441b83b54fa4284278f8ff85991a4fb9cf41bc027dd36c01949169a6120f4646c96806ee622f39f6a1a968d9eb39b344051bb96c1e55b8a510ebf531e3535f5592286fb2122352d391464a03fc5a5261c39c0136e0b4b08516e6dfe4768cd58b28c487ab6866bb01cf396daad4667239922c5b07ccd69cca2eeaee69d5a4f10f12a2167f6be1bca7e3e899777c435cf3f9339087e8a4c49be05fe9680881fb0ad82ce4d6247c9ded56bd9611fbdb58b88119695f3e066f21b5ae9988150d3ba303c9b8599920a5fcaf1e2b225914adb0b047ab37d6e5e784343dc672062ef8031ae05bafd4b31dfc7675224f9ed8a502112321b6b62772ebe67537cee3ce7c51a5db9681dd1e4d1534294142d30e86d729169285e8b6597e51beb643b2d40db62d212f77ba4a7d6d6fa251a3009e99568289c54c7478e467ff8109797d28f45a391aee38751ef52fb24819192b6f26a8a3e283b260575acb7824f9194bb27964512e9d6d1681fc818283634d5e6b75f4148b945fb63a05d542114ecb255ae3fdfdc502bda35ddc8b69bbf5e7a079cd635eeac0fc7e082baae7aed03612087c4cc647e7d12699db76ee58988efa81781d0869cf31beab1575ef6547031aa48a7a331c1250a61d426a9ac214ea726cbc499a6e88a5800a0b5ce09d7ad9451656aecdac4be32cd1598ef36131a41320e20f9c63b401cb0d548744bd32619c4628111a605c32bf9d670b839eb764e286319897af1beca89c3a1fa22f3743261c48cba49e0ce46769b609d2df6dd1e986f30c13ba850f1d9f034c835a5126eb81fd03f3cf22a22c1d8caf668d1c942f096e9396ecba1135fef8356ea648b2f45b90e18d5c671317a13225c9118c55bcf5ec53aaad819cf5a16103eb7be3904894498efcaba3e02fddf09483d185bb9934b377d665a455677186dd8241eb68ef127032c8269db07db90d241a37cf6ecdac0b25a37ce9e69254aeecbc6029e1f2bf4df477341f2c071ed3fc18aa311760473e85975a19f77e332358204062a4588128fd933ceffcd7f288450591755e5beb93c13c67fc2f34f72b48374a615929424875a4a8d6c7f51f7526675661eac58251fe1a0c5937bb860fe487e4eda76ee9f68330df9c35678be2c8c860be64a6f3c167b7aff9b61bca17569a77cd362e5e7a4fc14909ef37201652af17537306262b219dbaa5555daa8ac3f86ccaaf71891c02de4ee59d6dc45beda5e3eac0ee03d757549323bc880db2562729acba3f5224c41056f7e70f61f7c1312c49f265720c2f62a43b92a4ddd534b1183bfea1a1d9bcddc9087327de33f5db5a39b2745b13d15153b780ba013c881ea03e249e5e8413d00fe0ecbc2357b22bd582a822a63466a90a5e2dd0612f78f4287fd33f716df06e9047f8d718ab1faa06ec7b773bb716f030f742f1e5f52cbd1ac4b48bc2dc7c41b5053f7fa57765df533fd47b02e408b02c4b662275d8cd00ddd66f8a3919dfd0e4e16abcb202ab5225425a37e40365706822426df91e8346d97dab44bf6b40a386a5219627951a8ce5beb6b2c75b54b94b437dd959107516768010c23a1cc74304170b16ec78da14f97c8ff49535fe123d78c06e7df6ccf81ca9470b94729e37c400d143e9f31272cb418e0634d98b03a687b3354d18af7433bef827b3b6ea0730271b26074eea2fc1d85bef8e8f2214ef39fd35b2bd47132388cb1f812fd63caf5690c52cd08bd245089db7899febce7e564777922fbc5c54cf66fae427875da853d82a41c21de3be98fc670f500fb8bca63801d7b435d82f5b74c0c6e428f285e79c5d2f6cc7eb9451220607ecb65b11f079dd6795da0d1af39b790eafdf83adda8464dc16b2712efbb49c58b9073de6feb1132c1ad4857e61832ea4d0d49988f43749320806fdf65e5d32ec002be8a19689a90c8a4bc8c46bd5e7708f31bb7efd5e141889ea175341c3ceaa084ae4ac81a9a9f12f665c52da39aa59341b72f7bca0cb75e38648ad6d8e7b7a1b8ab76d87b81ac24f4ecb927556814a06bc455bfaa678335c03176dab673e447f16eb4e6f5f0567332b9dea06d573284e3cbc127f1722393d890df9c1f621f07d1408b5034571c7232458c4535d88dc55c35f84139cd26fce3fb0ba77e22b675dad940c091366cc666186872697c94e6078b71a7edd8fbd564e8b1897d3648f670819ba4a70ed5d460bae9b452b3d66ba834b3a8781610b1fde237ce773d551e34e1e278e050c62094a596878c0ed0daa0da34df83150416f16024c3167859618a62cbb9d79cdc4f8450e5689fedf29773e48bc979465478f1eaff23b5a7c444f39cade3e7538695b2555cd3e8f1da36a3dc1ee2d53a705c71fb2d4cef2c344d02e80f83ba1543a7a11b6356118af64cb33964a81151f645e41945cb1d7617fe3aed6715aa4291f9c32baf6b8449b53e247503a5d83d34a9eabdcf0aeb25edcd0e155b16427bf010bb0e8780cb8eb57f6a276248744cda0cd8612fa8b2bc342deee842020d11fc60db2c923241fa75a506b9072c801154f34f9bee111e9979b56feeb27584b5058eb60e360ca1fd54339cb278be862b13e1b2d690d0895e2ce8038132cd23c5a9dede3c195c4607ffaf7eac2d7af0eab54c9499ae638d6adc3a4c58399574d467f5a63e82cdb8bac66d2efe9bee5ae0b7b8876dad46855ff620accc3d4af261be57c07e28bd7486571140224a851e9d79a9edcb03f62bae093fa765c47a26ee1b699f8351c803eb102034dfcfdbc68199854a2a48fecac583ebbebd558f8cda0dcfa5e6c459e169802e9f5f825eed3d85ff2f13e2ccfd3704b9652b67178ed613ee7600c70f87822570c25a189afd11dd6c0f0077ed3d82fa2d3d388f9ec732bc4a7269f04570a58eab5037d8fc70aefe506c886eebf639e2bba98d2581a0a075684d9ad69837741a32bb716a0fd2756740ba043e25d1bc3cf92c61cf5ca58fcdcc4a1bc064465e56ab86af4251ad05a6b18a1c7c373a9a874a588ef3ac605123eb0a55645627d4d28a2449d84e7ac04b275f299facab455033904d18ed5ba5164900e028da46680c3326c9b2729645b326abd42ed2ae5d06597624d59be1fc237ac034947d3c88625b00b7674ab9f67d13f2748065ae4238007cbe8044adb6c9d4badb1d9b74d68346448b4d5340631783b5a35ac2458563ed0672cf54197587fb734c4ac189b2dda954cdfb18b41c010a77e90464eea6f863c5da0956bfa8cc636bf0a28be5addfe8d3e7e6f79f71d7fcbbae23ea141783f91d6cc4c8fad125811760ab57133818892471a79c6d04eafef37b2fbe506785318f939837757f21f90824cbcf8cd205fed8f3a363a765d865b1d88e5e2e078a919ef6ea0e9a13202fa0b58a31cd2c26de63d660e9c8e51ee5693ec645f787f29dcdff30dae32dce89938b7d4a5e76f99c47a2769b6c333ce2ac167e0267595bba8f251308eb4f7bbb332f0b55bb630cbd16d03af4eba0a0d1dd080c1fd80c247c74f0f7350cc8c6291218bb005e70ceb533f84482d1ede9578e8c06fad410fb57f20b53dbe24a2c57b2c102c6d220ce29317329d1b95b84d8330ae53fe5f83ed198accf59e6441ccb87b0891590e3796d91e9414e0c79f1d85d1d2d3b78327d8dcb7db05b934715f9237fb46925395f06d7b3216435e9bedc8f3b458a254015c12cf6ad4d73a3b664f886fb5e09a2ed89657940c0dffb4a592bcdd4b857b1c6201f901cac021a6c93895ee450a8b0b379dda435c0654f32e2c57d412299f7dd3f35e294f3b8fbb709587ff5edacd33f3ca2bc670f6055f6edeea211756692e952e2669cb112d8143ae852b681609aef66573a5aea5ba004eef9e4dc0d3803692fb784aa60aa2002bcab8f8cb87e68526b6d96980db1adfb6a99adf776a8e9db0a17c5348ee96400e3348f0f0f50dbf6d0586994d5fcd038f52075fa3e1386bd96a5c0c1a85b34ad62f5c9b3d282564b299a2bd7cfa7c75bf330c55ab0128a9f49c3dfd82979e2569071c801be7d77dddbb545d7774cf3b3094d24af992065fe9804aafe9eb02d9b103b127f3fbcb10d5b3c402a5956d5fc8bd80c6f45c7993a05ea8a9b84a856f946a43182b2da82884c91b336e24ffe871f53f4f04262a4f007e8273557ccfeefc86f9dc2d4316cad14581793aeb2cdf1285376f91bac19af327fe962a49895ed09dfcfa5f05bf00a46e1d5b71b09d4b93b58fad03dee57d61a244999d795bc7f8f874fa2b3d48d1e58d18617b3cf934dbcd7091c35b3efe30387d0418d3ec325bdf8865f8b15c467cea9913c157e9a3d41501a437f97528492ed1600220e5a6e39960c12d2aa16552cdc9faa9c8159e65d56b6dc87f320094cf6733c328ed2c777025993470bf384d7ed09d9c5924307654d575deb71c90f9626808c3b3adcbffaaff72744b5fc75644d58403d0bf5ef0db6842e267dcdf612efb646989cd8b649015d6558329185669003844f68d32b9b24b5e3a581af5b27c49d11f71f4748c6a904c3fdfc43633337a40c99337b3ba21a75150527ddbd6947ad64d35ca8f6080975d9a29d926d7eb6b24f86f64e9db70a4a18b1dad98b3beb5fc599bf9e3c819538fce270ff128d8fb6d3b51bddd05e669d852805334334222c9ac6c2678ad7fec6d43a20fa0104450a2f903e9961ecc1f7d0f4417b83d67eac7ae6ffb57f5f8897c6261803b7675954b994b911c0f6aed192931a02bb877357ec76e20878acd5246912e0bc841b4f0f185f25d78c108fc33080f97958eb82a75602f3d105246705239cf58515b49891b24c0f4b11bee745314a6a3fea673f234df7cf9fb37aa0b28c30d0eddab7c8951de7cffcf04647c02b5be6d6fe8efb443ae1bfc4f20434a5195b0d5751995181b1bf025db66b13cc6531e9cef3c76992b33d4ef14f4575654198057208ddb5d0243e20fdc281edd2a568fd9878a4ec973d8717a539d2f57b9b64539e6ef97818dbe1b65da32f387b326d9cc3ebac06ba304b8441302137409d3c626cf2712ab45f563cede6c7861eb2bc41c1cb414a8431e73f65c0b4ad5cbdaccc4e41e9104b04e81f2eebef49459cd1872296092a7dc90683736a01ea387321fbb2cba5fb458323f7a1510b14785759c756ea78291f5c160b0aaa9d506c54387b4afe4c3e2c50a630e584af5a3f88919cef26f2b8d17192209bf0eb8250e75cc57768504b77d3cb655c15409d039735724bda2d6c4c90078e97eb70f29e930b54b88836b5a0a3200f8571635f5d0991e20d826cb5d93de28f8ed8d2239dfdc0b39eec840f3f452099e2278c03b4665366a4ae55281fd1bfbdf1776387e77e196c8ae3acbacc10698f02b63f4c9223d66a91bc5b358901fb946015b9b2039a71ea1d2c353abfbb5779679bd17c8ec8b778554b03509d3532ad4b5259146ad976b6b614a221829c66c371470725f2db632a8fc8d21bd4f1d15323aba63185c1744cf64b67e1cd4a3407b05624db76b265cb71b44bf9b8ae64408980459bfcd907375e2f1b0df83b3bb0c537df0f73143c05dbabc57cc0e177dfdd7eaba63886bbe04e3e2ff88be5ea48f06a7a24804752540dfdf3177631689b90053d02b160eee257071b53f0e0cc5af27caacd26e245208959495c50f4d30e51b29e140fee3cb7f8f86192ef925e412bdcd56bcf6b8105ee1c3cade9c2239292e5336cac8501cbb4b09727a0911ca60d098e82f259927eacd5419e992ff6e2c43b917f0fdbfab80a9e2094ec6393f426913aa52812f5f536030ca0e774b95976143cbda24973e77b3fa26d0b7030a5f8e26e44e94e38041a23d2577d56e771191d99cb1c5409e477037102864d8f5614ab9dd4ae61b515e9c64714933d0dc43da63d09d68229399e882117f5521c6eda2b4de6ffd409b4f558ef8af1ad98cd444c9b0c596a5e41524c46ffd134446aea0ff2fe463bb26bfd5a100cf11f14e6dd7f38452d6315b622be373c925ab3d494b8218d2a0f2ba542587d2d1a080ebb69cc9946bb12ebe2905c9650c13bc7369ab26e1613a4f1fb64c26b6de4fee2c569a342739ae04d611bb5c8ded66e1afb4c9d1d1b8bb391c8e5268f31ea7a3d6f6d91a87e4551b6bc354863295a581bbd2ac6c3100ab187b844033d3b82f07b43d6265fa932edb45e6d82d9e2b58035d6c5ce049609053023f1d719cd46f828dd43cfbc96ec2ad2b23503b17d807d15e2ae2136101f4547a68f109979cf07d28626fc63c9e98f7e622c397e6c43b5285b345efc10b5e82aaa6c5e30c36395e4e9004ac9a4b38223f8a392953167bee9cb08d5bb1a557455ca2a0e743cad38fc70602972d9c2b97fb04bad9a5f7500d69c8c33e78f7660556048afd838144765b6b716e3bbaf8bde5374f8f268e4117b6a4ee825f2a +MD = d5ebd0d3d544e46023979d06b666f35758b69628d95abb808fa65f51f03b81bf + +Len = 49616 +Msg = af08305484d04608c43ac58d68ed0bdb5db6044184794af8fd6e90fea5894021dd3a635a8e57c25d6a574a6e74c0b576c2e2675681c6967b3b62aeb3550ef43fdc3c69298163f1d8e13cb4e10a31c5203b130208ec0b3b370ed3964d942531ff32740a6765db1c9eb353cb8d3428820051ae9bfccc307f5301290e756bb64189694c0dbd42a68bda6702571bf98d363f8b1cfbdd291cabf899ccdfd3e0aa6a06092a3cd221ae86b286b31f326248270472c5ea510cb9064d6024d10efee7f59e98785d4f09da554e97cdec7b75429d788c112f007ceeda7bdd9aabcfca562a78a09d39db03123fd722b8869e3c61e2c36469949481a36da9989437bd4edf50bda801981f163e8d75b0dbb542bf8e3d0c7f33dfb223c009001a7b3b81916bb094390c42c24a47884fc8a0410f05b2f57b67d8d9046b2ef4a8eab880c29be09326da26fe6da713758ef26ef1af16b3533aa3c14a3260d376c890b1ce2975283f9b13b795c8368b9f59b6ae8ec7fa7b9f6ebb55fae40a98d98895d0ec5e2629fd1a6c27d07afe974dd99dc6e002b9f0214237fbb0c172656311807ca408b6cd14cb6ede752c0720c6362e1faf055cfc20dca01d36719f235e8bd91cbccf2efaced7a0454c855a0c5397f221c37beb86e6647e22529d99b8101e291afd5d959a71668ac21f2efe453c246f34e40a6c75b9035772cded690ec2f0f6dd2f57f394469fb5beb4cefbb1c9072fc1d95ae9b3e2e0b5756e08160cbb2ccbcd1a6850d095aba8a2d40e5a3a4265ba2e6b146927a8251f93ff97a89945f82d528536b536a6b2ebd4479622c7ee6996e562e0f5b955f71e344641289fa67ca6d43a6929aec0db07bed50d5b3f16384d4c86659451308039c00daf9d0527e2bdbbffaab5202c4e83c6461c0e8c02fd67cd9e4c4ed780e8f89f1a880fb3104ffb6f9da160743334e756616a4295fade6acf743c2b338e57e33935758790a9ede658dcf532921bb5bcd5efa0ff424603e0bacede344ea2f483f6281e0b8639e408df834e33622cf889abb8654d7b2d9550f575da700e03e75f3fba2aa67c0a5ce96a5c566ccdb026d63f84623528f8bc43ea31d7e85cfb59ff7ab2425d5b627c0f632db2e4b9ed662cfb1b3ebe31f09f4000c97da221d072ec11d90d3a098a6c0430bf0da3102ce1114645a2f17e5a67cf9f0776a843cb59ad6af734446fca55503bda0db2b8b5be1088c936d4f8813b782fb16702ac3437caefd45e8375695f79ea455a189bd026ae2a70a17285ac44c41890fbb6425333cc0637340004b1b109a7ca9ddd9fc5417592028cd00e22aa3ac36cd8ceef6f763a19e95dc202e87488d92f7e0aaedb36ec29479ef87c2c9463960da65199d2279c8fb382d15957cf7ce73da4a6af5c2e9b570680f1b5122ac5fa3a0e482ac26f7bd05b4b36ef46eb6f3bbcb8b9898e500b8509d9c3a31c96ea58bdb7ba8988765d44a95ff8aefdefe83c74614c26bac5c3191652772d92fd5a165c4baf9e6c63cd5367671f7cc30470522d48656d27b44b7df693133abb8a9b9ee06f3051b55e50655b0ab443e2528ee5ae150f461f462c177143a2b4e062375610cd438aad9170e24ef1beeaa000ca5dc06f4f99e8a3ed514e0a298249b0b6a8b60df3319a22b43209c445594637ac232bfe2f4ecbf216925792b28c3e9a9efb98d7452ec539a4bd512a52781b1ebd9db76bb64e105c3041528044ba074879b680d1436976ffc9ebf1cbeb2f69de84342b5eec7fff08c2c8087fe8f4ebe3ce4334a6f4cbf59baa25af501b66769e8950517edacae01e548e4135a522339326097cfc603a8936d0d15561e7058c87555aef748717fac86efbc44a832c287f0870227c909f7bf8c159a9a559f4f1c16fb8cee7fc4f962c99775b678afa0fd0fce0eccd8be31308072374c5781bed735fd4b6803f58fc725c6acc34c37433ad8ac1a49759ec998f2a997d684c62cac5ae156fe75a1c74c3403ce0583583db3f3b7b108403a455b4b0218e37deb2cee0e3e2c0c354824647cc555f7ce80d4eae9676f93a90f28fa023256dda35f143ec86a572bd3671b925881e1147e5fbd521241b266108bd8e7a0a0ce3f859096f1020c54d7c07d31686fcfdbe623336b8c06bd061a274ef9b6bee3eb83953e09b7538aa19a9cf8fa591b15b2d74daa53fb4f5fe70a5db6ffe9b5623b4472a600e4356bc9eeb978dae6f2ea12726e32fb2254a0e1c114525ff31ca239fc7e67012a10263a4eb66b57947fb35742055be583af0662d8ebaf9e656d2a6406490f7edb7c507f25044ef4e42a181dc0938397a1c71706bc643d3fa31f71460c42fdfe8ae261051c339237488a7eb2789958760f355939e5ee79b84ebc0d5c78fcb0f4baeaee689ec4e39344095dd1c4a739252e622368d01af39ccabb6513d6e6d6f5edee3f162728a19d692f4be84f1da41981d62c30155a1951a9a5ff08a081be769674f99a4fef6aba2a74af62729d27c79c19ca1c202c898b6e0461b7507df5fb3717a47163798d8dfa722edcd98642b3efa593898b12928e7a4f038c810c1bf8523eb6181c67a86d7ba010a3ee6973730ef20f04b0ace2ef70ee7b149cec8ef27a52a51ad52a49ed00671b741bc748694c97931a2b4be932c47b2ecc1e6fcd7e120bf7d62841c0913b6f95ca0c20101b5afec636658013dcf77d953f7036560fbbc334f6804ecade8f0225f219f4890daca02ee5f9da01627c5e44cb5cb0c70bca00c2d86791c7496dc72298dfb511c4a42423a552ca2057e5a5c41c1e6f8f06df5d581868bb24567a47322ab80228b4e3e35af10ac0ff11a5ec999e4fd31c956e213b22ee3b807a16dadb245d4c5c72ee661b657c6efc444f8b1bce6b8c0e1bf905028472935a48d62a742219f42b6326350b5f4224b6544509e128fbeac22f026134b9805320373a8e938098a9f42a2dd8a16ad672abc628f1703a7b8fd7330cde583eb1db60c9b6afbfec23ce652c57b953f4b3d95b1e6dda5f7f54dbcbbc9ad4d38061cc9a74cce66fa175e1fcde466fb9a964e932c1761ce564226f0e401edd3d2b2a873bcd0fcb196cf98509d47c6448d553f2c153f441d8856eaa1d521b6ffb9b769bd336d1d6439b19183a936c2f68252bb6854a4ad17f5f942d776702f5a55dd09aef46c59074a87f2bfd9f9829be0536850d18ec54605f3d69baf38816b0fec2d4fe815d7233317620d15d72fba0f21eeeb7547b431210b4df468bfd3ba4dab7fa6f5afc03f5b2a8a74451af1dc7784f6422616a160af0b50eb894f4ed078e3a7be04843be42a8712fc5108ef888043285bcd42b45c19b98687fa2e1934f95c4d9cfeda719908f8a1ad21ea524692282b40531417acc5dd98d0a3a45e6e36de184ac9fa8ae65d43df909e07419e15f9a8f99ed4efd81d412dce6dfb42079931b0cf4f2cad53913176acaea9e519717f468c98ca676987acee8a3e79ef86891cbe3376b702690c8a0b093a16663e0e82ae03283da4e66de5820b00688d736e69ea7e28e5b2af371649b02b97eb9654ca87653577d1d736b59359990e4357afdedbb94cfce5ae789cd5a867749ca8ac1e7abba9be14c44ae4c67df3b43ab9b6443aecca45c2ec38e65af9d8f5a2fc7c472f0c6b5b9536113ac57ef4a19a21ea62ae1d8a0872f3e0ba7eac6562251a2d0e4d6063967db5f37f3864861f8a17b302e056738d1d4bd6e1e9c8f5024c8b28397dc079b6f4c7587ac6389074322479ea779e6f1be97a84234455721e40d6d4906632950521f6a8f41801f9e9bbcfa4e31cfe66fb010a5047375cc3fe298398ddb1c19fc92dc94bb5d6c7abc64da19cb5777c3e768b83a41769e3d0ea2e1adee605727f4b40c8a985a7928d530f21ca282f23e0d2b06be75983f5812a77240d740b4f1dd3807c2a2c336b87d82ad79404edf83457974c81d62c97be052d298c4f6a5f61a8186c37712359819cc64b63105805224f69adda560dd36fc578afc53fcbaa34142e21361d1f6563e80906a015195193004d175aa1ceb07cb07f401f0cd6397c5deb2191f8ce9615041e8fb1dbd7e46db36c11697e1637cd0f6b63027d321323cc76f6aecad9f480382b6e002a3bc79ab1ed236fb68d6e4a2963a1d65c88400fa9f827f75be7878acc592cf3caed01003ff9d5d411dc5fdc489080046f7fc92a3c983dd273a1581c07cf50f482949a89a8b8b00057ab1269b21a8af27fc0b55acc7fbfa9d9af6e1f32b6626a1cd89b1c32513b5b50a18ddab028470953f20c89a3d435e356b8d1799535eabd5e630ba027edfe4ec467da188ae23eb1b5bed79e07c028e8b2648a147875715411daf2ffcdb3823f7aa5010a8871f7536bcc1d81416b1f20b55da0d6239d7e99fde858206dcc4e973b020897f2fdfa553ec3e61a99fca2f326481ba9ddd69af3e93346eb4e5febbfcf26f9a90fadd021f64c3a51569b39c9cfd00474f0484cca9e63c348ba95df1dfebadb2728aa001d5b0e220ec2726d0a769b621fa21a1c87e521d81ff796b41b9066b7f8851c12b334b2a53923a6c51ee4513d913c75929084158c584e89f1204cd194066e2a8e4a4bdfccbac262ca6de19b9db40580374e43e6e7db07961f93fba47a382bfcfd49663e9e79e7cc026035218b6f47649229ec3cf1906ae7c5de6586727603bbe71a4e76235eda0cf75da78a0eaa48482c8a45c1b360bfa16b68522082a8408fd224cb306352e24b31cd007e2f4d52558bd7181b34314def9a998a1ab5b6289f48cfa514673b48b1371908a7f541abb2397a2bf27ced5df7d8d9d41b10890414d083a3c93603556590a787aa686c9b89bed946ef947a37e1b090facb9d071b15f3a88ef8d8904e90c7e1453290b76cffa05e33b983c223d6a726c2d36319b7cb37a62e4856cc7e59612e09e5760a643e696fb9f951ab69fe4703f5db6aa81e5e27e64b62b79d2ce9e8f59d6b214ecd6ea0769f57071f508017905b8abb9a99f548ceaded03ed9f67e4a0c76d9969edb6cedaae7aac0521849f33bb895dd970b824c71b9242a320fcdb965093e7450d3f7a03ae0b484425346855de7f584bebd0423a5ff97da7f7d0573f008412c974312c5967b1e4c6a1b6f95f8d15b5da52652a8d3fc9bce16c0adf039ee922dc6cb36d44a0158672e032dab78ef37b6dec9e652a84ab0539c7d3fc4af46920683bedc32c23df393029d194c7a9c0b2eb02a47a77f64662974f52347cc8ad13542a08b979b6b602e8c3baaef6a825623edc9ff1de5c43dae34db01201e35c0388812cd4932242eb82f717b0ab51c9944dc2b653c57f49750509141b410d1ff8eb88809ee22e2cfbe70d0d23506e555000fc11269628013ce5cba7d9a50d9efb67872d9ecfa41c3afd4dc68e4cc5709c3fd1d9f5b81d12366bdb90d393ad8013e3c55a5cc04ab9b1adfe6a79071fc382f28b36459327266c8080f89174b36e49488b30611eeaac67e06a206ce943f50901704fa08f0de2e40a04079cb1e80fa47c21d734524a9c647cd711f05afbaf3954c94d8d1499f0a8f2ade47bb0140c2c68cf765dc23332b16a8e658cc20d991bd4dd57958a91f8c021c4b8b6dbff0ce9f4dd3665d86c165593d743c989425ab667f6963e59bea1327e90aad69970b8e409923ed3fbbfef58def9d32e17629b13f65a3213e9e89408f05be3625131b8248d37b72f92f266c3323e3f43d43503386a525299a3d6794a616b8be26d08b3b16a14c80207ce229d79ecac9029823b2fa9261e5aed52f7feb80ac9de54be519486719ad2c11bccee9a4c449e7c13ea009d1ebfdd3022b62edd7ec5df6e1b3bd4cb96542a28a10bbf7da62ff436aeb9b12c825daad50f5fe1b70fa86c23e619791fca1f8fa42788170a42951ac01c504c40991f4a42e19a2030079a0edbe9928c6c57238b9d77eafe29679d99802556d8c0ac2e44e1600ef22facc24cfeea4f13998387a57b57da7cc25f6ff8e090745e9403b2201954645f9d4849aef4b2f8198e977466a690009abd7034bf472751e5a4e6d2675184436f602156bc250934a333da115487ea035f02e314771db09675d89db6a0f3b9542b617f12fffab6abbb709687f9842c8cd4790036a7c9f4ea16186f875366bb3f9a88aca5fed98306682d11fddd062042ff0b0ec3d7b5bbf6d14ca66d081252abc4beef36412b36edb352959c86768cceea9e57e28f48cd61ad5c888f485f4640b2e98fed51599807a2c7688b7e3a39d79d1b21bc58eaf1d4b3305e169ab55ea76bf2d5f3b5c971fd4074d2f34dbcef061e6bb579b903f1f7eab06f29877c6388f7c20970f5e5897692411dfc7962750377745b403bfb93715ac505f1961c1e8a5f40738b9a14a71ba2178fcd8c969575b0205a39643ba0eb0b5566964ffd5456aa535a6d2bbd959477dc728f0ebf1504cf56fc8dbf29df0c0649db3f3a87d094e0e5083e304a1988197a0c698544be59defe8764d12e1a7d528aac14e02359eb0addc3253222fca091d7a6847b8f581ce4ff44e524b317e5f7ff213ec837b6032f22d44ab8ad0583e6dd87087707abf5ea437b393f1e9fedfe8f82e57a2db085579e83d64a53fed92072f91c02147e8af7b17487aad87a3d6e2416307f6b0f198a3817f1707cad4c488042e8a31e9b86133176f8ee4a707c4fa526485e5b9b66d1d8dac2b390dc8264eeab95e28dc88f46abcab492db4952a9f9fa559f631b15336612729af751237fa47c4b47cace4d9907b9e21ef2cc69850ada7ecbed59cdb9cb0828ae19d5d89e8afd315b3b756a132d89ab1af9c366eabf0eeb69601b376aed040d755f2f49cb887670a549848bbd0682360f57f4f4e100ddc501242afb4eb54d49792f291d0d862e2fad5cc55a9d78eeac857427b971b591341ba14ec06d0b2d0342f289fc6d6c6e97fcddfe7fbe6c133402b8265da2c6705f403f4e2ed0d8ea6456111890f1227ed01932f8a225cb3bf7108bb8897c1cc36ff766f4ee7e02cd933ff29e7ea390a6018cc57b6adc7bac1c3655a4e5089dd18bc97e06a87f731eb885ffe3718b9f2e53defd4f7fea66aeccfd7eb3184d32e4dc3def4d03dc1125fdae9fae0fb0355ded96413b8a57728b2feb6eadcb53c4428adb2191a89cc62a884439c8001a3b7cf73cfb08332b89896c8a8d5aa5233934bc2b7c9a3fc7797481cf37faedd19ad39b59927e216f92f2ac6244814fc47b029ab6692f6f66124c11d5000a7ede38aaff746e65fd2b750c16f9f9ec703e70f44d034e1ae07f78fa60e0fcc05a48ff494b15f7856e651a20d3d91561b19a0252fd9a94213b1d95c6957793e62a17d6f7a8c495a61d2769750a8a01a9badf1863d104a40d284550f7d8232d429553a4fe3e0ab08fb1784a55e492248c32159970f2c8e4a54e0191d7536a329e440553a4346eb009d361a506897be5d1c1456fc1886ebeb3565840ac2bd70ac0de35ca32b279fddc2be862d120cdae421076819eba7f99fde75346bf8bef1d700ce9f1efe2b1ffd0601869fed10ee6a5c7b0b74fb082dd4daaf88958993cd478762bb025eaa01eac1bf6a2d5c6c8f4c38efbf91b93fff1694751f2bf7d45959fc302ef1af2cec33a038cf59e248242640b602f4c8b7e3f196566693b6092c9ac9c77961823c25440c1e14ba016c5374fe9e64128bf882e27ac3dd7156aacd968a8908d65a4043b87fcfd8a24c2183b4ece9617f858a42659c6e02296c21a2b9b9057bc499e1cded75de99c725003b62763769a037d5b8f79585734039164290cfbd40c0e3993a7f88cac67d2e90e10a34f91b0935734d24d0da8f3a7fe133a85920e63fa9ceffdb1304ed58cb5c2b28a3aec42ee0eb7559e8add49c932aec5ccfd0dab57f0bb47cbf1d8cde7dba602a4ce91395dc96c81337afe1db054bd34abe3d9ca6b5c7cef0f7951362c834369b9b0877b28b0dcbed6831156a58dc8eee7ec7baa7f09bc5c426dc1faa4d71f50908bd6f297ec8e754d4d20def005585b4bc1fa31da1f02f62f78300094fcc41df2058784f2a50a0c6181329cd9e3f4e39e0a5e49c6c5d7259d40a730471dba3aa7c6a01b8002d9eddac75078a85025eea76eafd98923c251536d2d720460870d77772c9e8a2c827e80c6815aa47372e42f96f6c86c624be21aa8cbae12edb5002ac030f5584b8d291b27cd2a1675632dfe2a3b00b7aafa40ba9988ccbaedcc798748b6083286835572913cd0467d8031dcd18468b22258d3fbe76cb4448852e257b8c5bf6005eb694eadd7357cb452599133dbe8a5f3ec04a53a7f4ff8e5d1a262b7660229f14dcf7723a53f0041600be4f94768d7443e397f3cca831d2dd02170eea0b9d77231eeb59aaed7194d32b09fcbd1d0913ed7db52935439fd87d8c749057bccb0af202ed0bbfbe6110051b188507f081b093e53e6e7255ade1c70fcb4a3ff23fdd1a2f78f2d93522e81447468315bf9bdccfb0803e146cc091420287b7035a605ff3db1bb987f05b9f9936306166d89bfb097617128be79c69670b36416243e12627bc41ca6c5e5f98fc7e52ca5bca168dc99c8f76595475dcae905383ad4d16a22e3997afd6fdc386c6761a089502a017889a45f40d42015d91286be874e485666fd969d4584d1bcb7fb412b68310ad2aef05c6f6082eb37eb739fc0a2998c1e5652244d270dabcf990cec95eb682b23a4555af06ea7900b2795b60436bd840a1b69ac514a1154b73a21caa6b9fb733c824005a9114cf6d9b6ff3554e9c31762ddca94725898b3bcc1c243267bf5cc647139c5 +MD = 740e25c81e510d27735af90e3f8091596092c8136edb60f4df910f7204c289d5 + +Len = 50408 +Msg = 9ad432e59a7f71adefb66e0c10e1873b5ab91c65624f8ac38a505d06d288c1f5f1a63a57a53f951347151f96a298147505ad5a5397af6f06ebb3a1f5d4117dc47b208934ae4036447b1e109dfe33382c778e14119fd445b83d85d945f480c2365fca8743608b3a89b459aae8cbb9d9aad7e3b16524c6f222a74c6fbed9df7a91c62c9d4e60278b2a1a4f5541b233e1354e359918cb8e608c5292ca282c358c1ed7cf311b591c0f6fd4877a6e5ba83716040b33f23e33753d65de524b948be025bb3aad74f173b0a00b897f386d20c39520ede9ba25bd1b7f09b96fefbae85eee99f5771fd0335404e6dece6791a46df9cb63223a2735399866aa89db4554eec09a89f9e49f64e5e48e0dcdc36e3a1d8c2cf64738eda2b7d1a33908d8ded878e5e67d998d060e4a882a9ee613adedbb946c2dbe7d1f0c7c72e9ee54ae2d7ae4a3a459c1e0ac3a6b38e31a8021f5c22f5ab291f0d1647b72c35f52d525d9441a43fca6d8a73af0303ce10802b3efc3612627a945fb64f8800c2eecf4048b3e020c17ea46a8573681db4bf0d69242f73a40f2fd26c5c88a8e947d441715ea6f85481db072acac16465f495a63869766a0ef3d15f9f5383a85a475e3a81e9fdf893d367dc67ae197670e05cf115796197c7c2d7a27545b0f4b843e500de85196f73588dba9dc9dc1cc31a4d648cce617b72fecb319aada11c97cff13b03ba99db8763e518398889d5e0f51f870ae30683750a24836bf5c48e7d4e0b5f7df4ffbb2487e68bd774b3203f232bcf1c51b15e62776c1e55a8abd8ed30abd4c9beab8cff570a6bd418e89a4206faa34d95025abfc91a790450c77a4c2a5b3163822ddf6c43e96ecbef8a82ae2314a9fb276a06d161b829e46897e12e9d820bc7fa1700ffc0dbdb2b532997b80a0259b17368f16be3bd87726aadbc190cc8ba8350c7c01e608a578f0e4648142e3c291d238f98d3c193383ac169598ffa97c41250e06b6ca54d5a435b50f227023a9e7a923e6bad8de1a29a275b47e7d967bef164d1815f01cd5a04d4da4485187630765a05e85dab216d4ce71415d54bb111acf71b9069f862ed200552ada2e387757ce566ad689bcaee9fab0421cca41c52a1923f27120ba67a41575aac04f5d6d41abee11952e256ad1ecdac2a328502087bc0bca3ebce1087d56542be2fc1fce2bc60f5caa1114d2f46d98c6dab60fa99a80d04956b82399c4899bb5287da6217fe56251fd7ab26fba449258a9bba7e8c92d1a779f5fa7a3e377f1507a1919eea4d18efb77b127c88c3b6f7ff88140657d8a935d02f896ae41e8ff05c01aa0be02523c5ffefd9a65d018d744af4e00a91f60e10267ca174046a46ddbe2c66517012f14877ba833cff0a474adb66b123b1577ac6eb71e53e35a72e2dbc8668d840932bd7ad7f81c8d52a7ebc5f5209ca3c9979daad83c721ee51b060c5a41438a8221e040f8367a2760e9e79154b4c76aa1885bbdb46c9b794f68827681a1adb3d4c524e2c8a9782680310e1bbc71ba1707118faf32f6f67d001efe2123ccf38667e632672e9b3b111c48086a139d9e3262fce1893921acb161082116290b3e8ba44cb1d71152ee709bf77e8643819a431a0ff852b337e59ed8ed945c7ca6b64bf1be4a3a5b17b7cc650418783265d7d397137d12877ec8cace94fffb02e5824db705a599f332beabe2377d47ca907c6940cf17d19d3f7ebfacc608fca510cb195fe969fbc1eb2c987a5a56fbf14cb28e7f0d6f98ddc12e05d84b5a664c6eb8384f323f69ad8a291895334a9d91dfa1c9bb932d6e2f4e0122bceb9b41df487231f1a8ceea9f56dcb59b8c0233919270a25d2af85c7b2c1fa0be6e749545e6208cac13bf867f986ef6f42b25c8d9ad48a1cb9a7869a9a4af07489b8c6b6890ebd2e73ab9453599076308d85c615178504f6eab569da1fedaddc13b8cca2f8efb8a0ce66530a99ecd853f5d4f08e13bb133ae253a004b82c7ac91161bbb8227773c82df6a4ec4f2ebe30281a5c4713d92d6f4cfcb9b8f789ffb1ff4e24549a58771b1ed72a86cdc8706b70b079ee9c71cbea672b27556278953d59d88706c4e55af01d822448aa3ca74c8c41c9c312176752ed6979686d8ae3b1ad8b644d46b0681da67242c0790dbb79b748dc93193ca83f2c3200709d3353b566f14ca6743c56ca4642068c9ebe2579ae3012ad2653d6e5c01f8cfc56047dbf22849090e20b8fac795bdfebafc09da2bd821c9fadef9c0d257c5f6a4c70ca454ccfe09b24807b2abc2a4f8c10a76cab81c95ad92472600be8f30858d4fab1de523dad33904db1cb8b57d5dc55f51aea87804de83e8ebb7876fe08367414dcf0df4866e8d9c5cc15735ef36b041c30f63b11665b309716c95c07ef81ce519403509a9e29458b128ee09a28a69f9f474519274490cf2e0a75049b1ed938338fac328ec38388003dae7fa3f61d8ce0b65dae2c69275eb5ff120d42268b463d185211af7775f5b795da8d06ec4e50a306a6668b348d53b16d06d27787467cd0d67b5a671a7f3323c3b9b53d6b978f38d0c5dede474162b2ece9f0c5c169408142ae99603d1db4d73fb264a204b79d347d22739011e1f03cf731e487658235d0d5524b154fcfff44726b37ff37fd0f089452c14b14cd80b204652a66d41fc142071cdbe0d30476fe043a9b8f85f659379ebd4469c08298a4acfa4edead9087577054e86d5759b0565da70bed7f220033f4f88966b59faca74967ae494292dc737990ed155d4e300fe7470593740ea8a04f6aecec6483311c7243d55143854548bb67566345407a6d5981050c052a96ef06ab0b454dbbca86b005606110f666299e3eb0f1bfeef400fcebb6d1b2f47f82a32f411be1c7dd787b22bbf34b4493a89a8d892b2d88415d79ed676f0dfaa70dbd6e4acab135fe544c3264a2531e724848da4b8a0edac6f5391ca34e66bbc1e2adee64fc4c7481cc9baae6e8b8e2667b21bb7498e425094ab2eff6fa6da634940d364c0b14021c23f1f2af20ed1f04d3ad97a0d23e159cd08fdddefd834893b443dc5c81986d320cd7b049f57042c1c444f53cc08d1ad629287cd7b2382153a5fa2712fa5a2457e9c54a33d0e2ec21dfa06ab4de41a369b705335dd2fcbef8fb98cd0bdfc9b5e24d3356f94db5899988285eb5960c5dac0cbea7edba517ff8279824a3ac67908599ba3d06b64899bd5045479b824d88318cad2113e2d6e2d5ac80d476dad442a661c282e8b54c9af1ba9fcbf32d75e18ec969554cd6ed96161cdb42f1f5705ab937d4bf1bd5120bdb49804238e215c818456bab152115f83ddb1ff6a186cc47528e79581c70397aee6faf40f96acdca62833ca8f93bd097b179b76602095876f6d818c4771143568faf755ea101de56f20554c565a1bde3157b4a279ff7a5881aa74baa9852903d438b6ae1cc51f80c4b3e3c86d6dd3e68de5230a1e7cc23e9326e7a710c9ed07dae760870d7d58b48d2b05c73e948c2978081136b56115428d2a03d9e507054b63501c6825007089b2cee5d03099eeb0d809a6afa8741d6a57feefda8e051cd755bc13dacc1510071be5a86bab43a382973009fc5d7e7fc0daead432758cd8b19a716d646a86e037b0b77920175950a79bc563a53e46e64cfc36da670063e1e318b8518f671987205a8e7e78dda4a028ce10db33b196f815a62928039954e075b9d8e7e22b97aecaffb0dffa63ec380c16599a2d20345d23c10ce78ea7257d6d631b58e51ec7fc3e8866c52f12f8c35b5de7c81bf2e9be7e33273e8e929f5fd500c7cc20a8731a83def8589d5292e71d8a038c858f7dc32fe6c2568dc18a2fb477256a1c3261afa1e7aebfce8c804c5b85f50ef45fb8133dc02557129eae9413b07d5b60225a64a18dd0234a268b9b1d360577f0ca6257b0ab9868a690d237f99317c774e226e18ab7a5ab978a7b7c69857befff384236908e62b1d0ffc0bf6e083ad5e1d88dcd644d76803f1e1896495a9e9dab112159e650cc5b18533ed57bf72fad2e6e57d038368bc9ca4c2a92c49db7aa7bbdc767b9db1e8e06f5152126483f78e30b4b930d5c2cafbe7b7817e2360e3df7a4fc091216a071234b0d4a79e3af5e891633beeba6a15aa512cbceac0deb7fa82e88e7f8e9992df6beedf97cb0ca86a7f9d5f9dafc31f1067beb5f290a969815c432a8733c53e907b77fd53698d719c51bf9eae346269c6a1da071621656afc7ccc3f58bf714cedf9c8987af811d3e6be4693c0d6cc6855860b2ac5d1775ec44b004754903250405d6d4b6ef55e51e22bcec9561575ad158ace8ba24f7397816d6bad1b446ceb201ce280bfffa77e0710b499ee5ed29abf2690b40bf9ceb7bc4a8b0b0d5a956015ceb4c2ee65a1baee13949fea3177d39afffe3e934f0d21cd78cadbbb21407189d940ac6ac5b19adf9aeb45da3be9ca316d7385a8dd93884d6ec789a557027204c33287b5ae7b80741d35265ecc8cf12b057d23ed24163db492fdaf4c6a3ff40f22f6ff7f6e542e4410eeabc851f5eae03e8793b090f9c48b9bd9b710b97d7a116f0a7df8b3cfd6b82c8460a79a9919e99f3f4f93c2b2bf3adfe83ba2e32f76a40de98de1ed632c58b6a2cf8cd50b00bfade0c21727c5805ad5a5977375ea6c4f861099ab99a2819e45a652d8bfa021cac12895bb4ec6ba64139e74f2c022dd7c7e1c4bb637029901602b952bb91d0fa39f8334e0962abfdf203f3eb1706d4ca34c68fea25407b52a8c9ef0f63fc62cc29f7d1a379c76233472046f3ff51e3c5c87833cf06f267862216d10b8d2300bb02762d020c01d66fc9f8a80eedcda2f2095f78110e6f35550d5325ef40eef2ef4edf0d11cbf94fdafef3e1e4e861597781e32558459d2de6efe7b46285457f8f94993a7bbd97179c707ab81ef8f54f7cb86d044eb4659762533a460d6310f1c35d0c7ce6eac475dca7f3f6642572cd2a3563db9962afbaf0beb4a398e2378eb530a09afb5b66b0c22ac8635d78be1ba8802f73e15764dfb9babd92aa0aa29f8a95bd5e6117661178815fc7b2f8c2811f213794cf9c6a4ee4cebddcebe43a6b6d14cb8ec026ade0233422ea0bae6647b7a0e5050a38ab4f9a831c490577e53c843632f3c2912265eecb77940ea093b49786a0903b330e2a035f42a19dcb8c58f7825a550d5face7ffcfc88c66d82f11e85bcffb0a967a2646ec97ac5ee91808ef81ac7c499835b07ec87c9bb95e23a6d1a5dc0f1e68d98c8cb28432edd86f9494b98e2f1f45a406943cfb89b03858bb7bee2e9420b112a4fc386ffaf5a07b440db46938366de13269b5ad1ef270b5980ebd2d52b7790db6bf06c1cd1c4a226083faa65d3818d37b24bafa21280e2185b19b41118cc9b20afca4e3730add4e2f1d11ab67ca4e642bedd44a5cf91886c98c0fd29847a8e9e8dc9b3bb46861e6fa0483e21d96187b89ee8905950e98cbadc8a148b08f1f9a9787713358dedfd2095fd8b149447d00dc4c6493950e95d8798dd90b210c35ad6024b13226135dfaa4579682b17c86dc6d32ea5c24a2189575024083b367f20a8bdbe09fe7b0e646131447bc1ee53af584c6a5c9097228eae8505d192d485e9960d688e4635c7f9e9dbd72c75927a13468301c400e25cdbf1c9eb83359568243263a306862c032ea8c7aa00b27ebc3816399d72af9630ffc5715da3bfd3a65ee27326193ac840612267558f053d9a9c5bb295ff093d6f789e2dd4a97e29c0f83a9e3a2cd084f04feb4d322dea3985ae6b9073bf8a4248c4e051d90b1d02289ebf5787b7e40c932967dbf863de1d1decea55cf3acf4f5d73307fe35ef8f77da0c5317740e1a9b9ac3cb5f0d75d32b3e63c74f10734af2de2132a7c0bbe6410ad00ae916e65f6d446be4db3eee424f818f660919b470c2abfecc40b97c9e29221e6415e86cd7e63677115ca210f5e4af39ccb196d92c0e46b41ef3a9997fd629dda7c3730949af7ad09a0abf44b693d1493f700f49477eb52970e6177c51f127f71c1d3d257e70185cc70c20f04b04eda6086e0d6c89b902470a418b8cdc2125530b48d0293fd01605e08b4a7e7dde0e3a6fd217aab96835f4332d8d31e80f29d9bc6fb47b52777eb22caec75414c939ecbbc5b66ba132541a34d2a6d33c623e7176b86f857f0e584bf49e1ddcd86f78a4366e711707c069a055575ddaa1c36903834b8bae903daab78082d77c9175d24a26f6d016b4b97b6edee43bafdfdab4772951905d4bab7ee018837a9e068650c7d4845bd070c6936c17a3c7b8be4e26b5b1f204fc7a01dbad04c990a90048f80188419bae028fb88248ba895e06c8c7a6635571f2e3e6ca068b7ba1054763d4e18a54171634bbf298b85109097eefa03086a35ea74f0351d3f7c13319a380ec4f21e65771ccf34996b091d022ef6cb83c6403548385007bfc8ec4d04fdc474634961fe42893dec66478a1650f21e618b3439edaee4f844d6a99acff0eb95fec76312645a1512570ea58aa503adc06c67b6c9c78507337d1035fa149bf0371e6ff3a240246ce6f501198d41a09e874cc7e2724b611bac20eb02aca34c882243ab5f940a47ed1656cbf7f464ae60cd732a2bb5e1d99eccd0c5a404f4a92fe21f282b6a3b2b024afcedd5629683811d7fed172733450d1ffd4e7ea5913853f0f164db874b4468df47e5465a4fc67c01d3af2928b839f30016d41701016090c97acfe48dc33a7d5dc820af4e08fdbdf51eded64cd93ecd37adf4e1a9bdb872f61be7cae03b63bc411e4e94b05a8fb361b20aa3062eba0801333f83022ea656e1453b13210c56a2138acd8b23ad0318f21da103e72142400747025f9cfcc0d925874841c2ce89cb6fce0be70a78ee5b00e2309d52494df1b449ebfbec808e563d728ddb37ea83949028a85ce756a7d6288037d3ea0f538982cc6adc7352657a83677a4402f8ca9a3f5b11414ccec626d378352c20fbe9941d3eed75c3faeca2b2069c10b661d548c7b5e538ad39dfc99c5aa71a7997869dce22125c50e29a6b23b071d5c4ce1a3cb3c982a77b304b3aed781c23565aa0f3200647f49c91f52062f589e7b0962fc2ae267812593aaf073180e2db69cdcf50bd6c1cd32981638efa5642dafc428c86f12d340da9c1519b12d5b9b706597822f0b3ff7c6a498bf344534b342a5b9706376e54fdff6cf9830c170f2ace9611e6548e6e54e152c4f9fb6cf167ad59f5aceb6a4967cc860d3b87a531cb24fc5317635bf8011135b50f6a13d40a07c62f0787a19fef83a4e3411000effcac048232b79d1ae59c5ab2a02ad8717fbc1889928694a6d9d76232102fca9853c64745d4abd25586c53a6468b83b485d5cd9bbca82b41ccb1a1660455162a954f62d0459ba8c16793e6d40a59cacc7174c823c3be6906047de6a044d0f59b164de3e444e8e3afc116a6bcdf332bd8c221d9a61533cb9ffb496b58493c4203f27c0e39c3f715f7503dbae62ee24edf622428ae1acef8169b5d58167b60a46b10250c562891e79ffa504ada5d2fdae938c5dec23a599973cb00d6634206c4da588f04c3dc7e01b1a9968021d6df78ff2c4c236bdd9a55bc727b0dc506f44958b2041f0948860a3444588242ffbdcf2726001e2f6b5bd5fb7a1624c62ff3dcee06ca85afd371ab31b3de78c54290886b0e2bf8994c62c037ca1943ee25cb25a23c2a5d3de4068bafde708b33061f4ad3cc13d82ee877bf794acc94c45044cb7e3c6ccf3ce50e53b6ad56e212b233be664900e778a8647ac8e2773cd01926778aeed805333d52aa4f08d7a7edb0948b2c6b3c4dfef2f0982c7a61669ae638d0cd3bb624aa54973980d73dff49670a5a2d1b0e31482fe2c2adfad338ab20437f4f094d572992a8a75302ce14b03f5dd37242bdbbdfc8039f544a15da8a300f2b1842e6c4395f4c9dd071d30ea9a0549d02c692154a231bd828536f75bf7c647d31ccc99361234ac3fe0c9315bdf2b961e591d56411aaf21431fb2931d36e0a1da1913eed2a466bc0e5bc584f729d52c62489ced3bdc44ffc782b8a354d6dc8b270778dfa1b30773d8d6768e75309e875c698c487d5d8fb3704ccdbaab5e068e4a668fde1bc4936e1fff60c03e59f4215d3a501abe150bf6edec465b79431b05d4c4bd7cb95fa6f5542528cccb2c52a4f5497cb65699361490cfd6d8570c769c26a0764df2fa9ec405e61306941e466cb50586bddf609a96f985d3e3cd40a5bbe0686e94611c0734b5c0d40021a65bf30cfcf293d0f1a618989ce1f0345624df72aafb127c3a5cd1e433d03c1c6aefd27d9e44caa3d2e4f3ee83757024d370815dd6a03abcec2c2601bd9c2cccc29e857777f1e4e07ad3d37bc7f2f6273f155c1289f26f9b97d19b9ecc8c54bb43d4769b088e551f5fff11c0d90ef4b3ff8faa31136633b0c409cd3bff454670751e4048de7eadb8f8c3394e451dfe43ab5bf62a3180296507211539b44b7474bcf85d1148575125ebdcd4748aa4656eb8e6ea6e32b4b340c7a41e489a035150b1ef3774f48cd21e9f885de41836ec8dbeccd19db58853dc8c2f42c90f018f6cca6f69f46193c2eb8a62501d7c49d639038a6619288fad90cb1f1d3b81ca61418cf55f100e108625430735713561c4f94d8bf2610a1f02e61af0282090d28977601da1485867ae444fc3889fc1f33b36f36e0115e8cb0674e24ede18ca9e5a76fa44bb1ddf2dadd10743b3e9a0829b7a7b8d3c9833282aa5c787b9748d9276a8a20716f110b707441ff461ff6f94885c6c85ff7877aad1f1114744d4586340b4fdd14f727bb83d25e041fd417dbd64254cd4b43734b7bf0f85ea0aa8c9656b04644fcf02ae85d1eefed8f0406941c19d72f60544e8f324296bfc75724f3d282f8bbf0031f7c44817d215e57c90e6230d95566d3 +MD = 90df9cc3a3b904415331eba9cd52750c2c5cb73cb91b42caca7eee3788fc2b30 + +Len = 51200 +Msg = 37ebe98ef52bfb240b9ad369153afe081bbcf9d7ae43e8ba336b8ac57e8a6da0a3365e3008072473bf9d6eac13e509c1619956e12a06fc696512da091a7d40232c675e737713fcf51aea6c0316c3bdbe196132b0943df2b013860105ce676fce7b88d0a167d7ec72c588b7b6465a83c9ea1d748d15713455e5d0e901c3cf646a38a09b0002dc5ab1687f350dca35c1a87cd404c0d529292082f77844203d86be0bb8a9d970a9af7baad8d050cbd9e024788eca91fbed39db930398180e393d949ad7e173d9c65498339a6ec670d049058653ad48af45cc4cbffd30c3b54cf1b290052b1864bcafd0accdf9b8e2a163134d2c982c1bba4a3dafec288e3cfd0ae1934a6f0e39122aebbd7a586e48d495167620708664d31c740bd868c1ccd5f0e94baf959e81502cb00da87330cbf149d5a8381e9eb519a8b97acad7a48c5b0c92623b861064ff1ce8455f32469381e6198c7b8abc341357d6a4c85f7fa517c4a47df728ac09a6645b0ca77df7c70cd4aacaf19c280949919132dde7993e9181e647e964ba99cd6bd10b893c8d90187a5009a23d295d43bfb4cc0e583b8052ac21651b23813bfc9912ea0c574e152f42d3f1975309588a4705196598ad93e1ab1d82954b4a18bc56e55039b6837fd893fa2bd7c70e21a5934dc2e990379ec6e8a2445dc55d57940a14e5164273f59cd58e5f6a8281e11c09536ea22821c98ac978537d7a02220d1d6552aee168a001715834596baabf7813e1c69949b23eb4b86658fd51819eadf8a13f067ca8a791cd1d53ab69d0e43f18bd72d5d93322cc1c36fbe33121f5ff01905328fc7c33d452a86468663c77fc80b0195ec1eca05a5daee339042b4f88a1f9371b472c6c5168c00e984937a134b282633dea25dde7e397b907b1e7d3d240a593e747007990782cf944fa078a7118fbfa793b2604fa15b82453209daa64475d0e95e2408319e8b5ce7460f4593a19e3831a9b363b1c5ddbcd273995fbc61ce7502b0233b1752223352e654837181d01a929f49faad422c65b8ae416ef81290b02b48e222c2b8c3ed57cf0494b928c1e11ad2da77baacd427785096aae1cd593cc356e551bc390cd5765ea41be30cf0266ae2e97d326c417c91e90d75f1f874555b88a14a7c5959a62f23976b77a4c754e35dfb7ddd1700df85f61a62b12a9eb4644caa7f8ba036b9f29c6315ff96c3f7148284ebe3239ecad50641f397ea24b46e21655352a4109b61479b9dd34972779f2f1a6a1d2887b8ff88289b2ebda2efe995668879bb93c4ebb3a585ab336f70b382205ac37c383475fa12ebddfb95b157172261597d2cb0f24f254feffaf75d224a3b407eb54cc7c8daa5483e4a79c347252d808a5f480a35987f6f09f6c6a73bd5cfbdb76a11ed78b86442b810cb703a5dec5874e8721af62e386591bd39d990b3521505e144100601b46de3f50752911ff37bb18f377de45ec4c60fc4ed8ea1717708d2d13fc9e1453a1c4a4db9e4fbe9b74cb8da14ad50c8c8f2ec944e10ee8e82ebb6a081959b0159f043a15fa1cb59bc5e035f7623fbfaa99ea0a1d81ae8692a4019e5a5edb3a4886c789675039fde87222975e86c2642eb0bd48408072fafb1a88507194c9bdd69f3418376a4d9e68c3b83b3f800605ff1dcf0917a6014b0dd77708b583ce3ea632746fee0e01a10500cba90016b4a9072847d809bb0481ae25f74f8ef290c7a087ae16f505fd0da670826a0b1174592d184e3a7e8622a5c84a30ab64aab75face50b96b217e8ea335c0605c638ed1c59370bb9ded004be428f49a79f74ec0fb296b3758f0b6b41930c7e029b55c8fa73cba7dc926151d4043c6bc8a716d7de9ae0cd3ef3ab2d19b0c813eaf12eacfb641d492b0001b2f0f699bd98e4581fd44c0c817646bdd77a71d8ed432f8d422812751a2f9178cf1800ee689ebf046cf9b161f9a7ef0a106cbe833398bf383288661b426fad8d4f570a8293629ee06856af295a58585a81f87f130e6e08f723234856e874bd0adbb2fc9e676deab6b9f22faacf12e875d1259ccea54f7294be02a16f34c427b51a33be8a0c460c4c07d51a2e7d5c0722a9fcfefd21c265d5aa2c57ae4fe95556b5e1388ea9756a6afb0856fb8fbe1d2bb1838be7a95049848fa9545b616badb753c453f266836eda3c92cd592bc0925690c42cd6667f866717827ebe91d0999f9de5f5fd6cf77f63737b65927aebcf6cefc7ca107fda8447e8bebf1f08a280d53a4b07f8e35904cc48cc08eda3c63a3475924bde1de6acebaa65fec5ee68ca22d3fe722bf33267de628c9db1ceda3c78cb2f9988682d641d068023f96aabde4e10071cdec2080f616ac30c2725ad3efe98a69a56873615a3a3161503a4f22621986def597b66641d07793d97cdc9a68f85fd3890a38928462b2fbe2bc5c509631438d2e344d1ced9e2b71748f1b6ddf33a3e597de3af03ce43d305b9f5acefdb2b71acc645d3b55fa3848484b7fa4cf25e71e766702f1003950bd2f45b304052861f6748a8f38175f1e96c91471f5a54999cc9937191b6adc9de0d2520d86590cd4aeab292ba9ae474edb5b8caad6ee095c9e74c0f5e5c9387559f946b2dc45da7fa1d4c2dae6973d5984841682af25ff7ff29d9721d6c7e76776e8965b6c681bc38e85da15954ecbcf20d7448204d9a6a477781c1564d363e4c634c36fbd3c3b50b332f1643c415d004ec999316e75694a8b98e2591678388dc6624058454ec3a7ce608b3f222b8bad5cef77095285e1d2ad746c557222dfc30605bfadaafc4f292e931a0f0d49b226d99d708247879aed5b9f2ca2fe6fb414f37373f844e13865524f206c54487aed53781834b3f6eefb248d95ba21bb60041d501f90a97a19dcd80920df7d84309148e3d0892e50687c86a45a1372926e00f200053f5f436e003e35bdc10fa99d9328853bf82d2091f1f087cc37678138ac0027e73cbcc99f7fe37939c98114fc7380c0ad1a26e3f5ec00bc7eae77045a55c62c18117879389c662837415852e7a2d01ac667a226fedb2596e3e137a83daec2712a65e8cec3e644e738d11bdfe9b19517fa593546373fddcb9e681fc97d1763bb9092a456cc0dfe1aa0e132387d105e3ccb7746ee199aa7af00bb96047310585fed40219dab43f057220a41e90c5f89fdac4a5d6b207c01d5ad4440c5ca29eed292c6f7000c58da111eb4b16e31efa6df3f3aff69e6447ac406aa96a9ece4b5b813bf8b3a499d09cd0969073468513355d6c19346c58480feaf470e0d45a13b74f2925488fd810e0f74afb9e82a24cdf61586bfae68dc92ea09b22d8c8f1ffe9db1e7e98892b5554ce2e15fd5f1cac5347df2eafd2a8d5f1aa8746b9403915da6d418c0b5a3aa8e09d6b65f9a49c3b7a5728e9baf95471404fdf64eb05da5f704dbad60ac9ac106cab2873fb1bc9023ad95c24852337a703d9cc04d6df7de594c3b2e4fb9f2996e0418ec8698a4c087c14a2687717f97e228e75afe295caae2f16513f47a45b4124a7c5ebacbacc562951233bf89f43ff85b703ec77f168c2278fbe6e57a0e7192125f4642d73f2f227d806287081bd30149b9d44fdb90029667622f9925b7826bd0343bc537c66e660f174b447860e1bb8846c3edcb639ebd213a4695f9cb471e188db7a859fcf3abae49569e676dec857b897627cb0bc1155ad6d45282d430176fde4262da2d5f41ff890ceb319d73dda804738456f30a3d68da41554d4cede62aa8549b24e211e76768e6b17379f842a24a449a0ba3ea73cfc72624b5afd118fd7e76a7c6b5bbfa7a6b6c97b97dea52decd51cf35a8e277140ffb2748777a1e3cc3211f3c12be099d0316f45023da6cd200339a718c72a5ca172903922e59648d08dc67f173788363c26e5df406391f107552925ba91b9e569f38101f5eef9a52d201288372abf6532beb4af19fa6d81eaf473d40896dbf4deac0f35c63bd1e129147c76e7aa8d0ef921631f55a7436411079f1bcc7b98714ac2c13b5e7326e60d918db1f05ffb19da767a95bb141a84c4b73664ccebf844f3601f7c853f009b21becba11af3106f1de5827b14e9fac84b2cbf16d18c045622acb260024768e8acc4c0ae2c0bd5f60a98023828cdec18ed8dc298a306c38d1ece01509f3265b5f8cbf441f0525097e8b48234bf69f65cf402c7540a023ed231ef95b222a900ea4bfaeec02c6d8b3b01648ad7a165237ca6b557b1ce287b0ea137f4ef54534070ee793695a9078ec89bcea389956878614ccbf917b61f8427b7cda870fdd92d2d297154262fc65f28ff1a54b2651afff12d6f36ee8c906107bbda399ce5e2cf0a430ad0dd86520841757126bad725bf1593c7959f16221894f5852ddad3172fef866b3321755491fd44fba009b42ec0b6c4fb9e901d7eb3b8acf70e94911f54c538bd0559c5740042b6df4a07c3e00bba0934d92a684b39592a576331e5a44672a227ccef3e595ffa1146ac1dcee0a70baa9acfd5c132b361b5ceb519984b0ee00cd2124aa8acb50c9e574fb19bd99c8fef5407faeedb28b796848bb372beb3f5bde55ed2cb140b60a53bba2df471f330208b09ffb8eda04315a06d693aa53d9bff8939ef6f3a68de6e1975f79f50b3d484665e4ee71124ed794be3a2baa7b5b918e62a095bc5d46e401a0979641fe465640e8d4d43eeba9d0cac76c7b86d22375123b988585e58f86566fd190d868eca08aa1e66932d6d3b14ecad3efd9f8cfcf2696ed42eadfa642324d941602cbaebb8639a00a17542afda32117051e4fbf243dfd255a559c49ac37c265827ba70b0bc618882336f43e1a6a729c57be478008cae6c74840bbe828c976ac628d7b6015bcb705612c277bac0727da645480a0e14fdc497956aef05c89d30f22c2c96c6dfc9dae30617e6206fbd957975b8ba0524f563289e1f5f09bdb6fd46fa6117e78e854f91d71699fcfcadfaa7d4db8fcb04bed08d68d11677b5085b295c1d414cb12456c84c669737af6c33992a5a9149fc7f9330bb291d38f6bed10318081dde8fd178f02eb0e8b7d022c8b63fdcc867546035775fcf7b32c8fee83df7cbb28372b23c71459b9566a7f64165da0a3d0e538a3dcc1b6a384f75f0263dc10e0924a0ef2ab459d0a52b7c112710c58cf72442253396b8a25d7644be166c3e7828aa62b1ca1f32f620ed969b021ec609fe926958a03cff21f08f7c8d3d3235b219fb0020a51b97b60f963ebb58f7a62a5b41104c0b28b58cfc81668825f87064e401c263421152b8790dbc99b3032c9615187f29fcc1a58e86364ad45524b5358fa2f0a3296729a3663a585e9aa922f534fefd16fb6f96cd9895709c5520cdcd24c8d107e387e520de055a3296544ef1c1ddd43b919a4ff139861f06ae5280d5aa5aaeb8f7d74ed6ea56093c2e697a30c29c4ac145aa99a372f1a03ae72495f52a40cfddedc12b6e9115aea5ea516c5a4223a8d0a0073c8b4abe3c6188fdd6d4ab627c9f4eab468fdc2a91945274ed18465a368f291a0050c9d638a31944091b35a8fd26a1ff65e2d17dfa32ef3ac412d8293b276849ad9af71fdf272363f771d0fa99996e24510e7bf731a7480cbbefff7801c0e5fd0a13dd8278162ec1687f85409a203e82d2bcdf7e7d1ae5509857c42fce80299fe06182e74a97c0c624ed5b6246e59781af9407fb28b34f7024f42d36eb92bb95f72cee379ed363daf2625b48e60d0489b23dfa57789c0dd2276b4575a01c2349171d2a58bcf29e659b868cdac1c30a02a160c078b6faa7e0696711d43447ea2108db3d34ec1bf9cfe802f601212d335445a4624829f8a600b18e9b3cf13a9787910f2fb27676fd809e7ea1a34c7306e766b2e7ae1bbb919cc888ea931d1eb2e27c6109b9a12c31e188a196a98bbe0b24cc315791d26ef01b77fe06c3011ac39a8f78d233b7651e586d14dcfc2636cb713ecabadb97374ce58498f8b2e557531793fd9207fe484a4e147f7b826502cd3785251973b23e2b62b7fdc74a10fce9c04f97511dbffe3f2c46887c25904b99df69e97b416bac18fadad67b71cc320eff8def185d41ae8558cbdae6ccee38b8cfb2bfe92d0aa99815b3ca1d115f21493b13adeeafce81a23c6b1bc15fc8f2b171284e6a1fd65c351b0c82b31112f022ddaa78dcfbac9f203eeef415c566a00c2c933f06ff18ee7674aba548592dc8214b1af8e929242f87c81b0cebe8106b5267ba39c5b51987e38858dce1d1f8d0cfee2bd61d217e5a5d41bb0c4aaf0e7b0a8c66e5b0291e4d05bfddcf8861bb31b32ea5ba80cb02472c11969b3b02a7f7bc025feace44726b6382012544f1bd1256744f4b1b0ff81f7b9f7462c5c92507f1316df228ec5c0786378b871e69479c3e26f232f5d6a709d3551d08f0ecced52f8158a2c40a234af448449c1cb1a1f6f5ae56171606582ebb9a5836c454eb86015ae7a4ac87105b371bf40d49b1134a037243a0878953b5bbd6ef944ae7c345ec24e4a0e8496b62d71a6381aa52e5bdeedc81784f45e0c75b72a8c9898ea0387a47153d7e3a7c895aab58a1497a5e794052d7457624478c24d44c7e8932c887322b422478418af64a389c152d12c7a6803e0fb0050dcf2b9d65a35a53b9845b9c3835fddd45dfd12e28f8845e03686b3707ef6003e7c1cd4f8d7406ee0d1cdc41d7b56fb630c1438fe33196e53389f1ec1540fe789c6599c0b589296214d831a86e89220ae97974f4d112f4c98c726027d0c9316d1303b87a43a86cb8b800835a677abfe1584e8be55a624612f56bdf71a054a2e834e35105a19a77f7dfdbf9dd2850ee44658ab0eae6e833c855bb9650eda7f8f4e74d8de73526f12773b2bcbb1bd35639f8730d8cdd6d64f496abae4e1f8cdc96148894aa691683515bcdf37ba6caa0cbf953c752a7b9819e9f834ff39ec8f6d8a3dd8dd5a431d47c7f74c7a633ff73ff507009c5ac9431cc588ba0c6d226edc17c94a0f14d3e8db0c7ef60c3293878dfe513f96b54c61c88a90aca4f246d6a5988f5f785ce0655f51b85e55af03e5772a083bfcf0816ebd97a4af416fa6414a9ad47b7198e51d55463807ef4f0d9b7c06a0a84762e4e46c8b39147a4bdd594b8d4d40b36f5e6b4d48726551890d040d229ee70ea3034d45b3c28eb80d686918fe6e219636b8f9b7e6fc08f4e3bed9bafc778aab274913e9cfd570732ab3fb434c9ba0928581232580495571e56f6705f2af05b56642c2b93df65c443a6caa5b167a4040d2438206d2cefd3114ab466eb3c9eaa5e66cf4447c89c493a2eee0b0ea6e7329b37c90ec2d0142bae7fef265ae3c9c053e44031c0a142bf9faa728e5170cdba59fa8da361d94d887d5d6f58b409bbc4bd4548990653a04dfb841fd784ac9cc4cfd34c88512de212074dfba30295badf22f1af2522c5fe1cd423bd8eae429d7a862bcd649ab61bf0d3b55daf4b6f0f390c503d7c1bdea453b5ef145bd8191802056bd9e0455a404b6afe5b25977f02f902caba46f988d91b2350ebe4091b5584d4f938a45803984a5291beadeeadda488dc7ed2dc4aae69ca8ae0bd4492f9b297c3fb257de986c1615d44dee59e1e14d34af9fd7852b13fdcb713dd1a03d341884a30ea1dc0104d63a31d291df035d317fea98ec44f5a86715014783172e667a748f162c5c26a8b34a0f133d89fb971bf6e0a01507efed010cc7f194b5e87a77d56a909d65efa0d5ccd6da9b5eb1d73422f97ffad8012af43a2905a98354b8362e9c459f0044336348eded53660d65a38a9efc42be13a6672790496d875a67e0078dfdd8340dab8547be140ca9f88891b635e195c20daa8359658785cbe3d09ce8a580f009324e6550b0196e305889262f28f49dead77e6f5a0e859c57d53c935a4c9590879b6528eb2bc3230217b0897cddfeff405a6a54b2f50c58311af1ede4ea0660b73037f9a097d9d0271b45e325bec666cc7cb65ae780e361639838d10fe79907a0da0efef85d2420a84e905bb33116789526a9a88319d460f539586762ab172e4a7f305f7ae36cb88c96d91aada0b4dda3418c670e27a5fdede39bd8659e477cbe08e645af927843dbdd67489b72693efeb3a7be0e121fdf5580474ca028f39a035e78d81dd212679d0a830c050ffd43af6642d60d410aaf34f7a5ea9cb2e12f21672e3f4e0c00ccdb05758e74df3893bd40a5d7921e2e149330fddbe0a2dae4210d50a3caa60b1b9db685f7704ae2d7302b18e8261052b779139747f462a6610a37252b170afbfce905fb6f7fb8c2b6100ee231507f403fee88ba5561580d4de4cdf600bf9e9816c9da1e1d2b91a1d966d04cdb98d3be55fb77af2daeeed750b8b60b494accaa12441d372afb3d47e7395b9e0e867595a1a6c8bff8638bcb138ddcac2f3efbf89762b68ebd77247c89929620f1a3cb8dcaf9632fde0996b33e6b2621da25924b4e2c8d6bff28ae0867786919ad763e6d79fc304a06277955795a7cb17186fb6bdfa98a16189544b228f3bcd3698737ff55b6185799459b796a63c6a61cea9d20f1e296d62f474c43750b77944e5f1c09072f019dbeeb64e9bc8dec4605d8e0322cdd97f56cc43084f5c983a584855654366fd5659ea23c6c15e1d7da51d82c683aa477b9f896563a5134c64e32814ea88b7f7af760f18bc91e656da92b72e98bc03f1c6bfb442830305529d681dc6bccae66da9b2e61b9c97e2397fdb92f7f6369b470529c570c2d3b329487981d148a462cdb992d792e34dd233e1c239657b8da0d59b804566cf81ad5f0a7a0ccb3a8fbda673887c153d2e56c484f9230d752be52c1e35bc9af5a7446237fc072afef777665c264c18e6a3c059fde2e8368f9bb898f1cc8393d1bf18b1757219670275f0bbc7deb0248c68af929111e19737479bcabab732d7e033aaeb277eac05e185e9e56b2450beaac784dd0308b7a5e8ca1f2fcd8852ddad9f7b7de264478e1891a391aa89964dae5ad0b7a829c2c9209db346ceb26c1b967cfac82ad574761443be3f0a910968239d23b11507ab978b3ce89e22b7d7283736b9786544ab4460f +MD = 33b6229592ca719e4e46f35b287617fedadd3b7c38be3c8c1c9f446d2d9085b3 + diff --git a/vendor/ring/third_party/NIST/SHAVS/SHA256Monte.rsp b/vendor/ring/third_party/NIST/SHAVS/SHA256Monte.rsp new file mode 100644 index 00000000..047161a7 --- /dev/null +++ b/vendor/ring/third_party/NIST/SHAVS/SHA256Monte.rsp @@ -0,0 +1,309 @@ +# CAVS 11.1 +# "SHA-256 Monte" information for "sha_values" +# SHA-256 tests are configured for BYTE oriented implementations +# Generated on Wed May 11 17:26:03 2011 + +[L = 32] + +Seed = 6d1e72ad03ddeb5de891e572e2396f8da015d899ef0e79503152d6010a3fe691 + +COUNT = 0 +MD = e93c330ae5447738c8aa85d71a6c80f2a58381d05872d26bdd39f1fcd4f2b788 + +COUNT = 1 +MD = 2e78f8c8772ea7c9331d41ed3f9cdf27d8f514a99342ee766ee3b8b0d0b121c0 + +COUNT = 2 +MD = d6a23dff1b7f2eddc1a212f8a218397523a799b07386a30692fd6fe9d2bf0944 + +COUNT = 3 +MD = fb0099a964fad5a88cf12952f2991ce256a4ac3049f3d389c3b9e6c00e585db4 + +COUNT = 4 +MD = f9eba2a4cf6263826beaf6150057849eb975a9513c0b76ecad0f1c19ebbad89b + +COUNT = 5 +MD = 3ddf05ba8dfec982451a3e9a97695ea9cdb7098c877d0c2cd2c64e58a87754d9 + +COUNT = 6 +MD = 2cc3fe501e3b2e33e60407b0a27025735dd04fd7623bb4fceeebae5cad67ad4b + +COUNT = 7 +MD = c534802a459b40c792e1fa68e54ceab69e333fbeeecad65fb124d2f3cc1f1fc1 + +COUNT = 8 +MD = 8986e95d85e64822287c78cb7a714339431332182107109d57827776c6cc930e + +COUNT = 9 +MD = 72361401c670d07f1151a95e2ee914665c2bdb1228581833c7dc53b89c01c927 + +COUNT = 10 +MD = 124c443bad9d955e084a3961b079c43c59b5e0d666af38f2f37846e85369a618 + +COUNT = 11 +MD = 81914b78674a2a6204eef78ff51369526bf0c2e121cd364eb40a8435479dda14 + +COUNT = 12 +MD = 8eac9d963b44021b70a527ea07420b03f51a998d0d6cb73ad4cb7fc688b4d174 + +COUNT = 13 +MD = 0427263b4dd3ebfcb7871939dbaca5ca94e794f748c02920c9759dfa554ea534 + +COUNT = 14 +MD = 3e9d754f2ec273b0056c2fcad2e891aaf9616fe74005d36cbf5ccba2e037b5b3 + +COUNT = 15 +MD = 986b6594ed96a819e49edb9f65db2ea52168973d7e18ae9e0b8869a8b5dd29a0 + +COUNT = 16 +MD = 117578126a35176a00f8c0cf999442df0890737be1880f06e6a7270959c114c6 + +COUNT = 17 +MD = fd7f5574788d8ef64b83333ffb62e4cd3311e638db0c514071c19b84e9117afe + +COUNT = 18 +MD = 19db7ba6e3488a9e935af33ffb912d60c9d3b98a0be1d78e0b374dcb5274a7fb + +COUNT = 19 +MD = 52519e6319505df7a9aa83778618ec10b78c5771bac50e8d3f59bc815dabfb1f + +COUNT = 20 +MD = 434d7795fc7510af04b613e120f7f48e6d613ec056ae9fbc7c869b87c1dce63e + +COUNT = 21 +MD = 020324de7f6763be57bc4a6a0960258ea401ffe40d68f854e82ccfa9e0612ff7 + +COUNT = 22 +MD = b87c7fd0ec4cd35fab077b64d00917ad06aaccb095bbe4603466644ce6cbce18 + +COUNT = 23 +MD = 01abbd12b2b476b2d540d0c47edcb56263ea658a8080a8f08dbb313942562f00 + +COUNT = 24 +MD = ce95bb2bf2d5c91402e13ed5271615607f39e0678aae776d18a78351b90b5838 + +COUNT = 25 +MD = b81af264b0bb485f6656be91478f7b96c324fe262fcc366d9ce3edd44ccb85d0 + +COUNT = 26 +MD = 9e2ad901200ca524c91373f7b5eda9cda142353e763862e350314f793a0b700d + +COUNT = 27 +MD = dbfabc7124338d6845f083cb1bbdf7b4060274d8e0e98d08bb7ca3779059b45b + +COUNT = 28 +MD = d93c2cd61f5476ea08d85f741720ab2ce5c4e38cd8254758238155fd68ea7723 + +COUNT = 29 +MD = 232d9c3b583e297439c859150738e1b1d530812d63a9a2c1cb8e40cb50a2f27b + +COUNT = 30 +MD = 8b9c858bd135138d9023a0b5fcf3f12ebbc3b7f721ee0b44be1871187f21f506 + +COUNT = 31 +MD = 05cedbd568ce9adcf5022999b8f3a28995a910c572375186da5febd775d62b79 + +COUNT = 32 +MD = 24282cba8f5dfce7e423a103488a9a924080d549853c699159d27816dbdbe5d9 + +COUNT = 33 +MD = ba6e3c38128f93f288e781af8a13e7ce5120c2a43a6d1c0d4edc831247350079 + +COUNT = 34 +MD = 706fffec5b69f5ef5465b6a8663c302143af743c6b7cd5fec9f3fa9bf9b2e285 + +COUNT = 35 +MD = 6d32c55c005eea65dacdf0e90f436943d0d0acec3c2355c36e2df1a86d1a11a7 + +COUNT = 36 +MD = b353f425293db464ad814177ea9689f43054bcdbaf75675e918b78a82ca97a50 + +COUNT = 37 +MD = c3fa9993130b3c95d9aed30243ba902035933d18adf5e21d2567674769062e81 + +COUNT = 38 +MD = 1e77e07988ebd618740c2f89a7bcf0ae2542279ea8895b39aa70ba8bc37ee00f + +COUNT = 39 +MD = 063927892a0b095be7d21987ff8157cd4c674c1cd01ab9f0834824e8efbcf938 + +COUNT = 40 +MD = f43054c280f05371cfbac776d43d6001f71350d898677f035aa8f7e5bd7b3fa3 + +COUNT = 41 +MD = 2427934b28c7a9c2b18a5b7e996351aa567523744f60d54dc35bbb61f56f6fd4 + +COUNT = 42 +MD = 3633976d174279161e13b49e5866c144ce8c1d17ec1901ad56a02c900273fe11 + +COUNT = 43 +MD = 5f9788660d82c80155a7fea91896be3be2eb6a7b2ce963f3804cd09da5ac0c8f + +COUNT = 44 +MD = 097ef57de6df98c29346e67e7f676569ad402f7a1c88d1cf39ce2d44fd706f72 + +COUNT = 45 +MD = fedcc810c74706a27fc0b6663ab2f9de0761089682dff1279fcd91312af1b8e3 + +COUNT = 46 +MD = bd5d61fea8d23089f3f30266b1daa636a352e49476526e71cc0735cbd17054fe + +COUNT = 47 +MD = 5ead027c03d7a55c17f0c783b6d77670cdb8942772077d09dff9a46ecd527bec + +COUNT = 48 +MD = 7a06eeea07ca9eb94a98a5e9f00b7efd8de9843b6aa888822c3dccf803637732 + +COUNT = 49 +MD = 44b6a895058ed3f31a5549407af8f788631f8a6eb8c0a5f2e15facc9190b5672 + +COUNT = 50 +MD = f8a58bff4b54aaebe18fc3f0bb1d24974a125530756dd4a0f15628c35c02ea1c + +COUNT = 51 +MD = 3bf2ae5408399aba59f42e5bed35a00d038fada16013ffa5da9e8b7207f6012c + +COUNT = 52 +MD = 31d33c0275986b06f6dccf570d1064c7b36e1574cc4371d4bba2e55321d75397 + +COUNT = 53 +MD = bda59cbd65e87a57df3f03c89e4d9511de71da05e2eee0560948696b37615f8f + +COUNT = 54 +MD = f431cc1817569e92c8ba11ec4741e6dd2e361156575af7b482587ed78e9fb7fe + +COUNT = 55 +MD = 1b3b3789a32165f725167da6f5ef89d95de5992783961440fce67b66c3351ea6 + +COUNT = 56 +MD = c9873a09c079ca7f477b5601519ce51896c2a35a28fe05fe8b13e990813c6634 + +COUNT = 57 +MD = fb16cc865ddcf513be298c7d514033ab3fae7a80b285d2b43e82363342e498f4 + +COUNT = 58 +MD = ebaebc261b327f8be24026e32099a6b15927c54dbe390b72756f3f6362ea3b3a + +COUNT = 59 +MD = ae5a4fdc779d808ba898966c8c14a6c9894107ef3e1d680f6ae37e95cb7e1b67 + +COUNT = 60 +MD = 5a4a67451c197b038c540878b6e7bc6fce3eea9c95795d611359703d6cc7ca02 + +COUNT = 61 +MD = efb075aa051070a6b2303e026f81a5262a6e64eabb270ec5e13fc6efa3529f6f + +COUNT = 62 +MD = 8ff3df1a5cd0840bce61520f1e5645ce272a37b884c1750c69a957134c1a20d2 + +COUNT = 63 +MD = 8fbd86567c20dc3ea9948dd5ea6f5204028c4ba258c35052994e7c86de2d7701 + +COUNT = 64 +MD = 670559572a74e9af0513a3f9243bfbfd5805b837705faedc3c480d67a92bc124 + +COUNT = 65 +MD = ef2ad8656fac9c593d301fcfac77a7815d50b42526d3a44e1573316a25b05904 + +COUNT = 66 +MD = a3484a7a6cb5c941e15346a3ac4e09e99a5189cc96a87104d196af3c43cf995e + +COUNT = 67 +MD = 966851a0ef41f8d8ff970f4340a8dae8eec4f1999f5fd4f6cbcfa372fbf85495 + +COUNT = 68 +MD = 8e1559cd4431febfa15662a2ccf2cac82f5401b2657551480bb0e3dd2111032c + +COUNT = 69 +MD = 5f535e2e7351cb8caf0070166218238a843c17472cea2f5911008be5d7fd6ba2 + +COUNT = 70 +MD = 86ac4ea15f10c264b158058f5c13a36a87ac72f840071bbc45399b36823a5709 + +COUNT = 71 +MD = 5c0d3fe289b2aac7d1bbaf57f4154b8d10875cffc9d8bd2402255ed1615f1d5f + +COUNT = 72 +MD = d7d808366d0c8b76ce3e7ab80ea11b4e2f8758f9ff404a3aafbf5b0cc191adcb + +COUNT = 73 +MD = e0768536856d1d7399667d6fd2c32f72416eeea1c40a313ee6edc910a5c3b786 + +COUNT = 74 +MD = d670923731b3e598f5c4db4c7e57fe2275cc6c49b4bf67cb91d520846aec256e + +COUNT = 75 +MD = 2cb0bdcc305ef3b3d6b7265ab62bee555c524102679da122424713a9a01d69f6 + +COUNT = 76 +MD = 5acdc323fe067a4b915ee521ac8eb81bcff4e205d53e4e7f9a69d436035cc5ad + +COUNT = 77 +MD = e634c43558d12c2a8710f2d6f10a86411cfad5a014e6b6cc159733c8ccece283 + +COUNT = 78 +MD = 4a05f4bc3fcaf50e6d0916d7e7024b0ed22e9a3c413ff4bbcc0922d2326dcf6e + +COUNT = 79 +MD = 17c9d6029e15d3fd84e6809c5ef8a279a040f49ada91601a3ba4572cef7c08bd + +COUNT = 80 +MD = 1f21e137da2427536758409f3fbf5842589c5f587f0b9d2d10430f840faaaf45 + +COUNT = 81 +MD = e3d38cff8a8d7fc00693dca5e37b03e7b10dafe4926023e26d937106ddac6a78 + +COUNT = 82 +MD = cd749eb05c67038fe837910310b3b4cdda190f6235fa970602f865bec1b61a1b + +COUNT = 83 +MD = d596ccddea01b4ae29b68b0e8a191007f0c89a1016c380b49786f2d4fac4c43d + +COUNT = 84 +MD = cbccb1ff23e33c59dc4c858093c9e215c3759acfe6bc84ff75940b59b25a4e40 + +COUNT = 85 +MD = 7214c134e9a963d6c43969d3ef44ece825dd9cf35bda5fcce92a6b9d0d3fd1b8 + +COUNT = 86 +MD = aceaf5b775779621319f9ab5d4d370a3359cd6553ed2328cdc9dbab5b68840fa + +COUNT = 87 +MD = e8123acb0a2fb62978d3811b31676975542993932108ab14d487ad7875ddef72 + +COUNT = 88 +MD = 660202a436fb05c3d59be699734e77c9750c906c8597ca213d064853ecf8c9f3 + +COUNT = 89 +MD = 4752b0a5ec3f1fb295d5bfa98fa63a0ba38a02a4c1e1f73b0c4d4e88a07e0317 + +COUNT = 90 +MD = 1e24f1467c36b051af3241fcf8c2c868b86dcb8e4669931878018e9914129b42 + +COUNT = 91 +MD = d1c3efc99d9487e147282d811ab932d4a24362d09ac909f4854e783887068891 + +COUNT = 92 +MD = 7dc455cf6f8b2042b6f0f368c44f18a080e5d3912ce3cdaf7142bd61ae50d02e + +COUNT = 93 +MD = 4b991c15789084eb1d6c1d7ce8f0928df4d3931c0c22c571f375849b9a6c2b71 + +COUNT = 94 +MD = 8b78f95a007cfb0bd054a1f5d962cd8d927665f79a5ce9e0fc31105e57b8460b + +COUNT = 95 +MD = bf305423849cf773fc54206d8ae3c000c3e8b359cba8364581d1f91b0a201032 + +COUNT = 96 +MD = 47006af96cff3843d3ed53bdedb167490d7bfefd93ae3e9ef473cb53aa840fc0 + +COUNT = 97 +MD = c53cf5026162021fd2345dbad7c53d3a3df47b5bdff8cd34a0ccfee06dbb7328 + +COUNT = 98 +MD = 3326899b575f93cdaff757f8ab7c3996a2fe930450d5002d4575f4e4cc4b4360 + +COUNT = 99 +MD = 6a912ba4188391a78e6f13d88ed2d14e13afce9db6f7dcbf4a48c24f3db02778 + diff --git a/vendor/ring/third_party/NIST/SHAVS/SHA256ShortMsg.rsp b/vendor/ring/third_party/NIST/SHAVS/SHA256ShortMsg.rsp new file mode 100644 index 00000000..09b0aadf --- /dev/null +++ b/vendor/ring/third_party/NIST/SHAVS/SHA256ShortMsg.rsp @@ -0,0 +1,267 @@ +# CAVS 11.0 +# "SHA-256 ShortMsg" information +# SHA-256 tests are configured for BYTE oriented implementations +# Generated on Tue Mar 15 08:23:38 2011 + +[L = 32] + +Len = 0 +Msg = 00 +MD = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + +Len = 8 +Msg = d3 +MD = 28969cdfa74a12c82f3bad960b0b000aca2ac329deea5c2328ebc6f2ba9802c1 + +Len = 16 +Msg = 11af +MD = 5ca7133fa735326081558ac312c620eeca9970d1e70a4b95533d956f072d1f98 + +Len = 24 +Msg = b4190e +MD = dff2e73091f6c05e528896c4c831b9448653dc2ff043528f6769437bc7b975c2 + +Len = 32 +Msg = 74ba2521 +MD = b16aa56be3880d18cd41e68384cf1ec8c17680c45a02b1575dc1518923ae8b0e + +Len = 40 +Msg = c299209682 +MD = f0887fe961c9cd3beab957e8222494abb969b1ce4c6557976df8b0f6d20e9166 + +Len = 48 +Msg = e1dc724d5621 +MD = eca0a060b489636225b4fa64d267dabbe44273067ac679f20820bddc6b6a90ac + +Len = 56 +Msg = 06e076f5a442d5 +MD = 3fd877e27450e6bbd5d74bb82f9870c64c66e109418baa8e6bbcff355e287926 + +Len = 64 +Msg = 5738c929c4f4ccb6 +MD = 963bb88f27f512777aab6c8b1a02c70ec0ad651d428f870036e1917120fb48bf + +Len = 72 +Msg = 3334c58075d3f4139e +MD = 078da3d77ed43bd3037a433fd0341855023793f9afd08b4b08ea1e5597ceef20 + +Len = 80 +Msg = 74cb9381d89f5aa73368 +MD = 73d6fad1caaa75b43b21733561fd3958bdc555194a037c2addec19dc2d7a52bd + +Len = 88 +Msg = 76ed24a0f40a41221ebfcf +MD = 044cef802901932e46dc46b2545e6c99c0fc323a0ed99b081bda4216857f38ac + +Len = 96 +Msg = 9baf69cba317f422fe26a9a0 +MD = fe56287cd657e4afc50dba7a3a54c2a6324b886becdcd1fae473b769e551a09b + +Len = 104 +Msg = 68511cdb2dbbf3530d7fb61cbc +MD = af53430466715e99a602fc9f5945719b04dd24267e6a98471f7a7869bd3b4313 + +Len = 112 +Msg = af397a8b8dd73ab702ce8e53aa9f +MD = d189498a3463b18e846b8ab1b41583b0b7efc789dad8a7fb885bbf8fb5b45c5c + +Len = 120 +Msg = 294af4802e5e925eb1c6cc9c724f09 +MD = dcbaf335360de853b9cddfdafb90fa75567d0d3d58af8db9d764113aef570125 + +Len = 128 +Msg = 0a27847cdc98bd6f62220b046edd762b +MD = 80c25ec1600587e7f28b18b1b18e3cdc89928e39cab3bc25e4d4a4c139bcedc4 + +Len = 136 +Msg = 1b503fb9a73b16ada3fcf1042623ae7610 +MD = d5c30315f72ed05fe519a1bf75ab5fd0ffec5ac1acb0daf66b6b769598594509 + +Len = 144 +Msg = 59eb45bbbeb054b0b97334d53580ce03f699 +MD = 32c38c54189f2357e96bd77eb00c2b9c341ebebacc2945f97804f59a93238288 + +Len = 152 +Msg = 58e5a3259cb0b6d12c83f723379e35fd298b60 +MD = 9b5b37816de8fcdf3ec10b745428708df8f391c550ea6746b2cafe019c2b6ace + +Len = 160 +Msg = c1ef39cee58e78f6fcdc12e058b7f902acd1a93b +MD = 6dd52b0d8b48cc8146cebd0216fbf5f6ef7eeafc0ff2ff9d1422d6345555a142 + +Len = 168 +Msg = 9cab7d7dcaec98cb3ac6c64dd5d4470d0b103a810c +MD = 44d34809fc60d1fcafa7f37b794d1d3a765dd0d23194ebbe340f013f0c39b613 + +Len = 176 +Msg = ea157c02ebaf1b22de221b53f2353936d2359d1e1c97 +MD = 9df5c16a3f580406f07d96149303d8c408869b32053b726cf3defd241e484957 + +Len = 184 +Msg = da999bc1f9c7acff32828a73e672d0a492f6ee895c6867 +MD = 672b54e43f41ee77584bdf8bf854d97b6252c918f7ea2d26bc4097ea53a88f10 + +Len = 192 +Msg = 47991301156d1d977c0338efbcad41004133aefbca6bcf7e +MD = feeb4b2b59fec8fdb1e55194a493d8c871757b5723675e93d3ac034b380b7fc9 + +Len = 200 +Msg = 2e7ea84da4bc4d7cfb463e3f2c8647057afff3fbececa1d200 +MD = 76e3acbc718836f2df8ad2d0d2d76f0cfa5fea0986be918f10bcee730df441b9 + +Len = 208 +Msg = 47c770eb4549b6eff6381d62e9beb464cd98d341cc1c09981a7a +MD = 6733809c73e53666c735b3bd3daf87ebc77c72756150a616a194108d71231272 + +Len = 216 +Msg = ac4c26d8b43b8579d8f61c9807026e83e9b586e1159bd43b851937 +MD = 0e6e3c143c3a5f7f38505ed6adc9b48c18edf6dedf11635f6e8f9ac73c39fe9e + +Len = 224 +Msg = 0777fc1e1ca47304c2e265692838109e26aab9e5c4ae4e8600df4b1f +MD = ffb4fc03e054f8ecbc31470fc023bedcd4a406b9dd56c71da1b660dcc4842c65 + +Len = 232 +Msg = 1a57251c431d4e6c2e06d65246a296915071a531425ecf255989422a66 +MD = c644612cd326b38b1c6813b1daded34448805aef317c35f548dfb4a0d74b8106 + +Len = 240 +Msg = 9b245fdad9baeb890d9c0d0eff816efb4ca138610bc7d78cb1a801ed3273 +MD = c0e29eeeb0d3a7707947e623cdc7d1899adc70dd7861205ea5e5813954fb7957 + +Len = 248 +Msg = 95a765809caf30ada90ad6d61c2b4b30250df0a7ce23b7753c9187f4319ce2 +MD = a4139b74b102cf1e2fce229a6cd84c87501f50afa4c80feacf7d8cf5ed94f042 + +Len = 256 +Msg = 09fc1accc230a205e4a208e64a8f204291f581a12756392da4b8c0cf5ef02b95 +MD = 4f44c1c7fbebb6f9601829f3897bfd650c56fa07844be76489076356ac1886a4 + +Len = 264 +Msg = 0546f7b8682b5b95fd32385faf25854cb3f7b40cc8fa229fbd52b16934aab388a7 +MD = b31ad3cd02b10db282b3576c059b746fb24ca6f09fef69402dc90ece7421cbb7 + +Len = 272 +Msg = b12db4a1025529b3b7b1e45c6dbc7baa8897a0576e66f64bf3f8236113a6276ee77d +MD = 1c38bf6bbfd32292d67d1d651fd9d5b623b6ec1e854406223f51d0df46968712 + +Len = 280 +Msg = e68cb6d8c1866c0a71e7313f83dc11a5809cf5cfbeed1a587ce9c2c92e022abc1644bb +MD = c2684c0dbb85c232b6da4fb5147dd0624429ec7e657991edd95eda37a587269e + +Len = 288 +Msg = 4e3d8ac36d61d9e51480831155b253b37969fe7ef49db3b39926f3a00b69a36774366000 +MD = bf9d5e5b5393053f055b380baed7e792ae85ad37c0ada5fd4519542ccc461cf3 + +Len = 296 +Msg = 03b264be51e4b941864f9b70b4c958f5355aac294b4b87cb037f11f85f07eb57b3f0b89550 +MD = d1f8bd684001ac5a4b67bbf79f87de524d2da99ac014dec3e4187728f4557471 + +Len = 304 +Msg = d0fefd96787c65ffa7f910d6d0ada63d64d5c4679960e7f06aeb8c70dfef954f8e39efdb629b +MD = 49ba38db85c2796f85ffd57dd5ec337007414528ae33935b102d16a6b91ba6c1 + +Len = 312 +Msg = b7c79d7e5f1eeccdfedf0e7bf43e730d447e607d8d1489823d09e11201a0b1258039e7bd4875b1 +MD = 725e6f8d888ebaf908b7692259ab8839c3248edd22ca115bb13e025808654700 + +Len = 320 +Msg = 64cd363ecce05fdfda2486d011a3db95b5206a19d3054046819dd0d36783955d7e5bf8ba18bf738a +MD = 32caef024f84e97c30b4a7b9d04b678b3d8a6eb2259dff5b7f7c011f090845f8 + +Len = 328 +Msg = 6ac6c63d618eaf00d91c5e2807e83c093912b8e202f78e139703498a79c6067f54497c6127a23910a6 +MD = 4bb33e7c6916e08a9b3ed6bcef790aaaee0dcf2e7a01afb056182dea2dad7d63 + +Len = 336 +Msg = d26826db9baeaa892691b68900b96163208e806a1da077429e454fa011840951a031327e605ab82ecce2 +MD = 3ac7ac6bed82fdc8cd15b746f0ee7489158192c238f371c1883c9fe90b3e2831 + +Len = 344 +Msg = 3f7a059b65d6cb0249204aac10b9f1a4ac9e5868adebbe935a9eb5b9019e1c938bfc4e5c5378997a3947f2 +MD = bfce809534eefe871273964d32f091fe756c71a7f512ef5f2300bcd57f699e74 + +Len = 352 +Msg = 60ffcb23d6b88e485b920af81d1083f6291d06ac8ca3a965b85914bc2add40544a027fca936bbde8f359051c +MD = 1d26f3e04f89b4eaa9dbed9231bb051eef2e8311ad26fe53d0bf0b821eaf7567 + +Len = 360 +Msg = 9ecd07b684bb9e0e6692e320cec4510ca79fcdb3a2212c26d90df65db33e692d073cc174840db797504e482eef +MD = 0ffeb644a49e787ccc6970fe29705a4f4c2bfcfe7d19741c158333ff6982cc9c + +Len = 368 +Msg = 9d64de7161895884e7fa3d6e9eb996e7ebe511b01fe19cd4a6b3322e80aaf52bf6447ed1854e71001f4d54f8931d +MD = d048ee1524014adf9a56e60a388277de194c694cc787fc5a1b554ea9f07abfdf + +Len = 376 +Msg = c4ad3c5e78d917ecb0cbbcd1c481fc2aaf232f7e289779f40e504cc309662ee96fecbd20647ef00e46199fbc482f46 +MD = 50dbf40066f8d270484ee2ef6632282dfa300a85a8530eceeb0e04275e1c1efd + +Len = 384 +Msg = 4eef5107459bddf8f24fc7656fd4896da8711db50400c0164847f692b886ce8d7f4d67395090b3534efd7b0d298da34b +MD = 7c5d14ed83dab875ac25ce7feed6ef837d58e79dc601fb3c1fca48d4464e8b83 + +Len = 392 +Msg = 047d2758e7c2c9623f9bdb93b6597c5e84a0cd34e610014bcb25b49ed05c7e356e98c7a672c3dddcaeb84317ef614d342f +MD = 7d53eccd03da37bf58c1962a8f0f708a5c5c447f6a7e9e26137c169d5bdd82e4 + +Len = 400 +Msg = 3d83df37172c81afd0de115139fbf4390c22e098c5af4c5ab4852406510bc0e6cf741769f44430c5270fdae0cb849d71cbab +MD = 99dc772e91ea02d9e421d552d61901016b9fd4ad2df4a8212c1ec5ba13893ab2 + +Len = 408 +Msg = 33fd9bc17e2b271fa04c6b93c0bdeae98654a7682d31d9b4dab7e6f32cd58f2f148a68fbe7a88c5ab1d88edccddeb30ab21e5e +MD = cefdae1a3d75e792e8698d5e71f177cc761314e9ad5df9602c6e60ae65c4c267 + +Len = 416 +Msg = 77a879cfa11d7fcac7a8282cc38a43dcf37643cc909837213bd6fd95d956b219a1406cbe73c52cd56c600e55b75bc37ea69641bc +MD = c99d64fa4dadd4bc8a389531c68b4590c6df0b9099c4d583bc00889fb7b98008 + +Len = 424 +Msg = 45a3e6b86527f20b4537f5af96cfc5ad8777a2dde6cf7511886c5590ece24fc61b226739d207dabfe32ba6efd9ff4cd5db1bd5ead3 +MD = 4d12a849047c6acd4b2eee6be35fa9051b02d21d50d419543008c1d82c427072 + +Len = 432 +Msg = 25362a4b9d74bde6128c4fdc672305900947bc3ada9d9d316ebcf1667ad4363189937251f149c72e064a48608d940b7574b17fefc0df +MD = f8e4ccab6c979229f6066cc0cb0cfa81bb21447c16c68773be7e558e9f9d798d + +Len = 440 +Msg = 3ebfb06db8c38d5ba037f1363e118550aad94606e26835a01af05078533cc25f2f39573c04b632f62f68c294ab31f2a3e2a1a0d8c2be51 +MD = 6595a2ef537a69ba8583dfbf7f5bec0ab1f93ce4c8ee1916eff44a93af5749c4 + +Len = 448 +Msg = 2d52447d1244d2ebc28650e7b05654bad35b3a68eedc7f8515306b496d75f3e73385dd1b002625024b81a02f2fd6dffb6e6d561cb7d0bd7a +MD = cfb88d6faf2de3a69d36195acec2e255e2af2b7d933997f348e09f6ce5758360 + +Len = 456 +Msg = 4cace422e4a015a75492b3b3bbfbdf3758eaff4fe504b46a26c90dacc119fa9050f603d2b58b398cad6d6d9fa922a154d9e0bc4389968274b0 +MD = 4d54b2d284a6794581224e08f675541c8feab6eefa3ac1cfe5da4e03e62f72e4 + +Len = 464 +Msg = 8620b86fbcaace4ff3c2921b8466ddd7bacae07eefef693cf17762dcabb89a84010fc9a0fb76ce1c26593ad637a61253f224d1b14a05addccabe +MD = dba490256c9720c54c612a5bd1ef573cd51dc12b3e7bd8c6db2eabe0aacb846b + +Len = 472 +Msg = d1be3f13febafefc14414d9fb7f693db16dc1ae270c5b647d80da8583587c1ad8cb8cb01824324411ca5ace3ca22e179a4ff4986f3f21190f3d7f3 +MD = 02804978eba6e1de65afdbc6a6091ed6b1ecee51e8bff40646a251de6678b7ef + +Len = 480 +Msg = f499cc3f6e3cf7c312ffdfba61b1260c37129c1afb391047193367b7b2edeb579253e51d62ba6d911e7b818ccae1553f6146ea780f78e2219f629309 +MD = 0b66c8b4fefebc8dc7da0bbedc1114f228aa63c37d5c30e91ab500f3eadfcec5 + +Len = 488 +Msg = 6dd6efd6f6caa63b729aa8186e308bc1bda06307c05a2c0ae5a3684e6e460811748690dc2b58775967cfcc645fd82064b1279fdca771803db9dca0ff53 +MD = c464a7bf6d180de4f744bb2fe5dc27a3f681334ffd54a9814650e60260a478e3 + +Len = 496 +Msg = 6511a2242ddb273178e19a82c57c85cb05a6887ff2014cf1a31cb9ba5df1695aadb25c22b3c5ed51c10d047d256b8e3442842ae4e6c525f8d7a5a944af2a +MD = d6859c0b5a0b66376a24f56b2ab104286ed0078634ba19112ace0d6d60a9c1ae + +Len = 504 +Msg = e2f76e97606a872e317439f1a03fcd92e632e5bd4e7cbc4e97f1afc19a16fde92d77cbe546416b51640cddb92af996534dfd81edb17c4424cf1ac4d75aceeb +MD = 18041bd4665083001fba8c5411d2d748e8abbfdcdfd9218cb02b68a78e7d4c23 + +Len = 512 +Msg = 5a86b737eaea8ee976a0a24da63e7ed7eefad18a101c1211e2b3650c5187c2a8a650547208251f6d4237e661c7bf4c77f335390394c37fa1a9f9be836ac28509 +MD = 42e61e174fbb3897d6dd6cef3dd2802fe67b331953b06114a65c772859dfc1aa + diff --git a/vendor/ring/third_party/NIST/SHAVS/SHA384LongMsg.rsp b/vendor/ring/third_party/NIST/SHAVS/SHA384LongMsg.rsp new file mode 100644 index 00000000..e444a08c --- /dev/null +++ b/vendor/ring/third_party/NIST/SHAVS/SHA384LongMsg.rsp @@ -0,0 +1,519 @@ +# CAVS 11.0 +# "SHA-384 LongMsg" information +# SHA-384 tests are configured for BYTE oriented implementations +# Generated on Tue Mar 15 08:23:40 2011 + +[L = 48] + +Len = 1816 +Msg = 62c6a169b9be02b3d7b471a964fc0bcc72b480d26aecb2ed460b7f50016ddaf04c51218783f3aadfdff5a04ded030d7b3fb7376b61ba30b90e2da921a4470740d63fb99fa16cc8ed81abaf8ce4016e50df81da832070372c24a80890aa3a26fa675710b8fb718266249d496f313c55d0bada101f8f56eeccee4345a8f98f60a36662cfda794900d12f9414fcbdfdeb85388a814996b47e24d5c8086e7a8edcc53d299d0d033e6bb60c58b83d6e8b57f6c258d6081dd10eb942fdf8ec157ec3e75371235a8196eb9d22b1de3a2d30c2abbe0db7650cf6c7159bacbe29b3a93c92100508 +MD = 0730e184e7795575569f87030260bb8e54498e0e5d096b18285e988d245b6f3486d1f2447d5f85bcbe59d5689fc49425 + +Len = 2608 +Msg = ffd67890ff77f344ad4f067df2f4ff1db8f541c7a2bd9ae9fabad0faebbf7d00f0a71d568c3c66ac3c57d84faa4894ab2377710e4b4c4dae0f4da1eedc8658dd0e2ee2ffac8784515206f2876eb41f98afd4547cbbc68034212bcf0c8e4a7d1d43b3ed15c621f53bd8a57cada80148ec4652119b5af3da84169d81dc69d394c8767d662044d36272b77ca04abff7b6b0cf3bd1f3919a04a5d8ebdfe7d6e844e78fd576a68d6373ffd5d384e51b5e12ec32d5bb0ac685a59f4d5d12b43b533580750345310999cfe91cf2500624fe03a65769f86a627a667b5f3b42cb01da109e124ffa48203f1f3873202d35429f32e8263eaf9bce42ef40f5cc96b591467d464d00bd743a1b0af4c1a743fbdd0846b9879e092371a5e7f6f65937f9515e23820e60b83bbff73926f0cdb9df5d02e82262cf2e8cb26af6a64c2a4d1fabecab593db510281799 +MD = 1396fea95ce0c1c1c224b50a07dd7197f1d62b993c7fe9e1cc1a56101920d4b0fecef587fbcd56b854c8c9da95132f02 + +Len = 3400 +Msg = be105a6c585a766aa1f290b632219ff864ea6674b5e3f9846d447d46813e2f92b78ea82f0b515f46511a6f161d429aeae07f8e4853b8686c191877f5a06242dd4884ccaec76e16f3cc24e6ede212c78897a1518dde07aa19b3634d4efd090a48b81a4e535359a55b57397da44a3b2dbbd37636ac1f77c875824c88bb62dc90bc517ab78579b913643d81bda11d62d469da29c50bdbb1c967d0fcafa29582db1f59c98fabff3669f8c4232d4d2332c57bf6e08613dd5db5d6e39b4a6d5fa4f35b19325c2fae79aefe36485610235007da6cc3022cec2295ac0550e18388eae156d9dba8784e2aea5ed917be53e767a26c87fcc0bfcfa870d07b43fd4cd8fbacfae1ecfaeea7f12600f6b9ef7c351d9f1b8eb048324f984e2a909d253017805c2d788edbf9807469ccd45571f5d61a05cec80a23ef349a37a28b86e2970c20fad9e7e8d201a35ebbaabd14ca249207dc6d7e2fd85c46553420b325bbe980848de57724676ed6552482f71e8473308c2ddff94aefe34c724c8c52a3388e3b541d396d6722a8e201ad3ccb9a26497a50ff0e7e81f1eb109888ceae27e1ef0537b3bd14dc8c178f0c5dc081 +MD = 39cf9206d78cfb437000b100661753181b5f262b539c208b442e7a022cd3234c58751621ff0ee9e9d3607174e36aaa88 + +Len = 4192 +Msg = b41ef4a2b31d3a47a5e8386925fb90fbe980ca2cf6ba34e814a3eca280d43b51e2a624b87e973debaeefbe0f90a3d861fc79487ab96d2bd1f0531481e0bf5c4cd422b9e05235125a969b92093fc2fc74470a3e9e382948889dce1ef8b7842c7972d9dba397c0619c4335dddf981fa33cb27ad420ddb533170559338f6eec55dfa515b088b601d1ba9f04c61a058476c2261334890fdb93850e3f7bcf6bbf7c86531c631715bd0bbb91527641ecb71c0d891b8361356110dba2c61d3f17c54c7765381ad81dbfb7a7006515dcb7813e25c5dbec2eb9105320a8384268dac56ab9c4aefd5436ce7c87d687ca73cdaa8413c09b957a02b0045c08db11d01d89815456c93612c9b10262fafdbd8f96fa95de64a3a6cc7809cb98aaf8b30146d7375105d0ea9a3c31f240541217b77a391a8e973a48ad83e24edb76d64f83bf7834b7b80a4475f916f429cc0d0074e12eba2c43a9a2a48b05382d54bf0edcee34218e57c0692a6628af264a359f4d33a21ebf4f39de39f8382f962cf918963dd2a6dfc93b8441ed2ecc3eb6d41dcad85dee4fa32f21f43244db1fe6cd9438131c6ab1f8c0bb43f5f2f27af830a1733927d1e527d6965ea1f1e6cf6a83aa4bd7d8160ccb9a36b7e53acae0f89154d1bcc86f87c37562feae06f5afa0638456f3cf51f82a0f1e2527cffc7b9f415e6bca0771405f53b05cbf4db3c570b547e1cec9c47efd699b1522792f50d387e6c9 +MD = 0f8ff0eee8ffdefb8b3151b7664ce9dcaaaf3f7af0b1e290ee49ba211b67863f63fa71202a534c0c42444a52bebf6c62 + +Len = 4984 +Msg = 52a6741b9ea02569dabf96ec0b3e2462866eea4a635bd7a42fad04f8e1cc45990f48ff2b627739634860f50ee8d7c0555bea883f197cae77b1305c50be891906164f9a474434dbf139b76f1e3e49155e2dae8b43e1a7a723ebcea31986c1b94dce82ef752c1e359c158dad22f4da4a0564849c5ea323ea2f434e825b23bd4df69eaba6bf027e6ceb44aa5625f2d387d2683263994739a023237aa01f7cc5fe8af090672dae9cab672ed6132c207cf64ea28087fbb531f188f218a66c7920f3902bfbd9c619c018963bd98c41661cbc007838b18dd65304e418f13b4b02185690b6b2a4922932db02d47a686bacfc04705320885690e602c2fdcd08c3fff34c12fb7d7199c7391d335f8250b3da65f4279c02b55ecc3412a70974b4dc58faff9f6126e8e4dc1f06b046baeb1fd89db4acb9a4dfad73835d1da4ade89ef67597be5073b07a4e2abd01efe7e2ba8eec6d8714ceaf4c6b1c0bab36414c12bfac3bf8302e726307a36baec4d4dc89e49c4741134acc429e4743da27f9873f9ce614d46a1dd5a8edd2373f2b488296c3f4696120dfe097f24c2d30df9b422e756d4ada64098250eafe4a3d8e0a7ce8113bfc6fa25490535172f237c6ef24e53387049287b92063e570cb3054e37187b8ba27f40172867fa202ba7744bfd66ebc7d6a853bf758eac571e39ee59b097c9eb91377a4016a23cd44ac77c2d1ffd1fa97a63ae989d2eb7447ba11a9faedcead7fe780f5c9e345b980f1bfa6ee4814d41cdd39f7383571d93a771008c8c585cb56cc975b919aef50feb0d75ade594131563a0bcfcc2981dc9443246acc38aae284ea453e233728790512484469d95ffb8be237d70d5825659b45d337cfef43d95268 +MD = 45d0bc363c4e0d5c1993570d7366847aae64ead4138d93acd843f28d3f719b02871736ba4905532e27f4bc8b5c2ced85 + +Len = 5776 +Msg = cc990092fb16b6311fe4d66dd5c472215e807f82e71d34f60e58b32aa351eb5eab81bd04abf15d8a23aefc745878a4ad56ba631f36bfab819d22f9708586b5c240885917b9f2d6b0fe313485fb0a78918888ca71a739d72d069a7556cccf855192971ef2ae80e84db857c5c847e3b775fcd3fe9fc2f480a353a76e01ff9325b3a99752be12025a065a07f966c36b2900b98145d20f586e8b8c332e9ca6395b918d6e3ea26be2f585ea291687f80a95dbc77be83217ce688cb725fb4d492bf09347062ac74387817273a465526c29c4ae2eaa2ee661bc384ede651e3c71d0ac60dd455e542159c674fa622ef0a92e7f20f6f56117758ba47a08dadf93a59056a15a1521728ec08b34894ab98937838cd92843c7ecdca475b83e6e85776ed3b8fdc35dbd4911249a5a27444d449c8eb382cc7eaa8e1d6d72af87085a125301981d2205780032edb98ddd38334962b9bec3e88d5024c0506508eb90a48cdc82bfa87ef49bc07983b175b20eb4c1106b7343865802d74eb4146a72efac0d91bff547e0146db06f4f49bbaeae16d42f0b9cabadc707cf4e01497e250bbabcfb1e01a24f4c38f99bb74b07d901a1a94603ffa266c2a933489ecaec0bcd15c1a108ad60d38442c285247d003ced9f69ddba65d1b8312e2bc4f55f5b2c1d07450be6bf2a74a4d534b6ffa94fde5b563b7d9895dfabfcdfe14b6dd27391e4d670c21e00a73b953777b5ae959cc7340f48ac055975470b047a646eeadd4108cb694d1a38802f3db0b20a9b0a8e005e12b7f569773b9546e52198606e4144732e5934402f5c59858a0d3e2ccfcd90c3a7b1dd2cb8d89c96c9fc6eac2746a30b476700faace4bf550bb1d8cbae027f4a165eeeb6e4f564e1fa336eb8dd9565ba5dbc38af79c06b967dc660df6dd5d6daa6e5af70c339f611beef20ed57d69267ba7f64c65c97652e26735fd0d5ed9c5da16fa8c01c4d590c5e580db35fb033faa4d90da91e11b3074fe15c05aef3d9ba4d23620fb9d895bc +MD = 2d24f6afeef2af38849f29ebeae7012717d50f5a31561ebb9e5760b83766030d1d2394c8eb71e030226ecf0159efda87 + +Len = 6568 +Msg = 546a582d46de5b45d3f71166ef69aa0704848c0a3963b194f4674a1d9de4a9c3a6195de4c8669feb8fb9ed6a184af46a1a88b3ff2352de1f246b80b33028e5ef816cb7dfbcd667437539ce9df64d15883ca4d24b43df73ae8421e00dbbc45caaed4bac47aa987cf59060fe2710dbd40a75c0301921703aec1a71b250c61fd69df39e86441a13a6a8e514c42fee5dfa98cac4168f466ff97ef0443da7daa11b709a4d8bfd95afac047e3e67dd19394fd94598ccd53942790f0e80ca387eb2f2caeb41049ba2d458b362c7305a18d99b76ed249a14825382457a0fa12b3aba2453ec603845caea705a999567ce73a3a616ca51c874aa08dcc83ed70aa996217ab4a79371249459bda42c925461b3013862e5059d1c38cb4e4162c24dda1b4fb99524c3f560888a073622a43e395f5a180245296235b403a158ecb7b1e550adac9d6ad60e202ee316bb83b56f81ff150f9df2a660e6a7179db4e69d7ff2bda11a7581b6018c0fcdb1d957ac2d5f1c9ce5dbf562dc5898710afe575e002beb94cac5714919ceb2b1a238a771c1fb3d566266554721b20f78b0dd48e179b661ef853442799d0b9ff5af817aec737eeaab4de31a3c761d949457fac00e35bba718136afd2cd46e5f03a15cd9058a10ab0370fd4d2822c1b02dc6fcc7cd7b6346793c10aa4c071c79413f70cba450d809c6915af5f56ec5eaabc68c650692d5c578c8ce4fc07f407519536658b10bff8b5c79a21a8aa252cb771f52a3a1c33aac7f7e4bf6708100dcf2a3e5881404acba2ef07ec4cf068fdaf799f5888656ba84f52730a64458843533f99664b583081ca2be96fcace1a59f94fb1e1d9e937cd4428b2468244bf508461b21f37ccf3b3b21aa91c9097dbba2b60f7469cfc1a924cd72d043f8a17bde92d12d3e52326c9f147d1734ce20fa6cc69ba074022a68fd00a4db3fa8a33d3d7fe5624b1df2c4cee1ffd244e3138a842a6849462014e2e542e8ee641c9964b0751d6a24c7586a52f2f86701309e92724c3e18e80fc83f66fc08b1bb3dcb17bcdc43ead136ac86b3ad3081739e083abf93e5b561b98ea60894cacb4bf1807feb1c1d8d58543642777c6fc6a3139bacf26624c7b904ad3f5273f7e51c2101c4c49d74f8c3073dc428c67cde98789d0d93 +MD = 8103d79f14895bd39e568b4c8cec9a26f03966763c3b2a65174a5d2829ecae097a7c6971dfe182fd2a7a9ea6e329b6fa + +Len = 7360 +Msg = b8727e619a77b72152a46d80efe1c1ad34f131b83e8f614967bd1b926b599482c9f1f13b6cd809c78b796d06ceeca6ebb2c7bde82e3701a7974f04fbc19fe7166709d7fcccd0d838a3f2c1cd2cb8886fa18bc0f3d00960050958c6193abafca45962398b0287abdb62b673bc536cf2a0c8e443c06c2e08c986816ad220d25b9268a51ed056240a1a8f6e8bba8a3169e6f17b4d374acd815dd672f710b90e8d495c7a8fb310cf7d5cf4c10fb1182f77a9e2f7e640b10f5127c1d275ba4f971932fd88931c77b28d0a57580988468da351640216c3eb1c02910f49edb8289587b4127832f3d4f2c18a81da80275c7475463f41e6a83e1b1c01878166f28c2f603665f174206fbaa2453af07d76a20b76f13b5e5dd7f33425e1f21fe84fc58d2a22bc9c628b9030b7a34942075c5f7b2db8200184395191a79818ce7bba1ad870dfe021031d7f7c880d787726c4ddeb2304b5d161b4a257298ec1342818d238b7d5992760bc83c79de98d38e2936284de3ec377ff312cb1342bb5f9f65236d4896cae567f51e6397fa0512c44b2376de8cc129a639939c54fd7bbc6ee508ed56d0ce9586ac5eef9b59b8cfc5309a4cfc9186ae397d20fbb02fa9d4316fa2262ec1d10d229fee430c741064f1880f0d2078893faa2c6f6bcd5fc2117783839a48d07ec6fc2e610053ef986ce9900659d2c8654868c5b38f0514510ea1cf31cc3d83245d43f64b9a1a02dd621e06f4959c07977305d7b1c7efd3d3166081114e65507e3aca75f282b7844bceff5b7e52d49c9c29f1e0de98e614d4e31467c67358dec8d9d03c1a6cc4ba601e0debe814251ddfe7bd7f9e84a06db2df3de1a5dd9074a0d4f5a7179aca3ba6d9da56e65c05f1ff36e8e2761d873519755d6d540fa4b8a296cb457e9f207eac7ce52add8cefcf6681e4d7f9b60301554fe389456bfe212aa991a5b40c7009ed91beb652394aeca26331be8e00bc6912c980c3fe951534c57809265c452153c692a7a7d8f3b0004f656014d7600bc2be7c858bd3fd8269efac9275dbfbcce2d40a606dd62eb770a9e2f0593a6689a4d4c3826f8a07be472591cde2b772cb3d92635986de4cb9d45e66532a3b86be95e25907dd75662142f3e1fc1b735cb4da8e27f37155f04f91d98a18d65f43030c638776642a8b63e3d6f7dd7e940c023033e2debbd19bd13fb7a8a20c1a2e0f7ec4e96e721dd9fea04b4dc28aae234bd5000e7bc4d5b1f744556c9f2a009a2c73a2e950b5c3e44a1ecd7e5bde0614fa4f8f154b3ad6d52a365f2050be8729f2617 +MD = 2ac3ab5299ffbac1c27300859a92a69a80f510a1f28b7054f131b43af74a0df5e298a9eab77e49ca81a578c309f5aec4 + +Len = 8152 +Msg = f6b1cf75b5cfa4ab323cf04ff13b7a591b23d06ed25f3c04c1baf4c8f7da913cf509c2a5053c4224ce4d0723268cbdf2277672b285c493731ea81799d353fa8497baed70c59a4c99b7b950a39470863a69667ff67c9ec981ddb41ffb3d63dd9d034bb79d9df1a95214083199e4efbd770a7a5f005ef5c877236674b6dd1322d0624487f6344a43970ec014cbbd114af2313b7b98d4d2779d1b477e925a6ab165dc2ec74133ac01b0cd6b6003c8df15f3072f3988863cbe3aeadea6575d7072a49890de474120cbe478907d07ad6006c2b4e002971b3b8597bbb352cc8d2e4ed5bff234d007ad897d38b8d39f139c06a65fd63f8c3cd7b4fdb44febba93ab2b3f78dc31a42d5b23c1346aca95a29cfbe931975630901934b2fd39dae916f0f32becd73d8a5a3282f9952ecab00367cfd151adb14bc008ebfebff98621bf038ce1436ac04b363b8c6c828c3bb7de0568a7e7a0b6a573acc22b2218562a36eee0a9a41e22af6a7d2a64240d8573da7fb0b21df6cf05520ea1804d1db4cb22b9d5cb377acb7e9e004527a23810aca0dc8d3c1939633404357144699007ce2b6a558e2606238079cdc3fe25964429d824e98b03f0d9fb322918c09dfab6f9fa0b473c964a937da4eb8e31d5ad8ab42960abe804a49b2084f3803c12e22b1537a3921bb1cf813cc7628c08d90848133b97bb9b44dc106ba19a8fffefd0cde98a3b20749f1c5686893ba7cb5a2ce70fb7d101ecea20a0a632262f535d4c043f99dad88e88b97b23927dc5c17fa3d070451664231ef8b397dea0477e84df38dd0f88a2b3932f56db8b30d03371f46afe8c6fcf870aedb1084e0fbfc98b10d18c924d6629e80551761c5daf6957a71c8135e32761d38603bf2a7b7f7c9b683714ca320c39b0c3d3bbec0b4aab5a4450c0e77b55f9a44c0f8419ed6edfdb6ed33d613e7d2b13f24373a4428941a2546d844b3e4197a3c63e21c36b763a74aa0bcffc7a9f4738190b66eb0a5472565fdb950934d383f87cf85cd1007ed48da4489146ec5bd548c0925c6a6c93889feb01bbc865f404ccf6a6ffebb16ff64fe5f34ce49e9a1c6a6f401dc96f2ec9a48249be30da8a6447bdaed0b8882fe8e2f472c881984265c7af7d70af1c0d7e8eab1a65ea9a7ee990587a98e18ca7f26d592fcdc3e03cf88607b11fc47919ee84efdc799eadb9dcd04f701e0dc5bf5c189d90235280711dd10044f0b1913863afd4f8c3f31c22852e2bfa2ce53c606d0d47ff91d780c81ccd209fac1e69532336e4d40892eea02bd3727f8811f8706e71dfe3e1fae6283ca4f2281bb20b537742a7d913232b1d17e6af67fb3801d8a76feda4d962bc7bc67efb4804167e1ea7fba46fab4ddb80929067194d026081602cfaaa42b80aa80282c56730f2ca9efb8863ff97b807b1e2f924ff46191c52e1d38d5c +MD = 70a597d1f470d69d7b7d495531c3182704dd60db5c73429fd7108c8ee22d86ed5822adfe6352f28f93023f46cc8d60bb + +Len = 8944 +Msg = 102401c84a716ae72579c6ae79c359ea309ffd95abffae4c61884c03c9e99df77b6c92e492cacb7854445c0815efd283585071a43828c06b069148cd344a98ab71508c0116aecf60c1959f9e3fafd0ccb0b11468e53079d40db5330791139c833cf879869fc37f85b49516d6c1ab5cad7feb6d497cbce26fbe1b9718a9ecb267238de0ddf5b1e2d0746c4919628a7d0e0f2504b0c377012560ecfb68447be03f6d374a6de02100294b41c0d0e9f53cd7a68862038406e0dc3d4fe85f2a6b30f3631d3e9e28bbe2797f3c04611f939ff08d3c0eab8514877d9b6de5652262aa6b4d6844d894268fa659879c36cc0db1410c6890118f47fcf1c36e7ae2f508558f733fe483ed0b0f9a214710b5b80a77b26a34719c6947491efd792f3e6b0739481ccba707fb116b3b1fa7e948aa33fb2cf1c938b3ddbd76ee91b68de14c045e7c913414cd86e1aa739bcdae566b304495e74f6dc0b1518948c64e1b3360aacd141ba1b43b5622d429dce1e747c4a85ad795ed992aaeaa8c13e569619d6f9e8df9003a0dba327df2452b0c1c827a4346d843cc43599c718639362ee885408ba6118829a9b3e49a0baed075d67158aa0f823914f3b5434d80a101c637549c172146fd93108c3220274e13469c7b2585bdbbbeec31a66ae781338e59d7734bea057fa5a3c8afe5b84e0c3ba4f708a87b596d1b7c8694dbe691d7240e4e4815ad5aa4ca7e5b82c50989d092b96e80aa35e97f99ed79e75cf3b8750d0d263dc208289cb24f516f99bcdf825ead894cf35b78d97e679307b6b6fff58f7fe6b919a27851a53c30dc2b78590be8a8d0d24b940b6312115a5cb1d66d3ff38c1724e32451aaed6d823341e6fe5178d1cc7b7a88ac059f14584f14fc0b3c815b40e5e835bc8fd10bcedba4add63d565004af47e062a76b981546a9cfe0d28015e966f07ec0e8983e9d3c1c76e9b7c94e00d77c443631bfc418aa36f8f4ea3ae19b0ec3a7659d8b2d76be70e940a81af34959df5b2e8be3c0e9e4841e4f6df5e8dc452857b397f201e1c96aade2f69266669f39ce559d1fb5105a5beafa41fa513773e936b3bc15e166c5d06bd78b77d0df0f5144b050bbcb15768204fc5091453100cced6cf53bf68e1a6bca284d11583d13f166498afe29819fc3135d8001ec54559a24e62bad68e0300373dc26aa270712dfdc273432f8dc3ce4bf25bb946d27d81a822a44b45ee570600dfbfd8864c574e44d52379d5facb7aeb25de890f132f216b03f2a9600234049418eb9f43800a0c862d37987877b77e9910def3e9ffe0b54562dc39b77240987b79b4436cb3e0053c2b1e43a97d0e45d073bb8e6a0128c9e1bfdf90deb7034e3162d8596440afb4d15f45ffdb83466d1baf12ad01bf6dbbaa7b6b232838d27220749645ccbe9f97d05a5d117122e650f52362f4339336270a360d85468054c0f31f9c9cf8a6562ac38ca24d1cc4649dd7813ae892250888ab70452b9c2600a713d449c38a6059fa2566e3f730f047a04d48e90e8fdd5b4ce8aa908a9b824c80fd233c5df4a51162708960a4502f1614c0db2bba9f24b5006c5 +MD = 81a031db32d465202a2aba19ae6072148f3fcf6fe33fc8a843c0691cf845f9cb7bbeaaaa04ce2f1476bece682632e20f + +Len = 9736 +Msg = 98afae971df98e02fc3f503d0b12176c2ed77f4e7962de7194c7caa2646cdba8e763b13260f7390db5852d9a158eda80dd09269ebdfed1441750fba2a7dbe78069befe30b7fa17c1b23df576e4f8117624b79ac5b9b2bb73c29f1c14d5cbab70e6699c7b6a2aae87bd0eb1b8c17945b8c989e4adb5a723685e5c34df3466b0de250c93f9c1ae89c59ca06848f439fdad94260b3cf804918ab22f4ced0dd47d33ef4eec9404af2de4189c220ec55fc1bd4f37175cccf28d4188be6b25a73d9ad80cd7ae327a54244df9aae7f17c131950c06311f47799a0f5a6b4996f4cc890334450e1bd6cc6f5670771c0dc607f8eceb15300ec4220510ed5b7deb3429de6ae5f618e1c222c28990a9ab4b4bac8a7a0e8afec2c75b029f4dd6f43d9d2e524b024b1bc37e4af454dc9cccc62d219ed2c2d1ede9b5870af108686cfca44c8d3a05ce973f6fa77d5ea0db00fcef098e7db4a48dc2333896bc898a18b6ce06d7ae8cfb0bb41abab60d89eee85e05c6d1d1505d6f1ab4d22e585da6b7da8eefda1ef45af9d0041746c7e442d36815dc117432870221cef64a6b01589af67b59fd01d868e201b02f98346c7152b973dbc5ecb79bd795c617735af11a6298f7e7c90da59f44d7a37632c97ee4f6b0b42857917c166fd54eb821aec9668f10991bb688e88892a0627d9f0d98283fec6b545f08dc712b6ecd5addecd6c7711be3686e1a1d9f6c2a51c8455754c58edafde234c97556aad0d662208bc5a7c9195b502817c15e31a405c8be5d111773fad0448139c3116e99de70620202a1f77755559d38504f73cc0301728569c88fcaa70dbd00424bd7285a084ae61a207cd485fb35c256ddb2f0be050a56cb4322c8d6b050836f60751aed9c13be78bdd9bf51b37a6c41937fb0bb45de47c201dd83e3bee459c6f9e8dffdae84e19ac48e764d10e38cbd1b2a9a6f4676deca9f208a428bd0e9d57272e5fea1f7061cff1bb7dc95f9aa05bf43fc6e795c9261759c2a97c9beca1754d3db8538e2826ba7f1e284a5355ad7fa6c852d6107f9032f910347daf661092b5c1f15b5ffed1369b194d9e12f0590770493209ff1794c17bf92e75220453760ac2f24bb77ac80bedb2d40bc3f30bb9f9cc4ec88b19998e86867daa1b4ed0e9f249a36bc12574011cf3a5da8fe62d5fea588e5bdc0e075fc3bd0a65c3cdf0b3155cec02a2863de0d1e4a8539d5226bfeaf6da09197e45fddaa8bded41081b9b1d06b55a85268c6fb38cc6bd16bf5ea2a2ad1a1c6befbd30724f7e8cbe87ba6baf4ce6b9908bc7776bf3e56221b33dcfb98536daf9ebd6bf33b8368862d333e976386768eb3f58c0a021ee88e7b82b10d886168cecf9f874c7edcb2a5473f0de17d120afbfcaa512fb1fca788f55902ba7b9a2796ba28b15d3f627babdef57113d1ff9d534b2183524f45f7a4213d4e9cd25c3eb9f6cf76b02d93080c4d0d24c8e2bdb24718117f0c2a897d528785f12f3d25f28afe1a53ef9a0d0c3929dc855b2fcace29fbe0c0d7d4459d3680e996ec0c95f79c489fb566353eecd4edea1f5529a5658e5f25e52ffce8cba2b5debc4dd11ac2606eb627ae6f872e4211cc4f4160ebfce6ca47588ed511ad398ecbbdef1b22c779c8f43742a99435133dd9b1aa55fd18b5b5cb977f2d2ea66d8437282a5b5c9b4affd040ad83d4b5cabac8d2fa89572d9dba392e6b45be4bb12ea7979 +MD = b31950d784b30bb1743918b99fbd6693b30fde41b0b9c2e154425f048827a161dbd4f3b163b5ea8b8d91bcdacf22e84f + +Len = 10528 +Msg = af4ae11114072bf854a76a1b8b673bb7cc9ee8fa66f0d4cd65c51af15cf9714d62d653865b3f5ed1792dfa0502603cf5534e0afc256080d90f5d93bd4c26f4a3bfa537e0340035fbe912afbe4d1b348d07b644f73a0cb58b074856ed544bd329cca0d84627b2791fac3cd26ef402ea2af0bfde132e5e3b8b576caba7fdced48693af7de1bdbdf2e4cb95aa3c7f7b2872174f1f7787bcd98007b3d913cd18c0621cbb6dd97d8968f34d04815177f0b40d834f504cd09059121d042a5b4e915e676daaf155f07ea3f33a709dd564c857a43ca8b9b98e4181eaa346e4a408a1783b9066517d9c056a8d9ac347efcc6bd9df4b40a2e74b371ab0a063501982b1d4868dd5d57a0b84876976e4c7c739410265b70153fd8edaeb0c1d42b6df44273cf16ae1c574c565c02ed5bb658632b29adf88d21324e092bea421cb5e21d66d752331716892500ede84c0306954402668f4c79a2c84c8c75923b4e68f05c1e94ac5ea6c07fd36e9a9153e2b1a58e905354d7b43e444cee1852fde7b93b38c05827f9bbceaddff5ce8865794c2bbb8b7c991acb4848d7a480a70a872b054bf28e4f84e48595931d165821353a7a432a4ec6962d553865564b09019b32f10e2b93ad90af89c9956afe6af7b50113ce134667da68e9b58e69e3f343a27580e7e224ac9d8b4fac6f55e34b596744aab4cd0fe747fc7a22ab55c7e0611b472771acadd71bf64bd089746173d6da59918fbde7ef7f668b2254b0736aea943c7723f19ba79c7f02b86c3cf56ef06cc45ab77c8acad125911702f082fd407bd9d287477ab88f8408d690161bb726bd2978e47f4503fdb820735e9c5311f35083dc1414c76465b3d2ad8d9640c6fa49dd7e6f3cc345459ccde9902a804373a0eef642e00e45df7cd4cfcd440128db7174dde04b61f95951ddcc601186fc51eb5fa39c4fbbd72d4d939fd795d9575ae27409b011cd8a9965f4be46e7d3c71e9e7a8698aa6c930fb4a3a0251235dce90b4fa487265283a6478711ad23e31e2a48b3f1c0967cf3c73069733e3fb314166a8c10bdff9d7ed08529791b4c517c157890879c7a7994144f798b9b74bda7637eade0cd140ad6c89d304719c79b5b508c94ba94ecfede5770485bc557c21140b629974d0a2725fefe502e112c2d567c13250d4264594d01314a56346f7ccc4ebf8396b6287ed6d436fd7099f083d7e89ae5e20d57356ab201141d71123a32ddd9408181157e73f8c58cc12cab3b6a36925beb8e5bffa1ea7e2a1403e6770f8ec1e4ca4647a287dd28a29241c2b087e677db9c2de934ad0ae6f0dc5552df9cc1d7e4e37e35878ce1dec36661cd9fbb68e9f956746560c6a40a0cd8edfdc07527a9c56f717599fda76663b01522357f4e3739acea7700993625d28c464db62310a60ab0f87e6644ae4e07f1d4672e3df70e11220884909f41e8e688f6a94d212d5b397a5bc6590c670424be0812f68203cd243847249d4357b1bd3167b6e1f9de47b60e23c40ebf52174e7758ac0ae5e4f2c7623ecd831fd82ecb2821ed110793ea24fed91dd3d80ff5f9b02e98f7d42b2d9f4247e5ee9f439e94cfadc256f4feb0eacef42a64e0e12e9afb027029d746cbf02b0b043c4c3aafbeba73bd302c6f4a9bf0fd801e64863fb6aa6cb83d59b85c8ebef0bef8a12dd08d5b1c54192876059cf76da58ccd6f97e150d5d79ef5f06dbf50816ca0388d8f9533f02d8e6393708264bd012c95fdc58f80c654cb16af6df6a24593df7cea5b7ad797900c885829d0ab74397a58b15735bcc6c63e4615dbe906a5dae2d8c4c292b88b222fe134800c4e2ba4f2804abb58674f92850ef435fb003a9866e69d3361594 +MD = e35b64497f34c095a1135e65b6d417d69e8587fcb53cd700d10cb8a1c0ffdd97144b6cd1221b25169ad42d1826d10bac + +Len = 11320 +Msg = 542c8de3e29172313cf43085df75b41fd77a1eb8c9a4da1637020cdf008432ab26b2055cd49d9fb2a016e31a0d1f1ac7549fda04645a2cc9271fed8c07437559b14f772518f62860bd4aa4c92f2f8d86cd0ff574d3cf7ebc9502bfa7055deab37b6bace6b68255621ef6393a4b8c5684cb3237af20ed181709124ad703b9d9de0e6f6d46b42b6ee148846b146c20bde8d570675e539a41030bb756c5073f8a05f2c180ed1cd8ba04c55a02ff97d209db74314f2872c042a82459aa181cd7444eadcbad84f67182f41be2c6a5d68a84842fddb5b68746632ddb600f79476951e1c9f4beb348dd0ed8d5827fab3030740c8edc62af9914ecbab9354d9092ddf7e7cea379211c06a6d978a4f4bcaead229a19961ebcb1122579453e2c04041b7f884242a87779d3921f8eafee7e56e7d6575974b085d628569007e4747ea50c31ebaf38115c682c19d19f0b359932c7d86ad5dce2b1103ec627878feca57e9654399ced7d79eff98517311f91b64a356ffc15377ae9673cbe674ea85d2296a2329992c9b37619221c1ace55ca7da41ae435a2ee41d4e40a8677e3958f9cf619113418347dfaeb902702fd14a7954a5c7f3c0367ff1b8e906680cec04abca4e13a32b696a1ad6f29edf747c5f1a744e5883ac00c7c656eb7a6aa988f562aaae4f5baf457e838acd6b82032ce705a989b475662447f5b8a658d1cc86c7a8d100889f45bdf1a43aa80cea54898ec57506804b97076d2a5ec8364ffe6be7f8ddc3740097296ff75720d78af118b2d457433068a720c3bea9cfa737a7aed2ed318586021c1e55e770b67fe66140ffacd0ae496f2f16d83d2a0b002b60d614d07cb533263d13201f07d74a8f1d98d1d971c62fc1974017207028f59db2681a4d1fe10fef829e6ae89d11ebe78e86b5c4ab19780268330cf2eca7ec0104eb7fdd7b8760c08526a2eea0e4b8725ca13808ed26a6a42a66264f2fe647e7d0c6b1ec4016fa3bad22549ba3ce54c1e06eb510d86c3019466fff7f8a82bdc4be803d03ee1e30c36337ec6a264d3558b245d966cd58a8e454a6f51ebcfba22a26ae8dbed61b890a5fcdf6f498cfdea95acd01956c7a7597cdb1a3a717cf998a91b82077b88d7752fb6af0a58bf4b536427aca0716503aa629f697932b6d0858982391c8d5f2803fbe855607602a5d71f1d58f465b684c91f20c2d8d8852733692876e1ceec9384321a3b394c5ff3c0ee143edddbc213fddae68e1d08f1e6e872939f1fe339013efbd5c85d81dd1d54fa96c5227b929990bb7736116c03f5edcc4d1e9e774e587a7f9f6493be840bdc6b2a558dec2dfcc8eb5d207cacc23c8a9ede592630318280e50377a4ab5da69f695956e4d79b26ee9220b6267037a40610ccba7fb6ec659856866959ef6fd4e71ba930f0e3e5fd49d7465fd65f6813ab4ca1a770b287eb0afab2a37833c37efaa9a44c79b9126b23e3598256215f72bf77e48ac3cc08fb1df80e8bc91e5f8d213cd21047002a57c2dee1896c5f24aa8bbc1eca3eab797c1b79228a16594de7a4fcbae5216136a86fef64dbe1c1bda15741d6cfaaf8e1584aa47709258b9576cb10e434d0843d48723e6ce07cee34416b2e9401ce5a4976f3a2946ebf5d3d20dea0d8631d10471e13f48000078f91710eace1c8747ab8be5d9a0122ac774fcf24d61fdccdae5d129a3929a3484bda1889e3438c62ff3618d2b5478eb480d26ae6d84005ab05850c4e34ed3109cb192024fa44b56192cc6c981bed199f21cfd96ccec3487ebec9f4790e571210b6557027196cab39db80a2f8f37b2a34014d04fee1310c0d8031b261eeecae25b597f0da6a42d6b2815ca23a657a2b3cc954d3e43810b821f4c42f4efd366e1270e68885124e9f942d6854a69b71838020ed2e65fdebb682c18a518a63bcb89e8e4a206f3c186ca686aba184bae89ac5af1efdcb55476df8908b015c4706f590b8cba0e10e29a6b1352d6f1bed67d8d61df1285c +MD = 5a39dfdea913fcbcc5549e23b310c7ad76f392fdbea1ac188d529062b9961a2e32cef378f951c4d29eac03b3fed8e662 + +Len = 12112 +Msg = ed665d3f73bfd785c59814b4ca1737b2e0eac248b7cf08cc665ae6fdb8f3ae2ec71e64a7cdff2d48361d046ffa66af1c2973f153c80e02c2dbf13ca4c3d117e5ca9b5787fdfe84443a299b7589d60332af87c2bb010ff11677556dfa0155d0ec1e67a0a8aac4c6c2f746418d206f1b3c9aad9c470cdcbf11610de2c71b86c18bea0aa5d27d5ad90a98fb5e81673adf82126ee7c1917d52f8c2a102d3b86cd30a560ad0cc1dc7a76443d05a17053e384b3e500cef37f89416c19a34e58110ecb08cf1886034131618214e9d18a3830ce146dd7199a7576bb2877fe2c71e79f5c6b14634546747106d59fc8f4be812458a539d7f8989a2c1133bd8733f36afd794f0923e7160697cac1363997a7df2c98f8d179e8684df7d82062e4f1671bb78626f5c0d7fc784411e7909216b092b82381bd33757401887471007de1479a4c278562c0946439d4908b07891e735c656cc2559b0c56654c7aa80ee8700f3729c1dce8a9a8d7dbe7bb5e3384fb6a9ca2f95d53273989e9c25f37e68b5a38a2eed9bffff281e1deebf6c38cfc5a00c3ff4d951e5e6988ff7896934ffcdc6e4df9f3810121bbfca36fd74d7c7596d062e8de1c1fa738ce26ddb55c83a382fa98d993d294cdb392c9c1d16e9a875e4419ee1f54ef9813e3e0603ff62a15ea78240c3f27434d054ec2b089a96f880cf6297da5c206b77744ccbe9af2bbda7f51701059e165263d7b2e8a4480541e2f414215f605ed8bff7b4c375ad4a157ce30fd7478a3a2efa8c25ddda675f0a021bfd45594730c6c08f1df69040e832433712cb71ff0651ff39ee119341cbdc4a0ec50aae5abfbfe2032f6d20b22d9a66bacae46b43a242d8a7b58cb51c723e2194157947e1334a8d1d932f0e4940d74b34dc2a1d9e3789ef9e215729417cb8ef7495980c24b4f029a3f144434e4a715c6df3a5705aedafaae6da79d8f810d21d77ec71e56a68371e5ef0b5a60872eeff2cb55e4abeeb3b734689faa98956151165c20cbbfd7aaad51639891ec1e1d89e3bca5c95115ab5b187d6e3833b77083406c16f742310ceb49374c895bfbeb6a060dba7379c61a5cb71683b50579b34ee218fa4fa25532d249c487bf24c32116d6490481aa729942bcce80af725e91fa880d4b3334b6a4e8efb5da91dae65706d0e90462479da0a3860fd5860ed8a53c8e939a209dc7db958765c5afd2d7e5b082884a93f5c9b8d5af5502e73f7a658b825657b6322b6f7ecd6ed967c13a65aa678137a529694a7f9528893188a64b4defc024628633b8fb0e2b76681a604f6afc8e6c04470eedf7d404e9037f0ecf1a435b50942e834090e6463d1f530c1b68bdea483ff32d1bd4f874a2cb86f6796719a28ce98f9caee6d2298e0bef70423a282f6cb6a2464cad5ef236f8350fd2cacf1039c12dd24c434e6ff9ac544f6c35c7e84a16d8ed08d7840826180dbd53abf03ed7c98de6c16cd764007f25ebe212299f50cf0b73c8fa0410e0b9857184811988f741242c7699f9a022f2e8f86c25a9af215dbe8d156b6bb7074b10eeddf0a78918f68525f47121ced1b5f1d73306e4a22c31669b76c20764fa4b4467d86126a9ad283565c378ec3aad26e51aff2c4712e1e8a821559483a54a48a48efc5913752474996e6c27b56e15c44736290c6d7bd2e1d7b13a394cf277b195c6c24efa763f5a359236e419e39c2c7cbb392da4378fcb89bdbd46efc6f314bc91c2c948272e479e93ec648635b0be1a0cb816a7e068f442b92733d8ad4cf07d92664e9902a1db48c5d4ff96cef3f793cd2e5dd5111efa77363096942005c34d2b354549930a73a8ba993ba839c6777e5ef449b813e25cbbb741d5ae998e0bcfdea853e642f8af52e4919f46e0a89c2e44a280cd93738964bed37774a476486a2f47e10bacdcfccbc656910f6e2b044810c189820a430f26af7e02a2cb3ee7a09f8c73063b27da67f270c74e3cce1e4035d9da71d2c16c662ba9edb56848980791fe90827879c6dbdb5898afd6f268ab4643ea19978f1fa795dfcf091633a803c916bfecef43508bf3768b90c74861eda4a83ee5c30c975f8087fd2a5f80b629875d57c1fa04e5fcdd63268d7820a89be36f4f62efba62127e5b1e95aea030ed6f3b0 +MD = c4d5e18acd6e425d4a1f03c23d7a48ccf313c4f987b9a1f4b4e3688c5ee4d7a97a3dd31fca20e8cf159e1feeb0df4e65 + +Len = 12904 +Msg = 8c9eabe871c6e9511194b48ebf9e9b031d8df7b9e1cecbb2d88bef792bda6efce1342c9ea528cc89c950d0418c85027f984f133ccf9f830c47c1c0ad938c92e045dcb677b042cab0f3f969c1331c96b427175e75da5cb92aac57b2c29aa3c7d1c07e939b1c7aaa6e9576c5363ccd1f4bd1cd1e8d896b36b30e340be0c887d5775b020931713a366db9af2cc730ff64eb9f599cac6435c2507642132ea4a0847c1d50616235e93452668ce89c95192e3d97a320f8f42224a9eb6814d5b6579c850f50e355f2ee6dc8a5f540def68545e9c494f29cc09b2665758e54fd8612e43d37ebd6332fb3a9757dd27bb5d8aa71962b1259be51068e2c1c9c1ccc9d3a25499f078423759faf01f60be248c5f07aecd6069f872dcc25a8e97bb46d823827544f8d334e4b1a49151888bdc044bf2795cc590a1ede56b37fe3116406bd72b2044d662cdb398c3d59ec325444de7f413615f1e3abec0b0059134774c0d7528e01a378b7f3c75d547479efeefd1998907abab87158dd52d3df7f062bc2573f82f459ad1bbe7ef6560fc7a8d4138073dc06c295fe4b3b95f6b83134d335c5a1588575eca263e5bd0bd1df464fad9876ed85356fd0ac8d3b2f8d31bab240aadfd65b011c920b851b3b63c8afa5f3eb0a8b9d1b3030a45cac47068581100c8c63c51f042734dde479ad6c8acd1e0e00987df67dbf665b2f4f06ca377037c0f694ec7887f4d0028c3d2a952e8604265f868c396204baf88e8e33824f6e6e856dda150f916baea105d17a86bbc49d62913d800ed3e774a301d098d5d365fc837b9d068b2a7415e3d59b65e6396e33eb1d26211cd750db86117efb6ccd3c2ae1a74588965af74ff08605b35db16c0ce98ba8360c762738c645fe25ee44db40c8793a63d52adca2efa0752b952aa67083642a8985b854d38e26b9de04412a865f7ae55ff2a10b5708a9559633ac03a9e12e16e030a6bff4043b17ed56cb1043cf31ac4495c86db5652b0cbce23f6efe2c74d304b54751e3500c811c8bea78c13f27f8d965a5e8062bad026548ecccb68cbbc9bdbba4f0e79b215d314ca64746d8e232e70b43659085b89f590dba061a288d60d2eac3854a0d0314f54008661bc1ecc0362ea7cd9d99d34b5fdab204722971000decaef952cd390f301017bd8823cd0c8e77db06738f866e4157daae06b6f01134666d3248044bb5aa63dc34d4260b7cb78ee6fa5a905970c52b3cec1df891fb1003061a74d9c26d2ae25db449f1307a781ad08f9cc4d5b9b4fee0a70017dc26696883981d7524a17a35a4232dadc46d9bc4a1af805281b1d57accc5f83a59fb0740eb938cfffcb86003b96bc9814dbde63362414d62e5c1f2450a304b8991e0b13147f50aa0cf1aa5f4a272659655d1220f1b2d4c1e8a4fd107a2ce412d0b3e31e39ea5dd80272e11b16922491463131702d25bc5acf7c53b699a89244e4f7e4d00f88b4dc68b5e6be21661bc2200ea8cb291b3ff34b489f812fc483a13e606ce2d5e8fa49b84127d2faf1907e8b2be4ac75f1c44df4a05d0acd0f3cda557407b14d699282699b00d3e3e31738f04f81aea4581dad4409f8bdc1c71232c2a921e5d6b91239052a1e4baca91463f7bfec2c349c70a3c1ec1f04ceaac84cfe8667db0225fdb00374dca495c21c81fa1390af976d71c3f6dd2c9a4418b3ab6182362b305eb999fd11c8693fbc94358fd11bc35d1995804b43adc8b2af68c0a423193111b1da494a777e241af71fd1117ef9e1e64f506b47b60f2aaabd5c1f3eef8d8706cde460841c4a4fb80013f7378397a5d36d46d764baed2a9cf102298a5e0fb790114c523286c9568776151a6a75916994f1cd673aa8b462f9b90f722ee51c2d3e1a96a0ce3d87d319b797bd12cb53a7bb8b789d3235f14e4193b88b852b3f72614837decfa6f24fef531051d90b7b0aa788bcebd3b93057250fa1c83586e601ca38c46eaf69851768b7236b15ac53fcf9782ed597c8de17e48b6fcab88eac65b95aa0c2f5ebdce41672258b61249ae921e832dd06db670b30a5571576a8ff08bf2c719e3ba456108912bb15341aac69a1475d84a967679b69dc1c1af87c6a855c3cab32c9398d3730f738ab16e504f90814234ee8036c63209e034dc66f5b4610f9b23356f1eeb29ebe42af721a3111b6dd18ae5b25c1dcd579c14068f86dd56de22b124d93f73d32d65db4ee20bd3e4e10a2157b452472f8edba7548bdfebdc3847a42256633118dbdde3de3af05f93e4d5436b0f7e0c01b68737efe1 +MD = fbaea1239fb68417d5fc143c0a2386ea75d5ef93affb80108e6faeda4eaab7b30ad620538ab0589a91af34b78f06dcdd + +Len = 13696 +Msg = 98607bc257cf734d99999d757454cc0e781d32d38425d308de6d395d83cd6a16bc3b1769f24a1627c3f1139f568e82c0eb2ad77db6fffa76ed37f5d420f7f074c99c604924457bfb4091efd456aad3dd5b82de44d15cd701e28f4cb9af8687e3e60cbe2992c68a1138019adc1fafa9afefabadf07e4552f3e6faa6d6db8316a93b1299d2e7d82bb0d2ca7d7f57a5eb7cd02fae4964c0539220026bf149f5850ff136590dc98046223673ff85a794818d259648162cd8c228b92e04d3a4e4bc5d300066a0e1c8c3ad8d8487b5b685522a1766e2217d9287fbd806d7449259a2db1ff92953d6b78a9aff867fd82d7f489ace29e63000f88a53a6134d0cbb5a21d1e7a808f050558431b3004eb6b38b4a277166bb0c5c11b47a4bdccff2c9f22086af956c3df9ab97b9d27a5c17f1b0411728a6c97d3ae5ebb7eeeac3bf61268843a049be0476c0ac7c837c11c38ef613b31d70784b427d1851b7c3923b2d003f50e24b640b729dacc0ef8fd5813365a943754c303d1be02491cff1a52ed5872ef59c23c81b93487dce3d3a101b8806eb0f5bc2591c6e16f5bf5efc636001c33d7af75a50fb81cb09ee96062a5734e0c15ef55b5bb0e22875238b6a339958bd55261a776675e52e3667227a8bfee0fb147a6b9e9ec1201d8a047fc57fa0827c5c422d02714f6777ee83081e9bd83360caa9e6148b17cffd1eac6294ae3e28083c165a84d952aeb01888717ac3acd616cd348e43887998d118615b60283bf26adbeac784054663e09cbf84176944702503638ab5feb123a0606c92b0545f87a923069c8a5ff32d1062706a7cf766aa96567d03f256851772de15300c9c7190cdfab1021e4e20b54751e34a31d3db2c70adcc2080f6be1d4f7aa35dfc673bb4df4a3521c93a97a38d535f4dbf676a9dbbef960ae94824dc401c6040091e839ce6fad820128b1e9eea4f2e9bad19dda6800624e8b5b27efd4cac9202ba2712efeaf2e32782aa7e4e672e965b8353fbeec6d9bee36a9e96277c1282ca98ebb056f41a9e609ffd7f5c0bd6e0b6ca7c8b1e9550ab2392733203d73678c12ad224790a5a50f1f4ede870df3053d309fb56ddf55335cfb4991b386500bb0ff84538ff379a420206e38331e92439dbc83a24d4efcaa20f5978196f2e5995db8aaab29180c2bdbc5f451648339bd8f58fa0bcaa8a9d3b0d0878f3503b274c4d696a5bd6efba0746867c6a5cc57b7a4ae795e808cfb548ee490173829354298f1ceefb778b6a68c903f14716a5ae650157816e96c4f811dda47b5fae3ec674c62b9d5a1b5cba2a6d5f0b741edd1ae14368cd17fb734fdd00a24e807b4567751d1fde3f6b6b9394592131bb1b75a93838a0dfabe0e4a2f67fcae29e92af1d74ba7e1b740ebfdbedb6d1cde2b67342b0078a20f2ec1edaa283a59f819a84d2b8c5d3bbbfad607c7eabf746b296e1cc93d9abf8b4c829dd2a34b9eef03ccc6d8a67a326e9f0575c8f611c04f363c63127d58dd0b81b0d95d6b99135b42090d632c778c3ba7eab656700c76f6dc72b58b524b70ec78ed2e9ed3bb2dd95edd8f5f80fd9fcf900647d50af81efe768172984edb11ca9c981c0b9e1a64f5b4caab223644f38701d8b8e9096d1ec2bee928cde5904602673220480d4f4f2cee410f5fdf061e0e57e277f70de3fceff02a569099037440534bb9c8b3b242db65e11a6ccdb975a21cb403838af53fd2c4c56a84eb9d22e10b65670223fbe6ada61b5add94d790fecabdfa1303096e17a73af31f5fc5d880d9efa688c084b10039605f26c6d90670dc60aa2a08a8fe2b020b8ec468261b9c597b06c13bd5387f9a4085dcd6363cb4ec5cc23cfe4c76998fa78c28973662900477f64fd865c368435c7d743587aa175502a0c0667c4dcf8aaf79905f7f24086566f38938cf0876cee484617745e524b0e2e458d3b10a599d73d5b03348f661e6d88d01df796e17879959492de964798a8dfb6ac87332a432a53eecb55c4039234d314e3efd7ac727eb6a7f9bfaae724c54548ab73b3d5bd4a403ca580197fa85257ed2c9b395120a4b169973e2399b60e69e1d1291a0dd1e10c2bd9de174229701c41422346364a9490c0b38488c7182b526a67ceef394594c0a5ae9645b4dc352bfa6bb086c4baf65b9694b861d810c308ccb58dbbc3e20d62916dd02c3e8b4a8bfef06a8063377118d283033734677e94ed038c051270f4fdd65fb65246fc5644371978bc7c88add15cc88d9043e506fdb799f3558eb7f0965ec96d4136f8025f8b2d02c27576538d1cab7df76c51004b11beeb339f7eaa3710f620817447f6e3e476321bb8c90b55fa74fbf11a741787e2bc9c28ad8fcae7d42df5986ab1d9d8293a2e4eab497c30de6a3108b217f1b814d92dbb20b0f7af92b514107efe534742c2 +MD = 916864ec799cc0ccac4b6a806a8c02ac72fa2c3c9abce6231ae7a240d9f2f26b819a711de5480aa334638cae55cbe6f5 + +Len = 14488 +Msg = 2bac4a034d7a81b57495ca507b34097d79ea19f74ee305ed7c6b7ba839af7d6dc2c85aa5f1f5dd3b1228c446f3c573e83aa6ea75fb62f5d88acfa2338ec5f8c65725e612721a7a3e7a9f54b930425921ce27ac64994fda25b61a54613e0b235295ccd793f772c086530161f35d3322f1df75450a4f331b9aa7557878710a64d821c41370a88418da4657d53aa020362012999fb0469522000688f6c14e482422a61584f1aed8e803fba897d72192fd76119aa09da6fd561e7ab9b684fe4fccf6cac8115e31f699ca19fc8f120911dfbb8480321b96f31fbeacf29f09a9a7c21d35e4a1fe586794f5495ca532802344b612543c703e00e5a6433a9b9775d6705f90711e1a4cb2404c32cec181ad529430641da5e5c7ab109fe89a92778d663c8383786ffa355f04997d5dcb45b92537f122e357c2597d087143186af217df9053b5ff7ce63af64aa2d10eabc7cc2495c1f3ae394f1bfd36e4fbbf0c4e3cc7d395cf112d2683007930d7eb494f0cd816687f8733d436b300c0b99460d323a86d1278b36a013905f80b36fb8d24a4c823ad6f752d98d227cfcc24a14ecbf509c69259ef1bc1848b31fb97466090ba7d22596b810fe415e20cd1e5edbf7cd97346dd1acc28ac8b1c8bc8a2d5a8d9777d7d341ab2c1002a6b1d97a380992ff86d55ba6253790b773f6e39feaf4f4802529a0625102c34374a6ce60763c62d797f5bf2d98af6256f7d421854dc3b258483e39733a336c865085f86b99d2cbb8531c04d287b88449c5c702b4b6556b82499beafed74c803db2c603e6036b524440cec93f72e15ae26665e3b8c5186480b1b9515fb8acb2ec23ed6d8a43748aedd97478ceda986ac3423750fbea8b51f6091cf9204ed259141c6291a2fa7cca3795a3a00b3f6c486ee1a1d718a73ca834c84d4eeb0a6c074814dc0cda68e2b493fde2bb6f11db6847dd3bf2798b9adbdf77b0cf1a9bc821fa95a05b9b4f44ce958aa83774e2443ee09d6c1fa8f82461588fedf62943755d9e2765fa5ffe217caeb47ab0b7215550bb9ac8db218d67dd22795b50b1c2020ec5428365a2f5f7436213b093a06f7d324b6dc8917dabe3a3efec9f6b2e77ecb9e26f8f3a1ed744b73221007ccb2d3a48128ee1ff07e41659f32210a209d593d38816efc40e12884ca154d0c881db0b26a366ab607ab68e63eee26591de7b960018c13baffb2830783227b7f37f096e42708d9b5220a3aa563585e4c716da71b43706e95a8088dbce67321caa1d28e22ffc7c3860a42bf8a56985349e3d62a56445408f6018d4f8c3b2dc7548e6c9e543c9bae9087fcff7e5ed78db93cca4bf94e616743d4e7d05dc97bf685c666d16224ab243b61e00367c43d930544f311eda7be15e6e7be1819d98334c510672c350020acef5f95d22fd1f1ec93c3f6841897959a4502bb30a6b36d0c7c3617b9b31721cf144ac474bcca1c23cd817eac63680b7ccaef851fee9f620312fe1f7fc5b3d71312ea14f2f8fae5bd1a453192b6604a45db75c5edd7e58aa3ef312786541a6a0352072e53c9a87544e1d9b73dfac97a7ce25b23a34bcc0c737c97d6d7469501243a69b99f191bf3408c03b9b515e9c2aa466a4648319d10fb1ff7d579856cc40033d75edecf9c8837828cdf03f1094b566f6ad7e470a1c0c4411acb74f7e7dc1ea61bc519d3735cb32b3cd02e75703d08c5237d80f21d42554bc961d1864e7106f9fb95580de8963befda353e8868bf49b05ce1229e5cbe36a3ca3f9719e8aa41964077a165435f583630b53c1437f99f98dfabd55ca55df0b3e50cce97feb056e3b212fec3cbde906804f92f00261495e572829e143f460ae2e4717eead8abcd4a180f760fc93c6eed1fa81f347d38b0ffde0e87ae73a30c978d15b0f9bec22f313b15113185a0772d496b1497848c7a4eeaf8971389997f3caaa16cacf81d0202e4cdd8114733359149ea171383397a3b60e8d629c952ea3801bcb8ebcde5d124d9ded297571c2f7fe9cc2f8fc166382c06854dd97af6d5f35b0f9e9e874221ffe3f208acfc84ed60efba65f4873c3d8aa678030ce6acc8d57f4125ad6c5b7cfbc9ae80368093f89d245bc0281de310be066800a8539d4c4637fb5500c559698055bc441e2970d79c50584814cb82392eeffe4d960af1e8ae49e53780d96371f64dc45c4d404412c73b5805a0d942414428e2f1bf53cf25757ea6d213f2a21ac57a6dceaa0c363285ac0400b58e4aaf677bbbf40a755f8a039ee72fa2563eef55a460a41cd76fbe3d6d04403933c30bfeae325f5ebacb9fc0714f54164e5e750f9245e68de7173e5944ffcd1610d4de738aee39a56838ec15be874b55222a36590ec39ae486553a40fa9db0326da6ae2dd7988ac6c8d0fa684f361c491acbb99cde82ca09fa513b5a5787f077926006945dd75ba922bb5022ea05cdd87e698641cb2b7de38b34c80f226595cbc62b6b10e354b336be2176ac589c68ec952b26ae9d66bc5c83266ac725dea818532f670933b69a55e329f56c61a2f46ca83a204d1cda8e5b284ea8ea269b2f45 +MD = 5077b3d65d16446eeb06f10c73ee1128e29060ab1ca255c6cfec53af04edc2a665bc5dafa937164bed9d01d0316f0ffa + +Len = 15280 +Msg = 03b264be51e4b941864f9b70b4c958f5355aac294b4b87cb037f11f85f07eb57b3f0b895505fdd1160e184d811fce7d3f60acb3faa474a5eb628d66cb4ee7bd5b57c64a5e165a1405d4a28537263190aeb5b4684be61f284ef7cd969b21e7160d0fd70d84b1e8e3645328cca1e267502ddf624ded1c206a4782321d59fbf555fcb1be214d8b12b5be043ba265e6e832493826d3729910e2817c6b69ac4f8b03c6f7fc443ce470018f523b94d7a63ccd6d7a829760ff79377950da19e69f2095e84d11d4c760796d34e7a9129ba2cd7816f106183cb1c1cf9b99fe9cbd6d5e82dd2b8f617181a74f5b1f14ba165f22c8e24611d46a52731164d25960752c8d51120dd568cfca723e7e72fed9cc5dc5463be4363a7e5405a361746b13c26f3597237e8459369d72910b8dd82042013d66a05603d8ed29120c1e1ab41519b7ffbb8e080cc14a9d210d7eba30fc0bfbe3a0ac15db2e3b53f0a1f71fb4e2ef794444be14df1f702bf5fa64a289eb8ea0609aab9e5ca8ed675a1b88fdfe1bb8259bb9402f9be24bdc69fe49b1536d4e913cab4b69e8e777d596bf505ff00e086f7e8f90d293b83211157f8a711e0fc030c058f80300586f213f23c9a02b685499653e3c8876ffd78c50f4c36c5a318811943a3df4438a47cccbef615910892145c85bbfdbb6278080d504710d98710ab640a589b822db765ac558c3f5300ef2f7405e7726d1cdd1b0fa051fcf494ccc912e5167b91eea8f3da4164e0f1a584e2045bd1f044a615f7f38ad2c3bed334234e5945481a83606f7f0ae8c012ff39753510df3ee80707e4e293322de14b31013ef04dcac4f2c621c2367fa65f17f72f2eab7b2602479a2c0445da020204a9aa0a3196c93845c150cc4f905b7ff4a45a18b40c6e3a6fb8168027300acc078667dba4880d1d843b45c4dd85a81b9e2a3c1ab3fadf378548e97ec19d0de45bae80d9d28c5d1cb51b49d366c553db1e6f1d5d31ac41a29431ee289c8ad2f5080b3d2b420883dde249a22174b824667b5d4708b68c5c22a15d6da43f5d22a51783e5fa7c66450712ac98d58ec6e565bddb0144c801f760b6b3ad1a3280c59c8f00c26d090c6c424e2e75183d575c7fedd09239f173dc03da1bf8b3fe59838378691aad7064c0389db67f1107d3525d1226430eb84ad1b4167d94962a522402dba636e139d4088e072d00e977a290a734c45ceca5ef9f1b71c1caed3ed16fc0bf9e5e32edc60eef94793ec7122cdb045b9225fa41c80edff3d0e2ddc3402d662c3bdac813a198014d8382d462dafe1c9078e561133ee5a9a49024904006269b2a64f1ca33cd6f6c39331337ee12bf98da5ee648a4baee208dead82e3d8b2208c201ec60d6b25bd960723b193e3de820422c6ed87aa2efedb5c645de4237e955fbfb13b483b823f0cb2640a2dbc43f5bcfcac6381f5fb1b7240db4c9d8724229de38aeebc247915881386bf94c0d8df2892036921b5afc27e3a56d1786a4f72c71a105301bc76bba8a9104471982998c7817050bf4fa97e5f978b8efd535ce07be1e60a917a07abdef1753b3cb8a2dd2a5957dcd34a64c986e6ddd794c8d9062cd98067e3d3a860ab7b49f66e98c0f6c1783e40062c8e1e84b6b23df731405e4a4f540d815fd5748ea4f3288fbf20801d6ca83cb07c71f7f975cd446d233f4364d1f56df2852b42091d052408923e039eb50a257aa0bce025a2736d8f2502600d0fc90bafd9f663ab31e48b61c875fbe5dff89ccd3fcb61c9cb492bd5ad564e9337635921d4d363d58235c133b864d3534be7f510b029e7366eb2f1d9228749980748f8e0ec5e9d288c6d57f6f8871497974cd0ed88550afbfb4571f23b31eb9bfdde4d75a6e4aa04ceffd213ff594a0330bbc2cc5ed9279b0f750eb94dc2cf1f69b7d9488af2050ab861a2233357ee26a6a92d357a22d79409c63aa6d0d64e82f95a2ee21f23289ae7475a9d3b0f7b82679972a180ce956778bd88437ad904771b39b0dac9e49f45c9f56dfa8cfc7ca7020155a8f938db85dacf7a0782476b5c5ddaf18b11b2d38bdf004ec39f8b5bf4f47528a44a0e349fbe70727bbd9dfdb31fb2737b9d0a6fed94fc9f70e948b3fccd697e3c099b1ae5825524085369260c0f54b944b277ceeb9a5eb28b00c0ff4eeb52c8d8ae8c0927c4c1e1460a259ee77b36354ef8776af64d8b3a8a6c60a83bdcd59af2af3d89b7046b4cbd385fa2a601eb7a22d585eeae2d2699f782c4397410466722924c0713bf95c8c67483ebe821c8fa48e03fa463c795535afa584d683439afd0ee242bde54f5e7fa251ed52e596328299ee136c79b7bf90d29893e88a733f7961942427772f01cd0f09cf8d9275e965d7827003a173eedb696f39765e7a9b0daba42f56f8808e9e33d8ab18909ffc75ce27dbb4bd952b3cfd913e280842f6e272792bf3702c4d1998274b9ae7feb3d908461a27d304bedb15666aa58fb19a1f417be0a5e81a8667c55c75bca07955ba0d45f603eeaaefe139568596fbb1ceed9d121615663281af42e1f226c2f72c3f638e37f1136e0676f1c956a25529d97410a694ebf55c851a981c8a7f55627e919487a5984c384ac1c627a672a40004db219f23ce9a80dcd04e77047062a194d7289a07a1a0f004eb3fd83dadf020974b59658b665f86ccf8ec582aa0ef9cb63aa52e27b3187f7c1b +MD = 8f4d27faba49fe0bffa92f430faccd1990f9b745442d455a5c64eb39edbe7c9d95749a644ca8eeab63ad183cbc739c12 + +Len = 16072 +Msg = d4281d9f6ac1860f5c6a4db1d04365bdee62de13e7c50acf368bde1e26649a519447ad30f663d2919c57802936a581a19764e0ecb83609d9007a2ce4c2c3e2520888137d8f1d176c12e11ba6cbbac74838be1e561b33a54fc4bac70492c778a9b854192d3dd79bc74771e8d298687eda59d75df716a424590bb377259e59a3802c1485e80879a8cbc16dad52a498f07e82176877b471cf215bcd03efec62adfced2e2058f9eb849f0a3f33d1f833635d3ce6067ffa83eecc3f70350c87c8dc47820cb2231715776daa4d42f59a1f209f0eacfeb7f2c0c9853c04d32174757989731403f16bdfcb5a2701a26694466f6b81d119c6a311a772dcf1a6d9bc4fcbe949b0da6bfb32c6900bc21acdee8e97e91cbd1f55155ed2bba69f76d968401c908b470038d1f4b237ddf773d2aee1e24367d9d80b5190908922770bcc802fb2a6c1403e01f50fd576260a751cde26969eea8b0b915e8d2a04d9df2c580a03d75273055a6e6d6978766d62e8548545fc252e3c828e443fe8535240a32510a6d0bc2afd1c2643ece25f3a679421ac255cfdba5503ab0c8d119f150336dc99ffe80d6d904ed27f7f5d581681412c5ab0fe51163c5790bd5eef0fab8eae25aef6666dc526b61927092f898718b61d97cd2947cb5b46e45f9cc8cc9b4bd2a756739103b9271ea44574a11b1794bc9b6b6427076019974ffb2ee5fd6da06c0b995eb3f8d1fb4c1be0a7fb364e5d1b4edf5e3eba5ddd147b97fc8ecbaaf742f87f9f1273950b0824018a8501b3db9bdffaa1b7884b11830d3eee0a5ed9b71e17111ff69d8ebd1c6aaf0587a5ce7703f6c516da98b01cadb0f5eca3dd8248c61056c4a99e437a4e93f200484a27971d3a46a5ee1317665a0ac6de9f702e12028a5677729d3cab6848d263111647a5af5487373d20055751c3b8ac4741637d9c2e1a2198c202b6303058162a34b50782eb90b20de804575c84d33ee375acf15aa3a9a864371c056ff48b01dbcaf9275ea86700a7939bce41f5207cbb378ed606910cf61e2112feec3b740d6c019c6b0b33160753485324c9bda64f16ad939466a249f10eab6d0b71ae19202400253d5033a5b1582fb2c1bc846e9d3eff4293437c6a837bfab493c4f584234cf01c04f6511ae40071420de2f47e507956233b64c77693af396ffeaeb7bdff2cf80927c6347f8a91368b7103b3e04e10dabff5932c7608f08e27b3f79cca9a0c4175108584db8a54a51453e6699c814bb29d27965271cc8721621c674eb5de34f2e826feeb37cc91e7651c54bfb8cf7107463b36e36fc6bc1baba0c67286b2eb34e8d1f80f9a3890230635155c3e22cc0040973b8479ded6a487a7dbb343fd7b2fff793a980cb698828004f1ea3561a2c615a56ddf95fc1fe380996fb6f6a92a0ab4868d2f962ef22c59f3b00ea6743c804ccb949cce08dd011ddf4a26a69d41ee8f60b97c3e88e7481c6919729842e2576e73776329ea5926e6df34a95cc10702197086260eacbdff4ecef5be13b5db730204dfdab08bdb786402f5e71ffdc66fd91cbcd60e82bc7879890c9a20b471fb90e694ac6ad1aa221eb0548af739c45c58cd223345f32edc240426acc528ea17a1805e7f5fa5104a9d521b37ec5d4bf21cec81e6bbe55952d8a60b9f0cf78ff1bc3c05fc98f05319674e10980751a158afdfa196784187031cd78219fd0aa8ae698150ca1c98bcb6060efc554ffd0eb799104aec85f0fe1678ff55c29f497d7930b80891f387934902f8a616cd4adc3760e5448fe9d906b474864a44fa9c55789a47f5fb26a320fce176d882871e51ff8ec85629ace3e90599d52a4416ec7ad32e97dfaebcd6aaf52def58418763b738aa204a5fd7f8ed306e52bc6dfc1f32b374108e52bd067b5c6dcbeffcd5ff54093d55e6db70ff5c5e7c66ca64b31fc640f51aca90321dd95a2a71655b77dc719bcecff34582df7cb649791ad443d27ea1381e5a1022020d17eb4b820577e05516e5f53844128296615ff47663b522a1ffc6820779959d5fba38c00ea3dcf54aa10b317f812acff186463da4b910f6798125b0997393d6166b9938d0dcaf029664c6ea8ea4d1aed74e84be6c7f5c354c50df0ed8a825957c54971b9159f7ee8288a1892e5410078ee1a3de985da1c963937c068bbd52c2d79ab9d219c1bca3563521742739eec25f662b04eefae899067382ff7c5d2345706888c330bd07085a92d01441fc73c89205a29a38ff388d7c187b61712e9e068fe48b579ef5df05d6c835d14445a7ff6fe892073c139a8d0fa9ee9333d8cdee7c364af62a104c8211fed814f7bb93503e3482b3c3df1581054e64ff8a04b8e37e874d099eb75667545d424323073ea34614fb06940bb151a731640c3d5a66cedeff1df6c091069ce70dfac890d1b0e1d0ae8468793e76e63d7776221681df98e5c541275947630a1235880906c0f2f0242aa54138206d260f4b22a9db222b27d8024102308075971dfe75704d7c0bba8ab1e6f99a5a9dfa64d3f10955e4536502dda6f10fe5452c4f8f48632cae03264a6bd0f867940f4a86376aab4c705e39aa7ff65bbc1ddab2f111894c6dfee31bab7feaa66775c9ffbba016f5886d548a170fbca800d13d0f4babc192d613b283f615bc6c61a6d5ff4c367b50d0843d4292b67d3fa3a9742da586779d309678457457cfb01fcf3b3481202325ed5d2248639cc38a6d4c89f247c933d5422e3d496a6baadb67970185a18796daa89f0a84d2e815f026638348789d7da2d6840a772379d65602a631d9f6925ad9c7f2fede27c3fcd995956b16822ade6cb23fe6b7e6aad988b8a5d21ac66af9 +MD = cb7a6f63e6186009b6857157690ead10a5323917ef6035d41bc71c224b5bdb0ddacbdc2a59e6ad2b3731678b1848ae66 + +Len = 16864 +Msg = e478a0f1531e1a79150904fd08f340a34bcd0693f4a836fe01d5ec5f924b5500554ac2c0413efb1587e6d64dc5b508197d793a4bc73a60df42654638502a6bad83221344523598bd11bb01d320e1d5be624e32fcf00719510f900c0d6055db8d5748bb04eeca987c9bcfac177f3d519be096132dd9d70a5d50a0676329944ca8b903e1897ec7a4570d6b00a24b9322b7e0970867e972da0aeddb7ec413b16707929cad5968f263584fd725fbeda9f01a4b9b3631889f3261cf8a7ab78672d3b1c85b48fe16137e86495b42aacb4764cd07e8c8131e28ba68dcf482c5eaa138ae4588da00eef49ce9e43f7f384f3725d7fec6e49513d31929fd63bf74a7044007ef6b8ae55a5c668a06ca052ce040dc40167fb340d069f8ac1b1d584f256491c3b04c8137c11283709845fc0ee5293111395a5c9bbbb1fef71c6b76dbcd88d3ea6f72e77d8bdf9ca383f88c67c8bbcb514e9e072f3d75d414ea9541a2053aaf851426e3401f8b592cad2bdbbdf0be53083d94de82bf7b210b6be3e02b3640cc9b86b09d07e7de61120026149bc5fa703eee84061ea78c8ee2899d7cfec963d434af583e5a4aa05d5d63305d86af36cbfc48b5aa8b5e70c3a32a0a3ca4246b6c587666eec1b098f416bd93de08163c0c493571f04f4def6756387349a4b1203e10c321d4c5818fcf44f895c1a862d2da2e9dfe00f4dbd122019a20ca86d74af2637ed219ed264d96effb7f2beffbc1ddb266a503026fdd9eae3859e8d3fdb0305a90c1e4c2059af01fae9946634ad0bedd79ae21ff73dc8064fa66cb128d1b9ffcdf365ecb873e85ddf92a3a8eb5c925b7be6181754e97732cc88e9acbee53e7515479af901400fe30c47c2ff8a572b9491d064ceb68d31d0d8a1b7e868820b161d7d1fe9915a90321f7d54c278395239a7fe4a9ea295b260f28539eccc34aa5355188736ff0013bb77a7eb9a5b5f80bb2ca44c1f9f9f6373a8a7f232407986ad4a8e438990fd04ffa35bf9ffaa564179ae86ebca0406bf89799e63417bcd3a946c62e729fd8dee6f211df26acb9a0f259bfaac1676683102d3bd2fa2c4ac3099491ad4c0ab5f3a9a8f42875455b7642f73940f8d7d306280459899ceb193033c5f3abec600dd64023c8e0b54df2acb07d3d778a77efbce725dc5443dc91e2cee1d36e7a2c4850526b73500d4ae60be3f2b2999fcf236cf697aa7b17881ba083f1183f1ff3cd298789dfc0a6c69e5b845e82ec5e68d5e0fc62ad463f761d34fafbac66023f06298984f277a74884643aca94b9f0c96fdea28fcbfde42e0164da0a762b4d975a17fd6496bf3959ffedae3dd0477d7a572f9025eee72d392df9cb235ed6258431bd8e32b2de848077c087bf1ee02c04f79b6d2cfd4d431e0bbb77504caeb48df4e1e2f52d1daf4554a36e5866ca25eeb5e9e1ade0774d650171839828fc223a094ca1b5f1c4e330ff5f0b11904e91c0fbe396ae7fad749779e59a04da089713d9c6747ae51b47cadebc05f184b49803304f313ac237e03bdadd629a4b1a3aa1cc17034df16a049a5a8105002b44613ebbf65d56915cb8d98c228364617a336b4b06f535fdf84128dc78b2476b4615f906a0c00cd46625f9f77ca66a0570abf9bc5cf23bf10e27fdca67b5cd2d01dbbd78140263739b4e2483b273b32043cad488e1a466b5f4dea08d17b59b5abedc10791ccc6456445ce1988e9147983cb783185db0be32f28d998e505bb7d8c53f7d717ec61565a876b99ed6a92e57a39b8ed398c14b4e505c7134d94f2b915e2d89c80397808911c533fd53627043c09d7e20597d16f25574afe67c38ff6bd1cebee773e7ada8c570d71dcd651646dae6da696a8c26074afddb0effbe39506549a3349660a2ab0da02d660c5928473a9d2a1591978373771e7e132b8ae32763c7c01834a8697b317dbe41d7e7ac2d29ebf78c9746362024001f5dc84404d8136f9efc14670afe792e1114f7b7ace2edf8c735444046f499cb46549e94a54abd6ac446ff468b1e2ddcae4835702f4dceeb257a5f2ebbd91da67b607420cd67a9dfba60bdecf6c294ae1e4657ba3e5616ec96c2b2b79eb6fab947e9149384161ff709b0160352d2f7cde875253fe0e50b25a4760384f672762d31574493d23f66da38a0d230a8359e60943c69a41de2f7bbd6fc1b3ccbf7da2ac212cdc8c0cac7afcf96b81dffd5d190ab05e994fd3520d9b4bdc288252c6ed7808277dc55a08a9e57fc91725f99d885b4376eb589c7cfa5c721bf100df9795df50f09749aa7f7d1573925d6d169fa663739c0afc87e4b479691dc7b8a4645e4a9224d3b95c8556d57b53cf25b2d815bbc75a72bc343dee8aa73df72a5fb1893232109d650ecee9ddfd89e6e08cdb38ecc52ebd180ffceb08930919c65013b92eb7606f0d3f90887780a12f1dd32d924ee385348099864c6bd31baa2d23ef60a89870c2f24d9ec53a9b36223e4423a48ab8fa93966f8e853cedd222bf49b902385bee33b4d72e22afb3b54ae24e620208ac0b34b9d05a27e429b90e0d4005304688252bd56ae3134f50ab137a507d1d413313a27b8a9d970a3d5ce68795685d6ba3a225d457323981f884069708b968dce4b0574becad75078f2a26deb836fc001501bc224abfe7f011ecbe98c5cb7734476dedbb852e2474a5ad594337159ebc72b0595fa3d0b102432186201607cadfc1b8b04ad28437da0742f8758068a7e9333a87dd01192740f2ef17ad8812d647ea0d596a534421902aa77ee622c4ca2eed0cc23ad0fdbd24a781cd918a511bf536f843aa95e2644f86377705acae57f5f6a382e991f2d535e7a6128c9b671e702ee6097bf8e39250b08f5b647c89e3c6e69b5479d29d21fd29a8a0ff39b950313873056f2acc1e5c2ffba68310dbf02a3350b16bf15105d2e425d359f3cc53c0fa1be1e47a007aba6b18e2d208390f88736024209cb3035fbd9a443d58149ba7d +MD = 082f8540fbf6774f3858ec103c57091ce84b1479a791f87495c44b3e85518993267eb2ac0cb44e089567c562aba69709 + +Len = 17656 +Msg = 99ed7aed36a1fad487d81b5c680a44e508bdb33d4a560a166b2f0ab7e6e99ef194041b5518acc6a47ad69787128c3c80a8856121d9f92f7cbcb312dac668c0b0eb4777ce06d185da7beb0efd1b320adc488e8dca590a4b3b40e35b7c69de3ba2e6df15c1cab8405ed23f0a264ba3b5e02f00bfa09230673d3ce56c0698f418b1cdf47d942a08ff18c7f9126a69884573a702800b4b148969fbe1cdde19525ec4e7ad38b1ef6ac8f0a242af313f88c37ff6bc56734e5ebca7c400076eb49f15c27d33cd7ee185a5ceaa4167e3934c36eb6557cc4061b505dfde69a11d33844595d7aec465c7029d9a281fc5e82e7ba69f3cfb67da4dc16ef9924623525ca8f7243d45a6cc6a88b83c64034ea8d8be1b82c3cfb1a9d92bfede28bc1677f9b43357f720f91d93c0ff9ca6168c8c58bd9e7e42fc3116cf9bbd74e8f501f3d04fff164c6848bf085179a2367f06fa781f367a00a96f87f5b8b4a419196c2eaa2265498645181a92e52f375b67445bfe8dec5f46fff465152bea57054fdf904ed46cd8ebdef396f82127415ff6cf18b3aec7135c264719f59b6773f2c0e381860e1cabc45c609b04af6ba988532e975f2bcf7f8a45f0095eb134e12994ff6918787eab58e6e8917c3703581fa7e942caab0c8b1885789f1715588af2f2bcb0cdb999bef1a511e02960f5356b198980bbd787204d0d6642ea6edb559402a1be6d7a76cdd5c166f0d3d34b27b6d295b8fc574724720642599d65c62959ee36fbc0621bc14d616c2a41380d1846fa955453d25481cf97954ef9a120f087db03d08d1a9280a1adadf43d3641ef65b811bb89f0b71dace9e588c6cbf19167f391a39e49e3f419ceb0b78d75f19459349255665a77e25123bd6fcc8a42f4415e67ddb9981403fdecfddcfa9e24ee6a979f8ab1b89cb6056ea26bd2871a015d440de7a7af2f97942e1dc94c59e3e7e209c1c234b12f8312f21ee4a26981a002cc0c2730353b9727bd97e84b4d356607b17f65b5ee3630bed6b84202d97fb97a1eeb071bd341ebfec1f3a0bf23225423b861dbfd17bca55243f9edbb7f1d340b6332ee3230487b6161ba586f82b2977c45ef8cd4d3c6ca1560674e950262f9fec36a443bf5582f98c5737a2413ee185a81b2e101ca5e8751568ccb570b57f09b651a70ffc979efea16a66da67eddbf079431404ea58bc44c4cf0cdcb4102022972cadc4655b4a3a17cdb99bd6a8775caa5f412810c5669506b19bdb74d6d15f21102efd8401033031e9b66317ff520eadc84c063a6c55ea3da9101e4d6a0123c6b4b117c33968759256d3cc9662ea9b06268b0bc1ce38b8dc2e0031a85a1e250a82caafcd64d87eab8da834ec73af9645f284c5415b5d8584b8c2920027a6b76ef2e221ed03d1c000069a3894922f74efa4dfbf23a452e4a9c1fddc0f43397f568d7e2abca6e2ce125a2043f95ed8ab55c5e2460339a73adde2186c003d24d173cb2506a6be9a0d64e0d0e3b53a39ce3ade33164a7bc91c738188be9d86175229344d5255cb56127a3332a442a4d141e146589c73fb46ee1d38e56031be7f65f9417daa244da561c4d9bbe21c2f2d9afb96b9450a289f442d70a4ed6746dba1668b2c5aacc6166fd74cd349bc49ad5dec57dbac9784309346b15db2989faa88f369dff059c517b113f52f27ad84deff2602363f86beb97fdb73665c60596a8112761f17b5bb27ca1d7b16286a5140f35b1e6f7a7218785e6e4f554738e49a2e5638502d4b18c50f56472ea86d4f61dede14dde9c4222bb371ada11f9cc1c7e54119199d748e8e1550d1ef4440cfc026317e180a077c12138806e0220691624a45a0d204ec5cd1609fa3ce786f62da4df7c28467a686e9f313f3890af0a407d1d6582feffd344d75854542b153a91eca838ac96f4bc301d697ec0237059a06f095b789bb218540c8c43ee28b97f30c20872f5d9d41b108329668f2429fe41e3ae63755f313c059debee9346396d130f45538978e32f14b9b91f2cf9a3a128c256a603b243e85f73be7ecaed5fad41b9a802f2d9e99d46a761d01f0ca6e95ff2474ba9fcafc46b744c1a1c85f1e7c2aa79a7b866ae10ae3669a2f1c4fa7eed5dc97bf0a53e773089dfeb1076b8c29fc8006c6186f92e534c18bc29886609dae9265e5e15b8aab69bbd192e287ce7dffd857777a0939f3dd2b7464fc2b3322e80a41b7db4e50406902fcbfe0305fe8a304ff0821e450c74b18e6aecd9a9a0f2098ddbd5eb8c2e27527d2909701aaea949a7000867d51d01cfe54e873510fc2e6c27c5ec2077cf21c7ef5cd6d5859f422fd5cf93e30b79eb16041aa83eb0ede891bb024cbc6c90fdd9cd8ced9b0c7a60cc2184aafab1c93a6d32f7d75c511c2a6090b97d283419c26f5ee0d72b78e70807d247d6148db4f6bbb90d9df7ba30fbc1f01305cb97117870eb811beb908d44c832429d9969e328eadf838177b4d2649c21386e0c5c2028c6bc9741451e151bf7879a8af10bfdd8e1ed810c4407aa6bd96c4f40554defd9581949d2a0e826967d1a7a22843bab0c882a31c4c67b5f1b601980010d3026930e4abf5564b869bb403308efbbc395cec7e0b93365d79a791970f53b9bce6d5ed0962252f8548694291a6c78fc6a6225865541e18ae5028fecb9d37569ef6a4386479a51c68424292016cf45b0f7bb1aadd3f2559b6b4064c23b4538de5ac84918a34edb3512eb800e7059df403347b324a0f3170232fb00813f710b62d92d796ef36777adc485a3d97131cd12e6affad3046daf2502dc6c130d7f765d3242d9717e0cae9664979a6b5e809790d79af7a34988a66ea38baf5eed9801372eae74078e660759b8cc6baa826dc621d0b1b17ab56b8244dcafd14c27e4355995194f19699d0a5c89c920802421e12c979c3042923fce0e76f0dbc4028a99292f2d749058d83f089e39c1d48bc3701bf6027ce1262b0f363af8d4adc7b2b610c48fea52a33f2fc5c1c2548d007cfb55b28b9e41ba58cf23ed6cc4f1bf8612771beab94992fb61fcb80ce395cb740b4296e09d4895ee953d5af7b3772f2b37c4fde4ea5b6d345d134cc075d334d2274a69a981e00114eaec483faa2762ccad61322583 +MD = 34136970bcf300d0b2553a049fb7d598acf9febaf3b79ff79264bf9a4b0b27474b6fc7c27c5b19f7242b7b8f594da916 + +Len = 18448 +Msg = 7a93d9486444b719f5ccb8915d64b968832eee56542ed5305a956855914697487793f59e6347b21b17eac91898407a273e13fbfa07326b8130ba07530794a04ffb3f4d83f5d05d4deb378fbfb2c3864813e97791224125a6cbd10f56ae8ee7dc2d2047bfc2e6a0f6963a735050f6c3132b36cae34c60ebe65262e8262e3b553735bd4c197391635f437bdb911ddf1ad0ae855bb82e99a58beef6f98b30a4d0a73c9ec55ab0d98ed11883304cbe8873c6c45b94d86ff33bdbc614ac4d5ccf41756a4c184a20c709923dd9db47def9b73e9342dc0bb877951f0344683359c691eae64eafb16c62bceadb05424b2339cc8046c19b18b12b9b9ecc0e9606d091a64cd92cf0573cb38f231a90cf1f354f9cd403613ac8011936a24afb9c8e68366ae36a6f450436c06b842101e98dbd460e82f2a81fe351494c71a492e393cabfc4f9c29e157f0593365419e0f75b632309d13d20b33148c1c654035bd3dd9d339bd40841c7914f34dadc29b66352cef0770b09515e798f8b8d938fdfd4338a9bd9bd65e1c502bda93d647a09943aa7b53f7681c28985cdaf88766fa54f5f39fe65fc0105769af6fc49333464f2db9578495acafb9a1bab339e45cc36aa27516427d903354220a335e4937e4ce5fc41437d010f84fb04d121b947cd184f547bd6079c93f9915e6b5af8ca804bd567521dc3b276e61208e680c0c59bd5a4ae5e5aed8cdbdacb1af7756c2163e82ae2710f03b427a849ee93599a075df513fca3fbc1f2005f581dee8d28e04fac4c36461f25504b5207807fb331553cfe0308f1be6b162d11a12ff9ab144f6b1da42b785711ce0a6cb38452966cf7607adc98f1add34088760c17c0d618b6e0c59888b0bfaf768b7fb7c3b60b3334f0f005754acfe2b83918029fea161c5cd52c9117955ee88ff7127a0551186e5615e9e867a52c7ec5697fec8d2073088a73d8f89ed03ca26375ae6411cbc805a3f6ecec35aacd90b1403130aa09f6c488e25333e60861c6382edaddb1cd20e164bc8179a900b901c2e5b838be4ea6389e4925acb7e6d63d574a1e4dabff2ae8e08e30f78950f8b741819c6a91968c4d14d0d4c9d812a2ed08f0021cc808ed03619582ce9e41939c763b6330ea8aaee931a1eaf41333cdc093480fb2d091711b2df8fe67b07c9197a83c97f193d116f53ee1ef942ef1609d3f7bcc788b41bf168de02d2887a8fa8f20abbf145214cc5a83bb6910f2f6626b55b1c2d4c1c1dedec975957aea6ed76e27b16403f0fbd6fe4855e2d227e7db141d11772f39b8d65929dec0c6a2762f1b03760d25352d3ecbd5d7e141956fd37fdfc475f2bccfb071f544367278670a7efc2142e2e8530ca8716aefc503345394e3f2448312ae730d74ce7de831ea707f5cdb8ca2d314467c663693c63bde623b70c16a4c03fc2714efa51f8e98a66a0669cb71cdbc19f631fa6255ac0316095cd05c71b35761d470aef0a4ce7444fffb6d1a7bcb6c0a23ae7616bde024844fdf49e9e122d5878308f9d8920f8c6b3846aeef3205ab8ed6db227c54c866cf3cac2491400046133cc4188573b8a9c41bcf75731de1404d16a045b9a1cd909fd8aca97b18b572b0058c521ece3393f6b37f09cdc4c8f5f0ebe528f82c576c9e2cc51fd0f0a92104e848f1cc2ce712aa053cb426af23901f5d92145f7ecfc0723fe0d0b751441bb7ece03bb6143cee881befbca66758da81758f4f161e9b55c319e60259c2ee2772193c79050e9aee37fc816a7473d19bbf3ac421469425f33ac3bdfeddcb0f0fdd7845f2e0a269dc60b0d806b95bf49b80b51ad41769d4617e444f0c6cf40f999f10e1f07059117eaa40ded89ca82ba16dec77afb0240f6938a482732ec6568e60eaf9b9dcbafa9cbeb3792746e1dd772ee9c5f93a4d40d110ec407d4ac84cb5ca0c76964d4e8d004311933ddf8e71e36ab4eafbdc6dce62ad237070e98359d883803ecfeb9b3071e26213608e3751aec953d0fdbf0b21e4b851fa95327de6bd334e3bacdd2b4cb643afe1d97b65e4a0f5d05d460aafa11fd87ec5344e40592d837c53754c864a980dffe5f0cf9f928093327b20e6e1b6dbb6b3bb9564541cf01a1470715f3290dfe95b07ecb26ec3184e8211d17b2ac8dffaf8c3ff9d3f95cea21d79e93fb988537eca2f174b59df2ecbc706a2f0113ff44b53c5bc218b2e8fc0a0562513a399bb755445b7c3e84e8bb50944db6e1f83e251ceaa1217bf4efa1ea4ef6d04762ae17501311541a379f7b251b2c41cdafc71b570584aa7645cd964312c093abca58b27dadb79ee13c6396aa638a523cc12681f41b8abfb01c2f23a4ff540dcfc718232e62b2af2bf9e1b8710bec5aa7d2e91364ab27f381ee70d4607325c13bff68e402e0a72742f6a63ae972c6dda74b6b2a3922f0c894433f43360cba3068c9c76f6b85e979cec90da89446ae5db3914940e21159c14f90e6ea763a85edeebcb04fe8e11e2937d7a48c01e6175d454aeff1d004e7501c8e0424a17b1d4c264ebfe00b8099b816a8e75fb2df765ed4eeebb7b36c0df79361139c684cf4fdb80642da33c300a8e3c3628e17a15fc50ad3b8fcecb5524a4cd091bc0b2e81550c69e5990246c77e07ad92b1a0ca48322fcfc44bfc8f38ba91431b0e3aae56f4abf024a6f78a729a2acde444fec8a428ec09ba2f534845bb093efbfd473afa5f1f1f6c7e73ec869fa5baf3c2820b181b9837f711917efdde3d3ac123e152cff6ce6e39aa080b77f100eb3da4cb2ff88cecc1079d27a1c59685bd16fc79946c5e426328943455cb30d4d52e864a95e9ef324b682c964f31667b3c49f1706e43e8037495d78969f4c19a0f42c170eb50d5012d953a5dd5c5e0964ef6ad764eeb369a392dde67a68945b9001700ee8eb1b0f1ee1b50fed3f7775f5b997afbb4b6cc6f273d336f99fd1fca4e17af03fea1155d03670af9d84aad4ee89f04614e5b1c0aa56050f1b2c4c2365fd12661c99374db1404c2cf4133f4ed8c93b4576a3ca7f55a23d1ae9f74df959bb021886e0d41c4868112ffad47e0a3ae04153ea6dfe2a7abf41ff6ae81ca60a8411ad85a731ed1d14865fb8b0af319c36ca19772b97eaa215d965a6e8005100c106ce21d697e6b9ad7465358d19ea86339e3f25c5dbe6540ccff4a6dd4323c1d8aa2263564c2fa39ca3e87a55055e813f846cfc241347180cea5571b12b43d733c552520d98f16348db918deebbb514c24548052e8634767df1300f4a01d9ca +MD = a6f88871b9f52e19ce23dd00fe0162dd6a6bb39d66cdaf2ff84b55aa9ba5aec9d2d352b374097cb35f0e1b71867a3f6e + +Len = 19240 +Msg = fbf0045f3bcdd6ecc9c0654cc6b8ef9283107787396f19aafbed9b75e87744e2a574f12e0ba865dd1c59e1fe3cb1f4b09e6495e5fc936f668bef7c182e21d57de96ac97d99862c67e3d7f1336bbffc0a464e3108b11dd14003790600e0c4bc57b019b3d54f2fd2920680bf71bbaaaca664157476c2d6e63e4bd360b76828a178e0cad8bd946a00666e9d70439439ae8ee10285b99586576b4b45b4c52c152ae963c55fbdd0015eec01752f2e5e36aacaa35d8c5994f5cbccec1727b0965302b11f52715d6cba932ba85222bc81674760946eb3dc25eaeb6b1490e3020ca9cfd8feb93626ce5e482b4c7a717465942e5a9b7c20ccb22e5f4facf91042f8e13a67e741d59f5fb524f5d33645de728707bf9fd1fbb0a28ace809d9ad5f9c1c1ea65c13377518786d09027cec683110779988ab36d115dc3e007cdbb5baecf1288da76d743c2af9bf3042e8a1beaa8db2cec436b9e764ba43eeb26a4cae98a9bbbcfed75627c3dba365ad2b26d9ca1ccc9c3b240b567d4f490348f9d49335a262c4a0e55fb079bac4199f98de31f62a2f826bf7cda6c607a7deaefed0012a7798256c1bf37e92f38bbc98d64a6fd5525601b5265370e57ffae1630dd1810d95e66f8eefa3eac63284df3757fddbde01caaad5345f1d4214bcbc039b5b9b5589a803a7d4f37d79e439e1e9926b1e86d517de1aa62334726267beef2bd0a888cf8772356064af347505752e1a14a05638a82c13f0523edce5866aa433c3411de3ff4bb6267a187c8181f973537cf9c2a906154fa75e95182a835fb147c5ed8b4369e0b87b9611b88639ff67d3268362a2bc1a2c4fcaef8a8e090ea4dc3b16677a71e1aae46b538eff87e76a1d83f5aca224ab483e09a6caac61e7dd65a554290581bf1c054c36565a1652089727990753fa591216ad434ee2388be978971f465113e96a32cb32a5224fcfa1e47416090487a4184e285d8debe75b579972e05609c2f134116ae0f1e4aea0f46a1bd53840670cd9690d4e0e0618e6962ceb3fce8c095708059dc9d31dbd864eac615f0b941303c3dbbead55ed27be23b742961644418b34a3f645bf49f6d03f3ff72bf97c1629663adee3fbfdae328edd2b7bd3ef161e6860e6ed1cd5e52f34794fc49874dade4efac09a46b416f445f308696dd8f18101c0f248825df2e3cd0cdda15efafb92dc901638ecacfc63d78d6bd77a9e6e53af38aac0765ebaae774f235ac38ad2f79d9f42384444c901b220b85e50abd6e6bf5c72ed6f34a6efa1d4a3494cb10b7d007cc720f417f77e64418066a68dd5eab090dd37e39c42180b21e00570e9ff83b3bd377b6293121a7c545678d2b0f5b0217a6c2869d206b7e1bb6c07c6b249bc15d4f5b01642a36668fdad1d7bb190d7908d824768928f6fe405a9d8c4965476b558945785a325f29891f6bce81c31e17c2ec21d764a267070952bf0e102ca5400bc95ea4731144fa9b5c5efce3d733e52e2ae030965769a25ee54d8a273f5d486757cd0c188e8ce0add8d1e94a1bf7e934d98a09870fa2d6275d6f89f866168b527abb38af73dfe4a7dced1b1f590f2dbd4246ea9f92baab4c004f92ea6b7812b27b50b1a286e70c71b0d91cc85726b9afae3d5c46a75a29b517122d65152de471a2b3fe57904962f49cbe74afdee293f46397e6e4182a594ae9e3e2d12bda0975370da73858b0ee16e8c4a93ab5ebc572aa7b11e1abd142f4c0e83a97762a8aa8828535aba8c2b7c0db1245d3a6ea5713ca1164a529f8ec99e249bc1dbec26ef0cb442f1a4627c5dbbed1d0e177874fbd0d82679859466022982ff1ccca4dbd3759721decfb88204dd928d0ccf169b75ab9f6a2220564a5782ac25f0c64717f64753687898f8dd1007440cffbdc3996d117949eacf3f9c381e029904652d6bd5f67b8f659cadddfdad74154d8009ef50a6f85e29cecaec327028d0ce05d257f107721f2c4742152c54a52e8ca2441dbed09f1f65cb82bac51d71559444d06cb5fed990132540032a8149b123912c950622cff63521f1786e7a8ea01d8ea20ab341047ad0b3323886a7e455a8d90df5d5121d7b0e8e91a5ad0bd338c06fc1c267729547db7d9315bf5d078482f672b08a231a26585dddd2ff65e1980354aa1441080e7f99e0ed3b430525b65855f545b3da1880b90c5080d40d3c467cc9d580ee75d29aa289ab19a034b1738f83f035e0abcb029736743fc96635bc835bde98be4084217be4472155605d349f1d1df18f2c94347958b3405e058062cd772fbc4f0c859c9c6d5bf2d11c6b821d6db9191db0f68ed5efb862f06f8ef1a1a8436bff1e79646aa163feb1dd7ee471026c0d1afd748a4367edf83f18c3b1a66ba4486d1ab2218d0cc9b5660809c43087a15e154690af385dbe807875b15b423ddca21765d25c6a2c27a77c308eb9e259e38c8b40dd863b3db48c5b1afa371b9b57396ca44c6d986bf85542eb902dfce5cd08eb50bd77b2846a7c558ce0dd8910ae4efb3aa2ed8e68a64f78ad90a8e6d7a853c41aa31c34de4af0e62017c7211a4c8341bd5854b29ecbe68bdb12a3469c101d83f340ec3887c06a7b99018c5a24bc56be90ef2bbb7ad3badb1898b582af9e96d96ef950442d8549b43c3085badc6839e059d9daff89584d04ca9548218eae8003024ef0de4be42efeae275bc98deabd456caafaf546b41d97858ae3a9b5ba49bf41a4366d4f777ad9434866ecc5be516c6dd504333f919ce1cdfc1091b16c545ca1bba987c4b9cdd2b0264fbb205d86b3c1da7f4fd05b5b92086b47600e1f4079a6d7c2a43815985969436ebb1a32ddba1d4dd491a58bda16b95af0ab285d9e84c59b0a4906355afbd3225c430ff8c6edb4819cbf2bad88fe754dc4b99ca1bf0c9277f8fcdb739628824591099df9b2dd3c18400edf3ae8a7b0b61c31d776227f71f10716146aca7dfb1f956530c051f7189467274cae89a0f0166faa7565896bf898cd5b4d85785aa232d1fc64e704c9ee786a9ed082ec78c7f14779d2da34409ac1a402e35e204d1c01ff25a6c85bd40226c2cc275271ad8cd92c269c5eb39bed1e33c3724f42c3cd1f4577730eb794083228359d97c9adc33096371e6d97ec4400e50376e3506d49dd7d685604a888752cd361cfcd55080f9a1e21f57141a0541c40596db4f997f6eeef8ecc54cf3fcd798cd71a6d842ad6681c8dae24515681c2de1bc33e7ed268a6144142797c18659a9d1c29e307a49c3d29d094d1478d418706e113ea80bb23a5943664ed3fa0f2228ca76ad83003d58bbe71661284a337eb634fec437fa09c6fe7b4801a9a77e783e3ef59b7ada726d653068e62a936c9626bae98c3fc215767776230ac0cfbba413b7a730bc12cf4af8ff67a4c15b67a8e9883b +MD = 240602789ea8f91535fed9ce15b79d6d3e6cb54cdd4cb55326ab03ea76e0f89d42202ef229a55351b13a1ec143c29711 + +Len = 20032 +Msg = 82b6d4fcee076404ec0e88251df98b0fc80488007c8f2d7ff774be4d47975d992fbf8873cca4e383784938fbef8bbccab1fa9413a7e997dd08c1560c7e9b5990850dacdc14439b998052b99c9dca2716268a120b5fd97e06f8b2420a355e54cb4c49471e0f0e12afcad413f26fdd545cf05c0cd2ed8769628fee8c31b40bd6b44c1a6223022bd22b20754fe4acedcb02d717894f991ce059951e3c6742c865b24c2904d238c2637748dd74599e211572a364926aaac06b53d1e9589628bd8b2d161d3513f8fc4bf90ab58a3b8ba2b9121cea2e0b6a9a93b80cf8eaa5af14cf8d709ffdce8900141b30a59a71bc973f4c0a52651a1fd3dff00ef2f97c1cf2b93b235765eb34f745448054aae37929308734433f7f1292d8639f808e03ba81d29df7ec7453410967dbc46bc5790a80122a6366c5228b000479874ab022d0e9a11cb30733ecf85d014ac291f01bb6c3709f5f63feecd145ed9b8df767c1a552af21214fa89fa01c9bf8436f35b1c61bcf4df0e1f3c32e881b2f7b2fbbc882e38212076ddd55836dbe4d0ead9b2382afb99cde88aa91e8f1159f179cb51fafc4a4582e08daf4e779f0b1edf22a5932a8b5f4f0012d3c48aa63512ae45cae741e9d5c5ec9a5651568bc8ca6e6eb3b1e2d4cbdeff484ad96d88daf7bafb95e1919f3855e5748915561a7460232e5b28e67045fa408b5cd1aa61b1fd4a6d215e5dc303af85ccb5fef8c3b47c97e21a4c97d6842d4e6ca831c3a960bfb70b1bc2190dbe5f27d34b62a12fff8c371a5fb1898fdcf4a36cab6e3bc86dab9b65e3c165c7ded15648d804f1b7bbfb7b47b9dc3e04d6ccd9fbe50b85571f4d620df7b09699dba29b9dea4a6ce38056fefab74127cdf8224c9ad38e32ce1c11a553e6345dec3b4f6232d0a7754bd33b1c93b664c953b7a185d9f56ac6b5da94dfe83db11e47843434b849a0ad592af46ea355dbb52eaba71039d925a376e1436c2b4cab4a342cfdad9ea3ca67840e3f6fba040a5dc73acf762add437bb9a6a9e4adb1a7742acc0817468d895654e3588a485f7535a5eb77123da04891c6c134d3effb2a2ea3b7e01c404561dc5440fc68ceb690df53442a9ed290a998569770b45297a7dc279712272c89e87c0abd8765cda801bd57bb76569a4ceaf1c1bfea007605a4ff3ed01ab26bc981b7d0af861bb5b23c421be7d6e3f523913090911d32dac3a62a41f976687e72d2025e9d74f52743a510282fc8c163b310c75bb166d5f1502fcfe9899193e5143e0dfd0dd08c92fae0a9f519c8696689fe388ba773744a49a6629df718df302c3a1d4487253c794653721b2c52668e06ce1698d9af68560eae84c7c858a4d0396ac2bd8fef9f4aa4820af2edf3234ab7e4b41bce975c952dbc98ff83fd8f45ba2490d09e9c3f9793f0d724c5273a1d2bf6c37d0ca7bb98053531bda063e9112d1bfa2629b767e093345919486b1585c168b7450a7cffdf43bcc18aa4185cc310a58116b7cdd2a630a11358ee4b401516aef1fc4e73a3cb67c7daef15a754cbe345a83acf5bfa68eaeb986c3d24343baa5e161b4f2841eccfcae0335b8d6bac4390e1fae6ce399920585abbab928c69eaea962a930754d40a5a74201c370bd4800bc0ef84a12ac78f9bccdfb022933056d8f492b09d46e1a5eaf91dae30bfe5471ac7712f814874771a8130f130f32f7cadb3fc0e56b2c600e0f184a806e24ef74258385dcb1d107548fa67d56a16a7dadd46bf22c002c1c9f1001d80262d822f1715ad860b133c08cbaadcd31a9849efec3f648465c1955f8f8710dd1afc2f4d0d62393ebdb547b007151880eed2763a5f0074a9b479914010f926f551d896df99d073fe4f8dd4098fcba355437fcd28aa3c78193895460a29f8c88f773d695550d2d63b5d075153ca20f5c6b4dabf696245d7497e9f441c3ee87e01d7b5075ca70bd87c52bc504d4ac7985bbf7dbd4afbaf2ac0d301ebf4c45aafd31fba014410ce1337cd1741448621f39acff3476beafaeaf5f267ce325ec1d6999bc6d7aa32bbff0428a2b4d800c2affa62c60e3ac49b807f393b6b4372b09acbf8660b0d6137f457f1d92b865f2c160114504235fd1393b333f743a684a964c092121bdc40c4abb9b53505cdd5c0de35513cb3fc18e58d486f25d7ea190ebd3e15457a9536048d9fef40e42d1913510da5e5a3eb9ca3e5953731987cb4731c9aee8aa7d6d55a02711c873702ada626f08ed5c282ecb1252048b515eccb58fb4d7a6c440f9357b2d3a9628f0ce7fbc89488a77050adbfd480002ad098e222e1ec6534afadf460074e228d4caa7c86ae500fb53de344027c2afa0d492f7d8358ee2bae7b307d15883724420049cfc950b9a0999ba9442b748792c6f00f11ecd8d93a24174591daae250b3b4a8946564847c7cf1a2122bd662c670255c633b1ea241d20044bd741f1ae63c37bd794900d7101c029d9641ab99fe329fad34784f555413cd2c1b1cdfb29ba9524c32f1908cbcb175b308ce5f74893b84fb4e1d892e342d50335b5e1132d6c1ac5ca7a53d2cea02f1ec5018197ccf537d4f9872f3b64ae830616582dd22014beef5c0ad2f3e01d81f5156680237394132b0fabeb674fc0c15be21d06c0b8310bf1f65508d4a69fba7e90305422f2dcf4a265c4bf9f0b360a9537790e675c4d8c8e37ed77fd8893330bd3d3900ec14c36eb9a65fe5b3d8ad9127500973e62c6ab048f38a2f71cb4862d3ed4a64f457e64572c043a244d1bb7842928439e823902057acb1c29c9601e735fc8197d15c007858933f572b085204ad274963021110c017919463e2532764eb5026c10b8dd9ae73059a2cf1e33add6ff5a017bd5eb337908b7b38ca688284fbd3810928513890ccff9e4a1dcc3aac90e6d17d9f72412eca80ad69dc3edaec6f6bd998b20fe7c56a6a91d9372a1c1919e123bf32b5824cce5a731fa03df7474e0278963131acf6562cbc00c865a6cb11cde002fe903e3aa3ff15829fcda13ba17fa42a2b1e50cb962f67e857e5a16b80944e718a693c9f5159dbb960579f706fcaa67c2a3e9beb3459dab96c11d4a06f1db5315ea94524e14e0ced6b41ba90c0cbc6b5b5f954ff37945c9a8f530913e4505f6d02b921715ac8f24549f5ba409d6a4bfd55b745aea8c736b34912066cea15934bffff982dc4aed3ea81d9672a0c8f7f7b90e034a18edab12d21b79452865498f3dbe5710027e8f8039b5788f61822a858f1dcea80f1b41330a0a87b6dc2f5b78e21d276948c5da9b920d6e74cc60b0fbbfd132ff2da3fa4e34c4e8366a5e03844562e6d8efaf72e3497be4ad22032fccd3eeeca9f4f62ae6fb01174e537fe633c04601f997a9dce9b88767a332d7fb6b63bd385305b0577fc515a159181357f9fb2d2545b1337d2167b683f15f5db879d7c2b264d031048b1b98f2f138a6ed694e9ebd47ccdae82cff9fb6021812cb5aa8a5f769d516c69b66f1a8a125b92ae44301366a5b0e826eb8997a7fed85c8907ecd53dc94cff2234fb61ee37fa8750d70fb2 +MD = 8e2dff705dffa8faab0e5e06375d8a188602a9084843866e4c991a450de4c4503ecbd3667ebe432b353df3181f9d9726 + +Len = 20824 +Msg = 512fcbc41f29ea7a02b8d81e0cf06803d95228537df0f150bbd2bce07897b7496e5f993925e932091ff9464253fd9b61deef51d7f47d72541c68ca459d2af99c33dbc6cf0755b623de97de2a9167f58abd3cad01bb5a43a6d33f5572ac3ef5fe076afb8eadb59f4fa65947ddac779d08e0fee5d8bbcf8ecf461f066d8e1cd3fa52d3e07f00511416e00829638e75bc63ad00a064da247855dfcf8540290cbc157ddf1ca9e6703efef26c2ec51da979218e0987ae01a02bc2051979f36755d8d9ee565815485c4591454dfc0a435afdcceae042bd198ccf9d1fc38b8c2f414ecd0e003bc90f5b505741733b3ae7d26feb284e789a08308b6f979662156816477945a46ecf21b687d74ea6945ef157f807b21bd14bb8d488bfd45aa795fc1dea66fc0c982f68b51399d5adae7d4832c0a7ef0ff7da0fc0ee153ed70115d29e601b99fe62efcb9f1c253c51339fd6abee5347f18f4ef73be4f93dd4199cd2e1d0208643731931bec904ed5ac8cc8209ab94228b44b0578f92f4391b9632e42d63fe29a375b4845843bd4e90170d34961ef0e8a3bb071602218d9a7221dff0cc403cece50dc9abb6b2d8c9bac869d49870f101029f5b1eddb94dc8a262acde04916236d3e55f8e203dddc5a283e94b58c81fd67096b5566881bb2c7300a0961e7bf96e33a57e15dd0c55aa0eef947f1e4f01cdb5481ca6eaa25f2caca4c401612888fecef52e283748c8dfc7b47259322c1f4f985f98f6ad44c13117f51e0517c0974d6c7b78af7419bcce957b8bc1db8801c5e280312ef78d6aa47a9cb98b866aaec3d5e26392dda6bbde3fece8a0628b30955b55f03711a8e1eb9e409a7cf84f56c8d0d0f8b9ba184c778fae90dc0f5c3329cb86dcf743bbae704b8acbbeb39716c426ee3e0c5396f8014b6a8b5f2a2492e7fabbfd57d4ef5a994821533b0069771f9fe33d74ef4945e43cc7e20ffb0ad639b09b5c3f0e6b6cd05faf3ad926ed00410357fdd7d859bd892a6e9cd6ca378686b4ce009837586c7c56d988826f4d39931af4871f54ede856dd06c19bded32a35cffdf24898dde204f649461d21aeaa7bac5fe232ac2d4db41c385a4680054ab0c9d03839792357d207a77c92853bdc62804316fa2842740cb0ac6dbef8f56f5e6aeedc512251534d519a30c9e31956b15f462c5d0f54e5c4620905ed8ecc20a77900e57ada905cdd9bcb6ca98373a0ce11102b45ab8a2946f8f727ba8ab2e6f3c0ad5c9bea08fceaafe2371cac6f43235e4a1b99420dc7f83a20dd0d33ce48aa059e489c9ae0badc53869a0aa735c6160e9c04411d054744f2292eced249ce34117ab16432411e1c505f9b59bdeeb111e8adef2484993291e6bd23e5af4a00faaceaa0ddfa52b1106e1645f233c28d7bb526e32cbef10e46df82c23b12fa67629d961bee3a3cfa2174539dbd54d8e0bc3daee940153666cda52015b643818ad5ae252d7f392682b72cbdada26759353c48ee0848cf90bf8d0040243f8906f1bca540db794039cf3b5cfd7c8ab36c11629e8e482d3526a3eeb88af5bf2eb1257d4b8e2fc2979c6b13cdbb125b813afe980635b1d58f21995894a5931c78abad8268b830438678dea9479e78ff19eb83464a8b4c2925a82a335e3a0340b01c1131c465e6e455f5ae64924eb55cc3a629d2303a20113ee4dce7dcf04e111d2cdaf4263e5a8e4b3a65ab7574d15cc79376a581e7357624fd3adcd7707d7909018f3258ea9327b1708ae8b9b8d5e66cdbf427043c943e1d1ac97b1661985fbac6b85220129998cfbea68226c1c8e1fca62bc083e144537263132a636ca5aa79a1debe475e75caed4d40e18438b237bd1ba2d9c47e4d9b6b019f528439ae448eba88dd95752ea45345e06d9bc49bcff863e1d891bab8004f1cf55c426fba14413a3e17d100cc0d49cd0f8e330e8c91f4a57027b03d8c6968db9eae65b6d202da4988d4c5a658ef160d53ac13bd8c65fb0ad82ce9b0d1bdfc6721b2b5b8fdf6a00eef7c3710d931032e372f047aa43353baa05106bb90e654e806cffa1a43d8dcb2fa77f0e657bb5858407fceeddbe345dc50fdcd05d0cbb885d66cfb87ac90d75c322eb8cfdb755db2f80439bd395d19997097083799546f6618f381a54107d6351d0756736b475965e6260d93c689171889897df8f369c3b454cb541c09232465456b947b12199698924e11168b508782223af5f1e7f2fa97125c3c950ccd081332c3388fd5d35a7485e20eef8f98b0fec41237ca7cd75d36db0e01b853eec9686a750b56be5dee21464cccc5da4bdbb5f6790d2abb0034ba36496a2ce56cb08b77ebd579d49f9ac65df21341754f50ce40d73db9aa56c74aac75409acb3105a4e18b5e9f1f81a58c533eab0b678e57722a94902054bf5d0fc4fa4ba90b2310dd2ebf6d71a8ec599aaf965bcab8ee38c93d18ce07be24403106405302af2c185ce8eecc9776c6fc19f964ec2671593afa00ccbf15f26eb6d7fab0204cbe336749967f41b891f9d730ba0f27c999b6a62efc162af3f783082929b07930411f43cdc1dc957c026b320878ffd15838edc48cb75fd949d54d7e501aa928563fdaf510f06c908dd00655c8be9cb57e57e5dc3dbb1092be94b35f745504f365c04bc439ab97f99003b08799114e9ae1fc883668908f1efa3d9cf5bc6327a306cd5afa707bc59a30a45311a3fb7d472932bd1a36bc4645a6d8f28651cb7c00e06cefdedfe65e3913bad63b0d039185fffe6ccfcfc99bce6a6b9c5b5b1569d19ca8f2b7ab76ca9fe14d214d00b2f21c0b6a7d9e5a3ff883ed0082bc01ca58e0e1864bceffb3729443661c8fa38e08d4f47dd9cfffa4c42ad89e8cf06b71b0f35810e36b0124bcdfe00baf491f213c75623f66aae882678cd24ea241c292d9d3a84da0d5d951114a6247c2c29bf3f4c6ffb90d763a6049718417acf52eb53b487a456b56b0c2da9b6e1f3d43408a999070f2b77d20c7d2a195019255d6633e1976012d34ae007d9baf9d08143570949b60f24a05c03e6ae3ae143ca9e3234a104388ccb8fa926412cac80b7da32d4baf75c2b057424d7900775992397c7ec7f38ae2322abd00f5c86aa82fc6b24728945769cfbbcf7c67c197d77d4ccafb1d8bf21845d21ed39a8435465a3689489211afef91788f549cebb796e32cf522b4a02431eff74692ba10d3a9751651b8f1f0255ddcd8a95c80497e9fae1f247bf4fac73516e35cc5bc32edd969ae311dacf760ba9a21451c7ba295f9c46e7f8f4660842da4dc89f40ab32bdf1c4652012def090eb29c8d1df6bda3ac0f612fe5109b0320802bf5a80b5a34c27826dcebdb9fc7620c91a7e6576351c1753f5c05bb74eb169218c76827f1b18a6496f6641ed143bd9048bb00085c473fe0522d78b0b0e517c2ea28bdc63e4940c7ddc8f35e4b25272608f2f16f702c2e37e0cbc5561a982cf8eb3f2e500ba5eb8b447b2003d614a8b61b7343f667a99762325e741479ad5c1c6135432d1e6c9397133773753ab84928c7677d0408658148900d0e5494cbb016953184c63f4740d39223751d3fba116455f628001c09f4d341001a7d349b2ececf5c7a8138defb270868ad61adc209520d47cb546b3cf8ea8f6020f721c4e02d57ddacc7d0d8cb7bbf2da3aa4b7737db3683ee67bda79675c055a82923ef +MD = fa6f2bce66e628ee4638b8658e0cd36ca630c71c7e1d6da2189b4e8965a73573fdd137d23481ed07a8405c04b1c9e48b + +Len = 21616 +Msg = 2ea36a8deee36b8e22e1e40550d7bc92aa04c2179cf4e419a103a1695a1dc103e1c743365b639705ccaf0dce30908e29c70e8a13b09f314cb9a8e6fd7641f09e9039731760599f25bced28001181f63bb2e91deb70840f0b6bc1111f28e1eb18e3ffe478264eedb69aa31de41e335d8f169d65e7052be71f5f5409179886193981237ca1d4cae8800dd7d4c27c2d2cee9933484e971c1f513c6cb82defb7e2c813ac25d99353f84abe9334e256f7c920e3b2b06a4de02167aa0e05a955fdae8f40a3c6698b7385de55de278bd21a9eed9d22848150fe53295344d8d2f1dfe554b10f4799e3b1f70279c19506181d111d6f8bacdcc8fe1f61dc1519f1ece5efe00df88fb1c495b77fd242649c51888c7700f60fc3dc69ecd5f08ab04e6d9735fbfd6788f955a82b1d096c7d92a5e476c4f96a977db4c5214e35a986319d7e1d6c296219b9bf71bca3c644c8333bb737cc01f02b54799d2894537c81e2a42110fd38f42a382979d2dbb0d42dc63c8c3757c18fb38e5376686ff30b8aa8a9087774d322a4bfbc46d68b70239592cfe8dd2de14f187469da49a7bd5c8acdd4bcb89aa1f66d969f622e7cae39e6e01d5593150838404ee4503303587a67974ec43d374b776e05fb554476111f0af84e5ac1d9de531464eb618e4d6d6a0b4f3fa86c1378ad8f54f8a57f4141dce7228980cd3f0da77cfda793c24ba3355c3ccff1aff5d1a1b9cabddc46a4e77867a6f64d20103a3c6163407137c6a3e444a824266da7fd5ad2b073810368abfc71cbbe4b22130f1ba9dcdd805685147faad969cf0defa5e0c34e411d1d55346fecdb09023b12344b3eb1a64a85529f0c7518c475f996713c75ec5037fc332bd9c21cfef9d4d351d4062ac4562df3ec958fad5d9f98640875cfd2c85708ca3742dad7c6b853200dbfeb8e5f2cb731a221dfe05dd552201393b848d006a9e201b31c5388c722bf1013d4279e5589d469b94df9ec9f8f94399f1a9590ca4742303370da6dafa77803d8a83baa580da4eb64c13f3186b78623a0dc02312e4ab36dcbbeb29df74c158e175113abbdaa69cd2a23fb551132bf799ee6d7dbb71afd6082ee243f27785c58d7b6f7c80dc7eaba135b767fc96907e2a2205cb5ef1fe8b060e8787cc792170a20bf2e29cfcef0582852f5d834c22506b272d8e85dc13c066d94f67b60040c4bfa5402f78b26434f70eec388dca6e38ed9c4959b8969c009b2dbe665793504c46e5db95ac937ab48f31827b6497e07221cfed9f7fc7d3d6236a38f619b8dc61d83c29c791269f0ebbab9688b01b05a698508ed243d677bb801d63a984d741cfd426bf37ded24d9dfccb7cf2e8ea6a40c1bca1949d48d42b41c5a2f311752cc0cb141068de3d02fcd32fca4c778c6adb2e62ca48f4a595afe8e19b655818f9ff3db2a1cd27bd5ba5cf26e2f80457a3c04ef17d81d26318a3d5ff9172c14935d5ac50f7f743d9b423516f7b77f7f291baa3d71fb1cf07f9b1998e499dd57c7cee879d9759ab18b8fffa57e86ecad3a104bd82456b331aa563c40c18591d391b946fe6e476c600b6863a8eae2f05817e48fc916310b6f1a804b5f78236f0e5ae81c5cb83d13d1849709262514b307275f201731d44b3537e4f1fef0bba0928b21119b9e9eb78c5fe2982716635c42d248a3ca5b869c086949d42313954be78a2dcdc407b47f1a0212b9b4a51913928069c3eb7e90267218769cd9c8f99993c1d4f9dfddc59402d7ef13d3ba7d027d99882681813a10faac34f225f72eb22096dd3df2071a1ecc44404f8f3dd64e8d856e74944ccc83298d4b7e11887dbd16731240076dfb4401b3cf14ed166d224aade3562dc78ea6852383e7a4642ee2fbbf39ab25f7af2e288b620bf72e8aa43b77ae7352dac8a298d7a4d5e671894b59e21b25558d8005c934c2dbb46b74fce84c99750e6dc19eea0f75f2e098d51db74480579e17b4f16c16b72d2cb67553d9956a016668c2c30134bfe399c25c839e4d30e8087d94199a9908a968f8d3d197b8eac264b3133867af4a5319d564a39565f2819ba768a6da257ff66f17d79da91fe15d0f36fc26a4e6dee869bb36a524f48fca607d78bfb522e2bd49fdc9e09730177d6fdac5b53e43434a905a1ab2d362d06a5ee80b8db2f8faa5ff90f1c1ea5553c88d85b50cbf2d4022969c57f22b177a0a9dce6b38590f8f5798ba966929f55fe670201554af0c9f188467378cb37b58512619dee732cf697a1c6102ffdc77018020942db4944726d361a500a8f3f631e800afadc2c6a14fb7946f7bac8b45023ea6c74555f8489efc353dfb7074f1cc76337a20f29ceb0ab607cb4a98bfc629c709a3a55f6276ce3a0917700abdd2f2a4c8607e9f3c16631e7d5db7eaff6240c4510f95f95b398036e41ba79e57036b1ac64b11f02f8b1f98fe0d09cbd4810ddc87f25c4b6af97a98ce31e755c8eaff7f35221f0efcb109cb93c38a62c58b5ab8b236437e171e8507cf417a569af1767c1ecdf1212befe860436780d85ae8edffdac292baea10692bf033a6ca547f97b88833cf5045af83fe17e134541b018e5a077e91266c38eead38efb4d97ffb2bdc7b3e00c3d158a34e1519eeff913c0771425287eb24fcdc35b05decaaa2cffa8fffd5cea3575210f747f8f60043021feb9226be309ac5fa6a5e6695664562cc7a1de07f185f0492a2b5649380b9bc9d7100e27c1e57fc11f54cf0f834f11c6944dc485c4972d8f1f766460ea77cd04aaa936e0adde207e97d82e45e3d2c65999645f3ad5f1735f49d6287af9c13a8ee3f53b2b094c3504aab062b0da981a523185ecaba81d783653db10dbe8806aa51d74897b56c833dfc27e2ab4e9f7544d07131b5cad8392b0a7e5cc28392de403a1b7b03638ca938c6981e4e684792aa684ac69d278cc593ab09698d46e322d172b2f3df001cbda872a7c0fba5ca5f40b34a236817c403241285e3554ea25ac4c246b814d54648f5c6fbd29a4b50646c781a5200e3a87c46069bcf04e4f80f83f07cd3892a30d1868b3d5b12a3002a9781615b4bd361b7624ef33781500dc775c4fe4b254702e0c58814644df503382a94c844332e173cdeb33422b4da080d02087428d273e5fd198729f4328981168b7af7179f3ef19424fd079985ca12669282857377f701b1ea4e2313a9a6a14d24fb95dc764918469af413a3dc67525c8dfbda33fb1b7d83a1a7abc99a958b645cde4a99a298b4daaa5f0148a1faf1765c3c1b70482781fca458691fed9f68e39aedc0580a73ecd9bb087890bccb163d650aef32456337a25c29041c8a0a605348ee9c209621e8ca34b521841522ea371130fe82da17c50031e425c95a1e9a3bcdaa89fa2eecd1357f2fa42b954795eec874f167ef8a539b8c4f732c43253f2391e92decba1acfa2033ea88e22813eeaf3a070ea6c050afdd33497502e657693fc72300122f4099a28a9d5b3a51a0db1f87a221239d011ad7059383a04276814760f3b3e4ec2a8a4563ad4a407582bcd41cbb0e73f339133c986fff4abb33c2d6786f6ad27ccd349f5b74d692e84c0c6345ac1716476b218488593850d511b6737a008559359b3106de9e70804e5f3223bf1feb991e09be3531d9ef511492d494e251a3e7bb3708127984b8b70c5ed6bbd560fc6afba751c5415c54c9ee2995b14ddd371c8203124898c21f9596ad62822529ba0a44c674bb236b2939e668825f290dcf560e91e82fc8c105ba91dd5e2d1ad4a505ade9af9d5480dd2f81b21304e05dcd22d566022e962c0b847261220342fc6ddb7b836ad25137d0f944a8d03 +MD = 88a7ebe36ed445be23583ee13431e6291a08ce9a42b7ec012cad0fe205bfa04d84303e571f0df0803c76d7fca5a7d8e6 + +Len = 22408 +Msg = fe6f4286f2ba2ca82b6c4221cbab60711d2ac0f8d75963c29cd9b3a4c533668861c9a5057a0d6e339bf037bd8e9ed4376a689ab2ce01c58e67ee1790b838c2341a64884501a421aa824fdd83128f8a75915a984187a37b9cadd1513baf70c52d3026336d0ee90db8e8707d9cdee74bd298e702cd8aa54e93766aa9cc32433618abf9eda62a43f903d63b5e2f7b0fdff689f91f7d6071061ccaa1666bc919dfa094c40018dc1aae335398ca656f6d0e8a6b77387a906d6bdeb25ed242fd5a866bf26fb2eaacd7f5f1686f0766446ba036474895eca203448235893376556ef421cde14c4522e094e51ca85e5981705ca124567efa1e9a5baf5c0ad2325abdf16b2d041550c79e53b6772b1766afe30b740a883bcc8d99760e2ec9f79c92b045f11bbf57342279fc0c81e07ab7552e755602c6138b776a5e46b3aeeadc87adb75a9efa5818bcda559143b0cf71fbb862f012f8505f6274db00f3a2f21bc11d104ebf9d62251b2728ebc4815dbf2ae99aea4506386fd81fb5e4f78b5881c76918778591bb82c9ca3bc20c3d6dc76829e4eba0d914e460d3b399c653653520f7977af8bcab594e2956bf24ca47b140e00a9b2d572be583f89ec868e05e605731550220077ccf30ae4389131233a63776d2a3f369c79bc7f63e18e61c8e29f17e19b5065a740ef9bfc9c9e1fb79ced75305abfaf82e2eb7365b3247ed3cb97845ad3bb19edd3e30c6af27976f6050a7e06b5a4beaa9c5d81ebdbd933daf3774f0d73d29b9fd865e2abe4a3c5531542f83cb59ed298088b4172b62d2f330cc6be6606377951d0f0a53bedbd8943504f8a5ee4fe89bfba0d28a6fc90df707a0e78f1054a2198401bca977817416b18689af9de5452a6235badd4f994c317cda6f53aeb9b22c7c83fd94b0e516c2f0026a079ec30bbdfc6ef57a947b9589d7a38c9a0439b0b84bbd537c33afc98039a12417b990423b12740ac70616f2e75f22c4ccd87da3a43ad849c9c6869238d38a3e46b8f5f28eec6f812e6c136a335d80a251f32c93d891fc64e332127bd207e740fb6199249dd286e3158f19055519e4ab911def883b98502e323efc8b371dddb3a07e25e0500ce1b6e638d1cc35db7769f51d6e8bb797fd2e1fb4ecca4d5d961e9cd5402c8fe1a985082de2c6bbeb6063e3bd50a333d52aec105a8941fd0e3a09572f9312429b06d5e337f6fcd090c821c4c33ed9989b00f16efa7cf7307af0fc3953c59951801f30df1db2745a14d72c01f8df34cc31a7c4a25a6cf4cce7e180aa0b7fc9a4d91d1d64a9c03842bdb40b0024dcbcb8df46ed12430241ba9e351c121d69ab24ed2725daa1c85071d488462b0fdc7944ed06f5287ce6e5e3e71359d9522a46b70666cea9ce71c2cea07a66e980887459a20e634bcfbfe82e09a3be67726ba3466a02a339f86498406bb3f2a14188b4dd4787bfe2023653824e0fd32445d3c8ba622229f3e649dab17b5b72bd188341ba24989257def22dc9fc7c2079920bbff936eeea3d62c78e081a996ea4ce2124d6816a62112b9c7eea5c142ecc23ba90ed2e8f6d803286be2d8e956fbe2b0b641ba624ba78b1db4fcdb6ff8486be89417c922d3a251f2f71071f78fc73f6e9096fdaef1ff43758a75a5265aa102c20dc90a9efda92f16ab080176a9e2bf9621cbc67f31bed87ba8e79776d29d035266810bcfed43170de827fbc92dc4efa1fa3e9935735cb67aa0c126f3f8830a044eee41382b0696434efed58193e44c2c8a9dea744f6f6a0d02a0d80044f97372175f4f6a2f7a19413ffb031264c7519043383eae1e4d7fad3ef52f3e4076dc0660528ad863043c924bbb18fe28f4ac67b4bc0a65789d43c5c64c91006371904baa6687f57e3b6cb0f2ad8bc758e2993d6f87d21cd6d5630128f5b1e936705cbc6619cb63d9862627b540eff06d17b46bd43a2a56c16c69c9e7aee67b21f98dd313dac985fd8af561042399fbde1a9a8d73217785b0e8a49a72d6b318ce83a01a443806ee62a056e77fb42e5c3451981cdd0c4e2c3dd0cffd6aebbc549495301c77a007ff917cc7358871219408535994622912dcc09b285d307c46b10cb4ba341ea1515c1266c2e5aef90835b2a64b7eb32679f9d1ce6a54540706a09f48bb0bb9ba57666df4d64263aa36a3dbb0da564072c825f9e0f25d45fa60c5d4f79efdc9699eb0fcad7e0647035180ec09a2958a9ca1c391594ce296e4e9734617e2a4de2dabce4707369bb9a2dd3f5c2720c702127b6540bdf68ec744f54b5b40327b5874f310e5887c6d3bf72e41a48fd1553762d97d80757bbc57a938b09cf6eafbd8edf92b50a7dc055e7ee93a6daa30ea9b0c209ec92648e5a870184573a288a0dfe7426000fbb1fe91a8827c100ccbd1cd8d052b8336eab56a38186c87e9a804cdff53618eeabab366128ea9243e0ec52f43ebb6572ddd85fd6fbda84222b592239490a252fb32be5c3b622422a4761f30ff48c1bd71ade1d2957c9b2ae42dc39155aea4e5b3d699d491b18f83e69e5a82eda0d01eb8b853aa37d997baa49d3367a0f1ebbf9b02b07fa3d14dd05af3f195bd886403599945b4d5692069fa704c47150ed9591743acbde055d19097f39ed9dd63eff3dacd52a2dc8fe7c15c437890105a104abf15e90fd5b3dd3d24299ccfdbc7e678c2d0e4f4ebc23049208362d3216802fd08f5efe6028fa34e661286081728ea0a9820872b51b4bc7a0dbc8590c6cd33f87b604be0e52dd63cf42ae4e33e0b6d11c158b3a6ccbbcecc6a5b4b598ede15b59ce16780fc32e88154ff3411bef3e236e4d5f4f7ab6be9c8dcec3e8dd82f4accd3f5dd36c6135cd3eefbedf40856dbd26914b5ae7c29bff7bbebd9be314525a6b71a1782c163a58d489d8d0aa8b8cc7cc4b1803bbd9993c1add6a75b389448cbbccaa0f57c984515f870abd61eae36be9e28ef1ffe2027cf294911f54cb126a46b93f3ff6625ce165501a4e6e88bacf04be75cdbbc51ce68949fc40cec0041d939e2ab00fc80a30704cd02ad84f591ba547953ef56a30a3696571812a5262cd2ae4310bade5d66507e3f6faa726077854e5b6edb7b985da1a51b98a6f6873a194f41df8d5a007a8b37d5265e3f40e0e9a009f81089a65b422749c02a5e980c25834b51e91e1e723fa82ae1495a3b404fe0019a3f1f516590b35e191d5bfd158fe0ec326e890bcfb675ad0aec51a4282094decfb78b2e1f05dfe52e006d1ae8a0fe90db7e396cf5b7f6d80dc7941ffb2414fe030a8b90ea19e36b59740075f80122d5d7a88d96869cc248846bb0035ba306ebceb86f2e5965844d35e8b492b638f417917e142cf4dd5e5af93923f2ac25e134ad31c45aef4129274dbf07f5c5b0e8f2935f6b94b302219bc6c07e628f352a45091719bb0e655875fb97691388f187e377ccd27253a3c29787820dd7574948b97cc8dda3492a88b5e9e26670828347669967072a692aa7bab60e70c596eac2ee72d79ec82209306373306ea134debdf8928e7841361f4791ccb645c1e0923f7085c3cb7e2b99e60b31f2100a327c4225ddd3843b7cea38a95629eb30a6c7f4dc100de259c8552029a0a7c92fede47a5ae5a6d99d9023e15dccd9dfb67c04b97dbc1681df7ab3652b49e21896d99fcd1434a8e6dc0244d84bbb3691a7b2c0c3f1f49e1863c53d3b9c98017cb38806c0ee653a1a6b55d583ef7bc0bfa8fd94cac523d514ab4a7afa0a05b6642a7bc1ec55d1db02e00d5e8ab5b918a81eaef92463f48c050a4cc546d02d517d402759a5c7151c2ece9b38433aedaee99d6956775ad10378057ed4a8ab796306b90d2693dea97e0c8b820b53eb73e3f2999f352a1633dbdc21430175d8747bcee9afc12ce909611aab44302343f6686187c32db322a785bfe22bd45503a90c045681b1d792bf75d7a2645f37d0efacb50c77a8a90ca69181ccabd5cc9971846 +MD = 4e7fae296c6d80c6508379f94e01d80cf3bf9e057f579ee91df6d0f7c1fb85e4fac45194b91d0b1a9bcb756bff848a30 + +Len = 23200 +Msg = 8a981033d7b4eb4cc9648ba26ad9679c1550dcf32df17fb80ef6b299440f7560fc057fbcb79e8e4446c2fbb9f2db918bfb829f9f44574c504c302bb460770f200fcd21eedff32f7d3eeb477abb5a855e76312938d58cecad79db953d713fc7c8ad371d50b57b79009b28986d2d1eea1d70a6a1464a5908d77f3d17bcdf30445ebd8a9b6aa2fe11d443c1161bb1ee69ced02a304f0a8448d7449edaba11122fed260fc5c50f43a20120fee80bad94aa7b7e03fedd7dd553b4b24805bf71ad2f7ad20ec1e86213d290182637c58bd6542b617932770b16d276b082c15166c8ed0fa8ceb75b0536498815832ad2b17d0fe763d6f5a61c0d6c26259336fa582d10b39099d0a75e74b0f1fe5beab9895185b66b606ef01883cacbfbc48b41afa2416f72b53353d795afd4bbf79e0279195ba06261c6e06741946d195de9aed4f0284a366b0ae7d660ed38339f6f36eb9f3cad2e1f24fb710c711467a677ca2ddf6c4cc5037aecc59e1325509b85dc46a9cee6b8e3b1cb9faf09c9cde65e1c2336b67d05c5ade90b17c8a3f932077cf200b952e8f494d757f005933367c52d1fbfade6dff9cb661093b5bb16ad1d9f576ca6f9a79cf6a702990d7b816fd5838740fa8e3be6fbeb3cda82749054f1ccddb43de4db21ffc40970c8889f47b5a8c482447d02d56601f7b3d6d74d6fa88beca2251a6dccd6b5d23edfc275378f243f4d34bc1a0e342fa9e859ea36466d64ecfc07a346e5a402c7caf931ec86887d5f6872526dd98cfeba3fb4b7332166e0458b8a884cb490344fdebfdeea7eca3d8b9da547e27e96f592818f462d47bb865f1757d06980c3d2d140d9d058657deb2db275a460447c9c9976919d0a0195dea268158384936564b7b9ee0f1f84c810ac708c70d175637b38e563c6b4971c7177456daa85339d726811a6a42523d433709f8fb31c57751bd597adc9115177c64477074c53a993854c10ab96548ac9dce10729752933da03da5516ac0b76cf6672c78a71d83d7024cb7ea2ed9300ce94676f00bfe050babbade5467989504bd76afa9f21fb365cd84d2236b2c9ce0be16aa1bc9829f83cccb80fe638722514a393dbed65a4de7e283ac50dece03da94e52630609ec7188bd619d9eefb03e515154311d44bb7bff9cfa2fcfa3bf93d060877e86191104c716125515a82ae32b6a17c3d6c7295606bcf52825df4e18a7a171bae3d080f921603201f46ac85cca75435ac1f5d4b7bc119478b7a97516579878dec5362198bd212967e23e72f055fa40be85d6a5e549223de62c081cd307cd05b4d654dc28c4e45e50882a10e8f48275b7cb72842ad477593c2c052b98e0c97e02bb319af35d2e3b838d398a8cd1944c0d3bd25acc8599514061a78aad0a134d911fd5413fb18927ca9b70c82411b82c877cfd0d14850f8bbb70f6225aac33d829a849bb55e87c8aeb57d9b3f8df767def37fb874afc61717404fad9e7efb28991fe94ee7d2990cdaf6b7b31506157a80b13d5aeb612186a35c3bc989bfa17c793cabec4ff9c4b56de7f5e2b73bfe213a4b9926ca0edbbddc4554348c0f6eaf9f5b4d024226a388e403a8b8aaa22a02781d03aa84fb8d234ea6397cf9c0ab4898063d1f52fbbdcdd9c4509343db2174c6c01d64a0c99e6d66f95c117775ffbdefc80c9216eb6c1acbc47e0137496d1eb2bf46c391fb87e2b1b92c8069b1c4a6031b2c18f27846e6166e9190e96f7566a8750075fd03e229bb603b4864f6a2677e7a2bf27a24c6b6663d3bb0cedfc2c3348beaca367535a8e078f8e7eda71198be5f8ced1263741217baccef7bfceddac36e565ed2b1eaf6cd7df5dd58558aa04f45bf375fd6d77fc751d5bb65594f13f186e392565c8a89dee9a29759848624adc7338fb6d15955d1bcd6831f777ee53b80031345d78ce891469fa455b68c7c565e9a44bbf5823ae33650050ed9f5e4fdc4453005b57a79911f4d92d15e163de56653f4e3b5daa56868c28fb7e33c89d4de1a972a78dbd33ace2cd1510dabefb798e12ea284db2bddcebea1af35bb5a4d3803b72884198c1aedcdfe5927c5e86940d2408d04fc14bfd294d959441accc35c90fe9489cbea9e0891685e4eecde570897e91798c6168b0ef5954a90a357d3d632fbd2dc5b95507927ade4e599382d5ab266b6c2b197cbee5173f7ae1d81fb1f7a3d880e4112bee9e13d617e536c38b1b2680f15571eff0b28e3f4fec1e1a5a2c712088234c955c56ea5689b94012598086b64f32f2290cffc73a6f538ed700aba37f8fa8f4f918610647eafe39d608834cf7d0e92393da73c819233fb1bc6b1c41dcdb9b90c1eb696f8f83dba77660cb822abaa38d9324b79bc5b3d80d326225511eb525a9549d132e189c79145c29012f375687b692b072482567452ca2af71dd2f656ec61af6094ac87d0007ef2bcc5c05ecbe28f9474dd52086af967218a6ecf6339d6f7bbef3cb896d9709972ed5107ec46f6b2eb1f04ca05a3dd10c666d875b67da2ddfbc78ba42b666a1bcf9c3538925c3059bb602b48c291867d6616db546484f86aeb9411edb9e9657c6553f2d0e59e280a61e2c16cb3c67e03ad04f7e9f1f2104507df6ff3b6e4fb31e0af1a7f6a6f364b9b0157947db53c29e7cbaea4e347b2f2ed03e654c6db83e2ae080c827551e373b3565e5e74e04976c2e57023ccf838eae7ac159f5e5fa7f539f95998aad8d839476c66393dca1e60baccecd4f3861a9394228e21e1c3cfe010ed72007f865cf2b38def933ce5238e3bec65370b63e0838f11b09af5ba7449df6ef67877cd1a46a4655b2b06c41145c2ee79d88934234114f41d591ea63d88d1f8476f083f789b867d493f0fe9302dec3dab27d1594b42e24434eaa1197423b513f532c53ff067d6203a6dccc738ad144479b39855d10f538c87ce3186c0b0d54c808213412a3220089f25c1e07359d7ad55ea22bc4d1d0537968254609ba6defc69db97058e90d090f7f593b778aaa2d2d05a24ef27e263cfe1956e596d7c2ece118da4ef85fa7453c56b96cec126124f79720370e9f5ebcfe975f3b3deb7411c2836e151a8e587bb97e66f98e532829da1d032f41bce29b22eb2991247deb2711e55c0ee8fc89752dff462a84d768027e9e357cb35e19a1111c9b2e73158ef575478c818733a0f941e24346f7268a788c229d668b0c6b9573329c5c533bc74597b0e6b522bb07d09d2e44970ec6f453acb22337f24f4041f2361661ec78fedd1f2852f4df1a24c2e8eb3063f241105b8554af350fae006b342ff08665539986b4b8b884e6da6196ca21f1f3ca1f4558c01229aa0bb113dce1251213e6550108fe6600ae60822516edd96e8fbfe6fa1104f479dc0de0e25ca220645099049e2ba73c12ba759bd708f61b8f7ff920994ffa0188143ec4d3b31f29cd84a4ebd8b75442d6f04cace13590ed3c0a9f5489da4a413c99c5e44fa8ff4738f92f8f1873af7f35980e3daa6561595d79d90b327a9bbc7eb5cbc8bf04ea838af5637ac42860fb15f9e2d79a5f1166da14d1ccfcf7957b37ae78f9898f8ae4acc16733469e0fbe605cf10119ed491c9b23ac1f4f18e1854dcdf3fe1711847286a56442049d63d1fc0963438fd5b18489ee958c93a627e2aa5a655fcf52833500e8823068ed043bd3485f2564e0f0a58abdb29c306a0e9b349df5a51b192d3603d4e883d8559b04cb610d3000d6af8887d72bd68e293fb7d5ddcc5762302a7c75afbfc6be9fd035ce9b96ebcc7f9533698529c315ae623e746411fd0b5d230f40c22e7e81914ad4c34022de2ea34bb0160fd4e92ec01e39f878ed208069c0f84a555e3589f4b2ec9196d8928f09780778bd53d23f261baf4b628847281ca83e7db077723e8faf8222e6e18e587ac53e76d6cf06b2a902a8546a09fa6b3d84e9bf1aa0be082ceaa05d77655aefbed95ff7a46f0bed117b2cfbd799c1b196fb02fadd01a04f910a4d2a938b7fbe9d5e71e56d5c6b5a262d4428f35f2562edb68f153fc3a07b87b89271807b842bdff97d277abdae5fafc1f7c30484ade60b5c9bf8890e46f4d69c761a875ef1a04b548aa513bb5a6676de4eb4532fe2 +MD = b77fd3d5f25b7a3c0e42c707a9bdf225a8e842582308a73526ef4768f497f47776c4ea0ac5c6d1933946b14907e58dee + +Len = 23992 +Msg = 003132645e3026f6a2b9d0644c16e5e4d1bf8b53a51f0e1b999bd45a67d193418b1dc1ba55624c4d3d078c44763f760dc68e12e194892fa343dd550bbe92fb035491fa51c76442779f3ecbd7c43bcf1b4ce837d492065361888bcd134eeae08f0394c573dbbf6e3c716677675f915ad60dd6e276c620e21f11af26bb3e60aaab3f2f0a66b9fa3a635b88773a6fc97d06ae5ffb0d595e44a38550474bb77dc120b069b1738a9d0db604aab3981b6ca272da8c6ae27248e1b58d77180be0c78db5ff4aa2e276314efb15d713cb8b0130e33764173d3a67211fd12b8142e2c87734d4dac6fba43d67fb35147f1ae8108f216defea65d9426da8f8746a3ae408e563d62203063d49bf7e0d6bdfcc5a2126f42535cca476622b17ab5abb390f0e400cae29424a68ddbe4c45e31b2a08bd5f24073fa340394dc53591e65c888a62f1f504f76c104e82cc2c84841b7c1b6ba178ba1459824b8da1ca531f356f7e8c5ee77f9567a016bf51e77257c80abab455b9e7bcd4b2d4aa299e980e2f351314f1a9c70a1d42e91db545b863081b0e1fe1af3540fe18fb2ac37809b9302470831105855e743eef23600efeb1c4f83f34ae224da7bdfce997d9214d2a2182be6125c1619a56db4f59bb0aeb47e5ea747b24dad6f9fba5c678d2620d69eb98243497a602c5aa6232472c01282f5137d57dab9e793e9f5cb9561601f17c74aecb86ce7c11e7581bbf761cba5d71f2278bc1ac38de7f9169eab80dc6a06da60cdbde320b3509474e1f6df4fe3113ae04becf8d6eacc4b91482261f7bc34468f97bc52b1a1731614379b41a954c1f6f149530b8098b13ffa5a928b4e60107a1bfd3c221735e6a8d42f6d4f847579c1ca1396b93d125764b63864734d103c03ba40c5d7cdcb3b9b392be54f4dcfa939df1d208888d1ff48597420a070271761df14e1ea41ebe28bc7cf8bc781bdc0bda4c8790fe072495958904fa9541f2322fedc08e020126be8e48cd95ebcda60cbafc808a5d05da626381f59d46582efb59e28b34fc4c9483123e6465b5baff9f2848e67e0c50e962d7c73d7e830dced98316d698fbc9af8030a5e6b73eaa90ca0977e1f475b0fa9edaa20322b22a7ad495d2ca43683e20bcd1c77a10ed65019746d29875ffecb51c525c6f133d75d9f5775e8fbca9748e3fdbea49fa2cb2f90ec7a1348812cec1e6293babd88ab7944312024c8b2833a21238577afc635b2036742cdcb6161cc7044588dcf903b752c64c062a394b42043cce56369ff8261f1735bab986739f6e7c908a2dfe0e3fbc870eb1504d7c6b5bc5872ea56954dc9eb9f394f380921f5f58f08bc47015157a8d414de64f22744fb64929eee4df4544259403b12cd96441a04fd1c9d77f0233e1cb2016c8a4268a16fe8d3a980128ba62024d1b13b135bd5a94a565b9b4ce8f899673063f6c49b1ed8da3b00c234ea87823ba5abc835b7b90a74fbfa01c41388f888dde3ce1a56f44deb379c8ab80b470e19496afb59f2249701701131f23d3fa8bb8c7476b016922d905bc54038489512321f675b1c75a8ed645509b253b0bd3863ae9e972274a8f66e0a2399122cd23d0aba395dd9bcd66c420d7bf96528521605c6ba95eddb8936d8e53febf2429eed278c597a3e521d91ff1bb07da30ecec0366751098ec5b37d655f62bf45044bb10d083046a6bfeefd00027fb599de63d56a031a5861cdd82897eb3489770c79172fd056399f60db1bf9541247b611b1b4151c5f09134e37d6e50b3de124a5979e046743c9a4ef526d4f83109a943358eacc3597921fe182e6e151e74cca7a37a42f2f818d43b5f56f8702032490dd99e7f3c16c99f40219f6f131c932d4e4c9c804ab87daf85f34a11473628c585b154a205236771c3a9d85a94d3c29d09fde78396ddf693f3580908c39a72837465b7fe66a9db014f56df18de6e89849e5e64311e8e08e84f379bc62d7598eda19dcf79a6d0aeb6acd0be903913704ad6161a7329f43d165f370932cdee2369d600a5fc0fbf67f7a1c07da9efeb005779ce123200361c85ec015a33ea2e9a61d9364070e79f8e2ef7ce224d471dc0144f2d5254ec7e2d9ebd3c96b3cd5c853c73e8a9bb7797abc276a1b76388d139e71fdce4c233f1f9c79c91c699bfa16d626cbee6c707d0471be6e243d2fb31f139b382cf651db907694fa8f1cd0625d83b8c5f017adf72e9a10f38cf84e8627273d1c81c24f4fedfed9f281f36ea0f512f9b7401be46a41abcb94c6260978f44fb4256d2e6fee70ab954ba58beb5875da660a4ef7a868e61d4abc6044e4fdeed3bced3f995859d0f373605a54cadb78608a498d296e5594651ae4dbd365977f7993ce89a18cf4876ce0cb20dc91cc553bd2ff7b2f9ac2d519b8a899600fd83ea7f563cbc57240ec8e5a068991b48d94c2dc96a988d22310b1a07239695832a4c54e278673ace1a8ce6b8d0502b7a1cfac03a998a39918efb36ecc3c6db3393a780a943a3a914924a381d913ae1f9b5e4df492b93e53f6baa5803102cbb55e7826b7346798c3d9f8b4397545f250fcd93f0c0c9b87975f19ee612b3d21d304d667d0828f0cb9268d56feec1c8e0028c8d5d651a03de7b48614ae253c0ea0deeda1e2f92114e5b16b324e97f7cf81b195c8c01c77bfa99977bea3b99fd0834f266b6b22ce3fde0d0aaca51378357a29d87e75b7728b617067230e52d9161ed8092ad579d6ec168bf44c9ee90e6e3df3f97d43dd313fb3cbfd083a7b684dc80c0e76be78eba803c0a08898833ac86192813bd6d8243af52e71c4a4addde6034dbec5829a6d024a5db7e73e7c7dd279a7f8309b42dc0bb9fa9dfef9749a8d753f92adce78eb793e9572fedd2f582aea86d7020da7c93086c2ba0d953a2ea2823412760e7ed77b750a8a2601365a1028c1a616aa716c37d0095e7704992aa3beddc6d4af26c197624f65f3570be450d8eadde4fe3a45801a5103d1c40bff2f8f8f28404d0b3a3baab68efd2b2a973b6f54f6f3755cd5b7ea1c42845ffd1c9478eaaf2f44969206a2f27d9a1a1cd35e50b279d8ac63ad3db3dd832534f713810f52c41842536956ef65aa50804d39282165eefb0fe93c800c174e3aef847453b76a1f81b2bc40cae482adc71a46293765f1bee11c57f43d575c2c2bec2fafbb05931a02024b88c116fbf05434a233ea72e872015e3a64a41a0e757ec75335f57e603c0fdd9bd1e81b240a8e6bcbd9dfecbca0f251fb1e82f8c0e2a9ed8997b186540e0190f79c9e658d64ec2c3d9b8637d0b43a7424822847f5dc43db4d556dc1d0f89dc91949526aaa87e3f261f95bf8d72430514120229c2fcac32d18ef889579941ae26b78a2af0dfc0c5af363ef8432897a55db88f069d146ae4f76d6a095b0593f7958ab1da72a29cbc24c7bbf8e755c7f1e5e1d10357cd87baee19b342717c041fa7b4111e771a9b8c4e7912a5c1205b4f7436d1093a4e8a1e7d3bdb1ee1261e8e24deb2df496e449df5f54de919b2dc29d15f96fe8cc0fb776e7beb84f22a68add4af9d032ec71f57e1e374ab3633d2e6c50328cc964a632c8780ea5bedb16ae27ed0d9746f4db523d9e98dd361cac3ee18ca9059a01548a791f3e08d1ae2ad96ece86e1853278d67a6b2a248e29f39a9925ed58ff249354f537bd501c1e6b832e4a065d9247e308c10e4baf401dbbb7ffa64ff54d30daf8c97c1d29f2ae4131c2fa0c59e287924fbdf28debe06a6d2d81a8717928d8940c6236dde4f9d0547be958f964ea941f31bdb25158e3827041cb86d243066e66f65c02602f96171db7fdd15e1d3edfd2453cc84674ce087dcb39dbe2e16a74cc4d136944585bf4f57c6d1dbad143dd6400d79ecdce046eddf0591233e2c97e2c8734d60afdbffc744fd378902f9e0f4ceb0ab067d33b282977a5c435a5a80d102b1cd3248e46903298bd8c7e86a207e56a42a7a512b6c6e8b7bc5c88d88a840fbf47db1198644288ed87c3b684f439d6150beef60b1bbd8436e9557dc9e585839a5268629aada61fb4cea9089909278761e2f0db3aee9e848bd949b5184d841462a9059803971d4f94fec6c541655381d75447d51083cc821ce8a39f3227022aaed83d1271952a90f494878cfc7d404debdc6e742a9fd9d560b3fdcca606823eb54c7962534c509c6a2c75b048c5605425f7ef28f77739270db7b2adf27076e93c923518270111ca5c231bdfb4e2562d0c131473f5ce8ccf6a5 +MD = 1c471b3e2b5d06a6382569b12bd43c6ba3c1c7e47ff0aafd51d896fab41a58e00b14250aa556a842161df9f649327f64 + +Len = 24784 +Msg = 2b23382c218197e4c48025da42212e39effa3e73452f40d5299de360705842d4a258c30dfe6f3f92be7e646c9ce9583494489f70ec603f20725122930510bb7f5618ed51f05d28c27682d5ab2c4bf41ab95503a52c0522fe3cbe76c8d457cba9cfcc7da10033989a75f23e40fc304912e78932b90d063299114ca6a7e713b87a93da3ca434d9d842423868d2147ea045a54cf355974bb41978637cd7452ecb192cacf203963830e365ba1b0a7a1f41db7b061021d3bcf3a6fa6bbe01f68e4caf22a866652e36e7a567e21e9038f974fbf11f4fc4c84236661ecc35cc031d8363fb38627302bc47afcf173b0b56f681cd90ff79e77ec3c4846ceea9e173c1b75e41c3acd51db3962a25c03823dafdaf7adf0f5631fe28e6266c3ae2e74e6432c77bb10d3284011d3df247de81cef5482a67b5ad4b4f5ae475a716a7879ced3ac732694d3241902411bc13f5cd39c89204ae5a47dc79400698a4ebc16966441886ed55347e5a46f3cd0e8c45ae245dd6313e67ed8d85c194b7eb22f934b451142b34dc8abeda0dd19a6d1a95cd969c5bd99f4265067ac7d5fc052115908cfc75df8f661699c6cc08a06325afd2976d6b22575577ee6039128d7952dd27f82d85c9875ba1b8286bde06771559642fb84c37f007edee40fe9392cf1c1b9effcc8a12a324f3c307d19cf532525c2b6765473ef2bf8ead2100a03490e695a0a9c1cde16c27d4616ce889941a4480d1465ca460e3e721d40b26819a431a14d3fff4965f69cd0c3a5e97ef0cb9548cfbd586abc44de66f0a06587dee701f60df084d2db3227e62f7e5c6148497e84a531bc9a493b72440f81b7edd559f5d416dcdb5d9071fa3a040095d41253a6a8081200ed6f4aa095b455181eaf9593c7f255412e380e9a28cbcd345be172c40f72dec3e8a10adfd8a9ab147e9022524e1aea74e934807e5ef144a64d381f5d477fe883f080e4868939f41b925988c7d31b1ce4f318701d290f077a3c88b1b8cc89cfbfb981703b23ffb0bbfe5e115af35d5cfff056460d339f660eae45f28d2b1b04d58825367435657174270084822b6c3b4445708aa4fb0d10f227122a40dfbe286400de9fb83a05a6b280f33ad3e7b2285086e9b6aaebe278c31b5ff15a46ed9af9a820247dbe5ad115b0a8bcd6c4e9b4832934425572ba1dd01f91c0501d23ed04e29c5d4b1ecf711c1a9372f12f5d607aa0e2b65b4bfe60c7984a1fb8befb8ef434a5b296e7ee17144345f5b9a397ac9582779b12c429f2180a0b780aa8df016632debcf7b63133bcbf22dda6ae22f9724265692277b73220093861bc6738d4c951a9e4c3e6334773d2cc733ecb89f78f652e98f0d330b19e0a63554476a389ac1589c2a2145ec2b842a55ee86837074b6f45b3047320e0d0821ecb3963a9906cf300cf08bd3e56187340094a20a4a934c54d3fd3b4025075f4cd5c119ab579ba8ea1627e4d3c4202e92efaca716d6dea0ba7a7f5225f80ecf6e150539841b5e32cee456930e3471618b4cbefd6fbb5c9a6e783df4a82e2a40d1d7075e8f8c5956239b05024cdb5a08683c520cdda21523b7f4bf8a936f6398bb4150f1925393fd3366bd985561e60b72e9f13b28331221df168e7aac65c2c0757b67585617140d446b04bdf06f1a52ee7b22f417155a7e2c08312ebcb64ea047aed4fda381e5709fd265d9e7ad00c6271a6e9f73f1f520e7ef300c8a0a10207802204641390d0c8cc4655400c29f4d64ec5ca2046eecf157f6147ee00a0e29529ed29df7e694cb52698e970457ffd0ec1c7466923546d7c64264eb845d52a11bab72698e3083933be86708ba13293808d03e53e5ed0bbc7afea8bb3face4721c508912cfc1e14e8d697810ec9f246b003143d2c43f4487bc506955d99fca829db69e007f3eb6e391164a1860a2f8531c660a49f9d3f820d4602d231add0ebbe604399a69520a3a8f156486dfc5aed7a4971b214a502f6f0a577f8cca0fb8033e63e24a54a3e63bcf8e4ec331b04ddedfeeffc3805ff15ba65de4f8b0dcce44effb227807d951ce98aa91381e0add5216903d9563a747ceef99e6cf95ed5a653ff3808a4b9d54db3490b44c6e7b671a91a85d01bad138b02e340c7a41e9634e777485e9e897f64ae96a3f66e8adf11e985ce86e4f84cde7ac56de5f7c79f2e7dea5b7fda66e3f03005dbbf05645864673d46544e8690d5cae25e5e70e450e18beafa12e4dca37eec093af517eee2b7a69395cea4e2700f77fcca87abef4bfc95db9c8e5a455e7f47334a3f1284eeaa2c3b355ca4967aea16671b081552f0de205ecb68874b456fb5f671f381e0dcaa6ca69d94ba0d12040aa3d83629c9d014bfc70f28185928cecce55ac8e27d4d46ec3846fd51d0c5dbd9457ab8758e7a2ec8a6c04369f9592b00626d15b0a4b0ee2f92ba0d086c16d016ce7b05654b4f9adf90875118a656f2d50011707901982ebb387f3a4a49759f37a17183957ad0c778f6ecb780dab2b4df30e05fa81e6386f38c0f0ba3f37287a050d6d97287ae53096c391d5f20fcff73977239ca55c3657d1fd1f781f48e28057f136d890c28cc254324c8fff3862136861f956c321868cc66609470b7390ecb6ecfc63572d071312e0860efdcfec88c9f6108ea5dd30f55f253590cc6038a66b2646a24565600d17f8c6bab37b7640a45eefad11393a79e45f2bb92ab6e595bdc69cfc210f9f97ada095fbebe5062241c11e1cd0dcae029c3f742ced1e9ca3f6f486d9b5d6ca981a007a396bb5a716e7462642aa709377d0ea974fdd3f67b75dda8da1c75febfaa742fddcfc925e04df158e86669af2bfc88b1c8cc2c24db9399d38bd205509a49c8ba64c662435d47257de52ce04d2c4cc488c4a634e5792d3681093885e2d7e4106fef17114336ee5349f0da8563b6d24496ef0898c8b2873619c8cc7225e70ddd88c34e50a60bb83d3581ebd3736a217b74ae8fc23f36460b06410a44ba462ba2cd87b89adc5a1935d91efd550c94beebaa99984bc972ee47ef088e87e073c1e286b2f26a669095cf9d2e7b849ff51f279116be9ff7d6f45f3c95a5b6590e652f4ccb9849c55dc27d0a46e2dc9dd9a681d0dc6f293af0dcc3676f0c5a846489eb9837f6b388f003c0a8eecfd786d0f9bcd2212692135f2c1707fb1eeef324b499f19eba322215fe3ce19c9f000b698d2b2dab7145015046cc86d049ee15ad59dcd1564f30112e06444cb6ece06c01e54f4bc1dbbc9592d1467c6539c26c8cfe06cff51257e6b6a06952f415f3594876aba50ad2834095403741505b16784225ba3601cff4033e713e9caab6b3239bd5c2c1fcd22382b617f18df82a54c94b4569bbf2c4af0723ed1672615b9a8b7a67274b0e6707dc93bd17bae31407c026f197ba4e9cd3531578938cae5123d172cf4b78b61dbaceacc41c4097c49a0d63aeb6c97bb52b8771a82833e853e996036292039a42b6d97fb161c79ca8a5f16fc1696210a9f204c6f06710b5b05659aab5ad441192867d7b09aaa8584c962cc9fe020c93e7e16b83e5b2ab8d12f49cd75cffe2b279943b2d31397b510cf50ff0a923318bfb442c46fcad5cd4d83ec027bd0c4803548a8304dca0a91d764d2b82573f695f60c4b77ea9b9bd239caf741a5a54ec7adfb3f5a04072ca2414f90fed8cd92c8494ddada9716a350fccc1190db95c588f67bb037e112246fb75a31d90be62e39213e96f35e8316cffe51e3f905e9514c7890a2cfcc321b809f4b5e51a608f371e7a928cc28291bd5a72115830bea19999b01bd2baeb0395e62ebbe6f917909f70154376ddb51dbec5f034e36d5dd46fac798aa526dd4a5906902fa3ab5819753d9076cdc61437d9b8ec1361b4c0dfff4641b114cf3e6889e1b58b9bbf86ac50ed58c6f23a0472a6b9c21763956c16d11da539922262e0911dfb4a4f8437abdaf5faae74a82a50ae2f1ecb699dc40b8d89108ebdbf0f451701fe062fb7ffba4bede287c57eea4448af5e99d41c7d307d1f202af7f387f874342a29ccc9233a5c3bacfd754cb8d01eb11e2d43bfdc2828563088c17e618d413b0c3fa71666be5475a67a04803a8688bab9d038f6855537b4de42aaae1076066d00b23f4e1ea8fd228b87e3c7d3da2f42de4d143efd49f3b195c3240139452c70c41c05cedfac9ea8b891a372194d6aefd7de6617986914e2d394ce16307d3bbcb2f78b271e1bb19eba31c41d7f52d3f8530ebf0f0b44e3bf3421f96b9a70acc769bf4fd54e88fe6b1cf2b6287a7cf312bc788f93ba6018ad1415466fdbd2081734edc4580576ad943d3efa319f3e30c5908648342a4d0c431fc925a17913c622b10d793dc76767b0a77120b7521915676bd2896edf6e3707a +MD = 4d241b96609427aff41b2d90417050e2201b9ff5d7cb32852ba2f51178f7d4f6091c89a004c1a11a90f65d24324e1772 + +Len = 25576 +Msg = 79cb0302813f43ae79a950e0167832923a97743075e4cca8cde4fec1bab5fdad754453e172c0c4242b4e2ee620feb4d41cfd1ba9b90d74472633fc0628af404c5f31855ecb4a66758f21bf15f467ca9ab08d88146934635475e51147e402bb83c0fc5f2093c773c92a8bcb12999dbc0c7fad82188b41dff83f62052cf494b67b1f0caad0d21e314786f519881786d25410c6d05d291b315b0e11a05c624f795b04c92d159137e9182ac5721d770c5497eb413b8c4aaca1a4695ca980361a4b4cf79bb298d7fae2639e659e79c016890099848b4df7db76fcd9aaea3f76dc767681eaff00ac4f66516b3b6545fa8bbab4a1f988473790fa8ae56429422c7f4000291edef6181ebb0a18b18f292d552fde8b07f92312b3737715f02f305feaf213789f1422244f2ab52d2de3cc625b30a4e015a888902d2aeaf1b7c4b21805d3d6f5d66c2bd7cafb7b32192ad7a185052e278d5b1fbae4670c0221af705eb82d722829adba3a777683b0dc2cf1f0bbf5a5e8d6db9097c17204cf97ba1139eb460e99019e76533ee3f62fdeb1c359e54931ac58f0822fac92fbe07fab3eb18668d3d1c709082c0889fb358781f5e3eb4af9f97b619d8b8e1019be424b9ecf71d9e957e1b417cdbbb1bb4c3f632e96b53d265aa7f88ab24d3485f04962da9a95e177b3b9674c3c41a35dfb6e21167b2c6ddf54447bf1acd34668fefbb8991bd8caa56eb5ec4f8380a70acb7c81569936214d71bab37982068ee971bf14845823da9d0f3f0ac7aa6205ea42d14c96f9bca098387168cb3bd05431d0ff40425b5f5b841ebe885cb7ce0424ead5497da1a733e731d2628fdf18df67a322027c2c729385239a2fb7b4abede14bf142b49bdd2262e543686c77c678b4739023dad146cbc5a73ac780a8e30848eb8bfde3ef48b533db2d440a0ac16740c6b06b0354c14a6f3208185e9c5d9d82540d44b1a3cf347f9bf9bc12a0f3f43227eca1a0bccd5aa94a6be9fa9701f4b60eddddc6c159e671ae0d992c414367b31bab8f581251419b79cb03fca1b7550d9f6590cb50d0142e9bd3a2fff69907ea2c56fbd45d34486f46912f0bc26707af910b2768591b06e1eab1a134c6dd1d00e153aebca560b74a392333cf03f953c36c396844e32204b024115c72baf7f11cc20b70b7f3bcd656dbead7f26b558171b6561d08f6cd56c3d05a9d62d9d0cb6758e6086d4e30ecbbb34ee5190364d9e3f9ca0c5b9a04434376f42aac2b4ef3092a4d4087bea443a14ab823eed20ca23ebcfcfee6d8af14589f47cbf7b85ab029c1a6dead4b00212f268e5b19e03626ad8856ba51b7b61229d2bb4aeb89dd4cefa35aab86fe2ccf8dd139534235cbab56e43f0a43400182df97b86e31a5bd0d845ad26fbbde1195e4d322d410dab17a61581fb4647a78afa176a6fe7114e43c106e75f2f3f395ba5cb2b0a52bd6d2dbf76c5f815d6d04e098f8edc352df3820ba65aafbd746a1881cf84a903c31141540a96539d6218b5ceca4f5857d0da303abc9db540fde1e454d2c5a5bebf3617263969aa4769ff66cc402260b9aa60c2b0b216fc342c4f23a16d747cfdf25a03888bc6689e6ee2e58489be91f50b35ae101f6ce1118fe07afa08079b4c1cfb9b0d9a132b2ce161a68a2f6a487473a776db5cf60063b9643ec12af58d238f793227bcf64e5d420a1e4f79cc10c28464a1750348c695093903895ed4cf0eda718d699ce66eba313ad137213a6769bdcbb27faadbd0402fed5dd51c0bdd887e62f1359249e8ce1f7253e38e5bd8d4706b2e4dac3589df6defa216db31350afbdc023e35b768f37d4f0ad74996c19d5cb179819fdc6fdd73be64d124bb6210d32b44c60fb54be4cb3f8a84cb81de1ec34d289dee46fec4b1e83a867120e134850f1d7f88aa2dfc99b2477e8c937ae3547ccff52febb31fa8eb87c958f84ed091c600cd292c7bb55955c6171542248580eeb449dd613968e936d0fc34a7e79f7a0e932179a2b1a99a888af0fe24577fc91189fe6f1dde1ac358aab1acc657dbbe37592ee2b36c43cdc91aae9fa0a03c9d73c5755d982dbfe7df896c29ca2c2fcedea7580cc5080e7395d972824d8b369e83db514156b4c2c729d18e2429b1063c73221f505e11742c8d5c1f3e8185081cc0501482dfffcde1c627ba247ba2e987833df745e5152f490e16f73cf30a2bc8b7a831ca9a5b2bb842f052b3266e64208d7f6256008f7a6996ae8d0608971bf2e8682b612c7386bb1ed00a58b06fe098004b031926fceffec567531248b8535bd10483ef0cc5497ab82b238db043f97e7a453c07ceca1a8908f5ebea19ea6c43eff1bddc91ccfe77bd8640aa8c77191459e28f9a7e836488dfbeba1612b9b14bb3d44ba271f700228d65d467db75ca2a2da77059acc5688ec8464ffec982dce3bb10aff913d0191ba63e712df3cc7700740880cddfec910b4111003c84f249ac743b7d190de483b3a69489658be7ca37bb8a235f9e85787ed8938d27fb6481f66db925aab6a0fa9afcfc9fc6fa541e4072a0ea875f0c896a0d62497993760062061e2c26a491c82217db269ad59dfdbb27e158ed980e3e4d4df1c789c3936f6fdbdf03155e3376f995a4b0798421e2f849cfd0faeff711a918c689d1224909806d804cef5a02a181d50dbfebac9c588856c0e527bd53adfdfc54f2f825f3794429865c1d1e9bc24b846ac769b549e90bed79280c86906dcc7721a567554f391bae65d337124b43c6f250496c14d6fec36c3cfc01e259db8507b1239726a8b3774ab324c5ebbdb074cd32c86b61a0147f51a0e3b0370c71c83c87c010109c9307acd2d331f14f92e56396c6f02251c4704c2971802b24bb06642a3d5aa997321d43696113c99d658953f0b792bd487946aa5b280a054f21b04cfcedef68252b588ccb50d3eb0392e12ce53cbbb910cd72fa9a79b67bc8406625844446c2d2e92a079d150acc3eb57d4cc8a8e3ac371b85cb8bd90de53c9188ac64e2e9500cf60232334010e39b57ce323f9e92ed17fdef8b93e888d8188fa83ff34c4f764fcc81ab42449ed7a5d4548b9e8052125fef20b9370aafdaf8b5355ed3e301cc27f718c13ea50cfeeab590a789f099a26b69b9e309c1fb54398cc0977b4978c801e058128ce3d3ffd69613146651e223c6f82b777090e3da7780da584dd24cd08a22902db1738c20f5d04c60d846c40cff04f615001a01e41f3bd34fe02fc69c0d28715140f6be28c50ebd0b4421a7c4702a9a1a3cafddf7bd084bbcc6b4ae81278c7c5bbfcfc26dc0bbe5723e8515e0d6d388158ad4c08bcd90c44d66034d0655a9117b82713166753246442bd386f87f9a50858f2b6226bd4fad60429e2ab20428b15f3d8d93b95f3c5fdf90bf8361e6d983e89e162b4f28af97a3e0d7d00adf660c65557751ccfb14a2d3018b83b3a93b82cd4c27846b8c3af376c552d58733eb632c4eb10427b575bf9cf2ea1074431aed921dc22602546c415764a193adae4366229ddd23303ab9f6bbe93db21a210214e5978868ba1dde11c44316a2e4aae875d6d75e279cd76bf8ae58f8d11bef8ba9162decc4e944eae55be5547bc2b66512b76fb699c437f625e2c6cdf60ffb121ac26561d326662d2c7cdfdd96de5d23ed52eb78e22cb9031f07c70fa95cc02fda68c28a1be7fe1f67a577048c8e0bbf4627cf17a95cf6fd447bbe506388fb4f7887b9b7f7a4893c17745f7bb5685e81bda47f0547cb6e5f26bd3112ad2af8fb659ddf8e0ee2740dcc580da5a9d3a235c4679fd4560e8ba3365aa3d8fea945be3219987eba385afee6cef614e2768325fadf96075c8cdb6413c2ab05d08a6e025e99790c920cba9a07579d4bf7c78decb17af610b3ccda1c1f83ab4bbb44de625b8bf5ba1ed5ff69ae7087ad422d0ef488c8348304450425ea2c18fd177f1348a96f9309c93ab5e83ca839cb6a3da2d80155d5c0b69be62be41a98ac8d8fa93fd8b2d56e29915a90327d1828d87fd6018b925e6c5327fc989ddd9edc860d0cb26a043169a87079ec405dc748054a04fbb81c32e8528fb3f687f3900f895dba4acdc23b8ece6e8066b6c8bbab7942dc30f731f7c74d19a8c022db10b810183e63848b584013c20a9a364c69b5bce0b84bc9a2218bab8c57701f129558b2c315871eae2c10114174f12f67560948ba25a6bfbb2497e62e2ca0ad389273d9d4bc300cc90b914f334c06029815289525a0dc4a0b859e8595b4bc8dab9c9bfdc3bef8cf6a8b26063e1c33606d0b663ab9b646e901d8e212496c3e00ea1833a7167a4be6e13f510eb86223c934bd7491ecd2812d3c731514bfdf9fd772a9dd6e539aa3e3eb7ca4a1489a319dadafc643458215772a0899f56f6b7c51e3a5ebabe17c8b36e7e783664530f75e3666cdc74a417e6748fe034ceebc3e00aba0f0f876bc8c5044f49fe654c2dfab4d570d86719d266e17b7c383b43e6f74393f8fcc59c701d0a1183c79fdcc74e5711508093201980c14ea6d22366e8b2d2 +MD = 1405434caf2b81a133c800119e1016be5f57ea1baf92d681cccef9d27e1a954a2df60748a19243ade40d0b99554dbd81 + +Len = 26368 +Msg = cf2aa6385f84bbcf589e9beb147d02e5d56de17fa8505dd38f371b89de2fbb4de65ea280d14efd2ecd8802416d6579f44b217c8af3317b3ffcd6837f78f3bf568f1c3f2866eff8a246a70cf0faee4c3078f3fb27c4bdd53312bf50812bac2280118c0396e610b4110a22406084c18283a30ce7c0e49c769817170df9be02edb5b6d7783319583a65622227f9d28523d41393c8bc1c77635454093f4efa9f27dcc4252667c670918496cf4724aee3380a11b1248332f6a55111ba70e8a728d8dd849d949bb7ffc158ee502b47de83c80fe58e857deec045759655272f8d4808a03e684a35b2aed3c7b1ce58cc2b0cdbcad75172121a7e4baa2a00ed8b73a5c00c3aadd09f8025cebb297058195d2779232f2374aa7cd7bdd716e3496422e7070bbf95af3fe90bba1b9c5fb1983c7bab02342b12adde74a5e4a328c32263b7e68516486e7fb408a0cf53c2eeaf8fb1784f2f92d48306fc0ab816f4e32dfcbd646088ed95c6abc687be96c294c82070e9f2687f4294bc18f53dba7232edb5a089855badac7b94ea77d2ad872d4ab56105d4271be548ca706d5ad6c737cb58085ddcd7af3c08381f78f2df38419d172bd4dbb48d4408f7ab7af7b11e7a2dab9fe94d461cccd45f0b930675fe56290e775ef056fee73a0a7224fd949d847c780a34c1ee1be547d056cff7b700f65562edacfc57965748cc6c7452c76cdc2185f4461e19d50ec955a935abed67a88bda34c5e5fd7c1b98054271df92b40a829a03284e0d71cfc2b4accb0b5f5af5333ff5b19591d9bb947c9b248c3d9d970981dfe1371218b09ab6069bff550263b359d779f25ad4c0a2fb2093420f4e0a1d013179c372f23ab9235fad7016867c74f08324e6a296b12c4879c8e751f0eb25e1a1f9d97326f488c3610744eb0fc8decca0ba58af4716992c4dcb644caac38bead668605fdd676d5eb2b3651cc5ce5ab4d7442fcb0d78516f44a2a245a519b6e479ce427c3e19d1bbfab9b9f1cf164e72d0c8553c135dbcd90757888708750e973134661372941da3e21f2ab1562823cc3251b14a7f5042323ef2fd59fc5ffbcaa7a1b46ba060b7de11ef9fa6818d428ba6e42b3f7ad64b419179eb02a960e547831d14cef10309343131ff1679cc1177d38bab612b793fcfa6f639cb36ff34d46cb06e828d07796de7eb344a656dfa57624d19fabbc086a42870cffcccc5503a0a63aad09bf47150dd27258a6ef864f4fa335d5051338888bdf095dd9239a240063db000435058a6bbecba1ebcf6b717444360ab165bad430d7d73b5b1e390b00846685aafa596372843db4d76ef5a86e787085532bf5e9cc11f51ce504b8351b787bb26047a93cbcd327060c569b70a8c073e95cce8015d81de176e98fae4eabc078fab6d58b62a52c4619fd0ee356adbcaebb20c5c004cf4c3addeb1771944becfce3210c6691b5efe9652c0053c707bd8f5f51ba5c132c3d5fb66c24a8c2766e55e03154c146899eaf8c1bc3734e2153946a6214baed6961de94df3fca35a5c532966a5721dd7ad8f6d34ed0a858950f6c40d45d42d0213a160dd6e14c8a7472115a3e8c1ed313ff5def27a08982dd5155971b0caa87ce56b465c581a62d4d0550c0105c0ec3dfa2534448cb9d3964ba1ec1c8ab4860db2838513dc96d9aa9ef9f5c924f882c5832655724ba49f8b5b9f6454fa1b2f7d23ef034a1f1194f15a14b7446fef188f85002bc4de5165d5ad19ab6228860b94dfb9aa494c13fd71abaf3cb70c2f1465a6bc9d816e488b3ce816a88e3d7d821a8fe9605789227bf13ad16b6d2340e00d8e6192f322127b88b59f431f6188fcd6da850fbdfec8763bae822caddda8e24fe6f7f46023369b81bbbb645fbb30e19169979ec4d58c5615b0ca67be61f184f55687aa11983c55efa372f39474fc9913e326f5b133f68448e8b204e9d8a22dc585179c4eaaad109914ccd807b3758c24f13bfccf428f669cfd41ec766a4444891cb2b25f810f3348b7d2fb00a121228c3bdd9b652ade65d8988005ad3e5e3307c25dd48b44ed28c4348b45c6668ac4126814baba136ceac6607538d57d7861082022ea1b1ccc56d532009ca32938d88020e8411724bf5b2cfe2a6e384e1b3653de08dc57303625435937eadd12b2c89c0d6218c4856121d319a78d1cdacd1ab2a3179287a9b2fdd5523a15bd4b80fa2fd58927095fdaa5835af27eca491975eb1758f4f3aec94654c511068bf92ad8002066572edab04e0368152a8ac284afc7e3d2ebe36801688959c2a68f4738c8d997ff8e7a1d6d831ded1878a46d98300eaf8e5d9efee5cb39b757dc115b333480e15eb5365198ae978e014f5f73dc61882292346d99fad82f87d78f585da383bea78bb5ab9dba363af5da9904fcd8a8fce5e8569861caf532704ba9ad760e1d5b918c741e2a5a83cecaab3ddb2f156e34a098ad677ddc8b091aba1158cdfe6a1f466bdcda1f00fd1bb47a232c351a1cf6faa81f2116b8037d2e2cafa18cfad2d26f30d426a5350ce85c51333f366f180b9b22961053e7c35654aa6bcfd88bbd3bb3e14349e47f18ff6a37555b599dcc3b2c0df97a5df0355c333a2d2cdc379323bb88138c03698926853571cac62b9e4d557230a85b5bc05674e7ddfebd89bc522f2c2b372b78c72655516fd2a6a1f80bbd5822e276b1cb0ebeb6638ea606a090b6d6739283363ac7839537bc2188413b0dc7b970d678c04abab1a724bd38a7a5f88dd3e4342a4ad0b709b1d05e67e1a6ecc8dc99a23b06d310df92082aa63a589e59337765dc600b98b4c65586c64014036173a6037f057167480a8116d8bf7250427b913fd5e23ecf9e5c95c02dc64dfa9c67df20ce25eb67f5f8d8a957a0bcb551937bea9c3a3204cf5cd63525db1878819e8c22afce0bb9ed45560aaa43fb768d637d8db9ceafde50af610c35e73e251701f530ab68970538d740625912fa3affd4de50b5087d05283b7e6ee65288aa66786273495b58f2df98e1d8ed7380aaadcce85c174f63225fea7483bf84bbaf76ec1a12110f1629e96f8095edd0546ea134e1d9670a2addfea38d7248e5a2db504366368bed99525e4364c0e1903f2de3f512ef2ea39add0b4d0f6409de04d7fb678e07405ba81447fed682511b098f79f5c3c4f2817bcb91d243808bd5a84a7f3edaacb7c20d17ab871e03c6d97a3e6d1e3c833e0c954e951971ef553357dde5b2914e788b8e0492c6846ac83259dfc757c45297acb00f210ae1d8ef61d93834aafd140c1cf48304a350e0dd8e701d8d87a45987c993b53c8dda64e2c5f602740d6427fadf063b0a06c98c8f55859dc99825c295cb07e9ef8aa6bbb5c976e4adc50faeca3a8ed5abd7389765ef610a82718db24a1ad45341e98b04f0d42085e8b946d2059752f8f0fee528e7c4cc0ac1fa24532c1ec29a3a92d2681c4dbd8e2dd151bb325d1c4ddf6318689e3c8e458d1b34cdc5409867e26ec20ec09e15a682f57790d9f4b27c83ef197e11c06e65eebc03489de620614263a51e642ef076f10d017a82c4dc2ce1882f93c9b6350fecc5daeb3a7a2031615ac1c2906516a5810137a0b63564050317a4cf4c88abed901e01de2662617e473c6020cdab4fdc3ab9612bfcaf11b1f085be59249c98a7e1b0c04ae908abf1fdefc860a26862c3251ec742dd9aaad5b0b8c65ad85cc4e5e7615f5709d2c6328a5d41ab980418014916b10ee05ef81c4c9a03f9f12ff74eab1a252c102a79e8f66c152936e7393faf8a66b68d63c32bcb12bf5ff67cf88a34c45cf286778dbb4a068a01047a8d245d632f636c11d2ad350740b36fad90428b454ad0f120cb558d12ea5c8a23db595d87543d06d1ef489263d01ee529871eb68737efdb8ff85bc7787b61514bed85b7e01d6be209e0a4eb0db5c8df58a5c5bf706d76cb2bdf7800208639e05b89517155d11688236e6a47ed37d8e5a2b1e0adea338e4a5c475241f2520bbfb9786595cdba6581856142afeba0777f6f751689dcd05fdf8af79191d6290077cf81682a321e81549981d32aef36cc3627b7105a2d8d10121db8def9b451408f046e03396b469189c596c6c0e143009132407528c7b2ca6b7d52e1807413f28fbf06ddc9607abea97367c279a90d3a19f8d8eefc9187b473138d412efeb73eff6a109fe2f902303b0abd705e2fdda354e24623dd7353f7b14531a60b3a854d686c55f08c1e250ec7f26078765cfa63cc5654bbd35560baad7c05ba2010c547522d9d79d0b72c80d5921881ca16aea109bdc85fe61ff426f021d2227469be544315afe1b5ac5fb0ee54ad3360463f8591806bb61fb95863019a60890f2bb99ac58c55d144e506c3999fe63842d5f638ee050569850cd49868517795fa40fe445ffa55f1844a69e45fdc8c3578a91be2a8b65e1f20feafedaeacdfee3c8ed5789ac778e87dc4d039c77167d508acf6aa45fa3d81f978338b5a155f3dddff865efc5b865f373982ea59c73fbdfcc4ceb94f386c361763a69af4f3c12ae67a58200f1e47fdbb93c8209d46dc985bdbed374edab1e783a5514105aecb5c5ee695e35b79836b10b8ea031c56060c2ed8994bc847d53c43287ca914ae467c4d2d83d267d201503e9230ba5d6084c17ca31b1d47e7a0dc61d26ffaa95af931bc36 +MD = 399a7a212c1e8e51e644df1339d2e02006c1dd8e51a0c854217532c69692bec120dff30d21869fe26a4f4a0d86ebae3f + +Len = 27160 +Msg = e881e908d46879ce673e7e64f8d90cdf5497953a9ee75df95a0b2f0dc41c4ff8664eaf31e97565ca2cc85d5093e54bf3a216e4e6cad34e098288d5c69a98df38cca12293950214c0439aa3474ed32772ebdf95b0df42f537919116ed647980894302aaf57e156df7d43db911d1aa87a65a7b0e5d863d3acbafae5a4cc9c71931f3faaf214cb958b908370576c37252d51471b9b866ca050c036809a9728b9179031099dda8f3bd4c0612f13ecc3472484449fd8828f43e43b6468bcd06cdd2a99ccdd0f23acd84f9f755e43095f7ce47108c419473c0cdb8efd148802e93c309e5b8bc28a94e960803894615c6c34e19a0c1efa5f0389ab3d78fa98992e74ce10759c6469d7ed9c151357eb507a0da081d706e8346638e7c960a14b2d9d0557829385416c066366c0ae1f6d8fe975a5aaf2226f61e498f5a53caf2c1ac57c61774ded05eb70d95505516154656afb6587d5d7fc620f386973755ac7fb282870610d2a0e72d7cdfb65b5a43c6b5f1d64ab0ace1baf3685c796935a8b4945b818d249c2e79c8b9fae64438e822c463a3786f94b49c40b0f74911f25028f9ea9af4d8c5e0dc30ced02837356c202a0f0329e39f6032aed4414e59120ba28a36bb8255d420d70ec248c45cdb38898ffddfa734544d45e6db21d2671f40ecef47cd80c35155330a9e4901dcb1b2249d342038893be39c8fcd7e1b63a159cccf25b6364ac4e6b8cb69bd29df3f43bbfabcac250add8b0152b34272761ebd0bd2d960ec10b63d2efa2b8b828c0e53144e9d6db6e1c1ab3ad794541fc820d471a16ab1ea40afc15d3eed9b550ca54bf942df4a323370ad10c5789c6a802e06c5e4e093770035da0d40b6d5e9878c91307d8b2ae32b70f74bc567029bc6d1bbd14243eddd78d2f005a88e2188244c8f81a8a9f70fee4bf3b37e6a6ef9c48f5b5b649ca662d20d6b0e1d7d67780b6cacb66b3f98ffa788070f9988c8cd9ff34e2cf2f2a84f336eb4f0478c8f0265744f956d57f5fb7cb09d29bdcaf85f8282fc0c934edaecc57e3173cfc2816e5aede2e857f8f64a954a1cc79336e6f793c6cec2efb72480b0c44b5e5d282504115ecc75d02b83361bdeecb2c2d77bddfa462a18af356e551cc96a7b98c4630cb34f750581f7840536f575b2f3b29d58e08a79d47bd0a0b13013f79029a024cd6748455f1264e1000d161e8fced135b26d1b24bffa91a3dd142c5866b7c44e9056d2a44d2a7a826fc9c95110fa3b2c31c88091a1d57f5d21f19cf7c5eb36cb9da774fa9571424f9a919676fe20f8681e1a412a42b4a3b7c4efe93b756d00813c83b7af0091c331c88e06f321e711d3c18ae756693d039910359d8b3de42a5ab512222b562f050e43e8a03141f88d546141f97ce01ba9ec4bec3f51e6f9ba3d4f7b3dd65ff611d051c6ec9826fa74d24766ff066df49d96be3b58f43953ba1153e79019e28bee5d3b5073919796ce37bc22815bd971e581b14b6fdcfb9b31c0097da45aa999a49f49b0bc825e74a46a069d08e3eb398b936b430c71f7782831b96600027ac63c7cc20b50d4413bfd536dfe1b066df597b6364cb81af493a64cabc92c7a1ebabddef08cb5f00994e2da3b6e432c254c0fd1588ef942b993b3f927cfb1295d1e2fac1958753c7e265ae7b61407bddde7fdcc1a305a4e0f21572074a01676fe9a9bce869a1822679a6d622819ef215b6d688fc45b60a7bee59ba9db63e3cbcbd5082b7f7824098d972333d7a483c0688759019e3695b58e86867ca441a18f8a787ead4b1a2359b9c685420cde4c03cbddd70cf0ea80e047ad21821761d729042a053b34a99c79b1ce9a770eeed1504e16ea97019ea991b00173a17bec0d030194a6bd804d18d33d596bbb27fd9a10b7da9a8b1a7b992e922b84c21a09cb84495e681c782d1ece270cfef49d3330accfd3f0ce83a9d721b5d25cce3ae19a14a32f543e647236d236915d0cb9b71a8a5ea7f349844febd0e19f04ab249b011bd8af700c8c43e847319090e9c3b2e0142cfeace465955ea5de39834320608901b187c66e37c9bd96e1b09d75034b0bb1008121886da4b706734ae17c7558b82ff35f5e4daf2c3c250e9a8e96c0ab22c8a3d75c1be5a47e5d6a7726406daa190b69de3e8f3a93ee5d7ff66b3644f9adc3dea9658615bd3c11896a5b764e7f31fedaad701e212659a6fe6b3a3cd55e3509779f42b24515778a99cb880661fe8a710d74fce0ac0f076951a10590bc0241023660fd86bdd7ba306141b3d7ee50abcacbdae8bf2273800c4141d31a410c5916e5959ee9c4298a6bab75e6d33d9c1c73dc873ea2cd7d4af996f3adc2aba505ad4ae52bc5a43371a33d0f28e1950b66d208240670f352ef96185e9a7044f4ce2f2ff9ae01a31ef640e0b682e940c5105117594613dd1df74d8f2ba20c52223b045a782e850a12a2aa5c12fad484f1a256d0cd0872d304e885c201cd7e1e56d594930bb4392136fb4979cc9b88aab7a44bfc2953751c2f4ca57a8924aef0b92248a45a47052fb38b86ff8c6aeef9409f976314300402c7aa177f6bae841073ac86540cefd17eb1dac7b5f971eebbb41ba2cd37a507cbf48b42994e73e9c5abfbb76acab48554576e7564bcb771363b9ed40239bd66c0dd768e90da7cc358899544af3b9f09facdd1f9d47d445db4fbb295c9c47d0929abf3632bb8d0fc11360493eb08b745b83c8bb9cde3219c7b1fde4dec7defd94e858a293390777a38dad00ee5d80521d5cc221f17965514d3cdab64310e1abc7694c44871097a27159c7f1c67548f869ba42092793fe8af062d9f42611f069beb002828aacce0e9f0a59b2437245f5a50ed0d79bd86e3535b69444f4457bc5ff3f03f32a981b1aa101dac901eef7d873dce6f3ea9124dea19a622f4a15f43eed78c8fcc35cff651be2b38c7e45deff3aa70d048068c2e5b890fbf9741dea332dffea25f155eb6c642f7c9315117bf88defab7ff9b9b8e8ef3c9a5a2ed7de512526b005412d7f9f1e4aae6362dc5f52c2395adcb32e8766b9fff5c7b6be410757afe2f11f4e2c7baec6c183e3f0f97c9bf693914911aeddad4d76a8c83ba2c459ddcb90083262909a164e5b1509baf46fb9de34281dafcc3db79593bffa8426904302688864c26c64cbbd8f72814448b1f5a33bdcad0aa0efc0eb1f2a65558c9f720fc10c7fbc7d9359876788f205f8073c7b2ee34a3ffa37fbef8183f6a794dbdd4c5020cdc132aa424499d4d67070d3f0de73b87fc036aacb0b814938eaadda07508c51e9712a1e187d8cc2992441aca535a0d8a82bf4ccb0d78506a6af561e62b4ec1c5d3cc2733e8ab6eed491e8f5dc294cd06de3a2f23fcc1338ba561c1d81d1e5ec8384aa2e46f4bec5f339e5440821ce1c4b77cfdfda61a25c0e8f6e5be740004f16f93fc3a463fac48f9cb51bbba7ab389b68e9ca1330b8ecfdbbdb5e0577c1b0620af1b7e920f186f43ae6f169237a9208377f657ca1cd78125bd1a85ef1b0bd0f3a7e9f77e44979eb84d949833da2d50c53ff16793d6669e6ffffaf764643c178e824cef2f65909b00b2a98ac5eba6e024ef7718b7c0a4ee60893f7cdde017a39c482eacd0fa6d2fc4e597346ff37c994a8e6fb45e63f938a165cf5d8215023bc3017677878b9522acec44de5a791643dc24c081af45ce46d99b94e27c8d66a9abb60c987ca1703c5fd19ad0ae05dea685ba54c8d3f089deb1317452f3d0acb3fd6fd857d9c36645869c8051921f3b89eb5612d0f2ec94c9d13159f70e643a226132c1fcc37adf04c853ddab2e5095b5b603e2e332bf55cfe0a22a17f6d37abd7e09b2ce644d4342ce009b24ab1f55f38fc6ac47bef336b7878dcffbd3a5d24efdfb9016e4c4fac73faaa1053115e1091ea95845bc109d4b6df92febcc60ac9b8510441d6b676c5bc45ad796e7b8a2bf0ab3cf25559cf4513bee342e098e6f6ebf51b62820bf02c60517251ef69300dffbecf72fb021a2929875c50eb3b6838d53c5ce822b5322cfa9e973e7862b642f9b5db9abf6260fd62d94cad1f26150c0e8757572b5ab354059d8a937be0a34798f0dfee04e34a3e5a1552cc0ed163ed12667913fe650a4dfbcedaf57c6b7da838204ac17e1d2c6869dc0d123cd5db586b7a50b32e5c9d6757b2f6d8fc7babc161a4bac98d688e083c9dca242b9be1da94037cc93db9e32c93da7cc26e99c44f9ffe9e7ab56de59a2ccb18764dac2de006c23bbaaef5822a5ab5bb26653e4d8f6dae64498895d99ac4f4769d358f06054e073bfbe4a7e0ccf6c5508952e1ae2d3534baaa6968c0868f9a72ed55ad10b6c472fc21813985a10299db7fca1c6c959111f031ea6f30fa073d8c0b308eb4812475dab01732f73308a39a6e3d571f550bd6a3648e01b141a64e205b58bc97d0c880762bf92cabff73633bc91f1a2ce80fe352b6c6d8b819f75cee7220bf01423b334ce9a97f1a62dd693e3501ee2bcb07d87cad274cbbcf74ea34d44afea731f70edd9dcaa2c9099115f026684b827aae268fbc21e642fea96691e61a03d04c866396acbf504e50490a1001c4aac7734d4e0a68393dd4040f52844c206742de63e206ab19d000d36fb60c7ba99461417fbf8b35efabe59c015e9a6af08145840a0aabfd4cda971f7f9a53e88980f661b00b70a9b7b90e1349bb32c6fcea7ec9f32e0527dab85770f32774dce708ed6078b26938240da4062328fbe4c81b551cb9fc90bf35f1e88454fdedcd3484bcaa5434b375a6e24dd128084448c49c4ee8c8d6dd28012fc0d62f8e2d3e049cfab +MD = 4f20b8ac2926e6feadb98e36c9eaa74b368ffdb545a83323dc0cb862378175e2adf6df26ae3bb1c23cafab91b6f9c198 + +Len = 27952 +Msg = 58f70bab24e0a6137e5cd3eb18656f2b5ccddc3f538a0000c65190e4a3668e71a1b210f82716447f6bffb1ffd73abfd0b00a7a61f978932c95eba7e9adf8c402517b2a4862e74ee4afda25905ef59e078eea71b93ad617c460d2192063c48e19af7cdf039bfcce299316b706763d15b83d9547b1de4c95b06f2d6eef8f72f39e02daba919bfccb365fdbefc9e7ba2bcb063287b0ac8113d80a252cc0f7aafc7a93c0405a2a904ef35b5056417915e82831e9b61d6d1e9c2479e2ddfa6413b093aa54fbc70f605e48ce9e73d7f3f654b706e45e62e9ca357c038b08059f5517d28ebe723e1413031d02eccef11f047861cc4806e6e82ee8c8f24836496d19391f89272d28ff51455a3d63f0f9c3e85b0ccd40371132f2bcf08c43ee2e99071f63e1b7b5ee99c42de7c82b6055a84a05a14ff1784b8ebdbadc1aa1b81ce9c6d084df9591f6aa12c2aceb6ba66f96d07f099b8651fcc637e874e38d1c7b27ff546ccbea49aafae30d91ed4c4bad5525d02af9254a8ca00950a1312da3b31959b401eddd667150e0147f18f5d679acef00eeb0f7ec64e5dbfa494aa9d42c887df72d8c976fb276b0e15cb28ecf3a64d7183c0a23beea5d54ec55772a384e3b1225d7f23fecd732fc7c120441bf5745841ffb4dd14987cf1d30ae00d85582fcc147e765fe65474d6ceb8756342d3a179f1d15c22b13a304dece3a2ddab62e913263442efc636a8fa738a5f08fa14aa2cf1b71b156a6a7c53ecce34659e0bcc30c84d895606da8bf566b52197ba3efaebd1ff7627d8af9d8e53490927c5d925af7af8ae1530c69a7208a781a20bc910210348f1cc64503057c0e295a6cb31a1e9dee425cfcc7150dae9ffe3ba5739867715f212959612c16ab6095e6506dbad7a348e84c842614baa7b1ccc432516da588aa95cf5f66dbd11934be7e5110dc4cb4c665fa12b1ce76b4c9cafdf1dd7684fc1cd35700da7a006f918b6a9726e746766e9faecff1ac087deee02e089f1ccc76bdc409634770695480e4f14937438d914a7fb0e26d143aa928f69e9f1fc7449d964e2cb13425d57107b15d8fc957e9ae62ed4774ad6fd2e17ff496dfe6e0b51aae5a0a112a010b6e31daf492668d2275bcd2bcad3a2699ccfcc25eef7bcde7940ed1e9acb06cd5f20348ff7a954cff8d621457b49b9f5713a6483ef866f8a2b4bc9912aa4ecef9a587e1c56fdffd499f5c9d60b25844d45d866f7e2230c7ae22c29ccd328c8f4030c48e9098ca06c852b0531fcefa7cd753a21d659460a4d28528c0616cf317723bc238a61de0d0444f6820dc3108ae2a9d043b3c777ef6d785f4ef18810ace576d8ac55027a9c3853d8cebde020a4493e2b4b24bf2122586cb30103899591db66f231fd6deac4752c5229c6e6a89a5dbcab868da2ea599a5ffe30b0adb696a59e8952c806971c5758f341ad4910c39caff1a473153beb9fcc916c8d670c11e0681e9d696f080a3b442c94f589e1b682726e2369888e6ef55cfd02ee480eaa286e226035f9d624bd886ea2242ba3e9abcea161c56f5a4a376bc19277b326a5da1b2549d24969e23a9059e7bd90cfe374ff0c0e3b4c3803b2836f99be4aecbb61e9a7c8b2d03bc95ee64ed4266bde2a7a9e3e772fa1a022033e57970681d9417c741a4b5c20d4408714edf5f31f47352926994b17021b3ba5f73a08f4da74ee76250d7032bdcbfe4f8697dbb82da37a1d12ace885d011a71748577e0db73808db86e1a5daf97b5904c5dce3ca197b8fa30d09ddf0be1c0ae39c6044b5caab273914477ab9866ac7635d3dacbd5527ec67500099ec0ea2bd777db51b916736d00b579f5d52c722efd7a73aa5168330f6e69641badc544e556f66f661052f7379cebb69cc3b4e3c28de5e445b4a063f558d4a4daf4621676917e28493a585d9baffca3755e77e1f18e3ccfb3dec60ab8ee7e684f5cde8864f2d7ae041d70ce1ea1b1e7878cbf93416848dbfdb5214fde972e5780cb83c439dfc8aa9fa3e2724adbd02bdb36d2213c84d1b12a23fb5bf1baae19772a97ef7cc21bc420b3f570a6c321167745f9b46a489ff8420f9a5679c1c4573c626334b60296a39134f3f1bac26e51659f7c74521d79594e604767fc1339b9d5592fb96e0702f0f910221c0f417d83ad2ea3887c6c287c55004ab60418d4e64cf943a62c392652612ecb1a2ca6175555d8b618709b75085fd6eb6c18385f87a929e6247900cc72d0763512995a046f6787fc4eb71425a675ca72b1c1dba043f2d0615bdbc4baf74ed0aa2ddfc60c78ea22be50d83d03fd9dc426ac856961c331d8fc72dcedb98ae42470938551f719e79144465b80d6b6e1ac5186ef4a68ae6d28ff9104e391d3985ad06b13628cf965bcd659c9446578496a396684e67dadafa8b2e2da0e0a79745a12dd126394c16c8bbcb0a8f079ecdce72675cea66a68fe405d8ae6d7ec25800c7e1309bbd81805e63d7583eedab9a20962db54f0f68662d847b4b0a4fe7ec3595c3280d21da736b5a3cddfa55088a3b934bf9e2de8b0e358b986c1de092d4527f365ff102e1509e034e2467da301e8e0e34935c6098d8aa8fb28a0eed5d90e608cd20fddd20b864f39dc3fde9acb7864b8a3a02121c65eb155c3d53a2a2b27ea6fa137a1d031b4eaf9e35330ff8f5b2ffbf267a8f80267590f7fe92cd0cb97afe4fb00c4f12e9b9abe1d08db98f49a27f46113c255eaae897083632b8e6066953308f1aefdab4345ceb5e9472ea33c36ea152bd601253a2ac1f8cb9e2e929c86a3ef92c7bc4fb5d472d17bdd884349432739374ec55c14224b05aaef760b42697dd96b78f5c3f830f29a4803707dca35f1f3bf916737425b53d386852f7060250aed052772ae143f9637d722acf9c6f6916b4c07af5dcebb248aeac8216cfca48f54e73ef9b912eba6d0b0a3055e456d4fcb65186777bf2c05515b2013a520cd57359923538cf91b698f5cec43554f827238932c552c1e953d5063f5cec3d388a9b9a44048ced1b7289a62672e85ed1d44dc5dab4325f2dd15b089af1b6f1ebdcc078ffb9f27a2a62b194a7b8d9726260bdf4bfdf70a43eed59955b6c05107540949e2be224175d2ba359d8f2a3203851069e58a39821aafc532507385109936a8a426f097c151221d15e10dcbff8a239ba0b4bbd3357e082ca4014c3454d949f142e2f8c7523f7e9be3a15c39a5c5e6f3af3ff68bcc77e15416f1aa93c7d1762b4b9e407a9a46ce7ec462e43ccdbcb762bc0ea42bef0d2283b1a6f66c0f88a6a0e7e22f77416efa0ce2ae0d9b1f767f2ef0aa2e794549b4029daa9685d406bf963c372d88f0bfeb8e650c3f2042fb24a0729afa3e77327d190185f4a6bf54aa567524a2734f42874b7505e291df5390006b6672412cd0660f05bd769977795028b832f60105feb78d38205eb79d87a9960297fd4c0d2c572ed3dc8625a57d98532de792fabbfb649ad9e51b5a259d59a960b40225c24d39bc906a8b11f1696921fecedc26184274bc7edc82421ea08683ac45eb95f23cf20267eded260244add8506c3d4dc5dad138508ef93631951a6a0fd31f6445ff6c487eef132c81164bc14e4b1e3669cb61597682e9000686fca7b1e5065a65a08dd6fdf767eb15e72b241df2e5aaad1e0e661840bb66447a1482b903083ff7263ff30d8e502a67c03549e8e9fc7139dabea66051d531947a4a424fb58ddaa69a69e8d63a36b31fa85177d5b9c953b4075b62743ca1299d8d86319d84fdf41703f3fe7f86814ce4a867f80ce9b618c6aecce37c89851508bbb095c8f7c055f569c47a30f79abe5ec75f12b601298718d6f96ea1c1ebbe7c0cb0b7fb973ec5e6d5c6a71317e7d0360d210efb898c695287ca4e0a6b3aeda2896edf5ceae00c924de0cc4d6dd14c14829534020a46861cc927c9e10fda682239d355137a0cf1a3dcfa300981c1f89f2fa4cbf40cbfa61ca5f8294b3533f7a325c56049cf2b3ebe87fd1c6ddc1d9e801b341df8155f91fd2225b47266ad64cd532d49266fa6b98d58cfd8a1054e045f4e2e7037af8e0e654996b37e29b07649cdf459d1e4e32bb85659acce84bdf3e2d17b0dd961b4e7fd21346d9707a4f4bf9b00d573b64c5be78983e01ce2d132b4ab013c05b339e26cb2e52ce387f1a7d6c33b08336b4813c1fa36bbb2a6f18b7be4aa44e32e85c85a0492368d31ff57374f8c393a8d3e19eeb05886b95887c4e0855d6f9c590060712024d5bb8d36cb8a46daafafa4983617b3d28a5881faa68a95020358bd1374560d814e9624ffcd76b10fb3bb36bd32e40c8d0cb8a8b2f9221c80493ee024cab4d393ec457dc023a397128d86cd15d5fcc27057005517854f23c189774c9d2c317b40f6f020e296ba00cb8537f008e708dd62b259109111bab0ac0b2a89e460750b72b3c196ceee63f522e3f728fe2faf664d64eb6288670ace2916801d632e298e106cde66ebf3457cffeeedfb5f769a6418b6ddd2644de88220f3a1928060f509026a6f18a06d09a04aef42f3938470dfabf058e98d8cfcd679ebb470a5bc808630f29d3557235666eb2e1d980221dae0ee5a832d6becedd11c44e23d390c730c824f8f4477ded5d8caf3a7711515806dc93b87286634647bf2465283a41675a4e0c76fcd68662efdd08607063227099124dd8b62e72e08dde13b2dc94da32f5532a46258918308dde32e66dfc3211e51e786b86254a082fed2699a989e7a4927602c926e5cfd0b81ec35ec852ec966b7fa7f36b0175379e7ae19c277fe656a2252a82796309be0f0d4e1c07fdde88aca45102cd4960f969e5b94cceed52a3a4ff05f495975262f32817b0b5536453192b080c2563b9b812dc31fe1858c9263b5239b1e3e94679f50dd4af490a3aa0418241922bf6dc1e19bcc0529c589658a5cd1a2d1cdf323d951cf98a4b78addaa +MD = 3dd340c35dd5a88967b66a5602dccb8ec44478d76662a1e328ad5a93ba16639ef7da57b175c9bf6fa2b11e006dfa6ac1 + +Len = 28744 +Msg = 9216bfda38412a0f70511159dc73bb6bae1f8eaa0ef08d99bcb31f94f6be12c29c83df45926430b366c99fca3270c15fc4056398fdf3135b7779e3066a006961d1ac0ad1c83179ce39e87a96b722ec23aabc065badf3e188347a360772ca6a447abac7e6a44f0d4632d52926332e44a0a86bff5ce699fd063bdda3ffd4c41b53ded49fecec67f40599b934e16e3fd1bc063ad7026f8d71bfd4cbaf56599586774723194b692036f1b6bb242e2ffb9c600b5215b412764599476ce475c9e5b396fbcebd6be323dcf4d0048077400aac7500db41dc95fc7f7edbe7c9c2ec5ea89943fe13b42217eef530bbd023671509e12dfce4e1c1c82955d965e6a68aa66f6967dba48feda572db1f099d9a6dc4bc8edade852b5e824a06890dc48a6a6510ecaf8cf7620d757290e3166d431abecc624fa9ac2234d2eb783308ead45544910c633a94964b2ef5fbc409cb8835ac4147d384e12e0a5e13951f7de0ee13eafcb0ca0c04946d7804040c0a3cd088352424b097adb7aad1ca4495952f3e6c0158c02d2bcec33bfda69301434a84d9027ce02c0b9725dad1186ddc785e2e282eae23d4be7a8a7f62e390edd97c0af1ba5165900828e0630606f83d4df5240e1b05c307ee9153ff52c3e316f75acb9806ab9a24b5e6500d1a9bce003c7d8ae77065870ee39a8584734f75c5c36d2f958e93672f3b5bdd9fb2e0d56d6f7dc77bd4d75730c41d87d66d8e2c41653c9fb2f910b4fbc20ff0e379dbf6cb0b7d4392f0611bb7b9a2c3bde989f1d4065081b5f02b69ce7189ef9f14961a643b0566f46c0ebbe9ecb2a0018f46adc4ce2f3e671aeb6ff17051449c2e19277e259e9868efe3200f82d4866906cf465ae4633f902058acace8ef55a26d6a0762f1cf41b821ea3070a691ddbff72ca6de7174ebf8a97a094601eb8c797993a058c821c9aaac2ad4567e700ec90963b3989ce8a9665e5a6e09e2ce50e8fb9cdca7d21b980735abf50732f97f50e57e57cf8e49e3a4e6ffc43bb42008b89b8ba19936451696677679ccebb4991b328478cd6e1e0078eb71f1259e671eb1006ad9741d27ac21e7924aedd12ac4f4997e00d865f068ab12b9df0fc92df99bd3406b81ae4ac06e60074eb20be269a1c273d6399b46820505de74405cf9013ebb163f081235bc4778de6f63c264eeeb546be23837a8b84d6ce89a0280549e6261f33d5170700672d71e93471d39bd9af86f0c1c629e714deee0389b5dc538ce6cdf4da3f18408b726cfa4a745e83c7655853c2f43b116cb34cd36541ad4374b85e35748bdf828e00df989cb61f9d54614b85ab703680d90e6b77b75e00903a154054386fb54d0b333a52afb9af5efd4dc0d4efdc94cbf64aba6f146d6ed0498804ff9a6d32167fa41db6f7f1863f1e6568e0049bee4940e2ba37f0f2507a3f7b2c961ef6ee5557bdea1409e02cb4545294259e309b8f5580fb50d17f4df4688917a64abf42b01ffb30185a280b552b9fe313f12d4504808ffe584a76cfe5711c66ae8208d78d54d680226d1bcaa800a7d649b1f4435f6e7a23aca07b5eb3c5bf8a1d6985f56382fa4ac0b74db3137ff4de2565283ee68bda1bcc87ff62e5f2ed0281759954c926b0f081dd208d3df6117b356f3b9030552a373665757502652f60691ab55e34cca521d42356917e0f882e0854a0dfc346d51688dd601d8fb8e11432ed8c7a1cc1415f463e32685a38c3770ca9fa8625fd853a223451c4e45abc9e8d52715117b11ff93692568a58ee5dd6b0c39b2bded59502911eccf3b6b72c8fb6edf64b8c188b9043a4357000aca1dda3561529346b9f10640134326d7a8b387e049df200743eb4fc0851a1d80059fc42c5fb06ed2bfdd409702a097f018359115adabd0b3083c7ae133da84565c0a31d97bf5d5f835bcdffd000d161e89f423f453f3502fa0548f8794bebef698072924fd495123e138ec5c57b22cc9c298446582dd29e1d3dc9599f1ef52c6813db5f52cd369b88df76d9b4db860598ccafd508391e233687c95ff9294c830de55dc3451bca520ffa16da22b473b36af32559d9f38038c29db96a1bfd6a99a79f6a7c9b42b8dc300dff159398644c9f37754351bfa1453dca2a067c0dd7c6e18c91c9c9d49aa09575903a8be9e0378204102fe42fe9ef24a78bb39dcd0c91384754696543e835bceb6aa7704b700acfd3a68e15b6d29d03b06f0ff5dd719f185a32a9d2031a01f2b9eefae51f7c4ce53088dc6ad6e3b5577f446a1891cf270e2fbd29a4b4a8abf37bbd835ee89d644ea537996812a5ee9c5e9c607a9c4dff8652445761bb3c8a1bab270f42393be788ac435371fc919f4ee8d771904fa65f1d4c78b17d991e22f7c2ebcd3373e05d0fb02c893cf72f4debb8961c0e4e40ec3f88bad67cc0f61cf44d5c6bb74b132b604b63a91d94d780ff1858ce28faa61d69919b24d3e52ccebdb4f95922015cd916f88941884832cf05b2801684e75e6937f18a2b07585abea0a45314284915ec9021fdd121a3c99e7c01bc73b696d26607131857abace8734975fa3b1e84e6ec686241d66e19f455de706e64128b9a8a6380c64925555e6314a44f2c9937384efc23e5cfc22d5babb998f6764d382f4ce9c5046e08e435349ed9d2670cf2929ae8016a3bc240580679e61518bb1ef933e65a6344cadc053e446114890e298e46a8654f98e31581dcbbe22ac9e0b290c605bb535bef9f3706a1f495e1015e73d8c9d9f675a8ff61b4dc17b80842957e79b4626511ebb0531433eec73d8b03fbc7a8d9ff408870602576e13d62753a2ad56eda090543c1e1ed76ba38cd0fbc7ea9d1efda88061b158508e93b56ed132e5fb19ccfb48c164c08e7016b3e03ea84e5d18618baa651ea7a0e9a22641ea2e17f1925199e395029ed114eceff0c00971234272a66edb7676ae47e93088e8becca020d9730bff1e41061ece49e8ca13d95565d900b50ae04ee4700fdb2b110c8a708b098fa946e12f975763c7b0a4ed105d493ea1653b85b6a92bbd2f13ae3ddcc99a8bf7a6b372f2ea8754743096c19ea1b6479268b68c3665429b3526067c47131707b3e88ef9126976485551e8b4098b749fdaa4c31e56817b50f44d63ef55b6c824c9591fa0157aebe874f9e1f0db814aec8103aa639f639f8574710bbe8d1a758b43e0ad8d8587afdcd811ca9d9bed02d7906cb282987476e1be78471277a7e8e4286482e8e9f78bcb8982ebe2d23662070ec624a4ca1cc70dd94c5f139cc6e8d681cfe4daca32445d90328ce807c4332503fb48f0bbc45cb0cdd39be883dd3c0955081c8bafa0a53bf40bf5d7c2ff3cd878f2668ff5d2fb73a3f743bab556ad26acf7712220a9750dbdf46ed68c4f47c97393c6a800b06dfe629e9eb0b89703d58f842dc7a5b57b7af3d43e0deb1c1a9fffc6b06462c479f812b2f5f3160a06bd049796a4c72c802b9f95aea569ce7f0321736beba578e90abc1a90aa56157d871618f6de0d764cc8c91e06c68ecd3b9de3824064503384db67beb7fe012232dacaef93a000fba7f877578e97e18119144cdb77f7ec5c11141b86b2179e98eb5f2a04b61026235963b3288d41ea53e011646758ce005d595ce05ac81cb5df71be3d3fa6560a5729b284794deb31a9573b340c2a0e149d245cbf224335cf5f8c9e0b89ad9b31fde18df33214be3fec483bc3b337e2b18439bbbfc6698c737f03a79dc81107257f479b063b2be29b8579b81a45c5705e7a6222e92e834629aaa082fae61bc16d432485c77cda7ecddab25b3fa81de0a3e765394343d88e794529d72ac913f291b33ff23ede68bb5e55bdcc3cc6875b08330ba7d8ebb28aecb9674d365b41c11935628b72471fc0d55d61b219854a0916c61c15ad0f5762096e228d2582ec578e3353f86ba045b6ba5965b5dccfb0115409602acc98103f58cc223fff285edb7814dbe031d223c496b3927e8f8bff9b4a629f8f3c6c2549623c2e0acd34dd765d40c2eccdc40113efd2b0b539a180d1813aa0eb0575dea7ae241096968eb250c71fd0c3465d27ca501e8702e3f87bd980fa2ce730998382c5ed8e8c621e25903d19cd0da487dc123effde0b947a38dbcf080b2bc3c25b012d00719439cc7d5f48968074ef29691343dd7e7b540efe00f7ce055ec9d7af4d70c38055248004e46ffeb29e302a16f4e62030f82b9c176f7fb2e12847c0c78d15a085782a2200483ab92b336f742bdeb030ba2a220dc951ef1e69334765ebeaa5fe46a4549abab2312fb3dcb2eef0f82776e4bb40475dced0796324d0ae638ca7458d82a9d07a4bddc812410380ad6bd55878508e331b0da92b98a6eb83769aa3dc20ba31ac883ac5ed0f096912a95e423f3c9412b94a37029cd05f9fcc6e3c222dc7f3f4172ba8710474dced8c2dfaf494fa2cd6c233736334d3f7f471919cab9f4cd5fbf7acbd6a77076495d6816675bd78c3e2341fea555b6817f25a28dfc69a760a4d3653a037ac91466bd9edcb4d247fff3cf954c45f795967a26f7a30fb860c37f2ba687a600dd92d777bb951022fd688eef71b280af66c8e0b99d1b5d3ccd707f36d33726e00a9bfc0a52c1f1e4847070018bb3edd3a6a3535be7396d5d29f1f5735fcb1e8efc7a44e408f5e29d6982478427e2f60ad1a0329c7a9fc8a012b2a26fc0a5f5641fc8529322a35a9419286605faa231bb746a1ee9dbb0f78c145ce68a9a6a3405e100a5a6545cd28f0fdd6bf56884197c1b4b68c26f1f6297bb3b3262418a52faecbdae8bf284e2d4da1bb9e0f60b25b312deb0c4c93da25953e826855a88eab99f59edb2a1bdf41bf45de04727a9eef7179e875f6e8e2f279aee334249e863a8755fd3b8d65a8ebaeb3e6f9671d2cdce76054cf0c39371a8dcb7d947941b466e0b4a011cf4fd2b382b17c86d69284a9fdaad72375ce00253b5df98f3cda41b60cda2e64da218521a40848b1a722cfde1a1e1a781bef6699ea2bfe2d55b154b2738f503d9523e8be7a80f184c2123504a586c5d6e5e4910001fe3577ac0e16e37d9baea3e89c24116de020070faddda208a88045bbf4a8e1ea9e46742939 +MD = 478f747486422a451f200e63775b2fa32b2af6f88524bdf14a3b6bc8d3ce5c610efac145f76391e7fd55c44c09b883f9 + +Len = 29536 +Msg = 4a09dddc5a9f00ff888b1b52e99b952bc9fbb6444c4d696a55fb4179a7ccbb874bb6c36031f479331a58348ab4e1c77f0790042d11787f66ad1595a4badeac41781dbbea35ff0e512ae74322a008993957336a1227edf580e8c561a290e5ff139be6d062b0e947c281e34f02f33890bf7f8ceed8d7d55322cdb5af5d71083d677ab907b0e8d9aceee7f26112f598367a47429b68695822b3268d86bca76feda4df3c6abc26f8c63d23bc803af05112d279fe76aa259de99bb9f4efa779439732901a006eb16d1c18ffeab4622a8aac30db67898653cd30414f93f0062eacc37955f9d1afd36136e541240572ec6c8dfa3726dbe53a0f800faf1294c10fd1fae1f882e665d2fc9d0db2117c527e1f3c9a53e274ad238c5f6ca318e0c164dbc3d23f5c467af765d8f91a5a20ea28ca4176f7445dc8566c58c0f14ddeec75f1a7b4f42ff9d48ac56f1041a7fa22329625f8edf39d1c1bd6f074625b952b893c2defdda5085dd343ebb9ee9f10e3e3aa6f86fc983c93baf2b1eebee70d67e9e4ddebc3647afb1908d35eebea6c13852fa78aebdb43147ae92297cd9c4f86de103f106d145798a63caf66fe31169c5e4c566b8363b986a5e3cbd7561f6272aee8dcc7a55ea81bc0050839f01c1464b72a03918cd9a6d381073517231b4e11a1953b7631ea746cb08e643f88527055d7f03664cee412e2577ee7bdfa361c4d013fe487da5fc373befd4ee0907c325608c7774c102d069b6e706933a418d30c140d606068659d18317b4b84ce41604e90d74fb11c5c89e6100444dfe96a7b382428366ba3a60b43532fe5930c4a0427b84745fbb818a4ab8362ff2b90d41db877b8ee0e53c714dc6a42a375103e25c8c840e292ad095ed210b3227e63fdbf7455e411b33f73c1cbbfdb0d92a2c6cc1908e9acdec2d8bf43ff1f363f288e6c5408d426c1305019f89a23ac528c8a0002bf6b2d48c12dcfe798cdc2d8a82e2940d7b1b5a0ee06244b4242071e9531c96b37eded3670af97a423e64eb0ab86002009a346b7413eeaad015fa75c84642f3cb698731199071e63e791622ff93ef8dce7d16270f1a074041da2127622ca3b5d8593474202dd6c0d2df787bd59fd195cb9649032c5d3c93adf34d2d2370cf4b6ec07f12f74d88a883d3f44c2946b6c89c78359668680f1358f3d6fda8bd16330321cf942b6a07fbe5f9222a67231f84958574472fc4ef5df75e46ff4e5c28eb1a1f9e8e292de5395db18a8d1bbf7c685b508d9bfefe6dc1ed9525c8a0e867f227fc74676ce3a0ff7f8f85eac3764dc2627bda0b527efaedc02afbd03cfc63e6c15ad9968335bbacbff5bcc9dae214412f49e22bc6b12730039221bc7ee2ad175abd46b1f89ea5cf938687b0de7d6063364d4e63d85f73472c6d3fd3e3359422789644303988efe68eb48f265ab2a286fc187749e3b45f91af1ebebd068fc9969f684aa7c27f0a6026022b90bc2c5b4b051de554956a4c8e002926de553badc223c5c27f200b75faedf1f5969f450b1dd5e0210a49ebeabac40ef0ce5be3c153ca11542cde98c2e54af6759e5097328de2e1b2d19da38a966f42b4f386f2a4b9e6ed78375ab171ddd192141e9c8d5209b0950350fd4bdcaf6666dbf462e2b8730eac973530eff332f65769adcfa1fa1fb39c9afee52f31744dedee277c5e7d0da5f1499cdd9ed7833db8dea2667f8b4e905af231d1d829738a4a64334fa072e8413df7d4cd688f5d1c28fbc2fd7095f4ab42a1906fd1353bbffec67e39733a9164f53a839cb79b1f264a3955e12faac078f611a10b94e51b339d8d8ee62124a785b98a1fa8167b47c07f2ff1ddf72a308de7dada31bda9b0a98941dbb244d18937fd5f0f9c0fb0759f4a381d408194b35e9a55b27e96039a66545beb4a48b1b4d03331e9c4fddb16f73dfa4e95398ac76f702ab04ec873171e716433fac755c8f2ed9b24df8b4baa8cbceeec58997ceb451bc25a3ecf88d51682d35c602b3e2424aef347381282bea4697e9d072bdbad540fa516ab15a55302eb21cb06fecb64c9d9f2d75b3e30b1f2a631d72d5b377c30ae4b8c202568ff582ce7e65bbc8de97700f24bd568a622ec05911147b210d64f7a3e114a8944588aca8e54daef164090a67a1b232c839ff50a24d1c2dad85a2515f54c66cbb7ed1f46ad8d0100c4f8cb5d02cbc0e42977a226559f4b102e6645e3f9a42147343b7a239e056a8c4a807b7724e43b4a384877dcbbe02cfc63891686c3aee68669b25fd4084473fbe766159748eafea91080eabfc03b051a28313b50ebc34323a8e004ea44c0b9da5c184e3fe756979b42cf7f21fb065fd3dd0d18d4ca97b38972431dd90c00a8a1f92579d3a8ad729b6f72a9b5c4d889d4026b33a4e882a432666a0f22a69acced4f0c2ce4e5562c13c728feddc6383f7528ea1033de1ab1b8e5b35d59ace5a306ee3adc0625e720bf1a30f32c779bdd41c0f832f413d6588780bd9cd09777a7a927300b99f2e70cd7a9490b045189efb45b141078122c0528c7f72249fed7672eaa9a3022c4cc2d0824dfbb17cc78e36767cc4d3261b244071bee92083b7b4e11e8c7fe33240d2dcafd4397b970ef54b5779f2db57adf91cd0d0270ade5d9e8ed6247aa3d99307b9a9333156bc753b038fafb4663d62a7ac50be132ad7689a43b97a7d8c48ccc82e1972ca8c1485c826c727f3bdffc196b99a8f94c7975f12c66f9571e4a8737f04a797ee64c6c5057ca6e79529c7522f0a554b942a45ca6de0a17e3cf420109303faac8425fabe58ccd5f983f0ba9ed8692afbfa9c0a321359f73bc804d92c6cf3bbb87318daf62ae0fb64a65a022cfa9cc1a6ae630e1d6cf918d6fb5cfb4e729c91c4a5858bf7e47ec131e5b1c784fe6cc15497c77816e088ad56bf43adff0dc625d701b43849ec6fcf67273b302f4aa1d30d9f1270a2d7cd5dc4fb0317c6a5381ff96fec0772ac7bcc0e564266b448039edaad8a204bb991d12797e2622ba2bb2632d77620fc8a69612f590c919b5f59cbc2aa79ae98ee9cb0877a29b6b66c17e28b219aac6ff00335d118e1d76df66d01ce7c254211deb6a3ed8e1f3af06b14fc0b36a0d351450ff1fc7b0b63b17705e9050cd7053ff1a7525fba0e176007791cbbfcd0bc2cf1563cb86ad15bef49ea2a6f42d61ea9903664e8e63c748fa910e9a15c7290875ca0bf0ecd7ae8b0d4e46d14066cb6d8212d828dfaf27a03b79f0cc73ecd76ebeeb521058c4f317a80bb5afd41dff5520e525358df7851469bef2c358b2a97df0f5c0ba68f985fd8b5369831d97802a1bd6e80507b1620e0bbc8f2f229d11beb275f25f8be9d994fdb1ed0b8b87f064c9848b07db7140f5781f20606020a29979e84160302a508695a3ba99bc43c28dc05aa8ce87cb9483554340f79fd1de96cdc9487cf41f9d3ad9a55cce1e7f691d86e5abb98b04ff0019b57b653015184f149561f6565e224a30434e09208f768c83a21e6953c1c3244c024a29df8f022af4d9487cc54a620d4fe9f8eb70f85d635d1c7b5e8096934852a607b5fc940ea2c5114660cf88df1c7f1607e56e3e903a69b14cf98fe7d1e4c41d6eb9f5c8a05f2bb9f652e37e1bf04463d577a6e6b16a300d0ddad02a219226d4d986799159b89f5fd2c38fbe8b11463ffc228975238b468c28630ff1e4d8d168c2abe682bd37765f662352becf07eb26e666a46e890623bb37328dc3ae117a45c4aadb112d5467552af2aaf33a3ca9951ec4763734734e16b4c9d813efd487f85a03a5c13ca7d8cd8bd216f05f3818271fbc8d73c84b3c2b2b898d672cba70fcfd3705176daa51151312152ac082ad4973cf3888b706546505f1fc21d70bcbd028c5478832c456e86b633426f094df78956d25fa833d4d60cea3d3089170fefe572f0b982e9e50a3cf25e27951f735310f26d44daf488d8af01f705fce6290e412e4bfdba380e4d3e8daae767712350f3b8ca206adb08b6014b572abf059183de676d2a7442469f53301f6b2d28e556fc4ff3d9a011dcd6ca7164871a9dcfb584c65f2af82e18684283c69b2f6b41cdf160f059c4be8ca2d21a260454d66c0bfbf228e38e250910d42da65fb463c01d9b92c7861e09a080e1efa68ab7d7efef0a94d03f7e4fa3ffd1d7c7a00637e9aec28e824af61ba1dabe98ebff89c9e0c87b5460250fd36d9e012832446b1044e82efc298c931c171732bcfd4d13d3c8fd14d9df7c8adaef532bc9ee352c165a34a682c2343e33889f0503e55a9d1e2df89ecc552e378bb287196103599070b2f8f3cb57293f887edaff17aa106fd29a20e0d4ca225e0f3da391997a9ae147d59ddd7def55de448030e79d5455d01694dda49a4740478d180d5c195adf65c2498c2c41939f638f17098740ec130a12a597b0c6d3703a2ecc2f4288ab0f660a982ca8be4aef1590c9cda5a6793163ef54b6cdff779a7e1ae0700a8e76142a4649e4199d1c2d3d7021e40a77039724d529a2c3ed3aa65c78dc377ed4c2d5fa9fe51e468511412356a4b67e5c932d94ebadc45a39247c1c7049ee6402973a1d3df341f81f32140f6bdcabc9fc2fdbfd5a67825a8b3d05062caefc85c0fd2bdd47fbb5f713868c49d7502cb201e289a549e0458a8a8e2761d193c9a9b4fd9080e686e10b08159218c1889f0210b11fd5e19e76b3df1ecb778a80bd97899e514f411b2ffca6e80fc6510d6e81d4a685d54a2b7b9d32f5da8e7dfe4019e5e95792814206919606e999b166fff7f2c8a3edab0fbe102a1c3aefd294baf571e48891cd83ce9380770ada061bbc2c151f61652cd0a5d46f9ad5e2b2cb93f4d499cd934e67f0cb0b4458d07bb50ce8e3b4a884f7f89ab0aa7791ae452a33deb6100fe22b75d2fee074bdc535bb56f2048e5e94310f046e83bc589db239027bc15034c48d36ddf7a70f20ff5fb5041321b56ddb059b4bd4a17011f5228069939b6125829c30797d071e68c71f2b7d13e232bba29926d6abad9ba4ffbc88ceedec4bcb637fed0f57a8a87f659da629baee0c323015370fba4e45f803a9d89a525d160db15ff5054e33b54c2103ae70cfee4bb9cfa2575dcb2d77f74910f8368a95cbd2b263cec52a504eb74376c9ba1c89f837c5680c28a4f13988181a71085d3d7204b0b402b5b3a679a81220816f67681a965b8ee1d90e439193baeeca7a93fd118af179193fb0de4007d7295df77932b9bd +MD = 6c3a8559da6994c513896859d491b019b3ea9dd74b8c39dc983a8a0c0a277c6b9a68b00a82772f48c873934690fabb3b + +Len = 30328 +Msg = 3897c9713083c6795f60326e10dd4ca80b2fca125ebfc0815d1fc444e84350fdecee68af2c6a7c17427c8f40e09799525c502aaa6c1251302e13bce56b8620bc1c13dcab2d84d90182c1b4fa38fe1f912d338495c2ccecffdfa22083382b0d65cfed6d8eba39a4df2715e8c59d7aa50e85c020fbe8565a967ab63745d898dfa00e6665805cf1a7583a6275c99973f5706cdf45036716639c06364a54d2375e14e0650aa89a14a815c18fa12db351d560ea783dd5c676ceba8c0aa1d8ae6f526a4dd3a62ffc0a70bec784b51a747c0e8608734e9a8ddd6597131a84f8f5a782495d967f3c0a3bc7fa5129f8b7625d6889cdb8c17a45b3eedca34e3bdc2e49b75a1997ddf84d1074716966b42d075aaa12422fde9c755f3230448e0dade1bcb94588be0a8b4cef41cc16232fa3ebdc9ec86dc1ec29a54bf93cffc24493966850b1b2f44d1c8f41f4b36148b342944c0a54585435485dde0ba7dbd226b5d6b54446a01fedd39f6f56cd50bd86318c10b75d0bd1ff2226802f1ae1a6fc3c280b5cad592833d903df2fc3ee6af0995b926d8c8c2193df87992f3d18260d4f15d2618ee5f8675643fb473c40373ba28738f389e52a39a60991d1b7883ba31724721c904d76d171e82a65e1500dad739a6c13fb1ed6389f32d1de3139cb04bcdd53525c9889b85379d3535a25d290351c95938a3d0cdaf38dbf1d5234bf7965c8ddce9ace1b66247e60d74ec7702a0f931a3cdf4cb465ca9fc458c380004a3a6e7957f1f813210b8038ba663fcdc42a8965d6a252b5224bf249552b2575bf64568db4091d58323006c3c34994d3a5ae85dd297b58f9599f0db4dd332c05200b0883ae8b45d4e1bc9869bc9fce6817c210eafc10656752ed786eb8839c9ab4560dc10d1f786e75d7be926b12f676608eb1f4190c81e7545ebce0aec27d1bc46eecb1996cbf0e38a801a69a4812e4c93bf0634615b461a81a60718798d76f987b2db9191b219c7058e80d0fe92d9a9af155a04cd307bd9748ec880aafb38078a4594357d3a701660efc2f939e4c801bd76911f3f081e36711e88f01ac1835ac11f7b6193d582362f3c375ed0f797e9416b31f02112bbc609cdded323a0f767beb8f7a28013cebab2fc745e7e3bb7c4cd5bb3243e00b2ecc12530a65ff9f2b2f5aa9f74cc65b418be9900847c21b628c3d0ab37c052c22f19ad04e64a3d03c0e85ce954c34be0e484aa427d6569f189c76270876289381195dde21f6cfaa92619585bcf2f46c382b798d085c445186c4a79a9bf9f04a318a8204ebe22b36136fb157d404ae6da97c9ed315a13739954cf9ecd3cd05581c8c32cb14f15e7ba88202cb454b09ca4783e3fcb56cd55e2b7b93a417b910c5286995b904eb11813ae0b069778fae8afc886e924f86c6c8319a9d4ad186b9993f67d2582398eb51afd2e2b9d29845b5afd2671d4db8b37f90f1416768fca7dd48d01230dabf95f2f1a0c044bf2d755448aaf72316c8448c2ec8a58244e383992bea7cc78f2ab66ce6927391a418e66dae58462e127e20f6f567f123cd03f4d3d0fe39a7ab9ff7c878f02328ea1f410bcb247bc5a9a4f0c5cc154ed26b24a3951f53705897e7000d8e01f792fa0b2e338655be7143005b019a1ce418860d37e600334a60baca78430f0e18563aa354efc73539b8485c0ab349c2da7c868759cf5be4ef497b0f0773e55faefc14b15c46760a1125207ea4e3c0505887d35ab15618af869b448056a4f73ce00deffbed417c1d713d332ed297e70d88bfd54ee6861fdc37dc7ce30dde2dedd610334bb0e6bfb67f8aea363cd9a64390aef42aa16458b32c968a01d4296fb9b98d47674d3f281d6393ab5d89b0e53898dc99b889faab7c8a50d8a2518ea5eab10c95176b549f9946e0df6a62258c36c9d02abe474f017e7c93cd8d2f14b7c6e5168425b22b0d7350faef266e3e83834a121105826b400228e6d18c14c48d967e327c57ccce58f4a86841595605b267442ab455e3575250b6d14c65a9a410a1a3e9e5775e456a6177b23fcac182022cdfa17d76121a1db04fdca6e195bf26317dc2284b13962905e461504358bc591842fdd32fb6bc8b6a1b9048c8801ab88c3445ab9c90cb7f2718fcdb8ac3bba17596c91d49774683c5417498e214bfaffbeffad73180ec530e3a0b4a69a987c089028ac58dffbfec0ae911fff7f6b5f1c6d66a14d489ff8c03731604a5b229a09dafca32c0f32fb0823dede6ced1046835121ccb4b530e144eeba6710987a827f8c510ccadfe9eb6726292b3304bb5fa90cb98625f8720d237c942f95cd00c3fe46be5fb1bc615e6258388d0e50cce911e286743d8cd3eae0636730465345dcfa7c9d027d1f39b28e2c655a3b5bd5a14285210d47ecc6f900259c0faed5ca4be8a0859b8982e3964f053839668065e6bf6711b7f192dbb60745bb143bcf0e9f6d5500816381ff68298539a0fc58ee47ed0ac11ab70972a06a463ce479a97325ed0c866a9796dda6a22ee207895fef335fe2b79bf4cb3c56bda9aa06f4ff989dec399fada23c0ed05d64b9f38a0fd9478c717db25752993755e27ae21a2bff55ef5ea4c0ffdc23839fb939eb7ae34ce2f7598bf44b3a09c0d773380c65d917fc6afe4e5b1d019c2efdbeda65d874ba9424ed5ae84cec1e91c6fe69fc746162dfe39af4c29646d9310bc823e92f2e92d999bf7304d8d3381888c67928a26f709efdb7209de8167b482e77aeebeb9b6631ca325cb07b99e6d3b17dfe179c4dc1b7fdd56a537efae2c2fa4fc3e49a25c52b4b088091a1aacb31b577515fbea6b6a978682a79e75eb03fd3b30b79b76800247084871ef78035d129652b5775e4ffe201f1e977addc642d6f33fe01cfccd7cbef48c8bec9b4b72071a9d4957e92edf00f054fe32ede6f0a115514135fee8c702bc7ce07a4b2dfbe12d7f5a0253b11621414a63306ef41546e98d634c427cebfaa841f7024f50ff8a15206fe0647fa9695a284edb2797baacb71ccdcb922ff18d000358ea705e86e91aa71059e441a3c28217479be278e5bdc7260718b4a9e0a50be98c9b76fc99e6863dc5d59a9e0913033fd7d8653fa16060d29a9d7093c029121c1a7e29d43e699f0917bc4f3fe54423c785fa7993f37dcc480dc090959a005dc48afa508e7f5aaf348d76cbcb3e3c2bd7da69e61ce5fd51b1e8ebda56751434076576b5d264a1fce5b06bd6eb1de563995d8e74837ec63835b485187f594cdf10325c1e46f427cf45060438478926123396cfeb70c6c1c9fbf8f610b74e90a5057913549537d26f7c19a7b8868ae781cd0d95128ac6d64b2c3ca58ba75dc8d00fc3031f65358b26b171bd20502810f9904b49b27a85ee08ef09fc50f78ddca6559694465ff73b3a0c94af364f6c8ac0a3d75193e70bef466de562294ee7b570007d2e932a84c8f4b60ce3c3285d3b1e2f39177d7a61c34ecd5b3fdc5471397537fd39cc6ee41c9cd761c38e86040c5d5cfa0138db8e506838f0fc32b23551ff23a01dbad5201d7a9619b6610f67e5c451a1798bb19a80dbd62efff3103be654ebed4225053fb5d51cbe23026b90af9a37b6e640a58e39f1ce9cb1e71589debdb96c11d5a649cbf791d7743a4387502835c1b01d5e7165f049c27ad56a292382b2a6f091614746261ced10d13f52b2b6744b3eeb854beb216e29c387b7239beb00224822de4010abe5875f8f06fbbb8b1cdbfa71c125b3cc6658f2c3a37d3040cb688251c43c10ce152dc93c418a55f154fa4b79bb06a53958d77152d641c9c83a0104e4bb432ed6d468b69f9705672e442f99c91af6a9af6d2fa6fcf9774dcc767438a36d5e520d49be8e81b176d98b15024d2b87fda778cde7fb88b425a694a74985587f9464b99db9b9aa36e49350effbcd64aa2487da9f87d6c0ae55bb68f30952c99cee4c23f7e19fe2cf587cc5f9a3823f2a72311e0c98a16a900e7490853b09bf6a72f29380bda9f124d97e325c81d483b0f08d8b3ba1c34f0159b95383671102912a3f5060d53d9edc6f80de3f1e2cf7e3a4846b542aa437aa3d72fb1616d25aba1e19a4beb1c5b2a0226b12cb00f0656c98fc0481bbacea32c287ce65ceb48f8d556ad5c2daa7f617fb251628b18a93f2d4dea0e8dd432f43f0e015991a1f68b1d7182c96d74d2fea0197327db960491e5e1385b117d1cf82d06617d97f7bafcfac0cf15f301d28c03da9aef29edc51984082fb05f2be939969ff1e4e87302a8edd2f6c486e81a842b544d1b1ea64720782124c0cf5724030c394701fb9a6a2977068e57618e07618734ee4df246273132aadbeeda856a1eee70e56759d45de91709ea314b6a15be97fb12fa7d53d1d65423a9bd193d07d7cdc531878bc76a825e2bbef48d02e1f5ddf53fa2f845d38a5d1a029df3f499b81aa4dfe4f9d9fc6fbd0a6113aefee8a1d9d1e8d9fb92a8c7be0c9b140332ac4a65ae25023c92a01ba414751149a4963d1c1f82f20fd0ce08d769c7a1bf7d9c093f3fc551bc67d210a3e86f6fb5aa7742151cb2adad66bfd869b01ce9914c057ef7d8256601e02ee95ce4b4a19b67083b3577ec4f4cfafac0c57e0f3e211455163015c9b19581f3000f97e9396360c5932daf946966d40b3c7b321321d76d2759685726c6ffd3eaef6c7071a9a62e4be44e324f8ea3a86da61b6add372ccce8c3114ac118a94c6311d41ce274cc35e7a9179e72115bdeaeb7f696a1e0a99a15edbb3f2d191a51f811d6ebc02d4e0e354c2a42a0a427ed2acccd2415b0d68b2b33d6c2cf6adb9b0669f57b7f25b41dc157f6cd5fc9706a7e7edfb1ad1a3be6b53fe4642c60557e3a84b02a840096faf856fdad03d3cdcd2628decdec9f2253306c74a1c8ac2071f0ec879783505f1c66c3bf503155a88b9e652ac738b25247293407ea2890b51cd61bfc40d17784f87928bc656ce1993c63ae442c35f624491c310ecbd0d09be5369d7e9512e89125cbf0553b2afa0846028ecb9b58dd10bf65ee09c535ce3d51aeeb9f22bc461c1acba54a6fdff18e3ee761216305c9c030a2c57944dbfc21e8ab80ce6821f27e4de4c1ec72107a839daedfd631e16e8b435f41ede947ece220b8e79ce408804045c3d0cbc040f790c8b5556a86601e0a5e080dc820fe12e68063aa8b14c4720a88d55c58f905eb3e76976c4ebf065a95e71963a86a5300b79e18240978ea4a258d95bf248ab3e7d4fdc17f036a48c6e6752ffe0f440b28cdb062fea89eee7b29ca8193aed3ff5ffce4c0281906abd5549e98375d3c7b0da18db094d8d54577afd6255468833cc62eb21fd20022a3f868ba0e9a22c21721cb8cad712aea83d1f026fd8bd206f0bce2fc3d1 +MD = be2da5a9473cf79f41f123520e48c0b37d0b78af0e640f6f85892fac68489e29b9992eb38215cec107a29f95cca5223c + +Len = 31120 +Msg = a63c48f1fb7d0b57fc1c832a1176ecc6f3ed70c1b3de487affd325f5a1f9cee648d40a0b8b31c0bf2b5c5dcd98947682b7bcaf06e353dbec32a66407f944ed7f92b337255c61410404ddb43803477d046806bc1ed8b8dd4dd36f0436381aaf730c4197e677f6d74d0f084f165a794b748d3260b29af697c86a95ce2c67625aea3ee6f1f7e3d6c8c2d543f80da31126fbafaa636a32f351828080878e8e04370bb10b0effa8eb5c8dddf775c5e8f757c155d58deda79953a69c97fa07b3e78effec16b7a7cf1bddd3af8d8fe8301326ed071ba5e401cfe45a4744ee3de0f5a7ee7771b2975f5091bfd46b0e1b844ddaa74ee475f6497c4dc608ef2ad81c15c9ffdb82c7766071c276d3fbba08eb8dbd19b098c3cc868ad71467fe7781702f3e5a9fb3c0eddb66b62334a45b576dbb1568b79f580dc0e0c769ecda9de0e22c4c284b6b64a3d617b5ec80cdb8b012bf2bbfeb62fc62ff6668f020eb649c7df23c9168117a415c6c09f93ee09ab9e3814744d34776734c0401ce8a99945d466a56bc7d0fcb6e724df973f644c91de7e9b11ff7b790e7aea2d92eb34df4cd477ce1d212cc1fd322a2cc8231610d8226e0b079df1b10672e283936216d4d92871127faafb03d177353cb4d759f2e91a94c8d7a14d9bf9ad37e690e5e6367540e0f6e5ddd23efe36e483efd4d66f3f1771791491d5b6529a58db1dff2950abce560ff22238dfbdf19696db93e1e254a9827010f8207cabbac3b59d1636dfe7113ea22720a562ab27e9f9faad22f8c46156628f3cc47b5f9f171a80b3b510a1ca0971e7519e64405a5d01df89001f08bf5ba4d1e8282f08a7b18e7b601abf865954d3d52d8a6117f94e530ca00fc19c1400db7b72c1f411852165ff93ee28ef3f9f6c532cffc59c955c71e48ab89cf91ff46afe7528871487f5555fd795e956fd479ff3c8751e38af05c2f9c180ed9a3394d7dd67d2448c409bb14e93a87d4802ebe3399870e786b6b8eadebcff5009ef60a69ab345b8d34f832e3e60ac515cf10ada9705799e014d044de6059a40c2a3e65bb8f00950a3f55a1091c6f801e04812ea8ea805ce32c27660c203d85c5f01a46baa9683a858e27efcfb2f320b8c68a29792f89bd485c76db7d5603fef2989195af22f4b2c7c976067dd11e0dabbd32866566fa26d94bc78d792834795dcaac3ae2212c6698974acd5ba077afbf92812db2b85cfe5ca121634abe575dcc2d721d9bcf99bcbfa0ac2cb048866fbced7f06a84c35ad9a088d453741f4120869eb262253c21d068da30bc6f0d3b3697535fa914b109b5b26111b87d99400d9271f3ebed62ff233063852e3c1e7e48fd3aaefb3dc723067a3b8cd83adbe8f060f174bb98069a10fb272e950e3496bf6afe6ce5828e5d48528874473e6fa2759c8da365978f794623a59b9557d81ae66aff280c656f0ef7f5d88669fabd03098fb70e8e7e76131f445f5a839b71817a77ed5ec458f1ce91be9c21c4e25c9128c4fe248aaf430e28c7c4f9f46ba950d80c297f91ffbef2a22753d4fc97c6c35fd6d373decc8eb0ef4876e87c2ae80f7bb2441919ac1f31a5ba802e559d74101b3fc77b1f38a1a1cf20d5a46f6bb623f1e4bda9b000ab021902b18c8445ed1df75a5aa8b096346764fb61cc62a07c14c72e06afe97fdada887a587ded23ba3350c10d9b3747bf683d22cbbeda6bd28867e8afaa4a8c3721509bf58114d93406c41e40c107cf9b2ab45143fa5b1031c550cf290747a8387d2de219247fb912eeddac9498c6b0602566e19b1d594012721e2bf375657667545ce723d6a265af71f9f699a0e87c96fec17e1186598e1d052c99af4328594c3d8a15a6261141922695a69067f1a6b80d506147c3c02c89f50892bd1f04d34f9f21e8307140df43835d17495c56a13be7a045be5441de01d84ea19d579f76e9ffa0f92376b5b13c0eacd3050c9c0eaaf41d85e5c643051d154b40d08b3cb6c3e5a3a32f74e459f42ef16453e736318dd934cc4e88482434429aeae738711535d79670951a512c047ae745c68ac9dc4d0d92635928c5cddfc6ca2a51ddd104e85bf60bf4c580b9d568eaf1dd45ab4160e792f5b61650647838356990f9e11823d94ecfdf04f785ff7f78e2f8c66f13721dd2fdb5df5c8aa61d892334fb05c1a0d60d26b4673a12db251db3b98b99c4f916bee608e25ea2e1cd1201be7fd393c7d8bdbb055aacd3010055ce8fe3afd85e48d3390fddeb3fa3ed8c7f8de6cf011167dcf7426dd45909879dadfc8d05b02a4aac713b1066d374f544e723de4c8c05f9f7661bff55274d3161cc7fe6500ee58297392b2865e0cd5ad7e320b4f0a71e157971d2ad83a044744ec49a6e032708974fdb50947cea25a4a1fe05094ff4e220efc506f70456a7e6c100dca283ab0bef22d23bd3007206595f924159bec7cac2d6ba394a3bdcb00f451ba712760d77f0bcd85d62850af7ff5d3a4614c1c26071aadbda35be852534677f8a4c4eb0d5527a3825d19f0772ed2760b3c8fd672b93f8a48a37f102401c84a716ae72579c6ae79c359ea309ffd95abffae4c61884c03c9e99df77b6c92e492cacb7854445c0815efd283585071a43828c06b069148cd344a98ab71508c0116aecf60c1959f9e3fafd0ccb0b11468e53079d40db5330791139c833cf879869fc37f85b49516d6c1ab5cad7feb6d497cbce26fbe1b9718a9ecb267238de0ddf5b1e2d0746c4919628a7d0e0f2504b0c377012560ecfb68447be03f6d374a6de02100294b41c0d0e9f53cd7a68862038406e0dc3d4fe85f2a6b30f3631d3e9e28bbe2797f3c04611f939ff08d3c0eab8514877d9b6de5652262aa6b4d6844d894268fa659879c36cc0db1410c6890118f47fcf1c36e7ae2f508558f733fe483ed0b0f9a214710b5b80a77b26a34719c6947491efd792f3e6b0739481ccba707fb116b3b1fa7e948aa33fb2cf1c938b3ddbd76ee91b68de14c045e7c913414cd86e1aa739bcdae566b304495e74f6dc0b1518948c64e1b3360aacd141ba1b43b5622d429dce1e747c4a85ad795ed992aaeaa8c13e569619d6f9e8df9003a0dba327df2452b0c1c827a4346d843cc43599c718639362ee885408ba6118829a9b3e49a0baed075d67158aa0f823914f3b5434d80a101c637549c172146fd93108c3220274e13469c7b2585bdbbbeec31a66ae781338e59d7734bea057fa5a3c8afe5b84e0c3ba4f708a87b596d1b7c8694dbe691d7240e4e4815ad5aa4ca7e5b82c50989d092b96e80aa35e97f99ed79e75cf3b8750d0d263dc208289cb24f516f99bcdf825ead894cf35b78d97e679307b6b6fff58f7fe6b919a27851a53c30dc2b78590be8a8d0d24b940b6312115a5cb1d66d3ff38c1724e32451aaed6d823341e6fe5178d1cc7b7a88ac059f14584f14fc0b3c815b40e5e835bc8fd10bcedba4add63d565004af47e062a76b981546a9cfe0d28015e966f07ec0e8983e9d3c1c76e9b7c94e00d77c443631bfc418aa36f8f4ea3ae19b0ec3a7659d8b2d76be70e940a81af34959df5b2e8be3c0e9e4841e4f6df5e8dc452857b397f201e1c96aade2f69266669f39ce559d1fb5105a5beafa41fa513773e936b3bc15e166c5d06bd78b77d0df0f5144b050bbcb15768204fc5091453100cced6cf53bf68e1a6bca284d11583d13f166498afe29819fc3135d8001ec54559a24e62bad68e0300373dc26aa270712dfdc273432f8dc3ce4bf25bb946d27d81a822a44b45ee570600dfbfd8864c574e44d52379d5facb7aeb25de890f132f216b03f2a9600234049418eb9f43800a0c862d37987877b77e9910def3e9ffe0b54562dc39b77240987b79b4436cb3e0053c2b1e43a97d0e45d073bb8e6a0128c9e1bfdf90deb7034e3162d8596440afb4d15f45ffdb83466d1baf12ad01bf6dbbaa7b6b232838d27220749645ccbe9f97d05a5d117122e650f52362f4339336270a360d85468054c0f31f9c9cf8a6562ac38ca24d1cc4649dd7813ae892250888ab70452b9c2600a713d449c38a6059fa2566e3f730f047a04d48e90e8fdd5b4ce8aa908a9b824c80fd233c5df4a51162708960a4502f1614c0db2bba9f24b5006c557e26e72dbf0b299cc2d0c9cd23003f64c6d8ece94647ccb8418132b39c3f80f16c84f190ce9223919ba07c40f55fdc79750989a75ec5eb80e8f70cd27756d11efa293d5401b275b225517eb91eedf23809ba98f1d62b87a570906039dce2c73e95883cdfeee89a7eee78639de616fb40d360ad5132c53b9676c1ff32436ffdc0dd2672aceca0fc485569ad58018761f48090393dfb4f71e47a201c54315acf462f987133817835bef8c9ce8ff79bb0f39fddbf10a606b50fe91f4a283d3fc64f0b32ab1c53dab13346fd399e1ee082ae7f8dc181b9a79f8942342b26bd8b7d4bfe9992cfca44f955de98911b0de23185ae34c309ac9e7be123e311c838ca5ebd8841dab66b4398972e10477f3b1d5829aa7746010547e497fcc0b0953588d52426afc5689d63095793e8ef433cee610b02a9cd104a50642e3b416a064a239b105857e56ef70fb647cea6db0f79f1e69a3560cabfe23475046de9b0a3dd36faf2abbedd320ec639c82cce9d2c78b45367b120b158636091cb132e16e6654f8f4b7f68ff4a3b030e694cc4c832bfa221e4045e2372546134e2b9832f5688c9c29b71daee2ff262ae9b9d2dceaac547ecafbd9da3a62bb2e8dbdf8d4c6cae222f62f1890c5bfb4184ef9c6e330d10221e1b4b53946c6fe22816e3a100b14c0540229cf7dc468c4c4bc5c90a77c236ad30c71c14782d875b7d346462ee9cf8df8f6ac2abf0784bdf4dceb1971f729f55cf33ce54e172089b42b4d04768a82b0d779c1119db79a077156ad4788c86b0b833d1c09942d26a2e3308c5d3016b593b9346f6c5efc330a03d1ab033619711511931a1562ea73290a8b0a37a3b4f09d66cebe234bfdd62d71f5eb36c10fc479cf9c3cf100798e84f2e4cf7c188dbc36a5f0b61eace30bdb856b77c672d4eba182018c86b600ff1d63e1e412d7c9a0c63f426045c9d55b7905db579d91906ef3f56912bacca84f5b252d50e3288f25b5fd6bc381e9fc4c70baec91a1666ad6d9ef7dd576899805a5ff6e1bd55307d16ca514e7b8558068286c472fbc388ba9ba37e5dda337f9a965ba4d4ed29f5b2f51ffe4d5d356883709e39438d5511b72fe964832271cf2c3021e71f0c156b0c4cdd58494bb323c407ce67ab5d3f741b60cd44eddec80acdce4f3830989be311a49ed9b2c5631c50be73fa1ada07325ff4eb9a0e5d8ad4e7b73012aa2141f03b82b10d2a68e9d4b20b3b4b228230df0d42b0ce652d5ea012917100fc149c35126dc06d1094abcf508490e552f440ccabe0b97c72cca7eed6d38e7d97110f141edc5973f5d72d8ec4a0f1431c8ebbada445620ec7c9eb239cf3e4f31b751f0fb944d8bc5abed37586e6f90effe005d49ee75 +MD = b236f326dcfab7c5ca01b0f0e172e77c53ff4e9c3f0686b0e60b91d7ffe134810dca596fa2ddc11827883c1613f74960 + +Len = 31912 +Msg = 8050922bf6bf1a5665e0a71fff730ade4e2942646a0750846f0c47d22e13a3aa23fbdb74a8043a27677cea0c159c52c55eada28d1b6eabc1cbbaf5a041660b4f9a691a1f723fba13588f0c9d7e0b05a9b59709dc99aebc1e09021556db63b474cde275b5be3645221e5f345ba389cc923d32a1da4d8f2aa2122ccf7c63d44324a4b014bdf3b2815da2358bcceadd4f89ddc5920e9dd99e55cc804d9b437f6364071a20bf787b16cbcc58397abcd135957d970401f253bf402046b43ae22cba3ede67c144b759ad75851265ed822b26bf05f11e39b5c7366af6c52fe2a8a5f0b911e01ed31714ee61b3a937aba2b4cc0e5e1b08404cfbaadc3746e31afdb1aedd88cd60f4007380993f66d83e8634cc8a6e5deb9e21b7c49cc911fb6a49179cb32c76ae2fda400c251291702e9473d13b1effefd99ac52cb4966e9d5af4a06142e322310d0e41390b137226013638812a57483b7b21ec892b85a5f2736614a593961a1115023fb05529502341d34c845eff82f80c1df3830a7dfd213c083b12ac2ea775d01f01180b3e758f75d27883dffff34d12f6a3c35868bf523e40dc4e97910f85c4cd511a33392791269d8226b640e3631713c4f11d2d34afff77c1015ca99a6b7b75f55ed701af51db9b3214eaa99c61a2de1eb562b4a15d0916b0d4015c924c7d7db68bfe8055f81c3452f6832165703cbe78b52ee55187e483726e90943d53504f5c49b19d60ae72d0a8738a9285b86b1b9b9c89a88b531628cf791038e5a57e51af42f7401a9a63d7fe3406e34560ba5e50107be596e9296c8e9a8a30d06d8fed771bd851c9e579b11ae0fffced91aeed5db90d84bb72a5b6797b056446d1098a7b7f5cb9b6b63cc7c4207dc5c572d1318a41466d4216107056c489bc91f9768f84148c5e2936337fc69c8926142caa92a14d2f8873fcf401ee1d1f20f80e5d665a826f29698de642e7fb2a0724e6c1796888cebe954dd8d1092ccd78c2384776c5720d02c0e2dd79eee669503bc99f4ca9972df5f23045486f9c9dac389ebb278d8c6fd2745da18aa4044ce9a2fdcb742a255416d0cec2cee71397a4a26941e179779c7fce28b9dfd1fedebaa1a9cd5ab4d8490a784fd7cb3a39c24848c0610c52dc9cf31668adde3d7b24ab7ff52e650e5816b732da0ca730b8268171cca410e0627814944806f1af2428a5860a75fc024ec3074697eaca9135cb3566b59156ebb237cc90ee4b7ff0a1f18efc102a89566256e1fbaff89c255bba4d70a2b1443b73e102518204f0c99987502a2ed673d33bd92c9a4abe86b4cffab2d5bb8a43974e7f9e202db9abffb4f3d1588d0022418253d26b8fc5ee053c934add2aa6bcc9eb18874516f31a5d9b3cfbce5530fe68decdbab6a7943de1488effd2148d1597f1b4a7086739a4aaf66ab4d3adee6f0ff84eccc3bab4dc109bf2b8faa4c5b8ca095be5b04514b1ad6c86e6b0bdc3dd0077def0d9efab315adec75d9fffd80b2ada162987da0ba92fa69678aeae36b00104850e426e03a687b915d507504e787e0dec5bd34ea6f5f84ca55213a8d050db474c0e446043a25ed3e50a7abdad659049e664ddc96dfbd005b85c27d2172556e73ad828edf48da8d53ee3426e7f3c26370b2aed72e9247f79d97e34559598398d5855363c9dce2d662948a68c4b64097e63964b71a1d8cc510fa08059d20f4ee0ad6bb576c6cfb52fad21ed3f9a4501c7f6903eef1d80813563aa540555f35b894103efc2f8f708d8d25660aef347d5bacd010f14e68264ccdb84f881a6ad292f1c062a49b9aeed08a0d04702ded24ffeefcf070783483ebf8216b4f64da3807b475aaf32945c2e672075ea62e34e353c64e46cf17c38d6b55d49d08cd23f2715c9e9c6a60e69919e592e90f78b23501b352686f95abcf6577603936abee8e8a4aa99b6cdb13edf5553e482e95db96844697f9f48a43b644dd42d47b9990589d0f254c9ce0441df33177d095fe279455e08d6fd05e21de93e7fb032a0e900d343aa0145d28fdb5be1ace36b81a0c9ae121b12e9599dc94dd380729c4838408ea2da887300db7419071afcf07821126c08a81dab6c5ba958b3de5dcfd80d2d829888d19b816f75e34c6ab2e26cedbd48e7bade8b65a724d286a1581279f12f76cbbec3057cd3447f58a3eb87848a300758563dd16c06a282f6d24aac536bae34e38348f81a904bb5d4cd9129e982d574028622c4ab028b31a9771de68d03128289e047be832df14f68f18b0ec35d13568e5175ad472248a7479bb8085041c32965dba99dde329d13bb16c17e39a15174a3c01ed46bee3fac7943035ac3ae2af11e7f54de5328b9cb76441bc373d8f997ead906813defd908e779e6230fd1ada15cd131c80c96ac3d408381249a8972870aa613fce5ac7e82384449ad5b32b503c9db28a52e04de32c2dcdbe8d63d240cac2f2e8c8cae97e414ad143ed05aabdd0ba422bbe4fab771a45611584e7b77ee787b407b5a7b8af425ba2f1f96d0f5f8ca34055454019fc48dfa0bbc2bcbd3f415922f0f769dc17b10758298d41cfd1caf94bbb6a6a0fef125cfb25c94b5a0e82c7ce591099ca24080e6f6f0b2c7291061cb2a2903603cc115ddec7fb2c24690644148483afe970d1b1471715958e39e89e13cf793c8c1fc052ca26ead792db466ea427e324d07a88907dc61f157928ccfdfd7667d60f56a9cc5bd72ac63bd1eda7fba7918105ada73c72009a14d9da3dacce5c0eab041d283af23d1d7065f956606978315d0f76b815d23b192c16eab53b04d4b01410bfe62f2bed357ec79e0b589c3e2511448235ad0cfa1ec3b6c6ce193f750eb9abcb4e09774c2549d75c86d0f25def364b4caa7280b20d643ffae2d7ecb16cf43bdbda5a42fe4f5a0b91537a1a5c12448a3270f6dbe7778628f38df78b1e7d6c575e15a24d683637caf8fba462bd10b497d033ba8d2effb1f84d39e8a910927a74be7a71c51e5c6bcbdfd9f069f58d1eeab26d2e12ece8703474712bb53c5ec71a9993396885245e54d298de9e99c9dc093587d1eba5c43953e5ce413df634aacf6bda79963140881c6d92df8f2e698469e61e4695ee3585dd2d9bc9a1d2b6bdf991caa2eca72381790d6273aa07de9083408aec902a9eee36b884159f6657792fc7ee55ca5b3fd3013e822b8dcabba8ebe1684478ef72bb0722f1c575058954d86abff2bdc207e53b6d6c6788fb63061a2540de9ea153a4b4d97f59c154dee999f6aa1a35701e408e46abc849fe775084a87f2b9ff4b413c668872312b8caafdaf8473cdfe9e56d8026aace4f686b10b1c7adabfb3e1690c24ca3e1d7c5df0021ec21cb0ba3efd49799f3d9e7adb0bf382f46e02ef1ed942ee24ff68ee08e82e55ea4554712a01e5b1d118bc152dac46e3bc568a9c4cba662e5f5e1b6bd4bc0cbac495c20cab893412c8e545aec6bc8fa79b395fa0b133004b43023dda0b9121b61ab5017407bdbd054b4b422cec62533559bf8ae5956d99ad9894d622f392f7b2b24c198f86c608f024f2ba79e8c61cf7be911251428fb8bc26bbef2dd4e415145503134772cc9d3c1983b57c021171549157ffceffc2e6e0b5208ee2f8b20345cb82f68311f60552f3a63c1d816bdbb49cb85943132eaa810c6abe29a6224aaedc70ca2bad6dc79879025544affbe17fa55d2997c7fa8c07f44284ea255c71b6507698268c596b7875400bd9d2ea0b1e75ee77b4634f14da3550ea0dbe8900c4ee3b675ef6e17959ad0763c4335fe1f7d41249812f54cb62973bf77bb9d17f427f683fba352d7aa3eb0067ed1a83ec738a71a9e672323807e2acb31a5e5b7797cba428229066f6bdf5d31e3dce7eb3fa5eb49ecb7610e432dd4a27d3f450702b9a982b7e4eb473119327909a9977bef5198330188117554951be5a8fc5d7f066b4eb4fb6b83e7b068fa4c6edc19696ca838568b5dc6e15b606af5434171981b0e1469db3162d9504b0f3c71f8f05c2e364634d8bcf3facdfc4c61eab333eaa71e8511b5bb0a84a73bdbc9b164be9caa684c5e880a1afa02e53abbfdd616df41192b3d397cdd820bc7fa64bbc3d6d377dab513f7d9ce87b097a053fb1e9cee5f8a715cd50b6e5a145be5adef8adb690cfa0b25d6b0612c4da027ca70e128a078eef1e106cb4f6557741805cb1e2ef5d042c8e473028540408b4b9fede25c9e23c3177a4d50d33c3bad2bfced1253e2784178e07b64ad7c2fb56644c086ab2fc6837c7917109c5737737bf3b3fbecb74b62959a3e3b4c3861bb0259a74296edf7cc7b7df2af2d4ed143929abe3f5bfcf04299826a1ad3fd9d08ca2ef0aaa2413deaaef97e60e87bafba0a526a51142bdd5e1f295d77e734182b08653b234fd1ef8a816c18fa707619234dab56d5c7bc8921710fa6d70884899e577ce5411218a3088d4630c037c6a43bd715f231c9377a194995c4ac9a6767df31d69d887b7dff014d387456a0d5e7502112daf9ab2526b2036c458d1f45296a2222b26dfe8a39f12b8342226e2c38fcc6325f91efee258828f397ed29b644dba2b1d2661db60a44b2e738b7e2424fbe30f52eaf0a2aed1844bc3a412c3340802e345c154b99d6987db4b68b9fb06200fbcb96857c43f3cec126ab2da924b3043efaddd02a9e3558d67c4a1208ef3661812645c9d8d1b02838e37917233302e45fa5d63b1d4b9d0277be61efb067235c5bb5aaf0824cc8c1165312722cc6b68d0aa5b3caa61a7421bbfbac8928a0cf5df5ca347e1b1da415e3f615d32868548aca7b14e3579351332da47852c43470e2ea0480e6f5ecb8831c5cd1ce9880535a09a67839944ecac3475953e1259aee97a2c50ebfc5129cb549e7f4a91fb7397762b83c220e95373e937addc8df3c6ec8babc3c5ceb27b718d737fd0700658d5f4010ff21091f3d119c99645e339198029c3a9862eaa4ae2a5ecd397ced23a59e3c512fdb263522f8bd258635c542e0e1b1c0b1564611d8564b08586f586a48a0a1e95ca4e88faf308fbfc1c426c8dfc2a5ff05ab8fe7cc491689d842c4b1bd033b59f412c27738758ec895adba8bfb31e34613d72a9ef06f6bb217bba4929932431384a93694351434c070471314b9cbf4265a6d98cffb459521b52e8a7553ba63c68cdcd76f4bb91c37f024a2fb91ed432047d36cc333483d492f1fe8e2730817b38b220750e2b09fbf83caec992a027ab46aad19414ef3cea8f40442528db7d98afe1d58e170b74997a99e7275c8c7e563415f20a294d4b3c19260195dfa2623bd64333eb99c29a480d043c72a249a2dbd5a7e156fab77a71388e7f05d5eef70bb3be84b11bb843aeba62f4d2e93f5be13246e5a10f938f32f45d049e902805b1513b0e0b26553773889c586ebbd6701051db4813f14a5326567cd9879ab654d4b5a31b1f41013d40809ab06f9f76ab123c4f50d327458ef665d346e97b02ac1de9dcf115f4241fbda84444fc1e87d28cfb88460a39eb08492a4a92ecb972d534f4d0d816c726a3910a825b3ebf71ae29947072dfb0a388c8abca07b7de7096c0de651a4a436f9264ae3d3e5d0a9c078e11ee1b7b12d7d81bf239eb737263b96aaf85fed8ef67b3e09a5b36808771a56679e98a05eaeebee907818747fbb3 +MD = cb16838296482187bce81d180666b720ea763b9dd3bead81134f8deec96c98bab0e938651e6c11e6fbd76fa241cec784 + +Len = 32704 +Msg = c0947efb86d54644087247f9fd95133a94075faf6250a2cc9f20df5393edbe1a4bdee20e90e877781a370a7f00cf9eee7373fc38acc54aba23b0df3f020356c9d95ee18f9352e042a9c4b3949592ccfb8a7a08b262373f02d8ec1abff7c62415d2dd2485765cab2a1de2e941a428c4e83fe32c266ceca82c259e35da5a7f51859e2353f8214efdb8de59548d15d7af3dfc780f9bb22daec0748cdb99137704a2a5f815f07b70017554f19d80d0e8b58328ff5a191b4179472c7fb2020af366f2502412766e09dce8e7716c22bea3fd412a41b4a991723049b43f6220283e9fff056ef391e263b99a00a3687cc54fb0ff6c06c651fc06fc4c769494f8539fd6512da0604abdc4be11054d3a95ce35f5465515371b424604dad946f094745d346e318000a8e87513d760388a75c29ef59c4d38b00f4c7a717a451c1dfb74c1e0e077d77cb34bbee174772cff2587d0d88cbc35d93402ea6ab522e0c4353913022f696c7b73cee6506eb4f141ac0714c59b0ad559924cdd1811d9588c4bad9bc4e16e09a6f15a37874f7e4ef91228b1e453a0e0d931139da218d04d1e44b7a04c80ed74a534d5f7af9e3c0ccf60d4f15e3be41e001a3d703152708621283e6cc29450761f44296fefe458f36a9df21a5bdb3f577754b49fed4621cd3eff2c454fa3fed7bd2a3ce770a839cb73d16a7502bc1a52e5e75e71fd7c4ce81dd268741b375f5f26edf8a75972475c9104244a7c65dbd8f3dc25308a7c57a065a8da404dd7dbd6029543f6d3cbea6e6d3f07e1f15eecb1493af022bbcfacbdbe8a6af30d0cda03fb2b071e06398ac8ae89fd818830b3a58e09a691b9fcb107d27f00d4855cc4afb7b52b6519468f33fdebee7369629a7c6a5131c3ab8bd046468f842ada5201a2de3e9714357a6177026cc000bd7c07fd871b7801ba047041c5c2de3e3773f9a419cb3372815c685c64145c6eac0764f18a6e63920ef0f8c1f521f658c249157d1066e7c926740daaccebaa055d8a18201e53dac0ced7d28e7eb3b4bfa35bbbf46a169b5f4b4ab628e1fa920ff98d8b52e9d1c5d1233f6570098101bd033154d3cfe4377e1967cd9f4c48fdd2a798254f93f00c0e34b2192f3e91c3980a5449e0e9d6a36cb852b8d7b4ddd19790344edec5b898bf2ab75692c4ede499df4b00e45df7c7714f93e198c2c2f8a6dbe86ec927324f2c2cd78462449d4a08ab9ee3a6d64c8bd706b3aeaa1efe5847b13dedd660651a9c63980b6765a7df2d95d659f0fadfd8e4063989d46f99dbc23aba33ce195ae259f6855469d015894fc67ac98871b794e277add9df5d9c685e9de7a878f9178da90e23c5302cef32b865129d37e4dca91781980594920ee665034cb59ea9a604d5d3fcc783223bc1ae9b263cc5fb57fdcc4a8077b8b3f73f1d9372c006d00f30246c97c32c5a031e7a903f0efa5d2f7a48fdf096166b605acf76e033791758f8e0027c1ff17b4e31646be47b9eb36c07d5c06dca755f501fc2d31e74bf268b434fbc34459b2e25e2b3559eeb78a4178bb9bb817b9c3acf7640d3b5eda0a4affbbbc3469bf21a8f19b175f4c651d936f03d18b31154a2e5478f9e2c04e439cd076a3e3a8bbde894bea4f46e74f1f9d41da9fc8bf4653f9b7af85b0b23528eec4fa556997bc63f3cb9d5f9945d20adf6fa4591928d97bbf8f7c333dbb1b44b14bbb333e9d5d3c890f28cadefeaa69da66f58ff4f42b2bb04a6384d2216d0184d33defcb500ad2a9751113706814a70eb642c6e4b7c7deac8709fd26bb96e9ba09f6cda82641c0e59bfabc0618cd5cfcec107050ca4c1ed4b3b3fe93b04587f14e7a6f4da69e71cdf22a37089711061556e32ec1c20466f96f161bb1c5e556ab2f3d4734477d8fb3064416e059ac0cf8a53f54c035ad416af784d6f952f2c0581ab3e7e49f6b554546bcde35d6db0c07559974d47b8338aa0ba4b2e2fe0a6f789f82b3e6f4e47ce54218ff61a54a7dd1d66621672a42a74719da32070d78be8d2c0e5da41e75612376ccfd0c3b66cce8a639cd00c85837c280b9c6ce27da38265edb27b442aaac70536d498e0fac83ac4398ea29bc30449cfeb7f3b0d3ab56a4965db49027d0a96c766e777fa8a83c9d4ce80b5a9c676846d2494b478778b4b8612a76b02493f2784e4509598cd6524c10cba30bdf5a0d40ba02300ab9aebcb25da600accf7122144985719422b36f393da833c60ba4ce2b04674462e0d9e922da74c4de9ed482d0f6a442c800cbddd521f2501187c405664fecfaf8a366c49a660b55de095acf2ee425ef5dbd8c38b07c5e6a670a445d72fb07b63467f1c9898ede16139560519e808ee9ddaf710a5bab30f54ed98230d1a44c189ea4f78260c3619827d971a4906a43c4b06d26cd271d1e73219c1a2a12ca3e949fe0d469c0922a4e833c2b42b4ffe9028e5cf9fba3607b8697b878a3b6eb33bcc0b234fa1989bccbae33e9b66cbfe325c01577006103dc8209b53a282e65dfe3a99f85bdec089d721157397a3828d690ee2d3a85e085b6180028bb31f9e8a7cbb2ef432fb89d20e4452c9708a7d917f660ea90f692449c9b1379985b99e20fb75547f9b9ffb5fb94c21a8edc2c3f3ba8d0f436dd06eef48dac2e3e0f9ec09c49392015f721f1820600b78d8f45c9c63ab6d078a3aee3628232cd38c87922b1f3b70e2461efce58aa997a1f7c75173c1e7ae5f2e50ab04afb5fccf500a98705396778a18489aaf414e4d8b13e4a95f1e6a5cb220baad4327b8ba41f62b04beaacb2e629d9a025c8b78b59ef3f26c4ac05cfe67291ffcd9d653ef904491e0ff6a021ed09dbc3bd6b14f5843619aa21bf0e41de81128a1b005af222403e4341adc65cd3ddf564d03fafabde0238454baf62a409ca07ca3aefbf4db65face06f74819c5122c0f41cdb0a26cdf02578a0e1a57efeb9dc40abd0249a2bbf3f5607ef6498eb54c8f1e1b196eeea6c6bc4a01a493b33dd2a7dec460d6008eb40149972d1bae90077fecd47f87ca9f375a9e7adb0512fa05ce28aa5ec47c46079bca2a37b7af092587b4e2281488301cda8d6209d6968affe0f059443b9f4bb26be91f5a46198a6d4e7d2c5d3eb1c33fe31f9f742dc75688863cb85a62ef057d18b05edff0727aa87d4f9a652dccbf661e5d1a64332cc4686816afe762f6dd324b27cf0edc44419ebb32148a08618c5a324ebb23104d3d662d852635633c3997ab555b2e33164717b12f8212f8f892e3c8fb6bf8ebb22a4b7d92058a8c488276e142e8891c71f3db074dcc46241a38c8886a102aece4f1df0243342f05a2219594f65f65c0dcafb16495db6eb54ee8d319a593023d6afcea61a29c6cf7d27cbc6d7aa90b47dfe363700d95d2d21d0aca24b4ddc803ccb13445b723888a60fdb513d5acc3d802f5b7d4bfe3b9a40e0476509dd5c469937a845489b2cde5d50b47300f52d49bce4e7638b3ae6d52a93f9f466a623d9446bea43620328131b90d3969318288b9ca566843f0dc340576230dae236e7daf6de45a948489ed95926d54684124255a7f75549e7e5657e5fe19872fcee0cae090566f16bea1593aea9260d54a1ff4a5731403f165051d19c887d77175a06d4f387bab63d4600d4748e42557515d3dc330993ee3add0d0ca5cd6c31d1f95ae26ecbbd524d1b050e535cb6a9760c548dc3e6ecb1c5f9eb61f436f14dbd5a9d48a357eb700ba786c3c38aff93d7e3f5c1723f972458359194104b891529ec329a59a2c17a099a0a773d9f898f0b4b3c29c69a4fd061fe83f57271b042b82cbf39fa32dbeab750f4ab3a00e10580909c39497d632063d33718a35ff330d89aa7ba0d8ea74ca57af9c23165a281e8529a52736f6dbeee422f602b5cce8a1bc4609cfc2c900a54667e7ecc242aaea30fcb07ccd6ebe651d9d18e62fe9e98f2288e454e8332ce34a1f71352c2f5c6313682ebce4a5a414ef8c1d5e2bc0fe7ec3585658d291be2d6bbf8427dd8a08323556650e040354a262d74e9432b8f116a89fa50309497f2ab23066ea5cb974ff9eaf9e9bb3f098b87e66f3adcb398900d8431a7c14c5378326585fa5312669715759218a7cd436fe4c2154d47fab8de45b2efdec7b6baedfd020b980e537ae30673e3604e417f71bd3f1b82fd577c6693a46967ac7a5abe7b670baa4ff560de5d64525317521a3b81bbc69e65503fc387c752c4f7fdaf843e231ac3907ea4c38ad553538b65b027c2d6cad2287b8f6f929a209922b715b9a5c49d566865b34d0f358b0422f2bdb1010e7cd0bf4fe7e534ab5736c54d49d942aa27e5403108d56b035dc7669faf81bcc1710c8233e5aeee695b305816a86da5623ee2b06731f71ecd402fdeb311f466ae2c0829cde5373052c11843a9bdd14e8b36f1217ebb1cab01d69fe3d361939f1322360e848318aaf61d41107cf6ceae63c4731bfe00d0803f85ba2e873ae9b69ee838b8ee2bcdaed1c46d6716ef9025aa5bfb185baf9d4ee4d1e11734ea515dbfe262a1616bc0cc645adf8ffe04d074bd61fbaf2e23ed67804fb726631c84e4e4a5566094bf8c743c552a23a8e309fc2b6af738dbea4b5a9053aed4a83ddefcab95767eee839b46b827dfaa8de6972c62fb705deb7f21a893823aca6acad9f573576544d57477b46657628d339c2295f287e986d36f2ac2185fed402140007fea6f855afffeac3dc5684554308016c958a4d52c3a16a1478d51290e6239ecec6f226949a48ea34363ef0a97eb1efe2713b6c5e676123f9960ea806db414e9db8024836999a0e775b03034b0e9e5434fa2423e2e1dfe504841a085e68d6d91cdabea666315d1f34538f02647b35f80a392dba07ba8277dd49df7ac1164a08f2360e874aecf9e61227c8381b4be0a20a343f78f479b1a32bed4746576c05a1c8d4db350a51d728bade98ec9908061cdff540a6d2a6d62f967939b347f26f6c45ba0bf6cfe85db0d480e66505390e2c2f841a8cc8c958e4c8f49c0aba30f03312f28813c13af445071699ec8867629ba3e7b372ff6b9f8a66665a94d7aff1bcd68438d407ce04aefba69bc94a196930e228f5a09e1313e91bd85a96c7f6d8d03a760580ca2cf6b4593bd34472d78bb5954fc65dce4a1cc88c50845bb18d0f37e6d2d66131dd301fc9da29a5292a30f0636210f3b79722f164d9c02abefdfcb981a092bd65681cb7f28d85339698c0abf56bbaa880828d2a4978f64a15cd091eb3e623dd8d5521437d5bcf37e2aba3acf271acc55293c53ce4370e04e0859d2d26ae7009d22da68d114deff934eb42bc037dce91545332efdc1df0a044ae1faf7fff61885c77155b5769cec1b5df03a2d0960856af493c0ad93285666bcff96d69e2dea452bbd576f7b952d78c0f4f2800c4425a8afe4c57857fb39d7d70922c8a5dcfa3dc824ea698456482e3038f143b0f64e70ef8c89c850b638fa11952b78a7b1cce2452e8b2e213ed0cdf44292f2b80564362c11aa284df7e820053a1d51241ae6d4fb60b647f2ed3bbaa598741761e00b6b0e1a8312801eabfc2a5e74dcab96bc888331f82149b00d86cca0f12c4f24a8a1ddedc11197b918e0e988ce859ea3c26f5538cd54c635aaa4c202b69be021d05d3421d09005559360cb3f86e68dc09d1be9dba25cc8fcb7b73e2420f0b585f71fa94d2e285952c01e67e94a79e98bb0f0c99123a3f273a910998bbcd54fcfa14b95d65644f45f135c181c65aa425382907d0fadb4b318e3635ca006941f4d43739243d57076c901bc845f751218b6a67d6c9 +MD = 00d3b9396a09d37e126ecceb86f5db9e8ed94065646f4d3d6bba15e8318ca9f6d07e363d60dd863ec28ac2378ccdb515 + +Len = 33496 +Msg = c17b3dd94c4f9f562edba48df48bd57800425b2477a80aad5ac69f6af2d046657241600ed82d823014d3c1236c732d441f5f9ba24853a8fa0609fae6da09c95150bf9e2ee2cf5b6919ad7c1ef5689c0a8fc63b3ffd96be1b7642b77ab6a4672ba41a82a133dd31eb868e5de757122bb299a0c3625c1856f8f2975f90504829dbb67d91cf93fe0d9da3a0ede45a1ae1248515bc752f827779c130798f6e9e1549ce0e5521c9daf667b70bb37ec528c7489b4caddf3c7b2a862d368ddfd94d365e34f555fd9f1af4310cf7381d62e3e306236e1e084cac76077cd124e859fe91002f5b19ccdb660fe3e88b022af7f43f4764a2975826bd63e4f728c511b659301809682af74665506694ef9b0b4d02e3f1a711a1379455f905e664f8c4b7051a8f08430fe4a8c0bea0584c8b2a2cb6d5ee34e2c30d5c1c415291ac456925ab574b751550fdc91f627a7bca58ee5cb81f24533e864247bc42b43f293566c8f2f036980576a9702842dc47908cbea4afc97d4c4d713e1dda04113a034f246883ec37b83c084f678668af02c7ae04cd44d9e066360c69a6219053c8611b0bcd0553351ee18e5974dfdcd9f5964727a01e5934ea22df2ca936ed60326b2284be212d1a131d902e60dca4446826de8fe2e65063203873edf0c42322c04bebf5057f83cddd189736f224cad6a29efba45e43c75450a14f1541713b7fb926ffc768c65c36c4f92ad9f4605679ed2727cddbdec5efc284fb0d65e53c616727e463b09fc13d12e9d27f2c374e148fe9e875205e521cbe0a003c24c92eaf1073242fa5b1b9ca0d0f16906452bc8fd10bc901f66c76c38b5be50945c51a51fd3547950ea54cc5ff947e746258a7d2fbb64fda25b03acc729e32de9280072e7693d3fcb42282162e9f9293eff218c45511046875d1a51fbbfc7022d1a3fd30c2b552cc60d164a5e359db56d2c8164f27456f13ae78c0a5ae9c263ccbd5043e2bc44b6cd859f95a65e9e023d581a95ab8791844974c924492a7dc9648bf2540f7e84746e4644a1efe782963bec5d9ce51d68861f9f623e5b1441a971009671f6f48cdc14e975dd7f42e3f7f563eaf913a8446d49c1d7b71519c69a7ea5ad3c1db0d6545dd9c3c6f9032a9dd6592328cbbaada03486aa3cebbd6502e9f5a6f0f835e973a581befcc1aadefe7b3696ba71c70cd58c584a2e6371b5894f8b245f1ae64ec0988bb7cd8dac69a04076c60cba4ffa639da15809f0c930742ba0a5d50a647eb183525ed7917a6319b2a421bde9c7fed1051c245e38465e89eb009bd12b12e1dd026014a991b743c16e594a4c94c182b44f035fa99e5ba8011a1586f211841089925f6991f2c5944dcfe0a0175fcf0e63d8016a7a978b95904549f7b6323aa36dcf8ace4f3937dd0553d4b3cc9f432a963c80c52fa858bfadd9285e7c2198e2fff68cc32fd980768e96c005dac7b04f91e92c005765457eb0623b2bd254418796c3dfe8c258220940051d06a08db8e60d6a4dac7042c46b5e5cfcf0573ea6d9e893fe9f9539befdd02b6646dc45af965f3c701a18c5780dfe45e84c59654b826c03636816f299dca5761636dc8416d91ddc3dd99f71b2cf16997780775ca1f9778e98c2c617551e4671a7673fcd8116afc6017ba2bc17273de4354d2f893ca7b1821940311c734b19bab458648660e7ab966570911907beeaa2abf2f07f9e2590aa6f60d67676ebb59db77ae94358c497a9c449091d26fea351462248a428fbab54059524c9c268a0a71b5f3c88bb25da8cb875694cd76ede7c9e4bc69b7f82581b765dba6af84a41736a65eccb1a840acbbc86300cbb6812810effc8ca04622d6d2c3af5fe8b193e6f2f3f688ef977aec34aec0bf125a2d60b328eedc45a0391c5a1bd65d8fd5dfe16c43c4e48ca791d2fee174b7ea887af77839993fed2ff3bb1814598aec170e6f6e3fcec9d2ff0fc5e00a87d29d68ee5528ca059ee21bd71bd1573fcc47a0aaf7be8f1e1d07c87c2ca4d102f6722413e28b823be26a8b6ea5508c900de7983be325dabcca74295e7110ddec0db0e17107680a42f1cea73ebf5c5a55341526479a6bc8aeb6614b3ffbedd74dfea0ca8e2a880922b55699d1d2bc699529197258845802fecb1555a63202662db18a04f4b5b428e4154986af47396258d43ba5f509b430b4efda701c7e1933950eb6ba2b0eb20f8ff8f1995e849beda61dc3e7a79146fad60cf6c42847f8e58cfd6b12b99f4a652b4894f768f3aab188ecf85ff484d7066e09b27852f568251b66f23428ce46d3c1ec7bcb55fb2d5705292336674a2fff83ce56b522f0319b4931934900056d0057ccee3bab03ee8626bc8c93854b168b1e432aa221a11bee1e469679c7ab8695f8d0346ff475b3e7f28d7b9fd8f0545246507668d66eeec7a28d43eb07275a39a9e09790b7b8452271843882e79fb0fd03dd812ec9c071cddeefe2c847e3b19574e45dc67d346cdeab8a0a633ac1f4345dd2941d83006da9d952ba371046525060c4cf38cd51efc3a9853b6a5abfe69e5d17f75d8b94ab029ba01461e9b807137568350f2f77987a725f11c1ceff4fe40a94f21569e6f0812dbf386e5aa19686bcb8d7722b0e2dab0efed58d1eebf6ae6d32cd6da65c07ce96996e85eb6ac8503c9dfc8a4a7e77fe864ccef9d3eaa5a38cd7cf8ec960b790de14fece2579651afefdee7f132f3e19e12f462a7463226b716c41a05a59c76f0e1a2f728f37358b08c2f3780f8a4aa72791834b89c036af24da6bcae2af00152d924b99b20cff4c64d2549dc4f5624e6059ce829a68a917ab079535e8c92a274363986a14618d041a175917bcd950b6956f6ff730c3434a10dd0709f4110d5059775f0e3f9ca55c3077490e7f9fda88cebbaed4d239ccf15b43086d8eee703675b5e7adbb2710fcb0dc6ea993adc96c1124d33e09320bb39220e2893fc81c81a2057a6d0e68968ba12d0e11826de4096895255f5c16c939bf5edb868e08dadae54f5e79c2c9feb20c52726ed445f508daf3ed5f534dce2ae9e43c8c041470e9487bdcf75fb01218f832e2e70f9fc2106f277466763fe22f199a4dc22755a655d2723c106b8798666db7a5a4bde215ca3019ff9b4e55cdf056685551823346c68b1ac6eb70b5594374c805ce6576b4de24b1d92662f55614a8369e619a1716e67c5cc2b1f5a21d58134d488d90c367f354d849303a88474417ec6e19f967e05aac21778983b6ac4c542fb708c531f8b1c67496e15f776627ac720ea1268d6acd234f2e9ca159cdc83f549a688c282dc2846e096058297c666eb0c622a9ef7de5eacf2f11d7f34a74dba539d46d10d0cb96afead6ad0550a8668fddc40bf7e04a088ac211adece9f7300adb75f151a777021e816ae775ac969af59daed30b5da585672fc4acac73fa466cca739f537b6bd2a215458ddf56d714cb4c098995ba9e6a4dbd515b9baf2426b14cf5007e13520e25ef8e27ad1714dcfa33fcb5fcc0dcbe26b5e14222671ed7c3aa239a3b39d2bc8e586e3e46b7f5f8699ab0e0a8370889d95f9beaa7618f61882c26f8f0b393e6c5960d5912fe2172ffc84c9101e7c9d44e03a8da946620cdea19269f074a3e93b1f1920079b44152a607f9516f97c8a66de92f9a4f3e7922d0bb4a19e6c67bcc3cb325bbe3a0fc9e459ddfa75a11ad071e5959b342b141682158bbecf7eff1984d22f013b88bfb60c3d3251b2a1b1fff499a4eacd38720a7c739a1a3a08d49ffcd88188f603de69f0af1f435477ec697d6f5350d6c87c0e8a9a623c34b672b09a22bc8b8447e6464013f737e19024bd6adb2365f747bc632afe669d65f463dbfb5542614ca161db69005cb7d096e56c5b6197b295329dd8ec1439c6444f22a28ee4a5a2d5bccba9d9f8a23ba7d8c8e6ada7129f37059ab03c703e4f36133984c35578d8b6069e3211617a4bede229ccfff046b4635d5d899a96f680d20d1303473c1e7b43fb63f4bddf4751095f927fc0e1867a809640d584fcf5139e89399e78ed18f3262787722dd69c03908d9d8f7f0f645a454cdf249a26bc60022427b6d70cfae8d2f7a32aefcbeaabfa18957ca8be62ebf7fd92e73888af0e834a680cfff036b4b108319f8233a5d2cc7d34b7dc92f4a83f0506adfea76f77b87874e1425b4eff66c5ad4073b260107e17d5d16911bc07710fa4d93b175024183ad8d44c92c6115aac80ae42acabdd95950349fcaf0b923479e8099c3d039c190e0e668d3b1ea3134956395da6eba299614791f5ef75c10fe06aaf90acfc58317e700872a8cb2d171898924315a207f0091d39f3478d2c59bf874b96db9ce0f7e8b85a9b805e07dc96b219819d51663ff8eeb2634bb42ca883d85e3d3d87bee2f941ad664639dbea405d6fa7929c45efbd568bc4607d5a82b9d877e2672f5a790ca691716f0101a6a1d4d51389c53f75c2cf36952a6b2e6eedf1f934dd064c20bf41a73b6f2621b837c31a54077ebb78a5c343640de030c38cdf729303aefc707dcd5f32db2ba4958ea28ff7802b325ee2dd22af8f8eda3702db748b7f7be3fec48419e6178412b4f2fda66c884d4c9ee66764e633b9a3200c807f8ca51fab22101067c3b8c1e49d112f1e21847762bf3d1c7a867f132414f668d42518ecba610cfcd95a3357a2b475c127b5091bfd466346e43ed60dc58c5cff42d34f758a520793ef282bc7d5a17d5e73a59abda4bad581224ded2c100cacae2c25bd4ca36b9c9009abe694e5dab45182619dded1832055c55208d09c0c6200008ae6d48e24385bc95418416bc69744d47796e21c45b02f3dd9ddadb212199f5071609fb2f267619ecf155fc00bb2a2da661a89dd6921981c43b005faa43fd69c779f20ba7cb64c0a6b82429b0082e604abad18ad63e10ab12e449bfe395140651c16e9fd2981758cb7d38c554b7498f3c6a320f4cc6b01bd07ffb20547da671acd4c6df37f6568a6428daf774324362825b1355c194c17906f45fad86647a55e09c42f45e4eeafe77a052e799e0e4802673bc83bd0f0b6cba2bbd8b00b35958f6ff2906cf069c5b0fcfe8be4a29f3922f9c74c2c69f559df60b5de54ad00b22f5e7c53c13883249319ce4a410753a3fa6bd843a66ac69b4c17e86e1ed25585ce53b5cbfb13a7472e7ef8dc0722c7f3092be3412249e0d58246c81a7701808aecee337b731862c7b38b02c3bf8b68b0cfb86cc7388de0a3125bb97605b13e2bfb9c69e4b1cd3200f2dc7093c2a7c267ceaff94841bd228e8cf540d34377daf38adced8a3f88819d4cc1d6cec91e417286510d46e64e32e25271f2e4a8abe37c0b3e22fe8500fdf721f989d73b45728b777a1d358ec79e68f370441cbdf3e4200d2eae942a9cf3a922e21e3f81b3e1fd2259bda6b39fd16cf06ec8ddebb6498a012cf4fd88d30f2dcffa188a34fffc52079e431ced5d5878d9cbd5baca89a00477b77a9d3839acef79dfed29dd704e24a7a6520aa486b01700261f35d2d48449d16cb3f5a1475988c0d220a0e3bb33ef73006ef2718264c203fbe9d18d3d42a4ceab35896c629164258f3771e0476a0d0a4b0e56ccf6d2f465bbea10520a77bf9ff183eaf241e11c2875b63f3b9b4d27cdd494ba2f4aa738a5f48464d9e29fe4e5ee037ccb3bd50b3a24114b8e2d49aa4e3ba69f01044e0935243d618d5c27df30ef58c15fd6c9dbeaf8cd3930840c1f0bfec877faaa33e0a3c99978d4cdbbe90173d85b38994be8bb826e8acb25f0f0778c6ed774a2f55962531d2d58bda8bcc82a269cedf9e7cc1c4f69b2c68994b92162fe3ff7950ede016f3ce171a29aa4f560b828d88f09f08dce4343bb2563f38a211b03fbd6ecd8f16c7d57c822ee3c29b5f16190bf4ef0a07d8fa0019feb1a223539d60a1f1be4c2e952d2c4a5300cd5a886e9af0 +MD = 4732bfd9941893d6597ebd157588b7438daf1df027172664f8452d019cf90bc36ec890c143016d38c2b8f763dda58f39 + +Len = 34288 +Msg = 5082eae7be7e608528be6e38b84f35ac404db9e67d0f431d9e9f04cc006dfa053c441808637ca1148872d57d7f35cfffe582ae5260f3f3fe28732a71c7f5cd4f1d666509a6dff2b100208d0da73a4cea048b66b2a6ef9741cf35c6f532d0e604fbcf1a1310101c0496b0df0fb8c57314a3502a2fd56df98e98cd207fc9660dcdde697e4d2875e7b4540a13ab38400d26cdb941f177d4df8b8d23803815200c52cf1bdbe076771a6a4216710bb112e2c787aef51f138c12e3b5202e489d64aa3ad5cd77f3827e7fcd67bd4054aaa3baa0db178ce232fd5a3c18aa71d6e99bae2ef9679cafd5f3dc86cbe5cab1ac5b5d58d0dc4f615b8f7e3fbfaa930a822ee1d542d2903cf63cfa3c767755483ea293986ee586c516aa4893b109da0def830bd8b8f49bc16dc3a198715c2a41e8e02308be1a7935ebb67ee0f6ad8f07b804f4de63b60766c3ef9841c37a91c5327dd64fc7646fda631be9d09780f91f661863904c001a557f27a9e074bbd1fca5e1741692a9b2db054151099b69627e802621967abb1eb329d59a1d8d06340dc874c50425d388615a907e330a4f104c8e98f797f5cd59ab4960349f14420020239f90c28ac83a94e97137f7ed1c4cb019d5aa3bc620146268303f0f14597e5f3fc89ff7c9720f9b3a4a45fd4bb75ed2a845052bf49b96030dad83149232f6f0a359b84ce8b7519fd58471ec2c088edbc350cf0f872529b4c13fc85798b5b0fbd7b8a469f18146c74388816c98f724f3f25ecf8e88a8139d0b4ed5802dcaf3a9644f2bf5ebb7383c0bbd3d27986c6741bed7ce51fe0b9de8734273365a590921d1841499df416d25b58a6fc2334fa0eeae239400f1360fba81836a21264a388ca6c129fcd4072eabc959dde8728818214baae9426910b13ebe7982ea9985c9126c6d30c7d2f0c2f6d091503f5bff14031bd595bf6f83ca99b18c8239bbf304daaaeff2a1e2e6732d5299906ff99ddfbca80a5f200a77a4f6e32534b5957a300de8b137330ad18779d5db65215148c0737ab2110d43d2857bdaaa5e072e0396d2af1ac62454974701e3be97fd6de9fe511736712d217db6502085c9d78e777f528592691dc821fbee03aaedaa5469e27d09fc4829ac607f9e3d1c3dccbebc31b5f581e6c66d57eb67be0731d10eaeb41fd86e5da8ec63278db7d9828ec5bcf522844f06c64b215e959a3e2919a4a2bc610af37a53ea6ff84418235fc6ab5d12c1bc6591c66a689e9f21b59e2b1d2c416929f265d2ad6a38ece7619d1c7989d2bb24294f6dd312f1aedbd557ae81338d5fbdd5e7cc3d3e30acadfd043736277b38440408648d09a0ea4f061e4bd8a1e66c4c03c8eaa3d128adf15e5cc0ea1f565fa55f8352a033f27a05b1b9aa2b5d95b860e4d0d3e60d68163bec6d5e9d59ab59cea089e0157a3187853cf172814fe16a80e0c72f0ed83710140fffba58bcc24e4731e2b6f3c5a33858118e4be35f14aa355f74a8241cdfc3022fd97b2232e2659978567b42fb92b6059658df587575a205c9a0e42ec0a6568fb4c44a04a354c64bdfadd70a064428143517d3e8794b777b86138b37acd5f2430688cf05f5619ae5ccae7454cd02b70d5592d29b53df541cfe954644c8b3bea58dedb12d114f09f0a922f72738138b795d92827aeb795f729aeebd5ffc8ae33db2bb9984df663af3ddd10b8c2fc1cbe0b7df8b8c2960c004c0e5978f30a08893dbb92e1347f05676d083568a9a52a0c8ca4196daf6dea05ad9447cdd4c3fd63072b019e132338401ea008029610f31bbfe804b6a383927fd4ed1164f38adf59bdd6801f68678ed1d930f32716d40a740bb635146d9ba7c7485550af0dc320c5c86a98f5b2d07b851337a146ba42d29e069b35176bfa9c847e89703c5201843fcd33b6b170d280e263207cd1eef1de0217038f200d44e32ffde61a7d8eda5c3022ee53c3210231723f87f0693375af38e39baddeefef0e323ce799e302923b4f6fe70aab51d3ffad0eda966d0622a8bac2a01b94827d9023b22a891d5bed83e61aaa55fa71bc6e0b57a4f96df59d6d005acd42f14364fb8cf41b628d0920d87c99c490010f4fef05b05373dc805a5e92028fde75c139b2d68936b0a288f09bab93b2738f98f305349f82a04914de1ff8504428827a605888d808fe0e59c16fdb6ef06ac69d4a33007b9f0934418d039bdaa6cbb7ed7d4f2c770e95110a07a784a20ad0768aba1b01eb25191e850bcc04f804327688e52929dcb4206af857e55fc36e5effefc70fb154915a686dcebbbc3f08e75edb3c59197f962a6cd326ab95499760c34af593874e8037b25a4a653a260174c152e76163d6211da6f8f86cedbb2280811aca490c4f6e5b8cd9034b0723aa455e9e7ad4a186f174a9f8419bc18e7c3889ddb992a8bdb81058688dff9bee5fe3770c6b254af863b9d64f96dab94a10e37e125802f54fe9f085974ed570bc9ed9bb2b4cc5d8a11467cc7d6c8c2d549d2bae470a0c6a4c9096c4d3ca7f1e34e3829b897448d3276018ece0373296545d7bcafa6421805a386d76bc855f0cddca9888959620b2e1f317c8368b609ccffe5e348adae4cfef4ddf2ba003f7b52db06612de06e000672a1edeeeed88a90ddc4d7b96f2c8b1825d76442cdacbbf8b3185bad16b09343d9188a167b23d33b493b410ad204fdd99c3cd50b15e6d74acca71f10e170ed6cbb5dfb03f8dd0d55aa14c941c07dc9cbc2d4ef1ec233f8cd8f7b545e2bf535097f39e7bd4e4f5f646815166820e01876ff665782badc460b625ba3a0db8894a38f74f64d63c1f2f2eb07d186d9751161bcbcb83fe728e88bae10b4ddd97132c152d6d1ba217bed869ab1a1a4d584dd145f9cb85e2f6107d5dc632e1d0df836eb3027200c6fc479a9dfdd2fc9fb55a31752cfffe67ccdca725219ba685f65c9a9912e8a4b34e6bee1215123fd33308cf3fb1d36dfb5b65ae97afdffc7b7ff1284ddb4b8805a27e3b9c9d62448655cc02fc44d0551c262dec2bbd6a641fd0f3a037c8152b3c8d011b63d34dab379226653142913458b1a7f867c6b56df19dd68afd75dffea66286f62e633ee4558caa6e7527709c2f72565bc2785b8a8f3b1c50e5410672f1c7926442c9b0807e89ca974e8008ed1f0cdb7ec23ec73a473d379aa5c613389d2095de47833cfff12df97823d8c4b795e589e9ed86830db828aab0b58190b0170223dcb30c4ec37bfdd9897b9e3e8c2270f415baec19756062083b7ae00969dde0aee80be1606b7d5dcd23dc4cc0cb4343ac9aa0dbe4f1ce8db2a38c8de7d670409978b88f1c6853e2570fbc6105f586d215d145d2901351104c8160c7b6767cb696075f81dd4abe000985927778bb5ba0b262006c854aa68e284d7e49ffda4197072c57461d731a5b473e04fc935d304424b567064f182d4bf8705b711e726d868f5036687781d738b2817a7ce07bb310cf53e03c47fc53fe1f927ec9accf5ee9710b835555e7934cbdf87954ea9742bb24c6128b2a77b909101c6ed02551a4546ec6b4994314dcfbdc2b68210c306d87b774645f411adaf17c7692111299cc3bcb1a40a0b9b9f2ca9f62ed7ddfc7a22b19f75c453646383bb7498f08ef183524386ebe084427933d7a677fa7dfcd7f09aeb770b9749a3f6c530dcc24354d7d92193c933c5cee2cc8ef81755b86c25298084d384886777ef7c22bbfff6fba13f9f01c56b98e8e3df1814984e56f46db7a9911195ed67e6572a73bf0f708de96e05f868f0c3388254bb23824f1e3bb6815e3bbaa890f0f814154a705b79b3b54d9b9f382a0e65c913c04d5bbfd9ea086fe6aa552437abb60f85d05549d9150fc4a81fbf824318c0046fb9ad064fa86b698b056a71ab3f2730c42df642575afebb76a0855e28f86e100f90ff8c481ee857937581f7b45554601988dbafbc2a8b1a4b49112787aedb1deaf9dab88cf486214721231d19954385cb098df6d02fbcc97042eb4626e10f14461dc5f4e2d14eb0ef32d74da4a6fe8823da93815b0e9bb12db49b21cd3a13de6c2448a8145d46ead3cf26ef1b318d52692075b6257230b8c9c7a9224660ee61a435eb3ae84178b83a21976947ddf6cae506bcfff50182c78ea29eb058fda887357837132725ec036e4fb224f05343d7deb1efc3956399c7c26e0232cab64a376916b39b99b0a9b1b582ff88de3b7c639e4c9669cb417d9eae525b126535da598637e83a058bb7ab58e207fed83ca7556bfd395b604337369a7733b7f12263d4d5025c59345e1eda9e9651eca8fece958eec61001c10cd75ce0411893624ea929ea0995eefd0e625d1c765bb142af80a4f4395c0c6514a4591227ef0fbe4797a293927b3fc891873379cccd4e5682e9ef5275e0328adb38d2df901540a0a1774bdf48cbe2332bcae1a3e0d9de25f7738cac2433108cd1235e8b0221d293dcd68a3f952e92e73d8bdc0d4b080d5b8dbc0143cccb22f586e240b7069b32125a23e2471009be3f3768872873ee4841a621f1cbd81ef65f7d044dd605f7fb96b9ede86841f3b0c5b9df7777f3e31b92e153b2a6ceb4e71523f7ca8a98be7bbb7c931115936336f5256f219e338ce3a9cfbfd857191381d10c3b4b2727554edb02c1d0f19cdead581a8619edbb425cf0b1c4d77f5fb162fda64d445e4a62f19ffce8bc6eb6dc8058f9b2c4f913b9d422381144620b24e70572bc5a727a5de054cb7647ff89c35c925373b742a549e5a8d31383b193d4aa8301f6d2062facb7a3ef08e8267e599e7eb857655d18890def134a39e0924709f0c49b5fabd2e5c3f7d80f31761cd5c28888cc639ac5edc97f6933bb717f02a1c94af857b61c8fb1eb26f7a860edee654a554116ae35ee84d4555eacd6c28dfe9705bc6ed76500fdd85c60a16959fa033e9e6412e9f101dc78682972a2f54f6cc47555e96234f00459d8c8d111f98f08cfd493cce08fde3cf60232a1489fdd98ec1a337bf914c351ea3c9eabdd3523f298885ec9145aca32b7b3f8ad4a2aaeff7874f38afe8cf18303e850963da54f6d033a337c17fa5c3a480dea1b2a1e3a0ce416148b04f60104217c9d24a5b267b4aa6aa07a4dd71ad02170856f5ae3054dd97df5108ee88851ed59c2dbc7f51385f88a243848897c70de7c691e7f31a73ea2fd33a00eecedf8a210702ff6e5c93d68294d3a7a79f7b8d991f3ace952865beb444ebe077bb874fa311395c4fcff6793b879f5663123049d41c3af3bfe39321cc3b4bf0b0d6e33502c2ba1b4a33c80e5c838ed8e4774d0a41c4779e97d163da1fbf4478c2a75c03e7226d84890f715e8c908a7751563c98881fda17457c3eb356d8bdbfd5b65b83f93a3adf31eb593174b77b79d23864bb50354ba5f26c8d72198e9f0e0f8c467be1110a736d4fe84fbbff472791a32d3b410fb391c627b6e00fead0ad9bb086b446afc38963c4867f0a71d7c9b322ffdf04b4f824e83723c5e1f339e49faa84f6d11d4f693bd19b8a091313a7633a4270412c04a381243ae937b2c2fb4403a7082a62945b1eff8f395fefe308c7755eb79f80bd59b8746513b72d5439b14256b4f8867ca734d5ca52b50d3036075abc79c7b70d8db6b10b0d0c6ed5e70feffbc0e392ee94a4dbb49db273e0774c71c28161d9db86a262939ddc7d2f4d8592fdf5958dd16b9799b5e4ff2bdd14be43d99614ef0e8da510678cd06048b33cb4c41bb37f0f75349836ed433d0d558457697f88ff90eae742eea18f210a615bdcb8fae8718ff7a45f9d8127af5a81c735db05661448e58f8090a6c2c85b9e0b934159d969393c0e765468538babe2ae6695f056331ec6c653b561105b25b47460c7023172f58b9b66c16a6ed9e7be62710108ff66fad4b341c59c22e44fe9bdcbb2bb9691ab2b72b64e4f209ff85e0ade86140ab4c4587fd4281d9f6ac1860f5c6a4db1d04365bdee62de13e7c50acf368bde1e26649a519447ad30f663d2919c57802936a581a19764e0ecb83609d9007a2ce4c2c3e2520888137d8f1d176c12e11ba6cbbac74838be1e561b33a54fc4bac70492c778a9b854 +MD = ab4cced009cd42ca0a92339d0513667901babdc49182fa1d414cc91a48827429ad8cb733b93acd82e0edcd30d0ec568d + +Len = 35080 +Msg = 965dcd60709712fe8f944dfada3235397690bef28dc4f8054fcc348f37c76abb9066d7db379deab7a29e61242107b0d9645aa27f3eaf4207a8a5fc40099e00a9b52ce784b3c6992bc3c06ea79f7a937f82d7b0cee7f0c798930a605ed5c6e3f00d9845836b7ae603f9e2baabdcf1a8d2d7ed2f0810f14f6117e3a71124a7db39a0923801e7229be74dec8e575fd5b57b6b8569544219a20a3c181a807da9af2c77030926b0247e7ec5c632d3b08f83214688a4db03d0873a0a9201d46834297099d101194dea58716c58ee485785da6d71dc29c4de7ec8998a37a4346db00fae0ee6660346daf067478b0adedc218107f36b4038588b2bd0c3f04ac915852a8ddf28800b245e10096045cdbcc8ca4296d41b305ffb607987bda63cbbe71b42b61381995a6edd7effbe6f810ba3e7e3c21cd643604e637965813fc3316cdb1fd0b2d8f717acbf03f069f26cf2f3e22d35d483bf64d9fdf51316a525532a2b8884c514e36b676b67856ab4d69a4222e894040aed922596b33984beaa4aab74467a521fa57e254b7265c89f092a170fdc8ab2531513b9977d7ed4749c3e771f225964e0857771c6ec388b9a4ccbfb11d0bde8457f0e1d66198a0dad41561492e1ca003fcb7ed0449ca8bc8ce6a575908ed5adca72acda6d4f063753e3bb0c374e743024bebdcc2d4b5b615f20df0df4dc7b0ac938157713e99a5b4dc895e7753000fb77a759eceac1f985fa42a24ba58357052b17707cbfaded8083380b2bb34e156a20ce7db8e1c62b2d459415b80c4b10a9d658e572db65a8aedd7d45625b715c83087b4fb97b229963285d61db8ffb4efbb3429ee0ced772ed43de6c13d4617c5015f6f776209cea2e8be7ad3c975dbb05aa1fc04e00ccf4469da2a8c786e61ed930869e7839fec697567822648d37fdcea4357644d90bd6c0d3122005d9c8ea2542756c452c0ed7a47159e8dad752bc5e87cee64bc15ebf64cd76fd5535ce873c310988676395c25fc4d22626df76a1be3d3038ea208b57397416663f02c29e26e78b1b66445a32d0382a04d10b6a53f5aca395aa5e5b4747ae39844ca86ad6eb4a424cc83927cdfeb3abab62c5f87b0bbe712512e396379664287f038f8ed89444784417a9c23bf11e9b436174e6c10959e00faa1704ce2f7f2c7eed1ff84c29bc732adafcf425b16243f3577ffdccf6673a7cfa636cb519e58ba990c16fd8b0997d279a9985334765ebe4cb500545dacfc5938b2d98945c808d2976dbba2733c5dc63deea3d0cba11db3e454ec6d3bd79ca7de4de4e1201367c2627d7a2dfb927d8052e56e459124d5a284de1081fa84d90618ddf57d70ef19ec72a1befa94ba7bb36124541c15700b1ca6c7192d1a23361680f977b8c8e983d350611692cf02dcb1d131f1ded9214294d29662d90b41383b9f16d81d986139f98461fd711b0a152e3b84d4084cb7008d90d29a104e5d53f7ebbcb3365004a0c176faf03ff93eb96af8a35722f08fc96959f20b6d63d61dddcf61857d90325ceda0b28b39fa2f4e0aa10407b9653a01daa67b433aec49fa5fd29bbb6dc988c2c0aa1f2b099e4a277fbd2d62260b344e340ed4de2338378df09dc1e1817c6676dcfba75c29462dea5cc5860303631d0317dba54890e81d2d22797a84531959eda50dd18b0382291b0422b446ebfd32c4f8c552ff1e7c697c780e3c104d30d19bbb69246442e2ea1e187d2eca1a4a34185934648e2645bad063c47d11ea537c058286264441e8ef880c3d5be948ca9f51bbb1606243047fed7824c405c4e1a7cf8cfd3db79af487cd51dbd240e20ec31582b4cd07ef19270827a78778477be33e4d36f13ab8a661727be1085d60874de860c7010b95045ed4e4e56dc5ec72cce655bbe74a257efb0c0ce5949b5eb49e2eb850a2d9df4675c85236bd8b4e76b36c18f476725bdec2ee6741dd773717427cfbfa38ff28600a46d2441d44c7e835140989252fe64647be2d8e699d843fc937ce1c29e80ad19af4e765f36ef357d092c9e279ef3f55f7efc233bf6ab09e9103914f0c20f12b86472444d6765b46045cbc88fb4cd18e61f7b7da556b66a43854d80b463665ce8ab20b494d076a234ed673f51fa5374ff46a90dab21bf0f13d9014c96e94e34ae6c9feebbd8eaa802e8462bf5da4fb2b5dbccfcd5c08fa061f69da11ebc8f42148f381b4ae6886dd120b0b303bb87790dc62d71ab99eec433c369a6d544f12d21fd3363c964199aa97cefff0405c57211ef1495b615a4239328ac8442e93c9edd9cd8edc1b965d692e44a38801fcf45c83fc8907d9c7866880db062ee14373c51556ee2ba4d34ca95400886fd736d993a9c9389889733351a5abb695f2babb084113f693a884e1db97872100568691670efbba8606c9d3752f716c01f9860a17eb691abcbd27b780775d0ff1f668a65712189178c857e1537cd0991b6c11eb8482dadd0f4938283851d6a7ad4d5972e451845fb94489e77d2c2db01aa10ad9de95fdbff3e332ce53d5987aaaa1e5918f5be377f011fc50329bfd63a85ebd4f7693363602f1a4147371270b72ba798cc88faa7c85a71ba6447ad4064cebc5c6ed1908c1c51b089507a2e6ec8dfd91bf206b3dc0127a64640317262a60eea0eab28609f5b2c5ecba90e97c7054d1cac3178d31f50f1263140f1f88429ccddb056768ae444468ad1f9fb33c397fdd91131e541b8dd3e58430b8d25ee1590fd0a17c4f6a300299e61e949ecaca67776139b55e5efd199a6434a10e3e791e3b2e694198c24b65d00442101a8c859445d7a17d0a70b548777fba47f19b8c54b640a787d34ae8f681a42482b5161d9ebf40e4c5f6f568d923431c2e4afaada527b3f69f8d68bb3d4522206cdcebd4ef4a597e3092516a54143ae4b468c03f8805f4d0f935a01492912ae05f10724dfe8d7dc83d7b194c41c0d3ae8ae9a0b465c78fc1455a8597aedc1acea9ee4e0b44df1a6d5cffb1810acfa9c4123c00ced6e2f141d47a8db6daac6e560dd4d38f6ae5dbd81fceceab478739efdade64c153eea5cd56f43ce4be78b210db52a73cd9082e92e636a51d609de06c454f414e455129de1d75f7c3b2d7727992e63da607dc8f2840e5e979fe5a49d4021d3ac853a109fec87e52b6603f2c1ad50e0b5d8fc979f2d04b10236962e2b171b695c1e754a2a9c85be24f3f164b5f1248a4c5c9657b9ce4d49dbc3a4e378f14b9f6cd88f2a0699dbd0af0b7f35cc0cb147e615d1700812f2106970952a4b77b75e23da0f17fa8c910513d636cecea7ff00cc2b384b549efaedf663f36d6e50698ccb4d7d79d01dad449a7b9d958369179e47c5504e651d6dc7c8c44513a7256912aa5862b74ef339748a233df3b3fb00079d0ba3e20335538828bc1484bf9ebdd90824443b3db73c7f2cf59c512504c2251626b870f58eb5175e73e7277e626fc82fd8ae6c6410bf4cc81a4415a22d66defc3e175e04d19a5cb2104666ab1a87c6669d25b28da7c9c3a6b9bda9f21ef31c957a4915f8a60b3f6cbbb9a8106d0bbdf49b33757e2362cc0dfb8d73dd7e71c62b03d5fe99b40fa8d39ec9567304059422f95f1d002e924f47083edd2bf5e9c404014380aea4ae7f30defdd69d867c3338e03112db6d62349a07584da32d62fe689b1c02011df0accba6de91569c79827e7732bdd78ad9634f20612d0ecbe45ba1f9e6ee58c8de17ec1cf3ef65ee03683be7e984bc2d00c5ad7de3e4347a77c6f6442cab7c4d7fa9db68c459942322d0b957dfd051fddd40fe4365dadde02424aea473a13553dc48dfb3d935a9e4de9f3ef09a0a5fa37bbd889d7077d1a5f25e124045384a82fbdd4225bbec6dd840be13d9a498aec6df2595b18b23d772ea5c6a4129d88584e6514ae5f1e7a8a84f15803b85e4060f135e6ba73e46b9ef1206fecea8e9acfea58a401c038d22fb148ccc3ec3542f261e5252a811483dc37444151049d3889b3e726cf17a45a27a950c4109e852f0b208e794dc8d912c9618fff82f94fee100bbf0158ddc79f2cddc7b25c57c45135cd907786a39894d12041df05211d37fd823eb8417b490d89bf1c3c19905955ecb9a99457a9d996add428843a149b829c97f4d02b887f21d8cdaca5dae0da99aa7538544364227499fda263945c316a97bd6fdd598df068949a17a412c1beb8f9a0ab3bdc4af9db301d2e11c660756c59830e345de4336e37a4eb9b43ab8c2044ac90bf74c6c6170aa34a0322b9ede46c596e79cb33ceaf5c7e771ff006a96c25f97743cf702dd4844084bc5bd0f18f3ac0ef1203e518885d676896ba7bcd092827dd9d2ecf877037454c91b44e26a96f5a3e91ba80a795c5202e93e5733d63a5b811f0254d69968e422047ce7a03ef5485ab7d318ef2542e19479c03759118291ae2f145725aa413c79e332ced0fbda4b3d4391b789f4fe2b33213b70b5e934cd09f1501c6c125423624e8422fa090ba953759cac5f4f5ad9e7c9f529cfc716b69c4dfecc33386a42e32db90ba6d05008a4363e20f99c1c93b859378b3011f2f56e2c658e03864a4107681ab05db87311396cbd3be0440d00afb949be5f318e318774ce8b6263bec7d3e8ef3aa6293a6b190162249bb0f5c9d3d173e9e48db213f00f81ebdb378c7c519380d00a8b6fbe4cdb7504b2479c962d89fd35488f2842b0e3c6d5f36b7d0a8852149b1046d8b4dbe43e02ae70c90ec3ca2ec9129db767cfdae57134655916800ef4c340c23ef3cd020447169546d99f7a50ceca21262a56db25e8258ee84b42ad696f226768232a1f11fb721dd9a0c983a96bf9823e324ccdd0624e4ef14ed519b9c73f9e20edfb22ab444b704b0b47cb82c92628c728b99a2c06380e3eca41382cf41ecd2cf947f31b4d27f663c1233c220fd97b89b3a52982fd6a3495658ff40c1e475e55ee167aa93c9117eb6b65bdd3669ae34b7c1962196f6c2abfc7c6339f6c43b76374709f9c3a0e3ba9b01335dbf6f2c8d72b1c2d3b83c7568499eedf2f0799421e355e4a3e6e28ca6739378e83e66892f367b7722e610222ab8310df0217d1654ed6e763d501662cebadd8af135f85a968d8f1193b32a5f5fe2c321b60c3748aba0214d2aa1a50c9fdb5ff80d388cf75fd27d20aaa1e3936433d5f7b933309182b5fec7f05e26f0967f9b3e90a8ad05f7cfc622ec34c454f435d9ce7e2901877699577522d814a55f020fcd2028c10cdabfeaa6bcee551a7c635f3479402290e3c4dbd346c1e6a135fd3e22301b7162854d6b1aa1210e5a6946d6b83f2b0c5476c2fc70b08e155ad7db96ec450326ad93d2c7fd4d8f68ab474ac0c8344c37389c0e29cc14af39589127ba79d372694462fa71dcf68bec7392f9adf30d262bc3d010f443c7a7cb211e6c09697fdbb1cd9f1ef92850a91259d8de0eb70e3b627c9f75dc866e0a332abc0314198ec188bf94dade6dc06972b485626392cc0e73c966a752f25c4919fc16975b2894a66690d098922bea3f761a35213cf4db21c830c22fe81636d6e80baaa35f15360cc3c7fee2a4d122ada4f144950b7b9ff7d8593e6a1c60724615efe491904dc76738eb6c4396fc0e3677e040285f95aef33c994800607f93192c0f50ec8f50ed483e61a535d91af16c775dc46599b16cc66d775b6d44c21dc2a2e07c3ebccd0c123cd13623fb9c90b21bc02dd74a7d7dc3d38a051b39b676d51309c2e298f09877bca09bb86f2f50a9edce08f7f248469e1737b194dfeb32b2e4f1c192b48a36cb4656424db411b5a665cdc24221b05b97a1070d5477ced5fea12ef4a99fe85b9f6268c66e6b02444a0c46063049342142f98e64f4c1dfd51ac027d891aba97b56896ea494e46f610759dd315ce9422c42892454d02eacb499da52ea05683c1aa333ce494bc0b7a060c6d9d02272790108e86f49811ea3f8fe5866b55f661ebde7ea0e311d708986d8ebf26f2b852713f89fc5df82226426aab2a9a72a25cfd9a724b50864844398f2218d5ad291fae9a407de734dda4ba24171b25bd017ddf2637c491bcb6c743b2f10214fa21962f69dc90fa16e96e910353e072ffbccb7acaf493107bca9aa01f22044ba348bedcf484befe64ef8cad508401ebff7a4eb4ced241338a2cc4361edea7e06e479f9d82618e5be79604f852d506f687e40f7679f85564b3834deff64d713c24c6415b5c9b887a6787e0 +MD = e1a1e25e96b2ef7504b76ae5adefda0114c7d4a7a6c6796745ba9c9d204864156b3429fb9b9aa1908038f7928d48267e + +Len = 35872 +Msg = 7af760f18bc91e656da92b72e98bc03f1c6bfb442830305529d681dc6bccae66da9b2e61b9c97e2397fdb92f7f6369b470529c570c2d3b329487981d148a462cdb992d792e34dd233e1c239657b8da0d59b804566cf81ad5f0a7a0ccb3a8fbda673887c153d2e56c484f9230d752be52c1e35bc9af5a7446237fc072afef777665c264c18e6a3c059fde2e8368f9bb898f1cc8393d1bf18b1757219670275f0bbc7deb0248c68af929111e19737479bcabab732d7e033aaeb277eac05e185e9e56b2450beaac784dd0308b7a5e8ca1f2fcd8852ddad9f7b7de264478e1891a391aa89964dae5ad0b7a829c2c9209db346ceb26c1b967cfac82ad574761443be3f0a910968239d23b11507ab978b3ce89e22b7d7283736b9786544ab4460f6aa5c0fbd228496f8fe37ce24ca9775123f947e2b3c7a0c6737fd1634548f8b34f8672e706a296518b0da3803b82f6ad828c8156ef4978288e6d4d227289dff8918eefb5d58dd3a56fc06e726fce5f8d914b79cf5a7e73616468e1d9f70163a5d8c51dad666f6734e205c5ff0f1419bafb3d17971cf0fa389e7875cffc38ed84ce34e517e2d3bac68de3907143dd8cfc666a44f55c277376e4a5f24daab5e35b19e22f3a703e34231862b70e35b0201a7bdbe63042aa48e3ddf83e9b2800aff361d7e45f393a3d122a8a221f0a153ddee197e691f801df47327842019fa1b7144f1ceace644e3d5c6b64baebed944b0e40a62d60a3b4a26a8b2ee6c7372065858ab82bcf1a039cc985f765bc04b6b2734211a2e56e4bf7148e20133417062010bbb38eaa83dfc2211d4b0cd87702dad58ddf2c677f4f480ce658af9168db4f7b8a16faa6c66c172cde6998886f012cfcc918b530fe48fc1b39dea32651255c8f9ee8590c0c3204b26d58ef1414390eaf9fc5248614bc7b0930b8d83bfb6eae14a03192247cb8ef7a7520fbc48d34e9b8b6ed61b2e9352d9e72f035188e3dadd237f98d363f86414d9ccaa2e0037a26ddb89853fba43a7aa1a88ea105311bc1910c49328a7c2463f38a5dceaf9d912be74acee4ab6d54cadc799806490c8f5218c72869685c1bbb34e8e1667a8403629d1698fb096e0985158e184b2d4821c8300f9f1a1707f1b3d85e5f5289df5831c9c4fd805ccce413158e1558f90d598ba18cb52de0a431b2a693dd7a24d7160231fc065cedb26adca4229815f582c00333e7728a0b5b601f673066c69394c73c9e65ba750446254989f2a86a68d0dd99adc8de19e0560864e3dcff1e1d3df247d9a721b4e8b09cc08ea54d3f9c1e38b3d9d602c3a6bab0e8e240b26a0cfa208ba76b4301e31957aa79e38f7cd7955abb7dbae56ea7b2e1132c048692a6f5d870d35929453ba9df7013567709625dca17621c8f032963224d88cf847e3453a25e2318da663987bb7824a40cce859d103150a2096b75f8fbfec049b216fd3f06bd61515e4e25dc732c747557b3877eb56f0ff75a8cd397f48e9a1b1a434bdf8df553abbee347cf90f3ca725ea1b227403b66c18a508a699666dfedc4eb645bbe6ec2cf010fe6899934f0422b7e4cc039fc1ea9a29ee49568ec5766b6f791dc229075642fb94c311659ac8ec6349e732919ff56a95d2743f389c92ffa501a8a3fc4361351c9bff08fc9c7fe35a9f06697fcd171a7779c9dbda5fef098dc478ca070cb846d2688ee8dec093982c78ac10b0c5ca1a5d38bc850a9bf509685600bcafefd5e8ebaef52972a39e8b574b3ad0db1688fa9593cef34fbd2f7fe32ac2e47d49449b96c3b4536eb21b2d49ab4522653bce2bef1f638ef05ff8ed8cb741e9d5c58eff824b6eef1978740e920d5d7dd5a2143e98303cb0b2e10bd2a37000257fc11f552caa67650963439fbee5e64bb2f5f5a34f7a9d110ddcb2bfe609803fa1e8606d0475404db50f04613ec972347383ecea6353172847cfa815b2d8449102980c8788108c11b2e820f3802c83a09de86484726e3d5f17263664a860bfb2185c7e354610ad49796b43b721838d18989fe6f20b00623de27cf83d1537741b39923006ccfa166d7f14c73c916301150a26fec38bce483d4030580fb7c0e4450cf5cc7c6b4169f64a8135e46e4f821e58fa1669833c31e5a6ecf04cdea192c7f8e39df6cf6b1a6c521d1a5f06ad82ad0ba5c8646fbec1cf8d0f3b75183df21c93f83f1667fbaa482c64eefd09118549a8968f44cfea7a436913a428e30aa4ab44802a4ba3579c024fe51e5ec3fffc6ca668c57b2223bde9d196c4d8cdac0cfca127ea1720236233230a42f4e5dd6a9e8b891577e51f2f3b4d0517f54676ad99305bf8f96cd38f434c60d74fed4e5247ce7409dba72120b031fb081edc1f09096898c172c7ec85cb327555c028a74600f5b5fd16d6de44d136c53fa5fce9a1b5b07afe13efc2e8336bb44916469cb85287bb69ba02ab0e26b200093b378b0a26ae5ee94d331b29045eaa1b82c5832ba50b10fa15a90bef294a480f4f0a5794f4c8d12d8f4049cac681c367c603ef0270e65308ea38955a4145f9bc41e3f3e488865e357a85d33fe28b9c9820a054ef5eafde20883fdbe2075b818ac462d47b5a6d728b6f724c0af0c2923753194944c6ce2edb703d2428f3e19c1536e57dcbf2e4aaba0e9418be69dd40cfbded30a531d7c19452af12719f8e95c62a1a5458ea92632bb879ddccc61234bbc18aaf73384332e570142b5e52a8fb280e4ffc9499fd286afd81efb89e27caa62e701a5132a70f3988ead361c5c758b56414db21896b86f25e4ad2f44a848ef9253c05a1c959931addb1bf0e51702af8bbf774624183fb4c5b433c22539f0e3f665cf5f764f18b041f0722c69e19ee5c86665ce95accf1f364f96fa551fda4e362416fc48e05338fad39c32cf45b1f6b53f009193dbd07621bdc020fce270f8fa997e78baceb491808e7f4a40c8a3abf9512ed9452baa822d07977b410819a8e9caed1df6a3a1827c2905bce4f4ddca3da5d8ecd326c60b033405554d1b3c28abc14c3121e684d596aa15cfe250c51b2841e71366548ad94a4cf1f448a3433ee98684fd6620c450751b96cd6364c468632f4196263c5fb3ab5842a1592695b34b1f7bc9ebd8c9bcc28372fc8eb943779577d0bd3a66ae62ce5fe2a4a82e9a4e78961bddd896fbe024eb90a58cd6a811671f7ad0ca5addaf5a69b8455e42bad919f34b8056e3c286445ad80f84435cfe8131291600a1565ff87faccca3eb5d1ad53cf2fb8d458674c9d832849f89c8068ab4c4d802c27f3d4fa7a6809eafebdb557bfa96a446af735c6e864a052f53f12bb1335ef845c21008eb8eab7819cce240b74a99c36ea54ba522bcaaddbd64860b2f5ef00bb3869fca534c9358ae68f73ff9ca4c1444d0c44bfebcec4fbc658ed3362dd6629232b33ee6c98067f828e4fa4862f7bc5099a6f70a6e5885b3bdd22acf8857276d30140bacebbccd7e727018acfae1e61a66b8504dbb36a42ad417b90057bd7fc9e78adaad9b8eb1c8af62422d7a53b82ba0c3ffcf89cdd7a9122827d3824e9430bfdd53f2c23d3b5f48831fd4ca955a0ab08fab98c26644b9dfcc1d50f1538e2920d41d82461295caa39b58a8d3eff53ffce4fdb14c4913e1a3ca437e8c13953d7239e1651155e4912a7294b17ba9b153ee8a9d2111be6daac6eb40653cd8cff21dd246a4094e533d44cf7cf8ab0ab5cded4832f0f70d7a9bb0f7bd0de7e867d38968f54618440755587bb7844c5b2a3560e86426e87d613cc9b6617f768c83651fc2955325812b61d03fee5e44e53714b130ddcccb574b157aefd5c2d20c4c3245aacfd4174be5e913e1c98c7ded05f047e942ea87e45faf296cc0dee1b0e9c164e64bd0d8eb5d768929ef18ddbebc548adb3e860669c69140f3cbdc8dc0829ae53fb04f4fa9bd8f9ae109094e9f83c5e2cd77aa2f31a743254d9ec3bd8341462e7da75964cc2abdaecfbe68b7d782cdb788955dea832b4e4242e09b59424c4ca968d7f7ff9ece872dbdb73cffafe2f371d541a81fa67939fd99396c4845cb34bdc7e9300865d1757f719c8d106fcbbf787a2391b6e3bb8cc01c533f74d4e787d164840d676a5b0f0cb31464d15f64ba353fe223988216d0f291d31bc437c7cb4f05519405f592de3d4dc7c82ac6d66b0eee2663abcbb48cfac1640920b5958b9e73f7cfc84da16978055ec103ee485b6c4d995bd805bd484274ac107098764c26761fc699bcae3826a58157441de310b826e112087a598c317153389c2694984fd571806188e2d4b0f3d793d69ccf14583fa6902170aee12f8202898da817f6815a940506fa64c47cb8097c9fb333efb66091de0c30e7cea46d610c296527ef24cb315d725a5d90f4bbbe1a88a9372738534903b2022adcf8fb17c859a7ea0aa0f1ef918bf0f4c17fc69f7679c8054648df7707fa2d9f9194f4cdc506b48bcf5d9477a73b0352de849f54975b56c2d44dcbc3f3cbfb7078de202a0c16d630c6c47c70aa68dd9e6f6d0f8486149c9957afe0d4ce0fb2c2163f47d7a4735202783b70839ffcc401fda1ded7498ee2b059d5e653a0ad9bc0f520307b950373286c2b3a5890de01a30f88d4f7eaaf702f6129a5e7718dfe8f9ce7a4bfe8b080ca2afda09684f6dcab2d8ab98970618d3ff812e4394a97235a93fe6b4ba460c0123b176be6842c9c41df0f5438e48b8208a4f86df132b3514763cb4dc6d1fd7c2626e363ef97688b8fae7f6ea94d1598b1f04306b632c9d27e93b812d8786efd2e73c74f5ac592efba2142cf87b3e61462615c783051c1ec28ab2b812aa09b8853ab2df8ce169211edc1c03f781fe8414581a98a089783e86d338e6364516c68bc557c27f49350394e146286249702667fd79306e60cf70e74b448802e93c9e393f91ca27443b5af05a48e6b35261cca3beb83b271b906a566b6c1a02e6f9a43fd1f7531f52fa7ba3bf9adb850d11fb69f46df5852a596f76abf618b0fecc7ce2450ef9e1f5d0fa3189928331fa2f172d36f10be31d8904aa9599008771338cd3013f2b09bd7d6b3c30e65a54aa07b4600ee7fadb45bdde74b0bb6e10febd68749f1e62e11a5e22f65e0ced579d3a57a4e4c93ec86356316775d3bdc7e7c8746957133e128cd1d622595ca8d53445855e410b3454d6e0c1e55d887c26cce34503f1b419189596e932cb7c09380fa7a20ebc2497eb20fbf490e03025a83eac6ef6d777805dc50bc09a1ce1ab0a9fdf4248aebbc605c1f64ddca67156e68d72368480e4107c8bbf10dad603fac7656afa6ea1274b3f4a6e223b08a26c4c69d3506f767025df5a1f4e778f7974f8e0c92f132bfd93f21ad2363e9f69f264345e210a20a24d00c0aaddf291a8a619a27844c8b7a53cb8c3a0ee59c33e65a87d514cd73801028b5ff043de95280a941b06ffe1dcc4a21dc588bf0f2c765283b58b28690502d2d9786e148df25e1f02cae3a500f3c2607ba0c82cd133c825a07d3a4842102e2a75baa2c49341d15fe0229cd8a8a534f46ce60dbc5261aa7b69250d20c4f1f995da870cd880fc2849b6c2a10f4b5972da6bf5b7e1e54e73b0685d62469412eb91827e2ac4d999b978f12b7ebd5b99228ee36055420c42da610876e82e121b7aaa08007b2e0f930b4a19bdb4677bdcca9e8da6743159f734f9d411fd4be1442d3bd5ae7c5885809459bb09b0920eacc165a548834430c42a0745bf1024644589e375d8bce8fdeafb043f8011c19681ad90d4b7110f33421005f7cecf4c2d98072d532fab63bb2a95f621c1467aa5e3e58c96828bd6e3e98d7244c199279fb43b760813c63d5fd7fb8bfc3dcd21af4c0fd5553b725f9532f8e8c757fc5b5d028d6a1f15abfa4e6ba2524966246b354292f7bb3252edf9b6f8b5f9c2673bc83b7355d2b5bb1f296e10c573cada9bba3015501307bc2663ddf37656c1785d83a783d5fd7472005357cd7215ec5e57b0cced9b073c0c8d86208fa658a59e44e1df4566e9c27f627ea13ed4aa4b3e03bb51a225024fc287b31703d29a1f4766956b2e95122021a9ddd2fb69ab57e8443c66c98a9eb38ca98d3a1667757f125700a3a5cd112e074b237579ad93a2eb7da684da3826e7b96766f23df185457d8aa641519b614c9ecad201401cedacc6349c244aba558cd745f2e7c0ed4412e776089ca86c8cfc66ad5bfed53423e5f6fd9fed918d84f364c9938365d72c67fe9dba4e10dceecded6743d6af8fd0eefc3cf419452e4fbbf066db4d833bc8a511860dbe31592121a18d0c11359c7f1854776b6fec191066f8a23caebf77836aceb3a565705daea8018317471dc688f27e315829ecea6154fc003a4f6 +MD = 6f07c911878a86e57375528b8cd2adda91e11217b8c944b20fb1a4fdd6ae52bfeca5d4f929872196a6f17aa1af942034 + +Len = 36664 +Msg = d2948aa5537ae4bbe587afc2d6e7386571c4d62f6a166ffc7cb83dad50c1d220a1115a609e2a21188f42554ebc960c4d8a0088e3e8ccbacde9c80670b29a46ca975611a781503d18932fa2210d4321b27019e6d8e34ce935d59dbbaee4467f63fd8c36e4c59441a2387720a39098807a69367577223d041b8662e4ceac6e85d41bda527e329d349dc842573c0f3d308fbe7fbf266f481166453d0a3ad3ba61063969ecdd90141ef389b7ce5550da39d7b71d4b4e90151a005a56b45921d11ae09f618c69a7a0078bc4ff0d541d16a43c9b38a1584e4b26d00dd66a935d5cb84995e9bb8a3feaf84dc0419ca33c9978a5b4f74aaa71923ebea6e5b4505102442b6229ffa81f99f821c7a604a8750cbdf94883cdaec19469b26caa1bf8c36cc56d4f4ae32b105610ef1f56cccd92177c22a004b2cb06f6af94a84e26f37c4243f7a474ec7bdac9479f11787c795961bc0704a182680763184ca3f85eaa442bc7b1a9cea4004599a519e5359c1394938590bb82c4ef8d81adc3a2d14983e2cf5783a5819222196f3245e3b4b5050954dfa50fd000c760f875dff00171e720d7fe55e2b43e4a1df2f70c531e4eb6814dd32e46b3be5848717889d4af5e3fc4ebc10fa69031de1acbfb547c9af08ec3266813a952870a0d94bfaa950496f197b2aa993a3df248d8a14607a75122f59986a73c80d6e245760851287c27a36761d5c0dbe6e209ee1f1de10b1c6a6c53c9159692136658714c7637edd1400d07eafb0bbdf1a8ff3ab7e7d34a230e56101c7c40fba92b70f6578577dfdc795a3bf9cd9428a5b65b9267a624aa046569945a63aa608c4db23c5fde1be8e4f8146a58f362024835a560f802dd1506962c484b71deaa02f3a6ac2c282aef33e5c2fbcd147d35234c660b33a5057272ca2892b64fe3bf5445d5ac850caddb0f69ed5821d8eea77e2424fbdd34a4a99028e3db65a5c189ca6cc6a53432ab96c1ac1ce81ce9bc42a1e46a98c15ac3a1a8d9e78c1e1a80efab900100ff412c0790d5d71385ecefecd3b5bd4aa6bd68440204bc0baa5629d841d80f23afe23916c60ca741268c908f5dbfa77953059e79e6d2e8c2d102c42ed26d77780cbcd8abaa7b12dac56fa6128729af8d91db6a289b6bf5175ac657d8a777c165dd7814ae8347a2462b3d395d991c5eee28e7d6396af66b740f49ecbe081d7654ecbdf2079a9bdfee209f5258dbbf3a04e0d0e9959b9bd040b6348ac83c871dacff347c9f379d50386b3cf7eb953bcd38813eab227684aee3182e3ade8dde3ed5df84b95ca1757d8dd6be33fe0eb79ff0d2db25c942d68cc5fde003e8414a61375456b127224cee5627ca0b798f5c36959c4c5e7349bcf34e2df1edcea1f20f3a25526de9004a2cf9270b894460511c90a73c5e06d15c6ae66f0a0078f5ffcf461c1ff4888496bee09e26b447c9bfd947bb512e6c23de79f58cd345ce85982ac3ff664eeef6592c7154c6946b12cef324a033d58b876ba8e34df3c3b998e6a71997ce84019ebaff161091329682a5f48e1d8b5b4d442b80187713821f7811ceb0ac009dabc3e2be369c2f95b1626d64edfc01c998a44588fcd5da8bea6b4027f006a3a1d2aff8f138be49c5a5fa4dc9a8033c2656ede148f72ef1e500ba9b3b426c609960a82520863f87cb58926ead29fbe57a6e6829497249ff984bad4b910ca7df8c3cf791d487e690aeb472f897d7aba3cec85d4312d3efadadb18b78b1b780c7824ee46394a37d0d76a0e212101add1f294c14572c84e8a32b1c9e4924acbcc1837eb6c4e942caa52c0329e49f5a570193e2d48e1debfc881a732ce77152267498b4b7db5acc9701d7c79097ccffe2f01472e70f6f72f305839e7e7a20108589c8d82dd16fa9aac87fd35f531f714694b5e49303a98094c16d84dc29ba50a0a71cd261cdb042cba32c0fde3f21194b967d202192547ca865e00f8d1cc67940779a8a9bf8a6fdc43ae7635484595db99e750ed9e3f7d0f798e426db7cccf32da04ce92379d8435c34b7b70b494fa65753a397021f1ae3490382b10c7154252fcb3ad54079ce7d5a3aa5f349b78c5dee5e11a1e56d461d664dc1996922e7790ea06b373b20111187f3b8ff57f697e84666c715cbf601e6161faac43ab80c5691c6e7f85c952869ab08f8c37d2df8b12714cbdcfae2d6a62021431bc75a4c2482e6b6feeb019beb8e206d280285381e591027dcbb584ac54dfa968657312e4ca7a7e133308bf301f7e420143025de99a301e3ff5580e7ab6553abee34653a34c8b26e7e735cb712affb18704d357289cf90052c128334c130d38839a41df845afae68c6fb9b6f857f0f5d25a2df7d56a364974b3889b96d75233751f081f1e72344d4f51171a4c42dc5f81a77498667e826a04310b9ff18feeac01c60baac83eb1cbcf2fd06dc3681c7f036149b1526657d29fee23c8d2b91d129843bf0b17fd0dd27a50781a24345bd4d63c0feb2fae4123963f63aeb0cf7807c70cb4a89459a301ef6770b7b533f4e1888c49ae64b2b8cd85a93daa225f89ec1c756f1bb3b11bca8cd94cbf1ce3823588c6896388204940ecb024439dd5bd3fe73250dcfcbfc2acd12a7ea8b1df9e41559f41a310535d2e49e8ca1389beac93d5b80c54e5c252195adf88fd2a6473857d6b050573d86ed61bb771928c96b258567ae41bf55524a0986cfe34cd2edc727ebe45e3592c18e8e0b0bd390cea792df7ff9aaaa204c4d3086740e8309b13a8c80d76c506dac5c717492f8f81266b6518ba7289724dbd113932e37ffb45d398f7dd2a33234110015df52afe8fd6f39e67301e20fc9c67eb89647864639b76b37ca1d2a6251b6217f359421e9f78cc4a31f4f019977d7fd29780524e20288798c50002a682a6368b95ca075826883ff9278d9acbe96d4f66e1fb1395b75970a96f5c3cbcd29e27cca3ebed43cb81d91ba64e60c058e86108d7592ec37fcaec75ea2ad3418b4fa07bac236669e4f222323ccc049f6c8b5f49061f26600fe9358eb40078ed13572ae91cf4f5230955a5cd699ad8a19aa294a7eca17cf3de30f6445b519008013131b584f53c17af38de5dab1f6f7f79da9b9609a4a4e7712ea9375eb2bb3aeb6a5f6172988da05cf826537fee3b9170affe93db8d30b35f5ec8f82c885cfe286f0e6d44537c658920285f667bbf80157f1831d0cfa2ffff3ddfd74366f7ba5ebbb94998ba7acfba5d5ed1ed3c8db3eee482f097e07e25d748488541c30df7e4dd0a86de322b5776ec344b72c508b5535cb9407f6414bd8e0aad629611124f514f5c95935ee0953579432ca599c30ce96445b225cf293f7a0178ffbef5a7292a8f39f636954cf17c70f615d42f4f13277792b5f9860e1431a935cd2ad53f0de7191d396679c304c26fd767bcf9ff6084234adc892d35e43b7e6e5b78343c760d8990df7170e5379db261c29e8e768d85e3b89643395327fdfd7d1b159741ea043d1f49061f261265052f97175126f2b3356663b61ed847ffb30c8c9172c1e271b0331682e8f81dbec49b55a5e693287294fec5605227ccc71b77406a6b4ef7cc9f56c87642edc2117d2f9ec8b34da77a8edc4bc087d44edab357a70ec54b828b3704cf6ed17997f39b76d30e4bb8e8018f796755046016a0f71850fd253a2b1433b79bcaf92e17ebabeb82d5245772ce136098ac7c5decc07353bec40fbd4a1e0209ce194e7dca403b082ecbb1cbc026b72c60254410199fa47440e1f92767ff1e55d6e835db17c7a5475730986878a1f7275e5de04925c5070497d5561b2d4e053636a633d898b887437cc22ccfd4d6300bd3c4f54ba9a7078f242ccb0ae27143257dd1ecf8b5b95d670fff03648d2a0e2460e8e7aa0ddc427e6646ac79200f54ae0cf9b5be0730a43c912590b90a13fe1b96383be6eacb345ceeb19ed87e7eb62a749c229af5b4d83e90f4795fc43a6c5be4316674990a59951e0c06bb5655e4453527b81219cc85e7afda11ab53f3f56fcb72fbf5b1002ec184a47894301b6b68df3aeaa5ebde29c21e54fe3e31d715c1cc6b60cccb43306ca31958f59445b81fd3343ed8d46020488ce3838ac66a39ec5799397c4049eaf109d94c521b5b66d4a1a2292d6bf926057c046603ba13fe5a0d7aea86a89acaf92972b73c0dc2d411db034e162b1f97636c460a5b656acf955e8ef86e6cac5cdf72642e0614129c71dfe5f2159a49f0ecbe06e4d460e52a28bb43f7b614f52d2e853c2552a6d13c5f30b8c9ce31eecf2c11e59a1124f99a8ea4484cd03a1b9870c25911a43e7510446dfa49826a948e9be8607e943a4e9d21c9fa8c5f34764b10ca49877d5374d4cbf838d5e4dcc1bba6a1f616d0092aae9c6cd91ab5ac9b91b8fd8bfb408e66d6406fe31367e10cd2e6ff14f7472a344b693d729c75fb0228c3ecaef18037b1b16c2587667e1fbc60d7204ba48c05e1ffe28c456602b8306cbc1810eecef7ebe289b9a463ba0176e1f1e61882f134ba38c309c02c0e5cacda1bf050578f377bd633bcb88f8e0ec2e2b180fa37293f339275167142db60eded6e05fbd0438ef828f47f324e7cc006cfb0b16f15967dd4796332e74f0c6d5a332cd961dd8e66e74746a1a015089de91559d7f5c2bb89137a27ff90a513caa837d2eb20c3c247afbd94a49097b420b06027651cb32ad986f13ddcebe974012e67eaabc74771a9d7f888f8823af1d1032ca3f9425b46f7959b1f4b7780cfc9734feeabb3cd2f15e6847e2dd373642767c74a05054fa25bc5b436dbb20f695c0d6c596b74c95d1451fdfeb522e56dac54eca408e3f4cf8eadf93efe29e9e3615329b55b88c08e1db0a1851eeee580d830f92c856cef1108a4c672335da4c051fb148cfc7e4724aa792b9bcb96084023a2695dfaee93394240a88b1bbbc482a65bb93adeb3c1d33321f8cd6bc6c21e271fd9b2ea07858ad4181be407d2dd9ce70b945972d7c4fc5021a5744fefb79d4b1fb6c5d3363a9826819d07881134819c6112634938c5128a1e9e3b187f3d2018188cf136f926e3c213a8803d158de32f12dfe2d28546b8397f6f8c3603e7591690c8df85deeef02f44cac8675e2e04279739529f1bce4fe6aa85d2290c2aaabf1ef6eb5045d73fd6ab705ac739b9970e44db3d1f8ad06c3a466dc771f69b877a29a3af26dc844540ae35b1ad56950e5bc221fcd440d17f7cc9a3b6a1619e91e0373b9569e18a8305c38767ba3364cc8885aa2c4ddc660c56bab43a27cbc83c89de3b38aa133e8b9e91f1d75e3e9d642d15d045fccbe29530801bcc85939cf9cf653ef367e034c1638fe1ab09f6a367b1e920d4518dfbac92b046e83b67815c3982936013b6f1b70d23e33d5dea1b49af763841ec90f5a505d1c217c9a619d650bcf5093e25e9fee3d48318ca97698c8e4373394e838521024b19c5b0ddcaea8d5ab05957aba1eb90383db7c07d1292c6e77e04d7b41eb300b2ba8c717d191b780271daf0c6ae1f8ab56fb4e009ab0ef1c8954f18d126ad897f20d68c1288fb894a95f889f5630d4be2b57aa9cb9753877d6572923931a32526e93e712c9eed4979b94c93b665375c369b936e416c03006c6b19d47ac4263c30701ec139cf63213648419e88291024277e79ddf99d9fe51c229f4004529967226211eca8af1fb8f6cf721af9233a4c4bfa985952b07cce03088d6574618f1e831b92641792556941bb589977e8182d0a8c9970fb294bf3c7996ed5297579cac9292ab8052db6ca9d985f8a92ec3c5ee9a0d7a5417c601ec061bdefc202ec046af74568dfe5b64560e3116ec8a4194a6fd3fd66c43e6ba783edf545acae5853ff227cf7264ed6723227f8c687b4318813a2555601d3b116988a9f5767bc3121ec272bd376bd99d997d380225e7107806b7889d378c0f2f454e4369571c11906b861ec9e2fd662d3f87241f2cb8f1ddbedd2f56f97aa83c97f7735905961826afa8f39a7d01de409da90a8c84d42e6f2f14e429afce4f5fe4eb026d89cf1dfd708fb9d90f5e87fd3c49b3f135250f55e3c56dbd60704cc0b691b84ceab16b3c39a3382da1feaa8da3d1e8f44891dbb8625693bc1447e78894535c9f3023490c8f4c383f3ac88e175aa76f40c402dcbf32311ecbd33d68df0798b80d630cfe95fcf280b6e2a47dc4ea35107bb15f5893ddbcd694a63916ec96c9923f8c56d3fe07fdd93ba17abdbcdae1954e1790985beb6183bf94243bd8c94cb3dcb3e8107039d50b7680329726b215c460ff7ce440e287ecf4a6e41dca288ae38ddeaafd1218e2de0e86b5532afb38675a700d846a4c95dadae36204eb3cebe9fa1784e10d2e8d1aacbce939f23cb244e3732abf00b0f5151953863a638cd88fca655e0688033c86f728b791a3fdea24a40fbbde2b970e655afe390659a0b79ba6d120b2ac1d58eb98d407a268c74ace444ca9291288489245ed61aff501f1d63561b22ea1064a1136c8 +MD = ae3d50c6b6dffc7062dcfb7788c60029a467c40b75e37f0320f001c4588e83024fe4be1cace1ebd8b1da1744a920546f + +Len = 37456 +Msg = a882a12a0f506f5fd7046f4e7ff233904923350d8f56c51d5a4646ed312b9a252f83dbc759124c5a2e288f497f2218868033e17220655f0196dab6193c58293ca105d467d96e9d3a18ce6858808e8a113608803fbb90e26d7ab5923f9dc4390e258ef4d23a6b4a45bf7f62452a3c727a93287b3a0ae134a92e5e4325fc77b3e1e4a8a3cf22123bc44bc2e5d72636b90abe1d382cb55f3efddb5d3294ff7a80fe06da49283a6a59fee42059d51c844506e06f21dc6412e8b1a93bc65351d486adb2ac4ea3297b8a3db0202608b32c00b920a49d14be031b0cbf7f662c988daf3510a71a09974db7c7da4ab4389438d16aa746139a6b39bd5746b17ce57daee2e0495215212ee9c9e688266b2c67af9f609cdded3714bcb7db655a6f47a73e07f48536a8b59356a6dfe33db4aed39a54e428ef92b36195f2dd4501a71abf4505baebd9398b719c38fd1216f5848000d73e73066ad6f9cb55a80d2e8c266cccc67aa4c5326d6ec465873d39977717e910b6a4a9dd688566c783e669863257d9317cd782f92132d417c48e2f034f405ee794e4615330ac6f32b5f83bfd0827772e07ad96f86f66d735fd2b7fa0d4a265441f5ab434f717ed7d876a2b596e85aba5644e8b9521b2d2a77b3cb1d5cee6090fa02f2ce8856de8904165c2022d197f7edce1e93afdbdcf5583ea4e0c04b34f305f8a51d7a25769532b1086600d8afaa1b58f364ecd30d527605cddac3fb2418fa494aa6a167d76ae8c9401dbd58124f7377ffc3957b2ed0558bce61d478be615b774bf07a8861a89ae18bbdc4fa50666acdac26264ec1ed7b52ff1c6e4e546a8df531818221b5accd7c53bc9419fa7d75ac71133bb867085bddf8711de686a3166593e034ae3405f50c3090c741610338a6f70132627ebf7b9f42f65fcbd599992adb832e987d32a6139ad0bb0b3476085f9676a6b779815f096722a078c1bc6ac780e0bc6ae1b15514faf30bc1e5648908e7ea153207ec8acebd7c9c87cb9a2fbe1c9f8ab0121096a2f98e262fe44d1f6563e1ea6c7a5f6331ee6a804363a14c911705f5e27ececf2fef08868fb1ae5fd782e4a2c171688cf5527308662a6035c308baaa8c984a832e73d8c97bedf6bef1dd78dacb5d867c5b823c915a70659fe65a240518ff22372100955b7ef9b4b126cbf50f04cf379607161dc78ad61fdf4d83e8921203d47faa1db4b9036576daf8e70f9be8270a8e7a569cf781dbfd789b2e6ede0256dfa11c33cd6e9391ab90daa72f2dfff56dba17fc40cdd9f28cf041b23d455458b26009db35e8ca3ec1776e94ba11b6cadfad724f9f96fdaa5cdac3a7ca649299eb21059c84b3f1ad56f3073857039717eecd2bf9000f5773db9cb3879cb8479ae86861c0305cb46dea9846fa7c603b5d09bd7761288391df97ba73ca2accedcc48aad11edf4f8d10eadba053a0a3fe1abee317106f80175dffb886f80afeffae6a6cc5d0d818d606e631a5fc5a6b69c17cd26d9f4ba1627fa22b8f99a3dae7c1fc22a2beb12549e04b3eca2d001308f1d2000d6643540da4fd67e0178bfd40a74c610a110111330da8677f9e4837562c4cf058fdfd14636e80021afa39b294bef9ac6e703e493c1f8c2048a88944cbc15c37e2decf6f2e5cc89ea2ca23b75e8972694264cf59cf76451db7d449c7e4516e2b2d7140c0a8c035721a0fd0580887453c28674aaf67a281944fba003d4a6d115ebb6de7b57d696540e333d6312d48f07972e026d68f34c04872c253113874e456ff2d2aca1688c66f80be9bcf274ef2b5c477ea5bb0ad6f9eb375a8f068f945888b27805b0eded7729538977e90f9ca85af871b9b766d0dfb944c7837467ab387b1e59ef4b0bc16ee731a6febf4d9f64d66a621324b041a03a7df57624b79bcb9360fcd33c6a11337bcdc7b83cd8ff491bc4d91aca8f3223b3086bd1df266cfb179de91749b3e4ae2d50740d2755c43e702f5e3671acaa506f0db1fa6d5c27ae4e00a9253b8e43c744e235654a6ff72a1cd37acfe0aeb10fb5b5505b9602d4ce81aec363d9a235660aaa93286bcc9ff768d7b44de03e4f48cc27cf5a22c07942f9d2bf3bed98c273c5d115be5314c48c9c64951939048de3fd8cb661d83d20f2fb9226143d17f2d6be7e4490caf06ed100a1a499b3a772c8900c8ed78122d0c6d2167f5593c8ce773ddaa6049808a6aedbb7693615d007e0cdcede24e51692a6c5875268b5535d3e890dc5838403730b77cd6c5829265311fbfb2eafccc26d7a1b0d28b46b5fa814ec3e29765789ded01a0c3668b5525e4464ba07e2fecd692a1dcf87a17f94b5dfac965843d944eee50d9c4ecc82fb30624e34ef2442e08e9e13f6fa97b79c8e89123cdc54d2d9ab3298a43cee58cad251029170de62a3e5bf45a906fedd1c3bf866583d0f0af31da0024c8935ff674bfbc8f8127624bd7573fa11353eb7bfc216f01401de49384d1595bebc083e79a346e7915c5551d746a37b560ebf0e2a2dc9f796b2285650427a971f5dd1dea8e21ca985d6e3b1986138119f19eaa90884fbc506d754fae404b8519af4f7a89e116454fc08880ba9cd180214df2552ffcd93a08df9ccfd9c9cb50b540ae261003806311d7bad28b1922d96dfe7d9cfb71279d1539ff7271f115b0d7826f9d4795de98811b6b8d159b95d1725b96fe9da5a95a07f513d3f166b919e2cd1a6c8af8af7a1004113cc494992cb11de4d680daecf543998060f28b33e07989251044ac617c311a524e1284ab3fcc8dddd14fa150f37abfaba5dfef04c91e6f16051f31a31386c6955da9fc5a8f0753e86b549973d8ffa01c1f23f2aa2813b763c77528c2e463a150d7e55c059ef3e8aaf12a23c41a55135849694692822c2aa4d3e0e27f436a332b394f346ae434b48c2f4ab0d03c1d61d6910a5b6c6bba014fb6ecff06c50ce47b1e5205c8f33c50026230f116b2bb141d92a19186493003dafce3ff17edbe4dc6e39850ce406d43b43677450622a0b293daa9998eaf308abcf27043113210c795257c95d95059f7f818883d3ce070c5efb59cc3d4023e0e8c541c6b811686fa7c50995588a784f57484de3a1990bdb677dff5b0f4f6bb17cf7e42e8f62f934ed2f159103aba70b48007f3cc2a97ba1cc2964ed16fd13a3edcfd8e3bdec1c84d4f8446468e1d9fcdc11e6383fe8a28516694f2b5b3362ddc5b3e48e4a991887e3885eb78f12574a9ae34a7d1f3cc7b0cca48abce5daa1888b0dd2d73f4f3764a2482b317e276a1c0ade73b36a8f31497641db4abcd819cbc8446865a3f8bf44999e737b3f09589ab56b298329c829799caa0b7ae9170fcf03c06fe17e7bf94e51f3fd3cda9e69ee22f0339563cff768c746e2f6737dcebbc4e9aef2d8c02dab51b0921d55d0e73dd9d75a90208ce33d7e7d276662f49db89427ef41baafa382213bfac6ba8618b26386661c68e735214ab7a471bf63c3eef9e2f8762b30a2fc4afefdde11a8467247671fe244c8343bb25c1fc091b189847d829238342b7341535f620e601db7a80de04c8abb1729b43ed461fbe0c837a3a86f852fdc885f78c4c8f3fdb1cfb37a3e5bb7bcd6bc5cb3768832c9b48f1572011199042b2facca26a076530ba58410613f261f9c9f1561e3de59d216ee6a1a10d1965f2908a25eff4fb4ba77877193fef4625b15a89ce50c3fa0bf0dcd80c25d1543e7dffc8b5dda3d75d8fb5dc12b9ee2331949c038687914cd38a2149d937146694554f1adee3cd28155a20fbdffc871600141cd3312b3c3a9e4dcab0ab5d3cdd02190d0523aaf769fda7186ad380409b3ba04b8d30a41b6fc6cc37b0f4f0b1040219c82c068ba91990f72a8d9fdda12f2ed9a6a6179ab538e775f6af389a27981f07fee3fa1e68b359bac5e8877d3f4e6410cca24867a0426aeb961008c1f6f5a3441fb190db9cc3c27279103ce7617575f61bf665a35308eb9d8497c800a599596eb9394d3bdbc755aec2793294be30deea1336d1c643e8c3fc408b08deca1f8bd849dfa1c7ac3aadd020a7eb0dbc1cf97d40d83f59098e9e88688e4d94bae4c521400910f774aa15771200c8dad1766020335ee0d40a56c5e25af608fb2e858fca4a6a2d53cb72371425387e54a4e9bd63692f68bfccddf46a9676bd5a6b7e6643a7674955174f8d37c8935e338cf34bb730ee5984c78084b1b974ed3b183bc31e15851783fe7e82427ac60ac0101f95bc490015bb90eb113822752b35ab4a30c9e347fa68d7abb0c4ca34e6b2c4bb45b300194fdcaf7a046e6febc9a29b2639d7bf24746c3943835f156474642172b66bf47e4a5089c9e8d4f06d7b2a7e6c48b7f7bf180699c294421ad9565cacc27227a4b3a7cf9637290c626ea235bb68e7fb2b5c57e08fc54e4e1907ff14cd1703768f5ddaa27b5e6f652463c15ce8b88201d890b65271b81bb3be74c125190ce4e922e17561afbc067fc4e16af86ce7c17c7df0a604f617a71369a45ef6070090ffedc2ea8589bc98dcb27c0190de5300bb9a00b94073606afda91b2b101d9e821b6e86bc96bffc90dc7b7827ceb3a6ca5f9b2562cd702ec1d30b5db7fbc33352dc23b16e1db8d8892f8e7a400a633fa8d91ff334e472df5623fec07821ae7b6da28bc77172eafcdc267a06dccc83aa16a886eea23e01fe926101f7fe2a25b34d1f252d594eecc61451bc82709d9b628e4e7e6c2d229419013a9378cc6ddf876b928e77a80a24b0dc41c4818de5f0f58a4b5510483abf9b1cf141a74565126463bd062ac02d39697e773098874e4acf952fa96f960ecb0160259b27fbc884e6afff4aab4420814c75527f2c1f2eff7d396bf9de68e76cf85557ee5f71d0ad6abac9ba9da69c92d67b740ea0a810957ad160b4e1638d1bcc76f8d9d22a45d28d1eace46659f9f493db4c7dbaa49b834507de691d08483e1a4fa8dc14a760baaa46394699f0b10d013f5c3acea7187f78571584e5b9a16a5e39b8739b5be9cc6ecbcf5faced6a62aaf213c451222fb06129a6a6d00a3126f4efc82edaba296e370a0f9e23b27e9c0d9e13a8e6a839ecabfa223d607c7fda9abc586c5764a8368f9b5a9072e2760f85bddc66f39bdf7ab562e8c71b82d61bac39e9ca95ddfeabf4fa30c52eefe933bfcbce7d0c9f78e129de9ab275afec50a5e2dca81a789544f3a132aabc5d30af28327a699605aec655e788ade3761b201441d1a359d6f488082ad0cfbf9ce4e83b9c509b2470e980d5f86317f957faf073c1494ad87ba4ebaee18b928d319e658663f1b03c63a1a7369b9a6f3bd8044840fba3fd1ad91ee6547fd391c9bd95ad7523ce1742406fbfe43b9f320f78bf9e085b9238a561db1e9550395bd9939336a446565eeab9bc215b72f20f08bc8578366b648becb861eafe0d3d4f5155ff8780562ae57a121f7228bc3334ac060e5d57a5cb75655f3be1db014feab567331695edac4994fbf238c881c3615df7b2b3f8950773b3a8c179c8c6f1cc7a59e66a41475b09afd9ecdbb76e3303b3040b2275a3d9053c27bb3953e8c35304a072093f2dc7944f3e67d171dbf2aa3fbd801f6b6c90b8837e51a6e8c1251d08dd8e69dbfb7277d78bebb0844592b35886ba115659cefc1dff5d2913faa788eb536412a42adc32fd54e10f6b5583bd91e2018ea2f5f44e604d065641ffbb3520c4bb8a24467534153bf034936656277071ff0dfdcba12deeca15b51f3ae0904d83fd36e8d8de29b38391d699028a9f78991b05b33546293df8e3abe856a838d623a1af4e5c67525cce3e4be8b481741ed9ee1c6fdd63bec27bf8c159bd828d3f263169d14ba16c759e6e2b1ee6eb53e7b6d0a8702e7a6d10b5dd8bdfe9f00bfd0e24ed1e112cc69256a9fa883418ad47a27b3080a30aa2ad290a71e7668133943e04af91676a0f37996a20c106a9eec34f365b0dd594fdfc57f80a0cadb6a2a9485937b798d984d9d9273465e90f96feffaa6e742099dd92c53ebabc49f0c780cf8b0c1d300bf5fd9879abc355ca443f463011503e89dfe4f3370a72a5d010df1622931eb761a12759d9fd85c76a6528b57fba2e69f5637754898fcc5bc52cf8bea87358b98b34cb8fb0b019d850782fbfe1ef7b4d6d06de7baea125d6506a824b95134790e91f6ecca669ebe31cfbd8e7ff17a34341486eeb0ef52baff257f02f60f967e7fbcf957313619882407ea8a03fc943062296cd0522d22a333b83b6eca4ac262943d3b415905d9c303b7f138b1c8ad6e081705d5c92eebe1a9c5c6b05d8822edf41ba6f4695a463779e5bae0b2dc2eb8cde73b473d7a163d08570710d6541de7475e21b78abec8ab2c9b2cca2dc07dd459a0f46cd597097cf973e6d65d331b17370f93d1e4b8c7e9c4e0313d4bfd048a554a1a8eba0f2e6923234b491caf84466a34e68b9ed0abb7eabdb083341a2aa469ee94f3146aeccb2f6e1eb2384fc13c88d8012de18edcde463892e20f9f56e83c934ae30a2eaa69c45d4759dc9b38c13a00ccffd47bc3267f5cbda30415f220774124a8c4e5d20c8bf6af862e1c529d28b62f48a01ec6563d2e1a0d3d036512c1000a896b16cb7c2b433c8156597797f90112526cff4e382ab8916adff11787c3d9e4cd274a +MD = b59b1626d9b8d6ff9a35bb5cd69d29702dca9471a3140e7c2106b295eea3193a850ca00d15469f6d355bb60f48a284e3 + +Len = 38248 +Msg = ef0c5e9abf77c9945949ae11a756e68dfe2b1438a38d40048e22c2fc6d6d62d7ec00bdcd34eceba9b17d5e2019240d61aab5d2edb3d211a955a79b318bd9d27068b80d6ea0bc3e684a2fd226e427d88998b76664bd66388ca1e09b3386ec8971ea9e16240cce0bfaabc9d0cc11458f2e509b9644cc30fdd7f93489a76690d103fb199f987f0a99875cb121baa76879775bc72b35e518a8afe60b2f3834acf04e2291727101583236e6518d97ae77df8d40a5ede11206803eefce538cf7272f79e76e55589aa01c2fd00fdb0b2f5a0997879ba3ed5ae2ceac9ce3be4bb7ebd6add21911f553caa09ba255d5c030f93fbeb9131704c694da2175b3381e7cdf2d116cf86eef33be06a2e58a415bbc3cc92a5d740fcc5c05ecc403a689ad4feb7cce3c7433ef4265966b2015e887d80bee02fb2654ed261b4cbdcd25789f37f70a0bcaf62a9c89a5981fdb6092ea8e4ef86f1b91ae102cbf42355b96ce9c3deb20f19fe4199f0f6753e59fd2062ce5ed2d98461de4dd75da15543662534e68af06a842a7c99fdd9410e6f2d30ef6e6d0d6a60332c0fb09520e41e5f2cf5ac02c04573ba80245f91217495fcb70f097df3ac0db380813f0117525f0ad0a6b4d486226134e8b396dcbb0376b22f5c10203a30f559785cc32fd9227e0facb2718ec673e51002e2241a523d8a04165112f2257baf9b7ffcfd800ac703c43dc3628015cc77d28b1a87b8ab753858e888a24259fea4f003ec3ea010c278cef0341856d89e8202ddd742561b5d1a27226d2ebf5c3c7e0db09516ee7fb75596609f0381a36cac1777a2e46126579805606918c780b7833ae29216e9cbf82290fb6ea48eeab95e86e507ee7840f74a6a0f1700d98bf26d0e267daf107a0758754d1d8bdd32f701d7a260a0fa1fbe99cbaaf16783c26f840e089240010e876f89c2461a0b00c83e903c67dc6507101eb0a082dd44c89170a0f57a9a29fddaf0650752ef86c88f7d371f67d1479b8e41afac45a2aaf30aab6d69b0edf9cc94538d68de6cdf1ecf4642c7fb2020419b9b1f0aa47814f63dacd9f1bfebfeff26316973432272680a1229c29c697dadca83956839ce1136acfd6d1a01f4b81a12f29fb31ba0ff38b279729bb5edce149db3993170053e38cb059d3f2198a381dd1f86b4e258c4057ae4b3cff25d702a777390f2e1cdda713a5de0fd99585fdb0720c4d511ca7f52a5dc53bbbc0922640a7c13290988a4745d8eeec1d3b42b9a03aeb0a034667fb4d5c8d90b8da15335a915a64041b5fac6b6e10d285b2cb5236501f0b2c4cd43808d42ba1be1966133e5d8b0d544d66bccc92cd29dba328b2badd30b794d5f695a2ed27d895258fac3434dd9546d8a660b26aac5ae5b55fbf7408a475028ad6fa65ce0a9c04a798e8833ed764a3612781631e35cb6c917a63abfa05af40127b5097a05c54d44787ad75a201e23293f20528d7f0e537de8084a9dadacc1417ed7d818aa36acdac66e55089e378bd130ed649bd661010457a0cb4d1ac34473e356b6bb56945b77f3c775d1a068c0a8c83da0ef71eb5bd6e6fe21507024ea1315a009c48354d5a67124be47ef188e3a45afbbfaea03a070067ee14a36484e99864265e6c90ea7e0def492ddc2cd20e039a1fa3097509b6a46b18f8ce5a3de91a5cc4f7490184ea18db597f5d40d453524b3003312488920181480baf6de2676049c2b00610836731df632429b4f47c397515274d352162c0b466936f24d92c123307d1cc454fbd00014f6267109c4f5f21b65786313bf088095ad935088b00d7227da2c22950b42c4b05823fdd33966d57fbdb049f3d02028a0c252aa060aa571f0b6b1143ef135ec56dcbdaa121170a1dccfaee079161d53e65bf7574c1f43b319973e01b92a43d76708760e7cd9bdf7d11fe6cf19ed5aa2d4bee400c14a42b611003583aa32d7266f4fcf934a1e9947eb22da8e6cc262960a7fbb0f1c283ceb65663a1278877a49de274cb1204cbd02897d0c76d831bf9de622eefaa3459cd3854dbe26aab4a7c24233501085e073b84a92ef40f2b7dc3af62cf25bfd1eecfeff2b3438c726ea2029d87c19f18667e99ce9155532c142edc912679b800097de41932ed1447aabd3f3ab4335d98b04170ef3f12c1efa8e36cd67b141e2b747f1eafa1088a91c775e4e10381cd47ad2b0ff58154e1da01896718151e79b9f57ca59d48bb77b78e74f77abbd0748d24e580c69f433c56e6c9d6413dbe4f12551d82cc6f2f6223c45f83ec254bdcd3df17cb4ce10659cc214bc0383b1c2a9e5b09bc235e8cd33c34e18d2189178c7fa468f66d8fc6c0a278b62de5576191c4d1e85b895cf9526aa5a01f002f5f0cfb3c800b13f0aafa42b4b32530d9b50def7d6468e8b39e6815de4440715e49e5ad6f0811254ddb8e129de9b101083f25842923e927a9a49ca5a876f95c5ffd9eff04a8118bee80047cfa01d8402d2861ec9bcde92e87337782cbde51a97ba4bf58c507122d1bc2e5e695a2a3d59097498f9c0b6de5957280150f235041f766d01f78ce1cf31cc9b8ba347518a879b566d5f3857f341a8a3fc43cedfe0a1e6a5abee6a437c538bc055fa02142a230aa3f276ae2260360a33cf819e664ed37d9e59cd7326c8bb9c3553da14f26a9fc9d5cebc7ca6b3aade3001a6fb489d289daf7211320c22de5082ebcfea7cea627b6468bd3e754c14a75129006ff75a25d961ab56115429305b01b4481d04182f71f846d56deec807f7ffac4a6703143fb35d5c08ab9f3a560e6a13df0738723b5fd9efb185a385f932a411c17aec49fabdeb0aa57b5dd4c40d04a0f1437a973a87b1d9be0014247d09d6e022062369db5b934db8db1086eeb969d22b5c5ae591abe88b7777b111e7c0109dd8b34902460efe8bcf7547df4aa6122df9bc49ebc51f167b6a671adcee07d9a151ecbd91ef6a855b35c4743c7c55962ac8ddd8186963a4300338b1f3d443aaa12a2d01972bd0b0129833262cd84a5e4f254b8609e31c1a2fde6706e55ef5fc03bdeea5808fe41768735bbe3f02f6e301ab8fc42ec6aaf0f1589c9a2fc2b1565fa9cc29fc800713c333a8dcd170ddbcf8a81523058892c0fb0e23dc41c3e8420b6a200f59a0dc4d9975a4e282a671548ac776131cad55f2c36bb75da9c71d379d8b94b63666b62d7195da7fc10854323e762d24d2a9771ed0fda18ef640c2bf8c6a94bf0146372be230a3f52b3af8ee9a2094c8c60188adaa307cf085c57b326e93aa9a48c3d1d141c2abf31fa2d1e21473578f7549dd07c5a0c422f6c9a948aa9340d87b6418a636c85cea2cd461a533daefd95ef716e5a9db0186b7c1cf5ad6f5e1ea27ab7e2327ae315ac1444aa08ec3c856f17db8afdd2bafac57426ff15a18185fcc1e64c0ab00c3b57b76df8c6bca7b58bb5224deb63f38f433c00d94ca965ea9d7117f17275c7e9ab9f0a291815b637f3b28fdeaeb62380f0bcf2addaedd2f38e7492f8f231dec7b1b26268835f33b3aff46a65ce351274d1dd44a045d7904bd6b09f8a124d177c70d9bfdb9102e4d0c565fb0cd1468714f0853ddc17cd66987d0f86cf5b2f3bb1f0fd67aac96691373fec89f941534b08549d2689d7391e838c788eee5440120d3a04a3feb3f3049024705e54a5c327f7050e47ce0e827eb30ad2001086e8633955d8bbffd81204827ddbc04686fee0890cbee8d443104fd1ff07245c7790f8dc495ff7d4bf2958b55114f8f76b6c4167709751c3fe4b588474fe42fbb19e979f1f839fa6f1a2c9d2a8034d8edc7511393980cac2c89b63756f9fa214bc7c092ade2afa9cf4e31f818b900933618117a66f609af92768364bfbd28cd01e9015248e3e51df5256226900a3721083f81c571b210a91a51a9baf1d7f47576144853638a6ec96926199331224d24ac942e8f445aa62b2ca195749df8e1cd00cff2007e34a13ea3d6e4e86c6fb6f0cbcc74324f3e3ea831dcd35c048e75363a828ad4097120e03dae4070b2610927ce2eff58f2fb4e92d269ffcbd6073343abc29f5885ce62408f12b8d6a394b82c2c623c5de0005a9d76df573e73018067ad069c0883bae9f210baba84a07958907edc97db96fbe70aa7b3864e7bfbf134e6d50d5e73b52c578afcb1f5399d4ed73e14be3c782c787ced7d195641651a1dc1a46fe4e65badf3265f6bc2ef6f2f72d290fc0b14308366a0926ce073bb4f94c5fb30165bfcf347ab591458326d5ef5e4d7fdb1eba6ac4a79aa1d97838d263c7c4ffa7d354770e76280583f932671d2dd501feb7eed37bac11a97d5e15912675d292b841299bb34e45ba3e39218ec8c34affef24e72ca1a2f6a58161d8db8c7d10d5fc5648246c2b94183eebfb343a4734e0770cad5e7fb0d2ffae2a8b97db07062e3bbbb8f881359e884ab6c940b9e2190c5e1849505dff2b1ecc6135ad5c3d3d063c1781013a93ea702c42929a8ebc83eb6cefc2e983b68c6aa3aedf0457453cc6c813ac25df6e0139aa385e2a01fcf9e56939201338fe7a4bfab7908614478bd4a7573f4eb7ed694c8d4035d859cb04621ca06bb5c5ff7f299a27501ada6cb39aa18a45630b39ac0f9c01208ce0502bca4ecaacb672e0226c4ca427a8f3db3b7e7d54c34c237951eca124262edcb4f685c75feb0087caec7cd6d61e19a5bdabea055fc3f147d6e14a625050a6961eedfb4f082e7a4ce463c200673c53393a8c45ff504c3abf78e391a92ea5dc56b79994ae6d7f0c095711a494fc8a3ff77965f734d2670fd286df283c662db864a681b9ab35e59e054a7e8b58400ec526a3be686c8b1b58ca285e79e39ff02307142dd01008691889e630e016d8d2ce0fdf1f006f2370fded88e7eb6881f70388292643a3901162dd52b109946fde40fb56112704436ee684cb02e692b649422f0cf3782d72e76549b789709bab380530301b45f5931efbd61c37d228e3eec644e61cd97559f307153d3e7bf234ea03f794c6c208ba87252da10f18f3b3ef790fde2acc45eb3c31880b5a9463b3fc2497aa99060661b14acf82111ebbcb5341d81da4bb63d0cacceb4a6522b4d0744e5a9b1c79b62fa55305e8c64d47d62208e6cb120d98b1a5be8621e58dae325c6b868fd783e2cd6a2917fbb40d617a64b5820ffc2aac36d6f1a1b9643c1982bb6264ad538d50e208b24de265c7cf5f2230f411eb7a6706644b843a6999bd679a1b3c1e17fdc91788d8efc661e15a2e646184fa676591ca57b677cb7d0b618a007e560aab3d1514f18244ce2ec5ca8f30307af2f653f129b719c19427facf92f573f99898b3fc804b98952356d9e72990851d2022ac50cc8d5babbeefcecd2882e26ef065c946039f012aec618779a58b48b6ad72d8765ae0667d715df024f4adb3fe3b9ae6ba46f4a74b52d53647aa29618dc06e3f2b7cb9217fd4fac69c9d80ceeea1c07122f15271407d3c4d1ae173b8ea829f4937da1f74f8104db9fccc031b89495ed444acc14750941d36baf27035151b8c5f611b1a47324cde320e283d83165cfc76e81d4a11c5bf0158ef8429c155b2bee772e8b28273b13697985a36ecdc0122bfd8eff4b7e5286f1b813fa442f46fbb4b33e8f00e0467dc516309f64024615917dbc8c822f9f4efe737cdeba2387b0df169c4dbd12d9558c937de866536a328e6b851cc38484e0924dad306c76afe3b43df237cb435643366db81ed455af1189438310ae21c5c463a32fcfb9bd11fcea75caed99f66fbf48f199933c6d870b08923108a09bb462d9207edd404b7074d87a70dfc7b068323aeb7ce61d2f74a782e419853936e354792215199ec62de404a89e7ed2e5e23492a7eca7d5001a7f8e9596f6c6a7d511aa348ce503a1bcb3058cae4b2a2b604ed6b363292273caeb923353de07430c1302e430c03d62af6a41932ad55bd564d97d9a7b1a541f18842459babb49bcfae1199dbb4b9a7d78824f588eade698527cfdc98edc085675c1bb55460f2c5a13f434dd86e7b976aa938549642538d8cba1edcd38eeadbe853cddd2805a2dcef9d50b302e1508d2a80699e225ebe11b32d0b411e3d2c2bba95df24de42cac701efc03220b6407261363e3bf5e626dc42a81f7342a28d5d2649d9f140be746e1f5e1931fc95532c55f24093d78194d88155e0da0764155a749844ae1422a7b99112e51a5c2492a44eddf50e90d70fecb85ad8de342bcc08eca9a6c223156c909e32ab54090e04c2961fe715e7919f002edf8fe893a1bb50d6a58a953540cadb90e6f447cbf9b16f74df9e0ea5574cfd2c0d8c5eea6ce91a79b3758f124bc982ad58475b698ea2912f45a16392d01fc9fa0b57aa02345e4f1efcf11881dd716d3ead2cf8ad74de11107b787a76a51f4de0027832a3a223d50da785984b9ecb858a102b865d536dd85fa6abbd197e5571261a7760945d3f968eddba773838deb0dba7cd6d42d558cd64f1c2924301c71e137add9b9f0eba79e9c6161d1050b2d7779a991524a0a6d766824663bbd97f3af04b324a8a5d9d65658923f29b9150e3a71218e7cb5c5fe0af81bf974aac85ae05b4fcd71ef1ef444b4f695fa1a0bfbab337d049feb28ccf8517b396b823df639adec5a92373b8fde33f6fcae9280746e3304ba48749348c316cacc8cde59740f7f11428618a00787582bd9c3ccf316d7f2611612ccb5ffefaa73195509bb52c641472bca0dfd09d493fdb3e623d4419ce40a8e6b6dd150f2af0cb650bec3f11286f66cda71a2f54a79f5216231b48 +MD = 757a852bcd6479d42065467ece8db9489f081568b54fa7d505ace1365ce78bab67351c10aa65fe0b8ce42291ec9d2132 + +Len = 39040 +Msg = 0d15d24f2d46d3d4473b68f9695da593e74120f1a1d753b484e541e154b45d35a80aa7b93657189650334029af082e5a700c902a5c731b8c6ce22d768c26b137a026440bc51695edd9ee12ac3d1bc141d9746b60616f004dd79537f15233752dfd53f06e62ea1482e95326aa9bfc27f02c60fbba3935caa0cee6a77b2b436fbec878f40a963b5bfc884ac34a5215280e71b786616b2b412c58bdc43ba1be6893087c9806e8723404bebb32b4e9cd8b43ae63557d7fbb2c9a7d02d75a3b0d2954c549248ae1f56542948ebc11e88b1a39ed4bb035fe4c5591459d28ff829677a807c6e0c0072db65d11aba789d8b99b953557deb16f4582bab976ff53fcc21d37d7db14cee582f1fe3efb3b4340bed7028f6f291a5a107cbde076a47e33f9e1aa3c7007dc005ddccc2164c268a8029626017bd79847140b41c3835ea7afa48da93f6d0213e2244170c5cf821f98ed9fa996633152bfb9f6ee688677f6f629e7dbe7ba4d9a1241e6912f25c49199e7bc34530f7f714967076dd968359492f2b8e93c40309a181a93d8694cd0e53258b36f4268091c6e8604661e0fe1a90b65c77a46e5f33b7d1912ec7a2eee44eca84d016a54167cb57eb6803d65c25ce7ecde370e92dda4c8a42a776ab266d64e3f5293d3bcf0b9a6b8e564405122d6b0eec3c89b3037fe8125a21e41bf7fc2e0858acc8689ddfac99a59ba2eba473fedd33fd4f5a549703003438b083f83312ae3bd558aa12667a78dd929108a7abe27021a0325db5b235ea6d566c719b84ab5bfb2d5e7ee1329c7fa2f59eda8037be5e51cff32b8b53f9276205684356736088232f5a657eb68b14721f3cdfc2a9fafe30d6d24269feb55dbeb04497bd71cab95055dcec3f84beede789fb96e37520d64b4f8040c604f2e3d00181dd35225275ef3b4671c80fb0525fb04b7e671bb88d0da46d9514194a504253909251e790347c4a27a49cca07e8674cbd24c2203a79047ffabdf8ae24298230f1359843fc7b73fd10d322461e267a99b0f889051f30ac3cc829d83608e61c1434657cca0fc162de62bbfcf66b832641d788203cef3a716556773733710c8c97da7073ec329cb568cd9d817d8884e6bf91423c5a22fcf07416149a48e50330164405122d1d6408269216542dfdb2386d6eb511df42feb603879075c8ed70b33a1181ebff18bdc79250a4e99a237197f5c06f552ec7c61e7e4b696e45f2cb925dc37545e4cd10702699c7b644a27981d346cf8adb49d9b65ea20dc8428d8a3a0bca6dd47092f29e7dde0d4ebfe30082706254076711affa1f5bfc2831261336be96c9fc2512eaaee28dd4275e7dcd166793ab7f54e7cf765ab9c302b4451d0500c9184174c54f3e0f29cab4c2cb25ba236b244717149ea77b4be0fc2e62fe115cd1e738d212c6a84e523f9b6f73a0fa2e595ce34020c40a0b92d45912284d083d31a536df93b78a4a77c12fc6dfd53302dec3f842a4a60a862f2bce01ed70462c78d0efffb0b8506e0afe066b8829012b6be7eaa108db45756145af702b0e57a507f8b8b5023fa7339c2493b00512f11291373eede5ca3753e9b091df797db9217f9b2591f0b3db359bf37c56cf396f52ef30697b94095c9c190b09b25154e74c3026bb1914cb88eeaad914a25ef2f866c671fefcbc0f21c88fa37b9b3b1a6e6fda39edace6dd2cc91953f1353cd618c8c76a63c3c6423363ae185bfc9f44bb16de3331dfdf6f234f87e28681c1693ce352983c734b48edf804d84f59165a69dbaca12c2466f8290c7703690ab512f1510879ed8da399cdf02471ba3308c1d718d602411d261e9a6a67450d526069c29c598dfb6567ab5fd67d63210d1f119f78dae4f51c9548f3e3b905e7db6be42d2fb642fabd1ff42025803b2859a1d03f563bb7ccc53cedc2231ce49d182ff89d85af474fd7351a9b77cd5814ab3974134b68f94c8965938192e36f719b354d9028c4f98f563f754e17c5488a745e73d7c2f337d8ebd7c0beadacf519d70429a19367d81dbca79a94bff88afe478965d9476ae2166eec0bd5edfa13fa4e25334e6038719f7cf6012bcae7adf48732b0b463208669751abb63de2b4aa78300e0f2e987446909b33f6fb3131fe1c5f2eae580b4a366b10c75e4f8e11785f83fb93bca04cf2f0557abdd12fb5f5a86327ad93ab7b7828509c1e5b88bf93a203a32957c117045d26bece06500fad34a89f72bfb7a314173cb05c2b7bc6e189d78d37c6a3de6420368593623d460d08561e64a4dacaf180f98e81850d2f4c5b284127d2efa9fa81ac5a73ad9e62fc6c942aeb09baf9f9abb2bbf632e601bb621d485f434d7eaec7b0c2d6ae1a6c64a78a4d6fb8ff3813df8dc022faaf4415e4df2949e16467683c6c47242e5a6b2c02610e5877528d2766b2266ca41000442a956c4b73dd6b10260570c6f506673cc541f50f0f5b021e864a753efab03e2f7c689acfc35f928ecea6c522cbc5687c38518bfa48c19ede887d33ffc23806be21803a3c9793e5ca7c75cfa1783f77d4a2ba5782e92c6950b472ea16c54f5ed96304d4fab8216bac789a15abc31d9b2c4da3e20fbc466c5c515221edcb9e5068881df171eeb02d1d093e20a97507dd6c7f35b20a87b4aeeba94461eb9ccde353d9f2180900e831037889760156a4437c819851d9132137e302713178ff831f829eacd12ab87381480ea2a11d2e9dd8449bf347e62833102ea50119fcbd680dde1f72a43cdcf625d210b22963c599a1ac146e1a988d9240b2da1ba1df9e25b44da36d1aa7351c238bc9e0943de341a89d363354560ce7cf59e8e7528a6a621db874c4bad38b8a855980556c124f3df4fd47677c8a6bdac609198eb363e9c64e08d8a00c28a6eb53267c38384ad2348db690351b9b73122cacb3384dd3e3fa51231829990f4de593d906b2814d34cf7cae59c3b8f1ec380929ff0ca6431fa62ef37c86e8ee4a204f5a66ebce823db5c8cfea39dbf49ef36668453348196671eb5f4be0822e63458e91e40aa753b48e79ff8ac00d0c51ec4a51cdd5bbbf8003924ecf5eed3861fc5966c8389427630498288280d4a1cccbbdccde18859b35052aaa4e29b3730becb7c1599c1e6710bd2b311ba0bb1bd837c7c1c12730174d1fbc5a11685b462bbeb08ae05fcc7984613d029a4847e23dd87118bf2844998ff84f4660446e1b871a4ca9a5a827c68799d3834aa2025ec357c2b91e44478bc439eb5683e57359e9a69406f0a0b6b6e10df79c72d373f7315cc38c26a2c354b4899872c172f267170d8f89096e01b25964b03559062216518e7a7a216b3f5c27915f82631474afd9f5451b373c9020b846073648619821e996f16955c6440be5f9476eb1f28098f907bfa2c42fec69c65d0287870c5c82c21b30420bdc59c9b568591ef3359e8a3dea0407f6719cf64b4eac105e30f69fa4c63dee8bd406fe61869c7a710456ed6f461c33162a282e0fc40aba15f5efe2573f22541dd7d312affc186b7388312a55c5100d6b811978d965266bf382ceb2a22de75b090d496d6872d5d740e8b6a7b80de77c3f9ff53e73d9070c41001b764e3992ed969def77548fdca8214d6ecd5fc6a96ad8ac47e7a3c9b58648965f98230a2df10eb04d993afc34c45edfdf0414995fbe7fcf94db32dd39bf4d6d207fe949bf4eb76dec39e361e5153fc593b59d2d10607c306681e8bc9aa19bace993689d51eedafd53c11864f8810b281246c32cc43717f844438c0fe013797c3f3c68afeab8be870a979fb074f20c2fe2214e3b832d984fb788e87d13fc2e05ace2b0269294ad349a2540eb614f88038dac06045629465c46b9c2af3c46036eb7ed09ab516aed2c8ad1c5bec780c8cb9b51b32f44146b48793ce34c63d840e0e9c53be63022c7966205f4d0af6c14b092771c6456d44d3ad87a13fd8e9a2d82c8d20e7e36a5839aab2897ca20fdb4dafc850a4a9352345becdb196ac774117dde7d4a1c6cd96962eca27453231aef7060e5458903766ad33cc8bf3a154e36f8b32cb667d8a7c113adda5414bfab0e9b47fe95caae2936c950a7cb168110e21ccd481b0884f7d2d8773afeb4fc9959823838c2b59d51df65b1e106a511a25e11b63a41a678b2e5d7d0293cdce2ca184ebbfb93f1d7d7aed1e6df3890cfecf2fef669f0eabbbe4238430fd4347a27932658afd12764a4eb327708297ec3d7e50b133cf07b5405312455558f63cb98123398bc44fe4d9fdeb3edc3a018f4498162971d08034e6efac390613512dd06dc9c028bb41f99afce79cf7a67066a2b0c280a730227aee0e43c7b9c8ee8b9573a8a1f82e93150be05afa59444ef2d66cf88f2a5a4917e4538b89e6e618e66757425750aaadd7bb3c97bf879007b46e012a8d91db7e9c6843f5e824078abec46d2948e8cc1cb207563054e906353bc831db0464202d68c853e57ae7899e854b49b00f26ef4a24aee1b763243341f973637c9c27c4f01da3080caaa808deda5a61990271a0c0afe0538f629f93d86dfe0a91bd4336412b76d4ce0ffbe1c61e703926db7f6d1ad46a204acbd1b44319d6bbccd04cf0ab02c24e9c0349c0ded23b54fbe2a6c0a3029adc5c1750f12c8d9beb507dab809833f3da094d1802a3860a398ac06e2813eb00fc45dd93e6ff299c1dff3df572934faa0b9815fd439eba6b5b55fd5c2fc7de1ae49a672102257e75c81b69a12326b65357cb165ff03adfdd3edfe1e734495c6739bc7c7eef5a0ca77e27b9352ebcf87e5304c6b6950276ee589b26a5d212f674604e6613eae754bfa4b6853801d0968961f79f97ae80000d3d1a240e85af3ca10ca2cc669167d70cd04a5610290c110318f61989a92e1bc850df7287cb988f9b736c080d8f56143d9555b45420c9e889fc92ccf311872a8e485d8aa810497fc2590ca17f213c9cc0486b288a65948d7c6150127a7405acfd6816e4f5f04c7d9402074111e375b1237ded1b1983e680590ba082764d342364448e09e7e81c19af22de4f8c62bc21d5ba6e1487f85a61be4026b57d098d1e71723572047432c472201425351b5a4f5562709d6c3f4a920a9334f3f5459b0e9355afb5b2011b1e6b8e2b7ab279eaaa312a672e2cb541a1cc996de6856dc86448835f3d972b4f8819b196b87b0ad7b2e756e43f4016ca0172b73405940eafc00f7fb6822a6f5a81fb5ee856f53acc09e69c6a594cc06e41ab7129d9a784bba2669f681bc229a69c9eda82deb7b6120fbd5f5c04b94e88d2c55ba1cb468c767bec86c6731506be5862b918d848d96444ea044bba0c2db4456edb5e52e7626abcefba641099732c15e57efcac1f211d39fb4fbbf1cbca7b19f674921900c2f3060eaec38ca5eb5a8595a0b0f2b129b76f4f862f345eb147b0fabbff86391ab9b7b7d8674fe0fbd40801a2d824855fbd55754c080a6b7ea4baea25f912d6d6397289cbb1c2c111231da809d4ba324fb97cfb05f8dc489f0c88532701579071cca6e2fd459ddcc7c246f74a293c1e5616464f4854329c7ef9b9b443cabccc9a1dc551e195298a8c3c148df85822c02f6e61f097bca5cdbb06bf8c1097cb01ab976e551d230e50daeaf6ca78f3f6be182c207d58949e52bf8e1a58f20b0ac622b4027b0471a4c630797e3b605f306eccda32541f6e84d2192a5a998c96e490ac0e12224c03956129420b6f232c585899e2f7f350cd11a23455e0cc24bde0d784002de9384b48a821ef3ec455dde7122be0e209a1129d79bd8b4d7f7f0298215734a64e7dcb4711b6cb78d96cd65521ef6e90d564e1b09f01451111efe7730492062bb06106191464815a2cccb83aee50c684f530bcc3a8ac1dac21fbeef9e7d11f1ebda68e2756978b532d19f600fdfc832ef779067f1d1a7faf2e278ba54170ca0fd492b60a2eec53e458c9123fc74f4f0f5ac2412b72d8d57aa4e74ffda81da17f83da302a23bf759e3e5e9f5fe0c564967d910f513063c99f14df9e7b92143fde49d16f1fbbad6ad15c4eefd9c0fb8e64fe69d3a8dc47d69d0c7509a78610efaca51cd5438d129e3e211e9645ee5e06eb4ba1006adcf166f4ea2c23f9fa805b8b1401054deeabaa253b42251ccf6968a9f3fb484fc8fcf5273c795ffb65deedca1542719776c4f936f96e1ed6faaa4e2175cd0d9016d72ba471e110146ea9211a27459ca8bbfb15d3e9d6e5fce6ad11d24f9ab3044cfc551d38f806ed6b6b9fdbd88ef90a04ba8a9c8b210d0719ce4e4ceff8eaf4e1e92bc1e03286def292a48f97931924077fc1f16be1168e1aaa6de1e54c17ea6c39fa63060532718abaf9b5f2d67f9f2ad74662fa7b74ea5fadfb41be18cc6d424b4b5129047c3d9a40e9ef58dd9ec3f55d9271b574bab45f6560dce8e37af61ab9b91cb794c6aba7c10f8c581cf94add5f309e3b414a64a04d5923d440960d4bf1be36305ac44449b7d51d7f29018c6968ab58ea85c683b8e22eb72e94b02b5c7fb53e31bad78fe6a1d5331c665a1120066d2241a6919a0fb06bf756646bc8d2d048852a2992f714fb8a4dde79657187c4e09aef185df02b349b64ca43fb7e358fe2bb884b69023b315ece33b6b6160700c023217f6e5e71eb379018a811a3fb0b1e31ea84dc49efffdd449ac2be872456664bb730451daa40cb09cff530e299de4598bf6a5f26a99380319212013d76425d84eedf94c60ad1b0323edfcbb2a876135075608430deb8e235b81900b16331105f56d1bfd03a1a918a03bc548c9d6ee1e9ab0bcdf115bc7d915b6c4f7b71cf194b7dbb48d4ae87e9a1ad1f6de8ff254bc4dec0aedfe53aacf51a7040042868e2c9d1f0a23bdea622f9a97d7a403445ab827f23a955a3a00ad163c984e40d9b176ad2265e8e50f1d7f2775afc3ad32caba30aa9401af78911a +MD = 46f2afc4632e2121e7ab844474534f44c4ad9a13a0b59eb86918aea1e16bb13f8e753dffbef875bc7818244a84e4e33f + +Len = 39832 +Msg = 60615f98c276b805508690a34676899bf8d93a365864d5f2bea207d5e9e92001418d74895e530183ce29525e1314a376ec6945e6d640449dd12648b56712b900eb9b26e3ff67e86758e7028dc6414ce26e8ed1545a46754435f8dbdc4f3f85a3e8f13d4eaa99b4da77286ad765e7cd0707b0a527ef5eaf0d708288f3a958cd13bef9817469d1af03b25450e5faed6e0c3e378a089a703c200c2b19a27b44d977f819bafa43f71f0b91d37d5e8c3b77199c8c489f656462a6915a5490cfedf1f81bbbaf8b41f44d199c0db9eb24b93058a815a79357226ac785790366ac3a5dbeb14629cd69ae81565c6bcb34c94fe1efea3b6f8d78939caa72efeccb1b1364f04222f068c50e03e958537de083e5d106ea666734d19d3f78df24d868226050b654b6cc055dfc1afb182e95985a6349c631ff583169299d5855808ee5cc096739716c854c37610fb42565dc0357b19156466c0a2b4920fc735b6bd8e91ef7f2a120abe2e45d232a3b065e1aca81b7f1dfb11745cb7768a5f1794d7c1c22103816eadcac76d72cb3b943831794e15eb189fb66d1b9fdebe0f9378e4327df3d83bf5565aba9ab62f255653b9a0a7d8c187babc3759ce38ff4b31e96f5b25d6719c4ebafa726e3af2f38f3ed6dd45f2a6fde4995fa1c2f3e2b48b5cd5a64a574434e3422689487fab189750356998f21fed95d4429e2ebdfcbe0849c39e6be4e4985b726b59c9d2bc17174e41e0113570d957038c8961e5a1da214695cdfb0db7390fc2458e62f29a71877f88db6f5b6e43a09d89fe0d19769b7ec9d89f8840509978b82171944deaba506a76a5d3d25cbefb18e78660b7df74795a189d941b252c4edaabbdde5311541a9597fa1f18b09dcefc219d3d4f60e7995dc2429efcc973da9020cdc190a2c13e97692271bd2e72a4bda4bcd34eaf77576b52191973a202a47f4d1bbe85139444d666c9ac2e1ad014d3fd6fc343ffb64bf964ab83fe435b44fe7d4255aee84fb5e91d5a0efa0a3887e59820adbde606ef9e66547f2b21e034a43dbc078ca5561a26094e1a9f710e86590179c32af6ebaab0c3be5b58c223ec06faf3449cbf49ea3397307f8ce3e488b4d5c5d3f9a6f715d72943b925a8b8d37d5182ad5daa8d9e98538b7e40d73d176f61af20c88a9ba987f38f090049f1939dcdd4a25e0bb3afaadac9b769cf8abb0f51906a15f65bee29beeadb772a70a4decc83b40c373ea6017975bb56315fdc1b0213f0409eba4c62e7f1a108dea88fc6d9fa62e6d1911a32dc19faa4b11ef2f91fa453f6c8395c9a0b4dea23bb2baccc72b32f8c4f4d64956f10e5b3a36ab84fe6bc15a7275b9755a53a2766545c847633488a5b24e62dcf9f150d219ca5647613e5b5b02083751c2240d92f4ecdbf5a7824f3d1e6ddde480870e17d1161b012139ba4c038638e541f1c800ceef1b5dfcdc30c9ef9a6ee7527cf03048622039a62587345f35e3ba40807ac8dd96af07cb0bd3500f1d3d6fd7979d2768f68d7758c9691cfd5e6157259accf00729bf7b7ad8dfda653e730377a2be0418198b449fef090bc548d9445907668236ef75427308fd70d945382c9a63facd3f144226e35d0e099f3d740a458fef855131f7e31c66d4185379b370a8a4fa8cc72fd9a78cdc211f73835a3050fa100240376de6dfb90ddcbb240d5a092b654897b2784f0234ea532963b23ee10f7000eb4900d423c84fc4f98c6d6f25c0e40a97e549a5ad2d10afa925a4bd6297b8873aafd7334f5c43d7f6f9fc39652d1fd9af107131f68f3c3bdb115a343a5b8fa015b01c8ecd3d901d98b5e23f2f39bdbdc77a1b7b432115fea86ff92bd1209e516496f46a0433df9ec8074609ecab67bec76c6d0cfdac4400f686ac2a8fb18ca40fa789515c06d8636f365020054cc4e5972e8f6b8df87049af9f99badcd502a1fe2c03ca3d7d2273738b2a0be0e47d392008aa2059cd42e2b902e8622053a84f196c8a5e0f6266d6be4ef952e73b39c24842e6b4cbf362d2fef7c2abc3f425b649b144933a7b4b9536c7e87e8118a189f8236aae4a31772164c64f1c2d8022de74415cf426917ab7c53d1c1615445c9519f45f963d5129d7d5b6b63dc6bf46d08365f8063c6b9a4452fac0a20d8813ef91feecf50e1922fd38102096f7783a935f654153e2d35445c444faaad0aa6e9d4a863a512452079b741db4b02675a52fee895e62818f50c10564f2b7c67214a92ad77135e7c483b773229b12bd7c30ad1a1977bb826835c0fca2d25057aaae1a1b38b826bf363c5b1c6afc4422568314ca5cb6e74b26ac4a9145bffeeb18e3f904f037ae1471da8e573c00cfbfcb456ce69b416d46915c68ac97e348ea865c4dcc4817544e3e06590cdfce3afaa21ebd551e40d5da70ee2135de66b6bcbac11e5d8880a0d56368c2239c900d3da5b810012ddca86e8d097e146370d0c97cb9759ef8991b12a8a7d485bb6bd1ef9ab86cd1103c6c6cae5685326e271f7a96ec5977df8b4c6bd76b941884890d774ac9daad0e8aac3b9c7c407546b62a35ce03d2d0877dbc49b65e0cc53e12493f7d91617d71ebed431f24b7c635437963eea6e8913698f1150f264375332e0daefab809297f89b9ecfef6f10e81f7956dbc7ca4a335047535a86b410ea903e22c8be7da9a818c979e0399f63373f905b9012e0deccce8d01349d60f79e9bc4f21f6c6ddb6be1c10c1f4b6ce1f537251b184632b55426c8815bc0eb49f3b7fddf504fc1966805fabbd9af482b8698902bc0fc407c6e1ba27a5c8bc3867e67412117d3296930d80f0fabdfc18e8fc679f4168f9a828eff7352a3488a4b834c579db290f5d23afa567e125759b955633b0aa58a91761b54e380cc919ff7c6b9797bcd03c7500abf799d8990810a9bd16be5ea77c5a5b7be5bab24f18519ad415f61d3960e6104c9d0d48e35d810b7a3850c51d1c7bfc89e442868e2ca2fab7641d642d24b93dd9bf4b9ac91bf5a3d5c0ee47822e812e267459ef4dfefb845caf94fb7430f56d9987dc3414eb755915d6204c9d5d75d89bbd8555563663200a1ce448d62ba28ad51b47808c74081584a46f3c374e5ee231e651206f7be3b60bd394b51bbdc97bd6a314e4f85fb6bf684f627f18ac44332d1742b96175822ea5fd2ca80a8f7128e148ccca2153873f0a02827d081d30b5da7ae286f3cd487021c2348b6c49a2794131f699d0f9847db2e3559fcf49284f7f34b8f0ef2b3d64c74935c5099364563c881ab9cbf9b462a81a654b34da37e963704c601b366af3debbb7bea913c0a71c72c092dafa20d433d03aea0175626ccf54273c4197d603b03f40de1474bd542719718cc7a4cebc9c2d5ae5fcc4b3be0b08d0ed27f6897d83fe5a8d115c6445a6a5b40f59a0c8032c584fa2ee6f31c85fb5cfdc96f98c4aa0208c336a74bc63e03e12835796168f287aa18b9e1ee4721383ad70554be6504fcc5e38e563cd941f0a12508a2dbe4adbbad607d678d5a56e99f1102e929f79d72a59044bd19fc1a9343cdeba0eca1b8c41787d5c250b47b9202326e777c0ac826304ff63683bd3c8e21895aee141e982360f57f9ce8e413d3fcc1949a150d1969fe892f7cda8b0c13d2fde304d2c9e06c221fc751b677c3f1f73511cb957cf5c058b23cdabee42df6c081f06fa9221600d38d498b39ddf0ae7a0362866de901cbe771cafa8166f69972bc1f9917b5ad83edb472a3f3851e5c0db303451ebfb1ef134e3636c2621a6e8212dd1baf031b67e93bdf26641bc17d2ada70a2189f8a9c748e2b1a0293fdf8571ca561cf78e41f4e69eb9d1bf07e9449d03707fbd6f06683d7f63ec24b15d96a3ff50609b59c2c95e524727ba1aa33f34ac2f1391487efb9b243ff7215f65444036862de17a8124834164113bdd8deaf80a0f840c6b57a9e8380f6a273142b6cfd6c12cd3d9c62edcd4d8374838ee6e7385d77b36c1d999ae2399ec3f0f3a16d847c905785fd90ef1716a40ec1310f22d86519f18304ef4744ca62670e19789e3f0665fd8f201ed4a82e4d52c56399fad734399b9a1fce1c31dfdc0c28f9f39793b60e2fc7b88f3706d0c9d12e9b29d7bb6761022fd2c8922fd68613d019b4e218f7e37ebe3b447ea9cab41a5b4c3131fb5b2ad592a27131954adb1ea1fd2f064548906ad10ce1240758868ed9fb32921dabe18681232a8308b955ad0d28e45c9f34af64bec1d7bfb626dbbf393cc090a8c64f8569b9870f008e801f7001578d8d286b0cc5eebaba2c920e1be7654d862326af52caf9f92e0346e516892b1af195a08dc384d7ecabd146a83563294c1af3699b8f13591378977eeef2a71a71215f3972198a320ffd4aa1349c4add4ea7bffb9e9ad15b486713a3286458342cb5306fa27f347167270f3e3da0fd15c7b4df59230693751a822e300bcc2b2c9ff5bf9fa975121ab4c1857a2df3f84739dae80eb332c83afc424dc2139a8e583d9b6365f19ba1926b5553e17ff5db0627725088e9dfee11803fd8b5da6ff04b97eeb23f1543717ced4ae100be3703c72333af54114e739d28d375a7babd0f6b419822a77f1cf03edd2ab3546338010e8f675afcd40f073268959b045ef22a5b9d004b2bb978bc5c9d6d416909696140feb5f9efacb20775c1fecf4811bfdf813cbf82283ef7145aa09b219b1b4b8302e377f2b8f5a802dbc797790f8d669d70833e6e498a18c6cda93cca77036f14c8c055dbc5698167d8ebc82eb72c96f2ae230565fc254e120a09baa2996c44650727b82bb152aec501913966db79c16d9e7e9d1fbc8b07a4a4349d505eb05c12428c1758e95bb0a8ca6a43a7e8ef667cd6087de20745f5ed30cc6d4a537a269b0f600be9f9ef1761b7d97f686c07f68ec943106368c0695a1433a2f6f424246dd2460e654f8743ae3e61552ed16e0231fcd10d0a5d950289e30cd6fcdd48e6191f90874176aed5ece2946d71b55c1a04f514cc4d623e21eb01aa51b26b42ec1b5be21f04fbd04e8c38d510c7948c9e6626a0c6a2f32677fc14bedbbe1abc96e32bcd2e363b960e2a95b5e796db6a1fd425d784b19cd8553b809cbd868810771ee3844d4bd26aa536adc97a76066f1edd575baeefdbee4a37d9d67f922fe92d1d37d9e4bc4cc8944ed55221dbb2160be05f9f7db41cb2d76f84feaa677e90f96c8d209d0e073a6bc1a112763e4af9679b8305a9b4fbd08d511667c67cf0c29c9b47eadec79e2a8c3d957cf0245d83c26d86308b58d5b1cc7b02c44c5922d867181cab126f7e23861126e41814464facb4cdb2cb1656f1254bde76b472815ce9616fe3e07c33bfe9fad9fa6684b1a7772fcddec183ebf918420e01876fa8caa405b627b1643b5a18492322640c1c35c22d0b470717f154260c15f74d86e5ac278383d91dbe017ca19aa6fe8900e2750e4b0a7e1449237cdef88aba7f7ed46bd4595d9a7de022b2065db9d15e0990efcbf84fd671adeedd93a5e0ed85be01943b05a7ce6a812b74c700e06d4b9cc4007bb34ff2979cb010e4729ce308aad9bfec06f6f76c07684f5422cf04ea10e841ae0a8f550ecc1391620d334d60ebe94937dbcfa7eae985ac4e41ba4ab22c8a4dd37c92703f8285f96cd4288f26f79ccadef2a6426fbdf01615dc56a12c46066f7c77ddc6b27683939546012ae33480bf21f9ff7982eb24073b51089ab0e3f931198ad5db000e990a4bf131930e492180a1404f9f9cf7be0a2f4e64b9f88cdf3d2b342f3f90b142b821645e7a009bebc9ed642b37466a1aa98232ef616ba724de31f22e46ed14fd4795fddc2272b36bf566e3f6d2e7c8c63fa4ad0d3372d976aebe4377839d9035131a4c3f3edd161e9d9e3e56f5298a3d6736fb32a2b68a213930b67f97fab996b54ecdfc21983a701d03d1b00064350caa99cc1431af3fd0e839b9cad6bd077ea87401976d3ca70d1e285c8697204fb0644d8e1652b570e23629cbdde22cf079674a75959452c241fb8c2d6f3c0630a53ed2cfbda861b3f1cd917b2d2cf30b037c32987b194332bb4f9fc2ce315e8e6794c9ef8e854c7f7c08f1263d1987cd9941cce8bc7eb67ee584e3bb2849c1cf7400839bed8bde49dd62d98b825a53aec76259f4de3704fd3d25f88501d7a86a570c90236f2e8f99b275aae99151ff250a589a3b54d4b7343ecd3eaeef5daaf59d03903487dfe8e587bbf5eeee82e2d6de9eee2ac4ca55ba76c536a7455e21d7929fe43ddc3262b3c9903af9fe7f971ab0afd651829a690651b860fca85ba5a6f43c0cadb0a8959af4bcfaa945aa94972cf5d33e32d7599e7c115e1d9cd8beea1e628a12c9b4e9f1957cb55b589653a2a01b654f39d3bfe9326a7e887757d5f79daddcfb6be9e86e2869ebaebbb56ce3b68b2d132c41f48d311e52dbdc4b7375de6885c63baa19572a0f1e11c39a48c0dccf7b186e94afe0e4c76b7640362fdb7d4d15119d97e54326d6bd0314c76fc08f52dfcd953e3a8ab9d048e627ba53aee6a5fb5c2615e4b88b5b591133af4a795abfdbb124b13ce14cd34bba171a9756a71db90459b6803dd3f762ca84b48141ab50ff5191902f9b0a4b0450730953693b0ecea8acfc5039ad457a7dac997cb01dc0ab2d605d7b0e7e920347eff9206d1f13bcc79459cd3253c000c90fa0c55b0e896fa3157bb7c21662b91ed25c86b8cfa703dfa4416fce83f1863b228cc3991a15cd61256d5e4c6e17a633beb5eef2c943246f5155b0549a448b2279902ff0ace044d614b4e703e23b5b252997d1a198729ee52019276b2353703d995d43085393668067e4da8f2f4838619774c73bb9bfe3df94ee4d88ab88d5daf666a5369a8992ee937fb15481b8ce878ccf4827b98593bd24478b139f6f4c99153edf01ee4d5a7f2be7f3ea96279df57e29ccfbf45e1f1c62d778c27b7124d67a385900cb593db0a5a02ab7e8ff2749eff6de3f06b3f66bb4f08eebcc38ff4199f59ba9be27bd31755ace52d6b9eae356c8f4577d21ba29af4546160e114c3908f92f63335349602f5a47320be26950571297dba42 +MD = 9a7e7f53e213c84fee6961a65064a3c426c68ce6432266158c60f7a3f87975386301ed4c89d222eb55ef6efd7dd23ec9 + +Len = 40624 +Msg = 8cb8a7327c0f73a1f97bc61f5a07542091f034f10afbe4a7d70c8e560bf58983638c23db2c009e25606d787513adf0a20d72c5fbb99141363ea176a9ebc5c8bdd8c6ab9fca65ae3858efb9604c11924e4ceea653ba6f07c9d8dab14630a71115338fc8e620e5acc427290f48cfdb450c958d6063d53c3e47eee0c693a2426e73bb0e0018f4299fb01644059562b20ec42f767a92d4a1ee9ac8db3dfa083fe6bfb96cde9d0fd88fe46d6820afce3ef75e63d37c477d4520a9aef29fe12b4581e175d0e7dd399b844774bceafeda2807c379c9efec9ad1dc5ce84d72b2d4fd48c13763a541391a87c37369eaeb501846d9b9825ae8f1ec289bbd1541d4c90e4247474c9f2fd9fc9f3fb196a8dcf6b5bd896a2645a34b3f0e4e777291afd322785cecb45d10dfead5a4776cad3a96a873bcd6dc38856f71955d5c8becabb9def0e670c3684d148b30d80d13806ef698705843cdbcf6272bc5b0b589d93045ecb4ce19a0474c4088b8c4bbb2a9dedf2ebd46fa21585e3915a730c993e1a63df4ccfd307482772b887550c972b1f41812616f43ff95256ed642c3e2d28a756a9d3e5afc66a2359c3470657e7a1f176beb64ba658ffab38e179f52466e5f05949014ccc79f2eed5d34b0e923f37bae9e62cf0eaafb0f70617fc4c63e8ee5bf8275563dd747ae09342f3dc600044e237a1ea95558685cc5aeb7bb05125aa609fef30a947685aaf0eacd20e25dd61eddc7c8fa76b8006a183f668cf90afb294cceb23ab9ea81ab0a47b76027829076444d07cb5912ebc0d2da353d886e99f6f1bb5bed937b6438bf1295057bb65bdbc0d38423e6ae51e65c48ccd89c855b965e8d962c0c7356da77150e18c8435fd7b923e60a05d359651c51d2641c986a90fd0c0afe0b187e189a16cb9ff56fc3f19703d6889ecb2bc47cbcf0eaf0efee6c3500606b79b4057a90de74a5ea83b0b2c23cfca699dcf08be353cd7100d20eb36d303f7b3c8d1288c135b02f8fc64da0a396ff6bde4fd043b9dc12013489f2ec0f6550373debcecb96e22747cc82c345a0d888e0556cf273652066a2745bc39f82673ba6641861ca75af82f489fd392922cc3e0be77a7fa351e7725da892a9542efea7d09a5bf20dc762693fae81d8d29238caf67ac39e5be4f9dd39b874cb947bf23cbec5fba91df5c4832e2354c7ca56e5d3a9f78d7824861d503f8c4a52e6d10aa377ce41af81659d79ccd0be2f99d89b022a472135859f1d73760c5b65d3980f84039e752cc181b5f21e9d0938c57e21ff8350c7fc0797bfede621f12de238ca866b1cdf4766b0d3972e737b09d8b24171bcfcc6f530d7cc6797b152d29b190052b62fc629f759c11003385ecb5adbc100db3268498bc50b8892a5c77b86a37c90ecc174fafce64504a5d6f8a5d1606a55eadaf3209dca46f9dee698502c3f05e716b92fe1febe281c1d3392c0c7ab0418f0dbb0a1f04f4361835b0d7a145362ff3bfe4006844931ff72397344c32357f1f61fe7f50bbacb698aeb6e21c6495c81637aef9216ef2a55accee5584e302a86038de0437674a6b9fa80026ccb87bb15961483ad3c18d9c8d4dc2e24ef3a47821f0de2b4bae69cf8db011284aa774762ddb4467e7f2c08fef04a97d12ea9748b528736705e7775ce3555e691eb7fc7113f427e2e66937d9f0b00688793e67a49a5e3259eea8ef8e51166c6ba170905c9c5a774e47ab501542ae6e96da75721661f09f567e695efe2761bfa27b57cc73376c970c941fb5bc557e462acf1653087c9e2eef2dbf320706d5cc9014d40d6f75a91b90545cb559999e21a6bf9787156a9545a6851105335fd117d7067bdfabc79e799bf0e8eb578f9c85ad348f9aa7bca487ff0ce5452d92e225c9b8c5bfa2adcb4562022ad440c7d7e6a0c654ea49e31a7a7b3dc27e4050878afab4382a0ea8ade394f0b8ecafa2fec923dd8e12766e85718d802f1d06194f9bdc7159ab2a48b4f8a74519b0fed17fb1a8f2a19fb7bf6421a88c91adf94d98ed018890bf9ffe8ed91b97a3bda8b3c914929e25de786634ef7ebb70ad947df202ec6273d3da4a8a2964410d5f47ca69768338817b42f3765f52856298621af9520f87798463bd355e03d9bd326695df6bfd7a5ae2a1d7b6e5e682ee0adcb50d7eed60285db6b72eeb8cda19c36fa6a94963bc08a11f9375178d2c59518eccacce0894f6ac6dc8b54661cac98ecd6d45b35876113316a71f68c8fa5b18d2d265e3e39e6b0cd3729713251432f12a6a332e3e410b152193345e1c6569dd5366b744f0d50c0b924512c6394efc96e11df00ea7a56cc3bad8426c1a05ec0b8aea1f55c2e1400514a0d6d430f36cecac091af9070baccb5cf6d8172454781fd3dd1cbadc4bada5f52641c18e7a3a6ec5ac1261eeec5198827f43e3ddc994a6e8c02dd8af6cbb5a9e35f222b47bbb99c88754ddb1efd1b7c5c24456a8dda82d1433c133beccef9f9a60465c4550870a4f2b70c1126ec3a5817027e41829490ef0a875507cf4b0d15435dce2b391131cb3f8e4b062e1adfe6ff98d10ae04ede9087ec8b38c7ca5bc5617245a71c5e65d81803f2045f0e70ecbded270cd291d37b65729d14fbd44ad3a849b38126787594241ce951e0505733f80966907ee4d77a4a2273e494f04205c2ecfe027ee6c7c70ce31835da68fa8359f578de0ccf5253df02f6efb9a7ab255463106f4d30c538776068fa75dfc3a488b8433ea5daaccfcb1d0c7f9380eef909b4cf13badfd6b10e9abfe6d83b195d2c5ab1f8718e4eb6b6789eda4a03714a86e92535ee7a61f8799907432c076377ede4a95397729ed04a1d954905b89ddf760af91c1089d0d75f65265798c80bbb755d12983f0f05e52c13d714ec28da827f1d321149948a136807066b450878ee69cdd61093ebecbc07624e8328da91f9492cba5cc124f7773d868dc65b4e12db743cdc00b890b91e8113e0dee156280d7d3e78459fc07fca86eaa5b2012341493cb30cb3d986d6d3422c776c3e250986c35c54140cf18ad3ea3b35755f0e6dff69394e701c53a9a3f3b8fa7668ce9a2cc28d36102f3e805b128224589e97fec6a4d78a7ea9819c563cbc514487d945c723d90682312fc92aa6c75ca3e6465c669594a826a99815b3c442641ec2cf711e8d48acb2394ccd084d10c49e5ea4efa7e37890b0441e7e8334511b4c413785faa9e311e8701ef5bdaf6744912f382051368b2b64a19d3e8e33f25e152d99eb231fb11b6cfd2ca71075d3c4c3808a552b38d65f89e99cbd9c6a2c15c3ae7d0a6196bab38509fe4ccb475d2c7d7a23f7fe8f60156943a463758107289ceb6c4a7cb707c27dbc1d4db4cc0b6407458a6f92e331364ad83c98e01f8b7fe90dee133b299f2e9a3d101094ade755a9084724afdd52a875d0ecc4a7ecc102f13b89cd67948be125b55fff3292f9e5abece37d1d24ca5532523c4f9092b09afe9ec7e0c8a2d1c1654b9381582148fd5418e5e4a361a123c986b5a164b6602d565e2fb526f97bb8a42833fdcc05dc86edb4d5c00b3ce0fc8195de22ea03daa442a249b2494190ad2873c7dd57e4bd66beea3c781b5c8ec7a3a73f3bec1e25e80a929e40f92319873b55d888c167f4870fe0a1769c6ab36c77e3615230b249e0f657b5c8fd461d3023f6ed66d23587cf28be8c21550d58d24572cbd180654f734e1916b01e54a48f287d8edf52f7812850ad85e110ee83e3557c051ea2df3e8b59ff4a6124f2b78c9413435b0854e779d1d5151e93b53f86ee2898a35ec91e0f6032d844d7ca5c0faddf9542bdf5c3aaf15dc340a70991a35a9e0bc67ecbf8e6abda48c0fe849d00bd0a0bfc39811ca2f96d18af14928323df07e6f1c88cd3fa821d233c63c882470abb2ef144a1fb4b312f9bd4a2f91cecc68bb28b06b5b7322d26f022cc3c12cddd1b848aa6fd678ce0c9d41519e664e75751f6fcfeedac76f31b37d9028b55787d52972d263c684d4f634bdb400064fcd9823aab79ddbbae1e2581c9cd5b53313487ef438e060676c726898fe0f02314964507023e2debc2f46b545af45515e148e21235a4054af08e391597c15da915d4c3e3681784459bbe163bf44120a26e028c8a6931de3ba1ecc5775dabf0ffe9dc235945ca8acf1fc34dbbff7a6402c2aaaddf49fc3ce2722bf2384766512c76f68eee0220e893374d395ee368cb3ec3886c973ccfc5454b92e7dfbfb92738a6692c2c05e14699cca201ab08d3fb5d5be3f23ca970216e1568cdf42c6e1b2c5f7f249ab7d54be7c40bcf2ad7839c6771056755faa8f965b6f6cbfff64bd40f8b7e9fc080c3a08709d0c864b63f5765ec34f26b963ff53018840a898419fbe911afc427c975ed81813916e00ed0d45eb6b9bb05e5fdbcd92159b219409f37c3d95abc56f8b1d9db168ee12648ffba5ab6dcebab4faaf768bbbfea3891a731a4cbc7aed577400c9faf1650bfca92b161d4e4aae63c0d4de3cdfcda6ddff79094cf3dc32dacea2fd5331a8c32fe51637cf81b1f3c14ef67543f59ab409359fd9bcd0623e50176ea838ce2bd074b0675b20ac773373f18ecc2f91e8539139220c2ad68f585dcaee4b3a1b609c71877920cf231cd5f25508536e2938fe1c86da01057ac6296a758c66c5ade9bf9cf6d609098a1563b2f5fdab7e400f2bf1ab1268eb319919fc93d37b79fa19925d7b08748e55e3653c30c924de6acd55c72255942aaf9aa28aa25e09b58492cd49808b03cbfb2942f4b205600d1e0613e3693e2362292d7b9b2d868206d1c7b8c7a3d837310e398582d64cdd98be4beefd0c16872042e3edb491d794ec663afd8e516a7f5be3a6c55d39da0dffd0013f7a67794fc39130715d7bdb82e4c65ef3d415dc5cab2ff35aea396761b0f7c88dc227f0edea8895bf0c481cfc7e56c6445f6d884fbd57a1eec0716f893aa9f4728aaa07d2038da62f3782e66217abe35776c508d8e0ef34c9666e4ce51b4b27562a8a189c8d34c43a65c8f2445f4a48b5b0b8c878e44b1ea3427c99f5d17fd3d13834bdbe060292791d66bb23a39668e7a3c561b0061fd1e4eb48d13bdb9c8c5c2a3661b6fc6b7353d4f89b708334c655b6574f1ee4c1f106d74f8d37b845b35f770baf17eef3f963130b2dcb8c89e3987f0afb05fed5fea18cfd1879f5efdb63b520e0314c20871f5dfaec951e2a3318443cf005c2c04d1d82de2d72f31f87014b12bfc39275cef12c64525db68a476dcc89c8becf158ef34f6f16935e4928a0df5da82f50681380f4b3f995f42e92f16e5def61724a16cb492c7e8b85f142cab86e13d5147c07374d863cce358ba85bb045cece5ad2870e06a2cfac18ac68078cc08d754d361c8cad47a6772925fa0528cdf135f74352241e4e847574defabfb3019f50790ac6097a74c1111d81fa763e52f138c6210aa5e69c2788290d8d8bc18da427067e96366b8a173ca1244c377761495755d0031bf6283354a3bca2d44ed156399405ff9bc714134a428141b15a95641204e4edfed35f325b8360bd21a1890038a0457482339f4fda802d8d8c5e5bcbe971e43db6f4cdaf1d369e3f0c6ff14c84a99197b22788176dc88d7210f930fb5e2b3254ecd0d0041a4bc9cafd10c685ae0e9edb84297b1464aa35b1f7c1917cd07f73c5f90e22dbb31187d36c2a6566257db1b2709fc4c16fa39aaf993e09caf10d1d2373f32280a8463cdae2134a488b456eaf201101a8df2330dd8dc50660204282dfd6264bad4a587d53e77201b730144a43eb23be2543c7acce4e0d13c6fece696da82e2abc29a6add0f4ad183cc468c8f36a3e66e12e0f52f4426cce89ecff255f62613c37b6df62c4925afa43a8916f3ff5c778470e48b7e2137a73036b534b278d65fc9a826110c138d224566d4ca1ac46558ed16522600a299ccdde0a794f5881a2e87f0cba5c3950c9230f72e904bab47ef71ab31adfef0d6a1b743abfa65507be8c3fc66999af829672b96a050cddc89a6d7d88a07c03276908508cc4e4bf580f54673fed5d9646d09ffeb30f2e980b3e4e944641e8e91ff0011d60f78efa2b2bed8fe9c41c8005ee1749de85ee7bf4d106d97c7d9b035fb5921567e60997d97a9404547c5aff586555155d07c0fc0e0942c7bbc206d45f1027e2f20ef91aeb91f48ef0749d56a6dce60baef35a8acf3d7ee9649db0fea6a65f00afd0b1e5ea089b6a5e4b5838899b567754d6ffcaa0f417a9079f2dc4bede93e8f1e9d8ab5d24d530ee7f1017794702f2df21351e3bb3a9a12514e1d9102f632658a8e1bdad9d5e7d317e5975ee669808be70af07f7f2a14c4dbd519e331f4923549c41af63d873a9b7d7a8d6515062137333a21a5e379b14d1e701a6a034b27a66429cf3084cd130f1f962ab6abb1dcd8de8d2c7d708f39562208664dff64b961e2a481b1380e3cd60722b77630d17716f1ea5830add57486f08346b5aea5100dcb1c79a0e0b17b993d077cd02acdbb9b7338eee623b12a868fcb02ca9677f353287b002605209900c72bc1ea230f700c6c6136c6588c22fd07c6e2b341432bdb00a85c6b2ec25eb2af78ceeca2fe5e14e44c78f9d6cf2594615e2e99376f814c5b8bd596e3ff9158fdd5eaff30024c59e4e1fca725e0fbf3a47a2da3fe65ba4f410cb5d0ad3ffc99b7295f4b54830483730809f6cb296cc1d80128fa208ba18bbb13424012ea651ee75e73f796e94c3b9aa9e911521040a605dd67c5254bfda9d088c60f9c68958f945b6f2b7e9ded2960ace21e42ff3e4c34f5322d930c955089538764d3225493c7089b119505aff4cdf93d46215d2f586d31d15af4353229ec5cce683e7e69d2874d3ece628a5944e97942b07992db75b6798b73cf309cdb048ce24265e59ef5dc12a18d6d94b5c3bd123885d1060a4919b5aaa1ad649b0fd6c90d1bd0c0b9a4ce3f0d743f8c891750ad69ecb221847c9dcd740b1539f76d6cfc951b0875838666bcc8ab5fd89ee8aa331b0ea34b10b74aa932da8f17779ccd0ec369946ec444ab711a5b55e2bcdfd48a97122cec78a229322b35a366e54501e5df2efc114485a6474dacaa11aaa3d59c2521d56c82e4414ea945da8e070f116b3191c9c8caf25d24a8c5e5cc32ddb54f0c632733f7259be6f231bbf7a5a3048600bb82fa2033daf272cf8e7d1a357d8d96ffa9a99e0f +MD = be87bf6e103f66527b12a010e50eb157524c76f0fa7118ef8f0659f3a8734008f973bdadfcff5d84cfeef0914245f47a + +Len = 41416 +Msg = 7eb077392096a265d703e730e8b65d65c5eaa03f8fcd777bd933b4b0af8c5ce3d613085656498ba236a2d505877e18fda45a2916b74828007f9c63e451e978f85d2cba523346d6fa86b0b7422f6aa65a7434b61f8b015f345aa9695481de0be69a6155d2bf75cb944d95538fe86251a3c0df100112e0643ef1c08da746535fd5161ba08103bfb29916b87192bb4e5f010dc3ff6554ce7e47cc4b9886a930baec57c36404060ad2306683dbf6af16199be5484af35ab1f67774b05398b05d6553e7bf6906d1407482c75d5861cda2c79acfd6bb522b7314f57059838665c2a8334e79772d6a47e0b6c0aeaf7c1cdab12554d5182bcffa20ea48acf3f7d048cab412575621db095ef5dadfa9eea4a71e65faad2a254f30627d85136a94f8d515fdbdc3cd8b2c6c36679b560e5f6def58814cc6b9e9b2fb22d7aef5af05e552cf37d724a613635aaf338d7ca679809ca5a2cf898d1e0045a71f4bb98bf19fa84189e6e2a7608aba128238b938e1e4944ef00d5c6d6d42f53a7ee5c9c6002fbdb31c7465991ba873a77b23768e42a1c19a928da8227e7ff3231c038c28db9c7b6d17081443ebc66fb647d6196e42c009d3b1d7d675f8bf27aa202d6a792aeec9b6a32b596f79eb95870dd90ca18948563f74744c2b840a7917b3ebcb80942d8ed8e8639be36d1fcd62f6b5b5efc0418f2804eb740fc969d1b1fcc61706c262b4190d3b43686e6aff8e2af17e1f8fb39cd488c4b5e870e317c12445b6d35c9522c23b38b7c624d51354d015cefb9da7658c2988767d2081338f52f111af09ccc01a99e460c53867f2fc10a90c499324d1970fbe2197824a0d63af508e627111766b50c6a62d522982ce1336a2d21833ca3f61ee1dfe3d468d8563ec96b33d6b2cfb8766f2c51921ac110144f75ed5db38ca48a0d27afa7d9c3c954d926b15e3ca14674daa563659590f025973b572240181eb5da8d361f820d26df9e852a07f38fc180238a850d96f0e3cff7e9e96160eac73ac07d019be028d147a023087495efbc10d028310a7d857dabd80e2e9ba47930716573bcbd72bb6b25846cd7149255b8af772af1ecd7a32021be1491517947dd02200da1e4c82946e191ef1078673629c47eef321533fe6dda2099bbf35deb4f5586a76bb24ee717147f163f108325a1f85e019c23f0dbd92d961a0911d0b7e9f40fdd649675993e36926ecd6d748893a3aafe7a89bcefd49494f2033d60524f66322c4711daa43eb0827545ffc9f3816edc3267b6f69ef2c783ce24d68b2ed21483f06db4fc9c9b1ab5b63337e1daedb26849de5c1c6db60f091af86dcfc234977be652e059d6d5eda2ae0fb65ac35b06d5a168c9bcd091039b44f8639ca0c957905a9134510771a1efc955eb93313bd4bad57180466c062d90f8af68703f22ed57e9a3119092e0cfd3948058399912b47e52a3205794a7e5a08287ecf911b3b138fff318871dc5d0149c297cbc8f722ea6a5582a4eeed8d4409f0c5185bd0e5bca2a2ba9a2ec734b295cbbd97a78dc9baa4a0afebadf2b71d79ab746a495854571e4975582937ba97832b1ff11e9a4941fcd562e29ea1236fc02132cd43fdaf6c6bbd09c94a7617387ca964e01568ca07d8ba4290aa41fac1461aa84a31051f83f1c61ff67acb721de90e346d743d7393a119f8fdb71c639c725e7ee8fbb9cb25172b5fe59f7df3cf3022399e23626c6dc0b82b31ae788787aeb45bb08a61dcd947b670a0a2d5c4d5bbad187d0b1fde1d9b5f8435789e8e0a62e6e7a8c4457928e92dfb2f6c1b0ab7f0777c1212bbf12b9cd8aa10fbd69fadf4bacbda92accb996359a798e497f0fe39470b642180cc202aea47ca2167e2f9cdf9af4edde0f9b41e021de5f1909b31fde76d7b21b49884ac5c006cd19b8075556b3a0b8b272c0182f0051e7d5036d8a31d4b5ff8a07cdd8cf77ffcf3b8a1aaf4d7151985ca8c09f8ea06496f1de77b95b24d19908ca1b531836c856e076c1e1306e880b4104053e6bac870af40d6a33a6e1aafcfc02e9303c86e0c2cd00a5b18c15a48ff437167b526f49a24012dd7fa185b2c9f834c006a8d2e9b145ba3e96dce137a4da946cecef732d0b8a711a03d7ab795e71f2383ce9c54390eef5e4e78f5bc1e888ce80f97f42919527cac856b5ad7f48fdadaa497bb87ef02d56314a300fd3a97327eb27ae7827ddac6260eec8162507efd9aeb2db36fc4d856dbc255b57dd862e43140de96e40439cea7c329b701b29ecf8ae1f94bb5c078b8eee1f5dee5ffd1e929402bcbf8b755dc562d88c35c21d69ad30d614d01ebcb43c3f8ed41dcb8cc8b8d3ac84c669d17375bd3726f1aa50ea49cf7ce7ffa4eb741838fa4a70b0a3b1085b61fe1d5be6729df3d5081e4462e370e28a9ab49f025f8552f82d719fd06c13b3d9754ed232ef80af488c2610d1f995127589796d9feb1625eef9baf9915e6d456986c57d352ed037f84fa3a01c7128c7c450c881228b4d1a753b975e750c77b8a8af0bbd6bd50f366aaf1162b0fece7b0d6d1c7a28d49cb8f16fa12eea0ab5660d6a9c03555690132646e9e91df6d8b4a75b0fc9114b878a0a0262fb6ebdc8d60e25f0ff7047f566a193b7a3d20dfa0d2896fcfe8a448ff615a0573481ba0491217d95024b1dc1996301e5137b8884dd17ad7e7ae2743895aaa5e87ab1640b2ffdde12ac544c6733f13e0cb8591b1bbceafb0edeb84ef3d14f9fb12e7c603efae9d3d45e1a4868cec2949913192a1125192c288a7a3954416b0a2bd05113329a7bdb64a80bb648b25da204b43a2a279e28ad461eb6c7cc5e8351c300ce1168773a714e1aa70a798728e2fa1c1abfa180affb01fbec7eee913f23112041df63299c11fb168ab99dd5cad3c39b594f21850591c6b299c31d81e4da80cf6ad1951a1759f63c154807f6a9f10be2645d2a13d01e1ed33d38eb991b04bc5e979c80d142a5b9ebe54a5a925cd73d61da5e2da585dc74ce4544db4f582e0e6e5684a8e79471c0b66915081139d2c29a19e6aec29d695314407b6f3d12b3016f264e9fb5836aa52c1f4c92fbe780560ba17b1ff38d515435cd4119bad1303fe1955eb7c3a5ecd1ad76557dcaec7c42370f900390ec00d2b33a4a5d711a221456121993ba5274d0bb1cd43b069f03219cc2a9fc532004690d15dbbcd86405194d3b13b5d24f9f1ce5612d6d2795d17ebd593d6c92cfe881b3fe99ba593555c9375ed190d3c3c820bce1e556b66743b41941ced6e85219a74842e8d88c1490be951bd7a717758c96922d70ba2b69f65c10fae2bdbc4d04642a816d99e9784243f6f0aa8b15cb68b9159273fa0f3455f16502fd9397175522db488c60e9d6e6f3cd5bae9f673bc932b7bf5388ca4cdefe65f893faf147787dfaf6b9d015b6fb6898db7866845d3a8de91283f8f52a1deda42a2a566363eadfda1a9a79e5af0bfcd9fe7c72e59639152a1aa9cd18428f399036453855e328c329329290e215753b11134f37137d51730b6629779c2caf8ccaab5903515bbeb238bd36e78380e3added855458688f0220d53878b095efb31a3d7fa69ee241947b948fbd05287b3cf83bc1300c73fb1ac90814869d83ffee2cc6a9dbe74d2c4de0b3455ddc780821aa01d2d0b4e08026d456de0a6916626fa94c1b7839dee4dffbf2dd9727b01cb09d499f7c793885f0e8c87e4c3bd681ff3ad8bdc4bb1ed11273583fb30b591eb2761a107b8302743eae64dd943c4ac2658771770996945badf0ed54f9b2fa78f0e07d0d17f9c6b4d9ce34e12a93fa8e6b371f318df1c9eb7a1cba02b0441b912f81787e96030dad89ef4073556a6e4ed7f2ead39af543e73f9cc63222e844d13a01164b41cb5dc715b98e7c5fe62f687262db4576c98cb9c51b1acd95c7fea0d8095c5d6076416a47d629e28e31c446042df96f69972cc7d43fbcb95209d066d041549a3b2f3efee5eb168f2b73b54e55fb4d39bd84a97b34b0b6e0a1d5438beb5005eb191cdeebb8a35e697dd38bea2c75dd8cb8ba8d3cac171028c953de77f1df77384465a89988a30a5ace7acd815242b34ea4615f71051cd07b14ad2993aa95b36a023324711d9622496490037a900bd769c7a0a884076600c0c808ac45dd1bc0679caedbd93e22ac1d893cb53fac784fc36aa0efdc7a9ea7df2e8ff0f65418a6195afd543ab5efb2c082a66c376e302546d489bce1266bcebf8e677c0fd5356e67834917fd48a63b199af7afcaa0dc61d94f8298fbd3767c4a30bbd8f6291a1f3861b9ad88c0ef5010185707600823096321b309924867b9675bb18d15186ec1763a769d45e471f88d43edfb6170ae27ce9345990e4ee58dfe597122d369d95d0857a76f9a7ed53b7865e213359e25c201ed60d0d7ad9801f870241f97e605f9d60075acf154c221b9c45dd7455a2ee3e4772b35552d291c3be9f20dcb5597a0c87c08dbb130e1b339a887d0f76e74915f79cf50f19540e7b00c0272d67f3a57c615878442d8daf8de5b8885b4a09dd45a3a74a911af84683f207dd9202c9428b8111a300c1454f89124877ee5ba52b4bd0340c91f419ea9d16f8ac711234d1a86b9eb6577aef8bc3b4aac44f0823a3a701c5e37811435b24c3f52c6112e0e3518551faeeb6c6d4bc216215e3fc1fe6d5bcdf47ba1f0f2899ad9fd5d88137f82562de190d0185bae10d00b54383e4556675e2b1ee59d7d38a185b215de9b4708298857958e786ceb0bc095af45c3b8fb7a162aa7b7e27dc74b8a99747b8e0ed077b0a9448d55460c9d2de4f6cd16ff667d3e1a9e7e889b3c7e32db04c7b47ee02aeb002535769118ad6123b13800c19f591e228ba1587ea124c3a04d2bd53d42288284c1efa5f61822a27869ed49a6acf4fe6bf78a17cefd24860fd60db8f3fe5bbd5c9f21a81c13e6390ba456b9589738261c6aa090355966c35127d626491aa9e3b1483548ad11e06e05edda187c680cdd5e6a4b8a59bcd2c28dc8efe7e6a0fc3eaa42914d4e1bf8888ec9e12dbd25576d5981f3cce22e50caec42bec374973b1470179f7fa93716d1cdc2d3c1c0d8031c3436001f79b8c824961bad8298084eae2a4ec5a66670228feb5f199c3088f7331811da4bc6602219b2de23ebfcfa1c5401706d892dcb040b10281986b33e1bf92c9bea18703046ef691088c748758f4d1d04fef1a452a58d62a63c47f10157b8995b964e20301ceee23b43de24828ee3a592e0a6760ceb5c0c60eaa694d993b686da47b47d678d6046e6bef83627025cc1a37a704901bfc234df8c6d41ceb73d1c9e661330dd7f8bbc9a60dd296ed1019bbe3617c63a0a0503a98862a2e9ab9382315933e09adbb96dde9154a35fe41a586b7b6294beb26ea048484e5f315700e11b8adc36a78a30803ab9274c0123ef2332b21a5b95a145334432f820afa4ce61e25fd6d90b73381e36401cce5c76c7229c4107c5c8bdd2e623b02a8c697843291042e873ce7d1b6f5b8ffcce78c6ec7d3091f1785ef05cdf6f29aa4b69bda9622c9adca9f9921f9a300c8ef75ef9a45d760aa01c5f202d46af054106b7594633bfcf782592998ec83e209cee15f938eaf714dc5ad4378b446cabb765593663c55049858fa479ae200b33ec5ea5acf04b3a186cdac41cbf012d85d40f593a4740676fca8e341cc8cb21ae48ed17fc13a9c87c194337b711a47afa60adbe4f3ccb8dab11cb4c6923f008f7764372d0eb2b27aaab3d35f0c855db7222e6915c888e486420eef34809b846783e09be0fbefae108ea72c7af2e3ed955e363d94874b22303c09e32a1c04b65986ae703a3d53d7e009d87f4dc8984fb0c6bcb9efd485fa3eeb983105c91d0edbec0844a73781d84f98e27c55f2252cafd82c7e9624cbc528ed3469562c46f64540a899a67eec27d5b83f8402041cecd91f0ffc15fc8f2b74bd68fc999a15254c10e9dfc678153f08d45a26f082e208c307c1a2edc03285a8e8905b5ea709e446d9569775b77f866f99cce5afd30718f43f0c138c14687c4bdb551603d787ebdc06695132b19db66064f2408e890e95f30129be8f6d9377c42221bd27b021846224bc8d8c0af21781c284b81b297af8361ab514564045f0a83980a148a569467fb0aaacf0081f524a3edeccd418aec833c828a57f10f28f7eadfc62d54bc1ba8b36ce4ffd4d67df30367aef57fb4c7e82b61ef278641b9caddbef825c07cd592b2391e7124f8e16ca55e3a00535c6938950e27bc0ce33b0bc6ff4805b5dde9ac6039ff2bd92d4a18ef9a37f6a4c9f9fee252db1f693dd5430c685dd41d287f7e26333037d9bee07d4ae24edf5c44a0bf79f5b3568797b0f917c2e09adfa6c1916af1599d0ef3ca251fff27c462158605c4bf566b4c39f3b54fd4785fe39cd56c953921635f133198d4ba69ac9e84d2572a786d65a26ac7ff1c68ce2c1155e39810d43093b3683c5cd3d9bca0f8d9ad3e13e79f4d70745460e64489085118149b428a2f34f43814fb8224caa7585b3e41e7d5952a9e9dc15f153152fc8b2c8fff9222c64f09cce0fd4b6538c9a653aee80f0af704132e378511f7d10fa7da7d4b6a669cebda6cc9e89562b10eca0924bbf14e6ce4b96edd58425ead498d6a0608311c5a104f5ff746c7e4db7facc5c943f6699cd177a7dc62112e8fb2252451bd4e0da7c650ef919e4bb35e2335cfc407862230d3351f5b2be42e1e53584f87f22b012c16c562bf798897e3034b6e3e8f0a42d0f2db208339242703330c35cf302fc091079601ab5ee6581225d7ec5f64e892233752f07b163ae2e55a2a1c52fdc2117da2ab147ad5cdbd9293c28f4e0d8ad7d2a980d76c4a8c246dd19b4d38e44cbd98eeece35766a5900c55f2a0341256dc84504e1f7e5b84b8439f4510a86a358d8bf342b5689ad6972771516638fcb668e235a40ed8d389650ecc12adca19e646feb993d4d5f8c89b8cf1c62b83521142945f6beea33a02f27661e96bc778c5b39849c986c709e463e2dc38353c9ccf3341d68905061659282565b193c70f3b9b02aaca14665390b9d23b91ce8c63570391a3e89c2af1f5cfc0e0546df167b1c5e4e480c6d96035630415b83c9b2d137a2ecd6efa37523eaff2dbb9416e078dfae400d1e349b83c2a1f7295c790856a5fbd5c056954c29c8f605cc85766773802ad05a7b5dde10bd6cc5b10b994f0c47ce959942fa9c87738b56e69f600401ba5e5fbe982be650c2fb2d61158cef8899757cb03955fec37739716846864e99dab35ea7f9313cca6fc7aee80ee67242279b2ba3ae39eb64406af5e01f3bbfa25db44db5030059c4007cba845c186fc +MD = 0310e51ec82c5fbb0d8a3a3e520a7a0f77504e0d4744f36b4d87e9cd9222056f45b591ff4f0b752cf642cf5859ce2682 + +Len = 42208 +Msg = 65c656bcb7edc6f994dab6479a4258193a5d4e9cbfe2ca4b8b32f4bea4d38cc27021d0afbd40a0f60455e0faeff61e2118df742a14e6b0c1b031b3507aa6171984a3158264efa5af7ff1e6568820c1cf43bbc96b8fba6607a30433e198e2a4aa28b4ecdcb5e31e4d8c1692056ca98a4c425b150837463446ec153c1704717b9de4bc1e65b60252f7b42caaaca377c1c09d2520a8147362a614ca969ac839e41b402374c671358bd67e9bf7f63674ae53dd83b2f42f27374ea28d0813ec24274cc551b3a7ee650f1272cc41882c86982b89dc92948f4bfc671ec55b2a76198b57faafa6af347828d21825500d8d97c9732997892f3cc8fa1811d9578670ff596467a314874b581b3ef90feb2b618e8751461e5f6d3f84768a0233c4d0e1c0da9d9596c4d73beb33809cf3dc8ab1531bed67d8dcf89f69bbe4793a6aafd24353280bf17f460c1bb7bd8937e9d384cecd70142dc775645e104ffe5611cc4a700f2d511a0d7cc7ceee204945dbaee3e7e402d585ea8f974abcf31aef80ce512f55d5f07b362274ee21ce638379c2d586aaca33480bec3f1708f7546d805eef686c476f7ac2e0196299f25f5b8db8629365f1b5def33464ac3c843539d9242d039dac5681785dc0129bb2c634dd3792f65e9ee4b06a100ef1a0c144b953c712e8302c2ef7214270e672361f7533e86e97ddfa4624382846ce7bd70956b5f0a7006dee7e44853632c665a7f2885573fd5e292d65a32423132b17ed0c78c946f3319b1bcecf6ce20d9abb2dc8d40b7f48348c5ec996f7a97ef0ba2cd6885572fe6404daa7029eed094abdef27c11fb455ff4cb6f86379648e05adbceeec221bd082ee548f44e2002ebeb3169ab757bc2ea9b25c7c7472f94b5238c4dc0ef8ea7271a2b110fe02c385dfe5c9a61e7d3cdb180678dd2faa13bdc0a26c29559f87eb1b6818b296c4dd15939a31d55e57df62369034a1fee958ed3535de5c28de99436687b1fc75f1f7e6c31b76aedfae4acde997b65248f670e29a373ffdf17ec8823c49a5760351b80158b1bfb90a4928241b652677749a04a4d8f1ba941748beb184f41ca8a8abc96d38a2347f45f21f6db340ad99ec9dbc3cd5ab74aa020120d826d13d1bcdc8d1324d36ff87f96fd7b29971733f17c73fb17bad98c6197499fd09283156d87179597db745598f89fafab5409ff15ddf360bb13e4c71c668cf2a174120e1336c69e9b26b317e6d082d4eeff4593826af48535ea7b83271a46a6637633145448148ead39ce87dfdb41ab52fd7cb9adafd1e906c31069180f113ba51d88c09757abf65c89095dea65569375d2f1aa1e1925fcac2215b165c17722c4ee65ab52d1e7560798f5e2acfb2c2dc614571d5a436b40948c2e24a6dde2ec714d6c3d2d33413e6cee36be8e294cbad2361f6bd89b0c556e65bc0b41b0eef908cf0eee7d18540fcafd3e5a046c32fb18bcbd1e1f9ca39b8843320ddcf6e5f919e7b047c8ed9a5ac04a6f4db630794f082ca2bc95d4ab9380a93284befc724d133c12c1972f7e9fdb5a5bf1fa128a373eea72cfe1bf9ecdd60c30088e5e1e65831088f47e5a9b5f8aa186ff768ed0341b9abfb079d9f7baf6f0bd11c17844e2f8299548d4fb5b1a3cb472be8201f5c62c91bc16c49040db61db3c38def78035d0cbca47418e4840801791c7c318658df0842a5b689ef4bfb5302fd65d384aeeab9b8a783a8fed72f32f76a3a03ea9dbf5c67d06cc42adc85fa41a82b2d72f7df6fd7844268cb511e470a3caafe13d30aafd16916617b6a5cf8b9eb6864088543185f6439be139bdf29f8ba558bc9a3c9e8c9993ccaab9a8937afefa3e00f011e9b996ef1139d5c7abe090ec210d3b503ef978867668216139d6edb64094e1278e0cdcbf1d0323df5f0875d79f7fab0c0ac835d1e9dc78602143dd834478f615acf43a2c15b9ae65aa6b8d203a6063c0807d541ead744915f83630e99029896cb50421cea1e9dfeb1c8e692e787bf02e4e8d45b527cbfe031d129a41da23258d44b1361f37f022e003d57c8ad00ecaa5b37c9d4def4011b80e8d7c3488f254f7ca8ff9864e8931d51ef539ade7b57dc76dcfcd316a8d2e954afb592a1313924cb4f4ceac6c01673abc52430015fc63f3cbfb58183fef9f2b60e0a3ab0f1367fc928427e9f6f54da17a711b39e14027bb5c83c05ac5f40dfaded20e2fd35e3077f1c2b7d7a5d15f89b7d614b3e02d339e9e0d88819346d5842343db311660965f4114d0edcf22175422f5d1f68910021e1edd33253e349047ccbaad573ed704130f0f25a4f963ffa11a64d58a42953daa4d8732ae1d69c8c639baf6fab30e0413ca260885ab1392f12c8791d7a32920d3a8a01994b732e97ff8a93a9429921101f0edfc186abd5bb4c7e289773148661aceac4a61a24c6ce5981a0acbf8ffa54e11bb92d59ecdc47c7b1a3ee1637f77f01df067ad5502ed978691ca0aa7935b68bb334f35ddc157a8c473349eb03ad0e41530d3c045e2c5f642850ad8cc198dd24bd9a3c1ae34afda22a1ed07be16fb7742d231530b8890826a884f9ebceec72b420312f176a41771140acad4d370622a3558e2de0c50c7ec5cf00af5208f81c44c642f5dcd7c391e2732705ea6e3bf6d6b296ab9ced7f6649870bf546d78684da9614b5f19498f31ca9d503d8efd4db132e85b8ec98a86bbbb7eef351a35c518178f198df078844c7cc00cca121997b64b0a17b592e51332247f2d3fad4432c3e541fc62d9a5b2cecc3ee8bcc6b547bd021341d6a174066861e5cbac9d203bd1b12e76663b4d8559176e766e237cb865f6784c5a8bc3eadef2677d2470664ab1f9b91a009bcc964c1cd35856aecc7421a6bda9c998312b066468a43fbd62e9f52d5659ea81cf40481b01f11ecf1105708157dcac7d58616f266dc356eab2840bda9ab85c73b21dbdb07ec32f1b06e6e324eb776ba1b60879c6eb6cf26ee1c3767ffaa80ef811a91d6bae50f0090a92f9efccec8f8bb69ad6b476039ad05d02b59c0abb4a756a6cf7ab152d1a1f9884156080be90b1f692d67d7229c8b5a0cc599d2f64c77228c3dd0d57b9f5c53d54d625bb6017bad28b29807442046539aad311fd36ee74d9582df0ca7a2ba0756fac8dc1737cecf6de207c00dec685a418a288e8a43803f8946b03f1f02427bd4f1927275b48eec0165bbe8c72979d6c804870662f2c961303349572ce67d1816d9c8071aa0426bade4bc68b8feff2ff8c45571a4a34b1951efb43a1476f146e65b70824c2273b637071329289484cc99729ab699808cd0b622f9d21fdc286e0a1f94ca5462a8346775c71261128f1773b65fbd86ae16ef25751e05973daaf64bcc3bc97a89694d07d7e00aaaa1a9774d36ab6eb65871dc678f2dbdc2c4fd48710a6e6605bf3f69ddd467fb4a695854f09d86b170a42301441a2de1ea96abca448334893f2bb0f0b31563cc8a9127172591f86efbbab6c583bb275955de3ce68cdc951a6ef6464a4f41dc65b2429b26b2ba0a8da0c3b28fee1c220d4bc2360310c09902db4789e07901daae0aa33eea5fc2c3f6a7e79dc94be526e5166a238899d54927ce470018fbfd668fd9dd97cbf64e2c91584d01da63be3cc9fdff8adfefc3ac728e1e335b9cdc87f069172e323d094b47fa1e652afe4d6aa147a9f46fda33cacb65f3aa12234746b9007a8c85fe982afed7815221e43dba553d8fe8a022cdac1b99eeeea359e5a9d2e72e382dffa6d19f359f4f27dc3434cd27daeeda8e38594873398678065fbb23665aba9309d946135da0e4a4afdadff14db18e85e71dd93c3bf9faf7f25c8194c4269b1ee3d9934097ab990025d9c3aaf63d5109f52335dd3959d38ae485050e4bbb6235574fc0102be8f7a306d6e8de6ba6becf80f37415b57f9898a5824e77414197422be3d36a608085f51a7c5776f5135e3d50349ecbf693d189fefa64b9efdfc3ac283cd6357f9bcb5f2970175bdaacb7bc2c8fbce745be06c4b49550ba9dbe6ddb1603d05bd0605247fa5d3073629b53b5deacd550ea27c0b392fc196493061d37bddfcac39bf8a11656e9aba8d705ba8e2c32f1f02df886bd5fd7c79d18de5b28e479cb55288b413505bc8fe17f1572b1dfca18ae5556e14ae2cd634f756eb0165578dbf9be40b80acf7fe406a4f00584bf1b5372ac6b58c2e487f361f3dfa369d6850297a73f90ff7cdab2fe8cc1fb7193cea924785f738e2dad82bbd859bd893048491729b1507bd37402b37faedade258a23ad025aba1485e615456c0384de2b68b7618dbe81e69df6db0cc7df2c353bf8c8f39283b6bdb4dab6e7f90682d18e8e555e1b8daaa7a20746f1ab7d78dd9ebfa0df7002eef181326c89c58a3fc823612af41a475328aa504a4a72b0473e1688b359e300ea19b696401319b6422cb08a3e0cd41305d07d79efff659f20c06afb0a4a34a5339b19ad386d3db21366feb0998f8f1a4607e2293df9cc738bcb64bfac98ac1850e173205f7f79a73adcd57c44639483a135a3083d1eef5310c7ca7da12d9182c9518b96ba3215bd3ff8fc9646722b779bc286bff6571568381c65dcf2ef2b0a27552bb8536c581bab213da5a7a29b1ebe1754f6708d87da8a32fd85a6c8c4d9f154192e31168cea06be5e516fdd2e9f919ad454b4a68ed08f725a1fc59fa216afb61e9f5c19f751d6392844a70a2a239cb4d082c98c7072cd424353585b0eeaeae202b4dd5be179a5f963235711d8d168cd0e28b72575e9ce0b81c965e6507d28428d14bbc69489fa66d79985da80d27c4e58ed875be75d1a36dd28f727b0f6f43d8767fe4157aa5ee84b4c3b4c6a4d609d747940140cf537291c191306767dd33bb757afb3710458e789e48051dd6b9d242a75ea3a2edaaf4e0943c36be93c4fa4e68ad4062bbe70cb570a5dd02354ba4a44898eb493340a0c6b4f0e3e5258efe1dca87821cd012efc7e66d8b2822f3f76885c336a832aceca09e4fd67f9fc3b58615aa0ec9ff41be3c69ffcdd4324b512c097e14448e485f2acab96cf264ebc723d48564fe8c0bee6f65dce3aad5da385b2e1a02a298bb6eb1c4be35c2176f9973719a132f28c9f6ed84a58b10aff913727e379046d47ea1d216decf7319d7b3019758a7d038147e4320ca12ba0350790e64573ba5d3fa8f083b9b889a0ebc8a3a906171864c73daecd4bb18eb9258ef8b9ae9734419c78cc09d64ff8b4876a5ab07152eb5d85093671b091c49bf7add766c6ec5b6185e2197d6db92eb69ae9bbf56143df35e334e2e5e248b38ed4ed95b6367a1504236f3fa525fe11ed4bcb30427cf1da360a451cf38ade45dce4d59a71a6494b739ea6a649a7278ba3c39a205d6a64c5a622c44b61505c60cb4eed4e5fbd62e6f71d10b6339b3c831e29ddf30fd4a489ce523ad6f8dbc9eea53bbd1a4724ccccd6c833d82aa743e0a8a61d102062ba0cf6c32e2780d42dd6b0d2ce64f3838fe758c89972f576468c8762e1e158bbad38669d28a5c1e29000353ca7952981b41dc745caee5dae4c6e0384b1cd7f8885f46507b0b883aefb547ba0d016b2c6415869664db22af85e6e6635153c5c704a273c294fc88de075bacc27d24e56fb417f8854a92824fb8374f69c9696b81c05bb342c8c3da81f071a6ef834a4dcc8b97a6a3769b61260c368fde2bb445b33be979338f0809c13b85caa3d7e820ed4b331573612c6bece2632c12e0dac0d5e7ba3a17402f731659068c81b394fb2c8368c99792ebfeeeeb5bb8ba91337964546c7a8094a0b2ebd972610bcec72914b4b73772944096b6877e9a27a554dbd8f26ebee1f50245dc2d67fca481f557306f9ce386edd0cfde375a550cb5b574be524f7bcdc9dab841d54593de65a5f20a04885256f802f6b07b5d8dbc1aebb09ee46d35a6bb8066c76199eb2bf26f85fc240808655b5dd7f7d41688c86d5e3bc53966810f2299fdd732e3471fb0a88f914eaa7a347057bffed213fab4258352fbb1c9c269a79dd9fbf9a05c2c18f77b73d4de3c36ef672b4fe5b43801cc01b29cfdf58e38a2f27790065f7ed393b2e5fe6711a2ff2122a6659f95e523d93fc7137e78591ebd3e734df98f4398d9913b9b65f3530fae10bdda602776bcd5c40d09a3c0976e4ed8498033ae3f0e22e8f8f561e1d0caeea7ee08c7f7511f3a04e0ea0e7ceda9e06666d1553ab5863840ba76db6b80b37b5e939b377428dd7e990f3f2efba0740a5f57bbcec36b93522edcaa430f077bdcab5aec4f2c527a2be6d46385cb744f353998aa10b6b5d83909ec0a393ac9667b24b0867f9e6267ca84dd11936acd8df97ba616bbb328b7357875111e7d4b25ef4110e43928dd48c2e985a3e86800c2bf9c0c9c301738a2dfe0f4597354f11ca18718a01c8a277fbd8b7aa4f541d280001138a51e716a3da0d9d63dc8407fbd2a6d24248a00d58f02e1089f3a66a7485381b6cbc74041ea20c9b7489dce3ba9e279c00c124b6bf94b90cbfd2864f37e3254037adb02343ac8470404545cb955723368a145b86f30f00131395fbb4bb4151ebb2cba45c5921fd848fb9c8a7d325200aa8e84d633e888b8e4ee40d8146c84282a6bf5798aa28fd3f298c6c5fbd2fa87f24e50336e627e3e33866c59e219f826fdb30d1bd7cea0e09d6673adc9b9e42fdc5b484e834168f7c99c42af494f0991819c71bb4188fb74a5df23804b59977ec52fdd85f707a17bf39a64569e6e00de7282c3c66c63e816a87d470c05249cdb594670885e27e0416e0b21ce661996842cf063cbace1ff2d11cb6eaf9bbd6cebe539b1b41d247dde85593ba544b433193d7fd2497775b94e7e43fad95396702705641197a87002a9d61ef2499ed05f14109bafbe70a1aef15a618c17e1224f03367000b1a4acf749dcc6f649f8f082fb42be5c991cf8389c12ce82e9a8e3620704c80f80863dc414f5eba804c797473540526977d0ebfec553c58fcd3f7c51a8dce6ae82c1a501c1dde79838af270468961236c930ff5a0379f10340f93f867f4b566e36eb6538a6e1653724043242ebb058750bb194e2bd11db7de38acf88e0bc91bf2b6810c15abccf15756b5b9b552baf84bdd76f217897df5003588ed173cd2321cecc1a4443ac9fa39b38e5763b6481e66e16c08ecc98974a4ee6ffe8bee97526af8bf439f84d51721411625bf4f77a3a8af44b930f807d9d14bab537088e124e2c2c30faff1b7f016e7974c51860f2c1a2f462c6d7dc0cf90348315517478508f331533fbea392c208d57f4a1c1d764c24ab98a2ac27cfce8913e6cb319247d7631fcd50cd52173471b9f43386998f0aae6e7faf02e0208e14a257f20dfad53a1a5c21e681b386f947ab7649de71a7bdaec16a546291c9c834780771f2eda7c1778ad35992546c60e90e77d58a125ab58458fb2b41b9060d771977b396e749de0900642275a1320be4677b7f2018128 +MD = f2df4b7af9ca9da652b5027a6a68ed91022eda553d72f61e2abd9ab46038be92141d3b3dac6c0e2f87db9350019d9f1a + +Len = 43000 +Msg = 24d97c3e28460d46216da39e043e024ed08e387b1e5fcfd3f962472cf1bac4676b03039b3b93927075ff41c87fe1d4a56bd9fa4784d283942787cdbdd5457f1f85f27a673f4e0dfae679689456b6542eaf6e2126ef78df9ac797d114a7441e6d1caecaeb5b00e5ad1ee20249ae42ebb34154936187d74cac809b3a7a9040081ad540d96fb8308251c242f630b20f01facc933a3f73793394fa99f235b8c0a5ee5aaf913b7d664cae7da22c9187a4ffcdf634fc0adce6fa18de9ce08d464c5db05303d996d32aab8bf4098cb458894bf2673ec308e9a40b01d4a9eccc626c982a674598cae20507b1d27ffee04b474f31c8b97683c33dcc1683cafe3836a9be223f7cb81dd17ec8e9bd0c6a5e88657254c1aefdc19139a7219406fe1be78a376183b020d8c91e56f95db9b877386b1b21f924400b7c1e03e8ae66d4bba0986bafdae9b842f16b19a95c8dd07083e1b462192326a8ac7647357af069618759c3d3ec3068a572ef7ac35f919a949050a4ddc8b399e248c8ddcea0aea354c457a597628c18477332df0d11cbff2a8840535bafdd81ff799d2c7bc7a86bde801a7ac1e406b0721dbbb1511745e579923729a376a8c448667c9c0697e5aa45e328ab1a19a5186c981259551c0736cad7bf8e7fc41d4b0538ed9535ba6d46d2140b9e6aaa71397d0bbf3de2c617d8657f5feab54142fe7e16787fd2d54829cd3c4bbd793e72f9ef9e4ac7bfbd7fb592b1a0a50e9621c5fa29a6c2a3937f397e826e6f0e7eb141087b3c5eb6aa47b399950827526bc289c398fec6719918602c0ffe1bf31235fa12c71d698d3575bcc15421d849672b301f8c09f403921e84210a832beea1060a53ad73520d0513b754167321ba3366a4572d4db22324968fa39c8306c8d32d5b1453c880fec3288b980284686f777bcbb2a2546997f78a68fbed88144952b1d39ce1a35b2816bd22d641df162eda708f7a14a68228b401f7712419bd38c39a5c35808d4b52a7d96355fa0994c0044fd7f5aac9639e0304244c6abf695ed1f1dd25580db8461e84365f568b49ed9e208a6d8d4776c18b9ad7d6e600808422bd3db590ab0aca22c6833a7dee9c7c50e99228e4a82259f5cbf855c1676a705e06662d50efa9a75ba8322f96baf737c1b4d66fd872ce2de89f6f1222798feb2ed43fd5c262fea572312c86ca75c1e49a883e89912fe4060d1f245532c058bc3a30b0f40b8b6f8b0f6a578740a9614c826eb2c03666cbac0c52006618c32bad2921a1d456f26523d9599c7a21dd4137226c1a5af0a0ebe78c41e98cfd0a7184a3b0fabbc92049337908e4a6949ac86d228d5ea0e664ac7f35f2c810091e930a52e4a3f28c9c8184967f1554c2675eb529d667da413a763bb16f863a6386f707dbc585c1c8ee77ded9c518ccd2cc6bd8df511b5028aab1e4a5c0095234ca0743e95b866fa59f9108eae1d656ed51579fed056349c43dc542bceb3ba0a3732a8522af8f464a3639cc70de363a3b7f8bcffbfa280f3c7a1a1d9cfa036cd908c7962ec8898ce03bd6f014c11fbfe3dd6d33b03950e8b9ea183dedf448fdfe11483fb6ae5a8a8e37cf3d7d947b2e0ef46692b5c9c41d6313286a58e2f49c39161446626aec887db18e7b535f31cfe34adfb3b1b26df5617fb06b84cbee91b2a09373d90325ced4317a72402829ea8b693e5f4dfd32badcb61a091bb71e2492362d90c481efa3bc3ffbe9eaf94bc72dd9ec5e31b1fab2fb3ecc0cc2af6c9d01614a63caed31515d6479aaf9d97faef220527804d6af27e7a1303c23b9c04326a852b6944ed31ede275c7b16d1ade602c8d7756f75385fc767ac60e6e0025f2a93ad4fc9acbc5368110d25e9e7bdb88459e21c19947da3c416aa42b3291a3934aac3f6120fd63722a9f2701925976ca059dd36ab3e663a063891a8309ef0196d76fd7517800814357774234f93234a80522f8bcc78db6eb454c95b08466d47fd7ec1937f063a30c803fb0832384a9949cb40e3254cc485f7f3ba23e129770a0b4a7817f3aa54d504d6f0e56b1cf2a3264d78065dc109c8f69cccc76450f7acbf638bca1a733f491177b983a14704ae3d5f3fbc1ddf927fdad7671138c2d673425060749d69e1d4166ec0aa7dc26903b689fdcc0daf47f2ca2cf3c70587faa8bc9961dd239423c03b446c21a69407eaba531affd4381168ef24d8b275a84d9254c7f5cc55fded53aa8024b2c5c5c8aa7146fe1d1b83d62b70467e9a2e2cb67b3361830adbab28d788aa5223825e938d02e911ee89968081761b4d47d81b1ca981ef75605ca6ba92004a5d3d84654fd995c4bc39c77bf5b3292aae801c7e696565fa329380f78dcd37e9adc874e5e6d7546065c87c3a1f08b0fb070ea25c84f70709226ef0a588cf580eaa8cf9e33fcf6544766151d9e4ca3416c1ba11bd55a790a4adb854b892e28942bc51bc694209f0f855cdee622e3fdc04454a11a9c4bd28533b385339954cf20c4bde657ed7cc1e056cd4fadce4b1d14cfa864c29b980f69f34b7962f7856bdf4bffc9b2be66216f2213d1e50ee663a76473867441c39230f00fdc5a223480f828073067757110147ded201c534a7400a96260d03d531d62c07d2879a7d6a133ff60b4f6a1222078d0a594c439dbb0b914e19e46cccad387cb2fe84207003eeb2898b1e0c00dd4f4b0c9ba6d313ecc293d6d9948aeaf871896748653be45dcb64a2bd1a66078902094e60b87b7e808e96982ec6621559a8db8f7ad2f4bfbed0dba767ec7f106f4750376f2945c4c09624fbe022fe361706f8935a7252ea6f25a102523c5f04d847a62f92a239cef403c467b64f65367bb26ad9b1ee5d4db8f33e1946b10fc90a2a969e8fcb5e8464fcff447af69ffbcdd4b9cb46ed1dd0e06238560bf396494e17a5ec2f4bbcce57aa5bfbf2beb56f55966bd0e3189b5c3199192068abfc6aeb365d823acb5b95173462f2e750ae795a1e0a4f4e17ded7f1c168de26814a162bb045c678f244bfeac39c922053920026941eb25091ee2b6901aefa0d1c873454ade521b1697e36197f9043677069eeff212d60b12fd43ee18272dbe525bbacaf54c6fcacd711e0eb8fc66e824f3c2a2eedc1c1399897faa16b3ce97643ee6684ce6fbd32e506a7aa1cc6793a97129cfa1f613db0743f45f0e5958c881f29491b4368ce0b3b64729c4d19ce57f0f42caddf963cdd6dd5091818032ce260733fbbda3a95ff8033280b4b46d3a104e9c28e57e62689295f2d5f2b10314dafd530adbb6c7cd65c7bb33d3dd5f2e078f946e4acdc637c50e8990e47440391b456023a0f86e9577945fa7b4c4e92dbf72ca0f809fd5b7e8b75356c93260a7616fe9ea8fe11464b7c98e50ca03a1a5b278bb81294d377578210e9c3383eafc47ed5ec3faf94fa7a107d5c3a6021f428b01d767975e51dcedcc09d595d14584293e4d4494b976dacdbfb474bb589870a3bebc377d5bbb6ad418e39782b316fb9fe323f0cf9a207a9851a8e88c6fc3bc970fb8552dcdeabba5b80a566ca1c5af166c713d1e23e3038b7e21a39bc01782cf657a653b1d562becfa1c96b615d83b274ac3ae02df25023195cd1a6be21a6fc76070cc27d28458048f68dd1187d50c4d0e89a810347cf30528f9c16f5e22d019711a1e76760bbca6c89dade18032bee21831dfc8cc415280b8464d388cf7603027f4b0998042b62e36196dc89777bf90f86aa98eff18ad2eb410f23a06de7ca5e59f472379cff115686ab119362a7ae44f8289f555697f89bd0864f6546e91d54a583686db09e9f6d01ffc65c4a19d265e18157e57ca260c239b29efee1e5c68c6de03462c970d4cfd97c420fba38301d4a9c09c8ea15d309827a5a94c6418badb8f31e3d6edd78251609cfd2376c8f113a61fc2528561918b5c5c94e7e6735608fa46d27284d5216c18db3cd4b1db6ecb9b87a25bfcffa96d97d355590bd8c4cf9db6b477e282b4be0f2372a7db36e54cf89c9f036e63e2bf789e4d084ad571afe805ec6f8d6cb6b7e1fa30e55967ff185bc32ad1505ac8016d11fe8e39d6071a67b8fcb1ebffa1fa0fc3fa35c2fb16de239fd85e5930e3d3e3d2dc533f76dfafab4467f794c800f5071521119e4cc6deee8729f2cf82a0a77b5588eff22475c0113cb0990e324e295662680151e979cb2b2d924759bc88dca21e66ccc86b640c3816592ebeeaf4178c30117d646db9f357d793b45e6b2713e692086248b814e49e45d4213d3ead3ff702cfee6c2602180339b0d2640af5cdc754e058e99722d9a26fb408ffc9a413455ef5ecdfceec899ba87c19f1186f7ab2db81093184f86be2d87b5e7cf8a321f5b915f115a4d3c8afc858039c200e9b37aa5d0b970e100bee349c8a4b6814fc7685c283c4644265bdfdd727ab9e5dafc425f6c8b09f044a12e89a24d184640346596e2d6279d2e124dd6beec5ffd748f6f2c0d8e4c44f96ff88e6a6a5ca2ac6e3b88b465651efbb92db98d171c0f5c73e755db4c9fa4c83128a14984ec5d3b7ed07ac7736890365766ce068259e53db09421fd4c6bd959eea60a67222f3f966b0eb4428797ba86f5e25d52b57c45bd4f5cda9c1619ac53ae5a11ebcc8d10653ddc7d4e2a5c66949a88ae9838eff8845729c6df330fe25f792cfefe0a6e974ffc211f13e21e5a084e4009019418c63bd0e22fef2ab74624580418c7653a9dfdb1c7e0b83a465f8919f2b5b55061768ac26f5bf383789f4b52caa86f6459ea1764b50966b73a3dbf0486fbdbf431d21836b89314c7b9b47b7066f61d903446441bd3e144e363bc5316e5239b08efa08e33a41e7a7de44e5db9c04afa6f31792ce009b27b4529a4ed58f5751e1505a993c21d464c2d60359835c0ec2e8bb94a78ba3fc23265f5bc34d09f388ca3dab5d0ea0b51b35f9531d5ec4f23e06c3582d0b25d5b92cc2dcdd188ccb60d38d68cedb35488d69ceb0abce7533938980be9dbce4bc3c3013b9f6b886235c75e61f59125e133de6bca87f42db5745f99a5474218f142ec8c85faabd64bfee59ce3b964499a9af2559a7226c65e1d7df76964ac98382235f675a6397c6d598d7ac4a0102667043be1c391f9bb357bb938c108c25506a9c7c6716abc82b28de8816c723ac431bbe097adad161321d83ce614fa2c574521ca84e310ddee00e41d3844f78c2cde050affc08d24d60c7a2e88c90391a6dbd065b9325e43ca41a45428b2f7ae65582be1a265fbcc0cddaab6a74aeb9a4bb2ffc1ecc61d961e5c16b7d71f39487785748c0702bdb6be7cb0fccafe7aee4db0f506a5071480f039826bcff486016b4f2a34b6019c89f4d0d429794d7736b4bffc5b6c5d0da74ac0309b9897a681489d930038c860eeb4c35e653d9fac1988c65ae8ca30ceb333d9676db87261711656f91914c1d18c083c95d79c5cdf40d2ac58d646e8214db46c7109b9eb7f79de64a2a6d252b60cf724c3a820ecd9529a5b3e4d69edcc1dd3619498236cc740a7aed7d0fbe5d91589612eff51b862f8e6ba5474b9a797ca9aa019427c5c026f791cdfbf16e10050c7dc1e05b62642dac0b1e174c07f4cfd1111482e4e23f8ad5c96049aabaef464b87ddde2d79f409f2f282f7506dbb15d3f9d6885202971a359048c8a42b47dfa652db2bd3c8c25ef3c07849e122490932c2ac36e7bd535f9774ec0b6645a62bad4d2e4be6e53b974ed3629176cc3af46e0a19f12e6910b56bf5de847980a6d4b0f55bc0ff45ec4d34c9e66099c1ed61f64eb4599e9c5bd6237174c64672c64561e9f82d556130eb76125829c2a9fcfc5bfeefd2a0cd711c6e96533365826108207977e3b1ddc5ec633b4c7f79fad61e2f9940eedd830d02add30e7e4f3613978d424f766d0207ea8ca347b4383af531b1bc4c20bd438c2351a5eae97c045a7e08d303781f74634062e8be7a75c0f6e1a2b665fac8957ae90a8d8d177483b216138a284b21ab8498868a3534cb4347a8734612ef77df65de38f8797ab12a971a3df622721c2dd85d57e62075912863f093b9f77153a7b98d5d7524a5ca6f85d4f895768f8761daf967bb24af7ff6d84494a07822e4850250e892030b18d91ae0d3f6b8e5cbfe09172647a664e025113ef688196692ddbcc37addb93d34eda2b840885e377248ef11243a2a185a39ab2a29ef5fcee738657f8496ab9e9713d9e5dec8dad712d8f981d1f1144c56ab02a0af34bfde6a1b88cf867b5eb1c7f21cd3ff36c3572624c4e3c01b19635e0fc42d06f6bdf7940d835e00ea47094ffee82d32608c3a14c2bda17f069e1fe8ce4c49c1a3eeaced7501857471f9278790b83c18c4a9e2672950655f4216b47f6d17615fdaa680eee87fe06190e97f075e298b02d1a102a5cf3989f15c17e39a72c22e41f989f600ee5ae948c59c8267cda8b4812615fd593ab599c5c3260fc265b8eb188f1d8edbdd2f2aaa8e86d3f155b23324205d44e9e2711f5d05a59b7fbc88323419b5bdc86b690f076a3ce66c9cd2716c5f0b7be05cd88517a22b392afd9c8e251807056eef9510dfd7332c11f99609ba408504c510785596072b4b6c9f82797c0875f837f03fdaa453ee3789f25966ae637e621093cd2b58c33a64bd18c66ea97976f8ac03d5c6e57ee27b4d1da902b9364c364b5d3350c064bcf7850fd4e82dd9aea94390d35023a69479d3e201885b4772d3ede367706d4a47866cdb2a7089a7716c873dc520df6998a5a6d60f42050576dd70bcc604c0025e83dd0153923d6163c4ff513793894643a14e600eda56feecb56c4fdb78692b56924e18dcb7c9a5fa3504718732b1bb49df2326acbbc19238ee39131465c903e4143898227baed3a95f4f255088d9370fd1dd804560c57de00a8fbd0d37404a7b9c34f5c1386d88f58637d30ff070580a0bc6038563e300767ca89422779f5d819ccbc845888624635c47013224078cccff8536d92f9ad870c74c4f00a116cb8a9855760be679347743f546537e1f43bd1f9380ad3e6d54437cc324043e47031b117a8590ccc737a5dfeb08e079181b7f0e69779e1adb02730fa5d9b9c9b092a78aa37d80c5e0bc738260cf65af9282872e7f92184f546183e27cd6adbde3f8c47648d4384c662174ce2f005f8c0f074a026e46a8466a000aa7b0813c9541b3d667031033dab8050e258e523a88fe284c2c8e3bca8a9c5c5bd1d98002ea6a4261df4ab81ffb66e5c42b072b8330e044020f87b7fb966bd51bc360597d27ce32fb4198424918f3321b413202c62e4609001dc361b8044918af2edd5427c7cde4172064353bdddd78980a976e7fbbafe5daf9c9bf9c2ec485aa66b9268f6519f42a0e470784948637bed99fc51c637e48d7061327f4a06eaa81fd7c37006a12e1c86da93fafe7adede440c3ad28d041c0a8d538416df39805ba65af1c4751591b56c113541a418509cce29b9d316c8aeba4e991826482d105d831ca3cb0a54d2f79ab0ddb503cdc29cd01900ba2a2ca087fa5c76184e8ba595fe4461ed8f07f9c857e014bee23e3ac6950397f191d8fc58dbc32752b9fb44eb5ffbb492cad50c12edc961c40b16c302641007de1373ca1437f7b23e5124f747ed682222 +MD = 2b73f1ea458d69bd87d55e2c055936222a83d927d4c4b1b059259633ab0b14d0ac62ddc4d04d6a6d2c878b0fa1b53fbf + +Len = 43792 +Msg = 64c756b6dd40859a1a0fc128f33f3dd0e4efebce0e47a0b77eb17352b24566aa598448615b4ad94719fe302bf60c5af2169544e66665da50dc25714800d162ccab6df8100ef48d15f792ef7d5012099ee89abfd57796191cdcf2a4dfa88c150ce0e9306aff27e82b3b32c8c4093b91fce366254349c3a3460680d4c0b45dc693825fb61735c933b26d4881a92a6e3c358e613ddae5d5c2f4e237c8932b2bbc88193953c0b8c3b7d1163be3d3ba93507172f4d13f52b2bb4ff9804aff16e040142bdecf0d91feb9b1bd73b6ebc19116d71585a71d9844d97ed2c120ac7c639a5f42b6f2a5c7618479ea58c2984852d690017e891ac07163a9f5631343659c1290e529843162d35f522552ce8355bdd8c3be453dded023a0faebcfeb6cda73f0d09d9f4c586b3e9164f7c9a453f3ba6399d2448b12d341d9973b6c70cee1d07b46f08013c3e98963d6e7250ab12731c03ac7e13d5eceb357a86da16a12859bfc1b6834a119e49c1dd17ecec945fb0a38cd25861969cb615f560ad8a0dfcbbcbb768d23be03655f077c422ca9b6762d117b729ae9dcd1333cc89978dbdebd1b0080e6b6322972ba6800bda771ada083936b3885735ee9113428a2e9e3b762a11360fb53c43216958a8477a8ebd182f208c6feae80981ae3919bad928011c2343b3f54643ec756d8b331f795ddcb2363b6b34d7fd7326c91994b43dd7a94e6bdc2457a4f668f3c6b2c2fc5d810428cbfe65bac5f42d3e7039560eb3198e9d525ee99f47e0533cf363da569d74cdfc3ece1e5a3b687239421cc022ef6a3b8975208644a57e25a17212dbb6bfc584ad2d4ec7abaed6fcc7ad48857939564a8352e57cd0544c7ad1d15469b54aefe2ac05d52427a6ac273a1020f8aa274a062b6a025fdacab7ad3e8f8ce6aac540427967159646a9648c31294abc1e3fc228e228fb81cc7f6c47580b40e53f95833ea5bf74b0913d9c861d473a124df95b1d382e55a51de8c6d3bee2f4e7cc521531b17d76e58fb9c0cf8ef853cdd1da814d9dd8950c47ad53dcc3953d60d97172c62d3f90b7aac45da2e6cb4c311259b14493b63e59e2239fcd16906ed2ff8a2856596456996ae3efbab52e77deb80d879cba45b60075f2071f18732dc096f2a28cf68a3d2d587ed3718a906b390b5c50b0621590826b8f265d59abeecc58417db4651fb8c5fc1bc551d7af8ae2b4ccc91a3b9452724b517a025aa926288bfd167725a35e05be3121f61cca7b3e2ce54d54975070328def8ea88c096897da9c094fd8a3916f176565b8da7fa0dddc2c49da15b87e45bbcfb0ba6e2b2a8c9c94d298ceaef764b01f2d24813d90245b086b25376ae14e5d689ca281bce0697a7def0ca803f488e0c4d4c3b192cdc422001dc06cb62daedb40bf0b670d2ec0dccddaf5c5612d3e520cf910ec0dbe1fb9b9de262648c7d9bdfe745f7eba6a253bfb02fed744e6076c4e0686811cf5a99a8c28e1148154618de8791949332709208c13823e0dd376980e89af112ee8e43d0d8a6b87fe37d8c39519c34705f9ef2307692a6a4a5a0e7dc4ff052cd21c7229a47f30212e06a1f79af2e808b13739abe39041fc890e318617d2f334a514b5e8e783d9408f254f725080e20eb3738b33a7157365285472396db223b9064641e34d14c196903853fc5c305bb98b436642d8553924c6b153003cf9013a744578a15bbe7373dfa431de24adbf99b70b2d61edfc0dcbd2c966931c2406397d76fccb89fd8968dbfd7b903045884fb55f73095e666bbaeaf0ff4a71dfbd26807f309a5e3e5df603a893cb0594301c04a4c9b1a020dd826dccbf9ed46890823ba2a6c65f1d7babf53a0ce71b1661bf336f83f369b7cda2d9b11a18ca7b2aed0da5d1a7f2f75ceb1f26696cf7487789b03444370197c6acbd428130ba63e6c754ed53e7b0789c43eff21bd510a6fc0c09878d051e5d530096f5978f2adf4e91cfed7fee2e0d9436e621a6a80dce69c6adddc0d60654fd3ee54ecf8ca239dceccd2ae823b212ff44a0399c6e250b4b4a2bab7232502b1fc836c29ba1a7001c28eb2a1f30e34517fd9cae5f901cfa0af6f1753392824c552cf9d57e76afbe86e6986f779e480078b24a0482a65c27335dadcf678f234517edad0c0a6432e1a796536f93b436d1bc0316b0882948ff5f0eaf1e9080a981e27aceeaa202b705e8c8aaaef62b66353c80a156e2818a0ee85a73e7410f8baf4f64edd5e7dac2a7e4fe1cb2115c2ca7948b784c244795b269f19acdeb845019b93c78724e44ec24069717fd67df10a53eb3ea24c003d2a65e44921712a78d4daa51fd2437d98a16d8342af57c2ca8baa56a9555382ee7472fc3e86738b199d7ad45ea80571122fcd445d44ed0bd5b64534008721f213a0169000c42d06b0c344ca8df0b0e844d42755c924de809bf1ee2b491ffc793518194898c1e7c0c6aefd2cb4928d09b7f9445d8e39724ba3a56be38e052d3fdb4343cb0d67e9e4e2c570a5d975e4fdf204ed05b569f391753b8506d621fc6b8d895bc2679d7a988d7264db0683fdec7d5fe8f5459ea77d9a1904392a5bb025d4522bd4af4ae3044e1da07642a31ffde170fdd446bfd83499a9b026919b9397360679aaec586d52ad2ced1f96bd9458a5a1f64bc1b4cce1fa52517513c9ebe63d0d0eeb26ae5da73208137e08baa22651599a01bc65cbaa467baeceb8cd013d71d0b2406534fe2e6619da3aa380928f6effb09f42ba1fb7048e90d7898f1dc259b52c51b2d2970cd0c70afb6cf8acba83fd01cc589b0f31bcf2bf3b8df7879d7d2546c514706f6cf97b6a6b6d0a37d018ba553108f0e240f70f03a0ccee86f76589c64594f6cf74679bc330ad9f7df8b59e737559a1e10b3b4d24af4f5a63f89a477578394cff4ca491ddf2349dc45be3112541549654bb1314e90f1d2567c7a3c91b070b5b471d38c3805a0bee5520297b313dffb7837704cc1b683e35d78d087580991209ef0fa99b740f397878701044601064edb56898dd8264bb74fe7152b56bd7573f3e49817f80bac62574731fd47a638b1e33b656afe6a99bc8239c08f0a668e1e67df447d96e03bbdb9350de9447dd7a334688c6aa0fdfe61b8d35b28df7f6b8e4f537841004911f841b30d5ea8f273b1534067137c5afa5548565d8f62726e523eb3bbf8c0b0dfa07553a8d3f19e8d6aa455adebccfc1df5b53540392fea26f89aa2780b54a1e544c89978dfcaec951dcc3a995a3f6bc9c183f29bac943125e00792450f38b6d363bff6e5d871672b692f41e1f520248e473910d8603c01dbb6f9f5ab5ae94a2a7bcfee8864a198a0db422de0333bb0ec0549027eea83b6c8dbd65f0394e2e64b0b7cf2d8fab7eba5c299314c9ace8b637a385a07a207da7dcd4130f643b215b5814bb6400140fa9addb8fe6fa2753e85248b89fb2d44e75b09bf1debddd3530a7bb08b662ec92ff07b1607c1d0bc24b182b714d1f2a757e12fa4686cc9d328ba594fe4a3b9bd06673934dffbac0fe879134f8d1488bbc6b09d95c2e19e1df135b88e74916899184f7699d975aaecf45c54c9454b560e9e49e2079ff2d120571d07d09da781e9d019e1b996b843dfc2dbd598ffeef0fc590d8b7e6218f996c4d0c5cae26ebc2bb866d9289a4c0d54fe680442ff67d021818bf87ebbbc7dcdc4d180e1c54f6ddb5bb6eb4b56996de8e1916f6bd65e79faa235b76cff55e451d1cfb7a9b8d22d75147a86a64e38fc0826d88568072b650425ab56ddcf8db3bf660bd8775f9f51858d3239ddf3a32e3f38bdd4bc246717caa65d45558ecc62531c2671ff0bff9089106e8336f9507afa91a1dbfc908a08aa8ebc0148cf9a86d94e900295608b60fc689fe165a1c978d6bc35099dfe1cce405948294c045077ae87e908cedfbb396bd036d2ce8f969e3022e7fc14af97cf1880a21bb3cfb6eb4f4282032fec178033f1d3e5f6351061a3702b21e52773819fbf2a573474162838290b602d0818dc0147f7895114ff49bd0e7ef9a418488c424f717a32a3f6d4f585d5de4ad647b3304d023b83c18bdcd9587401c5d47f55acdbf7e332e1f16803f381ac0db92c9c6d7b848af2ad7e8175087ac8df0e90643bcf2e20a9806e57effc9f77ea332ffe054e1ed6223b2fee3c7923bd3409144e8ba394b12b31e63b260b7fb074d6ca5e845f01db971d18698c34ef6d7966835af8e3cc232c68f17822aab2e41216a44487090dd9c5b5d089d0c63e4813996630102a24e5218818a57244c9915675163679d6737f3287e0d5c6a7a0eba73425647dc13f85af21b429a1843436b664c8bad961d32a6215b1c3ca53b7a688a9494e7e539c7339c85c9b1cc37352c67804382225bd69d8e1dbda5844d3274c7b5a74be5b9c3c35ee8a70608d1753eb218134e08c92cc1b7eb78ffd1593ec772cd17d9a43ef4f3806c62ff96b90d8b8f3a8379110e3bf8e3eed6b35206a448d3036afbe96e63ac493884063d9604fa460f1c6b05d20c2b5b4e5e27d0fd6ede31802a187df117d403759582c41063721ebe658dacbfa543683299c412e5a473d66cde9729701854f44a1bdbf4d031dd606fe745cd7b102650c20df2e2674cee08ee0fe2b3936f1564e0a078957e7622554c28fc32ae55be5b28441a062b7036102e4460e30123fe9d5eabc36fc23b29427ab21ba1017af1d389c6a247d817353655057983633cf6e6edc523494287da72240d08e31b89a9fe1019f46d164ad2c18bdb955960c3e786b57400eca9621d2c70bf2dc0a689cd26e2c776408f10f5fbf74c1c2fa1bfb8c6dd43c3219dd4dab78652f1ff478345912a589288e871862ac2e276cbcd3851ee8eb7d2aec6e6f95c8f4ebb6aa87ef9870e52af0ccc756e9713250cf58d369a46ef5a965bce9f6263b339f5c77182d152b63f3495e125938a139c447789c27b1529b377f25a08fd14199d06df4a98b5394ba68bebcf88de4aeacf871868e3dca5634ade391527b3b6ea01567ad9c68d83f5101bd63fa63721bf463e9fd3a2a53cc6a831faa4066a934dee4d60c9164179db044c1ed9888755ba8acfd57105be237a54d9fbb2ad0bf16beb5358c090b963260a868a4435b42f0522a482eb170fa2a6d63f05e5227f196c80d02b663bdd89fdaa31e329b5a8f7c596236ee8dd800072b7cadfe56fac5377352ca1651f9632896db5f12f1149f5256fb6601161fa87077ee1535b9c7ce7b493cf826244caa7f2da7b7cff5081714b34c4210eaa637d8db3ee27efafd61c4c21219608b362315f7ae94c407a37b25f6db57a86c0a52b2bdf582448b2a13b67678ba5fc734716f8d368289b9853018aa2f03021aca6d90a8987120facc78c2cee7376e98c5f9ee76f61dab8b1bca6f35cdf0e887550cf5239e3b9eba62f57c43d42d27507941351d63a283ecd5ce9c422e9db632389542a77d4e085a7c1e457dd618148ebcdbb618e5ddbd6f41a11227d765e59bf3bb1baccc25184b7657a0c54364b0b40f2e03c2130bb272fde6837f4ee60134f4d2f2bbf15d291de03630b2c2bf8660eeac80d171d8fda8590342b0fbaa939dea714a5d9352c542583e57deca74f005e9fbbfaf68a2196ff19be26564001727131a84fa08a277493cd498a1d12198237f8032b48e13704a45f4e4f52e9306612d335529e7d8a9a31cad75946d31e93a2dde7c994899acb7c4b2cce8a1dfdbec87501d65b741f6d0660d613ef5426dca636aefc63ea12948fc59fcc864532229cff55025ed8ac961a7890dfa1fcf9054beba1eb3c6c6607e6b6f071cfc79539945979fe2f12fabc75fb4be6e2335eb599e508bfa77760cb880468e4ec0defacbb6bb5f35688d18820cf504f3d611f94990a2b9f2c73c6897d994d4e657d0722161e51095ba4f8a222dee74337ee024b524351b454c861e8ce5be7d6c381a744af589467c7cd39b1830e57ea5a43d082cc79c326a6def991823480a58d8095ba8d02c836226a5a5d4b49ea6b2dc650e01092ca1cab1e562ba10b5ee24be29a2bb805339df2e524508376e6ef38e04c0e2578acbee9ee3f5f34c7cab6860e7e4039471dc5c1a55f2f337d949d04f98ab41311b135eab77dd541520c49c46e09a017b2d0d51612d3a561463c9e187ad479e34723a936e2d934d3936cc2906903f35a2d93f67a94475817b82619fcc9f0059c00484153d51825ef7232496f6733e30b9fad50749385f05cbd99373950a60146266a26cbfa054f9fd7a508ebd0621630f2670a8c775316393cdf205676c015eaa0cf8026b8675beaaa0e248b0d5834d40d094d4aa87a72b41e3efbdba204e88f56bf76ea7605f0d9d3b5c8d784dde6fcd8db40378fc2abd849fff0513e3c233d308430a19ea8b7723be21a589eb9d4b23b240cda92f269aaa669293fb12e6dfc1665d7d2971857bfc8dd4295c3b3a5fd1e2ed8bb1ad456341dc6cb2d63a36fd5f0a99306c91d79c863ed69175c9501e6693fcd63902e187d975c01a3bc62d1cfa6998bc49c7fc594f55cb764cf25927304a013595ac9578dfa75f12a24353af3207de8947805e22b64705306862cfdaed799d125e26dbc6d3057c34903e25248479dd1fec57979959a726685e771ed9fcb712f508ee1ee241f4aa089c132c2d601406f8beba131da7da917675cbe084dc6725661c8ef96bab198b071c6ed32a537afeac25245b303f75f8f364cd9f6c0b1e26ee0f75d5c38cc871a897adb49bed233692c622fa718efdaf5791f8b6000750a9e5682f4e7a55a61075946c3b028b812144f8426b31f4c6472b93c9cee16f8320f4ad37ce009426c9e6a906f0febd39414b51ef18222f8432e7d0dd4470924a2e94451bdee6c6cf10843c1a50d10090391e69a59ba28dabf504df9fb14e1e0a153cc647fbad7c0376c6c422e529d44a5b2695e26043ada2201b168d8fca61378756b7489ec512688f36e7ad2879d6bc4a0c5d420075fe0b26832c234a861a77078a8e9a42be3862ac4d0d058541566a68385620e6c9fd4b9ae5770d7bf1a83cf840c2c981f94c866091aae8a600f1d93822e72bada029e7dfaa9d889ead78fddc01ea32d716cd484e7d57b2e549278d5c54a6beafa91274775af6312d1a2b3e45566b72ac97392cc88889e0dd7a75fb37560b5677453555e46f179391b82d72a6b6cd059ceb2eb8614bb81ef9255ba74baf9b8f9ef51110c97f783c77180e3f828b957802930c5f9b2f68b9c2ca47161bb9cdb67139144978d4ae7857aa2bf96b7d4b26882f50a6e8bc224db4e9c6cc2a1d1897b891dd44852710f38dff2544c3e454bd97f0aa02dc7a6b475a04693df932127fbf9fdab670ef461ab47788862e695899bcb76717e8d2ba333c9a9cfffba121eb00a37af3ce85c47a55b3b441fd64bd3750c4163a905d75adb72cd066b3e2ed66265d5ca0e092f28edc34371cd37ef9330eb7460f559353f3542bb216c46fdb7d9b2dee32799f86c4c2698f5b2300930940f164facaecabb0be27a0948fa062adc985be1cdbf3c7a8a2c43ba16ea221269212f17142f203723f912a44783d19535bf53ae49a385bc6f7e4ba6438cc1a177c8c8a27501be1946308cdcb309e661aad0ce31e36e5a99c2c4b8a3803f6f4586ade7d7194f2cca3c2fef98d2b3cef70473d552e24844794da59298142bb3665d77979e473ff3b3cd9d43c0eeaa10bd0a4f6ef99058cac4d6cae26c4877156cc5cfdddf46f99a3bc123913b4d16341d860da40e33c774e3 +MD = 50e223e4f32f90fb64ffbfa33f0ea65841d75dfad19d0eefbc67664b546e60f5564bde3351b3d49df2ac3613c15e43db + +Len = 44584 +Msg = d62dc41bef5d0526a8e594471c457daad5afbea6e2c7fc9d29a87524ff273664f65b8ec0f65dc2b9904c020e8e949c27cf7070b352aea49190b399ec0fbe1dab3471e208598d2e7e1ffdd5e9051665e93a1da087b0092f1b728b946d374c611a3776a7393d75b23ffefff320a9513eb7bfbc366825610504783950eca058697aa872c79ccc9eb4c2d45a46fba1cf905a0657199fd93d8e1349c4b3b4716a9f922e6d29792e8f9ed04a16b5c11618c49bb6f53374f32531128e34a70cd30a6a2c7270b5188bd0d631083c27bc2fb24040779f6b2e9ba159c7ee91133beec1320e1b8253c00aeac6adb5d4863215276e11f35ca917fb3a6bfc12e4de8ae9166001d2acebbbd364d40cf9e4b96cefffb5d8cf34d5753877d077a135f241ed925acd3ff5654f0fc66a157e76a8b2e6c07c5bb62fd8917de1f001448a36a821bb893a0965a9c5e699ef91e9913b4c22f42d634e5698b3f0fe3361a3ed9206ae1c5510d904a0657f63cb49e53e5a81ca222fb83fb0fe23b95902616565eea5bb3a271656db307603af65021884ed9a07d3ea223245f2280177c3c732fa32cb719f651529f14242990227872a6bdcdf008ec669cf1e5d0bf0e2e05cb4b547c1f8d279d6f94ebf0f6ae6789fc4fb0f98dedb2b54bd422515ad21bfe8909d13cf775bc91e6ffb8d269ee2c0118e3d6e0dc84281ada5b9348b61bcca3371bb7f3c16c3bfb833ff96cf5c7f68a62f38e286e74c303a2e8c70b8333b6704fd157352ff90c16bec62c051cc43d62650f4514a6280a0c401c2c3e34c270024dcb6d857574d39fe422df5f617b87359987aa5a262673912c5631453d308fc5cb7a39494497f8e3adf671c046566a706b0d1c4d60f8764ee23784a51f164c37236e59151fab028e768181dc4ddd4dbf73f01982e906b871ec3084f25cec5bd2e0085b5d695676fcd8848e07ea88a75f2ee1307f10e980c6b4c1b0a1791b2525abe8bea6a402dcbb3e5004c7aed10dfc0650efb69b098599d67b9636f63b4eabc17fd17562389a46227474bffd5ef7f294bfa5bdc9ff1d87cbbeb42746b52ed1eb4e524e3680362a3f726c55688aebff448e00f93022eefcff1b88f6fd214c3463c4af85634236d3cfda4a0c82dd506eb06c7fed602d40860b02932a8bf82d4fc58357dfab2722df5e0c9c59bedecbbd42ab712edc76d8af5a14514675b25880ab0ad9a1607770b98489d1c17ef7c48785fb8321f7881dd576b141bf4cd844837ebba37f15eba6debdf298d865c0c149f4bd346b53e96694eb79e30963e277a4ab2643dd4ddc4bcb84a74012e5b258710960f37f7403695a22dec3c97d697880cacb49207ac1c61c534865e59154e0995e975eb2da7e8cb1a7405253dbc5bd84582b11fd2f44ac2da43688e4db10f02f4ec0b4b9f9a35737f35f1d5d119fbd4bcdb64cc7dddd749c11f21775258f0daf646db3f9542a3f39917b9329a1400e23b60d3824f8e4a5d4171b903b2327af9639fedb056c6bcb430c36426e2d6f16c88b9082791302b6521e13919b36634c803a147842b4f081e0ce0fa98ef8756d96c8d0ba48cea03cb2a16a8a09f1da7ad9ef2f3a55c050e9af417846f0b4db891af84e2e285e559f624b90e82bc7e5911fb3af9f9310f568eb21008957c539dfc194797c8c748b54ed77174a653b2d45de3225f6af19668630c7291f18abf9082727e323d993c9f3b0ae7e1f4abe0a0f71e512fdfe6c1cd82cbe6246b7fba168b81d1b92b42e9a02587c35d540e3143497471713f56b90c51b713cbeba16bb97f0fe636790b763f7414acf0aec2cd47b9ad272b748aa5ad3a97a28d593afb00c6e468b00f3c0c05907a4aa3ea10db34b1901d6765caae38a4343a739d909173c8c8fd30d51dd279e280467df040839098e6fb2cfa5efc36f7578483a0eb569bed834dbdb3f5f123d0f04886a89aefe5d67768831b8db62f9ac627c7489572ff9edc015f910e908bc391f7c7fb6644bad30b0d72b0a005a9f74acc477ed50c28419dc11e57aed83a242afc47cfebad98f66a9204a1df102e75aa1b0a2bf24c9c408c3403ed1ef1b75984fe0f0e725006a95b9e3ed69200457cb0bb1835355be5017203153ba6028acc67a6259e43558c54a8d92a3801fc777422557986e6618bee16d65d298d333ce39a9c9369a6e5b25d17edcfad742d4ac5c99036044d85146d4253e1a01dae5408e7876155e328012d717f351e32ba48d86d155599b1f00ae8bc25ab869c985aa21410954c4145002c7d3a657484ccf913d68be12c5ccaf4c64df2c3c5531cd619eade3935096438c205c36695b28be4dfcb9bdfa4943a5b6fbd632f438a5f51d4319a54f784af2f58cfc5406b041e91a515ed59eba268c64bd41ff9ea898c533db1ebef7cf74c6f54a5e6fcddc1ae88cb7c2856e8ce7dbdc25acf29a097c962bb317a11abad6380204dcea1d2336252bbc8f5df835fa1c83c161ac54ffd3e08b67beec26ced1de8228f263734a06376dbc1fbfba49ffb7021d1a9d7de0415cc9655f00aa7fea131c43596c7ea51d87c952fe3b233d4b43cd953236635f17336c48828f2442918e26d05c557dc8eeaed50d9540c1847f3b5cc64317b3c0f82cfa6dc3d812cb6aa8484c95cf2f29fc14f7388f7123b40e16162cc7b1ddba56a1ea518d8c045ed7e9e7347029d14cb842d680474cb8506a6ca0452a854fafa53ac2a06a0b57815bdb8a14860622a5b5c0c96157240dce3697818c06028815764ff9b6c3e6aae788e5b76931e481c977076658399772a1d52f208dc4da25804c5a1611359e7cd5c1a0d5af2e357d2c7e9f23d15927a55fd8bc03a6f15c967499f1ae5c39a32be0a8959b52b57983433ee098694055146cb396a184060a6976e1af08e43a8556aca02c4ef0723122b23a841a8c99902e6cf87780819d73fceba5dadc35d2d58b8e4add8704eefce9dde3e250b79f7971c519b7374c0219ef57691d8eed7ce418f9fb31ca1c862d274add93a186fc717cf989de3c3fee7cbf5ebddfa767a351ad9443c18e83c252896d8a10a3572b08be9edb64e5d9bd1ccb45e6a9ac30e0aeb7d1b6f55ae74e0d8eda7bd1ccb495afa51980d3eaa5f86ab1c1a5f403d5bf4ba636c755a5c363ae85f6156f843bd6e6cefe1cc3a1212af701466e5754c289c91737f76af584bdb62d6509327039694eaab0f18cbfd7bf321838924bf583faa77959b99dd0c7b6c4d39ba9d30759c737a6d6c1c77d363fbc853cc43a9c966c575b10a066bde8d95b270e89b9b0096b4271d3efdc9fc926f6c6b776bb807669591af12e6e1384bfd986222b6f10b4efef6a3cee646e0d0f616b3d2c3767a07c3d577fc61c8817b4d07f9b016b8008afaf1e764fd78e7e538cd1324746a8a10f749f1109ea721e62c081cd9e27b4613501fd2486ae67a98de9973b7a51ca04bd8f40695c606805443a1b3e643bf45b1a7884ac15618ffb29082bbd17f15227e0fde9cd5006d068d3adca71f600e652ba7353818e997e0fcf591d3bb2adc7a72440f9c1675651b58b8c1decc62ef0e4bf92d85964aea833bb6cda3bdcdf90eef1e90efa14c75277e6557413570eba8d745781780a299523a7a3f141e90f548bd45687bbeae2692c8eaa6b8a2b3899b98321fd821182db3c0eaed0c289c578fa3629f2ab4c3ffc4fbefb62c5a52514f566929afc0d52d1094aee1742119a74a6a1d3ee3cdb28825e21b9083a676cb2dd9929e83a40021d07f6d2335522f6ee3da1d4b8d4fa4491e44173ba7ce47809be854873e16c2915b49cfb935030432c1bb0bd11283c0cb15e88abf7e1aecf7024d57ebc75e430619ba7ead5e7cc37e4cd58ed559b12f9573971d25f2d18eb8cbce44d206c4aa0872991f07970492d7ecf04f614a21182fa1197874ea3d544c5c34c344e390201dceb05dcdc7e499c709d3f57ccd1aa422053642b44da4673a1f467b4a4609cccf95c5dd09d86502d50b47292fcae6fbf509b624ed054fee0a7ace15eb1778d7a52fa14ac2b1cdf28a5a14938129cb44301460c528f9861245d79238303e256827040c4a013a64936c5e02da7ad212a85c8dfdce6d1191fb729d5c8d1fa358a8de7cce85cd5b740d0580d8a722ae024e00de55e6c235b7d01934f2bcc32f59be5100aea52efc4388dd2660a182a3e55ea46e30b6314d41bac2041c6c21c86fd309f6754f2c051a2b7aba6071a19a0102d0a556e5c14177e0f675a4454357e40f8cc8eb2dd05e411e66a2a1be877ca0600deb8f1c7af9a16b3cef51f130c5fe9964dcd8e721f0008a2948eb313d2f08a0e2a8a203655e07821ddaea15f0f8069a189c042527a19f9749120672ca9d81ebd84458418956f14e209e385c8cda4339316f378eeb5a656c506ab92836ac55697627797fefcaa6f6cda3036b0b52ff9f36bc38ca74049c32c6b7cdfb8a46ca4144bacd649da36fa3ac5112ed754780f3afedd082cb858a1031600b95cd522a9cca631b999dc7947d46112f88d2a3105e2569c75ef6c7772f1bcf389b07b8bba1918b2dc5f7205dab224920e42b4df5081f98e505ffb0adb60b6b1fb84060c679209bc991b1951156c863aeaa872d771825e2f120ed2a73ce8a9c87928132924bfff9b8a5d50dfaa5c1c5a182ef2be0b7bfafb556c91c109f1fca37d1d1166940b70fc1a86a725ec194d9c1136a2f760c7667f7509a6dcd50525df81e39f49180cf44ae4379ab86d1c905d60600218340d17280b56807f20aabbd9221c0b45332cfff461d09a0bafee9b3a702b9e94d7a5938182e3cd1c7f4b353cd816e3ef77e3faa50df223942707b4afdb09e6f1de3942286631db39337f18571e64b7ac58da8ac9530cc5e654e0732a0b8b69c3aa30c9694fb1395a0faedbc45fa60500587926dddb910f76cc015d258c10a56eee149fd089f265f346630611262b4a9fe948355ef21f5ec9ff02e94ed73a0867fc5d1c0abf65ff998a341daa0c94f6bf9da05cc951184254603d9df2678821536782e4545a9c54c14d8a891b7d53a803e849f3a9531c48aa9249f1ccc75b8e95b22e8f69e5f603eef2deeec1f2e7cce15b8da07b828bd04107907b1a71548ec36ea853a7dc139b873cb9a559f7d1d3fc69e3c9bc69f7779c22a99077ffd3c040ef98f78ac7657a3e6da3433016a26ba98604f5e873dfbd30860dd861cd89b1b2d778e1af127c3e5918145ee0b9c9e26d5239bb9c3ab50f82a435c96464c6e18d98b0887157c8368bce954ee86bc8d6dc312a71241907ed270fa9da0c401bce35b5d8727e01ca112af3ae99a3971fc76aa52fbd2ca958e4721ae280a5fa18d64fb16926219b024cdb19b8c5cee64f129d40e1f62266287418786863edfd1ea8300deb2a08adf15800b34c69b6b3d776e886c9c281d9e71a7e8ab3ea20c3bd928b4dc6d49f9527b13062e1ec079a3932d0d94f88e76f154618d44d8a0ad87653b5d394ec52fb15e6de8b11d31e03e4f4eacafbefbfb053956be7add9f8c5d93a4441cda7cf4a3c778f9e4495768b7b2b9ade573d7727f2770c375d4076f636d4bb1ae9bd70fd0bc1b83f02d9ad9b6c457585da189a40a2796e35c453f1f44fa18eb17183c4ae1483eccfd4e63fae28e0ef440cf7b594c40b06757b8b164a642f43c7ed9146b7e70c91d32361894e417c7cbb5861459ed7aa79790b6c405324ec5ea0b67c83b4e3ea5beb76c236f63686b23e54dbc6b96dd61bb2cc6e0cc8f25753ee849be82fab9b8f7b578ea530887e045f8acdb59ef72c71b56716d7f65cfea803a07600829e9eb1054e3d7087b7e1079152bd9e99f40c1ff343ed3e75e550ef82c2a159484d72750bb3350556355e10764531fe44f4f38aeeeb57bcc20bec7eee33944f0b38a520113f3bf0469123d360eab1311a6a81271ad5ecbf65312ffa98abc57e25d0a556983a88bdb34bf0b4f3bbc1e3a4d52399099c22c2ca05a9d72473bb5332a6019d034dc1ca36d63339a120ca925eb559353d9680738af9d8991423fc6abc49385804d16da23bb079c5fbc251a9b29ba0a0196d8c2e027e3ab4ea54ff211d0ab80c0f7df2d25c7b230e6618fda64af8885e4f79bc7edb034ebf095f4a12ff9b1f4d75abe7d6f386cd67627d0524824c7eb4225387c26f49931c13cb53bcbe4acc80e9d3b32cbb73d76593972e90f3080266447374b5598196507c21a28ae3ca4e4ade9deb4ffec2ef9d5bdfd06807cba1d9286219b4047bd6f0b4fabd0a0a7a230fc65306bd37e464533dcf71365b07db8140a7dd3b0a78c371509f19c68cdac94423ab8c011168e43bbbdea778474d1df31fad35d6d608ea56d1b73f2d058cdf8c98ffe197f5b0cdbb4895d9aa56ebf7a327eaca03f1bcba25aabb93b9eed0a44d78d8bdfe7f6caf66867d9e492494e715fc08e04ee804c1425e24ce09b366d60b55be67b0f8ed07a1d80e5bd12ab87ac00e504f1413618e517e7b3478fdbfd34ab239753bfcc24511cfb098dec3d70145d1893cf02e637fb76e376da4284c2a8000a27d1c158d061ad01cdbce9a6148fbe7fc506f737b2408afd1e007bd8c5a5fe3a1d5cdcd9dc9417babab2d18e78066a4221fee9d2909a9d5e3220047f0d11ebdb015bd7f74ed0a44d57d76c9fa662aa8a2f209f5ed9f3f52d3aa4a322a2d610145c387b5b30ff9ae32c94817fa589c67f78d2e3849532db93bff321698ddab50eb55a90ad890842a3c24fdad67d650648837d7beccd3f97b8487545fbd50722f19429de9462d3e4b6a0713d4d37ddb10ed88a303d890271c35d92d98182439ee4810d2cb9c248c8434f63738bd9d811f8005fca1fcf63b1dc86b2a3a29d78720f056e43c4b14f3573558c44396e406c2f8266113ca94a9e2d4c3d6d072d8de79ba7b4ec5c38d0756e3c5377fffbfc0bdae606cd391e9f81db369bfd573a6a43b0f047ed295db3ce5b8b22d6848af43622b5a6c5c1364aa211cd341b3bcdf7ce7567900ed52ae08962cb6027712210352f76b0c27afa3349f59771915bec1cd21394f51905a73fedad8374336dcc384f28b18b8c0c7142beaf1eb8265ea2c195b2ffdfd463dbb944613bc8c2218f54cd35ef9feb20a4604868ea72a1edf4ce607831b70997ce34d4a97cc39c35734cf780b654a75e997331488108cbafec2b7b90b1e37e498899e7abcccd88508008152e9112876d5a64bf766de06c4d91c02e2007cdfc2012d1c38fb64e4f1abf706f6a054154f6ef1c3b1b36644c6eeb75c151bcdb4ac473c3b07ebfaeb93d376d4d5a9c49d6a05e82ed5e62fb32bb03337b4a577732deb356f8a071568e5ef0e5f626dd92d514b17d1c687b0ce7dbe0e0a63460087a16db74e21c53ac9628f3c2b3f7508419f9f0f71160090134778a6688365ff6eb13f104b51aed19994047eaccf57e8869f821d7156f9241df370aab6979dda84d7e00edbac4c8065e51f4478947ee048fb94e056ebda034b0c267999324628868fe0d1939406bd9ae0103bf3116286251e37e686471ba4271c1a9174d6074fd033c226f79b65efc51f87b3c0e89b508781ebaea41b469d3e8dbd90cde559d6fe8df46d7c44f2ad50fdf64a566c91c60cc1409724bad334fdeb9fe628f2a6446dd908239603256ceb05ec7e282fde5d0146a73e9cc85a31e1c032000a80851ebabf7dd7d96896a4dfb1cabdaaa4e99c21acb00350a633ea8676047ce7116edc41abb5f8cae79efbcb9c2187726e4bf9da4ddb93f4e708e568a787cb4317dbf3af185104cf02c6c82b2f716a03de6dfc97b48a5efdfd31a8e4bf4c69a326450b6fafcf9a6a4ca6907ae64ae3d387c82ae67b5cc2e07b56ab9747c2e68baf4269efbc92182117a6eb375b1e7375fd02fb42fcc37e20c3e0740cbb7bb061254cb5bbd9390c98065 +MD = 0a53523921e16516ac76648367b4a285bfce6b711b99e4775c00ec9d15abd092d5db3ddfa3560f3dcf47f44031e91155 + +Len = 45376 +Msg = 7f16b90a18deec135d32c836063cde963fc4e6daa1555476619b2c2cc71016d2e2d8b5557be835fe476e23f4606d8203f6a81b9b42c2141cbca3c4508e1ec63948d04c0ed54bb680ae7464414d29c8c7e527bf4e502b211c49589608dbd9ac3d19c7273c104d9920fa0a3226b5b6d86c73097af9b2d8a2fe6f824a5b968af165be85eee71337036793f935aa7e5ddb7a0715f6a65011c04b95e88852a879bc3a9dd24817c6511edbe20816d59166f9770b14d85c121ea38a2553f7f4f7ee36431f76ddd511e212064d017dafd61959ede6cfcb24e0467243868b3f496c318708ac385628dc3407703daa114135be2463000b7505a2d356fe20580959ef89d611ade15b190f8d249f1bcd7b92979c8162c1937e07400b76445b82fd2d69404be7883993af9236911d4d3063aae2fc9971912e8f32a237fb9c9fd0c2ccc09c1011a708a7f24d7777723d9c6f9200269418d8a3508fb19e0c8f540b013edee64a1770163eea2997fe2451d84a51d76299dffebb6825538ad2a4e2fb618ca96524824d2b01a00ce04dbdf3ae9aef51f8d04f6b3e80fc71417463b1688bbd0b63c4d8a50e981be0988dc58ae40875552f62ef87f43f1df40c1b54291a26d9eb2652a4e088aa638b08e5c27e433beaca517747bba44e8fc233ef00b3d8dbe930f7f76b6561df81f7787e3e3693dc569aa436e06d18545ac5fe17eeb56c52f3c41edab79e61e17c0a2f7fc01c9c92c2ac71c8410716fa87e3b5bca6999c32028ee3250ff24f555cae7711d197250635e8ff55f2ef67e81d069f05b1c531231b768efdfcc9f5e62aca965cf80ff8dfb73698047c8fd3c52415051b96a3f3cf4864668c058c193aed45d587bdecdbc6507e82fd664d2139a5f82f25dd99a9db9040b4fab2a184f9ad097cbba897976309a8066938931beea697654c0f111df2fcf2c06f8b71fecc72fdd31f4276f45de99c6c707bc8878932daefb8b37215ba9263d21219644f5b450922dc12f2b95df843fc39b6532eb54ea9149051245adb5c79320be3e33e4d2d15b019a074b00a3f83feed719ed81804ec1efd718fb4fe621d28837154944a3309c6ff75629f0dc545b9b335104c5a5b8b53269c1beacbab38fba24c2019fc5ecdacb618254f0d937276b4881154245c6efc345930c6e93fb0f48ffbb09508b64aaa65112688b3aff07d17f509b61e0d7d604e31360e01266f5b73066bd01943660834e9cc11a723a9160501603bef78a1c99dab958bba685b7875f6b891d50e0a0d4c277eb490f78389a6367fab3fa5c07d484fb505bd0e5e92be5201a2e41e1f02d553a6371631681d211bccceb89ac3c578a5fe44b1205ff275a2adc9ef7b8b2ff6f6ab63e2db3f1b9f38b06c006193e95536d90f3fa445e1c36f24cf9e2e38dcd897f5009cfcf0cb4716944cbf0216310689ac2f0fa4faa5d03fcd7c983e0c51a3beecd6ec9d6275423cde379e8336e5b426e06dc8276586c39d129786b3f1d57ef3f8ac78c57f61b732f8f544eeda4c8696de8f12366ecec40e5aea0f96ceb291bf814ceb7c2ed7cf81484e5b4aeaafa5600d5d97d8fdc3fd1c0e3bdcee8a2e05a9ef7cebca571eb2b0380a88a04d56380cd4a1fc15faaf934e945394c30f92023aaa0520b8e27f87472ef075f7ed8968239d21ecf54dd8b12c55fae01d4426aff81aaf344db84276cf94c9ca57b1905d2ccfa60d81df877d3fb9f768051131356da741cc92bfafa9cfd15d2ec981b23eafd1f807c096031f0e2914d3825efdbc21ba85938de00d45cf4d744a53453933340ddf83bb5b96c0220b17ca9d13d06b9bb9412e4804a6755770d6c600e56b6644ea23297817868801c8c9f45d19f36a630e3e48cb11c05ff0a24a49d54a91fc66d08ba001b01c9e35c9f2faca56aee2011f44871cf1a42b214b9a7bdc5af2202327e1915e10a02b46755a83ecb348fbfd561b93458a9a0273d38c061cfed8f80258eba3951d5a56ba33c838cc180bdce01a8a154ec6e90c6da2e98f9d1f89ac8bc9727fb0c191481b6d06c0716e3dae32d25ab53d8bdb70972078c168a34e6546e33dccb6e28f28f08adac5e39b279879e8531a1cc3b65779b6034184746f4bbc0e1633b06a9a1fc2f20dec2b8911c33fc33dedf255c3e89cca50baf978348574b3c35ca540fb55180c67df501e42560bcbe0d5c8294a4c87c629d2d099e53cf6380dee9d4cfaf17a42af465a44047a6668047ba52793aac210543110bdc997cb07bc92a176de1c70fbafc852e29d57d70270869137e52bd6129980c1ce29bf7a8698efb7a6f1fd83a02d0e3fe05614e601ed9f95418af74a32c267ebb34ddb8b1f68aeeac479bd3a97f2c0292577da1bcd436eb72dc835a6da958d97547d148739f6763fb8bf831e49c685189b48d0ffce3a9a01e3e80d7371dc9bcd990192f53b08f0c06a0b78b61e70051529111f196d99cc7b4b31a8375f5d38936a207c5d8f67c374c3a5c38a7fbae927b719eef1102aab2c4eed2e7d0be10df3af24fa479cdb9863a9d48e22d26ad9572ea9661021b3e01cd262c7cadf2fc2f45053363cca2c179605e1fe0780497cac7409affd06fd1253c0da99a84211fe9e35f655c38121e714c0143dc0f21f7b2e7281f04029d0eada019bcf9e9c4d69fa475482652983b1e5c0b573d58fb47de510595162f0f410b87bed8f3556acac0f6cb7e3a92a1a1c12ef0cc7cebecf2bda37d8fbeac5302bf5181a01f3d6f66fe68d65a017edaed1a234616234e93a2d14cd4716600f4de39abf694f6385f3598593a7e237d807779d76fb6c8f77bb2a9bbbeec94d3514e2ad58219e0acb6a13f664c5d19254ecb70c9f230c65d01bcb78ea153d38a14acd39ca8b197211254541ea0794afca2739f696216a405c21b7b241049aa9baba4f43ffefe522bdea966c0bb55416a07ea463433dafa782979651a7020728e82b0ed5de952da23982ae81b116385040baa15b8ebf0323ad43125e0659ac3e9364b2f64fc4177bebb53687c37369e410a3d7e75fee8d3b42efd1df454fb272232ee4af3ac5cb343d4ad68729140e5a7a00ef0e9e137677aa617bdf4c2d414d00514c0787e17255960b3588cb41503be49b90d93376e55f4d62b963033b8056939591061f5d34665dbefc929142570eb83a634e065f037c93b9337552c0981542c25bb4e88438f0fc2cd2ad635e4a5b5da60f780016f855e530901c2106b112769f541acb9da77bda1d60e229df51ab3ba73d5c07e2eb72a98d78615853f1d698f5223fb0efa88d5f594e38cb0b9684ba049504040d045c4999954adff083e80e8c6d2b80c364b0f3a743b8312b3e714287be77e0dd6d9a2b1c8ce29e258dd0422cdee72161036bfed0e769438674f73bf661bd819b4bb4b9de082e7d3938179a9d1c7a7d11ac46e89de353ea665ea00d1a25dfd18ec93359a6af386576ab4480a6d0ec7b1b87ca19d3df7e0c1124f320bbb3e4b7000c9e753d29073c220fdf5b11a24602c6bd7efa3d82f392d0ef78dda1b2d41a373f7d746c1fa3ec868b7093a4398ffc5c76ebf1a275b965ebe7b8aa93cbb7e47c8859bef939155bea488090283ecf5023d99767c960d86baa333af05aa696fc170fb8bbac1e6473956d96b964580ee6640f0cc57be9598e55fc8618beea784a50fd25d34f77981ad1233b78223055a6663fd27180bb43b533692588874066b66f7a256ea8ebba3ae492f634286eab7873926fd5a07c9ec88da39eaa7d4f6728bbad42f48123d0ba17e14f563fb91944d1306d57a3d572aeabd179e568c083887dbf03cda0c6e582b239ce442fb9a6f2c9405461506dc851d51c3fa00f3ac2befed8f061cd7dfe7afdc1fc67c0175a6aa3ebaa5a70eda79853ac77453b662db2831e9218d2f0258a40a26027ba7b3d94a758f9aacbfc186b6ca8a93bb4ebcb4d57bc705b76c6619ac20383ede48c58581db0c8b8294322b26a385eea4273a575c1d8139080a8bb92cc0deb1f07f3b29f4c1aa0ee5269cd5593861cbaada3c113089b0121b93d395aa6e72227eb58534f7dbf08b30d17213d30b76e13bc252910752cc474e92ee6da98bbb06b58614452f8c6886f24f5275088f6d95d39a1e55250b3e4f3d822c7fbeaae1b5516b98c8e0558a88b5daae677e569e700eabefbc3e15ae7044dc2e6a3e3eaed4bec0633edec9df16d81df669b8d381f649725754a6f47571111b64abbcc97adb7a4f14256f4bcea7e583bb0a2c98c09f10a7e5ace44a2bb81eda5fb2ceddce4000421c0b066de1c26a967cb76e18d2e100a70b339a6949cbca63702dc8ee2198ed53fb5e58a2a0dce3e0abffd1d6215275ea38772de45812a071566b5f7d1d4c9def22adca8c947dcddcd9521c53447a0cfc0de6133dcf233d7e72f9e70d09e19e9e3257d08e252ba4f5854c8202a4ae1256fc1eeef81773fdd54657e4007fde6bcb9b1b0f29eb4ce5b5204dc776da85428573601585e99b6e205113fb09f7b98211dd35dad25f782cb64ae441224e85f9f214882b898df00aea23bc808c0a097ddb7956c829ea23d663559e83978936c5474fc59555ad28509d2e9019091f34bbb2efec5b9313e66f36e0db0349130e20df95c6e78caf8adbb3d25d28f3bfc1d822b16519a0852673bb6d2844a96472993586fa96810dce18b8cf6234fe54373f955e6f66c4866a706b6b14cc5af61a9ae383df36f550387436765dc16b851b6ea55759d791c038e1b15b1f0eb0605c92541cf32d3c1f709a97578e52ddcad4f1bd2cc2f07aab084447cdb5805c0bbf4c21c2c50dd7b3fcd865f3926dc78dfa45475f1925f1af5f14793356d5a080b8f4b715c33d5ac633da1ccb0886ab5701f5fe6eeb0c9955a3ded01ca1534047e0389e768c5037bebbfc465e4f121bae72703cccb6f8c4368d0fe6f9f39d9dc9bb8442757ecae1160bdb5d2dd4a47b0cc2307cf8eb9f24ba6134284bec292b9ea1644d9319220954a9e3dbaa37c25bea87d3498417541d59c6c81e92e96a7c3f48650a4ff9e9f302fca24c63f6e030d019c52cfeb8bc20bd3448245f79f6021406e3230c8f8740a99a9329db80729c462e8291c95e2bd13d2040e4122c305fc5737b0269488e74a0fa32fe71631de0c50c9802546647a152112ed85b5ecdd7bbf4a932e6b363f191a20e24e61d36b0d55a7209506f8403a49d8e7b8bb0131c7020da2ef56eac69e41881478a2d418eef8ead212dd8659a9d1bcc38239ea4907a7eaa7125c8cc2020c438d0de11e2dd8c2fa5c44d4f70b8b41284b8d398f6d643748683e86047c6c03b915b62498f2f2394086d5f2319f082283457ec2d8e506398faf1cdb3a3c05af52741b752aaf65e7221a6a401d5d47fb357a00ddadf8143526425463164af4977771e3dbbcab585409deaec4a38c7154a6b2b991f6f0b6b477e98d2681ed62438ed6b65f362ff4065e9c4688ac75adb53eb551e69b13163de96e6f2d616e773c01693e0780836087871add941e6124a7654a71e484aa5958e498a47fa0155a0936f320dd83efc55fee2119eee396feb1833bc19499fcaa8dd02ed124242a3432973b07e925bb4b14f978a2a0e15d625c004ee8fdc3532f6516f9a125d7f52c408a0b99324f2e193012e921b202fd782f444c8f27e8f510671cc1b9899fbe6bba79297ec0ea91583ba03a3e2a2cc069b2b7fc5d1bf12b761c4b4dc45866cc1928cb5e5f9bdc2c2fbb0b34a01249ec5d6dc128fbe0c73d890a0b67689a13685d12e872e4cc0f47c73aba9ff07140ca7be9cb96107e507370bbc5d54d588eda5f01382db45a692a483f1743d550f9a2ecad3b0f45fe761554b7df601c9abf6a487d2357784dd41dd95389e7f8b65cbcd8417b5b4267206a5c84c3d07d668e60400c11b7d7ad3767a2fd785500ab515f662ef142aec136bbb1acd7ed17c6e3036e386a167a837951ccc54c539638c0d4befb078c31159f507ab7857f93c1a69cfb88963c08d684237f336eaa6263916409302400746a4571e02b344d985fbf730e84fdf12aaf3f25e2d044220b36ac546f56af681fc80f660b924b20cfa916d0d0b507fd8815929e1e2337823ab9f9ef17f4128ada37e576227334c0e0a693fb69a21d27c91065d85ab4b09496f3617c2a92b42e4bc0afeb4d5756f5725f1f3b00d4a53896a8a019bf0c151ec8ecca42cfb8fd1e1d6a550bb6c519872ddaa0dabdd109f996e62caa75b2cfe977ac1e8a2fef5521f63ec01f8245e53dbb21001ec923af2f72d1efd3a32e47bd4c3c439c71be24fe7f42d66edc5f22e0c13c25504c5101a5d172d2db7209e461efa323c0bfaed27e5f808042ea9c3838ea31f9b76de465225ccfbd0c09ca0d9f07e9a43e3e46c7693e00a7e1d483900ddb0a629d5563456dbbf299ac91f92c3d3c17b05d180e6c87c6c93194c39d90273fcf4a482c56084f95e34c04311fa80438332e67758e279f9de208a3df70a14ebc8698011946169092a8c05c12c3e9bca04805a27c4f617b6b5612564f862c49fa39341044bad7f85b4bdbfc5b6d572d1f5b1f5756d883e1d92a39f53c6797e1a2ef05bdd63ab34e98d4872b35a55a1e5b7663cd2ab1f39a8e6863c7cd994bde5cb1f550f74e125cf049ab32c8f45a59fca0b94e21631b6e33187a152ba6b108cf86eb10ce7f5ce80cb42f593be1bfa4abe2092063756224704065277d163026a476d0478454f9bb941cfae8b6f5f1c810433b8c176f2f86ecea0c45ec6f2f0283898a3b4056519d2f8af62763b6588dd2cb38da66daec5a501d57b7a03b186212c802342b0bcc5685050a5e68ae5cba9982e652773c006943e22ec4c001520ffc3a207c6dfdd3ad3f951ed4ed6566190f712e3c7320d37b6e4079b6744a45d1e7e7cd5a2db4cc6b05421bd21b62dc70da9ff8df810bcd58793f20d3e69d596f7cd8ef1593b721587e15e7a0192d2888a2142d84ca8756c70be70b643b82f6b362146ff6c98e383c53156b86104eb02910d9b373751bd691cc4123b09e81846341a33645f4c17bdf2c4b8fcc284dde1acbf574f4ab50b57e66544e0135236b48c38e2b4a3fd85009afbd3cb988b319257c70574f94ac5b567e28759d28ef132a8edc354cd05c2181877558965908c810cb5343cb57b930e1bfc681cda06ee5d14a953e95cfd555105a7bccabc2d255a45fa522b11dff9de7ce3558d9c5264704a0c22d6b65c9547ed1d58140ec9b27a9e16edb490d05082f567de409bea1a28d376aea17bac28693938d5e9dffeaa6e7f8b656db5053da82fda70ba5b4675f32b9955ce0f547531649ab4a0a22483a264d867baf0d717ca86bbab7f4cefee4bccb4b6d103ee123d19a352fce7d3c4b2d88e5320d6de8546949becf3f35f09bf2179504eebf165e8a2f35f432394e41c550dc633c983ecc8d3fbc3bce10c5ea9e457a09c19d716c0aafb2817e7e0684b64d72f685b5fe4bdbf4bae3e988033b86fd0365d20377b519c3b5befa73ed7cc828afd330ecad381c11c3afd8c534f573e637fe6917b2a27e134593ed418a92c2899be28567d5fd183ddc87e2eedf802ea81ebdcd01a99903466ae8a10f652c6e173f0ccb4bfd0197210f53512b8d447cecc08a48eae4036e042ca55c0607b4927ba2374cc3aeac616563fb6ba6c5a9285a264e20faec4988f794b2674ef790f75dcc4c4ef46f663db0e16779840f17f89957ef9e5848d119c5a9f70a0ebd2a6563c6341a09c897f5aa8f7fc2f0f3f6b6525b570a2d8005e916745c8c6fe2e8a43897d5f82841a74ffc772c9010faae282c3b6caca01d4cbf93fbca3798ed347b8247192f7a63ff144ea154290caba717d0fe18cbdaa60d65e3482751b16675b3eadfe70926b5050c4713e0d60d8f494ae5ac42b102a3b2a1af635d23e4d61214176626cc54c022fe90d7b9df3b2cfd8b144ed2a4419ca23c9f5252f557c47566b2e4c0c12e0abeb3d1f5c58cbd0d29a005eaafedbf1a45fe5a1ff00f32b8057162629c30d91d42f4b173ee25bcb737525f8bc3d4a3a403ae89d21db89e3a +MD = 9d7af269d49bab3b400d2b66254fcabe81cee8bd8d0d2b44c3393bebcd776402746773318ad6509fac19c1a538491094 + +Len = 46168 +Msg = aaf94b876975eaad2ad5223b24420b374cae59d2265cd604dba310708def4e8de708c907f897196341e6eee30ce700a90078491ef3e57195ffae8a2cd88bfdf35caec4516c48daa3fb4ef025647d6216019c6917f90192d559566fe7679d8cfa3372a42b6e9015b47f9792cbd40d18c776a22385e1b8210a12222769e12ce3e791dcd25ea678b2dff6483b9b039d0a048813de2f5212067d519b1a7aef41ea05a075b4b2bb079a6c88ea525f9a3820155f7501def51829763f47b0e239e3899b88c4b3ee5646b3a35c0441dd40e342412253f65a72d1733c04b05268661aa8f0715238dc1e3be6cb9b1e6fde9ea858d1fa32246b7046ca19c75e66d61eee2f4d82a5a942bcf01c2e6cc144295c8e4a0d0e9cf3d9977d1853b0d856f20b6806fae3476fe9d76d3b12f8732888219d003d8718cb6b90804333e9a68885d38f153fbdc0f39918b82cc067bf83c195de62a98c2f14ea03573401975066561e6c456438969c1926dbd880e02abd9d615859994667361f9708d405e55e562f95057cb07b53d133abde269a8b3e3ee42d14cb54dc4b99cff59d0a87f959c2d6df64a36caf7efcad4cc7fd5591826f5ea018a2237760a6c5c51dbdcefbc91114a591a3e1fba08450b3a047fa1a7eb6d2636ec44e3f30c3c8ae91d7231434abb18f9262548840d1e48871ebd14dbb7c0a1e1e1b1d5b42599f58003fce6b24f8754471ca107de64b317240d12253c02acc782e8dd7f41ed1136c72dd172a2060286d36c25c031b5afe1a17e135541526e119a804c6314d91ec92f0994576b14b91b1e7317f4265661528fd03517743da11aa9367303b5603f271805ba27a5d2179b98e01c2614fd73c43fb1fc0e4d1ac23d3f89e5e39c18eecb22d0b745baf4aa82d32196d895e153c13171dc8c44706e13bde9098541799a4fcfc9104442c2ee6b4dc61c8e11c88dd415be5b23f2e4f118b4d2726b4de8ee0f8f7d59a5b5e35fbf693c11a921098e675cf5fc67c0def7c6a4e4a4f80a1d4694e25c07ec8ccc8ae9c5f21adc3c2ae21567a744ba46c4eea81e7e15ce1e5d307a58e38f7b4fe4dc84e4869c79dbb30548d640a8bded3d4237822d595fe34f381a53b264e477d2e12b35781b148828848c2950acc53cbe9eef6070c4200159ca1f73373cca8d0d151749351b3eb9f1cc59c165d572adbf514a39d6fab0e11362d437e05b6007fa0503805c214ae9b5693c3eee9748c8c605e28ece61851af29ee3025c657761301d6a8b3ba1ebafd9d79e025986aa16592912dfc5ad0f077ddac672f9df633135eaa6ca72217374d58409bc4518390eef37859d6b11c14f1bb2f90a471da5e071e952be9e3484d14f1b09bd1fb0582afecda5581d544e5a6293e528d2c4c2077a95f8d7fe3f922d8cf91895780399e31e37ec805ac908a1d90a355f1b594a1ec67d03c730c72e1245aab0c5bc7670dfb412d5b6b20472cde592442d8f4fa08eec0afddcd45fab07dfac6cde7b8d7f6956fafb6ba18b3f272ea8ac14ad1c67e031cc61b9375dab76d17a973023bd08288d3cc80fa7b1a0560ad9c7950343f2ab5e3db9bcf865b207b191da7b5389cd95bd74c623333c58c30082413f105ae358b7db708885fc3103068ea110797812296e2f6036e27fcb06b65e836362c5bc60d522208c7e85ab1126cd8580040c886c25b930cb33f0799982bb28b25918e06c4cae44393096a2bab8eae25a81cb82c66aceb2408632d6e3fc248bac91d8f1c374ec463f4aa39a68334361f08119b3c0a3cc6f4777bb758e892726a27b6a531ef448b0df2b3104920c836ef2708b7e03673ec23076fed7e1c03fa4349451a6d721601eb960c373c0cb0773c0dea563e73b9255ac0271709627da7ef36b334f74a2aeea5e79ef6a8cf56c1afc39dbe7e48763841ab8c7d2043684013f6e63cf8feea1ae3ed4f95b5ef20dcf0500b37c93e12ee7fcf8467ec462c8e5a92c8799717bd4d4cb1085b8af6788fa6bc1a0b47dcf50fbd35f81c94f3315969114035fd1c0a4e883ab292506cc5a37910b4801faa8863a2e3d1e541d2df68eb7b35b651953be6409133802ed76ee11353c0e07a3031b1d7e3f50a1b6c9f8586d89146bc0bb7dd1cbc756d4dc1dd0e198d26717ff759c3033d4ed34948d776e2313b2b6605e6fbc3c55ea3d4b179f536c6ce7c5786695fcff7c387f4eef104a88d1bad760b3007deb3d869ec30aa5d1007a0482965c74ee31b3b7043e753f780f5191615a5fdcb148fca06bdc5d80d4f57841f1e1ddd57e6b0a0d45fba671711701dac6a5cb50d0e601bc36ef86bce9cbf62475e35124481bfd9fc6fef932c04060fb99eb7c096732eb5e82851cb689f4622091035cddc5b4fce309c0f41fd00bfd783d83f862eec027fbd125961a3fff4acad5ca578e61d6867b80ea1d853aea45d53417a709c21e361895597934764d1e87b6b0e7a2b6e128cdbec2dc0f6b6bc8a7001f2e4aab9d943961893ca1b78e6bebb65f83b73f75625e25e3b60aebf1044243f2f4b1e5dec0d2a84d66fe8e03a17b472e923855f3b1a158e54224371a674b523b70ec1b425a78ec1e7e87647d5d9afb86b9a2b4fca53bca1ff6d7c7688036cd614935b678bfa0af64e9f8d53c0eef46205082b6f0ab81fc2c5aa2273bed79180ce44b41d26ece54b94faf5ac023ccb9640d54e66033286172d3ffd134eda6c486b88937fff6669e9406375fba3ad7c7ca2695cddbda738c8bf95d5fb42f2445775c6c2341d51dcf8da41d7e8ac284e3eb52c1d7b41017efe031472d6a10963d5746807e58993879febfce11a24948b01018759e99626a0e182249c4a74060fe9eed52b3a4916b207fafc5c3a13db79f00de0d7cec400e698c32e1affc2d191bb6d75f6da67c0a5588fa80fef82e4603061a060d3d475974c4e98b59f9352317478b02f6eea7ba7b9326ac4e277978aec8530bca0cd6ffd24accc35cff071363c98eea09ddb2e01526ca941bbfddc3e4a02f6b3dcb7d55e4964306239df16ea3a53970f1041c1fc4cc4ce4f21199bc3725e5c0c2f9a8f03e2fe2e03856b2993973413456f241bdecfc33fb6bcd5bc628d24c991437f843418032de25b99927a7ac0ca0a618d26ef02ef653e35382763c3d9a508bd6d9e3913fa95c5617339e70c8125258e82c9790ed3a8af344ac50e3b07573a486dc459fa6bcd754200062175fe8a609f0eecc21bf471d060147caa1e3549ef8a86deddf5de3fbaa448e272dcbf62813c36771350dc266a629d358193ece2ef2bc0d50d2edc525b3054b320694d16510c0453b4d5123145e1eed9d9c3b38a01d4238f31caec6e228d2b6374462f0c98b87f66edd31ef829860d4efbd612a9ef2db8f591f497fbd563d5d8b698edae1ee7af99067289e5def9047e2ff391a77fdd86ef75d264613d5c5bfc2e8a1063aa429dd546d9d95e2be1db4fbd42b9ed7a8d9566248cdb09221ec4b524411f9206715000f73199cddae798abecec11e1a7e4ee40e74b84594c5118eddfe8a2a5f81bd0035fa14e99b1b24579051922ecd08b98670637e8ba829e608ba8a5210349e826c7c652822a79ebe9a150f07277bb299bc1c9778e958eada377c7a02514c1825933766bbce8f9398d0a159a8be8316700387734fe503625e99984033540278e712eb615853bfb45389e9c3ff5a8faedceb35a95c15543ae3ad926f3daef45b777a2cd78648b45b6f2442c053620de620d19b8c35e0a7cf29f1ff79a9b89e1a2727604bbe140a135c3e40f17d8b7a56ec654dae55dd9ab961f533d200076c4fa6a92a30784c2d56ab4678b9b63d416ba004b082447299645c35d41ad911eb66568def283d679a9fcccb3e9ba5de1fbeec3e68aa8a36106a592254b67d7ea7e8b724238585ecee79414b1719b50451ab2170da798f9ebc35e9493a3795940e61693a6bfada42755d992496a67c3683bac05a8a81cd22e9519d19090099f89b4abd0f2cdab31edbd7450641e453fb22887949fd55eb492447e52025b40322eb1f4330eab798c89e50c56e8d35e4b8ba8e9cdda76832a7f97341ed34d459995a599c3e2a1413d61954aaabfd2d96f5b827bb642d3b6b95d58e43de9ac415c2858428856f628cddf97d656cf63df338a7fe45abd341deb944d35b82ec05b044e91968b53f458c36ab2576202cd98208067ccbe34e0e0478c3fd09688d3bc186e1a3dd3bfe1f9a769ad75d43e5a2bbda502ddec90202855aef55cdfe12b8b20f2b9e068840632024651d9b66d50c1926217bdebb73c1d9e6039829b2011f1a54137275388ab2c5b68662b0f76f881281d7014c3937ce6a90bd1ead32dcd162ec35bb99bb5180f3a37b412e8419a94063fd38b7d0b27acfe18863b8ff0a72143e0ef3f48f19402271b023748b67e21b53109c91f06879626ed201dd551e73a6c00b9606326682dab7c194237bdeb51bb5ada77b46ee2cda8f4673aaf38d48b328b83c5f33bddb94dc2c2dabe3e2b4ca2210d3d412a81780c942337248db7391ce91315001839ce9655c3a7e3218439f1f06cc2d022acc0db341bbf3c38d86fb38231f993a5c4930d9ee453b04e3f40312ebdaf683eabcd9c3e187800217f537dbfa719b2cac8313a03ef832dada38be942c9ab1266c5c6d719e20a7730f40d04063c1c686f8bd0a5edaae16127fa3fa196585fd58243d3152d411eaa4e7ec6d0c0b7abba7c5696d7c5df1554a28a87e2913273b97a6d1edce2fd5c9f6167a66756e16db2d971ae57f154c70e079d89329b1e8ec6368bccb7a0dd6b6052f5d4532e820b576e243eaddbd29e983f796d1c1ce558059ee5082bcfaaf4f50a71791cb2622cb123b76f62e92042f931665c257c4f7b7d9bc3f8c2d72c9e647023bc48494879c9e17168fd85085c39c4ae7ed724249c36136cc403202b12b76b52c6615afd99a68e9c520616509461e298fab97a2c6639f0299576126ff7f6e547beef4f4a3550147e540504c19177726bf853e72f7e8d184293a416bff627c54bcd788ff5f5d0595f9783b623fc865b70a22ed4f48f3a75ffe51492e5b754f3a41b8682c6802d47894208963e7c9387ef1ed1a7443f49eda7b44ef0a7e184569acfa090877f6fc5437e1a0bd9baa8dd2f94c4cae736c16a8427db96ce1cc0d877124f21fe999fbad473437dbe5dcc457a2d90a3a51daad3dc6742ee22120f60810b199df477c41085480a54b30e08a71610bc9c469c0d10f89b0b5e6a6879d702e3896c32c1e6ae9e26f7f9817563eb4c67d01b915af10820ecbf5070c9062340c124f67d1e0d7c673493d2f039e5fa6457558a4f005ea59c82e52bfadbbf2d84ce74a4a0364262279b6548c70396baa60ad25048355cceb3840557d146abdd153100dc61b28c482882f6c4d07a7f145aa8cfd544a2f46bae1aa83cbdb3d21c3d1350078a3af416b012ccacd147a7f0c758d4810bef2d65d56e554285ca3dd0429ced8ee17581b4087271699311163736436abc64c310a270a594d1f332f3e26df35ed72f0c3b0a78cc6d64de81d5cfef9118ee19c6a30bc7eaed51cd94fc3b06412b4c3ba62a0147454604793feba23a69677ff0a1f0882263e92adc9761c155addd54cfec577fbf0786b02ef260975ff3ded7b2fcff02c8380fc4e8e4295ea160fb56b186c96d263ab4d2c3423d95a559055e277ed65f0292e787b9225cf934820dbcaa1b88b4c50559d101d9898656c0647d16d07f891899fadc16fa037a543a9bed82539d3ae491fc15b05c4c51b852849a489a02665274cf29c81425c84ab02e5101d80fe9cb06250698768ede1437ec1f868365e0f74cefd79817cacd5e0d4d50ef4fe6a8c18b5d0c80cd5815b19724729633b2de5148e04f4bacfa70d779815213632b5e0f482a8f3209b1ded999b5fd4053f147a6912cf8ac7abe99ff1b51bf36bae5f5fe6617f774d3a221d26526264e8b28053f4e5a39822a1d301c1c45ff20fc1c54d40da9ac0fd332c6e524ff57868261ff64a8f37c9463201e77a3e57a99d2d863d9646a16cbb069b55afec9f7b2e1a31d5dc77e28abcece4958d9ba9969e4220a5794e19d6f124fd6791a0a6e984ff74771d283a58f122f9a06e64bc257d9013194c496aac5a3ed1189a14d2301756365e9f18b5a08d84bf9cbf1205e2d597ec0d91d12a393084a4fd4ba1780b4faf25f0d4e1db1dec82b4fed22c2d6b10ea09f6ec7dcf2a2ec6e76a08ef2ec7b88a91d250ec111d889d682b5a2b890ac9d6fb79be97cfdbaf56270364565cf1cc49288795cffe2c0c4547c6b998af6e5b1f3eea8ac7b2ea2cb2d23de06f9926058b486515e608d5c20ae23572fc16f26f0352ddc3760ec2417d779e0f9349b0fec1700f43c6b787546eb61c18ae46235023c5d81b3b39e068169598347a153f127c4dfab1fa90cd2dd131df0d57b39db901064dd47fdae11b0eaaa1018c522cdb2c209be2fa0b13d8e2f3f2d360f5be042ba2c381cc4830d4d6256cf932a716d3419687593dad07c0145aec0d527300cbf419bdc599385c2ffda4408e157a69756d2e31774dfcf58dd6054f1db4b2027b0ad9b1027ef1cf86f585c0329d42b14c0f461eef9351899cb851808700393f8bc07131bae62b07645e78607942a66ac1987cc404b66110772bee24cbbd8f1488c56ea461573a905288caa5e4ae0c1260a940b5691fa24697b129a06e551a2dfc7a20ad985ab6f6dc051b04e727ea24c3a210678f477b8898d8a297e15f70e8516f35a1c25906a76b63d8020358c73e45239a5ee9c67342d512c75fc74509e022152c2561eac03e7b258031cba939bb7f9e1d0ffb051021e6e0267c82ae6b81d8fc62ad19787a08a5bab1f892a1b828dd8236ff458be89248d14e7295e41c69f09587ad3b9a7ab255a3dbdb1acaa902e96066a15be3531065668de6939e72e51360f9aa5ab968a815617c6da69ca2d61dc92a9aa073e628e700832cee2625af8bff3738f96dca766f83f204d8802c1ef52d014fb5e61848284fccda1813ab05f4b0cebd8a2ff689ce8bfb55232dab4a19fc79450e927ffab394a952940f59a4d8363ebcaf68937eacd9f6b308fdb6e3d6c800ff0d0173cd138fc74b0451d7e890eff5cabbb027b1950e52c31c68c588b60016e243cbaa1bc291a517cb839c6dc96e824c418f09bf1189bdf9b0076d85524549a3455969733b2aa13d6c2d2d90ec0272d5d36dd013acec86cb7641f57615f817a68423587007eb6a4068b6f1fe736c35dbe3d5014bc1975bacd1b113e78ba8ef5072c1fd7e93345eb543a98002fa0c49e2e54d23c3fa2a9b3254cd4f362dd85f55b3adaf1b77a60d008f7d6e4ada533d7f7a3eae18a106c3e0620eee0e76f6d61aa95f03b32fa0e3b69ecaf332aee17f05f53206b660cc643babfe96bcf194f203d64e91f215c5714c03ead556e2378d0af8cfc439b3ec0ab87504dfee182321c5cd04b034d474343551858b341eb5e612e7507cff14d615cb6fba000e6521e3c4f01a0517f64dbb170a037b36beed28a2637c87830e2b23f8eea6cd9a7331c685d1e6f707d5b264459fed2beb3d5db33ddf9c7a61fa4b93c594238f0e9cb3288cf4f41c80fd32ce5575bb13de24882449ce48dc2873c803c5d2e8daf77c26b85edbe9dc1ff74f67db4df5d96c0eecea6ab20a13230510f25e4d4f27d18c1cc45ff900bc314e78bf2b6b15d331570c73f52d48b60e28c6ce1345cefc293705fb14df0133615d4f42ea6fa397aa97575f8d929d4b26595a15695ef0ce7b1762bb11f043e82cbe23717cce17ad544a6e1ba874603928013b66e51b5d2523a7c382ebcf4130ffeba5e976f8fa7abadab126ba653a067fdaeb10fafd5c86cf6298f0e6de91b4675047095d82b4863ad2b10f47c7a3499a20f9c23f677779dac26373b7a0bdc8dfa6776f850dee5670ccfe43e52e1469038de7e916fc5654e261a389b2b81e04d538b77aa1dd0071e923e95306fb05eb386c2604162e41ce52aae9b18c774afef49197b92872835f006202bb11d10046c5664491b16ff24cc818a6799980bcfd9a4b98b98d80ff845321fafaba229c1236e6c4107d53c0369f355a405e46fca752c12ada456acd785dce1280547221c3e978151ede5c3432647b75a46f4c7282aa9cdeb9e4b285a18cd0e9ea754239e26994b7fb58fbd6b6a +MD = a4d92c826cfae13d7a80653023254365415825a6fa9810dba593ec73f6560e0bc87fa9e5eef2e23076ad5214605be3d9 + +Len = 46960 +Msg = 44abc5349f6d499111b5d019672f2de1accb5c8b4959c0787155b03abc04324812c006f6cb8fe7a414fb0d35951ef6c351fd6690cd17ad40743d28463aa30a9d80385cb8373343bb49ee82eb34f83f63f8660a0a34691bc18c26dbe14dc1a7e454bbd0622c7fe640763736248ee4912b6bae4fdfc778946380b8d2f13f868f8757f369dcf09b5799647e31c6e90b7382717e3ef8ce6c9f8e1a9c145f56194cec51852f0ecbb01e30db6a7cba8e956dd0d17edd3d916dc5aa207aa914dba3667d0a1c2ae107e6c46ba3a31ee9c5a9077e5455369657a18c1f5bf99af7154b63a0495e633beb64d0b483d21f3ad66fcaf2c2ab51ec6a337f5693c2eeef4e3acdbfd8f3e106be53ca72449f889408103d95e32a3425104923b5907dade6cc972b417d84ac28c9da3a0caeb160e1a4b4e9cf7e78e92b920c02a519d1e0c3d98b068e01b9cd8b5422a9ec89b1af08f28254095d3d78e438a3a38ff8668e6ebb3ee50e2b394b15a6539f799d467df13aa308a94622e73a49368ed9f3e5bfcebad75029c5ad2eb00994a21bb219d384c43f8d1902ce40140fef4cedd3f67bcd207fcf4795bc7f43c30d3c3a8fd1b8a9d77d69bf59eb8b59d0f464315f40cb52335debd0650f45b51de7f43efd173548bd852605121ecef3d56d5e0f616cb6463d9a2b2cfb4d88f05f4a5290c4935149bc804b52f71113c96683c3ee9f21458f845d18c31f1f50dbd15ddf96acec14941d96610dce6c61c3ca5d1935e3087f1651cf38fd9b2da65ebb4922b97dcb861128eeefa060d6c1c94b25eb4ef3c96cc3eb171643361e91616435a461fed7b0a924b17d7275f839c32f00bea0970b147f9c5f37fbb79b1acc154aebf7f8b999425b0694ebd57ad499bf181c9399768030aacc258fe74b488716b081e1331849c51316bb734703973443958c8fc0b3b7bf5e8867658ed7237baf8eee89779dc91b95087a72943b8c7a039f97fcd36ac11500bb85e774e6b38e280cb8558cf0202a2905595084ccba54465cc3429b42a718d88c077b602101a9c85469af39b856dc1635e175df5b29aa56f79bc9e0e470b22d24768b1b2f14b5d88b88fe479d7418a6bf994a6d93e2657996a4fa69f824ca49ab5a7e6ebaf498a0dc9eaa7f4981c51fcc0935f619ec6bf862683b0025cc48724839bc1e67aa3c686d321ba66185cdca83ba9f41984fa61b826ef56b136e13f1239dadf6e03d877866ccb887908917ef0d33f117b614fd291e3e91736b15150e650db9bdcdb56317f0f5ebe97c938bd691fc91401b42576c606175e0d5c635103612483ad51bb78f33331c93cdae11c6389ee98470e19e2a6e5e0b7af88b5b41bd33c236a1766b265611b14e2cdf91092aa05fab5dfab9ac70bdba097d6b6fe723f88f79d9ce6625811413e24130f3e58e8a5d7c8993903a8f07e9540b6f5a4b8fe917cb242b92d4dec6aa17b3a81fa38ce54ac09db70b1bf2c302244b9d02b52a8fc2f42a96d67a92aedeb52a4ffe8a4e388e3f406b1299c3796c41e5ff506c1c71f9bb94161a60c8541883502e76e4f90b91c11bb98dfa27b18f73809d2cba8c1722ea0ab446cfa641be4aca4c70f7b8e7ba0ed6a8648748f4d382c47d7fe5a20aa7473377430d54fc3ad243b2d50db15273ed18407f884ec9a0355ba92f3688d1ee9bb867f762fb0df2e361668b6c0cd62428898ac64561b95e55ea2926f563f461ad408c4b18c3fd5045cc727c5cf2fb3385d28d2205a74b75aa1c034a6a5efc664774ef2776d353babf2ddd8e278b4809cd9b5279124b074dfc964185dd9e70672ffc9774c354979a1b2cb0ab14fe450ec78bdfb5b273754e1303ebbe954ed8cb2e7f8c18486d52571f70f2ba6a747aaa3d4b3ebc2e481ee1b70907dddb94bdfa0ca6d7fd4d470b5994a2aba372147046f5837778cef1896caf509fc9f798a55c91187f0919094a084169e44e7407ae48b9da90cfd9963e59c481ba6c31831b59857d8c26f6dc97ccf06ea4a3b774bc1a4ff893ab9961c60ebe4461add07da459af7f073b2ae87b0d6759f38a858423227f8687f35478a8f565409b741eadcac4d8c4f730fe547d336fd1d9eb245e6aca132c758f53036c74801e70a9613c1402c8f464edba4926a6d07e5faedd2c1979d1916466de2b9bf5d985e835e2520a7b47b85659a6eefcce52098cbbf813b996835e5c623c17bcdf361e0cfee91535971db8d65e0a6c8914bd1a69fabd3dd18bef3a666ab7f1579a6091e3edbeb01cbf119bebe32dea55ded858fc5374d2e9bfdece886795def48e1f8575eaa8494859ed099ed15891e6956c6c4faf64f9899a17c2cc3f1f081c233aa3cbdef0093fcf77acf60ed389c6a241fd6af4d6db3a8464bd3adb9d9756c17b92ecafdf178b877829fb83e6f97d6b1fb4530c12a083e58b67d92357b32bd0a8fae047bb9cb3ebb72bb518d909915ace3914dd606fed255569b1ff948222b88a85b08cccbf4061fe582db6f3e38cd61533b5510870ffac8a6bca589e2fc3e1e9d963685ca9b95313586a437dacf646be4b3c4f51cd41e3f2142d14bbe096b38d9e01c2b181a628bfd474a8bf8f55148f28b3be85ab3b30540de11d34be24973d7d938114709048ca7454ce01b233a751732188ea3576fc7afdee5951f0f4f3c31d208fcd9efe1bfcdf119c8b3d1767cbd38f94c89079b02a8d5db2599e8e30e528b0d3243278091dbeb3f9a4598abcc7f104ca69e7ccb22d65350f96f27bb76c434c356154867af4b843cf962e130e0b7488121460f86c4b2c7e574e1242ef1f18fa9dcb2eb1d64a76c705a7e33ac561052354102384444b8b4074ca266b3fc84fc4f3abe58085e79f4a8320a087498f4cde78a659f8a4f729844d52577f112d90b21f49a47cef93dcd131498f83035df0c0661e2addf315af51ca2dcc05cc1882cb0aed912b7c16d566f769d5b559959ad207c0bdb9996ec4b0d3a5af85d74fcd179adfd41795373110bdc99da5b4fdf11b41d33b17feca11a8500025879c9a1a9eb86696c8a0bf99d86bb20ddc7d5f9ea3fda1cb7c8af13d412987589482c311694dccffc50777b4c4e96a4de11a81487224709672a5aaf18347827033f190597f3f57369630242bdf1f39863cf52b98919c89c480b7bed577903994ed51cb9be8785064c38591a52ef569e076742735074f347c2f28f69024edf3ed490b3a7eaddeffb0d46c85cbbb54418216013cc9dc23b9e6056018cb9346faa3cf85a6abd55bab43524fc7458d220895a40331f918025f2b8cc7ec2dca8494dd0728d6c968d69d44c59520baac490740a9e2cf6fc4d36f734cc53c5fd38d0ac37a5c94816f361edcb3a658d221af86acac05ded3e87e31e5ccc3ce08b64ba47faf8aa67bf0657433a6ea3736f33ecc0035d626cc8aeaedaa94276bd179a5a9362e18d55ef64ae77025c9858e2adc2365ccbc6e03b401ebe92c5bdb62268263138070e9d286cdc1bcb9ab0981cf73d103fa1f80206daa72cb1dc5e662c4cc183b2cf8aa81aad6483ee8f88cb8e8ea1f01466722cabecdcc78edcf547a5c6a11d9ba1ae010694dc61f3d18d6db8029558839fd1da9ad533f1727e0ec51f5449613b33d522acc1a81863d73af919c18bbbf59473866452214d1505f77909742ee119ec8c975d926c29c7271df82469f99cf31ae3da98b2393cdf2b6bede4a4c63fc03250d999a57d088637b2d5785a636df469bf219893e0334944c86e4174a3bfc6abbe63f1796f57398f762b86215db182274215f465cae2dbf899a490524bf385cf21c0f57cc77859a4f464ce3d4d0a24ca29023ca63dae1fad5c1b61dc237d9603276b062df9fe5f0e9a1bc13cb5da44c8e080c1e3dd077cd98c2d3660ceb06ffe3bdcb40b9b5bc222f3baff7e3ca46ab9f50c249d0d818c03a6647e8eb22e8c06db907fa400131b987dcce99025eb2f03c32ee530639ec5c2375bbab4526a72b39320d965eca6d3c5b4bc10011620da3cf743845c53d1a28bcb7d6b8043d6ac8adf0841ffa5a983312512f34f91e824cbfdf4726f72acbad6bf341160eb0592032ba159afbf7d92614b6c13ea0da3674743bc4fe8349267199f3a3cd4dc79eba315a68114bea589ec9421e25f0de54a2565056d551e254feaf7da5e6a7c95e1e1096248bd17b3e2399bceef1d071025fcde5a6b4493d7cdc135aef680600c4d53937f11175f1b33beceedbaa27dd683241c45ba253a1c7912f52285b51b2f566120579aa1f96de702a9e8b59df68b0a31ab31ea857585da76a2cf8c770281c5905c7615eb7b0e849bb95a606df5bff3ac07b97cd3da865a62bb209b54aaa5f37784754352588f84e079bd5b70ffe80809be46d19edda0714dcaa002cc97fe687d54bf838516637087778c076579858fc13b549944f356d7be4dd8835d4f1dad1839cf56e2491cdfe71f30e4a9f73b23791b8d2474c03bc62ab1347d75346639eea02f4e08453e1b85ed5673ccfd5b4b77bb3b139ca8a1f529913e51a2fc7a87472449d945af29bbfa7e67552cf0786063b6f8d72b214bcd216a70b064ebcd2de832c97948fb7249ab2eedd96875151ac37b40ffbede7bb6a8a9561a4996d086185808be809eaa4d1e9b54a10e0fa3d2fd949dfdb624b45a25da68efbf8217387e0092096b2d342edb30262c7c04c711988f8a41af88a8203f7a23b1354223bd7fc8fffa871ba2775779fcdc3118d16f1ab8706c199eb9914c0510ff593b687d942dacf252de67bf19f52340cb9065340acbfafd72cb5b25d217bb3a89f267f1618b13916d0a065ea92e43faba2ff518df26844649831f76780e7ce345eba4d15e7dde58241300de7b81d95a7b2bf3760e54a7071c7a78eb9465e09a2bab9165e18277a7168de9c7079c4df08d3902e41ed2cd904a05e9fdcdca80cf99a6d057a1154a1ec2df23a0d3da3c4d6ecb85eb972d827280ba05356a88d7e41e51c3ff03c2f01f978b30e476c80ed1ae480ee4fdc1403e2f0b3d1b114d50783850fef48007f43a3316a41a56e2401dca530078c93a9153c37e04274874750c6618e3b0bc40b0eef405ffab0ab57a9221610d0f7ff5f043dc96fce2869ac011261e04bc0f29c0be78dda62ee8ce08df61f68721889fd78ed8ca89c5421ccc26f6d4f48eff1fae1920123a1e97789545fa87f1477974d1b5569d3d580196f39e66d215a2129ed39f88281de29d518a766999edf9d9315927c4837a035b85d117e499fa8dc023dbb22f93e42340f562d11da0dfb11e31e886b121d26f9665df040e9115babe4b10e174fa0f4948b0b8f6a54148f5bf130a328adcd8f578b397f3236bf9a133713dbdf6af01cd1b3ff7479edfbc30423138bbd038f02d48fb7655e16f08e9e6329c9833475e471eef985458e09c093e38ee931fbaba7fadba04acc72ee5fd3d0bc810a947972fea3c36ad62087ae90986a658d7c68a750d5bbd88333ff343ae693aa7c7142ee003c23ca3489bdb583a96fa6d870102a5ee6d2b58b3f6c355c0e78ede2b51981fd20e24d68b3f3fbf58065551abee957ad76ab89ec807d8cc0ae31f2434746537fb7c89c798471ab6e8414195c4e3c57c4ee10fdaedd795eef308760a70f118b0d699c5f6fe67eeb741d449ba50850522bb4c7b8da3daad66ffa42e016f5c251309e283d52c064e391b3bc83fdd46f6f6b329863788a5619ca762a1999e1a0cf6ebe32df2bf969bd4cae45786c9adfd60bcf4da68eabc652870a06b437bbf42a523183ed017bd69e2d77a722fb42e9b093f2ac28268842a72f20a058f96b068d615fe30edd2df3b0bd74aa2ab1b4d5258c057f9247091140491fbeaee5d91e1e25b119eac6f7071b830e153897d8eb5c7d6f8c8bfa167d465d6f295d06ee8405258def2ac4c15c0708adb2f3b396737eee989cbc4697cce1f478a90e61907f6be95c2b76df73389bd2ba47040fd7b4b267e876cd3374473895a1066900a85978fa87967520f6e4ff6b9b9d12b381f72171c7e465c9953674c8540715ea1f5853df74f8d08e30a85c5bba7cc6a57e84f2939dac2c11e2e1bc15f975bb27dbc525208d192f320acbda287eacc8efb4a34e56d297cc12448f3905f61802c0c6e8154639c038126c97a05c4ef4bf990d9c5d41ce6dead4a18a131fb4b893bcc7084cd8dfb796383f52d77e941d54a970b646dcf9f63160e31871eb9b1d1523c56ef15ee9c4efac6945a617b7f02e29c43a32afbcf946bdf0827bf2140e31fdaa632d60beb0ec74d4b836ae1f32f620f37048437d40d4f3b2105bbb85558f535d2d2867c642349a66f2aecb34ae5397e4a0b11fa591810b0f0936cf57b8d62cc61409fa69447026093d37f75d2bee957f1294cb9db5f50cf1b737b4f300af91cd62f9a20f7c471ea4dff9b805706e22ac0e1ad0cc74d9fe3f6083f4bff5c1895a5d1fe620b4628c1f211b9991467c4653db6bb59995d5eae14d4517255eb51c554fa44e04b26877624bc61f6a75c00a5cc2ae026ee290d7bec6a3a38c043252a67eaf62233f02e854a521d4f8c5e175af0b0c40b221b3cdc012c5225cb0e134353369abe622d8e6df77553fa3fe889035feacf6cc1be5d4ce7bd41bfc2869c9eab5f9b0b3259179ea0889e8d4e75c62d4e2b7ac2698cff5d047f817d634741aae4e88f9f30ed5a95ea1e658f14906f3750154ea27601937afbf589d519ea72d67443e0f0fa64e7f218a941664ec2d4b01a1ac39373a6aa3512b1d35d52dac0cffe042796db5a2021c0bbaaa93987a735e0be620beef6a3f9fd36e67caa82bbf5c6abdbf7703793b376c809de815947276872b282448c21581fe74bc99d8cb4c682ad66a94577c305bf40f76c92a25502f5ca3d7d20a1a2de0f657bba88535bd0967b6012b7a52eb6eec8fbda0a1d21573d475b82e00198da2013eed6076111a296b840ca635a474599c28fbd44045ca2935ca50a1f1683fb16851d829750669af7c69146c4e1ad1054c00b6cdd0267739c8c92994a4af4bf373ba066c48bcb483e38da0e58d5b0c59444279f3181c228ad59bca6de295b752699eff8fb8dc028de8173879bc102d3ccb14c9aee2d0d506a467bb9673c28db5942849fc8d0e5cb5d2306490a1e03a982b9e3066f4ea97947c5685751fdfd5033a7d6e198ff9c9e3ebffad9206743d54aa0935831711711ca790af74ae949526a4c8f650864651ff79ad9ae7b1733d58917d616d13ed69876b3cc1f9e788d7051a2f6708399cfcf1c561b4f76a86438c28213a8cb0278abb1182436e9364a288e3da4ba871a4d3a11744812bfb5556d8b61e4a49b667d9a1e08bbe3a7acfff9749f2299af606ddf7b77e8be92b877e24859c190aec546021227fbac56472f41a929f8a45906922dcec365a9ac1c5c358dbc22d381b9726241d86bd7719f48cf90708f5110775ab36ff9474a786b62e5c01b8103c0bd833901bc651b860ffcc1cf056f26622d37fef38c163764203c6183fa74a7c84be904f626afdf00338be6c95b009acaa2ba6eddfe5af71bc539474dcb761624ef144473a984a87c84969cf3d3fc34b6824291a3c27deffbe4f9e59220fdf55301a5762ed78bee578dad52e322ba7ab21670f5c97b07a870e9feead57d84cbcf4e1d286c234e372db920b72ba9b3e35a09c609d37a80b7375ea8c5ac4392e0160edbc9d00f14197b81a12811eb70e4fac6a25c46536172abbd87e46b15b0f8b3de71d8ef0da5ebad819f245a6a9a1620c7965b969822814a812ce5b656576c25276fd41da14c4450438b4a599967fd7897228648bb5c5990440847f2a80ec0e6943659e06cafb9e021f5f8841a92e14ebfd76ad13f77721960aa69c46d4f8d748f55c8dbb22892f9a75fbd8e4073883fac1587c486fc41427163e9902882285b835ebf64244f85e96e3917ccbdb258b7d67d5b9734637da7f0f535ea6c5f28081ab19c1e359d095bd10275c3e4b7b933e96f64cdca355db669beed37ab2f1316bfeeed6e689973bd6a5c860847fc40503f7c21dcbafa880a46216e0c678a6fe3ed7721d93fbd7b7aa497970e7a08748953241148892b72f000dd36dd13e9950c1ddae7f32d8177301a54474add64dc4bcee7b1a5a730a5144442d62e42d5390bdb9a9e20a47e0d6a26030541f489de13fd379158b7a2a4f36ae2da7476d5b24fb126b306471b948572345f8851fff07e88a42ef61d19e8f9ff4da24422539764091fd4f887e2a31e6968c482782fb9e7dbbde8e259dee7b46be3dc21d7d76ec57de6629be95bbfa18600c2d4c9a1a0ec70e56dc1e09a37af5b35c671f9e99f007a0aea44ede +MD = 7fcf34ae19d002775dc86151d66094e11a187478577687c4ae76ce6e2c8666036d095c3a93c1b4332f6967a65f699f0a + +Len = 47752 +Msg = a54714c1e89bfe9406c536069c79f18d1ef2d055d3e305d921b1b8b10bdfa9aaf8ca161cb696df78be68e821bad5bf7d449b7f4bf18ff4378ed7ffaba9593ce95473e35725edec19812c77e51aa86a13b7a05cf4340cb265c9d307a48f3ed2623fac42193d886d9fd679aafcc6d83b79fe6730f9a440878c5a0b9842c374b13d43ddfd0a074faa3246b74a0bc64f7ad4a15ac2014914bdd4cae97a2d4fe521a3e86cdad38a2beaf8584e1fbd20f36f4f29dfdcb52c709b64a0d3740e3a776cbcb5c2a21ccf02771c94a6f1b7deae620f1d6044bd543d68656433508d8d14d9af32471c8cdcbe97c4822788a408679a3f0544c3c0c9616dfe9f70d4514fa3afa5e76312ccbb459319ab3aac2aa40660056af3216794c6f258d8f2c903880c37c55d7f4a847481b342964524f1bc72fc89d2d52659bc523e9a9721f64a4137b9381b018e5b0d583e67cbb2b9a25795b6f4c8529a3e49ef9bed646525cf810c7c25a953a4f990b47eb2d3e733e57e56d56ed1d244c044844f79c8261c3a5073cab590db5407047cb949354e5a61389da31e77bded85b4f9a3654acca432b654e90f5703682d72983854794df5bf8d52662d417b5d35a136dfda73bf855fbc97225d8632a612e1ef43fc284ecea6855e67c3b7745c7913224bffc967876a6924bdc4a6cfd85f596b2168c9b8abbf29a7ee066210b2f913a72ffdd62d72fbc6e3026e3e44c4bbe3f31cc2e4f355b280164321c9b8265ca8acd2fb22770db9d9bc3983d6f833cf85707a2f016794269293ad3a75d2824adb1a7d2233ae214dac98a92af653ec4349c884d9a97c2fc46807757aecc88c6db3d7789a933b765e475d9b8c27bdb9be37e482e8639af0330958e408b8000d6a38cc0b8aca84d495b0f557d1f09e60e856acbc84b8299d1b7d70400d60e4ccec72e17e1a5ef3039af1462520da5eaa6aae0879d32f91ff26cd35d1b06dda93996aff1874d9efca14123a4da16c655fec47e10300503adefa0091e11a664c2819270c22bdc3dff3ac19b8167e2e1c47152a1da031a38c023f1e6bb672d3a15415b1f1e420a22d440910a7cadca8e9298e5ea6998fb1f0329e30aa99e13d41df351197a6c3004086d4fef1afe66335cffeeb62364101cc38be3d38d28f2b9491204ee5b0ce648080b4ec7d0dc1e669ff0eda3bbe6f1b89da494dfca9a32502327f70c2496a5755fc52e1332e98b9eb826632187b438890e1e469de6645b3f389f98018bbbf6027c055e5fb5991652520adfbe0b3e3cf48143997c6509f5ecf5f3784ce4cf4075e966600bdd5d4717da08c3d7daf7778183df0e19cb0d6adfe7ce087cc4531d462442d3b61eb8a655dccaa01d6b7280c6a22b14f48ce1529e8a89d8efaeea0509c92519dcfe3dbca2c6ab04ed3121d12a58d23e8b3f28258f5ab16a3408e6602724a7b2ff005ee265243452d5c0a80123044eeb4c36445c48e4cf2cd866eae724d3252f8aa98ec04371f12a559e57694750fbbbb616b87f51954da15b4d79e2996147f00e6e6fce943c6bebeb2ec2921dbb8320676517072008c7581b20f5eaeb3b6a94f8d35475fdefff2805067c140ca05fa9ce85c27c3a9b96c1c685e17890ee079ee85cef5ed709356f4199e657aaac0bc85a1d5d5707ea666ebbe0ef1430d5c96e4b8f92d1c614b9121f6d83e56e4af1fca8704a101e51a0cf89d6613631af1aa390cfe177219ed4c10cf5f745cde9bcc728430b4ff48dc064aebada6719c665af56b24dc7900412ec78d792e14014b6a857fa235f20eb5fbe9922cd1f6fb845021bcb4a4b97e11e050166f9407b589a20c5fa34d609f6d93de782bbd799e1334c5e7f696b9fc2309b35489d0bc631b1c0d0e7924d363cc773087f19182efdbade7d332db01e04052f62e0e07bb71ca7f93736ce1d2c29a4fe7a5c8769955a364916ab09a19943063238b48648d495e73a376c6ade6249ec20cbcf69447383501ca93b7fc8a7ebbe341557d0cb9519fa247ffcdaf95f1a179a5b3c4121300572b9b369129da08a97b5973f62ac7f355b186f6cb106a916b1cbd727a198616d28a0a3c84489499c1d272cdfbe44096474b694306f7ea6cc45259e160d026e06dc7228bd9823d98cc91944bd362aba13e16f6cfc78d9fea74c383e8be607ec7f28ae80cd8fe5f6f935fc7d5c8cd907e02ba378055f910744218426fdbf01334277a66a7c8e58185dbe51453204d77945be0343ffa64c570f7f99f5e00a96f8dd640a345f35e2c426fca82ad2409e94b1130f4f5fcf647485b0da09d75b3193bc584a7cc9f92e70e16b71acb1c2a6d0beb517f88a4d61d6236fd5014823599a7bded7b2615a83a519754e39550d78c3cb2ecdde23a2dcf285070b4ac6f577838852326399dc9ad73bb48e5f40739cd462ea817e90622e600710fd64b83433d55e7cfb0ef7e1dc9dc4a3c28ce8b78b892272e33874fdee9546082bdda071e7068a999222e02cb15f50cd7b50d22bbd58665253ca35f89608be6707142431399d8942883e06ffc1a24c8c29397152aad8baf3637247c4ad30dcb82fb697f47410d7025dbec0ed75ed248a4ca56acefc70acf092ef4ef49cb42d75f623903e5ef6f0537323a27856b68522663302e2fab698b4528fa00afd092d1afae9916132c661a0791b2022dc94caff0650fe515e212ac922e1ef6a46865831ce77002f97f5a793cff3ce6f8fee827a9d8da17c6f36bfa9a47481b4f1d23b34c16a80dc170b3e87f85c01d0e94a381f9c4790d6d66de3c027b60b5d976342ae74328809087d930782a26ed9613e4878a32d30f30c4d13c75d24e0d69fb00b09674d8a3914d3419cef6569fb80115ff0129d2643794aec09955fa6b2835f00d01b3a0bde9492c6a2af1387a9ee89db209b25d56ab5edc91160b4d163eab6a08cf076818c3042aed3324b5c86d4fe46848d45c2bb4abc37795fd2d58d2e5d76aa87918fa450494689296b3cf50bf52e86697b82c7901cb39be3183770c6ca0fb360f98ac97d3d4a4ee4f1bd96dbf4ffc0c0357a123eb5ca138b138bc15c72b831ed3d076e2f95069f058d62cecd7436ae22122d2d9eede75ac85326f157ee2ca0bcda99f4efc727e40b8cb10f68f96fb8ff80106c494b97ec1b35bd8331a2c97a30409710266a1ad8577e1cfb370b077bc90dd870c64558420459a3f982270b48e80da3227be44bc679e02b04a01f9a610f29c9bd8e61b4f7042d6eb6c1e18e77549022be48dc574903415fae3cada503425288b50a371a65ab3f925d6978bf900686ba4625a8b9da54101f6a854b93ccf31679f9e22c052869fea35fe1431b2d6e4fbe4c8adfeff51ceb0ecbf26ff338a1f431ee7eb711c9b0e91630d1d72d9a0c59c353f0e86613ae1092350c915fd0df6a3525687eac94209d6f72b3ab638051335ddef068b8d0885f4e584c36162ffbe6e81107d95242296a1387ff46595aed7ad25ff1c754964bf5978829e4d2a08808ef44055d9f4e4c0da6f32d2e7b94219ee5598d9ac5ef699202573e1401cd143eaf30c981d002f8c69e46b5da46c6adfdfb5e1c49894651a32347f15a201020f6ac59ccdcb11ac0436df531b0575ce33688d0365a2b2594a75edcdc1daa143ecf6b4197c4aef022f2aa81296709e151c7124254430827c32d298866d52c43ae37606ab2e0262da152b86cf564eade8a3e2c370eaacca73d9317cd1a2713292fbd20479695b32dcbf22c3b3e1086beecea3b20cde7c53e9487be2d7e69fb2f13df2f6acb8bd26af34f8a5e5c104a0d0a79d3920a80ae584859612c0c4440e00afbf246ba09008fc7c93758d7eac143536b6a0d4d1bc48ec9a6c54b3c1c80c665b1fd5dfab3c9e6aa0dd7ad59e678ec682d72e51e0fc43ca8ee4f0d8679475cb49fb53306029b1a2a7bdfee3ab9cd82b93e92cbf5d319fc66ae52d583d0e10d9803ce48547bf084b991a47df2db5b80b71d2e246d0c224873559555bcb9fa73608c8d106e9676d0e7fde9ef2aa19f70e257c980cc2199ab6f727ae089aaf008ae98962ddcd87a69360f04b44ac305dddb6cd963cbb9dc9fab937818831a7e57e2b66de2f7c897c81443896fcba62b1202caf23fc41b679fc8271150318ed1cb9d7468f277cd3b781339ec7425d17bd7e8f098974decc71645abdb4a0d8eb6de4f513bbea57cf1f3a360a25401bb747a0e8c20ece19477ad94903a487f808a2a78bb4aba394e37b555464f91b7faa182e3ec4fb2f7a905c03582b2ee100ab81a9a311a778bc79957996948bfe0e58f8cf9af698c18a0ddf8b8e1d9ad6793ed4934412f69156f8334f0282230f522aae2b03402cacd027ca19f4c1308dea28610c779fe217eac81e7ea3170976d28604eb818a0118d546e75490ff382fdbd1f1bd43a0b13201511eaf7e39845c16d5c0b71cbc5d2c1fd3fce56cc0f9e3d4a14b4eb0fdac0922fafb8a9dd1dee9a780ab36ddbf89103834d27390eabcd25e003966c69e1bc5d52d7cb607c85d440ced8d11cb79cdeda8d331a70267c923005681ad8e6b468da2526adcc4044a96cd862ef0efd370ebf517e129cc1d68ff430beccd0f4d748a12cf8da3dd6fed0673b255794fb5bc31a967a9a0f6f6e18eae87426b512aefe4ac0dadb459f08dbd85d8cc57f508f7e84b2d52b586d97bf7c9324b325decfdc2f87492b6406e73e28b625930e9b26a3764d0a50f86ad7f631c75cec73a79e74c7f6d03529ad3e89e0db7c5ad319d5d477bb86757fd5c35f930b695d5f0bbf5acc85eca3070063219943fd775d7af173f184d6334f4cde5e28c5e660288986e075cb0adf7c9ef997aa7625931e3d2e248c4f6604f72e8d745b8d60af609fa9c88c1cc7550ae7667eacf8811885bed048a051e254f7f95534b3d85495a7bc8c5548118eae22683e2909319c92349e8c62c662a7bdd23bca01ca2d2ead6e7ea329624fed35639fe54957b7d47a9b4ab70576c832aa1674507df6f27b71154472b7430e5f953efcf03200f1c54c3a51d4a32a191fa425218d0bd2deb76b4cac9f7162f35258251de385ad85fb71923289ce68cbcb369ed1e43dd6385f0665157e0a5a8551d8a66133a6a5dac3a5236b3ad9ab56d1cbd3f3da768995fedd0f2d92c4924afa91537575379266ca316e6a7c677a50afee7505e468557e0359ab43824292aaa93c8ca90c9afbc08bb0f3cea2fa5e3fd218e286a665d26708f6ba05a106e42aea24d29a8e533a6e64ae33f65304bf7ac4d5bd04750178d77c4ebbc28383ff4239d4c5c85ef2e6c70183af80011916a814af54fdf4cdc155d9dc3128ae3c5c9724d6c69112fc7970decbd6da419a0c3e2df06ad18a1d4448bdf9baa695b2848017a565a32ec27ae248f13a83791a08a39d633f2dc9926a567551a8aabe68ffa39ebb237d27075391fcae5b1a2c1b948edf52627127afbbd5ac6e9bc3acd2265826a2706d801dac16563db8ecef1118366058754a28d7a16cdf9b048fc580b1345bd5dd12ce87ecd5e229c49a269d3c60ccdfd7f731acc3726b71634dbce6f8ce8adfd9fb66d88e572d1d1ea05702596471731b26f6918a8cfc8c38abe797956d502af795ed7219109362177e1502f7d7fa9cbf47dc187f22ef460528c9f4efb72841a660c70705a8b1b35fa1d4f1a021c4c724e856c419cad0395922f89190329fbe76ea87e9ec76046b47aa1b60eae86c8cec670b06d2eb2bc09548e7f00f4612ebd991a4ad261f07f470055cd320725e5886724d63330a7e8659f91c82b5881e645f04a1c35aea490969321dbaf97626b48368a25bc2bf34f507c20aec3b6f3eb277a203cef38e240483bed2aade6a321b53d8ae730a7feb973f12377f0971e050a3f85f1278713560600a100537a51d078830d62b72a30ee7509826cd9826afc96485f840521a09b77eb25a6c9ddd5403910f9e0773ef1b500c925d5a7ff3f97749c983db290efd744036164389795399fed38a79b6aa9d8b93bf5fa8196059f4c431664565c6ad114513d81c82efb835221b0ff4937c01d4a66d82290d024ddc546c341180b785390dba247a02c6ee5fbb44b32a92b9e4d5b52b797fc34041688ac851c2127802360ab76fce919552942afef87e5d0ab3093087b9fec4b0e153d7d463c9938ec0a2bc9a3e9ca7b1a15ce19864522ae508d9b8f0a83889ba8a18bc2edeaa7c423d0993b0f566cdc247248faf7b58b4bf32d1aef4e8bfaae3b811a82626e73558d3d530ba48af6c3db07575a2a1f4531fed9b9312efe670c307e93c58d1026729219014148cf91b9a79ea44207cb7be8d757205c9126fa3bed609e935618e8a49a2b4be3e56b6545f0fdd6b9760053f6e86ff6786149d8c5dcefe2f5a5cde0710d3cd7fb62a799ef1eed96c85f07f5e597ebe48e85b02c3264f208f26278376453145090a7cb563f99368c76aa288a3d4e9291a4e5a31c08ec33b79375611402d47b5cab9c1fc3becaa05fcb3fab3a84742ba6c56969d0d1de7898dfc6d0a0d5f939a35329eb09f317f3b8cf06d82c44707fcaf6f94c7114a18a53de3d0d03642815ce9036764f66e9f63e8be8f78904ac56a6417d92275a9d318f98c35f6437cad9856aab09bea0a9729a06cb4f784d8f77e1addd84192a3a34f4163e10ebd7484b6fea70ec7e28bd307348992922a681ac2442016a700ce05d2b5f9866c2cb083435176d67b6868ff5725a38cdaf97eabb1709d18c5388f772dc7bb7aa0e9b745b7ffa8bc28e43858c3f43928346a8336d61093631eb27e73caf738523fad0f38af499b0442fe609bc810b8d930f62c28aab4b16a3607018834a4ee81babf1ec873cfec536c1f7824ce0bb1344334c00da9cd55b28d9ecf30f5814cad84c86c91b0031b3e06bff5805065a0be0daef5524ddb1eb097e21dea77fcd12a30317f10ee838608a5685f2af98f05cad2bd12a3215e7b08e789942156782a8c4f82dcc289b1db67caa11ba124186f0f44f7ce5caed7d90feefdc881fb93b7483554fc231c2e89cfd8e2b17f5a722aefc6e78f0b50d7d75a30a70168e1dfe5d283f063bf0049ff9572a5c712172cf7e0fae4bb1bb1cee46c3f2df56293ad54efae0d99f2e0a4cb7d0a72b315f4b9248733a7f92a3c3d9eba7cfb1aebab9c72c42605056b37bf6bdb12d21bd75da75f471389cf937a9454b97c86c880741dce049e7f3c84700a6f342e3c47e2bc67f6b51d128503d773a50da059a4bda7b1d52549c4b5eb2416341caf29fdc4bb7b8935b2cadfe7ed4c1e1baafc25ff90f916aaea7df7ebbe5358f938237409b572955d772b26bc269e0e67dee6d2c2ca441119e3137912c9524c5e3ba1610e54bd99a0ccac0ffd1dda1486ce9221a3de2332d6b62dc00cbf839cb03c2c3b6ef3ed048435d5e2272d90cedcfc96991f27371a75e61553261b77b893bc3c69882d61748c452143c6f0528beeeb5caf915fc0368bf572a8eb579f3e8d2e5a82065bbb583d7d26ab58e08fda310d6ceba6c28ef57d66be47e91e7a7ce124ff0b46296b2e0c405e9f5988b93857f54fc3cc09c3f5beac60a68bba8a124412a26be3f0f1746d21218645435f34a8156dde7d803fb5e448f24b6fc65e9d3a89dd2a5c5cdeb9f4a227f6b8caf24dc5f04f7247e0329472defbbcf1cc685c28fd17dd1bc7936d2745ca77006a02e216187d5597844d3feeb0e561be3727fd83dedaeaaecba01c798e917dd8bb11a03ce07fcf08f6f006ac6137d021912dffffc1aee981c395366fef05718e38aef69f0abf64f8b2cb9750826b8ec854dab1e1280c403169e3497ee9af08bd6d2b53a0d9c49e034220506f7719041f0cced1cc846b853a090ac42af0f699c2c3174606e02800952faec06dd198c692237ace3669552f083b7c44f8a764ab5ac5135c25b042034ac5c765b004935cde335f15a34941b4287bc83a6c7f71c3d20d7ff481bcab3c80beeaceea92711d3fb6ec3697a6c9ab27347f22faebc669c4e6edbdaf87dc12d375b95a71fdbaae4318b2af87f4457a611ff17d386eab039febcd0603845d0caf849396eac8e88694e342eef8c45db87278dfc7899ac837efa69e6c224496a091661a12c966831c81b10d836e996adbe7e98a9072d2865d2091e25e804b21651584ad4c726902f6b5dc82fb6de6156b1dec924698b86e19df28396bb20a75d0b87acda29a42f0ab8df033b55b3cb5cca0ec87784fbef7c487e3f4021bf51c59d6b31bc38586c4819686a05fcaffe4970d83caa42c48bc03975fb2c032bd8d870cc7f81de897073f5bfa594941b22a40a02cec38a308134d99f5e604aaa631eec723e3102816212b3ad5bf1033f5ef6025525cc4385fa6090c311e6dc851a1e792517d58c866baebdfa34223363dbc6bf99eacc570c1dcdc7abbbc6a304266080acb17463e1b3ce7a6eda310acfc19ca996c4ccad0d1302e41d0506866eaf6c67d0b61671da61fa +MD = e796373a85f5a0372d9d6ec70acde59b60174d4298718ef9b3eeb0222fc6c182f04706a2014f8608592493c3e7ecca4f + +Len = 48544 +Msg = 46ce506d593c4ed53c82edeb602037e0485befbee03f7f930fe532d18ff2a3f5fd6076672c8145a1bf40dd94f7abab47c9ae71c234213d2ad1069c2dac0b0ba15257ae672b8245960ae55bd50315c0097daa3a318745788d70d14706910809ca6e396237fe4934fa46f9ce782d66606d8bd6b2d283b1160513ce9c24e9f084b97891f99d4cdefc169a029e431ca772ba1bba426fce6f01d8e286014e5acc66b799e4db62bd4783322f8a32ff78e0de3957df50ce10871f4e0680df4e8ca3960af9bc6f4efa8eb3962d18f474eb178c3265cc46b8f2ff5ab1a7449fea297dfcfabfa01f28abbb7289bb354b691b5664ec6d098af51be19947ec5ba7ebd66380d1141953ba78d4aa5401679fa7b0a44db1981f864d3535c45afe4c61183d5b0ad51fae71ca07e34240283959f7530a32c70d95a088e501c230059f333b0670825009e7e22103ef22935830df1fac8ef877f5f3426dd54f7d1128dd871ad9a7d088f94c0e8712013295b8d69ae7623b880978c2d3c6ad26dc478f8dc47f5c0adcc618665dc3dc205a9071b2f2191e16cac5bd89bb59148fc719633752303aa08e518dbc389f0a5482caaa4c507b8729a6f3edd061efb39026cecc6399f51971cf7381d605e144a5928c8c2d1ad7467b05da2f202f4f3234e1aff19a0198a28685721c3d2d52311c721e3fdcbaf30214cdc3acff8c433880e104fb63f2df7ce69a97857819ba7ac00ac8eae1969764fde8f68cf8e0916d7e0c151147d4944f99f42ae50f30e1c79a42d2b6c5188d133d3cbbf69094027b354b295ccd0f7dc5a87d73638bd98ebfb00383ca0fa69cb8dcb35a12510e5e07ad8789047d0b63841a1bb928737e8b0a0c33254f47aa8bfbe3341a09c2b76dbcefa67e30df300d34f7b8465c4f869e51b6bcfe6cf68b238359a645036bf7f63f02924e087ce7457e483b6025a859903cb484574aa3b12cf946f32127d537c33bee3141b5db96d10a148c50ae045f287210757710d6846e04b202f79e87dd9a56bc6da15f84a77a7f63935e1dee00309cd276a8e7176cb04da6bb0e9009534438732cb42d008008853d38d19beba46e61006e30f7efd1bc7c2906b024e4ff898a1b58c448d68b43c6ab63f34f85b3ac6aa4475867e51b583844cb23829f4b30f4bdd817d88e2ef3e7b4fc0a624395b05ec5e8686082b24d29fef2b0d3c29e031d5f94f504b1d3df9361eb5ffbadb242e66c39a8094cfe62f85f639f3fd65fc8ae0c74a8f4c6e1d070b9183a434c722caaa0225f8bcd68614d6f0738ed62f8484ec96077d155c08e26c46be262a73e3551698bd70d8d5610cf37c4c306eed04ba6a040a9c3e6d7e15e8acda17f477c2484cf5c56b813313927be8387b1024f995e98fc87f1029091c01424bdc2b296c2eadb7d25b3e762a2fd0c2dcd1727ddf91db97c5984305265f3695a7f5472f2d72c94d68c27914f14f82aa8dd5fe4e2348b0ca967a3f98626a091552f5d0ffa2bf10350d23c996256c01fdeffb2c2c612519869f877e4929c6e95ff15040f1485e22ed14119880232fef3b57b3848f15b1766a5552879df8f067c3e7972fcaaaea61f421fe7e6966e5aaf179818feccd7847c46c7dd40d5c70f4efca2cf5d236fe6de8cb5cd3988d37b5aeb9f7b6cbd4e41e43294bec2dc0b321320d942bbe78e4a71954bf40b3f290afc19d8881b2d87f6a65304f4865d2517d49266f39d5ed379e2472984e32338ae9e888b6892854b4ac88f61a714bedb65993a910b8bf0081c398996a44a9cc71046220042592b62e554d0f1fef569f6c46800a2b20d05f3da7c42dc7cc712a0d7ffce7f3ff989947051fdfe22b0c43ede4bcce00fac055e5cb55c4135e2ed89acce744f87f905a993c8fece3bcd397a584986944bef580f4aebbe0ef723954b37bdfdb941e10968f5c0bba970d52f74dd6a16068d5f66ce4b27508ae91373ae1fd34f05963afc9a3f411bd9e94f0ef213b7647efe8297650770faff3439ed790d18537bad8a4607185409a5cfc33dbda2375844c6e3549a27cea4b3ff1d6c76a895f162af5c4f7729ff6a544ab9269d33f3db9f0c070337534936ef7348596b99511204c3357eb21a4c272f81ba30596ef1d3d9f8780e0232ea98fbb8411a2187549ca7129f3d7f9243287e9d4dc3bbfa3b2a38b4bddbc46db8b31ff59019601ba77994c321f4a839eb5589c5fb478980d9c605655ed444abbb6da353bebceffd518f13ff4409f3b84c9697224b248ca7d1918736e35f4c95fcafcef9526d98d45ac86bee8ee529b76ed4f1dcc5c38c182d71084dd5e6a2d38262ea0fd4932148cb0ae6b789f012dd5af5e01af18a517af550ced2bcd00f0c566c3dbfcd955303ab3fca83bd9275d317e3aa0458e2a2762f1522ee1e855be87eb7102fc4ddf6aa024e6079b1341b41ad8497c3813448b4e5a84cc8856d4e110429aa8741d2d2e8d91ff0c2ed3ccdcd25c2f17ff4e60cdb1ef1948a78f0b02cefac55f0ccdcae62379ac285f91451228684fe5f3a62b493e3d74259807648e448275792ee6354c324a71deb5e226fe6d8b1088cda0e08863b459d602467dfde1681f9942ecf8ab1a82e4b1ca3d0f1c22333552e5c54d25a2e20eec4ec2b3dc561a4831e158919d4cc17923f50859d5d70f12d6c499bd8b7c4517db0602a2a3f32773d5a2af7c9d6974a3b7ceda83d60c6d3da6e284ae34606c0924a09cc6ef490e26e6ef582615c12af8dfc03a397722ec1a35d81cbbbaefb5575ba6e7ad08e83cd6082fe92ab11432fd2e719dd743cafa3cf61dd852898abf96d29179a1ab2132059bfce906d9a34b05065b8be9b655161a7a1c2e0f2ac1f92c4bf8d96120a49c3a24cece270a2ed1b519c67aed6961ce47346bb44e0915e09c0a357d4813e2c9f8352e0f27ccf74591bb7ae15eb7719127b774d19bcf07047aafefdbe2ef6c49a43f9332759c9d351f6dc155ba3af4fd4065d02c74c705e33caf708bae3d91a9d2c686ce8ce3912ea2c3425e8c6e7c7135d1f61b659ba2fb467b7ff32668f359184c8139fa4c7370e04e665251cc687b5c9e7f24faa75ebb4ca656a8d80c11e5c9440b0b3a31a4ca4c51a5e786cf599a390da3ef8094a9b1a3c2ad233f917dbe8a4f9cc8c93db5893b8fa964a801b04c6fa22cc1a3ce146ce032ebd8c9938761bfc1bee923cb164c525ab97041ee1d10551e7241e0ce1f4b76798b60028cdf6dfe3cd9f2d664577215458e90c0fef0747db50cf6a41f3adbfb29042f76d7d641ba33766c5d83f998f8c2712cc1becae76e2865468a3be7acd2a40ebd931f1c7b78282cbc25b46d2f716409caa0981cf79acb13b7ff9eb62ca19ce380e3cd0279ac9d6568cb7022b413acc0f10a355713881f70d160d216e9cc562b1fe56c38daebf5a908bb41cab5640f3f165af119c9bab835197a509a52c7725df114772ffdaae370027193c5b1c70dccc11f65c588a717b8f698a4a0f62763e49b0d6848806dc942fc9b009417c12b0277c40dfaeed1a0850f4848db4260cd67841cda22d1a929aa3d73f2c675e6d968b0e5541a5acef511aa05b7a9d617f15f22ef273f8ff1871e6bb8f4cd5abcab77f2ffc2b46af387f78d5d6b8d1f9182241dd0ea0f09bb64080db68129249713b8b47ff4598de3db9effbbef058d81f26ecb8e8d01dd7b42ff7a19226a622aa4937be2436a3224528097adbc93be4dc487c254aac889c5968d574d42f191dbd090cfc34a76f6199f34dbaf5ec810796b1788efadb38d0ef10a1bbf7d6f321f1a49169f63f058582444324d40032289788685ac106355cbc52e4e0c4c23d1890424f6d34a76c744640741e3fae572f25f6d5f167d588290954254a009bffe9e00acc71b486ac182d116711009ef603892346bbb4ef381e1d3eec61760b3f7c2a2592db3f85ce5781dfa466dd771a8e0b36432070fd4d224239c28dedb807b9b5bb29159d4cd81b88d1b4839fe2c8b7f258548862a6d01fbe6d2d362c4a5e88cbf317859682d54b8c101ed20e860a6688b0025b5393c8fcda01b7c4fc6a4dd1b2f5e695f2cfcacfd3c36ab9f10ce7831367d4010b6c3da1de1de89f25c0da7cb3ea1dac78ddc18fa51321a2111b68f7dca453e252d838f612eb472f6ff3107116fa4531f151c1724c28caf4375c93a82b900566f07fbfe2bd905cdda2acf498234ce58e26d6d3620f29ed172976727f485374f6ac0add502937af0f859290d92209852adc12fe47353f1373b0120d647a1428f84f2197259c06c92ee14eeb1d5a58ae6ddead4a070791c37093d86a400afba8d6a16bf74a5f2531a37e870d4a1462e6bff350bf8bcd4885769c6f93f940317cf66a9104a7babd6fd524e6ff4a984eb888e2a366bbcf8be1ed9180907964de2cc2723ac624f4f60c2b9b12c8032e45a930744d467f5483603d3bb267a6be2940a0810f46aa57f78f0faab4705f1e6f431f71f767c0a65789ce62ae226a963b41fa5eb88b1f29e980e81b740045aff30dbea148d2640b30e408ce1cc9ac333cb737d2dc9d6db3f3681db4f97f9c2afa8f73cbe98e55cc36fa5446a26254de5328bfa523857a3d3ecd183eecf54ed7ab52a7b981a3793090521893ebf749dfa81efa9f374a300ff23a4080f46a42fe2fddc331b91aba816775bd7d9d8f757e64205087bdf475703634fd44bae760e7adb82dfc39faff05e2e9accc6133bf03afb72927608c33aa3245b750e67390da4e6c4fe2a84b2f062a384c48deea0fb5b069ed45c61951030ff4d66d1f17ba1e3a8090aaae1634ca66e904b9bdbc4ddd90c104aa97a3b7c4f5c9c2630ddac6fc987c571ef462f59abf853ee6a5b161c37644d61e7c334d340b4de4fa59c49cbc90e90e0422375abd5d9361983fd234af8b7ccb691ccffb9d7a07a2faabdd25a64c4e1c25e09d4b7d679bd5973326ace9f7f04c522182a9456980652aaa2e4701f133e949d49db020062601ab28b5b2b8e128bfa230513f75013e9653ffbeeb17aa20dd37a93e71ef61bb4f9cc6882f6671ad8e21f446a5756acb9b3d5295fa2e9d9e60b905897732a1e22631b6a60939d1061f971268c38dcbafdeb04abc5a8ff234da959184a831ed23ee33a0172a7a26bbdccc35bf81054c70c5748f3af582d26bb394f439ed336e07106b2be478709b552c880354c8241798ba50ca17b14e65ca537ed6b02f824b15f29e0014dd65555b7692242e7e3451af240ea35c783dd2d9221be1f05464add6fd97c7af409f7f5524b341558d7b253b6b74c110319542208933bb014522bcd0991d27be88673fcb9db302d2db42b9c6f64bcd3bc49fdc28ee8d0cebeb039f8d2ff7c8489f05bd46495a0eac52d035d72f5a6ee518a3c978baf27db62d517f9525ee53556cc1234e906f0eebd96fc2f77d6b4d1717e93098562ab56bf252836ee5ca70eed7e39669dabca998576588ac484411d9a8b83a1128fd5d122450d4a2d553c619c8b240218f0788bab6fbae81f9ae6331b35a0e6a9a331db1aa9199b95f50fee0277749fd17195259dd795cfbf671eb292115d62b13939c526c5efb39ea8bbf4bdc7bd985dabab07db427bca4a85550c8d832b7ddfbe683fc52fe22acddcab261d003164241b14a2f234cf30377223b16c1f8db07b9f479b844bb3599a2d67f2ae95a2bbbb2c8c77612322ca0cc9f531cc4b16a31b785278d2adb5d89a077cdae10c73e7896c5d05b691f8d040d9541e1caa38be35c613583eca7c1033f7444f62e91780256710ce5105c3eb6a4cdac6db91867a6104f4aa272678a8fe7978d09290100e05894241cef31683ef70c3dc97b5626013b190ef3a463dfb500a650efeb5fff9a06f6bf08efe53325701d9cfcf6a5ef7d45852b7d6be2e9fef26a34b15af39cb9c75e86b2f6c2c6f275c7700e144feaa0975c4648ad2ecff126abe256600400c402962021ed0e4a2d70d16108bb9b41f597650a5d548dba17023102e6e4db52432164375dbd12e65fc80419f1d5d01901ae6a1cc34648d2f6efc33b6acdc1bbbf8b91706f4c16c30fe5283dd149379d4e443127826da63e18562b35e805fc63bfa8e5755e846208c52f0578b1ff18f263c284d1a3aff127059d2f996b73d471cbe027ee324c3dde090e626f98dfbb43c88e29c22df66fb4432e980ff8ff930d6b9b2182f48bf16d64ea08cd8ed167b60612e8a328296a0e5c6f2d3e99917f61284199daab2bc4dc5d2bc0389bbd6573a4b58b1c9d30285cd8cab8cf5511e292893a589e5f13ff547d395058c88bfea32aded8d493f3f2c73da6ff69356702cb17ee2675182be9fc4a7c80d71c23776e20f7997412590f77156accb53f7c283258c6ca07df5bccfd4e5d1a5aa06d1bfb0f6794a3224cc993e780e55b7d369befd6280efdbb8bee7e1142e48c5a5231737f96920accb466443c4f1202f77ea52b197db8ffb5a399a81a94a81254b800fdf6ec5a5117772fb19b3f1d52b43d8c0ea72e91b4d48b13a3f1bc2c979689d1c2fed1b61f0c7e6c038cb8ccf5bc5999bf0aa161c5202ca4961e2039c126abecea1ead6c1cb1b165619722e99017bc1467ca40f0d9a16c96a9292a96380e08999cdfe845f110f861f445e53acece4c452d6d72059960342f069b410da556862000c7ea0946313caae31d698854e7f3733a7d9e6aad646db9d2fccc64b0040fc83f601b80c21a638657a8179acd6d97e8b5822ee5bcb5fd7a38d2356400228adb8132e4710ed5573e786c553adf6522eac702893f6e5ccebb5ea7e3d53eb7de9fedc3aba6d26afe196df38c2e32d97bc2988717406d60c6c36c023e7f11ccf55dac9ed9e5b5df42615fc5253f6fd08ab84f9840af5ec9cfdc8b6cae292268b65ce548d7f75f3e0a5c756886353e53371315be6c55eca0d04ce36c9b9d199309e6c14a0ca4798f3d54d86619d846696a1d117f03fbbdecb05c9b8a6da19d55d641682ddfb3abd8c58faf4745f0301a0b1c6c666d6779b55954db4e8cfe56b705b60179baee9c23895623917144a36e02594df81262c903b27ccd41617cedc07f8db5b4041bf57771f05cce079d486e371cddbf5bb355dfa31b96ea52e20a792a0eab6824035ddd65a781856ec3c72193ad4342ae24c450147b61d1c8fa54e8ef810c1c846e7d5b4dc1bb3f0e7ec790fc53a809747bbe5fede2547f2c8a7417b72dff598b24fdfc118731834f96f0c15b57349d1681ed131699977be45b110e685bada6a1ec84c59a410cd999d2ecbe99010e85fafef67478e8534d5a35d4d4eb533d8b2e8fbac0ce3773c954fb608f9c995f498aba848af916b07ef4df6570295dd8909ad648f496b08fdce8d9f73a4e674e722d7c3d5e826dd5951c236bed09c1a63e4e86d669dbf68799bd3457c996b304874a0dc9f7fc33eb1a39c78f5072c6ce1cb06a0b28834f84893bd428435bc4a9104b36d15d4db11996b29478a34eb579b3294990387704ae32cb8113b187e3649597bdfd995f2f8890f152ceee84d6ce8922ea0ca1a05c2c1ed302bf1a01585d9f966af4b218f55f905dc93b37fc71f6280116286ce5a127d5bd20d686b16bbdb5b0075fb0624ac71e5ec065889ece18182f958ca02d19c6ddefa3fdfe7f64ac604d5ae59c2478e8c35c01f4e852355ddf152fdf45620e32c0d353de88538a5127d52d2f7d46c5e906bf52916000eded071aacca646bc69206cff7212f1526d592b046e45baf7af370f07ce4f6903fef18a5d3f403308a0f354d596ef8ad805f29466dad3e49de2d88554794b4ea738b98206d062d99a1d1d7b43f6bed03e01875006c322ffb3bc0d6577a4aa2f6d1eb11f242a7e78e55ff736c72c315008e28fd440a1a35add7d3e25edfadc79da0340a831a803bf7ecc292ddba1c788ad1b6497b0e0e5947fc8f35d33c662bc52a910c3bbd3830bcaf41bb6fde1f1f8af3eae20e41b5a2b2f01c561c5a1cd657b5289e82f378cec5e6a5768aa87311e93aed4f636bb818d4fba1cda30178d13c8a2148c083e81efad9154b96dec0568defe718e454bec396674623cff821235af1a5925d362f2744cfbac3fb49b0f76059ffc6f8c370ace07a35df0709c0d49b31dc05c1d4f6f28912bb6521b1e9fb49c25ee0068176da9b7e9389b5fafdede694ed285425e485b3e841ba70de136a2f702cee78577755adb98ba940947f74226000837ff0a2eaa89a74495197d74dfcac9079b50a1b26007442c8109fef7439de3f9fa8ffd729526f7b9a2aa5ddab97beb20825650b547bf6e36d8de3f4f21256d00339182c4897b17f3564d1cc8ce8eebb23302fefe7058994211f2837f89510db379804495161a6a7a368e14cf8d784d3523e2f6ee888737d6b2e35608daa5389c42f8bd54b97981c6b9d9d07f84cc7211eb72e315eebfdc8d322d316ba396901316474793f21cd05156acfa2932f00ce0e03f4e051166f9ae163ca01862a986c06a189dc34e78e8b29393dc8d2687801ab8a4922c9f0111e1e59e2caf96529f2cc4d90a732d022d63071b01fbbdf74e37bb5f59fcf632a79116ce2191bd364ba0acf528142c6d30db279f04f597d3f9c08eabf006a5704d643059495f55a90ed489197 +MD = 1a93eac31a9802d78492522fa021b98711d9334434ff3c45d8f3b441e1805e08dfc62237b1152c4b392ebf85ac39a04a + +Len = 49336 +Msg = a799ef180d0ed9be2eb02583263b70211167613373bd2da4d8a86167b7cfdc689ca21ac38633b9358e4835cfcaaef7f271d08e7740883c2e1c34b48af80d229af9b46c3bd80eb78d89522ea31a60fe7fdd55a53dc95c6d8e1ec73368485e6dfc06f66ce9cb46deaf65f79666dcfa90b09d1e2fecd7e2caac268767696f6ac6760b91a233278433836a5ef780d923b26df854b4eb32c15a707b9fd7f634da34f04fad9682b36fc0f1e2b0d859d9846e9e381fbaa4a2a225c367350c756056c0521b70d13f38b08ce21314c259a4c5cb2ba3a6cb7eef2d348b30728c50bb857184b705dad07eee9f3c46b33ce8018dd2fc82126ee1e0098eb21f7de1ed0d104f6f6b92399f4dd202e9c4b4ce6eb98489f91c8a2c353fdf3b1e7c7f92b61e9e62f97f4077126d04bccfd24000539453fa0bbb378be3d25644b98f9f2811b6d8b30b3a361b93a52bd5d8bb7f5bff5aa22d18a54115516217b0699f062a689c66498ee59dad89bfef56ebc59866dad318280923cf52e8b6c98718f6db202299ef2c68c89cb55c81fa46ef3ab4a94dc75ef5c77d09c9109815d2adda4793a7751b65832b5cbc73b4f1adce60faadbefd1c9c39fb180232cea3981094720a5ff894fbc556044938207f936f8093f9963ef92346e52485b4211ae1296c830db2e9fff61890bde5128c4a01bae1a6163e529d94d88254db005923b5e0a9a2240812075f6323af1769c1fafe97cd5c8a1c01b1f6d61bd18b7c3e651d1d95f9d8c939523d8e550167a6883893ee8adddf9a13dd5227f8c31d92978920c876adb05d278898806fdc5d2fa7acc7a761509c1f4fc8afb5615119a92e36c7c995e9352ca4527823b867826de6fda2aa9add4a127e1b15679ea30828c91519083ad3ed9f7858e65e7acb5dc80fd32cdf7dae70dd687d8d25f6e2727931cd1e6dad93621c6a41e919fb2f77a9e8d86e2f52e896e7d5971dd7b336dd032e07dee135521c0c43b58a3c85bc56763bb26f8060b645988d11d0651bc6d32e886b624a1b38a2d8cb5ed0b05e998499ce0937bcf03e03585792abb877bbdb6206a0b192a86c7be6cae1c35bcef089786986cfc94aa85b8ffdc2b8b60e3c7e07714fd39f211732a008e96b261fe6eb7dd6d03e91b61dd2a5454afe482a724285911fd15bd1604c6d4c1cd1f997a5340edc908cfa7cc5f202f8d285571185b2452eb9b2acff7053b46022fcbd8055eb95426ec2eee3c7420fde0156c90c9c53ad10c47e7cf26ecfdf0aa4f458201d9979d111e754344b4a32be80788863dfaf26fee93db2f3834655134ac2b4c026c52251220313b87b93d461f6f37a5e774d19c2d0f8364ad7427e43bb6db8a798f7f88a481f15b47da45e900cd089458cb5ec2220b7f03f914ac261a0fd4b1f9ab863432c414173790536116a169c5f457009e78280c81adae78937a07b576e548ecb4676747f3c983fc6acb7cd9af5cb05d6d99d5da622d99f3b8b64eec3ddef049859cdbdb75601d9752b9cfd6d4f46fcbdbf1a5572a0b7fd4026935e77b4939f3245d926d10ade5baa54c0affcb5ddde2462a07014dc9b8600d0d6d35a3b67e901d143b6b6a0544ecff1cceb2f6fb831758bd8b7741eaec4e450d55656ba94696ec7b3754c608d394bc867b7eec40080170069317aae173e527037ee527841a7dfedd06c7c91b1a486a23a1d21fedd50728afde70fd3ff7cb3f6a5a437be972cbd0d43a22f7de717e846ec24b063762beef039df19d78e0770abc67febd4be7f71edb31f4b6a581bd97e26d4833cf498f3fcc7238100eb66ef5743875702dd286156c9ecb9a12c37c110903683d07e20e9744fbb30973f219ac2c3c463901db0f70f2d10626a8af408c5d15196693d49382178ad0de3b1c1d8b3ef3ff8c5a59e9ae286932d0c9ad91665922ea54d599e48cbeb03ff2e6acd10f46ffffcea9e7ab1957d7e01d1866e53b87ad399c5f9a4823950c5f0be92cdac4bea0c59472fcda6f1b9d8c8ff733b2885324a581945e54c354ef9c7dd50491381086ff524811de0bee3a969df8bc9fb96619bcc9166e80f858da96cd1cccaad5e722fbac9bbf5c7c4a2faccb9f69f35b1b0ccdb75843534f2b6dcc6e22fd7e2a9d0548e7d06dac3ca9fd2d9d5dc453f9fc7e76f0cc6552144719bbf5aa1f91a2cc9e75b8a8a563c9a8139787a64447f284df36f9f55cf404365ed3e7f49b7bdad06ee08366ef09afaf13791f2b6235f13ebf9c376592bf8b73bda2c9b509933f52f747dcadb3145b397d50c83fb6a462a480053d9f9f2b0679a6a6ff4dd27e4cceb7ea28df89fa68d1a1ad1765ba29c330d1007105dabd21c2ba6f0d219ea39f9e2165fc9eec4234f230fc813fd52c8f7e131c762aedec59e9695977f2c699846bd439cc4e42825c359badaa10a02343e6d6c7b191413f1b5823f4d423d2c6a79240e41c8035115af6525ed6aa93a47d058c80b7bb6d3be2997adf86274bc185bbe7d361b72c959dcee58eab4038369744b4e5fd1bda594c17ee68128faa008b4349b63055a185b129d59bac8406402f4ee055f625012db46dff2d1dcf760a44c2d6db0d0e3c481181a3243ee87667a16e8f5f47898a1fb8161dacfc6928553ea52fd06c2345735b80ceb6f6d000f3aa3e2260459bdda5c37ada5622df4967c584b524b257659deb81b8a258fd4eaa86283a1784ee64566336b5b745b451b895cbf74693fd050e3e1f0194d9a2b7c2d1d746d399f3b6b823c4205ec96ac9de1bf576c46596bc6aefb339fced72c4f329a5c922e94e5d31619daaab12751a3ec48ba41ccba6f42a6ce8c25928e00ea1da2e4193e750c058c93dc52ad565db512c190fbe1ac034d3321a1b28007ced557fdb4095389d78a4a72f005c76af85bbbf083a36f754f6ebdbe1d4e8089bf994973736a54196fe9ba7ebdcce7ad491e4f9f393f5d5e7c2dac6ba6017a5dfbbd5accc944286dfcaa427eecaef565798536945ada93afb21269f1e4d456cca9c9f1cf60a0b9cda5564c3c24b4dadbaf19d8988f79f9b018a65a1881cefc1cf2457846dd85ee8192743f7e0ee57c5714609e72802677a9d770e8a722f85595fdba56f7ebfcafd0ec8c830d5249c420d0e4eeecd4e8f5e116f87b6871584781f3b0f3aa300ce404db2680b197e89a800a2d31cc33c85ba1fec77c2116f9bb26fbadb72954bd756386cb9e3185cbe7bdebc1d0db47cc9131b764519bb9e09ace3e3b0a3b00174b3616024557c5f991209a2a31e1b5fe7fd96857649e0117cabfe3e154a7dc234cc4b254dde9ff7a82f13ff0bea628660ee13a291cf296a535411328fd368fe861578348ceb0da57a0780499def1460b24905461e05e2192c19ef6966db0c26e7335b1668074ff97d5fd0faff88bb7f5aa2fde871aab4ae6581cb3b50cdd1cbe68a763365bfd164208c788ba763d242c8906022431a1b8aae105730d438446df2af5c141c812c661211f9840bfcd35b9a75de6bf8d0814e6449f5d24786fe7d99f67f40e2d7db7fa074d67cb3b0391a3ee7cb2e096a805a069339a841464a8b5b1452425f3049218a4991ce252a9e1f245aa8f0fb44934e2380851b5802c317a47d6780f8370ffc0df4adf0e6c85ccae9331a5d54fb248b39968ab3d238f2930486319534388a5fca0aadad5f161fbe0c2571bb9cfacea1c7499d0a6645438e09e342f799d162dd3cfff32c249031590b96519449cffc223b1e4e778ad4507913091e10af8e03e4e5592125adc33c3c460a2c9fc1e7377d33891183965283e4be6c2578dbcb0817318aba02713bbad869f58516bbdcfb231f1e88d73f3c68516a80eba8a504c9e4c019204b054627add5ecdd919e2dd1a47c4316badc1e782fb5ebf32891e7c3ce1f88e677d08efd3d2854b8a8df363581c9ab3dd703652e001f01be6138d0a0338e6e8f117982b5f6bfc188b4f5a2a13b859b70943bad14531466bffaf05bc9d5bb1e9c9056adec7b2ab7c05e77dfaf424eb8517aeb52a5a9149f6a4e6ee5caf5243d618cfe8cfb2af7bc120dec69ba367366530398f26c62cdf06fe3fb1b0e42382fa05fe79c8c969522d03ba9cd4c789249f7c6db18d3107f1e13542b481e1d8589cb919848fb4e81a0ad706666e08939c7a22d18127452c68d0707760965179ac035ba873ee1a34b99ec3478e32108c853f4aee68bca7a22a1bd7671db9da0c65781433adaaa3561932f0077be5847cc9371e4acf130271210a939954b0249b6d430c439a8ef855200d86cd95520f6b4fa7c36f1cf5fca233e5cc956b44d82dabac6a5fa261c139b879ac2244405762ffda64e5b92a3d3b4af3a9e4cc3d9ecb07fb57102deaa50ac8bc8a8df0760468c11727320c7a6e474d7d530ddd631d7c6977fadda3f24dd1371f499601bdbf867da534e07fad37cb24cbf298087efe48b9697c4e6c416196efea11c5dfdd30c31bcdb477788a3fd1b725ad0eb455e837df1904ebf09f885fd76509a3f29efe2783d7cf7d61da2f60eed3acf648b18452c4cfbb3d98d46a36d7d85ab7a3c8d1ba9e0bac7ca165ae81b11c18d82e5a7aa04ed3c8cbcaa7b022d78a2b895822538552b074fba0f3653be84a193ccd187129666c541defe2022cbfc4a5a27a752a8f88104e83c64cfc967ba3d6ab8db312f6f5e487bc704b075a77cef0897289fee02971639b7b371a9a527078add6f2040ee181882fb3ab68b6e8f033c6a72678811b1cdbcb277e675055f826c8109eef7a148c80fe22c9cd48f87297e280143f794859dd9b32e78dbf6d850986a37f7d40744c96b2246fdc17909b4364671afcd096709194043b31ef805d496ef85d546aeb0bf3d22063402b99b45fd4c302578fefa8203d0541fee977c90d0875001cff600fbee6806e9f8cf90515bbfb92f7bd3a4ab21e9ec399b43b117ddd83307e08baa22077ab58a2439ad68ba0799385625f9e6ec03587ad58b37dc2748bb4218ce30a410c09e9f056626fe90ba4cca88745ec7daa3457e0dec6550455f355af93c28f482d02e932d03b175884e4070932d67c076401f9da4d5ee06a0924dbcd263f7b5e62fe1f0fb60c180094a10a506ef9953377063544ad62671d17870e254b4214aa3465543012bdb808c2439e24409681296aa9d5c607b932450783b55f0cb3a4552a9f503ceb35409897328b2db2968612c5549f07624d8908627f9a23717a7186cd14dbdc4a5ef8da9ad79914cbdfed16116e5db0c605b491afe583178180c466a32dbdb8361f27f453989081935afe5cd55fd5683bc9fa06761c39e644abe41d3650bd77b760160e4ade371b13ef000d998ed0d8ca81a590408c8436c2e41bd20ee6a5c1d5090e510812578b52873d50e66515a87a15fb56939d2bb00414afadb1583b40990355e4149ab8785808fb4e424b6e7f546e4581fab7f8fb1121e9d7a90c48990a3433f0f6e0228b2e5c832e38a8a1055e72ca38fa42b1bff1f511787e6c93773185f29d374a5d6cdb691d194de577e3a20ad4a41da61fa6ad766fb7b6dfe68014ded9125e4230c2671910370b68b8c1281fa9ecea4b0a564c8e4abddbcc075cbd282f78f32f6536db52a6aff99a2c46f697923ae99a3a77d624ecb2749dbfb434493df67e79c26f3efe25aa9fe39a1b165cd7b3a3f976b2541f9bbd0ab9d6307f2b4bb5888710169804d64f86accce89054c0819fd187afcd69a00624881477a8b4a0dd98c316d2f24c01c7355b88546a6995cc658b361549e943b64a724132b7ce869537949e4c53beee39345a9707ae829dbb7e8d498cd087cbf505df2408b2604305ec626e2bc342e4ce0c0fc1aa64862177714188be6b2b82eadb3786a2a35220563f9650184ac02dae44e4cde5925f6928c60ebd5021bdaebe56e22fa7918c65b0b89609bbf1200f00643f855f42f4bdf4065baeedfb259898fe48e7c085f55a3ae0cb64bbbf4ad3edf58aafc17b2d6506b892243bff4b88a15ad276958677471d3e9d28c1bd26c09c7e2c14b246f2a884641ae7e23718c501f2e6a3cd9cf973805b751c74f19d2035878d7cdbaa2bd097935bbf8bab7299df4eee3711cf64278cbdb90a7d659539e29815afe3afc02366cbbd74de62434a63f750fb08289eab69eed3b88321f755c93a2c74745d99ea1a97a8cd82647121b77476b45bae90473e7629ee2f2bacba12f43a9433bd9f6cda7c849420b9e566004dc62db16a224333db2576298d9bb0e64fa7d8cad6b8f3cf04b98f5f6a8861690baa2db3623de672a72d17184fab816dd2db05e1b0cdc520b6af87e87d415a1735897b09a0c7792061ab98a477c673ce053fe61f54c72bf61ace4362fdf7983553cae05a2caa44689206c2760fd3d0327039422dc98c6d79b97f8d76ef9464e9edd7244e0ccc8f70c1a65d361eb9dec09c32e0b21706d3d01a282bcc5dff065b8c170f8e4a17a26076f3318cad62e6a110938957471ba524c633e60b4e20c6b5b7f268c2ee71c4613a55051ec3b52ffc54c205c460b52a9c430686dbcbdfeb1cf7d0f992fec43f9b9334a297689a03faf1291ca06abbab611b0bd3e6db24bfbad31988a484f759350cf8d19da4f9a8c36e2e96946e15709ad5a895d186d788b7d335dea387f25b572a0958d880ba677e533b3a4772abc170fa479347d4e08f3b7f8dc335109d8d2b77cffff203c6885329b7d1628165e60b114f96eece271c6d6087ff0226e036d67ab390903603536b760a238ca02b2692a228666e7b957775fd8c59b3d1a39f83bb1bd15d1f5a10eec59bf86ed9e5cb2e3639cb70e410e77cde059af019ce1158c3708cfec8b306049bd418af337b1b0654ec8d9c0f81b5aa8c588a600749d27d191b871e39f77ed3821c4bf8b7d55f4384a8739906d12a268eeff1aca2fc2a1b45828b63790cc08601db58f16bdbde0c4ed64610d1e68c196c30977cf3cf635ad00f5f758fdc1443a17a08415976e28a3bdccea876aa23aaaf85447600abc4614129cdfd864ec232e85f2391898cb1e4d223d30aff043902de55bf45d376945920379ba36349117d60f37188010694439b131ddd73db14488107d18f741a1c69f6a3920e30b74b49919eb9cfcbcdd3cf1f1473cadb19fda5210542fde97da4ba49d47ae7f57fb6c102c9c50defc8b6afe58f9f793ea53c4145b6da363c897374a4321bd5b8899a0a3bda5beb73de850c76ea6791a4671943758260e37524d3be8c253c8183bd414fc43b441161f9870d588f94bb1647dcd339d19eab9a380ac08b15a7925d03f2b626524826c00005db15e4ee9e9a2dcc1b1a0b5a37b5ac61a3286a22b14f43f467e8892ed399da479d35533ce33b0132409f985d2ecd68208fec8c76865f65908b9247c0bff371957c3e434831feab566d51e16f39eb548fab5de46bb897510e4aacf3c492d6ac37a0ba1cd831ed1380c8b64c57001658f62005d8c8f0ffefb6cbbff703f64b7374303045b58a0f22f8795842df2a565c9c156cd157d59e28cf3752ba459158ae96552928a7e56cbe05a9bf2ccd60b348cab31838de107ce2a3b5eea4510b0845e3362c2c75ea0dd0f1807170ea493604c82293732648a106786e1a1df10d6021a4fcc1b9e940f9410225f878fe8ee678de8965ecf726167d978a5e8deb3f6a2820ce7037c99038f781c1dcaad1d6cc8d541014091852e22d4830425c08482d43a1d5c20ede81d3dcb67ba3702acaee2971e12a3453730d00d3884ff210d1b15b6d383ea7f0bcd1d7e87cd731d31156357e212fd46e31a0dd7fbb0cb8cb81ff56cd206d68c7e83acf60ebff5492540c9ac3fba9503236a2ab95f1021401011e1e09b5d5ba2aae17ae67f1a443303b163e8895221267271b545d51b76f79f81699691e0006e2b66f5b43b64d65756d7e0b15172181d5af13bf1f04b532fc0ff0b1358476b2b8a74abe3c61822228934ce8b1aa2f05437493d4233284c352eeb34db40ebd28712ab0bf9c1bcce2135486bca676d3067b1ea27bb001aa8c433c67542fe55fced8e6aa46a90bb10dfc5936713aa295ec4356499c109cb1f397a114b0ee30e40eb4843f3bad5abb0bac4a63eeb656fd2064c48f1f8929216215c7c3483918d24fccab7886ee2f7245ebce161b62bc9408a60f7cec64d1804086537c0458c5b3f8e9045b0fb5b35d21808d56e085f9e10dd0df18ece9bb58f5b2f045cc925e0e73d336f3bf490d040835302b2568386c97acde6c055f1030e961442888310c6c2752ea457cf466ef63d05f9dd2549fbe0f00b27f2010f791845bf72c207bf6547c2ec85b2ffce6a7981ac1b5cf8f565edb950359264299022e67b2597cb9454eda2e773cc1aab4b311dbff7a046186d465337a03fd3e1d0b4f4f1db8853220e2a91ca0f01846f99b34dbc0f55a1457a914a1be848f4cac344fd9df502130b09951beea801e18dce86be1ad2cb7eff0644fa978e4c2b36e0696cea02a39f91cfa3adcfef3b96786211db76e2905397a8d8011502c80bd8a088cf50a4cb6d68d8ecd408351d37d1fceb123aaf42a3b1cad0ea2ed63b0b029c39918c3c07e0f2bdb70b122a253a0ce7791ee0993103dff4b6124f8913ad572bd26fd738e7bec1d6b8cf683ef2119bba524e035109d864aefe15f18be05748e80996dc3bc93b58cc68ad84d3f25300fdfd2c0d372bb602621f61bf6f3fbd5a4945c305a54b0b19f72d01f299b472cf2ae03588ec25111bb6a081f3a38033fdd7fd50ee25db9297ff9c893be0a +MD = 55851677287615c9f5cdd01c36321a3e4ee0adc7aa8db055a7014b1eb8fe19b09d643ddbbbef874f8c80c6d1e30ab22e + +Len = 50128 +Msg = 879a4e19effaa5f409f3285b3e5736c96e96495c91d7c1869f47e306aeb121165a509be66ae1e74ab1fb0daf31a3d654871c47b783fc684d16854a75713147af6b8f8c09234ed5dbe79778b455a1a594c07fec5cd63cff827f29ba09087660b18000286b626af80f756f7051f1762af2e3674033d2be0f8fa3de3ba9baa7f484624a77f26f5cd74f222afd6e4c4dedd4b67e4c24c1ab1fdb4a4ad63dd0ed8990d9168187914dfa01b57127f4af4c77a303691718e92ab8ce3b1592ae926fa93cad0c4f131265ea8ff7ebf7c9629b4fc890d3a9f5946461d040e878e24856dbf2a5d3e87c38cb2e5fb04174d6ad63fda925620ba50880a2491f6b8ec23ac9a81a8a1454ac4ca84edba71aa703d8cc0ab08cbe440e8da703a1a145de36b0f1961a24769c899523d369a61f96392afdfd448c905c1a6d010d408e1e7027f1f52f5b3ba2c7fd5d65447373f84b5eec1f5eccec805cb0eeb5478faea04a7b46fefb45973fddefea962960d74cce5b6759b6b275354bb75aec3af4c971761cf7348141fff6e74686dc0b989ac32519e0d48c5def583119f7cd6cd8a639fcf04cbe49b53d6febec7762708384065a7fa2b76835229017bd0e8167a40ea1e2e18cc5db0a1751f4c8054ee3895dbd7574f42bd2a2d586048be62fb3bec95032d60170c0a9564507c27ac9e912ec907ce21d58530cd2e2006bc900d6909ff0f4b6f1e87ff8c2f22ec21cfa0c86fa2579b0666572dbdf4b1345fd1c5a8058262e6ba554a061220170b0350ad34d4f2773c6177bb877c5694601cbaac7f8bb9ceadc65ddab4b3f19d6740b20c6cfb33c730c78c1ac494be5a0877bd2a35f91fa2ff179ab291ee2e366f7e6656e74ee0c806ad060d6b73b6729bf55be781da2e7069228e5a241d1062a1f100152a5c740a2c8697fbe2a5c96ea92a193cd9ab60c75a7bbb49c1ed52b2ad5d01bfbc80880e10e8947ed0b751beae6a67c2b3d951187187a3fa11cb5fa6d026ddbef477773462479e0eac04f9d32a5ad9f1970069d41cdadaf38a33b1afb8c306ab888ddc2d8f281713db3b2c5c8b5fe241f9bd358adaf9c2bea1b2d34dc5d61f0def50115a060e8226f4a653bb600e134c524c2ecd2a48fdc3dec54ef195b4894e7f4ad12a457f81d07ef32a6046c9ef794749cfeb895cde9bb7f78f4b8702c7f5defa764eebdf7878d09dfafb8e37c9413f32839686b9f7bec3a61eac48357d9c74db8b1867c2e8b890035fddc4cc433cb093042e90c4dba5786d67a427b0fc9ae76a8a2727ae54e843bfc39778ebffe421f7ac443621fcd84cca04c3c429d7799d23fdebca164fb0624fc0a9293b21b029bd0657f545cddfb728707b9bf490c10c9450e6cd7f2b89522fc193442e8b293e7f8cda4c94e1145e25354c2da5ab09bc381d98806d8adbb9dc60d6583a8ec7b69baa5baab3b92e982ccda5e7b1a8ac328bce81a155f04fffd208f2d3e39f0448be095cae16c876fbcba42958acfc30f60bee229eccce2e9abd347955be4e775b43044da53291960f7e4336fefc28208d34f70be736a71020da7dca4c3f1f9974b745bf5e9ba70429a1356f5923bf034e9373ae09280d9d18c63f7635ca84d31ba7281208b66b3a00f0f532e5c81351d0b3de797315542df91d13fd80f500ccb68f35f6521760bffbda0d12333de784b9f2b1feb3832d3b282b75d0dc5335deebdbe9dcb93329fe90c8e78da0198e1450fc78ce58f5fb4d4c8def80a64976920219de25ac9e298e564a0f15dacf89a93c1dad48c1e240ecdcc0eb9d5d5c558ecfc56d61babce1d7c2d9fe4b41d46c8bd1f2b9fe9cec90923f50e4778010551d7b6b22215223e5734cf54f8e53dca964b8f8496028595cc60aaa84cfbcf9f7c6bb7796e5114796d98b284d6faf3cc2ac67bab60e12cd1800b55a26d6426da022f687361d56bc8882d3ffa26fa2693acb64a69a68eacc64cad5dc554bdf0ff0bab2f67a4ab0d73d07ddc7d8feec06845a16486100febb959cd2ad9a90e1456be68751fdfdbe4c26c0ff2d4b9dda8931c1131ca456ed3f5cef324a6135d7a2744eda361b96bd6fc856beac84dcfc65c5b8d19fdeeb34bc1d4a8b3f33bb40abac5c21ff6da65cd6b421a2a21f3cd020a279e84e6b2e43a6493723f8ac91aac56687053a6ebd0b055cca31ca752dd44e7abcada4e3a0b8a2732dc303164984845557ea53894b567034a8e2721130a74390c9c83fd2e2f2252da6beeb1b434c6cdb5747f767c1bd9bde564b259dd597a497599e7bb3559ea2db2a9e1d262f80e37b0db48264c0af0cbc5ab271559d43e5f0c4b6e50f790caffe31d715b16ec08cb6d3a6811ab8b937411eeed1e2f82a9c3f93981831ddcaa12944f071677179dd0151947ff42a4aa01f2b26c3c066ba1bc65eb861d4f4572aceec809c92e81b390cf004db8b95f1eba8f810c3686980f9378eae7e734d40a16190fe13de3323351c478e203b7c4d5e711e235d65810dc9159bd0aa675905a983cacf53a3d33065c1b086ea9e4dab8d09f5e4fe224dbeefb31ec5925b9824b797f28af88e48b12f9fd395973e9a9afbd627cc22391022f1c27003a2ba9b0c3030b0a76ee8142416f92920b266e39a3f581c4f661488c863b6480177fed24ab7c08dab135bc617a08019bec8d1a937ac125be5464f181da9f0ff457ea2ce6ec2d9e21ca253ceea40a73dc656f96be1e6976f342f333ea159151e462340efc6c5ef3652886aaf4a9be0fdedc9389c275359bea29d8b6ce1e5952d9a0253d70155732313320ad78706cfe28bac29ca8696cbd2b72d92335dd3f395b79845e4ace5f810a53bbee84e15c674268c47777e158033f83bf22273a8b2ff0551b1c907ebf087af01e141fe4d573b54c61c137c43f96adc6515aad1d845b229cb01c4c0fc0f1087212c85261214a08d06123f0fc6a9dfda15974ce6e73e678b60c098568a8613d415fb224408613c35b8b44ab702141b87e9d179315a0f77a0bf7894471bf829fc5cd799d694df76f54a8cd7008acaa65c4e7ec02fa53b7b103394490124f7cb86723c6c5c5bd1d9325806545ac52ff8cdbfd9b2606d44da40799e471339e77108d2b40a53a20adb735dbb534445c69b52ba7cb041f6ae2dc7de00eefbcf59a2da1ab9044b1bcd163ec816444b8120f691caf24a62e5f9edfcfd66c13959c0d99096c5daa13dbaf20b23a1b7df0bc1a2f16dc50131cf9a8376343a6e4a7dbf9dc2f3650e046c36f75efcd82e8d5a2b19081f5f453cf81296ba3ef646ad8fa867c79d111ed34bc3aeb0b03408c4d0cfd13c5c3bb6f313e4804f6a24dae1140db03510447d9c31038096ea4fe72414125404a0e4a6e297a2e89c32309b73bf721f91e989aaddd059057817863a09a8a529f789d4c589e7b0282743b418e3c657fe44756b47069e56b5daa4618203e2facb9b83a67357a8bed7870b29d39fed21e4e36033a2a4ff6f0a452d8c4fa17785a1570ab430ea4f017f21f50c4c2678825be526ad7e3778148b3e2f410340cac853b0ab989ea04f2a778e9dc5f3061cebdbd035231a4c9cd9a12c063a4d8041554b4ec2ce1d282dbc6923620158cd3eb0ed2b182f0742d240f4a56ec27ede9f9f00780ccf2cd06f19bc96ee28fdda4283f85c4c3bd5c8bcccfe20b59427ca2a180bc2c6165e3787e4fa4f9eb742bbecd795ea4dd4063cb0e016246719c8c17552d5c5ab2e11cc0c809ac3f036d7f0822e3e6ba982091d532cd5271fbde25305d1f6e71880f81c618f267a9f122e06a6ea6a46cbc05ee91805c3bf3c0af4fd5007d7ad9ab971973b5325f9d7f3a56ccfbe92023109983e740d6a53488b813ee876f08f9e320edade9f01c84735ee9160fd5e3485d8157c0b963169c1aa078633a1fa13bf852035dfa5424c79635a230f39274416b687202342918934010871c61b2cc06b1d7656c318701ccb0688803ef475b7802f4dd97f9533281c0b04701445312c3d7541bc0d6b13bfd899ea3754a1c2153eacd9f655007edce6327c0fb2b28fad832742b4331f958c1e880fc6f4e3a4d3cea9cc056816dcfe2f11efaf05d590cae8adc9fdb8988e27f97b59ada41c9679acc094951d3af6225323cfeca230fd0ada7377e72288661a15ce6869c6cf0f8d556bb413d90f22e00ee2ad36fc572cf3d512bd1ef541a5b8e00bbc69f17d88755515bb004fe61bad9ec8f81c98ba990c74f609f3a566c5aae4bdb64c98aa99c8184909f8d65218e19f51411bebcdd9bb16a80f03b76a5e56904ef67040c8abfc3b90314c00f5d3229d1618a38a23579656a30cddafbed8527f59ed837e6a37982b65c1a85433b2f6f481df41e83dab149171a3cff2f6bc050e491be4a611d51274442b6c448e30b5521f05758a8f3cbc738e648925848214c9a702124c320d0182b5df265677e51422684bccd59a95046973cf67bbfab2d83dfe20aaf54d37cbe3356d550e834869e1d7e2a67de24c72efac250a2acbd6e5e7a8f7fd25e5fe08124d5676e132c34d0cf89aa0d7e8bb8e62a235def66a66b4335208b7527ec81cac581b1a52f8fe242044b43a78206abd8ef05254b378dac9bd63d3380f8a1e9ffdf03bade8684195b846cfd1e32bf296b1011b19c659abacf268d81dc19a69f8a3a028b025e3460831695e058d6dbb90757ee08cc39f71c45edb97c6fd2242bd19e272af700c73f22846ef53eb685e4148a4432c1fbc95a67f3682c226b43163ed31aa1a7b4643ea0949e43b81ae331fa72bd3865f33bfd9cff439ade2b2ae637a082f8f8c233e6660fced2af491d2822d7ff219e69728c4bdbf2cd895c022626cf0835d4715dbedabca5ab098c5c51f281b2f556a4998fde4d1ccd0c44f25b72265362220a0a4f6565ccd5b02bc835d3377fbd74edd68ebc1e69a3502b230f836e0c86cad5611f70d0ea588a6e885b2ec30e80e08c51124d1683563c5bbcc9c16edaaab31a8bb861c6a83d819cc54b69eb064682c934a2f9fc0feeb71be61294f066d5c721b0a2a10fae8b7cffa68eee780f1742eba4c7289ab874abb2c97164ba570fed31f6639973a34a62dd54ab2331d3fc083ccb0842b623efff698c6e999656600d948885b0ba2f831d7ff62a72e0f7fcbc02d1edaf19fb679b8858919b4a0bd110908c904dabfb3d942db594424b26204686defed78be6e567575463d29e1d69dc6e2b0ada10af80af2fb970fa3b066f8e1018c423d38c6f4b1da96ba75c35315a768c7dbeaff35456cc294604783ff17ce8aac6f9bb97102f247e31804afa2f72efd87061506dc2714d2d9fc7ca7aaef955ba8cc209accdfbb2fc3ec632156d0d23366c2bbdc8d1e8faef01abf95fafeba0719fe78675b097104a19e2da2df31158cff884bdaa8aa31b94f718cc95fb3c12f686cefa9ac0eb86924a3a0aebc768d7ca9cd417bcf38bf84706760dc59ad2f172c9e12dc305df5bf95a388cf7f3f8e850e08394a51786d92eb82d82969597850cf187e697885cd9a9d04327f87fabd2894df9fc0dfb7d057194a5f4b1f37118ed8527efbe504846ca34c2a2967167df9c6a9e179ea959c53922472abdbc4af03c0d2b0ee1658deb830f1fc67ad31655b2bfdbacfe280061aeeb79ee63f809562212fa0ca8d01110fde8c15b4cac9f7df2d51685d5805c21f776a4064bb09692c71bfcb0ba98befd60471029b305ea9f8533b868ccba544c3d4b313b1cecd9ec52b099c4c0c57af9d3b474f758e5df0392622a1e8adccf2ca7f386557eb2baaceb59390e61602f4d7eb8558ee35466f042e8d36fb8f1b7075ef50d1c1b0c2119bc9f44584670c4428ada1bb7fb5b67b0bd4f1a22fefef32689d92d589801f67cea09226816fd211e1fa32e384800ca892a1e6901030d6bd151284dd0a099211da0203b067a102e29649af7d9744d77c4b1de27d270250750de69d74dd9dd8a44046af8fc1aafd3ad8247dc64244a56a87c16bb5eec4fafea57243297ebd419393e71bf119de5f8f0a132469f02fe507fb04e8f6d20924be8e4e2c6767f87b74377bdf90cacb7853be7e49e54b6714b8f780f0ac7b4f6c392af29fbb23dfc4aacd7d40fb6ee2f62d67fe44a49e8ab3022fadf94334f83ff30dd843912cc3dbbba854067d70c5477098fbab4473fb5e87e5e49957a9942e70a9978e85fd552f3b6aa896b37ad2eac1c40ef421563965aebcdd275643c3a6468098f7061ff41d9e86d35829d7ac6ea56b90a5e7dfd566db36f049db9dd735c91555039e0f3145497f7ce13d21a23170123936f45b5fe0b1d6b66734127f6b9cea643aba458d34e0c6fdc889f364d1d63a512dd3632941b70e98060c4bfca616724f12f74d784ae90fee548ca764de2c468100f181d2384f513dbcd0950f73ea4f6e12b1a18315c69cc73bb1b812a506e93156fb31db030f40ffe20d9808636cc459b095cc2e13fdf000d495c00ec4ea84fa764cedb4506b40571c3fcf77e332938a82f037d9d413cc33c5a539a9cc3b9c4505633fee9ee7f1ebd1c3a5ee71c01f88f07d7f36c49c63c8656c9f84199ea1997ada82fa5d09b8169955b5dcad99dacd8f79fc95640c79476a587c2e3b7837704d2f61680945158fd94269b2e51457d0c6925aa630c85f291af529f8a05cc05202be55a8223e9c8028364c11b6e4193b2c42f3c9c96497f61ddf5373f6b0cec72213ca4b363abfbffc9dd769917d8155270862708c65a626d95363309d18d53831dc59b1c3ddf197cce5963b134532b75d5f214af8502c43d40df3bf11f9563d98546e8c499cc4901faa0306aaefaffa25b3aab9ab987cd5a47b6f6fe3d6d43fec28832b360bbb417b57984cd6b15b6616a2893d04b32a44b10840d38135d1d7a3d5322f278f4824567ae07e054ec7b3a6a827559244b7298051027a78aac16d35d6e6088cbbfda14780562ad51c774b6c311f83e2a1a5eca8d24ed5488a4589389a3937d4064e40b50473d3c4bedc95cdd9dc58647e691680f860746f68b0b412bb863dabe2acab2573c3f9328a7a3b420ee833962f933faf5ff1c85bdaa5666aa767aa62f5bb191f6ab11bcd23d2a47f5cbdb6063996b08a657d41ac34962896ea57de97a3dc331935d5bbf2ff7859cc2fd7502310f611b8a56d90cf2b05732df0d17ab87192819981bc4a2291cdd3cf04df827b6a33eba09c4d06331265cea6575eef53e3608d16babf46fa7f659ade8800dd7d99c2a6e8b68642867f4993768a7aace87de8ae276d5942e90cb227911615b1b82444cbe780b3b627e6337a45069f43f4a57d6d31f634ce5cee45f27d2b78bfa99e1cd323875fd195db95eb68584744f6fea152cd01bc39e488939409549447d07bcd452336e5355ec3e35f76fc0d106dedf6f76f0c7a260e602d84bc1e02fabb21d8aa7d2bee51f133ce5ee76e4b36c7f7e0b37e72d9034909663d0be44f38c834b17b87b2c5a7ebaf9952303bac48a3a0e12fa1c1636202e8e0258f33d39286290a20d97825a7bc9be6e1f7c08a967f8d9ab44f9493b2fa832df6aca93a9883832532f8f868f1d28d398694b970d0b9f25ff9fe5904966e6ca1f8eaa0deab3eb7a53a5c9019e6cc0803a89d62f967f193b369248b105cfd19eed4cfb75a5b165b0caf7afba3270770d7d088797ecca4c6377a68b7519714ff66f2d2691818b8c1ce0aea87bf13236c1886dc599b8f422e5ea6114a42d544919cdb8912a27484a06bb511b0a83b9e6e68440f7fba2068208b84e4c06e881a8503076a5073ef086b586687230910d6dc2980a87865107531509f29b62f3ff52e3c0edcaf26f8c2872677c14b5c337b59ded51dc026eff7f5404d76a82f5d6311aa4a769b16222178586146961c03ea4c1aaa05e37a0f7ed0dd2841f2c970f2c3c052ce80dbebd3d360cb8d9fc312a2475f87c75ed90f585889a81242981b12a930a02b1ce2c6281cd21f0cc4dbd041c00ff6f89ebe6042f0c8557df415ac41565dcb32abc531bcb91ec45aa1d0dd373abe60002fa4929d3e3bb8dba3bcb51d4fba2c7bd9edcef03cb963edb34c89f13bed6b848e2616e595363ab1be17b5e4f9d85c4d13e6ee712c34664c75a9770e381f61dc36bd7daa9a5a6396cf913f66e93ad34cd62b209dec1253dd757224fcb3b6fb9dc5c5375ac21abc0144c3a1e1924419e1bd34f5f500d5b5371f21043b3366814f97f7c48480e9bc87ba299e03899698b2259eef150ee0f2efff40a5583b80ab4849afb5a66b69dd709c3d743b33a4f824abb37c5c7ae6a54e726b78c230a7c23e37677b4ef5fda7726769d4f724f180bfbc3d1e59b93934f934dc0f07c74e7e980db995cc952792f3a84930d5d20efae9d376559b6e6b2a76934cc89743d738cc191095cded7a387adb660845df5faf498e09a27feeef1e2d3a28460f4af4796105f6ebc14358008e7d2adbd58156164558619595df5768a375e8f7ce5108c8fd40e718255b6373951a021be37c94d873af18af7ba416926ff3197e52da969fd7466b9b888a0f1a351ea6591e359e6e3b0e89307fc1bf33f92e341a4b6c2076a5a2fef65953cd5cc5076203e430d53022035df930dcb3c5c583c37c066a38e5ded31ba9263d20c3eb70dfbcb3e2cbd6cf09e14a2d4996b05b90421412793255f9534c346dcaabd81ec779e42be004ba78aecdb3d39cda8c31d02a630e0dcf4f7baffb189e70b111b597cb0aaaacf263d54e7db6b24ae1d1cecff6f9479c424adc45b2d636c3f309664e4da0ce9e275b6b856bd347d85ef9a8ec32475d994dd091c10dfdd548c417a7776c36f658161981c0228a02c9a49c56c166cdbea93469428e66efe853b6c4df9fb13db05f4126deab4c5b81a355124ecc0efcf930b88d551a583cfe893db99523c74 +MD = 3565d79d701a8b0dc31fb0d7eb545dd3f968a7e23b8a5bf09695abee2f1c8370e6d4098b234189c38bb0f3ba2869397f + +Len = 50920 +Msg = 146629e70b37d8b83ee828e2b001cf55630e7c131a50bb8963b3181fd500870e9754037122d176a04793d9b973e59c7f32b54868f24663f10a259435fa5e07bef4ef139b9c7d1ab20d46b1581c57011fe0ff6def72837659f113db27c9fd04383521a08b03a58e9998eaf9e833bec8dd76d335d2226fbb682266361ecb46462362d1f469deb098fbf065fa904182b760fb18e6368a73fcc7a404ed42869f942881e7555eb60601811ea1f979cd0a975177b8c94533f5ff1d7fd748ba8471b7ef9c4a0c92120f90d2298441ca5fc02f57f29a2627a45f8d13bbc68eaf4d25781fbae4612c7a320f9719f819ac7f0b491b75a6450465176e5161b8094867219d60e49c9b5476da4477f6e4c847b653ab4407c46d03ff876a7e7997ffae5ccfee5c215a04348f6cf91bc92f97c28b011e7bb1dce84cf9154942094ab908b49635b87906e2f14c51f42a9ac3ce46877b6a687ad6fc08db2bd2471bb97f7ff5dd381ff4897eb636f1fe4d6f87b5fa302a57b26a9af25f2e30ce32b6cc993ba90ec0379bc920a9d3b4de2c526393071176ad0289111278788c06aee36b4e63579095a875af10f2ae035e6e4a3fb294afc833ffe021a37c44a63f61a97ee72088cb7f1b8a2395ba4c4444bb5f0358ca9486b25276b3ef9217e844f310edac99c3274638e30ef82937e159bd9a98ced1471af3a253b03ce37bb9dc0d20a0e5f7900cb1a687568266f640651902e45cd050eabb9880fed397f781ce57e27fda6177e28a0e7ee5789a11cb307aa0d049ef3860d5dc0487fcd514a9e3785d73d30001119717d1a125ec10e881867a44df5885e20815e731fec55897e319996217fbb501a16a8774d0857c0121e59b296430c2da1beb32e623904db496e19f36ef7b1c1a6faea845c08cdd7dd940086521a274afd708ec8db15e7b68c37976d5a3a8bcc5cb8c3dfb3e2ab9c46f3fcae25ed325c904111d0ef156691c348826297ba920687bac4d8092879a3eab89ea8663ee5c906ab1cd512ba19f36afb7b818bea7cd6d48b5e0bb04ca075357c7703b7719a26cd08e053da766a520fdae338cb6c94d3afa50fe94dc1c896b39a062e8e37c7ec5ff50ccbcacce0440e6149f6ca93826395924b0f361a4a7ee1bbdca75f0417803c0a02bb683014300319105a0e01be3d02cdafdc0dc8be944c3c5afc9e38d188ed92629117526eac7a8cf6c0fa39b09693d19eee395f8d7d5f9611ace078be7ce1289ceb6c86681fc1173dca33ae0226b528a8a45d414fa098739126ba3606c2c3571228dc4e8910935285d43ec11b63e34d4d9cce106d94934f49f88fe372f0e08882e7eb3d5a155dc94f8d702574b4aaba0e36103f7fcfbc73bc90e6136b9dd5573f972db543a48cd5fb448c4d96bf67f96b1ed840fec8909b599e314859102e2dd8b4f868ee34ad2329a7c7ac09dac775d4a56aa753059c20b16f05f4d3fe3776cedfffaaa24c3b1b5b05c6c336ad45c9eb686be5250d5b9e4491d8ab64ceadec826687fd1851b338f00d0e25b58d4f600fe6307cdd563b8e93853dce73f7ede9a3e745f2b8fba206892c1235ff1150d2c29d7cf0f466d85c2ed789e09a0063e8a3e0ae0dfc90940ea6c157868bdff69c93fc95c402b5ae91670751943f8ecc73f2d114c16bc6e5bbb98b6299e43fbd1804920f8860d92ac8dc73392bece9741621373e9f7ee5238831e8a7e280b6f0ff94dc6e90c727d96d0fc9954a1aa6f749af91700abe91ea0eb047bbe2f9dc4e9db56a277f8e5836f87178ea61514dc2790e6e5d85935385b9a547033da826328cf699cec73eb0cfe5a1efccf42954624ece2c5bb2a580a313a1650235241b2947c909c8ea40e800cef1bca184fb4153155f59fef46dcfaea705005d7be621bf48bd28aa7b4d54761f115e0c965fab11773285bbdd449724de60c7697476d0511a3384e7dcac8c9c50615262aabee839def82e16dfc25d92344518bab15ebd8b46dc8d1580f706e00d62284824a18f18d710b1947e8fa973431282c5a4f64fba3908cf982ab549fd90a44e21b690064aea0ccec93bd4f1448569741ed1e5ed8a7b58caf42c5fdc21a4a83283b312f45c725cc4098a6adb7275ba9b2aca963d68784cfdcdf85f141893de83e2bca2cfaa1a714ff9fc99bea98e76367df19fa5d0da45d66a214ba82ef8c7a0c335b7fed04cfaa0ff04ea11565a2cf49ce95acd5ffbe3e37d39ae0ef13df427a9a0cb184b745985ad35e479e5436f43ec146ffa626797b35ba3ee9eebfdc4671aa07492984b0e6c6902116ee2e48da2fff537d394a7e1a4a9e295fe9b92e90d7a971cf4331b99a3d6ebe956dba838a05d1e5aef43374265dc983c947ca7b2896e075cb3a8707bea6b65d4d83c28c0ba67f241940a804a4558173b070ba6c14949738c6754e4359e8b128c4990c0e65fc5137468672d69e1c0f219bcc51a85ebb16e5485e4e1474eda445841562afa1ee8e47bd2c59911b99bbb612c357d80ef1a4a2d75c4e23169cdadc15618a17c663807b079c25de24b4cc5a9dbd93a32a208a97fdd7181747dd9a16fde34cefdc456dfcab3c9e64c0558c34c522ceb2bc2f11ee413772990f982b1ac60572dfec7b9ef131768cccf764416d115ad0accb067ecc2be5255177b5d611f72ec28efced5b8322b1b6bdd1c9342c0acd613a608d1c5b4447f9e6861de32319c506a51783ecda0454e5e0576cad9a36e3490482ac32c313c6b50145b69a77b33404cb4225981d62c9e1dd9036f3df1f054fb1394b072c21cb2349ba6942364de285a987bba875c177725b850d50224d993de98d52e4bdf4bc0967ef1f2587703750e7ed2d6409abc660023cdb0a8b4709d95687a9119e16023002ecbe8993a29b2f2c7c631402a71e727bbf866a4495bbec9e2e38d6f80f0660c3b72fb7826e76e8203d4500873ee7716e16f7b872bf193d698be87bf3652f60515a5bf77b5930446c37bc70c1f689268247173c404d899660a49f47b6a2e4fa56dd2991a6ed310bb873aeabd75a6c56605ccd3ed4c875bd2a8346836a4d8ff4774680cc2cb1e205abf705faf2eff9ccb05c000556b8447b7030c67836ef97175e9f4af1352da9f9eecda7a53a3f964f19509adaefa35e98dab1056b430f642bb3f06e48e8eaefb129fd7ef4d6d1aca6433f8205c6132bdc0f10eda7b8355ef81d3fd4196e6f1df3038d702eef2da49ad731a0ce058f130fb8556573beeaed45459664acef4499882487679dacdce4f37d2fdc7cd1a07ef87c8654167db479dcd3fc064892f2cd3835f24a873665d679dc3f1e5955ccd46004ada4d91c1e6a836e7aa2377f001fcaded70135b450e1f39d6c4eabb69e7d0ff8d13c04c4ad2803be1620bfdff6f908c63d73ef4f266c2b67bb54bb1f9be1cdfffb04df9ceb1b246cda6829da5dc2b8962c8afd2f6de1e7e33618d1b64d6862c132e4b1cd5fabad20ce62bd97bce2a3f5ad2da67bb0a7f0b9e48335a33b7b95e77ec4c47e91416881f9f7c23f9bc1918cc644335c74260e90cd7b2e0fed802f19e78c5ed80a431b38630d82f982c74a0381b8ecf943c60810fae90522ece1f9fe7624c803511b8fed148d43eefa5c9501e66f197ba4efa8e272b60303bf04b83f32744a26ee2f8c4715604e458ae83b2efc5202092009b4ae3dc86ddbee53378324652b696ae9daee6d6ceb27bbd30533cb49efcc3e7cf51b64098ed102343d7352ddb5f54cb0408b249b61bc1485b8b85b3d27eb86b033d2ee60ad0e821191b7c6c52ef21ceb87c643d4fa2b1d661f64b514f38f800e367be3b411b9f651fcf68806df8863047746d0fefc9d5edf01e0e0b89be0b5fcc5bd4cef03fbe65c46d89e8610dda762d8b4d603b039605625d3e40f6705ace3aa4030f8cbfcdb9a3707122f091c736d72b75aca5e28aa3454e6ca039e27ed2cabad97b7b1e35d739628ece8116b4c8d0df8663b4e91c4e256c1997b8a6d013d91ac8914fdd9f24f2de6329871f2bc2a701e013ec79d37c6f30b595e71006f8023e40ff7f6052496c2e6ee2972db4aac64d234bb13748a4af36d12969c07bf5b2bfe3048e5907ab01ed327825a4b7f7bb1bc069a783d45d51d8ecd0a53ab7a386fa1f5ef12a17c050953e68b716ce1ff1f837fc33f21f1ce3a1792a2de14277eb97664d4c561b3fd4b0e322c0166faa175d0a71faf47159f12af674684694e95cf2588e046f7a601abae134d506152c77d4a879412d739af6dff56de8ed377e5795566f9dc8cde77f2d891d6a7846fdbfd9a260baefbe56613ae665244792bd681ae0808d148e1c9e836b5af4ef7db43be678c6dcdd9a22ccc659f8aee84f1d0aeda75f66b52395d557086c18de31e69885ac2a0b599f7695fcc0a6fd41b523bc77eb5a9f3d36d9d012e0cf2ac70beb3231bcf8eae646d85958aaee73e67d57f9545d10bb0f206f0b417502bf2c5458b5651bb1d02628be8364894db738f0204e0d4d003ecd88bbd35d35955a90b3b58eaa48f37f7bad9fb0aadc234bcbc61326fd6ba78edac846e4d0b305617692681a8be52c3d795df24d86242d861167b720cf19754fd977a6ac467db188408907055440ca9e81a26cc6a0e1cb1aac4d72a7dcd707e62c1f419628e64813a0f008cbce1c5d17372355c865a56a6deeffdc48b134cde64517ae3ee29d27b80a7ff3da43b8623bfc4943af5eefa9e47be76a6fe6b345c4d70943032df2eed9df814ebd4fa56871639ccd07e710f832b5ac93a9e7c2fe06345cb68f4597fbeda29c7fe15c73ee5bef96485eb8c9e3cd3ea7ee633ef4552f0f9a6f3fd3ecdd87f63a0de2f4a4525002be4c003e6aeb187971e14846b7e9a3ab3ae3915372122d4cd28f4ea2a732f24f7d4eb8d2847ca8f89302b5a99e3a08a9c69a303ec82842090e6a60e0fd0eb7286bd6d52f9716f32e73c937d217b4d27dc61979104f8e6add3625d62a36541320027ae1a023588b9d9cab3b5aa4f875b9a1e7e85288b30c1bf2582af8b391aab8d9816acea9afd6c8963f5cadc65376cfe26c1a8ff444aa57cb67bbd72545c26539a0dd25aa9b6931c8ec08361c746a33103c6c2322a1da1319db254febff1eb7db4fb52fa699b76bdd47da9de7d9a485b3df79b68458ffc06638d3cd781bf42316f48f571e2955d92bc9204fe8d1da3a35abbfa4a9e8900248f763ca6a2b07397515c83681c8a8fc3ce685c6601b5fb32e479a97f3cf4f3b3a9d41e132babc5d9e49fc48620645579926779c1e04c9a30639b6eb028b61eda3a0fa8c52397821cb07a8074f509f7dc91f723b533c9c6c45d88128568b9c9c2c98fa365925ef08b3c537ed9a363bd13528121ea0114c8165ca85da506e33c93debbd69a81e7574b1093875e3358ee475d6b3c0a5215e84fe76316b9091ebe7401fd0b0df61a0187b4a363abacd2d49f3b1f3cba2fb46d97872107687a51988dbbbc0866fcdf3565b1e9da6716b8b5447303e9a49ed9a115c24af65b606413079361964c981e3a0d8dcfb33a79f2da5d8d810a70aa6ccaf22346ac3ac33e750a12527d67d4bf59a8d3bcb8cede678b13120069c6585531552f7df1acacc906bdbef88560b7aada5e0818afc84c01108e89e8cc4cb27c1e6770588c5921ec104922bb76df49c80556b64a61d3cca7b0f57aa0fcadbfc9d8506d3d47ea2d8fd9d6c304178b93ff21b964bc96956541b4706d92c18f8725a937ae95e807d59aaa8b2b39310d9c3878ae9bd516b61fb86429eb25e29b1376d744bcc9385723f6cb90e1c48c0c6d5c505ee2fda8df02f208457bc129786aa6aba11e3fff831e89840e6d0bf0310c51f2f1c19c16b817d8e8efa6ce5cce949b6d735c610532ce3c1d2d587825248301a68ec01a26e865524c4df3b444479a3f65e5ff96110d3cf8dd142871f28cda52b45d68e0a118f4497b87eadca9898378db1c8e45edbc6fa30eec68602112172e638740544eefcda3bec613ac533c5730164391d85fe66f26f6dc9dac785d447cfc34d1dff716f74a5d32f78d09091f4e5f8090b63033456add0d51bdc0166824c78ba1ea62347a24a0f21de89598e2bafefb1447284df8560da60bfbc0e48c0d0cb53adb58f25f1bce2f0d23bd90a85c3bdea4f30ed990d1cdd054ce4270b72113da241ba1f8ad16311050a84a99791c5d4ec922ac8216c564b3b39e0c61f1472320e51305ed6cfc0fbe6ddd035d5ee2ae750a3cc8ed91191b76b0d3e860426786b2072a4c79a5b7b160ec2cb2815e96747befa92bc509b53a42d3d59c15b36a82b612c73d455f2e5f1f56fc1db08220f88800d19db08781093ea50cf0274b3660558c54a2f9a249612332b40d90d16882c2c61de5561165cf93ade1ae3f13b468b6ff38413d76f0fe9308be4ac953565a54c8f3cd61b249d66873ba9c0411cce102f2dbe2b7e40b7f9761819c0410d3c7648ebc1b766f1564e68000841f4f671560eea54f12f3822c59c365cbe911c5121ba1e1983f52b1c2345b1c2c37d56b4af97afe4ff4ac3d4dfeb9d29e1f5d1684a088c80c646205387c8c745cf5a9c2c9f41e4ea90615252ab1c830df4ffcac631ccbdb3f8da7f90de39c72de01d552da7a62fd26ef39200b987ae75420f771f7b6f381f8612a768b93127d79026105c4b3cf738e571d1737db565fc63b554b8a9787210188f262f8b476fcf4a053c1d1c6ec18a9e8cbf3f7a3e401fc471e2462e60f2520ab07a79d6d51591884b57047dc41553e484a9a9318ad33c0ed5ae3c8cc14f41e72722bc2e72afbad568ef96f1c5790171fa2f65361385ed8d5127004711df6c2843ad8af4a894a7bbde74491afb532fa16dcee7ea70deb0da64eb35efcb293d68a6794abbdf6ae4962c739f5bce4a4b0d4fe695e11b540270814941e955b33202b0249ff68fa8fe0ed36c0e26c6a4d0102135139c8b7c7eea56efb8b66a13e6a1012def4741c5509053dc1a2e7d194b448208d58f39be72a2263d0ee940b1c7ae09f3bd009e5688a52e2247b54a0e3934d2f0503bbea07a22afbfb8f4a22351844b248db4edc312b7e2fd1b6db60a164ba47a182482b911f633f64b6ae6cf20ee451ed5f6c8916b62e2cb09aa69835f03671491cc1e6ec697536f3abe873b923678712a28b7480f10ce0aa71dad009ff6ab4e51a4ea4804809e991b521bff31e76599fedd126d8a6c053a581a2918459fe185dc419ebb584c75e241e81d609c8b8d17c886926849bf28d8a1424610ec599a599624746f3e4569f952c2f4261e9d6f691bb79fcee994997427088cb0f0ce364813c033aa2315fb4cd28548b654977d0c6ce2a317c676d78b4ddf754eff6865cfe9a73512a3389a3b35a17377caf44680408a34c98cf0738c7a59986174b2795f6c3bf12f3b27d762e09a1d00de4e4c531b30dd5a997bfe0650f95e8edd37118530010056576e235287e19de82b100ef37158f5417883c7675621302da5609ecfb998eb3e94661e68802a8e742dc40effc765252496a2705dee73d5d479b9a19d8d660a3e5eca29336db7675b52d4bcc6a207d57a90527928ae639809a6bcaa8d0feaf5dc32e4c431951aa0f436eca8e685a39e99e20e52760a62ff33d8e41a0cd5ba26ae9d507ff1bae6d3e5465643edd6bae92908508cb4871483f96cca809b6336251c1a97dce2338e68850dbc2e3b39c03d9e7fa39872a8dabeb0feda7ec73cf169ab17153b81a393e789f998c85d13561460c482062ee43827f0eb8e550eb77e7ce23f734c5e6f79c93a964692c1f7eef62653764647ddbf284fdf60b3d0873fd747e01c6fe70bb2963d70701e185bed6b45b8eae95bd9d2581436fc0bbb10a7f142a58b16aa0cc0c6f8f48fdabeb3f3dc55717a5fe97d143fe48ebadd3ce8595378fc49e115f746e3f3af1059339474d1bbf98f2a6f3be738374327a8c482c6964150c35fc93f9775c41c8c0a0571f2d40fcda3c95baadde992f0bceef0547202324fa1d3225a44e4d0a96d7da2d0f07bc77a52cd4d2e6acc7e1405102ee1ee5fc2454ffbbfebd1c9aff22f149a45e001597c06a6a25b10496f297accfebf9de787de382a0048c08cc8736b7f6a25642d5c3f59d5f9a560e8dcad9875ee51f331e976f4fe821583b6a0998d1e8103df583650a6dbc181cf434d1ce89b5c2d90d76dac00d9b3c6bddfcef11e627d75c40a8e4c88488894ddb13703d5bde6c6f9409af9d65c23d0b150aa0699ebcddfb4ccba8f787cbd42fedb30defa5e1c929ef5e7ccfff640b810b1d8468a3ae0c624174195f218de10b529b12ad0ec4c34e47feaa1f82899015e8bc03d69a054bd8462c9fc7f8d798283253e53d3e914128c36fa2529739b30ed470857a2eca81a68379a2f9b4b0e1d0b464f067de502afd8c3bcb33e57d5cb6f6c0721d0504981521e68abbfe21a449005599f596076816c9e98c89155c735377343287c7bb776b48f8bfd67e31c9dc3fae4aad0dc0e2bba3024f1bcedfe12e7e542d801df706f01f39a912dbe838d199f86a59ec828034420d7bb2b90d8c8f34a9ccd0afc12deecf30b036bd4ed97035b961bfda562ac8cd9278167dee5dbdc1ba753e2420d4ab7f653d0cce6c94003c7c96a88042c8c06c1aad0fc38a3c024c0f9194241de3705861b65ab34952cbd5c673db85514264492c846533ea12a4fd31899859bf428582ab85e917edf91729215f22938880fc895064df7415c5ecfda7c313680eda3224cb1081a061732d6014c2434ff16bd0570eb5472f133f2274f9a9ccfc1291bf674ac1e9f6aca655a12805076393e928d9efe0630bed668e8ab0a28dbbd4507372afffebc2d67cd714e38e367776e34b377a4bfcb1aa24786553151c4d5b00986e82314dace8dcfae2d0c69832a342829a385fd9c8526027306a6c425baf8774824cc1d85be9ad07337415f43d21ec152aaf84c4f9ee02e4117e0ec78dd9cf4fd793165478e1d9462e59e4143ff8cb4c0e692383ec84f1f7301663738ae0be7394e29889aad947fffc0699bee131c66e6fee +MD = ee6f7213ad92981ac82d431bea13e18259545c89b38dcd3a20906801e1abbcd324ba466f78385f84ba81daef5c967896 + +Len = 51712 +Msg = 5670f3e8bb9d9aaa95f12f71ea30fab7622f0a9f9edc2821ca7d0968763dc878a1e4931417e6a4dffe9f72c1abdd298cba9f58e05d1cea4cf40758b5de121dfc8fb169dbe3201910b2a7e7bea51dde1048ab121f60d28d167eaf8c94d47eec51485edf05c753e385dc91f52f81f8018935db9e254e05f8c891fe0dca008a1dc0f3735b596a88e986a2e603dee6767b40a8b765bad0be13a9547b4422093d9891b97847a075c7135b2c2d7b917da0327dcac8cfa58e04c603f0ae976398a0450cc1f60aa28f16494ba3eec411ee7d0f88c29545b02fdff91c8c1f6f5454b90c7934750c27617f739f2fb24626e015faa8b9a62da15c57943e515735bfe692d61f397bb5f7930979a0f7ff6997fb71dc26d784f041bc757faf67dd4f6af5338947f9926dd9ccbc43932460952ee8989b4a43b6f758f840a3b7f539271d2aa20f399b419c97b4a1bac3dd5a32b14f92215c26c4a9aeb7c1e6a023f423a22de94e3d4811aaf7f4bfc4774b77a8e9d76854a4a7376d0aa2fe31b01b95adc0a510309b2888ffc2341f4af6963e5f9e29211e6aef96ad3660016d3102a42c3e3a1d9c9a623003bf1bc73589e537c098edc566f52569d0f89ad2806903a908e5951a79831f911fb852c16b7860eb319eca5d148e72393e19f87754a1432da87d5e0eb19e8631b9738115d60b31e11b7a68f00f7dfe8c5e6121facf20edb876ce3c022b33c09a3bba4fc95d8a7da1e7f27086410af0ed9a97be62db3027d0d99fd8fdcf8af4540b5364e7e73c6fb4fbcf8a27917d71e1598576b85f1719ff39b9da0785eb4be5930669765e6a2ca1c1d85ddce71da8f204f1f203421eedccffe5e928359dedd7399d067fa95cdff09fd792ac2b33bea701a4da4b6e8dc8bf91e9ad69c7e901b267dee209b05aae2aff92d0a04507da88b966d599caacd461588dd0d12317affc8493a61c5bacc1d648d3c0bf1ee1251e94fe8bf43ec23939bc9bf769326f213ff882f9c09299417ce2600a119c09c7f0fb36a564b2191fd026d9cc38da387c022a7484fe3d6a56a53501559ea8c6e78754d4cbf10ef7adacfc11f74604bcebce8430efdd446827d8a980496f2b62ad6908a1a4a43aa50b57a709209b9941942a6d80e1668fd8dd9da6a48f8b0b2342208065d9841f6b6259908aee407f109f9e4d2a02a006059f7c9434cffa3252ce3423e81199a390da381e5b093ca07135b28df7fb93923696fedbf9b0c58636782b58f1f5ecaf5e9a7eb8461a97e2ab7eef93af744719b2eaaae3bbdbf3f119698f894a2d842c1bcbb2c811c9592f08a1dcc81a14c584c2c2081441f88c5a41c9e71db9606a0010945db585bd8b6ecec60294ff8414bcae46a1d755ae99a8f7bfbc7c0736a415851e06e76a9f35874617e760286c3ca8bea0fc92bda520c58373950efc593c51c29035c688165d61b8b915925b72462f3af5a2af42862c982d0efa3a5f6e399e0e1373baa6cb0de66cd714946141393b69701994acf9c2093db8736bfa20a4e3b3cf462b8e654cfda9976acc027f1db39436ebabc3a5ec00fa98890693148408f7eb3981068d238eb921a1a405d5fa7e03729f5a4f33b165aed7c374f3f5e1f42390d124d7eb9882e29e418234ead986fe4abe0b174a1a209f9caa1de269c4917ee5987cc926b6bf6d36d0d05567c1b2cde6cf25e4932d1a1510c469271834c6521315f2a3e7822ea210d8f531f3bbeab76f5a107eb6f4395a5b9cc18cac397be541d0ec2fd506b7c855e0599037ce16050de833ad5a7766b5a4b78bd7cadb98819852d333994943282c71643ada021f00e700f83927bd8a6d139f30d11c23066c40221078da53b80bbe127ef6855febed262ac6e9c7ce8bcbd2db19424a18abee60c809c6412d00b7334b0f8de0ee6317f1ee0686dfb2531706f3adf2fcc2705120cd28e476de0175b2a47fc892b66fc571d51ed81a71c899da6f53a8d92a3ddba9b8d49c206ea58c63a6366d44bff83ece6677a71d14d49874d8752e8957fbd6231174b4e7e6d2466fd89d449d12e4cb2f2a79bb93a35e5efcb67a4ab5519088b66172f5754d72e9fec21a1746b61db4bca78cdc22244d319b8fcac50521e63a882e35276fab6cbe37ed16ace6b389419f6719d172a18b5a78edcd6620cee433c40325128008a80d43e0facc261212bafdf286632c21ff20bd57ebf7af6071bd9065aa7d4e6d0e1e4a232c3faeda9f6601ce3d5af8ad91cd8f568c3e59e0771e14de2c3281e18638733f16cd2513178ed085a47e7d4c29a818711805c755dd9f7af513f7c26df8a4e6bb1e3e34c6647a959f25966406aff88030f712a0c78b88e733c795b9184cabcc1fae5982fa6d7276a2276c54e30b06ef1b912d8d3f6821851eb0d40dea6a934df42de7b8b71abe9b1812c6f6ec261a8cbb4e2036c35eb17c40377b66eb3aa490c103b07d0553a52d884d6df228e67b7f9797b2425e5482f421c2546e24a528be0e977c7aed0070547b4229efa03473f137d2aa5a1533da1447bb25ca9c9165fe64531356760968377858c1955af9480a2469d125f2e102043c88b7255be8a479499e3dbaa956d2ff07f7ff8e601b43f1e5c2ef4cfc4742ed8893d2256a902d5648e0c14e8cd0f9d3b087a97fba84accf0247cc763b4de1f7b1423d72d07348bee68268b92a5d24dcfc7088136e1acbcb045e2f4cb8dc294941ffc2b595773dd9adeafaa488e69a42721b64f086c7e70e7271e1757ada600cc0312796c28653ce24813fb6b054a42c9bee05be09714abfd4e7ab9a8931cf67b43f35bc5e87d4c6d3affe98a98d8ac2fd52322600023a07b3285363eec7be83a793b4d0716106e843dd01f17b7b942e22b0b5cf7261000e959ca177b086758720946c7904fe325dfb710e6a2f050a95926e54636776e4fb05ab5f7fd7543b9ca8aa25601d459f4c83d5eeabcb123322d3f6d887e8292df688bd53226c1b5aeac63da62dc71e97de646f695b5a8c58fa6fae08e5fb622529a83a460976c2189802b5b8870771603b25a94622e15ac148ee00ae25ab0912baec8a01dcfd31becfe47b2316e726438a4eea4faa6a64b632d65390effd063dd1dc1549420a5093b6f5f5af836e2688f468994a98fc927fe0b10e78e9fb41ee970143e9e3a307e176bc8c2376a45777a0fa200097a0cc637b069b2cbeaca36d33e27da768d33eee36c1a8499692a258b68ce6394d5dfaab2b5e617414181201ce08294d799fdd041f8db2e78c3fef7260a653bc623b04a01740c81a944877f390f9b1a1bd11cc6959a710c6ffb4270ec4d1cf537f42d287683438e4e543bb8ba03f7b6cdd30f3650b972cae98f730740a94c2c44c7b4cab45c2199caf11c4112762f17580043a425de66d67ff12f4ec5b7894d870ed5b53d773d3089cbb7ccd4ce879864f968a46781b3ab8db0c5abedf04ad5794a0e5c646cecef15248ca07385b7d65f2edc9bb84befd6ad5ee4931bdc076095f9dd34db95c731e79c09506124264db1011e1e7a8581d4594bfab8e1e3455b67aeb0e3058a32859ba2cc713032696b0510bb8130d700211c187671d29e9b3258c927db74c2d5668bd934776338e7bac5fe23886db8e1496034f65260766f91f3e9b072abd82661429fdfd77c9027b97df9e488a393abb9c031e8df1df338d6c380d96d0d228be25a672d15eee0afe387c48cf654ffd5fea68fcc7c6dad9d9d421f011f2b4a9c863defbab72c92f6c58dce7b760465e6849dbf1fbec20df431fa14d5fd88b8deb96769f73fc83f82dbfa783e7c346e63e81040611acd8cd3514622b6aca7e5a8e851967114443eea935862547d6761b495a8a42f14e2a2c167c09921910b59a1bf96d596d923297488220d3bfe1ff87f19c16ae831a3f824e1f418a54f159d4f9ba1a80702e787e736d1f97372b09b29f0e4f50b0573f5a45c5b01c03b692919090c9e1005f3c2890c0287997fdbb23b979de325e4f52396236fe4f0fa8875848432286066fa61f0941e680c79f3d62a9a56a5c76489ea90f39d42c5e0c61b1899acc766ba4dfea44b9feb4af59b8f7d55a9cd4e18b4e31b498dab9d92d4724bb5e70b915470f11abef1b1d3873546ba7601ca48560885ab719b7006852623a4657b558ee9f5d1ca4ade3c448343844857e91d44c0e74aa81851309f4c2da7a924d445addf6f29499b9feb0c8e58d0dd97ea36a1ddf3cab7aa398da63c6d66d0708c4c7c992f601f1dc15e9a1ce7a4b0a26fb70df1905e50a3dec7d9fa67e990e4fdea79cbc90e914ded078b9372888803f41ed7c05fadf9a19b7fa8eaafb880dec3a033dbce8d66a87d664fa68be4ba3901deadbeb40219001a2571a1a75c26ea57fe294da274f5b9fd0b54ba8651ddbe3356ee413023356ba549e2a3d13cd9743554d895e75dd4fed65749341458590fe34817fc4669e520f76d7a55cfe33f28e664b048ff906ae3a3ea8bc79850b2aaac02b944894e9eec7b00875bf5e7ce54d57e4edb7dc55e04e0259ad994e3711af81750be5b59c91a9a93b81ae5a2eda4ad3202c1c454f4df15a8f4ee8c792add52166cce4f13fa27f0a77b1711ad3384b8008a9065d7e5debee5387b019a367e44507c08d6f5b8b0f7ac5ed4fc7f2671906a34dbf4c69790365ac40376bf2a5a3975ecd275877b322a22c1d928914cf7c0efafe8e3998070368a361c7e608d0dbbf76dcfcd31c827f2ab4298087c0d83b4013a5ba4c9471b19e3fd2a6b16c51546554d65209d160f0b965f962ea7eea2043f82b8cafe41dd5b0887b1cf6a68ed63002a172221eb53bf748767fd9d66df1c0b1764c8710753945864573da3ff129c88727a4458be9298e6486217d51c9775e447042ffa1dfa4064216f187bee114d6eb4e2f9aa1648223c1128efe76667ac6bb00b53c1ec5dd9ac3d8e025abc6610236005d4ae78f0e6168030f83ceacc29f1d0def690f8eadab117186db8f07d6f37124747de6d094ed603fec34e0041692738136acfca2dcde35cb2cd2f10e3c52a4a2bd5a2490de72b1b06d3a34d43f47c443d32d6e6932dd36cc193259425ac6d562800a2b38b296643ddabd52850665183b0e15ed4b77501c5e97224f0bfaf80e4b05b5832ed90180cd7ae4c380319578512e8cffb072def068ecca5cd1e28f56479381b2dc1b5c0d4a96d80e2c887eea6d7db92e00ec30b9d1615307fcdb34b63e739942a83f4f149b76c1bbf0d5c9797741c501a3adee7f833ee5d9f4ad8f3416ee23bbfc0f819ba862c65236de1d2a57c3d800017dbf4a65cba759222047dbb84a48a33f519bad59a20f5c656c2307f54b18b482244b235f50c20fecfc05b00ccf2f84d9ce444f967dc561e44782173920b0a48f693b1159145e83bb0870bdfac701e5324e258b473d10e71d37e3620c8cc6598e15371d3b60a13ef80d31096b78e54fb299e668542817787704eef154d58359e9f0e64eed7cb6c709d3ef9c452b0449c1762eefa587039b5a754acbfb440e2e06c2f1ac58b0c3a65822537f7229855bc7aea52622a1fbd92e54a0f8e721905f4f53ff3f6244f1644bc205b9d8b7910d2c09f417b4c028b85c67978102b430752a6bb910f47f67884c7aac52612050e8584fc3ca412ab2c24a77d86d324417f701d1c726f7aa4e9ac214f053f4aae973b348b945b228c07f614b0ac4611b6c6d3b4ed089510dcd2215567bc3789f8536a6bc7f92f0027a7609add68f767f586040aa7c42ecf00da9ac09f2aad7454bba9772bdb9e200092fab63e4d559b9035778ad7558ae9b35b6f1f50010f8e56486ef331ac06f6a9532ad36db9ef21194da4b1e60d381556ed24be14bfec3c6f72317c73eb18187450879ee64f229ce337121c7e8bc4c68e08422967b7b20322d1775f6d293ffa04238755326dae63a0aa5626eb31af71ab254dfdd3990f76f2eec73887e6fd0fdb44a0b2cca5d119b3efd76dc69f569b40dcae87c2d4430c621297844e94cdee6c2c6a243f784923afa02c5d9b3558c7d186fa63bfe9fb37f2e57ebf3bc3210a39435a15e5656515f643ab82d394347bffcca81e454a968e27ffd365d9e2a4e7b531f72468edb3652a42fb59fa2c682c0e064e23dd96b383739a3c04a383a80b8270a7cc3481b2a5ae36925f896e725caedc32f1033ec09c587d2f182326d8ea03780279d2c1f13c0496f7100bfad19234a71d2230a34c5d58f1031cc33c8617cac08db9be1eedbcdfdc8ff7fc220441321f6313e074c52af79e8e8f2e355df93ad2b0086109068c628ff393d4a488fe497d8b62bd13b9a9b6edf7ebaeb1bf12f636ffe26600ea4f6f1998601fd2ee2dcd6a1c7b1110983e1967f5bedf3228096f65f3e437a6f75a481204d9583d9264506d8ce976fbff7c8184fe853a27372118d8026a505bbc517ff1cf8bf855141654e0632a69264dd991cd78bb3a115b1e8505c1f13aafa7b989413ee48ab9f1d85d7b25ba623001c9dcca0add697102363687a925711357f6f688f97f89ccaa1ecc964b15fc99c9e194e31b7852d6db2cafd62e537e174b9e4a2175b9601dab4e44ba59c982d3e4a58ca120f860b334564369d827cc3bd113f6b34a2ec81d840b385fb841bf7f108a169cc1fa1d86ac37a3cb2cfee5e1a6fc7ea6cd4c0c5cb2ca2a0f1d1aecebac03b52e64ea03d1a1654372936545b92bbc5484a59db74bb60f9c40ceb1a5aa35a6fafe80349e14c253a4e8b1d77612ddd81ac53990537b0c30018d63a2644b3bf85a55ba8666d08d874a95eee2019f4bd433f11fd05b6b33fffc5d6279c34f2d5c55ec6a4bd88541749712d10152aee4353280beba598cbbb3df2941842d169857602b15f17db3aca03ce7deb1f3e2458f890c9ccab86012003c89976e2c41fb8e2b8a4413b0dc1d9e8e7d8e705fa9ce27c9fd409e0275c54996f6caa42b41c544fa928b2f3c7f12c41e5c56c910860ca257cb3080c24e440470e951a2b4a694206fdc41a05b1d3ac55efcde2891078f93c50ee33f724a1cc55ce9d30642e0d6b4fdb01e13a726e3f6e2e76b1b6b9ea5608420ef168d09ce10ad60b53b70710b6716b666f5ab3cbced2ca4b41e0acc0c8d37b9aa929d0dc65af4f67eaea7e7b0ab6d77b2c2d1bf042caead1fbce910239e3231ac500cb69428c603a5fc63a55516444c8817a53e7819eb692454a0fb690826116acb6694c5ee9320a1913e4a672c4dcd6d40b02b875965715881acee6b5f65d17c613538ca30eec6280992377551ec72c8ea6d16904faf5e22d0777998f8740a47bde3131f742b7c7fc1fa0cfe2ba2d52181468041811b7829ad9b2d8087f324633e1aa4444cfbbc3f56f02b601df35d1d81d6e909824c67c395826aa07245a8456e267cb71fb1fddd34ff2349ad7073038888c166c7b4a58714c7c1775c0e1e64caa10d1660f0c9efe88185295e8ccf79f1f699d7c5e6a9fa97c5b273899eef47d014c5b0b52a98cdfe21b17da5bacaf75a8ae2db0154ed84bb16ce339f7aa3752aec373480e1f31dc24a48c5178cedf21ec02cef0e71f8bbeb3575260243d36317b1e20058995155e185ab7e3865b0f0db30e89241e05406a4ac37c9667ce79832e056b2a0d34bece84e6a276cf7ac7a0c5796534002780b73e586ac1078589b1901f5a9fe023b69231ef55f399549042e9ec6b08d6aed20d56bf23ca4d8bed216915f84c4a8b8514e71ed6432d11f15be90fa288e7c1bfd45ba0af9a81082d3d818e4a199594b1ba6d1b2f4cd3d873538b89129d7d89ce7416a21718eb23d26c9f335aef0765c4ee8d8d68f8d2d19c939803c32dde2e87554c6e622bd20563158dac2fb4ea2746170d1c872e7425f781d724be2153d772dfc8ac98bd80d668a211a0d1528401bd9cb67196d6fffc098612950a6224ac187b5103c2b53bbd6a7af4b849af1e1cb3e750349cd7bc7d5c0b0ffdafd799d6008fae1be7fa4ce2f005fd9b9eb5ffa0af5fa30da21bf3d177769705b667fa7db285a89d0f76fb6e82abf6f1d84a71b43a6c76a2af89ec1fe230725526fc8ec8b7c3073142108f89a8d4a5640058ba80db76939ecb09ee9026a26894077d9ee096b3937e89b0525aebe8d49a1cc6232d1ae5c0a7fe83424cca33416a61d172edd7bb132deb3e8a0ad24f493b377cf4e37f22c66551df317a564ac4813de25216034551e571a380c0e671cdf0566275c993936d82cb0501435251bb7ea2978683a1b8134f22c57ca5adb727618360ee08dda17ca375deface47afec0c99d8555d397c2213068dc5e1b1872135c55ea6c7e5b4bd7255506644bdcc1fd1298d09cc53f946d825e3a59b7a4a81142544e62f3435f69776448bcc3a101e755a9ee8f77897464688b062fc8e6910a8a9faf668518af0badda3b38f48e3b0a134f43b072fbeec0636da452b774a96965b681e99c41d7382945324b46ead9cfdc075492301d6fec0374b9650bd57db894377a6eb16554797a23e266435d6ab30050a5c747547451b94e99d95e6f7a627680dd585ce9933a20f4a03c723c6a5e30b9cba22137989c0549ea2207c91c018d213f48f7453004be3610104c2e552bddb11ac5463d492577f51ec19078ff20589724b3391ea7639276a6a449a9c79677c537a32eec127871eeac4a90d58029696102297acc65d15e34d84ae3151e488f6486ce53ba612f8375072f81854b87200d7c1e34d4f7d861df2986b116d59c952daca95d2ec1953d56d3e2dafebde42cfae6f40fced9e35df41eda2c259a1d297f0db693cfc0540fd286f705b853aad0b7c76d6420887c93022cd7cca7c844acd71e88a003c9d66b9694feba28a965cbd2b1ccca60801eb197d7e21b33dc9d9fd473920a616ab6e101824c30f62b8f6eda2aa4ab155d443a03a49b805063a282e591652b7f1f5ff0b1e372327756824a1c9677ae957c878d0417669463e9ddf688fc748ba3545c2b061d031742c708ee3889d82d876a433ae7a4d5e004cbba6b3d1932b3749615f09ca37157ded97dbbac7928a061b321b44cd16bcba9a5c231807c423b697117d1e41b3f8ca21a4b42f6e90bbfaac38d9992318aefd8f47019e19a057c0861fc4f5af8d02e43160c04865dd3c3c937f14b5629c5a509346e64eef70f0dc7e51de98fa0e5a528393a80f94c1365436cf75a174ea +MD = c966b502473611899aa80eebef4c206fb2e22af4386145cc1e272e2d3ecdebf1be7c21c03a47710957e82cfbeb290a9d + +Len = 52504 +Msg = 17450948986cda4399d2aa0cd697295fabf4bfd9cb1fd703356f7e8c64c12cd6c61ae1b5708e747310602817236a81e668bf562b94902634474cb09d3f0bbdd1cc2d41cd833ea227371d584f255eb6166fec076cccf3dd6e7dfda6a0835b80760fc64f1a3a460c69f653603e443a71f4a8c3fc26da11a4b9bfc9891d97771dcf782d3323fb6d59403548686ce9c8598afb8c5ae028b2211ef5fa819ce5273be4efa916702f7a32b5dc4699607ace17df518e4c231d9dffa407d6b5a6d43582bb5d83208a3f363eced3931aa2611552fb9012f876219ce454dda64ec2cc679c5ea80478f891692695027714ba0465b3e7a26086619c75793460b1737935872ed5ba7147428fda9112523caf31cd86e2aa6dc01f6cf6f1654f76414d52785be3267915b4f1a053284ca928128d233f864cdb7aeb2098d850aa089c04d5fbac605bcf37e88c2b9a934bf18566596d5947d6d3d51104e8f2e44fff0bbf8a2741507ca31e0a9b9a7979171099d21a159dcf4f3c1ab9a14f07c64541d6a6fa64e4598fdc1343a654b582b9f0ad7f5a82d0c3bf00920d7d36dea194b845e2ac1b5b239e645ebb36c1195738770895a01cbdce2e0682322203401b454aa09b28b26f57b0224799d2496ca09c8ff43b754b2b96a53635531820f5dc5ee12ef8f793e89dcefe160603547504ed1fb7996077e1c32b78f296e5f3c58dea643822a0248e9cffe01229504afd2c340e9ad8e908a8fec9b4002313e678d6eebb0641abcf29fd4bb0842b4193ccc07946e520986648ef86d2a8232a5fd55e74cee07ca1fb8067ba56b4335e97aa67c2aee098f6f9893d6aba32beb0c8a5ce83850efb090f5c8355bbea6a30bf5fc9192ed3698a2a33907d55e61b2f88b0cd24c8d7e76b7585f923c56ef73e71b28f85ae05badc5f0d92c8890b632e07be045e7f85684f94c3702c5d870310166d610f16bfb47501e0e9523febbd36ad971b39925ea53ed4de91796c7fb62f1756e6bd4e497fdc79743d2360cc52cee202b9bde9abc7c09d9d0311d89c3722da36c7993feb42992e913744d2f74a7e0ec986f36cb3f55b57c96efd8b27af71c9d4acabcfed263587ff7ebc7fb4ccce99b22ce204c058996a2a7c436b6745a54bfa3bfae7965237ee85bb934d4b0047eb865092971818013f88d3ed62a62245c76e1f8e702fee27caed96d226030f706c0c9d0c0e045c1b3cab1b02572a6dd9a7f9fe6f5000248e82fdb680f12521d1850eb85752cc4c70ca5bfd8b313d4fea526381a671511af3807ec4a596f95df39c524c7b4ab81187525f208fda25f0ff30744f39b96af8de2b37674afcc7ec5d1ba2ff81dd10d3e83a802e16392a77a0a9f411331292e7d7ebf248750dd7f69768c47970f51bb91ceb86cc2936960d5525aa6e9963130f6728750f31b070a22aed8063507922ecaace39a4ceb9afd9a70c5f0f75943397154a896383cddc189d10a0652a506d941a4a605e0faabf041dc6db9bce8c3ba76ab9f6ec754d6181783bea26056444d7f5c6c5a2f4f10cb540bbe6bbad357369edde84530e16480544d5284fe99cefe0c2ac2e168477df159654481719762203261ffb405611d9cb88462087dee0b5d509636465c7227f4ca9f7c8561a37919d9de5225a56265bfcccf59b77ed18e0df53532f35c5db3681010d3020b8600960db99c24a153e18bf994c60c71d2cb62526e4562f878b4adc24ff461ffcdad07367a1a3b79b3f563d75b2391e770580d00d7ea3fa141804869c33d3f8ed8b2effc9678d4af1135e9deb8fec24018985078d89dc3e746caca7f1139e56945c6d2c8a5148ab1ea07808804c4282c5a10ff3306dcaa5b06d8a66a90671dff735d42131c99b812ad0eba6be4f03e0cb3664bb7d9235d5cf05e5ec4e73123b20ffaa07463650751e89019e2c01f7e5192ecd89fc61e576d91b076167c44a1317a0380551002d2e01b5001952cae53ab97392823640a131d79636ec7d60e10fe202c644db8efb55db3b313eb9139787b3ebfbd0b29832aed060bbb517af9fd68b0b9bec6b4a8191b503dc36e842d3730d80509bf8d26194cc60dee5bd194c111aa501248a9b898b96f5492867c162a6d119d80a9154f48bd37ee6a4f806af6795b73e14bfe9d9ea86f9bf3dbff60cc9079ddc460488b33deea21d194ede918106299be5929d3b578df7889d774b9884b5f6a477d9d5684f24b4c96d4909ba0674e360bf8b1d747ab4d7ea6f1726d07ee50b78c399a2d96c7e9c33c771eff29fe8ccd5c933d24ffa02812edc28f17a609ec4a055cb59cf3a0242a3504df901f469ce422c1124938080dd9b0b31135fd1e9096353f7611261ba8f6030658daeacffd0ee0fae7c07b334d47b24baf4477acdc20be6a6226a8aae69b48e4115c270b2bb229b9040753c284c14514bfcfa0252d7de355e049f5de5bae5926af706e78b7526f841daa3c2642eb0b86d933f1380302569aa6f788167683c66679d3fba91e7424d49b059eeee639581a721df5260b627a90fcbbf9f3c5c012fc06d3890cdf9bec22e2c6168d0d20bd5820ea369f94f2e1e17803a5e6d7f7c18fed1b8124594e1817ab482d712625cdc85c2500053e480ef49f6b26700b8f546a83086e8039ef4afb4b283e3bafdcebd38a6b1be775e66452d95ee6100eeb3e446f16bb90f013f77658d2d35d28aaba123208d4c6ca328484cc6b8f5720bff18607e2f2d6fa30aff14ad487561f039afcf99ab513a9d0e1f2defd6cb60f6210a7f3e9aed2d6e9d6f497a9c4b7019c110c37ad476ea3260f3597a118ad19761e42a9973a151483ff08d5cf05d06ec8aeb8729d063834c65eb56cd31daced606cbeaf784f1e11b3aaa66bb0d562b51de69a41067bf0dd26630ae52fe655e9b5ae946c09383e7ced4c45fffbcdce73003b2a195613391acabe9e86f40d089cea366c65c69026a495666fd90c397437142ed0622856615c27c3f8d8ebec657572a6af234ce14737408bacad6ea3146fde3425c1e9c01a4fc215a241641edd11e371c53ae8a61093731e54d3afb4ff9ba2eda29f16eab4342e161356f91edfe0c12a470336492347a1a120e22bc9c62916bddf802c30dfc7c067d4900766fe707022bd12c254ffc250c6796f7f7bd8b6ae1734ebb63ced692d6d5e733b81b92f850d9ffff953f6a204d0c6c22725d7c2ed9c2b5831697da6c9a92976f1e9809c845d581167c0b8553252a1809f6223cc39bf5b4c2a3100ef299dbe11d718f545d2748dfd7a25b56a6dee923164ab4d2136f32d4e1d3e07c0d1dd94ea379a779a13e59a2accfd5e302bf7014b038bc49059da19b466eb02ca36cb3656afe89827bd43151fcca24364d0fe8733e86e2a6806c6c935a3c27249dcf92aedac8dc76d22ff7742e5cee57711778c92afdcdf36e26b8448504ee6ee48e9eb25b9e495e9098d494ac4ddc4c541f499cdb652638b611b0353090ac125ff1fef8564a78419c57f038dd65951fe06e8377b986947b407579eec1a60a16f540db0931921027deb472e8296bc2d8fb4e4ddf2c27c0c6f49c3ef7a20fb08490c25c6b563fba193ef7822cf8290a7d8f05cf5e9c125120bacd25d93993456317c0aaa82b191d1da4674a8db265161883dc327b710df0927a4f561bf0f972bc7182ec481ae7e23ef84def92bfe88db0bf1b9ebf13e145221c6bfa452e0bde9688504bd18a73b08122f19cc4887a184e2b0a3ab0eb56f7da886939df5a8f31f94372efcde38330f00a9b77a973e25ff9aff12fd85f33afc2a6913a72de4e15ee8a2fffc38ce009929993a8cbe9ea09b93317a4bfd84214e15f2a26852110307b45d1a43cef52e46fb52058b25358bf969fc5c2ebbf49cf3f997e24a18b9c2aab5c9e05bf73a06990478cafe417f52899db43b1e67a1187e43dd35d4d84bcac83b8df4bd480943ffc381dd4eb9f89edc9cfd998387362e5d93472f91174365e0d3fdb9d037ef40fbb6e1cf04f51dcb52f64cf9f671003912564a31f75c3d3e750dadc24d5d58980d6d3d12a9697b529d1806cf0fdbbbe32d0b7aef702d95bf054722807d1ee1b3b544e83ab4ad8def0b90cf9b082db5970e314daaa3f1f962022ed086f802f72e73dc67b9af27b1db3eff1be0a7cd79df565627060b5fb4c20c135c4846801552d9a25022017ea3b1a79150324751952665e8bb840ead644973930a46d13cd8db572525e65408c00cc61621026f408406ed676fa736819472e93c8f05309f9e326cd35d790f5c93372afbf2c39820c2eb3d60b7e21b72a1d8dd6e4ef5dd0ef1c29b3b6b7cabf099eb36913a185a68de6dd65328b705d738e5b0a6beab4f21503652dbd443a24b407389948b531e8f32e958cd36b8be45a62403747297ff7d55f834232c809ae3237a94645b165d0a7cf8352d66498d44960e6665ff4e76596f72afbfd895ee5ecf6ad79f2dd4be70f914ebf23bfc0b3a751f29f9b9314c6bf94035e06d06250480bec39378008b4943b9edba3c42a0bdcfd0fe8e34d2da1bafeb57636e43c77af400f8efce3c7bf9e971daf3cbaff63502ce34b1f6c5b7feefde948730f15e28a5bbe80294fae91966b7142d7eb66446ba616cf3736c5e7c35947dea697151a3f25a018a60ae5b1e280429c5d9d88359532517c13f49461a1d9763fb8c563a638665e5d5b5c95a7ec9e39c6b4198cbe369a3c5b9cedef75f0471f738fe1280edbe69f58318fe6fc1b8cfdc7c6a79b67b6a47e73b86bffac1869e98315338bdb926c0c0f0eeaff37d61437a7798eddb97d19bfcd50b4eb8d81077d763002b594c4c24d8cdcb409e087fc8f6fb718793bf3c0a96f4d11dca194eb8254ca98cec1d8ae09d781362b80950dac26678b98768063e26395cafa6eb7dca125ca3bfdea38f9e8f6e7b88e9e680f37d4713061f08dc812b112276c7e53a182f218346a984b6b94f3f48159c268cad781bc4ffd3380b8e25faa705b59d103ccc29ccb3e5279cbb2d592dbb574fd063536323093c7c3fbf97747ecee8597ca289e3e47a1a12ae3eda5a80cca3d8f8af9fbba1a4c32bc590100d0e44e8c0fbe3d8de6f2ba0cc679ea6a1d5dbfa4861fcad63c5750fed59a9f032da0a2f6a0a6b4977c12b21bb556542cdb16bd324a8d50d1a12dc6b275857d8746681349b14c34c4e8f0b0566042d1f4c97feb6d439c34f3cfe5d6d703e443940384c90fac76661d12d4dd462d0409c9cfe072dfd9131e44afc6aaf4e97d99324c3bebcff8edf1a9e20561728566a6b3d580791075bcb5cd291a67918e18256a09d7a212fd797f7141cd6362d12e4dbac3a829877d5da295262738375a7f9243229e155f23e1b57b15720b9f7725a8e781a0aacc5bbf8da48c37436cb57986c67fd96d3ed2ef3dd1483d82b0e1135f41f8b0236775aa1c034590b0bb07cda9fa08cfd1377269bf7bc076f01d75c01ad00e20bce135e6fab9377aa8a9b844a5e7a6ca6ad36b18e27f67657d6f9df3809dac379fc0023acdce4c3f53c030a61f953f105f9925c44fe723524f2dc07639afbb3ef18f436f3e4b6a26d887d8bbc20dbcead9120935aebbde8491df450fee0f217dddd3624df4377b765f86164a335606a000c47d32a6017f44690e968747c3c83c8816c69c989a66781246531d1d78037afb39ea85dfc3eedaff411aa5ebd596c31ddfd724d17d1374174ef8fa267c9dc0f3f9b9f40208138e7c003933834c7559c2b7fdad48e76ab196266baaf669bbb90f8a5048b7d9d6a708d35bf7b6314c489f25a0fea4e05379b85716f5364745ae78761948a53d1f6fca43e8bb2d8b02d6deb128e08e70b612a46860a28e1e22e755457abe753cd62cebd748458f62814ca4e3fd1baea07bc583e1b07ba5f73caccf7ddd70cedee3279218e45d85bfb0f21c448777ab778ada7d4b704624d97a450ea8a928592c2ea8e88c22cdb7a9770f6b5b2fbc2efdcb99b92d07ccb2cdc4f9394d46acbe2d9ff715bd6b5ccc28beecbcb05bb1de3b274a600fddd5f8da021279f51cc4a4e91f5b403328d16d446dd235cc741f6438843499795a299e081cd6f527933ab369941e9274bff541066d07fe36e3ce67fdcca08df4e68f4b5ffb8ed66b13d594b4e886320a9a90f175a4d340760f869090e5d66407e9d0a7e885814349045cefd201dc487d1f6a2499fb8023155f0f87fbb91e453bcbb45baaa3f9654ace986bccc967fe53b84a837b5a55ce9a3d30f3462ec05817f4030fad3e3c63f5d951b1a926717a16ccf9b522aa996a8d10b37c772e03c723cc856afa3c9366d38d4e69710240e44dc2406396d1951e773f5ecb98a031b7e7bc0215988746966a53593a2d441d658104e535e0b99113df34fa88b06b9052ec2a41b88f059d1a459138cce4d4502539f9b0d20748d4704d564e5bc87969c0b97f0bfae8a0e01be9b0b4c89e9a214bfd096be31368a85e490d24eae7b10329d6242883aa3e56c0e01995d6637dd8ff559cdc0f0d0053055cc142e015fba8b4cc7f60fcddc94832b133a39d3c68bc6bca1acdfffcf81e8c0dda71e35a3f9e8922fa7b0d8a28fe98e465a6c6304016b4e3ec045be838511ce5c0799bbf652ed160fc405db843c01b011965f848ee2e05297849cadaa734dc6bdc22b24b56a0b40fec78956f02d6e391b6a9dc8b5a4c84232766f4d82f0ff5279434cd07f83c59b634eb5cb74d87171ca43a1a016cb85959612182edb7298ea1517697f9344ae9dd3b615b990c1de0284ae059b20db9ad538f441c1e28cbd0627cb1b52bf3118b0c69a23a1c27de653f126341a72399a89a17956975683de3f17badd2a51bda68cc2675a0498613cfe8638a7be7979e71b563dd12f960c7eed6b832946d95eda7a4daa43526120345aca51eaf7a5211312cd9e3beb2f8b1199a9908a38d4a92721dedf5a2beb1f8f01141e884693b3a0f88e37116a919428ec488f6a80d2111eebdc8318f164c38f7a19dada3bb3960344fe84dc2e5a9c372dcecc64bf301b1450fd120a338cc0c83e42238b47836ccc70c5040696e917cf06a2d3e3349d4bb9f987189872b17bcbc6138505ea819c7f1448212b34dbab52df7b3270917817723e21035e3f71790c9a048bc4954ca97da81e88b4a890bb6540ae5487463f02dfa7417ed5ea5b2d0d329b8451e843084a94ae973d32a6bc68b2c2d6b1d3709254bd6ec77a03bd2c30185f2b3853e35d88728ed91f939c42ffae4f256ab9ab4a63f91f99b52c45eb27c3b5cce258cc0d99ba25cae61bdfd37cbba9dd2c795d9fafe2ca5231c453ee56bd3605da775bad10e409f92b6befe27233694a7192e6067af2f57d5a5c85aa4f7d5652ab2020906078a1c059e45af472de1409d486f31367b22797b96549a3748cad3fbef3996c1af093ccfc158f8de0e42097cfd6034af898e72db96f2e6e5853a1199062449492d4467b7c902c136f1e2580bdf08521902fbaabe4ea926f8d7ab89cc9ecb0ae8aac306875b48f295fc479313976f71be0def89eb658142b665a7a25b5f34c2e44e0f7f052234734457fb245ccc9d7ae4d3f4772c8482226858b5c410f369578640af3cfac3cd2c8b2b8671ae279b56d47b91dc4753b5ae55d75e57b1ff72b316a92ba32de91b05b1a06ee4d15070ebd62e4f20057921cfc70b28c3072e55bcdcb00c1e683a27e700dd3de38cee24233114b4ab2e9fce6b041b9d71da251c5c1f7ed914715ef8b8be0b7ad8a9a9c0e52f544ae58a6cc56b553045c7f28fcf7a293a1aed11fe96623451ae2aee2b4a1816179937e0890db80272a72e161274fe400d581010c20acbaad860412419cda62f842807fa9dae3853084b0f105615cfad1f19e736515bdd67c71885131e4e76c2c47fbe9e51b1d5901bb9d0a604b9d7b897e8d94b54917eb5475f5e82e0d77017fe26c5954d1d7600d27adba1c469fda89e4a4e1672b598da80bb343a076f7c755ba682a738fa03ec561596c83d2c29c75bc9ae6054ce121f99b76f043c1f822603855f9bbb51639cce126be5180a435bf7ec62f1a1e4d4ccbbd877a627ee6a701d4ec33b7d29805863fac1befc0b34ad993bd0910200c6290da8b4e86fe41c9cd186164d278a41683d53ff1d9238e2056a3f61081f28d07eb8ae8f94bc0981f149b7bf9a607c8e1383a88fc8829836ab927f7d1d9f67da12e3726e70b8667fb9aa6828ead1084fa35e7ed887733318e638848d9a2bc2cc2eb77dba460902ff3a1f22b80521356c5ef55f42240e1271ff84d4f7456a438e1a5c56dcdc57e5eabecd6cd7b2f90cce8d71d23565fa3c273e9ff925e605f1081ef9853afa4b18268bdfceedbb01935b77f9601914dfb924ebb17b7d47a3d42382b6933e6a8ca29de97bd062e6e0d4fc66b68f56f767924e4ee1e0692fedf5c58dbc074ff3c38b3522cafb9ffc3fd79aa0cfea54d738ce8faf58b250658a5bd7883369d45c98dcd87df3d60ac4c5a21b6e6df67c7bfa75ce553e789ab2230e42bb4342376eb29c6d411eea0c081b3f6918b83d34ad5690f389babbaede6017ec6e1218dff1bad3dcb775bd0e8ee8b66ae6d746e533f326e593f402f6b1e87dbfe9cb7634ad57890d271dd9761fd50d0820f399f8d67b3f8ebb15d5d9f36448a27394e19e6932c7e7d841c6ad838a4e290d33bfd35e93e3d54945bcbf6b7b817c5695e385eff3945414070a1c82ae81b7f6c03fe093e51ba284ab4010e2d62f37d8f803510541f93c21972f2ae4e9ac9923c1a1863d19eeddb570e835201d5aba42e2ca6a74c4fd85481abd3e70e5d9b7dc5f6e2c23d7656f24bb3d94edf70aeddc7dbe390325a818d1b83ac2ef470ff969c22d3c0ec6873e19b5c696110c48b8edf169247c0c02dd0498301d2aba57471111661dc68e5c33dc860ba353051b03bf665394a52014bc29e326b7e6e4b8891e75a13713d8ec36b45594247c8a8cb6980302f2480ae59e87c0a5f8ee6d3aa7d61567f2bd4c4030eb4aea7f5442a2b9c1f000a42b727d696758344809fee589821a3fb68b915f07c78f941ea3d665f48256d51417fee50711d35b0ffe3fc21869abb2eb465051a591491a6731eddd50225d07a8d359245ecd58a2b596d7d83ad5f147f9b6301ff090a305c4c63013b3eb2c20ca29294258e30f92a2996f2fd80c138648a3dad0d20ec3db9c29470e0723eca8e1df1748dc9a21b23ecfaed0db573af740d5f56c3251d1275723d9d63213c42555beca3dd13cb68af2ff3dc229fe8e234a132afcf7a2f66e5c7c8e741e03dd218d8eeb29210ff5a324f3c30dac493691cc2721860b4959 +MD = b2a7c12abd0703108eb404f4d038e82f1223f0aa15db525884b7d239e3bef60a5248a66f515dd61f8387e475b4a0ec42 + +Len = 53296 +Msg = 61aab1e599fffa75f3187dc3c0d03534dd62086688e340cc71103a99144a62e047df5ff90f8b8a26b83fa5762520caea64d3a1d785f8d68badf4ca3366f489fd392ffd797f6b614574c2f7e98da6fe000c23df99d164a7dc7379b9f18f57c51d6020f42e90a5651a4e2adde3a169babdfcd92973122f9907eb257099387bfc89e43cace0eb4380ec6ffdbe2b0971e76b5d7de92ef16296533f8355f30869178aec0b8d57384c9905ffc6028a6cc66b50569786921504850a9418d1c9a828ff66a014005a1ec997ab250a10c8727130b410b06867271d4d72156e4de1bfc09a6529df6bb345c16427095352adc4791ce1b24ff775ceb6d8d3e70c2f04f63ad2d1aff43728563ce7c1d4282f000ae6191e65fd9b84b3d50d77357ae0faf59d8ef059dccd82f94308c0ae120f8bebc00eb25141bc5b7d85d4a52541c98b63f1b60c501e9388d5dcaf6ebe985a141010e2e69da3c2c3d5cb15a4dfe8517fe93f316bbc42f3049312c4112d42796421de7f0272ab158463b1b8bd8cf7df9d2e8ee955c4d054bcdaea2ff22298d243c530cc4ef7e21d66ce3ea63854f6ddaedbe6c51490511e7a536ed859c623ce79a410b11155cf4231bf7ac55d5e6eb27a974fadef494db804a6a5a88d416ad5cd67851695b3fbedacdd6efe73d3e7c6c90bd2892d174a8c227a9785d8baf55008b697e3203aec84a0d1213ac4dae78163de76411721d2019e774d5880594da5f2384f00fb112c71d5429b5f969cf84b10b944bef5906c7f3f46ce0ace48f93e5396b4566e62431a13d9e5563241a18c974442e60f8ba16ecc8f22810aac8181f378cfcbc052b7e9223e0608e0f06bacc1267aa2ac3bf7370ef952a77cb06ed89a84a6483b0b1244c918065ce8d1dc135608f4db15c8f840cd2d65636c7947aa0f6544b625b5db95d10fee39910d7e291e91b77793592cf2d0d3639c2132945f1bc1aefbc7779b4303ccc58924ccd957e06acb606c161ab5e192553ce401de5f8641ee01697ad9b625f79333e9357303663a387ce8284af2c612422afd0eab11188c0aae53e61d56ff38611f2871d69776aa06b551b7440f48fc324eb48286df984b0deccce2f08b5b35363529a78a79d9623ef1edea91762ff82d905085f430d025fca21d96d8bdff991a5d330015135709e81a06eab88d43ad3cd81b3e7f6d86c3e1b88f2b5f54b40a157f90a401cbb7470a17e2df41be4cc4660e5bd6aefc83ccc31568c90db84230308386bad60bc3c6aed0c9f0b57011e4b41a597509468fe9aba3f097695171b572515e6b1a3a412bdb2d05459a0a5bb62ce45d4119b371c2a04971befb88093ee4d160de57bffa219a16dd077bf6f2e2d955af6565acf3feaaef31664bc3d1768cecd33c1404b64ef273985edd9b9e0fc05396077697db45d17d79b5e26b9202748801acda703c5aeb2c7f714a6127e5ebc75c50d2ddf2411edc91d647e9148da48e3057306b56ee8d29da6949b0540e619a476703e7009898f2c1ef02a31fbd22e7a9649e5dcab2e153f16d63f0ee2f2ab2a074911ccdf248a851299c037b3af879b4fcacae614dee900ba61e89bdf34ff9aea102e320f834e788ab9c70efad2e2e9847e3c7e368bcc9713c05e489ffd756bb14e0a6c3516695b09e8a5245becaed9f6cca0e18aa54e76c569d671afecab00df5b2cc7ca6e69b0f29ef104314d69d0f94eaecc8bcbdd0421c707b389630f1ed6d01bd149fbae2ed755114b258592831e6c9caba45ff6e3bb70589aa6f1200a3a454e053e3ec5194a93bc559315c754d8bf10eb7ee23a7a14fe4f7393277c577c1339f001b84cf4bee328b0248e66cabaaea22875f3065ba0b962ead876828b1ec2661e5ee8846596cc0ce7344fff5926c3a6cf23f2e8fd014a297ce15ec11984fb68fc805029d074a6cf675cfaff84cf96b56c036260d2992909963850b68750f6a8f7207f9bc9db1be6bd08eff5d1f780546b8ee1fc70dace99b367ecd159057cbcaab9d768b63c83f964c2bf60c54118ea6a30c21a4c68a33070da93b00314d60a83a6f80f1a0b876ddb14e9dee32ee90dd493b348f9b55f944b1ae5c12a019b192e9241fd99ea8eca9c69efae9033492537221616dd335c0baea34393124e446ee7e655b28a3c1276354c418e60d0e1d70e666af27b75112d17fe3d84607d6a825c2d93dc7f82ab1712367fcce9aa2b89c6cb327a58fd276f13a65433a8f165ea07d29cc9ee50c123dfb30b087f018eb3fceb0cfcfa3df7582e15f82f305cdf0c677fc1195b18fd02da4c73bfb57993ec1d204b18d3aa196ec3d7c9b5bb122e7fe77fb1295a6da75abe5d3a510194d3a8a4157d5c89d40619716619859da3ec9b247ced9840a16891e88fdf6b07d5b6602e253416615e35eec34b980d4c9482149ad1c6e4c266a92ee53ec37c2caeb4a927f9eff51e8b216515e2a5cb6c769742b728dd7d342ff1a820f48702e49276fa0dee0176f5ed6102f5e5c33e61ac94cbf5eca1e03a6fda84484bba7dc42355c96c8c28faac177d4effaf90d4c0a8f306f387b4bc2998bc59b79ebe6b4fc3d99da05eb71e957bcebf7fba6f3d0e1e4a9a3ca4864fa64d1f7efb780349dc168afd65d05c5146acedcb1280deb5ae5ef3ec1dad7739250f8c9a907239a82d7dd25f098b5911240d52f834bd600d260d9773231d37f72a328c02f2f7c1e4887c583927da5dfcd21f86dd72aa9372098c9dc5e97e29182a58866eaf732cbd819485223d67db62c575f1d148f2c9a2cd6e8f6add3acb0aaa041424229eea61ad58d190b69e41f172933c7a2400a30de615d4c88afdae4d2da7adca08b57b9f603bd60b1ff832076de9cf3e905e9011f83516655f11435e29c5cbd6ae7160b55eaffb07f5f02c431bfc12a51a87216d582eccd7d6201acc22e0f6c0a03d2a41dd37c8fdc5308103114cbf342ef4c76eaa7550869ca4a505ad8ba71e6a7348d38065c8830a13d0e5c25e1d724a41f29443ab59f80f1972a92e28655689de3cd8ccbc620e4124bc59b392c5d5f8d9538cd83331b299e8f4053939a9ff6ac886c036ae2e15e6ed73dd799d40d5b7354aa6bc9f803ce9bda9c83351fd7fa9bcb73842ad952077d8c7ff68e006f801d048708562cdfd6ae21460c0e3c86db3353e9f655d3fb47060f92e25ed80c37554ed88b70f538a9a00c44d4671a33013cc9d64331f76587d30b7e8151856be6e1daa4dc607e94af3842a0c587e066d47ed44252076e172daa264cbdb12f14f78a4ff3e36eed7e50406c62c6b8b7a7bcc01d360b1e6099a35408037cc4fd90d01855cd88e16b7bf47e3190be40c77f21cc4cb956c0f4744f995aaba8d41866db53963bb3031f1503bc3a34976837756b6808d41b33522f9b40c44d2827a81e7e03b7444c1a32d3e5c02e5538783012025df98e42c0a352ee13edefe405d44123ef63f13b6fcb3d0252b6fc89b8d9dc4e72c8efb3af0f66afd87e9cc4b8c45631e04049684a13dcc23c7a30726f5b5db8711dff5748bdf248581e59b087a1e5109ef654bbf232378e4521f9dbe7dd1da6209fc714d3d67e205b763090b9937627f12e1a1db14fd7cc34545fac6688a38149f74ed39781929fa92e284c97c192e0a190a474cd9242e6d2ba6bcd358377b2b2cd9c7ddde7b72d09ed49cc6954c0a275c3f9aa8f240242e7fc24269cf7219f24c8baf8ed2f7432445b9cf9777389d6367021a53f2d9f4a3bc193a0e20c29b26690af2e0f825216222128b9084774e2ac3e254f25d49f6495b2be2151e9185242ce83058b08d8416be7f6f565f8092f9fd60c8e89428cfabe76af922fb776e67e2a3f67a8e88e1ce7540c96d7add025d7dfde4cb29fed737fb66edcc59dc9d8e34bea3baf4bfc0d5e117482a48e522c1b02a370e9124b379e1a01e55bc49b8f39da8c69e858ab7d97c636a314c416ad35e764e276c32daee349729739547373487e2ed89b3822d55b1a58df7177a40eeb35298aa1db1b4018ecc9d9a674daecd7e0d6721012e97b72b5e42001ce85b90694f850b2829d5503aa0c92ec4c5762b0a78f1e8f0f89d9a440e14d0ef240144eaedb1cf0df3c556e2c45ac5105723d997c5ec45f578955b963584ede0b5d898a28d9d6a41b7fa81f1a7b0e1ec7b3e55b074d4dc911715978c5500bb940657f84adfa66165defb6de1bb7a09ab9a3c3beef639f1566ca4caa0fd16be9b9df5e02e347b48ece12e775d7004a0f04c93d89dda8a38b7d1a9617e8e459b59f538dcd72c7a8549673a4aaf75ef4c3cfadbc86782541727fec9f87f98fba641a4976ad03832bafdc97534723d986ff43d8a97b69e1621493c5cec2eadc773f514a80693e8123e9c8085e12027ae80b88d16a3157e4ecb7e22f8d8f62d3788e6ddd13cbcacb7a48844d2bd43d48032fc5206970eb37c9a493b144b8097ba599958b97995069161535ee24547b4bbdb3234e0cffcde1df23cfd4590388dce6a7f2db749c7761e1970673af5c658cffdec9e2bda8a4ea187bbe1e353987fe2401ac55139ce8bdc1181d6536b2a312b2fadf64e331185b5af687194022adea45f0ea81da614a85a0dea24c201fdce6bc4d8f5de563d33b8fda534de285a3a733bad4e832b246bf6532beaed56bb80e0720ff542d067a929e704941842b113dd4a7931184588475f85c9815bd5ee19479ba57d122e2b8696f00927d8cdd9db512014f84361cabae41a45a0840c0fc7ffc65c05c2cbe32c7ead255896461f216d40e2fcab2c4637327522910c658b4d87767627eb36493b4f72dbbee727fb66801185c6a5e1856cb95ad30b4b7efaea6d10964be1f9a81387e5bec33200192b38365feeca4e22abe70fe947c7b4d95f1f493eea5d929a45c67a20fe0d5ad2d00413d3cd9ebe88754a18d80f07a3a0fc2c74d2aba47d9a6279a4b4c7df84d305623ea3eb89af3169610a21a991c7ec420327e3e85d2712ca2ff9dcc93f3a742be11b32d111bcb7e8ba5858afecae05e131d70528ee2bbe1d37fe2b7a92d840c3ff3df316dd538683b497df9a7ea2a82a370698f5ee07d6ac4006035480eab35e1b1b7715230027cafe2d48f1de622dad913b21c7c3280727d6b616cf7fee666ac3483164b94f061ee59d073e724910ebcef932270428c9f04a92b873e65fb47a9628b47dd69ccc00097bace8d0e3ec654ea53c9c377699963a106aca5abb37fdf24162d92175c40ee83dac7980af3a9aaed3c38fc38de09a23a3c04b538d6b757636deff106698abf0477878f82765fc5e19498a3efb497c75e14b6f5752c961705d9b7829fba457b04da35fadd9091aeaca4104003b3eadcf4d5eaeec87cc529f3a0aace48191a2b6a4cfa628309e76b38b4c95cdca3abe8e3c8ca269a90eb94160af25c6a4cb1d61e13fe4ddca908066b0ceb7ee24c81f415357b27542eb1615561b7b46e1cb1840777684650389d862ff39d2f7d761507716428795c1fbf9797eb205fba51c33d0fc260d2477d4df46bb307f615e80f29df9cf7a21c2bbc3ec6f256e4b8b38e0a1d3a107b2941c1570792525b126b16624726102cfa19515fc9bc81cbcf09bbf21a299ec85e4ca0b7ead9a6e6dcc7d2bb914a9c9f60b325018891c79d661df1feecd532414e66931dfecf2a20dbc4ec3ba650c381b5bfe12cebbb53e1e7b5d9357c87f56f6157428f2abe079077290ceb6c80ac5c61062ce8da814b1fb99a1a9fb2860ed900e6541856ec64bf19c0d9d1cc2280b7cc50af3e3d2ad8e044945d44761ca60891dd72bd6aa26a33274ffcf7ae7d661b5e651135fcff21aaf06b4a2db18fe5827e0243884f2841760b9f1c65fbda870f7f0cfbd6ff484f0825e688614928f2d12d1e7080ebc610102b78e22299810b1b970f15282e4d897f4bcec0e8282ff67c08f8a0ad27c4ff87f1a2f63672ba19c70e3406337255f899caeb99cb34ec180c755a7c18ec693865c4e4ffa96dcdd99c4c4477ffb1a9c3dd0a05bc1157a68108de0aabc820ffe0310b07a68371017421b9060f95d59214d374e4d0c278a758f8aad1d6c5accc227430d492cd68a012dfbd4477fcc45610046e4f7ee77f35c6654177a518791924b59a106b8f39f0da5cc1c4563c683de1f761106e865399f3d60bc4bfc86e2d0e7cb186dbcfcc3af5222b4f555ea791af34b6ed47aade1b06d37080cddd72520952ddfd889709c58bb965ad1c686b98a144d3afb258070228e4d87276606fce3dbd863c1aeed8dbc3a7d5a652659b9ce0ae221e569ab6988092ab6363584cead147140c3add21c2c576e5029f5a1fe393fa0901dc77d3233764511b3ccdf1eeed78ef35906accc3baadfc88ad51dfb5e3b1f221ebf847ec74e33262a8c84622bbd77f7fc3a0c126cad581012151c25cf85a44472c23f83b6095b6004f4f32cd60ec2db27c84e8331c75de36a663b21ff97d67394602cf58230446bcda6da039073f5f9562202932d9157aece28e97450fa3c3c0e29db48ae4b8485ff12775acd6597ef11e7b6d6a283ebdee7dda57176153c0a3a8fa901acb3826b13b879a6ff5c1f38e579d9a2432760f03204fdbdd1815c6ac3f234950010c467a6194f7ca8dff2534b68f9aa81e48d8f273f60bdf5b713da15020c974aebc12820a567404c69c7babe258533e153980841dd6cf6453f08d4b82f7f6cef9d0f091dfd6fa67c71f5fba8400af2e3fd36f81c7f710b627191e727eb2baa60bd14a6e881b6f39b910382b449095bfc39d0eb11862b41b007458deec59fc430c4787e2ac2dbdc3c3f86dc4c90fec3aca1fc3dbb91ea5dc068aa45672f2a4ee23b80fb5f315ca4d0e5d684ebc859ee77be2f7c95133c94060e268a3bb8799ef78ae4aaf07da801fc2ca9090c4fa920eff6d134189aa0a9137050d8d6d1fc58e34b0a0978d84c58006c44d548a77b0f77d487d0c098a4f15b279fcdc31c30f137f477937301c83ba02d50760b603e0ea1efc9ff278db7f16fac89c58ae7a5fc580f93d5596a9a113df84267defa70a2e0a10e0ba7ea684da367954c98d4c9ded605154ba673307d4c5591273dd6a160c680ca72ec4f245aa8f158ef67541b1d346d4262e4cc39d44dbdd340a2954eccc60795e14f2c7aacd2d23b1a80f6284bf5b0c1b79ec5f4bad4a97f20a7b6d75b61cde6c35b02d9b8d372b25a703b6fcf9c7809c62f112f9553910b53a7abe9711c1c33959a42d0030d6b651bbf84502c8b1b80fb200e18f85d1cee663cf4e3b277ab02d4779cec1ff314b9fac96187f76413dde31c4d6f5853a5beb4d22254a3e6d2eb0c9d519c7427172764186365949a1966fa7e2f8139d9b3f2ec01a4caa9fc2c42aa56114f841bdb33e4370a77a8af64b2cdc054fd1151c0015845fca4592a2fb03a4c4c93d433e97607bfb74c8806be57c98d3e41834e7280a609aa7015e355aa38ea6407f921ba542aed0a42d7525ebc6a2f4bece44213f741e73ecc84da269722bb180a4747d664da7973f90af4fe574c311e5dd8bf5cbbb8491a081a512b0d9438b9195328c60e92df74ed8770f5bedc3d2622b528956465b9dcb14afacb83e9ddc7b3b136f1d7f0798d8ef158dd6996ade3ca2e005677f6a3e7568b399080a024d467d614f2575fe23e5bcd1f3dee07fde7b297f9287cd7b1da767f90028a63a85fb426253fe35da407e27f366f92acc7928a775583c9854e169f8c80aa1780d2da27460a432256396a918c210b1df17584a060b7e1149be33c1036adefaea43ed41faa16949af60ce707787198d672922e92d892c8b4681bbb97125a6bb63a36ce2bc6ecbc93a9b8fdb2c8ba9152aca800d04378c34f86520582842876d4bf6538ca20ef23c2dda82f12013e6d291c11abf735cc393c7320ba61108ab970904494894cb0529f2e64fba396afb4b02d897066242fc301caf23ac14c13ac10795f71d7aeb2d19f0879d3e60d70e08e6d5a0ebb92f5d945da511711ab35b73ac7105133cb791938f8414867ea14892a681dc75606c0e46f4dd7cfd09283736605f1a32c2775a1f37a75d997911d070a8a4f4ac3f4138ce471c0d59cb66f6918b29de83f473af4550b6207f3b6fcf2a56068f983ff503b5c02d6c8c46b5bf0d9595fb0dbbf2b98e427a0441aa036c49176e564246d29682c5d7409e645fba30e76c16d8fd3e9f8176bbb2e6b014d05452a6f0b13d1e1abdc0e131980bab1185e775daeda49d8aa75241d27634eb22d3717407ed0d22b6ef1814e98125e0e991fe7aec539658a2863fd30bfa1dd18b4fdba140ff9c26939f35380d6199476dde9441f712bdb60ea8a63b0578550c334ff8f545eed472d8557f1548414f28c2f31294a133ff01f795ed3f69fbc3e4415b3037bec29c4dae995e723f282fcb1358de3992bd467f84d37ea8df884fa3ddfbeb315284db013df43a189d1e2177869662f873b8797adeecbf3d0e29e18f31b891a9aa3b7bd4aced7bd0082b0d754334059bec2d80382c681ac89fe561f262198a686eef630f240d89602858db0e73ba2ee8a423430297cdf60f39c5b7129ba73e3645a87bf9ccdacc90a7ac73873eb047a944a2a91f47a5badc85cfcc3802e816dad76fabdccddead2a2a30bd2bcb9fb7a473b29cd96377d0f52b0d86abbf66781ecd4bdbfe4ea192f45ceaa241430fe6a2da5c047614cc9f22d287ceb5fba9cdc8cf45f3a978aae4b8e2e40810cd863c6a21a7c73f812b8f2d22448d9cde377ea18464db2373810c3c6726d9e1928e21c6ef9cce7cd31c08dcc54ca9a98f9af17195b07cb466ae704991b6fbfcbaaefd7cec410175312772f960a70c24375a9000a931bca679b97aa6089e58a96c6f3855c1a04871c4d5354a9e5e9c55fdfdc21569f0843fd62b911d75e6d630d0573a1916c18cbab3adb998247743830a0dee7a7df4bdc9a28c1c7480945fd80ff06b9092aab396273867aa9dfde7f885127ef58c454d8a08628574d0b2daeb51c23481de65a74e48fca54aaff572fa9792d94f3eec1ecb2e3733e50e472eafbd53fbb6a2fa4e293d83dc3e0269cbd2681767503df016d33c928e8fe15c456d7c2e29f5856f92712f55754f3f60dac81f2890bf2e591fec5bfcfe39f2f8066cb5d827072fce5a6c45f8d6450ee38723e54ebc65bc30205cb3fcebade92359f691da5cb4491f8d64a8f669e816f9ba2de10f530b8d7c006c6b1abdb16de5265138bd2fc37b68159f7fd7950000aa5b2c3cf6bd774945a964abdedc0e264755c6d1090afe6cb3d966f321c15473fe52691d8862729993028c9dd1b18cbd50cf9d8544542bc507c1002c5e57ad18fe872cad4fabc3256ff32b667aa2f2da097a1e7bf874132d6db5b75115bed397b1e3bd13d2fe3494e0648b3161180a24783f91dcacd47e4deb9dd18bcf5e8e97204c637899c48b8eef3df2240f7c9a44a7073dcfe9db34cd8c619701139fa6c051 +MD = 4184e0941a1fb27a613f91b6ffa7dd74ec65852fe63e108b94c8ceac88193620a2100d638bac1667072c40d05602c0fa + +Len = 54088 +Msg = 7e0c3106a5a193b751a3bcf89cd628e4874687fce195c0196b9337a6390f4c0b5bed246cbd79ab944cfbd92c5a8c3531442798a552033484de20d4f9b92065d2ca59b632f8287c854b8899b94de39eacb7288ee0491de576faf7d85a5128dfbb137871be1e570e73957183083d846a3c276ef017908bdbd8053dcb30cbccbfad7d71dc79f7ad6a4473df207ff216a1cbde2446b1edf41e93481d33e2edb60f92516d7fcb4ad397e22dfaf68733424c40227019162900b78d0bbd9ada808ed751d893e31de1709d330be98f89cab071823c7aefad0c58adb09645877f4bfb1dd2570c8fd5822d852154d573eb7d071b7b746b53e05da408e330de833918a6ebfd19ff0b5df6b2569352e5281715ef4f12116bca16e68bd00d22b01570ad3748ba6595e01b05a618704b4238735a12172f5da1deb86db60e18b5e2c58cd3553df182f5957976b2d4a288132b6913157aba9e36162cbbcdcaeb2e9c1bf552a8d08ab949b2dd137d91105181875f0aa3819c1d52fadb98770a6ed808a014f2d90b6d52b6c0b1a2b057a2eeb4d6bf056232bb221b132dcb5cd889fa4bdb4f7b90f6829566465cecf22e40a6d39ff0cdfa9700f4bce88b1e253b24db90540fb47498b2c981cc46b9ec1fd2c2076b5a2a14b853dd5b025b577a3c27c4fd94bd662ef9e3382edad7d14531408a77c165e3589b9d2321e7063f02e17afdba22bf596621fe2896f977fba66d72464c2979c26d4ac40f3521f59e663406cef0867f55c319ece2e1b08e01b7d9513ead2bfe8dfccdb2e9bf388f3c4e3db17fc7496322ede893ae368884a91f80c3bac3505c0dac2a4df9e9b23be06003645766f2d5878d96ddd3bd08c1bc8767b101b51ffb0a266b7f86d9196354478e089ff6093c4e4b2cb19ba0b8ad019698045cac21444c11982fdab7f46e5ea9e683a09e17003dceb1f64c0420b142f51aa213d0dc9d9a16b7453bacccc4c72f14bf9f87a3881dbf2d962f13c933454bf5756e48da6fbdddd2a8f2e028cd56801fa2e7d8353eb5c5a8788cf53a9dd3413164b43da3237e0df042477a90f0d5450f16bfba5589cf892b84abd2fb55b47fd7562fd6bd1fa34e1afa81a28c980a25ec026e558cd131b2bda2d3d195c5b0acef35253cb2cdf44a57b8ea82a52abfc9bf4d3dd0617fa4e967ba4e1a8f538f707fe8df960a943ba6af64c83f620fbad890e174545df9f0d630b462d6716918759157a50d4bdb3e0d2ae764044cafc4fb65a55b0806a8dd202078582dc46e14602c6abfc9ff0cc625d12706f7e972a4da48813915e7f433703fef78460eca4cdc590974f1ad8e9b96ab0df640c4c1241c405d58a28546b96d96ff094adae4858f1f1c0daedec98509c0817b0862020a695521fed86a0438c02c915560ad268a21868bd22719254c26196cde774d9f1f6b90b674df1d987910098ea2b111f7223b963e0b85e60ab794bdb468b40cfe2bc7f80202de2668410636dc39658dbf1485581d00efcde090fcb4435ee82789f62896eeeffd0ede5b4aba6562a3aae729a6d311f98e570f9d0507ff0b3a26a64734706285665b608e839d0f6493eed529470f003d890bffa758bdd2b6d392bfe79391470a3e9858a159e8c4895ee3f2dc0f15d415097218759cdea3a6daf33b9feefe83c7b04a2d5d76a26b172c11a609a7ec73c93612c3d17a73592478cf8235edc00004e1fb478a7fd3ec5724ff5a7ab69cc7a1377666819a83de78d5b0fc7137e0a409fc320ef01f832f916f3574f5e52eb6e435236b4ea31619ea181d111d7566591d2778ea56fcbb1b0d343b5e43dca92adc57a338003e34f2c26a9f29ff4e5806898a544385be829a129c9a7e2c42150acfc67c375f12e65147f2bdace16bc093964f4e81460ee194e9cfd93e77bf7b3e06a939ce32c8331ec2d9ff028973a5e7899bee0c5f94dfefdbf48005eefde2adc9295f67430724417b46ed93bf0f10ecad99bd4c98f784942e34173a57a15241606e78695878c0a3ba6210c74de70889496e42aabbdfd86b2ab627477b56d3e1129f0c3c3ac20f2ac754ef07faa295a6a445058c8ef6e45c19a3379322c26e7528e5a148b18e19bfe94512b98de9bf2c07448f5bdbe1af504122d086138d2ae6ea67c1f48584e74b6a5d0247cf638f01ba936780684b412dec5c79881860101aa04ef3aa7d4b80b490c3461788b90c0e055b1561fddaa3dd6078ba01f7e326fa92c1c0d2628cece4a4a066937f923f3b30c422686436dc46e59f1b5979bd766e08e9aed2fcee34c1ed1beb217e972e7182f515fc6408f452c5f925f86696085f49ed4713131a5f35b55d5c2b4b70e39644177684c4f8f4e846ad5f478618e2b39ef613fd6fb77527428e4118afc46693bf51ce6a4dade3efb2e452aca1e90e544f2c99f9d76e7f7eded42350723bbd5138cca415c7d0c9514fc584907eb19428a4b6616d15e78324cf5a883b5c7ef2b7faaf80edfa08aff566797f5ce6197a19e4bdf3c2efc98c005d46fb4135350dac4c23ea5aadfe9cc33e27cb76a1c8ca0e5968d8612ebd9ffad2c101cac408141a75506bc4aa5a98a321f8ee4877688cee49e097b09a6ac6fa74f2243ed29d11e8be5d8a93b7c3ab7d55147238309ec6a3fd4cb819fa7908e88d02eb05279f0bfe6f73d02f9de1de3923a2dfb093148214bdd5c30317916eac6318de878bb40b44d0b9c401235d38bfd3cabb176972c729d1a341d6ba5bfe2f3e5d862cc68418a22858ee6f13dfc1f7adb690d57a5f9eca80ddbaf9a97ec25768f96a5d9fb83a00c177d6e2340e82caf98be5528e840ddf13acb4d6ada3c20d28131380e0f87946e13f05c34d93821efe7443f56d891f50d237b9d48d72053ac5d307ff4febde5cd1d802782715cadd05973128de15d90505a7505b139293c48862d040b53a702ad969556b8a3d60ed561c3753abd045e7f42302d305ac7495b9e8f6add98d3898401a87023db34e38392cdddc9a646adce7d455a42c67b193a08cffac858a3c8f50151fa70a1e9ca4f6efac2c747650cd25e1d337506c50a8847775a77fdc86f54f7fa5c1b727501bd48c2bab00b100a3f77304f239625cbbafd1df0590291eb48683a1b80d7574841c2be3c108ba8144a5b26f3eaef2dab367c1c62e801a0ab23d469cf3d4b10fc617f65ad7523cdb9a77c59c8478c4d47af56fb18a175654d9bcf31edcd4822acb0a131a53a8dd178cb4d5132a5f7f51f7a10428811d86040f4ab0addad491cc7a40aaab9fd0453c01a6095d9a2bcc5a12b2a8b37b5951203e30a5d3559e85fdbb00e49321921d52e3938a013aa452f6b37282dbe09460b24db7fc17b5f807c57691e85c43b80d6219c47f877492ba2dc227bb2718965ac12424da0163abbf2d933cdf8d6c08bc728b811178afbcab07271a7a208b27e856abc2691ac57f543cfb49f1af034cd38d2112685a52ebce8dca93e84ca10fb278cad8d1e9443b6ffb94004549724af9b8c3beabb8c7e7cbc694d92d35c3155f2f69ad3af749a9b77047a804e320cbd7fd59ce0317757849bb6b36706357039783708acbca3a8fd5a5fd8b550675961563cb8a9701c466f07239f0d95dc79f047dc7b7acec80b670a29cef6138d9755af2013a90fd1c7869f5e45092ab79b24c24567c06e584e6316d0d1d5004b42e4eb3e3261594e5775c4c559ec0d5d70317810621013bade6bf10395d49ef6e8a9aad5a964f4c872c707d75228e63475c0e9abdedc4786280c49307f774836f51e6e94cd165b06a5c4e922b2422de3383d879642978230d7ae5fc5e32fa47204bd96da3208045f7d29e925eeba4ce02411e26e41e44c5159dcc55285703c3e73f1c4345cbc89594550786f8c03db91c5e88a7231151e5e2b121a64caeb6802df757731c1a6427aaac3175e0eb1429e9a2bd060b4dc60bdc7e8bf5b27f3c055b3931030e547d83a2a0c567feb453a5d1d5664b8319ccc06bcbb34c4212bddad7ce52fd05c33a32e2f96b653a621fb63cbe2a7c72bc8b8af76241b2e4ae60880b7e6368e8adc4bbd47fca757c3fa3e29226b2a3c27f2af4e809dc30809d4d965d100c4d9f5b42a6dff98ba2ac9104b43bd5a6c75aaad283a6892cccfe25ad8c374ef4b31115dd7c6a3155f1b2a16db19f93adf12285aac199aada90468fa8f300fec4a22823bdc3dfedd16c76b7046326286f280257db3529338e844023655220e92323cbcc0906a5f6a71ae11bf151395b9574e26a8c67bfeeefafd5280d31ffd7ba3ce259eaca24147e03d9145d033ef5c7ddaa04e6e0c1a1a619ebe8c718059031f756128799c40efe3047eb70029fbfac6c426e112799155bca6ba9bc909adb2f5c0d3f09faedaed0a814e951d5c27eed2892f034c4ad12b5cb3eb4132026815c72f028977607ba9c732653290411fd311a83d1774067605c234a51f551114b6141e7155a947afb099a67741f18f2032148fb5b03222ec6f9da79c78aaac3fee6d1db4d79dcae39c024be935c98cf5765bce3d400f2690d34f9b260f9b3a465922bb2191dd60c3c691912f7070c0fc2a47e2485963982fdb486dc626bf41d470e5656c16e0bfacbab824de949fc1a0c8694a4b6eb7de05e228ce11607f6946b015aad8d9302e1b02e6656b14af158fdb5084daf2a49ebf82510a8c4f640729a1440a1c4b5432ab19bcd15973173315cd6e206b779220b93661c19b45f5a209cef0f19b0fb573b979abf72e327080df39428b6170092a8f68cb71c2d6bcd043939cffc978ec57e29d24555dc533a548894e44718e9202aea40ea9979422088399b8834c295155931ec66a6cbde906ee4811da0005955f9372abc78de0bdb1363bc43a87939d036758f2b4df8ef92c3cf01dca9177ab77da5f135a1a5ef870c8045084004a27d7cbf649a32abafc9bb11bc284aa774d01ffb3e5dfd1515abdd58dddde4aaf7a493d513be3e2c45bcbf715c096bf66f284503b83d7278a5cfedb32dcc7cb461cde37f439c57c2daf435b88687f44d9245598308dce914c97ba459dcdcf06a0781d4879c3e66b796f787aee4abcdf405b1c144d5424b33a7386a12931528141247ceb4c8ab5451a04f1b1b1e7cdf33f1f4e70ec8787e1b678da7a5fa800dfaa9a839cd6ceb07d921835bc7dc0210527e9431a989856c143203c3dbb8248564f52b7d9b33076996401cae7ac5464998d31b09dcbf71fb683021267c760a79991d5802e6c20661d226a17bfb814f734f1911d6701245155d886f3950db38d2e24ab73075c4f0d6d3fa9a2c13b92674bd77fcff2e2c08a13d6375621e90b87687a4d17012dfcdb2e3e590288a15d1362a1666eedbb2c2874ee8bc0ab03c924fd0522d2883bba6dc480f0ad7283c5a9fe01dd60a424f7bafd940cb9acc88cc44047d53c29101823c4a9f90a1b4d7c89926b5d5bb2aa93c0125922a783b1c703c6d4ccca404596aba33beaaeef88d240b4306ea695a680c657c07620ec49f852151e81f38a46a653e4993e126ba0775dc80379d7c9b35f4c324c7fac331ba14daf978d4e439dd7bb0d647bcb1c3ecc3f62571765cb5b8fb0366f97afe4914244fad2574128a59b4f82001c4f7dbe517407adbfe727098290d8ac56a29d356bd68b5178629608719fe70ea7f61c99a78a2c69ebc24947d86c9d85453ab9827e70d58759291830fb1ab0d2a775557b2ee0453e138dbe8111b1f98cebdec6030ab26df6720b1bb9885e541e8343c4bd6814e67cdfb0035f9eff8115b2e54f218109b9217b9f3d0ca9b95524c3c7f6ead3a684b8a8cf943e00a3a8c21304b18881f54b9aae4be894ffda4897f198488e0203b473f7330da6c75cf514b4a399828df399c4b2a7bafccb3f82ea953b561163bada214390bc245379da8ff05863b9f5833832012900aecc37b89f17079c0f894a7a63265f4c214588ed965e79ac9969228b551246662543713e180fa376f2d321299c17f52a481e1892ba77add0ab496027b07e8657faf16aa807e7959345e1ed4c4e8108d2e33d975e8ea46b8c6a26ba71d6ae7f529a36927ac127346d8335ed76fd09f0d29d3483c5659d291c4071901e3a1a87f27d83772ae6472662353fc01e2a1b4395c0837c5bd19a6d1cd8ca9f614d5b36942f88873ce9dfd21dc67ff3c6482d77b917bacf867554ae1a9d92270fa2d911d42a8651253e59ddfcd16706f3e9b913a8ed4b2bd9b33472720958c56dbd2c901ef92d4378763d808bc095682b91569df1cba4efca0db230df968ef9000ebe37f105ee0cab040390472e8b95c1b18e8d003d58a9dbf7669fafefc5405b1a168fe6fb48eb317a3453bb75aa2e7accb94760bce6d88402c9e56f5f6c29f361cdfe6d23ae8da04b586165207170ab657f839fc4dffa66b244c88a7014245d683d09e029bf527be9e83fb0d9823ad7fe499829df949dd8787fafadcc3dbdfdafec390c77dbd838f85c453aeb5cbb8509901b7b77b5216de7c31135ce495568ab74123e88949d4bd92d287fe051914719eb742127a233ab62c783bee0d78902ed3d1bf2f66a00491ef34fdc53114a72a1c4389769fc22f58bf57da5ce68d760e7dfccc62bccaf953c1721fcbe0c45ac33b2ef6ab9239df0c5c56586c16dbf072db49b24a35d09d4b331554d7bb32168322feef78fa90301a2bfe1ee7466ae7a11540daaf77b9d6c16aa403b36a65c1b4fa3edea780cd0cc955d692941d4341e45469aa592a8d8efc91a796259465449cea732afecbfa5a6202671d3d446de883c04d8b0ff755ac45cea674f6e13b88831b273b46841e022d593728a862f0c2c68073e69b861818e4492a05eefbee74b3b4e179465242eb7283d0199e20d5b9f4bd6321c37edeba212cbab1d48786ef73de2a4cc8de6dff79a8ba59e72623b4579ea6a65087af7a439cdfe072300ce30ac1891c92cfa72589ee7b514b1be29a354cc3db094b944094c320fa8e9b8737c18486516ecef845ec809d6892a71b55d7ee422ab86f94f45ac90567f173ffd3e050a95322836948e884a8058373d5cc85adacfa239eb87eded6168f635e7d9faf4c7b8a76950114c6232292e82718e787b188b2137e07c66810dcdbab04078375a1835f34adc992ce849576876bec8e24215ebc50b789b440a2deb1930fa8677c7649382272c7aa47d0881928e55aa9a525b77fa2f24631adb2a47ae12465330af4567e0a8d05457b2e84e39540692052e71963d1d74723f869b79f5eed48cf6842319ab2a58b49b0c7103c952222db738c0fd0a40d93746aee9e86d2125823de8a62f2e2635fa02fc2b48cef348bc3503f1e2ee53d320a496ae199053b9d17b3f172f0646f8b304048f83b6c1dafbe3126d0e55a0e2dcfdd04093fbe0f209431a1e8fbff7017e32a8165b1d48593b55d69ac5dcc298ba970e59ddfc736e8809ec24c7a7a0e099f37948256ef1641911d313aff02355482483425e3e659fdc5437b27d79ef26b4eadaad7938476c038b9a60331c6db9041ae1a2ab2e420684968f5007933c444d7d5eaedce5d4d189479ef8e5cdec348ceeabf33b4883230f655585fc8012b9d22f77d4b704044528ca43563e913948411444ac8519c385db251cbcc2ccfd07d175b8a7ae2f6027407849f0b3e2df64af204e371f1e6d9f867a576d00d665bec9e483a008b473089ef5f560dc5f493a45971b4b7fc30be08fc9a82f2d38f73f39f08b567d2fa76962b7e81f1e53010992ed4e221da408e95597617bbe610c09802e1223621d97ba5a329494005a8183159759838f3def2a866815cb2afb1ece5af1ca9f6dfaae8bd3fa8d6818f255175c29cfc82b0d492470b057a5f943c9ce28e00742e733664e7e7424f3cea6f636c5191368977e9157d3048994afe777a9688d7a8664745982a8340dcfa7e4ef71fef9b6fd5b1e4244fbd93dffc562c2e0983e77027c29f2c8efbeaa741b38ab5948204cfecc78e66c79a2e77fc02216043687af2f74c0bc71b3788d59cf1ea44d5f3127d581faf84ecaf6187d26c1fb74d20d656614d5211da1f629190a0374dea2b0ea2a1230f25c6e4743807faeddb2e9243c5ea2d3cb4d29cc001a7283977d91140654d3a75f25e22aeb122165575eea50b671c5591550b94e94d68f1b86bac8cefefe6cbaa92bb4f591bab271d2d964375637e2b199f8ef1269e5b637cd06b866467f44077aee555bb9d2a950eaa2c53c8e198189c376299bf1c09e74c4f1ce6e8f6fd00a2eee51a1c6028c7f095bbbc4d0bf385e1c88f76fceef9e3f290c994c1c48b73f3f9c288c68b2d278b9548684c0716d8b1f81e6e243db3c1343a797737f82501347884860047bf1ca653dd3e0cfd897bd46f166b8130c0e7dbf5357994bb54122b1234fb11bc680e0b768126d716d5d412d67f5459f0a7bfaf6b04811e349e0ea170d9d14211af6580a73d08f379814d33d56211f5a4f0af7741ee781f8c8e5d5f3a7befdb6f1c8ace8e18cca950154cfe13c6899d752421fd22fb44ddeaa9672a17223d24fd38e3bdd21a5b41c01a3b3c39b3a6998bca7c07b434cea1777995cdafd7a364e48ad9141c4b9b03f31781b5ee314f300d6a285e9fa0feb25a854d0eaba109e54b9bd59d13b4753711948631db496cab238d8dca8c47bd5abc55f8b7b38957ed5bf13d1e605cd1244119b278a802e652f7ba13122332f1dfc572ff8e6e9675c53b167a60aa4b9813ac2f6d51fc65a36dae7922000b68838a9c63c85c85d04bb51592f52b9a8ab04c7a5d1f867f788c447352225aedf15ca36ab0bde89f3fc2040eeb1546d8200317d22c30ddda45891f6cce7be970d6627256e245fc65ecc0fc50ab417b0b1578bcdc23081fb5d48345c17495753d1e7f3e8980c75e7fde2ee30359e390db72f682c2ca0f14b72b60ff9bccd8c6fbd19a512b12add7941df5024e7e624ef23e67b3a9a9ae8389540a95225fada353f89bf163205e2f4cb2fba15aa1267df581b295bb494b35d357674f7db47ad5ed9a69675933422e51a42a084f4a97e58f43bf71203150f33c3a6174d554a82570bfeefb36d2c19c48fb697e54021d4d668d768e00e923836c07df4e51c5a058856f11f422864340dcc09f4c914f207f2266bf3682fa2ead0cc6c8231a91c939d3b3ba9c44d630e3b3fab6bb2fbc08416cd782afceebd73bc47d063c573f8a8f0392d139c54af04d75b1951156ce3d5cece7a7420d4488f33b3680e131584d21bc153f14cc6aeb46cbed24962d0f2798499e1637678ea89f1af81e5ad06379b8a743ea7582bf8a965db74b94dd062ebc2b04b7d6034f9f0508ccc8ee5be8761c6b24bba30fd03304d216f2518d3bbb923c2272660a12d4eeaeb866e6fa70ab15b1c09ae89a254f5ad2130116663734e021ff3031a35cb121b3c7e08ad782826b2120708a4b47475e07b5602b9081036f85a3d77df7b79d68c1fe1e2217a662e5624b23d24bbd81d91604f8d832a18e070e1751932eaa00897d6709f6e564b34d1d499d08c20f6792aa08af6575203f6f646284bb6fbe434d9109874e6745de69f923c474d8c6605369ca6e1980857d71308c5a3de279cc7ca5ec8171 +MD = 3a8838e486476a517a6a3f4bf10a0144296e631bcb1347f812f35f46f796977984dc7c1936c254f9ecd9469078a72ee5 + +Len = 54880 +Msg = c775c7f17f600e3f6f4873019bb0b6056af515a0aa3b7046d4a7ab5991cf543f7e6e85b72c5d0c6d6cbecaccc97a591355eff2aba9e28db827bb49ee82f10fa581c37230ff29da6b370ae2943eaffe5cd178613d51cd1e0d0c588dd4be71f0db58da5605ffadc062589283020335ed0765f82bfeabe56a700be63db34d383f068b1df9de35d1067a57c074bd1ff66e3d9ad71898be10bb07adcd2235382d4451a2f22361a77ef3dabdfb7f6e9ad9c926f67df0b0923757fa79750400863746e226c39b395f9ad0ab12aa6abd7dc545e903527bf130438772f847abbc3f408fe19ff72a0c650ee514dc37fe51cfa42baf49bf81009f1a9397b0a9de126c2f657793f69883bfc37a3ea50903d3985dc39f4f2ac988e7a6c3902b0467a914ec11cc8c28ad4577a0d751f48841eae0d855e29dfc1c2f11cd5f86f1c10c2b3f5eda0711f530fb958c4474521c803fb0fd299fbb9e429d2479aea08846963df56f0a50abc5eb4c1f7108cf462d877a0fb487ff3276037b2891f9077afdcc893f06e8d1e000a4e11f366c8b58231f4206e5b62a88ee277126fd88e24f4c78b7240bbbaf3b0e24619cc3b8d01066103f9c78ff47486d752624a5a35a8d9d606fad67cc15415733759f0034c5f75e221ad955aa7ef75ab6432d719297be574d58e10063297c4498c52fd5279394741c7bc564fff91f1fb26f46499cc069e2081ac8bfc713733b1df8542adb616f0ec809698e45dd4723315379150bfd17a6565e6a8c42fcaea588b616e796581196ec6dccb9c655f8cefb97cdbd25784f0b02ccd0501a0cb6eba2a97ef4a1a00172514ff6cec886b988d7e24b2933569979d20b01f1986a1273337793394460c70cbf55f0b6949b12b98fdcf9417cc27d5890c40559043f4aa703c85e9ec6c1eccafe2ac15772ba8bc9e92ee1ee4ae28410029ee56ea6b2e7eed945e50c71eaf716d574719ba90cad21ae800b16e3de3509f142a81ac5ec70af7f9532698b0370570ddc096983b8ff27a6797da290df19ab24575644ab146d54bb614d9f5d36e0f46e0990a846e60a4498c2417b990db65f6586f8d49e53664456513c942fa9ce57c0a40e423bc054e04d035f87468f978b7a7794b1e7d1e4e7180c09324984c2e7cb548c1eaa6b67648ee3ddb0df8e41992cd135c5ceb56ea5c83bbc5ff2f0440c57c21024db12cb36210ac5ddab313eef433ce0f79a288de630855b057315dd2e2b95a53c15db06c0ce211ff6f3a114f787629f2f9551c8121693f00b141a14b51076504ea2eea2695fd0f1e2ff054e17c0e879550559a791430c82591d27720ace0d1b42c87427989abe458b178671b9b57977523367b2cb7f991ad7d6667e932d010d00d0951bb7499422d8834c07442fbb9f0c67a4722991e2bf6d87fdc0b9f5fb2e710278082d32f991b18a7e9820f656fb6ce9376e11438e79037714c0e4eda2877ba54675621e9698fe7644aab4d2f3935a00492eec5b465081efd4077dde9f1f070326ebbed41342a78dc7c76a8b3a6dbff5023b23a2b14dcf37641cea9099fffe6241f1a91e179495182f76a9e8d2938110891c1ce07877d597ed8795cb392d460bbf0f8bc24a98ae5ea440dab2640d8a99075941dd42d77c5797d1e45727b3c946c7cdcc895555dba94dab63b197e1c0d8a37bf960b873aabe898141fb0a996d5a81b4d43be0d3053f5241adad14190d158609ab3382554815ec1f13808ae51c91164b0ba0921b1269dc8a206e82bd5897d78bc11c47853fa4e733c2af50a1bd31ae1ada7f1434ec6f130d24bb8ad389a7bf8aa2e4af0975b3a346b64e04d4388370aaa7a20d2679991e52225ed465878d668db65364ebd48a48df56254e8775cf8582dbcf26faa32f25e1801d077a3c91f31c65300b334371fd870cfed4c15b5d152bdfcf07b750785243a8c1cb1b8ffb8fbf17454fe7a9afeac5409f418ad474472b1a6a57656abdcbff0012ca4f681261ff3458d511f08d382158d13beac85d430cf367bf0dd846b89df2d7a91eaf1f9263243248b8ff530f23bd5c6aea1d613255d490e6b5825b42a5e5da13904c6a49744f9b4ee5be499654d7087891bcc63c8f24ab7568504491a041e1aeae283bafb81e5a8f9f15b6f63b0e9d0ae88dd488414a81132b2a48cc166db5227f29daecb9f739b5eeece45661cbe2cbf578d53ff3b0da6908f8b11b8dd31e180b388e27ff43fe65da2b19df4c74a060c2660f882ebd7e1e06a2c5a78fdae3385b3ea188106b72496cba9eb986739f74573dcb8c78d934db2d10cd98a3eace297621593876d55d09ab81bb0b972ea7adbae751725c6cc548862b1016526ba59464cbff5fb9eb874da069b7fd050f80b3f54ae9635fdefa0c18d9d84822c531202e22da245f14b7bc5158dcb95a7cf12f1050db870b9899d0ec036b569d613a76db1034b0f2b7b7fec83770641ddfc4c911e06e05e7006a3b089212694ba5883d737c532bfa3e4dbc0defbc29d79fbf2802e1ec067b7f37f6766c15a9b3fae21eff4d80bcfd10429e2666082e0f24abf5ea3d9bb1507ec6a83e7bbc3d5dc911c1866d038b85955d4b1d869c9b4dd64fd7d2dbc42fed63e0fa66a54f4dd178decd10c324c11935686cfa36bf991a1d7577c1a3aea7da974d94f8d4150398710eeba6372b86425829a8c35dba50fc61e37cbf7da342a083d51dfbef5785391a6cc24eb15f0186666aa882e5d5e77d0a628fd551e928c68e403e78de5dfb3cddbffb12190a5b70c7f1133eb558862580ba580907c980d41f559e76896f8e2a21ce3dfa5772bb85e3869200b58b577b2bb37e65878b7253a0dde6fdd8d565894d62310d54df4a4f23f3cdcfcdb67f077415aaf1b97728ca78a1bd16b3d6aae4cb437e53f69b3055edff6bb3e5202951c1a783b486d5c7c10f66ccc702bc82c00239cdd426ed941faa7115b4e5127be27b32b2b6d4ec7ac0cdf7ba1aadcd17a75a0cc699cd1c9e36c31272dbb5d49d410b7edeff8d0567501a1b30179c5291203b8310a9d17178219eaa2b2f3eaeb8f6d753b0989768b6f85e99d6c5b79218b40d68540c1c344768a501e7b866e8f48a4979d088dc5d9041013a532ce7d7d2e9388139cb94ad36943fde4f7f16c97884c8b7e5d7422c1db26bc650541267ea4a249768ed23236a2cd30a0a8b379a6d6cbbd7978db31c84d304057446218b865c3a71887ab0e00eb8cb4ec1e5afa4facb8c9f90b31676ee2c35be6809fd8bcfa9e0d9427b222a48c08e701c93682c4827a2d875515283824664bbd3a58cafecb87f953ef7634a40cd8438c29f487d7f0b654af16d518869a8fbc25e23b83f0511806e23f65a88206615705c1039dec6fc3dbcaa11fad0cada609cb18a6882443d492c9a80ef2b0d14a9de91ef2296458492f7484435a2ce65fd1173e284c1cfc344974a9e0a7d315ea84c0a43eaee252accc4740fea459cd038e84c33f344ce2bd876dc5793c4b4cc7a806f147b2e8e7653e9d67801025ea37bebe6869f536afe6c93f7b47249bee68742676bbc9ea7f1902e158a632139672de0e6e26f36cac26ab444bb90547535385c9a4f95859922e95dd94af6ea57a3b590f7504b34180239a26a76d32c0440f394b1c8ee2d8b92c73cccc2a3a4e0df7dc3bfd71b977943412512ed241b918f21b454deafdca6c7939594f95399fca3ec40e67fc7a5170fea04e4276c6745ab2b822a9ac1db124bb32ed9f7ec0fd1786ad1155038a71aed9c09872c9159471b77c7dc030a72f6a691cf44c5574f8ae55f3cf45354e4aa66bffaa4047d39c0676f4a112173e87a5e93427c6a7da14d73334a2a8f04a6ed01bba0e2b8164fd7187ad572fde487c8fd234e2aee454c42a84fc3600c31330e46f8c3ea4e46e2b5b5ff2ea79e4695050ba8baf65a969a930f196f3dd3c1d533bddf2b63d1f33c81c6681e570d7f5b5c0e8a4f87b55ad1652dfa166aeb9ed185efd69ff64607a364d41c6d2a507921f39030d58607783ae38c5b7f8e5cae722b6346e94bb76960866683e3ca711a2ff21804149a58d81d32b3a273522fdbff4da198cf092b01bb0e040548dc774ccc822f6dd36cb162c27d2a39ba5e6b0bbf1532321ad9abb7fb24360a630b6bf641cb5bd3dca419fe70ea7a861c591828fba99d7e92623e736af285fafdfc5400d7f4279ef5e9999471a12af361eb3f19fc316ae2fe4dec1d4e9d783dde5a3a51d3251837e7e3380c0bcbc2e650bde7c607d622c82741bd9df050983bcecb26d38088b804793bfe4e8790cac9b277181767bf4c97d6e7badb98316b5d95f71e6d25428e6e7599f3422d17cb034fc1daf4621670b7d1e7eac08e687b09fa882d07097e22dea1a420d144894dfcef41364542001690e0e85632191e50a8c723588a7562fdbac7058ce1160dd61c5aa233f24da7c78acd92041a827b70a3c272a9dcb116a66bad643f5be9ccf0cb578adae3cc330a0d5f8efe6112a66560b41d27e605c3a55a1c67422806ee2271b0a2320106cc68815d844ced0ec8b74964ccda90b99183eedbb99c2eb59af4762b9143324598684e901bf4a8c108ecc59c26cbc314a7c78eb40055573df8ef4291ff155fcfc292dcc0fc0079728f8e3b22d301655f2ef9a46de5768ae8319a3da996b171ee706e93b4cf774768842515bf7c845fe34da297cf0f06affc6d7ed03dfb1e4ee7cb85dc363b62fcec1037ba3bc95d9ae52d49cfa2270dadc2d3216113d964e005fa5e1d0ce8c87f465b4e925e6193fdb0f576b4aed4946e828c0d5af5d68c0d8f2581bfff7fb1b8be8cf105f0ed2e6f8bceb1aebabfa1d984bfca21a99a9cbfcc76772bd7a8268f9ccca97bb81437dabde08325908f3fd60f95de20f7ce9fdd0513c7c85c0a2dec2742fc5c7f7fb5258f527381f6ed734d6c36d3bda91a9a4f8324f9fd564ed1b7a81774100dd5b038494d0a2ab5814726e4c93162852597fd8bd296348c1b17d8677299ff2abf31fb33f8ce8895f2c249bd777e7655989dcf684425d4c71a0937ac7cf2929ee53e56947c49035de9ec9f3f674461df1ab5ad60a42e45cff3aebdbf5c072f30eee231b6000304d70dce0eb4c20a8aec54e67fbd1739ee6c4d0e50e73b6040aa832274dfad83f1c9076f7f62af595b43ee382dc5c7cf3966d032d96e41862bd24b080758ab5134fc7ed8db9257b83bae8fb39fc1dc778d842521419a95005a71ef9bd26921f533381b0f088de1af92f3df60bdf87eba528ff4e36eb46056334e16e3bd5937f75844861ef09876c6c9db884670b4d31ff150e4814a03c911203369e9b17217e00aea660c79fe3e86462e2f6d9e3b062ed08c9e02bcd1f9b887e68fb494fae638b0f063e28d05607672b47fde30d73d6f580eca6eab6418d3d230314c503acf85b41f26a713f7051fb5341da00fcda06bf19d0fce01064dea68d9f7bacb7af8517d3f5763f31a54077878b4bb216859a904001529a5fcc086b1a98805ef02892373189e1f15b776b82146ea3850ef8db1f70085877f919a2e15688d35a219ab84fe71a1e2611592ba1a67671e83a9670c346507f0770c036bfcddad53ce0885fb86140bb4bf7ed193c9a3d475a2df0c4121f7426d75b422c4ced191665a18411073c7829d17385bcd98c1d94694daa7d8287ddf0561d320c1f30ce1762e8e044b2d53aea6518c57efee8b1d9843df5e5ab0c185c123af24ead456448c32b5f9351c8039d655c2ed8232c749739639594e2089dda7a39057c8d77762ae4ed44555a915c8360b22470dce3e04df752ec13ce29e8fc2cac0e1e26536e4e76a3213333adc06cc5bf48a1829b8f7e5c808beac5dc842177e86e9c0e75c723c6e188958399b98a22e7fe12cabfdca8c770d7727f9ce9eb0a82997ebc3b1b3b742cecf4b0c1b29c06a0c72d0bcd424dd6b8615341e7a4d9431f214ea63fd505fce9c0e941d245f2cf9e3658cc406adde8ababf5c3492f4cbff2988452d08f03cfbca6ebcd27ee2f0c14ce3e82b5c0e99bdf39e26a3df3e5efc161b858b9a3c57af9f164a95f05b14ac8f146d599bef16ed77da1ad429d0540e00f331e47adcb7d3642fc6cd43729ea1f31fa2b78ef75c00909ac02d3855b51f313bd19f7177645062e0b9e13fce9887c12c0fabfccf73e08306a117d3738916ef19ee2647b5670cde52aa3bac18094842653d9eac1f63739b4844fbc4d2d9db83b50fe0c440c7f123ac214252f7facbbbf0b3f9678e34a31f85313fd11bac563538bc35afbd8ce67817a65ef91472f877f5f922f5c4ef5656e8f14dc3f60b6f4cca7d8dd2d7bfd224bbc2f7681679b7bd9d98831e6a9c7689960b8b610afd0e1292db50f334679f70bffc7568a617f0d40f1782aa2841ea01ba076375008a1bcdb95de6db7c8c34a44cdd41c16c558b0574fe8960a5e89a037a6e3cc57fba7ec6668cb8525836790889ecc13b0f3a7098f4d6ff098a986edafec77d1b30961f45c2ee2c20706e56e39fb15e9d38cf88d5b6264c6d7e5a4ecd6f9a903dbb25e691f50dab0c6b3bb37fb5b480b18e1bb903e376d7542a352223f570dcf3c770bcf426719edff1a67822f47e903dba26ec6ca24f0a863531d225b7cfc907fc7d87b47ea06b61acb68d158496f40a63f80a561c374cca4856461bde42bf3f0456311a24247c5a4173daa08c8416e0329af90a79b806ea0bad674d914e26658403a06e408537925be5480a34d15d87cf13a3d0e05a9eac253d1b02f97d663f278abef8fc4906d1a015bd9da60430c6e16beeef79a47dd93f0e4b833e56e79692f571ff7efa50deb80a229f07a5f96610aac4b16d1e0b390029e01987611231704ca3cdee1f7c824ccc6059823c1f3006d90c5ce450b0931195c00afc274dda67953ba87541f48504645d133c520ae96800ae3905c3d5b0195ad59ec72f01571fda21d93be71faf87d90315606e215ce1259190f9fee059c181051f0d01977142223da8679965c77e3339a61419ce5017529fa9e8893b54b1113ad3f92675f07576775c21e02e97907be60f80da798cb28ebfcbf9ed4c6990125b04b025059c62ddb73f9342e2e566b8f499ce3988d95be2d94054b17d62078d50f85d86ae3db15fe597e249e97aa7f24a8923be64ffba54d64e225d3506bd8801f726d2d79a0a04e9ad397dac1efc31d02aaaf275c676ef9c3e8b7adb1c5b0e564b3390ea7c13d5abc9be6591980d7e6ec3885c23f637b81458b68fd96d8824373bad484eab77d91333998901b281e00c9be885d756a7b926e3cc2496c1edd48c0ebc836befdc180a32f3716532016092fbf0f3f7af6cf9bb29f4c17adf31253d0d87c7a910eb9b760ff4a623e13405e82bc830edc92e80b97057efed91fd203280379f70d54b694113c3afa587c3d7f77399c41f6c96570a011c35579df9cb53aff3902807a48a5183891451ec55dea51b8b35f7604b8594246c1c20cccc3089e1e424396ea00790aa6d5e91d79323db6ac50ddb6cf61241206f2bb0e61f57ba5f32e20bd2e5e7e4cf9814cc1224ad82a970d3355a3f07f73f4cea70b39946cf72045206fb1b32373931be6963b2848021b3106cf0cd6ba0c72ce1c6fbe307b16082fd93b1ebf1703161e4d293e2b1bf17b74be8f74946230136991b85a4a24671d66a18bbfd2b77ff500f6e6a5e3b25d6a30c11365aa068359399d81a851d78ef2521ffe2f8e834eb25c6a5afce2a9ca5a0dc4f77a98257ab6a6963822e822e209aabaeee84308f3d0992df2cd9870bcbd6410a80def3d8aae492268546d9504e5a8f8fa74a0c703c23fa84a7285959916cc5aa1aa0fcd37b299b87ea7628c5bf905508d4f283bf319c86fce963a8703f8bf0970d97a43067600cf07b657977bb6286833f249e64649bbeb0ba317c371d5a4939216cf3d7b4b26ec8febbd34d8cf8a967ae8764471d492b06e13ade96720258f91ec7f1b0aa4647773c223f2f797b461ceac3dd50a4cd54672827d57588aaa53dcb4fa7a493452265fd40c305c913e60abb8111684050c13c55a06abca57bb96ef1ad1c99b5d684fa09bd6ab7c5e71099e86909753bfafbeb314ca453129d1bf5588958785a22f79e2742392eb5204c313b22cc60dbf289de84d48b2317375338c889642ac85002b921773a50e1e5223a7a5562126961f37b16df2712fb71eaa10958479647892eb3bd037406905f1b1c6ea9d4722c6ec22cae16810908746797e29c09a321f501f4c48fef390bb6be3fdfc729676e427d581621a0f1846852811dfeb33b9cbb05e4fdc2b4cf9b11930b955669db7504ac6614a78cb0b87534c980254c450204c2eb3245cab2869823e957ff9cb58bddd8c071504e30ecc193d6d4badca899f7bf7229bf39c81475f53fee6acbddf6f588cdf4c6ed576877fa10e0646c4eaabd84dfabd90afb8fcd9276233efe3afe7344f567ae710f73bdeedf6ecc021e7c7d999c803b44313dcb80f7bc233bb6ed8094a090b3e33f56bbf9ab4499a9005960870f708cef546894492981c38c3809430136397b4acf5a9ba2dc2b7466dc878ed5a24374144b565374733cc3f8a99ce5121f28aeaea6c48271daeb05439a4f2e0bbcc09db9fe4f2e8a3fb3ce87efec8d50c426f517aedf9aef0e4cf34723f968b1c4b1ace9559d4d12f4af8a42f34264418bfaf88ecef20ba3de16e77a5dcd665024dc4ca93887d994f9f89f309de5926fdd6e5e1aee44fd16b31088e531134d6f430923038f54fa99b856b65ad61f3e622348cfc4f61e97cef6047f8f871248978902d9fe424dd7a8989177c6843690a0c351f593cfc801550db8738148137c4f5e8e17a239ba99490170897e9073b1b32751758f5f8a643362f40dc15a5e141f2a7485f85de367045bbd958ae31ec923b510fac08face8ee5b82f559a73b368f557dca07940f6a620f3e42f0647fff76d7552a2f4875b4106229d25016f20b2847718ed8c787caea83bc39bafadd7c36f4e9ade3702ff121deb04caf8ecaba7169187b71df94ae2520fe21f08f8268ea73952ce4f020c6a737e00c7df90c6bf3213937dcc27c3e994ecea3980ab4ea1bbe1f4f3bb1905c2cd481bac23e014834d89e6a215a87a4d076f267bc52bc2a503c4fbdef9ac9da371f5bfe8745ee76bef70dbd468dff0552fe33146351e2511155ef1f08921269517f357ed3f61e2019e44fd755452a8ca550595296ee6d87e771c51c8f83b231005cd8e5ae39d86ccb092c625569525e53d22ccb5c11a7f358f89b5d8b54f259cf1f0dd920f663825ecd6b034fe1bda6e4ee7424bda2d6beee52378904ed1a0a432e9a023215088b5a97d6644a95b38ade0bf808c18a430f31e861490236726be6f2470aeb7e0faf45d1332d4e6d7e32cb90811d71af360fa820e3458e1741a53fd3de965419c015a9e24b06645165c732e7d70bd4faf6e6db638424af78d1dfd63a255173cf62e60d32e6959229af719c77c27bf253cdbb521a0b8f6e416842348de6e052863f49fa29cc85e2dda55790a80a15d4a301b696ab412dd15a4ff6e035e7eef9279d67f72fc47c5c558fa296e2768081d0db012e80eea7e3abce22629bf1216e9bc5688cac97220779b579368dcf6501c4a3c1a2ffdaa4a91c2cee4326cb21bbc8ff7341080d21eb325e05f911dd6b5d65a1217b92cccd2d96b3830a3d3f97e89893b09fabee1e1066d36e66d7683b9c9d1d4740a08dca76ffa9093f4a132b +MD = 7dedb138a250a3ff4325116aba68c7b45f21b6f83e1f381ad1df4e5b4606e5ad365728f3cc83a2badc8cd25bd45a4289 + +Len = 55672 +Msg = b7bd0f9a64f3f398ae90ee77e2ba58bcc82ecf1f838f3785b8fd002ef2eaa730452980243248b21fcb2083e417aad657b815f135cb158403107de7444b10a4efea943520e7290f0ef0d9df3dc67013f5e38e9cf25ffaf25d143959fb016064a5ec26b7f84b3d104d65e389ebb5b4177c8fc257be06e78a7b0c5addbbdb81ef3894068d12262dc0c472650957ad1debd605d8aa01878453454007fceca21c4d922a5d3fd840a0245c5f87e8e8755396e98df91d23ab7855a4f7693df61ed88799f65256b0613f46fb7373ad05d7ff209f6e4d398c3a6c987e7ba82842175ea3373f0e590450b22d8af74ee01899c992def2fb85a5fc0725bd12eb45365555ac534fb9d03bd6a0e1f2334309888458f3905f2c8ad4b8f20347055a1d3b9f66a7d46c7a43bdbbb26b196f77b1bd60554b9cfe07ce8238d43a069c1f37babf399ea4df793bf2c78fd2e9f3155f1ff567a2ea17b5db184256d3e01e5f1b197b7598aaf0df4042c1df1e4906439c160a370162f25d39fc9f20d5bfd54552c29cc29ecee6d4d815734c5720f229ef0a696c6fecd6286e9817d9488a07f6631beacab7f80b7f8dd3a37c8658fdf1e063d8aff5700d3e045371293429fd9dd68e2c32eb10a509e6e41a17b3d870c0f78920a89ad6ddc6839477baa283ff6034812ca542fefd996bb0a0c6e48893c1bde409fe66068fe871c5ef3199825467045eb0c9c5aa5b58a5a0fd312350ad19b9dc5a5a61e86ace584da239220d46dbce8c81467bfd066e1b1af8ff771808f374dadd639465b89dbf945878440c1be41b7367c56ddd480255875ad8e9c8ea75744458c20663bf802f02d89607681ca9717b29eea133673cdc50eb667f489cc74384941ebfcbc99d2fffec3c730791535b0c916821e8ac4537db734e4380661269005920c8861c1c47f35a1291d2c2095e8e65dcf5e25f45ee92ba3b3d598f7e6c226e70287b0026ff46ebbf68b1f6f404696ef1230bc8638adc87d374b96132d6519db5e791bfe3e06067ec008d773cd4057450b54a2fc89220a4bef08a22572ef4ac970eb2a07a71a99640624c8b0856cb3fa0b286db9c8ec8d7a5b9b21b14fd7564c0a4c5ea133a8a406495d87b801321968a23a91506073be930d81b9492ca3b8dd5b1b1e6d8c4692cffa1178fce927042b60f9a252e84e1a20654abd4f81daeef813e60dcef96af23ba8ff30e175b210ccb7e41533d8d22c9d0354c256f7e36516a51b9138039c5ed3d66534286f79ab9727986e75baa66283583e5cd1f763b7d38f5a4d5b43311522f2e1e7140ed451452065128af641585de475d152f8c2539942f0968b20efd1a38f03ee470c589e414308a5f624297a972899e45c8495c4e2609d015a351f00c01b39ae33c08cdf05ffc19d49bcd545c9a4f8fa511344884958ae224af8552f1327f1ab5cc3d7b01dc74e6cf838bb565fea3187d33d552a289ba25ddfd318a91735ca6a449ecfadf329fda984206208e458c211455b4e072aca28288b6dd02b46a5326f6db9eb2520a85db76ffc6fe9d181392b3a05a5cbaa349e16c01122122c26b82f4a9d90b220c2fd2b3e351b85b1e3e53a23c4e2c4319b82bd207564fa221ada2e6dc286d16dfa4a8951531b49000174d295018bad5b4f54602f034f4fe301f6f149b1040f82cec4365bdee5c0465a6669004416c381c0a1c44e33178fc96cbcfc50f1bec8e9a108d6a050e177ef6f2871e8150ac33fafe94e008d74465fbb9ab4360d0d9a1d2176dee131b4cc85b03991cefcde18ff6da951d88adbe0009f0ecd4b5b76ff87b09ca370f9d65a83be182d276407214b7a509458b3b4f97667878c13659175d3eef8e8e221ac9e73e952c883c32c98ae667d79e380a5ff0ba5939520d3d3796c3d0a03b741ce04d0d267d866c2b4db92a29e771b8a157d5ae9b16ce5fec396cb1b4e8862c2a12a1509c5f132cb166692cf2210533889d0ce947f67f57ec83a7b1a34eb772cdc7adaeffb979a44e7c6194ca6da4d0489b5d1465c3ab1ac77f0f6aa6ba15708b6737d05872fefe89f76a09b9b394b768b892d7fb649bd304936b85c414e94bef5a085eae74eb5fea404c33c8db1e11705b71d913c197a82c2985a906447b2e7e08e8ff0aa688f1fabdcfbbfecd8a06e9eec4c3b4c2e6c1c6a8237f7232133fc2da9e5b73f01cdc40d7ba49647120bd5ad8513ce74fd2475a780eae13c7f9a64236f41bf13af14845f6d78400af285f4b81e1edb350a16271010edfeee9748c8685b0e78c6c4d5c8f83ec15dc70e91344513b7e20ad9c3992aaebba0d81ce1917309b664d6f7940a8e4c2a3009aac02ceb02996364e0bf545dd6ce677784d747c9d7d413b29bd1d188321d77217b953700671ddfe1b36bd12025a0c34b43ac63d361e205f83601b65c7d1593ccd582fb3bbdcfd7ffd64ba827f7dd34d1fdd36e36245a9bf65ac61191799d066a6d1be1e37329bc1dadf141cbd9de4c9a07dedf588bc8765b8e718bbdd42e5f6896b2739e23b62cd9cedf2682482e6b01e6312fb12496059625a67d480953ff65d6f938c25bef7aa29d77cef1df3820a83d8ce7d67b5dda14d4d77eb6857876d0c2529a0668505606be5dc380eba60e0b6224904efc7a5475f076f88fd5364647dd512fc0e5632f8485e37cc609d27399f89aa171249615382d27834a6507fe298c7752886fa2679aa8cb8317c65801e26571a3f3801b8cb9df4ba75ce157fef45437bad35398aeb78b584f1c8da129633d2c003c9b953b998b65cd6da6b0d936c904c1282da06579a22c694aec386a9ae44c5eb2d37d9245b6087dc331ad1d7f5f70fdfd7a741c4f71ba4a095e9835f7ff3507fcc44f315cd3a621141ea72c2c8c0ed9d9b66e43a79e7469fe515b2c18e288a480fa74993d88c16fc6ca3995dce330dd335e096c107d0d518050dbad6c32a9acd5c2a82a6639dca251d0cedafed9798090fdd0062891c79945f9945a70743a9961c93465657b6a715baee17c00e36b5c79025ca24e814599a5a83f83a40b9df2cb8ab3fac9a1fd553ad11be981a568d96207f9b100a009eb25e927d9958d56316963a13af15207b675c3d8b40f74047fd27b41b2cd8286f64d38d7ccc35df5edc20086a68b001c1da313a25bf8f3c0c850d8df3823ad3f539223d9cd9c11ff707bddceddd5409d03392cf361dc89104b43bcfcb1a194b58b8b16a86cae2dc571ed47f4318e781d0fae9c663628c89561517454afa5bd6bf6ae9dbe2a78260a5a9cfba152152b1e9b89de55697c26a2b2d0ab6192ceabd52d5325a577688f10a3115530bfe7ee141f316f5b7c4527daa867de9e0b8ac483b83f5ad8d41dcd8ae3d0e12ccb952590336bcbd2def230afca7d6a746a48bbe9ffc989d2d0f665db85522c1015ab5605506f70761221f5948187fb8f3fa6e69a9c685f2dfe90ec75101b92651e791405fed2f99fb642db1b762dee490c23c8f7e6b22744ad6bc60a0ca3b0b656acd3f4a72cc3ca2be355c710c5df3c502df794973d9eb17de586ece371036e4ea51a63e1e36b8fe3620a09d9e62ac39c43e6f3064111eed09ca3a02d1a06f777005bd6277d5d5b8d7d4c663a057d8950f41b85bc831d67560fa0c651e5480c603d1cbdf07125b78a63a15ec9ba33f80ecd09ef326a3db57ead02c1fa8923078ab9d1add565311e5ad3ad76017aea9a361d3672007cef53aaf35e157f7c346367051f083ea01c0a8f3bd52e79ae0dea579325c09f21aecc6b80f743591508ba75bd596f94d85306980a9d0a7aea1a53039d5c5d76fef87a40c482de2009fc77473115468074529cf5de897cbda59c8e9aba5eab106b58f7cb3c65486cc1ac144c1ed71f89eab73829160ef79a7700d7ad68812c040d4cdf5b67331487b2843c04b5237d09c1ed52b24fb22d99b4e3d8bc267872ca4b406b81c350c51973013901b26ec19890519721f9f7715405b20c3782b8f1cbbbe056dedf62cc9a89cfa5b3953d9faebca05fe893635521e007dcbffba73b80b5891bb329ddad734d3c0c9abbf469c4cd462786aa7a5bbbba31d4a5ffe7b2a1eeb714af2125ea3c53d2d837b547a26338bf787cada0f75a1aec9e9a1deee977ce06ec3353d0056e2420931b1f8bfc129578ed4b2b7bbab58874750cc41162aab9d50ce03060818144a1b7b53955b95b5a0ed062926f08366985f26e8113908358cdf126555bd10e1bd2c076b1297c95fceddc6380ff7255547db14fe35a05ca214e23862126867d40304800057bb86af4926bce65a18baadfe82c11495934c789c23e70325514472846b8c1b4c0ff32e7a908f3bef9b6af4241bd635195900418e68c84f76c0d045a929d3c3d9db3963c7e3e83fb6c85cb4206ffa66a93ca184517a834eedfd33d4d805fe00e6667fd699e66efb98e7b9745c46d6b12d8257ca4d21bf08734f94a77ac9b5da5bf9ee105962ca767b3fa8bd3f67111d8d74499aea242486ee001b47f83b9f5a20dcae986d20a3b849195216319c54b2b15aa07c904d5bcf4856f23bb82465871d57e6f63fe5a2cae8bddf079aab4779817c83f8a7620ceb679a3e0b244baf6a3bb2beb3357c6fb342737618e35d9179e6211b97972cdfe335132a40a37a240960345f56b9acb17b3d833fd2727adbbbc69390e0c8737abe980bdb619c776c6e7526f167323c102bc33463bcb0cacc450b18095ca3ff88847ac87cf6790b30a163d09b6f08f536cabbd00a5f05140d219bf9ae918e97af3dc2933387a1fe18a8107a86f5a29fc8600c9d5b41da224557607ea809f20597f258b4289d7c18cb8d666cda816a0271f6a0e47fec95ba1ded40ee1f4c380fe9ab247385bf7221f2584cedbe9bc7e5d7925eec9ee8a0a53ded25933ae0c67e4d6e0d186f76ebe0340fa9475acc2111a23f2effdebb61ab4c5ef6b3224f06196a45feea10494f1e3abc67c0d79be14f7b02f8636aef4293f3499b97ff215eaae937dc3290c006a3ab666da15d916d650ae5a461680ca927d9b5fb87f8dc38f7714c9039176378373016a33213342e1bf6ef1b410198002da7aa00ca350afbcaab8d0244ccbb0ea271d3f1ba220f8c3be728434b5c1dae6e043191aadf320fe93f011a9ed74f2eab15a53f83b2a7f08b879905c7a2221bb29950966d1edddc1cd4b1c18e61a7411cc59475d3ea86c0d57b494afcfa30afc10d11f85c1992ca2d12a3dd5b924cb0bb28a97bf3f23366df6e40f8338dced262097c9dbff9d941e2a3e1574e91c5e251e7eb392bf33648720687f8b48284ec5f35986edee53aa9052c7318af879a3ea5a96398c21518d055eb2533c702da657e386d5300063e6a5c585f07c69b542e8117177e027f606452c62290b43559a588bb03356f846cecb0ccaf0bdaf67a18abd811d4315a966e2f3f87f6c2428814446563fa71864d97c8336b0e34bf9466ec95598398cd4255b5fd5b4f3a52ef1b7cdf948c4f3467d46e3399f71d1f2b7f0cf6f5727f01ed81aca9a682648c1720f6d09ed151b74509687443aedb3ec6cbd3a2ef882d1d1e5adcea71778819878d7be18ab3be376ca07f9f701ab643edb209424fafec4a5e480c69c316ee20c7c8d3ba5f19e0db66ff7b5c2925f856289c757d1bce02b034b306cea447deca603bc60225eafdccb990245275b6e7a100f1e0fc5dccb876280390c01cf29f3fd94c1c61e4105e32f0b9422a5cb6cd49fc1912671c9356c5c2a073e734ff7aa6ba659c81a5724b3490e49c8ce60bf079a57dd365610a24c48bf277ecf356b7278ced10076ff80bfa2378fb1e1c9e99578183eb9e33196a9c0a62637762df9eecd64c3e9e4b8ae8ad31dd278b05570f0b1a9421bb9aa86f74c756012f8783761a20e9eeec40102875407ae879a91e9cbef8193e649e9f7c754b3717bd6c2889dcf32eea9956721479dab9069111dc8698a1780b4048e6d9c61d6e6ec819b71d58d582f94e9598f4e28601487a447716c09f1b4df89f66ce91c661cef994197bb6514de2b3066b10d7cdbb77dc4ad9945f7a68cf33ab05a3fbcc7afef8e734eb1fecf86e6fb0d1af81354d5b612ce8489cb8c9589a75ac9f2eb920c86c1af2b4bb30e9652b9cb31b084820bcaff18e79a0e3a5afd504440b5214baf2fe333a20b1a4898f8ed0fa9a938e9c626ea1b2719282639d8b61b32f8e66b245553cf3752ad040b341568c754a8e291547453c769b1e6dea6492e3530b366f891a3c07fc4d3d779beb3653f456d0309ce1e413d1e33e2a5e0aa1babff10c5986f43c5dfd4372940d3576365edfdc17c0e68621ca916a02c0229522ba6770d8038c43ddc033f701d2c6201cfd0c3b4849fb334da8ce2b5dda5777028e95eb54ca89596f8c465524b2483bef17067429ffcaf47fb5c107a3724e4e4181a40435a19486fbaba313677460d096f5f50f24a9fbd09f3793883c51b222c9dcbc44e35155d3696374b931e2b8e6f9df0094a01136d096776b36913f29fc81e70432c7a27347a1fdded0e9c2f885001c4f8c05fd22fb4abd729808045be351e9a556475b97eb8cc00bdff9ddc8b593f60b7fba366759a451cf360a67f2df212cc738cc4668c510f6236ec8fbce7f9ab35cf32984aef28c7aab98003193f8d9f69061bf298fe016e54d05bee4b5eafd9c6972b9ae9fcfeb812e47502ae83762902b5886cdb34187d7b22d435f23ffa4f95b83d27ee1f7a7ae7fca641a99a3a242bea58bfa7df249127a6dbf35c1c5771259afdcba1d72aa49c7a9a2c94e44825372d1347794fa46dfcc4e9a2e36445f2e8c7c3f2bfa49da9a2d6d74ffae23ea0d6e63eb0ea2616485d0573c122a8442971c746499218321e9da9d41836147c3b6dbe317854c2f8d4eb0100ea9478e0a93301fb1cc3928667df6c1701e10b9f397e0d91fa53c6da880910176bb32699d6bf0048f8beb41919fa8616b98637f64f8a6ce6d361a239d649eb3dd0f961de56785ab679fdfd48997180699b901a3fc21544a68008d575442fcadac6e19b3c8ce179c9fd1bcec38ad6f376248932ca55913d378ca3e13b462d67749a0633230eacd60a1e72a8e8529d57d2e0fc02346e90bf3055ed55ea70b529a1e6d1da20401d07ed3a9d3c45852715f65d4318fc71963317782f9411586989d919def0b2c5c487e9fe15c9599716c656f608d780f31441537ff52c2e41cd1080cf780768f435ce96c55700a30ceed17b57b7de70879d528ab9d89ecfd122564f64479ea17fd3445a1ceb52906b11dfe9deca9e299393ff13c2346c448b3bb37b74c8170abd4f91da814d3fc016224a1907db874aab8a9f9525b3054ad46bc0cb7d7410f330ed3f6e8ef738b0a282988f7f453a2243f3cc6560bf0a315124f685dad61cf98f4e95ac9273ddc0a4d543c381a2176ed161fe2aefc2eb966609dd5139588b8c0ce64d0b383d8fae717ce44bdb7cbf7ee857bd5c4f6919f8a78ceda41595ed394e46be10ecdedea8bcfbf28ec93f82d0fd47825ffc1c15c67a209004dbf8d27fc7d271342cb23b5dcbc4f712f755121394a3d5cc62467f8e72676cda090babce1e3c0f1b7462364c428a4a6ed277dda5230f30183e82b7cf14b3ecba2938f9b295c5d00d60594ff2a59e94f8d6f256043cec19d9dd5b4ef6c5b8982bb92b4cbbe3126ca05d21f8cf59844f57916f1bcf56cd0b77cb3ab59429c7e795453d15486aa44d6ad736c150f2ddd1f18e488f54f5248d7884ab7c25a574638d3a08d3f6b0edfac37b122a15f60dd55d2a0931338c85086296281339cd30847a23f909354a71ed50954e939cd796c1f0f14b91f9a15104ac7c2b0b3f05aed2f27f8835828bb2ad88d246be441bfb1063706a3205c82b1aeca33ed4b3e321d77cc950e97d1932b3d2ae94daaa37bd591b23ff91e66575b379a7de0026ea4bfa7f8dcd8573677488d476a3a93dbf6ff49e9876222a0dc356f9f6830e068f8fc4712978aa03faea94f4e70d8a8d27558b442a58632f25868dd41bc86ed1476fbe0848ccb7ad482770ba6c3cff06e43085c26630e5944151b09e94089325b66e5f9b58444eedd39da49b72bc87398a736c9fe87a29c7e59777cfdbde2b6230fe11b0d469d03421cf992e9706b3a39e80b8130dae905886da4bde7fb388156ba18cdf49c7dc2eb73fd6da4595f4c374fae0e26248c9b4a99c9540dc2349cdaafb197d24c8c31c1860d6350af4db27c2447f8462d3266ac240fcad9da7e0e9936d5010f1f735baa9c52fb553adc72eeaf00c5fabc846f97589da6b10abddf7997ac9413ddda458ffff4bd1bc2b5967737ffffa99b2abdf17b9c70ff1b991864195dd7474e68f959f51a310b0f7f25fe066c2dba90cb58a4d633b12ad6bcc0410511531139c67eeec7ece08be8e3286a6270d897640f4996b18bef9a00cbdff8a3ef8eda689cdc38bd9351041789a6a5943387a7dfa097b154cbb5b764717e703b20120ba1911b1e1e370cdf6218a796e3dcc252c8234adb061c88e9c954a39315cb670aad4d448734ff9a829239342599931200e9436bfe10a6f298f61c59487919134154795f5d451482576f93533afd82fd1908a60101ba907a2cb472a577ae32a0165dbd72879a9e4cc4c0cf0fbd56ce0d05eef414cc4c03a90dcbfe9108fd3d96f392c087ed7bc481334f946d96eda2ca2d63d6ad470e2605a3036724e4ae627b3fb92ba5772faea80be28b77ae0a24bbf72ef3d25a48221857245566f109cbd9629ba5d50d008549b4425b34ebf47c68cc19f58eed411e6a8ff5726018559d37c400d71e973471ec9637adac36f5d35915ea81e6e8424381b43f631942dc031ecdb06888fd14991a198829e878535117386a42e43393b8e72fcad39955e42315e572011b27e8265aa5ff76ef97571d299f61dd8fb67ca624665e68e93bb625a4740f4ae0fdf83f35a2623dc97d496017b097fdef5a4535bec3c3ca10da9a3253e250eade688b0d32787a257f1071416ad5d3480d05358c3fadc0a2161cd772ab97fa8a1d4eebb8d98f0fd7183a16e9a975df66f0a095d42f8c1f9804e7b70c33fbd8d1a6995e67b24fe9fa9ce1827f5cf78100a014ad3414c7a653e12580287376b168802f2d424621cf3714effb2c0bc582be2647c5d578c81e7cb5bd7bf0f4714cf6b3faa0721c6b8a36874bca183f46a947892325dfe2f64eba8997f08a3d52722448e0fe1fbc96e39efddd376a7fe2c044d18f1579dbb900b6649b271ed783eb9a46cb9170af0b9f187e8d894b54018d5c0772dccbea79fa184eb167d5486a7fffb5a29f8e7c31894b13430ae2450bda3832b6c3fe979e05874fc1fad61a71f6fc9e4d71a1ab6f68e0c3e70058da686d7f5a42123a6a90e9ab70b3264ad4ff173808b34fd0c52f037e9761b4d49b810eda87fe11a6ecb86e2db86f3459ff7bab5cfbbe804351d823ce95996e7f11bc87f1c2d2076ba47c5cb530dd6c2a224f7a0f7f554e23d7d29077c7787680c3829f6b12a63eb01a457aeadee615e6c5e24cfa9d60ff98df84122235e41300393c1df18062fc9ed77c9175cc7078b4719ce9c45cc8dcc9f2587177e6c68e27fc50ca2a13ee8a5d628769fd0264debdace51916c5732ddf97b5741de2072f1c93286ebfd332301443d0ca2b86ab8d290125a398de4a3a015703e5bd318d3e08862ad157c81735ec03bd7ca7622bce1ff5c450f1b1354a58b9ab8afedc4203125ec0ba9bfb83e30c29b846189ecee8c7122ae8ca461da70c45132b89e90dc663a251f232735f809c3d28f227407b254adfc033caa3e8974483a4920563d5ce22da4442c6389455c6c875467b521acbd0e4ecf89ad2806328fcc6861b4f8464788f0370fc5309aab051060bbddb +MD = 0b7356b6057490b828893565407e4dadd6e45d8e75399499f74ab90bc917d5b48b0b125ea3fc87f45ffa12e05aaa10e4 + +Len = 56464 +Msg = 6513955868a263c0facb87b9283d87fdd02760e4fa437b896b13de28786ba0cb192f9f263e5e75bf664fa7526d3b2073a5fcde752914ec8b6ef1902d1b70c5bd1b9feb6bf0c7be564aaa85f3d8098bb35e69d3e0081708c8fe6ab31e3848b19d94ebe3ee25e527ccce62876610aeb10521f7a7ee3e53b88a4105afc476fc4ab3ab9cee7986c1986b1c011772be3279b0162cc36774d0e517624aece77e927a46893973d2bb62fa79590f9cde8a9ecafe67938d13519775b987c1d34ff71527a0554adcc26bd1333fb0127e731bf98e3539b16eba7eaf52b5d9f3cac38a8a3b07385890113e142d05479424f91a4bac9eb710cf23a22062567f673a0ddffb9dc45aeaf787de35ce13461cf8382e9c0c810637161766f38fe3a1a58cf39d6f351fe28879ecf03b00b0d63361f700f5962651aead5e722fbfa36936263e6defeb5ff8ba7e071f2faa251f5fc700385d32d4befefac06ddcdcdffda172b6f682a7cec6096ea11018b4bb482b92197dddc8d575ae6705ff03cde0856ed622e13051b271fcb1826efe05b7791c2b0b777c406f9f465af4d1ab7aeb2a26bc4bd501d154241caf72dfea8764dcbcf89dcf4282eb644e3d568bdccb4b13508bfa7bfe0ffc05efd1390be22109969262992d377691eb4f77f3d59ea8466a74abf57b2ef4f23cff7d9e9cf1bbedd226d2c5386405a85dd1709355faf926541a84047c9a667df2d41c6b371c3e59b601aeeb99d0157ae15a90feb6f7a631fbcb7ef126484ee64ff41766866d90956aaa5fd1f8838f4da0743ffb9e9e97b0870e0183224295767ae9d45831eb9ae917a94e40fb865c6ac2a6e554b6f6b5ea206c7581189021729c3bbd08e09e449de587e2ff4de062196e78eacfa507e629ec6c42b4af38dc25dc7039403a8f77f8fbcb82d894998ba1cc73b63513d913b31696d0e49044add66312afc6e7c5194382fd989179babe4c051eb14daa7525d2c47287d863bb7bcc58a98963904813c7a1a68bf3a34ae360410244e10fe202cb1f89d05acfa63050e4bb2edfdd214ec9814dc3c6bb51e126a7a5d5b7ed2894e94e6211307c0cb3aa2fd206027557b194497aa8d268d8a2e66091ce99ea50c1737985b32313f5ec226075799401f2236f22b5a2de53e50de8934e954dae6073b0ca7b1ffb3c6ac300a02def5c28fb8ea1348719b423830a736962949be26391e967cbbc809e71208b1680d0239379d973a677751a81b781d00a57314d2e5e036778fdf17ae215eb0cebf884b1e974ec2da10e1ed9158b5a489db5d629395bb16f269a28b0af5b0ccb461d73ced3f5af174cd27cb986067d214b02eaf9ac61834c9829c8ebae4d6b1050760642f9020a78d04df7817d30d3a33bc8d5832e796144f83239f387f2f123308ba3d402a6e59a5407f8fba1124218968efe9068aa33a16b3de290e152844b0fe4b44e97e628c30187e5ed9bb3b3c683ddcfe702fce1a91bd32d8a64760dd2150a9f765fccbb3cff552820121c0ff62b3caf52a37753a5307b81a8b96575fe6984ce15035f864d75f9275caf533cf1b5330697f32471dcd2be46b38827a21834daa7f22aa7713d8bfb4c681a6224fc4a4a3d7f9c0a24982723e57478c57e679d9594d77dad65566be4fe0efa50ad62120abad24331521f5a32c4b03246f035cd3cfb8aa37848de3a3ca414f726c16934fae65893a2e4bb91734c325eb2dfc8ec5746d44510041e2389a843baeb475bd9a329d83164c3b1f46fe5c1a312356a216edc7d0b7e7f5e4c557163eba7277e288bec1cc87fd54cadadf824a96dd960940a254d9cc9a3e6dd27673c3263491b4a3c95eafefc04d3e1b5eb2419cbb3f56eb2890ca1f956fdff88f29535269579663e8e0b7be2378dbb1028899b34ab70d7ef7081c11782ecd9ff7a389ff8f3e2a5173d47e83956c36045151bd6b1a918f6484275a52a0efc951467eb16e14b9c2f510c65ed0a48befbdc1ca173499537f44567b0f53ae272584f217742ea85f02b73622f315cf7c3b25ea4e519055713f86e48fa5850e6994d3910a4cd1a8926c106a66b5d374a1dad5214ad71ebd7f42b4c4b1b767202b899599d395c7a3f861b9142e218a329121540d6c22306fe24b566d9daf8ab1e1667372e009a108f585e9c9d5c0ba97cec12b051ecd65bb2eabd445b00860022fcdd5c2dbf2ce662e3b5b01fa1de502bf1cb2bedf232f4dc8d6b6f3755c77bf6b2234f003fbd049e704654307838a11f6a6938129ee1d86556e86ed7a16423828062981148f3702d47391038aac1a23e9e136028b6880f338d5cc9a1ac0400afaec2c0c6a27634f5b0b76c9f00225d71d7f22a9703d2a2307aef09ff3e501b63836a4e8914ef58e0f3e8f1cd3f03daa15b2e1ec84d64984264c7b5581ef07b874883cac16706e2d557f3262b320b20b474eec4215ce9f953950f5513158b28044634bdd56362dcbb2500931fa0e33794675aa50bf707cd4a53ed729aebc92bc0c2a6ae2fd0ac4d7ca639c112503327277f9c48efe8661d0fe789935468548ba507002536768b3eff1fc4376d0ba2f85703d93533f5aff08a990c40a953d1509a5c6baa521da8b62cdbc97d9699d8b30a3a3cf541e78a4fa3b09e010176eb8386080fc6eb8caabdeb21711cf7c27e602a6dea0f7f859e414276665fc497482b53541300698c3a5b2438e39bf64e3c059ee50e0b579994ce4f318de15a7f9050e888a0e135e50099bf694882fd04b9ac4ee7ce7230e913feb22a3a102cf66cfa2decddf0b55fa37ea4fcc85a73ad9e5c22be52cb713fc4da53a99672a0c484320ac7f3b552c1cc13bc398aaac011921e02b1c39e84614f691af5c9911fb07fff676309b874d5225fed67b7fa4bf83ef9d6074974d0175bb4f058faf51283056a2c06488284614e6a20d076d37e2a49f586090bd3bd2b90c1bb185224df05c07a41f9d89ae82ef73c3ebaf0bbc06e5c1afaff3246b363989a657ef8a8f0fe55378e84e0880a04c6de2d6e4d3c7a8e1f711b31e5521a891847d4d21409ab366fa9fcee88d551ab6357d734b4de12503901cfe64d815a63bbcef25cd0cd7a75b4d97181fa0824ea75af22534d28f17d53d2ff67925adbba2639a563527ec482ccced6835ba9ed8aa4eef81541a27fdd14ed94fddb6506550490d731c2a3f0266090143dd64013549a1d40c0b8d42437255974ee502b41fefbd96f0c49c56829182811f79056fe0dfc44e29dd94749542d1e89821b33f57bb31e553d0f6b93539b9db7f9b47215807569c5f4cd8254fdd545b90361058b95d666710c3b1dd96b92f7ed8a681dc274ab96d30dbc0daff8c5d5eeb74d2a691409baabc0f564a23ba43f9af3d4de6db046d2f32fcd71c00da4d60fe80429f9c0f621eba367c656897a7ca87d223d7cfdef260da42835f1061b5104dcb18aa26145a319fbb6cd5d1ebbb6fe6d77c258234e980ab2f6e1a9aad14cb5db7ad6cbbe9e481d110d0120c210f5840efef669ea0a33d0a25ffe4fc06fd20a2f8794dea0a719df2d92e9053c214222a7dc60171acbfc48bc8a134d119ce8eb1f014c42cf0b1d47976d0d755695a4c07f3c89cb7a3bfd5a47a0a80a65019840f210875f13705c3e96c7f5d9d6152446df44f7ebd3003def8dc845ee8345e9f1f1dbcb9d347fdfaa73c82a978548c99c0f1c34e1edc2c4edd42b73613511e4e6648ba364f9dfad75779733192bd79bab57edc813902a9b3e65f0b9cb410d8f079347941c2b38ce85e75d98c59069a259ffdf39eb84dfc9c88840a09470e0f43dc538282d92344bc40e41e2057ba7e78f4e1911cf908a56758443af248a331b6e4386e6fff6792b18336c9840b63871368dc4d7297ed34b2ba3206ee457ad0a83565856fa1faf766b9d0542dd07c64834050714601461afd42b00653a9ff7cb6544d60187d57f35a49535684637f67573fb0b4fdc1bdd8a57650a1d8f29b866fa552a6e0cdf916fab632493e20e72ffd9baf710055aeee49c99671d4cbe99e12cd37925f3068c2c684ff94a1953e2ee5089f4e0439b3dc68b0f3eedd7264246e204eeafa2121874c3a1dd1653d0ed4bbfaf2a45fea472370c0eb8169a295a9d0432ae9383cbde50a4a0f77ef84b3c1d0d75c0c99e3e344007dffd1ffb8e8aec79a3e459fcf886c7f395700a708d776c2423dff48b312be864cb3490641f793d2b9fb68a7763b8e298c86f42245e4540eb01ae4d2d4500370b1886f23ca2cf9701704cad5bd21ba87b811daf7a854ea24a56565ced425b35e40e1acbebe03603e35dcf4a100e57218408a1d8dbcc3b99296cfea931efe3ebd8f719a6d9a15487b9ad67eafedf15559ca42445b0f9b42e7089cfbd62154160cd19aa086eadd12e6ba93b148d0cfd4da99fce7f5fd5606807f6f11fe97c1d9cacbef67b12cb56fde2997450255fb610943fc60d5228e84fd7fb8b572cec1da85e2c24862dc58bfe04c539262e9ee9a646cd3577efbaf3ebc6dfc5ee952dec8bcaab5db227611738ba74b31f10923d18a6904246a0522a45bdecc86b8b06304dd785c9856868a3b3edef0ac233035b6d9bd21601ccba3564a568bc56754192f76f008f8958a1d678837f6597ffb9eaad0fd9d830dab8bb50649cc938bda4b9907966d8465fd6598e666aec27dd7b93e0e9efb15c34156412e4d01597caf84e20dcfdcb43e6cdd3fd7cf8c9f93312fe0f115ac90c4198dab10b4ccbfe0404f8b0820e9108534fedceaf7321966a47d2426e6247c8690bc235c35711f2d392604652e0511d10244f08e5211f84ebe0b77fea5154181434c7a7f33a0ffd9f682ded34bd340b8314a0b3084ce84d1da557d06c6d1785aadd8f0e833eefa6d04f08aa10eb625916e788d8ff3aa7786760573cdd00b99693ccc2725aa8d675ce0f9987ceb3028f3064b17db233828e33d762cb235061d438ca09db62c3eef30270878b575d3c353855c0ad0981a116e8d31e8627a638c5ff9e0c5282d65fa7d23a7bbe91313ad49880606dec6b2d98ed1c3374d14966f3511272dea228511aa7341c29657721f3b7ad37c743384e9dac7a4a9e0a8312e697ece388aa02ebd2ea2813d3bb761c1bfda6edc2f6312bac8cb50b0ab89a642437f5095783ac555901dc07c57c7750d3d2322b66ed9eed4df5941dc2c4d785379bf58953136eb8375618a1058ec2e8a39e1899bc11c7bb084fe129ce17829da729b40e8443903cf24fa6899ddb9f0a13c921decb48f3be660362d63498e3d3fa4bf93ef3fc590814564d66944a56dfacbb15a29c7b6b1eee77e0cdfe2e4150ba688dc1a724134525d2d4e0f3c22e8ef5ddbc8f35937802291422b534c3e63c6ee73940a8a4041aab2b04a0c12d703f7795dd4ba07660929d42f237dc3e18be9f32c363ff6574b030c8a54e0672651cb84c427ee50e6bf8d46a16fb008620fed4b0f3d1b34ead2e3b137f92cb79524a426bb1d10a41e35956f257a8a785462595c99333cc46f6bd55735912172a82f49d58f3eb19f90ee0a9447de6da22d15b6be56930533796850450fc79f26d3c404f7dd076191d36b257c6505fa0450bc7dc6c3f714f08d6add313316d642ac756e2410f171395a1fae8e298b801d63a9272c6db9dc8a1fe5e4722be9676496c5fde0b7a780e4997dee2ff1c9c05bea7e3b55c055dc6ea56bfeae66b9e2fb27383c945d74112216286cf84a5b1b5e39ae32c94875952cb25f943c7022a984d24e92d56ef1a2805491b36dbfb9f182e5aba5fd72838732cb533da2e49e5b703c6ba91a68aa956dd93c5a06be60f3687318fd68eafa332f54c9638810a7496baa31d7e9d7099a69189ab949c2ea918d7658a1a1fe541950e334ae4290b823d5b013b7ba36890200973f69ad69a14c5043fd5b2f492bba75fb276668f15b5b2cf293c10203b36cb2d99cd3a81f3f945f8079526737eb86dd01042471aefb5fffc6347c57cb135afe64259fd0501ffa19905f5ff0670e1f14a97d70e31632b2cccf784231f9232d41ab7c26acb8ccfe0d1811bc41431de3ab38d5d433e37bf3f262c1cb171a6d843b2412f0a395c100a87c22ffd058a5650f53bfb6fa8341842f14b37f7dbb5cc039726c863b8386b28a3115a324040f13cf6e9da19d722df3c179cfc7ec386b91cafaeb7ffb1ea88410cb6c3ec2f1e5805a0df22c933c9bb367f6794cd92e24597e42321668a380e5dacf994b239eb33b3d964fa0724f0553711f4276db191187b1dcb311eadeba6846a21f20dc66e294f8bc18a5c12615447b58adce4865bdbd042f00cb180cbf7bf2e7807843e70e3df9d3ffb4f65e2616e5373dbbc7b08369e3ad8dda76d9faa15e044fb9f0ab9096ef7247569853c24b5d3f54d7cf75fd0eeefcbca86da31668f69cef6e69011420181b81f30da3744231d595aad622952c74813fbd83147d434af5e1fe2394036a22345222ecd9a6ac11ae729d6232e63322df79924d9aa9b0c9b3c9e1a6d0d8e58c511a6ebc42f3d96b0e6e37fa436ac3686beccf33a22641f15af9c169542f22c4f65d2ee28bc66aac8a0af314c09d5db3bb1bbccbc76d7760600415f17a50924a989cebf620a8c054b5bb672836e852935188f37c7709b185478b47c5dff7c4bbbc5c3e6d8e158b01f601fcdb12f64295a3b6fbcc3d6590de95d1ef5cd17f2a66e61d9ebf40872b22ef713c73e121be2936184e41871b85eabf7a653d1b7143fa8a437571d4981135e67baea93e0525cc9d3f6362e0961128490751dd0a58a1d52d806b2ba6a2ddb99fa3bbd1660b0a0e2daec3b6e66fb315b6eb2db32aafb4855436d8235342013c6f6bfc8305cdeb5c8bc8e793e4f2fc417da86165e8e10c9972d9551f56fffc3cda46d94499a84a361c1057a078da5d1a21c1954be1970a702e0a5a662e375f1964c6ea8cae44973973379c632e90463e37c9220b913c3ea7da3c60ae45728a70836e98c1900d52c505811e32528f57fc24219ffb743b39befbd2004e395c0ec0da907c9a0b6d1d6767af65b4a151f2f27b5d87b2072e6c04277da1cc763e6c98ceff0e6c6d0e57af0df50b608772b7afa1ef41b5d6804645d191ddaf88a42446e4ecb6bf214b81fa6cf467ac615c06923c59867d4edb68c28eb10c7dfd27b68990fc0e18e4cf3cd80940031eeb887028bf2eae8eec9a4428b34dc6ae202393af679f9cf013e3d8c6675a762e728274f18ed122513c3758d6e3ea84b6ae426c46dd69bbdb3b33f6540b96396192d4958b3fd39a7aca5d176b94f9df3e03ee80de76cd1330c72a15ff6a95b54ec8f9524456c87f41f35620354b0e3e9aad9271d4a85c1ba74450a83708db824c815b2bbb4802396d63ccd3e27a9a1b5327d8cfd806793d953f222d897ada18e15894925ea8236153781bd2f1b81ffe0def1beb46f5a70191142926651503f1b3bb1016acdb9e7f7acced8dd168226f118ff664a01a8800116fd023587bfba52a2558393476f5fc69ce9c65001f23e70476d2cc81c97ea19caeb194e224339bcb23f77a83feac5096f9b3090c51a6ee6d204b735aa71d7e996d380b80822e4dfd43683af9c7442498cacbea64842dfda238cb099927c6efae07fdf7b23a4e4456e0152b24853fe0d5de4179974b2b9d4a1cdbefcbc01d8d311b5dda059136176ea698ab82acf20dd490be47130b1235cb48f8a6710473cfc923e222d94b582f9ae36d4ca2a32d141b8e8cc36638845fbc499bce17698c3fecae2572dbbd470552430d7ef30c238c2124478f1f780483839b4fb73d63a9460206824a5b6b65315b21e3c2f24c97ee7c0e78faad3df549c7ca8ef241876d9aafe9a309f6da352bec2caaa92ee8dca392899ba67dfed90aef33d41fc2494b765cb3e2422c8e595dabbfaca217757453fb322a13203f425f6073a9903e2dc5818ee1da737afc345f0057744e3a56e1681c949eb12273a3bfc20699e423b96e44bd1ff62e50a848a890809bfe1611c6787d3d741103308f849a790f9c015098286dbacfc34c1718b2c2b77e32194a75dda37954a320fa68764027852855a7e5b5274eb1e2cbcd27161d98b59ad245822015f48af82a45c0ed59be94f9af03d9736048570d6e3ef63b1770bc98dfb77de84b1bb1708d872b625d9ab9b06c18e5dbbf34399391f0f8aa26ec0dac7ff4cb8ec97b52bcb942fa6db2385dcd1b3b9d567aaeb425d567b0ebe267235651a1ed9bf78fd93d3c1dd077fe340bb04b00529c58f45124b717c168d07e9826e33376988bc5cf62845c2009980a4dfa69fbc7e5a0b1bb20a5958ca967aec68eb31dd8fccca9afcd30a26bab26279f1bf6724ffb08733c9a2f4575361e5458fe3fe5973150c7f4edbf6535c51f1879858f285d14e6956001c2cc3d976b1baa05e81f33eeae9d29448f3900fff95967d7727291fbc1a4cff7fe8e2835e47144365a2f218d4c95d7522e824fb43b66d4727ee570f8303dd6dd310fe7aa00d1a1ffe49a0285a14e69a72bc5847a5bcd59f6d2f56c92a8bd1f3218b5de6c46d96dd345e4397043336ab4059741cad0f962d53d26f763919ef38704347ee52ce4e240cc9248c5a8c154f92a6c0a1e4177898e0c0ea3e381700e5c81f06bad3980c9d90728b30e5884b2e728b83ffd13c43891cdf0f48b0eccca13107e173cf3296f0c742bfab2c8f9ff1e7f0075dfde7bea7101825bd29001b15b4e31f41cc06b4c4b91f0a24b70ada40f9bd92e4ee7eb29bc35476c429bbb5e8589b094b547b30c16ff2b2c30f5fc4c2b1da6dbb2e6be70c3d7948863a8562c32618e7baeef9d190f0a400b2bbf825201630e00c451425a38770e42be3c6e94e244001b523e85ed9441b3c16433bc50231a532fcb9e33408a82292daade613305cfc9e6579b1a0437441ae1a30926c0e0822adb5143edbe2a8769abb1e4da812d63507f27aba5f7787fd9ee30964e1efa690975fdd8fe3d9905343f7c063709b99d18583ae6c621d8536539c5619ed4b10d539219d3d159667a3d6b61b913274adba5e409c2f73dc77d6166ba01958cb50dbdb24dbb037c1354d9b1fb53db8441ad6da52cc6c585c64c42f786dcbea166c88c5901f5011020339da5b18d1c8b4e80f43e1c689da4654e8e6ec48996ad56fc63e8cf2856dffd84fdb91ccb32b6c204bdf1413f0c1424f2a82efb6eaa2af5e7c8f40dab71163bc77e5ea574da913ca74f8143a07d5f75e724da84127584d439201d5614ec6d4b799428e43050951ec71d409c338de0e88a88d4070b6555625efda730fb254fad29d38a4184515d0902abb1a37eaa32ed6b48bdfcb0061730d7d62416b4b837f146b10555c749335bd87f76f1c84ed004e7e8fabdb6d434c0223e368fd821b0886eb12c899f94c2b7c70cf31fd70842cfbefe1cf2766c5880cc9a3104dbde3402e068526563e0858d4cd8a885f153059e2edc8713851adcf3357eb5fe465a4cc16a2b3961caa8e64cd86719bccdbb92f0d618eba9497c4cb80b6038049e3265746a8e24172a5a8f86f83cc93cb2ae658833479d1c5a1d222facc3399049d3187c4015b4ee0971cbcc3ade397e56a80794c4cd2de53d69f7caa82c3d39efd8d049a9366e6eee8b357d0eafdd0a0034f3d7193e00bc49df28296c1fa559e6a0177d0484a31250135729e236366875e1b49f9f0ed7ea26095dbc86f22488c4c57886c0751560c486ab436415e801fe1ac48ec4a3f5f74864e30487581d3f10a55de78b7c17e2c261ac69f2a3446f2f5cae0528b1fd7c377e6291cbc5f1f530ec422fb42e3d00b040c4fe1c82de187033cb9349ad50e169a256d4e2b06533dbf6bfbfe8fff75334809f8050193796671cb7c995fa92bf559d2a5e6a9bd983485141288865d942c5cd96912bfac3518a83fd18ac2e356e81bb778ea20cb16c2c8850ea10f44567ca6444910e9c23e2411605f0eabcab978499a8f647779f46ef087995112fee3ad90124008671bbc1213f5cf2d02a7792c4944915b960f5bc065e258a177d16247 +MD = b19abfc62aace1d49392cee8f69fc6477422a647223742cc7d65da06cdd8b86cb8198c3af9069dd4e8c3a4a6e404d9b7 + +Len = 57256 +Msg = 13e3fe7856cd680593a85cda3d6ff8736f205259221e54a1a2d4cab5439cb9574fdff2e2447de8d33c6fbf89adaba5495247658569e2395e1f40e0674934f1ac54c36ff37f869d41475014a02311122072fa151cb2e2a9bef2e97ec58a5bbd8609d79c316fb031569d9383a8096ae700b6818aa564e74aca0418ca586ed8c5ee5662a2267cc2491b24803628c67ecbf20623eba8e6b9c4893b14eca75e75b0eb23aea95a0f869096c55e52a8c21567fc4a2a60ada220c00480270d3bc0f827865801d8548ec2abd1697702b065f763296adc133dffe4e641bc97559afd2ad1c6dea4579c633f45d4f6116cc917eb667e4f8229df65ccdd4ad5adeb4e7ed357b39bdf4fbaf4c504a55675b87a40bb1805df63cd1c3ca24e27b5b1f8dfaabb605578f9e836ab1c904e6feb0f4c482d23c503c9257bed2ce0de42eba3d3e8a995b55d3c4999ef0b92d72bba99c6970a2cc6a4fa5984de333c7966a215b4a2679dda33ee9b6b275bb246702c7d709519de11a83f92bf787e09ff072075093fbb22cce0580532bdd497a52887e4d2ab24deadf9e0f8b523d7f0790fabec5b276ec9944ec2b078183eeafb3a14f5753ff1d7a27d25b2ed480499ee658ca231c1483c396373c3c4a06152518e1bd9e0bb4a6ff91e56e9ef4dceab66f10bbe13771023c309b5679fbd0578ae0ce4b79b85f54eb9c2bac4449cfdcfea9b6f6989b090253b27cec490d7f1031a9cb6b82f07ba1dea539a6c739b59ac804b02ca1cd58eeba8a507011f56ee9c9e26db0423a7638494b83e0804b4a9eb33e90a0a534cd31d126aa847d4a2c4eb409299c2ffcfb62ac0d9eec1804eb733085dd050b77e27628160f9bd38233b970ac8391a4ce67db8769ef2bf6ed0492d098f9cc5cfd35162fe6e428cd2421a4904b0023590547ed5bcef912956a428803d68b69023b41bc6907ccadb2a652ba835333e3b5680822a9cb41527c0311cd5acce65db3b874b364073dad3c9f6345da537335423d4505f1dd5c4e335dfedd45faaf2cba0b5aa591539ba9c365bfe0f5ca52ba681b7b21b473ae7823c1662245de5a58ad9a700d817b7b25df9fe516763666c5cf7916e0623ccc52f5e3e446eae65c6406ec4155a4ed50a3e9b45f50dc1603e9c0ecb4dc9b871a81022bf5b595b149d14e773b088c37c0968a39ab1a87e7deb8e4ccb170c0f12d64d10026f8e6bd9722fcd1e9b0a7d92f80399644ee0a3a4ba5c3cfa94762e98980fb06d48b4e69b8cb9a82c9c8784001f36060a955f36bdf22b63c08bb01fe9367e8b69ad74d54434d9fe057ca8e1afc62a71f64bca42afdc264b86c662eaeff8c1285f68763fbbb2b7591102149b863507628f3bcccc64c0727bb20b33959026010fb53f612ce84e7c40b7f873ba6cb3f4613d2c0bdec3e63a7bae23cb2ab60765c9d5fbdea4b350503c62246f474b8a19f768e52f7fb495a4d4e0d6d3b048e416dd256494b004ff5ad47750ae480a009fab782fe1b81f16d80db2ebf3302e053bd30f412c57c3a4c3905f42d8c8915eae06d5d2c990ecb2ffae8b2cd2b150b2fd34f95c4da2d887b2f882c396ccc8ec6d8fe8968e0f04ae413fd25f193b963384874d7ba0972bf05095489a905e97f105ce1743d83d4d55c549f14d6fd6e8cff7547267cc41a527c5ee1a916d85e6b79e4bcba05123b0eeb4544fbe7d8b2ed07e24d0e87aa52c73388b5e6ed54a9d845e8f6d769fc815c035e6547aeb61507c437dcfc552cda91ed1f57efa72b3a4a17021638d6a346514718968486061361c6bead7c8fbc0056ebab3e0fde9cbe356fa8917ad5b70863290c4f3f18492c8f721f050b71e8626ac184dee3fe59742ea2550ef9e19836262b91f5d3e00fcef578b19a25b6228f61f164c0e870c21aaa718fd55274d75e0ec14230ef47ca79182d1ec357c70ad5c11d937aa9e067001d3fc18b0129f4fe717ca576fde9f9c97c11cf172e2ef1d3fc88c96294d7c8c31b7f8296825b618612d0344e6c312e2ea5c94b1bf548880898d55f2f35a167e209b35b9e5293bd83574e670dc6a7d81709b60b3859be3df21a85cd1708d7b4db8c6da4f8ee5d5974b359c65ba9c868213c6a97f2d7fa741ef61cabe08b05401df821074cd232d5e8bb74cabe621d8ecba24969e1dc87dafdb00c73e238948a37f15ffaf09a9eb34dd441fc8cac119c74dfe5097bf3e0c30cdcc7adb29e200397fc8ce88ab40b62229223d46cc44f21bb39cfef27aa9fdccad0e0c1c828123cec7e3a68719b0362f579acdad56710af1d646c938b5d0f78b630fa589962e5a673faeae35bcc114634ff4f883cf110a509d44d9f0da7ca376d7146babcdb34d0ecf710f19fc3bf8c6f978e5529fec9941f0dd55a25075a894f268890990d7a3ca5f73f0bc42e589613d6ebda12dca60cbb75b65d77f83b0ee9a52252c456105a4d7fd7aa4f488703b041da7f9e37306f6da043315cf6e608ab819689a561a1aa21f57d45b7cec555c34cecce128ae34ca4221e4e7a8fd6272350679dd29ca8bcf1fc9286940d9decdb7c953e164459250d5f9a3d272fa5eaef761807d2839ff30c09b9b54aa17b6957356658100fec78f7cd69660952bfb44e872a700b92e1fcfe81457a6206d83bc52bd2a4a62a27c8f20fee5187958e23eef8014f0467293b3807d84e60ca5ee4b3b45c9c3f3f95859a7bab982864bbba3f3d5efd436ce02e4711e499dd5859e4915376b751bca04f4fb523a2725cb2d7cdeb76135f107146ba13fcf52e3d63cbecadb37e643df2768020e8f8ebc9fe0d0976f929adfe8724ffa283e8d9e5f6fb3417956a0d1fe6abea636e140b5907da70644a98b6838c4986321bdd76eeae02e6259ef2b2ff075fdcd1157c37666ac0a1380ce90f4beb14ec37174b6bb3d363a15c32b0dc37cef2d61e81aa169e914ffa6692b32eb43e27a04618cb4ed221adc42fe32d0f76c815749035161f4e05e91a749e5f8b58fff240d392d596c5e341ed1532bfb3287d2826daa258c811531c5fe66276bba6aaf52c6417e2ca0bc2b07aa0a3e17db948bb6b525bea9774e36a593091711629c9a0e17c0a8b5f203a89fb66b95ab5c5c53fb09bb43403e5415384e79dd7516ec695fe800d27cc8fa52efdbbd553f1ca7d35a51b6dcda3eef75861800a21c3c24c44e2147250a8b6bd2fe024aa95c833cb2da755cb3fedee6fe98d7e48e903e0a52e1aadec9e6a41ccfd51458b789f9e599845df6ed3489035975756ec8588267bc226b0de59879d5f27af730a74ee668305ef2cbb504a40c2e25d8e679fc7202a9194d1ba2a97460e3f7951aa233b28e1e731a2531f798ca24b1ea94c80474a5c2cd365227a0fc844954d45dd0c1c51f0cc8be4a8994cd05e42091bfdef9f216af460ff89d057808cc979e43587f88e3a167c783e663ab85167ab7b1e263531e178cc1562b6152b515cada1262f561a286571b1870ed9b1161c843b0fdc8ff85a3a833b4fa3af153ccf4701318acb92362a0a4514eb903736d111d0557b25e13faa14c5a311bbdaa991e478ea02bf92fde4b4876a9504c71e35d2df817a8d890c47ff68ff9891e81224f49cb22fa878ea25ef1cea838dfd46bb45bd06633d5c3ab4a189c7a0e7ca1128f5d11c7a2cd0855e486a274fb2263ac1f8fd76bdabd75550b99c9db313fd30fe66baab6aa31649fe2ef3a34207fe84fa5b1534f25f86e6aca635e457bcfddc15d5cdc189a1d6c2a6214de11305d29fb4fa98d399cee76938d5da3df729587d2fb16f015fbf8e69b6bddd633b224f059245fcd52c80755785e6fe0d2a0f79be7c9822ed4542a9b9d063269c12e3b03112cbb5bc130acd2c044815c458d5edfabcd88dd7e2d1b53d63afbe1e32d0c2aca6fa67eaf5c43b713487b6061bf331dc31111463a0e33d6ee0f2084c336fe2f2cf6067f44d536ca1b7045344dc0dc1bda9d03b23180daeb8e8d899b86d179d9e1c8c5a6a722ebd47dc6c8203218c3a2967748678b0a785c5ebd1e6d5786e5ef8eedc93b01cbcc9ce452ea6c384d4e799fa9c6ae6f3575ef05a6c8445cdeab3ade6efc8679593fecf61b945f86e9e76a9e3b67ce0588396d2c506d66bd603182765244cf3853ae8a5b29af424574f53b3b331111768b2c9d7ac4f61ca395e08e01a18b5d6641803fbc84215d9c74e0b51d9baebdeac6b64998094cae360320282563b8792aab1dd3c135d4f8b4730fa0ed7a251b88c240372d2755649d345a168aa1b36bac1aed0e1143ae5bb5f8ecc452d95e7379063030e227fb8601b0f421d963647b151658b855b699cec68cdee8f5bf410de51af0fc5f10255b89fd5811baafb3f18d25c69834967c980fb64dd67d34b630f387e6634beabb2c5ea5ecaed48f88143bd19f7757ec3e02b9fea1549341a525cbd47c2d4ebea441a7301ac0d00acb2d48a14b1d65bfc954ecec432bdfecf635968919211193cae28d24490e55286484db1d3252071804d6cf099923083f91a57c2f24093c711457380be0610cf23b611dcebcdee5fed7cf8bdc0c03b7425ec0a44d07ab77606ae7cf6c49819d6f380c363b5288a6792a8947ed059593fc46cd376b29cf6869b4dc7ad0eb36afa844cc4ded5a19f391e54a2cc5ea9f45752f135c11f23fba93da7c63be2e48eaa345eb8a6a3e5a734ff15b62eb24ea74b503db3cc8cac213e7c510afbe7a7ef86a25af163c6410cfba340410e71c3ec9c5a86dfe17191f1c6b5bdf895837a17e05ca6119ea3606aedb978c5f423962ecac0811cc87471f7c2985331715cd79277a1e48bafd1a03b9b8023d7683e2208472090fcb9fbc8adb292c52817ca5ce98d307ae22fc7ace985b5e5d7e32813e392095ae25e7e128e3723685f01625687c186fd9796fbd30f2cc91359ed87d85b5bc933802e71cc03a0b8d148c69b60f794f3d12e6df4bf16f11850dfffc3ebd9d51eaf38928d61c88ff17477cffc18a378259a191d38cd9b834202dc8262cae9ce48428e33178027653be66e960aca25fb8aacea3d3e8af753d4cdc22deaf1f587f481e378a683bab1168b8fa12e01f99fa1ae14467c73d4d32f06335ad2fda79291e1faebc108fd041ff86d89fc6c98c4f90219b189149e91df40a281a14a5a8ebee71704ed7c58de96a18aa8fc567e1bff5d8d16dae9cf1053f1923aec6498dcca05da4c824a7891391b6996844c340522f4c0def86fe0cf3bbd850efad8ecfd41d2b73b361fb6dc65ca8cdb4ada34f1127c578248137e2ee4f8fd567313b160b4b230495f58ae00bb3356dfa67d0b903c58d3a96080e1cfee385da9ebb1a0c7a138d80f9481c8be97ea7a1c3da122430f2eb7acd814c622b6003881bb1f157285db00e64c2791668a54493966e3039a19426605056b95b7eac5106667d899f1d12d5d760cb682890105568fb8bf49f5d948716a7ed1db0feb0b77d0785aa8d6218440274cbb2696aa8214b7a9924fe6cdb56c15ab04009b4547d1586331bc8fe5945b8292a1f83fd53f2629c008900d750db8cf105ea0ca681eaf56ceea6f9f9bc20210550771b51fa0ed5e828eb4ba5da5d9df556e264de1d4746411d11c85c281c6492a582dc6f86becde77a1287de63261cee0af1b76411dc2f8b2a25dc2e8782aa5892086b5edd4a721f5cc55d8bd27c326289dfae3e46f1d9d47caade77c09a1ade7dd07326e9faeb1a37ce74b30fa807db3b74f076a3ce6ca37b68753fbbacddaccfa39ad09016616074f3765e01f1c2e0887726140fbb0f818f274a8f60001a4af1498863bce5fb7779fd089492a18bfad8b2f71e74ffeaf520ae056e97defa41498ae6e754b0e2e9b0b3d45ea9ff8caf93eb0c9eb9e3268796c64de5488da517412e5c6540bf3d3e7fdf82c32e52ea8a21eb0c9bc6afebbf5937cafb5b56425740fc91e3685a35fc5047bacc0ae3d010ea7aa01e83ab6026d1c925b8b881f986adbd2e6cb4c9f2ad8ab4238023fa64cb575f702ed81eae43674306244756f42ef239da050c539bd895ef65e762dece42ce6423d3ad52fc9e816f1448f11c58d676383eb858425806d9bd2909afd937fdb84f6115ea8d73c08913f82b9c1d5007a182028c80dc53bebee917eff331c7857ee9d4fd77183b30e5f85ad5319f0148dbdecd8a6c6ab188ac39d6a0142fa56186fa22923c3b7b76ffe6e04f99eb96218c1647b804339dec0b770f24fc1bfa193a4af3dd213d5c1b3da535a0ba49351a1cf0192031813d7343696984913ded3601a0f0e40f6805a609fcffd07e0007bcf435ebcad99ab9a4bcd88dc7bddca73f42c6c0b1ec029e9fcab4e7e8cc5a338e7aad64bce5c73a08de8b22f567424fbc67820c4ca254518fe79594ef8b9de119171f2d003e50e825124cd11777b50e35d79d7cbb17a644fdca67afeda5123be33354ee9eca7dea86bee14233d47e0c33fadfb70835409f71daf2dfeb0101667637154e9c739669b04c131c5468e5703d380f663be2698b737ffecdef87b28d5a8928f50420e28c2d22aa077f1a3163dcf9f7305a086a308c215220041f6cd61593558cdeb9aa7c83aa6eadbed2ac0c97a55dbe6f8e8bb54328b7812fb1796931bc66bb302536603d4a27b318789c94f6a40ab7815c144221fdf5987a251f6f366b2129044ece61e06c9cc496f54a22815ec6c4995a4d01ad06d40cec63a710aa0a507f611bbaa7f67796863e2ffedfc13c588dbe707e186fac1c868d5459731700b9645074415907d3dda11a0f00f23da48ab9f886eeafef5794ad66de7cc104b52581d741ad9f99e739be327d97847dff22f14f84e6efb670052a7eea5a21fa915b7e016a44a2361d72858c620cbd0ab6e9dccc52aeff4b5d37a4de6139bc80fc2502d3d84f8a65dc4f9d32a4a7c46b2fa72376d88e083688f2c48c2962ba1e5e49b55771157faf8d99af2c2db0c228d4246d56ffce320057fe32922c1d425c1f9040941ee0a89a96186280e36fdeca0c276372adb5a430342295f850b17cc3a7c24b92c8f62db060945f38b02c41d83e7aadd4cb8c874e862795c47f6891da5ea77d5a55a0377953d54d5c7b2e12dad4e3f284429b02e2b5d6db00a088a929ad067ff3af26ee7cd7a2d5f22cbe7a59352bda88f82a3e7529f50fb39b5aeb39faa9f865bcd0794155c59f04aa24a1dcc91a0fead781638e494cd9e658268091ae5691b966e6005033045299dfa8aeebf87736b2c6e898b67fa5dfa0be3490ba32d6f2f693afad32db2896bab292ca0e2a0cfae6aca6057433c6cce9b7cb423aedf1c2242d74a66eb3f9156e0b291ccec79f00907304d350cb7846c92b34be9b466eaa4c1b7d138c253e74bdd2b6cdb237f9f3b7024a2ad2b083f54900b82d64a717517445121d1498c15eafef810443e2e2796441c031834aaf83701f9db71e77b260a7937bec8f7448794d4bd2ea0731213a9e18ad11ea01c49547702b83501d087eeaedffa785209c6d9eccf1a7888a80e06d6f5bf1903e89d6d4dbacba8203e154473be8767c0685e3aa5b25624e56c510d92e10fafb67c7eb214966833d900589c5657c82fe8dca837ae1b843dffeb974eb3d1554b5e6467f36a0a207072c3bc66c5304f3921d35f41544f073c5e824b4aa84b2264621ce3819caa86d6b3f4cb345eec7f1c11e8cdf836e161a887ece781fec2e98348227bed4adc0deee3101f7571c0fa311f898ebcd45715fae277e67505bd3d4096f18ba6f3332821a6b203babc622310c1421c1fab34b6bc14afe2947bae7ff4c526bd4f04345807653712647d549c43ad8ef08129fea66495114670cf2b3448692e6b361c443018a52be61352fcc8422adc9691ef09777cca389c9a5e97fc93e975200c9a0722cdfd1cd937dbef3984cfc788c25909ac6d4a824f61c8993b6fcc9766231be1b2afc36676525680628402bc5182f663b7ce8c8af9779b9363449901c82a006852269ea547f37174c5e87a475b6455ac2c1916bf053c260b16bab540a071e60fa3daf565c88bab20e60a8cd530d6d5476bc55f9b1d301684c82ac7d099ab4b4c0a355e14729b72194562b1026c6b13ca196bfdab8be3db84fa1d473e1e368ea207be3f2dc09354c266999d4b58819fa89765476cdbd7f3802f2aa9e5a8944ea62ede2f3e4d13c1b0cc07880c9fcac7776859e36ba78ced0ad9ab6673c35509cce23d94b2828d5768d85537e2ac97299b2eb24804696326897c480344e8e93e9ac4250626db70645f3ddaf35a098734984cf6ebd38c0b3e80996916e593d15b74375cfa07e25d97084f2160df311b87033590556599d5a384b38707e25e9def0dce2df6d221b56df89ec0f6eeadb48f408b370b171d62e41a5d3a5ca7a3bf77abfb107312041847a49f323c04f9f2bbf4b023738481237e95f8fb9bc20db673f340bd054413e6b2a0e2dd86be8046ab74471e352a5fa7e19c09333bbde7036258318c13e4dbb13d51ec5b9d77eb30cc63a25fb6651350aba11089b2e7ea26c16f3ff62570c5f8564c2e14b6dd85319d3774907de156ce4b29b157a7fc61b12f9cde93b0845d3c8c042aa1893c08d9ac541038f21b74712eba3e356157f8030b55afdd5b7c2bee4cfe647a7b2fc099686e17b1c97ff6d9e4b749aba58717ccc34df64b7ce49c9e27bf6e08033556e15fd9fdb35a8b7878fbc55612bb063b5f05da74569b3a39cc9abb99f2c7c93651f12c24863bca53cee258d6033851ed3a318f9c974d098dea14778aa32f77e95bdad94ec2d3b9335c26d65c0593f6b7fee4d1c175f8bef3772367b291a0bdda7f6b65bef1b8d471a137e25a925461061d7e45959b24e725145620a456d1f7a42d3156079b51a8992ea3f15422003d52069c6f8b4f680e7d121b26d25b19d1b0f5ab3ebb0844b23454e987cb4d1dc8464a9d94152b28817620f0eebf371ec89b5957643bf0f86dbdc4771a426c13ae3d7a1067b5b6ed0caaa165eced432748cdd8c47b2ccde347bffddb2d3c17686bc1f5836f0f7b2bfc7513e8a5cf27e9deb2f460f7e007abec955194452ad7a26d5e4d64fe64c07bdd8008f7bde75dccf7052cbb4f0826a8a8e87020d69115584f6cf243aa685f432c35f12179b85d572e1ef2320507b3602913ca0f65f158d06e98749e078c802865115ce47dd48f0ee07ad5739e612678d9c1dfce77ee3ac1675b54d28a33db7224acbcbf4eae9b5abaa356de9f970849275d21dc90ca03a1b610139f9710e9e6c762812040c8eac12922e7016d3bc157be5020c825277bd7d7612143d28603ccd9dd5aa6188605e89864165aaba1fa3afb455cffc988ebfa37c91e6db115e1bae86799bf1a98652795016568cf7c1b596aa75701d260dc7f73b25b7bb742dc275fabdee9eb628104bb6544aa4d2c9d3988f07f6cf431d5ee07a7790c599f8b98cc149aa4ef670216581a44ada925f851d2ab66af938e60ac6032f78e1c7e58959a3c4d7ebb2840c3179ad5d1681ad548d4427d3834e8f56119cf478f7481cb94668d67e5c338c591565188b40e5d8c750a5053954ca40c72a0e6e97ef62c6d1b9d728a689beb1917b0e8cdc40070b67ce15f6a556f723e7772046ddb15e0b591cb962575a9e1a3bca3db259fe2f6cba705ca21d701c5d3d619c2452258412dad6d62c99b719f1df6ab8320963a5234a9c41b3ac8a8019515148afff341b04dc4ff62c7588795b05c347b3f555b0599fbb8ece578d6c7dacadee90ebc46d08e5efe10df2b50482363db4dd23bd99363f36099d285f28b1d5de546f1ebec0477f1e5e751926038ef940c6599d84a9e1b4737bc826e9fcde544d43f2a10b5de93144370df1c4bda7d73444cf6b90258386dcabf75913302cb26182c47b918c1583c9327c82757cf35781f7e693cb58433bd863d1cac60bc27681db8bb43a94f3fe15186ad422869d018fa7471f1c894a5dce69fe80e8d6c9281714f055edbfac2990b081f0b425cb5dc61b9a166affbf742886278362da68518af69a659253688da3c466dd119ea6f48f1d86819f03cb064d82f4dc1d5cc878424932ec10994eb0b41ac4a3233c554d5073b367a2dd969da5250c9200a71025a7d55ff351d9871c2d7c414bd04600f072e6cad05bd547c0983718adf20269e02161ca803c5b3a5974b085db0203d1665e +MD = a14ab54acad289474c703cd30f01ab844b8955e1e4a8764884b994c18c3f4812c0cfc6a2b762bd77b4e44f940ff4b245 + +Len = 58048 +Msg = 693eb5605ae784d0af3cc39327d3467c59b47b9048a89e6837b430d7bfe0a5cd1e3c5d7bd225d5b867c51fa48dd98f8b6db7b80c3d8f967a12f10d82f68f920e3b45296a0f568fa550f9b83ba1147cf0bd478dff0b2cac7473dd1cd771b7570a675e017438011a6012e0779f8b0b7375f06ce2b3d90746200181461d55df5b894b91cde375afdeae5682441a7446dde0ae2e9f6ed0a9ce4465e4719ecd9006538fe575fdf0e7435ac4e808f2844e23faa196ac791899aaa9470e86a0fe51c02fda63e10bce31b12a0319a970e2aaab8b6fabf11cd85f44174d086e6c13aaf1e7d411f9543a1590e8bc1d11dcb7e2df5bc076569e3984025622d90f4a3223014126f9a6225a1c485a96fd267e2a7f26313dfdc449628f4e2d6c895381844559067823cebb56cd41493ac0d29d6408e7d78d4a21637b088f65d421215b30975ffe71955a6857b1e37c4f6efc838c058c1359655735ae782cc601a8601e5ea27cf0ba593371854e97bd7e108c76cbfe7cae49544c0721668f189c26fa1338ec18a5fb773f1e072fc3d26fac69bf497c1f700421ea21fc5a1f234ca4d682e3ff9ce6dbf568b706d9d184c94d7da62d06dd2033d417ca68dc44afba28dcb38a636e7902dd9583a9d6279b34f8af72a0251e887d73bd4b8d7566838dbdf4ed539ef8261937aecb19ac2fdf5ab7e76dc9604a6e8b08c3ec92aced686e68067a663aa1b7c8099ad77de64f18e0910dddd13fc99b049a11f59f0a42260533faa0ecbfd0f2b65d43effe09f10d718f0a0bdf4a03d791328faede16cb85f925b8a80db3efa18c3a905bc49f7c87b3b7c43f1c0a61e9dad7255f7558f14df34629daf0a0658af1a96962f630584e4e1324c1af06499b8691bb4f8c581c459a9f337dbe0d9a768eb0b64ebc42ec2aebab12d8c1c624b33e6839c74c9fb5369737bfdb9e83f62c0b5a5f653f5fa2e3328577cd7ad35bfaa965870fdcb422e89117b63ab989e1760fac4df0a70ee140caab39e801b45438708f8d6f651fcd233145fee337a7c31a42b066361cd8120a5c2542717ff179353aef342f0f691caf1fcb811e3f6504e14d6d9381c5439b098ff978b01b1331b8b08b62960119795302b12532f94c0c93d8ebbd17cad9e5050c31c5edfea1e38b7a6d00ed64b74bd882fdd4698ee343f88a33ca41542258c67ad5106f4f23f9743f9df77c5fcbfa0748b9750926b212d70c4ca4478ba55c1382eb417f3722da3ca7212d8b1bdeeea6fcecf05be842dffa053e317196ea5ab6cc7d3f65de25eeab5c038c62c0778e7d469f2da7fd1a13271e125b079d79b875ff92f4696bb49d88034bfb49751f4456ccd913358dc31727ffcf0850cadbe019c33347d307574f9d47ff6187625d78f739a28c4cbfc352c24f7d22954397386ac26720ead9976cb0cd29a865b0b9902933028035bba42bbfb725901e30352a2fa13667f70afb5c8a40d0b72b87bbf5b46202d539aaed0ce8decd3a33ba3d1d320ba80442c10c87f346fd76210eec0f6070a9749eb4275c036d80081c09387939a6c6e013275056b287b7cd8e6ed346f5020045ac00d982d90b43e22044aea50d1a97e1b264512f91ad06a4bccef9033ac30d30adb78be8326120b08993250b761023f0669f977b565df2e3f157e4acf858da1ee700c6f5d6161e5a9d1f27123b3073f67900a8a3ca41847276311eabf76c6ff5a30410118cd345c8a5103b2226218ed931b00e0db501c33993832f66ffa5d29f29eaf4a41d409ee3e88eeaa3fd8c7c83d7d75123df45b8218f759d47d8ab0d02c1dbf71652043091b0c0bafd891846dab29cf74c0fb46910b431f2b449272808b3ffa3d0f1c804bb43ce3599926ef3c80c288aef0ff6e0ef48dcb5171cc12998467d7f38c233204aeae1e3dde0358b342ba39276a5b425a794a16fd717201a99c47e13b78fee8e24ed214b323a161705583495489a963e1ee0a6a75c03ed02f57329e8b61ea0563394b5f50169b99e25db031dcdb543353e7413e50ea7cfea939ca7859b38f27e5d27c569b036c5287bfc39b16dc06412ee9711b255cd6fd95b861f72cfa58c108ced7b30a966e3beef03feda9081a0db1592c894993b74d7357bba38bb2d1513a72ffdd152c4ba666937791e9ec2a09a9dad5f1542ba87ed09c1a05ec6983690963573d41517f32ad1e2d308ff490b566d30febdb8125021bfa1f86c57ad968e414706c2592635120f4a331d1bde8a186d63cf13630b767d3f63eaebd835de1590addd2185ba29250cb7c2e75b4bc5e7858ef79fac6da209714fa062b0f9b52e6bae227c039b766bae73a8ed255763cb9df8a1e9f9ff7bcc3ead3f5947bec4dfba94fa583a91c5ecdec50cb7e2c90dcc9deaf37ab38aaace8cc4f258054fb23265a58f3f9264beb185f416cefb6a6af36dac15d943d6d61745dddfe85273282f542a09b873db08c18949f0b9d6022347f686308e0faba8b04f402e9096f1cedd6f6a904c45c04c24d40cbf00dd59dfd01ec06c2281d1c8a0943508d939924b449faf4a8170d931e34c85ae2c77364797cea1f01c000fddeffa04954aa31e486cca3f62e25cef6005dbfbe2c40b6202a3ef72e504f32f8fa56bf4fc6b3c5d6c5ed963fef472c9809268b8865003a6b9fd677c7263c4f788cbce4e66c46d166021b563474118313a93da02c058c6c814ab2004c0bfda306d690a5bfade9c13cbbd44876450b7ed360f1b22b865bc90bab70055f7a39da2e9850960e140331a563b70177da9b8c61b0e126098fe4dc85428f1b63e947514a229b2a8427298f4a9a2205abcd581849298a70385ace1368907da6ebd1cca4f405ced7a46fd35696bfa3c99475b7cef42b6c255a9f6e0a4025ba2c69dc2041c6c27a21d14687040444bab1c46c310ced46f4b9c2c64b2d8672c3306060e8b41ce90b9dad63bb343de9e572be296a4ebefcc2a21367ebf9a5f8374761f89c8860da21bf9b1ff6538defa270e425aa20c3cd3482cedcd70b492674d5d11ba21b5d162aec2cf3bede8ef68030c909a71fa628e8b047cd82beca9e0a605032aff94c4da5b7c5877b51bb7efd36ff1db797d0a05dcf30927590c4cf667b41e5fcbed8c110b71743b2498de977f7d8fa7225cdc3f243fbd4363da22b279b38ae3eb86d10fa4e74910a2290d68f07f9285d4617f444931bfb3af1fd41bc24a6e3ec9273cdd0f27027d9794ec6b0cbc22fef7529c1c351138ffa7a209392bc0f2f6cb9a74823579c50b6ba222a7bc7e6599f3f8dad0ce274fb0b22d6a159c5f40955ba62206fd24ba40871b5824e90b86de301be266feba2d4d37869fb6fe6d7da3e012ee724e720ba751c735eb79adab5517835be9ab14f95ea0764f253733d4a6c2a77fcd12a9ddc5326e620356a9fd870ef7ee5ebf7bdc6c54c5226831f96b28682d7e1f30125b2493d78674664aa3fb7e4143cf2138fefebb3bc289d2076ab03c6c927090f5aa4bdacb4a4793d7c539d0270143b993869c3da0d48f04a4fac7a52b64c91a9af5c271125683c3978dca6a72d1c36fd39cce42bb0383ae1943f30b349c31b6486212be745130e0d32135b6ea5a562b426a1d3255f46cb8af6cbfd64de1b14c4919c22bb9e357d1d4a9021a564504d52615107536525209ab9db06f3fdb50c4e3435a1ea8b5ff7edf4eba007f39d555c8c8307326c33e8b5800503cd13316065f0862010a6f30cf3f37e4cf2edfd29370a90395edef3625fdba26a6cd910bfa058f633ba7b9f2ac3a8e08ef29df027866e01341528045bfe1f6ba16f99c38891c01e53447394efd1a78aec838e06eeaf196e8e01f1b70424dda95f21ffda499ee856e54b29a4baa251f5fc2258a1cd25af308db1a6ac194898e3ea3055c5713c1448803af82f29ba4aba245b7861619ea1efd980c153f9edd3b3d92745f5ae0de66baa9089a4ab9de4400b9b57c64a5e6404f81bcc4f24891091b2633b1b4e68d128cae83895bea1d100086e8130c60998084fdf41ee37bec1f5fc60cf86d0f1570877ae9f72d17a73a2a1418f418314a0726737acb191d37a691dcc5dd8e42c0a93275018ec929c6e806cb0cc78fff40fcbd4d17749c17bbc53acf27071e67d4e5160895f33606bf431d148e337ab4c488cff293c17552bda5e107fa1f25659a4bb9996bd17c98dd72f65564e0e0371ed3e6cab659abb5886d0eec06ccac265a04a5924dcea4c5679d19f75777c9709604893d48e54627634649e612b7b9915c3762590192b477a4ee0f632fa03e47744441b3100c4f9295581b5de887578ee70d76584fc6b795dd8b5f00b40245a4ffba9494d777cddd67ca0bb94ee58b0544ae6bf50112b2075b9c9135ae46e96f808f0c4865cdc8f021c5a2620d795fdebc41c99add1dafb5634a2e6ce4132f903fea313782b749b30b7066c0edeada0195ef16aead90b58740bcbd0c1f1221ef84f48acaf6dd560e6cf4e13bb5e1045717dfdc993712cd65381cc67d27ebc67597d49f6788e6fae98e789b3c2f05e6c68c3aa2c2444cfe37958fd126c4452608bfb3f878027b3a2cb7251b2921ff87373a27f1939be650e59d3f6771bec84a9146b91e632a4320bf3023e96c5476f0936acf50730687cb5799540fc5dc1d39f9720d9892c9e7b38a41998d6b901327c0655947ca4bd77875d0f6528ae7ecfb268cd8ee6ba60efb7531af8f909c7e36a870ee5e0133805e288c4bb729a8dc9902db41a9588b6101694a8f7842425e2431d6b61e7e86278556137ec608e4961a74a97150bf3e87cc4cd25ed0e8485bfa45ddd80eaa0c77f6e8afb5079066c286633c906b0a8829640812471dec771ebfcbcf7db7ed8c15b8c7a5180329f507e6b9dec582a031efd2835270e9b5974f7babf2cc9fb0d0acd3d940d1413c580d415dd4381ee901801da7da01bbab709637cd8fee50599ee25008c705492f587d9f376912c64dc0854d5af1231c36c999fa19ed0a5252bf5f363b81dfa46cbdff082fe47b033435a56b86e0fd93be6c03cc7756492b01fbcc8d5ab784d9594f3a852d8c9a5c0629897e12f0b9a8ab1f7ab5cf10d365d019d15e4cb21f7060d5d71d19ab98592b64d98ee6667ce365aba6be0964cf8726e315b0fbb7d6f2e8197dd9db879c820cae3ca4ea8d71cd54d831ee0d9a651a6a1f418b4e11d1e658e1d5bf5b68cf600fcf5ac606acbdede16dc04ec3fabfa50696fcf72d0639d41af687da8298597a9d8edcff220a8bcb7234fee413cc02b06110effd80e0364495203a2f365e61581fb46a5426f001f071f390bae65759c4e355c2a42fe5efbf312696c860010f83fb09abcffaa647e3447321d822e4ea68f42c1cf5235e8dcc56d245ace9ca8c829b5548778674862c557c5744b1bbdd24fc5ea5f6429237f46ceaece3b70100dd6560e854b3a2e6540ad6da0879245b8063b406b175cb16bedb373676b4ee931dc3f2346f67778ee2cd48532c64678c0591f3e72ea54f52b20c81c86cc6d86bc91cd2d4cf8b3ca75e059b6ab659cb973aefe6ef74b868125865904dcdd709b369d7c96f7c083a58511997c6b03f99a4a7e354c78b985b7e394f2b6ba1cec791865e9fad7fc4b6ca4273041021001addd5d604177b2b73c0dc331ccaf1935b2da7181c38dfa9fb24b97aaaef128393684b31bf864c5bf7fdc9772913c40e0db0546d07b5a49e508f3e96510c8ab04f6d915a4dbc070e2e6089851bee2327244215c52acfd78afc335a2fc00e916f951530bb7662b42e610ea3c3b90215c6ea0a73884b2c7f57483794adc09e2fa8ac87afba022059a2d9329f9bcdf8a2d3a531f51e3374a4ec7cc4757919646d43ddec96c1b89d0052dbf206741d77d2369ede24f0aa504e31e00184f993075228706c6e376182b026b2765fb57328aed71d3a86647868860ebb174996f530e740ad2ebe84c5767206a5e732c895b33d9e696da5e36463536b572d4cb809863371db5b0e0fac224ddafb6d08144bbf8874cc9e09d637e9be30fa6c16c895b23ea4441ae742de2d498afd2f67015ff4953f8cf638a3b9a4ce45edfc2e2c625b10c22e94cf8422406efef356daf797fc6ee9f29cbcb4b2398b9278041c4e382ab2b1e2f1503e4203c51f2509e65ebd7c1b5846b81d6fea53fd00e2ac6995dfc72b5ba858f2d6041d55d3da71159e971fa276d074e13e29982d75751e9c681ed983a6c7f13cb5313726035bb6ee1fee8a0d29d7f6928836b022da777f3d31be08c27c89e5b64391f84198f1fff94a8968645ba566b7b4da44e41831fad45788fef1c4345ce8e8eb09ad78e274bf85325fadf380edd92cddfc7c15ebb4ea4241601866117d5b0d0811728d763fc739af17f2d9b1b37f57077ff1bbedd80659b4d93d4968719618b1b999bdf78599cfc93a3af580df319d1f764bf17e8cb106a80f6a5781602173aca929f2ab71bead486d8e2f34997866ef88939ee7f872b1e4aaa677a3718584c1882a13dc28bd3df45af56f170bda1a3d5ed0ac7146d1c03153fa9118cc49b5baffa508d0d51ee695a9779d6f5ae121d29f0a02619b569c57b26c8e269af56d5eb5a0b9cf9e6a0ff2021ca185b115e476f4498802228aad1e6e0754160312137453260e23ab2822d40bed63a136fdc9f00596269b00f45b4e2fd0cc302e2711c5803cef1325e086036ff1cb0b1121390a79f8c473601d0fae9fd1debb44bcce19e5ec44e6341ba347d430c20a6b099d8af9784ad3688b2f07641173016c59b237293df5e5ff5fe168e3b32ee76c3e5b392c1da00340c8252126987148cf8725e9f538ea58af37a82d4381f9eb3b47dddfbbefaf4b115c57c48e6fc2d994cd8ff5f1e30b876b28605f9ca2095b01ac89444df65df303cd2fb8439d4cfce4b45824c44841b95cbc71c6981f4882e5f6c92f8b3b93423da513c4ee2af9f8e7c3e83e176f7237aa7a432addff9ca710ac046a1cc53a81e86b6db2371faf17c482a80b915e874a7cea3e53134aef11a956a1bbaa9c38f92ba8a448c583589fa479fe53db1f6938fa95cb09e3092809d97c0aebdac977ef2fe3204f415edbd9ae3153dd9cbafe494e025013f5432fd7c8a7a6c25653ddae1ba4498e52b8200d0b3110727d3530c79db9373af000ecc39d5edd07c642547d187487cfa19a0f83e2019bda269ae6f81243e6467c484715812a1784d19fc3a34ed942d8d60b90825c2a5edd3ef10826d227c7ff422428149b92bcff20711169e45de27298148b53a133bf426e407d9708ed402cea9b7709141e34415bc028170388cf658fbce83fd8a428d35d912f93da1ebb971cb61c3c1356e8122994eff5d2e17179640b8f8c2a060056b3eb056470419f067f7cfff5c1c33e3932f64e4a7af03176bf096882bedfaf941a57e751f3de5442bbf5087c45ec9f801fed2d60223d752347bf5c6bbdba9d5538dbbda18b7e421379292018c85974ad9882747df351a649a534518d4e1c3261b5826f9d5fa8d14061212d137293238944bc0bea15b32db0817030329a8fd67f3a51e68d98e469931ae418b36a2116dccca3dbefafeb7020817ce2a0c89af1796f5208b95dba72d24d7aca41d98bb36ed73fcad3e982d961505f4e1f01c6eb15fb8cbe68d7b354c6a1ec2a04e65a64060e99c1e0ecffcf3a94215bf96d992c1c8707f1e32e567737bf411f46ba15906e19b8a95ce0eab975f6cbf374339d1c55bacc8773892b43ed4e81934d7c449e6c9fa46890edcc01d81d64fdda7c5a238a3de26a5e10bb21aff7b46d635570f8c94866e8c4392b0e2cb2f460716f57aa81b75180eced8d774662e395ce6d20054cbe050f40ef9248385c840682351c1703d122b367452aae7b3616f2d6ebdc2dbfa689c74b358617c6c41ad654f531d4d8335ce91543182f141b536ec5f82cd8e8abfbf72e3391e39c91c1b831d81f47c884070c400ce161d9bba4f0e1bb996e9173628732133a14836c7e945f066dda9b6c2c032ecb0cab94bb1061745daa5780a6c65e9cfa091243fd5b5227a6a3f41895d1b627a622770bc69fa7c405e8fc7eed2f66b7128746a4eb5fdbd1e049fc09a4010d75c5aa2c07825aab1adcd9c352f0a686ca833b166edf9215a5dee85c3444c1f05f512c3150974855bd0a0715c65632a61c75aeeb6880fde9ebc5077b611b1b472c7231f0aeae728ef7b6fa5ba0c7dcaef60f662e5c77a73feac02fc15ad116fa254f40d0e96fde3c0e0838fba9edab87a079ed45106b9900ebf4e796e60fbaf19211e139c88196484b294b5fa96da71762dccb9a4c05d912368cb762cc7d1015bbdf9c93158da29bf641bbed68f2d84784608693daed715f13ae278dd5c21f4ce7e2fa47963a081c57770e0fad2247004d2ca89a81ca68ceca83c07fc986f07f5f4282bb1431d2b2b5f4ce2c41a5fb280769b9160844c746a23209a1707389976c26bd58561908475ae082abed24fca8f83e3f6f380495b1e4e38b59912ff47a54b63186269bb0c28c62b3f67747536968d4c40cd9b2daf6d9c0cc10f66239125f1c68ae4a5fd40a94a2e874a7b50752a152cf57b3f69ffdc6ee562f65b55e45d77dea368b0c7b09bac9a98d4717204aeae1e9b78d76ebaef698b11ca7cf6dfd02043d88b14aaea645ff7fa91d14a73b8aa9989430ddc6f1b0e46341845a6d212ad6eb0a84c374c97f6bf030f355a30ccad1675765d138ae3bfaf605c3fb6799951e7c26cc1cd55aae36868a8f811ca5f282db66f2fa4acde003f2cf2e5c624d8b0276435000d9421b87c920b9411aee4ae37e2a9f020336e727dd098b25662556aa63c8d91589670e8740583b3da6cf191dd70b368e6cd1988d411aa3fe7c093d3fca1f2f03ecb2ce5e739bdc1cc730a9576e727d498b873a5ea56a3e8daae187e934af1a730a0ba533ea52638786f940baccc53ed86a3e17c19261247dfa957dcf28e0620dec5bd92e2ee39925e912276e786d3fe611df75df8f671c74740d671a2e1ace789988b379c6b8469ffb63a69afad3491986539de024e4ef1a1f318df1cec5275d197c7b393a37329cc1d40466db5e2319d380d7ebd940651903ea367d91493563751d799913ca24c5454e8bfba275978f00506b2837e34616281eabe6fe0fc033b455f5bfd8d8e5c28eb78181d7826b2313aaa0c0c5355abc97b635539e7d9074de0b36d311c93e3aa4f92f1f03ec687c1675bfdb0b9f69b0579b1aecf7fc6ccffc2785fe4604f4d590faddfead1b5643109b10a092873a9d70b3a2db93f51eec15902a6700f3d23c59a4d3465d77fd1f0a03db38e1569629ebe81745face6c7231306d38c6fd9f1707dd581e9b6824b90b9568cb817545fccf21bf55b2f11f0a58ee9596218a220da38fb5aef05695b81b39fe80f84a0fbf2446e43045c4ff5b93b2ecab980224c733a1331fe3a916c542d7e77fd03fbc1af23ecc013bb1d30ee964b89fb3ce6dedc2fb1899fdc97088895769f190bb13b442f3bfee1a1e65ca63ed429afa54c5265585ac43c41e6ba8f7a1cdfec126dd361b4c071f6c757b380833d2c3f6fdf41af6273946c211cece959e5bcdeae7e2478631ebbdb81ddeffe01fb0422e31c172acc905ca7f0863a16a345a879368ea908a8ab2f0877e56c8f39923402a59f6d6805359f6826cf0ca7e4c14534510bdb92f3fa5df6000aa3b4a8a74e573db59ed78ad7df253a63ef0d9cfcf5a864722697d390cb3cb0ba4ffecd8ec589021b3609fbfb9e77a1c15bc84a3d4c3e175e3487d5e2f9350070abde16dd1c20991cbd6fa7255fd7f383cd686b26bb7db02c6ff369755a8785ca51c322f6b4a67956bf893ac985beb617de5e7e2db5efe579436b0cdc71aca723dc5e60804193194596e7156cc2a46fe9e91af1d6edfd1da1494f4e6ce10cfb29a5f05dfe256eff65edf9c59379116796884e74a6a63dcf410c209ccb0b20d828393989b4e2a2a2242f41d9b21b9e539a36397511811a80d4e68f765b5290e4bc109a52690bd6882cd54fb06d4c93aa617d9c51ac012bc8e982dc79b279d5a761d683767f036347dc7a73e8197ea9e288b8c7b8caa8da0ddb4b980544c3577695c595346b6bd137bf797eff3b1449827c924c0911dabdd646ab52a7a6e1aef8e498303ab297c8fe426ca14466bfeb00b974a9d106394fa8a84c9cef4d3744a4cab8f4e7e92982f211ce8b8610d416e3cbea618f2c26f7fb6c89c73aac36a0e0a49243da7393c7b98a19ae02cdf345b2306df3c1d8364f55200d721848824c532ecebd60f668efcb27d88968f2800fe2636 +MD = 511ee3ba7cca58960e5e3865e895995f988981d8cdf2a0fab5acbfbbaa0b2b5d92b3fd5c920f2529a5739fe85a8d94bc + +Len = 58840 +Msg = b3701aacb50f918b8a79d8681f79dc8b6abbef0cf3386ee993f5a1567bede254794b028577dde83f45c67bdf9873c36052d04a2c03bbc931b0b90038d4e7e672a534025498ce19a527da09d6d268f59164a6a294775321c03a77af6d7252d901bf92e4c121c96be7ba1d4af4d642bb4728a5bfef56eac0beb999749e5e14042850cd6e7319b5282a86f806e2abe75daa273569e3a967ec52b38618739e17af10df4d6913887c969912d10447594123e1e8bf671877b2eea4b2a663933c4122e1f4799c487705fd59e6110dcce9365415f3a98238c8b30edd3d611ca73f7ca4c217bbd1bbec38a7958a21e91962b03a6dd15d82e8a5529325dd1f0d56b0af7edbd17ace14f2fddb73876760d5cc961b1209412fd21477c7a31848fc4996c2f955a91f5cfa8e3ce01b634d39a82fd0402b23bf509e200af0807944b228f99c5b5828104315caddffb6a93a3e3c9445f1e1a83eaff4cef357e3857bf79ae227ec0bd4b64b0eadc8806cde96353602df765c1f26127a281a44f5c6569247574af69738793c8d3fe6ab648cc8e741828516c310de42db3567fedec33b4dd863edbf24d9c2dd39891dc7c73a3a1c031b1f1a3e03d007bdfdc3cfc50493eef50bf890d941f7f7bb92561ebc71539c24d596caf7816328c98914fdd212c73e455954b1def78252ba637af66cb87b2e4db8d06e1311ff6fa6e044d12f743d057154e76a5c83c9b6df026f98ff971a9c26cdb64ebd3c0ca2fc0a399301b25f0b20049a037b6e36ebd2791f4c9c9698ac561b30b21b89f28a7510dd8b73559417fb7256c3623e2fb83ad0705a6b3e5e2786aa27e155801aefb7f91601aae443f3aaa501f43a7e1ee7c00d4c099516d2d45d83812494a9ea996acdce3cd1e7d665d4a584dc2ab36a3e0b3a9aa242a75d7d84ad28c3008dcb4f3795ec850ee6b436217bc8c35b677b86c45e426d997768e8a2300206c0b326dbc6585824896a452e3b2eb4f3f421b98692822bb2c31059de6015f934fda36103be1efa616cfaf114c7c62fb31e6a8c081ead3fb9e8fa99276663f497dee6e690c7efba83dc1f20b2704c234a01c95cd20fe765c92ebb918b5b22da758c031b498bd480d403603acedbc77701c4c691ae0e38852cc0dda8d2e75b95172e826af8afd4349a0945a731b33f132090e99362c3a98828c4e845c3b3150cc5edec3a63def8be1e1656cfa39ebddfef8cbbcab6d54154066362d228675827c7f1c8f253be4706a8501c1beb4447c3b5e1c39f74ed09d20ec4d5b6c7ab2cce64619efc90f7c9f480e21ef1d34fe8a7bcb6897862b207ea8710c85968259ae9e565f7bfe2328671edf2e4ba2164a5734a3496be4acd4585bb6ec423d580a960922759a31117876338a9f7df9e2d880fa88271daf2e5cb89f007507cd562621bb3cc4f10e44dd3b4aa2edec6125298631ecaa23222a39fe06f02f4cc2f74cb03907f5e6e257d724a89aa21d9457bdd57f331b230a4afcb708088387bac5deffe716610259a4e6d0f1d44497ffe4f60d471e1283b3fb057236ac1a5f114c5d3f59da9ec9d0c69cbe9b025dd1f077628c0de028cbaba4e49df77d4c2962f5681d15d717a3f427594c28874652326993d0583bb6717de32ab8eedea17d3c4b60078f9e64371061bd081ee5a6af22460a889a83540b973048417152a2d0e9d8d58d4b92fce9c1e03880e2aff73f4c872703695989f08416bdd6237bd8bb0808492cce475a32953d4c451848a0891dc789df2910b0c6c0f10bd579bcaba223642b447c4df4b7e6d368a324423b131261938a7e5b6104da69b2cde887a40cb8770c92f9f964d0534d3e499b1f4f73c70fe483cdac23213cfb333df48f5a7123ab6d66bbec131257050d96e1422611a80ced599b657fb265000d8422162766119bbe5e369898045e8587199b5d878331e32e8a6c19cf2eff12c25ef5ce9361fea28fd7fe816c1cf6591b502dc3cc2f014d2874b45ba9fd47cdc22ce40b46eb376a42727828f7c2aafa3ac91d176c9b72955bd7088d98a3eb7bad6c817e8a68785d86ac3801c3abe8e375f2fdbaf15f124648ffdd31f3c966c6e49c327b06702df6cce3b2ae781f3caf5d4c2440f2c07cea607da6eb73c4261a083a8ba32378c4b075b77c815dc312a84153352bd985fefc42cefa1c712ac5ff78d601696a18d92511a5fa2d1d0e0778d2a6b4ee2e1634f650624b478473a2d1b6ed283052a6d7cf412dc0041e76879b7195180a58d7ab5329e62eef1625695b52ee54ba75c95d1954bd4298da831f8abeccc2f2f260bead2fb8f995beb675d6dd683b5a3be6b59dfce3166de9ba3bc10abc6a4a73480b7ee2595fbdd6ad54eea6c930821d858dc77a2d9ff5c49278c8f5c2628363d40e22e255a5ca0680730d5fbfc8d4b33c52108cfb63c2e392332d009d40104cbb3333902c806cb6d67cbd588a88c475618f1385eae647df301747ab9b77738654174b8c4c64087ff5ce6931d7e4c3dc9bb14af56abc17000271b3575b9d4fb94526b52743b51fca84e4bb6c166175615145216bf949930e7ffefab44c15e74de4ee1b019118251efa5c0e77d4833b9c18d7315a25135e430efb7812eb85fccce9d9f7abb2f1baf5cca0ece580ce990558c3e5306c9ddb564613d623b841d2ae9a76a57627d643d7823fd125a9b81005a7b7c79f3e6d9cb0abc47f4740ee1b7b9d50def17e3a424ca19545c8bdb433357c1f52e718f704daa689edfe03ef29ac58d4eebe149258bdb15dd53f4b57751d4c6711b89aceb63cdcd0acc87fd9afc9538f7f3c9972d9b317d5ea09c11648159f2b8e842269237fa53526372311f05b23fceaed6b5057b56baa0ea8bd853ec6fad913ca5e3adeeb962404ba8c3cadca3089cc5108bf555d2356bdacaf08cba9d5fc6bfb8cc84b392629a2d319ce3aaf0fd28df7f02444e2b558618604357126c701d1a85c95fac0ebb29b016a2b29622853ca52c003c90eb81bb4b55b8fc1c63485ff514c38501b4d5b57d5ebf7ec9c0079ebf1e6e23439923d01bb236c2020a4f54f76ba03fdb0c18063b11da916b52ed17d45d35428ebea28e327ea7f3e9e9eec3c9944ad5629fede39338db31a3609e6f8cf23be19ae166bd35c1f2d5fb898b751397a78fbdf4ba152ddaa9a79973826e91e46a488f8ad725cf83ffb1607190337c7aa1b41594e865b0ff2e3b761201dc883ba9be94425d8da6cdb6ce402963c3ac471f8e9105e098c5af513462c683801c00df8cd18f60bf62a6ff76c23a6eed4c0608635ad1097913f3fadc84167023f33af6fb6ffc4881ac17c2ef0e2b177b04bd467c977fcacf43d21179058a308db5f1d551960e7d9c2c27e7824d84c8337b76c02171988d61fc557f540caa2b860b2d64d66d4f67d889de5677a7cee8df5a385e9a10a3b9f8e7832ab5c2ffcad69df78bd41d466efc6b44f716438fdf45480c082e9b28b65cab64fbe34f10734412563291cd7bfbd27c62b2a64a52142eeef8a6263ab0eb55f100da28da658f9a12534156a6777420613f7071e39cf161f30720ca17c2c2ab6160b0ca8b87879e47f5a06bd0c143afc5e317bd37f7dda8013e5e6257e6a225a28b63128bfdc1195644381872e1ce474e5791d36eea40c9bda7493625a4f38d5d89dd48024fa7d2ea48efa5b5607fafa4a2c4fbaffe838dd149c78ea7851ea9396304b41806a093a90aae59c0c5bdb170cc9a7d22b90cbce52cc1b105108942df20c29ef3a913223b915e7ebc98ef135adefaa0f0a6441ea05920e868ce9d1ff6c8fe4dbec06a4849e5e55ad0627f9e09dfcbad414a937aabd7ca7bf845c20a2764a00a9fd40ccd7b0f2d3525a9d41a26d7f7ec3c2f629aadaea9b2dcff61c91afa8f1dbe6c617978161c59e2f8564f58cf65a50adc17444fe7a4d43d84e0257695b5ce4410d114e9029c0d30d46d0548cdfd20d2d91c413989a22b425aa9e6e43af9655948c46575dc949837c781039edca7a4bdafd759129c8dfd140b22d40bf34329249da235c5abeb431e58fa1201014b7bf3e5b25383294c93da1fb5b694c77b63ce96d34c80778b560e1040fa1946d1eb9b0313f93336c735bd1cc95626bf8a5b7ebcbf724f485b192e75bb838fb2213dde916411cbcee62be58cc57a6ae156595d95cf6fda2743d3a711d4740b4d24b9e3180c64f2f691bc79f613eb0737c8a593ab690ac81b2bcea06cf1973420c0a6d32073ba51b8b031a1e31a71a6c9c8864786f70cc22dfb50420c7cb2b332de4ed52f01db8f1b2bd287da42d3ef9d3f46a2acdf3e6f649ba2b47bdb8e2f8c67f712cf1e8e5527eae75063f3db89bd132bcba78b6578c8f40c1f4178f3513441eab187329c4be5d5b82706954f1d312e7eeaff614c8461ecd5abe4b9a9c134566fdbdfa5ce185cd58d324c90f852ff7686293acbba3c386c477fee087726948ccdb860dfea6595d0ad99bc4d9ed131d58daee22f7647545da8c4e7cc26295acd4e6f9149b8d996af6185df320942cf32d9a17ef7494fbda541a1556c7e7190003829fb49021d695bf11e3ba8004bdf74b32b978afbf97c2e5a3fc25247a73d0dd40d24488ed816bba58b5a184d976b856374b45054ef98de3bc6b5e549726adb6a4496af25b3a3b6c4f5c4e8b6cc7a4c31a35db11cd9199f2b5db78d4c7b1e5442f5d9e48f561a369883ff82049315b165e01b151a5e0858742c4fb21769615fa349735194688222675e954cff93439c465574e417276cf15c5c05bc73e53be4d768ee5cfc92e4617aad0eb06e750cf51d27f286dbdc4d512c1561142897b5cc2479d26f8e7b47dd1999f0141ae078a432811d642e24b3622b7eec20fe26d6fdd3a4a5f113cbb37d8c4ac5e2cc7d9092cd897ce4d8a7a70ba3c02d49bd3ba7602b13f14a542c31291ae714814af45ba53667976fa00e3034da02acf72c7d2edd76eb3de11644c7c90c9866595cece1c6b444f66e4f0157c5196df2931495755dfa57122024bb8046aa8742d2cc0d2bde91482247ad2723a7a82986833d2a84c6017df76e453a61863cd93054610040d3139aa26482299cc0cf5df0316fe56102d1857433406974720ab9b847e26d298f8363fe2b96aecaf9d632b903726e16f7b29811d8deefc0f25c4d631318fbecf829cabf06b15fb63b04cf68630d6cab8feede57c3e7754def79bdb820cb5393f84cf86c5c9ae4676ca35c85b80a8726b0cc7ecd5d23a2244faa3240d7c21d257635148d941ae4e575f903996a2f68914493a0fc0e591f4cfc37d4819ec700ab592d47aa18f908393f4fea2be145b7f3328c6e6a3f5393cddc68ca05dea0a42c8b7ab94c4ffff76ab1ec39c384131b5562ff0da156d7a7b0d9843d540016b2b0f36491faa1f35980b21a19e9bd633dbebc33a829bdae03fcdad554f46af1d2407935f83d769fd8842c1fb226f4fbc53628726588daa04eb9c6a1386f86f9abe20533159c36c91a7d06442b018fa45ac68e026c48177430ef8731104dbbf6e6a07fa8119f493ac77328d1ac03f726a474d62ce6f0dbf453a704cd051470af2a82cfda13ce18ba886e7a0e5fb294494d4ae838fb098de65ce925bd3f4e0fed208fde1244b209110577e3426a99ced5fa50ac6ed21a9713f6bbd248e582ff7870cf9297cbd28506e5954eb7f53d0e91558d0b1694ab6043c727f3b71f39a818c14ad4b3d1b6f562d0d1a0b32928ba460609eb776845503d7734705217fa7295bb098dac7ee7bfed7032c27f2de13cbcb5cc36da776fcfcbafea3161f24dc5b60713a3cbf9ec4d6f6ac09c632af0fabb09dfd287e9b145b317521f2cdbba09444d7000586b4d05b0698316a648de5e0baa49a9c6e5931abe567320fbf8caa60834298a9bfb93517713841992ae31ce734112a1df939eb6b415561d15710404c765452bdbd245988e10ca8b6d8574b4bd7643a4191c59825dfb01ffc36ff18b4c88ccca6217eb41bb095d5680f42c77aff0e299bea84ce481b17eac4d1a17a45e44c74e76f30eb6c7a646601324e37f1258fa67145e0045e7ded50efb9900b5c4413da1608e355e7a8e8c936e3d2034ad5590f86467fc0e582b0c0c14153428472836aa680fe8a19b6a37d5d8666cfe4a90ae33f5ebc8a59c3f2d8de2b53963afa1ba51d59fafe7f4e150109bc74e45afb05b001111ed747bc43f7baba299d0c453d27ef16513984b9cdd2bfd894e71a55ea047fe01f2e1bd5f4bbdb803dcd54de78519028a9b1c6942e90e47d4f4eaf44284f005e45f5629ba583b510188dc1404dc0a5135d0dc167c79a1c0cfc91864030fe46ee2bd3a887d6eddbec4274cdf53dd39268f383e19f297ccb2a35464bd4a4909812293f5a250958b4673408d777c928fc9c05dab3c4b4a7763771d34c6be3b4886cd69ef3fd9d62d32365c07a42603f281efc78c45309b8a1c74adf14808ec8ac40ac88f27c338abca3702222df9374b9744fc47fd4890ed25c28b040ccf64b58402363f21b4c4ed569bba46dc9f368353e886462c3c3488c6883fd3d7bcacb20edc3d67f75481db1e8d0ddb77bd0880fd03edef9ab38c4347ef52c87477cb6aaac1656d6f4d775e6a338149c7feb62cddbcb7ac0e56a207ef1e4b4aa9a7c9c4a0d935ba5244ae5c81b5a0f89407466e3b3c6ee452cd7dba083db2c040f4afa7374b35b667e42fbeac3cf250a683c32d5eab99fe2cbf2546d8761094ff0884fdb840edc978d2016d33f0febac41832538f30c16465d4a391a8efec2daf8850ad6bdfe65c4bb92c505ef84c9cb86e9dc716f36d7dc5b5fe85bfd0cef3181f1b9f9851a7d5aa3fb94e747c645f482e0b713b1d25b1130a3e0967423e4e0173eebb87bdb89e5b0caf51bfa6cf6c3d00853946d67268197a6c04e66dc5a6332cd0e9804ca21d26c91640859c142a5e8b12077e45da0a9dae8e608578ea6377f3ca11ca26ecbcd51ef6020f86bb007578bac32c93e7ff684eaf048c8b36ed9370e31bae721ee22eb25881a58d4c58486e855598e721b04201d4d843d030ad4f4a23ef7459c1f6fb2e43a48fd95099a1167ca50a6a0f83f26f07c4f16c60097529927564025c620239c05314914f2a4618a69cca4439e142414fb0e08a4e6acbb73996c595778d0c7cd6767dddcf75ff1b0c201f9c2733f81fb584565083391b991f38e13c9adfe09f8df612e65ae196c7b41a539a62dfddb03f289ce686dc2b7a4c44fe1d4ec04849edb91bd477d6d1c6a873ac68714fb99df784fa75dfbdc300c9a365601a980a22ffa8e0cfafbc7abdf011732bdce9548de581b7251742add39d3b5e2e87cfefd3caaba9fe88fc575792deef0e2c17752910051d1db5d5b09cd0f630af1ccdbf0456abbd898cfc313a98c16a36e840e61980f9728641dd93036bbb250a61fb425cac8e65994325cf0e09a12ace98cb6d043d46ff8743c21faf75718368debf3f84d33ee95634dffb7cee6878fcc422d39350d20c4944eb1c49f60293f01c828024d3a191e7e7937b2b4efd9ce8f5acdf6dc087e1f4ccc25278f7559dcba2adcbe3b5a1a474e4a718c53148debcb2d15b3a954cc5af61ae88e57e52e920f8a6e96980256c27b4859aefa031869d84f90da4d70802a28d17883896e1be18a7d7a25f3c142f26de93c953a1a0dbb5f28cbf518fa5def6d765181844ea66db36a6bd6df2583699ea3b6d993f7d262c84f237e9c50aa2d3c701012d925527902d7d043aa9d8c9a960e44d697fb0af2ac2943e157f1f9560e6510a20870a4a5f15c33d6f697c307dc9f532696b21bed635d89b7dc7cc01c6bbbefd992bf2167174e031b33a2cb23fadd8e4440ab99b58642718c8a4f92c2ccfb1a13f87f3d5eed53ca8af25d0981492f42ba0645e8ed9d7ea7b9e1f8e5fbba890bdbba2f6cdfebd3f6a0b31502b2602b1cf2682f9de8117878da93e73e29bd0c41ab485e448c7b6513e6e6794b09d8477977d6b73d477ab68168e0b91fdf3cfb680d336a38c7447daed80cd8572a1a1ae4c4d27b2b8e41bf3def88ecef8eb2bcdb6c0bf1de12bf94240ea6e09b858dfbeb640bfa0d2eff092ac8dce131aad6e7086222738911452f1fc544f09c9edc9109dfc3a2469c1b1ac49f5d349ad5e1f09b6a277dee359dc4fec657a6eee86e40ac929a025c681e6a87ed9a556f729c7ff0fe7b6f61e1f1fc5d7c6f61e6f4cba150270fa8d325818f011e14d244134edba599aec688b91a2b9841fcb039466d29a0f794f43f36eceebcab4d299d2a719a25c62221c72d4ed94bc170204a5fcb4ffb9eba72f51ea900173fb3c9ff4abd41fdfe85ff91b1388bf4756a108e938e9aec86e0a3996f4e69ad25d931ded68a499acd3abe9cd74fca0ed85b3f9a940f80d04ac814908b6591eb183e0fa0605147889cc0ed4d11fcfa1764c3dbe2d3c6986344a1347f15570f5d6142b2087aaa9243f7b91a0703d8c29a952493fbd55c57f22f3c91b97fcb48809b97a76b881ed0596873b36eff6b89f4f40de64a1b29262944da9ad43d1ab3d141ad7e4e0af67835599157e9971dd6d30bd0515207d5b965300bee53cfcdf7dbede4952495f9f0746582560b5d782fa1472c53a83dba58327b50daccca6d8b1ceaed9a839b71ef72f6d75c58a4f30aec30626bb13f6fa91d714a0e839f71c3f0d318dcef9df6bbdd97f0d9361026ef10422308015f6e1282dc47e83cc16359143106fadd1000ebf0c37f3b48218c42ba16eec71d403e3b0ef6eaf63cd2cab0d37f2872b084290678f3d310e35b8bac46091617797438791e6b93c728460041db380db31e8cc781c2c38cf8bc20ad9240a349778a5e15533da4e2c9638dbca287d6276a8b7c74e45a9d0d3127037a8b467fe975d4703d5ff93d487b933c484965e3f5d76be5a9b4ccfae478a8967b0da3e98680fc5d2905bd8f455c2bb44bbce1ebf9a8545aee598667a32dd53c177ff58a9127567750db072569f991983f63a858b33bb94eab79136db9df2176e878c7eda9e767514d4672aa16d2695a8bd415b4b3302f237969f067a8fb11c9668e776d313fc36d96ee6c67dc55176dc984b67a69f41a9bd0c2aa0ff1002ac5fa07a083b79eef3ea62970e94b102064610c072458160ffa3a09aca1128cd0df4b9acfebbd933f46f38e1cc8b38218b0fac0944d0e0463d12db574d58e0fa887b3be41ffa3ab58191792bc60d62964e5ef58ca5eec5ddaa3143c9f17e3f71651dac8c32a1a45be277acdfc5c03849975c72b25d47370c902962597d284e1bec01960b00571f0d5e4b5964914cc122ae30abe333843ebb3521c06dbb0014de655080c951c5b4b33e320822f25a060ada042888f14de2d2e242e36f71ae99a31731f32eec926a36cb564281b0920de764fd72075d492c3adfb455c568dae5534bcd76a29b674a7c4adf8ee9929be0a3944510ca402123d9749e9ed9682b01d4494b918d24ec5a6e06f575c2621e8724b2048a37617dd098e92844113949f41059d4cc5750c8a4f446be7e74e6c20854066169b88a03395f857cd1d7a2ddc6edc390b068e7a430f751653167e7306d19d88533b4815e681792bfcd926c8f7f55cea6c428b127045d701016032c0fbe5d6f9873930f3465a6561cbea95f06282fc33f900076fa2a10ebe8b6b17f08010714c1aebcfc2e36f61ab92e8643ebc963ea829d56fdc4aaf60a1498d7a6c340ff0f286e9910f3e5ee25bea490e0e568d88b9872930f2e8af915bc44df6ae7822da8f63a91132c7a75c154a92ffe9d0f78eea8982074e0d400530a432f931cd07927539b0ccc80fb7534a3c4cb64bac52a5bdb9563f48190f20d241c31e90c31cbd3661872049872d5c7d27dccdbe593d61959f3c656b9c4b98b32574b345dad0bf558392c831be67dc2095c9b2bc67f64714939b064327a3c155d7de73bb74c21d55086a011b260546d72ea9e1c0494bdabd3f089e491b963f3cc156cc7c317f5bb7788377605e7440f32ae3e7548d7c70f219fb89f818a166ca9a742a028156feff5c65979bb8335f27430e30039526be458cea75da8f33dc919bbd18e8f4e78b8f1c86fe47c3c0d5c5ef9f683800c9274a306bde6aeffc05346da8059a0cbf6609317df7df21bb5961890ddc7c40d220528cd62013cb3874f588bb9c80293d32d053a130dc32715e8cb7d0294ae5e05e00faefe78fa197b087757e4a45eaef5686cb9715b976915999f49cbb2e606214d812ef9118f3882c5c9c567b55b254658f31d633117e79ef3bb7ba2e8130d6093a6d7bc95a41885cd795dabc3a2ffac47bfed5055eaab963c489beeffdd7ca8fca530adcbe0c26d69ada71896da44117bfbb1a090b9bde7bd6d3217c0ee5ae3cea6c1357dec3d20e18e2c17f5acfd5c3dcdf2baaa2c2377be53c785f0ebaff852d313bd716f91887d43730eaac03175d55d36086b +MD = be458f1d393877c0c12100466a1215955faf462b0de86618d8417af9a278316f9bdf2ebd1ea1d1169232f43d67d36942 + +Len = 59632 +Msg = dfbbe12e39b516635f3500a9bdc68b8ebc0080059209fc0a5e5c218474c90b6ff5bd063aa4c4fe6ef44c379166ac3e4a11651fc682a7d859c7170e69c7cfff88d5a6b8e084b287d4bc0cb4e40dd36cd14474fe023c284a27f7be751ced9ae210a4fe5ee681889bdbdefce06a5d44fe6d7bb58684689439ba16d9c0668f329e508d4b6215444d21cd83a523eafb06dd63deb11f13adf48f5c4bf0560f55a01990b6172b35750901f0d28de62e9221effe97ef3276b34f3352be8c9fdfe6eb3d1847e9210ebcc5238df43e8ffcc89e1e85cbf7257623ad0de79834039eeb1bf02f694aac67bf886feb1040881d4584513fa55262dba51605620171ea130b391c1e43c1340a295acd544f193759b2db70754a874f6de093030a20cabc07ef4ca82effd621bda043250ed9530677b7ac6270e51e56f37d2bef291ec7e1423f5c7ca4c211db49cc4c5f62d5755c41fbfe11759ca0de3723e7b10522f0c28ca27280cbb7fbca76577c63986b08a07d27d964cf97944eff7bcd31e655cec5adc0949cea031b570be6dc19f8c5933cf4e24543c4ff8210142de85816dfe8536c42cdb848d1f9e8d2247269ca089e976ed54b969efcf28b3ee03d0cdce7c6d592d022bc2e471ee791b6483c555fb219b3a8f245a3b56d27443cd6367f95f1b1e7119d90e48d11ba11476678e2f0562a8a0243391c537a4cf0ebbabf4812f05133ae451cb2cc5acb1a7dd207b9e31232bc8b445850fda2620892f18d7f864b1b3e4e2249e02c8280740096cf22616e9912ecff8b89dc6cd155dc848a6c198b79d09a3dfdb5d41043e679baba6592f3c751cd7cbb0d1860029f6e7a9c56f137d2b03a9d217aed8c7b399044afc99d282544d5c2ce26d8065baef3dbad8739d78da7d54a9e789e7f8f35ec3e9597aa9519b2add9ae1944e7454911afa44517f4147d134d5af41070e9a236af5618e3c30c62fdc94131868a293a70ff69d9b315cefa9ead3f396ae7f04815a0d9916e39671d6c9a71b5c3776d47b9d2e48b36c223e51b72348ed56c0cef3218064d737f90aba25524ec26377b399431fda2c8837b0835a5203a7988a55e341fc5931b1ef1d44802441fd451b9d7a8239c6890e13e29924ded867dc2235ec4bdfeaa8d9df06006a7b897f84d91eb9eb0a923b763d411da7282ba0aa3efb78afb99dbf284f716834e6899b8b46a3b1de00c1c6492a688b61cc71e47b26f312de07e6e725c6dbf68fe3c703c0dab91cebcad9bc0f41a56ce54a4f95d770c93567596ab34acba235cc01c63ade0beb3594b74e7f3139942c9210195737a2ea7acc1c7d961fc450a089bf0b933b60a6965964a4a24778c154f8cc638b2443e33d8ccfa4220d5783c1397a0bbf515f77d9aa3150a7ca659970a9cdb2b425ca200819e182c9abdba8026bc14b11c88edb5a27cbf70222a6a909f5928b64a4ac4d6504007e0f73e74a0e91335e3cf9454db22292ec43e8b25c8b9cb9620f2970b7dedb9b1a65ee00c6203a3e99837c394b5c5b04c4efa4ff407fefb0bb364cadebcff11fcc5f72aeb8f1d7419197c9c150c301bff557c003e1416f070b5c56ba75c2e50d287eba479efde8faeafc5a740a70e723123ec256ab8aab2ae6f4002cd26247f1a3262d61e49effb8ea03a6d7b5005bbc9fe7347e2bb624aab29fa18b8df86a6bc0f83494366f7c0a33405752fcdbd00af2f39ed0de5e5bf512b1e34cf52ffcb9f6677844e0f9fe7d3b54b47c5e7e048cbfe659f53fddc1987bcd2df7c4635f8ad7f660fa90a8f770869376ca366139c05b21fe61ccdee6134253ea02782d034cda17773ba1f6e78299aee6b3312000345959148d01bc49e42af8cff36cf7988e716d237eb18e5f31e8e9bccdcb34f8573ede04fd7b005d8989fe18412f5d8fae424a0e3a3bc9beecf8d64180510a82a770337839a545a171e4068b823bc9495aa14090049d2397424e171d618f2b1fb391fbc6b7fce6b64bcd94622d1ec555e222e34154723668a05d1eb8e7c2115ffa189978fefe8dfc65ab1a64b854cc55f34b94aaa0477cb3a5aa4fac999657a3e9888f17753685f46e011aeb9a5a58a9fc9ff7247e8950f8b0ba3c50dd78689c10465f2ac111792eb364186f69bbf4c26c746d5755b47db86001675e59e4be98fcf69c1b593bd21bd4589578acd62b4fd18d79abbc553d731214531d6567d42b0dfd9871a3f22b3c4f33149fba556692ba2faeaa28e82aa965777226a67e43e2d1e006b647f0df109298083d3896214b84ff6edb11e9cfdbd88f570283948830d7225961aba488293d0bf2e99e3505dad0515ca70de6977ac9d0842983471b958c58f2fc45799106ace3771d61ae6eb11ae9daa6734b1c16d7ff6c043c1278917fe875feac0c940970d2d751196ed67ec31d7b41f893b8208140714b046319b5105554e155ca0bc2173ec61d2bf2c7846760b111f46d06383468563672d58960ec24123cc93e52c10eabb5ea2fd6dc7286581e8efd1380ce8fcb6d8f1dc6422561d930798cd62376d59e19407b876fc99e6806218943b243f1ee498d5bd1de832fe92210072dd863fa7a72a8b5810bea2e151a721f5a0548e9355ce9b364a90a94d879a8cea1fc18ebe5549b64503b54a3e3dde925e3143df4551a0ccb1b5c2c4f2ba99c49ef08f628533180fe7178a99e58a30f436b499391b2236ef9524258ad5734731f41798c4e488c01ea714e597be80c4cde5f200a5fd0fb98c4a606103defacb5a555e85bbc39e686bebc16d4db269c3a8d3b31e29d35f512c38311f37f6964ec72a8bfe500abb397f1ce7cbc2a78b540a68bf9bd0855b2556c75e072f0391f801d967aa8aa1285be1a34ea7fe8630a07d0cdd209ffc4b5e925fb1c0f2ee31f08fccba3271712df519e6bea70a389ece8827d755a01e77236868f0f388a0bf5ff9694c3d0d60112fb04fff76eda41d07b42173e1dad4269d614ae447fa00826cc81ae47467571e322d45d8baafb1f77387627a6d5507a1f4046d55654ff5c44083464c7f863f9a26182f131c594972398b52b3a01a9d314fd9390bf48f69cb02b2544a0572fece33fa777643f253d8824859e82330801cd66917cd9dc243e1dbdeaea7ae347e027f5984cad882b66f7545e0df9d9f96aab33b6d6408f16b4cf38ebb2a24d3a57e35c0bed682125c803b0a4d61b770c9250bd8a499dc24c854714ae39d0c575d897bb48d64eaa82c52fb1f0a3619aaffd309c62532c16144437e9a8ec611c98d6c79bf593ab74f0e2fde0d7d266a5522fed28f57f761b2c65f4107246fd9301d7059688a21920cea5d0c5b10f9527a19ec91baa1b2611e37f2e3180d5e0c94f4da403788e123e9a825ac912a767b1fcce56cd06d296cad7d428b56b25c53fdfcf558b5bc4211ed31cfe63732678a4f23338b582225286881986247793056741c08c9698c0c05206ba3e4d692922a0f061d17da276e3d562b3b9075cba4bc003c5abbdc6106a68b3fe9cbf5b1bf01695dea38dfe6cc548064753c68117e2daa44345594a4fa9d3595e8c61df7b8b76410e315eec60715ec128c8ea6b18753791ddebf1bbbae912756e9fad5cc44f5080750d78f2fe627a41ec9afb91587d375ada022f910ea2b67683492a5982a635e2b79a54a893333b07174c729a34658a6ddc2a6b4097813ffb511b415c333a86d62a5a8a83db4e016f2d5fd7cc58b8815968b72d6101ff0f624c889aeb5276c3e951d0830b132d7e088337a3ce21f0bc9be45afe78ca66a559ca038f7d7ce59d7ad2aec6b4e74bf161dd866f061cb8aca3e36846de5d62a2307e2e9798fef154290127cdf7c4441be980ae821ac55ad21ffa61af28277d8684cd7c6ba46544887281de216a46805e2e01228562a851bd5e8df98fdcd511c2d53c4f44465c39bac5b9543982ca9b289df384f1743257deee02827172d2b9c7904f49e9f5205b5bb13c0caeb7ecff0bc7cc385ed5ffb7a75d1c8efc60ace035447aeea5177e240bb37e89c9900a269829ffdf15ee6d1bb71a2081795cd03f7c6043900e43b21e1b5af53e42a1ceac2e3302cbcf4406de7ea3b30c809dc9020d823de09e0058c42b06349c824396ea6e718990d37d697a7e8848829aca03d28918ce52dcb3fe90bb43b147011bef7bb973d8c0dae0e19a3746557630581d4b4fa2796932f5001e4ca1ffb0578154da9fa884ce4e151ba8295c6e79d9ce81b6f19dd386493a09c73f8f745afe2a5381918e123b9580841ed548f7e00fa3bdcfef89415c78097826348ab3b95d6d680b3fa3157b49c99778bb7a865b4a6e3dd0c9f3573e57d9d7a5ac22325e0dc10ec1ea75e31ff346e2405c9f9e4e02849e73f14a99be6121a4d006d474bb77cbb45032752f9bfa8ed10028f6a42ac09d4c13f61d6d5f1c776c3ff5100f4433f3f530983f3f71f8180022b13e4c941d0eb35b58ea6692e2519a4fc763469acac05ded9c22b7345468ec3285c4dbfc705f80949a1009ec6b36bb8a2e5ccf3194c73ae1aece1b4597f7f1ca0728f6d65316206a2a4cbbde1f9d5c796a5b1d8b2a5f28a750afd0384b4bad23b5e901b44db91f4699ef10ea680bd9883bec960a141eb3c922366a8ed6ea9b0a2273a118c8bed9b459859d93ecf8cf40f39fed50ba8c48a183f06ebbe34b37d7dd5739664c9dec2df99eb66d16faba3e21d377d1b60e73db066c4131c8f4000737125f3f41ecc33dea98ffc86e6806da5725ca2f6f3ba1d01a1886a3106b8022d01377165111fb4ebd02de585be751a0040548ac7e9a7f1b4f73a362521844b53909156df2b3f0eae17ad67f77ef1719a90097db4c814837071c3c020680aa38c231bea89f29409ce85f7cb04af5c3b1c6962c5e51a6b99de1609504964b3d280c4bd778cf0876cf423f459d3d81d402dd447a9836613fca5eef52ec89ce79fd87a5f4310ad7e01c7f88a588d819e4876d8a070b63574746e016fa1c6980fd43c4ee9973cb0e28ef00ca2125933461b9f7d5563a50ef6c8e15860f26be19137534643bb38811cdc166725cd60747d804fcb4fca797901c2a5faae6adefed791c66d55f72da892b3e212f9d2c9cfab412ecb74ed59fefd2863ef434f487747a93cc8089343adaedafc140869bdc93824e584ad136e2652c3c24005e9d0d54b495e6142d6a119d71b0b7538d964ec8df21cfee385e078685b6bf4de829f9f4a37d43fec0a7074743cb73d736ce5bf10727a42fc8cd67da8b80513b560dc5dac3c456aef75d744ef06aa75a06869ca2a6ea857e26e78bb78a139a671ccb098d8205aeb315fff13af418925a716179643ac4e457b73efbc41dfafb3fc0e43d638abbac99c120f681cb5ff5370be18aac4f61315b1e563086c3b0e453d6ebca233a50d0c17d530cc9e29b209e2a8938e13129fce6a0afb255f7aff611c34438131d5fdbd89ef8ac69d674a4ee71bb1cb9ac89b78902ce09d8467291181a702fd9a0430e2dca944de8135702b66619ae8c0e2af1c0a913af842c9355c54101e9dd7fa4e86f74b879cb25ccca648c0756dec2682c1c08130bc0067ca4b7db7c2e94e7f00aec21d7a8999a405ca73816ae3885ebd6f9a46ea73280a91e4e5e4146a685bee642566462c9cd4c39cd0eba3d1fb50072e802791a4217a313172df3ca78d55bfaf0870120d24b6b026474845bfadc509075a6b4dd8537f533a0def632926371b98538107b59a10726fc1de7b3506846b01105b459626e19f069f5eb17699c7ac25eee24dab64abb17f24f76bbc6e57d4258a3fa2660267bc9d0e724d1850ce1760c1db0b77ec4f165f5ad93ddb4d04ec7ab15f8bd04fdb530744746097b1130751b5b369a298c3481649cc1a1b0b545c086b02295d75030b4c27ab1179266022ffb0b490b3d2d1f0acdb1a2a03100fccd7a171a494dca78d75a1618948167b10729b24a832013fb62af609941bc4fde3f03cf523feec91818a99dcef8be92d7ab25f4cd8a88cd6419784e381eb90e54a5a22d4ce210e888d91f6666ccb063e08c8e274499cdd5e3afb6cee18fcda91a91d3d56ce87a8535c94a245288fd77661bb0ee423965b9f485e967382d50bc7a74273c54bb824bb949a84c14a5fc39d2e93cae38d1e6e6114c9eab9e6fe8c50eccfae676c3be888deac8424fbc3327a1658fdbaafbd7e6b4643500a6d00c4f421cfd5865a975e82e1d18ab462448cd6c21391b2b2faf38685d5b0ac3e621a7aee47d0683d57ec7046117ebba8693a79d9cc6d11be5e367a7986f2e883acf8acfa4187553c00fc1cb474487ff4bba22b0489791ffa70ad0fcb5efe066167c550eec4e2977f1cf54cd403d1496fc12db4eb549d268fb8c10c2365bc4e021ae82f71d9c9752f323fc94ec5ff60400343db3534c16ca5beda3b28a415088e4dcb112c87243674cb425bc9c3bb0e91094d698b32cd3a620b61628322ef7b2c88d5bec6d6db23756e65c9ed03ee99875cb1279454a9d8f126bc4adce734f005546efde8ced6845ba313dd638f7e4a4c83d9daf9a43e8e789755bbd9fccaaf4138fe973a78fda14df3b15dd36f556908062b4d612a72a420e7937d25689b0007bded5563db39c174e4a812e4a9593ee26e114775ed2e61109ddd5766338d2b7f69a4fd0cff702df80060c43f4774100341f28fddf55b0f71419d1245668a77d3c78957dced8b2e00cf413b8c508d29930a36ee404adff46a5b3a766908792e285c052d7cac730ab4d8b43e72cd8bcfb94e442c46f5a45824741c4b7b214196a9b2814593440e093da31f9799c5584b9d97861198fd9085c613ab5922baccf77b506368cabe4675c3b8eb0caa40dbe5686c6364de6a8dc279c14f6807d9019bc9be145ec92102946da081664d47fce4425643efbf4482566505703fd189c8c9b985fdef37752ab064e2476c29e0a39252dc8e78e494568ab16776a729cf09c8732c85e3bdc3a50fd006a7e8e716b835c186adc8f562f3a6866fc968b7b5ace1203b130102125df9d89408a02eee2316b6dc06a799b440f20ba6d14a22429a5ce83a1112af6a39b8a415d25ea772cc7d5a6702dd789425b56993f615137eb981f2b2e6de6bd321935d116ce8faa99cb1d5ae09313b098a39c7bfa1903172f297672bfa2ddf56fdd12b0e4006ce9b79fc4e39846c8a1b57c44eb0388425252ee86e2bb5c7b2fab5bb3596b582cb514ca4ed91d9560cd3749f25f025b9969f53ba303c7f748dc83299a43033239ad2fef2dc3d72b76a38ca127607cef72de94a56d5e5c0fb18c65ab39f6522b0e326752e40c5b5574c533f64667b9d06920afc0484afe025fafe16504fbbebf24d569ba044b20cfe582abcdf1fd6f8ad6c0a500c652047badc784fb9dcbcf4b1816957900d8bde7339c82ac9c99f49b563f22db5a1c25d82653beb376df0a6b427679045c6d8937f95326f6b8b5ff7e720c97d48601d8b443e4fd4102ade69c5e6593008952293ea1572750d8e9d6a094b97270dc9b737ca0ebcf08c3c0ea6aa66461e21a2ef457c608e22f7fae10ae38c65134c051acbda7e8a29f5cb08c32c503642d816ca13fc1f916070f6b43f3f893a294d3bcead3d36c26591fe552a134c31847419386434f98016c1aa9c71e3ed1e5157945947bbdd6c8eaafe7c41270140cc3fd2c3a1ea97652c333f2308985e1973b43845ff1b1b8e8b86f3057230186a027f6af230e7a047890cddd16c26843477aa4e1a3f279a32446d047924f538b80e7d094d7af3bd2f1794ab2d055509764582ff5e6ea5ff5fa1a9595ebe3f0a30d881d55de7d59624bd15d2bf3ced92e8c584729bf35ef51e8a811b3faad636dd49d3f9a9e057d22e63d57a0f77b5ca90e0f7d058381a2276e73c72a14f8263c447ba9bbacb3f1955f11dc9a61f7656787c25401ea4a02e6fa023850e150b39efbb80e416115615a25035ea0b9df8e1a88254eb749fbac2119d7e7d0d643862658e6bfb471b646c1c666503c657031126dbcdf8e2912e8665c7958127a4d2832ea6c408d55031c6cc1cf53d60b75f8efc6dd890f0e2c5217204afbae23da14753edd235461784ccb85b2cbf6024d3013222bcdb27fb473c403d1550c9986d53db4adfa824da2725ea0954b24e062912cee1c3000e427c7ed85b106a611bfe52cea43189f600e07a6a0fb33db3c42768da9133282e202c904144e630342f1cea34e5110145f178733e56918915c896ac5d1c557a0dfe1e1983e2dfcbc93d8ec316f4c7389814b7b770c538bdff793d856069711f35421bc2a71b4563a8ab1d867bb99b5577d364ef0843ef02f63fe69cea60cf3e2e56eb33b4d95e1f5ae291db6c1cd5806a9549c20cbafd808482579803e9b6007ea05613b2037428664bb269f005bce3fac32cd98611ab5e30aa5923b3ec708daf8a240aaa81cda6544d47d90f5c99a3aec3d6db7d3041c5821fb4e20351430c497a1cc2a33bb1c0ad4f1ad2d109b4eb0ffe0f71faff07dc034a307ffa0078a5d2da07e0a5186a9ef7bbf1fd3ff455e1a4dc9e43046544cc3a9195a2a1e25682d411ad0fb8033f69bdf895026006c4adf5c64df8a34d42bcb05daaf2fedd27c8d687d6f5e5e17749846ece883d2548788a22e239df9c47d5eb1738181cda31a261a44a3a339b5b65d6856337dc3a2b6aec5926adc13b9c3e752507bb00c2be36fcd0d087ab1933e63aa51eb9472eb3aaa2d4e1fd50128920d6f1df84b47b14ac2f733284534347f33936c5b386e7296134fadbd0950955a394e1881b3fef7b2d82f536d83501deb55aa021d09f4fd5b62b32dbcf96094aee395fc927a9043de17ebea52b593c4154254bfab59c4dfed20de6aba25df8ae2a4dd26c51faa4a1efaa364627c5dab9f722a0180d84c8eddc657d11f0f2c0ca7e56a237403bb6ee7f8ec6e37283c58cc6da05427e60aaebfdb85fd6615b47e613de36f39c74226dbbb3d442b49be302ead4e342b037da3e5d90f3c29ea2774a116cf8680fabd066c9a0ca2c96131e658b98a3de4d11402e2374a39c4fcf363d9f894f5d3feaa820d1dd0e69bff55dfbd0afabdffaf7c40578edd72e1ce86e08e5bba39bd43891e5fcf30ac1d949880ee2a0650c61ef4e098382f53eabf706f40c8d5deb779e76fb716924fc891586e4e9f3372f2a04c6846dbb6695a703e6473c84e313d0223cab59c7c6e1796341c50c318b0efd3b14bc5d2092fbb615f6499c2a9edb86cfcc3ddc96573a513aa0fb73e1c873809e20fa7c3ae13780341e445506f60d42aa0ef9215d3fcdb8a38bcd478b56245e34d285f190bc13ae68467e8ea0546fabbdea2751a4e56357a4ea82b0b79de93d0513a7e5aa8955e8b9564070811ecb6a0f490e93f4b3c3d648a563d5ee058cc61ac9a68011b1c6d53036d22330bee726a811f710d310b7dc94a5b8dfb7f6d3a07adecbe94c9d2e1ed4ce7cce359a8b88912c2af0cc64051192d0c9f59bd888732d385e49e3b4556bae06869a191c8137d180ef5a6418761f490fdd40211371e93cc1a7c75f5d0263c4c737ae63aa90dc70f78e762592d2abc14b3de8d10f57a8ae5fed8c4702ffae20f7d9339bae7f1f77784e6d963be160036a3214333401588bfc7ac0230a12f5ca80b2504a8f17a7edea79673f7b6ae3165602ecd0eb39a2dc7f94897cdd04e0c8480b2ef7b5201dda37558ba9bb37df02f5f5992f9ac52ea8d08412d8e39c1624392bf42a88622846462b025b610efad0315543d8ab6ea3f7d79281c284a440e63a5ccb6b70a4713aff42f4ddd7b8dc87f068115484fca9d17c05ffbf28e2051432e4db43d5b0a0bd4ae488b883fd2e2f1c782c2a8f37ea3fa727b35937200eb80b0c4b391f4c5cd80f57e673cfa498d19ccbbce232e70b48403ec617192402d9ac1c44d6b6414d9236e437962277c17358a9e805d7d3b7f52f935f8136b68a80fd5ceda002561cf3a7d3a3aae33c5220385cd81ae5c4944d5c6ea720f6a04eb4e6136f216c5571034b6c51367cbcf2dd242bb5a9c4824a58af16c67bc2a9f57d4f8bf1e15a04f3cb08f76ac254bf4ab4045da73adbd5821e11d5e31b009828e3200a9c67352d4b52c7bb15d6d30d02acc03bd5569485e4a868f126861a368eef41d9973b669621a071017bfb616dc1cd400d6884565917fd9eb3b846764bd0a89a400be553081cbeec11c3b866a82f206d1b874d8a1ac4259963c1e37e9f9517148620ed664ae4b3223316964a86f5ac2dac5b3896909229434968e398f9864295f5fddc06262287f9af9c1c75cfbb7a69090ccde3832a1082add6d02e224a3306d3cb3a9a627e435bcc7cd2504b28900a7bc194d9bb33e240d63331a7e38af25069b18d8cc79fee2fd3df4041c2e5f8f648a216e0ff56a7640da68f6b02ee8559ffd85f431d2e905d0cecefb1fb9aba17b8d8da61193b68d69a5771e2471df60bdd6837272cd232ccbfcc6609bfeedc53158b68c2cf892d7ec56f5f747cc04d4d4a889ea0bb34da6634a62dafd6896894a5e2496deae8fc44d616e189677e900690601b1694fb9312b3a3cd0d081465c1b20604c83202df1014738089d200c9 +MD = 033a5e38a60f821bfc35c8ef32c48453e4dc3fd7988bebd807f1d579df4360d488d097eac9b086ff1099a447a2ded1c2 + +Len = 60424 +Msg = 5555fd795e956fd479ff3c8751e38af05c2f9c180ed9a3394d7dd67d2448c409bb14e93a87d4802ebe3399870e786b6b8eadebcff5009ef60a69ab345b8d34f832e3e60ac515cf10ada9705799e014d044de6059a40c2a3e65bb8f00950a3f55a1091c6f801e04812ea8ea805ce32c27660c203d85c5f01a46baa9683a858e27efcfb2f320b8c68a29792f89bd485c76db7d5603fef2989195af22f4b2c7c976067dd11e0dabbd32866566fa26d94bc78d792834795dcaac3ae2212c6698974acd5ba077afbf92812db2b85cfe5ca121634abe575dcc2d721d9bcf99bcbfa0ac2cb048866fbced7f06a84c35ad9a088d453741f4120869eb262253c21d068da30bc6f0d3b3697535fa914b109b5b26111b87d99400d9271f3ebed62ff233063852e3c1e7e48fd3aaefb3dc723067a3b8cd83adbe8f060f174bb98069a10fb272e950e3496bf6afe6ce5828e5d48528874473e6fa2759c8da365978f794623a59b9557d81ae66aff280c656f0ef7f5d88669fabd03098fb70e8e7e76131f445f5a839b71817a77ed5ec458f1ce91be9c21c4e25c9128c4fe248aaf430e28c7c4f9f46ba950d80c297f91ffbef2a22753d4fc97c6c35fd6d373decc8eb0ef4876e87c2ae80f7bb2441919ac1f31a5ba802e559d74101b3fc77b1f38a1a1cf20d5a46f6bb623f1e4bda9b000ab021902b18c8445ed1df75a5aa8b096346764fb61cc62a07c14c72e06afe97fdada887a587ded23ba3350c10d9b3747bf683d22cbbeda6bd28867e8afaa4a8c3721509bf58114d93406c41e40c107cf9b2ab45143fa5b1031c550cf290747a8387d2de219247fb912eeddac9498c6b0602566e19b1d594012721e2bf375657667545ce723d6a265af71f9f699a0e87c96fec17e1186598e1d052c99af4328594c3d8a15a6261141922695a69067f1a6b80d506147c3c02c89f50892bd1f04d34f9f21e8307140df43835d17495c56a13be7a045be5441de01d84ea19d579f76e9ffa0f92376b5b13c0eacd3050c9c0eaaf41d85e5c643051d154b40d08b3cb6c3e5a3a32f74e459f42ef16453e736318dd934cc4e88482434429aeae738711535d79670951a512c047ae745c68ac9dc4d0d92635928c5cddfc6ca2a51ddd104e85bf60bf4c580b9d568eaf1dd45ab4160e792f5b61650647838356990f9e11823d94ecfdf04f785ff7f78e2f8c66f13721dd2fdb5df5c8aa61d892334fb05c1a0d60d26b4673a12db251db3b98b99c4f916bee608e25ea2e1cd1201be7fd393c7d8bdbb055aacd3010055ce8fe3afd85e48d3390fddeb3fa3ed8c7f8de6cf011167dcf7426dd45909879dadfc8d05b02a4aac713b1066d374f544e723de4c8c05f9f7661bff55274d3161cc7fe6500ee58297392b2865e0cd5ad7e320b4f0a71e157971d2ad83a044744ec49a6e032708974fdb50947cea25a4a1fe05094ff4e220efc506f70456a7e6c100dca283ab0bef22d23bd3007206595f924159bec7cac2d6ba394a3bdcb00f451ba712760d77f0bcd85d62850af7ff5d3a4614c1c26071aadbda35be852534677f8a4c4eb0d5527a3825d19f0772ed2760b3c8fd672b93f8a48a37f102401c84a716ae72579c6ae79c359ea309ffd95abffae4c61884c03c9e99df77b6c92e492cacb7854445c0815efd283585071a43828c06b069148cd344a98ab71508c0116aecf60c1959f9e3fafd0ccb0b11468e53079d40db5330791139c833cf879869fc37f85b49516d6c1ab5cad7feb6d497cbce26fbe1b9718a9ecb267238de0ddf5b1e2d0746c4919628a7d0e0f2504b0c377012560ecfb68447be03f6d374a6de02100294b41c0d0e9f53cd7a68862038406e0dc3d4fe85f2a6b30f3631d3e9e28bbe2797f3c04611f939ff08d3c0eab8514877d9b6de5652262aa6b4d6844d894268fa659879c36cc0db1410c6890118f47fcf1c36e7ae2f508558f733fe483ed0b0f9a214710b5b80a77b26a34719c6947491efd792f3e6b0739481ccba707fb116b3b1fa7e948aa33fb2cf1c938b3ddbd76ee91b68de14c045e7c913414cd86e1aa739bcdae566b304495e74f6dc0b1518948c64e1b3360aacd141ba1b43b5622d429dce1e747c4a85ad795ed992aaeaa8c13e569619d6f9e8df9003a0dba327df2452b0c1c827a4346d843cc43599c718639362ee885408ba6118829a9b3e49a0baed075d67158aa0f823914f3b5434d80a101c637549c172146fd93108c3220274e13469c7b2585bdbbbeec31a66ae781338e59d7734bea057fa5a3c8afe5b84e0c3ba4f708a87b596d1b7c8694dbe691d7240e4e4815ad5aa4ca7e5b82c50989d092b96e80aa35e97f99ed79e75cf3b8750d0d263dc208289cb24f516f99bcdf825ead894cf35b78d97e679307b6b6fff58f7fe6b919a27851a53c30dc2b78590be8a8d0d24b940b6312115a5cb1d66d3ff38c1724e32451aaed6d823341e6fe5178d1cc7b7a88ac059f14584f14fc0b3c815b40e5e835bc8fd10bcedba4add63d565004af47e062a76b981546a9cfe0d28015e966f07ec0e8983e9d3c1c76e9b7c94e00d77c443631bfc418aa36f8f4ea3ae19b0ec3a7659d8b2d76be70e940a81af34959df5b2e8be3c0e9e4841e4f6df5e8dc452857b397f201e1c96aade2f69266669f39ce559d1fb5105a5beafa41fa513773e936b3bc15e166c5d06bd78b77d0df0f5144b050bbcb15768204fc5091453100cced6cf53bf68e1a6bca284d11583d13f166498afe29819fc3135d8001ec54559a24e62bad68e0300373dc26aa270712dfdc273432f8dc3ce4bf25bb946d27d81a822a44b45ee570600dfbfd8864c574e44d52379d5facb7aeb25de890f132f216b03f2a9600234049418eb9f43800a0c862d37987877b77e9910def3e9ffe0b54562dc39b77240987b79b4436cb3e0053c2b1e43a97d0e45d073bb8e6a0128c9e1bfdf90deb7034e3162d8596440afb4d15f45ffdb83466d1baf12ad01bf6dbbaa7b6b232838d27220749645ccbe9f97d05a5d117122e650f52362f4339336270a360d85468054c0f31f9c9cf8a6562ac38ca24d1cc4649dd7813ae892250888ab70452b9c2600a713d449c38a6059fa2566e3f730f047a04d48e90e8fdd5b4ce8aa908a9b824c80fd233c5df4a51162708960a4502f1614c0db2bba9f24b5006c557e26e72dbf0b299cc2d0c9cd23003f64c6d8ece94647ccb8418132b39c3f80f16c84f190ce9223919ba07c40f55fdc79750989a75ec5eb80e8f70cd27756d11efa293d5401b275b225517eb91eedf23809ba98f1d62b87a570906039dce2c73e95883cdfeee89a7eee78639de616fb40d360ad5132c53b9676c1ff32436ffdc0dd2672aceca0fc485569ad58018761f48090393dfb4f71e47a201c54315acf462f987133817835bef8c9ce8ff79bb0f39fddbf10a606b50fe91f4a283d3fc64f0b32ab1c53dab13346fd399e1ee082ae7f8dc181b9a79f8942342b26bd8b7d4bfe9992cfca44f955de98911b0de23185ae34c309ac9e7be123e311c838ca5ebd8841dab66b4398972e10477f3b1d5829aa7746010547e497fcc0b0953588d52426afc5689d63095793e8ef433cee610b02a9cd104a50642e3b416a064a239b105857e56ef70fb647cea6db0f79f1e69a3560cabfe23475046de9b0a3dd36faf2abbedd320ec639c82cce9d2c78b45367b120b158636091cb132e16e6654f8f4b7f68ff4a3b030e694cc4c832bfa221e4045e2372546134e2b9832f5688c9c29b71daee2ff262ae9b9d2dceaac547ecafbd9da3a62bb2e8dbdf8d4c6cae222f62f1890c5bfb4184ef9c6e330d10221e1b4b53946c6fe22816e3a100b14c0540229cf7dc468c4c4bc5c90a77c236ad30c71c14782d875b7d346462ee9cf8df8f6ac2abf0784bdf4dceb1971f729f55cf33ce54e172089b42b4d04768a82b0d779c1119db79a077156ad4788c86b0b833d1c09942d26a2e3308c5d3016b593b9346f6c5efc330a03d1ab033619711511931a1562ea73290a8b0a37a3b4f09d66cebe234bfdd62d71f5eb36c10fc479cf9c3cf100798e84f2e4cf7c188dbc36a5f0b61eace30bdb856b77c672d4eba182018c86b600ff1d63e1e412d7c9a0c63f426045c9d55b7905db579d91906ef3f56912bacca84f5b252d50e3288f25b5fd6bc381e9fc4c70baec91a1666ad6d9ef7dd576899805a5ff6e1bd55307d16ca514e7b8558068286c472fbc388ba9ba37e5dda337f9a965ba4d4ed29f5b2f51ffe4d5d356883709e39438d5511b72fe964832271cf2c3021e71f0c156b0c4cdd58494bb323c407ce67ab5d3f741b60cd44eddec80acdce4f3830989be311a49ed9b2c5631c50be73fa1ada07325ff4eb9a0e5d8ad4e7b73012aa2141f03b82b10d2a68e9d4b20b3b4b228230df0d42b0ce652d5ea012917100fc149c35126dc06d1094abcf508490e552f440ccabe0b97c72cca7eed6d38e7d97110f141edc5973f5d72d8ec4a0f1431c8ebbada445620ec7c9eb239cf3e4f31b751f0fb944d8bc5abed37586e6f90effe005d49ee7570fd4a3bce0ed79110bf9df409a8a3dba90afaa52160fcd04836d66b3e3e44ce4fa19c881a930e99f22a2ae28470a2d9bab75281e02c7d9a06af5a14a5e2cfca85807c6dddf1fbbebd1b6601a97a1aae8673bb69bbe57934900291e4d95d16d1d943f1d2614f276938395a3abfef93c2d5e73e45f9b37608aed683c124d6a14c1492039fecd618002c2d0d7610f6937d6fbae2fde3bdfe7d2ad33994cc75f9a1fe14bbbcc7ad58ed619e879be2b8a4471c95b07ac12c98fbcba2ba461a64a53a5f7220123afe6f969f35d1927e5d4d88a320aea2db27cdea58eb0ebd56c82d7dff543b878ceee365ae9af2442c0c17a8cd02e65e78d723b39a553ee3c8cc1ad4a660120407a73ec05574f29834ed880f62e46097e16424bc5989519fb895f3a61b41b072f15107115d6bda75dd292a252a6d23335ff5586e5c2f4fd86d4e405b279d1ab79313c7bf8f28b1c570e88553ec46371c38b246316dee4178301d8a5b921d5abd35160532b1537f6f35511fff7216a438b4c4766e526e2e66492a570d2468766a1f8249d28b944d5b748d8293828672711d53708bd4581e8a009e32dba42779a8987e1c07e791227175c33675e53eaaadb986bdf2bb5419cc9ca1a02cdc01685ee93204398bf506997f1cc10f63e554d6d286e409cf092814675a2b69929f4d745bc78bd0406601bbdcc0adc7c32376d3ae7b6d3ad820524aa7f25af88fa82fd134653934ce8c1cbfd2d68207cfa21a8c958ce1ec9d40a056a591b5429bc5175fbc3395cdfd115e8daa87c6364d0747e9d1e1c686e7121820a95dc5af7d9e0c053d5a2704959ad00dacfa03bb06fd06d2a9a3a7727e3ec591fb8111a8ffda16abfd02773f5dd278281f58c000c22a5e2f64fa09172a6bac8fe2232293e7213d3945510ee71e5e60c44dc8866c483657e84b0d76ddb341d703a86c7ed9fe1d8a985d727365a0e990ca7c73dc6762caf9e5a605752ce06a4dd69383afe30c7404ae8d8b2e1fab190e23f5804a59d68e4d0fbd098f6c7a8b16eeec903d18d9ceb4641dc5c87f0796e4b5001858aa6d295a4cd7424a05494f3b35fabdaedf2cd4a0a35447c8ec7b091a6ae4638fc3ef4428853dd83160155bc39207308ca2cf2dd2517c3ab6ced11ab629eb88760a2486c0a338f2c9e3a65ab6ec59115ec888825257dbc51b8ccf70c2d95bb096e8d498298c0eb89cf7c4f21c2d3989adb9207b269eb9117d903eb445647d0275c6c6216b2a0753310536cbfe3cefc000dc5fbf580d60456741e58d48b199a79d0ac3ca8f636deb1073c58e6301c3dddf9b0cf7f08b178a5e078ea4d2a8f7c6961e933b9c2186a7c2aa39e35464fd08d25df1caf4022508ec4affa0eb31de88e668fe1b9a4b9cb0ce135a71d84de46b628bd4e16e59d3e69872012b9b3498151752cc1292c9f52ebc15efe1f7a4c12b168b7ee36578694deae75ceaeb996b94b142c4ca8b83d9481517c2dab951dc7377c6b779e2472f646b12d887e248a02d3aa2afe88d6092265f839905273c7d690ca4464becad6c54a2593daa892a7e0a3cd95517a04b67f125c03d0a484eec355d8ef5008b956a44182552fae6254f503e4f7efdcd299fd1ec367690256d7000f2ea8a41c7e46f5d53dfe0200422592ac96cf2421be383ed3e4d0b3fc48253f25421ceb5a983c4c6ddedafc3e80ae6be6498788f93615b6ea26dc6c12f76db320a9c8905385ab1a83eb9878c9cc33c34973bda8c3b8b6f7ba1fe6dbb6e2f51e99cc283d87d517d2bfca930232737a3b5eabddee01d49063dc268c9d88797fd3e93fa83d77e517276a127712f914c6569e6864d33418469dc8d13a2bd8495265a75ae53aa4540d6b2b59a1459e2ecc97712feee2fad22e17f8a68c0156c101564cd45b9f8da08f206be6adf4823fe1607f68e8b7a6b0db44e42cdea8648f2138520277e69438f0e9b46fe9ba45c6a95431b9ceabc832b2a723cabeab81f2266e5f8bb6aa68abf7299d4c0101793188e510892d49efb668d13006b8655f98856abdc6b4457b77e6527f1170547d2f0485945d611c7dda5235817738702df0c2d00559fd624d0b6306d236b43dc20d90d845bd269e131d0366a082db469d796310beabde6b3df4e1c94f525937f86be23f9d1eca491fdce0c715bffd732ec0eacf5232e3dafeb2e6fc4ecabbbd80a84d3e12f8e89814b89ed949953b605235ce4e5885aa3befd3e71249266838eb7146564fe1fe25922e823fb49901b8886682204a2a9df881c666cdd6ebeb54a925621a9c50775c08bd3f5cff31ecc661c1aad79f884bbb6508ea616081c17b3a5324fd90cad0b5f8c32aa381f659145ed5bcf6d1251fdf0a19e68f8e9e67372f791361b5c7b6bde30ed8b5d56cd34ce0211ce0879796edd187efaab98868f2e90591f983bd85fe47cede0671fbe7ba86226f371b465d626bc16a4569d62339079745278342cad197a18f17d03a0307b158086d14b7cfd73964eae2281e4293fb9c817e2cce01e27315705c889db19f12409cf4fc725aa6bac0f5f36cb7238e4583fb6fe8d5a7ab3a993657039d7ffb096a71514afcaa7b6083f01bb037627275fc076f5fe038968ebb25a9c9bfca9607344a2488bd2bafdb2c8dad8b257bfafd532a1efa74312ebfe9e2a7438b3e1aac4c7bc11e4a5ace8b09033b65f7dc825c27f7d131183dfe7ea3d1d2197626d369018ac9a40ab441e0c81537c92500a302e8e538ac329b602b8797dcb407316abdf1fba092a4c4c48ce828453d3384c7922476a7c459f60e46f389099bc4ca4b1b9c42d8727f08a0dfc7a0c63ab9d58a8a5920c10204ba5361764a0b49257dff227ef4f3bc1ffc816a05334d3a1e7f464c0577f6edb974ca0b9e4f3444afa8f133088664e7fe1cc0ac1f444cc3e7ee9557a7e0cbffeea1fc95ba0d1706d9f7bbfdd77bbe7e9fe5e926845847508cafe24dbeffb2b12abe45a0880846082ad6c9c35a4962f88be48569c2e3bf78934fd79eb9394d99e4464fac56c533d118c2a5240f73e4ee38a51fd6597b3794922acfbb3501ff22a1c67529c4c852fa2a37d8a0659fd6b83c84030cb683224cffdd5533a0fe39d3e9bb50a9408635dbe5c2dec90b019aeeee2de96d789011fa32e3e2988b92903632915c9b58835f0ec1e011fe5e6db40ae3ef3d890e268934d1bb024a634394b202e503708b5430fb552c2cc0de18b494b46479dff5caea8552ef2ec9b6a5b9efe122efd9475d4e3a05e389a118b71f04b60a18e2add1d8544cece2a6f41d724843d77c362b1319435ab2b32f8cad55e38f6ca521b4efb53a2620a862ba3f4043a18f3307852a349fca1633bca88febb996f8b92da989139f5546fa7d677fb67a8096aede03e702a7ea8a75e8fac352ef733aaf66da12760c70bc53678a534745779a3a2a25fe0604229c143501ec2dfd9aaef25de5305f09fefd4da1a14e754ced167f6c49b3d13d08a779115c6edf7c73c24c8359572100668633cc2ae5c2e95777e9150dccd6ab13592f0e48cfe9e49510f86784eb8e883de3c037b5adb2b35d5b01c4d09da8e6c90da0ac7583cfbe8517a08b1681da19eb925d84a00ab733551c53fc40aaaa789051684c512f0372ba42bf6e7caea63df61e7633989152d1d5584a1bcc785dc91fb1009e6a262799bb2eaf7235c6655cf3f4a4b4fdb61827648b6eb3d27b5550bda8e3f33f0daeabee381b36c06dba0f5b9153994dfd799c69223c45015813b7f0959ceb3e4a0b21fa0b6d3cab08f6bd93812d4117dbe9b989b93d5fb7630b675f2395f6f67fbf8434f53ff4542cbdf042507c5cd9e60af71cacec648330bed76fcf59a6d5f35e4b45a1edee6a4d724fde6bdb3d02803fedb899b3e3f345a09098f5726b7b694a0f927e019b4bffb614ce5fc472305f0af5d40c4e5e7616531b71325ac555261519a206057b7797fbf7a888b29cd1b6feb80550f6448a2738e07f028d34d1de3221fab6841f8bbaa650e393400d654c7daca3145636ae0cd48818f2844a9fd64391132be7f7e6ec67b905fbd74479642a3c53c2e895601bc86ad56eda671dc2abef81c2bb85278192b8961ef2f27cb266ff9de917f13ef867014ae3ea2aba17eda5ad177947ac3ec9b80a992d67edabc65ed8037eda990732f3d00e4e06134a8b4c1b96abd003586f3fd9e6e1455ab4cae2988e97921cecdebb0b2a8079a7df076b43cccd8ebb8315c88a84a8eb3261e7135606dce8290dacbf62e50bf5f639e45bcc26490443333feaa2ff0efa03379d79a6e8b92d4bde4f896daa4b2b7d1f94c60b3fb8a128dd500ea9b26dd24baa708df1c0d6e1f3f319a18206e86aaac4ab0287759715db05f8ad155b50048a3ee2b8cd1b9096cfd09d8056774e340ddd99c9c7646eb2e8319c6e6c3650213d6976829f4590cc2dfb6dae4167f72824cee3645188aa08cee4adab14efd888e3be9e83fefb31e2acd7fc93d9757da77e1d1a6aac6ec3a7fd93ceeba5e473dbfbb2ed3552990e8abafabcd9951c4c42785c91553e6365e0f2c352b8a5c09c6b03cac51f40ab7114d6d830d7eac8ed89b1e20abc9e22eb645cf7eb8a8ae0cce69a7ad88a3faf24218f04fb277107cbdda951c8f93209dea28ab5fbe9cbe18fbf0e577a3ea610723151e57e309e5581cecd306ea390a4aa2c0a61f65eff3f5f54fdd52c851a7bf5b4be0e2c9be93e89cdabf26e34406ff8516a908d428b46a658e7688206134e293c31f398b1d82f5e6ab40c3a33b7e823b319d6034cf6b40f3b39a60d2a171387283c1a553ae1b46a167402651a6d99c6d1a6870ac6c7f3f46c83021069ac488a195af6c46fac4a57617a698160e7f15c3d7f4806588582f07d41f14e6d2969cc700d2d68e88e6d80dc25a5f1af9d8b5e47227d887aa5ed8dde0518197d3503a8dcd112d53e0eaa80d7043c384f24c4479f2ebbf395bf90271f3adb04425582b9b0353b7bc8b36dd1f294b0e7c7e43892960277fa32291746b151be8134e183798aa82bef210343feaf659862c27254d9dc3c35eee878ef7724e83722cd8f6252dcb85881df74b9517de5675ba745a587c23a6a5421258532ea7cd96b84b5cbf016d445d63c9e2a94dea28214eed4a726f89ba9bc64c57504827e29cdf2db1cbbd98a787ef0d63413521b8d3111b5d631efbe68aa3bcf3b568d7a8ccc8085d120854964de74b3526768beed22a85fcf2308412b800eb954c35bd086e9c63c85c8baaf9f6740cc020b930b268c2b48de94e29266e065fa3db58e3eac982c75a71eda1b8cbbdd66cf7a619eddb012e7a0e1ff40bf4dda2872b78513726a3bb7b18d742bb14eb34a172e44d85740e7d292a4ceca792ac3ca7043e0ed5cd27c7931bf194ea1925abc75a1cd4647b122804047c19e3909bb36d2e5222ae0635730a40e29f2e2194c54677f5b7703834b871665884a835d49140705b95a919f5484850536b6d755f09869118fd93f29db4da168734dccb7c5d8793026fad4d90cdb512eb01915eb0fff0702caeb4f374a4a6ddb2316898bea0ac60eeb9a4ec2e8bb95053688022ac30eadbdad3bb81e2113d83818435e5c0e1169cc77b753cf608bdd032a824097d23dd9cca728fe50f8207d09b342af9aaa82d1237bb088611ce275b31ca635d4b603279a3961a67227f6c8ca9492e1ea57e5989e4834511a76561b9f8d427643d704f3b0e44434e4490d47e52cc2b9ad9e902c876da1427df53d1b22ed157687cda9eaab286f2e49c3ea76f3fc408b66d73909896c95d0ee122e10e7bc6dbaf2f26858d38630f6f53104d271839adba89a46bc1ec56080fd659f89489bd9b817fdd6ead47e48338908f2e6e843402ee5703fb0b1f8cfd72e6817d0dfdbd7e289486c0d3880f34877c41b20c2bbbee99fc18a93ed870247f3821da4282cf6eeb95a9e3c5a2ee0ba43fb042c8b6d95c05a36bdb21be0c657ef5c176f8befa5311abcf3f4c3e89f0d60064446bcd9331787285fa7d7a67a9b644eab9fa594613e3fd7f3c2f04e6cc66e7e422bd17f3563b91ed6f1ab389d6704e220b0ffcbb97a9b44142389b0f859c1db842863d00b396292ba1c0127bd6f43af4d4fe4f62c7abf79db92dac0c05c0ca680e8ee6c230 +MD = e9bdfb8b069dddf2bb86059553f9b337e869aa0162ee8885cbe999dafe2185bb411aa8c06cc524e4f3b08dad667c6904 + +Len = 61216 +Msg = 8246bf7b81b287411777df7ecb53a1795e54b150ff3dd584be2bc7b8437889b6c0e0f9b324e2a5d49269e0f111ac169885535c55dedb4b308f3b0f7841c8bbbfc956df2658a05ddbf2ea78df22e42e0debd2c85801eaaf543afd81f83f5a64a287f09b5b86b2575c2140cfd266c392df7a181ce1d232a8f6a6b946c0a3f72d65e1f552da14e13a6206b30c514511ea16186f8178b87adf20bdb78558d767be12beaf2f2c6cf5aef2898d58e52795ddbbaf1d1fa61b8cfcd9663e67494172beb0086457d8f4b65d169214da14741814d4266b1df2632ea62a899814194be0d648a65df56616ececd50992bb699462376c65a1a4e5f92985190f0bb3535c78ade180e22f5f395e0638d64d2269ef3bed885407db05434442b1dee06d7cdb03ec837e3a2d4ac4d55145e28e389eed6bde32dbe5ebddaa4985f7df5f691e324a3a3688af18af21197506139c248ff7b9b371e282fbf297fef5f5facfd0c0c812400386871816b7f21b8352c10fc473ee144e512734ce702d3bb2187ac9eb0526a5f1600b5408ee28ebc3884321c6cbd2a8cf101cbef89e9cff361fa67d26514d1209fe83f50c2e828cce9b6b811c652d18ff07a9c0f88a14e88af99c13f9144e2f52483722abdfc9a7ac7581584eabc70be31f1662579b5c9eb58ca4b4ecb6f2a3d4276e046c69c5e366fccdcde503682a853eaace9c383ecabfc20588889f0117978172c3d7353ee9021a960968d7d71dec4dae294fcb8014b18109b654384332a440898674a9fc608bb626345f8edd8b20356a9ef8bbeb2392b3f667d9e77f9d024afc75cc2ec6f106b7c3755290421d2adc2652207047a06a3f15c29d157fffb98913ba662d66447d07b6f4ca45ce7a112c2a704e525c32410daef02a2b0901d2e3157aca0ca200f78d47da4f15484add0cbd1e0bc9f18220050918088fe64b54424ce0813543cd7d31bd4f67687a3796632984de3dd0370e0f6d63bdabde84478dfe11120e115516db627a9ca62ae7451bb4cc4f16bffa141324f9d3e6b854b3ac74380501d33dca737c8475372102f21ba71be6bc877339f97401d2a73e65a186f67be3745330a1e154947a832731a34b4a9c2c97f04985a9a6a34058365c1805cb0233d157d4a40d32d334f3041c6293e474a80fc125000b0109a76069e421103df67d7fa8d1dae05d692aed7f6a36dbbfcee38dc4aeb308cf588e279fa3c38f927f4ae60ed04c401f7de4da61c3280b21d06377bf8da58656bb7e159f41066b13c4206e50790016be37eb2372d13e0b53a2b2377b69de6ee058fe923367f28a08ee8a7f3873004b83c0c62e7a3982c39d6d5833c0eb67a9b357960621bd90d5b9240d818c6754c5b640fd6541a6fc1c4659dbd555bb471e17e1ced932eae7346d8f33dc15fc026e9fde192f8ebeb3fc988dc584048086b4561e2f732e97ff906e5783f89bdb142d86c3a1f32b29af4dd9329da793e22d55b735403cdd6be1cf02a3853ee6ab91e9b2171d1bde90f8f5526feca8cb8b43e8814e899d070f94db729bc214bd15828c6c01160e709b97de4b6d39ee7420d054fd9393fc732a209a0669c1e3e9c1eefdfca91334a9f193ee0b530ce1564cdd83732ae5c2ea658ef605320a143356dd24aa389cf5503bf40fdc4aede938b5705c2a3b08583468e5d6b921260d607d58e9bed639b92f20c228047a656ee40394c76cef822419da2d21685b9c383bdd65347faa73e80c490620cc0afbd820df4eac7f6ddd9061636fc15b0bf4fc8b1f0fed36ddd1eab05dc8e17c23388fb5f1a8f3acdea003d3acb29dda57b7c017ea5bfc2b96dc27e3050e525ceca3fb6be0a9853b6a54e5385dfe9d2c676ceea8e75349a6fe1a086ce9e25bb48ec485095459487438809d581e5ba99b649bed06bdfebdef3d15f315b04be4cb30239359f7c1259f71ac95fb95d2a96d76cd25f915643e4d7a5551a40352d5eafb498f216ee804033c6134e96d6a85ebc488fe49978eb50ade608be289fd165917bddf2a64d7cee9c225e2e94c2c255d7757e0bdea830b6c90c00797eb569060ab07ed3c7f9469992b8307c5db1e720bb6bf331fb74b26bcb8fd2f8bd0652947dfb01f1f6729bf5b9e000b43c14a523caa4a5f35a5eff041809d6a85e131ca55dc3fdf9ac59db7774326572ca6b8ae3a7b7fccc85d7650450e2a1f4fc6c25cd3ca3c947641f93834437c5147346f6f4b50e6e29f86e82d0e8a2cb8af2620c509d12fa57b82442cdcc68a625e11777bb851080a84c94e71e51d299c6ea954ef3f17a17c7131867ab5f3d9f237e5d8bcc9a86caa3dceaf0312efab3354f865c0bdc71a8020f5c80a08f3f06a9c599a19c57a9b2c933c13cbdd2739e528bb5b22ca072019507711c41cee57305314c679f6f21bf64ebc82b18eed5c1ab4993efcb0ff3dafc85f69903b0b97ae24bf64c6a235767236f5059d6c6b9a3abe3b1735b5d9f8aa5154d856ab72374bd9027ae7126e33061290a377c0c67ead0f49edb722bad973b3fe67feb54cbf6e388412c48ec3db1cac346527d2298ddb6f6ac9693fcc6970b6061d70a1c1b8810bee33455d5cf51bca8a5195eaba512da546b23353372f0a21140394b7f8a9eb18e7e652c962096b353972aa50a151097b86b0fda823b4a9becf1f523f1a1a14281832d318fda074b5eacd4c4b0715d8b7d2cbaf84b77eb653e07b93804e936402291fb09354419d12456c642514260322d10c32301b1797a9ee1f3dc3bd9d4370c1b5d18290745013f156db24ef0bf0842c7a6cf47807b688a2113a508ebf193888fd1e2dd8c1f58197939791c14c09a58b1e4617f6d47ab8a45b706fea824e2328fe80db55b1f224de2c82b4b172b54c94fea8e3bc084a009b05c968f96d4af946c0ddd62fcbb0c46f2883d4e8045b43f2247b9ef32a902930152c82e20875828d4c1f648d979729f18f813a8d8a65504b98a591c2c3b3fc0a958006cedb3885a2a92cce979e101a0d69662fc98c3a3c48601004525a1b3ed28caf3ce46ff9cc30dfee5c776781616bbf19f9c49342ce9086a23eca7730ba2f03a06c4d4b211dddf74b55527b53c4b29882e0a526e5d0cc12458953a35937ca013bde30f7194151f82d035360ef0c8bfd892e95ce8b08a30ae02b1564017c4a8e68dab6fc480035ea7bac9fa0bb019df51629bb129c40be785b6d37458d5258b20fa707e1152131d61d9961c3216a9188111b407a803ec4639e97e2cb66819c76188e4a2eea6eecc3fa12bf4f88100ebe624a4b8e9fcb5ed490f13d80f4d1bde16bd7a86c2ead0fb9fc5ee1ce58bcbda0f1ff05d762ae34d21bc371eb9f0a64fcf1ca482248a741c00ac7f0c7f8344535a68195dc2fb1ed652654a594d0f338ce90ae53d8a2242be10c9314c3d24050866a1a24256f9a31959aed0204ed55e25f31cdf016a3ec7523eb0b74494daa83992310da3b8b32aa6b5dd6b0c260f809b7bd6d4865b3c6c68f8d7739e1d1398878bbacdea5e941feee5857d6568fa456df1ad7824c3a7bc62bdb1f8a13c6b4072b183659ebf38fd52773b89c49e42170de3253c754a0d41e01bd4a906895e4a7b824f6729610e3d81c97402b22c53601bceb283f034e9676191c427367a4911129c533522da706aed7aa38ab699cadae812fa011e4aa8c7579de4d5a995c82ed86e537203822c1006095e844a7d04c2136e501667c1d7dc42bedb46d842581e2d56b480540e8da76bd41981c62c9dc02e3f594655510300b372fbfd6b2685498203faf29cc6119b7f895905e25ef24f88e46a137f6e96ef1a38eb5baab8bc4b86e49b4b364f5486c1978173075aaeeac41c27003e712ff1e79f1e044f5f899eac8719ecc900c2d3c26d477badc6200c6035048f2b1f1ab3bc13f86991a159bd5359fb79bd90e92d02990f625e17f23edddd8732cdbf03af08162f0e4a24c9222bdbb4549c6633dcf2994dd990d691fc9d54337d8ed7573e4c341664b1304457868ad91fde073f6e22fc8743de688bc03f677dd1e6fea1fc08ec42ff6f7a47d803f5de3e0ada787b14214023af645c243455dac27eab6062bebd3950ed59602e249b3831ab765b7e36a60d1b8c506f830ccddee1be641f0cee056debb36419c458e98b8d286164d21af9427ded934277392e0e922e9f3a55078355324a10d135117f2cb30a02312121a984dd4bc3817b49f4ce7627d34ec5bb8583c729e622eafebab045d8ff2ce5fb2548bc3f678909afc0b2e06296c8f94aaa8e1ccb5a8b60712a9ab81dbed48af80b028d30d5e5acdb0030634760354a5550b895b6f47740095d608c30a7b4aab8a956e2b8b513cf6c31eb914ea610436c16a7e4753a72d437b18634ca6039afbdae9a3f4f8b800bd3e428ed00fee67eef7ae06b7ea31ac78cc59034437ef014678961055dafd6cc92859cc8d6d134476febd6ad3ba4bb846918031d243a647346a82fd77bb8749c3894abc768a366475de81f2c54d5e1855d175351e5490346eba97b18122be5e5269fda6b0f0c19094a0e1e5b22bd3954e94205751f115909c70bb769c980a751fd15ad266271a8e7b4bc48dc5da10f7d9e269df93a39d226692d892f0a4d354d1c84987beb5ab26d1e7143023e47f069dc438140bf090b3722ad54ea4ce81c41157b20ee024da223f7db817f7d187894341753fe263560b6b3f9af2e19e7c8d87857daff5fc11496c13988a67278f4a726208a83f8157f2f7da0fc6ce9d2d77da5a92b225c3b76201b49cd09b70010fd32ed9974bd4fc30be021c129452fa4ab3ded95f97033336a565ac33bc3344a10eadd0542ee3ab8c69bfa91d5a454ccdb91a3bfe7443ef8d0130b0f9f2f9c0c8cae7d6260f36cdd0a0199e3049ff8cc995159ed6e30c522ebc1c906b6449dd4bafe5d1571656cbc20a19e39389072007eed7ec300de5c4e37f3134d13bab03f466aeab2d6dca0b2b50c6608e41e5724c6d690b541a56ad72f27884739ea79a89974a4af1391af7d21a29fe699922e863bad2e58a31e776a4bcf86998b6c60ad3eac298eaa5cff6810f48a36bba45ec137c1a601a7a21854186bac98aab8fbb9a051d7b62d6706ffed72d38ddccd6e5235b4a664b1e8b4311f7c48e8fa48b16a69363dd9ff785cc121be0a607f65e3b5c0169de6745ae18dbb8209ef0c94081be3a9ca5ea2e9674858367d33161645586137fafb416106d6970d6e3f5433865aca2d1bb8ba32ccf1fb6cca9a335709d693c95c37bba3ba881c8ec43e53afb2b36740a07ca80ce45a85d170fa4990a7acc22b1010359b733ec686ca80ad50f3925584d70efea053ee71f4eec7eb5bb54786dde5196190a7472f75df9aa3dfef940f5a4e1410b5822a5a57b2a77b20a9436c6219b7a25bed5da1ec81e0e9a50d151f4163f090b4f59aa96a5b0d8b880a0ccd584c7f8a35bbcee84b4fe7e138b2b1efcab739012724bbe9bd566e9eea3e102410ebe58bc679374d2298341d0396e71b66c651b474a61a95c1234f17dfebfa2b2c766e2976cc135af3094a1fae10210ca60fdf5d25e01328064023a8d16a372d2b8a8de5df1aef9c4cf19e4b90c4fc3df902465dc369423b0d3b80a4575f33c46e86d93357fc288b810fb533441bd549d02c0b28d5b834293683eaacda219c6b95f9b4a489d65a934fb20369408b489aec0ba250c543558d22a7c624e257bd9d1261b4bbdd3ff26e09771d500e99c2cb7d2fb0682a9112c14225b79f087833c3644d6debda9f8c563ecd677a16ddd03633e6a9d16e381880256c139da4f97b991c1b34b70a8b84f660238669f1bdfd7570eee31f189eb3243d097e8350521168aa699d9fd57a78b90e27de8217c0a6f3e4a710b3a23b9f38098c6cf2831881cc8fa72d18d3e2e438a938f464f16c795bef8da741a3a529361b43536dc5c3493f4c5257b47e6b33dfb1d54c852747c0f7f2211b2b9551eda8d2ecb64780d8d43b5109a1f54d6a0428c89b6b5521b93a62acffd0d3efc8590ad0e72a325cdfbf3b4e2b905db965b1ae5de9c5776957222670888cfd1b7ef7c685a11390b23e66d99436a7505af4e8dad24edf4e768834bddd4993e9c0fc467671c8f6f5197b6770b3b95b6faa8df638c6393d5cd1f2ce9353b19a4c48b6c19525bd68d20b1d3dab2d32211e10978632ca475424f3fd7c31745ee4774b4505ad020cddb9ffaa55e3712f9cee25b805732ee7b829552eba229fb0170d210d6f289725ca1f7f995ca4201023527255f05494a8ddfc8e0d04e16643a66062967a826596b264f3609e87aa6268dd5ef7c3517bf939f106fed8f8488817339876c454fdde2b3d03a6a7e880b4b20174241b14455750b9489ac2d1c70bfdd93b04b92ab07a990a18c215513385a3413a4154079141b6b7db574ef8523daed3b2e6e54e3dea905ecb59435c4333c12f1a060a95e056e07f27cae9e67a9bceb5a893b569e6ac85ad63b2de54306d702dabb8bb59a2f54261c64c0026c0b4b1f17471c5f85b4efd689a8532f37b9154bf67ffc2cd69bb61223f713e33a5071d09bf2783640c307c22d836dd94952dd376c731cd6b94f7d112ebd0f09798015480d11b6a476a0f666e955e5ac20db160c651f537aec558f6c653d1c3cd2a41fcd962d4071cf51a60ae6a52270655baa13080c0ae216b5d66bf1ffa343ecc376a85ecd7d65f5e0fdf64cfb8cedbfdb80947ec1a7d4e0753955fa8b0ae771e504218c79d5478d54e57142df8bead76280d7eec69419f19f9f74a76abbf00612b07f49bab0e142b645c5f0da873154f8922381a43779f33af20e21231c265553620cbc1676f9b90d04387f73e888dfa59ec25ee2fabb8b4f196c903e975006af020e0e178f589d610c13173316b820728cfaaf0844a963e5fcd61b439338c12f79ce664564c694bb449edfa17a89be664414999f7c0923048393eabb78a42ddaad94ed275b0b4622942000457ac2628aaf57462e0ca473b496ed262ead5df2b887a8ca45ddee5d9ee4e3a2a77f2db3e4b30dde3d5b42f9fe1d2af7229c2bb9d1ef51262753387e371c2deb50f2905a7f397c8854d1ab60e900938421acd52a2eced8295623b153f6254706c739b4fe602aee6dfcd6a64e7e2770f6b24525ecd60a85fa59b72184e2e5791994be6148916ca9b5bcd2fc6cc47a09745ecfe1a8d18da0c2b87550b903450a4d40e75edf19e9f6871d2d7561c3e2a527abb2d205283d71a8fcc70699622d44c9521e756d00871c0ba64fd9d583458e372357c0ace20440d5ac140acc06866db652ca6c974e30656bdfa1f0720d8d0acb4e24734407c9547150c325fbf836ce3bc8520c070ccb17cc508982dd68a0620bb382b276a074f6a3703e1fce3e27af813d201d6542407b59827056c19c68de20dada46eab3ec6e9395ecc0ece23f58af399b6758f677d937fcbf35c4b2cbc5324b92f8474b1b046a4635cffeeb6810ee422bb1893257799146dce78eb1b361688f148e356de800500c8116ab62892066e238c5a0fdcaa28de93134c8a107f8eb2dc6d05e233ba96c6e385b9c4e8ad03ea02a694460b89d536c24e41a8aafd3e3ad12886774fc48e7f4c26778b752689f046a661d6107b30c571fbe2b75923a77985f7cfb691325e8268802e8a6cb30b0975e84d40ba029e033898ba4699a74cf741475c0086988988df0f39421dc709ae06f8a11636b4af686ca132c6faecb14cc9b3b5e5be4b91fb0630423336d6f846805427b73505d77db4a1e6c8eb6856e255b967e6a6dffa4174afb3ee1677697b58972bb4238a98ab770740cce9beb0409bc4ec83beda44f4b0ba18c35b0cdfa5161e379d8097758a4a6dcb3374345ffff262ae3d94aee49d310beb63631bcd6c4f75d5c3ead0f0929542009d297db869001f478496e26ba37bf1a63ecd28b5394b2a80c7b0ab9c4cfe006b8a67ff4c242b5722e943f93ca00827c3c607c81984bf98b32970abdb11cb35765bbe4dadba0aa6daec3a77f9fb5c0aee89915e7ce7036cf769b9462f99a35daba1aacd3f82f49ac9fde8d3064dee076109f86051c8cd03c7f8e8ff2c4d1ce595fcac1284179f8f9aaebd8ef3f044c9d5c7bb823ab262f9af678e5b33948e79afcd30921df05201a77f4720458ae6beb73349289a3c6bbb182617dee8187e667383e6e05fa5b2ad8ad0042b7d864a527fed2fb7f2bf5dc49cc523feac3163586bb12d71eb9047cfbf4183050e7ae621ba45edd4c6b39fa297b5213f1287e3abf2e572bb24587804bf6432416ac150a8d0edf1f398c1d7d1a386ae149d8465fdc3916540ac66c9d905889065250200546e45da98eb626cde4aba1913bfaf60ba38356396e633c3a91c5f2be4dfa58bc0ecde1639310de524f7bff0b0fb716a5deb51fc225447ec117e387354cd34395ac7171358fc3cc7423518c370d362f97537679d77992ba99ea5a4f519a036bf9ea791807ccf6789c27d451fe7da0c848cb6f6d60b075782ad2d352fb7eb158518e8ddbc190d26b3024ad5546a61c6a200d480245131441dc97f6991c3f0690036154c44b247f2c9ae283a0f9d1d39c87e3a8416eea989c17006a2b9a26299d792b77da8dd024434029ff3bfd46ece6e5133730c47d281243d6d8115f7b420719b49d256fdbea398cc1c92d3c4d90d0a2669eda2d13ed2ac8e1e75151867b544dc36faeda8ff895e471887e9c2ee7e326a4854492f60f6c0ee940f55a8efa0e7c22957cb43277dfb202e437073018a6da959378dc6cb5607eb68a0461dde7bc0d97b697e70d8ea05d3d875f649c4ca22400717df1be078f7e0f6e874db96be76aeb7a085968665e4de716fe9bbaaa5d6dafc75bbb342e8077be9485086bae16fae68bd6f48b26a4eacb3c1d93d25b611e683c1a211552bbd289a306793ad7d1254f8e099ebdf7f79cb09fc2362c86369df478c30aab9ac9f539441388700ea153f02eaa414701e1cb5de7f86b105462541b245e603c2f314a961eb21d547d0cec8f11c0c4716be9df9bbdc41ac5ed6fa9a4e8f10a11397b3767daee202d499c58f5df530f835e984032c9302b9478e506596b86f072df3026761fcc79449dd900ea416c0ac5017456eab24387c51d4ad2005624faa649d77e89965611e19f4a4a35de119d7f7d078a8b200514a00628756250d410f7a0f8a769e693ce4b77779fa0604db0f8f9d942dcbd7fbb6c58065747029d1aab0c1b09deb88b99cc4ee868f16c252b799e70e7a62eb865733e6de0771387000bb4c90cafb4475baa4c260bf1ada3f64a9356e2b11eb8f8fbdee478b92c9aaa5fc18918a681cefa2e98b8f268c8cef9b3011399c533885e4d60f387d6f5df00ef5ae49589c82860a05b26831e68ae1dfc102d76aa152f7db1ed227597155deb02a861eb21305e7348bcf928da334c486ce72ee0276db53f6eadfaaac1351c51e2d388823662771d6de4b84866d1af634caf9e3f06e3238acec7028e1ffc251cd502e1c290057b4459faeb4a88ebdf57e48f03fa0d1e80481763c28978137f32245df514f6c273d252271a980929e50a7cb0e77b05c7d46092abc3049321327d170d4bde314166aea193ce99b032c8665c3ad129b58528ba87c58c6539cf47e3f53a6b890a295cc08e658eb547af9052cc544a6ce701833e3ed9a61632c5c54e080bde7e46235df060c6e354944746b51326d9ac61e3edd4fe10977d46aab4a596a92b24b0d6722661dd54de61a3f1797ad90651ecd26e641191e9043d271dd0e83cdae20feba24ad7d369bb746a9985499559c350760fd6bd852312dee307b646eb74222a09f6440bcfaa54954546c1c8815b6b5578d7124b14ce0ef2877a41f7de804bcad974fc45faa00f8edc01153ec693afc380cf000365716241ba7e58453e86c5b702265bcd7bd25526d6d169f58b89f86135fd892ca1947593251ce376330ef7b92d1447ea7bc88f24dcbfa533f9c6aff8406b930fefc0afb06f5bcbd3e4a14b980245a9e5220b235195d2b14138d13a50482107f5787b78604144f6a47ac6281b28c16a0697227b75aa1275676f320331f625ce246450386a43dd4d311c06f60c489070950395fd58c287daecc7727063f281cee5dac457971c30b8c1f3e81e3109bba5da8ded13c1863ac61a6718ebade33df17f02613daf7545209e27f406521448f01d5eb124799d32223777acdbd9725f1e3c05ae537af5226b0edfb21739104238a59d699749b177d78c21b7a8ad46f13d620b33ffbf45d1835a43abb9ada6ae67bb739ed6f76712cc618bc0b9f208fa353a3b79aa480c5a4eca7c6655757e9664a708d6484b690ae8fedd4f786f5f83f00cbe07bddbf3c3b6a5b26b515a3f0117b1839c550f5f6715aa40ec4ceef4935520bc659e41a216a2350c43172492f868210d756509f0323aaedc209d356e324cbd5c1cb742c05bf9c0b3750d9b1e823f3ecdebe002c5723e52d872d40e7668bd2cc6b36fa5f598a58fcf899d868ca78451ec852fc3862f0bde5c6b573fb43e90b623b22d34ebd78dea87082eaf836f1fa291ccb811da71889a92918f90cfbbada19ba25bb5471f9918037927dcace3f879e546e4b769419dcea06fe4cb70e8fd35550a60f1b479b1636c64f2d6af0af81e107d1b7bdca632c1ae8abfb63ecb66bc7a72a4b0d8ebbd11ea51f66533ed05d839f9c627dba92fbce56c861be26fd17c31628fb95b80a56ba4c99b50e09208f188404b810d517c076c9ca3c003d927bea36389d6e63d51b9c35349615f03eaaf26dc14521ba602ea6ca27c6d4a134ecaf7fcfacd212caa436e78685e5848915b3b558761acb0a7ad0d077bec5e2430e856b64a67b3549650cebf +MD = 4d7909d8e5613249cae1a82481093c7b3260abe835294e5f72c6683a65bb0cc5142e6b8a21beeae531e7c3fc8238349d + +Len = 62008 +Msg = eccbebc347859d4c096ba63c585986dee7899de826fcf7fdb61c6976209fdd62c6aeeacb1a47a83c0de0c27fcb4dccaba5e3d75f4ede43484b00d5e9a57b099be111aad2317a9fa3ec0608833c838a521761e6987014d10eaeba00605dfe8231233c525ff6e62d898d26a1cf14c467d9244bf21bf2674857c7921163b0efed2c76760bfbd052f8f7d887b4ecbcd80b4ab6e822713e9f512b7ecf307a0618f595c109fd2d2787a8f4b5736a609a871facb4819f21ba849393bbbb872ec73f4073ec3b4f7d644ee6890c30ebb518994b08055e91b3d0ddb796669c3b065b2d76cede552a73ed6d5abdc5075e729dd5366593c71fafe774643d67bb778b2aaa40ae819eb5982bacab98c840eb20900489cb4504719e660f438fa66061439d7e461cbc60197386d58122fd23bc465beeeb43035cb008b777fb940bd321b81a702f1f77e17d8d67ae86644df8f66c655b05d3b5190473417435547f5be0720a49a3c09a6b0a6c340160659e06c41b16137f86438194696cce99d8e841c6f8d6d14c060e44e79a5794b72dda964cd9d6dd006196dd8971a04cce2730cefad1e4d0cff9b9b43e9f362f34c5e7f0b6310d83306e94740a1445b77d493d47a5889e0ed7a1840534013b9c7e34af5c2ba823cbb8b4269040d8c3d74d47f9f7eea26b520a07577df34acca23e821822d3c8807e403b357753488374e7284a25fea9b26610321b66a30153081cb80c89d5188d646f0ca7726ae9eb56f2f41a18fc25dd10922ab6066baf3797bfdd72da5920b044ee2e66c9ad45644417b35019119c531938f812a674dbe017d0f9315e896952e764a958c445e35708fe6ed47065987c49a9a3168de60db650f615335a8b7adc167a8667ab5a4b2a684e2d8e651fa0c0678e33a905e8ce2109da375f1987dbb497d8cc7ac51306472db0f66640683d873d8eb1b554a2a4890c246a9de2a61544322583785b999b141fcbd3444867f53991522421c33d1a561f7bb3d5fc0faff3b10ab34bb51492fb0548cb10c645533e2c8194d59ae1b5f00b871cefb0ec3128da2e65da1bab7462a8cee6b20229dcfed6c409b821b5ffbf97f1acd44662244d773aa10dd586c7b3d1062d12443c1ae256c38cb4a0e27f2c8d616b6a069b0fc94ed56dcc2ace16554697a718d4a59450762524b05e8fbd9db37e629a37bf7a0428a8d3ff64abe6b0d02b5dadf98dd2b1fc93da95a4e5427bd3f1984d23f5ed66cc5ada8ec944c12c366755b7fd1c5d6eb1b4b549ba0c952fb36115691066f15704948a61a2c22e3142f5991f2679bced5d31bdb5e82b3e1f1c77e2d7473a0d3f96feec61364cb627ba7d31cebdcd7798c8b1fac1766bc6b5d5db06801098ca864b3f0774cf0bdf7667a623ab093f17d6b9dd7556abf3b458a834894bb2a8af94eb00e483b32734861119799d54f8230efa5d355ad0ec906f5b2b741f779444d13ee889772bc73ac07f7e3b8ee42023aa51d842b72d7de364b767cee6a58111a60ba000367f137b8a7b7c6f6503de9f1187f6a5530acf339e84919f8785999f791ccf51aaf7347e4dcbbb1f0af75a20ab64606518af090b858a50f0ea5f0475b3371e82b9db52cb7238e4526408bd2de0afbe8aec6354f081904dc8f77bea1bbd25359d4d7294eb5f8a9f115d802f4f1832b71db970d86cfa602f2f9620721afdaebba94d0523657e899363dca5d70dbbb3f424661cbc0658c09f2daf98c4f9dd9959afa1dc27c136fd6950cac1deef31fb1daadbb02947037945cb2a290940c4b0b6b6313fc788eeadc8e00d1a6b7de2d2d9b4007346b56453c810ef1c69781ab97bc6e5762b411062591c8ef8a74037ffd04cbdaf3cdae115d105e6b90b28467d4fe7a5c87c7403e4c40b35a5babf964cab79faaa323ee38907b0f84718d8b2c4db22597fe2a92ffbb0b5eb68cb82687f12449fae5167d375131b0b10b710c556c67ee9e18469fc6fc523968802121661acb39401c0df17a29c4e085a1159e7fab9043d378b3bd207ac5c1f4e88f606ba22d1c1eba82e19d84b4fd86e4e3a807a5cbb3dc81ea8198c0d686f0285b6a2521ba30eb631da3fdec8286194953cf89c56abd2de663739c78f506dec20db51f0403364a8826df37ebae18d130ee5b82950dce2bf8b709a7ddb1b005382ec7a5e3988a90bc46f9c7ec9804335e2c026e8f15756b4b4dba47999d11281d3718762adaac7251e66a1a79e0f6b403952aba3e22317050901c082707b8abc3af3dfc545a2a43fb9dc6cc1e195ec7d3a25b020ca480cfab369545f08204f4ddff9ea4ea8772aa0bd5864943a1bb0340ec09b2852cf1cdbda9bcad90ac84b7ceb0b10c77e313f925163f1e74fa89eaddcabd58322bf31efa52088b81e7b659086b1b9f671d9cd5b9d847b84cb449e2fcd6fc7f9e120327f3d7ff8c4eb4285d3d7744da52775bb44ca436a3154f798030993d85237fa06d3ca4080c41a24938b07db349a4810f195002827b792ca7472b79f6f55ce56973373ec8a82522a78013d6fd69e7daf579666bc18de2fc41ac2001bf6cc4b3bcce7600a7dc43c5b1a7da2b69c786e5cd58f2586a66dd0ee733b0b90d47d59b28d36ba22c15380bf62465e3aecf2c21e53c7640e392e1f4e6527018671309ec2c26aa9bcbef7c55e38a698832fd221feb9874cdd3ae7c4efd9cc098335afc27353c95461dc77b34185e37917cee13502ef17057a0f6167d6b8744c1188c16ecd299ce498839df36f2f4628802fe7a334ddbfb66d2264af0de865f1b7d22d4ad92a2a80ea1b2f2df02017cd46bcac169c6cc7883fdab8449b53e721fe7bbcfd9e3fbd51de0cf608cd3e9e92efdcf734418276a2779e24cf88df44046ceb363024519b7ffcbeba2d0d73239d05f691a52b08152c9dd871f8dc76c2c18b8a638a74460d31cc994344b8a6ed161074431262e7ec503aef6766a0ffab81e3c10ab495085b8fd70658f4d7bf452696bdd323ef054334d54bcec2dc62456bfaf6f5558f7dcdc2a46bc3e570a573f52139097fd94c6200f6546eb39687d9a85a92ea166b8fabf2bb314ac08e42bfaa3850afcf28a390dd25720fe2d856ae5f8bfeb29f30253c46a5c1b62d367d706d646a8bbae4f117f3eb0d78f6a9b70eb913a11597e626c9e7e981ced3723ed0682bef67e916203d69cf8d729812923fde7ce2daa6967c9afd0fdb5c5b496d25c018470903c6174b675a5ac57019cf8af54e2bcb75470ef7afa036266cc4f3b8a0b0da39b1fabe881712dc3925c95637260fe3aeac01c4282523faf6afe9b6d12e7d11c19bbcfd3e9f817b9560270f8e9b49714cf3cc867488208e92ccc29fb8920652686813bcb3272fa0a3c83de2d779833f6df0b13c25001f5cc26a5796b4f5d306f5c108e331d8a3b1290612b859eb46b4d84eb7ce81b4a9cb5031ae840e7f6d96314da15afed96518f0c1ae775d17193857b3e724d1cd454302cbd14f0f575b68e4b5e8096253fd3bc0a21a092b258433b0c847275c727c2ca2ddc8e1fca625e6d5a0e5d9a76ef48461515d540b3e0f0dac34e2bd6cccd5eff612992020935477ceb79fb01351d05a9a757f42458a432f139fbdcf4703d8f2c70f4ef6c2476f8295a21e78f0251c2434b689ba2030a7ffadb3e246363e0d9edc7fef4a29e9fe71f4086a1784115d4cf8be82a3e558c4e64215580881a5fd5bff0882039ea289abb0918c77183e1d39ab3272e7dd2c204d997027ff70612f92f652110b699a999894e68b7ef3d4e35318bd616d4dd1459a7b6a58114b9a2ba98a06a349d2f8b5a067af6f165ffa38020605581d8072bb37b0abf12859777a0a83cc41a521e5662bf0934026a2d8a3ae3cb25edfbd35088a00dcfd2be321a31ba94bf2079d8833a1f83b07950597acbf836d7c9b4b42b6fd33a5810231c02e46c42cbe578f0aa46a474fcc4dd05fdb9da3deb93973c24df610ad87958b7ba4f29b16ad7d3f9241eea57695354b57b9b064ac1da17ddd53df609d16cc397a8c86f7b2c862f5499396da586c35bea8cd618e7fb0bcb1ba521feb1c378f82e66e6ca0a816ecf95621c8ad9e583570799f16e8017b705682d11e79d3f1c6b0e7d20b5e9f9f0492e273ede8f0621daaf3b8383bd885a6b65c5944d26a4c5909a441cbf9406c930a15126e51f590d5b43e9f304facd647177171f9bd885030d64643143832847fa71685b1b156ec46d681dc65ec267739c2e9a1a504d506335ef45e4ee41df0b2b20e5420cfbb7e5658e5f83edaed6f66ffeb71b06dfb754bebd71ce1c5abb6127224082275ca4dee81917a25e0aac6b4169f6a82c19fa55ec3170436a382e0893181281e692e61f79aadea81c805850d4e2e1383c76c9f552fdb9eb3464a75fe354c3c7e748dc257eb63d1b958a5b358f0c0f41c49076a19774b73c176ac7e58c8aecda95e9079f8bcd9b6375933587d447c96b30d1b0e91e3900ac9fa4f028130cf6207efde8cc05537216292567d63928b80b2dd4e94a4bbd2eb319bdd0960b5d68300ef200699fda69aa2cdb728f422153a7f7f48033c46389f6221fb9cdda1ecb8fc25fdec6afe4eaa5fd0fe64173b414d84bbb26340cdebadc55453c1e03a388a635a1e481b9e56d80164d236b4273740275b34bd9798139dc1fb8d8251cae3809d562a219326e6adf051dba8b42c209bd22575182befd6f8bde051e71897142312e1ca80bcde28b0955fc2c1fd9324e7ece31e7ce31a5f4523c945f71eeaf4f92bc3a66c7d0d426956562f8978a46aabdd5bd6f1a760d40c5a7f14ba490aab8c4ec365edbefc5c609cfdc9090da61b6f0c5646805f0b5ed6caca643882416064e4abaf0b67f49f1ed01d3948a5e35ebce39b1630f3612429db71de7ab2d53b0756412ecf613b322a587e264e26a15c18c9f4ed0a4cab4f90f53e2987bf0f65ff0a4e874092193e0c9ee839247a293c0e262773145030069080f7ed67933706d46a996567e3d8eb4d08231ad187c3272363fd5158e83a72b3e465d4231495450cddec6e4a3cbf607400f6705d37b645e1e63e2fdefd0fba80895084c22c704b31ca0d4af38615c609ed2be4d1704cbdcf18b2b4ac75f8087fd880a54cc21240ca9bc5a26aa723449437881d341ccbb875612089cc3a3d813937bce0cabdc14b60b7dc1eb58931039e45d6c48e227c5d5c2a52564632264f350fcddd4307c6947a861a65de12862bae81dc80e86aa7d50bd90ec22047fb9afbc97c43bf876944a0704720ed2c6ce34d5264fa49dc94470ad81d756460038914cb8fba4625f1835bdd2af6e8be2953022034d9b9608adce28d47181a648745077fceece1c9a87831358c90d9b006a4555416c640ded3bc1a625353483dcff65c4c037e975bd44cace03595c7ea4bfece54cf69e73eb50e3abd0bcdf8d223c29c99f41b71c3be265446edaebb534088f6892a69b56879fbcb08352f310bcbd44ed06a6975e9ae2fb0d07c83bcd52d6b545bee6fb34466aa54aa9a20fcd00e52fa582d10adb6eb8f48e4a9bbd25759ce7133e222e7bbc6435d0b024960093665299905b92110bf6da4ec3dff05c20ddad377d02b5bb3dff06e933551659e893461fbba0cd8e170f14d4e01f65efc91b704917e311715fbd710aafae2137750e82de613b0da0f4745ca74ba49e4ee2d8c8ce7b4dd21ca6020cab81aa1737dd2a812c2da4e2f838c8ea3c4339fa0802981f1e33cd783b956f425255e388c96599d9af7d58de02687f761a833a1989bccc0bdebddc645c9277ba8598b4f66ab2bee4cedcd16f3df80a58b8781f7d6255f6e77695e526de419dcdbbd6c8d0aa591c4b00c89907395bec3a9c8e64862082ab6a8c4882405f1764046b7c89b7f6ad3474fbdd3a465328a7743d52a3c422a75bed76423e414d784ce72b06620cde4399eb06671fad39d2ce9e215157c807588ae8cb1f73aa3808cafe6110fc5fdf90bf25c712c39c4beec430df06eb024cfaaaf5013cbccb9d3d50a2a408b321693906ad944cc09417d11aa4dceff80342225e9a9f268455eb8a908c7a7a20e2099112fb149191451c2e54829178e92ba553f8322b6974b9a174ed144ac1c0224f3d6686be6dbfffc75ae452933e491bd5041a540c71e8676d80d8c29b9c0b52889273e9085d9754a7eb5c9d58bc92346fb73798d8dc5a0f9e42e61ff3557d037434cd9a78ddc1c44c542fbb68505f05c3e1c249071563e2c21f9794c88a9fa56098c603866ac9cf1339d03538a5fa1070185d1d1d9970b1578b6fc9b197edc8fc331fccc77119e5aae0d0a3403a0de4f2cf7a6d92e52acbed1ac1271529e1de95981d4ea2ad3ca851fdb38e256904e3da7b8cb2fd94dcc2f1524e1589ad1666db3c5111ae6b9c77c6f50b4e4edf79ad85a10695b4051116f2a6694d759de5f21b944dae4148c3e4784b2a7c22e9d6a292d49a8e6cd252385faba5177f88eaf0f544858d11a14d6ec48493805834a643609aaaf57e793ab7c6c6840bedda9ff3f6a17b26861193875a25f903453c53309d47aa736f561515967b78b3671f7f6b7e4fa113151630be9793ad6d705d77daa7802b70c6158bc26d5f157671c3f3d81ab399db552b9f851b72333770348eb1fdb8a085f924095eb9d5ccfd8474b7ba5a61c7d7bcde5a7b44362cf9bb4e02472e759c2baf0e183aea740181158e15929bcebda0c28adbf1a053fd1cb8066d1ab82b90ca2e3022f79dbe75d9ab9ca7f17d7eddbeecddae98ce502618fcfa499d096f00ea1d36d40532198c4fcd0ce9476de6ba9ab2234cc10cbf2a970096025eb0a47f13e28e85f45619a75be07b4414fb8ad6bcb918211b19f58cef596631c03c606dd024a3c345583369968c5462da94ffb4ad4818e5f74497cfba7df752721b275f973a231668d6fb45882714a008c8a9d6e505a1e5f63b1a6560c4a5dee4cb6dc6e1b968e9ef50d5cd9957589640151dafec683fbb885c01e07ae40e5188cba8263828f1d83944675452838cbff0e8cfc23bf66ed13e25c2b37152ad34ee9a6b0012ef6a4be720049c3c422d779be234904c26abb18836e170ec76ef0376c62ae70a931ecf697241e7cf09b777b16ff0aca57f72f6e6fdf28b34e76047c1cd6c4d77baabdd40c9b3d98340b71ad2006869c06750fbeae95a74f32a8d7c402eb3a5e2ac7de00d84bee3e18da8eb6e32107a3584c24af497adc09f96e30b82487572f40f21921031e79962570963f6739d306d4e536ea47750e0a2d2fd9ff8c93646f459234df96fb25c9e23651efb53433ee03a60d16b06d86795552984242f8a949bf0ef8e498c93bffd892876fd4fc6f836bf870dc8d4c8d7ffa4136294c9c6ee338d02dd51172035f8dedff66cc77cfec964428e4e5f96944a3637b5bb469fb65373f9b5d09ddc5128bb0827da68f9b520cf0fed5c05c62efd8202e81824697f845c3092289f2c9405a41d85c692b1adc5366b758265dc2a922e01942bc1a8cc4e9c441cc9899560f800ac9aa1d3295b3f50c1e1420e4cf99070b02476ccf20f0abaa09043fbab6aa87711d0fca8e54fe7a4cfab2b5d9d3e81109b238994c9ca413de2a72853d2f37f7e09b3579269fe6688d12d9ee2414bdc843f1bc4c79480aaac66cbd720a0adf56be0cc132e2be9349362f32d1addb41b31f867b8c3e6b47f7cb968d0e0a8fc92e73385efbaaf82ca4b11964695d6f9b5a063b1e61834e868255728c6223051e0667e7b2de6697da02659818bb1a1af44561d64dd3303aedd4cdc660753eb6056702e165e2fee1c4eaba74f6d1cd2274fd9620afeb2d75a474995bb14f44e8a7d8aced200f5a1f13e41874a5b25fd042090fe1edb06247d4ea23f928f91be42be1cdd58b6e6398ee78e762ce66b66c87f132e1ae2bb8faa5bfd2676c7aadf2ba0acd5f4d06ff967e2f8f0418f6bc3e6a3e69e79b6215d53e7a0d6f26dae0597cdc14540ee0175fea9078222c69578d14771bbd5c5f631fc8a33ed7fe229e6398de0a7b7802943c5b240b86b1c771a3ad24af29982a88216ac3cc689b59ce563799179e31765c75f971aef75018f1c65ccd8ff4f7c96e234d611feaa687587b8093a483e1445952eb01ca3cb165bf3f49fb22e62346fb6c98059f25c6b4231a9c5617f33172711b5a5cc81e7bb5c3569d35d0c6c1a819467437b4e1a4e9197bb26adab6c80a8e176d080e655711e5528004015e7cf8aff70980c6e5e82e21e5eb5553945013978f4d8f06d9ec800d7d19ef1d74f93da4c87e673dfa398923a26fa1ec556e9674cb21791741e30a231d917e8cd1e37fe201fc7581e83f0408f865d50cc0cc9a0d13124ca867e3b70f7b0f39b73de0c750eaaa30fa77a3a6b630f57a1a9f12274aaf489223119590b9dfbca9047f981cd6cbb122106e0d771691491780b8e84513e6ead2ef08a09c0990c055dc61b5865ceb38d32c97248010658634a5d3f4fd500221957414aee4e8d842c5a8a9dc0dca9368cab4b891c88df2d75af1bae156e94914621afc646e3cfd6a82ce20b7ba080b698f129afc577382620fcc345559c604ecc1498a6c44ef486113b88eee94ff9b62aaac050b36ac5b4fde9e08f80dcf7ad03a69846e6ee7014f00ccbb29a3958b7ba4ecc1696c1ec5c74ccfff747aedf5e956e2b311f20e705cd2746e0ff0b322de033995bc01b30af2e3c7e16ea806bb5e9c1cdffeda4addae101771488242a9b052fa4aadfe5171f72aef7691a00315589580d0dd2e858f70421c8a7d6228681c1699a8e36ae241fea9ad858269cd4bffc7744d55f4a6cfc8f1ed8256964fa747d97d77074d4dc331e96ad8ec0b4aa57abc61200e3695e5dea4f1207a289dae5c220e7fc0b07a3fb6718f35758f646bf2fcb00fb1fb3a19dbe3902e921ffcc4817ab488b79a51fcb5c98265c5fc02e48e0dc7e3e64c7db2e736327245845333de68d7599313ba44577aad30855a0c5977791063543046fa29263fb63c5e89419d74dfbbfd239d5dc30b775d5db16912d4c8f159a4af7d37ca3a1fc01eb58837e32634769dd3e290220447b6f40a0357ce80d48b7dd10ab2f1fb3b589492375ddb073e521a2a71259cee8701f36cc1708d2b20c3889fd5b3c7eff94846fc7efaaa9e66171d30326458509e0701e08ba438503dc76d20c68274a0c257dbfb45577b73128c4dee0e957fb2f490c76d493df878935fd35cc6661f96ff4cfc9774bd740fab7a536bebff389cf164ed1be381f42a8a55625cbba9f15716f050d9f472bdf99aa9d6b0b3ebac97fd4a1af242b955ee8a70c3278f91116d710b80c8abbe7fb946e17fc34ca1032a800bf6fb4c2c424cfb779ec52867a7607665336c82ebe2d816eaf6aea06964dee26f2a3dea24e4cd45339a3f7072ddb68fc512ce61400ddd748be279958bf73a8b3e5ec005e762f8d06c609c4dfcd9f923f4c4f531042950c78eeb2a154ee6c6e340398d83bee55604e998e4a94bc3b099bbf2e9d8805dba76b9bacb07fc560a533d64ab4ef1956d4a74e9206ba8c4645be044b340fcd2a2ebd5f76352db718f41fc87224cc899c808d3fb577b5b049cd02b615a4fbfaf908da94afbe0345fdc164649fb678b1aeca7cf7791c1acaae06066f2e6ef131d0cc4ff599a984e48793be3523d85813f63903005d624e3deb873579e60073e449ff89dcf48627353ef169b4bf090f331b42abe4c2f8f47caad71c80ecf7f894bd0914c520d26e9a8c51136dc1d6f291767dc41f5a3e7219346c37fea3b3f3c5b28f7d48af2ccf97083937baccb0a6b1a041080a73b15b9640ccf44d9ad2e9f9b2e93fd21fe3debd3b203336402490162142d440bfe01576386fee1832b36fa346acb8fbc3a5f07f8d9cb26abca1432161f9b55c9f49343b83cb81c91c03e944d64085106ac1b950880521c2a2c53485fabc17b8825b4c48cb666bfab712fb60fa5b30ca45e5adc2a2f00dd892fee896442097ef09a4a24077d6e907848efa8a2b4328841580225876f3d306fdccd3e4e6bda25aa5a3ea950183a58a14c67b22d19ef8d83a0fcb846c771df8439d9ae44af9c395e6d799c900f30decd857f1cd85d50e3124031dd91c004b07151f8236f94b883b3dce245eeebbaeca5fc202dcd07bf51974088dc8de05f6cde2913e3f6a494c852ae60eb93323f48d1b8302e319fa3a1baa6e8fc64b2e8db72cb1337026799d3e3ebddd7a66f27bbf8c198672fad6499227c3b863ebb08c4d63ede67bb642f6b0d9b40525027d90dc2204120ecba6a0278ca68c2428527f0b28a5ebb4823bf5778c771a2b9e4bf06d9dc12a1934d1ca3639657f89997ae28adb8797bd22caf60cd77570f082d406ee2fdf2314aefe4468ceaf0706a7903326fce19ee8008694eb4b1dce3668bc40c888ccb1a392729b19acd1b71deb490d6a1d7255d7b3e53e9d47fe764fa85b3a9709084a28a7d54ad3648c0451dcfbcdeebd88510ea56d7f8d6e861dceda3760d451105126279cb020861c7324e52ee10f4db214ff6d85c4561f53091666d7300ad1836b2eca4f778b72218819ac5903665e7e162c74d4a961eac3dcc8e6c134a50abffc94d8540d7ec939b7a28b10916e505ad90843d08b4b51770d48c27beb2d8d548a1b0a50fe64ebb3964219ec1791d3c6d23562e0067cd3eb1f38926dd02ea9bf9803b8aca6e86a2d889ac122026b494096164aa99760e27e96fadf2d6003107faaf16bedb373b50612ff2978ee753156993d7383bab22dcfe911f121375522033766ac9a80916cebd9f1ab47382a2c87500d6614eccae65daa1080efa28f8ee8c1c5f319bacbf23d2214df237c048b416f28aab3aa25dc863e78f6ff5e3c97aeeeb1c801ae7dd578afcb3d74269eee132af1aa068f5d40f83aaddbc6b6c6dcb3f29ca3d8f841873cc7a73edfc453b58b280afc83e8dbe422134197dc48c8de9691f90f161491a7d7fe1b6bcce1bd8207fad71aa2531c16725cb6c3b670bd1dd52159723f8ff88 +MD = 7ac9b2b81f25cb0c96971b4647943822bd86d0006fa26049cb9943a09dff78d287afc49831f5c5e8b225a25e0dadff44 + +Len = 62800 +Msg = 92e47b82b728d639777d5d5843de2a5c364956cb4b21cabdced2529b10b3f4275f307fbc352866d7b094cfd7426ae801aac17ac72335c04adb8d791da69b3c4cf4640c9d01812c154bc534be492065a85ac33a2efc853f7a3e86264c781218f639c849ac81fbcffa3058b496bfc94a582e9abe873ddbf056df0582aeece0302e16a35f711e5df88f489576e60c2d3e1a0e8d2f5a50fd7be5a651b5cd6bcc2bfb733f757440714edb79c3a3369714eaf5e2e3b5309cb387307cb4e6315e9fb16638e2b43e50fd7ae6ac2c620fca46f5f192e5778f89c7bc3d47743e602b216c764dd54456b4ca23b8ca16dcf70c8a081606db9e027fffc416f1dae4e43c1a01339a604c44d6a0f25ab9ca3978c6aacb6d270d510ee62544c3602e0045f7521ba508caf4911d478fd36390a01a5e6ce5fddbc2b93d26ffe74a7eb8bc09c69160d57d5d66c4f086a12baeaf39643d99ffce0b43fe16a75652b531bf3eba109e78cae25fc765b926d06a84712ddecbf9c0e9a0d94721d2f1300c638daedf3c420c8c201942fcdff0c699cc1ca4107053d15580cabce70d9a2755fb683501b445c4241dd3fc12caa928c06ef9c5839570d91a955e87efc117df9ae199fba7df6f4799c3d5202ee11ca1e55150b9bea0198141c5dfcdc1573102e2fd68275925873ef3f966d4d98e10d7125f69a849fb1471d1fa93b9e635b03536371ce1a0ee57503ba6cf409a394c724e7f8bb9ad0c2950d21bc470e5c55c229d77ff5302a2a52678b4598ef948991ba2990014713d22c74d10b81d466efd711fa557a209a93a67b20a49e37e24bf7a14960ee21df5c67d48c1b7e692975acac4a96df93d6cdebcf190ea6ab2358636af5cfe4b3a9bdc1bce160bf350aa3cd3956b897e255158cd3e2e83481ce3b6f778d418764f992d48e4f7fb6d080e6b3799d3f35949c17241a0cc5ba84597166779e6a38ce45681ad944cce7c432baf9cd8caf2b33125f2c12052bbb0b3b76f2cb97be9b4813a9ff1e5fdcd478769d0ab5b36cfb466e3a1f4c5a8eb88f0ad89ee40793017afad51bde0f240f75f30950b2901d3836f65478397b7335984df2c5617cac1dcf5175db98b136fb350e8c7644a114349d411ac159e65db4bf5b7200b4554e42cdce08c8cf049a1a4e4f92e60c7506a2d1e519753e39b2a85cd9b2cb6d201e02feb70a6df177a1ff2a2cb92a5a7a48f58d48cd2e46d42693093f51affc7b7ff0caa307359068f32c412c6bbdbf2f7f9f17e2923724440e173d02cb08d2b6087eca186bba3c7712042bd5371abb130f121a49253a2717fd7770ba8b70906e3c1f659db4564620631962ad87bbdeb37bf10cf2e2a1efbe59663ccd1f61a6028f5535998da45dd38afe5e1bfa2b8a8f4abe586656f8eea5c65609c0f376942176b2a292342ee42eee05a6b6eae44f04ffdc9529fec9947cb8b9601ca409eb3986aa452e6450699100e1a4f4f670acc30fce3ba4467e81919512c856ada60bc933be95b47aa36e8857f5015c894b2437ff15c46bca9236830ff4bb057cd5764f02720ccb03b2539377b224643ffe45e24245b7e707af13cf7dd1a09f9e12cb39774722e88be7b930d4cb869276e472407dd09ebc6a1fa9e5632c218b9de87b1706a060737fce2ffef393b06dcaa839d10648d1427e8e79535486a65fd8b0f67645305e225bd0083c589d3a6ca7b41d128001081fc15602a7c653b792eb16ddc59759644bac97d2a7785a7d059a829c935fbbabbabf10c6413d25ddbb5184918381ae2b75ee702f9ee75e00cf1fbe28c209bb2499e44944be3d7f713f8884924ea8810c279e137fa10a1a5e2fa3a1522d22921b33bd69fe7d2bb31aa61c91807560749ee737dc334c6501fdbdc2e699432ec2e82ec6ed641c9c8342757a25cc963e1b5c1b4844faff9cb767eff9f87e9272e023d18d6e160b144281241ddbe73fb5c7bc5a4bd82748f5bd153cb5516299b35c46c26d4674c707835f48940e50c05c2c482abf2058a724658e3a917bf5c754b9d988031100ef0ac815396947a9c6859b77f32e97ff988d435b5ffae2a8b9db6b5488db486ad172837bad0a0242c0e6a7d449f6b99cabb4f8d5236e3febefabe3304b5276e31cf337dae9f2e8cc2de3c3d595c40fb04f1fd8b40b77ce3fb76ad4054605073a3ff167bb96b045969c0192047cf304caf14285409e941834cf8c903c1f6f93b0a8f1a5b629ceb34269c474e95620334d40b16133433fc83b8695ca5d2dfe86e6e668442319aabc5035a0feecb7c805d79be0fee4aff738e47afac4d1084e6b5d76e9f5aafce0cb307e3b9287184716ca9155d0dd2b46f4a02b30224014bbab84e8eb2cb639ed6a73a1d8d2610e49c0c69f8479954b9b85ff05da5522f9d2e1edaae04bdd673d048a5f1d30d2f03c9e3c34f14ba597816761a96dffe22e3088f84b6de578eb6c43f4f47d2085749c299be020d97685851378644f650608311b5538f88c115cd78334108d33c0f1e4ed762f97a5909c130493e50337173e711354f1f4a24f322b4cd811a1ed4dfea3445b81da327c41b7d554aa3de89e375d0ba804f6ca8ae1b42b51967fbf64f153d8ac754cf2a22cffe02b0243fbf369715eaef083574d022e99210d6b2cbe807314e9887478aaa437cf97aba9d3cf6b4a96da330efb1e19e700c6f4e8a7a3129d83b319f546ee5e0bee1b04f4228aa3355eca4b0e08667f7a0cc3db9cc2bb3e1f9f79c823cfe590e8e6358ca74aadb7edf0ffb71501cec94417a82fec108f4985e2ae11a47649036b2277c127cea10fc0f7daf5a899af7df1bbe4705ae367eb7cd7d064dbfc512bef3d42311a211d115afdfc852d229113ff53e93b6dee0d9a40f971505ea4c6510191256ae2d47a73185dc4f4372f1c01c98a56ef9982c8bc9ec221529121e1392ec8b1cd167b318b85b1d4b14b2198fdfcd99e0b623421e8d2bc30fa17d66a4ae34e47d62967eae12f749c4addaca03ee5ac2f2d5c84b1a5796240a55734a9ecbb8c8814a03cff1a82109c2f6322ba6b207caab3ecf6f0591f3ed0e2d3ef28b5041dd316ff6cf68e0a3054ed70165ff939e5614d980d569a20bc624112587f2a797cb94bab6a69b2344e46f38919f96fae511338f22a6cdf2a65552e96f315c37823bb2138d7b12dacb4f2e012802f44da6a01246ff09bae98c45a29d65175068cad59463c176566b01ed911a0fb6a0f5a7aeb9e75d27b7ef843c1c154f6256a2364041909bc1ee40ae67a36b8ee2225bb1e12e5b85284c6c57e2c7397539f64d8f25c184638162bf9a6469dcecae03e68be17b88bf3301c8cde1abf21ec5b9d19d2b1d2561e13b528c8ded567343cafdff57a85853705f6baeded026932e269728fb5c5ddd0700604d8a36bf69c9ff0ad3ebbbb28808edbdc2843fbe1d9bc605f83c86131e1b3951a6024c0117672b74d044be7da7233327d178ffa302341f84d497a42f6d466e8c5c9d3802c546d5a3be0bb8a3f8e8ba0fa26518bb8a23bb7d86b4bd9812af287b3a0401acbb8e85ff65e7b20bc38009defef193f0ff8d2256d43ad9385580ee8507dfafe54066c3f08c81b39d5013a9fdadc47729a79dda7987d200f67dde49128ad54b979df618defd80c341e6c820d27787cc4ecc786d4c67233bbad4f3c08a8c8fdba91b670b317e8deadfcfc7f8c724e29a46b44963393bd6916ca0e7db56d5b56a0300e12551d850315f5139b8437b7ceafba73642a6cd920bf52ae222dc2deefd8d948beca6d3709fa9b546e9ae45fec354ef6794fde300b03bba0b1e855ce29e2f218eea9936963da64315126f4a0f2e39d305e0a546c78827988a56b9293a54d1ed12a790cb69123c42cfbbf0525832929a38af06be909ba10b8852e15e9e285b413eaaf458922654fc9b6d982581d7478d2788881203f2925c2d9b63c1b520b5653a7b2ea6b881d7b7a2aecf8a312541f4fbf3930cc794e0d4a0b8a91b2847c7a12fa2a47d842cabbc0b09fd4b10256617db788f72858975b90a3119339ea27a3d45a7c0a49e2eba53ff038a2ec7de9f3df0a0e40de4da3753928f1dd3c03bb480a313e9e5ad8feac3a626dffcfe58d5af62f2faa58d8e10ec61591cc136195eb4726e86065957255627f9627c5c9ceeb658f73a0227ade7ca9e177ec6a744611fd93e01d04c8f5252ab047c788ab1d498fa350aeb5b40a3367252aaaabcc5a309010dc10b2b3f590059d095b6309f6d9d7136d329d14d2e7805900a351ca30ebc11622e7fa16d22a85ae41600f56fa30fe582fe8530df6fd87e5c052f6fe6897f32c6b0f354239492d5c8651c81285c347d9ff1c421fb4e9e053b035f5f97fb998cc0af31ec689905f305ecd27dd28256621716b14babb311c4b76c8e92bc4e5346d893ff1245184bdc2212ec9176fcbbbc72d41357f6867ae057a984b06069f58996c4266ec0faaab7a73e30641bb2abb23692b1ece5af2184a32009628834c77c83ab6ea7e4256bac1dda689fc98c706cedba54b37e174ed6243ae5503e97104826ae9e65b682d5e50b4d5ae9887251131eb3c453cba449fe615fdf21897a1a140736805240f93287f9ffcfeb614c95cf52e5c975d43f5925e3f8c17d72c52b09afacda148973c8bd6f588e4d5b0285c710b82bc1a0d1c873306b510eff608c4fa576755399d6e1adf6c061b67f7c6924e094b1de3740dc0fd22258793a33850d71fe19b8790cc37f159f0eced4a3890d4ae12575a176de2251839d692b275d6b9caa8dea30fbb65c555d5e3e625d2cabd7074d2de65915d333f8ea84d9225e92ade49b92c68d046c3d6219ae31939b260e6ef1af0fd3cb4b02e805724c0dceaa2c13095844a8f3d6551607c54a2e1fa5787edba324cb46b145bbb7dc8cd1f6daa29ea0e3b136cdc325e2ef2cb414fe509ba0d2af2b28d02e85d8c86aa2541e4b96ef28dc151ed85a362c9b8b772f8050013a9d7e2ed4afea49a900c395808e25906d69ea78485dc40f5dd1899c65efcd32b605b634b62b0c199527906d3c8d8f18802bb6e39ca32838de5ace29a091eeb57ad20046b68ebd7d040478326f64b1b79035e85d02f4af3a16fe0329c7b0dc11f0cc036bbc1e24fe5e6024ed035cb4f4055027ef6296809c6c84d0a1c292bfd17eba68abb0256a230c033ba6dfbbc05848441ba0a4d2c5e64ab6dc9b797fbe7a8e66d60e7ae9b67574b56663ebc9fc6abfd96d78b0f0a3a1175ad01ed4c101968796f69d03b3317bff3e4d2e0fd091b2d3d6c57f6e3844543a395333bb9fb1acd113705f31ca02bd1565970e3316a7b8ec05cabec7f2d0871d1b0ee11660f645d4a5eb5ded7853c31ff3ed0c3fe46405732c253ca1656ec227c8a830cd4df7e8f7130f9d2003491683b1f62e1b82f320ce147e01e6da478ec007ca28c8aedd1da5278529b0b40e3dab645b7eb0387a9167857b167c99837250a11cd2efcbcf6d43a7f50987d3cac0fdd7c304e44e22e1a547c7824dea49f73f5f45352bebf65e3a5c06438ba8a428e3d1d7c7a00b1297ef21084d3f15c1a3f607ee5962577a7af20e61e1a67ac5fbc4193fcfcdb9733bafdce7803c611501db61be477d588249d385aeeabf9355c40878a224519e6c554c400b222b186a9657375e066534365246889467bd397b0816b6a8cf1602266e2e151d3bf380ebecd34f759e0033bf1db1e1bb5f8ab55f51589bfad7022fc80dbd23c4d47ee1bd8ab572ac18389f45327d56ccda0d4f2a2635ee4044ff6c7bbb6132a9f3b3850bf86668ab7bf4beef1a13b06fe12e4e04101579211ef40067ff820973a37ab3fbbf4ff919cf1cdae65cd9b64b7ad5fc14966002466ec834b3618871cbe9bbb2b566d7ed9f1d97395280393209b0ea9f83407f52573c65508869db3259cf5ecb6275650be46c4f235a0e9aea508855807896d831fb8eb29c0da0e314c45c4c462a74631c91c42be2268f64a8c90cfee71c21d467da6e975f6b8d08dfb5986b6b34ec38e84d2d13bddf8bfe321c43ce1b9768dbbb9de3fce3c9b9b35ad38ca481a9654c37c1b0effbad88d250f035ab6610f356f6ecf5c96e50aa4a4ec73fe0d2b06507d19454a7e5b71047ccedeb7e0eaf4babe06eade64927ea378338b905a47276d17e6f2224c326aac56dbc6c305c9ef74441cc123cbc7801e0c1cf03fc40171f1205fa204cdd21dfb4fa05c0a798027f87e1ae2db10e6875afd03424aeeec6e9322fdc58087ad1357d3c6ff0cd0a066cde88ba042e8921d00a770e2402f6a75a99c4bed241e35e3686fba30389facf45b0fd9ba29c73cb995b7f050cdf9fe3fcaf8c4795dd61ef6a38fe4901c2af88926509f70ce1158d5909b1c2e32f32a257dd4e20a9c63aac58fb0f08f3627257dc6574774ce7b790977cd3edb1d9f70bf189d4f016e2b6be8838f488e0508b64a91706c26894a1fcdb1cad2e7fc53647541de460e41b1f4d82557672d07442d884e586816bd21af8ae51092b54db377d08ff47181c57bb80cfbc5d6ecbb6dedbf236be5b5a886bac9683ad8f380341d69399c5bfc680d480f6d37123dafea9947d7374f93f9edd411d1a620033259e7a7f5125fde87db0757f047a3a0434e92cac02710221fbb6dfcb7ef0264e2994905491317c8c369786f3b63f5a5240e7cb074c7d1f09893ead27171fab90f76c4198c0afe1b993d3dbd850892cca0aeb9717b95ff8fe2fbfd4b94eb73402776eb4d54568d7787cab9db93c2058777b3dbb63b2e13408d57f7c09897f6caa92e112928a2404d0d966f41be1cc855e79245d749dc97b2f63c7cba03140f8922e0f8258f6aa10c9924d0788a7555b89edeaa6d0e3e0777cc2dfec05afc283c2343e2daef1c4a46b8fa8ff87f68284ffc0d5bd01edeecef6d80f05c069cdb3408db73a1ce33868bfb9bf03a1361ca5c8d82eca8f22bb28a68e9f3f5ac92930161fc2d22a34cf03ccf6d93c5ccfeb69ed1f3cf700e90e2e92cdd6c15a369da34cd4a61d614d511e9a2f3fd2432ab775757c496adeacb187c47bfeb44818f3b4e893ad4248948660324d3aecdbad487468d69b4bb0d26adc44815d3fadd6f10af4431d6a687236729b3610b2aec1660cce177bc3ffc302d518c83b8b0fda604e77ce3fbc475028fbddd4094d43cfd8e5b02631fa52e641194a37e2bff98b07277a1b5b616f9425a4010d6fe5223d67a815eb051731a5ee51e2b59904f051b03e0412b98068a8f5150ecb88a1d474dbfd064e3f422467d324e62ca7827e94213a1d9ba042b8f260f50cf59eaae0ddfc8b8a3726a5b495b63b608355602abc23c5cd9e5acfe9dc2eec0473f728cedf91fba98e03656895603d57a2ebc77c317e841d032d4e83cc26a4fd2ddb4227e164f46b3b1eadc9d099d3d471b1defd5cfa2114b262e70c2c11c2ff0a9420714d3b1fd926bfa35eae28a5ded7eece34a35f44bb9440c40e63b7f112f569eb378adf24fa382e6faf98d75a7dbfecbeaa6f7494188f110a10d9e0d73fd3a1cbfe0018aad757b23a44f46c9bb90ef1d7e52902ba368c1be49bf6541c8d8d85e75017ad59766c952ca62bb00f9bad46406f37d15d1a74a8783622da69050b5d68b43768dbe1601d6c5ca66b5f2a843322d003a926ce2dfeee69c53c66ad357175b3c80fd520199323eecc65326f7bffa58ef352bd59a1656fbc4740ba8ff30837d4326bf239813f78e5046531707bf4f0337193c9c3b62723b810af0db32e6bd69fdd44d7367f6894c7b83504376a582c47e436f314568b31e48850091fcce3799c32622f1efa579e1f4f9b52cc32748050b401e25568d8c1c818ed54ddb7b64854978ca0fadc55bf723160c335b99015d848bd3e8ed457fded264c96f5d52c6c4e758cd2d10ca81f4ac54c007ce9f413660a32b1c582500bda1c36786d108f0d1235286fab7298e52e7526b1a9a8e7a1836127e1045a0a13176073a14f4f2552293d291c91f66f3aa7a9b87ec2e0b2e7b5b565765243cf3e2d5ccbbba37a38641af75683898073453cc7c80dd1789e0e876fb519b828e5b3a376066b6f780e6b6dc9794c9ef8ee2f75381f09dd58f13e7ef5dd723cee959b0118eb5bbd33ef8eab1d581fd546261fda648518ef68f39e24b0a528e97e271ed0a94433949225f55b5abda23852643ef4b3c1e20e90ee570008d7e4c4c0e3639791d79afd7df7c905e86e80ce04efb34a8e9d1042b828909a66394dd79c1193de376d39fedcac32312f335f9f4511a7645bdf4a93c8ea727b30950c29fbf8d52e05cdb8a2978d576897d6e8b4fb1042cb8350370aa87c252ad0b1c8c2c3e1520d62c1beee97e26131881dc2141035ab066fb880ae4026d02fac552aabde143206b60ff3ecc2f377156ad295c76ac80b9d86dfcd8878309c132e4bd9eb32d99c9e6a8001a30107c29ba5bb0bd6f31189192f8cc59e39e1b05dbc5a7e8aa978b85fe4dc8d1b3d676a4ba1a1ca4891574e01d48910fa69833595c049c1912a38afd08deb425d5c5c96adc64b7a252ee482dddc9c57a4f25c5244a1e149079c63a979cd74c570482c6e4a7d83c476b1fe4b36af8e42a2bab530f1c7eabff4e93fcde30d41c15ce71f1ba92c0f504202eed492b52678feabd5f6249a2cca60f8154495b318dc2a237fc5523db8c59109fc437c562ea2c0ac06cd65826e1354b12c361729c2bee1e29293ce1646cb6bae6fc179fa6c67eea48edd3de77a42d7fccecaf2d50710890ea2aea421810cd9d991751309aa70927db64d333116fef2c14128ad21ae7a2b8ef53e5cc4312de272a888d1ebae64b31ec646d0c80beface8ce79d07481a3cd4ad36a7f691dd98f61fd213b0840ec5a6f06ef9a1420be0d59bde5e43546347a2a865a94770eb6e78ed869dac82ab08e58bd711b7e1f131dfd569370cec6d4371655372356cc6cf2e180883594335757c135f3db6cce95e5bae1acfca6c92c0ef68729b46d1fa4b8433fa5d5d2228abd92b49e6147f7ed6c79a557102517e406b26557d026cf06429a5be840ecc0f0c9b38399357860c3ba23ebbd35b377a3273237eafee8a33997d01d7a0048d532820cea0ddf65d2bed89efb05f2b8b2117a5f4509c71c64e6bfcbcd839d5029f7f1863022e7781486cdd41d58d09c90d7061fd6ddb228dab4c375b32a9d6a83e81c079fffd618f0c4a1ab99de56c7d99dd45b338e4775cd4caab417988a00acac0d787dcd34ac2c205d0db6be0ca2550aeafca5430e6b05557c7240f5eb796decccc213b3879e914108e1bd217a93ccc752e872249072497841967768493d8c505fcba9da5955e7d0aa0ff62e2903057c1409e25a54f3635d020804192bb4d17fd07d876a3139f6744c7ea90ea05bc9d036453f0de25419abc7b02f311946062227bff48a98b285d6f4181ee86701e06bc286cf64c3ff340a967640d89b5bf1e06a783a6215285e9dadc49de5075f12f6bfb3dc887e5a7c2479427e353a5b5c62a3929f1b300347727c6a6d2d07db271936b4aca19bcfb89e77fc32717dae0d50d9f46cdd71ab09fd6bf3d7e7efdfe67b2e7187d6a3c5b223988ca4b3edbccc511586e8cf61896ce58145233c48d218c5afd1b74f1da43059e5da1c2410ed630d5e305d1a870337d3c6499953981c859ec2bf833591d3fbe865cee2ec71aa982dbcda11e56b82346e43e780556a25f5af6d2032b087bcdb7921513d3295593559376c4d59966f295fff082269435430a0badd0de788c697b41f49771e06640038d8ce599e8f30df4d0292c5b8ad13fd18b1de5c031b59f94069a0d6da4b31c273a6e97ddbde2f1ee1556fb2692fca26bf590b672bc9ddc7c6073ca38bec2a42b1a9a301390cd2adc3ff8531a552df713eba4c758819bacaedff07255c71b54a9beae52cdfa083569a08be89949cbba73ddc8acf429359ca5e5be7a673633ca0d9709848f522a9df0e7900045d97c69063c8abbe80bf208fc023c66cf84a260d1244a29ba51bab11c95935e829cb68f3598599886a2678e0bc5d8bc014acdb59ee6ced6e1512f3b470b0447e1fbf0a99c71b3a75294fca86fa131eeaee13c34c17f25f086d8fe890ae87150e68fb124b539378cfe5c27c4a214c6732b00646ae32dde2b3d61af26c28e590e02b07eacfa8f43adcc508f8f2d9114de07f0ecc46ea365db5783c791289d29d3b916cf8ed6c4667e6f2a8a446cc69bb3b86b2bddde404b7577a7ce54877562469c2b1a66f4891e933942aea10a05c968cea7a813bcb4fdae104639fd79a7a0db0e55e5b1be3dea70bd2173116fdf2c71bd6ee80284520ad9b40780d879c45405922fb7ebbe63489b8d4f6e0218c3436307097226cfa7e18cc5443981f22c0a5aba2117915f89c7781c34f61f9f429cb13e0fcd0ce947103be684ca869d7f125f08d27b3f2c21d59adc7ab1b66ded96f0b4fa5f018b80156b7a51ca62b60e2a66e0bc69419ebbf178507907630f24d0862e51bec101037f900323af82e689b116f427584541c8a9a51ac89da1ed78c7f5ec9e52a7f441ad5e1382e083a95224f395dbceb69fd87c859dd1baffa369ebd48248b142cfcb2d0a1df813d178f8147148223312135bd8ae4c3d05d8ab68ca9681d9610e1df08d38a4ebafe8cffc0e04ada33be446d35c93b852f4c97005d2a05dd8d88649523c7e2ae61b5628de504228c73fb9a4cf56ba74dc0e5e8bb192a688bf8e37ec70c92f226fec961e0fa9ae3c06c4eea7b07596e400c8e4790c990da506089f71dc91e02df1aa251a10689d6a0a420fea1727cd8889ab07a277444a1544be2973e64515a013ca8fa7712bb4351a5da9c673fbb2f4df2b44a27222d05be445626d3e41541b3ed43240b251772fef7e28d7575fdb9b69d007f39db3550b6d04d6b835251011db4db96054785aacd20a299721c2cc0ec22fee104a843c866792f2ff7b5ede06819d8190c80ed34e6aa8087073d2f8a17091537319040b7f4c6643ad615d027bca4a275c8d93758721de621dbdfee5f5ddbac4b679c1263883f5454c97be41d40dea172e2594c5e99ff3b2d970a5189e91f2de34fd3a2154b6d674578ed100c1d4e3dd70209128e82dae774e2c6404fe15dffc8903dd81464d706d48a763c3a7a7ddf6ecfef7230 +MD = 4a86527c19095982e491c56f5fad57593d827683ae08f0ce40b607a49ce25222abb4b96762596e4809574222307e2e47 + +Len = 63592 +Msg = 999d4df7f8667ff969f27d5a796a5d2516d59741a1debd4d44d766cf86ff6c8e1c00573c02bc1858cb49fb53363ad7f2012187f302529ef373e9578f8e0ecbca5a7767aec42f9c37f196d86cd3aab6cffa8472f7ad259f7c3a731c138a7f44faf80965976346735c82e1feed783f6285a9073e96cbe227af407f9da3a3db3de8a1bf393d0a8a068f2730541e4f8343dcb5b1d415840e9d552e14c28700a8205afb9fcbe9df81bb9a888dc2467dfdc19bc78b1cbfff336b36ab3b7306cb715419aeb403e20ab5fb444cff30af2d35458c869bfedb65d8f81a60fb986929bb41ed6303ca72b4ae2f541c8f869f85b435759beb63b0dd86acc9f45c19f944104f9dc29606df05f2bd939f43ac5fad01fb1fad83318790c4ef0a1066defb44f7e6f37274a172240b0fc97e258b37cea4fd52656952a8a61a29a75c22cfba51f96eb51ca581733a818bbd603d096e1026a5d56ba7ac5b4610c2667f97d57d919d4fac6732902a6eda9b39ee910f4e9a0e5a72664529e8982f221022cdd68b2f6bf1a0fc22b4dee9a0a603d02c861d95e483effe49b096c5feb26deccdbb2d51ebbd59827dd7d9d25a14e4ad13542428318a15dcbd28aff506d844869e6dab20a6199ea24be06152914ca42d5063ab7c7bd6aca8a87b794fcdfd5e9748d34dc3236e380495b7bf91ccb80bf9e999fab84dcf7c0913903dfcdd8a84c8d4d45b62ea25f04f63443bb693bfe1b9e9e058052cdd4ca8054f4224bee57cc1495a1c2784a48c2bbb6f1cea6ec9ed14551f0f8ba268e62d86a0d2edf6780e29af4cd9387855d442a720ac54e63ef8b3373e657136d8103f9e6b33820faa04a90f91dabd4e9f92392e3f311d8287ca3e9624a3e0719593865698ae0991e225e8701367df8fe98cbb58b4f46ccb0a2b5c7bbb10ffd90737acb50f8bab028a388fdab9c8c5c29d8b6e2e673d6a4830e3b5edeaf6f7f897c356c4b9128fec090645556b44996f2257fab740543e8161b9f2f4999bef56ab012e8a7c8bded6c757b3ea1124801ee0b808fc288012fe0677bb98b0481079adb7dc0f413dbf492cf280a094b1a4583f764003050a0b4885e3b7e2184582eb03ae085bf1715bcca0a15580da302da4a75849d6c13a53e648c68fd9b7da6c3417ae5977726fd9e78b2ada90ccec438b8028cc7d42581260b5e7eb86764ff6da4f7f776aae7f62225556b6da522c0c9432ac70fe72ac6f3f361071ef3deb4a6715e80b3c8be91e0666ed92665537b34725adde63377e93093207cc1ef5f88d63d0b2bdf5f3f4341a26b7153abb565e2cc1f2bdb47b15a6491195a21b84bcea54e7a5349ecde9cde6fe7ce8606ed136cc6f45b6f725bacf843a829cecd48087c4c489193f011010f35403b2e054f062ae956c71361db536441796619bcc8b8c3ace2613de76b126c891151cc057fb0a5a9d3095784b4e04100f999a305327223f6d44cb85161436ee1e7ace0a5e395859ed59cac697cd61718a52eeb1539a715a09aae83bc88169eb61fa6fc650f37232efafba27e97974eef08a0628b32da0130a211309743fe749c45ca7fa1771806d09fa0ba3299b660faa09899c5b28d7f2d971f4f50297d78fae6a20b09afbab93a50165423f7b5e5c1e97201632d34080dc62320a5bd1614687ea7fefc1d91a2b2a8d710d1361855eb5fc739d227500447cbb764d6535aff5b6a56fc07452f7bd0066d60b8d95039cd7ff2939135842c6214667c8090ae624a56396299baf67d18f543d44965eff9eed6aeaf2ebc22c8f34c9ae82309a315cbbec9c351e3994f03e1f4ec11406a1ed5d0360d193fce6261b0df283c02bb62360072ae9e535a6a1778eb089f1d31310919331ddf34e991340dadcd4a3069d04fc7ee84fd9eec56da26a0ca4130e7a8fefe1051ff3ff6ddf09f8147cbf730f84f7177d6ee0ab17db257b091b64fe01f3e1b7859d7c598911e02e4183feb9342dba9b924ee3b3c773698950f5caedcdc3cedb586174a216312c450bf246223386abd1cef8cb4ffbbdd65c883a2f2109871e162773c5233bc855061cd081f434173383da737ec7dc42d5bb5af37ae3dbc838309ad95524215dc336192596786169bb775dc7e6639189cc706e27937b6b0c86f1589d0eedef78dda0adf96df6e003a97600fdea6b421a24416bde6231e2de6f210ac7d6c5cea10d0b7e55eeb6d96d66486b1c7126197e46f7fa20ce4d68c35b87575d97f6e661bb3e344001ff75305bb5452c65dd3b3c985ac2f6c1162445b2ece86938c65e3f4d0278c38e1bdbd3ef853636add8d3dc84316c6723d53febdd1864f2a17e5fc42c1ff2e57d5035de897fe840315f07e771469f7cdad3e13d42d37401ba651076c05d49aeb6e7a8da936d0055d9baffe4c75f043ccf5530c44ae5c09d6bc59ae07184252621275e4e7415297a8d30e45bed4542afeaa657075d15efce9ce42487a85b3056a75a7fc2943f09b9350aded44dc002dd140d7c8fe42caa9c350cd7f5cbab0f452ec632be5bb54819b99114d84e97eccf33d1c8e245f398101e83dbb1443c6dfb9fb5a0cb313e8fa3010aafee5894a78c303b628aea2f62313f91574379d6f081e36df1707ea1865df5c0d69fd37ddc1cf493720f39abaf0880807334d44140dee0374c36aaa7d4517efab272271b3288662122f79c2e289bca96590abb44061a805ad9a41d18218782ff6befbd3652d76d2c98cc7a7f75f4031d2e5098a9ea3eaa20c2423fbc1705ea18289efb96e311f3fefc153b673d1b155b1d8bd236935146cf2c98795a5cd59f8d11084a028e3fdfdd775b46ae2816e6994b45d1b4aa5b3bb0412f31bc98ff88a650b41343fb6719123125051ce0ef601ee305fdead665730b298ed0a874898cab0a2abc21d19488e451fbdf780aae6a340b54bea2c075d5280c3dbfe7977d95e36af3af64b9cb169dff653c8c5159eb21ebb97ca21096494e11c56541abe28a97959652d45a16aa8465ec841e5afacd2eadbc9fb36dcdb7c660ad297d55c1520fb69b0f395d7c2ce0a81720f7d098f7a376e58f9d7f2407d9227d75653f21d793f38b4d5a690685faf36f76df593c51c871bdb428efa221cc7fbeb0bf110a006b74ed730027ba9b1a6c7bef9e9dedc3e4c3cb771c654feeea9ef741547285b5de6249ebf33ea257873bc3f3fb46b3354197973e408834547aa8b092ec0b98de35e5281cfb57c6a18b89cfebbff9968f2513aa725d01583cc3c4710a4f844e64b924106ee01a2c626c7e283db2609fb9d95f8b7c3b77c48f0e1bc3114484ac2daf488c49692ede80734155539c23d59ba5a4c2c2a2937e33a3d52d0f94b3bc2262782115603ce4e5e8fbde9445ea411ed00ad8ae5afd9012ca19386c07bb852b19dd593a8beb447713d34c67755ce928a4b854a72a5c0113cb0f6a9165410f311b9fbb20b2e408203bf22536f321d7a267d7be14dc59da1dede04ee476f0631ab1e5cf309fcf38c7aa7ff46888e21375628e9f5f369b221a7ab469ce026d88d023d71ed01953da54a6a33e65fc47a387dd067eef01cbe1f1b8b245b8d0638639b99f2f69e718f8ae78868d9417f791c22066e32c0490208af0036908a978663fbb628a64d2c799bf684f685fa09be50d72d7567e0993e6cd69ce5d2855542fc9704bb827a208c66ebd27582d61daa54f1d81604dd67b3ba26d3caa7e9ca0e9be217f401c1f8286a3c135e467205ddb72678b880135f127f14275d77446049c081629aaaa10dee146baa29473a6cb8e5d991e5702eb9db3a231a06c701a27518e976f7f383fc3df40f195f0babbcdc7f8fa6154b9c326e69d82e6f1dce1b21038ec79463072da8977ae3781a4260b8d2bd47d078c8435c9ca7d6eef1f634cdfee5c7087f972cbe6d439afce9ab12ce8de6d99f8e4f57162116a61eea1689ec898307ccbfb073dfe3fd9265f0222d9e0f90fdeb02ae083bb5b90e674cab850d21eb1c4989ef8d8daa1d7c4bd4542b97e640074b6c40b12dc8e38260b021a0905682471794a0f4581e07bb06fccd975c9088882921c3ec7cb94aa483ab158716a5fd4aaf367122cfbe60d13fdfeafb4cacbf130cd98434a92532e758a3f383108e90898905dca345199d514f0428b1f879681a8eea2e14239b50cd5811483f1e8ef0763d794ff068ae31bdccf02375d0a52820f7da1df57c6a18b8fa9980058105a1a325075794aaeab269222a579175be53a9002fd063243fef4cc8a34790f8a10892d8466ffa7c6d93f5f72931af58039f250061d1e7bb7b68fb3aa4eb4be5efb9c7efad05bc5d954ae6b4533e29e8334f17a116befd92bb0a46d93507b0c92029b4a3a1c534def06bbdd26ef98bb6bc08134a94e40f5a6d47b21cda094a1300ccdbccdb0b0e710d6aede9a2e06f341c4e8a6582eda77300a5cf8dea8c7263f037bf93af6393a45acce952b59f2ef0c276ffaa5748606d13a8e1a50cede43c8ceed2c0954b8ef9570642b60d62557d4d35e5518860a4a924c5aaeab7c9f9fd2556b7bc334f3ad090ab8c7c10e67d2a2affde13acd2eed7a2808dc7519d4e365803d0eeffdb41da8631292d7697f087da393c692b1bc9492b7e0ce380d43b68937aa0e1517c1e77a61bab4295037a26d976a2ca99b7ae9e1df29a97bbfb5c14762fba3beeae2b287edf754402955487a73c83a05f132946f892d98c799f1aca6e979f471dee126d8f0139aa25da2a1ad1ff618301caa3d449e32c1a302c11eafb4692ab65b85ec745054afd955e6560d843cefb285ab8b6904814c9762ebbf69ab166c15c995ac63f703bb6d78e90ea288e1e71193fc26e5a562622b223838dcb7c7e31790da0daecb67e5e42d727275142f27d7ad67b7c0671c2be8a8703110bec3b743181cb85cb6ca56c8de4b2a8d116cd88b3db2e60234f9ce555d5b510ea9530f21c92255759f7236a0f23addf365e121b6aaa65ab4f33f73fba9c041dd61bf133a0cb68b026da8acf5d10833adfad62bdf5c0bbcde8c374460f569a985cd4fed15479e02090ab4e04ee37dd6c5b6931d8ebba9b386e629660ea71c2f0fd44bc23be4a363955ddefb338f606b42835f204c2f47e8b6eb5d048d29a27e8260fabd32498d56ab4e6e252c407b9d2d48845c9f20af0275821a4463e1c33ce658a50384e0248255c5ab85c25b94118ded48f812f6a7aacc93aa4e1a39461243a394bfb80f30909aaadf447c4974726a59f41d2a19f888c107534b3a97f5a7a22b0f175740782783e55089e372e366cd76cff271f16a435fc45e63496596a40ad75e33e8dac5f0165f467d7d3ea895bd2b23a06ee7c484abb313bdd10af2b0848fc83cf345df935dfe0b48d5168da94260364ea961d0f2afbcb98259eed174173b965a01e88eb760abe6117060584764fd5225abc8543672c899d96a79fb97cbc411b4992d9a04264f1e00d885d2192cebbd4dfb8519f7fcbdfceb8b1337c2a8107e73437bca24b7d0fc3f94eec3c7a110bfed21fee7de568528e044244e9db70828be873be7bc1b18c8f32c02f3f9cb55a22da69d8593870666df1d1409cfff9456beeed3b9775a0dca4728282956b3a2ac3611c9bdbd972afd109f4b2e01889d4f9bffac08fa7d99496111ca2f8660e02730eae955048fd7379c513285da5b095c7c432e9cf08ca38f696f4fcb32daf55943ba67161276f75aabbb2fd8037fc2c58940c13dff8d12e288c81fc6022acb8b9507aac88c5471af6466abed23fcaed2ec80ceb2cf8ad08be5a6a2e79d574904515c1a331d312d7ef0d90f8de3dbb7cbca8bbbc4098ac4d1aa9040f8ac69560e9d3e1f1e6b16130f779cc180eb23c4f74ee7f23b5596d6fefc0f61bfd669dcefa13721531e0a0ba920382b8ee2dcbc9f9d1ed9df5ab5ee5905aa6d06c45ec2f087ce8898df16fd951334b37f710f890be2b8da77c1eff429ede9cc931d50f059748cbcb65641d11c7918c31a3fc31283433b5ccd314cd0b7dc54e62e8a484d7292f725752a936f847a6dc228f5003f4fe831c7a753d56b4bf97423a1b34cc38209992c9c0314bf153dba18713acef8b6fa2182cecf91ab2c6cd0ecb33f6739d301fa37f58bcdaa19eb872cbdb7362501a194f70a4c8979a45ef0a72bd79e98aba1a0b04667c516d6ab5d68d4133fae7904118d2272c3bef9f75dbed222fbc6531115fd584204ed95a6c2337ef7f27b634c20ace0eb4960745e9e9770c985ac137ae188f3c293159e0341f5820b55750aa049bc0a5c23495dbc3b9ccd73443232048ab7de8f797839eb5f17a9f67382b52915256970575ffc38bd33b0c94141fad69af4e352befcae86a6ffbb61518bab0f0b50c5cdef8c98fbabc6e27283bfb11999a6c8b36b8b44fb9d1680f3f9793579b4a3e61bf2b67b2c8dbc2c171296a0f40d345659870c4573ccc4bf5572329b8f9687930369c7ebf4ec7d5460f7ac0f90800855ed1a66f715bc72422ec4a0257b3b65962c5ba6317b4e7122f439eb461479898d162d83a30af486cf27f8aa1b622ba3b540d03b95e83e00607ce0398ca9811fc67dc64a9079fc6a2fe81437c46fecabb9e4d16e5e634192d49ff5802b771f32c7caf0a3088b5d842a18233169c708e369c26427d616e18f47067fa769a5db2a59a4b07651689e3e875f2a7f529507b58f82944e4327a55f825986968f5c3d7044b310abb43747ff10673309c7ff6f88f1cc66cbeebe156a4a3f1335e4c3ce6a50a0172b7921e12e8bd545b7102dcac35946e4861f04ba186a602c6cb20315814413cddce84df335c154697174489fd08d9b15681e201bd2a865dc233f439a1deab33ba749e3057b7a8aa61f3c78771655710157323bc1fecef62842d5ace6a708296874e30d9f687d1f04a9b1e4d9fd7b71b13ca47d3206a2ba1ab1ba668085671c5d2cfff14a6494bc8bf718b54dedc5422c00bc0df850ed5ab9583698f021cf3520b5e5b78dd7850944f1bc125b4efd8c7a89c2149b46767d0d1f936abfe2081cbbf9dd88f12919ad3680e4248c88e9f9a4c1feb9a14e07cc1fef1705742fd97835df2f8cfdc21851698ad7136703522fb18fb82594d266eff6ae0c9197720bf2974e22ea390b4a9ce6f8de067528ffd6a9da377ffb395c8d9a46b835b1126631e830ffcb2d6a7737b4b341253c5dba97958cc4f05febb14e149d641a4977b2de306c0e56624866c9dba24899460b491a7c8ca7a047502ddc6b9d5768e709b7a078ea97b45f0ee0fb64ac3b8a1b9b750666c228b63bd098dca72ddb4613303d20c792e20cac22ad7556bb611f417306035b168f5bc3d3b9f9d13436dc56540b05254c3787d2ee95deb9b6038142fdc4bb647023b668c159d9f09cb15337ddeaf89a00dd4d58d860de968469d8a6a077d388b82df0b10240240c4c94d33f33a2a12f961d85c64ad51ff40fdb4bf3c3e6f6d0d6f53027fe36832e2c2783f4befba7ebf63f57a5abbd46db3ea102b3d0daca42b2c39f501d039d5c24b28ce0e6bdb3d7088bec7b63e0fe53f902266d2e1bf7e935df65b7c86e1ca01c7c168b14af6cf9b5486cd3da06ed652847dfaa457126ca4590a9e16541a502fcce487cae9a7b5be3c0ff3277f7bb18b4b954f17da4ffefcb2093585e42e389acf04a3b1e4687057b39cb22a47a1175839daeca3e7b295fb0d54ca3193a7b3d142a4550ca7b39fd66fcfb2ac95997827e3e14bdf0bf4d22daf8fc4a00f018261dc461441c01394d8a51b5d34c5af4498de3af53fb38124133d0cad5792e604dad05c59d7a9f2efdd17f21a39646d0d299d3a713c7ae21c3a2a7dfcdeebafbb9ad369ae64e1fc01322d069240fe4d52388572386bce921b00ec363bac65d9272069f07a4ff479899648ab2de1ffea94644b74b3243b0bb10616d7d2269dfcd819e883561f5e05e9681f627582f5af443b33b48a1c2cd97ec82ed558f3f0853ed5f394ba498b1ba13605ced1aa5c25f20bf2b425ba3065c4b598b1488b0a0cdbe30f972f650845217e9042facebfb91e74fce60e64c24b236ce8fe296246ee2fdf812d2de851fd1aa0435139767d033a04a6dcbcc27ef43b4c940e63f033b3bb1a1ca92e49f4bddd49939c1628308ed519a50ab959a2eb4cd32e8490eb5cf7fe2126adb9006d01e9e90566295a66a660426bf27c70fabb089f1cd3288a2f257983339d46b22763e0fd1d51eb837c047c0d60267eced2cddf1ee37ca37326c6bdcec81a6fc5c05e23045fe1c54a0d0378e9260948b9c7ae30c127039a2ce0462b5258878cb1a44b407d21885f04863df754223d62d845d6be343bfa651dc84e52cc6987361c5fc5c9f616d80159740e77dce9154590d9c1d7c6a6b39cdc6b29b48b7f7be45c6f582fddb43364af531f6ae1ef337979f01a0e170bd1c9df2562d11e0ed83ff83f7cd2b26e3cf17cafcb4111b90a66fa2529d1a3bfd7449ca3a428f2ac4e71866cae5302c9572047e6acbadabb2ca6a7e58bb2db5736c5ab42583cb7bc21417d6357314d3a0479a7943e08ab79fcb0f9bdba324c56629571ade97ccbd3132843b021fdf054e7760244f9eb128a0d0e761a3fc065220d6c8632e289ad65768e8fcf7909aa9e52adfe555aa29e4fd017939776fdc46e79935f7dddb3eb07ddfca83dd6f4da7ae879d251faffad5fe874d8920a4ad88049a273eb35abf31eabfb2377b63fee7f1b7244d73532de2eb8aebba67428100bf0226a0784d2543e82f28809b15b750f6e2fcc31a3ec9f20b31dc3512f261965ff9b885f35b79cdbd57b5c6032c7fcc042eabf1dc19d6efa7a5a761e95b53322ea66755ed2dc2b6b260e0717c515f4364c6bb3d808c5dc0070ed4a5b62662bc7232ba782e6b08e80f7232e9ce2c5d9b5fd0b411d03e644d7393eb6b3ffa931c74c539567ebc534a1cb43297c16484bd3b751cd492d8f67e335c751a4d80f03a7c856d57a5c8acc4214f68e11da2d99140dc7dee8f01183b8e92fa19a85f80fed19ddde46a381a3e656b5c30a98d66ffb82e5ec78f62d46cce5d00d218404b51bd33126396b4a6a0312e97ed2ece32f0e99248c75aa331f939e411ac65cb5a198670923ef1e357d2cdc3a07e740c454a1c31c256b76b38ca1850b40f56a7b440757be7db436e35bd8150ff4d43f0a8f79a3254dc6f62efc7b2c87263b57d61acd27d98a454fc484795fe3dc0632262dda8be86c14a3160d95175d11148f46a47e59d2effec36995950f4e1419b497be691fde16d108093e63b7f5b7fd8b5d6f7f5043056d2c42fdcfb5b7337b50dfcf99b16ec4889f68ed7b90d98162c67ada64cd92610cf4d12b6de5a7b0a7718ecfd10322fbb7d3c5b9513470f3e0eb3f83b30459995ab794bd1411a8221aa0f53dc3678332cb3fa0207915648604441be9eea70104d2ef2e1136cc20fe6169d397d56117f04f4d789147b62cbe297b807b7c28113a01f5ddc66a67babc08268a7c8b7249cac087bfaa61892212ecfc1db6effa02af6486545b1396ddd17b718a4a5a3da108ab78f5ca4b10fd1aab40343abebf7deb76fb023dc6bbf2d547e5639fc605b6508c9bbb8f58e0163c00d274656ccabb64b5de67ece859a23dd9dca6db537ce228d05a61583f78f5fd7a4d4ed57ebe73b1adab05e71ce25481bdc1b48b8705bd08034f97b3534e14e563fb33f9690d1f38daeb6ccac9089237605f1d2ed532cf64b1e5bf3f38c20b8a7a76b44fb0391680aa09fcf6711ed3d57def6143d28661c558b7583a549742331a4a5046f8b5022fa7913708a9b7a1c2431d0158e3634cb0643ef3633b104195cfe0988d87136a8c601bcb6fe74574a47c427ddcac6bc89c60d7011860df921907c3ed720fe6a81d4003fa9a9e4ae4f265fa475d72026e1fdb3a01e84a47ac435e7edf92d7715388e3e47517435a4b12bcceee49f8c9b5813fb286416c0b088b307bdf7e9275e525b827ab747ad63fabcd2ae320852437870aeb0eb25a7c3f873a457d83a556e59a29680e20b9613b143388c68fcb945c87d94dfbc97a2da99db8662a40a486cd5cd4002daa636db5f27c72f8d620ac9d0a0745ede56f91df5547487634049814c4349a8a802d6e48bd04740a9218ef9194217d45948f4b59347386e1ec4a0d5486c79195306bd56bda68066c5238afb2acc46ea3657dbcafb1a98bedd7e958f50b097fee39935587e11394ae74f49f78ba4c7487c6af583b6375d20a65670d8ed776dfe61a5841254793c941a8d1216c534629533688b094b044f3b833478d7a529c1c2d411f3adca464feb63c52c7f5fe3e17a633be58442eb35b87b00f6b5032e5cf144c5ca5165e03bf7ccdfe05ce1180a9e15ca4b1b2452d83e96a232998cee0634b9a85125afafc7615cc476d2d43da7aa51fd05f677a30176dd0274accad286333ca4d0522f1cbdd11b5a360bbfb97e451dbc5a3ec6457607570804154440a695d4a08eff6d8de3ee128a672f2af4581883ef941b96a0009b0d9d29fd82a12c038a85d455f26b0361483d53659d56fcca8a7ef9b4711c66d705a72d8c0d5ee1246539ea7c451fe3d1c55940d6a14734043a51d232de217265490f56e96cdd8da16da5189bee0f4ce792c777aabd2fc66e9c5166bc6617eaede1beed3d2788f821aab1a6db76a5054bb67040087a767bafb764ff7b8f669716d39b39afc7c6e94d2546db636448d8a4393be2185f841b709473e397e4764189298d8468d3fe2acde54a005c405f8b9b240fa704f4c16e5839675b37eab0afeeeb7e1490d39a8148f2a75ded9354e7d77ed6d5f1c1963b10b026af832b7aabec1f55334e4f01b76655433a3fe38eb4014f77b5094f694c3f019a27a42e3dfb2bcffa27cad09b94d01508df79bb75bac0a0da8f7425a3678e32a90bc27b6268540254382dddd0df2e3adc93c4a071c0bd78e7ab5acbad55a54d3da2049b4fba0fc14db09fff086227cda9a0481cea909fdf8650e2caedde2b593d3593156eb90313ccd547bdabe364d4564c2cb648f00fdd9fc834a9cdc9c95f910c9771262dd900baf14e9f212b8d5acbe099f7f3a9b57b1a5979f0b4e02666216f3738dedd3890fd4adb2dd2024964f0a3b665548338c0df4cd9280ae9eb76d5a69bf10092c9cc7e2817f0272f40fcaddfac8ad14541b5d6e97bd836adbf9795f8ec24f31434bb25d52a6f867c1b29eadaa2eed3b97760e8778888a2f44bd249af52591f2b2065db983b3258af82f48fdec117c3a583cbfb4027c0b586362ed911f419ec9f35d386b872c206911c63843130 +MD = c55c7d5fedf6c5f93126dd90b6f19720f56f791590d42903c78a778063b93ed5174502c6b76b0d2b75658ce813e867c3 + +Len = 64384 +Msg = 396d1ae30d314d107565a956d7ec55d02ae9b7dfa3d437d690ce46f784319f9fb46ccdbda10eee88f720b672b5b8b7578fcbdffb914342b30451196295050ba7b41cac553b1944245097d1a68cdd4f7c5db336c9a87445e7b3657e59434572010125be93227ad64a477101daa282a5a55b48c5313290c8da65b07cc4d41a5a1463300c60a05a2c63a6564ff641d0423c5233931c75be53f4e2da1b8b91ab4d48a2e59ca2fbe1cfd833f0c1e2afefada70a1ba870ba276f9df18c6397c221d20585eb78437c36460fb7e4628634066e504ba90d1749f2a33d5c6e5dceafa372b3d5eba8296b821972f9dd37ca1a3d0e9ddd85c9f76a48783ce92710199f5ab3ba5a8c323e10ecd168c3814a97a7bd14f88756e4fa6551750261608561dc6d2083dc772068b29df558db78a2d325ae08c812c46707813422f78bc0c28cac053e7423537a919bbc0dac0a6b4768da38737447795905081a078431f0d183584a97f6f6c946a01172a1cb1802423c0f81db66eb1ac2de402aad0f1997ba2f2763b2721f818e7d5de73a1dcde49a390bb4cb05c952ab79728d9b020c5e83776379174e64225910c7425f0af1ba574618f7c8b9a8c61bbee56a59c3d2ed364252b34ff48e55b04196ac99fa4b2b824a7c725cea4f211a95e3ea70bc33ebda7a3e3ae1ca65c19af8144c6f55a4e0212f804f0e008709b0e6b2356753f70078066d35553ab00f1f1d874b6983c4803fdc6cb366631826e6999b72c6f2e5d517ce28cd34aa39e6479838d00fec73b4e13988c8ed7cca22c396e6ca1600c712bfbab62a0484c6ef1b516f04eaf97924112e1bb62ab165a24fc5db64dde5635f78b26173502f20d1a230740e81109d77d6a36fa5a66bb051930fc269a60881624b9e6fd19d130f35e41e8e175c9ba8563980cabce71374d4965ae200f6d3ebc63f66296b75985ac3ea0106470400636840ad7523770f79d66190845257ad68315df2d76a5f26cb22bbc324c500a99356f512b803dec987fdfa97f08650febf4cac2ac1f5e42528fb5f4a30bad8fc03c76098da84a2a766f16b596ec56a2fb9be34f72e358afd3af5df80724d15637a64882525cd4d13dd5bbcbc46372ba61e2ffd3f6851dc16c9b9424b32a73e45bfd575a2df076774b6e3f3aabf031dccb64910ecb5725fd99dee9095b7efdb099bc12ff851597632b7301a0a2252c80948b174e45ec09dac7d3dd2454a4e7519d6d0bf0dc3ec04b5a9eb38c3b74bb3c69e123111aa621df8324e0f4333ec93dc38ab2ccb7de7986453bb56bfc61766697e125059e381672685c84f77baf0bdba89fa7e19c673bba97f497be597dd695cb159d8a64f44049c3b549ac927837b1b9064bddee8b8f3ebf33daf1d72c64505ff90d1df38d47bc41f99f921c1cc56671692f20429ddcb93783efa4f9efa81ce2f5f43ece4585405f8407367d1f4d506e32c2572d20bc807d6f4656364a0a51e0b6d37b59cf918c68df011839f228161bfd95c102a6974b0d508f7420ce0395c5963b421a7df4e71a752da5d737fe0de7241a1c67b2056f63d22b9d2dee3c6f2e2e8c31a4f317e6d0e0dd6dd95337ce6c30dfb7c0b57f642d5e9b1fc21d1d4476ea56b88da1830228aca0dec4c65dde27be5731a2437ddfa6606e9a91fd2e9c3c542b45191bbedf8e3318870e23d893862700f880ce89288b82069bf1e0c8fceae66a65ebc433c57e0e94e529de40a524057d9ae0b919d5293e0372867aa4dd0f2b94a97a3d7a6a74b9b677bc682e896dd41d9756b5a87c2bfee5dca42d2ab3159e5a7e48da0b250eaeedcd2a43ea96e01d716c3726cd73e03f1e38ff6ad3259ab8fc52ec4c5e8ba868bb43e8141d74173c198826aef15302992cf5dcd6269b1b061ad5b8e6fd04de619f7a9a3b3f976fca66798990acafff7782b1e0d19d99f3003665534c6f372d441adfa53bb9877642f8cef48e67d13364bffb9fffc088cf21df802fdf1d88f16abdf19d9813bab73030e6dbeabb6d4adb55116eb3080e1bf566c4c3319070e75fe95ed7d2e6a7af0cbf5fc4580fdaa265c2b1d19e0c9045f56c91a1c650955b9e3d56087eaae4ca52e4983238ddbfd67e894b6d032695f9ac6175302fe65ceaa01a9593edc8d8958d513e9a1fbd7353a0295c95a4eea58384e5fe12b0ba3df0f0118c1ec2d9199d2675b1807f27aba6552343efd5dd4590095a8abe0b54cf2b28a2a7ed70442e5db8d27f79d994af4b07f7bfd0287adc9bb44fa996824e76e5945e879478a27d33bef816eaa19d14ce53272eeb1f3ff1031025d930d7ffcbbcdd9599a86e7c8ccb9347065789a9728ca1220fa51ca51962a78da8115ef1341d6ef86cadb42ad391e04fdc44d4323f129c88d072c332cc26e4e784bc99bb5673b2f75ef8dc35f8032092e73723cfd10c8fbc1fe885717fec42b40da71ac6997c64030f2e594650bbde80d5b2faeadeb6f54c5c8ae5e9ab2f6b738145549b8393dcbbfbc2bda4740874ca262cbc1bbece87aa04be66f3d44ca9b6ae2bc9b29b369772834a7c08e8957dbf471909cb07afa175a7177b2891d097fde2df0c9446e12ed7541a06bc14df73d0b71c46814fc6cd0fc21ab5005a57b0a9bdb37fc91d200d5aecd600668f32d1bef48b04c6ddc074f8c43c8713a44e7e5a9d5da5c9948fad6d9bf2db70be5c21da9e09c714581933c15be173cae6316b810042010e336ca9800ff50a6338a7eea3f1fd0fe2353d83e9c7ce0daeb68d12ad84f5341f70536c42a7411fd674a282bbcef931c90ba9dfe2b646b7379bddee30a9db9165e1e07026008b7e1308d8a8725372ff3131eac24c95eff2edec8058caed89cb89fe704f9a9a28c7c15bb6aa784dfeaaa34e7cb577f52e533a4f310cdcae7424e42caf7520d2ad6f69e3c9132e0ce0d6a7b7dc33f542866ab52a5c54d68b2f401d02ea6b49489de775379c7d142eedf5a71495b8550c8c8be7145eeb58f21f9f9d07bdbc847a5ec26bdd8d32cb126aaa39db15dd17b1b5393883d51ac481c9b5dca185c362d67472b63c27fea355eb46c871e8fcade0751531ff4b7db9a8b2055466ff1a54eb739afcda091b4d67e47deb8f9bb1980750825bfd2e7e98d56d10bcde764bdb37e08da84d8d2319d6fa921b7a8a766694ec132ee3fab7f2965f6a4e6e87c2763a2fdd30fd40a0a9117225c0c951c58a278c4a137a3c94577a0d74b1ada008b660d60c3f6fa01e6bb5ffcb74026e19732dd599b1f660ae27ef0bb26f026b990c5a579d1c2b47e6e212f7d5bdac5c0cc2164c84830f036ff463bec5df0326fdf87548f26fa694b4acd70ef7062d97f9f78f458cff1aa1543d86bb019a267e920b401ece926802e21c708981d61cae7b73e775359eafa6e573b6650828f2df1fa5594d643cf63f09b15e1c18b5effc0bd7bd4ff0da4490be2771613bf3eed4d1571f4965c7c795961c1e2b1e2e1e2d25837f3a514a600b28d956143f9370dc61a100b745bb52a301bd3f2b24972dae4317bbc8c9578852c009c31265703f724b13ac0b76802de3f7151fb0ae89a4fc0ef4e17feb9a34241e2946d060229112f81f8fba9adecfd4c0945e402e8e0a92c3bb9ec41a8ae9db8dc86fd292131c5af3351a4904ffaef208eb695e271cd51f1bdc3239e8921005b9579c9d8dda47a6b6e4ea4b579b51d83a6adf5f2aae8add71c74a45d8485d2f0b675b85a5e09972cdbf6e16051a3ed3cf931ee7abcb926a501d457c6c3617b40e682b4f9cbe886ba225144d9ff4ec815304a67c1cfc8252513ec24216b3d6313cea9a5fb4ccaaeddea67b567ac3e17d4f3004910099e101dfbc3f4b5a7a1f23115f171a90b35775ddb411d5380f94042e95c7aaf95c250566061adcb9d1690616463014b2db449019ee662e6a209ad27bb65e3e699bc4e98ebcf39ab7523a56c63053d29ddcc8c92db5e6e653bf6c44b11246cfd3e1571aa44147e9d5851991bb9e10d8a4107a8d939b2271b7246ef75919ffe3bab542056123866e96e27d4340fff5ab881ec069b61e9774f7083956fe6e07fe90901c562fd44d8d6de2dbe7f0c650af9c6030ca3fb0b45485c341dffb6efd94f7fa4c797af3fbbadd1ebbfc6591d079638d523b8ae21784f5fe2f1eeaad2f2b536c68ebdcd31f9b76eea40cf9d2f37d7fee9b3a12231faaca11478036993b46355ee829c02237939deb1a76381a1840341c725270046b2a749521a089c3a05a005a50bfbf31b237e48c85e4aad7dd56428f8df12f065888880253fc3eacdcfb66e7291a44b24dfcdd5b8cb4cc8cb1140dc034b2a999864966d134ffefc56f9ebb7dd7c5db043956dac0858317a9122e08470d036a4e62e1a39a6b27f79dc6b88096e34efcb822da7f7406cc06dd9ef8c49c8d500b858ce5c0b66d10f0a680dd48bae212243e88fc3dbe96ec246aa608b5392c44e7ef42da40cda12755701c7196624abbdc07da409828ac800b00d5d27c95604e99ec4313a638ade7b07af819dc1593b8aec4a52c014abe13f5108cea6d39dfd99bfd0c3653afe9ee7c27a23aac5d3374f6c568232b8d4214ad1a69b519bed1725891ecc6fb6bfb882326b9586991c09d5ebaa1da5978ef0e8d9ecad7046d1ba57a6b9329e01549614fd89bf7967bc17e40f4c0962d960b6e011e4ea4bffce4ef5bba6df3b43459e65cbdd89cd5439cb44804630b1a5d3dbfb20953b29ec6e3bc873eeb98da31b3a3c456ddcc88a1d8cbce7a078d9236ec701af0788543538e998739aaade4a5dd16212439eb431efc115ec60cb247db9e3ba6543ba1203b4c12d66b299746093caa0db67b9d77038d417369010d8d83c95edeb50b7ac7e6b294ef23c6d990c458fbc48df137a707f2c8a6e372f3e5f804664e836696acde48ac5bf42109276fc877e00b596e4594c31363b5e0f9e370c5fe505feb79319a74d5876cb69aac73f1ab0acf1295f52284be3460c9a408b684639eaaf8871893dd8d0bfe060282797b018f399b3318399e2583749b76b811d65283e51c64a462d95f44188dd53bd8bb1807eb71ea315295e5eb51d4e6941b22379a9ed586777ffea8ea5cbc875b2a385aef55251fd306027bd68914880f4afe7f6d5892610453c416492b109d42d67956afe733487fbc5a53df9ac8bf9c29d1b656730188cd86b0140b14389b85760477e4421af899fe041a51077001cd202268f0ae71625571492e8aa882e6b581504b06d64aa4a443961bf54f88f304d69703c64b80821eac05c242488e134570e35ca22440d1310596f516e39217f5a5761331daad6c9bbf5c7bec84c8b5a7cd440920acac02c2ec7d12405429c4f2256613edec56865ef3e3b7c3ddb1226f1ee8fd1cefdabddc40bf100c219eae9cdedd8234f12a63db12020282b3e60e0dbe4884e15e6b76efbae35ad4dc8f19582a52eab179879982725de883c7b5bd0653f95d3888bca26fa3707f24d579b9a6904cb9ede60c7c079d4dd65169ced3db4861d26cff6cd4eea2ece986bccce42ab9417c44e707afbd0b5858661a8fd71f3418810912fa92ef21bf1684e3174d370dd7be50dd2789254513fb5c6a872b248f93d59763c440e3b87da279e8d7496df665dc8c38eabcd2c2f71b8eca33649db34a6c928278836ecfaf0a005e9b6d321b7263619aaf9f381d885587da1307ed57d2a284cf85ced2efa9b9a294c22d25d583ff7b6304c4e7ad2e15d1eab48985e59313d8db5a77d291143dcb2bea0dabcd20ed344278b2440a7ef8f79c766e19d5223d19068532c04c6502f4948183466abfd9268989ebefade15b63600729fbbef69ac00184743e8a12a5b96f07229826e73fbcc8a6c64d100bd99fd5b541be0b8699683ce6b09fc2b3a2840c096ff39a0d8d71805df5ded944e0174e2f59d32368c57c191a7c869ebe65ef0c06cfeb2cb93eef412def3752230b6469c3b6cdcf03ab66469e3c6566a97c44df7dd7016760e0806b7526c9133ca8019910fd2046fdc7d115e074dec2eb623006dcf9b8c2ab0edf9fe21116b4e862796ca5a15d339d8727279fba352c1a943b02a2bc93d6ee16473ef342a28fbcb72644e027e70d8985e2fc1a710b1abdaec0637da4050ca09371c9173fff3c2022a2b25f15503d48208f03ff4de3172afe6a99bc348eec6902c9eecc6d7f22c911795580de2b6b3003a5cf9c853f9a092f8435ecd2b3febdf0c9e0816fc4dc0e10148ee406cafff79ba1bf90db932bceaec7989e22f6ac05c9ec7ee49b42d065ab0ecef703d163f5551d647a956034f1f88f522e99e98ce70acbea54948ba8764ec2a64879b14fcfbc735e9867395e099955f34c9bef09b83fc2e35fc001bca687caa546ccfd1bdd5e4dfe98a5710f7bfda5ec46cd89bb1fe58bda74c237958cc2913c70721740a4a707d4e9f4c9b1dfb219bdcb933c0984786130220fbfbb7fabb0dc540d8256bc232b621ac985ed8b430be83981988d6c84ed94e5fceca7158fa4257ff3e0e69a5f33369988482b353d06ec2f1d01bf5e87ab793f3e50d0e50ad57842c99548b5c7b9b2e4d582f333ec953a0aca1a07d0ed054dac388ed14499ef755af32225a4d929779b25c8ce2dee31625b2d43ff4a41a592ab7fe920dab93c8d070519e5de100cf51afd8c2479be65f59e9b122e4111e6d8cb7912380dd5572ff583ef01c808ceabe2c13f8eade99d5453a806ed4bda53907ab87c8f649ac9eea4d40411f930091c8115657540dc521f08d884e4d107665a37b29abf6565ff49838a0b9ef80226b7846e9070c9232eb62cb12e8d6725b986810bff1086c381b1102a77f13b1bb21d5b4142f9ad3a8daa4da6664f74b1a7a5f5091c5b4f3fdbc5d919abc138c925ae7411ff8873aef96bda4cceb38037cb48f24e64d8353777e85cfc497787b71bfb7d651895a2dcec8b5108ca5220249ee017408b1fcf56e0a90a36c39c8e51ef74c5cf30b9b160f189505edb93cb049cfbb293d1aa83faa0786f4d9c98e3262abafb94da5d35c782d646d384f0e764300c729ceb00d9af21e6fac54704fc90583e6d7a7808967d2b02a2fb69121ba01292d5e039ab56f0ff754b225569514cf26fb9c49c3459fe448ef33aca5fce549f1f3af23012824ca393cee94a2e77a883df5f27a978f6c789ebc6165b32860e4002303780cec23e98c3048e97dce63f76fddc08424f036545998a128e42b929affc44448e48bd2349a37a86b0ed137e565baeead91ef6541228cdb3c5f8fe23296df59dcb08d9b750859f6637e785f1ac794633e07156107a19ff7ea4ddbba766c7b2a7c9978e572819e1a19f44b415e3c74097eade8926e7dd9dd7ad698812c2aa09f6fc7d617f4ab0ffcd599d346796c61c7b7acf2613e5f427534214d9e1d7756a0ff612e9bc32eb385df9497d6320063852f2bbb343eeee3a85f57827b11fca615728f09d8a7b3939b7e0e1f5a52a0822b3053c97437d3c35c459fc07fd06197e6117bee3668e2b527fc2ff438a2f3c7a2004ba68af2b5ea7a2c228d12214d32fb244a651dcd6223129f1e9ddae7a239d0e73cdadc343d61eb5d08749ccd687e3cf327f6f5a0dce542b004a2a6ec54e09e2f4eebd4c8132f952078fa859d5b8392c5382a26a7f701a176088c0678b2c5f41ea863d975de5c62bd9aa93656ce49e3e4a58818ab5c81163b53e2615264efbbfe73ca520246f1397b970815c368d9199697993473b26c88450c2c1f431166d915d6a6a938f5f501a3979f8babd23a1a2436e3e0c9a2cbe1de5cf3a713613338acfa8145df9070a47dc1f701d5b474d0d6a9f08573d4a5084c6bbd638afe5dbe0a07e28ebfc26b09513e97dd0ab49021f319488c3aef02e5d76015ba6f8dec55792452ec9f30ec1867360788127d95f7c5ad715be69ceb60c96480148cb9e9e43f7958c74885feb906d0d06bb5b58b39928ef55c3f826661689e88d9a7275b53a52f7c878367a6d4783479edbb057acfa3e35cf60c4a7ed0fe37b47289824a8af36e4694167fee51038b8a75eb146ba040d52c90179b3895d1568c45fa70bf70715d3f57c974dd18f0fd8c6d0e8b6596b08cef94261e9e98292499bbc299c0ef6725ee3666ee7b1287b1063cec1171983d2f2c69027ab7c250c9623da8a758ee1ceddb9ab397d1250fd0804a4d4f968f2de66c7773588bf98d6c7031753f8c56d9de8fec7a14e63ad28182fff9ecdc61c9db36264160232627354900f10b660de62091928110c33a16ed95c3b7914bf7593312de33398632674d7713e4b3edfc8bda69f691316e0b243b40fe51e6ec3925198807128cbc0395dc82d116df290b1035a07e711ff19744940c188d92c60f74b32109a600ce83f909f0a14f362323bc58bd94eb8354c4bd208079343ee1629029644cb73ec398dafd4bed5660e22ad86b489fc5059d7cd90624890e914618bfa4da390deda32c82e01a1cf4066e0aac98ca07c84cd6a6de6f80b1e234fc1b4a4c09366fb6772637d9e696f1d0d0a98005ca33bc01062a15821d577ace0b5179487baca741466e421036c215650ff19cdad08d69cb36f0c66882e59c087ca493c1b8047b3518ecebae920a276e33c84740647c96536ddf394837c1118a56fbe2de46a4b43bf58879db82d5f1924518cb5f0f680d41b3e1b54bc555a0fba13dacc8aff61afae62a36be8f8c397a4cc86e5e58b9943c10dd8499b307130466543aa67b60741bf2ba68804095c8cd50c07965c8d8f4ec8dbcec598941314cac27d4a1304c8c45222058481e5966345ae8349ee52bf5fa316436b4d06ac17c7b9ec1e1582128217d444e3fb040da577028e62f3a1b5e0e05bea9d10fe98c3bdba14b8d7a4711560b0e918d7eb3eedd9d68d8404c11f9cf0fb28fd9ce285a32d518b8cd1f260f8dd4676b591018686fe69053faa5738ce659292ef3958ef20870eb51cbce26e96ee13522cbefd811b455889d84ccaae0faeb09d048ed831e66b5035eac0faf69a03962ff0da25cb155f138fe07491fbdb4cb3cbbff5d6fa4f4aa46279b6a2955cce4d44a44b10b10f9c288c0aba539eabc03a837416ebb4d59599df3be68fc7699eb754b9ba54cf549d1612a97675f31b99b378e36a6cde13ecaf00c3d909094b0552b4a3804892aec25a983f417fb585499d00605900e284a0428b8416b4d77b82ae08e435929758bc64a14e93d742834075ae9d7b1e6ea260f2b40f27f9ce65a727b60e529949fcebd2a259f62326901ecbf7dd393beee79f3e3ec7757e3aa3e36e40845fe31705c1133fd3e0d9de36551e60b22bdfcfdecb83703f9788b8b0b7e03ce8d5f6aafdeca4be6edc71d5d063db7daebb70adf27670ecf9f6cfd516a50c0f9e2d5a626fbf15c26d4171aa18cb81a34570a4e5cd108529692baa0c402b603d36ee74e9b5c8d4d061c85fc75a0cbf75f8e3d323b92a1eaa1f9eadbac7cb7b4a2591dc8d7a9a606ceed992ba2ea7c36a4b7d81c46143cbe38fd8418d07f5bbbafcbff7da289456fc66edc0ff011d5bf4bfa637643fce0b6a2c611bef9b4ab0042eb16d5c3a4707036c8d51026bede7a9c8067a7fbf596ba297b1935efc2ae6ba3e1e93904a332f165220d970e989e50df716c1736a565b2134422e47a536de519d6000f2b2e90da9ca50a0a6e481d275bf5f82ebcb45586a94ab635620cee54edf2e4c001ec9413237956d30f7563e95932955454cb6e1e33b55c8f6e973ba2685c1cb54e86458442c57958b9c8797c2153caf1c892b962f9ad9d5a689c5cb5cf3d3055daa3ab1641b1f90333e866cafb7e1f6ddeb03d3b4259ffff16c257776dbca9076ceccfaf6767603b477f32b92fdc1d305fce028f58e10ce440b236ce89020e35ce09b838fd0c3567bb32e63304944ba212931148816e4c72b01401a46a36e746c6a16e9a4bcb01f158ab881fc3ce322cc1a8714c062846112d8fbee05981bda21d5cfabb99ca4b40e6922364b5b4583432b42a852f36822a7ecb776a9e0b16b19be463852f319bbc2d8ebcec1f6b47242e6045d943c088236c71332a81fb7dda07deb1df542979cdf4485d9e4c1e87627d54c9328cf0e166bf29fb084a7977882af5edb052da6edb05680d6283f39e58e737be7750ec14593f9ad6ec40af8e20cdcf1ee26f6b014e2695d5200b12166c34b12d90d8dca966b36dccbeacc3490bb6144c5cf404bb8e2077bbc02da477082b6c1d646ce928f4e549e566d6dd30b1ae6d7f0629cf2303bbb7ca2b31d14793960d96dd533b1a6a9bd72acc0626cc7a7c82c0c855f1c116befd07475fc010753b3fa0e2d7f907329ebfa2d884c5a4cfeafa168ac1951d2df3f07cfdfe9a5915e2a8445c3e4b75b3b6a8557397e34116be7d8a34b6e1c0b2203930365886abdd55f08931d15aee55aa3a4c8389a829b9c1b523ae7afd310b0e802bd8b3ad8d345bc0784ad84ef980441e8ef1a03be61ebb47e9e05512f8a2856c76cc58378782bbc0178f9b4f1f9c4afc23a625c500af74dee4b391489edd4da518fb8f4b21303e9770e86183e611857b14895f6dfdd2b3201d0d75c6aa262dd4194ca011e4a4aced8b3e7415d948bd446881985c67f142b59bd848b5a4e4eea182a6d2b25747cd6c6e771a2b7da7baff277816b9c573e74666fa533c147e58b35af36e56038168ba237d9cee5c9743535a5523ada0c06b7b875dde84835e33b3a91abc246ebb477fb2364285fd8122e8080005607f4095fb05e730b579eb474877030445225b3064218c5318e8cb1d67396004f9ea5b2f6fe88293f67c8d5c1bcd968ee1a7cbec107a6619d1a6dffd78f55f6aa16979ff7e39154d6f16ac39d3b2bba11f8371432dc5abdad6be2389c245e47d7f8502cfd1ff87a749ceb0a7192f5a872740b7fc600845df4fb8018bee30d887bcc55e650f42c2e9ac2c026e954b5b86226504e1534d1b70651de0c9a3bf21ce7fb2f589e10aad5bbfb90856ee0ea6e7387bbfb8ae9b15d43f73270d8af9a89bf1d22f05ef603045abfc2b27cd8023f29009524a18fb1b550745401d4be6553539b075a0e04b33ee977ed3a8d9aabbee5397245f3a731539e21892c18d8e11e681d12d215dd49e9facc569a2bb935425a8ae9dbfbc0eebc9fa7685c3f8fac2f4eebfc1510d0259a0125b53dd1a43d7ddb8d5253145d1864d77e681ea353151a8aa0197f899dd4d39f0c8fb219fc32d5faa94247e7dc6cc0d81f1eefdec3ba74add1f19dea86d60b26e92c736f21a3cf3a773026e0ef4a6503e1d34c5c421aa22aea1adcae3bb7b52b64321e3ba50eee0d7fb27c99d63fc60d9f5bb0a66ea44774610bd85f1ce8762ed6270f19f6e2a7061b3fc57d51cb78378feec937a9e5c93cdf4b0d87cae6a2a3e781c294b7bd7e96e23e7e05b26bd0244c22d2aa746dabc6ad3ee8829640ef2cf0c8d +MD = 13189ce20ec85fa2c86f0c51fa9de0d0678e6ab13aba4ef0856b37b2daff99b5530b258901b6297c68d542513082c115 + +Len = 65176 +Msg = 44bc2dba269c39d3638eace048f7670fde0dd7e71d3ccad05dc981d60db506aaa7e4c0e9e37e44a12c966e125009b1b17ba9ab73669bfc47ccfe59e41ecddcc677079e73d20d88037b4b66dfc31a3dc9f8e5df1d948bbc56b505fbd3cd49cadc9b6ef2e05a10ae0038f6bdd209f2b65e3d099c6d0fd4b2040026902b84f077f2fb61e2b6e2515da14bdf9a708a59c279325d09ec403e855995a94072aa898c137f27967fd4963eed9c4e2643af170921bf294f218d91de5d5cd63232a6ddb0440f0a37c297a8f9ec138b89d2def3345eccb495945f9464193ef58ff2e2b48c8f9350ed08934f35a699ddeaa580b7eb38414704ce1f10c094214d7e3bc5d5c7fbf342dfd830529a24148e7145fe29d5b8062ac45633ce99d6ef272894b70a0a90172836bad67bd16d6ee44839be129be503a5fcb4059398e88ecbb5852019fd57e74a1936ed9082898d2894092a39e5c82100d471fb2a65d1e8814c9669cb47574cefb1d5dd5a55815ba1803ea9685a67468275147f5aa799e3911550f8e891992c61261e0ea1f05cbe99315fa265a2cc5b740725f8ea06496942393a3638822371e69f9ae92dfe22a056d2f47ff966ff491eb12dcea32ce861dee0dd8b82c3ff01c744cfd4c525dbe8218985a7ec4e06f6c89cb3684dbe7eb2ab31bf6090fb35c64c3e4738330d907e427e9b820601eb4cbaf03f30b0671446f2556a1b28d3cba6bcb58a7e3d5f494a01dbbd780f28b6323bd4598d93cdb004fa74662613f3cb8b61d01e0cacc30c33a6c574f1ce6a6d8f95708ae7bf985dd40db439e719023c5c81b88d4c47e0e324786647550c701a4d0eed59a7fd71209e71406dc801a9270165955fa4d85fd502c0e6be0c91e1c453ef734f331300034a6f3e8a2f958f9361558e1a7e25e7eab6c76d617e256674898029f2f4c9ec0dc14fd716869b5d886698cb4841f8212b28d222b91490a731d70838cd52e9dd46e959329b34dcba0ff77875705517b59f402c2d4d34994b0325d1c865b6397db7abd578a0a1204f2efc3bb41b224a4a4fe71cb7a5470afbf25b21004486837167f00ad0ae352fc3ef5e2aafd0105b884103e9e84ab6a95e07614108f12c8d645e9e41634c58d0bf5a038d8f178710197f7ddce7c3e83f1d491f7909f40e20fca59ec2580272cdeb76d4ac7b78ef33a2113e3ddd984493dfc17e102bd69603e143d9d5d858ebecee4bb9ce9c7cb08acefd2d54f152346f4d756450951e2a00bc4036c20bd72bf671e19b3d1aaa32de424d31684c781e990e6fba7f705434dd35a59cd018069ab21b41603f1c8bddf6a90934c215926cdacbb769e6e3001b63f379f548286da1ea9572f21dcaa51a9ca9371dab752985fa2c5358cd17ab475a9fc428726295a664867c371f4d834f96eae1d46994c4d1c1d84d6e7b33dc208ae08f1d96ef0513e99768198ccdaae6ad150e404499ebb8f778ad953a601c0eba5fe1bcfcf6454e41703d7fae71a445a9d2c74b86ac26a263b379b450c6f279b4c4c2edeca0dec134b80350cb62f7d652c813dc75f7fef7ce32bbb2068ce6c93eb63a98ad1557d28a17c2762cc82eff70a0fadc5b9ffa1f009d7a79a4db806621dd52a5887c38eb0a3783d819cace2aca0284317ecfa383c19bbff072da49b825e211fcc5fd0a737ebd4d5ed99061be2994bac427ad7f89d9d491ffb8b2c828116d8085acc254d2ac5429f0b6436f235501a37d9d61189a0ff1f88ebd8a851caf25a52984f09e6f5ca21e76f60b7ec016ef47442a14f61f2c9afc85ca8b09fdc5b38ace97b271b4584f34d8e20f18ff3407af0214ee9f7ef976a6cc27dcdb341cbe375d2b2e5308670473fec278c44776f0e29da4169d213b2efd4c1ca784277cefb2bf898ccfd35069e4d1de6d0b01a552e8ff22b5786ebd6909ebf1118a40acee05daf9f56a7edc258e377d17739389d7ca0ed6f2b6cf46d0d392ed4477e676623898c291ae6fd3e17a19e99e8666ea258fb407f6e1ab9d0b622a5968d280a0f451e02e87220ffd44ae606829cce290e43fd8ffe880698bc1bf997da42478f34b5a9983004ec621f734f243e0cc6f43bde36204f11c73d89af0c9a121f43537105aad0a23bbfd09a114b9c2ec0e76ca5782395f393c304c40ffa00d07ca1f34ea5a030b19f01a7beb549c2c751a5dee5c244758e76808ae58f308087d2e9eb1826183ce097587407cfe82cba2798e7771d17336242963c88dd5e8dcaba91a787f77159a1cd3aa20fe1955e59cb26f2d4092a5431705a96084ac27cfbac2fb4f8aa4a1b97991ede216aefcc38b4d6ad7716ec5c5e986423fe880af2ad202a9ff4bf10f714a37b7506ec45fad96d2e63fac6ebc05c134972d5f5a67351af08d506965470bb44e6f30ae6366eae5ca4b2b9899704bc8960ef291413737bb140d098d0932cee15d7f4b7e93f9c4a1bd0064ddf7cadf25341055283d077addf692f45ee3b604f9ec4e69845d0081f2316fb22490b2080196061fc956bf44a61f85d785febcf3238344526bc8636affb0ffdc156d110f844556181e9548de41164c7ba95f2de588abc9cdd9dd0ac7f1c118ac5795cd3cd5c86a08cf018890d46351a87310ef2050eb45a377a3dde0efed22e89310d0d71da7a8b784a268a1888ffa258a18eceda2cc209cec22c5fc22ba855970e70028836b7aede481d05b8421b1bc987f0a93a6d5c280e062a865b2b2aac797214777309b477197a5a904f1a1dd33424d335c868e9417fd6c7061c65df7faafc68c0b4cbf760c4617d9e5f697e553328b4e8e677ffc29e84703398642d5b961dfb72dfe5f718699dd4a46bc8c33e4104143727431637d4cfb4b351be9adcd5572af256e049fa73701e26f6a082eae8375fa50d22b32dccf912e9caddae5ff328a5e3bc5356836c98a8ba729913e7834315a70acf5cf0e191096b8639ee715a02cabb72b7b34fdf6812c3721b1cb0ccb7c4d192818a4dbd3806acf66bc19d749627ee0c75d6bc267edad6779ef3d30ef5fbb946e1b170ba5e9922adebce50fd233bfffc263754ec3d6f57f5ad3fdad48e08a2aa78692653654f511f227b283e6a8565c4315bb69b345eec7ebe6714b7f0aa320fbe27cb22fc87dcbca83e7fc2bc72c3f73fca3dadf407f8755af02d13ce2eec191b53dba374e11a28f5bee42499a27f07a9f966beed29006bfb7180926725354928a3d45f7ed99dc69342e1de92930b67f86fde289000a8d52841cb9e6c1bb2025e6e31b17adfec27f980f55b37a30dbaa3a3e0857d4d36435a074aa24d70c6e735399033e96269cfa0ef9b14e980da52442c3a50155d4d391938aa487bd3086a458c7c714b1fab2011f54fb6388b15d1526f2812e8bf5228ee3c56fb77a0db0df7ed32d4305624bbd5188f99953024aa56f3563877f1f98531a8cd25d168d344c4b26fe709a47b1562ffd749902eab6faa4f315b338387e09bf4996219a97591449280145798f2af33e1c330a9d50e73f4d935d5bbe291cd75b6383aa0d12695f0041006aa924ffbc084b00952a1b269af37f04271adbbae6754261a177e8aa54f7dac18732ec78da14f3a1e2b335bb331d1ed2be5335a05e954ef8ade000651cb6590e431dd1dc75ea7ddf983f85ee3353d88ec9711e166644ef10775142e1dec528ad4671ba75b4134f825fd7f307c21d1502ef7d806326088d70a6d19668c3adad6639368e89c016d352e182674d07043df4d97e42d0c76c90e1e369e440f3f55203c4753761c17b7017c348c9092b8fb82d2f7c4ca571f5602bd62014b295257e4a8e359c45decb8d98b03101845547ef759880862a4b2d651626fe0e06d2c59805407ea57c3f8d949e4e46f803aeb24893bc90d8a67e9b076a7c0bba84d15e0afa81583a500d49ecf1458e94d15e5a2c5144b72a6331c7afee7f500174bb773bf2facc43077087fd593e11be358cc70475d8fa64a78d3ac36bd8d4c91db79993b453e1a8ea8fd02f9ee1d85f76617f36c81f636ebbba7bada92e9ffcc8ee4b7a0a33a0514193abea87d5ea5ddd040c2c12c2f930e7df12d3702aba80bd871558ba420f2754a3a196ddc350a2b29df64c1b68c4927225889f88742c3f44ab7f958d2939106ae8399b685210143d56c300aabacd7da6b36477b8b3fd1fa58212994b9023f5cd8afb61f02b349dc555fdaf89601bd7c9b22ec5c98f360a273355cdbc1ed7bfc3b06f513df5c32494c22bc07e01b68a24496ff084b2dee713e7d197a77c5c5495821ed11659c690f0c6d69d5245a77cffa1ad60aec1fd9eb1c50c60d652ba9e8b298f4a45ff44cb228985adcdd6f597a2e1737d12679c1649f690910f47f984eccd4a25908e45bc7132c058b659a8c1543246af774ac13923a1e5901b0322ed0295d8c8c0afd24b27e91006d779c9e45ebcb05ea41277ee87ef91c7c22f3dc313aac09d9d09f1608bd8fb1ff6dc5fe708a638f26268c31dbc081e9ccb7350ed68348a0aee45ade3e4240b0bdc2a72b29a1967d379f4afae0b13147900766553495abf797d0a0bbc7bf8c833510c0b2d5c3cc369b15d428abc38f9c527e183ddfd44e651100115d4987ab9fd1c2930409638d61dd24b849717a157e8095bb373ce1b87fa70d1d21182d266d2072becd38f342855a3687ebe6373b54a6e8dfcfd02072adc65234a5c8329571bd8b744ce90593f7aed5937e8ead99c531e1e6663e22f585fb69f869ee1a7153e58784219e1cea5f578c9b7fbf2f9936be0b7f98db6bc98eb2dec8dbde57327a54f13ed9ccabce22c0c5e07e1c4fb22fa7d00be63c6d573e890b367a3d7b615b685334d40934b7c8971c02e80a808d168bea0bcce59a370bea89b1d36ff9768dbc17e6beb83a2fd736e9834c2e548291d6840fbb4b94e17d53d4db660a43fa77bcd9c4e86e3eaed52cd8e228dc5e2b181468784ff2cfdf09517703a0710d55afd6f36fefafb4ad28d5449ffcb8efef1fc1f1e5e95fbd88467fdadb215898209cb70f4842d13eb368ecc72d36389c672f7baac91606e085ab1b8ac2571586e3d4c977de70973f5a0bcfcb0a73dfe60bbd8e0da2646ccb5fadc11149b03c5c07de8ae7a2f75638f997faeac824135f45509595024315f06ed51cd8e1cb317a152077b9265582ae1a83fa80e6c5775abc6f0edb593086d24ba77b7c1b16998384311c86e909c11145564b37d6d6708ac98f764b27cb33f37e9b59656610d8eaed86e5bb5b8286050285697a18e593420528585eee6191d66037531f43587422a9987fc10e5e45fbcaa7e1c23d615422f7d011912d9244ed98f1e514433bffcd50fc2752720b8558162420aab4e837a00a0d5e8c55dbb1cb91518beed659e04d6c1888da1708c8cc6d80b28e0fc8c23bc4368bab07bc6cd2e1dca4098d30aa15637420b27de484ab495423f6bea16868aef22577a3a2eaa5f309e9fed84ec1c7dfa56b86071d4d873204d17f3200aec932a6b87cca3d9fb75d5fba293802dbd72912e5cf531187e2a01967821a4519bff7fab114ebcb0089795491333cfb3cc5e8430bf8d26fd8302c1832a9d80d1dcf5734abea78f9b18eef7f1b8747a6891685cc6a8d159693122e77ef40ebc74f69d90b05680248375a2835959ff873354b9a057e068d145ceb2fbeea01d5e2133205d46a180814e65dac1eac07b01fb5c78d84a30fc967aa3dc863bf47170c0d9a662726650b0e631be3a0cb491edaaf2ce8d095e32b1eff8c60fccb9b3f9383156289d6f97b93121777528fce955275ee345fb32b4298b15981e0bb68a02738359363082fea2197c2dfaa4612a405ae8de8b88762a0638417b3b5fb59f925817d71491682d75858c0752eaabfdb72bd8e8e418f03b51ddc597ef307c99b1cf34f74b2ae9cb3a5c972e0460a209c1827528da1369901161e913c1e7d52167c023e16262cc80f788e6ca98700df7664708c7f4e2aad14eaef5173aea86dfbd132dbee1a0dbf6b6f0c1029781b66eae62d9ecbbeb78a510ab31cde0a2577abab098b6514edcd27e7c6ffe88fa6317a2bb30c0b5979eb46040e55b3e77129b6780acf039d398bf58143ae7f345dd9a493b556b6c4ee2a7455558e9d9d27de9ca69b3952197d7634aa068e560c9ec9eacc88f1468790e26c8d2d3a03b19620dee54f3cc910260665f08421f58ee57cbd14b28e32f7ee8d8f09f9ea7ebb687aed82ab5be127cfd719c3410be621ce8cac2ad66014bc73966c5a50127710fb47592d141922b6d742c0b0d1ae907bb654387d4929644bac8774fca4448568eb3092333df71653d8e3eb379a7c9ce3397dd26aaf3c9a0c15fb497f7ae3121994b149337d783475413509c6101863fed4641a916d3c3e943c4c5a415880b5a9a433beac470ef591acb09cfae6e47e24f3a1717ff78aca6a8c0517e0a1afd89f8642831c4f4de23f87e125346373440c23a06794f2bab60571b002ec0ac30371b7683701ea9772e54f3123013a476e0af10b6d6ed34e89eba9d7cbb1d86cceb6b41f3adbad8e30197f3b26ffcfc354a7c82d036c1db8ce8380e6a2d0bf0f82e508c21f280c849242a469a17e88998079359fca2b368bfc63935758d7131dc873221b54658c3d22073b47130c191c89e5a5ce120ab22a8c125db43e23692a17e79c656b22a0fa67cdc05dfc36e5ded973b5528bb9153706065c87c34445b6f9b8d44ac3cdef5ecc0cc008ed6d7352e7b9c0a78784d413e2c5fc4c98b82d46d67d66260ef5cbdcd75ab6e2374e460b3d1e7457a61c7343bac7c97d2f0d844c469bdea1ad08caf7022e01749a27d28a52183ccd67de8768f6824083e6a2ef59b29a8a281e95613fe4fd5c3a66a8ad32cf4d86733d4964e61e8c0e1b5026c2d1b3000543e41a3309e84f13ae2d3f3aa6fd04ee0396fba03d9b5b6e8e1bf7b356c052ec6f9e0594f794a9c43a6e5a0f597404dfe91553dde215670e667a94155b53198c159cf62b8b6283ea89aa979fccbc93d88e38e05275e5354a2f2c8a7d41f3aa80c0615a4b37ea73f2f6526670634f58647d623fc26bb35cce6282595fcd1aac571a9ba0988f94d08a1af65505df94b9003131b09225e823f78b1c7f413f30856b6eac7787e4ea5ffc5226c1e474453c483427e13656fc5152136b6aa62afddc5a47043d8dea6348d656445b70d3a9688910a5504351783b5a95ffba1312bb07903e43613f028841a471df805f7059b45f313a7c3db7d4689d8d39dbfc88f09da9beda810fcfd1c0f34f68bee4ccdea6472067c389fcb95f8763ba4ee6e0470503334a2b74a4c84d2f496085c56b90c4bd68bdc4bc826f96a4a3e19156cb26e4395602bf0223e45cd4fa776365bf28864e749d0e4a0b8f9471d85031c0ac08a1b871a4ca3cbfbe6670dcede64a4a0e6166de95feb6da91df8b7b76aea90564d40d20a0cb88eaaef07f5b547cd79e9afc82f1292487821ede3e07d5669469e3e1b3ed77317b373e817d104b95b21f86ae4f66d70e30947f271607fd08074bde512922a89a9827f5afe67633df5e6f39fd18aa201a46743b30afe64df1761deca8e98aa575442f6cd247f78d9830e03d7f7b3584d74dc3eb81783d58c17562776f81600e4013d00c7f1e3ee97eee24f98be39375d39ae608afeb879de669bc070b6d5d33899b9c3d2cd5a6b7f1caa006d8ee3e938dd26d0b02962f9dded78d240329dcc5c02ff6a7520ab9798f6ae3ddbcf7a13e6468cb7b2fe4cfc919435856fd235935726571b39529f1cea64352f6ce9c760705e283c19e73d2b03441900840067cf31eb08fea4cbfe9f7d4f89fda7448f75dd0b41886c4bfc2e3ae36d6c0723f928f33b5c3d40f390cb5a9df0d014489dfd353721c2339252ac3e5a79f080a2b448a4fd99fd95331c458838b3d03c5eb89e80c90e13f723074d189285b578e760d44c19086929f16cb80f061a24a6eca700c7a951a33e68e3bacf72d9e37759c577f376f1a6879646caf8f16cf5da5c33cc12bf329993c8ae9b6be1bda10360aad7a2fe9cdf348b73234ae0f36a611424aa67f3f81d7bab2f97f5c97817a664d99c6198503ab937bb6c0dbaf5acc27e4241d02ded5980792f577411536ee7cd186f362c57df9f01e54d4969bbe28500543a54555772299b7683f0a196ce4e0430f82ba3f7f76e53bb6d07d48d353304243cfb537f93fe77ccc27161895e646fe9de47e379aaac9403754fe3b2cd53f178f0ce0fade28876f9bc00397347b0770ac992d5251fe32b860c277e74d16d2f19fed47129874e00c41aa4119eb0bb845d631561427f9a820cdb998d196a0a26cf0d16623aabd97ef68466d150c20bffa851d7701af15a005d8aacf8eabfb13e61c59ac82976af5657a14c61d2a52a4eb43ee0e8f39eaa0d40c068a72ff9eadf99d06a8d3f0f5af2af1a61a96c80a0db49d039b316ae12117e25d683303f3d713dd38e97c19f62b8c696aa91657bf30d2eafe9b7cb481a74df62fd7234ba335c16790cd0fa4d4d1264be310207c0ad4b2d84f8de59944b9f2b1fe65d85915308ec67ee1e3142a567503afde2987455ff0cf76f0e0abb2cf82a03972d69ed25dd87483c6bada5f11f53b1161b61c2749094af553124e546e8a4b71ac829f63244aec2fc9eb79fbaa235cc8593aad091668d55b22ef0391fd860e377180dd301a32b7d389f97588757be325134bbc634e9bf908fedb6e0412e272eb4045cad1b63c422f75695f7e0a8b58b82e4dbcde681f209f356be023454c140db7360ab06ed425942abf9a54dfce481218d530d2d96ed68e6514fc57eb0f6c2f34f5ff64ca86cc920860a8957bc11ba34166cad9490795470c6b254a9ac8e5c057fa2b574fb0c1b99cf11cc854e05dec6676bd5a0d75e759a9d30d53dae50b518eb71110750e8f7b56e5695601b8896dc689bafdbd364746bbe0f71c0200576347b14328c0eca037d4b210d6f8b628a80014360ccec52f9ec11974fbc6975466117d23f8b9c78eaf84eba5b3a075a61b91aaa13fb8bf2ab237f1298b8f168cea8a7f4618d64ba522e6068a949f539c3909b19eef1160a331aeec6733d20a6b61013c2bf19cd5ae42867751c25bec75a0b6cd81935f76338d947fc09d25ef6a5a2438482b73f1e47ed4c27de55cbcccb35752fbd4f94c5636673fc81ff132243651f82d1ef22d02385f8c717618310c1139f6602c857f85ccb590e044ca7f039619004d54adf3622f9529ceed24d5ae2afd0c40f27a7c3ca10e07aba4282292f9e7c51b54fdc19ea5041f08c2e9374d610f1920df4ebef563bf287ca680c95cc25cdb29a8782402392af091900bc24463eeb1923b88d44a756767f5d46aefbb9fd696fac78397576c88330bccd3033da42a49e7af9f48a666853a89a65ce249e2e3ad012ac6a7e8af9a5ad9d1f56693923066c394288893a7a734baa4cd6d921c1261cf5ab7b24092dfcc8e57d988d0ce9f8ca8918b109cc93bdafb4832ce0edbd179d7cfbd62f986c72c9bc705d69fa9c61ff9205d7d1c3bb191ee1933a01a82af499d026e167e1bfeef7497f0ec3ac452b547b9062aac8fa6fde59036606fb10a55918b406948c2d599cb5321164c9ec3d116d42ba5c8359a738435b1ab58d7811257d2bac7d41bf99fe2711cf14fa977f7e8fa147af9bdfaa74c724bdd80769224527153aeba77c9765c8a5b09ae750d9e20a37726bb9955eda0fe5b73510ecbf003df91aa6666c3b1bc0751dc0371e3387058ca1578481acb240266f955108d09fe860b37627976e6736097c4c930a75b3a9263d3ca5ad7c4385704fbf71c53e6a4fd16d239206169052ea3607a21a87af1e8fafe2c321b7d60449be7d192befa99bd4b0744ec01cdf3e9fb4b90d5851c38b4f5e1187e443b3e53c2495f143cca4f3f1e43204cd699c1fb05d2a7bccbc3618ecb19198fd0a2251ceead0a014bda380b171255b36e40f20a69821957dae52eff01229a077f36b708976f6cfa6abed699bc015fc02747f6608cf680373105d35e3e8a34457e5d569f431cf25027ccbd73837ca8e3903361c5e69c56cb6cba0154b9ac52ea7caa9659783224b2f1a85f20e3f0bbae4787a6831ce01784fc563b5b29258066f89308bfbd5b9e8356b63e1a741a22809ba94720765e4d045e8ee3d9f372373b50aaf04a78d5aa51d59accd8ba3557fb3b3cc636b98351ca01b88d69bf1f01e833571f72315ce2aeecbaadd40cfed67e74a6963e2cebe0368457aa82d2885afe0f2bd8df8d3dd1eb0a8a33a502b328aaf67b599f670452ea6500ddadd44abcdd529daedad314e2a6cdae00b4321eb8d12f2f62e2ee493456223869433ad2a2068c21141ca95ebf52948a9799f17e21b19d4754a129370efa2a63000b8ccca51a3a5aaaed8697a28efda46acee77dddacaf37a132be5a3d470c15243f30753088ebaed5e5e14c46ac678fecbb7a8a5722f384cb40043f69dd35c33886cc78cec30ea2179e4fe9164b70a1aff8312028c508b35531a132ff2d45f1cf5ac753ea6911b9026f28fa9bdc978e26fd91dbbd033d57b19ffbe177a79b255b23a7731deb936808e112fd31e05aa9e4441319ae5e2fc672d39ad76decc3e26e89e372d3bb1243ad9c846d92f718996a543b6657465ea41b7504714c6d5e9d7bf611bfa6580cb062ea03c819718fb12bb6814e524c28551e1caf3b8d89b9caf5e0a8d5f052e152bb5207994ffffe959ad37b3e29e03b7ded1311b2cbf2640f7ee21f426c3c4e9f398d065d90e303cb4a439fc2489306732af0c2636217ebbf8962fb81546492ea4fc38691a6db2da6bc8f455728e4f7d93a4e47c9fa7acf7f77fbb40f537c5ce870be1eb1dc38dadc640f22795556ae04ad840852ef8b7da3fd04df68d3d40b0e4ed5255abb9c99c0c35bbdb5685887a9f72a8a8adbda74e17b26d41a701c3bc03ca130d8cf76f8e87ced5d77bc6b232d99aa450e29d843ac64da489092a55da2bc9ad7d8824876d7d34ca85ccc2eff0427abde29741578595c879377c61fff2a612a70b67e81720378e224c131e479c20377ac792502819cc4c75b1c84ec8ecbace8921f0ed298ffd0563931685c21fbcfc64679c73fdddb3001e60b598b8b0b025dc26ecd8c4a217c117c49e9d695f5eef012a7c52e0b9910dffac0be8d727d03e26822454f141cce9c546730e43454e38dc79fc94d895b09a9dfe91e52e376142f29c5d07b75465a6f6815d8158b9d3007abae2e1ed5956d082bc1038c4c9ad58c5de62991ec32a1f31dd249eb1a4366f6557f7e328eeccd735505188a1c6faa929affab32e76637dfec28f0c55ecc0ac24b6033f903a5ad63e20197ece14915da577ecfdf05558e7e59868744c7bb6e03f41cea02e2647f5269633c2529dba9bc29f011e6b4951866fc7757d9f3763323e5e1fac089add5e731866fb3547bc8b068d01bfa738958123b77fd0550a0ecbaa77bf0b297f6236b01079d180fce156fbaab487ad0c6d018ad04d1476dbfed20bf3776696bb1fa862e535ee3aa36f24295ee11f84ab212e2a7ba9f20b917c70e73a0d6558385cd9 +MD = 43e98dd681cedf885992d37e500247fef6beadebc6d90eb05c3cae3d808daee1a483087606b5b9774903ed672ee9645b + +Len = 65968 +Msg = f6bc56734e5ebca7c400076eb49f15c27d33cd7ee185a5ceaa4167e3934c36eb6557cc4061b505dfde69a11d33844595d7aec465c7029d9a281fc5e82e7ba69f3cfb67da4dc16ef9924623525ca8f7243d45a6cc6a88b83c64034ea8d8be1b82c3cfb1a9d92bfede28bc1677f9b43357f720f91d93c0ff9ca6168c8c58bd9e7e42fc3116cf9bbd74e8f501f3d04fff164c6848bf085179a2367f06fa781f367a00a96f87f5b8b4a419196c2eaa2265498645181a92e52f375b67445bfe8dec5f46fff465152bea57054fdf904ed46cd8ebdef396f82127415ff6cf18b3aec7135c264719f59b6773f2c0e381860e1cabc45c609b04af6ba988532e975f2bcf7f8a45f0095eb134e12994ff6918787eab58e6e8917c3703581fa7e942caab0c8b1885789f1715588af2f2bcb0cdb999bef1a511e02960f5356b198980bbd787204d0d6642ea6edb559402a1be6d7a76cdd5c166f0d3d34b27b6d295b8fc574724720642599d65c62959ee36fbc0621bc14d616c2a41380d1846fa955453d25481cf97954ef9a120f087db03d08d1a9280a1adadf43d3641ef65b811bb89f0b71dace9e588c6cbf19167f391a39e49e3f419ceb0b78d75f19459349255665a77e25123bd6fcc8a42f4415e67ddb9981403fdecfddcfa9e24ee6a979f8ab1b89cb6056ea26bd2871a015d440de7a7af2f97942e1dc94c59e3e7e209c1c234b12f8312f21ee4a26981a002cc0c2730353b9727bd97e84b4d356607b17f65b5ee3630bed6b84202d97fb97a1eeb071bd341ebfec1f3a0bf23225423b861dbfd17bca55243f9edbb7f1d340b6332ee3230487b6161ba586f82b2977c45ef8cd4d3c6ca1560674e950262f9fec36a443bf5582f98c5737a2413ee185a81b2e101ca5e8751568ccb570b57f09b651a70ffc979efea16a66da67eddbf079431404ea58bc44c4cf0cdcb4102022972cadc4655b4a3a17cdb99bd6a8775caa5f412810c5669506b19bdb74d6d15f21102efd8401033031e9b66317ff520eadc84c063a6c55ea3da9101e4d6a0123c6b4b117c33968759256d3cc9662ea9b06268b0bc1ce38b8dc2e0031a85a1e250a82caafcd64d87eab8da834ec73af9645f284c5415b5d8584b8c2920027a6b76ef2e221ed03d1c000069a3894922f74efa4dfbf23a452e4a9c1fddc0f43397f568d7e2abca6e2ce125a2043f95ed8ab55c5e2460339a73adde2186c003d24d173cb2506a6be9a0d64e0d0e3b53a39ce3ade33164a7bc91c738188be9d86175229344d5255cb56127a3332a442a4d141e146589c73fb46ee1d38e56031be7f65f9417daa244da561c4d9bbe21c2f2d9afb96b9450a289f442d70a4ed6746dba1668b2c5aacc6166fd74cd349bc49ad5dec57dbac9784309346b15db2989faa88f369dff059c517b113f52f27ad84deff2602363f86beb97fdb73665c60596a8112761f17b5bb27ca1d7b16286a5140f35b1e6f7a7218785e6e4f554738e49a2e5638502d4b18c50f56472ea86d4f61dede14dde9c4222bb371ada11f9cc1c7e54119199d748e8e1550d1ef4440cfc026317e180a077c12138806e0220691624a45a0d204ec5cd1609fa3ce786f62da4df7c28467a686e9f313f3890af0a407d1d6582feffd344d75854542b153a91eca838ac96f4bc301d697ec0237059a06f095b789bb218540c8c43ee28b97f30c20872f5d9d41b108329668f2429fe41e3ae63755f313c059debee9346396d130f45538978e32f14b9b91f2cf9a3a128c256a603b243e85f73be7ecaed5fad41b9a802f2d9e99d46a761d01f0ca6e95ff2474ba9fcafc46b744c1a1c85f1e7c2aa79a7b866ae10ae3669a2f1c4fa7eed5dc97bf0a53e773089dfeb1076b8c29fc8006c6186f92e534c18bc29886609dae9265e5e15b8aab69bbd192e287ce7dffd857777a0939f3dd2b7464fc2b3322e80a41b7db4e50406902fcbfe0305fe8a304ff0821e450c74b18e6aecd9a9a0f2098ddbd5eb8c2e27527d2909701aaea949a7000867d51d01cfe54e873510fc2e6c27c5ec2077cf21c7ef5cd6d5859f422fd5cf93e30b79eb16041aa83eb0ede891bb024cbc6c90fdd9cd8ced9b0c7a60cc2184aafab1c93a6d32f7d75c511c2a6090b97d283419c26f5ee0d72b78e70807d247d6148db4f6bbb90d9df7ba30fbc1f01305cb97117870eb811beb908d44c832429d9969e328eadf838177b4d2649c21386e0c5c2028c6bc9741451e151bf7879a8af10bfdd8e1ed810c4407aa6bd96c4f40554defd9581949d2a0e826967d1a7a22843bab0c882a31c4c67b5f1b601980010d3026930e4abf5564b869bb403308efbbc395cec7e0b93365d79a791970f53b9bce6d5ed0962252f8548694291a6c78fc6a6225865541e18ae5028fecb9d37569ef6a4386479a51c68424292016cf45b0f7bb1aadd3f2559b6b4064c23b4538de5ac84918a34edb3512eb800e7059df403347b324a0f3170232fb00813f710b62d92d796ef36777adc485a3d97131cd12e6affad3046daf2502dc6c130d7f765d3242d9717e0cae9664979a6b5e809790d79af7a34988a66ea38baf5eed9801372eae74078e660759b8cc6baa826dc621d0b1b17ab56b8244dcafd14c27e4355995194f19699d0a5c89c920802421e12c979c3042923fce0e76f0dbc4028a99292f2d749058d83f089e39c1d48bc3701bf6027ce1262b0f363af8d4adc7b2b610c48fea52a33f2fc5c1c2548d007cfb55b28b9e41ba58cf23ed6cc4f1bf8612771beab94992fb61fcb80ce395cb740b4296e09d4895ee953d5af7b3772f2b37c4fde4ea5b6d345d134cc075d334d2274a69a981e00114eaec483faa2762ccad61322583727b11ac744586132f83bfd8d5f28d52f044f255987eecb0e99f8ffab482568f7505bbd5856b05c491ff62a54bfa35195fa7b15ea9c5a7cea52d9ca827b51f134c535a60b086e690e1f1e416144949de1772798d87e5180b43551c3f20922719dfad15d65c5dd07f07a16cb398a770a7ffed716b9aa6e66fab5f374509e217a8165b14bef0b96c9aec57230540dc527eff60c27f4bd0b902c6931444496d96c9d9a480a0d66262e8765b309372af986aff129351002a3bcd7a38dcc348fb4d8310d28104752059718ef4bce597eaea74e74c0d6a227d12d7b098b64b6e54e4dea32b3e7335bbfa3e1d6cef841853efa29f5658511a91e62851f9cb63233f02e27af8e0757efaec560909f0f75bb350fe10789b8e4f2e60c943a44393cf864f987d808e90b8a6d7c23c14e8c6cad1b59020faffaa281c27c170e14563daef7507950d714e4b8765889cd4fe7acc77c45fb823ab2c0f22e418bef8f95cac431937a8e5b136a0653cb213935b9ac86b2873c13cc79c6b0a3fd717308805ad49e6319f5175d01d080447889726ae287687d4218d7d83a39adf0562d21ae646cb81fc6399e5a52b386650e22a883f53608a8bc25ef368219b6daa8726d688dd8f95a0db052a3c33bc09d40b92a9d4b1f1d89e8af751d34cd490cf6d74e572dc5fc826eedd6c1d9b5d97dbea17b0f5aaf11a18639fc04c8c0ff17afe046f2ca901c2958668d2d1cce3b56e6703c62aa627f7fe34a0685c491238b6211d9b3fae3d2cf58aef85df2f160d936a9c12fc0d5c185ae540708aeba60c88be09913251ddae4fe1baadcf2bbd4754db2cbdf2475824335dc8005fda9315fabe0e7a8dfca7efaa7511702a27a20bb9a2f9ee95bce3c492868042627fa1fc1307757ed91665980e2d3cf9778d8bffc9a84cce6bd5c5a07e47af5c1b409869db8286c49d07dd5083f1826e3ec441ce8cd36c85fef8c55fff889e7612863f035b1788756136d8c012a92df808348c1e0a0ca33ad68eada91d3196b9d0ba5f739aafc5b8ae0d1d90c23d83be5b4533984c3c371579004328e12bdd4cdc42c060a03083b60af376679c96cde9c25f00e35949713f71b45081525cbb58be882a7376840b960050a9eda69a52a0c2eab9a7391d99e046149b5f79ad7a05fff265542391a581158d7fcbea325c0ce54e278ef59ef71f7e87ee685c06617a26ea38aaaf41989fd310c0a970473154b2f3123e94b6d225a3740f440550b7e0bbd76d1e237a2e17c142342e3ebf1aa2b142425f1e4c741a3c45c79c7c71c55e4621ca578626ad12678ba2035e845f1b6ba17e9a9c472325d261de18c753d31d502f18fee02c5eb74e54d4d0d87c48e967798f971591286eec301c5ff0dc2845606b1eba3a74892ffd03903cb2911d342d333efd9111cb1e121a491afff60efdff3ca6349be676a1fc029feff6aa25234635517418af535dcd872cf0fa88cb6db40a76130b6a6c36d4b7c992acaea9df39e990a6b3530a52a3df8e8aeb7aa8be073e580092e8b5160c8cd5cdda87f1908eb6c53869e536261e8a378fd9b4ed18803e11a3394897682ce78d478a1c455cce03b6d5434d2000c6f0efa8cd1de2a2a8736ca307725b55bd32b7a9c355ed6e803a2c2347731009227a7e7dce9fcf85064530a9054e480446d41c9a8e1a30ec2cc2efca7f404d69ba8eabb5e421fbe8231d245c39c5a89d4f3584c3f25358ff5b03c773f39a214716963ff9178caff485611265adbdc14a60bdb7cbf7e8abce93657cc6aa6bd2cbbff803f070c633d1b67bc06b691fdd3102d47c5ca5c172825f50d56aac99a91f3c1ebc43f6b8cfa63ed1f61773d4427abce29c1b05c7f442442c9c08010dee68156e3599b24acb9ba3cd7e11d5c3384e174fe0b21ee07b37cc619747b2b0e9d1d352359baa656eda6fd51f0097d309d59a830dc9f8f54d887e578fd0c569e27ffd3183f1e8ef01882953a08cbfeefb36cde7ee079cefb35ee2764b4a451f209d1b72e84274d2ccd05aaeca5e57fb589a38e14a1511b4f5e18127955e37bcec51b57f2c3654f417d8894e651e66e1662864dae89a5f2e5b38e2d033b4a5278ec354bf1776923f2ac83e9b3974f58a6e09d83b913f8f432d8c8edbeef396484e1d7f9a70aa36994cc902fd0d060bddb7641c6a0daca8ddb2040bae8ec313077384bf78017a46ecc7035bdcaa7fb0c28b62b9d12488b2e333c9e3b3dbce234c47229bc1908ccc1fe19dd4a0d985ec21302b36d69e7cb63df8029d509db9ceff101f9bdde68bcf1ae3bff2b160c0c8e2efe61be3422fbad349d8c2ef9b2f1c0817a34735cb1d58c515933f7707da4bee10bbf15fd94ac98d6e73d9f79ed6164fa4d5282f07ea6e08be3e425b98787e2bdbd33eb22b74e853aefa6ad06e56c3bdffddc534619b19cb27eb83c3d945678298568d430056210d5396fee1d3582c386fe4a6ada2d861f699c08b1894e610db8e6c637c20977ba3a36e1c94958457a93d12540092484f715ae5e1c38f06811f063b4ac453e0fffde7ab4c507b814ef9b28e5697f994ea24b2830d2a934bc13448eec98360d9b3036674167e4ef8190e148134d89f643bf7ebc298b7675dd7049cab69221029a19e6af20384d690bed2ab12772d4c5e48d34cc909d1d5e5ce764a9ab0072b79d1b4394c9acbdbf2472cc16aa6fdc72d1b9e1cc1e8dfa38bab7199e5289b7970492e1cab63bb25c5bb039cb049afd977bc42a4d1be4b9af678dfd3b15946c1b713f55b37e7bc7bb22341850de9ad4ae531a52c22117c82cf3da73e29ca71cdf537f03e17ad37a76186cdc4a90d5ee21e84b1fbdc6cda23bd00b12272038263d3bb060d743e926f79ec8fa1ab3d2a68cbbd4c5b2654cd4469cbe5c9b78ce34cf9a9210f7520379ca35e6f643b0179a693e260922853bdaf7aa52b7a1eeefa500e08288d43dd8cf686e2555483e2b3621ffdd4e90bf0122a99976b7ccfb03136bbe102cf05fdfb44cb8329baa8674065161590a8f7b4347e6ea78d18f35aefc8a73b991de406eb501946d3ded519897721337c1713258c73a0df7996b2749bcc7a1ed4bf0882c4e019353b08307ef45fe85e807e88cd80d0d847173e33879f0bde939bfc98f8edbd72574a80e120eae7129e84247d34795fbde650579f1a624d79a0d61ebdf1d0afcdb4e68d1187d4d548fb70521be0e0e6f8c40a2b1db64c59f3506d6b9ef4d47dd255f879e83918f2317e2c508a5b1b2e30e92e00d6e2c5f9f5a8492c648961f12841698a8dc02006762ea066f12d94ff0e5ea51ff22635f327b250a83638dfd178801f0929a452d9be14b5dc78dcb1203a2a55d0980a041030756b293d8ab6e6691b043ee36b1832b23651f949f2dc5b5b55285bf0179a18b9f983f5a0064ff8a419ff70e49fd9dbf99e5d0689f77c7619e8050723d460d369477e55883510cfd082f7e853c7fc9a3c54c24b6371f83a1eead31d59cabc09e96646911d9d6232965fd6ef596ceb38235e6610fdeaba6f0f637ce5b97f1781e05ec1f186c8aeea9eb783cb1e150d7d55c6339d7fe929dd975be7a76c7dda04f738d9bdec3e5ac08f92e6c4c94aca307b94103912f7ad4b5cdbfcab9a4c6b5ad6fb753c7685d07912f8e72483948a1b3ccee42ede9bae8306eaa3386972344b24af7cb74d2776e0cef26e317379b504417e99c20a5d944b3e91c49804799b9f895cd87698acb6bc6c876335c283b3b432ab163ebec5c86cacd7471191e90a1daf0b70c1809af7d493c0ae76973aedf3b65e43ea245cb0aef7c414ec3948e88e3bc42ce02d7ba0f1eca3373d1b25c988759e080d61a9b5d8c760147123209dbad88df41ac6d61bdb1e3be7d175ccb03d18734df0a0343fb4c6b42de778f891692c70b0b97434cf5ad28da47cceb70bd847e5fadc0786b7089ac748985f592c63df7448035e1c2436b0a357844e6f4022a9fdf717be26839deba14eca01cad66f9aa1a441ad1682365f84e9321c7bb9e3e7c22ce9ee9c0d3b624b25c685d3f7570500adba88aa5124883840ce6163dce3a83d829cbf71bca9a6ccb7d414fcf7e1c79849b81861f9c6d2c846a044b013e99574df77582cf7b1602cea3bd6ce3ed68872618184c2e2e4e63be1efeee9c5bf56712dc1e25528193874a845f2d034fdf294de5ef55675486b99fb058796592b923c52c38475b6aad5abd838918b4120ab08a69793a318b90aea7b28363f39f6f1db38c56713092ce0d9625dda85ce055bd6a374853334fe6b3749a1236dcce81d58c50eb2b7896700062dfcf6484175ab04bb3df48e32e035874db877a77ac8bbbae3e88ee99e23de3b235d0c5c0438429cd839073a782711e36fb45a76ab60760a79992332b02722802bc745477d16caa5e1b1e7c1709ba65297dff361c776f34f6e6a9819273c73db2d84c99316d7e828beedbbab81039ddcad7f6bf036d3dd91aca316276b2a795612dabfc73642462c5735ac7e12299d8999dde9ab613fdad91a8cc4e2e4b9ddf8c0124f6c44218cb994d1e2c48dd34f624341961bae81922ea06dcbd4fab047c92073a309aa3a62d75d08840459ca5a6e93f29ac78663af98268d528516d95ed21a47e026cf556e8f9a24bbc7ded668b6723a1c3752abd61f9435827c9efacb1a97d4314c1b3c5be8336bae9484be1e40c65f44f47822b1ccd2ad8341fcdc36a97d64bc01f6b6cfeb102686f3b34c261679aa3b856290e8a6c93d7c5c96474588b63da9d0c88a729f199c6a6cd34628407163297276bd23b55f2d9556d603a3be28a7213ef981ee0c371783884c75cbc498d236441e7009027dc4f8b523d7f653bdec4cd5f163e83a50ddf8ce86a1b8acd43f8882c17342940c4bca04e48ce7505b53511c19f80b324d37f2c7ea9297000ff14ab4c68c7774f20a36c883ea1dbcec23589bd707fcfb176d99f9de0f0fc63031a263978450a81949618b67b9419f57a58bdb945a669d94c714eecbe2c8081f47b8169b22743a675076d4f8c1fa0284211063b9b7ef21ae8d8c2e1ad16bcdc47bb5553a308c31c6669b2c9ecaf1ec5bde0fbbace73f8e4c06283f31a5a01e0714c1a8dc743f961dd5f81ac19bcd65c426b16cd7b2ffec567b11ab7a250e02d05c0398e9b8367053e3b726c9fd3775a73f1dfda1dfd743b3346efa5b1b5e810799a4acc9c218c752d9fdd81eb8d725ec727cf671386e9c4d7968b23e4d37a39414cb6de55a8ea401fff5b92894547c7b07f6e0b1836dfe0b92275d8a8542715f15a161a34a400e489cc450505957823c46b242c8897b72d5c6d282a78927f250e44e126c59d50d0ff99525fcce87401877d9a41e1241ff935f92aafd218d2e50c8f908a94ef6a93e5f8ec195bc8dbdf5e1928e1be667ad2da38e5cf4171c2e450bcbc9c0f24aebbe14d7ab84eb1002bdcd068927cc94848cdbef20f4327df919f3ebdf1b0d7ada7560996b3023b91556835d1caa8d708d964edc7e65395897b2c981d220672d7e4c8dfc8a002c3000aa4bbed00cf1a4cf34467effaff55411fad4b72839c70ce02be2278f5ecd1ccb9f6d512cb5c0d8524f09fc2a3a2e1a6ed75eb36bcdf6be07fba64302b1d0257c1f3040b80dc2b31fcde07f886eab52b633ad9d2243bdecfba222776c60fbf41d11deb0fc7dbfde3d98132f9fb436a3f2f50a9ed605e23ec50a9eec54d51731b55cbdcb816b7e01b496ea33fa7295b52905bdde0e7a2d5b6c1961c94277eb844dea16b9ce40c8c38db1adb41e119131634b0e84520a68ecf8b9b537beae4193eca230a26b6565cccfcfa3d995faf2bfa8ae45b82a1d599872d1e05e51e2df099a6c55ade1401dc582da15cbe69480060119a9a41f1bca08e1492b65827b8e8c5f30cb02b73bb856afb94bb1994603af7571836db86d81e44d09de75dae116c444d6dbca75bdfd265d548db4367a42610d9f1b3e7e7946d3bff841b5e07d3f5b5047cd2da42db5de949323fc469706c5d08bb93df8a8e37d3d009c4e1cb5d1f68c69e952cbf5a8255c5e54b051051783c61da592ae621e8bd208366716f29340fe257762727c9ea4be9d6af9dd2b3d42f73e26662810c1a583f95829579d4edeb064be84212a5f03c138abfe747340aa6cd486e1ef1892725ab94abc661cca7baa0c07e16167b2e96e1760e89d44e7642cc80b2a8ae45a9b5e315447cbd9cfbdf2069aa0b99b61fecb23d0dee106fb183f03fe6a81dae0c79749bef20f3a254c923bbfebb22e32ebe3424509c622456dae6ca7c85d64ee9f0eeacfe7b9a993d19292bee7d289ee58bb5d0590d6fe8a0c80ea4d6da4e94acbcafad04b518de3f4f8f2debea4125dec5d5d599c9903959dbd673980e1d1bdf2d36209495f4edb5cce456898ad324650d028895596992dc76dcab42a99830fbc320bc2066c5444b21c72a49c7751722c1ca8dde25529193299fb0493566908d3eedc43adff06e59de861daf389d8aa274ac39d6c5e19228749e171e29fea70dc0fbcd364a1ce88c63cfa52c46b2db4e96063101a3ad3106e83664540fd6e0e829e95bc53d913f3d41f255338a6ba581b696f7f1570bdab8e5171c6d4f75dab6aa24e44a42f3eef709aca2777c1e660656acf32848841ba90baeb3ec715200f3f23cfb47c2bb54442b3d114a84418926e6d6b71900ac6071bc7baf340df1d02a72a00540656e1baf1742263f4b7bab8df792b84617fb458d87ec72e68debd4c4abdc96b67372a1926e5a55c82a333985f97f7b21e6f72766fe9fa36669968b4d2e71243ca57f928880d43467b90ebfb97ceb745f0606a2987103b5563988704e4adc322553cb4b0c0f4e26b06044aa82e265383fedc0338c8f973d1876480022b19c4513070c57975a26b114c89b869cda7b3b5716aa56ddcae88f3f984bd774c32fd18847b924b5020c78174a69d041c5abf227093b88e68376403e280a42af20056be79e385eef975dc03a7e46142c246601424dda464179aed4969e19fe5c38cb88d3632042917a994de0dc96ceb68737cd1b4d2d2b78ee10d0cb72e156e67dd09cbe4ef79c652c5d65ccddf26c7b5eafca249faa84f7814ab96f3ef6e8e87fb33c1aaa34b8b54cf89c310aef89d52b2c9cf0bdc8ff37b39af2d46ad110dcbef1cb7b1d5e241c2d2975cfdbd4837e6d3c9a02100f06d3f5a001ad8ee68b3dac0aef4200da6b047d3e76fbd947f5b1a56e65db4ee31836d7e88a5d03dda485d76cfc220d4ff9f89dc614477bb06d29642074deb2fbcfeadae2e15571fcf93fb1a6967d9b055d730f4ed2254bb4364019f14b9ef4af7a5a6f1dab4941eaf5d5db3632c722c1021e52473537c1aa0d80476f4e9e7c74c42014f74c8b0c1e36e2a49a55914cd98435073db1d166384f846ce9125fc2f229b65d0e59ad290d18e0be51736e61d550518e90dc94a1b578a70afd2b55608e07a7b7d13722314e285a88da10b11a3b031e58ef29e42cc805729219fe01cddf0a5eb5de798cbd47e1aa84c2b1fbce70f8d616b70e623fd69271a2de0f07733b9e45c784953f1590e17b4279dbb1072dbe3328770e7183779c2eada7d2b8e94a30177d722ecbd29f8427328df2735cb7df900eadbeb460118ef42315fda8a8716c2e38158ab58cea6638e56d9ab527a5b97749d9738d8e3ae78ca386c4492957af1487ed5d8ead07e44acb9748f8f08df8735a78e16f465a32329f98db3cf44375450d77fbb9ab5eaac765a961a15fc7090ec10a6cfc31060b9087cab6d681fb5b4a193409c91075162934028950cde757941e1c9aa6c6b4b010ec7acbb86ab5dd8e3baffc2f74d1b2fac7313489c37580bdb21deee17ffcdc5e4e47ae55172958abf55a476f310afdb69fc3d7beb8d800e63d8cde4ee524fcb31dbfb33f0fbc690dc6b1600add7772e71e29076246b554a800e7ed416ee37dc9eb219ed8cce59b3e4043fa84e2adaf06d2df3806d563f86dbccd805ba5beec0d373ba5a4c74b4bb7c2806b6fe9140e804e64de3eed8a68c1c19c5c1001fdd3f7726c8c3597441704ee05371e49511dfdf1488e5d178f222eafe2d4e10c46b2132d12a70da56679a02330e2229bdb69da6bf8bcf3bbf8b11ed82f6f513d2ff2dae7ec8a9f8a38d00402a2011f49295ea00ef3ee95633da20cead09fe31cf032c90348ab6dbe21d6bafcc6f866e9b178e95ad897a4a5e451935874eb19145dee783fc58deaa9b7ea3f721e4c9bf60a4500e0054cc3fc835c2c919ad565cbbf8232ddd1a6b8e561870c13167210e69a5f913f187255cf713e5336a0f34b9bab9ab36dfb8a3ae9c539ab505e1d8833f80514b870acec97545481b825a94d1c98946470a1acf33f497e87aa4383448699f205fcac50fafca35b4276a78becc70d0bb0867293644e74c23b916567e826f682ef6c2a12f367c49f002294ffad137f6d320fdcb220afcda13196421fd5cda4543b97884788515ebc652c7c99008a7635638d4e9d9acbba980439583fbfc309d2650f35830c51d82fcc04dcdc79a477f0cf7f56ca453ac2132deb163be8afcd8a0623b03a01d1a765bf3c242e9af9fb3bc06673acb2758abf093c1a88f2fc35d7997596f10b6962eab942e123c6e3865300c323d964f46ad840acb3cb6120f9679995482c7b71814b44a9a24090099ff2eb25f5b4df4fe91b4eada067b5d67ea670d34260f49298f3dbe0d60978d4ae77fa0f57e373d09bd49dbf3ee263554c10d9e02422e94500710978fae303cd487eb7dfc8d9d53ee9b0b8720dcfec45d8431f2c5bd6dbf15e4f37e28f61a35be4539f17d70c75d3591c193 +MD = 4cc9b319af23213a45f5b8ec966905e20aa06248500cc2bc736b171c9fdcad3d67493f930753912d82125e8bc188e72b + +Len = 66760 +Msg = 5ab80169184541393a6975f442ee583cd432d71a6d1568fa51159df7c5b8f9597f2b025c5b2897344f1c844da18a54d757aa6782f057448651282fe702dcfff79afb2a1c78ba22d3b41fe4f55567cd3ac5a5b0fb82ab273c152d26e94824d6609471a030d9c3872052babc74c74d6c6b0469dd0c8bdab922866faa86ff59269c53d58d20e40b71230f3534505e03d974fe3e143e73ada3438a35e1448f4399b4c16f1875035986e3d4d776138153bb5c996e7d17a2e98da40ac6f6ae61aad5afc5866ab69d766e688aeaa7449a03bb2cbf40422180591e4fef6b0f49db5682954663aa6b192bd2ba17b4f26c10dc80eb57fb88e476c4ff4b1f6c559f660f496f2e4f011de13e5ae2657e7d124ba6b3a149e87ae7eaf1d8a08411ef376b9cd244649097535c77ade75a8f70beb329fb577d4f3db245a9505705a2059950c6c41cd06e9395f2a074d1e031f4f9b02c0114da78fccdf0b40f768966c14e7f55c7ff5a331d6b0b7f56a8deaa3149aa796ce04aaaddc151dabe08faa649dd5e1185f6ea255f5e0fdefc753b434e3909d6e5c3b52e0814d2e305123faac5ce57c1a308688e7ef566830d40e144734e350c14c6014da651da968b9e40ba5eaad02fcc3ebcb4a5b97936320fb7f5ca1296e3a0f0174cdffdd0bcf9b3e51e3bf73321a69ecee0fa30aec113eca59d780c9422324adf76daa21e1df65a161d8640e760d9338659a5e46eeb57de9386a8c4989371da4112c0c72b812b9abb00640a54b40e02cd69cf5d227ba7ee69f680c308fc06aa2667b8f55fb03f7bbc10ffdfe2e4ed158956a021303aaa220f3628904e2698c274beebb32271db0501927f46f9ba1d73a4693fba02f009846e8ec9b3d0d9d028155f8189dc8ea74172d10cc801fc472404ead5b0fe646b1c6c458bb5f8dc56e6ef92a1fff5cd4a36f814ccec62731231932189898e6079f0f2a5951d2df9d104ec9f739ed5f76dec79a2ea3a84e727a1375584cf19aadb0be9f41073d6f6e988f3cd20ede5d4b76cdec48c3ad0202d7cdad0ed09070b3872377b23405d9c477ceb66d0758b2bd1bd10c2db75ace5cdca63d8edc0bf4b382fc682f70a29b393e7beb0aabc30c562e7f6e4fe7281ffaf94bab6ac7bab3284487c51b35ca20374d253f4d74c3d6b13f377721db9b8377ae2c7b251c23288c4c8432f80bb3053934492797fad18e38ce87db362d3b753d6ba7213051dbc149fb4026686b13b6d98456389c8652bf574ceeff0f347e81b6d26a323ef15b19fbe16a13cecc52b172addae6addfedd6b74aeb471f89db259e42d422838317af1c9f507fadb80681af1155b65e400950c338fb67e9a5e7cd3e6d7376b07fa7dd2675a1ee77a685a3e97f452c206f1bd9f5a79dc5f0011b052192d6a3485f7230a404ccd4df2076a4ac1837cc96a5bbced90740e5b543eb59e2536c3cbd9b0d460fdd3fc726ae5fe0819c9bfc239c5fabe7e8934bbbb6df37fb3fb2b772dadf99e46f7939f0b88803e47ce04f49ab8dfd9cbbf37c85f27d2bd6b828881a677f88ac2c17b1cfd7a56b5f39a34a8b6bbd308201ffdc768f3ba1ff4d5c4316e953bed1a389a316743ea35c4363526b4563e1125af6f03fe5a136ff7fcc5cfad8f288ef665d9267169a28662a9f1b6bd1188bd817975c347e345731bfd75a38aee2937fc4e20424576e86f76fb4ea0f97519d4dd85f84e6e16b8f409e2baf52e38a5aed7fd58cf08f223b9a834362b8f09591ee0d9deed997bd4b968b37e0cc1f804bc2d7a6713e563ba2c9f5d90a0a855b163337f11e8f19b028ce176a8316ab3ad29a7cb375702531790047e44476be2876a7d7f77879dfda8331c3520ac51f30abdecfaafe28749a1ad7e9d3968013744fc67dffa12c5293077c0f7cec59f3f8240a50fb6fe9dcec04bb6c4594b91dd51e199a981d093a8002075c59ac47c207d79791036f16c69dc3153fa8b38445a14e1bae5f30a2d0182f6e5a66cf00f1d6331110716041ba25d28fe48b7764238f7c372993a08bbbc1cc1b6a22c9281be9d3014fb3e7fd201acf85fb4c54eb2fe61516bcf3d126662384890c1c2f2f98b913e2bf595aabb0f2f691d499e08bc35ba514a8ee470557a3d541c0c1658a00da823fefc05ccfb534f42e10c28ec8a64698cbadf1769b28c93ad018a100c9ecb4aa63418762fbd55744d52074c414113d8ca61c8be46a220a21be84399551a4de0917551ce19279e07501941f3510ccb6ed3e754c1504fbfd1667940977d3c1cd0aa6bb0f6d361b56e14ddc203621112936ef58808cce1f08a555b88f4ca2ebf84babc3cd6a594221361479366bd7873af65336e7c05803c35b13723968515be628810fe56d6e86e5cffffbb02aa6a732a7e480d0342522a3842b41a67f51ca2d4de10fc5fb08420b3b5ac42c1700f9c6d82dd6d86ca8242fcd07b744d6468f241826340d77991c07f4cf63189598e75de389997eee6360ce923333932182436113db2d2a87a36d7288d878f44ab0f86e66a259221de971168028572fd5a76f7abd7a5b8b8fb9cec163d0464d9afbc58eede286609faccd8df371926967286bb7918e3fcf144ea87b02718b830adbb725c5d4b1c8d82fde9b788965de5a87d0de2c815a6399c49306012699431ed345c99af36bb94bd54cd59bea51fd14483724eaee2bc7a4de1708ec59fffc4b6509f0e9c904b08f4f60b2ba1ed75448dbf742593f3489b9dd9cea0096302d15236c222ec01d5d06f0e2b97f8176626cc5a9ad03fef5184d55ad3ffa65da44007104d3c66335fd476c2b6048dcafb5d4a7c6cb57a7fe01d3c8b05136434edf91e03c9c6d4cbf4fc513a33da26af3bd24c4b733d0c4bfc4e1c95ef440b90e5e4de39bd27fc749930479f2a808c6d2e6d1df236d0bcfaadffbb9f16fb621b95ea91dab1c7a6d45858a119236087addc1704973ed75335fb1863d2049e327a04f17d0d2d0e9c93385ca8cfa7e1de174eb6486311b89aa3ef815a56409743583ae2ecfbba64a55a4224a1ea3d6b5b528b33327d39dd56ed9022e852524c5d5b40a624ccdf3188d17c98d7916e66c4079b770a0d3eac52bae7e357eec327482b1d236ea725dd0e9ff0a191edc13ae2dd8769183da68f55b3faaded54198ecb71d94311b413d0ff6ca6251626be507d7d56f0a333fbed2680d366f4a9dfebb0d57ded571d317223e2a40daf63ed0e5d8e10f6f517c42e8ec87af8b2189aa5bdfe10098607072c41a7f442a4ccd7dd49b9be6254128ab95533f54970c6d424bb959a7ee79c1e6423639eab3d8b03260aa6661c094cd4f8436b4e4375de14d071412436c204fd838fbfa82fc2c5f94f68fc130b5bec2a521f158dcd0b86e311a9abb4185f672cf24e621cb87aa542c22b64ca19941a142fb3dcb8ce78e6c84f297b550c05ec341828f6012dae5065e51b85952dfb001bf7c565d93005284bf2ba580cfafdbb9c5ce4206075a6f1ea2200087b2fd7c3c6131e5bf7dafa71f46224eae3ca90fdec284c8a407aaaae5ae0a1948508718e9ee986641bb49fec4c072fdae16403daade326dca92302af3c86c7d2b99e11872ae2c5284ca63bbeda4aa3d00eb1a17966f43bbda458f51d187e3a6921dafed6f266a25192981812269147737397b1039fc553d63701cc20772fc202c5a482a47edee684f5727c0eb945e46c17ff7a9fe0bd36cf6d07d0dfdf012745abe5e31957b0596b7e1cb0da1acf426203d24576b244ab4f4b504683db5c30d9dd836a5c0446c3ae347efc9fd19529fe3df65ab09cc27bfedbc57933f0a8a76763685f960d07ecf52081a785670161e8cf550174279f6e86244eb018a84d5296437a0aeefb5a9ce7480bfbb3637ab1c7c0d682ead9444c8c2ed4325a8ab3f90f87a3b28d54a99a2cb6053e524d67e3441960243b3d17ddbb023d48201e43667a37caa19aa35baf6d7258b989ae32bd06e1dd318fd881e9b8a7733a92ed63607e59d71d3e6dd8a35282eab4810d4208b62034ef0d34eb372e255c50da7e7caec3f7b16fa13c873e82f0a57761f2ff8bfbdf4da7ded8bb90c385e2d21d59f719f21842dfea97d247a6c4704952e5d1107e2510a0294c5bbc1fceec0786073a69b3c571b442072088650432747c6f205de6fa652417193183eb0861383a0faf66ad052638d013dac768bad53e0617543cdc663479d0c6a7adcf3b2bad64f9bdd789e049b1bd4366cd56ed40f01966d572087265e87bdb2301727031ae2a4ecb86ee5ec368301f2d62d8a65bd1dce30cca1125e0b941e00f487daf5b83b495433985887aa55230974d96ec0e2b78165f0ba0888d34495ed24a97fe91732b568cb9f66557b04afd0d5837c74144148737fc5ca154a1bcddd4cf6967bbc7b71a0ecee8fd42d0410ef549643fdc66d9bffd67ee7a1e47c1e37d9f9bf1c1c87f67313f0359244e5fecb8e9c45dc7d7ef451712fd1bd16f81fa3581d4a48bbbacc85dd6f080e372cb1ebf000028ebdf7da1efc5328a576123a9643fbc8902eb65c2fa59577a6984ae2c7156bfa92ec8ab5ceb4a35d19665d079729ffca70c9fd3df7091df509ccc2f9f35b2aae679d8a3fd7568adf878c3b0f0c76a3c07921e1ea627463109669277fe75de68e9b5598a0cf4e64205e4c2ea98cb6723af7db16d9f8840f5adae1dadd198a0a2bac8918b11d08d9d02c1aba7f9e7605aa9b3a0e853f946d2455cb6faa106c1005f9cc9cb95702566f6f9c60e99811b89fd1e33b949e32270d857a586f4260929e2174875203e7644ea735b4802036257b1a5b20509af9a786e89327855623fc64a2358af38a147e0e517b27cbcd3fb6ccf2f64f71cc377920fd9a5f949212d7ea0a73fa1670161e2efcd13d34d5bae715ea692b409898065c42f45305acc99faeb8a467534c78df1107dc5753f01450e67f1846758677f9a94735b460fc94ce233b6b550275991b5510f11891a2f86eaf1f8823692c73ad8888d2f62f0810edd8112d45cc92035d8b96b3f37644c3bae04a3d4493e107bc8a76609ad865ca693dc86eac1a18443ff517a97a9a7c02a01a8dac1c9e4aa0812f9e4314f58c3dead4cfa41a738ee81d4202260046af21c8ce68592de0dfda95d86f0ee6fef1c7cd3d9561f3514c4b9ff2e4ce473364cd8f7c58c90af4071285157738a35d1d049ac8c82cd93bf6fb12883e1691c923528e94ed70065056e4c9773534bca88480de16c6793eac15832f628c738270615d20a884e2d27e45cdcd7e27a7a569ceb901981ebb862a0e6031124e899bd1a559f037bda5e1e66a3a1b8adce5e00932099fdd4f78622e680ee227f2ad306575b577c2f61da7212ab63e3db3941f1f751f2356c7443531a90b9d1417730294490c21cadccea4a70dce90074a269514fe561685248381cc57d2dc573b6f64e6a5ca78cfc04d6ce099ffdb681f01f472444af3e8c5dada66eaf12a71dcf6e9f4f28d07424f0e628645a65ad080dabfbfdd6a4612499ea189d8e301e45a9e0417d5a037a2e77627d0a77ea8e14e055966202077621e6369bdb824ed3f52e945f7c5c0949218391f8815c5401aa516540db33a2288c2bdb57aef3366d3445d11fd294aa8705fbbcbe53736badd4482220f1ce3b1c6c501f73a149ae950bd6e1a9096caddde2c62bfa0722f73b99add65f2b3c9bfdc93c4b1839ec7ff380ca0a26a94adcf2c1ce26d226d3bf520268c72412e58a71acd9a66d0044712e9e0795be3898fd6fa9faf56e37ed8c9b15623d982c31cf201c0e7a9b7dba4bef6a76ca9840bdd9fba332dff7c2d826bedc8182e3048934b421c30dc938b4d7ddeefff0dd4821383fb65e2d9550fb55625faedd2c1f537fd2c3e0a920ba9bdba1318b50b4d92ce2e2ea67286f68c0e12fa5d2959b07f879240b4e94c88ad820e23b0033467a469e8d473315ae928e91cfb6d3f35a43e1ea5200f316e830d16e491548dfbbb3d735e8d6ab3f7956ce2ee79a9b3f8e5b759a04aab879a835f08c7ec6499d3a0c47709a9eb7edf93de680225910c162d71b50e112850331209c442856edb4eb0efe154ca7406656ce3f4f25fc1cc0fc403dd6913f43feab793c5cefce1a6ef74065eca5fa2cf3b79241639b8ba686841e42f2bd39d8b03ec93a9d7d35ba11862ae2bf4e9e65dc440f54842a0c955923f7926d0d092e621096fdcf7793b4e6bf55de54ee9bd16927cfe1797a89d3820055950e28b62c5b4c6bedba88f0f035cb48c2742efa5ae2855a4e0b3409474845bfb39fb748b9e518cd722556555646d28bf4e7b6c2e78e893605020095d9f517be54e661c8bf469c46f4da89c9ce60fba7de752dfb5fb658ed6c26853471d0a0d9e0adcf3d25c7025ddb9fca5540cc6e23e6e63caeaca21d07ed3e6ceef7200898bfbaa8afd3b06f9b8f3dc10094d3548776018ae2b59afe0aef145ccb532e778359d59527b0490d86787c15d2b2bbd55cf58fc09f62e62380da6efed46e42142316c83eaba6d904a8ff236ed382cc1829cb5885ed9bcdb5f01515fa102ea307ff5f5a4a469caa7c898afc760ced5046765f2482d54898dce30ad1f7887c9b799f9a5262fd7b029caf83cdd284d98d86cc1bbb5e5e5190bfe020699d424170928c31792dda292a8ca4505f2d4330cc01b166e5c2919efa876fbfa79648636b794d8a9754e48f6a75f05b7a2d52d855deb0a869567418215b184f5187a2ccd4576a0f747e2395097f190ae57ab8bb70464e4a10c112a54c646438301b5662f3536c26d754a02451d1a9c76abd7dbf656115b2a2ac702ec2cadae30cf86e0f0f96da39897d6222889428f9cf9eaace7b568c49e7be989cccb403b6adc6f1b972473caf53a27179f7ef1c07ddc446cffc4e3b77a6a091d5b24a651ada2ee84a628f1bf0fb6bd60fe60b0f5b5cd859a92e70aba5a9f963c3bcb68a785dd75aa92896fd64497f98ce9d0f885c1481ec465ae56339b672174d321dfa36fc6b4fbe0c836d730787bf9c63241072cd68058dc7d4eb9d96b3b35a5baa3bbe808fd071557ef085fb2a546382722e054e35af66bf66cc37116342d48082d776b0ede3aa4db11002ee115e0a40206a7d608fefb988c38d71ee2ac9a2e9d056c8562d93513a425452a9e4e579e6574c43cb1ecf6e6b12b6b2f7b252acdeba3e1b38f7e54e655944ddf14af298bb3e5dbd578b566eb07cd061f2a0e4daa76819d620f1e389161f690b91eb8b4f09fe2454cb7e8c9f9f2862e8a89f88148b036e63d4c694eb95bb4a454f70bb8616be2970f19e7aea803ef4aee1554542d3b3c6291c1c005a295670f1f58187252ca7f57a8f9427379ae80e1b646a234cc89fa890c29c30bf1b18617949c5f91491e10fd86e079c6f364c3997fb872a1aaff09c008ced2b03b328a74314e5183b8d93fff456a0df789c92fc8a6c546394d3cd2ae144b7f90c39afcab91d88ec826ae54e350f07fa3c14e3e05c8078d5a37b5fdb9bb0a4a3c4f5d450412e577ed26e00830260e3f4a2e6676c75ff9c882deece3696995a30122fc0c3450dfad511e30c26c512ddd6915945283eb167851b7541c43bc681a8dd2e9aaa2c8318f9290f30c0e5ed9ca7f3b6a69c1d5e82d35658e00bf001c2140f3b8b8e5e5859f3003b95d8cab9c96faf45b1517bcd947ac5dfd4951e10c57b8f9ebbf6435467ca80ae63f6dc3e0b37ad4e8fcec1c746834f5245ea2ebc31e5459f516a433fe78690b2c1a283440b06d519679b551440f5def85a9086cdae5a19867672c6e08430178dd765279270e40fee6241a17c29d8591a3c11900be6e3f39a51973400e4cfff88cec630f1e3d94314a8470bc7a935a70013f5b33e7e87bb240b60f567af6b2febce4e06290cee59d46035fdbc6a13b2f206c2562d214f596ccb5671dd8e0d8ffefe831102922a3976b294de24117a61383d02e3a17541b5babaff102a28bb070987efb9441e96cb42c7ea16c749729c19e13cc1622268b85600e63b15277f7f53911a67b65738f87fc7c20d6db8044bde1af95838d1c94887c49058683061df25438b8121e61aa677daa12ade063757d00fc010eb2a6e4e972e87d1e9ee680fc7c5ca714d7244be702611d7e1dc14a634e9195142d45eb3cc67520c61069cf781405f9d02a4bc29b3d6997c40e2a12155cf8c830678a15d6f977973972305809bdcd36f08248ccd8810c27fc1bfe8b07aeaa20effbd4036c7e5846c55ebac905cc0ac4d2699bc9436fc12492d1bf13cea62e25af54c42251e7afc61610698100d1575a126ab526507c413424ba0c2abee5ed5cfb0ccaf11ba7e69b9841dd1e9f602b3d2ce035827418d4dd2e5f465e7ce0601d6f7e68fe4e41851dc86d860015fb0f048e749d5c42d824762c1bfe2d6d283f0d59442eb85e4703e322fde4c429046b36b3825d22313c88958a9aa3f6242fd2a364d87cadc02afb72347d89d93d0ed85a38b3d562c3b8a9b1e625c8672659b355feb5d35d186fd4517956d5cdb69cded58a63c69c7ecee061ab77ebfed84869bba366e334cb7816e76e2469004a10d73f252c813dc701c51b66fb8f0bde7e6e4adf55fcc35df64bda8f60a41f5c1d69fd957895d530d3d045951b123c9d6e296a2f2db087444cdb71599627796104ffa757d294e140c79a76a27125ff999a23b00f388f0f12ee5e62593f63bcfd8a10b2f8c4def08b5f7c353b782ad35774f5a2fc10e8b95e7d4d141ab6d94885ff35a6d4b9f46154fe0df7bcaaa1465ba117c972416e246b6c100cfab708ba9ef6e709883c75e24245b844a27329c71a80f28a0e348fbede2d4fc3959a6271ace39d419fc6d3c1e7a91392898c14d418a72e6b2c84be073b4374ce57db870c3447e0e567e38eae99aaa867de3ff30bea7613e3599c899be740f783de14d6e8d9b62a7b9d1d06f6fcccdf3b1d1964cce4905b9911f662cb86a8709a74c0e2a5e190f26a9bcded3965722092c2a2ba95ab686de2e22cea348ddc4868d85a2ab2008ad138e090a1e4885d24f57b669504b370b36746aa7055517f1775655b3f9b9ae63f7cf7efb596c9c054e983cf5488714bc48ccbe9a5bc95e34646a84e61d13545a59d6e45a8ceae5e28c58867a99f895c29c9ce74fac8bfbb5d631dae51e1441bac10a02cebdaaa89293005a9e4c850245ba4dae6d0083369d55131f5804a6bfaab7d3a200f6932d3debf681096815a26c2b48d99d6099561467781ae6d8b01452c4998a973e8fbb091aa4c364f592be6076f43086d2b5a54196c89438a11989db6fc4833c9e869b21aa70e757fce39e4923b87dd161bf694d696b55f667cb666d41bc55971c5e16ab23c4b78983f08a4ebafe8625129feb6068c925c732adf32fc1eac84fc30072d00b07f9a395a1ca97c42d142bef3d73a01c4acc530ba7784a77b4a40d9854f7b7eca1764c37dea54dc9acef8aff8148380c571143f9a13ce6eb83b078a542ef894dfaf62d738f65984fe5dfeb4a54b44ec156bd3f05838829a6c0b539f1b3a06db77a41ee509c509fe03facf6d99cfd0bc1b198ee3635a43e2fd17bf7848d538cb1891e36d7edaf8b03221d52b3436c9696ce6af994a0d84b0e20ca5b67ba510dc38f56ad0e6ac98341f6fca8e02f4918c717fb0727aa6c79cc136a0da120df1975f4b1fcfffce8b020240f9f694adcb8ddf213c1f83ca7eff01422b43aa948d85020f7cbb289523a2a121fe0557a6c9f5fc979cf0e3fd2d6028abcf83b3cd271db7bf0c12dfa5048e729f312aca943f4d503f6d8719935558addfe83abc0c70d9e6e64877a382a02ded155de77bea7e0c80852842a3418951174b1fa921f6dd3225f1ac5a12a289197730becbda1e18bbf40557d40f6c3bd1eb99d08f8400deceeb7db22a8b7921d9a75dee3863a391c4213c668bbc97df63a138953e60bee7f8bdf6f4699c9afcd7041966cda71f6bbd9e96ff0a4949068ecea3e8363685ab57f3d9eda7b47c8caa03dfb2ec22e62920d2a16bb023f423abca78541783f97b6543b30865718253cb2d3d4d24559c3c6653e8471ddb1dc9532b024352c78eea99140ecf134260e4a2e6aebff6cda62826a8d81bb3dd4a5a0d76ee30687fba7b6bfb39bc41a58cb1c9d69065e3e9987eca280d5412b8fe78432498c5c91b00a0765fe05a61296a3db873aee96c37e7a2c977d47aaaecae868ccaae5e153805fc10b88f24022c8e0af72446b500372826bd1eda09ecf6df2752bf7b83bd451ed0f3ab92a3a55d6c8bfe8ef4534075be8d1d739a8c795614bd2d99acb121c0dfd1778f9743bb0a9a43470a343e9d623f58530c727ca088c3ba95ef9e60f349ad70150b09aeb3d27bb3593c82e1878b0eeb06701e55230d70c1f407ed3d923e2c3f6474662f3033957ebd7c6ce68f6ec1e79014ea905162a045e098f5919f1cb091ee72395fb0ac8be7ec706eb8257bdcc0988153d8bc16e6d8e40963f77a73ff0a0b7b0fbaa5bba3915e8ee4d0da30d3f8784c0678d39898dd66efa4e9a4c25c1a43f535ba9fdf910d8c4e7bbb2e2c3c01c7bb6f0b38765ad5f1a234e2be864c55408757e9ff86b8bf0e25aff191dc797f0f75fa0a4b2e91451cc7907d184e641d6997f2d3555faf285caaddfe95c010c2a7f233e09c2fc0cd30d644035269280527ad72e131b8d8cbe054a24cba55967f39c6a9489c088db0d634cc3ffd950c9f134e749e0520ba2c41a97966602b7ef72d49c68cdb374ca28599956d6a20863da4e164845025e7cbf91fefc637a03edd0b221837ca3a8214c74b3c2628ba2973750cbf1e9346d62d6f3e51f691525a934bb61ad3f980b28a03e02ce4c9b07ad2dc3700e75f0209c31c6b6c821dc056bc779c5adbe9b87274d3eef443cda1dede62e6c65903c5f71f995d8bd32d68b7bb073b34da0b303657afce0ead951cd9e8a1927bfe322122b56e5b3c7460ca020183194538ee9682b50013e8acc07000a400c09e315a921106f40afad02842aa4273cd1882f449cc1f7d472eabc049c7731907a9bcfd974696d2d34391048124d041bd0b42ccc886f96fde2d352518a2e852ce2adb9bbf47d7735aa3118604164d856fb9f2c89147d5605f80c36f5b3776369a9e27a568796b6de795ec1d29e30ca76b910d88429325e731b5f0ff8fe99f3ce3702bbb316fa52b30988b4a810fb030271d1d8c4add7d7cfb292866352de5fe3f4d523d88af27239c37699ea810bab828da8d3518ab4e8a2276e423d998ccc3049225bcfc9c63efa0df2179ed8aae97e745e7134a611ba72e1bbec8ebaec643e9cb30aa0bdbedf7d50c2d6cefd1ee57f8ebb5b74eb3674ca48412b5f9d464f94564ed9514c227d4af5af7f81d7afc80c438639193f6a3f2fc4c7a8b72ae2b5bae0bc70ec60393fea6281bac050a7baaefb89b22c8cf7432bbd170a9e4907bd39a0c57678e04c4ee401002e924f4ce2ec1e8a6fb3b923a7459bf7fa1ce2ff8f98003094feb4a3d2c039f484ffbde8694e145218b9ae379406c630203add10545f67c77185c486f2077124630f80c1765c45a95443537a31f4a78a23ff228334173d50b615f83dd640135974cb811f329f1a56cb5b9036a799a4ccac7499a05647e9940ab6380fa7f3865b5f3aa84cc59ef92326084db11d7d26c0629f2baee377d55b16716c468da832f2cb64de8f56e14bd60d537235bc26962cee8abef7022f686d814d7c28afe87fe66052092f0df179382742e708ab1e5ad9f73d3bc1dcf80a91f45350fe363ad5fec70b12751355e9111de0947213eddc8f26be8b5599592391178ad00f49279c03a897e2a990950529963261bd1c198215231794fb60db1b3391fae5 +MD = 63c337417fa6fe40cb3c6ae8b9d9092f4f3e7f4dde7e583d94f540383eebb0c5a80daf3b4690861c5b0e5b0d29fc448d + +Len = 67552 +Msg = f94b0305ee16e4dd360fcbefe9793fb765ce25974eb2e172d325be7633fc903980929808a4bba77ca1f9864d1df3966b1d22b44b11ce5f7f11391d8a661a1af24c4c1397f6c87242d3d1bb81106e26b35e1d8e5ff5c689cad8eed9c85b2d03d2e3e23d59ee258d5a53fd3033cad339b5ae277a7a0282a778b3acb9d71c1e9100cfbadef793ba40eaa9e7ae0a540b159998a8414441ea01b427db8660b1d60da5983ebe18ed6fd31b5ef5fcaeb5fd0288a108ab67b9e7dfa4bee3080a203cbfe8c4d5a465052d8d14f991e4c8f5904aaa53b08088725f8870ff2c077e7337eef2dde65985e2dab8fe02222c001dae342635068852753c4541721e4b63b2b1e3ea6bdba6218c609a0001109dfd333e0724cf738b6ac9645e3fa0229b62e391e7f9f41b51e10ca57b437fc2ff6842270cceaa60507b76c11b91109ec12310bf4047020e226c6993a5ee04a21ae84f538b4a4d33a02b8539c3604afc834d402236fb1c1ce36bab115f2a1617b52664a9cbc040564322fdb6a0d3d7a2aa887ca4133ecbad5a85db06f01f3f899ac9881116590c2f0109e61ff8133efafe7ecb2c1d3795295063005ca1f406608f7ac473b23c3828a288495c1447076a46d435a39e0f05f88ead22fabad2f3055de11fb7e8934ca7ed462d543c98bb5c4c35c2efdceda082d90a49c883e08fdecca5a1c60083d116abec9af1b82ee137d6477bf920faf030fc227eae43476154a36f528642364edca421981acf300163adb267a9b15d7c68bd9ec894442ef2d0ace63be0f6d44b61a08e30b7cac6a448991f8ee8d93fcc93e6263062ccbec8b8adb363bc6384500d67db69b1f11a514e6136f99cdec8691a3d61bd00241e6d756f7dd203d26fe648c0af4cee8c5190ddcf9eafae091fda638bf8775694786970baed919b8bbd947a75b2df57e396e95da900b807a26da7d89792664d63f1421055aba76ed695e30b4c8d2cd43e0fe536b8031d8df1d959e02bd893cbdbb382bc0a5e1c63fb1f5a630ee83b4ee4e40bd0c450e52a3d8c77e20d7205b942e6b0de9faef961418581ea836a12ab1e3ee393958e18c5d0ae89480607c400e1b155dddd454552f2ece00972bcbbd53445f6e8f266bf46f0661779de3fd986003df8218cc8081d547e0026a4863eb26e20cb35a480e194e6dcaadd5dc44b35e7b2211274e24aaab06368abe26fa12c13f8ebe374838699fa39c9dc4b3b22f4dd3759185c3914e14dc3a0fef21fee2a6df4dc5b2718b63c73a5fdde6f4f67aa2bf4269b0e756daa75c531899c3f2d93c23d280488e67a659b47cd4b92a621411a121303503f5eed6e91a2b2aa7764515bfa56455e96d9fcb848c18b7ce858a0f0b9a5b8eb3fee9281507be3e26e9d4b8054ef8870cfdcea13cf6106f5be14aff5106622a71c2581f62a45830ecddf6979737a34873a8a15f4053625c5d05e567340dda94b7e0ba2154686faf43b33938d7e7fb16b7eeb66a212c74eb3c53d7db07092b6a10fa9dd25cdc9af5d619fb1059d8766e44407c5671d9cea8945ba0cf5c90eaf6f74061b70e6930c10e62eab29fa19bdba34e71b894e3e620dfadceb8a73d8fe7e582a423cba6e78d774e56941babd1db4f5924e51ce341c0889ab03b795780996611e3cd271e15b78b0ced49508fbee9c30104807c50682419d2f3ac458773a7e37e9ef7a32751ebc44f0d26d0a5c99388c6aeff35b3dfb82dc7179f8e35cf8008393457c25b0276bd8534c10e8678451b2a72d5db660ee91ee78a99d5fafaae2ed25251f731ddf4d13002bc7cba518ae49cfe98c01f7c5377c4cb0f9f3f9baed1ca676ac4441ae299efe55dadb9cbd19faeb0bc9628be73c2ef67854c8c08fe9b91e226bbfa6fdc92055b4913fd6dc586d017a5c01a3bc68ab7de7f8058f919e6b9610a40dd332f3420e2f3320dbdb34491c208d07c7ac839ce9e72cd3eb28d4db14289f5550b770ac30ad0aa53124753741e4a49c7f1f54a8435f375a5ebc52b1a352a3c0a6f20805c3185cf7621de3de7aaee8e7547da478923662c16fb5e1944876fa765c4d82f6d057723df63045e7ce66a211cd2e3bb3de56f531a77b492c0d7cea9efa2ea8265d5294a073c465f946f51a41739ae1022fa638d18c765222f94cbc6108ff403e75f10a48634009bde84198a0cc2a5e0d8e0e72caa80fc31e14cfb8e60f2713e51d1c1b5c4d0efadabe3364566244797b0276ed4383ac66c767eb2556970ee9c45fbb1004ba9500f9d0b3c58abd52fbf594c6ef65a3b701c6f9894dd8261c8a8242b6316a313de2c224aa056563baad224be6c15792965dc2d392769546b9bdc8cef5c6b33a6e6adcc4fe6a0edee654ab2fbfab42d8b34264fbece9b47e4d4b3e0c60170a5d905ef0b8993dadb63cbb374837f44efb7478547b81ee5e5640fd8b03e06c95230b87a50661c56c7126a96f9f37e6a28543c6395b37ccbb57fa9958bc5b0c7c1348ada4b8404c71990ae5fa3ba8c767fe87f5bca1f8cdf208e4e74c3dba40e8b6ad9895d61d18e4b55238822470e0c4eca7cd8457ab372cf264b11090e6500192a30f1e66df72ee4e656aac637979e2d90d163a843853909be3bd4bbdc684ee3193dcea7270a2b7ebab4322ffa9dae94c209885318669478dcad4a6ca4123d81be3c59f01b7f066148c8b8c00ea4a00ce481b0e657fc178507fbec9c14177e6d6fd93e61c9ca423527009916f23134fe6ed667c280aa24c6a6c435ba9adc641ec470e66ca0705182bbf86da533c7bff1c774278820f56eb65f72b058b6c5910e52bfdc813e05c6a29e1ca0fb41ccb38f84f77aa7c77237cc98a3d6e6e68787c470f29b3ff0ff144d43f9dd79aad4a2103dbcdb91d2852271c8c423e5a886bad9c5d5bd0977d0cccb33fc7da0ed642e3c4840c4e6e0b2a16e865031f58b479ca6b7c59c7e210f52a4e4a0fc1177ff9a5c3b2fb107508f56eb47c45b76ed4ebfb3dd4eb3fe8b1f3872dc93e34be90b89089ce63a83c08f95a093bd3aea7d1096a99cddbe0b249500bd9221cda0af2c7cc9d3e0cbdcbf180006e0974ad08911b3c07cff05347be52ddd9bf715c038b6e80876cbef828add0886b4eef5c9bfd699c0f42f140b0fa4226b5060561b144f5d5d0be41015d22311b88730d6267fd3bb03a8ea74ef3e3680df661a0921d06a3f2ff9e5c7f723aede14ede9668747ad8a00f1bda261a630bbb233709974eb7c2ff9c73d91a6ddb4b0144f85215cb5a8995175251702c617457c4ef09174c40982630a57e7b58ef92a3f3290812738796b7d899d6d332c4ec0a61f368bb208a6e8d429c144a3a5d0bf1e1da820674e7472ddc592ff73376b9fc83aaee2ad17c8b5c5abf622e1c0dfe109871869ad764e320abfb2585375e2354b17c620c67fd39bc007832d005e7b22ba058dd76a3e5b4b7cbe580254764743b74d18e0bebf7bed5bd2f4ad8fdd371687ff54f41e051001bc681087e6970f2d8531138cd645163ce184a73ed0db981efbfb2a3a39692107324368539a76ae754d6a429fadaf370cf9a3275b73b812be9e7f6a346ce8f2ce86b6bbefd093a99d685f3293b55c52d02c94f18e09113b77e802815cf90309ca2258a7c7396c95187e9640038deaee18d3009240d17576dd511b2c2e9e25da7c8d9fa874356fd568e896075987c99d69854c960e8d436951722fb723acefe96821023a71451bff214ed505103386b524cbff59519d096766b3c6bec6a5bfbb1fa516da48e90f86b419e9a5c23190d9ed0f8f78b48136159fae66afa22913c40552440455a1a8e0a3c23a85e9d2767024d87350a1ca67d86eca860620a79aa8bbe11045320f76b172e04e01f1c6a61c5ebf519da3d90d445680ab5edc91a2bda5ba12197873075da3ecaac6646ebe431d1c809c254d94cde9695d163087da874545bffd638cc969a95fc73fdc3b1d68c288b6f8c098acf989fd01d8c6ea80aa2d2c806dbdbd3b5a15a229caa3cc4211f17c3b2fe03a944bdab43ff30a4a537acfd6e9f6d174eb935b6c59136592dab32c7fa3ae1eb419293e177e016517c19dafcd7305394448c9fd16cb969c1f35e0d60b76ffc6857a3636af329071e339773f88b2356fbbd1527d29f7c0a1d1e20f70983b91923f55e746e3f40cbb2d498c11810de3ef4c13c14e2e642e314b7db3aeae580fec322ab1014e48f2ab766060a85f0cbd32659e9b028ca73ba4fc4761c2c652c74f1e7727d84697cecd2f2c89766b350dc3a8c0441cdd277587550d9e6f78b2543554b9b04e75671d8ad7fc6b0e4dfd723d7637510f887b7852f60ecdf72e0d33396560fed6534d5b7f015e89d27fec76ea6e42465d26f990825fe9751c6eb9f0c5d10b480258a105143bc16a5569788864f19fa88831486abfe31c2821a34ef955182730550e08a6e4c7d381199338233790addc032fee734630255bb97442c971bb335c30dbfaad6b65f36291a591d3cccbeb65607b3226cfb77384465a2bfdb62abe00385adda50276bf835fe91c16bf23d6e922bbda11b6f9b5365abd60e26cf735d0ddf3482a647a8667d7064d686908febbcc6a4ca0966738e66926983430a12952944dc089ec01e69499658c45651bd171cffee07fd8909d28e41e285f8ba906f9fdc2cd50137d5e7e098f7f3a3dacdd9faff25bfc180640527e0c97b0f87f6d2b6ceac519657d6c98b9fc9cb35d6ca189deed0591bf28c117799a7cf4e1b4ba8b743e4e427c528f892d355b5d3ebb9be4ef3783fd4878adcc79203e87e1b97d8ea625df77a2cd35b3d5b231747c1a4b25536a4d8b4e865505ef3652e6732e24a97549ef05932e0d9d35fbb5a570192dcfae0dc8c82bd255486e55509d00635e606402f398a7f565c9e09a6e7cc538c248519a9c308add3cf85905ce1823f97947f4f9938d5bc3dcbe47f6b256d5e99723d0891e50c6175aba41b011e4686113c49a9635704919d0deee9927b04cbc1ae6bd61e5a578116cf2baecd28e283aac6ad7515fddda57f0c0470a35357410cc057aad88bb1b4bb23627347681edd6a1af3dc38912aa1eaaf6e3c27143069839049ad46dee1a26e8f908ff744c43c59206305537db12ce7de7374a62555eb2d078907f0bcb1f436fbff2d65259a4a80c14418ee283bef7d815c40a6f08e6e130b5edf5e8ee7521c4ff5731a746aace6e3e03f91fa8f92b48171c9b1dca59a3b85125d19ba4c632673bb899d97fa0d936f7da0c55b77bc94c4fa374e516019af5eebaba8aaa8d05e4f999876f81213904e646311b3b91526333fb206b78990777c32ee93c4c340ccccd6c82efd7c66e466ddb1fe6a1e4671b688615f77e6aa99c92e516372645c77d0bc404c10ffaf97a12fb213e86ef77d361c6ce3f7400d1f2c29f99f1b55cc6744912958986296b2e6a48dd89671cf539944fc1aa05e61108c6911cf265c37a4119eaadafd6ec23c1c826bd5daee77fac948398bda0a4f75d337bf7bfd4246371d2bec5ba6ebdc3d2d1273931daf977aac704abe0e0a7e55e8db2b2c07cea02752801763fda18bbe009cce99c87ad6dc2c03573ba22798b8b39d7f69accaed7c97e45278695778c57d68a36f4118dc27304b8a8b002942a71cc5e0bb54fcd73ed3a1c52452d74b5d8cbd1b9ef25152639f8e09358ed826280b9a78a9672e0476f0fd99ee20e7ab8b15e55ead41ece0996315fcc1b6fcec4668656fbb4d261c2cd541f65e3c5040590026932498b32dd063288cb7df5c3c061b6eed796fadc8666ab403fd0cd9b3ce35c9e28c5e6ce210870fe0a070c1bc720cfd196c338ab02e97a0e952f94cacf29d15746bfbe0a661b7112204d3f31791245a1b1b02877b8b444bcfe66c70d2ce1e54714cd7d722ccdb7777696fbaf36b49cd1c0e456ad18659fede3fcb0cce69a1cc01b45a19fe58db8a0959acdef909649d44ce62fc5c25be013ee77fe947cc0fc74a2dec6de10e9f8f005bf226d0725e13bae2c305c1725c9c1666f1cfe6fd4e8b773ef59c73f410d184f8a95b20ae1d77a7d2ce4dab7519178e42888553064860ae70dd6f5d151497bbb6394593c68b113227ed9bc035deb9d005abd535eee39017490cab47769428d0200baccfc18f28846887b8a8ba94cc0136c48535be0962dc53ea1bd82179cde9bb85587ca71005c41d036d0c0c21964c5e3a5efa7da11d2216e086b91da9ce2f1110114381f8f11bcfcb8094346f60d70475282d33930a141954b392720e73c9a9159ecc562e32b10546b9e7396471cab0ddab75e9c771d7e4af6b0a298f04df0bfac8be2e9a10ad47dce2ae23ea134eebdaae7ba6249a96ff5a76c94813c89bc02957c11124d5371df5c190fae88c8b3bd4fbe67294cc77f3bb9c78da8408234f08137f08b4c77910f92036c74525a82b33585f55ff50a2463ca5bfe4c90c9f4001c39d1a323098a750c54792eb26cd405f8e8e584b6f408344584570ca1c381c7a31c6508656bf6b63786c61c1d72404c0651a82616e792f3a7eb3856f801569dd23a0b0988214e298034d3eaf7fd2febea4acdc299874d488dfb02ca07f60b29162d34550fbbf96582d91309d6802b6c215eb6c8b345af99543e56c45623e7cfeb60814970be90f0cbde14073d8dab5327e803c70895227c972f94d4672d9518ce6e72753f8bad31a7ce4741918828278a81254bee085e58c3395d78bf459b8a3bc17856e0b596cec3243d6787023a5fa5b4aba5f811bbb46506113fc33e63aabfe4136ce8cef62e8a6a56e7627e5a7225ed07839b43b315f8f04088276a65e0c750c435dc3a33b78a2b342fc87ef0f577b4b9636c10dd03fb927be0304c4ac2ee921b301f79e8103ec155df3d66a650078631a3defba1f4f96713e682666ac7a22278ea47207bbf14d72c4415d7d32871ec10e35886aa7f5ed8b8f9a24b5e756e7c7dc2d7a0772a98d7281d06451fc53350d7908d244ee9a871cb98046d8e42b01a9a68458c62d9574be9a86330d4ecc85ee649d16717ea72dcdc501d4f72b623974f491546b741ccafe1a4d11daad5ad50dd6dc9b19df82a546ba07153c456155d0cc3cb51fcfa656d9060c48e0a365ef12d7adab629795b72ea07952cdb9921d67386dc509c79be1f868ab1e46b75599a46ff88c7730472d2e803ed3d20f5c5bde3f0cca52e36433034711dc3572929c6ba7a5877e32ffceed6140e074d026d5e0e9010d21ac6714a1ac28c9d45a84c011869ce4a0232761144b66c1da835a54133f34d69fa90d4c7a9ed72f4cf994cc3b15c6eb048d26af4a4698bd2eb05fa01f488d6df362bea237250654c4d7288a935b09e4d3f76480385bbe1d95df9d81ad0df519475fe3e080499d81657aaac0c1604e1634ea499b8591c12a39997cbf65945223c029e2ccfc1385fe576c80376d2c7eca50ed3dcadaf1872942656421eee78ed38847252f548aa413c13514b73ec87f484e88a8d3df81f965d8ccbd71f10e8f71c74112d030b7e308cb5bcc08dc3b3bd85743f27f3b4bff252155ef75150f3f45a4a0137936a02a249f6812f1f08d98c293a78396975782b0488862f603f4849748ea8ff0114f62b162e44d3b22c6804d293bc3e09aab684f73ed7ebb62c548aedbaaeefe67cc71f53f55e4ae19efdac242871b25ed519b4acb0dac8edb8872d38465976be11d41395c4541127e108e690514f12c375101e9776f52351647ea4e6ba5f4ff264cb9c4e13bcb2ff82f838a9b69aebe21b184749f9bda79ba099867b9f16c82df61c0e0f7c0eacd3056a36d2b0fbba3537b0b326d1aaa226fd7646696d267bbb36240d3c65b06b3cd8cd55ade8c7ea374b77d6c07732cf8dfb8369229cf4d734b5920e6759487aa78da0198dc6a61852c6bc46a952ec6c3b0b4f6349b7087724e4d48612cf3d67ad9460f704c30cb1325a1c77440d4e24a8ad38c94133d7b8065479f8c150159eb97dbe82a5667241304606ed22fece756161ee0fababf9265384e0fae554579c45b9e720e2496d34e74b1a1cb8cfe3daffb9cdaaeb87d34e86e6a801117479ecfcc999663db45428c1b9a48a87c924c1de25563f734ffcad3afa3d8fb819031d293d33d73a6fdd895a1264bb229317b687352611f56cebaeca50200b5bba7989657544d84ab44fd30af5a922ebb623457559abe6c48716efcf68ee087ee143de3c125b0df12a51927ed4006675aaedfb3313560272f704cca4a5060b842608681794d4ccc04a5944002df8da42c9ce244ae2c31973654be204a4e6992de12dd3726d40b92a9ced744973f102c5cb4a6d27586170682a42bc49d92e15bebb2a9ce70c3d37b28a748fa53697848107e93252d4bfcba3ee8fb7fec24b25c90c9520f01218ecda9b8502cdf64ab40718312047f84c7fc90a99519df0ac2ddf6de40bf7ef623d1568a58a0e238935ca64a893913386014a06d635a1d4efb264479daa9924a7acf55a4c61f05ee17e4d75b618a906faf4a97bfcc0a4ff8437ea3228a94e3267b0fce8e0371f08d1e1f2e3f03c09f319be69d2438f01c0e842f3b62b84719910ed8ead1785e4a1d9256d07dd5a3e7870e2fd9260fd52d9aa57f33c0ca8bdd941b74d0f48caebba75ad1e89d41fa1178f06e744cba8129a38eb7b4c52928d7368a29aa7fa628ed315ed89c28ae8fc40d27ec961e9fbcb932271ee5f73de6ae7f43409dfb309685c686b314a58428a94d9cee6525274e854e58feefe16e8d0a772e00d3ef91be2e6bbaa9799c2a8e674037bf0ce8bafe34ff099df90825e4952734b374e331688e2ae203f3950a89a7eee1a6b1f0c1956f4d22452cf6c8b4f4963b9fa75f785e4d0ae60aa9198be0116080ea7dc3a2dcdd418b3cb032c1c5d2cc2c0e95ecce671414ae03c4af155d4c9dfdd497ebc79827e22ccaac4476dfd5d2f04666119b4a8b4e22396be010c601ad41ac27f09694f439ed3948b551caa5af6d90415747d059c22bf3c733e4e4d79933ba57587997ed4cb7cfae0bb84deb6b8d334e453ac12678af780030fa7f7768ba454dadd768ba2570d603d115324f0f3779b763dce59c7697113d5fb85f8822c097317618d002cc0294728ccf3f78a253a8a139960361c6cc06a649874bb3d02cf62c3ca3976d47535220c64e3d0f2cc8093650cee51d70359f6575d00ca078e6ab6686e285a5a04d573806faf3bbb680e49e2fed51797ab9249f6bf96af625d5fd06dc3c614fdfd7ede0d53b2b25466281015e5c101cee42dc7fb46c2d5edce33634c619f5160ad85a40ba79abf5e75627866682eab0d3b7102ad78f1d7fa7f79d1acde1079f2b3ae7823d1c3cd29e441f55cec6a6da32ff08cb5ccc02028df979dd78fd609549e4dccbe68ca6647514b2971e920e4412040c88cc8aa38e97d213a850d3c89e6dbe81463e31b15473ae2574df4de8967bad6489ae30c9cccb68b3a1dccc07629eb01d18cc74254aa0fbc313985efd7776e257f78a283c6333a4a0f0a450e48be4a2fa6c18bbc9ed05e1d39dd12f1590098b2efae9d9c4fcd76e24be30c828be477c5e68ab6f66e6a9499c391227f8893f9132b951ab293fbdaf8533099a9ba5d02692340cf9c4dc951c6710e4ae6d091ddaa85d4d0632d3ef4d0c76b63005e88688def9c3bfab78cf407c4ace2c3db8ad4fdb0d6252a961753201b0bff12e2f728b89df592be362619f230e59093040f6d812f21af754905544ac08ad44de219a15dd0d55a433415220a4840bae0e46005e9434fc5dfb09996d54a70693dc66080f20ac3f9165beabaa46d56f819f75d4c7aafa90ed6874499443b45545f1a7c4629be3a05c3f80732753290aebab7279fd9c6c5f0d62786ba1bf581fc2e58cd4f496dbff6c8a30b27e11a76655f9e8f7e6b2b4f026b0bd097b11bbee7180bc42af59bbe4290d757197c9780a25527d576c34f7cba11bec2a0c810449bc89e0167a2bacd7fb92f8b75ac2c37ec57ed9a076696079e46badd73b565cb90aca9f563c56d6614adf608caf46b14b9b45a5daeb9a14815968a717f0daeac5c409a20cdf2060097ebe56f87e9b6af8116f890db50f3e6b67d983f21353d7f5500f903f4ad27358fff48204af0a150d8dc32c42bb1004c07588e8708d0a4ad117a412f865b336d5364c8bb72adbdb12790a3781e5e58e07ed3b7f9a44476ce2818fd03e180dd208898d1a1ad756e3903c0c51d01bd505c836bbf077215264aff79a71194b266e79617ed6339ec3560f3e9123394529918cb8d0e20f0c725bc0df8b9e91e64833b127e9680c68695b15e76155c34b2a59d9db41fd6beef0799ea22bfeafd1b94937419477ad1b911b2c9f438e76151d863a07d8ea92ad14e5d0a9423a7af5c1d7931947ac1ca183bddbce01765b8c4d3f34a45b518c3326c8de5b98f9fb38aa054e15ccaf63e0876aabdc61b6799601ad511a93d962666e49511ff4e43883bafdef9fea278ac2e54a22312cf6d91c80f818d1482b1b303491b05f20a23bbf3be4fe1e68bc972ee484ca3529dd81071347113242efbf78bfc78382e2dc0cd273e503fa0f17940bcd412b5122147b3d02c2c5a348cc5726581453f0033ab1a6ab25879aa7e08843e8a8cbebdd43cfa89593bb8d246aea2147a0a6104b6334212acf1268f8be7cbd7de2346d2411832f14df7b599c728053d492074c81009c2d3a092acbc95a7761d416ee3dbd26a1b9c6d18e6d798c21a34713fb0b6fb8f2b121fb592be35c8117356d7fc5702b3030f48e7b33825fd6f9e74a0cb6db343d9428cf26f10f6ba2c7e70f716b07c8397be641ca118194a63dfd60c1b38e1c85c097aa1983132fe35933234c9948a4c382e41004713cd29a57d17ca26b5017d31cb6b6bb4ab7524bb561d196b6fd68d62d3623b0ba7dc2b930abc73846e8cd2e90cc1b93aec579e3c4b943d92aecbb7a6423a356540a0c0baed3690aad20e79e0423012a18034eb26c829e9c5cde46b80ff4b87fa7ab5798ba9089a106be0d2b60018f06ee3b79c096060d68b69ab19716f289b21b2a4b693d2c4f83ba8be6de8cafedb19933a2152b8bb6c49feaa32061623f77184e91851dede43a324f1bbe717544b382b470ba115ac1387f94c45ad88f015606ded1f4441c704ed5d253d3f59abc9210858bb632bb574cbf61bd4d64c0f8d84da3b2bf98001a450adb372601687cd8aa709c1174f5a089c5193601eb3c4c845565dded03e30ba93b346fbe7e25ad0cba3b4bd3c152c376fa84d67f564c24e286ebfa866c0b6b01cfa3a2a4521a76b7a7af3f050018e89cc66946ce8e38a87b49ffb093bac161d62ef178de678f0060d99421af1990398192922ef67a4802d60467a71ad74d15afc0e69b76a3cc728fb8b298d7f302dbafc4c5340001c4577c21ec8826aaf7b014ec49b073f018f5cdacd04d8778b6f9aec6cb03f30df3d2f30656fbbc1b075a8d1de462de35bdb1a01db8e7c68ff3b904fe6c41d7851e98c51d6da7e612c43aa3b87d56be5a01cd9373300f9d2003433bd66f97b4508dd479ccf935ab777879dd26dd371b462d722b16016d12142cc0dbb49eac935888ac987dc14c1432693ec4cfccabfee388c7f26ef3a83051b7586a02bf297b845748a9978e95272cdfb2de1b115a6e185cf56fe4cd69fcc0ec3272279bb575bc41d1348228b8ee4b24fdb67376ee73cdef232ade5957804912777a8bfaf988e88f6fc2a5575c71787f46d13dc10c15ea8b7aacc55d1bc3d5724e0b96a49cbcf18a49da6ae329b79c37b5b9e2bb5e5d5876227c02a25ccd4a55e0acb0604719bd7788043893c9c89d9574f5cb2c8c52fdf84222fbf0c3a7920155e541f7a2a835a153c87830e1ac65e1a80d5fdc3efcc25b02271a0ef85893bfd43eb1325470414fd3af90821c6bda637c8905921b648fe58b12c6c6a2e837d6854068d70679cac83040e9511f0ee66216f22718cb914de0056b66de696064909172cfae5fccb6559104eb6595 +MD = 025dc380479269ae1739ed9631f7606fd2927f71893ad74ae864d6af7d14323be5fda67b2c456fff98387239b8eb3a13 + +Len = 68344 +Msg = 0f49cae81c8628d290d4813a453132162575fd2fa5ccaf339069ff060679ba5ac4561d7fa6fe827c69c3405eb644ccd05c9b24ecded86d512dafda76b66dd13e9f3049cc4e5877982c39a9c2a81272a77e4307b339bae976f6afc4f96c919752294016761e7c4d4f5e9e850e23856bc312d46f2ac05b6bc874d285372fcd56bfe9ec4c261e524cc889599cea3084014ba0b624fc7aa13a722e80e4da070954ac689db28355c3be2c34d4b6fcd5f87a67b150eecf6f75a09aad22ab87fc2ddb422cbc1136cbb5e9a2e8769bef1cc71f41cc0c954ca8c0e369771ea0e8172131a8bfaf31e6881117532ca712690dda38fe7951e01a2c684c0616de8ca55fcd9e07a9e0da3c95c08e6688cfe512af190dc9408898e10357239912c83666dd1a6c8770b5d4dff9a996048456da940a6ce5c8aa17854b3673b04cf14668d297eee14f9e98e679bcb37955a9a5ba9426bc0a233e676ffecca63a453dbfe89197334788baf0daafe7c87d807e224cbd0cefc20384e01ea2cdd60bac7d9b7f4ce5cfe4594d25762b80cfecae8c365ab4c3ef569005ea5ae042ed69aa3a41f5ab87ac01ebde9f839592af0c065949aa2453a20ef148eeea6032d29d67fb1b125587b0e566f5c5c894225226b16fc406b3c5f2314fd65297c9a56def0a48909ef3ecc5daf11b010fd13a9f81d6560d340920c609d1358029c3a3a6a6bba908602cbfd226b4d6ba1ef4e17e679e948efccf6c05dca0efde68f835650ca4a7eb21a907be12d8b159bea420d71e31b3ae28adb199f3e38cd61b0d629267eac9a2a911cc73e6853144b789fe92efb63bd47e4af86996c392cf0cad331500b89893c00d17d8eae2e0e4d14c83982255b26ac84f485d0c688b31017eaed61f349b272e45efd5661845a1d495b7cfff38a2d7cc63aa5d9ff9fe63c328ddbe0c865ac6ba605c52a14ee8e4870ba320ce849283532f2551959e74cf1a54c8b30ed75dd92e076637e4ad5213b3574e73d6640bd6245bc121378174dccdaa769e6e4f2dc650e1166c775d0a982021c0b160fe9438098e86b6cdc786f2a6d1ef68751551f7e99773daa28598d9961002c0b47ab511c8707df69f9b32796b723bf7685251d2c0d08567ad4e8540ddcc1b8a1a01f6c92aaaadcaf42301d9e5346335922db6c19f3555fcdfdf5833bcfe13f6dabbe0c8f7e41f1a16877a7bdcc06e093acf062b4c6dea828161991cfd4ef3eb3bcffa76f7c5d9cf4bf026c518bd645aa75fcc7890214ddfdbfbd1626663c2538665cc3cf1f6e5cfdc868b2060d44d1222068d0f33f984fd35d6876dc0e6881504a7df80af1f4b04117033f57dad3218f3ecd35afd9c99c2d71943a5d27e4d19fabbbaabf7e7115531d7a6aa38ef1a54623825c0b6b3931808ed8d7266d41a47b3c9e62692f641a986e26aa957420eaeb7130ca925e57be6127aee3c428ff68776fae95848f5e2ea56ba0958a250150e39a40f7d13db58143be7ed6b2f58eac18a754da8e08cfdffea860b21e3be375c3114b6a5483d3289cc5d1367f5d7fddd38639980246299d08a6ff66be0377c80e78a89878cb2122f0c03e6985cb337c3c8ec5647da20be457d9d549d6261ed62a32f118ca7e2ffed4502f0672c95a05b82370b64cb6d74460d37ac2131e491ebad2ad51c607601abbd81b93a2c24418ead6d4041bff2c4bb8065875e156971014ca45da080162051bea9c77a2509214293b57e457e57b58c1f516cbcd698938dcac5327ed06965c88ea1a490e0eb48607a384bd8cf4350a13220e3a33b1801786db4db201518d7f67592d8e22273bfd1ab1e32627b5e9ce201fd747b0e92c3a87e9ae0ec1aca7ec4bda4e9dab6498d7b6e8eb84b4b51a138d30ea8ac15addf07449eca4ca628631aacfe61df6314ba480bb067fc04c46789f27b069e19125f7c09e920a780da8de18cc9c858f07c4f1fc9adc6db715ef7bfa46d17bae1684aee13a26a65718704ffa32ca4af262b53e7f1ad5d5159c858c0320c61663758a947acf231ed41d7d15e3a507f4bcdc6ce8acbd7b5c783aa9276e47f6e0be18a836e1a01fba9b874fbe4985de094adf8c9ef9f5455a3b8aaaec701efc612a8a5e04ba5f653009d038a7b077a50f28d664afeb54cc54ec073b39dd383efe15452c9c697fabe5aba2f870acdcf56cd36bb5c9f54e68e3163aba9dfa06473e2ad3844c73634c61fd59df97933857a8d719d04bac64a37b369fb9875b1b9da7c7a005c36cccdf2b8b7f8e8b081c4449a04b54c3751a1483b990a89464eabaa16855116fb9fecca8b28e65d96ffb33d5db7aa3bfe3e134a33bc81833cbe626d1a94d47cfef7bad701f00f5e15f57bec3c5424d9f8d5c7c4029a078f3e4b05aaef703095281e5fa083d61df614aa43d9a0a1cd2f0b5de63e10fb45b4353bbceafde10e695f5b02ae77a3b52a7c67348df2684a4420209740c5a7e2fa07d7b1b4acaf16018cf5cb87461f81043374768f986f462120640353896587699d67099064a1ef649835e3b55912298b22193067fc7f67ccf17251fec4ffdc0adf33ef068d80429a696372c0174455c7319e8b9e845f554f7d92aacade3b88e4b582899f8f14b6ace9c79f2ee77dacc1494aaebb9ad9b9b2aa0b363e3fe234ff089effe2d225f4a1fea893893384d6805066c146a5b33bfb62271ce24fbc8764becd7a58bf7ba3819250765862227c0c303aeec80db682348c2c853e77902a1ac1582287bcdd6c558c056f24dc1f466ecf0e5bc839aa3764106398db1d28c429f7871ef93215f724d410a6740843dbad172a30ce93570194d6147e40ab4afe9a4aa197368ae9ebf652b944d05055e4d1eed59662828489cbc5875ef587bf8074a1f0b4c42a22f1d3ee4771c01b1f08e33e59b50d6efb7711c70361831b4ef1bfe3ba9e2d7c88b0c4900454cdd267f0eaeefcb456bf82726ec3d2af71cdc1fa84fa487cf9e6e2d1d02036167edbf643eee607bbc6dee222eba23a6f4707df42cacde277aed2fafb008626de5c9f94aaf80ec2f4e331e3308f4a84ca8e306f729944cfb7d6a796d75baa1cd5ee8608cd0e4e748538214c4463a4f7e7cdaf3a31f9475963f8cd7f0ce9745f23bcf91c533b8e66964a17e7056d98ddef8cee0828f3bec6a39dac7d43b2cd39ef4e5e96e584b6e150a3797a1cb70f7c095354a0fe8e915fa14cac5724bf9bf0612d1e3f2af3ae2bdacab0ce3049ef1e5eab49cc5cd3a96c828d35d75617c8cda3e0a2dfcb8f5e8c5d4725abea292209151b3552eac8ec3571e8afc382c23a18daef513e6f60ae4e01a33fd8f2618e85572c81fb4f77430194e682e44fc9db1931e39223bf6f87b8ed65651feff91ddc4c64938f34e8961a130e160266339118ce42cf5862c3cf114a1501468af7b6541b4ed4d64022cec617e9d3e56e08465cd9976fa3016470a23f3b7a166a654037ed6fac981c2dd14ec8fd22541050e12e7b67dacd445b50b3f5603857374aa5cbe951849c6f1189fa4dd56918f4144ad6db3c779ed2af598b940ba3d19bafcc59387bc2abe2d6dd11cff611f9c15c699c239db0dd5468717443c5234b3c9b9d280175d08d1d85b4dd75ea83bf202e26c77813ec54718f82b42a15208fc21600826dc8140ac726f8a468382632b89469a1042594c9d22b739472830263d629ddada4fbf8e988bf90afcf68611a32951a70ef5b0e051f442c5c4397319020da1cf2cd96e2f40a5a6446d3029e3e3539217d613dc3d0ffe39554c4da15de4733a59910213cf1f2fe5cb09c8f44676a89661081541bf11a0e96c41ed31614f43c60ea96256da9ebb460375197bb5d788cd17177277f3219d017f3780b9dfccefc362d872adde49b8358211aa06ae8094b4be76c3e5559a42e002afb08105c7e7b0da90bb6f46aaa732cb72034bbd0c2ccbabb8822062f623239b1cf54d9fdabc1cfa748531a02c18cc4418bda15dc4d190836f25afb7cfce3aad01b775ea7fed7626f6988b77688d70807831be0d6523a1b9dd36e9b0819493ccf07f709211ec4b04994dd338ca65be1502f7d85847835dd3b52e74d9a626dd5f5bd5e4135b5909f7df2dbf60dc4203566b78a6aae68143457984c7bfc7f565e8b62336da968441952aa0968c0892fee8f44caf81ecadf0a38cc258cf4170cc0d921fff746e1e60511e4f0f26f9e8ff214fec4979b459c462717fbe84bd298e127204946d4c8814a03ca16fae0aa482b3d0c00b0ec8155d06ca154f7c95a01abbd8799c21bc41ad26d8105eadc56637f519606a9da2711904f91bb2035544f05e27f77d3e27ebb849a3445282b4ae7d89ac65fec2ddfd96e180fb5ce586b8bd6e0306ce1f39e6b48d1095c1e952ddc1d5ec292dfad50b4520e45cc66fb45bc08fdc1ff5414cb33065928d432e2a74b36e6b227ec2123aa247a598751e48aea82825ab9940ead19a67bba35ced9623b0a7abfa67a53ffc3cca4736ef7dce31d2cb7252109a9ed28117fe705594403b483611198f0098d0832d4bc0ac0aaf85eeee347bf1cac33652dadd6ce3be935be88e5cf85b80c75803e525be2151870b4b04feb1b33e126dae34cb017db909e62024c21f339245e33d965797f5cecf3285a4437beb80e6f8e1ca69c69a303e6a7d7df306cdb18f02ae9573e67ffef2bc1d408532f11fcb689be01c34bfa09b696f0e6247706b2d46c576ed12464e9bd8706e368f6a873a2d4b2a64d454869b63535a9259d22b8b2010cf35b3ef5a25482d91f9e9ce33bdb76e1dd61dff6ec8d8e8e6f596497f331f2ef2d033b18e196bb33031ca82c1b0a7732ee27a26a5ae3a9e482eb57ce2bfa46e766f2a537702b39fed60ba2eadcd7e08c20c8150d7b628c1d2801fb2d28b505dee44f03b915bc0420e192128446e9b8d9bc6cc14716b04123aac4da1db10938bbf143de0699f125836cda816421e907000a3a2c81f575d0dc505b7b07909ee666d3f6bd86c371a30dbe0b77f1357ed5e9525be021de5a3f3261ee66518b1d17c6d28f28a15de586a8214c7a934a512b7cdcf765919a06980c27a724656b2ed3c53837a7bf2df4d73bdbc514b2270910a1ef354137f123e351e8ac3ca9f778234a4b15c348fd479dad359fccb6954f8d40d53dfe7daa5626ebed253687f9a40e3e555203a49385e0e877022a085ccba941d43823ca8f496bc17e3b9b6637599d879c15f03bb757a8d3e915b70e44246c8c354e398566a4b9bbe215f1ad7b40d70e698710753365fe56d301fa311503de0940a6c718f80e19c163ddc3c68b01c4bb03cfeebbce56e9597ced7cd9960f08a13c6955ea0d3091bb47b896182f436c77b4170f734fd372c42d02c36f90f1f13a73be6c636db22c91d7d0f40b31aed828c284fd077f83a07f2e685959cb50a1bd2bce93ebdf3bef2c5b4d640758eb0fb776403fdd260f7b73c746c6010fd52113adc052ea2c73e4721b576f746ba2190d18735d5f0c1e0b8640c490cd2428782241bd31c81c04124c5e149bba337aff10f044dff3f85959a1e00c4127d1f0aed42eedb9ed779381a26eaf7341781cc8aa45dc4e03b3676cadf0436076dfd5cc10be7771c205cb3a5d914e7c7201307cc2616332f606f24c90b89476221781d9bd3784e1ad8e514463101a40b3985d24408a001134b69f023480250a933e99ddc5e23b9217d9d0a79e333a466d034bc60b09db75258e18957f901ea4301fc8e10f07c50b69afee6cf541d616090ba36d0d261de53155050d5b2fa8cd6381b4eb83ee49d409d8539a4f841839ed780d1e2d28eeeac0d20d73afa7eb0b942b050609def076611ca83996422636831230e35359750b3aced9ce633e0ee929e664378921e278d7439552b1c4289532a1b5c367ffdbd0071111265e3d39ec8b7a7988ebfd4662d514c1eb885247df61ec43c7526347c18f635c838aec969e22afeb0017bb44bdc258d50f0333aa9b7abc83f5facde2673a8c62eece924a86564d62a7f6a2061006d778c30ab17b51e4d91d574884d4497153cc6e1278802c901b88866efcb1e3095953118512df89070bb8f524d244ef9a82420c3ee75e1936e202a4680f70bf32a60e005c9f00cc4b1afcd577fd5ae21fdf6bcf3b250cd4b26a7b0acd25692aeb85509877a006a118cd9301274e40a96633f0bfef7ab3e56a7b99be8384c4ae9cc0c1e2be5d1991d6ed22811e0d1bccd94578e443307bd5c8dd04ca7474aad3ab1d0ae51a1d5f23ed42545b428216d4dedfac471f8e8b2b32576535863f43208165d3aa712a03dfc594ce997df55648dfc734ef6cdb0c6f12b36408a32cb61d865fc337adca2b4dc6ab3b43b6ad06b043c6b7e41060252acfb7a84ab2822c5222d58396b44600f6594f415fd5f34c9572a4de2ff565ffe3d12cda039b8acc48be8dbbcf70e6a961e44788f7c10f507dd42950d70131c12280d9a13c468cbf86c05112e8c7f14e16d15cb91264493bf3d11db5e41e0e946f4488a6fc9bcf2c9492e730eba3b1199e86567cb9a5e8357cd147b75f3342a05385ff914b829d3cfb9a17bedfeb6c30806dfd78f36c3665a23c70fc4f28160c55ab070931e33c164242ab64cd876bbb44ec1856c8a179f4ec7a602cbce5d201fe1e68b6b7a6f5e4f1f169c9bc5ef6e3736d71bd402dfa0ae2f3dff0ae51bea6d446ea41e4b310cb910e1b96b45a54cf9457ce5664f601cd0d0fb5f02e562224618c5552c1f2d5f5a9038772be62cfa92f12f8c93be5d668f437a9d343db45a22d567090544b8c8ac1377606e05fad96cc06b7bdcde2c00120d18541f6c97049be0d04a4a7a77cb16112affa243737c0f49bd2db23d608c117470fe44e06eb419e1ad935c2ecee9312fcfcf592d3b54f2e3913ca44a7f7cf63ff1061537bfeb155e3b7ecab042a585b5d239f311b6f6b03484032383fd3548b634f630d10f1c169d266716cd57827c59deda109f7ac3afa3022bd0884e47718d9969085ae0b9b644ead6b0d492028d72422a32250b6e79b598111bb60746191cbab90c23b9564cebe568394476985195b8a4c850cd3986e2b25d659bac9397ea0570ccca0d7472d8c27600bb69d6313a8ec4539154c76fc0fd5b5eb792c2868c062acacc6196a0b1fe9ab798002ed4e741235465169a8cc6b5b557887e556d69394176994a3f5efdf630be78ce0485128c2c5b5aa715666a87d6008cb3cea5081b5f60bf1bc1162345f295cc2819fa42ac59d8d07aeaa532f047ba42d790c5ef28cf09bc7aee6eb86a3ace00a2c18d0e4e364d64f66ca1a67b7505295e3e6894ee2ae1ffdbf9b123df93d7b4c28db5cbce3c3986ce2de43b760871cebc39d58fd7fd7a27b38585fc127843670be11d01c8f61dc456a0f5789c5c80a17615c54672b14292961475b7bf528185e36e2b56bade7a9c24584dd44b0ba2302054903f4ae0dbeef818d8dd12dd22affd875911106fc08cbbd675d4fe7056f92f78cef0dcf6968b5e1557d2c95297339ebf3ef766249004818dd5f143252f6b07e4ea01857d13063cac5b4f5f7d6fbf5b9835402897599219f106cfa5b49c145e4b79d7f0fec1ce18205b9921980ca1c884e4a1d4229db3f9a280b692891d7376fee6ea8bc633717513e146dc3d0e994a17c582f560dcf88514cc5c963d34070681c9bfd29dd86ed81984eecbf6d5f474c3407a08ec87ce50ba52183d2b605d61768ace41d03134c593aee79d401341bd19eddd8b003eb3e125ba7fd3ee32d53c3fb2ac75f7de51a204d7c7bc93170fa77e3643f8465227cac95dfa06e01c0ceb5fc9d0db8f204411ff8815a67a71ccb872b243dd4972b85227b52d42cb9c72e36948b1ef00a79a79e64847d760b4076499da43b66400e43bc3787023eb3485d8ceb7e62cf6e4b36e4b80d4ebe04e2e205626c9f0309d19dc1ee06906d964e42ff28fd411dc682d43b1da434063b0cf903a104d3739a7e7a7bcb58e8810adec5d9749123a1b9276be9bbd2971858c5a28a83f53d7e9a1cc430f3047042b902ce60f6c07024f040e237b91edfba0216c5e430c547ecb2b462299192927848c145ded715906e13d8216d401175b5e1054b57cfff5884894d3caecb8bb5ea622412993e15eb47c9f410d37731bfd09e9d1a2c8928d70fc8ef3a06c9764061ad311eda544ae977ba9e97b1870926d5e1e31bab85ca2e5616a2447bb4db9da5d1f24fe8403bf3c58fdd9e4e971e138a51e1361bec6cc41e1c6f4253b442337e776f8e0d2b706ffaf0ba0df3d0faecb9979e54c6e5970132815d1cd7f0346ab447afc48f3d72c7de843bcce85a241a285b225bf299d24d59ee75ba4f9138aa0ee8bad7b79dc86139f46bc3755c2406a0447635e82fa5105a0bbe0403bed75b550398b1cd74faa7d3e74fdbe2fe8317e8faa1c8f0d098b2fe7f40e33aa098e5513f523819e991ff7406f1fa766ac8b4ca26abfe51a4349b0df3033d3e5f03b1ca45ee56e22514d3e3f958097ac57b470c709dbd55d200344f0e10fc5522a02588bc77f272500b8ae9678cf1363a2437777f7eef428385e38b796e06c811f8aa524df2f30f91fe8c4ef99698f2ee4cecd3fc567b61de49118bdb2545df5692a9f2a0694302107641da567de8f60c7acee88e2d49fa0cd62715dd3e9fe116f6882e5ce3c993f6fb11542649c889ba37457dde0c415534b48bf227c0fe187cadb1cf29696d096b13648613021ff5200ab95c93fa4bb97f69a7ea60b349caad3e8a9db10217ae9648a236c3b1d780687b924b56004f70157fe2c4301f6840d4317d5f99b6afc8a021332dde5ed773b7123813cf2535c01d7ea34a410d42c2170ff0df8c8d1da0b0267f330d0f07163858137ca571e5f2bfec54423884c1979e5f4de33090497eefe0ef10f8ce4fb010d48b4d81ec474d25535c75c08dcc0992a9fb342dc61ca985d6e98b46a2978b6a0f09500a9f441b743a23ab7f2f4b5e1b76629a2c387c6b9990d66d9f94c7ed6c8ff34be991c2a2d72a11ab1d7227df604ceadcd5ec520a53971f7eadaac71f3edeb307c5caaa2c74aa8e3f435e46d48ab6fbc4cfec87cfdc722a8615ee7f690984af4c4753e5ff7342022d99fc9185c039fd18c34001025ca9614d8268d812f50751e117335a63fd7ad53ec653f0392b5f58a158eeaaebfac52b9a9a1fb86429f10090dc72f0a23adb6f3a736b4c3af3af7427370069d2df4def37051b09a5cec9231f3e19910351ec38e9474d8bce3fb1ba72077d25fe33c917ea6c64b11e0b182457e72f24cd6a359913eb00973e37ee9049716ec8b81dc20a7c77039a1709656a007cbc9049af3ff87f068c56d205ed5f751dda3948c5bf30b5cdffaad7ef385de2a8c9bfbf4691bef641fab2d1ce3690bfb2c960f65448f15c1760cba8e61965c4115c987657b4544044519285bd5289ecd944250af2e5b53bfc2ee4d01691ea705f8003b80b2e2025b699dd34f7c8b4c7395170cbc61fe4182572dc98a62754ac3b3ae8cb89898c6d3fdb7d27a72078177bfb2982f97de6bc39349d48bf640b414d942ff8fa4cffdf881e59a6f3e33ca346473877b28823efe17a0e2888cf77f73c95c1878600e144396a59f803986a34433f85f21ac60478c54e17802af00195b04584c0542c9964fac7656700c7699219eaf93b59c1ef218cb7a097cc4f0fe553ad61eb8d589107713e653912f9a18571507a9996014db0dfbe91b697750badcad4404f580d30f549d641b760b47ad5f37af156fa0c87ee6569d225b3e95bb6c0c30a35ded1def52898e12913835c49466f47b8ac6c03a3c7c24c2c473369c8db80a5e5472f03d1b78a2ed752ebafab13376208d4a92b97acd1e5137bdc9babc315fba7baac074f9db60e084676dbc101db2c8d9c496691bd9d8621786b5b262189f3c35fd2533882246a0617ab4854b9628c912ad61b5ba22e189f666810029de574805f284d5310db2b17ec125e2be2d4695aa6d8b4bb028c81d56d5b2107de306828e2365e6aede33784ed348610253aad3139d5987a85c0ab0bb3cdf8fd8d72b6010f85ee43c1447895449826c92a9b3f5e0b572f60d4d17c896346fcac51b446540f9c66a83506d59116c7a81f98ff072943e5e13497c7de96a34c95dcd3fd00680a032c5ff03235c28e4772da186eedda090816c075aab87c9b692b54bb55cc872743aa309bd0826ed1a2eec251f1d9b8874636ca1783f181752426ddb0c492f78ee347e5dee6a3de0a5f829eec8fb30ce22aa91b255973ee5605ef3f5a533a01686b6a44607e805a5f0798389051631e4539d77b4635250b6895ec426209aceddd647d17ca9f0129f8219756e63dd136d6fd29b1221eef1fd35b86ad70efd0031455e724c3520e95fe35e7c1955ee69cbdfd0587621cb974bfe0254a2b0b8e8b36c61034f49e8fe499ccf04146b9889723c1d4c3ae376b5053aa32df3c67cfcc6a3f600e058b6c5ff06d199ea158a07130d2ff2ead78eefcb74313354a0b790fd9493f7c9d218d4e2ca0cc9f4d4217700bb7ec9008e628c014333214fefd769caa6b15446469daf974ed710df37fd3ddddf805b1678a02e39200f6440047acbb062e4a2f046a3ca7f1dd6eb03a18be00cd1eb158706a64af5834c68cf7f105b415194605222c99a2cbf72c50cb14bf2004b0574fce90376a8f560cb58c0168cefeb4718e69b8db3029c313b54d7bbd86a936615c2704615d5eef2f886681bc52ea8734917e15e89a33ca8ca66955a27be538364824ccccd0ee8697ca2e78eb88001bf5d80c4baa281393fdedc7ab5545e03f3eda6cf25e0a66a3ac468befdcb869f71d29b9630721eea7cf500e84be2cc1d2e1dca87e0155efcfd5c326ed772a4ca3154d2d64e9cfef8c6b98e7e9c57ab17a87147f769cf7b1907d08a67aa426d2a8440c115637783bcc378df9e15275d7be984c9ae41739d37109deb49e4bf3238d112d0d42d965fdef9df6ed744d675c267c4aa0cf5a637ef7e20df86254da66dae67ac82fb6de5b7b049c6aaa9e96673a9bd73a404cbdd9ac705d19cda723c4182ab9eb25b82a7dfad448198c2d4b21835eba103ed78f0d171b96c0e82d1664ce44b31d2cc6938cf374c0a121e2cdb1882bbdc9d1e22041c04c7f94baccfa6f849e30074dc85fb0ef4eccac72a66640d16ba60d0156b99e3069e13e4b6d190cc29ff8518fa7d71075c936df855f5cf6e7873e86d719a24ceedc8465a3f9b96411afd2a2fb4943d50d4dc5e464f7f8fa51e54dda5a142372820b30b2cb56239ef83687a29797eb263f4240631754827597ef9bb1932f84387560adccca6e9fe3009ce0fa6d79162c94117003a460428e420cefb488530cc74e41c25da827745baf4aa25285d80e0f93201d6d15017f6ed9a3128a436604479518390a6d6bec2d90a69851e59a19f6c5d80e497221833ce41ecddccc51b4e0d34cd87d22214d82281989a097a98009b0a10d3ec1a79421ece4e65229fd64b88e45685ecf31e081010c3ce7a3eb8b72dee4e0f40c7bfb45785d259364515cfa516bb0547a82ed53a2e57acd0f4a8156d70750145a8500cf10f154488534e3cca1267a082dfebc1f930e0bfae5adace021742546b4adeae83c0839189290435608de8c22ef8c940e5dedb7172dfb52354691273121db03b7850a9eac954cc2c10dfbaf49c914bf4887ec46cced1ebc80cec81e7ea9f79165725f49ab9550a93539e5ab25c17f83f499717fc02ffd32e73f80d1d454e9dd198c6f02be9b8440d91204485fe2b3293a1be62b9cfa80fb92232009dc2b992ffc59a3938daed0ced622c14e9f3199f84396b21207578f61aa01128e3e35efcf366361c3bfd61c9d54f182848cb8193a37923dfcaa4c12aa5762bd28a17ad404ee321259fd1b50f37a05b0b3cf7e1c353e95efb12ce4f11fc0cd899fad032e174c4c1f1eee86541970e8b4a3108b88337e2930f8372414080ecadeba0bd7e750793beeda3b1e10575f22f41cf6e8477a22d5689b701664ad68e1244263fee5f79d87e9548bec6cf46f39dae6299c3f525022ff6081c1c755f79bc3005c811254dfb6775687f6513ac7b7cdc852af5a0530965d10122d264ae37f23b99f6754af6852ffa6d746a56f +MD = 810231a63c06bce7f411f1b8ef106c364564a4b90fb9b9b275c0749ad3c83983afe2044d1844d8ef76c03a1acef7c6b3 + +Len = 69136 +Msg = db321b040f8c684bf2fa16954f6d63fd6967d8b6355f1f95c66714cf090c1e03b27ec07b76f16baf7b42970a0dde12f192e09702c079a2990d95839967bbb1692635623c3f725896baa8fe0c66bdb34bcb68665b60946325fe056c33953d0cb81ea128d0d0d8d70897747421c2d4f111fb486d4b7d77094081fef826f95ad6f881083bbe93ea8f0efaed20d389e9714d0cc9d6597feb3df37eca4ff9fddab83139b3c28eee7229afcb5c2ba923c5de06e531c60eceb8a745ddaf98340884596c2deae6c94b364cf4f209bc2bf830de456ec867f0d2a6ee3e86f6fc60812162b145f5cff61100a1e3573cfce270f219118fd8e189f47cbbe662e6a204d2797a06691ba49da896d087e33d1255f4d2397230a75c619a04b54657c9b2a862544a7581a58e4678c080e57c53270dea99e370397efffe2e0485654ee556d4997a790575dbb47ae94859070bc86390bc0fc11492a5f2ea1645d24b3084b411dfb3b0be2d053fc063f505f479e2ed68d0fc7b6524645eadbc8f4501e3ecf4e69cc697a9926b56a14e8e29b4aceaee1c9028b96bd5036bcd86aa868e51653fdc387cd5cd8a5522a412dc70508e278d35635b222f8ec940d4de5d3cfa6039bd7a1b9d1333fe0aca5117a77fcf06e3f33ab05c5eb83800064a2b710f4efaae9548aef1f8e1d7d37730c5b60139fb6447b3e1f4160fb9eee4b5d4afa991060ef0ce573f2de1fbf851ca85d39c9657f4b2295debf23afbdb039f43dcafcb6c9ff5957f51593b54c17fa6bdc4f8ef01d95c238c099943e4118a8fdfc3cc0414aacd248fed25f5c9752a4cd752be4be15b6c29d615b4315ed7a20e102ba645e6769f03eddc3919415e7945394596b3dfc40bc3a3d9ea0d507473a33edbe595ca4d94bb03e53caea6c295184d65272ee35a607a5b1be4dea13124d6d19c32fda875d4d338d2d7bddfeaa54d797a1ac4d56794d566a449ac3b56de2f31363584683786d3f36ab14dd41ed26d274b167d9d31ce5d2c3cc280052bc837c7719532f2dbd2439e7473666da644ffbea1c4622301379816aaf761e7f70b75f915fa0f2ea9e1aca0b9c41092c9228ba644cc7a501ef7108ab88f57c904ce7130e90e2404e9db9661014d542bd0949946fcd5ce0ad2354df12c336a93983ab4d5b676785de2e8874913b5392003c4b2089187643a6319d5b4cf8aa32dfc77c54e44dd131fdd2e09c0b9a5c859aad75d53ca8c46c91acc3239693d098078ac2c055be9fe3422d8a32eb9c508be0df8239070897c9d3f76eceac2f3a47253017260c3424082f90cdefbdcbc0138744d8b254b290ca01a3e892ea1557decd79f1ec94391e1f3aaf2408fea33bbad26fe1d7b231100b8f24d936cd00a9bd74aaeb8a7a57eea6e7cb45352abd13f076c3461fac0ec5fcf11cb920e15bb0719f555c962afb062dab9779fade73f942c8e17e00aea6032ccbddf0c7b3910c79c20bdd8622ad05121a766ab066524c206d4ce2114681580973fb18b1b04b0e546130e6d0edd85c02a8ea6ffc6ee29d27b8582ac7e03b55118df6a96563d446801156f10d09278b5ddb86223564af6cb75eb5a0ab283e5ae37e432b694ae7359b46f084a0f0f513b226cc0a01c4132b5db4c7fc216b04f9ddc9830713d1de6bf476a02a2341db757e1f1e8fc829a859895f1185c14519b29ef418d52b95345a2a14c85a1a5845213029003c2ef1f997d8a224e6113307157582870de7018370bac5db8cdcb0ccb766d913977cb96136ba42749587b137731ff95029fcb3364004fe7c4b10e7dca880b3cb1a57dc89e6bca4730c9b3c358becccf6b1c306e758c7230d1d2d79ef652c2d894d36f7de084e4cb2b3c2508ba06a820d2dd088f12b4fd8106ba8c38f8db7baf098a087d81bedbfb643a38a9461279ce5f6bbc5fe282d9228bf09713772c1f073951b08f2a21951f004a5470a3e929223c4db2a68efdec5b89fc5ef71c4b94294cb0cf7d83b6fb7f2af5e12379939e648e0b542cbd2d1f7428674bac8f42c45d692fcd0d3384f56308c2478b7219c2dc802e09b8181b5bb48fb7c4f9771995ebb8571308e3936c12c239ef7034827bd2373d381447ce8665e77733a87dd6f11a62af07353aec46d581e23f9a67d6b38ddec04b06f14e89cd572cff7f4883bf338fc0125ee1966df46d46a0d0b41e51569b3fa957bea44d34086090478127e77e66109d497f99c7b7adec7bdcc3613d759643bacf58d7b9e4219a4ec7cfcb504310290ebfbdfe3e656a5c36843ba75f32f953e63564efb424cb63a1c9db76e4cab593ce8843ccb948cb1f3b91c4f89fd4e9f895538df5283b2e42f1134c308a5a7bd4466cb80b1fa6f9bcf0ca085de5a590b92fef78f0fc7271bfa66fcb012a3d8d76dd33c4c45ac81bbbbff9acdd19eb161e1cd2d0e81811bd6228a300f2adb91101faa410fe51f65aa50fe45b8123efa3afc4c43be6646039b4df77920af91730fb078944c1ec78de014754bb50ebf95df5908c61f0c8a60e3c34b52a52f79f11ee6ba808151395ce57d111745259516f77e6f4ec112c2d63828d236fd08f98dd618ec90203ae96523014e32f8f563effbd2fc2814e783b610f538b0a8eaa4cbbddd8b6dd92a5c3941278929410c8093650d4bfcab194192f6aefb3a2942e01d4e9b1363fcbe064b98865e54adc99fb3bb73bb36f41680ff71bc763e0e805004f0d8110d1b448c1ec1743a6fafbaf5a377ace661806dc64deab45656c94159155d1b00d3a58c32253497a9b4b76f46e5122f49f6c09d9620ea1d080eda048fb0ebea6f522bc3ace16a5728de6544e81b23614281351454faf85cf7b0b128488a15bcb9033ea960e5eb39443729da7d9813e98c7b6e60a74e8e0ac1f6ff4b37e373088a513e9bd2a53fc46879859e6bfe7c3e745fdd10e19e239ce34c14dbc26f7c643fe6ac1996a1c07f11f0091f37b0c4c69698f193b86c5189d82a82687c80aa46561e17b1115e25cfed4514db655176186fd15c67702b80581d0cd86fcac975357971f1d0c75cc84d36e33931795308aa6c736e1acd6e389e2e7d8750319c7598068cdb274d00306dab5506dfe82815031919b71c14b6f2b289070fc8459c240479b933f306fae6a7a714de253652f3a8f21eb7e9ea78474bb913d2167b2af8f16fa18ce289af6391a69d5fafe8665d1283fcf112b3249eb04b2e9ee946db6cf544b0566449903fa24668ebee72d499b65b5ef305036e71869bd196bf3d10187685701106cb3fc35ff302035f6a20322ac4af2e6f5f986835378779f6d28b53fbce6b5d388310973138f3468142cbcee66c5813802c44cb52badab92e8b8fd80b7c0c9b7805b543ac84b725d27159c85fcef43305fdf643557225d4c4dcbffd0c1ace4c43c790215862b811e18a3ca71d490e1d5f492f48b41a034d685a7e3ba4273ae03a4d33e89b5f80ab3d01f6f3a5870022fa92525404feed8377794d2c3a2ddd17ba1b12e20bd7ab42236d1b266ef564f4767df1edbebd6f2770adcf4754ab2f234195afa61067928753100bc7f000b6f24140a08e47c1e2a9f28c67057a0babc37f617cbd4f8bd0db4abf5b40df5580bce9aec0ae36a8f27b5b8996ef10dbdd48b1e30c902fc0d0ce58bf9c3963503cb4edfcd4d611cf192c4a19e18ccfa82e5387bed1b727833cd12b95211a428d456abcdf7f8e6fc0c12d1cd1d946fcdd29547f395eaacd6f5f7421c48c5be369555ed4bb134f871a750e6235d0a62f0758cbf70725d397c1c327e9e25086dc70c6f1d40422921e38cf30a8ba8a32ec93373a8d9ca9da0d47028cd262f013743024d4296f3fee8ba81a446ed44865ac2d4f20b16e6d16944b87e379db0d9a712409764340cdcd55f4f0ba1317add6e411fb0ef0e0e221d36bedfc4e9eeb7429c8bf48b02d5ea7138becf234092cdf3b0dd565cab8ab8431148f17df332c4924aae0cc0e8955143ae9599d400d4807076d68b5ad4a1ba633d1f5c69a3c3271e826f880ace9638d42a9e10bd5a881e6dfbd2f8f2719c5006220bc990e2eb096ead9810729c1ec8aa129fdde536f5ce72a799452b6bc3a4b328d3e0fb96f0920b34ef4bff3a76284fcf61a7547d64b908e2f2190ea85edbf2b74148b1a81be97c7d3de2b990e6824bcaac1713151d07b614a71ca111b5204b371baaba01b43749f2497ca887b5fb246a47d529e868df05a57ef7ee8e109947102aad1f8703a3fbfaddc2d5052dbd6416fc889edd8d697cfd4052fd08b66e6daa36fae7244f5619fcbf5c47f394f0923891d87bdbd3cfa384b5d4d465f0c8456d07381abfe2782b62b8f1063a33bb3737cf6fc7cc843602a3a4267d8f06cf58c26410c1400230b99390291bc05247da7b7ef28a97e6c822c0d6f0006c40aa2d0f162ae38ef8a64cf70fae8d6f39bc036c660ccc2442ad8a4514d963e6e5824dbde62d88930c036bf6fd25642e2f413b724e63965bdf0dc2982489b0e43f7e3e3599c2b836856f9ff82139a9e47dfe08f5009fef24070f5323cea9ef4d94c78adefa907c5fad116f654490637b6c1cf55d4269e06700dbc44cdce1260b2d84b81fd040dbf6ca1263a52ed29ada42c38712dd69700c139a9d7d14d85f0552de5162e279dee425990320a7a856e9471a487c9946a7fb8874671d4037a1234bfddc0ef9e48c0f06cfd83f77baa090c54abf033da88d1ca790a89426a5f54d5f08e18bdd28ed60b4dc696865af7fb7027a741093392b57b717eb498fcb616bd727e94056ee09bf79e73e043b2ffc4647d3f009619e88950230b5a64250f065fb847b972cdee9159b18e07cbfe41e25dc7dba587082acbcce04901209dea72313441ff7269f94486398d636ba73ed3d099f5a63888ba0b664bb03f5aa1a908e67925dc80eda1242198fa89cf38771741662599470616b690c7c97b8eeaeb28c3f94be73aa366ce90525df1534c6b3b34aed3e52f2ad15bf0e6fd2c19d421506e272c95ec35ca9276f80020843d8bae3ef699104d417a79fb1bd3f797f7dc2e5995507f220f3d1e39ecb99dfe9668eea4bfddb14df4628f03e8e63485b08c00fac65fe978ba4ed05db2c2d01ee1838b2a6d2a2e9dbe3a09cfd09c897fb8a176e63c938b6ca1703746ecb45d61a95bf214a0f71eb9095188a3657f5cc25acd0e905aa3db5a6f31e1a9fd169c635862b217eddcd82c60596a2319f7251a216f267dc2f93fee7e143deb6662139069285998964401644db25cc350ac88c3a6f85d22e81c4f755887ca8fab1f6975662d470b4cb510fd3becaf08cc07ee7b460921144c7580ab791d060b4db6f48ed9d2090473b89d53b568ff67ce81cc8da901f0c662ad59ed7a348ef2c0b15b493ec71e08adb6ed0444c7bc64eab2a9972a837abdcd2c51a7b67ea3baa6a6e4410f7d048c4d48a69b54896494a3031c1454fdfd6ede6afe86c84c02d7620045e2b6544b03f4d650658f1e965b7a0b9a81b2e2175e28e1c6f72a3d2add7545f6caddfd600416f8511f3f07b03df2248b6bcec047003f49317546c26a4172f05d45f0c8d20136174f04fec550c08df6853ef3290af983d9c48dc86c6f87cd88000069571f9fd4cba0d348e7d667bfea0e77da8ce1ae994bf6ad09aba934f7758566d218a714658ddce6a7efdfb80a878da2ff5c59a3e1f85e5f94f085bd73613405b59e17138ac679db863ddb15e057994cbc27e15de0675221f4eba3a5e3b3b2497e47de21971e0e1e7e623725f3c2a7e19b6ff74127218870a3fd8172aae576cea6c66aa32cece01bfaed925c97614fee37a52a0228bf47d81c868d984b8f07f1c96a5b3cbecbb67086406b2e5dabd7defb57f805678936d4e94746ab4818dc5f50c41e32cf32e7a8aafb300fb91af6406108cfbf5627dbd374903b10230b6a63d7642249c0ab0a20d38e7f953c27219f03383fb497038d705901e96b6edf48abb7bb15d6559c84758a6aa8434968c0675c56b6798cb4e218010cc0117e2cdd938c49576cd09fed134a20489e83587915d6f4d262b9a47056f7215da6e34cbfb7cf9f6561d42daa969d4fef1b5c6eb246fd830224a06a9e99b5d0109030e76594fc1dce79c2be535bfe39fa2e4713e2674a81c423d37fe37cd7a99771e96555979c4501094eda6defe78f085bc600aff35891a6e4b54cd56cb71e40a07f4f064c1ab59b94bafa50ced3af78287b8d6167721308ebd859fae5de9eaab0551cfe3f01e00ca0a9a6b2855d2be828ba42bd50518698bdbf4fba74d8ab44362d57b3ccec44c2c19d67f98fee74d6b124a90a3a617ca4bedc669a962fd49b864a77bd9234645c5c08a69c6b022aa2762d28de821c65db73b26711c63eab2f454f05720b74bf37e47dfb218332bdf9cc365aa0d3fcc29b70d3a9c6819f8f5dd7ad7987b527c5f40f5fce1f84ea9f4b47f2b7078c8d23634aa2a71f54cd01c5d1d85c551bb8190f114097ecdcb44ef55dd4b6692847f8d145b1f792cc31a2e5b86216609bb018e7aea3012ff70a5da6924ed15c33a7c354168413a73487d34befed4030d1aa562c4c09724f60674bcd79d3b0374b47036a119b73e33a1a13570cbc625c4a01413b6dd663c1954589e87905aba0bb804991eb5aa0dd5972f3958351e539614f6a9378bc6e2d224fa87614475c2f20fe0659f86412dbff2cf495e860516eb40f52d3110df9f893c027f4d03b2a18f81aba20bd2a5285b7a286b6a04a2f52beab7a68bb5d8faa465178f331339e14cd50d584ce2fd8610f7e3a964f91e78bedbe41c2dc2d97c8c67e1bdfbbd330990d5b09049fe72cd4530a70b34aba0270ddb2597ff7f0caba90a0a138d49c8a2c2473952ea6e2c8764ee1d98c363518b7eb22220e833971263163799d1ff1f334cf453a41779523bd4f9ed58f768582b7a2782bed328a23623521256b027614495a4a490b8680c72fd19be53b904de8f6a03ed7aa5a456a14f8743521008b55e051ed41db58384b347163892f27d0b40b40e0d5b47f0dada517d7295dbeb4408042c8c53f612df861ab7041c881c06c5c2108769a15457698ffc4628f71836cafa94743b645d4873dec5caf96529f8a6fad106ac9b17f5d773cc67124ed7b22c4f1f33dce5ace503fb0931326fec086cc618302d1e83dbaa63b47e5bc670e0b76b95723f6246debdd948e2ce90ac5f9e8dafadf310de326dc97e330c492ae9f2b7bed86ac4745c2ae04d85d5afb324c4b65c26065b7121a50cf02d2bbe4ff56599620e67f17e87d079dfc150b3478067abe8436fe584d1dc94d315c30c252b997a48bb3ed3ac86390ac53e4686b19b0ed31bab35985f6a99c9ee92d91df5b415c33988f5514582edfdc8a5bf0f399c4196bc07605a491365130b4d77d806b861dafd1c965293a272b8b09ec33626ac885c95fef9158cf4c7daf0eda425a25e06295c2128c0dc0f52a545d05be3c2f26c8d6c3906b06e364786661b69ec0fce8b161e3cb48269f0152a4ee48efe539774910a5f921338016d7f357fcd159631780b0a174180826e41b19581656f22c229d13719a226317cc22d25c0d8897faf566fe95ad7a26fb160a1e050e61e779c11b3ba0f40d1a3d0cdf9fe87922e126facaa83ad7ed077e0f962f8f91bf49a4db6a05de873fcd4241649877b04ed979a0224a0b63ff2e323955ca5230cd7d2fca001e64d448f0da12686894535af5557e144082021f0fba4bbf7ae76c0b068d1553c1ee5b972966f8419cd8c2d5a95cfcf7482912db20788f39bdd9c3f68a4f55fbbcd59dd8db7b5b86818f9f5d79f29561cd8b16a204ffac6b0f83a91e5ce9046e4bb50b5c8b89c4bdd3534940fbb8efea2d02ae0231b20ba9ec8fbbf112ec99021af734b0ce04bc4dfeae412e931264e6f33a197a1b22259cd1584cfd30cc9c7d9736aa63f79eaabd501b1784c4818ceebc8c198835d292ba5a780cc12afb87273cddcce4bc9a389294045cd22498d067e592feab2645db78f4595bbb860bd1a598671cc16199ce542704519527cac7f91ac9695150fe585f1b96ba6ac670046f266d2a78ab0fd4788595c64c4299ec08a8b9ca293a5e91d34c9ab94d60caa7ea634a7678ed8ef3763c230b760988a51d3bce91816709308c13efd8e1e97e34bddba971509d79a3e3b7469190e1199bbd20726ff85b609cdffdf089b6c4fd233ffbe4bb7e5f625e37838b093b6dbf385f136fb5fc7c073f4557675c3a87da0c074096b58097db8af82d4ad2c403fbf37970f0f41c6d6fa052dc9eb0eba69747aa5639efd5db47d29c21007ec9485265a2b5c0bac6940c689eea213858a5b77e8f8938cb0c9e299d99eb666db9af54f7517e396a99845fe08ffc7952f019bd192d663de78355137477f8c74023bd66210c26d593f3b2eca08ca0018150570a900a8993c5e89477dfcce5cd6685d7289b394c1fc763b435313b617443d7f2427bbd4fe4d68ad0d937ff1ec3715e90feae7f5a926567eccc1b02bd2c3b158fd754ac45abaa089eba25852043d12c8f6ad334deb7fe8ed113c6891fb3a797644b835de752a0e0628d210576e9066e06ffb200450b033705aebc15158549bc3401b058c1646b90a0e4a2e6af1d9191bc1fc3582a0613ff0eef645d1b2b721263bc3413507b6a97ee3333af254c0346036d7fa30a339155316867c7ad00b12867bdb71400e21e64bf0b4bc5760ecbe9614b5f77420e1bc831ac3edb47cf977cd49891d17f43079577df63d00dd06bfa7a4bdb5b7e1013c6642d420e87c2857e2edf5ce21808a698cd221455793b5407a2e18bb62ac409ee6d5e19d7c9942baadaf490bc67cd7bed1365c5ac349a247f7faed91db4a46e9ea1d14edda9beca916d7aa5d6eaec1800df3cf06acc975df064f65c08c83bc2559609397684ad02a05ac424b81e0eeb82a4fa3d07ad9d50d8f77a8cfdb1e4a5b1de78623906e96486277395d67d8066e0f93004096426adb7ab8dd4632e597921dfa1619b9cee6081580b71b895fb2a8a4060ddf66cbdd50af5b2caef89e4cd241e16a024a336674060fe30e4d3c9a70d1f2f334533ed67417a7be8d9512102371e3ac66ad65c1931e6ce5bd1c3965cd7e9dd9c8c662fc5098e6bb6e71098c8e954901cb492c9d6d43dfe6b05f1cbbc89350e82125fef8eb1b5e4bd6f44b681a955c93bb8650a30b5eaf0e707cae4667f85348c9d9db714e8959944f869f4bd059618abdcc987a7458258484ddb7abb496ee20484bc1107fc81dc1608fceddb6caa30e5a83cdcab017897174e8ff95b753699824e2777d88c2f2f89277a1c7d7ce69451813b73dc88523fcc9074daa77180bdae705c75f705d22616ba6ddb1384efa5a82e51e79c3893a4e0aa16a92fcce1e0b181e775f4083f42675844d42e3339f731d5fca26a90a178ebf1d1ff64e5be85640945024ff1baf6c387ab823df63a0b973ea83ed83f203e571e5327e76a9b2e1e6cf1a57b50d9c5e3beee5fc34c845530bef10765828447ba7606bd17b9ec3d492379d9f6b41032106499d74eb49d6696dd43a6830942277e9f6949865246558cd34a0a5289e2ce021f4a8330acd9a252203c96b131ee701bf0f737a3c22de951d2eed10f40e5ec11555cee29c3edaadb1e285290aaed943b213d220097f77b20d8d4a89d779e2ec68d6d729a683de29a2db35471c2c4262496a7731d42578d722b980b8dac5018aa5de8aaf3284eec27e54a370528068890d7d2a56a3fb292ee61a574404db00c351d4b01d4729529fcbb7954ab29294de84b2b53780e9d1dce01896d65ea32abef622111aee5a51ea146bd47d474a0d893872df7b72d7ba0c981c0715ee05c6a41b2f754f2eff34c8ded828b216911db3b1266fcb82ad2ae4978c70aabeea1b9c4963a4630f004463b3665891294d0a8475342eceb6536a8c64d29a3cd63872cf072665ff9945c6e31a7d2ec187681d230e06e42d18b2c22d87544d743cd91365dde082cbd5b605709c8570eb38c89eb90402588fb0b079ef897c50fafab3468553f9c16eca3c4830c0e6e7b64557d56ddd92549d8436d9f9f1b16d7518b05357f2d9eb9180bdd64e0e085bcbb5fb0968231d9eff9f2d2874475a6a8d9cb7810441e9c8db0022f8f00e5494d1909e84d15d0bff5c067baf8714e110eb90af1ab4c98f1ff55154f63f49305971de278cd114c33f5cc30ab65bdead2737fb82648e1034b9867b3a186246057353a87e6a90cfaf26a8dcc0851730267718e617a8bba0415f3787bba6818d3cab1ef68b663516367ce85c8763e48fb4c73758562d63011cd7b07cc1e7c6a73bc77ace36c7e971c008c348469aea85bfe13c59273dacb92fe998623324571b6c8f113a67d7d369b593e2aae5705099af8bcef1721ec152e15f9842f8a55c7136cd884106dc1c857ee5ed894b2e3f54ec8e95291f19c85499005723fab2fe3200478aebfb1feb4e81c68bee621bde3cdeb23b081676ea45c1937e0d209364e534c6bd412ee8694b27fe64e0118156dbeebe6597407d4eafc0e1b408528fb8123912c94a877fbd04d854216740a6ceb9827cbddd83761d19feb2a21d78ef1f4177f3570fef2b1101fd926a8bd7d36f5c04b2ebe2c8a87e0ce3cdef537bfcc3fb56310f964c358acbfc7ee655bf50614eda2997aef85c9a0fd7fc44b341fbccc73e9398e988e552e93fe13eccde65cb176ea9684af9da98aa42054943b337622e97e39b10898391e32c821af91d5ad53d26fa06bdb56aa1658cb1a50db9f7abb7c9e7bf1139576e422d2b20e26476a94a6ce31a0f1254ddc91dc801193c82d2ea3c68adf67ea9128ca9a2fb919c036cc6a72d4c48fadf735d5d12046d2221fd4f582d0cc742c0a54c08b0510eab4749373ea0437154548ca9b5575713551c556f8600858a6ce54e07b11dcb5f7b8b66279b04a89208fb4f368b5ea113bbbb01d12ca7c049e46035470eb1108ef316eb1d252122b1fd1ce58b48f08b733e4629fdb4eb640b927983938634c9a3fa3201a244bf5ad81dff753155d5bd3dc504f77c849419d95e786074816d9da47a25d03d60a5f70e4fec28ae18d5de79373e91d5066a89ba30a4f3716725359b5a387f76e19ca25c7b2a268cfbb7962d7e3c1f90a0355ab6f0466512a124388f82b336d5306c03c88902965265458f638146ca36bcbc34d586a6dddf95324f89d9de1fe3b3ddc15d62bca089be456e2228a4b94ec1c8c020da0c8461ac17229049005f27d3b68520eca06eb86d80de735b9d16601721a59ed4c0821f4e9a58acba632129f8c1f61b10f52567dcbe855c027a06f4268f8c575d09fea1e48599e5124d8b728bc4bd55b705f01f72c70be80584b39355da1d545b312070d49e8f443a07c589f28881d6c716f5669762191c4c0045c40ec9ff9cb87e121388aee0d01ad9f8f697d5eba72a715cc7b3595702c039e410b925db375a39f912667c34929a0a4c42e073a3cfc65e4ec72e726ca14776b6febcb6582e2ba900f6d8d23490a3e4e8f4372950568524f3f071760101cafee61680441f8811184c46457687d41badf59403c09a454d0d72c9e22cbd2b321a9ae06d97d74df6cc088a1531d666ecae9aabac012ba3085ff3daea5e49266512fbe5ec762986c10e5a4bafcbc94cfc2f00c09ab1a8789d63a0acf2d24cfa4d2e30ac63abbd3a5a266a0f7d0c079035784e5b349bbcccf4619fc660516fb0d1b661bd3bfc3a71a95c6161e6bc393a7dd0ad04e4860da8f5a118b09da35a4fd8f1b8a1dd32493395f867c652a20650be81454412394313886a34f31290b4df4c285adfaf1591890841a3c8298717dcdfd13da2247d071695061a1626e0256914a372ff1b6cbb7aea803eeed43313e5c809bea7831a01b804bbf4a1405a57f318aa268a88016e0f21fe60c0b96ea3746170efd997d8d801bdd2e71dcac8ef8840859e075e9a534f96002fc741006f909250f9c3c87f34f9a8921d112bf0982d747b03fe0400114231d1d68ad4b01e4143ef03ea7fd6bfa9ae45be05cb9af8ec9cd57df7e4fb51f0dbb87b92db47598f5c9736d822a61e18b531f1811290b7cca0dc337b6552bb627afc4765bc8ec783c58eba141bb7fc4ea6a0df0e68997ed668d54e11efcff69ff7e6618de14a1124661cb626d0d1ff546ad8b033357cf510dc0bf542ea38abaf3bbef192b046de7b278b5297abbccf31e7228b79e102c384e5c55195be56819b2dcc21fa9349d78ef121b8ed123f15ed07c59867d4f3903a694a +MD = b3b87315402171643f4f2826ccbfa633607fa9eecdeb224395b69ddac04d01b1159034fbcde1e0a7fb3c38155ecb6062 + +Len = 69928 +Msg = cf183fb8b2020ced8090b342dab7e400f89ac8f285077e0fb045cb58800d0d0467d671db1b5666e0a1455232aa64833423be68ec082d01a9792194e90f9da279708219de2110cbf49caa1fd5a3d906fcd39431ab7cbf8289b0f1c0909a7a8e2611a59e8a6d3a22729a4783f36b2056a030a58cf68ac3e8f87e3eb716c9adbb5373c668a7a7db53a2c2a5e753aa4159686178df96da431d3c0b8ee043433d0f48be6ddffd77fc45cc3d4bb1be0942f99c8f9593541346089d7e6ca5deb132744c19226b5383a4e23832c14bfc2f2d1d83e18511f6ddd59165ff5d6db1ba95d1a9ac6e747376db112eca901bd5c609ad6680cfc044e2f7a0dab8eba182076d0da5a0d86223f6a9baf52d3f8b1173df908d93fb0708c7b41d46ce9da71a3fc212891de99d2cab17c5d682560177e0b6b040439250083714f0ef6cfbe8410b9cc79d4a278d563f2c1b19f15ee7d0b596f4c7b81b020dd820021eb88eccbe13041428501c9a6857f1a206a4dea4e499884469191e84df52df391adaddbc5bfe01e17457502d2c9e6c43e4c05ea07b359288708e2340464e5a7e2dfb711ede759c16c7864aac68b9a7e7fd7066435d31bfa82241b39d0a7497ba9d43d05b101fdc9c6a059281e553aa7497da7ff55134148dc8575503f26ba0d3b3d984dcb9a5c959a5fdb0126b127bd4fb26301e21e69b1da9fb92dac8dc7db3b7e61508a1ae6b36bf962cc9c29e24ed717d022693f15b410f53f18b526e3440f19109468fe3cb1b02f78f0db1a0ada940077c7570fa5ce24087fa7c59cacf64a803ea004debf0f1b449614501c01ceeb2eb26737faca7e685c03516a497550526633f9da170e29e1eb328db7aa57ba60d5288898aac433726262bc1fd7ecf0db1da91855417aa0c885e6e36e4f8d1b89a632b1d57a538bb6be063e62a2744639290671f2e8a4f213971babe0760270ca1479699b03d8f5c9c1765ebf439bcef11ac49d5f671d9c77b1595dbab86848a6a2551635b1c4f0000f2ba3a235d40997557bf0e767351e5947286f59711f01a3c26e5e520eb8091e09ae9397f3ad64908b852337439be63cdaf157494aa74a46172d985c9522af684367a52cf7989e710f889aab96b28286ef5cac06af916101f30b5ad1cf8561734eff6ecddc15e5bd63eeddc0db0971ebf6b2e41e1a5e046bf8802c4e3860cdc38ede46e6fbb5f8da2b3053137b0142c083ac860c057da2e88a34632e4a3522dd757cc424e0e9366bc7e59120114a63a90892083d1b60bb1c4a90c5ee8f832f25b5536cf426302cc6bc971e531845631a081bf14da6b7bb5b9c2d9b2b62db3130a11ab7d1362b5a8f8b9d61390a72bf7804a2c79a41d3223b114379518e9dd782db0b2b488b2b3e3ab780f05e6262d75780bef1cf77539e4f2caad6fd4d4b90a0b5dd4dc6afc0463cc2ea422fba86493d0ec91639b1b97dec40ac4a9b3974eafee3e985d81e7b112a3021dd196d6d93acf1699b857b654fb71fc02a97ddaa5501c7b86a0951cc1d7781d037c81589350beb18f82f4ee792240caf2d8fa44c4d6de3d260b6e423c9992a7de8a82d59abee5e4fc283b6d0c3b7899199ef17eb5277cac0107d3022b423ac7346362f6f76d8cd86714f1d8182d629401642c30802d3eef9efd8e0495b9b8a58f6fe862b144fbb558ade1daa2e246e0319071012bce6c2f855365ef82e6546a7615dec1d02a79a2575bd219b4416ca8318c8999c0f44d933f73216cfab1563e72c00abd5d0950c7ed868b3d55321b128abe3ca146862a4453c38a22060205480ad536fc5ec8c64da196d5ef8e9d9c46c39051c1c66c4b6949ad67baadc1aab1c6bd2826de4f245cfcf378d7666a386d646992a0478ef82baa9782dbf8d68da02ee0a9e4e286b21b85063c9ce58234aff5b0c5e7d1d479b2fdeba12eed29f63ecba680de7455b7b3c435e9e613cbdb33ffcfb33d6c261525ca108d5a97a32db3247877bb9ba47d4c41e9465ff92e74220a2d244b216c16ac9a6e0e08fb2a7926c1bc5423605b4a0c858b1cad9e9346a39c32e0b9f78ec271f36debe023a724bf2bdce0c0c962671e178133780ae39adf3f46ae2ef77462996075ee89160374a8e93ee337e1a11ca87f3553694604b8fe7ad1575228063d4f66eeddacdc24b206834c2533ad00b0d3460d442759e0e827d53ba4ce922d9db98f4081f07ef42504826c6d5a37686dc6f373cd5b4b5e7282d9ec5a4a3dcfc8ff62d3a2fe035a17c76d08845486bf99aa0eceb8ad25659d380d4d446d32d5074a6710087d733dce7acc8733caa2ef7da61f86cbc4eedfb371fac429e07828a2c2275d7a16d68793432851406494de61e3af03cf49aeb3fa5426bad04b17aee18e2923c171351fae4a07ce73c963768c8845ac8be36dc9bb0a1b98025418510cd7f5cba53597ed67b8f46696a2179d48be6aebc93b34093dba61c487a682f86ac414bbee0b05d906b574816f96b93ddbada5274ff90a5bca8d7ea827e75d8b447e0d5d649a86cbd2681187c84e4f3d8e7c7ec9e6c4f8a7a8abfcaaaac0b1f1e22c6818cf8b22ab14fa52e06771e485a9547d37564405d5203b6334d7d887148cf7ae53f685e1611593bff414a87dfd745c2bda672239cd7a6639ad77d8e6db8a076678a231ccd51a59e12b999b248d37bd0f1ae1069c77fe53087d5267d72e238318ee9b36eaf06e773feebdf1e01d399eb2608b9737bbf42b570b302e61f5a1934d1da93e4498581362a34753ba95c3289a122e7e1182a315afc1d9d48c184a618b6d94eee0b61f56d0b40068b8dd1d82519a926332b2543a97061402608067125d4623f0c8330c671387b0d9e5dd8fd65f5e7feca3354fc19742ab60e6133fd1481020ec04f5676eb3861f4d467e61494ac8bdc46bf1dcd337de649525ba1cc4d63351899ae678953617146de5a6da059c3e139192d043980040084a255e44138e177e7094ed860226a458e1c93e4332dc2a4bfc21b9cb3779d15f26efe500e7f8247149f9f1dbdd0a94b450fa2fe4f793f32bac1f93bdd92bf930d28a3998689dc3f1bbd2dcbd4f6b4fed62815f057d48017c4a944861a59c2145f5fe4054bd045ac56e26957580d03dcec065b8eeec83bc057d89bfffc456af643854e47c0fb653b60bfd044a97c1c61e12ae21e76bcd8c90ee04e0df5de10d5643930b578539148c3a601186bcc652a4ff64813722acd9e34410934999c3a1e2bdc39f2e4817070fa255a46f196849293090c2273aaa0bc828b2c084a086d5d24fed87497fd79206ece7a54fd32e13754d3acbffdb4f8a0442f44fd999b110eda018abf053021f3bbf1bfc6c15a11850fd6884072c22be6239dd2890accdb9fa594cf36bec1f1574c4fb910f0547c082e824d58656ab10a9b67534f103613ac22191470171b6dc7aa38e4c7fcbab74d2b775a6c68072e6a060c55943c3f5fa0da1f08ffc0a50dc1503dc160690529a0a1264df0dd300a911e0d480d0171261a28070b3a2e1747c0c8ceed5ea7cc69cf0a0f768a477dcc2c2ddab92de253fd74b671a9b3c1baa2729e7cb7374b68ee04d0a3829d3938e977b005075b61504c4cefef43011e37a4232bc7bd6ec6732d0e8f72f0be1509f9206f1cd13a010e990f4ec09586b5f6d36f0b207e89ab63ad28b10e3f418d5961a2a572a52e33e77a385da5efc90b70a6b2b72768fc5cc2f50fcfd5ccdbe4bfb96aeda6d1cc9c63566496ffd05c914d949aba4d0b5b7d099b10465a27f1cd957705b23a05898d0ab3f0854ed595e9e633937ef1e41b6ebfe5d6bf1bef17aa8300ff9dacaee99866297893036e2977c2fa199fb671b0b45e8bcf948b70a20df11db50a7f4c5140ee1d795ace186bcd7c6ea9771b32bfe05de36761295b455a77f3c273025c75190b065f470f42f14d6ae7dfaf90a59d6546933a9f960d66228049a472065db973558ab6e237ac4e8a271c0893a758ddd59101b5ba321578f89275d791dbce93024600fca6d782d8062961d0eddfbaf593d5b5654b8e02124f371ed83cf33da628650fbd2f8f852243fa6fb4f89a5a79327d24c5ce1a31b698d68b32de0d1947683b1d64c69011b1c6128c216e77a5dd340fe653bc6742da680961541f59f00b4420a08016b9c70afefa4d9299f82b961af660ab80e5a3f22f3837c85b9a30663ece3f9b9a4d0392711a3aa5058c5a4849d92a19d615e39260fb551c3d1e78fcca8c4113cbca55ecaf1ac9c55ba4c0485320b94b0698603fafbb6fac1e87381389f36b8515c23c7e1b44717ff6f1ec3ac955849bacbdc86e6e00ee148a44dc6edf9c056c22c535cb385fc83151c43c741ef012a823268a832e6436c1fad7f4434ddeb5355d33c068a8a5449606cc4fa8c678f9dd24431522534df0510ac11e554733e17d3fae6abacebd6cfa804a842d526890c70a93f6d08f36a13e149098f97e4410a03485a3462d10b7eb48ff789635477de250a9adf234a6afe5b2b712c43587c94af669f8af46479be4eb3b9b67f18e17bb90f4b92be62692d46fb50a3a1f6781e9dfbbd93aacbaaf83c18f7b1719a504bf45f596c2163ee0a6a60afdcf9e7bc0e96b0bd39cc2f26924767b96281034cb69ea3cc57947482fc8e0395bf9353d0ce622da663a1b773f6374805b1f77b5b247e82ac3a5ebdac6b7c8b0a34b6613dc4c91980f9728c1b8ad462e5861a2907fd5da502fcc867f4bffaa11723ab398a5a931c54e287d5a6b8e65e60c93336d7a903b3d5871a9ae261d1edc274bb043ff787df290828bb9ae734e37e628ac9539038552ec29c7dffb7c916150f2beae5026f0a07529d66817e879a4839670b041ac43314959539d22aa9c518dc461203e51145f6a82dfde2e7a72bc536122471b06ef48fe84ff5e3233ba1d2c453a521073536fff222a846895c3dfe42d23b23b8ff41a7a310dabb0845534bad99cac7d0a5882918c29134cc6e78f943f178a09c40c165af2110e14290828b8161aa7ea828e17d0356dd3418a486c023b50472c2f61dd0f2cabedd3ae4d79b26f36ccdf785ea019925b7ced5c70c5bc867072094ecfcf155520d385708fa8286973a3d25854abfc379458b6b9fb5d01c4ea83378e907cec003247900c69248879539559af0a9bf6a98aff243f4262905b41032d8b4e6711c232c289fe447f61334939dbf8eb10874cb1e8cc38e0a6e6ddf67a51b1640e24ffb4cce9b2bc39211be709dfa2608a1cb5abadf543507a53b18d415a9d7bd2743d3adf25c63ab276879f7deb4825695558daa755fb0c5d857a77f09eabf064adef3761c4a54aaba02ae51e7566844e9fcac17d64ac8ed0ea8d491094695c3530aa2d0d4cdc56655c6a4a54046a179a7a6fe28887e45275018e7329d25239b48ae29e3a34d8087ff9ca51c72eef59ed73dcc061564ef1aa58e27894eef2f3733b2d0d610324bb6c16cf7de04b52b5b7fa85ed805638d6f15f3debfa30c823f1bfddfd1a4e4ef9ba21ee3127e020d57a9cffcc7dee2e9cea82d52fb25e4e45a09799efee5cb34ddaa9bb1e1693f613b5c9aeefb2a4bc9dd6725cb665adf1d30040d55835d4fe124e1c9a9724bd3f0aea1f17b9b7005f64759c39328cc66f46a14a14b8894d9c01a509113eeaf2682597fbcedcf397838b286f0f16803df32b0411ec93611cf9765fedb367c1aa0dfe4fee38ac10c0c56c7f7922c4e86b49fa9946a17b45c9b2fadf3905b4516a9cef6264e9b9671291a2db3928d04dd4b03fe146e7d2bfda3509b3896ca702aa9183700e66779f0374a8cc2d95caf900e2657ca1243c37c51c1d6d4d7cb26df08855193913890129eaf8e2d4ee17a2763d05abc3fb0a3620c4c07cf3aa68fbb2edde9e73854035ec611d9fbd8638b2bb4c8b2f4db0df4373bb7d632a6a2d24883e8aa05c404fb5d18381534612c0a2468d7057acfa2dd8148cbea040508180e706e39f41b90a095faebebe1d0822098e7c5fc5404b787ca9a50ec4d3e2088945b3641bc27401990d5f402090daef511995a3e8c61941a99990e831539324b62ad096866ce5c8fd6121904b4fff7b016e65d742acd81bd77adcd5865de868800cfaf56f9fa2b29ed172396ea90a779303698453432c598eb3e541344156468f727f0b47d92f6105f4ed962b4a7057ae5f1d15ab477a9d47db46c5bbbc61313cd1f942afb7e056bb41d0510192c58d8c07fd15ab1847599b577ddd8d1d9dcb00d1e625f79a6a06372ee6d482208e9be464860ee3441710e1cef6f338e3607673c8b23fc02f20f202328dab1d621005201b545be4496e45c3985e914fac5dc62e4d09fa89b4a99c94e3315f33d60e4bc782c4a71e96b18aa949f15221e6fa2c68c549e0c4e9688867c77e3b75faddf25331635af2ba85321b6a7b906011aa3bebd7fe8d022be2281345c0fa545f137b5bbdccf221335dee926039e68abaf256ffeb9449b20aab0dffe4a5f64f612359397e4e070a8fa01296c1d8cee25177104d76a7c154e4279cb62a99d9d7afa21e84f983041f3df030a115b4b437638cfa3d0fa56e7b66fc76be9e18ff7da8f43db6c5f863efacd2eb39c27a20da6fc867572d29bb96017e0e71a5afe1b1dbbe29575a0ac0ec7aac84c95e85af5be4ae0a14458133252230d687e7cb1b04b65483df2c5685a62601aff85053ba2c509234fcff585fb967c96169bb0725f6d75bbfc6b3583cad1d56cf2f3e80dbdc32398a99911babc3408c318fc5c07d089d284fa6958c5051ef3064d67f898edc17f87d42c157b1c32b1dc9726ea39aaaa66eb5e7396f5b451a02f39699da4dbc50538fb10678ec39a5e28baa3c0d095d51837511257dd7e70c630de823ff82eda9df244cb71bb5a74f7f0aaf948943b14d0b2facd03430c854c516339465d8f052fffd7e79acc89c6637c8eb3e84d416e76a2822c02f005971adaf0171b9ba650a3a5ddec4987f79a8c148f560ac252ecf35010b7bcac12af1813afa3247a1ac2e12d7e60e8b64df75900d56c15bc14942d04cdf79a3edbd42e44c665cac29463d2dfe1cdde1f32e6b287877d71032f700d06e0730270070e44b45de5753abb3c5c022fba938b4f6d7ff3cd0f855f4c887b9d72b35d083f6542ac9dac8eab385468e08fb06fc14c97a88ad0acbb9813e26012ab4014cf2ae21074ad417bddb2b4dfbf2a36da8bd0691695b8db7a752b88a2adb2a18d8d718c9654b62ca698d262a7e828d43caf83edaf5bad252bbf3d822bb6b05e320abb6cbd94e0f675a44068aaa3b012fdf60e2a5c26d610343ef0d6e175cc006a0db1886b7b522652c8a3cece37ea7985281928063c5b26febaed8eae322f0e9c60fbea89523544a4cda39afdeeff903c0d4bf093e665eff1fbdbb27934001032c9409a0061b0d8d37ce9d61e0e17df8b6c4d89ed6c1cf275c863482ac4688f9311289eb6f0ec6b479b1d8919e059efd80fc6fbfa16a7b7f3eb2d5aa82a8f1227005d009547118467f2e7bcd6acee478cbc5f4fa42c2ec6d12ae0efddae9c21565d84c884ae46ac9d4bed763cbafe70103cc08cd1f5dba8794e2410b098b84488f248fc6a6cb36a516cdabf3551b0f0cb5790ba6bbad4e4511fa3c4092f0a0425854ea631ca8146e91e549fa9ba2c5124d478e259c34102c3640213d0bcbbe895df41cdc010d8c8ce29031f7e3e9b1a857d1f0a83584b8a36e7ec05ed87f27940c8c77aff86df79685591469d2325d455182e3dd1c11a05126e07a349d8d83d8f0788b4d673bfe01f6aa31deeb1f106fb6e4c802b45d5fbbec2fbf4caf795bee8662e832d219f865c2fe4aa59322838e14722dd792ea4f2a4ab7100592b5084b4ab5eefecd6a8f1856df9f7c7ecf1f36e6b575ba3c2b0742bf011d0dfbe31155c9fc201fbdb02ab04ec8d0c1e2875bd0aa19402914a2108bb5b826b42f661fb460a02c04278d43c3f7446ef482edb211db281db2c0d1f37bcb26dd96c1c08bedcb4c635aaf4462aa0cdccaa2b464ca40f67c5ed5a55d18796be792343774de48564b566199982ff8dbec845b1b8f0d04986094104685f82b2474f50b15159f7a8e4775d78adad427011e2c6c1cbee2c31d7f4dd138ff2b0761596689df0547faffab522b079f27cb08cc13742c96f4030242fcb6d12b2984beff774ee9d6502016f17bba7457734b5f80e9f1ef89a95af336113fc39c6c29a9e1a7b8ea0b40a060a4432475964f2e71c70073ca198b214cd33bba64c56b6c9eba68564416a1e2695e58f77fce23faec29076840b901fc8ba4dcd55928cfd429b449b58c8afc7c9d6a1d81e7719a172b015f4de80ab6534c25650f0548e1e6b799bc3527caa8b57972117261230a29bafa88a3246110bbfadf74d5fda84a1ae4c54073aa784f5389e0c5376154fca9187f13e68a6e999d042d7cb8a6c970f72db166ff88f648ad4b30b95f6c8a0a0bc00971a68e85b98d14a9fd25952eeee1eef8a02757c73d494a0c6e48e7348ac85e243261a54918f298ef66bb4d3b3c91c5057c897b8d95ade2ce448265d727652f49c696732b00640d3859c83390b25d3c626c9478abda41b1e0ec9a6cf44878cff4beb35c9e3857ee4f36faeca208cab199f0e6e39473bb43feb70f611e6669ccbf7b46e6250954b88e9ec1dcf1a850c10699ef20ea1a60f572444ff6b819be82049cdf8451fbd0f860f1ab88f21995e752d81bd51f06d962e604da7253dafdac6e93dbdba798632a70c0168545b4e090e92c0b54a5f19b08b4894d7864129d9847e0ca30986771cb389a91364f32f75a44162c4401331c437832078d7b6914c24b04294796d1835722d1ba2080fc10bfee16fd17d373d3cfbbafa7061c3709d6c29e8775357f1e6aba15efe88d88e31e61bf0c347f1c57f9d9528a969914c33258e0633e06b8b95288c7a0d2c751d502297ec84e76952f5e5bbb4093a48b076178aa2b265d26dacaf9778b93c0ef6d17bfc6bfba5c96b069dd5a57a1b0f21ce09c3c6db2db31f91096a5fe9ffcda21ab9f37510c836991a8b8a04e3530e29a3c4e179967f372aaefeac3785bed8a895a42313ab9ada63997983d82b2b6e4f5d118dc4cba285156955050874c15790a903354cb461dd51eb2d68293ceb571b64b66fad62dfc7682cd81fdba05073e3bda0d029136667eb786fe000fddbf016217b2e3f447e22ac5e4d9fb7f0b353273b419db0b1f19ebaa9099364564262c7fa2a727f57c7c068667d30a54c3121e78aaf43eb7449ad45e4c12a5d2f6ad4b75889e5778401c924ae3078ac9c1402a812b26be245b8ba1492614df370996f6ca4622d2eb47665689d2d1fd4c8a220f43b11bd9c0d84eeb01cafa32f02185b70447bf2accd6cbabd9b3ece25b924a3526d96e021b2f670a0e874d518cb2fbf4ba29cddfab82cf3aa10292da855e1b34b10077d791e56696c60778ab6b425c383248f951f5efe36b864b7e364852376668c2d3bad37ec009deb826b12a54491a2341bc323a629ab6d00b099613230172b49d0c3c3e7ff5ebaf05b203387d24e3039070f0f77f77c544adcf6a84252bc22b0b8bcc614d9aa4bd9cb5022401825b39b1c20eabbaecef2ab03a3409fce8ed427accfbba8c00dd90d9aa3e5ba5e3cb5c1229fbc5997ccd18cec47312fefb4c81776a4ac8afdafebf490c386dbecbbbd15e1338d39fa9b7853608b84dcfc5686e9dce2a0a2d8b709f675550c8d09cb54fe208566431f666f6a2717408c3c9e9703a732a0d8984dbb7b100480b7fe9400e4a93d4e5f4d533f3709926d29f8b282cf9f3bb314879b8aeb2a75e941143d4c2f42024e75ce8a6f24cea4149a79bacfb38ba6e13eebc6fdae8b534f1290eebd48b47c6d6de83487973df63cc704df0719341a323e0df99d2cfb44bb14bdd1dd95c654b32fe4790ffa1f30ed98e448b1686340affc355af0ce42f0332ee20b337f423228a30a8090b43cfa2ff55f1f5508dec05f61ab1180fa2701c24846c7476feebdd5b2a172922d5cfa0bc6bf897b616d414b53b647d519741c6d4b322ba2cb949ec142f3769bcd47db88f34ab0acdbda6b79bb9f247594efeb3e1dee5fcbfcfa7df43c46b535fcc443af6449bc6fdeece7f382afcfead161163ca7c28c4a6be9007789e357e7229ddb870203d54dd26a5dc18e2b71bc3a91456fd1f6daa87f28d2510f128339a7984a18b3c221cd1f1d74e9c95e317136491fe084d1706c9f81998ab81a61b4f37e386a60cccb772dcdd5751a8f38932c4f4c96a69c771e35bafe2b6b451adf6e164f86f26bf9d36441286c6805adaa866c759920a01647a89ca83b10d9d643812a34734fe4d46a2d4314d79d09b93cab6842f2db22766e60ef40c28e1fbc6692809239618283c3ee9941bda0e384d3030b5aa8be6dbe1bc57b6dc9cf5ff5d20be20fe10e8c2e66100c582659db35f6f61d66c3b0c817d63f07d856bae1a80f521653714049ffdcfc64011bb039f52eec650d4c9b7aa928365d287437ecfea3d1e407f4de021cac1969e3a28d44eb014dacf84a66cc9b98124306282ec91f18ee16d36fd000ad5ecee3a7c6d84540f981bacec5f90616af3b821a7c87c132f613725eecfe88db7b8599f48c79841b9ef05738c63c7041f319e20b772a1a60c3a7c2517250e5cd8aa55473fe5849a577034bde53175145ee142a8221001cd00912cc530aae5dad1396dccc235edc050c205d677772f3492895242683ef11ab4fbb590dbb003aa09ebff9a603718464e5b1577c37359c76280296a0a4e03f181e0c30278d2ec2d0b48a73a9a77a8bea8b1cffc49d4895f476c549978dbcef40fd6c1b4888203e65dc5e117e166237be85cb1ee8b09326ea9a4405b444696a4a7443e018b5bef5879fa39ccd580fd1095b247b8f78fe96801ce9919fd3d1f55f0bfa48411bf1315c84c2dd3d766ba0f29691e062fe722fe0851bb7ff41dadba74bf71b68c29f380f13219977775deea2bd78130849d5372f5d413d7c976e6249bba32138b3b154c6d4299b2363cc01415843dd2a6111f7982ac5ecbfdc74d46ee4662156f510caa95042aae843a223f6ef5906704f0cb741760e8c7018d4773d4ca9e56d90a2e5e20ed58d6e1ec699e90b2256811ab0bf52c884e537547694df7dd233238d51ec9696480d5efc20ae4333069506cae356f4a98fbeba9742727bff4bd420f30426f07105f260e598a92cf06d8aa6688fc54ea097e1a4e9205b3a587a900dcaa3dc152672041be216d1cbc9bffe0afb9b558a3504149b52f8954412c92e921b1557303df90a38fa8270494664b9da8bef4bcdf03e2047dbb269c0b49f7856ed44dc673f01ce5e36c4cccdefc583bd2173f2425aadcd528b361fd6c76334024817b6e2b3f116369cc42d804d48245bc30f910efabae2616b6cffb0d27f2b3d34762bca2133ab68376bdd8ae756635d7cab6f5c58cb291f813c51735d5a25b0ba498547112e559b0c9f23124558096b512fd552fd4a6831d78f5c4af15cea03e1780a800c4adb7725494640f0b4de2c4c830b18709d6842754b695b15ed41ddb2ec039e99ef07a689528f3d6fd4aa49748f59d7392ef1f8615ac0ce5175f3e6338bb7c841859fcd40a046314a1e3569d13c07b7e163cbfba5a2a9cc2d5cc9c76e3e70278b746c97531db3440afc47356c705cdfefa6bdf4490d6c7d320a88286bee74e3ff2536a9c9af1d9c36d5a7554c14a178eb5e908b53825008e7e8fbb031810d2325fec5aeaa40ce6456101e7079111fa95ef20c67cde89e95d45ce908c8e1800f8668e04cfeb70cc2f317742efc4d1b9bcfccf931be299f4e82cf19d838f418d1a9cc512bcefc20de94517139dcb2e075c6531f902f2c985978aa54c789a41c8e1690def421f752e1c126dc362127b560cbef462d27d9d4de3e53627dc4d7d371561e504f0090e9f302fe7fd0d493e184670835afae189a065d340ba3f177869ff0dc6ee372af2f3be04120adfce0ad082106b5bfccd131f85cb317e1166b7e436c3402597f3c6ae2e2578875a1f5611582528e058aece2ddc33a4dde3d9b0083538dd2582f1fe30f91a97fd1cbba45d211528828ef51f5dd1b3076436def57872c4ea8898b40e2eb739dcd698317a068566f6ad104e9b21febfd5ab7af4fca787fe14a949a87ae9e129c39e4d0f4bcfed911fea7d09a60ccbb08c1e30aa3a07ed5ad802065dd914ff60f8ceabb39dfbd23a10a535b4d490b14bb736e86d322c0b41a14d5f228d127a55c8e254bce52cdbb85577cadebb3057c7d37012bc79867a790cc5d4b52b74da9ed073a889b5d552927adcbcf5ae7e27db7d74402684a9a3377725d78418be98a28bfd47a89477df6eed4e8c8842dc99fcf19de129c7f82e237cc807fdf9525ce777e992a7e5a6fa941937a +MD = 3d71f08e52812bd83b34694c14eefa3ae29bf4084e608c7832d23edd52d33972ec3164f40477f4c45ae52d147268ec8c + +Len = 70720 +Msg = c3bf9dfe9d6c26f543188fb45729b771c726178cff1b9a185e3faf96e7d49d033a4f1816c2b911c32f55d203278349d738e4a48a12bf1f37f3a31a8c624e6fcd20ce021c5ce69af726b3ef02268f04078e36b63b4d2895c3864ef47640df3ce55f858698d3bc689b0f7b0e3abc178d08af647526191da5c1fe8664dde94fad51ddbcc9138e0324b6d1f6593152e18fe285b608d3df67f73b45949248c566691b84bbf615f78375515669f6714eb7b09ef77398ca05ce323842c0a73f3cec194b3ac9332475030473851f0d821a5f9843ece54c94f51affc1dd51cb4ab6a864e7e92fa8ca704d7824465fc7ea1ca1f0d94e524db8151305ddfe9125f29b63f3f978367f8e50277a6c81704b33be4760690403c2becf81ed948dc6debe53e56d88cf23ddf87e5ab2541e9bc2e467178ff9f640d42f8a2b5eee72391d3746f67b9dd641ec9160aec7e3062854867edb26940c51ab91adda01f495320be3dc5ec53f75d7d4e05fea62221f5f28a06d59cc3f2e7d6e6fa2567eaddff8d04c7ee4f276942cbd6ee4d82a17528767ba9b5a2a04440d464ed0677c2236d593fa9252aa4a1b89cec1553ec8cc88ea385d70a5e8ea36495ab89fd5a359840f7c74826e97c4f2362f631be5e349a7cec40f5404adf9ec79d33477679c5cafefb542b4015feb017b09dc9f952494987c335baf3d213a4ee5d84bc0e60f33a0bd63ec92d2aac831a084b2481532b7443cacc6e919edb445d59283e21ba3e440c1b1fa82ab216168ecc76f7d2fb7ba925657da6a60b970b790286745cb01797643c5f5ee526bc08fa8fb9aa8a958a369115d1e9bda2c748e5fc37c52c1d1f9298ac7653d9031ed8f1d47bc304cbf7cb3b6e61ae24eefcab08a8b4c6fc4ba6d43dfe0d0d72d1bee4e90d45c7de0944d578d1957a886aa7a0759a75e059b64dcab8a37c024f1d0cdb64cc902f72d7e1c3dde1f5c5648048a7913403a7d0f784e49d3f6bc8ca4f992ae984f3706fa26f34df120b1525da504f0027d693de89ecc0501424d770d3d431dbb8e81121134d96f0d43df068d36ef536c8772afee7d5cc75e46f94df545eaedfead6b83384fd78b7cb06dd89f5f548a9a85dd3ae8be097730274b7624b98e05a9d57ac1381ff3898490e3325dc73a7cd4a03345a008d8fdc010c85a6240384d042d3834d94d37516e0bca7b8d17a9136200fa3adc04d3415627fa617782efad56de2c44e281abcb8248a91bf8f6aa368bccbd80655a012c3a9468f42a28bb0de90fde5a1d6256e00770087a660d43cd982d017f03b16aa4b3809a7944daa45503e9d7dc5099407647aa6f009f047ec1d14a509f7db117920a13195a8e3fb36ded949e3444ce7176881f67156a8263f87e4c31489d030fdf88746cfdcd00ef3def37bbc8c1a8f2c913f67721902ff95be75a2de2294f5a7172cc1bccccc461ae50fab7028fcfca553058288cdab448d2549dcbd5ea3c01321342af2d52340fa65a06194975ec0104266d01be0db958460c3c9389a8730b09b2ffaf8a26f8030e538369043ca7a0bd3f5c8a1ff4e5329d58600d672b9c80dd962aa34a11b745cf8499309daca7ad67c14e4b1856e1ddc18031c2d53a5e699808ec13d5db19dbcf356ef47b8d9533ecf56acd0ffa546198ccd6393c9f61cd21506d88934cc8cff8ae2d4006a718373323d9976da9e7c70c8378fa05204eb460b6d48aec2b69293136fc99a6c2d9c32493c2319b2b421604ef3e8e9686cd263d824a9f4842a7ef61160389c3a57fdea78c4e24ff480c566756517c5998852ca0fbf6510f57272b72976c97c519b391a458a5f703c8ee8f1f01d84cb4201fcd716a0127a93394e44bff5c4c14e61de3033dee320e728fca1338fc8711e44212981792a97e9e9423d496fd2e18d464dcac84525e870f980f2b43e5b4d7ae9701fd4ad260f660cfeff5a677c73aaa31848874f802d867b0644f69ba5b6e44c6a5894be8d37a40ef509675f29fe0322be47d5708a6684280d367f3a4043e6e76032261fd8b7007994e9f4c953c7432fb037473acd29f68af635b29ca38aff64f25b1d6390e427d77f2f87388285c7348e956120a0fe5a1e61c1353557e29a3fb121ff0c3e6566a31438a32f4eb02bdbb9f097a4ae4a2b4cd0778b96c5f143c1fd252f8c49a16966f493bd1010bccd8fc2c77f395da3e6a0b2b70a33862d88a666e343563b3e9c9d80df497d612248bb29886c71378218b4991e458e00fdd5575edacf1c9b836ca14969ece9c88719f85ec203ceb46b4df2e3fbd218dee8b64f757a1721d316762cced1fbc7af31add1f2f2c9c46cc5d2d633fe14667884b8192b4fd0288a7e359a81861a999dd890a2569922d4b93853f8f993a0f95648372ee0da7e732a112774f214adf20cd25f142a23a38232295db5b53afc3400a9d00b469876942a75c836a0fc4a5384c56591ce30c04f501f3ca6f7727ac8f03fff38cd185d2e1412947a0ebb64209e184095b33f0dbeab909d3720c8c10abd613131d4c896836f8e1899abc07ffba1417caa89bce032ad13ec00d1bc538bb0b3f2810e27b756a53ec12ff8aa124746d7764ab228ec5dcd1f958e7abba6ce82bedf90c9b433fa4dbb2aa785e6bf95e750d9f0bd018692841a462a9c453f45abd844fba80c90f0d169c18ad3f4dc5a1b33f4370ad543737aaa6a7fa6e781738496cf2c298f62ccd8e102645352fd264af761784c22a77319467ef83b2111eaa570caacbecb0e00bcb779ae948f966d0f21be4ec1683703e854f01eb970651da70ce3f7d82e071ef533a3d408193ca0d03947253b1456b8407c6a7db263ff8ed1b197882646f28a2b0bfd7f3e7e646426a4b895f9c5ab02ea134a7fb66a45b0ee1561e7f9a434d4c6a7030a982d82197b0a6f1b8dea88762dc01caf25f1ec26349ebf91f2a46281407b40f0b5b52a5355c0f71077f1938483e95d86919937414db41d1071e5e002311f23ec0793d1844f6edd3f488940a0a515899079dedba4a1fc06ee27d751fa110948371e57fc3eb07a8dd26000047cd9db3d575f212dc2d9ed098565072cbb58a01a7c6a502ee5316a85846ef4735bca90c535a20ec22e4dfda160b9e3d4d8709a17266c3ace1a4ab540bfb5e501cfcfdccdc5f3061d3986a44b1ab6fbeed4014dcabfa4667e3054e16c0ee530346b8215c382c295b3970c87831dbccddf208341a1c29371a3d9e88553dc7d948fa169e222f6813c19a9580dc5e45bb82a606efc38b9c9dad3898e07a4b2df5077f3efa8888bbf67b3f2e1adaff9147954f63d03fc1fb80071a1bdfebb2c8b1281e59c0f50dcfdb7070641fd9de6775fe36465cf686ede9122b4e0b113a4114931f8f75d18449c98a755f1641c16d4fa5a3d81d51a11adeb5b55aef54ab402631ca07a383b6d4c9b095468779714edc72dd419ab6dc2b6ad8fe67101dcc6cf0e866ead1756b16e2ca1941faebb6b0244e2ea85b8efdc892634f9cf8d2666e79a13d5f880e6bb71cc1497af8fe573c301fdc35e942cd98603ff0212edd41edca45958f4fb67d607f7b6d16081a1e9907cf3012cb381444db52291f3aa42592e9bab7a2aed56bb914e1cd40b3a7d16fb144726489da9a730b8542bea591da05e0eaebbf2dd3fb69e2dbb11e800d39683768ea56ac8f26cef9c18225f50a27edb7bb790e5519f619f15260d8f7b51e2aa021e00dbbbe82fdacec337db579d6f37417a8b8ad0d23704a2c2397a005485df4599bb43ed174a72cef9bed6a45adbe21e5c1e5be184c17f453428304667eaa3cf76471bd2fc57482b3029e9ed675f7c50d0cbc0ea337b5f7ad05c3aa418ab97fe3836cc1403d0eb51fb2b7d894f5456976d1662714adf35c24b3801afc3231c50540cfd16ca31acd1af261a1e7f751140a580b91d476792a9f96e1dd013fba1645e2bf761bc143d38e09c4803741c2ceb0e8d1d24c5aee6905f40f7ab678fe7b8bb36637b55d2ece624007fdec9d419f50cbe374e321fa224016317985a7a2fbbff9ec9ca24086c67edf53a06ed17690d34767ff0092465c37447063d592519fc9fd792d4a32f1c4ca2ecff225a508a81fa586f90d777a1fd2c6f4bf0d02b16e9107337316fa17ce2e74a47a7ae3a0f01d2d67ec71963e73f9e3e41597bf6a70ff5f45f56c62a2ef92fbf9c0d351e56eb526335f94b7386194e468eeda9125adfc4cd53bb530372cde09f74d99b9802cd0da11dbdea413f08b11aad03e408a2e6e170cce5a2d808ffae7c5a835e11832548f2ae7b7247529c6b2cf462b9340fa3f091135c121251fcedd8d590d9156862b8ea50b87fe07122e0f02d50954f01955680df854d4cee4423274e98b93e2323b1fabcfb6fb70b6a9706907404941949a7c27a07a0d22e73f30a4df16ae633e6e8964bcace3581a201c2c63383bdc72f48f88b49a96c92fab1d45c315a981b0aa16f759d17e69487c5c74715af168bb4de757bc1e356cc470427e1ef24de592d90c8d2e8e934947a37869ba0c358e778ccdbd416db3b3af74e77877146237ebe2b44dc449eca01f7fb832c5b7cdf6af9989e2caefd745f7a1545b56e3b01ec4ad5660a26b4f17d9f763f81ac482476b5c63eddf0c6bcba4ddd04e43c7fe4324223aed515d85557bf2c3e242991c29b1bda306082c35ecbf12a479c728154e1329a71d57865603105a1e19c4a063468ba49057ceb7ff514f271905696ebee69aaae7183e4d89c99d16bdc428401f4300f97305b8158fa15c04751ab201bfb3bf8d40058d1ce84e2c0ee80cf7e017cb18a4943b4faead85ef9100df294ae05f8cbafb0ccd5a393bc42ae719b8ea1484dc8d3b1f19eb23a50eb6047d56afeb8f09195f57856e45376e520112f3c5de16539cb0d9a032b8a8c45bc71cc199a6ed3d93b60b3dc2d4eb316e7f1f31d93d2a86ba3a926cec3337166892e2f371db21300e46537ebdaeff1566a96af88ef9687bcd237203825df90ec5adfa739d50d3ea735955cec79a1a2222c718d34cd9773cbeb1a0ef5afe97b35a608ac987ceaa74ab3539b84861e4618a2154477ba600d1762d45b8dedeb80d0ff3bb7e951c4ed59d2228c1a8cb07d987ff44de8328aa40dcdf88e475c40525cdadb41931046815306a4a7350a02892ffa8101fcc271e93d70e92fd867925027ad89e22c24ca03d4e54c655a6a8f295dc65e192be6b03d251038a8b7bc6c1ac00baa021b0bd9d53de27c4ef13ab0ae9047edfc0c2bb020331079914bb71812c459be39f621f0862c72c6eca00701b96613b31303ee1c3305f60e722ae420c8933c58e24423a886ff3abea6dd3c0cba5d9e3006a9ca3ed60c2569b3cbc030bcbb17fca36b7d5c68449eb6060f663c21d56c073f742ca289c4433deeb4d7a25fba610bf5f29ba69a8b136f92ccf21a906bf18b35e9a1e1eebcc3dd7b5c9700320fcc1942600af1ae413d2dc58c8c22869fc34e7270a66745543beaf2598ae4d429ada7213a57d813f5708336c470de64df45c38dbfc6cd5e28ffc8dc022f9aa6968a380af7eec45c1662023f1b6cb8cba91d8ce01d7f6e79b99409a10d01cc29e4e63e781f4c30f722662d66e7cc4c1b8baefd02103cd528749d1fd9c08dd3ee83464ce1270cc865b8016746b01c02e5057ea66c4e8b9bfae88f9dfec3306c65002ec5ee858cd53835c832470ad877b895111ba71ee81d6193cfe6889ba5d01dda044be8d158f1df2a3f20f06e8e04f6c8eacf1b07def3ecf4e29bffa03ab9897f6b4188910da8db13bab5db41a9552fff7033609fdc9a0d8a7c20dc778b73286ed839162b0754bc70ef63503ab6c2d4c745eaf05d6d8a33d2d117979804b78b36bfb53a25c2afe3c031bbf7a032e885bee04842b70e4f005ca5d2c97822d1225596286d07ebf4e19016125a18aa30a324b3ede0333b52e3865f04ea9e826a7e4a00151757dfde565f2128c00a9925cdb7554e516881206dfe610063719fedff92620dd18c1ac6828bd741e20c6c4265e528ec0ebd5c4200134067cca7d7d646bd5075241b294826a4ad003884b020fc1cc33980b839423a6391ad9e97c6bdb4294fdd779b87cd934816d63c09e12bf0eca8d94fcfb47b8d6dc93451d7e8fef874a4b94463b2e158d4a95655129bcdf4d33e2dd48a4a8869a05bbe7edebb24641e13ab233a370df7e8d8e31c252ca1784f17b9a76e57e36f99cd8e8e12b9c8878401059c5580bdf0e32a1f09b83020ebdeba0f40f28906ffc8a336f81a6155e344f15b086c2c7bc452116ca65232e6dff0999139ad4a7daaab514a556c5e5707ef693e0fd496b1e2b4235e6a69a14db5333ad1e9f518b1e0b06c2b2e7eed3655d1dd010b256c1afc97d456de94f7d01bf51253da70604e4276587bdbc8aa9e5daac15692e4f8f1426bb9086b3ac30864e4b499a395ddad407bba9ee5e022d9afc8baa13f89e9ef84ae25c5a8e18f7140509615addbdd495b2ee716e54bc2829cba3d73598a9b6013edcf21101fb9850ee74b5a81b8ebcd030e827652622613d4fdae4f897da9ed7098f9ad295bedce410728daa7c39582c8a8f13fb5d9ba27c911918837c982023b3e59cc5d0c78b7873ec308887247152c7cd7d56808eb18e9849bdffcf4a028d45c53f133d7f6db320cbe76bc5b8cee9ef89aca11765571c6c501993195a0dbcc616cce4614e493e1ef5fa7bbc5d399a0babe902ab875cce16187468e02f09593ec28b5fc69de9c07554b1dff67c780d211a7ca1c35c884b9d8718a5af31be0bb6b0c4adf3d213e22ecf53c0fb7b54e93cc0ada7e74ca33c09874c730bc8f47b34c8bff57057904c504d2a4551c495d76184c43c9fbf744863ff57fa7e5c7251c3f2c360c69228a5e3b87c9782bd037e9a4e0887741dc418b2d682618f55013468161a167ceda296f0f792dd16d06587ee06c2b1edce5b53fef615d1c71b69cc2d1c0a3e1acec8c67df2b4409364859966953ae1933a01a24f465871ac1672c219ecdc01289f60de95912ae883e0295d08e1b840ecca7eadaeae926ac8afe3be346fd8862fc733853dbc3bfc6dae1a7aded384f682e4991b22160de3a34c8667878b45f6b7ae09647f5b30a4da352099f053e52addf21b95b4660f05c357216619296d7846bcaa226256510a51dd0262444a2505835acdc26b86e1f7b2367d62f33296356659dd68ee95e6535a0e8a7ce49e8aaefe86744b4f5fcbe2f85362041b8c09549eed6bde2c0037aa7d307e90d8395d4dd6dcdbd768d714ee1b1498f49b210efe76e01d2b23808c3543aba7452601e50c91c6c90fbfd70642a5e3e6d97bd7ec5b779ab9f8dcfb2c1c33e8cd44d8e06c11b9aa059a5b48e7071e27155cc198ed92288407ec5d5a6088d64db835f6bd3884d5f25822441000640c47ed24774b57cc1204d1b0b08670a1b2432fbe867f928e6e058a4c83199982f9ad36daa4d87330bb83ddebdd66a48e5133fc8a9210c2570b4b63c21f49fa896cc0b825512689e7ad6af446eae143783b83e53f21571006342cab2c208a6aa0eee83bae851fe118701fde69e1e19786f69db3863c3cc4c3721029318fc333ef068d861c48aac2ec8a0c63fbc94de6e10ce72e06eaa725b84b5fa67a73dc9b9f3c176218a2af768b85974ba5ab0c79b005cb1d6833807c0a4981eaafd4bcebd818ef974a9c17431ce92a5d0e8e08981c67af49531faf11e4f4dfbd77ba4d6ac1237bed593dc872c73c2c62de7a288b4dbcfd7b70b71d2c6cd3dfe77a2e766283e4242cee8eab4ab6080523bf7854996a8b1c796702b015ca6eea2f61371f1945e3521bb095a8150ed41c65578e740b9b5d740bdf085113274d695ed4de30d830a96e83485ca819fa29dbf34ec771290ab96dfb80d2e970abf9c23c7a2a92e76cbdde2c5deb91a0a08ea9944d28313bdc276f10f3675e727df95f91fc232b8e20a70cde98484df0288bee0ffcbb9d893c2fe211e0d09a62c6d5a62501d1e41575f05e61a17dc251bba8132d02879d5b505a2ec7ee138388ad1601c0323da6c3921f3e7c1f92da0d816e7eb608941af8402fbbfac63a032b5b43d729376e57e29fbc13f9ba8d7b6ba1649872b5ebfaa93537f271104c0194f7e48f29b76ce0b8c650459e1b788fb24313c928b29327b657f839f67352640caa8193885b402a8e2d623c34ea5afd2b91017aa2a6948767cdfcf94f975316d99ca34a0ecaf11cabfc7a5f82ce3cad1eb0b811a63af70403c0cb9b452557fe43f4d11c82ac879d595c201852702587d2cbc0f8fd16c385d457eb85a0c5670494db9471aeab0b97de75ddcf6a781d7391089f956fe100f120bbe621281e8910127873b1586d84f1836e38ea938d2d59a18fdf52c343b632301344d6a5d9c70a07f4f644499afa93906fbad295575b214b890796c3e6ee2f4c888b0bde9d29dab976a59349db75654da2e9ef3880b1b3d71ea0c8356fb0d0bc42452a9c13b6697127090420d8fe4e012d50a944ad37f78d753152e28902fdc768f99aa7e3769d762ea90095389c39f63874698088f4d6b5b7429b92daee9eb62230c3c7b4715f12b40df071a3580b72ecdf95b5b9f036960b5c0b0c0a7b9bd19a710dc42eb0988be1be3a7cc339adbe701897abe83301799a060a1ac2b1dc60f544e065fa3a2e2adc43487e3d470722eda7d52abcc61da68cc80082aa994aab5e31a473c0170b37ce24803fbc8a01e58b15b9faddb07465082a550d693acbfafbc1c1b7275015fadeea4c86e60b845171e8a9e2f4f9ecfe36b57183a89d4894f47b9ff6d8ec36ba351c131d63d176acc8ab0faca9aa6fb83ff0bdac0ec8aac272e8a6fb7bf355c1fa423ccadce4c13fb7e3521ea3c9e4dd4b639f5044c5d7cc9d8e3f8db76e595556e53156f94d4b52671ada018b6132b381978036f19cb9fa9cf7d07334642cbf718c59896113fe2d00d70f1c087743830a13c927be53379398abc3769bddb54772bf1c2abd3ec017a9a35939c315fe940e5fe0eb52f438e1b8307e5e94e1dc348206e203b4d77b5a8a05201e63424b30b4042f4a5786a62a25106bf3c67989d0c8ea13daefe4163ccc85cc949107129d24891c0c721268b706d3f0fcdaaca4616df217781570790697abc563f56b3b24877611f84d9f66d084ff77437783153098a757a5cf808cff120073533676af0d055475d7903588bdc71e678e4604c485728f3928c51e3771660b3f2cfd3054a0c5aab071e3dcb6c5f6b728a6ef399aa8233426cb9e5162a2ba548fb5f1a21325f0002a8eec9dd83139532253192a7de0d21e87540322f5db3764ccb7bbd3d5e3addf4af6567fd649ba79bd5c6cde5676a7d3c28c9b97d86405c25ffb02cb802325cd7a70c78b98559eb1618b925d0eb2cbdd413b0fbbf3854bf6ae466f93fd2d7f5422c6e7c8069d108476a630af8bdc66c46a2906932e8632892363aa323549e4fca8be603e096936786476f1ddb73c9f0ea71d292972aee10225185ab00fbf7c4c7521d7f58700381793c37aed791a9f455fe12084a54780e91b2f271672d66eccf1b6f7f669ab3fe96b5576eab8bd8ef0f93b92acb19739c76f6ebb6b48d7e3048447654898b2737555f38bd95e6e9398dff427aa7ce73223889ebbb7780a027d979accf3fb5dfb43b76761c45275d6c478d48885f07e9385ce87d202eab7f4be9079d20079f3ffdbfa77a1b27c1a80fc2ca25d45f4a68575a9f0a6558626e04fd9aa1f76fcbea9c687ecf3acc4a5b9c963284df36fa5307c81a2dfb7349fefb9d8f55c5d6b041f8bc58dfeb9125da8b1852c01954bc4bb21be662631dc694983f72431bdad0e89b21b246be14e8b763efa7721366f4b4eedc80223ca66cd15359dfd459fac2410c3f377e12c60774af82bd154dbc3821367083e7d8aba137c58314a410a4f8edc47b45009a330694d667e01428e2fb02f17e4e4dc79c083a5731dd1cc077e9314c6c5758b4da7a9a7105cd194569b1fcd85c5baeaa06164b80ec85b8f9d217ce0c690ae0e33ab7e7f7e2e07f23cef15133a148a4c068300dfb19aaf32d4219169d17cc53a5b2532fd395a6c034613db29bd371aadb30f9d40e5fb975cb4641ad76ef180b9cffe0b4bc84ac8707eefb938969832b3b0ee84033153d9b546d35f522657a930971c528eb364e3e0ec6cf6684e9d9c060406fd511e0a3ee69156a8017f17064ab9694ef1831284fc9770dce06cb01f4fb7414f5233888e979dd63c0c039760ad3fcc4999bfbb756c87e4b1c978388236d286c42df836916f7339649c3a407e01302c89b1efc67cd7c4b1be4afa9d8e625cbca20bf57a0e171a6968d9ab7a2aef9573575f9b9d62e657bd4b8c7b460b7c5dcd3213b3bdcf379a4c90eadeae2a1e7588fbcb4ca7ee4047f2a0b7839dc12bdea0bc6eb9689a76fccc23f75b424738d853bd1f894cea8d9c3704f298097718e51d88438fe1387c47d06b2aaba049e2c7bce580dbf41c775e73c16544f2f7eb7d2cddbbbe9271f2833faea9552ef8c648abba18c9074ea496901d390ec0074babb505fecde10c80b903359ce1561c8c6608850fdbed46bc4c7561967edc70e079a046334438d3cdf003482cd77f7cdc26bb8e8d990fcd68860ad4a31dacf953eed5e982acfe8c8230272f80c010e15c92ac1db98cd3aa504e37c08972996c4c123d35148b9b0046815731c2247313b7b1c47abb3ba2a71babe46b6f060c9072eebe74116c77f7c2ec7b9717890fda938be9edbc2ee58a71a6f91e7e5f6b2c6e8941eca1d4fa399e787baaa9794cfe992904bde4ee021cfc455e21de071f09e7ecafe7ea4d8c8d812e3fafa07b92467092fe335a0263256192fcbcb68691ef861deeab175e95bc1314b0f12418497bc0cebd9747f26e6d4b95b9372e6228a5f326e8804e907d8ffd35b4b75bd6d96533e62b31d2478dbb60557ed970254bf5d50e83b0b769accbe79634487040abcc6fe12f48248827d848da34eca15664a5d5dea9827c738a3b784119ed89db25781cc7b025643da38dac2cc1b6ec7eda7e9a9d413dc23680a6593d49eecf31b031e3a19811bbef6ba034540f8077241548cd53332ab439f4d33292ae9369c9b5be6c76ce525125e6d9875904916ad07dcb1509679177044f8baa492f247f2b9ae85e4e3a304d677c024e438a33ee0b7ace1bc6c4ba361ffa966968b3e83be0c9776131c4f5d73d95e1301a88ac2b5b741b869234ec17135bbc18fa2428c36fa8331f2854e719309940d6e7e545484bd378ff759f704266dcc55f04692c3f60a1e33d3ad25038c7f0e5e7b28b466d60ffae2e78eb8fe0a3e478e5906a3cd83c1a51667026765f8b03980c8161f7c4246085baa2018e194fda9e53a50fa0b5897d4340d038a2b4023823ed5e4f9f721e5ec44cfcc9b814f428ff504c409f00d231827365f01b5fb6f84d31503d88a2d662358b8c2b54fa193563858ce582de9c9ed6a834372b892facdd816013f87ad5d29e205c10a9f2476992996de69279712c068747f3185af3ba9c8494b93822a218c8b2745e0025052c5335f72b14f9d843dcb7a50e2bf98c8c52e3f61890c3c59a7beadaffa1bbdbe67001339c53865a4b1ee1566eac8f8288c6458e164785c7c27e7098d9d4db51ffafa4282296467eac95ac63fde3435b18c253629ca78f2ff79bebb6d6e1adf0dfd9c7dea32464ccce09c1d3a1173ea1a30cb57d93f60a85a098033add0f5a3fefb6115e084606cc1a42c7ae4492a7db916d12e4e17d1d52273e612ed5a80ac7950d2baf3a445507f60767fccd9aa79249ad12a17084f11cf355ad99a8f2e40e3aa7bcd920667804cb2149c62478664d35945eba2653ad6e6ca58e843d36119e474d6de5a1f4974b0259141431740b94bcea9e3aed317acdfaf5adf67cbbb9ff22c5e6daa735dc65017570ecdcd5bfef46767926ac6880c3050fb2f74dcb02b735d7cec019726dd9323d07580de5a9e73b0198884b3ee6d7f5b9448f98ac1750e74dcea0def3722ffc7b7e5faceaf2030453a367b1fcd59232bc0bc745a71e529fee8d81e00014f0c6f58009a12dc1cc073441ccc8e9747a24e0b1a63c044043c781b46b06e17aa3fa74b35fd4f63fc9ad6c1abe774fec1934ecdb35660ba4adc6cfea6638ddced0ffc0bf682d8d93825ec2d745a67464f7c8aa337ba904731704a0d87b5e3d35ff3da14d2d9539e77f830020693da1059a4ae06180ee36d40ae9bb25b1614ad9b91cdf05b4f243604982ec9c33251ef78c20570d4c1eeaf00dddea7a112749e28504418e072ef32867c54ff4aa44336155b4d7dee81f68eea848f37fa1998578ec5d91912e2f916761b2f0d0d783286b7b6c287c5bdbf8f763929fdb6b9f45c1758f95b52fdf6544c0b399d6c0ca443f88b21190ad38e233c723b6377722d0e8a80216a31424b7e80a2f10b16f02d10204ed5bc2e6206dc95b63003acb086f130d1edb02e5e8ce7bca8e1e07ec1115df7584ceb90f7ae2e2a7bb458d713b6a6b2d4cae7ba812f32485378b813de159fc65e1321e30 +MD = 6a76b88ce50bab0682ee7cb670821ea8f608e7d70801e7785d26f9823455767914c5c87f0054a576bdd69938a6e6d9ec + +Len = 71512 +Msg = ada7dacb8b05165188a0d2bab906f0ac3dae9feecd398acd95f74fbe42ad32445d961314d7a79d78e517c1f10e1f622081ff52e6ad417ecb0c41659c3fedcf5860cabb4e9438997fdff6b9493de80447ee18ea7311fc9b8d74f77ac1ab21ce845f4bbbbfe93e722f1f44a40b6eea3ce82a034ddb21f049dd761f7573add2998e0222fcafff438f504d096980cbab73cdddc8656607a7f181bac33dfb6d87973ef0566568fdce5aaa114ef0ed79b512bcb06d185ee8a9f942e7eabca114c8305ed2efdd310c683a04111a219da3907f7e4afc5009ef7ccbe8a59dd9acca1eccb44ff64e5154979727f875e4d76fc224db557cf4b141aacd3b9ee37c66b60fd30a10729f11fce6dadc6c6721e205d5689a76f6ec9c09bb690377c48d150125ad26bc6bb8b92dda69e915f9c0078e51b285577120126d350607db48f502d2e8c3d0fce981910efdad169d32a98e32bc6c62a0f5785d95a20b1070789a7552df7bd278f5e2e0c8d60e2da91bc4bf18a0fdfaf98bdcc4aa89e2e6de5b65b5a9923ef3d796c3f082edf5f4e4bafae16984cd150839348ed473f251cef93e0cfe8975fac2d50c0765cbc835f319313e4cf1447b780968043ae7a319e85b0ec0794d86b0e0b8a56e99f7f0b68140521cea6ecaf3ef03606e056d5d05d388bb1a4465dbddda4a766d45f9d640343546c46b83c746152e04145c8d88de38882f628459da495790674b915ae19ab402f37ef6b8a33c94923d3d68d08c6cbe6450e064b2edbb00946152a6a1788eaaaf4392b396c69d1137f13251bdd2770e2308dc0af77bfc7d5d4ac8ac5605e2be421d47cba498313726093c3eddc0c7cfcd3e9d9eb0ecd575f30cf6ca02ef5f97c568e6666a82c0ab666ea157b6bf23aa6bda6c4965a70b905f8d24292c9ecdde3f0eb7ab71ea1118ff06a9c6d238554704c391329f166977a8b79af15c7af43ab9f602c34039ed24fabb9eb0b991234da0e35483e5a0b6d2d6709f491aeb9b543a080fd660d81c775e74c640f13456654721fc61c0adb948f2a27c59ef598cd3ca2c250b572d66ba33196b9b0487b6360265d3f6b7a53b8202347a4a622c8d60714a8e8aafa293958191d3ec7af40a69d8971f6a52f10428110edf44fccc67a3384a907cef9e6aaf51c64659d9e11ca5d2a029e519f7dce12418f36e43a1e24326147409a089b4b1aa9f0e0aabb8b293f766398e95208b55453a00f1c114c5e94491825849ca39429504722877e095da4fd2978d4dd4d82d7b5c4cf5fe8bda3c99a7019272cbc10b19ddb9dbc6c18d23e2cc8a0bc97c8d11cf6620a1816fe7e52d3f3bdea4f314b43e122c4a1fc36116b93d5b30927e70a84740c41dd229b58b0842766565aaf9e40c8c139e0a4edb5adb0b53232f444a9beed28092791f0cd73396fb4e40583a438c31b6fe0fcac1985020b80d2834e291c9059c28febbb371b52512c2ba659d7ac5ea5c93b79fdc772162d21506b80233e2bf5f06ea64740096d502e95d3aeb31bfa04e858935f4a055bbeb645037702940e91355c581152cde9015eab03deb0f8339d5fb0ef5d1baf41249218e19f51aeb6cfe3c157c5f9f963d91ee3bd767bd189f371dcc453a6e074e357549c559afec2e68e464bc1afec6c4bf1c877025e386b8bc144d8ef8649459f78807a5648f4a199b7439a90ef4740de79d1b71ef28d66eae081939d443a61ad7815320de620d14de151dab0227aaff51987f408b340fa75320b6ac93b442791d88b29e8ed23e0678ef972ac03f6f8444363c47c1b0394df585ae51005e725e10c7ae873d85e3d9b2292f8e0ee5cc830a9fd9ed5b445d47da5f898fe2ea3db1f963ce44b3230774d4ec6d3fb5c1c7e5e9fade991f97827d4ad5cdcd00ffac5a20879a3bb855afbf265fdaa67d7a6b902a6fd4b5d752b0d78f0f04752346c542cd599bd514c3e5a2efabfd292db8bd6d142842a8491cef3df036b5ee1366924f4801587a8e14b00579f75e318f25c764f14ab0da3e9e4897b47269a098081b6ad8a85a93f0f019d00a6c86276967905e0700a6b37d80c2cd24eaa7f37ad4677cc7762786000126ebeb32fc7184262041a070ad9bd06966c788c7f74f80717e6b5b9249bd87ece13e64704879a80b80f702c24cfafd013b6e2830e11c74886821dd25489e4c5c52b2bc4ef3a59cbdb766751f0c38cdf149a84b4eeec21cc02d849456aa9319f7802d3df5845f2ae5cd7843af74bd08e1985e3a49a5a940c2d67eca4ef903b46573982d8d830e182bcb13b2990cf1767831793e488f39aa366bf6c534bc56e64f33dcd53d79192f36b8210c065c3dde5f1bdf9d7332db21c2f2d3cf317cf3775dc9df7d2eedea37af9c89971ded070a3e5e7a9ff318f56c1175ff2e6dc0442f363c8b6d8867e8f83d7f339c0746b8c0bc03308ef0c9f154c9fb612a0f10b0d68394c7ec726f7b3a896a0762ebefb9c98110ebb091cc35a1938de10d40f49f33ebd97a43148e0bc43b64ed33f27171ed3690924fffa82b1b1632671d27f5790f17148ebb974b005ffa76cd55435347f383880db162e83989fbf2dba4ed9aa732ae4dea9a232fc3d36ea78f11081da5a50f02441ee111c9b5e9d525e8b96c8f64598a7628dfc1bae840ff1baf6658f2c983051fe0a4ad426589e42e32b4f29a6dc0d51aaff4894e6518865977878b9528869a863ed4430c628326dcc905b430148a35be758a0fe7149d4532b1933ef88ac1c8617f995c8f747ea418f7d63aba2260b34ac3c7dceebb78438ca4b1f982b7db9798ec1a7f32622264cb024c0d9e60e955a6e1d677c923518851990a459b767d0f13cd803460f61870db3391b44693ce25bb17dd68e214ce1d67d8c6a9ab904f39ba6af2047ef608d032d2cdb71886b62b6fad0538a0569a09b8a90cae1acef81c760a9975f52b998ab627279f7e004a6eabea756e6ab05b542a5404da51f621c02df69d112d5d74a85179c8f2dfc832f658185692aaebba07a720d8b8b6d0712ec87725608e544131ea12d83ba3a715cb5c7dcf2cc7cf5e291657adcdb226916d30d359e981d7a72e68387eff31659bf6a16109c52924f0c25e3faea3aebe28854b5262346cb04ea6b534e2c8f3ca6d7e0d0e2be438b217db692000c11061df7f033e68c9b8a5dfa1b84e2d1d509d336b8acb5e125c417c7a1e44ceaf41d75e623fdd9231ce7f022859cd8787b0a894c5ffdfcad6fd98c6aa65f23ef6aae84c36e77909f314055e4180fb178d7bb13995539396b883809e702671781db25c5204e258f597f4019cf7151e06b71a81cae3702feb4056c1acd6490aa5acc0fa17d31ac27da5d539634f007f7b8df3e0eeb53dfbf0f7de2397e3b705ed2b3e8b44ab7601c9a61f775c5329669f986f964d15a23ece64836e089f56aa772393d78094de5c022239812f0a791a9a5ff66a900a8742ac10ae69a6130f406c1c27a674973a1a509f8d1f837cd6e5936af1255f9cd44db381c5dd1a46cb11f39c62c0c7bb7284daa7821b00b2290db242c68f61d471a80a4132920b407063352daced22096fe2c9c1803c4fb35bdb216edf703fb9479bdbd85b50220ae77f5a566df42d87177c4476ef49188752970576a290a1543c6d4bccaadf07ab19ad89a00d9e8f3f5399744c380b0237f88989e379b72dab396884a78506612bed35ea91f4b3f1390c8281cdc14ab6ca34f9d23ccbac8ec927d2aef0568ed8934a5ea6b38afbfa7c28809281f3cddc48ed2e0b0900386ab3ecf4f030844015ea1a71e58e383d531091d9cfef365e1bba0d715ad380236a73721673ee77e2c03844b6cea86443a3fd2dd5619ff3c31b277b0ae720b235350f9f805fb2973c8186b0758a8b78d3934be6be701990c585971f41db7b003574925d79db054c18fedb46f640bfdab6cb03a2da23e6772c0112e15d5e69d1edce01934a0f6dfe3ce23fee8019caf4b4f22d4b73a38d0ec036a1a9a897748e23ec66293c24741571d3ba905d3d362c94b0cfc8cf1896bf49cd4b5f68af239da075c8069542a2f97f795514d3d38bec20aff30136a98af18e6d19ebe6cefe672c1230149d907e122e7e17622b044f9b1e94a0def27eef0b58bf11356a1a8e548e6ba53a9e3790c946870962adf70ca0570adf474ac050776f6b3e263cbe5acd90272f60de5f60848e3f31fda0d5496593b7b7248597329c9b18a5a4a3e0eb38f8eed66ea62e77accf4b99194ec58f519943305dec2a1fe2a46e5098e9a9c7fe8f6aa34d3ecf5caad156499ffdf065cc335752dac7a29eb1511746eb544078881d419de3ee6897e45c064778f67d533e279b26845e2638716bb88f832dcd863d6a1bcd19fe22b1c438039d8a8195e10f3eb6b341f8df738abafc344abb7a77843da139d8b52431b12cf653bfe56098a8405101fadef5da6506883c27486dd5c7607aeb065d979f1302876ffe6c05ff6ff5131998598ff2681707af011ace276d994feb8c3ca28451805dfb2e5cad9fcd25a50201afd545fcb51f95c27ac6f6deb1c83f539a6e66d56f21fe39fe7ffe2b97aec41f28f05a8aa778f751b07dc981708cf142c122d006967a81069aa4a6ef14d768d80e08b978b6bbdc96041a28c09d440940f8e7474cbf118b7d78431f8364c8f516a744eb2faa904d79bec59b0202978d3786e5550fb08d2486df85ef4d4f2873c03dcd77184b9e51e225a8abb0652e870eb44381b7329854091992a0b79d9febbe16cbe59a608ef0b982e8df308fb0feadca2a53ac0dd724ee6c91ba2715d764f87a65be1cb30732e61db0c0eb48c6fbfc10c1545709f49b1d21aac3078075e655b3c388080ab220513e26d549571885e2cd310b1eee97c27f7f0745bea62479c0080ecec52e37c1e32d72a6b3864da44a4ba1016a83679ffad0cdc7b44f8a261ec06e15bbe73d1e8231bdbb8f9b0e6019d03abca4910d3d775a27d251434ff458240ae752fc6c3d17942f9d465f02c238a523c632e030a1df673bedfd491cec567c0bcbf2376e288b9cefd3419ad2d18f1285a77e3879d5183d31a0202b99140010984a035ee8e7c49226e5e7142596065e88e5ee6190e00c24327322af6d763e27daebed3a8580acbefb5c9f94a41786d3530aec221ccaa16666ef6b9e401af90af9361893eafd2a6797bed3e4f75ef5b70f9edf45c69bc14af49b63bfbc0617021cb3ed31c26525d62196eacac5733d53e3272f90355c531704ff73dc874482556bebd2dbb3c18754c2694c0fb65c44eff82f43cc11153f16c0a401bb49dc204b0f65305b65183727a2c1607b7323f4d3763d85c104cc6d8f4e117725abd4db2e30a9707782721d97e82590d5a4d0334684da5c36b48bc5c9d6ce3be254369a44f540f8f8afd821eebd1e44e7f169eb914a8c30f4c9592e0e8164b7baee0a45d787b132a596502b724833e27700f803fdf1de6ac4ec3f93a4765a51751e56c32d0e848448dfe5236db2ecd34e7c8463d0a155706cc543d9d4de3873da8e24fe8eb14258a7329cf12522d17f340b16f352817babb4fb70e9e6e18784b3e67bdd449872158c357f7de3c16b4ef055b59bcdbad7836637cbab22a6ceecc6cd644896ec9c23bd9395afeeb641a94c0369438773f16148205e07d0569512dcece527cbd548ea02f2e670902adbf60ebd3ad3c9d552ab245f30e637186560bceb09622c7affd225fb7ba60f45c29eff2a3133db0881cbc09b492ea015c43d3071d5e201044843ec555b3bb42e7d0ae7f3554b05330627e47db2c953753d11fe26538d929aaca521a88e15c70e94a18ec0af038f7f6a295aac729d985f5545efb48a4c2665b2608a9e1d1e900c90cabb384544c0133437e9d19194b7fb963fcbc08208068de2dcf0dd0f3c5651f8ef380321f4e218ecbb58941895f77287685af544a77b39c4811a0d6c5963055477cbca4bfd3bb51b1c709c0e87a2ecb02863f8d713cb91e1b8d2d73d5cfd4e2dca3d35c945141348c2f9927b54fe909ae8b07443323ebec0e7dee3892d6d57095055eba5b6b459fb15bb1d67e35487cc0e070f91ee1ee8e97807d858b4fb467371dd95e73765b0bc7d7de6db1cebf9ce043171c82db136e5d1155eb2d9ee44f0959bda95af6d4014620995dee70d0d2930f643f0d941d13b5cd01fa08490780a245963b90815308a2c25d1792c00eb64fc1d2d12d914e1737f00c0299d270b4886ddd75a29a5a9a7439a42b3d30dbc07cf70d63415728d16a46cec560cfc243223efdf81fa65d2f10f2f9194c47ca89b10b5e76175a5fdab32dd492eb957ec5163592335639cd4f2f9ae6624e895d6a729b5079ee1f45aba911b7fb98c7f8b2cafe24a7e4c94d63267dd686c25a06fb38138dff541a6cccb28ee37ff6ebe284c6d51fd649d930138c286407364e49a478006176d7d047a67611e1909455aeb37076fe3f03ee27c8c736f96418eaa80ec8ee6560e7d568d15a372ccdefb9cfd77e304a52917c970b6e06111df893a482913a144e12ae42c5e57b3f98676cc86946bd8ea18118f053e732359543fdc1b8777ff8aed6af580c9e3a9470aa032ad1405b25bc3127e62ad937f17a896d8218d22c8d03b26d2b1deb01c5f715f169b811b5b9f3403dcb08ba73bf3e4787581c37dc4bdd147c4e62526d4e8c39dbf7862149c5f73cdf2165e1920940fccfc64b1eebbfab9b3114727ad988b0841766b40583b43865608bdb050f6a3317ab5f1e0de742ffb5401fd6bae32f04933839ca24f00f2778866cd08b485c75369e851d7b6b8039d10de30798f68be8e5b2e341061b5154e4a536defad94a97b83ddab1edc4f1ea9d1ee07daba039ddda1bf5b12f62053118319c5eca3edf0b4afdc283eba0129267e7bab1595cb3740ed7d3831760b55ca1dfefe87fe564503d52cf0beb696cc1dffcb44b28a8731be27b1f4f4493cc380ff4b404826985072de162a263ad5ae953c26f93a0001365f37a3b6e4d77b443c1147b2b8847bb808b0e2ffffad8778961cd6f2345fffec2c059ba787889280053b3c7d5e7ec626cd34d896cf7774d1298a2258280e4afb2c79e1ef68c54720e36570c8c27d4341ca523f1821006462546b51539e77aa0c687cbcb50cf464ccde772cbc6deab8b206f361ac7aaf1fd321a8ac0a1f01e6c7e6f47621fd7faf2bff59b881e62bee2089fd847b64ee6ccb98297ba63214c8d3b0cb555dc2ccf1e64df45c3eb5aaad345c5af1ac662515f2c0d6064e601816d9cee7a28ee345f1a4d02e601c63cdbc9686f0f06809bae0f1a197942b307599804632a4dfe850790e91f00b4277fee5ed0fa9c8d7d316967043556e652a9419712292a5765a574fcc9723a7d879a4eee1006bc3204ea1ff16aff6dd23d6db5e536af1eb7bc1c13c85ebad7a08f226a01c6020276c02c3e28cec64278dbdb32fcf2436bf17a3f608e19378cdf869eec34337af3de276e5087a028594cc6685558d5a4969718a5e7b8a996ae7d066631f018e004dab326d3a86fa436e0859b79934131231b3fd615d25046d12b971ed7bfb6cfb9feebec53e5bdb85fb681fb3c16c58785f028567755ddd6894db13f4a1dcd9887ad4a353dc9fad3285153fdf95df30663a89a9d88cd72b42b65dd3e0574add8f28856881defb7834523741a5df33a3c10b6df11c6a3ef6e5c0673a1a66ed81f8ef2895b60a164572aaf5ae6c6510b9721ad9e59bd7384738fa23cf08966fccab18e5b2592a991bd4d7770d9bf01f7b61aff30ebd9b6d2523abb71a13ae75c790eae548d4042b034220e6e69c4807f07612e3f3eb7d87988e1d4ba3a378aa7890af50de8e617504a4cc6ac2d63571209a8ad21c8b472ba8619608f321bab3e991ad4efdef081e26e2242a27b17f0514b361e81207bf035e845f1591f33d3b227c2e052c5fc3cf71e5704fa095ed6ad3aadd4c5cc5aeb7c1e0c09b0583c9e8293a78a0f3465830ee93f800b2ea494965684727822fdbefd95b00c2d838266208b2d345da0c90e8a4d50366e7185949d3d4e7a00dab1052afde69b191791b52c7cb891d6a1933a09c94daa8c687e61324d504e084a313884a524191b8b071606c6fe14f2ad609ffdcb6c6f0d7a0b74e6055e70e6f7ead3ab39dd189d544f03301852203a3a9d9ae6e240d63a3c996a3903bd95357a4a610f0a961c2719d60748df495635bfb6d5459c7f72bb16b49babb6f20d7c27dc6b10b5c3964132389ca19a68294dc358b9aa686ce7089ef993ae9d804c13b71d5c60ba0a096443e33deac8231c1aebdfc285c48d859b4bb4ecc2260cf3947e89af6f95ce0808b5625584e70e91057fd88a583f75f0fb93930176feec769704adeeadc783f4b70d328df0758f3a9615bf6ba247aa9ba20d006c4d76b36773dff6949bcdb061f7b1d041be02297b55441100e46b9fe8072e79a7a63bd628b366f03bca26f7c23359c81b5e0b71d5cb6169c4af19ca88c36e8b2e21acd94cee40274eb941beb8025b8665510fdcdc5114263152d0bee04f43a17a304831367ce21837d9dc7995dd4da7da276ddef19ec2d2d1803ee17113545916629c7297f7d32fa1bc25bcfe3c8688c451c3fca7fd03fc2fa7a2d6cda7f71e8d392821c3e779f9f6c0dc0d53a8bcc5ce50a0ca72044e0e9649bb035885d26e391469a35cb46ce3b1985dcf389a56cb52b472ace24d0786cfe6d5fba4254cc4b494df9bc4f712995c9329871f89cb25fbfdb8387b2fc6f116ff8234231eecbe8a2b085f9f1811677251ddd96b1fa052148cefe1af2512da16044e2167cb28b8245762833dafdffa7d44d91acd946ccc46f2882ce0d561ae3785a867f4d2875e1d9a7c9b4316d4bee7fca9df99b097111dbf2f9ed2b949ea16041f5c3c9d9efcc074c50c21f5a6214ce9deac61dca5bcd34344abd739122a1bf01192a1a4c620d776ba4a6cc4bace168cd5f5a8711f2c324f45d870ed70cac3ea3d8fe6809376ad00fafa85fc8911df662e3ff02679eba513c1a9224eec68a852d1c85da99d4acbb3d580f0159798f1f6560fbb652c77963136928dc5cb6033baacc099983a39bdfff8725d987cc008cddbd97ca5cd5c90382328f5eab46df081fd0d0cc4f0afee55c243010d9f238e5d2e21b660d3072d98f5d10d362dde5969610229c86739e745d1879cdd853ffd14db7cfb4ec403c8c45d2f3630ae2de8a16734931af454435084948390a571df85423fad9816eefc5a97980352abf938fa8e38cb252e8b6cf67a0e57cf9675903f211e6005420522bc53aff724adbc94b53483248f8c4bdeb820597bd2de97c9a2c66d94feebf2e67a0feb741f39e4b661f88841a284120315f61a7242d474e640c0b1ceed6b44b2042abf1cbab70e089148cca516ac7a948089a5dda81e7970a99e8f706946671ffb42bf537fdb94f5c3b3c4c1446be1ed9859a0107b1331f33dbe5b1bfb13c68abfd640bae6ee161869b80518c458e488bdc47dbd24591ae88dbeb9440b4a0f7cd25407b588850deb03c4123e0ee9fef07178b3364c66b0bb1a0e0e6b225f9e80d35a68c5cd26f8e8127650839c959dbf53e4d50e5bc28ff5532aef03c8dae0112347d87e3d4a438a263d649bf5f25d3fb57757b7cad30521c9a3bfa0772290b852aafb4141758a6baf87a2d993769a0c46ceafc5123ebccb0df714c3b5fd1cd0d1f235b1822f49e72ef3bfef0da8e0af684961b8da5c134b609362dffd90e11531cc1c4167ddee9724f0002ebcefdd93aa8602058bc1a54d92174e77b6a489dff28713737b1804f6120b083b39d1dd537df3052d9ee5ef2bf2e12c0d899e73ab84c1bfba3454197e76b35c76fce55c69631eefa39c6f5d71038f8013eee53b0268fa75981c1888bad37761748ea0f73fea682609fc947cb75480ef1d4f2f5c7f2f9fd99f9aebff15b8c5bba6678b2a51847d5cc3481bc9695643cdac32c3347c492060335934d929972ccfaf000a6248c1bcd862075bdff1a976a02322576f74363a8de5af89a360df2b11d0f0b52b8012a53d58a2db0cfa9e680b24a6327a01873cc7493650ea46213f26cea2020291f7d50039a32ffceed5b66323370ac0aebca5b0b066311a63ede782faac7773e8f1baa567a0b10c48bfd04ca14d46ffd63713becdb790b024a5929ae7688bfc0f90c4b174f404d792ed442c21515d641286f565f3b3064812d8eee3077ec61780459198d445a1db57ce9096160bd4b9de3cc92ab4e0f84eb8f85b0ffd47ac32b5909fe027ee0e73f1d433ff11a5435db3c91d91a3b9ed3081a455561b6bb4ea4a024e1bc285a15e0baeaceb86e60fcc1dac512f22b65baa074d6c69f45356aaa80b3a90468500e60fbe79cff826b07186670257c45ed9f7a4540ec00a8728004a1bd4022664b3a878741930d7efcc0a7879af900b2bdeb5f368baece08faf67bac4a8d5e4cd3011c07009a2c8b9c8e38e64c78c6995d0717eec0f34f8c5336d7496378003f6ecbe9222d98a2d1d1d9912a8e89152356596a16e7a5cd5d07a6e01f0ee94f69a600b481cf77b877260a7bfc661437772f4b205606ab8ea29eb05dd755c894f2020846cbee1eb6a52087be04de0272bf7044005527eddb849ebb181840fd18020a4b67a99275e48549b922e9fd390f20a2acd3bc5153fb2b912ed78bd67120bf4732dec3c464893c28086f54cba255c44cea61328dc538befe7363d81f0af754402375c08bd3eff545dd6cec51258ed3f6687260e22bd8666ef184a623b1e4e77d87f249f0aa5cd6299ee25a96ab0074288dceee586d244a6810019deb4f2ea187c71e05fad119075bb59a45a21af5d06bc13c83f77364937438a4667eca1ea9e549c19db1306eb1638859567e5cb30f466c86c7c825e0681ad133a9e40cfc281f77a3b81db0a2fcca81ea353157825842f67264d26cdff2e343770d26fb1045beb88bff4737ff0f17061489c3f5acd3e5c8c9ff1d2eab5856f7383b4b81a1294973431936aecb13d2819efa3d1c78aaba485243b2558ac3fc533edb5b85f8fb481291b0f2fe4f2f84595132a6b62d0246dfd7d598c7c55b5bc050945fee5ee444fc3e69840dd38cb4f6f5d606aa140613f51e60d76ea347fda7380e5da6190cc49912eef3c59f51eac0529166e075dba8f3f18a78306eb06a6ebcf26094719a5051d4e7470dfaa7ae1f2f08cd4098ac8d3f16fb82f76cbd287fa5e86da0b0b6708c4efb89cc2eb6897b55e643b2c49f4b43555cfdaae797c140ba978eb21c8aadb246d3c0ec81a5023c8dd1d01e42dc69667855f2312565bd1bc5a8cab2ff3b8e2b8517f4543c9da2ca9d717d6c5b8c6f0f458d68746f50a2778cc22a889ff49c5fd36e2deca6c5ef8d4d70518454d7e5a886ad675a0c80fabbd98eb41d45db5db7f780749c094673ee6773554e78e45498015cf7cd461c4c5172b4725738185b99bbf6d04cab47b653b1258fb30edc44477f4321b5634d21a01fdb6c1fc2d41e6ee5784ae4d6f13f25f52b09995de63b1dc70aecf8ac3a0010aaaba95e29372c9f3eade94cd06c96cdf930cbeaae2bc382a358617f690c7109d9ce31fab6680f928e3eb56de1df43b186dadb8c49d363ded9d58632e2eafcf376e90cddb1904fb19dd2b62d5372ce3b63d143697605a499322a65f95efd2a3647a743ed62d672633212f5756c4fc0d25abe0b677de90c1b76ff06bd276c823a15addc141063020f17a6792e769ba1dd31493970a5a825cc6dfb6f6483608d68a7a6e238055e871f12354a3eb781f7c6b119d76b386a7715dec7aad8bb01d126c7385a4387f087faec67718f78274cf4a2d7ec3f7c56885c930bbfff1676d8dd3b0b4e1cdf418c086de6f50700b527cfcc2a81d6ba95e30a526eb4c3dee82af6ccc8c5ab55781db15c57de90995411bff6bb9d17394e0d88e498930b597e4dd74217c8d830bec35d82653511892c912cea3248ea43aa8f3d113264bed161cbea659f5e8bba3a0474a8b6017119642f7e6e368a371ed1f290a0e42dc68cb82c96fd098fac39156b5e94f24a9a9124731d4b6f6ce613eabeeb5b55f80ad3acf642d1fc6323f6767d830fc218733996e6724986f5e06a1e79b5082ecc72ed65b358aa21e3d83986c44ce0ce74e458df0fe32f232e0b6b94ad557016b2e6240aea3f502016b44a6cc71fd1bd65d5382a76d9c7ed1d505e75e1355bb6b04ebec4245f8ba0059d70510e65a837f42e1f9da4bdd78dcc988ae89ebc91b6d19204bae8202349b67cf45d22872ee628d7566020f528aa43c938166b52d9bd1a9b3e15beeadfc5333a1eb78aeb2b6f09b9259c72eb82ed89ccb026d05ffc73954fb4fc2e2588b984bd3688cefb677d9fbad3792305acfea58a3a41554bc3814997ad98c139e6d0afef84f7771ea9b6f3c3aa1ebaad7084a2ea1e8f837ff38f3e5c7310fe8ec1b0beb7502d0cbbbac20cbdf0b4bf4a942885d3a337e16157447d844c8d6e8ce101b8fce152153c634af28eee62bb43e191582f1262f85ab6490df88137979c0e6ca6a8808d1a086af6ae20ec5135021f6723e5b3374ed3d745f6a1593503240f988fa27506a487976d475932a8b5ee1654ecddcedf6d3283e141661eb03a8ead2f7bd208e63a21b458c5230790c36f8dfebdffab81dde082c5f52e16cfc240b0d673208155653e875e3165b531e8ed4e0d9d33 +MD = 5377572306ef61982330034f0a28fdde93da57c53cd1365126cd496847bc05694fba3d508b55c97db476a75876ff6474 + +Len = 72304 +Msg = b6320a8a22858bd801c666aba0e461fe1d4fba68c1ff18428fb7c20c1d8b0f0da3a01e3a5233c659e7dcd0667f146436adf6c25aca4233468ca73eb3da421e41df6274615e8e3a7245c9f82a84143a381f35412782b7f98616322b4611ccf463920076c7ed9ecd6b431344bf57ebc94c9c949f979365534953def18e693277bbe3028a33a86c688b0b441eec9fa1fbb94c9c4472a25429d96e36f8538b7b9190fbf11a6e36fff41bc2e3ed7a043fb7c956d499805a8d647c8dbfa95c1faf292c02558d41415f57639379193230cce4c2e3c404896017ea7bd9036a73ccd727d51fb44b716e957baba48d0ad9c8506ced1af5ee545ffaa51e7989a45e3af972d47a98bcc967a8463b1da7273a77d4369224eec0aafd3f7cac95d9c0e61220f4713c884810d4a0a25a2750da1ce35e2af92837e053e2ed566f577c24d3fc5194f38d0d570d5c867652ea0e8b46b4f930694f59b817b70c1dade5f93aed9f963aa494ae5189a861aa698d6ca08193aa302cc1dbaebe24a5b8af67d869fca4f6ceca7af39e4c603925e838ef8295287b1288a5452c0fd0be0fbd06a218c7b27a39ae6664a61e2b16d1171521994a1a73bec6232099d364620a1ee9deb11772286198818ad1c7b101953d49894d68119a1d2d65f35dd28796911c3a149bb48c0a2fcff3ec880e9b0159a3ffaf07b6b7f915079046e0d4e2648cfd1ecc3e66a7288b9de31231bd911f05925d1c2dfdb1978f9acfa289a11dd3e30abf8f02f56b885e487985369a3a6282508b572905aa7d7430488dc200dfeb7e8b45e44f2882348e19dfccfd6e3fd2b625b2e8619648b1aa0f2391f3bbd0b545c8d8548dc8913405583a6ff00047778a5bfa583f78333d1b7f89368298993821089e66249d438ea94db5f7751afb5ae6398a2e29721428adcaa203d860e27df895c2a27c6f3d4c644075ebf6820382b3068bf2894e937b4a3795805dda528ab4b56a90fd062a761d78a5d3da0106f7d70b242dc6d2573dd90d8b3579d092693bb1bfb9102ab012bc3e6b38895fadc23c907e6648c709764295abab95084a2277d1e8a41ba2772a28daefa06b649feac8dcc02577f4502f6d171e69174c21bb4e5c0dd9883728c54b945a96e8d88477653913f2bb23d56f42da0bf76962bf3eaa9c58e1bdb16bec0cb3d49f68820672faed9f567c1a403ea9289bdef112cdb272d7ef4324d8e7a653818445532bcbe26f418bd822a238a48a47f5a51926f3208e56fa87237345fb0844930f119b7bcfac7d0001158365aacd8043d44864d88fe561a236244c2cf3144529850a9abf4198e92557bd8570575a1baaf4e5962507613f0ed78e2945975dcc6c30a6f03f411dcd2364837001b41960548c5a828191e93a68f2c9d338eecc2187974e64a2d6227021b0cd0bbfc7f29769240ef195336698d50f3d12ac00498ba04368c09009901b48c1041f539ace07104469aa09f7bea27fb752ad4ad6bd53e0ba5ecab3e14d16c0219174643593f97275d37784e5daa08e71706eb9770ec26e86964bb06642a9b058dad29b9e2bb5b73eb41eae04a2da2ac6ff1ba1eb261e732e7a0a32a0571c40ec4901a0df7c8306287468305cfe97793d677dac3bebaf163b70d1df9875b69a6745c81a0070ab87ba7b1db2f5d721a65e105c806e47bf8034e2665f5582c0e35135f1b207ee74647c3205dbd813bed7b16280c58c2194d8a137925bdf6782463083420ffedd28c2f6ffe7540c9cb735bfc6b0249e6077470bd71d7b3f0d44e98e9684daec270dccb14b8dc4995854e70fa2b644abeeb0f5f92acf667c5b4ef4f2d67ebadab36ba7347fbdd48831dc15295f58cfbbb28709f39870c59e38e790e5abfa58cf698c7e0701402ce00e99e996665f6ad79444ab8189c73fae8e59e5ee7dbe5bd331b777b33bde73a9d6d189dd1e92bf057c2e052c659d7db244ea1a95b4946ceef333babf935e52eb73cd1d86eebb764f528e3c7b94ba26b542e35762b8423329974970b3738a70afccd5ce1a40a037bdfeac7bf77ee6e3bc708cc6def290578b0541c118422876fcc930c3207b0ba95669d0e8268be95cd1b62c8c90c848811d2663d47468010bdb5228262006c274227942ab92248a38fbfc0cd400a33058e6e0f6d2524dddd8534f031ca24b8d41291749edc3af9220432a75c4b7ec1285ee1c44e2375984846ca80acf2fb136b8742c2fd64096cabbaf28ad843c09b4af3dc3932dadf4bdb82e4685674ea083800a9e3a8d913ff7b24adefc3d1764de7fdcbb2cdb3b86511ca20fbc0b88803e42f357b33b3e14e4ac1934ac17d1635a9cd2ee57136a770957cfecf6e464ba2da5383de207cf7b585226130439f170efb027425cfdc02fab12bec57d1a6ab41952e03a0e1acdde1a4c78614bccfff26460e3a182c2c716fff4758397d422d7c9f0f335809bc0a4f3411708caf7845182560ff2128a0794cfa6fe0c8d3a158b07287a1581b32e35abd90ceec9e307f4113ab31d547c0712e1cf614aa776ca3999a27bc4578aa1f90abd5efd8fb71045d9b3d50990c14ff6fe18a4242cadc947480501294a47a058d895151b669c27aba16a7fa00e8067aaee29d181660a9b1fdcf9112ca413b4badc083a3294bad58e3307b8c915e2d89479a9ef4b9bb2c7271d28b5b5ab156387dfbfd3296238a1565531896cef0f281e6741076914d0d5c9d337f4aca9763827a962ebe8183f146cd090f872e22ee2af7f9820c3198a4e6cc5d1d7f9e45db80202988757fef6b4366bcd10c137688bae8a574241f108b977bc9c6485a5f36d80b209b15e5c860c1df090d64236e4ad85512575cbe6739e548040a536335fde0a805e70e57916a18a258054dd26cbcf9b99abc2493ef3856ad966a2f5d8ca9306353fcdd49ecffde3d446917b51447a582d9030a342aff7218fb662abda5c15de9953ce1313d9a791c38a9502fd783524d47dc8c13ad07be169d7ed3e823cebf874437e8a205b27fdbbf3695c738e8867551a918b6e7d9a1230724b9818939dbe8eb6e2220d7d068e8329146ffbaffb89790e93ea25dfdb1cac2e859fe488b496af5504c12169cbabe5d59e25dc0317f20802d6c4a91ec668a5b4a13d2d44b7ea9ec8eb50a544febea79f106460b1630bca9d63034061e35ce3abaa593def2e2124b69fb8e139272e922e7116cde2683a8688418d33d0bb612dbca5da5ab0a1a309c829df1d6dcf636e2bc9226cbdace8066a784cca95d5e04d8f9caacdaf99d815a590afa10b7dc5033d2070856bb97e10ec11264cd5b93f09cb96b0de159e280ff5dc0fb439babc180d7fe8601317626db6130503bbf0e82a189cd4d40a36fbc16215e6a01f0db07742ed7244de4cfee56f86d0356c01417820b5fef9b5ebb9f192441eabe7fe09e68573f67bf4e2b93fbf726f2b1374b4ba88e916933f44ca682d719e1eb6152f2e7e185c4b7c61fa4550e0c92dd6d2a7bafb4004ebcfc996eedca24e41b7db8a17d4e48cfd9e4f2bbdc7d7c882dda2843e1fc3b0498e03864b47e1165b0fd7826830df6ed88436b370cf605374516cb20f9c7903f4a47900461535deb6e99280eb3912eb26539dfa260e8252495ab999f51b6be33638b36da8eea78e986b92ea669884e92d360d68a62c45ae4a1f0fa1b7449f3955723a36397c3d0e4abd612aa2f43d5137530d65bad2b14dbfc9f9321fbe1fee9a7b95c1c1640146140887a667f6460c8ad2255928a8cf18f07ffcb4f332f3e84d7b4c780851fb1f3d748ac87c46a6016edcddacb955a6f7246aa28ffc472111b699e8c2d5e9327f0f28f4f7ab8b65172d99bec635823ed3a5b2722b02a6b3501dfef006f2d4ae50d04d4c9aba6d8c380e304f0f64d6a092b97ef4f1cdf6b08cc9d2ecae25bb7778c90a1b1b7296224b58c918f00efad31ea9f6b14724e021af033c6521374696e14288e8e19bab2f37548ea2cffa95df5dbd443096d00c0da01364e2c7f01c127182ee3b54fd57bce64aa57415f150cd393c8df9479a217c474173eb0817e6f312d3659cdc5f40cf3f8136172bbbd3a49970fc95c047c8778cd591084c764b41ab7b1594e18b0e732a436a117720c56c649fb68b6ba2a8045716e5c2fbd3f40523c325aacb476aad8fd668ec63e8ce2e8412e663af726a2e904d98a07df7884764f3be67025cfc875683592f56da97f1e011b2a6f37eb5fa1fc2d12b3aaab00d55530752ee926b0868926563b8bfc8bd60e342dba18f3272ecbdb9e99bb31461de2b29f3f8b05f38ab4bb30ff05f099aecd2bf8a206d889de086786406dc5b4ae7c24bd28680822008f66cbb688200916c24513cd8e06083e1643524e4eb2ed15861967802c879c767dab7f087f058a9c8221f7731b0622dd8a119af9ea934fc1950326cd251ef36b140bd34b570b7ebe81452c693a435a2ae834b8f9ade16d513d7463660e38a73cc70a6125accc65db54211ae668682ea4953f34c42527b642c3efa5f1246f288a2b2990fdeca2c0915f385b9121cf00e93583b6cfdcc0cb04dcc776e5241d07c1a4ebeb5aa3391f7f171d66eff2f281573dc4979321671c15fcae5eb879dcc581b8b3e8b24ce9f2e32022b559586d107d02545fb4bf6519f48806c5e18228d238fb34119b565fcb6beefacf73deb94ed947c5878af355453f23632506f98bce55d0ceee8c5be50977f8083db5d2419cea629aa7ac69b23e443346249f3c700a76ddf6e7fbda344d95cfcd58a5ffa07b2ee746288f8ef665a25c122cf0c770270a773e96603da7f853cadcd8aa93507a154a5a82badfbc4bd7f279a6c226f6a48f3128626012baaa309d99065a59dc0a4c003a6e94d85e61638acf4a79d78df3739026d461e606d39aac949a2b9f9dbc21ad7814d4056746c3a995508e65a0946618cc74ec13f6f5107c51eca4f13ff044a6964dcee3615c86c36e71863dd917c53f8bcc7549259f208143764ceb1d57038017520c0ec7131b6cad25e7dc81fe2f78e73383e1fd2259500bdf89e9c0411cde7dca01c4231af009f3e639ce55a7e35961529e7af83f196cfd80f279c35ecef62c2e46bfefd4a32fb52ad29faeb5af657c922b709145ef3caaf30d079100b87bc4f7516e97c0b352736c68ad0797e201ab8ac16f72c7494396be303fa3c757e3baada83cb57f9ef6b1336292fadf09d27094e6c3f733c616433b028e86232ba28fc9b1c6c361d490e11836ddf2fba53c6e59121aa93bd43923020a50b294b25cb6c414893bf7d2b5a5737bda7a6e42c3f74fc9d0031ff200d8abae32b3ac7a66b23536e0a9d237e950ed98350bb740fd9dd174809f80be21b68064a103cae24514859f897761728085df226a31574e3dd496a8b8c8de86f05f28d4381d80889c604db4d03f35f13fb6d090e655deb9293df7ecc539b9eb11352d63448b6debc107f62d515bb0525b565a6a3613ae20343c8da7424c8368e8cad6a862b7d37a577e075f897771148806e524c5e55601e352b06ecc8bcb7f0ba2ecfa2f3d61c2c45509d1e4fce8963a2b0937423556dcbb1318b9b072029bee3fa8fee68689439c0f661af0769775e6452f48079e311f2fe02f0e8a89c95e0503c32d451dca7b432fb491385efe2210e7dfad928a7557b65c5bd3d75d7023d491a3ebb77d95d85e186ddb29209d393e8582fe7f848404e2ea37b01347a78bf15bc3d0ba308bf9416c0a6f5f55f519e3a0c1a12b16fdb54a1c3b19bae2cff4dfe4bb62b9b10d4c918d02b42789864294bc043c31ac32d73054ee775ab96a0cf4aef3285279ba50d31dff402e15c141d649d3360fced3e94a46ba5f6f360622e42cf3880114e3846a7158a9ef9556a60cdcb71531f9416a0c44374864d314e502e14508420d3975ec399747c88296ddbce7185024b61be7daefddb8d82b16a1e56e502f91bd2ca3bcd943a0656802676afb7f8d748fb3d15aac263735b89c080016bd748cbf2d7c70d2d65a32a039b1ab7c65138dd0c9b4effba92a19d61585f79ce56d7f8dcc8e8ca8d7cbacd59d6ad2fc6188fd439e012f70cf37d13e038a10435080f6938a5884edb07b5082bdf185fdfd643f32c1548d8e10b7084af6a30ebc87358e8ad748edf408ffba121bc448f3711bc038d42d8eb6064e3b776f6f276b1211b3be33fe2c6e49bf460e2771807f95462cb036da978b2853c75dce2d1ec159abe2b830d6c4beeb3080f17187b0e4b249d1537a0a5c7fef6e5868938b4971f64ab8035e714b5875f9f7467a557ee550bd5a7d1e2b31f6d4044b2260082bdf4094802a0d4c24ed62821597b2893ed4090724a783cbbca27eac3c15b4025a7bf11ff796ddc5e5c0495f684faa81754343cdcc6d4b4a60e537cc87acf02849da60237ac4307d028382f86bd8d2ecb6b58957be38e555a34197ebda62b4d87e6d1665764cb5e00fa9b7c3acedcc19779d525b8694e24c083a279090d162a16cc69c4c969ade8d61a5506787e8e6963c8d374f91fbb2bc04516f51477399f199596a5f48390ad3bcf8d55a9944c2e179e7908a7ce7e7143c09d7846ac3bb7788a7f90407a1cb615626bef36d9bd199b44ef6b2b3e3ffe2f3e5d8c0773c6771bf34d0d1515fa0a4e1b185e85158a31d7025e25eb37a5db6e0581b8bf967fe9eb1827a4db1dd2b1cc42bc2a000f5a7fb31feebc5181580fe65d2f85d6db1014ce4036defa5b4bb4791f7ed90e91d60918e5c6bac4e301a281908f79b40b2100adb5a242da940e1a3bfa87f51661a6d9ec9a0fa7ab27489d25e5cb1ec1ee59b671bd9259e493c3ebfc1aff06824871f71987f0097013d407bca308fc664b613d00a12ea97e1f1130a3c80d92b90edf6985f4926a7a704ee82d13719909ebe09d44a9a0bc11ffa0f0184cd923237b99391a281c5131055d48607d2b7f14977fdf241c0d1a06fc193343ee8c402857476fbe6db747fd9caa303d296136ed15e60a8744a049c3de24010cf64e72306991115b098bd346fbdca7ac5e3944fe2dbc2657677ed3b26d68635bab463fa37a1d29d845bf7d74eb9cb69565db33ada9aa3c7bced2403a708e6018569d32e95296be1d697ccdef349264e086708b64505752dbc1c216c2b13d012b3f7ad06ab9a2d912bde94c209e65b9750920d28ae96c735f8776dfb4f61e4d7cae06a38f77e9819f892f816df1bebd3c361292863d90a4ef6a17227708d94cf3eb6932be5314beac1475f43ff444791e556f52c2146cef73b0cd6873af1506793dca056017cb9821a7e42eff70a0f401ad5e9ba535a75bd3a2bf3810b27a84f4ee51a5de89b518e68aa4b6132e7936cf8708f4976aeaf0f788161ab6dbb1cd4e4428999e727b45e305dc14e5f378486e2b95e50079ddb7c7aaf996cdf062e96d8874690a99c5280160b4d1db8a4531c8e12cf6492b27b72c4f9135bdba35e13b01609e89c83ac726e255745fba87f9c3f1f5b0d84871f90cc1067eee01d0bc9ef911bf82c5822c3bd4e785d84ae6a949a2199a1698628351467ffac98dde8280b6b2545f59465f297e918dae030c48413ec03d6be2a35fe127242fb425053bc88169e5874c2e66d6287c1348ad9ede920b111f40f0db95a6ac1ea71893edf05ea25efb6266e14b2c1ad09f10104774265235cafb88b32b861c95ea5e9d3fa92a61bb1d586f0816129bb4b96df3ad10e45a54c60673d32b6bc1b07eec0ca36c1306a5d4d12e4acd6ff550eac71f78bdb46d9499c779e29c3ce198ed2ca7c04304d846a7356c507a2d6ecdb9875d51807ed120cda8618987e1c575bf84383f35e220c61eecf1c124334f53af1373e0632acf1eea0ff56ff341b56e7a5e85c74a96274dc15e8546d469e00952d429cc6da1afb77666fb3de846f8aba82158018b08320219f4f08791b768182d3249bda6c9b912fb143c9a6fd7d855d0357795ff208c0dad14f92b630531a8c596995d178b35580081802f8edc9b947b02aa2aafc77c9705276adb523b81e0a466e351c7d06ab00e158fa34f3e8a8f30f0bb68a1e349c8aa96093e6741a1e8510ced44be7ea143ac38309fbae3ed6f776770f9df5d3cc723c89ffda9ffd9e954ee80dc057e223862522dcbd6b40c5bd8cf9382711e9dbdf824f3bf215e700b367663c1a3b935b8b8cb4cceab992e7cdc90eaae5d0db4d1b214cf2dd544b0757e0a609ca01622eb370b5651417b9dfa0a123e22ad11c82cd8fef9eecf9adf50b4143d15057c30f8667a12fba1409ffcebbd5689691422f5f24c3aab174946c360fbc3d3d9d5a808cd814a75d2d27daa05fafc8997fd0b5589655a0cb3382df70b27ba7f2408d242f586c466dc177f2de32ff6ca41b4c97424b121b8ad4edb133c00eac0effdf6cf65f34977c8f9ecad0ac60df56e20a4794b9857580d759a407cee1a3f419c5cd6a52ea1509d5f0e51042509b2272be68c8682c393d994b0a6525914a422cd4c803ea1949863302b4257b6b2a873bcd5d75ed72e121b92666c46a99e969a780df5b7b2eaf722568ca88edfd0805abcbb7f5aff607dda5904bbe04681bdb285e85c98cb6a17e3b879aa2e0a2ae2e411deaf0363217b1fd0d2baa99885c271dc25dd6a53de9dad3e3970c19e89741aa4878ddf6939b4f1df18922808714de0650ca2b4b20c3489d01623cf03b5e1035dfd41787a6fd1586e1d6ae5fc0f050509e4d0fe4fbc827e5656ebdea076cfa7248af456ff8c7a5c652a6b69dd2593eaaef792d194b82f94b842ef78df94e70fe274ceff5e595606ac87bc3b147c9e973d8b0eb3e8c7e4d3de22582427d6d0427d04f6fd019b0e5d2c7c87e407dccf129fe96c2fb3b04944b13e4d6be1053248df8295d84e1d4969cb51f1ea200cce65ba59d5ca5e3c05ee17ddf7d373e9b72aee36d216afa6b033724d24d7c6d642987822710e4f33c1daf9497ee6464a05ef9467d6418bfdebc20ab948326000d4b1c08e6782ef5d240e40c8092cc2f0c49fb85fc8e049eba11f79dd848458532bba79e3e0aea681d794d2a3c02c4fa39d434264d17c53387a50a90101541597f0ba8d6a031bdd6981749922cc6e562a37e219bf199c10ac205f806de72aff94cabae36bf950fadbcbb47c8c557a3d4e3c8427b8c7c8e80e3853e8685d8e7e1162c1632ee9d567a05c5e622b82d96ed751315396048943286d35c83c8b09fad85fd7f5fafc338a80de7935457c124f8d20f285a3f76589c0640c072f9a22dbaf6a04811959f1cd42f60edc236bad4a3751cea525c9e6229fc8e08f8ab262895f2b51efd12a9797b04e243f0d7632c69f8cce9c65a194778d3fba4795fa506db049c5276b94ae4f908ec3464ac52a2b8b78f950aba8f6ee5271a117979b74ed696d69122ec1bd5fab5ef3d924811de0c4bd57aa3f0594f0b5089de7dabd5672543e439664d94c2ec964bde0e1d2914f1204f09268e1f6e67fa9b69fa4867f6537655e9c5303e324b24b2843cadf10df3cf5cdf16f64a53678fef5283e21762cdb89bf0d45680ba92db93dea27d121f80c37f5ad9cb5284a68af6168f0b4c331085370cf80304b25035703bd40cf4d02487370b037fd0788176402480168efda856a78cc4d822c00fccc82a55c021a65b95047e08863cb5a4dc4e1b0bb6481911c78dfeaf38635a2e0c0c288c592128a27778127d710fb27d177058964d101bd9322ad13bc66ee7477ddcc50c1a6bdd75a8f266c6b2c1f566c2677b945d6f7c5b312eb2eee47dfdc89c8a7e39966a2b519413f978ddebf51e6793d2aa69cec1344f0a123d2549143dd2c5b2b95fb498d2d35d28f854e647f071761c2cf4a680e0e63d5dab0b28b123caff10efc8d3ac55f12ea3e9ba5954896a9ea6b0709f11ed814913ad08c55af6ef970761843fec775808c8b170bdb145dd6e10c970111ab6cabdc2d790878843bb3e04a2f461cf93729c25e40a7bd4b22474d8dc7594f1d90cfbf9bf44e7bf76b8549728abe1cc56fb2939f5fa2c355aea336d5df3a33dd0d28406a8a87e672c516b4d571d28792e3c60836bc23759bc993a5ce27cb4651ab5f6a8380db425c120f285d2baae3c75c0b270c9f535c833abfa05fe7350fe2311c42ce2171151d1a17aef1026fbbcea229fa07505aff76cbce3270669f17f86906d233b472ea1da5d74d793c49940e7dc98910165fe6dd426960eaed32e4fc19c6219b800546c37bf70dde225ff8efb593da103b8a9a1e683734b3c41500540a0437ecce53b379631ef606fcda6ed9112ef8ed0504a2a305e1b5b43371f36a04671d10e684b8a727f411da12e17f345b43e891bdf586d2e10eebd5826e43a5cf97daed10bfdeb38d236542ab9db1685979b3e2aa85cf15c367dffff8337a6c323d766d942cab065e50fa2711368fddd47962ca16da04d375939818dee91f29f601fa77b9f4a9086125d96f8ad39efc93eafd30471fad73bd3b1e097cb7bb43e38a6df2c93f6021604a09045f9c682b60758afb867a535f64077abb1ac6d522c181d7c80a3457ba216792ccd8ba74d301c213151b137dfe329eb315003ef52e588d40e0c5fc16396e237db13c554a5d3f789f654e13b3b8eea9d1fe7646a4cf7057b12241be25080d26d19ad594732fe23f37d367a27df562cfdd60c306686dd0863176c8a30d8dc619966ee9a076b3b2c1e247ade7641d54b9de2230a7cc7041c3c9c4a0d3553263a4d517c1a1db5077a3a8a9690bef988d0fdc2c055155408bb680f41275855eaa6e957ca5be2b6df89091e1e435a7cfd578e0668a2b8d4576065eee66b225786520de85dc1fed74fe2ea6d8638e1228f39cf0b8065efbe7ca5c6b9ae4b1beea5a61b81ab0eda9cc5125ee74313eba0cb124170ac311278f4e5fb0e1d49bd71b52da2c236750e7ddb91e719e956c27e4d5b85a44076d9aa3cbb834a97d97f973143341884a6f300ffec1383fd641df1628ffc34e1b9adb8d090effdc28ceab5a6a130031a1730bcae7b54a3d3de46c0c72a2591047bf72b3d00a1a601d6775381a226f07b48301763da3b082127d562c7b482472d205e87fe8548c1fa48bdf75ed0999f0cac8997bc83270f49d3623e00a9a2d5d0693c45718935dff05627279ab7083d52d6a5b41500b947d25355d8fe9407bb729928ea5296f96ea8713b5ad1cfe379f2390cf319dd52304f4a28ba0dee1166a8429cfd0e4923ec773c73177075cbc34f5627eb17639267050a6367db225075c5f810d400ea15d7e11a56c4036321a7eeb09ef2aa5dfa4ab8269e58d2db6557702c1d35d7247fcf6a9d6f0716f2759644cadaa05f06ea59cd1122038163908a1b412a68fd72a2119838145707be382cd627538a8208f322b87c970e6375929c4be9c103e04f2d7cee7cff1a7220f9da3738a207dfde95140ebb85bff56bcbfc7688698d2c24823fd1ce87e7c2b53b0cdc814eaea4e250dc344046beb3c0ad292faf9c7b3d9d40f8e6bf374596056c533a93a1f59ddea6b9cdbd82813b1ec6b0dbc1c2349113da26a1c1859a587c1e3bd5d24463170e175b4f85a19dd7c099020f61836fd322be4777781b7c8693b13532efbe7dad0b132f1e2b2c6b2670b4cb3ef1488350348de9ec353152ace6d5cdd62e78abcc503aa3ce309b7fb3897a4aef0399f5a4d3997c84ab9fc337efec643420fb83f167fe67e4187751eb858a2f941ae05d5d8a917db52d9f34b4097596d169cf8cb8dcced9d45538785aff34d7c2a9c420c6c3e67c124db82dadde01e4326b5d3c8f093c78337967596e513ad20f32bdc69d1a08e6008e831481e801caeb983d09e087b7d165f77c8bb215ecbcbe3825d53ce7894a2452889fdc8205b94192e77b59d2d1640041f075b2d7cae6643ca4d322d6e826d25c21161a667e4df8cdd507577509ae770b5baddcf165eda5b2a326db4295fabeede51dc7ffebe755bb8e4475d8d12f5e96269abd0d4e40d73cb966e2c523343e9a6d2d71a8cf140cee8ba91188c8551b84e9d2cf75d47e9d3d5009c5c90071d5e401bb840ba86262c955abc71f4fbe325a0ddc80e5a8f55c36ff95f0e8ce22195d4b5e9b9308411bfe64d312d6e7c937781b2e7db72c5388ac1081f08eecc37d58b26d04d95f3e8cd041a5717a11149f818a3f1284ef07c71f4b544135dcd47688cf8d7c492dc939f174995f636c1edee8e384ebb951808c0308836f781ee399400b265e5ce46f97d46635591d49567a20af9675cf045c4bf9c0a5e7c0336f5a20fdde179f23904aeb9effeb124939f5cb56fa2d5078098b561c2226a8bae63dae000b548a5bd9b7c9975f81ecdc57e64b62168ed81d06ceca638eb88c05c6c839ca3481a90dba62d0e7daaa07833ea013697226b073e28aa94f5229f4b4af6e66a4f02b75a9a0e0a3f907effcde4cc7c5d5a361840d1b43853802d77d380ea4c738a4be7ac03b95b5535db0273e00d1d52f10ebcd591f8de0a6176d8010431fbdfdf8b712e1c906877f52973132f932c3ee4101f6d86dde3e221638a7de0b13cd5d32a1e87ef7b78ce57d11854da48f148bca608b1b9499102475e54ee1c54567df090b6608463d582e339b9dfe713b4990037404831252e925bce00fdbe019300bd260160e12ec5ba21ca205b61dbbc58382a90dcf65a03bce61b5451d0a03986c252c63010c6919e9aec14714d8a52aeede9be1211cf58a66fac199359189136887dcf7719118157d5085cc9b507bec3a5db9294896b75787eeb166a6253e3399610e2de02f9dc0d5a84c10aa03a48beeb68d60a6618a15b9b3f157ff23877b77471c80dd565ece7b2ca0bdd170b38c844f8501bb1bd25774f10dc7911 +MD = d3e8ef0c120279753ba4211888c2b079f5913a1d9828500cfc68f29c9b182a8d38608cc7dae41448198ab428231c24bd + +Len = 73096 +Msg = 6561cf13916860ad1cfc43650d1b5142a12041aeeadf6f26bdf1db36cb4d75a50e1898ed67bfd4ed8542f0e208d32f94e69fd3cd0eece00f4c6422866db0713ca349348c2b8b24d92c0c5380e32b6c0afdec3ca7440371d87e2ea26b92c890aced9cacda24f7d9d8db017225e54c8f0eadae8422d44cabe71bf864cb84bd595db4b707bd9c287a5158c957ba575e2007bd8db42805f015a5eb696e9089b655b8c0454d1fd9498fae6c0d0a288188a85df633d3a02117387ab52acaa0eadb0a23d8ec86e72480a056df759155abf3ae772045e9716ee89acf43e280e5ef550207c654bbfdc5f536b179a8f62b1dc7babf036eff85358cc50a5b3a9645df4cc5cd5026f44904d2d827024f41911e2b549c66541bc3bd2b4195c6da16aa04e7d9db3f0a37b2293c0f204111786ef8470576129f481350eb94d64c6907fba44fc89b5aa78e237b5d6204ff97a5acf14454b6d0f88b5d34f74837b490722008ac1a736ba60081435d593b0488cf32524acac26607ee89b275e51ec8f65e00782555cd38ae95b5ca647c2d188dffe86380ed039c737880128ef1f54e44d3853be203108b6856a755995443034e3cb66b0f48e13ce431289c69f6230f21da969b0caba42a7c4a3f2f2468e38c728e84b41f60c50c04226a982f7b10d336791bdecbd6f1dd917a669f2e40767da2fd3a84d7bf15d678522f4d070924622abafd4d460b5f6e4fec02ecdf65659c8592c0245fec3b60ebc95d041a27c783a6a52230a6d256a360aafc5f5e5e17b2c454fedce06f9d730390dd058f5d6100524173cf12b33e4669bc3d40d4b3f386064cddf382d1a5d668ae98988f335a9fd596d871b3377f1d1528acd768ed63e2f48043b36c99b953c32b750542321a29d8ac3a60b1e581f109f8306b4393cd8c35fa1962c74f43b0bc105b93cfe10965028c7fe23346ac89f034b3458c2d9b4d72c24849ba7baab6fa64348b5fc8901dfc3d914061e069af70e21cae6c4434ed53deb7b06ea6562d262fe735197015176dc756c2643e1e29310c53ec0b5f00347f584dde0a57afdde77a5cd92660021cfe33b8af64e535c0dcb93f47900667ea9f38f41db7171d8de64c7bbfad20bdf457889e51885f143c19f2ca0923c1d1d65a8493b39d6d0807cbad2c2fd739b0671fceefeef93225658fbedb78ee19a6c1594611e9e3e1d8113da55770cc32413dfe0d95cfdfe9ce03e7255bde16954e7344855807b2fbf574e43de4cbb393da3d9e4e773c610979ddc92f3081c6be32b4c24a4f553144c7f8697cbb88b4e5e231a4987d7ca71c8dbcdbe543aa241ab84c7b9cde1b8943b764746bc4eff9afc1dfbbf48fd9daaa7268c84e7ca0583349021883eda0e1802b82ac10e847a779de0f8969959922398fa93672c3ad8b914e9f4107642d62848c18ba750ddae9cca38bb6ff7705a6534e47ce5a0117e5ba2dec9d312b0a33d643ef45a21ceee52e771aebbe1d658f7f1609370d1c278d3850aed5082b7f7effb6cff69dfeccc32ac283d0af7001044650b81993fe25ac931db090944ad468854f7f757099bcac45ed8f0cd956202e2e621c1ef58d596951feb977de71501bf275c96923d705c8095e064845b80c35c1b5fdec3ab30aedfc5a9032ed893cbfcd8f737bbc9ff13efd7eb02bf97f0b4087b1232b6a57825f1b98fe68ca78e07b9f07465245d8c637a9b5545eff91667707be56848e6107e83722cbc17b288478ef440a97c56ccdda966cbc885fd86503c9455d9eadb8e2b0d75fbfe70a7f70de45ae87f145424e504b09ae521f3b4f0c55ac0123cf465bde83b7a17f7e67ebd429ad8409cc4291c050f6f36349a16eb9345d0ab8fcf2b99bc4923b34e0c73f8224a9cb866254dd532e995365e4f40833edbe40073da4460e205853ab3786b211bd0a22110f607c306c5c95fdf91b66a208396ab8994448602171b28f8b8e8da97d385252dc4eb48192a683d58ffed02d0d35527319bb08b84f462086e5c61871eb9c23f0d006ce6b29dee395ae858dfc851abedfc4efce3f313d65384c169a928f9c5c94f4711118b86e7ee55e98e738f84f77a4a2c9e21c4fbf484fc8665d34f1a1c7e54e75c7b0c7bd1c6ba81f2409ec3e456bbb318b7831359270619ea77d9a142a8ce9fb365ade3385d293028d96eb4eefdc1810127b60050b4520a7c198115b4e30caeca83f863880c028296a087ce73f9ec04cbf4c63997b760c67f3abdee0fb7afb2e63874634d6de6e7c03862871fb5abbcfda14c257aaab2dc784df8a09f81183abb059a78f4fd36de49f397554ecb7127fabfa06a9608b8cafbe5b9c400f9f6a49d6dd30b1b3472d478849edf9da5ecc467a27b6f664be3008e7489cec06c9b8f21f3d6903cae4b78f04dd18c68df6f10b8ec35aa57fed22b848cd1274a639768dd19edaeb5c4f12a25c1d7d24cc288ab630f57a2079c068a929138742b797ac02352b0cd23033466ad832a47c609c9d2ea8e59fce1ade0cc1d24183bd018a6039930986210f365ccdbf44153412f9355d3ebc501729f015ea8a808c4d4bbb9c193363d03ec1005bb55b7a59b6a8e7572a3aa21663709d8c0b9af82c5a5fd2678c5c5f73930e3a4b09f2fdf768ea100d7de3be781ab58e780c4ad0ea4c0376ca7a5725f686be8c34b1cdf577b4a2195e3e8239fea4c16ae1d4e2314e8c004fcbc96ddee181989d1f943489620196ad53555f3a306a5cdad04daa42e1801e067562e3b2bdeb6516139c6ee13eb68f72f2abc2ea97d24d864b5eea2c2a912443cd2d04c8102ced9e19b0c526963d55104526f371ba455e155defe916b227dcaddd12174965acf8de38b87f80effdb03054af39f6212c55300be9f029ffab0cedacfa635c41d24e7e789de516d35e687a252fdea155edfb7e5f32478c9b837dab42cb312a2e08b625e1453f11c9c84495c38c289bddf218a860b336680e19f78ea86fc9dbb3b6fa7b7c99d5985aa30e2a33b0600c41a17455165405e5ded4423ee5cc73965942e02a5081eed40c578ce07e81cd1c0a64d62e8afefb2a951b256401cc7783a61531d765e6d4ed6a4c8760ade9b9f1bfa208dac3976160ba5869a805561ccb2497b42cc4aecd0af9ebc651c8cf6ab6e8c2d002c9087faed6f2d6b1f851ac965b3033d174c32253439a135cd51a29910e2ef74ea53a9d3d70513428e2a76d0bd249746e7d0b1bf1cfc23429deb43eaab84d45655e14033510dd4bb4cb3fa853114841aae870ff0c25ccf25fea84f12a6e8781f0fc7df9bd3ffee3febc01a495a097602dbcd918cbce1e15a602728a39b8447596885fc6fd831cc3adbcd5abfa089c99a0012dac57512265a82d6650fe1fece70009a1b31e679fb46ad4a303aad0c1b6abc05604d8363faa0a73488ca22ae7a0d6872b084870ef7edd0b53f5cc806d7df5003b687506dcab77dc00874c629e68bf0be50da22874e9ad69cdc989a007b827c9c41f5648633195717786254d7706639bb709551696bd83f6f9c708b9f92de823d973a4843b040c3993d45575db446b42894688c2bec106bbc0377252aaa5e11762aa8742ccec853c3db8036233e87f05430a64b552bedfbf0860eef482e7baac470d260b7eb1a8835e79589ae5bb46eecd9e1176bc7cb50abb8ba526e9bd1aeb70e4aa66b91a1c15dc607ba75b8569040f4ab68d62c331a5bf00be7047eda9dac6773adce5f08afba1b59411fb0e8f4ff1557c83ae5bfb97fe07625a044010842f0dfff46afb993b93c0cd5e2f1d61d85c098adf060bbae85ee8b96d887ef7ee94f02136b003f2df9cc84c185e7c87a636ac0929d49c16a1c9eaea303c6f0522de66c72a20d03ceea31739c6eff1a8c1698720ea7fd7b9c926561e2c86dae327f3b81959202920718ff3bdf14c456c32dbe2f8a86f8148685d747ce7cf893905bd2e404a19d8466f4aa50020dc407d007605b8ee0c656e87558c2deb8042aec4230f648574a355f0bb7429db07a9803320378941be4ad12cf8e658c0ffceea6d0ca5ac939753f6fdcaaa60ab354a20d4c3c1932bedf719622dca26ecb6f59608623641fbecb0d09c5f8ecf16cee903ea46ebfd330135ef2edc7fbff90b7e5a9b0c0b4b45d9818cd862679ba63a4fd17d91fdf0e262ccfb9aed4e4a6f6833dd30f26cf1fac890d1b6bb7eefe3e24433968c3f93be7884e4ad497fefd434dac8cefca05ba120a34840531bf1542c8fd03b1ff90f51ac25526fd65ad8b2d73cc27e12f1b2c24983987d1085c98181fa527732728b236476efe97d262a90b92174471ca51ee5abf86a75db06a0f24a4b5e4fadf330ba09406022272d10f7425185310205c693aec966319de49e30ed4b9fcd78c425a0044b5022bab5b06eda939e44ac59d353bac033b83c68eac2d4c2baf87b2d935dbb5f65f22007327de9b0678902e96cae37a37a12a2daad3065785ad89f76a277984447993f6bbfacd7718707edfcba2b8d3be248b5820e030a342576cae6797802c19f1f01287f840c9ba7c653dce552245014615fa736c22ac0c3d9e5c641e861a0158d4c88998cf0f96ecf1ecf14ab64aab76586934cf52ce2dd09d95e214d1ca750ea0ad1354ceb528529341e6fbfb610745d148c79247a631b0f8cf642319d9ff93e224c7d4d666d93dc7f111f15804bf350f0dbe5d87b0a24f2e8d6cc1b4b4fb7927c419716c71341f1e5ef4c352b24db4602c8b79897a1a1bad446e6948e8133ed00f8ab30780c376f50021da82060d547329a18ed36ee3970378db823cefb155796b8e221df201c5ea790bbf5c6ca885c689b2f5ec0bb951bfbf46b50738604d826cb6373661799c7d2e24ea484299d8c8c1125739dce5cc307c327a3e5eaa879987757ad74b855b1b840fd3ec444bbe0864521b436ef3770434213a58defaa41d405e65870ccf92443f1f04aede48b5e3e7f4caaf1e8ce2b97b858ddd15db239c2bd37fbc41b2c285a3f505067d1b4109d07cddc3780c8fbeb6f1dd31afb67674be6731ed76d97c6e57045d899d3dffe8924cdd2717ecee927ad8b10d19272d555c9c14a118ae105cdcdf66bedb2b42feb1f741505ab87fc33bbca1b5cea7a8bc9af4a05da3ab3eef89e8c90ca35daabac40e92c5dcf9c3cf7e1017c25cb288f90de36da9a44b5874f2b2ed09826fa7ab2cf559fdfb2b4b15c6659bc92fd24eb909fac4eb9718edababb05b2c04bbba5e714dff7f51b78644894f9620d4715a7b339d4eb9f89e7ef229839bea86cc6323257b0bb06d38f5ca4b109f6fd73a4c9e0f6d738b55467cc6d08f17cb953c22c7adfef7379a3a3a15906b301ca47785bff1cddbd6199b77b855455755bc75898a9f5c5a8b851593c4edb1d0adb8c3a64f7f40d030c227e0450c48e30f78f3080a6e15ae02aa55b346a786f999a0991edb2c690911fb5656db89fc435f374f1eb59ebd5a6376951919724d2366e8826fd17da8eef001b14c0a42f1e0db93e44e2aa5b5f7f4763e25cbc286e6abfcfa09c0e772ea6191c3205fbbac53fafb5d06c81781ff5c25cb79cc0cc6abcf6a8a8d27fe6983dd17f6742a789e1533fa03e91c68b3e8f111d78598d58eeb579d9e6a85270f53c8f0e5d818fe499d2d0c9355961dce3d69a6bcc9b0a1424dbb12a01256f5b6d2cbd8fb9c99b121543c9f65ecd3ab33750c6115b6b1f4832b90665a252bfef2794c2cb2623b35d7e2e94f061f43a586287fdd5ced0b43b40d4e150703528764cfc068a4a95bf0bfc1b987fe5d747128b03a881cdd3b13677b6a8b514d9933603ecf193cd2aa765b6933d6a927c4a2bda4a2ddbff7bfe81fee6c55a3543e97875edebb058e753b3d51deb7b11ed2ce978e6f6ac0dd08464feec9e077c7d1084c9865ca793d6ac3d80420a780a32d3958d5f69bb9eda29279f519d86908ef2a22840ac4125fe984ae089022a24512976403bf0d25ba2d611089c289e1b7e761abaa24346b76700241d7a3c59085415d6ba04f2b7ec2f746b6255a916c2558333a634897ef01acd115e9d1ecd5e427efb2341d733f889e97dd40487b72f1c0337157ee7b1791ee55acb7b114dcd244e2ea27b060e27b91f8f87322a490adbdd6c2e09c3a6f97b32478d9b7ea3fd016cb75f39e91023c6fce9a366fa94fa98f91b1a5c8626193a9b1fcc85cb9597e1c0de8303e70191b86ad34f295f5fa85d3f8b00ff99f98162072cafc262ec43cd32eb366168a81c985094b302c174bc319706097b62e7d8fb60b45fd9a96fa8cbaa259fdcd4ce6a6d9575f8798899dd1de9d25d574bb8c60e8d0004520ae86fe610d6e7fb943b233f23be46161c97b3271d38231bbb33f5a17658c5b6eb1d3f234c4435470eb7f016e1b7c462e535e75a1b8084501a210abf0303ca8cb6d8c18c46b7b247ab0a79fbb7a79be44c3d21bbcbf2a77dcf4ab06d1c4b3c5cd2df9d28e7798683d3fb65f58dd8f224b775085415d6b52a44768db5a97643afa7fa7aff15d1d883ef545c0d4b90f2ab8fa7452ce273d5dfe06d499e92cd060b9df3001ab906d0d065db084ada18c3003d99804b181230250bf68d30bf98aefb1c91d880bc6198f19f590eb420b88cac271460baa1fbed832ddb0174181f62048c9baa39042a556e0395195306b77635b7df8d8063763582aee24c7186a94bb055da1d4e7ba932d0fb59cf30745fa82554c4b0a548cb30a8f7d41630ef809086df16dac60825559dee6bd85253f64a0365897132374105806e7809b73dea5b0e931689a992e8e6604494ddc189c5865854f7772e1721dd8f7c98cb105630d1d1d7a4d10003380e9e649c8686001482ab88d66ba1d2b3df5f89fa0443249a1c5614865ad2425ef4e1b84b7aa89e2b668469eef4934f3f3477fe675d568d6f6425b385cd2737a2c2b0a769622f4d515b6b5f06bb0d760d035f41a77d537bf9d0c71a69d207ca4b9d9499bde524f4cf89e9d2e867162f6575a0bc820e41d57e89c3b3fa107be3a3af14f610ac8e7bed17852a5aa1b7628eb2c1d6c0b5298347b7a1e500308a6af020b8272a5e75c9f32dc8cf2511f7f7d1e14af6281c126c9c80ea1742d93d477b180892d3a4e1c829f5392a115eded6762ac38684eb047ac40f25b389b49b628cbe8da0d326db5fd79460a1e53174e8c5b6b5ed9aca0894098ada209d69aca36a3aceb9f18b6a764435c59d6b31c21305ada893325f24a2b11a92c6469f78f35fb55346f67c97f6b9fef1876907cf40803722e01655628d05e6d30d4cfe0838b157a5adaba069c57e176bc5a85aa3587c7aad3c0d52ca3b4d17285d7630635ca9474b58d5a0e8ccdba9bbc1f0d3474142a1d00fdefe6395d1d4161e8dda91458faecdad3f231cf318dc6ae1081ac2e51ad214c152033583d84627b85aa79bddabb3b416b0d20e237cd7ff8fbad61c2a4b35ffba310648eeac94e293a23c880a447f87faef55c54250c30232ccaf5efa1ff41b6243b2a5bc93e7cf17304460b6a439cec1c5534939dcc7fb31074f8f3cdc34f0224fac53d7d66777adcb652bc8110a12d2fa74a3f1680c73f6335bb7d8cb2004601f9f5a25bd3b61bb3a47f228d41ad9975661da513cbaf2e8187edeb534dde2857931c3908f8c15ab4693bdbe3590ae77a1c2f640a0f8fe6f7d5e0dbd5f960ffa260a95ff96811ce3b7f192727b9416daa23e00a8dbee21f32ca34cd793711426eed3d8591843fdcd55087b2cf0509b28227eff7036c5e2dcebf6a1eb1a967a70983494885ef940cfe7817fd4dae9c4cae92afb80f9a5c99383ff16e23a2ec942eed4d273b0cc6e533703a652828a1926bfe9fcc06cb55f7ebc65b2a23c618703b65c9a0255e40ec00b37f98e305923a56c630b18d61e2b065dd07d1468563e1ab973f21d9768a87e2cc57f702c7e69afb7412f708107b69330ea8020053675f1bfc2e4acbc81c5f5625441e1bd2274ad692b71b0b399868efb58c2af5d28b5ef90f177970d56ec8d748c45c72c6dca054ac8d7c0b5fc255d87c54ba7b655857cf3a7b3c6d210a5ae2c17950cc286f52122c16c88cf571b6a9cd724f259e56d00b18ca12253d678c0509a3996c4967d67b9bd35f048d2ee1c013654768efff5e392494891d7d1ee2ba9c0374f7dc4e841d7653ce16a9728da808be31d9ccba68e5e86b1fca8288e57ff2e991d3439c016436188417bcb500edf7edacdcd720767ddeae24c0c04e0ac1a8f67ea301c8c4ec65821fac499ef1fe7b64070671ca1d7d71ee5674c8d6d93c189a79dba96d55128f310f28d278c7560dc1dedb3f0fa4713cac237b0eabc72bec4631e1acf228631d95c131e9daf7812977a2cf9179c1d5a957fa37f4456b2d7e9a25598eefb57a8b20d43be24e190c5905e1581b90fc37427269203c2c1bcd5a06d2a7c1ce82b57282c6cb6e4a825406fd19092fcd99f2929beee828d87f77f90cb850d80726b04e1bf754f048f9f4cdbdb85750b841b4143509e45cc2fca9f62c44e9443207d7885d146ceac1b66b17c85dc730c989d831ce38a94a8429ffbbe606d598c7bca7bbd67c77e06d6e237fbd67dd2289b8fb85d7f9ab74947dd5d4aa8caa4840abad5318be0a637477ba500d750da861758a8ad2cb6f5d6c6eb8bb1a34dbd5255b64d8844798d6af69ac5328e3ed54f93601bb5f3c6977848334d9959dfeb20e424ac6a9b7a7cc56ca55d3a052d09aa980fd91ddbb2e556541c6dabd3667813406dba8196cbbb70300636bf4406bfc0adcda98ced622799720eb18e18cbaa55f0fa3f7240549294ca23186a51b23fb85a0255aa30bea5682a71e3ea30f7ca0e7c3203e89efe4959c366cbe33618d1bb2716a320acafa7ec05aec96924d11f656d7ccd89baaf27e6a23616d1fb1fbdf19d715c96691b744c8a2b2cb1fb40f383494267fd9b507564effac2dda6b14a81437b48b370ec55b14251d36abd2e8c909beb97ed49ca7cfa331c97ae41b5c294a19d2e20c8089243b388883d738233b3e8df2601cd0381d1f4035dedd3126b51403dd78579597329673911d124243014ba85dce02ee5cf10bd17dc4165b28ee1a7c50c888cc53f8ce6ca37d0d8fbcbdc984780337457ade013c0dc53fe7c726b5e9b93d408364093b6a5c2df97f14c330b8cdca1a7406269806624caa6586118ee29340ff593bc6761307aa86aedfa409abdb6d3d08a37d28b717d4f652ea110ded5b9e25bc4fc2f6fd527d358d81f2ccd40d770f71c7444bd49af8a44e67b7ab609e8f443b0481466fb90086a98011e2c7e072122de61e69c5682224a69377eff2c8beeb441e83ed0097eeea716e83f40df0d8e5bb845e1b201bec0809d1d4640a66877b75e23d43469b92d173a1eb790ccb35ea9926a5c87b02a0bec6b75f701de483853ef42ff1b82096ec2edeaada4abbf3a15541680a1cc8fac98bb86bccb3ef2d890dd8de60cbc3659b115934905e5fac9a5e692758abeb54a8c7699bb242d3000760e4cb28f7f0795eb9b62b53ae32cb463302662caed648ecf82f61c9713c8580e6bc78a2c3345cb78689f16cb0c1da2571b196fe7c0641f68c9e508a95983875fdc46976c40b8a26163929741c7943c888db5c66ba17ca76232aea7e4652936714a1000d60f28c3ad73825d237e5b2afe6f408cdef776cbc2a49820cfa0820c4d9b6eeef3065dd56482b993f9983813c1aa03ecc62918359209ec9cf27255b2fab9a889498e1e818f777d5f4c7df49fda24460cada12b8dda48f342d6446ccf808a06f86210356f343917e9a294577750c751141ac6767aa049f23b027c8d0ce8f8cf64c6f268465eb2cf5a864728432b7a6b2d9600c3a5eef434aefe84811139ea4df4fb9e80ae12c9ecda7dfd31aa7324dd7fa8b7d8b6cb3100c453c210857b47c6d18b7a45515a66b890111f385531aff031d8537e5440e89da488a00111b7f98322fef07ed43d7179a5c91306ec6d02e96bae3c7d275301547825841e5cf4e7cc10da66f5e2c4d378412d4263162d051357b3db9dd80e646d65b3d82d0f3af9e9c3a9467021f572fd8ac614167b7ba0b51a6e96a60f79f93095b903f7d191172162f2f7b839da374fab1bf2e9c45ebb16df67d65f739ba9e430bf6d444b0229bd163ee195d37b0ab8cab542a299df3e7fcc270491ad7c5ad35d4d7edc2494170506146cce97ded47e101a6d0aa1041138093586046524f54345ec9e860550c9415bfc002d2c0d7beaa4d4dce985d71d89bf19c680429c637d1023350c963c28b93c7e05783b10e944ae6bf607ed6048ba165c2acdeceb8ac9e57bab347e631ab5d223e3786bed04d45865222b7fa67b1235851cb20c19546eec7b68c766ca887c447202f565aeb6e1c84cca1fe6b19fda451c03f94a2fa8b64fabd48cf57b5b57bbf4cbb7d05be6b526a755a9c8899a5b6daa47684d346de73393584dd47d798e5f2fa48555fa7c969bff2b92ce3756dad6b64fc8be308d4ac2bc5ad0aad8cc6957adf6289c955fcd4fdbb4a19fc2b9a2a7c885e0442bef2724ad44de20943b2fccf62a694c3379a269c357a0e432adfa0968507a882e7bc681ee7c3fdebaad2ae590a60e0dddb15c113f7f55448f1929241f185c3140196e00086cbb8b520ca0cb05d4df899aef4571d8918a68e2e4781f74464fe86ab169c9827a1acf623fdaa5dd1ba665721ba3ae15f605f733f82f23f0401b55b32bfd05e4102354f42e209c9ee2294c6d1ebff37f168f9a883c9657196f881f236f73dcb7959fbf0fc1bad8d29331e494dee1669c59eff9eb98f4e47a3b5eefc2661375817157bbbce0ef80009586d5ee44512ff728efbb63f493f1980d646c99f624f9cd0b10ee027308bdb150f0c88338567715e95588f838b9a7fd4b633faf08f08f20cd9500e9624db66c2c37655ca339668006ea0ab34daf2e305f240f0c85bd60041ead9a79950694b9912253806b4323bfe576e69b19bdadb9af6c85b953d49400661f64bbf47b7e20e77b3bf77ab9d75af0c1c7b9852a4c21a50649bd5c7d529d0eb405b668f49d2a9608c4cab6e6a9d98d925313794035eea7b9022086ffc2617c342672d7b8185e069297000911c2c526b232b4de458dab1f4c58ebbba40dd619676ef82b1018459fe05ba15a8149a622ea0da19a827fdd7488f525e2b25b844d14864f4a44c565cabcb9b6907f6702e9008ce3973f300e0e357ed6e372d3f28105157f1e9c4649edec594695534463e3bc5683bbc4cbc5551b9e06a62c9ea81b00c4918d5fc4767239e2595045075078e81489f058768bb101fbbe1228e32e85ce3b8c81d76676bf6bfdf7a99dd952104a6dfb1d4459e78ab03d0511adcb0d25372178e14a55cf3e4a512988a2e1f013ac0ae32ad19e6148f10de48b047ecc65021e5e9501b80c559d87f6d59d48b2e9d49248fe446a81538a1362667623f3acf9dc458444b8b26e2e466778d63520fa8aae3383e8e8d01343f6878b49e30a61e20035985b7d4bf0c337835a95d1c3ae9806aba0043dd5f1e65e5be2c5e59aee863536b88d2e5f43250152612243226ec541b83ddf94185339f5e75334522abaad2151cc23f474cf1c4ddc76c4b4c5a0d8086243c21322a2066032c7dc51432d1e6c8dbd65f614fb70c32a82c54c35ae9a02b298f5e27a47134a4424070b6cafa3bff3719b5dc631e80a436b6b32f9fed3d8af25c02aa8a828592654fba72da802c289d10d5013d94dcb2f1bff8f99fa4a3162d26b13352f0f35df3d004e0e80041c59c503f8815967adf778c88a9e08c9b6d1883dc4a8438f8777c96028989f71756b36c47c9a1afe59a26c104c8f92160f062d7f66894b6ff7f7df615c526e1177c50a9905e684da7638de1dfdf4fffae309aa7a2061b1782c66664d13c553acc8712bcabbec00c2adc2b539c356b73ddae0e8731bb7dc72cfcc486a7477b70910777f9fc534f480a646dbaac93b22a79d95ceb57e13342587326c01a8f203f1f8ddf05f4c46c9da08cf37b8352ea800d430438772fd2158fd9fba59d6be9d2c27ad655477abe8997c62b1ad30b4b10f27b731301ffe0bd5d91b1abc2761ef8247efc5c46feab785a90931cfe157a59d3c347ff9ac9d5a62c2ae7470c3655fbbfda9faf85b8ba06538cb9f68719eec72beae152a426376c86061b0bed152579ef3e5eb3864160a02d0b1e3be0711ee56532edb0b08d7c8ce5c3bb6ee79ae3ef4d1aa80ccb2145d251ac1e619cc391311a3bbb9e32781b63e5e446e48e5037c853e01a1fb6c0d0094bd058ec3e89dc46a575d97fcc6e9a9df0d85c1143ad87919e3f0360ebb875d186285c40382c6672b171c5d9c0e980a7812059599a3b69c786882274dc60cdb78b1487120c23a661a8a01f30c27153fd214cdd42046244f6974bc5c00b623e27e51567b63d18327005913419438e8b2b5bce364f14baafab6afa8be6fb255daf0ebb7cc14d72914a42c5b2f7b699ac9e8b2512f54dbd00325c34d33e2e3282b9726744a7bfbb293d0a9dfa60be4b2ee359d1f1b911e1fd37f55b3a4a070263e3bab93dfdf66a80e4a7ba98c8aceb88862265312ef3b1ed28b10e3faf282d779a4211f728a4092ecdb48c1cb415234ff38f4f7fbb75a56681399e41b2041c24599311deac2b0f9954bb92d497895afba7fb012bd32a54dfedd9bbef172d46f0be3839731d0de64716275f7f077c2b123ff01ad42a5428dfab3bc7a632f6466314abe942efcf35be8e82527a685ffc0a17f90cf715b599ec65ba41f58a1183021968b1dc98d176662a470c355eb74669cc90480329b1306c89dfcb5ba0e1954418f9139eacd710e475fffd5e4f24b2a7ca306c86dac974f6a436c4570bf8e5afbfd79f079022adaffe179643bdfa994aad63eb00ad70e0013139bd562fca0cbb6a7ea4a5e756953f2f2877942fdb82d8c2a533ff264a0a22ad73270780d772dd9568d50816e57ff885ad11be193a07c8b66 +MD = 6486d90890cc9b399c800127f495bf67f692511b6f26c08c53aac308d3d3583e7184bec5ca9d17905d5b9717d43fa0dc + +Len = 73888 +Msg = 6a39c81281bb2979ecdde0401331c432a97336783cc657050a40793117a9d3a37c807875023f8a93efe1aa6420a0b4ad5803a9b2d818ed9e30feb32454a7b567f2dc28170382efdda11b0ffa1890632b3f2d91cf09ed3c4b57f87bae106a8a917456c042ad0bc121a795f5492287397306f8d418f6ccacd62735ba157378bbeaa9f5283c28626925ac57469a670f9e4f546d5bd5c83da5054abd56a2a45bae3a3ac1494d9b0f4db25667e8350faffa85d1920e4ea6c88fa26598399dcc9bcd49cec209bf2e9ad78f4dcfc56241f0b5de2671d5cab9f6d27323cf494e12be7fde0e0151d80b8c6e863a97c36925583722fb129993284ed641296870fc9f4e2bc3a2850ae2576d795dc5c5cc91e471e819f77b40ef1c5904d3226e94f19ad33bbe31561a233dc362dd9563c724a6c3318ac3b6b427bd9dc2f3b4e69f732cd31698637d6be4e31890ce53789b6892d4783f07cbdb8232a4796787da78cb7dd82419e201e36c71f36bf8a60d32a6d12f26fe6ac09f4aa4f692f844510741b469cd0853ea6c0510dd5b22372973258a59a490949fe7c53a19736e9354341cfa0f792e6141edf5e85dc816aed4462fe6db59bd2e709a3d1d9786911beae7a676509054b20d4d8520fb1a9ab216930a0d3eac4ce039a2f874f83229851b082551b77a40ee5676fde03fb977ebf842ff260a07075104e63f68c2defd78ef7fe2b2c99fbbbe244fa552b20e7502813c565ac5d1b42ad84e59217ff4d69d6f3425c210688cca80c0c49bdb7f5b9fba6757d0f9711c12bec290c6b6db7c9ca21036a8133b7db971b1a4e64275f369a9ac4ab12d5107b2bc2a2a80f0fbb71c91f95c8d5a815433000a8b597059030958f47624ead83db2dd6e7076b4bc4fc542d8e0996ea3dae234b3c21cec915426cf252452b76e85b92677aad18a860b41bf960af3d607d76b159591583e87ae6915289c621c7ba86fa12b20b8fac1b435101922c41a171379ab963f35efa1d87a31e6267da1676f7d557319548dd5124c3b4b7033c33a55b2ff9f16da86499c002e460acbcf9b9f8b4a38dfccca2aed2c4a133c6958d766be18995c708be6c0a4112f8f732d7d03408960b8493a280d7d4458cd8e61580f46fe6a5a1e87df0d0de48bfe9e4476624519d4edf363383ae832046cc9662416f2bafc580d019e4be3af419f739aef8341027dc5f1cfc03b141bfe6142f0a3436953359e64818a42d07839ba1bb94e2fdd4d428a6c062ad9ab072ef422863d6054d1ff734c8f0bb97a495b97bd29fc2ec1010a828b8edcdc52ff7c6d91b15a335a3d4121edb4897a89298f7e827062489426bff777f1400cb309d013b6f86286249ee3ee6e776c4ba621bdb69218e745ffc5482f57b7bc307630122fbae3bd1f59fccc23f8611df57937cd8814a9f2eca9e48d735466ba1243792a09c4fad3c6a25fe607b2f90240a975a73c30a9ed063b8e760a9688a178c0ee00e9fdc60d45a7d018e4c5c784f3dfe3331a10a23f5b5cc8eb3e44a4d92b98967d178dced1630f564a0058530bd8c2885a69d91b50b3b59cd4558743caf3717987da9b9a88e783fa64a5942600b5fb6c0273b69d88d6ed11199886ecdc97f4a0077c4fb39b9aaac34f19a1c7c9533197147ecdaf4f8cad2fa24f6a2777e1c812e643d2a070442db9f1a4a6bed07a0d1279d346d90d9c9dff57c25a7c039795d70a784ce971adb3e43390cb947cf136e417ba4aa32acf648821387f74e88205f85d62e417059ce54dfd233ad034825515d87a01960eedabd3e6fb00968e6abe7cc64bc3b193da6bfb38a718fa62f312aea35d923921be19e69051066b5d17686b2c79113f8530ecf6ca62909a6d0d14b55fa92514cc0957cb0583b97abe50acce7935f54a426310479d9dc739bd980435f6a7e4b075980c8a2fd8404b17de32ac94c79759323e80f5989fe85eba5c89334f9ff5948631e129f49ac466d18aa10d657720f4bd88e408a2b21992cc214cb952d98048659d7eb23e0f6c54551aa1f9d48db8a34b08e389a51c825c5baef5cee79cae557ca48a2cf481619c0a56dc79c95086ef4487267f88264d44cfcc2b7bf632a642310daea0fe36cac65708f7942c09b35f10cd55f233189fd2904396c767e19197eea291154477d05aa6f69d53e501667c17a217ea8d3aa38f06dbdfba22f297dd1a29dc93ad8b9be15ee974bcdc7dc8ccc2ce147080d37e02995bae5c10addf9b1c6b362323bc52e3e6a924dafac801d97718f58bf42d5bb4b28daab6175992595e3048cb8e501ee6a8fe56b22529382b9f4a6244cf8e602bb7377ccf203fd7a0473fb995d49026740bb0b24e46e79648a32a02a2fa3fb5f11222ccaf14a8d7f63f623289dec493147786dfb5464b42bae9817ead5d88838e2916415fd9dabae6ae5f5bae94348c4f544a86ef0b9d6409db167d6de0b0f28866db83e6591ea7f5fcffdb0cde273aab0bc24e057f2526bbe0b3a8eb6c01296930383b4c7abbc6ad920a5baba5e7c4b202b7e0fe892aae5a5f1ea72ee7c151b8eef6119a26fb4095d6488294cfba53eca2f0e3e210f6246ec220213e3b3991fe0addacd744243d353181f9ce46e90fe0533700b9fecfb17d7081bf244eb112c2ebb5b50bbc7fe4160c7c6761f0bb1f167e52df8c3afe7d11d10928e70a71fb8cf946d33e76545ebfcd027556b77aac16890a2762accaafb14d80048f55c075e59c58af7959ebd3b8dedbcbb4826cdd69de2780443c7d6fe64cadfd2519e8a8533cb2f0c34f8b6a8aa5cf108338dbdb96e3719439d25ee7363659b9af3d2fbb60411d3f25407d4bbc8ca6eccbc30dcd2502b0084956b43c2c734ce038a9ded794136144a6120a9fd6f92709950a4bdc9ea2ab877cb0c8994d6b4e1bc5453c23761a46a64eae788e61561b0ce8f5dc308a2a2bb7dbc8e2242387271260f993c88ebf940e25fc0f3fe40a4aa0cd6c0af07104f8406d864905352d9e6c10ad29ed6468122334e419dbe77d7c6b4b571b45d997dacb3bd347650bc67dd1de4948bb817f898e824fdc89f21779156a9e58564c4b99004b95226c2ebb8aebd0b5365a6c6ac1f61723a1728e400847322a094c5188fc86a7b6234125728e5ff1d93bf1ad938204fc4ab0bd4260f3a9ace1764e71b6cc06571c920d785550d8469da1a8cd60946038aa519397df00e2dface685323dd12761b1b7f7b0cb9afcd9eaaea8533bbeb1d32dcc1c1425f89bd474a3181f86d392cf5bd928543b3273b1a6ac19c78bc99fd6ba687f419aa27b911ff330bdf79aeea90442c7ec0fe1e6d6bbe123b2b77ed448386fe5a6a7c82b20961ff596f9ede4f59338fd00ae6ffd510f96ec9a29a2f531912775ccb2305289c26e8e31f5961cbdf004f21980a45f298c129f0a4800ad9aacd9583a25a399d28a2a2416515b3d0803eecdbeed48b566199f62877c5fa18a71ccb57866e9a805d599dece7705f0dfb43db7785d22a6119d835d9b2d867c09c84ab50fdfca26298d05e5e0cd5cdc49eb3bd7ce38fbdb300207bacdc33ee41f99998086f60ebb4799b460d4bd27aa4e902e5648e69bfbce2f739ea5a64f81d5cc023d65157c1066e1ef7833ad3001f68b5f5b6ecfcaaff00c0f33ac3f81fd3249cd1535a3decd8e4dfd5583073d8a4ac4160fc95c509fa08122a169f49cfd3ef8422f7c08fa9ac7c5281e4f3217ec51239b99e0f3f472e576f610652e672c02c2a9b4c5ab981d1a31b6fc1c9686d0139135223bfe7fd1c8d3d1a72656ab2f858d49cb95f682018e79f016749b51de99f42dd263e3ba634f80fc8e36d230b1d0436b9d76507fec2c851e95dea942bdea36cbd0df0c6ad18465bfee1d0cbe58e9ca5751ef215687fb3d88a0e3281f160e3d574537df5ac26f6b61ef616a1dccda0c551089d2d079038a75600980b1900ef31958f4c651df17782cb88c5614b6abefad02cac9b56a4c522ffcdb19c0d4f13e59329d2816d08475667226376dbe625da64e3c6fcd04df7ffc9dde5c1489bf085efaba6c723cbe4b5844b575ee8b093d891d672cdfecc3f7256b9caf7458813871d9d4fc2dcbcee04a57c37860c6a7769e96d269b5cd00a4f18d9c7ba9e93eb6daf7723f0f26bb1e84d2d7a78a1645f22de2058c154d9f6caa2c66297ce3fe6ae17b1c9de0f58dec4dde7a6c3624ea987e2888ffc814a739966f831fb2efc93cce8e5a7e67df4c31efa3322e2a989e50d991e42896cb20f2ff7f7ac716b4a814e857b54a6d8d01d7b0488a562f1969028545a071461a127f2b83d3886fdba2da78ffb469baa7b4c5d9f6074a0d4f5496cb6b4441a2a886c863a417c9840bc076c6ade04416d46be3b1d433738ce366f5f32b58ff701e83b4ee0acdf41eed09d01a8abf4149bc3019820b9539747da80545ae65157923122d16dc7d70052885d0bcbedbc91a080a4f92c2b5058cc420af081cf3ea85603a1b2143afa501653c5ff370bc455260026d2b221c3d9d61d8dc869d88e65c7d03645866ecfbda4c376309c8e81bb96b1e5b9353514b6ffbd8720557ae71c52175f1036ebbda57847dc544efe9b517d26801127cdc95ca3b265bce75ecf389f499aa6a82a5aa42b6166eed0d4779343ce848f2c5468576c9cc7d291dcad470a07677d4cb31d361890b454b4988d1d852a516795716813a4cd2c25d78d17c42ca14418b70e7bd7da66331a8cc3624cabca755f15ad4f3e06d3e10b4ad8854c71c7ceed59a4fd05db4261c4abed8d9d321f6eba0f509422ed31a5174e478c2c73eb568fb71f275cb5c5ced7a46f75abb2a9bc2cf513cd6ed266e6ce647272f09d8c795441c57128d460e8c808c1a0e4a7e9dc0c596f517e410404952fb1f045691bb5ffac406116c1944e0a4b9c95d47c604cfccebbc6ddd379ad0002be8a7761198ad639088d8307e04d32ef58daf7ca9d8d62a781a409e4383e937fd088231016666c9a964d1a11c584c6567ec6cafd022bc286696f8f1dd047c419909fb4f092e7472362262869c4734933870fca9e2ea6b0eddb9fd9cad23716428737c97d0f7bea7604bf5a9a5d971fe8fa1c8328836ca240409b7675aeab0e9d2cc6cd2ffc92caf4f66f1d0e017ecee950636126a10c1b104108f1c8d612118be9e33c83daca6d42afbbec4f4088dad7227af102f7f38ff0556eb81ed8fad381570394133a9145c1a92c44d8ab53d824d8c9cf57f8c17542e623460237c3a93fecbe50589c75e9046b46a324a24e2b44ebe6389043d46f9a7bcd37fd630b16fa236a1dbe60f6db8d7e81a3ddb5f658c9f446e94639cae3699ec2ea6afb4fb152939d58df287271cf4b73c34e66eaf5265a623de47b135522c7aaf9f550ffecdba5ce7e156397503c6a836e01257a74ecb6dec2e5683c49787efbd317249a4de7d2840a0ba2d40b774437109082434c7f620304e381a444bd3d3bf23ab6bd4929b244892c56a6e7e2710557770dd400711475604967e9bb737ac1f3eaa7b762f3cd9677e20f8e8a107984bf1f188b254426ac81918b8b323dc04444a178471fe87cd062d73df97673b62b941332f72f7b112ed5565ce72d7e962960f998baf47a58a8b686527621aecf6082ddfd9673888c62d7f26cbc21a874f7d54d99a1752be9860f59ed9300041dda17e9d8f7b5eec0ff06102b48a36de5261e37fb89166f97deb9cc7fdeb63639eeafb145895b307749ec1a293b27115f3aa8232ee05cc7ec3962788997a8979c14d6eed3c9d7d017d9f68ad6f211455bac0fa9a435bcd76f1c85c88b7c5bbaccf319dcf437c0502b25c1ecc51c166c5300c1260bf7baf0990e805705eb440244ffe5263761893319c3baaa74079b18edcf4942c6a4eba5e2760e8e7972f6208c91b5351dc5a6eb6c2a5d6e544313bd746e146a54dba389e3e97ce96691e6780c5f268407d2ae0baac03682f65d14ec9f73cf2746fa86ff05ef57e24dc6998b6ccea5bd862712f65e3bb292cac42308c766b5e41d801a87d0de2c23af8f83dcf656bf3c29215a4deee37e185206a29474bd853b391ab2b6cd6c66080c6b39ef619ddf7a61500874e55dd58e1ca328322ffe99872a19040e63e09219d4d8302516fa9302bf41820dca11755e9b08284461908f72710972f13cf13cd3a954eb308ef3566fa3647b6b1594ca245dc4376db219c367ae7a73f1a104d2cfea7fef74421ea60bbe37493f405e3059c565b9f08a00d1e122daaba24891d05928a79172d8e30e8150487fdce2e46479624b448f61dc27798ea87e658c3ec229d46a95aeabd70c4b0a0673d675bdc30dc5035b8cd202509b326260cdf452349c8e4740aa43610bd35bffe9be6140d8716e2c539b4319d9b0cea6f73e0972843bb6bc46d82827a9b4c69335e73e14116ece04e11d3d992f74a3d4a65844265d81de380cdad2814269ca7eed0384be0a30454b789539f6ce316289f28f3cd40cf975590704cb04826ce8017375ad952f70945e8e95c0c942818b2560554c023f2d0c8dc9f88a37d6289fd97dc041400daa1bcc87915a7708ef7e35744cfa4750771444ba189881aa3762554075c82501374c04181a7f869dc5cc38a2d8e009ed721d1c7c076e789b13d0037008aadab6c2b593a483a87e8dcee5bd708b65c062a89783842774931548596280eb71d7aab6e8f9c17f4dd535456b2271c724015c850408470b6347a54f6f0107a0b582399e46b4d360081130d3bd060b2e83533781f3294925833cc783915d58dade810fe36f436ed84fb91cf46be6c1240c2c8039e5450f088cb8f89f60d618cc655a7a20c333f84a9d434611f833184a3703c3274b0a0d16c862b50d4e19ac27d25524c0c2e51429693638d6d27995039c6f7cb4a4e6d7f2ceb09927c986a76fbe278c6e1ef527074c08819d8b38bbd294c6196c7349d40f1828f1a963ab8ef671380d6317e2c566ae30ace0a2eee149c8ae25d946c1a5de3d426afc9d06b76ea41d445a5e1c53ca1855174a8a0ac9eb909e3e658feca1e29683618bd606d53acf3dbdae422076a402dc5d35d12aca0a950cafabcf097caecc6281e1bf5a5ced4b1fd5f9749d8277064ceb2ce8ad66593e70161684c68ab537762898b94fb2f8b04a29a655c22bd59b1d4dba6131234a057eee3031a240787024e21b44757bdf8723255f765cc72229c3f148bb24854f727fb483560b527afef53ad3f15a1c144851556f46bbe8ff4ad77262671600ec2df8f57a8280253f4c7d8f7d307c18396c5b4660577e05bf66de4d91e5742aa260811d90179f3d27e1147c51923a04b17b9754cd2901a205163eef41b6cd7704d29eb97eb5c70ee745507e0b9732461eee9c1d202be54242c18fe41c7b905a75fca84560cd761edfe1c80105aff360c45dd01be3d0976b1b0127a86c745b599837344e10cf5ae1846ec1a1ca4cdbf96411e9bd92d7a680d04dbcc8cc619d08ce2ad93ff94bb40b771503dce41e8a5450c33f9eb7818128052fb5a1b6a3b3cc9a4ffd9774c33fd12aacd51ecd655d262cea481bcc6ec5c54bff88efb5bb5e398f0f27e12db64ce7017edbe3f0e1d2c34aefa9d13c0fc2fcf755ccff3428fab40ee0dea98ea569b1be037ec8f8e499d05d5bcb4b90d52713b9cae84ccc7cf7e0bc8d886d120124d592e3344a401e10c1b6b722d7756f60cde5b77174e917f433fa3dbb884269fca73296a2c450deb60c097a4721343eee601db3eef4149a6e225aa9fe97ba305fcb1f8630d3c5a71833981dbea557b44e9eb448b746d964d420502ab827c404dca5ac4a6504f917a5cd1529efd07a700fce6bde70e9a217b4d27d687e950a57e1bb8b4bc5b475a0fd3cf327613ef6e2806386ed8258f9238ead24cbc88bf79a0d911f12c98eb5c37d07a48ea94d779c6f12a80e82115908c01508cd1c69064bcebaea27e6d0540fa3b1cbd82e88570e1a4041b9f6af4c3807be7bf4e0a8d10d839d7f03b445bad60fcfbb8c678c1f982070e668468f4d41b3ee00dbcbe7c22ffabd303ea84b74c72fc5f623faa55bfb002908a1f84dc6b6633839da14926453629ec021395dfc5372192e374e70768737dd1aff824762f674217988813531f879b68153fdf9bbfb754db62ed98a19dd3601afb98b288c92854e625f684ca58f9e99066f4cab5e3fb7e81073323e905d993b3998694dbe0b14f366d7504559994fbac1abdbef3d80a85cdfccdf2a8498cfee4af4a34371d081d50988cfbba8a61b9045c1f231f46ed530766436ba510f58af5666df8642837a47ccdc4d1c2d2670cdf52a461ffd7aace77701ef8aa031a1d2de5764a29a846ce0134a3ee3519afda8724d3e05c314be0643fe5007dca05a0d555ed914f463b8129f6b3badb093f0d42fb3408fdfcd77018fe20ebe70cbefc35dd5a349fa920a73a3b7c9e7c48218b59ff5042ace15765d9d35820b0714b1795a6469dde79fc277d2a8500df7e5d3e1457aef42f87d2a9f0e61309a0a3b6db3dd73933d760d8e93aec5649cd54f90cba2cd7884f985023a560dc0d7f47072f7499b95e5104bbd5b9a877e20e71ffdf95a55164d4b9dabb3f693894140844fa84145086130dadd3418771316a7f769eebeba6f2869476590828b106288b7726b36f8513e624b7cb1bb1caa0a923673105255d982dd12fe546c6cecc837ba79a4ad3e06d92f1dfa5904d0d969207d97f2b7cffc090180a47426b174ced7edd3e9067eafddf1b2f49e684bf7beed3d472a41813d1780f1168443d15ef2e3c20facf542a29954baf9f657d6ab6852f61f1ba202133ad614b2e93674f1d0d5f78b64dc1295a7b286690576195b11fc186e5b3bcb24df7b4c082790f4e3f548ced5a54d76df95a5b5c020257c9d384344d34d8164d891eb1794d3c5e98bbc96d88ce2abd806cfa8b99deb0888d847b2ebec771537a4ee9ff7d75257bb7fb35aa50fa179cea1d2361260da71b692cce57e086c69ec1052146d4e47c8e33655feb4ec7659c31729d840a762f39e5334359bb591e1dab148e30878089c1926311d7881b5ae4dfd52f9e4d00920a8a02a3d95729c3f8bfe4f8639d33933a5e5c111608e0409d7bada354f89516b5dfffb582bddcfb5885dd27871ee3e4211eb82851d6fc5dee8e62bf50111c05636d9343f9f45c0f658667e345137ac29f5bde1e30f859fa009f5c4c3aa37ca53bba2613e9048f474649ebf34583df76dc9c38bb5a78dd5efb360211b9b39f3f665021eff8f65fea2457cf202e76fa48ff692dc7785d72d306dcbed8764b6c1a0bb7ea9dced1b34226367d32a8f4b37f304a250931b0ff9f4917f7671972cb805375ebe5149d729575705bf15d06f26599c8884a2e786b0bed7216874931a4b766148b917262862c388dd324f2b39f405f6abf5216bda05f1a728100ae8fdf086b1c31678f29d64f98134c951204a259adb930e9928885e3f7a1a19af19465bb8a13473114f94a45bd8c2e0a63ffe3f8a93c44d74ae002dfad86de1dba481c18ed8334b5a8dbca58ce7fe04c8dae4b657b7b63e3e5cdff9a63a9a150b0b4ed67b9f360bcf4d63ecef375cc233919c0e74cfef6d70c57645d429350fc7cdfc0ef19ec330da0f28ef056f559560f472bc7444e63796687197072cb55e9c6d17ef933f515725337a3061c87efafb640754e8af214929c64071b1ad916df35930dcd2f966eb1b5ae635870b3f6f4d70c84c147726fe955f614a66346fda6712c57b33657a6936f5eb72d7802d6ee19b4426ba257de483a4629587499700523a443f370c125e0295087cf5cfbf865253f9693c427c875f25b2f7a765ad9c6f304b8d4045b53608a8abc844527c221a2b56780d46d9539263e0c5490129faf8853a09f1aad99da3b163c955b0c9de9391e9f7bfbaeac5c7ef5aa2eeb482a898b99e29ddc405d18e4fcf14ac534f286928325cc617477a6a18aef50ae84e21ba3de6613709b08e02c42c2eaac2727c154ebe1bb2d465ddf3804c501024e2f2f792b144cfe4703fbbbf296bf376ba660275fbb9088adc6ceea6c138b0f2f798bb487d48fafcab5313a13570f8f8ad52bb5e69b9299301a3c60c9c134fcae28f8fdfb8e23aaae854951aeec23db0c1eeca388690a8957c2f14223b645f254a43efc8e2a51187add0da7ca3d434477e8699c4d0d407faa24b53783dc0518a755255848906121b72443e56f32b6f2559a6b463e6f7ca4b2a950e7f01abe9731a475ba31a89bececc1b4b2a5b3c60c2d9eba496278061ff6b989fb7258b6967af7f5c9525b46a2a11e28b775a8b9ba885b1e4ec20e2519febd291b117e373e08b76e2eb28fac6a5fa2679ce6f9d826ed395ffd641a23ba531bf9eed67587b6654da990592d136dacb53808018e6b75e4a044fd528546297c3dbe1dc823ee27191f6b98501ec4d313bf64a3cd4fbad2f5f897f79435d78f0189434fef71b6b9aa977fee9e4807c31928b41652250c63a9a91e9230141d136b694f2d54472593a21cac394b9524654859ed0998f6ab50871ba277300962de4144a95ffe8e85de8915b92160ec62e227b8da23a8acddc218b7ea4d9bfbec170b821a8cf52c1cc1e5ec6f50e4340a623eae420d892debe1e2e3c0bd7ad405e7528a6a5c420b33654008966bdf57640c16a4ec6f43631dd46f08ea6fd47bf3769cc66179ec1111f221d1f61d5a3cb8093600a1efdf34bac4478f310ab1d8feeb749dc688fb28008f11af560b5bcb4e81262b2938648a0cd8f0de5d371ad3706f5f77633478374664970a7fe0edec6d9b6f8e4cf0da4c5939f45f369d15548f29e7bcfe226a262c9a3b4a3a4215875f7f9890d2c04962ea0edb7983e5ad43a54293d560fdd9ddfa5985d74ddadd846a562998824fbab307802b930eb6e788f8e1eb28516bce43f8c8fe1a804f4ccbd748ab1025463429f7b76e179db9cd0bd02f781e99144f426e102d799d496a45ee7ca55f834cc0ab04da2b6cf99566b57754c120ffa267c1a3589a5d6a7240d8f61b9fed640a65227411ebfaeaf3ba6c34774f944cba1ba9e0c9ce2fb16fd56d394c212290272b7490863529387bd2194ec0a8e3480675e06d8b505538eb32edfd38b466ce4c1a8aa05e9161aad4b5a50e585676bb2e7c4f92c5a839c88c5d3e8b06df21e8213b4cecc4870a09a76bf6bc67e1b46dda38de97a05f4128fa604a2bdf2bbba44d95a2bbdea08c1d9bfdf6a014cf0426b1b276c343fcd722de43f724eb1f9ccb79307557d4634fae59728b0188aad0ad5bf1fd5fd607627ce00c2fc051432c254c15ab06cf59bc8488d29f29ebf97fcb81fd5db383094affa7c5d9453a1fd4796f4b2e11f7083966d126195e64457948cbdf7c077089f673dc75ddfccd3cfa9189dae4c073fa2f1edc75e1e91b1525ece09e44a3c50fd0a02625232d3321083343cbb75a6cb7077250c7df1239f1ed7e69429bceab233f4d2edc92209356642845258e2909c5272bd624fb20e66138c80dd46bd24a4eab449ca2141c1664783736f0507373aef91115951d5d49ee6f90755b9bf5c9177c4b177f906be4d2aa2abf35e781d1fae3ebb6212d0f8b1ff89f48df138050071b2b477cef53242864c887fb3a9b4c2f4f8360d1137fd37d3cbd2f69bbbb09a4eeacd5a0171dffef0dd8374a31080cd7a49fbcacb7f54a8fa3b1d2ff7bed1a795e9569f4f1109cae0c23762ab41238794a0871ba01b818dd9645d8ac3b5fab0bd4b0aa7e657624edcb71eda4abfff89ea9862803da1264ef7b3fea75e35ae5e4b6c341485c95be34b18943bffe1876cd29e089902849564ebb68af645b24ef8b6d97d55abcb7930c2635218496a5d78e32e03b68d5a61881bf88d0808b05f28862f40fba6f22cafc923b2ff959ee46692c4ce793c771cf10ee67f4d15b471664fca197725b1e8c8d5e641428303ae9e77fed341ae8f2a684afccc460b43182a6a268148a6af50145f078791903d3e88f938bcb041e71c3636c81e7347c0a5fd6be0f2f0883ed50afb13f05d3bbff6cead0ee535953354e388c4c06559d1bd47cb75f8ff68d50a2500981615e3e079d7e9fdd75216e87708877f6c9ccfdac0a21f520dc5b72641eb2610534c27633a2d66621d96557af50dd9447d7a08604294ce01ac0401972ed5c1f9427074acaa4778e82262df6f518be4d06d9d91e6d5886e014e1ac6ac136d6adf6e236a116caeb80c8057f33a0edb409fd7680af2dbf565dd8e7a74d9b22a971f30c57655d3db9a3bb1d65f6faf94631f2579c208d8744bf2c7b3aaa46d95cd5524d707de824695e2317e6274964fc2bae243559d5d8d86ed9456b690b82773fdd4f8bd1ffa8831bc79a0aaed6565e60f98454424dd99bd2a7ec4472324582195ab7af49e9f19041704fda73e9f6f5389a1fffc33db314535d19cdad034b06ca9230e5cdf0261838e6dd5d5eca6c481c5b9e41c4ec8dcc5ac5730d03c6bc8bba4d6034455a6fa167f1ee9c58c0e1df7202a91f2da390494da5a30c5ac2c0975153efa49970f5b53859279d47147d43a358e7a3e6aae41596c650d29c407db4f76b863db17ae0db12e5326a150f67fb182501d4d749b0b89bf02368af881e69145fcd0875c0589c5d5fb70ba8f6c88f38319ebae9c81cb8c6eac3d57de2c93e10f56b0cce89847e828d5d86ea14c7886a43675e026e529f7e7eda21ec96a7bc53f60951a21f8c0be737cde5c1b08d6d182504c70b8477f42a720d55e6ebdf6a45294ee0dbc899cbf527af30171141c6a99d1cfded52b640348f0677522a99d14f58e3c05fcdd3451424aa6dd3800c1c857457098e20350a039d6d92179cff77d7496ff918766101adf566a6dd4516f514725ff2d8361cdaff64e9ab1f8636e647c59b94ec0a6b8726638ce21da886dcbd5ed9c0b2db943890ab23cc513369a605940f98c5d31b60e936c42a7bf18456eb01707c0359c5ad1e3cc3fc95eabe3d7b7e720d8a1797135c36b585df673aed0324ca2db5f6d6c011dd7044d3f25d350f4b6cfc231f0728e92a08fb3153ce286e8d8fdbaffbeffad157d2aaf3946f162bc2a76c77339427f7dc649459fd688f9405688ed9b03ae2c6729239de181c6636adc865709a +MD = b0181daadc927c25b4a8b4f634aea80911d31181a379d3d4689f164e073fff0f268f518ad3e131122439edf25c53bcd9 + +Len = 74680 +Msg = d91a18cec8f9bb63d2bd0501bfe310b08556a4635e38f3d71ee087bec41f781d4fc8e2f3d36f961bcb701073b134aa3eccaf0fc74a2df1488e4fff09cb5011ccd28da669284591b65c9defa997e75cc1752367a113c643ff6abbbfbcdba877540a724c79f00313fb2c4b8aeb9a84900027bb9539e48c4fc4592dae1f1bae137da17ebd6b533283b3e482c981e294adc48b7e81d7e3067e6103abb67ab4ea4b0f3cbadf8778594ba62b4a94b2969f1bd5497413c338bc389c1140be14cde488d1862c9b158800d29caaacd3c8df2b41fb08a534440c36e63f2bf1af368f25338c24deda5caaaf805d09af6e09e4c289fe701acaa487fdee10f8c86f282234b208c1d882a507efbdb0ef5c4dbeceeb5aa52adabe29d098bad821cce732ad996f0d03207c38c647f15f04b9592ec42f1cb9deedf91c108fb05e4d05ff9c58ddd06392c0b15d11408430f1d178a3ef143803335c62c56e6b3a6c257ca0ad4d873fd117c0085c0d60dfec5ea9936376241448d22ee06b13b2bfc85138b0aeb11f23213a26687ce432685bf24b93b782e71953636b5d5726efa73b784118e7af2de419a2fcbb06be3b884456be5ee73be4afeb8d1bc0d2d0a7598d42a0c1a06c3aea82f84ae842c205a770320ade3bc8a33fd7f847f12239643f86595c922113cd9c23e316d77819172ea82d38f9fb52ac2fe04df7d78f88adc0ee627d72b1ca6f64c60c6a70f0eaf983b2ef4e996e0088e9ce34315c63e60b448c080c4b9ab9a7a9311a4d9bf15e3410562157a5ddfbbed36954ff67e47a053329f01004220afdd42db6c840c59d4f3c5e6b5805906ad657785668e15c6d23f68dc5918592e2f94b8288e147b2ced26e90745ba1cf7658dcc5e175b011e6edf3802d98b6326c2477f837a298011a4510b6e56761e247cdca169e2cbd4c0eec93cad02b7f49cd05c0576c131bfaa831899665852d1004bd88343597f0540ca73e325855c82130258f66ce3bb9e4a11e41f99dbceda3d6ae80e74dbe317309a65d826a1b7900bb0a4aee062258092c92a0a6341489e1e42a19f68ea769ef2d725680b1877a2f963e5bb7bbd0e1af72170e67d395e91357b8bb2ba25c7e119f9293f5d2a0b3f6ea492889964e3d1f9a34f3022248f58056e1ce4c2ee55a21888e7aa8786e0c9cdfb11b2c3fa352a1cd72b740c83496720a2bba22dd48e3670fef756349fa6e6b9c009a675dd70a7c3357c2e96e61b22f9a20e875548f032a5d3cebeced4bbfa94abd0f0498f34cfaf36d7cc5bbd832002f48be0d3ec2a1b499fd440c0d69e99f1071e1c99afdff61363c4e9b58a0ff2df12aa5b141e7a54becbbe78b515dd29517a3787f08000dfa234b9e35ecc1fffe074e062b0508f6387efc3e31602e64d286db3cee8d015d0de322d55920441cbb9a3c4741332c7ec3764bb0c6e3e485a086a295ddcf0ad7e29d495cd09c303dabd17dd2bc735c2433fd2da51181881f453f7eeb15762263c07a499962078d4a17d5980d636c9fd0d23a2c85dbe321190ad8faa65f2b52e9f1a2a8f6d60a642a47cd156200c7fd6ae656cfb9ecb0b75b377a9b2e8196a151bb3cf1daf64cbcc783e27d38592b7edbb8789ea70c9153cd144cebeb435e17836770a9ad88769d08133c56f638412b0990c922b8032efb57e97771466f2bbc683c685ad6552f0fd53e022b0663b10bddb671e254982ebae1fd22b5a5cba799e684498bbf25201b164e5d81cfa222263f719767e4953a9553997640712178b5e6853ec5cfc0f0c8b38974e2b9bf3d85180a6337cec0f99695059b991337461851896c8f6eed481f953870d52c80a92f4ec9fedc7ce114c48f89b848f1d5bacb0dd6fe710476d026a2a278e390af0e2ccbf690de54c232272a6df5d675c57bd504b41af3f9212fe7c311b5924d12168575d940c3c02afcc84cf87bca06ce323e1c6de99eb6b70e6ae1cb4e6dcb72674136ba371527e019aede7372ac0bb7870f3f4892f9a1ff14b5e2196cf97396a968f5e09d5bf1ad32e1c9260205ee49214f548c3d8d23c3ead2b04337c0ab4885039a94991e8559ef6af359515b164ca906438214e0a5c937c93191d649dc4ea2190c1e53e54dacf75046548a39eb88c63cf4723c7c8ddaa4a04f4b721c6f71aab235c6f438b06ef39ba95ed324d5c421fa4ea3e0e944bed961f0b832c2ca7942d6fcd4a49f16668a5403c154a63cca62473b5f26ad333d7d14fe213fc2572e148e498f8aa3e75d65823ec337468860302ca3ec3652c11f38bf60cec0a47d58c8e10440cfcb8c1b2c2d41ada18d214f33b06c933960552bb46cfe07def1a3be06d8162f9aa06b68865df4c7bc01705e14db7f9c575d592a9622c014c1303329757a65a414a9ed0c1b1b3f58b02cdb577bb5c44fb7d334e589ea8e3c90e99461bdcfdae7656e7ace946e0aaaa596cb000f4723f482494e2133cb50c974a42e2e87df5d3fb4777b77995f3d03c2c5a923799885d2df480fa93ccdee0194ea69587bb3d7f6294d56cfd1f5c0ac2f43db8661b0d032f757df444df8502d1942ada640522e52ee77759ee5387bed1598cbf26d98ee5cf2fe26b90e555f942a3562e17fc44c9c287d3eac7c30570d9c4adf2e4857c598f7c54cd126eb0180f04af0d1df12171b02e81bc13fe63a56ebe3810498f53f2e2e35b9543ec21f379209bf3e09437919a23e73a4d6610e0e2beb183a067b4365c0d5d50afde3a20239fa37f0a45f59dc300aae1ee8a9b97e83e80c9939f0b887d52d09ba0c5570290da6c1ae596f9eadd5d133f71dc725ee1c64c4e9da5c88da94c6bb2e122073f43594c342d07932d4b81d6cf71fc238a51de6aaf290c89aa72627552cb84d91abda4ca772b088fc990375c0e593a2dcedaff7257b043bd635b3d83d7da6e3b4952357d307a1a1e444db62978b2470f80cfa1e9d4eddbd24ce6262dde983eac3fb393cb1c94dced21c6a6b5aaf7833734b25e37a31c4566cb85b4c9b37f76ba6254383a77f5916ae6ad8186f1a37f337f259ce25ed610f963cc71ee131ac6c455b6ab51ff3708260764df13f940ab82b49bd68044a5bef8aa2ce61169d47f888e5d65980eb3818d188f07f32e5998b37987a38800f5bfe3132979ca1447314570aaef7323059e2e7e8e949b1d48b734326b7c60206084571344b57eceed6ca9a141b179d8a7ce88bde61d7222a8879373c9d9bf0f50bcb33ef111b5e6218213949444229c04931a6b180b2eeaf3aa4fb22543eb3a50b9960ac126e5f6ae2221cf252ff3e9c67c51eaa6d617e2b46fc78200337b4deb1b5deb375db57ccdcd32b566cd744e47facdd11516c39665789947ed20f5a67a529974c63e7ae51ad3e4fbfbb51a36138eec92e535c862713543883ea4d0c0a8efd71bf041ccdc1fd6b6e7366f5c3db3b94cc489cb8cf3822644d787379348d143756537f011ae4766071bb964b0c1a2fa6cda853087b5f2dc1b9a5941c39b9e0e12d51fd1efe82be2741df73dce7e5bd2ab397a1d5f265dc74665276bd83569a02de01a5fce2627dc8c427242fba058d2a685baea59b12d6843ac741e47a2ceaa350aba0222c4d5c49e4dbd2ccee4346add33ca103e02dc4f91f4b1c19860276cb6d971518460b02b48842a43cec6590bcdc84a27428804ddcfc282fe50fa2e9821c0d2d679664191098a5c3061b33155e6b79db82dcd11a34b8a4a3cf7dd2e9d04554109686204666fb4c56b2e2777a9b686571b462e9d2093d08a060385b1ebed0b5e52d7c0633bd9b7f86c9abf76a7bbb8e8f9223901e63729c4d1ea8053253a678d4b5e2df881d5f867bd2dd7c8b074d3d5ba5878da64b3fa7d3933597ca98ade507b51f73ec8f2fa85c55dfce854604b9fd74f7aa11c88c735a4748db9193ce43a3b59b8a0819f32f51da1bb50141c94c9e88d9ad08e3414609c147972c4ef2dcd33dbeec84c6936184eaf8f9a7fe853c6667965f32a3476908899c9446d1fff6bdd6f060079bf8871a0cde611e871ed27c9b9788381084248027ad9a8522dfda890799b039a208e83ec935b70fe47e5609ac43f0c132e1be9923e471914b78d0605921a2c4e2acce16a866c1211b8b103420015e761246817a06a8e01354b41f6a53f0ff4d63cd7fca31d748fd362f4726813b9cfeb79cb34c5860b0b3437911ce7d6e8e7f2e514483ecf1134a3c5045065658700329c99d369f76a91822b1ecb55f0419ff4a226569621cecb136d850fd28c0a32a71b78761655193ebf843f94682186678bf262aa31ac199da2baeb1337edafd1d964cb8f4315936d3ce1780aa6d143f909647db5a9c46e36c23bab0cfe0104584a0727a188cf65a79ab15c908a85e6aefd66bbfb57115921027e494fad6c94506981013f5fd90c68497251b89bc60af3e877c1fdd20946e6d3d14a7dbe96ec34c850eccb20c8f439d9b2fc0553080d825b16143f9312d3e2c70322f9ba06588fe6f53ed78415b996cbd1bfe938c28ab4b5d0273322d47ccf4c526756184175cc35ec9be6e255c909807d11e6b59bff2599347f7b09b49de6e46d8c1561cec06435b5787bd3ffbefca813967061dad73f65918169a039d3d41fa315ba1f04d50276de58f8c179e80a9323c238c6359f7cbb95d1a18edaab116e9178a6c88a000179d5c1f0436af09de22c09825b02d4580bafe4954e2d802951c7397dc6d4edfbaf2a27f4d2394531059ae10f78e9027bc64e3ec73698ff7659a2eca1b26c0b5b974a0f78e66b726e8e0efd12d84ea6327c0f54aa00b37592f6b2e6b513b5d4abb2b3ecfef887e4a0ebe6923ed1ba4c26ad51aad014f38f09a985dc2a5348c656920654e9910538629fb06505fd9240c2dac3b5bbebdfb844f28a217409ab7d06b5afbbdb4869da3e1a0ad9fad49d309174b419d00dde6ddf523e4b14af5455168e1e9646773c36ae0b34657fcf01980d1bc12bbef3862c235920dd9eacb9eb109be188bdb5e2fa0cb3fb8c177585f3b030798fdb255d8fdb77c04d748a62ab7f5f86f7a38cf48104d49ed2543080b005432b9ab72bcae5422e9b1f38d0d502dd497d578a54e76810cdbcccb8b8887986c475f0c56f64e901fe1fc75e1897bd950a434cf4a6421bab0fc3dfa756139cbf44d7169878a1e79556dcda46ba110850f2573c55098b184e2b528fb291a8b60944dd70a2c0088d66d940cc954dd78f7b9257aa3df738ea74a0d7517d03be421f34e79376ee1f2710e5fa12cc3c51bf8f7a931b11e7c21eb8f0c0d93924cabd4ba583f3875b4c610e1d47415e1e2614f71bb8036363bd01859bad6ba96d64a429073115468016b7c8dfe6eccd6bbb3c6ce624f7c4f3804f55220b9d3056128331ea8d7d56f51497dbbe27598c9d87723b6a786c98ffc264b20459e250673ad6f0cfe7901b42ac8da138a72c3e2c2172fd3900d66210e9ce26b316ef9c29641bd017edf215c17505d3cfd4e934b00f9b2ca28cc9b2bf6d082dced0f9761514ce6a52ff17c929d49ccdf43ef51291a87744674abafd63d28f31a806b470a2c36b3a119985c7c461bf0a3653f44a799273ced7e93ec496a0efccef26951e5b067e99d44ba0742992e91316a25b6ea0443d3674d6a98ad05e967a04cf0fc1b64485340b940c60d1eeb77305a88ed1de342025de91afc299621fa3795ea92d4d13fb8337f13e1055eb869493d523266bf8c8f775b8960e6a61e7e3cd53e59377db5df1e9e19a051e0fe30241c6acded1e89425caaa10b0bbc47ba5614d49a6df21391a71f3c4b1a2c269468feb806db8ba1e5b5de4847c16106782e5b949c9db8bf967909632987cb965dbeec2425588b3c3e2900685a301cc27e6cb166a9f05523b63a647683c144b853cded96718ba8c2176116e88d7f75e495b71f32078e53a5b993385ca1ef1ff33e3e09f6339d699b36042bb028d7f4d285b7ace0ff9e3aaf662b8effcb3ae5aee5b8482cb4b6562f63bb44a8735f22f516156058d94990a886ab6d4649ca1d5311e4b32039fcf8e6682e6bb8b64086b510794382ddb6dff8e1bade1962c64f498a6951bb0d9ad6290c04a7c838a1a97b3a8a5e46530eae063f01e860605604f818f12be377b6795e16e601c042ab11ad5df1b88d8278863c6827930389a4c2c883214781be7967ef4f7b7f881c8548b54156593db31dee0123d5e7eb26d5142192a3af7e2b0a2a427f6c2c080e59d6f9ae5f4a402e246ebd3ab3edfe7e147f6b0f1f6bc006914ac16e600d29604c41e36cb7927c3bb68ed97368ac25db878d0ec03c813197384dd2e3002cd1598813d9420439db22fbd7bb979d2c498356c5726da3fbb82525bddfa7f490e94235d345faef48442a1ad0cc6ef97650bfaaafffe0fce03cfa80214f83e3415a637a0a8e5a1fc69e9c3c0274bf259124d7abd41ee0ee39a75c72028a3c75480a04803f1c2b3dbbd3c088f31c54c885ab1380bb3534210de09423e7f89d53ace36d6ffa5734f030cade272d2af38b5bcfbb52edaea53e64cfe9ba58016d2575cce66ec4a73fe12b6b3e40380865161a761648f0effbed475ca55fdd0d7392abacb6a5237412b7b79e28fc9a1c7110ca8a6d8b4e62fed5bc6f0e3cff847843576d263da126771bd94be383ddd0e12274f208428e6d759fcef06e7645ce44e081f67e5ec62533b59b5ab8fc888b7cf31f962f96397a2af282c70b3838539f102f2f062f19d9112c04b3ef8f24b4092cd35e2aafd6f0e377e2dc2ea85e7b517b6b0005d922abd8291c3fd06638b55174983240b4ed3769d6f5171eee42af21ca3c51c58369014f53ece4a2a64cf51c7477fabbcd07b784b6c36125336955d9a5ab0a8c56774440537b8baf7ae9dc31d3779ee124abd7fbbf55a0899f5dd73fb3be13a37ad3dd71d0d21d3d0896d25a3aa106fbde6102989ab2be9359a59b1c9d7f5452160532aa73f7809578db3f5d51fb1b5026b19d21efe2a18b8ac90b370af6b6e05396adb5e4f49efff3408b03bf90c32a2224115f65ee33b959518d5aa32a1f97580db559cad15dc2a14e1e142d65e7cffa41c61aa5dd5a64efc68b4b102378bd4ef2b15dcd94a728a98c615842847088d790241a57b700d673b06cd3f8e9aa9b5cce0b8a964763773382ba97a7f4449de19a942622850c550e9598ba04859c79ab272aa8cdf179f869b9929803bd4d563fe67c08ae4e662ae8ff77c8dbfe359f6288767f1a9bd0f371b85224ffe871fb1afd4586a41af69d287571c5255c5f54aa7657d6234c52b073076003437b9ad399655869acf1a4f5f780ee788ca701e1ab7b3576930ce676982f26fd7681af27e5a81b786ddc587c7ca756aab6e8028e8c1e782810e3748f07b70ad940ff983f254df87d90e2fa78e07211234b274ca376e888b242dae541e92776614bff3d6382dd563ebc0c72324a6987abf46ac668905fcedcd3f81fd56608d15b3c8886db24df9d859a61a8f2e315200a59bb5825030db07068460b93a5e18390bea35bee32db3418d2e98400d2fd45072121ea21f67a9734acca91c2cf3af4c87757a4e6d45a85bf0bacefa340a95c6cf4a564a5922cecf2448e9aab0b9b8ccb0fac490934e3f744edb3cf2455a2cfff7c4daef9fead1570db9a0c97828db3602faa32a077fef26e22050ecb386f04895e23b16563857c7717f4d1cc5c97d1517f5a47f2c833de044faa92e0129865d1452f5331e93a87cea0a6cf93c0424e64a6c371494d0b24cf1fab45ab0aa658a1d7787da4b756a03f1fb8f033d61592624ded96eb2e0d2a97370f0d74492047bfbc061807f6612e903c301af6c79805121be19f2194c2592342ded482f78e99f49de10aa2cde1998a9e183722bb530f3eb9a67533a7b0193de620811e3b78b60822123dbd656048f5ee772e00d9cf19acce44fe698e61d3abcbdefc903d6706c3f2a097a0e665a599d356e7d84a93892503c4240b725ded369a202d2026e3f1edb69302937779173df6bc4af23627c971002dce607a2ad1a6fbecfc161e72df4d15f365dd402306abfeb13f95c4143f586c87e4b1cf52e5c3954c51b94c9e38acb8c9a7c76aebdaa9943eae0a1ce155a2efdb4d46985d935511471452d9ee64d2461cb2991d59fc0060697f9a671672163230f367fed1422316e52d29eceacb8768f56d9b80f6d278093c9a8acd3cfd7edd8ebd5c293859f64d2f8486ae1bd593c65bc014bc49c5d838bfe72575da60a098fd936c401942965e2c01b14708ebbd0756934ef8da3eea94f94fb28878024409865de16bfd64cbf0e58df1de3a73ced4eece8f5d32a374c6f2b8782d9e4b34db300301d46b275dab600e909b37d78fd42c5a2013d85d3f75b20cc08dd5a337b4046e15a0ebf31339a76ed4a7897dc5b0171d494154d5134a4231d2cfa472143d088464fa0530b63fc293062ab7cf3b0fb80051102f72b7eda911f61d9420941d462e380842460e68b7676d4b4a33b89a15eb82a7f09bf505ef92749c2c157ffcc655d7f2299ee35990d05333c91303f938c7222f1fba933a1d9e9376f4ba9d848fdf8ae1439efdbd55b8fe0abcd6e5d3297a7acf45365a36391c9dd37475b55ba8b699fd16af243a0c06b7f7ace426d0eeeed2b0e977129e4ef3d8da35af91291cc04c6d2c3a1f78bfa2c62220a58e99910972f993e5831d610d8db4bed1f797f0e7eb5a0da5b720757373b4a081e4d61ab5a1d3cbe874597c5103889741b04c2e11bdeb3f59b4da376306d5b4e0f22e8fd9a8661ae8affaa6a7847f496984f1de280b494cbfde4d0c59c6ace52a7e4afa5dcfd9074dfaa9e8f756c15bb03a2e06131d9bbc3efc22fc3efd62bac751d262285e541b7f1e0e4929c275557d9caab0ba3b0a153dd8010ff8f11ebc1f336dd0249d01dce6e3d0d12610c4c03a700ee305adbee12638904e70ea09719aecc34b38d406d4ea109788d488d5224e7f01a8dcbadea760e57ac08e324b63a1437ddb4c4a8b8bf46f0d771c72d10621912c0627ac92f053a7656d3b100b1a9a0143884948b9886ac6d8a5e615dff11b6e3705cec904436745fa5e5dcb711defeebc5b1516b753b6dea01a1bba286da4ddc9adb95a59280489e09addaca7f406d2915b99fcae743e7f0edfa1a9d30124a78a07d1a6bc279239bf29a4fbd22749756a91bd42c6736c70c9fb622a09360394241afcf753c9791e411499001d3e1e9fed036a2f26d9a77b7a764585f292a96c3cee2393469521000c62a302aec2ef17c5bb860cf72e5666c9593101b59f7ef77d8c2fc3be14f3a7c81bac4bad3b23a698c1fa2160f8e3fa5dab10e77be5ebfd8cfb06cfe3cc55da1e489b21432f22140f1bafb68ac1b5ffdf74c97f6beb5645144392ffdc47b063b5f058cd98285429d1d38c139d10343df6bc4411ae392898bb6db99bd20d6d08371bca96d3ad21ac87f17880c06ec87c4b8c69e56b57cabe298065eaeca4f29249d1dbc61c47f167d87b5d441b62d98386eb2043cbcea27f07847d355396a9c8951b72a49d7c2c206d7b22a8d774cf1b4ee25172f6241aa3fd82e9c42e6bf874c30077777bd73aa0edf8aff41c2c120c4b78e4bb13e499f1b28091dfa6a9495c7b89d388e1dd83af01fbec7011130a1e26b5c1664a938632cf895dcee3da034964bd6c1ff5187014518bc163dfb0201887a1d0bbc5bb4b2efba235d80c858e0426a42b83df0f679984b01617ad8bbac41545fa01a9e34faddfd50147493352526a46f8fec84ad1044272d3d2a42d42e879a825822194fa772329a961c46bb7fed8acbcd6d852171e35dae0ddec1d1e4d5bd23a845255b4536ea7156fa2b525ce17dd5d5436ae9faf03ef2580ace3b8bb61cc225067aee50b68552db80e99048cd0e1c5c00be6d37f54ba8a020d0876fa369dc32e8627f565ba3dda862ea0bcfeaac1da627e831a55d141f8ad3613c2d1804d0765d8494d2a0c67021f2a51b5ed4e848681b80cdbfb218e55c74f8c0309e8e5d53f849b532205d98ecc2b3557206332b067e0098037eda98b9982fca06a156c1402b2a670144e9d67d559d20b6192d4405a1f0270d2dd98806bf5ea03bcb0eaaef78cf00cc98fbb7382dbb3377683701da39d80139498651e85d0de93c760688a663703900a6f399c1bda5d4528dd11318a810ad144c7184b2e3c60b853ceec9097de67629d9621c9e77d5a9b3f48bc6356f42912ac11b7f1af61f9da27a181a8d1a7a2ec4aad7be22fed30a3836e7b9b511d643e921f4cf7506630610c822cba5eba3e95db5c4dce3b516ac3bcf455c1c12543bdbf98de4559738eb6ca19f7ae8440c3c4164aa17753d28d65b18553beef334ef7fb2576c312b29a3f290de96c8c61b7e3c5207ec4bf9823f02bc77b7823700e550d6e1b59c349dc65f1070addbe44a459ae85ed9dc6cab4ccf262d7d8a5030a3dbf1ad5efb360dc90e9ae63e76112118e9a22f4eab290c660ceff6fc6bc15ca18d7d2ac6d2b202329daabfb73bff287ea509f9e93c913e3168746492bb1ced74f1e3da9bb73b038968ca5db6a1e0d8dd59aa3f081547b9255e4de6fedcc55b8485c04d3c1d339a341c74509b2c78babb73ed6f49a9af05c86ae70e9f655d3f56d59ce336893e3ed9053338f35029369f805e1b1c7e599c70fada3bd2c946f1725dc44cf96fad59dedf71675d9164d5000b76c2ff17b9e5d59a920f579d152a5d7af0eb13451383bbf7c96c1884de2e7371c1e77fea528a6cc6a8e99c453a327ed98d3e12be0334f6eab5c7d29ed7ab606fba090d8ab5f29d0b796aff5638b26ce603b6561efef62624a10b0a43f3c46d31e998265d56a6ece5ae041f3493229e2cff047c0c694fb02215a63e18b511e074bb2568f6b71fd2c191356a84dbfb891ac978f2fad49a3b8fae09dc719e1c70b4b93133cb49e5f54bdd7f7fbb75b5b43c1db4395eb36e1ec9b4d66403013c746e6e3c156f9171bac0ed62bd4ce2d9b60d4616ddcc9843d04cd47c634190fa81fe34b69c48204b99ed3b5fa1bdb5eff50aed414eb8f5b3f695876c6891dfef1000c72116e978ec191d61f6cb82615107b17da41aa85e2708304846d2882082b502701c43c80ddbcedddba8a94f77b544ad61bfb01f24257ba9916c4f99054dd76fd9f871684183219b12e5b9596b85523b5414ad820a27d77ded7d1e4910b8fdc56f564e4ed67a97f1a24e7a44af39b6f7af13617552b68209c6c9ed2cb54cae9faaa628e01f3ab86df4437aa5d54ac97eed5c8a6da05a21f9b8033a987581405b06789fc09e4bf96ca35528d15041201d995076df757b3daa3b996530d3ef89841d4e2174c626e17a1a04037bb2b551703d9fc55f34921bb7cbfd1b6a52ffb0a769874c514943e712d2c0a8e96f0fb403348ad4418057628ed3becbc9753a7c4155c48efa7a2b90d3682b77cf07c8ee3338a2423acb0398bc0d5ed4c2ad1832ce6c7647e4eb5675184494fe80ff7966ac94869dbf875f34bbb34de4da8d217abb382d25851f5cfa6de2adbb93c88993cbe2a8252447a2bd0a701c6a9577decaa42349a67f88979750dcd62d9bf5721c1d9d77972d8e769824be3ae4780fb898f5c86c2918b99ed24dad9ec2fe08db561e4f85622fbe536c971839d0f6a7376c3c92054c0514fb41d0af782a3e752de84a5341f49f69c180ddf889be95f0e3caf51a957db93d155c668ce2a1d1bcd2292e634ded1113399b65e9bb1bda5f462babccad4ca99475889bb07ee85c6270cf36d9f9aa194d2412cb664e573854c704bd12ad275abda46cdca49d6c32e87210f021e5ca1c7a397d7af8a41f3473eefcc597259c411b1a5f95e3de9c09b16eb4f6f592bb9f2cb232011b6cd2533f466a41d49729f12f600773f8a2f6257fcf1197bf70fd15c756d6da38f90f291935d3be25823eef8cedcae35d9b092a960bbd6eda110d14ec7fe272ebe9240a8465cf9734676990963c30608d27539d86ad2ef8efe37a110e95db77aeadbf9c133ec4697bc73888edd3ce77f1c853d2d44bdca26b78b2aea0412834fbc74032482948a156221a3ce64d0b96460e888f01304d17d7314522440a6f575dc6448195cdd2db6df88d3131e05e47d45a7006902306b5adbdb0205c4a074b3f1b3aee8e94e9742dcb0fea33666d09374c98fdf36c8ff8696e723d6b98867d3a3691fd8506f308100a20dc7d278e66d94561c9cda54f7ca4d419be046e7389b9c8f8232bac8613af465e9c71bc58cd54e578ee6145cbaeca8ef546894434ed4812dbe3f4ee290375f0178eb38d42b914ad3cf060c69b0b44efb34b9cb271146fd49bd443544273eea7fa47b512d2c6a2fd2c644ec0241ece86c251a1218e9b8b6ed668c96768c183de654be9059f528a65c5be7d9b0d55a1d4b0ed291a03ef35420a15e9a01298dff3e70fd1bdff093567a7639fdfad4c8969fd62a714678c080eb5601686c6464d88fdf801a478472e833ff808068a6fcfb70676ada92ffe5e2546dbe2a3fa76772e28b8fb61a188f0390de058a82b3bef3c7a8daf30d3c2a2166cfdd0503595c723e5b7216de16b05097fc1041d164d826ab81c1e53e9559e52662a6233fe10c83ac3770641ee59e76523fe8d0dc1f103d24da69d7ae7338d89e0f60ac7ba93f4b3307d3c55fed211ec990d75d2b4d30e03a9b18f2e33f91a0d5bf55c83f18bc72dbb3e1632b9600f003d823114757feb6f6ad175e675f2ae5d358cb9d14964da1ac24e3660948059308fd1513b7a343685ff6ae42c23dcb50a1c30b56818bb880af4020f6826bf6b0e0e9f58c039bc69d7d5f24c67a3f3e8846e95d190f5fc6b6ebf0e2391d679cee94820ba3b4a651fe59d0c31419cf4a36cab1080e447b3fec681d6f5a62a4bff62ab29e81512baa33fa32d1512754b6023602565fab45ebc92fad117fd98b276fad5ff84d62949ae3696b97a82a364b9391c68d31c92692f6478a0dd10b829b0222735f307048e9b6ac655d3facdcd192e3e4f6af2887fb1ab89aae777ff2e55793d51c5202af5f56cd066b3e34b010a63444d9fe4fceefde8bc73b99bd44cb15076d77daa031c468d33808ce4b19cf788dce7e49c66536eac7f7fb614ede16e58723b7f0d236df97c7e27d17777fd8b0f56a2cb616b298e5741437f5b92a8e6e1adf26be21267988b0ec1340434af1f575002d6dc61fdd779b05387d868efa59c8890a6914695ae6963d0f7134e3e3ef1478c7975e12cc4943b243223e74234d9909ac1c3467 +MD = cca52ac605ab74649fd6c6bc13da780e913bf742ca25fdf24b0092170ec4909514027d8dc1e3036105219fd5a2f260b8 + +Len = 75472 +Msg = 89c1c6a082f5058df81f29804be8c212ba6720a534a0c6036a4a1c4329d664ede7acef5e9cb8916dd325524e006866b7148160424f7da213554018ba8581265a8616de0b2272777e586cfae0ac423f00c2dd18b32b56cc787fbac758ac0a8f108d86fa72bf2b9f09b07b8afcf87c3434ed03b2c171322c7a0f4091e4477889562585ab5a19ecf15502da686b8c202c9dbc7c9434c91aaa632e5ade28fdd4fb73769a598ad8bc55ac7712fef40f35118158cf28d4da152e79039116ea7725ccb0a74d6ccba5a4b35437aab3612ac4ca29e884d4694d2ba006b76ca1f35c73e655e1264ce528abf396692aee7984d43fdd952402bac964e8507174e70b55c730aa4bae62a008d9fdba351a1903c66d58e587361990f7c9eea05a2f51f90a2892f60e6c14c4ed36b908c4039bc89797fd88e54281b37f619b3d9a274587229ef48351e8cb1881cb0fc83e6ddc90a05b160fd7d0a1eb0835d57158e42c7b46313e973dabf065699fe841cbde442288c08bc28769e3003a4b8582bcec6f9e1dea587bfa3ce97350ba2abc91e03b48f8cf44e91a94aeb9bfad94b9efc974b850d02b77af23200adc25bf81bbfa29c8988f29ccbbda6bdf3c63e85e1903a59186eb9dd284e9fbf2b5e78dd86fb5766b0f0823b390c2803a5c736bb9612069f0684497d6a215e4f284087e09d5978af9064218e5c1d45692c4e70311f0aa279f9de202c9312f42d4f191795b172acd3a2446f2ab779855af1fc69ab0ee294964cecec4f458c07d5ea38965185af6a8f6121b974dda97e559131917dc82233608a30ec79f404ffd5943f82c86c98281f477c9f11311586f5748e762ded4225653c3acf1121164298c78e7b5ed8956c1fdfc59e64445635972683863fe0dad110cd7af2c94f2876bc1eb5ce897c5fad1d949d2602a9d410d7218150283554dcffd86205f6e0b412abe4462adcba3f71750053c460b4279f11f028427b7d388f8ec790672e98519cf4c2afeecd04bd3fd29d89f80305b936f40ce90bae0b0e9f4a258694c4b8898c033453a8defe619ea2e6c04f5e11118ee9f243ea34713f52be7ca52d7dc3b44663b3e1d78709c4e462566728f668c8fd602aa98ca342536068277c7fae6c7a8292cbdaf969b94fc78d771f23506f3808e320ba517ee0e33eb3d08d39daf544972cd69f9cdb7f7aaea0c338bcf0a6e7380f7ed6d73bff57443de257ba88009b1a7e7eb02060eece1038c544546ba27f11318f9f9c4ed0282772e75c904a10e673242ead32ae69c282b1e7d28805e4381af5fd650f4c15fe4edf5a1c4975a8cf379a60f721f882f07ca8c563d663eedacbc922c7ae98331220ffb50744af3abdee6db02e9cf3ccc06489c868be0a24bf9a27aa5808d7ba3c544072be206b392aedfa86a40204a9bae0e17b61ad7d185f0cadfe769c6f1da54f3e3da15b1e46aeeced7f07dfcf9c58682c48df33114c4199a899a3d7e2c01578655041534cc5a231a2e3baa4a9272170d6db41dd8b330fd7b3f67059c753e56642651eb78b38bd72b76f4cef25dc9e718d8d2a0b2f6f023d6cbf6c80814b9daf51e6b9e64e324916976c2f2dba2f38009ce9085a9242d1311f3ee8eaa519c6aa104f736dfa34eda3cf84e1defa9186a491796d3a4870e569680f75f6a730c8fd0a2a0bcd33a31390cc23f5715b95e2b417b8b928a65bc73cb39bb4430c433d0eabe0b3727f1f436419e3ea8351cf04d58c217cb45075ef21ae8df44e48a39b55721e3afc310c0594352f3193818f458f5b3e385bcb51d5cea530e686e0e46c67f93ce2d8fdfbc2b7aa605b104f693d2821897c8d7b72138a243eeb7b698808ccbdb74b773a511334f641d7982fef44566b7db9c7e54910eac802739a470128ea1c37f5857ace6f92852e2779a7740380958550a99d595676fd262f621dd22546a119415233a64066e3afdb535ab9e34d3c5b019108257c9530147f71328d9678f8e5df8bf98b2e18ae2153b39e037c02cc592d2cba3fcbfc0d47d43649a5e4e76028208130efa12e212d30f905f32647c1fa43bb380afce1e15ade2fa79da918935ab4d07e36122e094df3b2070b8a82b9c8d5fae619680d58a7eddbf0d74b92fee7fd084611198eb2fe0c7d35af115a104f543a58dd95c4dfc993b99a0554dcff7a69870ce32fc6aaa7eb98f670432461f86f1814da1eaef32a5047278a4d5d316c9adb573ebd7c7ce621b3edd1a8783b4e67028e916b321f64b4031de8adaa2149018399865b0696334f4c7055a9dbe8dbdc884a95f3e4c0e33f8be1a2fe3a4b8a2e0e685c80fb8319b4d1227edfb6070b4027cd4a513d94304340174ba7841cca80da2813b7c1cff402d078bfa2ad2267224f7b40fbb2e5d66fae2345321e11649a857d5e680fd96cb9c8e78aab07b77a039df8fc6bdb524035449a12467ec602eb8eccaf2a2c3bfe3a38f382517c22ae6461baef1a1d56080491e0452d1ca70fe4549a6876bd6403048f21192e61109eb559359b9f0f5d888e149a508e8e30e625856b1cc629fe15c959f4c19a6cfda586d2fd846317f55c125b2cc6c32a00402f7fb35ea0f846c0c927e30e4de6366d497d772bfecda9fd31c41c1a6396719852d207809faeea7ea4678071816377508da73704caa6e7e67cfdfcbdf85a11494ffadc34fac465c9eb97317e0d7b2cf9c3eeb1a17f1a3ba254472343f9cb7bed6778a5ee7acf251d0f358aa62a73c3b37cb27b8454ce11ab485e342ed080fdff49c9f91f7825c4f27fd1006c6113d82818a0f9201409067bd9a1b3e1251133f9576d4a4a8b7ea1d4bde8273359a1d6c24828cf071571869e7890170d5fd2aa5620e12de21d20685e59e953bd7cc45c1c5bb8419bd18e1e8db5c7c1f5f96bbda026b3f898b5b174d9d4633a5d32e1b490f3ee1560e0b53ac401b7694d7a430a71e9545eb0dda853e1adc43f8514808cca71289ef8cb9d77cbfccd61866adf0d25e950a4cd0d8b720056bac7d7ba37511383f662c5ea9d322007984f1343b6323697278f6fbdd17bb05f8587c77c6c8e168ce5e54ad63b164aa29676768d5f164e8347630b76f0cd6c38d2e3c6d396b04dfc65bb1a070d70b65e569c42b04025b82e4eb412c18fe3be63116078685c442462f44896057afdfdbb4714ea44efed1e089c172815f55b017edf823e9313d634512012514a09fa7b19e684ffc3e4d8faa2bdf0bdfcc7afefec8bcd9c0c53c2e837679cde5d4112d92ab340d5a59575a87d22d546de8d3ed42ca4b7130ca2b6ca96396c9fb7a6c3724e4bed1e72985fd1f879394543ac9448cfb8b3363c771e55ee13f607d1a188e0f50eee2ca353d3e1b51f915bb4bc5cd83646567814476614bf95cdb933d7dfafcf7ad8a2c05e8e72339471dcba12d4ed00cc154b1c9a2a818b2d682676a034293e2e10f3522efbede4665f5abc66a901afb88431cdf5d816c15939d1e2912307b1873ba0c13b88cf5803be58542e55b0a3aa07cea0d0fb6ef287c74e302128a5da14cd3da60ad180fefb2347e9b057648d0f34742dc200d4af5794fdc7e6b19e08652a2c692352cd59cb02cc05b31ab7bc568ec4cd3f84f25847375312485a5adce6f6ef930b78eef8e1e137309d3c04b22e6b2327aff4427db502f0b7cc8f66b818a819bc29d0704cde532be2e527e62ee57e319599eb3f904fac5920f9dd3c3a88b21d3d04e5fbc62ebd1ca5116ad6531a2c52bf93b654307577fed646a055d4a5997c9e3325ec1541a38bffa8715fff3afa190e14023acea51a445049855e06fde2ba682b1ccb8ab59aec4b20d7dd63d66be709913b3dcb7cf7ec1759088f51f0124923633704c708f7c01ff10af9216af66f2aa1edd7c76b8538a41b9694363aaccb486201323aaa6eb9f6cf871dc8772df3e9bc76b342df66cc7ef7abf7342c16935fae07de5618541c67e2d8c5c9797727df47823abe67011a1083d512cc52f443c1adb763b9d14c69dbf17c8b94e0667d73e98cf8aa80e8a401369e817f3daa5f26f7ac6cd673bc44db61eec9bb4a70673ff8f35787cb81ecb98664cdbd4abd37f80233442c6e281fdebabc2acd262967ac2c41e1e6856166a209b4521708a180ad53f8a42c3f146d6e7241091af2061130ca1512377d0ba4732729b91d060babbf7378e7765505b0031f39ff553c7ad67678d9831ae0e5287565215d2fb1302bb6d710986b4e808a2517e377ec741c39e5af0b9ed17f9265514a37d8df98d3832bf57c21ab89f95e5d02f9fd41274ebdf6e337d01b9777ed7f5ce9969d3b4a448765083d97a5e49f0356da1a03c4a6d5229bcac159c71a1358039320f90728e2319c3126b010e6eec089f038a4eaa902016f40ed0c9d0d8983e4d0f2638ae3dee301a387955954a00d22f8e394f7b9d71ba436adb477a6b28b572fa57d450facf44bcbdab7fdd255519840a5647a7dc6c9f128add1e59a20c6f11b94a6a3f0deedc1169a886cc491268063f883f15953a4cc7347f5754c46df49015a60565be7480810419724cfd60441df5783dad100249cc3169f9521b72ca59d614aaa95589b87455a54c4488673731f3ce4c5794ed1f8749420c3ded447bd2c43b63f319540d5225f51b9b334ec8aa023171fb6b23556243b399fc830a8f65a6c4372b53fe06833cb0e73b463e80f0ea49b681dbcb73c3e963a67725ed8c7946562f3a4bae2c6f627fb80b095ee56b73bf22d12d0e011401fb3e961b15fc756a9a5106498d057f5f0a97f3c3d78184643bbdd4a91388bc54226641aca966c3db37a77895c31b19faf88bdbbed0dca18764907096039023aa81286021d153ca61d639787677f6a7fcf29dab40727c2ca2e3a28e3e059fb1cbbf8bdbc2b74af2c31f0def36d21c8f2e9fd44b92e4eb8b7e5ffc17e7423fce7e85979ad780d3a3cbb92dc31bfb173b55a838a4fc4fb128e381a4f1dae1f7e28c7b5585a85776453f4da1de6e1a6f113cb4d19cc5db546999f1a4065f0b4f55be48cc857d62bc40e8826f267659aa7baa6ca81c37af5eb86756043cbde8d08fda9505809dc92cfd8e01a1857dde52df6677c40d98f4577c1659ca7d3e9f01f9a809065f51b54fe2f9723fe2c9d1eea7397f2d5531d1c51c6ea100b028596bf9f24dd90be14eab58f07b4f24a35b073aeb29ecde4a6f320237d7adbdc43d94f87e08866b95bbcac83dc7db3553a42400441f088e2bf6259539a2da8b5a74065f15e31366b4253498a6fceafc21d3cd610c09894f1b8d273d3cab8e04322549947f868ae688b36f32f4c3856155108bc50a8e7808645cbf620799d10f9379e3018498f2d2578e05fcefc3b34c3685e4940757dca14c8c756c6315ab94c7985e0cecc254116add7e605ea57ca50d576236cb0cbd011c45d1c418c7257c14a9421f7eabb78d09c960c40a10e85422b18d141e5423121bae5cd0ee5646adc3d415a103fb232d7c7a3592bcad0042bdb9ec94c8d717bb93f09df9ad6b17101b4361fa445ca1d90a1784313a24cb552697071f903ea0e4ca321ca71cad9e8d661bad9106743779fcc8d6094c1c5176a474661e3f31c775099d624304c5e50dea8782d014ebf0f69ab7b282bc3d9b8e817892f79d5793579859f6332d5af476f1ad671e356ad1362c09a0045130b08303ca121472590c70bf8d60e15f15d1b2c1b5e4e33099e422fae928f7d29d993f73936edb86de3aa9c66229b3629e86a7a2c88188ce1f30a24c7dd3c3082b5ca819fa2fb6a18f26ebf4ffd813fd9c1b3fde0ec773d7a5bd9f69ed28d0bb8303a83c28dc0c8a14d71c938cf568fab79660bcae3d0d13d294ff9a62b087b24d95262544fd440a145525e933091a1f9801f483d06cbe494fbcac2704f14eb7301b091d771ac8e938a9ef3f1a9b9135e763e27c9edaef43c33d8c58fa758e90d49c3b6ae9bcffef27da61dc693334034bc512ef3d1106c7d72089746dc4b006e220a354c16a51e389f0620a49596d536d2e6c23d8996d9e336c8ac584641ae102b0292528ad268f08f4dc0fe296a4ebf5a6d86295f88a907e29769168df36e9db52b523450ce6b94aedb6345b713f948a363ef29cb8c764605f372140bd6be616102f98410ff92af7e3d8c1dc73a716d4e4861c16608be48317b4bd3584209f5af27fca433ec8aab8de2afe8f2244397dba98282b793dd68c59d5ad6fbebfdd50ff8e027422b90135e793329a097ec52ac05c5e028a4703262b823815f2af68a03f4287fb4235f61505fea725adbe8185fdbb06c41b1033f797a3a74fa95808f1ba84a30126a552004150a359986a3636799b6798b5002da7a42042476a2285eb793d9cae576fdda0a2726f5d51ecace53ce6caa7df7fbbdf5ae15122bd75a6378353bb295cfd5f9a304c535a60aaab394f82771921f5a347c2cf1c0b2ab9347de0b0489bbdb5a099f3c696784e0efbdab959b61503caae86e3d0eb283a56f864993a8b2b03016743f4c982dea17e63718251cfc30e66a445c6cd05a174b4b795b5dbcb02b5487e403a3b5db5e464ada6b354094cc9324d2b71afb39f613b3cb83c7a52475bf1ab39cd0670249c279f205249aed8bc9471e1ee5c3d4a87544e7437fe66237e66b7d6b6100354532f02886a17048e70f5d70e45beebc97065b471ad5150bea50e6abefc435e6d90e49d8500a854976cbe485b7cbc0445a4d83758a65a583f58518b9aa785c896dcae3ac01ee3e51b38558c6f9d3dd2e5a9139fd12a01c5cf1f97e411c0c08bf7bef59fe0cbb001415d246bf4af2b9bd20980b483422ee19583483bcc4ddbedb9be21958e10f7ee316291ad8fbb6da8334c853d17f5c9f2ba0bcc597259be3704649ae472f4a0f514cf0619eac8eb4131f88c04344cba4165408c06ace951b0ff39c854337f945e122dea78adde8daef497fccf834de916bfa8ee0922077ca2d3c414ad7ab9b9715203a59280053b36a3b03d67ac023fb9f0cd5b2c7bba2753a78de4b6eeabf876fdd99f2f0946dd2266ccb7945673a2711f373c35600b3a0ca41da138385c3ab43a383f17f3a85bba6772d21d29a7fb87746cf7ed78009d15f2fbb4fcffd4657432a6ef11e4349d46cb2af6cccfa6334318f6f61c6ca438b6b8af83c7ec1c62fe0cad17e784f18b0ebd7d8b67ed7830ed335d9f8ae3fcf3371fc27864a73b1a9af1d51d5f7de70e5a63f1f9b72e26dccdec275cfe8612b7df4ebbfa99d739749009a56a42741e0c71e510a88437b61e2b6cde9442fded6af86d227030241f57277ba56657149f6e9c6c620096b333dd4edb09ae1cef95f6c8a68044ef38f4ada8705d796802711d23206e6ab448a2037f60311455041341981f5cdd9fb8c05d5b0f560c3be99c004e28bc4ca89e0d770623dd2db5e56e35af003ea3084f8b4f888117859a6f29fe64acd40f385e7b212b4d9561033aaeb95772aefef1a35e6b77ed284e4b3c1f01afd63f1c2d30f5e93606e21809aadcb4d69d3556235c4099707c12cd16f986f075cc84da4ebb82b76e754aba8ddefe1075a85a1367233ac1ba565c6cc54e66b2ffb62bb065a82a731cc357af587e1fb47cbba69d83a053cb9ea28e921ee2c83195bdbc08389ef50588179160323144883300a05d3f7a939f648931a6eb5eb3547f09c0499146ec55fa9a7f33e29f7774e19cd0b9655902255432cc12f269300304c1bfda3648164cba74a9913271bf60d0babe1abbe7a946b5c5e73dfcac46266d0d3f25ef4b7cd00fcc97e3e84f25344680f3e90bc98fe8d16c0a8fd0cffda60216ca9186f724ca43cad28fcde0afd88c16f68c1baabcf4ee4dbe7038795d690b04e786c1f618239c98e1ffa9cd6734eaa54f6db330395355908a48fa526f58d0ff1f6c6aed60c1635b4c9944bd5531a75587f29d030deb4e5ef77fdf033a5b992ef8ac4787028edf3e9cc7655980b50d4d2585a0cc40a620df8c7daf34c65badb9fcac216a08715a6658f0d649f0a962b6b18d8333db6b153ad1ab328c1c3e55c9b3d5bf3e79511afe087b5d34adf6efb7b3720fdfe52173984e6f2fb443eed986a48febac5e18682c34d2c3c3c082fc79b49b0c7966b283208c3270544351811757436b5bbead8c18655ccf9d3037d1243c7242a867058dfb125dbb13255194a4545708f5a1f8ceec22814b6a05fcb5dfd15e7815ee02d9506856d999f0d55c5724358a1f10e176cdf4a9fdd447b8f2d2fdc778680691ae481787928facc41f564e43b9831150cbe5623caf81ff55ce2647150848b49a560ba656ad9d620826c95aeb5dc9af2d165cf4a2271935ba920337b1f15d020517c09d2df46a1988b9d9d0943d99ef609f5a32442e45efcf85905601fa50f7ba3a8f85732d9fd92c20ad39a52299dbd1ae06a5888bad377cf1f62b6eedc99ba206a1e49021e3aadca26f1d88d4747a698b88d4d708f814a91c5c3f61916ff7a3c51e45ec98df9580884402a41bd0d40e7e09479a6bce8f3e4feb1840adeb12a6bd2e2def5a3ba1001b567261bf56f2a9ceb187377dd9ae23d2cb40740ae4f59438f726012e9ed744a0cdf42787addb23c4a71b1806be7b41ed233f667003a6537ca4b78addb03d3562d1115e3c7d9762a8148ba3ce28fe7ee81b9b7da6f02fcdd15b69f2301adeb9a8884f6ea6702f50c21f60429cbd3ec30addde20765297e88144c2a1ec84bfb9b91d39c08d2caad459f1215c392543f99d8e8fb9a6d2e78ed3894cffdc95ea1edeb654bab95910d5b6b156586e091506e75937afff1726a60e4f8f75c7f666ce5f7c2ac5f2a06a3d228888a00111bdd431645d6a49ca5c187bc11269744f3bb38496424affa9bff3e39e3e9bbae44249c2d789524c9292cc62045d44ac4772b4952c24afa91b17df411a00b1632bac4fe4db44cfcf18cfa90b43f86f378611b8d968595eb89e7ae98624564ac28d03cddd9814499c031b99bda46c50ddb523a9997068bdf4dcf1f9f8e6c9cea1b350aaf635842879fc7e84c14f3f51667cad6e1d6cd936247a83f7e185e0a5c6449bd077da19d42fab0150606dfcd99982b9efad85352f122339cb872c2438f9e9ea26a8b15db586b7abe6df26284f3f704e1491e20212847d195d33011bed044a4794d0dfd73345c9852e89a14d1d20ed75c510adcb4643302e952c2c4f2dae0eb902398f0fb736889510a507f2aa04a235ea730b153317e57d5cbcd64861bede495829e78ea71f9de5757a7fa05eb336966b03266a41c744109829278ceffd61fd7ee90fdb6dc9af7d435132dea1f452a030052651d81df4ee33bc46a5413340df5dc1307e6ffc676364724834db919e5c21c4335360df9e1f13bd5c1bbd2722f7dbf87200177f6da1be25e82a7450c1d1278773f741d6e9ac22749074cda3b04be1d8fce8cc1c683f3bb23a49d4fa6407289511c5e3ca7e9c46280b3ad86d92e658a7f7bef5990043c260671864572e070d373345af8304f76923f4f4464e6fcd26ae8a0bfcbfdeb73a7997208a2ec8d8bfb502000bc824c572ab742b7e0eef0a3535de554856aaa28d43f1e7af48d9822557a57d6062860f4909b366ea75bba36b841a2741260b0da2079ef73c6e0a0e26654444171ad1ddd685d82df14b7ba3b2e267064ff6aaff610cc6d897660383ac2609de96b6ad3501660c08fb57d60ff199ed7cda902f80b29c8f102af86be99ee31ad247fec421b2f67680706275f110efd3104aba41987dfd24295ceeeb49e3e49fa891bcbba8d17b3f1cb9340050f62d424b073d8850aa78abab940f2aaa6571c1e9dbb63dd2463e8e653c951e358d9a61b379e1aeaf21554d1c3c22d1140bd2a71c8fb5f0a8f9878ce2624d77a7bc8059d2096d58becbdc3106bbf0878fbd4e7bc914817c31d29e601b9323b4ae6b2551301dab30848e5580f07941f524632e6278d2e28a76baca349838e17d5282d272531f61de0953076163dedcc2dae6bb86b231a0c27d97542de2b74d799ceacfe4c575580a55033bfde6528b97ba2c3a0ffe9982cb50538475807a3051938964ce0e89585b7184397b013d141cca1ef625e572524ef7d4a234fae751ad4048d958b4c1297964c049043c0740f814a436eeee24d6f27804f691d9687a33a90f75ac4187920d369db3c02018d7d4a0a74195a117d760ddc9c8b5a364718ed8c782ef3d425cbfef05bed634d8a157740d604086b31c3f2e0d5fc8e343ff64d556464c2e594f3698dfb36f00b0662a9ac0db1826616f3871b704f11e6cec5ea6a60ae99e36331b3913dab20d06edf41aa6fa44088796f3b0afff58de490023559e15ee1440d015d8887bc8e243ff5efaa905ecb48f5a17f2dd9826aa41035cea25b18419dfeecd7f28ded808d0641044b0433ab3df834c402917830bbcbcb06b2524d3347b54ea35da4b0b0513e4b100a2fd548ce1d93ca17bc3968822f4c8e285b702ed7ccb1503860989637646e934697b62c7fb248d1dbbe588a9dc734b562db239cc4b1bf6ef146179a9605462eaec058ded972be7bcd1c580f65001e2d0045da25a4e0c34046d9b036039d4c12913e3fc851cb7f387a5aba7f8e7663557f4ff621eee65784777ff510f688fb1fac65cd917f29058851fdf25360969ebf3e5e2a4a093f069c21bd4883e574dd863edb9492b817ebfbe28a821381fd4acacbd4c8e69a673b07c4264d3766dd6de6f7043764a3049d03ba650c3878f6d228b658648008db7f47dd2f5583d12f16c23373f88fb69b83203831d35aac3fdf397c5d8fbedb284deceb5d03f1eae682a892bf8a7c794948e1ea5589c29214bc7d9c589cfb97ba21676d13db19ea901bfa832b5f93517a58b95f648238d132147574ee3ebeb52d8437d1083d6476c85d48835bda9cd5bb3d26f5c37ef5d00451a1b462c780b9eef0dec58ecd5a05dbb10321d59dd17c8860ab4c16b2b215080e92d97ad9da2c7b01eca93bed631e56d1cadd0d1be9cc7e5dc6d0c2dfd626a9a5c9327ae833735e01b1fa84203836d619f01386d73e3be9af0a125c58da6b85b1a57e07751524f4aaff37fc0821d5b6042373c752474166bed58f47b0478a18bcc81a84f307b7fb5804f00807b871832ad56c330fbd838217c9a60978a5d8df119176980483b2de8363a13c9174a0d9f8766b7e71d968a844470536046dfe456aa230a50c019bfac7abda0e57deda16f7870ffe2b536765beee1b51f61850f8226ac7308c19e9ec9f4df8f1ad7f83b692a7a8369e941637021f66c1d03d7743d36bb8cef725032074ba8c8b14af44557428f2bc4e13eb98986b6619f525e7c4f82573d4ffcbae32e272033f1006826ff6bb4df3ac6b5df6fc4297cf079a18f7fb1886e6e86611a053250b92421dc46294bf38714c02e3fea8457a6579e2916966c56079639cf3d55113f4090d4d80d9f8a530b9bf63240c16e49c51bea7c775d5acaf00d3d8bb6e66ff5b17f42e5e328d1dd531491484abe2906c28584241c9924eb111bb91deb80f27bf537938a308bc89747cab8f9c5a75e9686dd94a96b1571c2520ad50e46eb42d8f201ee505c91168bd00494cc1945b402f86b4491ce98ea559c20bbe42dee081492247bbecf0263c1d4094d49af60d451ff76ba66ace937aed5a7902a0a53ec38bcea645cf1a6593f3c220af8edc0658b85481eaf6dd1ffd5e7e57f6544e0954b5899ceb22b449e0ff197f3623c2c10b9712799f57818ead0b823ad1f435eac554d7ae349e3a6da39dab0320e056d7de1ab5c53bf3786a2a932a845df6f94d85f85d5cba88292b6c3deb5ec84ae4b530e1a2e739511e2cc683cbe6d2e304cc26fe7f2ae5771d1d9b7e7ed4c4da18e3b45a8e721ff6ef61313bdab4d93ee4c12905b18b3df172bed1cdca177f044fedc903cce8786b6881cb49fb80f96115d6fc7c99002c7db6797fba41998f50163dff6be2acab152619252c92dd8bf0147811e19a3c497274f815b299dd5e53f84eb8017441509a8491bf62352d39726d2f19c339621d862a9534452755647652aa9342d648e1521085fa7956e25a5e9c6674900b44011f33eb4bf07e844a3dd1dc01ce9d15d5d2565086d07cbf971b0ea8a2e66444aca44d64dd2303fc7820e25d94033d5ab691d29bb5061af7584e40703524e8d668bbc39c688b6c3066a600a9ca6f4b6a0c26f1c22598b63c165eee579bea1d8bdddc32ec6e67fb92ae63b93b05812bd63ef8506e58f6d2f069c344c9578456d7747c17ef5f6746c5a7b078abe5e77321d78c6afacfbf05a6cb22004ff8a2494bb521ef1fdbf7d23bfb32cb56dbe095df5e699df1ea3fa2e1a2e19d45efb2595b184434f83498325811512dc6682b28514bf685de39174f1399886865bd42fb782689660329d6cbbc72922c951b259f4a18e9af2a4cd47ecf079d1e09d1c2c44568380ecafc2222db978c243d554e6f0c5d89766095d5967685861abcddb0382545f6abaa5c08bc381895b119a7240c2a827c681b94b94aac8bd9eae921a9cbaa583ba93baa091c544e456fc491351b27102910a5d9fdffc3930f0b395e0df337077da3f96691b7a2d1219cc8a40000749f25fcb9c5f21a7e33abf807d35b437dec43086e223102b619a0e490400350b577e998a1f9544f1ed6273dff321030c17f1263046d65a200b049c3a605bd804c42ea5108d482f23803174959fadb4fb42862204698be0a151d92a694559d23bb78aec258f81ca84c32e2b6d28e0af4c880b8ecbf44a8af65ba0229c5c0309f8591bd690cd47fd5edfe1fe2e37c3dc471009d14d8e19406652e1eb9c4d606683d168cc1beea2b0f7fbd2569f735c233403085352e002ea3a5e25ed31bf78d12348f9348c9b9acb99408a9c8a85b56d5a888e7ca2920c70bba6f290225a543321e65777ac7b38368ad69036b514d6a002c825b4044b3fba2e53d33c39c7fb72c5d209fe433783da12e46c8ee8c9c5a674ea546342b3a4b1de8c4d593cae7578573597301976849d7b92a70aed4c8c65f817a4f12273423b127aea4ff4b6cb2b1f368a74f5e141680b0ac8148b4433c7d6779bc66d332241114531862988047565fe6934a11fc4240c7157138959c0b35531c34aea9a4aac2414aa67a3cc283d70b4bcd7e3d915b7c4f2dc6fb0343d10be6ea4e66351c462930fde582929406b89810cc584b73a0b7cb2e08fc87db1c85955c4009e00984da66054c2854753e6f88ddf654c603d067bdcebdd99db25c26e0fad02654ecc54a52c940e7dcf699805ffc021027d25920b9683c0eaf7a0e645c3e7527ee36a5ed79e27a2da698a68f800346070b5fb96720832a084792a1c269af85ab168795585db94e863bcbf3e18b7c58b5cb1c6f9f95c7fe63008cb4c58bc6a80c8850220f70e6346e2710f02ae4dfa +MD = 4da010129dd22d2daf6da3a9c760e3ba8a68ccbed9b59c8525b84ad72ec04be130042794b8c03a573ec41804c9de3eca + +Len = 76264 +Msg = b78acb49bd88e0212f862f96ef28e2f5a6c7fa0f715b9f3cd79eb4a0ff6eafad1f73a8e93803aff2014263bf208ec128a01a39a9a0d80763489dc06302802b27e683535e7575daf08b16903e8f7d44abedb7db5bc6b19f3be657d941f6fea1f5f2fff530dea50923b54ade9ca3bc168573e607ad4bac0ecc971625c143b1b81d2d32b5e5da5de39468257460c315ddbe1ceee5289792fc1e4420cf6b516119a97e63bc07d063104a8af07b12594e425fcf199e53122a133ad6bffdc788d56ca0ccd9311e2a80394d04f41a3bcc30ec6f74ad5ab7253ef8273338d85e51d7580b01dd3db04f7c06a6bf767a62848384f6f2f340da369456ed45d687b7122d85f104b70847a71f1e5ca2c1c20fe90fb1fd33337946aff6d395f2e0325a34a09c5abdafb96a9a312a77941c1bca639b1c8a1eb52c83f62a1725249d03d020f8454f140d79a29079d1007fcead1c5af16ca89bc0821775f8cba8c25620a03dfd27d6f1186f75f1c0bcfe4a209f8c36d74a5c929da38c922a9723b454b152f277ebfa3c19c46d25ce9279dd5a1aa35f165eb0eb95b66ab78622a0e2dcdf6fa92d38c0dd589f12946bfc7a20c445e73d764fab8eeee4374bd615263439d17ec9e8b732bc1d29eba75fa207fba549e238bec65564f0547db6e017be92b1b107ba701057c2b08980c4712b2b56474d1cb9b86ab753e52fc35f6dd16fe48ea492e38dea37d558e859556b40eb19f07a1c262ae4d844139c92b044eb411216d4a8ae07eddbde5f6effc01388512ce9f86ae9dddbc120c3c471102f0c3c049269d082a5c24ac60b42f96f32ac64777aee8e6899f878cd3ecee8e7f4dc69a2498b93c730118c73a58dcfc88f532ce2ea84100d25e30735c9e37f9e5c05cfd5856078e67181aacf74760a35f426b25683e4793f4b43753eaf2bbf9b2f2c76838c1307452dbbabc1c226311c27ccfdb98b335165d1c0cbd236cd2f4735fc6795a8cac84d2f679730d5c5cce7f1ee15f54b9c1ee9800310d8a8f2580a351aa9f41ead44663e2c7706f77a63fd1a3403f00b456a3220b44c384bc1c04df931448639e602f921b2522a6d6d7fc66a45ce941356bca8797b88da6863f17647e74135409a8a6ca1a2308482c7a7aaa9ca7ec7aaf89db352fecba646ff73efe8e4a7e87af4652986a419fc7db064119e6a1c73195294bb75e81d842fbecc1ea4d17e8730191a96985f167aa54f3d6312ceaf7fa98e2928a8df865c69c8866d4256cff9ab34311d9e7c2ee644cdba08cd9e3fd39fd1e462b48b0f163d4428438c1aa128306b332562a26a28a05163699781d55746464ed16196bf9af35a3b0748c6fcfb0ae6a715aa7ad0280104c1ec381f77f3e512eede76a59fd0d33446233f01e85a7fce15573fac6bcfb10e5bfa7721308fc3604cefbd63b5a025f7d1fe39746e2dd94b0552e9df4003f796b9fc1d2f05132956f16efc750bf330ce6500fec7955c5e84006e6fbb59ad1ac46458f2f000675f1c64c1fc86a9af3ddf899155a166d057a28d139beabdb663c1e378be0d2873addb2d52853c95be9452c51907aae76f0bcc35a9331174041ab5bec2492d85205bbbd5875f3fd9067d50a100dd8b2222c42b7f9800db878187c87ea05bf92054b0e3e3ca51387d714001a6ae9cec1fd2c8e7f349caedfd13f120aa79bb1900f8f57cdf8224cf87e6248c5b8c0f74e5656127192259f2dea4a2e8cab432342df573ad5216a0ab014c72194800fdcc7cc5d4137a8c7490321be04667bb88f2b0316f9fc3f08d75f28d73d2f6732d9cecd86cd59df0e56f0260f46208f585fd90963479ba77b3d463906cddec4e688b3d8870920ab47238555b266535caf0fad50b0964bf13da715b3da862b2f7764178bb27754a42e49334f4bd7776a29394887735885b2cc9f3e27c6e8ad1d81f67a55bdaa3e4000227a61303bf54e53471b0c4010c152a49030035057cd0572ba5ca4fd2476058969db3a03e6656fb9c3955d9b51976762249be50b66137de61a2f17f548747b1669c6383b793054d93957f9e99d605761c6c23b5c9618fd48a0721d3ab8b20723ccdbfa4b66fe741e12d37fbf46c4a93fe15384d86a35fa16e7b63331e7c7305ded8ceeb822286404da884d81002cd3592eb04fe34502facd5a7be87f482c9d11464994165d36ab3a0ae6f1d33c117c59e978fb11d8f885f87323ab776c4a83ea819268ca5ab1900a2e9ffb2a6d1afa9ebc0e14f8789f0214bc5dfabec6b9bb460a17fb68bd11d911bfe3c7fb1591d4b410f03bebb66f15beb08b64c9e9e279b06a1aca55f6dfeccd3982e6d9b81ea12682cfce8014d13732da2c680d386d65b60c4b34369a9421b925dde62ae739d6527bed4b3a066ddd2da3c1730d44b2f5c37af9e76f0ab73e51ff553473054beae476d9309e2dad7e0ba7db245ea14ba07520d75283e9b1891430995056a4fd55491e342d10dd18905940e9ea55b0900c27b843e4099a2ba89c641ad82a4896bbfcac5e9f36a727caa3196e33a6f5488f678bc03a64ae8e0347044a2a8262d0756bdbe8e5641e637355abe8aea701ada0c125fcb42999412fa08bb7c5e3761328331743be4da554210d52e9a9fa4867f6a11129ffccdced943584d448b204d73aeed8ff7847ce626a16a8d1b4055bdfe7a3d7f86bc30c0bb7726a301192a1b523dbab8cb1e71c16a52e38416b5c9eadfa35e4e886a088f42fe3b64bbef9af057996097bd9bff0f968a07ba91e64833ab4c3b27adee9e66f6415f397af5bbf70b2aa7d3d8e16ff833b09dd897bb1cc0e9df9db0fe303a6b5ea659ca4713d455f558571421d909a3c82e6e852d1c8cba21c34c94821824c60296f3be29312c359e8c3704a26b1439dd6b426a5df1df49dc601079418fa3a06a7af3be29370cbd8c2c10496280dae1facfe02e2e225e94a01eb108447b00211fb822714e0dbc1549a2aa8b69fea1c4a8c2127aa99751c4f865f6e892c68470a8ba4880a09c84665d54cd73c0cfb2096eac9ef6d4380000699da8c1335674b68de62d9227caacd84eac41a86ed955d9d5f54d49b9eeb2717d2e8f3d30151b1a57a69850ec807b92a610cdd37b06d15c6405e71c609fb03fbb80730290e9c0c58d615361f6a73abdecea3b9cf03c70b9a3453416cf344391abfb1cb85bbcaadeb77e246f4d253280a9a151aad46578191a1bfce01096b18fd60852089a75228e5d67d41ffae4a804649dd8a62f6832a352f006212bab4263c30ddc9a54fc70fd08832b1b04cae770a5469737092de680d22d1b82265d4032fa7483159139dc523f3af00b73c136edf50458066b9cdcd7223803ab0b93f12704a30f215914aeb68bf4ed9650b0dca3da3fe1bb5c9d5bd1cb7b8643e2359f6768044867b5752d507319e865a27e22b9de5ffbfde518ac96545c6bf3b12a901daefdf58fac44a2497f11aa207115505889cc6e740df5184d45457c62825c0c6f5ff8e041476955c83745fb6ec55caea762ee02c9dc1ce51f279d7f385cb25d85025ccf248dcc8ef6241ba2f7a73b83cff12e7fa45a755b3380cc3d1f4814ca881f918be0865595facdfc69641e9a19f7bef2acac90e9c4b2db3a7ebd4c6a9aa03fffdc1e3aedb1fdba51165d3361b64852a3528a855e66c3bd4f0aba739c16f4e90e8986b27a2c2774807289ed78a3ea34aa39e641bd8b8fb073a8bfc29386ada5265cbff5e54c9f82f3459154c82804ec6d2966cdef793d3b0e2274433532f2fbaf1b720b175a8e6c10571c70378cbe0356eab530db78f6e7883e80fd6b61ec74118f46fdf79d1bbb416fd34aae194100cc43797268d2e23a49c58cf81e5cc397b480e4d26c5f6ff6ed575ee91615b56b36fe5b9c80cd28beb97e3f3d346c9eec00b6f39260e6b1a57bd5645555c942cdfee102b50ab3f1fb403342d397d7a5fc5ef81c45ba7c0a5155b28d97557d0eac8bb517c5edca647847aa3cc22de5024e340f07f46267a281e2b583b6fc794493454141d5135baabd34acd613e0e0da6bebc45ba73fefa0bd8aa8ebba34040a07944f29eb63adea527101b8cd960e58d9ecddc0643b5e2d8db55170ace4678892e0a57612c50a4dc0647189f839b9a1229e22e0353dfa707acb7ab893f4ebe8bb910cd14f21b8fb8e77c4f19db027e0cd685d60212e0d920b34e96b774bd54f0a0f4ce2ac5f001b4411c19ac2e3a03b63b454eb30f4ddbac959673260d370e708c32d5030682ad56a99322972ba6eda6be9d0276b78b3113aa0bbb5577303d83c1377c4e3227e538979dd49b21dd8e66d6e99bcd9a2d6bfe872af9b6313d54a2f68f1e5ce7644ba28188aa08cf42587f2ad7753835b90eb5b38098c8d9b2f64672b655cf84cc335d0de03d607279ee4810d32946f8927bd19589232dcf4594e6ec299d06a8d44e908330f942b9e8b26a2f69126a715e45eac3c123258049b31cc9755ea2a1f0f01587f758201423474ddd05eb233e80ff69c4a513709b43d350710635242ec6ca3482afe4790f9e0f7bb045fdf19e9f0ac6fec16e7f8ed8681a9978aafb9dba3f8619c728be1acd8d7c3f85d5663ffcea9af892aea2c95c03e3a9391a998d3fb272a3e99f8fa44653b7e151fbe1914f315e38856e9ad953193406c41e9e6bebd582c763a34e5a7cd4b72c36fc0410fa5179453608c84d621a945896217ab8332b5edad1fe7aabf5831296b1304e5d72dd74951107ab83fdaa7d054bcdbf00a9f63f74c0eba4f7250122b73d4310c56d37e8aea305c51b7a3b66a3416dbbc3b4f8dd2b9d054deaafb19fe457aefbf73de34e08686d95828c3fe999139c217fe8959045e2d5f5e4ea36b2c47cde805169820d18ddc9ad47983a6e8d4ee36093b94ef17a2ec80d8468e333de395c1e627476be767f846cd922bd7dc63fbdf9bdab97893ecd761537a0497b78099256a8f343caa7da2864b5b03b8ffa72867d4c3401cfea6b4aad7d24fbf2485a2ba9a34a7bca135a40257bc5272d8083f73bdde7102e2374c036d36b6d40b5c78287dffe71354f8c561f89d622cefef06ae5c149353c60767121b8e80fef56ce3181bd83e684b2fcc4c37e6790fcdc247bdbb4bf036337ecd82ebc2f664691dab327da8f2e30f40826a1a7fe043f9eac84be26cced4b00445f9e5ba602fefd7971daa554cae2795af64ac50dfeffbd052fed7607655c501981f105e06860f027082aac994ee1b941be1f241bd3b5cdbac7ea40d30e0fadd8e9e74972f925206fe0886ea12ce74a78d8af63bc450a372a074515d449dd800ef1b194b247b3f4c095845a20e74b935ce07bf243a5658fff488e437f9b5e6d2834108632e685f3a5919efd8cf0872a6a7ff55e6687404e9716167829850acbc12b548c893813839b5f48d749eb32761dd1ac16796d32e98dfa8e1286995b3246322e1609bf054b2e791265dc39c61d03b010a910c9b5e7406045b10b4ad82733f2edc1590da3b0bb597c27d86eda75a885c384a11f31ce5ad1edc22c1c0a2126e8140ceb86a73aee8af69bb2ecb82678bd2547cee03f1539e9d6c46d7f59967b8c415735dc58601488024ff0560795f0d0c640eecf464269f2a13644074f1dce59f63ebc516fc6e9cb3fa3151d414abd6b273e851eefec6796dda64426631d8bcb9332038835b5baeeff43a5b4fdbb1ae6b86f26518459bf40dc82e26f3e2c306bb8cf900342d3244dd19006bf857da5ddfa714729bc30ed7b3e6ab34428b048b4c775e6452f95a2724716cc9f70f8eaab7dd36be9f0085ec063bc1b37cb4051315fb37ab05483b1f6d0466bc758b365f9b3140924b8369f9afcf59edc8e62d66be206c1e74a13df360dbd78d9a54384232a91a36c7d423c755aa5c284fa7e44beeeee605c88cc86da4fda5858df1fe1c2550acf23c7b191ea1d5b0ad3882928c4d6e8ba828914453e272baea77eaeeb41b2bdf0ed200b5c53b573fc4acfc9fef84a7444ebd39196ec143fc047fc872d4bd4499d1b0ec5e86ca38efb4d39f743d3ba1fa40af0baf86ea77551dce12f142b3a2c385ffc77b27f680aac7d4f2773d196593c725906f630416ac7b8b50d3c7a44d4670e617767169385743d87d11b9c7faf929474ebfccb829e867df0b7f2b394e08da8e66b62cc868de7106c9aa77ed6812ae3ecf088aaeb6f329f2c95f3619acf30d1e3ba320be162799875dab4132b8c8a0329bb3668dc8b409eb15dab0ec6fee50bf1fa514f14c190382c17add3ef101454a382625fe64134ff27458605ca0e0ea999924d209119ef6207e8113ba1ba7e7af30cb92a894f8423170410f0f45b324d3318820af6e9dbc891b27ad4e3fa1cc890b0974345f4b2bcd90fe85ad694e46966f39c78b69ff9be420d371a164d73cff4f479249cef452f15cf58adf11999809dca08f440daadc5916ef295c9231813986efb590e7dcffc35d8fe64d477c6155ff233f825f87c61284e29b26d197e2603768a5b0b4e97a6b1a34609e12dfeba1602ba1ef697ea334f21490a82af1a69ceb1a2a523d040a121c4dc27a7baa7c1688217b313278b9eae8edcf8aa4271614296d0c1e8916f9e0e940d28b88c55ddcfe6b96f0c25b525aefd5227348217af179c912bba0058dfc0b7759764318d61a4a73bad52211b4ac8e344f0b1dc81a5a639606d28abb0f8f0a581ee6b48c2ef8f59fae87598027094e721ffb2b023d78703cae0a4f1ec6c06c4deb81e207af9f86593caf6f92f599b6f75aeb7ab82c732723d20cf818fcb8bbbd86efd5729f3785082af56d2d64834e2bc88213d3307211b33c808d90f79e7e10b8d995b647e77b1341005a3bbef09e773069fd398f9db455b30c146d019b3ead49e72bb9efd8efe449793ea349072f415c4840d4911d9a6ffe5b979960d782fe01c09e65df3269e20a07214d4ef188f212c6e58a801a4b6be6131dfb5c79d26aa80df6a15e1c71754c530c2114d531f31b8bf245a2bb4eaf33ddaf7b3faab65905753b54b5be9005d6050607e5dcb3ab3f4072ec41292aa5ad6054014f91b733e1a176682d414dfa71c418e7072d9581458d6a67a38c6ab31b451475d6575c610438afc40ccd31bde53849a9c3f25fdff719e49e100b93434733f7bf1a232e4936e3ec509a89c3b4fa0aa13561509a2c1b8de779d2ce2fbcf7d306c8641eb4543f4a37f4219e8b4877e228732971cdcf7a907ce030fec586f4cd4876fb6f76eae6149798e73411e12667e74c637d8032dccbaabb71c3de0906c8c6b22940fc74f4ea15243571dee8cd42e5a6569b3bbc09e579f2de4401acf46c866534b6cf583273b780538079c3351b2a6b4bf487d5c887f16dbfaab6da8862927565fb76006558879589876adc2698bf818ab0ebe5e2591b145c1c86f88852f2cc043779d258408d491faf3a9a6864abd25bf6f0542002fed0fcc3f76fbde3ac5059916138d2d4d0855c1f7064c225f64406ee1c8b482ba287e8c793a7efbecaebab32b4999abc58328a0094a4fd84a9c1d2c2faf0227b1022694fe208e68b53844442fd5d799f2d36ef792ec1e128cb3009970fec789b4f8ac5836bfb69f150026ae8c1eb3725587bd3b3c72336ba6478f198e5e8103267a5448cb6e64298c84f664c8aad9cf7e0e780d5e632c4e17d83d2ea034ab3e9615d30924b323729c3528097df0a6fbdcd643d08145653461c38f6b8f17b29684499cfbcb348114c4af3fff1496a7a1e27d95174d8f7aa904c7fa42838e43a5618416b33758e97a8631a2d814f3583c3f72d0540ba7d9268124023625fecae5ce63c4a1f196e93e619af507079d45354454aa1954250d3767863bc8feefa4c21b574b4a7274fcbad719ab1e54fadb27817176d9af9d8356185d1b7d76d78dd4e8dd0f3f3289909a675c398095a2968d7777cb078667d80d241705c6165cd298a76384e2ca4b313792c134c0421b03c1a6c61b45612a87b70b529f2565e61f87e79940c7a2107b1cd9e7017fd2cabf7e9feaebf5d83bfefe4e8e5c3ddde9c12d19dcc760429fcad4ad4c33f1c048061eb364b1ab4432ca4d5e28a151f6fe63f2cebc9d4f343face99d5f50d8b309942c91b210d85da5562ecac01314498a7463769716e6ef869db62a9ecc96f385c622bb616dff5cea4f1d14d335f73e247f09921ad8b9eceb29d4c5992bbf3a53389b70d13da2ea97f182bcd07e7d4d32e05fb1b6674ab4f3bdc00ecce2b3cfe857e182b014458f250a0a235641090f5c44d045e8272bc036d5f266a876075cbba0af415c6669a327e52df8c3423cfd0728f5df2ebcbf971b0f065dca7a3c4953af5f4d54c881df071f48ada5e68b8ea9e95addf87c78b216d556549153c51e26c07bf7179f209b4914e4b28ca2774cdb2259d2d40b09a9b0a57cfb9b973453dba07fef437eb8507462ac87d60a82a011408d5e5fccc4d68f1be4b347b8fc82b8bbf58636dbcb96ff84eace10832030c2e06fc0fa565cd0f885280c343da013648f576c803aece760f839d5caa0f277866e6bab122c1421839db176df99a19e55772ff2ae007eca4f39143f72e85bdcd2672b9d55b28d30c6b20b73b851838c021fe9c92ee0f3a800c4048b97cddee91d5709e8238e4a87185ea0933cf9c84500e60f5071410e192c35851ab7c5fe14edaa914c1a13cead2f101b560c06e281c8762b1913a5009627ea009d31752bf8b9fe5c1997e77c1b4162d62c73ed54aadf2ca78384818d879a6e1153b3300afd18beb4d12b7de54a15c36b872321b1389b861f40527b0795ea4e320ebb9afdaa70685613434b9cc202be361688586aa3a42efcbffbd601299de6ed0e992a867957879a508de5050baebfd02b11d5f3748f73ca52ff370ccb3be4acd3fa4337f234990c0959bea09f5044c4656e4ede4393e0f2b9bb227ce33ab3ec0f5d9974adae2925be354d01f5cdf98d25ec17ad7978132044de0cf41a10d145111181eef41a9471dfbf24bb974e2a951d19b4c38e9276bd94d66ae4c864b92279d480e97e10777afe45ba1ffc7764769b75cac30b8988352a12d0c1868cf81eba053b0694065e9b8a6791a1adc0439c219ebe2e78b3b4216531c33ccd200a84423204c8ee82966e14a3200323bf24805fe303684ea7a6fce6b1a6a914946d1db2d972a2d61bdb6d2d770996e6da93cda6f13f02f5dbcd421ef11f88f5709c257c6a0916f3187a132551a2ff7f992dde8737c57126d6a37b8e9e826ed83b14462f623cb7ce2f1efa9cd1808f56714f2d81253b452a1ea613a60873cd455a61fa1c6081e7bfc6167e146526c8f4096455154804f1a82a51a505dd6826b56511bbe3d37d3940541d27fc8afa5ed0a829cfc42eb7090970329a2e7bc3fdb0d180061649931f187f8f82e5b1afa38503fc081e37d5fdc686d58d70624bd4b03649531411482b709eea1940878b29897357987401c63277d496d98c2f342e4be9ea3d7df910c11148b9559d6b2163469cc8eb65fb1c6995f00318c241217cdc82cf2fa43f919252f379b26ceb06e354d6cc9b84a25ce5995fb6c5c3369842fa9784a437732ef1be25a7da3f65a02c2cc7df032095ec490a7a1e6aff8e0d032e7e8735a8226d61cb55c0177589819046d67cccfa246f0651e59662e796045fd0ce634e66cbb185031a5f04afc53fc23b89225341fc49901808db681c0cf29b9a0d957903ddbfcdedd9d11c6e871f4463567c30c87bf088b58a49c4fd517c58d2929a2fffe6dc9ee41ad2e9126dc47956d4c6dfde321862c2b06e140be1e61a2313ddedbb759c8aae63b0d53be7a3d39e7aaedaf3ad1590c831a4dfd85ce45203f7fd3ce6e87413853b177b5b635205a2bea09cc94b7c952e74aa72e320db82edc56487e2ddf7bc01075345e18f4361fc2728af9fabb2027e0feb97bcbc503f48e2a0693fb48c06ba6f10cf8ec9fc9b133ac37e072c5a4b2f59c498a5add6f9be064d6b6e1ad56609c8bc728381d1f3806feda2907bd9f1cae8d2006e63d424b576a7e8fe5f386c87aad2c98065880dbc4d2397cbe8b578c9339069578cdc42b7da5c6c5120398cbc9be05f05d3736c2f48f1e7fa117152b2d08c2df17753f64d97d78016dc5d490102618d746a288161e9d4fddb749202003631e8dcb1df91df35b5aea00218240d74c2ef6c781bdffca64943c080ac2949db0e0479cad3b7f54a53629d200e902a79a0ef5ebbc1ea4814cb7459d4041af8458d1b4930d4db283c5d265eb4852ff0677827bb73cf32ecabd7e9f7dd5e6983fc4b97db72577dd0821f64754e3055f7f4b503035e784c42e1fb3f2b0aff978565b604a11dd01296c236c7614b74a49977f41be6ca6188f34da1ce83fb8c27652848dc2a71e32bd3631fb9b33ae69e5d8791dca6462f8b76456822731d688bbbaa90a8d83ce54c2eeb56a5ebaafa95cc9a2acff26016d6346fbac578ef3956f16319d54add7ad5f1d168266b0a154d6f262b502b96dbdbb633264215ff62fb8ef840fbf2b1f86bd4abc0b5c1d6eb07adc22027e258c30e84261702dabc79fc1cb0a277507902603fd0fcde709fd06710e485919734810126bf299227a4e2db0352baf1f4911d75abe778fb07d369de3103e837baa87a360674ba7a8d47320aeb24f6d64f789dfea165c1b5f8001bff76b6a484dd23333fbbdd66269c21ec2e2ccde2bed1be287da8c26379b1b46b2d5a6366f37f433060bf5f9920a4b3759750a40af61bc031753a93dac0c55edbfa64909c2e0166f64b7981efe3678a62e8ef4ddc169e3d4d77cf309415b36de2e92dd4a07f143cf97272dac6f9350538956131d2bad973d0e7ef4f3c030c60247c0e9630711803be6843c0badc9db26b1f5ee69b4d4e02606803461ef320e3f5259f5bb8ae9d79b98f64da280812108f0920e272387c67705ab3abc980a157e968489ba58214fd7f6a4e9dbb0632bdf8c55f9c1416d521854268e6d8160e3a85c6a2ec83860f0d748b7971d04160095ce67399dd62f8bf13b1ab8da73db81a3ec326b4df34ec384d656e0d14543a810fef05625aa747aeb01af406d3523f6598e05c9b15194cfc4e7aa4b5d3b912c3a6417d6bf84e525ecf00caf8d91e14ab08a0bcf5c1ada1d80c4db602aaea993f9480543d52d2996dd4e5a8da14dbd8692276b05b716c7b3a1b610a7a06632e537f1e224ce6ee9d5a764c06013325eb1e6ae4ef3280d049b0d0371a9272ad52adba8d502120dcde8307a67b24a086dd39467db2218c639ddaef327ed28c43a6bcdb5066409d27cd962d8770aae9791f5839a3b19f00a0d7f6ad05afb09fa08b0f5609ed21b879fb024c517f1a7a6731d9d8f956016a1288b2be0315c3495e7ff3bf1c5d4b0f2dd735d8b6fee9dffba56c98e1280f4533308d86dd5970f5d816287afa2f330dddf2cf770a889f8680fa5efdeda00f0e8d6ff59bd6e3404197be0c1e35eb6030e4de2d9bdea4a20aa1a14f8c814687427b877961823bc7a938081d1d520a6914dce9eebb95cba7e8d82aaca94e941e7d9827876c81cb6d991364e9fcd114942640a6715ae276078d8f06f4e8a8011b1c6db0be41482aa88dc454e1313592a7f19aa453fe272c477550b6c6cf102633ab66c36c5437d20f13c568a16ee1fceae365640519e666fe4ca7ca80d1396bce971dd03029e34a17b7811088ea88bbf3981b561332a2be82500ea2b173665a628bed57a836dd0b48e5a1dd26587c78486c370afcecee8b7a4bffefe74a396a85f67fca230f878e292a823f081d4f8a5ffc32e3208d2c665c7ce60280aa2524bf432fb83f18655b2ef2bca68ccd649aa0a4b98f3ca7dec79f8f7b7b1c37ac11550e87a25af608fac0eabbb442cd7e01c112156f9fd19827b9e00aba285750a90db51209150cf4d5855f09d8c8b1de5837b0e0f4d87ecb2f420b2e6023ad95644fd3496cebe19b73f2dc11946d0f18165b0da6bf5523fa26be8d50dd9c9efccb81f5a84e4df86f6e8ffe7d77ce39bdb4c184d14fb44597a685d31cb301aff9574a78c90dc9d6032db312b7e35ac631dbf1b2faf6647846373e78dc50e1551d800ff9065bddfed92a12d53b67a12916c472147e73f42068515eeb3a67ba22cbee58d2ea98f8c773fc159272952006cf36b925e618d1c2807d5da69147fa9da6faabb30055a8e4461c31f717dc55b3dd7b3d63cc858bf32113c1478b72312a112d7f05c2027cc9c1f30e6f75adb0c4c43a755a9c2a9126ccdd102a8396ec5cacff4937ca3fd2ec9a18f1582699dfbe15dd0776df787fd1d611c0dc03f69aa9ccf8a0e5635e59c12106816da511210444db5a54f11fa688ff5a59d8a741aaa613a20c8b37fe6febe944450c7bb4234bc3cde4519b50a3b08b2f51bcc7d8bab5f383f295a28083c1654a92b114f364d9352d4c1918dc05ed1bf93ed4f05c496e0ef6e9915d9533f6279220f7fb4f5440fb61e7f804123ba3245077ddbb2cb542a8a3580aa3ad0edea2a3464db938702799144e9ad793b35726cda32382caacc852f1c46e2f2862ff5906992eb93f56e190acf65e2dc11b8db5b93732d1c69e53b07ac5385aa7eeeccd24801785d466f364a465de512ac2cb33bbaaa832a0e8993396c105b09be10b81a591a499882ef197831387fc415774333d73e02fda39fd4ede5e32bb8507eff8d254328edb2d50bbd195e789a5283d36c7397723e2f0e474d9d35bf5e3b21e95533e5db04dd0952418437983b6d36ab0e151d9b94bbc0347e1e6fdda488e0c09a0b692b840b72362bfd2ba7506d7a1240463845a84e9ce3abf0f74e323ea2ca833635e01644fa01a309a26c805b36522a8d503722f08a9bfa9937daaf655151393bb3c2619188f9d33204b0743e52b1f572cd3aa9a972a593a39548c406d49be4a24a980ef90568e1ffb93bd31eb578c97d1716e5823c499f967b62182813f0aaf4612cc4855794f5f829d5460449eecd3796937f82d1cf46f850ee54d3f69ab6b862442c3c67c638a6bc4675f6f55d2a27b2781fb2177faf537cb51f0f65e02e76b4a9ed261d45d190db5507ffa10b07d6d48f6c18f7a1032e677f22e548093bb7bf23b04b615be93feccca52435418dca629e0fbe597c69127914045c875e0401eb7a1db41c4ea8395971f66f9a47e48dc66eafac26590a861a3b6e7d0a27b2dfa075db6834673508880da3e7b66533a766c7f5e944800e12b2be084fb9ac6cd646dd936f93eeb933e367539472e3a29eac71897d9d399c3ea96379da7d345b70457aecd21f2b5b43d049af7fb7085bfcff33127018ccdc9367f36a263c08a63405148f98c26544bfb9795eaf6b1e8348c6d639ca9c80f7985435823ce07177aaef7323c963e69b2f05c0092c776b450b6b23a594139f15d6d8f36a234fb5f35b695e516eeaf4891c1ce658ffc438c7cc55dffed6646f5dd35cf3c9e3731c44cedc9fc18d3ed8360d66b3f22f39cc3113ecd5ee967739f81946fe488532f0928bb1fc1a3149dac98a4bef80c4bd71ac6998cc1bde34440e3000dc8f0f7677041b4e +MD = 3e82f9f2941e2e8edbd0942f8db71b923cfd2c62cc80f50e7064385616c954eb05bb71a0e52d5bc73154d24ee01458a2 + +Len = 77056 +Msg = 693eb5605ae784d0af3cc39327d3467c59b47b9048a89e6837b430d7bfe0a5cd1e3c5d7bd225d5b867c51fa48dd98f8b6db7b80c3d8f967a12f10d82f68f920e3b45296a0f568fa550f9b83ba1147cf0bd478dff0b2cac7473dd1cd771b7570a675e017438011a6012e0779f8b0b7375f06ce2b3d90746200181461d55df5b894b91cde375afdeae5682441a7446dde0ae2e9f6ed0a9ce4465e4719ecd9006538fe575fdf0e7435ac4e808f2844e23faa196ac791899aaa9470e86a0fe51c02fda63e10bce31b12a0319a970e2aaab8b6fabf11cd85f44174d086e6c13aaf1e7d411f9543a1590e8bc1d11dcb7e2df5bc076569e3984025622d90f4a3223014126f9a6225a1c485a96fd267e2a7f26313dfdc449628f4e2d6c895381844559067823cebb56cd41493ac0d29d6408e7d78d4a21637b088f65d421215b30975ffe71955a6857b1e37c4f6efc838c058c1359655735ae782cc601a8601e5ea27cf0ba593371854e97bd7e108c76cbfe7cae49544c0721668f189c26fa1338ec18a5fb773f1e072fc3d26fac69bf497c1f700421ea21fc5a1f234ca4d682e3ff9ce6dbf568b706d9d184c94d7da62d06dd2033d417ca68dc44afba28dcb38a636e7902dd9583a9d6279b34f8af72a0251e887d73bd4b8d7566838dbdf4ed539ef8261937aecb19ac2fdf5ab7e76dc9604a6e8b08c3ec92aced686e68067a663aa1b7c8099ad77de64f18e0910dddd13fc99b049a11f59f0a42260533faa0ecbfd0f2b65d43effe09f10d718f0a0bdf4a03d791328faede16cb85f925b8a80db3efa18c3a905bc49f7c87b3b7c43f1c0a61e9dad7255f7558f14df34629daf0a0658af1a96962f630584e4e1324c1af06499b8691bb4f8c581c459a9f337dbe0d9a768eb0b64ebc42ec2aebab12d8c1c624b33e6839c74c9fb5369737bfdb9e83f62c0b5a5f653f5fa2e3328577cd7ad35bfaa965870fdcb422e89117b63ab989e1760fac4df0a70ee140caab39e801b45438708f8d6f651fcd233145fee337a7c31a42b066361cd8120a5c2542717ff179353aef342f0f691caf1fcb811e3f6504e14d6d9381c5439b098ff978b01b1331b8b08b62960119795302b12532f94c0c93d8ebbd17cad9e5050c31c5edfea1e38b7a6d00ed64b74bd882fdd4698ee343f88a33ca41542258c67ad5106f4f23f9743f9df77c5fcbfa0748b9750926b212d70c4ca4478ba55c1382eb417f3722da3ca7212d8b1bdeeea6fcecf05be842dffa053e317196ea5ab6cc7d3f65de25eeab5c038c62c0778e7d469f2da7fd1a13271e125b079d79b875ff92f4696bb49d88034bfb49751f4456ccd913358dc31727ffcf0850cadbe019c33347d307574f9d47ff6187625d78f739a28c4cbfc352c24f7d22954397386ac26720ead9976cb0cd29a865b0b9902933028035bba42bbfb725901e30352a2fa13667f70afb5c8a40d0b72b87bbf5b46202d539aaed0ce8decd3a33ba3d1d320ba80442c10c87f346fd76210eec0f6070a9749eb4275c036d80081c09387939a6c6e013275056b287b7cd8e6ed346f5020045ac00d982d90b43e22044aea50d1a97e1b264512f91ad06a4bccef9033ac30d30adb78be8326120b08993250b761023f0669f977b565df2e3f157e4acf858da1ee700c6f5d6161e5a9d1f27123b3073f67900a8a3ca41847276311eabf76c6ff5a30410118cd345c8a5103b2226218ed931b00e0db501c33993832f66ffa5d29f29eaf4a41d409ee3e88eeaa3fd8c7c83d7d75123df45b8218f759d47d8ab0d02c1dbf71652043091b0c0bafd891846dab29cf74c0fb46910b431f2b449272808b3ffa3d0f1c804bb43ce3599926ef3c80c288aef0ff6e0ef48dcb5171cc12998467d7f38c233204aeae1e3dde0358b342ba39276a5b425a794a16fd717201a99c47e13b78fee8e24ed214b323a161705583495489a963e1ee0a6a75c03ed02f57329e8b61ea0563394b5f50169b99e25db031dcdb543353e7413e50ea7cfea939ca7859b38f27e5d27c569b036c5287bfc39b16dc06412ee9711b255cd6fd95b861f72cfa58c108ced7b30a966e3beef03feda9081a0db1592c894993b74d7357bba38bb2d1513a72ffdd152c4ba666937791e9ec2a09a9dad5f1542ba87ed09c1a05ec6983690963573d41517f32ad1e2d308ff490b566d30febdb8125021bfa1f86c57ad968e414706c2592635120f4a331d1bde8a186d63cf13630b767d3f63eaebd835de1590addd2185ba29250cb7c2e75b4bc5e7858ef79fac6da209714fa062b0f9b52e6bae227c039b766bae73a8ed255763cb9df8a1e9f9ff7bcc3ead3f5947bec4dfba94fa583a91c5ecdec50cb7e2c90dcc9deaf37ab38aaace8cc4f258054fb23265a58f3f9264beb185f416cefb6a6af36dac15d943d6d61745dddfe85273282f542a09b873db08c18949f0b9d6022347f686308e0faba8b04f402e9096f1cedd6f6a904c45c04c24d40cbf00dd59dfd01ec06c2281d1c8a0943508d939924b449faf4a8170d931e34c85ae2c77364797cea1f01c000fddeffa04954aa31e486cca3f62e25cef6005dbfbe2c40b6202a3ef72e504f32f8fa56bf4fc6b3c5d6c5ed963fef472c9809268b8865003a6b9fd677c7263c4f788cbce4e66c46d166021b563474118313a93da02c058c6c814ab2004c0bfda306d690a5bfade9c13cbbd44876450b7ed360f1b22b865bc90bab70055f7a39da2e9850960e140331a563b70177da9b8c61b0e126098fe4dc85428f1b63e947514a229b2a8427298f4a9a2205abcd581849298a70385ace1368907da6ebd1cca4f405ced7a46fd35696bfa3c99475b7cef42b6c255a9f6e0a4025ba2c69dc2041c6c27a21d14687040444bab1c46c310ced46f4b9c2c64b2d8672c3306060e8b41ce90b9dad63bb343de9e572be296a4ebefcc2a21367ebf9a5f8374761f89c8860da21bf9b1ff6538defa270e425aa20c3cd3482cedcd70b492674d5d11ba21b5d162aec2cf3bede8ef68030c909a71fa628e8b047cd82beca9e0a605032aff94c4da5b7c5877b51bb7efd36ff1db797d0a05dcf30927590c4cf667b41e5fcbed8c110b71743b2498de977f7d8fa7225cdc3f243fbd4363da22b279b38ae3eb86d10fa4e74910a2290d68f07f9285d4617f444931bfb3af1fd41bc24a6e3ec9273cdd0f27027d9794ec6b0cbc22fef7529c1c351138ffa7a209392bc0f2f6cb9a74823579c50b6ba222a7bc7e6599f3f8dad0ce274fb0b22d6a159c5f40955ba62206fd24ba40871b5824e90b86de301be266feba2d4d37869fb6fe6d7da3e012ee724e720ba751c735eb79adab5517835be9ab14f95ea0764f253733d4a6c2a77fcd12a9ddc5326e620356a9fd870ef7ee5ebf7bdc6c54c5226831f96b28682d7e1f30125b2493d78674664aa3fb7e4143cf2138fefebb3bc289d2076ab03c6c927090f5aa4bdacb4a4793d7c539d0270143b993869c3da0d48f04a4fac7a52b64c91a9af5c271125683c3978dca6a72d1c36fd39cce42bb0383ae1943f30b349c31b6486212be745130e0d32135b6ea5a562b426a1d3255f46cb8af6cbfd64de1b14c4919c22bb9e357d1d4a9021a564504d52615107536525209ab9db06f3fdb50c4e3435a1ea8b5ff7edf4eba007f39d555c8c8307326c33e8b5800503cd13316065f0862010a6f30cf3f37e4cf2edfd29370a90395edef3625fdba26a6cd910bfa058f633ba7b9f2ac3a8e08ef29df027866e01341528045bfe1f6ba16f99c38891c01e53447394efd1a78aec838e06eeaf196e8e01f1b70424dda95f21ffda499ee856e54b29a4baa251f5fc2258a1cd25af308db1a6ac194898e3ea3055c5713c1448803af82f29ba4aba245b7861619ea1efd980c153f9edd3b3d92745f5ae0de66baa9089a4ab9de4400b9b57c64a5e6404f81bcc4f24891091b2633b1b4e68d128cae83895bea1d100086e8130c60998084fdf41ee37bec1f5fc60cf86d0f1570877ae9f72d17a73a2a1418f418314a0726737acb191d37a691dcc5dd8e42c0a93275018ec929c6e806cb0cc78fff40fcbd4d17749c17bbc53acf27071e67d4e5160895f33606bf431d148e337ab4c488cff293c17552bda5e107fa1f25659a4bb9996bd17c98dd72f65564e0e0371ed3e6cab659abb5886d0eec06ccac265a04a5924dcea4c5679d19f75777c9709604893d48e54627634649e612b7b9915c3762590192b477a4ee0f632fa03e47744441b3100c4f9295581b5de887578ee70d76584fc6b795dd8b5f00b40245a4ffba9494d777cddd67ca0bb94ee58b0544ae6bf50112b2075b9c9135ae46e96f808f0c4865cdc8f021c5a2620d795fdebc41c99add1dafb5634a2e6ce4132f903fea313782b749b30b7066c0edeada0195ef16aead90b58740bcbd0c1f1221ef84f48acaf6dd560e6cf4e13bb5e1045717dfdc993712cd65381cc67d27ebc67597d49f6788e6fae98e789b3c2f05e6c68c3aa2c2444cfe37958fd126c4452608bfb3f878027b3a2cb7251b2921ff87373a27f1939be650e59d3f6771bec84a9146b91e632a4320bf3023e96c5476f0936acf50730687cb5799540fc5dc1d39f9720d9892c9e7b38a41998d6b901327c0655947ca4bd77875d0f6528ae7ecfb268cd8ee6ba60efb7531af8f909c7e36a870ee5e0133805e288c4bb729a8dc9902db41a9588b6101694a8f7842425e2431d6b61e7e86278556137ec608e4961a74a97150bf3e87cc4cd25ed0e8485bfa45ddd80eaa0c77f6e8afb5079066c286633c906b0a8829640812471dec771ebfcbcf7db7ed8c15b8c7a5180329f507e6b9dec582a031efd2835270e9b5974f7babf2cc9fb0d0acd3d940d1413c580d415dd4381ee901801da7da01bbab709637cd8fee50599ee25008c705492f587d9f376912c64dc0854d5af1231c36c999fa19ed0a5252bf5f363b81dfa46cbdff082fe47b033435a56b86e0fd93be6c03cc7756492b01fbcc8d5ab784d9594f3a852d8c9a5c0629897e12f0b9a8ab1f7ab5cf10d365d019d15e4cb21f7060d5d71d19ab98592b64d98ee6667ce365aba6be0964cf8726e315b0fbb7d6f2e8197dd9db879c820cae3ca4ea8d71cd54d831ee0d9a651a6a1f418b4e11d1e658e1d5bf5b68cf600fcf5ac606acbdede16dc04ec3fabfa50696fcf72d0639d41af687da8298597a9d8edcff220a8bcb7234fee413cc02b06110effd80e0364495203a2f365e61581fb46a5426f001f071f390bae65759c4e355c2a42fe5efbf312696c860010f83fb09abcffaa647e3447321d822e4ea68f42c1cf5235e8dcc56d245ace9ca8c829b5548778674862c557c5744b1bbdd24fc5ea5f6429237f46ceaece3b70100dd6560e854b3a2e6540ad6da0879245b8063b406b175cb16bedb373676b4ee931dc3f2346f67778ee2cd48532c64678c0591f3e72ea54f52b20c81c86cc6d86bc91cd2d4cf8b3ca75e059b6ab659cb973aefe6ef74b868125865904dcdd709b369d7c96f7c083a58511997c6b03f99a4a7e354c78b985b7e394f2b6ba1cec791865e9fad7fc4b6ca4273041021001addd5d604177b2b73c0dc331ccaf1935b2da7181c38dfa9fb24b97aaaef128393684b31bf864c5bf7fdc9772913c40e0db0546d07b5a49e508f3e96510c8ab04f6d915a4dbc070e2e6089851bee2327244215c52acfd78afc335a2fc00e916f951530bb7662b42e610ea3c3b90215c6ea0a73884b2c7f57483794adc09e2fa8ac87afba022059a2d9329f9bcdf8a2d3a531f51e3374a4ec7cc4757919646d43ddec96c1b89d0052dbf206741d77d2369ede24f0aa504e31e00184f993075228706c6e376182b026b2765fb57328aed71d3a86647868860ebb174996f530e740ad2ebe84c5767206a5e732c895b33d9e696da5e36463536b572d4cb809863371db5b0e0fac224ddafb6d08144bbf8874cc9e09d637e9be30fa6c16c895b23ea4441ae742de2d498afd2f67015ff4953f8cf638a3b9a4ce45edfc2e2c625b10c22e94cf8422406efef356daf797fc6ee9f29cbcb4b2398b9278041c4e382ab2b1e2f1503e4203c51f2509e65ebd7c1b5846b81d6fea53fd00e2ac6995dfc72b5ba858f2d6041d55d3da71159e971fa276d074e13e29982d75751e9c681ed983a6c7f13cb5313726035bb6ee1fee8a0d29d7f6928836b022da777f3d31be08c27c89e5b64391f84198f1fff94a8968645ba566b7b4da44e41831fad45788fef1c4345ce8e8eb09ad78e274bf85325fadf380edd92cddfc7c15ebb4ea4241601866117d5b0d0811728d763fc739af17f2d9b1b37f57077ff1bbedd80659b4d93d4968719618b1b999bdf78599cfc93a3af580df319d1f764bf17e8cb106a80f6a5781602173aca929f2ab71bead486d8e2f34997866ef88939ee7f872b1e4aaa677a3718584c1882a13dc28bd3df45af56f170bda1a3d5ed0ac7146d1c03153fa9118cc49b5baffa508d0d51ee695a9779d6f5ae121d29f0a02619b569c57b26c8e269af56d5eb5a0b9cf9e6a0ff2021ca185b115e476f4498802228aad1e6e0754160312137453260e23ab2822d40bed63a136fdc9f00596269b00f45b4e2fd0cc302e2711c5803cef1325e086036ff1cb0b1121390a79f8c473601d0fae9fd1debb44bcce19e5ec44e6341ba347d430c20a6b099d8af9784ad3688b2f07641173016c59b237293df5e5ff5fe168e3b32ee76c3e5b392c1da00340c8252126987148cf8725e9f538ea58af37a82d4381f9eb3b47dddfbbefaf4b115c57c48e6fc2d994cd8ff5f1e30b876b28605f9ca2095b01ac89444df65df303cd2fb8439d4cfce4b45824c44841b95cbc71c6981f4882e5f6c92f8b3b93423da513c4ee2af9f8e7c3e83e176f7237aa7a432addff9ca710ac046a1cc53a81e86b6db2371faf17c482a80b915e874a7cea3e53134aef11a956a1bbaa9c38f92ba8a448c583589fa479fe53db1f6938fa95cb09e3092809d97c0aebdac977ef2fe3204f415edbd9ae3153dd9cbafe494e025013f5432fd7c8a7a6c25653ddae1ba4498e52b8200d0b3110727d3530c79db9373af000ecc39d5edd07c642547d187487cfa19a0f83e2019bda269ae6f81243e6467c484715812a1784d19fc3a34ed942d8d60b90825c2a5edd3ef10826d227c7ff422428149b92bcff20711169e45de27298148b53a133bf426e407d9708ed402cea9b7709141e34415bc028170388cf658fbce83fd8a428d35d912f93da1ebb971cb61c3c1356e8122994eff5d2e17179640b8f8c2a060056b3eb056470419f067f7cfff5c1c33e3932f64e4a7af03176bf096882bedfaf941a57e751f3de5442bbf5087c45ec9f801fed2d60223d752347bf5c6bbdba9d5538dbbda18b7e421379292018c85974ad9882747df351a649a534518d4e1c3261b5826f9d5fa8d14061212d137293238944bc0bea15b32db0817030329a8fd67f3a51e68d98e469931ae418b36a2116dccca3dbefafeb7020817ce2a0c89af1796f5208b95dba72d24d7aca41d98bb36ed73fcad3e982d961505f4e1f01c6eb15fb8cbe68d7b354c6a1ec2a04e65a64060e99c1e0ecffcf3a94215bf96d992c1c8707f1e32e567737bf411f46ba15906e19b8a95ce0eab975f6cbf374339d1c55bacc8773892b43ed4e81934d7c449e6c9fa46890edcc01d81d64fdda7c5a238a3de26a5e10bb21aff7b46d635570f8c94866e8c4392b0e2cb2f460716f57aa81b75180eced8d774662e395ce6d20054cbe050f40ef9248385c840682351c1703d122b367452aae7b3616f2d6ebdc2dbfa689c74b358617c6c41ad654f531d4d8335ce91543182f141b536ec5f82cd8e8abfbf72e3391e39c91c1b831d81f47c884070c400ce161d9bba4f0e1bb996e9173628732133a14836c7e945f066dda9b6c2c032ecb0cab94bb1061745daa5780a6c65e9cfa091243fd5b5227a6a3f41895d1b627a622770bc69fa7c405e8fc7eed2f66b7128746a4eb5fdbd1e049fc09a4010d75c5aa2c07825aab1adcd9c352f0a686ca833b166edf9215a5dee85c3444c1f05f512c3150974855bd0a0715c65632a61c75aeeb6880fde9ebc5077b611b1b472c7231f0aeae728ef7b6fa5ba0c7dcaef60f662e5c77a73feac02fc15ad116fa254f40d0e96fde3c0e0838fba9edab87a079ed45106b9900ebf4e796e60fbaf19211e139c88196484b294b5fa96da71762dccb9a4c05d912368cb762cc7d1015bbdf9c93158da29bf641bbed68f2d84784608693daed715f13ae278dd5c21f4ce7e2fa47963a081c57770e0fad2247004d2ca89a81ca68ceca83c07fc986f07f5f4282bb1431d2b2b5f4ce2c41a5fb280769b9160844c746a23209a1707389976c26bd58561908475ae082abed24fca8f83e3f6f380495b1e4e38b59912ff47a54b63186269bb0c28c62b3f67747536968d4c40cd9b2daf6d9c0cc10f66239125f1c68ae4a5fd40a94a2e874a7b50752a152cf57b3f69ffdc6ee562f65b55e45d77dea368b0c7b09bac9a98d4717204aeae1e9b78d76ebaef698b11ca7cf6dfd02043d88b14aaea645ff7fa91d14a73b8aa9989430ddc6f1b0e46341845a6d212ad6eb0a84c374c97f6bf030f355a30ccad1675765d138ae3bfaf605c3fb6799951e7c26cc1cd55aae36868a8f811ca5f282db66f2fa4acde003f2cf2e5c624d8b0276435000d9421b87c920b9411aee4ae37e2a9f020336e727dd098b25662556aa63c8d91589670e8740583b3da6cf191dd70b368e6cd1988d411aa3fe7c093d3fca1f2f03ecb2ce5e739bdc1cc730a9576e727d498b873a5ea56a3e8daae187e934af1a730a0ba533ea52638786f940baccc53ed86a3e17c19261247dfa957dcf28e0620dec5bd92e2ee39925e912276e786d3fe611df75df8f671c74740d671a2e1ace789988b379c6b8469ffb63a69afad3491986539de024e4ef1a1f318df1cec5275d197c7b393a37329cc1d40466db5e2319d380d7ebd940651903ea367d91493563751d799913ca24c5454e8bfba275978f00506b2837e34616281eabe6fe0fc033b455f5bfd8d8e5c28eb78181d7826b2313aaa0c0c5355abc97b635539e7d9074de0b36d311c93e3aa4f92f1f03ec687c1675bfdb0b9f69b0579b1aecf7fc6ccffc2785fe4604f4d590faddfead1b5643109b10a092873a9d70b3a2db93f51eec15902a6700f3d23c59a4d3465d77fd1f0a03db38e1569629ebe81745face6c7231306d38c6fd9f1707dd581e9b6824b90b9568cb817545fccf21bf55b2f11f0a58ee9596218a220da38fb5aef05695b81b39fe80f84a0fbf2446e43045c4ff5b93b2ecab980224c733a1331fe3a916c542d7e77fd03fbc1af23ecc013bb1d30ee964b89fb3ce6dedc2fb1899fdc97088895769f190bb13b442f3bfee1a1e65ca63ed429afa54c5265585ac43c41e6ba8f7a1cdfec126dd361b4c071f6c757b380833d2c3f6fdf41af6273946c211cece959e5bcdeae7e2478631ebbdb81ddeffe01fb0422e31c172acc905ca7f0863a16a345a879368ea908a8ab2f0877e56c8f39923402a59f6d6805359f6826cf0ca7e4c14534510bdb92f3fa5df6000aa3b4a8a74e573db59ed78ad7df253a63ef0d9cfcf5a864722697d390cb3cb0ba4ffecd8ec589021b3609fbfb9e77a1c15bc84a3d4c3e175e3487d5e2f9350070abde16dd1c20991cbd6fa7255fd7f383cd686b26bb7db02c6ff369755a8785ca51c322f6b4a67956bf893ac985beb617de5e7e2db5efe579436b0cdc71aca723dc5e60804193194596e7156cc2a46fe9e91af1d6edfd1da1494f4e6ce10cfb29a5f05dfe256eff65edf9c59379116796884e74a6a63dcf410c209ccb0b20d828393989b4e2a2a2242f41d9b21b9e539a36397511811a80d4e68f765b5290e4bc109a52690bd6882cd54fb06d4c93aa617d9c51ac012bc8e982dc79b279d5a761d683767f036347dc7a73e8197ea9e288b8c7b8caa8da0ddb4b980544c3577695c595346b6bd137bf797eff3b1449827c924c0911dabdd646ab52a7a6e1aef8e498303ab297c8fe426ca14466bfeb00b974a9d106394fa8a84c9cef4d3744a4cab8f4e7e92982f211ce8b8610d416e3cbea618f2c26f7fb6c89c73aac36a0e0a49243da7393c7b98a19ae02cdf345b2306df3c1d8364f55200d721848824c532ecebd60f668efcb27d88968f2800fe26369d0e7aed9de3c5f221e06a69cbf62b5c8b239c61b639d77759e17232ccdfae188a98f14a3fd1776723b944ad872a5d61ad2c3771ddbb7059b5cabd43c18724724ce16be07547d02685b3fa9d7fe830c3f9f8c9e02b08e3e9465758a4077dee0d8bf1cef965ce38f9eed77481dcb80c49168f38f4c7aa9af0b1922b9dc54976b1f0d104db37ed17a6062c9ba1c52259bdadf96ef6da29fb35a1831f75237422252288f3ce142dd5f676ba554463af7fe5653e512d8b0b7082bc311a764a855c33ca1e851c2415dab1e6898bb3dee6e689e767cbe303da609daaa405e662048ba1909ca00b8e2d8e9ffda226375d50f673db7cc35e691d334f14e4c90e927a16381b092ee57bfd5a87640c0c160873186ae78320e8e65d5060a2fa4c36036e67c0146d16f0120ea433c3cf279808d9b235b686ccc7a2212198fbed78a6dd68e50122d040757ce7d569c1f45d07850a2e9dee8cae43c4f10dbfc8c534a547f0f8c3ee3b94bbe01056f2068198a9a68df26a389eaea675557c9cb08a677c698f08cd20b5fa0c67128e963b81bfc894e968643bc3b436dcd6d6f85c45fb746ccc7de85f475aae3874e41c08f9baaa77a9f652a003a83d22fb849b73fed7d37830c0dc53f89cea7dbec24e14f37197765206fe0e6672016e4dec4d9ebbe3e1b4423771a5d0a8085b798ff20876ccd9b96eff2e2ef5fbcbe95377d6858607e8498a4b6efdd76650fc2cb2d18b8bb3b7698449aba8b729e2ba958dfdcf662b2e5f90649d0216bf0a885f95b346390e78ae1d4c3d23b5e5900b9b978b256437fc1cddebc45d94997d269a9f60e088c565afc06fab47f5181b01eefb492e86139aabf846acb659def2ff66389f0280c0c695f51dbfbd81a8ccc61523fc93d6a8503269df1db36e74b13b4ac839542ae7e38745bb3f2d617feb8298756ffb5cdc66dab91ddfffda450201cfb7f77d8d2303ae36b2f43e9b83c05c005b690f1f9823ca6f67b940a5372d797b6e9f26b15a6f32526aa699399e927dd33cb17727c5d12b1327741fd83479cdd953f9f69f75703a214b1de642b7ab0d9c8010da7c49b6242dc4d8437a2330226ecfcf965e5d4cee2abe20ccbfb55133e08e4ee0270e1ade46a6ad5593eb98a3c44be7adf6f84b77f52979f3b782cd1729d033322ffa4780e535bbfc2c76f975622d0ae47030b7fd0af5ee04320567e2fead86789cf7843393d9cae14bab9dc3d0de00e3d3ecd6a7f28b48a7392666bce88d115976ec181fd7faa1abfb72cbb397c791512714f29e34514e83d2cd14cc6ed89a7ec6c04c6b3900090341b3ca6d3e4f85d7758f510a58b1ca4108e2b73b18f7ea8f945d68404153ca912756e31a4ddda31cc4473b12e6128288e04d98306e50c933e6aab4c5785bacfcb4445ee24cdbb4c91c23fade67dc400164f6ffd4f94cff12c68f7723658077edf06383ecc4b08085850bd5976376ca549bc6334f405353d53bf4fb81912bf20be49c99613dc4cff908e71365604ae8288da37ec8cbce8e244dc1860882c2e6ff97d8ea683d7f69ccac9ffd6fe8bf642543762667232378a605de61dfc2af1b7011fdbc2a4e4916a77a1cdbde823d05f4c4287456cfbcd9046a34d430d95859075bf458cff78a9d327844f5d9b72c923d189fb0ba57ff79e685a926204d27686c7ca6067ec1aac714b00092890df5d4a748c522be445620f25c26a1d9a8820f467cfa0e5f32115cf62a39fb160efe93db5b8112871d2895d3fa948b8371d3173d64d7b79bd427247fedd579a742b0968159bac7406adda12f64d92d45318149fa3b274a5a2f55e65801be52643073a7404b5a8a0fb4dd0cafa4dfcf486ff46b2509d10fc3c9016c286edace7660b08cc03848a31c818f9efac08cb9b4b3944566d7bd4eff2c957c983c1337055acd0eaa286c5a905c5d1eb9c3ca32b086c9a163acd34f35e077df50744fd338a734f5a623aef693caae5693b28083646efb45c790fb598e6b115df71e78ec38ce4b095b32f6c14c55eb0c319796f5f9f592fa388b1db63257c9bd354075c82d577c12725c2c01e4847a093a79f3ce97a3f6885ea621ac482c09c9b4e42eaf3ecb2ed792aa38ff83dfc4155761815665ff8fb7e3e8ef84f970384719118beb93b0c821642202034fef31f7305627d78c91c64f6c5a6f866cadbd000fd074c35591b4b890cf7355733b2a796c60cd9734e10117a4028af9ca6a02bc3c28d17eacf35964bdb6713c154c1561b3875bdf8378a9d830ea26273a306e4248218a65bf601fed93e1e5025ea85b78afd4baf7a4dd275abb1a2c56e586695cdcc387c0b75f6e1abc57b8ed75d96586064ed027bd98e165eb9885cff2f45bd0a017b1d7bb79aeb4dd20d04682679a5360fe86b7f73241c1686e17da8a02ac673b24eef1f4344783a1451754afd861a666eac5ee7932ae35dba4ccbed539c5e956f227578a1ba24fadcd746122b62449bf1c73166c20908bec408bc5fa200c1e988a4552a4b325e0acc0ceb303884a02149c7975f7854e89424c3b352240eaceaaf32e286a8639fe44260f937bd73b9a0d70c05343e752f886cfc657741fc8c03335cc21051b47701d081e49b22a5ed951a22ffa77d1039f5fd2137319470cbddc5905879dfab5ffe06de31dcf091d86893aadb1bcc8c948765c0ad13840208d4d66c3a059acec73355e4657fafcdf6b5c3e24bf3a560cb9727593b8fa906af82d64edb662b85594c3e22f3e5d8c0d4e73b87b6d180234bbfd25967287c154c6245c6b0fe0a657293301861b1d400df875af9a037f54a916bc75fb45065b44bedc5525f3faff59fc2cc3333665a148310b2c69c996d5d492596caa7a9fe4a4a9fa5702acd849c5d357311ed75b3626c0dd36cf06860c1bf77c138c587ce6db4f296aed81a30f02775c5230462787106f92d5b7047682e70ccc708729c2e851780f97cbb983d678b0e22f4fcaf21c6c04d31106098fbda19af28e84339c736eec54e5859d9f288f4591ce64ade47ea34847f3a55ef847af6995726cc0300e9a72a15d0375208caf001339583524341e0397827c4bdaa87b415e262516a6413dd49e052d892d8b40a70d7811abdbc644fd6ac773175d666beaf5b1997d2794bfd8f2e7eb20efacaa032a91795730bd7cfd69c8730ca80be92b011bae3fdb908847450b26838e7755dc0f8e77804c9f30cd3c8f6270e41f5cce2b6c4ea3e9bc00e84177c4fb3174aafa6776f26f56f7c7338a242a8c38282c991aad60f079a090858c35afce002c0f24d852d46d774aa9f8fb8db1a8cdb0c05576e6cc6fb5c59ee4ce4dcd442426ed240a2904c0d7223de438d4e10ccb3e82cae91d7a68c3b294ce +MD = 66e646adbcf608c86139c62ce5c1cb76112fc0aa7c3f83ac24d3e6f7c5c7e1a1b6db310df87f8f9a0f84c4e5658c6fd3 + +Len = 77848 +Msg = 6bce5b07be558a6ee9f68910678bd641d0a2dc8d08dbc844b7929837fabe74bc591942f8f882755d119f2571a1c665d1621ed176fa01663872a59790e9fc9ca28ad80e7bbb53b197976e91a69ff8508facb2beb629b0aa7b7e02f803cf94f43ae753e6186f91e72464abf237c8e93e8397a5cbd3fcb03b14c5f1e415154f238b58d2f3587c04be0d5f9e73ad8360d8b409412257ddc8c30e2eba835021f5d29dc69c5cc24b74df596f8e398f3a27c62aebcce8ca33c2e76ea0a4fc3b5c4ea87917fa4adf42a9f1107ec56f655404afed268f48b26564513e05f8785e2e214e263534e535ca6a9d3b73893bb839c03b06a0d26899dd77a98644ff1e4200386bac0692544e4c818be03523c50e5023137c43dd700602c2964c45fe176e3859a814745bc0b22eb4620aaedb36f203f4df57f6f789823c0fc19af0408a6a404dad6566d950e7dacccabec5f8b6e9b9fd469fa069db94f324d2772d0ca0bf7edc21a7c3522d77b6916d0662c46c7ddb04f15d2b7c8dc48fca70ece4a980f45ccdade3750f7eea2ccaf0e96d858135cfd288997e75c79a78c943fffd60549140eaf82063586cc6a241fe70cf841d99fe2fb259819fb39f17e9f4ba6079411f94f9ab6675751f9582bc3da16e096632d0e217a71c41765ad2f22b25f53c7125bfc36dbd93adbede33045586335b8787aeb5608a37a23b5312ab8f47a5f00c2b2910e72ea549722a1de1ef2706c4a621fe6e350bba0b281340ddc92856df39b93aa8c0c093916200a81ab38ad08aec8629d63d308dc46521c25081d0f14f21585a52a17c45cdb7e83c7948b977f6804098b5210399151b0502cc5e485f89ec8ff1d83268a445986a41c457bce5508ad7b2d3898cc44672486619089786d5c1e767001a8f96412e0f1fc4879900e034d1def71bd2f79e917158fe28c5507ac8e7249302f60408a05e3e41815ab2eda4b886eb82dd1b66a1083f4566dba4c22b17905891a7d7e317e00703ec07e2c10213117564b516e7c99683b469e069f30fff141970a9f51abb1be0d171a678a2776be75e6a63d26632a28b14dadc89569e28169c460448f5b3993274b8415bd92b47706d3bee352e03b4c12c60d7eb33001900aabcc0b7bb28e266b568df75ae452f136c805e298665548cc6a4da77d25d5a380b7ae629b6417ce25a2989ad68edab3b21e0bb95b5800b54a84dec157adc742887277e882c27f1102ba546eb514d444d56040e60047b60829b0416ad75a5ee36e66b8ebb6601c957f2811e17af8a81b2d1935f74bb7fdc7c67715f2709e150cceff020aaacf88a1e7568191acbcfebd25b36b4b822b305abd43bcf6b7fb823516b5b3b3d4634becf7d0040daed420815bb95171480406677aa0b6e621f51ed2d2357e85c7bdcecd1d2f19a405d0b63e4bb578f701f4d8449b08845f230d539c7dc8a2eef94199d8c3ce42f34625381a5212424b44503e987af5b5b04fc6b8c89619c15ded91258688381089f4542ecc2b6a6dfc93b8a1c9b702bb881c93c70da7936a51192f0a5cd6e6f2c674fff2ba14282c7954909a5ebb8a1654fe0706c22eb00e77007da0c23c757a376c5b3c6ac8d63e501b6a80de152656958892e09ca80a1e2e480f916d254e076b2f28545495eef3ff5cc91dae3051ecc820b9ecd3800c29e5344744a42deb3ac051d9e31e27ecee05ad1e9975b987497b7b0e942d5330a24a79c7431db2c774d568d2512deb6a9cd160edbc9b0d411d1debe37f009e0227bc6d021510608d5628c8b436ea5cc280f13cb8cfa4a819a82df7eaf5e3dd1b1ab9a28a235293875f2915f20cf9f88f2af375027b19167bab2a2387a14d7cc60bd09eb2062ae85fe054c51e3bc34b4b0b56ce4d277ed4d176a0e34bf9a419ad7b8fd63c262fbb719a3a5a9b5becc16092799d0b5d3c6fc59b10db9a779e103bda45dd6b1bb7a966dd584aebd5ccf78a60fa65dfa4d843d299087105a3821ceba8a118d14f891e9a3a2d1a9241ea5a02e747ad0c66d8fd62f0e6282ff5f68c5787100d0149eaa7a621374e2118cb6564a5fff7444bc4f8f12338755bf761dae9c6114e7d9372c0f532f56a1ad2f6a64a2d71c9099c12d327a07ded1c106aa52d16234198a4b7f711dfe5d2e1f8e2a91dde4b96bf0048f8511934f402e967679bd7d48af50600b68698872d090315ca4a48ebf4e6f0ede527cdec3e82dafe9ea08b939f1520037bcdfd67ed128a16a669ede14813e66835f66f02013e7d86b6f5b1fed27b9b26d3426ef67770e65ba9f74dba14c8694e47475d25007839964ce5eb54d99acff1599e7db170b6b05b616cd8e4ef76f216b5b518b390c2a7a3cd0b885418f546d95b3c9a374d4660ac49552fd04c920947fdba323c56c04045b3d1197b250d886564a754e681c28fb4ee2ab32a90bc27587bb13a3db6d38be2add13f1862561d2c02692e4da29d960bbc67f3526067c4dedc448126259ef310f78649da75617d83c0ec96eb1459fc27309760c64ff77a318beeb78447650e373d5aca3fb2b212030ccc2f2d7b6a5a7de7339c14a41daff7071a3de680d845ebfbd94096ceba8320526247b33c4119a64cc705cbf13cee95da4194bb665b22a59f8c3d9e1e0d39724e5980eadb90c206ddbc3e3adbc7bea4721f5c716c803cdab4ee31b4150cbd6f3d1c5b52ddbbdc36169d860fb85088996aede5a707c9fd11b8799d57684b777dcb154779b744d0aa83e5ada91b69e4fb2147c0daccaadbe136a8f1167c4c002464eec5ddfcae37daa22ef5a579764c3041a78e7b2fa551afac06dd6fc580e009971366de225a8a5cfdd3fe7356f836df28a7af06a54c16f3851da2d1d87c8f93ce0d9b18acfc4098036f389138822d5e52b2931bd20164435e57f1cb29a177399647e31c00f5e3223f7b348d9286a8446c42eb191a57f22584404aea3d922f817c4cdf46d2c9ea622e6262d6f9883017b1e3079d02c22900b3510e8d88c120f1eca6d02776fadefe3ccf53fbd2094d4ee01d88f60fd2716b6824bd43afb0e41163c0763c820b395d070c887ab07c5860534cefd2b60b73cbff15f79af6e3f1467e342204687d71e4f9c450b2297409e2a81b9cb179dfa8b8f4bf1df202ccc127a87c73fdbeb4214ca1617d508162aa4c4ae42ff0efb178a8e57ac0f767edec3b5f03dcb6e961cfea8a7e4ed47cdae203b8410a3f7c336c224df351097ac9dae81e54dc9e6ce8c6551175559c504f19bf6cbccbeb93e81b9baa937ea6dfe305b472f9f432ddcbad02d2e11236c031e9d5f4b1d593eb11ef9b67f58a6dfbbc0526d96da402a08cfc7a4b4c15322115bacddcbac7b6d67350a8227404bd42d741c5de2a7c9c599f3d21e700cefd177d052d815202c2ea7ef72846998e1369a75407ddbade5e6d94d7a032b9b01607ea716b8ef227469b873bb260f0871ec4bea463749959c750e0646bbad1590b76b0580e6225a5c06e3ea6ccfdf3701de88fcb7f2f306f65a8145bfaebe23a5be891419c8766febee707c0ee6a3ce9cf499d31915a2a9fc7d7a336b44266d475d1ffc68c7b20a2a07a75028d521744716c596f70a1e26b5c740f8d4e6ac9a7e7c74e5f64ca0d21f3acf8f420322d20c2c556ed6382f242a1e1dbb82fa1a525203d1f649bd0670d4703260e5d86d90f21e918240079d4b616c57a4fcea363fccda7e57eb83ad8b518f16ec97bccc5501d4c1fbbcdf2f44649737ddca1cc907f3e9c33164075dcc9c80c45be31705c942362d00d328aeb73b88058b74fa9a52d019e8ac3ab0dddabf2c84d44e51e195bc2d1dba0b4ae34bec2809d982ea73c9695034eff7e5f75fc27a9e7f62d22861789fd850efad93a9815e8bed7d561a13c877f02322107100ab515985a603a2d47c76a7eb04ba89790111d2efeda558d9f577656f44981467849bfe0ea24a1697d298d2b3d4d78c62752b2708583ff5c3f636d8fce4e5a83c553fd541df104e5282efa1cfe66d630ce493d25f488cb978d59e94f18a5ff52624252647e4be10ac92615b68c2e5d72056311b1e44f46ca19a96e077bf6ec2cefb35394839ba254d0cd84aa5f1a5b046d4ed496ad5dfd5e54b0503b6097ad9dce157556b676e55def73bb4affa17b62564afa66e81b5bdedf2d546d5f3eb00f7df73c4d8f54067075c72e2ad65a2b066115f784fd3deec6196edf1fd022900c7fb71ccb86b9a256f42641cc8bbad68b0e0e5083850c22ae840354c55c09ca1f53f39b63352e355bfb1fbaa2882a2a4acdb299e4f82c93f2af7959e06b4acaa29b3b3ca703183c09eb21ed3f445e82d02091482bcf05cf2d0c3f5313766c2e50a5ec84f9890e22eb54bb5e05589e7cb59728cfba822e10c82ac3d4b115f441841485e8fd2f76867ac86a91972d80745591f7a523ba1c256e7bb5535bc269c0c76795ed047ef7d322a6be0c674b9b065ab17c7d09cf46595a8f725375f43308950fab15b1eff8958d701432f82b54af1f76259baf4a334946c699698223f6a5777d23d7880b0f4a25c50ba9cc5533db2e4091a5b6a37951adc178ea22ea1b13d9409ec6e958926d561602e54641bf1701b13f1fa2737f2eea00bf69babf16c044fa8a587841287bc8d3a85a08895cff34488c5de522bb2d95f4db7ccc1b805744fb54f0976d3801e89e5a9c8594a3d0206718050149b3da3c1e3b77d967ce3553d3bd43d925577c2fc698014fec1a46709d509989510fb1470d7e0f655c86e6fc03f1b6b011fd5718fcff4cba0826de8f6bc48fefc1254f31131197e24210e8a81cb0cdbeab903f3ea1eec376616fe4e752e25ca7227b00a4ff7495e2b112b6d27e68fd476ac6710b45e4f9e7904c1602d3488431ed9771fcf335adf941f2de15b998ca0cd7f6b909697074900d41ce8c7d559b229af11fb3cec334784d47caec5ebeb8516ba763a37d2fb80240f79acea1a805fba31e6663c2bbcde25b6809c0ce494cc7ae6efd74017138b0d3c3f763f09e592fae85e2877f7ddee9f4fa272d98c70bc208a402f586c37b1e2e3d60c6ead7193105be20897587ebd1a2748fad3ec659f302ed00a28db4f3bcc8ca6361e0b0aa92513d8cf41568794bdc4dcfaa30b5cbbd45a0730576b4371f2c017bef72d991e6196aa451ffae0bbb0b0c43bf0f13e5a32974d698e24fb9b7d06916ba31a0738eb6ebe32d94b727a1c736a8563a7f1c2726c0a7c750f600194e77c04c7da3a40ec227e5e17512319299334a0a4345f3bbd62a632b33358eb60ea40520e761c7d8b3b51918015dcdffe9a8c535aa06e0f3b008953f199cca00897451d1df59439f1409e92bc9e8616c410d9672df4088413ce1ca7d647a569b576f32c9f5f89ba45b9cf2a74f50704a27b82a5c73714e46e54c5f50b47c98e8f10b3493abce54ab02f4b21502049f1c165f1d2cd717a75731bed0737a12257bdeceb3a96158f2f5a297a3ff729322748558db9eaaa22804baafda3035b970b689205c85c716fb16a2fc44b1217aced60d4be21c4ebf44c1d895b92177f0ff4b78b67bb34d96d1a09c9910f48f39e8a3169ecd1033bd8231241719b1a147458d35e7bdbc55471b05e80495142c4ef47e29c7f9250a3b64b5259a688b523ad80e393a7f0b8ea63bd92db54daa792896c9cf5df2c532a760d045961208fb3a2b410b355c1b4a32b87cc631a722066534186fd7567b3d800b150c90c2a51cc3b3c8245ec176288b157359e04e05547350dc93ba70b18b53c7f5f320e6fa276605f60d1d4ba6aa0de74f51678eeed3d171a8c37dedf2cca12bf591ccfb72bbaf966d2df747273f498283353df629150e1aef87a83ac941e6bb8660db7c9939fee9902f83607258ac8b917dba205e8897b12358bfc3afbb92db3ac8f2e6f832e274015a381402a6c5770ca38279f9befce8e6af2b35107a442f856299c6fa36e8ca33669bee627a22b9574f2d8f8518ac069bf380eb960e690cf8a6469929a67060a8bd153c1c7322e703c8f1cd7b3633aed5de47739af87018070c6fda011217bbc3c63a999af2646484b995a06688125606c7e559b9c907c5232d9c061afa5d50272a728368a855d67c998fc4b19ed670b138f10a5ce08e88ff5251b9d1dfafa2455263860fe585a13dd12696f6eadea367b9e1020eef72f7de431741b0228d46a0c6742deb3a62595af91093a0ecb9429cc33bcd3a3663864248534a40738491bc0f2ac795377a635689c4473a24e4f2b2dd67e88965beb8ee0a9c400d43143819850e0f983d4c53a30bc82e4d13f0285c610bd056fe130423e268af7101ba9e2bd084426edc36aee2e772b5344a59580c068e213d5fdefc76682f05063fe638756a242c7394f7d978b58a789a388ef624367537a70b9106681485dd577e358b88ca741a60f7de67e6ee45e4e95f1fa7376937902e91c7b67b7fd394cf1d172bd879ea98915578deb00a5b969c2e69dfd8277bc73e82e19122f2beb7e7cd198dd6e0fe139f6e45a2569221ea4d372c0468f98859414f8d0ae1259dd33beeab2616982537e582c3676d0e3f6c5709a4b97c4803a2e16818985871076335f24a991a280661fe43807245d71aa954068273849b6450995d22dddb7d71e45088763b53e9082e6410fb7783a53a0dcece33a7147c20ced3af1a2ffca363d33611cc915683b0f9917b92cba8c1142621b136d8ae62df9a2ade8d233e7b53bc311eac3f946087501103f50327e34f7ee7601a9ca4d7d72ef95bfa3c136dd81bec1f93aa8007f1de6d2a809283543264aa5b4d47ba53de19e9b7cfff0e03575eb1852146bbf286d1005fc41e3dcc6393c4f34d7e315f2ad756629cd090d468014bffc3b8aab8cce465244dfac9945978d1c8a9b4ac6263e3d9fcdf554e4960bff5dff954deb32a9526187cbcb9449a805b6bd07fadf60fcbded715e198eaf7c759b640cfba8a264fad9cded88f759d46bc2d5023a89294fbff91cf2a033193c3e213287de09656907621e2d2ae7fe8389ebdb7651ec089f096ad69830f95ab4229671ed3c37021e40a68373fb8ebf1d25d6d64a882f855465e9a738130bfc4be9a22a285e5901ed6f4a03a74114240a082ece66277b28d6991e98bb8f8f87685aee641f8c98eb3d5af9a7b145a1b5b2fa99ccb276f77a8d6db0b007edae81753f2227ba0e1c4775ca5976794f5bfb7ec2bfd616bccc02e2ab48f805758f74d95ee67be12b0c9dff871278e7a76d7dd42a4af77a4321483b198d769d6e5be7fc7fe0697c2c90764259cdb5e494fdc31df8df34c6511fd501812834b8223963466cbbf87359d258a6083236565f3456c2f52897e22fed309da9c03a3cd7526f1fec1d31aefaf7ce935be802275139bd29e9cd27b625b5e17559fe8e13d6cd93efc6af1a16572a5d711c98213db03580bc9c76ec2a7a9c71f35b8a3a2367d3571ec318be91b8918fa811e99c82c44f28e2d5caef2778cc677e760b4656d18c4414ab0022086454eba003847adcd7b03c025e713793656d4b7d7129b8925e1fe13946115064a49cf9c2b910c3352f7f4486fd14cc588aa6a65a158d9ac154b5b6f65bf14f8bc0914274fd367f7415e5c9d57b5bb75c2fa0ff7c2adff3cafc754cb1b4482767005a4d1f959eb781d10a52579fedff899c83de4b78c6cc959e882ad317bfe1dfab20a22c4aef7344ab1567743373acc51876cb2fc6eb2c0a8215d9c54dfd83da0b0aca01e4d1b9a5eb2e9094fd94c7faeca14f90ddf61b11ef45dfee1eab184266414c082bee938cd87f561fc7f9570f612df1d6868ea2922f40c6b55171a5fe05ecb0a8e7eb08e1bb2d407d574964ecbd423a69875bc775882d1584b0f634f630347f48df73208cdc63d716752df7794807b1b2a80794a2433455c201e3cc122f414052dc2ce4758347a153eb4d169e4ca5de17b3371101a77f0dd60ddf763a493a7b2da6be5b84f801289a8050cc430f4449016e95457bfe33c52a9c933956c747b94105d28ea282baf454fbdf1e50da0a7bd9a3c938f68e7b062576a71d4ef19280f6c11083b56b9a8bea25a116adf522fb05187bf25ba17d562f62c22a0a0f405bb4a11f44a6f9c877c2c63fbb42a8b251ef96527c937d6140b0298c6972697ccfe36ea8d95e756d4046a66015f73be306fde4f6dd856a50491093afe16f476c66ebf05248c427b06cdd8cad2db5f5dca199cc101d18b272fbb868d09ae7f038a734efc69bbf56ba85ee41cd0a6220c6aa2a144845369ceedd0e709a9dc4ad091a2633abda394bb213e38e69b4e802c8a91885455bc66fec777b73b2f1ecc607482a83aa0b194fc19c233929342de30b27cae7b06aaf7496526838c39e498359b8a6a96b3847a80faa160ab4911b0db6acaa023077dbf312f53b8873adc12b28f2046b9568aa9ec3c424cbb3d399c7f2be1f9d6e8c313388e85e2b6a253e089b7faa92d0a42c7b0673b542cd038e58e7e7918211b0997e21b437e9510ea760dbe602e6c6f3b485ff3d3138ab28e409bcae6877c2ecfb1a04e0308ad071e47c0faf722e1c5d2b06d7ad0076f54a82229a9b0d4529473f505bf4afd58e55dca4606364347dea7744b5488ac1527150eba837e6b4edc94e684b791e9334c27920f6893fbe8fa38188c29838e46aa636ab0f095c8bb77a0eaafef6e48c69c0a237f8a96b95fa8f3119252470a5e6f01cacf69ad8942e63685e9cf36988d6583f328e4c508167b6704107749bce6e58ea348670c095fb8b44cb4cf8154f23913959e2f956497e21244690112225a9e5888ce6157d57c5fa8b3a378e50a8f77476f41938e5b7e6d73671e7826b73409fdefc401178a235b923f3853c825dfa07df4b5e91659148e08f0a354fe07fda8ed5cbb9ea183df3cff63e5d8b1334d5545ca6d78d3ea04b451559a101e81320bb53437b2ac4f2a644eb63e7026bf63063d64cacb3d8ac980db2a5541feaf5ba2d41aaae58e687f621e9a94d29f26bb23a3386068b9b7dd6404d38763150ee4fec884979fde5c58d6dda5ab488115a04e35d9c0d9ef0daaee7ce582ebf81c687010e6805a029741030a5bc46a82e8cce663ad6e8733d8cc8091c4ea452e5450c73bd4f7ac91a5c2a7232182b10b3cab7c9b47bc093eb5ccbae21620171e433834a7c45ff012044813c69b58b4806da6716b2d5bc84630f60dec4db6da5e657978f3293bccea3f6bd9532dd8dd9918487551b2a05d00c702ea2ed030f75537aee49c982dabb0b38878675d6594aba92bf8cd9c3c2fe4d46de0184201069936430802858814dc0d387161ae91823ebcab6c5d3e81c9790581704727b97090edd063c375dd80e2a8f644d095ef2ed8bf61507f1e13b223c6f82b29d5ccdde2dad1886dedb0885b133c6332a7d0e2e02dc835b1bf54627b953c613ee0ada6f569b0d650518383abe8957d1658d9571b745a9c7396d652f6ecc8c2f4dcfe544f2718de2945d91b6b757bc2ea3d8ae3b14f82e563391c2c1c5a27c0fa3f116e66af5420473f23b800666a052caa4821680bfbc0df1a98265259c3dbad6b996dc24f0d1d38b1f5d20117ea946c43a39896360f8f65cfdd0a3f6847838d06f8dae8a29e557c22c201f42667f1177e2fa1d26a48c185ad5d204a120d492775b23e5036a24990160ab0400e8cbbbcde4ed582f53207bd478b00f8c39facfb5c57e08f67936a031052757b2ca354dad873bc5e7355b28b32f934d209691f771f4c99fcd1fc4743861bba1c2d564cefe140ce9b611e626dd42a344c501421393312a33ef24761e00bc906897d10146aad3874e05b1687d3cf9077ee440b52902c4c94bc450f3a56f60cd379986b3be980cd57b3adb8a36b79be883e31c9144a8f5cf6fb46be4116f949b9330bc233cb0071df8bf58f45835726dd92c5d7f696c0c6427273cf06be79f2206c43af9cbda0b884efaf04deba0c4bf0a25cb26a23650affc858cc0babeca8917bdc9dc70fe623e04556a3ef8dfda059e382d2ff6ee0ad9753623fb06de5df94f83317435045266a236906e85dafc681bcc4d416e7d82091ba2c94a572ea099347e3a6a21d42429b00728869d7972100b48f10510c9006874324655b696da925017ab663c5720aeb72ffb2d45a48324f516e222e6bbcc1e0a4c61c32afe550b2bb44e0f8f738d1e3f16d10c874378cc629de841f83b2d52655ae33dbc4e572d4bbfe90e2111b5a0ce2472ca6a3e9932d945ca0a4c326d2d0bc2956a736e291f3a9e450afb1ade5deec1a510f67d2e7be2765224ec86d2d686ee3cf35747130a80bb2aac2374517c2655338634e87fd205984638e021a5755e44a37f70bf5c16a37c609ca3095626fe48e5d32b68d45dcb136fed2ee92d34192e91b7c7bf4e6a2d4bae8183bf3483ff0281a0e4e37444bb5095ece0c8b4394112cd4263302f2fa68fdd04c98035bab0eccf946542a8b05eb580ddfea580ac5d5a20ca4cf8488c94afb5cc7f339ff49a6c9958b86eb8c93aabf7668e67dab6f66d52f48b01e1aa8115fe82acc0bb5843eba593e54eecb6d99bc4329af80a7f93b32b6a273142b1f42880cd590ed10f35d2bceef2c98ba0c3ebade7293f582ebc9473d42872b2c8765003568d072940f887a611e9c9dfae7e057b2e44240cebfa78f1d997ab7b178ef54ec450920a1412742ba3d1352e09944ff6aef28f6de0d3c76e227bc4e3c7c47f2ac0aa97beb30dff134db3f4c1d88d33e5103b68c432d1e9b257dca43300a0575ff2a4ff8b44719225b696f0e044ef1711fb2797590c7c47851fc235b2e9abe3b50145b0baefc4942a868210d37544654318bf0574945b47af22365eaaab6c8cf496969392de906deb67803ce1921384410f0a985df2f652f7093f07616d6bbae3589d905d365c842dff965c53c3e5dcd38710395b4fd5d1267ce618205831d64bf064906122b143bbf6cf59713241d5c328dad1b8d3812a0422327a2f944546f405f379e8c816115cf530198304afd7d89b6f46baa581c759a42b13d6482f74a640503538501356d7a4c385d164b74ad988d882aaee5d0eeda9d9cc5d9d78c6294985aa99e3307bf5aa8f85a378e2968f961b6bd0d59e6988da458e0bbaa7a644c79ac255a9f6e67eb09c024068b723c26e42eb7383cb3ff1df763f2ac7447bc1629563b3c9ec003a5df3e2f15dbf5a39b854e9dc1f6cf7f15f74c800eed8ad66c38077fa6b9b31f05a9b0ffe7f80a1be1b5a4c54d209fb50034812d655eaa4fc9262e573b989e26a4e9c6faff58461173f5bfe21c42bb2d672f904f32402c74a76449566d840796ee2ffec4be853030dcd5fe68b1c59844a548f85a184a8801a182d6f1af34860c5becb6d1c7f73ed686d6fecdc031cd97653137f269d65373220255bd93027fd378908d968e36e89f0c691f85aa0fb1920158cd9cb96c0525b353541e9b767ba8bebbe1a783bcc3e6d81cff24f1c7eac1142027bd897423a5dff630993b18ffe8b8ef61794b01373a64531c2019e2dfb11837d4d95ca71570028b99b1f462830fd17b8b8046acd9264bbbe51b94f916ce88006364955d8110c553fdfd59db9baaa310ae50f9081026f8b7e85be5631685de0a4213e60fcd14830fcbefddfca035a82f686fe4ab82b8f5c79475adc9558394b60f3ba1467fd7d61f81ede33e473d4b2838319c2f9758cd6b880d30946a2446b41950698a0ff73903be9c1c28e72e26ab9c4a81dcc482da242167204cbb046e54fef6a152f3df264ce05eeb450684a52a132f386b90c3b681ff37ff6ace8076492e92db39d21c285b85cad30b2bdd51142b3422349297fcf58fd420672b44e8e136c99997011aa9c01d4465e3dd94b50a530dc1c0307be80f41e025da47be50bd95ef4f033777451b2570067782574b6d0920a9a700ec323fb3d0922caa49284eca987df6bbae64bd1cc2573eb0718eccdbf14c516a7555f76419d7e6d991ea155339a8fa242c933691afba91fe8fe99a4a142c47f383bdc6c14079914c151091be675285f77e4b07f2bcb329b31ef665b1fdbc0332b3e43e59d8f9a4784f26546a85fd12bc1016b1de6dc36e748b3fafc2029e0b8e6263ce9c47caa8e4acb5cdf63a2b28d88e60b4a3378dc8c9712ff8e8e724d98d3bb6e817118f0727ba297ecfe84f40d345c390ffae54c1184d41a1a50ff2e5b58c482b48ca9957a7f40bd78614ebf332d2b9d73236caffe79c0f5a74e18ac87df0b1f8bfd78c02fbf6d778874473a88db1bde7e97552ddcdd9f383d7005efa6cf56ee0caccd9a17a1f06d261fb98e93a7f4a5383ce8ed3218398be49e0d1e3f906e974182f04bbc8e9346594aeae2dcf77d99aafb6d1888925694a5c07961db8a1bc1326528faa6ef1cab2add235fec347f63dbbd2bd567b2befe87be91e201252414e63ebecf5b2a54439fc0ac2d4ac7c3aad3686b4d55e2386f93809dc639c9533a65f6faf365a903b7c3dbcd737e160e179be575a7dc8a8e8fd0eee5380cde6ed8b773248e4cd2f1ae9b16ce5a118b2b523a1d910c8410860846f1b15e00cc3e99e59f84c7960fe5d1315af6098a8de002b8f707a4d4dde97ffd6f48609ffb8b22f56162c7cdc7a9c88c8d8fa87183f7cf1e5a1e9654597e9ffe51f36771d31d1ef2a005b67861033ab499df614fd7366373301f0b8cec0f0d5080fa9bfdbdbb33e146b6bb2047bccfb2642f5aabf06663bf60522a05ff6274fbe3a523cb1f2f09cc3abdfe4ce09c308dd8c6bb0d364f7a0ad2ff1c46f8417a08613b2763623f49ba6462a884946a054ddceeadfd11b84e5d6e6e08d74172c77ee406d14eefb49bb4acede151cbf0f5fb57ed5804e96a87bf1ce7174140bd0465534c47132d55a6c1faa5d039edf4a99d330ce3a9262ece39c4b1710b5fecd9c59556b13a83ec13e936d39ec6623fc93e5793767530cacbd24e153dbd05c5eda7946c384b5b3f893448bf72809399fce3abca3bef70062592a25ba4e09912e91237d604cf1c18b1ab18b175eee6c9ea9617f8579f4cac8481a8cbcdfb8599740f66db3c4e2d3d33558ff1cf98c4993c5e8367f50d2d8292a849ace096302337a509c4084ef876b63b93c6a70696cf9a44d75d3bc27c52f40e6b4807390277dadc09d99159e48de2630d7a25c1c234ab4efb2351459fe255bbf7e5686d635f04bc4c62fff6594861d7e6537350b2901886d701601e00fa5bb8d6cc2bb9bba15d4ebba77aaebf71d89f049ab63bccab88f4543e90d60564ae0cee4579a672068e993ef029077fcef2c15196190b7a4ca49f582408f418e7f7bf29977abbf0563fa5be84348bff285547b491c147233d148fccf9f100a04adeda6e0c55809e59177b21acc4c2a846a93814d1d9772e447fcc9906728205560a64a4ea337de2d6bf2251b00133e2f2979d5b9f8723052a8e5fa593b403aed32465b57a3b3b2597dfa234d8126616f2c67d7043f3d40fb6e84fdae8df0b0589d3e688049641d0621e04b46b1fe3aa0fe0e03b054711b4b235a41f4c1a20713fc0ed05d06b174900244fb8b3523308118acfa42da8635ce41f665b098dcc5abf93851425e346fa399a8b27f6d1dd96c06e50930240516f164c9e7865619628cff3b39d4d265549d428c1eb7dc469bee4346ef0cd3763550e64545da9be0644388881888e5bcca09b75f8eb90545fe744842ea3d6b5217795108ef21ccba514c1fbf6bd31aa3466542a380f77a84878a9049a9465e1143b72f8561f08b1fa0134f41a257d3c1303c8ee893f79eaacdbdb5fb9acc2e3c30a6fc3b3ccb3978e74581af6a6bc39f4dfbf6af463df3f +MD = 1a8b75dd663038289a4fbd07a51bd53c4b6073a3f0a9b9f91350ebdf095b89281398fe773f755df77956b1a57379507d + +Len = 78640 +Msg = a1a05f1a7861889d2fb94d2b30f710ad8d75136944cbe0d7c243e8afa58d6a47c6b4961c7751f3ae09fffe92920e14c2ec7c913701203aba4629d8f786c726d3e128edff14a66ecdfb3f00435445fa6fc556d3f9218f88ffe7fd3e1c0b5429caf9e4acebd8c8c2a20b619c67fe038c5b1fed21d82a7f944daaa76249bd9d3bd517d01b074920b7d4434d1a2618af902e0228c3fca658244d990f8ca42208239c42d4827cf114140cabebc2a72bb3cf9277ef008c1c8101a6bb1e0455c4feabc682d82871580da3f14a24db13be76112d842a22b11564f30118ba11852be899fcdfc4560f04742a2c28deaf915a601da734c16f921868c106b9ccfd5cdd2cb6e56280547e7faf72644d02844a86d9bda98c9d3058adf5355ca53d0e016434ca2a12f46ae551284342c279a366ca49b7db96a4ac2a5c7315ace4f38d9d48669d72f809e06c0045646e8e29540cae18d4e459bf2d31ae4a2a9d7fd8c2570f2cf6661aa5fd3d16709f8fb9fcdf64bbaedc6dddd7f9942ae33cd87dd3f45843ed9fad82b10a7d1b10ba4d4cd98b977874971d2bd2597c59a41304e6cb6cc76b105ef038164f57958c7e524ea7a1cd6ed0cd9d4a9a9511c1f676cac3aa73cd10fffcd742ba14f10e4eb343c750692d232b45944215f57aec422ed21b574f92b9214109aa87a1730dbd21cbbfbb2be021eec8ab1c2dc1e062ee04c3f6ba483deedef42f78643d061b418f903fd02f0ef07f1e8adfc9406aa964bd465cbba8f7389edff0b23832d2bf42c73a4e77bcdd16480fd893d0bb414b0a24025642b5e71dc9c8f562edc6fe81288f72f5981c781daf633d402c7a8cd04a00a0eb37b93627c778e68f6a42b2e95cb0e03b1b95058d1ee163efc4c574be8b18c72482fa0bde01b76a4297ee188044f22b28e870adecfc52efa880e4219f343520070bc18fc9dd4c29825c1155cd491cfbc4e8f597c4b17e8c71481ebafaaf1f529fbb55e970c401cc57a1f49458d3f8fa18016bec9ca52de05404bd6858639e06f17800425b1f9cfbc94ee0fbaa4b4cce2b1c1cd3fd402793589c075240b87ae4072b08c21354e65de14b1bb24a17e11f05224e756eea334e85f845a13a167a93e8bdb6901fcda79ba680ede2c0a17f96aff94af9770b1bb9e401be7ccee568bc9c1452d507f0a75c21d6a0b39550edda308b5888a00ba57b7c9dbc0c858d0a062c1a24b85427ad4958337b4c508bf59490bebf4a72529a3c56b58578e676281a9fb573628dd9830a5581c5d679bc5d6cd87cc9667448c1a6783262e97a098c9ffdcf89fb3a6def4620a6c778994aee090facbc052f55e45fecfa9b87c7acfd3e4e4facaae34dbaa5bf8cc95b379d70143d36e14e29e2c90fbaf7787957c8429f9b1d259711e0acd13c1912a6db1dab346a01806aec55395fe80f41e8b2c62469eb213ceb4b8e8c6f9e37ec820d3267129ff7e1800018fcf6802c3dfb5e0c6b45474338ce1abf242aeecd9d1756446b56e4ff4bb9eb91da7e8935b5dbe504dfdab66b636705db3aa733c26e8c3dbb80a73f01083d372a9b9c0c12f1afcf1547d1408103df944a97917500a70a4bff6eadbae65e336b4a06fa10ab39a0a2a66dd1ed6d615d4f75038ebd6e90b80678fd115c9496c31058e5409de8d5d6e8211783c617c50abfc2454612f471bff88ef47b2df4f717adbefe16bbb10c7828ed0e8ed267760e6b9a27637c7a9146a9aa1d9236eecb54cae3192273ee28afeb721a9c1a46be90db666f8a03e83976a0323eff7e6b58a5f02f000fcc876fa2b8180252a49ae3b8988ce665b026b1776590206a0d51e830a50a7a83cf642a7a1747905a7a4d2eaf2976549c8a1d4170802a8b79ec8ac11d74dc4e26836da05e90678a5ca445e79d168a81d799b331897a6a47d722fc2b95e20d45a2f08b1b77ace0b9ff286c56aae83234bde6d1c8ecd9b71b2ab79170c07905279c1ea4e1ecf21ae5ec10a8c3fc26d537f678604fbe2878d01bb42fd7c5c02dbcbf16a13be6eb7ed6cb64e375be58da502b58460e2aec172e5120c0a7cc3febcbb0df6b718d1d7253432a04b51607ab48048c6d4d55affbfd75032b29ff7fa81e1a81e8cb08125f26fc6cf3cb2cbaafe6281ebb546af88c052e6658a58407cd7ba30502918052ae159f3198ff29f94ef440151a6a8f50320e25502f62835fc0abf372a00a1c63c5e9d482db98354cf038f37a71d9ec3e55df01c998aa2510eb76b3d0aa7f05cf0e694266a4e0773cfd7cea54a7e7ab4a5d416bd97bc391a1b5a38b270738621eef5f92e5db1d1850dd86ccaba6ddf1fcb2fc0b89c0f6f09a85fc2280a17d5cd6d2916b0768983f11f91e42885503e9ddbcd888e04f8b6a84c54721e25f961b811ec976d533991505b70ef4f29ca0b874e49d8be610ca26e6dc4d2f5629cac6a63bcd5b562468c2b6801d89f163fd89499012bba4ecfb4d4832d6f5e3e76386ce9165c192244c6dacbd12aa8d926382e52900c121c96506322faa1b9181a78280885b5092198f3f6dd4b6fecf1218cbcf182f446691517a2d3b904868e0dfe3448876b15ded775f832fd12ebec9648d8fc467ed792a07d1c0be512471ea52d0a2f97d8cfb864df576342be162a091f0ae947064647ecf327420b558b3884a722343398875ce582bcc4d8bc0c47fe61bb3f211502f73f1c5d0c9848c36a30df04ece724ed2abe2270fe1ba72eb4faa3726451459e0f3b4b45c2186670321e473ac02ef861a073111c65781a0dff6266b90f43f2881e56224a091839221ec1723c3487ad756c98e127a19a6f2a95ea2e078695b651930413f257f42b598eaee271e06d9e98dd94152b28ef10f506d65bd660b2fb8b1be9a2d72548c777105b1a842a5d565c71f92f8f61e2ca0dc0db92be24285c75076b4160f792980b323a7cdb98e36f30c82c92cce311d4c5625e4527576233dfe40d9218554e179662e19bf0a28c43a65ed2d18c32f8ebcc59d2f59a60fd2c0c3044f765b4f7c0a930d4fa5bdda47e3d94507e15c814598315de269fe755af8a8aa5f3e19d1c1da41a891a85a0e869571739fb2228d0a87a34c45a90411838fb41b51a14841799278e727f06a2b4af9345f3db19cbca7312154a0424049152af03d6dc66f096cd940b258a475995bb72af129065276e23fb65c3a5b3a86d77462f9fbd616906258a2f16eed01bf81765b12aadacc248559674d5c1d7b319212143842f8c53e23b7a58caff2980784ded0a80a55932c56263e0d4eb08ab00eaf0ee08b55057b769d526b64dcc1d82b98909c8f9e2ef81e4f4285583bef6d13f156da1e145daf25b2af77d4d2059a3f4ca3d782de25eea47b7b9dc2e633ce6980f60f435f5642f69fc79649fdeab689a112402b3c0178b253f23ed3dbdd3dd705f666425b769db20c9fb10984fa92ce40e4bed1e148fd0e7fae4ed43f752127285cc66232482621a041b15d90bd97d9d1213bbdf485e581a6b7b60d3d83e21f903219ec0c51460a04b47c8d49ba2d71fbd19e389e3d97d370165fc6fa90e888e6804628101b6536e000fce1d679bd5d66fdcf8807fa7dcc87d23047a1239a29d14c355e672dec6edb2e17a16082ad66bbadb5f55643fe3490f310d758c562ccfaa0ced6380f41789d44b7140e5e6754a2e73ac9b4a182d23682e9c047fda7370883f9d7ac4ace1ccf4dc383099451efc2b5454a489b716f1e86a2489853d233a4fe9eabeb65fa24194e233678acd5fec41ebfc23bb934d3f30723b8704f49887617a5981ce82c562251bf75842e5a4b4f2b8e77b48331c65b0e5458fa7a75fe25d8f6e7685bce7c935d7f8855a3489c0ce29bb2dc82d110fea11d6f5b5bbe5d5a4979e0f647475c137b4bb6129306baa34dcebada3d7c7886cb6647be7b8d6cbc7117caef34ffbf4bb20b49e484fe6dbb740fd9d73c9bc898911726496048f4f458b6ef7aa85e6ce20aa787f200977cfc5d4755fb0894c6dffd1855249459bda9063f95c02dcc2d818b07b9658e39b110125c776d28d13b0016511c789f268f84849b05e84ab1c8d03e132664b74cd29c9b38875624b8eea6e4aac26d0719322dd9b0871b887506762ab418180138a84bfec1cddd85b3a977700c912a56986d4b0d6862816d80af1c57d0d5a8f666fbc245e1902bd229321bc15dcfd8130d0a8629aae041833a8b69ce50a63d1e3c93ac787f1a679382523bdf87c59ec7dfcf88335d4784520c6106961dd3ff002337af9d83b1ba5125d17fd370bba5f97685f6366be071615cfb9ab71da4152484b173bed49e4c927c778ea402f814313af47b37bbf33138931fce3a3a61a812c5c7a1e25c2944e1ee0c115a23c614f893e3bd4035c8eb5f1a964a265b51df535042e1120299cbc3e357affebd6bcdd4e91b6458c1a6c85f5728b58368bde36e8be9da55ae3808c2c3211197b7306650a465198847d7f0beb49cb85a48eddbebe08635b3484c2465f732de2df95d08f12c8784d7afa18a0798bcfab2e529f053b6df9934b91e4634e552bfc96b3ada41e9494c4de14dbebf6b4e249326b94a2c74beafe1e7f697b8f6495c71f50f05c7447519f2c622b670941bdd05f3e4100184e91fc1bb1c3f7892de5c307f23b00ba3d195cf446a97a17debce1134f46b574d2890dc1dd765fd22db680bf1bf04966f2766eb446b8cdb8d869ebed12f82b83745ab3bf67031cd0c06270c332b29ef113d344eaf6fbaa52cb3f615b3de7eabaa0617e52c2fcc72ba27423a2daf469eefdba8016bbc4c87c23c7e1cc04886b90e357ce2a95c5e749208609dc893832c73cb690b629a6809b7e7dddde1b7c368cb98843b533f0e59fe702a3eea1e092004d420747a5337b4747dbc60ff715c4349f8d5f7142005ab652647247c99000209bd75459d2ee00f5fc5c2ab00bf7acff11c171ed3466bf12ff36057674c905bec4f0f85b2728ba3e18998c8cee9459629cef3b978fa67b4c39f1de0917fdfb11452973ca16862f6638fe5bf4f37e41f5ad410cfea84217b8bf225c6e47a188fe98eb47252588a924ba052966df180f2edf71868132cc2ceeeb421114784617ad3ca0f30ac892eff028487570e5e409848ffb08cda3a723554acb8caa1e7e2fc3ad0507d994574c3f1032b0a1cc74d98d5b4824427f5583925a393f8dce9c59c86661e6201d284687fe5e6b57e74ce7afbde3697e2a69d61ca615aa3dfd32fe31f5521e6ca79877613f162621cadecc72144748ef4956836a9aeb4d392ed4a576e640211dd82a57317f04418debacf06b1afe330430ae23f2b524991dd7e3e82d95d69eb223505e9f2ab37e0ace29ebf12e72b85b84d3304b814c2e4a8d033ecc906fd7d81dad05f0ce7e1c16e6f827aacb4f5953ba5820db9bdc7d5db29501ba72967cee3b82d5ecd6feac30ca7a2c0e7dee969b55cf7e39415ff6b5ed2bd99d98c4fe62e18456d9d0afbee6ed327182b2cae080cb8bc0db3e413ae1913a3eec9f85bce4c424014e47fbc4b7d3a380be067ed7a2a02f6137cf2aaa6f5332aa0dd34368d237e45db0a97d4e11f26fe206e574dc8f581d07e59076d5cd87c79397f0a862b9d147c4b771aecb83ddda0df3dc477f9577f70d4b1ea04d7ac34b9411640f4b1a14b0eeb93d0abd9c0a847d0b57612153742fea0ec64161f57a4113e0a9f2726166d2343c780ba4b8ecf1b7c3f34c7257c13a367713d4b3dc314aabac2efc892e6c0e2dc79f4c016919a436a41c83e2f103a86b3aa3d4d38d6cbab3ca8f87efef88d743d13f26643af51e82225f81e3edaffd10bfe2bc1187a133d4d2381f271341b01eefb4354d9d23b312d518d0f57c2aaa9f8d5d152e6963288749b54cbf382b4b0789baf31e0e1a147122f4fbb84b082380198f5a6a91171b3397837b28cca9ea96259fda561c4cb51592505c7cc8cd0a6aead606569d518e72423f34f45f42215349ff75a626301788b9d79de383edc1b877dda382ec96f4bbe02504925e8881c77d463f5eea68be42ffe71a6ceafeebe15702bc701d5be088e7e1549348f18e5b25f0a210a75b0bccdb0b6c798c54eb7dfef1ab9e9e14c451c000cf67bcf1a996daab484c0b8ba29ed1b10ea9e69442f6d6070b6efd5622bf1eefbf90191d55f311c28c61757ef5218a746b7e784174e482cf5681a9948e294b1abf9cfbe9260841d3090183a9860d5bc22d57bfc103bf7bc7174721646918db2e49feb3c99c3f115928ac949fc7aadc26aed62bb771f0277ac85ff32a46065586d935ff532b1fd6c175b346d65c92721e7a6a4a79421f2c46d41cad6a978a30a107c33cfa552328b87ab618c1974cb4161a94aaaae6a4e0d7e50daeb9e01cf3293026db439cd17d8aa24568f61a4218aa09d5cab0e219eb9a55b3757cb227237bfce178b374b34bc486c1d5f8581b2656b2be091fd6f6b30ab0aea04780413815c88383ce7f312a0282bbee2cd3205388bfbe046c17c3bd95804fad8edcf3a7832d8d9ae91ee38ea130a3f0281e0a26cc9b463b1a26f991e73f26fbd71aa6f84086401cb7d632e04d1b0aaa6e8b2126aebfe72baea700a66c67b529a4ebd3b0da8d7b87af37b7d542ac706b64bd1dc99b9831449dfa9181a1748aa56ca31257bd8d706a33a5eac44e6f45c19f2648860fde85146cb3f4aa02f007fdb2e2eb636610cf42e9b33433acce1b3b925949f297dd83199f45d2861d64cd910c2db74a60b2089045e22cba0a536137d2c89a85b02f9bd2ba3293bc5d3d4c1ddcd61e9339db8ce0bcb55cbdd399a854d4e6a2b5d54f3fce21fcb0a35f03f3e2a99e89d46e17fc92c29f1cb5950b60f11d55fb0993b6ff7a7b26c1e17f33659df6c9717459d1a8450c221537cb232bcb10792c0767f15b463a234fdd4a56019e58f96df9a9a34075ddc0becae26b591162d28e25ce78c3dfc384a31d5ce6686224a0e7daba073583dc0d71d5776e798268e4c9fb33d7d9a5cbcd7428136efa87fe42779e2777f81d6b6ae6fdf6872d8ca74247ee4478fd1697602b63fa4a488e4a7085ca6e6018a1205b869aec5fb59eb25d80755ce6bec0dadf41779e22c2d3ad9daae5eb6a179d7f71c932c542d246fea91c26f99b8f22eabd4ec96b6319f67c3c4f574af06580fd20375c2dfad40400b77389a721fecb6b6cbbefee958e755adefbb4f99d92ea1df9498d62c26b544d0b1f03f1f48e18c17011418434b0ceade8287573cc1047566f883d2053e8c65816872c469dad998169d764e8bb21610a0a6e2f46067e173af56be1c309dcc8965c34793187eddc2fac86c078b340eae3983538ecc72cd8301d7d21e75ec7d9ac5ebf612f4dbf3f20da97fac097afbacf240628d498bd18da6a3463e9ed3a77fe90707abc49a2610956936a3ce2ce5f1130697599f5af379e4e1a2e671f95320194003c552627b04db2f1a55a2f1d467e4fc7b5a96863d2f04b96f7db80789659dbe71c764dcfcb62724b22a4c71d1f5ad4b95f9f5b8b7974d54336b39a44f36bca8d91bc3afb00fc16f868b9655e383b51a6d9c8697689a09da7917bd79af7bc026c32837849ff5f03a1ede464513fa45928cad0fcc581e7e73c6eb0b2eb01cef62b8568803d251fdaa038c25e86840a5db799259fe8f0cf645a44eed6a5a0192813f0d7dd3500c30e9bcfefbe7ea3e1d1cbcb52cd6164db77b9aa829d5b613f0aee1b5df9d210cd11fd19b90e9a1dcf57dde7c50fcf4c7093b31628818cb38530f25b676084e3b2873cacaab979603742766518c17316436adefe2d2dba25901cc93790abdde807d0e30f51699d099e342dc9ba9cfd60b85fb5f91cfc5415f430eb3646363d9c217188b83979657878af5c9c170cee9a43d4a06d7467fb23061fd0ee048a348eb3fb861dcf73734b6b169b42da6b97516a7c56e1d01b1fdb6a3c02b56832532e23d163c68fd236e0da0c62546163b7f4b0b911ec9c60228d75180922cda909f8f595ba38e73020d739e33a47487fa112ab1d99e455e1a3d7db264cccc168d97dadbaf1fb91f7e1ad2f5d8ba1fc09e329be0c377f791a2438f0f95609cffc323ab0a39374ecb3d9b11ebdeeeaf8ad0eb86e1773049264243f5b03ad6065cdb4aea2f2273b63de79b18c96dc98cad3843d3fd1e51a2e7a14497dd7cb770f77c157f92915b593e251fcfd7acd21ff17d426b79e062699a684e5dde838a44964f8a527baf789f959f311e5cc491ce1e47f034a0e4ec08083e692ffa76d7e902fbb44c32a451f10cfcd8eda2dd8e02fb405617b95377e6f9cc9ef57b7d27c703299853fe976eb569e41d24ef1d5224510e7bfc0b54896b35baf497a7c200466081405029b05855750106ab8caf649ae85967ccdf10acff83af74fdc76aedcee3aab32cf9199637f8f89e6ac1b94cce88ca236d7daf670aac53250f22a073c7524df9cdb7f7b0c5ba74ea49d5649326f908b6c92d5842f4794f0fb6028a1c9976111b1daa752f65821bf43112d7c00c02bc28c73733c625af4b3ad8ad506fac179f20031cb89a811995c308be3b5be76d8e824ee2697a0619eeaf5e6c1bf469fd9e106653eb7980488b5fb822b7ec1f0025cb487822e7fd7ee1753187133436efb7f330983455cad5a5d1278674fc1c842a0b9c3f859373a5cc9437465fb67cb692d24833bbb4c7888a203f31991245c0444a3280bb08d15755155af12802a41ad6b4966ca921df2be354e66d4fb7047e1c91f282ebce7d5c27ff81cf95a114e32ca2028b26217a8457760680be72c0845ae7c48f3e6be17ce85a9429cf1a36d93ba374d7593e005d8f8c86b30dcbe29ba55590eddc69637f412e7a47fdf571c4acbfd4996bffd97c32a14e4e654ad08ba5e23ee5ec506d2cd9841d7148bb2c6b26fe0a1a84ec6da9e9ba4699ed78f31c0396b6bf97a6664c596364efd8f3d1975269fe9fca8e24ae5ce156dccedcb3166779e0c304f5b6a768d43708d425c710d7079973686c6752321d665e2fff79407894a4395cc4c405afde7e0664da769e5fe1c1dd840f9c5c14775e683967ab63dfeeeb68c69cfa2ed589212fb29846098ffd5f2447fd2d95a9f52642139eb347448f9b996b04bfe983dd09cce3ea9f1811655c91d8c080c59aa2a634e72cf7b44d809e1472847b0061e31c242255e9958d219e6c5fe0ffb48e83c786da97e172a5c8da2104a4973916a2438195638c46aa370ffd06e310292ea26f7f1669d748f26f390849ed795d4b226729649bf0f311b1968bf3531ded22068768c3294300dd7ea21068e68a34a76c6e65b8857d666a961a604eb78dc911b7f88908608c600dfcfc828a183285d387427db9aa9c665cef85c24098c882a3bea82a0e951a312bf131a6d609da1a767bc9b98e91b3ba8fc3befaf17d36e381228193fd50553ade6628c47543e8b93951ed6160c32c2bac1aad4f88ee3fb353eb6a0cfc1aa545cf61c9248e4ec62bc41094bc56c66d815bfd3a0b2d734bb9c0214adc33797218a5edfc0e4ab0da37bec0a8139924e08443724d740a95c2be71cd0b4ccbf7247d090fa9c9d1f38ea7d06a10ae5064ebfb0d84ced444db0c8a0ef794a4ec1c2339a3d1b89e4a9e4942a115b4d5a40ff8b06038a57106ce91e53ea5cd2cbd6fd7171a3a11d5dd3a72cfdac97cd0bdac6e69e598ba9476f4b997a9e19e2b6778a9de17529db6b44e7317228e50e6c2c3b5ef44abf584bcd8ed67f8b2efeb11bfff5541224288f462b3e2226d1861dbdd350a24793f8b01ff931fd321a8b2e4cd424641b1e995c8ff9af7816dbc87328155812d0b7eef6df31585e134b1c90829db77be087b2356ac9020e89724a1ec37801e08689cf9273bd962cbf5f278a45b30b0612dde7bc6f1fd23fff139f634871ba75d987ff1585f497d386c5406e1ecabbbd22afce5415649c96d86e1d030fa8fe5d3a4111f27e7cba0d1a0bdbde663b35fb807bba8ef64dcdadb5b0575081744a0139338cabd5cc9913e9916e3dc48af63bbca050ef7a21f1ef07a8e2ee566a2a0c56dde3c4146aa19265f48c1ea240990847dc15d8198785d55ea6243ef7012ac903beabbdc2bd60032fb3a9f397d28aebb27d7deb7cf505eb1b36bfc4dbcfa8e1c044490b695b50e0974d3c5f0de748508d12ed9bfce10eaadde8fa128d3c30c12d0d403f60baf0b53d2fd7a38cc55dc1182b096c11d1ec9f171b879a73bd6ef1aa7825bc5162cbeba1d9f0739d1337c8142445ce645e4c32477cdcdf37e99fedb9236e24a3d94f0e45ea0b41a74762efe19d27555cdc89feef5b6e533237603fe98d8deae084f69799deac9043e86b830104327373d3427f9f55b0990b3d4c42ac2509818ffc5f122e0648e1eb5cce2c12e7dbbb41e8f21ea7ea48132b51b0b08178658b1ab5e508731f64b9163ae76567c6979f3f741566c99799440b1b29e409f6266a093834d4f97884784d0953a9a00efa81d50b28e254dc28ce23003457962cd090e3f9ab2221b02cb2082eaf832c4f89159b14a91bda267af42b975ca5b69ad8a23380d45aac34c1f8c031376c9d06a7dd0a37126dda0504685d470f490bbec31060542cf8c994f8bf1db7a7d052a2fb2aaad8f172d506598d6095c8abd607046e02ea31773a5f157779085d48edc2d790e580c2a54b98fef5be1a2558d612311d83c96e705ee1bca45ac9e450dee4e19242b5028fbe3b4913ce3a81da5c5ebda17b68505ea7cb62d84b72c962a6678dc15aec3d8c9d7bdc7a298d7a9b094b2e8c524d73acb57a8c85b3797908c4e95080969cd04679c93d9b58697c354d65f84090ef44e5088dbe3f3b646fbdcad8ce627e5d7727c3a1c0f9c3751313994daf60bfd4409201635c674bba39fc18c45be98a947ebb1ba42b180336bbc08d60b86f4792f33e409a0b905cf1543e4f2a8d8843d8737ae23ec0688004f2c69a2da7cec081d9343690303ce7904b1ece79d7b122afd1e1a7d0257dd28634903022f1f1a3476f2e63f45edf841d8af82740cf06af713689dd16beca63311db7ffdf2b8a784a218749250bfabaffa064e9fdd80b52c30dce026110d0ca7c0a9849b0b8fba8009cd966b0bc10e4cd07ef772f8701b52bb448b84db02370ed77cbbe562ec7cb113d9f4d15e3a4a9fc3de26f5450bc3f01e6646f3b1124eefc01ccce2df17159e290335cc317486303cf0822fad98d68ec00ab77c7b8779d3e2515e9b6b57acd0b11402646cb5eb88a17ab428165e7bb409fa892621a7e241a5e31916ecf669cd15d502a2f846a12e5b4563e86aa6dbeb61fd62fa8cbbaec17199a75d4c3a751fbb0bde8dbb6fcfaad31938788fb81dba30daebfea20a08dbae3cad78716cf84d0d813d2e9e779e8570bddbdf6fdc6baade5acb3c4cde1618c494d66d45d319e071fec88b89a8354699fbf325f05aea42d345aabc737d00ff1c69c746aeb9015f514927ae6548bd75b8992853fc79c40a78633285fd30ef191c832b0b9664d852142b019f18a05d9b3460246f7a83218a337b099ed43f0bec2daaa8c2e41dc542226cfe648cf83e3f75188c8451be284b6d57d712def27b02b8a5e675802cf0b6e3d4c707a79887e9e3890b976b7302d48fbd45e6059168e3233d8e2b51d98236bf2a049053c76121e67a47b2afe9d6adff76fa242f63f915d73a48ed416ca34a1e385c0577cef470e6b5e8dc056acd5f274a9fd446b157223d64bbc2372c7a7b68c47870fbf5675d4b00971e553c0f716e00dcfc31c3a992bc8290b21c633050059700d8c684e2717d24fc7f87a8c36b3b6258a6d8e118ebbb5e6fc5d657ec525d799b46c2c38f32e4e9be0784f612d6f836bcd92353ccb7a4befe044e50d707d832f1c1d6fa942ae81685be326e23380c45af9efa60ec7dde6be8766c9819f9df89ab51ea7019e1f275fbad7a581f1cdf57dafc4552a0c6d12dd3231976d9b0d84771fee76e47de68ccc6db44fb2d07d934e5fbec6f1219e5cb68143b313fb32d34ead1b33c45a9b4e48e5079a0768362a377a3d70067fe820f4e50bb12758a4418bfd137223cca3c85fc15ff8f2117e26d38fdef4ccafd10bf2ddf8261a0bd87bb98075b6854c96a76b731c010574cc15ad2101a9d619ff7a4afca7766ebd45ce51b790855b42fa58168aca36b40a86732eae44139546b9f867a1881687c582d5df33124328584546cb78f8fe703b53cbd2b824d69ccea712d36d18ab17bd161ecc6379847ee4ee1004be16ecdc9fba9c33af12475f1a2d3608cfe798711c5605a3d914ddc1817b305cdaa2765b901140bc239b0a5ea1d2ee923a6363366be926fff492a392b663243e4f2a2f7fc4fe65e6963d741e0e3eb8ea5d1a8fca1435ff2b56716a64ec4c68239c2c7cbb96d8884d7768390fa7a7018b787b92ceadd2fad06f1fb6aa9b8d78974217e2919e46045b57a9bdb616c274e03d1500a6b126a669bf1c0ce65cacd213c18af58443ad869ab78076a3c4176fa31b655dd496d78e61b6e4d1aaa82101239ae42a161fa57b76076af85b47fc7e2e93fb1eeaf73c1f52f718a969f69082414eb1f4c98a944f87d7f7b74f1b081cfd2734a85c3aeae5a7f015f896d061e1e75d72ea113d109f4a998537e1a5b0c8a945a09e9ada5a5dfb226b43d3be1b8ca037b58e7f7f90d738dcb1fed5709d0d8d8fcd66496e00f4a70e871f8328340ee67de83686faab83dd11fc707d241358446629a3ca6e8556463507e037a731c534908986aa06b72191c9d3315b08ba35485933bba0444ddf53165c3a63a39b6c14f028036b5c4a3d1164b4b5e1c6f82123e97a326d97c11c5823028289b5e740024d32114d43db32b6833f82c3c763a841877b8c84c19589bffb796d3c469c0d76e83654b265f0bf0ba5d20c538273373bc3a64e786a219414f04f3eddde2010fd61b3325d2b111e8b3cfac72390bd5a6d1e88ecdae9fbe7d1b1f29bf10529e7003a272e800bc2edafc93857b67a889e7008a1ec0ed98ae180b0e1e91834001c29e200cddda06ca8f3db19128e989b5fcf126fb096b1651dac6dbbcab5e3491cd4e9ee84c85194ed01d2fbac1e833c3ae4bc70ff04fa00f8af58ee954cab6b659bc22ee7d2c7d20634417e78d8b3019c5b67241bcc2bf50f23f2d8fd5ef4fd82d8fb706b7f5b8aa105b7100d5fb062109dc3179b7ebfa7cd84dc29576f4865f1270621844085453a10a43ece15f404142620b9f27f3d9fb05c654e37f01e4b4d0072d0c6a8ed982dcf89795f9e063e337f3099c5501e4354153ec613840f03d2ffb1fca72afcda18bce74e265a6f96eb1353156893ea493539c91f7e9d73263f7f5403ba492ba177433e3bb6cd88a4a78d08db60bd1a07b05484b8dd9ee328eef9c99454760274c60d0ea08589e9cde546d25a422e360561d00220b51ae7927e09931d1a5409da8164d94b16f21b9940db4ff09179c6d8d646b1f59993e8e94929311c8045ba3936051e69ffa8968d36a4c25cb32234e86a232495ff9c7f93fcd333f10add9c1750484eab840fe320434de9fd4bba18bab9ffca906b971438e5921c593e8e17fb6cb8fa7e58ba79d8d3311730afa3dad63227245342063f3ebfd04ab37fc9b66be7d1a250f21ac33d72f8eab5737203b15f53c27d277c691bd8284f7e63330fdf5e2cc6d1c4b367c4af0fc4fa2b971bd2bde0157c906c1a56cb14ab387d3c8ccc4c14e86f6516dff4e3d0465d3c959bc0ca669dbff157db86050fee602258a5c91e44778837b78444ce04ef7d1af00bf20151ebd5eec2251002748993f719f34c511604cad117fd3aa9f810c86b38d4ecff2c505cdd3d7f9b600ced325ff2fddc91141095a5aac35d24345add91d29f1810709b93311c437eaa13b9c9e1661dd04ac91b7749f25f12a9444e1b234fb319e1a8fe37aef129302d335fc92ff5dbedda9f95fe228128f1c5923b0f9412c958ef4028a89b5e99567 +MD = 8ca103dd16385714893331aae8b98012b40a1c359b4b25958843093a1ed2cd36a58aa0054a6b9e0a18b08836ba6be834 + +Len = 79432 +Msg = 068a639ec92623e69af04c1162fe2e83027dd272e7f72e4adfd19a502b188885d57d6fcd449d08500d86bd210c775f1eb4e81717a3ca9f327910b18deb6ec0261361e7f80a6f1f67b9b0b4deec8dfab7a8c83c5bbfbdf5aaa1e7429d75a59829693eb2674623cef3477519922bc76817892528876455987bff5c36c6f24576587e1dba621e427fbb5eded483f0ae1106fd08c5e2b91cf06d3a7a73518ad4c479fb05e631ba539988a7f1cef964c85d4bac78fab6e7996647fb46e28664dce95587ff1e1b43de8422cab8ed3eafa0b5b0407daf49155460d3e9ca6baca9e44db4cb124a69e16ca7516e3b1a99f8bb7ffb5e1fcce56cd647d7ad0df70c8075585e6e465364bb846cdd3b813e5167a324f5b0673ad014a6841cee176cef1216721a19a31f51faae3a8ddb923faf26df0d66de5cdf52344c7d6a55f1b49b874f03b17432977bc5727a2af37607fb5af7a1169006a4b5f4519c888aa2b55906a873ec26faa3294559927c2e357c7d2e7347cc6d6e713f7d3c484034325970b7aa2a91d8032ca2a2eaeb4b31d8887cc8dc69521d9b2f3af795e858fbaa862ac3dc91683156182f03aeed5fa767124250ba6e6e4995c4ec8ae5e699891126cd52c60e3bdafa5118902b008036e80115ef93bee999651a9e5cb2a9cb836f20a28bf10ad07af7bda573eb8d7586653f3eccf1c18ab4121897988799b694cc5cf197e4eef0ba56461ed176fa0740e5b304115bdf1b43a4a52164e91e216231c2029e272063421ed3cad552b1fe0c7145b1e35a8062ed24ab82e862a0d695a53a1cc7430af1b9574bf2a40918229110dd8c6c750c295b9911034e79879bd631ac883abf1262c80a98de6923993a78ca63dcd434eb36340bbfecbbb73b39cddc008f2023a27d163ea1d64a269b1068a7bfea431f855121839c8559a2247821ae1e77a1f8210b4cfb4e226f9c866a0ab0dafee0bf4244ca07921550c4ab1f7aafee88e4c5f7d411498709010cc11106ec9a5fd39b8bd6d6a288e6c8a536f882e8590c12128ba00e3134d428ffb6cd0364e857453bc6ceee59673ee8cb2fc9de60454952684737eaba3dcc0bfccc65a91ead2c5e285df5b9361566d8c0fc5b391f9c88cd4d92614eed8a36d38b6ba3a224cf2745e9b613e0407ba6c10c0776392e4411aa4cd4e5e2d0045da734fb4d937e389023063bf00a7f8145cb35b6e18694272c12ea768c4d6e9188b080e42c2732ceaf1f085253e0fc108d1dc57366c9592b212db1de1e38cc1afe16f68f08044a7bcb6276650509be0ec4e044a5cbaa863a37222875634af48808001f62a9d2cd252e13d8dbcf2ecd65333b38b3d9d0223bb81ad7a3222cedc1ee9681c6d63ac4b61e5bb71c77f732fb22572b0758e43515ea3c47d12585bfaff802a62459e33615e4629990c50bf4bad95ba408108dc8b216b1ff6532fe73396e6916e2f8772b2ac84f099f83131b889f702c1ec974e1f983a087c9123f0f4697f6576a7c9bacdd114a8cb177b6b04fbebe4ab14a418bd27b3268638def9ec0bccef322acf9bf16097dac2e6a9dbaf67c6c86295c9bcb25448f299d6ab6258e251c727452396fbdf60ef07e2570416522a368efc72aabda27de52de733eae981a065ac73403c1ba2125e0096dd64e84f78a7969539732da6c486c8d6e2c40c6e3b435821cfdbff5d2eb05370d77e73b454a4000c78a680b5bf4fe14242be400c74f8a0fd0d270575187e671cbfc1772520a451cedaa56563c0a90da5de1a12e0fffe2d51828dcc6e5220c1d710de31168f311268ba003a356b4aa47e0f67f3804ebc43cbea80c2bd7e4fda5c5515500cd2d2b846a1378dbf218d5c377138606eb3cb8ac88f9076f6ff4436f90717427c9df1ba052acbbe4585e98b6e8e0bf800f19468d40c3d578f57b66e59914486ea6316ae10b13d6a8d0af7c88fc04318fb7abf747acb07f30b1a0ec6daae3dabeaa4c9fae5cefd00ea23308a17b28e4192a1a524295660c7eeb8c5f71898631fd1f5842710ee9b2fd1511c46a2df3e107b18de0e7c28d8449ea664658ffa455154b7cdc91e9a8835f72723849da0e2f42942c279cfdcef07bf7572a8ad4e54fec77e1f476b5d54b1b017deda74920d6b11b20b1ca0cd157fb5a87926fd0f3266ceaaf12883a1713190a5b6aed43d2df3b8e9106dab83dc1b15b1d066fbb73e27cee0dbe2f4017e241d533378190cc51ca34a6ac32c9ba368542420ef25c108c03c92381d38e7cc07baa2eddcdf8b5344556882d3c07f2bf5f561d33607c702bebc41ae2dcedefb5afd074e337433591933c5f115f3a8a6327e0d7fc21e33bc71b271a6ab22518cac5902cd12938f66f9e2e52de02292d2bc52897f29d591a697b3a4a9fbdfe9e06a5327e300aa09dd64d74891e8f9d811d2176869b3ca6b417f345d30b65402a7237fe93864243d5ce88552d586d5e2e442412cc826791b3db6b8fdd3613b26314643b935e39e94460371a66150434dda5b443902c84e4bcbdcb618fa72d1df2f61233a63d565a9293430c5bdcbce7364aba53fa23fd657ac4fb0311e61d497e202a2cf2ad035d687092703535fd3ee03a1f8833ee38dd92f8e3bd8c7b49feb098956fa235a8bc6efd0d911ba82f02847dc92b63159f13af616cd728ef1b0430683944dc5eab3d4b449cb636bebafbc91ca283b12098d177087c980cc8f922a59800f2c8ae75a9a74d2826aefe06f1581e91da46988ddd92f4fc4961914d22b72ed1c390af6ec72c1e972aaaf17bacd88b7d764a05e500a92dd5324ecf7eca0f3493fd59e9fe6180c1d30a521d82f3f26b50a0e4ed080264bced9bfc0cf4e355b130e94ee38e3d4b3ec20ecf0c81904ec7f1a03cda5eab6aa82ecc92cf173431ae8fcf94258425369b4e7e4946e24993a648be7b534fc364f97f0c39a14f87493298f756374adee8e25ea1e7510be769113d42c9e14311f9b8c7a5190904a2484533a8baa246330a1bd9c0d2b766327a0fb8734d0aa25ed2ecf0dd598f9e4ed4ef482ce8ede2eb444ca923320059f16ba8a19b3059d472969de1fd22bb85539539bfc909a085cd3d7fb5122eb24eeee7e4e00099534115eed3824c9b162179352a80c8454396a39ebbe5d5ee57acef94cc5deab182510f8297bb14ed27db8859cb7471c35f7f330e0921b39b76dbbd1a6701a3a06d6d27f9f0749b3f761947ab22810bac7ba746367051f65d98432022beb2728d9cfb27fce7952bba8c447fd33a90e0272076a3bef85de45b444cdf54d7599ea09865d53283060a85f0c5f879188a365dd554144da92dc6be025ec457bcdf7003e811f944ccaf80ca2a027a44c655567622a95f8b8caae3ad5ae195d4752a30db14695dd9ca79d7aec365cddc4bdb88998fdd4d22a8ba8551d53d1b7208242653a5d3c89a864a555b4255b8eaaf0213eea558a6b70546f2d2fada1eda7fb4999022b9012e070c44f92f3a0516fab4419eeb8332f5ac377357522066b3e1c1d3bd1382d13f55a5eaaf137b7a0735d858d1eac4b881a47350086478baa637351a000096007279ff90a67582e0666856a1ae28840206f5e4d10eb848e35b88f7b781725d56717a007d06ddb6feda9916645e2f2cd62aa8713e91d6f9aa79dceff269f13f9be46092fbf6d37f9e0cd2ffe9098722fd95c401deb847f4d5a93c0512e003a49672349c509ee04586a31afb77d5b6d03ff0517efaac92a02c92ae21610d32f410c4fd05c5278b707f487af257ed469c63e358cfda953f6479dd3d2b25190597d182c3b7a2b95d6851a3f8cad277bff03315dfdcc69ad6aa8231ee0ba72c04f5a1538e992f7bdd96c45b9f6c2e9ca733752ff18d06e3e0d91037cba92f6cb87648df6793b4969360a01974c0b38388cdf2d893cae199e558eb96dbed0404a8838dcf558d7832072fac8481aeab55e92672b9cf7ba1e46b91dbf726c0701a5d8239cb616fc475c26cb145cd1f5c3953a6bd7aac888cebfceba802b508b9d75ddd147a9221e08a4b7d770360f90f584db59ac233d9ebd71fce195e8faf286232fae685f08c14972accc66743260dd95fbbd2396a5605cf5da2f8b4bc9b05e4634377938396a8c5e8bf66197d8c9be511202d885be824fc3cd00bab45b69884791e8f4d5428e33b0cc01ec0161504a4ec4c73570e758e8646be1bec31e6286bfbf5f55b6a2b0e221e36b80417a88e3d77a76c4d89e68c9403d5ef1e8815ffc0712f7264cd8571a1a689fa8f872c83d93a9ae013d624664efa7d51ea532a63ac6434ce10862054e12d20ad066e8b299fbe8b9651fd1664ddb31f07f8990d9d575b6cd1099ce2ff093a659914d4acc9b88ae357ae04a3ce69b621daef62a6f5e8de3f42f417b5b94256bf855fc277aa4b270bebd2f5b5eb198ced9278b6ddb2877515eb7c0080ccb408963a8f3fd416811b691a66d7330416bce9f73a9e9a1e5ea95692475e2b7e86d853814d54ab5382f067ac12b3046188ce7fd0de21c57f92016a00fd399d18e14e5c204108e4aa752d6c687d90124a964a16e70b48461e4e06b9fd4799c0e1ecf31adf12636763825bdf175076440768b915026a1a0543b83eac51cd877b23d04ef588686d1cc6d3012a81326e82df27a3e6eaa29fea36f833a9c3360ab624b4e856e1ed2fec1b8da7b46ecc7eb41cfb8ef0675cdfde3e376d191c2a2b592ec147a3b447b0bda9dbd6e5a6c6b1c2040b049b4140e3c7a49d73652453f14d871ef546c71ef879b9e31425f0c70c95e0808c4f3ff5b28fb151ccf3a356647877f57aa5e21b100693cdecdc16779913f781af742a24541caa7c032d61de8cc3486b5c2acfe5ff4e7fc2e372de7f5f259337f372ca74d258da459d7a2591721640aa253b5525cd37c5ea834f118766b4facae3b2e78e332988d52441b9171d5aa9da5c423b8383abac6c53dc7736b7a67561049a49197f79fb5320ece3199575c9228aa64aa628917d70db7fd73559e54c24e093b7bebe2f7ce817e26c3fe351e9ab36cf4a37c4d08120a4a1fa2b5457c73cfe06fb25f93353bc938b1c300ed5509de82503dd6052fda235aba9c1b1e62ed1e659dbf5386dc8f61b4fba951ee8481f29103c4102fe3c1e1603aa9f7779c80a21f620d781c523bf389610151c7417597ff8bf0bb5bc85bdd013c56caef7de1036439272de23ab3e70c8e4590f600674754552e27e741fa6ea42c4d15e4ab80badaaf86f566fa99c4e4dff08ff945d98905fbe6e670e5303ecf76d7590599e220f911b75f1916500578d29cbf4f764ec5aaeca58777369f95f9c8a014c0cd87de262c42db871279315f1294af77363995a9b4048b689a9b2ca98e11c984bad45b184b93eb2f7377c0fdfc92c0fefa1c6188ce6e52d395a56b5533b6f7efe67a2015fc352e80cdce4cdc0cf1a4554679c1dea86d8e36cc60ca8355fa1050d4cbb5c5ba90e609660f3d8fd04bba088fd43f01ee6c8e00833fd2ca6175b3560a5b949e0351c247e09d0b7fc30b82874abe2198ecf5e2df6ea51c80e294517e0b9c351562d243cad20a4f2271bb8e500b9a221a40842d11f332f05d55e06b273d202fa255acdae0aec9612e58c64e0156eaa8fc75b1bd46a55bf6a637e470f02369ecfb584c0847cb7cf9e9d4d6420991323eb5e8e923fbe9a2b7f2051af34762ebe556f72a5c6edc7771eb9245fad76f034bed36a4e19054898cc759ee72bb5028a16b9ee237a4466b51aa0dafd90924d068e8db7f86a26a830dac82f96fca9fa2b99fcbee2aa69dab11bba37e7d0d772c0e6f43d373b09021b3082ca65ad385ec966a1ab8b5d436b94a86f02c5752ba68b4b70c3b493969e81560c38fc484c758b060e7dc69cbc63864a27053e8878338f476913167ab5c389d5cc4102d4cc889a00adfc3a6ebb08ae884a06fb0fa55ff36147f306f84ebb5b342cac205aa0df1edce5f090db29a435ea40cea4159a73e022722c2c1649cc20fb9343fde1b0c23e231d206febec7d42f87125e09f3fb67d1053862fdb8e3f00b369cc4271e479225cbf5580a7eddbfe3b46d257b77c72f3b550c8b850055c22e315109612244bf30f32576b161408913a259fb26439ed6999d2bc6e7b976aaf1301d7a2cd5882d9c4deeed7404a4b227d775299af5e7108424228fa662ab3cecb94e90da96864fb042be26c2e75ebd98da5b4b39ed344f73a06d50319a77da894360d80af3c3a825681fad3e77e31dff1158da93c80ae5f09888b329af71165f54f0da3e6bc4b954348ffb4734e655c3131a5228e4df968352e112ff300b72c7747af1d56d1e15d52e8bab6dbcccf77d660c3c79e236b39486231a12cacb625a087bc97076142020bc9f08226dfb6596709b14073e84efbca8bb1304be25879fb75fbb80255b7abf6536cc05c71642a6c9635341586e8d541105a855a8ae3500d7a36294e9688809ceff51786691f116e6e184c8de382f0375bf448608ba0d160ff3391f30bfdaa8403522fabae3036f4f9212fe2e9637433d3472166cfd7257b6abb99fa9b5e5136f94cb1d32adfc2869f1a851c7ed588bee01ab6733dd073e62496e96a30f29c3b37ab4506c473ddacc8c9f8448c1e545fea37b28fbdd2e42a968c284bb102b41a2737924d6436aeefdcf82e60fa87019e5964bbc23726a0ce2765fea505d6c15b2fb741aff26e5ed6436dcf7bb058b703966a79159315ce5a3ee8158116b6ea87b9f5f935576414ea65f1849a96d99d170711968fb9e5975645df12e6cbea57252cb763e67960f9b1ab4bf5c79452dc611520b73992de224ba310a0dd0cb931bdf0c627ca41a935b57b45c909920a9b6928618619044a98c1c043656dc16da0d76deaece99789ef7e3ea5a869784a03b8a99aab3af86f203e0442099ed24ccbfc0bea5a4c644650925d343ced2e5a3cd5fe94cea15797e34cd7d43578289fdbb332901afa8e297f7b3eba2a9f9c826d489117965807080872a1c09104a9adf7854aa2d4fbff7aa4c14bff1d87ab0abf9ac9ebab66f20ab839cacfc4493ec048f9bbe92f589d81e9eaebcabbac413959520dd7b6d3fee71b27bac9774fd01ef697ed2dd4185286748085e4ac16475863f8c7a45fa715e558c6d976511f451028e748366b4305d06d0b831699cda6af07155e1a4deb1e4e989e909dfbc087de067235cb9be29ea8fd114c262ada44866b303a0129a70168023545081c3a7cd0b9bf1ab60cfb04564c1c48dc06440b25b7d1c3219ae1a67cbf15617d5d960e2e695660bd6799212281b3df02d613e2d31480614249a3f5d1f6c64dc566db243f3dc070a954c1dc53c45f795e414fb0daaac67c2bddf4d6b1d0ce70a8de11a54c5e84b0417a7d1d333fa67ebaf0015f80a02a7ca5ffdd316275b731ed6d417b9df42a8a4f82d4cc08171356dc8a31d60e1e35c9785764ee2d0c09fa5ebc728d7a263b659913cfd21b772b698cb8e5fdcb4e6dcb6c8c94f55abd4a32c173acc32b1c3ea9e9d67415b4857820942227bc01565cea4847722e31b20440df3af705f7ffbbbd0573cd7e1b6981e1bb6ffefbf65e8a8fd62f0881fa10be8e80b75c3b28f73a0bb591e2f5974cce15c84873a2f48f7e20dced5dd7fc0201836b95e24d042b44fac3d8b9637156e82584548c994110c0072328791680ae54876a7a9223d4c460f2f5f25caef2ae5677b73c53c8250ad8aa73896528ce3c3f02430f72a6dfe9175b1584d3c05f7da07528a7d018eaa54f7394b828f32ed54a5cbffb8dbc6fc3f09ee939247f03ea4f86a13e0a6fd608abc94d5cca61e8a1fefea6e6e84eca7a73213ab659d5251eea11e8a909b7335c7713671d545943c7e24ec07a8d453935284dcfa67aa90c40f980c78fd5d647c838bbaba5cdc2886f7fb5d55c8387041c988a72af8de20179043a039877b65b757828de993d8600c35b9cac37d2fe73584a41e9799c6a4cf194a7676df63db68bbec2cba4ac8cf0e800690eb18390ce11c6d8fdadae2835cf302fbab65a55a23193f1396c23bca309f686c3729c275c6e95b976f3cc04043c613ac31aabe5658f7e1def99a9fe604cc359932328aa66983e4a1cf2fde6005fae304b42f2d448ce07aeb6d4473a6ed9f14c466c2c0134b749f5b75349b672619f791ad6370c9316b60c56c5045816d908c5a3f4b2140ef23f210ebdb85ca269bc7df87d80748e8e149f9713e840a0748e2e7364c1cb3c71a735ead953c1d8a08ea5addfd7f4815fa8d04166fbdb54d10dee7e63620e055d099b134f21cb5c2d9c5700a54374b3b0fa051b68460f79190c6d8c9a9cc5b3deedba51c62a6375396efcbb77cddc6daa93a7eebfd0c55973141365b177d88c1bdcfa6ce777726dec8dfda4fc7b14f775fa1f8213a1e63a08ac48d04ffb2fd93d5ec32b590fde8a6d80c084dd57059938b7d49f0dc25865005c74971c31b2e16bf97d57c4fb9115e5cfaf22c269959b1c532d0d543a052282acff80c2204aeece3790b8d24171557b03314851b8ad44485594939111d3b9b6255154e6d0dd468e9f651629eb689458a3adbc354c36dde44570fb6c50ac71c54ed2da334a5432d2b9623971005d18a3378d47142d16ae1aac280b8cfe7793d7afebdc4e9598fac20ef0e95389372b854838b1976437ff1011268c9a231c6713d10220e2b990e6872578ed768de013265d16c265f77f18eefcd1453dc88235a23b817095bf233e4986600e84143f18adfe8f4227f1d840ddf591001ef39345ac75ce920fae3b492fba111422273c8443b30bf8845729c10585ce83e5af36de5808534ef98ebf506248f4c7faccbf9d0f05f2ad25335ae18d33f0973901534ace7b766efb68969b0ab870eeb40db0ad3a7bac29b18c52e99d885f04c2f3d3cf3756a1b8bc43aa724d93ec53f8f2f7faeb9ea134d16bfb215f0b8492298c9cb6bb223bf6e527e21d5660d2bc6c827dcd4bf43a962dd73cd0f944c50916d497478166acee1d1c26e34ba789f2bbc5286d8207dd166cd8fd3f93bb8b3030d4acc9b2aa5b690d2b5e0e55f179bd8bc3e124b75ff37e367626b756f93fd02093c4867577b22e5d5b72e49bc40ae4858591381282e59435baa07e698547b18d19c5c4f3531807b4b54bae46aba43150121ef2bcfa19210eab51dcf5e70d9b206f99cc53c9f5baba3fcfb37d2baf6a9472729add4ff9ec6c52221b22a8f756819c26e6be5eb2101803e73d69ce9358fbae73789c07ecbff5b5fb82174f6fa957a856595c9cb5d176097c92311bb8c32bcd0bd322ac596051dec558fd64dc5e4b9c0f6f540a67c57b5774fbff9a8773ccd721f597c5aa9829d566e6fb6fa63b047f3b6ecf3030b3d0f7b9c0f8d4662f87d59c2422db462f25a0c8743af934092b59c19ff49779651df131294650bec004ce66a9eb7595edec49d149e289f08f6733894aecc6a8a1094bc67e1196f8efeaca66cc1b1bff9a27d86baf1aa8419761147bb7de4527303c0f5f06802f7a82e1d184d4da56ecfd7d537dec0add8fe7c0047f2df39d5cda5f45e30abca2ae4193eca80b4facc4df97c4ef49dbb043492d0b7df65355b1661af33cd2ed77fbf6a522bab7a3a7ef081c32a90eb5a9c38250325d5825f58c9e142351a63937c867c27ca221fdcfd540b5a69283bf51785dd080079c92065748f6dc0acecb697f5d9000489186abdf4f0a2794f0222fcaa156fe6309c10f792d67274f91c99587a0b7b8954e66c373fcc2bd969c05cc221589b25ae9da985a15100b08395c4448f8e0ac6fa2c49ffb10867081d091aee68312a6d282072962c898901d0cabfc2a2db3e3c0d3c8c8dd54fd493bd4ee5f80b198e2b41e6e4bf90da9be7653df489506d7656e2a9cc5838dd04fadf043675667c46ce903378587ade89efc551fadf14df53a62ef651e5386a68bbf6cb84cd26f3e4e58798b607471ff37955c94b5a6c8b46b856a4e5cb70628035a8f77985a90ad90e8ca9263281e96912aae65e71c40bdfebee37c0616d4fec164a2a5d25891b938833c73160c7f54b5a494bbcbbb7cb7fef4a11aa4d7b9cfcdc7ed6d83333b0b5010195701865be2aae956beeaec464b7011ed4ebe647d432d69b8f53253564bdf76a765adff79e778e33c95cb1564215efc0f40dd24e803eb344b656720aa21ee9f2fc6a1e0a20c28788e69f7a09fe0cf9d4f1a887fc1b70f0eede6ab02fe338472f8a1658f9ef9c1929361f4f3bf30ccdcf40148ddd2079fe1e8a084611b2ca9d74c1f827635554b1894a64c788cbb5ca1481fa4a6e199a59482ba7da5cab265b671687ffb2fc9cff2d95f8695ce2687d4919c2442b718280f045c1b36d16dc1f7b0a3e48853fc5308aab52bb44c1c555d18a0501a1c2a313ab6b0e87cf807c48351f83a846a97e2424fd0c23ccf43cf242552b194d877c7fddfdb6be0092577409c9007573c4181880fd7d3951f43fc1200dace19b2a8f240c8082cc8ca72e017d993d66891a33ac234f3e72604c5e50df0612f127365baebba5db49d059309f04f292c21316414d8044b8559467190fe3e0f5de5e35528e6fb028ac88033fab4477893e9e42d18b2c8083595acee07ce330bdffcca214319d32036af04f8ba4909ab922871a64c38c7517f43ffe55263157e3dbdf071146c8cdf41bc588a5099dde8b247a176ba534b4fecc907fd77a72c8f00921deba1c86d6632564692c78b0b5779ac3c466ae99a2903908cdf8081c267afe2183af413bdde91e494b82406da2271c00abd62e3fd084c00563274d81d2dd214aa041537c56ee7d00ba371f4946e22ebd284ac2abc1450812c9f5c96860af2929bf20a1acd3fba8173fcb63c7f6613965e4250a51f74967cd8ce3fa2452696c3b3abdda61c79955f946af9c6e32fcc2774a0543b6e51a757206625e4a2a8460fb9d896c1fc43fdd23596447a0af4d508dd46c2d6f0d2097ccd101744e5b88ade77203b55b3c57c4220279e403bdbb79f61dba15dee204651a7731baa5580eb98b32cd6498a2899171bc61000bd0cf956c708fab7b062e64075383cfe3b25f0a536a36e85c994ddb9ef1ba0a2d9b02394d974d4ce7ec16fb001067f28dfd2226ec82e0cf1b830ce9164cd580ed7efbdc05dc73789a0656b091186ee1089ad07593075b7759f25f6054185402cfff050441cab2cd05d7561b26e5f909f81de29cf381f77f9c59add7e50ea5fe598dc6387dec6b98bff1ada15e03a6dbb0e8e1039a6d5546573b8096557a5bd1fecda7ff16ac0e9a2cc7b5d992ebf8e4d7ae542fd433e57a1f1a704201f5d62c341132bea8a42c1fe0dc172a62295fa3e0b0a4985d7038795878e561970bb57bae0afefda04f44b850913a1a48265b9740a26ad372acbed2a7d9585b61167a3ea11d55329a17d8e200a9a73fb17d6d4d9bf60f47d033f8f461ae61b61cc084e3d1cade03f298692b8567d6f14a991525471e1a8be2c0677d2a7a6a0816746619a48601d8564b6603336e51e55003d3bcc69d050616bc9adb76c009a7dabcbe3e8de1693611ab6ff7bf2fa0627e383982bf05675d0893037dbb11a93bf603cdc1126f6c83c122d7776d2e3b1f31b0b70584c9b9e724ee21f28be1c12ae4e4454fc6829467f15c4d10e1ec9a71f717ccb3bc5c653af81886d85da2fa0b23c895491ecd79590eb23142a1dd36e15aa7fb1bca5001defecc927d94f7bc433f4b3e3b8f9263bd95cf148b1182a903b91bb2bc33270829a554e570e632706993c6b0a59d941c2c030d6758d57f595fbedd94038b63f0c1885bf040b5f5bee4ddd59d05cd24eb2af2e7ca4a5225d03bc8580f903779443d244c337b88b4105b59f243da92d76910d1f88dde1c18a64e522595c0cbe98ae2e5902f7fd2efed23a4974592932e0e942cba526297ba33fe08c0b743cd272d5958e254cc291bddd44a5f32dc228b541b6fa7989659ad11d148b3f4679fd4b4070a9d43eeffda4af3c7947c05d591c22d174ac0d7d643b85e9e79ddcac854b782573b6d66cb8dbcf888e181ae30b3e13fb00e7ba59220affc767cc3dbeb399041eb4741b210a8bc592ac0f443a87429c9c68d299e21b651316d5757195cf5e6cc134b516f73ddc1ac19ad3454c1551451c7214b1fe99754a3ef73f811b21c13978ba22cdd498f5557c220d25fffc9397e3e7550b96e2612ba795d37436f0ebf2aa10634aa262fffe2d0a65ed3d862f19598e3fad933f523fba79d852d086041fbefc1f9547e4219e3b1b82a4edf94e54e63178a1dbf8700cdd6af723d02933481e47feb4ad6684bc0e1d0d52f79e17cef396a8ef5855e21c792fd8f01e22a0f631b9aab1ba2f4fe00ed8adff42bdb311e686789df09ed1f7f79122c0a2b974b05f19c8935889ab92a3140bb4b89e49a529c98fb58d1a6423bd587e9c4435d7ff103103636ebac05b3598cf79408802102227973e1612c42a354c938bece0f06aacc70028e30bb5c22c2da054c2c506dc3b68354173ce1894c6340a958200e8799ba46aeaa1c4b350f09b264f279b7c90db5313c58c9689e7d7da8ac2eedee6b44690e7b28f2de18be9aa0a7155538cb569b2d9d249b23fadd204bc1b18c213a413521f87958e68fd7f21f4c2353460d24f4b2f709269616d1e7b47a7e8f397d06bb4bc719b2e6f2e1bca8b4baf881d6ff4e6bba84f0518b02307d56f47bb99c0b77c637889561fa5236b7813ac95ee15c04d288168cc8bfd496f0b791b6041fd5d73bea5474ea0ea01cd632212a5f94a1b471c04c507e3dcf87d93cf4e2bb80ec76175ffbe5e19851bb8f281cbfe66996d9b3f384efd47d598f71579c664267b5b0e308ed4ceb2ffdbf4d037bde85e871e123b25ecf8e07191a6387d6d53b3cd8341965b72e595dea848a34cd2ad099e9674b5d3853ed5374b52a5e52940858ba6c44f6d81ece7ade97d14c9f0948e653e89584b02184fb02fc304b9e472c73d2b5d04cde72bd3f1085bcab501e415647c18c9944cce7662a3c0fcff85329f6c7cd55d818eea7e346caa6e18ece6c824b9ebb3b649a871d7101335c1f4c8359f00f301935c7113fd7d32a7fb99e2cd2c5ec8bcbae3ee6997df825806197cb25e1f81990a3b07b8d5a3bb1e65f01f4c04d1788ca701e7852876d60dd7dc953e314145ccef12f69543460c7a5ed9e76e357cc3cc858bdcee143fd6fb3b255d00a1ce094349c884d4cfceee64ee3c805a46c670245c6815cbe3a04ccb3adc1a21352e93a52047fa9a01a329841e013339bf16493b3582da451b03fe24dce915c876caab9b7d76a012622d8581f510483329d614ba17c0738446cfb6af2a34961eea081bcd673dbd6179d5ca047b51076f0b6d9a480b0a27afeb6c3a142ba5e54b1b51aae2e6849ab2ce01bfb4b9adb816ed43a38e184840ef934252fae7254976910e1f830233802bea1a2d3ab60aa24f57c0f7344662046bc5b9c809679a0cc8d2a54357c433b5f45489dc3d7b520e43d24c5de19d41bc4c093963eab2ee74686880de07336a813694b594660e6b441ae54f9e3d26cbafb9e72aea45d007ca7edb05b83a57c12e1933051d5d793f8cfb193182f1e8e927dbe8f426c1cacf5534b19e9899392003c4b8e33ec9c4b42e0ef55ad1a5eb846ad993ffdf07a72c5fb074b247cbe0704760abb6c152f5b4717d013253003882c1dc71b3dcbf6f082e1aaba88e795497431495e56ca116269f6dc522d0abd6cd740c0879e7902b4a0b9bdfea334b9e7f3f09fdda085e2ef1fe08ca900f4ecd4bcb90e3b7c622e2da3e5b97dffee8c50e82666bfc5c3146ffd77697e5d99026e60e9187d6421e9ca00f815befb9f9d12e565467b332c0653771dfb48af619e88484367e3f232c6183c635b3822a25cbc601fb7a6750b69381166aaae52e921b0f76a84f5931f33a6eaaa128001b15babecc822b807fb9d8c50c3f006049a3c86e2c0e828b341c2e4604ea41d25271a6feff12036687713deb9c873e620ef3f689ee919f3ff34e46f41c3b875e97e0986de2d289823088c9dc0e6aed52462bad4804592fdc373289603aba810db40a96f5bdeb453a42a3857eaa0f949ab9f2f593b58dbacac870 +MD = 45a19bfa408943f7a44e3f8bde24b08eced95632b92fb30f87c04a8dc18c8fb242797dca783c34799b6e99907239b589 + +Len = 80224 +Msg = f407e8ad17daf71e1feb8765a879acd211706be625857b09fb814c7f1add4999e1905b282725ae371e10b7fa7d427601defbf8b164e021f5a24da831b8ec6378bf87c5fe681aa5d0df2d40c2f66082a97f4881cbf9794b9470e4e18b9e64838456932e1623e2644f2ce92ba75afb5833bdfe0d1b2c79814e2cefff74146c32256e5d9f589fa4731ecbec7f90f33a810560c5a58945084b8ba0150bd6612cf6c3ce8c1fac26895ba384df446407468489304750fd8b4d32b392ff0c98cecd5ac63fc9b7fafeb9a348216a830ddf47e926f529165f4771bd2ecb550aa2a377e39689bc6e2a705bd37468344372c36439437616ff97c29b756513be0edc28511b9b740c4c24c498738e23e68c7bfac5fb4a7cb4148e41f4e0be31e21e2ea484893dc86259d042970c0018276610ce93b7a2cfab5c2a0fa488a2ef6a45806137b5e54c659e173281253110a0da1985f6f5b337a4df5473d2f57a13fe88baa59328f9c9be22dfdb7d4789d2f9ef7e68153ee57c47a6f5b4a7adac6645f1c4b9c069e30714ed1286b4f97028d9ae27bf1919a0653bb8f31b4a3aa2b0e88786e5e50009ce1008967b4dc34ed8e81dfdd2290f4cbb291e38f0e324c2b98e52e8702b76d5e65a7a5502712d8babcf47e6e86ea75146b8deaa7b9cf17648e05bd3a4b952ad16994b356348c08f693631cb4b106917ce910233039b2b252786a92dc7b81cfb27758420e5f903c3dac4e5954136dd071b5b91bad20859361c2744e0224f5d26e2982cfdd1ad7f8dc5226a2a13088c87f4bf94262e0c0413f06b35d2fda79b960ca74bb46f8bba56f4f8c87409affd002365126160cfb3236bfc83eda0e761b3704dea2c07bc3e872ded075a6a53b8db6ef41352af78eece547f3617523834e5d5300f4fe167938639a930c3801b467e9e15a0e1652f3e7c759f573a5cc29e9402f8c50445b53fbde0d54b9991302e537b6fbff6c91e29959402ed3d06ac2628c04e11337acecc92e9195ec3e6baf8c0ccab7b79226a39817a500008981f5509d7dafdc4c9d9c26f1e1c7329c7e02d2f5b70d952b93ef6a9ef3299835a42b19f0f4390a07afea7bb458791b37bca5407ee67e36ad6c0e773ba4fbe96943ec4533031d2add56705de2701c1494ca1f5b04e37a0a7c0189448a5517a298d3a168b014eccd4213963408c330ad3808d9892438918f2c16f859176ddd2248e5f2db04b3f85fea89f4a493cc4743960b5c615940554341fed43b4f69ed06fdfd4932bd6af0511b0bf4161fe5d0763344206a10b525b5323b9551bed397bf2c8c2d0626a4455f782c1d0f09ba6cc39445be19e6e19353915fc432c2359db9691516abfcfa67c9666ce7f5edc46caa4d729de748601ebcc3ddd96515fa4f94181a8eba9cc7e82d8a30ed71386e6098a37d4858b1bb384f6e285d5f16bc2dcdce1f0db882b7470a383a85f77642d92d5aa835e4bf5d6089d4e1b88730d5c8c50f950c0c3b22f4de14cc49ff23dc46c6b795ef21ddb1380abc7c837410e1a128311f124c42a582179478c20edd8529f36ec8ec8679612f30796b46bc235a3755f71fb8ef25a96f553bc2669cefe80341c4a3b6892ef7a69990306ab5e4ca0bdcb619587b50c92d057f3ba03ff77f63207dd8c5b07abf4ea4955e7807d19b8f3ae28e7967506f4ba6d337174e60b5ba1deebaa282d95277fffd67e718766941ef20f1a439a1163bb7dc67246ed82588a89bdbd576b74bc2fa3ccf406e4f9db467e5e56168cf587dc6ff2e6007ba394f4ef9bec712b0f5a031d8070c7fd9a36733a5dc298b47a09242b00f52bf737b8e7facc5ffdd42faa01553a1b3d38134dae0e5387507868919c9938c64ecb066b6b919a3f83ce9c533334421ceffe2bc7fee28accc64186c64aa2e182f15ed856899c4bb48b801efea1a0df9c65b8a94d6c9e48ba83789d51382c44509d187520480428e59e547d5352825ac328cc5686ff2ad6790e8375d96e20aa59d861a572b1af79fb43b180f94ec3fbb8bfa4fa1bbf6e7c30efccd607f26759c52da12ff4ca86861d03fff1999d490aa4b2a65db3b4538108afb98883cee79abb2140dc4d9d71967465a796da48fecfae8a3c46f7e7bf2f28d5b452f40a8ab4633ea674263259f328f10f376555c992ffcecd7e8e5f9bccb8e924fe03ac37f1e60b3cbf268f24e3602fa09ee1cf919abe06c0ce2224d0a1e274715257bed6976c106884f6bebcaf44a8c292f7bb403014bb7ffc583f45f6ccfd021799474eef1cd6938d3dc7079ffde3deda4f23bd9c297371d0dab7e1139e0c4114705089411fe426a0a4b0effab3685a3f900ef02624b9fe1450948e3f8129951385e06ed59dc28786d3835b0a8dc0a0896385c1162e128e8e61df33c39ddd66da7fffe5f2bdf9200771483215b47216806f8f18b36e088907b69fb7e719af1d3307b5d6e1a71058ea26055e64500626eb5d34dd460d225848f7dc04f31d2820e4c50b29eb848f96f99cc4c63f88053794d47cf81732e96116cb9e012fd3ced8b56008c6567cff44fa788c52ed84f6b0417d70516e06e30d3cdaee96e3612cad7081b5966ab6e7c9b66566eab86d61fbbb0017d193b19ac480cdd3ab56efc708dbcf187f715bcf8df5095876e66bce7fca047a5ecd5a96efac4c5628d1a6294fc0f33c6ab1923ff87e0c6ddec0a5c6a435319fe166295df486fe7ef59cadd9ece59426407384c0721b17aa0a8e44d0d2c6309043a447793dd78c53fbff2d5f45125be0e7ff58d96392d219e3986f757143a9556ad0dc7230669ddd20424e44c411ef71499d371333ace4c14f254f3ce97543f440310fce37fdda254dac370fcfa9fae14d9549f54a31f6aa377f0cada324a777ac110917b962eb326b861148d0a12138da2eb50710e9afdd84eccd5005187de595b6f2d41e5e770c601803772ec20e7fdab2a4d1ee9cb8611cb5baae78186c47e569f18ecdb926bc16aa362551d469be34673ddc4a11b83ee922fc4e65ee1ca483722ecc303ba2497384d2d9a19fd9fbd096a9af8d11587dd27abbb8326036045719d216aeac90bb61eefe1c86ea074096860fd220644025be071e754937627049a605f4afd39b1bc72fe275687f9b946e8198ce69d2173e970f4e0c103a47ee4160eeef9b7969708c90a76caf243c0040cd6c2ad22385d144db7305f1338e892791b68edb66a2c29a597589c3a2928af4b3b26ec21e34e4adb3b4e952e8de46e37f845ad562ef19d8d273550cc0463d727b9323a18cc982bade393f9d23e02f5d7281daf235f87e2e42ca57f348001ea26d36d0d635efb053a62b8f39aa3c4b7eb4d5969aa664f884f3a117de0067376cd1c4fdcbe14c786051b2628e4599a22c8ca716367fdb90c22b211e36b2248fb9ee6432e75888e1c928f53e04be9f3d50411fe32c86074dd13372f36424df2e6f0d3ff892614cf376731dae03dcf723d31c6784e6848d379753bb1fce1f3f1d78767cd634c640b74f7a5137f366495c9b65a481ca401856fdd22528de6aec63ba714455354d0b343d84ba633c253cf19264016342844eb3ebfad798fbcf8f081f46bffbfebf557326db7fb946e179e99f60a4b0b516d7554a11f9f68c14d0158e3c1453f5e3c87af4c5cac17a61a84ca9a3b5f38bbf5c440060b5cbfb025691ee9c6ce283830a538d8bc0043e6f70239a735db12b478589f72f319eaf61ca8429aeee321065c306db758b09fbd179755919c374ff76f92b15c695f710f9d3f626bac3ca05529c99c4ca53581a506c4acedd11c36e146132446c0a5e86911af0cd081232c8123c1632d43f7a01b4f1aae1066c27e0e864a76b6ab85c79f3467906e004f3c36d4d840cd978f61ac5af9e7adefe27bdbbab917208c67851e5009ab989c1945d2b74ec3a222654cc4b4f2d81abef4b6e55ddf8408e5c3b7630f05ace4c709dfd135b55a3f76f1d7e0d7860deb6671b597ea3e4bf44a42c519cbdc12d7139960defaac7319f7ed89ad4d33e79478d20e7fea55ed672c3d348f010d7bf404508f485094bcb64790d876808cf3aa589e1809c8a6d6d5fe4b8c4f690a56a00bc7b1a9d1ee7598c8945ad91be1b0a1a84e68d21fb1a6d542d642e74e63217fbc675e70194a5c460d50674179d2bcfeca6b874569f6cbc99c65eec33b986af778980c378118df22886db44c14f06736416de9f001f6b4376d82e68fbb2aa18bd302316c93da6cc2cc349855879b4dccafde074ea221fea338b5d089379a53c15e1e748bdc2f83ab3b5da9fa5c63ef46682475ddb51919a17067236c5b57f01c6c452c11c458b25078315fa6ddbaba17fce9ac19a54c8396b72f559570e41511a03eee9ae7168736e5682fe7b6303cd5f086108f0d2ccb077f66ed8122ef21357c343293aeb960e3156aa1496044e5f4c592599a573a6e883bb661dbeba9a2fc62fd7e78a5e1ddc98aa14a28566953f8fe96cde81e05dc8d7e9658f235d418caf6c358c647006c7ea7b48121132e05570dfc13e4cc1f937bba7f19608bdf0145aa5e28191c958b671f0cfca021035893663a921cdbd831f761d949a3782afae0e00672dd9121b907332303420a79ec32b9faeefcd7d02675174d5037655844215a54df703f3573f3968f3b632a022eb95b8571114a97ef794d43c3a8ede79b9b5bd1c49d91315aa0bbba1ba02a2c9e9bdd92ced6ae8ffb7876452a547c495f937705a8a211b5db93053c1a756569ca5eb28b6ec97e28e8f714d9ead68afe0ebe3e59121a4b23554f257dbe5f764a20767cd7c76624032679cb6a9babb496377004548782a81a76397f078dcad73e4f878f107f494aaf4274ec8f93506372586d8b708f67b30bace68451ff43f2b685e67bcddccf5c7dab7d0ab188412242efeb16458035e66767dad7f5895773638237d5588684d40efff6a868e11a7b687c9d474c0079ccbe459aec5ab271b395c2dffe5902e64bc38e76381e1438c9537cd890ec86afd080b48b240a112f4dfda6638937b8802e4bf5805c69b818b6a46f4175af99549c5f4330317c1becacdbcb46f88d3ddee608b38967a43356addbd24c881daee48a9a503e773939365ae0a01ebeb1f95f1d7a4715fc862c6f295a347e2abf4dec25d289ea77ca0fa8c28ca34f5e5e818d3f213e9a8d67f9ceb3b0044aeffcdce7e8985ee8b596f5909e30635d59eb5cd5c58df8ab9cc221f1d76dd0374a6ef2445d4c2dada338919a288c5ecd33d0e1e53b1103ad9d3d4b750ef416c7cc8e24adfe6e949de3174a320bf104137eb7b7282a7afe351131bcc4b4e34670d8b2ca614680125dd7cba5e4a2fee1c48cf8532afe0c26c6ab382c6d73abedc701a57a2ac021355203be2b1ea8167654f12b3c4a30454bd69db8e0dbc5be8b3ee9beba46e5b26c1ef977506c65d830494db8e9126bc6abe99b5c909c25ab9d4cd376e16231c425192b8fac4a8694be15f539d0100b00e574166ba22b0df3a2755156a5f93ec6fed50c5f9525650c6e4f8a1687df8874770a819e9c150917195d05e66e78674b67d72e7fb1a98b8fcf6a6ef776bd7e91ef117f4df4c681968048439eb16c45c1ee940458783384af6fdb3625334658099c2d61f232dc11e275dbacf8054144bb019020825f5fcadbbe2652483416af1c3cb2dc33dca2349b489ba47ad0940e973f500575dd8ae89538e055d8ff9aee7a1f56408b68d5642196fcccafa9d0edf6f66825bb8951488c7e8da3400c3f8083d26c21515dd21b05ef63880f07847d5ac52cf3bbd92f7501ed72ed25c0912fc9e479013e2214d3c890845901602b37233a33020f5381e896045475f2e32c26ccc411729a6c3a28da48c3d23f4a4195f0b3fed32e6ef53dc96196e02fba6d100d0fa9c80e72ae84cb669666013c442443c104e981a205cf0c73bebe34dcc075fb15c6a3f30bee720c8890970faccf7c7cffc9a7b1931026ffb92062bab0e2b32774ec88f06e767b2e1d36d7a3122fe93cbed1b02698c0dfe3a0807029ed307202ab7fd98f30d2fa9092fdca741301f4e38ca1756949745478d84358fad8461d2d38152817e9808ae48859c1fb15c24a11e7bd79e22bc72f2fbefdafb608702ef7a930f7330f0ba69a7bdf6090910d33386e7a30399625ba78d2f3c6d3f45b22025d57c958f7d0d812dc0328dd2b3f6ad77f8c3ad83f0c90d4a2da30ed326380dde2fe01025a8c99fe37498d593ad53b6fa957ec367d084cc3ad15906a3935e5dac89850b7ad7b56acfc27006d465b3f716a61d6ece69548d6504a57c37f2eab998cbb1af14739a8bfb92014b1e45dd17d314e8d53f2301f8d4acce9818aca5c8a8ddad247de540a96fcd94caf7b49bbf39c52721426652b48eb21d84cd2a5733e6a7c1913d946f6d325971abea1ab39751a222795f9a106a9bffda65ded3c8a15a12341edae7ef7e4b20e0177ce0ee46229321061f2703c1047a4d66d40ebfbb0b0450f5de488786c5092936376c1475b4816bef0976f362d00abdac3645062901665b3bd11e012aa5fb932fa227edcb1052495da6eda8f4079974628cdf639244219e1b39d02314f5e0672b457940f13df003787cf5e920b20eb8ae5f449f9edd1b61bba0c8b6ecbd9fee51a9cbd78e4341e16715f7808ed750d2b835db82f6d33eec438d6d815903206dca5583784b2b2f2a53f95933e581490aa9990ed3422e7186dc89274e04d14b2fbdd10becd0fca12863ae85cbcdb5e0a7a910445c29f69b78ae1b5ee3952e087b53a6c9fbc4be7e21c0bee110f07dfdf3df24e6e35434a60be0cb7a09b3233f98b35b276cd07ab05e91b1d7c9f3e08834745c5a316bf079849a21e38806b6d8cf07788b099b371e27ff0dcdc081e76ab39040090e1530fc2e06a6022837f1bb6874865f98cefdb0c4325c2dbb409889b859595b41fafe175049e13db1eedcd0ab240c0ae210d44e7c51255e83d8fdce8afa2eb994c361b2318e5afdead27e00df3f92f4af0ac5e09885f1c8e0f21e2173994889cd1862b51afb9aab9c8cdf314eeca085c763d74e60f547d39936016bb95f2d34b5a0070853b828ad8fc4074c3e54bf25f1c413801ccaafe7784bb092a573672314045a9424ee8c6d8b21ff3af89f763cf7d57f5f142bb16c43da33807ffd7ebdb2ec633fd5c54f51584bcee1c4f44e329f3d26d19041d6cac38a901b8f27f86956fe29f2ad64f8c3bdeb7c2be97bce6fb2a50dbfd733a569c004d14d1c175f91cae5b496f5f40f2a84a912ffb15e7e5bf7b43e12322aa7b202effefd70f53a9cd4470c11f69c1dee732c974462c2e65f3813c0b0e94e620b50f41d13d1ea12f23dcd3a4df585a976531d13e445d18fe13b699b8344c660dd73bb3876881e6efbcc1e45303dd63b2ceb238ec6a2b3004bc95fd7728abb299134eb5610ddb8d61e4be335a415b85b7705e711d2c190c103aa9d7d640554438d592c80c817e0d2c680c31290c45392bf6710a3f0e98f5b73a6ca9543fbba383baa28bd8680c0eb583567e5db93ce676dda474d0864d85501858e25f6b5149002f18415325e7da83d3076b66fca5263e726341602789437170e9337657b8bd149f4eb90b5fa4292dd3a998b33b1060c96137e06c66eeb8a1c0a7ed2789547857a7c0337f59c352fa01a786e0f8f13ede269ce253d8e04d47842faff174a6f33fc517411db8c7e0aef9aba66ebaea08b34efcb7c4d1f08a0927badc52ae32c64373be7264f1146a83080077baf54d670f26e1e12df6b1e73d4803f2c99a8a59f9302047f3a74b593cd9509b644cadd2386af6eefdcb86fd7a518593c4ce1036c786d722382fef2522ca1651e9058dc2c5677641c2a4f23536d0aa3fe2bd66d534e46da1a11f4266db76cc6bc7c45fb14cc91a8a0b3786170951fc4791fcf0cdd7d53e36dcda1786cd4bdd296f0db64614ec4e1835d7a51b4831f65b50e1307916d5d3623a04c11d8ed5d31b7d5603c9e46d7b7ce129f1ca9a0d22dbbe2eb87f8862b7a44713c183969158c24111dae501b93d488b92dead754ffc592819fb498318758d927bab615b0ab8be68e5adf0135c0ddb93a6de2c50870d442d577b5fcd43778e9ac0e13f62ae7d506325ffa38fc267d697da72dfb22eb03d4c4bab3a9d904817ce78056633f93138ce773257ed88c5aa16923f2010c39fa4f38b2d529a6b61c9ac058a8e55775ec7e94df885a31bb1c68e8285a602c2260bb18a54402a515f04c1fdd3003da5709e621ec4d546f7c6cc7e2ff8d9fec6ddd214cdc27bf3ce8a699ec58174530ff11cb75df99f4fa95f2c53df1b246b3e41b88bb9fa7e5d5f9e58a0f118433c135ad367a0397c33ace556ae244f2dde84dbff84f36ecfed70e56267150a056f5c3852e179f6c4898f13dbeb94074edf5717479efe81d92aaf0a075f85d9235357040bb34fa430b7ac454caaa2f61fd4118e01483fe6327b6676c7f8d7f8358e70387e5ba5d429549113f959e57e0963409abd0f4c0e547623b624d19009b48754501b58f10916d6e9ea9277b021a3f360e7eb62876cc79183329e68226018c45fe57329c5b591b4f3338892b763680afed01cc08683f4640186a52b23adeacc1f53065c986c228569a94c294fb5de1076fdb1c7cde673440b2cc9a8f8359314ff43554ffd8f31bea9a66daa0dbb7eba65cb4ae6d1f6bcd81c9f8c5034b9ba259c10e09249a157c72fa56da365c6b25f57c3688c17474996b2595dbf5d8cc874625628c21154fd458830bc93dc8a2185a9707b46225aa1f678d4ce54c7412697ee8d9e3df8ecaaa03fd2eaf9f65834a3e74cf3a367a34e7dbcbc5e9f26598ce69d21c184550ad86db306695437c37450adc372027ba3b7930a5a7f2cef384416fabd3333aa221f048e35c821154e5912497e6701c2fe65ecfe49b05c868ff47f83aa63aa8cb4e71b2e0b87ef137b6b4f66d8632fc1f5e1d1e50482cc80a306a6c483b3776145b9081ed2191cb6bd238e626bc6cb1d3ca3e87b0576eb6234031339d3d318cc571d61dd33fc4873960a55e8932282293534971cd6fd47af95624b5015231d226b7caef59bb1e0de98881c55f906d37a721c744703964fdd49bcc5a3c223e307e56f45d493da745c3745683707d44d8565b40675f5c2825fe37b08b1556608e1775dcd06a6c68180f49ab0084a2b3ede92a3a44638128dbbe5159ae56969fd4373d0bb183f1686c143209a363a7c55ea8b53f4243506b085b114d2dc58904ea27d608665d73b02b1b55f7d6d4337f13db25d6c9c970f9921ea0166e2bd896b82f675b59c09b463b6cdafd01a1eeebf5caa18841bb8ada634f263cdb4f2b5e2696188df0731134864feaa38a908210eabd52db12e245176136ca45dafb28621da6132595407c82f20cad72da6a94f6dbfb5f59a5064ab6761ab5bbd5f57aac83a57dabafed853669ea4af159f6cfa6b1cdf18a60ef40c289450f253306c74442dc81a7a643d35ad232e9a96ffed827527b30f5ac64d04081fdff0c5cf6b830409344a2e10a0ff5142db42085485a81a84d4322f22ea23a488badf7b88df47a6712f124ca0ae0101920d1e0019efbbd9a8a539998155db7c537426eaf93242a9da0aeb3c80aefb2c85668714dc663e20f7c87e308e1aac0e048e6f9a9cfef46cc86a3d943d4e3e30916a259cf883bf8f1690887a85a305c8108c0210e0afed8db0dfa1da32e65abc4a7a622f1ae2b08279afd0de248989390bdf96d460cf8e7b27ad80751e11d13e1529d531afeda1899578ffe1d72896df5b0b866b99d867c39186720b3b5b222495faf75b142f1332fe8e6e0c0a1acf398292692cf85509e582ecfef3271cde1e216030f2040175ed194293e359da92c626f6b7bf18bfd55f70338fd37df155695bec2a9cec1f5a367a4819de32e272139ccaea9857935a9fee0c9d028c5338b4ba113cc238c3309d9601587321cced8078617a3f515a2a3550daaf26eecce88ea051ffe876b78980f100e838a2e475bb2e6d0f1a728ea4ae4d204eb721c8f535b330eca62246c59f1fc931a532d3ab22334fe1b0579b5a79477ff419b1c1df6877307b51c80b853686ccdd2f5e24ee343b8cca975d2acc04b43c27e50b62279550d32491d47048f5aa7e336d8122cf8f9ba602461f9769ff27f7629fbb043e2ac48b80dce41f713b1f6fecb65887cf82c81e21430b7bc4c727442cb03d32a3b766dc18995353ae953a1461b020be5ecc6567bff4ad426cdb1674febd0e77f8c9ac47446dbed75192af0e2ad18620fdbae81526f17185b2c99a3c411cab4e9db0095facb092f4fa91c2afb091056a3cdcc4a91ebff4b0471116fcac65901113290287ba085c470a31399b8b850af49cb08f85dfc6a34c8a200128990e5989f9832c41e4eb974810ef68342414235a8db4ad5e128c09c50c950d528fad63f3a16ceb30b5c0b062af3ad31c02c4daf69087a2742fa694b44ede800d08994bf8ab24c3b6b52e54412591feb5b02d8e733578037abf7cd094b17b0dba8c787e0387694a566b9aef4e24836f93b494da3afd2444d42a9549e0d4e90add93b1769ec6a8e392318cedf41c9d9a2878c13ac8580afb12f9767d1339a70c08a6dad244d95233ecbf7adcdd8e2f02f685092ca5c69a7aa9b496c6b6503385ae4e6afd704ff39fe85deb3864f9d64e8051f32c4dc961581ae48cd354a92d0c40f2d874bb9b0b9bf7a5648d14d021b1587805b64ae0ee27f8f1bf0f48b4e204632ca9b4813b18ccad1e6d4777a18fefe15fc75707ad9f4e9674a3f73cf40112775465596ba099867b317bf417fe7f5ebd81ae8b1e700350a5d5e2079bf6e89b101281cfc57c0c7dd487071f40477e923f7621cef9e8a8c299adefdcd03e2712afef8574392df0076b779525bb0d1c0ef9b5c7af2477fe08d45523d3842a4b2db943f7033126c2a7829bacb3d2cfc6497ec91688189e81b7f8742488224ba320ce983ce9480722f2cc5bc42611f00bb6311884f660ccc244788378673532edb05284fd92e83f6f6dab406209032e6af9a33c998677933e32d6fb95fd27408940d7728f9c9c40267ca1d20ce920db5278679dda94d78254079654e3b69324e446dfe98962cea9d6a432993b22f57750a6d0c4becdfb0ab2372918082fe320ad56ee72618209ed0e78f00e6362fb92e4298139bc7e7cacc74611cd69c5a1f432e56575be76d88a2c6f4c9a1c159dae9b64fb756a42b6d911b8e2dd8f1459f02376d78bd6bdb4f1befbbad4dba7663ae4eda2003ea7542000041ed0fe9875a4ed8fd72d60d319c434b2bd3718b4efb83f280752a018bf1240cc28302ede7fa2ff94c6d2e33391623c08e63959ba94b728a8adf53513521022558183a632e24ad82a3904b47b966c2372a8741524ffa82fe408507423d7aa4344dd43db52482d15b4a03b7af7a3328994965fe1808b1bb36ea90cd3c6aa61122e7de954991bca26d89effad544265ecc312553559b18261bd0272ea7834a51d56f5fc9893d7a289ea87c9a1fdfe76bba2af0c971d1d6ca933a73b1eb51116d372c7e62dcf0636cd7eed121f7121d57497eeee7d47294b0876f9bde709ca06c2f6864e7a9711f7501a51717c4a6702b63734635e746f9dee0b8c83d9e2ba256a46938e05a89574c02137502ed648aeeef53213b1014ae5e845d2257dec8bd33807923d65600b3f7c480146cdc1110a8d564a682b8a65a385da6d0b39639990caade4d50059eda802d361bdcf878ad61fdeffe9148c2a67252dafbd93047dfe80ae0ddd6cf2a75ee277cb3dba96007224f3b50f026313a164a43ca5212ba37d088c9fcf01c6e2b4a999904f05790c6f2b392c528bcbabd2b2f2766a5a65a48cb0cdfd1275430a59b6ad635a36ad193da113a85c07127d8bae8cff65a52efbbe17e6c8502df398ae9847b6f7c4aeb16e1517cb740ac3f32ca5d83a3fa8040371ac6b63f0a2551833dced0d90460a6f60f5ba08330d7c97463768b950c9716657fcc0628c58f3f389e301c9cc212cadb6c17ee1219598e458d1b2ef318ff39ed1779a368bd83cd501492a9df3ec91e6f016dae8c839a564e5134b5e5a61f7176ebb3d7267a6ac174a7dcbdcb01ee6b57d5462719f402e836b6a968953f6186a80163e88a82ade44b60f6a18892e7793ef088a2dff6f90ea6c5628f286a2c3f2d63721fbd5fb2fe7e46c99d3d791e10ca5b1d670910e78e46854772c9b0e965aa19c6c4e799e3d7b4613bf8123ff9f8a31debbebdcb3431bdfe41599e98fec0ca29491f2fb6a73696ba35fc306be2f8723edcef23ad48bfb438368bcfaad418329de177be4065e5cb58a0efbf8540dadfc7d74165408b00d23c1051856ed3358d7c7816bcbf87aafc44621ae6167b6491bfc3fea80c66bcc011b5f3e86d63df81cff54250b9744ed18465c5cea5fb5f312e8a6c17983fba25bf0fb91f2eedddb69d4044a2b89499f1228f389fba2792661d13d3d76c7fc3aa4f04ea5339d7f8d6ee4164db434f520525caba80dd69c7d992467d13108f9ff7c87ed0ab178bf886cbe0e923e30d43b496fd94999728c432980bb1f10dd516b33264b1504f6fa5703a051da11e3632a77c100f136fcd5218344ab699e9bbef86959ed66969edc63c4698467e7f32e886dfea7116eebe393370ebd5342fa8f41afa13871fee6c2592f481ade18b692df8c87502c99a64412c53d656ea6404eb1468ad0c9a655488184ea89af3cc44c8a53d980c55fe2732abe5f481e212369d1fe853ac01560cb8795bf554dcc9298336493bd5e29f70d3572f2b9d45c0a8d2e181edb07c49fe7d5b235125c30a812453f146a69707a5edd93864f43af7c152023b646035c7919e67afa253d018b574a33fa2c79cbd3048d80988ccea3ee9e42b1e9e0451572de54406d2272d7a2b3bcf3a35801a4977acfda87d6e7d1d8852043384e4fb823a189a30c7e9ffb84d417eeae8193934e4e1f01f2d221a1c06623481fe4859cf200013366be1715b824d5958a4d92004ddae58767e30e9c4ccdd6410f57793c64865551fa457a8ea3129088b4f0af844ccdddeb35adf139c408a3be94fbad2ef180f08f35c92cfedc49b328bd2f2e879183429e0a878c02dcb336213f6593ed3f9c5d5bb7adb0ceca26c7f6116d9192d297ce204504317fdd69e8096d09cfef95451647ee67a8770336499140209b2e7677cb02839884196c7943e7bc7ca3be98f795c4488b76a00df4a25ac7dc9dc303afe3c534d8f668007dd44c9c22d1c2c1406651548d9da250ee8ce327160bf8f0ac82d8d739fac41ff413988a80bca4949bf29fa0e2a0166280439adc517828c3fa42cde93023e631688c5c163ad6cc8986e4dfac2f0074b9567112561364eaf4158e14f96fe426eb379917bda5b2b3268d97c1e4c74145cbdd9fca32d054a8178acf3e762dce1e840de45bef55d2f0e20c95c6d94fe4e220921a22d11cb9f894d6a0bafe0e4425b247d89929cfa9fe42a0695ef82d6e024df09adcef5d2744f2658d0adf85d8e4ec71e0300b77ba33ded58d0acff43f0eaa857c28bc160f25c6c40ebeb9391ec4a918b5e0f2e28659fd187b5adf18ea7fdcdd48b6e5dbe403788e8037197c685d6ea8b40c8e9490a953e5aebf942002ce4b448b07eb1348868e018c145ee45807a3ae55231d126bda49c9b1b98d8dfa827c77bd9c3a509ef78de9acd717e5606bee9623b55cc07a4565310ec939d73424f6d34ad4622879feee935cefd31403f2b5fcaa339c333e732cb8207f1770623e30d3dd40e0ef4c05268b06cefed4d524804e534e79ff3afc06db813ba50de726b115cf7235399792dc5d450519cc3689d417a9466468f24899f7cb9f60f445870e05abe8ed7bef3066769222a25eba8b37c536bbea24f6d14ca94a1ae9c80fd79e2fed05684ab5665b6378983700d3b111e3662f89a7ab3e957c972eadfda880e7f12d68340a7c9d21a052e636571484090ec201a155a1d91ace3d4b0c09a21b71f5c771ef5fb74d6fb9cb9d2ec5ef8c6393d4e2ffd35d49333aa710a2707f2fd2aa65c2e8af080f8c1c5d1d9ed1e732d80f0943c3954ff7753e6eefffc6a206708b62cbbe7cc15c1d4461e7e50f7e0fccfcf994bb1ffc7c6735ef697270bd67e215490cef4d75ab89de74acbfd3267bc8da006634d7e5407fddb2fdb90323ac8de4a306d995b78658272fac8dc1632f4212c828df5 +MD = c16f349a856d4f9146bd281fd2b1502087f75ef0e2260015e6e3201f22eedbadb0dc40ed3c9e99de9ec5f761478492ae + +Len = 81016 +Msg = b789d22f2024c25aed11387b3e4761dcc1068e5c6dba87717322226971b114f5e93506e7f3b6ec3b2ea19254fc267789efdedfe07eb12419fdf74defccdde19ace0afe981c83a5adfbcc58290c51e769c30487a01a4624d8870bf8332b395d774c52dfc9055396b93cdcb37fd590588425bfad25aa4330b3f9a74cbef78f2e934c53d40315ee6666d917cae0bfad73e3fe5879f5946eefb43b13711799a5fcf6b75702cdb41bbebdbbc6c6d3326edf8d3417149a428f0ae235978ec6774370a973a494af4aa446c4c830cee1969d448ab144a69c1a702845d07bcb54fb3331b36a82b0313f4fa585e99f0b9053004ce35b27568186d8f2e6f20651488c3ce81c823b7fdcfce584080759a46bd1609d9f1c084dd3ed8e0fcc8481482a91253deda5162837e72d8a5308a7c2f77984dfc6db2eb319b75b28ff6f34d88374b7d72dba5ad3cb69f16070d6d18dbeb136bb6180e2afdc4b07e588996727d99cba5fe4a950aa1eebf7ad67571f2c47e23cd877f26c69a3135aed6eec6260b771f67c1a5a40d2bad3081a3e75d9c81a755fe0101b140af6761ce9b94f6ca9a25b32d7d8b47176278aec4fff164688c0d0677834e222ba5ddc148072a9cf2a24c2381825a12dbceb796bf3b224af95c05d1c4aec2fdda061ad0b5ba0e4d10dc40ecee60a09bacc90074dae5d865c16a28346fe3fea8ee58952c9224be7bb770ba7bde98ed261cf9e9b592a0a249534efa9ac3c36fc7db05e31167c7b9ad5927ff6cccab9e56aed9b9f580cc0e6a2172e3917abd84bf22a67b3ba1139e56686aa61c531932a1d4d117a13ff88b4cae6e79a4ff32dc0357b2c407c8a8cb0b87b14516ec52589c21887944fa9697657caa2341cbd3d438dca3541258f7de31198432f912f76eba0758655d7b26b148feae86f46b111bd443f0b1c7dc71366ba05c161f4178e36008d952572c39676bb6f40b39476b014a004353b4cdb5621fbeb1651602376542a883c6ce784f38522803368cfb52232ea3e3b045a724efd1b72c8659cfe352b668d0392ff9c89270e4648f6bf1570fd6918a6e16f3504e064c16107724ed3a5fcc473ff82b46045c5e807c52c3fa15f67b8fc3952cc7fb41c01699ea8bc59a93356131b387381c8908ff83ddedabd3f2a46c874ccdec75f8c59669207efce1e556b6b4fe882f396b763a4c79c8fcd84fbeb8ff9a513e5cbfcf2e24a57903aeea82a04015c88be99828b92c93006d71822cedb32a515e0deb3f364306046a60075bc659b5a2eebb739304aad60e6e6e2e71933869389c082fb8575abe9ba193c03491683ab1c81da237955d9f5d7ffca92f1205d391a8e9e1ad09c23bc939b8a9cf8a02317f988e9898f3ab7b7832cb86a8029205d6e511959fb61009f7a34d286f18ae1656d09ccb39981ad6d8f7494b8eed635c82d11dd002f4cab5b17edfc0a5d5c275f220a6be9c0b325e1a6e046c463af054200d6d15793e68ab811cdf070649f5ccbbd96ae732c5786d96e76b7d6063df8938fa9dda650b6067d11dc97002ddae772e9b27d9804f5381e8f40cd36ff0777828191e9348d448874be23d702e195321c4c68c0a27115a378b246712c7795e8d87e97dd4a73197663c1a999bda759a4908ebf5fd79a402fae7f8f8cff9670b45d30c2a1302abc3913c177c67aa8aca59858c04280a8fd448a9d2304f8831f44d93c1a1e2ed9b53a4c679344810b199dfa527151e4c2d54ad2b50ac35f672aff144da73a8ca88de0d55b07fd1af925f47f23dc754d114fa94f6e4caf7c691a4cd50972de91c0cb927844dbd78d9a5a13ef73099401bcf3c9c971f2b296b27695e61882f38649f7bafbca15bc21153f6012ecfe9749ec4912086504b3f669c6410d23df5fb36a9abf2796bf931f935c44b034c5676dc9daedd3f38899e5b793b813d2920c604c3b09c450e044cf3b3a2890f366eab57a2dc0f3c3884ea9c46361c0cca2e0d51762009aa081b6793660727bd2e70a6928caf4317c0bb98ab7c1a6dbba17c559f2970c702ca9d365ab568c397852aed0fa3af253c61ac2d2b832ee2e43faa236056395109f6082dbc3a5dc928faebe33190421214bbc51c7f140a27f10525eb2794d03409faeab22a6d4cc4ebc0421daacb0e865b0f94eb387722897c827e31676debec9d49c36837b6bc234a95bc10ddcc7b1e5a0d9a1dca550e93e148118aa239c2e73e8310c466af3280dfebb8514d1d0e36ac165338b71634d3b9c69e5b5a911bb05807613b39df365a1622d5536b253e5bcbba4ea071332bd5807e6328130c5ce494771341139f3e1b87eb719bda7d821a3379faf9ab4469f5bfe01e754df3fcd05e22c58aa697b041afa64b9efdae8fee7dd5c6b8a7c255c0d28c1ed77de072202fcaf65c45314368e7d391e15700ae44f54e5042092595d362e2e2a3256a533083b0045a81f45dfdeaf402e7694c73ba5454264a41f6a099eb75087cc6fa16adf4729de9ef69767d03a80d25c6ca66caf5779715e4adec70c6c30ec8f50842e4ec9321aed0091362dc301f30d202fdd36339415953c3f014af4d542c122d6e61e6921dfdf64bbb4bcf5cc77d2d9eaf701809a36931c141e1ef9476fab0c1dfc17ce0017ba4b9d4a4775e848f3bf6022dae794be9e13e68651208f5d9537e3d701a1d6a9c7dcc05e94ee5d4cb8f918c787108994ff493ca0ab13b4f2c6caafdfa489ac7d4e40ab5a6d06346d69b09a4cd1a281a0fee59ed6f37abe1888ee0a7cc82f897b979ee6a4986574914d0b6f1b804685cae210948ff3fcb6b621cb7b16343a758be91ffaa6ddb425a2ad331e9a5ca39bfaf5f1a7347142a3b4da888a15b15379958eeb6ec6069b4f87d14f2f332c62ce187db15e2b36f48df9fb4ebfe107229b81cc29ca6ed9c1fb2801882b4dba2a230cc37742dd0ab97c6fcc44a3e2fe4ee537ec01970520cf316d8506994fcca4a4be0f6cdab2b43979fd9593bd815d805f9f359c5bf3a16cf73ea4f001a32b775817a9b7ae13fe1d8b8b9d629524ee5f10a2f122a19f25415783a86eebb09f4c47fdd8824666ae0dbb022ddab4357794002666bbee7373f65824d7aae0def0cb7a59e5f22b148db010488d23a11ac1c63714de8dccd6553202097ac96795e59bf8141831e48663af92460564e43d949ebe559fc3c230919d5e1bd8f6093d4765c914b967f923f8b149e4ddc50604b8c49ccff18359eaf0e073403b574d3eded0f64310bbf252135f3e0b5c6f8ed9f4dfd96c1ef5176a3aa34a61e914bb01728586886556587d7e6178a1cb8a042311977e136d438719378de9672b56dbeccb2b81caff60b30bff5eff8f723df149d89691ac25922e5fae475a3849453668b06bf0f3270089645fffdcbe99b1dcb50e811d1e8f0d96a56979a5be8b0853deebeddaea255e64f065eb1615880e4dce7e032753f3d946512ecad0df39c8bab44258479741a3cb16dbcab57b867bccfcefc2b9329921c6cdc6e2e5859aacf4547e553fe2c3f747418746c2dadd20e2a72866daa3c80b9f7ff96aeb97f7dd8824678bcbb3f2815fd633054319d3261637f298938ec9bf58d18e0aebfd9882fe8ec4a3f2f2176a9b3ea5af4320b1b5f1141500ebdbe566792a4f69ec9fc5c4dff85f44bd877ad983e1a6edc7d7bff4faa75945ea7361288af10230f665c6cbb2ccfe17325a63f7a027fd67d926440cb956860f983c882c149070061137e2beff716ac35c541aec797974c480f58a25b68a6308fe1fa19b9f6e619446fd63c54f4f6bf1405be6df963dd1acc52cd7657aacb9d62304f39cb1f39d829c9f8f0a28cec849e85811f880ddddc9aeb374f78c2250210fd4c758d487eb771c05afb215564b725b34e161bebf60c04672a9017456f092cb7565f78f92141bcd170ae89b4fba15a1d59f3fd84d223c9251bdacbbae61d05ed115a06a7ce117b7beead24421ded9c32592bd57edeae39c39fa1fe8946a84d0cf1f7beead1713e2e0959897347f67c80b0400c209815d6b10a683836fd5562a56cab1a28e81b6576654631cf16566b86e3b33a108b05307c00aff14a768ed7350606a0f85e6a91d396f5b5cbe577f9b38807c7d523d6d792f6ebc24a4ecf2b3a427cdbbfb0d943c3f2ea7de041e5a7a501b03dc4ff052c84719e13acd280cf23a68033059bf1dbd62d9702a2c829e5c9e54f1496793abfcee5597df8ce6e439fa6a33f605c4efa789b7ddc99c4bf44a0a736e4902ec1f1e0e68069a48ec228fcc77869369e4b0029c111742be41034b7cbfa16688c557348e9b55f36a036dfd98d52491ebe709d6822f451df92c7467dc81b32761e4fa495636ad7258f36d8a46cd3478f594a12c255990e3b4d3eea61202cc14f511b1624e8135a07b84cb3ebea7dfceeeb4210b6cd7201b59ff1a11068712b6ac1624895ec416043b7e2f21e8ab4c1d3e0f307c3ff01c4d4f789fafa15bb094efbafac56e46772701a8403cac21a4ec4c6d778686eeac02fe062789c9c5cc3724c4dc1f6650818f33cba796f3500ec482969d312917fac0ce7157a5670c8f25b5fd719d2e2a5bc63baf0c37a381b32c47514b8511b42b122780d90d647920e8082d624aae1c2f547f1c1528a6fcbaac0368298b240c6a7d71fd55c9a654a708871c562bcf6e22bf69da6d70e2094ccc1fa1de4a4b69dd8b14ae72df17e54e0b9891f64a77675e915fb0ba1741f0911501c513ca6f11acc3785bd9599e733b7ba555eaae8f500b51cb68a526aaf8b00e129c6f14764d00ad05ce323e224896df1531d95f0071508814c8d5a4046ad240baed9b2f4a6501d224ce24978daa88c050ea6b66b01256bda299f399398e1e3162823e23d1a1d6b93b22576bc6e239a5be4b49ca897b4578dda2a60e30acbd6b702101f9f549a8ebb49374c2b537d016c71b1b9372f444422dad9709d10cd6764e938cb89ca49eeef5e923a542f3759bd32188c952c47ba1fa806d9504f692d8629f8668b0fbe14c68ec0b1a555c52bd4a2639751334131face5d1b7b1b1191b160f98121896988c7363d52cd6bc8c0394f2d69f9c8c3444aba16b79c08692c6d1aa69bdbcbdec37801828e0ad594ef6194d064dd51405975f7fe2e219bd2562fa37a27184b805d4f6d1ad40c27cbe1c41ff7189a613afa03146dffaa59efc76fb7fea3658ce0aeb3d570c53fd6c040075cfc05af7d359e787bd09ca4a703c8a3b4aea1520492305bd72ec21477349271b879bc9b09a2cf5caae0959f17d1027225f4915c46f7aa9dde9f5b386d7b51b9deda9dcb9b1505163df86b0830b9ed41888b03f2c89345f0886d010a4e16f6361ca939dfa60ec83b81829d5e6630e19858bc79941de7cafa30f254087d9a087d1e500145cee291433239ad204cd897ed131352ee9b87822174d9b4c19076f0f53089948c5a52e8b3bc780afc390378c6442a3030d5d503fcc08db3b40b2058451f906411ecb247037cb83720df63fcaa786b82296162d8e2a088d15e624896e3281ee0750a9324c91f84c25c945c9c000c51d926a2b37989a1458e3f2a324535e68faa3428781a5b01683cfdfc6fff7d8c6795b73e495e482f6e4ac4c78febd3d76d11cdbad3806fcedd07936c107f698527586978970fb4b74da78dceb3e3337731b7a056280f4dd44d92ab87e0945a631b919c061ef635e57e24f8a430d3eb42682c5a7ef81f9bbe449ea4c442e6d6c2bec1fd5b53ba62166a33a3eca92651c58ac06a89c629cfe96c6c1da5d9df55007b69dbecd7b4bfe6bc640e0c6f630d7d14145f2b14c660e20f8b84b0f7f65bc8fc19d63f1d8db5c2cf26a588060274d59ea886c7666dd544a89d685a3fc461789b226ac697adda373d0bf8e40f9d3e6b84fd9fe33d98b36de1e2471613b1fc9be3441817c88d93a0608476a4ee8bb0bb5173f902fccf81da262a8f79065783af6edf5ca742a588bad410ad5f15667221aeac30ab368aa7260fa6c0079a1d9d2f9854a6f978ae1fd322311b5726b6095ad726b5407d42b9bde9178726518cbf98ea548582ecdfcf85c5863f4194e2dca3754415773390302e5cdd2379af2d5177ff5f86d801e31e4f28508782e28562b7f3b4df93fbfb80d3c56843561568094921c6197d7a3092abd55092bf920641e4fcd9623b28dd426add59656016c53d890c38bbc79840b30856d6df3c25fde0d6db224be15ccdfb4fef20e80c45dd64b40917fc5afeac05f11783cbad00d4c5fa293ffb0b0a35f1ff854f69df05191556c2f449bc1fdae1f2b1c7e676c51367cb61830e3cb3bdece63a45594ce6f0d5fda44e224f7e45fd999013ce2de5325cc71e8be3daebce32b0789344da6e0d1cf5379624a99c85bf324d07e136e3ca1b79bacb1a8a14df79dabac9ab0c0cc650f9f76cbf4eed028d794314ae2643430a5fb0b110beb16a18c19b48fa5635a528586e2250a3f2550ebb1cbaa3707625cfe5aaee74dd5406960174a1c14d8b21f9bd0657973d4ee5b994347a5faa0efac2a803c3a58a7f3d7826e1647e568fd54b844a8ce19f554cf48114c43137702a891355e1313a9567458e6bf1a0058637a43ac532ce3ea7f365fe4838d6ad4c4d99b41bc79662292c74b46ee9d4df30b18a6ce0e9bb9fa96174884948ae7ff5dc6b16bfd74395cce58c4584ad7b5801eb648727f24836fc1fb6ab92643733ff4f8397cca0c749d33b029e27cd01e46c3dc916251ce298f2a692d4be1bef4deb1f59d3dca4a002ee956e3ad2b90728e2313e9652aa294a3f6e9f9016f055422bd474373a635c35717d25b81002097a065e2b842b3a6aaf2500336a475207954407595e905d6a65fe6adf825a38777c4b3d266c293e454c65e404cfc9e154dbb6108f966903391907d6e2163bbcdf842326a5bad72647b654827a4d18feeb6a14987d9b1ef566d30059d4001f0fb04610c3200cbfa2d05183741a4ebf3b39e4c207a9c93c9472088a5c3bcc8ec17826b69b2bbe3d146dc275314b512706aec050d6aaad4c60c94e08667fd80542c59a67073f5bf9fbae6dac32a400dae1d881438de6b3c8fafaf80cf116bf1d33f735b4afc17250d8e0d79b00baba556d359c1ca5e4792cc385bafa9496ee20f5ab7d11ed587dec2cc374b413d5fa210954954eb72a6a024ad7fb63c986e1db0840d521587afb2677c4e999f4ac5cc836a3f14c2a3f02c401803ddaf85d3685fc65d245799f668a4a439abf1ba44ea585a244b78788dffc880ce6c2a99058cc4278f900b93c3ca204ee0c9601343c6376dde3f347ae5e163eecaabd75a6c5186af8cde5afe809e84812b3b14df2c26c6ac56381f2f609ab969dee2dc52707e4d663a566b6094ad7746024834a566d3b01e7480612167f173f9f25861097addc3558240674467bfa2a44d3ae8ee59959bcb215e21d860af39a6ef568f06f0348e834ce3752f619cada3f4575a416d3330bc431987dbb59cb279bb248dd13c4c56f88188beabea0b3f4bdfe8af260a7716f8c3fabdb2cc8087793f0a84f2c4edc4bd0777693f6ad500a5f73412259827f5878a49e8e50f2360af63509cf1f2de7fd9c8f89f7449c29ab82285a9c77f0c77727f4e33fce44de321103dfc572de93054ab5388d0ef9ab28c49219c9327ee42c08950c480b5c5bbd92c1acdacdcd47f3797cf4bddc425f32a55511412f995fe799299c3f9e9548edfa02f36766968138976b51123312b02992c5d39ca5bc854a6816f59ede8c2053955c4603f3b6d95522f4d01299c738ae1b88d3245b651eb4e3e1baee61ad7c7f13221738ebaabac9aaadf44776ec6310bdf29280b73f66d79b0e4e96be75a7d0f1e8e96ec4eea016acfb3019510ec9f1e8b7842a2f8807f2fc1143205b715ce990352f1e05ff13cc98611610ce8ad7d22a3c3a994afb6cb7958f2b33af2ce6399c8b6adf2558904c0b7408c6260d173200f528469fe62f95e5dc59195004ee3165502f2aa987a01564a89a922df1f281eb76dfca74f4ab1e7b9d6f79b495df719927ee791908cdc932734e0d1cc604527835c39d809379a1b526d0bd636c247a96771b52ea6863d7f36895bf9915c71405b66628394f25c0211d1f5cd2d477acebc2583094032cb2360cf3f2195db557327d59f315840a0a4de4cde0897b2389079e07aabc8562f868b50b7d240a599c7cfef1a69bdec0e0aa224ee10ddcc2bf886ebc29ba4bb11b0a052e893fa81e4453bfdf8b32bbc4d3b43a24c6c655df90dcb8e82613e2917aa881efdec2b39def3534664970a7a063fab0e21a4992d4ad83010e386fc68ec7b29fc1c653b9330db0014849ec2ece01fc0b09441e003c75f9ebb0c91483f362b6d336e879358820528ad804fbbdb84e26ccfcecaa1a917acfbd5250a89779ec33b0d1ad999507b77b45a81335d0e999096b5f6c746e5e3c731a7587a26d8cb4a7ad048e4b642c43b8d63afd0114fc83226a835c03680d3b62679cb68892a66c814c5222e52f70559991031b13d64b9ce03f1b33ed9428e83c493a65c19351646f034cd41d638e5d7c2a9305b4b16136f17d897c897f2bd36f13c12de3ec184caf66574a5a8cb0cbfef75d358a12d7e1a49a40ae7d85a07d597bd37776095575f0e9f3de03278231908bd432ea971a4d9819f33220440156a9d5e3caee77a380a202c507cdb09d2ebf4c9a768c9aa2ab3a70f3b01836d8efceb67490c3c38cfd51452d6010a44c03f9de1288b6b9fbbb1a43d490cbda91b9469208818c597c3c7d25af7f529f3961cea4dee21f619fdd95e7186cc1bbb6439ffd11f5aeb5fbde8438cdae29fdcfb8bc35420b2d2e09835bef319c8036d10f395c1365a165764414d2fa84fd4c898921040e6c466bc35cdac0a2b88de85c8ca1339f6a1af4861d9d98d88c5307e153cb95769e11c757ca711ffe49515cc33c7618186b61cfa5bb9d0eca3cb1bc8198ea7e2d1905bd214cdd31a6b760e0afaf167e10f21c735fbe7189521e9fd6c4c92c028465a8c9ca647dca3e9b33307c4510ea1b96b16c1e96d9bd029a73e33574fed73efc5159bd91b12e285d5eb8a3aed3c08ab1b7365cc533fe4e38e46e5e2cd1709f45b5f9756535f1f68639d5d04cfda5f0eb945ea4c9fee1b78257d4a941524337ea4d258c4f7aaa1b9e5b346c9ffd1ee09cdf419125b8fbb10f44c29162efe39b527d6a5cc0ddbb1a1e4940e318307fdc5e0e8b8c68e0a0dd284194c0f208b63c06cd448169fd99748e7a87de66566d46a79888f10414759e75c4d7928f4b5f9c7fb320749b48e9bd576575a8dadd5bb1f213e68967b2de77705517909b16242f45d5aab0d55e1057119096fd1613bf90c5f72090344a6fea9058c14595f7c876d19b2fc0c89ba1c43592682578b82d75abb8a3bfda49ae7a5e66511c107ea105ab7a4c1eb58012974bd165cca32919d31bdefc62ca4efeb942f463ae8af9425e4bf97c455ca9e742bce41c5d05f5093b8ee09723a4b8e509e6996557762620e33baf3cbf0e87a45911210841119a70018d54007cca25f5eea1bbc2b15253c126e301f9f64b97be4ce13e96337687e2e78fbfd4c8daf4a5fa1cd22846b020a7bbda785085a458a9809593528e754bd6301e6a60a227c3899ea082f282000b48f49a98ccd7a9590ab6a6a5d9ccbe64ce8db20a50936110f55ee524bdedd2722973abd9cb86bb073631ad0c7878b2513052d3160116f74b9dbd436de6f4a803ddab86c1d8fd69e1d094113ddb1cf1afb011f9f41ea75af1c73c53950a40e12eba2ea3c771b626874e406b906e13ecbea26dbf4ae5bf1ca2265e9e50a43d2e61535f8b71324b815623e924ca9e18042c9ba86b7112e8bcbb2f867c172143d02a4dc0b6557727fadce5d0d5430773e8781064b71d129eabcb3766855f1e1f8707edf4bcdaccc60399f8a9e57026c20a0f85250a95615b7a40f25132af070aa388d86df777bfb03c0bf0d6ddf8787cd9718e6bde708b9998cad4e91c7d58afc60b719efeb2ac80f4a152ea3732792ee74c809bbb44fdf397b753809b409f796f2e6dfa5b223f82de08935689c4a532a3def047296934d3e794f2da47af57f1ff501212753cc5604880369e3e058942afc771f09173ccc518f23738aa000ea4072f0279d568fa93d4c6b143dcab91b95b847a2a8bfb2241ac3d953e2ae91ffa0709b393044d3b87f34a97c9ddfd5b0147a47d579155d1d401f5915d42d1287e8f7ea9f07a3ff4c7347a6e92ca9151d4f495f00a1a1a67f6cab8b018aa4ea4bbf10c5a04cfe7d2dc08d48a512afdf29ed2d776a4bebf311456e585f299b8110cec1148624dab4230f0e78f776799c9b972e775c9d7cad9c7470a676dc9a3fa1bc14bf97b9c10cf608d31f268090b53cf455471ebfdb3de8a0b95f8fc92a8cc53211ae1c333aed6d52e3237b5a7b90d4ada9d0f8da9009bd725269f218d2d043d8bfc95cbacebf5296466e3e29c2972b6932f83216247be39242aee7f21b73e45526f9a17403ea6b7b05e6b718ee3108d1f9a8139a1efa21a79114b67f8cdd70524e24318c64d681aa27752d4c86c5348c05c9e48f06ed41594785a6e6ad76af764033552876ec5bcab402eaf012bd78435f41ee1c65be09526de8005006a7686a030f5571c392c384b574342a1a809a9e0dfa766ac1d442370b240de420d665d59f9e798ed2317f8031b554222776624419dac7a1a597b4b3272312cb826d6c601dca09a72b32586530ac9202c0079ade8acb28e8966f266ccbcc5a2cb4d246b3847a4ce657fb16dcba4135ef6e9b081369b4e0671ec4610afe072c303f6fbb75dc968b71ddf6818cd85c8713b89a768cbd7c3847c4fe2e36c9bccffeaaaa924e2d050e70458a601e91e5ce96266caaf18e0d78b01085539832d38cc07ded95e880b11d0c181e7d39eec453a040796ce9e54ee8c98bc298d74435ab9b419f8ae8dc81006cdc1c9e86f5e25e578f2a861cc927cfbbbc1bc79b04c874b97d273af94a5dfeba1ceb8cacb02536e69ae5be33428077ad2cf9a68e7c752e42b9ef6dc1d12d611b5df30f5427762573e913ded6584126c861c5ff56b325235e7d5eeae879d96fb9299cee2661be7127051dacac14532534e5e5989bb1be993352dc7b174a4a71bc074ef3c966e363297569f15e7d9cbc1840c339067f29d9ecbfd1e6f64d66ae4c8071e4e63ecf43a2c16174939b05329cf8c5ac3e244f2baf4da5f42c8916708f1b6d8a24f26859b9726cfff47776d1ea9755b8eca817d6a482c16d620643fdb060aaad2c8898ec970ff1582918d8df27a5da24b8146824f5e98b193fcdd39fd5d79115a50b454663205a48d98711a57ea8bcb9496f2c5bc7076cc06ce5b09b27098889388059ad462e0e97acca0b6b152a623f48c14ac44566cd299056c03ccd7df8d38df1bb6a68c0750d4cebac7914b2367e5c12aaa7948d141d5429edc9efbb4ab94b6553c5f05ef7725ef1de16a4c99f3d2e6b344cdf04ab6460651d89b74ce4041be509050690fc8d8de5888bedf5054666d3d0fa4c54f8c65b123ac54bb7307ca478c574d4dfec277ece922116c1d05fab5366fb0304650bed392bc6d38494e88f266f587fd22f08dcb4e31d47b26951a5f2de952d9c58fabfe1d8d1783c7a1183f7effa32f22df84da065caaa5236e3fdb82011f2a43b5c79122931616649c029f42da213c54fbf7998ff6f6428a0df5bad14b779a575f9c3d4062cb88a69bb292412984ad5fb240aa79953a0bc100b66daa3ceeb276e994330570ca23042ca2a90842300aa9af1a5d21cbf8497ec31c746b3a06fb08e04a42d041749e13cb7d43e6c8c5dca95ecf4236efb38409d1726f92d732eca3d018cd4f596d524bf49d038b31c88bf52de9fa1784fe53f8c8629fcfa9050fce35aa42c13d06e823347c6863f18aa113b8e4e542203b31d20457b56003ffccee8d5933d440f3a82007a5d2efacbea46b7c6a845555ec961c01ec20f29c75ac9b43b010f719964ac8eaa3e3acb7c71e82d4c557bf7a95093d6d7a7305c729374af5398ab83b81288459e11b19972667f07e9fefef12d6f3cc939d1c08186cf5842e7fd1860b16d9f8e207d9c4ef6f291ac654bd72c2f4fe3010ce9c77f4c35fbd3bddb5ef2cf9c78cff62a02d1503da88488e30d8ffa1710e618964e400ceee7cc9fd8861f59c79b71e9c1eb0ac86e4bf71a6fa801d5f04be024815bab0e21a493539c96d1961891ddc1ea60e1a6ae036de296b16c07021d57fa51f9a899f7b892a1d099efcfb5e17a464c673e3124564ea9012fb7d9740db360af2d1ff698ad2f531c94614dc613af40900b09b2f9ce0237572aca936fa45c1f4301f86e2b0bd42f27910f5574b0e6765d512a7154f3f15441ab8d7d1a68baffb47c1b47d958e8ff9a97e132e63f86b15c4389b65e4c84c867b8e8de9ee335c7aba671c9c91ed3891cafbf2a4648f7b935e80fc93e61215a705cc300229d3641cf88e03e24e4fc9656e09187b953a0568f48a2f11dba32d4059c0629cf1d2333c92951ec1133cdedf0323f8f69e9eb50126c2b7823e01dfccd8299a2cdeb66664092ad1cb992ad5891adb18b7e913f6e675b93a4775a4c9b711564b3438f65a2ddc9da174389049de15acfc220d40479361dc0be42b02578985d4fa359918aae48d8c222d8a03b858a40827e7539a33a26bb9c0dab6b125deb6343bc397a3c5428c64b88a060b8d83167b005a8488276e03c0edbdb127910112e264408d2e25a259c5f8fc250e45e81d842a1df890af80ca8fd6efa2dc45ab3c6e284f11fe689e861e58167f927de1f9a21974285a387510853102f445a0379345dc41aebafa9191dc5a4b6e1ea22b6b53332fbc3b6ea5763f706a2e0a3d30a7f814cabbda58260d9e741d89293f0ec3262b92fcba9eac7c1d19b7c8807920faf3463cd1e30db639c339ff4948c11691895730926e64f492ac916e5c5ee072fcd6052a795b87ecd6e9108336d3b4dd66fb4a9ae5bd3e184a7c7be041ec0fb13e0ec6263aaa5314457e9c2bda70a6bdb40a6a449f2da67213fb3dd021be53663f0c0d826e55fbd70602316b9c960351f9255a9007462abc7fb75b90644c680c606c4ff1bcf4eeafb90274c4f5ca4714b6da803fb68d2731fe1f59a3922c9a1e428e01e67efdb7f8af0ddaca9e740e806d987f863569488d1fc1ccac33c57606661fc7c35cd6c46c8862d7eecf29b62f9dfdad260c60fb28451d090cb1ad986f4b60062abf26b055a5c000943061da7cc8689d71941abb8e0eafa337945b5db3531d418f1e53e85eb7a3c96d4aa2e7e26d77d50b74ed0648fce83fcf6445527d2d960e6302e4f8e21e6cb6dc76636b0afd89c846176e67c360551336a9f1f3272b68d14905604e8a4aa93d645c29d061093cfbd404055c980984e20fddf7dc4bed141e938e4c75a1dce7e197647cb45f110ff417c348613128e600ad58bd6a45e3165ae5160ffad3458737d817c2938f956125a3cdadf2297ef713b1d2b919bf9dee2ac025313a99052594b8ee91da6d16df24da8bbc9bdb5c368f9fb48187137e19e2874446d16dac31accc7171056215d8565ea5eadae14132d8d9769d2eec241836dcebb74bcb9b49d45528d6b11902eb5e9274bf1bb5de6a83f1a1627d93f0678c239409063d62cca0157d3949fc6e968208a0bffad3845c156acd77ffc5939646edd5c29d2d8338947ff72f5c86c96885338253d4b4c37601c7435421db6e131bae196a7d268d1c25e71f1f4542a3bfccb5c21155f42c46dd79bb7d805fe06c6ee6e77732b2e0f5d8fd6d8fb0aa7e2accd1c88eeafc1f4d0d048e6aa7cdab00b52ab86f3a5d1f4422256b071b38c9280a4a0e12f0572d0714fa4481e4af2e8e82dc14b9007fa895a5f1800be178054609711b44227fd5f389bd7679d36edb545c9d74eb21b50d58b8d455049fe2c2f34ed978a8edd09aa0efe08cb900973200a6c1618c2a77ce0bef604297c30372be4ef59e97bf13eb7d9be60fa5d8b2e301f5fa630267425b2dce07e11be744a5058e5805c712946908324067e6e84c3ed6ceaae1e484af454cb94db9278940da779173368d84fc63df27822df29bcdd5fda54566b8ff191cd755a4234105627372dcc9b97182969c41002dea3f8fb228f4fe7c89e6230a325c079db7eef8341085d4de0709980d42fc309605442083a84b4e9293f2bd0d264963bcff87de30223f2e3297bc41bb286f5d7d0796eacce46f2a3a4d6519ac893dee6462a223d138fd2d49e41ffc4a9cf8db2579be6af86deef5d5eec3c532aba80c3679d475a1b54e7686949b341611473e31d4111d90953955f820853c6a3df631a5bd85203c37b17e9af1b495b84 +MD = 4b10df4fbdbcd0ab46f3132c2285a26e1d9c74b1b7565526f02de3799383ee3e183c6d11b9a500beda827873039c4523 + +Len = 81808 +Msg = f8c0fef4aca77c1e89454323a7a348f8baef10e08c21c22fabdf80545e9df716de08351ec3a5bbb6bdb5d4d0845d254a120384700ffb0ec38d6373f9f54b9544411a52d76c2c9da727c0d46ece124df69ac43394188290f2dae6aa126c99939089bcfc288f864a77312eec066c0beb84bcfac2538f007147fa30cdaaabcf1a831fb7db1715f9e9b142c6c39f4690257ddf6cdcb65cbbd847550983c69a3551a369d298afe4cea3dac151024144e823686ae327c368fcee7c533974702113617bd0d7dbf5e54d9f7c189850f44e5d0ecdc7274b84990ada6d5d8749af28b07190bd8c4bf300bd061eae6056c14c350e345d00f101d82fc5a2d9bcaa8c9755aa6c96bb91b01e68ff49eb74bbaf26b94a269436c1410eb1d7a431a03e0d564a3496c42a55342594b384379b28c7c431eb2ad490624c21d937facbfbae3d4dd73696b0a23e88ff8a4957fa9c45100ee518c985d77d2afbef0e2c1195a1216544d8f5c1eaf4b39292ea4a9c40b992ed1cfa8a0fd3b9e4823b83c36936c0c384d8443a5ecc20bdc8f3bee6854f2d554720b9f5db4cbf80a004bf463da5b32a93dc9fedf10e6aaf87f7ecb21e91486206377c924f0a36093c94ea3df4ab215e7b981496e1797990b9e49d37cdcdb3c010aa6bead4d4c7843d312b30f610b3682254c8be96d5f6684503f8fbfbcd15774fc1b084d3741afb8d24aaa8ab9c104f7258e6ec78ea883f139c268811571790a9c370e8b2b0d67513b5902d7b16e01b52eb94a9ef7fd81e0bf74e667534611208fad69fdb51a3fbb72b0545ce48cdd4a957fa7c635e8d0c155b991b912c9a0553ac0730b41f2b9461d0307a0cf87d8361e242ed3c4d501219122f31cc066a7172222e23a7e11348f9ea3a539def983061d59184e215c937ff6237308d8c7b5f4ca471011a61061f67c24a58e9f5c7e1917812cabd7e9f83af94d99e3e8472d6cb79f8517765aa2293a0891259d2b2a0d912ea46354f7bfe11ef3f0546b7fadfd6ebec9b25b6a75866cb1f08534d007421ed4481b35204b10ebd8eec0dedb981554075688c1ca6cac68d33c2402f5966514f46019d4de3a38c44f1dcfbed57c431c1ba3e145e4f7e9c2cedc98940677c518118505d09bfdc74ce8e5c78817db050b6e4a82546497ed1f176a49448cfc009cbe3f6594e4165afa18df4ec6fd34e9b671a2b279a3dd24b24f6dbcb0f3c3a6274cf79fbe311452405172cbf8000a5fa1b85518223d280f40d94f7955c54f142c60363aa92d684ba44548d597cadbd561c4da19ea9b192b3f4797f59f9bfed9307a83bcd21382b5ba56b9e222b819f95b099a3e4f4810f6f20cdfb81ac26363b80e58ace59e141ee6f84e783552552a12091e0bacbeb0012dab7f4743e31d52479e3d7140276ce5aebc9f1e2c140de60b45fdf89f7976c836a5ff19a7787d13439c9aa07e4a2db89616043a8387b4cbcb32828ba412c5baa18ee7a5b1ed132550ac08b0fc60b6e621871663e827ea39c671744b36e53d66f2c8c171ffdb6006e32f00394725992cd5a25e00a67f0ebe71651bade49b3e3baed60514edadf4466fa8099feae354cb26da33b76af792d87090112a299f58d73a493af507ef30627aa99d6b54347a6f99a14fee921c27063884dd56625c0d982994cba8db19b4c988a624121f936a78b29a0b2cb8673bc63da5d8a94b6bdd1cf14b4f86e3a7f20a1e20462ab97aa574e626ede83a634196f495ab99314937c435df3f359e346892af9a6c1b9e74dbf2b8da70a7b49ab906f1b6cebcb07ebe2c4bb3033b77299901b1871e7b5afc4e60af172bf1a3783284b99baa6a4576d0c3b78943ef1b01f3b5c878d5b05b8bad5d4d7f883c83762eaeb0b6d7586cbc00191da469e6d658194d68e21a513cad5926f8761e1ed13f1dc38b9acddd92d8dc9ac2a6edb955966a36f75554e45adbd27c549d45ef191d70818eaa06805437b6d76af367bd053776f108352dd05281b9bbd6579843d7abc7674e8719d72d633f4d6b3c408851d5c00a20140daba0497f73e2279da37954a2d35f9460488ad5c66b37c400a1e7dbc5e0b3747cdcb09d84232cafce848ac273541664726b0929fccf753d307023c3f92356d8d3fa2ff878480a32937d885fb9682779e8a504ba42d8980a58999228ea306eb3db8a6ae4bc610f6294e50ea6f58df7370b9d2a11291514bdd174bf6519968f87dbe3fdecd0fca0a24b516a12a843fa4e8399c5c920037fca33a80822f7c42de75dbd556b567962941f59472d5228c502b941844cb8323da2178a08cd1557be34f96d0dfaad65c99a89531271838adc06451ac206621fd2e7c5c13dddf2bfd5030779941546504a3821d54869ad08a3cb9f9c2ba0ae3ad40df6b413d0007af6d420796445c1b768ff716675904f10b0b5213c1d860cf1b58702f9373dcf07981adcd30af6a019aa52e07d166fda41877582711430ff030be572f6f491cee43d69952cf4c251d582d5078fa762ef099c6f3be1ac3c04bd2b9bdf33e856809f5b22d1cdce13679996e84f14a503fdd76414a5f43201beaea93ca0469f0674a785e91b5bd37441d43b1f3fb29bed77397308692f621c7d46192a5e95652c2b8b222eea5dc16f80f403ec41dff869ebbe4dbcedf9b8f6d111dff772a6f73215c8c456c72a046fa59765d20e034713ebc46894bcf9832b4aa082267501b1a2a3cee1132a6708ef103cf562fcb30475c7ea38425e956d245a609429ee2c1118862c1cc69c8b6b78613327018665bd0a30ae51283b53d37c70d07a84368cb1ee1d6ebbf3861d98a609386f404391ed3b867f27c8dbcb628e3e7ec9d7f6aa00ade9e5632c8f841cc288ab52a1acddf1a469db40a6d85276f413d9f677a71a89c26c4e86c401556488501a65a83a9076bf3b511034899f9d28816084e5b044b9e62508bb7c9417fc520ff41cc6655ff8f67b6f3b1497e951a617b0f9c4bacf1d6394826598b02270aa08c6ec8ec5a2e4e4ba8415a95be610f73739c9771f0020e54b6a19bade3b3e0aeb015953d3ffb6f4794e34757e1c77867069789f658e60c5aa1e4c558698c0ff2741e7c808cd0bc0281c0c0b56d2e1ee43ce8b8016c0599f412d61fb31e1a5f13df71c5deca14fb2577c20cd7ecfeca931e776dbbb5c87cca1061f1e789c598bafaf7b87e802ef5577ed075e6e59e421bb32cef4bba957f83a36c821b32f6818ecc969c89368872419fd2410ae1784e2604f088da03d568c7d3e01b78a213e3385d37bb2674893a8be1b1b96a67f3b85917a97e9019f10040a9a304266086865fb5c35b7ec39914dc4d53252fff77475ef6411a94834f0f942c9e854cf4b532acdd20c5b8aa20c9dce9a1cd80316cc2dda99ea40fc9595d6b65b9e612e70aafc6dc3841fdb2862234bf83f886863bf27d36aa64287476b16e5add6ea1c0ebc457baf116756134e48cd7e2f069854a9fe7a74ba1080b0dd44415f0662107c23b047f358e474290da8b37a4fb50b70290c3046ba5d616888f969edb16ba45f6da7734ebef9cda03cbdae9b36263a2cb8fb853f1b6bb1e4ea80cfb87c69200ef6a58e1fb829bb3f67e21f5f56dccd00e626e9ec51ddfaac7e74d36dbbed4c315b24e8c4c8f6d54cfbc07615463b0c931d28eeccf2269425b160257be45a613d07c023fc85e3945f84d3437b78e3a139ea7c046f70c826e72fbd2641aa5307a888e1c015636280fd7f9517f05348f38bba9abb3252551b774606667d6249b7fa5b143dbde616239d688063f289edac0f2a0f83b41b3ffa4c90b6567da0b0fab8fad1fd349250e4b5bc1fa8107144131aa534ee633ffb3bed9c4786d0ea2b384ae4a59f47dcb54cdd06dd64c8addec154a8b56bde351968b0d5547805a30b0946b509943639a5d489c5441a9994304f33c10b8c739f1d095cb8579a8a6ff2e632c8686cae3dc5144273ee49e1c8cb154e7aa1b0c1e2688647c1bb7edda5554775ab5c990e6d75847d9f36636fb011abfb32127957839e67e89e0a858de7b4a5a5ea50a9d52d598db1a3a71761eea68bc083c85693172136d589cf5f09ab939949e1ef0fa111c3c8752ddaa686e8fc2d34ec4dd902f1937b9531645bef65649ab84e823ae09f46ad4e9a2bb13d137518ded82d6135c7679e8e11841c8db9ca12977ca4cc124a74a4847524c7f302c3d714d3b19f99ed10284696891182fd16a96de8e133c487c066dd4b504b574b4ad08d7ba4e4adf71fa1555cfdcb6dc3ecb7823fa1f265fbac3cbf9928cbc8318c9d8f1c61c0f069f88210c15caa8c82bed59add7198750aaace81cb28b9c47a0bb6b04262b4ffba3d432f60204f8dddff7c0e4eca8670394e64ea7deaa5ea793a84979a32412a6c507cf7b5e32ae01a41236300375cf60c09c8500dc91098a3bbbf8b605af60ef4d498103f0fcd01ec06642f9e227c64f75f4139174e7a5dade190225147342be82c1cef68108681b7c1a6ca7526755b8fc1682c070553b7ec5edef2d9719bffbad9841bcd9017de020573ca21bdd83839d2b5af79782d15e385d45355848e08e16f55fbdc08d1855f4443b5305305898a05b219db01772627e918ea71da9ac5f0501b262fe544062400af020d809dcdf4dcd611984bb2372e1b251eaafe42b56c2e4c1115afffdef4bd0e3725b0f1841ecaaa1d5db17ee76a7e81766d6a0655c94c514339e3657e45ebf9db257eb13a4c4196a387cd2da56195a678359856357c5cc343190a05729c1ffa5469544d5f21e4343aa3195effa7f31c9a9023c2c319b23a871f9e604a6bcb78398dac367114250b493c008364a2194c540976dc8d05feff85da0b06744970fc00ef110d0eb7867455cf2d2b62f46ace4b0e1c0401e585bad5c4fa586e99930e312a1d2186608b07f6b8f9c788f38a1ad61a8db9b01d08c4ed5cc6d6b7e0b42740bb1b1486c3954e9295f0d82543d9aa9bcb469e1630dad6332e0b11eec356cfc61ea5767e4557b0cfe29cede649ebf5e27cc101a2b58e474da5319a5195fd7027b14697db5a24c6e53b78694a9a339560bba784f41f9590a35ed4c0aefd1ab0ec3f79293c969f0998ecfdeaa09933019d1444a888d3836acab76f35555d20fa8a05a78af07f18f15193a7e2a6eb8cb2ddf332ecbf65da0e3a4b5b58c32ac2b597a06c3dc57844f685ac00d1bbf58331c9f4ecb2267afc13688733bb970a528a8bac41c1fa1685b1cbb283486e4bc906e775fca94c577c12dbf782ce3f6062e1ec65a2b82cde6d9b9a23c9a72c42c09a9d12cd229f9fec850b18c3113ac1764410790970cc446f2c579c2e8e749efc657147f8ceaeb89fd28c777f2507a1ff39ce53008c56cd0cdcaa783c5ee5a4ff0ffa81ea0de8363883c670016a2486803b4c90028b6aecc934f9447da8ddf92af2af5d1b50eaad39214faf14611fe38bb1319ca9ce673816bdda8d6cecec1012a5f6362738046204339e91029a684d843403f540f5da1387efb4bf74ab9e6e48a265a97843e4093c2329b266868c290c4c3a16727242139f331e574f6553783f607423a8d508174388777faaa60a1a76625a9ca8c42dcccf307de1379aa9c25978b831139bcf00bccc1e7569894076750edbd47e7bfb939a6069e9d7cc0fe14953985e52d8c749fa7675100d90edd16aba347a4e0a49fc733b58dd9a6a04396179ab07d14c8f779f0011fc116d60cfd9ecfaeaa1ef878bfc39c1491a05155f445346da3947660e2d018b861f7f27b6452fa5a214ac32b697d44998b11db1a764892221d55a097206f3384a8236c1192eeabb3d10b0ea00d8a348690a2477c63483939b4004d837bf4daeb5e434cb8d19b6b21810ae0bff311f44168fb9c62056cb318303d860e3d8795554afe98576781c10cfbef4170633b0d34dbc3e2b3a2dd862959b3521fac52ed2a35fd5ad59dc735dc0561399ba43006c5b1a2215983c33dd2f70bb99f127a69d2e7e8991cbb964ff96808d128ff17675eb142623bf0455d7dd1edc374b52a92b628665e13091598cbec8d10ffbc18b966a548ac41308b7091b0ff7987de88ee3cc01fb0a2cf6d97bb5898ff08235d8345535f08538dbefe765cece2c0d4bc07cd76bc97b154c5d42f76d0a42c7b0b4d62832d7d594d068d939d5a0607e1ef65d213e51b28e146d8900cde09510e4da027ff5a133bb98aa7523bf2ee454b498eb1604145efbe172a47e3693660224902fb8e8fd2e11973d31afd5ba1605bf10cd422791cef336253bac31a31420027fe46f774c334b5e89a54ac3d2742591067a12434a80e884cd953739904ddf010197103b0ed1ad4128266104289d18dcd25822d1bf23504ff4679bd8db71b392cdde27aec597cc01915b9f110cef73e51d0de04d6014df0a32193679f50e325a2d10224cf0d43bf24dbb5174ffe9bb6c3ef1c720cde3c945ff30b3a76d91cfa9b7d39c80213551a5b5bc24aa822a53b4c0ba63f658fec385c4348febb59b0013e6af0302c739c19e71d4951c241fc1614abe3338b1e4324c299b27b15d98682b41f8d22f633ff03f0a9b0f547638a8f42573b1523922b9fb87db1782d6086c524247a67075d65229d8861fedc9036edff9816afd8f48bf36678adbfaaf69811b7021dc709f8b8bc1741c2342bd1e87a72f4dcc74f4b4a66f5110e1635a3a4b09440e009a10ddf1a865c3d5edc2d887cc4f5f526339f52418dd13c46767092e8e5662af779a3c2841161394697adff3c1c23ca942af98acc553fa01714644a02cffd625739c24941e0d91eb203583302a305c1d9dc60da4e76e3a050b888b5457c8cf2f289725c9b1c4c536bc8360d16802343bcf3dc2a111845a5bb09e2b9fb149b41900fbce3d8ed4042398f4f75bfdc05b9061475625b61ee181eb07d3f6abeb2b7f976a7c6417a3f52e300ac5446df34897fe9346b757c655f42545e30dca35abcf4643ced1eecd0eb33c25490f3b0371def1a202ba78f32e4ef9e8f7297eb1ab84a828240b76a7c75ef7e4f130e7896db1e4f418b38c3de0dec3517efe4bd7b13c37781a8531dc958e0dba6c3df5eda2dd42fa073723ff04403c3fe8d0a41043527eb410b3c2d41fdce82608aae8b8a7ad86244cc9b2cf0f0faed4c3653a13d873e88cb53b8c16cca811a854fc2272e29f391367cfcb166789a5d0ad10502ae6fd0f326661001d128c04c1efa64594ea4ed647c6dddf7db46abbb4046698fe056a4d75a2e8c16f88054c03172dc4973528e8220858625d7c1f5aef47dc76d5aa583da709173286938061dc9a17220249b9d9429ae3e64e0513fdf305d67c7a4c235a46f790f5eadba9c0beb6e6e06eae7e441a0cf4edc805e53f6fbd090c3471782de5fcda6e14b6cde34a1c117224c9e29328cd0feb43e50f79a5ebe8b89ca0a3230487581d9cbb8963df282b69dd228350ef5989615a290f4735f0da142b5050c413358e86db6058ad1e799939e04eed07ee4115e263584122a09a61716916fd9ba276022c592ba839686eff64e6b56c12a5f229e107e9518676171382ce4b061422d74790aea414934d96a27d58ec9d2b971b39dfa062bd0d171564bad39306c824c7c33644301a454e8f36d5af5b0c9d41fada40d53af0011403e97c01556c2228c6199fa27625c9eb973120529716f2273f6fb70ef8771cfd60f658e028c2ac9f509f3f51dcc38b957d05cffb1768c4c7477ea4c621debb23cb3fd3f873a6e1f905d897caea7024ec7f494701525e8f92a18b9c932d836627910a7fa2dc654ce6445a2b8605b800412c50180dee84ad29ec2af0ee91f19889510abe77a99a57b79aa88d1be507b84412ded5593267c7ed75b15440e5c5dcc999a502ff81b28d0d87281ee4defba755c139e1abc4644a6ddcc33922af6cad58c95e0fa2fb4a7758887d637979e0780695e5df5e2b26bf2b9fe5121c455284c76eba16fa6cde81291cfcfd523c6284d72f8720e8cd1b90972d8b71964e13fd85f83dcb7e5ccb54efc34b3f079d0e6837ec8258e420bf5941041ada19302d7225045d8f9741bd4d1d09dccaf222209ca96b6be9d8cc8e93a9c237ae1d720b7d15019df5edc200d4415f1603ba52659ccc1aa8462f3705ba41d656702bba3a88e68e7370ea4452a4fd41ab8bc8a439e2e078cc006fe6b147a9befbc2cc4f372019f97293054f1f19914ff1c595ae09f9b7044bbb03622dc631fa9c1867c78ddd1fd11fded748b2ccbdd88d33a9c6725b905bbba8921fb7a07af7bbd396a9ab1a78a3dfb6c8d7da18c379d2788d83ff830cdd708b9495fb80f564dfa6c16c2b52a4f046bd6262e19852b265e6b96d0e0a9d081ec6736b75c231907be480956b203534c9452c8065b5ec00bc10a5f82a5cc17a2adbc6e692fea029152f5cac070d99effbf09fa6d31beff34988ebabd0e40a92094df7bdff90d18d3fe9ae166b7553903342244cb614dee8a2b1e30e9e4ae8fe5e9f8e57f823363b50960d7b24f1f2b423bc62e88b4b498f3c1e3486eefbdcfd7f43132b39105ec20bd6e330affde7ca21c1d410cf29b0258a4058ab4f71673e0fcb0ece2f02bbafa60ed7dd8903a350d1e4e04c0e3a936a21aab7e24c46082e74b9d9a73654cd52d3b043e83cbdd5d6a8a82000a4e873bb76cfdad241d4405d32721c5d0b910469f96dcfc73756cfca1a8e0bb53fddd1981e2249e1dcc6a038ed964f460b421143ab99c421059921b99c091bf04b652d8e7c348d978977984ffa88daf8b1d2447e4eb6d95c23ef5c03c1abc9483428e81d05990e79b471a910edec47fb9bec4e88775777ff1eb3df671fe8ac03a693a1c26ea254ff0a4f430a3c233ea525da7fe0a9fe187052913c220b323cd8ff2feafd0bf2f99dd75b06ca69bff7abec3759155b1d43666c01f2e3182ae43eca78144b620d54ecc84f54affb253b766b8d7aa50f377127c7808418db353a8b84e6ce2c0543ff524976cd4974f5528b003744fe3adf3a5b01976031a8e3c865bb06692d6a596164d77bc1154b92d55056ef68bf6266f77686a137dc15a8e643d95185be0590239afec8e091f3a04c6cebf026371a7140e0d3484b66b6174cbc6c52945c6b9aae7b2bd8ac5e118020471bf43e13c7809f4083f74b6fee914425e074258700db7a7beb4574c809c4e9658365e0c3fe177b1bf538986643b96516d240b9dc69d50023b979ea6e60e1104e9ecfeec632a86cb9c386b2d839f23805be52b1bb1b09e7f912f06dcf9b672d78ea8c98a8e9a5dcc06b5c3b3455ce358900f4bda1790c9a6284438f5a3db9a96ae3467eda97a253c6594392190bcfd60746d12e3e283f8ff689edbf9cac7b0c9b056811d9d1205a1209b747e4e0599206fc6293df8d25313ba0498f158c0ddf8fed7bf2350aa2685a1931dd26680e121eae137f043c50369843f17e4340f49acff7ec806ac8ab06f4f43db26c075fbea4b87e505a9a330892f18ffda46fc1b6c1b1545ce98facae892755781442c0f04fc80db8314b601fc2454f9db76ce7cc1ba62dd84fb419c77d2ef39ebdaec46f56394c0726b449f49cabeacf0accf9332442f392fbfa84fa4777a286c6affc747ea8b3ddb969632f8881dc120d0458947214200d7cb770bf7e9decc0ddcabbb81f82cf9c57cf4e192c838df74ca798588ba63db8407f6f7f991e3ced518394a2cf4409d3807a5d49ef1d8aff282b3b07e755c723f5b6c3c31d551d6cd06f19bcf488fd03c1ef334a46bc5d8a4e13b31b0bbf46c0faf2301271eef8bfb8f1ad7f25be13bdaa924292c9dc70392cd5831a6f5f272fdeb616f64d586966999fd251e95fe85199181dabff1a6d8c32f53d8e9891f2b10f76fae6f60de9e1f0de3aed95eae5702bc5270e4ce29fe3ff0744d00e1434050bb95e5d029bf4c23d4129aae1eb8599b13df12249c1a1e0ef603b973632658c5201a3d1096f1487fd4d310223de532ee7e6fe906c43fdf392b4843cb798f1c780c48ddb6113b393bf76d38bf23fd8b03e64c1d12ac60eac6768b148f8a4733706865ed4a0167c85d242a3b0c39c80be031bcd5d0bd47e6c0be135347fd1747b51dba9755ce3b9cef43504191e50d5b8f490839c95fbb7c2ced29297c3cc5fd50128f015edf805ef83b2871d79096221814787284fb835414ea15beb4ae19ff482e2c53ed9efdb581f6faf465a32909817c53a889f768157f9d1f397abbddf5a55bd8b68a727c4a915b0ef2c3848fb8d468e30261bd326876ee8fc353cbd7867080dc52bec3c3c43052ab927a9d90d619bf6ea993b3a9f400c5ac83c946d05bb084804e10fa9ccc66c31afc1155f30b566b3dc5a7439462250abfa26395911c6d510cd2097dcd0a3c96a459101382019553987d26d4bd59eda51047aa1edf70afcec8082fb51e25b9b38fd10041035ddd5fc6f997cdea82617ee79b244a85ff7fe3fc160d0a59c6e603238b68463fca377711628298e485887e8cc65b814972e478ef2428e54494c96caab0d08afeeea983bfe06f9c73096b8b46efd72cf571e775ea5b0aaca9386dd76a67c07507713e6b199ae7415eb6108e5f3e1eb14fa38fc235e23ac94e59d72dacd9c16f24fcfb1767b971ef6f3581701ddcba7a20b1e44818e240a2fba01154b82d5ae01b37ea70f164960e6c2ec617c9f133ed2f42eeeddb83a5a17ab42236d68c1430b5c9125cfec4dd061e48e56daaa40f7446ffb69ac5ecf02c923f12ba4e1e76c7ba5b7bc4d801ce404d2ce8590a1ed8762b9043381f46a9ad0ae6e9c7670a080df2942e91c542f122c182d6c22f87155ba79c9dad31b8588bab53b0476b79526b251d32a90eafcf1541f1b89262064f8a82cbcde3436b862e3d2e6f21a092dd471a9d8ff6fb71ef82972195b0ebc30d6d84c7dac09d87bafe881e2c3d4f7e300a9abd4e5fd3b0d9cf89bb750412e7d76b7535cc2e87337d6353ccf183bf64d31d6d2576cbe0931666e06761761f9a35ec1cc0ac14489756c568e0c5db3a6d4fe65b7c0f2468432dad63cc5fee5903b058420e815929dccd8c8d01b12d06c12bcf2c6a2251b4e8a60edc937a540a4bcf18afc753e7722a6a208bd7bb616c87ef3fa799b53a0ca90aef1163b79078991b922b942aa56ba8b6e9290bee5fb4e8249e95aed3c7b7aee0bacce5208aeb161b2f7e1d0f7b5b7f385031454f0f260b5153be5481e0ff20b0d6d3c1bc2badea57576f0909518cd678bb692ce8590a19fec8ea31c96d2a2703abee9e9359053c5773c800210f44d6ff939b69c026a739b364e1edb25681ea5fa1e724aefd3a34a4e94fac5e9ecca754418da4df5c4694f98f6a3144834c924f2085fc140095fcc523cdb2c8e46c70002b08844ee52f5157b14fa588dcd34658908fcecd485eb9428709bd67ca6b5a89bbd3b114a7aa99563256f0854a5d2f0459ce41e2bfdd96a47fcd734438138c7958b8d4398cff947c7b48ba44b33474dae30afe5a4c59b97172df7c6617aa2e57697d95c67b756954f2ecadcb019e3f62970aad3dd61c4a34c80881d54d796aac58eb9bc25b554163000c6f241ae4b525db98f594476c7272e8102a9ac4c866ff8cca8f3516e743330d6ea857e84e00aa187a7e66869258b53cbf1ebc62df4ad86de218279373984b82db016a51234879b779f1bb7bd626842bdd064311053fbf63fadfa1ba416733c51b21673fadb41b1e5df69b0e7f01681d318938b8836d3dd6dc8baa7399d97440f6b25599326d17b7ee340f27d713e87a8450a23fa1fbd92e4ec54ba6c216955a34593d47fb9bf5e9f4541eae24848cab9e02898da7111cd319358b3b05451e7a9cc0263050643e1b36fdd18baf7cdc164748f58cddd98d2e0582721aaa8e970af88f183e78f379b77dd82fa6c022612447caef238b78b4a5d955082cf91a89710e6e1c58bd6e2e24918d40e79e9ea23d652f7e3af81919a15f55565739117c17a603386665fee6ca3ac30c37931927ca6a20abba6de2458b5d2b6384b49bf6648af97651b9ca271140229c7ce5bb79311f447d8932fbbfc99c7e379cb0de81c081f6deff01fb7c616a54f7a0ddab1fdc4944fc908f8d0fc5e4f7db857605a49352a2775985b86a2281fe2589c312a131b3c730b7ccc0bee5fc3e56294e36e845c6a749478c2a7bbc4ecb2f21df17889a247622e730bb5393aefab06e7f99d33ea5aa5cb26078369796601c4e78e35b7e63f9d90604a75636c0d3f23e5358efe6b756b98047cb231b2468f4fad89da24539f75dfd90ab4f35fb7323801098c4a6c350679b8a4bcbb1bf89bf0c456ee6566e18b7b51cf0c7fa277f4b1cff84d8e493436ee9711fb5bf2e6b866c087ead1bca05ee15f09e46ec0ca272f96841b609edd5d754437069af3ab7510269f482fb15660a0454dc52737182a10193fae37e9aaea9c34a6570e7ab1526b6aff8ea5e16e2146c8fd275f720c7e01bc7d5e8aa6277ec1dcc2751d1492c0f7024b46fac96221334eaa936e0df1a352f4efa4ef40cd8a84c12dd94d3dba513180e4d984e5dce0f44ad891d977723aa266e929dc66278e63764b0c2572b273a96b6eeedaa338d10842099b382b08946e670c55b872a00aec609c862c4ff5b8dd264bdf729e0071fdc8a027f0a51f411589cba129e2d1706e14b4cfc8220e913b460e23d332be5433435eb0a97240e1464399a49753366f870706519f95678d525f1864831ddcf8574677dda92ef7c56f3918c897304958b5bc13a409168b0d90b60d19e89be6ceb8469e079617be9dfebeab95900674bc78a86f4f9b2203b2950f6eac9a59665804c833b6f6e90fbb8368d4941842530b5e607baccc444becddaf8fa51eb2d6149b4fcb64220f55ae8bac263c96706ed5c558bb5422f9de4cb93b128bcc54b0950a51e7b7cde74af7761d02f7a12d22ac5c05c0ce25bf3522d61689d949ab7059c052fafa412d3a26e1101d6dbeb518ef610c0e834b00eb3fb2e648060d23afc35be787d4323dbdad4b49b80755b4bc2f92b0071c197b5ad3be1eefaa9d59c9724b6410be0795400b131e754cecb876ed6fb64ce1076b2e8f7624e33f60aa57d70d7d281037c06bb0e702d7b70a1ce3993673328aab6cb0d3699cc52cfdb1c56210772083594b9b4f259b51de347e8cb3a56b7a615c0c9c4016eb080bcafcbcc40306ac8fc29349365d4c660ad239dcdd2b23671dbfb73b45fc941e446ef7885d33903e8e3a340ff6fc9a96f589fb5e76462f9b083ce93865892c8a7f401ec29e50a82906f6aa5a01920a7706c21f7c0f74e488c96a3efe2f4b18df04f4eef617b8b32ea2ae62b1f6ac1068c6f132c01935e6b2d9be1516e3c0ed8e8de3e49d59fa45a1b9b7f99246b940eeaebdc1c51407aa9ba1aef7fd53791f1b6293ac12c583d414e4a9eb956228209b367e48f59078a4b5c9c3741bded231f84b8a8200eaf3e30a9c0a9515e99713d0e6c934dc1ef76993aa82061cf67aaac7714f12e25aa8f6f54840a2ae3d84af32481511d300126db7dc612a5b2ac0fdeb9c47eb316541846781e270c8ee5f6731c2e86c94e4482594c7e75d70ec43bfe7250b6778cb2c2fd3d176abf07ca5c051ffb9a17c4c0735bd059b2bd8db81553c94100412dce73dbcaf63a0af58f63f15571f5d03a7ddf2830de2f20d58f8427e71dc6dba1af14294843feb6013af57ee517ffbc5784b009959655c78e5172c0f46f6f0b915d8e30de87208bd2d5f9f6f87521a2c4dccc4627078c7c6107c66717bc639aa5e1c735b54807511167569fb514c14b298d1d270dbb3d05f5b86864788e09508442a983f4111bd065f9f6c2457b49802ca089f3703ace2bf46c3fff406ccbf4d7881b61c467c4d07792c0a6cf321f07781cfaf4770aa9b6032b358097df105045bb04164dd46a18ee3a9c957cc2ada8b30957704bb5346eccfe312ea46e412a77e44eebb6df757173f972d574b2592d866f88b013c3d91bf7ec1c5390a1c44b140be02828114da3aed82aafde8a8d5c985774fcf8baff842cfedc358200027bc536a215caf05a7646dead6be2d3b0ff92c8059c22240d72123b5a1ca3146381326f7cf9c50605b2e414e151aa142adc1bcb22d7b8886dad51ab7e521b64502702bd561e40dbb41e2f80afa95bd562bcdc67b3f6e36f86fd9256311e11782f33de2918ca64f5d083d02cffba209fc2667ca4a141ca60c02a7d4559c7add9696e6db9aa4659dec2a96e20bacd1ff8b1a4a48ad20096e383fbb97fdf96190e67a05877f4da461ef158b263c62a806b973cfc222f7b6e803739ef0cacd37a9f9091466bdfcd533bc45843fc0d196c7dddf72b73a0fa7bc044acc6f5a7c6fb154b08e09c5169aabfa570cbf676e20bb8e99dda850ec4e42a131ce741b7b6c1f702cfce1233f47032fb6aef56e8cc84a324f6b0615f22d2470a51f9f8c6edf7cd1cacb7d56eb7d01a2d0c59264d2000c6f6c9560e7d5c6d9d9212a523bbb1c320016843eee8faf001a51fb16e8c27a6aac8e073944ebadcb61429 +MD = f22ba6107688aeb25c2f2465d8fac70a67acc7c104b2ec614c281869db51aada00df0eb51ba6a25ad7efb72744d35cdf + +Len = 82600 +Msg = e4277302ef90e1fd71ee5a1abf54742caf534d64fbca13c9e7ffcae224ef49b5f3e386f68e441478c3b0eae7e24d66b9d95e92629e14a5c7cda6cdf693a42b14ca881f96658ec7b50fc5c21b0f663ae36f6521c05d47ba7cd1335ca5704b7383b13dc74c3e14019b9d556b1f0f47f790b89283e8010b5bcf3bcfff57858f27e9ef2a0580df81ca14b4876b5aaa97a5aafd0b3f40520a8fa852a13f7498155130cd786198117b2a089d834c33a7ff4d1886f8dd3217e95eef5fd2a3647288f83f934f63fd9caa2a5da1729514d026f5c29b82e5251a53d08caa89b48fdb8e25fe89d6941748b8d1fc067ccf64ebb5a89084d1e08121eeee687beff85e9acfdf55f6367b4edd4a28cd14c8818ac1536b6a880c56adf562bf691a2cf93779f52e2c2496a10b220b35b8157f33f01aa94838f15bcd135e584b78ce673f833ea51a6b591f8cb4e0a002a64fc86efdbe5e46e205e7cf1a23789b7ee1c850abb289acfadef9c6b3dfb4977d0bccb819741b6d500dd8e32a0e69b6619978b6159d49ebc1fb4bd76ee7edfa2791b29cac0588c66b505692abe5d4a40b3f9ff92bc78de0a9f73d454fc0f3358a29a39f1e3a4c58191888620571606e621a649f54f7fc91981cf99abc316f50901bc74bd8d9102c43ab96dda17ab61b5074f032f7f73e0877b0a45d1f04095120ae452740aa7b48d252a98be5c87db3bc936b3a7e8dfc4d2ffc6917dfff6842212c46bbbf7736b6ac55e9f33a225e3f8dc0fc3d5082de66a6486e4f64eb352a7ddbf190be06e87ebbfc7d9d095101c6ad43cbc5d59d8b5dc6dcdb8d168f17121b046f2da3203aa6e58f8d11b81e0d500364015975a8ac3a76ffd95a5db5b701e3eee71ad78dd438145543d8b14e2be6776bc6829869e8039dfa903ca123bcffbde382e0c3155d3b2f97c5795aac028ef19f41c6a6aae8c2251527bd4aa2cf1591296806ce807eb81e9d3b7c1dff3b52594a9bb00731537ef598c665c0fa98494709c0145f95deb6c9afce6a610e7d3a97b2fbc523c6d240f5cb97bb6bf3bea5c7cbb293e01d263d1815a5c98da2714d941f8a8f63330d0f0df6bf47b455ea31f9b7680ab8e1fd56f316ea240b83be9336db70952d3fabf32560699101e7c3f4c61507014fa60c0742fcc20042790d14662dd45feab155f42552bb22bb72f2f6142cba000d37fa5aed0d57e79a4c06d90d5cde760352b21bf514dd814bbe1e3fcd45a7905a5b7057dc92d1607bc350e911b1b861deea6b6f7eeef8361793f0d8d7a8f6389ed91605f7d258f44da8944c5c7487a8e54127f8a62834ca89b910c81c9dd081417a936c2717122978c1790bd4ed76d47f1e8fbf5609b8c408f72517826c5df2ab06909452a72a8a64d7a82d6363aa6c134a4acb77daadacfb17d7cdf35cc4134445b48661cbc69c7ab1c8baf0204ef80b8e0125efe43a0bccdfd0f356b62e6c75fea8493dcb0fe9201982bb626a8800ceb05cd3a86c8867e218b59192c3c286a4fb13e5ccef2cf8bfd57e37a38a800dc47802df88bdbf4ba58a31ad91c8a9e83b029e63f87f4551c0ae63369ac860a655b09c50791e063c7dfcea513a100a1aa0dcf1caa8c2847d896cdac02f6b4d54e91ed12f62d685c4d237888475e20ea53d51b322c4010f0384d78ade4abd719ee88c4a832a2e656a0c04b44f2a85dc1078288c7333840e6b18b61c97d304f40cbac0af54bb6eceb6932916b841429ee3bb2b26c6df93aa3eacd337f4b289fe26c782a7abfcdee731d06e55caa36179a76d202622af760a02aaf484fbd094b575789cda8fd5c5d962299d198a362a97e3f5d037908b74584279e2aab6136c448033d4f1082e6dcbd2077c0c02e3e4201fbd03ff175bd7b9838165522d645bd1cf61f4941eef1ce607d3d5d43993d93ce32c8026bf07e5574f2a442467aca785eb6bc26ada011b528bf36e19372c4f11b8aa11559078e75a2ddc49c76cd199875bb7071c434ab236e6d10f8405978fca259f7c34939424eaa6ff3ae444bd7900a7af8a5161b328ba9ed382bcaabde18db3738a6acf44e62d41fbe022f8568f1758ba15b23d24c7083d638e6a2e858c82e88f03a04c71734e8638032a8e8622f5f53f6ee7de86d5454be8fa369ad6dad34f59af7d13011573fd1f6ba311337cc106a85e974dbf9b9c4eca8fc7f59a11a56d3a56aa2bde11c52f16df368647e3a4145cad6a90b96133d07015c647b87a23cc9bbfce9ceeb26ba386298bf7a9a0c6a6c3230ab15a6f32584454da98185d72f3e2b3926f1b3f8de1d80f496b41fb4e4445881cb78c0cc26fad13acf1a202bd6a79fa9eab4bff5572725a19ebf73b64764aa34bab36810b9b131ce4593eb02abac65c9958683be9ddbed2a27eb3aa32c53a3d3c9440173467de3529d9d4b1e16a33a12b7f593c71aa223e8d2c5d8eddb87d1e9a7a91136558772723784c4b0b022690fd2706471662086781fddd3090d87b0e0b6613c0c8f844b97b3e8ec7d00a09f2b75857a7ff8cd71627fa1bd871ab9dd5375ead6582ceaeb5d933826d570b438f011a34a256b0f711272a00cea8bb493ac86d4749be621ee1e4601184c98d3c2f817685824056d020289672595e90e8076398cab5a23dfa0745cc21564d165c9ae273328de707ca0dd2445ac2bbb0e302b2e91cf156e6abeda47f9b290c300b97ca1a230c734a4d9fce3ea152e6a5a0f45d67264503e59a5ca78268462e62b1f0e27241460ca8c19dc48c2d4e08f789a40c1ad0f9d1c32e1bf9dc6ef5da34b66bd1837285d8a88ed05b34e801482c05dc660b0354e707cef44095977d382f82d13f559f0f02d21c003c40b9b2cfce7b621341a59f6e39e4ad25b6ca2871da7de9d6f1b12eb0aed3f40fb787a8c46555ffbcc49f238de2d70f4f46ef3cadbe107d3b5e8e270bc51c767ba23c2c5077fa7b099dda256d890fe2674ded021361a15319a420453a9e5d4c2808bf869b8ed29ea1d33df035b6f4ee14d4aec2cc4d9a3516cc4dcf65c1ff3fbff1f8fecc3145302d6eafcb0ef1eefaffe119c4ff0a61e9dadcff0cb6b76b17e866cfdc0ce9bbf854771afd20c365d0cf7f164fd51e60370edf1d455307089c4a6d2c67823c9cbfbff565cf92b3c1362db38dac7613fde95ada8fc364393d968e11f7e857b4504d15f078898d4a6af5c18766240971a2c565d73dcb12d674cc5b5718a7b2d93f6aff713b73380ec8d5320289fdb7beb695d8dd0fa8846514075a4977ecbc32d2de257e96d4bc89439d292cdf7fa784a11f5af5eda0e46e850f33eefdff9c476f702e2271f6404344174d0e4ef4024aca2c9426bffd57792eac8d4e90277ba080eac362b41fedc3310947afbfa2ef999b832e786d05070f79a6107219ae81c66b128b484798eb91743cbe181bd297f87beecff3df011cb7cdc4656181dad5409ab12fdb12a9613573785b4f48cd21efd2331fa0fd38befa92cf3423aef4a096738e5623fd9977379884c65e30d8b606091bc886b0f4135f319024c18a4309516073a929f1b257204a2aa64cb93e7ec6866e6fadde7b466e10ccde42fc1139f8c726cff4d43a2678f030a322cd45a0b6b2f4bf1e70177daf984e0aaeeba458131270718c907a0fc5f45f66e75337455ff5745de04f0de0ab31dd4f0e41468d2aa81937fa0bba3891bd7f97a3335a9447b8b8f4fb61a899e944405569e53c00c6f1e9c8452f42c963b358de5f55f7b6f861862a78902fcdf13740c5c7bfd1da6e55a8cd75e259ebc43eb1e122a155d2fa5aa7a75ec3e9a74c74a54730b74c43ab3c1ded930e48c53bc6544bf4ffbe11d309e314b5e21f4c81613782adb5f462040e11d1a69a588150b307c2dd57789b0dd8011986d41ae71868bd1f45a1136001334c21b66ece448b6d93eee691cc972f2ecb5dd8831f9e9af001c50163ef642a149684cc72f539755cc0791695022dc2720789b3d679998e60c91de7e3d0970817b7a2ee8e148595e95508764b62874d0e7e441fb56e017c22decf020a002122a5762427aa7253737a1c460c9b34ca5869f837250848feec9d088257bec62900279cb27cae58c99879dbd8e26ebf216ceb3d0accb74db767390edef0e869d72b03f1f3f7820e0f8b4c5b6900aa4cb210fc14641dabc655745eba8dd47132542aa33d909f0edc4ed45d649f6c3923a5cc0446ed1ecafaff9c74d2340b3f69c8856d48307c3b0aaefc12be2230018c23286b9c4ed9fd33de66e31f7e9e3c565bc5cbda7c97efdf568ad5309b54eccf54ad99db2f562db71a5a146910944e40337124ba1cf713a46f060d83b2dee1335fe2f7ce379c40d0da006d7895f55f717b11dfb1b7a490a220f9217f0ed8c7016c4feb3c0fb320c346e15713b3c9562f592e6687f5a74c1e92ea7bec58498882a57ddeec5fa3b3db88843b0412191bc3f54f200480073163ec618292373a0bfb30f339a7ce74e35fc5717f115bec967578fc75effdcc26b857e69e3954b238b735396235042f969628318d03364baf8c0abdcd1217ff1264fb0237a856b9f7fdddd8c35eaadcb6c9d64bcba14a3d4e52d21b903374a7dfb0ff3cb5a8e65730144f57c2ea68812a41fa47a3b540ca5b0df99d261bbccc74e48c1d8101ac95cb45b43ec9a0e528da43baae7c05bffabe06a6ccf8929876b948c92c017b4f7ab0d834163f49cad8ae1a3e07bd5b70d65f85022e6c60b0ae9623dff19edd780fc815f6668cadbe9a8e0dafdad07dfb6526d1354deb4cab7bf3bff5f4c0f1ce5bf94323b617946a75626335b01c3307b0fc3466b1de1f31e6b86234bed07dfa662cace28f4ac675711265f70f09473cbdc7f4bee0aba1ecf6cd55c4d6344aa3384a965c778c0a8896865b1e82ff7f4496715a6464bc9a81b31ae0ccc4562072da394ab9f8462a4beda78dd18e66a5c443e0ae80c577d29b25884a74119dc70f53e310209adeec657d5b4239bda67f67cafe383c894611e055fddde644700621ab2e2fb9e4bd197f4e8bc37e9627d6d235b13fbe3a901ef84a62df47e539a650ea04f1ad5e4b7940692059c7a15271b08ce30d2e5fbcc28c0ca099c27c5f7046194c9c2490f0d351d5004a3c678d1aa7d57be8b58134c544a49d537c924a29a840ee79450315f0599a15de076f41975f1a61197b275fefc7194355a0ae619c2165d1d0393e209901c1455f4d41d7b182627de8a7d9a507be7379e654590e905792dfe928c97b94f1517a133966b530b5b6b79c61206ed7d0bb264fc01ab9ccf2ceff0b392d8ca9d0529b44f06545dca21df77fd3822225a6f834d90e79c8199b22198094f1bda247cd90389dc6ee7df19f25d7228929bae7328ac963fea43ffa94168e629d7546fdc84137661217da4a4429ed79bdec5e3c71106aea32b506b62fdc7ecbba1b5c9b4e968b73d02abc5315eb09fea5d1d84dbeae03c89c633677f85498f6cf19adc864777bed888eebb7195373d9c941f2c1204cdb28c51796e7f966230c64d6012d14cc4efcc3ab2f1c584a7233b1a57241a0d23b303337efac39fb693401ba1f71657d4dc707e9502bdbb64f34e663217445286b08702d096ec0f9b0972f2dd13d6072c077dfb0158ba9815303efe5c7031737b3d9045facd6974a415c7597dd390b93ef33d06847e4ca91c3c954912c951ee55bcb7537a08bc5d464ac5c600c0c70c921246479aee047d0eaad9ed117d3631baa054d1bac36528160af6bf0265f97fa9f72224b122527240fd8540c5264edc2e9b013759a7f47377f8c2ab0f3d9860fb24492463b5b72777971fea9a3f2c4c061f350ac300dabe0076c21063b2347f1a0c23dd3f12b31b071a12412d322f1ff57f78b28378986634176d95bc5e4e286b116aa58fb3d6bb73f904faeaa9e7b6516e34c51769ae0a875d3d9185ac55db82f65613f223828742b6506e5ef0e6adce5e01c8fb7e9c297ebaaa9a3c26ec26e60daebee2ec470cf7d49d21f6c19c74b0b16814ac01e3318ea24d266c58619908e9acfcfe78a4cb07c633ac4e7689999d1ac05ea5ae03c13bb69dbc72ab66805ffd095481432c3ff71dcc63c29a3e8b07fcb30d74dd7e470a7a04c30bba5b9b7fba2c6c37f64dea4a4dbfef0fa71bc775d9a897961ac3317f4f2ae083efb138dcc38e9a7eec7a4875d896b46217a1ed6b24298395e0731f0ea8687b77c627f6fb9bb865c2a031d90e40d94a7686715b5c8eae57d0b8fe7e4d38562a53d8003450953264afbc151a88090017c95e0aafce5bbf9ae31ed5cd9f516c43a49fdaaf7052750d928a949b57b3a3b2b718ce49352dd5b3598c998b89a6237de6782796ef5608c717b620ca01b32c91ec414cb635777937808c9a46a089042f961b77a902125627aba95a252a9a133bb561f67523bb12ae1499887d687c96ef3fd43b446d09f5b5caee914b26cae026cee56c14948b4a7d722dc49e36135413404cf2f794bf6fe7f1f0769a7ae82bd985661e031c4a892c15d3ef37bdcfb45243d02f40fdb51d34bd596a91bb544eca654e7ccf0f8b57409c0658c854244022b72850af2c6d86329973fdcf5cb1d1800b1908e702c01d31614fa1ce8d937ffb269ff790854b5357f2eaa0b1d3635c80d34062d97a8b73a5020a4ac8eeafdc41feb194a3bcf0dd2b6637e3e7a3eb38435a7eeb14fb3fd2e1fae0c425ebcbdd9dcc07b84717d0bc037fc637bf62dc0d4e0d0f3237f96fb39eb84d9e94099a0c74fb0cc2f94a8d48969c103cc784983417679bb8a0f9adbe21c6bb4a61cc7ce15e283b4548b9693b4b37c0338e9dc25525f68eeeee604c2b11a2b4583da8f6e4bfc00ddf93e8f6eca7ff30ec72f2ccd9004663557ee1fda2f4e8c33876339a8f104f1ec2995dd8d5234efca823382a481cb3a38ce0e324be31e5627ba9d0da690641c8ce978c719d43938df70dd25d2af1dae9e5a2e843d56f350c82571538daf83496343cf943ad9f896f69a165f7ea263880f04365ed70e3644bfcfc75288d7c942193e828d17e8d8d1b706c476d0e0039135d30f0841954df8b3c18853bc8f9ece57e279fad98941b0c9bed0b3f1f36791b5cf9fcaa473a2344d019a9e545f6ab4c5389d23a7449bfdd5ca235e0963f5503a00cfec282e9bc23599e77b76cf95bd0a47d44faaa24f7e8230a4bf3fb617956a6f88b5f450a269129056324b6887b1ce1807c70a2ac3fc79fa3a1dbc763429ed23b06f31611ef08cefce0afab1a958bbb11fd4ee65603e6130cfc2a82ab3d56c24306006e777204cbd394cab336179771c02bc7ed98e0ee3d84af42a5bfe5f8f7bf1d09c6c14c1fa027e41887418deaa619ac7e410b632a7fc92fc6a907c8ffd2fda091a775f9b3ec7852eb6fe374dfd86cd3f45923e7354a391229151952f5f48d252a991bf75be13365e6059248f1795856acce5909992d62eadc727b1055ccfc3f271409c1825ee7918ac0b496ca295a9929e93126c0b9c51e7339838db9dcb9432990f5f4d196036a3c29e0dab438f21fde6242eb464fde216fe2e9277c9442d5a4a836eda42725548cb9ad716a48ad5f3ca1e4b384801ca834f7128a1894276b2ab2632874a2bbe4fef8511736d8eadbe720bd0c15db1ef764fe8602385ce5781e57f131ed694590055e9228b46a491a5077227174b143a36261ba3c464efb8111f167a6591b30fa2264d7226d5d269efb1dcb702bb32930dfb925a4bcfae81a88274cd262092c67f893a690cc5221de597d0e84a5514e341f6d6eb816d119a8f362075272e3967dda7376f04bc9c95cfe2d622b6c0c1101b416ec02ee723eb0e62a2db3161aedb05a8ccecd76247b9f5b976cd0fa54104e301e23f1ae4e95c6c2e83660b61fb083fb381484d612b729e4539511dab9da5e161bbd20c0d6dd6f3c34a7d7fd728d8d3f0dfeb2e5e50a613aea617a87bdcdd5d8780e0cd0ab63fe9497f8a536b3b3208886d3d4204bf3e9d1b468578bc06939e9bb9d12682cc8197e7abf450c43efd27a3b3a751f87f2382b49f04541724afedc6ee0cdc1db88245c655233e8b382378683a8f22e5983b0aa33bfd06343d18922fa8fbba84812c3b0e057fe567328b4300895e7e7113707f0da2d654ba59b8d5006e05875f2f65c0e643700c01331dd093297d2d44f7a9271d5af907528076fd5ec9920a55cb171d76985e7d0043c16648a052f7074cce4cf8edcce7a3bb3a5473400a0c0f5b299be78bb1fe0d6a5f4f477847a4621ac634c9e3b9bb5611ec20675bd65535ea838061a5d158d0b1dfd1b938c3fbfc6a7b27b6c2264d128b75aa62a25cad6e7d0d140b6c2653f01f2935c6692ec57e43d46fe7147d638030bb3a8b9e05dc621eafa10e6a19b616bd26c39592efca8faeb953856025c64708a7180ad639a9bad4516d9227104be992bcc24f3b70d2d8b2121ab82f863e101b218b08d261de1ea8dbc1be2a74d812a6d47c1bed18a50157c70da7080892837212dcad1be34135a035e5bafbae2638015737222e4f0ab1a5c1747b73138c471460542038299ba8c74721af2224fd04ac2b3c8b897dcb90a5e6975bf80ff20509f5398ab199b31e22fabdc52740241eae3ad37f830aae475e1fbd7020648d645ab7d3120f9d5340bb3400239369652d0f6a4326a65f7c7ed8552fe2727a250d0e906ce1d99c41b699de34f2ee0686d9d7a5d6a779e2fcdc1c6e36d877ba82a72d674a1e97fe4627c4e19f59be8150cc0fd2d22b84fcf80a3154187ab58a6bdbc023b6f2d22a2a3c452389818d418babbfd980d9501536b01fed1df1b653a951cdaef885108ab59c238e3c91e2aeff21eda228da64968075ef238f65027e05b05fef58fedc85afef6609ffb2463073d4a314125548e59c01a8dcb4fd1f7144a17bce1e85bb83dfdf177b190c402fb16ce8198573856c52fd5202d6e2979631cb2b33914437ec0e123cced3c658137f92c598cb5ca2926c11f67c3b3cf25493d77606fa60d7290430e0e975091644a6ee407a2a3727beb0e49b322b32b612316c652fa10423a089e208b447fc032bee2764a5eb2c9d5ae81f490cf0ec6d3ad433fe97ce56a4ba65d0be1790c8a62e1ee5360255658bcdda6908f2d1939e3344d34b24c97ee1df5fa109fa9a9487b600d2c079b207797f4f6be1cc154fd26549f554bfd9a5637841fdf245ab892f2c5a9409f3483defd80ecddb8205479038ab41205148f3b0ebd18e7fe00ccf25f6f5d31956612d7640e136fffce9a46014315eb7c05c8f52a2d8f9bab3058df17e9938f98c43ff951f8e4e5423098dca61a5f521f65ea2d1031de9aba7ddeb1c2a0d6ab07b36dcd5dddebee2ddac2b5787cdad66d99553b3786a0459a2de122d641b12460d84ecbde2992eb1131ba68eee712f8f534bcb826885f2cc8d4e2aac9389d8c4287356d5968745caae9f25f8fe5b23a44bc631c53b375c0c51765a221e206331b64d43a5626fac34947ed01b20522faba850ae055848ea22d49ecb166fa85c959e58dab6ac1b0bf7af00d081ba1dfeae542f6ac929804315000ea510ede96af8c8dd448fdd51091ce56f4db2368536b436ab8c9915a710edbc0d0f9800ab36631c23a8b85eda4ea920116e35fa5280c6360e3dfd8484f8b2efe4313710b568dd82742fba967e83a947305c91704c83eb3c9ea47edee0a46d83dc347485d0a76fe216001cec04502142123f51fe3ae82b30a5eaa38c83bb265f3b40d8c8c49b2024524566ca365c1bf9ff3efa0ee6568efa6936f5f435e6e36b497cea3f59edf83070232197da509e544181160716761d8333b1fb7fbecdae8f501132535645ffeeb8c4d4bab9d3b33b1f312c5193f0dfb14a823d95e5178eb39627386c854a3e477250079d9b8e6196e076c554256bdd6df8d3439f736d8cbf64e485f3aca5bc21e5ee42a74828b04dcd776877938f1da083c996033176ae9b0273a04e94fe81665ac70e40874aa8482e5d9d25a705a930348ebd2be4dbfe30b8fa11e705fb96fc1903f2d0219c526f4b4fedc327758907534a407d57438464cea26125c74702cd6ac977bfdfc5b5ab6b76debadc86c30b2824a863515747208b92176fa188cdbf95412376876ed9e2d7fafa728ee16126fa457b4499bf4f4d39f3bb2f5c6700bce195815be13ec7fdd802c953052e6a3f13d54488f822a4d11eecd5ccc08ba2ab98ea16d7b7de86e5b4b6d2c60814e73db9fb889636284f9682a6eeae959dbb73006b6c53cff51e80b33f9d31613bdf0a35dfd1d81b7a5782af488d3da34454fe613d0a35f22c98b81fc5b2fdd64c5a8dcfaaa6b56ec0c47fecfb3be1b2297333058b78e6e82bfb743e6f9a9330ef61aece849095f9a19e7480e77f0289f323fa337b3fcf79994f9c5a66dc5936cbfa557c9416e082c6ee48b433e108f14b693b3235e6576d1f9d17b9d200b9b289306a1f03c0ffd2d7bce5d008e95bb2d94fde4be2f5e58b64eccfa3da8e1a6ad008d500f81658b17b0e321c8d20639444dcccc6aaf4e39c1144ab62a60fe428498c7e679ca154e75aee17dfeb0d885f3518ebebb46cb868cdad933d5f0b7eb29cc34e9b17e85b3b1d637c63493933da530c240129e5ccb741306f7b2d0852d070b52be69073d6766c7549eed02acace47bf605230e5875114d427653790c74c6d6bfe8e2fcb2b60ee2d66c9a76ab703b8398524f2f651feefa2a443a62a45ed3cecb0dc1e77c4c14c92bc3cf88160414f837cc0979f92857aa0cc5da15f347a8540271882ff07612ead318ee8f52f50b4a42e6e4669b2af5cd888fa51b5fdbcef704d8a86ec5e083a84ae09a1508af78ea4827627da19443e52c163deb6067b2383097a4fc5307d1b221cf34b19dbff858c5f1f637c2f0cc7155de16feab87ec981422f0812e589778c61950dd989314263afb222d75dcea02946ba2cd87b8f8873e2f2d75ce5f4f7cc67371017fc536d3159778b710954709662363e08b8740860d00be429978642e814217c5b9c2daeff45b6c7d49d64e0649b9fcd02d5f6f250f4c25804650601eb529a782ed189abd45bb7fd887fc7989cd73b004f3cddee4b365e5b72b63edbda08eb2c16032d0fb883c1561319453f460054007653f1a35a7e2914fdf3f479bf1e5dc19d9ae280b3a51efaffd1a57d68fd30f5ff84faba84b469ac2c82f182a17b365f4bfe70a6cea91410d411b1fc0cb617067336bfdad2c0674b87ccfd9f8909be2da7979f2b1077ecc118402f613913535b58d009ac4a8a6b179739df787eaf3f5439ce37b482f7ee3455c5e857f8fc2b1d39bca0d8f7fbbd3be33261b48855fffc8909ffec2a126192120aa4845059e6749b614c05def9a4ddf41d49fbafe3474b20b1c07812ae8f02d8762a904912cd870827d5db096d6a26506360f7fc425f6c852f420342b4bead2e714424eb0f287f077602047f40553d816d6e4e76588f8540e94d33c00d37ba9c63b8e83f393f8321b69c254858ae4a0fa23ba8260e1fbfda49a9b0969f4252aab44f834c7659bcdc4f6be96d9fbc7780698eae124d5641dab61d23cc54269de1cdd19e1aafbf52c3aa37f5f5fcc9ea5e2c310744fb7e34c898733468132dc2c81406e0b2cdba6c5b2dc8f4e8561bcb3052ea5cc401ddbf2d56718a74c39deae8f2b6f21bb690322e41e68c4e97fb437f4382559848bb0b8f5ae0cef74ebf3cc7d0a87b5d5489cdc34f586530a6b17ad266c199cab7623f790b87a7fa9bdbe1ef14a524818def65a2bde728956b8597b1256ed16235198470d130be84923900e82875958e4b082154f45b7d86cebfc2a4e753a466ac2702fe14a1ba9d1b20c23872e0758c751e2a605d7c0b0ab7a625341536bbe003d5e0aa3ca3454d1eda4f695cae6c84f377a84e5f117b290e83e5e815e0bdd7226b47fcb1fe049d83adce034ca6247dad5bc2a761e474ebbb9e2d4950195354f1315e7ddc7aa19432e2678cac91427f8a14a0f1cdbb9f59a63f23de2ea8255e576e4eb423dfc43b14c0448ee337719275e96bb70a5fa47ab8aeef2f1857dafd3f6c3e2aeff414980f918a90596057bf53214b7e80982a57d732bac474ec1b398e715765a9823ab60c9b641b76d49c0d0d0567d0972dd9f6ec15ac26ab308f1b2dc6c0efb751dd9af428f8b6a25ae9858bdde834b7e85b61e09decdc26ebdfaa04b3a2508329a64ead7e6ee945bce62db5f1f533488f55a09913a36e4ce5b2effb7f250e73d23dd921e5ef3cc7c03a0f7388b754b2eb72b901bff86584e5b1f0fb7470b3f113494336a7a338902f8d33aeeb561f5dc457b6ffe8144738b584b7ead8acc764b67394d60bb16408d0899f4c63f91cb2e2af9e7ad71e9fcf1bd24cb2f400d0348162d5e8584148986dd45d3736c8d4170c207a5cd53ff2b1e043b539109558c83dbe0e54d77d6da6cc167555aceccef50c52518c289fca45cc80fc697493e68ab2314502d08b5a9cb6f8ed900f8d92b5a8ef2bf21865aef5a6312928672103e1a76184da8a9397e0f321cfcfa5d2a9bda99c1176efba272938fe426032673535e5f6d2c34fbeaddc4b3b23fab8e49a77d6030900f3c5bc47488d51f81e8e07ef359938a8653323f686ebeff88eebed49f9cc1e786eaff5b89f895dd871befe755df2bc6e151b81986bdb3db36f0e2b9dd89f55c6a69f5ae405986fe8731ea43025a869fea79e5029c4b31412a575dbda3d22b8d2e4be743341628e106ed780885764444063e31711571a7dfd77498568ee004e846f33ca0e1d90c238a8101ae6b9cd571c91135eb7edb97e5c2cb2b1afb3df1fc59127e4db5fca13486af2fbb0158ca97b7855ae854d3822170dd7e8175668347b90c24b03d0b78a28fca5aa503148424361d28de2413e6e1762e1b1089d429490b52b86ef38002ec0a650af2cd5aa2b5e94b286368f736c4273f795ea521547ea488b1d065f4d08f8b01c93aecb596bb2591c1eea0081238187421b253b8b5673910999af0c451eb96130dd3cdafe0a29f838df645c0d9bbde7eacb21214ac811d7ce815409907ae903b51540c94111aab82f500d6bc2dddcdc162d46cbfaa5ae64025d5c1cd72472dcd2c42161c9871ce329f94df445f0c8aceecafd0344f6317ecbb62f0ec2223a35b071476a3f7469bf4d638dc141dc679f9b29ac8fd0c2826e541235a6f87e2b5576a41aac4ae07895c41533985caaa3ff45d2bd384511897cc3fcd6ae22402c864de502ee93d431acb697a9423e616212134e96c64beb2eef41f97aece76e240e5dbd67fac2577c4e4a72558790098e222e24a1018c595911f593892af012fd36cdb3b1967e7241c1a82da12efaab0e75bedc44b1ad62f22808516b2ee4339e46c650488b6f2c684ef950f401234dca53eaffe99d590fe17da1bb88c06cdaef866f1a94a03e8dd93d6564b5c6b4faaa06da14f78e36670e58e95a48aa300ed83df19bfe9f939d7dd613f04e4654b796d5b7a3d64cec72610008b514b3d7d741b5735bec4e15653a612c7c2649ac8e7607a934ed9f2438c3bf255552a20a3d12341ee1c7776decf925d790a597648632e5d750a64f86c21adb68c06c407049330319b5f8e0433aa36b3db533f723a7b2b76a7e6823b917509dfa80c855b2028c6a8d5fe5523e581e7b8572383291fadfc589479ce4663f4b4d031dd0a9777106b0a267f894064d549dd8501c1057869f565d32a85a3443f533aa1dea03689c871f7f56987044212b195ed647591d54dbb30ec7f54dcc2a3497180a802c2c8df8fd4db42caca0dd8d363e8c22d58a6a7c25c38eeb85d5fcf2c0756bf9ed6c4c429333071e11c188613da1fa134c47d268f2a410f2c9f8c116f7e8c9bd0cd0df4b295ad9d567502a8f76aea98385fc948962dad473e3dd82888499ab3451ff50fd07eab1b976f4ccfe298e20db4950b6c5bf8d62d4992b4730afb199c686a2a73f740a1832055674989e68e78160eb42064fe4437fb48a16f6c0581bdb7160eaf8bae295a8de1d2d441d6587df92763f335c08fedafca4f9c2feb5badbdce223121f9bb083c7f2fceaedad875ba799b6342c211b4f381ef77cb2f1fd2e8dd05974ec5df12b897deb7357676f5f66fbaef10756234532a3180c24336d3c4cd19506684fe109ec6501c5a3bcc85298452f5137cf9d24b0d9655a9ca4906de38ddeb0dd9a0783b75346c919d3189c051e423f03b511537b68e54e626cf12a18ad3c5a9165eb02b4eec36700d5eaa5752feda0b230073c5bf9a1d1bdb215d9b5d9b7eccdd916efa9df7f88a2e9c3d4b0203a5d8d67084617349fc9f79e86e480b8584ed91e0fb05fcd821245382d937d98315edc839bd979c0e920565acbb142f32669fd5b5eaf9e61d5ef32e9af4aa63fd98be7ab495d474687bc230b6caac231292381b98c522d437f05b125d25ff1be3accf508993a4a6d7f87a5dcf135ca1b6a65ac5f2003d61a883e09141c3b27bd5c0a4fc213d94adedb6726f3e3bc2059f018c875a2295f8ef98084dd174610e3482b3e003fa00f40a346ec78caa68d92c4221b259b2b9149d9b568a94be873d9051908eaa6f8603cdd0b40942c5bd96eec6dee95927334f030c4fe9f3f8a19479bbaf5a9cf4a067a939e6a6e9343cc9772df88ed0f68102e07958ee87b92cbd313f84f6542fcca +MD = fc98a8a7b37b9798aec687fe4e80e30d616598d0a6ac2c4826058a98db089df3d65fc9f58c3c1c518cb46c3b164a203c + +Len = 83392 +Msg = 3333cc66d86fd64c5d8003e66ef2fe43ae6c235efce2e3f4f50b6a93b91680f4f299ad8a13caa15bdef1d20f291d6746e116552f4f94c8579aaec4be8e950c309b8243d221ed51fceb000846f94b08e682b9df3939c3759fd0e3a88cba4c33dc36d8d4678942aed68a95ecb564e4a7c9983c09a341d7b3759c925d25c7a1bca0c982a971d32f7f92c698c581f4500d972b871b96f0384a8108a32cb03dfe71235e680a17881e8ed7a4f1dcd531f802f944825d39cc4e026a1bff5d55a2ca180efc723e812f76a14e2e8979d7a2424d96e91517b55f82a3d8dd8c383e806d7a08ac888fd8509f819e6b46e3afcf97b81825289031313af475573304905e4f5fba759243447301f6706311648640600924fda311d6c8dfbee690dd0b76c5d88fcb5f78a3ec2104c76c1fd342847e0309657b6ee2cbaedac9d6907093163c70d1e47222f7f9e110be39a672c6d010ea8080a6714b396b91ddeb60d6e5984b7feeadb77887923c8da18000d838937e7b362086959448856ec2cd07f549257a6dafcd35639ae0b9e339e836ebe0f45120f2eb24c0041f86d83f258db706e552a2d9edf4c97a0be07a4e1a4f95051c10407e8987dbe4e7f6371e9bfb0266ff5a8637b4fd946d3a39baa8bd53bcf1324342a0a3b7cf7cc75bf225d658c0af9b1a8190cb57aabc954d0c0e7a4b4aea5f729021e1bd8214e83f731d7facd82ae31bfcabd90af5af45a3d649f93e2639cb2691c8eaa0def4722921cd3d00321ffde45d51871f5b8d72c38122e13438269de6ad5f6768ca648ca264ffb95bb6d611fe0e4a7d9dc6a04336765edb3568f8fe3b4cacff1e2dab5e31a4799bc54c9648ef755e628c1d2ee1831cc88e4a9ef915acd6795bc9f112115e49048a46dca9c941fc55dff548807432da27a37ac26f0bc1b38c2271fde1cdb1bb682ee74e55bd7b0af69bdf2ede23cc1a42c1cebca307024cadfd1e3960b9b3636d30af8ae34c26060a3f52b98f16d843e2914c74dd32f807a694d98dd6feeba7db38a7789b9dc95a597256d0dd76debdcfbafed365b32a4d3e8ea9e18dc3e1f079edd501c4d9ec6dabddf45b0e6b66efd1e5ecbf82b320873c94971dcb311ea710f8430ba72718a7c82733436b1cf943b0ba1d217d5a631b694daa29d97029326800f97f8db0d37078f91c6e3cb21e2033e099e29ecf7a738d62eaedffa78afb49aefd46bc9ca83082fbb5c5c9545eee240068e82d3bedf5707a5f5284ffca687baa59467d121c4fafd40830592b401649c1931d72c5450bd93e123eb29f70e3c59b1569173ab935c72d1d98365f4cfe6acc2068b596091c91550a9acfaf04d3f12a3796d43d064b92adfae3a6170a0f51c81ab03dd5c18f61694f4f24590fa0c5fec9b5fa438bf7d7fda9fbf27b03b1c55e86df53abf6ce0f1fea44f9c318b10ac0d2add273d1a260c432c662b4be4d8d366edc3f402e406321e2609615a77087175b68a4f65fb5f3ab9b2e3deac34972f7d98f49bbf44d27173f8d4278444406ac6bcdb8f4bd96595aee1acd449b0f3c4ad0e0b945cd5d21a80ab2461478954d260ac4559474af5a78337158ebcd05b3d65ab7d60543d81a7d4ab6ea10cacc262e4035c4fe0b67bdad701d2707e1959e447ffce924dd27db3e07837694c34f576c16084e5b0a254ca3af0582bf6026c73b47973ac924b02992490032cae987a887932539d3fa53cdfff711b03bd11ff464bb70111d9edccf21191566d8c7dce328c075cd8d6258096c5129fba4bceaee67e270b648d51393947eaa59e6e2b7cef6a3de54b2ca9cc890c335a922a9ee7debc57d707151be3f9381a7541dc47e339a47491469ba87d113581d03dc219368986a8089c0984399c529f49fa4f49bd8bbb19f56dbbb81ee9e15c951fbab417917db62475e340c6ad37e7a82a4fa748502ebc6622f54f2e5d90422dba6d06076102009f373ad7f7964881f45455f730416fca8808e0e427f6b2c0ee8061758282a3f5fd4268906902150cc2faeaafe1ca1ec2cf82070d984fd9576c2430892570e424b34a0520875b2dd6a8908637f9448c339110c021fbc364843af842b74cb6430b459098fedf1be37df9b7a125d35b58ab9157b4c7defbf4c5bf8f109674bd312848c88c91ccced6715ad2d4000c79049934a94d759e43fa9a8e5b329d4a103efa2154587ffcee974f2074974d0128006aff9802a1c645f6811bdf21321939dcff63c6951fdbf576660f1f53735dd2ecbf56966cd2f37c7907dcad550b8ea49bb68491caf7e66e24646b2591097f2429f4de46f49f8251e29d6528567ff6daeb9e083852aea8c301b8b939e875e17638b9fb0c325e1f60c3c039e2ae060e675d44634cd49aaf9e9ed19dcec24f2153995d31689e951713bcfecf6eb44411b451182a21b952475b6c4d7d56a70bbb36dc8d15eea1eb05f50ed79a1f01a0cd6c77a7c159895c1c83fa9adc541f222bba72981d00d4b6588f69b92e962ea28dda3161dd76cd1e9b92ba383f698328df38ec2cbb41bf8dab4d3e31f14693dfdf880ed4b2fbed1051222bb41ae98b96525cb9a98513bad76ab8fcc086b2c99f3f10608ef64b61e7b99cef8d036690e131706b9cef096f3a134d35e3536d489728fde6ef2bf7e3fb517d46216d632bafd92e62857d95351c31947a28ebd8892e299b0273a883bbc1953df01fcd51c438d5d13ee19549b504420929ffc47713eabd8233cb107181e111795de6a7d4e332a423613fea996768d125c5e651eb6143514e0b43e833beb04299e004914f0113b07f7a0ed1f6b4e04b64fe5b388819ce9148f97c846ccae5a52a36f7fe32c662a75fd9ccdff435d12d6113ecccef75f2da2d7ee3996f4ec7a5a4c34f63228b95e54f10f8891452d1f384a719a3842e46a8460c078bcda2fce09405694490c923f6c7a01051d9a4594a5a384030d8ab30983d3156d00a8febd2728dd436f01793584417b2ceb692dd7e5c381f197f6557067d8f500a983e2af7babd2eaed2ff7a866ed84e543db6e52c0546f4b1caf5109f81669190195620cce723c710bbd9300d82725186c188f6cfefb57f9e5dd2f3bfe3678a04e06063de82423bf11d3d6a5a39765adaf47188c666240e23aa6786d40df2b7dd9fe56a8916a8fbe479b47008fe44c8c5490911cc23132f06235b30987ba8998eaa4dbb691ec8955f53a6e7763b7e29ea31c8383d810360aa7b068769b6f9ad9c8201ccfaf51186c62dbd373e9b730c9e313762970a552184f40201c44a56629bd9ba15cb44245ecd7a4ff5de78d3df65e9df076549b9003a30c61634a04f66e0f3df3c3696617bb9cbd799b26e0110e5ae07bd24b98f8b1eb3db6b374365192072d996e936696c2f94fc9976e59b5f720079ea51c44910b6ffaa4748be07f7bed941bc3fde9cae9368278b786a0309bf838e257904963f9766cb50e58ad89130999022c6e98bc199a7d0d65385c8ae0299bcd506f4c76644aba70e9a0427640a265d510ad1b73386e6910084a35ccb0fd5ae9f881f8d332310d5d6d2e4a4eec021f1cd78319f72ffa6d090785d5fdf2ba9abeb88df2814d748d0503c96b19fe6ff060e8b83a51e786b281ccb1e1258ea986d2f65de5889b5b61ef11384de05e320027ad142788475a6000be96044c6b1243b01bb777f1062db2a3014499abf49376fc8d5f88a436be9e0c45fbe47b733dfcdd906450c37534a7aa39b5f780a8d97a64f06004ae9ef9942fc9aa29ba8d71d7e2bc2c1906cfb6698b23530e69624e36e93ee044ad66546bf0b2697c0fa1f8fc4806d67ac2fefc1fce25e5876d0a38cf12e0a7f0a976174bd76901858498189497d82c1a00e94ef2fca935099488e070673c7dafaab68a5b6d543aeb20581ac75599f4a2c878f30a9c16093de7c48e3f71bb2a29b90ef4c439dcdb56ebca46bc0cb0f7b92093358e36d42acb6da68a64b7c57507dd669fadc469ae70eed6e39c4387fd0812225aa7534b605a2f171b08c2c327f11fa6d13f946479de30653b8e8385ce37a50dab7c7ae3729233fd8a53181b088e85b6d3a23333054bb95d94bb531231ede13c703633042a1d8342206c4337e0871a7eedfd29401a5d92a8374b3b96efd2cf98f1fc06164ea027cc227ccb7d7783e3e66678fcf27fbcc22c6c65c379d08f760775f77c81a7c62585dbaa3657952bead7883d36b0fe1151d37a3174249cccdf72464e1cadfd348753921f0e2c0127363799715ee45d044883abd8d5fd1b3010c2aa2a6e02189555208e02da64841ecff0e23ffdf5653cae2645826f6d156413ddeab3fbe9bf8f95d3187c2367e6b9bee8abcd9a4bde628ba39156c8dd5110f0ad4e104ac8bcca515478b5709cef9f0a093c43bd4e901de8e2d77d6ab398dbad191d6ae408d5ef908bf6d4496d6678bb39dccaef664316cccb5f1fdd59b26d5408a1e84f12d3a65b60da02364115eeda62d48ab6fbbef53f467062a735676fec6420b3154d7d96b9bb6b66c081c2a76d6b6daa9d75ca61493b537152b17f897e14e3f2bd209d68b284f2296e93364b7f3cec52293c2f02f39251726633c162110032ced0f5f9c44ea3b772c9e0398315bd9cace4b8b5814433b08e6925f6a3ad10556fd5335b509600026a58d093f739d6c4dd555123864506b8ece5eee6f35a2c93fc544189b791831b38a3cc0b4ef26fab10047043b8fcf4b3b561f659fb213c359ed6894b9f47154906323a6a3049709a6b7a7bdbc073e3e71066a517630928837ce2726bb1c19cd6f98e83784744c1d9163edcb445b2bc9d267b63e7d21bd8c5bf0064af940601083b3e10fd38ee4ab03ad8f996f0bf681d1e289893f05e34438eb8c7e1f01e2d28f4ca48c1ae4cf467ffd13c4969a4ceaf21f5ace166da2545129304c76f12077d4bbb928b4f68a5458cb00c945769d59b576b079adc9791127218812ab7e9765169975825c34946930afdd04063146728e7111186f99e62f3d7d0a7d170ab64ea76e90155b3f7c09aa041f21534af6ba0fa6f336c66f67e306941de864361b8919936f5e4c77bf99f7702d9db7341c849b70ed315cba7cf114ff58f0fd7125a8efa089b9aa6dcdbedb6cbed5ac7d3686c47755b4aceba3bddb2742035d6c63129c2e65d3ef9224dcb8621965ad96c3250d12c31d11a36acdeb944fbc0e58527aa1959a29a675536800f8e3ca250140e3f7ebcbf725523095a8def8678ae58235826e8d374997e8055789947fbd5d3e47f76ac6bf728893a9a55fd2b25d9460e7d121b569536a51292eacb1f2d10b29c59e0849f263a7126e63af4518e0e58ce5f047a94c5e7d0d47f8caa2c00a8b81f15e4cdc2c934e2b786645e5f7cf4954c46258ef5cb5409ae6387c0d73c46ee53fbac0e3ca6bde5d4c1fac2bfb73305707c9ddee27124578888029586a8915a21535dcf74867e8165e025a9d80774b0234893f2c17d00c34a3426afa20d320671642299d4301ebe532b0c9a12345f9f4bf12f53fbb88f53dcb01b989433d0fa2c7721f2c36e46a484ead81dd5059bd9d1c09b88f9ea7a11264408d8c3e2143d38d48265a9069e3ce165b0ba8943d1669efdfc1922db6805113715f596e2a5d67fc36e77efc1cd8d52e4bdfa96b6a84f99f07d8fdd52023683d36c7977fa2dd0e88c0db2fb677c9fc0ae26646526c99ba9e043719419f0ac655e32eccdf451305a76869d36c0527b110c14815c5bdb52b8177947aef6d96fa02192d4ff96bb00bfca02c00893f8282f46afd7e41c877daddb459a93b265881a64b2bb77a91348fed1a8a4daaa15ae00a41ef0663375226f75cff0aa153dfebd6fba289cf4000effd0a1d012cb52166e6d8a5448664c4ce82d40d45de609d97089d3a4d6412b5caa1214cc1abf576760eb1a89f47eb400ff4ac0cb13ef70211afb25b68d563c39e7de2a21584ecba9bd64f719d04357489c16765f35f61bdfa50ed7e629fcdaae9e7b0a56363f57e56f21488c467cda2ba7d78b1729c4b21bf80711bc12fbadc1b732def31a5ca2225d6a3668bcf3e8b209d6277b5821dcdbfb31fdc1b11b5e7c1a4bcb816e6b55686f87e9379c6e27e3a85b70142ad4412996d3c07c6c2495e7af0efb87993517bf8dbf88804db63fc86dad916908a78a0cb1348575acddf9095fc2968d038291309f5b3ccc3793d9694016b00358605f8d349d7235da0f33ea10b1c31b141a6ac28da32ca2c2cc9dcc0adcf66883c867b20756af435c82eb92ab21abba34c44b7e3fdf818a562b32fbb1488a22f2a74b8513a765279cfec80a195b76f1cb4adc6a9e57620c5b7641fe1fa294b90cc5b30e3ed8bc6a004b725940a74b494172c4919053f8b1397671db3a323eb338e945547130db93f23092870a4c5249fe05acf8fe1a6a0058f36b9cec3fae9ae0ddac5f95f8eb2ad977d09d5e94b5796aca3ba9d1f5e18221b5d6491c130cf56b678e37907913b81de6d3a223c59961ee8b1aabef2c85bdfa835be8b2f4814d415094e54cf87cc42546449e4328288af00ef00642077d3b4c26a283952b3529ca5f6570afc04dd65b5eca99a5058a7bda1c66c2b1cdf28480675221af004f116d5eaae0a318af7626f80e9c31a4e7bc127d24e823c80b1efc0c13cbe7baf78d95130a3d0f47ca2deedab7aecf4c66d602f9d180823ef1932add8f8825a35726a7482e90da96c5821ccd6ed867472f5010581590b578cb6b71a46b60510194630cc3bde1ee4dc9fe1699db21e1db6bb2a6619a22a4bec22c3827525b541dd9cd2c4d603632b4fd274506a591255142852bdd053d3758fe60e92fea82143f4cea6fadbf998e128a8811dc75301cf1db4f079501ea568da68eeb84dbdc7aaf15453ead8111eab197a6e3e2f207ac025f9ba14e3430e9a6e33fa6eece716eb45d63ff134ea62ed74d0b21e1c51dbecef5ee63d34617d8ebdcfa82356b4ad9974cce1ca8d06143cdd43e35a2957a3b9bc6d2b4ebe0a70ba4ba47e720596ea1a1090dfb34ac490fdb53c785ea0b2709b2facefc5daae96a19a4ae3d7941e5b017bda8067f8d677b48f22f7b84cf2b125bb86ba4f24be4de92c3b8ec06cab8ec448f27a35019c16f5edbfc7d37888e3cdd282f12726ca04d563eec5c909dee3f6fa8133c70f862d46333b9f5cade59718273a4afa5b426a1ae3ed3f5de618f90df2ff438a8d34f90a025eb4a067b939890c152e352cc7dc0e2ebf320babfa4c6dd4d50ffbe52918d5dd61ce4b30444995039c017435bad943a6cd743ea5f34cbb12ab1f97a1c31b1e271d32b9924745c0a0476b13e0abf03fdea04c837e84786a3ed9e8ea6da37e6761c99877f812cc80649fc1b0c81baf7758c04156903e5dffbbfa0260833a91362fff5602ec373c78b31dbbb7567a657e87b5d94485717be00c73e296ad09120ef446f1e6f935241e2e49afb40648c0b9fde9aab9b8de40bfb2e00ff9258f6f462108f290899d01c5489c142372273fae2de40c42c4c55ae341b6e104874e179068edee9c17cf5412749d8f72046630ef9a3d946c13d7190f3b711c456cc599622e3e3c764e4c998a34b6884c47b642e2b54ed99230740978029708483076633fd3a2629b77b550912b8f850eb677f42c11a02251a53caac229a13b696ce1039e0b9307884e6a07dbab711c35cb2bb33031ca2516ec918b8233283c458c8608e1388881d91d0b2dae5713a45e10521e739835487e61031a1c9184714919e5d1bded0b67ea6df940ad90dfb3e4008b747ab76a12f4bd11d515d75e71008f710c889b943058dbb4df3deb4dc164262873ba11e0faf65b3e5ae2670ec1e877c7f7e5b6ab6190d0de57f3e8e6635afbb99ac62a22870fc5f90a26e32dda8d4d5b4239d0c9721ed7d65953fc220044fbdf380372b74dad87c26147be34215b8a9b7a098c66f87f6b2d41c2b7993e9ea0e9fa168e17a56c0b3b0eb97a9a4cdfba08ede91c1c5b2f0553afe48da454d4756a5f53debc24a7eac341108af8938656343c4d324210aa30da022df0ec0992f3e0b66fd72d41fd80ebd6d161b7cbebe9ade39a5180bf7d6830d70373c8c336a6ddbdbf29d393e978250e70b1602c7cded65274ec50ce1535f89d09a8d2f85c08d1d3b6295780d83aff7672dc7a5bb5b02e2751752ab30e0481c2a4e2933f5f943d770968119f6633eb9d5c657ec0230845c0b48e8714c46e6cf669c3720eddc391361d68aa46000d69f191ced5f041419dcd129aee59e4ce2a96cccdf7cd43217d8f66ad8a2b32320af1c77b28729cf6969af01cd8f8cbce4b224264bd112c3842f1799929b5692c3f3c421ceebda281d0b8d1a6cf77f5d93f377f2a0a60f57291eacace115b3166873fa6168147de9ddca53bab4a6e0f698734b77098432b6aeb09debec9a3176b736a77ea8887cd850afe92acd2315509a3b8afeacf2e5a7baead29edcb1387c5744b1c1b7d13dbe1fc137b2def6883342511acfb17890f4f5d6340dd8e330eef1a50272bd772a62f20925990fa89f6638bfe532419e9963097ba98009b681952c6280d9e100a98e6f8d9c298ac0c4b3238dd16f84ed69bd9be11a3e96b49439b181153d4cf62408415782a874c65ee0acc1c8cda1ec68c956117090a865cfa2270da8e826e002990e6fc15ff842d5b67a65b195c024fe51df1291be67509b97370b20209647ab097fdb3f963bbd90fd368073100b1b941be1ec6710fafd61e18985672ec4b287203ba5e69568bff97d871bf883a85b90f102a8d9cd8af48748c482645ad9a9fea6ebd59ca3a5ce77fd163d2739bf6c5c99ea4dce3f3ebe7794910bffebfdb4786236714b091a7472478aeee87979d45edb42e330ac3fe2978d9727202b575c5d1dc583da10f13852218c36238afd1d0081b273e65db4e851fb7fdeaf601028159f3f1231fd4fa28054c41ec0b574cea951e103d89ac6590ca5f03894d34fa108b04d27381b5e3b62a8d9ada8420670c015789eeeab9dbb2f54933eb7cc3d4d9e1897c9d7b1468a61e474ecc179da8aaf931e4910d7609924d010f7019202b6409ec400f6062f18e6d23ce1f4a119a4dd947c0e2667387852e10e6c586fc564540c7cd47d63406b5738da962a04ea47b2df3af418a34ce2214f35a3a6a9aede4428694e5410a10d1ddff51349e876f9963eff03ced3c55ef9e12ea6d189e7ac76bb317563557b86a18f365e3a96e545f1777344303fca754260a17dc2579556548c7c52937af65c4a0f4481e6565eb02b533fbe272f84ad6495352e625be3644465f3ebcac639197f29c984347009c4ac9a0b7a99ea1a91c74593c398ddf75fb00c3d4af1826d44aaa36a6d0b2b0f08dd147e7e70b9b5a6d43b63434b24f9cfff4a0377f1f7b9663246d14655d09804248841d492e47d76f13e4cb76579123a99e7ed78b06a46067fdaa617f9a7cb41eac0fc84e9b399888715f626cd24692ae6aba25718263bacf92790e6dff8d146988256945b6d3264ff890a986b6d28264e5ecb1c1072c1e108f438bdef0bd29b9497f70ed25c6f93bf623016279b74b739c70fcd7f95002b140b46a31127f5c948c788f935c6799c31680fa6e9f878630faf17744fd81f15853261a12d9662571ad9b15e6cf47707bc62505399ca59b538de8b1867834724c33231bd2b9e42cd749719445e2e925dc71a9a221f5a42321c1c12c2afde9fe236d35f01f388bdb4bdc769b3f5bcf224bc56961d63f05964233154790f3050d646dc93756d9cfa935d3248b418e5bee702dfec4b4ed4c6d2b6e4fa456fc381885c177420822122f2bca05f4daff21f2b017d43b4c64db2043bfeac2eb7dd5b81de4aab0a18615c5942d95688a32b3c7a21f74361b4a445831c48113dcfc70648363ee03b18a2d15157a4d46ddad83e5bca1795590122a6d6bf87d2799fc9a965cabbbabc6b2da86163ca81033d414c5764a3e1a4930cfe858e8696eb102a6c610489e194f74a0a12ce140652b4ae8ff55764ce4b54ad7419ef0c0699083478c34b6ffecba6401feb00470b6228662ebd0b2205552b4c31194ce0ca8d702df5130636b96a5f590e74612e373c7fb25237e9a52ecaff305c0d0ccb89cf315e0bda9fa6b97709db00355a9033e7a3da23ec57b4f0b3baa21e7d9795eb65310fe09e7d87a7fd8e0f1cb75134a66b7a26c863be19f31743ea9ff255069a595a889fea08a12a01d53d8b81afe339d1eedd6a24879ae0fe825006f4aee53bb393106e43a8bceb8dc6ad741bdd659420e64930b818005f705f1c7c090afc7979c3f07533c59f91a849a6000e41825e6049b043a6db121776c29528bbd111f9b5d471de41c713c55b467257e145024099015bca76369ab117930433916bed666eadd9cef616e02fada557a01c50ace1d4f592eeb1935ed45cbab1c413405866ad36706fd81ace76a64e9e0448c949ea190d9dd7de5928294b1fe404cab81aa1795780e9713ca4434e2a8eaaec1aa1026e31c3ac85f0be58efabe51a3d3cfac1daf84f6449e22c3dae1f71ba90aa7cd2dd494d962ec0e8084d44fb2ff532c16bd8012607e6762c0dcd168d5ebce1a2016d3d83bc623170e16fd3706b780437497c5a4dfad25e6d5ab3f82cbcf927db3826f5ad47a8ab1d8d5c418af550182403cdec0c669504b7cd69ab94fccee4ee1f115a135e8996b6b11c7492f604d85041d39dab73b5ced20ef6190d47c480a45d3552fd2a8c5a04f8b856cf951dab83aa97567148bc2685c46228e1c56263c59b9bc6b2d2395fcf0737ce8bfb22f884e62000a80e32739997b6c2569d30f61980499f7b7f180dde89a1c30c4f9b291c9e778196ec9d1cd731f9ceb6f8b69f67b549c3a059b2cdfb24fe1f9cba11a5137aa2c3830b878b0437333447fd7dc779e1a31c69878e05ec8057c981640bd43121abacb9927727eb546cdc52d50cd715ad5d911d32341f7a46b3a90374111e3d3c99267faaf658532eadae1ea7eb3504c1810906812d816d1e1ba76c13abeb017275181c7b8b86036dfd92f59ca34b0dc4166e6a9d00958daf96ab026862a3436c4669d92cbe19c4ba65701ddcbb80fa5f25a792ad35c1a2a22c9d0f9cbdaeccd11403fee617795ebdec30df8ebb3b9239b59cc6da556f739ee565d9d64574644ae8cdd3d01f0f991d9aba83da2be69cfbce354e4ce706c94ccaeba93f805ed27fc9af9f135d413d8277f651e994e8e14c785a712a73ee6c54e218c6fff8d2e017bf91acd6597811968ccc91e37ea929d5bcf3789c818e245d36d27a3d353954bbd25b40429c1ddefee0258af06f913b3da1e8abcc9a50b90fcc020b21bdfcf7120bf5a47fad966c657be78536f108e12d302152df459bf214ae91c2d41a8191c5714820b4144d837166fccae08b76e14d7086b5000bd89811e465e77ed432ea7b0c3afb095aa8ebcaa84aa114c643044469001c55736d73b17468c2467176c9dde5b47fa706116b1949bb52fa28d712bb2375ce0605c34b9968809a557bb4f892039ff2b6a0efcd06523624bc3b9ad359a7cf143c4942e874c797b9d37a563d436fe19d5db1aad738caa2617f87f50fc7fcf4361fc85212e89a9465e7f4c361982f64c8c5c0aa5258b9e94f6e934e8dac2ace7cd6095c909de85fe7b973632c384d0ebb165556050d28f236aee70e16b13a432d8a94c62b3db9e087727e9e65ccd0c9bd77f818ba001da5606a0b9e727e333d9362f2faab6d16ff8c3a9edcd6fbc17c1710325737d9a3ea14c8886469ba1da3f487aa5ed8d705a440385985456e270f120a8a7c453fbfa999f0e4cac20d005d9920445c792391b7e9953a017bcd0a69f48d89edacda7bca380baa374721e552ca56495b58f9bf20d078c6b840bf737405c0b5133453de3539415f13be9bd36ccf5140c33bff99c73d0a87135bec68178fcc9956a552f0d3e4b98dc5f026d392ef38b1fbebe026947773047896fdf43ad8d9ba1fc67eba8a809cbbb7a568ecac7333246d30426e70c8dac550b79a1cc5290ea2d46080434357117250a50926a3a36c2280d1ce7a4176675304876aeaa1ca93d8df3bff94e7af4139f8b7b2895dc708329c982b51f1ca4435face1665b40391e4a61fa4b35cd1549817a50b1ec32732dd294b01fb660c96f39c544595e71c304f93d417aa8c0571171535bbecbd0b10aa8fb3fa818a84881651e0a083235c979f0c21ff815d93c03f5b306bfb34baca213798bcea437a3f25803ccf364e0def5f7bd0053eb9c26a974f5dc2540e7d89ca87c2ef3e7b35e6a8932e79b651755f1447a7d0eb87db97a85a8669fe359c752ee8f83c8619fea327f17f460c15dc1048d86f098faf266ef8e57107018f5fb5d4c3044bc9051d9e2b02f7e03f818c298296ef573318eb181156e74566060d72447eacc30f27da013b2e5dec577cccd34be9f163deac72bd7b16b0cb3481f0d30783b94c60677cf1e0dd7b155df0e3362a393bd498520283bc8e944073e74e01a438f290c5ad4d98a177170058c41a79a7ee975369f2e5955e255b4c2c227023a307213445e1931e0664fa5850e0b9c54a70cb885a756119e942cc9866199e628d570ce3e9eb97ab970cecc34e2c08419c279f1a72c1bf38e34fb1cc29b420e6e98f7c43b8b3a165ddd8b4e958904e16247cddb2babf4719d6b3d0907ddb3dd63f1939fcba21f9775f2e1c7479f4d56b6ad54bf7385740e549d6f18a6b763e5a185c0bb7f71ee607a577ea09b640e369f79bb392f672f4c3c520de65fa6d6b9cfac0ba1c7890b13e381ce752195cc1375237db2afcf6a9dcd1f95ec733a80cc170ad0dd24461a3439f83dbf7a930b7ff030f8b6850cda857f5c938591c1069f4ff8bce826377023f62168ea06ea40ce6938d8df4fcdd395db9f835c2c08bca5b31c2c3d3debc16590a3cc7f471a10a168918a8750810a316a6ee1daa2402761e8dbab56ebc1629ba1e5c509bb90df7b76d17a3937a4c30a94313b8bb525eb6669bdc6bfa056f818926e0ef3e4ed21cf0c8f447f75c7b263f18d0cd9b5185d25be48eaf20c1ae67efab2f6d8539d6c1ea21165c49b584ceffae8b26f229611224ef394788f9bb231434b1911781032ecd00e5aa308e4f70128cad8969e3d9bdea4446fcd9b57efd1f49ce259d2e3faac0edc9f855eec4549f3b9fbfa785d41dd46c1b96bbfbdf3d3872eeefbe49747eeb712a0f60ddcbc1cf41c890551a3c780bee22ddd8d5c62a893879b923d989f3771370b8f8644c01ca288fc31ba7f817b652c299d54a1b0d3722d74973e6664f8c5c03b9c5892f5ab7775e22a036f042fe2162915d62c62e6db970675779f3da51d34cda71565c15beb79c738dce0c410be26c8e1626afd55183addd779818deef00b1e5a1d3bb79096fb07f8978345b041d4758a89dbe4a0b0af4727a4ebda18e6b9ba0ff0735d0bd27040e3d3b50d9115b5bb7bcd0dcd4c4d6aeed09a0ca6c549d73d533fab0600568ffe8511f48035c221073fac5efbda46d4417cb9827876c1d9f4ae5b4157307b809d46c2c04210afdce530986e04bd2591cb8693dbc3afc7389c8bc3e4d4feba28a9b366b6c7b4671fd20921b98c77722a0988a9771cd2d289716609f3f3cdaabea0559e36959360805a23c8afe79ba4e377ed7af2f8726c333fe7adfd284fc5d92da7a9ce10202494ea1b0ddf9a8c4674833f78cdcb210ccc446b207f06e783fe8e2449fbebfd3bc40e5951c739dbcf53d809336629412cbb2b7af1d804176d955e55cf3e6d8d1ea4435944d53a1cb7e7d2b53b6a775554964191a2c694620b442aa6da04395235ac05b557a81fa198c70fcde13959f00ce44349a3995c59c5715fa1dafbb3df2941e1d7faae4f0cda67ebddd5513593ce0b9cfd84eeb05124a389d1427381a6521c444bae666cd10550f34f78508ea31092bb47b725350ab16115bfb10a172a5881c98b035eed7091f8b2ad5aa5e9b06d002a92caeb5ec8e420afc7a73de8ed9518ce0069f6558e18f5a681fccfcb4e4bda7779309f922e55689473857d6b62a057ee6672cb196bf2ae4b37cf3ca7df25980e6578b083ad5dbf805dec47332c02b597079e5bbdacc7a92d69428b03d592bf6bd213cc87c8858befe13c29c49c24b8547e4d16b6b2f06ca971072963e40bc72c698252230265543fa805a394458ee6a3351f8aa931156f5c098da64c6d0925ac7654dfe9dd65aefc1cd93336bac9b70fb68635e989af37c17d367021e303717892fbc450cc1f02a1aa1767006e3daff69d01970c3f164c5656a21588e8a3312d49f7bddc50f9e5ccfa409d95d28337f433222c95c3f313a7104104f5d030cb26f5d91b010e7ededa67f5656b8a12f585235874fababe342054a3dcdd5c54c5e241006a53571644568da65d05e7655f25e824fecf75e0144e7e4afbb3cf87a80b960e3a37bd78bccdd5c3c2d98d02db52fc082878a8013aae0796e02dbc31f7ff7f72f942c3eeaebccaee557aed7400a8c982908aa38a1dbb8b18388fa4fc2c3a67af25f8ed00a08fe786834e8b215573eb24b56a0ae343f3736f537e1c4ebb48e9434eceab5728d3c61cbae8d8a35050eb5f05bb40b533e25adccf6d74923ba76ebfe238715aae04c1118ace786267dc14a20fe2d77874049c111ac2506f03d282757ecaf173b6bf63157153ccf72262218e427551957ad6c18cb431424dda56af1482fa8e3ac9404698ed3d58ca067f8c843be721a4bed565a02a2eacb6f5a05f1d8d4bba285c53c60c7cdfae639aa0a0146accda1eb68cf30beb1ef2230c4c1ce +MD = b927381128f052bf16953a327e8bdb5fea57b3715142ea1e0eded78b5c2061dc68cad2956fd5ec7e51dc22ebcecca4a3 + +Len = 84184 +Msg = 97370b26001e364be3c39b545be4dbf49cfa51a58f56e052bc6fef536d7bb19f103caa3dde1d6ffcba7dad645c4b6cecaed3956e76d7b2d736e2f62350d97d896ed3d4f2212abcb0c9d32b6db4ea94618a9168c9e8fbdd944bc4ee5f3084a3a379a3922d136fa6cfd66b1f56aceadabbf6ddd39e2beae8efc2bee0ef53a3ab57f955ebd6fa11b4c1aaf090078c73c763bb5fddd588cb5b526577d3bb025f1e0cb590e8d61f3b6fef0d0887679cace2bfa1be8e5647c6bf24fa98cfaa84e0832976fd9013ca135dbfc65b0b6024beb3386fa3ee09b0059bcd4ac8dca6234d62180444eb7643c1089a9f9224d96bd1c237efb506d60bad77b51db0039725ce4440270c01e7d16ef8e95e55dabbba0b9822e79ddda69fe9db443bf74b63d38daf09a7fddb4fbd42b312cc4b36ec5997bc6220027b5fb5df50e26b46bdf375af2edb4bc080945064c37fb11d3f55909bb660628de9eb95b75df776455f2f535f461edcfdf8a0cffdb096d573fedea7400f8374e62e30879a8beb259b3bffb4c3813a235b4c59853400c1fff37970e5ad4e3220b45218d3b061263ef1594ce2036698e58383a9b9323d67f948baf1930bfbd72c9f5e8ac020671089eebffc23487d9eed1da577b21eeeef8918c94bf9819ed96151596d97132511d03b77f9c0ba4fb502d0bbaab9219cc3780cac645f38c0a0876f4baba1b02492d97f892901806345eb44cb2c1663ce4a8dcb6d260d57e89466a43d2b2320ebf96d63fb762dc341b77122e0e4110b0cec92fe14774a079f1dc59535d5688a02b0548fd7c78eaa72715c12ffbaf242df114d4ca74160706ca36eed3e91b717f21d56aa25036a5e7ddd74bb3296002fcd21885e306b95b9d78e27525d4757ee42aa3b5ceb140a06ea6280c6806084fb608409dbb6dd320b6846b96d9cdf91397abeca4f33e1b6cb42674adaf200c6cd20a3996c427f7e8da833ece50241ad1d23c0cc280452b5d50c5698a08e5f0ece94e4ffb9db39c3681ebd87629756f3c4c41a0a92674f514bd09633c05e63a42544b0056989f347c3534d548e6404aa56e533493362c0d055178fe3e16af5cffcb8707124549554c7cd49190e70341cfa0e7354b3008d7b1d67a96fabb8fed978798a0c944507309b161b9f8dc4cf8fd9c842f2bb469f9ac84b4ca1c8536408c30e689e5f63312369b629aeb166bb4c1b9a08eaf33edc758148e03fdd4011a505ff70ef2db7fb775633dd0e2260e29be70d2d0502ef2d536ee8cd129588ebf765d50cc6a7474e728c179e8689ba2ac365a8190b91617a7eb7b27be29534dc480c17a3ec741d105e33e9d3df8e7a7d0ebff335c4479dac3c852e5377884ccbde224d9c2a3d412b817232e6e1d8aac2c21a76e7f7cdaaa9d600e5bb9814d69f03ceff6146aab9852472793e541051e128a1ba986eca905b944f5e1c0fe1dc42fc38b65908628f088e5b464300dd78c1887946b1efe758a9bd9b21dfa298659b1489f9ec3a0ecb9b0954225dade8264c2acda29843cc097a9b0bb76a1ae17a9292e95182a2557325db8593f422d9636955c357b73220abb874c8a7273e63220fbd7f45830ae091904d172370285737005383ec75838b474a91f9797cd8c765fadf745d5738572cc3a7325a39870aabfa6a36e93900b7e3183ac7b6d3aeb44b3b3eef2167f4604da631fdbfb7079bc63de304d76d6f498a0ab65ae5938ad3ddbb22191a1908a6fb2133a1da536fb291b206143c7899ec41084fd98e2432cc2260d51acfd63acf3e1cf446337389f612411a8fa3c2464612fa4b6c3aee6e4622139e19c80754841e7fbd1253811b1053d3699c91b33dff04c8f33d6f5908eae6bdc43e8e121c6ca432d630c1e3eea75c4e396490b348c01f5a8f71b8cdc65f754490b3a8615b30d71d87c60503ca64339cd30f272a2d316c9867339ab2724dd8924a9d9e5ad877c02918fda84777efe2a37fc4df80b5f9f26bc2a99f70d25e158d3a27f9675dea653cd0fc3119bcef714d84ab3e1da8c0bab9eafb4e6faf38361fa77640efb031d03ff8ec28e0620de6802cedce69ce30ca6c25522f17d083422fdbb5fb5a9af3091bd8f4150332f04b26bdb217cdefef2c6abcd6cbd1ffe842a41c0ab30fe3d816b6b83d81ecf140a7268021a0afd2a5e89df7aea903020e3d68b39dee78538a01fae0eef4026aa70368bd63f17840fb04eb1d035217a29f3b62e89737fcb2aed2ce9730f4ad64cb66d4bc9f929101988a3e78fc4c73a740457a02201303c7ef8f19272b0b55a654d852c4fe0c60dd26817d4ec22181d99b61984b5f0cf55bf242c5d606c062f9eb62ca1ea8e54f9c4af290e87c58a700589aa4097da93b3662f2b9edea9b3c25380a2413c4a8c505aee45e8e537a4fe31ff58685a2723b20e5a8ddb3fe254cf2e2da48e97bda2ae1fa5fd1876f0ee04b967c2707f4f05ee1236b19726be5f82892da1ee8f405e5f8d66cd01df79cc20068366dd69eaa0c40c64355705864a98eef118f5a58b06012e811449613ad5cca3b2b413cc629ae07733879f7ee28c8eda2878185ce6402f7db58133bedc81871b8648c7f95f3aafcd4536d4d54bbbb0d5244ddb37fa8336e55492654aa755dbc86e834e832926ae8919b19bab3a5ecb6a8518c2a92045b41feeb6529753c94744dbf23bfc58e549252196688336cc1b04bb575323000e2368046b80174a62361b7f23f4c786dd2c4bed33afdfb9aa4c2e5787f158125311680620826cf3a734b6a8872d671b94b447dd37f6334b6fcb61ba39419acfaaea8a9483bdeaf80ecfa0e89a2a7d8f927db38211b0005493152973c9b88da08c2b6a0ff3b723c01f6364cfeb905d6b6cd5197c3f81d97daab5f014e7ba832d5d506108fee2a9d44fac6ccee9e399377a76e41c3fc0112f1d1a400de1ec2ddeb50629f013e4dfbd25e733561398b36c41cfadf2811f69d170deb3df66b1d02d29990f55c12257d318c052f5f7242e72594bc18fb1e4260d2c6fa609d4a03ca101a58bba851f84cebea4464f131a8d023777d95430a2e84ad659a10dca3ba5d2f3a8499ede50f8f88e2f7791e5e0316452e05fd08bf02312d5093f5ba5e8be2b760da3634b5b26f8edbe819efe19ce4141f1cf95324068edcf0adb83f64be812ef6243b84a92814873dddea6aa2bb6017b38a312b2182c441adb001739b9b641e63284fe6a9bba5fa6f9f94998aa8b2d652164c989ebdfae4f063775fec6ab00e0faf1b619db14a70dbf6c0847faa03d9658af3a28300594e1f8fc30a3f729087628047fd6d532d70e8a916326a0a7ba952accd52b8930906a4fc8d7c7dfc2a10c4657ac202e97382fe823dab341141cd834583af26be3194e5727cbe8c50a6319d245cb942bb472e8547def7c3047ecd5e1cbcc1b3c9fa814cb938d756b62d72558696e91610cffde5c1a01f012e59324dfb219148fb8b543f986acfc276e75c5453d05b6632337687b82c2ad5d6fb82b7a85926ce9d0d9528d9baafb7d7fb760253b1151b679c22d1f4292026438b4804ec0d892bf7a7cd6e42cf7e1f229148c84de2211bf832872c3c4009debe32099b8fe5c049518283799c5244e1a0d35b0c0b0b87502d1c2f015919eee48f184fe65988d50ef3c53fb1aeea09e596e7363753d34da14d83a2b6145bd620fe64a14c129fcf642499897e4240d6134ff562b2eee27df5a28e66b533aeca7a533f883581d1b7322e26ea481efbb253122665e4a4e11e36726605647ebcd1dad5d08b096fc794605793e9770bc4a68d26a1c9343c78394b0632072dbf2af328cd403231a4296ed5e8090f73d143b9a9d48f150c804ed51ca61bf277bca3384c83b60513e89e4e7b28afe2a4381ff38f6418d2d3360cfa91994950a93ecda92e3f5b8d1803ce3b3961aeec7308015c271e6387f02759b09229e3a82d0d504db7495651a8bc623df7d92db5460890fd5a4999bccd1bde00079c11836af1d52dcde8d0d92cdc025c9dda55c3860175dd0e2fe1fad1da43f1d83bfd68c8b2044f5966f1ae0a2c55a114aa4da09cbc57042c1664c7642b2f8ced4eccdfaf1784bd4409e057ac71041342913ed4eefedf7b9d474aaeeed74ad82e1da97087eafe7f741ac65c7876b6ba10d950e5e692b549470aba34d7a73ddd84efbaa4b8f1199bd3e0ca46d802149f66c8aa5deb3f807614a7dce38860b0a3d50e2702aaf57e1b48a5159c33dcc6c92da875c464cce80beb65d94267cd4a330bc01913c6bdd406baafcee6f1cd73404bbfd8a0bb02970fb38dd9d9ddb5b4940c4eb85d7213c46513481ead799dc30daa56fc7b57a9328a5667033153df96cec2002b6a17bdf63f3ab62d773514603730b409dca0896485bb3b80d12f1496ea131d9bc21e84119c174122cf8cf9efc6c723264cfe69d206ca517841da1c5fefe9ef2febed30be859233263ae6161bc356e97b52d91227186bf0120abdbf97e52bbc106fee89a40093d26042ab318935c54f3176994d09c0866276b33fc5e7d4c1cd65d688566c180268f96e4413e424fc9d7040a6e0210803edcdc4c7f5f6c5926a57a62261bdd2c73b18461784d299e21b5f39699316f7cada3fc6bf186dbf88da0e6926704038ca93e6538d4cfb9a611127e848309095c471f3408ef6f3cb8a67b1a6fb4c9c51f4ba8b1c0f32093260c6efd5ac7d39ebd7f912ba9c5731f0815768e609bd7a252bf72e2a03ffa166c883e089fe44b600ecbcc3bc5103ce3653f35db0b88b82bd5891f703d27b6d407f90228ba44bb2ddec002fcf15c173a5e983b58c707d5b2064d10f31e56e15c76e35dc63085bd388bd0e7d7a505bc8462b4f9b02995cae5635ff9e3ca3a041037dba379a903bc10b492ed6466a977420019e359b9bf02268b563cbaa73d998fd95665ab7a6b5256e76a762bacb3e203b54baabdede01605dca44bf05bfe0c2bc9c826d42b18fa7b72ec3485edb1873a00ae92654cb570f3d5eeca2d4ee7e68487c569ac41992eef058c8b1ba03ec16560d74ce83c8b9d81158a19ba0687b32aa1b2a07c44586a320dcffc457a984b06543a3caf53ef163e0a0acd2f0949fc7e96346dcca9f336d50a2b0aabc37a6ead696bd433296c557b21e55704cdcb1d00d3af1425e8e60f58791238a71131b6cb0ed0c60c036fe5d8fbae39d3ca77bf41f8a7561097ad7e3cd939f8dffa7aaddfb2fd64a2988641c805ca080495ec3dc263a186052cb5ede2a8f6edbed591de6c0466428f5f2be3d8cecd242fa67522f2a322367c2eabe8ea76ed69bc3933b2e0619fe23aaded667bc52c20ad82bf096345adea0df3dbf9c4b1620f60abccb5ed590eb63d2b372431776b8016a1264b94a9a9031342d28b01f709313493b961d3593750ff4d95b78a540fb4f3885783f77da82424623c3712964791b087a64142f0ae24f99b859af6e99d51bcaeaf2d1c002fdfc9f85568873db1835cfe0fceacadd7b4d48b833907b678c8da9aa9b162ffa4786c6bcaa9c05bbba8a27d528480ff5882e8941b3c2d39469cf5c2e3bb7cbaaa80943318756e5eea54197c1aed60438511de4bb9fee7e06b4066bdd9a5b9cfa6aad9f4bb45e1d5a2183a80d573bb38f1d40e28ec0bb85a7b55d5f1e7fababd3d4996171fb5bb5e97878e01feb2024e236bf0a22ded2ef5db4fabe5bb44eff1b2df6110d22f6b382f047ca60322c5e1ae2c3e5dfc1dac412f80513fbffeda0bcbeeb3786f2d6210cd319eb38f408691d6a74f92e307c0cadcaa7e3662930979ccfa15c4433a306716715cd10f85b4dd516f9d175f460d0167207b803fabeeba5a74007afad076b98f564f74e07ce12292d7bf21dd52d1835384f193c3940a4bd90efc12f27a85769c42df15ce909c100f921e68f9b8ceaf263a48f78b05dcbced0d6112c6b2ed2cc1e9944a066b36244c01434320e2450353d30a12025be67bfb01e7f0e3f42e5a949d077844574fbdccb7b646df69e51e60c1bd79a610b807878ef933d6c8c96e88ef9126e50f696b0627ffeaa1aa1f5ed198db94f2ceb1fe17070d621bab3ef71353c9dc84dde3aa8cc488b5043d64532acadd0a74d064ae2e0cacf22f060f82c86c2a1f905d7f0ac53fd93c739e4489d0da3a30b8e050c630f2407a9d83ab802c9b3a6694087bfa43dc69c76c47507178398bae1b5906a4c46a7041c38ea37d945373280c696af78d3cc30c7ac2e888657b49e928b4e6e85cd7b50e5d9177d9b4374cfa65eadc8105d37d621b8b9d5d4d21ed687d8e81ff6ecc7736a836a932e0b950443d2741354232f17ecb2bef6e739ffea2764058588ebb3f315fd8a807ce5c059bfe892972d6cdb799160e4f1a9d77e63d9f64ea92111695a4d11214c6b191e578269b05c81826386768ad4d000f3c4c807586b92aaa70e2f7985d400e5eed685f41c756b3aabf0c604fa369bd6d4f8a1185003480cf5cdfb03224da2d1ad106c7ecb8acb3e30aac0a377b15812c3437774a7bed42d43cc4552b0343d169ff692863c96847759b8fcbcc8ed119c08cdd08325463df7d93395cef730d69e09ad817638429fcb6d4202b5b693cd5cebbd37ac91408b51fe2b73dfbeea77503660c1b487362324b6725bf8094b953ab43b315ab457c722fcdc68edcf0a27146d35d8aaf11918697a6e8eeb89bc701eaa7148f25731f854196dfb60f037efd2f55450be3e938782025e23f8fd8f66f0168503dd407626ce9e06b5a0ea19d57217e6b15a354e7756966ba2862f6b7f98409fea8338cf5978d3d11d158559e4dd1b1381e5a0eff0cf7dbd94fce5f9c4fe70e8864c06e49a3afff3bb28889f21f949024ac74521fad4017b81c4e8e13c0aee875ea1745cf0fc6b97173fbd9296afe8dc9367ec8a9e4e68cdef4500caefa501a5fbe848df64a660e3bac4eadb4ae842c8e52f5fd2e323fbdc68e7f45ce6b5f36ae38b4b17fd2024ff2b1dd822458a9defc78665a2d23c02d073128e4028230afda0f045a9c352ff14f2b44f0e907e4279c1d4c5a27181c5d1992e941ebdd88f87ba81fe40be253b4a98ef174732ad798d5b824879cada8b0560a3cf9daebbc92fb7a43d82f77f1fc8a438f77633fe8a531ef6b6cfe5309e9753da076602b3021e21c3cc17754af2b79ef6b8439c58bcf49199d74ec86944adf7390421c1aa807b7f4571a8406cfd3e0e90225574a558983dd3729c7d6fc670d6298d75f4878d6f5a92f5dd61cf88867d70fd55c3cca666a80d51610c286c0777136c0aa2326f2239121f5ddf59dab773fd11ea91b5ee875cad3a467b7e7d9a625d6789d3926ebba42db9d1c2f43df8769f26bde7487823e11df6f2d45843532071479a8f91d463234b89e01387f77110be0375cc6d8b61bdc34d0f1f9d045838b5d3e4df16e7413fd45933d9f9514bc8c271bb490c71697a090642623709d13293d510ca0af17e7f30ef711c3493ae26143837650d70649f56eb35a70d9ae7977213c5595338416cc71343e41f05c1b31a20902858d17ab511c290f507fec1edb957ac93da05b38c018f513aa2efadf63df16f9ad5dcd243a454fa550d7f89bfd2676d80879ffb6a472a4225a5989978e5727bc46dd895d176691ccd07636492240baf284350438bffabbfae1049aebf7b6c5dad060feae8efc99e68ddf37cf0170d1a94f45eb07993db6fdccb4a145565a7bc5d89c7fa0f773b272b7877f960133457cb83126cbb6982fbb7bfe3f2c20deb41dddf49ecce76885f20be37036b80470ed5d9b49fd9eb680a47d25c708cd9009434eedde9ad5478f04e987ac097c60fe6bbdc8c705b7f544595edfcb83d33ad5c6aa0ca193579d37fbdee8a5b6f4d54888476e108ca8f0f53a8f90cef5c82bb4188dc5aa3ed4e61b776a9adfa787edd9c388efd8fae8262de88dcd440722ef3ed9589d3b05d39ea3d80af2cc63cbf74c9e00c262c8dc0128b3e809cd1069f1a0599917e670ea335bce3ea4fe64279dfb782d7a507f1b1ea04d1cbaccaa03cfb349ddba3f187f50bdaa8415d821215e70f29d9c24961bdb1f149a74b54c96f5d20a74f8a755095343fd69ba0c435f95479daf9c41a664c2ef9affbc39707a00771c2d57a1cf2ed789475e25ed2328fee9c9f1ff5a187c62ac50aaf5abae535c2d0f355bd0ef4639f818efde0d4913e7d217f339b074c936dfd62aa59e5e89756e544b79972de6170ad27d46ef3db6dc8af831eff733d1bbf48bfd608429a2e8b57bce35770394eb4c14b4f4f56978698efb1c6690ee3c6e84e2a1aaef6826229ce63c23e328c923364ff56cd274df0b58913142000c5fdafb8aa5e942c289cf7f4423a98dd5f95b53f4dd12e8b8513e724b1f06e706b26de2e488a030a1542be6e6034ab9c3bbe02fa3ca8bbacc857f668914399865eab3b570b8741b8d0be46e7c699c195a677e13cd4c3bcb29d24a9ffbdf3ea6c25f28fdcfb3b965fe17657057a4f20f02a281cad1e0a79c58de2c98e3deaa9474865a164208f4c27d1d4b970864010d64f3779f62166390b1ff91ec0170e1e42506a3b98836baa37273e33d1f152db6f9c0dc1bfe6bd46afdbd1703a55499182c46b23202bb8f7b86b1e8fd0c46fc8e29912bbaf73f9e6d749d287a7ff8249322ccf22a3205c7cd126db9314067e1e58ceae316fd20062acf2652bad1ba18f7811fe00ca6b4181abdfdd0846bf6726f8c44ae9a70bbc02555df023f4b38dab7cf960853c134d4d6d1e8cb50df81228eb024cadfe24130dfa12dd3825ce30e5676f5d79a1206a2a406b506412b8676b58101e431c27efcdc59a9232e875718461f85da3a39b7f5e4c4f91dbfd074e3968772673aa1b3788dc7c79d9e4af38d2911ec8cce88b7432b851b7e375edafd842bece075009d3876740f8f4c2846d15206806bc18f831eeadfa2a4422737291106d7dc5b5f8aa128f6f794d29fcf996365e7f3bdcea9dda52d052c6ada07facf70d9a7782f0a6707b9063aac220c29df9899b11dc6aa23ed05d9831be7dbe7121258fe35efaaeeb552b1ed435f7b1729470c305bf7f27614e29624cfc101728b63dc3d2f21cabc942c812932989ae5c2d9c5de12d32158cf5ba19e010637318dddd9e0be66083536cf0a7ae47dfa2a4ed93d36bd08a5207ed9a26b5a17eb88abf8e8858e1ce1fd1fb2a45ef36007393fbdf8b6c4d8fc71a5d51ef935867d0c684d7e97f8b6d678b17ff541c9ef40b6f8007efab4f495c0d6d65de42dd28a114534129498d4543c8e6f63cfe29c45080a39465f27cc1fa2747605a89d7c915bc5453b07e8f5e9cd29397655d7d772c108d0d57077cfe87b110caca32ef501305b195e7e638c158ef446a37014215866565fa2cb3f808ecf3f3299803ccc782398f8f34483175616822f81bb121a745c854e44cbe98e8123516072bc517354c9e19ca006e21829d8554c87737c134538182521ff003a5e0bfa1ebeb3f77a3587c74cdb41eb1f1f68d0262b459ccc497d816cc0d11e2473dd8bd5e403b95188e1dcb20b62189c953ca564f3be0e760f91538da7ee8dcd713ca92e7927f189cd6c8444c703f50129b8276167393bc0e617f1205da3e9a5b49db470e49d5a93718c407d8483fafd4b8fe8a3fc33cf3d8b75fc9d489dbc3dec754045bcd03f0f23c5a3d4ca8eb4d189186bb5395a134c6e3fd88d0f3870065757df35787d194d42ad20e31f709d3e50e6130d9508c26dfcea1757f800af9fa3b9d3989dd093ee6cb74a10d9d62e84417d913595bc3712b5e93b86b992b55a401fd01793871952f05871f6b02be353c9434895b200ebeb27c1a7a1ca4b3bd6cafe671b001d342b7c155afd08ee561d56dbbbc680637b57d1180e3190b6bd8582d9eb1b59ef5ec86e8247ac6a99e15178bb6d4077504fd93030b1aea34184f73636dea10799f3ca5603da8d4bbb2f90bd46df8c1d53f3ffc3c0448178985c9c2399d444af89bd91b13e860832ceab4b83127511d8fae22c1a2b394287079ef4f9875e6ea85b06df0e76dca59640cef278a2e07a3091a4fe91f5f27a653bb6921663cf97887a59d2cc6130fe0cbe0515ec8c841dbac4a6d7c9a5128199914de408d3ba47d664313d8972357a0c9308367d13e274ee0082583fad2c007aa4cf6b5f3ba1080895277fc42e5c920c7c22c4a8fd8e3830e1a1f04292817faee2b5a87820064095a9a709eaea18ee82b5ff50de9dd9a029c49020a0e9b5479cd79b2be2057c9a040e2a7c8c59fcd805fcf86bac6977754f45d769a9175a00daffda563b70567cea3f4c4816e26af71c9da8658104c9f007c1e25be9afc223cfc80dc7c2e53651aeb966ed291805c41d3489ef0ae453d8e9e54b47d117a03911ccaff146d89ec0d81914dc117f3fb7be4e0758988ca7787c1c6cee0de356a9177a3b5305cef232dcbac0a59e6c8b5a4636bb42b862275724c3d19edea7680c675d3a6dae3cd330532b14d9fe747b146bab202de909760d7a9813dae1b846cb77f217b19ea6a431a1f66bd9d02b718e8507a08ab8e6f603e3f5ae32b5aa957ecfb56dcf6590f7cf6f895035a206211138d8e6d9968f39c307690b36b902b69ee533a7077180406202604c7de278ec54ed9b5dab1066b3d34b6ea5476a353c944ed95e0a70f910820127cb03201845b219cb6f7fa501f6ad367316f547d69a076332fd38b27feaa7f23c4665d948cfc143e5a6b7c2f564c94f12dab0e04b5150d8bd0f22d469216c4c0a69267caedd0b02769df3f895a0bffbda6b1aa227e51905f3fe5945596717753e8dc5989f1fe7cc0abfa4c4871ce9c31642833be0e7c87164553c83d52e6204353eb3abbdeaf016fe765aa52e4bdf4b62eb9aebfabbd7a18aae5d2e40e9a48f8af681247fd0ac59de7c76191fb028eb5ce0c250f9e3cf2cd3642b93412b876dac4fae915963852b371c97aebfdc2f2940ac89f952f22779db0128514a5663351594ac80df16030174e13fc4a3428a9bdab952539a5978ff0e2ff3e6b11cc06c538ffb61755abe533464cef95e6593a96791dbee34ac2c42e92afed239c14779e27c2bc1b0c41fb6e201c5bb45c802d893b05727b64cc9dbf89ca9a238f630e44ef3be1015c49fa2fa62d498edec30bfcbbf849e93cdca20b8ff94b5332e4541f58112db18eeb68e09e24c00db34a5b59bf9c4c151a1b5c7b6ce40a9bccbcd09729eda813e951cfe8d1acc918253ea507109982e845b15275e732dee3a7160b152c765b10b7a0b6af076b6b977ac7726e7698f44807c50c62c98bd01309188bff27554d8e3e03a69d0709ae73fb0c48f6b841a81ea67f13abda99e6133beadabfe3318676c8a0261a9b2f9a92f036b207a03ba8536b08eeb6e2012acb85b580bb28b30fb19b9fbe8e898538dda16c3509f42ffccd9e8825eda96ea4242ea1035dbd83ef26ff29f6619ab28f3c55d75b647dc4aa76872641b7f6865b0480d5ed0c6c482ebc3e6657fb965fa798569fab8003a3bc356e0bc97b93f15755c17ac52ffbaad55d9f7d68c4453389d7eaebadc64e7339f19a5f45a34658a0fd3ab714303353ebf06996b1256fd73ce35ae3ea9c25dd2a9454493e96d8633fe633b56176dce8785ce5dbbb84dbf2c8a2eeb1e96b51899605e4f13bbc11b93bf6f39b3469be14858b5b720d4a522d36feed7a329c9b1e852c9280c47db8039c17c4921571a07d1864128330e09c308ddea1694e95c84500f1a61e614197e86a30ecc28df64ccb3ccf5437aaac81a2d52950a3c4c0a3a50d3c67f29b707411ae28b452236088a7f6b467b50518c92b17c943531c84f3e7b7f51e25f972182570e9646b60171db950fb9426c88b3b745aa5c29fdf487fb2030413de04af4bcdb65a4434cb83d3a8518d23b27c6da025a6a514af947610affb518e464290d4b18a639cd6ec0d711c01505c80a825c0e603b183acc3756e85a6c5d7853d7b7d78f3ecb3784b1bc1bf692d87b9d41d635d7ab155bef5ad61dd0c4635c27dd90ccbfaddd24371178936900ceb8489bc5135128dd30cb086b15f36bdf22688134a51a51e415fe567922c7fd6d10a4d6a5114d42d45bf7f6825b22b1354d8e88fffb3fe9848f32f75a4473c718173ab8f2da3c67af3fee7bb877ff32ea40025b7f3980d312f27d8a7872fd1c743e62893ab89f25a24f272e79d6d97f829c8c5f2eda9d9d23d246767028d45bf5f8b4edf946e60b622c3a75430251e582d5652a7b78e6a64bb12641cde09a1401c8ba4d9affc177733980e6a074e9035f6d2544017eec8cdf119572de34aec34c40eb2eac6d91f83a0993092ec91f679cd655124d671fcf7275fc904d9f92e829d3b017a9fad80c4b1f09432a596570bfa37d3bbbcc00dc8a50f420888bd7012f03b18f204214221adc2c3b4fb04bbd3c56f616d9083032ab24f48a1b83fb9cc04367fb8bbdc6e81de3a437eb6842ab9763584a21c61e60498476537302711982353bf368c870cce8a7d9efa9ebdada554b3c2c22603bf3d9d212032b91c805e93ba5fd341ca22effab65b8e7a584b7fa80ea635771195bf0a0201fb1bc60f069d94e7f6a04cbacc760b03a414fc0d2fba71b563d7327171271491f81ecec5788909e00973b6db4d45a41da33252f99dd20279b50d0e5a3b3b7f579289dcab9c9f40d17380af8e5ab1aa31f39d011ab238e97991e34e5805906bdc312697c75a2762429c90e0dadb0045c8fc1db27554334f3d601f9a73b76cffa63ebba8239b6896bbec6af1c7b87b9c69257a0d146c0d5c4e8b8a99b43a18633f1f11b6c745ab05c5cbd8895dd96ad89cd87bb9fee30c373378ecf42274dcc02f3ef06ab94238d6e7a1a050a5261520e97de95f3b9f790974910d53c64eff3efc02206c03785732aad68bf0a688c39dd97a8ca6d48a9cf99a3db45ca6b0cb0430d26863add1504195d2610e68e5be77f3382c37d08bbc302ce3abbacc83863b521891f8bd346a2a30fdea55f4274cd5bf1f91b9378922d5b2edb81340ad790aeb3b64d23d88ee1603c0ed6a5134b6dfc69882d5116e1711b4c2a4100818ec9a82a3a69a34b7242c978134f887f644bf8f09c9336721e10cbbca36582eaa26129fb822f7aba8549573a985a59f533d9aa3db2c7a408ac8ed4e6d3894ba4d719bcbe19f92a943c6781fa1a919a035eb9b88777453a59116ddf613706bb2e8135d8c89e4123670c2fe24d068fd928394e7c84369659d1e11033a24a8862063557f6d15ba205a178f4f099d89f97e2581a9eba9d25930190388a208a68c0ba67f2af3eee9641e2076925672d6b46b02fa07771078d6666a3293b62733267c98d985a87c39858973bff094b615d761044629f6e0248548f9e74dffea16fc7a23abb91327722ca4f9b2904ad00f096812af38ef809c0dddae69dd04b719b50d2e3cedbc585b007698969b002a8cf389147b5ceb5aa8182e72026c4df702f93da2d54a2c75bdaa0739b5383e2b543dcbf3f3bc71d5124b412bf82263139a721365bef8eae860d15fc555908d3b2e8e37955f810959a15020c39426cd71a9c696603f1e7e170c1e8722bfca74c2e38ed3e307d23b4e1ccfd3201ea1137bf79dcf7ba0e4716c8938863a3b0f7c283ce6a9c532d8901d4c6f602cdebabe984ba0c49f28734a4d9ec964f310872bd6fe3ec1242abb8f2cf9d9d1cd1b9a552f6e767fb220f391241576293788590c32f43d21e635a2c1e4eab52eed1f6860aa29c8089dd08ccf58b4e9deede9aea4a5e58cd3f59cb5acade9aa7d73304d6870423e654980648a5144ca8bfd7cad7d9898d3df37a71edaf0bc60c8479771f4e9817fa09d78a64d778cc0364e897f1e71d6b94b969d02d3132c8016519cfb8c7db034c180ff789d325674e9ca584b0f9a67e621f9c88c1d8001b270798614b8949504cedc5f0204ea688eab58303ad979130369476ee1429d039ddda79fe30196fa98d198de6d09078bb585e05b740378a2b8296ad82ccad4faea65c32d91eeeba597d19cc5e135f187917d4b1f2015fddbac6b494e933b8cad4010b5794508fb5eaad7d05c850e1024cb9e7fc5669772878836cc173e1f2ce548e765cb28d52fef79ea1cea821ecd2a0bed65946f123e6ef393db7d56fd1e6aaaf1bb6b62dfed1fab1268b900ed8e60f874e5d6630ec95896885ec6035ec9040d36a0a01aae9eb5e9579c0f2601bc8f3b3ae8d16a117b0d18203d3b6cc9957b19bffab378c8ab7adac2a0351ce4c07f7c4754cfaaa5bc5423606024bac6ea967793b3eca5b77a36275a5c730b1e00f862a413164e51f4f75c52b0c914dd301ecfbab193c90375b07728b8101b35e6c295580bee7c9e8bbc6dfd1371a397cfdcc83ddef00b3203b273329d5673b3d9a4be6b26a15c12e96cfe6972668f7b2f950b23204b94ce8b02c382f18b3c20406885e64a76183776cfb69fb6eeff12b914407461eb8c5f77690e209ef89d0285d491d061b4d5959bac3ea6c5521be2d3200e3988191a6b2eaffc128ae5bfe30fb18b3152a4beb2becc3d8689da0d75e6801d797d1d667c189c36629f99c94a46c61a11058ef81849f85c48e9cdfa535bfd163c283f99199df86418c35ee4c092dde77962baae4fa2f643f3cc750d02985fa18a71c7dbcb258a2e3ae07a38cc5bbc9970516f06dd338e998f1c186b0c076e656c40fc5318181b3ad2dd36ecf6092cd9ffbaf6284c628a0725c0ff3ff90ff10be97d272a8bde7333e7a2da29c604f54f2d85973d2499b134bba072af4f17b23a0a109087a9df5abf8217ae16c5b5dfa2029a9a6deb3fcac95ca4b8e39889779bd6e17f93fc849886aa24fadc7a82b27b86e147df2bbb9e6d0db41b045bcc09d655d83c760b33f43167b105a26dd43581c243e6bc6b77f5c9d8b8e13a214830928fde0e575e553868c1a618912714315dbda6be2b34da9684c4 +MD = 1b1979f92d62c71c5756924a1778ef10514450677754acd36cd0a9d71d9ae400f556e03f5dd8337a24e8e6d129c7c919 + +Len = 84976 +Msg = 9d251427fc3c6f7050f75c8c8ec5a0ffbedca25eaf22c556e94ef4efe34a7f1276dc254a928672c730ab4ba887f2c77a83f040fb7301aa240276246768f6cd36e11ed9c45e6be40f7b5a851eb2cd2787ceb11435a2ded368fa3eb4fdd232a9f0c631571fcab36d511b4d3576761d693187684793a482e72abbeecd3a89c7bb4a0d5ec8e23d25b694f7cc81393aa9347d965d009ee1b58f702cce96a5f57daa4b9fed54961f8a67e0f71e91ee683a3175e3d868dcc23e7344352638c67f1b1efb622622c2d7aa283d038d8e1d679807205721a7d7ade73aadbe3dda258d6bc1633f515beecf4d9fb4035fa04f9f8b5f86d87fe4170b768db4af5ca54b8933388a1eb526a36e3b774cdfddee0a78dbe1b04f3c482245b4135ff0cbc1bfd93c2e79e89bac671c3b560e7f4fa1d95a4f34a5a59efa82c16975b86ad25509e74e4936834b15c54117e500ccfde041adb1016dc0ee22bfe95d5ac703b989b2193131cbd90d88424595cb2cac2ed4ccd9c7ef118a73ea5f24576b93a4c78641d9ac8f3fd1292d68917eb09a082ca501465aa798ea7778ecd92150243645743e8e880b9b52e62dbe8b993e51c93d7a685c31d00ac740f4ee7281b0829f7b7b319f8d4ce6468eb0cc9cb01b59d5aa7b8a841613700b1787eb564033b6c9b1c1a37683fb289467dd1b2c89efba16bbd2ee24cf18d19d44596ded2682c79a2f711c7a32bf6a24badd32a4ee637c73b7a41da6258635650f91fb9ffa45bdfc3cb122136241b3deced8996aa51ea8d3e81c9d70e006a44bc0571ed48623a0d622a93fa9da290baaedf5d9e876c94620945ff8ecc83f27379ed55cf490c5790f2783faa4631e7a705d5c79852b0c5c410498b580a4dac511f2304067e1d34f919464db6dc5c80918673601a88a8ef41e80ed5d963e7e87c104934f9541f42b43b1766b6ac8d0bf8a53abfabb5df8159f4f8677955cd4732f1c2413e777d0140dc5e1310433dea5ae69e2eb256af1c8acbb8c8be5c7839444820b13c34d1012d71acdb6a3d099c16cf1045c4e7a22142d0a2722ee4734efe67d71d792895c2d89f66180b065aa1dad3238d59e5433010a857ec317a48f8efe577ee8bdf45b6e0ca2c51991bbb8c15775a7df7dc2cb972b74baf6caa53b78755659cdaa56b6dc46662209b09a6cb354027801538a92df781f02436f13e1b531c32b0ec37715802089a0d674ca6efd8a21d4c4887532e0dacd7f336cb6284e1ce61b346f1e1e608255660a441265a7e31ae3af844b50a237c8594d2a56b94a1d0652c615157c8655109d2c8a3bfab74634cc4aafd4972e7956b71911bb3bb11b6cf74c1f22d5fa7f036cc5ad0ed4379ab8b81d72d7ac8b86c0c1208aac578b0061334ef40ed2c2ea76fc5c15509c2ec9eeceb1331e3ac1484ea1e9fbf3b5e1b32b2e55fca01ae87cb074792accf9a5ba1e378d5b6fe7d9a5477cfdcd56fcba1c120fe89fa256741ffbfda5534994a355901a3953935bda87f57de2699ed51f2360ff9045da2d6cba9dbf66fb8e1430828ca03e82523fccd59ec9223593e717b05b25d4561248da35dfe147876422542959f1234f733bb8778b8b459bfcdbaaab4daa3c3a104ec578098ccd609366183240347024c0f6a55404e9d102a258e0fc7cb550599de8366a63e782eee38783858992ae68ff199b56500b50d24e07c28b316f991c80be34f5351bed991c2e9e0b7c326482f94ba264b91a4972c68f5740b3ff9ee98377c700c64f96ca050270aa603d1adc7635c366853e454cd29aa8044c8ee7296cbbf7745fac06e767ac014b7fda58dd3e7f0545fd9ecbc73ccdbbbd4244fd450434cd37485ac45a0ad359d71f32a7ed18d071e76963634bcbd29a55de4867a313885032c9805889b6208134896c8e74cdd00d3511b4954046514db268c3adad615f894d2a464bde333a804c05b196da2628e3173cbaea0f76f1dabe28dc58cab5627e71b2d524bf48cb5e05da294588e880fb76349de91e235b4b5f65bcef61d8383984aa556b96bf78234952fb26e4de7f5b383f841bd61437a87f698afadc938ac26f5aeea9ca5eebd8ffb350be57cfce0d47a697069f132cf7057a6f02a2ac001f1b0ac664c3eecc850f464f974a82151989b10034e2e6e242d9e1938e1beb415a6f020827e936c2306053213823c0fb85e8a7e42d05560290e3e61d26af1af67b5289da77a40076e3dc22ed294c51285b4bd26e77722b34ea0bd03652c6ffc688aee964de5c1290a56afadcf32bfd45a39978c39c8f2d1f5739e9059bc8645a8b6a68cfe37935b77ff225161d2a8cfa63bce20e24c6246cdf5577b3881d0f598b6e4f430f633193775de9c22fafc5eea59b5875957ed7c28a47c367a22dc86c91a2e6e7e882cecd98918f08b12471ca701e2120791e0fca61f7154a6f61593ba4ee74e4f83fd40de7775e112cf05835cd2d87385710942c6b4db584791f896dcc3a4362c7000afa6ef7a005287b42d8c2b0d0e5b8bb2e8fb032ea3c48d01fab116e9988db2e393d34fa9b0c2b2df75a5a8f454e2387a59b398cfd9a62dde49c7c72bf7ebe32297e4166994cbf6e3e659ab22e9c20dcc0f90d4536c751aca0e9142efd6df872a2649e25e0f06ba6e19e8c02d3f6372248513443ddeb9da71a39e28a9a7d0f586c97521db81eb83da6af37657b85f1c1064ab7703a2dcc351c35ec6fe0d58d4b4ec065386bfe2c9b5640a3c47071d521bf8d9db295b668bd6c853cc3159efab21287e05c40ba5128b9f8d908f8e16cab3ec2eef335aef9a9d3d0da7082ffdcf77e93ca737e77af4d9680e0175cfd3cc54a90b31a633c056019becc5c6f21bd815b8d2b646e60cc70b67fc0dbe4efcfd8aa9ff30f6788164a06f81c71232b24b8701c0b17589a32fbe29e823bd7dcad4d2798b6ba89bbb3cf6226d295e8469a0487e9737484506954e0852d1e7fef5c8a8923040311fd6557f4f0f4b2049aa6cd669b6a6339a8f7e578dbc96e224d66f998e7e6d24675b24a85fc8cafc04ed07bd6dbf9ccc0ca661474495f12092153011b8d630f714c2510ddf5a174648ba0769f51279761df3e4b9b76f5f27c91a909dcbc84a2daa94311c4813ce938789f2789a4fcac640f05f1b40b96f6c2c5f27ba11d5073c9b596b6024864f6843e54f45c7d80f31181456d88af470625e6b5be3358cf6a8698a5655ef321838f044746df83bc55b05e8529df0b120aeb1c7b3a5a1409705879f887a22a7b78a2f30186db5fb7b888cd4e8c80c6feea5d8ecb57ddf9076b8980188594947bbd0533091a19b87906e2f727fe3589138ec3652d7d86b0d0455fd78cc5fdda283a00ebe76c5e370b25060498e7c4fc5ade65c829141be16ce423a3dcb1a4a48bd8db4324e2758474ff3c1b29b0f6c6dac38ae048846534e4321c0f91b05399aa7ddd6447e62546bc7acc6463bf93909c237cd511352c4f3f1594403229d0618f124f76d8df3525ec80fd08cd7d6301a6e881ce0d9038dd8577d1614786e4a5428079a060356ecb0bf8192ff0522dc202f8e2f3c2fb5084be3f1c98582e570dc9ada30b664f98dd21c9660052a7bb7ab83de76dbadf3eecf355bd0dee89f1402e8315df72977b0637dd2da47de2d3d2ce9dd7647da5c8be2ca1fcea90ff7ae779e916430c74deec531bb543f96d3e724e02fcff91b3b7a26f0a2154c7f8b9a9b0c6f05fbd4e8a37806b48034caec4013f539c678073d23fc67b73751adc772fdd04e95c0c8e4890c3b52c0f000f2c28aa7800c4d24be33e38d93b7511137c20078a4a62829ade9f26e1aa8d9df6408e9658703d0da5b046cd0dc27c3405902537405b98a5db140bb0d80aa6a9cdc6dc0bdd33fabbe803008eff4db10c1b7be6740e632700b9b47c69809481aefb87b912ee9324637ca2148297273c20bb040ac6dcac37189d849c5ac2904733e84bceb173d6e38ec95529b2be9746f84ef53a35927cef77ed4e108a87451fc1fcdac2f255455ec337e6e7245ae4f71d3d141dca181c77a413d88301b5fc32df9ffb3edd7a28be8a2e1bf8e254577616ef2a5c8c56d4f82775eb9bc835fda7153978ea79cbc72a6b16be01f49538ec6bcbfe9e8435eb9a897d4e00e6f090a7eb32176dce3069cbef5795ad6004cf80a53b5a8cb89bab845191cb5b63cdfd5aeaf2a170e49258c99d5969a13088635b4ba504cd32715adf071b285448b38be799e1dd9ac4d7da4bfe8401886c0b3da4e573c50afaa041d233822e929c8c83778068959475e93879984127081a74a684fc0c65eb160fa8865e2ea5be673f2d3128ed8f05ffaeba7cf6f6a1c944abe42317d8ac1790a5d6220f87557fb2b4d13e18da94966b10a77c9d0d3874f1973fa8be3f6237704c15cfcff5057e84d3b7c5d8956cefc0f649a017ecb4b12a22013b79a94ef2bcebabb525e07f63e58427eff188dfb70647e611eafddd27f6337006d17e39f17e69e1fb99b089d5ddaf68e4ea19b59645edc7f7a1a67b7f5db3d62e4d26ebdcbdb0ffcab3cdec7c753cc3cb4bb2b53686cf3479c1515561678879de760a2c5a82a74d49fc9f7001b41380cc9dbaa93cd0d574bfd46534731d9ba23cd290c413d43613a1fb8fdc0ca31ce711679957532ce7d1f2624ae06086d49870eb217ab0bb4598f93803fa4448403fbf31b68721a1ed913af16721ceaa1ba5a3492617d93fbc257a3c649052ad65d201847b034e37cffdbe0b26bf6692590ffd720564356983024b8e1b67ddda74e6fde64f9283f6755da737ee81cf45741fa5f028266d40837796b78e478ed556c4dbe29afb68e7c8f91cfe2830b1cb561dc44bf52828cca2cc803d27f70da8f1b4c4fdc507a411ae1846e63a94b62de5518109d6310f16c94833aa4d41015b2ffde0c1367ee07d10044d798d7584720b0205b43208ca25e134d78567eb13f4f7e956b55628c331d703583f899bc3a2af7a77d370760002d0d89357dfbeea7d30be4f618dccf637e95e8fbf96ce1cc6b9ff00effa4359b3807c90a71c822ffdc4c5f24e44342097305d1b811dd536e510dac88f37377f42d768f6fd86ff897d9a466803e126ea579347240d8479bb079e53f63b8f1917b6bfe3ece185fca1049a89d808ce6bfb81f966d1ec358250344ab1b37c6ab3cc181f379adc81431e9aacd56be671cbfd1c4c004ba596b89f75fc3e26d830cb436fdeaa2975e29aa947b8744824340d9531735ebac011e250d19c4078d9492a27c3e685c13510caea14a6ac994a7efb6dc756c845c50dca0b511300d0071e981e1d1e1089a3749b88085ec683e1b65b2de6dd85143df23677fc47c657e915ddd0846e92aa4774d42c2cc909307046f67d96f0df50b027ef3cda21da340797c0e700be554ca9793f7d86cdbfc87f959403e0771c21a416bd03f3898390e90d0a0899f69f9552eca22421532e72960bfd6acb5a85aea326677450680a9318dd83dd58ffb9b0c933c6c80244a0573e10f8586081622034bfb736f8a4b7641b71f30e44bfebc396b8731233865b9ffe0c4e76a6d4fb9ee04973f2f327d22c7a2f2243651f7cf742e170a9bb03a8715f67c76ba53c97512d2c644f4ad7a312be81d823c407b67354188737a2a1cef5e8892bdf659f8061a5d152f6049e723f6ecedc566860df6054c47e61f04a175521db427cefe7fcf5d09e058e296386db127df7855a1040e5ca4c1ed1aee5c9b692c3d4e74afa543535fc44c0c20e280d32f8f158a001212b3f1a2f2fe45a2d43c4aaa8cb7ec2d04a5c54d834d586a0fd57a692764419ca593b95792298918b213ef987ce9425b75ccd0c8a916db536d408efa1884d4282984425c353d4712b7b88163998930d5392118e207f8f8232bace3be835c4639210e432d76a9fe454772b6b86d28361ea15af4062a845d5dbd630f22d26b06442e8a2247b0e02d24f3dae5e36246c09c50d2f8c1ab196967a51b67c3902192cda49066478e7032165f69959103557ec2ca11ad90e458bad5752e842d47208a5a25a9958969eadbadbca75c3ddae4bf466f9f68e070a2a03ba024faac51e83b6e244e2699cdb0585fce0c80465365108bd3e4e15cda87d7eeb89721dd6ad9547e12e6aff5445156a0f611d84707670107798a7d528c88c07310ed904cdc84341e841b7838485e4525b74f9aac616b0f5dd2e8b36e0125d87d6b90dc57316978a3fa4535bf5437a232942e6e02ebd199d372981a0bc2dfbe420b395ca9040980b2e80c6f16f26e0c7c1f36b8e7213b4f1cdb0127b86c26b085824f979eced4eacfdfd96acbad61d246bae111a58c288d9e6ecc42f0478b6d9c534c23c4ec6c256f3424df39dfc39246f9b5eeda96f9d3ecc052224fff8e541b109777a8072fbef59787230e1403dae14e3dc6f2cc4fc06c522b1c33ee9002762cea09a489a016077c68eca4e4930a9a4ae1308ab69ac1b1a6bfb728bf40d7221a9c6066fe6dd9295552829acc01aff65238a21ec06b5631309879aacc1160c36c27025bdfd966cfb4dc8b5c34c0397a06bc920b94220c8f724dda46af722dce942265ff98834d5f1d5f7d65b96f4599cad586fd8c5f43110e386f68d3e3aca8251701ced2ec0b7be153bf43b45f42da312c07411383985a46f09fadd4065be4816d7c45f9841f9ab361f772c020cfbfbc288992e43f8aefcf0ee1722a2aba084bae2bf186ebf83006028c7f67543abede43845f58d3893608dbeb4230f14587f641a76e057433d05bae04c6145a125c1a158df30bf011c176e003ba92da9cf7e3d054f7efbd30f016dce6e351b2e51bf2071d1a5805b316bbc3c137ca471ebcc6d2db3bc037ae13ea07a96399ef3182f8a0a821d794fbaa29ffaa4641d7495b01b1a0b60173d9b027c6d2a3677f7605806ac5a5f52e49f053ec3562940bbb6717052bd33de262596292e94f44d421383bddec135b223c8dcc21e9192b44d3458935f33fd013c6742ce453a3bc9dd17f8d6281f6541121e6f5294bd682233f9adacc9d3862787494d943b86d393cf56ff7a12dcb8a8bc870517ac42733173ebb8e5160795f910b401a297de835220b6e0d12560f68f26ece839ee887b8a17f4c064d036f41fde8ea421e1ac14aed921e202e814e79d5a365edfe2f848d426fb0f517ec76940f9c17f38a2574f51017e4e36e45e527b5f4bb03111f8a1b8a9e7ebd5a924bd046a33da106047f9e0a0b56c949fa701d13d15265802f150dea7a29d18d8b4b81538cefdd0a6e4dd06bfad8445a358ba46fc7b077c3d4c1bed28136c4193df21186b782fa1f996c2696450de7078d74682a5649dc44b6fcb8e3522a278630dc2b80c1bb9abe3c56fb19a85c23ea48e6d2e40ba2e59b3c42868d4b786e7cea6619b229ee315ebd9ad87663477d7b1e3f6f2d3640363fdb1f92410ba5fb35e12c769b5e9f5089a3a4493d24546622740ab75684a6409b2a00869ee1376079bbabccbcee437ab7650fc7ce5a177078c0c52600654987359f81be078ab13090c0407687377f12709849deaa72e52f06aafb45ab66ae9ca7a21fb30b5687de1395972eaaf8a6aa3db3cee8721d51e424891990c7f749d369d837002ad33feb8aa22c3f68705eb4872e1b8f85a7f2528af1ac91d695afdde4b8641fe69f5dcb6e8c5c33705d0bc3d58dcc3e85a12adc826b20b367c0451eb0b9238cbf09460027aac3a5230d325ab1593d7fd2a78ff4a35c128ffc15ae184660f1b124afad2c5e83df0f210f76eba2f70bcdfd19763d764afe91f3f45f4d2e365b37a800d7a26bbe2acbdae22de9130da3937575920973ce4133ffeabd4fd0afcc8ac99b79f4e7a02385b113dbe59a03918adc5a480b144c871060776c72c633c224f9dde8b64ad045a754131563905f41fe82262c94d04c3ca1d618c1687778e880c956c8491dc52dbb347e4ee5ae9751791767a4495053ee52b14d70937cd58c38b8848d3fd905382bc2a40cee4d323c74fcad439afce9f8bd9293de764ed039c737e5ac0cf506f1939f22c3efe4c66f9cb2558f0c3e85084cfa7a8fa3560f8d86d7f8a9230a50e66d1a88f85d0dba673ad8feeb0fad9b798b496ff88d3ad9e422094c093471698332d5353ec83084bfe9c107ec37b2b3e8f31ff2ada665c5ca135c4e4093d2b7546f4fb5fbb3f5bbd6240b1f06f6f654c30ede9103815f69cbc5318de3d396c0e67cfa89b3a2b5d656742792cfdfe104844915c9be90802c55c239696776462c9606663efb07095a9d54a711ab54fb39c93c460b23768083f494c48f5ffe5940ff860334367358bf273ff9fa3de8bd6afe52ffe3d685d90714b7736e11ce58a49f666217fa5a3c8a90a0a0dadc1d902e902793d25c50e23c52a4c6743178ccddd231f348bb3e2d3346212c321a762bdb2b24b265096a448a2ad72e3043801e4354734744fd91934fd43c0c7e8d64e9272bc4dbfa7234688709e92b20ac76d57b72a4ce9b45e71746a75bc23e897c40691e9261212b31d6a98c353dd3f0cf7afcd93109ca08c111ae5bfaddf0b31eca377017f277a90517680e45e6a8a4fc873de4b2794fca921aed5eb3c0138eeeff08dccff04c500093491cb5a64d2d7072b511b3bd9b1fecbb9a2bf10935714f57539114fb3dd4c6d2d333ff0d001eddd6090c9f174a6d335c2b304d29c4fec25bbe49a163ca8bca6e8cf07c8b8fed97298021df36cc2708751728129250abea849f72dfda51097dcedcbec8923b1e3ed5e0fe1e9c9ef1ceaee4600be356fd2a6a7d893acf8fc2736c591b6dc1a025377371fdb7a9414208622974738d4666f465ef194ca3d53b2ddf7872d68a4d97037ad9ad44fd418c48274ce20400ad7deb0f5a9f7ff7aff81f90b1718d6c91e835647e9951091e550066d51517ee0aa680df46786f5b9e7dcb18aa841cd91b9d4fb8e72e364d3620c3c9389a2995dc75385e495075101f30a2dfba16ef60592ab4f089e89f3a377404a71dedd3a8a17e73f4c9a43be5b0b5596e66c68f92c92507a3fd54d66080c33588cb9c8086d806e64b4de02e2cd170314d370f77d0f9f0aa3bb80f9650b092e8f6e802dac11eb2e1ba4c90b6562ff5dce4b15e22ab4a223f202055397b35679169e9dd2cd7b41708da5c328f01fababedd5c3f3a92584e1909ece24a508dc5c16a4767f14b5687ce13e341f2b0e043598fae2f0a26a2b8da51741333612811fb70975fe28c64a9a40f884b9bd36f042f841daa2bc89816e58f3c84af3da2e0920540016b3b6ce12d25a1bbe4f9f581c353214d1a08c6dced2bcca2f8467cc637a0d818e5a8ddb2bbeec61f6885225097655f645f67ad6f33bf9afab90c14175ecbc5f2fc7545b2f2d36bf2911563d52e333e9c5655ca626ba33de86bff177879fea02c1a213356446c19b1e91b38a3fa553561b9539c4af77f1c188bbfe54e1bb1ed20c92d0511332145e9eb172f317e43da30d2f1918d69bbbbf7929f0c2cb67e137d74095978318b77171199a5f24c77a3a64db058ae34e194020b4d0a88ccbba99ec5469effe21333a5f7033b8ac779181e74003021db794ac4602a5ed6d10316011755541ca750f23305e46e5f81c0ae260071e68ceffb36cb3bb777bb65ecef40f4b5f75303bd393ab8dd9ce50dd6ec395d75ba43c4dffe62f884e39afdc1abdad7f9273789c08f299a2f75bfbe2448e5059c49eafcaff838211330f9fb39c24b5b9f323eabf35a7c248a574435414aa5735603f719e3bab73fd2de5d00adc8feda08c6dcecde21cee25ed016e5b677f7212376dc9f03bc7ccf445a3880a63671fdd643a6bed97b8e5e1d6eac51ec3756b985211fee8883d53a0823210dbb815111883700a48dde36e25681790c6b3f40970b81459b0a977d1a6ec78b0a464ff8cf8f2f9f3053b055399ac70177abc641342715c226d26db0db18b5eaf8eed8f5725b8bb6e4d3a865ae4a9dea163682d52b586d3a14a88d3d16768cc57c0dd2c3c48dda0c34860cf4cae684778a83eb78e72fe601d6d55c6e3708aabee62bb3d01096a8f391d3846f0a1ef95e273c66b8e21e1eae0fe181c0c75f9e1bd9e102c6f0f666f19f54754106348ae28e989af1c69385b3026563c141ebe580c9a63604e03d92aabf71761729c7b7c92340eecfef20a9a560c9990c312e0f6237e3c41668ccba7374c2fd6dff58ee5677cdd8bfd655f8f9ada687fe1fa67a5497323377e5345ce051b17191f158bd3f1e87ff2e16a3f2243b54c71357d5c4cc7a1a1aa60ff4e875d8d5894faa6792d76a17b8b72a8b33b9bc7ccce8844c6d3e52f3d02d239efba86ca79ae384d61db3fcf59bd78c8c2c2e83870ffa2f6ad21eb4580a79da92f4fc9f902cea0b44ac49498a2efba71759f7330c06a4b3c1920210df10289f6162e6e427b5efc833cd2bc27dd8b014cd3ba84d645784bbe13b7cfac18795dc9ac40bdce6dc5126240ec01a292f81501e4fb625286916923a2ce3c4d7d75e3c9fa6bfdc5606baaf75cfaa9324a9ebe37b04b57cd0b1e6e14cf4eb116a95fe19f0798784fdab88eed9ae5fdfe8be5c4964090a96f5d852338a11d762f239d20f2dbb07492651485ea0293452fe035eec89bb4a15f03304d382024d3c17399686b7f993ab988e756969bedc9eccef60572c99d87c68585b7bb544b10f422b980b2fa3d12eacc99ca9b6ddbd05edf90d23fd335a3cb6cee286a467b74efb767326e5482434db792a99e8046a4ac9a6b1ad4c0623c973fd267edfd9a48dbba0a44479652170cd33abb4add148bff87efa8dc980e9c5186993deb8191d4dfb3097fe7c794d44ca8fac7448b2fce7f2f8543fd63200922caaa720cdb4960242bceabf3ef30c338bc389737927db5531993b2df2a80cc32916fcef912a934d2aac09016160d2cf59a5df1c9fbe887a4cd83be2bf5162da8664f195a2e989810b647f5f6451557aec7d29ea2cd578e99d4bb2f89caca73acceb21ad63800d306d9cba43b842f8b89ccfe666b10b1105bb5a5cda0b384e86853009a1637c82edd9ab4638ed94312ae324810cccce05611f8a75f19b72cd2017ca261c233d8f1bd816bfb974e3a3246811a666c0acba8e4262baf9bdeaa7aa2d1fe3781341864cd175634fdeafa34793fdb2ef4d25a4dfcc69883cf31e62871db7de4fb4370ce36e3ded568b56c606ef6f2310b2a758f806056a45db7c8249621872fd967c8791f6e6ba882b878fd4e2dc9375a1c04b4997dcddaec7939b53a2c85e1c3a908abb13e6673f0fa0755406dc70889afef056ea465ec247d1f248582ddc2600f18ad14dd35ff5d83ffae6d3d546b3feb1eca285d86a4afcd64ba9eadf99a59a4e0c76fd342146f5c4a51fd25d82924d97a4bee3098c83271eebcae353f31556d4840eaa6f479ce8cce8617adbb0ae180e9cfe9a60321586fa775dca0194ffd743962afe0b2f8231b7594e35e66d61ee954a040462f77c6d1752c5178eebbf9c09973e308e657161225c58abf3f55821aa4041c988492279f42283444263ef05952bcb1a7f75f4e78c85f3459af4fb61dbf44a5256b3921dff5b2ae8d29a08b484a853f444dd8745545ab08b21f8b62fa8fa802744a365c9b7612e7da5ea971946b16b567508a2fb284f12f54f5d22db7fb775c0e8a4f81daad9006b32f204a459bb63c99683d28966d79d1c79becbf5eeafbda79944d38a5827434a003cfc064c4aefc60fdb80709e88a149177a1c1f6467aa53fcff72803dd05982a437c79f7cd471c4777c47313dd6d233cf3b9db88f63de4e7a217fafca68c5bd855f01d099ec6c4d33e2914bd346b245075fbb41be28cc0fa77735698c551a433a2f3559f1f761e8ebaaf930ed5ca40536730f5b7f2af61ffb5d5e2e0229c9cc2924dc9c3389e4fff531d980fa8d29ecf302045640eedee7ec30349dba5b56a0d8ec5207cd18582ae723dcac696cd674b38934d2b1e8f90000bc5319137e3389cfc2402d3d274dd247dd5d23d8501c250e751b5130add6e0cf4e5430bbe702bf8453219ce23b388e8deae577c5eb7d865a5212425ba1fb12ae629265023a26da8d2b70a78ac8aac82fb9002890a37d012dacd4268169d80e2495b82684fc226340a7b80d65641717b3e437b6e70c9d3dfee1bb8e4079f04bd8641015c29177d25544521f2071ffe5a0e8e693377b5095549d42ea1736c644203a4493398eb9b011adf95d3a86d7ca7d23a75de094299fb53c04ba8444dc9fa294b02f58684a853c30f8581227412ebf40f46790dbaac5975a6b800608a5b6b6000d5abda2bcba0b79e99055b79e9acdbd5850b6a6369f8154f1db1b16b411f1189695c7c282c725d5478663dc72875ef54d99d0a86f95f9d8420c41d37a49ea2af681053c3f4501ff8cbacafa5f8cb9854eb36d46a8316730b6c408e38ab6e7d3a77cf49444bc3645439df985a81383e9c62deb05930a601aca72debb47f1908f240a245f25852952e6b08e22fea4349f5e79d86992896ad317a931cf44727ad9f6b9030174485184f082f746c5c752127227c3e73926ee1608c7b08402c1ed308a0a2f0f936e4567fb95a3659fe542efaba82c12f96b7040386ec99e05688e1f686df6ee057f8b7852693103df96ad93658b8f5155ef87ee00fefb61becec4131c54f9216cf48a42bf6e1ea62743f88a2a324c36d0fb9b6c0d08b473a17d35a8106fa45e2c55c8337d24dac0e9859a40744d0137ed483166a70c83585fec494aef1e96d8b61bdbd7261dd3e8a8d42962de2c4ce91d3dc05a898ae6644ca47577f2d23f35acdf2bba44c9b881e7a82c5dc2607daee344feb40f046c3bfa2e40bbd63b0c0972e83e4953a8f7311879f98dcb7a021dd206131fb1f97343eaf2418303a99bb8aaff99f0cd4c0e5adde2379f43f9a8aa6bf9c3da1cea9a208188ee7a05be5cb7a75db56d3c236c738a496cfee63fafc90388778faa485f36606abded56d9cdab1abb170b0abf902fb047e0190cdca61e4b4aa4acd4a3211a0a101669619c7cf757704556c37127c3e246579a32512a0eb5a8e1ce467b8e2fe101ae8ad076c910f015a6ccf0f881f492cd29eee12d8a1ea53ba5405a42050c77c7ecae0de960ac7723e1fa0db63d263454ed83b3d264c2cc6b65cf9a97142450cb376f8464a21e4f235d5a942ab7cd597608f504e0389f8dc0b9a881db39fbee94352bde992beb0a8c9f7b0ed6907e849902bf6ec784095bc407879a9ef517b3ab6c8f66c75c971bd81eb7e84a55ae1836614f5bf8b594c90dd5c96f42c3fc428923e6d7afc2b7059e51adbae655d0b6f6bb3157046bc657d6bb0a5a77251e1db611ee8b92dcaf5a27eec8e13b3f8ad32266e1ea7b15128ad71db6f69c96f197aaacf30d1128f47c3d3ca615c96130ef71faed70bd301dc487745bce33a81b52ef6b90d6bb362b0e26d1a1a31179677e4dfdc0945b4b2cb75055654bccc6ffd1ecc44462f162c7628d24582393c693021ed5e7cfd5c4d3b5da476fe9d88213973b4d8a5c445d3e2bc8cb4611d0f7581d7d19ef8dad4bb7528db0d842e7480b15436ddf0d348413cc623ce7f8598a0b22e1402458423e2c1fd3383ac169b72adeadbbbf003255ccc701dfaa317ded30a4d3df42aa451ac660433403ffe02e0745c2ada6dfde60ed9e004a2977ee9f7d25dd4db71e26700ae6763ac048db3b34fd3aca32f68933ead3e5f2d2160c1f25385621fe0e56cc5df4b4b30c56cb5d18677e77cfded32d48eb3b7030a666faed2ee6e27405668e542da743248421024616f65cea034cdb7c567938c1937fa119abf805d58dc63471f3c651c56b8cc9327e4ae02e1e46bd19a817b2f187c6a05f2212028f22066d3be99a654b776f20522fd487e86a515095429f757cddcc771213cd7f0d4c978716618c04433238a6498e3bdac5721d2473d89906902001a3c70372c1ec780a20961e13a5292679a97d2bd95f31efdaa739bc6cdce7d8f6b50273ba81893edeb83f51d9ce89bec2c8618b456baa1e4a576b70b37ee0732c0948e6fd14700b75bc76bf46f6d17574719b2f08a6ba97ccc36d97e5431679123f0ecfc3213d687fabe0b8d3949cf53f438e798b86dfe6d269c4947af0067539b4c8b0950e5dc04d14e1c1185e388863acb00d569286860bb904e8fcdc1cd203090b1bfb523dbd7e760e8a7d8a50d9821ba45ce2404affd94fb317e38de62a2eba5a746e8379ca744ddb578bcf62532b1edfeac71699aebb8c33b3b77bdee7ed371b5c57187e41df1abccacb83e97fcf34c7396d8bff3d32fd2b1ef12c8395ff1dd2264d97d7ee1f5b4756a55e62c9deec0ecb5e26e805c020edec191650aeb4bd1384da67f319a58def7da1954acbeaa2fb03016de0a2f386109da7dfe2acaec363da563f7c4f023139c258ef1df0630830830fd7758f3d9b279615efa62a5d9f27a97954c008d5d3aaa733c258c1e87a23cdd1da23451eee8777fbac178241bef3748c6e6ad160e3b6aebaa597dadb776945e01c564f17eed4b5c1bbb34eebb13bce37d2d93363efe24b660f3785cc9e557dc2e4ab17a91a83d1f085060acc148508e43897993f66a20fbe65d46d3c4d9cf7e2e97e3952f0195f10ae8c20533753c719f6228d53d69a5e3c5fdafb9b039426d8716c2e961e09af9a8eb24a21b82c9b6192069a51ce3fc96843d7ab696edf9d0c42d151f2e2d95606ac14c2a80563c82392b02ab9abe6e3bab8471747ddc3cd06a46a6de9fd0ce4dd8d202466bdbe00088ebbb8ebfe341fbc2395a986df0539503c83bcfbbb28de97b86109ee3f8fc558dc95ef6933abdfd52c6fecd6e108546171b9d998ab91a5bda463dd9f095d7acd02bb18d1fab2c6ae29225b989241b0c2ca794e514cebccc7d7850a09a9bba2bda7a7ef86a1fd469fb059604c5155d0eccd3e85b62dabd64ed86129aeaf0edfa321f8be27c7cff2324871b572bc993757e0960a27bc3634ab1d64b70e77db8426080a0f15eacf3bfe5807a5ac1290568cbb1c5636773f7a751d2c2c99a2a632bed0787cd1795f866c6587cb4911dfb103931df452fd0c0a256e0414e09e035dc601b07 +MD = 9dbd0cc2c35ddf97c3940ed706ff7a2cee1169ff64661db7d1a805619422eff4bcd7b3df0703cb8fd3fd060822dff322 + +Len = 85768 +Msg = 4cfd1111482e4e23f8ad5c96049aabaef464b87ddde2d79f409f2f282f7506dbb15d3f9d6885202971a359048c8a42b47dfa652db2bd3c8c25ef3c07849e122490932c2ac36e7bd535f9774ec0b6645a62bad4d2e4be6e53b974ed3629176cc3af46e0a19f12e6910b56bf5de847980a6d4b0f55bc0ff45ec4d34c9e66099c1ed61f64eb4599e9c5bd6237174c64672c64561e9f82d556130eb76125829c2a9fcfc5bfeefd2a0cd711c6e96533365826108207977e3b1ddc5ec633b4c7f79fad61e2f9940eedd830d02add30e7e4f3613978d424f766d0207ea8ca347b4383af531b1bc4c20bd438c2351a5eae97c045a7e08d303781f74634062e8be7a75c0f6e1a2b665fac8957ae90a8d8d177483b216138a284b21ab8498868a3534cb4347a8734612ef77df65de38f8797ab12a971a3df622721c2dd85d57e62075912863f093b9f77153a7b98d5d7524a5ca6f85d4f895768f8761daf967bb24af7ff6d84494a07822e4850250e892030b18d91ae0d3f6b8e5cbfe09172647a664e025113ef688196692ddbcc37addb93d34eda2b840885e377248ef11243a2a185a39ab2a29ef5fcee738657f8496ab9e9713d9e5dec8dad712d8f981d1f1144c56ab02a0af34bfde6a1b88cf867b5eb1c7f21cd3ff36c3572624c4e3c01b19635e0fc42d06f6bdf7940d835e00ea47094ffee82d32608c3a14c2bda17f069e1fe8ce4c49c1a3eeaced7501857471f9278790b83c18c4a9e2672950655f4216b47f6d17615fdaa680eee87fe06190e97f075e298b02d1a102a5cf3989f15c17e39a72c22e41f989f600ee5ae948c59c8267cda8b4812615fd593ab599c5c3260fc265b8eb188f1d8edbdd2f2aaa8e86d3f155b23324205d44e9e2711f5d05a59b7fbc88323419b5bdc86b690f076a3ce66c9cd2716c5f0b7be05cd88517a22b392afd9c8e251807056eef9510dfd7332c11f99609ba408504c510785596072b4b6c9f82797c0875f837f03fdaa453ee3789f25966ae637e621093cd2b58c33a64bd18c66ea97976f8ac03d5c6e57ee27b4d1da902b9364c364b5d3350c064bcf7850fd4e82dd9aea94390d35023a69479d3e201885b4772d3ede367706d4a47866cdb2a7089a7716c873dc520df6998a5a6d60f42050576dd70bcc604c0025e83dd0153923d6163c4ff513793894643a14e600eda56feecb56c4fdb78692b56924e18dcb7c9a5fa3504718732b1bb49df2326acbbc19238ee39131465c903e4143898227baed3a95f4f255088d9370fd1dd804560c57de00a8fbd0d37404a7b9c34f5c1386d88f58637d30ff070580a0bc6038563e300767ca89422779f5d819ccbc845888624635c47013224078cccff8536d92f9ad870c74c4f00a116cb8a9855760be679347743f546537e1f43bd1f9380ad3e6d54437cc324043e47031b117a8590ccc737a5dfeb08e079181b7f0e69779e1adb02730fa5d9b9c9b092a78aa37d80c5e0bc738260cf65af9282872e7f92184f546183e27cd6adbde3f8c47648d4384c662174ce2f005f8c0f074a026e46a8466a000aa7b0813c9541b3d667031033dab8050e258e523a88fe284c2c8e3bca8a9c5c5bd1d98002ea6a4261df4ab81ffb66e5c42b072b8330e044020f87b7fb966bd51bc360597d27ce32fb4198424918f3321b413202c62e4609001dc361b8044918af2edd5427c7cde4172064353bdddd78980a976e7fbbafe5daf9c9bf9c2ec485aa66b9268f6519f42a0e470784948637bed99fc51c637e48d7061327f4a06eaa81fd7c37006a12e1c86da93fafe7adede440c3ad28d041c0a8d538416df39805ba65af1c4751591b56c113541a418509cce29b9d316c8aeba4e991826482d105d831ca3cb0a54d2f79ab0ddb503cdc29cd01900ba2a2ca087fa5c76184e8ba595fe4461ed8f07f9c857e014bee23e3ac6950397f191d8fc58dbc32752b9fb44eb5ffbb492cad50c12edc961c40b16c302641007de1373ca1437f7b23e5124f747ed682222856715bca2924c2f44fb62388467d7eb78a510a5571f9f43ddafc591f1b4350586641baebf645d67569621503e328f7f8718d8f2836477c82743b7b1b30675a4967527d08b661dd4098e0732da96b801097129e302eec137f589d3907b8769657c42400a50c113de248b1cc7a0bdd9dbc75b0c601ee405f710292314915e99b102726e44549cc8ee713769f5d7cf7a74867c87511d6ecc7040caaf263cb58df1eeadb966e120c26ab637f5a5c9f32334117ca59e48b69c0a4c147dafc6b1ce8b099d2a583d748bbcbc36c9c0bc525d832f046b30e7e1002dfeb19895757ce3e91be8c802b0c2ab4a4bdaeb2cf914afc9a7bce3ed421a7d411c4605c2923e5471ec369c4c842fa87e2bcb65d3c860a26e424b14bea0879dae6f7ecd1c641eaa8d4330ac1fffe50cbf23b23f9b705ebddac85a068b4b50e7dcbffef98d35456ca4e97d02616b0c5e74fc377f6e3b3888760190c23d899ee334d47191fc4bdb221da7c6a6fc0ecb27077e012f336f138ba8b4964fbaa3991a1c757d9b50f007546243b39ed6314beedf71b956d2551a4fd9ab13b5ece16813fd6cca217369f18bda85ebf4d91bb43b649d06fd3235725b72acb0fdba8a3456407f012a4c01c24eed3717b0ec162d97feca912b3d574637d980152e0be8246c4b77cabfc3ffa226031fded8f668de8815bf02e8da02bc6c78efe950c94161dc881bcce7c0aab89a8407e976e15af0981145003cf180fc81b6c0d46cdbde122e5d35b0aa2b4c2d32d8b5e09194348b4f5a2433306b172ffefabd8088290760eb348b1d10ec2b287668f16932f73ed634582444cb2e107d6caeac92af9b03739a74e7bc22ec8fd2ef9a852f60f2c0facf740cdb1623b30d513956b5e6191c72c3850f35e711c25324d737d8236d011fa814a69f173247083803838f378b9885efcfcb2f67440bd29d88d10d83504a6b48a2b839d8441695a674fac8a9d9c0d6a4bae553ab6eb177e31319758983e30936840b50613f66dd25f4850944ebdc8a6dae2348ba75fd6c7de2d8b93cee141ffa24678db80d80083cebeafa11a934cccf134fb69d4337d6f35bd580a57a25d61de89498e794ac3d74c1f24217fc0fc254512f475abea7e0cee8da73ca0d5d55263a5918f6be31a453de65895fcab79483d08ca1fbd094af95f0ad3ab59005c59d817fb6eb71596663aa0b79effd726be4f82d6c8760486ed0db177c6eec654d0a24cf19d0976aab2c8eacb8d17b896f0032dc51075509430810e0e1fb07c516f68d0ee9ac17ad9a35f00fee0d2e44c75ee45ff782992056c3f9d01366cb6d47e92307d088d96a5c0639fdc4a9fcea9c87787f080013d5d08cfdafb7b71fa409694e81746bc5e91827d23ee1afcfc515015404298aab6fd9e8844478f4eab4840076437d5dc371f721219aef268e1b5b56e2b6042649389861f658fb2716e3df3503169467bb4b217a90d993172135950d885d41dfd576367ebcb3eb578a7a43905dc2618f95c0bdbd86c277896f5becafb0c088ba3772dbc73c1dee8d2ec0d79aed0f8bdf3916f46f6b1e438462d488c3c1a87fc15874adc5df5eacd0eaffc4da19c5bb5f8f95ed1aa6b59f11e1ea90d123ddd1fb1ec3d7ff0d3dcf28a67d31d94aab98168087d145a14f3136d5e32c623d27247072a97ffe2f84fc9d4a84471de98acb0cf232c779c3b4a4fd240886fd794e21293d6cce48abf9dd38be5a2d305c2afb49cee0f83d74ab9e6eb7a1c32a3e196f2d6555eb67eb651a00ea470c9a0d53d1d6fdd78b191cfec79076f60e71f551b684d4acfee3558f5bfeb7950ce162cdf4ba665fa9952373c96b494e8d5b04bea03770b93142534147380b8a548fc55f0efdf0c27a3af2d3490719f3686fd428d34d23c3aa0e4c4186b8d0700d2b9dd3c4a88546258fefe5f26dcc2bc835cd57f7ced31491cea858c186ec8d5e3e52efc0c10c35d31d837369a44c3fd5365713b5c36af20f0bce4ea0a8492a704f4c7caa536cd5ab6a164359b47f77b6f9db23b533cfa64c4c28ebca28cd8e6be6f24129638f6fd600111f68a64f1a9407bf509e26ea786f191df7e80d6203768cae08e6fb5c4a7b67dacd3e81a37296e66d6218a4a3afa0fa1539a160efcfb9c7e7978922bbb0c325db15844d62c5e5204b21cdb6e2950978787a9e285b3b5d2206b7b9e194e7d6c47bc1e212765ca83dc35462638f70cf1aaf82866d908f8a2271301e3fcf38dbcc2197ffd9c67f08c33cc582b492891d69201902387513675191ca614455ebfac3376184a93a752d3c1e3ad3afd32819ec3407ba90f20f1d36ce4d2af80c485d3324e5188bba883e2fd07cfd5e3b95eb2b5313557defcad35991802064dd9729a350ec64862efe6325bc53a9c9b017bcaee6077c07548db243402cec8fb01f899c233d10a27e20c6a549867ff71bf7b4fe53a9d63709a0e27b451936816e29a3a505a2c3e793368c37dfdf26f0657efaa204c20c14f74b8a89060fa543fdfd9f465ee1255e5388e063e62447bc74f1b7225f19c5a604d6d3f6edd6e1dc47e3a60796c3df0ea75de8b2c61e8964329b1207ce78aaf61988e449603593543323e0711510990077ffccabe89595ef86c334d7b8a5620b1faae60ac9f663b4a804740b4390fa3aacb4b5d7b251126557b0441d856996eefc8400c28fdff80390cf8a5d890aabc62cc5cbbc8d19a9ce8fab6b5e9c8ceea59a5e5bf81ab9fb49d2cd4cf04d4854ace17a35e4e2b6023315fcd12467d6113adf801e34d24b138e5643e04bf8109cf2b21a1cd717f1c49bd1eb9df64d0fa8b4b53172fe1f5fe9db047c6ef7f32b2ba286efa71b9690970fabc0f85db6fe5a1c03bb7fdf69bb2437c4bf1f7aa561aac3473fff3ac55b25968bc209e00a6cd079b1646c5e18286dab7e531a5e7579c15edc534bbc0e1c1338593af907b221b2d3a6756204946e6c3e1a81882acd3d177a2d73b427d8990cfdfd70ef5a14e5a733cc3588574555c8f8809191671473551f22e662058a9bb6ee5fac1462998057a00aee07e194a52ae198cb5c9cb1e42255a3f67cdd8eeab91268368fa6a9b96b2248e6062ae72539024b7612510e58272598e92a384b4ebe72fe5589aead598bc16e67aeb8a79e9e627fdcda0f92970c96e908969d298f6d140a532a030b295e8665b726153dd900091d43dd5ca56878b17e9be59490746d027576992c2dee8d78131e97c90f9b08000ef443c3af94137d3fea42a5e8c767442507ffb17973bf9f61e6295a87af5e4e383733c918e48602153cd359994e02e0044d831b597f9d04375503520cdca9fb8554d5f8491d7948e6dbc0370bd2e7e0f9924ef134d9cfae7eb54e3905e99110dc9252d7a80a93589c0d32c8a71abd4beb1c87bb724afca51c4c3195dc9fc094243ad2ee9e727d391d1b5192d3f02d2ac43557027a9accf2fb63d5f0f8c6db8f47947cc6941cdff3534d441ff81adf846b23e64cb691e99c014162d1c1268d0a2ce879e6f0d15f8f24ea34f77f617a61c82e5b248df6f8ab1830ffc19f867b0bbb7ef1d61b59a8147a3c48a0ce8da7cac3a0df0f6793a4282776d447faaf509ddc9d0b1f7e7c608a3c89a9a44f660dc544bf9997ac2e921a165c0aeb3a6ab2c5778fef48800230f9521a7e8b69b3555d33d5b243c5906d89cd2ac935c77d4a8d749ac6d988b2bf6aa337f0db833e26977828519b1881db7e332838ae0ab0bffcbb07b85b0055b6e41927271e07cd297dfb009f280ec984ff329e80dd69cdb91a351eec554fb3bc709b344adb5c290516a5a7c471102f1217b1d3c84a4d9ae2f0c8268b4fdd947a1512a4819bea1a636a5c64e7ff847c2acb9910397e1fe1df855d69bcd112c097db64c0f6e51968eb82097e3058d3787625d09dfb0045685be2dd2da86456febcca7ad0ce4151da4465953ec80666eb9e2c3fc2355829f8fc0d2ebb768f111891eb3c1c3437fa39171be6ecd791a49d4ae8cec7100f31586a103a5b4fdbabd4bd4592eb4e507c4d0bade6d0847ff456216266f3b3acc7524ef3e7545bcf8cfbe9e0658744133fdec9227b31f85ac0ddcba1ed8f46b752ac50bc1ff0c1f31c55bcc59b363f09acb4f8828f595ba96ffbf1ad4de3f3b93a2f1775c975aacfc4a9dffb1e4167b8299641d6098ed4f569783b8f6c37e039e6a34c25cd2c3deceac1f98ad4f0e3aa1f4e4c25d1198bc5151c504e34d335bfc0d096d5135da3d1f863b37ba78adc67f7a2c077cf42a9a1ddaed9f28bfe1bd32f7d9e8c825003065458b5d57e597975175b46d4eb50561128f87d845b02bafe9b740c52044c86146867a6a040a3e35ee94185450d8db99e5fc0e50b8b2539c76c7b872f809b54829a5a2fe5d7b141aad31b26d11d3ffbcfe8cfb88f03b0c0b70b5bb72cdf8394d854f8f7ab2acbbcdf3fb3d08103af432d2ced9f19abeb7954dedc4550074d6f9ffd08a7fa21387c8794cf2c5ca725ba3f93e142af6b1d8a294ec5d9a4e1400c5efc53e6daa442a8293a38e16af1e8888d8675485c2b8f1bbbc4e01a2e55a6949dbba15d549b2f684e99b698b3ca42d49f6b6f5a25d38a5594a6f3b1f84cc52ee4a1b9b36fee48e67d1910f9401879c6feab981f144b545f3b5dc7450aace703bc1665913486d5473e2210ab18c5d68831afb840307b35623852247f6a5f523aac826b9fa9491eb6191c7c5743b7a13fc0de9764814b778614ecd107224b4efc3d4e9484d8206a59976f1da4cad82216349ffc3410a461f2569298843a5a2571f5e0a8e9c9f303583f83bb3bb40ea133135cb157e46c3acf86ae3f9fb8731dc05fa16f7583ab2fdc9ac01ec3094365bee87c7c76058d4b442ca78fffa67d801200f9b1d10e2e370d2e8f0de5d15eb7e0386726397ceddc7ad1e5504c0b62948e625135a472666312865651491547dfc08d84774750763499fcd04a30f009a25d0c0fc497b73afa14277eb296dde625886e3d3649890e9dc836d044515c5af1a6869d2652e691463a9b70f8752f23d05d64f92de6309f5d2f064d0857573dcb925961237c07558dad6993eb8d15e62a69f62122c74c10bdf7f4af5cebea9a76490cc582bd206d1894194e5387961779d4ac1bde94e5490548885e09b51b593bf2272f0dbf3bc12f18330bf70aba9e06c60e5029f404327d494bc2d75cf46262b532098a275f3919614031a0bf8a631966a528ca8fafb36d23c4438d897d9d33bbb6bac2a095bd2096c828164d0d4efadcf80c8b0ef1b41cfd7c4af5e3bdf3f62c3baa7dd0e4358adf5157215e4c48f0518f623219cf1dd300f93dd513bc4af2304741835f5489a065652889974d3744edf393885753d6da54c586f6c0828c70ed64e79bf6eda1aa508b0215a21a053fd7ab08557184c77920688b2093189fb88e19048f3db865f0c84c4d8f27bb9826383f28610e6ad9f88c68b61a33856d1239ee0025dbbcbeb9f42e72bdcd36da4437385a73d70ef29ec24f6eae4ad1dcc6176c43267901924ffcbbd7673d95b1e0fd1d08557477fbb4e7a41aa27d05d61b4f1a3559be90cbf8097be5571fe00741b17699cd8caddd8226f024bf7627425a09813f8853704ffd43f504541a1dc3b07ccc75a4c7b97e50a5baf3cddd4207cc6f27c779dfa908a6d1b19d25d656cd7586a504a2cfa2c8668c8aef94595b0fb6a69637f50b44dc3adb371693fc920dd8f68cad8e4970a20b04e880db937c4163d956f5c47f48b5038b10d96634da6b21f406db31e02cf389355d0e6c33ac851a2eed6baee2bd7a4707c34c662535cf97aa9df3543adda5264670010de0f4c322cde5ff7bdcac134f77d8d95a78ab21833ed85ebdff8b9f2b5faac187425ae3c4dfc61bf2171c676304d7e70cd444492dd83f8435d83ec9e0aa92b6a202e9ce488c1626dd381560cad649dd42e2092fdda15bcd836dff0b8c4cb04925c8a66af6fb5f8802ea9fe5ce14b625c54a01bbdbc0b3a27165d54d78708ce0da3b9ba0155528a829d3c3dfb5e6a4265db334d66e5ed069c568c977ed3cafe58704cf59efc1faf01c9b8834c8759d48d1c5ab66e0a3388c4820e27131d8a0bef5cb4a7bca685cc7a2ebf7cd4fe928f3eb296d5477b67571c23228238c6de7d5ec3715efef72d695826b1692926ace8f718782897cc00f82fb49a37648230d9034f0379ea606f0c385c2ef6bd81e15842c86f3ec36e88c25ba0b5c50ac219959949fb86f374c33b773988a416b30883be4cfc764ef5776c4c9205a9bff901397d5eca149e96d26da1497edfa91c6ac1a610a06dbed3454c6ee31a53d8a9703b1bf7ef916059152942f65228093090b8a6adeb9387aa8af93f2e64620955ff2111afec8bdd3df3d4e8eaa31b9b9202cf4c9f3e763dcdb0e939ce6442a6710681eae1316269b80716ef70f208f4a3397be44f298435bf4f92eb6daa7454ad1eb404366ec39a59c765e333bf9e9906cd552a483d4c2411cf8cc0669785884ca05dfa09e51de385ad2840ad8c4aed1f16d16b04da4c7d47a94d5563cbe4a5e243d638e644efd9ee20f4a438b87c856eae77432f90f3b5e3754b16cfa810520071b35d560ea7e1d5db417a8fe4c1e6780ccd3f02e1e04257ac1c8104cc970129a28bb3d392d49fef34a52ffd91a984bdaa29ab495d80b726c61820cda9f737c06eb5e8e981f4689cb586511c3fa1e4c22f43344d645388c34bf48274b0af6a572ed868f24c95e050e66b7a665f298b07d470568986d74bdfc6080284813e1d607b49c09863277bce3fdb086670deec0152578ea8359a54be9ce94d878c11c57edca06c465627af473a4b878705009c41215f4914010b47f2590eaff841c90704bb72e886a6250f6e5e3374528c5cf049ca0e124779a8aa1d82eec65132c236949017a1d3d39df0a624295b5397329c7d94ca76ccf000df9293000d1cefabe891132544a85ef1177124a3a904862ff57f4a4ae31f14927ce411f900c5c8d4a19c8d123d8ea8dcd871c828f9e009b3afa132d5f3a857dbf6a488303df67edad6199674f90161afa80a972faa70625c0f95f71205132a5bd1365e2c10f9423d1a9aa7b4037ae9e82abe0a3e47205087b9cfff75a3ca0c70812c0c632678d369c3923955d985d224c50ea9cb6c8a34d522a1b4776c478ee8aaf82b6beaefa2ef8582d3e107ac9ac40b7eee5d67188fb2cedddeadab1621f2a31d33bcdab8214cc50f0fcc1a49a4746271507ae355d1af32b6b67f0cb0564d0e2dadcc727ceef0067935ad6df79f846ea8789a4dccab38e2ded461fda0ac46408c02114ea86c77be63eddb8f30ec928466bf3222d76cce53b8c10cea51848cfecac921cbc51a427151b0fcfa800c1d484e9ce8ff10a70e09c6f4c67f5d8f6f7d6c7b84765d78feb3b4f7783c6f7e833eb2ba153f02da4679ac0825192f2d8c50d391afeacc18fafa1059d3d149d472bc556f4d6f28872627ba43af4440df621db2940a75bb7ad5b90630a635b97e5a55895507fbfc3e1b98845fdb8d3d156f486bfb3ac3860f0d84e91455f6390cb8aee0e3bb81e85f95409cb520506e802245725fa730c65600c23b8d697f42effc0cde93fe9d976c31b465ec243a6f7029b96809d669e6d05e059004675d6198b313d4fe478b63f46f78624d4da7ba95c3f8bfb25ebb821e83c37901c5fd0fa76c38868b1ce7e888bce134810324da31afa7ebb196c202910090491e0bfac79c960f55b2e53f8f8988a33f0feb3e49044b3b6eb01509f2c852d092a1bfc303d8befcb51e36fee3877112f4527c60816e0527cb166fffdd350928e84547e25efc4585371598b26f0304d4f6e12d180ddf8be1835cee102c5781edac613ad52367d83d5e4170d6ac7c924da93473e158e93e1d2a0c45e76aa05bb3719e0f181bbbd5898d1a55f80654c801ade4f738fd1baa2f11acdde202c0050eba544b278268cbfe6618ce73073c0485575b1dab64d74e9bfca73c9c9f170c53f91c658001ef2a005bb530f44992e64d480f5d951abc99e82d93d8739a15d027b06ef4be14bf8e33e09823e827e9dbbdf28a4da2a92c1aa836fb38038e5cfeee72b45f3e356a570d970a2dbb4cb1537bd94454407ab65f30ab25e1c8e65cf73cb2952b9cee7022f1e1a3a50a0279fbfb8ee607fb19ebc625fcdc5c402c864786e279e0369a51508552fd2040f3b413c165b7df3f012cedfc9e671de5eb697e6194eaf3a7d39e8e4c5d6f25fc8af0594200525088bb0a4539126e8d468d96fa314c60fc7d24a83a9b73823c9952af3b01e14df264c1f45a400b4b40ce9d6f498a7b646103081ec41737decaa3c54127858b034b5f907b9bc5cb95cf0a8582ead1a46da7f5f862d9241ccd66a86d66ad415ffab1d5b120981ed5c69e66f0526cbb4a0557b26004e86694d68713b5803ad9f2cccc63ae63cddfdc662580485e3d8bee93f6b4f985504322a2a282381e6e93c5d1f185e2b5ab7d21ecfad30816dbd804c1eb9a0f54cf3e688a4f505fa1a7235bb2d7c8e8a6cf6b58d394dbba1cd6342ef7ccce2c03a3dcb925f41ab6aa72ed26d7d5894aa7984ee3b27a06d8c0ab14cfae00cdca028c9296de275db7a96075a9b971536358948c54f210e0eeb2c8ee596d3e1583e1d7f4a44b5f75ed2eee4176f041c3dd0a52a82f1afff65653ce457ebdcb31c412147753d6131fc19b7ac4f0f4bd47025d3126c4b5adb3ba3409ae82083eaf2523c09f1806d897cf8f9494ba3f4a499dc1de8cc82a90a584c4398e15d50eea01977ad07366169a816bda2535488f67e9d8b94eac125f484094ac68acccc28ee3dd91bff87c638461c0a9fae498e31e90f24ff0e2e540187825f0c2a927efea6676b3c219a225e1fb1e928a6ac8ebca0daf00f80f1c09a285e89520adaeed98e3e34f6b4980043fb7e612581a210016ba7f7ad8733f1253046d18073caa522706b3c3202a8e54fa22a7a7e88559d67141e42c26d1c6e0c68e13d7eab8a2a3f12958bd951f35beadb5e3c1c03edbc5661e6d83478d3bfb595d8d834fa43059a3c652ad1eaa1e97c6fc2b0e53a91f6361ca8c1edf1816c8a82d2a78aaa1dbf99b882200415d9186d27fdddc2746ad2700b0b06d3204dfdf1f678b469023fdfa64d9675581ac36e25c9b8cc9bfba0d86af7b8aed04c60fb54b87206b749d2ed28c24631b74088750c1d9a8359155a908da756c1cbbee1ee1a9167a55ec8fd7287e03c5d08d050b58aed4c0ce20bc08341e58e48abbff95cab49ff9a44c7e9f52a6f2001331242b508ff756f2025fc38ef7708495a95d0cf6fa8e3ec538dbdfe7b3799231f4e87fdec1cbeb2faaa3337fd266bcfbf888dcece76bba37164a215e1ff50cdb6cc4615a00ccfdf57e49009d5ba5fdfc2e259e2307a2ec88892c0c3c491ed06dfd3a8868a974ffd21193835ddfb8e834be95b91fd7de5617f603e8f8cb317d782add5d61485e7153f9256437fb19dc242e7bc669d4788793e164502a22e764688a0f490a59d3e2e999710bc22a337a58f22a3e678a0be15adfcfca26cc9b35ed7f52e39a4a8fd50176f8e272d9a02321be3399bf6502f3fb45a8cfa534e762458f4aa5b7b6fcb83a164f90c0a5ea673cc71a50c801e84fe3b771c8fc08366a2f3e4917d91b751d01fbc79f320b7cc708b1610c17cd3655b2a9cd5eb19322cdf910f0a284e4b363e79c03565d76d1c304118a2435437795c6911df95c72170e318bb3ee31af223d697b856e997473dbbd4c082196e12690ce01e61153319d9b7723154365d73c09f61ec0308c80ed8192e56d9cb342cdc70780b83f4c4e10f6285b975a97f97b4a1c0a36549d28a94533522cee20c4d7b92171f6fb9e143bbec3b9ac9c5e826a8e49a27a4341e831a6fd36b8ae5603cee79a6a34aecf405855e7a1e771101e84371d9bee75112c11178ef7b355c97c2dc2d0edf3f1564f014bf2c8ba81630a42e4f63b15629170b22737098f6cf19a7eeb7351b73bd99cc1117382a835ade24108622481b43962bf56a400bf5c74eb3cb1e059f116bfb61236e86433167742e921ffcca5b27f5e73164461c5bcc9ead1b6a65b23fa8f276f3cdfe1ed9c5588b5c21db81415e9e087e6a6a125064715f88a33c9e25fbe6d5283b8802a4faf4031594a6b3f26ff75686839437fb192f8fb8d274a9edec3f446bc10c39ba90af5d658045a999e26a98eeb7acd18572400653fff41cbc03658c64667209420ff063f6ee9fab5c405d98610e9a2915f70c8c0230a43fbdc9c075ba32a2bb64fd21db6de59e0063103a1c85914687d431fce96d6f6c5915c5b8c6162d84964ae4a98e756e29f2d7da68ed02479932eaa776e43bc334b4ef80b6491f6001e4194bf044b49028c7e0274fd3813979747ee1e3461435e496718020c47ed2ffebfcbb5ec4d25384c8a57d5795aa6dcf93b868acd7a2cb6448c34f6000da8b67f519bb5bd878bf233d4f67e8fd24ed84d8c1c3375f8a8f9c120e75dcc5dc94224898d34f464eddee6e056a6ad198c17e8bc17aeea67789753b7a78feda2cf4172ca28ba2d7fbb4cda2f01045daadefa7f4df1638730fc0d50d2ee22d0971b32deb5f6cbc53284ca92338e0e1e00c81e65b441e7c90fa3ca6ce533ad01853da4eccf6fd05827cae68370462a7ab5c7e2207181a24c3e105cec7100951d07c7061168fc6e62ca0e1f4277c1ffd0246ef4541829397d56c2437408ed617f9917d4d125450c5183bed333bca9e4cae72db3651aa103d8e42a0c780f4298a5b3d0afc086b220b0ff6db0fba1367fd78874add7fb9197eb50c8168d16b8a12bd261d553ffcc521d979b26fee820376252e452213d736c21471cf01791b8217e9f4c1400130bf6d3e6b7a3a1d3cf921800ed2ed542bf071711a9379c12b9801a550fba5942e9a5906743c5a906cd16550d0fc268bdecef395aed5baf1c45538bae2d56c411fdd4cf83dffb68f3814a95c1bc8b5001759b048d69bab510d4024f051567e502b11aedd6ecb3661c849576d984082fbff1711513aef34292fe12e0e4586c10979bde67dafa8c25045f8d64bee6b76c4be927c7a81d83dc051c0bcde686e1eb432695ea0a69f42a2d7aa8ebec65177a27b525a89545fae5f9c6638265f157d987d9e7d0efeb79ea0a5e5e78ec8fb6edf5fdd14475a8a6f4e385a08afd584c7fe83e2ab8e5df9be92d83449829b7044c191bd107c3c6369d54c24964170c1e22e6cc050ea6c6b8bc0971c1c64e8b8df91397ab8f0a1f2823c004d48a4d8d6b8705fbdd4e8d217eb710b27c8fa56dc2996819a736a323ea3ca7d5c889fb6ca300c8463a0513705c7ef5cdcb50d8ee3091a8fa7a8b4974fb5c8ebd9bdfbb2a6314904391aec453c0880b1c34b6437d566638b29c194772d9e7e724c4e807371a57107c7ab83a2c4946d3265f3c9fabb2aba9ea625d37ae14834383ea5f6a23373cab496bbdcf6a555fe094913027f9c3c67f0a83c394972993268372925e6f5839d342db3c1eae7327a5bf815d86d8084b2a8b66e8d8ce87bbf28bd42d5e8bebd31af14f9f82593122b53f85f136d6feae3ee592399ea4bd525a05a58cd509609d04cd4f74950b1df5716d35b7b26725641ec17c3230ca48eaafa95d3d6c5854fc033f4147e13478047cf106fd74190b015c77bb6f49afa90975bf61cb8ef94774a8dfcb75d155fdd43a43805f165d2e0a7aa0a64d43b56c234ed06993b77ca69b682754ab0ff00de92bdd2848f3b3ece3fbb4e368a97bf0cc8d84cb32605300d4c39e6343d78336b7e4366547a6adf632522ce92e0573d569d4451d24340cc4b54dbd7ddcd29ff6c4d5e7ddd7a9bba85a00812e19c23d888f9589b5f58d1a80c158fd0ad27ba6cc948359e865776d91dfa95a38c87a2998b253cb4c02e5fcc36d87e5a0c15d2826ab7f151b9d8a2431479f008f9697d87456919245f8d933eb3e5cffc625d194a37e2b91edec6c800506642c9920a5cab9f0c1771a33d15086984ab3f17c839cb1910b68e5be98f19bb09b26fbe31e50b81585d25f3058c3242fd3aaa931ed70df68b10289909a0953ca96981e4a8c3b1d49314c7b9aea1c22597a3c53e279e19b899ee7400eea27cba8f8e876e359ca57e0663e05c01fbc2f99b0f1881aa33f6458378fbf95f3ed61f044a09c3a119ed69f973f744c34339a851a52cc27141ac8791d844ea261cac524ec5904bb3e1937bb36b94d9bf203019018e886a426e44640a33d83c09e3053bb526a36e359d9f9e7e744082bc3bae34f3f1b4e2e662c5c638b43d58d13ceac28396cb94edf417b9a0b681aa813bbbe16ff7399125c637946180fda446ce62cffe3c8f25a58f05b46258e2b6d7c95f08bcc89edec642a3b6cec2a08a2f42754a70417789231570770c83e80f868da391238b6b33937d1013c7a0ac71553f2b1b1fcc0b28302f61e9e65e1d1d562e8e64ec6929f7522086959342abc1816e8d2a5406d46b9385dff4381208480f55296a5f895f91ccd20d237cd124e17976a25f561659b816bef27f49c631f978a97b89c314956bc93caea5c875a03b050173a36f2522787f82a27362a321965ad38caa623153ec11067004c055a636efb406dce55bb814977bf8b6cbd15f897d7a64b68209227c6bd75c26ac9abe3afe3965f401dfa2f2264ffb31cc777338a9470c936cc38983a05778f4d46b70aff93898d10bda687cf4a6b4ccadbde60da6e18b2b68881169792fce567ff145fea958a55d4b739319c8292970b5cc3f6e3bf2e964bd804097bb076635f754c48dd642967e08d3aa306b7f64032dcc06c5321f2e28b5d2a1733186467782bb76c5479e731e8c21352ba6516d6e5de5c4795112635e96a7b966a2557806694ee10ec61342241d86bd713f474a9a8d3dfff2617390eea92612d9d51c04c8f4378fd119490d78042ac96afe08056e05ff429829e9bbbf367833329382f0a76a9b087409e9db028934e17ead3da6d10c5112d3731deebb85c4a4dba42f468a15a5d2615e9bb5aaf3cd8d15128d33adec5bf90b05b730c9dd33ee3ad0cc0e583b7a77fee006a2588c1c5697f7a1b6e9eb467ea8a85e8ad188ed98b9df014efb25457fb557d3aaf49a4ac36c2220366d523a2a1224ba02bccc192abe9875105a1b2c70ed8aa9d566667e5dfc5bb3bc21695e83b141 +MD = 87703bdb80194b39bcd2c71c2347bf71962fef9d9b77f637f798115dad973d0642c50ab15ad7bcd9e5452c4990376ff8 + +Len = 86560 +Msg = 90b569513f77fb5833b71e852c8ca03c8e182a5757b0cd6d533cde5493e104e41bde8ffedbb40bcde18a154ccccf6e0984214e28286efbaa485999f055df447a553a5cf5db05207537a27fffead92a4a5dc1eec6d2e441de9a9e1b7a88c607c9a790793d28b262d79ec602a46ef0fd8880c0b23a3b5ac890b1d409fd16df745877aa8ddea803f87b7fc046453f5d0f4957e6418b4d17b748f5c30e7ee672b4af2e4e41e145400be94056f4e94768871849fb44c1ee65378fce32d007e0c7ee5635453d4de6b0c2aa4b51b4996d588e7abec662e5088a70eba4eaf79fec254bd6f257282a739c464506782d5c99774bf91e1044fe82cf89e7dfb42c4ff2d6f3b5cf4bab81d34cbe42db95083ab30be71cd2a19114447cab08e756171eda200d7e33eb6d59f008532a316eec3ba45d896b4041f23036d9fdd824985f148c4cc1b686fd17bab1182d836fcd826852b55a6fd1b80f58402ea8deff44ac39f1a139e72f4a50acfec373d8ff7872c8a65b82afedcd8f974ac2d3a2de20a896ef699a98989ac138bf534eae48376363889628b4fd4a1bf23cdea7ad2af6f9326fea0f5228b51165dc0ee58fb2d4fe42e1af740467f55a73feca4c864c8c47155a6ebd9c4762e93c3e3d6102a515ea6c97ee8f299596f52178cee9b5aaaa3b48963bcffe5d6bf1c3cb27e99089c4cfe9949ba1abedf793049332a6c3ae1a7cd20d996b00d296d0046c16a6bfc6a757c2befed110d9dfdd25353dac37bfa3b3bba5d2ba2b0fac2f070a50bf1ac48728feff5f48e2c0157a8b47382399440c880c482de3067a74b5d28b1e5d26ec2beaa53e052ea80a62133eb26b3372a71ea2ccddf10e1a7cb80b6fd9c8a86da45d46c06339aaeb1e8e50475c1e02484fa1aa034c6765ed7e3ed8e6da96c77655e3e3565543e4326661d8ad2f99bba6a45d47b97dd70d09e6cfc53d78d0e3c968866b6ffe6b050549a35478122384110e1922f7578831f61d337a7e99bd23ef430e831345f935ec2f1b6bb1ec068513f59fe3c4c4c4f73a8c329eb127a6b06f5043d54b12349b708092c65fa788e833c1b53129acd1875f9a94d9dc09d3b1d1f6ed091e4d656018a5d00d8a2af2d2fada24b42df5f80aedae20d509278c4f9e9cd3c795dfd4ab6d049de73a5d8c6deea9b315d88881a86a329f373f6919b25dacbeb6b7aec9a5f606c1fc78289de199942cfc324db488608ddaaa87b7c101968d767e8ca38c763b1303f54b736f5683045510442cd9d3562796d4e8f9ce65d1a7c3c81ca66445c4942c7abc2648f33262f8fa150e37b0d5689e5d6a17860597626d3c70a09b3a1aef0432d22971e03014db62add9174864b8b9ee15f9320a6f263b818f77777fc48e53c6956432460584c7ee1577c1c38b7fae2ff288199be25bf640811541394ad7e1dd0dc0d24d3718834954ce7d48d22546c708aa85e1776966204f6040933534762043239b1c503ad91972c893ffc212495f5f48bc03b6b853ca0042beb30b0cd9373e77d3dcd8518f07784c4a11e2ae7f9e004b072a27b085e59ca201c157c7d3c906a2c3b455c56eba6d41eca6ba62af2df299ae7e53bac31a2c6752e69ecc2c7ea48eb3cd51fd3edb5991bfe5d394a3b33d1cf926c13cd711b67bf9496a85ac001f21ea4e5363c71145230cf7b4ae21d9eaba304bf9a0877145c53e1442591af47f45b260e45ed00538df1a04e516f247005d9a14844c9ce2de2d696cafb04005cde1512b8b56235e3aad3333ef36dea487ec80aae9aade0e8b9bc17b38f3e4d910dc10d6d0b386c553759dac5974ac98884f2a34b020149a53f78f696588cf185020378a3bdec2e28c1fa198ab3a26cd096ee0db621808313f291b5ebed8c96b95940e6e553d9f5cec93871f6eef12e81531eac786f98079551aad81cc4b9a7ae820ddaba539e4dc7bba976829fa3994b1808f1fa42b451a9fb08dfa164a09ec50aceb68b33b5b09427a199c64c56377e743190c44161fbd25d403f2243bdf69d62081ce08a9ca8c48bc54e2a8b75739be62ceb5ef22d50aee6f56917f87e49b8164e7052becfa0c966991637b38df833fc5f7432cb731a80267cffeae97e02759616534a46db3323267184668b0c1fd7054dbdd843df94069a6b66239d29bb866fd4383fc93bca626a031b4f487c64e5bf8c4ac7e1cf6792b1253e4a99fdcf4b121c81bbac5df0f7afa24d5a926b61e0897f8d7a2bcf0fc5195edad85686d8341b63d24666de215345f38d00ef359177d1ac0877885af70e316cde45594140e1ea2eac589f28e615eb6b6ceab5777dfc46a64e489e0fa7ee77c3cb2a28b9a3d51cf1727aabcab9bffe7e6f609bbd71ee56d2c155c339ace67b1803ff2b4c7b7e1230c725133016b20d91071af85427de60d604379e758076a9ce1b2d0796225d68810cd06bf5777c8767c66251f80a3d13147956965fad1f925a933c141352e39e56d6052c8776affa572fef4ef593aadc12a34b31448d61b341eec4f75067b11216954bcb627eacd4e3961a35f95e783a45147df5b0cbbd8b18a02017b9eb366264dd1cdf1309f3b591ab6bad5fb545ac404f776a40c2b388433a05fbcc57f40db61fe0be15a3350af5d25c2bb54293a088b6cff5611cc449662ecf2a04287a828ec0400ee6c4b15364ad84278680d2c582dcd02d8e34603cd5e0e4190df72a5f5380b3481309290d728f4c274ffa9369c344207944a427e12712fd5f262e9402a8b3a2e006cadcb7b41a4ca17e1a563bce6f597f10e68bb4ee177342f949380b02eb976d5e947ce08db0ee3c9d5a8b8a18c0b3957f65fc467f70de8b03d196d6d69b194666f069f683f5a94f2a55a3f316daf762eccd0a147fb1a79dc25220f4a834a101dc6924881b5b166fa1765ff55d307d5df566258d435c56d1a13576f2fc6ab7361b594d13d843be049f46e00f6043bded05dbef3f8ec374ed4d15f940578fd459905b44082f61f8a4703204bfa4974196aa88b79996a97a37125e486b2e2670c2f7e999f3a5186ec5d0e20e74beada0f150172f3a1f50ef559d88b4e204c12528ae8ecf54cde978ff1db19dccf2f94473a2e1b68f7d6c4cbf3b2fef335fd259e120b544ba0e57bfa6d34b1337060cb493ff82de08355e0ada97ae57ddb3fc9792faf7aa81eae59b537df90f314c4a69e8e2751642db98b23e2fae7f5f958266a499b0514ae805a49b9a45f24a5a44ecd8d832efadd4cecb607f8ad62779163f9c8989e9838a5a63d594dc6ce0a48ea5ea6d36dad7b542ced7e3ddfcc3c32a9ae146eed3aa463641981a06cfa2bf8a3da40e1b582ef1a7251b091243b32831f1295e59904da03bc669867fab0f0fca1c8c273af8321e6e76905bb24b840cceeacb4c44bfec2ccd7aa066817f6419b0bb0965202b7fa00b2bde685884a4e543d04d7d5aa2f4508dd70326c6cd6061f091a2346572660affdd5b9b5f8fa456435a368de5f9f49fdf63d863aa15727cec58fd11756d93c3ced3ae7141bcf0b44fe10cda81156b7f5489b699c5d818cf16496088ca6d777efac73d96a9ad1893cbfd370fb695d7836fe114358485d1ecf11b8306ef028f7106208f67f1c08a794a075b79f0fbb72083e287d370bf2c3b2f27cb185dbd5a6e73681a51a4a7d4e93ca7d0c5baa788fb530667d014e4964e02f6af49910e56bbc51675005cc3764826573d6f8e29db684fe56ac7eb868eaa2f10a5f7236602dd6db425e06493ed2a998e07c3f6130cfbccd7d7275f2593b4060e55bd7f64fd67efb9837e66a9b81508c4b68f5cc3cc1a6c86538b0a4244102a3825192f8b94dfcd9f3436cd65558bf693c01e5cec6768a149564f575cfe230e369a769e3a67a989edae96235743e3d563bafd60dd8d5b0dc95600d0d6408114723c725601e459a72d6948e31011d147bd1da8f3179c65f46ee92c015ea9aeef837178e162a96497c6ea9ba7002dc8a0185ead9e3b231e07a2764d5356a800f1d2d016baed155eee52a91ac9a8263e810e0477ccb8afe7ca1c83d1614eba2bcdf8eeb86cf1c6ad1d492b42d58869a76cf695a4090091678e35984495b75e83d66e13fa52211bd3a722f7a045218697b67a889edda375f1f6763a337b1103ad9d9ae64914ebb3771e7884cfb2f3fb84100253d4a531dc2b8566e01a8bfc580da607ec212fc1fbebd5a2590d897046f0ec069df20a1c2278ad70006642d9ba28625d7c1efd4473b68f38fb064346d762bd2fbd5376c2e77de13a31a32a29b88264d44c9f27d3a97b8dc4d1267ab85b5e05c6389575d6a98fc32dea5dbc6cc1a01034a42e1a000b8f63ae720a9a7511474872a61481b7d742c5b390f28423641616d739485e4a2886938e640f1cedb7c317ad7c7d14f6ff2b6b63dc0debee1e38cb34627a6f227ee5bfbd1dc08c82ad35d5ef222bca149f9e16c7121c8e1d6e9cbfe4b640c7197d112ae305bb73e4603415a03dacfb81273f7a55e98ad541c3c66760bb17e0afa1bd7778c25c4d838f225979357d33dd2473e888a8e54bfbbc2a5420d77c56559b3f27e6ba2f73d078a503c29008fd7915dff3e7f6c86c8bc65d08bd91fa929bb81abec583a1a16bbb10c724e3fcd2f589d81eec5980b1a260c2e78f80ff2ff296d4ae9d855f30a5d519f61897b53ed2eef0ec1e27cab5b019f0832f1b1688eaa5f169c755b4cc2f3515230621deab81c3becdf607e2e345505a6e04c6cd37f463f582eb6b4ebe588996d08618b5a382969646fc7085b4c2b2850ab92a7fa7905f559c723c8981c211138100f2e6b165d61be9a9d81fb4c8aef4ebb4acca625f0695e8d45ff1d0fc8a1fb71f36ee5fac00b42876c51d6db7b42e737fc429f2a0e84b2aba3c241658431fd5296b48f8b5b4f385fbbdfb4a2050965473171ad32682c9c47c677cbc75ea987dc7e6632723516e74913955d48302c0e156fc198e2044a638a348884dc5cf1e13635ee96575646986efbda987604942bc6419a27e4ecc7509b775b344d89f1538a43b283e0c7c993f5fb162fd48a2703852c6424e02889aba2175aa3c1ea9225fd2e1cc1b88f8520079bb2e809c9cee078ba87557dbe7abcc99aeb98e189ba9eb980921785b66487cc64148cbec97208c7726b8264b881ca368a78dc556d5207e6c07e4ff0454d0f6bdda5e39a93f9c49bdc78753d1d851f116e6838c49e43a8ab77472fa04327010d8fcdb4462e4d5c1c8117f5aff6700183cf2371d62573c9312c55803eb8dca5d900f5c969a2541871e8aec9624a29b9b43411523409ccb2a067100971ad5343f8ba83e8acf8f840c39aa7baff21988ecb259aa2865235ab1fb1e094e22874239145e1dab7371f1b391d68902e84a5caf02a2628730895fbd6902de73834278dcd2775663167b3f2fcfb5b13967938b34dcc1dada434d6ebee8e5fcc1cd654c8d4eaa956c3919b0d33bbe60ae00b39930792e7f9c1dedfc38f33de083618e31dcd15e47114bcbfb407e6733fb33f90b04905ecd4710c98cbe00612662d01bcd4e0318d7ecdf0072fa0036978b81f255339ab94065cc8e94a0a8f64adaa99c83537c50e4695355bc5259a307e97b2e0c3ff0f48562b19ba8a34563aa454e9ed87f759ce911594a3c0be343019f700aa4ac4b66e8e8608f3d187e4fd15d4f814144b763526f414c7669558d0108012692eb02a7074149b7c682bc016c6d1cf262259a3abcfdbbeaf00cf8e7b2ddbef07b8eaf2b4d17edc3d974772eb7ff47409fa49689852729844d5975e9636b09f6a309b96a46c6bd31fa50483e60ae5f1a7e4444d647860ad6c2f13518af4a62b7cdeea9ea60f848708dc897a6e2e4b4ee62772db77094e0210546beebf2f669a2309009324807100e182ffdfeab2ce91b00dfa993acde3a1198dc8bd9daf98f449fb04fd8588d94693e08d3bc45f17c4ecdc040f138cc8916d2252478d3be342d5fa1f6231ef6562053e5c1463fdceee82ddbac66b0da4daf65b3013f59def8baf4f794c907dbc5b1ee493f52f549b1859584245ab1920859a808baa3e9b65d7bf4239420afa8639c8195b63902b24495b95c4143978e49843d88a92d1feed2eed1a88cd072d6d04ea26dce8ee4b14896fdb69bc7ff2971ed8ac5655148d2e9921218d74efdf17c56b533d0bb17d11e07d7458c4e34ee11c4144167a7112d11f439d71bf2ad82c8435e8a7554187c3576ea6bab4cf566c9c66e8f38a4f537dc93bd75b3620e055472f2d414c0731d4f528bab715aad0dda52fe0150c161adb9ef117746239bf3a18416a347a6945e9c394f8766edc85df408473a3882d2d93a64da5e3cade3c82fe53e6a767d089adc79aa72047cd3d18744debc587fe544ce938c8d1f67521d5024deac399a5c7c50b2310dc28e5c03049728ea590f059ae7098c9666f6834dd2a17beaf9a4ec5dc97157cd39a8cd5d0c7dba5682b6b03634257f0c9bc1d3e3f809aaa94f2354c98715a312d242a46a0f7707739e0d71910675b852365fe06a60cbcf69a27c023a1a3d878114f27d947e01a4e3e389d6460e88ed09bf37156b8d566e9e8c35914a0357998a7a2eb576e8abf709fba23acf8ccd6195aede0f41de381cca74e67e53d2d23db18a5de87bcfe482685efd2b8831b1da788dbb2a97e3ef3e7fe4e525f1f95c0878ce06833da439eb8185d1252a7dd4ac34c454f3d83efa682164d814aef7437e52adcf2216f61a76e7f8e4c400c1b45b5ceb41f78d3fd80e517d25e6e54d3703d1b20e21a24614d90e30ae64b5bddf6c537b08a2217706b5828665092f7b953d78734a2e6a14a77656b574a3b3c29453bafbff802f6504e227190bf807f2ec8fa95a1984d8d240d3640ffded856091a5e5d6bd1e119a6108c1bd813fe953bb7ef6dee2e1790f8f64b898a0cea52845d776a3b7d8727799bde4ec6b5d5e1e608ff38a3cb0b53cd1cec6f7e3b38d7a2f6cefdb764bcc9d2d66031e30bcd0a39a36f1e49d6f37eab66611a65d28b8e6ccdab3f68ee48a7b8a959edb67eadb93c708a4667b995b99abcf1b1c63bab1fe9ca5658d584f26833fc13a9c7773f95f65897d985dbb9aaa306e65c2add603122d6166f878c83b54bb7d48e9f5c49476f41ddfe2ba429fccd2c86451820726c1dd735ac0470c43509c3e5c4c5969476af15a5dee27cac5521171a91186ca87ae4b7f938d6967a9174068e72c18ee8cbbfba37a031cb095ea5ade96bb229cb007f5cab3b84687070956916c11cab0ceea61adb6ea1f909be63d73df96fbfa3a9f4b092dc974c6d7b72d4c7d85d54ca866c1bd96db96e741d637e5c63d697f81a4d99f84496ac385a1530e7e00cf3e83b1aa778c701931225ac888fd2701792fe9201239b09ef9ab48663bf00b2ef2fb7b6a502a401ceaa7c45df1e6ec3a839fbc9cf5c08797d5b31cb579761d6b0679f4bfcbd2b428806ca3969515e59b3b4b9fcebebb36dbe437aeef2b72a009e589ede96f2854b2aecb88d1070cbba9ecce1323c18c56d1a1937f71e6684b821c95a795ae8d9a41a25ed4bbac2dc6cd2491b74ac2b6601f9a70fecc2ed9787a1847b2330e950d6c279127b5190baf9b8f30ec9226bbdb2c3b3abd7c6948af4864faae5003b126889afcf23bc228ce9b79163398722f307e006b3bf11a3858838f38fc6b22746e2d691cb4de3c07bc236edc2ccc1962f89b868cead8d62b2c91f38d1ce2ff515cd13e5af00aeb2af0e9fcdd18bb90f9abeb3a1a4a821193741a3e518055deda6afa7742245053f4f5459fa3b7d57d75c303a78deb8b50f3c782dc40e7425572213fa06cd23d0b1831dcc3ca6aa84359c67b3b624e5328deaf5239b59226f7ab07e746358a2f74e75f0605abb1b267082ea88231d387edb6840ef33a117249f797a7d526aca625f4a557d1e21d726d138411f8772b88241dfe1f7548f5c2a0ea48e7d9caba4fa2b2dd48b4e80e66da0e3f4e2aacb6e26077760a5c5caf86b0f5a43dc09c537a5fc44f6f2b38251e225ae8b3754ce60537457466050fbf3ceeac31f02615d8b4c18b7421a15cd1f6ca7bf8f884c2698efd1a81b8fbbca563ae606ac576c1ea9d8c8af416c3c0958f5703e883c5b791ee36691659ccfde28994c4c7244f2ad982f5454794eefdf0564c654fcbb4970f8187b3baeee54e071d264bcf82fbab5603b04cd7429f8f62da1f229756ddeb2307558ce7ded127739cd767fc6818ddc0ae22043ba661df8d8933be47abae1e8cee145715b01d14c8972cabc64a333ca9d0eefddd16b278a0e24ebad940a1cb9d846894ccf92580768a9a89c5bfb742821a6bac443a2dd56d83b49ae49c555ce588b6d886108704fdf5a574731f3189e9f92c91f987109043dc09c0c245355ce5598394d99cbe1ccf56d20e471f2e6d31dba64175642713c469c2df2aa1ce462d85535c200437327b2ca4b9ba05fa770a606d3d4077cdea5fab544866589c932e8aaa8101dd9ed081e59209648a4231c3f5e5d7d328719e761f428f0dc00cee58d7fdc5e78f319164203e6faf0282280f2aa4c3a60cbe7ab8341235997eab923cfbc17d59afbbdfa25aee7f221536c44c6d2e63518b0139969857be91fb05396b749a29d0a57a25ccf4369a3628dc80fc4be7493e29e63581aa679c7fbb864e44c0ec5dd507190e249abb5383b3e0089f2563d7f46fda1919e8e651cb36cb4b597f3c7bef5af4f379acc13d734ceda5b5a838b1fcd3593ebfe23870fd0330ab29ee1f267807ba601ca90caa9d6a61f2d042ba49bfeae020f414f26c9d97430826bbe8c00793c5ee9e2de24d5a82c97a6f637d11c62d0b5a46ff98c715699ecce0674deb369593f96e99d678333c9096f3a905aca7f0476539109ff30cf09073e75e930a6d73c11b1e7b7dcddfde53e30d81c87cce0b00bc4ad66c82ecd2c4979c207ca014b4c9ce1e513cb0890e9ff90d6c5a04b0a3e3d9ecefa2f92d76a7928f5b4f3ed4df1a8cfe9997c2f743b12373e72ec6e8714d489f9ac7b85762b61f214daf4926693fc22fe3136782f453fce180bb45edd9c982f3864f62e31d7c780296015171d9a618329c3430b4b6e50fd6a774042973c5135920ae6b690d674793b2e9ea4fb6f9f9a7437e911501d0b6b3ea0d8433a5ec646108794441b903086532cd76387787e0ee67571b2c4bc3ac19b6dc4895069c008b8c148015b6ec24f7842087a491ec6888766231531b2a3a68ac64b3b61c5072394a14a14d7d6f47bb2587811c9c93eaf60f046631e670fc31193b781f3d96340ac0fe1a617318cb30956705190e2af2c78fc24c3144345c03bbc4e84900f9c0706f456dfa4e8539e8624386125cfe1a6d873035e9aae0f440d2a596cbfce791fac36f1e6056111e530aa186a10fa9cc6863b2c5c381033f791c31f61097fc331a6bffae4c2068e2f10d15894dac9a8348c3ee7e476d17a82ce70ea8af48842e4fa75b900643e91252c7f3f060aa6cc97f2627b1edd59ac8dcc1a000f0a52bee1b24276637270e46f8e9d16e928f8d197be913233f41091bf94a7aa19d345ffcfd60d783474064db43e142564bc2780ddfab2524b435ff0c12d0130d0d6c9cc576cbe089cf367959c42cab4a04f9b9f11adad248d53ac933a9f0eda5b9b47ef217e3c6ec376fb84d1a4a90bc568bbf6dbe06af022ab6040d3f3b8f0e2aa252ed41371f2d0852ae1f86c9872fa90f14fe19ad0fe32d4e4c03430e5b98f8ccd52183444dceca85c76bca07e30674ea570cee3c995e4549fdb045e7f7e88c8a52397e89d733e68f909c24a458e352a3d2248c33dfe60b5f858ec866d87f5e61768f6376400ef4c6963b571d4d48cac222df7431282cf7e590193ae971cff6e8aebe02981cb26dd144c3b1e134a935dbc59856a31675938299ca2e1e585cee96672fbc7dd1c0ca1638bfc58ea3773c4736e974182f5256acff2c0243f0989df12c6ef185e3bc922bceaa22741e5536ab033d8ceed765c9cb5cb96818df258d6f8af6524ed6f84e8882fd293009a5cd5d971ed1b5b30255742efcbffb78664587ff405f473026579302336a50f9fb68f58f08130b26ca921de2508a6a50ed5ec0f5f768fd63a955f1a8e7664563c882093783a13dc720f85f136f57f40d1d31b10b661fd00603c22b0383ad9beb8fa0ef4d1c0cebf8a8008e3eb39916e19856beac26d47d7bb814859e8290a2d5d36e3e1c2bc6945fc24341d0a7de5182c1366064b437445958d5b7c68eb018c716126c415d6ea550f2290055b68812753a694ca198a8c313488e3837e29c6c43da6600490b55bd60da3a404a8a36f81d6667c9ff3eb9882e19966d5f38b5fbb092b1809fc02c3b23ccef983b7d5b710fd7aa6eea20e9f22e4e86eda8eb8d65b1d18d63b20642bd0e5cc16e851a75fba100a9a1def9aa9f8859e82fa1959338bc0962302c6849a184fc4839c3ec171695640e1969f38bfec0ce32b9d5a157c323bcd85c6b4091872c4dfc90846caf404184202bf7d8fe7e6c0deef2b1b95bb3ad6e486efb39caec68a456f93316bf1739e38850250482bceebb8590c2280f78ad903aee58be562fcea1dfda4c64b6f9e304bf3c6df0a938cd398eea8377f390a8c548410048b3efc2c8ffca5ce13766d16a2d272f37e2609c0a73868243a88a237fc90d9e6374aae98c5f3fd126a0fc89767ad70544bec2bfc0dbeb2b058ec3a21265aa6f8908dfb76e46a1457f94097fdbf0927ca1aeddbcef108efa2826dba93f86be0033f0fc90d17e952686713c28ed470ff1d9332027d7b9f88c35f140ad59a4af0cfebd802a684f91f0c5d903193ce6960145dc28652d50ae3db98e8132f357f3c243df18c895321e30a83becc53d57db27921a5519524d16ab2d4f1bbe9f1932ecadd6151feadea062b80a57c180f325d1286e4498e937d840fbc38eb4af50d2d887230374dbadbf037fd4d2728a713c9a835865884479598bbf7c48c9b6a75a028a46628bda17c09f6a1bfb6ccc3a55f02d59365c16ba1107f2e9e84257754f1701d0c0b978b55ba2f1502124c8c7285ea0f14578b2529532109ccbd2d45308729822ac7249fef69ac001e21f02901a4268b10182b9db6c9692f581dfefc94ca1b7ec646a906d180330b1ccd00c2da257ff08f8fe9fdcfda2149498edfc305220db7ea6f71e783658dde03fdc381866ebde799a40c6afdee0ffea8f717c20df7c8d59d2ac36b8e828220db99828c8ce9a817373fde0ec76dfdf77c3fef2233b11581e85fe6b9793dd979ac88850b74fd07297048a511b5bfb1dccd50af0bffb8ba63d1f623fbcc005c937fb41427c711a4c44da7aa9b4f4cf354a4119fa4fa757f2263d8c2561032d1135b0477070b8f4591d44535d21e7d8d07086a0616ab4e2e66a3eb0bf4cc3a01a44960f5d5cbdeb3370f088de1a9b8459e01432e889bac8dd99b1845fd8882b4ec50b0d8b68c66b65f06d9fcee7866e5c197845d2350f866215248ba99cc71b19378dc66d4d88f15b1c0a1c82214f03317d316dc0f54987fe6d061b0ee216fc242c9cde85736c19ad445463aa404bcf849bcdff3732ff6a0d11e4c70270ee4ada14c69a5672f640b719db29a9dd034fbfe5ac8e9776778938943f2426a1c383b570899e72a4ae0312fd1cb303401bf06dfb6b9084586881fb7473a6ddfd1d4340d0546f4cb0f9dd4b7e77b43921ec4df94d79b9602148d0b03330b3bb0b81e606a4c5616700604bcb0eaa81ddeafad4fc4c654dcd997ef20140e4ff202567f8717e4b39242b87bb0c3df3c04413de11e1789ce22f099152693e0eddb00356070bbd543b368ac6b7a98d01e41e34fc814372aefb06fa169e527b1cd3ecfdc27e4ff28f0c00a6a3de0d6c4361ceb6dcaf9c9b0a1cd7f385224798ad7639ad33eab8be4a000527b57ab26c46cdc811f4f947824cbc248e438ad3172f39187a30b8d06113dbc666623a32fd7a8cbcfeebfaee98d55d8f1308346f6720912bed3f85218b8ae3d6eb3078f9a05d22ffa61820fc7f32654a2a19cb87091012c68eb6bc16ae0dbc893eb6d380e56d2512d01007fb85f288185c1e9ca48d7c328ad73cea3a491aca8fc95bc6734d390798e54a2c664d742a6bf17d346264c374eb4f488c06ed30923d3395ce2b483f5ef45e4ceab75665c0a7b2bc3f2b1f946e5a6f601e06eafda833d5fb571356fe7fa7b39edf890115ff6df861f9892e5d637aaffa1cb4f2c070e64902fde5f9d4fe358d968735fe231b213af50fe7118d08ae999d048b753780d705332f0db1716f3034ea5e58ae0bb86402ebfedf49b1d278b4bf6214f2b16c78931266e51e5226fa5200e15b913e5ba8e8cd32cc675a356b79d7b1cbebcc786d5b17321680d5da265d50acd938498952450f3858dae4c5e9518c702ac0e74907f5b81d1c999aed36cf700d3c03aba602b0289bef24fff894e43429ac32a062fadb7b8451c90fc49e10e5af0e93d3464ca2bfca09c5fa41d0aa755aea81763a8884e814708fb314deda07fecb696efe62a52b4f334e62263f0ca660406dd754637a7429d35e13427b837d78fce4cd23172ff197f61ed63a32936df6683852250e24a64104c4aed1f695acaa1da67c48ccbba930bcc7a4e25dc73269ac715540db3c05068f53f447d2992c0e981f0af3e5d0c8a611c98cb303207a5687b98f2c6d0906d6dd7c621881f6521306cee7a904f7c6647fa4cc20d537cc29a4713e4c4614222e79bea6c89745d553e42690dcaca938f860ea01b05665ae7f6d290124c8f5fd99de8b00dc84f02c4dbac6a5034f5d76de6ff9bbe5e94277b46c51664a9816ef9586722ec8dd9dbd7cf52f72b15f9d2682e76459460046de650c7aec22161f7eae0c047f2203970f4e1db1b86b7fd0ce9281aa78355dfb38fdd815f14fe548213fd9a2705c8984985dbf0db49602a0c569a94c874834c82e0b49b3142868498de779dcb0ecf1eeff08338415c59a85a194d8bb150337461409fbc2c340219c0b215723af67bf2e99fa25c54a7ea9e7e9809a868fdae7ed817648c59d2b93b83f7a0c17ca3153dbff8ff031c125a34003d9593f76539936fceccb5bf05f5106816e1319affe426fa6564d6a286f394696fbbf3656e1fdbafcb9fdc66b3fcc3f7759d6b9bf132d6214c977cede9fbe341954170bb02a67d1f77a5ac57c5187ab87d9f1787604575bc17619e0525bb4c0e19f0b3000818a2483aa5ca99248e5d3496aedc6736672a532d8ae4f3207bf55a6290643c68bb71b07d69e134b6a996f2299162425add1d6ff6daf5bec48306acd8e92b780ad813e1a6b7973165b04a7a9c115220b4f27797da197a6ef71aa88de3c2aebbd6b6af631f58949718eaa45559f654092ced6054410e1a0ca3890284ebe5980db49f6ebc4e14816eb7a0c90ac6080f06aa15ff2d93827e9faf193e1958188f768cd978769db206bf291be4214d0e2c1e16b47daa383d4e2f030f81d492243bff46adf41873fcca9158a01b2355d2525a58100153990731c587b6f63e01d146afca630a2b37b876ec2b7a9697451a2ac05871b4b11ca8cf672355c2de0ee6558f0043e43653afb1d88aef7e0587af5c5bff21be4b2ae7d120bf33103c1f2d13a5d095a7c12ea9245e5d49fbf582598f30336746a92c8ddff5439906e19e6c25fb23a07e55306e77858cce34f09edf6b49dd8a74548862a0f097cfcc54f16c3699dfad8f79c1c5515600c7527d430b9aade6d371d3a82ebd18a31d8b1d82f5ec85ee0402b549775ad79f7b7c25d9a3c164348a65aef2b9dd7550cb6bc5b7cfefc936ed0091304d3b125234db6fc8708b77b1f7786ed0cba910842093d3fac1e86da1b0b196de0c9c0f023897e3793a9ded4361d09aa92bc9f028652ccfb2947f7716943c4bbc7f24d595d1d70952c9a2ced41298bae4a2e41d25e35d4246105bf17ce2c938306d7c6cf544c36abce440224b50f657ebf8a2a061df4fb320fd25e2bde382e6a39d4cdc08dc858d20551ff2906412f825f5ad80c6a429aaa7238453c0dc8ddc7ed83b2db8e042fae4e2e8458b961525fa60aac53b7914af434a214b6d1812a227e6f168eb97253a72544324242d2766d2034478a7a5384b5c39a3d2acde3ac1088f17958b4a53d43072d79643736f4415a421a0f471bc055ab9b3f065752cc0879b55ba7f42f75088064da3d0ae16462b0ce9450925c966a692f9ae802611270ed152e1afc43737e1d64c53b32743f57d03456fce0986f5a68c1c13e539117f04fab711031b3b10a2ac7dafd4261fd77151dd272b641c3ac36ec5287df6534fd1de2b53638e2c63354e88be1bf2d27670bd58740880b2bd65029bf42ea4001fdc4557aeb76432b90184148971d5835ae3105e5f4da37107f50e477fe18d3f788ff7e22ae7e674986e18c916bc155b09301299efe216819fd95b70d17ff739e051bb75cfdb5c1b8be4d0516fe6fb810dc18bae2caf21090d7bb1bff3ee2b16e18b5bb8a67c0e4e17cb76519cd5cf1deefc43481e9d0b31da42d8dcec1871fd03a39d52b6b04336c68bd074a373d959324b020dce921e238d95976ec4e31016cd024aec076044fb1f8ca75f8ea6605b63158fa54377a004aedeb71d8339528ac7102a2da2755ac4aa37c2bd6558ae4b08c1b3b98535daffc584019332017d81793504be8ed5cbb9f0f2eb342e700952aab936f19db214395bef3a75d923da226cdaa146d36adf047826e86cf3d6ba98d064e0f492d896ddf7862d6e7e86b1962765ca6e7a1ae0caca3c820fbb720944022a786b6c8ea71122b3a1242b144a05324045de8acf14366f9a81c28f2c3d7ec973c8fd34bb90fd63de5d3fe7b4ec9616d1da3d0b70c56deeaaad2f76eca070aba79653f1499acb426d2a68bb4ee1715a82533406e5399acfd3cefe789a783f322eab14ab1f0aa047c9d047adcb6fbf86ba776a8116b8e39b7cabd79d1e0e16e671cfe96a252ba7fb5a1783c811dfa823e00d8887eb8c70d90f0d60ee60aa1b4ed6c97a37434405e588c7c411097953b85ede351d4cfc6a11f3bc4472489476f2c6636e19619ce58ebca7b4929b84e9cd9bb21a4d214ff9cc90802931bf13505aaa636e19677c6d7c5c80f952b04a91eaff50de1e52ce44904e21b834ab70d10fe892213e3d2cc539d21a3b592e117498f2822a99c7c174e895669882f6f42098eab83090ccf4164d843d23b0ff22b95edc0ea6c46870b059cd18712386e4667d169d4217fa1c883edcb1585e09c589c525bdf9a91e22216d5effed20458bca47d60800dcb0eb4296403d836b36410c543557cc50cf20efabb0e3b2801930757d91c311e6d7aa6ddc1aab4ce06ce0699375a4c6bf +MD = da81f8b846337c2dbf86c1818305516dcf50b6bd9e7b4b91312bcd32ee8e0736e869ec791043a7c67bb853a70f4a9f84 + +Len = 87352 +Msg = e3c137117f3738282f808dd94aec5699fa4938483507f46eee9a3fc48c20cef69b44b0a7c162e0b5f4ec1bbfeb0cefe5d28a15cf42f100f170edb60da5f8dff9ee351ba2149c9951ce58e62d366d02027a9eb940d48e3047bc25bfe15c35fe10445e230b5f2f8b83258d962a1359b876584dcda2d227adf7380a0149992155c405856ee98a61ddd36254d4bf6a1639cbd65ff9fe23049f894e63254c4402099c9973a4447c7bb8c9eb7348f323edac885b9be45bb16d2d8565fad2f34521452168f06e241fc443ee29b299ce262639364eca37c163aa7f74e495b14584c62fd9dbc474925a86a7c984db6f585b090a5c19b499392102bede35fd694ae939ef4e58b65d9515070be365b4749aabde44822321b3c9d3bf1249bffaa30a5dc1ae08488fd136389198c232074e9bfcec1231d4d92d7c6127a23fea54078ec6a7948e14177a7cac6a75f0559aa563387c9aef94a3ae57b48397471ed23cdd0e34c8672216fd6f57daccf5343522fb45d60447cb49de64b21a18eac33debff1bad731edc540517222bc25739a26c6a0d4279bee19166aa44364eae415dbbfdd75dbc38a998387df5a381a0caa82cb8760821de3e44ee31531d611e01fa55de288bcc3ff0ac3ea8b98c3157510e0aee6a6f232e4b2a1d02c51878bf69dc60aaf87ecabb1b56c0a0542cf905359dad13d0c0a7366e0a9c24846fbb1be2ca85692e7fdf32915f666eb0cc0231de1dbe2f8f44d77f10ad129f766a53b9d58e6c24b2d6332eba8fd719b4b37463b456e44b9140d9909adc287c85516821a8eebce36ccbed36feadbca9472b76241f0fc86dbdffd5f1725d86c2986b21dcc5b31eac44a636d3c583bc27537a30fa871212a0fbc8f42b02f8d3799601a77192a5398922ae358b77d7809abfe9cb70542569e933e25dc5b177b8a9695b2268798bb681ee2c13e97c72af0a73c06f0bee1175524d963a47e6a0dc5bf8c1b94ae02e3c9c9068f7723c1cf27f56474355bd9ddfe2322cb03a0b3de8972b7b949d315774e3f0aa0ab0209cf10252c670d52a934fa1c8ece92587148363ead0dcecd3cc055df63a732a8ebc539a4e841d139bb96c98f81d0d90c2ee56c91d0ab9bc2e5699138b5f5b68ef42c15033ca739879d9dfceab094303249208d0ac6f5297aabcd50b9563eaf3acf7e22be7e09aeb2db94f4bc7f6b40715ca42807f48d004afc8634ffd8c47522ba35f33530eb9941d226518352d8823fd5cace27fdc5a8ca540ebe7ac239b0dd60edf705f9cf91cb3dbc93cdef6e6e04411edfd927519b5f4ed14d9896f0dad14ff0bebf4d1810a56ae22bfa998f6c552b1aedaa159350a0497872f7bbac6b94c408babf8f67ae66d6119aa7d5de25a8f04967f95d1d5103e05ecf16c4aeeb9e89706b855530b3962bd5504448bcf2764d14ef6542521510801ea254369ac354fcd241bf1305d899c8a7fd5e56be7b537e27d47c89d4254cb5129d5e85d28b6e9aa8edbb6d5976183903e264845528b71fdcc78d78160a1f0be5208426e8bc31ef5ec008a89e2467f963bfe556138317bebe3936b18a2c1dd100dc73be6fde55678e593579666c2f8661d65f406c030bb74699f6bab313bfc0f0119ba0ba5a3f9f9229a04424a5c56c68d630d7e120f9b5f07a5bf823597b483d706a827ac856f414b2079d6b79d017f3301880f5756827664ac4fe5d55e6c333696eb8039132018072a9e99d40b6259b6464d02b78ed87f29bc031c39178ee8c7d26c5e75d67545fec25bd5ca30df1bbf3b449f593e0443fdddc36e8a4a816a32c1130b8855d492d9ef98d0c094e18ff5e6562d66ee708a89187725f07fad811e6bc9ce9918a6c540ba3dd4dfbdd17b015169f60526831c74740787923f7af533d974eed0a854a7da2932274e3515a88a8466405f6fa5c067fa5bdd9911508d1a12fdb4568c440050475f11368417de398536549c503e400ab15b6e2c7e97127b1e4d68534ce0984919acdcbf303de4b65ebf7ae352b66204a1f084740db74dfd064b52ee718f366ea902ce10c3f184a817ebf95cfb76effed200659946180349d1deb95082b8a467fe473152c59a84b7b6a11b30d6e4ae9f4d745ac2b122ff0787f0e7a107c5a8db20654bacbc9fad8c45c92687686969901935ab17d73e08de31682208891d0b7318426547326ac7cfcb4a63883b6ee6783e2aa0c13fd2e576d62db3ad8f2894d6edc8c64bae629a28510e1a5cd659ee00c53a81e871485f787e29e2b9a14e0daca7ddb8dfb9efed3ddefc932ac19349d0b54f95b3f6063e8c3143f65447f73c9f4f6b812bda798ab97afc151b8585bf8f1650254b55764a59f86339a50a8beb55eb596a58996837422df6e957a99618e5f02479d816fe4a88da71f1d57172e076868fbb8e7e25bd8000d25805b52d1b7c4cb5d981c20808c0e056670b0514e4ab25f5bcf41216e41dfa78a84e31b492f931ea8d6ee0fb4aaa11f8e3704cdabe9cd273b5b3dca473be24d12159a6924307a8abdcc8f83fd9ee7540ac2cd02a38f094f1edf26437340d84c30d4f9c2ff64cb8e010b7923c7d3314160c66196d184f7457adda3338edb22537b25799f3757069716f62375afd21f7634947ad0c2763788d3d93d00d67550c165a9a2746871cc34742f26e012361250dacf6166d2dd1aa7be544c3206a9d43464b3fcd90f3f8cf48d08ec099b59ba6fe7d9bdcfaf244120aed1695d8be32d1b1cd6f143982ab945d635fb48a7c76831c0460851a3d62b7209c30cd9c2abdbe3d2a5282a9fcde1a6f418dd23c409bc351896b9b34d7d3a1a63bbaf3d677e612d4a80fa14829386a64b33fa217c9b26e8453e4a6b28940d88512de90ed6d54d65d91cff97fd0628b26019dad84de628d9dabf42cfb195165a369c22b49d4b012c02bb910b4bb03859b73d07ae949532683d9c3b7774fad4fea888e4c5274a1cce5bff67050b0c461ad510091afd02e44202578ce8ef5fd9e41b66b7b7015d00eb494ada1bc784d2643e2547b3f3c9bec5bd63bfaa8d1e85a8f3d81410b7ee4df15f407295fdb45dc446ff5bfff5441281c3636c12dad178cbe63f7258b788648f0252c92a0a0548c9a400be559e2c9ff4b8b8eae854f313cb571f5b058cb5e4f2d704364e991233d2c9dbd76b4acda7ad11e6e46187fdf705caea568da3f13ffb41d7425a1745af7e2ce33f9787c1d9f9437fc134f07c9329b642dd7799b4e5d6d74e95f2f12a1c2a41a96f60c183a787d1e609c90ae96895ad9b5859ea9b67340bdc799fd339ea75acb0ef5da48d80d741ac369443bef7e815766f9af2ff448163f395c729efcadec27c27f49d69f6462744d03d4777b17f82467bb16f6afe4d543652ff61d61dd4277db1bc18839872d7525f1a62ae35ea788e15339c690506711739af176763d45028052aa284b7ebf6274bb241bce5b77cdfc4a82673f93b2f18c25cb72e2d8db12daab6d7c804ffe8661eab514e5154e39df2658a063b5a02bd859edd94db3eded11ae704d7d04d4281505c0dbd0941616b372223aa4bf18067ebdbd7361d864dc4ce31c62eda5288fb794af3a36e0b5aa9fb34afeacb801cba6daa408c34e2627b3d3d9857638e104701fe9f6bf02153ecc7337b120a845c37a360b5f1e1d1d166f05107cc0c7e9cf682fd6da14011c196239511eab97cb331f5b5841184e2ff1a801271074592738c64bdeaddde5b485888e000cf38e7b66c0d1f57659e746ff855088093af78387b3fc6936c1b6c4c866f9ac42a0943da3831e48c68af349892f79992fb9a8e50356c9df3e697d332b2502bd895bb2f93190ccbbf9537720d7ce04c44a9a7435f5d83aa88d7d42ebf6ed319ba9ccef97591063b4d65b7db331897a702184635ba560d72ceba40bd371e50fae6a9a53ff632b699d264b0ceadf8862047d207e405b1729d42086e2d3e436235f946de61a970868ddb1ca2dad28f444ea2616ccca5f24b706f3ccced39607f514eeefb1ce3cd0e7dc3f81e7e456f5a889e40d55e2f8b0092b2e1ed8bbd0810e3641c6bb049caa6f0298184277afb217497fae227170e3a8ac97230673daccf52e559a0ca5fdbf87b78336464e7c541992bea03a5d0de41beff78462e4fc0f3263f214ad97a837b763ca83fc51040234cc6a8ba69018dcea5e15e9f4f47e734e3ce0dba5c4e539876e33a96b6991e5f25f4b196cf0d8f29e60bbf8c38ca71fd023e698fc12fced8040874d9b7c6925dab429f09667974fbe5caf5cd795c03b407fcef3bb6b347c29418d1a9573d5e97431ccb82bdc9b1ad2bcbabb38f511f127b75e93e9b6d60e0ada0fb560371d59493ffc1a34362e7c63e7a4beef96e2670c355f218edb2acaac71d3c904af899ee04780bdb85f969df845350c025e7bc577609844b3c178d99670a3fc8ac261e0c1af214bbf3e1ba4193e354e7c372334f0a0d3a55e520863503d45f6f95aec4675e0a76952bb07ba4e3a6b2b620824dc005dd6ec9a75218f63428160595e73f98343dac177bea00620a1a04cbeb9c4e42eff6ac06c120d8556e521e2b3b53e21733f81fb382f30b116db9c5897314c7403ee57c9de12126eb190eb230e4995e4ce3b66bf9df6fde2b95027f8f65a04b6069365b0f75b7972fdaaa9cc7201c06d1ba14fb3adfc50c28f6909d4e21b33d0bf545c1dbfd68ab8c19b2184e7c506e2e2d8058270277079228c0993635c22eab69a03b73f6b8c6985ca1cf4767db16cac4850d2ee60a72efa22f1dd81051a2d74ce23277e03c9acd2a161c426110732ff59f74c30903b099d94875c45ff61c080568414848487aa2e87ba9b006a515d6673c4973d9d7533954894b5b6303fcc629cee275ad80f8a24e4ed210a6ed61466fe7d5b1d719dd46aa8df93dd81fe79a306290807e5a9753921c3ff4e06e0808962eb42d9f2fb13a21b329cc0dae5eecafefc5e93959c93f7a404ddd41bb5c85607d6f2780ad619c708537869243b545feb31d207ce320be5d67862a2939e165556061302a0780e60d90bd0e04549d2ea358e0b6a7ab1068b1fe637c258e38f0fb5424e809b2719f6f5224c2b275791f443dcb2c48062ab72e818043c50cc5d0b8d534bf9e52c6210c4609354b0acb9047fe26e1ec88d232197d4701665a1a8d14702b17565cf1236ae8d4e63ca9271a3506ae87f3a7a952096e3235a7ea997ea491528fc035751f11b70245e5c4fe1581e3ac7efbe702af84b0dc610822d53ddfd545a97a70e46c773d2be4f4e2c32ab521cb4763cb90a302019013e5b750432ca89ec4d393a1a421e7bc33d88718c2452d5571d9c9b5c507bd17beef0c9d072177a8927a124f4ea8433dc31f166164c873057ebc65f49e1c6fbdd272971e2244ef0d72bc714fd460ec2b1327353f9aa59f45de9a24cf86a6860cef2eeb460d0d6b37e6394515dde22efe948f57f5cc731e8101d19ac9173c9c8f75627dc73ff178b27d7ee253b3a2a832d7b6033682975d6199111c53e8451fbff5bbc2f423779407a8ebfd6bfe38c4724d49ab7455a8f841f4d73e1252668c0900995f6f60364991e90edad1360b200775a8c531ae2e5bacb5728466ee076e04f699b78b6e84060bce561f25c390279cd161e4f0f47e142c5b9173c423be324e682b4ffab70755bfb9604edc5f7e679cf0e39f24e13e9e3b47b270dc9be1751fd5cc9d1fc226b5384a9bde67321c5c7254cc385fccd676440a342ff2af17b323b00c337d2868a0ffe297324913f062c76d8a65044fec28e123b4f5c8e5c758e4975887955253b59121b10f045d913706ab8c89b4c2d6229d24a356a1c886e2ccec302dfac86e4f768897b92b778535baaf613ae3ce2affd28d9de72fdfccfd573f317b10032efb2a77a9c5211a32eb4de9a6dd03da611d1baef31bb5840fe51e00cb13678afc25277f75b7778e30c45aeaac04b77fff06e3394168f56dd6568bc16b7b73d87c79f8207a04b16bf55d4c030f3651178b49d39d075341f5a6ae2b01a117c764164616db2531413bf712abf33ee673396c52474ac36f3da3f7786631ea7cd4c66035fe3005c1b976bc90f51bc999907e38bcb8e2f4214af15f31d7e2d61f2e77d0b628afaa3a8c94cc34b1ed2dc42b2e66f5c2c627fdfc762466fa84c27326e0ee4320aa71103d1e9c8a5cf7d9fab5f27d79df94bd69c4ab1d7448a85e1d70aa2f5970c108c73d8ca41e60cc5ca1d342f2c589af42f9260871064cbdf7727e2c0a859383bfd41067894d67cb345de5985d753ba65730a2f6e58971463d16b1ff0643f35324db6827a2b3dc84ef836f7b13e57ffa5884ce2ed17a40d17d7eae8ba9212acfd621875586ce3989fcb6f363ccb2b11bb58a09f8db6545d0572ee66a7989a44a226af069bc19092aca7d03dade59999b2ca4e8ed49b6fad3588bdc03edf9fa62b80c55eca910b617f72a0358cf3673f8fc59dd94c2fbda4ad02a01f07cfe9799f57a0a46d431dab20162845625f5eaa5c33d7a57dda05eb77c9dfab8bd03f66079589010d418e199579b096b590468321fb421dee0511299bc4c28b514b6b156a21c89d31f22652e8857f5010eee771e40526662716a7071fda91e8e2a6332dd0e3a59f61beacff2120df9af8e1081daf39cdabb077902d0df593e9c44b605742c3682f250deac74634169cf7d1732e897f7e12128e94426cfc11b781a0ba3ac6a958770647a65361a86d7f9426ee4d7bbf80c3d4c57aef45d65379a10f087f677dbe9c8bd4a94a79642c6b584842228be11ce77e830cdb9f6da158aaff14cd2a27e2c93d1dbb5597509b87c9a03754c3cd9aa6982f10ae82a8437c26d8a4cd198f0c24a288a31cc25402fc7194948c2b6b4227ab334f12f76f800c9c0181263b9e84d5447e2b460258a8f1d88d2371caa45b933ef691ad04aaa23195e47381983a9105ab68197c5f44d68f84f4aaaca85e2f11dae09d27b441ef1298e84186394c7ddc5dac3665e200d4feff2ff2e4cd8204ca06593d290c1db0d82d75b5dc25bd8e81e4b44aaa9274ea65d1a8c3c242f923e64ac9375b16242caadcf3952c64730d1dc8e61df2788960ec80c5e4ee0ea9d48c2e985464d93fadb12ecaaa1dff5842d78fac76e69a257dbd96f01f0f397c5fe43b2e5ced5d577914aa63bc58fd5374d8c36d1f2d02318afd9b903acdcc590b17f8f4179dab52d9fcd9249384664bec47eb90de70b896cfd7150cfed2ce27214dee504d1dca1a15914176f64a432af34d907f7c57c23a94718ece33c347d0e9ada3abc514c29575fa6cc2ae529bd7cf1239a1c1892a0721f38d3da14b3f3bab60a16e482b9cad4160e26e8443763ac8bd6e5e74aff8e4bd869bc10f10bf50af8e70ff9e0a5f49c0ea29e43dc6dc3b2877b81e5f7032b8b2523fc247bacef73c5d96c88f5813503bc1cb8aa482d6c235679d494875e26d467e01a80ff275189cf89d2fe3bdc0acfa0c50ca80206bb739b6a747f8660feac23269dc3060bb9b15850d9e61e36f4445f43e0b9847a4027a8b5e8137eac2176e9800c472aba868f02d6c7cd26f280064a11fb4b5a0878b410f495dcca902dc91d54dc99c7b446875174431fe0cf1c89e3a7a2f9fd21f3bd569f044814cd7217414d853787a9881eb6c1c25ad60d4843de8d8e31e8671f880c2db9f1c7b49ce607b2acbcc4eab9c9c537dc0a713d81c87d2c038fa6487ab884293d466dd61cb9b32ca97619f85a2cef5ee6ab3ce0578c521ba96fa13683d36109f4d271b26006d624021ff162f79ca79f78b9b3964813efc4e65e83c1c94d255877027dca156203315d06d5ab00bd808208b25fbfc1d3c8c050d8a86ac9aa438d4a72dc9d8b3fbccd00b7514103e3fcaf2d21abcd63505f866f6a89a1f35f3e20d59038ad5014556f93cddec58fc49e6f4c84126f8b2e269fa890c1f7d4f097bbaed6fc6a02647f819ca6e898f2c3c85afd564df6c7a1b07472c7dbececf2c2a63cd3a253f0c49dbb71df094bdb661cea962498f3a77f8f9d748c21f1b9da51791602c51bc9992265b9d2bb4ea8100ea6cd5b9df688fc1683246a4e96ba1bc6bcb0e0cef1eb76c028db2e7921f77610080987c7600acbd7bde8cebc5c7c3b84e9a3fa4aa6e4d1d97d6c4ebd6647fcb396b115afe09b5355b65845f5a36ebe3e7855bba27b342ee0cbd3b0027bf8188bdb7aa1b1c8c92712f4f95c751c001835f14ca1711f580278acb7fee2d3a66deb3ebca867a902bb9202226ed516dede1ddcff5830e3dee103886f87d91dc14164390d865c01d68555668a197034697458a3f42c5c69274f13f780e74fbad7477972d3e7e963b318cf8a86d8e0e52e7f68eeb1aa7e3fcfa11c6292a9d12b66e4bd44a6399a2f36ea82f6bf29a1c9ac63e105be6ef0a8368b9f620b2be7ffeebd82570af808f4c07ef22389882d2241a6338180c66e530a631f7e510a0ea8dd168b0258afa034fe4aafa97c710dafacdae2fa9f6d41c0a9dc1f000aa0bf96c0a419df45ccea603ed20de10e70adc24c5671d960a01571933b109faeac757a27cab15628dc522700b9bf72c60397fa8ecd62a68b2b43d6651486c59379baa3711f040f985a71c9e24616c729a656c9028437ca655b776f8e0cf3ea8f8509b34af574540ad3c3f9621bb666bfe564be463f53ed85ad0abd8c68eaa6c97aed1a040274cbf6b4b305febf10d9df2d3c3aa843596872bc8840cedcdd52f7b7df583aba97fff289e9a01684b8892dfa67cec734bac3a2f66a89e3bd4ea780c85aee6d82504874dfb2385821100d22e951fb1187fa979ce74c0959aea0fd0b28ea5d0afe203df402b73f2208a9ce3456954025b18b5cc70b873faf1596cbed55f8149182aa5906bf633502aff854f8ee9c2e62460f7bc7dfc6ad427672bcaddc1eb59fb43112135230ba787b8e29e6fdf12655b9d98d05d064c2b265d717c327c8b094076701a057ca20021fddc565211eb87e818bf91799ec208d583695d3c580860cf0bea0445c7a162df169b019e49f655b3199585378e74721c2038f4641d0b66904aa6665ccdafd6a94a4626bb4ddbd6a4e84236009d0971e37d09c910923b246c7bcdc8b256756367e3064e11e54112a4cced2c3d922a0d12e30265a98041a149e586b2af2a9b110127020008dbd012990fbfed54367e4f92984b4f98afc4e611d1faadbb10c8e8605f63c408f631dd6df7df03af51ae3e49e40d0f44e76df9aa8751403ed1a4f16ad2502279fd0c7b06cd75f6b4ab61e22011702e14f0e4e4fe4fb2f4a035d83308caf2a3c3b908f54ed8ab4ccd0b4044ff669b337291d0aff371455049040cb6238d70ce4ef2ce522b62a78f613af26bcf2ab7a6c594d960733434dca106e783a164f32c826f069a87b19146d701205f76a6eb1074bfa80165e2a420110312a16c97a343c8fa57d6490e92fa99267229de2260f8e9dbe599b0c1bfa5ffc235186a6ea79e8659690d59c1d2320e718fd0ede53de68baf38313e1aadf2d40cf7f1853128c22555e5479f1278769eac205c8d39ab62c20547d0f634968ff9a90033a3274d390eb6738c0249ac4eb19dccd6a564d2f5f6a3bd7ec059a105d461f9e6ae993f8aa844bae56dad9843af0e3c451dafd9268f52404384cff6dbcffc8a138dcf253d5ac76359c58761dc01c518b1dd62e97ef5da78282adfbe9951415ac1281128da8e0615f1f31f32a20d8a0723ccc5298491030f349bd121c8c1f912f867a770eaabca79b4dfbd311c3c27b1a1d420c2c0c995aa70bded46ef89ec59c032d824f519db37aa71a986d2f662bf36dcbadbba0657f4e2797b569610e2d82271ee6d813f01f6db922a5a4ca405d9e7cddc9dfbb1129294b8c27845bea337250c2f721887045e50288ad513acd6a6be8dce300a308e2f8e600bd585fbf61dd2ebe45c4158ab18101c0f1eae789ecfc205d8bb6fed9371d65a9e94dd2fa5322ff75452851abfcc2357025ea56e24fbfb1d4266b34ee900768fc3dfd6c2761f4716c97d6a36092192c0abbc81f832d372be535b5dbd578576e6c2dbf61d328c1f3189047a124ec0643e5161c87d8eff2ece54bff5a1a7a8dc46e2b2c8a6a120c131dd103d175951a1bb3d740565012637368dbd03629f10b2996c8cd1c68a8434fc0dc93aadf17b511eb81ebd1753f096df467a1068086600c6a8909be5b660807c6156f93ddde67d4f08877afd4c0752b0c721a31aa951ccb5dee7ad6cee5bae9721e0022de63b2d3575d6c37eb410739057d845e24c7a204e56b88fc1f81dc437948edee7d42267ba4934210252b6026940c77d27b7880379572cca4e9c4fcd43038914d16f4235c5cac81bf1ef9e0622c818d352b3247e1e2b6be57aa499cea3b6f82c557e449e3f42bb39b4537387a338f0cfc908f69725189c68acd6a2d13ff504aedacbcfab0ef73403b146db8ed4d87afaf57ea5587667e8db4efc13ddff08d523c81c8c621b325c0251907e219defdbdb3edddac9f96076c7c7dc93fbcb369213863a23cd4e3a5abdfcf8064be6c73efb0dec3cf1974a6fb47f3fcb328bc964047eed3bf48f5957bc1b48181197a6c9e0c87474d8366ffa28deec628a2707728017fc7cddc7d57b8814465f7d98d5a414d93d2986bf1540ad4cad010b8739e50eb9319092dcf7eda851bb8096d19cf81fa60f04041b8568ca314850be93a6e437cc521c1bb807d6a4386e26642a42ed8799b2ad5930079b08f586f6aa34989881b828cb7e414d5d053329f7f08c11aad618edcb8de8e201ed002f9cd750552876e67b42c56110ab52a9b29b41dd4f58938d8a06a92a60c103ba0be94ed026bd9ebc132cf8ff9ae71302d2bb5f07451e475f4f08b3ddc704d28ce186169d537f80a3b72f1d03313ad1a551ff53f03b2579f60576b6eb60f1e1dc7b1a379d2495a40431f33e541ecc12fcf70e24827894b1ba74fbb73b73b1b8139f4ebabae1289245472162dca9c4616e8c91daa346947813633dc0b5486bdf9a16caa6dbd15fd3d0c2619282194b4363d72f7e3deb4d54699be4d8412648dfd7a83503e83d63ee0b695ad52eb8884243a1911737b0e6d024e59908c757703e341c38dac86d5b6b6006b533c8cca4e577b25ead79dd8871ac0704572f210a87183c7a3265a970d3365f19b4399ec6b465d23f49ebba5ac169c9cccd61cd3e3febcea413a639caacf43e2f616776173876c9dcf1758f8547c4f5997246a236f0149b5d857364908104699f413b9cbff8125edcb0ffa3308b2351154fc4ea1721fd6b4e91b474ebd7cda8105c9d57e57da25be88b713f8416efa7e66bc4eb0c5b0d061e3e51af0238b7c52bbb76f0b14d8c86a78cb3aba96f91bdb4ce2fef3a25ac337695335efe2b2a869765acaf4cf23aa7c2baad2fc61e6f5b2881eb3ccc0742bcfe9c40c806398eb5fc6229dcdef41288e01d481303acf34be98be21ae88937675d5d613743e84b1804bbd3bf8ed97ef0aabe6a9e89a08454a0f4fad3b734f4fd3ce07ff1dcc3c978557794a0852be5a6c7a4fc198082893df5c51dae608fdf45422b803ffa4f719c979e53c6eb71af73e0d7e7cc10db6ccf8f0532f20b23610918484e69c516a94e7339f87ae734431f9d6011ff5f3194d217bc21e8e276e30f653fcfb7649fda54904f6a04a1fb0b72a54664fa980f690e34f2d2d80a12cb20d216ed7100726d7798e893ac424e6e34a191c704e1fa534a8fb02c09ae7f820407d78edec018c87f300c5abaf2b5d42c384a2167627cba50d0fd19c5f4437183ab8a9c47cd18553402c4a775d8b9a52313785c69451c06e69ee2815204e8ff656635fef44efa7b5eb61762261de14ae1da235f53af639fd5a1664af907f69371e2e29c2d6c47a1c4f40e7415e8b6292e3453126dcad7eee482915d0225f39770c4985e3a4f86312f63b0c38a62bfabd2c9115dfebe0259dde96ba2b58569722bb7602c621e3f9267ab0538cdb384389442642850b36c49867dfd015a50df8c676141eeef02fa2c347515bb25028d393d47555ba9d09b27a9e74e6338adde4def6a438c272240675e69e935dc776314957febde523d19590ccf66ae98c5ed1d8a7b6eee53a798abac2e888c383c8d3364932e9993236e4978db4eccc2c09464ff3ccbfdbab88b60e76dfaaa827693fc722a2675b3aa205db4b60da3fec55b8a1754619fa67ea0eed7cd48750150fed987eddc58fcf9b9ff8a06ab1d94fccbf79a6c38bd5d205fbd44f779d7fff054316a84572cb439c196c0743121cb8e6b13502b594028c75035f69295b7c27e206ce4969fd72491be8a1fa7a696eda3c347003acb0e4f9bfcbfb447a5fc9323e7f1bdcbbd43942a3a426f48126640625cf9744096111ac3eac148beaf90ba06332abdcdb8564b2bbc2878fe7e780df4bd9372e6c32fd168a2a5789ebe5a7f518b7eab4198fa93bdcda30172f1b49b816e7bc3d45952bbb1add10d8fd7422a29785551d26616b208f41bd44b73023430f81b2fb1606121c792afcf3b043002b8811875262991f133b9f8b7320c4a1e29e2d97d25e1444bd1d9a585474c0c50262e2de0e5e9559867a4a373cfc574a295b41f77dae2e381f80b1df95eb8be5c9b07fd5ab8ae49efcb3e82d0c9a568089cf754e3756e260b64af7ef1264e2f6e3e95f0ab4781553e880efe95c9b40f986532df8aa18af5303c4d3036471845ce375f6f9a396961ccc59c808c76fb4f9a19ed2a340440383aa96d9b906a1ee9c4afede0f0366f55e2ab716e7b79811155dfb19ca84697d76fd29827c637670497cec8ac75e89a19c86214312b794f3e12e0049db01098ba18e0553ca255fb7c90bb773cf1f4f296c6110d32641f6bbc19437195120a49c97cfa2d42ea6de23bf79f82f72c057fb224e0e5d8ed13df75b2317dec97dbb4ede549a7a16726242714a17244edc14a5629f8238a90fcb34f25d2b20b072be10c99f44bc1e129ca2a2eeace8dfed05a6b1e814fb21382ed34b94d97582aa4d60fe124a10a201ddc2b8ea11e3925dbb7d74ba2f2b73f4e970bb7cbb43cc8ec9ddf050132e5ebab60117defebb02b8a6a84f8849301dc08b8bc67739220a8ab3e624db285b80b7b60c641fcbb59d8847a586d4fbaf8b258592e116eb86a938abf82016022ec4934e33122ef199ef372ef3df12aef0488e4814bfde3ae8451302a26683292ea6b7ef23a6af08ae646fbd21ace3dbb8d285738fa73fbfdd4aa478636cb515c19390394c95f29989a97c82ad64ab1a5fb58578623bade2cc46674dc9972e408e07d68d1c64bbfca20af80ff5baeae36b6e18c74ae1bb3c3ba4c613339a5141fa9fd58b11974dda8e156cc5990425bf4268ba00984dea24b2025b693fdac0928db82793dab23a9bb455354415d4de169b31d384e8b4bd54b5db91a05cdceeaabddd4737c629f4b8ab570bfbeaa19681dc661ff49aca9714bd9d0368f9155df3019bbef772732ec9e9773b6d95fec1797c51d9a04d042a1d3fc32b23c31871240f6ff9534e322b47d5425e099650f165f1a1ab487dd5c8b6c2ea6351196ada862dc670cbd7cb8cab1554ee606a2ca8efd2b20f3d8bd40579dd7f66718a60ecc1f33bdfd1adc3c57c201b66f28ff64a7f962f7ff0156362eef5fe8f2584af4a4fe64c70f51e9f68236bf242408642788dc2666810a928538e92e457bd96ba55887d54eeb6c8d2d7497f962acadba595a2ede3621f957779c13acd4ada4ef6a1142ef193872ae2b546c1636b11fe7434475f42f86d88f5283f5425f2dc0c08bf7b81af29f6c36364b3e7e69d867d52d6f3bcf1959ae215f141856aca635c4503170bf9fc8610c97819498c3cb8c6a5e0207d7bc4184f5e678035285be0ce501e8f244e95a5918961df6ce0b32969020266274e0e761f32fd63e9cb01d4c09e543c71398fe5d427a48ec870bb48e2eb903d30e4cf24d038157529ef56cfd1a456b7692745b73728d29ff2c89fa7b2c72c0e20dc90b510d2623c6be1e5327ff6987872b441aa69015e9b6234eac6571938617d91fda73f964612266f179d3a099c08345d2e2fb845baf9ad5227154e7647cfbda1606bdaf8439effd388709e51d3ef147e45c7c36a7a432aaccf151752dcb157975383717cdd4b3ebb924cfb63c28599b432f308f41ef060b16d56303359aed1c0617e81a895af9973df92ffb40a643a8b7041f7570ba9e5ec6c5937ac5120c2d8f4cd89efef3466b8bae309c6fe238d6088352d17d2a830ca568e8c0255bf912d97e0f8c76c524ce6deada811201bf8dfd53d08cb0693c7e7b676abe9d9c3c35ac5696cd37fb1a28a9553693702e61355f1da18c519f511b1069215c75fd5efcd07c744789bbb1e208984bb8d38fa536f688cebba8f34a4a2b171683f4a7e6d10c97b1e4b62d6f62525b22d9814c13f98a3d5e00fd8eb0759619501963c25c1b294f568b057bdf114f45c1dfc38e33e4e3e3594297980b031716d7070a754941f04e6924bdca8657c6ff32b0e17d8e60c823c86bbf38e15c77b7b43631e934ad2639f5962745ee9d81317d362340abd603a5b262bd96bce87da3ee8d2046a5c696bbffcb8b119e494682a857d10012ac5a101f0fd9db230ef3828df31eb324f4077a91aa31591ec5de9abdfd32e44c4c960d175a5b2f9f399ffe9a5275583a9f401eb21b6043f7771122c30f8f15e01c7f43a32b8ab9b7ce4bbd1b916b5e6e2f0a506b0661f7b0c9a6c2c37530ba5686dc5bca6aafa2f336bd671b9849ed490c2db8c3537d9ed1226721c4175dfc37f077fc95ff1211dbd9bea59f4f572c529f71fdc2ebf960e2e91ae8cedd5e030ac416cf0ad2fb2ff81f151fb19edc44114e9ec770b420646c8888bee9af7af65769827b34ccb224d1718c7c586d225d0e827bc0d69739d3f766794c1e75fbfda74783a918d37e17ee35e9649da46f9dd2a4d18efb7c8bd409ebb53a7417274280c6e001c0d0a930d8d5f581862b0c2fe41a68d9e74c5f902c7f032ff47d47ea6d4e632a33ac799916b778781eea4139cc4e084aa3edfd2fe78a2cd3a58fa220f347d2cd794d377730453af46ac955e413a679883649add8c274f9cf8f36820a9c19f6919b9d2af5afe5029b74b19257408c823ca847b7b346a52fcbba582dd0ef2c971fa0839c381a01991543883ebbdb67ed0e02ce62e9fa86996e2fdeec9b74e97d1e90e6d36bf900c80bdf38a2376c9f80a54bc8f8a2677dfe61f5b10793b4b66f3773b018b4d54a552551a706f47c9c04aa8b1cbf0513f3254c14b7c6df36fc361252c8b33b3447080aa0bfb11992c540c4cab2003b8851d7d595da71a882249a563416ec29a15fab63d466edcf3784fe9c1172026b4efddca77f014f15219463ac22820ba6a1fa04d7f686003ef24004da67440fbeeb61fc68da14a94f9ab659bb23f457d9be80dd0f0c06338d4b621b25d5106d5ce9e3ffc1aefac77d75f1442c3f5419eb7f59fcb221cecee5 +MD = 2714b6e51ac7b317efdbfce1441dce76e98f3198b495651fa33b2c90479c15b8ae7811b203a739d3e809c2e28a4e1f95 + +Len = 88144 +Msg = 19591e3006d32cd4f5b0d74e5181fb61dfc3ae159664bc5db08354f6017800928814da364429fee1484d3b6e12dc0ebb193cd00ba5652ea9e3a0dacf398e80c5d76dfc4d8f97ca3fe64bbd716bb0f4d947170bf616818e6bf561b3eedca348602fecea3d8f247837f632c71e0306970392ddc69d90c0c4ec0e4e471b93bc40abb71a0dceedd8f011a188c03e83e5de8122156bc9bc2bb87154f0fe2006e350ee987ecdc851bb1a150ed710999256b19a1e47614241c95345f2ce41c4dc1f6070f9a193f262d6de8b66a61ef7d960f898aefc10d0c9a37baf0e7176cebe79587a0309c515c93025bad07e5420ff0b9bc1fcbae03bf9bf19f6d15f070753f72054dd40cdf92ed1d5eb75e619dbad5f835e2d0c394a7b27166362225a3744a4a046b1ce116637c2d8667c66d5f28b6596b66c7783c7f7e3583ee942d9263885c198a439fb248f0a14730e86f12b4024bd13df85267814f9c9cf9045ea9bd8a46991e00bf1fadcb1735a53cfd34f75a4e1bbaebd8a257b73505d7db5f75fcc08817a8dcb5db2c7c0dc6272c8e426d1eee8f702a71798d458d432d819673bbbb9f29bd202a612f73e36d494fa8c77fd09bc0f03cc3698c6b13f94cafaa2f44dc0a23cd83734e315336bf8e0eb340ca0fd434bd8b34decf98578cc7bdf10552b247ba5c7f26fecc8a862167f2542ab63d367f3aae5c65d16dc672112501925fded641ec6bcbff7b9a303769830201dee920e4ea0e807b3c5bff4ddb7d5252b6a2344eefd1b8cca8f2f366054923429e84222a5e3467ab6ad34074694f79c301bcf055e95993e2ff351e31bdbd5e899faec8a409a86852d774688a6ce3de6fcb8f98eb6b6be3deb8d13f2f05480a334cb972e67ee3192e2cafa5f4390306b57e8a7c73e8711f1c9047c4b27e71cccc1044bf66207ce089b4f5a74660056930953e3983d311ac3900194d708be30cd094c10ca780ce54f21ae6daf56463ac7d9a2b4e9fddb6119072b647cdafe440dd44cef92f325ffcf3c8e3bf95d8b616d917d23a2c4ae6f5cf82bf323e7d2e1f4e9abef36197ca3efb397cd38c1f755eff78b36abdbd2cbf529a84ab575608eea1212199e3336591a50722a56cbb19db3d475f7ec8a6efd4a624b6f18cdd0d357152973b3887ea9b5d9c75a39c3e2c123efe26e4e18ab8ec56dbc6c36374b38a3bb97085b627a1c29173d66cbf1b149a5127ba2b7cfb005cd11a249f5faf94636cc05dd7f075239ded27d55f29c47bea303e89b10f5a6eac915a50c3f60018479101afc08c02f883cd22f2f980ecba8848bd06142d3b4c623426ebffbaf8b7ad24f7f6cdcd53992acdefafda48d668db072dcfd34b1031f4260a5691130c1b1aa50db35e58e97de94c086c6fe6240f78f80b376cdd7ba808e37f213682bc9b06adcd760093372f55d3e7c928ed5806d897dfdd4f78c026e6f8efbc4eae8cbff78bb1bf3320bf15d702184693c2d4f780630641f991903734d2e6b847eaef0273eb54ef9475f3da033304554f0b4d49f6e628e609ac6e41690e0e85b0cc75faf2291187730777d451035685a92b0386a29db239fe4dbcee0a06a1a527d79411f8e192377d59bdad56ef694840a6aa2619f63cce25ea0e857e694ab70b70dbe00e91314001e137cd7b53d72d9402a3b0d38c23133f05d5b05c82840bea3cbfdd99b48961bf3268ad34cd0aa611c382af55dbff99982594e72afec844229fa27320c804fcf3c1e2c529d77e32487db98a17424cc1dfcddea2404aa1c0632e36393a483e724e1418cdb0ffcc52b675cad9ae7b754c5463156a52d28b312a4cfda85cb180722cad8cff60a26fa7da60390671c41369b499dbb7d942fef6c6904b48fe90957d2df2a202bf6bc27222a186a907d891da7eb6941329f86781e67cb183a661c7e3b0981a5033c87f723dde3629e7059aff015dc0f4eb8f7f730886b2e0daa1a25652e238605424f0f87a5aca1185f77947eb03f4e59464814a8b22e1f901dcaf3593759ecba71db1a566cba4f86b1ac7559a2da25d9b1427690cf5a134b27f6911e0d6bffa831f5be9819569370cec0fa8ad5f5bd5860adc6efc63831c73164a6bc96a1e659eb63a35694c8955f1e7bca182fd83e5dbd51abce7f10a28ba1dddb3cbc43ca5505ee7298c5587edb09a58e0b9acbcf712ff5ce34e22a8e1fe129d8a56698d222e95ed364944e766af705ed6bfd15981b1e63d629d7cd1c0c571044ff7ce9274afd7b6dc4e9f1a496506490413fffc2e3f2616cb6464274d96d5ac753e57ef055ab0de9bfac8a31e67c8a1e944ad1755114b838e117d2bf0e8ace0aa88b9f56c95adbee5dc56144e2e33f406d05d3d8eeea30e1b432c225341536b5065594813071ae25a71cbe0613ed4b9ed3584c1441dd9010377f5dcdd2785870752ba498115a4e36a499e99f000375dfce2b8650d256a26c71e7eae0701afce1fef519c3f57c83c85d252936328b86ac6666c7b52abb2c9e6a50b0859663ecb3a89b392c633f1583d8a6c8f32fef47aca4f2586bd075f74d2aa4f8e5cdbbef8c7c064df8e30bcb111f060cff81957d888fb581994cedcb22bac90a279c8acc15801c9c52fd486e173a2b3e82afe7f3e730988968278a6fc521a92e758c384cf5bec670603a5ec6402fffa5a3424b70728d83baffe8b3addd672aacf4242d37d43eed0f4a21b69b3108688b8bc12bbbd1b05f5a8717d24b129536cbceecd2555c0777c2393bb6b595cd503662b4ee9daba112b2273d4e120eb1b4d52b6c8d6d33204ed1550ec7dc12849eef4fa4fcdea866860a08e18fca76c68b10322dc74901945884c52452d750373afe7a18bd467109a1aa518bfd3bf5d9a5c50cb6e9af6f687f23b205bd6ff8ed0bab0c98999cae924dd92bc3002c31f4e93be08f596824a6a9f54337716cb2affb3e2dacf8aa060771e0be120067d21e3fbcd741813cc956c043a144d7962584f1fe04dd42362272f50731ff65b281608f8e1953c8f2067eab55f3b456b4fa74d635bab2df09aadac096ac1397d6e6c1c1facd4d955482285273620d5590d987902976b437eb4548bcd559d4fe9ba849be481cb85228e65b9de516d93ef068c608226169b2a49bc3d00c5ecc02c86f006cc02d1a6637d92074f2369f789d5238266aa35bb9fb5553e482e3830c27e5efb4aa29fe3949047ebfe4eae86b5f3de5d3486312b2b91b00e1801180827eb01d7e4d37e933260f7d66015c3b7ffdd2d6f503c91507a694d3ad4e0f4bce967892b3f28065bc95a1255192b1201c41b81275e4ffec1e8a69d33134066c5637e65739e12bf93c5f627f69de141faaf197a13c332a1f612d4209557a1e6b8428a173fa62612e1b4cfc92942fabc191d6198c313875363657c57b02677ed1bf3352eeddbd4a8ac1241466bbcb9e8d39b8e4da3b3a06ba07cf9d331e444f266e1ea1d1c9390d9796af5504c7fb160c0b5fa093448305333b5e70399259b8f0fbb23523a81fd3dd03b564739e073bc46d92f6c033599b273acce79347eee2b9cdb7b7ec61b7c3e36efdecbb2a37343fc81b8d68f005f0206ce1a94b244bf5084cf5ce34dc490631405093e551d32a0585c00f9362ce2ba539645f6910b81866e0342304011dc34fe27601f8fd22449c0a4a214973fe743f091fb0f3f57c735af13b5e63b87b23c6ba37dffc156dab8ec1806d930adcf57444d845f3bae02f6ce7d3265ae9aa4e1c325bd5fa81fc8663102c9b780fafd3cf5258c570472c74242ac423f07cf36bdcb1a98af82917fea1611453016bc039d59b67d97384a8690b22d6fe2d599ea28b9eeaa701f5063bd21b013c3504574d1088cc2903599b37a838d05f1968f31db363e6d31acd10647da6bcfe1cc3bb37077f515c28ae4f0583d27cedbd923901db6765b74d997fa12b6a0a42be90362042e9bc1aea6b0afc255aa05120bdba798c122ffba141991c63cfb6b024540e304a2fd60d52781544153605334ad2bcaa4dcc0b461fada7faad3d86ef55f58c8ea6b767db67bdb804dbd0733944ba88bfa6fdc340cdc5f066911c44a8595df863deeb372c32223a65008eb20e155b66de1f0d1d92b572be8698d4b68239729ad67b320da9b990e58e0bda8958c59f9d304165e2e4df9a578249cda526fc1eb91004f3b3f906edffa7841bc1c05d6d77dc936bdadd512604832d6fd83baa489f380198efc52123d1daf4b822ede4ac3a0a9e88cc2615ff0db1ca23196a4cd89277fa888ab51018a34de21b748862462fe4e8248167330bba33ab4f2e5be8b5dbf5782b4c70ddb6bd28d6ab7f38e0229e8ffba8c247b1345332555de0b589c9c2d902e9fc9f90e3669458d00ba66428cf365f7a556e99611fd552b3f72034fb8e4c212a64e92f89e7b9f1f2df79f94009ff9a040285f37a674528bb3b46f33389755c564af7c48f88be2879c45aa452961236ad9334c56673a962db74cccd59f97d3bd5777056dd91cb86ce82f16f46bc98bbdcce22190f8b2a857d695dcb56278b460fb3fdee5b4a0a9257e1e56104c4b9affb7df8f65cf7f01b08e39ff3105bc8066dc54693f1fba1d47da9df8275f69c9c71665d6535fe22ace4aa3a4f70dd5b025577f24d87ebb8d4a8a186db7f996a09a652fa6c82eae8be7886d7e75ef46dc2308faa240563781b419283730bf74a7f020877162b016bdb2e3f1ec1c3e926cf67d6152153ab0830ae447d5302566585ed527b68198cd38a6d9cb6e78504adb06014dc4b590b919b597f1d814affe3a3cff6ae6c32d248549e6648618e8d2bed8511a6ab00cb3be5a80b0b07cd3aeb6110bdb9295f1df1bf27657b35c4ccc70f3d941c472e322d9505afeeed714ea548186f44a789b3f6557161f86d1109aa9def67e629cc899033d7346e3920853adf4fd4f6ef96dd809ee42266115c8bfb1f0550ab59c3188b47866334f5c125d2ae1eb3780870e3b721e86f6e278d9be31ee61813ddf927475a7a02e8283c77943eebd671fafd0dc266e612b8b98b818a21fa87c8bf58feecf31ad932db79c3a9161f038ace27a3c9f544d1ebce408517b0a9646f07c7e5a19bd0b2b8155f5139bf23036b8bd4ecf6576c75af6f93efb3535b79b3bb2d238ed9045325ded8686bbf5e9ebb39ee316f13c4c6aea36c068593788c39e57401dc351c851f3ecc5167a0379b23e15cba5cb1b68b8d72b313b6f76866ac8c83c7b33781104e3e215556e918c44a8906cfe6b9a98ef7e4505e6d0893cfb2b942bd3a689bbc5ce5c0ba602368dfd93cd4b835b4059592022c2fd34c628ef373992a9a4fd251ee3c91c8acd58eb577ffaebc702a316906d32dce104d3b6d19c27058fa758f96af497cc96387f40ecddc7c25bfa197d2fc5f3c824b938732c9aeaf8d8360385444166a03acc201b282da26394ba39e971caf4295aca4afa6ad403e125d9a375358ab41bfb00c1d683f0194413cb7ae820dca254d5c0a19916d7f052fafabf25b910eeb4596f0b0f9ac5aaf84ba662f5978b8cff3834d2fbbb174ed2ba119d33497494edd87f3222e70ec5d4cec3689e5048226ce48f358eb2025dc505d6e40a5136454cfab9fdccd34c087dffab125ee5a2f1428d486fbeb629cbbe40831a378ad65e462297b449e9fdc16860d5f693c21c780474f8e828120e17330cdeb63730c56e5e02a0fc36b5a4af0894dc7be9602535174e091547602faea7cd223e85fd93e418fd5e4c2fa0c12ff30e1718dc5a5da71f7af19d991aff10a103f619a03bb26dfb85381a7145e3a29c3f1e53c92b164c718e5ad799cd0ceba333d2ee1295b15a7a2cb6edb81f8cc5889a7ac35c2cffa3b1faad69c5d0c97e12ef4102597601381976634c70981cf73cb294dde20a6a2b553251aaa9e0c5669498b91ce16732955dd4c5ad274a24c62d19f50a173df661dfe7f040b25771239cc2a39446e3c5d0bbda4686389024a0de3323ee582214e5b66df1927baf6d439fffb8fef6762b98b7f96e7e4114ad15c49099d1116156158d36ee3672731a3512a231b38c98e45bd6b4c5ebcd521ea374a4ef88ff762a7fa8f54e93133cf876994cd65855b67088ac9eb55539a309b863026d4c6edb1282ae1b8b3eea5798869861ff63fe6960ad8e09e54112b1eee3141bbbb1ec0aaedd110c2ca0746d6af39484155cf32c25391f98be45e4f94eb20c63534ff37f4fdd5659cb5e2de8f03c2225c0a9b0794ec9b5cda8ca2cd3a993b06bcc8d11c386020286bfce9354b8cea5c989e0d2db4dce051b4d5456eb7006b4b76fdfc351d1f98a15a288312b3539a3d1c988c6bc92b46204146affab42896db8e5ee84b4c4127178ec0173e6e5fbb0e11807f8b7be1b710a8674839d81aa5ff2a70fe256cceb4d4324c0f8225b933189edf505374071a6a12c079f2ccdd81ff73bda48d26cf261e6c54d2a48067eca0ec3b668c59a55677a6daa8ef3779102390cc4349224b673e6461c86c2673ccf1231f29fed5c1557c8d3c3ff6c2f73cb3a9254422074a5e7c44fa59a4c0e4bd526a1001708e65fec4ee6ea4d0155eecf6e8510de07ed4f31f31a8ed12f5c3a60ae99856ab2c983996f2f94145d7b6083573d7084b2ef20e7155f2ec806e176e62c93e90785863ee39c0647c1cb00777b8723f9c2ac0ab97b8d860beb4d3e8ffa2328a179dbacc05f68237bf1f4a5a23c70e123047db08763de27acb76cb3f40124b0554e2f9de67155dfb71144ab6f3aa6ed62e68280f944899c97c90fe2319f93d36ad11bd9efade7b37f9c45b24cfa8bc16fd564ecad72028d437c8159c72a12fa68bf0b016a7980473c1f723ab9f0b1d5705d9f641280fb52365e8b8b233504adb5749784d578d203730744a534b19bb23aeb8c87b705b693f6fb68e6e454fb65f77e2bd4bf003f50cae057924bc1bbe0160bd6b80954d6bafbbfb40d78ee69aba558328195b43ae79a3705827d8584e7a83ae8858812de4fbb37e75f5f75c1e7257f660be81957107777e8e63881a91157f54c60c1a43fbacbe09d6d168fb6c11e7020e424940663c93f7c4e0b5a7b25abc77cea24ad6d94943620b72ca09a91f6c6edaae9a8eb7a35da3a1a74549d7d1a3df4725f730a55aac52bbe103cf00224e036b095ec589c13e4acebf224529039a53da9a0b97886860a18e24fd9597a4f4896a5b7c2e07209fb3f23032e6cf770a9d2f0b6d54aafac7172e459ea3962cc8c87eacdc115647e6a7b6035f73f1b55c83ed7f05af3298497c404bd04026433187500566b6a1be7deec23f8f33b946f6cebdffbbef48ca4e976f3f7ab56f6f9790886d02640e0eca50bdecac6f4db142464692775e16193e316028844b983b62a9cded9865c5be37954f139d70d57ea6b231402142c10c8112be0ed547c92cfb9bc78c10ffef562a8421bb4a7b7a368cdb2511a1e4742c7f022ffa57f42cccc82d1f52527bb45e0de6dbec9bdb63605b8acb0edf8c55ffa1c95bf2f199e6a232297d4746213b5f478325ae78d6ba847b85cb3ec4828c0f4d2eec018b7d2236a2558874d538ade14023a50ac9b6a42a5494ccaa360d42e4ecfb872c0ee906117e7be9e0e50a316a608e060776c14bdb4e8176581e769f04e7f6d67d6025baba2f6148935fddf0840f8beeae6740d71ed11372526506caf9a4e881fb6a7967b91ed04b962cfa12b6b5e40606857a707c451168a0f102ec4b8d9830ae142d3597b28f9df032a9be88ba5ff517b6b93c7c1244ff48acb52c8009d08a9f47884bdb5268e4a95b311c8386c563e9e34366a6a074e0547d66b3227f5637d5e9d3d20d6821c9ca8edc552e81ddfa85f56214825768b3cb4b5ca8b959f3e058e357f1b65b83f35ab3f0911214715ff2d25b6f99a0ea1fb600e034cbfe6f2d311e59d15d93560b61b1b6f7b5a5473d3864799e72e1c0cc1c833a7fe2d692c5678124998a7862b8e87276b0a19e293a609103c99583b36305bcb2b08549245102f3ff72c5726ea3f5dd78e35e65ddfe7043401a8bef8b8c7a9390f03dbfec780b5e318497e9447393da03b972642b32736179b7db8c10ee81f01b6690a0b3e389a903f68745aad1c751605a6701dd7e6ed3f7c80dc10a3225bb9c3b0854413984bcbdf11eee69659b2ad8edc5a6b9896b81ff76aaf840ff6bdc5b962d435e23057fa79ce24c49d6164db19b12ba89fc7153dce839987bfe5d3ba0a086d6d24912da08205dc711cd40a3338bd8a5137e8931d448420983d702c1b3809b736452b6b52aa417c88bf12212a8e69ece20b8ba0331bb4db220316254db5ff484dee7f6f8535197b57debc38356d3ed9f77520cb1396be3fd1ab486dd62651a6f06afdc8bcc4f65f8b0622cdf867b4c7fe2f3872335808b51380975458eb9949ea5536f56ddc509f7ecff630c810543d6274334416c22ce1643d83772a884ea77827ab741cddb0b1cf86a72f48c9a5a0d0fec1af4287733b504c8d54ef7eda56467cdbd35e6bbf4ce9e4a607df2621a8a62934122afaa4294408256c0c51d4ccb1af388186e8a4c74a4473691f9840ab6e8e3b2b44be1831cc2aec2af583c6716649520d4ae739978d30afb17eb29b3f96881749341447fb551f32205fa717eac0d5b8e4fee9c6541f33bb7f70e789bbcac188fa5dcfdbdc8b4f97da9f0e41af5ddecd973762d3737cc827319ab9a4c657a4e0cd46331c5bbb469db8385bec2599cf109268d4f98c22585366509b64e5e9bcbf2071d0b20f819eb447b0027ff40111127527c290f4ac8ef08c372f5270dd738492653b055e5ab26c179a846581205f53ade8ce524377b66f11b2c7f61dcf53d1a184e4becec31c35965c744553740454ab202a85ff10792fa55807b8332bf816cc753026e7475691527a3487e188aa860b6299d49e0341d2a59b6111676fbad471aadfd62e43dc1fba7847b5c1babc682d248e9696dc9ac8a0f166ba1127268b3f9a26550a6527316ceb40576a96a48bbeea6b747fe90ea205fe8aeac6dec5bb94c7c62c0217c266b827a0d542b90d610f28c2d6cfd4f7cf6327305c0ef312e60fb811b3bbd828204ac1dbb7f07e5178bc642735fd0cf0d146e009664000888b1effab948e22e31e835e6387ea731b4335210b2a8e1d84380fdd78920083a11b20e2e6370f846d81f031dacd9713c54107f3e12d09632c644c540077c6f90726d4167423a679322b2000a3f19cfcea02b3313ba5e59a43f68b08338019dcf53ea71eb7e2e98ddb4a812f417c528ae408b57d8d3da91f756f2a5e74336fbc25b3084043ed4f1ec390923255f65e3a5db38d4d684cda5f3b2ec8bb550a3ef30334764f7aab5db8757dd1ae33d826a7b193b9052f6beff60fc5d4c3689d1e2e08337f70fec58bf78b62ddf77d9a324f8a49b759750350606db4ecfaf14473d9bf208279329450385ff005a295c5079e321606aecbbba22adf8c6fc6b198d662928c3daca8c051177da5f7340ee11d1063b9356985fd6bb1cfacdbbb1c12cc752ce70fafd3a1f4f15ee511206b66f9427983b23e46310391c8a6bf4c833abc6de8c156e755e1b2729e4de1fc1ddf12a0fe060b818f0f1057550a98ff99892cd9409bc1e771e820079630e82ba8a20fc86bc0afd7c2d0085eff38e748c186a433dee6cf24ea2db41cf14ea2339e6827054d442da5743c522511c238cc9daba90a1e22ed24113ae54f19f79ea8519a1ef40cf0f37f359c84465726fbdf7070a1b888e09a6979984a0a7abc4c0e84a05e213557afc96989254f19e7af060c6e34eba990556995be38dbbe0d18ba8a234af95108a118928aab8be474c0e4a40cb90feac2aca8f825683f3e8aa350e48b8c08ea5475e143098da9416eefdfe9d4c4a1e6f81ebc13562ea196857a46264197bc6bfb9cc7ed8e5213bb367a7c404eee2e089119f769d912af30bdec2ec20dd4a0504e941114a18f47ac5bff2e39d38c10da3e2cff7e26aab4a764975f3a28e94121cdea613abb9bd1af4fec8a591b24f6d64fd648d2b75d6e554a0a7c112b3c0b6b0a0e4cd2650e3e4ea2d105008e4f4c77569447ea03b118e4be93f9c99d538b96838e187e066ce9d4c54b22d295719e47d2e59126b43c50b032e25cd5f7b63e3ebad87890482e510c57995841d92248d25558993b1155b252676419c8b2da9fbe207bd1ab82d9204fba6a39d0c1d7f8815e5be479d3a39a459ca7b50457472cbf44f6a8324ee3d4096e2c3bf1d81909df4e6df785439c9504631bb33b7d62619ca8c780d724d4c8d3f36dd347845c1966b61d46c019a72f195b3e98b06dd2dae0bc6cefdc7d228b39ea8da4246f1793a215c856bcae69b4eee58eda15d11f0526005549e4e06397a5a43a032af0e1f50bfe2dabfd7a4ae30f729afbde2f9d5cc7152f2372c70e7aa1b0c184cda231da1ecf8bbaf515c125f5b2d1727bd1d45e6e5b4900f8c999b0a8b0d2ad7f0b8daf551a8108260972fa3c06c0e261705a9666534166f9407bb63504dbf1d1855be1395f9c1812bdb6dc4cfef7a03183a671598d96c9f6c44b17d12d4bd647b8331c561f4b6f4dbb334892fbd4507e743e9bb27ab7be73dd8e3207aab0ef540c99bd15d9fd72397a4ecbb88de5577ada89520b9b2298f2f49bb142fd9981890b0640030040d558838fd22845b949e91f2d50bf7f75fde69219f20da66451493bff41a832b3ed3d6f6cf86c93be8c3bca810468881061d14e7f90e235bfb33707eb4e7fd1a53e6a866caafff863b2d5552ad9716580495572430a4b1bfa4bb50750a2f47db35d426115765cf457425857816c74685438b5b5facab2d9a27f55a2d5fb90876cae57a7edc6fe17f7bf374a3b29ec20fa94a4720d5ea3ef46c29b72d1c4ee9f1fc63c935c396dc3c38df495ae9e332fe201944f0132b8dd65b9f8efda7b69256b2943ebf72a2688493312d2623603d5b8f3f7a55ce34c247dc9e08266ab9aaadd4c2fea3535b2e607430478ec8db8c2ddd0510d96ece8450d76f4d2fcb1edafc49333469cc88d6d7c325c01a401dc77cf4b32f045bc17bf8345b84a034afc94dfb2f069a47f308f26858bf52f4ee9550bb91fe5dfdd55047dba8d6020c321fa7d1009cbd2b626bb84b116dbf4a159eb21ae6a66cbdd2ab45b49e6adbbb708613b3ed1f5ae09ea7315498f1e8ab5c8ba9f9fc4eb9017f33fba88769b6a931a497893db7face6f65656c3474558089043e40191fcd32a591709da9fa183e3d213e3b398b245d9c4d5d792f1e8f2f65b078d786412fb90c6dac7c4e468be25ba60db229c460f5ef062064cf161d22b8385fa78bdb67fc7c6db82ebc7496fd55db0ed4558936fe2e39b6165d8587bf4a43fb966f15fe65bd3c9b9a3badc2f7f167488a04032fe0228d287620925670e27a558d7c187b5b96805da715199538f8f3c3bd7f5ad20393ab7d6b6266119c4a857475f80c6645d1e2073f90df9928312688530fb5a7cf493abddf692840aa480b60342c19488d3409a049f628562f66a99e36fa3c37ad0be3f0b97f016c04a5b422b46065a79a889e30ac8d1b53b65d230d4c88190903a24e1fe1ea191c11282ac1dbdc1b0ed49448c0529ee11823df3dde7f0371a63ad722523ef297d8399b124593e76102a322b0562270a12de0b49f18b5b16f94bb70078fbae1a428e4c417b7c3ca5f0d6ff87dfd044d841b53a4f0c3d8dc385ded35a7e03cfd67957a6ddf1e53ce3fb6a0df58bae07bb269e677d8e8cfcaf78837f0a74cad9009a6635c12822a3826859e9fe9979e43529f00f4018d82c3d29e0367b2dbf3e0b1e4085a59eb32533e03d200d79b27ed8c4508e510bdd911f126b8636e96f73688d5cf2e5c625266afb7a2cacbce61c18ae46810b07dbcfb7da8bdac8384a1d9b60321a2c2ee72b8a12a77c46c3935077103873d87d713c89ead7c0a9aaeda1362f6677c33987a923be2bab863e38b066c2bcd363dd2c6c17bbc5c455b1a882ab43407855967533ca569d16c57d54c07a0e3a2c27b76bd2e3d5dc5246dd29467d5476b85d963e3fe084726a8f1155e5238b36ea8e9cce1570b181f7179dee712edb7f9445e9413208c021f36d9adab2f5a2399b12edb18830e76d3f226446873230a1b898e03cce9582426ddb6a41ae62fbc8ba5f2ac4bfb6efe47701d0efed1a0ca381d11b7f4a39535a264300392bede05ad4cdf4563085239e4b2054493768c7eb7c990b874946abbfb94f0d1fd008f87656d9bb046f0e2ad128287ec0ea80eaf0253b30f3504004098359e1642f56cc81cd2cef5defb48e43aa64b1056b04ee4808321c31e3d7e4be30fe2db49e29a523b41211a1173a966c2e7f8b755d675a5992383dc16860d6543e96227fa1244ad28833b29c99e30b9140d36eaf261ab7bb5f980630726d514208cc9023dcc905f4d60c629edc6026796e0afb0159b17ec3ccfc15fd866fde3e3c1bd74fa57a6f2119f672365314af8b2280811a6cae282966bedd8718eae57f24ee68619fcafeedb0ac81e19272ef2cfacec158e3733c52c95add6bae60ffab6fbee3f8203d3d915679122f1f2d6df543501c5b32a333c6417a9629bb5495397927aa81db4393d267f6a38d5d96b46ab8bef28feea0a6fa7b88883fc4583eafed935c7d3560aa1761af966ad2315b03b765f4657c1dfe65e3ff342c5dce648519ac4a68a336d8e6d00e9b66119fba46cbef928a7f5da2aef7591a5dec39af4f99bd24d2b918b8b73f8e030d90346aaa62a64d5d4cf25c2c4220bb72f42c6765fa505c29fb98c20f0cb86dbfd291d4a51834955c897e536430e087da0a09257ea7f050fccf397d54c4185bfb6d2a90dd5914fb16995450fd60031011a27271e01f37b3c9c87d433ef2282e4ea47127a9b1c1ff0a1116bd4e4c12e4a831dad530ec70f4ff6bc6cc14136285382d17f1a09ec601a57527f0dd51aa660c5cb4b7f78c46852c1db8707ab451c1367b6187388c8bb3873a1aa4210d0414cc6792a29a7b22f4ce72c4c8e9316092c7f3e070f817ad851dc4613fcffaea815706f72d903590b464ff7e4dd627295a7b4b371765ac85e6d7c89e4c2097b83c3a9f44a17f480a547e184777d8121688bed5b812e7d7bf6943ab1421d96fe795f5b51da6ce2f1a457851a2cf456eb2be012805cc1505b47cffe0857940e0033ef6dcf4b5f3572b17e23032bcc4b9886ae0a682db73d2ffa25b0d44bafda49597ec7b4c57955cc74c5a3859d8cc7ef20febf5b1a96aac1b69f395e46f660a1921151486f40aac79433ede9aabd32b9a2d718a34be801d724447fee6ff209d086b2f3d5723e9d2abad1ea7779e6f3beb342fd87e934a93aeb1c6bccee2a3d9dde6895a1f6fb94bf8da68076338f74c6fc46564e1c030ab2b42fe53fec2665d2423c1ff522fef84cb6ba9830ff411c9925eb0b410bdc8c062786d690916fe735593479191ecf329adc151beb068253fed53905a8df479700eb282408048c2d8fcc5b8b5513f6a871a8c0eff06fdd81bfb4392acbbfcc9366a91db9ed6e059da742b63ef129fbc498c2c2fe8763d70ea26bf263f1d4f4e801086e7b87f663a147644f78348767edd9d1232ef70afa6370a26c99634646fe99b1225420c52da035da2d226856c28afa7deb698a8bcde6f000b0b26a3c4b3ef64b412bfe02eb023a4b5825d3bd9205c4702396860fd800ec2ec5984cde890edf7fd4e76ad6262e1e60d967bde561c5ff4fd39d34bda4192ad4b33151558ad71df5e172ac69648ea9c0b7d270f5b63273c50166dcbeb89a74998367c3c9d602795473b30ce23089a313fa4d33161ab4e778b7d8c6399ce990253c20e861f3f5b8458f92d2690f87d303abbf4d7014b32510fcdd3957d9704621e6460a466b1aa56f3ff745288bf00236d012072a2c97f336d95c7f40f69660358ac06fa0c6d8077b8acaae442b2df854742da96deac81a92543ede1b7bc2a4082f765f968a96a51079f355e877a47d069cf87b60d7af62cb78699f10f15edc43dd50245041be48d7125b823af8be59f4525bc42c7ab292894ac60949dfd1ce8d9c3605f772b7b8775fe87d6235e353c59d3ecef85b3a7476d43d66ebcd83438f751049b3a6e9bd9968838d89b77c35218689dfed03b0ce381db7fc2143dc02f16fc639ab64bc1fe53415fcd704efc5b213244033f97a69772d1a1511ca44d55a93401d083498a502cb841073a6a6cc1d4ef739f1c5020ddc0d50f7e3e9238272e8673df19ee5199935ba12862507110d3feb114ff0ae810ec43feac029e1d2e27621e08f2b0b41517a9d4937077c5e28ede6127601e88fb65ad138d011e68d5245574f0a6272e5d3a317ffafd66c791660d1828e8017fd7cd8ec273a299a7b695ef2d389cc82cfc7b80f7a15193f2b80a095aabef6a29407457a0127f96663d0c8d8b234efa4c6d3bf6c0492595c3c0eb618d22feaf31c00a9620cbe0ab00f2f8bf33434553e91a2c218e34e1d2d7467a9444209e4715d0e0c8c9128e3e1452db029a3b186baf9dac8fa5f70ed199b34810041736c841fda77e0d78c0c62ce723d6445d2097ec624dafac2215188781c463318950b94290cf14628130e9a72a73d8b64c065f4c027ff005288d2e2d4c801c710984809444b83a6cae470f0f874b58646a32582ae8c3ff459cef79077dfbaa36fa4ac4c383f34e80629bace2a80af3d33a2ce925afaa2be1d1a49f8290a77af7de0bec3cd910cf42407759bce74329875e5ea8b8a1a3147e7954f83b2f142d3847506d7cae913b26ca828beadf7477f539500d50794f375fe669199d93b22f7ca8b0cf0f9ee520b26345ba18fb2f5da14da99d8990ff131acb797a367912003984859772049d0e599d296ab3c4c449101db3cfb0733316437adea07259a42df36d774d208a2952a0eab62447b6e3c8c62c171a91ba9bdf4e872112fd8ff9274ec5ee56b799faac0cde746d415c0e6b37fb3c1479b199dcb072e94814b6718a8020635a93beb16911eadcbc3d3e949ef9fdab23e502ad7cfdc08fc67457bdb64bff6ebf3152ce1834925777a7b926d260b5ecef6028575eaae29cf488de3e3916d578fb3d00b14809579d55fd5625b410c669dd779d27e03c7b9988cec4638155250a950342fb66f4cce6adbab021a29e81aa64a7cb8fb016ddfdc9a2a4ce3dab60ac2320941cf37b44fc057c319b2c4e7a371b5d5dff3cee9c325dc0f9eebc6e3ac61c117e868c215215e39e6502cfc532986814af06e51838efab962e458c3205f0f6526cd87f7b96fcceadc4f8fb872d36e17a49375728268e499edc532b8b44b5386fd9737bee75f93d36dbde3e08ecab0ddaa6f0e1930786ae476ea828ce897b58c65ef7dffe6193a5b6143315bed36d43d262d442ed3e71403c6fb5029046cbddf267d63a2ffc649e97f888013d73e629ede741c99b4dc6a5ca59fa27650f1f4e708e8f0907a8e48e79035d8ef960ae3689ceda0421b80f558db7e825b134fe10cd3d92caf9f98c0bc5cf141d771c3df022640d7124ffb3c5f2f41f7c097ad0db74ef720e8b50d39d0ab65c4b3af91dcd64414c9ef9a74c7da6a90098d2234fe4e42ebd3240614398b4538686b999b644bc0117fc242131f2f5412c1aafd0b3e3b775c4d49d8d64a +MD = 312e2d967f977a0a1f7dbc9bf1c4c47a94a87954c99a3a6aa3d48ecbc0764597e1efbd988588395d95cc702fb53590be + +Len = 88936 +Msg = c67f9aa8cf1be3b4377c30c175d33ab2af390982c6a015d99209acdd6ff8934bf825f0c61275676f2d2884b5c654596f3092682895f7c3b93846711efc6314822a0bc99c6fc3503e240e6d2bd2e38d2af65ead5801b678c2a36faf3349d1ce4be598edd1edede44aa695b2cba269200b8706a1bc13c57d1c5dee2ec75e280acfaf34230e94db6cbb3a251d3c3dcc583b6df00cfcd20c1aeeee29b68041521035134734fb6d762fb969267427abf67ee23086b6c047749660dc8a0f06fc3528a69639e93f7fa4776bb9008033f5cdd927562f66af78e33b9cb177000297bb9a4ac2730883d34e8af9b41c0909223bb3336952e6716f424fc7f45a531c18cbad481e5b596e6f5db18ce2e0d7503a27522ef159fcaf347a1b0c2e9acefb894cabc9325aa6a95db7344ccab5b1b14678ff3f74ab7111cd71e791e69f3a48f128daf487d9b5dba5465b60f40460d44d18028e7cb00c3e4411fb7ea4d15eaa594683f2a43e4fad4df06ef0e833ad6057eea34490d097dfa1419efcf19804cac88eedea11f23cc75f9fb4262fac5dfe6de22a893973d89beae81933535cf24f46e86205575e44d0e23a762850d53b5595dcde84fd01991b29f0b44a5485f1e2dc3c286bfde92f71dfa9fc1ed3180e0ed9c4095e67e2a0066540b7697c7bc92b907288438bfac4515dd48e3141dc9dd04182f13efc7eb505a7c06aba52a642d16c72cab58afbcc1964a374882088b144d4ffde4d463ea2c0f65815625e6f247d782436eb81531070fdfef54dfb8612119a211ab3cc882ede5af0ff8c283c36d6bb71140af86a55ff2ecd5ba5573d88e09bd1ec9716c52008db70715e397641853d3fab3d77a8666d01f8ecbabe15db59e0f89b21ad5e41e582c0b30018860d31067844aa87750a637e67f1b4b776d223707c707b18b9591e56c90d9b4dd262831f022779af390889ac02b1bbcbc837e75347b3cadf40305a5f71c75761c408238fc79cd3785c298693b276f58073d04c923fac398b5a8d42a6a1285bdbc3c6b85eadebe0694635033b5d868d61df66fb344ea2eda36e397d324279d0433666ea949e5bc70a5ff4a7adec2aa9f375c09b415bdf11afe6fdb40c3a03dd2287ae633a8135b1e3102d1bf048aa72c09ba8d5c24da9cb37299f8f3a730babfe1d67c8583dc2c57dbfaa060c574e0f4fbae451be0e4943c49fe7b5c6d3dc62626059c4f4bc472c5fd631110a035ea8283b3db63d8507a3ddb09fcfb744bd29d3b84bfd18e50f0d11bb8be4f1332167d4847bad479a2a100bc48d8416adf528db8d061bcba061911cd88026c9cfe072daff66dde535fcb4d5437b7deaf5cd88014753c716d584df0793d77f9abee3f1c213c5ef1e3ec3b7c3952f623b068d71cd4ef8a9ff6cc1215a565a996dea720d1527628afb9dc8415d2271da12c77d0ac80bbd68914e607c9e88cf19493ad5ed59a50357823b53782c530b8d7620e47c79e46cacd161a91a5a90ffaa379653bb19f471fdbdfeab87b78ec3246ff90cee6942cb1fc98ee32316d8b2f23ee6369cda7c7425b4cf1a94863c6347053a3b891e8ea46780be58bf5ac7af996612c4ba26a5d3776e97e6c822c6b19d41ccba75222ebd2cfed74e14afc5c048b703463d84d7589af33c584a129276cf2a95d1d9fd8cde174cc20e4d9c3aaba73a9f034d7d7ac9374ba8b843de0a7984c87ec7dd350ed1cf7168e090aa8e395df6cf451098f6eff57fc14eda0f958465246fe6ab541e5dfd75b00b055f2a3213f37c52b15db3927d957161382c9a5d1a45517468e22349496181d9d646745e703a8c7456541a7a76989e3b84bd83cd4a340aba3f65855e5a3cc59028e4d5851dd2e9f02806916e898d3222e74bb79c9df784005667ab64d90e637926c3b66ec1c379114efa81385e7e145f895d9e92bd98a58ed56fff236ddf43dcf56a7de20516261ef0b8539e9c722c3a917ba0774f1e57abe506e862bfb84d01c06194a991d2d65e38c96d69ec7262fa272d2512fe9281a0aeb2ceeb77a0692fad31618b0cff731a4cb43961f5859ee975fc952c6ffb0bb657fe19843ca07fb0e4614e501ea6e49b54011d4d60b3c84da06f588d4d61dc32086f32f6b6bf77ca8e79c1bf70ce1126793983f6d404c86fd30fd6fd3ecdde5feb8f7f088e0539c6d30124a1aa7fe206e2e3d225fa81869734627844ea45f88425e569846c7aadecda82debe74c13f81b98772a07a31eb0debf2a429fbd412e8e1f95930f727bc83cc8457de749d10e123adcb2ffb1ddd182147c376167f15d44554b5d6d8134cd5d08df7c9551a3d6c4ade459c254b4501fee73ef1e550e790797de63cb74646280f272646bd41ae6b56a148aea1c50c11a95c7b63104e7164a6fc552b3ac993c5b1d94c1f55194c256f7f3c2c1793188d4b2ee4933f819b98f45a696a0ca319f4dd2bd11ac4aafde4bbff89df2ebb53c00be3e04b19f24e738a1e89c3d3dcc2fcbba61d00b2fcaaee65a9978f8f47a4f11205d65146a8703e91d01ffc387d752774d19898c9183c8d9305ce03e23ef267871c306e6fabea4230f992dee28d1abb3035abacae0599066e9c9705cea9276b93ae556a3c04a5c490204a317a1498011658bc020ccbaba41df5585bfb8f2a455e45ad0d54ba880fd8cdafbda71bd9414fc43564897358aec8987ace12f8e33d0f68a01f60d57a6a3188294912a8c4c302017c98cd038a6b990e6626bbed3a9bcfa09667075e651cc3da209f62c641ce5895fb6681862824b6de832b9d7417a6c573f7aef25c306eb54afc85407a38ab790a18984d011a22479038a5619862a71a6b2bbcc8d7c3a8306125c454ce91a38ce83df4d87e48aa75adef5bae5e03e6f5109a5932d806125ba5032445c934fcbab5d144cb049a0767bc0f162dd0e2ab7fe9ad4dd865e1f35fa0fe6cbc730afe2afb3c4ecd9cf87f4745009e86f5e83edf7eca5f61893c9563da7f6660d5f9f30541e5db874d4a5c3ad029bb60d5fbe63e575b597649ff3e90daecd8daf6ea21721036b2a11f78e46ae6f435637904edc4fdc601beaf12370e28af8bd1dfc6d19aef969dc21a6a60ff0ec8d338e8ec9998f77520e2c25dc8044c2e47ee96734ca4666d629247081721d10d5e872a9933e3cdce7d898ac8389aced3d3d925dbd7b9fd24cabbad3b53f6b62c9ff748f502cc083be25c103cd1fa3705f93993e4bd013d219de254e95aa9458b5b3149e7507c2f2215025b9fd9490f2b7fb6e97844a3adcda3b245fb766006935ddd3556631bcaeddf2473db99b2dcaf2ef92e7eb6c8d690a3d0875aec4382ac6ca2152c85d06103086a61d6595b28f8ceaa6ade59973ed367e722ec077c403f4f28f050fbc37dcc587b2c7a616c7a6e2771a68076396ffcb59d1f9b0e30c8b2cf18ceaa101da5b09700dcadf80e5b7900f4e94c54d5f175569a854e488aa36fb41ab7220b0662178ca07a596768528123de3b2a3d944aa412875cedfeaf58dcc6d5b4a033a53b6900040d65f7a4e7ee56d5a402779e04f3b00cad5f79ca6f63ccf2cc0cd223b80ebbd49db9ede7a22862812dbc4b1aa6c9fad07f8efe01716b9018084e2ea7616f85b7333d945c0c970f8cdd400130b98db67cda61d87ce55bd8f06e4e8f5abff22655d5d93328aca4249bbd76e10ac4a9adb7c6c04d64539d6d2209f53f64590065578e7511760ab56b59d34633cd4f84a72a4c93a7e143981755de2985ecb7020b6563f9776caf34aa6b29993ea4e3866c7d73c22c1a3eb49d31f7d3a81a625ee0265e4dad322287aa7cc7554bb50717c35744362538cb59c9605bdcf117e17eac438659fbf1eb183332b364a228439f7560c5d5d96273ef6187122aa80bbcc83763e306a9d1934d0d35f7ac8b261f864b41008892c1bdde2e5125a7151e7ca6492f7e3afef9a190ff2e9b174ed724340aa2fd38967d318ff8639b397f76a87fa94f5ede43929d48d2c5a58c3262d9127d2ac3cb2fbd576887687cca303ec8ba206a8bdbc1c310dc4ea11ff280efc6866b825a2ba2a9b8d2a206d0416e9c65c176280e17bdb581b63b6b103381a874f99b52ca3e3a6bdb3613e5a08682b806fb7333ee7c828f783d61ca81367ab36ad4d6411bee3e2848faa0aef381b4bb33d0de3033f1577a7dd9886779e3b638307de4f75621f50b88881209d21a4bcd74a881cae65d839e19f277e900227c604f5e8d1d83c1a8392246309d4439911552eb22a70eaa4f22d3f0f7f91edb13524edd995ba8b5a0dd9e9ec41351c6ccbc54018a6fb3bf032f343cd03fdcf6c437b564cf58cfe5221d85f7941201a945e9035381cbdd84e7ecc33cca62415bd7370d5af8bdff3979215eb86a435dca44c5e547cf6395e142820859ac0b56f39479dd27dc314199ec12b14b0c4e6c11107884463bdee2be5e188bfb40e122a44226ad32435d9cedc218071742da3767f32968b98ee4cd0381d7d58b4c8dad572b6506e5f5e8181d445ae684d68fc4b233011706901f5d98f4e76d6f99b6fff5955f6ea7b97bbd11ba01d9fa8e171ddc19271b9709349a65ff6fdb11ef052164c93c6fe159be94b26c3465e134174acbedc3fcd2c1ce8c53e997a8d816221a8e0f2391f99b58a4e6a11c14a18e3a5169f7ff402180933c48fc895b2bd5b4f259ae3c5b5848f2f596a2e16da265253c9c7e0171eb0d2bb12d7e6a7c74f563b1aff0b05566283390abb8aaf84d8083134eccf11697313ff3ebb865931a3fd960771ba7078b02c47c0b299f3e08a9fadc6627f8b88fb4770b68f29f298578bb07997848fa309f4cc1a03deac63ca632a1ccd83ede3a5e7a008e7443c51c6bb4acfc4fbcb5bbc87468503eb0185240d5696827ea1000f6f1da448577f049df6a598ae82bc09643e47805721cbdb03f883d225b24d7494683a2716e6331749b85152a8abca427d843f9a623533cc06bf524e2be16b97d14d95fff7831100368aee9c47f97e8d8513af41b97801de98cc4269096e54004299a19d5e806155f0e8ddb410de5141075706f4c16c9e992699d4b142cbcf4474d6fd8db090dc9f055c9f6877dceb1360b8e7521ea562725cb269c56c8c15cac4700a5f9226bb31e050a3f7f177946b4dc3b0b825a505f097a0a203eb21c009ce1f487177a4b5c52e5fac011220f5bf1b0203b57addf1aa63eefdfb531f66880e1f4871d5ad34af2be3f8026e8b778554ee40c882c2ade64df7ee2a18e771dbe10a7acf30a2b0768588187a4af9a2648803087fd1f5a36ab245e30ec12c6a6c036b6fe82d27c1b1a7b69de75c0dfec320cacb29ece96a7e3d637d17c020c8bec1bc885b0faee0c72ef9e8c7f63af537bbbff97548007bb74bdb3ce3ba97055ac86864a66c9a864d67bc999acdf32e28b55d23e057ed5f9c6a1782e0f4e1b8b674197548d88d3aab0e9920ee27e8f21cba2ccad9a1127e9414a2ef9e23834b58412a5ab0b80966767ffa0f20b86ef98a16a96eefc7f25144e807e389bb0e45b6dc25558caf61a2263869c4d0e4079d07674d7091110f901530a10f222fe530689195162b03586630c452d27d3f45650b3893804c30ec838bab18b2f5f6aa83d40de41d1a78403b3ca06fc8942eaada0be7161e9f9bfbd42e93d97f73a3c0c89fadbccae962ab998058fb17a4369a74901f4f9c09b6dfda64a76dd539bbba6711fd69b006470cf9c25a9f303beba6cd2e2d9a98f905eb3ec4323054a6a309f7d179856cffb9e6e47921c6a2b9b2623c3cbea1860c2da059d3e0eb7e58fe31e354be9a42342fcbd20b4b0bffac2f3f5a523edee3a182b1b40a2fd9a2bf21c4c2221902d0521d1e5aff42d9a781b6909fe52abd5267a981e5dd7b956247b2350cb02579a7c80670d7cb85aa2ae8fd28859c0ec732ad068367d450a94d8133f53b85704939147045e10690080a30474993bd578705102e48a2754b7fc50a0ba7d728660bf4b5ef100f270e7dc5f6399652ef91675a0f95443e36c8a35930bdaf580f933c7b2ae761aaa33d75ceb958713b994902a219b008839f549e8a93de8e46a164552ce1ddad4c11c98ab4e8186cc650eac36dbd12f82b257bdbc9b1d2b71b9475d09a8946757be92f16f900ee0b8b8cf3342d6842a59d5faae5a7092edc5f4f3459447fc63cb29fcac51ba26dbfe3c3fecf51b9a3a342a46e46930867407a381c39ab33b17588bc48ff8d3b0c1c779c6a1f8b1fda53b3aa42692e3e00a604f5ba0c3f53bcb246a51630de393d83af6cd18f2a093b3988c7a3d7d9288f5f87fe8a3b914e2c75a510bef37f3b969803bba1a8cf146ae70a931f2d145657df6bb909621181a5220c55afd1f0909bbc0d0f76f6eabfcdcee17320b360261ec838bbb3fa60acab59e50a6536c306b18233eeadf3fd69f873760e45056d36388c678d168eef1da39fe7957bac76dc7c6d10cfd32a77b16f5760bae8bd6bf549be8093ad7a1d5312365c8d5fad8ca050ef1c2972f50a0496ed1a1fa8261ce1a6b10c75f5568beb9befdc689db464e0e38abe81fa0df50203c70a92ffe9d099e416738a6a9ebb55951eefad925ba01c88c2907ff4bff9083a67cabb4c73277c86415e6789dd1c1f92360ed2e9fdbec1c5290a69ef8566a5af31d30f3a5c921811e41593ef7c2eb817d7a25f1135216f2d10b4e64718ce58d6c7abf53600a0dafb513175e80683adaa7642c8847c6883352bf86b97d4a090459bce03cbf9c453b72b4aa420068b6eae9478a5d03e048c51dd7d605e338dfa8020a1b168c28d10e9d4c9a503f6d679a8b4bc5d6114860927a79c6b06cfd6e5fae8df94a8d55b70f7e026df2041d56d3d497675d38a5d781b1cedf22e041bf12a66d013e8bcc01255cffad8f18208a7b0e54f8593f9fb67909fda8c407aed8aa33d1bc5b4d34b73a816be18e441f0b7b7fa9fe32efdf0464cb2eaafca8eac30d9be1b0099d36df35336d92594ec2e2bc6fbf034f100dc929408b6b338d9d882526c767b1417a83fdbb2d4757feb0162528bd8e1a6ad10eb0ad3975d27c702dd81ea869b902a7aa7c61d488f01e92af9df1cc28fac4d1dae15d63503f3e0abc10c9af3c8ba8655d996c8ade8c740fb60e11145757e7b835a4972f82e49b153cb471016a8dfb5ea33c2676cf93cad0325fd1bca69a9c2c27e1a2c595285a36b6ac5cc97b29c337844dd5c1e56de67c2b7879ed9a29a9d5b980c74e1172451731e0d22df5c6c79b08b5c292a88390bca94151cebd6dd65df2694ef27c2c2260b5381d5562cbd030385a35129f3b9238b5a2a08896ceed69db847fd860bdbab94b9c846a49a2a69e1b25756952feb3975683b042adb5b4a47abaa129448dd5c8f9f44e9433b2118eb9feccbe4935ba8295ccc7258b88f5b3d9f1fe0cb1043b38c928c4faa763d9a81bce80390d4670a078652e59b7b076410012dcaa2e8ab3afc3202ec52d1dc593487bda04259b9d9a0a362d05b99600f4f506842b438706d5eec4d41c4d489ef848ef2244199a091750270b511aa15a74c2b33eb67863fc5452fdfd28904c2c7e2410a02472ad7bc05421126661384e6a6f03527356865dd1f7b1f2117d9237cee3c89ccab73bbc3d1d0a886c16c5a27e02dd078b6458f1f7e6c9fcfe9d80878f8dfe5d5e70ac9535b3ccb68ac2af1f578528a6262a42806b262e6117767fe36a2b9a2c092567cb501f4de4e9ec5e8d9effce776b31aad1d8bfc6698692f81507c48351f25fd6293768775ab11c3ab4fa79b6c28300f9ade4ba7b5e707951e30d60a31443a560769296305f09daab5b14fac8cf962098dc371e348600b1f4162507e1bc21806d7908b2623c19af194c938aece5cb17ed267af3d92b5bc44776f6c22593b67765fb42c2f43a0a22ec4d20310a4e4a6f625355415193ac3ab4ca299857df2a12b1c4e8d1ce9f04bc8c2763f80a503caf5e2a6f1186061999a1dc659260e9a5d9b79ca1e4d8b32e0361a203e6d434c9604974716a5fceca6b787253b726f94e55e04b1505fac0b181d485a904514218098af90255c432e837a0559a0f92574d0d9498ed3b1c0cb5be4b9afc5967c152328b81cbd99d799b86814de3a28c4acb893c4dd18f26e061412fa7a5edfffb9e64b3d474fed2ec0adf8321d679fd1bf0523e3068070084dd92e9754bc8023625256ab9a4cc4cd35eca0e9b1a9bcb13e3ef040a5bae92405239dfcc97f356bb0e0018fa034cf176becf8a815810e078cde8f4a25189c55ce8be7b733175e5d2827a255d3a85aa1c53775f9c37e12292d5c678c2f3a27f1fc6aa2434c05695c2a91dfaabf17f600e4549f5b460157bab2410f730e900a9d3158541d5ec9e50d5aa70fdabcf43f995bbceb5917ab4d209e14ed9b5daab2cbefcd53c1f5f56fd51aefb97277dd85ff7dd8c05fa2ec70ef5350985196facee28a4247cdabe86847fdc4730e5a346787cd40d4eb8245419b748c765244f0ad95b34f969ceb434cda75ddb31afe8962e6ec8d9f9940366da974113e09e22cdd49ed5dd6bc2e76abf11583f004bf4cf6713e0766c53740239dd48725e4e92fec638af57ea80ff2f4404f6fc078170f90db5456e11c01e321ed0876e47fd45a39972e9ef4ecea58c43ca5f99ad1b041d079a1f494fa2aafd71b9238e0473e3c73494ac2dff758187a5a9ba9e59df57423d0a958d8dc0bf6c1ae0475afb78156f7fe61f9a663d3a2b50ea2f9475971270974fcfc435e30685028d195b95d483a562af6bbde9ed787d2dd4e8026809dcaffdb0f675aed326520f08c1183a4ed470c539b71ef14fe58724b10a709afe5e08577432296058c8db2a98681a53b0b0d990ca2c46e72927501ec7c066733d40828de4aa67b33a94273c8736e746c0c1e6ababf2bc3144e6e00160306d5b902926874887b70f40313e2b1b52097d47aca1fe2430083968cb40b7c2820cbabdc1fb2ee8f0a1dc344828e19de5085e0c1c12727c0eb3655c7d772635dfccf88db109680b0eae82dc80ed4454166a53d9b740edfdb5441feaa58d38036f347dc8a1581efa0965690082963e8a0eb9c374253358ed4d43ced8eb8bd37259ccb13638f139fe084ff96af62bb685f47c16a60ff39c95fd39d9eff678e1ccc61cfd9e1fdb9f5d33f29be182b2938ff13cb3371d899f3deeadaaf76f5c4957ddadc7cafe1e3a5fb3d8b52cd135bfee2d8004eff6fc4b2d4827a8b8fd3ff35cc70678807cc3f04eb089b11489bb21eacfd07096435487ac322f3bfa492ac722abaf798941d0ab70518cf561534da1cd00b45ff3ab993a03d44ecb84fb24adf3b23131adf650520fbf68ebdbd6f227dde7b539cfd7d44e7b570bc01fba368d15031307b34348cd7122a8f949bbb29b64ad5a67f26e0daa5ae3ef83932e674fd1c8dd6565cfc204dea1d18975a995e5a8792c4f24194a36e89f817aa800bfdb6f2618b28943c5dfa0646d022549a4eef274b25a2d8095da6fb4490e25d8461937474b55e8465a46fe9403cc2243e69c89c574f0d44af57e354acfa7d45d05f27153feb84a8188213f591c4f343e64d8b796fa7ae220730a83879cae7b38034c6471b942779b5758acda3ff222e2248bc20ccd5e20a91566a1963789e311481159ca055b363dcfd38d40f420b6d8309bf3517406538ee57bd79d28a2d48edd279886696b500ff97a2ab2c43eb6c890f2928d77d84676eb2f6dc5f860165ac97869cc6eda8eb8dc36ca5935b5eb594a76e7e75f3ec00a2e6baa352e2a701b14ea14c49a11b6e180edb65dd1ed1d3468113988b29f88f2b618d816526aab7ac767e09878769031ee8837e5204e1401f1aad298fb6367d58b1c3d8fec878f1ee9d6176d8d72e6512df09319a9419767ee28f83ebff1255bb66121c985e9e4b0821eff6e636e7ee8450b1222f42c700e6675f4a288b38a2d3ecdceeba4f872d79b29e0c081d0219f3fc3fe288978659f61780eeddd105df32b4a8b1ed21c013c3ade048e6f01971e22ff9d52f18e3fc2e8198d474770685485bf9f8a96bd58866a25b2feb66aa80cf6a739c9b3d4c51e0140bbd74d3b71f9551353567843405e30e63138dd721c12c4a218b557b4c15cb7d5dec677da418aa330efab0016816c9609ca656c80bad793da823d6595f9230fc03f3b4db3a0ae75fdbbb0b79ee357a377c5adebfe4b046b36c18966df371c13e9265f582f560dd562fe8e24432ec85f166a37e3539740549e1cc2e2f941efca39da5a1fb62a50ca47026cd06e2966d3cf002cdce7663457fada105f4ddf433c96a5532ab1e51f5c940d7341859dda068bd1b35c2280877b32449a6742dbc072e9cd7202864f21943168ca01f252cb003023f5ed6cade2c92fa2898140fc0f731b9be12e9f30ff79075b9b981b10e2caa73f1a162db4ed47d73c0436af09d8471257c53662506114fc2d0b8c6a9fc76bd96d4960cd5e4fff1359340cf8cbc2f7b84949a33977ed6bf928446745c621ebadf5aa51b473b1f9cc42418d810a768af4b992fc8b6c4e89e7926eb0164e98530a1e66734abbba3ce8405241b38d9c08adeecbc9c0f82a73acb4b0f04400d5aada31a54ef8fd13d051998faff61edb7acd311a9340e32a3332d633ae37a280f804768e68240363bded95215fb383dbe73bcaa7e072f5f5cf5f401f7257fc414670354a4b3893530ba67e30d950854557df019b3bc0f534521d399bc50cd8be9b06b6007f9a768bc3629ae3a637ecc1d2a11d1e2991ad8ec1530acf2dbefca2ffae40d98ab474b2ed0b33634dce80f661696857344ee3ac26e9fce434d531937a501dfdf6ec54708f888fd8567f098d0b1f286fe35d603588c6550262b93f3915d493934bace06fb3c1f6694ab14e2dd9aba68ebe27ecd2f0d45d503ed2ee3ed722ebc40f5bde54609eb23eafcb187fd1f52ada4e144e2b65fa5ef750890647c9226db7cc6017ca9f070a8010372f2bfee6fc7e1a8d50e7ef209e1f20444efff1bd60950925537777e44557f25c5bd8656463a0abf8b8ae962e66ee376c8f0b59d90e854f115903f01daceadfa2642e1058a96987be4f2a630dfe8f1c6a9116095fbdb0258cf317129a87625e7111d706ab14003848dd015da3ae2857a41cc60738b63d13fee75be6441ee6f8312b784f43ed8d46fd2adb8dd9bee27184f8c35d4a4155a1cffe767301b89f334a7abcf40a7b3a3744fd61f99875e4f171ecb6137fa52058680011c1ba9eb59a25c648fce7082d9587203aabc61d575fd3c2472fbe2cc5bf2fb5d3d958194fb228d7c76fc1da8ee72d590fab4cfc624411401dbbee1c6d5f8de565c2c16f9505bc75df55823a86b69e7188ff135a2e26952fe1bef9be3fbeeb576e84dfe8b01a4a6738b711703d8941304cb10281e290c6563a41c65a6466afd4972898cec87938767b9c56c4dae8805d04c900b8a7070c7fd14b3d3803df432488b5d66704abef6a500d397e855bc2c2574df746a515cf704de4469f45af0d0fe83380fd8d37d80b5e11a2e5686b7025ee47ce74034177f25814c9d95260775d5fab7ed68ba55a204eb07942a89ff04f70be6d8aea136ccd97e4ae2c517ae7d59724b83a257edc73c7f2a6dd7080ab0886bbbcd0811417c9b45bdde16a83c74035a615738348c8ca72e011fee6950917d845a28df1cbdeae57823f3fc7057e66e43980c8ce8e85eef781a3ed326673460d640a0b61c12a43275fba908d87740f4ae6de802ed57ba7fdde42f17d7b4f5bce20d990fa7c6451cdfd371ae79211030fb418e4caa712bc2cfdd754ef5d061fc282f865e386f2a0f0619f27fbadbd09dcac163ccb8bb2f72ee84b5caf93015a92914fd245673ef83995d8fdf160e0eb59d4c0d0580ac31ea8a78452e6a5a7d4e556c61e48a5ae2150a0cce4f233e26f2d36fee79aabadfa45406c7ebb1c5f5464d7469313caace2dc8a612626af2b5e00dab9cab9f6d853aabdea27577e93a4b71eb577cf5e9f05865b810ab45b237f7cc6d7c2dc73adf18225e596e156aa8a8533fd13a3e7ef50f51c13d7c4bf339c470442152bab929b7381471482290ccf761c04afb8ef038cd1d5ffd68064c17b099ce00bcf25f01b25d8f7e76281203b33e3b49336fd4581c48c2d4f0ed137e56b949beef06930374232dd57a8e550956490f306449a1cf6744b8589968efba214f65a04b500b8b86f98e1ae7dde04a7b129ab510a4cf0b48919eece4124777aaeca05974771f2655610eb3208f3a237c0b8c3bdb19e2a84acff5364361a1135de1683edce4444089fa5e32d72ac930e3c4423906115302c850399949ef8339a4ee4be4e71021867f25cb1e5e2913ff4cbd6b312413b6b74bb30a9a6a1474473a63b9d045832d54cf53f3da3812b0eb015755b8d7a974326f78b6be2668eac868d240856ac5ce37d53556fae7601690cc329034733b12108e01ec7901655d29caca5e78b9508aac2b2a63050ea9bb6ce7dfa938995126be41ff0a6f7d825207cabc922ec3abf92e5bb3b66cf05825ebfeaf1f39bc8418b805b09ee60d584fdf03195a2c1c40803ac151bfb74ee3dcaa7b3150bc5f3c6e7a43d72891335fdd1bee6134d525a6c65e1684ed587ce54614e806fc34f3f2ae91a6c325d581f1505af744a0ce62572204a5eddde50cc508a7bf8050480d3f4f7a991515477bb56ff8b8042c8c64da29cb09dcffc1611b8aff8c3e1b4a2d8ac7b1854d855b73247281ab504673bf98441dacd2c1923c514378b8a0bbdfb75dbdc305cce4762ac70e823b897d38b51a1789297fd1cbd0eed8afdf58905d4d30882b9523b14be505aa8703403f2fe7e80a79ea349ed2d17c91015ab65767419bbd57bdd27a314478ccec7cf51aedea8a938c7981874bb0633319d55a7f725707c3d3da69bdcabb98ec4f13188ed71f6a591d51e7299ae04b0555b9a556f2d00d422c9559ea7cdcde9f0b603b0990191fb1c90df60445038cae4192379c8d5f04aece59139ecc0ab24bcddedd299d4a1333fc080e95de7cb08469d971ae9656967035a027393cd7cc78f3096f4d5324dd6642cac16ccbce4f2e3af9f41ba2592b1cfef5154843c685bd075a7213565bd6bf29d09ee7917ac112319e3f5235c94b2b96e26e4a8559667e975c75ea1b41a7a51db3f794c3f4bec6fa20a3e0c5496f2279d282ce5602f7341f89fb501668c8be8aef7bf2e7ee80c2d11bd245d53c1f88246003324a45a0740c6d72d3dc43a2721ded9c9051aabf7c72fa3b0fea23c4c332f56014e6a40ac4ea616ce3d164dd563328c9ebb5cbd37a3c465e9d7893076a021d19f49fa08e9d36104a1eaa4ec1e1773b946368c46542b98aad8d14fc5fe33e31914ff9cdb4737bf4aad2ab54089a36907ca60f26dd4c5721b83d23e226d533fd7685698e14de28890fbe692719e70dc1f311fd65b41db1b5ff4c39c704b67fbb3a4383541833d847d910784a6e5e694a8835d7f3822d45c1f338db2d61ed9e054cf8cbc2471ae7bba7973d107e76d584bc801362b0018fb034616c87d7010b663f13a75b1a09e34efbb14c1bd2b6ef2b009f3435c620fc0b23748268dc87445871329a811977678c35dd09ef0394f287e4e1beef4d02175d50e0a132daf6d54693b439d6bde9c0fde6991aec79a7ac35d9d617f1bd2b6e013d143d985ac63adb0746f9ce8fe7ac1e9e63e3b6bd5558bf700ad3df8f136cb158addbebe47be1605c395ecb07e76568cddbf8b04724a47f17ee771b4b409fc8340bf0b0008e65810329ed6eae6fa956e55fce6b9fac0c1f61ff76376a4973b04fcd1077278443b78c870a2bfbf6d473856dc96b2f41fbfacecc55b6747485240c5fbfc3d1e3e86e68df498568f373491e94ae218e8ce0abbec39a1af288507e0a3253088823d03018a12ffd8e1c02422142b11135e376acc283c7c75ccb4248c9e37ec7c2daa7872c6b3216c3a6fdf93e1686ccadfc1a687a6b436e1bd3f6febbf197841a6ebaee049bd443b24ae2c8b58e93b66f2d48893708b151d828cb1a60db41cfe756a6df41c1ab16c26e5d5b28096c60e20d8d6998ea7624ea305b16490ee20dc238d7c5646b0b028c97aa0b1615754ebf035594006f2649fa81039ce51b0cb0237bea5adcf69889793d6563003152e25ea54d931e25265361a170f8c57e367983964aea1c02b83e00e61bfd66fb69de3969b1e132ab1ab3b8181fc45ab6d3ac8b2e660dc20e0e72cc283a24cac24e74d7d73ef8fe4f67fd763b6c8a153388db829ae8303f76ffda236a5c83ac245548c2645154d1a0929314a1e3b4a592aa7902623dfc14ec00d6bf22dfa46ba032ec8197759f4d3d2f173bd211de5c42dd27931ad3bbb2cbb5fae7e85fe1b9b45bb28df73812c18381fc24527351d9d28549bd3b4619c99483a9463139c5f6df245d5ff9f559ff026fa4969984c97eb02761d93a0170a9d4fe84528419ebb38f412f701659ff36381cb2db1dc2afeb6a58027fada26ad41b8afe85576cad605326ab56e2c25d07932da99a55b97f807f8bae38fc8562f8c6bd8a57219ea59db949737cd5bb0df3b216fb3ce7d5b2de5e36b77dad36e358750aaa50894c4ebc302e0a6a65c08c7b036d2a3b3ab3d47584edd0b6363386a38506f109e4e2135c4648c2a8296f531e05a4a92dc4b07eb682156c8b3e17a73a9516d0ebdafc8dee6a2e4eae7713fc5d47321a8d2c77fc31e441fd551b3fdfbe23ceec5ec1f838f31a5300f6055ad2a936a9d0c1c856e7781a0805bc54389a8e9fa3860b30618f0ae53b8c072aa0909252807e742ef9baf991bc08298f8e622c87293059acc50a86495c326a7d819099394a760cd6bd0126f9e29715139db12878b49dd2ad9f3605c549a688647a6d3e495c4a04463d3480a120151787031202c2fa10fea96c9bf9c7686b09760770e2015a7ce2f3e6dfa735d91499504b0f3c145e2c36369996e2ee4cd236389566350fb9913176466d0b0692182315d20344db455231bbb2d141987b7eb712b097a7b2fe097823d8671cb1cf924d3e3498ad96642549cf54b5a66468e3049af59faa998c481fb319586cb60605604fef39e6c42f1816e7dbce81c089819747b0e8ce2208ff907a85ab6b91ca0404b16e5180e30a9d017bd486543b71fcf79f9f0d72fae8729300a9eaa9c38ff0b3093e89fc718b369211bb67ae43a697ae090c684972bf637fdbf29097c9bc6df3bddc4dba0e257751401d0ce0679be4032a75a3a237d224bf62fc37c622f3ce3f55c4175a077dd1c76d65c0ab15c684cf6a872a2da8d548ea4c234ab54dbab40e5782615d0bd8d85d10223d5edcbaec4b4fad763c443d3278ee1433d5d87591d949a3d62369dafd9acededd8c3aed7d1f5055126e987e93f3df2badb821b8fa388284c05dcff8a3f90ff82ba3aed2c9a3f31a8935242dcfe375f5f2ccd8095fa4b8c1ca5cacc67e004a0a9245b70f5481de6a351065af58b068efbd9459cb349652c75eb07ea8ee490382cbe2d1f7a02148c0b090db97c0f31e95589f25831b85c721f7f9b434772bc2fd12fb8e302f1ae8ba8627045b9b141d637e5dd9d5671bac5e1088ebedab211ed612004a2d63c724b420536e8f39abdbf67940d516c99068c842fe8428ecd16daa3381a463f0de835a199678974f12d0bae3f8a5db95bc931d19bb2b9adeb545e612001b5838999af8cc70c1082df1a22d48e5daa86dd8a1b8df4f40a7d3351e2617fc1d9eada0c22cd372b64668c0b6ca1288d1f1a47d1b283e4b41d47ce97cc6cfe6398be28c9f72a90cf +MD = 72bfe4c4e0f6faee65817e0a46e7b720560d2d8753267e398637ac21795d72f57469ea2a0d3f6ca65d948b272d5b5347 + +Len = 89728 +Msg = 0e6c9fced82669cffe7b5a6f09dceec8f95bc397e7bd55f0e9d10c3036017a348b27ddc8cda2ec62efa8d01116dd70b0fb25f15f91b77d34e974442d5276c169c4eb3f987f249bb1efe94be3d3109fcd9e4e47f11d4c16665bfd06cec2307b888261cc2737d5ff22c6e6d4cc879b0687aa7bcd35d3a3a7f0081758fbcd562ff88d318c5b3cdc9f1e3b4672b77ca62a47e6568a14fbe5b839b868449cbc106621ad02871dd862030e17b12e89f85a95731b878674dc39d2a93298d199d788a76baa7cc656518fb45822d10f2b44dece7511b6c93fbfc87ca8405007da66e37a3e4b4850ecf08a3966244b1d85a85b5db3908a5c5becba3e9ea838ef48b14c6702590e2dc9fd7c1a9ee5ca607f6bf9cb9760ab46b2ab36a0f333f790c900e9f71f9d7566d3c08ce06a2cf4e102d7df9e8748c28f2a44642b0fa936f3469ae2b1fddc2602f480e31231c371a7f4323661ed127740adfe6d665bd29c1ea8c8601e04e1c9091387a8385a70eaba3fc525993084715f222379d93d76d21bd5d28bc49d730584171b04db4ffc0723c9d8d5d0b86759f770f9af0d1e5c7ff2b7008a2d2e59827aea851f82772f6fe97cb36e8ded82d60d81c93889674d4ca9359986e1215ce9f3730d20b53ad0cb143e9d1759379f91ab3cda3cd57e11e04a36e7a666dc44e2f79afa30fc00a9c2adf9e0f8bbfe8431d88976e27acd70e5dca4301346c9d9148f479676e03180fdba94c23a3baafa5f9d50e352ffba32006866bdf4094ee228c262271be8351e2346f78c0561a3c9c301796ab5ecaf1edbf564d67235d529c599d3f6469d754bdd560a8580b651b9040ced5333ca13fd1e8b86c3b554c574941a824b208557ced3f4b5f7d4c11d92cbc692e6f3204e977132b4cbe4ed868c3d4f586ed12a4471ac27e028280a6d1bbf38516b1e76c8b47af3d6372789803967403ba68014a5fa11f87361a51aaa1d89691329db55e81ce4d5d44fa8af1b42baf4143c55c9e032a96d56ea73783d61d061be695343189655e1965b8ce7bf71e073cc7879d35fe11d91710bb9ac8cac3d293b73adcac0ec751e04a3febad48c7ec549a214ba88cf1469ac0ca03f01c978c8738f127246e4ee94076f24aec25c3ff375024d04c5c337fff0344fb8037e28464d05aac21347654b8506264df1a9c80337e04d3b7d872e5a23cdee9ff995f5acb01c9c428fdc854c67b12d1fc93bc40076833ce617e1a0822f1da77d4dd48901861d117a226df39e96b861abb3d9d9ef1c34418efd9a3580fa6da0d96604894db65030f335c05a49f963e979154dafda103b84ba967a965b6e04013baceda09828fd22342e9f605677f9ed11585defc83ae02ef24a486b1b722cf32b875674ebc46c0ec577d0adccfac497fce5d241c2826b67bf81ce5bc9ed2b9e325f08ad4d72e51d2f761beab3690a0dc123734ccfd02356a7a3d20f6bc94a29d79cccf4c71aaf77f9954abf13ab1477e8790ab9f70c512434181d2f0cedd1bca3a668f160a41343ab3b23d3f5aa2afef9515d2f421e3df8ee497762b14108811de6a44b20f859aacecf70cf604d94ca7d123657b9ee2ffb5c9ca75064ad369dcdc24aaa0ffec9d3e9bbf75a5d7c9902fc235bd963656f55067a77a22c19a53b3ba320b8369faae68466811df31f82cefcee945c4969442d744cad00126d9b81f0f2f01a9cc1460d2738d5c02a1f975707daab8871e3f8ab2f7812111c9161977315807b494de36e5b99bdea0a6220c5a44f6607e5bcd1f9be686e7e546d3fa64c769881462cca31a7f1ff439cd165405cb58f7eadda183ca98289eec2ea7cd6047b02d49a44437f94a86474e754aeefb575ec98cf27149f79302a0a6dee624e228e851d4d7f9580a926b425f3d442fa39f546fb558a0f47b5d91b7a5d6237372e16e80468c40a5b6ed4b7fdc9376a8a709e644f46ea4f5fe5e422e59a2f44b8b07bf430f2fae8396b1834a570676ec7e1d8103dab311d0d91bb08f42d3bd1fa3124714af30b7841295bf5c5f04a96d8140c106c8b46c17942c5944e1d702625397b27f974de029c2f06c00452ca29e591a02d86ee1183cd7f6a909b72b58a604ee7dde67b5bce71057f5e0a9dce7118e1fe2f30dd7aab2ed112c28534f147d3fad05db9136a23e934309780d93db4978b8cde145e6980c6bf25f4b26c0ea3a7c49e6d1941f34b2c437f320e0f013b8a17b402da7cc64bbdd10becca22f3e70434bad6ae0fde8c61bad6f95b46014e1a0ddd622a3c79543b8f2d73765c885a11d38a5f2184132fb0229cb2108625356ef66ec7aaa86ae36782f1505e24b546f72877d21aa87b7b42013926d4d75537b05ad1f905c782406931c04d298162f1ddbceaf64084fcba3fe2151d5042799d05bf6dc0e1a1a7b36a2403307f7c77a4ec1549923c1f7f32cf4a985f2cce79b097afaae4e73fc28392e420c20a1bdca74cbdfd6fb582ed2d18c32ab30f843db58eb1f02cbea8bcf908f881cb6f687a42243c6f5554b32cf145d433e2a16aaef7124ea7610ee47b5df5e88c13596b37bd9c18060bc1bc26c67c061bb58b8bb2bd490c374b81fce9f7803dab616e2bfc5fdedb295ba3a4c1f6e5df4af175ec324e5e7609b2bdf7ed0ed27e457e56b0b2720f0c420ba374e7c8aae92861069717f37711835e6add6eeb1233c133ba023f3c5a34b8e468337f83f0ac1ecce79347f4bd670e1731b756d769e58946422a8d06e5daf3ae9be97170e2af92f9c0e8ac9957ff13a4ba8c8c18ff1b047f952f8217d8865b31e39fa5d7a57aedb1389f2d2a6d61f8ceac64f8f6fb5d9aa85c1908b95cc15834e95c0200649598bcf7beb1ee2916275daf4782bb8533b3873ef0063299115281542872324589f9e2a650222eb1a506196d3e12adc726b7e6e4bd63cbb601b1decd0bddb670dc7aebed5a67322d96ffc98b509016e6bd0e8bf58809ccdb16dd14fc0e29d50e19829e73e66842c6727837b486e43c0d81213e1a57df7d32da3eeb88383fd447c578c4e1fb0da6a3bfdb298ee6f66862f856c9fb34cd25e0d43c2a1a9207fe426ac625dea23ea5ee088f68c17baee10dac16f33f26bb0e108c409b5922699a288fd38913e2e388ccd2fcbcf64af5f13725ca838f36917ee88bb004eef24eef20bd07b827c3e49867a78aecd55db1de08e9d842926a37be9058f62e800a9c46537bca79c34d291ae70ea1c205bbccf1a782aaf8f1cc9616317b78e1b8703de7e95184968f899a597490a9042f6c2c723d78a66c536494cdf37da0e43e2e171a09c79dd5327e209c34b40a7bfa79bba9f151366861381a2dfde5d501b94c1427db667dff5534a12a52022cef0fe95fddec97c1b2c353117c783b7efed1d01b5588b58ddc9fb4064cf402782815c4025855d1af1320ba5f038b0805a42fc413ee383d3333b905384a433d54edb5128b60558867532077ee0a5fd2d1bb7b2fe6381284d8cd4a2f1e6c663a290797dce23e1443533a6c90a4d91b244a0b5c1a7b7c3f14e573fb3b9ffa8581603f622aef3ab98ada90ac106bb7e883d85b7b8cba01e775c0eb7430a53bca9b5f5bbe029a9b6de5641c87fc2aeeee79e375808d8b11302dd3fd5c1617785b0f9023556ecbab57dd59a7a65ec9c4548dd31f1225d6f245c685735cf6dcf960655a61cc756ab0a0f922f9b13d2f8243481022d95d83ed4cc83d141bd7de06022624dbce1f5ff36fc225da4fa2466fe23002467f3c7a4a6eb965a742c104e768d9585a017592bcedbfcb122894f5d55acf1252a9cba451d22364f578bc36e3bc065da60d7eeb5341787c68e51b24fad2ada6100111e74aa18da2c666d15c4323359b879b4353ff9575a1a62e3fbb27735028462f162c7c028087e1b3075f50c7ef7ac553cab0090e3fa092aa09a3a46542febddbe25c301e837b100867254fd0bb6227dc1decb9d65de3f50280c2b9cf0b923dac7e5dae1c1ee6190df7978b6622bb77df44ed571557d096dead01aed9314a8e4af1193e25d930c569c19d4bafabed7b03459d2bf2b6d13fe49648caad3e90775e437628613dc1dcc5cd20d6d6de60fcf12ae27d96004db6bf45805770bacbc1907c5eb3f7d10126c821067501437cc150fba69429c0acc415c28f9b4d2b623487a5b828101d596b1bc739705963aa94c9bed0b9d27b55318f135fdf6a1bbf98ecc66ccfd3aa2f7265c79f0f05c5503b047d4834b9bbb2c5d442d76aef1149b566e561f069ffec044f27229a2df1d87fa83ff64d07072a488d57de86059668539e0c81d3f9a5f9e981f1a958fb70a8285d0dc24ce4e8258161585e79d43184393b42b3c0ac22bce9a22d1b9295c92afecdee947877e50b39f94f3e8c836a0530e690dffeaa009fcb5ae162902384c4c99eea541ae9864538fc4366073ac9540047fcedd61ac609595317659ace2ae0507809ea7a61533946133dbd3223d7d7710591c69024fd625932d60cf8bd42e55c04543ee008d5502be6442d54631bf74ac9545074f22c1194a2273ff11a543bb5e9d238940693f2ae1c609eb7251d1c553a4f74c9a9db80d24910e6ce0ae84a23d08bc1dd821588995d99f6a18f66af5801891bd9749316dbcf9ce9d8b787796e6188bf05a4e478b253f81e5bc97d161cc50a2bea79da3b76ddd0305449b8325d43d01c5296872cc2a484fe2dfceabb692fdb8e45e03b576d1bb6a48de804ddb91f6bbe0d7d860a90f8467e5e50360407e7032a32d23bd28630552bcabaf2e04a9c628f7d846a7ce6f8448738ece85bbd948ae9f87764158ac5b5ae52ea0aa4d863bc75ecd0bae98a4b88ff01f9882754de79b1e1f63d864081df166e9ed4912b1b815aa08cfeb9459a1ad0029e9fd0956fd76c33774e8e720dda4966ffd9100a6dba25e2debf53df8d00e08304b4be45ecac0137242096e610ae318234a0873f016ebefaee832120cb4419cc524f582f00005835233a04653364b50a65b15f907ea50d30e5d58ad0fdee6124b1f8081a51dc59759c2441b71e03bc45bc9501c68d67f9cceb3af6b6ca04a2d5493836cd8747ec3eb867b6a47893307c5ed3d3a9d5bd6c15273ccd9bdb90c325419648114b4af9da9e8acaf4e91df8f776f33f00ffae4e54c2627847d799ac5dc29ba7ae45ec688f7815e46e1ba7fcfe2a7eac95b24385d2e4345d82672845c4f3cdbb6c1c3521a66b916edcb33c24d9a2fb822e9783fad4b33be514334476a4fdb7ec13782d0c66a185cf045ce158cf07f22894557695a55afe78c4e2f5274307dea36a03dd121942796faebca0802981eb088f95243f8cff067f5b1d4340eb3acc463a624c190575f5b6a47b808430376f89e6ff96ded0cbd960a28b37a9e2be083f4b40820a7463820cad428a4c29520513633ad35bbae501855ed5d84a70ba1af4654388ceac34a7d990b9c4c05ff9360eccefe39f927506545aa22f0bdf568bcf5013654bf60fed85168738c9195589e2eac5cf91a0a56e375d9b42d575bce136d359216b991cdb780754ee4d9e8e86f885659e182b9bc3952e681b8e7c11a793b8bdc515df85f91a2bcaec3537cbb5b66576581e7d7f8cd696b0c2203a80624dc5e658310e6fcfd4498f3c6a2c349f8551a1068adc7a52615d1b3d71f82e9cccc37de2a66f04e60c2b4be6d3c5f3cbce128eae4491b49ca04b53966bfd46dc7879296c5e4a6cc52b97a7f0574a2dc1f770e45b33e354f2fa27fdd5f593eeabb9b193fc40e7cff49a564a64e0020d0a6a334c12411c82dcd7bbc400f6004e90f731639d348d54fcc030de495536b82d8d236ddd558368e39fcd4d21588d90139ac240542285236404ec08a89d2e59b2ca08f0c3575f2b8ebb26433f0282d9bc0a2cd22bf21865b4d0547288a232162288a97ccd30f9f666918e4c63dc275414af37c2298c8b42758b2ec4f14b8a17042ecfba01c699eff28acd1094cec326a2f2abb856d929e12e9c43a5ec807d85e02642516902863eba0eaa39dac0a07aee394f5bbbbf396b676d5bbe7f2954883fd7caea0dcc0a0c4686ee6c3d9a047681edec545f270207a8653eb7b52f5847a7a92f2df30d6b811f586153c6443842e2774a4a4bfacdde7aecb3379378ceeba30438c125abf2c4cceecb967ca68407993d31e6851ee218646a83e623ed019bb850af4fab90e7fed5aff4dd68a92fed2fa969d0177d89dcef47766e6c76388070f55a7e8ba29256c302a4cf9033831b2b22b9af08fe0a52a1ec547476fcbac2525b01f7cfcb3af51c51a214fe2dc6ba150feb2c6188aca305bfe5a34a65d088e6eb6e627ff229026b03b755ba8041f176dac5ee2905b9f7a029f1a0ef9bc2fab50b6866a1ffa5a63580ab3aca123ce9d5ea109e685c7775fc933f166d84d8424624b6ab3fd9f709042f466a38cdffc9baa793e327752f46a06398abcd0a5a85219f21da606a67525f7a4f8e0c98d1baad7918666d3828911403c40716148feecfe2719b0d993caacfc8904d4c5afce437c865ce428dac7fe1d98bd35089c0a2d7576e954d4ec038db82cf5002fdc66edffc44c4ae5c01388e4fb5b7835335ccc165df71287139250b0ed53e356878812e7d7af0ba8d70e3a3cb095ab859369216738ed6a6ebf098e7d56ac0ee835944abb4d2f96d0841a9a8b75065f7830b1c5deb416dd0a22dbaf83f557e3436b3e0de071388d0b5bcb1267a527f46b9fb931e34c1dead7f38b2c5b5601f0f69cc7c4fdf0444e97c2924a57cd751afe34f1fe2b6d6d0456a58a9d69d514c8704ee4187a56fd6c246cf29ab25a78339e950e72fd947eba14cd6c7b460f1aca5ef5f570dbf1ae563f9f7e9c2dd89bcecb343149005ded8c80bfa33e66708e8701367e56997cd1ad27fe98b710c47a4d12a73cd8aa2613fc2910c16f4195ea7f15650132493521d19beed38411aa7e4ef34273ba71899c798c4549767ddba922ea1600bc51d709540a04b18b86f72244fbaa6866ecf4e19518e1adfc61de65031dde1f2d49cee2a4d0c4a5260736f0bf7a539d5673048ddf5d6a5159940a88a02f019f3d97895854ae9330fc18f6842f1db28501ba14eba8d843e6269aec9e8a7c451335d182d4e3e214e76612923714546bb21118b2a58207f2deebcce11112a3fd0dde8e67e2c329be3b0caab6a3ff9cd3a6dd157a260b6b1bae01d0a47ae924be01700494fc82d3f3ae4847b03541757ec5fe46b7f7a57012d6111c93566e8cfc7092fa969ca37f59b3b1503b659a6ce1a1cd131884d0c57cd982274a1e233b2ceddfc6f95d958a54ddd07a94df6af190ccf200f8782dc9be3aed77154ca7bde3db8ef01999d993799f1e2d78ed239200a9e5a6f42c0d0b5b7cab82916c5c93a5cc491c83dc00193c79f2cf443964ccb5cb106b883b0ef8e91154e04ae7b24ae7229692c4be799a21f116f6832e9f0024931ac5210fa410cb9b7206be6959422c90f009689bc684ae86c329a24742ead1a46d5a5b145ce1876d7b7c484bb217ea79ddc6cc1e776746cdbfef4e0df0db41817081930399f9b129d99785194d4aa55fb8717b910cb09f1845add30d196ff88cdcd16547fbb7bd33250f015c9b48f1b5289003ade70efc08fcebddaf2d076b58fac04e4bf2aa202be64939801c91340ca688e0bf96c102125e2fda7ebc302e6862e4ba9a0f5f6e6685bc8a1e51c1f0e8aae28f60ac7525b6e1f035f64778962dada536bcb2361c959bff9fa1db49ccbbbe238c1b9899fb8910c38ca04f5f472b23884f1e8bccaf1b9178d69509a70c0848d2535adbbde7eb63204af74442c5e36d147059ec918a7afececb726d485350e36571a8f65f7f60717d0d85c6c186e902c026d9550353363c57eac496cc17280653638068dd168a945020b62769feae5d21ff2765c08ddfe2aaa0f5e690ebe03a32a56bb3d561cc74404113169ab196049045ce9f279eda8a3dbaa10d45363bf769b3e557c6d59879a3cb26f4d2344261b1b73951c70aa88b9764304b478a7db69f1b67d53fe6911d114b5c52aeeb362cfcaff23e1d55ec7f3e4a3e51164d380019487dbc8f2928e71f2e4da09f6ae3aee7bc73a4a904f8cda8d9259f4012ed5c8ec7916e62f1d2600400557f1227dd6ff9594835d8ac500f4d9d70864360203456253d7b29e52000865e1e3eb5a675f8a802ea624a90a4bcc313c9c69eb9531005cdfc53627784510c94027fe86b5fd18a35d4aa7d66594e7fb87ba0b0831888243e38979b3d81ca1d4eaca328fb0d73068e917edfa1d03cfa0810c53761c30528028ca8328bbae42eea6758f5b9d165a3699b7fefb7bc20b89f23a481b9e50f87976315d7067237b7f3dd01ed3c7e11e7636cfe2c3c7f6231da2ecf2e00110fd9894660e7125a2d4ef7882e6df7561058e880aa13849ca9fc358c95aad8b99e8444c109e153c53d6a61d34ef68eebe96e7570d4444486408e5de79876b861341e464d71642f65f080df48d42547b1f5ae96b83d3ce0eece6eafaa5810038a691e2a5657de299eef28ac736e68d64acd7fc8c1254bde18bbf3a75f55156ea785ea5d75fdbdc6e271d865cd6e3f9f18f97898162d1fb0a681d3d1610fe54e3b43395c2703818bd33106a7c1642826aed22f6131c516fd0ad875ba79f90e16d80951a2d3e9d7ece3a539cef9e0a0f16f1fead0ae8dd017d7f86fcee4910e7ce040e9ce27111f6e8636f867d1543873ec0b5142e6d7c995808a188b5b7854d4f6a2583a7b29d6854d6eb8eee24f6d42a85cf954654361fa8706067c290f7fb38d7633745a948bc5bbc4f1e09722add2266d2971c44137bb6df4b01dd7d6fd8d1754e2084fd1ada433d249d97a8e78a6e8b488276e61c96ca7cebbed026f3ce616c70a72b561baa5480f173606d35c3551db8bd1de258562b6fc70762328ec432e45132045e5415d8ae3e072c6a1d702044abb2d9dfd0a423e167425a4a45a38a04772bd5bacc0115ee94c3c346a6791827a8c871858a69f8fa54d981152251b2f46cf867158b585469790eedaad9c682ef3767af7e908bf3e115329f3c2cb7f2ddb80382159a00dd467850713ebc40a9c3e0f7596feaf45cbf32b77c666bbd91e7e1b2ed6200e3f8ae16f218a95acdd4cc2ce038039e8a7bbb34cedf3ce84cd939716f72a5c5e7edc9dd5aaa94b8564a32a28b14e0b63797fea2e19165aa4a10fcf0a1d786f2f603be54f1efa6e0c4541ccb5eb5ae39e1faaf04575b8ab9a17f57e4afe5ac8ef784b6031fae88d9fd3ab22dc2e2163072eaf7e39803531e376e73d70364c0a1d1b6d8734db1e1abeb441e522065bfa2d1b0fec50c5167e0f6257750041c69346ee24d2be1be5a5f75ba85c2de045397e694eb351b0f6f07c4eb8cd81ad5504db54f3cb3459e9bfb82e312036688771899dde6b82d03129c8b0adaf6ad561df78e47ce94df194b8afc08ea9f1eb8d52bd2d519d8aaf6f9a632c8883225687737e1102b5519f61211ca71381e705e15db79c2aa1cfab1cc2da16ebf14ebd3061796f37a7e5aff9a9ad4662206c340df2d76edc10c85f9323ac043a625655f739e9638e49809fa882c022fd0e17e28d92bb19e8731b399d3d3779166ecfcd366d4c727902a90b087d03c136b360bdcaedc131d2312ed575803ae9e26f118f986c21208a6bc56e93d8d6a5b1b8ed124044882b1be3899fd69cf4db40fbd22977c6f5f2250d6c36c526b7450077038ca8478e7a380292151ad413c1949d78076efe497beb4013f036f7242375864a894d5732b3b906feb1ccd606315fbc79c5e8827a024fac432743cabbc5b35f2894c9f4134c1179261257034aaf24d16dd17ef42649c4ba80488601dcb03c7a343b88cebec7d3c18e9363fc6faf6684baa68cb3cca6ecf341d0784d0557636fe3ea142783ab7288bed15e21d396b74ee6d1ac51eb9e1adf0e6b94fcd43fda98ce3ce69f005b60272d48b0041519798888df584ef1b3e0e64c5666a1b7ee048d39809aa5c37c3f3560660413b28c3fda072c1b1b7d7cd191923d57cc2ed673c5dc618adc3b72623beeb5c4f12a836cbbe8446f37fd5d6f79669cf2ecb77daadb2d6c4192d6d27b932eb47cfceb83a296a2b4cf34efda1cf63fd1c283d0680c2582ed596a2410ede3a6ee86c783f153f2dcf9a582c3776ca094984112081a2a4d93813ce2b1b22b95fdc08cc172710368ed8f9cb216b9c100fb3cf917dcf887bbd5b4666cfe3ac73289d6f97b357733616ae31f436815cc8fda5c4525bda7a6e8afe35099781f4331e19e57655b786664bb90a7a7261fe1a5c862cf9c289c0a5ca8ba95d89dd4222c7b83210032f91efb7614c06def3ca2fb2becf31bac4a14904696a0ab0e0de68aee31d0fc7a7dbf9e20fbe3f8020072f8ab575a04c736682c10040b911700f2c58007018a907adab532929ce62ceff4269d2e6ee7f7f587788b8f312b6761f964f79f1d6b0374f2d9219555a8ce6f88ed97fe9c45ccebc51e1f94abca6db54cf1ab469eee41f09a827450a8c04513b3e612448cae949dd37542b0e60e985f7ff411b9f0b4da823449b17100cd4f510788a27c9a730d802526ab607a5885e4f4d4c145dd3f4b8e42874f52e8104bcbe64daf13503396472caaa02fd348a4da6e2c40969eee038957d3d492e939a8d8f2cdbea53880ad376c69d77b8b4f73942e631618c0519117e6a7b7ad6eba04fc9f5157aeddcad0f566ec97effced70c6c8019848ec0a829e718b8f0ef311decb5ea0f0ac9a72afe5aebb87d9c2a33ad6cd806da37c6946a18ae7b13400d1a4b9b305100b192878aca65f2de556f12048a177fcb4fc0e5bb58554d4b93259e54c3f263c66a44ce9aed03fd07f3457df90e650dbf9d55a403f135b500ae24b1ef7456cec2bf6607150cee63623e567b743fe9361eea2ed82c29753b9a5ab05b04f884195e77a038e56f4eac55fd47145d67cc8550fef2891d493e67815f71a57b95a5cc0159996bf15e4a5e4afac3509ccc357fbda14abfbe98b7c21d8511963c94e16f122ffaa721210a03a8fb703819b64daecd9bde83f76009d3d7943537303d5f8bfbbf6af55dffb722d7c9f6d3bd6f3c99e9b355dcb0e75b221553878e3dd748a723d2925c8d4279443f2cfe2a6e3e29c877b358d3d177d638408bafa64cacc34cf22f1ae4993077f048eb3043156a3cc4e1618e6f4256a19cc10455844602f901d0a0a9956912daae5ad033289b3c9f148d85a0b8ebcce6d6fe8620321122124e25ebe778e62fc906dda1b0e1e6fc7740e5e935b6b523ca6f61d9b8b7975435bb59d97e94f6d16d8139274e74e0f2efd14f54f67286a177ee51c4c61bbedf8ad1d43213f1823eeea6d62ab6eb70652c4e358d8af3489015db3611f266700d3a17ffbe519873bf73fe1c728f4d7d9f593ffe5d9b41e136cbbf7786e3a194246d164044dd90af9c241074c682a3f1e69c2c128cce653bdcc2217eec42d4126d4a54008e62e1201d2a6444ef37f4b3831d9ed9e2cd663cc92289b20ab605d230fa5ba8628694ad8aad82f5b65548abbe051dbb27404cce47127f7baae83ebbb5a5b39e89f1b03d2ad4f3f0e185a8c1de7c2f2022ce20d89cba8c41927f86b74371e24ccb4c3dba46c83e9c386e1add2da95e709c20e9411143376c8b24e6ae23897218ef3f440b26b1eb6085b9a9e7f1b531135ddeaff3eed509645d7f64869e13eb6cbf71cb1812b682a68e0d5ac773c830712daf7ad57b978992d0370b28fa38d3af018bddc952ff8cd51c133765fb08e4f2d43b53cf00b23f5cacf5e07c7f1fb4497e347f062db59154f77247a9d0a0d4ff192b41c9c44eb32bb860ed6a77f115a2fe15bbb7ed00178de7d3927c3cb689fec5274dab10916e68bd2139db28d57f2249d698c4d807a8e7b4de21c485738959a0d67e5d2ca6f77983dfccb5dbf47931261e1f1537f3cbca253afb6bf4fe5e7672e1dcc860b3d6c8d243afe2d9758b375e95569251eb099e04902857d1808fbf03ef6fd2f4e194bb72f5e94867813d9cb9e447247018e8cc1787b1726420a59a1ba940642f57b8bc2a9c82d1d04018c8ffb3fab1daa2f2ba27c89da2f407277181b756675a3eca32c4e083645ad9a323f8a97522d8b0afd1fbfaf4d1cb5c9dabfec0b9c1bdbd5285066bf3e84f7566166c6fc260b26aa6795dc6bfe62f4890b05a6c725ca0fdd91cb9e2da47f53bea0722ade952b0f95f1b13d405c969f387e85d65881e4b25e661a5f040689554b65fe30af0df1a85621de6cbce62c1840abbce5003f1055e02bb913b2e3376e75387772ee1f1373538e99e5422997e23a19177d8ecbc18d0b492466bab90e21d47e5a6c2c36f503268e503160a56eafad5d21ea34a67caa2844f8d29c0671f1e1ce3386e9f40ada47a7bdcba8d814b2e2de68c5925d964fdfa582c1d74a0761159e8f4d97c4e96b2f612f3e7b402eaea323589a385fc2d089f16ebeecf232f1e875ba3ac6280538465110e4686c10f546a28dd2973b76fecfaf19444d9d8926f2da60d8e5abe2b434fe2f67e0ba602945f254f92f6f270d09452edc99ba8e729d330fa286af068173aec73384b9a0ad39995a88617957addf39fc0231c797577026132229dfe5027b0974d1c4f8370399fe1b0afdd89d33aa142d3fa6435857f40a17c23f8d12c9c384b4bd11e4b7dedf86f2fb250b4c31126a1eef77cc25f691858a2d3854f439d5b703600c0d876182fa9ed3a78ff94870826dbc16b0a4b5e0fee6adb4b61df539f6ed6503e14a6e1c9f6b1ed5e528cc6d137610139f39186afcb9de352f046e68faef36a9fe5547150bd45730996f5f6083e475fef6778087f580392a3e2c17db09655f5eb35c7ef4c686f7581b1153e36a25682944d490c07fb6391452198408c8fc39a2aeb4884435ef89bcf8d35c7e2cb5613308c4dbcd01d868740931358aa02070165ef1f58bf07a88cfa119cb994210fb9cc0ec93e6127351d9d227aed9255e7d1a429949247cb46f10a24943bd50c481d6eba08ba427f36fb63b51426cdf22cb3ed81ef5b64129c7108b063752bf4cbe721785159fc8f51c89a332a2ce23f9e4e4adf77da9c4470b5fb9c529021415ebeea30eb4216be502d4a86042759a6044bc22b75387ac98b64ebd0a9b43c5bca4ad3ca1f9f1873f9d17c95ea3ebb8d27515d4d319c8309b527e033b00806aad634e32f35958b18165d384824998e5ed009242df32f416db5a6e3afafb506974c242245754ef6146d788487f9615d80c51a1eb303183b5b5588fb2bede2c488f2c199f526f2e1cfc7cb6a3ab3bead5bcf2e54c8a880f93c5b763190b3b8c9e692b44f2892a8d4b1ebfdf14998d70857b5eacc522c8f047990178cc4495f9c1af2a44cc4ff995822a3b7219cf1d5f5dc41f8903ad56ce378bc1414b0f7fec58adb3a99b2b6edf48ab5a1031c05dffd523900a869ec401ea3a714d13c05becda0141e3ddbffcb3151ea629eaf1e1ea62166a91ac6b8323e6118c0cc51bac63bc367f74026215b96df0aa3fb3e82ba7bb1909cf038836bca19d9c00cd55f3f975a9a6eab7a66c7ab9cdd0b20b27ada016b7e8132a993134a35b0bb99b23c506acf762a85c11434f8f12a4317f14ea6c2b5faffe6003251461c66597cce99223a89c3d4d6e274cc0644bbf2e8e5464745f8cabe1625a64d4736c343bc13bedc92f04913a7c5ceb75cfe56c19974aae5129db767c9ff3730d4eb8e216167f2a7f76ccf90ff526a1d8288c4583488c1a7b20a89a208782f2276a3919a74b47fabf3651ff2e6718f250148cd5ec008d4b6aca90816da77d44ab4c69257fbe1ab0f0d43ffe2640a87f760a8387c46dc2b3a88e1fc6c47e570d116bc5a0001d6bffcce6e3808820598bc270fcf59cdec0e5acf192c4b57a849de24edb13c8b7b0299bc4f920b474a0b9cdfe5589e5d20c53e08bb615c13a9a79a67c25eb3a3b8be0f614cd494bcc128be0f919cf2fe60970fbb2e634782d0d42d66a12b0e5075398545cec84ae753364b3f7d63feb994cef570dafab3ac0617bea9f3def59b9abd24ee3e34d6d2e67f6af710756995a4b017b027ee489a31b775b921400f8a0f9013e602e1df85634944c0b299dc9b78869e027d06af533afd7b1d91190528bcfa7bb584970e06b3dd0121cb99ffd2f897b1ef440b90df0a31f85dad317e7a894584e12a1d0b5fbc83c8a3c33b79420d2d79fee4c69247889b1302dc4f238a5fb755f45e3d7d986882c1cc0348f3f39d8e1eb7c5fc5e929b82f593853d9c5f249a177687bd0cb79e241527f18714ee9103c7a24f789cc82d30c69812c19001c234f1ed0c6661c646afec39f6c2853ad2d49c48eb01f3f225ebad9aeaa4a8791fce0ce3570024cc476c6d8c7bbfeddf4749c630ff5e0b176afcd22075ad8bce25af90dfcf53fdd28ba3c1a7e647f5e6d7aa6de2f5588d3fe6ab5eb21ba6e108ba21a46adc2692dff99c0f12a02245566c3eb8e733b72172803f79d844555430c86a700be6438efb799e805612188437ed4ed0c623436eb920024a1b58848a4c36d31d4a5570972ef3f23cfaa3f15a914122dd072bc31d1bae3afa02bff92b67eca4d3af927655814fe16a86ba74716d52020633b501d5a11330b016e17de086d225b9c3031d72fb75b13382c16b6ed2073673d128c33f52352c95dd27d751b3d09ef80d112c93a54eaabe771f9cfcc948054d69ecd20336fd75d1e1f7d125f5ce56b715246d6285c01634ed3ccfc159fdb9bc8369f6c85553558baaba310455b4961f64a5a687a6b43bbc6a80ce658a0e98e7a807f636b82012ecbed9c098d96aa65881faa0aa0d13637f785360916464ebf75f2e9cf6664af51ba7ba46868bd8ce89f48d2372c4c3d4a49e1d4cedf0e5f9133146aeb067bb4640edc78b7973e756db46c5f787d2aed65465465b20357a0c64a5b7f50bc4594d8516675617987d8575fe09e3923fbab3b7533655d33b0c6a1243e939b0840e5210ac0170080283a47fa4c3b03b13d1b1f4f25502ad0b815c4493444247afc19c0937ffa2f5b9e2fb23c15a262957da1a34ca0c2957acc32a221e31d7774e5a74993dc8b286c680d287dc360d0513bd349e61c1947826b81cd56b16c2e867c022e848c46862304771d37dbf2d764d62485b41dd09b9824a7a85025cc94305ddee1ddf5b8e32ff1e1f302c5d4e250fb19d92f2c951c2c7608b596c6cb5302d981f608bf5ea9d3bec26c6727837b960927d6cfaec343afde1987a30ac4d56e9d9ffdbd2fa464ced9bccbcd678b1db49ed2e11e3ad79c92db7e910d6865b5e4088d4b33fd268e61d125a3ae1c58433d0aaf9a83576ea185ec9c642e761a5ef3b8ee71357e51814d139176a19c7786800b1265976ae4dcf98ff7738eaa5f5b2e0d18021a49c207e13f84d7208e65423deeafd4e30bc6b96e341431b67b9114f393ae705ad5d47cbea37427a368be20b743dc6acea0a0c1348777413e607c16d4eb163e8fa9154a45fde40ab2a1ce8c9c993c89e2dfff7f1ce895047f0f6cfb4251f3df214a110b078d58d2c6c032f04e5d24c4a8003f6d67e5f20e00cee01cec86abe4a82f343983f04712684a67f65d1e49ad86b7ecf6b5ee22b05c35721603f7c2b19ccf1b403bc5436c1fb6fa09494affa7176d84b5779f8bbdf9c9af515903bcf867b022d9af6ab222457c55938361db43d2a7a3242d48a16961f1d4692c591f1ba168d7405f5f37f78230f73f9c0150f630eca4cd679818551d449db82e665d8dc25fc53ebc11293e4e4b7b781397e540bab3161b86fc3503844867e8bf99ecd1530b68ff463f2a7912424ea75a942cc5f87183893be3abf74f63df5550826188dc023f3c9e27902a76abed7801848bc842ce59a0d6fcc1a2d72d409891ae4016b5cab46124691ee4d3fed +MD = b1934f70c974749fe74769d3fc2f2f2e9e315f4299a739e77c7317f787d8d4d48a8513c237773f1a3af055b4e20b1290 + +Len = 90520 +Msg = c68094c26c7f017b79f126dc26b3bbcb95f97535ca412da5f7853e15fcb52f042e6492c857c22b26ffca5520eabca20ee2cec2f0b71ea60383ece49232065e0f42831f62c8b48581b458a541550feb6c20120113ad20f22502bc9041149513c98b460238c63f57b51f03dee87095de0cd62cfb45b42e5b34fb5c08c9a94a9559901305f1594ae8e9c834c7bc4234c2178c86782fd5302758f73614d4fa0e2ee8d953ee3589be814638512966d3d5e1b4ca874079170f9fb87db17e070dc7249eef6f86ae5f816af4f6c4cc8d2b61810c19971aca83b10b7d15350d0cec5fc0a259cd9502e27ceb1a8af378da53beeb46001ecfca1fffb3ce472a888b9fbc4a1d9fd7e3d91b974ce07d48f5f452d6678b08842822f5e1ded49cf9b82b2cc80a364af437dc10bbd46f56290a85308f3c03b732ea7a0d40d6b79b0865959d694716e18b5ab2cbceccef9d008132f5d3b4d5988ee0796d02e19ecdc05671fa894be4ec06150454b97c88db3420a5aa89152a3001d1c81f1148b1b8895566490f5cc9f4cc2e7ab1652c60962db0865799a82909f4840f2b53531ae6cc281c94e3c3ed80456dbbecb924a25953f87c02eab5fbaacdc2f597b249fedfef983ce2edc87718d99c700d9cab74a90ec230b56684c79bf653226d157488295c6d6e3c15b29044f081401af80bfe10c6d44a77f45cb665d5ff3fb5631add4e796f59a943cb5f8df2e6d41db48a6915e3f771517c87f08fd48ef475868428d6b066a6315f590d7a4791d31db871dd41cdf34d49e74b9ca159c7e8b765fa8f476819fcdc51a5c194574ae623ec08811aec90876a1bf1e223ce73c482e8c33a2b085104b301f7a4618bdbb53638967e2aa996c7b901c0eb9e9a5a2fdff7295209fad666bd5797de6b490be75e8465fcf96accb4408102df9a2544d2d47a72ff6aa570c9023ccc963afaa125a3b8bb220d98fbf70684fde69dd7f9546c59e768d571e7d58b96dff4540766160ebce118f09ceb3813f0fb263118405fac7cd0b6d2c602335f4f182143d62263a6781f072adc641e70af42cadd50e3989ecc7510e90c8a8b864dbf458fd19cb374d4bc1741c22e5124a71af82ae7a8a9492f1d9fa3ab4884097a1c87be5f9eaf7eb9026fbfb5107a37c2cdd89e45583ab58e128b870b01c7efbc77105ae7eeffce0d37382c1cd441b2e6a294c3d2bbf2ebd29afb1e9580fc40fd1708ebd3554a6cbaa4990e61404d9cfde05121f7987af2e1fe17eeaf8cca05244596f78a9b385ea691bbefeb1d47fdeed03a3e1ab879d2a5860981c2ecd9451949e208748872aebb45c5562232d6dda1ba74a4a5e498940579f65f3769d208c46b15a5f9e4a064df0ae0cc6e49a345fee62adbfee27f3fe821090e74cb5d560df3575781766a86fc2634d83728553ced9b82698f7ad5db38c46718e3da2138dc28cfa47407761ef9e2e802e59895cb5622a4d8be764371dcab3b05eb5dc7b51953a6173a5f6f33be8625d2e0610bf921c3b9b0f59d7007bc1eab5bf31ef6d6acbc03353b46fbce335a12d1914b5ece36c6e9779bb605a8c064dfa465e357a27dab0f88e084c2f640a6d8865e1e37527d735bb7178aa959d0c70067a87592217468f2978fe06db3cdb19e79b0a13d8edf1238f7d3e10524d48d362d249c4e5b7a3ad3eab124a40dc2c48d33f09d198942eaa7c03682c010b4ffa87d411f3359756bda0aaf160e0d0727cd3b84db724b9044d199a837832558657fdf67c8ea224f41317eef7f54ba84228519d620f1ddaf68de0a91c6f66ca807e2dbfe5d1bbeee05fdcedb261e1d22fddd564c373e46899ef59b5af8c0ec8d2cfafa6ea76e363cfe6983dad5133cc7fffe7950e7008e042e3ed569958aaeed1eefc31f6e89911f769a245352db215c71100a49f7dfbe0a5fe23f2765fbb8b223e8bf7a7a17d781b3bb39b0661fd4ca9b3a929f3085dd827b0962fc2fbc14c2840d74e592be1049fef24a58d9875bf7c5a598b95a97f353c8dac451bd74ca0789876cc98026455f9f67e0b373bac0cd3779a4013dc009678f7eef8cd5cce067797e2f8f0af87eabde448229fc610b3338dd3edea0a625a5171d6b17406c60cc9e19439df9dcc11403aeb9223b23421012f9efb84cf152f5aaddbe58c6fb511d3e81325d1479188555cf0c06f9a96f4e0bf63ef80a4a953f8ee972b92e22bc42a2de843525788ae31dcf033dfe9a99d46cfcb404a059f86b0c670fa04288a8221257bf8ff2801f17a4d6262f129fc98a7d32d745d6c582626c801b77c8d61da7d5146dd2453ae0092f0bfe45fd60065885c1322376363b0af65b20a589b324b8353e1566e44ed4a1099612e586845826ced14a0746562c4cf221a5924dc8c33d78fd40b3976304c879a0ea7877b4c7dc9e89a95710ca5c11a7f933a6dcbc041fe778752128217664c6510f6796975c623e11d67d9a3dd33f5e0c5149fd38ef44cad83c185d32345e39d00819acd61ea0f69259dfad559abf5f8187e37ae48b9569441d00003b469f1a465df58018167f0d34bbe710bab87af2815ddc1967e0fa0be5a141d7e7b20eb1da9765dc064ae5cd1e83fb8d1535575f345c9ca36af65cfae34f43abdb829245b53dcf8647c4bb7c793985ea0e1a3dedc10b8bdf94d6a17c65b06e43c2be151ffed79d47848cea636c65ecf04c6e16e551f212978e87b3da934a2b69426c7e88deee36e765a859ca209098677839c98f0b9a9791ff11785c96a8e0e30396b5c67d09022e9122eff8bc41f11739843e33188a8496907dda49964ff77aae43a12102b069e4b102963769015fc738565d199f4a3f6ee9d2c0ebbac9d6f6eb7c2ce3956bd3d06c4e35cd4f574a411db70e89c96332e1b11811882b9ce71f61483d5260c3a8bb6b10b30395cb1a4b8faf39cabe5cc3b79057b769115390bdb9afbdb8883f506d564ffa2164e537ae3647c625a5bd5cb7309899d693733b979bb9925b386834aed414f16fe32e0932bb869de2a60f64ab36e29f16d9864f76ad6fa58496c4ba468d6680353b2df99ec675a649ebd943594d3eb1730c1434229ad8de7acadd4bfc2a4d8fba936a6dbcfe1acaa199a360891bb3b73354a3516308fc2587fd3b509953d10647146ece520c7fef34dbf625054849999fd8bd1001a0e463f157642fe6affbcd24e5c0852997acfe48d758f9947d083fffc1e9d8c309977e01ffe252a8e7d2cd9930e9f80948a7e026b55444fd62f9929b36b01272eb1d60ff1e3d1faaa25eecee1a6f91b9c77a7b169e6f6f099e2378ba609824d6f07fef33dbfb00b389a8136acddcb703bb2db95fba33e080da8fdaa6672b77b7bec415e45fa65c8a44b72b5671b7d1adcdc6814b3027002abd43a1a572f173ddfdf4b95cd1c59af87a941afa2d894980a44fba2029d337cef049b300a97180105618c3e15ae124c5d345ca9e2ad98644e9cf4e27ccc0ee361aa9faff3533071770371abc228161b9f9d4218a902ff0c1434f24a842758b28e4695de93ebf6ebbf559a835502db99b914809058613efbe5bd624ebb27a786df593c308eb9e1fc48a8654930d6e943546aa6959340eeb05d86c363745581bcdf72e16a2655780fad9c7062080ca5a4dbd0128ccc3a74c5c631942d62296de0f8f433d00d472fb248a23a622d2cb73aca15530a75b677a8ca4e6300e73bc28fd67d9206a5f77f70c45a31de22af9481a98af683223d5de5d42dae8285d53605d27f8a7272eefdc78b14e51a8b1db3f5f4a16b8b44479de96e6fe536b0ae2f0f877a8ba816a621131762c2bbc8ef9c14261920877e6dbe30137585721a2f13f96fdf241be3b5600ff3d459365eadb378c822b40c12f845664def3dd904c08b5ff64dd2427c85510a9aea272eced0a070557ea49db4afb9d8882d4ce0231b0bafa52724b043ae6a9f9704aae99be0d9b7588d6090d5dc82235cc0510bd7970b65070b89e9db89233b52c4531b4866c59a4bdf7699e91744b32638d8d0a4bd111c965b706396bdf16a6899ce1856cb0ab5a9d5651d80d868249f1742b30cf5a332dd97769227b57bb943056a8549960f85ed0faaa01fa862e401bc2d4792f9385447601b19e0f828847c87b6d683504a779ffec5a627ffcb6e08b806f2b90046dd6e15cc4f64fe7e686fa14180a67242273d2324b43c57184f1e9b6e48f1d3654aac5908c72640e3e1a6e2790825749d014f0d663ecf36dff3bdc6a1bedfbb0a389c8a6ef59767ff6cccbbfbf182efa192302df8ca432768f850da6fb8d55fac03b92a5d7f5acc37862b9e18c1414c0656aaf56adb4aa169c9924716eb6519d1588cc952b8c2f612aa4e297dfbd30221cafa042ae6482d48e3dc8d45cb1172008381e7ed36727e1765cebe8a05caba8a6bb7cab76fce338ce3aa1d5abc7d00b03122f69b6cebbccc3507fddb739acda6c56ec9aefc4f4cbc258587f443da4e76ddfa85dbe0813a87849447c0d9c5c41d44798150004de14d35e95d70f5eba3aae673063d25f5800ff0fe2cf88cde364475827279103c89c6916ffe7f4713b8f2e727082da19b259bf6a02de111368cb2e4f42d58b0adbe9ed463fb6dcbd4e6b54c810c2bf7f483d20224caf91b813ffeff59029d4613e85c5b7fd4cad8b1c588a30b72b67d943338afe674dee020d87f412ba2a55501af85b31e0b25123cddd38740dc6bb6fcac465c8fcbd123a7eeba36e67e0f61f97c8167c90efaecd8883c45abc9aa38806761946b208e3a78eb466d04054a015dc7f5d5fb60baed175d097ab69af086e1fd40e4132374b936369a402ec8d397b12a49aa3fa0f3876bd4e192ebe0ed0673c63ad80235231442892c4ca1493aa9960c03410030233068885b2ad63bee5bc85ad5ccd2e5f7c0303b830f1606fdcb7ef5a936e7aec89c7fdfccbee00c72db5233984eefb6816181c624f3f7728b61de7fa1f8506d52102453bcabb3c3292993e8f8eac3174e6cb9c18897b02c61f136f29401d50c6e3fe87ca19dabf06fbb2fd38e0cf788cd464ab62466fa85201e0af6d5efdffc6b705ec321e13324b4f4689bbe41f7ab7c82a70c9eee112d343cdd051e1eebcde855d9cfa43303d0a789e0aa00164dcfdaa6614d4e99ae851cd22fa5a31b82f15354fbeaaeff7874a5d02a7709e6549666261be0ca062d1d587275412b623ff73af237bca8932b913e6b988b225eb67fbd96097f77900756559230700d8f7d500db21fae37ba77a6dfb0dd6eefdbedec3f5aec71fdd3e7d0c2b603aac00fb58c5a291647c2c1f73618444b9ac8ea657c69f92750c35e291cfe524169f94f831c9eabae01e04614cf669a75875406b7a0dc053ca44e7b558b86fb8c360feb607149de597506b37ac35927edcd07bd4ee9f3e3aed515d7f7bceb1646877a4fd83afa15ab09ac9673b24e8116c46a7aa5c85038f06bbfd08a119936f2e6df0954da1e061548486baa2ce51a7315e2cb56bc5f59a3f08311773a2fe233cc948450cf24042ab970af88938b68a53a072bdc469fea2bec260769970d8c6bb1316d668abab44dc5abee9976c0000f994e28a0e7805f1ab70f1ebba8b0ba1d2d4c1110bd308b010560854757115524bc3e2e3f2fbf1cd2f9b4e3f7efc7dfcaa92b1bb9a723fce6e115103cb4fdfc872b4db9218f9ac7f72cade3a8fca181f6ad84e9fc09137e61f1502bc400e45a996ef365d277a1d4e9b8509a392fdc2513b2b00842336da404aea81487cb72e3fdefd590dc8872c84d2553744329e65db45152f316b6c0f241816386f285284d07365ae6aa226c16841c0d0e315b4e805af1d436f4138bed9b1238df8ece52ea57daf9b3b5e62c4410d503c49e3473317a2cca4064da4cfa83c99eaad6f7a140623648a4aa3401d58618de43e45602e5945a8babe36b72bd9e1feb6545a181e3a8d0be25d1acab5f563fe2e89e205c113c13bee5fa479b8b4cadc59b654c8348be42c0b3d6a07725f3b2b83f46441d48c3d0da6b041f35f801cba3b9b06913e3f504f6db23cff3de0129c4c4570194f0de2a44b7ab22c09870221c4cb177b249ff8fd708338bbffbe10daef45b1971aded78a4685a22c9c0fa2985c0d308ecef305bd7c7a05429e425c6cd6bcccc21d474547fd99b7fc026124a76b2af9d324839e18f95d4c9c04b41fda67726ca241905461da7e99a321c5b1d659eb19510f96ec954ff5b4d2175c80ad0c2e37406c002b6244fbf129e38271ae8e153910757617bce60ae6ebc181a86c2cbad5a387e0f3d2a3da67972ee28bb67273001940694615266489efe86dbe9f2edcefd37b78d3375ee1a2f4ec2b27766dcc177356b8a12978ca46e77666ebce7c5d2dd92e10f41bdfd94b4804a66f77e8e72526a1ab517f4205c5da52b557827d0436bc8af07e058d89099c5e9b8940498dd33b07897e9feddeadd064a22942999bb3847660987ed0bb85f7e2529d5afa86c9b9729c4f12e21aa7d194748a9738e84b3ad9a76a0d103567617812d44b619aaea8c92aed5f88845ae6ca75a108c2b5a7e59d0e1d3ab5c056e20825559de8912b11f47c800e46e36f16eeeb971d9fc86e8da9ddd98d2724fa837ad149d7f632e7fbdada2fa886fe8d6ae81f935e38e9493ae55cc58fcf29fc4bb65fd882f2468b6e658b22b4af9e5de8a059be54f3e2e0f539d20ac713970443a41729254695be727cd982ba298b869affe13f86397adac58d89cfbd5c35b9712d40654859e72910070a77425b8db188ebfe3f7c7378e0b3c9c73dfa13ccc4df3723b3749304734fef6728d5af6c86b94df9e6bf07a599c6d5d57c059e24cc95ab093c2f5cb445381a38befa8cefac350e1a5bd65fc9ae0699fbb36667057a99723828041cbe47d171c5603a5ae0cc0414a9c749e1acc67bfe800ba6d43776f572f99e783beb2024dc55371c82058d2f49ee51a1f7158a2eeaaeab4c4f8167b19593c6152103793944326b286a2698bc9431226508cda12646cbbbe03fadf6d3c250c96237cef9168fa223e67b0d94b6dcb9611d7b9db56bfb2065eb0c81ca65e176cfe7e31349c5a7ee87df1d812a220bcf3752ba4b6b06f0f5cff41dc68c6ed94eff2d8e9c104e725ec09ab949020a08bbcc8a2c9f6dfe0c922183dc43e3f7942082bba12ff7b7da39f69fb52ec375bbc547503963635b393e8420b0c27807f93480198295a60ac6c950777bf8166c0c35d129495df4265e4220540109f2a6f0d120d09b96c44f1d54f7a9716fa2f6e352919fc456c96662e61ca638e2fadc61408a6753f9f98cc92313bd015a101b2865b03913178a232f72a09fbb1338b234cae7661188efcbb17ecb3c928307e3c3b655809c65de65ac2ed6c5f364532f51b55f563f094b13bdac47ad8bb030579c8da9fac80b6d35c162e4a3489ff45ca14919be4445b86dd5f7b09856aa337e9c32d431ffcfe09a5655f2be238ac23f0ad03e268804dcdfe1a52e855a39b761a9ecfdadaa7bdf9d535029a0eaef66e37590f516730d5f74c9ffe8fdff246406ac054cf42fd51145a09bb0d00794874dcbd267176d2aea31754d0787ad35e3778ec3ea90f8a61f9a267eb0d6e041ce87f2debbb0de212520ced7b2accc32dcbc356fff096bb5b0a4cb41513bdfc0e298d4fc1a6a2ebbb748bae412f3c4e4f6db8b50b2e5f2cc6d6c782bba866ad86d885874acccc5c049b122be4fe4fe13dade77b02caef4b1fef91685143feb50145f658d985e0bf88264efab9007e08730cce0d595ebd92d0a538b9786eec9f18126e59107a8692b0b6807f4fde5d3079faeb008142508083983c1a9391c6c835ce5bfc6203345208bc554e1bf05405dcf8bce91d1e3eb0a35909e0355503cce4ca2db750c8608a0ab84bdb9feef8d4f696b22b8f5ade9fba3820ced0113a199fa6721e5f2291b7313ac29c6e12c24a6155794c5a80b6aa22e62f2ae65ec03ae0e3b7960fba5e4616a45824e91436b297a550cff1186d6c87c37378faa63cad32f27cb2c4f81cd325858af9a36bccca2417072b059a596353509c5d8f8005ed10531ff9215453dad87eb98f2f720add711adae1ea7f110b102e083d1764c276f3964fdda767a9c9b9c09259dfcf678929316a89124f1ad048bc559c14dce8e7773c5ad4c99a751c442b73ee56ec694996fb24953f82dd5f577bf2ff2a40ef9af5a5ef730a754c6f01fffcb10751969b44c8977ab4a2df14e6ed7edaaa495d1e19736c4cdc70962e7dbe8b46738755fadd2a41be0427a67d51a147c3275ea7fd3d255fa6c224f8d701f7ae132e065de4baa0a1e3b0a9ba153207ec2d23e96694eb2c48355dfadaf5593be3ab9946e4e557cc36604c718058f2b1da8d1281ff919df8a45d027ac305cdebba8437d1a1794efd8dd83a47afd53e1fa16795a0f96fe02af2a2522d2794ea87a111ac2f0a1d0ac506affc747f065ea1cf510fceda7c3c33c199bf7aaf0f29b015f848d7855d05b33f4c2580a468eef8b2bdf38429631c938f97bcfb9fe125d5a78ca033b995ea38a6512804866969850a22e3495ca10bdabb40dd1890b74968d46344ec0d6402c5ca438668bba458c724045186eab28469d319926a180e1efa0af09968f753f9fb1997c345aa96374f9ef6b0d55a1400d175867f589c3210f9d9d930231dc23a4912c250f3e9bb7f7ee96e93bd31422b92011bf67ca3efca08bf718bb2d75b4e205457d21bef80abe581d07c96f6c94f3c144e8a4eb583a4773a5e1e90ba7ba0214ccca92622924703f6b0ddfb2115f6301d92bd37478a2ae5c8e36b254d9fcabc7a9558ab294cdb6ab6a43a7236c4bb0e8b8d01ced08fe7d4e9c5e418f75438625c4663037a2cd38a501f1464ae31f837eca1fa8df6f145c52b6a3bc44e2573b360544ac78bbeb9d34185ee7afdfa583ccf55f9fd215acf16ec44b4cfc88007102553927fd48f08e6198d3b0dbc9a359d922da294c6290e7acaf9f183dcf06d0929a8bc94fafa5b2336798c95507e2acad3ad66cd7be87e4145de749921f3002edbe83b9f55acfb2b26ef55ba5032a2551239c93fa915890adb76b0680e047ac1ba7692077af3935e695328e5423426cccc774c43e43cc957fa57278917a1479253f85255e18aae4d8c59689e9d1f428260ca527293cab98921046c64c555c0e126c1ef131fce9678fe46a75ec74060168dc79e645e4bd44efde2d1939d9ea16ea187eab78c3bf6513dbf679e57341a1991e36261aa4c93e9df97099e16f8537b52aeb7cbcd4f4866d9382be5d386dadc1ba25122ee29931a447576dcb7df4197c8aae8c83995073a4f3566cdc2a52d0e8978ecf0c07f3c30db229be7f6d006547200f0258799bd4c0e2baaae8b1b7b0179fb988397ca09cdf2130b386a571c31cd45506c0dc9c50ca4af5a00b3566f556b9ed633ea86865227bb275678f0fda058ecac2452a1c90c9125077cc1e2548abcd7488a4f212c6deaaf82baa91a1530936b45b6ecce33cc5221357b3d5bd5120c49420f3c468661c954afed815f1d530b45cfcc328b9fbc662866749c0f6b7bc849653b18530eee424ef167882c50983f00acbcda76675d5baf0d01548972287f6c248689c33053c3f319a1240e69709d206f013b1b153f9129bb9a0d56a3c8a025f289f7339542ece56b32fb71c26cb4397941eaf633d3b52cd4b70d035aacc91b71adf710a83c1b9a788564f2e5ecf2906df740744daa162cfae0f9fc11755891047affe6d39fde86c420f70e6e91f6e9cf89f231cd3362ae90905acd6292ed4b3d797822b1eeb44ed08e2820a6cc3f89e082769b3cfff926284d85e3b885e58e8f11f650cdb92b3710358ed6392c1b157369243d17706838449121cbaddedfff6bdd010d818fb1e425af819b900237f0eab6a183d7352e3957d3a5019d0e4af276431e9577c2c6ea6364a6ed461f14c0a8e3650c06aeb9cde4bd96121084a52c10ecb5951b02f89e6bfd7557b5b31ff94087f532205da94a7d976b79a2e27cf0de224c98d5c0c594a1c26347896ed80f441cc882beb26b5384f99ba4ce9840e5309c69fd427c9c51976c07491bb2cb77260a559a2c4d7e5d8d6cbd2ffe268f7dbab3945eeb970b49df42b7e8f72f78c568e922d513af60ed09692677ac1db72ecee0321a3bb08101cbff1b9396255e7e7f21c6dfef3891769b679e1862de567cffdae9dbbd59ac0dffe998c59344eb06eb5ca7f72979be8e85e05a8ebce8fbecdfec21ffdae2dac2edaac61b590eacf33fe25cc75cf316998b8c024714de05f2c1ac51132efc9bc517bb19f171c322c7ef6b4bccf435582c0e931bddf52e132347841da223f76d88f0830ad45832daf97c4ffb8479a0e1ba71ce0dcff8498202f41bde295473de831aab2f5076be341c5928e26a67c651c967756e7978c0f0f639cc29153af25d47f88bede277d5dc85285ea6fb493606dd5221a4870114ee819b2d74f231e3784c1cbdcd06b60a22d84c79afc39840af6ac46b46552bc5b9499aa8484cf3c7ae03f9a94339dbcba59a4802634fdfa68a0630bada8053540fa2bad51981db2f6d1411e6f70833bae33f9d7177ec79b845141988c785023050117e3c7f3d628b33d0e7ef4ede68385a2cdf5f344610f65f28f16d93cfc2fb093a4736dfdc245ba0eefe3ac138d3c4790660245ed91ff136c96ac1d5ed1004b971c86cb1fa8b2122a2c751d4a420ffde40d2592e1201397a59b83de45973fddf4c5436abf5117c37b0d5bd1fbcba3ae860a866487d6f2f887e9c2a75916936f94e8d3d147861ad6e7d9be508cf1a2625da54e42497a453ef9c792fd0216a5085ecc5d881d0d665258dac520677cb1215326a5b58ed6b371e27c1b6aa85e1cb03abb0a18abaea13fb55699cbf2347af44fd4b244bfb0e59a2c518475b3b7a16f10fb0208573374a5e69661d997e1a5e23af99e7742d182c1be8ef6a78be9dc4ec8d56ce08b62868dd2e246d0bd4adaf4fadb90d6800133ec807b988698bc74544b917029ae0580fe6382703acb38c03178c2b1eae107a0255a5f939c43f8128a7f77386a28e2090180bd069e2b73ffa19cf8293acead707334840e71f2645df64dcfe92b60c2ca9d11dc318544c3404c4fc41f4eadb94cdff630328b0ec9fea29de0aef5c06c6adaff2718767ef02b3b776dbbafe7f4db6f88ac277400ef9c9658f3ad4eafaa92c030e6e4f941c16775fd3c27e4e526c62dd24014b42f9ee0d964500ec19542ea588d61bc96f5ff9d02ca7988750e17b421bd3321d1029e7172ab3ffad3dbfd19a9fee0c9d6027274ebc56c09ebc98e4e522fcf7855e3b6f96c1408990ee7a3c8bb6caa3240d1e29537d55ccfcd80553cc8115a3ec839b01dcc86f212f922fc9e97bd08205dc817a7eee49305a39a32258b4c1d9eb06b52879ceb468e1cf4cf4444db42bbb350d85319d957d1f67feeb1a4c660be97e365dfe42a4d3400c6e661caaca02accd2ef41be9bf15b4c9651891a696bc60408b0ccaa2b4c2d2cfe079e321a699630b42218e814a9cc30492255f51c85df8042fdf7f8d68ea02806fba3830ce72665603a809c2bc64c27ff2bbc3dc6f73192f91208d5135ab67d448a17c5696003f53cff23e4c89202bb213267fb510ae3c295b8a64acaf796b2227ba3011b1d5468b238a6c7d35317731500fe37a4031d987eb7795de3ae6a4f0698ee3e0966424428afb44e3552b3d7445d28f7a72d099d1dd72a1846c757dd5aa7a1841b83f513082af37fd4d7fc7016108d4542cfcc58d8e06183db8a87e3857163db39bb945cb9720b6499291dc5f4e3d6285d3091511899c5a58b3e22e9efbedd4c4b5748a8a34fa5056c923c5f449caba9e0997e1146cbff863c2d4f770056b6de399f387e2e886968365882c46f04b3ceb352bb1fc83eb72ed79d37162000979aebdb8d66c2e7fe97ddc4167edee397a1bfa3710308ba94a645d7024db78628864a536ee8c7320d9a4b1e2015f801ff2aead4c8466c073ef56c23d7a52dae10ad3c4f048da5323d7766aeca0f242591701d2ce76f5eec5e2336c8dea5ea41f814aa1676dcc4af373818bb3af6cc19f87b41f4f70645339c398a1041d5560687c57df1ed5e8d71a2e5488f985157a3da533c751f9489a29f3e4f4125bddac766c79b289199663f2784de700da92d8ce001f8f488a09102103a6fa4b4e6dc4a3c22ee038917b8e26e1fc1a7c185b69bb18c5bbc59b2c71a9635d18116d7c658b2de5dc9fe60ec231ebddb7cdb6d599af6fc4f14bb5292b4da385d207318feb97004cfc417fa68c8df67133683e9814f5659bb43d6095a96834afbc8f232ee351d9c2e3afd6f96995b24511fe38293847aac8692d15e88893a7493c3bbacfc9461ac6174d747dd6037fc7d7d20bff8ff09fd9a49d5da8255a7bd0d57f70e929de63e50bace08a4e31ef7809965291889ac52deb00903b1c2712d51cdcee117195159e3540a3c55ebb61e40bbd8465be90bb53a0e96647d9841cc486d67abf3d14d060289b26a5740a778a62ba1a12ae9cd2d96ada3824f9ebea3d87eebf78d8a804c95a2ef1b12aa9a0d9a30e9bfeb4f9ac2dad359e78d9d91b9ea4a814a4f0f923384e7e8d6eef137e60513d82a08e41c7defc9e01aa15e61166717522ea0272cc3b7a0c62353dc250acd1d9569e770f865bbd75fa3f1a6d7c3352e862ae899f6051615b08aa9350d81dc934904f2bbd9832744fe0be7409bc73ed744c7902e97008a8ecf9458c2965418c01b838f8c65dd1b5ae7d8e9f3542a6859b48bfeaeb8bcf9524ac8c84c698a6beb346f28ac447e805f3f956186aaf59dfeff009be100424daa4aaf619a2d2bbc5bbb5024e41f6b3c9c31c7b6c2472fc40c4daecf8e18996cdef7cf8c768b40f259d9acebfa9ead3959e2f8506fd0e0c5ccc51c037fa7c9403678b3afa62bd0f72db60de5b6684d5dde7daf9755f010888690d29d7a56dbaff9f6e034f3b4e3b21f79fa7ae2265392722875f33b4dc8f482d5580748cdd6a37198e08125cf810b774bfc12447fc5bf5e0bd1ccea8f0ff307bd37a7b1b3c203e48739000423b3ea7c539a15a61cadcceb504b8a2b5fee6d5e70f6e77cb0a8b79bea76175759803777ba5cebcea412a05e1c6b95c4656c48d0151d2e736e8fa6deea1c30e818f1dab0a7cafc84c0fd25029aba557d48916da3d534e35c927fbaf5afb5b27d090dbc6f436db0921875421eefbf3320b065c41fd7c47000c780da2760c905dfd3dcc3fcb5cc70bf5382dff94602957347f1358e44543c27b39beebd26de91d61f66d89e266fa2d21a2ce5dcc50ce440b23ca936436daf98fed7dfff287ebd2a95b4e49fbedfb094147c3a0f9464894d9c4e0661fd96311d513d93358f30f3a2dccdcd45a4a300cdea79c7dadc92ea62ab30365599572a7c54d3f3a7827d9b079db97dd90143fc44432c7485c51f714987e91f5a4038027eaea3e79d2aeb1b217f81daa2fc480ac3c89b2a57769285c9d981abba1ac221eb07b5585eae04dcb82b2cceeabe39941021d0cf9918738da94901c1bb4e7cf08b090f2c333750469448c240f76f9e01f4f5d34c94d24bf3b27e7048a705efd5265abb4d64ed56c27c7f4c17133500b937ecaa8a8dcda11eac21d62ac466a13983a2c1a139f79eb63a78d03d843be524a1af5f70cf30fd765fd93c4e5b9a1c856b8a2712f97eb08b94da599992a7d8aafae6fae5a124e763924fa99cb3c8e81fa6b9f787eea915aa534eec1387a25eb3093981d34ad1e84d0f2b25fc16198b71fcd939e75ea154793f7b9393a95301a7974efe21135e879c9c14b856cab58fe1358ff31c928df5621f0a550142e348ee6cd078b744f44db802b26b9218c37cd918852f0dd29680ccbca23b459879bbf05065f87d25bac10a08ae4598486bd8c06e63f4a266e47e1fdfec4b48f33ee3150bb5855bfdd96bf878b04e50a2d72dfeffd04bc3959e77c24e8f8ff09d5a47c6646927391678d3eb195f8fa36e2c02fb93753a58a8edf11fd2340f26ddf470692529e6ffb6c0824cb2640f77f395e01ef2facc49e7f8769d3283d2d3fa34e468149ccb9526d9ff810c66d7b67a384ed1e306067e9ae88da43823e0dd3d432d29fa6bdde3aeead2f4ef0eed464b3dd47c3041f2e009e4bf9caabd412eee49d3169e3e25d1951b840b22045b11aecdfa859f5597557c1592ed51f8feac556d5c95cabba94825969c306fef29fdeb104955f9e7fdc63aa29000f57d1d41b9d85210448d732ea480a2ca9c785df4492d485405a22d1c8cb4413b5ef3a9d464b23ceed55a8b6d5b041e41724601dd114c80ea8d2b2e3dba732c075303a74c9c22a39745cbf7eb924799fcb9021c9f8c977780572d08130c06d9cd9d552193aa500e735c87c19291749b653953b724ff34b77c2d4ec485c996d0f304901e90d66505eae237f1489fb1aae3b9e2d953b54bc848d536697a3b4a9ae3505da72b678910649e828df7052650de03568a14f505304a178effdca84bbe034963c34ca7e3b84959119f860cfd14bedd58d24f068979ecbdfe8f9259c0c4bdb74b7adbdc9c8401db8b2eddf95b7eec1090baec31002a958d2d1f8496d2357861bcd4c04fdbfdf4ec9943e4176a17ce64a549d4be92ccac51c4ba9aa7a9979b105fdae348c9a98a54e3e583ad5266cda04088edf566e69bcf6a65bcd36c75908cdc932d0e8e122cda101ca2023bf4528e087d201da500c9d0c82ad2634454be9dda0884eb51c04048c8f0295f4c47c3f4a632568076a39e1b8610c49f58be8d0b013fd2253a3a3064b56a000cade9899bc1af75640255827a4b1f7acfd13a659dfa42fd05730862f77d910f5187620d4b02fa661271a1ddb3bf60dc3bd651ae1c6d19eed321b240c8c86e3f760238b6cb101d12d2ea0c178f8bdad32b9089d05101ca8ed76fc030a13f0776c245f5ebe5952060ec952098d6579645e6266d33015f5fc45983bb9c4889669d7e7920165f360937a79b64c950ca9a1cb5c18240f72fdf77a0852beb864f939df3c5429e029de2814c246010c48df03ee089525dfa185391f59e96852339945c6652e2eb9672b32523579dd6fc48a095afa564f3d1c2c2f9a0f586d2e7ee73c422478865e35c820b745da284bea2b007693e406b45d63497e9b4823a9a1738bc6ecdbd74b004591b875ef780d3432a7e587b6f2b1efcb25317001325035be92b910c0780c7123f3da381253403d415e1c285789d24db42157404bffbeb6390fbd42bf1f1ee2d3d5912eeb30615fd7a18f083e3281e1cefc546e511241ad734137f53002feefd59571ace2960d365600a2a9e3933d666be4bd6ce8e08585ede5bdaabbea28f2b9d1f044910a903b5cfa1b8fe00281262b98f6ce5c00f6da095bb2c5cb2b2985f11991886ef496e94d0c4e1cac36e9bb8e77a50522ea22046611bbf8d64c8d340bcae9dae4ea8dcab695bee2b076d390f50f2c93e60273af84a63d9675d4a0677a644dde8b52e15a2a44f2748568db30ffde020d1df08845d597bc31224a2faacd7441e5dad43e0208986d44a3736d361f52d9e3232abc31e954bc5b5413677865897a934bd4f06cd1fe93d5833d05fad40bf888ae17ac2e207bc26783d7045ad3023c6966eba50526e60aa9bd1c3209ae780290075db4852b5b430849fb72bca67d2bcab47ec83577ed4623a9977ded1f157c8bd75381c16a91c2901ef72f285068bd59ad04d6a83582bae5e135561fa662bace869f807d5ebdd5a17b60b62851335578c9146cc7f034fd62fc8c370bc4fe61eaad983d13781dd0bec7ae9437399ba8ba8133d70f2872622d43f2ad5bfb36f662b4e4142e6750684abc6745df69d01b917dd9b1f85ed9ad97600f356ac9aaecc92509a2187cf3f0c7a1f1478b729f2290077c9a1e03c92453c9484bc2b0c8b980865f638c5956fec810f315b5d4475228c6a2dbeaa7cf5ac4f8247cee312ee11b417bd4d45d1806dea1d33cf91f772eee33d313e8cb5ad57d652a2567db3bf80bfed5729b28a59d5dad2829cfb49d1d32c783ce8 +MD = 4f7cc474699e94f2576b1286e583a744c94944d276777d4393a5d478de1dc10e619596afc8ffd242f8ff3fbd395e674e + +Len = 91312 +Msg = 22dbba2b1a39074ddac736767ebdedc37e4208b233e03b349735f9044deb9536e1eaa81350cbb224cb90048db893dd9dfabdd3a272f87402c5e72e8760d46cfbbaea02f5d9a4cbf2188590a7270a2c9653ddeee0084b3f5a94f885e22dd147f436439178beaa9ade4a0da46dd40824d813092313fdc0e4648bd0c7bdbccb6d49dc5d1d4506c76611e88f0687c6760b8bc1ab38e35a3eaa4a32d7bcbf13a8272334a06e03b9e279b37a757f9c053d2ad6e62af6fa26afdb3111762b913c52bdaac7754b5be0e319eb8826d7549a43c9e209ee25fd69fabd43b113dddb3faf77051c427df582b18fe19b0ad6598c7230d7b25f8d972b0799a899189b4422a99c5dbc70cd78a73623be3a894450e3b1a6dc6ae5f56e75beb68851eb2b74ef2776d92d68008d57591caaee0be8e4a8e77419b7e8272a4e075e0a62f65514ae104ba2f991e1db9b02c4cc3ef88bbbe2fee3b724d0e974bfcad756539fe3cc654e64dfa752370b7a19614db2b8f57d99dd39de360504f4cfef6a95ac509b431ec809b9c015c9c4fd873c54d2b3eed3d56cbeb577ef4051865e5feff6704722e0668258cb4160af2b329d0a27523e659f93bc656ef66433ecfffe8bb767ad10b41016e3503ec4730c03cb9738fbacdafe3a7915a3833a440aba8e927a9c96b6a0ae0e82d873bdb9a8e210228d1702dafb493eee9ffc8829e778592bc479c9bbaf28b25fea4a132908b8b2d3af0f060f9da85318e9cb178d8b1fa57f1f6510c9e6664a9f0e2a8d6a336bfad32549811eec4000ba0956af16ff99bbb612c831854f511e6dcc7bf52531e5304a772f3ab2f0f78dfd8807176c4acce3f7260bf599f1cf76efada611010b0c9c602e28fb71b2b64108ed45193874a2656ae19424add4c9994d3811aaa7c8ca863bd19b8a0339666604c0777b2286028838cecc86680128d0b0f62587be70063506e8f2b0118ded42188a0706d187d39589721be2737fd263406d4a72ef0ca8f2e7fc943543b7351d6dd15c82ee7fffd48457ea027556b19a2427e931e2a297050694e9e140be24412a20deb720776d8d52049fac178facbc85ac688d3e3dbdb68c38597cb1aaa4f578fcf56d107505081a01a4a90131aa138a82314eace2014da1704ccd3d849c807fef096b6684af8c05d75fc1da4495e55c33aa3cd39b4b116cc52a9d8d53f32b6680827ac9a953633b0d3abb4bd1547b22473d1e5c6f834b16be5bb4481f933e5638c862e1eed9d3e32b9b61fbdecf1d054451beee679243c6e447da17f06301769d43eb575a292526b9ec799376ee132db44de232895e41a5bd57d7a2cf4bbbef395cdcd3f52ca12b4094ccba9e99a4c11e9b53cfdfd08ddbd3f17290c333b6e89479fffcc8c88e1b48fb221960b819e90ba2d96e71d06e8fae7f748ad503388a34041a7bdae6361d57894357c333bacf02ca3bb745472eead467a6370ca38afca363f6f7346fdf5af7a6f61dcff2cf988b7b4351651b1313cf13cd4070fcf46769005b19dc49d2f9afba04138ddda06f2e1db7e5d936663227e9b44c09f4bdf30c411189dc5e5723072d36e004dd757a7418601aa77e6e7162532204e0742fc71690dfee3c94b5008867522d3dd895e1e4d50699d9dd75f60ab7de0ffc65900c0f548ef102d536b7b9d120a13eb749cd07ba710a773ac1e9a67fb11765ad29e97df4e6393808207123d16ae51163d96663306813877c9b73bf1263c124364287eadaaf6fe515bc554cd0f6a0bec38dd382a0b55f138d4bbcdcd8bcb740e6230edd6db13a12e3528cbe378d7b4bbeac3dec701e94225419eb853984a1c1a713a5df15b443c65c2a3d016cf71ec23e80cb270a6c5bbdb94d28439d8226b0605c74773a7f3109678b919bd9fc302a2a4fa6bdd4675beba42e9d9c6c7fef14f944a42d44dbade3ecbfb016e4645a8c6962f53638d63db4fd056f1a0e43a4f559145d899c905f5dd40cc1faf7f643efe501e1189c82a820ac1ac945ec96ec5b6a13c614a866ee7e05bbeccd797b935b857492ed6a3445389ab5d1a46c406f4f138b0855d125034f68135b19d2bcf4d931022f3c09b2bc03ad1eafbff708d6d83cc24ad47f9445d6e55e3365697e0c6fd1f4e08ee1c4b489ce9c8c1ef6b7c9ffcd01b51a1b7c5d1d65e29f3aa88c83284e92cf6a5a34d5d3e679904acf15efcbaf9071ae0ba5f22ccee9c51ff6ad02098e242158dcc9c8e8dbfbe2caeceaf144c8b7a518b9d7ad090ab9cd9cbba8311c7af201e0cf4a35d1976bab26b3fe767201be7ae18bda36beff9ae0396046b768fa44958b9b80c394001112e78e19275e43ec1790eb75345397d6267f4b4f3df5f76105e0a8331b3b00344094e402ac0f748ba4ad40724fceb8b4c6f5e58b6acc57927a685f2ae5cd7e1d5cb51c82ac8d7de14bc1f29730394c7be82496c1e7f4041f1ca9262fc85361158fd2a061d0e14737325369ad7f9b3a74b692c7bb5b75e450122d66086cd493620174d767bf12b9d481eb0c7be3fd6ae755c9de3f6f58e16c857c887e7a58fb4cd922295b2128ba02611145cb0566c41bf0514516cba4e2bd9c1cf2599ae8811d4065fe07a02c3407fa4e7c638dde305aadb062081661ce8980970e61738a0d1b5dc4be31e2250e2c7329170c226e96eab4709fdcf8978f195875435eae48879059c7d1a28f1b30b9f42b7f8e6c1cde142e18635c1b4f0cb54d3cf817f22ad7c25bf6a022501682f6a7da1cb115f2f0204331154e24912da587769755e837e6fa8cda9179cd1feb2ab2c1563dc2f8b4561a421f7bbe63da302daa87e038779a7f13fa0d6ead3d569f3d6596f91d3513fedcd3e8ab8fcffb9f6761308089f2dc9b19de7dca9879a89b715042aeceb1f35fb06dd8a53fdc783a5f22fafd83b19594c60f475538daca677509c4247d743ec2bf975733779239493a754d1ecfbbabb34114d5d73268a44b72188223d187da6f31d9cd1bdffa271423e291ac15180840b3758d18312b1e8e9006e67372f1b1ae2dbba2261e1b28e340f22e70fcd1928343bbd9dfdb2c217af65956db09baa9c7dbc63e1cddfe25fdb92c8c2f2ded33c31a6d20f6d8729355cd9c3c253eebac0164810ac5c3a907abb71913b45074d24a5f13c923d1055e683c54ff17b88aa1a6f0746ce97926b435623f2cc60c6f565e3b363e2f6eee68fb6c0b077a20a26ffca628cd4fa67d16e3e1283d2c09e5a948d65de6e256349b568548bc151d38004caf2496c0f3b414fc5d5cb0aff0deb2505710290332dfddc0ae9486b258563bdd33f02d0407d595cafd61eb17696259bde7d76f5ca9f818830f76cd17780308f95915fce38ce78393eac1582c1b7a86d9ad3b20b3648533e5d176f90d26484fe6491a692527f3c5a04b045db5af2d21ead2c3a4d10a91162f1c1c725c0a2cf8ed2c87de918200433949b0647ccc8412397df8647e4421a9a817f1a0cccbb7ec562ae5c2f04516e5a60c4fd4471b85410ed760c681ba3fd49aeb7cec2512f111696abb7d0a183d932ebb6815df443a97b1088533a413f27f4bbf45bc2e86e3506e159177a7a17e351a7e848f0ceeabfa6937ef14adf8439204bcd579b0d09492ac52f0178f8be0b3b27f2aaa95c1df537f8c24cf651038f50d0ab38c74970cbd6c4a5ec7897c6cf53ee3e2ce4467de8b3b30aece9404dc90aed0675b3f8454baf62465ef5f1c29e306d53563df85b088e54b1577027b344b2f377a50dc3f737292098df5d7151f66527ba9d12fc65e34c504df34761e4a0fd76673d2116f71cc88215d42ba0c566469fdc880fccfee762384966cba9525c2f085da48a8bc57af1f935d3ecfacd7c694841ad80e4b6b3546f3c1869487cd4ec0be381c67d02c05a0881551e09aa9751b3826422ce0da5b7778e9eccd9c4b99903714b51750f8b553270ee4b381d45846407424203645cffe3b95052d7da68da718f67b80e7c3a78099cf5d120761565cc48ce7b0f6b37923654d397bd2e6114f8a66d6693b96c36f05e026c3d45759a7eef7f4a5c82d412e1e9af08142140cceb5ed2e9bf478f16894caa58e91be486de43cb2c653ba0f668d0292057636686dc012ebdfbb7219b26e14443de69e0af7cee388dd4062cb14db0f87d016570c74d35e75fb388b2396ba466a967a00898dd574e0b0362d5d802f4938aac97ce02b185835b712cbf75ca1e97e63f6ebac7721782109de24adf2b2370b5a37afccd9b48891ddf13a7d4c4a84ea6a01685bfcd977b2aee04ea4b28c6169aa09f7b8c8d276f2337fe19eaddd9f1574447e7e6525f7fd67e3b42807e44fbb60e75d8c3e98abc18361c740c984c267486735fefa2e8269fe8f5c223be28a674578e730842eae649342f44ce6657648b01195c1031c9f5e398e507b94b099d721659f8ce2bd07452bc871ab4da8422072eaa7b0c817d744e28598195b730471bc558d899f6d3fca159b45434676af57579b72b39146b084bf1f3ae6d756549fddf1b80d0565dd5d186478fe18f7445527ccfeb3a5d1b484990240c9527e10c84ee128015ace6965fbcb13c30d528983aa2454964de16bad37d6b1a91216c053d5cce54ee7cf6b4a87771d796bb00647a74c7b46d19e5c67634496706044ecaa3b5bf8daf4916c7384119e0a7b38440ae8ec7ba9792f0f1be3f3f60584301d344735688fc93cf44aba409f5d8513ca3533ab5da98cbc0c2f808dd950c604da59c3023d54adf78936f0ad265ad168202e5131282d546fdc0d02b748396ee5ac81756c7f10eaeab59ff0003ee9a660cf5f0a27e41c176e061b311b49a8c3fd1a14271937adc63effed80e0ecf24e235e2e25359a601ee112c3d561e7850e74ac7a9fb16d128a1bef8969f53a5d0fd855056c0251e0b1f1886cb53127b89772ea1ca6dd27277da80ed972e82f1232a73d4ba537118418c5f17d9a311329a61e5d6003456fd4e90ee3466561d3fafeb99c68997be2349a87d5604c0cb2c183a08caf80904c011474f73909072ffbbd36fdc41077cdd8805cba7c93680c667621ff72e366c7964703d01825834afeb546e5c7d2d3d958136e2a3937ee2a01c6c93f0ff571e67bcae3f84c827c2dec300fded9a6360f9c98e5acffff45137bbcbfd3f07e56b399e53bf73ee89bdeab74bc6f625548758d5ae9c936b415cfbaa02c437b46c036d6e03353551e886725c97321caa8b21611a0a007461e0867a8ba37181a1455761b02f596f8eeeacf40795c7a79641cf711b135f19805c4e22c5109d934b1bd7b5195a647911e6a1fe6cba104d7542d2276d6ce0c9231f1482daec90e30e6a14d5edf71ef8777af5efe0667474d3f8e9e265794e29d6a38a2951aa0407879a9f52c297c1542c162947073d9ca41ece7730b7caefa227741f74bdbb6f673327c7aa1baef412ac42aca245a1c151c24dfaa0c8d44dc8721b34f373932b889dbc3e4a7dcf3fca747b00701035bb047af1e4910d18011363036b2417e3c0e223a253b25d5b0cc21149b53f1b5bc2428554d5b01918820956c742951f0fe81a6194b8802ee4d3c00f194b6dcb967f729de14e5c61584910e9c12bb4fd99d987d3edcd3286ff2d1aca74339a85885b4b1111af147a59ded078abb71237f44dc107181227ea0c9158dfe4fe33ed73ee027b708866c89fabaeafc1551b52b19d3c57ce27fecc8f78f0bbd61bd8681b905f59885ad1d08c5831ebbc866ed2444070526a6f15a31a7c78fae20cd689d1faa827c3a6d426b23cd0b8f7db5b4b4ee0039367681b021ff467f97351dcd729758362bcecec3fb3e22193fdc48f0213f44c775f935d6e12793454147b59b494a96796cead888fd3e09b0958c268bb45e5d19abd817b5b948364774ff9bbc6a60ecb309369479bc4b0b385736576bb574d3959fba2f33f08ab8eff705d9161d00e24cc859097f7f8baf194e81e47a6ca82ca51b488339d014a0a494007793aa5201ac72fc3f808d297dbb4216d49e2023f2b0e52a1eb09f0f76cd11987b1a587fd03ccfc63f652f4bfd87fb9c2fc11b0cac1ec607057ea6a2c3d43776ef9271afd862a6601017ad1ab8e340bcfdcaa38ce3568687428d2df60d20ce42dae53b099f87c071ba7d4fbd3538da1e47a101cb1ec2ed53dbc37c32df199ea345faffb6af14e6a2467e5d5cfcef9269152e7df0e5c9c313db0ada7fbe276e4237b904de906fde9bbb041e21966e2e456d595e24c0d3cf6e4749910534b208c7b80a94a7c802700321f6db328a1f765c590aee8e3848da0d2968e7ebc82232d9d0d5f53ce1346683813bdcb760693453e0297357d491ac98884e255a03dfb520880270c3636c87c2e2bd69d9a1b32ed50a9e36a61d140db66de592796b515946e7794d65d4149a694c63cabfd4672d88e0517fa49a3ac50fdf1478718ae1e5f0f623d449be93681fc715469381ecf914692a9678d36b9b4ce6c31d69e8f523c8bce64d98a851b98d5cbb267a30aa5a22ae12c24c501059158adaca8a0bf7d97641abff791bb6545a123eb39e6a09185ab5ef4c459a8fc511d442c7fc7d4dd0a28d5b33159e2a032ff2843227b671fa6388ab7c8d3852a8e9cbe15ce6c661d0f3a9dc3193b9158cb40276ee3d9d4acae62f2c9a4cb2bfc94578a0d1706c99a1119c18411cf4dfb8904cfc2e06a6fc4e8ab05ceea99140f2cbe1676dc4f95f0aa56ef5abd8d8f04f6cd8ff39ad59ef4ff81521c0cd5b3ce926101f7a07f51ad457275db6eeecb019efac6558583e8b94d7666557e09b1b77fc0dae3e64e631c7ced037ab87b888dec2d218d330de39e7d0a90ffc09d64464f6defe0201560eabb3716bd2cac5de658c52fef25cc05f0e8be807f770962178bb8df60d06cc1848ad10e073e09a1b77f63201fd046c67d2af2a35903e62197bf4227da99cd1b76665b780d6f0c0a8dca87c083b526bb7fbe478810f9bc3943448a37d1cebec53cc826d324323bdeb5c4938faf56c44b951d4d9d3bbae40fa6c601addaf1aa55443ad3bde01a11b4ebe816cc1737a7fd39c255513dda061b4ebe38e85aa518423938e276c59916138ccfa2244fda5a56fa37ff429bd98ae28797a085c55ba122684cc3cc5931b18114c59616bdb143df42f8bbffda3bfb0bfdecd8f4cf77ad6c6dd107fcff769c7400749321e54f1cfca08f0bd77d73deee1e1832b3ddabc586b6801fa73cca0f62fc5709b45b161e359f657f680a039f0f74c44e41544a6217eeb48b49a5ceb2e454e76a7c83b8e0208c16873fe48db3f67e5bac3bd7e60b8652f8cb52aed70f5ea69045b8f37a0b34130ca3bdb154d629b758bcf1dd013a58afc76060dc857d686e0c2c183f0bf7f6c0c2656fd50b4e1f9c35f111d81e771531aaeae2935c956817957e08aad11edef1d23cd4e403b45eb99df8fa6db03a32a50dbb5687beeff44fd6cc08db5c185332b6aa7b42f0715d8bdb2539e2490c37667a524b0e4ed583533a86a7551f5cfa0fea2ec196343d928f88165efa5b55a9f28b602ebb6eee9bde5b4e528c9d6549f5d74a56425151a4212f4cb7fa69bef0d58b357003a1b3b45d9373990658b9b961288d97dbda55e90d3b28f386f690a27c2472bd7b89ad533d8da6f946d3c2ceee385904c731c30790364b900474833572d18875878933ff0aa458e1b281390109914d2b88fa2156569b14fc17860f30560ce726bc12f02e5171f9e0fdf354e62fcdca8ab585e97bcce425b6248d8d1972412f5f8dd95a579e710a857dacdee4ed386190d17793de7fabee4cb00d95676418c17e712efb013e1c2b2db6101f93be8b92ec4151b8f4cb5cef3e4e78a080a7fe3e020a962ac1dcfdac783bcf9f691011eeeb9976a1654c71a8f95471472bba6bf588be91820fe7703ec3732de6db7e75c61d4e8915967f749c0c6669e19f27dca88111c39941ea1e32bdf0cd8e617621c8ffe4fb6e1ee0e048e5f8e518715cda9779888ec90e517228b63930eea183906811d1302344fd5f202480555438e5e072d09775a9dbba06915ab0ca9002236c13e1a7d9cdcf411bc236913d1d5c3f88ab34d2fab42080360cf9fc2d0b19d1ff6ceded5ac61438d09faaa02edc61e63da104af906083409aec328fcac84f1bd4c3a50635c49a610828df418d39c0566a04cea1c9376a77afbf92c01650187d86c89576ed21e8461cfe62d9fa8e2e2cb847014e27c14c91ef177941a22b0c538fdc3dd4036674549970d3fdd971d1c582d83b091e66a03bc3647498f0b1a14a4a8f1c91fb1ad50908208101bc5d71bd6448da572fb01bb1e727132a84ac6dde5151903546b770ffe3ae18aa05d97470c7097ddcde3605a0a4efb36ad043c86c3eb4672268b4de95a64a094b685e608c45aa73feac60f494971ef3fe564057906d37d00df39b7466eab4b15a3654bc6c4aac8b310cb97efa3855434998fa81c7674c894c69f3e8e00b4ecf7b0274ee9d507ff21881a7fb3df2f33fc11b0add9db772e1622e2692ad92a8a2125f077d9bf1956719bdc4fffc719938195ed9d17fc83b86f3c2dc180c1b32e7b4aeb4ffe4a89d48b8e39903a21eb7caa6d6eff3da2416c855ca6cdf980f7dfed663d5dc13eff8158ac58c9cbb64cf75fe05c5bb595585441c97515fddda0a55fc3112988622266be3c62821c4ee50a8837df3ae69d71788bcdc321f5a15388b9a78d3cbc7f9b8aa6857e4394b15ec00ebb1e22388234de4caeb87a4794ba91e35bd91dc65d11f6f9d0d5959ba65e1ed7b1429e130b48906ab57ba75d7e7dc7c5271e540cc42db09d658fff99f68d2ecc647233df025696cf2a35309e2744334852846af87c97c27c8cd30af66995f7d51bd76b042d05f661550d9e7157b6db522632e6f14cf6337d8dc93c1bc71b81db1d99cdea54feba0a7d2c7740d57bc9cce951505efef30c87af9a206ed8cad5c4b3dfe1fa41e9eab1ecb946726a3c059fe40831a9583554843c6e3b586447fa7a25d1309abb6d8c3ee8dd906fdea195b15f8010392365135b7a6c1742323df8e3bb9941338932aa98bac0df9ef95183eca2e07576262a52f4b2bd3b920b52d8e9bd5c9c2e74e14ba9aa89ba6982f5d737f451e8c82b2d18372b882fb2b72ea1737245caf144227858ff61aa37433497799ffbf297f8156d0c2ff67c08fe7a5b68237952e6c19c388d036f367102b7cd9ce9051a4b578b595b042fa9fea8de0eb21823bc74b2f89330fcdce67d882580871b98e94c0d37e50cf35a3efa7c01c33899699102e1dd912a33cf42c49d27b9227cdbe603e5c0180744a0c366438c82e2ee7358fa14f43b61f071d3ae08657f5556f799d6a6cffb343f28c1a9c52651985e6a99c314e598be7be920a49386da08ef138a2e170b947b2c1bc02bca783a423276ddc5a957b0291b60b10c0433d22391584274021dedc552a046541a2a44c8b3beaa689af28c8b19fe0f4f2413708e82ee480e2dac0ef8fae0dd8c7ce37712266b8b14b15f33cabdeac1d6bbcfbb320afc24666061fdfe6c020c3bba4bdc09d6a40531b446add04f4d4f08910ebcf573aa5fe265e4c4bdf02f5cc99a0b7a930a92a2276c4e0383174e424c6d7979c0032280ec03dc6b1fce8f539ee5cb5a99095de95ea1203ccd5d16210c19b7fc7c04890feb01f1f80b4d497b22623282041c2c623f1b64609568cc74af5b714d0fbc0a944728cc7568b6865cbedbe9fcba8b279630a1c178c38199c49dfc4f726374ca98674015e920516d7cd81698d0a59e780c9afddf8b3ef0a5973dc4f8755e73f4a3b511735d1a662765dadde604ac9d444ce6f567a1f0fd1778f97a155dea03ae3b98628fd83e3ddb9f2af67ba2b6cfb6df7a5201c2c0f018ec38e84d33ee6a20ea78fc1162741eb2b0322900b1ad7df34cc0db54f79610cf7d63d449fe51f17437bea8a003a450d42258401d3a78ef261b1e5a09475aa665b2e007b1c6fde0cfaad02ce4c4b61c687d06017944ff6d75d5fe95c7bbf4fa011318492c94d97f5bcc175087ac92ca9647a336bdd72a3f0801c756375a4d54cc297361626fcd154024fbde2ec421a2880a97a590fbe1ac0827e163012c4bfcee7b5a19fc5fc1eca63be59c831349eb634d49179bb90cfd9dd0b484cc39d7398e923337a26c9d4ab4973b542ea1f3ef529923538618937bee83a883408ada55d4f46784fb9f497892c266ccd77608f47b758c23f8215e6b24c8252706263a96e92b5fc8b0ffaebe6944cfcd259b6e430669ec4d99db551866279337c615e145f5bf82cb6894b26361a3dd1ec0170f241cfdac9a124e61c9dd295a7c2760b5a91f363754cc673eb1a169f78951f2d1dee5ba32d20b8268c5b155e2bed20ea00c901ae82d847f3bee521d87d480349ebb8827e7bd2b805355093393c46f2789b470f2fc1c37e58f639b48f4c8f4e65d012dcd33221b4f0bc10d4cd658a5b457eae647dbea8d9f2458a571a62d5610f6f9fe327fcb83f77751e72711401cbbf4f61aa0ed5f30b7e015972005cb4db850eb20e0317e09817e4dbc4dae457d47472035859942c534ade19ade796982e8551fbe5fb30458f40afcb744132f705d38b05f7e4a5df71f7206d6316ad19ca7ecdcfe356b25165802a7fd96aac69c07afedbf1465766b7f17ca72a440c944fefd6c08ecc3a8ecb54d96b9cad9d2aa4c94217ece5356cc5c837697bc631a22f37115050c21578114d51111690a1a4135cf92c3357cc5c0bfa0516c033b8cdd912e201d1beff87e7c81602dfaa4670ac84988b7cf488aefaf55a51a0031e61edd1dd577a394548af639ca36050f81ad0fe84d8227206f03348ab8c83babf28ce1267b3c2b78334e89e5985413b230d11295284bc26a3aa15627d49f3d1276d0a4325b933c035d713d6e13aeabf73c1ed839603a2a8fb4731e153fc78dcf3b912e27bea55d9d999c1aba806d55456c3e69ba3e79e6f8a521933a4167b348097888efea9a16aeb07729b22ab8990589d6cd020a2d7e0cd553bd7f24a738e7a72db9702899ef9e6ba9713e58b8009d5b910cf70c817a320bb0a5cc2eb0a313df57c994bfca71d590dbfa4751951176aa142f838b9b63d411e0520aa9aa7c33779ec141f95623bce7b4cdb35e7655f83e0a3e8dd1a3c159ad8ccc1fdbbd4cb138aca8611c658db93addf16cc783528bdf193ffc24c21a29a85c1cf50d0f99f4ea2686db711e38354ffd6e58d4e6929854e93cbacd1ff8acc9f7497386cbee6455b7639740aaab99efbd4d61cdc49d8566233cae13e4e24ada065b809017d0694005487dd1316e4be2c5956ef948f9bcdd6f48c04036616ba1305b06711bc96b75b83c756bda0ab5f0bc4e66a19730a3817467d89b3ffc77e81e50ec720160d2ba79486757cd063de14b81330ddccaa419dba1de6b273bd67577421adbee1e06d8f0733bde33ea4d7c1935bc853d4d266f4bfebaf916a6f010e43a77f40c896f97c4c5d946343f4c8acf72e951e24391496d87558d33c62d830d3eed04832b76be9d4629d7f78ca2d31440a2b8f4334c70e943956ea622f695995963557b8c811725ff14dba559b61f91a8cf039ba6c1ac663b63e69842b10d3190c22d1b32fa6801f78098652ff236edb1587bfe2357c48c75a83b31afc8b47cedf0d58ba7477adc3657576094bde0d16425654632768205fb4ab698f0a1522377d695f473d2155cc57f60bd137fe4e5c71f0c9a5b86ac76d5339ff68da6afcd365cb47e1c010029abe2fba531a10bd0e52cb72327ef0b8a09493e720f3d9223336b7c502c3e05ecf066704078891d3bc335ad091d1a67e7a176da35fdd0c4cc75e933932bf0ea4d9df506b56fa0e2cd6b233773c66d8835a4a0bd66dfc60e7104c0226e9f7e78f3b976072d9e4e212fe4dc9d89a851351d1bb12d2e3e8736bae9d6910a125277874cd0b9cf8efca408364a27754d2f38460d9073b5a07b044e2b15c88e0bd3afb05fed65c4c61031016a541d5c3d6d575a8225d722900a42d6d2630e231369e817f8b45233cef491c286e1c669fe755bfe8358a09d939cb6f9e7aaadf1b17ce964220dca452f0e8cf295db6bc11aad0bdc161118503399296071d1eb1f6d747b3ee2e0132270c8e9399c29548f197f319c46388561f76964b378c011d6cfba664d421576f119897241a5b3c9f9815293e618b530f867742c99055f663d60b4723a49953bdbb3b8edafb7611227dc8dfb609670613e0c224cba1e96347da7cb66adff46aa07c5bf232edb1b7642b19a2fb5c752605a6ddc8abfce4dc1bd2c670c4d6d110b9dd705dc6418c93e7289e0f78bb34174751308b0501a6c572678f12ac39adea5c771f2dff97653b3deebc71d8b6326e6b7841084140cdb3ce012cf89b68f96c1ab1ceef696fda11aaf5fb7675cdeeafe474a5acfb4ab82b812826bf1cf521fa7715f61e7e3b69bbe0c6d189fa62c73044eed5058d7ff4915e4512c2ab6ed639f42c3b37b87a82ae61e9e528b1356ab40f3f358e9261119997f0679fb126749f146cf4c7a2bdb34d90d79cdf4496379fa5fe6dc4849e8d88e0b29bc2d8cc9b8e4a40b95ac7658a2e00087f2a1f05bc479b94d433ee78c703aaf435c88cb1a9ac185fff4d911265d431f4e275cb14776062ab1f593a806c7e694dbc1d47862d6d01034d2c8a34d4c4a9358d5eb342e76e9da995a0f365dc7d9e27953d93aaa54596e319842d5d6563d842d65172018ac6af08dda7a3699575dc0a57a5fbaf9fca4c67eac0f4fc8656319533da81d0d00d19515dd9b53c35eb856e89e2d9f57b6f941a478f7b82b60057b54c766d5165a65f0bacb3b33e2c633cdc9270c92cc6a9f072a62c2b8082e6bd2b86a19ed3aa26f2a030c227efe76164dd17dc43b6100df3f98d437f966b9dd45058d881082c0376a790818dd2056a9fd86081d411d60011177351f204de8a3fcc59a7ce4f49c05d9a227e5f74e4e34067230df4d09724da64ded42d8c5a304207ff8bd119b1f219f09d250769246fe901d5ed1062b1f0a26a56468c7d7d249d9bc0f13407c2fd2e3336f23fff42650c20ef8bc158d4d82b9040159958a5ebb4e03474619a1b562cdaa68243d7bd672c4cd68682137e5fb85f42edcebe72d9fa8dc081d43119a1786f5231cd52f3eacbfe2149dd32fd0beb5fc53bb71f428400ecfba6167d4c43a369c0ad272184746dbd66623d37ff4136fa5d6bccebb37e5a965c5da2cf31d1204278310ba3fd7873f2fc4c1c82f3b41db7520a8aa4443d5a12591503b758ce9191ff89c55abd7b8147898415a458c9223f69946af9532591d98868b3b62f8059d0cd03fec6430218136496932cbce4c6cb0a96083b8eeb945440d52d5c24bafb77473c12773c80aaff33f02f8c8ebb8e12ab9bcceb55d3d42b38c6fb19e6c2f8fe149eaaddf89bbc536e2d35445ca1ea7ec2f243992692d3c6d6da876fd43cd4edaba8227b05a7bec889aa6ec4953c6e97e755d6b59f9d05af816c6cce8b8d11ce82e503cef22944c70cf416bdc6ef7cd69f1320d12f46fc5def1915d66b38220910d1d95a3cb4c0c76e96d770603fb7b340d6ac7c34452a5a764d0ce7f1c2a8360bfb1d9d43cec552250f2b8d0fa181c6730cc4076d0c121d9d94dca3bdb0f6cdaacd4b18a5dbb4efd6c98d8413b97d88ac1222132800461feb7cef7a3d87904893c4ec5ce1603208ea6277c62afc0d6262a3211003c628e9d661cfdbefcb273f4d8e6bca74f0af25d64664e393cda3fc2d2c5b9e7ec25d03f4eff85952d01e0a3e6663f1ef01aedf30f1ef6d1cb2f3ae721a2c1ef78934e6bd73e372e54ad731fd094f53ae17938d710171c2f4505f01c7f93d020c8f531a969a3ba935aff56effc3887030a6ffd91cd19675d90a589e9545e8e83c592a0816cf4b7cc253fae9bd41c9c81544661aab0ec7f6296572cd608cca51f55b4c47c48fad5df9fb5a6acbe07ddbda5448ea920570d463d62016c03a5bafc61a1c521657dbdd6afa863a924c0f1bee7b3ac168524b9116f103132aeb17823d2a2caf92b4516b83c62101a6d10828c00d9e27a46192acc13a7e4b16fb7849b8efffb8b0319898e3029d38701bf3530daff595ccdff097f1170416faf81896c7f00815f53c2be5f7246d4794895b4b15b6c3944819dfd3051b371f6d7d52d9f8ced84fd84095c33ea013c78aa5aa7176d6aa9bacabdafe9bab89cce4d7c183b9c0d2beeffb40c1380a1330a8fd5b56bf73fd1471025c6b136c6e87d7b3ef34899a99fb92b8b75051c70e0b95fcf87b4e034da72bb9eeb91ad26808dc7e266cf6a0908e66f584014a6b46c0c8210c5fa1291ecc433f0c68f05218a869b3218d6f7758dfd35e1144506b6ff8b60601645749e2ec4e1e3feb627fd2fee5ef4b26828355687e4ef9aa224bebfbf6187229eeea3c9fa2b3f3c0bfb02964f78f1db8ae5908c0ce34a7932e813d72fee4c920c68e7e5ee7acb2798697ae83051f13c4616d057129cba5afd3bff6d646d780e98cab3a829375068645aab4c1a51bc7da3a33bde237607e50c03c8aae448d33d49fc4f3d32c896a677b4deeb94e01945aa741a4ac6d9f8c1662ab7b539e525c827e703ca9197658ada615cec2666d13c6171b4c2842d5797139614b7eaae36563a711778cf0a85bc94476a78584bac0bd283536fe3dbea0e1c3127d78009ce908b83d26e738bbde3ad5053b7b3f7725a05903d796d497acf88e1373e8260b41e21067dd50581d7a72e635dd0bed2ebd00081bb07aae0ce815f908e13781ab1a704e060d40d5499b21e67d2ec0145df16cd3f15412108b0cdaa25727feb9f8dd33dfbc394146bcca98546f83205b615d474b193505a2ae65b70882caa6257104cd33dee3ca13038376be718cb518e56b1fbbe7d5cddac39d2b9a104bb65aa01b7ce9028f53d0aa402d93279de6e366a556c501a8c33f871db8d5841da7c002abf37dbbbe76f61d9b2d60f6594e2141969ce4eb309e374561df5952d3130c1510a1506ed39bf9ea0f06b66221537922b952a9f90fb758aaf41f8400ee508553f4070f80714b527bf649f1ff988f4176780872df98971a146ee9f412d218d24bc0a509b509fda65feb57a223215a20a96d3eddf36db6020e1cdf180d20b45979010bed61203b5c0278b045715e6c8d58035659d8e1aca714985f6e545cbba1482f9c1919367cfa1009046a7ea20eedfed4ff54f4b6e35fb46bfb659cd8a74045b6d62b41df4ae6e536a47f8f8ee9d90a5c9a8ddb3fe2b26a0233ac2b370fad0e316a828f6d1dc91e6c10f3488765b506f4a83300ff3335a1e58890a40a4d3dee2999bd36628e170813ea741e2e0b387157a902ea674d6ff8907ab17b94f8a9820a1439eb71e4375ee8816094e552a9d5d02d6c0c2aa9a7da9d7a9d36998a46564d4a9712fdd8c06f448647214fd4afa108a5dcfa9bd0a3d46718a2497a8abac78dad435188d438d5a269a667bff9a07f6b92e41a4d4aba5287c56f48aa627d7225cccd0b855f171e9c9bfcccc83a22ad6385000fb17071e16a1152a8bbb9e4d2b029a2c585e1d1a69dadb8b50b3ebcc79aecbf2f6afa511da88d0aee20f9a765b7345303fd04ff0a200f78d4cb5fc56a8c4a801ddc40de43ad88f68d7c9a2ba7958d5c3b7d2105b5be419b90bb15d2e2922ee14f77dc801ff3a5840b2123f814f5853cf068ce6c35e2e4cf7d4d097bec46fa5128d035dcef155351eba11f733a31cc63b75275c907185952fee39316d4354d5e5e77e54b5d7d22dea38ef55383e4b36ef4ccbf72a5d91fe49a216b3a26c7887744d15361c7a58488c74d3def8e88eabd2d39f41f9e9fb8e2e388ca6c70984c3a707f0896da3908fecb6e61cdc688d2ece52ccc166df6b4dc4f8c59143e01f8f665c38d80f182109f2464f964a88efc6ca1079ffd7058844f429e9fc7ebaf2f5999615a86aa2b5bf876b37d4ab0e5d7caf56cf84b525fb7aa7151f6fe05ea4fc28fbae83e608f1b7916fc65f68c37e57636cf6d769056bf7c3029073d196deacfbd42cf0eb147ffbf99823bee76ffb5fcf9a1580596e81c43139648fb928480efb68b678e18c0793a82f777992da7b9cdb285508ef27e5e8da02c24c00dd89290e0175a130393085857be919d0cba717705dddf692fa3e6ba5a4d2310e7d4a061de591f640e3a3db77c6a225080c27d77482d6d2a9ad355679 +MD = d0db3925fd16e5d96a41eaf6afd702d62f52855a84e3eef742edda22b0b1829e0f1f13669454bb06d72fe133a65eba6f + +Len = 92104 +Msg = 492bb3c8f1ec825b71fce8a753486d26f34fde793fd93ababce5d00ecae3a17928230bf7ba8ea9c88a94750b0e652f8ea96403e573d866b93de54163d0bc51b9760ecd28bcc64a0475f7dd1b02137f90d15fb5e724a3705c14263179d5d972e73bd342857dfd2fb73a0f6801b9bb23d475273da7d9a1204a488fea7760a4ccab805aaf33879c1e8adfc260e2bbc3e4019ca6e34e1a3a402ce107b386fa8426ab4c8b5f5d6209e0246efa0be98e958abf4fc3ee0470d696a9e878d3ce29e14992a74e992994ae3d2fee9eb33bbc97ddb89566a8f061ddec6a64c993767824fe06998ba4bfa7f2fc5068969e03cd33a5917677573b77b708165de23ba76cb30baf2b2ac948233ce731e3ca146747d0a9f5fadf440c3acdb256dbab13888ff73837641350ec8ef6c47a67225f8fb4d5b28a2a84b78c3185b4d2e70c624268584f434d2e81d272875cd3fd86c6a49bac88f80d4ff7e3e448d53188ed72fc7f3f167eec64a323565777e2abde90ce85bcf3e8ab284e38db7fdc1cc73689df5d12578d4b9b0006c3cedd527b120634f96dbb020df802b39f90923aaacff013893ad81b72bcdea4405455c9750a70ff7f27a7ed3aa55c7eb7e5bf343ca0efbf8b2062ce67b086255551a8efa0ae16569f5280523a19a4beabe42bb18291cd0bec2bbc4e345d40b08a2d9e6e04e73f62e2560ed8163a229e04f79d5a868bd42033c2b044e1ad546d6850ffeba99b344bcf9c1928d5f21e444985ded74f744a26e84f0458748709857622931198b33e38ef8a69e97f28dfd802f6b7cfe536784494398131f7d2a8203c0c2285d818a351c889c5c41dc4ae83b7b1edea51b7a6a3bee8ef7871787965437473f271b0abc0e402f761b6add36cf1204bd19ae11c6beec416d4eb60c47d12c34ffe6c65a0aacb5bc56752cd96bd37aa982cc89a21c3ac35bdee6c72d19032627e51d01ec83a03fef87ff90b3e9b12b79ba2e4ccfed381a3ae6dfc96e7c529b7c894a5c36d9516515850b44f153009af1ddcf45efcc4f476affaa3b45044812cf56ff33bd5e68cbeac838a8161a4a4fbe682033861be8e16893d6ab45236c128cc89c3704853ebabbebf848a6b1f6b01be3b164275e8d5eb04dd587e36c37213168b1c491004bd8254ada9507bc8e72a6daf3764826b535ee78376fb44121b549b1c07ae742289aa37f401bcd9c79fdeba876d86ce6f90d5fcd6cb11c34c445523e58b87bbd5d88b2f3d94b6cc451b866f6bc190a21b13b9097f5fa9fd98767d768eb0bc2e44318d03306b279d6ae4885202396a46976473d7253aac381f37345bbe7e3615981c187d748df5955d814e2cf5e0fc020c0b692e716500bd0812e29c1dfedbb8f8219463b2020afa477a3ec4ebbb2f1ea29005d50be78fd47c8cefff5437945e8dc9697e91d34c144f58c2e48dd4e9e1807cae969ac83fc4a32fc44d0b314a507f9bff96ba07a52d9ea2415283321395cf57cb37c610fad7a482c74de9f5e3d7f520bf73d4a6fc8b5be023d774dd9680b6a7c68139c8a753a80d61c9978a493917de0fdc88b93877af9bcf3b09de58ea5ef6063c98f82e81d659fa87bdf862be0e5f589a7e464339c259af46e93c431deecbf3308ea677a957edfb51024818b0022b03765d580419bba52ac0bcff3e608faff524c1dc69135251caed0e8151551ac87635cef4635fc204a8702c3030fa692974e2d9a1ee06f00ed1238aabf7f77fc01ba2782448520100911fdfd50334a3c1d8307ffeedcc59ab77bd1ecff1dc599b598404ef9b3b9d204e957df99e5666ff89d75bf94fabb4b0238171f4274ccfdf97a2195e4462c1ec459aafa1e9a8d96cf09f149dfaec29a63f392c22819109163fc560772c0f93eddff61dd7cc71258f734f52efd7d6e21432abf661e7f230c7b8b58044398a3baa84706ea22ffb71f07bb1bff9ceb3048264a078ba41b66c7b6a3a22cd541ae2ac9dd24a0bfa8ce618718b01c2c8c9ba783ddf5a347726e4b9bd1cee196609b07990e25b18156dac8ebba6c052ab622a7f253243d8718ac10919228b30559dcc9bc76946d368e6eadac3caa5b261c47c1e845fdbad182a2af3e616a21a0b1f5f9aa82eb644dc3ec885efbe57e9d037d9dec22fcbbb524d48008cbedadf6ed690fc9dfb517257bf6f16a94c7fffe2056946476abb0a083c43b773e2dc88680c884b0d96bf65c2af0715583ac5fd7d7453de7bd852a3234042a1034c501de0076e0e60c8a9250657b70b6351d0ea8bcec02ec740398d899f6d44a5c3dca4bd116bcefd59b7bb09ffa87f345949cef359d7bf916c18d024a1ed2abf0e2b27e970a7124e11902eb5ef02f9321ad7b19d5ec11842229675da90eadbbbf6e3ad4b6c4962bab8dd86f16eec01c55c239c7124a5c1432b5b8295b28bdeff43ad3fcb4f7a46a91545cba4c58e2055e6d59657f5ac43fb4f10023c51f9baf5bd30e4515f614783f17106b83d11dd4a8194a83717fd25d1555dfab7b35cfa032b15a4c5e627ecb114083f141c9dc10df508d9f9d3c2ef2f07e974ee20db23935703870f2af3be9946b37ca0aa5953040ada318571202a7c2b5d77c9e29ebf0c07a3961874ee44a44f1ac744316e1b9887b2b8c339415d1f8a600c3040ce55d6049dd8c60b3f063af6e427e8f704a1313637779c734d1082ec9b3a0b81936e591698560239108cc404baa57445416e38dd1275f6666bcb0c19b50942ee1491fc043c16b544865fa8424347d06350091345ebbabb5bc41725d85781bdcf7a462a983222c575cb0650752817e59957fa2c36684fd19a807b35f229ab646cec16489822821c1407092268101d992f7fcaea78343b226bc680a430d28e200c9387bfcdb33ca06961f188e2a460d56cef00b4d2f5869416beacdb58fb32d7f89723f7ff8e5a3bbb0244e9aa8ce8829ad024f40d543911e2928a40324ba072791f7258f65be3d454128dad896fbd86ff49be11f1f85b8019679f3c886bdfdad553fb4b79c1e0527ab8513b47f5e8cbe3835773468af4c8016875382002f7f5545c46365268589f761c1afdacc7703790a57682d4b10dd3e2ba939ac3b9f1ad4062db8247f953a290676f5a7f8d5db44dd8a4a66316ac88068881cb3938d4e9df8c4398211cda430fc1d9ba8aeeb72961446847ba60dccfb4f8c8344a26a8917b0305dea778f36a3d51df859393877d15104acda238a2903332ef3cbe2c768c5aefa9bea3b6a9ff604009246324d59ab165d2a0e34608b3cc5f7e4a5cf145c4c477b79fdb7d01eac1b5dffdc248a7677d6a892845311521c7a7fdc8ed1e1d2003c3b8e919760513a8d9ea7978a707ccc048f6cd90a2d1c06c31f51d395a06885efc34032349bc635cd4b1004ceafcb1c426a2f88b4045790226eeb1084e09e41c4ab157c19d2ec027cdbcfb07b98efecf2d130fffb47835d3ad6eec22a12d1c86d4b94cbd1a64134fec94d071bbc69b2a84d37cb4a572da25efff364ffc7b19e4c3d34ade6965451d5bc0e95299ab711d556aa572bc3c51411428f75607f9c17e3e88b9eb32393cd93fc8ac72fb4666efc55ef401a1dd836f4372970069b1fd9b6e5e02ad1ce9e2cbc3358399879d63eafe39cf28fb5d57f7a4637e15cbabb6847bdf8becd07c1e3b0c8ed58ee8bb51542882a0b072c5b4206085145dd4eed2828c93bd6ff6fad770455b0a1ac4a516766ac2ce62af1c84339f60c29f2d823bdbc9010000356cf7b394258a05c4659c98ed80c1045a6aae78887aeea57d6fd7d75bb1bd6535d9654c2172bc178f01c902d944e15e1bb81a37445d02356dbd90c06a2b5a679f49098315cd0a17ce8487fb5597963a980db0b8fa916418a5754cdc1df841ce1bc4cb9f98bbdbcf28f3bdcc89ff485e7c715842d39c7e16cc9ff5759d9fd862505393ead1c69805465853be9e065f936decfa1ff708b6f68a4172d112a889ebe7fd49aae975a782cfba3017bc3443a113877e958d5d76828965ab38a39cbb3087cbd5280850710e6c223e1f0a105c501849ccedbe2125806e1288f47801d5fad9c31fac54e05e70c5976420b1221368213bcc6fb1de2ab9e451f14cba62411185f0107ef8acd77281218a60d9f2ceb0d96367628f1beff59129ce879144663d32578ee51a3d42da48c89828a809f6f1e5cb83107f61dbfb1da207ee2431ac468802822be3190871c49577c049eef4f3f07b09bfaa37569531c484c99cb07bf331f8d5967aca92ff9b8f0d70e2292e7ea079e2b83725c88975982e60204a3b0dd2416d6f07d8474c75bf43809c430e5a9dcff4434fb399a09025ebfad985545c16e634fdb4c98e1ffb2b02379ec3fb4e908529a71a6a32a22b73a4e0efec2fa8a2ee118aa727d142d4dd30df11315d2421a1682ebfd1f957ed8b425b890432b92161eb5c0879777ba9ddb6be1c169ba2f72d981e677157877f74abb1cf57c6573947acbc0048e89322317d1ce8f81f91bb30a3c039d0b5f98836c92aea6c544992a93bf2b71b8b52e6e36c439c6250b814b3705c5e787976b1da821002cb4258d58e8046547aca7f9efb6a7a61d996e1abbde73afdf10dc6a267c0a93efdf94caaff6300ffed0ce4f17f61085fe759d22756f0a13fc1d7b102e56a3fc789e2edb803cc67e2fdba4788793836bd130154328673db4c7241ff795d6818c5f76402a8a2a3c422313a710af0d74ca4e5f62f7156582e4b8cb177b1d6a27c5fd0e65521e4d05fea12f52a20ed26923be6a12b8ecd87e3649591e24f58ffb5bd9ad2acccd23b806027533972770c4fab9d681031f4e941c1174808feeb6a0a08e08fd05173cd6facf8bd68a79674cd1b93b4a501d1649287993eb16498c8c26827858957d06c73f70d997d68524352b44eeeb3a76fe11ce1a4dba52966022604f91c9e86ef01d669ef50415cb462279d587c02cad34929f5bf87abf65e007e05ddbcd988da75de29254b7c2cc3b994ff39c85a130782ffeb72aa8d7386aa12925ccd000299aed46037f1f67f8830e0027738832a1276e6ec45ac1147e8e829d4fdb7dc9f32960035aea976fe09b055cd9c3644b6fc0b2820c1f5001a8ca30cf348e23504af14a9d110ddc651501f398930296760cd2b0cae6ded219678c10416c5b7d3dc170f185be8f4ac1f6567d55db979b2cf8ebdd9bed1fd3e61b62c5765fd9c7dcd737196fcbb56f1104e6e7172c18deeab47a9d87a768b1d234eca4d0977fafd7fca2169dc136a5dcd151e55f0cfcfe39efed75108e30187854685302abb3a199c2407d922779ab7fec25dc8fe6ca6584ebd2f8b90a0c5442ea84446ef52c29ac98a0b30f7704ec94b5b1513c41e7a16638b98d03b36411cc87cefd981c3fc47b00215b48285ec595aea2d7f6b70b4e68671fd66302cdbd7f8c86d2f08964eeaf9970dafec3edd30d6768d521be7ba8e5f754396980afd3c6896a890ab5422494c4edb675c23891665081dd4fb0df5d695a253a89b590e15c0ed87469284df2e4f316725fbbd58d2afa7c54f3469cd88d1fd15e460a07628a7d6f298e6aeed5fad479930f093b32e5d5b6d09ed83ab6aba90719210679c3ec657d1cdcf5ab4a40c985ad2642d00f0172cfd4b4fe4f546f96250f9d237ea1ec57b0c2e74119cc7152d90517f14a8e184235d5d821315e2357b9862cf96c7924b478c03fe5a0d8e6f0d25f668cf14c94d477587ad98710617e433152f0f9b6000c5379494be6fc3c240ff0948e6ab701aa12d11f9fc737c46a4075a1927cf518efcf6285fc42a2cb8cf08d246e2d49d92376e428dc6810b6bc3fe79b568c92d9af4b20887f4a692f7c126988b4af91a5d131e64927e057a2e4affb92c59f2bccfb6517d33d64bbc271e43a53fa681ad243d27bd2fad66923640f164a682b2c5d249bdcd8bf38274f1ef463f887fd41f8fbb6f968dda0c1b2cadbec04a6c72124eb5dc40b8d2b180fd3b17af915b5a374597e036d38d5fddb7994d16419e9869e9039820e2fb42a9f20a9e3d80c57bbfefd961e72a4ec79f800d86adb3a08e934b3ad7b330f79bb77864c3307e429f7d3487d9efbaa6ac2b2f1051cfc7fbba581d628343cb4d267239526ed2b25c2e3bbdab3297aa1c76476bab96c2a536867f07848316db8549a2dadb8769459a90bf314c532723398dbcdce53dcf76d959d2b0a6bf7487286e0e0608f63e5e842dd1397324e74c8359512bc62e3e626d9a17c1d31fa7f7bdfc7f63e0a39926a36d3b7d278d1e4e8443d0005652579079b317e1108bf654cc5bbd996b76c1c57eb9c4a470761650c4b1ff029e8f6229850b9ab967eba8c6ddf29051b15800629e77335756c7157bca0ca8daa5cea654190a68f1df270674792bc033bb2f9c258911513de26864f61ebd913073f86c3abe18483080275887276d14e690e5de37c9ede6ff1b414bea482a83ab11f3fc02fb9d031e53d4e6267021551338600ec0e675ba440a3b117fd0bd45f386a99ed5590161645f14f77adbad4b61bc8a74e7660f94b5b53c00dc3fdda1b1da009adb5fac2aaaadd0d4abf07abe79234958d5d3253df9262d5e2a1df15d8d16e2373b9507269743f1c6e037f07602758701b2b41e7eb965f77490f063422e4136be1e83781dd42b5d134139773aa5ba2bb8a592621d9d78808a37429a183d63e477abb268d6096dfe03f77d78d40afb1dc5d6f459e24c69b2e8479afea76185d3aa0ba9401add0fbae02a8b590ad84045706e626b976f4074d5e781f7b643aded9f65f066b1f81b7bf001ec84a5b78f8b0195640002ad03ad9b3f7eed0f8ae6199ee21044630398287da5275f6d51f2d7bf728380edafbc478078194878df353feeaa9040f8a68fa9cd3ec454294b7011f32e46531e1d7229cdbada70baeaa448d8e4f8c4378807e628f34ccaa3501121e5f036e15d9e2e3bc92c4ace9d523a1aa4b9d137e95208c6d8ec4629a106deefdde1d99274daf765bef7f0c8e8c0ff9e9a50a101d6ab9b3424523ad8ec15de632329bacf297ad58ff24254c765dbfcbc01d2f38ac63cc615534db0414c261a66feef5efe4626d0a1ae36ff34da4c385d23664c3981ad9352ae0431cb88e198deb85b4f899185f1833afb787510babb6746353678cea50ad37da044de6aed62b5979714d6d3403f1edeb847f4cfce8ec4b36638af77cc3280084872e2b8f380d1e4c8354fd3fec258e296f517de30b85ab222db4442cb13419625423f3b9af81ce6193a5a5b68831a8dbc0948078741138a91a5a0f84ab5ff705f3c5ebb8bd47ce7b0ac613126894d29520bee107b32d585da202b61f021a0df1de8a5006d1cdb2db513cb1edfddd7fc828470c2b6928ae926d44d44665e0e2987cf7dd1e9d6200151f500ea3b85a24f72fb38e5dd6919ff9c486f6a54742f96c6784ff7a70c33ababdc685de48b94694af8ad419bc06a0f6504f79c606ced70026b813b4ec5fc73ed4f6b3f7ff697943303379d959e6561a8904fa0354d2ffd62317d63860a62a13cd77157b7cf921655a53ec3760bf23c8e75dd3e791fdc870f51a937f9e2507cc3fbe26e311d6c38d7652a79e40ff9ea3f3a0b40d5eade5431536f814d55ab4da743264c98e80f42e1cc648887b362b1e267406cf0b71cacefc036072a6b5c5c1337a5b99239627c9d6152b809fe15da9f84e38c738d7ed9711f6592392d4bf12d60c77dc7174d2d31ac5dd00ff9faac9f1a5e660575ec22e0f866ea21a260541d45f55fe18ab89fc535ed9a44aafa710ab018c34f764ece64d4a0d78bd284cc0c6e9529859a8b1882856bdc4d1bfb6f08cf796af8988c2624397b211fc69da3226411a15d50aee18f233d5fd554e6f0bffee925a9e38f7249b25f8f8485941f86aecf9011b30a421597cdeb825ba43a5ac5d0ba0a603dfafac4b4eb6317528961d439bd49cb85823c6a8248fc3a1c95ffac96f2c2167f0560f9e2fb6385be29da5fb5f2aca108eb2b23c33decf9354bd73ca3957a0e3edca2d851882dd6bf461ad6adf5e23c7cc30b4afa93fa9ed9a309fc606bd94e60c8eae96a5968123f2948c1888f94a5c75303678e12cd33efe4bd75333b88e0ce0f5db59338bd42251b8da9ae886ae2d3e33c03e7820ebf5e571d2d85cf2ecb71f925c335ebd46d5962111487a80bfd86bbdea56dab644b10444eaebfed741830d06a9bb93b549bc246fb8d7bb720fdca2210d6885578deecf37b80475e02cef2da53c685f0e6d44a117399f27c50eb8662fa1da047f280daabca2987ea7ff5a16109cb03d23121d809a3c254c044cea2c1c5021d4a7939c2b56333e558949624abb4329aa8de895578b18f094ba3ae0588990d6726b5128c596f26cb72e8b863007a84b13c9415a7a4c58879e5169499fe9dc7e6a34f1221df1688a0fe246346aa8648b254fcccb7d608360c564586456dfab70288ef42678f7fe3ccc5ef9fb5f0fe0604b9bdb66d55a1202b65d78ff11bd766249f3ca847b1d3beb78ff27598190b470f3380dbb16bb9cf3cdc75b485515d5ab2aedf4ea98c39a2c924d4ecd76ed4913b8aed446c5e78c9a981c6ffea57b41d167e7f3c7669da166a4b3e0d5a37826ff085abf884770598d81d737706750337b6d7c5799490dea202ced8df09bc3c6696ed63ffe3fe89c333772324c2f3722efc81590ded496ccef973496acd442b00958abc626f3b2bd320597f0f07182b8c4f43e20068dcac23b7033ab68c1876c455245f281275144f09892e3fbb2e53d816e6095aec90c728a44552cc3081473a3f83f359b3f66bbf55d0d9bcc77b159bbb33752463afe56628033ab39fc5c3ebb96e21fe3a0459ac6cf6288f1448975ca5efce66b47f2d63ac039973c32c145e2caf911d8ee8069db6c3c2bf89dc01a33ce5be26c749c8a9960e18158200621b010ceac199ea991a9bff50540d817cf9e8dceb6e8454dec050ec5f9fc687d4ab9e4ed5ef42513bab837179578a7d30e4119bfd45d3ea962e4065151c760b93956d3df9b1716713d9d6e2e6cfe71944ee1feb9db49c51187dd041e2917ad2c661d4a0ff0e0e724a2bfc1a3fc40c9de09f7a9473c1c7d28d3467477008ba2496983d408e0f02bb072a5de12b3fe1512e7e8a5e26773cb51ddc6c4064881d4b2bc10fe64fba338a735c61ff52464d7c5313b8115fdbe342effc49f5691a8d8eac64b258e9198a27b64b713b5de43b687ae66a74c5f7a4c12c1c652b25c5f234420a8e5f0534efd9f77ff35ef41e905bc980095001d26879fbc528ad40913286143a0bc24b114be95e7f5130befe359e6868fe6dba7415b3857dfa42638636cc4b7c914b62ba849f14d3f179648b12798026b09399e695b7f1cf43b136ade64e0e5888c0f337844341033d018dcd0f333943868a452fcecd68406bc3600d2a53865758eaa58e311d0c979b90e2cd1516ba46ea196757aa3d125ada408aaeeb25da00699121c975759e1875ed0b920a682cb7430aa767104e16a4f9f05b990f0a33db237d0ff037921f0e32e1af24d872b61ff823ac66e7499da62e9a7cd5804bb971ef7515095fbdb6ff3a34768c657c8104732d1f5c1976cee9e208946a242f93493342de1ed43e8b75f5ae0ad19bceb5f11befa7518d1dd2f47e004c61e500eaec58ac1036805dc7f7cb1610fb60af796b5833ed4e2b86d04f684b4cc1aa04e5e0c77b545a4a62920e243633139e69f5fc92bf995adbf9f1830ab13b925a85adafe77751911a94134068d419203c42522b315c527e85bd5d17cbf9c1dddfc969e01f68b0e3d83c7318ffb96a2a2283b8809dd2c0c1111b3b9312ed87a9201942fcd91518586ca2d91b51adcf3a38734e843fe98c2b675bb380495335fe05bc608a7c4732f9bf0e6ed3c678ef56665c3dbe7d695ec470c5ef65d7f473e476fcea1270c6a6cdb7c85ac7c7e174899484acb7c019dd9512a014ca2498e7645b1f091d1c5a1bdc3d17c47fbab103d8aa34c4f571c2b2a536364d3798063c859c6ee432eacb392f3a45d48409b0474d90b4ad02f62c85fcc5cdc0359b0818502231a4d941e0a9cd9498b45d1aa6e5ef2e4c8e66b91ffda3a5ae954b956424cbd3b0709a896213be35598992575b88c66c448fa72063c2a1c021f502eee30700983271fe2b1a1e0b03cf7eac2797d6db33e3da4f95bf7dfefc6d08e10e4d69f75a01ce8c8dcd73bbe844b832f1217735697394e67ffdd6c343dcf5705d6af4b7ff63b0cd1846bad6cbfe62ac1fc214dcf83ae8f246e374f77cb4e53744024e4870a13f47344c9a659346a2a2184255d9c681fcfd513a00a28f3effbf29dc1fb29602a2844aa6bb6f2a64a09d4469e133bd8ff88e0ac921cc63c26c8f75c110fd58d0020cc01dc6fc77a086250bfe61f2c4ae052ed85a807ee288532f9179c8329d51866500796315624279c0d5cb7c1fc2244b6323b3c4c0f3d7dd28e3ccf0594fcf5719708239c0d391a3f80a96dbc1a13af1b8549d96987ef93101d582307855909cb07afff107b2d62c54122825e048381fb2d1e09e106c347942ce622f9997dd7eb085ba32f2e75a3c5c554903849f66ffdb0344832fa3d1da74363596c3fdfd25a3f879a5885b62f9993cc01db68e0bb6ba5291eefd0c177e1e74c30cff6f3ab8103d05f2d1f4398e922d571a7dfd716fd7278e86838f508dc8f2d43a54d5da6080bb26c0d59b2621cf91d4a3e2d4de50bbe804f4c815c22efa1730c8ca1726447adaa3b79d3970dbd9d1005fecfb9b81edffbcdfd484b78a3d4b9e5d691d668d8602468030b460e33753a3f7a35af02bf5d27bf0b0c675c918f6e8a13acfe2622c9bd5c396f63e62718185120fda24765ccb0ccf63c144121480d43e4416e1ecf50d1927d8e5527f10c26d5939618189a9503623f55f6e8db7522bd98fd8ad5268c1da55fd6be3639b7d257328d84d8d64cbc0946f863a648cd2b41d24ff8cbd0e1de0f50d6f3a359a1c730ae428d1a916a373ccd820efbc186939af0a71c7556d8af2ae11d8a01e960620c376375506464017703814d6c0e57f803a4918a5410f71da280f905b4616a3f448e5ef21cb7c0a742b984a37957a7d5364eada70aa7c385e0c127eb3d4a25bb64139377c21406951a2ffaa5a665fc978d5f4a16eb73a4947021f8af2f0c29630557bf6b0301bc57780751c86591dcdb7366f54e991d30a5cb1409c5ec4ffbc282db216031f9486af6b028804963bf0da2f64db275fcfe567c27c9c4175e0356771e67ebe173414bf0bafd61d464199a767da1e714ab4412edcdc72e12eee69b5c81f16283f81d76f0a83ee1691b732e887d9040e7a0c857ba866078715afc1d9da66c68bc00538890d87b83a9e26226336697748165e1b14ce24417a52ada39d50c2762dc1489dd3bfc11dd09616d1e11d935f6547336ac1f51e09040e7078c7d23c0e586bd16f17c53b031fa00da729e45ea2ae3412da4cc55b486b717ea92007db7652e628171bcafd5470e5950c0532d3296b0683d37be8e3e4f8a2619c7098a7976359d5fba8740df60b8d35683baff8dce4e40ebd1803bec7f3caa1bb7f2ca857d5ec6085856b75d338bf76239404d7a360f73c00e9c1f5d7a410c46d146ce79feec9521c7c583dd13fa3dea5d8d9786729669404b7c78efe529d5419f9006b58f815332753e36bda6762f756cfd5e10e855a9f3249c094224798d929f48f3c6839fb8910d3b309d5fa24499f40a11c82bdfbe3f069520c2dc92ad904cec163b9faa1de3ec4711ea93e105ae6f5e531a91870eaa7dd250006217bde124f40e731822fb919eec4b3407c4fb594b448266de0e23cc06ee2779597b26fbb3eb1d0ba1bcea3091855cf81fb08df12467205b55b785fa1e4317ac272f8156764bf273b0ba623760ccc7a54056461c7730cd668d35bddb407b91075fc74567e8a10f39b9bdec1c890d0bca1e08bc41a02be9f708eb23e609f2341967b4fbd68764c3cc4139e05676d099e50d5a49075bd2f6ab4d5a6080c7316150d38b0cf8df11c0a9dbb1078bc6b20274a2cd84b3f6a083e1cef5fc5224c3b95c27bc01656c228660eda59a12d51bd60752d4e7fdfd2f024902604fc09f23ac89e8ca61929b31757ffbaa40823e9874fba202fb3bfbd9022f8c0be36292dbab787b28b606f8a91e658a1173607f927fe024ca27046f390433c06b4faeac56368663697749110401a01d8dab23f4a447533fad03ddc3b978c45400fd0b481dfe52460f1dcf50dc9fbe3a7160435a487bb3672e0a2e95e4d07f9b6f640ef2ad336a778c2200549d791e455f3b54fce98d7f4fcfb27d5255bbb41af92d30388ea61d9c631c9288b10e5ed2c984cf7921ed454e04955095569b006750a105863ca70a192675ec59c1cfee7722e5194b6c2b73d65f1b3ebb91eef2e4e878056831b6ae6238c674645a4e4b870dc4d8d032b8a99d41ccae418237fa28331a966b0865892c2c76c124c50a04a6ecbc74c4101554f75f1205d391f684b5b2f15eeb1b2418cb740f69179c73983b422473838ee1e4790993fbce5bbb31020aa4c584f492dbc4a208c2b96b2b74d890a55b9af98ef696d3baf6ae49f67d818c9d40a52f0250ac38fb74869b8238f37ab7a3770a7cf9d5400f6d0fe728c8d8db5376e82512f5e69b4fe50bc828431042c3d1a41c4c7cb8c109e55fbdd2b16c595fdeaa61456a085b8e9ab55b7e21a39b627cbeb97dddb5e922f60a2874a5b0992ace888e19fb85fc200c1fc0045341d70bfb036c71bb512ae2f5bbc19f444a0d4cecfee5e148e3ffbccfb7b05b666fa838d32e9fd8941f08e28ad113a2eb9d482ea07a136bc0b6d8bd4bf996d3c98161619b9cee02e683f57a1be699302a2ebc589f8690f9f153099a0761de1e0b2bb52ecaeab191210493423f68ccb77e72ec4320a0d92c695d24db989d008a99d2f5f8d77494f3d22544b35bd428b9570e5a86da55766387499d0a65e7a8b9f3fba64847e702bb887a9c45f7b527b65255898c2310d33fd98ce4aef5fe311ca81a6895a2ae7548a2590c829988542eeefcebdba16f8a31eebb8e21df3d243334b39f896e27873bbe6507f1c7ca38939b4913edcbce05ca254a1c1b78110c9e186bdd6c010e93054b13310bf8f74f74c5ee744b18b8d0691bacf0f4573664adc18784e601b03325b6d7fa39a3abf3531d319f7c0ecc64af4078bf35030996e2debb385ff6b8e22db047d6236e34eeaf0fd6e7e914554d0d2221d955f2074dedbe6b5a6246852a7d95d75731af4e7bf8fc23002acff003f33f3cd1efaabbe42eef0c8d7587a176a5f60affeced3535c180ca5aa9a83903f1f62e3b6a9393e416ff332402209a41374f5722cdbea5a6892c2179fe238cc7a9f57a684f532bd8465d63c0b0a7dc24921040824c89fc38c06cccc080c857e95baba5fb165fe03b3d8812e5d983e39b46d75b70f1d5c586f7b120d0ea0d46c3b797357648205d875d0db506155b4d1fd6030c8156388dfbaf97b21d9278c5f12e26ad3c6d2b0047256cee93cc84751cc021e835d218a211489f1529029141fc200881effdf654e53714243197a6083c85c252f10dfcce626315ce65c2cd674f4d8b37f36318d80c02a1da41ef1652d9a752e155526b5f597fba22664ba39265074d43d944e91606088485573b7c018ea55227e557cad1810efac5ad15aa5fc7ddbd4a140c0d7b7dc93ab9e4154d70c5f05e7b0386c1c15391462caca9582c0241599f3620fc94cdb532ec6b04e14d1a18c67f4257b6ab5b972acbd78f13938ec2b0d7b24c1cee906d1ba17e72fde2e59f28891443300c03911737d02f8302d7e241780ac604d54051435d70f7e9cec2f4034d1be1b44fe60fa9d509132d06681089e4c2274b0567f24894f4fc4b8d3ca7d52fabbbb9f37d734147f4d2681ad9edf8c25af835eb71d0a9cc7d08899abd3b1ca55629c7a3245c7be515d5cacc87db2c8547b17bf3f86cd5887b952a73cf1e4842adc453bb853bc8510ea5cb780c5883a20adb73bb66275a3d633ab4a4ecd1f67c1513e4c91a91a50021baf0c9d1e6acad36dec3ae35b0b67fe6619eaa80e695d61e8101385eee9067119dc11e7325f60b4e53c248f17958b457926ef135dcb4e53c942fa5cca3191a30b6b3026a66fe40a3a3261823e1ef7f4955ac157624c20e01d5c67dde7fbd8e11ae4d02125a23e1e9753598479ab9352e13cc83cc4f4bc4e0ce7c4d1ea4ec3726ed058a1550156382229755d704647a986546d8a2ccb0ae5bd6a78007e333aa02eb7326ede93149f033b1bd4caf6fb3fab2a160841daf2ef596deb3249b125b1831fc5506961619d6311b4b32fc4975e79472d7fac285db20778852ff3d06cee9492790f9e7123786a34a9c049b6034c183218b714bd3177f014aebe2598f89f8a97b67224cd44793f2b60c4bdd72751af73417822a258863bc8cea98712af0c8cb7e442a47daae80b7e4386362cebb766930e8a7edeb827111d4db6c0457a7cc3786b47c5873f0df5b6b9d05abf38c46619e9b4cf793ba29a9a93ae793a42395665b44930f5e92f265a2968d197f4c2d78d39bfbd7cc83efdc7085859f7ed896e0325108ccf9298c5f2fd1744bc09f7e1786574f2ee4645632c157e098664b533dc2763821b218efb069ca55b375dacaa60d79813d79ffdf35220e630ef9004cc77230cbae37e5af01f6edabd0fda285dd0f6f6cb40baafd6c09359773858c0625c7fd1db2e9144cbc4db7e134c67b5204d2a55bf307fa233fed49f866ba32f1c14a57b8e054293b57e4b5804f7eb991b61db7c9aafd62033954d80048f5b9b2326fbd27a6f7991d5d426313916501d7893713402c5a76ffe0c64c499ad674a9e1aeb9d48741e84544ed4d159b47d895c6b54459f7bdad8bbeb8332eeccaf85b679dba69f1c19b55974bd000dd65a25f172ed771bd857a393bb1194abf41b9393c935b32870526c0dcf4a86fd86cf385f2fa2921be40618ad0276b0782d93be5c95608d8a77b1f197e6e12ad0cbc40cce2bdc5d4aa8d07f324b194efb80ff4c3a62c4fc6e391f8b2041ecb52fae21e765ec04a14d2b9b1f491b6438dff4478654bac9c77cbf8283d069d1f0c135ce124cfc8026cf7651411bfcbe35ca9253b4d324d7b85b10c421cee5faa02f6ab3d5ace3bab4768fd82dcf758f0c65610b1ede295695b434cbad433dcd902055b977ad271813ea801a2b8e0f40865769580b9e4fae272e34816f56fab4873dfdc6427652040ad451fd838050376b48b220c53a2147367217ccaf30a3164c2e6ac37c30ece563dc086b7cccc2dd83e2454d92db248a8a27e596b4f8c05aa89aa4996e027b23e4a9af4b5f9bed9a95ca29c5bba9e2ddeaf6a7c6c7d7daea6329b42e6015892656e44d84741458d76bab667287cbe2a91f87644430f5782d4584a16c9a909d558034eb0003608bfacb2b053a406aac57f28124f83779228b1653733a639c401a2c4290a654a60e6d7ef20d072cadc94d288defca248c606c9d3d327f0561f8dc20b6445eaf0f6a964ca986c095bdc0f58c52cea23e55bb38a3ebe725c606500425370f105bc326dffcf8784dc1c119b6e579c868cefdba57f0059a13efb4cdf8036dfaa4a1e9caaf5886ec96f9e25df7faa9e6041cabe6324c325131c792f92182010c03c9a9de6d26fce98284481322948b2f5e7088c52f7f1a166798c95be76a9b4e131b2ceb832f0178fbac1ac39e7bc6ab5e12bce1b75066f09da8807bb382e2c6bdde9a79583b3ea0e9b781f5d3770362ed496ec23388bee8bb41e0e2eb937f7eea5c1b0e54125b6932eea4322950ea5df15fc6ee09efc904a9a91117f965197e80dbd534df7bffdbbf99ac0108cd22a3539aedefa34d304e4f283aa243c059cc69a4f372613fd2ff7800c0ebd8b8543cfc430b4d676a9ace9608830c336ce7728bff9b5042267edc456a097701d72731d3a1478ebf0eb08b648f15dc2f306a78d033f657eaf8a87a0f21ae2debf34489bffeca3c12001a8da307189aa1d68be41e8a2b0ec27dfae2bc6bd895fed3524caaa0bcdec7097fdc39b6b3cff024f1c05f4a62fe307d1c1b3691af38a341fa827bd044fd48f1888110e50f0284e344147abcc5ad9dbfb62d63da5a9d4003e4341ad68a20fc80dc830edb54bbc5da2ee6572879a5720c6f212d90024c3fe2b76a6efab7cf4b7d24ea1de2a9821bd35540ded6a96e152ceffe7bf9cece06a61c2a6184f3939db207be244036e0ee946129f70d7b8ef0e7dfcc345fe7aaff17ba7edabb65f25ae52e080a3e245ca6e7fbaa8a17178f6905e7944208746890fc3a6dc2e93676eadf40d0 +MD = 425ad2c8b6755836b4525a5d957e29fe7347d03b615293542485300eb39276c3e2a9c46458964d2b3a27f0d61debaea5 + +Len = 92896 +Msg = 29ee4093324142e57be60c9a664da2b6b2c76134413ae4571e19253bbe93e4af860b4d478ec9d5aca5ef653795aebabea8b90cae6afaed5ab1857593dbca9c79570ee790671c471723373e95c25443b41586685254ba3ad61da4e8c0baf9a885a3df579943a25fcdffa8dedb75a7053f0115be4986e091716b60c8eae38ad17a7266e588adc3e77741298f32360fc708754e55bb88d6bbd3a29f5b38dfe3df00cc8bd8862ae7a5bcefa197c28ef453b7781977cfe30280a5ca4bebd3356e9ac1ba367aba4476634513fa3fb204be6ff3135e6aad1ecea78fec4bbee36d91ca62434f114d82d8e7b9b41bcf2b21d5e4644d05777ec1a1fa380e871c8f10b6368e70bee6666c75f9c1dbec8f546ba179b32ef6e66a55e23f493be74fffa544a7eb486b412e8bb563058f55c6566c8bf888be1aff9861fb3f6978539e5cb4a3e521d33e69cd6601ec2cd83ebe58acf9278a06570a316d53c241cfb350cec53ab8d91920a86a86bf5bdfbe8fbd83b254d0620d964e5c0152907947efae7c6173e8bb23f7442d715979c54a300cfe0605b9b8dbc01442a66070b8e8ef008f0fb53c6ef8ad863fb1350e878309f3f23072ab3379bba40ae3e52ba6bb9c8e2e58697d9ba028b6c8cebde2cc7203b987b8056d7bee7146dd414989ecc7dc9f82c3f573e924521cef4e57bc3d1d04a8e42725c93942c842e347f4523215987cb3d8c2e6018b1100ddbb6d65818ef50632053985157eaadf437d4f4e1fabb96ee81f389e8add4fa9ba9c66a641cdbf1c98d8ab6ab6a9fe66266bc0455c9325bb4921bf622d22f360ad7aaa4525e048323f2ae240c5cbac1fb39ab0fe91d5c6abff65c0fc9263e56ddedca10ad4d17a904f8246cfe9ed9b5213918842657782883273a13260a80d18764ab3bff7a83c7def693fdecb15b5476dd8aed98083439809d4cccd3ff753a99d4c482a356b754347663537124ee146eaf88c8b8b00f025ad0fa795d95a9f677a6bc81537240f28800190a0679d0796b27888202ef7717546ac9c51d3d8d99b362e9b46a5daf175c2c2b8e2720c1080ece00c5f106faed0fb3412cbd879e98df81e298526960371343216c5daa2e24cc1b97f11da708e80f42e71c98e46b785e9c1da9c625f2d66ffd8101048676642588949fe3303fccc5a2220149d462bcb31a21751023d579a4a3c0f8d636484a9dadbd2eec42eddfb55988974ae822ea6f746466eae3869563ee77c02d4a025cb6e3481a935fb1a560c1913b06900a6606337d1b90d594be20360bd3842232fee3d1ec0f62d729b25a82c269275ca7d3f9ffc1efbc8a7e686c02f3cf756f68c5b6e20f79f549a48b0505a2ae07be8998cd01d97fb862a208a9edd5f06b820225a2ac38c6a537b093e2d2a87632260e48e2122a283f0ebe235c4f1902f0fa9db32998de820d21dc7186724a6e3133c448fb894a959aef115d15af33638039a9d2de20873897889688725d0ed28f584a3d5bdfb134667459fa48a6cb8ea3efa52912ebc956ceec6d6d18fb7c5f9713ee8a959dd4812c3ed6af77ae3800d65d1e1a7a430b792dcdcf73ece60971f2f74fb53b3c4b0856cf35c1152e0f569232832b76dec3fc4e8d4b5180a53c963d62dc41bf537b367075e5f3c3beb7fc51d062d09b07897c8bdb5f7a56a19c58b0e722a4944bfb97f3f375abe5d8d86ebfe73bae4965d25660187a42f1739f15f814a1824cbe32a96b98534e0df4d72a16c77c192472253685d52a6fc393bb7a9d5bd73f5af2b6e742050d7eae9b4acb00f1b2a59ea4f8894781fe454f7a87e2fb2d324041b1fede11aa12a24a5499ae09166dd82a76c2bb4fbf546817907adbac195139935480fa54f7f15d53994a5f89761c254a702a68e8dddb4cae8e0ae12a90a28fc252d3d8769f28047cd1d35c2cc12c219129860ebd7de16766cbce8ff133a4c741456dd510d0253c08a6db304d583c31710b7c192800054ce2c21c349a72e654b2a4c59c9e5b87689970b85875dbcae98c7e6314d314b571a519aa7b70ced5cc78e9617b8991bd2ea1d7f15130ac36ce262ad18e292c805a202acfc13eb7f1a3169bc81e5d1334d2a4452ca7084a2e43d0794de1a4a7e47ad68e12a23ebed86d1e247fd1a3409d093330b0b657461fdf3df24ebbd02760684aac099b0b53e87ee22bef51d6aa4446b133242bb8206a14b11e4a89361b62870f2d1b281f07a07d150a9d0b71c0d8ffb0b4fd63a559bb78cc55d7b63104896b7659ddb6045aaedc39591f6b0f24a9b8b44eb2faa962726ff2515cdf7b63339a12dab7d135cd5210a19fccfd093654e63e68db5d3ecb3d8ec56960715fc80f87872830163dc038aee0375c3dfa86592ca18bed07d0046b49b83688f868a36ba825baecd186e3c12b97b813aa4d8534e0a0205e86f7ae8a253d211cf12075d690911b34bfab989a0b1abaa9ce8cc366a69cdea657201a18a5d6b1b2d801cfeec53bc1ae2d066f11d20b97751732b16cd30a1f5af4e3d7a5401770e139a70202ba8826cf9641c7d6f4ccd70c10d9efc61a6a5af2ecbd77ae9871e70e826accb0e528e30fa7c84347f7e101e547ecdee0d15029f4ab077aa2f3787cb14ed77077d9806ee4ce1451e35fda908738d5ff7b9c3df4e6cc7c4100f59dba6ffb77add60c1132f575b08437913c1b78404fd1c4df96542fad667b67134418a114c5c549f16dc7983b275ac340680b1f1a94e67b2ffbc055ea607a43e11e2feb273c67522df8a5738ad33604c1f0d802045fbdfce1d0b1ffeff4de15c38e68a4af66047d164444ede15eb67aba691ab7b9fab8c8a9b7a1644a9e175b5f174b6419bd1d295ec33e8ddb244ca37e333bb68810777cfc03374976b6a683084b40bff2bc21e54c07eac9d4ce790da1d1c3751b1b6a783d65bc05e0e91c2b438cf10ec6dda34f8294f2287ab7bc17b9e73a79df861248f231d83035bfd8c2b57ed4e702bc21b676dcbd30196a96602ac6194b41eb0f7dcf09f44ed1756ce7c27354bf42b21db8bd41c4674d7198556900e85feeb4a275184098b840d468e8ff1d091de36a07d4aa86a03493472296192a102e327d8bcd52984e1300473d64cfce6a89814e7078e2fdc93e6765d570af94393cb9901bf522538cc59c385ad9b929e16888d9d843eb39b7db5658119390f1bc11e0a6e37afc14cd66713251c64f9206518696af9427ace491cc88776d61a52134442c72cd445e887c2bcfb298f7a951caf6ff87082cc9e8085681677ca630f12a509b3a7a9f93666d286aedf045d25c4b468ecf0e5f333a9570ed722fb327b44a927daae15245bfb0039e743abeaf7e4911df1825536b44cfa80718152cfbe33b963e54c031082ceb29c4d5f6c693404ad53ad2dbadc4af2d6878d9cb781ff673b867c865803d1685178893a302103ad70d5c8f9fa2e1c2253ead3791391666799584666fd467050469542dcdd5b8d65426aebeefe745364d973ea224c471cbb39a1ecf3da21880ef8bb214e5d5ff9b78bd9be15aef61640d0e87b9f4ceb49eb85291535d7db412bceb2cd9796757028b3ebe875f2fb8e3fa0122df6f9c5147fe3b86a35ddbec22e3241efbf72e51a4222681216b3cde2e8b1b9a9313d1da600bd1593fad210349f8b322fcfd8f61e8c4118e301d7b23bc36ba59758ff3a27f67a09378ca01abe07404b34ceaff1a58e76c2043d48f3c159379d9d712765bee7825cfef42d2489ecbb55a7c4e11ed6d12a301cd2ecd79b317b6a66869ce6935d3dd692396376bdd963172fb955c5dadcc628d4c9ada8f2d4a0d4989e4805cfdf133e986328578153a05b75b6f32ed837b073d42972acedc80fa3dcc2120a9af66c5ebb7b6611fde4dae721c2a3a1f96b52d9c3fa222db5972f9fd9f9e23c1b28b0fca18804ea5a137984dae64d6565ff13214945a77171c86790384ba0e47b0047e1f292ea2bc068e5fa4829d9c3437b5a150f11e8c14ae4213da0c0344ae10399d557a2001b566c871114932f03bb68917bbd66cd646872c46fba6187b676bb0ea077be2e0445a6c591e62c386df74d1f1cfb4c3ea4f2fab8ee2e357f7062af0f09fcf15c2cb49f084165fdda481cb26cc06fcc23c711056482a34405bfcc6702d98b4072dcccddb9ea3a0dfede551fe02ec4ed6416ec1a32f3c19702eddc6c51d8cfb5585cb5ea3e540d648d75c81de330a0b8ead9acc1890831355c40bc4562ce6d57f6f4964e0147850b6d569d33dd8cac339b587882d18a9b26fd01917a9f83102e34ec978f688b4a0988c9fdea360b8f6860da79e67342a673cb7786946fbf5e43fb8be237dde70566c41510c95675f15f22a9d674d5f5fb23b0ecc01a3949ff9d311b9ccec7255e2b0b84fd58a5927c1fc70bb8b5606e423e93a66a9467ea9c44c0e2f0da8e0bfc5f445ced1f8c2ad6b03849472f7c7422cd5beeaa8a606add418e2904e59962880a57e607a77104a71a5eaaaa6c92ce43d7f20ca8858c91699b8537007652f1a9342b6a7477bde9986520780af408454e643f488e0d5326e95a8c560d16208208e6aa305b17d9a1509a65f98e4d48a1eb7d2aea81a81df304878acc534b6bdb4c28bb7fe5102bf478c117775f01b8aac1289b39abe052be632969e2f9a09cc51e0046a139e91daab8e01d38a498c227796f7a7e343c5a50ad4810e0279a1908267834dc812a168ab7015f858698cde2ba5aaf0244449d718bec670e07c34b6c0b976b79e25c7e5d1e2bc5a52d8b40a12df0230a018184e8a51e56b3bea29ab97665d4bf8606bceb946737e2c0f8852d7a39bce1967a757fa2e5c51977bf6fb60eeb57f895b03afcc2bc9d826868034e483d63ce29b7d9fc2b4a9c8658a3302c7c30dd6a36e25f585032dfce4c6222cb3f050118e3c11928e754c34389d547e4673c4c5f922593c6e5d1e50e956e4a6e08987c08eb1f9bcb7f0b229833dd1aa378188e1dd1003e1029a2978a6a14e3fd4bfebee66a59c9ad9a77a2cc7e44133457cb89ec1afcc8fcc6acde89f4dd5541af40adfa87f80a95e1a129299191985eab5d2716959f9a5361f7a0555a500902dd65338b6b83c54dfb90a0f5954c13e81cd74ee26c741adca58cc734c5f665087d7537e23d82649b924cf079b1feeb9b5440e897c400b1613772396f5d55d21a3679a048267e4e484bdefffd0e2e883ff8a0dc7ec8cdc7a8c2b1e04d49f7b902b07758034efeeb1cd04db7c9d364529cb30012df9d62c57bec52a218b2648086947a465bdc8aa3dec9a1ff242928b1792a6772026e4711a05d5c6916bf22916f8a87529af8aade58dde3be5838030d9f08dde42e610515dfbed71c9199bb528439a86406cce70450b51adeab277cced7f36a50ac9e233802b7cca3cf67b72d8f4ae464e97dc87d8ff94e46661f1c5ce793179ec54e29e1cfef42e619529c895664443a8936d6b1dd5087ded047691f9792ebb6be999f7a100f41ccb682f4cda330cecf2f1d97090162ce8e33c8ed80b195ef80e2a60e6a8bbed13ff01e46633c568c09225a95ebc5d82a3ed5c930e5fb4729e5789efe1909a5fb270d4f1bb2e97d86d1ac1658c0ef5aa4d60073b9b73f4da3cbc7a8f5ef516cc66a563cfa22744dc310137966f1488f433efaee105f4352651c18ed7d542dba3bf1130e6b1ba3704baca0aa49e498200f5f0b61bd43d0fc75beb3951db0633760a48cecf605408b268f9bd28903a7b4101f7df448cdadf3dd9be0c75e6bbc8c3f6b08ff244811495d9f4c18acb53cf44f6796d13a64a4e0a599e7abc6ed0061e02fd16e7c4cdf4ff6c6faa53c612188d320a01d1b6f7b6bd3a20f6adf9ef75d49d62d62877a7148fceaefa0c1711c17a430e1037158fb3b719da22c31e76829844a6503cb3891da74f57132c14cf649cb81a2a9c686ecf98671e618422e1d6d9971c078d2ef05ad68cec983c65a77c84ff92a37a161164c1b0824579ddcdcd08e3588ea2408966adf5d3fba570366393882c3d68b5140dd3749a310c75a6efa6d7d038047e90cb9e28a1a00fdaf8c478f03b3ae0bbe3454e21cad6c490f9b943e307b63c5fc2f41783da47c3ec6b2985b6343e6a910b85824698893ac622a46073836ba26a8c7aba95e2357a5b09ed4a48cbba6edaf959106187dac78bde5b7d27c7daef0549b9e7dd5e0b8b7d519a472656318600493a88f12d4e033879290a6e49767ad6a74c3fd8a23c8fe9eeab0ced6826189757945c83dd5566727fa788c58ce0ce4511ac2306634ae0171db9fbfc762acf06b110fb782c8379b07e5188ac068c61e7155421f4f5a9348b7b2194e20491f1e4f21af66caf4aa588e1b18ab04aebce232edebd02ede9f5cd938c882c980e29a8772ccddfba2d82524631ff40de817b8fca9674dec08f9c43d355163ab4f1eec7dcc0f23fe1ae88a3186d56fc15efe2837525b9e6f20ca084d715ff9acfdfb9d97f6203fbca4030f1d4de32309579abb4bb072c9a16e39b170b3984db5d4a0343fbaa63c1c88513d517df118ce1d12f8a08b52d8693a6f460dc4a466af1a3639dcde4a1f050df99b33e1a657f6f68f689eaba3d2aecb944f8e6d2c4c8018e435d52bb3f2617c24b22c40abe76a2b3991aed80ec05a6acf545a74d8081216d3af946989bd171df908a561a7d0130337fd36d93aa9545f48ded9a14fa14b5c2a2f806076860f38a127040d431bd8c8b234a077d19584f2287473be3a1f1531123d01d7205731154397b20c27cfa0c0d1bc527a788dd26b979f9091408b57dfb3627f982f3765fc08de1826faf45535bd1fb6aad9972611bce698e40aecf9ac342562694c2f933418869d236593de6d9de532ce9cbe682dc0d1f37d3f4ae2e1be0f13131f45a3069a17a8ca0fb223b19a9430b069078007cae8092488adfcc578a7f85e4f837dbab617a3e4a15c0c48dcb61716e67c56e703b443a38d1e2ea28b757a1185f109989610f539c296817c8ad24fc9be24d31593bc07c1f5a460be1e0101f6689630e75f8906911b6a6a93cd7140919707ddd8a188be4569487a635ad4f6d3a17ad8f13c0b3eb453dfafd6cc1a52351a2e5d7a55a1d1f8901165d76775bf71d7a5eafc531d056a13fd388db055ed7feea03c41d88ea6a2130707626c6cc698b3204f51cc47c37a03cded00a0aa7935bb65607652d7a70b9932494e9142720fdcf2ed38d011e0adca56b776c5a25e202b86b360ea053bfacb9b13e1007e2aa0fb23aef88704c4cb11a17c3946c40408e40a1c49c99fc93851494e65dea85811b8bc79db18a7d79c7fb4268f4c99d3b58ef98277172dbb8ed244e0205648632bbac33527ab8282e7bd999bc1ffa834eed25ccf33fb3878c1f695b35b8de7b3b6aa43cc256a1e2b767258c51686798d7c583aeac59d47689c6643ae5dae0cb07a2f41251d7b023c0f47f78ad80a944728c79bbb7526e2f3e6ca56b870df40c23ff2c7285706b61b7be480d44db282cbb8c7872a8bbe918166c9d7bbda480a51cc9bdcbd1a34c33282f0fa8abfa7ca80f402071f4e8cdd7ae50ccd9ee413f2c5ead189ccb02cb0e7eb146e947410f4cda61d228207b94d462b3b4049d6658086613cd53d5f1705a480f7e3dab516881c94c3e13bff6c6a4d00fd38a3f8693dfcf985c8f8701d4bd007426143c9e10fd4879a4a327bcebaf82cfabe969144b08f79546ae62b6509d2499cf1b9fa98115c474a6850c607c7ad76dbd90aeb2162a8ab50c4edd718c7140eae99248e64141e9c7c407b273e19d5a84892e54c26d9ad5522ddf6bd5d0efd1d1f636ace6ca2814ed8dc9ce59c36d988e8f010fd7b9f084072bdea265d64f54098577402d942ed2405439c4948a81fdf64fb7346493c1f34e76daf584054643dc17c2a72d27dcae8ac7d619b6af7117463bbf66eb8365cf929f42f9c2d63b2dd41da746580d981607493d5232ca916118e3982bfef172656e15a50394c1b48e8c1793b250ae07855068cdf28b448957c8d7cfd7f1766e414b7a8fc79c6038c26e86265f8991a188e097066f42a5cf87e078c51f757ac00fb52e51aa2c3a3e75f5f9cdc27550ec9d5264754cdb76ba6dfa572646fd870e1d35b1992fd6a84c25acd2f86f96544f4f0051a90fc83ff07670e35202fc13aef64794c4cd2e42d83e0db244db8f244ffa84df002c8b59f83deeadd6b7e3b93927655872f69592694b9318218aa239754c5a6d2927b75d4820be3732fa66e0132d096d12509f0f85bad7651ce1921c4590fbac7285ced246cb79ffd53ed810e373be53316fbd12a42845299594b1353784e2ed7acb2421aa9aac686bf9c9d42097feab4e8882544af056f63a08922cc1849ad0a06c69f3ba1ac01135bfae92410644c5c84f614cf0cf972b68b1a76b8a0c9dd691ee02a11bd85f8ae0f518e3cb5b2b433d28dc552c028069b0248369f7a9666fbdc470b2363fc525ec3e7b3125e30c942ba976155335ad119ed598b070d78f1c929456bf9fcdbb72c5f06812f75a73490255a0f60cd577b3834969c7ac13726d9eb20721cf1e8d11ecbf4201a60df9c25f91ff8fcf6e6ad00c047927ffe9aac350c214713a8ec453feff9b75b89a0aa0a202e43b016d10f7a77b4949f2c6a2ce5729013668baebe94b35f6e7b56b2064680cf190595de48ad4224cb60b36f4def07b5fd9e01f8e227006c6e0131dc57e1034aa282dbd601a20ae15e4dfc71b85db1d72e42719059ffbc6adf7581e745e490e605af5080e15fb53176eb6d3814375a40cdda453fcc24d19fe960ad9c7a560eed6b145da691ee2c5d3bc46f8b0a83e93603eee4cde39f2554b2481fc09b3f67a5fb3a680eb85758acd45f6b34424b4602f807b6024577a2d065b83e1e53a88257dea8db81ffa020686a44c7f9639659ecd3ac23a69bb42f5d2835727d4798474a3be61cc70ed36bd724fceda3166d0a3bbd6693808c5fb341234923a422179ec83b7d95a88cf723432b0e43fa02d74139ddbc6e59c17e18c5807bb95c8a2d6f1706f4acec21152ff2a60233c5d0dce62c5c361cf9e11c453164539c6d27e3a280c3d3cb5a7634772dbe6123ce2784e15d615c0528953e22cdf95a359fa3401f4b9ba359bc335ce33b9bb17ddbb0d81a1415b792ae85ee97e06717eabaa34ccec0b5eabed800955b66647da8b512df79999fce295258338cb4d6132485d21098273a33617683e8c7f4424a0c24f6a1e733282934ddb716e98f6dd44cc9d59363c75103ac60675c0f2e5ca211ef04274a2bd8511918499d96ba54e4c84e57de19e923e4065d52fa1b5cdb0c1fe0e3788cc9d6cd42c8b7d27b7db4cb02dcfef7a0d5d75dd734edc9d3c6e6119ebd3c9c93554b2515b8a8bd811fb50f603b72e8e2d396f788aedfd120b3a637f64fb69c49175ee2fcafc5658eea7e3a4c325cb9c52b88387f93d01ae86d42098f5efa7f9457388b5e74b6d28b2438d42d8b64703324d4aa25ab6aad153ae30cd2b2af4d5e5c00a8a2d0220c61160a636b0c31171307a3d5e2bd52918d63b1ca25127e0f8e6fdfc2328bb11cf6081d716e7e6cb54c1c1c401f9333ce3a2fd3caf1470fcc0cd8fd60756d0c09344298859da8bc53c8ab687342f3b36d02e872949f1a098cc0df810ad33edbdb020ba4286254caf86efcaef6b5a67a75cfd4b5b19550155792cc9448b4c5c59a47ad69e024483eac26571752de7431ee883dc5a83db4da366ae65da380cb734fed6e0e384c4dbf77d803cb0e272480e01569c901fe0d0130307605a29f188d02db97bcb5402bf5626c49f1b2f7800e545ea1ea453f22314eccc4b3ce7a74bab9f96f9ae169aa8974cb71b1c6b54e84514a2c50fb6abc1397261890ad77a7a27e2f40d1432f9223b6dbc334d3cb5789e0c35422abe6a34e1326bac4c9ff78ee5865508863fbaa6a2e8586a261a063c608b15f89dd1b9f8bcab5f176aa7bb0465083e9e8ca33bb07e6b20423f69c3ae3d1fa96ac1a717872c5b907ced65117516c715119ff418da1e64883dd1c27a387438741b4e950f5aa0b1b42f5d7eb75b8b617d0428a8be8e134314cfb5aa9675a6740a8c8d320e0dca4c4eb1335af9222365eb08bf47b946fda53a7a3388a4e06440d12115f49ffaf999b494f76073638f32c371dc47758f2e098dbfe3f322030e2d7c9b615331bccf187a6d2245a28a2f56baf2082e9fe134ce63233f60aa5824a8413e07d46fbdab47248c4c60f310744015ebbb7384c792827f26ae678a5a483fe39b720eb6982ea43784ce5901910e9d88d17eacc0bcc7c4264cd95e5e73e952b826285882b6c9ce27e920844a864ebd6835ca30d02b64e1fd0818dba34f789f5380a34870a3fd236a2bfb793a5ac52e58ab16a63fbdda8a67eb1565d54776643a1d6b64ecea492292cfb7be5da8f26ece83ec836bce991bfb58376380f6734fc07ef92473f42e6a2636ddaa20db670d2e62c44ee0f831252bf1f77b12d6ffc0ab07c50d824c2d58a913e5e3207c83881cca367f3ba533147e2aee1327536c554e5a6796b47cb67c7fc958ffe906e84e0e2cab7ad8500f88667583a22b06597c2ed9594676e06a542ec9bf46c70505ed76fcabe853a336ff796440ce9a6a37a3c12702934621a96e3ab7815e56e15cd4ebdcb04e19f939d83b69bdeef1f9977aa9a60c03aebb0439380537ad25365da2d12f4102a7ec98a101184399be3ef95f4ce8ce2e0d070b238b254ac99e7ea8b5cb76d6ac99d7c3e87ed28a457b94cdd03f61d1690db01edbb8aa532a4f249eac4f45f9a24c455c2d193afa78b6b5855bd5a3ae5b2d20cfc05506b94593c2dff4b10f228a5bdfb1dd44b40ca9dbfbc070b410cd6ac7e38e5fd4cd15b228c3cd1da554d9db34f18577a5c0396f67e20fbd6f5ba71e7a72eb28ac5fc0e66ac1e685a099981b5415179aa102192fe702b3804bc6d3ecb15966b960517358c627cccb175fd5a155c50894cadc2471d5c86c67edf4dc6c18f171608524858fe77fe06c9e1a2b23a68bd92477c0d3bbc0bd9ad2da581902fdf59bdc8f5b70023b34b1c8895af108c2d3f9985c52bf84146cbf5f85832247ecb0567bd368eb463dd0c19d8d84dfd73727fa8edd0440616d304a7c63e870b171cc31dd15cf2fd26bfe802a0f4a400570125c667e47feba17a2dcb81a1a9cc60993ae6ebb10d62d41f88e1c82fdba1a0a0d8fcdb4a04314c05ee6710c7bfefc30c13caf37b076bd5c693bd37d21b68b6184051314bfc5f7e3aee855bf9f2fda73bf5d1d20308a0927cb29fd7248bde023006cd512d8ffe9ee3d62c4a7e6a7d74f089046e91378a71088d8e8f6f548aeab2d2782438e49516c64d65c5a04ef791f1776ab06cbcb0db34cb9247f99df4d7644b5b90b624ac4dacfc37b4a5c6f36806660b80dec09a39c615b3e70c8fa532101a7d7eed76ccab5c8aaaffd6fcfa60f9fef0c72d6bd1f18712fa58ee5224617ce7e6d726037b98a0a0c68e7b1593e191e8206ba2e4dc6d3f6b6e80e70df9ce71599f81a9f2447c3ee69449dc3c475395cca35685544313b6c7184841e8addfb618af66be6cacbfff031b1940979d1fce51826e1ee28f4db3cffe98420cc7fe15cd1e6dad993dc9aba063e4f14e1dab0420c49db4b74782002b2a5934a1cf925420f57dbda07e030a647594358a4f60fee171ca91faf3196382a4715dce4e033cb83b8038aaf7d3e3f8580f5573bca6863b92ddfbd41c7ca57c72ca06bccbb8953ef85d64de31a20003143f9830ebe662d62ebd3b6d49128ec29e4b7693ce1b275934fc8a65b3d9272eb20a48ea64865b5b4d5499ec0243e5fc30dbf77adf93b9b2f845f16605de2121395aabc8b0f03972f7895c79cf7774d22e64cf99878815f04b20e30ab01bb683b1160bf3568ac4c23544ce3e391601eaa2cd47194d6201bc3675a6793bf6adfd2326ae92debec4f40e6d3560c78855ef93fea722ba8a46bec02c83da2ed9d0369672ddced1f300af8bedda0a023638870ade37db5566ac9df12dc255122be5d712e1dfcfb690419cb3aa05627086715a0e573f6da65ffa02d160ab146e54b5879f5dfebc15ff4f638e8dfe909be1ca11a750060035defa9469ad863ccabc08ef46ce80bd77a7f2ab247e0cbd0bb00954ddb2d5ba8b4972fcc0fd9af8aecba6b60e1aaefc62f0f21c7e6678114659f7cab963f4c62f092be1de36306ea3e95685002ad09e6142165fa32b8bb3d6465c1c424cab4aa987edeccc4290c6307ee10422e62ecef905271c9bb78acc43dd00f28155426f822a7fc591070229def210da7e360fb2b4a1eefa6ff0c0831388aaf27c67005c4159ab13356fcebf34ada9b01c03bd72197f30a226c07401d0ae24c73d682e3a6e7e377ec1613bafba17742d02337e37b005b8bcc80eed6d01b63417cc4214309100ecb03cc49222f8983bfa3ab09b29029c4def5ec174f02f0aa38b2fdbfa673347924eae821c3f7799c4becc605c6f96acb6e3eec351b2e11138ca701d2806dbbbf10320821e2fbe80d822be2d0832f49ebc4183fbccda9f33bd7d97eee53612c4d07498ace31955b73fce1afee999a5d827b122512d91f2d8f84baa387b1f5fcaf94c21e8b226c5a4c169e8ba45cd30c4bfdad5adbbfe6068b3ddb3e230e84a353231c01ed27d95b1269b2e4b65f51dc94b65a3f7bf4a734bb4dab9d44dba5b6d44cc7f368c484d45350ef698913af54e95f99517819cb3eac4ebc5f619bc1bdaf7c4651828ac76c7b767478910c43fbd633fb1f6491da7abaab8de30de1711e412c17aadeed397a175512a062cba837d7edf017a5ff4d7f730e80c6ae2f2c6f45f6dc7db25e5383a3472a5f72b444af6ae808d8c0a4bcb371c23578c6f76c070a46d538b1709e1fabf72c344568c1a90baca5b1594470cd13713c87ecbca89c2aa6c27a60a681b49ddfa89d6f5b77eb36c6776fb4312212f495e66283e18a95039104912472a6d8f55b2019350f0fbc78afce32860d492b71aac3a721285a6841901c3b916766034f0413264ae5d1b34dd34ab8232b4e8d371a64a458d3b0ac511e89d81be747ba076502431592665622db4d7f303dbaaea17f3a087f9625c7aea6ddd54894e463caf86e0e3977461ba42276f6219716063d53c44229c21250d6c378d19bd29496e628c6d60b16f98a2e33379b6be9d92a871293cfcbfa1ece55fefb4b8a3300d9f5909d392ef3e9183da80ffd93787c920b36192ffa90a396a8b3c5b18838819385aa61b60980ad4c6edb708b2cf588c33658d4e12a4839504b8c78923a55cf59f2e0b4cb1f6faead1e5809d29cd3864494d54761cf634861bad3846c050d22a3e9ddf6e6f4f375a0e8982c526784ed8ca355f1407e846961733369ad7ce123f7c6eca8a81ece8ace3a36688911ac3701ee3562fbac2e14d6012698e516545bcc06b76a6cf153669baf9d3ee52f9beb4ae1fdfd01dcc2c325e127a29145e932a745a88cd41114918fa557200525d682de0b3a5fe184e50cd7afa11740901230fff04ab04bf2a48410b7debc57790e9621d654ec1938f75a61a94d57518951ef6c931855531a65b6d5539e545aad968dbceff832176d8c146a8a66f362a64ab643aa8bec77fceac2240530989d47f0d215947eb27a9715f348af986bf25b4f3e3ba33ff6291ea60eb3491fe98dbcb02bb28062fda14a275f82a55c316f3ce1efab198f02f4f42a24d99bd6c7ba9056c31a103f643a0b32c1bee82ce457afa533287a03835a21d98d2d79dfd382475760c2e08e96833ebab2440474e54a47fba11a4137f7d70c56a0156fa57d9366245d336dbb053b6931b9b876dec4957a77c2170b96f0da38041627e9b2265c616040e2145f20c12f3a3082abd4f2e7db8c1ea545aaeef2197457eb84a07e5bbd7d946560e57992d536cf493fc1f0afdfbb0f3b6bde42bd4529ddc6acdad60ffeeec013ffe8904f1fb9de729f506e6bfb872c4ffabbac7a2f87205feedbede79a366ca43dd2d5545325f67546faac9ab372ee598ecd7cd75d3eb7fda72df68113d6f26ca72ee921042dafe7c31b3bba9bf0ddfe748e544342931d46824ba04af062e9f3c8671c53c7135330904cac5a199373856878935c7436b8b0ecbf7bd3b44ccbc02e161f5b008998e63b097ed7b0ed37b4c706da71569c22d362e3e989d407105824b642b544e2d98f3fdc13d1f640a2d31cc39a208e25e414716359fbe424303258c226e108d1ad81fb3f1bd75e303d86c63952f87f8664fa94b87d984916d3d536b45c6cc0b87d75099ce7466d5e70367fd27547bf102e0c395da4ed877153c75b2723b70129d1bef78016ad880dd3789629a1bca165c7bffbcd707a33a6486f12753d6e4e8832e621831a7b42e0efb3a59948c5daf99a8c487250bcb2381a53193909e10d5629813410734e325a1d7e2acbdae1c04e4ef7bbf6c623a7a94219bbdd19cdd2362df68bb2a184cadbf53e921bf89ef5c63d98a2c5615d687c780996fbdd63118aa8dcb4d445bd61090f8b8813f25bf013eed5a96892b8991404c926ffc56f6fe6329a3c1fa066b943b4db593e88b72399eb353c5adac39e2270cee863724121bb43c58ddf61ff283e9db49215fc2f24dabb4dd816ba1d0c0a549147c16466fb8c64d526ae0b15223c128dcf14fd225858c7761916b113574e28a6e1940c6f31cc1e4f82f5fc175bdecbed7cd5ec4f5286a8545be54045046055763255eab8891cc8ab4f61c5942989125a07b349f49806c64f3d0ce82097d36385b6717fe155d0fc5ed85bf80a1fed9e3a1c37a6b08d3bb9ed18f839448639fb6bea814c681c9b3200ca5ef3f7a35ec82416fd8301c6a7ebb49c21841f53e6558f5b0fc0bb61de020771e549db586f18ae745f5f76c8dde41c2333892f857b3a7664778d69ba1bd4f97b897a23b391081fd0f7ac7e08303baa4a8898d39f6af2a7a35302e189d7334d43b6056f29673f1ea930ea9609614ad56eab33ca16381699941cb1b15582957976e56c2c3e53f61169a5aa4d40c39a342c15fa716e552ec2c35f2a57a1b0841461a22ed966d9f5ae9eb06c0242e9c23cff435d581c54a3c99d74cd52f2e38794b076cdf5477b963cb50b905394462b5654ddccecb4c90e04af082b21dd9e0870cfddba1e34bb504248f1b7cf996b6e16c92fd9adabf4d60a5473b442a6429f4f3c4173a2d31bcc55c71d52c4d6bbe304c8c3f429869a84514a620943f163a476623c9b21971f62fdbbe8f1e1d0da2296e034bcdec91ca15fed3d8a945383c08cfe499128e528ac9093ef05852c28b5538bfc843bd7eda5bcb970c8c221256c095cd2e61761da01b4fb8a1e4d2d3a13a13875facf579019ce2ba6443c0ecb1f620a731a7b81b62ae13f64aca87880b626824b8117bca6762ad0487d8050e7432d83949ec3c91f609bebe92105828f2559d5f7a7937b93334933d1e52dbbfc8fc254d1f39eaca84b5b9d921c02cfd7d991cfe4ded118e8e9bfc2cd0ba2949d5dd6fa95a95aa0d35386b0fa0e1ed4dd5b84bc9db74f1909f1e509a4617d7f2c25c1e16a30964a1301c3b27b77c8261213a948ac916bf088f45f84f2871cc03b8029a5ca29c00cf9ee893eb0d98d3818aa55e07c2db633e85985a131dd1f2c3de554b43fe5666dfa725da214b3dc8f4388310096cccc57aaaa0dfaecd3e307c5ddf9a93603f7e19725a779218734904525b14586ff0ce0425e4efe7e1c06e745c28ed136f6031c4280fd4061d433ef700b6d1bc745064231fecf387015f94f504b6ad8cd4c0652af0cd584502b48f166c1baffd23f27021c0415157d4248b457c1343c736670391f31a6b166ecf24a9bb1216e223e0db442f6a731c031639acedc715893e5ef44259817542099be5f818236e351d228bd595efbfa1353d87747f588d9d94ac1e854987de927c20bb4aa9d71fbcb8be6a1b19599fad13a25de3595012cadf596ba2ebb60fcb6f668ce996b591409dbe5f60e42f7a07454ca443a4370bd7c76ec2e068956eb88976421b08462d88732951ea1df9b878724342da8793e28df6f20a88e8ac64207357c3292710595ee3082a03ed40c0c8429021f12beefeb411ed2de292845acad511f95b1a9d7e889562d1f17c8afcbf5f3a27cfb8cfc714c36812368fa4b67f55adcaf80a7505cf303f2efcf162d3246e493ebe55bfa574b169a1cc0794e1079e32204a1e1e54fb5da8296e754dadc11ac64d042a45009d86fbc2eb21dd442a56a8e2977f22d5d4c3a3aa8d2fd5f25c08b83cea60e94058e8235ddd050646b02617f8285409ef210b3b99a348810bbee327f3b81f33cd6b80eb5ae8dc974e60b5884945c65909acdc75def6e7d95eaf511c59b68eac109ef55aa155ce19c603ac02bf35fd9c8d3bdf5b61ce356654f7fa9d582cd6db6fbbef781b6c02131561b28e41422059e297bbf40b755aaf565d88b5d7611e485388184eae74a10da3427033b8b257 +MD = d66832b9f5d269e35ec9dbe48fb70aef640ba53b60ca7bff88eb092a56a5a7181c63d25d567a25c07a9f0ada0caeb21d + +Len = 93688 +Msg = ef4d163db14a90bda8415c8318ef955188538c3e8063b30c92fdbab79720f74a3b5c0bf6bc87c365eeb23c4c835b4b4089e51bca344518bddefd0cc74c4e884733a9865efa684c49c2bb94eea4e5e9b439a8549860fd387e3b097bc47b4de61dde1dcf9df553f5102b44ab9003f33957a1857fd18cf5dbf5b2094dd6ad85d975449e2dda35b184633235ca5b29ef01cec864e39c4194c9cd4ae5cb24685e29f76e15ea3e40ebc2e9dd7639779d3f0ac4b72ec9220542c9ac0c853dd737409d4a636b4cf0a067774b36f0400be74d1cdf74c9798b6367a53bfed2eb169f93ff172b869c18dd8f6b304589273f907fffc7091f3bfee06b23212ab21c0a2abf1505cf5021e07dca6541112a353c1f3f7a257d1757a306b70c06980e1adb5f2ca8bd56b0256e0a7f2f26a2bcb32a1cf456a1d99814a35cb127944fcf2bb0c6427fe6c88deeea0c188f860025e9310f055be2248cbc266ac23e7157db98b1e86a64292ed1c57d09fc4e09344f1f7781dc519166da9553b9521745b81ca9084c0a1d2e8f63f24f8b93345845209d27fae00055a86ae853d0ca7cb97a79a5da7b8c739cf32bbd871945081b3b82aa67007930d7f124fc4e37903374a6d9d652fb562e1c62116e4d3c7a94f91e5c905f1d0fa8bf49f01b6b770e041f4426829556d21655e5fd4ccb7a9a9e9bf7959539d80a31b4b8b68bd217abb9625a47f2ce1366f2f083d7a0265e0defa9cd17021ab9d3935e475e95ac9fce18e4f2246e23bb7c8c944587b2896d3b4fcaa9c91f2c49d09666fdd0812198e1eb4e13a53dbcd57baaea31f5ca1a318d85a6929333970f6a0174e3f49758894bf847c6b2a9c2e9cb1599520a300131695be6905d888394099e2fffb21f7afa7408781233f85d80d4954aadac2b67f5389732ab0f64175e1633405bf360ae73c4e289ff1073b421fdf2a54cc4057406630231ec92107bf7f7894eff9da31d7da35021953162f054b0f351363b044feb50648c5accd4d8e7166802f19a30ee9f7918e8dd7e0d38a15561f773f771212c6985ebfea6f756b4da98043bd04f4a62ae0388dee0bbb59152043e0ce2941152152cf4de08c31ce8aae0fbe52948594daad9a6a03db68fab10a4cf08e3b448e4bb235204db7e530af00990f58c6242e8d562ed2c7f44ed77f709516fe11aed6ac530ab78057122a313dc6a75e0e62ebb986502898caef77e70fa6d49c60f296c9a1ca84070e4b23a7b1e326c0f1c444f59ac90bf4e3cd747e141cb9f79d92473a2aef066021e2a57909a8fe3004cad2b81fd3dd7ab35b25bb3a41278e2c0050645b02cf2a569b383b9172ae19bbe90d77921b1d88de3b3404fecebdde90ef5aeebe803ea400b7544615caa6ec8ba16dca8e095cadb8cff801be1fdd576091bf2fc201e58bb4d9725ed32b8926f8767c1750191b67d79c1a3814af16871fba05ae01e2443fe7742abc661fc56786eaa0e4a4e4ca35af21f2fe8f06e9ec22aab6effabbeb4f0d19d6054b11dc1cbb7084c8e8d6f995c3e41aeb89c1d8051df65b7c28e94b27ba3d1cbffeac4dc51aaa802a887a1a06aa750a75814a5150661f5bc8f914d458634057430d398aef08eb3b802048bc16c7374a33220b066cafa8405cf7a9175facd62e44d35423f91ad50f603ccd5034bebd429ad8ae37983f03a1beb120a4bbdb610a2c0d869971d4da84513a6266fed5799c13119e8581b8c3e8549215eceb8373636ef84b6bf7ab7e22c9a5b260b3bffeaf32694670b7816b9cb536f3507d398fc294401d0be9233273400b47ee11d2af048f5c4079884d6d27670c338fcf7208b022516619c4b089fe3ae76d6f97c22d347047171092513b20d07e60eb70a180b49fc8d0e618f8071c40a6cd5593e2dba79bc624d664517801882a16040f5c8a487302c811645e1c65c7d5d240b4d94cd64856142b5cb28652048bad69da1787c4229bc62c35574c53570106b178f9f3692c834f8009f8f89acc1f917d8f570be054f04586ea68197d6494e5183ee951a8beba4184ea99413445528ccf9d8f790550ace0c21225063c772df7e5951c0a4d558794aa8d17e2c706c0d9c0634571abcc2e026e3b0285291518b9ba19f66f9fa757b3515ff97fbb96e723009f0d685c1df034dbd38538cbb501a5061c2d04482ac72829d1b25a9a6c31d2f09f4bdf9edc9ff29b5a31738cdd55344a3a146abf36425d8480d715dc0d3d6420f28549dc6e89c63d6d7bd7e4f4aff206e240f56d7045de01fbdc3408d0767112274e29ad6a5a2a325bd8c87ca16e68bcb33756eb5f6e2422913637a97c597434ac0b118a566d890ac3dce7bc6a1d02ec0b6be1b16a17ca56ef8983266762d818ff4073eb99407d37240c982c95385b058953384816df3b1f752ab908083f272faf82d349c98f7147facc7c25d94ccbb98b81cd27ec20e0fcb0be4bd6f52aebf92b46b23d6d870fadc6b0e6609cc6ff48a08c12c95089667f2098be1bb4d280f60100833edbe3a2d9063e69456633405356b69bb4fa754607536e823eadb2a0b6af54e8b6bb11c56a37e9974cac1e496a1ca5ea733070da35b7843ac86637a5bba498354d818e01d1ea26e30ef4e474ed70ee617ca918cd8acb9e3a4174fe1a658f6f0b5ba5d4c2908b9aced4d7324d6de1d4a339aab98a671e01132230627944ae2ddd79be7292369aa9cd66a9644d5bee1d2252dbef8b5b1d5157e34f014ce9af791e1021e3eb2495d8610d02170f48041c5120b3375ae748037b1d17570fc501b56fc786a557fb1bab2c6077a6edb2b246d25ba70d739c2c9bff383fd02c67238725084333431a8a9671e950b0631c7741083c4dfe6fda498f46bd0f093d20a352e04aee1a4713712ee40043a029f5d18f757b1e769a321d51f4243b6ebcb1ffad2417edc6de765dd8f55dc7129ccf3f86ac707ef2ad24268889f61b7d257ba6fa62e7d8d573a3af29285a317426194fcb0fb5061ef330e3977abb45c101ee27cf2f4325a2a13be393ff7e3931605450c131c13a4816e8d30348ec30b6cc99f09fdba25acad19fa9bded4234f6d611010d952d920a82ac736066f162db000f9fe10a9dfeca9f5f5feb643ecb20e1cfcf04bc4293d2b0fc5313776362ba26af94373e9e780e74eb74c106dc524c3df1194b19b8b63d4c68e0b0dcdaa6b0bb0a6c06ea1c5d22ccd496b347a360d525258e453fe87fa69f72aaad199fa57b27a095e49f90248431ab2456a91c7d6841cd8c97816a66ab34aa2f8ca05af56616f28034b1a254cf3dcfac0fada01e521e69a296a0b6f1b7a65fddb423650cfde370d98bd2cb64503bb2ac62b7e6ba3f157a4ee6f046b7686f3433d7f57652cf27bc006e7563e9b3c61493e47a58e78bb1800fed02920e19e9a7c05ca8e76d465e3473311c144b566735f0f9476f0cd49d0b643d5a318c58c02b11b6b030c2fff16ac09839550fd499c75235b1a1b086128cca3c59adb8b16d4ea67aae0aea588bdf76f84f9eadaac829161e3b99793ccc84c08ea35ef9905b82dd0cf4ae59ec77f2e4c5e159bb458cdbeb17679ead452573d598a9dde5920558441216b388285055b8a5712eaf4162601fb5a859e35ba7ea87eeefa30313154f69fe96b2fb98af68510b8186000ac356427d8033b1ccee4945e5e736b8bfe5c8bd3707252ab9efbb5c6c94e8341e2a1ee1e381c47f3543209e3213019ce51164cc5fba72ac189bcf294d1ddde1f8212a7c6c2f74c21150f10f4815ac162f02a405dd5323e6112e044621aedf60352329808bebdd10ed924af79c419ecafa33f7084453c16f40310b318eaa555531ca6c8cd73955f226818f05b3394211d34fde22092ed3be322f3489e8a2d8279a6193ffb2aa87dc58994db8016f4e814690ea01a056c349538320adc42ae05dbb931067b2b1db35f064077d1b560c9fc0c17b25be6e289710c7402bb595067e31c962436be1d8958a5c3cc3657014d3de3c31eca7d76c3e168623621193a2ff799f1a1132bd088182fc6e29846fffb3fb7b7ee4e1151694b12a3b0f7c895e581f6ea86f9b95d37076bf0c2ddc8815c6a4f9e2ad1eb9a0319d3e07826af8811e8fc28dad2b1ed1e8e23ea73ef26aff627751ed83a547a1ab273c19495163c3c947354a5855ba7c6131d5bfdb4a8b254dcefdf02719219357ebaed0e2b44d8eded2315f0faffb4b60022ec691695b2fbf3868aaf5ded9edce5700deed28385ad5bd314c219e53b76bbfa45befc37d675d202c7e8e8af31974f5cc83a71196b03464df923ca55658fae6d0d044dd44748e32b3db4f91efcef2447c7fcef4fb17716576b1bf5965a883f43ec43f3b52dff8cc9951b7984246bccf9b23b366d809133ba12b382f141e9d8438c84d522af1f37a377254e27d494b03a30002dbbffda053e97f259ae423be03792cedb62f5324b8289db615032f036d2e952bc8157d9f5aaa2e162158705bfe5a92aedbf28c0302e76449a466609c7888639cb06af1669c8da86866d35cfdc15779ff37f704f4d6fe468e1539967cc25afbd4293301aca5ee8ebab007722a191a435d5ebf4690c0d7c501fbdf390ab720be70970016c81357318ba1473847520d9f47b4bdd95d4cfe5033acd9b0ece3443be09e54c95f41524139cf25180c089bee5cee7525c0e7ec7891ccbba699b36fe4a283a361b8dc5a3e637e23a9beb95fa0fb4067c4420e2ccebabff77277c3fe5944fb6e988b30f9799752b565f5c0c367b16f283d773c39a30d1b0fbd2d816a0a367a28d63cdb9a9323d17cc537cb6192fddf18e9d6fe9d96075286df11684d68056464935458c80bb76ecc5ffb35a4c35ef4cc51d7c1c32847fadf60da0512f3106ea46858250c53b0af368ec6ac27695364b51df03234ca3d688beaddd4555c05dd6acdbeccd1fbbe074dea107b4405599355a6b6ac7d1c56401ec593527ed344551a2bfebca3742e0b74ea6f4f9517fff54074a1bd066f2105fa99a10c1a296a5a550bae711b4d8f203e1849759531a52ee81037c06b533c2ec1cf6d6d919ed6418df5348683f85fea2bec25a9beb2f794cf01ef730668f62ee6ef7ef38fd416cf3771376988052ecda0fe8a489c3c55cb67b23f318210fd9aec625c4a6f49ba47e3f81da691e46a4f4f97fdce983e4e3734a9bd8848dba0d744d07bbeba602f4006025daa2c26a0f37a60e6c84d394f6cd860e0d3d5298e7882a253dcebd7e44c30287df0d13c413ed3e1dbb2259de7d0a5702fc0b19b14f318607b318de177c0d4b305270ba5f995ce834318bc0c96073e4010cb58a0e2eb889368391b3d6852766a799945e408acecddc3686ae5e87505692a5054cb66a655a391701e4c2455979741e41a871cc89159c32dccca4dae9d43e2fc108b1ed802298d53019e3a5eaad20473e3ff949d6e7fd8d55c1a34285878b12b265089d5108dc27e6f9428d2429327e55cde0e7fc6b86afb93563a56e9703b7a00cc26420358c74ea2ce6e64d16322a4cf72e9045cbbf01d0d2ededea2b2e8453a4e72934d13023055bd896ae9ba8b2ec67ec2bf72c30e9623d4800426b93e292d680d4d603509eff2e1e878fe11d80fdc522a05bb962d036217cc8be80ba3a264a934c4ef3754ca04cc29f380f19fb47b8d6d7b997dc1f1524922ba5922bf2d8a72b7be4ca2695af5ecbc8f04e228b91e912b759f1263cc7ee911341c86f746e954d48e0b0ece1f60b42e900c6c298a500dd2a82edc99114288167d84b0d26b0be039b89cc4e983bfc2eeab09e808a49a440187db34c84c47a6a0fb3438d7268c7545c2847d42247d897b248ffe4ca467d4167936c377f9e8b55f21ad778bf5c5b4973054806e8e248862b101077be6434eb00094013e96b0449fa542f54745520e8c968f86d50d3f4013c50fac0cf6a7143cb2a56662af38c4f0eab74acfb1bbe3b44997f90c3e48313cd4fe4486522db53b03dd7bbaafecc6e1665ce05bb76de4acddf04f7aadb9ec1c756f795e9521b229889ea97d0546caefbcb64e91c2e281b4d84af2b6b81ec1510ad5a31c1c3d9b86957b88406bc1317a3255fdf860a43b9aacea9b3709e1616919c36a4573dbc1e0def6909b40069b2f7bbe67061d4d829ce061a171ffac3cc326bb37412886c5b6a9924af40e61886dfd4222215528e749f732ae0e25c9c40dc61f82b596b92776a9d11fc1337c59b44ba3b800a4d0ea3075fff95208e487975c72e5096afd67bf442597a95ba1afa0cb3580fa98cffbeed10c4be4056707fe6e57c6c301cdf6eefd224b12e39bfaa2108a15958d90acb38cf9fe4ac7dbc5b18030b068f7a565845939928477a5cb369013fe580fad7d4d2e4b88ecbcbd314f26903a61b91e241ddcee1674647981ecee55a3b8ab80de0a297384405075eb25b5f8bd53c292c329fca23f695661bf237fe19e4dcdb54f89030478ec2fb043e3d2ccb195a09db3273d1885e9a9f8e378b92a567e02b562384f60cf56a6d6ebf7f19ecfdddfa984a41293826bfbc99f6b4ea264cfd70b8696632b0006526443d096e16062dc40b81f11b5ad66b83e336994ec31c9a7125d21e2d5a381cee2dc1c37370beb22fdbdf6bef17f605be15ff2205a45e21f74367952c3323f58cd151956f23acd403b16c97ed960ff733d6593759f29af9caba2fb17a634b59cad9f867ac5658fc0734315e5d00a8a8abcf4dc090d5588ab233325b5e1138b16eedbb2170324b90040d35a6867c4a80eda8e2a5f374213c7756797c1f66706341b4a4ab04df0cfac2e38059b1337ce7c30821cecaf87c77e0ca0bfa06897dd90bd7baedb08423a0095f1b5d264cc645f39710245d88f2a3b638f1bf5ba2e77994fd05cfbb4a19eca1290d9c2df0b00246feba8df34d0a28c14731b166db34ada3cf8e3a6f58754451e85efc0e47c38684e524f2d66f4c6ec9a0d5ba6e5aeedc02f55c1412d7bf12e24417671078863a75f3583c4c1540de96eae4c1bd479c6d77167747edee80bd1de73fc47cac8284e0d15d519e676fdeefce67ad99cbc7cacbdae8b948c63eadc776defb9a0a3dcd8f273b1b148e60d79ef465684b0ef65ac6ebb6546b86844aab9cfdf3b2bb417e489cfa81f5b29b326903e6d91a37b1852feee9fe9d57d7fc90ffa2960ce616fdd4d8a36a8bfaa95519a4f3e8506e81b3d08e8aa12761c12b3d47d8cbf0b442b4fb843ec01c8f11aa767e927d34ddec4c6f71a02451cbc93f7b1da47aa54d4f098448d16af1995b97473ace800da97cb8d53f336f63be78a01229108b74d8c56639cb6650523f1086567facd924fdb960caa14c6aa56154b6ca1223e7a57d2a32e0b6045a86a9b7de69f63671c1ff2aaa153ef1fd5fdde7ea6b80e574806608d542b0b470d700d8074946732e2bd757ff80c02d10d859b9a2bc1d5f1b4cb8e6b727627d7a8b6cfb69be186bf9acaec8c8d1cc058b59fe5047868e98c5539e4d4057736760eb14a96c8f1427bb8aac066bd10d83562af33642917e9858db3ec4d8998c7a0a3f21697886e1ae5a0ef898524828ae599361f3f9a59368be2dc0d3e7b655bf60cfbac4f5692808c080bb06e3fec88e7ddc700dd68a750fdd914d02d577753d4be208414b01903ed3281cd988ba932ca84c470e4007cd959f4e0dda0aa195fcb1c23368e216c2577d4d4498a846318fc32c0f7e9fe64303eaae27e2eeff5c057cb562c12270655ba4395acbaa684bbfb7c4efe35aed7e60a8f7c3a2e958735f9204bdd574d62253323287faf8e989c56a5c10c7dbe527b4c0720ba364738112ddf76d2b3e11a1460e81f3aef99092a8c63c9ab18995e5081a67256cc5192f2743d59a4be9ea893c206ec56e15270f70b2acb42accc761639e1e3986761225a5aee86bbede26833d504026c3b474a72615f386b90c4143cd34de7077dd260a940576090b8490365286413d343e4103d1d95a39e6b1cc324ec4f1f1c9641d87fd30c89cba42ef4b82aab733491b54ca79e529f5392330d6ef369de50372be43e716264b54820a69d6a4eb2f8ab475a52621a8e13bcb35d8b7722b74ae6ed2e75aa1d73e60abaa39545c255a806f6e3ce1751e26730fa3e0af60e3c551c2211a5eb8259e6625976206bbaddbb2b50636b1c9d5eb69584195dde90c0174d57385fc435693ee57998df4a7cadba8ef043c9f051359a60fd8a04bf3ef4fa00f90cf3b2bb34481ab78622509c582eb8331f5b2112198b19a30a80167d5d85bd840a1245684daa688fb88a1cae6f702db550af2d547cf12631156052e04c430984aa3bdad117ce656eca870d07563755d3822673acc2752d04352612ec53aa4b7777c1018a153c87e11699b05baedcd73a1e61a26fac7f84b8d431d515f62419d8fd525807e87d46632742850fdbe918459fd128217d78c3bb9d23f7e1c658eb35a5502cbee3f92771970229885fd49f7291157376c8197088da6d19d426b135f9fa5b1e33aa38b198d068ec79bd37e36d7c7f22c41eba019d268da951a9b590a286c3aaeaadc46b555de76c48768b6a82bc9ea48de3d2fd84fbf6350ec1ee71dbb53a31685124bb13a9fe17791e37cb5efbf47758aa0ccacce5473b5001c45fe2102f602156c237704f2d8c8016d55c5e950129a8e3c00fd15ce12ac9dbcfc1722203b59a013556d7b7e629f1e2dcb40e225529e32385234eed6481d0c2693cf855578056f2f69fd66ec87e4314c658fa3e60f6bbebc4bb71f141ef09683928d144bb7edcae7e88e8fe34f7f82f1ac18f13a51e87af271ef702f9b0d81fb82bb95a7fff9f8635987bc0cc3585945264497c921fdae004f44abd0c85d15b5eac0d114591143cc4452b60fea58fe705d7b5b3c8692a10e6a1f969eabc69cda52049038cb1df14a31564593cd65b899d926073b898f9c454ce6fb424f315c9142ef99bb60054b04a9fb30407268d1e820ab616d31dce7cc7c03a063b9879e0343e9b6461db1992333a941bfe34a8f86bc74327b8662cacc82dc4daaf3aeaa57dc5aad810c0a23ce58c83eb828f13b9b35e7410c90078d6de7dbccbe0490c8b696aa471334f6302e9fc0f0d247471c4e116e58c958b477d63266e449f4144048f8414ca59d5e0a6b90fa1fb64a337cc8da703d5ae552d130ebe75cf0cb2159348a8784de502bf7acb3dc930c389ca1311755b9663fc7e3a29ac5fd5d92a15da3d4e5b7675443401991cf137b1a6cd4b0518494956ffdf555c8688f38517b92bc5fc1ace7b1902ddbb13c69abf78a5d6d0f6796917cda4f71fc38da280e9741a8b2842c0770f9051a9b895b45d7de8491d96587ff6e48391dbf9da5d6d3ddb18e5597ff6f986512fdd820b2f1c350914437e62e8a4e2efa8198ffbaeaa7352c97d160edc631be9aadef673556c1c8cbadb25254d82373dbc60fc6df0b9387f8ebad49beb444ebe65268c8ae1ddc2e7cf5d112c191f5012414ac5adde19dbb5eb171b939e3d7d43e13cca9e3ed196aea431d8c3d5eccbf1d92f8237b15d0b9a612a61827f8f561e918a2749e6f82645dc01d2990e7b1950d697a8a834f31691835d3cd509ea37a318a7290a54b1e051f94595181d3ab6b3ec0baf5bb36cab3fc4380427c7beb075c91c565c028f53377e6596ddacac329f6c041cded73a280996335de7337d4f0b354215bb9ae10d7acdea6e3617600b87e91967bdfaec1b638be7b09fc7b661d7efc11da578676da07a6c71ddf7c6afe1e5a42655a8e303f217bd92be1efaa7605b01a4a61582f22d06344811b8709e41d44cbf525bbf6019cc3d8ace83aa7e48f99c613a0cb44994f40a679df3de652c576bb920ade1be6f1befef5da04664d66de9c9ddc88bc26cb63736cf14608315c1899a3cf9fa8d56793d66c7ef7ed9bd0a92451dc379fb08ef436c21a4b77672b54ee923da5a4b5476be57a9eb946b4161fe7956a7ff621de1c74e222f43cde7a5041c61c991770d96db58700f27982806a6cd24c08c8600402b736d1e85e7c91341aa7342209ed65c2cdfc6d4b8ceb55b23b714b7b1d5548d08625efd0e52bb729019d4ce983143391b53fad6b89d9df1eddd82f80fde8f1ab6a174353dad235577f102e958ccd8b03f6ba88fc773364d7d971c0be710149bdea74961a445953e51b68a0cf2d00b44017d4c6a35fe12d05b7a3c6de8088962e8ea5b0cc2ba759fb5e0d6b3f6d95f76fa0f42e0a48ca82ce00d5088733652126de10591297a68fc3cf68578c54749cb819848ad93ad8aa5d3b714f62918032cc631e5994913d3d62f6df2b5fea86eb440beba0b83ef2efd8f0de6317a2c11048a43777f92054aa035bdbb15f38b12b3bfe91384d5a009768a8840c4d6e1105c329c47cea4dd41fcc87c5af3545dea6c578de1c4398ebeb34e9cb12acfe5657657b2b310e1fa3e4e50103ee8819f6a208033a1340009933653e1b3cde597a4f5521d65b0e9eaa417751ff3601bddf682f260de4ec99f3b7222cdc5388876335bca32bc591d2d17eaa001f4e48388340606abf58f16be1be943d76205591fb51c18a943640c401e2a595cd000492c871c355b837f47e4c92e2f85168ea7e28ea8d5d7875c37b20b691987012ddd4984582716049a0db1a7935e5d5f6f256d44a47a43f4bc1ff174295916f4d7d05da02c24620559a8935bcb58d6b911321e6b718e85080e259cfceda093479892d76f1ae5a5e258d9083a389777900f5e8467a28af15dccf902fa28888265eac54535a6b38837f1ff9ee75da2b690c41b3dcdb9e84f52730ac1e06c694adc38c835b852465f82cf8cb5d7ccf32a17d9f889021a2ec5828acb68641bcb73172d1c275b9ff6a24f4c10eb7fe91138b1bb6714a965e71a6a8ecb54e9c93781a312417894024d06e9e22cae64447568dad2f75f280f79a486f98b15e5f735fd1c92d8c8060bc1f40f4c208d1961a8411fdb19c702898efa44557b29ed283f5bc0293284062efdd01bc4ad0603b32247ed1e5efacd667f923f2d1c1f63cecc144a3fef3b28ee49418bf61287b7db6be3cf273758ed28c3f2d3dafe54ee7d54cd17618f6be2bc4cbefc5b01a0aa2cfdbb3280237ff63304a2bef99278e19671ccc4186384d83b60bed96dfadf5f3a4024b3a3a3be5d27ba083d0368d9e1bcabb9bcdf3c145dce3db7af995e924b85ebb6cf2c58b2a6894cb9fa82f22663525b1a8e2059a907f73c3feb77ad78039248e7e16482fb46aa453e53f2bebceaea0845a4764ca14b48d4be198377eefbd1f04e96f6e2d6d23d2bebf5dd3f2bfd065be18c6b959bbc259fc8c6474e75a8e76a415c5dc8f3bda479694c9cf3e1fe199e64c25ac506bf3005d65e3d818aaf252f66ae03d5d08d62a62cc4cc6d7d82a67855d2de4b60e8daaf7d5dd0c1bc532db835187379dbb60a4abcfae61c6d0f3f522b3a60a938bd97e504519b8f8959638d2308472593cc0ddf804b74712f1846b45b658c5f0ca1fa5f21b6083b50165926c709d9798733efcd1d52e20c32124f277ce0bbed4b3a74765c17a155cf0e910d77a9b4e6348222abea9dd96e24a1cb23e63869d472eb88a2f9d2f17f44c68db9db5453ec1a3b38e48e98a4f7553b5d225dd920951239b99da19473186fc2b1a45886510ba6c3a51f6fbfef38724347ab1a4f7aafb7a999aee9b890a19e87af6585dc16c568bff9a5148012b1da5e4d46c207d294c1bf8b6f18dbe4bb5f89d975d9b23f89ee84a92e0385b9f41be0c05ddb9eb2e4dee00146d56ae9b6214db24dca9515f996b63602b34d3f6fa57f3388cd80b6004dcfbdde95e21a329247dc65ef113474ffd912ebaa232d85158e29302e3a3687bcb2f38ee0ddf0b1110cba46ada3359c9841e2116eb40ef4ca9213ec6447cedbaa4e54e03cbaf7a23c00de788cc773c0ee95063c678c5e0f632f86260615e98c7506546b0005b98661c8bb6402fa9982615701c52b0895654dcaf2759a41111acb6f7497d14a90ee20d8d3a1b6c8f171aefc57343fa53f7708d8db438745cff71bde37ff36f62849f795a9aa0e9f25ff15e99911fc0ed6b512edb328538080b1c4f700f99794ea1a64a3bff580f9918b34c329e71691d5bffa8e2c8c95adddcb753e822f79b340efe667891c9464eeb69a0d9c1be5dac6f83e1e79f8a41a31b49b091df963bdd73afb759777df7d77f1a42d6229003624ee4c335de5355226fdb50b46ffdc31276c22325dafc88fd7ece1971ea6ec506a12a3513aea9fe2281741a98f9b49999c23e9426e1cc63888d8d0ff241e10a620f5d1ec83716a46af81cf687a644273afd2bf1a2b577ee4056600ba04e703b3c4186689da021afc37ddbccc79e34d3bfd09122e27d8593ed814ef6c53aa3be5ddeadfada125387f5b8ba84a1080c07eee2790e2e627cb956b660b6a72c02fc8d8fd8bcc7b43294c850c0075d0c552a91dcea9fce8ce6c7449c9d348e4d165d93fc1196abaf483f04eef63b43d496a46e65edbc09224a277fdb0d58c4c5664a39cc5f70d02a1dee703962099b8557dc4e26894d284d3140cf1cb80b90bb7a2945a8cb327c4e370ad5da0e59ac4a213cf8c6c63b7334227afc07a7333957db6380375bc4f84320fcfb780214bf497a2b36eeac6c3200a53dcd43e1b908c31061b222190e8c30602baabc45201caaed11ce4644c9add842f10b796e864524a18aa3100df97f3d7dfeaa4dde670b96ff578975953a2ce582fe7e50578138a517451aaa3e6b1b9401dfc2d5d8d0d4353a632f24a7a8f64eeccdee71a391286bf9fce198b44da65a7435bcf93842beae259e88fa83f9543c09c423835aa05fa1cf16be81778869ba5c675e6308a7122a48705ba030178ed75f4ce42f8595236d22fb7a0d9002acda43df71bb50e619d02c4272bdb6e8ec4678cefb1d2a57bdf77812dde506a5b7e2b004bca816e718c9587a93fa1e56b5b2dcb02ef454d075685cc5aeb1e158d1fb2c3e09d364925a3c548287ff6f483342115c465c08e792e8537bb7182902434d3ef51ee441cf2652a9c01673b1a5ac1fa1380bff50845e9ee79dbec3e78d56ff6e91c482b686c332de9e07ffed57697014ae4482338f1fb39f918c5a23e04f39447ac355c99f7a067b82244a2a45b25ef024bb90baf11e4f03c0e984e3e379254919e306840293f309d633fd7057cf11bf0436cfeb90a3989c929ce9317e1be804d4ec3def9756230f01fdbfc77507b008b57ee7d055f5b9f1706f3214997cadfd14a5a111470abe156b4a393887a364549f5b8171285ed88bc02807951ce59abd42d7dbf2f8f9eba37ce212ca75eb542a2a9445d4f2241ef0eb900fbaef9ed7cbc44a939a9369d3429c8cf3862727a912bef3da039990b2aa5a6ff38dfbef8daf04c6701201a39e7933128472869f8a94c33ee90607eabc41748d5b162620e4f268131a6128ef73d1a93a6c99789b2039a13e19e3227a663ba0b1ed5c5978031b5af83a8ff2947ad166cd5400e6629288c0bb13a4d487d62248a554677d4013b2413f78a546dcdd01d292e3b1b93d090a897d7e51045b347dd32f363f78c13b4085ae7baa0b0dc1e95653c2b3d774ad45624b03f09a3ca9d5a9183ced3440a44c8d0eeca62b70501258d6980e2a4fa5c3b4ee4a8b7d735db132270d789708755ec32672a18d4db20342e40eca99151a0ce82ffa2997487799d52652e88b60d7fe8ec0b6a419ec0f447a45ccf00b1033a664d4bbd3cf021f15fddbb245f78ff2b556a25fb6b7948e5e6ac179886a86191b92a537900deb7fae0f10d698c2deed0a849516e04f8f57d87820bd989dc0f3f3d96c13683949bceb748b65e9d695f1867e618329c923933a0e29422a8c06eab4a0effa633c6501559415083e1afc25afadce4d990d996a0d93a5ad451fa026e851f7928afc877472d77567a1765ab21079a41d38043903d76f5da9f23ed5ce16534c83e462f73dcda6752919d2f9bf2e4baa9a0f944a87230916dc38d1ee0bc70eb6767956fc85eb67dbf6ae161f759389a96d25a6161d76cb9bee1fc0330482eafd1352c1df7456847078692b15fcc69d6a3d8223e3ee5a1cb388aff3ece2cf4fe8017689e9319563fc5451f7237b4fedb2b32ff1fa2256642552f15261cc36a541e9ed985fe5306e47356f63901ab7e34c7733faa3e0f30cbaf3ecc6daeb4054ce72c0d48cb7af0b18c1c957a60384e5ff3096242550b77a3a14a8359e6674c45845f627b7d09ba438a06abcab5b415d92866159ca9b2c176d5c2e89f6665b5da609977827577ca0707b5778e84d73b2ce239b80d8e9da4b1a7485a82a137b888267acae2575d86786fa9975a5fea44c7bac4c819861487f0b03b57c82945fabb2073cb3f952396142c439992a995b9361cc7c44522cfe1906b2c7eb45128c30ff904f6eeb1526f66e823fcebe4421ef472934b04e718483d429c2dfbdb48c7d31abedc743e7288ed0dbb1fbaa277dc8f66b7bafd35963233d0fae3f30a3e5fc10ff1fa648efc69132789908376cf786373b5a292a0c2263080c94f3e70622136335ecf3435688675a00fedcaa381791d041d8049cb149aaffca7be22a06c82cf4f45d967c43f678101ce9614eb666518924fd296f71605fe8ee6bf641cb61ae89e579783bdf992c1e74617e6a0b6b2f2c8cd180eb73f0ec8c236c16737c7501ebaf487fc851f8ec4baf6e1b4562ae917f235df15ae080b8b30f872a09428a8de2fbd2946ac29b1e5e76182128e1b8e04c8ea86502df992b245ac31b4b442ab9367120a06b5a0b2c207068765bb010855978bac22d99c2ada9ad29cf81abdcefaeb839891140cf7c5946650326f83ee66e879cf2213583a608b0bf2ff39e299713792539a59d6f78d09f18b0d1e1cb6d556355db26dc647e0a0a8f23e94697172d5bed966e9874864f248766a3923e81d5b5ed6786b6ee9d7763a194aacab0d8c407988ab65a65109c7dbc0be5341f89b5256d7d87eaa86c1765fb687f53fc42a0242efcc30bca7d8051bf88e0eef7efbe5adc0473a11b51b2b6a789b00902be885bb8d3dfd12c35c34896c6d9e94d1ab8fd42e69002cdb50ffeaddd85134ab246543cf950d711a02d0b4bac1b4ca9726bb5a80a27364801f7e6134e459a5c87a0b6c5555e4304268642e621ed40935f9e2b15587f64149b3215e3c33ac5c1a65f2a58cf533e8a2f95956d0f96ed94491b0791b8e2b5b7ed88352523aabd00754b57ff4f75ef2d2323aaea5d5f7a3398a8f024129651bb5dc1ebdf58dea9a15e2be6c1bd0e7f746af82c64f39010f9b40e8ed74ee45fa855a4e11b491eb22cc8c87ea7016415e76cdcc1e4b971d66d06148ab1541407043cfabfe0deb2002a1bebc8b704bfda0f919711719749f517f4848cba0c6e73597a8b2c37ffe1ba23be5a6bfbac69f67342f0c5137562947fe7253bfb5f3ac82e771fd12694f4099d1bde107be2a9909ce5b185d23b02dc2e48be407b33bf310c9a7e56b885331422993e5f3e8fc6d010e4a0f8b7d172f5ab7d1842437246d47a4d6f62f2bae60439a044ff4c9909df59a586c7c91ffa067ef0fbea590217d900f8bc9dde1c55006b98b699adeabae5ff922a9a110de13730072ee0c7cd7a6926012bb18391c8313ee95dd46a68210988115617958471b2482c7bcb95b9b7ac75d18543e90286be3cfc015989fd85747e8cd0e95f6af09c4ec6a854c9b015c974d091fe1958d8d0ed376acf1590304e686a61b677a9a720ca3d7e226d99dde8ac6619871a79068fd8035fdf130868becf13d127e327de6345f8c5de885b5833a3fce389f44f582285c9a9318d4f76ec3aefe8e3adcedd904761452f23e0cbd0e3f8b9aab0c115b27cef106c8a4ca20131666e93dd84ebcd56dfc5be450f81e7f4c4619255b6876646df5c3913e733253ce02ade79335142fcda0f32f6d0c1a15cc6a3eaeb18f4676aff553f2f08737fe4c5e56d8bc25819c0bae9343e0bd225a568495a7bcea5dc70b9c327e697a838b07d67e71a1945772ae81c6c26a8fd9c561119890bc0e2eee1746d98407c1b77297078f52f206386c3ca7081b5908a2ef828dd20a6d6f3c543971c3b469f1465d506e03fd1bff96e12c9ac1cf4a9c10212175bc651f81f88218c98b8ffe9da2a3ea8666c08de4e57a04e9ae4e9dce9412c455c24160eaf6000baa9b67440b7edecbcd424dc65ab68f3bf00829e124c12cf1aa7e2fc00eb746a8917ddab8ef1d666acf011563c58c99585a79d1b31309e81fe06a70bb61bede661a9d6aeb9d10f34de83d97d4b9da30e0957de6622de0dcd593f1b4c1887f2fdaa284985aa9fbddebc54245a7bc21ee4b2d7ec89ce9e8638931be7c60f77ac35cc5ddd364aa30becac2d9bf3b20e61a1e7f1718c1cb8314c1462b382813242192f0d3bcb80251fe718d4e552d9ca95cc126b1275f373379045dc26865801dd2e3c030b4b336c21576712ab7fd93fe1ee9a0e794e3d18c08c8c50e9dc7a2ca5fe5906f4bf4dc13ac201af958098b26e8ee7a24e1fe1eff3c95288a48cd1fbc110efdd9e2eb56c91b24e734a5f006e633461ef38eec740f9ce004afe9c43b55aec6751b2a053b550aeb6267324f8bae96970bce0c5d753fa23fc5f9f16baa4971b272a +MD = b2adaecdced52a7bdd889c2cd0e8162ccb2212d6ecbbcf209fcfe7785ade1f07ff904cf4711db0135b7e47cad876dac5 + +Len = 94480 +Msg = afb60944a830ad6565df306fc86ca403850d7c91d761e564729b5adfb8e272062ff8fd40331a505ae828ddd0730607486a42346088f723a9a6f180f3e611b5cc32f30443e5cfd2f2c79d463b3f7d13d1c455927a95bc1414aa1776d6ea01f6d99ef144d72616dd32ea869438949871a57d8ebf69647861ac665565102a7adc365d38e8835eb916243a2bee4fda20c9cc7b35e3b55ff2b17ac2f2752710440fea551016d0f57e27cf9dd37d0979dec24fa89225e4edf4ad84a738cda5032638fd70c3f644532eb83bfcc869edd9970535eaedae807544fdd4fb6d96126aeaff789498b269e09170714050d98463163a862b8da61161ab4872a8daf7f4af560b62abd66fc7056ef8784fb4f5547d22084b52bb341d18f1366494c719d5393305c39cc658e4288ef758133ce7e79082178b47bf802e02de70b4a97b233c704894a34fb0924ab3ba161a732fd4c505ff104ef2e1b3cb873a9e6acd403eb2bc5f610bacdc48810cb8fdc556d7e77442619b9c3b69f57d0fcc688cea5c92be853e13029b91a00f9d505361a67a457eb1705f7e0a9e6dca025d7424e71846e833ae53910418c27ecc4cc1f74a61196bb9f305fb47c9443dc8b56d39acbc83b82e77c9bfcfb9d7560373ee8d2ad489c1c1b4341cda32a15bc99cf9d4219070b7df611c94e4bc071da98c832e2e1abd0a337995e8ab21adae6edac0fc2edc366cac34f5182b69795d256027df3e7ddecd760bd067a2de90bd1d366bb9bbe7fc5ffeb7fb548d08569de1b783aa42431493f2328ca1a8b071103f7aa213b0faeb193eb3d74ff0e0c56644583e9622b586e30fb5719fa3e178303d6c0c13f55d2b21d2f130113e3aef3fb60d01abc61b5d45355e28687db7cfa47dd552c07258e3ff2436afa35d5efcb09f9c74f216bdc041ccf359041c7b9bf4697c1c2310333b3c9a4dfc0c3794134168ce3e72fbe2d8603c3dac7c6a7407a9682b1142b5355c5f9efdbe54b2245c7b776b08345bd4cd29ed04c7d74dec384ae1a8d9274aa76ef0970d9d84b85500e5353b793e20d9c6254810551daf29595f3ebc1ddab8d19878ed4643a3307127080a053a9a303aebdab328fc5677749070e62f8561e5fb037e077055b901bef86a5f93f250753f65d29716648b8d15050641c9b8c6bb6dd78a4f537ecf15859c959aab4a66d52f5c955da036c4d954e2a8b7525f11216e3b242cb664eb530d3b112516eae63a54f7a96b8f1a0742794cdfb0912148fe4857d50662af18a3a0fb64669c79d78bf45f982baab75eb3cb6d32944fa7753c4154244620085bed840718c704a042b058bcea03bbb6d011936d29cb54989fc2a25a9a52b617be190285b5ae18062e90c835255d88be65451a744cbd689dcf78b390bd93ec834810629ec1859e54a3158bf2d3a0db782637a5a924d3535e0c46bb1f18718cf401b8ec79c6b35f31aa26eb1c7b347a8c1acf7f343873dc825e14042f30555c14f2fae83f4ba0234649ab2edba6812da14af6ef3e1006cdb2cdcad4e78fa5268822bf9d17d9b4b23a8a8d9d56dbefbe5fbc923cef35f5ec956250746fbccbb0fb99ed542af757d3b675b280b6a2e6f3707a8caf6e2ea702d4248e2cf03f2dc313606d559f2df1506211031f2283ce96798ccd90e48383d6161c6d4392a13526787e28e89f03eaefe56668c1c3070f6d25f83c2778bdf3320450d3037c6949a3d3fb05555202aa79e87ccab0c1b5114119c8c0bb53635ddc45caa9b2d71fd300cce0ebe3dfb199b5125c0f3243163cd9000443959cfd2b9d8292d899ca4b3a060a34c4db6f98206d0c0d219071b0f9ff80b2acfe7c14c43d63ae47007e76e67d36ff77852940a5677d97e612740eae7941dce33c1b2f90848f28dd2e1a273f2df74aec293630926c0e0348ff74b5c510ec89cf97a0d6f73aaf08846dc7e7adddf61c0b0fbdf04d4467582ea1982fa48c29c25a59339161266a542303ad3d9857db7dbc7fe70940b72f9e7f3e0902b5b59f8e6bc8fee936116916a139f3b168614d75e7c0dc02d18d0edd251fefb95e53f7f5eb2e2665dec35455e857c2cb85c4f40d741bc3636a8dae1e078c71d9092dd9ffc0d1d68ec204d21adfa541145748794c4bd8c4b57281b4680dccb7ec1d0cebb5d3fa34ea489c8b6c6e6b991347b4843b543f097f512fcbc41f29ea7a02b8d81e0cf06803d95228537df0f150bbd2bce07897b7496e5f993925e932091ff9464253fd9b61deef51d7f47d72541c68ca459d2af99c33dbc6cf0755b623de97de2a9167f58abd3cad01bb5a43a6d33f5572ac3ef5fe076afb8eadb59f4fa65947ddac779d08e0fee5d8bbcf8ecf461f066d8e1cd3fa52d3e07f00511416e00829638e75bc63ad00a064da247855dfcf8540290cbc157ddf1ca9e6703efef26c2ec51da979218e0987ae01a02bc2051979f36755d8d9ee565815485c4591454dfc0a435afdcceae042bd198ccf9d1fc38b8c2f414ecd0e003bc90f5b505741733b3ae7d26feb284e789a08308b6f979662156816477945a46ecf21b687d74ea6945ef157f807b21bd14bb8d488bfd45aa795fc1dea66fc0c982f68b51399d5adae7d4832c0a7ef0ff7da0fc0ee153ed70115d29e601b99fe62efcb9f1c253c51339fd6abee5347f18f4ef73be4f93dd4199cd2e1d0208643731931bec904ed5ac8cc8209ab94228b44b0578f92f4391b9632e42d63fe29a375b4845843bd4e90170d34961ef0e8a3bb071602218d9a7221dff0cc403cece50dc9abb6b2d8c9bac869d49870f101029f5b1eddb94dc8a262acde04916236d3e55f8e203dddc5a283e94b58c81fd67096b5566881bb2c7300a0961e7bf96e33a57e15dd0c55aa0eef947f1e4f01cdb5481ca6eaa25f2caca4c401612888fecef52e283748c8dfc7b47259322c1f4f985f98f6ad44c13117f51e0517c0974d6c7b78af7419bcce957b8bc1db8801c5e280312ef78d6aa47a9cb98b866aaec3d5e26392dda6bbde3fece8a0628b30955b55f03711a8e1eb9e409a7cf84f56c8d0d0f8b9ba184c778fae90dc0f5c3329cb86dcf743bbae704b8acbbeb39716c426ee3e0c5396f8014b6a8b5f2a2492e7fabbfd57d4ef5a994821533b0069771f9fe33d74ef4945e43cc7e20ffb0ad639b09b5c3f0e6b6cd05faf3ad926ed00410357fdd7d859bd892a6e9cd6ca378686b4ce009837586c7c56d988826f4d39931af4871f54ede856dd06c19bded32a35cffdf24898dde204f649461d21aeaa7bac5fe232ac2d4db41c385a4680054ab0c9d03839792357d207a77c92853bdc62804316fa2842740cb0ac6dbef8f56f5e6aeedc512251534d519a30c9e31956b15f462c5d0f54e5c4620905ed8ecc20a77900e57ada905cdd9bcb6ca98373a0ce11102b45ab8a2946f8f727ba8ab2e6f3c0ad5c9bea08fceaafe2371cac6f43235e4a1b99420dc7f83a20dd0d33ce48aa059e489c9ae0badc53869a0aa735c6160e9c04411d054744f2292eced249ce34117ab16432411e1c505f9b59bdeeb111e8adef2484993291e6bd23e5af4a00faaceaa0ddfa52b1106e1645f233c28d7bb526e32cbef10e46df82c23b12fa67629d961bee3a3cfa2174539dbd54d8e0bc3daee940153666cda52015b643818ad5ae252d7f392682b72cbdada26759353c48ee0848cf90bf8d0040243f8906f1bca540db794039cf3b5cfd7c8ab36c11629e8e482d3526a3eeb88af5bf2eb1257d4b8e2fc2979c6b13cdbb125b813afe980635b1d58f21995894a5931c78abad8268b830438678dea9479e78ff19eb83464a8b4c2925a82a335e3a0340b01c1131c465e6e455f5ae64924eb55cc3a629d2303a20113ee4dce7dcf04e111d2cdaf4263e5a8e4b3a65ab7574d15cc79376a581e7357624fd3adcd7707d7909018f3258ea9327b1708ae8b9b8d5e66cdbf427043c943e1d1ac97b1661985fbac6b85220129998cfbea68226c1c8e1fca62bc083e144537263132a636ca5aa79a1debe475e75caed4d40e18438b237bd1ba2d9c47e4d9b6b019f528439ae448eba88dd95752ea45345e06d9bc49bcff863e1d891bab8004f1cf55c426fba14413a3e17d100cc0d49cd0f8e330e8c91f4a57027b03d8c6968db9eae65b6d202da4988d4c5a658ef160d53ac13bd8c65fb0ad82ce9b0d1bdfc6721b2b5b8fdf6a00eef7c3710d931032e372f047aa43353baa05106bb90e654e806cffa1a43d8dcb2fa77f0e657bb5858407fceeddbe345dc50fdcd05d0cbb885d66cfb87ac90d75c322eb8cfdb755db2f80439bd395d19997097083799546f6618f381a54107d6351d0756736b475965e6260d93c689171889897df8f369c3b454cb541c09232465456b947b12199698924e11168b508782223af5f1e7f2fa97125c3c950ccd081332c3388fd5d35a7485e20eef8f98b0fec41237ca7cd75d36db0e01b853eec9686a750b56be5dee21464cccc5da4bdbb5f6790d2abb0034ba36496a2ce56cb08b77ebd579d49f9ac65df21341754f50ce40d73db9aa56c74aac75409acb3105a4e18b5e9f1f81a58c533eab0b678e57722a94902054bf5d0fc4fa4ba90b2310dd2ebf6d71a8ec599aaf965bcab8ee38c93d18ce07be24403106405302af2c185ce8eecc9776c6fc19f964ec2671593afa00ccbf15f26eb6d7fab0204cbe336749967f41b891f9d730ba0f27c999b6a62efc162af3f783082929b07930411f43cdc1dc957c026b320878ffd15838edc48cb75fd949d54d7e501aa928563fdaf510f06c908dd00655c8be9cb57e57e5dc3dbb1092be94b35f745504f365c04bc439ab97f99003b08799114e9ae1fc883668908f1efa3d9cf5bc6327a306cd5afa707bc59a30a45311a3fb7d472932bd1a36bc4645a6d8f28651cb7c00e06cefdedfe65e3913bad63b0d039185fffe6ccfcfc99bce6a6b9c5b5b1569d19ca8f2b7ab76ca9fe14d214d00b2f21c0b6a7d9e5a3ff883ed0082bc01ca58e0e1864bceffb3729443661c8fa38e08d4f47dd9cfffa4c42ad89e8cf06b71b0f35810e36b0124bcdfe00baf491f213c75623f66aae882678cd24ea241c292d9d3a84da0d5d951114a6247c2c29bf3f4c6ffb90d763a6049718417acf52eb53b487a456b56b0c2da9b6e1f3d43408a999070f2b77d20c7d2a195019255d6633e1976012d34ae007d9baf9d08143570949b60f24a05c03e6ae3ae143ca9e3234a104388ccb8fa926412cac80b7da32d4baf75c2b057424d7900775992397c7ec7f38ae2322abd00f5c86aa82fc6b24728945769cfbbcf7c67c197d77d4ccafb1d8bf21845d21ed39a8435465a3689489211afef91788f549cebb796e32cf522b4a02431eff74692ba10d3a9751651b8f1f0255ddcd8a95c80497e9fae1f247bf4fac73516e35cc5bc32edd969ae311dacf760ba9a21451c7ba295f9c46e7f8f4660842da4dc89f40ab32bdf1c4652012def090eb29c8d1df6bda3ac0f612fe5109b0320802bf5a80b5a34c27826dcebdb9fc7620c91a7e6576351c1753f5c05bb74eb169218c76827f1b18a6496f6641ed143bd9048bb00085c473fe0522d78b0b0e517c2ea28bdc63e4940c7ddc8f35e4b25272608f2f16f702c2e37e0cbc5561a982cf8eb3f2e500ba5eb8b447b2003d614a8b61b7343f667a99762325e741479ad5c1c6135432d1e6c9397133773753ab84928c7677d0408658148900d0e5494cbb016953184c63f4740d39223751d3fba116455f628001c09f4d341001a7d349b2ececf5c7a8138defb270868ad61adc209520d47cb546b3cf8ea8f6020f721c4e02d57ddacc7d0d8cb7bbf2da3aa4b7737db3683ee67bda79675c055a82923efce1974dda201cedeb9b7fd9be061e282a5e519d11aa1daf1d55d1d063b7d02c4ff7b6f84e595fb97ccc30bdaebec3a8a5b59ff5ad56a8ac3be88ee9c605a85ea7b3c90f9fced1fac0c8731114cb51b385f202e46aa2a94c557df7b3ea028760a4a421f656f6f02c481ecb6698c224d34bb20efbc1e49c19eaa4a0b1582509bcb757764efc7856b8834d8e409329d9725774389e4bb2fd9f7bfb2e8498e38bcd602c2a7c08b96239f2c340119c68dc3b4997046e70845a4779cfd58014c49a3d2fc0a2fff4309f3b371e956c3d15a97882b8f6ced8df1e9c74b15a46545eb1768683945d57848a1690cde2b2dda6bdc4a3487441dd39c728ed4e0149e0087df405036316ab0baf56b04fac87f692a59a1bd4216a061af05753d48efd40583c401bbe93be576c7b961612774e206fed836cda72a9ebf906b2490347f2edd498e54b23aab6f4fd7b3f22c4c787e3a4f1fb06c9ec73e76a96c42d58b0ad50f3f05e03c11c82fc552acc76c501c7a8c86f8b8a20f36a80d61cf771237d9f123cff04e6156db4e5fa16d88291da8fe850929f678e2c0050c1f5e6d511f34a9a260194529f12cf3a62abbdc6b9a6434ab417a11f5ffab7dfc4ddfc9992b62251359466e9dca03472056616b3baf98428996b5b2224f3f3764521b36f343ad8efe244071c4caa872578d25dea0448b50a471a08005b8c65ccc96da5a654f5b0ceb28cff5a7d7629bd338d1dda341868786380524a9238613bc81e3ddfa37b5c663cdbaa24cda7bea1abd2b0f4b8ed10eb655aa451379c885bd7b0068b7e303e5ed7bcb21bdbc3988b686fc1da014b40ebc2e578c4da0d4d956ecf7a3a63c8d90129ac81a0263e59d2ff90baeaab977af212dd6a05e82f238103c9135ce289af059927a3421b9c6500b80226b726661186cb8ee2b4e066aca72d396c73790742d4acca91824a526cad48207fcff04bb72253966d2251383b60419ce00ea5d616e6dae1d6e120e4b33116783085979cde4d417073fec9387254e770189ee75aadb4ba19dddf4de7eb24b965e3789afdf9702ba991aab6dbc3ed953f6094bc2979d6b0ef30dd1fc076f09796033968c39b3368ae40a68896b2a2c1676290a2b6fdc555be5a7b1502e93d37751a188fa235ff9efafb82dcfdb10cf29499132977cbf92f23c539dc23b4631f8f82c68e0e4c3d251c4cc012756194bf237e8cbf0046fa939bfb89b3a75afac641e7a3d25c5084918e9eded79226d27db08d6de1d5014229a387fb6a026f7cb248b330fb30e56e6ace7c3f7ad8833eb4b83057106a8d5867b6d4ff3dc9445179e0700e67107d4327585f72aabd09420aa711a8f9353da5c4628d15cd607c2173b5a89cb47f7abb4dc8d318b5b42b74d5f9ac03dac9b4c2c622fadf877c99653634b75c51d2802f447c51824a526c5fad4c69d8539c6537f374a8acfa521e8537fa46cdddbe0027b1ff755fc72c3e5af70bd596e221d16db2d4310ea4956e0a0f52b181a6a68d3d0cde9901ba86240f59b469d004fe8becbace1e8504cb1a8c12fa91e84b0089c7cb764708a314bfd53bd2b1144a86f72d41cebba09947a653e93e5292396078605472f9d50f3c645523e325c4116f95b80e52a2d1e0bf942a08ba9df0004afb8f5e414c075d81b4078872426007fd0a0566f66ea969875656d7ebbe822e3465ad3f5d98102c7911550fec81987cd3a6bde236699792238f630d4e4ed9119159628e44787fea771ed5f0ce8dbe0e680e1a167f4e1d093881e6ef4ec96569064927b18267b716203ef2f194a1413b4ea2c26a4d66aa2d2ae04b1489b8a782e7b7654f93e0463df8f44478eb76d261dbf74f543d5ddf7c7f2d28037b972ffdda16b3bef56cbdd065d132fd1f78d230b49e097aab9e2d75a9bad64290df5f4841f99b9623877e6bfb585704cd21e1165ce9993434a204b73f3bfe48660bc5e0b3d2755baaab187f2dec2916610c5f91397c7717550405afa403088b77a6e4559433d985f7521c78721f11a86782ce2fcec90baa792e90dd7cb28d82223b4b158790509ba616eae66c63a9316d4fbd40a141ff543d9c46bf2dcce5d302336abef27a430313541447815c6857deadad824599aaab0ed797c33ba4a9e49419b3a069445952dbb4192a355bd7823826ff432012a625696af4883afc523d6468c6786090ec117b9179fd0d047f2706665321d55f6a39d9c0ed8c80167753dfbb03955ce273b55f86a73e8cc8a7dcc5d629acb9d27f8edc64033ecf9571be825b0b85c2bb98b5140e317d192b1a09f2e0e332521e4e6aeddea61d5dfbe9d3d8f33ec8368ec3a71582a92756ae2e451a21305132856f748aab76b6dfbc384a600e2deb3cce7cf1f0ae6ecba9b45cf4a8116187efca4b223f24c589a948f578a3f6595d2a0d3d2c21cbf2e8a6f04ebf293c2754ce3f79fa780543046f4499e51156319c92cd7cbc1575f5fcc2c44c0b29fbc23672677473d1b75fb58611ae2624a847381b81c4386836b87681b30d4f06faf2ab50d4b314b8a57c2b8242aa927a671aae18ccac278688eae4584edb215c9419320df9ce53b96a38d4e85a07e07f1d2c6d0f008ceffcd6edd4dafa6df8a761a658fe691ec7307016202cba4e66af24ed0382bfef1837cb31c67e381e4b63ee3a8e96853cd5da5184bbc40606bb8728ecf0086d5b26c3b06717b6aa64a00e8446418ae09105f37914f642af9945a393acb1049b59923d30fe6728a3e99d23ee4a20300dc3ee3871376e2d29ae9b60ff9cc50bcc52f0e0c7582328c715793066c6a92a5f4de505b47c91e8069f335bc73dba8262efb96ade04da4b8660eaa0983c2ade778780e7cd54f007c8e393f0751ff00d117862380fa50b0554645810fd2b43c0c919585b26411710d32443db93b414003a9561e4b68923fad38857fe00147275d66bc1dc49c15577c7d9a959ad8a750050cf5edd7d51b370665550c43b783562220753e7c27659c1296c5b172d13c181f67ebfaece7f482a9f53d90019c71b2a3e64850a0aa092614a64df709cd058098e2beac51462406de0fc573e259182127e1bebbf9d007dfcdd4b8d127750c71baa7f86ad09bb3adecdb761eae96818cf8385ee74f3e69ad844990a6937158d1cbdb209e2f8eaa5d1d82d7f72dfab2dc5c14b03c6a9f377a802c5cde1668f18a14a9bfaf37c61000b72c7167272eb5f79c9d3d231199772d0aa6a5e17803e082dd375c05b0eced7d0300cad763da92c700fa8c020ed433ae6adff21681e92ca36ead7f0862a74abc49276cadaaa54f33cf54264227f972e5e8fecbe7f8c2ddd30e34b12015a02ea5d1c9df53c437f62253d2914c25b03dbacc2cb8bba738fcfc06f478b5907fa120e20ca92f79398e7ed29d5787cfa09b155d9042fb54f18f059f145f2f9cebab15c51b54ab9153202e95dcff5aef7294dee453f00dc895a1d61ebcebf6018c556cc31c682dd32cb31ae4b8122f4bce30fda99c4b5acbcd3757ce16a672870ba60d22386b1f086d4f2a0759176dad5a785af494da4a25415b70f647170bf510a7e02a96e7e8f8bdfc4645e6967bdbc173dd0d6225469d981409dd7ac62a15425ece255f63f06bc5c356e78818c39da9296f3b30b4b4fc7a6b0accd53c35ad4ad5bd59ba689f292dab42356624acbdbba3f6c82310fd0a91665b0b80009686cf14960fd07d5df99cbdf277a9429e019ee85bfa65c08a8f8210e4e2a49ab3687a21428fc82a92a5ba004ef578fa0133fa00871a1e4cc253f86e8e996993f61bf306a821cbf7a6f3307c3ff7fcd53e1979f4616f753d0c1d998a3f77f672c666e1cbaf0d016d01aca639abc45c5abb7cc1cbd0439319d2b70d6be0c574bf8a12ed76419a91130b98c3407ca5c112e1237a8dbedca06b7be7fd195acc0a03ace7be114512a4712d7e309898e2538318d84d431283c3b86f76119d93d1e1c493adfda3a2bb6110cd279549e9c33937c961e1f4b480248a152cf0fe751f208da72c513542def177555c985c558f9cb65a87e0a88b1bec68d7d04344e7fdf0e3502c63ce0cc27b2e2be3e4d8c690a3863512ef67819c43db1c2cb177d0b27950f674da76e8b128beb9841fc5230c7731c0cab83a7d4a506a4d06e3a01a87e25b01cd5f35bef120ae6509f22b544c3f3f6577e328686f3c9dd02780c7acc4548dd9ff9a1476cb8a8699380413409824368be0183a28512efc0e5731f26eb1f66ce6d2321af9878ecfbcdbfe84d1384ea099cefe77a6384f106f5d9e2b4895f182910ed0502d6d561036b88787ee73e404f9093de7ca6ec7605c036e7922ba6c57407a1bbcfbc507d16e9848237f920feb12597e927d3abd743b0f4ae5e46690715cdfbc684bd6cc9bce42e8606dddf6dc4c866981a5e359d5754ad97576e2855a4e055a5c06e9cbf4bd8010469e9cc25f0f57a5bb2bb2c50a737cc433c076729a7db49e9f12462c67a31868defb179afcc395db48f8ef269b9c6db227ab697fb750b42f3859351879e9d3972f6c96a73cd008b231f3e2a71157e44c581d05d63b31ccb732c2feb7b4f5794641da6010a69f78d37d03d26df30eab3aceff909cae87c6db9234e8309f30d21c1d2bbefec396ade5341209a3c9288823913a53fc96b9684562993cacc202a5c2ca49f899191e6e915f07cd6f1c0d44afaab4961c7d317b9daad84352a6d4bcdf501a560832a0857f04c967f97224a7872057a124ea56c68a70d9424bd20cdd1cb8881f749682b8562e421f6a56d77853fb0abb3d669013b5be8484bece14d121097a9d04cb2ed0bee2593cea4d8d81ba43b42d8f784728c69bc150d4235260954bd716e15b0a95612af608a0e1af8865013f4041a8e3ce641078edb4583051218789d332ce80cee40d01c9b599a356fc3d92397b7ecccd372391a488f5146e6cc4771c20aaf645f29463c851fdd2b326fd956367836bede8def4bd7583687d1f0a8939d379d6c031c5024d9a96a4668b4b30052a3e26f61f498980a5899347e161a77172c2870849aac79fbbeb8239d42e4b66ef3766af836b3934408ffd945bd2b90d260e71e5e34b9a08da85d2f2a9afcecfdcf794e1bd4cea236d1d0e2c3464a75516e4fc1ea7ae64ce20eafd5ab1d4a1881905165475f4859355bc2ed6152059916bcc907d3cdd0b3ab4a46c3995a7add9cfe956d0526cf3cd20f3c55ca60cb8094c4e95c84be07994be3b8657fd30d80a262cba1dfcbb1a19f54b3b848e33aa05e2f373c87bbd94246835b27b8f760b624555ac021ce9e4befc4bf817769a18cc54429245757e4631d81c5a6ff6812f2a55ec93495aff38065f7b64dc054beba7cbc45b07e02b76053677e5f9d8592aab7d7ad7b85d04fd374363e89de44d09de6fff34d565ca0ce6abcfbbe2de07e62ae686df18ce001d9ad28cea20baa85cb9677d8678ac65ef1d5fab44f1af9249f2b798153054fb7f77347dd42e3064cb7fdcc6bab95c0309f27993e7f0f4023d4a1938e0ca98fe0b1691be0c8fee8a3d7af560365e1dad41ac210f0fa5545fa97934efa8ac4110a9be10d8fc0b9b229cf0dbd5642f996a7f9581a821da78b274c82f44d69ff83a41b9d9520a6adf32cf2ab5adabf67542abf3bee586550703887f33c0d06b6583bb4d15b4a07364c4be70ac6e72795c3dae0f034fa6dfaa58cce667e9ffd82ff3ffc3ec8725efcfdf510ae8a22381f4646e31766ce93f09bb2844f44acbaeff92f663855101a7cb8c703f90d025d6e5bed4a13fc7b83fcb3384e301689db47c698674099d9b60fed20358cd81e040d853c8a687e579a598c8c809b7cddbb34f7f98409ff05de510b9f29dc63cbc87752c33897650963a1a83ddff3e00ef741fdc150d70d4aefdaa492556a48921726350fb93338f75c6f66ba90dbd893fbc9589e324a4d0f66f748b84cb8ef077cb4bc70a09e72a8011d789157a5cf13556598deccd626d9e041586f844adfa2658d49a4636b9a91de263e3099045be370912f0164fd2310c8436426708282e96e2a7d09961d295b60242846e959d7baf9c68bb4bf41da6a9b77ec8bb6028152f306b71ead15976b23a1d712ad28fad04d805f572026b54dd64961fda94d5355a0cc98620cf77d279509cb3278f40de9e858ea673c2e3c21155254faeec56197d3c691625a35433730c66534b14db95e56baed6367cae78ab50d4611dafd4460289f229e09517200838245980a8865b41510b8ea278f3fe151e4b5c112776464fbb0dc739ede922a09a7dcbad9469b71a004dd5a1fddbddb5873148719a659fce9a61f918f2f1c0a3fc1ab3ba21ae31d8411db41b548e9cf5522e2e2551c8dce5ed97c665ed58827924a2188e947a51e3da2332f6c633c33c49ec151494c882fe7e5637082645f08adabe031338f8a0a39306571b99f3daf132100528ab8d1b80134753eae5e1933ee8167b30544da581366e2b7215f56a7ed6450648dd3e2fd3751122f17253f2fe155188cd2fa4e8e38905b7e38462fa4afd31215c7304445f6c5dac0614c49530281832d31223f232567002572c6113bd6e7c5d4db506e48bc0d3fa12155c053eea12822845f24ad7635a14b4571b3c3ff3cfc301eb6d96c1381a13fbbb42c98e23e87fb5103a78387869f6e44bb7fd3852d259615d60e3699ddbffab4f9f698a9a413262bb2305bf5f45afcd505ede10542c2955530851e9b7bdc708189a6e9819c6a1188dd478d3df974759b038682fc1853bc6148c6aaa4e6972fc605c5f22661fd6bdcf7659dbbf07c76fb16c22fe6187959ae915b6142a86086e6d0dc48f4af3d93aca303141c83c36f69d2395e3fcd841bb1acbbc9012bd924589d326478deab078c32b876cc2df9cd8ba8447475920470fefd50484d0b6166bfad90bb2f7ad655e058ee3c4759702fc51b8c2934108ad80af5c16592a189fc70845fe3850e400d3d782cdb1a80d6f4aa9e68e2d7c377df5a4877b78e98c3241fd4084415f3787c1802fce9b25e9ebaa0c37317fd257bf55147fba47d5b9d9c11ff12735ed4c040f49bc6deab2d27e04c0d335ef0b0d798a486b5b30b5489b2fb8816e7cc2ce7ea57a523306187031400ee122e7ee03b57b8874e69a52e081730e17e17ea663fe6b5b18a7581e6c0b463e897ece44e17a101cc2e4ed752a917669dc09a361b38b49333751468e6e14fe98f5d30cd54ed1314b7cdd90e4cdd51e13f86d54ba672d274cd6b9392f1d5551644aa80969f3c0c65ecb57ed68725554539296f77b27ecedec1e689ac822d525e9b3862cc87852b79dd6dc6bc8c1180170d20af66a9ad1835c37e5cf22249d647056f4dfb9848cec50c6f372ce61260bb3e153b75069e3d1e448b84205ccb3f4415b7a8a06bf784ebfc2256a40fb875c64e7f9a4f43c2bbfcb796a5938c221bfa4eba09375d31dc332f3f8bbe73644dacb0b822320b9af365bf4827e85adefabe12eef63cf658334f080f6ce8bbb636f2f76789e9a8b791cdade8818b23623a23f4bee62db20b38a4292a709f431ef02da50627c2b58915b9162048f8804c78b076a26f863a9b4ab705192d5e941ed7a12c0c9259bc9fdd9c8a57f4acfc0e24d82b51d8e2dab8e81c2e43f9b339367c120ee3401b285c780c7d281b34f117dd2f5525d8a03cc4af37f7436c19ace64be4c032b783835f736d50f9031cfa09f01ab696e56abb4efe8f12800b1e69bed59dd2736f2f48093e53b84362c191450c2eb23d658ed0c854a5e2924d1dfa1097a1d81ded7af0fa574425bfa0cf31698fdfca71ffa937c15000f9e2a8b4d89c009523aaa8f318934cb2fb9643a264e809a271ed0a363aba5f24cb09b46f7fa1aeec5792382429749d24dc8fd1c7a630f82b4b072ba274240085d87fd69a69d2011be67cf18aae1eb71e3b04c1bb6fe4e9beb848ca9a5e8eb2a894adb5e221ad95b842c38ba300e22903899daa0a4c643ce13c3a6d7a646b0401922ba8c33184eb261efe6ce9ec6f61795aa2d110a64f804769449acf10496325536245ba13f85009bd860bebab370ee420bcfd7b17f75235a20fb9050c9a5e885afa0333338882b7b112ef04d7b97fd87e5485b61c0c014088f47eb893de64af1b4b77cb2ab5f1c49bfd8ce1ec6742dac601e04e1cee3c0c808b22565096041e16eef9ee73f10bc4d0de6bef73d0d64f8a3db39fb53e60ee2b3c6a6acd51cb39c04d301979da5f2cf21e12a9e876c8bb4d7066475f4cfe59db90ad72648208a6b9fe80e8d6d25a516235179dc4d998b292328ec185ba82f4242061e9a0b76ac9667b82b905699bf6b3cbc1379379a4a9cb0c839ac3079d3197543e4d2c626036583cac1670008271693ac603dec79b258a56eb3f91a48b96a7b4892942036751f1ca639db147ac55f52a8c8f0153eaaa42ba3c2c6c21fc97d7c9d8ea9c1b0ec0e59d5f9b43af8818d9e39b35959ef19c76aedceddd005eb999fcb42d9529b4f7863de6bba198843eaa2e589416196e90a89d73f04eb0307080c5914eb7b0086a66149f6b45a35f3bc8337b270d53a01b5b1e67d04bb1f0510eccf6ea9e3e678e07c9f016ca404794c6cb496ae5ce4491009a4f0a5e963cdfa67b6b7d933550f6edc66f6a8a0ffbde283e69dc39e9ba962ba9800ae1dd7470ea495574412563297a8293c31f62da8c6f0543076446709f5eb4a16e9fe825c93ccf4b6b229efc9a4096d3bcf4d96203fdc86b590f650510fc543981c356cf2d3065b3ceb202abddd26bc5b494d430e966f0596da5b5f69f9700af0106a9df2147b5351b69e0ff48a289d04699f3b5b14d05839191c9b39fb1327848d441e459f52635ddc4ba557f336999ef5eb86edfe28070818e00daa5cd623be5b6bf6d1bcb414c826d0f4ce60793791b6d82dae9f9e9b699e50bba266e2850541882d80b2c9edfa59d504421818ff45740f37853e5b9bc67214af0a5f5fd5c00843cc39cbb8765b4001de99643c7923f738ac5922868f865dd3f1cb90759c597843d9e34daa3754a2fd89bd8c0d2e9106fa95149448ff11273587cb414a603759315f6881c6b94b46700d94d8b2a5f86bfdf99ddcc974cf98e47bf4ba09acc273b463afaf3583a9f50373088f5466c1eceae0dc423076287785d52d42d805628e75efa01f1e1dd7775ec200fb1afa52526952b90ea68b848ec39b5d22dff57f711b0a2318aa103b94280263622de8156421581c87523d4ba343d76ea3480381e54fbd20e401e33f140a3b1b0db4b870ecbbf9edf65d13e57fb090470b38b8d0b2b90f7fc94a1e4abeab760f44d8f3cdb0de3e14a3ee95baeab0cfd0a2d99ad4a000082810ae4ac35bb4bb274fc120937a332d79d62e4c32aceb9bf1b25333f676cdb0040054ee14b3cc104b7596c72a1062d105d744bfb68c0bfc9281ce0b9cfec710f9e36492a48e9c7f63ff8070fa3a122f9eed5977ac53b5fa9b5871a830fe972ff0ff08bedbb4cb0f5735a6a46bc2eb512d6295fa7ec9939ef47f6494183fe415d29e66fb21ed02c80f5f31eae56f973e9b7c1fd292b64def863ed057be8957cb8506a6d0de00e9b374c548cbd008bbfece84208652e28bf537dddd7788a49858f37ff1c67ab627d76caf14ce9456029ab0c1bf9f2515f4b9f0a3b27ee0574ec402536f645dd7653de064bc7b99211119287d25a4721630429ada78f42d6b21189cc84732f02b4aebb92d695a473093831dfe791da3aee8991bc8565fd6a9bb5ba828a2b899797febdd5243f4074d2ee0798ee4931fa5c4c45db5754945d6c1950eb9a77fc18bab45361b71d03f3e8a3923738e8d4ec36bcd46ebfc39e1bddeceb6c47f0ed12777ffabcf1c7659cc509503f59e9398cf86bbc0b114b81225b80f889051ed2f168b2323b86b6fbbbf28fd015e3d2d6593bc97b24ee54d40d5f75f6c6746a5451f8eb8881c8742cfdfb97805f492e41dd5b668030b9680d39644c74a8f86bd7a0c29c7c1449777fbf4ac0ef701c63f285e1b369d3050d93330474e0a5138bd35a40357b678c497a9c5a8c7bfcb00c7eef6940a67053ae1c96ba7fc94f5842de0aec5704f003629401b56ac459b6902d864c9eb49d17d1ffb0f0cd9d0c39396e2f3161a742314b528be5ec472b8297a4c7261e12bde401b32e320eea6038d80a33b9f5e0d2a86c3c87667182c6c67b7b3e605f4f572ac5ed7b08842fffc9a718b4d0743025db6dc8a0b19ae5cfd4b3f76895c2d8fd6e96f503eefddc1f7e0f302f3f7d23b04c987d5441e90ebb4fe9cfb230f93e2521ed60755fbc8d63c8a8d70f31712a067ea4d12ea1bc6bfd9a856ac7cc52ed42d731c62bd540a2413bec83d160e0b1ace3fb5a7c5bb56c2b470f3f05b27074eb111c8cb3da3ab95c4a42ad12485c58f80f047fd9da34ada8c7ffd2e8adc2539242062a99f90b41096663d94e52349e9c6268b7c3a7ea9f1abfdfcd0cf8d917bcfc77364a9c22c7cd32989ef21919e0ee8090a8c64f27cee5711763df3e251fefa2f826424e21bc3c11895489f76cce82ec04b96e2a7cab9d9e3f5ddbe826fa8ed801710d7978acca858e908287bdc5ddf74d6007d479b3a799c0018f716f263efe1bad28c8a7f7fd2140d988448d557454c3434fd77f8597e6420566845e316497af411096305c486728a5e7b84bfbda671ec982ae1e7fe3262dbffd7b849a944744c3617c921830b9ae6c4d4d7a2774b0a8696cb2d7311dbbfbc7b0d172c0326f74ba77e64dda4aab5ac3159eb876c7c408b95aa03a17ac2a24832d209950e372a77cd06dd400fabeb610dd0657586813b82fd8d097b212f34098ded368ab1c1365b1077dc52ad56638fbf02f075aca122f3353dea08ee699d86f2284716d40a437cd998081c64f2 +MD = 4a4765fe4c9b6e121007c34b373bc4fdc7720cf3a4631feba046dd2d69962da52750ecb74afc8a5833182536da727bf2 + +Len = 95272 +Msg = 822bc911fe579dca7450e1b3d9084cfaafc2a59720d57a2f4dac1539e412ac5ff0acd827f6c748d23d55b7856d311ba65cab20892440d44c79a9a4ff3918870845be79c690902b75754bf9524eb51cff422621285e489967e71b1365ef3c474327669438f439ad7bc53a8f63a31cb6cc0a3e90bef7743249420a4ab32e0654d63fae11c34b4a35abd42b600095ec50d75bf85591164c05ba307f30311dff1789349dd8b0bd4c2dce4b2556704caf54e6de5e58e9e4597b825980af27e5aef626ae3bd24771c6fcacd13158fdefec29c23a7782108922fd686718aedcad9b5a735791e5cf90400a0d0f564feda62c3733184bb94d2c30f135ff4c16999e4fac3ad4a6fa924142bfb9ac9c21899bf6e60120e3e6e7f509c0b1cb26cda6e0515241d083fad6ad558377510bb719f3d29ef3f946f2270d37d3a473adbc4b9a29b651f12ecbe4fb00be11a6acf9e5d948c7d24c7cc3559c4291d69fe9cbd0f5603e31dfb1570454ccd84d5286cf3473e1c966c08e43b9c9b0610ff6e3e37c187d54ab4314847de04039f4fea12250e9240c77fe83589abd0bad1620a2ea982b085f85c55d3c99c6e449ce5106d87f649af9cdad63ec42a0dadcb4c62eca6c588ac7880c96669e2f4071a2f4bcdb0a0cc9f62f7637e6f799a656b190906940c58af37cc1c6ead542dd173a8ecb1139083b6c6701062e02d0f682d525cfb15c9a904d298bf6b0862842a55cc83c64538178c43bf5d8acab6e52cae72ef3880700243c56132d9ff908f781d14a16bba29e066474fbb548399b4295b15205d88b1fcf28cd0173a1750b851560bb61fd6c886fb6dabaa6eaf67e4f4cf93a0c882e1e187954fcd09d445973c7d3c42614fa663b2034dbb27a28400055888d108039258898b4ac4d7cac194901f10c6ce79461f00c4c05e2e01808de1926f41aa8f45ea5ebb5baf124f674902a813c3b5e81a118e1e8e13d040eff70009a1730e8a6effadb1ecec57e6991cfa94cfb9b610b4d3a07d116cbce514d3e73ae9d5d2898000cd1b98fcf724f998ee81af295d8788ddfe6cf4d94272b19d0d8282fa65013ba65334ca619e9eeb3554eb2c830ab118b8ee6a92ea1f5e28baf98d17415485d448c6aa0baabc99008ad43de2675c31e6ccf6f2960f922bfcd621c7115b1f8bec709df7d748bfc7bbf1d2f64b46a06e75b2ae9158ca4940a0471cbd0b98248806b65f9aa7cc368f7012e7b0d19195db37e28bc3659ab350b5b650cb5099121ea57271ff1795bf74ef6668da1fe8ab0ccfd5050547015eb0af8c449eaace56943b4d7bb18145990c6c550cee80ac4e878012b0d3778eaa04e0319e9354b860ad4a9fd34e8f4c71aa99771a6aae6cfeb00b23f5ca61a323b20a5e9545f8e7deae55f22f229c1ac7f3d93537eae39b3a3ac3717a36afef6a4c805bef1301cd1f3bdfecd5da32511a6cbe27dbcbdac78f7c3b9384b4bcb3ec38e4d1f2a6f9e8a0ba6ad87dd1dc6fd779aab77ca9fe727ce8f5f2cbd112a1080b9a29566e6bbb11ce694d7da614c78daf417ca0e1c91c81256527a6084c276c3932ea70e5b1c4d0dc6dc45bc35608bb71f4efdf2fb5261aa61b9aa9b6c3c77746219dd88976966c68ead59eb62aa3cf6647798dc06d4fc7ef8bd44d8903f1b7b6f8bbf3d6249052f862e9ccfb0d1957f0bba233603bca0766286d17eb9746bc002abd69583643030f68895d0e67e9e3a5c402767bbb5567ae93bd9f5af826e2b63a1a9f9c463f2b125e2cd57ce585e109f312cd7f6652572d304e2a43a132da5d996c0cfebee509a5c65caca2e08dde71bb5b8ee7c741546690a76f522ccae14adb2a480c1ac54d3e3391693cf3523a919f25514148b2edef3751c4f2e57fb62281cdc750e460544028539187988393ce1138ab188527922b96d5d1a285c1c758ffdf0159a636bd60171b9c3f3a8268abb3edf2d9e70fdfb0219bfbfd68217372d7c69c72cac8f6f272720fb073ff279ef9cddf01f8ec24f18a1cca40072f68e49c2cef58ec978f8bdccf5277bf2a6f3c4540b62d253d108412e0c3270d4c1642af6a70686612e5a0b8bc1b1186b48df838ef2ec8168310cc6e806d1ed4f7ea019417d62dd1cba7b598a0b00a652e324757418f4f274ea45eff642ea3e8b372a5ecbd6715ba42345eff15b7ced4e7cacdf2b07e4ee200599038048e32c31f3ea41bb3d9ac79e719f14e9398db4081d5e0cde47223d1489f24cb0a1267fe9bbc80a393748eab5ad70129a2e9bc528cd2243b35e18a7f77e3710acd419ff5a96ac006f4ee08d8fdea22f2bc10ee65595e0cbd2d62cf471ed50989c6926732d8c7e6c8309cb76d40c1cb4c47b4ee0377b80ed6437c8eb2cdd242ca9e8b4a509a526969df0716e2d3fc6e98fe3c37b778aebf191075356cd569d13fbda2a5b97ea8cc6e68c3a3c42808815b181d67ebdc7071f80d035fbff60a297b9c7f25e7f62984485648faabad64a8155ddedb3b03cbdbe5a19d5a268041cfe0b35737668153357a301d67e3d4af476a18072e0f9f0f618466b9d15b049f1911aae156afa0c434968e9798175e36e3abdf1cbce40eb98736d4df41b80380a980eb94004de4eb160fba6de7b07a9a015d2b862452c368c18f747427b80d74f5b0fdf5c0abce366e585c06f349ea47351085e9d0d65d8bb4f0be1f0fe5730a82143a6d1453bd4491f2dbd9273e0ddcd35866ae6ed94d90c60d1a4646cad4bfe34d599087d042841581c27b102755b98087564a4ae614266927217078d2c2e37daeb3d677abfe738d6798533a70626ba13fcd43e18731ab32e16c341287ae33d5cae1c5703131a15e36d60802b3b471d9e44431ef37369da7ce42e7b073f72f60245bd41e2a8c8c0c5203f0055bbc5a7f07539ab070837c3c405e21bf024e14c13d8a88bdd27f920c4b9aa1bef2fa84253b63c4d1cdb8d564ea1678bacd03a26d991669fbd38b51f2a612939bf3ef9d50d2fd66cf993727b61df433103ed856b9a967ee3498205a43d3f45c28f91bf4767098e7067d9ef1a47e70077bc20c8059f0f78c14baef098477c851e25cf0282a96cecc22e550b1b46e225c4a1130ddb3025dda089637fe18e3f72b549a1ca6d1b7f79c816aece66a7f83b7f786e5bd594ff33e7cd4ab9685bb192efc5af20f0056bbcebe78d40e3b250c9120ad8bbdb15c70500dd0ba615f5f9703560a00bf3ae573e9368996a7bae1357e41ffa33d5f9a2d852814d4ed1a64191ede11d945e5f6c8529627b5314e5686e5d7f7cceab89ba364583b8ba82b4ae7f8111cdc21960d21b139dda03979d7895e5f10591460d37a641aaf5f111686ac157b8599d0df9b088bbe15f83ed1f6a54e43e3d868ccd41b1aebdacfb670a9ddfd99e682d20722e5287f6b2dafcb36733c22eceb46610feddf48584e16ae26e616d8aa37b3b127603e1a37a10aea097bbe7895d23bc2099b57bca26aa043706d07d45b18e4722ad2230b15f2eea302173bc1795dc774338beac533a5e1c538db470983c6e2aeafe38dce90b3b97a92ee3a7a01be67dc20482edea67069a7c2a93ae48e924ceb28fcc4d10233f9f54e59411eb9a49b8e52488a75555a865fb05f79f2062b719c28866eaf15243e9796f0d63c1b80e0ff3c058435dad4f67184767abe74f2ff561128f1d533e4d5d60f3d603ea1d3c6936027b27ca1700871a186c3a64579549d955cd4efd8f68e3509a785b2e72dbb0f41078bd643ac5ad4b9f8db46023f0fd7078abe3b8ee9963938c7ad1555ff4cb7612d76cf3bfa5c1f1055281a35b48f86fa3ae454c03eac56ff064cf268b8da20431219b3e4da9ac55714309f5a6a5241e0060dc817562f12deebfbc6a9fb11de594ddb40e8dd754bf0ce9b41eac1068c4b448101fec09d014b01200e94265246365931e2b2739a276fecbebe51690acaaeaee4aed12e8486e5be5036b1db39fc4c9cb415dc2d77ec46e7114148c2ed819c8dbf0b48c0642811ac12cb8d8a27651ea0e856c06b7d1ef84649971b5f1d55776966c3c056ca797132ce5971a3a9152f0e3521f9de381406a2be0c53ae189ac1da7244d23205df66eb096d28b84d80f03d3103f2c6378ff454e53d7c206dd62e59782af8e2c4ee654d5a52fd48734cf496527945e3d9c7440565871f669b9c0f5edec29ef9760b1ed227b779d4c8bdced21ffe6d87bd7e780ca59597e11060d7631cc85ee6a7d9e601f80718dd9c77c158f00fd4525109f3032bd580106aa928fec898932ac8cf4d6541ce74d38cef8ea3893a14b412fe57617ec3628518f9769a58bfe646575fc764ab89f85718a9893a31e9992d91b017aff4ebb9af99b632be43aab2b9e20fe6988ba63dc8ae1a338580baec3f4be3b65754bafff06b840fe31fe5a305e7541d6968cf9fa8dbd6303e0c0a8869bffda5ffe4bd90181cd740a153fd11bad5c0fe6fd94298881051e1ac2a74f82d5c6288f24b6024671c248761765d99393bdaec0443cbd2e6fa11da586266a60aafb6b1e6ef4f276de7f046bc0d83a401980678ef3eb7b935e78a8cdb5a7c3c72287ec34646d713ad0ebf0109600bccb468d827593082d60567406b9d69120604650f3f78f89473a50f0548e234627dc23cc479fabfd993c607c8193714c4ad31d3fc89276b13b1d6575770cef10421ab625fe34c33188d082795f800e4009c7af3cb22ba24b178b1863a2b380c7d62e0981ee5b630cc1c4c651e9aa36d524e50530faeb99c1a12e70a01dab60d4abbf24c6603d14f60ebf34ed6739707365d42601e9f9e579a2ab7515301b179d89760dde9c025d573569d33521554582923c1a99c57e0ddde1ad2faa232b2b8c38fbceafead1c797ff6bab115e243c6a74c7eaded6a19a5328daa7483d0526087ff56f2392d2d91e346dc46a68d1dd93d31b9dba668b13453ddae4d5c7ce9078280df621db2f1b559c1627268582b06577e03b14bb63001ae956ee3a09b1ef46f9ea6d900f0d15a2fe0fdb2ffe603e4927bfcdd31e52ea3af4f6ce604bd4cdd9bb35db5a7497506e24ffe86b1b920ea5ad5f5ae1d780580d26618b2ed55fb1993595496652f25322d48f57c42340a8e2cf6aea252e14d2fb47402d8bee7b24ee31b3be9cf349a624d7672f2160949569568586876b36e06c1e3abd61e050ad40753642e49ec2d2def52e786918b45ca1095a34efd5100bc874f84197f105d4f7cbc7dd269a855eb6f58d3a8694c885f1b291fe45b5c7da771121c4156ac2217bf90e984a30bbd216a12b7e5f1cf999c317d2ec715386d6e1bd5e4bc393b11d35c7b27a38a88cb765bfb14bdcf76e1f7e02c4055cf773856e4057e089b3f74f8bff5c8cd94a1f930b18c6aae56f519f89390f51ece9b6718761b38a4f13bf3fe667b3d5135d9df1707413a262cac7a14e845cd80a70782292e91b52fdfc2f76afc9605dcf2b2d56fc9b3f3b3b51faae34ad53a39fd6e11ff9a1363e7bb46f7b4ceb0a2cf6faf84c1754f37d594c124da37a9bb9916118f0224ead59b183a8d627955a4b6e13265a2968d771a203360703b5dd22ca5a461d77bb27a887b30210a691f7c121bede099aa0921effbd8f63bd24c0e73009922e5eaf4d35e68ba4b033a68b96f54348dfd2c2cd8d58c445e93790ed0fadb525ac41f1c707b452b73e359bbbd2d4e98d6639962fc4965e7f21dac00ba228a7261f874a3c26db5162431439317ea5f9d52637e661cd9fd465940e7ec3a98828be0d9882549b41d0ce46374895a250bb47a635780ab05d6e21c93c90bd2ab77e1500dc61b86dd01622cf08908e44bc770c6e9915d373b773d848cabfa0309cf1527fbbaf10a46e6d8766eed8c56ed3754b06cd856420942db59a22d314c01fcb9e139d330349051b259451eae2277cfc2df7379064bedee2dd46aa94c3e428522042eab63a627c6923e0998c8c789f56dac741fe7c567cdb7bd4ccca52a39fd001970a005dfabb9faad32f876b6725c97901529653ef5660b5cdef3c6c066c8b689765d91316aa05e1f379a228fff49e332ad121929154b8b3b87ab3b71378cc7ecc630904c031e3f1cbe0a76b45f51d2fcc2868e0445e2d9e1dd7f7dbd4a9da6abd6d57d9ff388001e0cd5cdb43108d966ebe30e6115c059e846dd08151e8ff55f2e98c3adca7253abca68b21002e388f99fb444bff3689da76a40651911e8167f44170ce5d661ac4e6d4fae584356443d4476bb817d4017b7ae460f29c31a9c74adbcb3e8d5da7c6e6c072ced80f5ad9a70a6cd5601eb5a81995a70d7a0bbf9e7c2165317175146845d1ba8403a2627a9aac1049e2fdec8ada1fa34934920b13137906501394a8d48a6e9cb00dd8c34e36951fbda557f04945eb1c4fd0b0d44f964d75437aa3ac2f3d01defaff97c77c022e61d8b216070ce25fdac6594c647a8d047bb1ae8b68a4e6f14909e0c9b42d87dd9d4310207afb3ae4a457d44d01bb8006e043b83224580ea6a586b855d3884b0b9da5c75f9140d4e344aa4b9df43af8bb6ca09f8228763c88ba188f236cb6d82127a7e0b9930038c28066c52385207d8be6706b62bb24f9ff4f686e1bc7deb68504f16218ca66efeb21334bc7fb9595de185d24b9278acc732e1d5c252b296ba1fc2a55637c9780c4efbbe471a0c0ca1cc80dd371b2d23d4c1de06229e2bf81dcd6fac182f2be73b7b1a39809bacaa3adbf288071a521d4f2e559870f32c7809d5c0baf5c7401512a31966f7792daa8f9c55731a148a21acd4e2fd3bf6469ee4e540226db4988a187353a72a370196269a242f0e9e27a96451f0b4e21bfcf5556878a2fe6bb7ceb358637a8769baf58631d90c431bdd4d1c32294011e8d1e3c1dbd49d1651005b89cec361ad65dc31250ffe9b6611fd651ad1d73f39c14812c0bbde71441914a8e242edfceacfc7d199910f7cc6151a8a06dd94f2c849e1eac88510d00608674f83516d9cee1c106f4a4185f10199b7346691ed1b5bf711d44fc3f639eab37aa7b376acd225bf4862bdbdfcc8a72445fc90bb3a19534d5a77ccf5090f50aeb15a192f362d004dd2447a52ce441529693b3ba6266d4ca14e4dd694c3d0d66ecddf1ae7941e2c3c409cf69c94f3da3d7388bddf1c87b6b75fbee32fb11efa58029f3f4c4115f7ff05d4b917cb6864b5075dade297191fe3f14379325b5a2b1f02130ca9b7b5022aa4744840ec1253449732724d2061e6abb5941f291d02e7084ef2f99c727bc933aef41aa471721440959fa17b4322b9931f093b8080b9ccc83b878ca11bcabbae87eca6bee618265da50db1f969bbe72e801b64e520ef3ac37a794c33ee3267ffc1c672fcd46507e028053a442e9e2dd2ab5301a37803bf7e6e10aee194333cabdf0a15eaa6f9476ca10e90e7ec59cc23d338b867f097d97d99162b26985dd837423ff604e8356377a2926c513d7f6096aa44ef9f152c07358dd2576f550299269dc0a9d812b9ca85af29131c9c6f79bf93002db56030c73aaeddaa4864d21dfe444487e0a0f70b1b294b2bb673aa75e32fe2e9376c4697f19ea09a3e423cc532d834369b3d6d93ac93611c9b7dd0f3b5d375a8b193be07febfc3bdbd77b32d48bc083c74229e02be80137c57f54361ac1020f2a0713785b694af6b427fd5c4b48248e0180af8b6c571dab15884a25e4a788d3d807f23afbdbfdc5969b5051a1aad6ee7d3511e4e65eb1f5239a65e27f57f131fde3812c48893c2de9fd1d19bcfafe2ba529f6f37f45e59e557d4d77d51964ae0161675828ba30b815130bbd867fc6cbe02307bf2053e22d15f8abebcd3509d44d4a4cc684b801ed82a6c344e683545895edec50b2d1d02acad427474ef2092a4765da7d45c9d654987decb6c34cd05a2e4d4cae1b07d71ddbd96892429a8c38587cb7855136d776c0622f1c07236357120ccfe2453d1d8fb2cf17d49073b987e8558be692472eda601b347d995035d9a9f21ef316bbcd08b67edb1620c6b99e60baffa8ef430009e271a2e1611b6d675bc6e1e978c80d0e4fae5d5fdadab4052671bad44f747889ac2c225047cc338a9052bfcc52ae052be52645b7a6f9d145a44265729c20bbe428145bd333aab1c8b05c61a58bb3dfe6e0af3a266c6938e541f7a888bd90f4a1bcf0f6710dfe0cac23ad6f7b0d20c0c7a911e4b51473126d64562a209a0c4949d28a9a33bd106fbb510d9057bf3dd257a614ec6b865f8766772994411bdbe263d1a8f01f2b28007fa3436c4089513d1d407ffa51aa75be57e1368df42847e87721139f40408ee77f7f19ac3e53a629a2df1cb56d68fde0c80a46be40a996830e2a93509be2894d434e55f8590582bd6cecb1c6c9a93e14415a20cf2d8611daaf53f0ab3afa635a5479c0f79a882e2105cd07d46d5381834b398e67c3a70016e206f157247162353966225208c2f27ef5ece6885f500e546d0f562e0bf4ab5e2fab5ffd612dcf077a7f43b1ac9c15fcc2b0168aa9862db0304441ce0c5659db1fa80244fa18f2f7a02beaba8cfee1c2f6805e8153df26bf1b4017ecceb354b53966a2d5f619122e32d1e118b2d19cf918c68716634240a8b66ba0335af5e213054d07575d1778d3b8dbee7126fb8fc8b1e95af0e396c494892ea348b7024c1d0cc6f87337fc6d0fbab0da6eee66025848519cb8dac5faaa1defead6edc4dafdd5373fd18daf370ac1b86cb614f83cd06566181551b62a13f9173b830521d3d8e909a21866181eeb545b6ef2a09b8759918f95b04f519cf6a50f5ff7060381d9cea5eaf1cb1f6cdbfc01a6c99836291b5237da30dc7e987caa3e1edbf8512a250e71df03c3ac67014012dee406b16b3d33c3b03e002565cd8f0b3fd7e4f317e731d748f756a75986a8f6dceaf1f495e8b99cdf82c42e4c10dce08c92d1d09045bd3eee748cf88891bc15698462e6ef436e2a2fa32f81956e1a24cbb5c7d2dc673c0e9a236e873d4b05d84c5a6071c177d9d5684a4a07880ed03ec5e7cee0457635ae12ab033cbfdb0aa54f13f37c52ab8206511e1ca66c19869842d1efe2119a31881eb65400586a53e5385723f0eb08f223b3c8ad478bb6c4990a1b31c189fab70388e967b94e206901d0d0f9b3d4b6b09656ef05d32b0e13a9e46c9d63f5bf4f8717ee4651ea24d35fdf247cae55dc44c5023c2d309548fa30996c39b19d10817c926df9ae749f19692dfbb5c9b6a2371a7f562c48118d0296f2c40f93c816d64bc20d86ba34b8c48681feaaed3e3110fb94e70a01e605b144b41c27f2c0f9d55a6f77f75b71985b1da4d4650036b157d20b94cf455ed792a0aa1b87b4cbe007126053547b756666985f26eeebe64a9506aa0784fbbf2c2a139b6a39c332f3f2db5f48a301864b6e5e789c4b97962250ff3ae8310b522b03064eb145053d5c201e32feeed5ed6ffad7b7dd86eb8e64132582dedc5c5ffda4df8c97b16433401941a21e3cdff2f9926be692a7ce153663e04c928fd82ec995081dc487c75eca63ae77509607dc12be82cb62b42a75c0ca985eac516606b85fe7c9e1cf15041f88cb793b0335f5e1078430f6b7e6f42bcfb581d32bee31f289e658968f386e6a100270888b51838ff4d9dbf5b7eadb9ffb9f7daf2359f59e9b6b918ad117e4d181ba23de3643cf430ee99408bd1e7243d4be1ae9448d9be41de03d669c9aad7c655a5be60df32126db1d25d7d06a0040e47b202993736aed98ac24d1f9a91394434ce0481749c160e5db5509f8b6cfbeb33c56161af3ace194370e74ee2c5c41a4f77aab5c2ef618b48ceb473dea25e4c76a8559e0f6a7e897e9c3f6860bd1aa0fc3f1b7e5880976ce99b038a8ee4bdaaa6e759aed62a5282b2a0a01c62ebaf80c180c15b94142a3bd686c8540aa89c9e4aeee804a21ecccd762ad3ab87e5f52235e946de03fe9c70963e6d50e0626d9fb94b8b3fe19c4fa24f9724b63e107e1ddfd5266636c460938f1e8d118eb6c3179879adc113477da985722dccf40fccdc15d0ba949aea192d4793821683fa1fae6ee5ea38c584c96bde485940584843d58e78ade9aef418a65659f6c06ec0e5bc833caaf766f8a531b09621c0c93e859280196ac5f166f18711ce55af8d8fb7da9bda7a9d7607a3c382c821bec57704bbb14f6bb9f0b73648206d29448edaf8710f4bc38b71364769eb7ae3aaeb76338998973b462b695971f8b2ec2fe1174a28640d3051f70902cd510ac21599a0b4b48c6d53fb0ff1dd9d113c08c202e90f69209b2b7165f458463a14477f5eaaea95235e40392ce52511e065198b82b4caabcb722f7a5c8cca6d2d040e58b8e957d3f3d67a90f0b7d2891cca991cdf0f0e78cb2eb6dd3936dbbaa076712216e08ed954528d8309ee685afcd901d6865c4d48b63d5c0a8a870eb71ad80a7c2724e21deb7ed39fc6fd5910272cee49072109a4030a8992cef1d5db129544b7382b142a1fa7f747b66927411212a8f4dff1b6033822b9f6851bc3af1e5aba73e8677786776a630b56c645564436ec6a7f42e4fedc2277b63b494a9ba484c622a66e9eab7932915b367955c84416030a739918ff55665d42502eed393ba01253f0a4fc119b9d2cc7c416bb3f881c97654b68c47d3a8aa53b72112e004a39098865af124155067fd18e02f7f486d7040b754679f101ec1a020fb48f7956cc262063f163c34c0b150902e28ebfd6c1f35d6f969c0332271626876d840cf7b5f2cc89f0831fd71786beb11a01c9ee59cfdbb8edbd2c41b8141987c09e439392f9dd2640d2af9cc84f93173dd3db342b0416efc05fc4c71bae7b7f4250b5c0ef95e2e746e4fae379ca06a3b2874c4ea23a9f5292f67528be4f9cdc572dcbe638716e4b973c9a61b8a089f51c9e95a45bddc5affa13b5ed3c722e3d93980e99e9f6efa1963c069e114dad89d08c6fcbb4683a565a29ff8b02a08ff17c11f65290a0e7a7e885b7def03be1b062d3033b48545dc427cbba98ad6532c6754dfb86a909d6bcf28c36caf1e5b72777f51869843cb098075b8f8ca94ac6fb138eb6ccbf8c4d6f48c20be872f5ae4d547517dcf48bc3306d6be6ed62abbd2ddb66909b20c2ac2d4fc99f9e1fc627909ce58a0c15cc163bce7f4911760275cd41682158992783759bf56a7244f1c3afb598d78d74782a08aef83ecf50098157ca05d1ab753553e6a1f804fb8ee302e9333188c77d0a6f258389304d9d0b806be9c239fa4176addef623f7a05a1455ebaa322640ac1d6610e084b63299a2c368351fb2db8a65e1ed1d1baaf733203d056f0d389f9e0b9f694a8d3904f249fadb1080e4b5bc7da09f6b41a766a67148e50635282abf6f8b8d2605413b137b77431098381f54486a547538657520a1da09144c8d787ca3ab0b177f675b99a1c92ec9c8357eee309faacf527db93e1c90c00db5c11f72628e41737e03dcd17770fc9093656ae6d0c100ee4258995b5bddc846f37b761d0695eede63bf3577470f4af97c3059da936f05366a7eac04da418074980512f91a6261ccd2e1fbe7aae48888f53ec246130a165c4d5847d7324c670b26068c83187428b34e24a6af1da133b390d94a95ba12b2a46d8e232ede5f0a7f0ff839478b3bc21627efbc3a19b5eb0dd1a84966032978c33d8894984909d934b842afb2ed39cc8a12bbb31519a30cfc3a14451388bec72d5fc032800cdd61e0d17e5651a8ee8673711111ccb7f918033cb5d44ab5332c3726dd6392943a22f7ce23d3a058daae56d5785ecd5f189ab74c056d58132716953538de2c79b09afe20ab9e2b778e92c8b269f0938982138cfa7b76e81d2b24bc0d5ad8da17d138485bae2c6f8f6ae23d9a5e8dbbc1d600f8ca8097675d8fc51001bc0a1808fc997ae183e4c90af00b29ffde7cb28284f18f3edd35523ef58635d4e4e862c7c32d0a44c57dd464ce7c12455243f4660f43c4b9b9d7253bdcd691d96dda36dea5617b17fb5e2e3756b38b1d628a0dc6e5961deddf037cfea634b891af7620b823e551bd9dec130d195ff8ea77a57b3f98670f2d9520b5e1f22f1e903232acdebf1702b815ce4f2096cff03f2a3ca93aa8152d0b74e56c70413448578ea647ccd775229a0b7b1f4c4f81e58dc2963432954edc0a06981d3403d2aa4a2d276e0d2d9e15d5d7592fdab4245d48f96898d1d072b09bc2df24a7ca98c90a965c9c1a01e070ee120eed466515dc03371a3372fa0f3f5322112f45f5d538fb42bc5e7df4eab86533f2c429c2e4c64ef431b0a06292cca2bcd4998926365eaebabd21a3872b50bdc5bb60ff5dffc08ec9358ce4ba9c0d1ceba0000bcc3ace9776d592152910ce6a4fbf3031b6e53f452e9c24ba5299652446f9df286830fd380f9c0c5d7b39a5fd2a74be5b3e23b6f48cdc148bdb09695b4748a3797ad75f22dd871ce6ce046bd8fe8267f68449bc3f6c8bd8f3a46a8e147522d979948c88ca791d204bb21f84a0244ec97df9b5a3685611ee6c5f3b4802490f0d9315defea16ac4d2e6c7d984c544505f6c3ef62111d214c1606c0a2b875b63ac709f3d254a1b1491627fd0f0cac73da64ba499a9ce58fb0e7a4b45ad25f4d7227c912591170292e8293a843d23355d1a96cb0ea1e0633b02048d8c5150cdc02c219c26c6bac9c633b58861de61073538c832c3ae1a895b58b9932c9cba4eb51609f0cf3a87d9052091f9f858f6c55c9d6a4c5722bf13e28ee40cd4f3a4e02c7c906f7d6110a8f62b390fc64166f84994f79847b450cb56f12e4ae40ac33aaccc4f48cfdee7c20fb0352a4a0c340872dbfaa703b771f82f4bf2edf82677b6ac81a12d25087facc85bf0e9f23de08e6ebeedf919b08532e1dbcc567ffb44dcb239307d1b823ad1968b06bf6d3afee2a3da4bff08342cf4054d3534e9ddad15445f77b911b0cbd910d9e12b09a7e1bda8aa8f294dc6bbc4000ca7d9c4623318d970e181b638851bcda51aad55f92b77e39c321868ccc41b6886aed5ae1d592fe7fa0837676e091213890dc6e0a34e99eb4bdf4cc7dad872b567b4b9056391f30667467aa3e5ca6489024508182acd9c3625e12709556b527d1c53e448d97fdaab5536ac0a143b8b948d6ad19b142b074ab6d2479be0ef430610f6f806d3757f4d20534bf89dfeefdca6c9b3b7e3e963af7b4d1f0df1e6cd06e23864be060539727526eafdd76719b7caec4f1d1e7b29caef9c2dce0ce448e60c72aaece5b191a1a02c0988551691bc866cd4292862d2238059e45a866a5f2a0c403af1d71d20515dcd18368b8fd06155a6137a9632e54fea00e34212eb68594e2ba59b6e7a6e17fa94a7770f255e2ca5326d6ffc6debb6691baaf326ea0cea5e8f7b18108bc34c031d27d84499a3a5119c4297af765ded9a249c1c36d8a563ba061c1661b3d89403c129c8c03f4931174e438033dea45c099646fbd749da3bfd0a1904e6750656692b2dc71698a77722c2e0983e29579813fb2c306cb003f97415f261f351e529cfa594519c3856ddc0849a7e02c8f01865cdcc487badcb22dbb428cc3cdcfd74a3eafe06d590cfeb7d2de170464006535b8897a28895982e806f2c920778a7dd6245eb4557248b06b509462d5d1102ef81a62eed27f9e392fe918e5207b77caa9750bc9ba58610e604b14913dbde5e3364c0e276be5d45e6c2d5ce9aa20bf482bf8602882517e9dff8a05ac236eaa0c5614362ddc03227a069a65dca5b08a7fc47705d897a6c7e7aed710b96e2d8532c23b82090e21b11465f8dcc6fb71fff6ddb8a2e1df9f6573d6f8ddc208429edce18999c2e887a9b4f10f68af93ac4735dc85de4c448380c9e0b613ced8f51e921bc52460517d31e312a7b2a055a889c42ba46120ad9c3f7232d95ae6c68e2ddcd8b9caec334a7127308761a029afee2c30ddd4650130cbf536295c11ba54f243802b346d7537920bb3781eb8f7079ef455fadf242a884cda536ebe579c90964e7be40aebff8cbc14034291efa7f9c0a401c129640fece9aaf06f2bc0548b408632acf36fb99116cc88ad614d21cd7dc49bfc5b2d98a3caec77f54955cb8a19710b4a97ff8b8dc9baaa8137da4dcbfcdd8d711c87adf718284fc8c01de7d849996f889fa65dcafc66d285ba9f143b66763ee9157b362efbe6e0b0392091bcf786c72cb369178ed859668293a35c64e218162bee101b919aaf92755c67b27d4cbe79ff7a52a122851ad04069ee0f8f994a7d014e4f44681e0acdded0f930646fcbefc99d68e3ce2a317687e5891304b294db31dd3e9afbae80f9b43edff5b988358f52c3b3c5d9f027c21faf7b520b567e988444e8039173987ebf4d1fe7c4c182c361953c308dfe831acf6eccb2ecad911cc22b52687495dac4c7a6c3f0cc403cf2c0bb0a0a307dcde860ca851deede54d0b33986b2ea3bce3494f0d2f71b2dea8335dc253d0b948e939b6dad7a5a12501a1e178bc73c8dfd34edd455e3f7b115e089a096af666c4c8345fc4cb178700b63cd6d6991b2b4ee2d9cfa539ea9f4447084b1644a892c922029226ba990210f1486e228f793d829886709d40f781dff9bedb497f4bbfde5d20e85104cea4ce493121ed1e0292037ab17aae11eae54cfc98e5438974507cf01bbcd4681ce1a104a39ca6c36bab59f00748480b392c33a622d374e1a6f71d715f9a3123083b31d9fc28effe08fbfe9ed4540bcb66b8fcace9305e1658164867690af7e41523e93fc771194c6f0659edc54859a0f82e307768867fa60c307628c4898919d83e3f8c81efc32d024cf453467fc24a71fe578c0d3049ff37d83f5c0e906532a5eccd66b80f6e2e67526665d474c616489bda5153e86db06f6ffc7783aa3cdd12a1eb44d65a8abf0299289bfbc1e592f0a9416de8f92b38177a45e1d0414067b31041bd695b995d6893a37c28d1a15f1e89254818fd3314c489944180f04060eb9a4926ed7d2a880dd47f7ce84e79c906cdee66806ee5c4fb10701cf2319d6740b26a17df49bedd66de0524b672ef6f6dea154f9bc8e3c73fa161bac08fb7d936fb3d06bb5bb6bc1802ecfa1ff962c098602279e7859da9e6aed1c16855303552c73a8a0dfdb2a276059f63814c845b3ab2ae6be04f73db94ab58c7564c971a08c8db0843da233f253884f786e6b49da974019c026116dade295f1306b04ce5ed529707f96b98d08a2e363cad4284168906d480ea74f73607ab6d5b163ad2276507171fab1c740539593b9940fa73444dfd9fc0f4e5856bc5a40bf5f136b76d0458b3a5b577555b973c0d93fe88f2a56ccabbc2be5d51ea8ca5a38a245e7d154fc9f540c506bd32486914c3424892b869e0c11ca326dd40b112cc7e2bfc93beabcd645736450c27b142f99da8e3c40bc9f238254ffc97fcf78dff4874ab8bc7acf5797fa5bcd2ba666c24898ed5170e015199731129027db479b47f9ae5c5dec7b4bd108fc89158cc471e2d8086fc4da4915d8ca336bd417c68749a1b35e252809da7c04102d88177564ee01a83f42928340ce852c028f6b3ccc81e521661d16c12b1f585f608c2ec3c4f47b9568f4f10bc100cbc4fc5fbff391772ebf1b4b9fea67426bb1cb2ab9f4b97cad9793e2dd28c1f605c2024dfb31ffb4e55626b9a9cdb56ea5ce1569a1516a0f017668133f23683999efbb60073f3ebf70ae2e6f1db33e296e7ee752cc220034def98e8f0044dd50f113d0a0cb657520398fdc73e4e22afe2e88e9eb23afa274aceaae5e06d349c373f6e81530eacd60a6c1d8cfe4a3a0724db5c23e8e3f7956d40f6f893b18d31b895facc81c186d06210bc98b073dc80f33cd1b53f61cad62bc307a16865ba4df9a17c3c078357d9a113758ad34facb5c49989b30418c6520cd177610cee3e3970de7d7052d8a27a5de0b2c3f5320d1e1f5ddebdf59d8c9196f8b0c7cfdf9b9cc4c958da0225f91aeef50ee484bf80127a066b268244802d40b53e464fae54e04bee98f983efce33daecd45d106ca84b5b3f999d18c2338d90738a5cfadefc9cacbad85f56ba846da824cdae16bde8213945f482478b392b1cd02f8c6fe5f53a3dba716c090ace20ed3935480627b22caad606669cf3e39e3c3798450d57c131956a0eb009450de600a6c5cb6d3ea8c6165c39ba67b0d55f75364f2751a8f32b3a561acbd61dc62598d9d9a8ca674e960235291e563680d76e48de93db5e0d7fa2eaf00ffde98987fc5eeb509c35f615051d3ed2d6f9689e7ddba12b18eb72b745a558fcff3cca65d1a29563613f31bb8560f5a8787e1f2d2a8b415d88e5c56ab9119023488bfb478f51424197c7a40209ace7ef9938f70bfac4399bb9b167f273cc5013785baeb5abc79c8bde73af71085d7018e7be92a37512e46609e2fce6ec11f33dfd205728ad91ee9273d7c69117ff48c4b273749c1ff3fc5d180ed6c0a8af0413458e87290b2cb30616488bdaaf0ebc73a80c1f4e61e3cbe1627998183fdffd23efdab13f5b14a447246a61c64408559626cce542d16eed8357d7a345f84168f06aa957c403c62cf62ca1eaec6d78aebcbd4a8911e501dbc3869daae2886fb209348efd6f9bdda7639d7379a581dc2247ea195d24132911226d2ff17656b772cedbd0148a89b7be300573b09a27bf5ad82b9de3f1f25118108a232969f9a525b1df313fbd63e0dbebf3170222d57ea2ddf06cb013f9267b1e5c0bb535d7d54572ad06d170a0e58ae7c4d1f0e801a6a4d9e6fa34029df594bc514e277277b45c51c3e57c3cd73235c41938ff4232d3db5c6dbb0236676b0f7b186ef2a85fcec50fc241827a6d5387015eb0afd9ff62b0c5f3438d37dbd335caffe29930068129ed169f96c1d9c5d91013dd6517bdffcfa72618478f61eac23ca64dadb1f287f57a3f742baba305b670b713c17 +MD = e5010c8264bebfb39e73e4b25e8882e7e158e3dfb56b7bad0520079666a4581c543184970a7d9cfbd3906679c076c235 + +Len = 96064 +Msg = fcdba9ab5284e97b6fc8906d2932cf7bdcbc87950ee50a4e530326d66fdb6028bb6f7d84ca1747204bd38d1b31e06cb21289cdb6cd402f3d70eda799598624869be0f8a7a3c594341b4693ed0e52fb524d88bf15124a88d0e413b4f4ba0a9f0163d722fd25b55a1fa5c8abcb06b204c35561649b252a9d6d761c58cfdc8e5902ddfb046c9a102048b202dc9d63250f6cf2bbc42e4d09f67ef0b19812053bd9efcff5a5dd48fd6f19099c2e4b6bd5a5b7ec3ee8b7d40f1c6918797ea57e39a732026c0e3978a5cef9743da9bd67ea4d0b0a93d71f00639698b71d11708faf4b313e094566732fc550b98d56db9e8c90d01562994c1a2eec719444595b7fc54d564a74544e7ec4dc87a1363c8e5ae1f56fd65237286997a75e79975f4f98a53608f05442d7e48c9c04f4dd63bce114044e120cb89a37c74ec52cbd2a3220748eaef65118ebebae8c307a2dd44e7d4b45d694382489cae66910765fc2ee605ddbb22514dd71dd533573facb962d73ae416f237d84df6c1b80a61f253069a086a77b4545995100a21d363e62b13f0e677f828683df83628e1cefefb67b8d281779711e8c55739dc4cedf0c982e6e959b877586f33d5df768c453aebbab403f39dafc778f18bffbe0d0d82d1514a14f75e2b2eb75a65572d1013a23dbc96c2e1351841af9ea1d641fa98769826bc0851a179f7db023531af05a0c17bfdcf83ecf6671cd70d3751ea9e35687873cb280b5aea6034dbb3f39ee5731520fecccb492a12b599cdcaf72a505ac51cb8e61856c302e47f3770115f280129c7202d0db878b1a86270cb3a83b98f08df769b4df67249e0f4b5d81f6255e15bd9024ecfad3aba71bb66c690895238c04b2d593d4cf126024fd78a826af78a37c125d0858a18938e2f402b9dad82ee77ea5dbe6aecc82db4eb0cd5cecb75625a2a0b20c3e17ae37a186d88c652f4269c3788295b385fd77540c66868f658101f7e12de0f45da10a2117f6c8f2c0e67a9ad2d3892c230a9c00bb4a0f58e280a1437ed56cc29cea1b2a4d6257c9b3a282cc5bd4a860cd32b2186281dd8f56db6b4e1eb299f0fc12d084d0261f3231fee922bc8fdb99acfc2165ac14da7ce91bc9e06acd4dc5a4a093f6494a0a75628317619d0c0b1de8f052af3e0aec66c1c722c00a2d718abd1ccb4960d4ffd96db87554a5521e36a896abbec36bfd970967ddb7a5daee886e0fdf45bccee5a77a2569c27d69fe2914779559e13ff455e784648de3ddaa04e00039b2063fa628b3535c72cd599141561a794a408fb9e983a51e0a6e3d8f493a774058e53029a13ec9b72d3c2ac1c59307bd578962349b065273f5eb02849ea5fc5cff02a8565d430fe0bb72e574fcf6c7cb4964c14db29813cb180535704a4918f56e04af15a3ebae41e41892942fa4e109e778b3ec7860718e3962dd3d964d52736e944d4eba5d2d4070d63708a7c8dde1fb6e40f93387f32421aa02d2cada333fc75a8be9ebc214472653deb8a98844ba4bed705c2c3422f69886ac172e1742bf41fd70ce7e42ecbdcf388e8c800c9dfba19e4cfdab90846a669ee4f4092d075ca32605e6bb043c0a332c506c737d700ec329dbc4f7c3a3e95299b151a5430a7eb77c5117e9318c951ad82b40c903465a7935269a5af407dc251f1c164882d48e43a85c4a52f065c84ce327f0cbc5a5478d6a33651a4c36a9a7da2c2b3b12ecf210512e683c6a4d0a90f64c64c1ec183dc5720c0f80f2babaa06fe978c61ada14e620d057f0c7cec4b0b9a385f39f24a4ebf2b97ed40e1b75d8895be630c2275b8dbd4901b62e705c72d33339a80753e4c595409c5ecadf4417ce8b5bc3345a2ecccfa14cd5c7ba3b9fed0469294c2c651c00ab4f654c908e24e680c0c595fbf76cfee02297bb34c9ffae1ffebf953790b7de028133bcb5bac87a42fe7f10921d36f40f6a4232666e59bf8bdeb00afdcb60d54b190e43d732cb32dafb39caa808ef56360c1f53d99376c750f344d5057fdd8d90ff3f097d5df5b54fa13beec41f62cf5bef7647149e1f6f7723c51bd715f7b0d81b0e352fa30daca9d7cca26fcc560588fd8f369ff91a5f07587907fcf376e32c55c2ef766cddbef184350e307792a0c41db147030a2f3e0879aabefb8322d09395a561d8202b942e92bf5c8f86df49183726a2c73b28b5836e9e6b5c2cc31f15c3fdb0df27c0d568e8afb1146205a88a34347073f3cc6b7e1f9d34a8552078bac7130713ea642aa76e50384873cc6425fa24d99099e2090474f141666802818b892f8cfbcfde3bf40ce916b221fc25ee723e04a59733361a55e1bb1ecc31e58ff199671f3ff8af56aac176dbd55c95ef84c91a3a54879bcaaab4ca59e9754acee898c107a3782fd630217e49f5b55a2f190f42d738a5df1b5bb3959d279659515475c23c6127627b86515686ebcf1cb61756a505ab57ab1650264575ee5bb91f1f799145e3cdf14d9599271a1d72848d68e76a4b1563a7c171550166a68d12402fe957aa8f3283544341198bf56639bbf20aba32de927a26a787f2fab7f40ebd6e103bf4cf1dc19979905363d972e4489f06bd416eaccd4dd80540b88958539dc23566aa0a58522320cffe2933602d3d55259a002e79473ced181228848189e8159fff54a7a9e0fa1e4741666af6bba1fead7af784c191fdcf0690d3113759a74e972f7a10d910275d3d45a1e6fd377c81e784afd94b52986417e44096416be155651ea5acb08cb1c3fc31620f3c48d6c61be1af96e03313969533f77d68669e1251f35ce3f5fca03acb2e324d7d97b8b591b87f2148dc784cc6a8812c74f2e66da3d7281d7207fda9f164970886cc29369032a8e44bf4cf6ef468650d2db8c24ea2f190c2ed56cff7b7fa1ba8208e32316177b145b0241ee3659e2b865a60399d976a1c3a2f911e0e651946951385da8e4dae22ae41136f9561705c01c5925442ca6954ee005ff2d543e89f37275a29359a008486c469c96b32067fe534f51a258317c144276854349890aef724b5270e90945d3502d0354d1f891c9a7031932e0a9beaa56e554b13ae38fb3bd13ddd0279933823c3eeb9236f21bc8841efc746a61e577a9bcee05acb090f6cf79b52f79b249ab8cf6b60d56bf5e6176ed7bf53a1c89129777a1af1382b71f35e778ed640700d5cedf02f4c5b2e22afc190823e41c01f1cca0201c13dc5a936ce779a88ae9e1877e725306e87f3f8b800c318f0cf2f89b95c0d9db021ff409f0f467df42dd7447183b16a24366df19af4178a50923c586af444f7a72e02bd95e88a3f01074317b28a3de557b1c494bd6535df45d41013965c4f168faaf6a87f23ece99982091ba2c370aaed411f69891bc41fb9dbd242a45ad5024ede038ac7861382a3e852d8a9f8f3c0d02ca6f967dd6d5293f1ab6efeb77ec4ce124fe9d4daa812067f45d530ef6d2fe6ba83cbbd74d881bb5cc31e0b3af463f58e05500ee652a2ac900b9a9d7187001935db68f4a9acb4186441da33addce7ad994b44dd74ba387c62cbaf5a46e93a4fe3d956754291f194534e2aded6e159dd7c494fa94a87df5e3fae9dcd363ae5720ea21fa7073142166f1197747fa9c06d8029f8da31629c3a6ddceb6009220a69fc614af1c231ae8702b3a85d6edc2444ea10c7d8f1f379f8357c217a864baf1cf53c60bd393c3dcd525be6026c238d4c0528450c52e17d81dfb6c782775adf73435be87235f8f8d1a832d7c94026046c1899f9dc1cd5b0bbb3b466e2a2fa9f562de76a777e0de67b4b60051bb48c908c6a8b6cb116761b8ff99b8501cfd1f9adfa086f36dc2410b4850cf8618efd3a94442524f40a6dc5e5f896ad47c887f460f3e57e1617e57c629c5e36019723096dee8fab0bbe61b7a6f9ca651c54c5985760a71f7ff6f7346ed97f496597a305fdb0f28960fafbf7b8446235e83a33ee7b8975dad9430340c18497b9f35628362dd276445988e38f052184a5134378fdb2b578388dc4b0a642e5cd0c159b58a5e69b4266602fc08674d8593e05373ccee52dd8c00142a770d8434acc322fdb590e557f77dcb63ae5ecb0088727de2967fd3abcfb9e848fa66de83680b1db5a5a8e4654fd35e6fab357f2b909dfffe5d2e0224c6fcc54114ee81ab8b1fc657db14fb6ea82d287a8f89ce7964a96641817782db2a6f478d5723022f8e67a95eb6538ef688d1d61ecbda3d4c4d4b5d36b3caba513287cb982192f481fa793354d7e3038f7a77d3b6c0954046e2fa215854b63d09a7bcedfc04cccd3557daf0b4a0521d8bf565aded3e497bebae1c7f2104b87f86c2950b23912ef0dc1ee36e18b01f218e7251d13c7565449d0748b31b145ff63b4ba6cfa9273803c8c84907db77a8b4098992ca0f06873eed970559c1240b35998b4897e767768a9ddc726a77778d498f93cf04df821dcf5fd5b8ff9db448b2440a10e078b278d9cdd3e5e297304b5673395d1e4848a77a663bfa011b45a6f0bd508655d798ad85cb471a1ca522516f76d2c382b3fa92d483423f0ac438847557f72f548e9a8313389e85851bde4df8ed08a8becce88e4259710e79233d8fb4b65662690838a8167842ce9875b47f875843633eddc2f8583b50ded8a2a527335b06c60fcee37ae41cfc4be34d55949f4b0b899f70fa4f9abb6a26a5dd0fd975b870c0b55d3b7a2098f383d20d21fba527c9924d10ff126e5c157c6d3cfe1500413cf8f63d9134307ef11d012fba334d911603b45851ef679feb569b4cc0684797c3c55eea9527b8315d6ded3f8ec9dcf97954819193150ae9643bbc872751c03e9dcc3beea7c31c4290fcf2c7002df7d35c1b21672341bcdb18925d7663501e88235429a459a4d1354440ae20beee02b146be104392e411e76100da8534e197071d13b4c62b3b6b8bdfef9c072b78a215c1b3dab1528a9e90e5fdc04dfc94ee5db38149ae8cf56fb8ec4038d4d65c3a634592ed2af293b76a1fffbb3b2ad878debf0374d80f61423ec1f901043017503c4ae1c43ae39df0c5676d07d7502acb2c6830a2dd131d87a01960812fd91878135a16fc4bb607df5554ec52ad0d0a49a9779f70184878a46f5b1d45b2320e166afbb8f1e7ea7fd77c70e41816a20598d84586493400113d0f0f85ab35cb36bfa5982e4199e1547dbd43fac4becf9b2d5b5aabba9aea6596019f403e250540d875c80d77cc4b34469a3686d50fd6497b953f6630c757e453e982c37afa80aaf53e03dce119788da685d11ee584668f08086c5c4843e91bfb196285fe40cde39a70c40329ec09cf22229c3962b6f0da573759e46d8b1e8b0023b71e14723d693cb08116cece6f775dd3004cd901f5b9fda490951d2758afe7aae8e27a196fda507fd38e2c3b2a249e2995ffb51fe5bc4fd298e4d38337f935f180797b90c5858a3133dfeeacca458798d598834b514fd233eb6a2d392d055f9a0659b592ef192e671a9272bdb0588e9347cdd02ec8e3395b008b86b3b842e926f2f9a47a4cf3c1a4004c44c87cdc37cb54f60824ad24c9ca60df8c8d5a30570acedfc4c15fa3f85a7d43f167a05f078395a7a7e78e7327e484bc8b10936c1dc802828302a7b816fcfa3ff5159b5f726e72693bc1ed5cb83bf4c91ef7f434c1e136688bb8a59ec22dff86cc5cfe3c0cee83a1406e3a501f53398bc4bded58d7e8c3283b5dd9c67e5005cee39829932b8631e63226f5eba1acbb5af8acff16c44131181e5cd4dd9ff5a56ed771ade372b815bead86b08e03cb02dd477f9a1d1b7d28dea1400722cb9146ed14540bbb6716a7810f27fac5aa10a8892d905eca420ee2d270a1e16475b572c026c9c3698d045fd3c3652511091004c50779adbcdc792799e8fd03e122d4a19e9b4d55ac3913a73d86e8dffea56ba03781a617435f4e4fab86bbef4757616bcece4932c20fb73614b60d7bed0376134718a01c1c2ef0c37dd658f3f5880e29d74c680b69758154ffdd5d997aa7b1d68a38f23ca5dff33b97647eb28a391d745ea2042ff11ee4bc556943b91606b152676f16f96ef6e8106e9d77cb53ef21d3bb4bb810f74073b4cbe67a4b5da4f72f652778c2d5e821da8a0dee7f011ebdb073c5fe6efaae90d6b9d14bc0a016f5b609feb2397948430270123d7e105c33932e8d318a699dceaab5b642c98bb12f9edc513dbdc77bbe1097670f28f00c4604322e1c03c2b2afa93601f9c67f18174242cb75d05f17159d8668be002eb3478c2514f86ba461964ab140db3808c05f38e3ca1511ae9ecbf1b393d4a42af5ca838dce61127d4f3517be0f51aea72e49eb15e985d2146763c5b564ed8583284192c2d6e0a8bbcfee88c2aa179ad8d669e17f8632c24f255f81f2786314b5ef4f326abaf18eee68352655bd777d2c3d51b4874cb642ad4d11aef13adfe231af35daebe71e4593ac9b68edc60bc5ffe773ccb3898ae3cd434cb53828ae6e84dca7f4dce7b16d3a01a3d901404f15f25962a27ae92b161dac432d4dce692a3e1c2828a4396556500bc0ef26a8abed720780de73c8016a1cecb78f98a89a95cbd218eee868a491642f8533c48bccad1d7650c904c2c8404988fc44bf23bd419c92fca00fd1f9bee4e1631f71560be5432a74fac455ca49321593f517dc4bbe4ed365f48111cf3f50c5ed2aa383f41691985ffc28fd91e554f70109393eb05c4117c754e2a4bf83465185edd1b21fc177446445b926b99530b1e61999d795bc21d4a329bb17253b23f8bfc1825ce96662b3345feb5d9bd933ea957ec013764e4f9e8c1b60c5aac778400d5e4be0db85e26942b3363ed331fce5a1c1329eac9348e9e4827a5cba98c1abf11c84ea70a084db11d83016da3ffa579d8967b5d31bac2b4f077e38df5f8eb10d74d3d65336b89d14474f822b439a94eb2fe6157457d7e71e02d2d6736c3dd3b4ff9f40ddc8fc03dc890b0d40fd7c420d3d1429fad85ab1f41d1ed2215f6da87a357d967ac7ddb3ed05f914b5ce0dd39639a86fe10da2f043aeb8a863998c93ef8ec553d4c3cc31a8468044e425ddbdf89de943c1685f468f4046c5b4bb191a67942d15563d45e190d336fa76955a85b6d27d621688de09596a3fb69f24a1c074be0b3789a4e968593483b1c7ad02bf538fcb374aefaddd249519f78d76951ab994e646e99b152a43d30d1761dd74cf412e693ff8fd4d2663595c04fa11918d989154dff07057ac03472977cf970f3a2226cde88b424a69a81f7c6b7f95f59d843bcd5f38d53f51fa096f7f8b7a608459116fdd8c5f243b656ff19788745fcf1f0cb6311d2a2ad09a82458b0fe7e7326866c56b769449002db36215af2d2ea6cb8ca61227ffa89c874a5226e77021c8d2af752ed482475c539234625e30e0991c24236ee3b6371a32da1bcf8ca39ecc1a53e59410b99da49974ff1a0010242a737bb4a3dafe64de1fb9e90169e2bc90c1ec9d47c5aaba7d41e408894f5b57ef83ebb05d7828a05cb052605929be19cb4bd212966dc63c4aff58075c9662fa3ca00cccf845d5882a974c083336a624e02accdc2c73ac81a2246971e07fd799a66a575100be856aac36ff572c0b3b6c53e105505671ce38f74360bed16629a4c14543f3035ca8e66601f4b3b021de6ebb014425c0e28ba0cefef6648bd3c9aa01c35b097caac089fc9ac4c44c151f9a7a0dd1b2e8309587ad9992f99c533827dc57152ad9235cb3b473d80f6c4f7f7e0559668e38f65c2bf7b5bef47f7f059cd5830addb540edf2420fa6eb9d5b6e9801865b2e3fae502c51d5e2dba191b27771d994787dade4c409c0c9ef6ba36d66e31727f958c301e7207ca715af35cf5635cd5aa1bea4e1a79059b98133c20c692e8e65a630cef21b080c6448f4f59ca795d0b5efd4d0652b5a1cee57a231cc1d484e9c8b444c91066d17a2cc1f3bdaea16764e997cbadfcdebace0c9137d1d01c4fa253f1fa67f57c430fb358a82ea9c3c408d54f2beb1edb96c395c240e8fa528f3a8280f770d7d91cad61bc3654c4c7ba1eaa8f376ac2947dd409740508485e8dd9ddca038dbf67a47bbd5565d9069592cfeebeb5cfeff1b929ee0e4fdac02891a5ed37e566b40d25a24f8cfd62781594422b436ec5aeda91ebcffae6066d99e3c9393067a2beb3e54a9fc7c59a203007a0e8882af206374c42319f92335497ca6b4a1b4fe9e5412d99366f862608cc3510aef4b0fefff033559e651b097f0b90b4a66166e532a045ba9bed08b138d264bb04efca92a1ed8e4d9db44832f5de7bcbd76b743cacb675d356a713e1b62bddc872e13e56f517a551b7f4e253bef6d4d865a041965c6c050df0076f5e8cbde8608032d5f10254bf8a728db117e33de205d667949c48ab3c8ff074e3d1c272ccabb74b570cd08d252059e87d236b9aef78b42a37f57a596482de5639e25e31d3d09e928c4e68ab203af16b0e225ef441598650f04afa5fc30d431437386ae143f8be703c60d194f600c47f2cbac43521d1d5418843cea6a159a518a67ced6c654a9d4e2ee91332ef9b598d9e93a644d7082864c7870015488d8fc94d55f0b981efc5922b92376b553338fb2d560b09ab25072374bf9893ffd2868ff66c7ab0df0ebea6fb0344296eefea32a1abfc6ce550fae559929c0a0d5014d267689339c6d00ef066e3425384f8f69bc2398055ccb38a133ca91661bb2ec0fa69f3433c805d3fda34da3ad1dd76e49d57a99faca9733e13e6ab0d805195126fc4b293a153dcd9ca2c92338bc1903d9f2aa26159c4bb9f4e1f418a4f17ac939a404f8a508875622a17b035687a6e870b01cdcf4465b1342cae1394b5549ccae1a572313266526461bddf48534f394d48a5d2f056d47d85165dc8339d528c40adbac28e2d379866d7e6c57531871914bede58cd7558481a72f2096fec57a57b6748e8ac2a4172f1f45a0ac3eb6b3566d573076c8a3b3a7ca9367d518bac0e0575178b9012ce068c20e0573b6943b6caf52e89d77ec37a3224f1cde06299f06641ef5444cb247cbfc34254e39357c3c986d58316373931c44aeba025596573243198ebcf3f8bfd124546a8c551ee85eaf031a02f9fe586bb82eb9f26595abec9afd9f739544db10e0eb5fbe98c5124b59b0a852c9d0ea29d36bb72ed48befadd227c218af4b1bf3a8656f7552ac9c7b2f028dd1418fdacf5cd21c08210da4ee6f24710cb06fe4f1e16f34213159c966a55524ef0fafbcd48afe631eb97f6e36e86036c04727d8b432452842b3312ba64335280c72a4e2d2043d26e32c75ae1fc4878df3b207699301a3c66a36e755b28f3ee1da1903ef304f3ac1f5f864d6f199f6d0f7af830a16d5e798f85ad0ba03ffbefca871415487d273eec78be18b54bf3aba4c8e1f5cc835ad1a9d9d81eb230b51c317f9e195312454e7b875604dc1dadfb472ec60b41f9740c59a5d6f4b983873ffa9416943d4bb6a5779336570c143323a0b28cbb295716f149f391d5dcc1db1ecdcb64cc2db0e20b86a546596cbaeeeb565f1c4dac26a74a21caf00b43711883502e700a4cca314750c46e542596461d123a5e09f1ed8fdd8833dbdd171ba6342ec42295c1200c237ef8968e5e30a47f7b4d3a372134357327343a928047edf90d9563b7b53ad965b849a65040116edb3a9f991e638403d3a6d8f573a57e559c96aa19b650a101d6a5c086e2f3c00ef7f6386107e06360c7ac24f5c8af4746e3700a2edbb9dced3eee641e8c9ec5ea9b58217c3ac05cb415e12220d9c52b289843bd886e197304653b3e56966aa96c910761d0ff2af46886efd95fed10b16381b9cc11b797efad12335417477ef3faa0ac00479e46b5e2e27b519b4db8615f67783eaffd5cd7520f7eb047e9032bfe8fef07c85e3d268bf13093ba42e4c38411281b4c8a90b35a22c55ad0c220dadf27777d3a8937cfcb7ab3a6a612bc603b49726ccfa4590c2d14b058981bfe870530ed6a87655b390b47af92450569bfead5fe382094e26833ace6b4893bc4bad872f8d6963bd2ebb11eca6081651368fb7e738727a25152d4b410768a6c9bfbc0b441ca4f52c46d27c8ac174078e1e4d40c7961cc15cf4f78f2d5a482f4abd325c0704d9af45848d30dfebf6c88fcbadf47bacff73783e98730de485b1c1bc96f5c2c685f67b6031fb46861ecdb8c7282f7dbd8904e96a76934d269fc2c146606511d2286f4072672879103a8b9b89527e387857fa32f1186c65a104d6cbd305266ec83f7e3733a334c22b0886ca8aa35d464ddac7e77b046b01e4436233fb1bc6541939b7c21c6ccccc26d743b853914921ae8ff26960b12b9c50d9f9bc171aa14c35b58073a52a4cf1a44546d77ca2be552ae61e5b3ab50a8f873701a6cf7853d1be217cbe566231dd23c104ba5e6e495b438b801f6166a465e7f91e967cbb6a6f130c1114b8bb17d915d901d3814a669e78deec388d6c65ba038ea50db75a318ec4e3c219348b6b8ffb0bd2b57ddda2a94b5e9739173ceaf65a76496f07db65ab4437243e6269a96c53c7dbc2bc8e6a062b993593873e80956d2e505cd6c5636f21749bf6cacc5df8b0ab919dc5d3393faa0d2bda6607e321ac356e39bcaea724ed3abdc4c62a05bf8205a8b912429cb037290e603c1f7f35a82a079811ddcd76f7e7fe3afd091d2b588465872a6300f2637b41d761fbb12be15a90fa8ef932dfe20ad1cbc7f010b6a4a67c8a86ab1290bf826aa27013257ed865bed38c7773ca2c21ccf9cf659cfbe6ca3255bf812df59bdced53fefc48c90dd9d5a582ef0cb046ab64476bdffe659f8e4b5b2d9bdfab88c94e6e671d9774e2056a030ab66a4cb2362c3735d5d18e4f511c2d6941842d26f60244310d9e2d0597005e9c6418da0f20893bb5dd92d076c1292efb18d7e4c6d1ad87f532c93be8fd2d2ab07e94f2be191fd7545ddec6964cf6d24b98378d18eaa4ac1c33a52bfcb644e9df7c7b213f7e349ca9ed01eb3e52f9d9d3362f607dbf8c232e66be97b140ec3e81d417d013ce7bfe1ee1a8b8cf81d6983a791c1965bec88fa47281e9b72b877b301c07a9cb985a6e3c023fb9da37e18fe9d7aa127176fe3406bd7bbc7ed4ab3272cad6f8d75a648f79952368ef03bf3359e845d6215671d2cdce286a68eacbf6c256e257b7830eb4603110306e73c42513117bfee5fbe7ce821af48e15cc7e3a9746d640fcb0dd8f785c82cad8f694d79df9b8d74fd5a4999c2a8c81f5f816707a210f3f175235733a8dd772cf0aa5bd62f78909bf525cb6a4733d009a0c392ad36c19cc87e5caf22f2b9ad2b12e8b590a917900c51054c8139ba26472676aec3b8e7253cef9e2aebedc49651fe09a4ced5de556e19e4120620a49380fa800173b1e957f7cfd30eb72166f947bbf76eb83c36a66a53a966228259df5c22cbd4e3a831fa9e26e2a4ad15089fb551985b7765884ca8093c90fce941d285a83d6e3b2526d6dcfdb334f651105141c9d6b533d83a10cf4285d8bedcc434a093c019a4b030b2565b2e06b95de8d5962a98c2131eb6b887076b868de44acc58ec3b1b46d2b758b7483b611fc2f6f35a7cc5cc40be620c7a5fd9e194883b6352ba95bd4812238ea5ccc28f5007a47536c74719e240a8d64e52b432f850ffc13905b847d2f9dd1dc8f0abd673b45921d11405f1202defdcabe8e5c1e4c4feaeb3d68b010e0e4bcdcabbde7fb0517cc1d46ae79e220c9ee73a2a54d67e6da0f26834f63222d9d665503643d13067771be6d2d56711651fbfa21fe9b9eed24e540227e12436e2e6af0567c3161b7db1f8b053b79315c1d92c8ccf8db15d7b6e9e26b7341d73b2e4718e584494991c921fd9f5756b55a634f6a0432608f3f16a967eedd76600d036749611af95d0cb825a0ac0f837fa9f98e485829d04d7bba805b2d0b34706c44680c398ed5feb12e96febbd263f2b316dc0e494dbee326192b26a68ae07ad177b5dbdf7e53a10792f2723f3e8ca11e61b506482c70e2b6c8e674dbeb1f01c503cd22d367e706889bc4a5b6b2721d3450a5dae5348abeb6306ea03d9a5487cf7f3a8bb5ba2481ac9f9a03a2bc98d9bd6a3ae690f480e99ce610435c27058f49407a70e7038094ec24cf0693db7548e224c0d3ebfae805e36077d8b7ffc68adb0e097cf7c27fc2efa1e048fa8dabed6b06e40d56a62476221601dac1a2fc0cfd2e640a5885969dffbd8a2557519159b087210d5184babcc1ad4ac419af3a78183816a399bb5988c4de09363ab5b9f04b3be45e7d153f6c4a6cbf1f1082f67eb4a19dc33bd23d05b76a09f60528aa63a38bca7b29e616e744fadb5656bcb4636af165f3af68b5a74007e8df5738d70651fd3fddf865e5d029ce2c044cbae8d8a3ae0bbf64fd57e0073e427c9154c45abf16a11159230099615d2da3731c2830e74dfb810cfea84275539338540af6f3735eba9fdc9c0bb5943e5cbe6a3ee72ebe47b1d307fb0b41030e57ad0fc9e352f73bd8e3e33f6ba72ad845af82c1aa048131db4fd651056e48b50c4535201debc34488881d8ba500adc155116d12e564e872b43208bf2b1caefe2d9b549c0b305fef45f6ec1f5c349560276e79c13dc25ca0f9340f93f0eebe303809feac3fc335c29daacf58d5c56a5b1921494af7af4642f6c06b6ddb56fef1b83b93cf2016dd34fc2e47c6c635a508c6c44c1eb78e3dbf5961acab6ee7d9b92a8aa473609dcedcedfbd5f78207ce0f9ce202cb01d1cb9c8d8233db1013d70d0b81b13755da7310ef9e0a59bdae5dc627e4fdce4b3c4850ffbca17b535d8f53d7ab3a99946f82778d8f456bcdbbccc2e457ad9708006c834c8b661acd476b341b81b10880af4587243a27bc3692a39c5eb492c3dcd08099e048f237d243e304538fa502cf1c54b6504921a97cd57aa8f3863dc32e1f2d0b57aff63106e59f6afc3f9726b459388bae16b3e224f6aa7f4f471f13606eda6e1f1ac2b4df9ef8de921c07c2f4c8598d7a3d6ec4b368cb85ce61a74338221118a303e821c0f277b591af6795f50c40226127a2efacce4662fd7076c109eb59b18005e7165f6294a6976436ee397774e0df5000b17579b38d58fe0e1b5a2d1ccf329b4fe10f71e8180fc5165a369c705f6150f8c8b20d8b7b6d64cdc0ad69f2b8373e734055a2ea90575c5658610dcae483b50b73c6fc4693a74f363f681444031a6a0182c67804962aa4a7776d3ddd16b2d6a96138c87d8ca307e8164edeb93638986b46d663de9fe6086a25bf9f3f7c7b40631f8be488cccd3953b3960baad82e5420fb19e8c12416221ee1bcb45a7c497cc8ed44e2f0caa25df9b5e23d915f7827b31de58964a9377c4639f91fc69caa063b78d8465e0caee05a8bb7e71532928da23dedc821c5c66170acf933fc5419574b40da8129096f6ae6a38b8aaf07f9f06ec9772790d04f8c1ea93183744913fa68b3a025da4740583eabe1bab7363aea894f362a3a7f3f56b0bd46a0b6d2266a246feda6fa5cee22c2f33ed9d643c1f6824d9f327719225bc7678cfe4c85cd210ed4077701b0b5650418177a74c71b8eda3306e2ef3474f5d326990eadea84a9686e822878c932997298e01f2b16c42e019e21bdfb67b3df5478df444366c97df1bdd23dc82ce23abee44d3a61e9484e88ed642634197b52dbece451b59118191b309c29884240b31988934ea185148ae0bf42be11c0180ad9e13c996cd00d055575347e31bfdabd430476ee6290b54da97241e82d023661cef43cade1ca04cd20ea3f9e4cdc1c93abd65c7c3d82a71133b4e626ee4642e22ba488e1acd58bdb1e0e121c425d82e0b47cb88a9ad166701fe5a40cce02ba26806095e736992ea99d5f507aaa8aaa2f0d761f8bf3138fe4de83000c44de28896db6e811177b59c33f6c8f3bfe09fed90730f612eebf6fe9f01b9ea80b2f0a954415f411b7f299b274a402d2b5420d69526bd091d64b92e9e52db452597bdcd4841c4e4ba0a55af1cd946fc158c9326a4f55339b522ea57f3e27f5bde84b1bb1de285b3159fa3a0baacc3aaa51162a568eab9391eafef4146b98e72d102343d792d8bf655c67a35aaca9d7d056af31b860cd7517f9332b43ee0eed32698ae190528bcf5a1074237943bbebe5a1fb050a96395c900541978835e89c606cf871868dd01f722eb646f1f080cb4cfb9000c77f8dce8cb7c0e54be3b4592992e27024a544346fff946a2f43871a989bf4a1698d292f80593781297800c81063df69f5594682861ba519bbbd3d4e3b3b9f837b5f9a13fd91fbf78b534c5d976845db72fa559e670b4ed211be21cab732f71377676ef066daa4a4fc15f58e3108cc211808fffc7537183fbbc6c3349f1aa1dde82506694e9bb835e6209ace7fddc8e76f15a4115337979f24779000557b264f3828fed3376dbd16f413bab2d64fc2aae290f0616375239ce64126b27cacdae401d3c6b293c909c4805fd3cfc6e75fc81d1b6381488862957ba3d5cf67485638bfc5ecabf62654db25755479e42ce6eb79155be554d9db354f204bbbb7d61eb9dc6fdf13d10df4a75df4db5590a8fe71710f68022af1d3e8fb36f70bf0de9ae3e2421c8eb7088fc5944ec6c76eb41cf6af7a066c2d69031cea68564474aa61535bed33710a7e7cb262f3a553c0f6b8d78ed5c587fe97df6da734e7d9e5f1f864c3b1a26f6e08420a3474058f59e958b099b313e9f116df47bc1d2a40b72dc6a4944ff7de341e8619935055ee7bf4730e5a927006b75e79378381ac2d5ac662af580892420f29af8d1a0914d5c9b0ae4d3be46862b3e733b9b812dbd4534442c1898c003f51c224b1031ed0f9a5a650f9d8297b827939954aa44137fa333feda7a33ac03a9e709c42190208ae923e119099f217fa69de2466e28d5ee37d01d9be2fa560a867ad6c9cb6432a8931e046be0baecc1f283d57aafd67af4483428d61a94c501d2fe11c4d5552c4fdf75596be97e0168516efb5635f60a781f86a7f5e8ab01d1d69a431c080d1569144d6582ee90675a0c86da43c72f8e6105ef235f15e41360da77f3392c31f5dd7bd1b218b59b26816af2fcaa2f290c994097237c69e9029826bca983096cd5935c26c796084547c3b5dbe9f1338d8f0718a52fb4ab62d6600192ed626663bc73ff772c62ad36d10a336827829c031c93d741cf6fa5f6989fb521483e0cc1b265abea6ae66c17cc3d2ec240c33132bd25c3958c151d4e4f3f8890417fc42cbf51a9a708890f904144ec10bc1ebcc379a526c6ed0edc120327c308618d544cec1f42d78eb25c483707b67b21fa035d59fb46ff7bc2aae9bc3fadb02ed084cb40b7bba284cb1de8b66dd32bf9bed0a963106c66bc9a4e7b836f90b132b11e4ec4015f2f733b1817c6608d47cbd4e94fa1cadf233afc92715f9fb232f596e8807ee675a7e36a167e70c82af820a316f61b12e95f7d513c7359b75d5cfee8ac06784c44315ac0dec5bb8bf3657f932146d8d1d0420b021528789fd757d510308bba1d15f662a53a93b09230b7700cd0e9e0edddf36e75e539c440684a02743db54a3f301e8281f09055c529157b76ed843b50589b2e14744d45805a5d0d7e9a2c329cddd043bcc965b40c25a829393ec2f2e08961d146890d0448f3ba7f9511997a1a64342bbe8dbad5506e9701bd8c480b87b76ee172ee2108817d86e02068a428a30c73c4ef0436be774a0b8c6b9ec1912b2ce9e602693059113eecb68968f4461e1fb596b8f582796b022c50a93ed389b62efb665dc3e200e27f128b37d932db72e321277f2a460e12dd21d7e03226fd0f06ccebebc4e104da8720e6928305f089a1e002ad692983562513a9794363f41efc83fc1433d26de3a03f50022d168c4aa019acab7bd3e21e20294cda393277cb57492240d96044e4109750efa10db79d2af5aee028ed3351188c4a6ddc3a8dfe6145e3d77f3190c4204f6ec1a591796a859c91b3371f7cd953632b99f4243e9f60a0ca41ebed596d188f32e0024adb99fa35dd8e7210c79d1ad775c5489792969d815ce6e63da7c6408125b580e1e413d1e918d89f691b85b410b25ba13c92cb6011232f37c983b7df4acea6e6fe9dbe52dfccf887d181796b3569c2c7bb4527f177a682a838f4283f15b51cfe480c83c5408058f2f1ff61856f236282bbb49097dc6d48ff320301a60863808e683b4b7133bd5fa871a0254be567a39ae4e5ef9b6801ea0561b72a5d4b5f385f0532fc9fe10a7570f869ae05c0bdedd6e0e22d4542e9ce826a188cac0731ae39c8f87f9771ef02132e64e2fb27ada8ff54b330dd93ad5e3ef82e0dda646248e35994bda10cf46e5abc98aa7443c03cddeb5ee2ab82d60100b1029631897970275f119d05daa2220a4a0defba3b7d11384bed2af738eb1e913d9b10f79ffe8dcb8374060a028084ee7fcc9713386d8fd81c67ef08dd741fba45016175cd7a06986cc7e2f9ad17fdcd04dc8bc862161f8507d51b2798f96b41713d73f33c744556c212181a02edf66e8045b420e0022706b33e959c91036aee68562cb91374b1cd2f5b90b52a8cd59a9c10f965dbb91124caaa45aff119848bd354760e7b02b2c459ac32124c7c0319004441dd7ac143a7f12213a8e0c421de5940383c9ca7b005e80ce6799143e9b353e976d2e6a42757d2ace7ce858ba9b1a3215a899dea135685849431216bee303e087f8a46ea23fb1553a96a09f684ca58ffc33ea7544480d81a2483237c795768a7444ec319a15d621c41c4938d1af121e25da2e16ca94b88d87eb7bffcf4f17ad1ad6585bb08435f1197244cd9d4f0a6d30fff74baab7e3ec68a151f75c6c61b8ba219b357c076b73994d25c61188e8ed9c19b87c6b2e3a1eb31e4686e579ef4df0bb0767631be109c1e15eaad4f9282fd5bc0431927405a4f596ec5700f41acd4d073f59fc3e213431e371e46e2c52946c6b4d03a705e10faebf95c025677ec72d9aa595adeac67357d7e21b337ef2cbce8bf55b1f7056cf5d0ce55ac94 +MD = df387001cbe2401386ad011b2bb2fdb48b156c3026e6548f7140838ab2383f88bdd44d4bc50fb52406cd9fe8ff7731f3 + +Len = 96856 +Msg = 7d55c926d1bab1666c1945d4decf3edb36c2b9b122f47f895758890b33e4c401a1e711533e9d9035ba001e9f80e21cfd99397329cdbad4960ca945ce0defd91e356dbe8fba907d1908257e14646fcbefcf7715242da4fc6ba68b8b2f4d08023eff8ed9c48ebb017a1f306d1bd19fd118a025aa8c88db7e72eda865163a59c8c9c9f369d90347a3c0c8c8f49c119ab8dfd3eb37482786e212a9a5da6b1d07b227594376b65f5cec53c995197f6a8707ae3270c64052ceb1b2a12df2163e3d49c077270943ea21639cea41e6ac258e47ec835d5e5c51db72bc9ee6b6ffe52113fded472868eebf9001f571630b89d9ff008f5908846bd4ad9768782d0e5adb9a44824ade0db15efbebb0cf9785e08db7541e0dcba0e9e1ebabc78c602ce49466fefdd9301a7c242dc3e5038a0070d5f84ff821af98132cb26083ca553fcd74fd94279b2877973cadef5ab5446583d74859e43cbc5431da8d1e63d916305ba2e96cc839cd0c4acc03d9d88cce9d5fbb32daab06fbbc8b16014d3062abe8d747b2f0a85a27c1ddfdb8e726302f8f4caa3b3a152973b969069855b20c1a4e898ade878ea73f7f97f653830e4a6f2294ccede2ea4a2c3112d2d99eb1806d49b894f79843c71c2cc2e05c14568297407e48cf38f2142f0ecfa34c90f565acc3ad8c858d9063c6b2a4e25b02c77fadd0514669a5f52c8336e8a17a944564dda3b19b0ecd3b2346f78525d9b429eabcb956f04492ba3d3093a5f3ea106b250ad10ae91cc00caea3e5afd05e94446ac9e5d56ce7650aed3f0b4dc2246e2d4f3a34009d36cecdade563690c7009dfa8de3b15e2da88ade4b7882a35b114548a76b6dde0e55f44c71558fa01997bc44b02a3607ba6616bcba0f18275186ca880c53ee7d9afdb3aa53aaeabd66052b9fc3e05fc5ed25a0c4a032e9ea9e1dcf0d62fb568b11faa78ef5c4cc4b44df78763994932b5e6d95708e726c6fa95cef637bc01a68fba34c34c831a8dc2e9d0f6271b584aa56b4815ae54c34290bba98049750bea9c0ae2e664b8004d29bb46cdf1cc188c58e80e0ee352ec5992dbd557b461bb7bff961aa7e002e64e104cc2d668b57240f6e5930a50ea8954287eba432188faa3e1e645d0686ab4d6a022aad735dd4eada6ea3fd19d23837b7c2bc00b38f3aea86a83cc27a3f7522e00c76799ff4c951c91807a2a7106c016b36a4f79a0a9c0d3c1f415753ab1a89e5ac362e46f0b2dd5df2eacdf7499296df8c3cf5302b2196c0fc18a81d4a09f6dd39c027f2d210020b77d3db64fe6a6c871bfa86205179fbb7b7392151acd1de595dcae34e096f54541f49578aaf5206e46e5426e52df3c072e9194f7b43f0b4cc80ad0c93073f38ba71b1ced2ccc7da8a0bd053f9012d79a50a3faf049fe52eb93afcf07c7bfe43c0e7a3bdc7e75a7bea7d05a9c68b958ba08312bc88113d80a1f5213b64a82af9ea09a580e48f884f882a5a74e82dba6b07ec48f47068587f1947b049e64c43cfa8502dd4c315bfe9d5ac5551e8580abc4dbe38e357d5c46e719b30a86bb8e7397e53a305ce1a8fcf756b6cdd11ab04e3d4717905991a1fc35d6808d38f7e73cbfe7cbbb0601e7654c9f027632e8747765e9e7fd7ce85b9324f46df57ac1d87fb8b33ce414391e23e55c30b70898d30e82eadb3d662a92f2fa9bffaa15c16824cb7215154c30571d0ab6c9fa1ad1d6fcdd717bb8df004e01fff2c014d19e9f13404cdfb5788f993b03d554a6313c8427bea750d7af1298a87d22379b750085345f68202c5efded6517e059231580e5786cb4e1009d0777cfba52eca8cb91236f6fef63e1c72359838fff61d88e4601d731bfb69c7387f45effab68a199f680adba082d3e7aa8e87db35cf32f6436e12d53f05814f73c163d945532f0a8daa4d486dc08aa41369f3bcb1c978f5ef78c601b704ecef2cbe555c177d2fbc0e398ce1c937b8de27288a61f6ad56046320a5ad16720342bdf698cce3ad12ca8b96381c4540f502606aaa4f76c360be28e6401bdfd57ad6c1eabcb02c5b6ea2a050dd7c6474a59d59a0d1e9a4a41f6fbb4a13f27587aa07b30b2fba741099c0c6f9fb76995b711b7d5bafd512d7f8a584bc9fb56a3117721be860203d553ac179e2008f666dbe09360b827643d762fc3fce51d9304a599267030ca5eaa1a81133b98b4b5e1402f33e20f861ba1b04e026ffb8c26a3bd6e52edb73902e7e983c8ed10a2ee2f6d645d04c801bd82b54dde4b163257a9e15e6dde233936b5451afe5d8ebae977eae9da6eea7f94070b961f393bf66e3e99d13eea7db1413cb8ae7c331de4ede2402472c77deae6593c8f8de074c0b2896e2f8ebacc886ca3c9a70b16c2084498f67fecb88a29fc9fd0a2efe9c8786cb3e7e025f518a8ff13016d73ae870e34c0946012e817241e024d360ffb4007e4e38d4ccb4469f842b3e6687ca473de0683a231aa002fc394aa3db2b3bfe2536242e6dc484fc8607cac0201eda08e610208a9597da7d7eea5be2780a4dcb8452ef87cf663bd3cc8f725dd9e9049e17d6f7831405386198d9a669407aafbcac58f2cd704e537ce18f947fda92b48731b97fac04ef444fc88bbcc0baf8cc41ebccf077d6c97648538cb39ec8887444d24c0b7e0eb278a88c7501514e014debe1034b0f8983eed6911b52432a56ce6757e33d6187fb500c632a16c370208f2b2ab074fd0eea5798289fe305566a2d6f5133880f072674dbdb2f6f7fd7d31a700738f0e8bd893b1d989f084df35f0bbd5c916ddf12c031a762d96deedba57a6b2521613b3bccf3c75fad14958791f3e1b8a1714a216510ef78cca4a901f4297d02fe286cf0422c45ec2eaa64699f706d13d814e8c961bd24ab8da636c15b92060f13c90681754ee9dcb83c433ff40bcfeca9db23515270d77980e500b0586ec6c826c59055d2d6439fbe4cba612c207ab18b36927fc3e688413ad3af5556fa1fbc9ba082e3e75ce3a3c54e2283a4590df110b9aeab1288b7b130148b06f3de816ae6ec56c22f3d3a9751d3140df90fea29cec6e049ead1d637f50a3c6b9b868c419cfba4571701c8d8e85e176696cfafca1a00dff2995c7453ee372bf9da7ca0df2260c4393b451ee6ed51a5241a12cf6096d9e63bca730283a02de2181d3b5f921bbe6eef18719d4ff54035dcdf73b97ba9c49b6beac00145af50f76cf05d2918fd66ecdf1b11c48284cc51e7636d0e89d743882976de11286032c45ee03c9dc22bfcc68fcf90351d103871da42592ef9a3f904eaeaf7928a6755d17469541e2c3bd29477b2876f8e2c272e3c08d2ab69a437ca36d3d7061a393cc733f85e2ac5b1aadf3d4061c4444d1aef730363f4583ca22083bde6fc263a59ee1419a5541d01c7ff3715b9e3ddd7862e15ee87aa23f1aaa0580591e55cff3fee9b49b42aa0c0cc8cfb8efa3eb96ffb72ab06b83d7b47b3d22a5772421cfc51214005150edf532af10138ad45758add459908601eccc3703e810002a2e4c6202e98d84281475d55d3de9f3d98809cce1f665039ce76d9523de2abcd7852c13f7f1c4fb7226733ef9dea1f3598692a2088a97a8fdd281dcc58d5b72d42d592019b20b80d52cd6b6ac7ba552fd5adc786f9c8e3eccb4ef55137b0cecc82eb9d18fb6cbd9f92d88839e9d5cd86c0bce953eb4b18cb0969f483232a3f05c91366d82856dcf873170edf6cb2e4c4ea14f439e5a6a5c527f79fc4d3a8a47385db73e19a5572a2741763edd8e83784d2549c8b71721745a7765bb8a1927b9039a238a7da0f3b2806382bc7a6dc3220f9ea36db0723c9d6f874bcb1159e40d6550649ad5fea82f3ba17cb1f6f056133c14457ab1f4249f39b513750b81280d088861b64a45dd68ff034c63789fa5137d8f1737e4234142620ba501a01a5a7f914a022604fffc267590db1b290316ea7a1800eb6f8afb4e8f91e9b7f7abe42cab9c2f312ab36c3145500f2030a3125fdab6ebe07aaebb8a6a4ec8df39bc2ddcfc88d020e4ea9551164bd1bcb607023b4572bd5c2e19e7bf9b4a28c08dd69d562c15cd3b5c2bdf4e908a0a35e3b84c4665535fa8b252e9b5ca8df3a31c809c64e44b0ecab7feb2ef5c14a0d4de3d5a48df61b90c2fe127349e200fd00e4292cccc337c1520eb76fd22f17de1d01e92095ea4b3cfcd4f0b04bf0a668f8aa4e7578bd4fd64bd7b9341892a87a4e0e45e508825363bb322fbecd653de28b82f03cdca377afeb63571803ac6a864371625e705eb28960ae561b68b0461e2c16a4ff63062dc2c34a27885ddcdc76bfc3c4e947efe7329f91da4288523d607cddd319a665f09365f4811171948cbff58df43209b67fd3ca9542c0b6dbb24dd031112801336eb645eb1a2fd963e9e6973866b53032db01742116126ead135ad8c8d5b71e0ed69fd5a659500fdb727f174b92ef45f587201ebddab43a56ff0be90d97235748e6a4b7aea50e8f6bb4ede8400f4cd56f12d44cc3f7228459c3d5a367ec1947920d894e7ca3d7d2853fb7acae425a491fec8260ebf1e9e736104c7a603ae5694ac9a21c88dc2863c86160b6fec2942b78a2bf0d9e5176dd7c52d4e09f0a3426f39983a46b949cdd95d87da9aa1696f719a3ee9543ac55d18d0a13787ce0721b2cfba2789d83918a8de362f74894bf26738e95ba8459136df8a46ca472442bb0576e82fb871fa3051130c52252e3895406b148cfc8ee1bfd3fc054f727abcd80e370a9bfb0df4dd7b04ef8ad418991ea53ca7c5799e1ec19d2dc70d2f59dc40781908b37c338fe6ceb8c820a9cdd4563db18a4e47fcb105e425724da7470cbae925cabf606b3315f437805ccdd75305b1d5a56f8d30005051edef5701ceb41009623807d23e48309289fd8668be7cf3a8ade07074c3756d8c8c277366763a0882d83bd3f832360053b729e6a108b9e7cb432498233c77223c0a01e9fec6076bf98fb96afad1654ddcc7ebc4a13f71abc29e5731c2236d3909706400f046830019909b1501a33ddfd8c42a6790ea0b0534c663817b01c1789dc53a01657e169187e2ca1c352f277dedb3d0189592f1bec9c42ed1745ddaa89d116a3484f729e4ee8d2dc7bdfd89f1c39ec41fd8be8a9e2a9fa268d5bf2091b45cdce1763822c3f49aab5dc195cc01038ceec482f63e6cff5fa690c7affbfa88af785062c96bf441102e286b8059765586364fbbc375f2ef0d218f72b6d3acc11126c971336a3f7ef79d6ee145971760938407aaab97f6a3affdaefd5b1070088bce93cbfd896e5357df784b6cedaecdbbc03578380c41c350213590271a0c052458f797af2f476739de8ed27dc5014306d2214cf23d9bf6f5756c55a15a485fe4ac3dfed2c39463a481f89e0186da6b7da2134f6090cbe4a8e19a715136eebed3b2ad27edaf1beea1b0fdd68097ffed271953a90a6e9b36704d090fbf17c4ccfa538e3a885aa5b13753e6a2806238700d1d28817840d19456a1ff557466942e60752a612b2cf9546e53fb2b8b4e4f9c3597dcff336c36a560c5c56bf789248f0d01c7c25f8de17e4e96849928c30a1ba970b54dc25c921298a1a37ad0ea3c950ae0ae85abe523d7e005c914e0293392718efc90ad76ad82061ee0aa88efa6e85ef827d3989c88082b8812c339e990ac93dbf8f37d244e9eb122c622a6022931113379d4ad1ad8b93708a6cebd69ea0f193ef39bb9cd3f0ea1969b0bb28a8c182c78eeaf72c8db910d6bce5ef41208630a9e33b3e9d84679de63a88c34ef9844b6aecc8d6f0c5839b49bd29b654cb4516fe5016195af2c88716f35ceb598155eb7bf5c952d4f1959347efaac9880b4804ffaa5cd46b9b8e261a48af9bdefcb0d3892e6f033fae49896fe8db91514d19ab2c56721835eb42fb6e9ee34d25b81fa3f0fb2c50973829ee102d5ec6572d344a12e8f82d506e6197825aba77e4401cdd71e073d3824bb141d71186b0f008228221d641ac3191846b042077b4812112d05a72f80477356a253359f5e9b28a6ee407a2f11d5ff105e66274bd8b82e7ac2d39270b5beca1def8a35b2ee9151063e002d388f9321970aa0bcbee557fe033548c713042690d6a4ca5999427ae26bbe6c1ec7bb86e574f268e9aacbaceb762e6c2f5f96052d4a681b899b84de459d198b3624bd35b471bdc59655b1405e9a5448b09e93e60941e486ad01d943e164f5655b97be28f75413c0ab08c099bd3650e33316234e8c83c012ad146b331e88fb037667e6e814e69e5f100b20417113c946a1116cc71ed7a3c87119623564d0d26c70dd5cfc75ef03acaea6f8c0e3f96877e0d599d8270635aee25be6d21b0522a82f4149ec8037edaf6b21709c7aafd580daaad00a0fd91fcfe6211d90abef95c09ddbd4419f85026f30c3b25f9dffb76875da39e33e15093066b232fa7d56d1bba1f2268239a2eaf4e6d6e390b6afb7389bacfeed1c859adb4b574b95f7027ea122cf6637b5574e4673a02eb82c887cf7336744b012f07bd77b5891eb82bb457b0abbbde97d6ad66ec16ab95e6752afad255436b3861d542ce0fd2b838748ce5040fc531ff8a32973b67bac0acfd5f76359bbf97ee1d5cce3618e41e56c72c028acda4f618eccf05d3c1d3045ccd8fd20b6e4b8998ce08b02e552fd9a9b01c30b369fd937a7abd2343a966d95c62568ec2616998ded063a94569285297abd8102c6911b2aab0a7801972f8a852582e1cf919ac4e06e0f819e9b96011a736d9f1444fa3ac102af89cc3d30af9a51b810d2ddb9621d76c2072a9ca69af6ecdbc84a982061851562ae9b13e1065eb28f9cfcf3b89bc96ce8753f410a77434fcda2aaaa4cb6fc4aed8f780189b458b0ce2e56bbe2966eba4972e67209c28c030cd53f62c561b00a17d36aef72e410b43f6de61d7e7c93c7ada72617eca05670600a0ea9d58b29bea7237ac5e2bc0f24a802b602d374c1fbdcbb0718fc3b2bfe90e92165c25cedcc6626ae6b2264dc6ad294ce502aa77fbe9d57915d7ebb921566197f80d5fb869e1c8510ca7a05ffec85cc34f1cb3d5578ba23cdcebd48141da84330e056917c9a90e7a8c831c701148852f2cbfe5dcb91f9c6c2540008387e1f0e3d6f8d45552a8cf57c4e91d16949a5cd10c80b2f6a7123e978d58e2686a09323ad13c1409bb5d6579745e04cbff2a2e594cf39dcb9810033f83ab0c886eccc2988b63ca9d5a337b4fe93675f8c79484388c7d28c4127574d496cae17c1c891c9d63f44a98c5b77b4bb226e3356455f8ff39a1c6688ccf1de7352d03abe9dababa096226847475e00d4d83defa8beaf70de2f609318d9978f7fd35e5905d4e376eea31e0d8eceb440549f1bbc074cff8f506ee53b79b40f0874d99f9e1fd3ffd2c64e7fc1e958401b405e52c2fd571994513ff58431c721f05a4bdc2f9304c769327f8fabe14dcb3aa2fd28281147c326e98ad699ca7997f03a105d34e9ce05e0391e94f4fd161d458163e617cc84c6ed2137d1a0cc3138af1b126ad6aa987fe2e313d7c3c619fee3e67ad3b6b476ea93002e2ec2bd59cbd605384b3c5dccfe153946a041c3bf36bcd829392e5386f6bd8f5835262758190c006a47908ad14a21429f37957c708c795f585ea6311ab415d59b2ef59196eafa1590a7f7b90f2baf0707e3e97995cac283ef8b47d49cea43dae06056847b05474b93b49b73ee69678e64ed624394b63e4dd70839c67261efa6101472876f349cab59b3a43fd6cbf0e1a09d2a61d71996c4f61da38f06e1c04211927022da3da13bcbef3aa62f1bf308a13b695bc4ba72f13512adb5be325eb5cd2279dd24e9fd05d1af832f611f1709510f46bac56378da7c2e81c2041b72072a0cb541b5005911543aaa62d4a005ee9661ea0441da5389b4bb443e3f65a44012974bd5f54a5c653ad9d5c7f06564bf5a787dc4a0e8a906c3ff21afd6d89b696c0c64214d8faf0b6dd42de71e38dd82849d267f4955235793433e9f333c008a20b327ae2396f90bd373d949c4df1841fc180dbfa6e968860bcec395bd597aa915d4bd03e028e36b56fe01754c23bc03aa315b0b1e6c219b12ead91adcf7b2d035b74da9ed0d1535ddbccff41ccc71d1763038ec19a5f59c92dda8b5f8dd4f0667a40026b00d36714ff6694d9ea2e1b2485ccbe9ff5d8d9372f057ee79d4fa5493e2fe0493efee2596f4f708386db2ae08fe3d8a395c90879a6b0e4dc8a45bc0a1ba6ecafd7de75b99fea2ae54f48ccd9e5eb5572d6aa781f196f75b4b1519557a747801567dc61a405c91c659001818f2c45cd9444f7a8861b8379f6beedd180458463005b8366b7355eed8af59fd96ec785a97e6d2b0a4d21bf9a190f94e1328adfddf74f6dd541a32de6cbec7e44f75c1d6197cbdf1dd2a0563ea23fc154dcfbdc8970aff63e01d3c8b0bed12754c73e9f8e86cd6e73c52bf9d018ac0d9cedfcecdde2f9a711464b81d3ca6015794d036ea8b20e638c83291d06e2f0d439f4229343f4b91affad8f1bc88515d332f72f1d18afeb48c8ab2c224ba78abfbc7de16263fc6aac4995f2e8e7654eeb0264361d86e700a8c88bb9cc06ccf61a84e9ddccb6809ae59f9e2b6be8e187c778029d024beddaedfcc3365cd0c9bf8f23d65c54a417a6415234ad2725805cf2f450e84e002ad692e5e046672234439839b2017cb528296a11e7dcad35d84ae817ed9c632c34703214414e7d83832e90070b51b78248a0aa4f265e60824fbe3153272de428715445f884d3026d3ccd314c40c19773ef889c7a8e96e3935d3349269c11439d97ef491329588857c7cbe65a00d59f02835dbb247f0a99019756aa12badb03f3eeada5e48d6391dbcaa719b0ba0220c6baac80cd764e03257474de98120f97b40c1bf6fd4f789151abcb55f0eadbef28ebe187d612c5b4a77b3a41372023816666c6b6bdde0c1961f1b5259b01c73cc19d892afeb3062fe022039c60739b6383851a6fb6c7928c7512f1030f9d58abf9562004780583d767ff6d2ab47aeb8073fd938c788aa08d13b60b78cf1c04af589c328f0258c33db769c38693a4989ae026ce876395ba7db62170e17a1c6fd967d63d250e4b48d556f7c33a9e8f370530a737fb187744f0e50bade7610cde9c9f9aac80fc4b8940bf3fd8a135a92b41fdd54c61f7bdd46928cb3ef5446be58b78600d1d6ce808d268987074e970f9e39057982691c7ed48e9e6809574c829088abcdb44d08f4c3cdba827003a75376c90a487e36733f432a0f43f42729ffda63f1793a1b7cfd7d290d568ed9934584f9722b812f8609d99065aa776de51f7d70df6c2be8328102620a6c297962cc0fefc78952fc5fc2e0e52b075cd189c9c3d9fd0e4f5e30699b9f392a098a1cd261d390caba4406549e54e6c169fa1ce5f2c3d3c86d23809e900823f9f5b5ca3ec0ce565581af81a55c0220406791a65a5358ea004fdf2a0729c74f42b6a272f87508a0946fe7da9f611a60ec1d3d30122ec0c91fbb3b348bae01456b14f81fe7c7a8f6ee4b911929f7c22f2d55a7c0f4cb23f88e7adea81466e18eded760d6f500d6e0cbdf58442a6422146bd57761e871a800b454728d899a8cb101c781a10967bce793f1e1658cf164970e665418d6697768f8109cecd1922d363eac04870b437f92af4ad78336e6ad407ed0e6efa6fcb9b8c47806ccd696eaa6fc4d9091e4dd4a6a85b2e0a7108b289823dbd6ed406f96797f5258357feeeb88a273cec57a7d43f67ef1a4d80227fa26664fcc1a8d0d353290673930b4e159649ae6652db66a92be02cecd1ef4044e72adf36f7f731dbf6b617f52c35db85cc34b6efed180ee604a7a120081ce684a0561906823dbe65bac59624bf963bc1b2b1dd341b7c14fd5234c85e70a789c1666ebee5e0faeb1327ee0d7cbd7ac32bf2778dcd5e95fd618d0e2ef2ac0dae8db1db1d5fa49d2c66c685ea77a6721656f3cc453636f44cb52d9a31871acdd93c1b31d0de4db316d30f33b9a02b0aa9c54f469fe924f5676aac7f6c863d467e7efaf965dc3ccb2eea6a5e07808ba301e96d6cfa50b937f1e492045c6a842612a8e99838f40253c90f709b309378e99345c6a5f127643a60d566ff7dbe9feb4a5c5fa4e6902edb99d4ba41d153433cf26ce397f0c7a65b389fa3974cfce0e46a0bd595eb4b22c105bc9008763aab1b83c16ca985abf038ddb5d08236afe7c01639d3e1b37f7eb29139aa457bc3f113ebe59a513c5ee241e4ba6636e732250cc358e31edbc7a31ec0ce518f7e89b5a48f3c2535615afd14d20fed3bcb4e1908e60b8bb3c09e2064190d3e5cdaf6794bd24765bcb12a91102a48cdf76f3e446312a426370e8d87210e58c9243d94bc78799a045d98385ec251d790f02f9d2799cdc55b2f11e047e415437a7bf2deefc8d9a669ae732ea6a9fd4ecebc98e5432b7bd182f28760d31bc25fdacab74f93bb76ff0e15fe5819456110efc337912786a17b4627bb79c9469a0052a6e76138aed5f67a2a865f271331c06c9a984b3539d3050d353a858ad300d78a970fbe5f317b3f3662a7ae4091e3cfdda9175e0cb3852150b1913ea86fab37daf19cb177d1db4bbb34debff6500ba1bb8541540e923c32b9133bef927addb3dc6d1ad5030e7a7e8147982ec8cbfde87ea5b2c7cb447cbb9ed0b712e9633cddf75006b38155ed7a10e1605538645f06af80d823b358ab4e7a807f631dd72d18c450ecb7833688b0f2b8c3ddb5c7838eb6bd1de2672d5c4df499114a904542f6cbc6396b893ee0a5af243f22d1542fe33ca110ae4751145c65810923e11c02ea66467939f3bd99da9eba4ecf1b98a89699d34cc1e46247dc75dec39990e9d1763c5838cd6350f8c249f15f2ce513822b66da2ed7cebf8b507e18cd16202d532ca651d4705897a1ff595ffce6ce4331142c0c235a56e7334b16c5a2240f64fc704ce9f8ed33d019e4155cb46747a659e3421fe6b42d67f44eb84bdf3dcf1f31e38886f27e85b8b503368df238e1bb511b515bd59fa2c032bddb31d0ddefba97f8f19f7daedea027ef055a52c61d00bb1ec2668c57677e632b180e339ed1c5931310b9d718af34d70a3a4832b96a04fc702db65785ebf12a18c73753db15deb7d45e6cbb2667d546e72dee3e6d494699b1ebc1d3a590d6ec098153ce1d4c547abf330e8672a90ffc0858a2c27c4b342756952f8d20f68e2d6fdeda0effb5d560365735c567d3436ad0530c6b40e05c09d0b245f0a29d8562de3840a2dd02cfeccc0368e480872e17e1a5919555992cc5a2bbbb8a84f65b20b7160e065fb3a28502f02e8047351e87ceb8c8dd44d634ff6f19d6c752818deb9cf0b8b5d248fbdd5d85ed15465da33eca1518af8937f2fb78654e4395df8c37f260d74def234a3a4e3d2b1fe8614aa1963307888d3ee56e6126887bc950d47a49eec02af0d30c40579e6f1cb7f07364a5ab2bf4db4b9aacabc5fbcc5796053725e329c9a1e8b063fc223f783f8bbbdc6ae5ec70fdfe715adadc3ed1eb1f8d02f8f66ac65cd4d539ce5102cee983928d686bcf895fc807ed50d1b818de4dea424581199d9c17f92620a36f8d3088860c20a55bba9b28dcc8b03f0e0dbba18b999e2bacbbea329abda5b1bc4fcf0b04cd264b07611a914e917b7c972d0ddb0f5d654e9aadc1a51854cfd49f62ff6bad34eb95693968a20bcc1522e9e33f2ad4222d7279efacf010a001b48f835c5addf7d34cd7800fdb62dd1fca7cfcea41887c793fa0fe26940213ddb9e30d6039157a8fa9f8f17a9e0248edcbd6a6798f8ac0bafed655a9117b24d65d508d9596e221736533ea337a589421bf7d8c7795598375485082bef8ca676e275e6086e4d2a120e72ef6b4e0e4433e0de81b6ed383592a94c601d2aaae3017a043429eb3556e1aa83093897213ea954f8cdfb9ca86a66d7c9d6f7eb765236540c5905772f8ecb330ef4d2bae85dee9fd0256030ad1ff90584d083d9fadb5c9914bd64bb42ba19d19c17015e6b8a49e8ebefab4e4f3c955c06b7879d3d67bc70a5c80e5e76c314abb4dc8d2bb1ae0157d394a5a097aa8004d6f4ccde47dc9f0246e2ca09d38f01eadeaa3dcbc2af5f160f7d16ce8c4f02247ced1a4521244b777f73616462072bb5a2eadae3a677ab4a2711c680361465e4810c387ad22509f6d8e39c162a13d93589022c1e65ec2d1ea3b77c5d9ee1ef6d6cb8f02462c920a7da9a41c8339c52921a5bfb2108f82cb80cd9020dcb9feae7c55808ebdaf6dab30c0118218688dff3de5d0f979782f240eade1e39c5349c7a1556497941967d42f67eebca2ac1c8805b7030261871c5dfc32e9989958a4e4ce2197b739f90527b217a806a272d55631bfd257695afeebc21313aa442884788b7096684fccca187145ea0aa86b6cec1a66ab7301523b4018b4fcb33d415d154198ed1526132b28e579013324e437ac58221aefca1b561d38af012dd541b32d892108685d5aaccb7737aa1a987bba2943988d281404d3c5ca57cd94bc981b33ea9f74bc6611c382aef8212b83a088e595309ea68fad38cc4645be6243b2f9cabe7abe9bd0c703f1053122d066e11863a560bc058d72f9a334ff50111b30c3549d2942811de8e27912891bb3c2bbed25fccf61afae04aaed0efb2f4ba3702c540f41bcf6adf5e38d4f567840179f7b9f13c31c1f61c0a0fc3cbfb86c6d2f896b8d5a6a87218c9bc0242fb50fe61a484182f267df3945807356b367ede89d7eed8fb9f79ce90b5f94298b7e7daeaad7cfb2c3c15994e1ddc4e58cda5a9668516c8f06c0b294f0c38bd7d02113e1dfae6c3bbdb5392543fd7351926c3d070eb56b13c7726295eb4c19a7c4495d200740d97646bfd83aea8401336aba0faaff1f5bb65269176c497dc021ae63c3d9e0138a0b054dc17623e5f0f38c203d02c803d0df5e316b9899bd11de14ece28fc8aae0626ffb8f47aeb7b52a6d5b5f9ee7e74d074157b9ab6aae71258e5133a24f8b8f04fd259c2fd95de03084b7f1efdd5e32b682389c052ab680a0713d21c1d319e86b136862af426ce4be78c27e7626bd2475b7708d465859a2c7741d575ef1fa8f2d69409d366859452c90075fb242a894bd478c07df822c6a12fd5e2eea3a91e594652a8675b9a783f390f33034bf84f605c8e796411693390b739c22f3fb647e687da2c8bdc4dc13abc2127a6e0bf6eae7a21fa31bb422b2298d33ddfce306cbe23925ce9ef86b96ddc9e1a8dea662c5cb6990c8bfb95f47f590d1aa655fed50ca2e402299f2da6fe20eed56071d5d293985f771adb4ad7ce824e232ede08caf68a37e4f3f12ad11510791dc67ef4a77aa9d90387624a1c389cfd1e1c703693a465f2ccedef6582db35a7bd6717abf53a7070777a987b0be42e84d41b1470773fba7f80c2a0c7017716e17bec47e202fa758c9d9a86c6ecfac04a0dd1d19ebfef1245c8180c3695123c8d21fd138118e341963b90331306a4dab790e6afa8b4dbf4ac6e983c9b87d42d15754185707d1d5bf41a03a84ba20805332703b6769b2ce81c38e937df1fe473df4061a49779cf4b10029ceb54084ec82698d0eff0bf0976fdf0b305e8a56b9655490478de56219a51bb030618809facf8acf461ff679b27b75ca0afa061901cdd5ad30a2e5a3ccf1e0cdf007e522338112b181489da0a82b245563cee9b7c8fe13976616dcf4872e1bed9e26dc501f4dadde31177617d1057727db4b99a5676c8af948585fb6c0c019998b3cf226268b98afe5fb2441c570cadbe20eba7475afa84d57f5c27d124e665c57b8bb16d1d17f9100621cb10e13abcc1876b0a77c2df80e356dc9a9f42f8ea074389ba4b9a5df3c20fab3e81364a682df1210b0d36df6b6312ec9efdee9ff00712b1852367f140bc813ae496dca279aa66f5f2323e620c00bc737913b1433e6cf0eb5a1e0d3da8a564b506785dacb7e2efcf060d63d02c605b5b740a124c9ddfe51f806413a7f325c103ec4f41cfea7a939790c72c91932bf78bd70a9a22d508fa35401c0199e8e69f0ede420e72d91d5b35d887220d090a99ebea3acf2dae8e3615e26e607a508d06bd24794eff4d714d912676cbac56a44763f5c33bd5f01aa2a7ae83b6b2f3c5fef8051d88dd0e1e7494c2bcb2d741a30bdb3fcd6683625344d4eb838ea9993490a7ca564574e4cdd524f3805cf494aced3b117fd79dcde22682e3966dc60a82c3b3bc4b0c2c97267a2a03ea536d156af46bb301168df96e509adce2dd730d58a0022025656deed06a8f38231ea88d8228536d7cabb9aea0c8051f9265186c5e2d7d410bd89fb274ad39db53450fc39f91dc87181f8bb42098a9f4cc8e1bed3b740c6626ee2aabb94c1233a15008816738ec48fcf869d295c870a2b8dee559977d98d69e2e76a1484e018a36c8fd8d82246cf951c1bdd2a75e417380dfde771c4e07da9a21eb5cc8bbed263a3555b0995d45e23effee7aff6403ad49196e1170f143ba424df2a3e29bc050d41d78b254ec5d4bec3c649345e1a0993e13feed3b6e32bebf3cf1403ef761502c0ace5b5ad89e7c82ff87e421deff7f8455f4d526cbbe2e397652f983d6b86e6b83bf735429efbc29d1bf37396208a74667ba8ed812ce51d7817b975941adf2b911b3c1e9e83755093974523875a358aad2b6e3fa4b4970c2e7d6e26a3f28233d3a120ec21c608d49bf0efec41fb8dcd81d529b347c19d32230c9a15bd8114b2089442286cd51ad12ebf50385692f79f9d0f57d2daf25c21ee2be9ed71450b08983b1c5de03f2fc8b469129255af078357306538eeb5585de871c9f84fccd9aa1b2c1bf72c72bc4dd574b3849fbe421b38fefe3fe3991638ba64b6d0a977153909dddd7e920e44b2fa689f79b52f1bb9cab17f626a0c1a64dc8b3d012ee22227dcc6bd7ec1705dbaabcb42fc36a00901750e653ae28cd944b74bc8f4407c94e90c8d58522b376ba752035a86948fae64d05c4c43dd99d76ae32ce7447ec4f20f31881a934fc1f30ba5a722a34f6c5066652190f7bbc1a939d8a5145c4a59ae0cb44d90dc9fae9879ef3d57dcc7b4b3889bf4dfd12d82a354105adcb623894d643d543788ab6ba054b72c568dadf72c3ded5c856a735b6a2c22a4acecaaf2449805229b11e377cf4e95faab5062a24f18e1bf3e2e5dca72347829016a3113183ad43f2812f85159a9f43eb2af7654808c11a346871d4e300f894e86a9667a5caf03006b062a96f4096a5f2905698c6519e58f4b2f6255481fee8b8934bb8676771a2cd0661aa702df60d26aecac986144e5f9c861ad8e1ee8106695a690c5fa25921af4bd49002abe603ef4efc026f99f9b792ad85f4718ea8776485996c75c2d033144662640c008e10b536934a6b27c5e640efe081eeaa9cc210dc82de9111fd6264c0b42d757517bbe02f38aa6207dd760c13d3883f8a856fd429cd6d9bd50935078172f32752a98dd80193283a8267ef60e3050f4c768a061a32211e7b571c34655143be09df6b0d06744bcfdcde8cd7a3251f21fdb6d31049c027fb19df5ce8e6f8cf97036486c3d05009a4306373b83da2c8c33a918915c89b860b5db4f4d8f33dbf85fd2822379f5c74b11e5b45199622a9ffeb51d49b018be75630200a8df2e9bb91df7465f2dc6135fd8f0c2983166d6adcf83cdb2c5b58f2e57869c78d4dc46ac291907a7bed27f39069bf487d254ab263499bc74f3ec94ebf1fd852626a967520fcc4875a3c76577396bdc98f2b82299ac6b5bf8d12a8a4ec0bb5d493b32783b30658b5182f1609adfc4bd54190dd788b58d4ec6c40bb9b75264874a98e3f3d8498932b3c30ceb04685b4941cbc23473ee53e76762ecbdc6156d85b2b65a54b9a9bbe124ea668f447183e2da7171c3db9563c8433459f0eb885afb0a19f2254fdf52191d6f9aa7fb79c33c96a0a90030694163e2aed01da839a139c94a47e00b69004d15d905df69efbd98feefb46412d8614cde38fb7e8c97d4d478bdc81f9cc52aff96ad54904041c79a8ba53079e34137e59e6918adf9216a5d80eaff2e447256932862f354ff2e75a3b577b9bc225259b09bc5d4268e64d6277a5859b6c30f07ca43806ea7f6f44c6714bd9ca5607a3b406ec59a72ace0ace4ed9c642378e9b2e7608c3313d841b037220d75c02e3741178feef80ce51352f8231dab0ed690dc8d17eccd03138545a655ddc186dc082fa867a8697fb78b6ce3e3629ad37c93091dc238a8f0293d713728b4fc740a6b4b758e985b25a4a75f3a86e1c01bdb7ebd3c07e6538589d8c76c3319a31229ef28f17d3569a92cf5ae6e8631973263a26d4a418c691dd5f5ccb7dd7241ebcae24ccebbe60174c0f4eee279d89cc1a5bc9deb177136437e02d59cb065556b6e132b4fb340bf1301337548da3d5d44321bd370e25b6770e28e969d34495a0b73c059070bcbfefe5e2ff6141fc63534694e827e5aa15920b407643bd1c4cc667c983a771dfe4da14848c5a6c339d11cebc33f85b8c9a7fd52fbe2fb213e28e6f8f95432723e27a6402c88a35cdead581a286f09a55ab0515fda775dab3bfc1779624aaba1322977e639938c554b169074dca59ca8cb2eb73b31b5c5c834c2726e7162551340af909afe9ab43505c9309c5e57912ba16fa9658012d600bef87258955fc14100367aeee9f2cd847521c2f13c1999b663ffa27f4403110d411aa1b84c7772c2e76ab1529a303acc3fbcc203e45008d1895b3cd90c2ad92651b59b1e156dec116c98be568dd78e64bbf6a854e58f80f5980ec31326eec0e46735a8fa7e978fa5166d0c7b135d3af6806c0054ce4c749af686ffbe52c35ad0083755cde678e0066b342620e935b2ea03894493fd0b664a5b502d2aee4cf961ab274c18eba68fbdd1aa85f86df598c7ebdaff82f040d88c0cf6e5e977e03f31c671d65c0c94e123f01cb65210115f087fdd9bb246714dc8a1e7a48a7e319e98f0c3af17c7c886d12d2741de8e1d7834561d93a27e313898a0bf038e6f959a2fa08910cc8bb5d35e1f4692ee267e76c3f4f791c3f5f51b648fc96d55da90a46e5c3eb5fae6e179231cf7342187c8cd4fd307f0a75c4178c4d5a36c813dc76fcd8a50f91357dfcab8ccb59fe900610e3086db4abd0f8ad33208e96b810 +MD = 339bdcbad66c73c3ac55d2fb66f3c3ef4fdc882b45493d04ff63d87ec93f402468ae062057e330cd196812fa7aff006e + +Len = 97648 +Msg = 52e533a4f310cdcae7424e42caf7520d2ad6f69e3c9132e0ce0d6a7b7dc33f542866ab52a5c54d68b2f401d02ea6b49489de775379c7d142eedf5a71495b8550c8c8be7145eeb58f21f9f9d07bdbc847a5ec26bdd8d32cb126aaa39db15dd17b1b5393883d51ac481c9b5dca185c362d67472b63c27fea355eb46c871e8fcade0751531ff4b7db9a8b2055466ff1a54eb739afcda091b4d67e47deb8f9bb1980750825bfd2e7e98d56d10bcde764bdb37e08da84d8d2319d6fa921b7a8a766694ec132ee3fab7f2965f6a4e6e87c2763a2fdd30fd40a0a9117225c0c951c58a278c4a137a3c94577a0d74b1ada008b660d60c3f6fa01e6bb5ffcb74026e19732dd599b1f660ae27ef0bb26f026b990c5a579d1c2b47e6e212f7d5bdac5c0cc2164c84830f036ff463bec5df0326fdf87548f26fa694b4acd70ef7062d97f9f78f458cff1aa1543d86bb019a267e920b401ece926802e21c708981d61cae7b73e775359eafa6e573b6650828f2df1fa5594d643cf63f09b15e1c18b5effc0bd7bd4ff0da4490be2771613bf3eed4d1571f4965c7c795961c1e2b1e2e1e2d25837f3a514a600b28d956143f9370dc61a100b745bb52a301bd3f2b24972dae4317bbc8c9578852c009c31265703f724b13ac0b76802de3f7151fb0ae89a4fc0ef4e17feb9a34241e2946d060229112f81f8fba9adecfd4c0945e402e8e0a92c3bb9ec41a8ae9db8dc86fd292131c5af3351a4904ffaef208eb695e271cd51f1bdc3239e8921005b9579c9d8dda47a6b6e4ea4b579b51d83a6adf5f2aae8add71c74a45d8485d2f0b675b85a5e09972cdbf6e16051a3ed3cf931ee7abcb926a501d457c6c3617b40e682b4f9cbe886ba225144d9ff4ec815304a67c1cfc8252513ec24216b3d6313cea9a5fb4ccaaeddea67b567ac3e17d4f3004910099e101dfbc3f4b5a7a1f23115f171a90b35775ddb411d5380f94042e95c7aaf95c250566061adcb9d1690616463014b2db449019ee662e6a209ad27bb65e3e699bc4e98ebcf39ab7523a56c63053d29ddcc8c92db5e6e653bf6c44b11246cfd3e1571aa44147e9d5851991bb9e10d8a4107a8d939b2271b7246ef75919ffe3bab542056123866e96e27d4340fff5ab881ec069b61e9774f7083956fe6e07fe90901c562fd44d8d6de2dbe7f0c650af9c6030ca3fb0b45485c341dffb6efd94f7fa4c797af3fbbadd1ebbfc6591d079638d523b8ae21784f5fe2f1eeaad2f2b536c68ebdcd31f9b76eea40cf9d2f37d7fee9b3a12231faaca11478036993b46355ee829c02237939deb1a76381a1840341c725270046b2a749521a089c3a05a005a50bfbf31b237e48c85e4aad7dd56428f8df12f065888880253fc3eacdcfb66e7291a44b24dfcdd5b8cb4cc8cb1140dc034b2a999864966d134ffefc56f9ebb7dd7c5db043956dac0858317a9122e08470d036a4e62e1a39a6b27f79dc6b88096e34efcb822da7f7406cc06dd9ef8c49c8d500b858ce5c0b66d10f0a680dd48bae212243e88fc3dbe96ec246aa608b5392c44e7ef42da40cda12755701c7196624abbdc07da409828ac800b00d5d27c95604e99ec4313a638ade7b07af819dc1593b8aec4a52c014abe13f5108cea6d39dfd99bfd0c3653afe9ee7c27a23aac5d3374f6c568232b8d4214ad1a69b519bed1725891ecc6fb6bfb882326b9586991c09d5ebaa1da5978ef0e8d9ecad7046d1ba57a6b9329e01549614fd89bf7967bc17e40f4c0962d960b6e011e4ea4bffce4ef5bba6df3b43459e65cbdd89cd5439cb44804630b1a5d3dbfb20953b29ec6e3bc873eeb98da31b3a3c456ddcc88a1d8cbce7a078d9236ec701af0788543538e998739aaade4a5dd16212439eb431efc115ec60cb247db9e3ba6543ba1203b4c12d66b299746093caa0db67b9d77038d417369010d8d83c95edeb50b7ac7e6b294ef23c6d990c458fbc48df137a707f2c8a6e372f3e5f804664e836696acde48ac5bf42109276fc877e00b596e4594c31363b5e0f9e370c5fe505feb79319a74d5876cb69aac73f1ab0acf1295f52284be3460c9a408b684639eaaf8871893dd8d0bfe060282797b018f399b3318399e2583749b76b811d65283e51c64a462d95f44188dd53bd8bb1807eb71ea315295e5eb51d4e6941b22379a9ed586777ffea8ea5cbc875b2a385aef55251fd306027bd68914880f4afe7f6d5892610453c416492b109d42d67956afe733487fbc5a53df9ac8bf9c29d1b656730188cd86b0140b14389b85760477e4421af899fe041a51077001cd202268f0ae71625571492e8aa882e6b581504b06d64aa4a443961bf54f88f304d69703c64b80821eac05c242488e134570e35ca22440d1310596f516e39217f5a5761331daad6c9bbf5c7bec84c8b5a7cd440920acac02c2ec7d12405429c4f2256613edec56865ef3e3b7c3ddb1226f1ee8fd1cefdabddc40bf100c219eae9cdedd8234f12a63db12020282b3e60e0dbe4884e15e6b76efbae35ad4dc8f19582a52eab179879982725de883c7b5bd0653f95d3888bca26fa3707f24d579b9a6904cb9ede60c7c079d4dd65169ced3db4861d26cff6cd4eea2ece986bccce42ab9417c44e707afbd0b5858661a8fd71f3418810912fa92ef21bf1684e3174d370dd7be50dd2789254513fb5c6a872b248f93d59763c440e3b87da279e8d7496df665dc8c38eabcd2c2f71b8eca33649db34a6c928278836ecfaf0a005e9b6d321b7263619aaf9f381d885587da1307ed57d2a284cf85ced2efa9b9a294c22d25d583ff7b6304c4e7ad2e15d1eab48985e59313d8db5a77d291143dcb2bea0dabcd20ed344278b2440a7ef8f79c766e19d5223d19068532c04c6502f4948183466abfd9268989ebefade15b63600729fbbef69ac00184743e8a12a5b96f07229826e73fbcc8a6c64d100bd99fd5b541be0b8699683ce6b09fc2b3a2840c096ff39a0d8d71805df5ded944e0174e2f59d32368c57c191a7c869ebe65ef0c06cfeb2cb93eef412def3752230b6469c3b6cdcf03ab66469e3c6566a97c44df7dd7016760e0806b7526c9133ca8019910fd2046fdc7d115e074dec2eb623006dcf9b8c2ab0edf9fe21116b4e862796ca5a15d339d8727279fba352c1a943b02a2bc93d6ee16473ef342a28fbcb72644e027e70d8985e2fc1a710b1abdaec0637da4050ca09371c9173fff3c2022a2b25f15503d48208f03ff4de3172afe6a99bc348eec6902c9eecc6d7f22c911795580de2b6b3003a5cf9c853f9a092f8435ecd2b3febdf0c9e0816fc4dc0e10148ee406cafff79ba1bf90db932bceaec7989e22f6ac05c9ec7ee49b42d065ab0ecef703d163f5551d647a956034f1f88f522e99e98ce70acbea54948ba8764ec2a64879b14fcfbc735e9867395e099955f34c9bef09b83fc2e35fc001bca687caa546ccfd1bdd5e4dfe98a5710f7bfda5ec46cd89bb1fe58bda74c237958cc2913c70721740a4a707d4e9f4c9b1dfb219bdcb933c0984786130220fbfbb7fabb0dc540d8256bc232b621ac985ed8b430be83981988d6c84ed94e5fceca7158fa4257ff3e0e69a5f33369988482b353d06ec2f1d01bf5e87ab793f3e50d0e50ad57842c99548b5c7b9b2e4d582f333ec953a0aca1a07d0ed054dac388ed14499ef755af32225a4d929779b25c8ce2dee31625b2d43ff4a41a592ab7fe920dab93c8d070519e5de100cf51afd8c2479be65f59e9b122e4111e6d8cb7912380dd5572ff583ef01c808ceabe2c13f8eade99d5453a806ed4bda53907ab87c8f649ac9eea4d40411f930091c8115657540dc521f08d884e4d107665a37b29abf6565ff49838a0b9ef80226b7846e9070c9232eb62cb12e8d6725b986810bff1086c381b1102a77f13b1bb21d5b4142f9ad3a8daa4da6664f74b1a7a5f5091c5b4f3fdbc5d919abc138c925ae7411ff8873aef96bda4cceb38037cb48f24e64d8353777e85cfc497787b71bfb7d651895a2dcec8b5108ca5220249ee017408b1fcf56e0a90a36c39c8e51ef74c5cf30b9b160f189505edb93cb049cfbb293d1aa83faa0786f4d9c98e3262abafb94da5d35c782d646d384f0e764300c729ceb00d9af21e6fac54704fc90583e6d7a7808967d2b02a2fb69121ba01292d5e039ab56f0ff754b225569514cf26fb9c49c3459fe448ef33aca5fce549f1f3af23012824ca393cee94a2e77a883df5f27a978f6c789ebc6165b32860e4002303780cec23e98c3048e97dce63f76fddc08424f036545998a128e42b929affc44448e48bd2349a37a86b0ed137e565baeead91ef6541228cdb3c5f8fe23296df59dcb08d9b750859f6637e785f1ac794633e07156107a19ff7ea4ddbba766c7b2a7c9978e572819e1a19f44b415e3c74097eade8926e7dd9dd7ad698812c2aa09f6fc7d617f4ab0ffcd599d346796c61c7b7acf2613e5f427534214d9e1d7756a0ff612e9bc32eb385df9497d6320063852f2bbb343eeee3a85f57827b11fca615728f09d8a7b3939b7e0e1f5a52a0822b3053c97437d3c35c459fc07fd06197e6117bee3668e2b527fc2ff438a2f3c7a2004ba68af2b5ea7a2c228d12214d32fb244a651dcd6223129f1e9ddae7a239d0e73cdadc343d61eb5d08749ccd687e3cf327f6f5a0dce542b004a2a6ec54e09e2f4eebd4c8132f952078fa859d5b8392c5382a26a7f701a176088c0678b2c5f41ea863d975de5c62bd9aa93656ce49e3e4a58818ab5c81163b53e2615264efbbfe73ca520246f1397b970815c368d9199697993473b26c88450c2c1f431166d915d6a6a938f5f501a3979f8babd23a1a2436e3e0c9a2cbe1de5cf3a713613338acfa8145df9070a47dc1f701d5b474d0d6a9f08573d4a5084c6bbd638afe5dbe0a07e28ebfc26b09513e97dd0ab49021f319488c3aef02e5d76015ba6f8dec55792452ec9f30ec1867360788127d95f7c5ad715be69ceb60c96480148cb9e9e43f7958c74885feb906d0d06bb5b58b39928ef55c3f826661689e88d9a7275b53a52f7c878367a6d4783479edbb057acfa3e35cf60c4a7ed0fe37b47289824a8af36e4694167fee51038b8a75eb146ba040d52c90179b3895d1568c45fa70bf70715d3f57c974dd18f0fd8c6d0e8b6596b08cef94261e9e98292499bbc299c0ef6725ee3666ee7b1287b1063cec1171983d2f2c69027ab7c250c9623da8a758ee1ceddb9ab397d1250fd0804a4d4f968f2de66c7773588bf98d6c7031753f8c56d9de8fec7a14e63ad28182fff9ecdc61c9db36264160232627354900f10b660de62091928110c33a16ed95c3b7914bf7593312de33398632674d7713e4b3edfc8bda69f691316e0b243b40fe51e6ec3925198807128cbc0395dc82d116df290b1035a07e711ff19744940c188d92c60f74b32109a600ce83f909f0a14f362323bc58bd94eb8354c4bd208079343ee1629029644cb73ec398dafd4bed5660e22ad86b489fc5059d7cd90624890e914618bfa4da390deda32c82e01a1cf4066e0aac98ca07c84cd6a6de6f80b1e234fc1b4a4c09366fb6772637d9e696f1d0d0a98005ca33bc01062a15821d577ace0b5179487baca741466e421036c215650ff19cdad08d69cb36f0c66882e59c087ca493c1b8047b3518ecebae920a276e33c84740647c96536ddf394837c1118a56fbe2de46a4b43bf58879db82d5f1924518cb5f0f680d41b3e1b54bc555a0fba13dacc8aff61afae62a36be8f8c397a4cc86e5e58b9943c10dd8499b307130466543aa67b60741bf2ba68804095c8cd50c07965c8d8f4ec8dbcec598941314cac27d4a1304c8c45222058481e5966345ae8349ee52bf5fa316436b4d06ac17c7b9ec1e1582128217d444e3fb040da577028e62f3a1b5e0e05bea9d10fe98c3bdba14b8d7a4711560b0e918d7eb3eedd9d68d8404c11f9cf0fb28fd9ce285a32d518b8cd1f260f8dd4676b591018686fe69053faa5738ce659292ef3958ef20870eb51cbce26e96ee13522cbefd811b455889d84ccaae0faeb09d048ed831e66b5035eac0faf69a03962ff0da25cb155f138fe07491fbdb4cb3cbbff5d6fa4f4aa46279b6a2955cce4d44a44b10b10f9c288c0aba539eabc03a837416ebb4d59599df3be68fc7699eb754b9ba54cf549d1612a97675f31b99b378e36a6cde13ecaf00c3d909094b0552b4a3804892aec25a983f417fb585499d00605900e284a0428b8416b4d77b82ae08e435929758bc64a14e93d742834075ae9d7b1e6ea260f2b40f27f9ce65a727b60e529949fcebd2a259f62326901ecbf7dd393beee79f3e3ec7757e3aa3e36e40845fe31705c1133fd3e0d9de36551e60b22bdfcfdecb83703f9788b8b0b7e03ce8d5f6aafdeca4be6edc71d5d063db7daebb70adf27670ecf9f6cfd516a50c0f9e2d5a626fbf15c26d4171aa18cb81a34570a4e5cd108529692baa0c402b603d36ee74e9b5c8d4d061c85fc75a0cbf75f8e3d323b92a1eaa1f9eadbac7cb7b4a2591dc8d7a9a606ceed992ba2ea7c36a4b7d81c46143cbe38fd8418d07f5bbbafcbff7da289456fc66edc0ff011d5bf4bfa637643fce0b6a2c611bef9b4ab0042eb16d5c3a4707036c8d51026bede7a9c8067a7fbf596ba297b1935efc2ae6ba3e1e93904a332f165220d970e989e50df716c1736a565b2134422e47a536de519d6000f2b2e90da9ca50a0a6e481d275bf5f82ebcb45586a94ab635620cee54edf2e4c001ec9413237956d30f7563e95932955454cb6e1e33b55c8f6e973ba2685c1cb54e86458442c57958b9c8797c2153caf1c892b962f9ad9d5a689c5cb5cf3d3055daa3ab1641b1f90333e866cafb7e1f6ddeb03d3b4259ffff16c257776dbca9076ceccfaf6767603b477f32b92fdc1d305fce028f58e10ce440b236ce89020e35ce09b838fd0c3567bb32e63304944ba212931148816e4c72b01401a46a36e746c6a16e9a4bcb01f158ab881fc3ce322cc1a8714c062846112d8fbee05981bda21d5cfabb99ca4b40e6922364b5b4583432b42a852f36822a7ecb776a9e0b16b19be463852f319bbc2d8ebcec1f6b47242e6045d943c088236c71332a81fb7dda07deb1df542979cdf4485d9e4c1e87627d54c9328cf0e166bf29fb084a7977882af5edb052da6edb05680d6283f39e58e737be7750ec14593f9ad6ec40af8e20cdcf1ee26f6b014e2695d5200b12166c34b12d90d8dca966b36dccbeacc3490bb6144c5cf404bb8e2077bbc02da477082b6c1d646ce928f4e549e566d6dd30b1ae6d7f0629cf2303bbb7ca2b31d14793960d96dd533b1a6a9bd72acc0626cc7a7c82c0c855f1c116befd07475fc010753b3fa0e2d7f907329ebfa2d884c5a4cfeafa168ac1951d2df3f07cfdfe9a5915e2a8445c3e4b75b3b6a8557397e34116be7d8a34b6e1c0b2203930365886abdd55f08931d15aee55aa3a4c8389a829b9c1b523ae7afd310b0e802bd8b3ad8d345bc0784ad84ef980441e8ef1a03be61ebb47e9e05512f8a2856c76cc58378782bbc0178f9b4f1f9c4afc23a625c500af74dee4b391489edd4da518fb8f4b21303e9770e86183e611857b14895f6dfdd2b3201d0d75c6aa262dd4194ca011e4a4aced8b3e7415d948bd446881985c67f142b59bd848b5a4e4eea182a6d2b25747cd6c6e771a2b7da7baff277816b9c573e74666fa533c147e58b35af36e56038168ba237d9cee5c9743535a5523ada0c06b7b875dde84835e33b3a91abc246ebb477fb2364285fd8122e8080005607f4095fb05e730b579eb474877030445225b3064218c5318e8cb1d67396004f9ea5b2f6fe88293f67c8d5c1bcd968ee1a7cbec107a6619d1a6dffd78f55f6aa16979ff7e39154d6f16ac39d3b2bba11f8371432dc5abdad6be2389c245e47d7f8502cfd1ff87a749ceb0a7192f5a872740b7fc600845df4fb8018bee30d887bcc55e650f42c2e9ac2c026e954b5b86226504e1534d1b70651de0c9a3bf21ce7fb2f589e10aad5bbfb90856ee0ea6e7387bbfb8ae9b15d43f73270d8af9a89bf1d22f05ef603045abfc2b27cd8023f29009524a18fb1b550745401d4be6553539b075a0e04b33ee977ed3a8d9aabbee5397245f3a731539e21892c18d8e11e681d12d215dd49e9facc569a2bb935425a8ae9dbfbc0eebc9fa7685c3f8fac2f4eebfc1510d0259a0125b53dd1a43d7ddb8d5253145d1864d77e681ea353151a8aa0197f899dd4d39f0c8fb219fc32d5faa94247e7dc6cc0d81f1eefdec3ba74add1f19dea86d60b26e92c736f21a3cf3a773026e0ef4a6503e1d34c5c421aa22aea1adcae3bb7b52b64321e3ba50eee0d7fb27c99d63fc60d9f5bb0a66ea44774610bd85f1ce8762ed6270f19f6e2a7061b3fc57d51cb78378feec937a9e5c93cdf4b0d87cae6a2a3e781c294b7bd7e96e23e7e05b26bd0244c22d2aa746dabc6ad3ee8829640ef2cf0c8d50637fdf9425d4512bda89f82564c8e79595e8a53b4537df60a2f75902c8a62a31928329b9af4da301f84e4f330098839ded8fa75887a7eb278f6f35a152cf5d937e8d9da03316432a5d7ca97642bb670a5740c75a58ac7aa497d58919950d8e3dcfa82390dab89b6eb21bf03450b8fda47a05ed8bdfcdf4a063303db0b8eb23f82ed9a3d3ccba11959f340bb65217ac33ffe501314592c1e39b8838afe3ee858c432a05af30a40f66cbcde2447161db7e8de9ec95b1834935e6e5645e40a01cc1b5a2316d2efffcaadff15d25d41df44ecd1794ff4c29f45eec50a804f488505f2c491054f052402982a564a3a5d35e6b6779e2b63e0b2b2556d0ecea2a2e8a2d522888ae9b2543ab5df3df04090b819d0217be04aeb15454cc6e1859081b30f4cc4682c15a016cf818e2b6912a4ec5ac46f7112fc4a4d9b1f5311597b6d6ac7c45ace7d7536c25d75a7ad1923023925fdd23c180aa6b20057a21c9ec5de7648d63609d36aef0d612cbc4184f4313507f6ca3b83f858e931702461da225d7c2efce6c8e269415e56f14c7740f89a567d49e7ddcb4809698b136a9f900352d2c692fd7a0f12d62bbb7dd8ccb1c2d613f2618bb1727c00a9999be51464db6710cc52eaabddea05fc0b1cd1907bc55cf403d856550df7072fd984146ead2cf2cc9c972eccc3416945c278d780e382a78d3e18b816f25b6572c766891cfd7a9e5cb3ea4a5b53cb68af8dfc5b1cad8d3e35ed9d2195b41ba3f8efbda39dba36b247aeb6bde603ea9c8faa31cca21e378984bee0334fe7ba5b58bef3f46f8803e713e9a709eb58116d6cc393acdfda3432000e8c6db3f1a9f3e8b1941c10db44a557f115bed9c4f263dd469c8c1455e5a02e78fc2150668cf64f64286b10288b657a519d3d3fdee00847cfd6eafe15de5c666aaa0ea3bab5eae3432b61ebf44ab00187a8059c0a7ce332bbbd39eb8e80df5e7030762c72c74a4adb17a102b3050d640fc0b86cdc2b5d3486da096b446f916d160a086903337cfc9877a903094ce6386671c630c87dfeb3dd97ca0bcc1d3b18c8a135d7f08d2b6f17b5da5b5b74c2f50825af6653e740371c810c2b99fc04e804907ef7cf26be28b57cb58a3e2f3c007166e49c12e9ba34c0104069129ea7615642545703a2bd901e16eb0e05deba014ebff6406a07d54364eff742da779b0b3a5146641293925b9e2ebb555705b57ddc9b64d1edc429d9775a91375619585c2d27c5ad905be4d1d21ed6fea636b6bcc783b0eef2a1107d73fabeb519e647caab4072a1e16e1da93681ae7887d456648bf35af63d212195e74ad04aaa8111dd3135bddfaa6cb53857d1a2415070ed0b8684d36611b6f5b95dc566766c5c2f0a5b7207b54fba3405a29962e7a49f12f86392aadd04f4d55e23e4f1b6f3ea07e8967ff0d135e922a7a34360ea08b140d19fb751b9ab4d790ae643f28ab5bd24ee5ed9f9a2117c0984d66a1cb6e159ff1d975d589a69232936214cf97046380e8220faa2a656e54123b87806dcb2ebb642e71f3fedc3389e66417a76f61a0d4d5a996c5c6c7ab7620ac5e7afda12090ed80b5768224de02121e356eb8a958f49ce1499a742f15504b08b43881d7314514370b071d66dac59ef635cd7ac6d408c531f2d13e85f5071ab751610455aa0261bb394ed88a70fb1256e16bbe9f5c39d90357122cb193c61621fd9e8b03d3f15d7507f2ba78e8ccf7a5fff18b1c37ae5fbe4204459c37b3c5ae809720c9f3378fcb3f9ccc198a5fd34b5806ea25af91dfc9794f912c29f6b1c7a1f3ca8f53ff7f26a7f315539ddd31b0b453e2a20a07e18ec49c184ab0b862d2295b923d3c6fb6ef09a09d0f6b6d963cdb7f7b7b913aee74ed93e3df16215f39e1767ebbf4afbb8c2b4a6c363a388c579433bd998c528de3badbf9d1a15830628eed99f1c3e81667d59a8bae53669a69a817b1e243764743f51d620a9a865db7fb67e8c7f34250e6d1370161fe1e49dae0d25e3ffdcfa3fd6400277049d26e9eef8d7526cbe4f073e6cbd63583881f12020dcd9804852977d02d4fedf565ec81310747f492f77e75dbfb121429cda679d66f04d69ebf611a004be268e7665fc78a7c661b91a283547971bee53915667726a10ddf14a5d44ebe03e9c868fe4dd8c294db81100e867788d5e290fb87e675b84af09dae61097cd0fd6af7be55401ca1f8ad1056620f48d0ce84fcb74caed95513b3f7b318880affe070dc3192bffbef50e4aeadc7a62e1805ae13b58b460dc5a460d46df5da621354005f0bde53dd734389455b65d4912a2267bc3c6d3777d0a4fe1e221d86ead40324689260822af67aa2bca96320d9ccccb8df961a07813ebc96bc1bbb140c0a92e3df1041d74a409d3afbdfea136fc7aba76509b94192d6932f96a0f50d2f7cac46accba8d7a5195356ea452133b9e2683f34de736a1161d2d194f8f3f8baf3f753b80cbe0ca34944007123310b20e7ab85355d6f0c68a820849e6dde5d17371b14e91aaafdad97193f78c041200d9c1b8350cdd6aefe7026519c45dec4ad10c191283f953229cc7a1ce7657afce6cb61406e78cfd93b848b3f76c91ab6e44691d15ec1a73481b00e9da65a0426143a25c475a4831487abf8571441bbba24a032dc71e9078a1b0b7ecd9de7062600b20e184f9a19e74aac15a05ef5e859d5e74dba4bffdebc61a571b1b554a88511fac443e2a2badaec5089223d2cca1a5fe38974d24b5353b9469053d4e814caaedcf04d18038e76d55ffde5973089852b5c8f10f0148fd68db583bae3ec6f7d411e3a3fd707bc426ea118f256474c229f1a06998ca4bacd44bbf1eecba8e4263189492009f46dc71ddd835060ba3b7a24e497148d41fbc0462083f87264984ee6e5c6f89513c88b4bdde5079fd180142384ea8bdd347a38fbace0dfc268b67cc8fa58cf63acf6186167e720f9d3407802c0a60563c560bdcb26b0aba2fb64393f8fa8ae5b071ef6c54431a2580aa62f2b61738b073bd5d51e589d64f967ca0cb36e5d9c656b69abe13c6a95a3bcd7c0042ffb24b1e0000a5c084d13b1f2127d8c5d20a26922ffc11c163a01c232feb3f7f1e3d849fa0ae3edff68c0b1e56114322599c74f7207c0dd9c4bef9cb441916a71d6afb7d21ae839059771e188e25a0d8e6f13ffa4a92e8e9442661b89c8e1c7757ab2e3b059a2a9e282302922bad6855f4b8e61ff0f9596c7ca6f26fbbc2b75c677e8b6dbef98a35dd00471fd14110362d4415ecd5e7c5dfd8911a55045f8dc2c765a169d0352903f29f6a15f1691ed5db333dc54c16c4bfd275481d18ace646e1f0eec3cbd59d950370ca191e8e0ad198f6cc4de5eecc8914d40a0c6b4387556190e21014634e4589f5059dbb386a95e11f5ffb15d843c7fa3deeb77eabb77aa0d629b34c66b1b1f0ccab2849f094bf3e1d57415e7bc0f90d0354a2b55e1d233a210441d6487e56c248192d6d3f3faa2a6140a54241da98c7d4da62c1d31eeb981220304490fa9098f7de31778cb1d3108bbabb53b2e723b512fe5c069333404519fbf309d8bd1bcf6c68b90b51a1e69b1d13e7f5477d365f5e2f13061700adbbb9062ea8784c44e01657489b3676412465eaafb998132d1106eb0c42f6fd90767fcd37a2f81ea8757618449993a57f4726bd97130d3f8484bdc0cc3f8b80a51fcebfa28be0aab2ea1c2a51a901b5fd6dbfeb22841f68e924e33ec77e7d4037e2366bf3c5ca76f0d8690be42c093e48229221d6af5705a77c07b3726214a2e5983730afd30e19eeaafd4b60a50294ebe05dc027d73cbc6bf49bdd719d1a2f2a9c51dc3b4633fa08ec39677ba69660553173649aae48e39319200b3981d65b6359069d2a91c4addc16bdce89a32d171090637db3970421b96434cb3ea2d1ae4c68d611f248488be4a4fb0f1f2d4f2fba77ae79e723e6ed3b604a9bf592a49e324630c936dc383a9f316197a09765109f71d4f7b9d779acb597b20bf2b3c7b1b17bb7214cb00c3078269206b28417705bf94765a01424f6a4753b89ba98a36f4673d9c8b8864ce41c0efcbac975deb55c88a6524e7c8131847327a3b1b3d05d6db9091e1ea162ebd755124269ef13563daa522bf9731713d23c16c88c97c6d293d5d59fc3a3e6be5693633bf8525de95bd8db71559a4ee41a1a79868fa70f855534bfdc6bf060b206347ff6093226d5538eb2b0d7549148d8a8c06c4f8412dc2e6038426c39498d52d2c90f211106a0a1467878e32496a87a51abd85091694d8bd2cf6038c109a6e8d8cee5b47175d1b19a8d282dacc7898bcf7c5917617b600a26f5c4763a397524c0f22857d5dcff20f5714d0b3f9c72895cb26d2876e1aa05b74bdd9907519e9325e3356fb0d48f6be1b566006f9dea0fa3fe82f83404922b1e221a15bada79b062129b8084d4e8fee9d9f1a1af44566b1fa148fb4b8c9ec6c6290870c73cad092ff0c92ee456b256685f7e6391185e482a5b2dc60fb2468549b1373eaf108f09ca1e5cbf31f2620ef7a66aca978258137e8c8fdd034e1fc3036b14d3e4cec63edafbb4d600007e95124f554b352ada4966a60da4c898912cada73fd50affb914dd097ff7d1297e6542cabc69fc7a6b769d4815b1b22a311e8305f6b6840bfe383ac80c9917d5d80bf3a91eab5fe972176cd34688728b76153df8080ce27bfbf59ec7e93e669e21f5cf5ada83d20084a86fe80e9d6c34e6ad390db22c98d838e95389945c2fdac2cf10609e97e54819a600f6dc6511aef9330eb7a3aa39a94b90037dac86e61450d4714ad93c1c38b79cea703e740562246319764b1a27579a66292480232be352c26c89f904e94ad4f966e4b34eb9e6feb9f3da16d0f47babf83f1ecdc553c02f056cae9c66df07084810e4c96991b5fe842843a583237e06b2afacc3e210236c09ec1931f66ff5b80572c0ef394f579a6e2153659526e72112158f211dc395806c756a38280e8f6abe0739a352253458d47979d57b813f81b2eb1663bcf08f1299a3023d604d4c96ee388f7428c5d4c0638b3773cad4ffaf01aae2ea642988891dcf81a053aea5d2f2a162d041a3d15777f11cdef774a01f8acf654387c10a5a6585591f66a5339577bc3456113182949e258a6585e2b949bae32e0dbc799d1cfd5f08f91dc36e54f9f374643c1190ee52a310b5fac1b3c41e609d876695b92771a701cbed8bcea7e5e1b38916a654eb11f4303eca74180521e2446f1ab7d7303f07e4065a50dcf4b7f17243357277117883796e799c6e8361c2a3134d528f9dc1fc2046e8c501c20ccd21110d085fd7e2eb4cc38c8d1fc55a9c4a2262f83ae6a6fe36fc1d5ae5a640bf507121ca77c4eda63aec77d8b45188c9aa0b101b71915a88a8a47c84e107e05270e2085b675ee52eb437cff1b4ae58f5333bc92ebc246915e5ce6ac59c6d882112f2251da71c85ef6944098aa9325789763302b483263f308ed87cbf604d94a5b7101c93af743c829a7f98e60a941101039f314f6f0d6962f45136b4e53e924acdda335ff8fc7572e86912a64139f1f64bcee951c8405427c6d70d5883a70d9ac79f1dd50c1bcd2ad39eeb4df59a96d3bf509f6e2775abf966c8851cd42d632044fd30856168b024dc6fa74f804c6c13eea2d7e71503bd4274a412645f184f45c67320039159aafb7379bb1d89b5de414a54076f197124bd40f859e17d2e0ea5bc7f40b204752a09394bbb5a6a6d89f662e2b268ad546ea47c43bff6c6a53dbaa79037233321b9f88e341c68bae9eb8dc8bd7d662903f7a28714b926b43468ef185457d9c605e723e2e152daf3a17f71dc62bcea45365c21e1c9c9f3de41fccd7f1a473805981e25e7c1f3239d2ab26d2e70e5576a3208cd2cf186e09d5485d04c7079e0aa3eeb790d6471c52fec20ba2f46ab5000ad89eec91a646f89f2709210f55445fc80bb97b4375352147c47036f726346b0ff5c1136b2e7132c92698d6cf78aeaa5042b0c8cb91c3cf34191b35f72a1bdf3bdfbdef639935dedbabd1ca11572411c1fa631e76830f834e29d448fd5eb28314fe5a2984cddb245d207da6dcdaedbca59a9b264d3361661b5d651710aa408024bb6069d3b3aa2dd8ec641139e953d4838c2088578901a0251b954938f60ffef37c96565a33ec21d4774eb42e6c9c81e437baeb9c6e3658f4cc2b877d2a652407aac5992036e728d7290336c64b11ea4f0331f725c849b60ed9f078e82e8b1aeaaeb5da2da2e5686b6a4a41066efa384c584c55f98182e3fda8acc580eac90924ee2ec08a612c0c17a2ed7af8be9f92639ed4ad207f290749a326154e4666193bd4f8f33e59043a6439b28ba32147211d3d92a6a3ac864978312811582bac71b9c7da1c5174b71ad897621c0f803c0d019d4be989eee1d214b97861a87fe13a262e9ee3cc988cd6fd24c5d445c4c47d9827ca1eda2f81caa5a5dfac462c4e9b08730aefb6afca935b49a25c4cd328996841d6ec9f56af58b15c259a38183bbde9fde7e917a0ba7c786cc25b2c97b08bfb5436fbdf4bb3a4c24612d4882defc75034fc78f753a4b6def7ee7aeef7a378d9c9b3f4a2f6d5d75fcb6e023e51b4e2c68013455fb0d06c1550ec6199da4b8b8806157ff03f5d19115300cc606ed036d249f2f7569f85c4a3e184b7352aeee992752443d20e92915e4691d8f86b8ceafcf76237e5080ce612108025cbced5bd7f7da7e94f4bbd68d10ce9d10d303027ccf22bad13d3adfbea47a75261ae482dd585681870de26c5ef0dd05da8a50414cba31500e8e8b02bb1edc0e702b28e611ef72d793caf15d142b20e24d0b250da8070e8d96c2f5d9df169948bb3c2f182e13abfb4bba6d2b451616acf8d3f5ba073c26bdfa891fc7a3125ebe77ec6b7b8a7b6e670f5aca495a483ae06e7346e8f2d0267bba3f4d4e9fa888ca26aa6292af7d36955f3a7d59cc481a070e779d1cf3596a51465422e13d3fa41657f4a8f0159f9120cbc81abf338c109b694f6cc8713e8ea93f761522044e3d0d8c69a31645590a73d58206fbf88adb080f794a7df505e01e0603b8837d5ac02a2467f567c7400f190d06e682b3dac5f751639a9007362b1a2a8b618800fbb9f6c08df48713db1b8ab2b51e05cde25dc3dfbce1b12045bc181d8bc492479796fdd12a44d6a390cc43971b31d7df382f081ae3c453c8cb1fa27f734654b9c4e399e6eb4ae8fee77dce0aa7b68b4042a63e935696fa792cb24390d05b21cfea3c75624f9b309e65bca48df9109299a85fd1c9a3fe17b9e130762231979c029dedfae3a59a300a921541a18dd48063cfb86c3e5a5e2df38f06a483f57015fa5694a4ebabec89bbd2f43fe5b466d7073f4c5851c82bcfbe9ca16936ca7941ff8aad0ddab0f6803acef5e9bb2b7bf91c6d8830b49c0b5f8380ad4ecaff1782bac0b38041634cc60fec76f9a24158791bd0f88fc734616feae166afb121df6a949f24c6a02143cd939213ca2b9490e98e0019c01a3fc2734d157a0679c1456c255c9d2b87799ff96e7648f5c7a3b99cdb81787c2e0ca2fc32c3540d855bce09d5af793957eaa5fc08ff82e706ed37358ccb710e6329878d3441910f846fedc63dfe457aa1d2fa27fba45e1859efae362a44a0116a14e488ba369da6c76c3913b6df8e69e5e1111faefb3724310963013c93920f936d4e813d08f64dfedf1484e8b9b071a4936f45ab6aaa754ce90a392c2eb3638f812a09453f177f7b47149c3c13584c6e58793c697924a5de0d1840817c70a7af0f1b736b5f9da5cd22cdcc3972e23493aec35671bd321094c401b9c51376668245777207d0d57b74f09497696eead4c504e2465c9d5f5fd1cc4af77f7a110a99e2d267b3397b4b034efd70345dde9763093a6e72a008de4584789c0916fd1e6665c0d6e5ffebaee88c8cf932c64a170e1a50415c4bdb36406b0f2a0a80871c782cb74228aaa311a537b794dd4e99be16b6a861822722d2530e7303fc3d4b8f3fc61a2be3b03e1db9ef01d5ac4d6a072d7cc7318c989c4d0ddd38bc46a3b6e13dc08e16bfb7191da700f03e1849178cb2cb2153c4368400d165e4d5725a55ace28a77751515c0bbfd1c0730b9d84eb937203b2ad16796983e26fbc227d7a45cdea25ad97c52c1531c9ebb4009615c172b1a99393cd2207db49ef224af922f7b8296ccb66df4978d861780fe7f7aec112f28b0015edcde1bd53c4c5fa22063836ee6319e5281bfc5da04fcce849b6b5183c91405b00e1c0cf09d7ee587e8cd0ef40f2df3d270b68688f58332d1395632f98a39d8e8ec66cbc7210e48c971d868c27016495647f86a0347c8bdbddb293fd0da95dd61de3ad2a9657f1bff52223b5ab78f11668e01cae99a11e1d30770f2aa38bc95a37a24bc27e955b191e017011d53fcee7ba97f339c6b03219924b9e5f62312943636a0d2b31b06bc19c243249ac3f4332e30ad3eac19210f78e9607445384c5b82aa4bc0db79269e0f7f13404385e981c69a38369942d00e0a9c113807d6ae4e212b6201219219d9db5d23deb828514cfd6c9cd5d476b49fc6d328abce9ccd0e9a50901e05e474e21602e14a6919d0073b1e3776fe03335726152349f9d93cff46b05271f8eebc6937f6c82dc6e8ca42f835b4a46696c0a6b0d89d8d2a3a52a2beb125a78b2f54b1c9bf64f351f3c482cd3980e8be900110efa4040fc03ec29b7ad996192d14c26e43b33435bae93349229028be569d69284afdd32c6c34f13c0390005 +MD = 1ea47ea434f0654e4c183c7bbc6880577bc2ddab5037393115d2bca4ac5b0fc9cad4ea2542fbea7186507135249150e8 + +Len = 98440 +Msg = 92d9f3841f99bf3ce5b946397f7a8ff2d4395abb3cfc61f4e54bdf8074414f79efe27621daafa31ca07836dd35725f5ffa892815e1f7b623d116cbce4c7290314f239232795a0ab57039611081e8f3be86e514570d9b50bfb637f79eddb7da1179434fa044c17b6f1da4d0b8aa04d47841f424690910b9315c556bd97036b38037ebb551830d7eb26e608abef9f089f6f35f62331d7d79e08b192e654d17a6e64fc3cd2e7e659be62c16970bb6d19a9f64cdd69e900a16330b2a472cbc8338ac8a729e1f7df25b731f6d008629d290da5be78790ace11a94a332c11505a2f338b0a1300dc7db45c20f0ecc169918f211a2557df2b7270d6a1dd6a1076f9b5ef389f78cdea549e239c4a003a550ce48abffbec0adfa07751c3fc0f1ec43970145dc1db97c5f64b84105ccae1a941a1b103bca59a7bda7dc14d298b9abcabd659773babfcd3d5351439c3ad35cae24f1a71e224fca482fc9b99d05ff2c4936114f1477a7bb863f35a54f917d55e61555da6f6eaafde2c8c5736ab0cd570b298dd788fc782d844fead1e779b1ec8315cc10f8557227d49a57aaff412a1457bf629597f03a0a7dacfa2d2c9c7909cf4be0b27f80b03267cc07c6255f1f4b741f17f308fcf63cba7ded23e59fdc9410e01826cd976c05e0865d2fa4b2b2e4ab733457a5c7b3aa83eb4919dc2de3768ffcfcd5aa41ac888af2e24e44e3edc744e0422b34fa793c201e9879d7ec949594c51527dd267aa3ac351d89cd9ad8dc8790c8d67e3c50dad83d61aa9f84f9da6666ea8530efdd3e8d7a9649067e7a0cbbab4ec04b36416cf4712d14fc9e1a2d4f0504556944de4176e7d6f7b838db3d2a585c51638f53dabce1831fb5e2fd7795cbe90051cc8394afa464f9ab7003581ac07bf18df08f0c78b6eb3394f7ac9e81df23efb030d62080dac8b9a7cdfb46d40b32089301fbeb7017edb85f862f8c5b693a894e18dfcb31b18b9d74f7caeda0600afe3b69a25dec2d1216df368c276b93b435f22aa57e0950340fd9977837c5e78a3b4ed1894b331fe1b5dcb0cd59f8831b5d6611302251e04b76a0550e0b8dca3a2793e0ba9e8e16e3fe1e9bfa094c61f6687073889d5288593a8fd893503e2ea22bd43f3c3c453a9e576ca0191fad56cebed9f9b6d95171e5c26fc90ff0213d4badd795170fa0b29c298f673482648a2ac7684ac1bc99c2777807cf8ad27e1fbc17658b53fee6a765dd5097521cb92492eae70fb13071a497c321930dde9dfc7dcf46c9f9f061407fd975d87cd4f34c8e921cef8e1c203fce0b83bc9ffcc5fb173f42f611cf57a67487c6d4b9925c2ca724d1936167efbaa3b9f6f34914404411cd21baa1821100cc4e0d30113e3ae96409cca232fb263e9f3342e0120e5400f3e3aabfb3f1d7770d9510978cc1d6ae4ea9d6c507bf0df248e22f2a02d24a5746e8a6aa4e04f133c1c698af330178a1eb6cb6a4ea9bebff292e857a21496a709044de267ba3a65b6f486d200de768eac6bb36e6e2770a8cc7800b777859fb745c5e17d941b63f18a0835793225bedb264fc1c33f73bb0c2ac3e8aca0eeb478a2fa01c6ba8250491dbdf1eb07b4650214f99313532d026c95fd2cb1aebe894db9371b485b8d83defa8c4891e1f8eda5e0ef83d919a1cb4c868a2931018362b8f0f39a6cf7ab732598f9a6286161dd092298308f23808a1e75018ad549cbf54cd2c61bbf0f5ab2bf819c96f8f69d97de428a059fe127c37509d9ae08d7f6956bd704fbb91319a6ff3cdb979e21fac287d94b9f95d3361bc28da92f363ca1e7b88656c6e59376e477334d24726407d1884f535b1b8a09d799a8c67af8084c5095693209bf10e0dfba0d47da304d5339622d17c47b7621ab6cb3d81dc89b546494e81d40c00be61d3a138205324e5b8ea7fb2f6830182bebbe67448422965898399b7ee872f5050169fe525202d78f35cc21f0b2f3f0873cf11ba24a8069d75ff5ebdd8d526cbc40ec165f2d2c896cc3414a1231118fa203b74967dd7c864f404c61cf8be8c37a401303ef1319c482bb99cbfa6f33562ad483990bb9818c3eedbf95bb809099dd83813fb88045295f8348301fc9b3d47013b853046b19ec149cd1e027f80470447fb9321211591861bedf0ef8dd1d9b2065f83ff86ea0166ee205e99b4e9eb74db92d83a232a02227d2c0c12c15fb1aaa3fb5884e40de9bac51ce0a9c10da0f57b4409cef60c4c710439fef1010c6c37c0562f47c6e000c6b60bcdb90db40c900f5a4f630283187b995bef14b39fb36146b92ed1952deb91aa334c5200a5d74c801cd183ae570e4925dc070441e12d311b6c7da9baba552387de86fb02aaaa32b4d2b8b5644fd5e28e026d48119a83ae28b745579b4fe4853752a23c7b892d4894c42b828c34164ebe164a688d915ce155e2ae64a2b640bea0d7c99dd30b0798083a53708cce78969b5fc5ed1b9061d08b34df5736b612d6acb723a772f8e02af97b5709cde5a4c10f27075e255d3a85b0f601b8be1602d64238d7e1c11862044dd060d5b74141d701b4384312c18e08ad713b10a49fb7c549a40ed426333330ee81965bb3a9f8e158507e254a84055f6beab6e64f19daabab41ef060a10fbb6c2d6202327e771e5fe41048a356e4894d1ac99c2274c12914f58a301d678639cb31627b57cc153eedacff0fd3b47ffafc6fe0d2c94ff087e1d30514df03312eca88bd29a1b004701d4446b03c4d6d2b634273aadfefc647afd132270c209b2ae887b4a596a6cf428d4e69c2638e467b3027047cccd09cd8dd7473ef4b2c2e8e83d2fb67ad3cc036ac2ffacedff3969ad18215d1269efebc09315cc612a255ea4aeef3f85bde91bd086d5c2e0819d7ead5e82a3063b75671a19c5f43d91fbbce9c3030d03908ce56009b0078826d84ebabcda4230a965e9a3519fe0124f0ca9c064b2477cb37b082431daa36c57b182dc1a7361181c86186424ebb567cc20ce2f79451676907f2d24e79abd157af2c21b60932947fd9f9d6478f09ec56fffd341ea04a17b8e5ffc6714377d09f961b5807683c244b2791fac37f7c1b3a2705ffb9f37111215e51cf59efa0cd23ac70412448b5397a5dc4742474846b9cd3d1a6781268dc48dd736d66f2b92f8a7eb57dab2f204c93c8fbd30922b565f562cae8c76193e175efef1136d123601a69754dea902ff61e15c287efee8192ea606c07267574b95f122f6b282f62177a191a6280f0169e7fb09313275c6b6ad2592fb223d29ddc6ac0becbe95217be1ffa2f3c0ce386de3f25f7f56de0e55653b9a04a3ded71c31f8807c3c8dd96bc82892e4acccef30de2d26bbf1200920dc51e486fd34a92f5e3e4a4e36546719b3842920f6f36edd6016268c0c25fc3d9ccd3a273926e63fd5e43109b3d113ae2a7b2f50a629fc9aef14269baed432d42d19628f5e9bd8731f54fd56bcec2452b5756b1bc258e28f158ff08fdf15f20e159b2467747dc5f4c3f476dc588de42cdddaa62a546769e659ef4a11a7d08312debd4a5784b3f6e9492e64448f9c99652912a824633ed6c4439dfdc90fed2e090fe69a069425b37b3a698e3569018c24228539b2f8c574535cffd15e1e553b1b317dde1dafbb44d21c0cbd58efa405924e9b217c1ae48abb2b7e8d79ddeef26fcbecdc43da5df0157a81b955286e4bd737bd2729d1835f243983fbc152a19a2e659a5d211ff3006dd92f4ad31d45a81a65511561258a3cb50c74e1df87577d7f88ef285f8565bc01c37e387ad41362835fc1b1ce1fe169962eba087a84f6e18bba5307a4149b6cfabfd64af357bec23cad73c416c6702ef027be383b4f670f7a862ec098d57d587f569f49e6ae2f106ad7d115e12320d3eb7de738c9f2934f7371e81ce4cff4c8b90e41fefadf4f943865416ed83cd79faeba9cd2ce7561e99e05e9e3300be603cf72242ed8f40596cce02d95a21b7edb626547ccefdeb82424c99add238f3d52ea07b1a428f4385d4ed0fc53e8c8fed02e074fefd63782492d4561d16665dffd32574e2791e8d232e7bb167052493dc33b271c032b88a6a0e002a789a195b64ccee9647ebbd7ba5dbe2be3b487a825ffb04d16d095d70c716687d5cb7b25a886e7455c724fc9d826fda7cbe730ed9dcbb602a51dbd2e9c04e75c51609c1f9ff5a4f49ccbf5c714d4c9b836d0f41e8c6e75cc31b44b943ea08a0a8510ad8a82df2e7d8e5154d756b14de48c387c45dc311436225be612da8f7718d7a2566f398dac6899cb15048603aeb635e77069745cbcc5e0db36ae5817d70eb1e03ed5ab47473e2403df538c1317b399a577933c379403d3fce472a081d2757a900ec4c255278599bf5bce5029ae65203a39ca1c09c577638598669a158fd49a7b6d4565fe73c85fc8317cbb8d9b53336d5f16fc1c76a9f940f9912f1a37b37969045e7c8b548cdee60865b38607053807917fc4b6d022fbf3b0fb45daf19a7f227b19f044f15b7ee08892215d1a0499d1760e5c20fb69d36765acc59be612146d797ea77173bca7805a0aee5bfbd7bc90b7caaca21e06e764bfad98a63da2a013a6948a5a0138c18c26d500c5d3060b0ffbbc9d836182a1b26605a4431fd38bddab638147c45634cd93fc41e6c91aec15ebea150ded64681803bcd3b9b42c3d9030f3757fe39e680b4a869805069ac9692f5efd86ea34a35f3edb0c5223351ef7dc4d4c4b8798c60ef37bec69b10e09d46e203e37807bbc4fbe683654957697d95878f0f3d8cdb49d35e4275bf3fe141e5036be68d5bf1ab02c6e3b0831780efd4b7c47bffdc49b82b8c83023f4f3520f7faa6761148b254a2ff202b620c2ec2c5e623bf61f05e483252fef09db752b6ea0842069636445e570fe73a689dc9a2e3931b3e26519f56924214c55d10a07055ecad0c9ead4e2489699761f954f7ecb83f196c9f88738fb5ca72f4efd3c4e9a5e8661cad362643c4accf36b6ca202cbe5aacef4ffd7130376c8803d889268f64bbfbab243973389349ed2d0355d8df5066542aba392f047198d276a9994bde1cb7ec3c964f9b7f7fb17fb97190986128f2ada360c3f3691eefc0c1d59cbb52386ca64595e12594d483f57073f2d57ea27ff7edc61664da79d20189eefbeb98326ab85a8596a7f55c21fcc6acf51674577ee16e6cb8f9d51cdfe313484f62fca50290eff7c8793d512be4306f3fd1eeb26fe8a9c71438e5926a0402940f981c0ae4de7a6eff3fb96df24a525d1bae4a4dd37c2467c098886520d2ec34a51152de81ef9e5db362160d25ad80d910f213744a2a72c136af39ff64de14bcb8555d9a6a42a0468d66bfb9367c6065c853d6d02461f965fed376dbd694308ea1ea88c8fe8634abd5d432ec953555a5aa3a00ec02c13cb871abcb84c683b44d0a3750d4bf18d01035310c21c276f4fb2f1b3e2255a6c14b479ea474e52b045a49c262583c88e6f613e398036eafb2f8df7dcb0dada10b90e932ae4692f8c558f92229cdf7350dc00a8282dbca4e140123e844286b4e902bcefe2554508b6bab90cd13a06fcb99207184494595d09cb6a4d145ed2eede36e7157c638be416bc49929bc6a16ab3d89f17f57cb31e5b17bcacf2cd6692d69fb68e5ed6e3cc94a568ace80a57c625f5f02ca3ac72eebf6e31e48856e9a7bb8352e1f276f4c718bb3de320ccd117f63221dfb6ed3fd61d16f17c3dc30436742be2969e0b67dd8a48f1beabd5b66510d75bb89607c2dd5d5823fc78db5e46e9df8f36cc5ce316d292abc6f1edafb95a2cc540acc2a20b677cefeca365a0df02e78148e332117bd8e294815bdb641abc7888fe5ee6876823ca7ed5252a7109a78adf544b559913857fd4794f697c901e05cb7a153a1bfd798af83f66f27acdc011d1e26b8d22e7bfb39236365da0236819b73d3a8703d1520385b0ce84623235c4817bada254fd6fc4f63e798077dc82fd74ce3395eaec947e4bb2c5aad241eeeb14a6785bd95f7efb291b7e9aaac255f929b56a2c7657294375ccb32a7201d3ceb5ec35815615d2a05355af73e0ddc754fe7b45144f19f79a298700cde97acdb58ad44adc762555fb9b7273d2c236c1581ca72e141e3ae8cb8f69145be0b4c2e7bbe62034de99ed532afc3181f7d42c4babc18cf68bc3e31dd1fc579cfeb89cad71aa1f51397884f2287b534628c0ee76d252c7803dbbcfda14c83258ec8d414fd4a9affb2dcb011ebc7540eafd00f121bae1477bdd2a964883540b56513b9b150b6a39f962994c200e7460351d9e1b948bf673ae12191faf43284b5fd6cb90463f75231482ea4d4047ff1bee31a156166c19b5e3858e52597fcc5b3b23440a2c9753d71432c7ecc58f9fd9dfe01289f085d374e0de94178d5dc9a1b2dfaef00d3c8bbbc11c3611f90dda02ced3f89c6bffab196ec430569205a5878bb2112a3255a539e2e842a422ea3bfe84b25b76cd022a0a55df6cf7b1a0eb749046769fe30b2ab8413ef08d894d4735c92444015eb5d6b05dd84fe2325620d08740e4396886a1a0a4c44ab4765f881064d1b92468413a734e57e1005d4ece02394b64df08ed9258d4255701304885f51f62c5c731cedbbcef032b3779b17c746e0dfd790c68854a99071f5d012fc64dc07f6dd2028343f109853470d0a6b38dee2eb7f0bc2103ddba13abae2f3cd48110cfbb2e2388f97c64840594a856fab580579a2a603d937901f002de039936f7d7fbb6c1dc0685c3c8a9a4894ae9d954ee30af1040e7be8634462cd3c56b7419ddaa667475257030fd9c1b39fe86d8d2fe60fd8aa4450b6c1cbf3277bddd174ee985d430350c4029ca04728a0c55809879908c81d37f029481011bb03314a6fdc53407db66e48018f98aaf66bb7f580c266765db16be2b642bb4ef686e3ba990375e075e4ed4b56450d5dcb4542ce997cf8e8f82b52a0f45e181b786b778a86e08abdda235056975988e005c1f83b9a23aac125cf8ea35a06d107af256f32cff00c5908e659e23b3985c244564ad5293306af753262725db9508409493d6bcabe651280925c86c861ae84f596bd23cd37970454e8908686022111154b546e1da84faaefdbcabcb56e4d9897f7b18fdcbdd65043467b68595dbd5f61a066d22f4a0652951736ec88bc0d8da9fdeaa1fe224f13def095804e48af9f6cecc730761033da1ed923aeb8d748d4ba2daae2a7f15bdf766b7176eb4f5281a585080188975281fb96136bdc4c89fe36eb84da40c7a713a81b91b4a6ce50869a0dabaded5bdcea99d278bc59986b7abecc0ae17f019b50e28568b20762241eb8eb24ce0aba5d94a812e608b72747ca90439fa0a93ba2f7c43d78f7939747ca80b1f5ca674f3ee074dbcde98b85c97e79f6d58065d278a8bba8451db1da361a9fd6a13b99970b7eae91a2c73d404af6da3a2f192b6276c4475a5f6d18a7697f54edc98a080e4dcfa3d9074a42c346d41fa21ec3606817ead5d82a9e0e8b7c794e4bb14e39317053f3165dbb42ab6796d8a32727ab5fe67d1586390929f2c988fa94fae0b39d0d9c2aee38b2a35517af93d1cabe72b66cfb54f8fd36e179eb3ed83e28f9fd9d9008a9a50ac8eb4cc18ebf929be04d08160632b4f9bfcb9d4bfb65cbade27ddf8239fdff5656911f0fc4da89fd4590d16c0e2d2eb10c5eb9865f21b20c42cacf6ea0a631adf42b385ce2631c7146f48ef973a2eab595016b04daaa85c6935ae9afcd2100742a10253357f7ce9a7cdead28e7426d69f25a3e51ee6ebb6f4ca4bae02ffcc03b50e6621da5f714db4fc5c884c96a1b609cdf8ff80accc768d73ebf8a39a8157601247b865cef83a648205d97aab8991c0cf7fc61d0633e35eb9f64288aa164c6c340de17dd5f9fadfe94c8cc0b8c5b0ebb39f029afb08468c23d4525837732801fd2062ca7a5cd34cb89b6bc5c73d5bb302bf7aa29333e7423aedf0bc4a803346f4e903f6c7090ed378593c32dfd9da404349f7dbd79c0ea684aae65ce925b764a1ce8ea6c4e8f29eb0edc8ae098174b9fea441edce2b03e08b71fbdf1f4afa838c38c98478e2c9d2e8c1d7e24c1d7246bc38208181c90d19d7abf6eef1d745c93e907e38ebddd99aa93c3176b0951c11036d5c3ff65c7679eec1a03069b4e0613e3c736a25c26c1c79c69d113dd1ba3f5eabbcce37cd84275a19c14e8ec9137114a671c12f7ac880e3c7e45bfcb994fb525a09d74c05804ca31d21ef68fe262249343fe510ec35ef6ca7cefef436f26b69e20b013bebb20f4f3487bc003c609b6450a77fd0fffd919ecf239f2d2e1bb72aab8af50e666199e8c5bc5c5d690b05ed616f37789d678d00a5abe9b08b58081d1d4e5acd60d611f63a8978876f6d876ccf60b40eadba0b1a922e818433f186cba11ed97ec05aa0fffab4b88734ce4a6a01429f9d163f3575ff7312b1102e58bb9dc41a2b6e336e8d6d05c364a278756f61dd9f2ac23e3198524342400856a7757b06c4db51a9a227fb464226a0b2310156f85dbf98fe270bf566b93805b39a82a1ad7f97530665560c3ddcd615c3a6aa485d806380c940574ea420a1ee8b5a697981f5665b90dea008b33a7bebf4fbf19fd2b11f62e5a303c7c51f84ab270eb26949cb50529136905771041d098d595ec42098fa269b7a97c6905de823cfdfe6dbcfac5d1e4f94ab613ce1c457d6e77a1d0fdcfcb533ea9cb5ce83d540cbf58c36d93e96a813217b8fdf7979bd16cecc1366262df5f51d99fb473853e962772ce2302902d824048747207543239735dd0fef1d96cf293b1600c3256b06dd8d4f479c16a997cc6657f2c97d2b719f453377706a3e2b166b9b2c0af2248084617ccde4ad94cb516f74f9a038388f772558b4b2b42df205d6b1e7e346873d9f183bdcd295ca5dfc4665c26e4f726567ffd42f7da46c0a3ea4df9918c99a2676dd14dc2c7753361514b2b7fa69e1dcb6f82d4f98e2025d09fcaeaa6f24672351d69035bbfa383ce400e43f0e2f8edaae3aed7bcd15f7d2ae06a582b1fff61d772b364f47c78059b03382c17049804895ed9b1de2e5545074ec4c89a6014dfa31058e9298853374c3d514a7e95ebf0fb438c09ca0fc20c1a5d32b2815d376a4c78c216775dd5a75630d2258411654155344e360cfff630c87e5cbc5c71d790181e77634a777fc43d903353c401b4644ba398cd137992519634ab3ca85865cfba63f1662f7fa21c86de0d4bbae129d83303e44579f706fd0802a6b9d15b6297980bb875a2a0fd1eb66cc883d52a662b9fe7b915ad12c481928ac7ca83f56e862558453830b5d15940eeed82af57d9cd06d19fe429376b9dca1f86d51cd0e9fa06ec10144618df4abab6f4cea5f3f53afc3401077aef6c9013437c6028585581a139b1a07f346771986766ce558958f3e48175161ea5380702991102231641ab88c3a25338a31a5c4e72cc184a827596546c748680e35e611c82dd1199752ee6220c5aa30eef5869515b9d22d169cb80c03777df5e44604cc5834944e80f8da0018643265e73b22745a4427496c9cb51bc850796e322be18a23cdde2bb3fde97abc41443c3dab824afcf5494170d1577add7ac33dc18f85316f213917fa0b20b85481681cb7ecadfd44f5bf7bebe0a6128a1ce3c85918f9ab85582c7a1bc789a3284f266d1fa7ab777a6c1161a474aac9175f6279c16e44dead9940bddfdb2b2180d107983b83859ee682c85a65336c88cb6ac7b7c33a6eb42f0cfb460eef0e1ba32f9203d429425cd05d6bcdf4c5f338f0669ae92524801452dae87e70aa3b7ada925017b140ea987f2882241ad347bfcc7a6479b0d381e55f2b8ccdccb5b9246d22c73c9c71863a3c0996c69f057107a7cfabce2cf079119e26719cecb79003a40681db5b641c294f282e1b4b0278f6cb8cfa506122717f57f41e519659c9fec667065ab7c0b74f00aed28be67364767fdad66717126f17d2bc1b5693436bfc1d6cdc23782e5c9397c30a7e37ff3e6e0ae1c97b15687ec156a7f111ab1c7ee7ef3e8d9c665515dd5b8e5f5c074f0dc5b5c85af424cba3652ddd27eca58d0ba68504a12f48dee9159538588d1e0ad965c8b8123a0ce3e8eb9d85454d4b3d182127e79e43e870e1248de87e7944d9aa358bd877b59559543befc8d39e63d5b0401d0f0e3f0cb403f08bc757894164891d455113ce86d5ef3e6bcd5a46b6fcd8ebaea3788d7d515962d7fd6d23dc527d05404a6eeba9fec2da58bd62ad0c5b9a0a23cb659403f0eb62b8b148b1de4c8fd5c2ec0e76c47dd4f800bf713b2d99fd85c4b15cbc6539bfd9780c6e9910f9c675145e7dd5a0f92e81a9fc1158e05f0944d97ae56d6dd3dfad5d35694537022ace7ec94372051bd65b9c9bc96cee55c72faa51880fe16753c8b054c11b1e0ec3c64755e6b3bb8bd67021c521df20223e2f7f5cce0a8a9c2110b893fc858cc69a46b929f00289f036a67fa2a2193c6f772a9fc33ec7301b536fbf18a4e948d1b6371a6ee9c638f3fce70059d3830ae3780953af61ac9b8cf1cc0b0b40b11bd91f7fb34b5766903b321aea133d8354274bb5e348bd229295010ee5955944cd83de08cce9c44c5971df2786f76682e0e2f81597b5dc92dfe18d1f95de760a2679fab8ad70b7df5b3c0cf51c2ed8e977bd8510b61f466248169ce6630d1f6bee637b799d07b9875e45c06ef4df1b1ee160fc908aad81fc96dd374b974addcfece86a32e6d651ac293303795533b58be672647c598817c691dd653678bf369ee9b1cecbce0607b685afddfe895230964e9cc6bb6cd7902a00bf2e8f4f91b440ad66af2b9ebf630e3a6157e6d66314a9e08529370bc3728eac2a9a3e64ebdf1e00ae153c9d28ee1a10f07817858ee72b65d595d77e74475c5ec7b22cfff33e9eaa3109e5156a2f43cf05497addfd3384a63613830c1196fbdc3e7d3f68d159297298920e4cacaef13e47d0f728d57f1b684ea923fec2e8d3ee360360e6aeb828218bb99f8b17f48d265f1777ac41545a76c562a09cb1c44c5e574d78c3b2e4017fb185811ad3887d4ff426e0b36739a8974443e02e03b2cef34a626d4504641e54b3fe9a4107f22b81af031c836fb66d927356ccfce33ac174b74b29b5cdc0e568382cd348dcbbfd8438b8116482531230f9a24c4e77e58daa450e925b3481c083e9181576796a5d1f364da9a0c899fd397f2f496be73a9a5d9db5927e622e166c6ec946150687b21c51c8ca7e680f9775ac06a99c5cc25154674710677e4f4eec6e474f6bad9b644132335e458a3e48ab292e5629fe0318594acdf35fb16cd2cb929b19c1942ddb5781954c3e58ac79a59daf365af4875832ee4e25ac230e09d181cc8b5ee3c57e25e5f77cb1f7e39029b192337667d67aa8fcd28d96fbbc5bc5e3e28c8cc3ebb7750760d6e5926bf7000dde34c77e76e4831c62136762ff307162e606915c28ee0d8fd842244fca14f2589b209362f1008bf5049f657f5ef09ba4dfe0b6d50389b62468a8b4568a51c63ad1e1233acf358830c219da7b61030c51d502435605f1386e16f0ded03215465d895ebf2f96ea4174a4690c7d90d28c12d0548009b48e5b17ec02eae54bc73866cb7faf69d0897f6ab17844ae74c3e38fd9bdb4149bc8e7c4f2c620bc5cd165009d2c3a0f04790abaf12cc935943fd86ff728299f3f08a31f2f25c87eed9a95d1094da949bb22aa0b6c6ee53b78af345a337a25d32ab458d0ab052952878a8f8116ca44417cec27052b27dee8a979bffa949cf1d7e336ce7f6e508c61b1091db9cc8b531ccf3f4851353dfd63ae0741f42276d5d4f2f4cdd381ec39d3f37f052134791e053c83d697929a8ad50fbf82f3e5f018f2e0581d74ebc378cfd5541060557aed224c209a7e4b24cd65550b499de6f3045833c8850bb4bb917de0f0061f3877079b867e59af67c50d3c0752609a2c65df2f76aecf40e5becb069bbcaf05e359b5997305ded2ee649481adfb8d93bf30f29e2e71c1ba84b370928e1ed3bb60063f44991ef08ee9e8a85dd0709930a83a85cee57924229c81c648427f39e8b768edc3822f568b5f3b92f8f7184c18ee6de0e7222ebf1f321216513e48aa35ee66063fb6a2d97258449a79aa5b6df499af4a106ef85c5a504da7d50adfee490fe7d4dfbbdd41ebdceb070971a1c66bb2ea0d71503fc17afd1ac3fb2faecdce21d59dcc1b4a569df41823cfd5521d263f056f33506bb7284261b0eb341b0f692d17aa2d5e4fdf31a7b334f45dd63bcc4be8b97ef6e4060c260ab7cea1907bc43a95432b0a56a64efea4839f9296e806db7b3279cb1276cdb1fe20ccff74da875037b0eea9c6719dffd358f9faf8eb7cf9a6244d565ecf14eb23330cd52ff45a77e5389dc20709c6b429fb2a1f650ed5ac51d5211f2ed888dd6238b7ab2991e3b8872460de813670258cb359894617bafd648e1eafeb5ad28ea476f40ac979cd1a05bc61849cbf4359e5c9aebe01cfd2f2c7976c8dfe1e9906cf36ec787973bea64748c53cc06ee9581d85524800fec69662383241cde9864eccc0c67fa1495e633510b78f5509072a1a2f6dafa96c3dee1db99954c286416d845caba7a7c15759b85c5d03c35948d8c60f267966e0e004e161c84d44bb716bde52c377f4a44e90b673df2272265168086da6309e2457df947ae7b4ba52be51c1e93577f0b9ee11189e6674ca38cde5c790155bb8fe4987204a20128e11d226176a2a2f03cadce3c7251a8034566254edc19a831e375e056b1a99ee27c152f2c71dc928969dc30eaa5022ce164ab8bf61485d2f37973f605f317ad0ed2ae9bdb94a3be90ffc499ba866a6e6d9da782d0b6d87e76be594a0e3d9ec4048133d90d539a7fad8ad1691abb1d051e6cf4aa7d378403422eb04cede5817c7a045f672033236e45778d3f89a77c696a4f0d534a1b0af9cc46f38f03af722ec5d89bd6c2b7c102ef62728d85c01b03d7a07c2dc5d5efda9b93ad811defe3538e7a53a8535605c601c80bc3adb97b7ced2dab8a7efca51e36a148b36b2b57a32a76114c509264303304d3825fe8103d21333609e3f3cd4d13dc4f9699e6316620387f3348f16ec9e9c5443a2ad06bbd1a4d862c836fcaefb9b14cbb18a52345064dd81dbb0777fb9c75e86b8d06f0751ef91652eba5106e9edcaa9175ec8fa85332d63c1529326dc1932a96f500410dc5b2811d6b485042499af3aa1020e9088d63d44ee5eb00790fa9a53cf130dfef9506310ca0dded233098b27595e6c1fe1b7d5ca6bbd174a5cd25c2ce102d2f931360c0712aba5959ea32617475b29cf193cbf9d3f551018c90941ddac059b280a76e9a1b4782178eed147b372df8fc7b7cfc2667210e2995e07110e3805afb30e76c384ba5b9ca0aafab8a3e2d3e43043d7a5cd0dd5d7f4a33594668ee857c3c59f61582b3b5c385a853f8e9f20713145bc3179178b355220f9918eb598db80b6598dc61002aa6686dca51db2ac7ef346e52e13981c45da5ebcd22eb5fb8311690d0d757097ce52b766b1f72261539ecebc6442996f4fb5e4e71ded97fb969e6621aa0f53e21026748b2dc4f726375963a89aaf206c9b0a3ae03b73627f5e5136ff2c39c2cbb80746b3df2e39e2744c8f119a0238fb7002e911f4691e6e2150600d5b9dc33a0d1fb44691dbf17f50a0d95f2ae2e60418c578e00f77d4b228c36cb5ffe36117589646ac097327e4147dc9fb13f7346fd97a6fb756448b32bbd3e25edfb3a14ae194844e109fe1f9070ae84b1cea2924fc4957fd8f794bd622a74b6fc4b38dbbf040f7926d0729a67370bdb80f63cd0cc85bb61a83bd1c86a4692f52768e2c53cdc226e1ea5206d39ed6d1abb309290d87d81776fab9072a8a3e146ebdea86f8c04399a44d288168d165aa8acf8544107fe8ff79bc1513aa1d50842b6170a49310ebd9415f33a04d5445d2be2c7e27fefab1f88b907849eea2c706f129c78d0d06e16d22e8186d6b6f9dd1b0929dd8bd3e5e89143f8aafdf64cb2328de97494cea4eddadb082f0a86a952dc7c88a613793153b7c92f45063aa826138488ae13a0459b24c7e1730ed8c57706a98ecc95243fe942b4e5e3163bb174b8a2f465cbe9b2b73661b7f35231f082103c86c19f895431e893e6f5cc8e0b066845b73c2bff8eba8625063073069d3c9f921b15810d00961ff29d0d87861763c8f94ba1c2764c2daaae36baffeb3deefb46b648e823d7be4f3d629ad5d86905414a1c371dd25d890a59c3e347344511b9c6e2cc43624be2fce0e21e45e972636794b35c9c9835452bb45859e796655d619f1b20113cdfdcaf999608362db626b285ab82cd3c85ea854a4e7f5f75f12a693be9d4d037f5e3eda3f8f95539b6a7a8796f6a3e33a201bd8830d42d478af16729b96b0ee830911dbc8561f181f66eb00c69435e123bf32afa89e8dfaf954ab1e514533ba2227ce63fb5c2b99af7f47f9b43debb5c9667642db43dc502a2befffa851dd50a1e0fad9a14ac0be93dc14dc2697cb47753b6df7e6a439be5259697d6763b7984b5b1fa782c7e76f12a7dd10e54ae07f6e66a1379068ab2cbb09a1015822c77a67c1c434667ca794750527fdb9ff2f46fe109a6ba0383b82ab6120f1413717df3c3972e81510081505207c0b695ec2826b61def9dfbbefa86b896db7eb49afad13ecb02b562c12da072063a2bf0ea01dfe80f74b159ad18743aa10b91e0195ce34020665f378cecbc62d652a81b8d1fdff966dc7097ce9057aec9261a107d328e7a2fcfeb29b43d1896d090b78035e0cb6cac6d7850a3d0b5a767a163e0271a574f41b5e5c3e79d2970bd7ad6c984e306a458ce24fecd8822971503fbb9a752c2221eaeeb90879b7392d5779251ea953652e465030c9bf5030049d46e178e9a43b51f21490a24a69b7fc12d56a3e775cedae7d88f049fc5fb758e7927844d4f705abb939aab3f4cf599f8f2a04a0c1334bedb8f4571595950694b98b48a53f0cc958c9c6d0e480d0673e56e1bceb8fc0c7127ffb2dd595dc64e19899184431cbce80aa21c8ddf5562803f06058c7e7eba8465a053930011b1b670e24b2c9b21c5e49e2b45a455b48e514e411a0ded39c38b0d27a44cfe33a714da294dcdbcae7bfdefbe650c5bb8de699ba5b5ed55abbbd796ec3165a4220afbcdd515f2282143a657d1e71041c0f73bbfba55857843080c8b746777827b71cdb45c30348e18b1707eec684ab86b5d4a12e59570a5ae3c9c6346c2fd199e602d364538ff2f0359eebd845526101675075dbde2396e3bce09a6d9d050ea095a7cbc267cdcab6f8173ac203a3cf960d305c8a9c84a428a40c6eea42c3d744ac54ece56983783bbdc91b35683e9c4c90bd80c4fb42dc2f81966734c12fd38e14515e57bf7aa4876dfdb7b8dced712cd63c09106324e5023dc6afd28412ab85b3e648a0d37af5a3eefb35d3c776f63cc8f81ff73cf468a9bee46e4cf1330732725bd2460b4b13962a0bbe0e91a2d2864e38e800ee780c2aee38cb2b725c8d9b39f726d3d1b4a76807757af2a239ae1251438fb3e1797a8fb30aeff56e53e8caf10469cf8c7e59216f809006620331e6b7623a987dbe59e0f7a102354de1bec780c8c6c0a371d0ca497529d23ac8040c6add12382b115223a1462b7076ceb898d08c63308055b56b7d9c6cdf904fce8c50fc3e1a51380d629941923053e27d47c89768a68af2af0af23d82b4cd61386c5307e6c659fc31a4c7da60fc4be5b6dc4f33feab291067b192a092da5ac6eab65a4534c5a92566f21359bd5dc69e0a5d4fa64dc6c5768467440dc5d79d468b724cff4e9eab7b56536505d0da2cd622d4af397c7fc6edaf35f0cb433500a8c3a6137d5cd9c5c6a7cfa527c2fbe655a5485734b35e953d90217e23337beab63c5c960787ff61cd016ebb07ba485ae33cc22edf1cec982ece36d75dbd32c3369b9bbde5f697e6590d398fede14af1488f491e81dcb038871279e1c10be1f2f18b6c705ed329bc32723709215f88134b45e50f641e32dd1203f485964210e1afb2d597bb433d4b20d97012ea5b8a29b6069ee7ce08fbf0954aaeac268d48f738b8e11a45705cfaebeaed9092fdd9994f7c7d8f08c292d7d98eaf3cb7120f9c534695e141820d335a4cb56d5f6ffccddf4d89ef5a757ffca678001f92f9f038ca04fbd5faa1d95e36a8d08f9ad67b2b2d21cbef0b494bc5c4b0a83bff6b703363991adcb7f347e147a547e08a5ddf1d03a1497865657d9cfaddaf7a459019f6e7aefadfbfa3df2555ec21467929af0a27740d70aef29de811a71ec2ae8f72e71deaa4c75bd72992282466abad65735a62431fc12f173411d2b8fcfd8090036fcff61f7ad3b8ae9187f61ff66f37b4747cb6855130fdc97f02b5511204bd55f7c37973e26f6df5883c0a530f07c7f8c23d74490af9cbe4996c4925e9823cefe5c21ca9e6771e86e00d070adebd3ecaab6d2673d2d1aa0dc9d71a816a423559a29487c86d32f5ea02c3964c4ad9c4af97d373099302c2cd770ad06c7d8bd11c970161d861e917a854265e223da28031ee38041534d23aab09ce14ef0aa737bf2bd152e2a9e4af4840fd08939f619bd71964809e9d8a3b30e8eb8e11f9dc91cac5cb04ec2d6be3532d123ba8565f3d297e1f90adb671ece27c29e5da327304c6cfb91c01d5c6db50832ba0684be18cb08631dc4967d1764c2d50c1529db3ba3ab0614526893cc0c7a911dedb6632b3f399610b7a98f000f36427cc8223e6dbaed08b25653116ba40098c9e099099d87b2078c6483118b3618777ab71aa528eaa970164c5b59df0440a6388fbaf5d24ce813fb4bc1a8fb71d000809271b41fcb76d8aab4ffd168b5a146043b8acc7be76267b7edd3b9d33af35a28cad5ff94d5cbaeda209f1ccb20b8f497848701fcefb75f7cbb47c8c4fa0900ddc0a5cc3a822e6f3f0fd7a068edee3e7ceb4e2ad7ee3d87a4447c6a235767710a246fce6359059643d337e0b475b7902ee03e9b8f4b8b6cb91a0ff290abc5475866a26ac1e2e7b0833b1e624040ab7627f3d6f8a580177b359c71167f9f78e022f7dc25b8884b5a678819b99ed7406ce2a6b5b69d34782fa44c2e2a527b18d804687b73c9d1b6d08b4ab84b22c20cf0f9793959e8d114168fc9b5c2abf71b9b67291ef97857a0cf4903588b7e69678ed6dc00470ade71bc4265a6640e7c07a6e5ca151b46829fb33b32991ef465f6b3055f792295b5178d86d05e72dc725386eacc2c5da6db1a18dc78e86a371020ea0f6422610c1d8c06a76a6c93a89285b7f09f93352bc9965c9716d4e1b9207cb05f9a8a86c04035c43ec44f3af52514b691b5083657e69b1b15bcdd39fcff70926053201864f5bb22b75e84dd44d2970f48bce9d58dbaaec0b2db6fc7750592fccc3e617a6c8672bea +MD = e7289fdf3a44e9636b76dcd8d94a0e91ca14e655067b498fec91789ee7d3f1d929b31cc8c0da83344e468e126ad415d6 + +Len = 99232 +Msg = 619e2aeddb1e23d8db1e5bc3a36fb514d1bf6f2429580197950b48e96a66e34aed2edeac16098d1a947abb4b10120577b6e58069f23ca2d677895fed86a0922f6d239f814e3e567f21951b14fc7b44479265c358fb9e050cb33c1a45e45215d5e867b694092746b18c59c345ef113d2e6e27801acce7f3e24f0ac01a0de635e666e16b0ed22b2555ddadfa076f3cb7d25113ffd6ed8034ff55dd9b9387c2ba07f07905172eb2ba161a780a82066479db431187b5e7cf900dcc9cf1d9dc506ce28c17ced6a724ce994da439dd3bf14cf24d0961df403ecfb1bd2f0b1393f6131f45a30c74c4ea29897d18d041964bf8bf75e3d67b8334b8952f7d316a351e7666200508190d6a938cb3bc16d5a0db45e9c5872cb2351914612a70aa06492f5e5d27260aeb0b0dd44af67855c2e007fb1945ddababe054abbdb7efc00e579193af61ec5915453bb36d4e34d32fdf38e1f6fcce9d8f0b4f454fdce3b9aae8abdd02d6403fbd445dfa9ac3d8da4523d7c029f24048853f71aac2a332de0483e704ff8f0b020c8ed96f7b5e4cb02b364a60592f1cf6b60322a1bc14c57741b0accf4d9333eb29ad19dbb826789d0aa0fb892fbc4bed49dfcaf4e53684cc8cf7630794eaa2423c298305f92445eb0ae7500352a0b475675bd169e71157240be172747e9d3e4f6f8881b7e55e99e05295b3956ce33ed83800a0c967ad27c9e6f542deb1b3f159e8547ab724de5ec60b318b09228ed35ce3559ddb1013da0146bb3b0dd534a1aacf14d6ce5fac7ae35c4440251ea75a4b91e33169874a5a1553bcc5c9932938884d51fcc43eced7806e553ab20839baeb6930c439775a8d4d347f49d993999d3c8a925661684e5be469ece0778749dd8594c6bf15864c5df0128d2d067c8cb80ead5f4b6d8633f05974929c3e44e1aa60392d88c35c27b148146cdb18f60a7145de4043af3f867d25b7cdd5cde70809c681eb890ba2f3709b63a6b9d7ab1cb02b47bea6f03c4ee9915b28f4ed17c7e2fd948a29b700b8843226c3310a40c95d060d60ddf824931ee588285f667c251d4e9992cf8d1d7fd4558649aa7b601a601f5baf4e8fa05e036965577f00bf2aa301b889e557a24f484babc28cf0b115a1be5732627d58b680651b3cbc8388de5a5e1bf9d2db3631c85ebcb53e32dbc4092b29718189f3a37d20d15f7fb67e4a2bade769fee2822c3cd4e1ab2a09872f7eadfaf4147d1a2de2e3b0492e624a75fe354762d1332e488cf6442bb73c5d5de98df244811f745d97f6e081334f9467bc3f616bb398e18da10c0abd4d950456331438e83238aa3a85a1888ff44503294b135d0c0cd74304615e5ee954da25224287f5688d8f63cc922cd1fcdb0c3fc295f964cd44b9fdb4b533663834d467ca0031504dfcee481ca7dee24f4e6bf13a81399e37c306b7a685d54a31564b73555459721de61b0031ad00e410b72cc19af61a32d1f18618e0ba8a335d2007f0cb25468263b3df34148adafec87d1556e9dee548233700c96c3a9b4942fbcf87345d41a9a4ca028ccb28b459fe08ef592f20e30ab6fb3e7252ef50b36a506ce099e3920f6a954caf606dd61c3ac0817174a4599e11a606ba98c0f09a5d85a7a2019f81db3c7b8546da438770040d9547c152922cbda121494894c525a104467575795636a3e474f84291117de557f1821d12d5dd405357c86955157dc0331103fc5958472638e26e9f3fba6a64065ecb91cc69d824236fdf04ea29c9427cd2f19e27d0374de09750f934cb600a82a4ca24689746f07b3335203b4932ad464fea63cb062da0425b45595a8b865d338b26decea74f2dc26973c530bce08bf85194542d4252a8c7f6f5c6984405e782db88c7e6e11a625fda40fbb1ccfa63fca0977836cccdecd72f0948d63c0430d55b97e8998cd017bc4e45cba6bfa8beb9049cd8ccebc7f4dbcf29e7fcbdacbe95d4fc48cdf298d5408d2a3cf7de142397454b7ad8e96849399ffcacf30d241b2b0f5eef6b599b22535e96578c71631afe2a4b68430cd7725b642b9ea17495cffdd166e65c0a01895d8a31234dc0c02b567d45aaf39d3df7a7e95dc5ef3c276075e5bc34864df18fc6daa4a8231251df0704e046d2e3c16187f53b2ac5ab0158fa1207e1d36a93bef71397eef4b13ebd7988c546c7288c37624f6dd40c0b4c3ff31feff62aa8109d5600b1feaae3b04e15d09bb1b9b2c501a0c09acbaaa22f9bcad51e7a725090b44c689bdf2bf1cf1841a60b9092cb9548a8106a1889b9d3f6e6fc397595aa3a8c4212fd996123c2a566d0bdea39b92492e40787c28f9760d7af5cebf07afe37ac9ec77d3532c0b27ded1758c796c4996abb6c96d1a686fdc78dbcd9f10994af9cc94fc6ba8812c6263c43853091361d559509424eb5ccd24de8e5ae832ab3c9e52c727e304a5f272abd1ceb2b1255d7dddaa43040a4b208f128a010abc5a5ad0e2ef84e9f60f0fc11d76933c3016bf089f3060baf5b80c73bb5b3a873c2b0849f36a8dd10b10d6e61f1f404fd46be8fe146f779a4c17e36b4f8e61de2091d7621ae4bd48a27fda5a4758307e3c996dd6e3c3f2225c0f47ee3570317008334aa1bfda9da16a90ac861cadfe37c733d02b73ea5b03d3f29c6503bd040d6163c49158b8a98bb207aff2158d041d02afa2545b2f2c8f1276637840d173d6bab7f7a97c0b6b5817296746b871ec9e8d7146e9e01ee144b5ef3f906339eb9c82b43662a04f4da7088a64cc7bf9022cb63d4064c94613c52cd18335e172e5af37cd13455bf0eaf914af2b2bd68eff581b48215d7d213e80e5c1d0e151f8ec8f688710da159cadbeba0c1ccd6ea03e913b466c2c522ccbf88f449b1b2b588acd9356a19953af10786735dc299ad94a78849c736a0ee5369c77be544bd40e2aea26d067fb9ca4bda6ba90cbd8f1a6ad6e85def99ef9d718fd3db39f1bf2865755b178b6895729ffda12c17e53e974c1f3cd724123b97eed9b5fa8dde3fd4d9aa0b1b42fbb298b71730e2c661308d042a8b9fafc90b4392ee74c22933c5ae06f4bb61736197a659d121b5605aed65589edd9dd8e7e70b247718195419d91db3fc72d066c1cc024ed37b8c2ff7fb8511243ab9e69457566e1baae958b80489aa6a38526244da165dc4464e7961e457f763abdb23f7e48d368331197b37cd5ab1e515ceb1124848504d8be587bf3041d10437ebd53915164556b59106bebdf99115122d99529e02ee155138a13a65ad69aee7d14581735a633d3f3941775acc12a33655632d65abfec5a02f0efa0d02850ac275bbf885c157e0d5f973882f3cfb378a2f56ca24aa490480b21826afa8eebfd0bf7ec6d3b4ebe682b9e519c1b2167814a3bc526369977bfaa905e6d4076c761998d812e599e5f84b61e0539a94290fde9adbecaa4fafd115fc1e640387c6d7a6e60f0444d90ebd3ad9aa5d414bfda3f0fafdc182c45bafda94abc5c490c6897e936cc677dd2ede56098b603e405add50ad68f8723061bd4f57f4349f8a3235a985377d060c0d02a7d9cd841ada0765089964ba03fc8aa27e2e40d71dddd38230a6b8547acd72d23632b7f05c80cee220a83b2fbb8e9e076f01d9d6c5f171191adc3771598a27f50afa90cd8c9c75fd9ec1337e254f659329b9055a202ed4a16f11fbfc2eaaf2142b1ba1423295c55d8ccb96d0c6a7a7efb43c0d8bb4fdc3c3372c4d1e7e959cd7a27b3278d7d386aaf1b0aa4c28ff2bc2187439900cc407277b1575fed3b2ede576048a9702be808ed657b81bd2bdbab55d48d092adec687443b4bbc6b46bace7af9cf3c63cbe7aaf42a807644c4b1c708c9f1cb821deae5395f1669baa27a384562db32d0c3b3eb53d8be1501f0f199aad63632bef01a16b7bb4c0a73c4f9865729e13f5fa9d9249d0e88c07d27378dbc67bee129fbc0965fce50f12f24954320bd75b468e4c3f1301a751b0eddd03dde1cf0596b979ade8206c9c04547e9f922ac0d34751b00dbadab07873f8b780450547efdfc69f569df031afa4eb56402dd541c321ca31c3e763eb49797c68b8be3bcbf6144e96cc2b731c901a3e3a01ac174272fb82382b41a3410cea015873ee8a43605dd7c5d73cb216868fd590a8b7f5ab29feff2b0b71a29808ee0def797dfa9776e3eb963f75b305da2b39c1fef579643052cb742c1e68da86ab2a95911493af80ce1170cb8080d3d515f136cb0faa55cf1e6e7956f1feedce4cdfb2855b5e73c646d2bb45052166bc768556d7ac90674e8a6ea450916bbb28f7b4ae1bf962cc8f72b4e073ab9ca8da757e88e9753480f4c0555ce4a8b72adcd532f11c97a7a0257a41451d1bfb7f763b6336cb129d890ae5aa08d8dbeb24310de0e34fdc36d9ce8701530dfd46d5d7efbcc7432ad36bd824f612f5d40d9070c747ed7e71165dd3c17b720af8839146ba12a31a65df0ca6a3c0e1033b2855e22ded756ffd4f167c4f370bdbb4bc9b0bc4eb32186dc856bc8a90ddcab7415dcc645ce5eb29eaea1059bd8449daf8db6e34d2db04e796306102ee6e11f1628f79971ca3ba9deec3d90996471c124039b7324c09a77e5281df3363fca29192d330ecb319a40063881d8549ba1c039b9d2de8e321cad803337c4476ef433eda11388babad71fa522125f55e47105611ef197c1e8c339db12d815db0afbda04031da9d8cc9e835c27539825d55c2b2aa17c31685b2ab76645736a898a4d860cf1c5e4adcd4d356bb6ea054cf4bf8c06ffd73dfa1fbf90b2599e24ab6375b268cb80cb92536f80845f3a4923c937b28678971fef9d0e703fbdbce6e92ce109981ee2b13ee561ff169ed8b642a9413919aa4049c16973b06ef05433ab5d3bd62b5a7057fc09e12b92e429ef323b687a3113476e17ebabebe08ff87d6a6ac2b2930c9e026227598099ddb2567ae61a107d3220df4bb9f38d04eb1e26bedc32295fb3d05309c437889bca068e854fd2765e85712fe55b071e7c9049e21137e6a4e1decbcc4b6717be09579ae9c9bf2e26459bacc26d25330a982de021f9f47cafd9ebd4d0af96569b6304f41ae0ea99aad2d328595bcf23fbe8029558e19850b4a8797ff2bec880ab593086744328817e86ca983729af464cfcbcbe095099ff5dcdf641b4f18422583c88e698791f820bc1f0610e6f5c168846caeeb5df8ff505cae0be99d03fc84c8d7c78f9eb2627fd14d31721954c112846ab8bd0e6e0ce471fc74b13e371ced2dc69d20b11d2cfad0fe11f1323f5c2c78cdd3a0cff12e79c4d287bb5a3c0c29599ff766ea5bc05a613a90d75a3efa7c079ee6dac80bcdd6fc372c4e18983200f66abca76ff384662b0a956ab8da03ccdae4d8b4224351c4c2344bb4a0d5f839a92dd62c686de2e8d77509f4759adfe298a793760521230bbed0cc331b7ac59e1cf22c3dfe5241a60c84d2bbb807f686eaeffe68982ea97397139714b11000f5f7c0a6215828086a733ed908aaa7b08278c501d204f14cc4f605949f891e1307e1a02c22a07aa1fab4ab06227205769de93084fb70f374c582afac1bcc2c659c8398a686fbcd731e76d342533aa6ae9ee6396f2c05ba8a3fe418c5d2a1c35e7c85b3fc9693abe6a061bf73e12714c24e16e7aaadebd0f4fac348c80a316a666e8ef6179a909b62471e76821563d6187522421ec649bd1cbec8489e0ca3a9e53b466bddda1a264fda5500583716741adbb152b1bf470768539b1f2d20200843ab5719379d57d21522ad66db8f67762e476c204cdf0f384280e3d55f8dd010e88666080d2d722a1ce7cfaff5647f65be82fab3d86fc6d7110e48731b9dda483d941e4148d091b3cdf063e38d0086c9315505133bb7976d3dc6740048966738a89d24cbcecfddf78e07100b8ba9a328ef8532495fffa8812e6d0c84d0c19e69926823ae89727d7dc8f27e2dd6a8fe0c60dd2b5c2a8f219b4bcebb089a66a86264bec1f3600099cde47a56545845c0fcec24985486ae2b44feb027928ecdacab8467a6a13ac35b7048674085f8c71181fb21203a5aa6ee02afdaf82d943dd3cd5c2b7bc00101e9ed5e81e3ca9e781822f59d6c158ebd9160c415d7de9400454f52d2e8599c036bcc8d90e82a329efe67426024ed093c3ce3a6296caf765c29b9d0239472f3110a963c5bf6ae9d82ead84a32efcab56b1915bdde5ea7229aa7943de72816ee72edd2d5abb65cc56c05fe75db75b579914d7d71fc55ce8101e96701e64b4a75703e08bf48d03e93a377602c225fb53df703a32b4afb2d79db14ba84e8a618705122c062faeb5cef716786d5d155d3e9e661105191f5cbf36e53162db5e187c75ec3832689afbcc21cfdf9daaefe1666a48f4b4d99eeb1d804cc016614a39f62df49d873bcc668f2ed6340a18203869a79b6dc852a8ce50ee3a70597cf9469291cdc48b15cd568692cbee394140b2b6eaffe4c630c77717f530daa26ac5dec055ca25a483187c20d21396b192ebf0eca8d8e224d06585c119e26777c74a631dce9c696a0038180c814f95f9a96c736975a8fe6ade2d7afae0b19f401ee163e98096e84219a6eaa814c29477e15caabbb5f2821ea669b713de10fa91de4561d1f05c3ad34bef4462012efac2d73717620e4825a6c5b4daaa6692f1f391c0ed65b25ec983f36bb5e8cae73140f78639eac30c4199b889463d1eba2ddbb60e56f32b011cdaccb6cf9af68de0a8cec482b498d17e6dfb719a3a6ae8f6b0d7683f28ef05cd5e145af20708758130c96ca26de41a34aa0ae84720dfc1f5295269166562bf337486c2bdab75508b9f73f8f9653958fcc46367cd8ee1b7919bd3ab7d472aafe7b4707892f6c181783b5af3f8390d104f53917a9de3154c748ec789c43c9b5a62a48e070277819adf9aeae83f57c3d294be119b48bbeef2e6889aae9bb459312cbb2bd89cbc1a0f0a44a0403f501212758a70445e87d34d800fe964545cd8e6ce6ed677c2230f50b0bf278668a06c425a4f19f03fb566bed98b20559e74aecd90361a6f034ad5f24b70cd454bd746f4cb528b397ce32db94b80dbecdaba2f683ab76418e0a2127642e02de7795316ac415b508a869f7cdf6e9778b4899bef492659402fdab7296f2fa3a5f741a26fdb44cfe66dfd28f893bb2583272b8862e2eba23afe51f8af2f7a21e1ef6543b7044e06d95e413e0578a9c187cf410e2eb7d318b11f06f4f839aaf14e5a34c590a9e5b695c5e34d47f0b2e1f3176a9bb75aa5234f0c4a2ab9304a8867a23096614e7455985f63b5248e8f0d6199f8cf712dba5861409c085685c15dba61f934bd64a24a7d6533241fc466aa3fb18c0800b39b3ea4468d2c44bcb7f7b313ff3f198ed82ba181e208be15025efa1884d3ca8eb03c64a88df5284796dcee32a303fa2f8e6fa12fe0e173f2ba823d1983c1530191d83ec13ef165b8d673c8489521c3b94d9cf8e9c03cd60027ba554f094f2eded8a8af3ae0bf8182ff52ddb036272ade9e2a1529f07958bfb27dff2375dba258dd142260339e00289a009b14166283e1e89d828b02257073e333772169f5721217a124fba83b662c0ef38ceea6926375b56dcd6775dfb1df427179e3463b029d20e64347bf16280ff6b22faa77054e0cad216249bbf6915458ce63c3ab0ad84c7149f9fed8acda46c9a2ffd20859a809084ecdcc5518a3758e80c15cf8f367c2a142a56b856dd162f06c89efcafe060d8f4c7c49c1a44ca56c6f1f19c07335720966f21855d7b1d713753a6e4f70ec9c8ab10a6c922801866abfd9848208c5ed323d5cafca890035ab43ade7f630c0188302d48f3712767b12198d17ce22ad96b42c417c43e020e1105e30b76fec250410b8872c3101f005faf2a65e056f3100f7ca4d28627bb87bfb2b8f870cd18001bc587eee006522b97de1b1d1b83d04ae858dec1e96ca1b68b431f6c16daf7583de59483f45ba6308134d3bfd672a9d11e5ed8ad96149ee29e41822e102c459fd0f316f8a4170556463bba13b82967ebd816fb5d342799541f34480705cbec1efb7875169a4356e60e7b38e36ab2f0e13e09af9b6cae795537a2d9bf9dc0d21de7fb18a57ee78128007bb6f593152efb7abe5d2de6af282b0e159d1e8112e1e3bb04696df7096d6445c39a12dc580880b1bd6bdc49358d1ecb14fcec59c9ffbaa01bcf35aeb304e204db4e02ed8565ba0e8f43703d45907897285ef0ccee16e8bec9b2c74bec2de9664c388d6da32fefb6bb4bb16ce9197f99d72bf383870db63c957ae975bdd0c3939cc27b05bb4d68d4c9ed677b28107dfaaccbbd269fcc6c43089064d42cd6b6b25653935cd4a76d8e429059150b5db8e12ca6165c3b3b52faa85aff1144250becff529e1bf625450cad9b50e098e97977e124c6cd6542b08a004184d40aa60a68212965e929af3a7792781484d99a07e352ae942224c9cd1a95aeb9c48841fa4f433fad6f762d92f7798e6daad659ac4e07aa490381b8f2d3f107688ac5df25c8eefc4154e48796b3eb4523fa960faee08982ad1782f767dd9bb557cec966d1fca9c8e8417ca58ed46f05fd1b21a256c05f9c8807326e745f1b214f379dc04712fc0b69de456fc2818e36c4b67ffcec171162a27a96066181fab2176d48d3cf336f2d8dd247ce79e3cf404072b903b80c283ac319b8a5756dbfcf7919d289b0878b961cc68aa8fd22ba8c39f8d5a101c82b8eb28c9f34f948f2e23be344c83435d7afde6117e79465d78077efdebd1173a2c5387a539c353d1b522672a57aa166dcde9a4cf57187d4af85c100d93e2e3415471d8cddc37171c387026ffd864041208c1a2e2c301e99c904e1d3d00ea1330d7c29694493f50f71e9978154d459ef2d2224b0c50aa0d9ad639d0fca14b29912cc23b990f3083daee0ac51b34c34978b06817ac7e957bfe40cbe5cd038a88eaa9fd526c9caf42301d40b8621d61862c0a2f9333ab48970f5650c64e962cd395f5d0556f802ffebf22d7ac9a75a4f78565d538326537f1768d84ecc1d7a67c3b86e7cf1258272ba0953c2c24cc01f00d59e591494ad81dac6cb4e3f7468bf533d3a02a0563295bbcfaeab1818f0d122c3cfd18b8bacd6e196a8d263f7141d12772a5f0b95faaf13cba6fc7413d2ac08aa5784931437c85560d6a3e0ad67c828eda45ad9e9c20aed86a47f7d464ffad7119e3ad236369d5eadbd895f9f470abc2711bcb25b72ec6f860efadcb84d01ba810cbaf0f9929e2303c54b88d39d29f6aeda4d40f1f29ec1554e363871b50bd78109ce96653113cded56b30253526eff0965d528b52a680c7bcafb3a7a705e5699fd3c6c83fc4483f0d88776274c21ffc01c1c15af0391787eec108ada6542605150cd195adb786e96b3908b55758a1d5c66e9ade663632ce81b3fcf997b011d326a4946f2b7f9b6664f96eae7b4f18264aa06986234245140be4eb1c09ce2b4c3b3789a54760d82e815613ae4f09d566052397f2b5c1d0e0f3f06da56af2c4d8c9422be8702fdfaa56bb8245513d7c0d9c54b0a4ac5968cdc052fef639b281216730e599341114824ba64504104e7e8566b04e0c655d6f22f78919bf04a1e29e8b90514811d9091ed6b2e65b0ab15f75fac2baaa7f627699000f38403a355ba8bcfcf97587dc40089e4db0cabf0a9157cf08a0ff58fcf1988051f52a78e17ee851b34892048f3ba7f8f36ec38bbea69369fe7b8b90717299eefdbaee1f3aaec6007fc92e26866ea57d306ae62f4211c14210b4cfb4847c25b26f040bbba57dda3faee5ba5c465b69a1712f92e8396559fdebe74c139a70b461226af3ccc66e9d75cd38c71443746cfc52376a650913d5d3fc7d815c27f2de71c44a36c0f1f37839473cd4ed026c37e4401ccd1445afcd8aaf01ffecb164fc6aa14c6546ccaf02f0c96c44550785530fc74a4b74538b99888fff2853cb59a6c265cbdfbcbae3b642b041c5dac76236b5544a6613c759d2342bdf8b0fda43660f6e5336a151441a859847b9fcc6856bab73879d61257cf033ef2da89f72b4a2a8477cea730442a86fee08a11999615a28a1ac61ead2777c0e6663f181092fe5336da36bc06861d8382def0bdf94789ad36b03442f72cbfe0a1e0d06431207b6276d514b07e2242294e4755abd5c5da6223c36c49d7b0cdedd62a3575431ee9dfab31108c7f5fc2ffc8e263e216562f49b91a153b34f9c96fef0a15532cd470523cb6d157f387c58d5979c06aa243b0eb617fd821f850dcec53491807d68a3644932c0019c1e0725c69d2144b63d487cf81b85d020afd2eee6aafe7982788663d175b44dbd1b3f2f361b7088d4050d97e838e4be65248e6fc9c032a0e091526c3300b46a40b476ddaa7ee43392001d17ecdc94bd5b8792c9f510f8871637b9e604603ae7c57e60a9aa53f6e57ed2d9459c93104d824d72a5df199aaca1c00f89bc10c236b9dd6f1bac27431ed8e1d4d96dd8d1ff67eab05c1e46a38201eed59fc0aee4d7ac5604bc265533305eb1922be73a74338ae3de850924ad97c508aeb0c8771d5b0b7cc403bf8a61da6ec683b58f24519a49cd5f994640035e59a1ed652a15c63165b62f7ace23396d97954c1ecc230484531bb6014c056f563e4f34257c0799eb2996a999d8bc347a57a23dc034b307920533646580f12c1fe164f56a14d8e2f8e5a2b4d965b1dd812d71eb324f40d543feb90d3e9bafd40bf197b3abaae64bdb284ee3c20ba0bf028788d6fd7278e80a9e20f2e4e27df1badd3bf172a4dc3f12401fb8dc2105337f045b837a44c7ca6661efc800fc080fad12d621577917373eeb79a6905c5be577127e63414c99f6d7f899ff0b5eca783310fae5b2be13bea189013f8704114f5b304618eae07bf7efb0a3fa7c7121e61d762e912cda7e4ffa873ad618bec1dbcbfc66f6cfa6ea480e28825cccd9cab3acb0c5c61e64a3759a847b1cdde2fa0519c5359f68167151c3ced9a884ff117b713f74f71fd32f9a11ff66763f270675f52956756ca58dcfa1220e403d679297fb90909699ac7f57e1667174c4e18388cea72e0b15eaabfc16b094b64e99cab3bc52cd4724670f299948209af7a90dc806bd40e32c3c6871a509019d411c263923d47f6b48798b799a12f85b5ff3f1be4dda237fe8312fcacc89d947ad5531b2d2b42b856e8a40d274556d286648cbc6049c4a44026f8e520db18067fbdb799b396056281eefdbceb89df394931e1899bb6219d1e32df0b1d91e9b50a5156a6cd87773c5c230b8c8c74b20227efa5483e2ca369c0312f374cf3f8ea441a99092305828e100e3645b30fb87547253fc2f0b331524faa4f2f54082dec549fe68c5c180d9fc437e7ae0761d7d9d25b19bf5a54b39ef326a9bbdfd971056368a6f520c801b8a12784903172f878ef199a0724161296d32ca4a5926caa7b99fe420d191e4421cf6577b3d84a0498c7e82a61f50234821844a8b417cbc2971de8209ced21bf22757926dfa5f2e182814f3196751e02aae9f61daf16fe9fa118aeaa6a44da5a03bbecfbdc3f71797e46d7176f4d7464556fcb6c5f360b2be1b1d9473ec74ffe0bca455c7150cfb2d33e0645b1250c43cdd24afb8c20fc4c9e11f05ee11d8a9183ca0cb3687d1476cb90672127a4ec855839fc33fd7cd9ec225f7b591cef93fcb3e3ca67877049acac657f1498731e143fcc677c7cf1a8f2b3c4039fb5e57028e33b05e097d1763cbfe4d887cb3aaad6cab5153fcf2773469a680f9874a62bfc5bfd48865f47a10d4c36f9e089a096b540198ee2bfc741d01f7227ac23dbcc5f624f18c1a97bd4099b826a899a4dec98eb2358cf14791b78890bd343882b593b4259fff93b151617f3f1b4e8c6eab46611f8fd6c96e40826225a9cc56d3fdc7741448496debc701f9eab5e67d51ff409fbc305230db110c23088099a98be5cfba83830005a18e80ae2d7f06c8e93b668f1aaf65b40873b34fcbca32ad151e2afbf5c899f77d289be089df261baef016b3ad55a7bf80f9264ce1ff0dee2a0757bcdd919dcfd9258245726edad21dadefa206db8edfdf11c3aeed97a1c92521d471cd7681db3ff5f24199a69b88bfd53fde99a991817d4e19fa311c94da810e2fbf27dfccb62c2a5a79421eceac0ff6b5cde8384640e60ea7936ef63daed81cd7f98f35f4fd283329312e100ab878a2bff47510139a93e3eb2ef9cd229294ee5bb5662190fcbe90fd2d9052c63aa439dcf6c2b98ffb116e53016409ea4231e339773f2b075159c434a31b3f97aefd4c8b2943ad21eef8fe8ddf3024db2a59abdfc39caaee87745d6e56413ed581fe5b49109a636fe28524e9fce0b69ba756a8dd0ee139bcfbb8cd189b94f9265021d6a5511964d0827071f60ee837a265c35abfddbf4fd94a7183b20778c700a5f25f1e4f5329da2b35564079c91065d22a31d6948965e9e04921c91e7f50dadffa45128fda4b03593e4247c205d97c78f5dedfe7c20455599a17cc451aff3b8ab43930870110e2a905d67a7c210b4cc6b0b23a2c1bb3b2130ee64a1fde5aa9129aabe6b98a43de772683570cad2e6d47d55c53f5d8fc76a8f20db1032bdb8a24180da3bbb82c7d601ac97bf7fcab3478ee1ddbc99c371987fe0eaf9395fa751bd6ef05f22d6345e04d2947c2a21a68d665a7201bd80c113c8d698445af4ff08641b06bf15c60ae64581358f13fe440ecd668df611ed404432a9edd9dda4462efd302743db7ad3d88a6281e0828a17338bad3583dd3375918502f1a00a96062a515458d3be1b169b9c1d8057bfeda66267d872906879e8638888ad8229f3c6662830a35704d15c9743593add114e79042b8f4c05fbe8222304e4286581e20f49496b0fb7f6c32c3446beb858c2d519829d79cccadea8aa37c2bd6a335b8c683b7eaea4dbdc1a0eda6ff501b218ac0d42863ff9c759e0080987bc7cd2ff1959a48da16babfefd8af184a61dd15cf8ddaead89dce5b4b8c5ff1e89652cb5b06aed3feb6b10a39529e14e79159fd5e4122ddcfe7b0a365968834ecb2d27c579247c5c35adf0150a72129514f002cd953326d946e01f28eb79fcde2addad769d0ebaac2637359a83eeed2122b6e48a36c8036d0a130dd29581d297507ca51244b10ff66713c57b2823d8b9496f2c55ed592b60f21aba7c80076c41e212f6df9593e4049f498a00229b3c273124c276e26f067aa5ff106ed49334a48ba88a26b93e9f9c77df6a7099de823183dd8e353f91fc83cccaf6efb8ad9187f144482ed83aaa8797df4f15b47210a0e7a077da294875420e81534954deebb3bcf11841180d6b8da65020359ce1503b047768acca1bd980142e11c2d1adabf195b4e2a5a4414c754d3bc51979b3a8cc836946f44a92900585d817a357a3370724978ea3a25eb30933a72509726e82190b7efafbd13502990a884d340d46f8bd10a105833bea0a0f019c2a4caf9c45ec45bf6c06868d98044b459bbc1c2156dd01da2d8d966fb8505e23bb2c59c4590bd93384609121b80def17e985acb9ba2da14bef09dc742594f342c0ef986f263e6ee32b501b79cb7e9f061fd5e4988a7795fb343e3482b9a3670322de9324144facd5471d4c1e3a1d021b25f5ec45308188f2e275c720dc44636ec741736b8b043d13c1104b976cb3c15de32ded4812142039e2f6bcd6f6418f8a98605fccf327c6a58271416cc80783d542c40f2a9af705d71d093c2c6f60925f7d8280d0b47ef29171885526b8e3f189280479722ef4e0d47af66fabaf6a15f55ff1fefe36d266e1759cb04ca20db2837e3354a838d15939e0047cda1e26bf5524f300dfe1eacd9d78f67966f04e6fcb2d9ac7541f57170d397c8c41255e3986b6d1aef91e90cdcb61dfd9fd096ed0671c81fbff4b4ec3586ca6c6692ad82a90fbd331d7538a0e75189df89855357c61322f1730247e042361ca53d9975d3b7cdd40b1feeaa139a28478fdbf3c6b1cc159ee447012ae837500305a19d2b51451436255f8499df65b8fba10fa26d7578d7804aa467da8e856312004b245a85c17147f464bda46eca720a95bd27b42d6cf76ba703acd32dacedce1792b56febbd63ae0ac820364c48e208f03cea374418e3d58bfd46a1501e6e9bce00c6f7edb979ccdae222ebe261875b2337707353fd3b426be9dbc1906a540f961def7f26161228d74b5c21db84e085b11530d4d78a5c36c961c2c059114c9e026285620f83db46a27c327492537c1d1c5ec1e83950c52716ed920a349396db85472f3d046323aaaefd2c40a13db885e78caa3a03e10497e6f5d01b9d71e12cb164538ccf3489c96f36c03282b4346485273026d1aba90dbc02f3810e2cba15f92278cdba887c2765c184b6a1476e1d87a71a5afd21110d08bd82b70134603bdf0a357c40df89592515f0599767c4356194cf2310d1dafa5f5de44a012991e2d593e0250c9a2fb31fbc7977dfb5e520a568a53ba74e756a128cbea6a86ccdcf6f582f347858edd9d82da6ade4923f83b5ab52f11af76ee0d4c26849418e52462ebf69371e8c2241c0d20e68408d31c334c54edff65d35d3188787ce76feeddb764224a959b48b6f7c4207337e177a63855f0f74c3e048d550548392b34eef13e878f817d45287d76d0627abe7b167d939d10b4c0e41364c1eb1e23280eee473f7dc49eef8f6860e0596e61e280b88b8c4b3c8c22fc07ccbc6182a2a5a6f5c7026d490bb42012467f86cd926b9565b76a88fde73c31e9ac908ffd1e6ca30b59ce80a72e94a22d1999800673216426e9777bd92dd428c0eb839e16ff43ae38e5eddd657156bac2c0776fa16ecb950209f94d5ac6b38c9473deb656adf36f8553a5ae0b3bc412d823617a26ea33d002003925081ba1036e2be9fe4491448df98b3f1822f3a452772a9ec91e4f1fbc2db47f2c6a92663555fbeb9f6811fdb19d7602453103bf22a7bd7885110458018b0e13890894c9cc51cb2ec14a96e88277fa385dc0d2dd2871c435d68573a64824f63c656a8a936d6a83f88a7389cba99200278757c8c60fdc271ee30403d039015543e819da8cc2a90c92256a506fcdf37119ec7f4d417df1ce7bd5151ca07b291170399cee7c73154c44b8b7559c97a43354b4bfc9171bb7a194d34126dcb7a4140b817b2c2b28b62c556ce3fe19aeac302106a0a410903689b0060e894d947b445ce73ffe618895940f6875b5b0bc134ec70aa946f484766c199606aebbbbb58bab946fcbe53bb96db8d5f5e12766e17790ea62188ba1803415aab1fbeed35ad03fb093fa80ea2b9d99daebe947561f92c2cb53809d8c5bc7ed6a96d9ad8573fb616233f5fa3df10efaa0e037d834d587a6d805e7f1f00f0fe9ff3db1c17906f359d2d8231bdb15a6234e5c32a2a7093e8436ffb65073a5f250912ee9f3561ea26f2909ecaa6d9e4f5b0de5426c58c59ea410c95382bd245a6c47f2eb09c4c0efeb8f4fb8719a95f0eb0505cf00ef10914d8cec284f77942e834a101dcb6df6c2142b31ef360b01711b5d43412413f3ffc8d2ef9b7f49fd56dec210e903f6c703332637f9c267eab9333e2701a16c74ce5e0b5a16d9da68b9c5d67bb6770a3c9a90a7e93fdd5759b27bcf3a753fa39ee7545fb60026d3dc417faed7ebf04f5b7073d7d0274e8354433b390306c5607632f5f589c12edb62d55673aff2366d2e6b24de731adf92e654baa30b1cfd4a069788f65ec1b99b015d904d8832110dbd74eae35a81562d14ce4136d820ad0a55ff5489ba678fbbc1c27663ec1349d70e740f0e0ec27cfbe8971819f4789e486b50a2d7271d77e2aaea50de62fda5722c51d988164719a569988775e78e98ab5174ba082c4b3bb8c5be66e57358ef871cf59179fa76f5d29fb9d67237c963db0e51e4435257a1e71926ffa1a58cedbde7467e0943b9d72b93e34c376e90c681aad168b01faa7214ae0b653a830168bd962eea5e787789574cfc32ed134d8a452edb8d781dac75e98d53ded79220272e31941ba32117d1ffd2edd0bbaf6777cea1569dc3d4c5740ebde8b3a05c4ff4b9be5f5afec70378cb2e9f6ecac94655c50b2cdeb8cb5e352b46b02cbe68f795064779ef97f1a2466267f95442e952ecd1744499808add82e7319590593e81d3bcd3c92297275c026d85e2ca4a98f3049be586154299ac21ea857e2998675376836b373b26f19976939144170a5c9164ca65da9c278131dadd4a523da46ad7460516ab816bd8c1687d920684abc094d507fd287457c9d6776889fb15a5cf740be7dc0d3d8f633ca1d39010595549641ffab458e6f9f902be324960f9c21f918cd4c545b8b91b73e93c944ade2f81690a4a92523a36991c79e492693023e1989272da3c371286cc0760a49c5a62ef0b5ea09ffeb835328e6e256cfe04f19df0e56922d805c22eb0c5e8cbee17151bb3e2a3e445a81f4bbf669ee007bb54db014d62a50269f09b88e97c0e285b718ec75ffc680d511b6d1728f7f56c9e73243392056ca3aac553ba3cc377326f9ecfb19d523340fc521ffe7ed7b415f577ffee7bf97ea11168e0b086660df49bc366d7644e4ec4f1ebe9dc2ee623eb0887f59ad1e7e4e6e601cad08f0cd8562609dca37c98c083780f531901cd4dd41ecc8d9f5c76a45871ba97841e5ee1415a97b87bacd79163d9e6e61dbf3437b9816e4f65e44fc8e1f9b9d133fd042f9b7d9682c9bdb3ca4e5b97295130c2eb837794c35531195768c826ff44f2a5ca4ed82dc3f478d6722b474ba51b1b207018496672d50a7d5ad4242aaa21c6e9bb40b3850164a2e591e2e529e0e44af6ce623f0de34e3923d80f56ed5931417a095b56c5c781068b305a7d5a641583eb0d48a0b19e2984b2d900a59694dc2afdbc8508169ab36b6e557d5705b9148fa736b1b6792cccb4d3668f5b4de48a4b1ddda812a0046298360b32bb53654b36d35187c78e14a1912d85a4bf3ccfa36a8073abbc8a8cf6568c5761f06cf2203f1764b11c18de0ee26941271888df8f50ce86764efdbbd76d1843f23f77e8fd741a7917fd3e137d712e9f00af5c9cb7c5b01ff11020176da581d6cef09ccd499b8597a1b1283a550425a918ccde8d8190cd44044a1c2a21c66f18db4b052b6c7dffc73782ffdbfe64f56655b6363a567bcf009743187c59978c120297d789cee23110c1b6eb7ee05947dea0b78d2b9f4c5b5892443d937ee17dcb2c1e3d70d792c27a279613ac63aac31ae2150be9c2cc1c56dd95b2f9f96ced4b3f265d67ef545b0d516aa0ecef2110210119d7fb29c3b701607ea0363000829b25f85ff67ef1a4d2277ab9c7ec84d7fbe70b1ae93af9d76104472fd08d65e4c2c4dc6ca5ec3244d0920d87c4c29cbfb17a33fb3c5f35227faf3786517762bcc80619acfda1dce40f786d326bd931714aa4d8a37bff4140624a97ce4156c1b2b6d1f9468505ba2b98c3e0e144990b94ce4b44392e81e3da12beaf2e2691486d930fc262c58093c27259afbcd86bf1d14659bde6dd4fe49898f1c7cf8a92c09667a7bd2a467b2e50a52422ecaeb5acd0b9b58cd211d00b21fbcd27d9f4c0f0d43b8132c4 +MD = 2fbac29e12a3d83304ac661cb664e1240aaf810a0e13775f7c4319c895168f4f82e3b904562e711bb8e0410e328a7507 + +Len = 100024 +Msg = ea4ab388cce26a27e016c76b4888b02fbe1d4b93350cc0adbd35407ba8b5461cebb71c40c78ca2dea8ff4b254de268b429eda90d09c9e047f86709045f9688a371d5b1b7c6658db746a3dbf7499556d6fdc336390748f9396d286319b3e4c47b444c79d31495b51b84ab82c986c802fe0146fb0077b292eae52157a2eac7820c2cc57c7df843a27328bf45834aa4f592fe1fff48a02e34c227faec874d664bbef1e8c39eb998da25fb862e0dde51b6fcbcf54afbcbe56629fd5a2bb024eaa6f95a5c551ca0bbe79bc5a9444f8af6cda20371e5ff40feb0872de91a06b77a1c2530ca3be1f5d4513b4ecf8f3195bcc3ee9b3bd73e47a29a448050c46f4d3f34aa3bd97bd3000d9e6f5da1189c49ca1f464bfa289e28f9adc8be372ed4306176f043321fdc088c589ebcc7e676ec496914dc56e1092a2a707caf45621ea6076a60107c2ee35779062f31e801a9c7602abf17f90966965e6cc61a236733f85999606960b1cf33fd318c85ac721b2238e8afc188a89db4bc270fc97945fd6e808a591886af8ae540601c80bd40b645f82e4ca5aec795cc6d2bc082ee04634fa4c5b4e39530fbb4691b47e9c0736077c981fe8a116c382698003f0e2aad4ce5ecd3d793363d0aeaa0eb758a60140301d36b2d3759a26d0a662cf635d648a276813b2cf010dc9fce0f560e29432a862b3d7341752f6e1cbfff394bbe9adb4c4b8b8519c1cc18a2a7dbe67a8f11bdd13d3022a20c3bda2d8e8aafa8731d7032ac313a08d011f6fbbe2f23228473d6cc7fd3feb8c424ed89bf2f14741a080e3ce09be160e38880935b31946ccf107b5f394f91ec6592af169a18f2177c02be5231f20289c3d8bd50c509c1c13a92b772b2cb63a4b62f29bd666ad0f961b4875ce55e25eb38aab51b46e0328a8b9e8fed3370fa4980a062676d50378291c571424506d3ee09a671dd24de702d8bdf0db80465e0448b9062faf5f0ae1ad3de84ec991393fa0073f87ca82a021402fa38bb6dd39dfb9fa532604772bd29f0a7c94229acee77e3ba52e21aed70a5b89a18dfb6e2b7d88487d97fabffec17b1c7472d3cfa6bcd7b2288f5c24e434a7465b60a26b9b84201df5f4168bfc44cdbe706931c2592649054a19fe776026a00031925068128a1e055cd8cc8d9cc3039ae0f5e0f54eba4eaf7a5c6d38c356c221d49199e618d5ce7902a4a11758c2b92c569745eaffff650b49d54ccb964baa35b4fcc368271dddf397e628cbd8da6add31cbf515f55c08b3390301b2518bb4a643228160c5b8b8ff7d2bc81d75607538131252f8c756b641b864208f7d8d7e1e1fa148626d4cec1732d4038eb70b84c77af90425de860a0158772da582d762e79b077cdf8630e3b5597d6f822611f605c9ee7d0fb35060ac89ca8db6f9e00fbd55b3b34ab90b3c64418660ba3b3a657d90712228ee4c469ddcccc5165b3dd0e9c03470367e3252ae8b9d8b797edb4f895f1f8803d7e0484fb20c68561f4762f77b0838253e5cd2fea8114452698b00c39648331308a2d24cb9e7ebf8cea31280e6bd7f8981d119df27902fd773b045b6c689a7f9090a711f450dd470d1c77c0083b2baf5d135a3ba7a78b26b35e17add70625b08518d9131f3ec9640d12b1be0e2967edcb5011d2b2159509018a51ca21450d0d36ab2df2f46f2b5fb45545ebc73c73fb0a5b9c2abacb09ef8a451a7af32e38deccd00a751aebec80296c9d0fdc7c372141bc650b68cfd01e761ada84f5c78f6b6e10d8663abaf20f95df1ff2f4f19ca699fcd23d642bd0dfec8ef9b1ce1afafb45f2008bfbe527541f37355bb8a488d439a24d8755e7f379142bdfc9272f62d879fee8ac06727297f0fb4613cf9ce4f149363db3e40920361778f594a70cad4831bcf993026cba1f2fb3b9e3e3e19946f3410a87b89b3f5c1dfda1d9f7bbc59495b59b0798d8e93505e8f891997c8e1b5d4a1bcc7aa437344d434c62be449004ce7037cf70c0e6219a206ae59b74aab8afd9da49d12df206d0d15ff5a5adf8df047533b4312b992b15e677a991d1d7641276aec8663d571ace2f405b5400e46f5e4df97e8422ea9b9fbf87a3229cfc68aeaaff0fe0dc4eb76ee6595c72453bfa057feff510acc1b85f35029cf7dc000caafc36e8e812bf26d87d11bfa782e7c921937fe07ed106cb7ecf515db899cd982ef5b91926e892b0357ccf4e9dc1cf24d91210097599a11c2316daab0cdb4a54641bf16a4165af9bad6cfdcff909db52558309369e0d7af3779006519bab5f8872f946a5e292ff2f67d4020b6663f39dbe6ed430a1347a98a2c73d150e10f47b80142190b07568b68c3c46ca8ad5ff4b3c5bd8bf25178752cb43e8c10d13f176b7f6e8f55419d376432c31d30d6ae7a5f6d37daad2bc8a6b1a8a6d1b3fbb3ec13e26059a758329b8b52d2bf0982793f3155d2bbb512d6c29b82636ec4d10c4a43e2cde47bcbd50c409c69ce7d316ec7dc0824ab84a7213d5cd9fa9fbde1a6967df91ddc6d0ce32e26880ec81653ed88a20c9426a649169b6807b30129be2165148dc68de5bbeb65afae28386f7a740645dba7c9948945516fa4432f72c6fb4aba295e9560295c373e674c9be305a0d519edd5e0d9e82be3b6381177338c929bd1444c7f76f5c437755be27f1b95e259a0bbb518d0d648e6ee2bb464e67f95fcfc7726a894a1b1dac6e4903e639bb7287cddbbee33d41acf79f79295063063c29e3a63ad43ad8395b5a9cc666597adb5f0cc50bd5d721001ec3432741d1f8aa138f699f9fe89d7fcb403fd939c1a2476cef02a22c830d722b76a1a8e85cd890d4f34201b4fc71d74649bba227183ba0f49f19e9afe80bea65df1c140eaaadd5b538b9c8d91d5d29129d978bf8064ecd4044924a28af265016273bd47b637f63fe86565cd7f3675d78635bfb7335e1b69805f62b5d7f638c8475874ef7305621f704a22575279a5bc0c4905a614aff43430accf61801cc86f7f287eb4ab93bf7e7db248c7d61fb0b32e7bd0f8af0ad5c8b7c9c121fdd6827b9c6c3133ba535cd183264f7b548945516f56a84b6cdf5e9b683efe73aba3f551118c32f949c4d8bd032ebcfe7856c22b3151f20ad89ded20d464bdd33405af9461010a51b488a1a5803407dd9c08b585270654b36cd70ffd8ee3b5cd118c0fca1d831df994ef460f8ccec6754a0fae13b2dc36d1b41b4585fa244ccdbea79446a95ae43d5599346f7b675f71fcdc0a3b675c2ee228cb1c6e98bf0951a5d8ebbe972103b990f70b49fe8659404f0e5880b70e8371456702fc0d0c61f561a06486595dd2eab189293368a43a5c9b172778145c0aeb849f77d2a9b4ed356c9e9d22826a084d41d01c905c6989437b76e57611dcfbcd80b509670111117e4114043784edea4dcc6c64054c2ebc816abe112f31f9fc93a448364da5c9654c69a12829e3421f88bbae8de6ba6c4a92e34d38f7f74b73ea79d96cdafa465f3c50d6777e202f0e7a9a26f8d919bab9f46fb4db64d439f81e7bd93bb3910075aa912470a8bddd4d9fd2564340fc9291228a7566fa5b5e0fcc24e8115bec903f33a50bb23e3ef543650eccebb2d57c56a9ae1f7a2cef2011600f569c387f7e1254070caaa3060f8676a9eb509336d080f6551373711218a36685c52acdcc02a5782197d87bb5848d213e421086935796a519e1e16b66a03c6c42b44ba044f65f3c9f4dba2ccfecde013661b9f17d4a0e12571b42805f6f52dda0a48d449ca1a60dda9ece3aa7a0ef931cbaab6847505ddab71025345ede8d3729f64e2f15ad20686dfb8339ff5938636bcd736f93e31c7a9470f80c07762205695a2cd4526134d8c3e4878f197e5edebe0a905be57ab05e89ae398bcbaed7c4d920a7b8d57689db670a39ce9878b9815e0280c1be9fb013013878182e1104f1e3ea3d51114565ecd1ad185cfee0ded7f635c33581caa21485a02255a125401924375c3188667f89ae7db1debf3f456f0124e63bc173fcffa165c6a8b753ffa7146882eecd422d3e27cc84a84bfc73a2f950582900342720cef9e3a5f345ba283f2e5fcd3270f577084a0f6e4790e01059389791c073b71478fcf7c1c7430628fec931716a7b7ed0ba56b08514a52123ab4e331a84cb336739bf7180b6044a05fdf9a65fd7ba1fb7a873268145a19d796a11a917cfa322858be1ef5741d22c5b97103d0cfcc55eb86d3fdfe75d0eeb7e1023680e0383eafbd9e4dfd9fd64f3a664ad53fd6c15c23f731d2b2bbd4561ae27e40e81b2e61336ce38c17d3b154662e13189958833d0d9548bb6c3090db6862be3fb07605221c2b36e12b5ad6bab0d874d4c89e39800f27c1bf141a29040a296a3bc039e509d3c33f56227a6e09822e1412b3f00cae937743e692c2ca5966ff293c00acf59fbefca5f2e27ca1c743f69cda4295244e004b7739ce709963e5aca34b58165e6b469d10bd54a8967e5af9b3325dd7a8e8be6c05bfb06cbea9eff7816fb0c147f6d3702ac0604576b531ff0224ecfcc10535a2948121fd62b4eda96bb1f0f3d9c6ce3b9802ef9d68f52fd031b7d74d962ccdb4cc85076cad0a458a081700f53c659dc7058be7f695c5bc33e7f3061250e5ee6c57d54c02c635616201acc80f975baadc1764329925ad40f1cce1629316b80090da79d604d6bda7f9fd753088122e5c417694b6ce3f3523d28988d117112e6be900778fbd04288117a57c21aad7681ac0cb235ddc0be6ce9ec6f13ce868ce973f6ed95d7479005683a1c881bb0b904e1fbe1a0d0db247a71d2a228c4c4420ec5acfa72a705ccc8e0698613a04d92f5f27f680b0a75ce117175e25a78ccdadd301c9e7ddfad6159168335032cd67ccb5a01c5d2df3303a87530a0277f02afcb2fe04a35e5a0f62c671199c535eddefb852d7ba6c3957dc5d9ad5bfe3bf8496f21729e295d82e3b97e8f24d83fe6421d005d09e55c1f94f03b46766d2430201fc15e0ad6abc5c286b97686cacf624e86580af11d0d23c19df6969fe2ec2cdc737bfd00bc54dc0b2ab4421ffb58f44cfdf8c1b1bc5b54bc45b818390de850c6f0adfa2048ed48360bdb8c511860eec5ba6f1bcc51cb34cd8ddc35c23cad4e882df3bfea0ad99ccbb0abbfda707be461622773b16bd1268dbcff89dbfdaf789871d9d8ae80ae4c44afa1571cb20e67787bbe54017901ac65798e8ed6cf63516062bcbf1e38dfd9295f68dc884b9cdaa36da0572ce7e158fd3a05bf53306d7b888738dd9991f2b602464ecaadbbabc05ace59d7a456d49ead84f195d1bf22596945cadeb13a6b85380adfac1d60bfbb0704676ff8446ff00ed0de9cc2da267d9b24ef1ce580bea95303a7fb28094d2d40a6358aa91f27ff89a4295ea70fee5a86ab1232a70370a4ebc724328de3e899903a60b23765811fb6756e360ecefe72c45ee09a964115fa5adbc0dc9faef6726e27656113b5ffd31ddb19cd6a95bb48cca6b6cf13b8033c38982a73ddb90b5a42f3a021de6f18ac183bb88f3b02c95f1829113aafd6eccd0db2bd72d890abc3a735cd7ee81f502d4e1dd6e600848d283f3c8c87db3c273f3281f66410d43c11134439d2d1352ab91807d17c5b999b369a779511164647054fac51c206e250f50fd571c81a5f2ce21e7054cc8cc057fcc260a7710183b0b1cd887c073b497ed2053001c933ebcb2ab9edbd314487680d3f6e5021fd7318c734bcc1ce1e780a2a9c0a6640ae698a1582e69744f35d3fca7a170bae8aa2d3a80dafdf61310ca7712cbb1bd8fa56ee1501e15f9229b043c6faf15671398185f6c0d8017b0375cb484fd89efca8426bbbaf649283483f08854a63bd048aad8415e6cbe4761621ea126dc96c2628aa977be3f6ccb2ef481287e1049be2ee756287f801f4dce9bf88521f241fe00c0dd5d8680e6a8b7f79e631474a9f96d577a5ef7d00cf39ee9d2aa9cc7f06a4b2cabb537411e8878932f823f5bc249ae022d2aede4ebff7a559456c0e10ccfecd8fbc6fc0b7e3218d01dcd264cfc7699f155d38945253a09e526d2b5cafef58accb6d9fb646d7040b64e8cf2cfbf47d52bdba2f57a236cf4a37066a20a2da4ce0fc2365cd75308984eab07ca6c73850bb8a8df560b4c5de2975b59af2700a45fa8092548e999c3c79f1c86d7ac80f8e2a1a3d2d78107d47cc8cdf506abe1bce7a272eee724a56976b18a5040164f6803edb3c29d63be9b6a3eaf80cc1e37b60b02e4d8600fe0c24c8ddbae2e33469d15a4c2f9d339d8785301ea432c06695875d2492cdc32b295f23af9e8c989ce5ec1cfb7bd9f8cbd34df1a64864cede16bcd1a8833821684ac0fc0ca4638a25075af74795729e2d497b7900791545a06b6bae089327b42bccd4c28380fa40632a8869ef20f9ac68768836bbaab6dd64003e52e3474ee3ec4c151792a8d343bdec0ee52092c1abd3d71eab3641dbfe8f718f60b714004930250c5bb870611cbba85919aa6f8d0515f789571ef30711893be948028dde4c8e04151f739c3623e30be147db1b9e50953462cad4229abee7cbd67934194b865c45e9c34270c501aa635220413b8816d82a3566d455397f31bdd184ea4ada5f3186d4f7a392903e986b06135b23dca065456bbbbe0f55aaed6e64fb93970d5f9433711d15761a23237f8791a778feb5b3229049efb561fa7169fb3dbe92470ffad848b4269fd567e21d513bb4af80af582e2d91f7ebf0c6744d1edbc9a139d8dbe1c64d457454654ac0ed71e14be505aad4ae14451784975c644a5643583852cdec6459009819b3c406d6c4dbb2ae4141c29c5175dc9ff5906c082dca3bd5063754cd67c68f97cbe45b87b502984eeab36472da088fa569c6a0d2c2bca0925bbeb74bea35af5126323b8ab2d441498a5626bbfe6bb5275c55cf24c5994ae2cbba807a60ac8bc84b24235a5eef621088c0a5f26f1df1a855c43398a6fe8f68feb14cc35bb9b97fb340bf7109b26f566e795e908c9da9badea87a88d74ad2773d3988d14bdb9ce9f6fe4c5953abcd6db3f6bd20e77961a16f68f08fe70cd8a02fc9a10ea180ca997ed3668dcd59f0d8f1bf4e1df02f9e2e708c520846b2f6764ed841e60d47b6f0c366aa98c73b9e2a90397e02472ed3a49a890bac86ebb06c12ebc7f1efaed6a25d0e64e4d1df19c517fbf9584cf5969645f589c718059ae4048acfbcb924ce00b45141fc9da2f85b118d1caa82224b85fb4868f28aaf1a909c2ba5a0fa27f1ae51d5be6a5b25be3ee5536453773386f6330805b95f36b3d4524506394346e60dcde22698cad5eff33bf56cfdac87cd69759afc85f63afb31cf7d5dfff4f01fa1812d37124d41e21a6dc992f392bd83424ba7b9e2f02a653b5c1b197fbfc202fc040d5c6152e84916f37682ffba334d331d84da4acd93664390d4b502e42b348fdf1903008c37896b7552995c83878f9e73d8ba37fef4830cf600dd54029a28df6ac6c77a59ce379a6c0462a4af38def6e709f644f4cc5fda0445eeddab9d546d4f9d16293c0ab8363ff25b626db59fdedf9efacc5f99314d440a65fa4fb34bbbe6027bb7b37baf9179a300107f9c56a8c61e54689fd9cbd92dd4ef445f6a834dd6ad648040af626e919cdd29353b980752ee7f94260c63f02a1bc7466b217f8589e46d2d7404951020566f272f41e85cdeb5f8c982bfbe44d1659a7ae386b505885df209be19ac189e6622a4de1dac2bf1db4c8356522f29bc48d54c68f8a8405a50afcf9f6d0bfa7422940cc23d77f704e4e75be1623b21332c14555bf5edc86892d2c9986d59384a323fc96c3fb040b05955bde46e66cdee85b4004d1cd9f04b6b279229990854790b82854c93098b6cbf1413bfe5268236ec50e7bccc117a6b6ffab3d37e9dd1992508aad3b5d849927caf07d4551ed0b4d657761b8218a950f7e8a9169c8e2213053ec4a236a11dea188314d24cb44be0ca5425e9ed541f84c95ddc73615dd88f22914d2883e84aac193ca53a2a6b66333ec391c85c484f8f2ae6e86a7b81675603acaee73c3282810538336c7cb89234aa1224075d89bbd8b300377c39ad51103eed846ebe0447d1531269e9b220525da2ec67576f8cd6e9f83654192a1628362ae0581f87d1fd458937935279374926afaed61910c6334b40f5c8d1cb604f405e01848a283025362e246a072071c91836d5eaccdfda536543bb0036ac2058c75eeda42f2d83522ba87538a8464474bacefe3ff33b1db9d0671284a83abab72393e1318ef65006ae8e8689966943be76de84202c9114d9053198d0b6f5b3fcfd93a8a71a212ab53756f4f751f7d408e4ec0445c99054338c199a7ed37b808cade4809f611c87d04e883cfc7b709a068d8dfb1b5ab7604bcda5a3e99e2ac508ccfd2564f466dbfa6c98baf37371fa19c92ae51b7054ad94526c41ab6781e5d3d343f3a2349eaba60a1f1b86ca6a68d530593ec08b16b0afb2c4002ed02f5790396f77d1a2028b35bf71cb20f0c88aab4b7f74950b7bfdf057434c0e6861bea097b62e7ddd50ef5be537465c772ac41e8324331381d309f8c86091a480f77f8756ee840147083c7b23d61983ddffa9916fedd6c67eda594b7eb28d9bca2f1ed70f4f14f67f771705f3e4b15195b5afc67a12fc2872f0504af2af7c5e949710f2197e5dd7c74bf39ecdd9aa202eeb4b003a59ffb3de93a389bcbe0a5780bdfa8b1de2cb2feee556a82a3b608a0a1f0fe119297de33252b78a4564a4210f123fe47512e96936e1b4b4817080e9c7bf62eb9ee7e3411eac00cf2549d655a0126590c795351e3fbf92367c1f67e9e84ae882543bcc57e41e13bac4d40d4fd45ce0328dd04aa979dd73c0629e91f4dc501547a18b9592330764efbc79d58a2c50443c206a76b575c9ddc4ed84ab85245d5d9e3f6dcb8a8c2678d064c1bb8f188b160027aa65aca41334c67557f12540d146086648fa9b4fc9c40f66322be9196bba311c36740995381d47828f2f5fc23a4318bea3af6efe8feaff2951a302bf70c54176954e46c9b6fbba9da0928f2916f941b104365038d732223686bd766b48abb3bf2d310e91fe64b24f22e75dd5f5bd15e5f13bf95f3e4e0b0667e7bebd31f1fa6e84e8abbe9ccca0ef8c8a26693522f7b5e12cb50233a32c217b9e4615fb2ca80d22c1b88010b8192743f7834373bf79a96a853d9245b60810285d9715d2a02f039d58bf96d89b8d5effabff052fd72e58d3e1ddbfe31b214af4b23c3d771101ea4b1a2b53730b702f1633f41ed82e582cd3af3fcbaa36fa4a6718afed46e3c339b28286567e6c53f00e1bfd00fb19b99de069be45f98e1587061d6cb5d09cd57a6a2e4b003952bb4a6dc0944c072db534608dd3cf5fa4e599481cfd1792a0db14e879f3f1524328b6abce34608adecd78faa83ac85b0ffce9a3b3db930b9426a1a3f21b9a47b1fe9d4ea167ef04a174e405353db15a23ce00bf6e72a8a9eb5a9933232c7b9823df86dcc6a937f32a4e0e26a1772b0b84db76d1996cd90c1ae973fc89a115b21d3e0bccba62ebe4bdbb4fc5995185bda797a4b0e124a490b745ca86a203e924028c94a5094f6b37e03f31687967620f009522a3c2348be62511f567e8ef666c785da9dc1fa9468b466c4b95ce13406e24566940b916ff5b08b08d06eaae3e09e323b3f87a1afe5d34a506b4040f9159875df10e32368f8db6b419ea03dab07ad7715b80b51f030c4f8bfb79b796d56fae1e4272ca2dbcfcc39ef487e0ef6e4dd9c908eb4d1fe5370b83822d55539d0f1d19e5f4ed76f806c3d3d566ee76d7d14e8d34be9eb8356bed2e336569c058c638c3443b187cd15a2bf5151da8eb7dc3ba407761465243f958de97a871678903a5bcf58be7d9d95550653c129cc7d093b1953989c088b18df327276ce8a3be65c869728db8086096f5b6c2cc369670afa8ce038e99c60e98309a5b394c2f696b355b33a71573078d706c31c102d1ce96248d5de63e94ab8695aabb8428450a6250f4c16e9cb44ea754f821878e045ae5a945b1372b6f28f796dac0d3e99f1209cfe8945a9a46a68317dcea96349895fc9b79a5d7ecd00759b89cf3bf2c9820bff68934e1baa49f8f3dad2553931910699fab947eff41b73b7f83cc9c4dbab70369691b9a6a48aa5a3acb3a7626005aab1a5e1562df4eb8fb5001c3f1e99135628d0ac0fb15cd474293c9c24469e8c54f9003914a09519d37dea972667c963c5bf5e0cd6a698d06f6dd2b3564db3ce0b5952ea08b09e4d47f7fed405073442c6e287d899ec21269d58b620c4e06674d7b9e51bbac6d92ef20c83fc6466a2595f799439ddebbf7d06d02f0cf6658026c001fff5b3480c65dca2c336cbecdb509a6dcd562c0b397db3be869f7546ca8bcf19e9a07aa0009a0da204abc301a6ce7fa47a580db459cfab0b0400c8e9094c0be9eb4397347d748ef58f82d30dcc7b1507e366094ee51bf69dee5877b808107d5a4c06936e4b9b6681ace484781600647e50a9a741a6089d5e8fce0b198e802b525612f5b531b89d30a2f95daa490574f208486ff5643fa7352e8b0b7662441fba4f8f4570f8733ce9bbe8e60b30314e49546ce9d3e7681c0912b6ff364d03617b80a50c09687349933ddaa704922df96d7c3d9e41f62a05c484786fc11765f77b317ad0e74961cf1871f629fb36a07d44c8e215a85b2d694dccf9e47f8814eba4aa391c7263e4d35f9f65f359e533e3b87f84d671dc1a508c3260e6d867b545dd320875127ea55f500f4e8d87678e32b0eb4a6a024299c269fed6fb347ef30b0d120f652f614b7ad308da80eb84587213525d58c55451c8cc7782adfb9373471e93787331d57f2dd0d43153ef043aabcbfde42820dceb699de68d83956fe000f7fb682880a2e97f2fb97a8efaaedbe6bf3408637da00eaec4931e056adae03f8092090a84903078d800deba734be42bd73ff190436a639d29c65ebce29c1b0ba1a283a3a666fd20b4f0845ec4a3fc80fb65c637da009241b5c7742f667c3b6c4271fe7b4ceef780a9d39402547eccef13efb0e0aa2a429f4edd89e75c43e56a4b48a118e0eec79fa0ef382e8ba4fb7f0725d6141bb21bc1dd52c56a2eb9c30ea46f9404c82f1485828e966bd1dd3238bf4f615a955fc7ae4b6c4f4242a67d5f362e00c76e79873b35f6d6408ef0192324b5783b80f8eb6e7e7450f602d2bb65e7cd0de73894c8c8a36f21362aa657471c9f443e4446320a60b1ef0fd5052429a093e2ee90477e34b2439fd40dc795ad9054eceb49114189d86d5514220660b24acaa864dd5b51884cb877a2a01b7a5b691d99caf720c3f3cdeea98d539e1809cbb886cf8699ebcb5818d2284969af5b8d427364b73d5e50297e1403cf95f4340da5a5b9f5c6f105bea9d7ef717bdbb5e60ba140ef2ebaa9d363befdfeb39b3df6db2ca991ad0e3e66b4af7e8117a76f5bbf4ce609bc8005b3e5ce0348bfb62b70a14428c215e87f3880815ddf06bb93d3a89bdf6baf586db14e6d9d1583ec07623e15bdf0c527cf1c577615f50fbe28380cb7b27fcfe9e8b5e4c254cdc5e6d8b3fbc6f083867437fa7fb62d2afc59377134c7e7abe4dc7ea7f1f6afd84e4ba64d208049e32077beba41682de59433c76668f40759b5d8376fbb30379ee6c47a17f56a51795bd76c44e5b49d909ef5e0fff06699f00b861cf58b99728854f95bf9c1ad8fabff3c4980b3c30692e3468a24134425d8ae8e3422a859eafc629151dbce708be2d3505e56f3bdf0532bcfcebd1ab63378669788dc5c972763d63564a562dcce87a0b8b2afeccae13b3d37b3b24de64c3afb491e0ced7baf26798c9d3fc619df002e1f4d71e71063b2e32742ebf4f9f785344e009ba42e0cab133f0392424e46b7452b38862cbafd20e3478250571abdc2da4b366fc9d8c65c6cf59e841da38c12ad847ad403ee38ed063e7bcabe6f2557b5ebc672a4a063a04b5777fea141387b2dd31b45b4d49a8114b5353f7020b7ad8dd3ba8a7caf6dde7a0c95e91450d2598fc024c08696ad44d553b999b656fb2c2aae19a19b2d6c80bfbd012bbff7e31499f29c2cc359f99f11c10ebed8397a3c5422ec9e4741e6ede312c1aeea5ff21414128b73b14805f88fa63c981ef0bb46d2d73a69c913658daeb2df58ddb087c0c7c7fa7c988859b818ab4c0dcfa446b06d770bea69cc70c8e7466213df112a827cbaef2fc2447d4874784507357ca4e4eda768096e949006587553c639aa64c1f993757476a2fa0e6bb42f6d96a15c481a1157ae22924bafc7e8b95934a4bce607f99133fbca5674c40712273b3af646bb5de3c1cbef2c2bfd479cb31627bb576e944d549ae51ce1491bf71c6c70fb459a33112ab2d2b8e2c23905be275ae77df60db0bf9b1bd1bdc095e536716bf2ad7d39ebd11f64793ddd66fa61b166cbc0670cc25d4693ff6ff220e55c915263e52d1a789e59cdf6a218778684fa73ec8988388c14e2762d61a762fe76154dd657727cc07aaa34b77a3914ae0f4ba8d43e223a15cdb9ebe4faa703386d4586d46a1308cc4b58c1452e09e47cebec2d0a49fdb96671111baba2b9ac9b276922e486da65a3fbac9e27245090f7fe252b1610e15e85e6332e0ac1a705308dc94c8f138d3b4d70eef0e5c6d6bf27313eca81fd96d17c16674b89bf37b5fe87ad2a5c79f534d39466e2087b621a156d7e31d176e3b953e7f59ab10532650dfe5ce4d321daf63c4d5c9917aabe49c8982f8991e592bf1043244409f95fbc66d81fa37c710429908517409abdb0f3489b97f946b1698abd113d711a04886310ff3e8fe0d23a76d823e0fd191b01c09e5ffeaa7a4231c3613988486a8f7301135901cf86ad46851b0ffff81d2c795ad1cbaec3b400b11105a24df28300e93f78d0af8cf668eefd6131bc5b2d58df66e9c6ee6d7d53b31db036d497edc0b2c5464b92edb96dfb86b2715e4bd207fd8fef3a05d05ca3fd8e6adc645d2e38963a85b1f01b562234ca17b72ff293a1997aea0e3c13d958590d3b7c476fd0cf5d463eec123d55f1636e97eb7578f88e7cd2e22adb5f7cda8d422cffc3f35becce9278e3407c3f414e1d3bf5790589366e3de0762adbce9161d4444b211255f9b3c63b7ec2009b79be7d0abd83bfcf023663eada70b056e69f6c8c49a9f3485dd28a8fa5dff0f1037b360c2bdbd151589eee0b3ef7059c3f0db10ae1a2bfbb80f3847d40e074ca464df14928c86197a16c83488a05032905754cc8fc569d37cae05f0c370db6acaafc56ca9a93982a4669ccaba6e3d184a19de4ce800bb643a360c14572aedb22974f0c966b859d91ad5d713b7ad99935794d2222570a3167733a532eda0b0eb17510bcb581e4995440101a00ee2e80c5f74faece679b372ba237bcd2556c75e3ac050d30c6f8b3fc66496e03eb2cb0bb826a2fda9a05f018981fa436cc18383fa4f7a80e200b141086d2154b5719519f81654d4cd69283b5bdbab5642858804dc6ad34577963e3180a71b8e01c3e8afa5e09b12e0588198a7acf95634f74759678f15a13b849499d59efffcb20e38453801e03870e30d9203528ec3b2bb43ea12389c24bc5056e26db1391134d5067324f6cea60d9d2ecfe578b63f5a35f04f6303e130788df793bf8a717c089cc5a1f33ba0fc04eb679ad49c1a1979ebfee1e05d8f54de91f9264187138dbbea085a394d11aaf5523a9b372924f2c061a25a00c1f1227d00ce32aa33b9d6bd3151145da7ab236d663a49a39c515b9c2b9d004acdb0f9c25ef911401cbed78b071268e6d7b7f5bb9bc91e908249a48bae418d34cd397b4d010c7ab9ae9d10b3dfceb05b69c2b28e6779829467587e0d6e3259456d05078b9b7ab75d75ff12a620089321ba75ba545dbe3e15a81838afefd1ecf319ae2efc82c65fc1ef4f4e007c3289d0562b9d9bf329799ae10374d1a7b2b0d45f9f622e6b61ec8d86f8332148eeecfdd97edcc3ac2dfdaa9ea4b3112a576d4fab53417f99ffe5f6e99452a71a9064f090c9f869fd5e12ab3d6663ecec324afb89543d8ea2d2c4b463ae3cf065c96a5f38a7610d7b1c514349d307d361d6023e762cc6da2a9d114ca1a0429bbefc75a01d81a71c99eb41d940753f533fb50baefe476dc085b14406100514179a9c0f59dc034b15ce6d6cf3cdc74aeaba41cfb38e3ea2f038a1e5972b5711e26d4aafe2e086cd97ad052b192e43eb18861ed6e2a27cf6e7d7f16e767020dc8acb6acfd1c7969ef0aa3504bffe75605b07aeb9c2e77ce9f5d832570a7adcd48f197ef7bcedbd4fef3a8fa26ecac67b20d373d0caa9d8fcc8bdc737e9a7e58a5dfc19a00aef6540b1f2776c9bffc17c185df0c46085fb9fceed22798a83f57e75d7bd612239192207567ecbce29f0e3902bc7fd3ae86f43870af6a4739b67117520ccb3b95763544ddb28588bb5df5226b14bf3a06daea87f8b96311b5ac4f3ca8bda0026c6be6803f4e68b4b4fe7485a830f303762240f16f3a3b8184ea995e46d67eef11394ddb8384bfc833493269a05844b76828a17ebb78191c0e35f685149f8c8beaa8115d929caf4da207d8d63dd4dadd43b2b337c5bc266cbc580ebafa5ff35d607fdb0e52de62ca68000dd466ebdcfd6f891e23754d89f8f4198a04e060daeedc8852f7ac9200c7edfc7a6c03e672a054758b4ab4756b481f42126caee86ac4c4891f1f88ffb0cc99c3c7a5fd0dc64d5a3da2b5687af4e5a6994df94c40ca69814be98ecf6e9b62d41c9b883aa8fd8ce9ab0a6b7aa54b56efe7e4b3a2b024657c96594d6727e91006d19e1ba3ff42e569856c74d33e992364f37ea2997f9d3e1c3117633a72c15f97a87968205abbe142946fd9598d05d56c87c4cf17f75f7ec8e6cad82f974bd6ef6ad4779a009007dca0bca1f6d9b8f36e695e41055e92acea7b1ab52dddb1fd76df564ef73aeadf9f71fad4916cda05d462f3004cfd5d51e9b9b1011e8e185c95cea8f72150f1f2f4ced27b128c9293053a2b15d21ce9f42d6834c4e9f0aa7cb200727afe8accc74180ec9d6082082669b9b08781035e1d1e504e06764c8fe4373e5bdd782fa4e7ef50ef426596654568a7275e40f9e3552438a5d0ade9ef1c8a4e0b2a7689a0d867038472080fd1796acb3ba3f647a022a7eae1297611f1ad15f82b69dfdee9241064523631377349d7ee925d8d36be0f0f2cab1ab90abd1e3e0663a09d77a652513a0295c854743d17d8d494ec0c65a1c4c7abaa5e1d7cf76f3e5ad9979c00eb944c3b98b6affbdd9251aa50fb11bc622e8388e14d9256c10f6ab91bb5951f764063a646e19031b2b121bc9aa28fecd9b527eac76eb172028650276fdfa92a7bbd47eaa7323e3e43da0fb179c9cc1c8ec27d7b65a9c1f9453bb94ddbfd21498372c0b0c39103491876e531f65811750abb4be0c2e70c120f986cd26af745a615c996a0a3e7257abaee69e61837a61fd40a5ac4e60ed8e6ea04336021b55d66b92990614e1aedfab0a86475e74fd341741572cdda086e9d5de7d49c0a20b1b4f7fa789ccc14a3f1820e9d896b86e00473465aa3a5bb165ef1aa18302c1e89b658a514f826bb8f87b987dec8adc5148f5804dcef4f1118512cb3c7c48f982c9463902d1e63f9f9e2dc7aeddab4f5b90babb6be59e1f1bb9f996ba9ff3c77e377a1248ab58bb5282d7351936888fc159ff5c6c98862424870bd3a858a3aa1f68798c9f566a7d7658e0773981a32c47074bc9bc525daee07eb2289250c9100adebd2e834d9bd46f82d1f48c497b93314b18b9d7ad752dc40394fbe4f2e4a7b4fccd7e710b5d8ec29334338df882533487fe734b047d0f43b81cc43cc986cf926512d3051a3fdb040c8fbabb0947fab53065ac82e1d5f1e3fec227e64f1ff6478a35e29bf4a367a8413d0090064ce827e6d6bc1bd00044296a2d8d9dee20ca38ee9f23c21538a323e3d49ba979f1aa211dda3872598c94886ca76ba0412999eb04c6fd0416502c1b66def263dee6bf2547d88822e8eb518588d848b9c2ab13d26f45f4ce529a40d34cc48b6baf9ca5a8e76a41b9f8ad09b54128bb36fd159683708491ad6467aff0082ded0d5673ec209ef7fb8423323b7c182139a45b09b072cb0b6a1dc658c7f61b639de57e1d0120b119fc3dd32b555e904a2a8e66e7e024d162d49be2ee076a191df46090e8732dd038ea2392e8f5e12c1c24519b40a41e25f367a464880ca063a5a72b0976b0bc7eed4bf1ed0b7b885e0fad9a72a48ac33b6599c3a5c7465d9d932c81723848310faf78054c0374d8a8ad2cc59773f2c88411f176311c22d6198edb2055bdb83024e814fa2a5170368e7d386f544f8a728280f548910740ce89d159641e677f4e313fa93d1285dc4691e8470433879065c94b2b9740192e9b41031de946e60bcfc70e8b3a9f01377d3586ef00dfccc326cad8eafeb8a22ab0e1acaf1c6989fc5958ed519f2a64004efbc176f1937f912a09a2d9fb8562e3c3ee367379f0e3bf5f695482c74f1ed52057309563092068d3f8417efa10bbd838c929018e7783c3666acca54f77a214b5da4cc0b1ab5fd8d9392d2096f52d868404fcefc657dab6f2ffbe2f942e8e4d63e78e6f89f47e5f9e2ede853ead286d3a144a74be2c68f8897ab18831ee43edbf217e18387f1c7b875bce137d934cfacf896a56d26fbf068e7e4f45b53163843bfa84516995aaab49428431b051fbbdb8d7050cbf9c3d6f966cdffe7a925d9f4ee5398189e2a96d487599869373c5349a8f82fcb23c64a225e8fc090e8ba2ad7c64264f15f0b94009576678835339edc9156cad66bad53cb1551bfbed77c31d4919a3008a1a3aa2007a739e0c7aba47d8fb3a9559a20fadcd43c85da3f14f8d4958685c72f9ae31d251695d9b74c6e15ec3755ae78c6463ee378994ae82987bd1c2cea95d09944dd37e803dbccbf038aee09554bcd483fd78a2c83789a64e4796cb4e7da4b48d74985480b4ecdac6cc6de523192614ded901181ccca1d6d19eecd4704ff694ea349575c369a83baafaf043972edfc7e5952bf9efbaa38eb2e06890dca6af254b0c6f44c0b27b692d62fa7e79fc365838a03deab987fb58629a7e72dc084ae0107a6a541135e2ddce82d1083407b6503888cb4d22cb15ae714bb2ecf6fb564feafd3b263d4a5b23fee908836dd7fc4a75cd68a393ea8f0b6f629a71d5d66def2b03363d9d8650b63ef425528ff364a160dc8a70856cb3e9ad8d99a3c14fde28613b0ffcca70701f1f32abf802d08bef8a3495568fc840e3cc1b34e571ce43962df31d063c7f15c9103301067f05deaf72743da81b93b2644b99f0d94fb81ab2d1c9d1cc7c28de4ea253c8e04cf9d94b9a09d7f7a14564f59c9851d1b3b3eff8fd2de2c1f204261a563368380523085e6163f8c7b963e5123f74dc7156382ff320adb489467779a69c5063502017f8527911149aec55bf44c4ddf53aafcb471bbcc7cb84e219658df5295edb365f05c241afafd392c150079d32309018d3e1ed51ea9c374d50663af12c9f2ba05ecd184b8e5f24450d53c54900231439e87ce260a4ab22e0c2f83800d8b8e4069dcadef74b76ef8bb0171858c621297b8f748569747cda64d7980fa4cc4076d1a26b80f5559ba7cf40367b4cf2df52662f6560ecd885c01204c21c6d65aa6689f34ba8963b31ef98341e6886249221824 +MD = 1b759ff129719524de78cdf9bf814d78aba88a51cdd2861ef2b1c7fc3b5e9c73059a5ec8180018d6d4e770b6db1327d5 + +Len = 100816 +Msg = ba47d5b9d9c11ff12735ed4c040f49bc6deab2d27e04c0d335ef0b0d798a486b5b30b5489b2fb8816e7cc2ce7ea57a523306187031400ee122e7ee03b57b8874e69a52e081730e17e17ea663fe6b5b18a7581e6c0b463e897ece44e17a101cc2e4ed752a917669dc09a361b38b49333751468e6e14fe98f5d30cd54ed1314b7cdd90e4cdd51e13f86d54ba672d274cd6b9392f1d5551644aa80969f3c0c65ecb57ed68725554539296f77b27ecedec1e689ac822d525e9b3862cc87852b79dd6dc6bc8c1180170d20af66a9ad1835c37e5cf22249d647056f4dfb9848cec50c6f372ce61260bb3e153b75069e3d1e448b84205ccb3f4415b7a8a06bf784ebfc2256a40fb875c64e7f9a4f43c2bbfcb796a5938c221bfa4eba09375d31dc332f3f8bbe73644dacb0b822320b9af365bf4827e85adefabe12eef63cf658334f080f6ce8bbb636f2f76789e9a8b791cdade8818b23623a23f4bee62db20b38a4292a709f431ef02da50627c2b58915b9162048f8804c78b076a26f863a9b4ab705192d5e941ed7a12c0c9259bc9fdd9c8a57f4acfc0e24d82b51d8e2dab8e81c2e43f9b339367c120ee3401b285c780c7d281b34f117dd2f5525d8a03cc4af37f7436c19ace64be4c032b783835f736d50f9031cfa09f01ab696e56abb4efe8f12800b1e69bed59dd2736f2f48093e53b84362c191450c2eb23d658ed0c854a5e2924d1dfa1097a1d81ded7af0fa574425bfa0cf31698fdfca71ffa937c15000f9e2a8b4d89c009523aaa8f318934cb2fb9643a264e809a271ed0a363aba5f24cb09b46f7fa1aeec5792382429749d24dc8fd1c7a630f82b4b072ba274240085d87fd69a69d2011be67cf18aae1eb71e3b04c1bb6fe4e9beb848ca9a5e8eb2a894adb5e221ad95b842c38ba300e22903899daa0a4c643ce13c3a6d7a646b0401922ba8c33184eb261efe6ce9ec6f61795aa2d110a64f804769449acf10496325536245ba13f85009bd860bebab370ee420bcfd7b17f75235a20fb9050c9a5e885afa0333338882b7b112ef04d7b97fd87e5485b61c0c014088f47eb893de64af1b4b77cb2ab5f1c49bfd8ce1ec6742dac601e04e1cee3c0c808b22565096041e16eef9ee73f10bc4d0de6bef73d0d64f8a3db39fb53e60ee2b3c6a6acd51cb39c04d301979da5f2cf21e12a9e876c8bb4d7066475f4cfe59db90ad72648208a6b9fe80e8d6d25a516235179dc4d998b292328ec185ba82f4242061e9a0b76ac9667b82b905699bf6b3cbc1379379a4a9cb0c839ac3079d3197543e4d2c626036583cac1670008271693ac603dec79b258a56eb3f91a48b96a7b4892942036751f1ca639db147ac55f52a8c8f0153eaaa42ba3c2c6c21fc97d7c9d8ea9c1b0ec0e59d5f9b43af8818d9e39b35959ef19c76aedceddd005eb999fcb42d9529b4f7863de6bba198843eaa2e589416196e90a89d73f04eb0307080c5914eb7b0086a66149f6b45a35f3bc8337b270d53a01b5b1e67d04bb1f0510eccf6ea9e3e678e07c9f016ca404794c6cb496ae5ce4491009a4f0a5e963cdfa67b6b7d933550f6edc66f6a8a0ffbde283e69dc39e9ba962ba9800ae1dd7470ea495574412563297a8293c31f62da8c6f0543076446709f5eb4a16e9fe825c93ccf4b6b229efc9a4096d3bcf4d96203fdc86b590f650510fc543981c356cf2d3065b3ceb202abddd26bc5b494d430e966f0596da5b5f69f9700af0106a9df2147b5351b69e0ff48a289d04699f3b5b14d05839191c9b39fb1327848d441e459f52635ddc4ba557f336999ef5eb86edfe28070818e00daa5cd623be5b6bf6d1bcb414c826d0f4ce60793791b6d82dae9f9e9b699e50bba266e2850541882d80b2c9edfa59d504421818ff45740f37853e5b9bc67214af0a5f5fd5c00843cc39cbb8765b4001de99643c7923f738ac5922868f865dd3f1cb90759c597843d9e34daa3754a2fd89bd8c0d2e9106fa95149448ff11273587cb414a603759315f6881c6b94b46700d94d8b2a5f86bfdf99ddcc974cf98e47bf4ba09acc273b463afaf3583a9f50373088f5466c1eceae0dc423076287785d52d42d805628e75efa01f1e1dd7775ec200fb1afa52526952b90ea68b848ec39b5d22dff57f711b0a2318aa103b94280263622de8156421581c87523d4ba343d76ea3480381e54fbd20e401e33f140a3b1b0db4b870ecbbf9edf65d13e57fb090470b38b8d0b2b90f7fc94a1e4abeab760f44d8f3cdb0de3e14a3ee95baeab0cfd0a2d99ad4a000082810ae4ac35bb4bb274fc120937a332d79d62e4c32aceb9bf1b25333f676cdb0040054ee14b3cc104b7596c72a1062d105d744bfb68c0bfc9281ce0b9cfec710f9e36492a48e9c7f63ff8070fa3a122f9eed5977ac53b5fa9b5871a830fe972ff0ff08bedbb4cb0f5735a6a46bc2eb512d6295fa7ec9939ef47f6494183fe415d29e66fb21ed02c80f5f31eae56f973e9b7c1fd292b64def863ed057be8957cb8506a6d0de00e9b374c548cbd008bbfece84208652e28bf537dddd7788a49858f37ff1c67ab627d76caf14ce9456029ab0c1bf9f2515f4b9f0a3b27ee0574ec402536f645dd7653de064bc7b99211119287d25a4721630429ada78f42d6b21189cc84732f02b4aebb92d695a473093831dfe791da3aee8991bc8565fd6a9bb5ba828a2b899797febdd5243f4074d2ee0798ee4931fa5c4c45db5754945d6c1950eb9a77fc18bab45361b71d03f3e8a3923738e8d4ec36bcd46ebfc39e1bddeceb6c47f0ed12777ffabcf1c7659cc509503f59e9398cf86bbc0b114b81225b80f889051ed2f168b2323b86b6fbbbf28fd015e3d2d6593bc97b24ee54d40d5f75f6c6746a5451f8eb8881c8742cfdfb97805f492e41dd5b668030b9680d39644c74a8f86bd7a0c29c7c1449777fbf4ac0ef701c63f285e1b369d3050d93330474e0a5138bd35a40357b678c497a9c5a8c7bfcb00c7eef6940a67053ae1c96ba7fc94f5842de0aec5704f003629401b56ac459b6902d864c9eb49d17d1ffb0f0cd9d0c39396e2f3161a742314b528be5ec472b8297a4c7261e12bde401b32e320eea6038d80a33b9f5e0d2a86c3c87667182c6c67b7b3e605f4f572ac5ed7b08842fffc9a718b4d0743025db6dc8a0b19ae5cfd4b3f76895c2d8fd6e96f503eefddc1f7e0f302f3f7d23b04c987d5441e90ebb4fe9cfb230f93e2521ed60755fbc8d63c8a8d70f31712a067ea4d12ea1bc6bfd9a856ac7cc52ed42d731c62bd540a2413bec83d160e0b1ace3fb5a7c5bb56c2b470f3f05b27074eb111c8cb3da3ab95c4a42ad12485c58f80f047fd9da34ada8c7ffd2e8adc2539242062a99f90b41096663d94e52349e9c6268b7c3a7ea9f1abfdfcd0cf8d917bcfc77364a9c22c7cd32989ef21919e0ee8090a8c64f27cee5711763df3e251fefa2f826424e21bc3c11895489f76cce82ec04b96e2a7cab9d9e3f5ddbe826fa8ed801710d7978acca858e908287bdc5ddf74d6007d479b3a799c0018f716f263efe1bad28c8a7f7fd2140d988448d557454c3434fd77f8597e6420566845e316497af411096305c486728a5e7b84bfbda671ec982ae1e7fe3262dbffd7b849a944744c3617c921830b9ae6c4d4d7a2774b0a8696cb2d7311dbbfbc7b0d172c0326f74ba77e64dda4aab5ac3159eb876c7c408b95aa03a17ac2a24832d209950e372a77cd06dd400fabeb610dd0657586813b82fd8d097b212f34098ded368ab1c1365b1077dc52ad56638fbf02f075aca122f3353dea08ee699d86f2284716d40a437cd998081c64f246bdb1b7328ec6251d66a7824c50caba0447ca49e43e5f5b78648e320aa51dc9bb744ab7d3c8bd555664ba23d85c9b6891d57e19b40c3bfcfd9a990d89f6c121eb3bf2c97c2b7779f274d6ea35334bbc6eb7746060874e35fba660f12e153643fe9a11b7d5c0ddd91c1f639d0bddc0fec07516e68fb7814e9a114da6a10c66771b190f47858ed7bdfaecc9050463e476b298cb72eaa5bd8e0161c6f389e337056a415542359d4e6cb46371eac6cc9d6c69a7face1958e83f592135a28fa093341499496f8cf6282f730cc114f920d527102a0dc0c3d8eba7c9d601795a4d614d41aa549833a04f4e5f70224a466873f0cda96b11902eaf0e7a0a924193f1899818fadf83d1a3a9119f16fd5655ab5f0fc8ad7c892a611bbe934450c1e195f25dc21350f90f0820bf5c86b8fecdf181cc2bbda8ef367916fe3d0da3c3ed4086e4677d10c295d69ba2bd49bd0b5642c16e1b62570d5f7f8a15a0ecf30d5efa2c742dbe88a60a150100ebe672449aa7073fc223f1a94a7a5e4ce369a869ddcbcc573f601f6d16ce3c220de541733e273b854888de8ca2727aeb2f0c2a9d12bc4fd3c3eb3cde620833504ccf915eedcb4589d519867e0d70c63aab5ee171a4d49b31e2e549c396cbced2d02bc9ce4d9a0d938f5f5246337a2a8080e636af3c1c99b9c3d8ade25a1ff5efc081538b069c7beba1e1a8aebe9b8e07d52c8f1d819a31b28f4bd003540d90f0445a965dc1d978d83127f17c53d8da15d3b955851c584c666dc71af02f9c871d863cfa0c265aeaa368ba96799c3bf6f3a114f1adb45ed01b86d3f37091d5c2beabb2e75fdc26bb956d21fd6d41cbcae969c5c95df2b2a71a01f7c34a23be2a1bde41c5208c45d1f469e49020ea903e3e5055475f7e5eb7ab07bbf2478c62a57c4573fc15ddc01608838cb6593e933b3c804bd27aff6aea15c0a8e82f74c61c2808cff407789e701be4a0d6e2e5dba729212fd1751ddc26a253450dca85f4786850dd16bd04e7c973b3a85a8188706c4e5a8aae1981be5598e91acadf65f39f844526c8012aa30859192da9ffcf5b70f354e3d02ed3175e40a9b08538bccb7bc40e31739992db15153eb62b2361a39d6037c29f7cbaf029e2bc8ea79b3385f36fd486804ee397d8ef49cb48b7e750d9dc2aaf83cadf509ec6493d99d17127eecfbeae55e8c5dd392f62f46881086b0eb05533e4e1ea3fa5337943c2a21fbc562af5305c2fe2b7201cb3baf34b6dfb2325e1d52a8a82c62673742a89d5e54912c9a094fcebdf2c75ff61a451dbbd080081f61ebd8b4feb09cc617958346ad80af4e8639ce367442020973beaf9a19b8d0cbb9506acfbb8368768b99685577026f3f524a6e0200809c77b05276fc1bab21059c26bb72b3595ebb371aa91531a4e0dee5f81aab27f183c358c6e04c47057d3f82d557289690f426729fe2007dd6a8bfb9d9509c6b236c6ee58287f53c2649ebe5f2da7bd5c8ad2af6af9fa1bc162b546644ac504a749afceefbea915bac1b9d6df591c6f16efe5b1ba03e636ce1ed3f43f08a513683a3dfcdb964ab35f566c6635439a46a027c195a484ad000d862d30b337729cfdf2b9a1a41a2ad4b90bff97ea51e8ea0119ae84ade4172385830b204a3ff4466c586be4d0b11021d1c9b99085edd00441acf6a65f8cec443efbb4ec8b88f3babf539aeee9c2c541ae76e47a8e7e183c69cae02241e2f40e41d871bdfe7a379ffecd8fe677b712dd58fcc67c8d6c89397f5ab320db4ff72695008abb2c7e879e2fad93f500f7bd9dd841a7bf0b1eeba48e43b8cab63cbc37425d470d9cfaad5f5cdbec430eea8e28352fd16a90fe06249b6f3746590f0ce751d5efdcd6586f898c3ee2f728f84f2777ad8ba6a273a162b0c577bc4c32afdec952cc4f63fe96c4c8c0bf3ad789c641a7a21c9bcbe58605d42dc255180b6dc5b2bb248fca56eaba1748c933a105bc1fccf8cd7092bc7bb6108f5e3844040e4415f840c393c6321081bf4a0b11d4fa69ee96e64e7f61491d6bd3948f58835902f9f0681447b838710e0b88e9ac5e45c61564af5c1b3ab8e1ede2ac7fddf217a8668de4aa6d93c283c715ccf6fc0c68de4a4a6fc3edb08fab9ea2ee325ab810dd64b6fbac8dbf99eeb3c55d598844295a943070aa7e2c982287fca2d0573d0c4afc53f64230a4855bda04853bd86f52e2fcfef83a541499efafd80f805ce9d397354d1d96ddaa4d7245b88ac475f6a91d899c509af9d15bb91e1f7e6bf2242c6b188ab8cd1c39bbdafbcab51be63ff7b443f2c0f4f5cca629ddb737b9a056e16eabf30f1275b9953c04234e69b3b4034e32e98f6dce6c41e7f38a8291efe7b849f8706a8b7192a43f69a99dd565bc97945f67072f0e18f69a687fa71b663f7aa407ea1060972cb08c3146e98883be792ed1556e623c3a8bea457ded818dc6ef26de474aba6fef81ca64e17caa952472c3909c0d2de139c981916e9ee8ece5de78877160c18244dea20b629c6223554afba5222cb9847d78045439007a0c0210420a4e9a9c579190bc2db092d8b6b9c98017d1132ead6e601e96c65c5f74874e2b6dc83f74773f60bfd2b5a635d5b8b7f7ee9009b3e574487560fdf9bfacda5edbbac6997068b7135402581fa109badb0b33465770b2f7fab1b9c621c13d6508fbf92feeb9b4607422c6814743d927fe62eddd468e9f5f3c7baa091a8dae8e163330ed8776e2a14ad225186444cd67e8a4243c1c353114d77b3aae2d4c87bf4e2a69e7acd07be45c0b2806bfcb6de2617ae04b218cf27e9358719da226515f7a89ab05a5ef06907376d631a0014201318c2af29fbc690537ba57bec14292d660f7ff2fb9fa0b0d57ba37824e0ed32a1f810919dcec1e128d4bf5f9d1c9d58bc91d6b4d311913c2d08053e11319a8c6f50186a821459a0b5bb052371ce29fe87ca2fa475576a519a6703337354a4a3e79b6a887b6ef645a6a94765ee8b67a544330b1056d364979a031de6afdca40f87445779fe3110465829d6a587e6ded37e46c9a70c184874a886c5c64b3c1125ead59fbd6f0d403966a73350b262e81fa2800bc6e9986e8f524c8b60b9f5749d7ee983d15245fe854ecbfdf612821bc03d7941fe83c64f3e03deef34909b26ccafdaa4445c9db3b06ce297141cb6f29bbb9cfccc7f34731749a851b0538fd03a1a338184c256f8516d958f29258404d8a955acaf10657281905363727755e97c3a8eac21480444cebd5f56a3e17bbb2d935dc2150bdbb623844a94d9608fdaf98d467498324811bed8aa7e22c5009df0e5ffedacb5f9c67372085683c3903d388ef58b583584f7784c01760444b515c93dc68fc493621bd8061738d0050988bfbc0640ffb63d6ea183eedef6e4fbcb2ce74c18fb48873ee79cf1ac6ca94e3605910345ed28e3dfb11cdd09492a6726829eeb29cf39eb9828c31231a824e0dd90aa76faaf221ad33d735685998969a060a14e229eec01cff2051359211c63d7f764dbefb42644d18d23e5e4568685d14dbacfa418d36c4ef9cf5f9345d449cd806cac95aaa9e46346baf5a60eb64e21b037fa1e9b847d8d96ae6160a4f10526e20e537ce1219bf0f085203b307d152a3ea55802b573c8046f1ec351ccf7186c92e67b160621be12f13ed0245a5f9d432f8f63e0e525de6bd99cefe70c6b1616f9619de1782edd31ef249fe1fae2291529529849a91f22fc6ca5618101a160aeac2c067fb5bd7be640f2ea0470895b08a29b7fad8fc4386e9ec4a2c04b5e9a9c21827f314d320ca87d06490c79d9a5a621c6947cf7c9811af6773e1527d71687d02152b6bd3121e119fb275a75378b763d6051488f738f89fa499e0045cf86da5e651b60744f3e38ae3e1f8ed1479ee14c0530809566c64420984d12239c4e0c12ea43ef00c0c407803b9c0a3c7e328fe401dcc5c827c7d1efffb5ab2fb1eea5a41d6682f15a55e65690276d054ff8ca7bf29078962b06abdefc826be8c4eb3f787afdecb450665d87c84c17da2154399a6406296dd4f54a73fb1db4dd39c622068f748cc86767c5aa4074ab19b6d745c5b2a858ddda36262597f2268b8501f5e4c754d3bbf3fcb724952b874264e487648af177549f2bd78a3faa21623b114379bf2961fd8a77ba8d32eb4ce2b02e771d397c15708858c7187e9045ffc086635bd36cb80b8f7b484ab63e6c893cf78d566a92a3a04a4f8d36b15ef4b2b9d40e01b09936649769d8f37b9f56944fe232868aefa2624972928b9470ce399b8c8bf1b3396da726e5f50e0f88aba27d612f4416fdb2450a546f7d845032e2ca1265a267b7de31b25214f0ee74cc124a16ac058b1733a701777c930d77b34cd9f8339a5aaf08a2ce40c152a4fe48824a55615173f6a736d35e62529c71cfe65fc07e5fe8896d68ef348299af8f9170d2cfc7ae5e069d42d47b8932bdc8f93dafed9e59bdd18cf279afc13c8aa3474c97c84772a5b18679995189b9edd7cfc16ee22c1e2711d7de021515c1a2d3da93edd17944f791e3399672cc6ea938a3fff1409023d0c4ee9a2cf6e8bfa48bbbe5699dd5aba02244016041c9b77c662667fb7b72f1375531a53ee7b28cfc556b9f7f7fd50d4bed197f6b511a3ae3dac787d2053d0cb75d318dcc4a2bc016ab7a40b3e9fff0574ce3f23c23364f5c20f7ee098066dcfd477ec269a09cef800868679b7ededb6eec2408373a968b51b337f9265f88f865ae69d18b7d8e61b4e6a6829aa0ca44df256a3000f9c375711c1837acf50bd58cec8339965388cd41e0c51035e27ac3449326f81e03357416c619380203780adfac7b793ea51498b361449ef1d648bd1bbfdaced2c9752ddf4bab58c9ed45feda48930ed8f4aa4a65f2959d52debcb8e0f5f622e3cefb0927175f3869350e28095b6a68f9c4b268e61f3879dd7e5f3d20f029a2b5864f7c7aa39555645d291cf95f72161597e55ab041cdd2f637a8c04818b5cccc81eb1e668afe2e5fd83f5406cf4aa4a0d09bc651049637319d11d8e2ea5aef9d3446556737fa219028a953ce15448350214e0254c24205241132ed7def69a9ac2fe9c7f93509ddb9e10f92cbdbf04077ec84b5181551cb22267484758262797dd76ddc990cadc14173daa76c8dfe5a9ca4c845377845f7d05f6f24666de5dd86cd1b09c319666aab6382f84ca59f3032ec91391f658f29932e8b43ccec64546b73a9d603f5c4387c32a10bc8bd836fdf1678175c679dcf0f16416915985e6c706d72d7d83c37c91863ad688d202b7805d4d5465ae9025688a92a1adcfc44944a0d0e75bc27418b24691084f697f7d72b8a417cb7845d6eb449bdcf9f82a74a6ce4e5462c7171fd14d562e7816f890bd4b934f0eea3ff56069a74fdb9c6071d3d879fafb59539ad5e1b2d16da215f9475e438696cd278dae3fdd83bc820d48b50678638c3fd090a84bcd7895d57dbffa39dc43cbe8a4a3bf0f66ff0573daff339f74177f42370931d3ceab5876d9eabc23850f15055f417a206a4b1c376ea034ed949c3a2a300d58c0def21e4fd08377666671dceaff6ec7bc10f06b967332a236017c27bf62a5055c24d64f260b901248a8f188602d338e29807558588ebe64c3e23facc876d820edc9de53c4311c75127317812f9197b7b0e3624d44694b62dc606b330f13af91bcf49393f1eb2c880bee6c2f1fd2a22b996140b123ace184c9a38a235ae2304011ce7b7574e1ca337d4277fbf8995cd02c2196ecbdff88b2d1d223e4728b6516347f206217bafd5eae96c04b818dce8fb14cec66da0849d43d15bfde1fb556f96c2e0ac3a01fcef1e713d0888357ff516f09cb8642722bd25596e57928080ad20203bffed8b743d470e12e1bc79ef7fcaf81b9b6bce33794617a1d1d572e898a3e27c97d872b67ef9127626a120bbf79b9db405e12037402a9ecf03272ccdb0768c2b0a675223f2a920ef5df2f465eb1d540e8e40a7cea057512e420428d0933c8fbfae36945d56ebabd6ee1e4f6dc8b4bd838b16df3a1830c14834f8f1619f5a6fb319b2d3c30a1535c55d7fbc342ee62cab82d0213a265b71b55272112163449eadc3587ae58ada315332b3a5797c4633ff0c09381f494be4fe111bf2705dafaef841b40435678f30e8f446a57e3f4965e69d3e6e89ff769d7af7333fdf0ce0132b0b420a431ec8a6ff18a536e2e664350aaccc5eeac75ffdb47b6433ddef8a6dce868ee79f1f0b261e165bc428102b23c3b15f63b22f8ca853243b88fd8403115b59f74699f6bb10ce83d6e7be3b02b4ba5144178096710fbf781599ae58ee9049dc1781d4147d0978d7a32c25d58f5a56f33704d69a91a651ed7f0070dca17d22a36c33de26b572a5984cebff6e2597121d949614ba830ec2faf437d58dc03a6e4671d7087bf8eefd3c40a19b6369fd8446d965db64b9ab8b3701ca5cfacf5a952ba4d5e3a2bbc0b83a0b078a53c0f015f591de8b37a9ff03281412779233503fc981db002972ba9f1818686ccddf014fa04a7ab491d88bc324c7aaa5f270adb6a6a530ee8eb21efa6d056e832ff8c3b9dd6fb4e801d9d453d3891d687a1be592596b81ff20fe70529f3e649df8b299cd137e378606026b3daad4c55fb7a97a7b486148c2aebc5140254fe4fdc6a105f1d8f25d1f2cf6b2e921375ccc398deea9fa02ffc98680244ba5968a2308289ad0a468a023d52b4ddebd3d2e6e5e5da4d6f4ed018436ce8bcd86cebebe3bddbae1fc4dab349d248e86f532c496b48d5f5abf7c18833e0bda5e4f44ed2fe025089e472dd8b1f357078a6fc4a9d5ca8150ddb02c8f370adca2666595afe88382e67e1b65a33c66574b51736f68bc1efe3bb87d9ae0203b95768e702d7188949be6f9ff91b5346489cc64a6af6baa104872738e33a5cf3eeac93ef598dc70a1c48caa5a4e692a8c82fd3c7fe13d404cf497b758836a9483310ce04c543b41199149f7b1d8498f3cc7706175c157ef33871dcc73068930a6fcd41b0aec387a9a86917aacebd0e2f3bba85c1eac46274274674b5439ac0428c29157a7cd3e7d731915ab91d589c65ff41784d12e8289284116bc72992d8f8716d72ea983c7ca51cd28f30741fe99cff5408433b487852371ae9854b19843206e07f8968c5ef1a5175de983ad89edc233b5c2cccadf8be28a915780ff66cfa33cc65de5538e83eb9c17077d74c622d533d9e902fdf53dd40061727def33757e0774b72c85c0e1a3a006d58b343de9877a3f3f5cba62fb76579181a21d68d52f52a5acb27f80ab5bd78fdc03685ba2477b685e508ca3555804940da3e6818f15a2dba73dbd583182b734639c8d99dda3bbb7ce74e120cbe7abfb6ee9f717d3ef8c892f24dbb22496a37734ad1082fc0acfd008405475cfa3923a3deaab96741b5430acee4718f52640caa7cb9db19e1b0c337429531cf12a7bd2e33c9077c017ae54c9107c1713aff3c1355e817034230544cac67980b0dabd480746324648630f87dc22071710a250ed85fc68794ed15f96547e144b8f32cb1c029dfd9c8d8bdc2c8ea964a36c9bdc91e22bcf275e945faab9d6cfd7fcd149d17dba7ec50000b8c5390d114697fafb61025301f4e3eaa9f4535718a08a24adead112225a305009d463c3997b135e31dd3f08bd7c6f52b305b9756b4fa7ab6bca953b84e6aef863fca77369ab7f24046920b36e28514aff4174c8543fd5d40813329d12d4cc684b807c730e722beb07873ff970834a620349fdb64ffbb54d073751cd58cf293e15124b78f449ba11bfc9e5218117bb065381bcc5dafd9664edc94b32c31035e875249ccbb7acaa4671b3c8f20c4013c6648b4a8d61d029ca202bb773fe4282d5d03a0901c5156ce7d1a753b16ea6f510bac91f5390fdcfcb42e10ee746f090a4bab4e8a1a90e828454470e0644b6cf83cabdc3eed4e0f916ca7bba234994dfc39947e421e0127b8a7e0560571afa138e18eba085aa24460b3b7e51be8299d0c0f0456418e6abc888c354e33a5deb519e29e55dde8d223736fa4b6dff6e8a040b544fe0ed4944ea0da8c81f1689f51a32720d544ffa853d18ab75578c89effa2149c9f31564786067b2d17c722bc1ddf985f62c607ea7d82ea38eb6ec412613a125361337e4a0cc45560373d3bfbc0d41ea222ea6861488f796f9f47540e6f0e98b36b9bb36787e2526d09dc1b25e38a9f3040388ad55dff1da39a8ddf58d1298f02e6f15c649f66599bb62b2b022d0a0452e238d60e63dac01e03c7cdb92e90dd89f9bee30afd5a513466b3d159475b36503173b2d303284926037e85f92e4d6c90cd88af2149c5247e40fa76f3d8851c72547087ede5f2a004c23971e07a66225f89da28712ab0b9c26d8a839989919d0073b7be25b040ad006780f836bae6e93d5639b6c14922f84715eb5e110286a341b8d1bd410c1858611bdb82c295d2a8745c2fc1db4e23c9575ea37123ea6c157e4945ee09a384897105d3774db434474ac243b185e0bb1438733c2399ea4cdaff4e9bb8471a8b28764eef409fbf13ad08b1feee88a7f3c1337a3edb3aa92ddc0cf05c82c11c351db91db843805d78c4f550e6e0ac4dd2b8909c2f03cdd01702ed560fb6404f8b50829bb5e9b8366a735bc885f0b87761e2970099021b061234e9aa3cbb8c5b94a919ef6e9a0ef3f1a28040638476cfa72590cf0340ecf4275a49116bf96de95911c5436bbf4c3c1539ade10606acfdac6ac230f62507415d5d56b525d8aba1e06ecfbc35be38b8df212ad3f8dc23a9789a764cf9193696bd2355bef1c00d2a33aa7f8453019b1056403f3dc170a37a149bf44a94843f9b4d95915458195d2d5aab1dc34dee3cec837f3447e728f418875784534fceebf7179b519de14b61515b5bf1a0acefe5f26cc6501bf46edd2cd9b46e8fb35f0253231edcc414bee23f40a04344f66b5ccd1bfeddde70a9275e129cf925479f4c5677047bef79daa79e11645ad7b6ca6a23980d21bbe1409a553bf66e3e93f791a91d37764799087a17d48e7f807173d79de9dd65d8d19dfeba5caa150120cd98f31d9d15f3fbae21529306fa67b1d06be21855f05dc7271b347b9f3697758a2add7d20a01b273665f655b413b5fd48ee9b2d5c0c734c46b96ca2bf19271b970f0f47a75ee9a6060eab23801292de43276f2edcff42e7629f09d8f106da985a0f3083199883ff88e41b04523e25db29df0725bc12f120e396b4261d44d8763df1e837609611ba22afec0012e0977c63de0a19e48da87f326615922b1c483ca77fe16d63a0bc603e36c61fa8400f4957ec21133bb8918db5d7d32704d65273007fc02c0afeab784342526afca6b6cb6ed1f41aabdad1d1d5b097ea8eba20a2afba307d3df7088a999b37e8f65ab48910542a361c3d93d3fabb08e5b20fd7511ef8d766e4d4f81ea8091ea17fa3300ba63f6b6f7427fd1c8dbecf1f591fa209b4015df2e7dea5bdd754af9e7dcb52da965861ce9ce13733f48293a06930a750d99c6b262e5a37ee904391e6da18447d4a68b25a7cb36aa099cffd71cc8b0eb1f593a90ca293d63a3b9f6d817cd32b7c2836061cfce4beece26db599687800b170acbeab29d0a8283e30ea784d4332609a8c061a05be5a9e39236220273ea5dab3b0530bac58d84002beb1d233b27eb00730595e7d87673e05baac0fef2724b324660f3514748c0aef11699718663af4d7eba8f04e880c55aefb3d6daa79a5c42c989b30476ced0f6ef0bbd0e3a88cb571859bd65e09726a9cabba423f7d5296340c9e042f8822d6e5254f847cc09c793fc6d91a9752c0053695ce96967b51b0a28bc1bab31053e7bd76ccbbcbf693cba8760bc4dfaa1faee6801f7297bbca9adfddac59ba4baacb5facdb7db7929930145cd8da205bb7ee143355dd2a84e6dd54ca06e92e824c09318f23d32adbd532eb41e96641abaf4c267719e03720cc00681a7773f6fd64299de64dc40c1a705896ede56f2ae3305185141382a6d5a68b8294a9fdfa0418b40a7b00594398922a7b2875fec34a618399d2eacb5fec99070c02419222df9031e014e599b89a613103ba411af42a6b6dca7946c34aaccffb6d2aea3756d5f528867aa38c536b08f4966af0cba5c9759481d0d173505f70ef0dd44af67e2f6f216675e33afd52adfc9d012b19be71a88224a030e2574ba36b54ca09d6823625a5e7cc4dac9c9679cf7e48990d27682cbe1db10e1848ba91f8aad3d0e04a2f403b714988e9198093f7a304e3aec8f628d0d2cb111e0cf2621d77b6471abe65e76c6cb23df95d5823fc7200b0058965c441adb6e1fb893c3d63233c158ec71f43bf40d013e54f6653645503a91853fb2a97143927b7a9df4a51162de2444ba47cbc566bb3b4d6f149b9b3d476f10c027f5d711e8b5b5325b36fb8515842333db9eb144bc46edc432d82f43cbe989ec0ee182b2bb4ee6f549d45726f1d92683222d5e337ef1c48a228487f032913ef7e9c52aa294b78e4b5325caa51d93cd1cbe1012cf8dcc402576292bef1616ce983b49256dff7029c909a3bc9bd354655501bf755563271f1a902e818cd0bab73195c61971761927e2dfd6a387cd8bade08fb40c8199a28ffe230d2f561d2d67486bc46d597313372d382725e566c9f533ca663eb09bbf3134916d9bd735bf7d613fec978280eea60cb51daa21296fe9b3447e828ee3ed91525d984d9cc511580084772e892a0c1305e932a6e7a00dea0380458e68fcae3eebfa45caf345a395aadc2ca8d9d90bfcad170eb295452474990053a8cb50817845f9de8a8731e6a4c499458d01186ec176f0fa43a6933427e83731684289f7fc04cecb02c5047b03e26e8a417b52951fd7f99dd0b814cd5275a767535b038238ad0ba3ca4947a13188ae437cb5222f56548351e0364450b2d5e35dd07157b09cb312f157607619cc2beb09855b018e138130cf08ad9c5e976d4d9d9621e0f3b69b872c20c71a452240a754f1b97b41b5c2846da08a97479eb0789eeae959dc14eadaccbcd9aeb3e27b55be587cf9eadbbcf0a65e59cfcc2743e6ea65340cca1605804b9204add66b10989e1001f7d9e3c5080178a7a02ccfac0b088b9e745e58900a3126f4822d4ab4c28cbed51faf7c6f2d17b5d0b31a063d6761c4954b095b0efb061215d6390fec75f2cb82bbcbf43ff2516c7172e4599c8e8eb694eb4b7bd6b542b9e5148a090c2578bc8766cfe9abda3723165a4c382de307c829cf95597bdb7fa4dec780e4b85377085f9b1bdb375741601be392308607357fd072876282d005598f59ce216572863577e3403766ebf8aa1ea956c1295dc054057e923570258c5e6365b22d88252eda6cb9cd8cbf2ad5777b161a687c6900db554e3630c86e6d1a0755ed87b4cdc95daaa92449a476604eddb45d9513bbaf7c3c5bf3e2fffd3012c7b4c0be6feefe45be0be50cbb61119692fe80e573c804cd17424bca9b646ddf310cec401dfb2619238c7034687d71e5576f34d81110a934927bbe660f368ee5dfb8c0ab4394e94e5795666f302df9c18780d9cb701815492a72cc33dfe60bbd3062de5e752ea05bd6a127fba6f521b1afddf05e1550d1814bc1e5b281e57ccbbf75a5d8274af3d83d5a45884155721c3cd118fe756d565372d39b70a9c75aa7e97ba7b6de5c5c39d80b3f9373d17387baf4a42b14902c663c426dec9c0e1dc85aef64691ed531f7533e868bd2fb9e7aa6d32272879bbc000478dd84fd2c4ea3704b5c7d4d681da71b8ebaffc3366b7b8cd7245322d29dd767f15ae821a455dfb60a0041fe6797bfbd663d6de91462e0d98b2a5b8ac74a42d3467674ce08dbc3b8c5e075b67608a7a54f8e34a9080d61195994da33fc39d8e2e2b0b946bc38f5e4e98d86e9f618f56fb53e027793d372d8ed047d92e3e51ff3408a34204105fcc6ff67d42d7a113f6931cd45f94a4d7c749ff9b44c10f47e910a6363df39cb2ecb71f00bd564b9ec4e4fac8d929de404990cd4fcb405b07b588aecc6f808e1328edbc68c96685b627b596c37d8012fa1929e26d55f24d1ac965c86dbff30f07e7db74be4d4d77e587cf98cd33e1698ba1dce7fccc200a078f6e9b22159346189247f00930544bb24dfba7eee3930b7d477384051712bd566d6dd0f259a95ccd8ffad8515cc326a5dfff6b2f75df1f5875b4608f1e108c90cd280ee6737d78ae47bcd39fb8e23247a6a38e97d10dcda2926924a2c9629f3c1669fe054c57c344225489fa2cf8971f0ab1b52fe0653fe506587746004f1fe2b0f64857ca7f6516898ca36aa04f7db674ef8afe882e9aa8384a0284ab20340b039793e4d63c85ade22ac9f7fc2d0b924a27b50cb2b2097492066d63b21e053e771687b559d84b8f96f7a2aa28db693df51fde614737b2d07b565fecfd8ebb03743acdd13999e0460ebbd78a0da1c03fdea0ac062d06bd445b00802674bb7de262ca0d4060c86c5ab13e0f9f91c6381e6c71c7024e6753589bcd791900ec7464a98fee0bb4ac1651e647f3f29d94f864065cd85d90a19c95a185f2cd8768c810b15119391f8f07b517a02b8a1a5129981627871fddfebf82d6f0924bf278a06ee2d736d288b7670dab0f5e70ee46f243039b7b511cc4e4a8a2d5029a2a642407a5ebecdfd66d5de20a5d34aa03bb7cec35805dfb353c358d6efeeac216747e626053e366f3f911bb9c5257423ff8ee1b149ed4230faed7bba031f0cc9df0d3087dd8c472c6a3ac20c8b56c3f8c44715908bc89d39462f5baa237bfbfa91f4e7f6242370837b35699f9501eaad1e92d2c79a42312ab9fb510dad8fda3214a14517959e3322e7036af94e9128af62d491fcf1c4be93caf3f47b2db5380ecb9500528e571f7932475e90249f3e7e259eeb772eda95e30d8bce7900a685ff4b42824d9ad88604e153ad0ab3867ca7fb4437ecadfe47c6d635476de2be5472083c435f37ad173488baeeaf77d163ab48871fb40b9a548dc982e7e03077141586d4dc0de14f43a67d0f9c24fe2aa3f691b9fb63a4593cc65be73866766b55484bbeb4e014398bd942b42dd192dc8e186b7f6382149570ff11e4a17721058888db6c566c6cf6503b8e3b1c5be271a29f4a29e085e8e98196601dcb88ccc03e559a30490947f0514b9417001a798481e9924beae57dcfff3aead51f11d635e74d1cdcf54d41c1df8818da4193b48fac85e877eb376fa34a4af6bd04a8d9e103cdd7b4f3bec6e58b7f60f7895e1fed7302b11079e22b2de345382814c4443c24566f4accc453d5b5a020e12fe0384875de90c81f7c2caa5ac803c8d7eab1a1b9852810d904751d1e98cd49adc08a0b3577ebe1447c00b331320df1c6828edc43c8b6a9a0d5a72606a7ba739b5581b0327d470e614833d2d711ab4559324826439f7f77dcde767b0e7b9d016135bbc1ed4d26922e973283ece5603618608a2a4988070db5854f96a672d965b7d794dad665ff3ee4bf8930c33bc1468c93a152c600d1cdf340bf036f3bf432d7c1a9457e6655472c47a483fa7342e91e524a3a3998544aeeb7214bb92571eb697a65bc55bcbd5d8db610d8033a69a04612c14b24cd2307305f32ca24cdd6e1e5685689ecd79be451915ab77defaa1eac5bc2f0080db285408f5029229397c8d411f838b455657e304feeacbb018896b9a3bbd363d8874797ee05c343254902ae1dc7634c94ce7da26859124b1e89aae671186fb8bc15b0bee1b03306e14f11dbd2508406442b85207106a2cea531edcb4a552f8736e2632e110bf2de662e98f5d6000581b2110722d093b88623f5b1c0a61e9d4fc771e15de2657d3a027bea84af72723f8cf386222d6cde321969a97efac13382fc488dd6dc595cca649b98f0b50454a0235784b6ee1e8e3303e2374eeee97cc123eafb116553fbd00b2226d28d52274413b17559790533096213edc8c903e37b0cbdaba623e1e51b44841692aec854abeca5fa7274dd8735b2533f753f8 +MD = f9dabb2616b848d02b9dc3c198aa4418b7eae1224c8ae06d17fcd4d767ee429f139a3b86aa4dc0ab76382d8b4c9135fc + +Len = 101608 +Msg = d94d5c206e65ceda51c7c4e2b2758677a7be7a73706d8c20ff40d24cb89b70a0757eba2dcdb59948964e3098a850bf6de4aac753756a6fe8562f26ea14e18a94d69f882b9af9c5d4c1603da8ceda2b0a6bfb2838ad109621989d3f77e60a3a0404990f415e9b1a25dce4353bac7c91f74397e54a9ec7cb74ce71661ab37e4998085294989f0260e4eec15e78cb9cbadc746846b0d2f8d488ff93e3fb05a47ff7e9b46257e8965fb800e10188b2a46f5f07549293d1097a0733eafe4363e6a3caafa6c0a7bebfdf4a192b6592e9fa762b0345131a216485967260ff1a56ab7fb8620ff5b0abe5a7414187d4bff90897e670220f6e4c6fbddfc5dc2da7655cd96a0bd94a993670804680dd943769349c3956d3cfb6da94ea8a3347d213185f7a87b2eb078be8c83201df15ee21c1e84bcbbe3f9b1b513ad33fc5873485f71d2ab85d2d74ad4755851965182aa58a8b6e45af50bbc53bc841a582859b268bfeb0a51687d828dd8041371bcc90ed4b85cb4e32ed76db1fa8fc647229511e5b6bd6f5e4e17d2332af2d02071a681e8c3d2b8f4efe15868641cc259d5c9d94efca6251d023a9c7cc4b122333eaf963d61d55af0b6ce0edf7fb79900c04c6b0d0841d60e035a53c35bdb841a7258ce2af8c1357711d1f39fa3eca4cc60a159c8502cfcb1effb9a9f56ce7056ab169c3a2f22b2f89fa1a9117728802d357d27d96ab4039926a2c3692bf67168378d82f34b866de5aeb191ed7ff7b593cd2457e8ce63753435c480d9620ff1efd61214eef448c0decd96307c14e6bfa0862b5c4ee1d7ec139be535389f679c2dd538b475aff656348aa41755ec5208c3ff16c7a44b7db2a7c799633f1a89bac2d385f43fd51b8897548fb9034cd61b8ea66b0c6171c1736157359d358a02e84f5f7e66961a34f267b99d97fcdcff8260fa8cad0edb3fa8e0b96e45b4545f9f13b7865e20d5bf0e36387226bb131ab7db9a102c151e64bda66c97ef441ffc69c09a327d589e3646834f9207b665d4365ed389fc1c81cd4c12ef370c6d3365b2d6660736b5ea1735cf6d619d876b98888b555ebf7dcbe5bec6cfe03f88352814b5b9790cb13ffe468b20856a969af418b18e02c8c1432a90328d17cb2d9bb009eee30c71f306381336f761f17c5a538191fc2aba8f8e186ad6854261e5edaa0cf2913608c3e3710663508bc4a140533d8d0e1b0711133b992366f4861991529861428a33cc4e25aa80ca67469dd36fb7035268212e6910c5b990a29a612d5626ab658d7574acc27a2fd38909da9a0588a56796bb1006145b09a0d12135283142417894604585d3ffb0fa6580dffab11ce39c3b177e50c2d383f604bd0e085075c3fa4366c77fd695c4bd814e267bff0e3e8ea9d8b1ffb8c9c92ec1c06444503b93792f0b72e146f6db7b70c436944bb726bd8771536952a849b97cddd0729d0e30639bc0c060a17d55e2988598ea23b22c873873fb041ce96614aa57cb09b3583b483e19386472a3d4517cf4b5d41389c09a5142f1769427deceeed0cc702fc414a57a97636336f4c766a2a425f8a7a873655680df2744cdf4469eeb4d5c6ebc4cf9c5ada9e37b0abf808e1661ae3c88c556bc902cacab56572a5ed9d614ecbb54b3c3de947b9b301d3db3cde18b5eb5370ce803626d344b67d8835eef30463bbc61e9acbb82341f70fca82d3e169ac838e68d5d08ef6c37b6dfc0dd0134f7d7f492ab9a879db2235b5bcfd6cfb65d1c4b8200ff88a9ef85b4ae8bc6b4a97dfa8db48e1a7134b1e62cd9bf3d2f01322c0f5de78d8a330adff1d338be61f4552df85605cf00dd9fd265d4ead2c48da691c4d8a56956015a80eeec7c26a1bbf9ecc4e5a70acefef862b6fbd73a389216c83c80df25a4ab5b231c38ba91ec46e8b163e1e660342f482160ad08d5f3d52f49b6f4d944de7789210a667872ba5bae1665d95861c8c50ba92376f4287ebd4c90c49338496c2c712529e43a6b8430c6763b4a51720586af345fd82db441c0fb37f5ea7095e6008f89fb3074cee28cae6b64a3763362bacf8d764f1a0bd576b7a9cb7926ccd4ba50da1ee9cc2f5db5e27062734b0878f7d90f174a4d91b2450e50a5bdaf60a0a0419fd56e850f4e42eeffc5482473b0b45823b3683ce850b26be725269ec3e258fe45ef4d43d13cca40940d80b7079286d975cb177c7249555cb7ba525999024ac356ace48d37c19263c79bbb572696c5b97fded660b1f4945d5ce5bf8442990c5d5c9ef2d5854561e4f4f066a973461784ac5f33ae39fb05ea3127cc93430f1418d245c6915c608f30b6cc01125028f2c775dcad997cc5009fff0117fb2cecd8823231ee652f7b90d3875f19265fa7de0e86c7a2d6fcdb4acaf102104062bae025f6d3e8a5712f0d49e15a1d59f45b3fa639b0c1cb2cb61b17c19b43f786e1b170babc43f6b3d36b004f2d9c11b0ab9e4b1928790aaede17e2eb4d21850c09d2fed84b6ecd7a0120933b4a040207218049af8f3709d5cba7d8d888477d548bbb2cfa11e79e4650c47f404ff3af7a557c4e57559a4d43f7714603ed144502ffd0877a903cdd7b1acd20d8afd95e9cafe8b5cb3c01397bf9dad717dc267099ceb99ad456ed2fbaf7b1246eda23a3c0a95c0c55730a72e04b6af86ee5ec948b80ecd3b1d666f9784007069d5f611388ca5cde90cb147e0354a826838ad5055aaed0de8d8f38cf25bc3523cec02022779b51990784cdbf67bdf8edf04b7e5779b10bf7b1f1d12555a4d2189d7cdf64ff84e0c8143084cb8fdff3ab3fa8571f8b3004dbd99ede708a9254616415fd3fa32f70e8616ee806ee431f0abc11eda1e19441d76ef6af45371d327abd0c1836e4e3887659904606057fe1890028a0a32f664996dc89d217edae02e122cfaecf37599dfe77354d4d67fec182a64d2e77b71e9276ccd8c57d00bd3c212fe12f8d3cfa37ed44ce6c5178385594190fd5b43b35a3139a6417c922d344a72ee128e5483ddcdf4cec0196c8c51439d2d134dd0e43f1e9dfac4790d678c30fba30195c0bad0320f9fecba1dc2d73f05e41da46c2a215660711b3786e262db75c6e7f75d9b0216ec67728e724c9fb3435d214a5db086414ab4509d48c53eb3a8fecd9b744ffde254cf587fb25331081d3f2a26eb9cf947236b6b929a39a8205bf4ba694cfd49fc0f7ea87427fe16a75c333d206017ffd0b23e7200c366298a5850b6492fce6ccee51e6a541776d5f6c8e0642002482244c0d36fce0c73485965b9c92363eaf0be9e54a409cbe2f65f28efa60e1b58e90b15d569e4bd898ef54bd7fcdf31785d3601ca607a8b6b014945070cd2f16edc8d79ea692a1ecf82c7d1535665e1a0399dd728a58f9f397f1ce8d19c55ccb38432b4ba7688766eac35c1d5df9dbb8c0e5be8157c304e73f83fd7f4607df64f68638dee98e60f8d94a8e204a070076163d8fc3aeb45e142f21cdb196033b6691186ce2ed72c2f55c389fb89a0c40c4ac17bdb3ffdb6a0cdf71abbe8a360532905053d213c421feec03ed50be883136dafae4ccbb76bd33d8ea1410831ea16b8ce46a370ce10277f133138337e9364f2b5d91986234dc2b94019332212bb473ef4b3c7c3967e8e3045c8eba96cde47025b62081a4842b56a93ea5add4fb92ee2fdb273c09a759e2bdd6db814ba4a04c52ab2e22c2e33f377117d7ee2eece12cd73ad6d12e4db9d956387651d6ec1e262a9316e67de09c509423867d8fae13d27dd0b7e5f7c9ad4995f7ebb6b922a2a01614776705faa7348ad84dc6878d9f517c4346e5068988b5c5ab982a72d6c25ccd85dc0f2b900455bdacaa63a72a083c5af90058cb2bf0a09dca28278487118e998d91693f5f2826b51708df5ef1d2f5a26870bbc62f598c66ba08287ea204e8029253efb1a67749f9be05942f83840feb18147877e247ebb911b4c7b1b610eba11a700d3304961203f80d2c894d900d8d9e6829610330512d57ba6fde31c9fbedac926c3407f9215c5bac030cbe8b511251e84901f0a72f0bf2959b54b394ab50bf2767250f14fa7b6f5ea21a54da8d01e91151eb491107fd88b2d4a5aa157c72d89ba896b87e0fe989819442bf0213e4aa7fde8d6b026e7a70ae965193a0e1bc7f8b8af96298c41f60d154164ba678333c903958d4ffb50b50f57ad8eedb6da61a6398ddbbf9c9955bba6bf5991c4c6615df1cde156d8e188003dcbc3a3992b84fb04cb4131582d3f0a9466105f7e2f5bcd8d3adbad05c2aa466466c042fd37b65fe310d06708263b62a6df930adee8a97fa082823cca1ca34a94278bb32b26823a9c049149f4abd22ba5d2ea7b2c16d3ddf14ddfec6f17f97394b52edf6b1f6df4f8508bc064e58acd5ae61b9bb0e4614d4a44f8a33bda36282ebab1ad054a01f5bf9cc7b29ffbeeb08ac43051b278dc39710ed74a778ee1d328db1a0440d0c5a6b98f4b09ee16833d0014308479facc082f5484ca6c5a83db4bc273ce65d9416dadd221ab995ed3da837d241e4e93b7224cbe05095f67a3a85f17c4f2bc8cfeb3650d5182e8fa65f0daa71306796a27ef90f364f19bdcc9a22c8113588d1283e1a7e7e1742213c1e8ce3b052442a9a3d7c39ca96967e27e3179a96ae82093585d3c08db6b91d0702827e10360f075b442ac60da580aa148bd1037d08abc360691ec19464e7b5af91aad4013a2cdf9e09814e801a8cd40b2aeb7d24e26ab2314e37ec22b0529d8e425270140d21f5ab241c3dc2540f8e8416c3722eaa433830abdbcaa9177e373bab05fcb8fd82fc3afa581e34f08d3c07f5f58d0aeec9d7e71866c7a808ef15301251b470a9c455a612c16a586e8a5f1f3efe184a2e6313bd0a657d901319a9f44eb241db807a9474f3f49cbd2c8b8a225859ce5cd7b36e3af8545701a482780086a42f4a1ffa2b30144e3fd3b9052fc9e874f9c3791f69d968bfee7d5bce01dd70a3c74ce6d79c600a5ade2ca28bc27e55fc351e811b7920e2049e53a730d9f3833dc46463a77a7d3c86c2386783e4a8273c0abe9e4c2e99eacef125056f62db44de812114ce17f0217eb6778691f8dfe2d0e5241f05fcbcf97b9171f4de3f0d2c0297f388d027516f8f157a6e1a919e0f474eff81fd56028496c9caf411b0f1af46736c2e421b296d5459b1ac92216b02fbb2a17586ecf312ad3480918e7b314526adfb738855d0a15b0dadc0ad3acf748abaaa482704172a3b5c434bc8f044940f9212073779ffa20fabcf28a04013ba60c18aa8724dd741ad9b738135b294027dea4047c3fa0ef5eebeb6633fd4007b1a61b2e4ed2ccbef808ca1e07924b8170df116b3b258771374a0c40ec058fe0d1415c3abfc235d8a60aa5ed7f7e919581c5105d98717d0613e1ca869c6516506ea482d5c23b414b8aa7efad62652403c45748e37b6aa9385a76ca422d66ffdef09836083f87189e0ea751669a902b539f5f6204cc59348e74d2b77b864e6f13bfe520da1eece15999d172210e47cf0e7ca305c973864590c9bd373a8f6590754353e75347b3c50592eefbe6a6d238bbc2edda38583905c7c1fff28630f58a8ee5a9347ba323eb2963c693bb4a788de2d903895c64ba9bbac55f9267514485e60bb1ae5b18867b4d7321e3aae282f70b29adb93a7d5030f23ba6bce5da9ba8031f31fefa8f229ff92ac792ba56389dbf1ab512dc8c45ecf58d9c1a09b3421b6f87f2cb60f1417db6f08049f38ee2a88514e23e497adff64d210954dac58107b2adbcbe9624293d0b2d13b05e73c83fe67ffbe2892d67778161b51260f6a09452f7577fa31222088149496e02eb328b69c3c9a9a58f24961ab468fba42fe6e9d9cf8ab58fa176069facea2ce8df67b396481438a487607c9f81e9b7ad599d2fcf9c1e0863bb6b5eedbfbe911638b0e0f576a33a8efc6150983201ef845a0b8dbac5dc2226474b39f3e88c4696dc553a0fb640556bd8713b8e2e784b2f1c782c24b489a8e02d5cbe3a901ef270b59ee86b6eb1314402d66508dd1672b8852e3394d0f0459955e71649203a3eaaaad2139108bf772062d8f58ea7a20d267f74cb9381d89f5aa73368a8fea9d24ea23be20aea32cf08e0c114a8f4e6c382f1911ca82f085e2a0b8adde094325563871f7e5d7ed2e00364d7e9df2ca83dd3c2ce4d5b42492b1269329d78499f70f240c70e122a675319d6649dbab7b12221dc7387342263ae19a974cff884b7ca02b57bbbb258b8cf521eae57c2fdc91b7526c8f1bc381e8e47b3989be8af410c9bce83adc46f8efdb724fe407d67b7d0d68814b47aea4273a46fe62ad13106ddc573260bd0d7b1854fd19b80755b45e84ceaa1f7f6a1960739c5a6a43b72cee6898cadfd5ef7e90e230bcf3e3242390cdf34b5e3b9c6e3ef0d9e1f31acda60ceee0160adf739fe4039bbe0a23a855ce3984e99a04abff1d628e09af7aed1863efdba87402204b7c59bca17d5178a76167e21955531f6886293755f21c8bf06debd9f6ae168c1dd42511ebcff51bb4f4c9993f02af7d1703b5543b6d5830ca955369951b650d6386261a117476e7fae2ef28df44823ba700a7634e73b6520374c708e83e762ac90cad5396fd6f83d5d6390f8e7d73d185277ff2f397df863786a7468499d26abad25b4d00ed4775f22947cba12fece53dc29f71bf6c0c43e3458490deb00253b5719074d3a68714cc669bcbdbde65dd3d7c966e2642f501732bdf767b137e6c5554ed5983cba706c11895ae730b772ff0afe556bcbef24573b42875ce26bf1af706e26995cf3fb27ca9d5d22b29895413f71ca9e752bc867178f00d6c8c3cf63701e0338e13b9be5bb4cce558cb14f003ccad063a909c5ad8e4b6abca96807471d08725d15b9d60eaa3fb468072b27a5cab06ca2aeb1a193671ecdf6ce8121c53ed47ef03e96370a601e1742692ea696b1cba843cd4ce7806cb2326b7f37a6449d2a2cd9a5f94341a59000cdfae1523cb9c48b2e4e021cdc63aca00504b21d2c00b08600920b841c403d75f0046db6ffaa431d4c79faca0e15b720aba4190ee43011934d4cf48101fbce8193cdfa57484bef6783955d78804a79b945a89401d6f5f35ba91ddbc2599ceb299e9eafbf7d657170bcec52af99ca9a73bc584d7f6916ffe7fa4be8d08dec3b77fabfb47508c07041e0c402f6c15cc356f6fc690f055ddc3e2a1f453203b367728d7832014f2495e0d56695d560ca9c6bdcdc133a129032681fe1177025b91622401151ecbc598857851a32d4dedaccb956407187f878ab6ec3d989135ac5f190fcd138bcb526f0aed628017ca455fc484d6fab7e20dded57fc4fc0a209a1a0c3a70210fca45576ebb2d72b541802d321a7b2eaa7f087a02bb48ae7a59c13cac32aea0031f0acc1180070d8e5a3abfa4b4e51568bd13d6df3d2d324a47ae417996ed131e501f47a3ca83b2fb5ae1618ce289416b12cc9fcb63e729f280bdc314c5a01ca9f3ff448609180594e9f0cd6b31fc253a167f1f47ce0af82b8b7c2bde4d5c1f4e81276d48ba5877e38df55dc011a2534e4ec7efd4da0d1f2dde660666ac958d747e240c5c5cb97c4f9d7b9d1c00003e2012137c1326622191e007cd1e51d0f9a44171cc416ebfa561bee005df9bba5848070e6e5321ae81f036ddfa95db92e666719d07987eef65a268bf129b3325343ea40511456a46c2c14955194db85fd623950248b1fbad4f9a01856ddf64d5547c6f841f4a5ecf666dae1993a6569c3b74125e2a3e738dc5a13fcf521caf4f2b79c027e2d27dacef8dcb78145064dca8c07fed068e55055a6069f969b380f73bbf5c5d068e4573b08a280cf5ac319580a1444b88323eb8904026903f64786207d57a9ff4de54986bfb5a54c23a6b5b658ef60609ba9efbe9d8ec203d8004141224d16d283319af8449c8cc048b6092ca020b890597d463d9832125dea69291ed55c7413b3d030d7c0df9ff371fbfd010730b61265a9d64e1e76c1dad38d24ffbc0e2b8884cbf56b5a0745ac457e7a7fb7a6c1ad6635893857e337423b711b2bffeaa3fa9f29cffe3b9be5b56c4666ecd80a4028042745456a00dc5dcc1ff7ebc7784530abf2a8d68a23e9d48f5bab9191e59d4ce889f4bb805519f22c9e9e873c4177f4512e673c7028b8d256c62fb60bbe3fe1ba627de3c06b54cb03f6fa4785cca20c39e6f4781531ba76688edca36e1d8eaf21bbc80553c9f6aefa30f272cba12f410a2237d2a0c6578a6ebb989fe18af27dc69bbd6960f86864b8526d523549845b6ce81892396ff7d40f564df38c8ed314510a4456107e11b5e667552dec4b0b2209427fff0ab5021ef466e2e898b0993d691145168be558682c74914c172f2b5e86375462381fe02ec4f33fc42d79acbeb6b6a8eff8b4a747318309f7df7e4bd68ecf7f03ee36f9cc28064ccf7270755fe203552a7f7465189e9ba5766cbfd553c713e82a5280b6c2c8a5f153901d5aea9200340e4aacf9a41ac54d10e57a309dd90a771f8c877dd74bdb1696af08c42570b42ee57ee4cdb34e08e90e7238c47c6dbd1529c5d3b7d25aada3e1f5ba1cda242729f546a5480de26c61b83d7ff9b82b32a89225eacd7c9c25807c8dbac8cf56610e88c875d2797df99d566bda3718ba7319a0d356259dba4a95af9d9032cdad6bc6e42cdfd3c0c7b8853027cee665c388519cf89f29fd5b24cac24ec5c09bd14c38519b68b3aa6ab0028e97e56e67ed7737cebb4b406328bc08fcc7e0dc036b0c4b193d9adbff0be9fab7e3a637e6e14ab27d45e4d198c81935a73169edcb23b4e98339fcb187556c57f43499a9aa4609acf2bdf24665e4433b09b3e85bbca04af9d6b7169e0aed40ff8db2472d7ac5ba0c764cfb06902443006a76e68d9e8bd9625be1710b4f7e6ddcca843729200667ba4f1a8979e12f206e14a1ebed398b660e5add945e1faefcd4f2d3f10762b0179dc54e230722aee26c4e5d7de25449fbe41ad307014225f4d14fc6fe2d096bd39f22115218194892e15fd226d4b96c9fcce5ec535a808c5dba2786e505dde1a2a7ac8a9c148fa637b790276d2b2e9d5bae014fffd3a18b4077c33a2ef5a5b78c9eade28c634d70d9d52985da507c843672b72693d26cc9a4ef6b0b62672b98996a6b40a76d184d80237213f6a96bc838014f9698c1aaef910c672108c2352ad2f42fcd779bbbe53589b2fa489fc212694111c9950723a40fb5fea3a86e8c153e2440b08353fce1ffef3361599b4b09d21b45e7120c9f9127d279b9cbd3f802e5e3e81253fea5e9e73d3b71af03cc567a7732179738e65ee04c208df8594099d0176d1b70057ca4f45b1351d4400ea0693e2182adf3bfb243093b44b7682e8106a918f261ce4abb2e31032b50bbd990a8565a50dba5f43556f21209906888638f8231c0aec3d6d59da85224a9dbf4ce3ea925a8aab64b9023efed020cc117e6748800ace04bea9b4aa64a6669072901331ecab2a18e8d6bb2e91357b2dba3b3bca5ccdf7ecd4cb53c14311917a93ed1909c90984895826d09c6cd310a1ef4716fc0df8110b3c5ca7bdb50643c28fce85c0dc17f2734f13f327063b89df3d1c996c17fb91e641d8210e1ef705fec2beb9f58a391c7d1a38935cd1d13f2c00363388ff5af31481c8702105665085d938561657ff6afd661f218c7426b92ee53e65d14898cd0c78a7e594fcc6ac0e3fb5cab1c9cd667a9f122e5451ce703e686fb0d37827884492e121e859aa70de62d188465445878b41bc2a42ef1b0cf0f674951e02a9ad436d1e9589c09457aceef62f528bda4695da97a5b6c0aed7dd0bd7930f7c71b48f63bab0f7b5f6c8c030ae2054d50e3c20e61f114e6afc796934f32b365a22268f134014b0ae443cded463fbcbc453d0c2e0dd0d6842866a1bfe61de11003d8bd9084931531e2f3c4f46a21225de4d9cd2573beaa2ebcf126bc4ae1c2e13165ce39f20874d89fa3f9814032401874e0905a5c6496ccb490aef143275ec076f02355480871e7647cf5fa8e171dd63f79da378f69a546586dc0c89997be9618a1454d4c3d134679a63fc91d7bc17d8bcd3523d677dc84f0ade4a813d8e94960a1bb87c74c62de26485f54b50435f7a1042886f733456fc47ba2f97b93e7c396180d6d80e06695b38bde051d5a802ac9453cc9bb47e7ed1cfd8324976fc1ea022ec466419f2854679643431f26aa004bb8f752ea5bcae73f5b0e8f30157ea8ec0967d9d031af048c9216758110bc606e86e48a4c16f74676becca30d2c26e49bd47e30f63f038b68a6e0050cbfbd317bd788d9a82175f0094e43c8f85dc28658b592d27b712dd343fb275a88dcb55dbad26da8c8234ccf4032fd67b75058756bd42a27276e34c267b876dcbd0eadcb73a01a5d72c585ca629382e613acf39b1c5ace97c2df20421b0652f373feab63ee6817626faf27c8b99858afd41a98dfb36f068a136bfa3aa60d45077154ba0d7253ed1d87883ab38b6a0928c2415129773a5b68e3bbc99151f4d68080b7dfb1498923f881f9c77221301dbba4ca2561b1e45499fa76953164e48ec668cf2437b931415927a9d4edc3131acf445c1d70a9947a85204566012704f341f14590870b74cfaa3f416c0cb93b8acb68a03f3ca77353951dd045e9e17d8f5ae2c12b8a87795652926894b74acff419d93d95aef3a9692fb8be39d1dc76ea7705eafe2674695eb9e8c756d6bff7e1205fdc27aed45d44bdbab84ba15e188a02206910441c6b6d470905b95160ddd848c125fb2594b86aa5ec658241b08af961fce56acdc5a80d64bccbc51075a661f9c9bf1bf979e16551136ee69a1af5bffe610712a7b847c578cac183fb467d049b3d538f14cc00bd27fa7a7f92e381623f177712bc3d711debfc8efafb1b884a96e6885d5cd43ff8916832561255556c8ee5dc72f29b4e9e2518db33f63befba538c078fbbdbc4a0f5243d7203b69a655294df38331c05cf8fe64f34d5efdbdd38f7782d1827b73cbdf745db4b4f77d3f2ec276e6606bf398f309307817f7439aeee813d5a01415550a9ef9ad4681540d8b55d1b73a2a3628ebc4eb4e133e1581e3bcdc96bb18a721602e5b684499c336bb728484138dad4f5532941dc524bc2eea402d8327fb91b77cacf374539333513ba31fcba108b172abdccb85c26d9fd88f2c97397b3f6d9dbc85426fe8202cd38851f3fc571dfb197c2de2048f5b49352edc9a182946b32aac51d8a976a328342e19b194aa5fe2ca22a08828708030cb65cab6adb6b3db04c89d26bf73aebdf9a964d9332f20f10b5bcf1e503a7efee1a0816d68a8097db2adc1ad10839546aa66cdcb463a13ae337414151a31aa0c3e8bab3ee781b9f3aaa869dc5b1b196abcf2bf185c6f9a92f9082a2cf4fa83d1287382ab98b847d55354e044edae8d82a7d9a330c4344817b2744ba65ef9aee645f4a223fac025ab434fdf7756b27437019824b53c3c8ed506652311e6c38dd40d8ba4389c4df5ee00d5b1d414db6ff0409abe0622ccf1335b473b0ffacca2f2e5a4f369eb961b0602a301fba66dd336eb7dd9b3f689f1bb2796edf1298980fb64dd0a38775d179bcf144a4e89fe4083789e024f45d802e4f1e0c655e18eaa3611906314ade77e07dcc5f55d4e112a5e6e97b2289f5bc74950915ebeb150713b626b989f1de9a0e2a2248da8512b132033e783d04169a140ba35118c27538883eddb053835c832a4b5ac8da031b07d917f09d1e6faa61363a548795ea22c52a7fa4b536093f7b5d68dea7fe57e55dc0a967b36dd1985a04a88581096b02f62003e48eda8a71c8cf0a15aded8857fa0f410a81d133c8cda3df9c051d4eff1293520604e80ed9b2a7b867a14f9e5828ef6743d1f39c22013e6703dc799a0063aaf270df089e5f830efb3c4dcea2d22d88a47a697b148e40fbc620cec457ec2f8e6d8ce7e140eb812b5afc77109bac52017f151210a4f4d002865da2a68dadbf664bc1e41cfe65f6275d0fe8bd91cedf82817d945a523cfa7c2e2122c9452a5b5b12769d60e0b528298cde687e8c201c35301ab703284e069147d314d2874b4b954c15db56edc4605a70cfbffb95895040175443b02e123c6858dd416c59f8d63b800566a62d78e5e1904bb4dbb3f4c5cbbb94ff0b6b71e42ae9a6713dc519457537ae06f7a8ba01e774bb10c6ef46c1ffa640b4bce75145fe83966bedd296e06df87883f16773fa94a5859b6650688d035fc22a6baa9ca80dad15f9258857ef484bcba43d7189190faa131d60de4271006e8029bfbd38557fef8be18df045ba31b80f3283cee6a6810bcb5e5fa1bcb41e5ce47960270f947bd160eccc1146894ec8acf66a8770e91151172509a2bfa084af54e1f7f007ad29dcfce28bf443a3c7020ab59ba31129e8035e3c06e8317b5bf23a2b2c210ae7b297c88b719f2551c5ef913abe2ab0b02da90769ff7bfc8ecaaafd1da6c0ff8c3e8a2aaf271cd2db7015aa4c7a2534c409cc7c759c640621fa6105800ed8cde2f43e8b1554733489effebbb2779b87aea4f3242884aa397c139eba1b0b6e5e32fd3a5486a1aa32a26b322e355e9490b625a6674960557be63cea84b8468c99c38106ebcab5cbb3700b37699dd7183723b56dada2d76eb6a99dcccb1d663966dfa72bbaa93adda139f897d6b28930643f7bd15ef992fbd10b5fccf713147eadcc973027ebd5e9e34659dadb3b1de3ff50a059e2173807b455aa727062f86256d37a9d9c5730f661df5786e2023a3af09f4b8ea2c4729747cea5479ed2b9ed4a3c78fb80b6f30c034c1a2552cd893b1f74a5f604c7e8b572c079d2ea2b00276f4fb8d13bd0c633b1d4c93e9365b2f07517d61b71ea41681d714d9bba347419ae5463a7356d4f7453c08c5a0d925c61d8cf058552f326b9302a4a2b77b6becaf092a006d55539d6d1588d00281b2f9531e55aba0dab3eae933398098a7a85421b529874854f2a6213e4f1b84ccad59469a1fe440cda32522ed45ebd5945728a18dc727bad25ca1f01ace30be165f366664b19abb548a9aae955c5d04ee22da9d07857a3b39dc31584f8897f4fb53414122bd27572bc4cc0adfdf4c9d0175da72a6e6f730080ba4c820f0b9efe823da45489522caa00c39b6016133046aeaa8d0d05e173fc955acde43a92f05694b92113acc157c4dab543ece64c8e1a6dbe626386d62b0fa6489f93c146fcc0b24e9039dd467f2a13cac137b6c56ab31d3e2e13397524a2792fca76ec4e4aa2a6a4fbad64092b4373ab1c2bcda64c7986d5f90566e7e51bd8b5577402d26265366469578933e377c1005caf7518bcd46f29cc215553f6e489824d774dfccd722b36e31f94ec302ec7708aaaf443432ca1e2ae4f4ee2e063543fb46613f212304cc170edcc5b98d04ba4ac06934e68e9e5a9a87798bc2a02039494289ddcb90663ae18a97aa9a5c51644cdaa9a61b4730126c1817c085c285c28f6a733e34a5e36a4e33be6fddf76f0f7f27e51a6ae33bd00015542efff3c29a4e1ca1d2f4e9f8f4cda8b5880cd49a065256aff42de8fe3df70db32989aa830af5e79a2e74d30344e0482185af7a7f0376d56ee60ccf0396d17fc932bb5d33af2749c0b33cd7bed516a066db2e5f9a615d32a642601bf894ffd9eafd2d8250e152b1ca03c58e784fd1200a1b020a58ba65dceaabc046299302aaaccb38c0676bf8bdfa92a75dcbffc0659fa7e2f156793152a084b5d4331b6a70933f658de38989dce6e25adc268f34ef7c1419aaf02830327c5fb95c81b897ba12cc4c5151d4968d137548602458df0c43d24eadd231f2eab2bf3335b1e52ae5cfe455a13ed7af4d14bdf8a021f70f6a7b84ca606940f9e9f805cbf6301b94921f3a09f4170d24ab4f3ef412bbd44678778e456911bfa5bec0d5dc1488d6553d751fe1c056dfa716477ac32e5e9b24c4ec61282e881896e781a1fc2718affd46861865ac8ae9a71c71f3de5996961ace3eafeb3728d63de2defca4a48c02ed5bb6b61e0f3f95953c732cae2ad06fb8f2e2cd270970930b3f2d385df34f69b5cb8b7b636ec17df1e4bfa7db28b8825fe17d4b342bfbb9af5ae10780b9df6ee74478caee51dd0d5da3abd7cdc99b789ff8629cbb0526d47ad4beccc55eb86ce2250347174ecebe3907ec4efe8415bcf9d63744242b8e5dfe3b0b0a945876fe370bbf5266bc332b047fe57ff5eea3b9fdd96fd40805aec0b9dc5a33664d778d6657018f553096be507a2bed3c7fb209fc9070cecf39e4973e5720f9c39446b4f0958e407b2265f29d8524095abded27a689fe96e22edc6bec29f3a024d370ff56559a3841382d625c3f6266a90fa19d6c244dcef95b029943d346d9126162b71805c9b94fb859881cf76b97c00b7bd5ce0df2c97d54d3b9f5c19f0714e4a886a634a165df4976ce405ba3ef3827d85b3c959228d692ec48429370bc94d3cee8914095a0a85201bf66bab00f79fb43a83859806fad9b98ceeac7406c1a95324769d83afc137886e600c2f46aeddc4a4761d862005ae585a83ecb92883ecf6f4d8059e5faa90372acaed2f5743c7168b32980ab7d76f72f7ebf1efbb349d8f24585544b1ef1a951adb18947cdce210b75ffe0b1497a46e2ccfc3fc05ff45857d9d945cecb55d0b053c9444fda2b81bf0a65873806ed6b6bfd76bca4f0a6b40c750cace5927e0ffb295692922bcd0a0fdafad2941848cb178aaf03fe07d9728ca180082406a2bdaea8da02a3352b205a72105159f004ec721f15a45028152a54d9e3d5fe9a9c60575cc3f2e778ee7b4b6a4681fe40aa4608053b1c3fb3e221f1a89894f9b0a3ae61bfb511f3796f613f2e2df2f56cc17e45f79fea014db92fef782ec3a9fb50de7a4c2dbe4bb92678c2280712d3f6b2ebb840a49c6958027aaad316f063ed3ca6fd7c8e7654babc38510292701e512724eb7af981cc6576b8b043d199cbd8cf6e57db67c8a2f0890688283079391e76903c210f58aee85e509c34ff3e467071bb35e33a33baed3599c41361ccb8a129d436cd467f857351d8db40e03c6836dc04042e863601131a38915eb6b921abc96777ca4f74e478d9c7d9d23532b58e56ef4f17cc4e1a14cf897c54afece870dda05bb27ab7407b5e9434735ebf92f98ac373298cea6a34cdf2e1bfadc691a2cf357f1068d53dfd68c457aedd11a50ae0271cfe48a976259e1b6dda40d491b4269d3e5e8a5d116180eedfdf30f74034ef80a8e07ff9d25998597d4ef9a58d276c2e36176f9d7f6a2f6a29aeeadf190a0176a38aa359e33375339c8848a7c86f188ee2b58944ec59dcccb1786b1783ecde6fa95743583d559d305810ae59f81da425c0c357b1ccc3019d23d6425f057fdee206c0e063553288e61c62ab3a8095a7994ccb5b82b5384631ed43010432157b545861fb09bf5cb0bb6608cfd7f6799b40033815161a2c03517a4917b58e504c5d2ac503c9c036ad26d18d7cb0ce3be7b07094151a8000d142574306d17ea2ca62da449b122c42f6cecb4b32337c4f25611159cbde7b7938ab00eb5ee687af5dec036b117148140609dfcca0fe8545cce86203b9f060d791e2038c70633db8af7f22c31775982c536e7bac19607d9256acff2c6feec4be859ddbb0ebe605611792a4d70d8db0fe77731b443c07c9c74b35253e4e383b807c14f5f341dd733b3ead26017428170cdaae5b3f6962fe57230780b3d55b29effe0dfebde2c81ba97d4512ecdbd33eca1576a7f821f08fc4669a9e17a5c6143f73ef329b6f24433e6be0f7f3b52d9cc880628e09064f0281ae64e9f430078f01861f5df647709e5c731741a08085c59ac40879ec86bcdb21330cd0b3f4ae0ed8ad34bd690c3b91963b4e8c9dde8a2d8358cef80d13e89e25bce90ee17417f82741c5fd6e1df3a17e1cfd35262f894944b73c85054e50a001a48fd0f73ee3ef7fec297a7ffd276276a0a9d7e3e421ad4147c7ad4f8663a5477277e38f9570593524f5d1093a4539126eeae151ace1ddfbb2f6dd566cbff269bf17a2f5486bda0954b18da455dbb9c3c026edf9da283fe6614091a451c43bdae3159bd2a834c64f23c2fcdbc069591d5ce46a470c836793eb4b76d3e5fed62d76c82aa24549c288fac0cb1a1a7c9b818db9c2b3a481c986a96dd94f99ee55d3e2c5fbee90394339422164e9b463e592eb0d93da4281fa31242e5581de013f60cf857c122981bcf2a27b56c53eddebc3ed666a2567226e160413581522e5f756959d27a76191b42794251d270a3902971d3a922f72e189b7a1a37d7428fb1217cd638b28e907bd5a8fb52499b713ce7ef310c842f62df1988555122930bf1436ef7f231110423d0dfda21997c5dca3fdf77f692a81862a3b37bed29edaa0723664466bfa87efa7b4868248aba722379692ecf1207578981221372b5f975db098d46fd24fb05ea1d082cc4e3feb52dddb7ddfecdf7283cfaffa5488e5e73553d0b841f27b1a1db004aae696eef30d1b2ee0ced8b1e9163576fb9d77cc5ac5e0607863592725ab36a34777cf136eaf84239440314249de6e19cd88647d629dcaea9d5a52be8395ba4ee0e63357aeb88d3be0ba82fb251adddae89bfb638f1b97b1bf8d9bbb945bbf6a1fb8802643c6baea5ec44a670b7a196cd55ea92940cdbb6827737098d87bba775c751209ce4871b176c3f3f05d6a8531fc36da391832ca609db29df0d05440191f92856c9ebc6613c1502c31ab6ab5bcf5bb1b1d85d9295d5ab1603e0c93c4a1e19746d935a0eca3b6ef3f9566093f703a51e8410a2f7c9116f663eafdb8dcb43b09d2ea438499c3cff7bab62db466fe42a1de3e25b428be3b0805822411dcc29450b5ea18d5e206951039fe52fae0b99711498f68f5b2373f4ce19e005d695f76025c83561359ee8ebf19e8865b2134a026c69f3462ad9eac6b749922f9e6dd689553306bdb65ee155ae70f38439ce21668e1f828896f570aba3afdfc55f9eee490366bca8c9a77d18a3ddcd942d854324e0824a5e89be2c2dfa1470d1006e6627952a002b56c3e3bb37adbe9e7580dbc4cc59f4cfeb7d47d32540ec5a692667ac74477a4d45f83dc6d1a770a8f9070fcfb96e27e4a27be9258afbfc69820d185e0885d1167e8fb0c2db9588bda16207cc0f878ca497fd38ac920d4805336da2c8b9acad8ee9cf6636bc3db1e255d8ec43356dca17b24e5fefa53d7736648c2c6ff083b8be6f0287aadc679121fdb2e6bc95e88a45dcb584772c543204fdb4dfdd13d397adf66e3aa6a3ddd08181391cc096bf7437fb79d0ca8d1b2078e62be3998c64f563675da8b37966170bc9b2b7d6a0bc2ff4f8e36a723257ea9907395f2bc1fe78e9ab15f958c6c90ec5bd68de871ba56484bc3b7af781d3377048287b1c1c69c846a8df541ef2cf5cb946a2ba5a6f43baf02ec92adfe456b003923e61f2036c8e824802e18c6540a9ef4aa773d7055eda3f35d4a0b4c2a7fd5ccbc53638e0d172a672c8ca2a87e49f6db2c0308643be6b79bba604fd838fc583dd0325731a5e1bb90e773480c182e43d673519f0922a16a7a7857f438ed6b07eae41532d19dc32c30358491779e42067504e589c5b6b83cfe1ba390d4d44685728c6ebed45125ecd3bb3317618d0fcf154531212044959fc508c59e327a0921632dc133c06ca48dd9dd01425070f1fe55d8b72dbf78c4133de45074d84b4d9c1b3c9f3a1c4ca98fe11f619adad69334a523f9d7e9afce27e722c6dd4cc46e26295d6b5a4e7dbf5357f6e689571a5dd291ab7be835761e5e4f488b0ff681f5800bf4b7ecdd7c5078ccf812a65bd8dc7899f3bfb739582f16e4da2fb57be07e1a4197079a5fc50770ae97487a6f8e79972c8137cd5bb28af2263c2746337c625558b8ccbb3bf44edb7b692a6df897cfaed7d866a31331bc60a1f2f43ab3b23ce1bfde99f7f8668109c1c22b098da149300a6dded106423df2e693391b7 +MD = 8748824393f51c3259221007ffa84d3304f2fef336716733a249106f78b164217fd0dd5202fd2ce0400d456ec121a3b4 + +Len = 102400 +Msg = 239daa03ac02c03bd74ace9a592656eedb68703f510cbbfa8775994ffcfa9cd7f4a13b7ac92aca908250a946a64bbb435399198c8afe08a5cdca29faec5af07d1ce1578f4969d424ad148822a2a8b90bb44a82dcfb8ac935a8a072b9ddf5d2b8c2e6670cd5c4c640811fd4f8f344398c290412f74bb7e6f03f81dc5678d42bd10e36d1b71445882c26f8f68e41272410d74e31a4238e481fbbf4cf9764fee110295bff58aff30230c32754ac355a60dde9b047ad2b15d5094382b346497bdebd3bdd57b94dd61d948035581c76e4d73b85b2bcd80a5676f800b1f029d15408206b4243a197f7bf9f86a969a5adcd6f74d4ddf9ee69591432190cee09a2904981e2142ad7345dd19afd0bee0e821e12cffdb864b6ef249500b71816ad64378827c8da7424cd103ccd0de451209cdea79328cc66fa45c1e3aa025fcedfc052ad5b441d88500a19e680dcbaf9a3a41516097f9f68801238e47821687f655de89f657e64d023927fb9fb95184e5f41cb477927bbd011ff8f82b23dbb9208e501488d9f37b3650e4a9c855e83b81b1c09212a4ba80775b4d0a39f7de16d90fda58f1bcf1e99dd258376685f859fa1ddd68e6611ec7674d80331880a617ac54fdd5c5635a2ea54803131eac2a56bb72b3b7673a11184d6132e13b50bc3206f83b09787fa4a0f92c75cb454ac6c8426ae3fbf9a249f98620f5b316ea990c655412729f6459f6e5fa10ce7ee476053b50fea5223c21c1ce1719173fb0c4fd6403049f8eb3f287083b64ab2ffbb0b3e2ef6441756a212771ce4d9c1a35b88b7f8f81eedae106d7dc5af1dfdd130f5ae570a56f67bed0811d80e3a03b0bfc3d14542aef086dff6feee348eb0aacda40cfaf427d8d9ca8752e097bc21685f898cefb602eabdd44c59c6eca4b3d3baa2bedd5cbfa3b96216a2fb28670314646150bdfb21c19919f6f8158067ee9420772ec9e8274163dd3d69f0694492fbf5d48578ba135f63d37c41a397df4a3427a9c2854366981f62840f88015ab4673b6993e89ae1aa622d679e38da15adfdf6c2e4db138492351974fc8b99b1529e5da8e2d544928ce04d3d769bf1100135b64afb91018a16ec2b9498c1d85255e98419da075f2eec235b89319583d82c258ec76f70b47f0b8ec06c4cf16744a390d845e44594beb17480d036ee38761815a7c3a740d56b5b61ff857ee5ed8f26db80b366598b48c51be39cef6ebaf1ab4c28c50dc90b57edae11669863133cc412a5ebca09ebd70f60ae74c3dcae51cf143a5608d2ff4aa9bc1e9700348152677c6e76761e5c70778b06e11a02bf9f6bb305fd0025584c77d54da12020ded9f66204dbd460881de5e3156a5da693e26672b0425d88bf653f3fc60b5eeed2da590c8ea24a9614e541b10397f291d222aa9964ad88c4dc9ee943b25d2468075b78c23554428aabd1733df8f0428b25671e7048c7e7a156fe5d293920d95422673bcc21782302f3e764cf1bfeb55c34baaa3f8517e3e6d68d843982dbe47bce038a71799655c79431faaf9448b4cba622364d4225e55d035444bbb616afa5b1394dfb663640a137b71e258c56a5a123a8aae3a87a53cc865a86f6fc5aa19973106cb00fe14c578480b9782bb1f1a65553ee49df9d96fc06a833337d2d2221bd91cfd99d1ee1b32294b1f198e001a2e12bebc70e1617b52c4431ba601a9a0337c25ebd3776677bbafbf0d8fc6b3c5d723887a55d6e3dbea0386ad3cea6710888ad02a606704678f3bd5c757edb099eae83ab2af52c6fe1098cc4c6ef5b10f8585aa1da3194e67276e3df0f47b7d22f3d13409ffed817e40f4629daeac0dd9b51cf24a2e16aaf31ea7560ef7e87fed6c8f02c4c9ffb9c905b708058e85d41b9191674463e7b0a7cf879c65e4cd4f55cf7235979011c66ad9511b18810bba5195837770e6f4e5d1c48f9fba2d9241e8971b3ad6e4cc3dd036532a3b28b616f84b73817429d6b11da81fce6034c02e324dfa81272a778695971da401e80d709c2dd233b29ef5b8f7c4b8b6fcbcdf3abf7e80b6fcf3ac4727964116f1418a6d99b74ffcb0c8ea53eca50ad7e408681dfc835e3abcb2e2e6029e4df18db7b5549d721d5ae33a1d1858e356afbac9c33e5606d38b0afab3f9b32994d23bcd06cbf3d8eaccee65168ce8ea5cace553a912687391265c3d87d8b5c2d6279ff3f74a596638c126dc6f1809346d6e08486240a04417ab24ede72986e452700ecf2f462aa477e620f27f40265c0951780a873faa12c777f9ae5a62b328ca2a1ca0e745e41e388a6169cf9beccbc105c93c9075c24a312b4ed14a0aa6ea7dd45e3be7c0123dfb5c6c84f891b90e24d9803116699564d523a9093e87feb41e0d27d2895b317e20aab6e652b8178d956b119a71a1affd33ff7cb8b06107100b132e17446dce794913b4f0968584e4a33911db4ab46e7dce1d4e52482c7c88c5a4b57cb18e4599f515fb561c709d8dcea1e575f9f84d51141b92885e50bb78ee3072655923336a85200e695d0fadf3885420ed1803e9319668fdad7b74307ae524c98393c31455a9d042bce0b942a050be38c31d5dbe79e583c44417ed98093b104f3a09e47505a3955cc34013f83ec85eb17a827c39a4520aaaeecc434eae6071680b141db1d532ed911ee3964b095fa41f85efd5d74b8c5bf5fff10bc0d4e5d6a8795ac5776eb857a42253b697aa772cd777adf133c9f4f65a1a3ebd9b174bae85073672121ca451ea60090b8a9cbf677db25554cbca1c783ba00dcf39dff26782274fba3e69976af86a8bfb705a88c276e86e871ba673401f33d6b729a98aa0247c0ef438f0020142a4450d055e73fc576c61fe8ff999ec6948320be70e74c6e057ecb6be2a64c35dafdcc6a632f14393c0c831a53de0dbce5f9843fe79316a4a5d61882a93402fadefbbaecf529156b08819b6f7dde8aca2ec81e5ec645108c6ef15cf0aa51484b7d65a2c0d47c4944224cef5047421cd8b6177681d7a4410faaf7221caea6281001630c4dc8d1b8aad197072377b2cccfc60f1512e059b1139f10ef707cdba931b01f81fb99d06b865e876c51d6d5a195a6d88277aa0b688197624d53de97d396d3be88320e2069c11146a5432c54a3139e99451afd636f42d818c32d9a82af28b16baa5af06aba4132fc3a6041d6da31f67ae761a109cd3caa58da67794544cd944c6edb075567f009d0b30fdc044fd8f5a4efb65da48a59574a186743889b6ec2895c1e1b8a77b5deeb99bac78609eee43fe580fadcaf8026180896c0f2baf4844bfc89f4b0f277f87574c8c803105c0b725226415b42995ee72f5cb72cab4522bad7855970e120a095caa1a8246d0bb266bd12f7c64e8b48e21722f2de764be4fd747b14724b971e7325ad2e9027e22143aeabe7c8d8402c2e474e37af21ec123d5bd1eb5d38c4ba380c5324ef46c89f30ad59d807ea9f52f6474a4f47b612f3a115f1a7dab08fbc0c08fe50ebd3a776554384912b8b900160a07c024f3ca4d05229411090bce06b16a0137c2ad466ecdbf794dbddc4fb8294d94e176fbc8af1771f2bed28639f107f5cfb6e5454ed4aea52f17ec59cc81ebb7a27584e3dac9e3980150849aeb4f36ec41eef125824d8a9db04428a1be01afd0b6e8b95c7f21fc0d369279ca3075c0c61e4c60ceaf3dd411a33efd44929c181158d79eb6244bb33a08e13c84d819381bab6bde91142a3da97e74c4d2f8c5a7020ebeaf9178abcba70ec9476b108dff457fa9a51d6f9709adb89229bd4f12cf1b2f0a667edac687fc9eb714ed9858a8dc11a26ee3f008dac6d7f39664041802d550474dced9208a736f374f7cce1da767f7c2965573f4236d53359577c629e4c908f1d001e24e35d3c6c631a920218d4198a6b61239ed6619c0b4a158f3ece75ebf96a7c884b43c765be075e34d28bd218aab388ad0693544971d34981bc58d0efaa20f833ed6e0d3851286cb9387d950346ca82fc5dbf3864ccbe9b5bc38386230b0a1b28f3ad583d8e8eeb291b344862c579f8188da3347584d1b2243d99bf1082ef8e6e4648d0fddb00848c65f911be8f86920a7c87710501d537e411e0a23c7896f90dcc879cffa147dfebfd14189d0cb9f7d914b2169baa91d1a327a1583156c8020e6fb2e5cb492ba34dcbcd868aa4dcd08d3b6e4cc0e9cf296a67230877824d54781610d2ea397479bbb76c830abfb5c42fdb013bfb2555e740b9b0db9466ed9553a9ea8ce3dbea083ca93836a7c50e7cc5dbb40ad4c7ecb22e058ef91268706ea70f883a3e9655f9d8897ac8e81ead9f5a23cfe2d3355c323b33068979f29d867d32320584d17cf3973f7b6155325ad6f39b9aea81d86d106f2b60b44f6b3d86dcf930153cf6289f82b380277769dfc99a2b5d4b6518e7f4d2d5e4a11e3b1815cd4cc991ee6c21a4a0ced445d52c031f56bb5f2c085e91856d19da796dc9f6dc571347a1239b2facfa76bee1f8e18d813033e9b6f010346c47e08963c57f9f828236f06f61eb1a5c9694852466f246962e7b4310a798985168103a88adc4dab0569e0d2033c4a95e7e117235a9c5f6075b7bb564b55c85dad993350fad00710edc31e5df1e8ea65abad3cd3c49c4657bbc1c87d7a0c6c3b2a14fc2214d9c2a431bd8c2d2acb1d7f750c4de63cc555a9b5b440093f23c197fc82e29e616fecef81b7cea21649504de4acbecd0bce29e0f3fdc69c0322851ea5717b1858f8f25d4e503a6f5cea2f7b7afcf41aba0d2fa7e70cd0a85e9f1319a55f1a32741b7f68080573e767341772988ba231d018d3390f7fd2b0b9eff8238caa647f3b2df0ba3f45efacbdad84bdcdc73db4e667b14eedb56147ad9ba0b6bbf1de5126c6d2ae64a02221d8cd13c79b3e2b0655704644024bf0df9238a96dc3a3ec5abf7cb1cf18929fd930f9212a816efec8a5c90ea2dda1f5db002d7e93246f12fe7d95fa86bb9bdd456ed8595100b82d5e7fe876f5e06604dc80009ce16e81e6aee9c9398fde3a5ef8dad108c5a9d83b5a1c451bb7bb0692569a5880a302aadbfe7c7ceb34e0ec99661d89dc12dd1dad2e33756962bde222dba78bc6827138676fae377c007421111faf593fa32b16f75d3ddfec8169a73ace4010eafa4ab92d75177f888cf8765a77f8c5a0011442ae59941b218e5eb44ec0ec8e4a64efbb729110bb8d34fe6ada218265a9b7192f46c5ee8d85040da7d336156a717ce0adeb665281f682e66d148ef4afa92faa4b3504a5cda36ce6d06ca0532c0c8cbe1f0c4735595111510b9e22980a5af558151da84241e9338aec7f921e49581ee86d39c631a8294acea4eb7f150c0b82a31b45235c80e2e25a5a907def5900cdf0371865eff4eba9aff76116d43b47620bdc60084d010d13e59923e63ec18304560b0c98c8d614b88541a36c5e0e9b1e02c6d2b9ac58e422bd26be4d95194b4c8a37aaf144b240f1df3236f22afc7311286931d9e2fef4a93181d4267ad6e6111d6b67e1ec1fdce02e37704ac39b7bd5dd41f1cb9949bb11f348fa036860dffc8004c7fd478554fde2c003d8a051f1f691df971137efa3f762da8466d67d956952a23fa5cf7955b5ad7a462e59c681ddf690964d37474bc400b527b35d53a2d1e5b2537dec623ba1eea4dbae484fb8067c0373c22ff71ef27d67488b65a984d0e9b397d836e6934d170e28eb0473e0fa82b6b4327a659a1d197f5b5177d5b7f0bf247167276cd901b6e4b26706c9b944bb18dbf0bf1949ae656bf4a81c7eb89bd693848d466b998a6ee70ca4d7c79d5f75b85f9f5688aa20f19b98f1bbeb133ce07f25cd1c7941217f739c26ffe409c55303b390e94a381f4eacbcc0eec1347e3d55e9a9020c6c719928e55fd7a57af0d3897c77dfc48fe3cd0dd4881d97a8ba7d964493af9b77f52c657cd1f7928d6c67b82ea6b28dfe38fd4d74c9d0b4fc9bf1dedb2f6dacf026a9b7c70ff821adb2802e2eb00a1d2f697fca120890cf8c7d6a9df1eed4c76170a19e587c21d9585ddd4a11263ee8700f952240c6e64df4e928324d347d61488da497a5993d2019b8af9a5a7bd9768c860de465874996a259bb5a21a2b01111b81322430982ac7e6da7ad8f23525db1872a7f04bc23503169a47433ac154d599a8dcc952f9ac4d2e725e203bf41f4ab6d7b50b2e81c011e7373fed7d3257c8c9f6505208dfe1fc3afdad67c9220d1c6b38107d49d8c0fc6119a78a29a69252751495a89a724f3cd4216f94e5e677b9ff3dc130e4f0bf2b4ce9860187448edc63a9b3b150d98076c286ad8fd768e6893a8dcf0a47f14408704ee53adf35d2cc5c5eb357723dfc10cdd56f40e7d1e2f4e4d142f5ba02d8fa94f1cb1d79a1e68c28db9c8147c54974bdb6bb8f5d49f162c4b022d8844b0269827940929caf53828fc77617189af1085ad09b6480f79d3ba3d3789aeef54abd008f4d819187a01859ca4a002de37c366ccc16a799046de749e14b254028385fd7dbf8d2a15255b54d8d1f26cec97065ba513440f097e9ce7e83a460c20b55b5cf044b6d1138fbc035b8fd70437457fc0d08fe17cdd99a580a618a33bbc72828afb34e3a2c6019a3d7f3ecc6d30bb8652d997b1478f207eeb422058675833921418f082239f337c5fbe4f510c8b61c07e2abb4203809b9f6456f1d41366811064b41810b7f18dd8e6b361f36689f0a4af4e6af21574636da86efdb4d479e37409670c1df47f89466ee8f7321fceb0a962af476011bd208003c4b4690f04c3338eac5d184d9bae3b54b98f7b7cbc5a4534d7a11a6cdd5b6d2322a67f3789b8e550ee8b8e47d8853e34bf8b5e11f5361e9252386fab476c9b62f35445e29b2cffecc807ee57b876b58b657b5883ebdc8c17a94dfe31adec816fa14e7ba49ba7e9dea352c711ae1b37d545ffe92712c62411478244b45353b595c6e58ed21da249931b1c86fa4beb3b8ecb697e900c8b5d2bb755b197ea2abe71deb9de1f93b485a69995dc65f45f47248048b7333b84bdd36338e350d4d9f280534c07c190472485a98f060949ffd142ef2df1a5225acc84e5bc4863a5f9f84dbf1c9a8c85e2acbcb548b248af3560467279dc4a4365efccb9506f64d00336369c9be4c4f71f94b867535fa8b6a88acbb4ccd5b7214ebe275885b6c8d57e42d7565a950f664663051a4f7cadd2c1a73f10975c604e6dbe113ddcbd1448d394ac86d919b055ffae2f589d87cc96094c0d3059feda2d5b4606f3c5e0bb8c9bb222a887f17c48c3bc93acbe0f9972f7ffd27e952b8940900c94f4b1d033134f01d635e7aab7b11b34de71217278fc06191b65c970f21a946837cb50fa1f9f662a43a988a3f7116ead7c60886eff93cc5e4480775da93dd0ff6be203cce5736991d78deb7bcefc467cd9d5334391cca305ea592f40130cfe28adc35ad70921c1cf2e5d70a083d42b299359b29ee41932c6794a41c6c41a447a7a09b6970f3d27389492c8a0ca3b953a156896ef4b0be4067dee5f6040d87c6b5d0fa78b7c27d264c6c8540b06951d24fc7c40a35b174f5c64bff89afde9ee81c35fce32c4748bda1168832ddd631b80a52f505988cddd1eca397dd56fa1134449747b1b6c959c1f20ee06a7933828d39bdc4680488205e41ae58fbe2aa093396be83ea3f92d8baa61d33f06dc86bd746d1d83a63ee66242e34e7ea3936ae6b78715997aee8ee2e250b2acaa2dd15209856da839c06d6aa19fcefb245e62766537a70bfeb14c3a7d7a06c02ffbaa8ef9714714b971899786bcf165cec029dac909f726add5d7eac24a3a2a06ba74bcdabd3469b3c6cd6168d7504ef18d137c395a904a06e0d47c674de73aad0eb26413c5a017a734ab60de5b66273b09c1e35cc5fd06a856b487b2f17882a15cf62d3b27249f124f961e3dd5ad8f19cab798a9b8b7ecf0abea656bd178827229b270b75e3c60737c2fe23dc280d6fc44671486cf3b6d8e64f8cdc86a61caadf979c72ed7521c494edb55249e9aaf810b52ef9a6601f8cff662097f38becba340aea8f83ef023023c2b0fa8e655691683fd724b19b61f33e4a8a0e6a909f5f093e38ea9d1b1054cd8814a21264ba44b42e9452f56925158b45f3c9547bdda14679af0ca5bff43778890cd33dae7e18dcc88f0ada9513fbcf9d83511a155089d304777c01a456e10d0bbd14770a4916c856edd4c8e5d2acf09b612d22269e1e9827b7c21b92dc5b755752ed2842c344601fd93827230b30d887b6e5d6766f697d299867595131ac96b5f1e6b81c95ac8d6d79bf5f1565906da9a9029dcc6c706b5441f225a8fbdc5a6cc388906167563586f5f0d88489d39948630bdef23c3d48eedaebe660e3f4a8c6ef5a16d9e04841b37654fa371e0143ae0b8803ae88d8fe408ddb034190fb67099de5b34ba98c9a3c24712ef8cd235321ca0173c9f84773928049e613abf9817ef7afcf806a2a266926d2da8d3e3fb0eac8ff960b3394912cdbbdf69edbf7dd6d2242d341ca28cf82a5fc68bf186044512c09d43be2c73e55c7bf9baac9fb631e4926255471907ccec8793e56038bf69d1fa89523ace664566cd83dfe1c10fbd892e12f81086a1596b8cfc61aa9caae18c86341893afbea77f18f44637d3b8de525fd589237bc81229c8966d3af24540850c24036330db8007e6d19a19486018b2b02074da590aaba9d2c8848c0a2d1b6de4dfaf24025b6393df9228008f83f13cc76a67cfbed77a6e3429342824a0b6a9b8dd884094acc6a54bbc8c8829930c52fe39ce5e0dcd02d9553ef899d26eb6cae0940b63584e2daeb3b7340a972bae87dd05151fd639d99dbe503e5ba3e590340499b4e6ddbe0d22b028cb1268ac6c6ddc62d87fa8dc630de82391e81983e7879d652155858ae9a3b9779e3a0ea3da5784c98517e5f343bc6b1f8fb993e80138037cbd39f02347a4482a49ec09805ce76eafa7531e3cd01bbfba945ab38091c7ef47050e9e25bba6e4c73aa2e9e0889fe28bbbcbc207acce4e6b2c45e8cbfdb9a96a853dffe09a1e07c50ce91042c1d388f43eec71e24e269fc7c405b448c98fda4daa629602778c39aa2d391d05bd44da6fad3f9e6b18c73c56f814968579acea6700f6e109e873e2ed182d70c7cf465f54932fb7f0b122ac8f34ed1fe082a3625d157561454167ac145a10bbf77c6a70596d574f118bcb58d71719b1086905da865468b76336d9fda65f8d5f234923c5d4a820d45c2d23c9c4fb04ea5bb146ab794a3b23e22d4d4029b51dbac9aa04c86ce026e82ef9be97ef7d492c68efe86dac6387672089241c04f72c8f59337fe06891d3eb08960e2bacfa5117ae795d89a63cb7c1ccff00f9ce72442d507a07a67e29a26d877694fd841ea70c9ae22897ed3256f435e36661ecc2ff155dc24e9304343cd00a1fe5960b46d5abbcbedc00f7e0ef5f09dac6dcf665b7f7cfb0973ea13dedc33ef6728db90f47559273ea6d3cd4db62a74994d361d7091534c973f1cb934fa7649ebe3d13c4869aaa85d635426ac5cf9cb472ddc5a35d2e0b718764e9f0dd0d397d4b2c82231dfb637911e1af2f18c658afc36478373e72d25d23f092c310551c168be4aa9767f86bd24ffab9ae5f0779901900102f27b427c0ec3d3c86742f8aff02fde39e1f021205c2f9184503036e09e62923d7a3425a6142937db782fd14ab32d0d3a38db8f4a82d6541afaf4ab481ad4809ed3bae0892c9abacd2d73e378fbdf5d1444e7d921dd1b7ac3aae3dcb7bf10558bc4b67b0f9e3ee6074cb737220e6d5830cdbd068fb7278de62aa5d316d33b986e17d0fc1fb13c42ef9da2d331350086f49b041e7b562215ed40e3984e9f80d2ae92af6da0afbd56eeeaddc18bb8c06ec975652acc0333983fb54531456b058ab3fefcd57cdee8ab6df90f091adfd498182488316c0682a0445072a8e57ff248e5225e3d9a87e6c8d293e1b1c4f2648c4771143b42a738b464db130515227095acc87eace2f1de358680fbc373389ad3c021b251362e7d5d071ccf4ebc9da7f770b6032a3c66f97bf28804460efa9cf4e9ff097930e2782195dd4f8dc438bef899b596c0902c5f217d73a5437d8092772cd2c2bd180d528b76e43ac9143bdd208f8ddf74c68c37af8e0885c1a812a5e5f0618425d6f5322012f9390b94ee2ef6ba068550c6cea9ae8f104dc877f8fcc49c75f8b853e2416ad2e6f45a2c99d60283e8315c783adfa5e754a461d279c19f9ad6c57e751ea7f01c7212bec48300cc50fa8a9fc518fe1cfe993392a1df19fb514c947f25f08b3a59643c3f44f5d2dd8a05392193af319b3caaa165cc702e62299f0dc44c9f15d1f28519e6943774bc9ad1e5eacc489eab094e97e23b75285b8a96d754d0746f3c4d9d52ba9d910ff1e6263703562b6dd3cd4cbd10d6352f6fdcfb9b379bb7be03d4748ec3454bcb05d8ccd7731ba0c79cf06dbaf786fa69248794007693b02dafeed1760a75accf7fd78a6c4201efd48dda79379f310a0105f32aaf18a2a6e1c7027db19616fd44e74a2a9e78f25fbb2ef338db11c0ae1d9789844f25afe305d37a41e8700e8751c69b72171ed539a507a4714f541c2ee664af6c89a6a1adbf5bbde3c39e478f1fa2312b7c3c91c6b9a153ee3a702bd283f3cea805a2624d37e8332be92aa760d606741d78d8104b20836a75456ed7e21ccc4f016a21d90b970144e3031b18419d77cc0fb1fc391301354fcf185507a5db78983f612bee2e042f58d1b87a81799c7fa1cacfaff46585406cc45a2da364e67e132a91c98900a8f9d7bfb14ec951fca55b177bfa2988d32b271bb3fe926765662789a30292c7abe72973969fda11e57162bc5de3c0c5157eea9ecdd1bef681b93b263edff1cc3581b6b50e769b017e6c1f811c75a26470c21c134dad0e5961fdb9c70b668f576c50e74fc1daf468f01df83060b5b5ad0e7e2443de9b6ad72fbd0835b1a152af7bdb220758d3cd90620d568fd3ade2e7173a6cf626a2baba107e9038d998231e88aad0a77b690ebffdc2a2681b64125cb37e5bf3cdcae6482ecab9972b52ebeabc465af5d1a5a03ee9c64281e0e22b5208d359047c1bd7cab128eb1c4ed7905c3e3626ba038e69554da1a0a2cb30161241c0ceefdb9e7387c1218e8deb2ffcbc37029ebdb82c524b51d922958355bce484ce227d915aa3c9843c0ab3a9631552ce3329c89988436a1ff83221b159040ff983be76475750d62501c7563179c5652c502ea14ea925f8dc86370dfd45d5ddca6a08a2a49e60f8caf82e3e2a7cf23f78e117117e98de3eb30999220e2019941c0869c95136bd749caaa5323d718626db6f4be0d15b5884ca0bbf288df2b77d1ae74ab2f5274d95c29e95fc126268637d8132d6f1fc7912491313e721c397e0e98e1126397afaa2645c67625056803e859f34bb83822b2f59aafc26739ca105b48528edc536aae2ac6d812da056b6fe1b51b95632f655242256e2af2b84bd33a155f5cf4063479ec0584d25a969f2ed69202970a35fdf3acba22d48f084d3b4d885e294520ab81fc8a5311114971c519493ecd181c5b0b67c1346ba6aa3cbce829d5503a432e5aaeddd97ba88e81c73c7336a417231b2e35f3393cc42e98dcac725b8e5dee3b68a5687e6e9ae65da9b28860c881ea9cc0899897d48205e01f0cea67202a82513052d2b86642e153f11df16386d2f38e66c559d6df4ab0b1087c0a8eb22a801e4659751dff3af01311c156b57ba4ae3e958b9f8c99a8cf7a0d9c4b18b0d897e11f0be825960d92f9905f20bd23519b4bb14ed21fa006b2a9a2c034bba8af1a582efca455c7255a960159d800fa744b245e81aa069efeeade7c9a5fde063897d20a9e32350f0cb776c913f5278d773e56f1c68fe7d2ec0876df8d14f655ef80ed1682fa39da3e29fa7c4ff07748f4d5622f7fec29d8787c01600afcab144e6607e72d94dab53432bf8f506296a957a0c44c2057433c0ec61c92b68f52cdcfd7c101107a9e2c79622466b7b40c4b2a30fbec6a49da6a296716ebf24593ff0e2696d8ae240abc9828d7b6f87d2e9ae7068794804c45ef52ef8ec050a7c5046402f7f2891996c1faf737e4952694151881e5c934c71c3815bff2d4543e8c9a8bdd72c323c3c8e92c6dc3741038c346394394eeea52c3d0dc68c18c7f62510dc01675eef0db27aea6fd18e9fc3c42aab3bc239a0377e346316aa95d24cb98faab5eafca82a8297ef51586baab9978bf226c004f229ee1049f45e8caf6d2eacdc8165eea6bb344c69157cb6ab0e8fbf00fc3b972ca405398808b2e5a7800cd1380ce21c2ee951031f624257eae9342e9d663cda96cf4917e8f9ad8800aed96588ff686e8bdb6023dae1b436af730d41910cc9b577d344123070575e021e1fd0920100cc03bbe914623ad93c42d3a25ea395ed1019d77e932a14b94df7f965791fbbb11ee0ae743d7f14b94fea327bef9daaadd3c2047e009c8eda3e256634caf6d5834c68de8a08f9175d58f1b8215a45f213e6bb82ccc34f85c31ad58e132ae1f67e3ee473b2dc97eccc409d8c1b09641626314c78f0420ba27ac750988a01a6c6abdc9b957521223b0eed37d7f162c1bdee9cbc0e72e7978d092fdbad21b80eef110fd76a5a4063ab2c4906c02ccf26907410556edb19bded7738c1f561b5e116b8bdde1de99f1fe52d3b547053b65936bf735dbdb33f436acdcc4897d161e7e6a9cffad4aaa7219119aa670fee812358d7af1d2680c3f2ad12d2babcfa24e704eb2e70b726c03056f98089c485974c9ec5aaddcfcc0c925e4e325d8b6267ab1b86c08bf0e45313dcd4a4ffb7a1609caf904ee5e01e82eb258ad47a2d9390f9d1836f92a46cc693ccb2fe1411c944db3440817c82ff8dc4a8cda058c915099acee922ccfe478378ce9b760ffa86abd0d4de2debdcf695e7921f7e41886e3856bbc0c18223fcf08a8998f437995ffd443871397b188b021a8988567b922887f4401133fd3e137790a6b060d617dca2ff08018d715b463c263511104f0eca5d3e04e3628275157f54cceca2329b8503c9eb971118d0b0abd340c1940524dd21fab03e355cf0896f9ca452a2934ee3866a8939adb79c50b8e84fa1cae5fee83df1eb2a94d1d8f7b131d6ed4943587d94a98bf24995eaaec92f0db79a37c17318eb5eb0672b55e7acdb09c27d89e0db964f99c7cdfbe053486e1f0ded4298071ab0b1d796b08ee2c861e5db27ac0e86f2245ac22131a6c69b6e30aba94fa92bab078ba80aa9ac6f6d8d143f30f50b0512f077ea2d7f658f2cf7e697b8a61c6733b99429a95dd61703253bf67eacffe05c7b9747da2d453761d1e9db008f1a431a8f75645c163561f2f20509fb1912a03a8d63e20e826d45a4c3e27f6b52cb48c84ed6610c1af1d5a3bc177f8d836acc13ed83c2b2c706415c967989e03656fda6c15e279fb331fb7c4b1c601e3432ec4e649eefaf4537b4f01255034684e3ea1aafb6beff261d5ce666bab49572908955ba5c72eb412925caff1ff487859c988ddf862e12bedf7f4ad79984da86ac2a8fb767525006031c51257e658a7ea78e681a757fc2c29cec0e6462d7d5b8af5764226497c5dbee21ed4c1b5d37ba2c5411282bbaf5797f2c9cd6bdb66e4fc1983cc5fe4a310712bd063b9de476805473f2d151e7952cadc65af451288d9509767f66db727ed3967704bbad022f17467271dd8f0c89245142b288c7351ad0b07895cea3179387a3d85094f3c04ac82bd9f8138c33b9a691290b58c6e5fd49dd27e7c5ff41586b6067508e1625afdb2b31ee3cf1630dfd9502cc2ef7411e48b909db1397f9b5c6f6ac6d70bf3a47986d01bb2065a56d7086555fd0025065146ca8da7f124692e28c2f0f049506f8461ad1c6879100c1468cab2b068e1bbbf71d8c4dd21831d7054b799f104191ab2f592a79391c7cf1c8ce8a989a43a80637f53b9ad453c16c785b11835d6ae3499953923bfdaf21e53e757d0e52cb01301d1b3f2b4d68fe3983e37f25b3b905b8cd3093759df2f886f0a809f5f8cb2e1ff1b720660502f0276d0b4cecdad6fee21317b58ddf8c08ba2590b8b552ee35bdfbf364b5c4c7a01c80fdff3f9968d6adb2307fec8c26596a265511b629d920f082f5957f515f150102de2088b9179503f4a479fa6c67f47f3c1e9c614437f7a2d0e53a2b757357bf3cd9372e038d44cb1f9b2b1f46f8e0dfad13e21c6daec0ba2becdc23f8ab6f3c7613cd993c6febed7c3c1ec4e3802574c15e6a506ae68520dc3202cea2ae6462f8b769302f68905053b0d94f0ca8cc24c224bc6604894dbc2bde34943a253e1809eb945da31e3ddeec1fe42a8718dcd9f69061c4033c21765f18fbdd8ab70645f2d7d5885f39f97e8eb0c8bb1c775d7aa7c7e0d42fa90836c20add11580dc3d3fca5b4172c62cd18838b0c6c956e58ef1bf4c1fd50780ae49ad964986dce7da96c7ab973d241bf9511d938a4b9a4d3209a3d8da62d512f6830b018db91a33caf8d816d04197ddadb81c2d5ca4fc2d9f56ecacb398fda80aaccb580408b3409cda6df5732c9be23d31b6d6a48206f6f56dec4031d3ebe0492b61024302528ebebfebf0066a9aea46526037f85f4549f2b3153beba02a3c30935ea8c142528ebf1de47ee0682f3647aecab9ce99218705cb09e8278a332c6f5926b415254db10c78e9fab7c1c356bf8b38e4adcc464ebd1a3cedabfe812144016baca547aea625656f0bf2e3f1dc2c9c4d310c650e01672520a4bf79aebb5d00600af805ffce9847e62b086b35270d367a3770fff33fb28047b5f888167b28fad647940cabaae3a4d1c08ea3f7d7d00e326061f9906a2d902499dda652c1263520faffb85cbb8610c474ec4ad46f2368283455fe600116e959b8d550ee2dd363c28d91856d90fdf040a0b7bc354d65f8ae3bc35aeca52d00399b86244321cefb4d87f010689bc9e7a8ec6774a503162446df40ab80b6de5946da567cec4d67602472a1d5d85c684b9fa072009e10b27f84a7447cd6c6897923cdcce753f13b36e9c61d42275357b087757decab06d96eea1c452b5954dcd4331e6fd014bdb8e4000ad8e1f00126aae2d3c1953655e976d9b6d95382d246ff1714a5e3a9137efbf9a95b31acf6438f44340396da7e712be60f6761dddf364e2279057e7b92ebe3493a1abdc8a33cf22e2eba6e01e0fef2a17e75f2e4cc4965e794152d26bc9e3e71259df2dd887168031c4c87473de16f7e9c9b731229eecaf8fe4b6c14e0f46204046b5d46169f555595308f14e5c6f6dfd22e6ef098a4e1c9201eb7d0a08cf2744ef969bcee054eb8120cc1e5692e3d67c7d5430a78ea4ecaa2159ce48bc674347dceb48c7f51b88d2b47dc4348758788d5f69bca4b5d668fecb687bb034f4be71961aa4f3af3275749684ab9043b79d59528d5aa904cdd8b787804ee9775fdee9a48d77fb1682fa8e4e479b10cfe98b07dd28d45e856f84fcdd090d9c8d91ecd88eaa898632f15e4865305c5f32d58ac089a2f06a3fa5b3f6566b81707f712f65dddba13d0c68ebcb62a6b5237462e4acdc6377763a58aecd790e720e54e6f1b9188789c8abd0e73fcd1070059e7adff260d330297f6ebea8ce5aa81d14da78fbc71507ce170f9bcc2fd853acb704c5bb9d5ae52c15d129afdeb8ea46c7340e5473efe4f7590f4f980e6527c1c7e7dc2e1a615c260467370c308e013176dcf9eca37ce7ed78b64bcef51fb3ebd70d6d745f4e5ec0551a32e44d45b68529b981eadf24da557ceed694696ec1d3ed5dbfb4f48bb3a20fd06062bb46cfeae6b5f077af4f83da6e9e3912f4ba172014bf1c17627e23733a730bab04f8140ab7b78cba9c65ac2255aebd721d6b7e7b511bcac5309176dbdfea79eaafc24f8aa3a89fdc2dce1bd53905a7d96ce9be8cae5912e5e62b7384041df245450e4615b26e6f04ebf3999c228d42716a9d9ffa32623c9f0cb3e413b4f4c0e44d43c251edf2455b5c3aed1f192dd5629eede96ee51c901d2b938f33f4572af04fc88be65b1c68090a0ce10525cda7d49142638fd0705684ca323c8ace2e7791d407697d05d522357dd23bf64f5501eec905d706fa46d5ff72f8b5c04961f0ee636724bef103b9073bf2c49c9eae2bd8d09c0b7a6c8756b3aa4dc17e6dd8dd3084508350298f76a8ced6449c1abe6dbb2e71c7942c1921cbfa99276c437c867ebf2a50dcb562a140bee483a1cb6e0fbf69ead5fc44e67e6dea44b031d23332019d5e51099b6382f691864851baa7580b0b71fc59bbd5b5c203b6247523e62ae1a5524f80e57960f3d1235c54ee4f92c89c6d03539acd0df1cc584be23c7eb745606f11e89b8e855f052288536f4f031da246b393e8b8cf22ce90ec1e27e11f55541d61eac3893761b6ed92f64690f333a763d4c1ad7d447f8fc7d1d1ecf9aa3b0bc5052e6751bf216beb42e47af9ac31322e2e85f204b12d9966c0a491aca21c0dcdc65b8ed065c8ac8462c613717540cc0e8885be35615774d3823e20e44d23e09f6c1941ed707e0220b8431ae29588fb6bab6c19f89b23a678df49a088f5750ea1bf1287902a6af3270e04963355304aae60e00b35a6b9b9bc9e6a1a80e03d1f3d87eb68a1d9b509012ab08f4cfd613e3d6d899dd4cb423506894b95b456a199da8b4fec09c686cc17d4f00d15d54261819a11d6bd52e6a0c06694190ca1c906df94e41cae3906c3cfd66c197624fc3ae2b11dbfd883cc8451feedaf7008deedb66a52ff79795d7692f7cbba5734b651c978585e0ea51d682119fc5dc8d208d7c6d5429d52d0b26dc9feb6f9a04b992f9cb967bd450200d5987f6c2dfc486e4b779d5cff22842d31dab4d4dc39b2cd5bc43af5e466e09e521ef7e327f4b239d13189472ccfdef8492fe1ce6e0ab1795daac4a8d95a881f671b4a0952985890f15c62ac2c4326383d2e4d4bb4fb8fc5beb51e28a60742aa9cf74088b6d1819c3460f0320864a4189641bff4b8f596da054c121e535756677a1aa1055b85768521a6fb82c71ca0bedbcf007181de0ce0bad96632e6310b7f88ec352b4a9d807241944b43715261529440d96917a03afe66c3e30b697caa1a4ed6c49f8a02e58b1a93a71e0fee30fd49fb0f848321685d90725152e3227b5f553e150c239aedfa360cd9bba8d755e6836a6d6bcc4bde25c04e78ae5d0ac677248df1181e4fe2e41d65a7c144f71837c9f4bac6fa04e37d7ebf1fc8de1cd38a442c206b82080a745508dad9eb35c015a401bd3c1636c08d532d10476e40e9bf3b816aae57adafcf685b3aaaa67997aa9bf93f7626c8be7ec60011d4155e523e93f69789a5251720dec88edd7cabe31e3645081c35a2237860a0eb17dc5e5430d3f26ea3755a8a8d3db5a01976b4ed99fd4be0d548ac37a2a77566b7ca2838bd84ddb8a5ce33523e0f8c36079b7afd4279748f4969ce442525e8495de8a5460c2d1e3d36b998b65cdbb4194ef3e65b413128dc219ff09029625f5eb03dbbc546561fc5ff3d71fd0f2a95119786e04ebfadd09105f3fa64d5e5436b59d153ff92884718a862a6707e8397e58a5d511fe476d2749c6bd4085136fd39ffac563a1949fefdd8302057d26e225fce7f1f17d713984e8f1266c4c6ddf3904bd7aabf0224ac3e37b0c5fa32739e450cf4347cc10c88e685ed99e05c628f37e55939d6769eb9a16ee97ea0c71b7360ebc57696c9ea0c06270653a33a4e38f8743ae9c69d418eef25e33492b9ed097814f9cfaf18348b741d647d5789295599a082a4d99e9491ef03a7cd192f72c9552e98260dd5726df90e0f0042707950e3133a5155a21f2b6bb13c337b513019bee2ab62f9292d195da310c2ac18c8909e726ad883d06bc429d7aa4c0048b1627cd8386dbb3cebf968836eaddfa89d7d92681821ab51ffc5f31cfa02f23c7d0d58b74a2e9b353774e25631a82249817f869b4e13154c63948f28333b97541a801728e68de13c96f292c6629abc23fbfe44b3139808ea209bc5a45de139b9122584d21672d47b92db4179076df65d936292597097ce53bd415f3881db1e93ed63665ee1c5bd17b298b7172b081820d11339356bf9adaec2ed238ba6118e0931a18473506ee4 +MD = d558f26d7e8e293a3911d606e7b7c822a92e28675a8e92389ca27ab0cbe71b2debbf0c360c8d33586c7a374550266db2 + diff --git a/vendor/ring/third_party/NIST/SHAVS/SHA384Monte.rsp b/vendor/ring/third_party/NIST/SHAVS/SHA384Monte.rsp new file mode 100644 index 00000000..0d5370c1 --- /dev/null +++ b/vendor/ring/third_party/NIST/SHAVS/SHA384Monte.rsp @@ -0,0 +1,309 @@ +# CAVS 11.1 +# "SHA-384 Monte" information for "sha_values" +# SHA-384 tests are configured for BYTE oriented implementations +# Generated on Wed May 11 17:26:04 2011 + +[L = 48] + +Seed = edff07255c71b54a9beae52cdfa083569a08be89949cbba73ddc8acf429359ca5e5be7a673633ca0d9709848f522a9df + +COUNT = 0 +MD = e81b86c49a38feddfd185f71ca7da6732a053ed4a2640d52d27f53f9f76422650b0e93645301ac99f8295d6f820f1035 + +COUNT = 1 +MD = 1d6bd21713bffd50946a10c39a7742d740e8f271f0c8f643d4c95375094fd9bf29d89ee61a76053f22e44a4b058a64ed + +COUNT = 2 +MD = 425167b66ae965bd7d68515b54ebfa16f33d2bdb2147a4eac515a75224cd19cea564d692017d2a1c41c1a3f68bb5a209 + +COUNT = 3 +MD = 9e7477ffd4baad1fcca035f4687b35ed47a57832fb27d131eb8018fcb41edf4d5e25874466d2e2d61ae3accdfc7aa364 + +COUNT = 4 +MD = d7b4d4e779ca70c8d065630db1f9128ee43b4bde08a81bce13d48659b6ef47b6cfc802af6d8756f6cd43c709bb445bab + +COUNT = 5 +MD = a038eaa91772d458a7339612f6a9214e6550f78d5870d91fa7a3dc1c2321e511759c159a371475dda7ad1fd7f51ac82b + +COUNT = 6 +MD = 8552b4ea2da9f855fcc7230ac88ecb1c3cb4841cc28e0495bf1ab97d100d4e4c60a1c51949d26723415f560da2951bb0 + +COUNT = 7 +MD = 668338b2e661d9e25b799d7329e55629b62416ee4d42d2e55245ffe7092e7ae4a3da6903944d532c2a88e4632f9a4b36 + +COUNT = 8 +MD = c40cd19cb770b1fe81135fcb9223ffb9ef50340d13660658ba60656a88f4ea08ee3b572680e2b4abbaf4392486ea589a + +COUNT = 9 +MD = 540c154e82b57914abc0452990abf988e46a2f65b40f5e9ef80a38c7431293d5efa31c7c83df5345b079ad4e31b2c8b2 + +COUNT = 10 +MD = e112f9359983e7df9b266f53ec950ed2b951b6d832c8fc1ffed22b4be3eae3d015e0771e96d344672000d4959d2829ab + +COUNT = 11 +MD = 186e69c28033e11b152542c86a94f59a25ec4edb7ab5b735faff16bdbacc682b2ae79b5f5a68ece9fee5ea4530b8a8f4 + +COUNT = 12 +MD = a37c790e641f911ef2929bab0ccbb890627c7e38e1a2fbbd71cd4215de919763c2819c35a0e93984b7d85d0e8858573f + +COUNT = 13 +MD = f1b4bdcfe0cce284ca26e0b7e01f26de21bf4a7a409ee99fee1019cc8d23e775bc134ec7987a6575fa64160b5c7f849e + +COUNT = 14 +MD = 45aabfb784a29d6be30104ae9f3c5daa58e48a9c94f61fed94dccd2ec06b527ed564643573d588ce10d3847361a57961 + +COUNT = 15 +MD = be3a49139a48dafba418bb9e0e8e2bd195e0d239eec77c43d1f0cee844b65f65c30cddfc05b644f9a792459695883a2e + +COUNT = 16 +MD = 3b263277a0d11de4cb4616591d4623e0821da4f111dae33938329cb8cc47f46742c70c09463edb9ff4a0171c4604b243 + +COUNT = 17 +MD = 2be323079381bd13a02cca824c2f3cd18cbc89b0c3319afbf33c6f06f2abf2fa3af35ea9752ffe153d1775a95e7accbd + +COUNT = 18 +MD = 14c8c3ea3f5aea2e74a2f138863accf1b5f563d96194c0dcf08ca816e1ac9156c3f5d15aa5701d93c188c2c1f7237518 + +COUNT = 19 +MD = b9158943803c47678fefafa91c98966aa3dc1fd96f4e86cfdde7ca879dbf9fa9f54b1988a53376f7005df7fd87b1396b + +COUNT = 20 +MD = f4395f88c4dc24b6edca5868fcebd24991ced2e3826c04ec00e4630d7e1f70ee56124a90657a795f446f7db94d8b439e + +COUNT = 21 +MD = bb56b4ed4683fce0d6d412ef84b7985ccc5fe30306679a994c8221c1212ff7f1492512095b7ddd250411008ce9d54020 + +COUNT = 22 +MD = cacaeb081a62a4e384e0082f8b994dcd721f38b3c3e4b5836ddcaaab74bcf2700fdc8b6faf3f4df1ec175a0628728a4c + +COUNT = 23 +MD = 231796f44eba3c8c6ad064b0e350093fcae026c3c03d669c28e5f36befa5f35489bf595a0312c38b9b73b7bb4dad5b96 + +COUNT = 24 +MD = d54559e7eb20534025f8f265bdbdab0e7dd9e2459305288d3ca84190b6d2c6e8ae2cd6f3e51ccb54551d94e9e40b31ac + +COUNT = 25 +MD = d6231b809b70ed19478cdf7e05534e92ea01e74e970fe17e92ec9a67b1b7977c4c485cfa74787224fe326b1b8d1ede87 + +COUNT = 26 +MD = 8ca1d462cc1b16b734c0e4f1a6b7f7d9d0ba9ce8074addc7755243b05fe269afab6618f07fe73089d9379bcbdce6c728 + +COUNT = 27 +MD = 60fa725bbf21ee56545ab24e6f26ec5ec749c4971bf761923c23415cbcb0c02e6a474deb50144abad2b0f16ddbe850a9 + +COUNT = 28 +MD = 8b60fe287f5bc133ff842a246bf161a58b4b8ead5be073c702552d664653e384e28e70d28624aa1da951ed33dcdfc7fd + +COUNT = 29 +MD = d18a080af3ae7e6318dc69298bd7b13644b7ab00adac18b446c1e9a9366e68dade87687b9129aefae9a98b531309f1c7 + +COUNT = 30 +MD = faad832a7ce865cf3183e51e07f08aad6570795f8d0274fae52fc5cb637ce4b7cdb8f8092e2ac4a7c96beb70cb288b69 + +COUNT = 31 +MD = b7bea61748495351409fcf1bd45a94af34e7dd899933ed06d5759fe728f6933781c21f1986b99906c6910d976a0d9c4b + +COUNT = 32 +MD = b35027199cf6467302a88e5d0106d01953b41dfa172234b3e11d3ccad33bda9a836e44f43ae94451e2bea28f0dca7989 + +COUNT = 33 +MD = 8571acd0d5fdd20909e9cd74e125cb9cd65a2e74056eab3f85f6f13e31a5fc1580aa588997d31a0a3ba1a16dea5528d3 + +COUNT = 34 +MD = 3dcf49cb8d79d4ca3f6e06e8a58bb92a7a42d7915b9e710a29d37ece6c1c32eb89a897e9935354db3cbe384a1149964a + +COUNT = 35 +MD = 7b2258c5fbf26780f55054b4aa462a607eecbf7382af941efd75b9b4cadd5b97936a762b9c03e133d7cfb65de501e6df + +COUNT = 36 +MD = c54cfebd2381621fed5cf6b82b3dea25965ec99365ce415b184ded71b949eb8009d91c85c02b30b7465fdcf18be885ca + +COUNT = 37 +MD = 39bed6de0e885dfd51569f3c5dc967f7f551065e87b6e7108d15ef5ea407419f936f5ae2288aeecf98777249f384fdfa + +COUNT = 38 +MD = b1c341b1428e5df6f4bcec533f1b5ca57e02102f5647b82be0986e523fad24b7f27aa29336a3f333817e8a5336a4a3b4 + +COUNT = 39 +MD = 2e1e67546b9424a2f0bd8931082f9fb8951b9fe57a2b61683a5e197017ebcd96592dc47a75d2ae4ab8f436edd5e5bb4e + +COUNT = 40 +MD = 6c84a39bc94af5960715818bf9b4694548dd1f0af8f6344d56b0dc7f86b181d5249172c82572ec8748ff35b6c0a2abd5 + +COUNT = 41 +MD = 576705bec035d07e31ebb091f180cd68c3873ea306708c5259f50491463c68d912080ba9f11bcc983a4b849ca19df008 + +COUNT = 42 +MD = d45c7e9080b6223a2185c490363764f9fb0634f3865d57a15bea438fb243e98fccad4176bf24c4cb7247dd2c5728b761 + +COUNT = 43 +MD = b3021cedd2ba38b69348867729cfe2ab172e4f1643eb4971cde2db002413458a566ea884d651a9c010b1a6b869168497 + +COUNT = 44 +MD = 1cb9c05e35029fe6b114c85a457091b7d9aaf7c95f32447f3f20cd034bc54f87ae85c4013d18fe2a94de8ecf9c6b9f05 + +COUNT = 45 +MD = 1e8f037fb920b836b8f36a1ed4875cf7d61390f68d4843e420b2c1ca702a104524c1187c8eec7bb4b174a252e1ae1462 + +COUNT = 46 +MD = 07c790c3d4948347ad5fad9992d8a0f6603a2133d138f1ff5cbbdc04c39277fb67d45b2e2c8e6c51fdaa6c5883e3a69c + +COUNT = 47 +MD = 98ef381d9b6b4e26ebf2bc293743e1e07943a3663b17f1be52d12ef8d19621263efb8525506ef6b95f746567a43577c6 + +COUNT = 48 +MD = 8beefea2f858f8902928dae6060b10cf6d4a3cd1f91cf1ee5ddef0ee5fc25a8269367c114c1c5c5ab5287c48edc59274 + +COUNT = 49 +MD = 03a6509ad6eb7f009931e596f3dab586de3bd6549afab4f218eba4fe47daf37c6faa360afdd931c5a95544f1a028195b + +COUNT = 50 +MD = bdf7e8d538e7ef418c808bf2dec1242b716326f83bf0a53db81f4d63aba37a2412f6b2bf00957ad6faf8404e4e2067a8 + +COUNT = 51 +MD = 71ad43312ed6e403a5e174480fb14b3c2a3a60bba36611e1c99adf8013d243fe945b947b362b6dc51a3dd96235472f5e + +COUNT = 52 +MD = bec45a229217e5fe28d6d1675dc7440ccb5616c0f02eb5d4c814921fc82fdddb04592ce7af192fee6c61b1a08f6ab6aa + +COUNT = 53 +MD = 5d6bc2d2cd0d8f5e41656f73a473bef1eff212fe98b184386cdecade24c5c5e7b92cf76ea16f582b9951634881f85585 + +COUNT = 54 +MD = 96e3568d30a1f7810404f3be8d2d26e5606da6c3fc064d0ef62298ca327476d587a1e3ef0d6554f4ad529053b7a651fd + +COUNT = 55 +MD = e4df3b7028f5e68753c1f21a556d8468a5d80fb048f6b92d405e519ea9ce44c6c95fb362119c553f5921dc9616dd3937 + +COUNT = 56 +MD = 7881e36eef708df4d9c06e37bfa7af5ce7d41d31a2e4332d23922a518de3e2e6fd4b9f27ee64379afae7ca2570d24748 + +COUNT = 57 +MD = aa12548b63d3a58f6914744111292cfc1f1358f717f1b19fab1a4ecac6292f1ff4b4c67b8a260b048f00ddc83b42453a + +COUNT = 58 +MD = b421b6941b5d7748765a4090c224dbbd98e85dcff9a65a77db0c2a83b92f4cad961b5b8ff76b5513d4a7af45ec4d4550 + +COUNT = 59 +MD = 14e1b1733b16899c4046a604f8e1e777d55649c5357d7d9e3d7a1c395b6275aecf733a598de1d0bfd7eeaa9ecbd7d1e7 + +COUNT = 60 +MD = bd05a1f9fa5b77371005a8073f0f3bcc4cb4e08fde3335dd3688921cf9cb5e97cf1b3052ff74bed8a359d170d2bea48f + +COUNT = 61 +MD = a319d9b3eeee6da494940ffb08903bcd588b18733a64ed435eadc5d9add6ab4f0c35fc050958bed81303409f388a065e + +COUNT = 62 +MD = 6f19824ec874b55e88fe4b1387433dab85415148870bf4a0612aa9c1cbcd9627925616fcdb66d68760c50fb308f628b0 + +COUNT = 63 +MD = bacb435a1ff538d0ba3e3d0ab04b5e8868bc1f84e964409229d7eada4b846b813c0e30d8e962786aa83aac2dacf02d19 + +COUNT = 64 +MD = e8f013470eafd5af84f63d51d51af2ca884789d03d79f8c3089810254b95a6f54fb86c08202cae94681ad702ea29451a + +COUNT = 65 +MD = 374b07621c018cc3935374c2f2f098e661ca0656181f67f55fb80ac36e23da379c4f6c8a3683c2621f874afa1241b918 + +COUNT = 66 +MD = 5878f1ebcbe60aa62a7b149bd181167e5898d08a3627a08c589436f007bfb82c040b26ea9944c6f0c9c4079b9b0e1ecf + +COUNT = 67 +MD = 05961b57507c99d0cb7dc24ae34eddde94ac484129de621edac5b001ac5c0b974d09d24f75504f3be1a3cd635c44bf71 + +COUNT = 68 +MD = d961eb883eecbc083533fa5128695c8d28281fbac23308dd2f504eb079d2d311b973f1a52b45aa6275550e14477a8876 + +COUNT = 69 +MD = a4557f990f4ccce585ba33453090f66af576f0a501d26667031f48f19538b820b84f870579efb554e7550f9f53fea5ea + +COUNT = 70 +MD = 82194c49f24084249567f0e8963c5f72a23bc20a8f522a6108f12abf95b7437ad93673860a953264838a09bb3968d0a9 + +COUNT = 71 +MD = 371dc5573b145f2136eb854591ece253efebf8732d3898bea063fdc3889d07953ee646e533b214f8c2dd66f1355b03cf + +COUNT = 72 +MD = cfc4dcecc6103027232029dd9a19850a6f79b9004be7d70054d0af11c692affa44c537f7cd749f2b6317cafe1fa52fe4 + +COUNT = 73 +MD = 9920b835400795bd3ed8ae0bc12417d58be8c5ffd6eed151ed738c3031e624c74fb85488953ac81c75f395cab74f1679 + +COUNT = 74 +MD = 4a1b040fa38b5cee63f5d308b55502d2a017b349ead5172c288289f42ba9874d0d11c9ac43255580c428a99067495782 + +COUNT = 75 +MD = 93c1cb94d0689301728165299057edd78ef48a6dc7654931ae2bf7ea5bc733f3b724f4c3081bc93ed61e7d739c38e137 + +COUNT = 76 +MD = 8f2e6c868b224b3cd5ac80669da0ba1d7e799e85a124c9e81c6865ebab1c0481e4ed4957a8989902ec565169ac53b7b4 + +COUNT = 77 +MD = df045c9302fba73f9f27ceb0fb70e6ca3897f410e81a2b8392489e40aa17f15ac59cf8d6893ab10bacd8b59704eab22b + +COUNT = 78 +MD = 8ab095f49aa7ebfcb8b1410f42c38fb1755a0560e3638b8b82c7a852e8bce8f4b780015e051dda0d2cbd6d6cb08e30c0 + +COUNT = 79 +MD = d77fdff2f768188efa63a7e29d73b8ade14c1aeb12e77866a57ea12c81bf0b3e1421d1af57fccf91b2098ba02ffb4118 + +COUNT = 80 +MD = fac5ee7450b3fd1ae2152f5d020680137f553a2c210c57290d058f330d11407593d74c9d3d9ac88bf4af44e023345168 + +COUNT = 81 +MD = 39d0ee95db114925ed7ff1577a22eb3dedb8658ce31504bd0f9f8a8f11f90825587203f26c432d216918156ca931fc82 + +COUNT = 82 +MD = 17d22080e8a9f589a80a5ca8291b0479c41351008dffff79ff522779c35ba0b09acc2dedde936b07e260451d35ce86a9 + +COUNT = 83 +MD = 9d75befac42e6d4d544e70477f7581264b5f8dda988da0dc40ef32f85c31b709284aef5f4f0246d20a855eee9175948e + +COUNT = 84 +MD = 3985f0cbca4c25f624850580516184e3d75996d77f138839c7570b4539b90fae8e751d1cea642816abd7f9ebf9d86c8f + +COUNT = 85 +MD = 93cfd14ade34e50deeee23aa75a63a017b6974e23051117e7e6b56b4ddb88f917a5d88d3af2af27da8e63fe130502f8e + +COUNT = 86 +MD = 7ae513480491a9500fa9afb8f64b8914ffdbeece3b3103048e91f6510b64cdccc8273257e275e5b34ec14c4c4aff4405 + +COUNT = 87 +MD = 2585bab1cd98d4b51a1475fbfbe3bca43da2a7be842c5667c98d3b62a9f05918108be94198d96c67388f83c2abebe498 + +COUNT = 88 +MD = 32f67419616e11fea79e3baeee4524c58d09f0cfb42049cea70f9a4a74e0096df841a0cf5177e402dd5803f4b51c602c + +COUNT = 89 +MD = 9f4486d93c599e68e7463d07d5cc9d589ab3a7c3d4d3c2b2d1f81f65b5c85068331f4142215f337c3621d096eb36aa91 + +COUNT = 90 +MD = e3399ed2ac93c6a4a6c88c11bd89655aac3e573493483c81631fd67dba3bb237d46f9e8ddab3a9fd78236296d00dfd79 + +COUNT = 91 +MD = bd9d1de114afa5ffacfbeb488d4846d012aa6ef66ce09725ae7b15e680d719fc2447f308eeb8247ae8e91e34b5a21ea2 + +COUNT = 92 +MD = e1c3511ed2ed26f770bf5212c7ec245ab2ba49e1c09edae2abad6a3ee41c9e25445f5e5317cf7c9c3c3f702ecd6778a5 + +COUNT = 93 +MD = c363234d1a6272d081f351cd68ac90abea09d3eae3a4d64fae7fab251a252591cb34dc63fb10abcbc5460129464c868b + +COUNT = 94 +MD = 6e5f1531eb282a2911a64b72b043cfe43b527d4d557abb9a31a9a632cdf5b5e055317ecb72a517a025eb4286d6f00433 + +COUNT = 95 +MD = 19c85253b3c703fee80a70bb2ac2ef836bf8e14464d2a17f35bd5e4f2b0b3a059a27891410950a9ce07197f5b306ae3f + +COUNT = 96 +MD = eec713a44cb778811795609610f2f9bfc9bba479e415746efe0dc530b6de66d73cb85b8698a8c0c2ef9344a2043b7a31 + +COUNT = 97 +MD = b799577aab5e8898326ed88eb96de38a27e76280ce44c3f16e70a1f96543ee7020bc29913ea0b9a9b9d92ae201143e0b + +COUNT = 98 +MD = e4dcabf1e22134076a21ea7cf9be6e03b099be40efc2b3080b9ec358cb021623ad27d33129bc68fce3eaec6b25aa2329 + +COUNT = 99 +MD = ccde4359f23e64579c5c0380df837ee950928aa82937a2d2ed33d216e707c46d847efa5ca52dcbda551145e164fbd594 + diff --git a/vendor/ring/third_party/NIST/SHAVS/SHA384ShortMsg.rsp b/vendor/ring/third_party/NIST/SHAVS/SHA384ShortMsg.rsp new file mode 100644 index 00000000..7fa2671c --- /dev/null +++ b/vendor/ring/third_party/NIST/SHAVS/SHA384ShortMsg.rsp @@ -0,0 +1,523 @@ +# CAVS 11.0 +# "SHA-384 ShortMsg" information +# SHA-384 tests are configured for BYTE oriented implementations +# Generated on Tue Mar 15 08:23:39 2011 + +[L = 48] + +Len = 0 +Msg = 00 +MD = 38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b + +Len = 8 +Msg = c5 +MD = b52b72da75d0666379e20f9b4a79c33a329a01f06a2fb7865c9062a28c1de860ba432edfd86b4cb1cb8a75b46076e3b1 + +Len = 16 +Msg = 6ece +MD = 53d4773da50d8be4145d8f3a7098ff3691a554a29ae6f652cc7121eb8bc96fd2210e06ae2fa2a36c4b3b3497341e70f0 + +Len = 24 +Msg = 1fa4d5 +MD = e4ca4663dff189541cd026dcc056626419028774666f5b379b99f4887c7237bdbd3bea46d5388be0efc2d4b7989ab2c4 + +Len = 32 +Msg = 50e3853d +MD = 936a3c3991716ba4c413bc03de20f5ce1c63703b3a5bdb6ab558c9ff70d537e46eb4a15d9f2c85e68d8678de5682695e + +Len = 40 +Msg = 4b5fab61e0 +MD = fb390aa5b70b068a54d6d5127df6a6227becc4d6f891fd3f6068b917a883c9b66f318fddb6384d10be8c7af0d3132f03 + +Len = 48 +Msg = dad95a4b4d37 +MD = 3a2b40f453925bc3ce17d640757ee0e899390b4a8d984d0297c1bae6b60b9f2603bf71c323fd171011372335e5702e40 + +Len = 56 +Msg = 121835fe3700b7 +MD = 7bd06a94acba7beb3c5a9b9e8769c3da6691c482d78b1e5c7619b36630eba4e596d11c410a4c87006f4716b6f17bb9a0 + +Len = 64 +Msg = de60275bdafce4b1 +MD = a3d861d866c1362423eb21c6bec8e44b74ce993c55baa2b6640567560ebecdaeda07183dbbbd95e0f522caee5ddbdaf0 + +Len = 72 +Msg = 8d45a55d5ce1f928e6 +MD = de76683575a050e2eb5ef95ee201f82416478a1d14bf3d96d1fd4efd52b1a28fed8dfee1830070001dc102a21f761d20 + +Len = 80 +Msg = 5c7dde9b3894d73cefe1 +MD = f31b22115fa7178e78223e06aae870547ab93c6eb3c3910b0ee16e6106db55935d6c0eb820132a2078ece1067efc81c3 + +Len = 88 +Msg = 967fa34c07e4945a77051a +MD = f8f24d81c4f8f23ecb42d76ed5d2b34c9cbc1f0a97234d1114804b5999759f3131c741d5768cc928163503c5f55f594b + +Len = 96 +Msg = 2209112ee779bf6d95711105 +MD = 09c54bf533a26c7447caa5783db2ec7ef5e55752da7f2a2c4e360982a94ec1ca2cb6a157d34eed28de978b4145e17ebc + +Len = 104 +Msg = 20442e1c3f3c88919c39978b78 +MD = 50bc95b036e0f54d833032a80d45c2ac38b3d29e9c7f72a2eb14781e9241d2a4b8e8dba6ee6f4c9e46a758d5712dbd39 + +Len = 112 +Msg = 4d43702be4f0530319555d7f1a33 +MD = 83c8f0bb762801eb26cc5115abebb657c18ff811de500b32b7a568a220a287e900b6c75224fe7429169fbd534cb588e1 + +Len = 120 +Msg = 5e2a79a544af85f150f7a9d209fd44 +MD = 8051ebc9cabb052cabe07e4023e2140808b77d25b07b96d2e3c22393f71b116c1a1e41bf62e57f73ff67871da7c93cf9 + +Len = 128 +Msg = e1bb967b5d379a4aa39050274d09bd93 +MD = 3b04f96965ad2fbabd4df25d5d8c95589d069c312ee48539090b2d7b495d2446c31eb2b8f8ffb3012bdce065323d9f48 + +Len = 136 +Msg = bb84a014cd17cc232c98ae8b0709917e9d +MD = 85227ae057f2082adf178cae996449100b6a3119e4c415a99e25be6ef20ba8c0eae818d60f71c5c83ff2d4c59aa75263 + +Len = 144 +Msg = c3411a0592f1f4fa698815238997db356418 +MD = 233ac44170d9f452a1a0231622030b15c104ff8ecaa3fccdb9e9e5031fd5b4220186a8edd032849c8b93dc183a5c8627 + +Len = 152 +Msg = e831b739e8eb9f787f63c0bb071ddcc9f44cab +MD = 91722d4b7aecc211bb8a5480c6855f3b71be4647e1dde0380c23afaa03f45c642606a24506e0317bf51506a483de28ac + +Len = 160 +Msg = b8a7bbccde46e85f1223237d9353b78c3b19727b +MD = 28ba69dc05e6e29de91924114d6c9fc7612f6d2a68b07fa001df059bcf98f7aa85389caeb966eaa299c79fe1fd1e40e3 + +Len = 168 +Msg = cf391b8aabec6f81288c8b7b92843be23d2e847574 +MD = 121e5ef697df491a53d7bae121416aa653d759a37db9d0b993031b18a0ef160ed98842a291e1ba2cea8b998bc5eee0b1 + +Len = 176 +Msg = 9d65d88bffed764c286f34894f991600d1a67d622382 +MD = 84b6e0d6a45329daf47a793418ed5dbde01336b4b9468bb69e5da61c42b691e6794e6ed0e8fb1b8e7d4cd3cbaadc520a + +Len = 184 +Msg = bab6ea46fb717f73f0628132a2b96be383774f1e5d8b6d +MD = e969aca1b50e928cad29a0d756457f6de8d7a4e589fd41e53a1e758c3b20f9b81b36bf098a49102fbf869651ca9a98b5 + +Len = 192 +Msg = 8853b00e869764adb527a07b073c85a24e6c208ba47eef4e +MD = 09ad44e85ac190e2d1c3ceb4efbea10ded34d0de961fe4ee268132c48e38660e6cf585bfffb8f7b00b0fad1514312b63 + +Len = 200 +Msg = 71fe1ba5d299495d2a56039c64032ec6263d437f55e3f5bedb +MD = b41a5d3b4af6d4b9c349e0788538e9a0311086894df7b72cf5aaf4091a7e039e4e89cc77a123474e6d1bac438e5e9f88 + +Len = 208 +Msg = 4ebe07d03c93e849b4bbfe9f2d2294bf6ccab457f76d3f99cb64 +MD = beba464d7065185587fad89bfcea9635bf0ab775c3eb8c147b5b2bd8601db6dba0590b50dd1068733f20dc68e004a090 + +Len = 216 +Msg = 918ac0a97ec1632908489e5242ba284bc811aa7197242cf7226fcd +MD = c4baf6397a4c6e26492b63a4aab7dffdd0051d8f51938ac24cfd8dae2f7afed1a4aa2430d7aeb0be2a72b21a6c50198c + +Len = 224 +Msg = 97477f7272d8a89e38e796c533e9f8a8ae4c92ccaa5d907ed26a1a15 +MD = d1ad524ebe908d7c5aff50e6cb780fd3a70e87c914a36b93c4e35f5b2cb03850b122b480ef8587d4a44f22467f4c480c + +Len = 232 +Msg = 718e0cfe1386cb1421b4799b15788b862bf03a8072bb30d02303888032 +MD = 6d8b8a5bc7ea365ea07f11d3b12e95872a9633684752495cc431636caf1b273a35321044af31c974d8575d38711f56c6 + +Len = 240 +Msg = d3b07f0fd5d4cd3188aead8dc8338de42056e2e8487eca51ec37ef2daf27 +MD = adcc2e954c91db3db2d71d0dee1f030e723bee1a23816fe003ac5dc862a0872ef51ff386c18be6ebcaa493f32d1195b9 + +Len = 248 +Msg = 695b9efe1809abd5d44eae957ddf9c2cd3c75fae2f522855712a07c639c0b9 +MD = 3bb95d164d94595a1187f77fc26c280ffbb08e74ec7947aa3e5b38bec7c6f8115c4d880788c2402dbb3e5b94afd130ee + +Len = 256 +Msg = be01e520e69f04174ccf95455b1c81445298264d9adc4958574a52843d95b8ba +MD = c5cf54b8e3105b1c7bf7a43754d915b0947f28b6dc94a019182929b5c848e11441c9e4e90c7449f4c3cd12954f0f5d99 + +Len = 264 +Msg = 98ef7301f957d73d4e821d5873e8a9b5970fbd219d5cf74ec2291b8381181391b4 +MD = b2564bbb159c3aeadbae0e4a4437f7c5111020e9ad0f4eb508147a961ac22a01e1a26df046b14ee5e8a49d9ed22b8cd1 + +Len = 272 +Msg = 873ba7f8b71517ec50297b21cf94cdb7a58abbb8829206f0d3f328ff8a6939ac1d1d +MD = 7405fdd557d2b5d4f65e9e85f508d3791495f1820d37cabfc8dbb74d7b41df8613d995c612d378dd88337e00951d0280 + +Len = 280 +Msg = e3bd4bc3a60cddd26c20aa86364bd44f4a07f3302825ad0ac127881de4eafbccf988cb +MD = 199d5423a0e26438f4cea0081a89e0b6c84ca93f7c3120c8104b51c6edc04e0f6a203bb77d59973a7411a0efbe93a09d + +Len = 288 +Msg = 8716e4b86deff9da2a8ed55baa43582a7586ec9cd38ac3a933156158cd8e5b7887585e91 +MD = 0d2306d9c0a8ce57bc7869b439376c07ce352a41d86ab6cf4a5654cccd5c724fe1b62b2c1101c986222f5264ab3fdd66 + +Len = 296 +Msg = f8a503aaa25ef2cea25e31930c3a90db468cd3a862f4a93aab5de2777e82dc905cb03ee23c +MD = 773ee958fe93dfd1b73af24d27ddce33144a9249d5a671682a56df30d0bbf92b9327130022075185d396de752959304f + +Len = 304 +Msg = 669025175ea917cdd7a71ff4ec0c45bf1246d2a6f031c00b71de701e17939bfe92128b21911e +MD = 9ff6be3f02c7c5d0206f4b944c0843cb68bea8f9b7c8cc0b729503db5005c7cd5cb14e3457d8f5eabf733fca9084f16b + +Len = 312 +Msg = b35fb2262edfa14938a0fba03eb2a25d377974b11f556491a781d0ba2b3c0ff3e42749925fef8b +MD = 835b05a4bf00c2594c3c8c13da6c273a0d9efdea0da72b71b19d326bf5ce968c2e577a7d99fc0f985afd23b46423129d + +Len = 320 +Msg = 9d86b45df8d7dae0cf6b0bc208666ee1163a39e6116d6d240c9dc1c3a3c1db1dd3b1c6680fe9a196 +MD = a84c469c24696f81d7df4ee8cd76aa584f8c9960eaa9908d3e3ebc5eea7d0b50afdded39deb94fd59323a21a6539e93f + +Len = 328 +Msg = 414f5619f6dfd45853bbabd224cc305d77350ad253358910a74f3a4381a9b86680b3c4068c089849c4 +MD = 848d481e3bbf5dd726f625cf6a444d995b36262c9f80d583b77accf1707e3f49bb3dc480a560694d769aa1ce65d69428 + +Len = 336 +Msg = e2658324821ae7b0faa0cdd63ee9efb9fcbe82092d04696feb3da92c82521dfdc98f6b41b3ef365d219a +MD = 3ea5d0799f1a4dcab9149a40ab74bec9c8d76d8e392c1e63e080ddec2ec535f80be9f00927be281ec97ac0c882bb0bbf + +Len = 344 +Msg = 7e80271bb5f2cc7ddae4158658e4e8d06e04a39385da0ecac1cb8e91d68a9bd21ddb7320e79d10e3110758 +MD = fa00bc0359a642dcb3559656094eb2fd4f63bc57f0d34abff26df5c54cc63dbeb4eac75905296e7fb69f871e134083f6 + +Len = 352 +Msg = 43d2828e86f7856b78c66cfa3d602387c290975afd021a8b76af0918069cac35dec45de3cc52edc4ba14432e +MD = 6c9e367e066032ce47ba2575565932002cc786f533c5551656abfe7391e7dcb5f9d9e047adace23d32f8acedfd0cafc5 + +Len = 360 +Msg = 3f49bb645cced7530b8b82e6cf07fbf670f7ef0ba0583d16debafc639bdfbfc99b8417249f7f5a05410aa3a71f +MD = 2b301a14647a67429cc3e7da02c4093a739640f7b47a305251d2855e75e09e60e262b279a073077d1fb6d0f04788f2b8 + +Len = 368 +Msg = 31aac06a59b74bf478617c1637fa6c5593df168b8d58b1e923bf3e3d80e55d7170b16454160ab29ee1f7412ebc05 +MD = ddd245c9b29ceac60506fb6bd6e8037889cb73d6ecc669fd129060a8a8f58971ac572d3ec9b44404f81381d0fd35a649 + +Len = 376 +Msg = c10b2852054d8034e07906c7fce3ce99402321a648bb881f13fb276afc224c6aecc64800cd767ed2429db94b95a9c3 +MD = a44640fb4ce6dfd4a10290a0aecdb453054a9b54f2583e97bb7dc2b005e5fa2b4fda17b1f75902f51c18c0caad35833c + +Len = 384 +Msg = b1eeef324b499f19eba322215fe3ce19c9f000b698d2b2dab7145015046cc86d049ee15ad59dcd1564f30112e06444cb +MD = 38742d18bfa6e918b888d68d1034e61f65dec0759172c2dbf08cf1e132b217eaf4ec29e15db7f4b07e08a70cc5662012 + +Len = 392 +Msg = 790dbba09965c9774dd60a32e010c50d6d518968a220141dc33e7410f2da6c08ad0419bd9864d5327d2c5c44914b2e83f9 +MD = 9174958bc8f4ed4731eced999bea2f63032f52bc8c46bcd903232f3fbc5046f0d6c203d43a078b822fc05101404f2635 + +Len = 400 +Msg = f7b577f1396b23c27eb637e53d3d92460270b001cc612fd3b4d68bcdd09c2d50571ea4350636324cc2428a087e7bd8785f82 +MD = 80afe111e44ad9aff9e39c4cf9e6b4c520072b4550e62b1740160a04f8d530612dc098917a556b44977d0e73df518bee + +Len = 408 +Msg = 7370d9b453936955b9c9d336f4b283237986232de007bf412fb426ff5b4093c80c428c19a12e0b187484dc6d5f4746537fb1ed +MD = 6cd29159820d34e5706dd867e6363758d312660d4daca8d2abf677f234746e97a0a6224eb054066a0b74e18c70965368 + +Len = 416 +Msg = e8620170f0f39328bdf8888148cfd17730f314ea68d8fea02d16d98a3cca61484139d3ee92b748091dc841dda08483f1184025ce +MD = 29c408a6a5045f397b56dfb5292c7c16028c63f068e699b86a891ff8501208ec9398dbaf463c00f39af7b2cbe45bac15 + +Len = 424 +Msg = 75d4216bad77943bfe82be216157843b0da0fd16eeee847153a00b43e707b2ffe2c898168081f0bdb3af58f214cf67b920c385aca1 +MD = 0170357385a20865a8d30c2df39406903ff88c7f70fa1a7a5aaa86711d64046c432a1b139668ae5abed637d1dc4107b7 + +Len = 432 +Msg = 2fa90c2210e3096caed122b74eb9559977120e5d9a97eeb3f99bcba6c19cf8cf791ac6c8a0a94ae49246611dace7f24eb05673a36b3e +MD = 6c2ced3fae94dbd92f4170b63f1ff6fcd8194f60937b22b4f3c95fc9e104b77148f9bc6c16a890de86d9ef1554c96fa0 + +Len = 440 +Msg = a8de55170c6dc0d80de32f508bf49b7046aeea4b975a511b5ea3dc853bfa4b1e0138202d6785f6b3017914a86f824288d586dc0e8bc924 +MD = 2bc3b10c148200f7919b57afe1d7db773ffd235e04fec6897dd94f13ad9c437ef50900a40937f82a39daf2aa2b3dfd68 + +Len = 448 +Msg = accd9d05fb7ef3043470836137554af117440b3ccca7a280285494f90dfaea60dcbf40b230271932cd3875b1d3dca60d38865ff874180efa +MD = b9e02df93e9254180d6a15288d77088b5a5ce517644109b4e2532be315f08dee43491608a1127dcdf69397406e23d231 + +Len = 456 +Msg = 32b835c180cc4006c11a61c65b03c099510e1d4f0a94b63d54bd6bd5a8ab207ab0f4639206564edc3fa6af03280a67744f68106dc51ee35723 +MD = df97a1c5dda6f9dde749f213e429db84f0dcd481d43bf58e6142968d629ecf05b262830a7dac87f67f4383975f3e821d + +Len = 464 +Msg = 9409f9efadbf190b253367629f8f368c9d5ac262e94ab86f3559f9a1fe1a9b44b64e313121b34d43001c430bedc62fc586ea398acd8f17c7cfa2 +MD = e1a69388ee6b6d234108ec29402cd0afd74957d990c7bdb544cf11e8eb2ccd170b6b5a74431be70364d7a31b926ff53c + +Len = 472 +Msg = 289586baf8daced50db14c936529a0a6438eb5da8d3d469172b6a06f4ff3a956d4f9219563ac285cb8e70074cfcc152c02593a97733c36f4a9e97f +MD = 509e996c1e11611c243021b8b78f2ad90c5a9263bbf35910db7c8ec102aa7c518066fff8ce88562fec2cd6dfe04056ae + +Len = 480 +Msg = 156530cd6ed3baf1fd7232c7ff204f3c7d4d106016afa3bdff3786e84843ec556115626fdc84b2e874f1074e4f7d53e08079ee9fd01f80a8be7f20c0 +MD = 7b8a598029ca0ed475a72c0644ac81c63d72fd51305dada07b0ab4a29e47422f59e12643179269ca3d7d10446b372b2c + +Len = 488 +Msg = 30655a6b5a5965db992e7248d24141055e988d726abb8e729dc5c21ffcbaedbc0b1b5fea35b8751f6ec6625517312fff2234014176269b60959723787c +MD = cfaf443e95deeb3cc1910771a2c0692a54b18b3633dc5414e71ae08877f0804818f67f7196c52e26b762dd12bb7a86ca + +Len = 496 +Msg = 345c3c022e20144e135604078762ef5c8a8f038cf1b1d6a91709b59dd068396a9e971ab628f74886e765384a23607c1a1e6e973f8fbb0ff55104c46f5db3 +MD = bfb1d5ee3a0b629058ecc521c706c2f9241c48cda3dcfdba660a2601d832a7a872a2bb840f3b98d21c37e28f9041a5b2 + +Len = 504 +Msg = 0b94a0f43a92408963a59ded01a9338283a6ff1bfbacd9051a0104445c7f041e8037afde3b5a87d22d5a4796144cbc944091d6cc47b5ffd1f997ab1496ca31 +MD = 07a045c9590e9901d0598e604c4649554a823de996fa438cc81a634344eeb98e5f3c0c234ba30e2285a4d7ab568f2610 + +Len = 512 +Msg = 93035d3a13ae1b06dd033e764aca0124961da79c366c6c756bc4bcc11850a3a8d120854f34290fff7c8d6d83531dbdd1e81cc4ed4246e00bd4113ef451334daa +MD = 8d46cc84b6c2deb206aa5c861798798751a26ee74b1daf3a557c41aebd65adc027559f7cd92b255b374c83bd55568b45 + +Len = 520 +Msg = bfb94dfbe0d9a509b78d164a722050054dad91c9a8e260545d037eb450321aac48ed4459fdd8a41572bd6c9c84d18b6ec339247482cc3ee52a1bbd6bd4ae918216 +MD = 13af0be02986ea3176e8c65534ec9f32c23b53c93a73b15c26b9ecbd8a1181ae184a372e9f5e0596cd6606849aeae8e0 + +Len = 528 +Msg = 1c8924a16fa7c602aff5ee961798bd44fe53798bf44c3d6b0d13ef837de07377651c1e94ed236eb79349f86ac31ba151a7e711c5407e65beb63824f6ec39754b58f3 +MD = 5be6482851ddafde582f2804071a702ae39bacb688741b7c37bbae99821ce4d3f47d5b097fd8eefa0ef9248a34f5d3ce + +Len = 536 +Msg = 184215145da49db417e8bdd573d6282de073e674c3dea86b6c78591d4947f5655a9d9eb0e5f4ed046b1d8642da9aefa80448a299504160a1b000c9b4d3c62ab69b3d96 +MD = 8995cd7fc0956e124075440686beece17a6256b282e7988a0c998f790e3995c974383179893477bcc32d1f114129b496 + +Len = 544 +Msg = ca7a63adf41f4da33142910c967706b5c8a093350eb3e6d3aabe69a46a2872f47a39bbe77cdc1160daa450225b0e8e36f506978ce3ac9ae5f75721ef30da46b28f07242c +MD = b89cc12b11e3afa58908580c47b25407abbf584f8e8d4b5631e9f450464c7e53cfd7e9f9d3cf35e587a6f02957ce4c28 + +Len = 552 +Msg = 1da41a0af202b079521deb6109e312c2ade48544d2b498c07e91a102dd4650ce354f3f201b3ecab8e85e21d667959b43d08f4e90fa18dca2ccca8f6ff5e9a902dc8bf5c5da +MD = 5c297e20c307aab7f325939fd4e2883b034fd547f1dd17fb6b97ade8b148e06ebbf3ff60cbf469e4933d5f48f0166cb7 + +Len = 560 +Msg = dece42c8849be40c78b8de6da96c2a8d7e940545b9f3f39aa1ca03ec60a85471aa84d8e29f095874f331b90a4c157da9eb048d2c8fd235399672707366c766f10bb833f02183 +MD = bb509e33e9ffcc4c01233146226ee9364cdac5658132460a76edf617a035b197c86434ee889438581458102618769382 + +Len = 568 +Msg = 952008ebdedd480449bb96a025576c5f617bbb8307958a010767e0d736ffe5a196ea4467d8a5d3ba1f5476ff07b6410ae659dcef520a2c14e3902f8b399a289f41f5fdadb502dd +MD = 9b63d9145bc714a8253dcdb8341b2f5714eb58b9d4b22ce45aae07f51297a3dc9c5b691a8a3cd438dc5bd18be400af21 + +Len = 576 +Msg = 100132c315bfc9c4fb93023f5d3500d7208a68acb4d2c63096232c361a161c4c67c0a74bc3e4d72c11664b1d970321d405401924b3a0f6ce2b1a2899e7caa9a55ce725fc37f55d6a +MD = b6ca04467ed3e623dba36f2e0248cefbe134cf555fdc14731175eaaf08e244ab0b15fca2f173a0ec98feaf359fb84a11 + +Len = 584 +Msg = 99cba4019f5478789e674e08fe5d6ceadd698b0757ca39c605457c22c3d3b8ffb797d2be8f12960f099a5606b908d47207b2636a779948282de3661bb08b1b37ee576590800a492730 +MD = e5378c7c251ae96f0359a30b3134fd77d61d0db68c42a1a2aac293195a596df42f677e6cb98abec90d6722baac63fc86 + +Len = 592 +Msg = bb327a0bcb2574df47080e8c0d8a45ee1c0424ae0414dc0a9b8717d9f27d8ac987c7c9ecbc946073884d1fb96dbdb583aa758186b16fa429dbf15b8d5bb48cca71469e7ce0ad8e7fa14d +MD = 0f75e65ff8494ae28d9a0a2e65959653275fc34b2fa27b9e10faafff07c45addef3b8f25953d5a2e54e31ebe6d429d26 + +Len = 600 +Msg = 7fd9eeb5ff368040d299fd17a943b21d65deb2eccf6128d18a33eb174693538935374c32c333a867821dba08636f20022c2ce01826c7b7e41640ad186f90ed0ac647d47086744867e5c54b +MD = 007251a2a577add048b1edc79d96c7df8fd5b5fa0d7264f122e4cb54c50bc316a8bc5f4f9dfd4469e29e9b030f563a6d + +Len = 608 +Msg = 7ca9e369e82186984d5fc729e111a7e5d8ec19c5d74e13b5ab22e4993b05c88ebba6ba72237389a6e0722e12c96c5d6a54515ab00ad80efb38665a76e831abab0fa5cf020807078441585de5 +MD = 3ee8c4184de9ceaecd0d3aea16271835f3d45c873358c93a515539c38e819414ea63b08d0a109346793d5e0f703125eb + +Len = 616 +Msg = 5b4d945d55dea22e37821ec396476a4bfb617d2f392ad93afe67bcfda9cd9b725bc4ccdf516a83fd71dbff5a22b005fc61c58e471240bd2193ce13539730e63232f70f80308be48dab7266a1dd +MD = df82d242e4cdc2eb40bf3db6a56e1aa0a66e553f1914bedc65c8cc6ad9564b6e85df59f4c443cbe4e0aee05986f7d690 + +Len = 624 +Msg = e865f4a42bbbd0b73fe275b8ab90d3a9fb74ec5070192d38f60efef9564498b9adb716f31d50cf77c20ae4b2e85515307bb8d95fbeb9ad964001ac550dbc60cf213fd8a522edfaf54e5b1b93b2b2 +MD = 091fa9ae2184e2268ef9ef23c7c809efad244536e00aa9e8b3a6c228d90e31da051b40f268a13bd6f62e69c91ae8cd2d + +Len = 632 +Msg = 1d408c7b68e168f41bb46f9b2e9c8b04f968e4080252546814cc1cb2917dd5690886a9600a09c2673aec0329a4daf655508b06fc1646ef3bb3a472191d964db214a96a96fa89576ce4c4f6dbf1d176 +MD = 7e23472c03431925f3b4559d886e8d5d837b3d39b8efe1b7a91e61a13810c4dbc2439634d7c6ababfc66e9b18e6541db + +Len = 640 +Msg = 54ae030a4e27a05c1ea4a12e69c67544af9b4044cf157dc8cebbe8b2d49f9bc0779077603c90c5c55b891d3ac33b87b65e79e1b19695813718191b3bd8b7e42d5583f7cf1e60f84495b8f869f3719969 +MD = cb65f823585773cb8802b6339182f13752a82864c898b445be5a11a969657ac2dc4a3bbeb87ac0abb232a2b124171096 + +Len = 648 +Msg = f73cd386f73d0c6ade05771b33117117c602e52693f05b47e90032eacc39295f9793258fe6512eeab291baa0be222e143295a28e8697e42fa27ec02b44217f32a1edae2f4f35213562ca37b6d6cc5ef72d +MD = f665c4d17a83d65a7ff16bfce279b58558250d76af68b8eb943753e411a57ceb31c1a131e54bcb7672584416e3d5719e + +Len = 656 +Msg = 1d259612e6867e7d788c71d03c5136864ad6d84f24eaf913a34e69333116f812395288d4dcee6665e6d7dabd005ffc6327e3ca305cab78569d1107a115e619fc90110436317925066726774d1da3639c31a6 +MD = 5dcf512e2b93d6ecdf7c3304534554ea79d22392e59bbe90df21e978c9fa3b34ff82e6dcfe8fe2236aa4af4e662e2a9d + +Len = 664 +Msg = da8734414c45fc1d5a75a3cbacadb1bfb523d6fc391f882d0db0eef21f9ffd78b6a1e14cfad09e71b65cf7b05d7e8f2f4bae4e454e16068d65465639c729cfa92738563d37edc9676b7be604ffbc68ec3b6b72 +MD = 8b328a31adf67dc7aeb864a359628410d5814a2f0cc683303f61432ce32177e1f538feead7e5000343916c7042f8b3cd + +Len = 672 +Msg = b228c75903d80fbc6d1cf629ff1d14a92ec4bf0e121fd97bd306ed265efe7a5d5c5d8fc764af98ed6f5978f88d7cd8bcd71cbef6a58261d201de3cb15b3161287e6a104cc2cf882d839f1da0d3f68b426cf08ab9 +MD = fc92ba4eac9a1bf120a7b6c2cc30335b9615b1a98e55d14854ff872966e71040737401c6bc08db5842ceace14cb7e7ea + +Len = 680 +Msg = c90d473a6fd30be9a98bf442a9ad65a697d4629c33cd517dbbed02710fa8ee991360bc8e557b0a0bf0b869e6b0c3a9457607580edec3859f2060c9c0340289d53a5d755918ca54876599045a86a9bcb8163795ea8c +MD = 807582b2520e990cfb74367343268b9148b2519b9e7cd9182edb3db9ae7afebedfe8ca118130e2ef9d31af9081da8222 + +Len = 688 +Msg = 6df8c5c28d1728975a0b766cd7de63bbe7f48c3db3e6fd5a4b8df6e3905cef0351f3d973b4f2a7eed80b0de5b85c877353fb9e930ad2679149ad4cbe69910e68d5500b096c5abdbf27d684fcfcf1a57f02769283d5a0 +MD = 7bda57d21a4434aada6758e282e612a4c0f41b242f9c790804d5bee25b81a821dc6f2a0ba56f1b3704802c9a6e153d85 + +Len = 696 +Msg = 2cfc76f88cb6fb90927b69526ad5f03d6bd335f4f75b52b6a3c21e8f989ab0d03acb1ebe07e68a87c1b5607acf17d976e10ac4a3d30a8561d49a5e7ec720edace9f5f632b4bd63e104f4894a79caad2e1c31c736453485 +MD = e16670ea837c259e418d3c0e1eaad4948c3457e15b1573056e24da25bff5c66b7e95d24c6bc1b8d6c2b812f64adc9553 + +Len = 704 +Msg = 3f05108c2f33d39b3aa9e73efbad4b011b4e9e9fba409b7611e7e03956b2f3e5e0aa86f68c4bfada5f9223a66d574b08f9dd797cdda8f3c32d8e01921711f4870dec676027ecc56fc2010b496e95cfbf071c820f21edf25b +MD = b272bab680f3ab27de72d94df384323f8555f1d17facd2588ac8648def2451f82f9b99c05ead8316fd181a2cfb97483a + +Len = 712 +Msg = 1ffbe1aff0a1e7fa3e68be31a74612a1519b59397e7007ef61fc015f316d55b57be528cebcc2f09a2f22e3c5e4a6ae9612776b17ae87cd763c1a9eabe6846c5bcb347ffc99f10e3b5e64b29a9bd71a5e9b3c01a802715de2a9 +MD = f08bda9d6762607519d53fecb0bffbfd3ff2924854833a759d631e910c42ca86741fc2e290af42e94b94898609b91390 + +Len = 720 +Msg = f755d6b5642378f2847893901d9aa91c54a4b7abb97c5c7184063e8f1e97aa2de4ad7ac927dd3cce770c906921e2d298f67cf9844e61bf104db803b265b86b821c5f4d901067d07b38764e3f6c95fd4f28e3cfe48d8a9694a8f3 +MD = f85e98ea054455242280854e97c4ed399b85ee7bc5c5fc3d62910a76f3a9600c3d904c832b70b58d7d998db8dc978135 + +Len = 728 +Msg = 773577f3a642c4f13b1cb1f4103e9f6b2da86268a52f449cbb174c8349e3c0dc636ce85c373115a337eee26f7b70ba1060a79a1c76fd186399e6a5255db80f83b0be4a34ba876f7908840553ead380f3195507729d067ac2ee8eb4 +MD = cc27869cd7e63695d19082446b068b77dde4e8604f8c0e9ce20a1b71aa9eff1460f32d5a54476275bdee8e7621491f46 + +Len = 736 +Msg = 651589927e17e1aef780690f3100a377f0179b18b31fd5b4418c84038573fc559b496a782beec3dcf6e9faf5aef676e10bbec34b1be5888fda49b91e02890d2524c5b369f8a54175f29dedf8156fff690cf186ec77104a798315033b +MD = da846042fb908eee5f5defd1055ff3e57103708278d379a8681f58bedc6ef89670b9f957c4e0edcaa42dfd8cd49df6ea + +Len = 744 +Msg = 678652600eee42580f73623412e9c011cc02dec4d4cc1b79b27b6f9939695bf2185b2012ab0630f317d2e2de95dd69890e430783e99d7ed121c7c8da9ae70780b5aabf9022d1435cf5ed6da6fc6692c050c2b5f22b24fb1cf9135f9cb2 +MD = 8a6ae41c9bccc16eac4860bd5fa91205a86fbfd09692578f7f36b3c135d96f9e9001c192dbeda975f7375bd43a23ba68 + +Len = 752 +Msg = 416d3fb7b401fa5e78cd96d479d8860df147eef03adf13fce1c61131fb89cc2ebc63289745bd7db9bef14571a55318496572dbe52b9b349ef59f406cecd68909f364325380bb75f3aa62503c84f47a55aa6b9c9b199ebe414409ff3964cd +MD = c5f20542e0c0ac1eb433de6229fe5baccfd4502e2c2275439385efda6374a1d0fc50cd9bba4233d470ad91a3356ea315 + +Len = 760 +Msg = 6f09e876c0b83c9934ffb777f006338c5142a31375e9b21cfea9a7de12998c4ea6708ff1fdf5a8ee6bb67c675ffd8209a10064e2d758a8734eb48f07f7cf3d43b09f1bfdc5d07a52b77079f23cec28bf863bed97c859276df7f7129fce71eb +MD = b3c968f3025f87dbd5cd3d364bf673e62827c35889532431becd87cfbe2cc75b7ef45696d19cd3452d0e7c2b69d09544 + +Len = 768 +Msg = 0dc2b226b3431c69a76addc018fcbda22bd72c8ff01ed6549596798bd950f361c489a09c95cee2dcfd6401208ae6368d6630026b417cc4718ccb8b42e8872937de66895fd09142c42f066bf0ef3ab2b03803a8185fb65fc7148c376ddd4bf58a +MD = aa645a4f8f602411260ace24d381f3f5dff0000c246343eb528e3dd027cd743815737906ac5c74ea83c2755e56b99509 + +Len = 776 +Msg = 8dc71c84c8772753c86ab6afd80e8d1df9b0d7e8d69ebe67fa883a82412c26738c3399cab95573b4d3c4367c85c81852d5a6564c0fc7caaafe16c05e62aa06cc9fa542ceb35c88fb6ab82c29d5dcd530f807d3f1c3bcb3974421101d1aa6ac112d +MD = 12239813097124e6248e7dbec985a6a25f622b1d07295cfcfbaff33b847df7fd94265e439fa535f3becbdb576922ac41 + +Len = 784 +Msg = 3df3edd9fc93be9960b5a632e2847b30b10187c8f83de5b45fcb2e3ed475569a8b2ed0784348f9dacce7b323c6b65071abd8b32d1022b1e12787bd4989d3c5ac329d576ccd7608dd336716532e9b4c7f825826fb2e343623ef85c6270619bf5e3b27 +MD = f36590f5211a9cf84eeb0a3b2e5dc1164e813191cda7cb883f3f4a074605ce6780cf2f1a105658706fbd2829db8a2a58 + +Len = 792 +Msg = ced0ec6500cb891e6433d104ba5b1c1ebca397f3a5eeeaa0f0561729621ea50d4ae7ff1d0827178dccd84e4ca06d9891a90adbb7a9f4994ac947cf6296e71d2f49b826d64b123a7bf86f339fa4679caddbdf19cfed7d0206aa5f527a6b0cc00f52aa2b +MD = c2c2d7d65d0b9108648e3233d15fc4e4cb62ed8fee9cdd18ab44b8486e2100fbe45ddcf74f46c15eb77fb1c893c12202 + +Len = 800 +Msg = afa4a2c4fbaffe838dd149c78ea7851ea9396304b41806a093a90aae59c0c5bdb170cc9a7d22b90cbce52cc1b105108942df20c29ef3a913223b915e7ebc98ef135adefaa0f0a6441ea05920e868ce9d1ff6c8fe4dbec06a4849e5e55ad0627f9e09dfcb +MD = cf6ef91d8567414f5c7f0b1f4ad09a976afc7c8327a382fca90f5a136b19be33100a664390a377f8d8a3015fb882125b + +Len = 808 +Msg = 00f65a485bfd381113d6e79bf9e0d5e518c891988c073ba198ac3a20f25c2c81619723e88a3c0ed3075075fbbafb6a7b61d3bc336a5e6d6f08d166c4861e6a3bdc2e49b2806b567e7e821a55cb674a6cd699f7dc61a7054a8ff3dec73eb667f59644346be2 +MD = 809c6b5d41da7cd10df90b02b193ac7d40cf2e46c139e9dbd208a988da2b25002cdbad1db2ecc1322da20b7d054e5fe6 + +Len = 816 +Msg = b9ce382e1e82a873cc444248a3008c2cf64d18759057abe8f91c9d87f5dc83aa4eca0c51d30829b9a1d2712da1fac31f52942d77c9f20c2bf6d3751028d7d4f0d336d3dc92b27ec368caa4444b3180c1e37e98b58f25e647a9a6361f0b04cf78d17955766168 +MD = 18cd10b3ea907b3770e8eb91c974666e2da2525afe7020b872b3ec6689e5e1cd0059dd4fd49ce44d75dc4c8430c322d6 + +Len = 824 +Msg = 6778d82f3a98eecdfac55ddeebc52476a070094fbd65831801fdd60f837d80d23b90d472c5f4e5ca6273a50f40154ea8fb94013f6310ad18800433a1d379c84bdf799a99e8c7b676fbcd29cc2ed66552297de7a6e565179bb42b70d48299e0925a1d72ca2c792a +MD = 71f08d9333df5cb885fd23d6cbb1db84f9b55908d069df50fa4795cc713a18439bcab8daca078356f5c75a619f2f8782 + +Len = 832 +Msg = ba3a54a77d7c2b8ccec6d53136cd48827c87acdd1cd86ad1f56e862642ea2e1dcb4093f85d60f7bd77160738462e6c3fd3dd9d3a7c5cf7e2a1d60f489f84471902179f21f656ce0fff089278ea14441e04e7af71891622565f44c428044728fcc686212a32a5d809 +MD = 3cc154f0542d8e3cacf9d79f231416816178a7ef2275fb257a48a2f763ffa2e15a33c27b970a416a057925aa0412d268 + +Len = 840 +Msg = 7eec4f4f491b4eeaeb1cdbdb95e9511c2872372bf64a1f61cda1cd8032729c8beafd1edabf78036d80023c814ad8606106cb4e7f33f214c3e69c0f230e885474fd594f7f2444aa581e0c70ebf13073d89063eb81a43c5f608b2fc99fa1bcf5e2bfe62a6802e70c52ce +MD = 2f8c5682a07438043e55f0b7759fe7eea5d9bdfc8b0f89800ebcf777bc05a941ea7f3cac45d4659de0f505d814590b6b + +Len = 848 +Msg = f3715b9e3ddd7862e15ee87aa23f1aaa0580591e55cff3fee9b49b42aa0c0cc8cfb8efa3eb96ffb72ab06b83d7b47b3d22a5772421cfc51214005150edf532af10138ad45758add459908601eccc3703e810002a2e4c6202e98d84281475d55d3de9f3d98809cce1f665 +MD = 04e7d55b0eb4bc3d3a21cfd2941dbb4dc44706588967186b40da54902aeea97b262c97f75e37ebe3cd60a804e7b9feca + +Len = 856 +Msg = dfd7d792e162bf7a889109550a0fc4c415232af0c0d72dcbc2595299e1a1c2aeae549f7970e994c15e0ab02f113d740d38c32a4d8ec079cd099d37d954ab7ef2800902cdf7c7a19fb14b3c98aaf4c6ad93fe9a9bc7a61229828e55ad4d6270d1bdbca9975d450f9be91e56 +MD = 08e5ef57d0c2aa23edfc75cfae39e6bc1a43b5db08b2e27bc9823114edf760367db9cf3cd9c3779755f6d39e219b7079 + +Len = 864 +Msg = ffbc7c47f52e69f5c667f4ed578b46ff4592048f789081f3fb39321d0aa4627a6d4f261905649410a53a301c231fa787ae55c04f615a8f84196cecf2844d23007b44edd892649fc8ed10a2e855bf23fe8afd0b9edbb33296f5a7cf89f94634d9d1a2b8cac3b7f4e546f2329b +MD = be10c7baf94608408a0accfbc8ce95e159d08d8ca75dd6c273f935947a7ec3463e10a58d3ceaa0b2198b0887a3a24a29 + +Len = 872 +Msg = a39f202d866e8e96765fbb53b6772537dec043322f4a7475247036d7495c987850cef2a46218d3fab36e3bcd595c0aca5e98b9db14fa484ca8c9772dfa3839f7ac3066727a50b0d5c933d82f82f1220720e8063f08bc283f199c8a4f85c70043df4fe55e751d0d71df36fa43d8 +MD = 3b2664ccb555a1b1f3ec996860146ea75ef7f3bd62028a19c26f63339399f4275a07f3c064d34766ebe8e4dd532f6629 + +Len = 880 +Msg = b2c8261853e2218dfa135cb5387810352b8962e94e9fdc8695b41e7dba6ad122d14fdd0d2360dcc039ccce8b37fa0ead6ccc85bc26261d47cbaa78b925c6e380fef1856fed31dc616fe16b2039b1ac85cdee4ce04c0497998b41321868db08e35f358606585e0bb8c3da9a3be7a6 +MD = 45b286f49fd05c45c921b7bfdbe2cb024441c372e07394dcccae0de834cd541f13a79dbb3e5078896e88438542bd2f12 + +Len = 888 +Msg = a04f390a9cc2effad05db80d9076a8d4b6cc8bba97b27b423670b290b8e69c2b187230011c1481ac88d090f39154659494db5e410851c6e8b2b8a93717cae76037e0881978124fe7e1a0929d8891491f4e99646cc94062dc82411fa66130eda46560e75b98048236439465125e737b +MD = e7089d72945cef851e689b4409cfb63d135f0b5cdfb0dac6c3a292dd70371ab4b79da1997d7992906ac7213502662920 + +Len = 896 +Msg = f419494c3c6d0727b3395a483a2167182a7252f4fd099c2d4b71b053f94bb8b3adf3b51e8460cfec084ce9415c95798fbae4975c208c544645b54c44d2b97f2ecfce5c805be61f5ba1d35dcc07afdd51a87baa990506668cf710e18be9b0ebf943f366fa29c69f7a6616de72a3353b66 +MD = aead8688c58c6ba4e9cadb4756b465dce0fb06f1cfaa478197f2ea89414e47e9572034adfed160703c79b82b3fd7ab78 + +Len = 904 +Msg = aaf7584d53006cbf2d2040e51b7feebd2bbf1e9f6d817cd8062a6a9680e7f10464eefeb50b07cb46b14b9b3fcb2caa3b9ab664490115d5919456613bf172b58c5388fd52646a5783535b88212717ef605314b70b8a085024d4ab1fcbe2be74609e4cbdec0730fabd3cd77151d647a3767b +MD = e6e79d8c61d0ea9fc70dd4dec1fa432849c3396e717b170badbd87a4c7974efc590ab8c1183a6232beff14534f004b02 + +Len = 912 +Msg = a467f77369730201f2812204fd63ad0d2757be580d937dfeb221a06b21ed3213531d936152a0c1f09f0ad5fed19fd11e80ad982c61203e86b2508279d91d99fa483e2e97a3d6a6ad2548a8da404dddb58344f4bdc1c9ea907088885e4f532d9c4c73cdfda43c3a9e4ce5a2809096593cfac1 +MD = 5a7508c2cc096bf65a4d4d337aea22008edb9a3bae869f94e09fb526a52c3368e9b28576fb950f078b7e43b5562120e6 + +Len = 920 +Msg = 01abc90e9180fc9bb8ea67a405073ed6848bf33048076566476c55836bcb19d3e55e9400c5cc657bc7a95f1d703c390f5a8687e7cd7fe9138ea3837bfcadad6258a3eb8d65121fa8319bfde532aec0e694961bddd2b673f284124be5781100f40381b6ff99db92ea9cc82a4372e53924dac398 +MD = 96b209d7cb2c2033b38350744767fa5c253e1bfdb99fe8418bff83804df02248140fe3b77b0bfd4a79b51f70405a434b + +Len = 928 +Msg = b555d99056362bfc2bac2a1bbb71ba112d644e50b82b015e5a1ce3d9cd5e90b8b74b08d32119baa62abae251fc0015e400051ada4ecafce3681e5de727c20d47f5cadc663d46ac682022ca396a4b7ed1c413e0b72bd7eec4a0dfdc2a2185abb5d99afd50940528ca75ad89daeb9a1b61e15747f0 +MD = abd39f79d72c6cd2e8e130f3603032fe3cef4177c3563930096df1f10b87e79cd4e2059cf1b9f8252184bb26f659a5da + +Len = 936 +Msg = 14fb01ae9d6015ecb3e56d6ecdfa4bc0533186adf8457f5e4a5c57c687895f3db395d06ae7ffbd67ec41452009550dfc1878eec0df2eeab09e8665f7e59f9148a86b2bc695b36521a55b2302f2e869aac83f14d6feafc9e587322c3c44f052ea1c0578884f84f56307bc6dde31ba48118a0f62b6fd +MD = fc9b9a95a8ce1c157720cb63101a7594df24f4cc74baf735b0ccf6abb925478ad507cd048d30cde1c788806f43ed3a81 + +Len = 944 +Msg = 11ae0cbfee7bb3df90ce585f09b9cf8ff5bea69a68eeb6c22553f8ed118c9a61e7b752cc2c94f38766e63e1b891dfa05b23347b617d42fde3ec17eea6e76d3cb640bf8fa46586fb9dd5c4d9bfee04c4649571b781709f848ad7081afb6e2c746f071a551251050fd5df72ee65248ecdc24f2cbe74ed5 +MD = 3214b5feec925059149fa852e3ae285a6eb377df926504e2f824572a3aebd2050a20144e7bede7e7fe238ee83e69f72c + +Len = 952 +Msg = a5c4a47a04f4714269d5d922ba4694060aa2df49193720c819fac93bb8787ec55a107ac9a6602f0045fd2cc8e66744bf863ced91eeabe60e7d2c1d80276ecf3bbe91f1757096cf589214f3569c2c48bd74be7f8befddb28395814780a47c180a58b0d0276a7e9873d682f473e27de7275c925ede23b6cc +MD = 6bd9e1303579d815f58e8c6c9855850133251778a632f7b312c4b3163b29b5ef6cb9511a08a31a237d9a7604afbfa056 + +Len = 960 +Msg = 75264774af69ec7ee3125e205bd6d1cb8fdb22f7ea6dbe72d1f2c0f7e2205902796d75e379c79b11498615c21c9f52b8761a885eecc69d132b2b48c63bc074c3055ee5cc13f51d6c987e8188b030b837e8f754d40122b451f15b28cd2bdd576920e1de5806593a36d8e1e89b9ef3caefee5acd80b3e9c9d1 +MD = ffa9e4e856d06227c1ccb959be558309cc10633173f4b66ceb382923b52b9150acfb08a7393500477a6ee4425a827e76 + +Len = 968 +Msg = 791a36d748695e62db5003a8ad367df1f051c1ac6a21d711823e8e069b546e3fa06ceeaae06de70a1de249e1dffd0d940edc6acac00c4c15504c02d4b0933658005423455f00023b01cdc5b681b6083379c24595518a47c654f5e1a10947df10c05a3d716b2a973faf98e1ee3b675816598bb8d4c2a3b06eb7 +MD = f8d33369680524ed6c6a716d4c502de3eac891f340f40e82e37501be1a90fb61d26e5daafe92bc6ef5ec0ae431168842 + +Len = 976 +Msg = 74cd86bbed14d895301d8a54b2956b1c5cd1451eebab620b978d4ecef2cbdf7a14367381f5ee79281a773337740fb9f5853f4253c4b19f684341081d8f561b2ad773224151099588da90e04dddd565f67596c536d64c5b87e9480ad43601397507ad1b61ca0e349fb88f19feb48f770676fd562ee8259f50d0c9 +MD = 73ee8d29c30821dcdfa4441639f037fb6ba3a9ca596dc43428043785756608f6207d80b7f78e573174fb9dfd42f0b8cd + +Len = 984 +Msg = 46612e1a4d016c41700a3b5ccb38323353bd8da5b9942c9c9212df40b4bee06be362a15dad62c8b2924d789168b2d325fe35bd5100e1e29f1ac0fa7a60a94c9eee5a70cccbc75ac214b1946a5679cb523b378d5c690751b7a7a3b80d413712feae7024ce71d6295a3d5d16515c3622a052eb862ebdab81ca7fe3a0 +MD = cac13a3784225be03d526f9abc1eb50a762e72c0e01172a15d578801089e5c9f26e53cc00ff755909453e2964d7df838 + +Len = 992 +Msg = 1a857c1f105d068ceab0b1e12494890ec196362a48b0200a0d75d712b18fb14bec6bb5b68a33b7e0b4fdc5b77142c29c6d9151b9f884f59551f476e5256986a653d4a468f28141ed954721f2cd02054df0438738194545ed70234173ac4988b7d62812de4f2feada14f68e3b41bc9948d4139f4fb4da5939f26c0261 +MD = b75d92b5cd3772846f7b68064a3567ae43e5010099f2b649f35087e7592aeec176646fc8c2629288944261cd35b5fcba + +Len = 1000 +Msg = 9d36818d0c5a008be7904d1917aa3eccb5ef4f38cecb8c4e63c4b2e9b4b091a3bf25b4ed0332445f894c2a4c258b749afa17fad03cdd41713a869f899ba9a085e73fa9474a58db7a950d3a2386b60f79495d8bf73e72acaffdbf65e1989ff9cc206ba8c46a368d8512bac7c7c191d713aca949d45df297b1b6594a1a33 +MD = a88da844579f3e3725d00daa8e1e287da4bfbb2d931ebe8d3b16021154be503341d6371d382ada744f86f5bbb56cdcfa + +Len = 1008 +Msg = 4ae50ed626ee60dc5ea556e3ce0d3c18b9e6225b5620814e8b9621acf8f939dd370ad9c7620d85e6d67a229f37f517d1b580acae8df0b5c9d29d756f6d5ebd3b63b554e556469b5b4f8e7113bad1559fb254ca827fcd00425d18b0be7f2b48c2544c48d90982ec624f490be65e893fa93ac9467f35a0a8e1b56d9a403748 +MD = f8cd943f429333c7c8d30a8576827f92c92ae18e0dbcae770601b79687bccf8c23e9e589dfeb45c3b9bcafdd545e45e7 + +Len = 1016 +Msg = dbed7612448d46cbe0a384d1c93233f02ffd1c984ba765299518656d3723b766c1658d4b1e7047cdc729459e366ef9349efc40cbd990f2a9a24db7a5045e1dea12dce8f9d9f2aaed933f93031e7b8959ac5e7bf6bbbdf30b48f7eb783f8fe292371a2f245c5c94b4acae160767a20ce7c0ea7723d97691d8eedda9efd1fe2d +MD = fb531a1ed181c732311e56f4b56ed91dcacc0dd6bf1eb4a44be6f87dd7cb1ef9dfb0310f4a79eaaa3f32bf3914d8624e + +Len = 1024 +Msg = 3bf52cc5ee86b9a0190f390a5c0366a560b557000dbe5115fd9ee11630a62769011575f15881198f227876e8fe685a6939bc8b89fd48a34ec5e71e131462b2886794dffa68ccc6d564733e67ffef25e627c6f4b5460796e3bce67bf58ca6e8e555bc916a8531697ac948b90dc8616f25101db90b50c3d3dbc9e21e42ff387187 +MD = 12b6cb35eda92ee37356ddee77781a17b3d90e563824a984faffc6fdd1693bd7626039635563cfc3b9a2b00f9c65eefd + diff --git a/vendor/ring/third_party/NIST/SHAVS/SHA512LongMsg.rsp b/vendor/ring/third_party/NIST/SHAVS/SHA512LongMsg.rsp new file mode 100644 index 00000000..3018d8e5 --- /dev/null +++ b/vendor/ring/third_party/NIST/SHAVS/SHA512LongMsg.rsp @@ -0,0 +1,519 @@ +# CAVS 11.0 +# "SHA-512 LongMsg" information +# SHA-512 tests are configured for BYTE oriented implementations +# Generated on Tue Mar 15 08:23:50 2011 + +[L = 64] + +Len = 1816 +Msg = 4f05600950664d5190a2ebc29c9edb89c20079a4d3e6bc3b27d75e34e2fa3d02768502bd69790078598d5fcf3d6779bfed1284bbe5ad72fb456015181d9587d6e864c940564eaafb4f2fead4346ea09b6877d9340f6b82eb1515880872213da3ad88feba9f4f13817a71d6f90a1a17c43a15c038d988b5b29edffe2d6a062813cedbe852cde302b3e33b696846d2a8e36bd680efcc6cd3f9e9a4c1ae8cac10cc5244d131677140399176ed46700019a004a163806f7fa467fc4e17b4617bbd7641aaff7ff56396ba8c08a8be100b33a20b5daf134a2aefa5e1c3496770dcf6baa4f7bb +MD = a9db490c708cc72548d78635aa7da79bb253f945d710e5cb677a474efc7c65a2aab45bc7ca1113c8ce0f3c32e1399de9c459535e8816521ab714b2a6cd200525 + +Len = 2608 +Msg = d5e378ae9fc2648f4a13bbec4b0935afb4f822f5fe0d5063053d2fbd547b33b4a32e7a009ee2afafe83d2ebd603568e4a38189b5d24d59e8953260f15f654ed4f42f9a39299d68c3eb78b09e83779d5718b433f1765d35350eac46493d194e84d1ce1f81c95b59725cab8ab73d369ab01e7967cf73a3acf1789227ee75fdfb6e40f353ff0484486542be053115db2896bab86c774f8985c4dbcc4c078f7b1c3a4c867cdc6580fe44a598673494cc0fb1f6598b1295768a584041fdbd14fa7b90fa6fe33f71b743b68e23f8e7407217aad9440cc8cad28152aedb82388be2de165496d051b292de6303460273a43508296b6237c07804335d2e81229f7c9a0e7761e38a3aaf7799f40fe9cb00457ea9d5b59953232676681fc71b261a6f8cd359293f5b21f0cf3a11b7f49cb5adb3c357bed2aa185d8fe8408192d6d3ed1ff465b590892efe03 +MD = a70c75b9b1f0ac2ed2c2797763ac9a6601d95f46889b00fc3ddae4d0ac6923750a108d79eb764e77ac07b7cb5c01cb4b3747dcf69ba3b35c51fb995da2632e70 + +Len = 3400 +Msg = 4f7a5618870945b89f194e31b1aa802c5350326dc691df58708e34b48ce666b021d7c92330a69f1832412d8ac224156c9679dfedb383d9f9e13c21035d3d0002cfdf79b97ba0223cbbc833b0ad4cdd5229f2ddbbf6b650623d6cc9623da8a17d41db8e61cfbe772b23f4872adceb81e5f403535ff5f2ed996a67535994edf12a5f1230a494c946ed500e5280b5c8a82ddff369611afe58a85272e870cbd59a1012ce8509338a368b2c5dbb3ba2adfb33d30c494acca43896dbd8b030482841374055b81812c6f00c9e2bebe2096021feb69418a272aa356cefdfd22074ae91a8d2f1ef599a481c788dbe0afd54aac39672d401ef76d9f83175d177c9b72e2f6ab1e7525533d761d8e3603f14ea538904ed142abb3ff929ed55f4c6b17a72c685c3820b93463a67338756b2b033231a4f119cbb8d35d270a97791e8622340fc02f2093f9b393ad79161eb8c5897e21f7fc4b3ddeec02b736cc3ef04641c6179e825c319f6769f59fa5966f5957e573f9df0a2b76548cedd3e2158433dcb9de63f44f9be2b63319477570e14ee504b23b07cb2737a358154277912cd779abbeb1036f459c26ab7310f43 +MD = 713d5c26de17e1440a36aab93f7cd8111cd62fd8bea5099b2b6bf93e470e1eaeab8b925c646e9e67ce01b03b33d2b500b9400e59f0ecdfb00dd7ddcd230cc837 + +Len = 4192 +Msg = 5e0e84419c02ddda289aa126bdb40a060464aa58b88bad2708ab5f1e3df9ee439cb470e28eb627c6fe4904af033b6b01bf3536ba8748fca643c993d6185fd34e455a9dfe4b461cf451c04bcfc689b87748d9870bc5f6b91be004af18961fe90821a7147e1cdb44cae9aa7e6d50c579d068f9a535bbbc6deda506b9cbfd62b8daf744dc4b499d26b18dada371e7183773e73d991eb1c39f845b74bcd9964fc72a91d8fd4b1ab34a120771c4c2d4aa78ca8d4c6ab0ee32d748caf9bd29a90f9e61b50c8068d74638531d9fe84a5fa2c73c22cf20d1bc329ea1b93bc6a37ec9c5e82c886c89c77d79de98df18f0cf29a9316d6dc46b61eb7af7f1e2de2f5ca6c525bef3c996338194193fd85b9c6e66a81137cf5d652684f6b23b970eb58dce248232f6a0766379116edc33b93682824b45489cf3a75326973a5d025d1d57686d665238f8139f8e794435973aa754a41a33687d8f1930f8e7f71fcad34f039c2539e462d9542fe8520214ade7d52cf59e445f1a37a305236d524b977834d894d662b11b4b215aae27123f1dc7a9529d5ee0f41af62d19ceb1b1a71355b22075074b810c57626a097ddb7e8ee20b0dc3e370f126d19fb5223c7dfde471b2216a415b1cdc04ffa520dec59ba941e4a68fb35a1ce5d2e12147951f13b2d41d25980bfa49345be1541cd1385c15eb1a652a58083d0000dba56444fdb12687d9722aed90d2bc62eebe24df9c8b7ae897 +MD = d4a3b38f18b048e61686c2159c666469ce9a9400632fd40ac1d6ed33162b921b95ac26238af9fa00a4314a6046e1733fd4fadc6033f3ac33d2b8c202afa5f02f + +Len = 4984 +Msg = f516561edc530bf7aa1a63307d62812fb560dd5da66297298ffb0c4fd060a85a5712fb675cbd0e2d4e60f73a0dafab7f59b6140f8bbe63248274a863e1489f617814cd65fffecc700a9fe47a3965dbffaf350dbac655bfb1018ab071437df19b3e63f79f2dddefc8c61d51796a4bb8b6a027f1e5c1ef51d6f5834c025dc7441092499f9e4f241c3d6a2467bd092aebac12d2e719e354c49d44a8a69d99ee41c95d0ceee8cb99fdd8defa4dd07cca1be9ee8018dd944bbe0ed741e3ca5eb98fcd85f50b070b053aa00ae72c3a2df3f1761d77abb93c9ee73096962e1115f1d624f44c1e83752f7b9ed7352c81826d145a86ffc9354313e90b69eeadfb245ec0d7905951e273e167d82b2a742fe5ff2e9d10629ada127369a73993880ff4c8f3ed4363caae6ce1a658f0102dcbbd73e448a5e6452f0f85120deccbe8d5edf7176ef3b4b16ec8f8e1260c2d7ede728fe0612cd5f3bda31389446cdff5d677b3d5638a922fabeeeec04869ca90ef6c1ccaf38c75cb0a36e379549f17d699fbc3d5d3ef466cec488beac8ed2e8b8612e14903af0ff6a031bf88466fbab4a7dff0bec60a188fb93d9708ad82a3962ccea8069b7cea9b07fa6d5e21c312b6868d023844c34fc09a35d9c1000f6fd9670737a9c2db50e3c5fbb5a4ed826505c06bc1ed5602352918981abec87bdb7dc22657d981b487f6649b6102b296fcc8dde3f48203af10efbacf22a60db02faac291d03edfefd8fb6c41371f79e61f28635c65a254b2293d0940b922d895b387f1b16a81e4758b1a635701a4495a154ddc3edaf34ff3c8398c54a7da3012af3dd6eeed4a982ce87dd34485382bda285ecff01c1dfe5b350bcb73b3751d0f6af3f9b12040 +MD = 1288010a5092c66dc87771687ca6227139ce5dcb48a79dbcacb22bd365f661fb1229493c662881b86bf1eca2071095bde47c96b992ee16d3e3277662cdbf960c + +Len = 5776 +Msg = bc4b7d3a380be067ed7a2a02f6137cf2aaa6f5332aa0dd34368d237e45db0a97d4e11f26fe206e574dc8f581d07e59076d5cd87c79397f0a862b9d147c4b771aecb83ddda0df3dc477f9577f70d4b1ea04d7ac34b9411640f4b1a14b0eeb93d0abd9c0a847d0b57612153742fea0ec64161f57a4113e0a9f2726166d2343c780ba4b8ecf1b7c3f34c7257c13a367713d4b3dc314aabac2efc892e6c0e2dc79f4c016919a436a41c83e2f103a86b3aa3d4d38d6cbab3ca8f87efef88d743d13f26643af51e82225f81e3edaffd10bfe2bc1187a133d4d2381f271341b01eefb4354d9d23b312d518d0f57c2aaa9f8d5d152e6963288749b54cbf382b4b0789baf31e0e1a147122f4fbb84b082380198f5a6a91171b3397837b28cca9ea96259fda561c4cb51592505c7cc8cd0a6aead606569d518e72423f34f45f42215349ff75a626301788b9d79de383edc1b877dda382ec96f4bbe02504925e8881c77d463f5eea68be42ffe71a6ceafeebe15702bc701d5be088e7e1549348f18e5b25f0a210a75b0bccdb0b6c798c54eb7dfef1ab9e9e14c451c000cf67bcf1a996daab484c0b8ba29ed1b10ea9e69442f6d6070b6efd5622bf1eefbf90191d55f311c28c61757ef5218a746b7e784174e482cf5681a9948e294b1abf9cfbe9260841d3090183a9860d5bc22d57bfc103bf7bc7174721646918db2e49feb3c99c3f115928ac949fc7aadc26aed62bb771f0277ac85ff32a46065586d935ff532b1fd6c175b346d65c92721e7a6a4a79421f2c46d41cad6a978a30a107c33cfa552328b87ab618c1974cb4161a94aaaae6a4e0d7e50daeb9e01cf3293026db439cd17d8aa24568f61a4218aa09d5cab0e219eb9a55b3757cb227237bfce178b374b34bc486c1d5f8581b2656b2be091fd6f6b30ab0aea04780413815c88383ce7f312a0282bbee2cd3205388bfbe046c17c3bd95804fad8edcf3a7832d8d9ae91ee38ea130a3f0281e0a26cc9b463b1a26f991e73f26f +MD = 34b4cf4ed7281ecb07f381e9fc3805072238e21ea0d1d2c5ec0ad3b23ea700247b8e9535de9fac6783f955166c4ca9a90f4caa47056fa9f313be75daf27ec8d2 + +Len = 6568 +Msg = edba7d6312144e90ec9eaace7576045a46e553dcb8ee5a9849272de841c8f1ea9502e3760b929c539f9593aa259ee3ba31064ece3483826ce7fc9cd0ed9ceb99b426f6c19c88c0d25bb24a57a0a85a91f6d67b6ceba545b1724bde7d87e7c1f211cdbe2c0c1e4277e79dd9bf2bbdf1485effe19f277a2ad0b3bbfcd956d0fc5f76a044a0a57eaba90dfd47c8110531453126884d2e2db92f6ff5fdcba4802346a9468f03adcd83cf937a9d5c98a7a1f137f6795f4ae47a3771a1e93ab71fbe117368a73f6d36505342bde2620acccab43714bbbec0c7f6508066c910d9d455279cae953a2ddf9c9ce26e1ec2ad9b32f7fb2b5650db00b4e363eca4344fc771f0ecbf60de35f0ee123b355a64ca3d632049e153ffe2b43c56e3dc828e642199d42b441011cc92cf1d14b89d30a8d9e599eadeb9b21c0e1713c8de6b065f0a563b20e4aebd3becc62537a2ef0e91983ec8a6cb9051d233cc80da99688487a92f8d944841c9cb285b926a9958e6cba2f8174450e1c34d4ee307e0b680f02627ac324f18d11dc16b16cc7645e1a09f1e9aed8e14b3f2d285e50fa4dcbc3282ab559319fb67a168e0803b235091245534adb14ac00ec5ac0059ffecb42232e35eb316ba99093d07ac2048385f715a350eb8cd41fbfa2421e8c74181e6bdd993684d24f99bc2d9e5fa7e597f1d872a87d143a83b6e80f77b65b73c2b19920dd9f0ab269fa9975d4bf023d8be2fdd7d92a8d7aa00c1a726009eb258b1f5abb7fc1e5682746a92b181b6962bbe407b399fb9fb3b579b789af9bc3ffddd240fc0451bd5a24087babdcf755fbc47f66748f62c37c309a4f939ade6e793754bc60efc0fb0eccba7176a7d5507f121f9ab90df2a13aadf8534ec664531824215d98b692270cadd73b29ed27d153413f24ffba2db18589ee6319c6a01a5330c274f1dd37a9ca33d939242171611ece68959708666cd36116ef72f0341cb0c9b2c30ae8442bcdeb4aebf3f954784806265d3d6d4f3baaaffc68e8f762d2c76b6ca8425c2a059e50a6c427b9139f55a4f2fc417d5ac681d2f96fea20eef4fda27a9546ad6bcfa1f077722e05613ece1758e351aceb75ef86a854f5212acbc9eb472a76508bf27f4727467552bfef17d9c2b2dc70a3c24a1783b8a85c9 +MD = ffcb3b313e576ea5b0a87449749b82c1523947ad019c633401a185fbcb4fd475dfe42289c5413f440d083f73b65abcf2386e0eff39acfafa398a3d6b778fde23 + +Len = 7360 +Msg = 89eb3056770a6157f06921bc153834447c4b6d862d10d185f1c3f984cde5b81cc9eafe8bf532fc4fae3a89f41e14c52a0214fc1ab0cdcdfa583b8bdf8a42e3d3f857bf287e7e6b0c5f74f65dd22ddcbebd81e1eac022404875d105c0f6d1b8cea09c3bd417d6f5b58a7f319f396cc02834f8e69d65f77496d0eb31ce1a7b7e3248203a38ca22e472b8c3ff635bb9bb91efe2d1dba734af0df2f3d5b2fd267f2a794b84fc9e4a7e6d70a82b5141fd132177a86b4e8fc13ad5624fba14a7bb01dbba85e0c79c360ccb3a967b10f21e11ff53b07c9c24865d15a869a89a21234d7093361841caced5b79ef5b9497606fd540b64cc6d6f6b5ff64da767ef7244ab0f8cc6f21332fb2357252daba3d69b1f47282b226a76598a9fd873beb9a20862e12e9e37e5dca33cd356a61ac719c7be01316c483a43362438d13476a1ba56bc0d0024af5eceaf6954bac8cd5c477124a9ae910486deec76ebc151574ec115ffbb8bc121271208f202d7fc8e0b6981976827011ff64d61c8de2f342969bf2f741555dd56e8b0941f0438a8237c85de6066252461319a7f6239a344b499bd8b6340e8e11748ae3d388362365556a672c7ca2f6291e0cd2c8b25a5e9c087c1111467cc332aef16ea84a6df0cec41d12413bdce2379aaec528ccabe8b14dad6a9ceb0873d5786f0834c963594b0e710dc8e6689cfdf3801d8ad4f7592793b013bdb43a36668b542efd87aef3469ed6a827eeee8ce8c3113a636dc5367b7524caf8149a81523231618707b9256defee8ff2c7c7388483e2ba46f9bdf7096c6beed09ea1cb4527973e55cc1a861d8c09039e039b366da0750baa0b2a116de405fdebb4d89aabb5e623ee373b9bd1fdb6c19e24c2fce0c338ad0104921c156673868de9b765f277be90b4fb94bd17bf8848779de6f29a46be1ce0889e8dac7e45074bcfb6c3b5d781334e6bce807b4bfde6cee17fce06b565e9cd0997dc7f95eb0eb9b96f2a627fce5a2f1a417c691d784ae891e5d59299d0822b0a268f2b47e5eb3c49490084baf693bb7996177dbe97e37921c1afea6e7e849f0cc32c1c0ec64b67f1ccec9923aa6e882c24c805a9cd2ed5138bc36a9dd04f7d73e629ee44fcada13563551c445a4929847624ad6998aba0e9bca68fc276615ae2180f0e94f9609ca6b4c08a9776c1f42512b3d1787ae85106cccfe656c168cbd9c141f9895d22aea839b5708790579c8082ec1e40f4436a0d44b5fad541a424cd8a793b7c98525bcc5aba4abf277867293f33f07d956b406fbcef39c897c21a3fd +MD = 6b8be942ecd6e8509b88c0ebed80e0e2193eccf212430429e7d3d097285726e85e0d1d22d046cfbf37f80f922e36bb1c3b9e9d43cbbc477dc80eefc783adc20b + +Len = 8152 +Msg = afdccc84f257cb768b7ad735edbd1990b6114bad876928ab1279208574bd513ac6beb32bee9192c4bba0425e32ad0e64221371b5ff4f894aecc0c8191aabed3951823246cc66c7074aea804e621acb2017bce416acd54c03ba6f77d77f9ac4c479b1b39f33de538860e0f9cd260c370cbc920c983702591ea10f94894c92c02265d29dfccc021c8f230b15a3268c3c703a1f520348df98e3cb2789f5289cc89d3f6d58263fd90b64bef23d9709a1c193b8eb1c1e8672f19a603fbde4bcbec57b2c0a4ce5336b084e571ed7737754afbe5f7cd3b29ac54d8a87df981db0029d055632e10051c1fc9617154dfd1aacec39575ce0872be092fc6990826aab703983e56c7f4140e2cd85256105fe97b1614cc713a965e2c9aa382ed9e391550f813d01418e6ea8d66561aa89693d996bf63fd7279814678a7b86fd43235b57e75d7ad038765033a6aa72cd16df84c6e39459b122145b612bef2efe55aa905900b6847dd99faf87598602b78fd199c62021e37a8c840479b2ed775b97e1f8026372a12eac71534cf7e0578f7ca645422a86255deb52d556295cab39912e5afb177b1a0c3a55032b899fba7e66c650e20aac6780c9e597a1972610c3ccfa80eb24b7373e0ab189cb16ad73acd499824dc77af10bada511010532ee1ecfae307b93103feca4eeabd6a6f1ca404e87a32c69d70a2720fa0d1f7a688f7522b033536b6d7c40917532f1425307625cf87a26f9adfcfca94c51a2feb03aee4e6a511ab4b5346058ade5c6f0bb713c8754d0e47de30db1d003a73399f236b1da42517976d2b07481fd8efdba1151f356036d0d0061866e1d87d57a5416cce74ea2fd17baab38a595cff33ea83defb2526d194a870faf5d1941a31e360444b833f11b9d8728131a1b8ade30c128939f01fa9c431cd5cfa34b97dbc848a5e64b0f9774b2e6318bfd9b95157b0db885e2ed13bd9fc69b2f6b3bf2431f91dff9c96dfcd0ffdeaee6739d5a60c894d60ca49e1e45078e4918db72bba5cc199bc759d288f72b77876da6aa4089bf5f6b720d9b85fd227ac7d01b7758c776e8c29624c8a3b0dfb9a568be49af5607755dfd446caeaa9995fd9f54d23371c6073aaf52d6b5c4c3adee1fe2030f9149de96f67299031713e4d3cfae0cb26d637ded5a0a8526fc7e5a4bd93b5fc9002ca3fca5beaaea0b397132a750ac3f82f752c1df745b5e1eb9c9a4e0f1e5436c59cb79515128cd4db343006e633a4177278ea085b9e2c5f21b00e27a2b1de69c775ef443529b13a62862276d0e3f20159d3a719501a2c3424d09ebf011901a5a2f6554c4ea8924de40d78dec7a424324015e1c577322c1d4f6eca98acdc5486c29e6831a417c68bda4a91c32cecb146cfa00881338ea2571bfaf038f8444d69b0cec688d7efb470bfce0ba893362fab4312a9f11778259 +MD = 014fd2fa6b05c4fca1a5c0753f15c940b5f976b41a40bf6bb14afe839d83a4676173940717bb7e746a2ac77f573e6744cf0002b78b5b7f664e22434e22d0ccd0 + +Len = 8944 +Msg = 7a26b7f55809d58528540601c87db4bb8e908c3d2d82823addc315c4b612d4be5d952195e329352beaf764140a48a205739a4789d3f20ff67a7565a0bc32e14c96430fe895147279f402c85404289091d175cabd0302fecf02a37f5d5ebdf1106d570956367394568d9ebb2980c68547f24c9d3f865a56acbf77ec6465580df22af997478deda4acfff3c4fb44c9890f1d45497924a11f74f717331c98ad3bda14534223632ba86290286b321adaa4d1998855d1a4806111f3abdcecc16485b0748a915280d4ab6089653836c8a1df75af3e49b1d09e256afb5c703ea625f35c92c90d3cac91b28e32d4b47016c541e3a78fae806ea472675651767911978cc7b6363c49af0ac7d4d29a6646ceefd304c9a20aa6473951f04eb47604c86258d728f9a8e250e6f11ab2e2d621b6c69cbe5ca0e88b2306c9ed29aaf849932f5f752f3bd96d58ce39481bd28d6a98f3a4faaab0cd97cab2e246305d85af3ca6aa8a152456549069a546539212873a1df3a1f9fb433203e6a4e4abf5a49e896e40fc20dba7fdbd6040fca24bede264ed929992a9d1c4974a18ade299de7e443029b5998954d2aa5a0f525225a7e1e00a88ccbde100b54f85458a1c72bab833936e9bc855e5391e001c31aa47c7ee751edd20c2cb566df1403463a3a8c0b21f401698f468e39ce0fa6e7ff1dad570eace997fe8905d544522eb21bd6278d5cfde299366e9d662b9ef0d2670055acf08c4c5d078589dd215d474aab3c86b890d16b073670144f37187020c6ff1dd7297a869fbba4a9d5027fdd7e8cd0420379f90b1223dd8b7b7d06b541b35c5e6c35f218be7f68fe53444461ac2523b1f454ef337873095b6169e430b390caafd2927d8357e744efde83457471f8c98f11de2e7478a8a61ca78a2b630503ac8ab0cb9756ea77bb06ed2bfd765e9c1401d252316eb1391637945a56dc947084677d4db9f3f4a55ddbe5cad6f7d073a5e2bc7d9252a0a8fc44ee56f10e106be4deaea56feae5048fc78edc5c696613f18a46acbbf0d57caabcec0c8467d75a4048ab4f13bc69f9d3621ecd085b8df17960f75c28a9ae38b41833e78b7a77c0294e29b76fe8c209cb243c39753eb690c01f452862edb9419adf4c8460c66031f247708abee0abb8c9965d9dfd938e76481db68df54d853be18a9c4fbedc3f244ddd3615ab44759b712109673bea641683d4d1f95a49809c0aa2b9c5f01c431b9e77d0f49f84be06346cb621aab3e5f605ed1df6fc5239c688a01b63af174a8c669fd7b41611f3ad95c1ea59b480729940bf010366081f6fee1b37c5464d840b38bdc0c0997ca4d617d91c7bf3c09884b6d311ab21cbbfdcad6ca547503fadfc777a1296b43540342d1ad304e304c62cfac1c66aba2d79b1392cda86476e16e4b52d43c2d0dc642c67ff94910cbd9a166ef395ae999e0b7233d44dfea6495d68747fdac189c27f433b0fe78ccb6b72b595e115f33aadb3840feb761cf761ffdc37ba5e1f4997f00d28b42264c98eeeaf0232bde537dd208b3fdaf96db5386cd4719534389abd64eeb394fbc561a87c472630f3d0fb9 +MD = 5f1da3c03d633d35d6f28c1987ad25ae9e26b6afdebb2aed02f1719b706d20e5632b2005933db62129032fa3fd2304469928f6810af1742c27731a5beffb15bf + +Len = 9736 +Msg = 8ceddebd38f00406743a6756565ce762d3464435d50bd61b8de57fbe0b79df8f0c5cc66713d5ef6ebbe5eb3d4b845b3f8b2e625dd69e5ada71dac67b1b6f88ece5fe555f44f7657665a56f63c06bd44ef04d1bf6c2b19d9c8c67811dc0e8eb5ec0db71ecf4decfe41b82db11de97bb55abab554ac0cd0728869798ea216b6fac45fc03584b1093818485178fcd92761d6350f99ff9790048086ff42b67807ca01b68f4e970171b1549b50b25b4e46f6ec145f03e953df0c2baf97b27b9af7a00eb272ae88c7bcd68111ba01bbb130c0f6d91206fbba13f5f433c16284081d1955c428f9dc6c2134185bdbcb80ca9b7ca0e3c737a932e55e74c40ae74237dea2717c00a4f4776546a4ca54845cc2ed7654c4fd0a6466b9b227c0e29548b2c2b7ec3a98247361ef7a90fdb2d0a2628d3a9d1d11e3cfce177d87cad7110a014fd610906e1cebc4366c77665514f4021155e42ca4784dc1652d0f3256cf089bfc99991de0e2a016c088c284d9e5c42a0044c4a4232c60f9495d38a7f043c6fb5f5ef0239f1a32c2145bfce9bfb78552e083a8f42c74abde3a6a9e9c2203b797ceb28051f728366eb852a0f554feda15289f2b9d1ee570c89ef1ab7f6a736d09e110f41997910d6503093948584014d94ef3a71f88f372710d6ee9c2383759ba3d16b5faeee94a5daaec3053281fd817ca3db5fbe92303400c5ec42529b40031192030667b955fa11688209652e2967930b9d2a2bdf8b5cdf23dd4e8bd7df3072bba0dfcac29cfe7cc497482573cc246090477a475f90c63758896bd41f99494db60a91e2f2b0d8a32bcc6b7a382fe36b9aa3f91bf8869b8fccb83f375bb8772bea09c5b42fdbb10e06e71a6c659bca3d92774dae93b70270e73272bb7382e193bf65234a6263b146bbb1fc04e256015dde8c1e081969246111bead684f40b00d9de552ab7491ffd2b4f2ba4997a8b153e8aa153270e528eab2269847d8390b21ec53fbdf4badc43a5772fb446ddb02a81798d933827337933230da5ff4b71b581475c5efd1ff27070ef868fb4a361be3d2201313355a79e5f9a51bb98c0007397d1359e2ecce51c0404ea9781800258c83086bdb73e415676f4c055b895df84d90f75ec086646aed543a65c3bd82472c91198892235734a2fcef3e4fd116161ab3e87d9186079916b48544e22304aa4a641b13402dfcfd1c09546e9d4e73882a4fad5e5ed40006c4c7f7f0df30cd756e64d6b3ed781b995ffc443e4be6bc7705cd0fa82e5897da7ef5570ec1ce27d120f91211a2eefc2ff33f87556383380a3193d6040afa133dcda66f4991e458e6e98b96d56776e6e85e38e55dec0c306a380bca19f9a2be56384205465659a9db50822ba642f823ec2a5126fbef69ecbea29cb2900338de4e4731e2b0181762d9de46992c3d5df962def111d97382b42ff5ad581030a4bc4c82dcce2de005cb07193fa8105f8bb172037f709f803fd0e5bba8824289cea07972a99065b50b2c8e8bd51ffab06b9246206509f51e8887077bf4f9cd159ed1fd9e01f2029f11cc95bc71c89139e5e603bd0aa481564523bebef9855bddfd99ff8e4dbaa9a6fff4453379697e01e2f3d463d60bee2f5eea310b1fed91e7d13ea7cbf3b104d3bdecc67857cb69104803df983105e2b2bb2589eacefb193d04091edc5d9fbb2d34fc3f1371b6f86f015c4ce7835905e6441bede36e759b +MD = 1c7665a61930433fcc7660b36049c016a7c646dd1e8412721314f969d3661554b97b18fd35945109cfbfc783bdc424b204ab19afaac855c284daf7f2cb333a65 + +Len = 10528 +Msg = eb22f73a99b3b00d6c9b15c8be5cf11a5435d561e398bbc1d3dee973423a18604cebd6ef8ab6291bd89475c85ca89f57c4737378ce4b433f0e09d17bec037043ec3a65d132d4939445cc588013e8b2a935eba610750ce2bc8da8a10d3234cf4e51756d8999f3389f39ab8597eb047037310435d1dec4de60d9211fd41eb57ea90506b6bec7fc5e653e99c6b6ece4222a3f26ea651359805279de1475b76ec57d90530819c5d84e0ddbfee1851f700fa9e8b98b711cb510bbf545479b0547ebf278c62b429a6d50c099429fab8b9181ddb225e1a0ffbed6c2d6c082ec11293a2f47c5e6e04ea5aba6fecdc8d1382dbeed27d3b497c65e1990a3b68b10e2faf85d84ba039bea67a9e69407249e2f2d0f02cf29cc01797c234ce48f2bb080a46ea3b80c481d749a90a9e3597abb777abc443190f0841e003a1f22b22a74f40de42a6a237e0bf728a916722994cf18fa0ddad571eac8bfd1a731e3895003451fa11922676d1078f83c56c9e038831b974aed4332807663d9b2a9b27b65067bc0ef996940dcd201f2919070e72f7f8738baa4043d7b3613ffa2b014f030249fda14d2c51694f999feefedf0a4416a64c5a6289ff8a2afd62bc16d93507a06b85459ebc1515e2e4904a095cf8135edbb2556a09ccdbf8ab4455509b6040b53ce16060de259001918eceaaf98e5d5af934212358423986eb536a7ab0572abb4ea08635fb29642610e9e1663d038e759f403220fdd61f704e2e4ff7c090322d11212b80ab871eeae33036bdb01e13492e650cd5532f1a2f44238a5a4491f3751511c4c357c50caaa9001333cb24a840372115d30083a61e5dd1ae04a4e2fb4ddac0e6809879ca0fb2c81b4b16cda9f539f2e18c7e9a4fe80bc73f9969e995f1c2dd054ae60be36490f6c385fb6f94c2b769047435c973f6ce62938b1c3c700b7db4a584b8f1c543d42a80571180f5533fd1d31cbea7bee516326e5c3451f6155be65bc089d20c47ecc1f630d1a8480123ebe208819b8d1d93c5048f3aa0b499fdf07c70e11314db5b5b79c5c45c19671415c5aa174b6b1aa7891a96a7cf27f3c4519c28573b6b68a065af785202c5ef70cdd283f80de556c1fd04f50423cccd5f884f5954c19c8a4c6efbbb0342ea24da92bd28ac79687c83af583cc8550f812012ea86422c14bacfd5e31070730281a202ca0a9d0470d65d0e78d06cc98cb9a6701231d80160749b38fa1af2398b90777cadac5235ab0ede990b5279f7b0d1632e4ade6eb80c324f16952d310cf1dbcb8ebc705493538058dd743578661852d6bbe90e7ed6749e5bed68e99543e1ce0eb79b092c9426d57c5a47ebd0ab2fc881979124a0d335f3323be9b29794c7e1b165bdd932be8178b98dfaf82b2d73acf44fc7c34d44cceb62707c2ac07600a1743799631f88efd490f711ecd073607a9f42f16cfc81b5d17d29a4b4a84e4897979bb2394b79ee838314013c790382bbe32fa27437306d6fe2c5f7e2a7a3fc4ecc109cbe3f07fa0000635d698d5456db70545f9b85d76ff123e3ea37570d98016224bd8472b99ed4a9638ae675ec6963c76f8d2550cd4a2fc0f200152ef1a889fa46990e7f15497beea32e55cb4216ef48cfbfb420a868564a7ebe1ea7e6aa3304f4b3cecc91865030909c1a15ec0bd884f36bca8dff671f00f898b65a53198712cda237d3c4d20c2fba78b5be4094b9fc7925caf118a2d4b4ee047eaecd7300942fc8fc3d15b90a2c9f28ab5cf66e0e2fdf5257e2aac831b6cda5da1dcc433a1999ac6e510aa7d4c7ad408d5a53e43f9f8495d3eb2c33909725e14b3fc6069e03a9d110c81a2af6716344be3f1f93d8bc0744d162f3718bc +MD = 97c433de3cd8f18b75e494bafc3c813e112b2261f1261ea6fab9dce0aaee5e5359f0e763f02154cac1589bb70c2cbe9cd22f976559032923c4e2beaf3f88f196 + +Len = 11320 +Msg = bd361ca6c8d3531d4dc2415db16ff93d3e81d3c2b451113800a1c2814b8be7ae36b7d5cc64d1da003a3a23d7e2feddd796079b5a1b90f89c8bdc7d125827c5fd8eddde40580af36ec6112828cda2c6a690e69893ddfc951efba9be4ea34b4a954c0f01a9ac64e68f7bb018f87a41fad1b4869216037f2fe7d7724fdd33e0bf9ef8b704af66c9fa8ae07dbbf1efc4c2818a4f518a95000f1ea79ef66810cc6c3f1b3cb0fb902078887de1d9b9361466de9baa9c9899667eecf4957c9743f999a13c06cd353151a8b0db4539f857172e0f6efd3ce8199bc27944bea911d34d8eece37d23055243d22b810fa45758b7623d8bb1fa211c8623ec2283447fc8b2924798097911fae03e20f7a9e27d43db498f7b2f9cebab0feb6d134b17882b0fefdae4129904310f34b8c679bb141f6b2c2ec5deeaf0cd1e6026a17fe8d5034bebce4e004984ffb8fb1b75e9f7c1f54e5341f125aed58a9bcc3c5385800d5850cf4b5f3b52396dc3dc708c5f5d2ecc6e06f1886eae45ea6e75dab1c6a7d93205e3789d2b7ccd82191fdf9445b603acb28d661120b3e6f680a42644aa24e19a526e7e92388ee547a00c921402cae79e022fc714a28560b5b7a048939ac1cc971fba85c6cb522cc241eaae94fe6183a846363c195eec5c30fcb36927fc444332540db4c04a8e47fde5035e9ca1437fd566e8efa9bbb0826d3823b1863976ed72dab033081f0be100729dc8b55337822a4b8e054b219879765139473aba1f735f97eb2b26b091a0d1d20114667c0734b1db6fa988f86eea53313d54cbe6077c017405c4a267e82c7aeb776b3884793f71ffd501e7a9f87c0abe77ffbf24f5b16159482505abd72e03a746f5b2d3564872a00635f09affd8a5e22e71a0deb3b9862ffa77d7e3274e72ecb8d95cd165fabda44b6e2b344aa52b83acd1f57b073e78dc64e19e79a033d1a41340bee770fa59f5ecd421dfa38ca58b37484763bae5404ace8ce4d40a8627b6a051617b3df34e79318e5904d0351ae118fe1dfd9458e55f7f9f305c2dee7d0aa735ccf7968ba51a62c55b099a47926d971affb35c3f6f05c1430b79d114da88701387c1416a65bec6a0b058c96b1617fbc575ecdc41e723daa0fc93bd9f461842141b430639964fa648df572548acc78e260811da0754a113dd8b12ba38caa267600fe3afa040b44ae4707075875f6596663f881f39be66b423405e90876c0e251eeb0b02466cd5fa9dec0a83cf34d95caca3ba737e2d5c0599a4df07333644c5763822c9d4229afe9bda8c15c9350b2821bb0f9d7eaa6a4e683efee6e5302c8e917c90caf168eb9d05c260f41c69e442ec0ff067e23c78d6b79621f74461afca9742bcce4648b021032cede871d84af13727c39752ec6fe6af35b200f9d1b3bfb00f109c7bc9d1d0bfa19bb9708b267e278cf1f675c135c678a217caab8821b7026df3fe37f336f35ea8d22ec0896131e6c5e34cf4c3b3be3965ba1d038fe2f8b8e3cdba22cfc8d10bcafa100adae1529c5a006176fad1161a0701c1a9eddccaf8fa0799e5646db4ec8e7b27f587902970d3affca46f7815440f567d44aaf977ea38076328bb0ee2297cbe3b2a9755fe8bb95ae726298e04df05201a7ccf2046b82836e092da94a4eb1c291450121718159468e8a330fc2b1272c661fb62397e874ffcd7cccbe5425af725791001c0c035ea41c8c48dabd206ddb217666e2b688237c2127e96eb049d941b34126b373e13454d4e30478241e3ce4b0768f8e04cce67ee574f418c32dd7b710bfd5864dad82cf3448f6668bfd0cdf9f8a70a3f729667ea6fe7d6b213413591c77ad02fdcac289e708bf34796f56324b1cbab302100c01c22ef5c44f0f249e13030dc808bb6c0b39ccaf4060c7b1734fb7de49ba234f9ee370fdc2a11173fcb0dc8833f301f7c9b8ef4748d6a8a72919e65bc683e5b9ac778ee5d4cbed9a0b528e9ce54130ee4be0fb278c4f849fba4622a3b803a +MD = 44a012fccd62e69ae9a2e9e46427fa491b88f66522cdc1f4ab5c5157196b15dba3905b99c460bf690711797ea556fcf4b2550539151f80eeb522fbc00450c723 + +Len = 12112 +Msg = cb7e0a2878bbccbb7dbdd8a2e2791ea2aeee73c909b5d9a19eda01aa43ea0e07dc4d9c787cd60188ce99d208b4fdaabb2d1226537c24349c87908ef87dd6810bbbf0f3b7f1e2a44b8093b4f727db6684dfdd23410397c241b4b706c37cb068f2310e17cf1d063e6b5b528559843cda638cf8717ce63609f6eff872f589a14c24064f11a6496b5650277f4d1513478fc1fb0a18eb6d2a9324fefbd975ecd1b409025de826bc397462acc115131c250c07f5bc2175e09be834aa67432bed672809eddda436c0972009b2c1e43be7fdd99b42b6930486b08e8cbbe4b8ffd48c308c8e7a4ebd9bade3ad0026c275bcf87fe7aa9f767fa8920f96f91c41d9e86755faaedaeda596a444b65f99b7a9e23e8551f51fd3cd8e69f3b92cb4e5a172211ebb15a589d5f9a4cc8c97c2ccbfa2f67343eae0b1d8805cc05c1b57ad3fbae114378b842b350cd401977048089f4448d22452871887c69300e98fab9f9b08d0bdd6d81ed9ad175d6d3fb2d47431105d285cf5bf10c2a7373ac75058c69ea416a401c31d9d25616798ed240d165e4d5d00539b2ea2716c70f75e2607272ed5da4e1e16267f85331909078f9cf80c4570df700c7cd57d5e65be16d960cc34e544459797e486b5d59b48f7bb2822243ebc4f1d0f52b2ccc23f1757300abc991a7d10d20ffcba9d8f16dd23705a9a8f816cd7c26e583f47e3258a89f4aeff43bdad373945192326a9b251f576da6a3356a600c5ef3586d60840a014edf39e1c15fb423203e1ca366a962ad3944f9afa0492508f5b918f6278b8e060e382a00b6c90ba270ffcb6b61bebf327946130cbd55a5188791660d17cb4d3d59e020df70894277f3213ef8f04d831583cb9368d0f238b18136a030d5c5cffdce51cedca322e0fa234ce7ea76d866ece55ffb32afb1885a8ef3580fc60d9eedb8278496b3286fcf8ddd46ae89e1c31f1a6dbb089e15ec79ed720dd88d053283c3bbd28c250c575e9f5cebb39dec30329f9f334920920d96490d22498f3f13365d99393b7d41303dd43637a8177a36bde14f2472dba844460e5f45d1312dc99c024a4913205972c3c903caeaaafe3f178c07ef1423eb28ffc9d2e8ee3753ce2b3e3952a1b2d7a7b6ea4005f9bcfac1d5fc53f3bb9dbd3429f7f27c1ef643894a8e011665a92e375db4758953c1e2578fbebdf2c7ada0fe5b05588fd1f27f83906e1be4ed77cfba4eb41ec5975e67789b5fa03cd6e838d0199e5f84b5b05a55835af44e97b35ea8f075963b22e6dc9d8f3b955247b1d761dc1f820b28b48677a9d124c402c04d7be955966a94ffd44ee1ef17d3c8af2f1c29055a83a97366526a6d17e59d330eabaff079c45c0dc0f529f6a231a844827776ec637eb6718c8e4b8b6813e59024d0aab2bae8e6952548cdceceec84f6840c4c31175cee435b73c3b87fef7a4c22536038f438c33a938253f3f864dd59a6331f7ff0ceaf4d75bb7970d9c8a9eb89dc76dfa04480427e5a42f2a94b1fc25b8477258a1478044dcdc341004012e2bda44533398c9c61683911477c0fcae53688d9de4dfee71c561347a58dd633b6507351c03a9175fbc397555ecb137d26a9b8cde6a6be6ada21246d2acd0b9afac4a223032dc3bb96230d75c52106a50b378ca9eb4f0371e23189aa2d5850a7149cb94f788db3cba4f903f9070849b107628d1468814eaab909bb8539ca35e6984b313d9cd4e224ccd80355910b6d4f9fbd3293caf7f063b30c2294ec7d3be7fa42a253ec8dcf6562228421ff84d1cf5899f58eaf1da93b84cb674fa1ebc309bf357548e422ebfbf97b1ed4af1f27cec69b7e8b615cd9a092c9f21be6b07bfa5b763273103ec85717443bf42c34dfac4e441610ae5ff211618a4b804745b70853976268fd3bd505301053f703605a1664066494d271933c758edc23302614d23c1b6da107a49294d8620f53a12c376bac54d2ae7a4c2d50433a3c7b2ddc05d67964eca1dbf3917474abc69091e2e83a8bd1f8b4024a311b5f3ee4debcd21a83a02647f1c6b35232996ff244623efcf196e03f5c06f64eec2def5de459a2c37824b217f7746e454dbb214ad57e9ad62f32122efcf4cac75133de101280b881129baac549418efb246e6218ca63811 +MD = b4641572cf72bed4513dfc2771dfeafc1aa6dbf7f6b740998c905f2f48ae471d00eb0e284291290360c9763500a584bab1a1603a8017accd15c3db7fac25b572 + +Len = 12904 +Msg = 43331ce3faa34f02b379076a0fe38dca551dfd63148804b90afbe98e455dca1088742952f0f8a7f9d7ec0e38f92e95fed54c606d5799478fb380d84494199f7f76faa5b250503687772ee7d1bf24d8c2e314375e2741052f3ba91d3b63957233d56e98ed62d2861459e79a1fa9efdd7f451d891dcda7c8036a1dbf59faf9cb946d770aea6ea71e0946c02d08feb72c9ec4105e9291f517720885c688a06e320a05be0491bcf686cc0660aa7608a34e852895bea5ba507be4dc883baf9e1c30fd67ea8dca94e847c7617118500ddcca9e3953b23e92e27bc1afcf25b63c2a4cd559a4ae7d3da5e8611f98807e568a2850bff341455fd39f7249018c84c2c00ffaa4946e920054f101077fe9e72bd3f102811c74a26a4b6f5d72c77803780800d51061d5f1251dea11e3ce5b75d3e2ac1e4877523dfb7174ebf2c9f21aa627a7cc64b4eb83f4295cf8792ddf0f98dde10bdcace3fe596d358490ae01b193488c486a34b92eb4a0cf1e91427b9dc0ed193105622fcece683a91151faeb1889138b2e88a46dbafaac9ebf5b839089439daf88b413f93a08a0c784ac30000cd2a3270a75d9a732b6dd4c76c3521365ceaafc835f31a3718fa32a3f443ff87aa3c02ec6f56bedc7114771abd613a1060271d09cc1dc8a07ee13478de46b32e67ef318c071db900c9c53b4cb1e68c7ee719ae23196a52b81a669b61cf7525de4b6a46ba395993c57aa8a6c510691f693be7e97ee17fbf6533b2eec58e785c7d9fd6c9ddcbb25515cee742eda295fcb7a2ba5682ef07179113ecb50ce4f660f4ab5a425c86d206d70ba7972d2e0f2a5265ba7e980aa86223003d799d99973a2cb71f3aa1325eaef37a132beb7e82b120cc0ee826f90aa90343cdc0e27504f10c0b4d3913970155506350899058949a0b1edf1c9685d6f41924c3154240e58d7bef0bc51a7c6104d80e89368585edecfaa554a34e76b4494dea47fd25c1e11763aa81681eab26c372c2e4bb31cd36afd4a79604b8944bb287df8302f3c1a196ab85d8a987eaf99806c989a1fbf717eb836dccc73aa64436af499cab1508cd123bc83810be02828d7d69a1704dcd37a9ee3f1f753e7646ddad71bd80f15e0c93fbbbc82629bb68a9bdeb54ae8e153ff1fd64b7952bcafab0699f0c0af08b0622d3a5b17231dc53f4af97c9e52598d6c99826bbaf696b08b6cb1bb1d07a5664c6abd01a7d3e2fed773bb4299c7c1ea53ba7cb544c602117f8bc2cd55bf888ce886b822ccdb97adb394a8c9b5cfa6f544e129ca9f378b3cf7c221ba031d0e9eb6efb040fec0886c842c26548ac07528a0ac1e1e32c19ebda4ce73139dc6c416483439eea62951b5a9b8d8858140b90ef789de2297fab8fdd70f1b3c9e43258e0cc2b97e5b5c700394b913df21c6ef12c9f8ce6a475966883ee2aec77cf8cf608539c392a6f05ff0e5ab8cb3e4d993de98877377b95423e71d078236c27e1e2841f7ccade17b9de81d1e87c652ef23ccd39471bd76717d9521ec59fcf7399e5fb38b5932c364a6639b70b968f48e2b681bce2dbe0747e00ccdef8a9c93c1cc716a72ddc3a53205fdf140862e321d272ad1932bfbd43dd7d871af9898209d1507c73ceed30f6a3911af1c7288a432839f8561e0e975d9d162cd9b08721622247d5a47e0d37a83bc493553030ac364ed30a7d8d1295482794632405ebcfcf7676cb43278577ef50bff2482bc16f80aa088c956911e08ee2bed302e0fcb3d936a30456b09e17564a4bded2a024feaba6a026a799549fb6355e257b2903f607c89728e8019d3f629130fffc77a27f3fa8627fba0523fb498a3a0197c848bfe2951ae0fe02cd199d8d36fecd98811bc21a1740d695c61cce481c0d5fa51337f105f4d4a29b75ca8ea624834eeb09f9be63871003318429cdd6caf4daa8ac85bc81ecabdbb4dc7dbd45c43585598442baeb7a984ac1a64bcf9e0c5c10ba5ad3cb6fcb0db2354b58b3d0dcbd7cc8381d3f1ab880b22d74a95b07acee0ac16746a73859a42d060a83f7b135c23b216eb3d458086f445d366cf9797051cfa61908d7455e15570f6127114e97edc84d6e2b010d340d073934bb315c222d6752b941e3fda20b3539986c8a11cae62d3380ae4ea1020303aab6bf8c19882cdbac8e1854c7ec2cd16af679e961955472baec64447c3bf94096039f91166bf4329be2b6b00d0620328bc477b6a5c1e09dccf9746a06a796c7e76484c9bc922d7409fb438236b69060854b8d7a471631b850f10748a80d839f8321 +MD = a1a60fb89d420fc84c2caab24079d75ddca9a4676eb8677b3d64038fba8711203a459bc26259112c64138d4cd1ebba406720cf29cd1e4ac35e35be50464ef1df + +Len = 13696 +Msg = 1cecb230f8c80f87e65e6a5cf1de4301b2cf1ac7c4ae81c478d875d3c9aaeedb92e6b555fe58760840ba161785d6463e27ea595924505226ce5e424bc48cd19b20d41a95f25fbc2dee5d2dd0613552a26ade4d0a668c9770ac904e457b79d044308088f8bc23087f560f588d6d438eb4e1739fe272aa752b793442c8d6bb136029b0a88745ed8385e1983f58914a23fcf570f7e930f216de9c13c5ddbd99c376732d2249730454c7f7bf8938b59039020e9ffc2889aca2117ff5808b185a080f76bf9d472fb2a5cd014ddf36c15ef64f95c657a6631f404c89a21adacf4709b2992dc187623d9b20650be8589dfc856af0aeb06ba894191822e13cd2caa8efe747413713f2ee60478dbe4da832b20cdb891fad803e5355fcb27b8e7cf1c5e137e5c1a7f3c90d1ccadf31b52e66c8b42bc7e1f9ec0fa41b81a139b7df2de50828dc76b82dcde2f632c52bc9f12285a4e111bb3ab701cf932d58e1600364518c44942813cbe8b41705a67331f94f330585d17619eafe1be78b3d3b30f17f529413759f60d401cda7ceead2944ed318fe9f6eda3d8cedd23c20b911d0b0672e481ce8a24651ff73cd12f8109af9987cb8b850af4fa5b53abd763529e748022dd1e753fb6d49ccefb15b3af5ec0184a95a57dfbdf63e409b8f14174c1ec23a9957fc1f707ec44f897c301748326e81e60d0583ccdb5d753fdd82c8421d25f6b801e4b5ca21cb7088561af7d31348767af949a4a3a50d3c6dcd49b1d38b791ed4f8267bd0fd64173666a0425c38984aae45abaa0bfd537d6c87f039c711c79933644adb4cbb9a2cd9d54a61ac4966e7ca1ab3fdcc8b39208534ffc7e55616511d6cd83c04027297bacaa0ba8bedb834169fea05aef6c60e00fcfec5f6036e2ddc385906c27bf640216e2bb6c1cc9819d9fdd72a79e7022d2506769ac2bfd715b7f155a04cce2d1055e972bd158f0d7e5d5b03d5f405f6663b7befae11335af1f5bf52746aa21feda062fd3850de1f4be8e2f46ce8f9a9a28c82ef69ab06fea9dfc9dae9e69fd5c04801558d3a60d768c3b934591d6a23c75e44003358e1cc26bd387467876e567296f001269bbe3cbe360a4b025b016dbefae9a974df6cca4ed733a95614b7aae9d25489693ba0573388fabfd16a668e70a8987394094e020a74e3ff1f5621da0f445876c0e2ac2eb003b31a2c11408ec4b079e4fb9e307c43dd7000281555edcb34214f92578dcc1eed5de37d193776a159b5861166b93fdf5b0134da18fbeb04e9da9c4763e936638f1fa32b4bf44df1ec74e13f289253c834be229d29badda4aca9e647ce6976693122e19e6d1f1b9bb1dd7bebae62c0e4b0d052da0e3aca92c5b6b3f960b492161b8e253e4760e987f019de7fbed28e1d195f4cf79024bab67c2a8ec7e0739554948af873a35dbe9df14f9261218ac659b592995e7720b5f8182dfc18184d840ae53ee0a547c1a2c5fba81dfb9f317082ce92c0758bd5c440e3e68755ceeb692057d3673cfc329de7584c09b3ff6f927faa8749a694ecee76237eb6e4cbf44b7d307115a08a58b8eb4e62def30bee36389198bd58590c3c82211d112ed711330bb83f7139b9ddfab92613222289536395cdeda2f2a3deb44c25e9219bb9ea28b13966037051666c3928865fa74249227ea5af83de3a0a61bd770d6d943b263257f90e53ab199e14549be41cecfe767adb6006e583e63748bb5eaf7e7f236d59e5415dea53da2afcf0c954e25884827394471952496f0d732f24f8dac53a69a644597e4fd15cb52cf6f8ff38539e161591a21151989c36e9020f0f0bcf48c0205a89970a8b67e5aa4f710ca64512da69bbb9156bd83657b21a681c9904151ad01019d1a4ebc36280e17ca4b496a97576f8d34e2671051bd76176490acb6820bc4f5053a45837d5b69660efebaf2b90443139e40dccd1275fbe83bce88e0b79eefd7846923a8de652556714d2f660d2dc4f34fea54f62265218d59dbab4c4ce6e03d7d1f7f88b3c5e05d73cf2d410e445380ac4786380beb859b51509a55cc7424ab51d59fcfa80e190f98ed1b2026d87d6035f0d71f2979a686b4c5cc89b0b74b95c5143ada159e4dd1533f9f6ff16ab0f69f7ecdf815aff2d3f693b8748430c3713963a734a706ed47352f20acf87b8cd82b39e16f5aff09079942e492d1610ae2114c8b6bb6c875d5a1442543a67b6f798bcaa7f163d747960f7be77102d8a05cff274debdf7376014a1733e085eae75f13a9881abad93d03db77277ba2f81246559c65318b687c5e7200d2e0016a72fd554f1837ea6557d58ffd3b2f3c5fef32b70477e94537e741cb9968eeb34a90c8e323bef55d1c368f9f568908297085968607ec5f9762556fa9698c59163bcf763fd012cf9d6e47a68c1b97a314ca7416650f4 +MD = 3ed79e61d5843b36b6228023670b333208cf9bf556b1d6fc54e95808dfac2402ae06fb749e45883f21211ff41b28cced38d706390a398afa8f5eee760da041f2 + +Len = 14488 +Msg = 1297bed1f0bd49803921a12a636f92fe2d7a7a7484884e3ba8f0dd738be8591d7a9813d0fe7386ad05c697953d911b99c1979ab1f7b152b1b8677f7ab2c1da6d0b5b602647b854666cd88750640dd7d9a20af67a093d6d27095fe0850b4993580f092d3a9335bc93b77ffac5a08acfa71afc163581d5a486e1ff86fe5c258bc4ccc90376aa91c51c2fe2775bb8b009ec6f95834c282001b4896ffb4b6e00ca9b8bc46841547578e9192a867a76298f8eeafcc425c6c78b9a49d8c7d6098059c39421e7035889dbe3c07eaf8aa09a6977d35a612a23714a2068627005f44d3f262f0905257f74f9f06b077bf3ffae9d8d72d6e3c106c7472f30348042f91084aaa4a44c0d91dfd7f961ed711e5b0b35ba0e99d154387089ade7777ff4de7131393a19432456717fe7eb571a717c5938e4f1cab34a82151884d652f3826c174dba3b9172d295d3f8a0516dfc552941aff56192120baa5efd9a45ee66566babe014ed33628018ac4a0edb59a1332c6aa1d4a71974ff78f23fd97c725fd7a3d4f33199289a94a5a57e18d14091714b7e16690b86648eb67ae627c207676ddc3b8cf88697a27805669aa57a4d52794f22179cd40167202a9dfb6e61d50580dd88b651fea903920096a99f1fa56eb1ff00aa554cb4071d9d0485959f03c1786f6276244786444c5dddb0ed08736d8325c0da7cb9c5cbedd8578c84c5ba23be5a71d659aa55ed0de6e5b9777dddd556870aacf9645c3bf8a03d19231a21b4b8665eddd96f3f873c6153cb25c60b3091ef842ab495a2e0a6c05e325ae861fbcf5ad1938ade6b994397d2efdf2a26059e23d95b9694be4160fe63e21175a1806b007101553f01ab8950082c8df256dde4ebaf4785a8d9e78c24f42e300b0accf51ee72e22d92b4576539d8a1767c23fcb11aff76a1a1b5894f8b8209ff0c466d37dda23daf50ff0726a3a1165ce93b3bb5b80722e32ab1ede4358bf466cf6d66fe5f3e663dbd533e55b87ca5f72f0c11c93cac0b738b2c1d4cc7b130dc9c8a5301eda81a7d3a69737ef2bbcee9a02f2567f37eaef7457c7dc5dca25dd4d635a7def36fb8d25aaa3d0eecfeff88df1cdd1e86df7bd2ec3ba60bcedfc9c42ef7dc021b05dfc1808df19201a6c6694e4dbf69514ef08ad1d21c7b28ba034ee9397607cefaedef5e9d3784db53a21f703a22b50d5dbba3a8e8579074c1a8b9a782fc5c89cf61a047408563c476110fe77acd9df58c2ba1d3e6dde83da718b8dc6cd57cd5e3e988dd2051cb679ea1af16881690b44acf09e54615eeedaad1b11a4f97e53de8d40d82a523083f3dc2917fda7419c41a14405f9e9610ff7d7226c3a3ca221c3ebfa2da578fc6b5c3f24b95fa8cb5af9aa9e99548e4fafd7f68ae7b11d2b00b660aed36bfee6365c1cf21fb60c6e0d11cee6a38ed7909622123aca312581b85ff54413a36c58ab9d7a7d912959917c3416046bce4d8c8c81341a5de1da0c1165b1a435754bb993c461ac57e0199e700888e0393d76ab599b6212e8eac634d3719db6810a2171b67cd967b804d3fcb1352f635503dd56c41aa60ab2747162c52abf633e8a79e8dc6beb96fdbd101307641073064707f397a308ea04a662fcb0392191b61dd885cd399e226f32574b3a3d35f996317eec98e18f9a26a8216c5c45cb292fe9c8b2508ffbf1538c300c1167a5de4beac9a79079430260a3361891f7c314f219d0d72f1508ecf4f223be558b68086e9a708e46162c0bfabf2a6a17f7133847d3795a3072cffb998db9c9ce5087614668fb07845e539b3b2383c8b5ecc37f753f49a41c4e580789857995445f09d01d7df37c10f9bf9b6cf8cc9c357ed9d0c687ca1dba53a9f60d01ec8a7f5ff63c3901e054b39078f4d5658a4d5d565f1280d0842dd427ccb26d29981146f9568fe31b48f735cb878cbe934743f61c5c2fec45fe3d3072c921f126079063d532b063f3b5cd5e51f34d6fa98ae6c778d90e520bc0b398dda62de120c1719c9a918701b2ae3ef6cbc41e2fd0dc9e9a10dd97fa4d52f9d10f6dbd843e4c1abaf07cfc0580bcb2c4e003e64830c4d3358f70b22b313d75a6b126b823a932f58581faf7b68465919139b78f00f0caed619b9a472fdf0891de6bd7080689fb68c4f213605ee73443257de800a0397654e6dc643e4c803bb440e48a9475052ddd41eecf1f43d0ae3048559e216f3251708cfcd57fcb3c5e4596c54644b84552bbc21b371cad685dc0c269e2dab704e2aa1ba0f6f3f43afaaea6b514001672f16a10215240e6d7c85c5a60bb13bed6b1685a72cd800ea39656395dfbb0d9b49352f3a929713544776adae332b4ced14713121a650f639ebba51665033c4732bfdb325bc298e1d7f35408994ea52d1c2b140b40c3893954f0030774348ca915fd6d97de279e33bac380ac2b17ce23e1e5d10d8bf1d4d9edbdd8d23297894684d570e8db606973126f5890409518fa45feb4e0a3f6da8b90aa8c4049331968a8d04ceef973e3e90a80427b81d169f872fd244b31da8196654087195e102555a9756971e16af3dcc77d +MD = 838f976308b3e38471c3b4d8e5422312e4f56429b381f91b39bd27aa471e91a6e3ad8e313c64e6987792416c44a2a0e06afdae11a946af8b12c62f57af73cad9 + +Len = 15280 +Msg = d2860f7959d1d18e4ba3a08b56c5b7139aa164880349012fd7bb268e8b641d19dbe2960e1a0e9c9ec63ac84d5fb7b59b799bb3e411c0c0851d10b4406600bbe29a5b08229d41c8cd216f552076c1ad75a3f42223b5b1539f57c75ae7a3b947203878ce7d8d713c6485caafcc43e987ea3f37180c9923a1c5ae69824aea94a91cddc14ee790a7e0aa19d43f196d392b4076e9fd68651e943e4a7d9332e19bca1eafbff1284eea9ce906146bcf9db981bf6f9438ffc1ab1354528bf56733d5906dd9f91f077142586773139cb57a7072b153bf339953d0074dee1c0fb1864ae45381f8414e9eb7fc6e89573b94ad66e45c49f355fec697567248b74bd88303af16d042bdc37f5270446f6aae34dda3c00a7ab706f5c008e90b85e410a3d107d7ffed61fd2fbc1a9c314ed45f5db330ef010d93ae48e92aa860d02bc7db185e465600dd6759fd18697f4e1bb4d7d61458892b0fb5bdeb057bb84f15d6480211e263333c650be952bd7496c91769f057e2ecfcb4841d6ba14b5d2a29a6b23527956dac085e0b28d2825a4f65efdda6027770a709812f1407fe958aef9fe159a845be93c8ba2263a09e77a078a4f9a21bfe5f559715bd8b3e7ea997f0299d179ddc9c1105e01842c2fb14b2899e868cad5eff2de4a88d7b4eb1e178b3adad170d41504e463ab56c427f78ad20444b0bbd8199587aa3698a40818456c191da00005c2271132fc18a2714edb8c60012c8554e74fde16c17601bd5dc58a03fec7a7e1559a2f42703437aa1b9fb0139a16b7cadda459f6d5fa6e7942fa7da1dab2f90543f0b728a4440420d259f5c58c19b3b8611583e0d0b04aca8c66af795dec43d011ad114c14c28874279cc5cc33a0099c1625d46b3e12173f8e9ca7d0e4fe48e04331f6332e3a45227fda98be3d4439e47157c3dc9aba6436cdfeff6f0c4358945d21be646d15caaa4f95f7020570c52fe72dfadb62f3a25ecf200e9a2065f38ad3fed2565ddf797a1b41593e38a02becfc1ab1de2368620606825df8edd0ba322c1bea8f8d11e210677f47d9236cee9a2490b16b587323cb08a885f1b10e1d18da1b6f865737851bb8a24b5972318db6053251f97ece581c5a04ef1b16988cad728fc9c168cae2ea935ccc35819879def2721c0f02b47f885f2a21db8aea996e69bb91c71e367c0b6c015303fe0c336390d2881280d01a8d9c7aa6c98a8eb3ea4451401e0424c10cb722683b23f75ae254d62eba75abb9aa9698e65ba1ff7c9f86d36d1ca6f0425d19428441b00450e9a2ef685d5da1cd4de1e779184db743fc95a461797333808ae6e42fce1e9da5d82f90cd71b54cd605e2f8d765fa30ba801556d58ae5690bf4c489d326cc3dda3c4f7ce6adf92764613e4f79eb440640d87a6d31e79a0b354916a606e2455f5e8486d62c58a5abe8ce484de91e97b267543959ff05fd94ace671bb4387169cb35f6a6f07185754d3cb85969d5681af9e91d6afa57c8c8fc36b5a5c119bbc50691b6e9a1f437abcc5d79a9c1f497e58770fd6c0bda1c367293634eae986a324f05707d9cd807c3e3f80ebd0d76e0a67512cbe4fb01c4eb54ed585fa43ee6784e980cab0aa45f8739145fdd76e1aa236ed76f1af15426af494d7e1fca91975faa5272bb13e1a6bd77b9545024bf5c2518c8d156165cab4af9babcd8491be6af0c3b8af5de16432e44efd5603e9760741becdae091a0bb830d3cfad04864392f1b5c3da094cba0a249bfca53ecf21dd8204c70ff8ba8bf232ddb2051f0f2f9a880bc71065c8924e12e301b725857fb19cfee7cfd2cfd1df300a017a1684f8fe3e2630f6d5fd637b29a4bb005a74e62fecfdce7209b263fb82f92c508d90361a5ea5a001ec53d41de35177154045fba51c91e97b101ab8b3d61b913d06b94d9b940a82a61b543aa2ea89c47a695136bd864ba76f785156b493f1ee93f458c5ee68b55777e5772db679be2184582f1dd5c49ba6b3c50eb46a371c8309f907357f3736acebcd4513a54b5f2ce77f48279a41f255dc689b584149ebfce3673cf2ea9a2ee1664546830bc9fd34f85134ca57a8f0436df59fc8c646e0cad4d172a4ad0bde939befe402666018d85b706d9caa4415eddcde846c85b8bb6b32ba40b13306f641e12fb60821b81295654f6b151ebdc3b3ad85d1e9fc09ac5ca1a41fbf1905d65ada87350ada3caaeaca60a5aa01709a4354ae109795d4642d96016814cb932f7cec78d9910c682246ef36b5e21f06f9fb6699b91bef83434c8464c258c74941f69b971c2124c5293848440453b3db737a57fb43dd75a0fa37f140b6f19872ce766c448531afce104d5a1b29555c88871ead253952a4b7d98e5127ae85cbaa156ad313ad5929fd87e4b91e9d8d9578b576daaa12220932619e488c217bbd79b7427486ecfe1fdde0acd9e0c952eb367f01751c66b22f9b43163bd0a849fa4c44aba500dc96fde9caf440e4355bca4c544ce0ee9f99646cce54bfa7bb871ebc1df4f933e4ba40ab975962ab89febf24d5c7b283252e542183f82873d3a97723d3ccf572adee848de64ac3a90fb2364a63f07e8ca0078b54046f1ac77927b02de6720e5f809a362b3856e86f6f1ccc379f55896d98bb667ec0280b1524983624c6a2c85d1553d1edfdfc455100a4ed76d87587a86790620c37c18ddf5e6195c304dd97edd491e450b7a +MD = a163a7136bcc92589303cb15e26bc6ba7abd91b8ed194e2ade3d47f381191dc402e336c4c1aa8c0f9a2ef4149b1e3c2452d195d36aa3b96451e5059f5985ca19 + +Len = 16072 +Msg = c7fb2a67c42197c11457c8fc39a2f974f2577b44bc8e5a5b97d43ed30d208f7e7109dcc165357ea59e15782beccfa2e0747c07b240948b02fba6d1faf54d5b216e5ff32c10674a18bd56e0758b7523050d9edb85d5acc5cb36307e114f66a39144673752cf9f4541f882c683207bc40a4425c06680be52ded2d90fc02152aff57e8770d8a9c5b549d701f3fcb2c9cd17a27a7efd4bb2786457084aae75fbc776a1296569a7c2e357e23b2f894a478656ae03ddf13d7080854b27f9845248333c37b4dfabcf7c1794a29941d2efdd37edf029a5eb5ee1b268389de2e9c1213a6ec890a6462bdc99279e81f37ea9732704f0549d92b7eb5536a5d2ce86c86e2634da2482e3c3cab0395e5c0b3680f19fc437ed8e8f4f77b3161b2e840372173db7f7da3b2a9d2fa5f26b9352a17d3fe7544c5a40892f6e12312119ce07c405c81fa61998c2c3f1c0794c8c9068a74547ddb7057b295db6bbaf3ffb723ac81e0e94704a62543dfa49f789b18d3207ec078701540717e339f6b7fd3c3945854b593ddbd3618711308893ab6910a8a31a6e79b1b1abfac9dd0a71e444ebd00375ef42711d5d04497dc576391be37285b8c5dc4f83307a158c41067b7b50824b8219ccba901e72edc847c7bb31cc37b5af54d763325f40d12de19e4a4a2f04645c1f033d946b7a03f957afba12949f39e563937626fef404a83360da1752fd56e9490e82920ec495f73d56bd2603541b443a380fc6d53eb7e57f75b24b7f162a13df1511f0cdf7aaac41e34cd5e0fb63b321edb77caec4f1cb0d055b4f7ff7e7c02842731871bb4bffab7fef87f53f17195fdaf5b04f31ba4424375b8a1a4795da6dbb2f70c2ba7fd8c2512fa408c541603d2851c8812b1a380d333c6317af3d48f6a8cd6287994e1fcf829394e238e86f03ff532d0c5a1a8d1122854440d6e5f20b32d5558a03c0bc1a39a4bf4b3e152ef9868447b868c12c762cbf945b6598c0f481d0b1919ede98eb9fe88e0a7fcf8566e66b7e4dfa18fd847871ba31035b9af8bc46dd6512af998adce967e9a51e5c9446913b92bb25e8852f23208a593868610bbd43ce083ba83e172fb3ae550a9bc9cf7ce45050f2d6bf785e2d2e0e36127597bf4a93288bae517840db22399c2a4ea9b6e34f6487ad7b7ca849e4cb5d807d88d35a7e19a6910928a6450df9dbf16bfbc79e579dea5701628cdc7538b69bc00682db5584943baf4fe95b373dd0d967ed357f30a325ba99538f4eaafc484988385235e1105e928a148f8467ac81c88ca98aeca11f40c08b773b0849c01c731b46cdd1ea660b80e4a0222767eef8a720544d4f74b941501ef517701a2b3802c2597b15382da3ec031b2aaefdac3d5f6c19070f6f1832519cf6abefe7e6a6dcc599e36a920e2fbd30ac2d80f28e56d6b81e3f945be51aad4ba180ee76986eeb6c2d8d39c1b1b6ddb37bb5050d3b4df64c8b7d46ffc7024b741f1dd390ea9615ff3d01e88ebd4033d4b149a5185c2aa66f894a8d2567f1135e970a07fd842844c5f3c8e1bedbd6a7db7672c8d998f3cd6a402cd1936cefed5332d0f3850d2b5f0775698a1cb27e210ff1b6d61a98b25585d7ad7a127f05c19918f6fef02ea84e0deb6c4d6feb4289ba4ba037a1036e25087655f06a4839777970048f058ea6f91f7e5a917e2d2ac722abb553368230253b47ab9b636e95f73b6283108dd62d488555b9bd12213dc48f3a7f93a3bdff3d666f37e4c59a21292718fae851ad4623869a143bf36e83664b20855daf5be355d01981315773e4f685b7f17f16bcf7726c72f072e9bd04969d844f1a2105e455c26b12ebe2a2e6449c6af03da7aa4a1d7d07d7cabcb6c93dcc8e6633c2620b25848d717b2ece2ffdb557808acb20470c028150ab3300d9412168510e5a1b5fae5ea8264703a0c80718a628ce49c6f5274208e47d18443c8ce4379815b1d7e8d698e4bab929c0b84c0d807171ea435c5787c219a83129fb045d26c4af8e3faf867968b43867d507b2dc0de2db7640848217da7a9447581d93d35a5c43bafabba74a5d9c2b8787bd23cc740374b56476913b768caa2178aa2090fee83bfeb1151f54eafbfc4f80e38626de5ca56e58396d3bbfd9508932ab92da38f0fe200cc3d8dc385712886581c2337276d46bc3d5fc5fdce8ef452e27d3fa30fdf4e8b2cfb82d6f3bd5fae19dc13859d86b724e5328eff541f01e1326ca38109685204c40a98eb62cad6c9a416a80ba0ad04ca1bad832346db9dc8ab05fdbfd44198e811f924635b402a73874a552be956dc16312f471bff3b4473ace7a2d218e18fcfa735a9e155a3c74643f5af58c00a8983c6363f4be5b4826cc870374a4fcea305f44ebde7ea6c399c6a871b24ed3eb9bd6b60f035a2edc43e7e4e2f9ae16f7f2579b2c4e972100de05bad3d129979d90d612dfe6baf2da6434eb00046565a80c8a7f05358952590dc97a669a47d32540e780bbe40832a9525aa643dcf4706344a1f85edd7bc237ecbcf21354d00fed73af078b476973b1d5021d94cb81bf9164440e1f8c96f703458429c349ecd35cf0d6af3755073f5ab4d457dc1735db9b321aca318b027b23dec9275cbfc1a8da810580a8570a1d0cb9775c0109374be777cc337a22e6d6017f34f5c7ff7a15cfece483c4949a962faa9434ede9b097dffa0151e3986a8e03f26c9aed513da3a3fa1abf7456dd312b50d2e886ffc748ea85622d5437b82d93fe1a1eb5fc32d8bf73503ca1e3fe766873da7eb692a5e56fde97ceb645f53b186ae68a064a833f891f2d03318523ed4fdb530163ec71f6d8ce473def0b4c3efaff77e5ca81555d +MD = 0a6bd4a3be10c690ba358fd4abe6bb3b05c6e74762ddb16c96122156c6104102a0f4da5d119eae98c369b4a39bc75f86f76b829c7efa5d35b8c43dbce18a9c45 + +Len = 16864 +Msg = 11efc562e14f7a08dec506d17a527d537fe51ea046c528cb292ef0a83a3f2fd43614a0f5b42fcb43a21c1b48f25437e391638f93994635f2c717ef802fec8aa22efc71eba1037e9954e80f63be9d5d72eb4809adb9a0f83947996140ab4324f2e3ef5eca0e953a13dd720aaa44f5960575dcb3740e9b18a791fd6e71160da6cb3c378f1c65aba8b8230233a6ed248aa61769b67201fe3e458e8b3d9ad712b736211b2d680d0e6f900fe0b2de21f1e25cb9353a2ff893111a248af743581a003a7ae260376e8638a38953b0da49264630438966325c203a2e3c44c3f500ed29df2fd54f10f0daabfa7aa45523cb895d289dad6203966e6089bfffca363752d92d293c237bfbd46f9cc81cc84011e3d04fafe9572a0c452c34930433916513b82d4e5f0300f73a2d915d0132b981fb46aa62856d2f286c4636a29b278bf2f66fe6878518284cd58ce21f9bba17859b68439cc8cb9b51ad5597d20bceae47c4a660bdf78a7a626d3596f83489e18489de2146fc9af6eece015f0d9e4f81ca4404a4d6fe807fa2cacfb5cf12c69fe68e4f4c496701c66998f4973a9ad38ce44032b9bce022bd72b303488b7e9ada127264cd8b51299529d3d34741488158fd7ed8a755e599be3bf1795516c02d1872fdc4abf60439ea964749750af0826c7ec89d778b570d0a664dd8e75720a6e46df717ee71c75a4e18bbfc2b7cdafd50cde42930447ca527598cc90336e62dc36b27079fe3e1b44817f99470814d1b8d549a25da6a9e8a9f7e79f3b39b59ec3fd4563ac4369b6e60fbc7ba4d009304aa7ab4397ee403e4fa3cdbfffe6ec208df114c5868513db11e2cee16c8e2f2df2fa6f80c239af3dabefa7994ed9769ac2b88d10a901c0fa40b13364fec0db3d4a5423047d174b89475221c5b86ff96feaca2adf8467f5870ae16660dbe6a1d0d93b52291905a993ba61b8cfbd38c9126e9c7a7c99162623c8f9e48fa48e17aaf816797936934ddf7da4d911ddc27a14d6b6089257aad73313714a2bc915b10e5f7c056f563eacdef9820f369a8b9109bb8d319b60748d4772dde3dfba1be29d57e28295e8764b14c68fc79863f2824375a8a2021421bcd35f966e16081f40ba79d07d676dc8bd135d249ed1da95e264ad9eb6511330fa5932412559238e3fe84ddc526e66a4574d35f6f15d5ee415dfbbb60b22ce10aa6ba354c633ace754c94c5cae156397be34e96d6b95717bb13738a50cd1a54f516d2b47bd1004c903bfedd7ecf6d521667cd00e6a34b2cb38ed9cd237f8494b93e022a06688bb91e15ebad4ab7d4bcfc467823089a57331018560d409012aa3c66731e57f0841d062082be9463337f17c87889a2652636bcf712d111c86b9d68d64d18d531928030a5ec97c59931a44d37f5ba1ecd5e3c9e7334a1fdef387524d5b7a0e8f35eeb84eb50c04622763188d9163de29aa84e9ed6e5056ccc203a57acd93ff8fd9065ea3cd7c27ec6ab31aff804995894ab73a4664c86c628ccf5eba4dc7c6d18cff74adea824d44c78a9aadae759e68210b3986d92ab74cbe3aec703e8e0b00cc3a88c1aed6eb27e84a361c7e602f62e7e166231defddc7d0e6bd31124f227a115809838cb297f227826bc09291eef5e9ea5ebfb59036706f536f718b93a3b9e6d8756806cdca201fb3ba3e7d93439db186719122a457d2d3f161b5ecf4054cd72c6af3af80f85e3b6e9fea81ecd3c6d9365d5c07b4b87bb9514272c8c8ddbf4cd4489ad964a8f905038b5951f705fdbb7a5084b719eeb799e3603ca1ba836dc2609ce226f1628cf7230b0f605a50def2d3198fc36c5132c03869880a219cf4d231e64e1abfab869c4dad713f7f5ab6f9d116f1bf248659f6b0ccc964a690d0f6f8a3532717fa727ed3d13331ee6a224ae4b73f0ccb04b997fcf88533a1f57e9b055275de92b5ecf96614a9fa2025ad609e98ec2ed832ce1e7d7b5019bc317a48f8824a93d894329664f65a0aad13b4d56f2a7db7d4c70404a2c39e694ddb408b32a1360921ebfff060e4d7c5edaae503c6fa581a3907e7e50d7fe4a4ef696ddc543dbc813743b171da6e87be7a519a9636772fd87d9c063a2dfea77f09525eb6cdc6629e5121d3a542020e76dbae51e74e2f59752ae9db6e84ce7b4a343c9fa51fb9bcd3380ce305383dc0617a27b7817e916962c987d41c926dc488f87ead11bab62fb2347b7c1c1d704220ee4417ef382bd443c1ec8caee76b07cdbe9f03973f1a3faddee3fb547257f817a08a1fab1b8d2e7abc8e71aff444d98b0f143fa01d746138afdcdd38c74376b829602b2f8903dc8a01e40f9a3969ae435284bdc6c64348e52fccbe439cc132a4e17cc707114e62f44a93c2f82767fa7931570a75da053b35c74a0b0f535fb05071366fac44bb663bff0438345ebe42bf1411b227b948cc9d1edb4ff69b8d743d5103a18983d93ae387bbebe94fdb1b67832b2166f47c81ad8ed6f993c5c8f2ddf98af9495f36656d7d313a816b5ce914f729f4be0c1edec9afe3946172a0c0b4e322d35647418a4c67fac09741a2404a0894889770be4883fa77acda228342549671cc2adc88fe02a07efa95635995690fd1798dc2c9636ee719af78460f0c2f9bde50417f8b5522ef44650620c16d14958723fb62cea3ecfe2018c66da292b86beeec34b0b7142f7cd18c543aa84bbf321c347ad14c7e70b841754ef9dc5a917f2a0c6f109aaf7b01acdd19f14c95db5e171796aeb177acadf4516c8b1ae82d4e063d7b0fb4aba7f64cd3c1f54cfffb81fe49b95b9c13f3379f19c981ecafee610a0bc30e838d38c317fce6a707ce924638475d687ad7e6fdc85ac08ec0367750abd3e1ad85c8a000c4d4e2973ba622036b9d1d35cc37fa590670fc0243f03a857242516d39e26037a9e86036270b3d41eeb753740eb89fe1b018d67ce681ca87e3b39cbe2e6f1bc05db3ca147862569a5822aa83b0de6a207 +MD = ca2928c7468e8e421b00fb128b1c114a983745f9b20521e8c8954a68178ccefc2e81d0f0c49255157e9b86cf09e59e187ad938ffd35664f9a3ddb471b85ee250 + +Len = 17656 +Msg = edf5557e15473b747a819398c9ac1459ffdb4c97d0072c124a16c723b63d57aabf888147d6b7dacdd44ca9f3e1e2ef4d95c0a47b5eae44a122088a1725107b612c88a761e381accb7c6efbda997cdf416c26bb651c0393c96be3cdc9971b398c7d1d5034044cb957b90e12b3b722ec1dca3417bbd4ae21736fd219a3d3069813fb6e032803c00a5ad55474e7047b1fc9f81242e64c57f68874fbf50ca378a1deeba448a5a786a6ba1669abdf48307f2e3ee9c44f4da51beec386e96ccd195bd598e6a713b7469561c5753f024be81432e3e1235d9e40978fa49c7d2c1a92cee1495da9dafca7e035299fb6b7d44ce7be3121e97709d172515e653ab2528b02e84531d5623e528e208c109a68ad04ffbb6ed29d075400b41e3b08a7673dab00d3d589b31344efa70934f0727c9cb7650fe31bc874487466dd81ad4db3a29bcf8b418dcc56d82534d76a66c75b6a0d1fa4d825f126add69076797eb2ff4b0377f7d167a791c09c3b74769a206ddfb037609517a0854bcd38d06ba060b1fe8901fecd3ccd2ec5fdc7c7a0b50519c245b42d611a5ef9e90268d59f3edf3384d8748a7c37c493aff0ddb830dffecadd779ff28656b1ea511c276c5c7eb5eba596d882277d162a461c872f6d3f94e5f6ebff974af224c049c47e7dec886c43286c35cd16394a59522acc14a1fe4ed3d64cdc03f6173ce39aa273f195858ca1d70194559191e98a9ac1b54f1243b5fc45403f20d1ec83bb0c5d11aea09d9b6f78fefc01e0ad7a24e78a48c908374fc80a6f2fd5259a80b1669e5d9d55f72314d40a76b94ab6858f012d8f68cd02a7a0ef83b40a3848bb2b720c61a6fbbcabf8b3ce096518d49332b0519215a8cb42eaba21d6a7541fbd92f65024b2db13bc83ddf1bdee932e2b77bc9e58b9e0baaa0f34f39e95bf470d4fbb11aea73e25dd1d191c9a3a00edd5c5ecbee93abef9667825a113bac1e733c889f8086f6a1a962e30f7a932aa38198509564d828aadfe8c55d33dffa427b86727ad39f0a8196f1eeb29f1bed838801ddb118c778c01fab28b30254cae3023935fd749143f4af155105b7ac7d11591f62a94af030b1be3549160d28a292afcb3f71e41c179d6a33c67344d33def6d578be8abe0d512341d92d0c4c9f5b3dcc31b82c28e19ce50d39ba5d71ec4703d20b5f99bf7ca4429aa928dc9c758d8f19746aa6065bf19eb8b5cf7deed854661218d469bc3a4d9f782c4977c9f3064b6ee4d537e317c02a2b196f3dcde14d441d05e6a3bc2e936462ca5a86db00109750e9c085c8fd51b1eecb624515ee79c8793c5defc840c0b6e1eb21b0db86f19b49ebf538bcf5eb5a8a35703ccee62117b02301f4e7581bbf7cf7689ed06cf281e0523af9c8e7d74d86bd61cb01b38d5c4a24995b215eeba7bb56f5f7c29a5b6e9e865870f3bb5eb36acdfc99b53c05bdcda6efcb7e3a799626709064baf7748c09ef17444559c6b4bfcc0a4ff269d162c311c9ed07d50db346ad038dbe6d8403abf63e1dc6a957770c225394c0223874b3ccf069c315ee26a2761519d9e3d5fb0c0197a57f945b25d9369f11284f831b26412ce6bbe36618c2318db11042ad9bb27ae881770018e5af72b66d31d8fb7ea3d7440cf528bbb12f4834fc6d70550b27c7fa5cb6d7d7e0143d6051e4a5e5c6b2f602857bca36187021d2a3f7561574f35295dc45ffe03d93ff6465479f8c1adb062cf655b31f760d262f4db6dc34fe9c8180a92b627b25b1218b5065ac37a3a76f8b0a89c9bef28fbd12a3b3ebfcd0acbe856c70e6f0c0f8099dbb43b52d899d9ae76721f65ab57d50444cf569b313ab706acd1d758635ef20624deba3b7f346ed08b524203de65f468ef18440a2ee1ffef87339f687ad1ecea1af645c1d0928d1b59d9b31adaebe07b63a6956118a92d2f707cc50394f0e7c2488b6caa7f5cdafb8c68d10f33520fb84ceab95480e8b532f30df6de5444690b181ead49ddcbdedd7da02a557a2108ac25652e38ea393e968977834d2b34e741142066146e97ef5db7e03d8201d131c3679672a2d7131fc69e4a28d4ac5af8e0c72155beb419a2d8b5c969198d0b319a9e0f1516b9fedf4fbbe626093a2f04869b91ca9d40f99ffb11cc6b805e177e9e433f84091564f3ae6cdc295f6719909f2c12533497901d213669835b078e7f4ac1985dfe6bde034f2bac915bb5b33386d2f37e192a75c0d7be016f0e1be8ca2cc3a9e16b4fd274be62d7fc62a87453fa3ae5b9bf6c2311aaf3547d2e0daed5c0a3f4ecd413dace78ccded918b1d57855ce49849bef20960770b33c1f4f5938830d09aecd7a6f871aa431a5e2547f1725f79f6d3335e6b479d0be3a66637049004948c5bbc60924f09360f16412b9c6e76167d219a2fdf37e7dc5e6a7ec7cada4f342b02389202eb714fd29f27f1dfe16763361b3e8ced981f26acf384ce6dd0d8577fc99564d1acaa366de31fc24333fb0728aa669e1ed20b93d62bc07373d869a6919919ff86f97b92e7c971c64fccfaab5bb4598df94d74c9e3f97adf665cc8c968580e8ba93cad0c493864248b152cf6d822608007722170db44f939cdc3be670cf0ba2fc3dc084b9a1a41057f745991a6ddc39fcea7dc31c7f686aa31751328864766145b4154f8e2565090b4524823cdccca13d8556bb4aef6695a19da8fb6dd475962f9d359ba2ad4d9eeb118c25556d6bd04ade597a0982cea700d5afab619d7dd4025fadf3a797c2446fe2c8fcf48e5e399d3bd289d8d805115955d1bd343de38d6681ead1fd73679c124f87738abe085fbd447e65596dae5703a4bbbb36246b34d49a78c124cea1f87aae2423888aeeb5238ea996dba22efaa838ca2fe7ef696cd51fd44bbe1805fbf1854b779e6395dc5850d08900240b7eaf988985da0d6297d06889dc19de08191f7b59fa0cd68237c451afc64741c855922a76577ceceb486f2b05fcd89f2cd26cd6dc258452384a0ff783d911b9fa11f8952d0f612c67e109dde5186ab9f8aa625e4e8475752c9593c8f93c0fcaf5263b3efa37f74a6d0428e783c950dcd02398481d9150ade3bce83c7c6992135e24d2ae8a4bdfb56f2444de8e8a1b7657b0574ae5c6b67 +MD = ba3ad050bcbd2febe8989cd0ade135303de9d9a419daaa647f0c89e2d8c78e1a701a4f9ea3ade33ec68b28d4a6e7ff15d637a1a803d2de1ff35b0d4298519cbc + +Len = 18448 +Msg = 8714eb9ecf8bdb13e919de40f963d7118fc580eacfe9acddcf99cf2140d1bfbf5119bc8fd011af63924eaf821664c9586544016b3cc994916d8d8061830146e7a5bdef9cbd144d94d9ec83fad1ccc8ba2a37677d3a390ada8d3f39ca882c1e5d4ca88bacddbb3e0f849c639071c35a9fa545bb070f619720f55601469678cd8b0e8398a9792f093b5b05552c4070096f9f1704f0046ac2cb6e7be1bdf610ddd7b2f61f7ad998367f28d064b684fc5c92e0554a22617c1443c056df15f11ad6ab02a82607451d4d45b1a49516868fdb7030a695846ebe14f1b38e0637cdbf3e6ec442b83805e6d7f4bf2af2348e4f0f7157b2eefe73594a3b0fcc5b0bd2269f88c16bdaf5601c5cf31a0982f8e3677ffe1c225c78b7753e8a9bb7e8794a788061c1cc9626a0e762ac8aea4d4bcffdb47d489ee8da8338794720f8b46a7bdc6a618c0df3b30b6e7386d7755c13983a3458a3cd990c1fcd82d86636c7c4ae7be4f0e9d5fa84eada16e9c851b63a874589f5f55877f7d35ae1a7351a2a712c7c7676a1ccb1818452d43d272763a6e4473abe06e68a81e7081f1a554ce4573a08a85b7c9b229323ff33ebba9e6c41f767d0199e20db93a2fec39b8d73fd602347030742ea55a00d09bd594a5fd8f107ced27084ae71164d655591a7377e732d600ee2bb6050918b97faf09e11afa05ea3c82a813754f030645d6469426e77a27c5155afa61d4fe5d17118805dfa35420f3baf5d638d0b9324647b9c39d556c8c255c6e564c4c163e0aa3ab6ebc098fc3ab267e0dc234dbeccf14008c7bbf7e85ba19e26414bce4dec2dbc096209b1d44bb5bad1471ea0f8858d1a74922942496ebe463ae5bc60ea1c8308416bdd68116acc10fa4f87eb8b77bf71a942261f35243224e9f91e5e8399338426ad45a5fdc180d1219a6516bdc90fae7080bb76f2a587a2fb257aaf608bc59a7fd14850de7558650fd0c008d7a405378ff4ef2fc91844273710d73dc919c1b1167eef51fdb1dd348c9aa0ab202f2a75ce45ca3202a5f21a66633def066bb030b15d4190a29b95a760a00ee6e29305d0f71b5467e57618e550c5b5ad5eaa1a81191546f5155b0a24528911a163f71fb1d02096b7bab03eefbddf455f1bfe850b164f06699d1ac4142bfdb2c4ed84fe7e23fa9708c87eeda07559f8ed838e7b3670b38ad283004ae0b3a6f838c6612ca1b6515f445806ab603fdad340df83836aeee8d91a103423eeb229ebe336b8318051cef751b2700397e50ae03e7604260f5997fb2789dfdaa8f03193ae87ae9385be1866191ee57aad2d9226d0923aea8d7967f9e33928f4753464f981ff6ddc16c4d8b482e48d9a0ae01aaddf794d5a4d1601da346738fbbc486a2445e81d939d2ab6ea764b8fea17c6497e517464fbb5f80ca6045a3677e7f2ec1ce088e54181b9590fdc9c13f23aa6c8a010cba7572ee631653a5b4bee5dfb92ea3c28ee6d2a396a2b9b20433bdc493e1b02c63ff521aa1820beb29fea862b0395400f609f007290479d1c454c667854f811ad545df40a68df78a759f2ca49e825d38762606b2b7469c9db41ad3ef9b23e24c70d1811cfcaa85082a28f911fe8a3dfd61c36d32ebe9c07a460e7ce94fff5225d93addec1e5852e8aa1474373ac164b45b7aca04115e53fbec9817d13e425f5b70ea4c5a7627dfa087fa5480edb86ff1c5b473a2d214e5972a603b23c08d7841da5862c4ae8989c44632e08b81efbe2a32f9109b98bde3e081cf6d7d91413b7d780d97d7320dffc86766cec381d7ede225c1176affb9dd4c855e153b0afdf762cc8281fe8b1590216dfe65a587f16dae0094fe7d5189404f9794c8e8a8245a966a5f87a72450f973bc724bbdeedccbf265fd4c5f58bcab7e5afbff02e344c38cb3ed3f6d88107a13f56af78930ea7733c862779d5fb47d3d220c3e1666efc0ba4bc40fbe40f4b0968b30ef73f8bafdf6aa5d0693e11144109f4dfc9f8d85e0b3846c8f15c97e3b8ff07c9a2aa0becebf8e558fff77538ead2529c10ad19791ed105f14009c0d5954b7969e09b3767802d6d46a2cacebbb57462811e4dda562db5214650b3332b8796327518dcb72784526622b97dc5a689394e165ba0c2fb212dc14c8a2198ed78265a75b4333234e1aff775aed9010050673be3306d7a72e0810d8d541d96214f4518f11b6950977d8c49c5e8a62bd1f1475371037ea9c354f92e90176dd5d1f4399472b546ba574231839dcfacea225421be473d99f8f463dd4cdd3cdafe044e4af77fea91187c16e5ce82cbb2e7fa613da4ed47870f0ff7748efd292cb9c347c269a12214110fe3f252fe4482c96100e22cec8710951bf7071d77482bad15c6e7115fc5954e16909e3698a2e2395f195a7ecb67fb33214bde21d3009f8302b40318413bdd779c0532a3d94d9bdffd94ebc3124e129028db41c19ab84fe292f75ca5cfecb433a62af5c047ae75624259de234aa41b55388f782553da0473ce783ae19241e12a3ee731b66c2b376b37507bc5fad0df29594fca7686cd86debd1fe7f411a02e056b242cacd02daba1e26209d2aa3c26b5940381dcbbf99dca67d5aa05d472616c36c930cbf91d97ad4d75d271e24fb8a0f093e37e7bc611dfd580ca3c64204306a5be833a7161c43680721ccb2b715c9376e739854d9ca9c60e0990c248109c7cc3eb6d22c063fae5814230080c0adc362de7ca18bae32e271a5944bf08ac3475953838ab6c8900625acb564f0e82fe301d7ce060490369a902572e5a2d5bd29a258e2afcff3da05413f7d5c8b7428b2a4e8cc18582641ff5cdea95bc3e8440937ad38d3e01e6a063b2adf79c92b04acbc900b6aeed6e1bb383fcc30dc39144079cf1a798f8ebc93841d502f3243505bc95c10703138a248a2d74fe7445e9a79f94cec1336eb6e37bc7563ff4f73a82a4bab6fcad7b1e0122d2398f194bf4300269542237eaaeb6d44d1af6c892258a2c41c6ddd4ad947b247a35be255d1aa9d8236914cbf53b09e9da086f967d5fe5fc31dbf19f32525a382d4fd2c003c3d8cbcbf7dd1716c5a6657608f18741515bbb92dc813791c26605f46f1511c657878167e5c644d5b453ee2902c5c36562b4116cb0d5c4524a6634d67dcd412d3e7ca2021b177aba71d92cfcde347171f9b7a8c841356dfe54246cdc624377c1e080d7a18118e04e6200c9f68484baed802e25ad76e95a1c4766560d04bfdc08a65ac84eff119f18f08f6a20ddfdc5625edf33 +MD = a86c70c2063f12bddf997c91d1ebb57f5c55ca67614f397c1c52a87b0621fc4378c2eeb07732e5eb0fbb4b3c1fdde87e9ed71b50f83eeb02cba03bafedc84764 + +Len = 19240 +Msg = d99f82296f56251e365764e1acf4d20728f89f546cebc6217d918700b3b418a30c2398fac5fb449c2c25ed68b020aa6c3a01ca06c0b80c48179413a1080a14baa7b2d29fe092cc1f539fb4756281242887978d2feb3b70593547d0eca0d7e78c5151185fe7a3256f53cca250ea9ea902b8c2d01818fc581a82b0a729a3a6f8e1b30a528403b7b654d5b59d4071ffa2c3758a7b0a6d842d55a3d9809f39fcb18174e468545b55e99681608e8e1f2d753365f8764b125a58d043ca4497886379343de84218180525fcfed75e831baf8c1a3113a92330063f54088ad959bb62b8c1b61cc817614fd34ff522f3658e0d4d4081e4fcdcef114ca89a20292df882d7f1868ae39b5fbc59570d47377c9fd0226dfb7158bd7602e696a2971b5b67493c8c563a79ea39d320dcef501112777f72684ac4a30dee6174e4c8f4962a3241505acd32734d181c90a64244686d3da2a4fa14e5c7157eb7605bb34184e47ef27b22947cba0c2420117caf2c26d61ac222eb02daaa1d4f8a11c30c86cccf76e326ae5220356f84660c28de0f329536665303bbad366c8965efe47ac956333f9cb7c4b024cbbe6177e77076f574f2b8169f09e866514c53cd6285a6140a5a04a5982d56926640e2d90c1d20e7d435c85a6ec7300be503d54cd270376ed08beb872fb1eb71ed3e3016e1f783eb3aa590bb28033ca6d9da3869a76bd6e0900d1cc9e61718ca470072b6d0c5480c8e8b35c03586b33e1519a4ad493f2b703229c0f3242984a45eced13f4051164fb82fe2f2fe183edc8108409e21b4dd289e27ff8d50add70719f0753b996196bea0d9bdd7e980858705ef35c695919510bc4f0020d46cbbfc60ad853142be6f602fd1eef95f882f478915aaad0ea0fa2f75e8ec33172ed6891b4f2aaaa5304a3d4b5e9ee0c9f6e524f5c3c8d9f5a7b58daf3cea4f81bad0b9321c8b2d297ecf5eddcaf5128d934e273141b7d4b06f6d32539123fb7ada52918e5dd1423672a5cace5b1a191527135725d79e26a9c0cb274a30bfbf6a54041b1559237134d27589045a367dc77adbbdbacda555466177737a61e523b9f18d5eb05aaa438b67e6a4690f70c40d534f5fd66af6ebf11c181ecd6cbdb0cf79966248a68d3fa4f9a122e4c1f1784e7c164762f7b67011b756312a9870ed15b4c630c386f5eee5504d0b5cb9e020f1bbd97d47bc106a0dfbdbb3782e2663f16ac6cf0b420ad6b7339368bb40664560d940076b012a634fb04caca1760698cc623d470622f381836b1b40e89cab6e029ef2efb80e2ce23e9e54248cb839160f65d4a19e6ed977afc18c9bcb15d6233fd1983d152a3f70428c9924213ce765203b33e4ba6de33ea5fa8f814cf510ed7f3cd9f7699f8b94c344c3b34849360b69ac011841683a60cbe1cbfb538280522aa55e279eb337d6298c7bdae92951925080e6451da705658b3de910c8064fdca8d5cfd49baf6bbedd2d69a0ec225e823f7e8c7435726dd34cd590c993c7a4136294d30748db51d545ef340d397d86619d6f98ad71119a347572692c9c0ea87ebea912c78d7e0ea2ca998429b982f0b9d21bb5f6b9cbb30f70dc1b44cc2282a525de351c52e1cdadd4f503fd5278c511464a8959f5eae1eda4db4f16094d5b1000f9e40e7f4db47fccc95790eda92cf261c4bcdd0db44b557937adac3cd55b48b5c3c6a6fc08eb9f18de28ea735b4ee38b50f78ae9721acf57b7dc0d4e03a9d4ae0484ebb15a9b9522fc1f14cad7526c2cb8e269726b75e3a6258541251f6e3c5184c5e6878decea51eae315dc656115acc224818ee9851ace474f51ab71d109080a329d64e805250c721df58f4ca367733765db263271fb37e5e344c640fbc23a60731a32b20fcebd5a75bdcdd63fe9e9de4f7d238f620f4ac9e82260d614ef4e4c2f65d734316ecb6b92747d495e24768188716b4880dc6dba07f360794318ae970e843db6948c9e6d1d2287ee279e83e6b8bfe8a5f2ec097fe8c0ae72b0c6c109ba814a7f5fb09e28bdcfd20dc3e176d6886d80eee1c787e1329032098480ef69d863e8d9bb6233641b8448ee5975b9199f851d6a74f34da88e6cd485e7cfa0811333fe0ad02bc5e8df49d0d812e0b277a70ea662d4fac59ca35b7c30003a3c1710f8735bc592bc7db024521516accbb84511031e286456841a651250f8492bf47aba3114c32080eb361fb7eb8c606ba323951ce699b7672a9a927e2ef684d6e0f7821f7df15b79fa1a41e5a39c85f902e9a2d9024f7d6254cceba8122374a3a22f5725de78cd0f710492c58470a2df9b3f4022b9713daecb57777843a7a0fb04cc412b7e7ffeab1a9b1b3fd82d3f8436cb78df552880b357e53fd70ba99047cc734819a62f75b3bb88e33ce5fee5509d3851f81c9bcdd9bf1b49abb051cdedc3ce75d79eb0ba911d73f2a2f5091aab972cd45557f3ac88cda39fde7bc8de57b185cf4eae2955ab0802515b4e7669fdeb4f08de4d57a52847254956b4364beb5e405e641ec2cf6b44e0074d386e57ae624bf57c48f04121f6484dfda3c39d1391a62b0235a5ae3898b31c62fd196e26c4c5a3158ee507dba2b5b5b990955b36145f3d113cf77d79cd249980e49e35ced9681b92685f80bf13148974c2d70dbbad149d777be3c198abda85913425340c68d964dc1e863233100ccf1582af3c0c256d511e3a8e04fcfa7ee87c36d8f4493bc386d9f881a7a06345918418456f90431163ecc123cd0d82b7cb2932ddfcee18cc8a733e79676fd268d6a9ccc22eafd1a9dacb57c8a5330b2e35806f5cd461c89c77913795f806261da76ce54e01d195dcbfa246a513d65c8a2e69377e050c13dc551b2cfee4cf260b0bb5ad10715e59531958d4e49f5e3e74beccd06a1656c0342cf865dbb3309cdb0a6c6a3105bee3b5f0d74aaad1337994ee9183498fa6994b05122a55eb934e34ac7965d8465afbab4d06f02232bdd591c5a09843f96664cae750c394165f06bffac4e62eba986bdd37cd0d7149651a144be1577fdbfdea58db9a77bfbbfc8a24fb35355bebe1faf2b614eac29e910fc4893d0826bdd3f39ee8d890ff63d2a20ab7b59986619e6f93d2c3d03bbaaa7d4a869af25f2750474416f2547b95491819372a5cd8a235936794c3050424192c4d4be25e53a2dcadf16dd10c5cd9c9b3fa827ec47838102e1703fad1466445e476defb942ab5dfee4df65bffc9b7ba3a55a0971a8eab95084a27517e2903956d6d49cfdc0be9c1d201b87977ebb88476d19a5fa544812ee8a909b053d488738ed994447e1ec5ea21b5bb14bae9638f2f1777bcafc0444297dbb00097707b461162c544c18dd1c2a310081211ec41432ccf3f987e2a7b38de89242793246575bcb1e6b6ef7d95b220bba65dc41c +MD = db7e2ece42b5186f84e6c1407593a9b9e2971aba7122b8167b21b31ea5f0bd21ff754e4fefba71c9327eeb19625702b64426acce7fd88467adc3d2b38a861abd + +Len = 20032 +Msg = 1dc9e32ac4176f64bd78a6edd651ebeea3ba85dfcd8298a8ad72540619d66d317e3acbbc2f7282bcfddd042c08ea9690d5da00d9a0c88989f3e72217770ce2950b6cb29013a64a3812045cc07cfd0e08c5ffae7abe6ca13221e39d616ac019f3e9e6016f16bcad1f24751472d9953d9e9cb0f789d075caea60ec2dab9bfcf99343301e21e0bb95bb5ab99608c7b70a9a827643d07decebfad88c3abfb2c76cbc3fd3736e1aabe952dd57484af06d5d439ed8fa156ed8ecaab04a2c63562a5ab70556661e6c94912dd5d79402f9be1ee2195e84214a41b44211ae6c602f2ba9cdbe4161f87d7f749469c2e1f68db335bf1a904abcba302d0a2241607ee6d54243921dcbc5f6737ccec19e96ef52528b22caf7b2ad66ab3e4a0c8a7184232d0d64a8700c4d7e79902506f61db5f0a50653511a25bef5bdcf49f612073c8d3df27729c58c58be9898df604fdd1010b48f99d6810cb5106bc950095f8b6ccd0cdac33ca1b2ae5ed87d45f6333ec85a850f3e81b5cd5b5ebf12a76cfb63dd8ba2ab910a8ee8160541259ff129a8a475236c887b3dd27888c09396486ef9576e084f29bb13965a5bdc793578ba836e0a9390c0eca181d435763465c53eb4a21e45acd376b922400ab0614eb46c37ecc0de612dfc6a44360eeade5b0af5fb854461acd76306f591b7c5c634cdca2ce7400dc919d11f8268ba2377c1401a38c98865367cab8477140c248e2dea59cb263128afca9648a230e229e8df8e36d2369158310c76bb1093b1d4a38233a37a733c35fa89716e0e572e051afd1dd03194084287cdeb3229d44eddeb7bd12fa294093e949e8a182da545bef4631570bdab942b1f08337128a18a48505fec85ac523f4a64510ace67e1d05c5d599d9fde43de1ce104750077c00d1cb978ab2efe75866252ea191824d576e83f26dde3fc238d1cb50bda687cf980610d0c37b102c5888d46b0de7fcc47e0698113fec77f144a3483638a30a1168b203664b8961f0aead328ec828ac700b6e70b6828d0cfdebd6b3355ace04dddd5601bc85566bc0b573ce0e72cc27ec89f6bc56d828854498dc9ad296900e7180729a47f36a8439175d157e605ad576643fb97693576761d6356d927e819d98dc883b9d384e41b64ec99733435d5bba44ba269a668229e21e61ba09752b28a05c177420a67a2ac4c659c1d18e3c213485f65236a4415321ebf1fe8c0ce5462479a0c276d066b5e1188e33ed938fac51b264eadfef1d69cdc956a9beb8586c91dfa4b50448ac6997afc75bcc05b073be54964efaa96ed422311059f609ed0274d893aa6d71a3cc5506a5b81157471db6e6fafd1b55ce38ebbdbf7de6742bae4a0f0e40f6ddf544a5b799b7320adbe0f7d41383c696a3fe66b9a483e4899cd68ded74e745001969063d23f7c282c783edc6706160ce989b4fcf601a94aca901ccfe582bec6a78a00301c4e83771926cf51882149e7004a5f37992906b6fe8c663ac387d318f9b9008900d16f539d512ca54c92bb42d8084fe128c83dd45c47afe919659d8e20aaf93826cf2a05e080bca05d605665984eecc54ee735ec0d4b60a28e24036f44e5540335509bd4093be7096093009769a19eaab18cd8463820df2ecacdec058cf377b3d65daa0a400b15aa0034a321738bcd57f9c20d2a064c965576684296215bcc10b0fc3feeaf76ae49e34a264bdd93e195cf8ebcdf9f59ebde3afbec6b2ba5b9e16c3842c77b061aafb1dd715dd042422cdbfacdae2acf4893bd90d2ccd15aa8f0b1169bdecf43c2a413f66c9f731e58e4c40d29dfcf34143aa82edc003b01000328a0337bd1b40cefb09bff59efb18c8532cfb6bab812b79ca2def251922229e378ddf0e5a9e1615a32d712d26b8344d6cf495d860af0998154a7fc05fe458b584ad5bb6680522aab3eaf8d53101ae9a04082078df05722b16591e265a6f38e2946917d447e90cdab7f2d58240500e4ab30829a1590cebaf37ea48cb9b3b39a2013181cc8ca22b4229a585b8d73bd9bbf4552006712ddc91047e9e2494c0e17035a72823a8d9045d83a387fd682d778a427f91fcb9f0cb7d16767cd5c9a8b6d9bc2a895e2ee63ea9405d6aa4659d8e2217f7fe1885fe4ecfb8726333cc5b204b0f4c13f0716220a20a339c52621484100f5ed2ce879ecd0594e2ffe2ff40b440a97c566f32c550c42bd69b9be01adfc07304aea3115accbb26589147e4f1f967054bdf4ec59845ac3fb6f6c5622917dffd99e02ac5dad46cd733c5f71ff7560abd3b0d03bc5385b6a0452c836ac7b2baf97f25ca17776a7732151c54f2c950b84bba6e22897f87701811ab4a6c6f46ee1134de0588b90586c17cf3062fd0800c0b5a712faf84d164e19d017ed9883ae5bf5b77618c281bf80fcbe87f09b55a62a68bc48fb0fbea01b757bdb544bb053e6e438062b43d346777927b2422e0464897dec6c7105d37d2e3c23e7230703c54a88d978d7370d5418351198a0dd9ea4a49b4066a50114164f17d023a2f3056d4f8aa1b465c6b8502cd9842351d0aacd446bbe1edf2c0ad148ae8b7718383db1bd9299a21d175ba47b0c883a9f30b0473194707d67ad3c17e0a85bcbcffd33fa5b47c72b46537eb7cd7726c5d025387933bf5e6984ad3251deae49070d6b70b1f252353529a1aaf1eac165ad2dd6cbcd12948fcb7f5475e50b675c131baa7b3c4a5aeba90f2a65ba9a934ed8fe6cf0aa95ba0b8ca0c98c3d2f7c9cd741e1dc052b08ef703e163a7aa495e72f8b0e307886dada922f35ffbf1294113cc6391c725d044b70ff8cae99d16e3a9a1be512a0ab9b05c774bf57d57b58c428f4d9c2eda7f5079399b44b7fe9c74f02f8191e88cca69212b7901be6336fbc8411e956ddd38429c056b79895b4472c4d68d1dc99b3a28c5a3fcfd35903830139669361aaa758bbdf7cbd1d41f997db65b435d53b2738f88955a50898b1399c2e3bfd6abbec1ac4d754ed63ec825e6430246e90d7ef10e086413a400a053b944ad84ff97a69714d922670f1ff1545cd98ffa495d3d4d14b394bb50617c931f17784b2964ee8065df73a6e4fe07bf420848ffe6d999e24428abb3fdf27c3c2bc9c884eca9f2f80fceed70e06f97c1265db1aa59f8f15b0cc61d8ff55a2bc97fca02c4a1cd60888325f46789db1df47a287e9c1b31f001ef1a6eb1eeff17d58b96db8ce155939c60832d0d59c6f6e3de16f447932b02915b9413cc3367acbacfbea74043b918ae1854fbb4d8c9def99297b72f5a3a9563e2d1a1317b0a6713bcbffa81219e6c582b29f4f07f4a22b068393bd5e8e745041541ab842e7dd35ae30949b2034c1b0509508d62c5ce6ea2af59f6bdc7b78dfc53727726b6388e1ad33919657168815f4397396e34cd1f3ad8a87c596f31dca72dc2a8bbaaa0d3bdfdbdee1de46a5ba15a3c9d8554dcb1038473313b57dcbdbf14d0c495846d60ced3064c4de4c7e675cddf0e4a9e63c0773368c9d60a2ead8ea92b3f56dbf491b7e3a09877fb17de670eed20208a08ca1055e78aa +MD = 99820341517e3140475fc1a9e57a7f8b8bb85293ff7ccee237542e729531fe9daeeed96c3f41d87faaae3a7c6ecf308842b2e08aeb17e77a64484f41c60cd93d + +Len = 20824 +Msg = f72b6620e71f7b50486d868eaa2cd34bcfef394b7447944f6f8a75f1fad317cf4f4a95eb75a65b5259f0dafc208981f4bc6ee8b8bdbb4ee36a6e4509116eace39bccdeac634829ca491782b102e37605b21464febc4eea11d83a9dcd678afd030437a8295c0dcd003f6ae475f7439cc5d86715e518085021e177e403a52ff276b2155a2b06fe2f3c64726910a7b0da7e57f164357af1685bacac817472657386cced5e7a092238c6dfb67949bb321876563ab7b589121b066261dee8773568797a481bde0e82cee5d9be7de9dbd13ef7fec8772eee724f6c2a1f62275ca6b998e6adf91fbd24dae37a13dbb9ae96354776250d695019edd32d6c75f8c8c14e2b35a46004bd124506e93cfd7edd88e3aee7d9df2b5810de8493d37f24638d0f7a92b5b857b754f5974fc149030faf3176796a573fae5e08c783d9e874d612e5cc236969de52f0d4ddd32b290fed1407e55362dc6cf90b55e4250819adc958b66b1047db6237f0c9229e0104691fbe4e459e49d579e120ac22a2e7789ae3686c9d82d877aa0d5bbbacd7cb42da4cb5ecdc81a5ac2f10a4f4ca22fe6e02cd49edaba1a2a3807d3a94c5a7124a2a1c02cbf32500c8562b9f1724ccd664ac2f0323dd942fc8aa2f943bb3365c862139acd1d1b2e191b6dd1afc78c9f6c061af9ff47a84074ff1ca7198beab345d8648bbe8c04fd16f16cb1b8b0e41e6ebe9f8244acc98b09e1df7da93302f1f3723f438f7062457ca3fa0adac2d5b2f4e0cb09a0c19f9b41ff65dd5144fe9a77cbee22ae6ec5afb0afa02d5471f3f585092800922aace9b3943a56d036502539520bd999dba1945970d9a9d442a16e958420f7a73c740eb53ce76a748b8a1abe8112b8e03b888beda400f0c8b97086bd0e506f4e9b7772ed75d798dcb90ef38de59d40f022ed0ed395d092a05ae3c651f430c806bc49aeb2cb9552675371481e0bf62278163185a1d2a320098b6db5fad24ca25e234d1abbaaab37a2cf4370f540c7adb69a0898eef712f952df90ce1e250e7eb345046f5e9f83b92d90e8068a308c635a02d4b1015f8abf2adbdf874268e0cda4a601e51216a947565ce1816367bee3c0f528568f9884c1dfe4bc69fe1a8e1fb0cac8447cac9672bb67c27a1742d9af89e57601f01e8ba200aeb9feb7b640d55627b9e604cdd5bbdb660d48fc4e67172368303bc97e29e03b7e4abdf5c8b39f0351794230f6e19324bc1486a906d1bb1bd1f96c7223ca0ccef801103ece50cd56bc68f197c4448925fe9abb93f8b41bd1d7343c90abf67859905fadf94392f0beed1b7c8f92691e6d91e240539088b9f3cc73049b6339c359dbc8dfcba51499aa48033baefde9c35a1a9dbd5e5aca05e046385cf9060e6e5e3edf3e1c8f3038b771a2c77c73210879fd2f9b1ad3e29025b8e6be3ff0dee9c52e0531624e805e54ee9c985e7eb96e4bbe0a621f888cd942b920a0e6b045c62d4dcd62438f7f6b01033336eb9d1d555dd1d09ae2f50351b5bb589d73c0bd73f502ba4926aea7ff5a74191baa3ab76e1edcf4bdfb85f089fd34010c7dbeb073caf13e4e8248847bbfa5b0cef0f432091d33f933dfc7def297b7bc964ae6c9560d7ddbfafcd98f70af1c8cc97645f7c6c77b50a4f637192bf3badda391e5529b4b1d05c6ecce336ea74d2f8390ac8317ac178d89d5605986cfb1f6bcb94706a3e2536e4ad8b31ad646bbfb85e6946e8c39ad224af3bffaa35a31aa5a4768301081c557ef47149037fbed8368de9a04950e809160e7b286f241be4af4b2d57951a7c7753cce6f5e1445665974ef2a0fb289566d8417f4890404bc5b24822b4cf7a2fe28abc52fbefb919ae0629ec0ca75387318fd0ae27b4911b07d624bc6157321bde4c4d1e24d4e8f0faa9a73fadf4daa8b266446f8c842074f142666228d44a2ab5c105b03839d9c393a84f534b8bc4de3183232c41a7f43cca1f967ecfefc843ad106f71ffc5937bbf2caa90ae131913f50ef84c0cc6155ddb943c771f4fb64d106210c941211efec75d3e5f9d35e12e47304837b6898cbd6ccae1b5e09c1b3224de7221c5f48236f3629626e19925176f109d5407976046c4e90ca0da8000d932ad1cdf54e7c70a8a64374e42e6edb6b5d87e0dc69999de2d1846a0d4a16c2a81f6966db6a2f661d68aab4088c53ff360ad74c9bd36406fed7f161d98a7670d5be26931b3cc17251dfd79637bdd25b6bab906f1b2175ce04d47047fec3bfa6a06991c95120d303da8e4291ee3d7a6e70924bceb6ee4f5199598982e99052b29cb4237ff9d0f4b91bf6843db875aca6e96161e20b94414020d995b9267ac0432f20542d91a776f09a9b15001300f9a33a9b6b5f85adfbf83fd73d4131dd98d6dc30bc68a52f0a58db0e6d8f8a69d1d1e8a2c08dc1b5e0184ac4d8c1a8533cdc3867c4b7a0d20f4051a2f6127b1ae5c1880a19f32c269dfed6350090d6563cc1a8280571113af645930b575f819e75d07d43d036318a763a66aa4d5568610925c003d74b72b46fd713aa09bd2a5f22ad5cf27bbd8e5c194970970785bb0e3286f48de29d41f8dc83580185c1d1f77cb68b6884ff8f15e7aa988dc7886aa83953da289fed0b52bcc8e49443e424d1d46aad487482a03271ec22e125f3e3e9ae1ac56677c13b6c91162df4ccba7f78da581704d2dd8e5c487cb4437b4ea32cd15a6ab9f2a05e90ea09b88598bb5e76ff0d7d10186695ddcbdad127600f44fc63712ea59910f18a3801f8d9305d4e46a2d9340ccdc453417c94ee0f5cac35d2d52d75cbf3797092fb9d83621c16db526669d05d6b5d4321fb298f6dc9abf24a96bdf46f6a607855b54acca2b47e6234ca2dd68469c7d1e9980729b54f8506be38c11f32966c554cf588593db20a9f684ea3bb14416abc1303cc319856ddefc83bc55aa7efd3b3e32cd4ad757d31cf675459f27faadc3e48aed75b69680d19d300493b21df5cf0b2cbce3dfc7e8a9eac8bbf1138ee82e4d4f9b6fbbafba9117926ab3542fd6eb82672c37f354e7b79c245419bd284f54c5284e9970faa2863252f99ed8dc26f66d8825305a2659add23219ff6df16b9d13bd0fdb1c9cc019b518b63a864b6f58923aafb55e64c6f5559a118b6b10c37201b5e51d08c09cb06a8bab70a5a53878b923d3af4536b4f6ed0344a6feaee03955b8d9477d8cbfb51754df297f110ac0aceb980458c5ad186115bb3670f3485cd870f241c128b08e851b5a4b5ab86c97323b079ddf3938c37b797d2407068541528238f31cbdf7a57c8725bf7fc2e66512bb266222bade5f01d792590c101f528b99b346d8731d60c440476e365600931512ff3b686e2554bcd603bcc6389cf54a5b6c203c71a92924efc83fc79c438703e89a11fb80980b741fd7347fa7869459706a6b8fe02367653cb11979bd36aaa4e7fdca2116bceaf15a16ab7d8464967e81b50d1ae713814fce09e695e16264bfb5325023591b5afa2ec9080af8bf63823656f025af02e1aa4ed88d632f4d1e1efa418949703cc45943f7336c2b1e632c3654faf76078ee3e6326f62bd0813e875f305fda83a78ed442a813eb4409fe462ab715da21fb10d3b6fc0935ec862ec38b09b920bce52234d3e492d16c089c96b98828141a15af30ee61aec8aae2549a28d47e61417de6409db49764caa4a5 +MD = c1d54f9d273a339cd1750ffe36b10b1b9a60c9be1f2f36d238674e894d19b9929ef7be13043028a862c528e79026504c4a8b04a375a66d9d84efc1ee24325539 + +Len = 21616 +Msg = 38469d81ccf58dfcbb44898bc73f80316fb511e466e19e4c4349a2c87ae744b28b872ce47970957a7e46a3dafd2ff7f2b83582c143ec9619b95443a3ad00e0236378e8fd40dd08f980cb7543278383b63a4a74592e0c8d2aa145701b4822a55b29e37ad60a830dff299ba7cd2d844b035dbb8fb5108aab0864e5d0393393bbe1438e8977bdabcd16e17de080f777786489527cdccfae173a6bfc0c04579b493d1b41bee6439d6fc5103bc8656ea7315e26d5e3d655c0fa481d52cb859a8477f817c6c12d82a11c951e9b0883785b9f7b9c0d6bac88087bbbe1aeb6c2e5946f99a1e4395464fffc0c736648e3fedaea4253c2bd6552cec31a21da74c5211556a82062ce61d0fe36b477632f8be96d393bb4bc81099a59f9ed449cae96344d57adfc09295eade7f315935c66851f5cb4ef25c25ea148f246bdb2bd0c3b088597319ca1f252e5025ab52d1795d98aef85e50f9efc3443e1d210d20535be830441bc6af2d0465f97941eaf5e638d116ed1a5db1604ca756ec4710e3bd2268f147bd4cdc36c4103eec8d87ff778ab9b20c3b8eff31e6bc5e14565cd298a7c13fb6d032ddd6e4bb94f1f6907aa7d3a124e80a5b5fcf1201b817c76789506c7f60241d0f3097d6c6901c15bad411a435d4033f493fb26f05f97922b7548ee0f22711cc3850d41adfb4dd536db82f6cd643e022ef3b664e4796bae0c2d0ae95d7e9028654cb16415577b8380f837bae00f9015da3cf754035245f9a208a29fb8f2a68d3db0bf8bad66d3f5c36c260d84467d9580d6849e55d06d9b746fdab92866fd73d41afd607c0e9c50869e1898c2f14eaaa92925e9e2dc2abb0bc878dfb5c2db01b0f0358b8a3820bf52f8d403a1f84c7bdc9da4ddb35fc681ed7c45b868ee895f5b9b2db4dfcda568aee124f52a43bc31a19ac823cf3f8716a4f409ed48d34fb65d84ae8284b3747322c1ce1664bae9f3808858633e66b6a2b8978c255d57742e3c127f9d80d4d50936019b0f57461aea02cf1d4409ba9a4cafcc9509b06342ee82ac6aaedb160f52730753880bcd963eaed7df6f37257d3d13fdee4148e0ff1fb6bc355d9d636c75603cbe288938a6160c08658cd08ea59d6b915d742eb4f4e861a9a951cfa2329a8608a398d870929aa5cb7942dddc5b9340f0ab4a68c969720adb8e3379bbaaeb6bd4cc80005ca2f40086e13964f9e7471982a06d0005a6e439baacaaa1951c8d9906ff860ae31e49a6a3661a70cc91e27eae0382fd52f26777aeca5f511ad0ab98080555fdef4dc41d88d08d063da18cf7df9e34689797234a1fb2f990310d6bee40a693e167788aef9fe73930345e6c0d7a372848bcdb3f3d752a2167c21df52518a9e9be32e7c6a34e73c7f59912ab47e89709a5a807e4d518fb7fdcb64672c5f6d8fe9d3ae29ec2ff3bde5e5403702e91867d884562399c70edbafaf3d10a5444f97b8566b13ad3190827714e79e448ddcb2cf87a366719e6c77bc66206e45c69d5077f9e9bc35e04a24a386dbe2f203530c0fd2fc995d4e053694aeb2c2964cd344b92cae961ec27d1eebb9a19783bff7bde9f4c65ec56c7572d8d778c00f5d8deeec6d3e43b04ec5dbb01bed1e723a47530e7ba509426049c6e97ec6f9296f29a99239fd17a2eba0d5b12bf2fa65f8de65edc5fd2b4ccfdead571341b07cf8331f4b217fb45f2faaa73f6877bda7721961086243574d11c080a2235d98628f36ca67a23a9c5d912fcaeb5fcfdaef3c74cedeef1bffdbcc8c0b4b2d9f0372aaa115883ac22226a6bcbb15808fc485ce9d29d1bafba771568d87b2a06aa435c11e8b1d698af832e6ddf27e792c2d03aeeeec915446c0a6566190991a64dd2468ebb5a7ad19810ab8000b66881956f133e6919e59a1edc32294b03efa0220b718a50fa773d25f36b0df506e5bfbe4c71410a3492981718071936144cdc7117646e703ad6c69e51f67a87c065338491db5f9bc32425a1e4699ea1e2b142821ea7a0e3c29e534a55d2317e8cf1c53163da00e26da42b0268e220561525ba9c47c38a7139d7cb72248998a211905d0cecf58ca9db199183cef9071b56b12c08ba3f92e2488a185ee9a319baf84ae35c54b46bb6b48b3f6c3b37bbb94d5c800fa0a322fd96be2156caa61b90e8273f6ac39f05d1a1031c05d922a4f8a12e9ef72178a18bcc7bcea2ef1c06ea8a305a7e603fc2c44a871295d0442b9ffa2f6e086445775491c90789818c4191866c1adf531b0b56562208664825b6780268d98c92920b208eb1b454a87f364d83e468d7c5bb464e6ed9e7be684baf495ee0c5c9d2e8c7b76a3abd4c8b7c4ce5299e2dacdea8dd7539b695e658407cdbb99f1c084dcd12e1ce6d0ab6530beb2322a44fa7c569369360c0fb26418c87f6b9aec4912acc5465625084dd27b47bcd13feb810a386bb708aff01c54bb536610614a7ac926af60ccdee1108300064aca7b24e2f9f88d2d3607c900d9d45f3e649d9aba1ad315e9eb84c9a7e96760f8884cafb4be2f6e585893e8e4460c4254b2a06bab7a2a8f5e3ca740888809fe229524da5ae93585b4fae4de5b3bbb8335950a2bb389a5723a2ac6d416e16014656ba44369edb379cf777b27ba2d7ab87d864b5956abcc751a5053f2f788226a4d963b69564e21910458b743a59db2488900d483296317fe5b27ef3b9eee9966278f7abaa48cf891f03939b081ff0ac9e49f461790320074992bf8fc61776d7eafc1b2c5d91ca0c31f73630cf3e3eca31cac10b52fbb2e8e30d6f1e403c4e73a22c793f9689fd2caeea1d3a76fcec06a9dc1b4ba5c40fa91dea36a50ea59cf2f4d2b9ef3d768e70fea5f0c1e5a223e86f47aa2b5aa75ed25ef3be2e189a86da47b483413aa1a56089ed56ce04770af9e9d317b25aecc8ec0deeacc0466334b5029c7d3f75526b85b78df767bbc5cac080470ae88bdb747e94a4ab648047cf0a8f5052f0d7d10766f14b7c97f2d28ac59c6d2ad6d6bc8a105add6121ae8f7f625598a85c4665a28c9df18d6391e87391a60b208323d6342ac76076ffb8846b44bc3e288cab57647d2545d1d5804dadab04ea93f85b72985543f79306866bbc382c087987efef74c3ef10f1f4a7495f9b20d22c3b64d8de183668603f008f99c60dc04355f875fbe6651994c8ee26b1ea618b935628502ffc087c84b10f372b77c72c30ffb031206ced2a635a3e2acc1f2edc6f508e22b38821fba86499aa9ad2c215e68cfe6b0cdff10906b17d9fd8c2f18e69327d959144eaad736187310d6067420d04c96ae6c6d87f24d595cbfc5c11692803dff2f2b8c95a8eafc214aca71c7d4e70fb77d7aa0a5465cf6cf76174f63555cb9b81fd6d27c9a056319ba0314a8c51d77bda0712ef5073a6ec6a2f9208ba9793998adbea6dc3525fbb0e11865a38bd4131db9d86ef3bf362fc6e8d3eafc09762c155b3b701104cd14ab4262cb2493ab605c2c28e72dc900c8349a301530efc40fb2aae5d4d7835b4c5d608adbc87723fdfd69db3e0fcf0ab6b449a625c6d6f352f50f463b7c3b51113bcdf91dfba0ae3a760577ca163bb479ba79aea32a5984a4510ac51a9b876ef1eaed25e82a9adab45a817721dd99ae9fbbaca1f3d7e1e8625b2feb08a201d56cdf4099e0f1d019da1f6061bbc26349773c5538be5c0aaf2b77e1306c2c3554e08d5add8eddeaec4a4924c02e711335beb0f5db69332e394e4bb13deb969c4e0b79ae69584b45d2534c310ac04643c3d4be10f27ad9d727692b326bdd6da1213c38cdb5c3c67b6ca3ad37aa37de5fa447b8391669dc9fea0aaac722d83dde8f012f0 +MD = bc393bc550a3705fcd5828ea43b536f6b2de8426bb7d0857dbccde4cf0ca37bc8a3c27a93096b4ebf7861843da5e4c31a43fd7155ce8c986ecbb039739ceeb04 + +Len = 22408 +Msg = 02b74a2ca22173be04ee6afd204d76a121cabfc10b68108ea1f0dc4186887f52a287c7ebc788b39c95be7a509b87cf80be4364a6df66adf5b8cce647074d5757ef92d7309b268fe524d00083b5214844ed49a005842f2afa32c0eaa1cc8611f4b17d82e364238f017acf037eb743665574847cc643ea0f07d673ee371d5c3693aff3d0ec6ba73b595f618c29e917b31b1b9effd264bfe5836d8efdf142f74d9bb29aca33f8d91c539b2ea26c92c2b6ffac3c320f2fd732d6bfb81cb7827ede74821a77a153e1b958f5df4d2ffb6ff767ed091b66ec5a8167949a5571271a7285e71ce01cc3e89ad1361c955a6d44ffbca8aac4bfe27057a0b4dbaf0777f29038a9480b8d91164824268c83d52e695567a3ca35035a3f3ee8e7243361bb2fc0f48f4502dd06924abb8dd81e88860781cea70f75189cf2bda7f41de7673af88a2262bccdf2688528fc33a86f5bbf460c5b7b218be8f0af5d46a46dd5023e767728ea5472b6ff166b51e0a27c37204d7d75e9a9825a9e9ea42bbfbd05180dd00e6fefb6fb10156e9a215b714f02f0455c83b74f5f55ede91cbf0db47d92f02fd75f39896fe7f0b43dd36dbbf0a6785532efaeba2cc327b54d6a55fb47592fbb5b608f76d725d911ddd1de29650900a685209693f18b922dbe9561396b54129b21dbbb253ab118ad01827662b815cf60e07e3781b4957676f7a6f717ef6ae1f8b236833da073f5af314efc0ff1b02faac871582d7fc91dbb8007e03ddd85e3f994dbb0671253b83ff59d3ad716c466acc761c33e590fce22e21ee4523c8c61c751300a4a9639a887d6d7f6633138bd8f64b63e5d4b4fd0d3a455caff1566a389719f588f370d0eac5b64f95a49f47c7b28d892325b716cf74e135ceb6ffdf1687a8f64ddfab732d90dad0b6567e0eb9799308764935deab668bf60be5238938cf668f4dde91f5c347218f32c92e4520c4124e49cfbfb92377bc39f22c7ffd01c6c91d1360b2ed4e5140e7b56d2e8f801a81d73819a34aba30e86e1bdd43af2416574c39168cae1157bf8698c2fd4269f5484fabc78ee7f21aa70ed3784d13f226878919609dccdec2d3c8675b290240ecfbf42f49d1254dad6e98d39dcad00e8fd0505ecf54dde91b4449aba62043a75a13813d2128973f61a59876be6b47cbaac83e53c34035d2d98766d024819b0fc505534fede39249cfe28a474a9cffdc1fe5afa2dcfe892e75f3cc6f66ab5cdcd66806f1f090caff40bbeacfd2de7c9247af30c68cde3c4e893fd6f3dd2c1da0d6b208add9ce95b27c88467ad7be2290ca9b4e39436db3c57bb202e8088261fe7e59c4ee29eb7715dbee09d2d9aaa65a11106465a13ba435d600fcc6792cae4815e5e83d3176039bd733b15249225c50a3c52fe626b671f2209311199fa9771035dcdf15b0fcbfb7071fe983b6c3d9170b2fed45346ca18cd3eeec4bfc8740d966b515f208fe0ff9e408fee1a2fd910faf9748dd6accb788788aeaf80024802620f5297ca9e878c6d6658df68e3e08bd19b1af492a65285776dd99885b2fd968ed1385f0245a8ec086dbf33cd903c4a1c205ad0303b4789c677d74876df7a1242396c80708b2b6595dd2eb1f33fd495040e9be8577492ca9b2e1187fa92a7bea8d054c2bb78f8403d3c0c227ff890b4b1ef4405b0571b911f19ed1cb9d26ce1e51d59ec8b14f8c52714c14e1cc158ee4a4abfefe2efcb2579c0d4d15ca7b1c424a8e3c88a68113b7cecb5fd70a4148df8a8736e964188d0d2ab2f6c8b195eb08bfa5b1c5e7b2cec634d50f723a8acd7e290c84a74573bd8526364b6ed315beb429a27b1af55321e05befa03ded50815318a264a2338cd86206fdd772bf690bd7210b14f26ff091a89c71beb4934118e0c1ef5384cec242265570077ec71e67043e560bd6a809b2818f01b750bccad8c9cd59dda967c2af448a4377dd9a8434bdca09bc524e0ce8fdac2626acca6c555083686f8aaefc543f2dde9539aa5919566c9cc2dfc288c99f6c4589136c8423279ca195c2f4ddf598b8a7dbfd670b69708e95abe995fbc8c957f65b4ef3c0a6b1717bccdce9e5f7c3a335d8a350f9c99eb87ad40a48d46b1de79f2999f0a074809a7d8122feb2df52761f07c618c29e2362b2d7bc4ba1150fa3c6509ef381f117802d6f4f93b310c7b9b9e5cffee47bc125d4237a2ef07b1105028cc86d03c0d8bae1c3bd59753085e6acff4ba3edd6da7a6543be6340f1b493ba1aa0ed945856b3514af6a067b33f755eb0a3783d23e1c8dcb50378f11d8cd873a6b2c5c22c13f1f2517619091d36fe45a6721c510779a9b0f3e3d0af62ec3bb5ad68a60bb0930f2b63d613d7d31ed9f85d31e0d7e60485688cda1aca466536068b5d0edf8a5663831e7131627959a0fd215d66204414f489ec40b7d04c7a7fdcecea60bc1dc0878fdde1e2277469ebbaaf7f3cc8a61d6f9baed2286fe9be41af3e9b2c3fef83f3b82ea2c6a568e202b763f1a53f80906f0420e8fce7b2835403fd09f1c973f320828d2e2f4aab348e89cb6f500368107b5a0f0fa5d61b8c0f51a4a131f74fa0a675760eaca5dfe3f7986242cda2d1100d03a5b093c9a91adc4ec1eb6d37d70eee0775aecf455b72d669a5167e9c30119ca7a1767720cfb25321d1532409beb07fcf0898f787c263a3842044d36e1987c29c7ebba07a14050c915f72c6eb4b17c422ab57c60b8938c76e50786c8701f4e7888a0ab043fa755103d8c4f66b10b763b8ea65bb4f3454ea8ea20bba856deba3c27fee170d0775c8ffb9b402f7b411d6d8223d37a1485a657bb1894dc7d1de5ff0bcd05533bf98fcfb8eeaad1f89b98626ff68cbc039bbc0abfb6b86ecb24fa489cd5beb668751457dd4b3355126110a2bee52f81a8cfb9495ec4d0652a3a1fa042deb5a03f3213afd07b83c2b0daacb3d5b964d2eb68c59c000883ca81a97c8e65af9119a87ab560fb464320ba4f951f1e39d2b6b4b0078c0d4c7aa4b7b73b9a6d11fb298b9321f1c5731b771708f26eff2f2235ebeda8a0ed565cfbb6ad814cc2cc9bd9d0c680ea95ccb2d0b14dec26e261fb577868cf6109eed2d865d3792dcca818305f5bfad4d517b1326f66abd12e9906254369a555c7de8442ac7048c4f46d1b36209ab636ec1dbfa6399a56f64b9deba63438520690ed194173cd1999a0e24bf4fccbdd9842a68533f733161ea13551e2341cfdfccde23adda233123539d05171d93596823f7aabe1917712d0982be0e2295fcfbde4868e1f22e85b1f28ffd4b6a1210a7d4b60d8b8f0af7394984641adfd47efd33fa1be0ed9341ddfd4377dc93ad76110ce21b4c1fa2260f2094d1c4b961d85c644fb71b2b06180fea440f4b48e9fc2c43085e803981a0273530918c5de28bb1c5d5b50148fb6ab0302e1e07f83c15520d9541c86b3dd809ede42de22bbb2b75ff18a023b5f7ac77655e4e930038444ac3156f75331b403fc12bf166a1701a1166751302f06f6fbe0040fb8d1f532b4f0a1532271fce7b313584a67a6d95ea2ca297682f96e7270c8792bf5694011cf758f1245e8fabeb76e16a979dde911e2029ec19fa07d354db61bff4801ce6abdc2645c07c115813892b5a5f5172f6288462efc302c1d89bb32525557a08684a65f89f9100333775d099e06835c9299bc1e41eddca635b4e2c586f3cd4e50a9b1d564b109b63ee94f5a3894cab5fdfda8133f5e4c15adffe9f61fa25013141f06ab5f4c9ae31d1f350dea17732955d771ac911528816db2f94e852a88f8ba2fce69e1916a91b86138aa1e5625c1836f42729dda17f35c15395421531f042b213198514922c8f7f780ba3b1a89846f0d41eccc77c1716470d29059e5ba404d3d56bf193c6990c22834c5a92b477a01f996a286b2cf066c0aeb8a96a704b209cb6666a032e8f2013e7d51cf5106ab227a6a1c3455e9b75d2cadcb4162 +MD = 6b543633eaad9b4acbdd18958c2f76d255fc32439ebf5b7125e6826da4c2165e4fb7295d2804e627a072d2382ab10d43bdf0c0e5e7ed45f3543c7cef42761f1d + +Len = 23200 +Msg = 126a5b0739f20f4e7a2ca8f18d41bbfcdc4324af38125682ca7def664caa904e79b8ebeec1a21dc242673f53f46837b62311d45523bb1bf23fd1dbe8f23288b45ad745b5e9b643305ee64a97f303950bd8d4e31fe12bcbdf7c0d5011e513b5ba9d1093e418f4289fb5f1f246f4dc7c03e4d57995da2a0f51687975678d15c0672aabfa04b526751731cf5ee75eb995a72d5cbc4076808f51ed5d7374530051c4e9f0a49c2a12d1a1b9cab802996388fe9cb1d7a71ef4f2e6f20071c09d9b0fd7c227b934de81e5433628251f0da2fc10191bf0533850e01960ab98d1d4afa3aa9e976054393a59078e32cfc7223d9ae68de330ca2e5a03f11da610316104b4456389c285a307d4f5aa30de8140fe0987de52be9666db007612390068aa62ebaefb45074e84aefe14726a7ad6cfabf1fbf6aec33e4a9a82b027ac90fc1991f0ef4c13563844f8806cce27c94d370dfc4bbb3f664b40612fa84546ea7715586a10403bd7ca4bad0205a7b1f66ee0ecd07e174fd044b2f6af655250336105810217be04b48c02952be8e34e27c13210159cf12428b10722abef3712964053d25f0eadb81206cf77a41c6c4785cf964074ae3007971ba7adcb4fddd4399e66142afcf79d1cc11b1d14a928e4371f724694bbbe404509fa5fb68c2bde4402a60e0aea83fbf7444f4d2498016c65392fe81fcb82175903680015ae0877e0f57b8aa8df391cce17d1d07cf0de2939a636efbae764d4fb9159578fbe5ee935fe4d4eabe30147c7c30b6ec3b9a661d9edee220f154cbe553c352dcdc2147a6aa58424bcfec3c30acf63eea2fb435d6d96be4bc65f221e8c8b644a76c51273a77288d2833967d9c0c3431ac0bf9c651e2a103087cdce3ccb074e7633cc401c16eec220a79bd5d1112812b8c60c99c013304b9bf966396038365b79ace186bcdca098d8d12df6f3248438915beb22b87630d652c43249d2fba2f41a880bcc9c241073c0a8f6b08622621d6d28631f936cb21b1d9139e7d93dd37f227053fa0514c7bca2d5feecd432472914d47c789a1f3f81c60884fcbf2650665a0bbff83dd44cd944ff4d93237dbdc44d083e1615b75e7013d01a6ecadda10f87025aae8c8d27346ecfec8bbc2b4b56e16cb2df4c5b9850ce920327438b4ee474fc29043c67e133eaece2bee7637a4799a7dfbc8634748abdf5480d7257df4be8a236e3948901407f003712ec4dd0ff3b62ce950d6a7a84a9a2f00a9e6addaeaa9c8831db1c0fc2f4b0f3711212d7e68f448553272432a75940030510ebd074839127d85a47942112a61fc2a2da17645ff60edc1d8a255b97788ae511033e053b291cbe593317c4a18ac3ede4cc17e2711f711a37c6da0929f28b94e7dab1c99a0d6ecd1f0720156903e5d920115fc68e68b4f4bcfdd917d85511f9da97b02868e525ebf6ec377b31ba8f709ed0777a7e79e151f65aabef6c4921fc3463c48a6c584a02240ae55ec357c899a532e86409f9ff1b2b02d7f7ad78c5853b6573576f0fe3f9f288b126e581993c7f5f38eef7911739a420e5996387047c39c648f739b2fbb8a88f243c60e00842727ef27f0fe83093a9da5e3c5521e7c974adc8d292e897278e46c406fb1d2091c7b89b7e1aa752118158c9474cec745535437d504259c12eecd61ced80e0e612c634bd55e175859b76c3ae241090b506c3afeeda10ae80b50966b15ab5d064adb61bdf6b29fbd219ce43953a69b6b2c5681aa3d6c58fdda42e1f0db36496a14be1948a28bde04073d2ff07f11f06727b6aac25ae29a3dee3a329b76153daa5d28dc845f464cdd891ca208bb1f927fd0e128cfbc804938e5ab0ab37cd4b43792c03de9837e56aa15bfecdaae2c0c25b68a8e3ad8e1e06f2f29dcd165e1379243f8bff0b59095ea3bab52febec3c7e956f74d8c4663fa51491b1b9db7b7525aef56c5327c29852e694396ed6383504b10dbd94c7ba2e18fb2035940e8e37ef2034f00173db5aed73d3d0b1f32c73fbba29cd3f3ef1b406af88718937fe227e81e65d32780a16d8515dc320cb31bd0cb5aaea00b173991839afadbddf33fe7bd9f2fc0dbcb896ba881c5ae5e5b0dddfac7a5dffa9a8a5f5a07f315b8d95938d304015bbc94ea03c21f6dc25c90f991ba6806e65aef89f45ecdf4489ca8ca85d8fb8f0632732fd0623d5930b00b8ba68aca4645a46cb51b225b6306f1d800792fd42d42e5cce75bf96a0c5bc11110870c5ce8905fb8981e254ee3b370ed976d583c60b44f289cf0f823fbb6384844ad8f9e6238f549af87d816eae0625ffbece282cdbcc71cad5a0f099bd26e2774a4b50d47b1fd9667e2cb21ed107eb5aa724f45c8dee5ffb4d17e798122db254ce6fd380d9de1356db97f1e6eb5fe752f880ef3e68d44683001f702304a17c829fec89d384f489d0d66545ae4639a2507b8922bbb6a3adcab65e9222d9aac969856b7bb3c688c33d383eb75e28bba2baf6e894b9bd861d38367c557eda6f1f714794af09e5c24a06c9cc4ddeda0d71fa32444d21c7a31d354a22c11d4f190902af0e2fbe2acba59151b41116a4589776f74656dc1a223529b8f8dfe880cf0c84838203b8ddcb5c4898a10befcdc49a980c96b6d1fe2ced7c49a5b6c7b4bab25f8c9731e146e9f8926539424f9f7804c73bdb75e7bde9ce96c5d24ea3350282fb92f6c320ad4e00d68224be20609d5c6a4abd9c089e805fdff426b06249ce04c15d46c05c5922fc7eb50b8748595a2beb02e6321be81928c09e4ae3ee3946c117b430317f938c75f1c796a6b1d2d8f8b12bfb3f07e4deb29f8ae5ef2d4d944066605c1d70a3b4f297806c2241123e4b248da7ccb6daf584e581a0dd09ccdd09172a718c17d1c3fbd8a73603e263b5acacef90df0f118627fb4b23b469004ca590d718875c65e1181c069b517b0b65a4b11b5e83fad3ba2147b0157c342f069b3b32f81427a635d2cb634415f35375ba9bd7babd5f66b8fc33781e3e54a236737f02ba3e60dde8b04d87d85734830e77d2ec4c972613a93f266ae701b0a102b6c30e050aef52213b0a3a001d25e35762be22bb183822b573884f18cd307392eb711f8282bc4d09f96b436471aebb7903c840af487bdb031fc0ef59aabc620f9af0fdd8adb016c874d66cab5ab7529be25610d230d886bccb381250a13cb4a14ca870b093b1f48534b47b7ee128f1e688d258c9d7376a07005780a8b998b26f870140b23da83169bf6e39840ce9e0827ca2e13f4681d00d44850007fbb8a4a2d6633485b27e139b9f6a6e66e5e36796463073da839c00f6222a5c166d85d261be3616d2fa19e3435c12e2cb74fcce4a6fe2d642987242e91fae5a7c19e583d5c9e2ac401e63e88b7ccd5c5cc01d5cc77e22d1208ceade0ec57ac3e107c101267ecfbf7825436c998902a6c1d12f5a35fb572d1c68eb1b8e9bf45eef3e02927b6565162117a0b5950b1b86a1af1810bc6ee8b2dd335f43912985f54cc68e7ffc070d7be4fd640ca8887fc5a463c2c682603f280cf52d9c3ef8954ea0a74f10d3eb2db469de76b9fa8a962b73f413c4b259c35750b73d6fbe8f8d3394e92c8c259a2f8a57c2be04b298c87fb66af55172dfdc07528077033976d36acf950c3d1d9a79c557b12435f83b7d8b14cd4fb7ea7cf2ffba58c3a2d636d1bbfab3d969e075752d10b49093f6f91d153626083c44b76d082f470992bd56eef0bd497a5999b289892bd2ea67d15d10e6c47c0a29a518b6ea5956311c175e91cfbf61d7556eda1fa34f141af9b4ecbec665d83cc63728336de18c23880cd72422a902d8a487749e4125800891c530907cc141865a226e4d586ff2c71ec3480eaf223565900d086e2c54219d772cb0ecd281bfd02f8e736c75aa8e05266539b73fd301665f281ff72c85fcbff212f43b8e4d5a028ba2bdf98a3b6ac6e719328799646ec35aff40a009601b574c9f85e679cc1b05b786d65a60c98ef0aa08bce6877c8464c9bbf3d38a8c854ecbfaea535ba709bffb6346f9bffd006db7595e3ccfc34c31f483c0f878b2428ab84cabecfc862d199e61933d6f7fca235635a1f13ae3cd13228030759b795bf55bbc51 +MD = dc0465690127cf6bb6a066a8f400e64582e2540fb2794332533d37873f08dfe7408b2cba3b539138486fb75aeaf081229c525963c0d86efbd4c744f75496cef7 + +Len = 23992 +Msg = 5b5180ac2e0afd84fbe10116aae8ec95aba3c147450c1f9d2bda74a451036d9cfd80b1e52150ce23e8bf739a8fe8e1da76799ca177b666fd76c16db13918c4da7a5f10d23b6084555a500fe26553d364af43da12a4ad0494591d4467689c0c82fa76063a25410563791a3bb8d532ac7d7f8ae26274fae3abfd78608e83972fdca44efce487fb3b956ca760e2878c536b0ed41e5991a4e9898a5929ee35121430a16e589907970c325c7fe7292269b07683acf5bea0b300782749074e2313a3c6195e8321501c6284702836554fd2abe80797cf5b4c300fbefccf6277f8a5c4e533a7e644089224d1d12cb72eb5cd2c07c11f14f63a22fea43273a2325acd5fd717d0e8cad8013a62a613d17bfd651b1ddacb2d581591b572f1bd2f45f2955ce2ee61f07a67728b7f1863eb06ce9f60707923804983861b70603672786704a34fe0e3681d5eec016f4fa66f95d185e348c7b076912c071ae6a865d19561221d6614ddb77b6478837c7263c4f1ad1e8defecf978f7ba1f991bf0d2b5628af8b06eb3d7455c221dfaeca92352e20b7244ac0f87ec44d2d38158610687a9878d45b1e4597a883fe34c081e6d8130938af1c658e03b401e2db8e52388ad3003eac575d0ecbec664d26218f6c9b9a2ec6d7d86f08eceb34634270a5de091c0a41516039e1779e039f324645cbf6201bf23ce34ff190c65f2f0b60f38979920121822a37763139c654d7a3376d8e415b3b5ce18ac075c1ec96a4e3bdb342f1af6fbcf9c8357f4c391e84dcf6c9ba7a6712a637920e228a573a9d5d76e3fba74f8c40738e97b841d64cd837e6791147ca08a77a18331d7c399b5352b1b41a2f7bf7db1bdd2572c71870306898f40915ee9def1d6fc7dd140e397547f08c14e6bf42db57465745289a192bc380b328716f42db961b34d7de4f8561c1b5d4728983eddfba5cb59602b5b838fd204ef5f6a687fb78ad129457681fa7346435b974546946a982b8ebc205ddd66a1a1fd7f23eedcd3987e9990c0258c434ae286033cb45aec94ae9cd02f4ea828eb0be651092d4df5d5e126c7888d13736d614fd4432f3768e37c0a0222d7edbff969323be3ced90587235750976097ebf8e83f73235f34c7cbbc60bcc09fb31213e467a77b7889ebf76bb594b547219333a1dc46a4ed58ef95972765d04f020980a40ffc97d4648f6de2c7fba9eab75365b2b1b68d81acc98834e6641b8ee28c8ad0b1a2008972d930b015ee3df06413d743432ca8c2363deebc252369055c837790d6017e40bbb28afc27d337022dbbd27d1c0ebb5900340d566c09815b77d6900e0581d8a14800c1ee861360c71c339c87c3c58fed12942f2b447e2d393c6e1d6fc68ad85320ad1eb0b91780e838637d8ac0baec2772479a6234ea3347b13166dea18444ff4b9fe96748465f0c8933bfae9c5499af2a339624c5b65c2ce008b2811fd7e54cd2c06a3ebc07c4dc188ca91adefa602c42426d997d487091d1db4b80c7eb83e3bcf6e95b9bc479ffec5482f70e160747c05b65e8e709371d8b9377042228e66b112bade670e4441e0d75936cb40f57a7ae65c83a8861797916167f35b6f7d58dd946ff08c0cfeee184d524a2594d18f4134adcb6eab9fd4c7a4eab3a0ebe19f11d2f27e815ec3fef585e7cc1843812d8f8f1ea8594778c3fbf22423cafe67a3ee5ce6db0f6a5fef191f6e5f0be380cf9644239ce0e05eefaee798e6223d8c01d370b1885ec61f58e3887a5578eb5d0ff5f2513bae1c9eb240f3dd5d5f1fbb3351dce72917e89ea6f54f8051f7c172493f282be71942d4a65285560bca1b61b2f9effc1fc3483a63ced314d7010c6d15d2341831aaf97d56743a97740bb73bfb2c2864eee96b8f19c0c1ac571d32a9f04fc4aaaddba7152cf67216189c8996867924b618e2d909237b79bb54b4cab553185857be33e228a489da568be5090def515364204807453b6f99c642504b2bd8bc5db3e54c3124578ec1dd207d9bfe9065430387917cafac1d7051b2881a59dbbc4323a58cfa94b075c71e88ded90513f551f8c157bfb50ff5bbe227c4deebe688a74b815ec4f639ef589f278136add4a22ed87ff33701d198cafc148f0f3e83b208700b6a16c57e5c04d38f0d4b557cfc3806e60c79029b672c140b4f01ee2db8d555a617668ed83c4a6011cb6da85753ec28c5fc0c23b7f16dae6ead7d676f2d9c40e3ff4abee21097a9724433f2fe59d992825a5701d1c7fe3fc0f2c826a250dbe6377a29d216698b34031034d1fc7e8ef89d9fe019534b5c5ca4e788c871e2f2aa23109a750fb7837456b7d6c1cc225abf8a454dd6c6fc16698cd425b95854aef1497af2f4187b1f0eef93905ed7e5eb5bdae2d6c6a77aab0aeb412575c0163f7fece1e9fbdb34cc48203bf7e5ba49af5201e141556f1788a532c70e8a33b8429ab01de5d8c27509d4bb398412edce253691c8e43f98834dbd15de57634dbb46d625675d3768ac5628f2f4bb42ecd3db7dfd2255b1ce2e58d6e6ef869d588fcab6af56d674384b4fb979f60412220b309cb6660c685a79387738732294fea62cb0c074e83babf244fab2c5f4fd47c4c317500c7ecfd8046b128d21a1e6aaaf1b690b49e8ea5e01d4812fed1450a8a111725c9e3354b1507f3d47438b1ed70ae523e23e7f0ca92a7cd163c3e8d8df209a323e83b0a390ddd35c0981448a2e3a3885d7db010f17bcbc7fd0e2c8e255b3cbeb68658d18d10d15f3564374d4facd74137e98258e443901c109d25b0996db34e28cbc0f410c8ea5979002826bd7352631290e42f6a93ffb59711b05bb3d1753cbfdefdd98ada300bd4956f3db4df1dd7379a5efd4a131e7ada9256f7392f8a71c4e897eac3f1ab5e904b95f8fc983f86ee2e782b4d6af75320469decf42efbd47e10148d82b36438f44921c15c47c0577f74bb1f3b409229b35810a3ac77cf4c377ffe2c91c8628347b89bff9d94a9313195ae42dc3ff5e2d9ee348229b20ec3355cdc2eb6d9ad25d2bf8b19872601fe4db9dafcf70d2a68db3193f23286c120c2d037fbba8e4e08dd877a79e2a6d0a51b07c5b6565239a10148b45c919bef4b240396fb648e4c12af38f08676bb1e0ee3a8f9d6bfb72877925b1f260c9aa02ba31c81967e82af2d92f973a80b0ef421edc4fec6fbe301d1d8945dba6c2bdcaa89448034ce118040ccf28d47684659c680825aecd280cc961919f57e78f5acaf1ca21c3d1ee4c632a64cc5cb560c56e5e60a97b20b338fb09e126fdcfaa11723a65fdc1934a289ed682fa39d9d08f26665853c7f70a65406afa8543bb8d626ec6da24930d8f4d1585ac2b02305e13531461bd2bac781228093022a027c3de0f3ba94e9ead482a75bc42e73c65640272ed1f3e0cdd96b0206944a7c9b0c7e4d20d45c47b0eff312deed9a75ee57ccd1464d36ee1f6e0dfa80f8a5cf6d3040755c0524e8e8f0f01bc91e2f3c04d12e3a5f040b85184e0f15d6083dade0b22b618d931156fca020c9049f15526e8c0d6a623c9b2c20401858f10c3a9d5c59e8189cc74d1852c72c2478b8733f9650126a383e0d6b9f0dd0cdb74cc42849ec1fa272e900b6542dbb340bb17189e2e5e541c7528acafd7de17b110f01d40f347708f54151b868997602a6d139babc122df7f9bf3ad2a258f06ae79f1c2c16f999510f1669a7f8d404953261f0598ba09295b5cf440af766a8a322423bb5c7022d85a7b2700b6ba70ff595a9c1efb758be22e2c8d1fa626fae2da84187f98819daada55b8d6a29d73c2bb9f1d203a8ff56a66af3082b4c3aad1063e4277fc20448cff05ae84e9a2f353e84814b1dc560052a349812241e904b553a7243cfde8c20f672f7aa3e2676a236e0a055c6784271b428ff166d3e3930031435057242790a271279fbc335732a1cb4981884296c424f2e6f3d8f16fd0522db7393ef5893ad6cb82a02642fef76f7e8afbbe23ea721002e32af110ca472bb767515ce87a2b2cc4c50e8a97cb22ecf632e666520bbb6d1108e937b8af51ed4cd83b498366dc050b734d41a8484f9ac0f5d43973770a8c9bccc1156f7b9b278c8e497d4cfbd80fedf1eef40af2d7f97d38377ffeb8e9ff01b335329bbb8d5ac4fe2e80ab95a9ae0ad5561a26674699797e92d25a5dc454f130d7e7c3eba307a4ac3ccc25c0cb5fe092351c80f235fb543d88b92cb233fed8da0bdd8e7876be9a1d06d85209b795edccee73b140008f8c0 +MD = 950233b2ee76ce1943d2c6bac53bb945b5e9793a41270cfd8607028df5c09be1eb311ece3fc5f58be0c5e233f42ddfa1b63c61326244a57c40a7e4df6a7e7f18 + +Len = 24784 +Msg = 2b8e5b85086abad60ac3cb887d0b4f2e3a06045a1c75bd60b4f2b75c3e1b2b76d3f22064e0848331d6c9793d23ccf486620b8525ce21711cfda2064ecb472fcf944b475ea6142b30f51693f011f5a20356e9bb10626797c0cdfe94c2147f5013d560777c4262d95cd072c0a72fcd802f7f684f22c18f57d48bcc0abf000ab6c900fa59c59cb6b63bcda5a86c659eb7914550e964d1e1dae1a1d50f4e793288797ce194419c58ea575576f4469bae6eb1116830dc7ba4486f76e14c76673defabb1ddd1f82b8f9c38d1ae4c3eb947ce184979cd94a822c90472b8693fb07412e807b6b8f32fa5f464a715575aa7afff4d574b67943ea1832afd210db13d1f1ab7e633f03991e01b654173bea44d2e28d8a1a6a7e2276aa1687fe5e0d5f6862ea1b61e22d23a8939c305902824940e71429152358849c5494660cc8cb2c3f0772ddf3df5c711e775045d343ee1629503128d16b88e8ef9a44d089eb6508da71ce3c959121ffd44f8b2b026a8e3a10d06d0ffbcd9fadc50d904e02308b83af1464bdc3920e2e8e6ea54652f0d3237bca1054e0a3fd61d1010f44e232af1b4171dee81a7c818b9167273e61716d70eebfd38e2c9922a388273a3bb65c403e160c8531e69b2ca581cb8969aa66ad90ce142f123c07cfc15ee279b90b27df7ab1670021d488500ac40e545e9a3b2401be897b879b9a3569c9c576433d2fdd4f97f3c84e40ceac09fca21093bd89514224624164c7aaf3fb5d329840e8deda2b2e55560dd7d881418019368f80bbc5e0844129204cd49c048ddc58587abf56ac08ee21e6e620803002f64ec8805ce26b72a89b5097819df3d0054ef08f3bc330ac30c47018511953d9abb1d548e74721640b005c343c6a67c85fe48f82eeb0578cbfb62fdac4cd3b88ac182c26e564c0dcdb00c9bf8f91dedb4ea1abf2429e8f2f0d6f7caa060c459499ea33b6c1bbb841bb152f75d594b79d441ecc59d1fe56078c68ed029f671091e790828516bc86370da5e403c8f38062f2a4771617503aaacf2b0760eb6e0ae507a3aefe5f079921553b8df5b42ec7d0bceb22d37d24bb9d483e42619471b3128cbc0faf04fd8fa5245e83a821b70c7b155b561e9dec37338a0b34810522a7bee9122af3a33ed816ed876bb7bc1cbca69e6d8733d4275c11f72a442bc7e1373eaf7e9788a42bf10b333ebc90dde05707aa9a4ccfca6698cd3203f7de574e00063229cbcaa245690677fcfcbff1727a02ec7a0d4eeb1a6ba9ad30c6153dc990ca33dc3e26082bae7d3e3a82b1a163742cb6855f3da0c3434bdb39457cd5d447ef06ee6547504f4ff3f8800502683403d9ab34992895f1be383e75ec51d9feb3e93dd8e79b1510abef3955ea2eb05477be3d10617c45163ae3698f214094b9533d4b442b9db12070e36334b89304556e3eeea14ec518a157c1cedd9ad5a094b47fa188b7cbdeef0d6528a4e6dbfeb745d0225f977f8b339377f0f9af6d78014614f33f02a1d8ecffe8dc1efb65e9eaad168aa3f228374d5c6a525bd594a59f869192df92bc499ab6d3001b6ccd606ff2769a26d54b874f311d758cb3d793bff48a12e2ee87ab88d0d82712c18eecc7b474b350c74615c9a005cd04b0a2ecf32e42f5d18c706937cc5cd3ad8007098261a568aa3ec44d3d37b7eb4c5272fbd98260ae23e3132d1807d578342ed22110986d4caba232a82a56a832cc1fe44ac39f67ce6288fc41ba11d6a75f348cee02b740b1cda81da1018b5b462c8f637441e3dcb915f478518e88e4c3872773aad94cd44a9896e1e263444597b6177cf2e4ee1400a6ac33d715cb645f347e42f1f4d77c7985252bc6c02ffbaa215e9d312d1cc237ad169b4cd067e9fcefbf574de5d5cdc12ba957d8989cf1efd6bb50c97b0e4bc081da3b1d5eccea0f21514d393cc63cb3f4b9f2926d19acfb4eb414266f21352ddd5d8fe31188f92871da812e6a373db468cd988eae34a13f01df63c279f402f20816f618892a7bbb49c19fa7ee976565005a9617ec6c533d98a3cc481c05399faaad2a382600064a219ce5304a65382843f787e8982f57696b97ca01c5c33d993d7688cc88c81d4791c31e51fe2f2a80bc1afa5b420c02650321c99a17bca37129099e3021e1155602da97778a63b0f0c13b49fa7a710892e7e8677b825fffa9f5dcd72d81c9a2d7fd59ed3b6f91601b0bef134091fcce9592420020863ba6c64c76cfff09003a5ff9b78bf82e46bc41f49cc2b8391dc8cf8ac54023a3ce3d38655de53f58134050808a004846e22a1803caf4ebc0428bb349f893ef5b9637830908c368df81495c1a37c6a639f23e0fb2001635d8097bd3584267fe2e120a388fedc6f60fc8d9d53f475b8c87f56c9ba7c2a330d0d13dc22e3958da9bc039cb62937c817958664e683f4b85a17a3a4e2d8928675b4845e23453d30f152f4aae39906075acbe833a0d95f30c26ef3b89ebca1243c7cd08c6230863062acdc1637d4aff5d0a79952ac7d1fe9a78c2c4e14b1bfd40b6ee0ae042fd854a5d1a129d9649c5a2230820930f79dabb27a38ae6c3e545f8a909c0c34c79b6562c92d28f2d133fef86f8ba055d0403d8b3ffd20cfecc88e60ececed1882372c409d665ea9a1dea8f86a9d5e428f6f69d9e365ec65428327368ab99bd8e7156ee8543612275e0422cd2b9e8c20bc94f5446f575955c8edf2b370e95c9d7e9bf602f6848b938f0c321dba787216df16aa76eabab0c8066eb980a866798fd0328b358c371216bd60a1911d11584d815d50145c783ae5856f42443a163ad56442f4291c39efd86f6736d05e5386ec29d1afc9ce783cd5cc5656a82ce3e698c234fa87b1716a002d89bb838524431c60da8e3a46a201bf638dbd5488b4c7ff736e65f750c7cbb7802ef651986ed905ade0b712cfded0ccd37a3fef56702333fe5afd2003235924eebeb1e3a1188ece984bf0f76e14f023a387a4219c01435beb5f89abd16d5d7001a1b2e0a70aaba0a98302922d2caaee5b1bb394644e6fa0c3e4d33fc38d1fc24140c2f1b32c77a269f0b58a130e4652849d35edb53fee2a0d53a185df6ce7433501a8becc663cfd5ffad08728a30c79a577f3d798bc0a205113bc252ff0fd1a654d2eeefaa040d8140a1d3375d1438b4610b2f813ad09aa188cecc6bb02a871598d1a2945c2cd5c0e866233018135afefd03df831fa34f2e826f810898b326d9a273519b6b429b0d7d86832d59c280e291f5b80f78cd31d4c49aaada471e138af854764545e9cfef766f7d6f70865d07b65d3386f492e56c95dc842119efefa200d18b228a8706bf49ad7c771af341c6e0a6ec7a01a8cc3e9ca1b7ad9f8d0da76296fac387beb2158dbcfae4b77dc1a8976f4d692e7378c33f86bfa0569a101384015f98ebd5748aa90a8338b4aa7f454122d0c4e9975da2f50806d9dd8b797eeb9d3423258fa0773232afd3b0fdbcf5744e012db168fd566382179a72c5cc320fe6f2f2a321d873afb1db562aec1d61b75d78f4148cda45f1918c62d4fd5ad5776b167803507f087804902090ea12e270ed82c89167670a25c2bfd36286d7e1a8963933c480269e31a768d3719c3020375ac91ba67d460b86723c6cb9f6b5ef29f4b5a6452541ad4316bfef4b66e7838141b65dc252d9d28a4c7c8f39c167466203365023d462ce42df1fc48cdecb84d52ec50f837ca4e7a79e1acb607b8e9fe74e15c1df020c79b76d02f3c4783ebca96e9fc1485f39c375037191cc897e442041de5be532a128074d040d70a7c39384ad80e3bf7efafe69093b82ec8fb8ebb36b1abec4eac361b90b8d722ff1fc91dd58231727508ae0fa1bb31f3ed2e0ff0736354afc9ed5bf430529b230eb3c4049faf0bc3e784c13beb772b7320778e6924fd890fac36a794be6435e4208251721026443535ac12f0d6914fb74a1d33afaf45f115dfcf4582a0b74c6d1bd299f190b185d047c8c6b9cacf44c6516928497e0435c84a005b46401389c4e9ecc4088716769d0520081b2ffbb2a91fa392bff701fc31d6111269044094f37018f9405d1ebea358fbfea06ddb43669a139c9a8406ef5669499172560514029a9d601f7a9105eb26a3d0cfec389d07ac006b618cd9b641ecf101e99d2bb2f74dc5222f4637f57b595ea73014d968933cb42a9c7743f8fa48518956407b15dc73d667f82ad8345dd775ab4c4e884d133175ffd4ac0c5d8763b15242a9bae5b8f31956018c3b6a998a3003aa000bf38e758c128f95fc8ff2275983353fb3cc94b5d618d2d529403558d6d8d3942b040cef418c5899db33437b9045b56a2d7077a155d4f36e6a5d3b2bb1514d70b0259687db95b42070f48046a0c04c92ef79699fddb3edbdc6 +MD = 9b73214f933db062db8f1b46c60c266962c8071bdedf569c0e870c54730a0f97e200d199260a2988a651524a2abf9ecd8dbc831762f0a784f830462539ac24a1 + +Len = 25576 +Msg = bbfe3d99ada802420cbe6471c21633c5bf6e801d3da50263492bb8a87fb6d0761536c8611b0cd3e000767e5b594e9385def53decb58a6ecff45f7e2f61ad15287c864a82bf0c0c8424e1c108e8de2ed58e08972828bf2794d239920c7f2ff83ff8d60d24211177d57ee577a0f72dcc5bd88fd4f91caef55beba13b6861a54260910e576dca84da7c196be64a0ea335c2c3723d861bbe9fcc4880c26b9075bb355017718841cbfe20fa5c582fb6a830b058991af8ac57ef8ef0bc6f3c93092b663cd7a39b0e50ab6a2b9e137776a486ce9eecb37658e1ab4aeb3f8a04f2c75a9b5d3734cfba79a801b31b6049d7ffffc39d544f29a5c49ca742ef5bea3619107bbc1f6e4bccb0bf8f9ab986cd602163375db738391d698a4efcb62a17e66614ae60789738cc5cb6b9e862cf2d99737ad4e7ffb4cd48363de6217b3eb38a152fdd5228f8bd42e45629a6fd818e0a5b0c3f42120c0dad947c18ba26e0e5aa9029b09819d903b7b26787dc72e51b3c42e02376da8822d4ec108ccd9e58d5cf3ecace3c318231b32db17a90a943f9b691bf268c3d6f3445a4c2e965cdeeac8087d9e0455a3a70bcbdfbabcc89e35300ae71f08b250b6a892658d7879aea9246d3208dbc7b4ae85cca0fc297fc0c4fa303be2a7b79a2ed27d89a003ded93aea88a657ea87cfac01abcb366faea071526f66e7c64217de5a72452098eae32292e14715a114492217efcb03ffb391dce11f1488d4f04e4799271469d83c50f2a60da0cca00bd5a3211f0cef6a5d293a2ed5b1506430c1ed16e263f62221b72dac742fd767bce9a1c5a01d433fd9db4b8409c9d8e49207516c6ad05007596a361eab50e058d5f9906e2978c9d0d82c739951ca8ce68282f701f6d6020841fe9e6519c05203b59a0192f1bbcdddc6a134c7142fe6ea80d950603ce186a559f8e91855dab6e8fa2f77ccbf32d9b723be11a5e78661511b5ef01f938f485f3fcd88b0d62c8989023e6583e89a77ed8df79cbe326aa6bac0985888a13be1a632010fc7111244546c4b5d50e44f22e153c238689b2901a80f19ec43cc73cd0aef17d0c3ad4861eba6eab1ac58bd554313c2773d685e1c7955684dd9abc3750dd5969e1ef12b8caf3071150eac8199835c6ccbb5407641cf41e7dfa295b7641f83f1aa6183280f2f9782f9e066286a128c15c868ba0e3c1a433d243730ac34c058ad9813e9ea73ed5aa4d2da0c1e41812171dfb02b9245ead7bcbe1ff32e4190e24ee9ae8bdf5558e84b325404dfba4fbaf584341b8f19a18e0affc553ca24f1af4a11a9ef731e02ceda9ad6f6e93eeec715485d007101dec49c8bbfe8ec59632e23a29e8b42586b8cf76edb38c739dec455bea380c4990319d5c47819215985dd600ee4f5c97f03911630e970f645a0413b39a0031669bf0c6b4c866af5afaa3b83c925a5750c6b79bb838a05f2ecd3bc3a5bcb0dd2de530ab1865364c5b670c70373c920e18af3b55bd9258e4999d993d7979d0776817f934cf4678d3e185a1e736157de7b653cb27b94546066d73266977f8e969ddd853492394b4abb4fc69038445a54bf45b72f9f678f22e71f6eb30e762821a55d147d25a77723c9c756cad68f392a3986f35b3ba54e5c26ecfef7810de24f297aadcb7bd163bee6198b3ce2948ca556b361e3d4e01a62c2ca53a2b3b9556596d0a1be0949a9629ca0c454c106bd7cb3559347ffaa6bdd27321d52fb0aea0b79d990a36272a0c55a07a2b116584416bbe7f7f61056cb31e0bebc76eb7528a74f000b49fbdef24daab896b0370bd8e9fcd5108ccb97a0f76bbaa18ce98a99df82ee71e04a0116620b3e20f0c783c48ce2c77d6a65cf959444c06d1399ada60ac1ff5524e16b75a90802c1e13c729f65fa198f1d937101aef87a9f996060e5cf68ad3576368098990d910a1ffa3ad21bcf55c624b92e8d8df313898cd246c173f3929352dde307a8988369fba55f0504cf06d30e6b5a81e7c155eb7c53c1d1bf0f29ef493bf54b5e45345202b24190b7759706390e779712efac15c689648f06f7eda9d7c559cc30703e62d3a5a50dba5fa10043371835b5da709929d7a161c26a58638d2e6312b5c60c0cccf3ebf463e99f31ab69bed6371e5df5e4c2faf297b2e4acb7cbb3b7549317c08d2178bd6aaffc1ad01ade012d27cebca5dfe3a9fd8e3cd60621ce12a3840c1e62b2edf1352f423c6fcef83eee834d4ddb92fdf04a48ab8fe6c504bd190533870c3cbe1849c3fc06b8fa9ff811cd5429f460ac8e247ecb2ae82a1a2f2b93388ad8035b9b1f1aa42a7a2227b53d426df19edd61ac029d164778c550e151ba85aa54bb69022bafb4e7f1da320ea79f0505297dd0027b201756172b5b6c31e7956610d948e605dfb8ffde87415d074fb40522a65a09e4a438e741c09c3832a7023e8ac18daf24472aa28ebdd838d2b0f552290b722ad596057b972995cdea7536a42128a9d60d5284a080f2692a708f437c9af1bafdc472177375dacaa5bfdebd2782532fe337ae415a63a9669a872718f4f71d86fb47c4b97f6c38cd58294000491cf5726f29a70b30955763118d15005bdbc3889bc60a95eff8e7f04dbd45aa795f6433c259c92cd39490e117d8c57401a7a81257c5b027559a4ce5fef26c0648d843c6954ea130b3ffca632610d4fe96e92fc6d7dd61d830cefc10f45f0fbe380608bd508ebba14225886bc4bbbffa7c2ecf1874637c33121559f3c659bd4cb767278a7c8075191ea44f6d6c4fe31231d70a89b60e8bc279fc0b20dd89010c577a24a081da69e29a0a73da8533eab05870668d2514fd00c8e1740ab25367a788cd84b1f8e306b854b6ba45b80e336f408967b53a3d6c789f742923ed4f4d98dbcfcc115a30d7e4cf3777317d3559a98a9082747dde46845e128f0ed6e34f4ab10f6f511e4a69f27a0b3f203d5fd9f9a7144b5d688e07ce954b3a1e07a5d947b8eae2f3cda6198be5b0768480d410da269326d272b34cb1c58caef4080d781a4400db7bd0ca730b82b5b1f0d038aab5797bb96634e471d87f6552035080983cf2ef9d4bd02e12ebe19975d7b4041426205c579b17a813ad1353d7de69b5d62a45f5bcf6445755b772ca36bba4bcc9a6abb395f3a354aeaa31e684e7cc03ae5cadb1cf0d95ccd7f8c6c6791f1ac957b18bf008e260a0af4a5b7bfdb1e0008d6eaaa227f45cf4f62a4e1cc1649ec02ad141b004f9c7e29217e0a2a6bf5e230fbabd557c4cf2765cb6894b844e9927df705d723e9c41b0f39d71f924829ee181cb662a207a0eb76837f8c1461f9266d2394f950a6c768250457fcddb8e1ac2903b25cea8fdfa3e95393d1c9b6a3313af7688b6fcccdedd149a7abf50445a5cb7748c819a5b5d82801496cbe8b0d3a4b3c2a9467a4fd337cd26e34c0747e60673f20b016914a109a554b64da285fc90ab9811d227680c18f65559d284fb4656324e11bc99bc5d6a71941c107d4c266de38162d878a7e1f70cb04f014df0e3d29ee34121a0b4fafb713d28c2cd85e9a2f7f90cc7e271ed689cc22356b6ab56f1f65c09cf1280f25320ca7cc307c5aec66589802ef96886d412f57721739d183af502ec1363b2ebf81cd6889fd08dee5e989d6d8c220e56cffbe4db1ff94890240792589d18cd3060a1bbccb7ac4140b21daf155df0b5d5c2d3fa9f90bc2057339a64efdaa63278036c14b9b8ff822e9761592822f9f17c4327b1653230d6e5e04a05124aa0852b76d85be0024eb30045100606598263c2c763a3ac52fbbec4b082fd507b7c27b331831bd0321e667e61865040903e6f31c6143bd5a1715a6c3ad1a82acbadbca7a9d8befab6e31ee16350a25735928651d5b604817c363c54d5b2b011d9c996816665cfd00f414ee1c0eb76cad8034b9b6cc5783061ced70727a28fa6243457d8fd96b8e0a99d78f810d3680be625218701cf1152e08fad0b972da14819926306b60824bd246c1f8cc984e0baee6caaad2b3f6a79770d40daaac09f8848586aa346267dc5fe41b528519c6b285f3e39664f92ee04a3dc14ecd8e7d4e72eeab137147e3e8b9592dc434f7671f4c73e705ae5761694e550abbab81fdbd54bede92ab76be17e98f3f77629af9fa0b4d1c1e393356e9aba2f77dcbee53ed31dc674f6959c013f66c9993966a44eac869cb0a8cf6d6096a0bcfbcb53b458711308e733357b181e8da833f59cf0f988daf3bf02f09a9719277dc9ff2d29c33fda29b2691d8580cc8c044a3323124ac6107b6f9abd297c82bd0644f09191f98fb1ad58f0c447e5a9d0525e8a9f849cd4d59824d87bb68b63efdb0f4827a985f168086d72b04eb136f936e36468c47a3578de8134b2be3e5d1e608b5e65bcd2f53bcf425777e67e0465167b49255e5d78a8b3074808ad1faef73b3babc2688b1bcb667a2771bba692b27578b14bced11eb3ba297ad3ffaa09d8cfb2c8c428f8d58572976b343ab5525fd88e2542725f8848586a55ab4267de5192633df17aa6a2f8581c8b3 +MD = 096a0d12871ba1ec81261a8e8b5ab587aba950b91580286aab0759586e04630b8a9e6a05a2422768cdf77645d2d144a7f7a3b8480968a809e7fd3f832fbd2424 + +Len = 26368 +Msg = a5422e53975e43168726677930f6d3e13281bdbd13c67c168340ed67e45d15b0093208c63e6d09ed898bf2a8304bd7d07b62e6e4bb7091a08b33f0d156fa60671a5d71cc6b2cff74baa59eb6d7ea3cdab5b201736e3e7aef868ff76c74d631cd5e2c300d25836cd4a1dc33482ebb4a2667d8d71131187e2afcbbcbe045d7d00a5f050f33745a9a34c79978093ba64bdd193e30670ee6e779732134d6d1e68445a551d4e36099cfbdb242369e08948526544bd41c0c90fb057528f9f621ec97a6b67948c7f2285497ec4135b29d6b412a9e678ad933fe03f68938e4e73ccf4f561ce3338731ef71e9fdfc3deb0015c71082fa1b468c19467438b9bb522a79f57d5ff95dcb26d76ddb6bdd16f13b785f01856c500a1ec70ea6081347def4d0d04205228d3ad7c69297c04a876d567e51253126efcef2f1a1b483af5034a1be2ace98c58d7c4ea5264283ad5a07570ee4a30d8ec0390e8048c731f39efb392a4949a04c233a935d72073d6d5566480f62a4a10d8df47c5a4b079948f8dcc5fb76daa31e181cacd4be0c75f24133306b114f760c1ca64469f29b4317277f4c1bf9a92ba333c9a3f45279b3a4e51518093acd13f136f86c9385abb7c6f48bd6711adfbf433eea80a4757780eb0bb507d124450025a392fec24b617ebf24a96ce521a4e866ff2649cb702e622f79ba05ab19e0c6112b1b01dd8de31f688280145f551f2c74402608538bc5e3d8f8cd1b7f5fc6ec1c963c7ecc9359222bd5b9d8c7007916d5c791c4230e648b4e50964f353f1efaadab9c7c77a5ec106fe4fbc00568d92bf15c1086234135e1f949bcabb50110792e33e403c60bc36f9b78efd302d568f531c94b553b6c5d6d42abe837e7edc6f006f7bb1ca10c08ca19593c19a4914efbfbd5e93953d607b78f3dc1fab44b65e79dbccacdf0f2e0a6504f8b9ad4e3b2c5b847933a53c8594849c8f0fc026218e65b4db8209b03758da822845f7b12bcdcd1e8f061238a7ba7d9141c45bb7b0576a8712e1d8a88ef068999ce6f7f6796c7ac80a9b5ac64965ca5e9eedec5de541eecefd4cba5c8769a5b7e12d2ca2a650eb3d7653ed49ed2f0170f0ece0ad32e678f905132d50d30cf8697f79142a3543a4db4cd05847f56ea964d231d70a2bbd8f91c4e5a009d483072ad26b3d11988d2e1e08811a5504bd2896dd5d3e19222f9925b724c0fc1e442888746405ed62c5ed9243f6b1d5ad8315a35cef944ec8c52c314660febc12d8f2eef0041d02066669c469a19d6e2268d706eb39780f9206cf211d1ab7ae54a9ecdabfcbd11405e73920e4025b6335d7133e02fb37ffe07ce89185c29a67563f7ce84e1bc087e3e0c2346da96a794a4620b52e85728466800eef2af9056b8a223974258469d212bbab7b40f75904c23ea608d868a63186c8b8b6771e872f72da992ad0864b8734f04b62288c958a403909a5ab25518bb3af6c63e4a39e17a2c11268c9a1d41bad2728856ed9ae9e46cdc217f14be2f78fcc90941e48c8d89c8e4baa9b57a203fdc8c9518e5f12a5485575ec453d09197d78dbb36e4e85d6c28a8b8ca02813e4a93db463218d5033b7788b7f317902460f5c943e6f556396a76e887b8283c812222e6016a2f4e5ce369f895d20a08d11a7e050b19bddd09cdd7298f3bd0b3d211af352f8ad2641d92842d612bd23f810f9ac97a96e485b5db75f5381aa2ed1a5d63513958a8202f91f0b181c4173d1a856f9ef827135626dd78d3ea1f45f23f4f65c1859d5a897828d40c5f65820b85c5280bed92f259421a084c0d1062ca2b2fde0d7d208fa7e19e58c461d8bab0ab17eb99c1a02895f2dc4be709b6a07ec445f5be88abf083523da663f1e4683473c2e0cedd195e121f696c2c46d9a814f4d8d35b0d042524b44be371765034a0c4103135a7c53bd9af0b91a32d412197a1329f6c76f4d593ed113a7458e5c5fb88470353886c68f18c07e3d524b5b40cb599827a2a43a8d6e7d7d1f6fe6bc44da6b081b2e9d58c629ca8894994ff097d1756a40c91b948f788e5d07ed2aad89e0693d0d930c95035c935ab87e6e5c7f1afb12caa131e5afdba8260953b69aaf790381b50c7105c71f9f573188030977165f142dc183989f164f7a9c1a172e25f2ce688a01472571e16310783cca820042160102b08d37ada6e8dd28d6c8b27dfc2e73f5081b7e94507328f5030140bb2cb44bb1e4bb4d8c0bf89037e057d217e3a8169e874a6bbedb43d3408163dff834be66e3e49a449ac4136661ed20f79447cfd2ef05708751e059d1d32e5eca580898e4f116b6b75a4dbdb20f43c0bd73970a3b5f191a5bfe0e298745605e7a5b06e84862117d006b375bf5c88ac37e266ffba27738a453f3c33785efcdef6a61ce00f3cf6b69da1def82b4063885d43d20f8cabfcaab0a039e08305add8e350cac8789916b198f02f4a67f40c3943a285895f6a1659ad88e0d10291f05b754cc40f08c40b6e8a9bad54bba10b28b2a588567c8c48ff06a038ef3c2a4ecf7342129b04e65d573a4a60fe6f6fe9bc71f7e25c2b381a04818f49207bf64e9ca6d9ba56b72692d372a45131ca852d5c4a3e9b85b39615d0e7fd1b4d0520782ad6bac62768ad3449f85187d3150c5f720323bcb85ecfc0cbff94b75f24ce54e1ca8d3df55ea2cb2395fa0acd992b0865654d4cdd720ba45e93f9243c1d296b2a4cf928aae22eddc81147e3089b0baf9d386553db387147ef69d76ace3b58446b22a68e2d3c79f4a034df196b66d3dc824412da9cf82a33e84bd492fbc583670d153d7766b4aa9713c66bb4dd41ac177c50fde707fa5df0afff98a2ad02d45d79ed66ec3d92ea4f898e92bd4873bee9f326cd8504853304ae4dcca5cb3b71ad1672c8f39a1d60a26a55fd3b934530d94f8c2bb97be2d4f94bff18a03db982df4b6c0c97659e351a1ee35336a6ff2b70f84bbf8d545a6757f0db239debc1307c82a2d9dd865d903f0d003db769e9d634562b3008773315a404ab96a3bd9ea20b22ddd8cfe5a29a98a07463c4c44a5aafd1f32732cdb5056aef3518bb9b96021493e5b1746bb57aad3d066c689f6cde69d26d4b143c2a6030184252ec6df3751f3c820bd4fedd59064e8001a8e2958be9bf5f45b5add84d7fe999ec3e1bfb25b5877c8ef887645f2c39a8c98e750e89b70292bc1e0908f5dec9048db98df73a5ddb9ae3e7ef90b3a668476d21401fff5b01ce595536037fd52049dd66ab2edca0a0a5b2a91caa7efc412494692b0f155d26dac4641e0e14ec5731864c5eea31053f66a247f8f9e7b72e09e76f1f28f546d880a452a774dcacd4842d738c7164141ea25cc86ac7175e95bc0d3a02b0c49e7e86a128bb7bfe9c000a7de41e0d9b55a6248834595a3679e006afd2bef0adeb82b564ed416da345438a1ba6fd03fe513fb3cd94affc6b9076af75403930d6b74bd595a92190f22d06ceb2c10f9eb78f5216d3ef53f2de2cbf7f068b5db8678941aedc65432d14deaf9ce83e3e25eb974516434d2d87b8d4233e0bbb10cf89eacc07df288f8b30e0a8bd652471dfc5f2827bc5b6250221110ab32bd93cbe636154aa49faedf46fb957f9d27b90156a276f0d003323aa406adca70fecc8ce1f76415dc0e345aef9f32617d74c821005be76939dcb0fc93e6701e25ffc9c44e2b1fbe9ecec7f02f5157ce11b9e3115bc40fed74387d1a54290e22cc212a06bd79bea16771c83388ba8c01d4779846fb7346e9f9b6d5186756ee54de034bc8a23bb77ab067c3998e5335c9402e563641f2230b44d8878b6ff88730c626dd8e8f19908724412896a283eb70ef5ebb63e1c92abde00dd2c7c0766f532f0c2dcce67be0731d6e85cf57f523953c8926543d50d47e45c76561fb591d187313db084adb1dab16706988210f64a2a22e359bc731a6c900b5adfe8329071d3cee53c52ecfaebba9d72275903b2525cabe478f01d4282a8b291ad1fa6eb3bde6ec269804c22a0142036efc2810eb9b20c9fab29fc0cf1f5fc24aa0c392b9970badd1d55f4b06386995ada05b293e7f1ed1cdbad3800223f8e1abcf611d7f2505a3d411a0d2c9bd9b0e4cf69bdc845e4f562eec6f8a67b4e137bcd275977ad47f5eabe18be1fafd50cdeb537ca353952cd79ceb9648765e9314fc4e53794341d33ed7a9430100942564f76b803632c021d6961d1a62a49da909f8979d3b5ee9abe4d5fd98a8710e83540f9318ed987bd8c3a9155e3178de7d972042b566243853b12542ef50c2c8f52b826ed931fb04bc2f5448c46d79bd9b4d11d42e8239ba8554540da9928c5fe54bfe5333bbe117468a264bff4f1d977c8c3bc08b0815ec9b2ed0d269d6243fee45d1e4aad3d10002647d83718edb18bbe50c9c3d703f4b1fa12a25a2a430f57aa9bb97b122417b6a3ee8839d8548adb3d802cbc8432c628d6bce7be67528fd14d809e0e92fc8d5f889e5c105cadcb31ee5ccd3be0943af6eef4c4997d172c337615b64b544cdac37c603c03cd80de5379eb948713b3b9e2e9c12135931a4e47cc61e779819c65aa283b105953562a0985366aea4417acb56f2ce6d8d2e45ed3f86c1ae2407598dc3337c05b15b5171dba4335aa9c4679372a3cfbcb62fcc2a0a13e38ccba5dda20465c34513c280d55c21cdf1042 +MD = 4cb6d5a4382d4ab1edbff2c1fd938c982fd4270d33c42bafdb00496d860643e554a9039dc1d8ad1a6004f55874aecd7a73830123dedb3b42aa6547d6f4179ef1 + +Len = 27160 +Msg = 4a96d520d8d5a54eb73f8f558e328d1b3e5ba360161fb8444739a40a97a58a1b59bd684e9ca3ec66a3de8add9548cbe07627e89a569a97b5c837251e96f2c509b3402836717d4d72f48b9b60e7bd2d796df36d525b06e41da46650731501f75142673c60c02c7079948eea68ec585af00d075a108d2a4685c20f4e907a9bc9f9ec7acc54ef79fc836a2fa07c0ce3fb4d3daad85d54d066f40a7946fd2e88e30b9bc0029b68299a995eb6e525af24b796e4250fbf18beeb7264ee61439a90ec8e368204bc9107f1c1586ae0e93de537d5ecc026c041bd7e08b8b4c7e9257b8d8ba508fa3fd4daaa054095ba531eec22113cc345e83795c7bcee149f7736106d09d09a0dad98696c6dfe7d9ae8ba012153bc7696be620e6d98ee561176371835109f80648c447de0007b6aa9327aeedca254213eca2bf019a4a0c2476d8f5c8ca9fa01296742deadc69da60fb8c47afa06ec0b6894f80272e7eda066e4a6a11bdac96781c3f9547cc74d78f302016c24876c7d3aa5320d2169bb379963e4b289adf4f8962ad1a7f50c74277d999a8d012ebcbfdc8442d9cd32f4d00673b1567f2a63fd9023329ebf9cf8fcd704f5a53a02c51977b98e2e1f4b7eb3d59b7554a558febd97378403837fc33f26cb7c7c760b6dd333cd80d4bfbb43282f649875a23fae82d1ec2f9ce8bebb38957796d95e529d3437477f92548a29773c5582811fe7599269cd9b329760ca2e498faa8599de3e85acaff23286c01ae723f69b40c359e836855f318c376dd76b6d9b2249d0b8360fb98e437aff66fdc10dcf4c79379c44b64e2c577471eec935272365ebabe66f17876ad9336484b94e2169fbf622b8535aebbb76b0edea8ad59fb0db33d172cfe83ece1c25602038d3884b127d2db6ff6a8494f70952690193ffc9ecebeb6340c9053f74179944619b69fdf7d7009d2f2d43404047497316b66cf700d9a0c2a901044749d2b7f71ceded0814cc4275cbec4e46bb327911b18810c17fc79996f1d9646d031f634251103bf3cf239b46baefcd2ecf918b4aba4f13afd17b7ee702994d390ac4452be84d7d4692a6b519e67ee981e32e262719549d495ebdf6bec389e634c78904bdcaecd88ac41b35f536e1c9c561cff3aeb7dfd4188f57a9221cf058e5a03848fddd357646cc4bc6e3925f9785b03d99e97a37e3a3ca0f401bf518cad5fe97bbf50a6f7f0214fe0eeae24278463840c1e04ba6f07278af63b13647658a4a7003ac3ae41b4603fbb5120ed09692619f139a1372240e02fdb9edc8c6518eea89c82a53da709b010c6463ff5219f09324361fb8e4a6fecec2ebd691ddb56948aab3783e9aa98876f7c3e69b0f29e93695d37724449fca46c5a0747ad3b9a1ca9d6b9de46cec96ca8579a2cb51ec04b2bb91ab3dda36fbd1d081d06bf287c0da2999a12c97614b667e2f9f785e8dc96f5e19c1eded9418d6a936f14d80444edf15e58dfd653232b0aa8ce6888032c0d64612c41ac7e0a9bf1966e006c61bd1412af668411c84d011d1397ee5fc04724d3a25b9aeae4337f3e8b9a3800c32d36730753adf0582aff2badd6f751d2a663d04faaa90ebe549daded944a19ab1dbbbef090bbf685156b92e21c2222acc240f6a389ea8c6ed67dcc36bca53b7c172a42e5be4c98d1c4dd0f5ad7ed26a14352935889ede868319615e1a3e7dac8a1e8ab713cce5bb091d9dd728ab6f262820f52d91b11a75d1e8d1788ba707c2336ad550d8ccfb3c404d8a9c3a52e0a7306dd919fcdf44d9fc5b94d9690dd83ee4dbeec252ebf356ea65fd0b8c7a0d3255a53fc2703044fb2ffb12495a79da6bc7fb3bd42a31b5522fed60edc62bde12be4f8ef196ad0223904eb49006f1f4900151255008a62978366e1a0a906d3b8d95f32e6c165d679947dee07517800ef4bd6515fc9353380f2870932a90490cedff1987fb974959a47d33ffc2322b11e021c071a2743fc8612c79331571c63978264a0168c177c18d5ad37a3d01fce39c55e9a2085372c2b46b136292d9edaa77320d047a3df1889d0548b7af2cfa6d70826811f7d6f50f510dc5886b71c548314bebf8f8b3bf9419a71a20df5b2d97a4d0c62536a8cf958039170d66e056f9f0976b45abcae7cf4c67cf1c97359e4a7f668a458f6f083e881792594ccea8a6fa4115535b2b73207d6ef1129d62546c4a6d3cdbc8d4a9f1b3d0bdd4e4e5c438996f718acf7e6a6ef3e3086cba8b57e64e0c654eaa7eb996478c21e7f8cab195124a0853d16ad5a3f7ef9a91b658b0a1d06c8c06fd1640148d7244f84e2877a7b0f961142797bba6d1ba31e9597066841bb4396b89434755cdabb071b0a51f54baa404369aae245fc96b54dc6b7c8176760df4e515aed4404f5eedb8e4e9af8677757a22f25719b6272b8cd2b3230a61289f46dc6bfef2bd5ab48137b29d322430924a3ff739a09332215f33fa0e082c7a91b6b851dca6b437d5f654e469ad162e23fcf471fdc4de3376576708e483bfb40ccde190f0fa0d2fe8d47940f42a44b65119ab274a8a7f7251fcd6a54e84021e3711bff0e1f5b08816a10d90e7b096134328cbe2c9fc5e37dbd5e999f411ddff3b0cba38589f868a86e7789ae948f48b23b1bc6a222164ca3b6a06ab7d3538a13f463b32fc01757f612d2127a3f94668163ce587fc0177729a4397a592f5fb4a6c46a8a4762266adcefc72febdcb74f04652b001ffa5807920e9024dda5b0e43ea946b576d0b425df6dbd2e9dec6666cdb7a849fd4146825f4e3b16cfe6e59d4e0b8ea138ac2efd80052a9aeaef30423fd3dc92a235615bf3fb90ac9a536c444763a8f9f7551576315e96016d759375fd222e86b9374718e28f4772e78bc38ddd6a3c1c5d5bf60495d295de9fe00e56685b14727cd7563dcd81b5e611e079be5257be74b5215f4d0ff9909efcef1f7823c724f297961d2ef77b6292b401fd7a58e486bfa955afa4224c2ccefec3356f81fee68383e41a8112c4d3f54860dd2653794b49a46965ae5f32a0fb303cee81358acfb1bc41ccc871f6908a497d8766d48e62af30dd2fc02955b3801b9cb971a0c346e9bb4fa269c7991ece31c88a904eac735cc9015c8e031ddb1a2b6314a54660f2b80b6e39e97624e53d8bc26557344be3def7a67a6c9f036e05ea308e90a8bc4989271e01cbf0127a54c20b961038053aa2271d07e03faf02ffc28595b85a6db1f988ef8885e7fa44a07f049b5f9c30ee42e1d5938d776920546ec2b8a0adddd275cb434caba034dabd1d3df39a0387853db2809bc8d8ca5c90298865de4585117a48c9aca1bb6ab2e727181d53f041860f037e9f26d66b0e5f9d372bc5940bf5939be3571cbc0453cb1733a711d52767137f5ffc2bf293bc0f346f88fb3bdaf54e3f10aa51148a33e57810ff583481bf076075515ca00cfc2b8991fbe38f6aa7069cd234f34764e9a2c420a49b90e8e437618f3d1d711f3530f73f0323114371595fc87587d73cdbaf85f325507cd57d4ffcedfe02e842fdbc17c71d1e53edfab2d233ea63467a804837f8f02b5adff09d9d1232817820bc2975dac849e9d299afaed5123a17a68e2954b2a360ad50d4ccbcac793da33107056bea934a2599d4bc4ffc7b50bd294bbf56b0ada4f6e09049e61d108bebec54ec9466fc73b99c3245304a846bc9ab4f66c8637d7cd9f7c981a3d4b6e0c4bb2c2b79e0627ae85248e6ea2fcbdfaf851fdc244ba13c991ed7207073caf0d046035e76e763a464747f2df81cc020e14f237bf4f9a788e6be4f92d66adb2060f5610225dc7ea4a04b4b66c4a1ffd40171f0c2a4cdfed6356e9955403a55f42941cb93013021d01e7f444dea5fe96d72960e4cde692598f7a85ae43852c9e08bc3b9ad9392fbdb4158e02fc3970b51d713e276ec3baa65bfe3facc3954a579fae3a19e57754b1acb90a5a90af7d425818403dd68b5fbb0f0ba0f89cdb08725093a1a01b747be12ef9f1b360ae2d25d145ef8fcde78980f3c82ff896fe6dd76393f99644d9ab3585fdca7436df8946d021d1831b7f41dd4e5e741578a7826f20d5c963284ded95f8ee1d07d8ea988d9cd4708287fa8eba6af4f7b70c7d4e20ce82996e8f7948e9cef473d30e7663e37f8554f5da0079ff8db341471829d9d3b7c1f2214104c41950365240a22bf02ebf5d0342dc3b099400c3d92b65522b7121bb5ae30597690dc6dd45b65ab34958a58307d3555046610b4b47cdbba14de055985b1da5da40ae7810d19d00b37647791fe80e0dea384ff5731494e2be460a9b7f7d35e77450e2adf8805d5ad67de5835b2c5dccafe8440865c7e7a1501ed53a984794940ea192aebdd95e31c168180a5d5d2759475d298a46e830c1ffdd2b7c0c41a2744f3ca7c48664094c1f3fca584d02d37d5b9fe7c441ffd60b758cf3a703f3c74ee02807357baac4759608e2b354a4cb0093b764fe7b95414457331504a4e66ceb686d9c49c632f872cecd48649aca76aa96ac8a801f31d83750d878db18a1f71490144c4a8c840e0c7195e4b346fc3c420d864091535c05ab0685067487acd28f0024017ef8296c0b24699ee780c385929f4e6d7a3f9d30672141a616189063245fa5a22f2fa87c3791505e4a72a5b960f50bfb840d7cbf344a15400bf3d4149d56a017a35c89a55860520c22412c4075b6c5d1f4e2811bda2907bd9941004cc18c1b4822a5554e35397790b818e083998b84d715e935ac21652203092a9d7257aa211df63293e197c2c8d2541d48e8931c51f52e471fdad1a66bfba3d532f02857b77e662c +MD = 4018097493d3386e4adafea20ca962c9925bd5dd9c61c1a29198b064fdc313b599e9615bec715f9d3a2db986e64cbac04cb253e8ec977ea45ca8f1c9f802d965 + +Len = 27952 +Msg = 825b192f69fb73b2716fb35e69d9c09006a8a2422ac7e4e065143c58bd146e71aae56d5d6574c39162f034d41b7e9e96102e24840c2d8b59a93de4f716636cb618dfb0fc4f61f50ebb7ad6257f512fc5e4973a4aa0bdf8c45964d304651581f7d4322b33b02ccfd083f7e3791abb3bc289cd2cbc6fddf2c87b714fa82f9275dce4c4262b0f3c1a80c24ea1f77625893807b6420400f6400d194ba10bfe41100c527fe90bf4f99dc5816759c81af5e2cd673cc447db71ab3c3adc1154598c1930264abbfce7cb2248c72a52138e950e29b046f9b089b4fbfde70be6acc9da5aef660ce626711a6fb09c7fd6015b6bd5f5eabb2a649129f8f727c06a3ad59499f21cafb0b0194e4ea6084e2bba08e1ffd91d859f8e7b3769d302e3e32705209fe04f1a62c368cf84d2147f9a651d5d537c528ba054d0451838805d9a9ae1e7346208354386e506dcdbc7fa6b2b22499a8791b575de17bdcbcfaa14d7bcf2511f204ee89d2218591d6a2aa7e633a00c9ca1e0eb6555d8064b4087f1e2b4bfc72ac1291bb6be89310e26436e53a61f0e21734915b9e19c8860321fdc02abd0af1beea1b6d883c1f779b81c38f9ab25b7f1a5d31bbaa9e9abd14d7bbe80c9ae72bb4ebfa14999471124c7bdeb216b3c6fd3de86e5add64ad7683aa27da435e079d28a8ac55127a3e9d7fc2c71130deb9e91c66b5cdd8f4474eba19c03b618ee2b28490b083a555ee55cff73b017babbacf106896691fd61ea23297236fe9961ef843448534a4dff6f7a779a92759a3201bc46e9ec104828a1d87b2b00c4e1c02fb0f24b8fcb340eeef80ca7fe74d4da05b92d91d7a3972102d23fcf484f179352722c1ca2033513ca9f67a4db5d913b21b2648b0d9212d573d81c67f6e86463c0938ac1763b75976a3730981378f8dbbb6d93df7825e3cb5db4bafaf1d7f0b6e0dbb344f1ba1f2238880e8c8d0d32443db46193ffa42f8b292cc2902364e2171c1150acfdca593a9b59aa87316466fe0d4d76b18956219e3d09dc3173d7630bdbff080281b14b69fb73ac91e7c5bd8f95007b400084de8b0312afe6c9779a1c866b844d64b81f36c19fbbb297775f813b9718494b7691dae111e4b60d8db0d1831e6c959027fa2953a37ff329c3735c69d8f4d35274601441cc22aa2761ccb23be067e3ec4606cb1a47a25b85f121a6868db8e6fdc673c08a0d12c9003b174816781d3e605c6ba37e55c9f3944993e9fa7c0b8a34b3f366249a5c1b7e63b91a7db037aed4b3513ae8939ec23c12eeac2c6e96c8df84088f773ba7a88a20d9b1d64e5d3b3091df16becbc9d066965d78862a01a7e682d9c2ebba9b790dbc9f938a1b36ee5c3f3dc169c3f225fb1b06d46f7af33031f28f87e8dee195ed7d344a02df6bce410594c35244c0cae1ea11484f24146aa81f5166d66e210414acc05ea562a3e3c52a0ca2e015dbc6024ba75c8ff10d5d345048e81d3302cf68906a55da6b8736d1f8cce87a00ec214485f09995a98611bbcc9c9425f52dfdd3735bb90bc4bfce4eb5fd1c8acb9be391e21386ca14268f26dc74f2567b4a963c9bbb119f33f2b422aac6c7773f8f15d0a838ac96f996de5ec8f88b198f00a38a51b1e6fe81c8ee371f5070a92471bfe920899162227e064ad852e6d4f7f72aa7dd65bf9076eb86735cc29f8842e8e7c3922bbf94558410d154a78cf17cd8367a870024bcd90083c0a845dd7c609d97484649be965b5303dd832203d6e64bcceb97aa9ded74b2ee054d01b0ed4837d65f830914cefc91e755aee8d5edfdf7f6e2548ab3880da6ce2a911da343c05fadf093934ba6ffe7c4201d24899c8985bb4708c9edf66d872b16bdc23be691bd22e4bc10eb842efca32818fca84d519c2402f98ed49f5cfb0eb31817023e83f8402147a87ad24f798b54e798b9671ee537fc6f02eeeba1aa7ee8ec457fb45db90c907c8282f72b05858cd1214452b808fe1bb44dc643063e839d7f733aaee9a79019a2c78a5b8a4998b81fbfd275e7ac81480f96e10d515c25ba1bcabc95ed6bd3a5029e1b6634ecccc11a99ea3a7379c76cc705c9b24bae6d2806728cd232acdd1ae530bc80f097298d07d814082319d86d25c4059bbcdc62cd889232cb8013b76291a5f51187f2b80531a3d848c031bc3571f81d2f6c8e0c92eb5237ea9e4868634f244e81c2a48011df23bf60126c7baaf3cc99d5226b745f75db229656f2f80766d550386756899a588050b9e16f1eb6f26602f7a81ba11d70557b366eb9703420e1829f3eafdc86e5e114bbf5e5ad40b8eee0fcc4479bb222e8cb34af47d7d4c3706c1c115880bfce6e91ce16742e2f8b8db94c3f976b08d4ba98f7e14135ce98a99718a6f87d2b5b51515b0bc4ab6db46a174fe0b21806cdf66de7cc52920ae7b58afcc638dcb4d4afdcc89d7e2be17aaf816d7141aa9357c2cf6c3720f770f8bccd2e39c0a44180b3b87f944ab7732781800eb8eb2a99b84648eeec536be812e5e918c737ddb9a8826fe6b8cf560b020a9b9a7f599fff39ac5fd5b194f75a7e5865203846900694478967d0b6109152725a798c3211ad22199d894f8ba2ae853ec9b05394c40f8c288c69a6a6eded60e14513a71f898abbb788728edf74cc6dbf9e2fe1ca81bcd84d02540048f608747ee5d09ac80d804baeaaf93538759c7e026b05aa8fcff5bfdf728fa74432c8d571c1192cd4a8761c268b840e40ae070230b899768cb7a28a0665846341aa16cde3615424ec5f557446b17ddf9c26f33f700e550d6840ab82e9629afbe764dba2fc4eeb4bb73c039c36a64a71f7e54a7eebf3a037cc73f8ecb1f13939e06afd9de30f4469de4669dc1ff2558cf7f4f207c8f2e2bb60567213859ac9e3d1c46606c12cc94608856f7b291b04f7445ad52230908462cbf4ff3e8ee6b2c26578fc25bd2ee0a9de02fec37babc17c871fd9174b57ecf4b65288b4f45c5d9e4290a941009cf35b07c4fcfa3e2af3e1684ce82d40ce8339c87af6bede85303f101353a4b1fe69252cd35369991e01ef8ee8e9ae387db1f8aa732fa474e7946c780ae494f9ddaacdf538e958b511556ea2fbc3e05aeddffb03451daee00cf2ef217c435a00bf1e1b09faa80fb98a56264b8e600ccfa573087cf9a724477cb08eb571583eed2f2dd9112176d5ce126cdf32a7a779be2dd7e8bd95b44dd4bd3812d9f20b87e8b23fcdb4b63df41c30ff60ff518071500e71636d242e72ac59f0423705447f1bd2bcc09bc0e4b2ca6c77725991d33aadcfab4034abfcdbfad842e877b5eb6cac160c7b6e475358014e3ddde871881dfcf8ec49bc3406d0e4c095ca4107e897c30697c3d454722de85fb76955f8886266129b44aac63499929b50b23b052348892bc56375ed297ba8264edd482eb95112a422faa96a6e7d2df0dd6610b685c7250cff21fa1d6088682b6a03681c04322836e8335f279cc5dd48a3ae6622f45bc032abc70be9ff9e51f774a15ec9514cd25055b67405a6bac92a0a54e652594d8223331b4f5bee038b11d280d13e89e8367bd14d910c74a11a1e7a1e374d9de59269fde66f7a15ff3d01ee686a81924e7c3ec4be5e45eec5f7ac5bd6011ba66b198c73ef124e5cdc8f502f21d19c56c6cd2296d282b7fd6d895d1542eec55e273e12fb00e1e0ace0aa85fc72ad96bc9851aeaf51a66a87e0f8b8102ba452ac612a85ffdf8437eb55b628bf24a778ab0b2f6a7803716775676b46b558cbca7760046ce655a25b0381dac2dfff66490d6890de57b08cb5b04a0a8d6a930c36a96df550182ae355daad3fdac4cb9311c9f79b93b51f9e5c1fd1fe1798a20f9d29d025b8fd26f12c5a200df8d650d5d9c7007910fb195065a9446f6ca84e7b07dfd1bb2cfd1171e86a246ba47d56d5a8efcb51dd8f664ad738ea8412005ff87cb3b8e03480b20e92f1ff816721a43a8629a04c83dbce33bab30c66930a9d30058dccbb59eed26e31d9fa78c82a03ad7b5dc692894519b31701f23d772dd0c8a955567522af3939cd095d7850003bd69073864a77370e74f50ce43044d0bf6b71f39e35182baf186f6970a8850b145ccc53289cd618761b5cbb2a67845d33bf634fec24c1cafcb21de17b31f1b356e838e5f4b12c50195354f60b0bbe3bf46c8a52886aa8f5e7b1e159c53b1c61c821da1231b10447bfc2e6a5d0447bd2ca1bebe2b92e52123abac3b997ed8d7b33b0bcc029c4e364301019b1c239428a7d7490e8c998498bbb78cae9396fcc6b5f3ce6d82210531133e6f60026139bcbd41e804dfed114c63390fed1f3ea6197146e5e4365c0dbb692ec837b47f90efd98c2c3f7a1013b2d69ad675a0d86d5691aee2ee73afa04b913c9ca0a6c142488910762d0f94f462627750e6ace6aae4738635eaee8e654837f25d396dc8c64d4879664bf50e4be1b3390faea7fbf779b3875f47fb9ae557c9daaa405e08857494216d1abece82b7356a733c368acb5cce0cdfa41f3778f0c37fe4741c03083508930b17e168213965862c2dbd15af242f91377dedf6c899c13c9c430c4ad724f268c0d1f16da00ec0168ae1c02f0b5654aef743dc5b2cb92fbb421bc3427acb0dfd1ec76341979dd1962ff6d4297879d9d07f846ed74dd58b46668cc57c5b7d97da7576bb86707d167f7beb5db77ef52b8060be19ed848540988a14776b01d34c8b855e6e9eb3030b4d0f2de13b775ec6492b5f6220693f0c1c2d217d910662787a9eecf11ce7f62c894a3cf3380a1d36953ff6dbf274693a3bb0523c80c181c84252a0e763779cf6becd97082f9fc6f8ff3f02ebe63e9a4791c41538bccbd7a85d2128b604fa8df65809da94a4b0d299e17912267e1058d098c8f8f6979dca95358ad2f193e93fb7df7f662d19d5c675d69e82f01ca21b51cb4f6bfac3bfe11b66004e0e82bc2897dfaed8361187292 +MD = c5ad53c45a03b0e1c8dc5a70031ed1ea16bd09be869d4505ea811ac6ea8fe988d264df3b698e08113cad1908b8710494e31f6b94275544eaa8dca047147f48ac + +Len = 28744 +Msg = dd946aa6a6bab6c970090084b034ff456f2fa9bcf040f78c9359e847f9a5c8996961b2c372ed544bd223f2f297e7ade784ff063ab6269e93885b3f24b37f20dcba1f65de858fe6314b3831b9b632d2664216d2abe70d7d32f72d68ce4906b3b197778cdf25c7f4e2a3f0c6bf553ef52a711915f6c91f1dcfa9776b2b0361087ec9112ead9bbd07c6a2f5b8eebc339e9bd9b3d703a58405d467e04e2528b9a8ac199453322f9aa64510ec0f2d32385621418a21bac264bda7f7101ba3023519a44ca9035528865ac7b480d4630075a3247346fa036ae6ceb221b0da8cd7fee5cd2df747fed0a8aab457570e7a6f13100c35906bc6e332bf5baf6891caf03b938e832726156d291e74c119c559c53a224150107beb7671180c67df4a449515ac5115e0a98348303e6fba6f01e84a11632b8c6d325a6bcb622c13be0ce20eb4b77daccbd72ea9e6930e0a01cb0f48c15a32b04f98fb0a67232379ace08ca23f3c7a108fb8ffd773a4b778762ab605718fbf8660b6b69a6ee6586252cc2a9adec4af09d554de1cfef9d3ce7627c5ca4a8b38d4459374650730359557dba43ebbd6865f45b4b4beaf1bcbd2abc924df74d50763a9371bb15b8b21dc6512e2d6fbfa66d986df6706af91054dba18bc8c16f592fb32ab95c7927e84fd217bcdaac9b8b74141dde13c26e3eb064e1c73195974436388f6c8efd392c7c1351d4b024b99e25d1db708a83c9ae4c70dde32cd64d9816554209e71464d50f049004525a9244df6c374c692173d57569f65e2f260acb3c73e32fe94143a8852042da45c0ce261d3da1c0241e254ae7cadb969ce74764352ed33cfa165ded7ae0fab4eef9c5986be0bb8a4fec3685001dfe3b1a9c9bd98ce0a2bfbe060c3a6ce11822d268013257dfe4e9311e200a5addceaa0cd860c1a033c2369992e705b78b3bb2848e198a4d95ae9b9c268a415484dd62081d4e831b92c210114f66d60759d5d269fe66e6d9ac88efd597ddc0899d9b0180cdbdb45b78230ab98e1431b8d76701171b81fe688ef47471d4831e669297f6fb7c26cbec6e5554f6f1779f687e7fdd0077e33796a781b7f57f22a1780e44b0fcab22404aefd9ad5dfbf97572d970a4ba961308d0a0a138e4fa25003a6b31cdf8dd2897f37730625310225a8452fa26a9f89a0892e4e355a4d812913a33efbc7474b259828efa128ad07ac509856ca15301d0ad79feb8bcc99b73fad3e2cefaf424480b54b1874c49af7b4b7eeb58c34a545f7de258a1dcc7a6b1a3b4026017fc4e62040669786e242f9c3450ff3efaf462bee0687d3f1433ac6402372d3381f16588f9f4213e06beb366362c2b9fb6e5bf477b78f6d11171fef3bcf99dc9c7880c3553ca7358845ded51b76d0afb9592ccb1a5903018532720e93a580e83570494ff87d5da5885a63ff73e9027c305901d66054ac36537a7a4dce0feea00cf0bb2302cc2b0ae890c1dcf4231ec96954213dd01152b585d981d27673aaab28e11c68fb90da0daed14293258dec3d6a33d529f3f6bd262336cdc5123b7db39129b54569303255e4042c4d8f8d36813ddf65c24f6cb42f3378a74f2bce2f5d50b2cee3d616fb8b9111c831b88cc23cea3f192f6edc017bbf895798489488536c62af6ac9a9fd56bedf5e682af35917773a3899d8ac6ab0ce5025c7f1f5503ded239f01cb51005f725836196d28c3baeeba0c271346b87769b55904af594ec2dcdce8d06376cb4db563976d0795c8cc56a6db02a910b37797a03a7908284b8b4075d000198027c98fe8cb8c82a030f6b8e5ee512274225960f9114b86ca0f4021d5a0b975d8dc7b09d0189d66b3c2df1b618d3d04d8cec4cca826a5b1a8628887e69f2200e4b20a2a01c7c83935472f870100eed9a68061e496c1ad10280c0b7b8f1764410d711ffb641f37858e889005ad8e8b2845fed8afa92a8b2bb3d47204b84ea6c0bbe06182e16a0fd1254aa89b4d803c7a1d10d035caa8688ab283652b498d110657c879c961ee7ba664581f54ca1e2b569680f17fe2856cb68be18bf72b1ccd9a47f10ed8caf5a18bb2799e350ab07d441815e494d707be36a8b68d7044430104f523c9b506c5a9087774cd48f67e5dcc0b96517d937787926fca129e7d4ad6cdc726526afba6bca51c12539476d0f177d7ccdf40fc1dee534ae5c38abf78737c27c150ff93e202eb071bd92173ed61cce47f37e7fc401c00a0ce483bf01700997cbe6b7ab4c0a261a15706f8d31ed6549b7601797a293821d84e48b9f96da7ad2ee34ce54887c490528d832080ab7895627be4ff5d216b3e5c2d6c0dc3c38e3fa5f99b47368092fe8387f7a160dc6e19a25488808f6edde093335b3e3560ddd748c7ffa966f331359a0b0b845df8e168c4ca9604f758b58ee527bd54368ebdfd81172112c027ccbd01e267d05e49f8082ea5b6947d291cd1bad33c58b093563ab8afa98a2c66891c1ed4b28d4a15dc834aad8f36092739307afd7e518ab8cf1553583e1a92f690dc5ba894c30ba5b4617faacaf4839c35338d6e2b47ac455017bbda88c8da200a841f28b77b8841a92834630ed6d3ce37625ceeec42fe8203c658fd319eec2c1f9dd11ac0bda931e362d3a104e3e20668464d45694b67b60ead9289dea4b062f6aedb475a8f56bc8996c32c5423968bef66c93a4969d22b9951d24539e10f0ab83fa4772bfb772bc34d6ccca59ed8a7f54a399634a52427cd3c7efaea5def6b8cd99471db08f4c6bb0e36499f5d91a0a27b0321d40646f3d1f5007099203ace9b0313ff13beb5d59661896aeb67a7bf1d8091a3ce9420d7ce04be6fed33d67b0d4589e77b26a3a07fcecdf831c4044c8fe149e4cd579a1aecf222bf8e9dadba09275ef2ba47a46f9cde6abc187d8e8f1f2795ab77589d06524592272566a5d3b732fae8792aa1891518c87b49992fcff6d9dcc2749e0fe1298878715a97a80d40edc6915fd5833713054f006c20ce563b7f85ef6d31daf498403b63d4369db2cce028b5155230c1be2b6812281b526a17a2fafb0a1ae487c8f743c63c4e6b088294891b42a9926f3d1479782591a554b2c9a2aef26017e2e134f86139e4fc588b90528c8fe09088b948ecfb0c8aae5c337ce5cfce0b594c0a80c2fe740237e90f5ce9d0a3011156594d2763850e55c9c3432b284524940f6b62096394af04053581b8af2813ff1f46ad9478372682e589a7dc7f00b1af712d62355942f44bf2258625f1c31f412ca7f09901cbd91df6ae2f609da6bd92bb7808aea826d8f4f908f39a5d1e2cbfc5a59ca0c8e8300e455964204ae04d253473dddc18e763e86206517ebce1426132683b109337313d1ab3cc824d566b5026476828712e9d0d75462739d6b4690fba1754512b60e693bde4f1ef70af1efbd71b31f87aa28f4c7af1fd33733daab1a6da70cb580a57f675135bd079946f0e9018c1b5fcec408eb82e5cd35b270c2f3edb16e6e1dd8b4f8b68908b31ac647199669fc8c0b3b8b97826ca8355189871ca3fce0a90838a87470c1a8a60a0080c3a2c53978ba000b60200d1ab2bb8555f9231219f2ba15c84f1278133ce1760c7bb93668c285b1f6e9ee5f9b1a3b14be2ded7950d7be20a30d1e04bf042ba768b63c25f0e5d8b1dc894fdc9fe86a882e0f559b4bc48eb9a722f6002288631513e7ce1c684f4d803ab2b6fc9fa9b48034220e006145a67173152cf2d426023f9ca4c1a2458b3ecd801ac64810dac36d5f1a794127e78fc8657835455a8993877151c9300f1636ca4b15f037aa07f1d00d4d29c60606c52f1cb0a1701c1f919d2093374e2b7cc036fa38c753b19dea38dd2e8207823fc125f752f41b9f5476e128ddbe65212b55742bf7be14ce28f7083d5334ae330f1e4d93d3afa06ac4dde40885a11d96ae71024ed747036615a2deac4f94028ee126f660b72696e4ed11262e4f91cfe272bd71e15be4a80000982ca86832acfc4295c0ec720b77b439cb28388002f4ab14754371fa296b22662162c051931601cfc52d9598c0bb5f47665a85cb7744471032e77f3687d553a2f921728037d645d55fad0a9fe8ea3c726d3db48651074cd290de6795826f0a6369d94d7883563eefafcfaa0be68cd2576a52334542e622e7f9b8d9ab9b90bd140e0aafaf181e339b3ff602413c0bb772c838908caf497fdcf7d733cd5602e231403617a868a6ea54aab081e47bef623111413ac108a9aa0df5ea048f241e2047cadc13d8f788b9a85aafc77a08c0593ed01cb086e19f38177e41da75984aedc3e86d32c5473c3802ea14415674f702d88f1b9052bc92b0661b7f13f52521b1323379e2f1da29cc00b3be6e2e332c05ba98de48991c1c999648024fa24d3b011f3682a2f312da0c0e51eecc55e5a7c841a7d547de62a55a147e7bfbf192ef53f76c08012d93d57e983f25da51ef22c0fa16811ca732b5786d393c975778c720373e8a7c25dfa48a3af60426c6c20586607f7245680ed58afd02d4a068714b0c6b488a725058bfb572f0fa201900c89f013d1940b5598e086065c4b5991ef36f1ff4789251818f86bcca9854cd2e046158f9e69d0395375723cc9d256dd448cea1dcd54a9e0cbc8494ed3f4357ac1183d4108ab8c7646a1db3c1ceae5b23c3b1bd6c31098a3caf2577d37f5a4cfd986d0f3b56329529aeb29ccfc98ee5affcaeaf1d1c6dcaa3dfeff217d93811a5018366b4d998e1677dbc5b511e6591bb4c1c1389e7d5c3d4d74a8014dd3b4a34e56d8727953a30904fa15be04db0e3e83a90771d33d00a421ddb9e64dbf25b2fac91ccfe19b50756acf82b17d7ff60a95082465170eb026e3c19c98285ebd8f7cf86b4c2c787da0d0e3755523dbf7c9126980dc13f9540cb8a6b8df84b86282fd6b2eaf02f312d35fbc54719ff6fac12251839e6f05d49fca1675830ad6fdd2a5abcbc10d12f7563fe488ce98d9e83ceb4a9572d23b182441983b4b61bf77c89b3fac4af2df157197e37a34b78aa78098db1e21e4a109e645b57200317bb6ac08af37125c62526c8f3f916aa41321d54f8d86744e428d2cfcf3826a2413a4c61384d6e0 +MD = 858deb41f50d96cec9a0850ed70b0d96207e6d5d8b3641fd09af5084d65a7c7b71fbb6fe04876ac728750a543ee31e94e388d42ca5aa2197fb006379dc67b423 + +Len = 29536 +Msg = 2522cf92da7d8f153dca86dd249aca300b85697afe796441ba51fb5b0fa92b5f88f176594ec1e2c24a6c44af8ad8be48e68d877ce30beaf3d76192444efb0469adbc6d70154d9e728ab455c95528be7ea62339017eba5e1dcc2a3e2ad7b3ec85dba93d3df7c8cb0f46c840954d31d1ba95710871982bc7a7e2d38a757078ec9b5ce06d2abcda7280c7d08d79399cffe4f99c7b34f9092d785e84fb8ee2f20b93768a859d2b2c9aad52f5c5dfe21050e41bcf1bb269fa997a8b671bdbf4ca515572cf0d000d664b7e325e6f2e1136cda243306e54b0a61194b0a171c570a8c6c998d68eba2a308ddbad3513ce8cb67d07b9e7fe8095b7a0ae145d85b51c3373d82fc890334a3069ac0d9f39271b3769f9c41d539fe2d24bb100c1e011c2145f6881cc99d33511e6d998c66aa188619761adfaf31a5da11c83bcf5094228f39262d40b3302b2790d4a97d22da49add1128bda56857cfcc1a0d902288b1177615af71ade5288b11e5e851eb0b981853df3439473ac0fffb4d37c470e6c55648ef35a0d937ad8680769910378be5cb6a076f6c07efbcb7d5beea9f06aae5af0f28dea8b7b2f96c6ec8461ae135f37bcb93c09d0e11b2bd02740c6a0d5c7be874c991d370dd740485e4d8b90f912aef1e8a0e1383280cda2b77866eac85eeca1ed936672c4187186ad13532ea28f3f10af543178fba31d6f8d041f00caca61db660b4ad1264986ec89747d09981b44737db46f15a5189791086243b54590ba9e367f5ed4bd011d0453ff4da4424d6ba4e44ffe90b747c8b1ca11696ad1485354ef4e06ffe0d580489cf2697159ac212f7395647cbac72d3c32a01483f667c8b9e125d7a54a1d7d23d52c450326adf17d9c03352c17fd31aae28cc9a31d658717cc654577516f40409cdb64ec31c94919de47e531677072884a35fd4aced81b0901aad4f88f41960944ae4d6f1394b47eaaa1f92f11c76c5eea4a23ed7315f10811550a8b6c1adb087d03633e3486b02691cfe577bf589b994317d1fdb2c5a58f8bf26aa260718ba896894abc3d15c8ac24104eadb8aa6cb1d55d8c1df66db529c21159f014dc1474319e688b65c85a79c2117923a6337c532159b6a0c6648c4164206cd6e1c121e5deb1410e67250219fc52099c009a26d7a7bae638ab40b770d2be27d96fb72097ee6068c7b9a24bf743408459403518c9e8ef9f480d88a332ae28ff8a07249ce4e13a4439d5d694ac376b5dfdfd9aae945566464165a2fbf1571f783b50900367779d77f7242888b339411aec814174e18dcd8fd76c361e575df0069fd49fd099e20858625d1e7476d9503fc783bfe81be273b05c59b876bf23594f09fb9a90f6e1197a2dc92ef491981720f17d6c94be03f77c52e680b1a357a9a62c4e26c0f8c53f618bf0e0858de614831cc6ddf74262d7285d7b454bae6b6fa05934aafd3a3ee8833f8cc9b3b643c6ca7bf89a8c437f8168de806ca13adf29c22357bd82159eb373aac540ebb541ac6bc19b18c03bca849248ae7d5ec30356800d1fd51c25651ea74062fcba056033eb7026ef3f85c46f593e4dedd0f1a8746e99056807e4328892a2be438b21100bcdfa147456cc0d9012320734a4211f01e239a10cf1cc879fba546fbbfb82e18287e1fc4ea2790695519632e844ebd79d8f716b2a5668c4b2a2a7dfdc77c54546adaa36d4bf173ffd9c0d898f3fbc8295cad2cc5692238a6fd04f871b7c42cba6a3b56cbce9211a1755fa4380010d709928d06d0851973925c79e0dff9595e5511eb6065dcd1135a113df2961157951f62dfc95b6013e6182fd35dcff403912a4531e8c3de77212f95a3e83b9096a775b5eaa0ef62d8393f5e5896ca10896d43ef54166e3a4ce22ae9d9aeaee396b81371f7b113f32f1310d251b457b5b59ca7f89d13ed5a18ff52f5276d77741f6eff804e244f7be11c917105deff4b4dc35e465407c8a4a31fafa2d54d1fa9f97143c837222b62b7fdcc24be3d493a1a8d71c3c11a8882b5eb4ad62a752deceb6ae733fad33010765ec9d4c2f9bdebe49fe7552b72b45b150b2a7a6f0e29a4be01f1a8de5ee5eee9e68f675b39e3c473a4c8e6dc3ad4968c265777ed3f9c383add6b0e2cebd262d73e26c7ce25442e8e421c5d1a98719de2e4dab3e9310d1227a75c4f2da480d5070e96da66e76792ff21eca22eb412d7dfefba18ae0b04994d06cd5226af76b042fde78a6aa4d4568cea3f9d60b73fac4aecff8d83f6093574a3c5ff62343c5950b322bd218714e4fe451e36f7c98084ed86b2f9af1aa54e63254c3e285c5b3af9d94f5dd4b5aea21cd990553d115ec78e63da467b9e5f4ce3356af7bf4e5ab905177451cc592afab04f9de278b860ddf62b7f5b2fabc098bc7b28127033c1403b149b814e991153804e4dc5f1e50f2fed87a92013684f98b69e8d77833319366479cbd5a59dea14567fa9e6f0c1f1233b1f617d6efe94b59847a20f4075e90348ed0d35188e3da7f88ab82dbc749022a79aae5a8a9417572c1d6ec0ee22b90eaf196889ee9493732e1683839f257495faa0999fad5361e738c9f973d76112c161a4e4b970d672e0c2cb10cedffd23e2fcdb29342063f9cb85f24b11415b7a83253789ade67d65567a5369f8c523277375f066012beb676ddb416d8075387bbdc57a604e98b0f13d205396e799bf08ae2d8a58ef15133434025e66aabb1f9dd507147082cd98a0fd7a769d85a3fb4cfdec4f08e42805e787c1f03e755a386734b4aec132ce5df9fe516188b82afd7dc779e77dc9aae608d0e19ffdcb9cac614294ef5c47e42684a96cbf5f6a78ed22739dfbbf87e4e11f762b15ac93c7a313676e8048a7551bca6495362882d3f4c46b2033d7041e1bb5e164f753b52444060c0b088d3c69665298926eede8843aea16ca36cc2aa0bf517857f0f818fbb8c197343034ec6a2ca4ae2c11b584d3e61cdc62ada6e0b1f37ca5cba6a5a69427cc72afa044a19e98490c2bc4893e0720e325b23f6e0d9adfbdd087c1614636b8b00344ffc5424fcfc81c573170fe6a12c55980952b9ba4ad9c5f54ea35e02b93f4b4bdf6c0b7c3fca945780072ac42e14ce09556e5711482a1bbfac9275db9e120ece12c3be8424575ee55d99730d8b80023b92ba4773589554c410542a329cabd12774a41bd16d2b381b762e87274bd6888b3bc71954ee73f7af1468b9bc375529048f7d71e86cceb6566466c5a5e180c784db053b3a6c7e8aed1360c2dce0b67cd1cdc07f3d95ba6022a2b2bd1ddf2745c4db053b9864fd64eaa7bcc4294b38431baa0d82458a66ac0cbba2ebd3a73299a7c63788f36a793c444bdd3c05b963224ecec53994bd6c207109a7c08bec2b29ca272ca1efef8a77667a52a916cdbf80e78687e3afa12333fc2731d98ae0897c88784514c266a98cedbdad89b0fab5f5727bb63f0ac8347d0a9ef1a57556c6188f2421602f524f0326705e5c88b2eee67c18e0aa1aa5185228db47a2bfa179743ad532029b44f360cd5ce5afe2a8b2da70e8879363da3759d366a45fee430c1607e6177a7ac12f3c3ebdc3e2732eba47dd652ba98aba1a0aa6cba84b75ce067492e1124662296aebf72d8992aec75dc52e093d5ad3c758daff64c3e3eaa4f1265850d2e4c6102ef68316973efa0525c8ff5f4d05f3a44c4169dc77b7b16a4491c4afd9d43b07f3f26f238d55e96a9ac9add1db595eb39ce4529d34356e80895d647887a32563524617bedc65f15a355dd60b58c37997932a662199fb767a27dfb4257cc009c4b2881952f4fda6668debe45655b2c8a2f789f0f419686dc9b89f304129b97caead3ee08a677b7d21fcfa756d42c5e0681299afaf331ab8f1a41275560efde2839ac109cfb46de9ff1b1ff59aa06b45797ccfee9d6770ec8482efdfce9d1bdfd613b5019d6c43715050a2e1791f216c49ae933a5927097cf4cd7dec356481c9389081446defaab7e84659c582ff66c94b209a1f6d0242feb4fc433704f5de330da9cc5ecbcef20209547b1e42c1d9e1006b3b0a3389cbc66797e62cc7b17fa1d7c7eccd318ab7f45613ad582316c9580bf6fc87671df2786f18cd59f837e4aa296368fc39837b1330fc570fce6ed372c04c5513524f55994e076f2b10e9ab906504d7884e79a9d32c871ea18f2a76d5bfe3eb3a9f8e739d76dc523c9c5743093d34aeeddabdc2a8cb4c4ab9ffea22056d561569a96bcae99c100cfb15013988f47b558988d064287fa481b58b1e73666b0b6a2d0a57ca22003af5d2f567fd743d417207b341fcc6dc385a20db47d99d1b7c60012ce2ffcb65c5b370c7fc1d7f7a0f6ad4f492faf843602a984ae6c2fdf1418d629b9dea4a1f48bc40f75e07ef3d6dd67db733fd5157c47968648bde2daec358dde0d918129f2c76c02dde4b67e9c51b6e95b552567bcdcd3db2a7798086aa38ef7724e7d987f9797ab62d666e11adc023fa87c87c41f4ac64bfba23bb3b3ec403c921f7f34c284add4aabd76657a05b3a603b9e372cd18d99e6347b221f2970a77120b7047e41516435da1cd4fe15431e6141621baedce739b0c6ce59a4d2d566e9d1a36170cd33bc1248a55ea7952e5c7829a2ae4a7f4fb0c9b1cbc68ec358bead955baed63448215a781f57d6a863511f64de4382513dbb7bb5c1fd2f83710b36ec3e41011f254098d8d954fdc798a8b173838fe8cb27a641236f61f99bc4f91056d9dca3d651a637eb71da9f6b14dff8e620e7d075a40dd48b12998f64baf4c4659cb610f233aec240676d3e0b8e43302d44ffebb9295e906d5a085386c98abd891571eb0b61e6c24828615c316b9ef1c94e1c9d3e2e14ff4ab442e86a77278641d2a4948a62cab293336b7c75132fd84acae2675d28cd8b93afbda0985a67991032b2afe79ce70d9226f0013f3b924e1239d5dcaebfe4cfd8baed2e98d9a77084d4108fbb96b84dc56173ad084b52bdb0295b5f9b4a0736aa4465f4d48b7397003562d67ed6ab0dbd717ab258a8edb1b5080772ab6d814a68fa9c75d3c6589722b51df699e35ba7eae589b3b8fabfc491545ec87770ff95954c15243f30d2db6cf19672953336a6ce2c154391a76560d5acc593581aee82cf9744a24f515eee3f6980dd094cc8a4e7b391d48b456b00d26fd095f5c1baac688acf52bc8e794a1a9b51886ea68e0cb82aa3d90e3b3d3f481c0432b8ec007d108509d7df6e9 +MD = 52e4c7a5283c2c147f07e595e81832f5f31f29ec02b4fd68ea956d54a1f6c6bc953fc268df43ce47405362d3773f8f89fa024d92b54a1203f6d390bb88a73227 + +Len = 30328 +Msg = 8e4d3a26b9a8d496f6946eefae61662fb81fda07d71154e7845ead5cee0a2b9b4025ed5e224289ee822bf38194d3a1c7178cecc0db7abad080485a158019aff870c29102823670f24f413a0cd37a7fb3b973d43ad93275f800e52e9aefd17bbda68ceebde26cd1c7e43f0d36743c4a1c263a581edc20cd868c9df0934319d6136aebcb3449ccf498c98b32a77e034829e44b4114e92c0ca2acd86aa785d80a224547f112bf3e208b878f7108f9b6c3037d0c56c30a3e7876e9fe627fbcf85d11be0829fd4caa9ec8a5b29401ee3d01d179e761d4463e5b27ca77a1c3f06018095e96399df9f8b778ab5b613964804bbc5e4328eea614fbe0d8abef1a29f88231ab59e99ccd10b0c321f4a2596366e8ecb68775ba30a9a1c79903132c70a8e5b22fba039fd1dad4d090e41d08f3d92288081d0ee0eee3940497e5d7a2cc5887b3721f4d510b3f6ac880939bef1dc13fb9dd6cbb07e8ab1ec05aba012446f0b25dfbf191578525b9d27769e3b6e80488a6bcdc46d725ea852368eb5a59e558acd85299955c47760a17ffcebf045d8b45782dd575faad8612544bdeaaeab179bd4bff7d22065718a5bf9f2af581823ebe56b8bf121588690d7c8bfdb97eb2392fde8a07fffdbff5d2f1e0e54ed661053a69e602e3d3bf79bec2aeaf4ebef18148bb7c9ef6ea87f3d9d5486792ab02c903d83e06b1d958a06c4f3e5b3352753a52075da9cd75b5fc0194611889a76b705fcc493443d25ec4614ac36b2ee1464a93edb3924d4553f79456b361fa73a6e4976d8df26364d6cfe3dcc34608136d9b549308c03e0368cbd842c4a8afb7bb0bf2e294a9d737caa83b2dc8548992f113dc21e39b6856fd6216811f566e1ab0cfba54e6c268f44137b16459fd7803da9c75c0cd8b92e719a3953a49d400448f1735ea09a3de4344648caaffa99e11311d65984df8865ec4769f96cb892dde60caadcd87b601cbda17162640c0c462fd7df5d0eb4a0a6206c37abd2edcbc9029d26824e86299350b389501a7aab09e46a66d902fe9e79be8726fd6fa377701f416af18b20e6d28dfaf5262b9cf2b6e147f1502a23ee5b2716cc60ab50124dac87ec9d16f24464d5f6495720098fc7a70f0344bcbafcb4faa97c780e9a18cc2aef20076a60bec4c9240a658036bed6961e1149632a5631999dcba611d817762ac5a9a30e02b27cc8129cc3d4ab1c4e3f03afb09608973b94824e6d4da08ad62cd9ee026a4ecbf75320850495ed34a9224e332ccdcc1c4d6bf559402a79ef56916a71a817ab67bf1afc67aa3c637471b05c501082eb71e1905580c120cab181f915b9068eaf124e5004992740a4783299bc6afe5dfd1482a2116962d9197df2d45a389047d0582fc2b7be0e3b36ac562efcf868a76790cb01e767a7bbfcb0f3b3a684f7cba5a5ddc3a43ac194807d66e08c9cc207b163054015fff231dad73f0799028f92a587d2d34883d3e51887ff6ee9acace770f7dbdd4bb6e4e34a6d2f509045da35368aa982234dc79565486a2aa2cc8bdf1cebb939f710f238a1ff3f1f2ad35a1bff0abc40b2ed1f2e0d3b31943650e1471bab28068692acba97e9f8d3d72fa1cf65a495bf75e64d2766dd004c12fe3fc7f3b292a398b076d192c9e71f13af23b7e0c4c02efacdd41a18aa30a2d71919da4b9ea3919bfee326092b84416ef6727e1707c63f9008366e892f6d48e135e1e679cbb5611ed26420817b5afb5789f07a7eca02620429f6ad3ed8f09ecfc93a8514d652927fdf8c499225c59d4bde30456ea82f3695a7974ea0336524f167762e932b05965d7ace0991d76eb7ea67a4678d1e870de3059adb63db557c0485475b7b4638fd3638ac0926fcb0cb81baef494099b4886ad873dbe01d3bf467a7008433b4872788ad9890b8023658c04c53733fa632169b74a4b8ab85733ea941544163025ab5c32e3668db8469d01490836dc0c07a49037ecffa3cb0a5ab37f8951b7f9c3e18744ee7d9f7ffc5d1fd2bf1a17a751780216b38290a0b4dda9211456ae00eabd02a943f6c93d0c4def87320a6c330745c73ae8fcd9a11d63d463007b84ac61e6d4472afa935a3f147851a82f6418f2b5e88dd29407350c953d2d93eac064f2050508eab1863e5d5bc3166bb086beda6e6cf6bb73a1c34a1beb6817c8ea9263c29ed3cd4229512ec9d6c0c1b65b8d87185b5ce9c12fb5a09ce6fad2408a9d7dc4a58f19d504fc7907bb35f3696aeec05cbea9a5a53a72d3c037cd0d7729ed08b425261794a0a508bc7a5f48f03b474ee29cc437474962ae30e5c80f984eeacc39237f0fa584b6a19119240a745601fa51fd95e7d0e4edf894f8d222c982fc91fca982493038950d2ea26e7f1c44858a51e904fd68937b789379d58c324c8b1ea5be170c5e45ac143a1c24f1118c3ac68c69f9c036df74f7d66fb896fd34ff3cdb6b26a25632617d5e902ea67ab68778a7845c79634f403d05e263884fc2c0b346b7975141871e12410574e7804ad6664d431571166c4712c7dabdaa537f364b8faa526247cd4a998c83ddfb4bd18e5924ac0ced78bcf23ec460b0432ef2c9cb5e4c401d8f8b4cdbe613532c02d31619d4ca2a38b1c9a788a57b249d0ba4e2fd5aa647c942498ea0f8bbbec0ced6d86e06a25599e81bcfba1234fffe101be7a72cbf50af879077af69850400d6643b20623e76574638d39ab2922aaf65e142927c9f441887e66fd2e2790e344304a7f68fa576bbf2aa19f12e9d8df8337e5986f14f094a6ad6decf0b9ec4a43c3f84ba36df3b0d14f90b862d5d1020a278964b33d6898e57e52c6f8bfc0e97ea9b3b32fef5af95d6ab102358db9c71d95960a8eb3caa2b769dc27a0b9bd55774a2322790eeb99a5e4a8f8e571e173101a81e66c18a566bf08506b83284ff2a03dcd26093d24066d45ef290d12e6ba941ee3a4d5cc77494ed2561f1a9be7659bfd083a7b0a92e3f616da0f16f147e21c2b21b2565fbecef94063cec1751202bcf06aec28f7c6a6e2d010179d8d73ae1ab7c29b6832ea6c40eaffd722546e7ea5c06b97ad752dc3a5fa17df0b47f853025d5ccc85f69895b83a80e4b7ba4b2dc8d590e9730346ced1fd67c1dad15495858436c22a0b37ffb1a7ad53fc073684b8b8613e1442902ce972666c9699f6d9f6b50718def1570edfbacbc169cbbf37d7d153220b8398624ec1ca3bc9028d94e878443d1f496427a4fc62997b9853abb8c8ed21b376ce038493d9bbecbb575acd3664ab6563edee83e51868bbcd8254ce07a5a9b67cbf852d413b797c2502903787eef04be152c7fefd43aba50bd9c7aa0613468f05db6b9b5255d0e1c00dd999d549882d32414898bd7adec1b3b878bf5c9c74a7b2b03b715fbf6ed81ce79b86b71aff93e727f4c39e247e9c55acec8063c7b09b03bc5921c1eebfa9bc0e5a60a5c9a31a6075311227e7078f7225a79fc41b86c3697e693f115a2fe0fe109aba19dc3f2b4ec7a206d329063599c11e6fe61e63cb6474c02bd6885c08836cd1158bd90041028dac143870f7092cfdc5635226d41d751e127a7a0fb0aacc91a1e58436b2e61c35d3ccc0455684bc4a413c80fb64342bf8b49d8446ba223a1d61cc9b7bb394fc6ead82f31ca122b814f63e0ad270a9e9934b277dc3f5196c6eb51d3a2e7ee843868df9596d738db10c68fa586295d94e5c3a8adf0dedfad413f069c8a5912a521c19725bce2a00279f2de3e212506ccad2074a209b0140f19bc824ffa78705d8adc49082a551349c2ba9ad40681cbedf8335e7dae1db86556490f1277accf517aa13c6568965958f505098ebea775a0cfe4ad67688d925601cdf30d8b5df62cf9f8ba65ff0f3ad619bd7595d0fdcc8c391bab87be686b8b2032776abdf3ae940fc9093076267e6b37c92410c4ed975a3ec09e0638160babbe5fe34e95d6bf31c5fc72ed5545ecc056115f2823dda0b1e6bbcf0b5eff3a5fe03c7fe39c6ff1ad22793dc525d34e7d7e7d6d057337ad3a3af486bfb98cc04f90b1925159240cad2e28b2df6c386a4ab7f598ce3f62879c41530b49d0236422d5a666c0555ed7dcf2f21964b5db08cd0a6126ac0cc6f68003c1a5d22b2eef81b803415716861bdf75bdb97b8526f2b17ea960c664cbc18e89249d8253132a133fb06c3e2602a061c073db4d6680ef9c1cb58e45ced9b26dda663b80cf3cda8174952f9e0d3c2e08d9fac701df51c637eb6df850d3588fc6fe6dc7f5270fca725f9bd19f519a8d7cca3cc5c079024029f3bae510f9b02140fe238908e4f6c18f07a89c687c8684669b1f1db2baf9251a3c829faccb493084e16ec9e28d58868074a5d6221667dd6e528d16fe2c9f3db4cfaf6c4dce8c8439af38ceaaaa9ce2ecae7bc8f4a5a55e3bf96df9cd575c4f9cb327951b8cdfe4087168e189c42c9d7bbe10ba07b3a8d07697a60e46c299257df0d4613d8cab19992ee64aa7626f7fd6ab4ef482c7d7fac635229d92f5bc85fd8f9c1adc5659ec93ee9a512b0ccd50a57d1cbd8e6a9ca6d4dac8eed8782f38c49769061f734f229fb96c3e3e4aaed78f3c615f53225e9a488e804941d458067b10226f2f6af7866498445807a57add3df10720f87a869fc95932f5f590a1b6ca02af9b33c3b8df8b920ae8afa4992a57a4f549a6f77a7dff44c63b1b3471125876f8d35407f9f4bbb0a6365dd07486845b13218423a3fc93562563db482fe0ce73e45ebabd248e9df9008a3aaf71b96c2049f2bb8569e42d9835b55e5545e9d3025d868c6da075d875002c6ecbf98ab8fa7f0272a535fc7410df78cce31af5102a4b91f39fd571152c8f6320ac75c210f29d9bd20c6d0d11c80cf64d7816cc2df394c816dc2b4afc27937978d84b291b0e8b0303417bdfabc8a275079ea135d16521731eab0ac7346df5b49fd9e587825831822cccc53aeb168b3e25dc23f9a489dada3295dab266069e5dbd37a9a4ecd878627536b5e679bcad99cdba04e05066a7447b2103d139fb75bbf9780148029546e90706b1aafcc2f2cd28c1acb27a0471fb20d7eded565361187c26543a6c9785610ac423501d2e40245d788437cc6c1e454a3f00cd64164cba6ec80943d1e61b10a5f9729e830a81e49468f237eea5986b21e2a53b0c4c1deaf6e78a2bda8bf23f012c065dd65e9c56f7175f7988b7c5b4cc4742fdf6febcf03c0a3eba2e8df03546e54754c03079c2ab0f34c641ab8f6a74f641dcc934101469b98db776f4ff3c9bac9d4de78a0070dbd8d7e6c188ddd3407808a02ef4039ea57ddfec59c8069a280a700ef37319a7adf8b2a1b156963959540111cc487cd517dc9c1f8012ec98168628618df4acb149f92bbfb91ea4e2 +MD = bd8fbb9bc746521cba8628670493cd851f43b6f0263f49d3b6259519fbbcd93cac1c7d215425a26a73a3c0f28aa18833a4811e3ecabeeac0917f2e18f7718c8a + +Len = 31120 +Msg = 73dfee3b9a968877082b72fdec5a890239a55eab0ef441cf757f9eff51ed8dc392bda427abe60f7646bae3463610b0b4ada256f1afb419fec6f7f7b3f8ac3806f60c488a96e8c236838dcd6833eaab291af58fb31e4aaf314a159bc5c633cdcf0794816d43e4c73e286ad66ccd30a3e9e964b2f843fe2cf069a3333ca5c972a72d1df8d79a2146169b1aa659eb29bf7a80b867c90617b8c38b6766217cb84f15d06e54d083e968474665e637751e286649b8552d4fdf7a33182bdd7b32468ea158503e60e682545890123e0e52570535aa2e252c069c9bc778b53f52b1bc54d32d8b5e90ab3533d1e0eb55e76c1c7f6d0de07ece1397420814cd35afe062cc34b7e75b67ba4a2d3ba0b6d4c9aab5be98d998091c5e18987c523d6799a77f1b4b5f2cdeedfb09691d373c62bdf469e93d761c6e1dcf67c5ad9bcc7c18ee5c6ca08b218e2b57ba10ff0d45a8ca328229e54c3454d94fcbf02358411d349d42e5bca48f1428b4a449698a994ef84c46a517c3aa6359c48e4264ef65f1f69d77ae26133e17edfc103de416fffb4f2bfe865b434544a418f6e2faca00a165d443f0663ff64080154614f7194057d8b5f1f33934cc9fc2314cf86d4fdad4892bf0d3058f7f37ebe98ef52bfb240b9ad369153afe081bbcf9d7ae43e8ba336b8ac57e8a6da0a3365e3008072473bf9d6eac13e509c1619956e12a06fc696512da091a7d40232c675e737713fcf51aea6c0316c3bdbe196132b0943df2b013860105ce676fce7b88d0a167d7ec72c588b7b6465a83c9ea1d748d15713455e5d0e901c3cf646a38a09b0002dc5ab1687f350dca35c1a87cd404c0d529292082f77844203d86be0bb8a9d970a9af7baad8d050cbd9e024788eca91fbed39db930398180e393d949ad7e173d9c65498339a6ec670d049058653ad48af45cc4cbffd30c3b54cf1b290052b1864bcafd0accdf9b8e2a163134d2c982c1bba4a3dafec288e3cfd0ae1934a6f0e39122aebbd7a586e48d495167620708664d31c740bd868c1ccd5f0e94baf959e81502cb00da87330cbf149d5a8381e9eb519a8b97acad7a48c5b0c92623b861064ff1ce8455f32469381e6198c7b8abc341357d6a4c85f7fa517c4a47df728ac09a6645b0ca77df7c70cd4aacaf19c280949919132dde7993e9181e647e964ba99cd6bd10b893c8d90187a5009a23d295d43bfb4cc0e583b8052ac21651b23813bfc9912ea0c574e152f42d3f1975309588a4705196598ad93e1ab1d82954b4a18bc56e55039b6837fd893fa2bd7c70e21a5934dc2e990379ec6e8a2445dc55d57940a14e5164273f59cd58e5f6a8281e11c09536ea22821c98ac978537d7a02220d1d6552aee168a001715834596baabf7813e1c69949b23eb4b86658fd51819eadf8a13f067ca8a791cd1d53ab69d0e43f18bd72d5d93322cc1c36fbe33121f5ff01905328fc7c33d452a86468663c77fc80b0195ec1eca05a5daee339042b4f88a1f9371b472c6c5168c00e984937a134b282633dea25dde7e397b907b1e7d3d240a593e747007990782cf944fa078a7118fbfa793b2604fa15b82453209daa64475d0e95e2408319e8b5ce7460f4593a19e3831a9b363b1c5ddbcd273995fbc61ce7502b0233b1752223352e654837181d01a929f49faad422c65b8ae416ef81290b02b48e222c2b8c3ed57cf0494b928c1e11ad2da77baacd427785096aae1cd593cc356e551bc390cd5765ea41be30cf0266ae2e97d326c417c91e90d75f1f874555b88a14a7c5959a62f23976b77a4c754e35dfb7ddd1700df85f61a62b12a9eb4644caa7f8ba036b9f29c6315ff96c3f7148284ebe3239ecad50641f397ea24b46e21655352a4109b61479b9dd34972779f2f1a6a1d2887b8ff88289b2ebda2efe995668879bb93c4ebb3a585ab336f70b382205ac37c383475fa12ebddfb95b157172261597d2cb0f24f254feffaf75d224a3b407eb54cc7c8daa5483e4a79c347252d808a5f480a35987f6f09f6c6a73bd5cfbdb76a11ed78b86442b810cb703a5dec5874e8721af62e386591bd39d990b3521505e144100601b46de3f50752911ff37bb18f377de45ec4c60fc4ed8ea1717708d2d13fc9e1453a1c4a4db9e4fbe9b74cb8da14ad50c8c8f2ec944e10ee8e82ebb6a081959b0159f043a15fa1cb59bc5e035f7623fbfaa99ea0a1d81ae8692a4019e5a5edb3a4886c789675039fde87222975e86c2642eb0bd48408072fafb1a88507194c9bdd69f3418376a4d9e68c3b83b3f800605ff1dcf0917a6014b0dd77708b583ce3ea632746fee0e01a10500cba90016b4a9072847d809bb0481ae25f74f8ef290c7a087ae16f505fd0da670826a0b1174592d184e3a7e8622a5c84a30ab64aab75face50b96b217e8ea335c0605c638ed1c59370bb9ded004be428f49a79f74ec0fb296b3758f0b6b41930c7e029b55c8fa73cba7dc926151d4043c6bc8a716d7de9ae0cd3ef3ab2d19b0c813eaf12eacfb641d492b0001b2f0f699bd98e4581fd44c0c817646bdd77a71d8ed432f8d422812751a2f9178cf1800ee689ebf046cf9b161f9a7ef0a106cbe833398bf383288661b426fad8d4f570a8293629ee06856af295a58585a81f87f130e6e08f723234856e874bd0adbb2fc9e676deab6b9f22faacf12e875d1259ccea54f7294be02a16f34c427b51a33be8a0c460c4c07d51a2e7d5c0722a9fcfefd21c265d5aa2c57ae4fe95556b5e1388ea9756a6afb0856fb8fbe1d2bb1838be7a95049848fa9545b616badb753c453f266836eda3c92cd592bc0925690c42cd6667f866717827ebe91d0999f9de5f5fd6cf77f63737b65927aebcf6cefc7ca107fda8447e8bebf1f08a280d53a4b07f8e35904cc48cc08eda3c63a3475924bde1de6acebaa65fec5ee68ca22d3fe722bf33267de628c9db1ceda3c78cb2f9988682d641d068023f96aabde4e10071cdec2080f616ac30c2725ad3efe98a69a56873615a3a3161503a4f22621986def597b66641d07793d97cdc9a68f85fd3890a38928462b2fbe2bc5c509631438d2e344d1ced9e2b71748f1b6ddf33a3e597de3af03ce43d305b9f5acefdb2b71acc645d3b55fa3848484b7fa4cf25e71e766702f1003950bd2f45b304052861f6748a8f38175f1e96c91471f5a54999cc9937191b6adc9de0d2520d86590cd4aeab292ba9ae474edb5b8caad6ee095c9e74c0f5e5c9387559f946b2dc45da7fa1d4c2dae6973d5984841682af25ff7ff29d9721d6c7e76776e8965b6c681bc38e85da15954ecbcf20d7448204d9a6a477781c1564d363e4c634c36fbd3c3b50b332f1643c415d004ec999316e75694a8b98e2591678388dc6624058454ec3a7ce608b3f222b8bad5cef77095285e1d2ad746c557222dfc30605bfadaafc4f292e931a0f0d49b226d99d708247879aed5b9f2ca2fe6fb414f37373f844e13865524f206c54487aed53781834b3f6eefb248d95ba21bb60041d501f90a97a19dcd80920df7d84309148e3d0892e50687c86a45a1372926e00f200053f5f436e003e35bdc10fa99d9328853bf82d2091f1f087cc37678138ac0027e73cbcc99f7fe37939c98114fc7380c0ad1a26e3f5ec00bc7eae77045a55c62c18117879389c662837415852e7a2d01ac667a226fedb2596e3e137a83daec2712a65e8cec3e644e738d11bdfe9b19517fa593546373fddcb9e681fc97d1763bb9092a456cc0dfe1aa0e132387d105e3ccb7746ee199aa7af00bb96047310585fed40219dab43f057220a41e90c5f89fdac4a5d6b207c01d5ad4440c5ca29eed292c6f7000c58da111eb4b16e31efa6df3f3aff69e6447ac406aa96a9ece4b5b813bf8b3a499d09cd0969073468513355d6c19346c58480feaf470e0d45a13b74f2925488fd810e0f74afb9e82a24cdf61586bfae68dc92ea09b22d8c8f1ffe9db1e7e98892b5554ce2e15fd5f1cac5347df2eafd2a8d5f1aa8746b9403915da6d418c0b5a3aa8e09d6b65f9a49c3b7a5728e9baf95471404fdf64eb05da5f704dbad60ac9ac106cab2873fb1bc9023ad95c24852337a703d9cc04d6df7de594c3b2e4fb9f2996e0418ec8698a4c087c14a2687717f97e228e75afe295caae2f16513f47a45b4124a7c5ebacbacc562951233bf89f43ff85b703ec77f168c2278fbe6e57a0e7192125f4642d73f2f227d806287081bd30149b9d44fdb90029667622f9925b7826bd0343bc537c66e660f174b447860e1bb8846c3edcb639ebd213a4695f9cb471e188db7a859fcf3abae49569e676dec857b897627cb0bc1155ad6d45282d430176fde4262da2d5f41ff890ceb319d73dda804738456f30a3d68da41554d4cede62aa8549b24e211e76768e6b17379f842a24a449a0ba3ea73cfc72624b5afd118fd7e76a7c6b5bbfa7a6b6c97b97dea52decd51cf35a8e277140ffb2748777a1e3cc3211f3c12be099d0316f45023da6cd200339a718c72a5ca172903922e59648d08dc67f173788363c26e5df406391f107552925ba91b9e569f38101f5eef9a52d201288372abf6532beb4af19fa6d81eaf473d40896dbf4deac0f35c63bd1e129147c76e7aa8d0ef921631f55a7436411079f1bcc7b98714ac2c13b5e7326e60d918db1f05ffb19da767a95bb141a84c4b73664ccebf844f3601f7c853f009b21becba11af3106f1de5827b14e9fac84b2cbf16d18c045622acb260024768e8acc4c0ae2c0bd5f60a98023828cdec18ed8dc298a306c38d1ece01509f3265b5f8cbf441f0525097e8b48234bf69f65cf402c7540a023ed231ef95b222a900ea4bfaeec02c6d8b3b01648ad7a165237ca6b557b1ce287b0ea137f4ef54534070ee793695a9078ec89bcea389956878614ccbf917b61f8427b7cda870fdd92d2d297154262fc65f28ff1a54b2651afff12d6f36ee8c906107bbda399ce5e2cf0a430ad0dd86520841757126bad725bf1593c7959f16221894f5852ddad3172fef866b3321755491fd44fba009b42ec0b6c4fb9e901d7eb3b8acf70e94911f54c538bd0559c5740042b6df4a07c3e00bba0934d92a684b39592a576331e5a44672a227ccef3e595ffa1146ac1dcee0a70baa9acfd5c132b361b5ceb519984b0ee00cd2124aa8acb50c9e574fb19bd99c8fef5407faeedb28b796848bb372beb3f5bde55ed2cb140b60a53bba2df471f330208b09ffb8eda04315a06d693aa53d9bff8939ef6f3a68de6e1975f79f50b3d484665e4ee71124ed794be3a2baa7b5b918e62a095bc5d46e401a0979641fe465640e8d4d43eeba9d0cac76c7b86d22375123b988585e58f86566fd190d868eca08aa1e66932d6d3b14ecad3efd9f8cfcf2696ed42eadfa642324d941602cbaebb8639a00a17542afda32117051e4fbf243dfd255a559c49ac37c265827ba70b0bc618882336f43e1a6a729c57be478008cae6c74840bbe828c976ac628d7b6015bcb705612 +MD = c1644263ab1ff816fb1774369156e8e7001e1a164abc73f1bb4caede515eb2cf5708b21612f1ac475e00483f0552869603a7120c0d3e5a4d15380bb6d9aa9e82 + +Len = 31912 +Msg = 349b0171e52c9de8e064c642953b9cee4936a32ec7461a1a52ed88e9dfa2976c817725db25f999d47f5773a144c728ba9a262c8acdde5076430d4e1cb2e4a2d8904d9c8dcbd0b4a2bbb71d4a55709d09a1349b746ee67a38443e255d9a26ebcc49648e0f417a96597acaebc62efea3e346a7197112243f663cc63535ff321a4f940622eaedbfe801a6da069c3939e45171c9cd0b2162480a15eea52b49ced66a597980a5396652a3262d9654dce9055a0ae0e0c903663c2bb6fe9ec8e0c3c7248006d1c88c397b45e20bc27781d5b107f935793320f8c4d2073e47922cd89685f1f53ddc4dfe0cf2c2beb28c8fc68e5f2610c1d2e0e28806f0f5c91396d7eb95958eeb68e67eacafae8d8f1b6e84446a79b8e02daceb2fcf596d4bd384866d5d521904f4be8104868ebf81ac85d77c30db77fdcdeada62352aecf6595fafc5e411ddaf083dcfbc7e4a9dafc83e87deba329340380478c8414bbbf12d90189b32bb23152dcb2f7b9fca6f42f6005b110f6855d2f8608d0afaa42265d77d8a965036335dead06ae9f2f77d61bf341cbe376305db9568e1cf691e687adf90cc5e456c55b0c8b448af7eb70e35aa40928c3b0deb8295823bc0949fd757ce30a89c1943d1364edf91754cf36be63f8d8524224c4ff0821864848510b5252cc4e4f8d5a5ee1604ba0de26294dd9b0683bd2df40a784de39125c4445a4b0b7fb649198079f57972ab849fca80aa7c888a0150b92eafc041554428d763e132516d9fa822a72e86211bbd548ca11ab24c0b1b357aa03c7123cc89574815bfc22951ae4cc416e166987381a8aedd7765da6cd1833f486789115ebefa9f572ce290ca3dae6cb056405f1998433a1e07bcbb17ece20e0e78309373a9b8e21072ba0d401675255cd53dff77cace374b14e0767234fcf1dab68d3273143a1b2ad773281bff4af402a585fff3dff1ae4ce4f993e77076ef946ac975c6c528518ca43569c3c1d5e38b0f3fe7f79e53a609bf2e9bdd6afb1024dc0be5d484298d1e202759a124bdf9dd5b9440ead09d2769efa715bce8315d72547c08051be5d6c895727f1befab3ee1d1ab90343d763a57bb8d89ebb3c0dd661a4469c250053472493d639aec46bb7fb8ad623dad87e5b86a087fd4935199e9758a8d71ed31af0485b18e87e13777a05ac13b6ce8783275453f80de4f8c97e1af76fe7cb810506691f6874897257a2afd10a52bb5f02976945b1371b118e1380e3243497a4b1e81b533d647d6b9cd07eac127e2de97d1a39f83c1f57f9e7fd4dbe3e442fa89213b399104ea659b771d69fd4af7291632e4ade011d282c5779f5db469cd0273627d6437989b0e728056c1ec94d35f155422079a8b718236d37fdecb5b5458b1e830804d1ac197e6f1983cb58fde483b4043f6d8b73847989b5ea450423ec5eabc3ad3fd13c3c9a1d1cd2081c380ab31fd31c0c21e909894d523f86ca4f311c6e485a66d0a0b6c4828dcb677b722519f93d2ad8147e23ed28bb622460bdb04ef6af740c587004886ffad46c0f32a032b0b10073dba9402f9c4ff6a08fe5e660a557aeb2e120a24005d281883ff0287806cd2141d0010aab189e518d706e4fec2aef5edd03491ca614a3573e96410a544beff1e4aa0bcfea4e15373deaad595bc7c4f8fd274fd004fcebca11aa9be272009816bec2202c878d42ec4427299f3a3c772195c5bb78f72f2a5e83d5673d3bb563f432a0f49ced56a5f532ee698e01d9845d39870253f74bdd8917af39673beac21f02ceef8d964acce68c88f3a24d2f6b004ac3bb0d7fa383de3fa0991cdd0140fb91b4779b1cca1634b38f4e8866ce99bf6c044c021af69bd28e51fcbaa9a95f1e51fa3331eb6510743a79d08d09079eeeffd14bee3385a3ea663beacd1c337afbd5f888ee8cac5a09a3d1304c8e8af91388a3210e64013a9a79a6d9c0cf40232890481f2d6af04179621dd42371c926d19902620f26d9ae771b5b40321d5ff60913513c7b20e1655807c832ce4d42a68d9377955cf67f9df4cda1b49d90d35221c1bc875428e0441a0758e2899b7806bc2a6b21644d7387882322bd6fc45ad6173dd27644fd8d5c23d3585a01c6d9b5f1a0659cd1a655d9c5ae46b1352246d03dfa5b8fda09391c2a0e3f0fb369f842a2a7ef6e119b872321b186466a2537ff1a69804a6ff68412812a858a1aff541b63a3712ba09797e210ef89c38b679ea1410e092c832ffecdcd9ac43fa4f16dce9925934c0b24f8a537ba99df2543fb75367a5eacc02ff9ac53d163c6edeab5cad790be55bdce39dafaa56effa454ded95f10e9518371153cd880ec865235bcae93975acf34eddbf1de22518ba514a94c4f8441a1699dc20db00be7147e7cf2d8518c011f0d1e4f8856c3ea2983fdfb5c7c26f012def0908d8ef4cbe7cf2ae8d685f149cba2da051cf90ca15fed9b3578697b5d3c4033f14aa9be0376c0ca1f37c5598d6b92abad1e496f1f753e56f82e9c14117459b274b3a4da3657ffd5065a8447546558fda81aac6dad2ff2cba3ed8873955178068b5704cbccf1e8c62eed472d275f726a7670a68ae2d6a763d943b30c616a27aab5a34e254feaf838093e828d8e905b5ca8decc39491fc8b9f8bfa050fe04e5198436f5593789ca8515ecdaeaf2ce905eafb3920b5851d32892cfd4e3d3e83ccd67707eea0c74bc47e56694c7ec609deb0b8d7c739913535a37e2c5377b5a9b40efee6f5a472269eae83a54a6d3dcf08c4ccb000473dac5a9489705be6cf28d1e7e1f2b2c60293008aee6aefa61ba24acd3fab130712ea6a0555afafb11368eb0a27156c2ffefcb0b99e9e854ee7e96d7419af47a297572c9debd3980209d2ca1ed8366d06eec877e49b2a52902a0e3a6063a6e640555b6a0552c25cfe3acc35ccfd3dfb745b5f1db3eef79f926b78763925773608d25feae4926643cf2dbff6bc9c115fa1cc296acd9eecb37c328feca9650a802398c975e3b4a5979d6a14d395c09ce1b4c98e26dbb3f0d87708bb63562d470bb92f03d3aabe699e8f7a3195006ec5c8d6daf6188436ed54ab7364a2e8841621f11d73cce0bb99a2cee48004a4b0745e2e88c909712eca703ffdf27208735f08f3ec83282db01de9813067e72a8d91e9e55a6fc14aa36f745b2ecd9b5e000a09e8239aae3ba7ddbbd1e75007390e05b222d95008b69ec4a8298d5de59136ff6cf84b1f27afa7c062e690a22d7a39b6010e8bd4a65d25b053cea20b184a1a26794aeb7c5c34b9b025e7b3c51f94188d1ed1fa6462e8431ebf75f53dfb30b66778078b181270e4954bfdd921a630b3725092ae6605fffdf332440f5c57ec11abb056b45b140b30551d4f891e89f6104ee0792e4457495d18f56377d1f42533d86a60ecad29aea5d9e3064b24928d390716af0264206f6a7550fbb5039a8425d8ee4cbe7618014c09e549a79b879e36873a5cb23028182cf28a34525911b0ee918443af1eaaab2ccd6a4126eb31d00db494a7c60e37edac78ed35d53d205296ed746d490da7554d0ebc154f7c58ccc8786cb9c7681496f1edbf27c616911226d305f113acd7a6b8b221eeaab6c43a6fba09ba3da588ba033b4931ae4b2a97a52a80f89561014774a3e2f4c0023cc00862b4d1ae2d5b01eb48d37c1346b48a1bdc2da95895efdf89c7464e18c689099d57b526a4685515b0fea530806ef69290d0542de3b16717000897253b6b73bb358354e2a6be3d9b5a4306747a2bba580dee3dabbe1b3297e04d1ba0af5ac27fd9cdd92d3d97dd3ef20140708be5c684991e304c723d1806317d1ce8fefa3efc901d8b2eef5bfba47f1f994d3a04e3bd3d487438867ee00cfc82e024afb2afdb625bb30e4772607509855a330ff0d9ab00545296824554524843b07d4becdcc3576f99f4ca44d45a991bca49931270f7ea2a128eeffc3a801da8d31b590f8e5d7842850902391ffa35c933b84dd0704903b3fc4a540a5b3e8399932561838d51ccbabf7576ba08ffe877dba7c693a04854d557ef39d77f3283fe36c4ecafa1465bc08e5fae2d580eb70d0b3f84c4c99de4796da826cb6d0724bf051f81fd92e42e3d3cef33fcd7d2ac730ba811c9b3f0bb88849ba44eef636fc5485fa8d427d44c170f4f8c8d4df0ce912309f50c26e8e2e8e5f03ac8cbef6af647abe99c29bebd3850a4414a8213254f9b8ab6f3ea2d6083d8d071a1ca521f3b492ccdbe61498a864619db9a3ee1ba96ba55dee8c6683d3fa463d041b434967d9809dba0941ebaeb3bd3e1e44802944cca8ff5528441820693d0df10513fd6a27a6b9cab8de5554e75fddb92691fbb5b11638199ea5f36bfeb4026776919e793387a9647134564963dbd510b69e038a9d8f70c24c16b6152f5da2edcc36ad139195d53ddede6eeaddb3bccb710ec122066731d5dd00c0ba6f9c77ea828db9c7b673d5bd3e471fb7a97a1d4fe25ec51a705003dabe1eb3da53f2e9e446013514068413493c08e94e5b914ef487287fe25fbc6f276baafff360e38171633bbf8726692688349e4bfd688bea7fdbd66208491ecc72724015741b00c7088697b97f8a7577f0d461c86354dc78385cf30bfab0f9a4124e7894faf6bd43101c9fa38ba74b9ff9881ddf1ea51570b48708ee382bdfaead6cbeeee6688b5e3e91ce1e2a014e0728bc0d007ded994c8af672895f1e23149a598d93c4f4ed90da72ad79e92d1f35f50cc9dd0f730a941207ea5dce0c86ae6fa15f14252076837a5bb857378f11b4f4e6deb541e9dbcfe047baec137b5cb4a3b0bdf0758f989e94a9793693abd7fc9ed6a629c3c67f688c427ea4bdef27cfcd2434a93476e65acfe85a888c07d4855958dabaf37d77e66c64a0282bdc7a6842582dbef09ac2407294f6cd9f2799d7bae9c6e95f9357d2074ac9d6ebd7b716b9e933a2284fbed8333bb8963b9f8a7c4a060525768c91a3f35146418c4580438a33d0e34a2a5e8a68592a42efb448db7d4a100fc6eda7e4a704cfe87bba488739e47ff2e49f13ffb859b6843a2a378ddb027208cf2b1d0c98f1a15c38ba824a5f67ab717632617079ca07aa9945e90bc9db95910db973945f9474ed51aac0155139edbf7d78d9b5432678568bbbcfcde0421538e13d2e145169b53c452f8460b5d7b16d78d6ef069b0ba2f89fd07e5cb4b25b71181aaef514eddcc981ad31c4f3cd80dbe6d1141ce7c5f201344857209dc8e2d9e0d698bf109d7605a5987abaa187e6bb45fbdb40c001e010e7780cc221d235c3f9f55dfaeaf4fb811f95a1aa35936d6c14bbb71aaa3c17a837e3e1a9e78aeedfb1fb8100fa80e7cc5e19592c367c6f6ee1954a130cc0e32794108850354f587db75d8499d5cdc537ef97f3a90aaf67542b1cd6c26e5cfd2f8a72535db18c2d3e58afeb0de3480e54529623b948b90f8c6fb71f91555ca01089adf51ad2edb792344716d5c96c4db215984bc57705a2a80e087718584c868b2027c0202fd08209d8c7ba99feb6edd1b712fe660c21eb07a4656fbfcda90affdc5456f61ed13705a4b628c2d9c47923a59a9e137eaa235bc1727c004bfec7df2cc82c15266c21362676f3d900f17a386fa3ad4644eaf5f4c3942e8249ba27a97ff7b1f5dd0dfaebdcaeae550ae +MD = 27aa551dfa2fb1c0f4504f9bdfa68e50b4693d9327612a3fe8984c00d05d9cf6d3a0a8d0223ee5957504ea56a228e98acc6954fe35c7a577ba6be19abddc5dd0 + +Len = 32704 +Msg = c8e2e36403ad4ff9f60010cb877a57139ac1463a8522059cc377128dec4ed899e447841053be14c356aab00875c53e04d4ee3129adcba1fdfdb2a11d7ecacd82d66d22040ed1131c45e8d8eea6840a8797bf6d63339a0d32fbe48cdbc85ebac2051c66471a2e748f2b80308603ffe2244bfda3f000d76ec324d57acfb351c7dfd81cf7e0611d60a1713b5fd7747eef6458707ad9fbcaef39df4c140025ed1e63b9347fdacae6ffdc7de10ee9e24858ce27e09b250bbab51b961302760778e4d60f2ea33a3cd078c7b83ae4c533a646eb1e15addc1af1ebf1b0f0eb39423b44be41d00d0aa124f4ea8a0d8a7251e0e141a6d659070fb5b74495ac7752bc7e64a5b9e36552e02b9ace5c24a7f8223e505a28ed47acd14f419aac0f4fc85f896c12de2e5218e12a93fa9445e4609007bcbe0a201ed64a07b27e5fe01ba312a3858e187b7d668c6c06f69c39e9b182854cf3b638868a6124327515e982ebbc15d7a0cf908e43c9381c4bdac85df3dffe298392fd29d2fef0e80937f02da9472889d06b362cb880d5fc80b8b9e92f91bb7af60836acb509b1fdc12bbec4e59a21c3a65435ffcb998cd01d9cd6346c7f0468d27eadba3c6bb099255a1beea59d4bafabf355b086fca5bdabf0e5e7b291211ba15e28f96d0a35e2be2cce53f338ed7266ae5ee7f19168edb11bafa909af59baea0f701152cf8703130aa19cd6534e375fee174b13411c88b785fc237ac1f56e36f94dabf3a2f022ad5a5a7157d6b7241f1c4985f4f20bb5459694fc0caf3d5e0c84866f566cb6681285c2797ca970612d9ebc3d9c8d7b9de4b63eddc86179b3f418e504851322fcccf4a15d4fb5c11711de381a14fbb5681b4dc46eb4c0f194761d301388817c06630ebfc5d8e0f26e544285c46322013d73c3ec56dbb2ed2a1bfb3043659c0cb05d3ae3571e134a8d7d346ae491eca64473807f3e4220b49c6a1aad3d264e192044e2d7be2937129d141bb122a740eea7a3ec44cdf3f38f13ece36fa8d37eed7e9f6d61a0013293c5a25f2025ac051f8b8b7005acf511c6b727bc3d2d7214cef3f7434aa6afee122eae678096a825821ab47288825064a1afa50ee0740df705a7d3cc59773a51daffc09d981ca3875f7ca55c96f80cd36724ee422124ab11dac1bb6f58bcaa45326160683260a613fed9e694f7b63245623d88bec6e55549946937970d1c07b1617c17301409b8b1a65800847363caa4d823fdec976112877dc9d0a942405a7cb0776c5e07c0e249a1217a92d2a7dad712fdd5335e3deab3db060d0ebdcfab90677be858d32d2bc3355ddc28db2c6cc658f496fae124e5b6f74b772e477200d4ceaf118740f79b07ab34afad57978759f230caabe9bc0c7619be9471a7d163302c3c725316c73afe4bcd79890f93347827d8f8ad3ead66dc8987ef40a793db8ccb4990251c44118e5c51c523c8c67a0b4015a968a8a0fbd08ecf0d010d6070d0f1fff5631b1727a028e718e54dd861fa850e6444ef3dd43b71be781ea2e22be5e7862877dce7841df5b8fc366572f12d3eecb1a9da2bf8037b7bb7fd2ebe13b1f505b1c7245d31eb0cecf87ed73c338cb3d618ff33136f12f12f5208799f311d62a419bdbe2135f4b5aa95266cdd2e002cf522aec09c424e1e01d1a54a2b8b11788de6bf71da981e371a5994ecfeea6ff070561e4a6f78a1491abd3e6a0a2c767de5a33704306353dc65ce311f4670c348703db7983319f2b9a19e3aa2e51932bad7d58c40cd9d7aeab37c65cc5ec7e27c1d5de274912e28b7bffa01b8645b2f77880626ed564e7baa2bea99bdedf7b6d49e4105a431be2d8b9c5bfb742efb53fc23bd6dd3767e3e64f6a033b89c0925971c6e8af1bad1e87d5f4890a0ec018890ce83c9b9d336aa603b269d861304190fbe6ed723d56f41d5314a28024573b57cb1dfa268157da9e523053deff9f07982adc7560229a120da39e82b64e25bc209f65960a9e55c233cd6c47dbaf6d62d3910046d555f6e6dd5a0aa018c6ac0967cc2796b42ebdafeae7bebc4b1b4bd1c7c10aa86e61edf100e8d18124286ab1b2040c82bfbceff23813b02799ad8ad3093d543087b0ffbf2cd29bbc650de23383c95cd099e36d37afd3d92063e0dae50c586575bddd9caf95a9b1a867d1930d517ec106bf1cd5feb6caa22d265f9c9645b4c6ce7d425540efc0cbdb890e0dadbfa6b1ababe38aa5f14a93b45d64405559d4e0c13289ba21afda42dc652da2a302d3a725fcb22bcbc3f6364c75b976b09d3b5be49a0e2bb03a38af1168bb027bdf882a0c0e0319eec33ff25c0ba9a016945a80bf105a3a7b337e791120209da6aa36b2d47c70d57d538a60698bcf4d15d3b5079711f856f1000e29620818e4920751ca05b475fef61988090b7294de3cefcd49232b6311a0448a487aacee77ec5b7be816327cf6f7799b44a86c94f3da2d15dde9c924eb0765555ec17b2bb8142b27859c93004defe856bbd6b64a0e9c30213e4187a853a4d711b4ecff5b25880ab73aff42aa744e0a2cc6fcfc1e8ef17d71d2c0c387ebe73e221333a5f750d66edd60b4cdd5faa043900ea1ba9d0558897a43ee192e047cff08d26c0b8aca8dbbfcaf53910d51752912eb6b5e4ff25fd8ccfa3005154da49e588acc9c7ff2fc96877f6238db193b2f47f59073a1f675dfcc7e2cf3d8181c907394fbd5514ac17310495721a9a260ca81b5d7773d5219230b383b81d104337a0c996042a9626ad629a5b8e8038d948f6294a6f56cb5d8370bc0e22baa8297bf65f09060e2ba6734360cfe08634b34e26d1a656aca92218040a0c75ddf2397e5124312bc97b33511b7f79cef636bc06803dfb943d16793933c405184c957d26fb4095dc222fd52f341ee1c197e5fd594c92d091d1bb68ce46137f75d03afd5c3bdabe7fe3ef94f5d466902230ea7d2dd1fbaeb43040fabf851e04f33089c009581a327ed262798b447f0d578aec456c589e1c67214c34f4380e1bfa3629ce139b297b3fb8318bd9cc90e0ca6d945bfc29a3a2126e872056a70a4df2a8c32f644c2f212c5c04d3c7b3c192e1a08ac9c78c33c81bdd9bc5cb1a3b20434ffeece2b353aaab8881573e433caa06ed7597b3c97617eb372d2b3cd8c81e56f3830b7717bea02602532124c226b0a01afecbaa279316ea43e85b922adacf915cf9970ac2988a049320396379aa2c17f0cc6f93efb24e80cb715cb35899ba5d51099582fa08f1ad0391a5e1b0eda7d237888a556afd451695733689aa2c67239b5b0fc908365c891a4d6f88af1aa93bb7d925dadd9a85126b94f2fb67bc5e4902960cc6344b5300a0fd9f3ebd57b8b93768470993b196de137c97f0d97028394e639561c56f5e7a5c483bed23cc5eb481dcf8cad36bfee055d42d5246714c594769b18205c9065f17d74d7c2aa322945bde4005e4ef4782fb44bd08f7e65213b55168113a82d2179951dcd317018cc28e1628a20f66f82bcb734dfa34f8c3ce5fc2c2f6adc14b0aaa5ff1da351025a4e22bb78a9cf89a428f0ae81045cf25f10e65c819a6aff7a012a99379cbf874a31ec6f6a3d3ccb4310db09332719203e68ae281636c74604298d6ca9820e102280c8eebd6fb0bce5f0e0e5848016ae2149be0f6ba49370e56068e9e1f7df25599722ca00c5edc713459cc3e3a3d7e4ce309072d0883208846227b18f62a53f75f19471d2b42682318b8914df06df7c8bb9b00303363595678b5433f056f2d70e3c988681cf0d76f73f1058e52d9fcdf041a73072431070056868e1c3594a8468c49968bc8b050daadcdd10849c9b617264f07b8c435550e465f05b56ce0eb03c1631b8e16cafbee2e149dc4bb844cfb89ff654dfab76909b2064f14939c1f2eecddbc77ed8501325f8e10c89253e71096f535cdadfe6b790144154193116b5074802350372a8a2ea602d31eb47eafe0b3f81e41c75384e49be1ff425284f8f0c114f821db01bd6b6c3a8ece0b4dcbf249cfc8b02ffedbd4e8a5b421ba40ed963b61e2f0c152c3701afce8de7d0764cec143dc22cd479ad05058dde6b28c73cb4a2e8ac7d165c4c516118958f4f6a1fd811c02a08975e6613bc1219721afb215564598adf381e7f3ca411a435760ab06f322e1304bd2ea0d11a9293ef1f2d1ffc76cb3ab0ff054819c5343a88e8ea9717e1c22ddfba4cb5f3ad89de2099df90e056c83c70df834f7f611ab8e80c8c4c789d46cac8134b4dc1e16248c51f851cc780db10bd5e2afde3f41fbfd1756248e7e1068a7c5cacb0e252b6643b14a02c08816e57f4ff6ecbddfacdafe3a7ff051c499bed5b0ae387cb8de0c0f11dd33729e51c62a647b141c3e1af197d18c5195c337153e282724ae3df8bef859f70d6b2084fd14fabb4e83c453e8d2c5c56ee4e3b115eb167eb72d1e42230771e1b83278783245fafcc37bd91e66b7fc7270c58cd167e363fc1880c181e44341e35b4f0cf50cc64d879a8be544134d5fdb7ec1265db32ef5e6702f9080a8b5b2441e4b46c3339ed9a4fc3c508e989cd648c15f191ea0d5b687e6c3f1061863aa4e2aad8da950d5889a111582c19dac4a006027cddcd7df8d26a3c34edadc571247a7fd48700b7441b3009ee3a8c986a14c84a1ab5f0054610aceb70ec59b99d378bdc4e1e00b81eb35f25fdc0ac531c5745556196ec23d1c7c9027998ffd2fd3299288bfc1f90770690ee1d3ae38b59cc0facd80d3c5a1a5c4119c5700ac23fca251d44adb7c0bb7977dab315dcb1b10779c8e4954b288e42a789eb0df4d7d352a202deaf63d97a80766455fdf266a08e36222daba31fac1f6eeb30cf68b43650a271d07d9e3b22b00f238c3fcf0aa6b4a75109dcce900246f9a65d30b0b7f768b902b094d176528cc490bc77cd2e323f5fce0f85483a1f5dea53b6de778384ff380e0581a81b787b19246d226731e172c201b5518a6e61c8b36bd42527877d88a21c25c08c8b030f8f6724bc37c632f3709481be2fbd581be7674ba14b343f99a9b5b7ede95580ce89c169c1b94b8535ddeefb2782a790dbf8ce73ef4d3a49a69163324668fb801cbacba2cf664276be7c89882a2dad7a6d5a19f34bb7da2a340b9d0b8665fd7f8e750e6631c93b75f1deeccf32ab3f9354add2206315b46fc67acbca0a7acbdda86ae23a955ca70174779126dd75fe6a36467fa1a1e15978e26187f46f11f738deeeef86668b15b7cad90f3587083a6d66c68aeda4a539d3fc5259f100c6000fb6739ee021eef7f74975cf61cbeca42b8a907c7ad7dbc61f88bfaa668bf166c0a3bb78ce53f2de5e84c04a32189d9c130656dccfa7ef8eaa2c2c01cb5d3e9c0a4b08f5a78931293c115b182cf985b2b25e6c1452b16b04123b09e875e118303b010eae021e14793e53a8b1c8fb5f68881762cbba70d8c6c659dbd71cd3e893d16a1efa749f373ed3e03b9f8c7a652e12b5bd6b5d62b33754ed344616925a676beacc736598f3fa7b3b7649ee134183d0bdde6bb20374e63c8995ce09a8d80b790789915b77e53cb2ba0b3974327f0a509468555edfb843fba362d75c83dbf07744f8ecdcd8756609004cf6a574781200ddcda0ca53d7e100bf3dea85bfe0c6f5277cee50274f16fc92cdf9f835c74b6ffe90e67b0c6e3dea5189801bb980ff6123980e5bd0ccbffbe600cbf312d706fc7b348ef765e5cb26fed820951d36fa49cddcc5568168d1857e87e51c8831e544d83b12a60cc919351b9c5478377d481d8abdbbe6a5bdec27c0b5cddb026266c7aa071a2 +MD = e8e09fc57bd3b8e18b2726418836852cf1544eb2cf28c18f5b98436382d0b621953d2faa60d155dd28c2cb76c00ee93d3de56289b399c22a4fd82f00dd35ef27 + +Len = 33496 +Msg = 9c06316ac709e94470a68650e1d6aeee089aefbf133df90a3eda0a5ee91fa979ee509769318f03f1795afd2e7e552d7a434ac591a56eb4f334e61d894389078a3be856a0358bfa47c77e66761d0d43824ccb663fe4d90068c46415413370307a2cd45457f886350e0319a871e88459ccce25bc11f7064632965edccfe15b8c11681e7bd6a5081e0ed434ad640544d5226f61ae4e077dec1951db597b76d2831798ceb16462971c0ee3d65c9a9cd5214ad78623403bc75ce59ee4748c1a5d7d5363eae04a57bd97d8d7079d5ad6bda30caf9c052dbc6bfc5e2480154cf485e28e727cefd1ae01f73259cf58ebda86c5329fac3b5eb1f1364c8cb724012dd11a906c8bc63e8ceba5e511377596d1b7ee824ebcad1b43e271767d9189f4ecca8d21fa204ddc1b0407b9a646dda3e3d985c665d743ac9ac414a5a0172c6d5af6a309c4426cf283d38675c105765a3773f4c48b02e558dd2289a19d50f6b39fdfc50f71f90bc7ece18be3097a2902f60da24569477b68358137321b45cd10e20d59fda94d12a47db47cc927afdfe54730f710a7aded24c96b8620c2fc9bca4b07c999164769d15ed6c2f0c2ac7e4953625befec3c23d4c267de323b7f462a04557bac5eeef896b8cfc6208377ef77422e36a8e0fd05c047fea7312ed6b778327fd9fd294ba83bb325ef20111a1bb73b19f0042cf77c3081b649e64207d7fc000d495620645f077662a4ba169de95166adf1cb78336e6b971a2c16201c8dfe9488357dea4306432a0d4fb43706408cec71a2c56bb7c5bab2afb98c701cc0c51678043b30f08638f6af57d71e5f0ab1f5ed69b9ae8d6765faff560fd9105a9aaf631e589a71c52b03cf24eb73b02e08a8aaaf71e9bd3eb496916c6603ff42c586d3eb9ccfd0ad6778f51eb8ddff94d92e2fddb3c34d30eeafed645a97f1608ec54fd3cf781525337eaaad050556246caf045948e447275d6c9ca4b33def9c3c91603eb83c4614d63d74399c93bcc60852b28df8f5b20a47f62596399cffde19158c9420c46d6499dcde2a432e3a62f73fc0df8a9e97c1f57410a1b35d2c0e6b765e3dcfb891fcc4846de8c37ed6e07f9fb6b9c886fd33af0fe62ceb277b147bdf5ba18dbfbbc49f5cabdbe42c9a28e99a1d827856ec4abdef2da1a7a3f6d891760d282281f2a4718d1f6b6de08e227d577ca263b56ded663b7067b079a443f563fb3b55a73e84843e51012841b9b782ff5b81514c8604f31c34e6ce508d3beecfad40efd9a74c1e98ca03dbf823cd42b942870ac34178acb90386c8d0baa9c5e2aca1b9be36e488c311db4fadd44d03aeba1c55c1a62fd93b64af68a23276c3c37fc478fff2340ae6aeef4c07d5200e054aa8fbeebc12c2c9e0c9746efd882d9bae13f743e425eb292aa99aae2d2cabe77b93c5f38b09af8cfe3cb5db24c94e91c2f4fd33129d75b50c70004be45b217cd44578781bfde7ab4670f392ae206dce42d151778685eeb2dcab47860394baebdd26df2475d4b34f40cef63ba374d179b611bcb648c69f4823c4370690bebc5d1e9fc1a0a0785ba075bc857d0cafc3bba61c06985e46d09d6722987496c370f92016e593a4cf27c56ca36a00f0b88bbc9b5af7c7d2efc9dc332d32771a8a1ee86af414a68ac35ee7adec6b6d577771a31d3356e8aca8d12b0c4dcdb826fb0e5184a21681593b4a2dc1fd516c49d4bd99b20feda6f25831b27cea30dec1fe875df786b3cb191e31c02f40e3a4cfb7b6c5e45682a6aee9329b0a6c2492f47bd3344a0ab32dd2565cc77f1bebbef008a5503a70de93e7421a0b3f3b717cc65a38fd0595dd4e8dca136b3af82f61b5afd2613cc5c913a64b312ca1bfdf433f83ffe1b18efad752629ed4e73e79362494852173bd0bcef2ecc126ba61359067df6f07d55fd26f270644290e558fe548a006b766c16b6ed30d102112873d0a4754d297f96f2dbf169e4e9337a5391526b99c4c9e37b298519667442f9bbd5ae6cb6ebba526d36e26120439eb96416ec8c89108a189a8f6756f0eb79b037e274c2d8d9962ec8c255f4aae44b1906e9a35b62b12f91d153046814da3de29481a82607559b7291f8cca2f94db12fb873e7569b3932d5dc1eeccb26c307e73e3db8f4e6e242d45554a6ea7fe27953f550591cb70b2c6b074d710ebb285054b16117bddc2224ba8f608549b334fc2c4a09490c3ac984b7df593191569cbfb18aa644ff7b77a99bbca6d82f47c7c21f22f967a38ad6c442e0dcbf016d729e641687e128397559fe49822029821d63b32ccb15714bd573a2a84279bd844c850301504cc69a8dae68c2acedc716a8497ea3d8d303e2281b4d9224e2441facfc04c7ca185913332f51c461a16669eafbd844bd30c9e24113aa3aee9923b4067bffd64fb46e37f8454fab5aeba5e077e3666be2bf41c0d3054f0f29feead5db8d4ab94ba1647d6f98c903e31cf43eb1a89fa5e3cefa023058b28b4193f7e9ae987bed587fea57eb92445ab4c5efc93aa3ea6f3af0512b0b966b3bdfe8d983f23609eef0a05e5c0eba480c3a66e714757ded4442b3e5afa736ef9d5f7e1e2948de8b4aaea33efe4b794ab4de8078a4f49f0eb1a59a3604a5c2963c3ac4244e050a666cecf90ab32467d2d12b9312ff2a7fc533de13b0de79c215751c4b8a66d93221d22632501f2c0e76edac2f54879998a73756a0f471b5ade3e45e84bf0817fe5426f4bf9da6b4d58d66caa5abd2c4923b58a9c25f72cbee68168bf040a653c763b7d32141ce6135acd921a697653dc4e804321870663f1c38682f2eadd61f15d7214be7fb1ab3d74bb12ba295b367d943d699e3d5a081bfdb75b28054fbcc6234dfc97417f02f12f08b531a2551d527c52c4be4ddd63631a7bba0a5e49c0e44f36fc6662703357111c4328dc4a4f838e281c26c175bbf2a439693ffcb4b3736994ded3eb6b8599a45f8446e024153952273981a00c5af0235b2e70e876de9afacf6885e35742dc703a4034b5c9b79c51b7e375f38986841d48d24528798982894f6325521eb04bfc133e9963237dd31241e1aac1d488d61c681d65c6a3fc539e7b965a41a7170bd053471ef318ae071d2bfcca12d5a80fa723d679c9de7e34c1bdcbcdb6dac1477463236b6c92945ffbdffc7aef742d5747e1c7283a11584d7b7cc826bc9ff52571a99a27d678750433c3a9645e9961d5820ab61b2024d3c75321560c58defacd4d8f73fa39b29a1d4d41ca306a2c8ab2e3066cfa83fe35cad2123d27947f1968937c788e9e274bd3d2c029861815f115ef3db16c6c89c67d7eb84520776a9a1ec8d86f880cc1d04e49a88c0c723cde2730184c19e1acd009e27b369f0988c516760a21938c6770b53a60bc6d7f8998102dfd07aaed4f999683c4d74b53bfe179247c5655250174302d52814f47e569f76e55a8c7955a6a4bebf9f1cd5cf8386e5b95d676df7824e9abe5a25bd33697047c89f817e3b68b50a1844ccc2d1c101ea2bd689fc2b2c8053b81e9382a666b61deffbf43de4944ce2dcbb0f1cc11b2b1815cd678d798a8af668e1c8e545b2d331c21c5f28efcdded1838e5e443c1664e80dae6a825120c0db37404075aff25a5bf56d1cdfcb89dd4e831b24c9a12741d28a061d8b4093b47aa9c694943389bdc4e05ad7c2f63ceac2820e1d2d7ee234700140eaf8d637e86d36c13fc17f0d60351981fa62fe6b69c5d6c381d043cbcf4919fb7d6b70a1df2b74dc9c9df0e1f405076f0f3052a9dcd117d80d628e4874b61aa22f43ae460b2dda85558a27abebbd407e80db816cd66cbbb80a44ccdcc75fa9b18b21fdb8eefcde37d50681cfb9e64b3ce9950918d90148e023077e1d39ae4db61b86dd6f1d010680a5939dc1d0e89e26c42d6852473735ecc21b107e3e0a5d3c5ad2cbccf7e2d9dc31d1ea26e35cafc88ad51d9db367093a82002274672c7ea0c3965777120acec72411e56343baf69eb85c975fa0293955cd5732a4276d287fd051fee1fdf16bcdd7042e0b848c0915d704741c9fe65ccb0e70bf620154c1462b9620921e3f274cd509128428286dda516d1258f536da16effd3742876bff801fd36b0be53c87e0a8913161a1488b38d2172099628337a5cc4d18ca1c2b29ba277a4cb3f5721415cc4d09387244e7cdb362fd524a640c044df0f27d520ae650fd2b342ec1983258ba9d185d2db61a158ff127182f41bdcecf7952b0ab93abe0fb46cfd0dbe79925edf1dd644604888cc2422c5f83c4c341cb5698289b4de0e69c6d5e5ea7188f09f0fbc6c23dc8b9bff4d67b9cda35c329ec195129a3a22bde6aff9e0cb583aa714e0b731b776b341b821ea364b53d23d39c221c584738f334e17ddd7f79b161f86fb150b4a5747e1c148b222b87436bcb46013819186acd869a88bb3b763a4c1bc07dee422a6cfe5e06bc7675d2d1119d8447530079c0115fe080a5a53d86df380ad1aa3888cd4b4de3232eb82a7eabb6d164eb92fdc1750d7df62b61321f81e9895d230c431ddb68244fa986f0a490a3b7da704516f75f2bad69cae3e67cdabcd660e731ebc7253964a27546b7db66e092287f9b57ca4647094be291ed17500e7c8d454de551bf3e0ebc209bf28ba4fa0adf680a22c2a0dc1c2d311f9887787ae652ebb4b2661fe2ad0d29eb434dc15c9c5fd8162a791547408e04d18b35ba7eae22390ae54cbdc3aa05ffb90c9a5284a12a2e43b1460a3530defc5c37baac762eabbbb4f0ae2f5d80472089b0e9cf1eb3eef91769b2061247a07614208eb51df23ff24766e2cb2cea411ad1f2c49d676eeec705a6658f5b0f63109dc81a6ac2935f6b36ba83379e32747d2624b3440b1cca06a319a90c9bf2a74a5da0e644008c9a95175e17fb3de36195fad91e698668013654162514419bed81d84d9ab7544871ee4de4196c98878913c4829e6445bb24d4ad4e421ce85596559220706b3a4165f55ecef0221a996b6517b39bcae5909570230488bcfcca32441fcc3fa62f11f748de8144b25093790868eeaf13c272d38749db714afb6461cbe5a3311eaf34963731ad7f73c6f0428c4c8630c588fc7f887655946d70be755b6837fd2b3723d36eec96190cda4a485f173cd9569577fa025cf55a8ad9331d813c0d0c52536a2f5e83ed99e4271c0aff7d54f14d748fc363522d3c29a16c9acbb594e73a90621a648c268a7029c00afbc361212092ae7c59ea7fd1d075b5ad998962063a5ac6253f69b363575ed0b8c2ae03d1769c5e7524aa6f9405a2b8a6890be6f1d83ee0c03d9116acf032e8a4e281af9a95ee0a5e72066efb3fd4e01608d1b622aa995c7bfdb6e2dfe142524fe9d2b6e525045c88b083108ff568c68c976f3221181693d8ee3f8a648109b82a3735cc399a7baf947ea4d6babcfad67ac338fd65a71311378daf9fe385f594c4591f52106cc08e022ae03423fce78a510ab37a78ee3b7f485a6b75c53692429ecdf3eaf2225f724243d9bb244bdb6cbfdc833bd343ec186be307be92397c7c1a1457e96741b4e6e557d5de541032f807b71ca3fd4ea18712a608ccc2f4f08bd6babfffd8517d765be579103be08ab6d938e4555f74f845ed11f342efffab1c553f9070ddb7f58b266b37e334334f23a4c08ec2924d5ccf5bc53b9371c0188806017dfed00bc9afc557a6d9e59efcb8eafc507e0e3e4baddf2e5640e0dca56979aedcfc77c3765ec9492a66c87a10011c2aedea5bce414bf7bbe7ddc5abfe2b109641ec0d557802a2ae571c456b2576c8fabb99e383da34260c44cc88c47f677b66216029583b55d1f5a16ce4d8a99471ea5dff3de572f0fa8e118fb2ac95891a8d0fdb54325ca2d7cd8dcb4f4918e49758299cd369a80cd5bfc2b9dbcafd1a6e7971c0068a4884448490d9bd330fd1b9e2c2f54c96f5d2582fd +MD = 6c66192d7e119cfb52e822217591996077095c73a7b957a0610ee815f9000fcdc7756c08cc6227798ec73b651666009378c879e47a2402e8861fd1cb80ec0369 + +Len = 34288 +Msg = fe722fd9a593c85e68961b93864efe0424da67de94d6d5b9d6ceebb65ff85eca1a221259ade98007fd2c5bcbf4c073458265d951e1f944dc1eecb3f6d5f454293c02a5096274d90db98c7d9dd3215b6c69949f08a10638b090c88165fe1321436afa30124e9c9b19a59ec932a9d97e24e14f002c5b6479dd374b9d2b65be8cc2aef2fa9cf9ca8dd2c74b86b20150a413f37e45e5987bcf0c185b4e6f8f5b5f4b10d24cceea6478e12979fe4560ed95e1a60ab75adfb302e53de1de590654608997826ed0a9d424edd3117711501a183703d99bb4b874d90fadc69312510f58214beaa8cbbe80599fcbfc3a41583ff7bd10d43c1aab261d3370f0b6c2f8f60ebe34f342e7b2d2df9f1b208ffb01c2f81ad7e3e1b5413196f88f498e90836f4c065b83834b0b307d94cb67bd67d10ce4f660efd1ad01fd0c0711b865a57be4d8a1c783b4205404fd26e1b80eaf528582fbb1de552974f24707fe24812968bc7b3880dc1d8d12b525fe67fac8f80c959ccfd49ab55120790ea15e772b43d05ffd738f7406bbcfabbec46417346d86a5f81ad109394e8ff82b7d3a98ab1b3d3526f9fb35b7d1124e8f20e1f69a33481b6085ae15294849d96442996f49da36a6be73cc0677f8640662b8e57f4275da6199b775a5cc66d482829884e44da8441a8c880bce90584c3bfd37789a7359c5dd6e592ea06bd1ba5d4d2902dffeacedf959e1bf77481852552943a22f770790f9a613dff04eb183d08c9a1b48a60fbcabed25f0e8e861febcae846c2694a8c31c088c927cbd2db5450996d7078bf8369810fda609b75ad9d854a4dd671364e6ad5e6d4e2c006dda238ac33f04f590e5288a11eac2ff2c6a12e348fedb3c6282166e5d1ce85e9a79d2d8c95a282eff50c42208c3fb06fe39d0221ad56856cb1ebe0105039821dc1bbabb5131597d6cffd2a28b3a9c16f9cf7bdac26df7abc6430dde0d0b248f5a4743fa03ca8029ff7bbcd041568d7544b37cd3e8cb71817c786bcf1c3c74f13d85d55f862f867be24be874d31fb66b096d39d533f9bc211545409ada9f718eac5dd8b0836851bb3af7c058e89d00426d861ca84bfec2d3b832f408f13b01b0d058b4b6a17bcb313208aa4329d951409a858c13d9e269de8dc8efe106180d9dd1fdd1398972db24ef0510fc3dda93afb8f2f1e085ad9b8cbd8e9aedc43f7e9ed6d59701e25468de9c76594ccea8acd5ee56b2d5f6683f23700d5bf3d0b73afb07676fd5552a5ca55fe3edfb814c86fb653839bbd51b3deccdcb9bbdd5882bfc8d3bbf7e8afb9ec260d534d100cd07684520ed59c9cc7d2ffd52c31179bb38e990d9f0c528cf167dc8d49696f3331966b59636797b85e634282a39b86457480937ca6b70d8afac1dbf667b110187a33bdd237ce1924d624274d9677a3f6445a5ab95974741a148ec6c154b0bd3d08c30e64e275ab72dd9a20ce9b31eb2eb160514c2db140cb0d230f8686e4c1116be8df8a09fac922b319d16e2876e64f2a37199d9a19de0e132328be74c9c6261209a3aa04d9fca525379bb4a4a30fe84d431626350ab663e503a4b1b4dc36eba9a9fd5d697fb08a7277e22ab642d27a6918c98e84f0645ce148f638bda88de2814e3f1cae687f33495f6748c3d2d8862c2cc63ee08762699677bf9c059b45ab476afb405a30c34008627d8763df8c9bf4f37eaffe2c3b1a82f443640340f8965a84b490e34527213e05a77f0cc5591c6201656a245b48d0256334195d161144393ffd66d032156768dd87882520d887d1db0ce60991363afc29043469a72a2561d1384ab7641883073e604b437e857ee2f4f7bbf47a6dab85da363dcf50adca72fce7a4ff779af497ccf430fe3aea6213c398549b5369b240db3cade4cf06a3db279e1e1ed9373ca8fd95c1abe271c1c2db713864c8a4dfbbc0a9fd406edf3208c5ce0e9c0557eba934e785d311b62e9eb114dfd746c994651ee0b478bc91f59a7bfa0f0d78875217274be61a25120905d8f5c3696a2270cb4a836be434c98efe9ea487d9cf40307139457ad7a92fd176a7968b918f59e55cd8047c1963d03ea3c2401197660ce755ef56aca22a6a188fc16980f642da72984bd66d8ec660b5387b7f34bcd957e723be1203e0055b5eafaaf15bfe012e991c1a9bd8cad8d5631b2e9459b0a5cbc07929ea1937e67e1464b8c0751f66b0d946c8a7164417b8c8ca4032091937b303b4b75145003a3cca3d9f5954d0d02ba3b6da9ade910f8566c474cabb6d1ba81164eaea1fef6d21f098b32e73c8c9d998dac4e97a183cc5cda820e0f912ce357a083917224c1bc8181498a26a6dd05519211c1571600be45dd3d8f73ab0dbc5ce2d366ac4acb299b11fb477a1167028b52854916d0f097b97e6019008ada0f36e324747af97ce115c489af0a07925cefd6ee2ffc56bc1f62c4d4f2ddb8fda28dab600402b73cab969fdc0bff0fc6da242536bc302fca1ee5b77f6234bddc3d0a436d5e6c0f7351c6acdaa280b26b45d3474335dbe6845ced5f4ab32a1fe1aa54b235cae18689994ef26cbeb676e965a345ffe5240051a020c51d2be96872b014009e9089a6e64cd6797ba5c9e6a9023d265013340798b426f0e114991ff916f23692f78bf6f332054aeda0e08711e448f220063283c35ea8e87cb461cddda5955bf8480ffe1612846cacf723e38ad26db1560747fa39674eb6d8546af98625a677b7cc3f47b8b5fae79ef2bb817d96546cda5e9bf66297bf61dc3bdc2b5c5ecc93b9c8415842e410c4add9d0e950f6a42b945355fea6b5a4f16fb3deecc717b0b5e5873db91a656e0ac0f389a46dbb06f46c2e9e9b6d8ba46f7b0298c22f1afae823505cf3aa00bbc1be890f393aad21d14a369d531fdf68e2e7713338fc2d51315b6ac58d597fa0f191e38a3021939ec916b47bb1247a97529b48d7d396195d9a751ea20f8ea8c4a320492112883624e4b8f05f3ae424dac77ecfab1d65a5c72a5ab41802b345d0df5303fc65d95f5c2b18327278c8a4d94a7a4ed89dd29b37e9f07451ed2f1c6bab125844b47bd4eda51ec2dbf236c43be2760c85db43c154e020a575586af63e1145922184d65e815bb3e7c330974aa9985b52db6021e1c716d391abcbcc9af018d4f7ba5f52c4bd53bdeb52bb54ffca730f6802b3d5c13793ef7e1ccfbdd22ac8a7d038cc57d04b972514af1ad3ab477b7b96215cc52a4d605db5f0eba564942aa764c2544d48d32fd4ab03d57e16c7b8872461e45be3b184067e4ea8ec19d545bafd817d9cf5fc21b1f77575bc07f3331c59e9d2feb60a07d1205e8dfab99622c9e19dd2ac9f6f77a3422e81f44873f3207ee2ae156901f2a5e54a22370c7ec7bd593dd8e60dd43994d25681909fee007ddb73010ac53d4c6c1337ef0cd9363e7cad8919b009d26d6bf114fdf7d50c6319b8c5514492671d0df34f7ddfea658ff025aa1c7359111d10e5907e91b27623de5dff292b98266e70cdba531905b4c0ff09c86998c63a506af6f38bc6fdd448b2114a0e279e23467de9a0f923f3cbdb93a00a898518f50f636e65adfe80cddb7f1ece8aa06e05ad1c8e28f8637c51e793339903a417e961e2930d6ba1010ae22ccab224fece75ab35067ad74367efede70a9d5f5c8bbf4ed0af144d17493368a15e1f65a9871b49b097bf1e2a7e4cf4776d3d26143b1ede1308a1dbc820ef72c6213cd30a619e8e758a1f56808711042ba4a1df36f0af1a94e6dd9e1d4de60a835d32f88723a7836c27c106ac4be525ebf6f21229721a093b93f01d7c9ac137c058285c8997dd2e7eb5ceb6189271609fad5847558906b3f15601e04ecd2802655c47857983e999917e6dee2b245cbc2f0ffa0722fd1b219c763870fcafc2715aafb6fdbdb072cc8ec8c7374dc84f42836501d9f895025a253cbe54ec08388f87999e4cbfe621cd5edc0418e648f2f983f694463f1a636675f0bb1488a03161d46427f8e5ec9ea6e7024b1a5e6aece9180cdcd55f55e54e73da5639373e56f12a56788b998c905f1381c4c31ef7e61a28ed010ec00b31190641b84a60ac4f466fb9ba8d428c9ffec9a3989e8cb687959ce22a79ca07efcf186f09cf6db0c3688dd3148447b5748df1aeef30117178615d337f9fe610c67990aa7051c5135b606aedaffa12cfb71372ebf00316ee6086522829077aed5e1e553b1557d09cbe35f04eb3760aa2109936a2c49e01f6e80d62095039f06760c6516a2169f61594ef0540478197f52526241b92893b51b8fd771d1bbeae4674796b7ebc0f9f448797930993a22192a1c2249d834d2dc7775e78adb31d1e5241408bc10dd233f33d3381f2c061103f2a751e71bf713e20cd384c0140dea652702299793d391ae85eceb743f646cdc56848fae06d7dd5236494dd61e98ab010a8287eef73cdbcec936d1d445cdabeec0542a030b6f95c9ae1791215d6a8a3529259206bd81482c6841a9b3d1ba44c7ba66cf9a9c16e3a4beff0d36430c0e7e1d6bd68349498d240d8dc19755a2cdf3cf5cceb95b764d7fe340008981f5ae4851b5c3e94cee1152037bc7f3542fbe0f59a6d5f3abf619b7d58b199f7caff0205093f8bd1af75b42f4bc0b5c5fb98b56f3d543ee202efee8f040b6fca5a36a92b496d35345ede1535b9f2a36dac8bc872858b6ed3a79538fbe0177058f68841bd83ee260503a4a2fa2c5a32757e5d80c61a19d955d7dce18a93dc85ebc77c32845ecb448cc84dc2454aff482498954432a50665b2ba4a5104c66297c9f59ae448830b7911d363dcdfbbe9cec322bb7e7fce5afc307769f03120b28c3ba76abfd19ab6acdb4c6e5a912820ad9a465895753c1e851937c127d84ad34e8905752ce64ad5c5335cf4a32139adcbf12af3f1dc985ae8b321d85cc3ebcdc3fb384291513b6eab612b7f1f5795971210f614fa7c89140d475e38f8b8aca9d5d9685957d8168c48ade09636fde5e6693ed343181db856dc1c15696480356e6b6abc43e7448334835ea3c250d9d0a2b7c5e909b386cc273d7c6ff107e32d246cf75d87a75c297044be9e89d5b5ffd4e6eb5fed33806e9018ad945a48a83cd4c2c873ad01eab1477313f6762d571984ddf95d7800d3469755f8ab2c91990b855425253e5cb4c2c2f9a6d60ec087c7b884360d308247fb47dca5dced497c423f0a569bc1208405e7bcbf64dbf70fb17ac3ec959f21a336a595fc5127d71a890acca2febeb42022c0a5a6c86438b67ed182611d4d46b19ebb68452f61a53b86ef825376bd8250c0559ca22b31ec43d7c6a9dfcec15737dc903ec7a1241aa6e4f514af2a47f1de87ac8afcb5cb7c7f635f20accf83befe972cfdcbcdf79e2549256aff43e3699021cf55fd8db94e32cba6cf10491be1ce78988f99db62997e5e856d8ae81a523033c6e7eadc83cc23b6a39f5564122a6f27dbda79f4ed737aca20039a427315846897260ec9b25d1ccd5d76c147ee00a84bfdc8b3402195e135fb157579761855654cfcb07dcd68e3b8dc3e9e1b3aca428c07408ee685657b49208c64b4abc46ad5ed50171f5c57421e28dd32077bf206940029530ea24c10ab964eaf1b9b818d5e80098cd8e791fea74a3dc6343bdfb908f06d4be2feb3670665459ed7cdb884a80f1157d0f77ee2fc4944a1ca01f92693dff3bb872300490096577910c9cf185ca14fc02e1386b5c52ddc0df056a814dbd6a3ee28999d7e412f6e87ed183011223fab0f1bc4113ea9feec50cec1544a88dc652bebe6f0ce723b711197414137a1f00d8bbe91874651c55bb38dca659143fa21b9f89463013bbf485f36cc6c5282bc5d7d40025095658a137e55f943b1b437bfe1782b5cde43c5dbb9f14218296cab832dc89fd4f38c53fbf94dd75672829b27eb9331452e33541267f02aac8508c668e37ff17c286e2afb6c9eeb079c552e421f703085b9b275d5b05c0c922efe14f2e78c7faefbb416fb1e6fbdbcf6d7f9f6c438af8447692f0cde5d7031ecf59d0a8018d1d3360620e358e9d6de49ae032c241237aaa0008a9f371adff187966a99f84b7054 +MD = 2711cb980cb4fd62df85446940d9c5d0e382912c96e80ecfdcdaf7195f377130d01f1530b429e3658c371e7a91e3a738814ca8c7b1139d9847756f24e9d247fe + +Len = 35080 +Msg = 61ddef57b77c6c122d6128de0b45475d3af8acf74e521a74c46d99ca87111c33b9706083b11417b9401546d4398fece83053e47081dd0ce69587a79160fc009f2eee5173a00ce240f12e75d77ed3e2bd86ceff812e3cc24cc8b9aaba54d45ae847c088cf8c4c15d0c9147d8fe3f97205c4d0c4d15c5784cfe56d69ec6c8272398d4ccd3e7ebbf8904f3026a66feae4e873c0fc0913169a97750aadd0afee90b887fbea687c43d3a90be838c12b8c808d1a086fd05b614bcb00f83e0e2500fc8dbd35a5f691cbed4285a57a8b1dc88e1d410fe5cf3d20e1940c9ee44dd6a1fde1b763c890c23c8f8446d0b5a94f8755bf703d26aec03ba21923666735cbb7dddcfeeb19dd197c0197d5cfb1c6c9af1e9c30faf914ed9ad783ccb78e6f0b2be2a5193761869d748ba2ba0c3688912931db08ae28a9ca26c7f990f922a39ee6556590ad6732560c75cd7eed0c97b1ded6a681c1791662c5bca4f595ec788dcf7e43ecb7f58a4d2d0642a8dcfa9c31b55522219cb503ba60fcab85f1b197dfcda468b3bcd13689bd8726c040ca3f1795f57973a5a417dce0d037c8763ca89cca10fb7024c4dd12a540a44e8142276d68ffd3fc450dfbcf2b8070458c5452ccad0b25a8569627f1ce79e1db072bfd3b15bb5746e4b9579b2b547d849cc03d785edb0ee5bc0fbe2d1f7a08ee394c688784712ed8eb71d249c694870d0c4912a8c4c8ddaebdf747ce7f8a3f10816f115b9d697f3ac0fb14dfe687b56946b77962c91cbb8cc1156dddd8f3aec8465a9fbe48ea73f5cd1fc6687276301fb0d219b0541dcf063032d56111fb7f9ef1d6bbb96d3e329079a790e952a91fb7b4619b994e1542a473162a6212ebd71ae8ab0d52f4abe3932b59196c6e68abb9b92ea6269d4a3beef08912e9c30be1c594a13c93c57aaf864dff0af8aefbfcae27ffe35d2a05e36d105335fc0ca2c2265d80f184c8f3bdf2465f0a96faa9391e659dfa48dd8d61a83b3b3da6d5faa5c6ac0fd32ce65d365f7e42c24d3abc8b8fddd092ef9e2cde27da0bcfec0659b02be7178b93050241535d6fd925567a198bf65f535856288273538996d887080bdf7860c0c10e2807584bb0f826362c0c991814e78debca7413107e3771404fdf6ac5b21bbfea18aff5b0cbc759c2198b42abb5f396475add8f77b15dbf1975545238d544947f1a62b3f489edc5e38bbf0c170b22795020e470f2ecaecbfbc491213790e248b77548187fb213727fc8cf81c5de1940f063b23de8f5d29ccc82bf5e2cad9de4797388aeb90ee0697f19e4291bf683f30e6d6e7ec195723a76f805927ef21f6eac5a4bfd0b64fdb1ccc6268b821a0698928441bce49436aedf6e8c4495280df13a73b88cdb7e11524c17bc2f63144a3963f1537dbbbac5fff12b7bfcd91712720a06f8e39222c555e954cf9d24aaf8dd6bfccb4cadcfc8359279fb43b286d4fb045b328a9919c1c18ac4865e2fa5b88d91ecd2ae229ae659ac9e349f883efb9310b98f0a562bac9e17b00af9eacc3150bd0b8f2d82e4c87226e34d9bc3083043166a37e9331f2ff5776082f6bfe90c2ed79f2b5036751588e8906fbccbaa1b12feb451b297bff1cd941c17de15c2f02fc8f1cd9fa41576a4daedc18c08ec6308b0e005eaead19b2e552cf1375321865c76499ea3358c93cce4426c92e398b02d15357d1b931ed420a2d7378ce3cc76bccaefc6e351a1130beed69756c274ac8a13fddeccfc6e45ac636712622c8b6757ac2a6ce8611e9f66e0f26b610e4afd26937e53868c8995d98022a943962802360543b838cbc9dee7a2de103a30e04b097e0201d0ab366db0e25125b68969ee60bb82d35df96a79951ce2ad698efe3f3cbacf1332c13f75376f3bad446d18d3ddb82fe5df51cb177837466a77926e80c6312daf34366a5478102a6a73aafb5bb6e29215443db36199d95170eba3f7b7afc966fe5f7380b37bae6483cea8db2cf223f38c1624e9feffeb4ce74d28608c006cc1273ade4839462f3221dad07fee99629972dc6e3697b2567ff7268b72a6c00185524ee08c8fe37ddc6c2188b14ab487cdee1f8262d4bb0032c6fc33f5aef770fba921e2125c5a7eaa8b2a3937e74a79d72866ca355c21d3ad7f5a88b14bada16b513d4aa349b11ce4a77d4cda6f6322ff4939ad77d8ecb63748c5f26d26eb7b1c752a8107fef23dd1e7a327628707698d792093efef25901a49c7d9f3e7b8e8583b6ef0062225cbba74233497d93f36c8dfa4e4664ad34b9cace7a509351dd065cb93fe685d50ade77585da410d1271f9a44c09a491fece0696aebe78b821198c4e2112f4597dcba013528027cb890368efa168716bae01a031a28d0719ccac15ec9e9673bbb30d2d76119012baabd25de92a6a9580ecccb1a54d788000267148cc94f1ae2efb5bd5c54a71ca8280c720ba6f77d779bf17831a37e8a91438506d178a8b6a585c9de229858b17cc10caf889f8f800fe30ca5cb7e6464cfe0932cbf409cc72e1debb9ac94b46c14064c42f7e4e53d8b646cd85a4e4f82f66a1fdab8c981c8d72899d46ce230a8f85839b0bc3f8f2274a0908460ab9681bf2099b5507bfe382b3662c2d5f963f4a447539d57d7e3bb5618164e611ebfcd74d48f2118c06891a4b7c4e99a52b4dba244384d4d769984aa4b7c7afe0041e2d1d66ec2743f6761de3d3ecd0c76a9ca7cef46652f73f70adbbb21be7a08c35e30b6c70de551612532274ef1beedb94d9e990c695058b2ba74d7a46d77809a9c2be616580eaeec683b1663dc242079e171e208be62ad23000021832c79105e192df4db5532907f87737b1c00dea75202b15aa9f8d8d9ee9808493c5fe1207471b153947a03be812f55d5e5e440fad84db7539e9d25876bdee78f3e9c624984224092c03ae48197ac6cb7401aed83830f0e6d251fdb0e3141489418565ef3f3a77622ed1c777239ab228fb90946e9d8e32127fbf55bf6c57b85d8480249a8497dac9479931f08dd8801cfcf33ef86404689e471b23ad99eca39cc4c44b4eefc216e6804335dcdf9efa517d12f49f16fc5c35334dafa2f23c9def093822320921f360e0b71b63a253e66c89d5fe8b3addd47d493e41c500af6efe5cc4f16f591d38e06fde2bac5d5e0d182524a3e3580f991e93d4213e4aaedd70c450ff2c671faf0d369eade0982937fb5be72dd0f8fa73c119f89736589fb3ed4ac49592bc8d1e903ce0e826dc1b2bbd3206e279a306290ee293ead5b3ebb81ff508fbc9dfd04e108a8d25a7af9cb307b3690b07e09b85acf68b6342e2fbb4abcd0579f858510736268bac8a9c149581e4f8efa138214d445dca4aa66d366f3cdaa15747b07710aa1ac4c5f828eb9ad2cf9cd87032004a7d1f36e728dd03b07825c5dcdf6ea933136e1eb819dd8a8aa27c3b0c9b56a0440045b981f1b9cc4107b55a51e81a5136192883cc1442572d9bf1bed44b2c690374d73a612889f8e8929246fe893dd6e26552da4a12dfbb4b63380e78a83dc44e82dba0d0f6d6ef6ec1c5732beb5ea0ff9ff30b7a3a3d1faba2591140d91017eed25bd5148326189b3b55c720360517556f14fda4b5e3e916015ab174072dcbac0b5ec075f604dd36a94a2c2491baa3ab7bbc9a10aa5983542745d55b591d494ed5ed493d77f5a509b2ad89812406accb6ef3c9064228532dbe21653ef867f89cda0f58b23083d9daff85c57d18709a7beec172cda5d7c3696bf748650b933f60bfccd51e4635df7237daca619581d584a32f7daefaee39cfd8ce6818bb2a88602f2ca8c7e493209903b47f75c2bfc5ae3744d3f169f61f28adaeac9f30b33a65d038baf6302604160b1ccc00c8b4d2c04f095ade1c76dc3c91a0fc4191b6bc374af7f1f25275f4b3f619994ccfe865849684fbbc38f6d8d32daa404806bb789e46723605730956366db4ce9ffee2e4c0b1bf9fd5e8fe7bb529d760fab94bd5626caf7275bb68936817f454427d2ab93d4bc22c6f52172da92c2c45a0cfed3b4a63b88b8b511c14119de1117d75484ac30a938cd39ec85679deb3d581732a1220d4956b8f5ead40f9a683ee970ec4011a963ca549f59a5eebe973f9e7cb89c3aa664cf8c909a17ee7dbe3d3da6f27450998c561187f14adc8f2749a18ff92b4b1c2e71c807b8238a5e308a98cc1f97d59b834a68a63beabd7a4bf9e5d38cd4efc8f6dbdfedbd7d5f968fa56f62bc013d29d935ee5ca20c1e2a45beffe9ec3f95576e7c5895229bdac0fc2c460d6066e3cf0e97072dbc355af9d50734358fb1e821f5c1b6a08ff57868267d911e952f65f583fc479bf2ed10835a714748ffd234c31d4a7e924e10d4e69f17f538d2d13037e9c42429de99bb31467b8d86a52727b5558514dcf5746ce6b699d6cea1e2def0908d2149e7d1d78e39849b8128171d732ee01e030ea6bcc31d61ba527adaceca28c5c39ea71bd214a42ae5cae128a2771a19fe87021e2116340e0466d62f8c2f12ec8f7a84de574f06ecf0c678e2435b97613aeb6851465a8afd697e3c679399df8fe97009afc3b7e249410657ca6c7b377457a2b9d698fa82ce4e0b26098184ff2e6601bde6a3c9b6ae5afcf647aa606ab1e94f6f14a590cbef26801b8bb29ae23699c21a49640f04aaa33cdce079a5b1a844341091d897c6ee978f9574c3263936d913a71ea0e25cbcbe28943b56b5acd60d0316e4be89f43af58c2c4b1fc154adb898ccfcd70e1f53005284aece0aacb9b83f0a73d3e1e452d508387544f6d519cca4245a72cccd1c2e3d56c14c2f41c1ba4a63c5a53a07c4ba864299bf313af969c825ce10b8f6667c6b63095d9dfc9ca7b7ab509eecef1f2a78e31f0afae6cb349749ae1d5d2bd08f4f31ed8ed14d98f50959bb4d950ab08962927ba4ce691da18428a10523cdc8eb6b5be43c63a54516a1f76c2dacdb276bd5c9460936524f35011b1d64976cddf5424993f2bfa43fa123fcc9bbaee0f256450ff4c49d030e53a0c999c842898e516673635e6fcad71901d27a7405ac9fcd32df0e539d2ba9a1e58c9c8c9f9438644a71d8bbde79a9e2ce20e4d36b9e8e2511aef932a11ccf94420c9c4e191d8ac250bd7ab796412692eb60af862b575c1283f85bee3356deaf38a22f694995e3e02bcebfbe21a1ebaddc0a20d8ef476809ec539ce2de7a65574be5bc8a9b9de2423e1e1e5bfb2c57982295ef5801ef607fcd4942bd0cf7e2210e5fca1ea985f46d0a342cfdad3108e6518c61801dcfa3e8a931d3e9494fd3a0c278de81ddfe98c512a9523f92605e1ceb663ded8d68c0d8f2b5c6d41de2b83b3ab97070b3584deed9d6248e552af5b052bbcb0cfb3b35c55c4d9219e5711e64c9aa2657c433924ee2432a6660013e2519e59f4ac1b781322841dc374a5b64b1e1b346a38b10f469ae98ba543d83b5ffc37c31438b8e11a3f96afb98b70229b7257d77e06260f2c3a11f8ad46812ebb4c2081763b2ff959f420176dab615ebc90761209af4a40be15c7fe2635a4f4dc8a7e1b847d2bc5b8884bde459c1f7198c09f6d73fcc6aae575312778d9e896acfd7c1aa4c5524f20453e8bab255363164afa7124b2425587a077fa0bfaf61b12ef3f0540dc4c9e777122a60610a53d1d75b0a5859c654a8ddfc2ff4860758bf5a6f264bf8bc2baa7551eb7be23bc06978be992fc81d890e07a3abf95d20eee3f6bbbc089985cac96395b473b2741c66bd2ccbef228432f66b906c15b19694dd786c29f06cbc17b2e6400dde4e3db85819382b3d05a4c3009e44f8d03fd2dafa53f308c9eee9a2f552036022321334cc11532f9fcdf9e9ab0423cacf346031d91de2d0cb9c78ed1f5b3253d5fa7f12213a20516e07fdf75431cf6a595bc929e83aae0a9bf204667f566f416013ebc105f802394e202b8c9a9baa4005027833a63ec72ea18bf69fc3d81cc156fae3c1d8df8b3fb6c2fd09fcc646f468b4e7df919ed0b572c6ca095b54cd4c312bf1a518552ded1e5cfd0fe93627ffeb0fa29e48df2d17963f1933c450f35a75239feb42fd6cba0b5aa5fefe6fbfbb026f32e02a846efd72615e9f8d511164a98e38f4f73cca3ef43882679ad790be55501365c50308bfadb9f4bd24d9ba0324a8676293a7b8d47f931cca4d022d923a5ece6f86ef7ce68ec5860d095f5fae9d2ea5b4a6a2cb22f3e6cfa78383f8af57e7be8e0ebe4dfab +MD = 73e3a0b552605e08c1ca390e9b8d498fa2679a4f2f29bd80ca7e40a86e20a5ed4a9b8707db0aeb79e251c8c0f4259ecd25dbb9c82de838ae953e712d36991546 + +Len = 35872 +Msg = d5233637f4320cf1579673430ac26259595f2e48d742aba0a59c9440f0712d6fbc4c2628e030c3b452d13a7fa5045d24d07578ca31987db3d2e25e12ea38bb1da7a8bd642a574261d4ba3a50c009504190f1ce6b6d8abac3498845cd67b567b21e9fc394da8dd01e63b83a5f62b886d8213df6d392ffacf793f8111a70d07856a999ff5ff6bcb6138933045393f9461209bfb8aba8e1997837988aa00c713830d1fe3a6e88cb3d6acd935ed55bb4d716d2e1de9bb817ca6dbdd278084380ed691d363c6897a2aa48b741118dc3d1820d030a2e4ac88987ffae0da2f91de5e02816a9cdf62c2948d7d0a3e522d2398f1f25a17261e31f185690b0d11ca388599642bfb5c04e485e3f9f22a13d91d24673bf1070870ec1c499ee25cd19dc529fdb2be1bb6d05e733a8ad270f850685ee3259bef1655357d4f14dd35e97d129fc1e5975a9a559ee10398018f5a33b3bd1837c13bca3b9c9908537224c3e88f7b68753e5451253453d1aa25e1c3e38da358fae779be848ff407e337a5eb70ba21640a197585afad402749b624cff034b637e7a5254dc09e12c03ca435daa6213646ecbf5a9255784a76ff18b4c8da677a377650cb02803589c3d82e512be9333e83c5965021c703b73322e40e69229453da2f90d77743f4ad753e6c8429ca8e9ead0d45129e64fe2afe6d9ebe0b3929c7828bdbe7167c3a1266e7b55b8eca81cb152c420e72cfc62a4b27bf3039aeb669d31398565aa9943d1b6cbf23b559cb686ebaf3a04967da197bf9bc017ef3c8af4e4f6cb1de5c91a20525d08927f8b9eb1c21f0748cbdc89d334c1bae4598bf0c56a7bf95fbf590c5a6bb90086137dbc7a019bef7b7421019f3a76493181e28058eb5075f4e05303c9286840dfb97bf828cdac5a643852f042f940d5c80f4822f48efea9a4f1bee6b3b2f13265188b3a0551d8b0ccc079400598aac66faac6bee37b0cfb369aa39d6130dc3ddfd9b86a57b2aa597bb49dd830403984effa623c6bdb02d57482090f1bcbb2c817a30770671ba7bd39bbc7a00b18777710a82684d5d6699e2452f82629abf93dd31f82347db25944ce7dfe80dd49eb07995c1a7e6993c8be0fb179c9d2f73c03dcf5309fe19f475701a34a60f0fa1d9d54bd45136e3ba79dfd4892e05fd80082facc1997da0bf95c9bd5b3288a54969f0774af292ef58ea3b6bf4d541875cf22f44c4605b11ef8bd65ba42c0f47fdd777b2960a9efea063801bdb20b45f7304b941ebed2afffcbe024fbfe1076a27a8b7883617cfa4196c4a7eac8ee2e85ac65a0ea89e419d7fa2fa33ff00157e5f645c62ab9889723c7af71ef97e51b48cad8e157b0253acd0e10a92f1e79e171d80c2cc770b70db82061247427d95367120c1f0e3a7c590a8eedfd7392615a6ea84773028ff0a62729428b2081b01f0b0c6a22b72fd0bdb5022d68b254a20b04ef6063821c1aa8996abb6d9cac54c75c4158b1f9980baff7f238b2946a223c5933bec4f0221f5c356c32918fb0ab9381383f967c7c1477f8e776a3c3decb3598ffc95ef3a6e60a24b610c0a2969fcaa3798897e9e3d35ddf694f02e4b8843de7d8e9f934b257fa8dd0bec27d6517b6e98d997de8d530a9d5fe2b99a2fe349d6e48865c5a4d5a739943a25fc725fa9d7cfbdc0f205b13a20130722ea2bac59e57d608500e80d7bf7096265f29de32c8834bb7173a7c64918c868c8a8ff31e86c70bd79df852b6243951b1894a99a67f2706945bdd410bbe9d88e1750fb2279de86d5b0bbfcbdfeb1dfdaaa6d35e3e0a90b3daa5b2b0f0715dbfd9b7cafec82de286fd610cf33b5b43217b7e6b33e2b0e5daf1bb61d4fcf2f3b2dd176adfe97cddde236986d3b0bed3458bd9bb227aba4f03416591b2158888ea535e945d72d300fb37e9d672275af7f1427f6a32ee70f5b7326dea54247d44eda554f2814b7a73679faaa3d88979d5ae0838216b261a007d2c9a16c112174e4539c12c525db95faac574960ebc61950345cb88d60b0097de97b3ba01c59fcf79796dead88ed8ec4a0f0f571baa5a60796101467a836ae361db81811d275cee12cc20d31cc71e41d1e7428d0739ae5e97c4a20460779f0b8e60cc101c1f98d49799a18f25f1d587c7b4d6e0db53a3b6e5d776698ed0e838ed8e5b12069499a8904ab9c7fcf243e5b2dd94fa9edf8391eb00441e0e748d9207cef82de370a99386463023a7b4b0841ccc418058c5941632a8d6cae84dd64063866909bc9a0ebd00f5ce4a301d668b8ce8a81d11ed1f6e4138f21622420a6b8920774f98fa104d86bf5ae59e17ac238b999077d23f6bc0a01661aac63a733a0202eaa78078f96ca00c9e9bfa89c974a047c036a2a3c235d8acea2ddb1f57d655968ab87bfc0f41d74460154b5a06a5535a01038a016af5706157486ad8ff660a421f2b916e9cf5b2cf69fa9974abdf2c3a1b869141ac27f09c6fa27a4db313aa7070a7cab6e6afba1581f3edbe0049b450d666bf4bd0f3e0c7f9e41366bb05bc8746d52fbc3698757f6fa84e204c0c7202fa4b1c071e82c949beb53d0b5e63c8ef695dc769d3d86d73fdc0c482d94feeb94edfb15ddefc338a86be0124e555560fa1e69ba307962a5af1e457cced3bb1de9bc785365789a4f218a666999805ef51b618b15318fa329d14bb10e6d1f842d7a9aea078d24fa6e93e167552bf981a1c6f9d13624f2d0fa22eeef6b9cdad290e403a0b0d9779c0d7beb63537a23960d9951ac9b6f45749d30724112b2882efe92813cddbee2d7b24612dae31890e48eef03ad9394f9f669766066a252ca01bd228e2eecc1f935d38ef24e826bb3f5ac448a24dd1a72ef055153b08901f2f35300a4f77c771d5f07b3042ec0081f51ec365fd2c68462c6f77da6cf4524a56c66b94016fb32e18bc56ec30c1a523581d530ff17fe572c069647e413455f53e55eb8fa1de7a9c87482fea956fffe98fdedd0d264d3074126884c961d27f680f6a17c2d6cd0303471c6ff31afff41ac3e9c728469e31944bf33f8275d5baeaf08d59f7494236ad83c07fcf67786e001bc77b28f67bd0199393fd732446edc4094718f4a248fbe161bdc54623e254e1c0ff5fd5e0eaf54d11ce2662172c003f831fbd8288e43ae60999ab1ff6458e06d919ddf6acf68876ee2f2218f68fdaa1869eae69a320db05a4df98248aaa03b78f9e5c5502a471dd513b595d68786532394a54719c03c6865a14f41b84189d3c0a1544b888fe98ca637c34f815ed883cc5ae17621b95e4b152c226cd8f9843dc7106fce8e90be5844c7919b3a6f92b05524f6003c7df1bcdb57098025131dde0ecf9eeadcbd3415533ba7154c3a136d607b7951d49e85424aaa7b18272eb5490a57781ced75f928340c8a5a413ef92f70c6d207848b978fc5aeed9149bce8e34c1071d15b4b6c2579d2a1b6b3fea25b08af967dc6d586d9eedcd788274e374146b322a480ae0b7196f683d71ee9ad849a9e4d41160cf1d528accf692a431ee78c97f103083e65b11e10b727dc908940990b4cddec8266e605974bc0dd4c0e5a703763895c5cf9487189a2159783b3f3a68f4bc0d4e634a0f834c30baab993fea429f083f78a34cc23f9db4cba23bc22258290864999098a830ddbb63d2c3e689ae83e9f5456b6a0b7c9c929cef11060989dd19ac52b4407387adc6cef046c0cc6ea94481d42ed6aaf720239409c4f239229757ac20d829b8b146b7c4ae2bb7faab997fa9ccf478e7dab0cf7a955c6df94ce02a2eac033dbfd630f70db479b25d8cdc0436d5c538094ad5fe183ee261902f3ffaf89d3d63cf1cf1ef71a938983b3af939ef99aafe5a71161834a95db547f23c2fd49c8e8332ae1306b8357153dddc78889ebdaab22077fb859781d55166be5f318851ff862eb21ea3a9012bca8b9be25809ecce3ca4840cad096c531d35ba3168dc6397520c5198300eb56ee58d9fbe10f9cc1d842ebed2f95112dd01fb0f393d9a7b5fd014b20b14adf9428c2a0f941a36059f720650d4cf391d7ee502e4ff1688405de88dfefeb74e73b0a7ab13eddd88405cef73609a9887323bb190620c5c705b9b83c15cfa81bbcebf1e58d54fc1b7255de1be17adbd04fb1e4deeb0e77818732187f6f586dabbb078d9797a452e8a5ba932309c94a478202ea164f818d04831f5de75f02a2a15c2e1c1562d548ccb8b48c80f18d7b7ab497395395f28ceca3d216e86766ed992ab05bc37140643405c438da3b2ff5d641df612b70f9ed9653ead2170afdb4ffa13e9b36357e2bbb277a167369393fd6d44befe24300258e0dc9fdd7dc2f8f415a4978f231f705de8836a400ee21b018c67d343c9e9ddb504c0018cf3d84d31aa041636bf94398fac29a6ff74c820d08a2e3ec7ee63b6579992da151b18636c83db6e927fddc4bac4115e8cb06d29d22e400674dbc615a667f933603dabc10e66d2a88aaa239947f9e29acf0af8be6f42463330d739820a359e1355a1b8f0801c90ca058a8d419c134460b0ca91670f8ce7cee52be486ebcc2982dc8e6876296dbedfed65444323dae1ba173762ad1ad6ccde7a20f0a8b1f54189dd4ee3dd702004ec29846f2743165eafec9a9017f8e69c6bd7fc8571c4768e2e402750acbfff09fba12f3776638e6647173b462e1184007ee407ca688d17ba7bed62d76c7dd076133daec4b7ed0b9f8b8062aa78ce7aa01d898be81572a26a78cc46a2a4115cf23de5483d724855b1820f57e47f958f2353aece0700dcdd482cc61dd6dce56b26808146ca30dc344535ad611dcbcf8a32253b194db23492fc9fc12d9e9d60c5bae4f9f09577117003aa40ca7de2e534749d18b4e5b2e0872ed9a6c0206dea315571358ec3d24fd092ebb1d82b4e3d5592c22de7f5884a8585e35e1c84d7eb789f301d687fc6fe1d9b00e9d4509741b5339c62faa6bdd853a9c4d089f360cb6242289ac6efdd861fc5efcf061343581b0034a0341fd8f4bb4384e3519592f3b7e36192ef3b9e4f9eb9c24ab59ddce950a091cddf89610583fb2c81bb91f4c93f2de4ef2c8c91c1621e81442a15ea5e1dbcbbd3410be0737478c2910e0f0eb6c2c5b897c50a3f45329d32a4aea4f31e48fcbb98a2cedea5566351fa933969230756e57402dc2f41d8dedf5287728191990798064cf9e305f163dea692358c76d786746c2a2be91f1a888f35fda61b1fda865a0486b575fa0c21737c522bff19fafd6c69871ef645c1434b375a694a30d1200a79972a1eec714417641d444b723864d5525fdedd1d95b91a3fe4e2942c477eaf4fc87f6543e675d34639a7f7eb5963b80ffb92260d5d8f0436e53a847b0548516d61ddd268345cae0aef7e8bea24a11c87a3635a7fe3701102a3989f85d025f8bbaa6beec123a0b09987ee90d962c709a49f7900daed024a8c67256fb373bdad21ea5240b77aeae1d949218d1fdb7c874d36fba08644edb6bc78087b6bb4b977876bb951b303e14ab37d3f0a2457699f6ab111c3ebb0da5d7b206a4b165dc15fd573c9a71b842ef20f6a6f8f509e3658e458e5f071f87148afa573681d347c6cf34ba9cc58c678e1d659daa50b778abba1739caf80e6597e41504a59e60293a6c93b8348d3916820ee92a8d3bdac0dce8a4a618880403b071a6918a6db8ead15408a7ca1f3aca6b6415d00a2ce03689b87255a04d9cfbeec203804d863a273c23e82be611fe1d9abb6020a99a645432a814bafaaf35b8b343d043776e5048db4ac69710fc1f6a90834c8f040ad3a45815e05890236ac49e75817d908cb7da2f37388bc3440b4c0d4a5f9d71f4ca917aa089b10950b89a10e59b711167cd55a887927c85704e3c317f0dbe9bfe95b61ad65556bead8bb3bb0272d072960d45f7aa88ebd00754b5dd9fdb74ea7ee19ca905f7ac38a060bbed5acc1e4c8df4256d1e704c2b8fbb33423b4d42e5fc1a9fa5ddd543ffbfe3ed385cfbad07c61e6ea961dd2ff05fee5f0fcfd7cb070ccd39a1cc62908c7271f21c97862f2cc4e89c1d034419d72e6a73a6dc0f5fc61756152d304424575e87551a88fff73400ef383871397c4841bc2ba7de5883bba2619c98c7ee71f8eab070a2bfdda7a6009ecd9c3a21c9bc505fe1734547d950446c5a84e1c60be99d79ef559a83b30b5a83c6b8dc91a4bbc0c22f99af51c31c53d2b9622c6f4491ed402b93a7969bdc651aae0ec70d7fbf199f80ab8b0ac388872143c0e64ece8a609fbffd658ae481b6d00e0e97f9cd4ed1246ef956e77d1d24f47411dde90c5b8e0516f362e50f93d6504158bdeb1fe37e1d5533915c3252d3b8e4f541c2805dcc0cbb061e198f9b39f7f24 +MD = f054933142774856dac63b63f175544298a3d36874bc37650a2682201f8336b621cbf9d95c87a9838181c1b5c015dd0c08723beb82830326382b5db51ea9283c + +Len = 36664 +Msg = a2871817b7ec41d5116195f97ecf6e4c35dfde5f0d5e8a17ede6bc6984bbb3633af33e6c66da89ccc194366f1b04afe54cedbbae6e5750b54935a91a0f4497344a361cd7121036d283d1f9bc6e54e0f14f7765d77f7dcf66abb14ce7854c3ffbb999dbe02357f1f03f5f066ae187a97526c50462aa98b032fba3ce584e9b53c07164a30f0177622ddd878601da64b17bb91fbfd8566f9a21215356f5d2f97a8959df9bed143830914591a107c3b4a10af0cdbec0eacb363c06090d477a2e5c605952ec01c562032460c57e06033f202bb3162aa2d0742c8a900d1ad5ac01a24c5904bdd37abc85ef146a468502cdd7e5ea442b066f322313a8a6a627d13cf456413e37ec9c0f5cf94aca200d28266e407d9de8752fcdc4e0371ed9c652a5f984f94882d39423304aeb2b3525dd118c44546a8a77780cb6f823bbda3995055ae06a6ac510c9c0aaebddd6ad558958d9fa57f23892b2b8a16456c6d2080423bf727aec292ca2ae71e30a13af2594c1ff696f7f1b5045992f2ab686e8bc06c9ce411215d5ae89b42e3a582a631e6615a39982575b389a7706542d4545dc02bd32551b2ef11ee59c89f9b162f2c7671b709379c31fd2171acee9a24910f062c891b67b7fa7051d2c2927fc0484a8009d0b5e3d0b8fa7254a30f2fcdc72818db2946d1c501dea9b2db7cc2158404a97611f02b577d43e2dced37625449316eb43e280e4e97b55c666daf107a64f3496315288c84f161f956f617d04c99a37e44324fabd91eace06a13b9c9836d9ee63d34cf760da7cd3c6f57f1081b5b06ce07901e08e9292dec3a482d8bb4f0501680fb65764612fe12928d735844efc3e47ae223c3f329a0c653856aa583bfbf40baf38b1bb2c57d125cf11f6f5dea73481aa2e15b7ba2ae154255f1c5840e44fb679790c4f831a2c21b4d55bbcabd8d7f635ce74e0726ce4f9334635a1a7e89bd037227007aea379879dc96bc2feb8ad0f17aa60a1a1869dba2ab3fd1cb82e5fc1afdae5cbf41840be53982eed1e6f40321769e1e290a09400d14d7db1badf23f0aa4a74839fa20a2e9ee8ac26552418c8ffb3ff8b88e35234f1bdbc49f72270c7ef1a2417f5685d3f4562ee56e9ffbb3a9532c385cf765ebc52aac2cab520ccad48f1fe703f93c45912adfb632329b3eea28b34b6ad824002bcbd981e3d00c20a7b770874c44ac4e4cb71db374bca884eed695b076c2f816cf79e452bd7ebd74751554c0cceb6e748395897b8a909c0c140723e6053a4a864caf4d1dbca0995ca9233d221a3feb4ed240836d0840fe5ae614ee7aaa90a3d51ff684514608183fc06b8a0998c4cb33c5429c06626047e7f19a65ecbb788c89b5ca1a8c0df7c2945748dc05ed1c56d9b90643e61d50f149b3022a9adc547d2a9aa4802c69021100ea65a3a56ba936973a161b7abda582e6a6e69d2361a6fe2e5b0045c0ebb99bfbd62c6146b8fde2f2d50c7332b7d0854549b24e150002781b6387ebd80a80bbebc7179588497cd482f633ebac905470fc17efadce2bd973684085d2d049ea096719b1c0e881b893be3a270556dbc3ce519e094cdd49ae889b8ea4ab482e780ce46a7573c61633a90b0d7020bffe81060c48999bb0edf4202b8a3ed5be2c9d2eea15fd1ecf6b706d0fdc89fe567d2ea082a41b2af77d4cc2aedfeed290c8dbf7fec8933252f5f1882343eede98dc2f364b4d087b0f9c1af88bfc2f327e87a6e088eee24f0f4a2962ebc0194215aff53fcc8fdbfc67bed12a597b6a65b5fda0711ef564d542dcaa95dfdd93d95b4d33158d09103f9e6a11e07dba4afcf57f3b42277895559c21d78955f8e904c8584b5013255fa522025fb38f552b58bb90f9bc48e4ee6079be42c614ae7344eb35b097e580e4dd812c1d0c04b8861956e74e47e9c6ea567a166ec4626aed2a327a05257a887a394a4bdc52547105bf75d6ab8d909b23c80baede1ce5ba91154ca9bbb158c87a58cbf6004f14fb14ab96d3b3f5c3ddf535acfbf328051a19a678394693f6bd5fbca49f3b2abcd32d6e1882da08fa1c091fec92508e4705d14e739d2875dac3a4c562cbefadc285ca879958a04fa9b1c9f738e678b8321a728d9d69e3bf7b97e40364e09020bc8f768887b98922694ba24c108cde2e4ca457e474140ad96f9698074991cf2c015cbbe1724a0739af563c9f11d9f3690d500bd38620007c1d4c2b418f33ef384779f502d77e9cede24df360ab724ae0da8a08db521256e01b253842846b92ddd563cc9d25cbdcc7b8bf61214bda573e5aded98c566f90cddfbe296ae79d3c7561a6bcf0ebb6295f890700618176aac9f4aaf837019c209dd173895b174d5e9742bf20aea7c2150dd9d14b91cadbb82c4e9adf9be22c98d896f1d273a1f07bdc1f199246d884225b319abd42b67e01ddbf1b0a0b86956bf6a6959f45062b068c4d52ac2a0c50d3d006cfdfe4a2d20a46cca802065d7b1c7076eb3a5fb251915053d6b8f891ccac04ffdd2e083e7c54000dbe522ce5221cee8e7f4e243508bea0d9226303275c0d62536f221dd7d15181e8ea74ef9c3effc963ae45231cb4c0f633d2150a3b938a50c7e256a61d759554e4a8d4bf013647898d14b9ecc7ea4ad8fa42595e3ce7a588b3d326315ddd81e187860c2bb28c66b7612f16e1d51ddec1a31f9a7f99ece152bdce2b30378dc9c057ee85a60ec5dfcb9679e682a2d3ef38b4b672ff0107c0472c1fd03338eabf69cc5edbce9467354e8371937fdf80eeb6a5935d5cd0bcb4fea554bfaab088e5565b5378f5d1d4e9a8be92b819e9c96fb40c52c409a79051b1b00934175cfcde1e9b68d7cc55b37f72be79cef13ff1e4c93f614195f4170938c2b9f7f99cab0c1af31b92b28e776934f983428660bed06ee54b507224b54dcc53c355d1de07f1e408c81438ea953957f64bad59fa64d50d647d6b3ed7ffb214e9d1e830bfb811f2231ae6d0089162543b3f89dc4ba8452d53741c4c7c5ac88b0b422986a02ffeddf860850846f066d24edb429df2edb35728cbce3b905ae3972eb084543dc41affff5569525436c92a97ab720f7ea9a2136ae10b8c9274a5d1ca99a319d738f8e08e562e3e8ed90bf5bc3c92b15d6093da70605ea0113c81c36559e0480ae31b284bef2e3d755ba1ac02eb1f240da70b24ffa622269b1709d4959dd68f5756e42fae7cf3cf96432cb6224391c80de16a7b6f3f10708ea8909dc1c1f0302b09067f3cac19756003ffbc90e2752ddca4445625a7842e6a45d8778062b7db247dd48f6ce8f9cf7122bd27b52443b608642b4dd95c07a0bc83240a47fcb7f0a239e0e8b5b03f2e3833c77025a588010fa581baf0e9158803f515ce8efc5b1142a1ae03ad9e3422239bb13e68c2bc8f60fcea25e2bb2844cef0202ccbee2bad7459be78cb0f833bd1ef0cdad5284bc18abeb737456eda577c28d5ad954ea435b5d674a08490a6ebb1922cee1132d0380b7f8b379f608630a9f398d961aa5f3a958c732370ae19a24119a3d0936ec46361c3d8df372cc680c6d4fc38c76db73c82003c79f5c446001f0a143ae258a2d40c002276c3401598516172341d1536ac09b6330caa8fc68599d7d085747cf5fa88d8fa96ba36fe17d81d9d63f94d6819ab32f964054d259340076b38c048285766a2b3c7927dda6fd96dd040e252c605d4fae2087ca8bdc9a01d66dd6c46d46b03e20081d2815500c3d6ad334ee1dae115629f72970f2989488e35dbbef564b60f3b434df0edd88b35eca6e3b557113beb2e842aeb0ce36297de7acc5ed063c8d7030e84742fef6f9e143fbabc4ef396d4a332a9cf1e65d62c828817c2745c0409ddc4ede2a4041e6ae1ea30aa260c5260652d77d9a03b64551ef056703da7f8062ff8b2b2f6a1182aea38de2578c62efce8c70d815ede8dd01835f0eea8f2255a7e2cab6b94610d6c719e2ba4b3bb6d28a2b1e36c96c9c2fbe2eb8f9452a51c754ce3108319ae4e9e2cac91be63569d62275081e1e487a45713638b17a74b3df5109e8a8fd2f35c3e8fc6b8c904124037eb357187c48292603e406bdf335f1a486db181e87cdac6dbff8ef95b1298f62872c32ac4b3652da5a804ba51635b21fdc8ee9f3363bf0ee51067ebeb1b351fa232ac263f3d89c6a60522ef24d3b9f56396982ae7143aa4e846d4090f8a812d43bf32ec4dcf6b0ddfba1d82bff11605387b30cd7a2ab829642775c92eecf7cf6b8d09f586f5a353b15b771d8937d9c1eacb5aef7303c1fcd726afb4dfbf2356a80093da512cbd48c95da20817348fbbd92b7919583be2afbfc8f444788d7e5387de62f352e1035d963530daf063a273a1f00dc3903f94a28c72e600afb47356695af9e902cf2ff29676a61e9b41ac59c3ddab86b18b5285dbd8f761ebe0accfeb2abb13c7239db85896644b8e5b280ecd38b4db42ab96ca2c5f9af0937e85407bb2391c36aad70f4b191dda301c8fd31c85cc29ba1cebdfdc7b63355d0a9728a985f65ad7b15677ec73155327025e773069540a9e5bcc378ac0c2989f014d08e31a756800c3b672bb38fd3ed9b91e4bb747eee645e4b271a5a44b92efef3161b6e438cc687e519045df3805de8d39c10fa5ff556744291ebbaa50dcb640cec39377a2e0653dc2410ada48409c0b5b97a807f7c07906ba8f4b4794ae88927f8f1749665c9d8e832588cec06798cfde001ee27acfe188c153c31069b0ed50ee54a0ddd58967ed0e8e2e0112e36b274bbae2c9fadc3766e80cb179626c3b088594dea9830f5ad5ef0b8935c25c79ce2f288232fa6de10d98faa506f1392825cfc01f30e146ecd58f2e28b1513b4b00f2d97b91fbfd85095ede0c2d98b00b353786e11892d8a46879566b284208658c213e4d7b622379d694075571eb697ab35729c2a4fa2d080b3824eeef172c4fbc54c76663df4865e1e3172f585bbded3ca959427a99cc9e4a461a229a334f600de81564cfc604afd7c67de8655c25d91d9865df1df43fbd821d9684ae38ca5d1d65a8a733b8b0de14b8bc1f1d7f59d4e2cf0ff6e39bef0c5f492aa39f9a258d5747e1cc142a056725344241e537a257389798388ff363014e3356fde2d9f97748296132058c5ae185c3b0ef510797d66b9c9f02678d2412bb76ac021c6abea16c6497877c7229c3b2d17875e581b2e9184894e30edbbad7437d8a4ea0eedda230a4052add5e1a8438f8197417187bf5bb161a58da618fc552d2823214b8eee031422a9accb275a984a214786a4e6b82b0af8fe27eb12b4385f0145aec6b5af1fac98865bf11f3ba2269e9e153960a26b55f760e504d15f84970c1379c78ba3dd9c4af0a28eeed2caeba1a4d6781c04825b05d4af387c84a19bf1946a963854a6abdfef69ebbfa77660d162b2a94366d8e4cb616dd13cacf73357d06a7ae34ae3a0008b9851b8430f4ed7df8f13fc50d5b8f10f0715385eee29e6d05fbdb50bfa4454cd1806012dfe7d5a2457ff704be19e1ee6664d9922ee44479b33a5d521555f84bccf52c3edaab50337f0b5c7de645ffaef70c086805f4b2239cc7b6b145ab93760a67f260c7abe7a22447d2892c6c32e310eb82801a9071eb31486a16a731916c285d45111d85f66ed399fbbee6f9262b4297ba62c3440e410f1109dad0748c8e955986d842b626f9eb962aa7ac7943d81a752298a68bd1c584d5f87647d0ff6ddfc14a1eeda8d3e3fab101abe3791689f7285d9a1ae486d940fbc88183f3448a7649016d64fa97bd7f6ef354325508b16705cddfc6ca77fcb1f6fc850b47f654e7353f3c4f17dce6f84482390fa9a4def8b1f5e200ba3fb0565c06e9444baf6da13a7614028d3dd0e3c620c2d1f375631a9158397f404894ac8f7a26c57aba2542bd288d35c7153bc068717a3faef4fe4b48775e88e92d0a3335b8e61551c12c3a31d8f04f520d681cafd6c79f58ae01193bd5b9b401579178b3557faa7d3ee2f63d09f5c5ba80e66700d343777cfb0bf2eff5e3874542bafb9cd28c0b398dda15233df62f7d1a572e1ff9766e78768f66d95a64891188f72a56b273ae235871f5a8e789e2f6340ae031bbc8daf7aafbe38c65a53ff294d6837577cf09c7095b4622891986c258a20bfa9cc3436702e2077dca3df254f0c9958d8506a4a13af65534a53d917e028d2fef0eee3e4318d23121da8766d52740eee38cb3152e47c3c133ce6e8965cc5cca6394b23218473d0f1d2929f3ef92ecee2bd14cc1eaca5408b46714d53610714a0cc0a7b5533882dfd4288e3000de2e11db054c31432d179a3b01c91b4b796b4d5f15574e80475451cb7b3c81c5737508659b29f9e40a9f044c1113b23251bb42cf0519443c0e21d37773ad8f89cd62204ff57e6239cd5ac54c275d307753e1a8c102866cc2f76bf37cb469bfda7675f81eb6a230b0ffcb5bcfb73e1c86da6f0df9a026fec18da3202fbff98933f910fe46614dbbd61c61465b430eeced6fc +MD = 221ca8cb81dae78612b8a7c2ced624bcf7dcba005250e194818805acbc64a41ffee4403672405ce5e7e81751736ef1e7addcfad82509ac4f0f5ec6100eea39f8 + +Len = 37456 +Msg = 1f55a263d748b98577929cddaa865c072e37d444cd9739c28fe0f21d2e33a925ca7fa2e2dea54bd573da1581934c832a010880dd271bf6b050f79c4b171910a71fe9251605e27e8493f25cfc3724b46eb37c85af152268c1eac46955af35158e885ad4083546791941a418567c551759ac5b88c280f6b67cc50cfe42dccee1616c9957bf541a651ce4b6f1984c29d675546d341f4edd0969499a061a882e9ba8336f55434ba66915e3f191c98ee6164a14792ecd69208911df3527e59a9b6cec44a4769d0332ae8da81d9df12ad5025e524921d4b7075dfbeda409acfa5e7cb3090063d463065c0c9a02c018073ebf3c77a3b33d22d9aeafddb0557790bff288e94bc4f0526a9a182167a0470f697869ec508c0f91e0a3b61521b34c4405f6f04c4c40fabaa5903ba516e586299d536e18185552eb626597ffbfca35fe7ab2759acc80f9820067fc8ed538db3d2478d462c2b60e1aa81bda01514339a6644b9e3c932cf592c347e3456d4150344410233418564c05faee0885a1c560240cecf39869ebf6d236577930a6a7ecf44643e1f5e0de14949f06a8f275f9b360babbfd171665052aa0c045b84712b7667238980ce3f56cafe18a42b096873942b6e04321614329824ba9d0451a2cba720f18cfe3e9445e3e06a35f27cc16fbb347844e1f132d6bc27d3ba040e59afc01670a0fe1ba73f129577886bfde4eff99b6cfa477f4cad1d27f9e3f0f710785f9c037df6e1d292d581c323fe096d94fde4ce8cf93ccc3669a99f9351c86195e4463c7c7f2db0e1bb49df812f2ba5cf3684ef857d963bf2f02127408ceeb788ec898e14fd5bccbc22321f3885d1382f1210726c2b3816736f33439428c6acd1d6fa6ad008088082b8ef24a288969f053efbe9b9a88ed638253456d6ac0c9c0141fd7546159076c5cde56267ade845121bcba7e66c0705a1b0c8e3b09d1d1f87ac271fefbc901a05ff996af07c52b4b616f44f8afc3d2f50a0457c9a6274a1e573fbdd254393d4c3cc9fa0c56a428861df0a431fcf8dbdb5625e83fc92afcd9b47e03f9f60f8417f935c966f0e441ab5c272250d5c952b4075588c6fb42afd298678b9b69b59ea9a0244de45bee3f6227fc067ec29d012a267e8086c2d72ab10be29cde339153ab3880ccaf2129e952855797e24cddaee3b98719a6a951361d15d77fedde0d6bc5ca308feec9fc09247e201ea5faef2287cb58984e35189bbebf2e7deef28fad9e5d1cdecadcd165801a3fe3ee553c25bf61d948a8f094213d10cfdc0af581e2dff92c016be10fc70c629c2ee6e42c7f3385f270d9612d8f4211a2e468714ad22fa6483ff8601df5735d1f47b42f28f78a3e8b570c104caf74c890df31ed5245376d58e19ae265b75b13b17582be96566c958c46678657477c3f7f138cf201039f55442f78ee4ed76d8d3802751adf648390dd85124ab820017e58c9a207bfd30e67f471bb0c401b50d29d34b7ca6ce9743a665c36e4d502ac8b04499ab4f47f2caa50ef8ac4a34daceac9547056a4adea981013fbdd18b525706adb9d8108cda22641f10e9fe0332bdea3a9c747ee778bb4c1f188bce800133571c7d3f7638618e3adbe6e245d9673b5127de523b411ff95623f0609acac1fe00354639d6d7235ea7e9fd3dc833d2c770016f2755d41ef43dc469c4dce81f07b07cc76fb8f58a2429adc654dbaf2ff2d54bd15c251d003c7154b730eb5472f0d6475339a2f0107f3ebbd4b016b7b93def6ba7694f786e228f799b2d7c9c6839f0498c301b7360a065789ae80fca19292cd553e72b92a356e6977822d72c69538ce7c4db88dbd5682c88ab550d72ca151c3d695e5fe86a3a1522c0b9a180e0ce0aa6bfa481b5e916f250689fb62e46a24bf84a2742f60d5ca9c0174a52367919f80abf238c7e364d55646510907919512aaa98ea7b28172f12e3ee6d7fb99cc7e38855c10fb1276bd429236002dfaca246a8b8006f0b1231cf02b88b6086c6484bb4160591eb5702ed332606a3be8b061e872a11a51b79055ca0f83ccb3a802baef27289a9892f931f06df6ce9b23efd10ca8196a3e5d60a3a434fea162144d26bd7fd95bd072bacd818c21b5b473307cbf740f7e1d693c0f66e022bb7e79eed20d909e25301c5a0a6fd708a6eea01b6be71dabdf57a4cb9ff85c17a4709f8cc6c8a39d7e1f5a82f0a096d429b17157a56dec171455d6b65d42f004e49f4ed009d400fef105f2da88fd11acc665af8d323a2978a57ec7a4512de31101724e61a21befea034bad09d96e90b9067222641b351cf91b393e3e829f7f68855366e99c84b8893e5753b8ebdc5a227041928567450cbffdf0052cf8810a2ef8a9600dfcf6a2022992ac8ec72db8108d38c7971e5443f5d30ae215bbbccd8ee0db0277cc5bf67e4c647f34744bf2abe3c08843494907c126ef9ea1d43610aec75315cf149afd2430369651fa1c501afc429f31ee0ba14b7c0601794ad91bb6347860bcda9bfc1d5c6eb78e628a19866024d208188459bc60b9d245258c35cfb0b2ade728463e905876ab93b37c971695d0ea70cc9b763c576fdbac6d36a721c269c2f805830aa6adb43a07f5d910f325acaf13143842f2eb91e2572bc1bad3f20568967a3aa786e2922b93318bcd449822e896f7430307a385b0ee6714b30dc8ee67698d535e5a7f7648de6e79163274985fa47ea502a307b40d182717ddf9cd8d871a48b677470dca5791b48b33e54378dae3af4487eca086c07d75b27fbc88489051b34b3a7713f521530ba96b848c2922fb9409d90df56493c658cde081818849b5d5fbee12195f6ecd7cbb0738d813ff9535dc422c8fb44c9bd950496e41b67befb6acdd3fa77006a60ea94f28ae9e385998a60872f4dfb4a3fe2302ab4f38eea75e474d274690b087ca5b8b7d963297eec74d7406ae4e9387d12f536133786a84d6b587f27d273618b6ba035e1837e2fdcabbce104568b1ef5a5a84b876dcb72e25dcd3c7d59d5e00ddacfff4bd15e22da7d65eba3f94d581a08ddcd79fce9c4e53a678ced55af1e8441ac6660c345f2768886b2a263cc9e8abb1a4e736b5e38c69fac03105c6b677f5eda1dd8efd219215b83f8881c753ca83ac250fc4f9528f6ebff115ed4a7756f70bd881c9d6ef17b44e20fdd99d3cd03168a478d001b2006adf54a4164cfa2c525eb3794728925e4f3157b1b5264ba1bccb6c49e237ca8665413106073608a20ecd79ee905cd30eed4b2ccb9dc94ae62cbfc4ab820264ca68cdd063486e6960343f74072ad878cf9783e67319f1ff46892bf3c639ca46737a6b78e2625ee50dcc9eeaed9f06494b54c1cfd3b203346adcf642c18ef8392aa40373abdc6c4451dcd124c7774d10272ced2d10ef68aff92d0af9c50af20597ed7d07e73e024dd66ec06abe3814930e27f049555988399c824e60f9332172615dc17dbe1187c941895304fa6cc59ba64eb06bc876cb99fbe5aabe8694ed4831fcb81d57db63813d367239a29ac7f097a816db91d19a99bd5d065d93b2bf4eaed3482edb27fd3a707c0552df4b825a8a3d0ae0d9ef5bff8af24a834917fd4d81e95afa717abfbf8263f497d8065ea1271675c3c85a78940cad5f79d04a110e5146d7c7425e10d71cf32750b653c38c153a3dcd85995720e8952b874fd36156c7f3a5de765a5849e63586c5a0ba19e5fdb14c433934626bc9b397f4ee3b57f08bf7ae8734f700de8730fa3ebfc4c872868488700bb3ff3c550d8b0ad70859a3445ad809a4bb6e5ea8ec69023af838fc59badb9b249f985c34aef00f2fc5d1369a250daeef300b91f072bd5a3adfd14a1d5b2c0bab8094940f9bac4c21f72672375f34bc3dde3f3e08c9dc8ee7fffc267b706209c9dc5baa8edda909d228c01fc010357cb54c732f97f9b0e668e31f561b0067dda63d5566587dcd8e6ddf0705e040f83680020d2a460b1fa9e610a4a3a41322cf692aea921683022218a563eb3df86432c58877f8bd0613218810f1d5bfb17b273b2c82f46ff52f0efb013c9a7f3f63b7ad671761a3f27394776970b413e35a2c43ca85560cdd3c9b407bfadb4f1edd0e6026572ca0d8274bdaa6870749b0a727aa8c5b7e9442100e0c9b0574559cb880054d9e235ebf168eda4ca09808214a6097fa6c34b02d95b28aeac52d38c1dd53c564530c82af2aa59fe5222df93d2c1f339d204208a5b2cedfefa3d0a09534cfc7f4e0b0b7b04ad750f9758fc30c33aca5fce06f43b24fa9363205233721a53e3484acd7a3cb5e6d160e01860f96484e169f12820a5c558cb53c54f0a26c19e6339d1f48ee074faf18ae2dda85e4544fae0f204404acaabf8494f9fd8c7e7611edc6a1cd416d03e57f606352ccfd3df594d3707ddaa9378accc25a129b60a60589879a2c4403635772ad0bb78de9ed89f1736cf4335ce435b54fe1f977198f0a3068722e9ed3574d1a1b8bd16fb14a52ec787a73b8cb9a0766c2f579c9b11b6a0af2919bf7e5c80e9e344c681b5c3e9aae6904c011003f4908a3fd593931316b3eac603bf93f9ce32780b64438f2b0a75fce71a4e503bc44c27b63626ea0b857f51f45d64aebbd14dd86322c6f7c87c3253029e7dcdafa3dbdd18e5c11069a7456d1a93392f111e9e7ce26ea6800ad342b1594519f8fe07f202de60fc96cbe0b8a4cf51b7a5782a96ee0fb44ca89094297081aaad62a55511417d3423fd90c63b8188f56a927f79e99451a033e1c8337928e23b929b143fac118bdbf1b556cc609bbe1acc969570e9184e9ef6bc30359433117473e2e91c34eb70c4c04e8c67aa5bf51e57f238c427d25d2cffa8571f2d3785e1cc0a827f4e47d28b2a29b02c8b3ac49c8755f7d8286b03c6c926bb54869eb60005528edd5aaf17ab89e7508f85b08301e53241216d4ae8f8fdc7bb8a32e1385bba5b5cbadc99b6828a07ec052c75d6eafc07b33458ea732fe7fbf604d4a7736145957a9c668035bc94fbf131e1c326b43656ac858dd218f82243f968de4a0d9d519166f66b0b2bc62543fe7a385108ea2eafcb997e8a60de2730243aa2414d8c48cfb05d6c92ff1bc5607262a287e4193f636ee4ad8bd14e813104ded335d99aa5b0d535eda02649ffe1db6fb2d04ece0312250b9d4ef0c5aad719e9e3903864e2e5541450bb47bd2f48b815ebd2af54f45c7c52c05c25d01e82e1c055d8c057aabd9b8d586cca01fdf596d9b0079c5a9d72d36ea92c070a56d4db169c88280f47da39e5470d23a4c688d64f91d78c4b5925d8c3ca471ab0ee3d94414a26c5e854abbdd0bf44eb12236314dc13cb05a3d1b5ead6a635c7703f3d7bc4c12d307f5bb275b4237c96c69f24c0f3c87a7f0071d3883bcf6093d4d4551035a403ee30c77f1024164cbd5e943e794af24e7ecdd3ef4f579860063b4804e008655355a922721b84fa1da5369d209c3653bf8b8852699eaeb3aca53004dd79b177940d44e72bd67b516804eb346ba84a5f560bac77e2f4c583bee73f953f3bc57d3e8b90901cff6bced442e8d4802bfb679a95c6deebf0209b0f42d673baa4b8c8cb4718b7b5e4da94bae5cc080ea5ce1f05a053d1d4ff446c265e811ac0430ffcb2d649c897354c75a473e149579446e82fc1c01b4ea0a5799c70bc04f0a53f8b9d9fa04d315f35d42963d5030b85da556160b7f5a952c835ca5003cccc39dbe7e429c8a004c12b22b24c23ef8ad90cd95303980b85a421334842e4dca38f49b41f0b0f8b820990f3c7733a49662c63066d30ecb7640344f48eefdbbf16f42d52a6aa014a59a70bc9d19f94bb1dfe514f285f22a3b4fea7fc16ad54dea726db56338d2a76dc17f0177927dfbf22ad6c261d14d63af904cebc6811ecc5d495e8311e2b078b89eaf26f268267b004d8282da3c873f7b0a43db80b94001f1fafe875ff0a0512f37e67235255b958550d09c8550088647c6b596169da3b14f8f340973eb0cf879960d2e6950860f2639a7578b943900baca8c65b1b2b0a71f0fe750755b5b363fc30da3b5720eb28d12f1fc149080747d20ae907982cdaa088301a58ec6f5d329c4cc1642125b4662e395d347cd46ac38d0055f95946381b2f26950e5b64297dea334d237b8d5934cb27b244dd2f46e92e077192e70dbf5c6640799a4b2aa4a07682c1ebdede460f4898b374e27f083335aee086b9f9bceece2c3c7f04395b34b199b41fc37f077026fad537155a4b3c445517275a80dd4cb728524f4ef6b9b53c06b841b21619e1d6dc9c2dee376c5edaa88a0731398ce0c1f35f6d54194cac764832f43309f9eed89c7cabe59d08355907ada8e69a38656eebb86bebe78084e0ecb8a9bee123f1bcd8fb4394019b3a5ff1168ee3098c252e9ff1cd5f07f1d90c52bdc4ce222484f4109c8761fb91e84003491baf3de4ba817ea00425e12d036918b6f7d94388330ec1e4d9e7e188c9b99cb9e1b37dde9ff8062792e9097eae87ad389578dbab667d6b48dd8e59ec592d4bfd73886fd63ff2d50d0c10f78344d89eb73025412aa9c07b4ce4dddb39010b9f6843a67a68351259d4e22621b730ec5bb75a571a6277688075924edbfb6bd4f59ed4863400f9d702f387a11ea72d2372cd6686de0f5 +MD = 9ecb44114c5cec8af0b3a10498d7cc4e0e60fcc3b5bed7d5f7df23ca7269ea002235f97062a6ddf3d8a42e37e48122a8f869007da8855da0bc62468b53b8fddf + +Len = 38248 +Msg = 5f07a4bf880f45f5e251d19d4652878a89a18edca467372c124083097a49e5a88e7b48d733375433e221ed9b4e32fde4470974cede828d37ca8a528f0a32628ccc02f21f8e8f12a6834f316338ade42d7759e3656ce2542c06864dd3a0499493e144a97fe04006b68c83a5dd4ceac3cde238e48895ae17728fdc7bbe84b6022694ea75df7371b8ccc76450f2d112222c504f7d1fa20f5b712d33e436fda234abae9c5e278d4bb14efa9b3a88114c89b28946b813db2caa91a73391245435b38cf8016d3f77f678a6eed06b8852c181c754c49d4a882e8b3ac7858971d296062f37c2a90f7999953a6baaecdbdd9891d37a7133adf13c87d453d1d403bceeb5fe36861b80da5c917439d1c467fafa423ec4f682245e7f25c714be7bc45d64495fbcf6c978e468f3bb1feefb16f00f1b70f7fb9298161eed7bd2f5859bfc2149bc90babde0dde54376e6a99acf09fea4d1de276cef62426759551efa6fe04c3d7c7b79ffa10efb0a0f56a9a7798bf065ca402317138a131cc764e0e32a520ead0745db95a1bfd0ceed37972dfebf0ce7c1e4969bead6b8932ec9e347b39a8f22c5b68a89ca388f1a78511a3145ed7bb11f9329015e8d5a54f74ad02ef200f6241e952be303c05e73186cdbbd365d644b4d15845056f920e888b04fa0cfcc6c397aac69a933a06563354f81d8b956f03eb1324e90b96033d64bc207a6324518eb41c1e9e54421ce7137c3b58bb6224711b5b230c9710bbaa6a64aa14703b423c1db9d569e1d89be2686901fdd1507904cc05cd1046542dee1030ec48c2a61b443b00856dda6205f088a7e66d6be4ef47839f9da497d4dc70ec9d8197b8f94f4fa28ca91a9c730d9a1ac54337e9a3e9a1c8a51f29ea1739cb5606e481f1b950a6dacaab10a68ff547952dc2dde8f21aac01a2cc20db9fd865e3098f87db4ab1f25a2715b0871d6f716e6dcfdfd863d4eec5152f19dad33ac92a120d19f43205ba874e739accafdea02ce1d4ae368dcac29978b2856655d37d81bcd7d8cb13ae58088d4f3fd5cbc56c57467bd991b44ecfe549e0f41cac34eb90666a14ce442e634480031030d5b63e53e82fe2689bd37f4f0544d65c2ad1abccab4e8e8c67f854d1b339ac7c62138ec9635b4929891b592d3758bcb3662c269cf7ff7673e3beb526834d6507058fe62e34987e632068d6066c970790f2b6f487d8e79d133bc3fcb99cc8ea7f146dccd8c8721293e66e8e60f17a579335049e23dab142e8f4caa4115c36ad23333fbb7fbb42763a4f7edad3729d1d38c1977be759c70873931543b44e111db1c6982a7979b449c4c02c53c47c59d8d01cd22648f2a36e319b364418eed2cc9962f9a26c8031edd1ece971ba5b4b1b179b6715df11d0e4b171c03db5bb162a588cc6bbbf6b35d2d02a58cd3bbbdb446de1a8d30053d9fc61bb2589213f35c76d9891cee8974aa95e0cdccebf0aa4f5517429d653152925c0dbf8ced1e7cc14473aed647e90ead1ca08f7eebab4229e50c76ca85df238e15d589c675e4143a183d83c04f7f490dca2a33ca5b564cebfea5fe3c1776793cfa5b592fb0ce826ff91f4f038db1ed72a76601d9c458913ca8ca211aa35e1c44128876ef28429007ef015cc689e8c186bc3c41d3ae19d9c5ec63288cb1fed44d66422a2d65a904ab02cbf032cc8d8eee10953ae09f01eb2dd1585bbccac069fffc72bb11ed6ca7023b65546fdd061c55ab5735262178911d609102cf750ba204de0172c44af141b5a1b8d0a444bd3361966c7ad0bbe6913da0f665f03b48480114d5976e04a29a6b3caaabf98a189bbad8ba5104f6b3b4349970cc45a3dd23a1a4d87236a1e679cd15242f9736811b09792b02ea5847c2ab53e57ef63533fb8998f04a45ab24a882330fa2a6d05f7df682a6d4ac6b0a8349d73fc42c79b29864f70769c3aac6ed339f514d4de11a8728fa12116fb765bfb72c64e60ff8c2c2d8ca0415d7243311885fd478b5f01a0248e959ff5ec3be3d9c5a3e2cc639cc408d18cf97a9a3d3dc287d7e6b0685c6b5fd5862e69e177ec6a16ab3dd7ac436db2de9503762ae0e15bc00396d6728886af04d15105a3b0e226e63ad4352226a5b5d466f3c2ace4c86ebf1ecc70062c7e7c9d35ac4b8b8d419aa4d13a477dace88c73514f02889f5f55e577fc2fabaecf52fef1949e0143a72fd30cd491074cc2913c12799856a712bbd3ad9a47db95d5ccaab3ae8fbdaa7f71115c27a4679cb08e9ef908068f628f0afa3e4b5b0e583e4430ea5e9318f836e8b03dc7f417033ebefc937edfab7830bdc98873fbcc9c65542204394a9bd35a01603029f28e16b9bd05604276334e846ed24aa88c9ea8f766eeafa308ceb2755581c1c232354dde0329ee078caf5c0678a4c35d9fed244107073b30701a2c055f95613535c52f081beaab126578374375a1a117a83084febefc4575f31696867a2b9cd77f8620c481b81617a34656a7e069524b3811416cf94e3cc8144c88755fb4e33d7220d99fbf12bd6bc86230c0435c557cc207f038407dafcb5614785e5ab1c2dbb00daff63eab1fa347846c19090b3930c87cf7cd1efb1cd43b06fcbe05b2ba46aba51a748ac1ab32a2f55f0ecbf66bebddf8feb80f56e29725ac7bf0db2847e2d79faf772df6eebe5d6d803de69e6c1254f44b757c01bf78b87d8ca36592ea54c655e58a82cb689ae9357612f363c858c0078481ff9bf1fd65e285521f731ff0fa50433b43bf975cd8e5b72a7d06ff13c19b2069f4763889b0841c697359676bd6274ee5cb33f978af16b9e0ddc87ec7cc37b59a1530e1c22adab8660bb64f1a0c337f3693c90d72ce1104d2b058d6093265aa9ebc4c8c2b273ecfe4430a357fef1d4a8a280f51dfd88d1e7c7f08834ca69d75e4743996295858e950b3c5c922013d377d1247551430e36d4aa48805069b57ae07b788ae5110919b27c8896894e52bdc7bcd3195b479bc77c9cb37e9cb831cc974f0aa2316f2813bf61bc5924d0d619ff2c33e82351550d4864d98800fe0654ec8da2ea2ff70906238080ad4bedc66f89e9ecea91a9678f9ecc64a964855b9a45fbe768c7f0d57946a17a9be6ee4a48ccbba7278e96f7d5e79af9e6b09359270b638226e2a4b3f5908e552add1b8c2a306a0ca800612e688c974249cc712782a78b1a2c6659cc01690eb76318bcb1a01dbdc274d15333cff38be7d9a067ef337f3b58803d58472539e8494c8019e42ffb7e7293e7b22f92863e909e14bcd6c3fd3de42c4de94de968e5b2f0fb7a4b613273c30e2cc6493aac77e4a111ba06b988586538805306d65ecd9a5472260ebd2a655eec86d9aa4ecc008be97da7a79d875383aabce099738368ab82ce6656cb4c1bea35df317956509f2e7e42cce0f864f7e78cebd62f48407d8b81f5824b14fe5f10f11e17dfdb9f1d75694671da51860c39e5f47eefdefbd6e259d1c2141fa9f778292bd30464214107b173debd30555a20bebf2002bc1d395913496dda74b6acc9e5eead0f793ed58d5eaf5ab01d39a8451e34048f6b0f6f97b544cdc49c8b46ab2b4fed28a25e9fae79e42edba19abf500d3b71bf713840454aac28fb1e928dc80536da7968e9691309f9a36743e068e894bcb1ba58ff730bd768c7a6823249c57a8bbd275247f96316d6ff7c8c7369b5b99f0aa7a7ced2906660f2ee51d2414d9236de5de9e01747a9638a4103bc8a6186ccc5aee70c237dfe7cf1fb12dc3e06561f8541b31d8d67c8888edf30219591032b29f99f202f79a8a40bf44db70898cd2efafb3a64226a7e2d517e9b0b50ef37a580ad5774be2d6bc089018bcb67ac004c84b4061e9df9d03a1c44cde385232a2010f5986f98414fb8b34c528023eaf55f6d949db4c7bbc897375c4d0ffad5e48523f7e879845c5c74d1fa2d3e03f9b650fbc2898c68596d2ceaeca3f978ac6ebdffdbd2fa4b269bdc2b36a16dd0824b0877675210487ac7e17d1d5807c650cfafeccadb5ab54913d909263875522cba6e29aa7ea72ec7df9f3716f3a3ae6a0f4234ec8d028a6acc51b2f279be51a00d6958b497b8e3e7bc4c6200fc34f6a237601e686f589234cf2e6fc3ecb095854ce34dac25ad308366d24402fb22679f4df0f16609c5954c235688c11ab4e5847dc351bbaeeddb43e617254579d4c90a5cd9f610e4b25a5dd0b345138a300b45aaf1aa09bce0acce43054ff0feb4e48a6905758c8785aa0ddf2bede2c48ecd6fda54a0bdd6ee6dcd8583092c10297fc87e5bb5027aa84d0457a8ca555134f4aa16d67d00857fe4e7b5789a21399b646ba2c3009b46810beb40112295b88c48a0655e87f94ffbdac5dace4bf60072591cde259c7e727aac6aa34e3ec981fc90f6cfd508d1bfca180ffc6c64d4ed1727833969d2d586f9f7288746661a35ee96575c2146af5a54636c233a2de289f09647bb78eac50b68b5cef4e3e2b05bc92069152b8abcaa0286845820ed495b666d116c382c78882eae03f20cf9b27bf5f7d401db1b1f363a4700a206ee30ece276885592e01685b3aa708aa9f4481edae341281a4301866570880ad476c0c2ca77557d6e4dc68a5f71bdc3a31b9ccbe0ab5893ce488a23ecc7c39772ce206787391fecb5bcb1209aca91a6e0b6d30a6f19c049e073e19435155a51c83e7a6382848fab4d75ffcecc7f9439490d1863eff32252390c2f61aa21f440bf0df33c221f4dc120c0d71d5d566f86c668915fc80225b7bf5b9b13b2b53a6d3d85b57cced4003615e56194b518ca95400e6685620e727f5ca74e31b497d4df2bece8aaf0695013132bc7bb3c8d4c6c9d48c05d25dfb0b2f73a70431a90699e728bb34fefa7e75f04dc2e1a5b7c9e15c75ec7707a3c8859785a28d14b68a1b3f8aa3ff233566a22cf3ec03a78ae6898a498a245c7eea27bc6509e64afe72625a791b41b243e84645c9aa5a2fdec51fb1e3d7a6575bea520cb64fb83aed59dfc668739532a26db2e933705da50fc01481c977656ed713a506edd67b7b0f9b1411cd5f620add817875c5f076bdba6218785ecbfa296d20814970509871d1c08fbb3c4140d151ae1789f58d3dc04b459be43857cd0d7a8b8732e220a7b5d064a32129abb9fcab5e108446b92b535ec50f73daad6691abaf1761c7d911bd87f20ee219f12603471be3f33e06c7fd518af395ba3f5f4c6d15c24475ec7f0f74f3238c81d42d7bb15202554ff88c04cfe1d8d85b700f943b5a085980cd481203d2717ef5a728cc86bb1c38f0f0f03016743f9a32f1f01f82e66a1f7d1df56bc13a7947e9fcb08c1391620cd5a28cd5e1ac8889d537c934f0456814df310f834975cb65d3475d21048fa44f426fca8cae1563f5b6b3c37affe172c80bb90eeee92eb85756197721b600338eebcb31bad829228c6bf8a7580e652aa7a7187c054cbff09ac6e5a714c48d903a16474af70c6264ac4978cd62b82ae04215d1df7cd0c3e4beba2e5560aca25adf76667ea7975baad3e3a6ae1169bd4415fc7781ac01b50521b4761a9bcac8f3fd709b5573157f55a1df14d1faaf86b691bf6c3b197c1de2622a3f5f3ccb7bec02896867b0033805847045d164f631c853d332445b9c690d0eafecabaa1b35b38d45501e04fd302afa6bbc1506ea28f9bacc6c35d8ef20d5759a20789a3680db0c28e4f0d84fd2468215da2556d7e6bb652f7c9817e0dfec359d6d5e53a9e7d2eda89978a097a8e8a9f3427abb6bf59db160e5e39f1de0a1dd1e15c58ce1c53bd048d02e04412e71d0a8679dcaf2d0014e052a90e4f2eda6ca80cc369c7ab366228e4b8969f8cd82a499cbf70c28f0968980cd38700c515b8c89f33a18d13ce272ed4e03480b208b744be22ed56af1be02784032d6c6b640918e2d386881cc413fea6a342514a20cfe334caddd253df8273026286fce86f68801ccca2218dc02e81a22849791dc7770e45dec7a044fc5865ce181c1603dddce897457dbe3069819d0f98d160f3a6b9ad3a8634274a1b6ae52f4c772485576e3899679dc9cb68133b371a606e94649ca85becabcf2ce4bedc6f271d8c378425586b598ca82764ed4460d7800bc7aa28e7f035b400b4fe5e30d4d098b8de0d09315544d2c50c06159ed3f6b89f55206652418cd722a81252cba76f700e459922a99e50f58642f69533d8a09092076d5dd296179d9dd1c7a0932f2e2bf833d179a990a47f5590db75e9b6fd914ca33a164d36fe8ddaf7c65272b63353dc6f5c151a7169f899bf5ebbaab7344236f12e97ac6a6a303fe2b7704f82a66f24c2e4fee28ac6e6b99726715d216e2cb6bbf2ead87a830c3559400011dcb00837f40e3deb23e4d31fe0dc9eea3dd2d535c72d17b8ae70ab25260c0ca20c79a57dcd84d91b84eb463262274b385389c71cde8824334d5a95750fc19be95a28ce5e15eeda5cf402c85ae5b07f31abba8ad1c8ab1b33a168508fdd08b6ce0ee50c4293f34995bd51e0ff301e42bc8c8ea4be4d3d039ff0c366d9588864396fdae591103c2dae250116890c1a9cc1402d9f4935e7e55e83925fbd47eaad12c62ce3b354718e8e753af261414c96290dbe03dc4750c85aa2fec1a173d599415b068e112739741ff423fded975b37da3c6956de4c20b47a952f16efa5f231af768e6d11513ce848ece5be96d6f088bd145822b70d01b2a6a34ce50ea3e97c425fec081c9923f1f1a3a7bdc4c5b28fbadfb0eece4f99c8c6157db766356182e35d49e79bc8969802629283e02d4a56bae3 +MD = bda8abf3e35a759b9444370ca91c0b845a93de37d4bf5b814bad94c6733fae356a3d90c779a4cc9decd5722a07373b8edbc42159562a5eb764962b9541ce784c + +Len = 39040 +Msg = 9c8b9ac56e6653fed43fe530cee77044ab3ceab021f0cb539d8c0aa0d8b449ffabac4d70241bb072d90fda237c422da8b09c80cf1bf8cff3bd2b302180420978100c81d6ecd934b1be802b42e8a70be95f3e8ccdbc4d2dc390f02771f89f9fb372b31f3def2647822a9bc0d5379e72ce5f2cf7f02b764f88bfe2d5d8695371757aaa10ee558d51aec567812494afca21596ea78191fb9b0df10923a0fbe4e989d0f83a314593bafe38ec577625637ba8f40a86c715657b19cf6ef90fd5dc6eb61ba5874ee7c2eb372b3228151241ed2cd90a7b0ce03b56730118406f20c367c303bade8c64a14a244542de4784d28974af756d96190594e42e0fde06031f3e79323e2634e4b8408c2f235f55a39cb54a1f5446afe94c9c34fe5cbd1da77a5aa04d39498e8e90363691dd95879629da74d1aeed9d7896d82b1b06c3fb345b2300ffb42ee28bb092eb11796624860161bb6c8b4aa8ed6eaf902a15daead14b0160edb5bd7803a0bd735afebc769aaab0e799f4451a7159892dd692e930a6d15c89c247de971de9209612747ec3fbae31c0ffefc6392be1cec8c484d816dc759c44246f79890112221ce2e39454d0954b0d4787b54f448de72a9ff38fe49bbf2957bc377694d8a32acc7154e57142e5659818c1faa2e3e53a1b0de8f5e20a386c8a31a6bd01ca25a26f68ce5b617928e9271ba77d7a31723063b669f4585267cba72bc43718fe1ff1cd6e5add6e9ce53e83f740272156bb32c94481738d9ad4af74549aca209d197fae2cff54ded3a5cc745594dede7949a6165c355bca0b0881bb512f5f63ce9bb4da49c5a6fa48effbc2ddac8bf8c2a2f512a88f9257cd8aa742cd8cdf27ba2ef8186eb4bc0a204b3334368f17b85a508885d096017c07e28bd26eb730b58859b33243d57e568641dc930945686669dbc6377c529081e2999332dcba3c5561a54dee6f2fd425a05a5ea7fdd7684a16c916f053cc28ad8536292cc09de94e6d992e159bcaa7c1961d2138bb4cfdab8aa4e277fd0baf491841b486c26621ead3bdbe6f6eafdd7091138e0eeaac11d3edf3919523170f9dc5439c09891fcb6fbc9966c391e5607bb9c20bf033008b08663f8b126df92ef1b2c3487dbecfcf264fb68cdbab74162a35b401a83e4f53931d0f37b682b8f68d074922aa087f1557b59b9a7d6565e9c42e71d9fcb2a151bc3bebff480b5c4db8ed5d91571036844a15d0f67267bfc093cb7ff9b538fe6dcae85b4a92afee1dbc8c88fd4e7efc064698de0a81588a82dd3568cb9b776f8f074be8815a17754ddf0b51ce55f9d98295664c3c74e1cf19eb93b4b57518fb9fb98d190a69eaf9c56a92416d3529d6e17da6a2f612a9956c050ee9210dc2ab8529d5774e87d1836da54bde40b6b7fa094781699f2259e46372ce9176291e86299f4c89b57b74192dd75cb3b09f4b4ee33a1e289e6d98c4e67cfa331c92d39473621ad7a80f7ac6ed49ed4526ba8cd857a0a6675dbb0f3edd69ba587b108add4cbc66e98d098c8f9544271e08cd23a24ebf40ae43d3655930823887fb6aeb6a9af35848cd32517e0d0e31c5bfa1b7b4aee11586b87f431ec80f9948046a9d4247501a7bd152729a3def34c2b4fef114614c4c76248551938b580823fed6496d391bd10a003196eb0d31589e4eab79cc4d480e07f0ae36c262a4aba1517796f45a9ca87ec196667a661bc4e0f472f6e45c1f83bf82c29bb3353daa4965152dde901bc55d7e4b894e2ef4a110101911627517d2294389276ded692ea4a278b533c5df50329e16a86f4f0516b6096971507f7a24ca9bcb83f870715f387167d7fbe031728289c06be6af964c5b472abeb5648ea02cf34f565ca89d649038ab3b3fc95952d7a61179ba38ee6b863224a29a0b9c6fd6b1de49a17c346631600c8807689f1ab85fd07bf3d0579ac0321ec3065cebb8503f4004d0d3808ca552526759a54aefae1bc7189a61170190afe2c9013fc5a423033d2ef197c7ff7375457f3f68a4fb4043bcf9b6d277c97e11365d949c705bd6679c6f0aaf52e62330ad79c099f366f63d78c64f0bbf1a12c0e327c55b3504f1d127712503696a3ded51fce42080585872c3266ef4371bd524b1ce9e645cc7fcaba4d9497b53b34a13fab1b4e593f8ef4a64c1197527f54ea567fb279f2dcd805cdc527fff5ae8d20a703f37d0746e422e25405b76d6cf06accf5567f5f03e054c9782ce77c4315b397b5076ca6ae3d984cc4b39df8dd2839faf85664cec4211e39d113ecbdab76f0ae38977b9be7f3db52289bd9894264fe8d0322c8e6aff2e89b5a8d7e3e4a295e46f944487b969f52aefa3ee8933f2f2edfa05c2a1b2a0e3a6a9efa2a72a1a562fe919e51aa0ca894afb40d49bb25ef218f4a52f6f0c4bb8a23f8da600f346385417bf605cbec9827c0d0978b45894d9d088bc7bdec02936e5402bebd4894ec5b9c12fbf335a8f672aefa6e1bd6eb92e7c7cefafd81561e4d773707a0d325b85c7b1110a89bb43c0bb67be179f3cf87a8699e8d144541b4be1a2055a913795ffe6ae0c47452a0e16973ef923400a774455a74fec09c681f1699391934ae023bb7f7fc8804fef18ef263c010c8a205e14516ecb0511b0b860d90fbd2e1e742d41f8edeebc8f5288d6cf287bda64c5d672e2b50526435deb2097de3132f73ddd1abbc02604ed9b8650fdcb1296b54307e77046a556871440b70dc894a7bc8159cd2ec0175f51113ce715ee6c4767e018fa63e7529ec51cdfafa1958e965589c9e2bbb46ad5a3fdd022805731f561e531342361b404e5bef190bd0cc906a99d56e1c966c66ecba76a89a6cf0aa88b9a7c1c187c7493d0429ee0c8f7eaffa2042853bf9cd433b15733a5ef1d9f69cd461e3aabff3a506cf00d292a1c9c89270866c0071f3c2b3d5552fdc40b973f0f32421642b4ad45a20f67f24a4385ad21ef38ae08b7a55e58e8f01a8b5f9a3339a70e39476176795be9d3c492364d727602c7a72a2bb7d5e85a3582aee2524c33ebaa2a20cf3df47dc47a2669bc9de10f893b32d5451b97d6f148bf935c6492e5463f7137c6a9bff1e984a0379c1d00d4ccbcd871cb79ac0bf65259a4957b0d3802f597f20e62e1a0a018ba659f74d9ad12701f6686781d6eb07ad647543dc61266f323bb6e116271315efd598d4a7483a582921d3ec1f1e669e9c0e66352c45db9629df9af5e4b4be37ff07c2e49d73ccb18b6fcbbfc305d67c69ee888630fff44698d1399f0a318ffa31c3649170cc2cd5b156cc4d0e3baf43af9b58c18b0e24f317c73f47072bfcdf107f0a85c1bfbf37236d623e511e5566d58b53618aeec21e2f2808885c02895923b1011c10ad18485a1a09ee4c2c5d5864350500c110704a375a21dd8963b9fae40004dede32bcabedf34fe75fe44bbae42eea09be21a3e9c8f417a10fbe0326c9c26248aaef00b4377f80a3fce494e0cdef7f06e280c18f6c7c568d6f8ff98f4d9ec5d3d710a903cf1568ceb39bdd8c99ed3062cebc7dad9a597afd29480176f7eb9c2b03660a1d2d6b54a2048869f0c0beaaa7e3332cc6cb21d17abd74bf80514f4198b04da852cac7c0e87028decfeaba4a60c093536d875c0680ac94883dd22072b75e4608674fe159ec86fba06c6096ac17d74b85f4477e869967360ff203059c017dcdaeacf51e7c28a97f6378eaaa2c27a7da390d93efee3f8dc79b6f5c752a019f730fa672f5a44758327c57b18b672aa2bde11bf54689ed70c7cee856e5a92223a4bfe641fd6eb323a36f9b7da0c99b686522a1d419062dc0c52f0f7add95fdaaf113eeeaac37e69c40c1b6a780eff4596e5231b8bdcf7afe3e104740c37cfeb5d6b012b5689c6c12a8f73bb7a226b00648043e3bcb624f79913712414dcaafa4c419146ae908be373a948d369b2a68ef70cd39a5b85b25c37cf812e4c31b8b2857c346537419477a741e4dacd257999576f1b6bf1b16a88c4fc7abb3c9cc1b80f0233b17b02ab24cf3f8df72ce3a9c68d93637c05a211204884a5f26d868cb7f2bdd651013c9692f18a8c52105401bfa05ef3f51fbf72cfcc4e4afc6658e2553794646d51581e6a180c291400e0482c98ba12ffc872543b5642b100af788b3ae56e272ff4bc0b5449acab6585ef45b47e8e0ac286237e0cf1482127d1504f0f043565bd71d225f78e525c6c26e9c10059c22165e438b9eba248e4995346f67c9dd0673f500134fceee682526b3684b8313da010671acd80732a407dbdc44728b62775de1ab0ff0a7251663edc3e56830ee9cfed993182726bd67efb98310bbc5a22d6c156494fca207950590269ff09f9adf52101e5a0699235e53d6bf50adf8ea9d4128c33ece4024787cb642046f3f9715bd7279fee0ff12dbf68be780c3a5ca4b5f644d69eff20a355bb8ac9f5e9171d4a3594c535098fa752a71a21d975cbfbc297079a2dc380760051fdced2925a9a0863cfc13d02758ce820055a3837e396431d5ce760da2ca6d1b74495a697cacedd8a60f9cea0a9c2c7fb098bf328ad5d80b0cc2500e92c1d1012e788389f6fa213d2d0d7b08b35333761ae1ad0f13039c076debcd59b86c1058d6f0d525352fef162a6c1aa6c20c5827a7b70983a75104d9a1a14a795447cf84d638eba5b7acbbe636a2186eb7362ef6df8f512aa82cc6d4208953e826e35307d4b72395eefefc3fca55e0aaf35f1c563ad1108ea6153699731a862080ad4f643b0219705ba544856dee0ff616e5a4d83232d40a21a8f89c01cb3dacf224092c718039cf7e2e094989d0f2ca82785cff6e1af8479b36614e551206f80bd634c320e8010dc6f7df1eb6a535b2d675a92e36f019a1736c254305955e9c3e4246bac1700ba5e6a12a577ce14529836c1e07356894a25aa8a8fc7bbbc103f9e6b395cbdeb6323da87f96350bada909ca2ffcd1db15e4b18a60ed2ffbbab9df320fc6b87a9d3d3c7c435d879adbbbda2e5381b4ce09c3087fd197aaebc8484eb2cfd01fda2d21739b0a1fdcf55bdc84f72d3826c7dce7dff79f7e64f26619d8f758444a83e2897393585fbdc1ba859ac31182c04f2bad98901f2406a610b90e6e4d95f0fe69cface3a28f928654317bf0a4f419ca629ed2b7e50ad87d54a04f8614378bb00f8e801a8d320399c57ab92e6bfe8bc01e261efd65a572feae5a2ced50bb832f6020bd965ce989929acbc2dabb14aed6bafdcddf25866e908a6116f267a46fe2e83085e5a6188d0720af396436d8fb64c5606fcba92023e9753f9e33ed64ba612428a986fd41864e139f8d7943bdea00ca08854164f51b5ffb504330367eeb3080937908d6e72dfdd0072f888635f3213550aedefd97ed6a894d8665f7758ac7a9eb74d9a78bbc9cd290aff062c3cf4ca3d33d02b76af29fab81d84394cb019cfcab3d77f3a1ea81b7a67f6f5e09a6e971fac04b46f0d375ee87c96782f1f836f55d33725fcc1062ebc32e43fc5a429e3c51c91700cbf873aee9ca30668cd71c207be747306cc6a6eb612d2cb237fac17f52c804994eda1f79027b3ca3fe16b30a81d96509f685d4332b0c78144567f997884d82651c10efe97c2cfacfc83f921ff97a6a611bd6615f6b3cb496f4f2bd316cba1ee896155b6ca17fd94e6dda4fdd5d5aa5ca2f20d4cccc4e60beb92372b96aae38b85f5fe86f3ce476a4614f32cf27ead5a9b2fda507a8b21af01482b0bc2c8a7e48da692d8d88fb51664536f161e3bb488449e568ac8af831df99990da60cef4e1e89b981343014e8188c09e2321b4c9cee464086080d9153e1bacec003963d36ae0fe989efacc1a91fa830abcc290f314c4ac783b68b0def8aeaacae515304b67bbf41ae3c599212f01c53b47ca783b422d9c2f844adde634fcbaaff1bcdc64c0c2a7a7496e106c44e7aeb82e0213a740655cb4a1ec0735db4b05258cf510265e3d3fc638bbd802b6f26509d72f0a42f6b4158ffc16d7d4d3e4b3b31e89749a2774e30018769aeb6f6b13b6ac1c04114c64ef49fb92f4ca060febe20f41afc704aebcdc5265fd30559adf471390aa1e2bbc11690827081f5a14d538c7e36ab6dd35f2e24c51aad852c6f2457652a4707903a4778a9cb8dbb93a9a3fae374c6d9b4fac9a6f0148eb4d3873383c2b990f2082cffce9baae070aca627f2c07fef62445128d233f80722d398ba6cde331040681bb7f8c4992ab350c547faa192759625f4e42d1d1fa73dc0f62199142155615478f88dd110bcd214899c78e36709c3ce48541df805df941021f18f010ed0d331e749f43d9c277b8c658df422681c9991ee213b7145109445ceb2c521460324a4c924d266b5fb0e1cdba502cb101e763538a3fbf5580adcd63eddb1f1717cb411a1019ee8d898184a7e7a0b69f99ff81cca84d610b8fecc4614eb0bfe1bae300d0178c0408e8f08a9a065a47b7f018dbd162c604fd29cf119c35309a3af07f6fb6ce2ccea32508d9ef400346c2af3a59a9e0310ff4f45c9d5dcbe518ea61a976145e84b528e8ce5aeebc251d897d6de39e4b16ecb8989d4eeb3756a2b8b668fd31ee19225dd84cf5dea34733d103ba61f6cbfd0211be9a0d90a20b9e6d97c5ec56a7757b0c9e8993091cf2f065e828bbfa876fb9c70e5ac392348d76d1abc62bcbb11f29fbe28d1ab550adbc0cd5c0d9f2a8f379a12fe5563a146390ac9b76a2d8339f95f34b61742b6600ff8d7289a3265512aa68ca43b0d06b1556c60eda3ac5557e26bb810c87b3877321b1668b02ddb753b4e4867db79c602c2ee7adfcd9d94143431d2d963d94db8f8a405acedc61f63e00dd0c9955e51c2f82d620e3685d1c7656dff7087c1889dba302f55b1bf8395bf41b03a271f5c7a6b95c0e97d099119fc6ca86692e85bae0d2bee039a5eba833f965 +MD = 64fe3513e438e5e0a977586a1780d30795367d6bd622386b4fa8cc9a91a88bfdd5666a5a39ae2a9f7f2ec67943edfddb42e96e5ab81aa0cdca312f9d60f8c9dc + +Len = 39832 +Msg = eb2d8518ba3168e2431f40ac2addf0227b1603f13d82e12b4b6849ec5f61fb3e705eb53a3eec61702bb78d894c4d1b2bc0253a1d40e095acf8ceca4d95b41d83a0cd6e030a0e681708aefc4021e60d1f84f66d95a068092aef9860ab12743a17238196bd471fe49e820d7418d02f2fc6718f85a284a3a66cd7cef550fe28b9c3a28216ae1ca53dce42dbdf5a81b1e7e72dfa688a1417d43c597670828059044dc5d9d71eb22ada6ff020244f5ef29e4c603f00957a4efc601d9ab88ac08e827d338dc0573035254934e52b3c8c7cbdbbb364330ddbd084a1ca41b7b0e74f9b1d95a6b8a0bf4f8523b431dc6c36d7aafdcd73eb386223d6c70874543b1d25b7f3922da94087fe62c61b0c1f268289cfda58730f6034d1589a813a777589963ec9d3297a80afcd25fb0f7edcb1981c9319f96d87cb7c6274e2da9b08a4542c9865ffa213a8604134883890fb56a1185d845a683bc1605c9166be9ff011a56f2e8fbfa05c00c1e4f8354049645dc50397e1236c138c084916efd34f1504a5e66611bb2c3dcffb3dd9ccccb2ff0e2b67a8f9fc82f7739db06d45c1b260c47c19a9b29a4d9e5f35d4401387d1b5b0fccbf8948bb0cfbd471afd3031d0b99b51906039050c67f6983293d416b06c8d5fb8ef7a7b0083b32d0e2e78cbb209cf4cd4f16fa36f80dd4cde3bd524570deb7db5f572727afb9d781468e4365f36a9976cc61c1d81d15c7860a1df57cc81137e4a724518251fc34fb4133d1bdf2a7157e045081a4742ba44412cb95719ae4d89ffcebb1709d86cdb77974b213bcb6fb7b9d8fa43cbbc41d908432dcd467ee1c65d719c142e0ce144e45dd6f17a03ebdd7ee6bb401425375f3d50016159d8165eebc3b0ba9da46bb184cba632a4b92cf1b7d714b82a67e5fd69bafeba5ca33579312dbfae5d89504add4a828dc2d57b1cec12ca53166893dc13e9ec8156c9863eb815909b76a1d839794334aadb3e2085a601a8badf128924c345935d503151d607e4ec27f1d64da3e01c8230f7de63566c0b75958d4b0efc0136baf751c3de69a7039bfad50ff5b3983f35c81e9c8bb4c798f88b29fd6b8c56242bf66167741e1ed865bd2a341a8e2b1215195960e2c93e10fa45b90fe9fd4977ac0388055d1df6cd1218f82c025f21ffe9ccaf12aebd59dc436b4869ce77639706c6cf85df8fb64969b248e1f54c006c7b88299b38b8a0629ba4dbf362212aec01e63dcf439ce7b43334213a3d7d52c391f6cee1c8e19c0bca987c95ef2428df640cdbccd16b107538458c1f211b9e6bf4bda6cda660d43f97f03237bba8e5d6f9dfb062d025b9f6408e9078e84e6dcc6c86b947195ed067cc5406c10fd4e83a8608c47a8af16b9e13b7352ddb3d464ec0f910386a0319e92f6bfe1b33d0b974d42e1ffd45f8acd5786783274211b159babdb286e276362f89de252d6fc5e0eaabfacad14a6107033946834c65f13655207ba71bc7e0af9fa15480e00bdbe506d214cce0e15501901cfd3c858b065eaabbdaf8dd61680da34176191a4e39512f13232d1051fc24e5ea34b6bbfd78b0c05383acb6fa37d7a22fecf7c48208accc34cff54be47df7686a92fad4046eb500b01dcb8dd8749504345d22c7ed6f7c47fec22d78e001028266c00fbae610f3d099515e494448d0301872a309d7974b0739a1dd7f8eafce9ba466fd53eb87f499d7c76bd486db0e90a3d281748aa7a074ad170b4836b0e21cee2bcd895dfb40c43326fd15e654da8b9d25c4ef4dc804f621cac1ba202bc66b0ab7864282935db7721719f4acdbb989cd1575616722fef55f6206bf934903f2c0b33068a478d5dc5f41c9591f9a35f2fc489ab421dc16d92d88e33ed9322018dac7d4e209d2309ac14d142c88b6d52ff2663ecfc31fd40a54e45e20380da5441e9a7998f9c8f4585fe203552f5a21a67718669a9512c1f19c1d824bf9021be056d52772be82ab8002a99cbd5caca2c053061cfddede64f4ccdb54a8633b0953481fe6589f29dc797249e94a57d4dfe54dd767e0e8aa457caec8de1fc0ddf705bd21bf32e3e510ab776bf2e567fb617e2f33502bf99fedf2088a279956136d5e7c83b9e8d3ddce7ed9b7be77d649aef1bfc4ddc65ae5e3bca3c937fc6f03f4c64fecdd62b73a9e5a5fd455e6eae550a8c62f189953a3af44472e173251d513a5fc043289d72308a7d36bbf1cecf8cf090b1f098d2b01daf0bb60ce2144b253634c74c0437ac195cdfb2304ff23a9b17e583ab7882c28eb2ac90864b392c23b6807e48f79e93ccc349fa52d79d921806e73282a739c406a5937cee2ce812c531cf5fba8146dbb3644899942715487c34125926a37c470e0e4ce594f5c5b1923e8dd6212fa4c66596680a549cede04035e362080baece1d4355652b34466b0343289c1d515ce66bf004b744c7abdc0c72f6e7973e65cbbceb39760166eeb1a0d63bfbffa4b3de3f07cb3ac525c39e2971b95464ba25b2556c6592c81c2317e36e448048786df04734080f6645c9c93fb8a722e10d53247f5d6635efb288205381cec3987adfef2cfb67af989622cfa7ce4cedacb692a4a324b7e9d8d8824d69a727206ffa8e0d58f44685ec9563340a19271f184458956968e72913eca601be450a412f95fcdd4385414cc2c20f78cf3fa231c41519792a80507e316d67ef99f1d48067cba0f17544d44ecbba9c107f985ac030c759e27f019043b1d94c69a5240278991a1edc76a97c1667dd7d8d83b9bd34dec99e43df63233405ced8026852309443ffcae0c039a53e17b93862941a561a3eaa5b2fa43b95a9bdac7f3c4c02db6de8eb39b0da6bdc105bbc6111f94091fac0c8150895e1442f49f0c689d8cc6f50086aefcf3db6bd57b4756c2e4bb31d2115c160610cfadb3f1b4a227d970568f5230d519e52b0955eb272de1a03e834579e24a1cb81feb753d2073789ff5454d7b9311390c1c000afc6131b67aa6693f8da506d9a8d5354f7eeb65a317a1fcf524b748a59038b8bc57ff4c889b794a87f5ad33870979f50a5d1e62ef6bffe14ff4a563a698079933a40865a12b428ee65802b76c0293926e81c051a6c0945d2594644b824c100c368a85634751869c245ead7cd0bcac744393d9190e41ead93dabfce681d5db778fb17d30c335cfde09b0b568fd5e4b03513a72a46f1388bb60e2761eed5bf04304c2f8b35d00a4bb5cf622653a11f9a7601f91d91361f66c56e1d9da0c05d8d95e65ffd45cda8e9be7d7fc5acefd3dc837e941a04151bd55e74f2d0228fc1a9f6441987b0aea14e670fc4c2e02499fce9f4187e1400b64dddbd57b7d87683effe0ffce90ad59be05c00d1acb1e1ea72160cf6d8459b8736bf91aca357170cc609846a6fb8e4e145e9fb16c186aa3de29423afa72d48072690ac72211303c4d2a56bf2aa4f5f29f5ad5904cfd2d01cb4e0d2b3691f98aea3ed6838bf90bf549c4e0126174296de6612953c162b15ff7f988492aca0fff635225f70ed549c34698fee6535174e671dc64a2d32f3ce6e8907c3ddd066006630dbfcab28d33cdce0d7ae309241c85c9314e248b4c17bd287db1ae572b32c874d76ca5800a113c688b1bb28ad66a7475caaf82f0a28a0e3f26ef45a122ce6d1d18f3307e322b379d7aa8fbde4da6d8fd0d4f640b17dcfeb3f5feaac2d47c1ce7381d12b6eec8e7f343ea650e7318dcea64f670e29457b70e50a584c22884fd589fb2f430273174f44ca999212f08a5c3366b5180024161d7a1ad7baa052d39fab57a7df3c3af0528feac3f1f68bd5e10eb77adea47e323974fdf388155c0f855e33c5607ac88c216c1bdfe1108802d5aebe22d2a4d8526d5c201634fff8561ef8fc22674c804d446fea27efef6993a279d747846fa6f921962dba41debc49d5223d29642016d63401b2468ee1a50ae026bf4374938e88eec9737a1f201c5d30605354e7a3d09968d820b64e95cecb170bc2c1138ee3942d4c9db05d629cf2c919fb3f524662296b4991f19f8a4b76afbf9e2af1d04abd75b609076d14b2cd07d5713334663fe8b3dca283022daf7022a88dfb8ff61847509c41e9cec4f22e652971fb2ea1ce59cb17ced5070e6f5a185d2ebd5e7ef0c43655d4d212e1dfa9796c69d17177921f196163722e8b0f96d953fcdaedc958d6af794e5aaa09dfc0ad34b560dd662f9b37702ce4e95214b91e1384feae63b4d1247cfade248b86f689090123a2ebfb40ad9a77a7b7c1f3233f22337310dc99561de776e6e30549dd856fc984627789b1d466d0351a793f87c4e694e2d5a28ad8243f5f0f9605acc83acf7b2dac975f61545bc307a1d66e3937f735c84d43edd9bfeaffb29deb345901ae9269e1d9f0d195ffcca9be67e3ca00da829de84f46dd5980f57a6b4455028283abd392adc27521a95995f0bc54acd7e6f7ce47033a457987ccb19eafa34735f533f54f8158de801f0656b932257405c321f3da2e1cc4a865e212a86b93b98469a7496903388029973f66a867ca9212e58d89222e72bd5eb1c1f809269abc0667824a8f91c5ec86c871402ecbd89997d49708bf62e09214d208ec415f4cd12455616313bba5763019586dbcecc3fd0d06cafcf289db05537d1359d1841e9b76d9a13da5ff3bdfbe003159e339113edaf2b5c07c01b679a2e97deb4a23847d666aee34b6cb1d6b7923a89f324f44d18a2ed41dac4927518bcda4fb0bbc12e98b6f84e2b6adbecc09ea3aa81a8dd347b321b24f13ee923f66802513b6bc4e825e7e21c226259453e8ca53ff1c734113be61bcef33508b95dba77acfabb29bba481d214da5b132958e5a712ea89e12c8347560789b2d77f743ba22897b2d8f03d0a32fff85df0e2362f13e915f7cccd79dc34965bbc3dbc6472e98dba59bace1a0c69a52770dbb701f5508d1a18de3c452d1e45105b25ba54e8b5a20ab6b59f600edfce0d9db9efe1bcc6c6a0f5fdc010c27ada519774bf6d236f3030d4b2a93a99fc4252eb73d3fd0edd5b4f9412a30224b11ec5791314d6ad7dffd3b89a36ce3428c89f63f1ab7e72fd16d1ff062b42da2cd91508ea01b80e49d79c6c538c4467cb2a9c0b1bbf8b718ebdcb3ebfa1f96c52d3e84de1cd3bcc398033f7c7f3c5ba4d2ef0edd9564d92f819e857274d4e638ad3e74ee1c28671b7c13f61dcb579b6169d431114b9ec5da3f2cd5425766a453ea3ba15d026c2852a6469b27c1987e28e3e3f7db2318f5af810253ca065749dd50908aa9842168efa2f58f38e6617c61edb8a3b9d045e125d3a9618826395f0b7ce79131f5eab168eebb42cfae553eb2c3acc53bb7a820c3b3ac8efb2b6f5c84bbab65a4fc2a9a450602763a8de61d82224aecbf6dd23d0fbd665c918a6bbacfb9467870eb537c1a75557a2809869156661d7ad357368e703d712af9c7d10252f2634a046807df3fb93ecf0695d942b62b9f10160867ad8bd0479a726811bba4d36c3afde6ca4c5b5e38f564e7309a17cf4a1cd5e5c812b8f2742bc9efc05f3be8dbfbbbebfd4bc3b0be8da1423f1ff1ed9911b193da469e30615f3ec34f558eaf3cecdcec13462f6d39e87a4b574ceaf3269f278730b19206b9856f8721472392f98ecf6bced3e4e055a62e671b99597c5d05b6345dfc3ae1c76ecaafd89c8140bc6201ef626d8ac67c375c29fe9dc3d5b6f5cc2fa48eff5e155bdeb1f7de2e14d00712eb808b976c382c721862b2c0bbbee007ddb6d265d84ded2a11e184909beede80e4abb6816df3e60e96fa80b68aff44c7d3077ef4ecbb832b6438184f526368ca6f4666df283a04904a28804bcfd294aa8418dd330808be510d6e11b0c4d8366defe325174794f895867f29c706e3701e755d8596b6901f4991f5f97b5fa7b7c9faf469b0288f428cf060e5deacac37923b58009674fc0663765247f5af7c6d8cf51cbd30677372f50c605ce93d978bb42aaac6b8cf97043d4f2585b620a0d82582ae882e70fbfa5c2f1ff77d362fbce2e7a84084331ba94570c21b435fcf8802083c62f0d1835920fcd23e1132ff7bacd6d3167f2bd4660a8fcaa103b942edc11a38c62e05a40fe1ea39a93b906128809cddb100366bbafaf0a19fadc9c589e12d463a3c89c89f2d7ba8c152fb0f43fc8e0a98cdcf4c189547d97f780da1dcc0a5c737b2da8b875225c20f0dbf546e7f4f0c462e72f02f77f9f4b918f182670e384e37177447490e7cf7eab279cb0897443541a8adf230018b65e4f711c1a918494dc0e0e39654a0e5ccfce7a6fd92b3021803d2fcbcfad070bf7b98eaea238d5d485d85a4e34ab7f4b3be23b346ad810d470523dbcac0534e63f584e98666cbe8b0759c44d89bb23e4e96ed4b40a95fca34de11c7a6210878e5eb31aa10d3527038919b2fc0b83e06f02faacb7626cdcd53f7233cd9ad6e94d7b535890409bf882349f8d25630a9f33ad0e2b051a6498b36d8eec7dfc604069bebe722ea6a719512f73be8e395849791333b965d985188500bcae512fb5762b507ece43e86072b8a31dab003476c4895bf0bea047d845931f85e212dcdd71db591bd697adcfecfeb825be42fc6bfaabaecea27e0d640524f370ee88aae11bc1001bf0f19efa6d6d95145e1e3a3fd1273454cdc7d3324181a4053b7b42c85a256e08861a62ebde4b6372f25a96fb3344140aa8434048e2f359cc31b34b9a184ecb69ffdba2aa28e149c5e4bfb7a6074b777899bafdb0cec03a4e38f76e5f3c853ec7c3fa063d317770979b1546483584842709f3b272ef307012b9115320ae12efa93a3f35aee355006f7f24eaeaa437649e61b706942b8d23a01ac7a1e5563d0797cc74d80525c220d6f8b34c923eac3e6507cea1206c1d7a81c5e200b41c4eae19e15f9648de08f8536e8c134bea2b3b0565002c1d992a9e3c202a1a97e88c0bb8e1ca1881f86db16e4975e81a90fb8305e1154f949afab75995669495a24047fb347b06b75a3a73aff137730919653dede5d4b18c57d5ec618b6019b632b2896b423a07f3ecb6659fcf9a5b1f6bb19246d806fb0db7 +MD = a3481b7a56b6ac361213e5a69c0e99594c332567a0cd5181992dac5ac6ff236766768e75968685cd44ae68ba7a03c1d1471bdae070deb899cbfc1690d4a69b47 + +Len = 40624 +Msg = 4bff0a260be42b8bc0585e920f78107e83b7c26130e8c4d7979940f4caa37b7bd1ff58514bdb1e3158ed7aa0b708c8242ced8eb1256349649c8a6d743f6ca765cfd5657ec665987e3ce3b88b0bd4096b324c1ef677059bcb51ae3f43048521a30e283996c2a823da33e0203953055ebb5c7e791a6ff541767baebe4a6117719f56a1dd7f88cf46ad048cb993d7c24c7c7328a703555cc3cbe531f2719e4a20bf6ee8582360008a5f78918b81de345d1640f5b19b7161aa3456e0e4a10245b56d20a4b2689163755857949eecb28218f1888a9ec80a2d7d1895639bc0d631b810327df438652291006940fbba99d50575169276746ae7c4df6b611fb76235b10f6d1d257a226266c0753aa9d5dc55ad0bb1b34186d7b808f0a082796fee7a29d499294d16114e7afe452db023c3299719209508e69ac8cfb5fc6fb0cfc228a8c67e4c74f37a0b58239fbf198e957a4b092ce1d37cfb3ea49547d0ccbe2666b44de32ca3fba5c485984c98ebfd9c6f52419d3fa83041420cf8484cd626615cd7d19271e215d99f8ac414612e571e31332b3b5691eab6fe9146c88cd5eebc3398ba51c4372960c4f00ebec2ea8664e7762dcdcf9592a097bae88f38d1fe7f137f71e9cdac20805c3fe014622871b6baa4b11d51bc1048380f4465f7d23ef223155c223348e0828ffda1dceaf0005bd2441ef1850f4cf60719c31271e1965c8ce1e4c39e1352ae84b4b8df01481b9d56dedc1213952ef22c5fcd5d4f05ee07756c7196b8165e4b64eb8fe5503aaac26ffb5348a2579f83d06acb0f39472e39073c6c612658eda3562b8db67fcd95134422eb5ada5b85f21bc023f0d6ad3e3b6adb3bed93e1e5fc83fb1a193509c4d8fedb0c1265abca8834eb3fc8cf420655c5d14802a5ba309f13e39ed71af72059c4ae1e36e84f548a4473855fcb0b6ece40a4fa6704eab4d42d6b81b8d79e8fddbf24898f0e4d0d4372de5f7d73125ff005deb8e659795be2f91c2c841407faae16c4b5e57cafdbfae7b634e96f5ebf013906ec454c700b13a07d050378384a12f2160a00dd7da8f6ca826c6c66f7784a07a5fd4d84d6aead4a1775fdac3b65527ba3f1a7d7bd5b8044cb6fce01e67013954253c6aab32bf91e70e539581835b6d8f2d0a41279dce07d18a4d7e73291a40b65567865106a3f4512bb8023d5a185328c10bd37b8135e9cf1754ec0e3c14492976e2b5ef453c7e785619ab57c9009b0f71abbee83e842cade49fd3602ea3c525e03a63d67ced82a4f3d4fb714ec887bbd5565dee143d32e6889aaef95f3d572457db2a971c3bb39fab967d1a69c4bba652885b0da0c5af1169b1e93a7c4541ad144174a1b1ab93a0e3ba9aa39889a9678fde10c762b1f3a71e821cb3d4504748cc09dc96cbb1856112ddeebd598bd377d3b4398be886a3200d87b3f615e2ca5fd590bce6d8e20b48df6ce3b82b4fbc4fc4971ffb90b83004bd4f3961af713d8ac782b00247c1b7d09fe414349c49d667e9133e76f9db1ceda42527871f802332283c3089b6b4fd80eadffab31b0eb448a7a53f9e9243ec1368b608f6c4941dee6e49c8dda4405ee236bcf1a43602d87a86c97dc2e897003e618e58016d2180280017e38e7f085e6d0a07b3886bcab5660cfc93846b590bc7250a9f6747ccfc7794431b1cc5617e99db4c9ae02adadda3b0cafb73a8fe513639a7397902dad5458147c9f915d031f130f8224bf197a3ac08912ff11feb9313f600d0b71cefbd2a5d828ab3cef90afb9196e41c6ea5b9f78afb9b8d3ec523e91093dfb1f480268e9fafd7cd7f308c2173b54ae1e069831e9e66e8b8940f961defdcc0fa381073faae1c3bb6950b17fb6dbfd13cf5779179d97f71f3ae2f6c2b0a382ee0463557e73f5420ffbf0d40f1d633216e2c3457a1c281d1eeeb9918a8e6526414ad5334ec99e422194bab899d439b9625e344681ec03a82dadaf12e101aa82af7dbee8d736448a983c96a74664c75a9d4b91c255978e60f680abc0ee90db5ce1a608bd40414fe31dfb6ce73e5473df70b1c2021da5330d216e96e5dac35e7d7ecd9afab273271558da24c1a82ca70e8299ae4e029c5976568056c7cc229cad2ff85ce7545234e8f0e0a77dac75cab17c0a3fee2c0667643cbdd4aeed36fdb39c3136cb4f68df248e16db6374b6448e050d5c29c26ac79f7b2df8e46586ea596c7f10f0ca3d8e90d982a9bb25777c6ec6a9ed48ed51e0efbcd8abb05b9ac96548ebd29cee57aaf57a2ef9ccea41dc1866e6db93d4421a1ca7c7d359f7fb03a0d77b6418e3409c1b1822b4dfe99acb568ecc0c52a0c5ddede3015928633001d2c239aeacd080cbca5c65c03c4a0db1eee66469cd7862912b198e2665c4c12ac3b02d999fdd9d9ecaedfe072b361ff7a915b5da4c85a29e9ef07721584537e53a4a5e0b3b34217fe275f870f4d55a034fc4c74816ee0c6d0e11c331480b199c0138d4edc6fa94d5dc9958e2de4e453ea89aa39974dc296443237a407f41efb6de219728895a7c077e03284732ca68107b4050b7ae777fec04cfa535430d429b9aadb0a2cc7a637f915b708639704ce2925dd6880ce6986e1bbd4af7dd9798b2fd852645d782d0a4dc4836873869781ab39a3ef6d552fc504e94747095087c65ce5101f8f19b4cde297384327adc7422a79f8fe853e231fc66fc2887b288731bd7b849a263ed5e953e84616f46f2c9603613d145ccbfc1d82b9f70247e3e073dde63072d769f8e31e422d626e3d2fe3e279f0df78910344e6422532f3f53bf31acfa43806fd9641ae3f5e93f9aa69b2244ea4ae5d2fe10c4db30da913eef23600924038399c569b903a6a4a2b3932976539d90f7efb1dfa4566f0b30c338bc32bc89511e3b8824740cdd0f3776c32fa11d5fe715275028559e87f0f5155911108fd234399c4d1db4c54131e72a5e350b6ad95827c304743f7b2191c87e78ab6048a7b5bc053adde2f77b1298198bc31c02b2ea150bf44acab4e5f49244be108bb0afda8fbe77eb646a33ba338973623cac93a6c74749325e137a2339b052cafa8f93ad9b0f2dcfa4e61032a1c33e99d332249226bf2ab4635e8926a70a5c6114adfb36c64084120833ba81c80f13f1495a0cb918bbc059415eb903c29a065b40d18d7cf998a33bfa18daaf92b41af106edf420868232a860dbb3c474a77642e8c5f4871d60b3d2e15f18c5e6fc7d2172b283d1595da92a299d1e71a47bd49d734fd65f18e1db6025ce1bcaab2d6109f67362d377944d65026ba3103a5c49f54938dc0dd460446c2d2e8cc6cb90f032f8f6382eca6f45e3540eeaab1d93fdd1d247ad983728157e634612c12d6d5223e204aeea3935ba2c884f9a49376817b97546f2082b80771e2ee056c4b90caf641a656c10ab30d3c604f45bf36f22bf359dfb526597af92d5f6c2ffd657b42e7e0ae119a80aa6b93b32c5d7b0ad0b1fceaf3076b862fe8d2a24b5b600efaff7f818405db83de09313798cb388d9695c0b14ab050976b591a61e8123496943335aae49e24a2c268ad4400f9a83dc85a1753435a85eba1cc5cf4deeedb9adb90a2d33c54d65bfc0c608f11732aa9ca71492779507c1167a523019c4bd58a459a3f70f7d4912def56e36f36c23040217dded4695c93972195f4eebca3a2f346a2743a9367c58710eabe7aed61699f61c250b07fb96ceb63f15b329c90d454636bd966bbb8e3f6053a4a28a1db37261ff147624901889cb359ce63d8adda2c3038e7abcd328cf930c82efef08a1962909d1b5031cf47197431b6f8dd2534f911ac2760445f211f2816c564561890d387f85500e67d58f03b0bad7836c17539ac38013acda930c66fa8b60f4ee12e074ac57cfab3861e9f7c6a3a4851fd0b6c445f0d71a5ab4c8d5be06946478e516c7d770bb4458408a5ccbfb61fdb22681f9ea3b4cb78dfc4e2916067bfdc6a9b71847f79c40901b771808ed9352eec3bb20f889faeb3a14a5484ab39b28a207cc4e4515f807a69ab915c59ec4ec9b4c6c21b801681f2ba3d51ca2347f4bd2a75c5319f25901626459394a397b33816c9ce472cc1eb92652e78b65b2acd01f306f0e0bb546968e225f6edee4418f67c954506e11a423f4c9e27fdd54ac1d514b0d676387482ef07bd19bcac79d68160b9b4ff3f983c35dafcedf5043059c309f3f46688fe6315218b9a8570c172657db7ac94aac420328acb49307a642b383d50c9363f6a8077aa01e7ccad83731f0e1f8a4bc51694a1f6a9b824aa6e8cc14947d369ce3161830bc09016e5686f1a9c41dc98f1180ff088e8b96616b814ea98599185b7fb9cc3e14811e8aab8bcf4c2cf1200b13108cacc38cb6931c95a10b4f681fe8f1188c6b4f8ebb6502ce319fc37d917a80a058d3afa7ca29e2aa2d029bf2348a62bbbe7e1638c14881d8806c2ec805227fb9cb44fae3bb6be44a59561140408bfa2bcc401088167b5030257918da624d39e24dc94d496fa14bfc8fce58592931e0ef1c79e685a346985e868e27bc9241d5a3462850dfcf133e4937331945d9c53d8f18f03f3850f181eb0d7503757b467c841e2aaaafc309e6b7b74dfb0d368e3894266fc4a706c3325e21f5550d07a6560e3d9703c134ca6ad078e4a7b82ad6fa85b0bc1ddcab05d43f29d5c58d1da78ac80c37051b089ff31ce2c0c44e9ce3abea1da0f1df28008e178fdefafca493413bf1d256c729d0a9225ea8fbd873ff714cd5e3e8b666f9896dbad89d6286b0a2ed552f9ecd7da5b36a5266f45c99707731404dab6b4c3becc9128b55c8aa47d668a1178633ee653a7c27c056e5f57ee324c6a6e206c10de0b3ffbecb35f89f04343b52b503635a65e1467fca786f73deaacfb5358dafb68db4e93ba7b1580255d78da8d545c3ca5d20156bf71fef958f4dc3434a0afd7f1a5338c89044b2b6f1dbfde18bfff8fe49c1fe4b86e15d2e1f940a18cc8493b0b019542e2ef7ee04ffc8f5c4813be93e524c68e81ec7a184b5070cfc61045991768da6342ad1f434a724dc1a5f007ed2a04abb0b68d7a4df7a2f31b7b1913769953794a42cdaac8e13791aabcc579f015a435e7a0b1b4c899693e21065331582349f8745db1bff5a684e173f71463414a9bdbbfeb09b82c930bc85d125f2db227c4ee8dee09bd3dfd12c3a9ef6d82553b442395eff5e2fe6703084c098d7719295cb1d38e2631266749aed8f02125a06a45940649f6c39297f7945a667e9bf1aa69e901b8a79a237792098dc3dfebc75a08b38d639cd8ada851f324a3a31ad01d750a74e80e76d9a0946a14b51a331e8d15e897d748a0841a9a8b176b7b524915268cc9b6bb559d74c9571a5e309a2a65e5c9c21f9a99da5149e2cf0897f0a103c6e66c8f4e95035699470b19e39f8f8700dd78a6f353050ee880a81569749c7c0eadd9ec28d39fd88cc0639273a19262ff8a37f7f33a8885eefb3f1c703c7fe036598e57ea8fb78d3c39c032914ef78c2a569c9d1adef968c5a8f0883cd6efd30670165cf4380eb700398d94ad06135529c8f300caaecc2a151068e33fd240b6d767fe55e65afa187146481327556a706667f7cd9338753c55c804a7e99d371e21c7a2fd21670e1417c66c38a0bb814078a9f75df4fa8931f0465050dab6278b9e05a09d45eabf2c5c50869fa9b6ec57c9059e3c70637c8d8d01d87873ab965174a883c0c46481d3c76b139292b60028e01148d38601c3b17491098954fc08326e36a9021d530aace18c8fdc0c676136563373cdb663f3405f5a600dff15f190e3269ccbc1449e1a232b77b6671983f28412cb8581f89faca5e48860c287e6ef7c0eeba84097c09e14ce57cc436aecf00205ac95694e0d78d0c5cf4c4fc05cb08135f2022beb26cb2efbac7821ca00b148a29377dcb2e1176864c10b176dc7869b525c73d3bd1503ea19e26472b563b8d0601c976ce59f1af547ea3799debbd432ea9777e86c2feadedf95fbb6cb8a7921d4a48e9a54abf5dfe5c74c47a1be2be0452f78ca96ebe2658333b87e6af974c556c7d7d56eac3ab0c4c4d3b13522e01c1871111acbcd8d16cb48253a22152e239cf2ddbeb2045bf07b8f4857279ea35ecb28bb2959393d7b0e5fcc6a6f8217d4edc23ab6bd38cc17707324b9f795f810e3a2e196edd3860ac2c7089fc1a4c451ef92694dfede1dae2a1cf35a038d20eae87c2ee3f810f93e9f2a844ac711b61308ffd3e4e558c31d2ee93ea7fa08e0354010fd80e676099eea06a9ebce3d5fa0c077152c0f3d5f0ce5646134498da898910dc80e577739a439c7f3f365ac4373bc74a783eaf033c5f41af57f507fdc8d31cf38ecb998fbd7150afd021bd2e4144395057ce7160400b17975f9cd740e7bd8d1aa9c9b5fe2aff22c1f986f45c3fafc44a987b2132215d40c6d340efeb0fcccb1a79e5b3060a757c7f616ce6965a05cf02e24aa7c20ada24045aea3746678a3ebba7297bf0855cc5afb1db7d24baccc43ede45eb58210c2b199ca19798187e4ec4db9df504c23b651a90dca04d868f0ac73473d63c8e7abecc426df72b493064ffbc480a89ea9ac488a775375ae7d309658bdc4eb57aac43e6f4563f452329e632f332a0c924014ac19eb02b93042229df8b893c0c0d2b24305965572fcef03e262863a00a99f95f8c1c9562400603d2ffdd81898a6e7ec76f1aa12731710dd2a302e4f39570096bb2c92bc5a914ff6c8b29cc1b74c62d966ede13989234090c7129bc7fb2d2bad6fc4e7a3c16579d5f4c1673dc153cc1f7f44ec1909c406b535746f32ea8e793082f538ab0cef665130a4d7db3b4f9c154c812b5f895bdbb0e1e0192e7c1d61c69167f64071a1adff18d76f2879824b514b3d1f7b9c6d382a78e019f9143c8dd62787b0f2b42eb945f9c38db420ae6259f7d338db977a846856fef251677e45f591cee93028e900bc6013b3fcb52679a5deee281e2f06792108972295da55329b7cb81f9764532cc8f8228260ab8ce9cb6cd83db1b7836ebb0a433b54e153cc3e54ddc486eb1f86020e8a798e78444b112e4c1a14b583ddbcd87d9d0d10ec8b6496aa688d1180b4ee3fa5f9e4afdf063d9f941dd5cd9a6e9cffb0d83ceda1f894dea88c189c3921e3e82f93f1b6cfb3973d5ae963541969e1ec877d52dbf68c4589429fc7dfab6599b461c8442198c +MD = 08b3276cdb68adb64cfdfb6d54002354108ff18c3f901c1fedc48b5a44c81bbce19e2a231a319191fb5b9652bc43c20d80ef6d438f7227e72ed57c7fbd9c79d1 + +Len = 41416 +Msg = 0a268b623e349fa821ad14e9bdfdf61217aaff016c8a024fba348a6d82b4bef3cc8387346db6f5168575df214bafcad50d0c0c41722332d103ee9e68e97a75aef8e3b8aced80b096f45b90e76ee456b3f0e6f2398fb9aab95bbabd8529f84659963064ef48fc98cf77476e65ac046055c91ff7134ab433aeca802decc995fb9cac51d4280590746a1521c2c09077b1639fa164f42b7d9558592837c651b85a1e442e507dada60e0ed7d1d4239fa511847b538106bb7a98600f9a233b4acb2d8865af1f16c7a52c64c33fecb463f74760641d95718114036ef5be39723b353a8118bc8b1cdbf59713e454529b63d31da062e7ea5d06b3a029117cc194ac5e4ab2643ddab772fe17c43ff64d0127a259ec7d99c6f1d0c0353a6dbd02c825ae24c3511a550e1327741fde0e270e38cdc4ebbe1c725569a18b48116745372f8d925be73b444a46da75cbc88526e91dba26462c5636b259c06afc0364d20851635a222f88ef92937fe371054193bb5ed347a5d030593026849afe4d9af164149845c230ea9d0f837c86b89e2cb6ab847feeaeb09225f65a54e2f5f7f3ea73ff941be0f24798e99d3a26499a2dd6e21625e50cd665e02d7c9a0b8a0756045c9abfa4277e89264769218bcb012b3c879c2ff2654a8fd3fc15bdde6487aa88486d82a73cdb969051709a7ce7db1031c39e04de6212fa468cac25202c7ed9be5e0143eeca11581e31390bc34531c3fbbea50c70aa388c8004c93a9c89f5caeec7dd6b3f7729b5170c4ddd268c0a2ce29f38af72e6c42fcb8df5631924f36560aa896363eb2a97c50d32796e656f33308fe055aabdbcca6d4fb60b5ea480925c308e9222cf1ce56e597245637767c02bb52466e2d82a45af71979734b2a4392981735f43cb08875b1b95abcc6bfabb1d3a8c4ae0de1588d91c1d7063f6684210c4c0349086f564d479211272e8300c4c45a0696d78867a3377d2feb317d3955922fe78cfa9eb66209ba0e21e97129b01ffe92c504e840505ab3da9ecbeee1b4cc2b492c9dbf27489aa9982961fa750838feef95307171096dfe6dad592c0ba30cd6aec46c5137655ce955ca22af8141c1e37393c4b47842f3c56f7373c515b4f6aa8ed0e0f5555cd2e1bd70c5d0bcd12d44d55d4c41d4718ea146ada63a9e7efc2f7fde860c1f739f3b35b9b62ea65aed8b7b3e318a0429910a89986b0d14459fcde849d605d45e144e55016e19dc23853fdbd31efd95dfad69bee03cad05cd541e6eaf6b833270c4a3a1f46812acef86ca8da85f2ce81826574cf185bae15aab99598b8104b86042d392ef3eb9b6f354c3f71a8c889947ae5bba68f087359228b76f4ae0fab480f146be6e4c7f88f391a4aec631a127f2a7ef9da2e7b280f83e00e679f5e5d57762756afe3bc47154aff52b27c906f2bda56b4d3be5cd51f16dfe75a52a56999819084f2b67292e9b123de2bbbd1aa7fd29877f90652807023b18833908bd5f877747d152692e0f3b6ad76bfea86cb62596ac7b4d00633ecf27d795c21b8ab5ba2fec782fbc43a1ba0c6a2d6cf56d8beb9f42e6ce220f57aca6c433bcdd5f3a94853ec9ffdafa749b995ebd834eadb7a385f33890547cf02f5a66d3a5c8ab3ccb29e74d6f4fc2f654743d82ddfe9db7e1fd35f730123c76db9527fbf957ef5ab2805e58ea752da5793f7f23d98fce1b2b67738929e5de8a15f980134415ac02ef1b0c92edf5ab107e5dabf7129cbf4fe4474484fa49d37872ea17c0028c51d3d57c8a72064bcbb5d8514c92f59fd1c4a13f21710da8abe077095788b126812c0a07508cbfe1f0042bacc98e0ef3b617e69182b3e09cd840a6b9c7b3dc7eaaa9f15de7397752b899ccd2ab2edb42ccc828f0e0e42f90e917669dc0f7e0ef5eac2fe2c70ec90895d550657a1bc7079643ecdfd488272f4ee35b080bbb6b12edc12a386873218e18453ad7bedb7eac9329a6a0d5f683c27a22d88ae084d763f87754b1541d1d6da07800abd1c45ecc53c7fb065dd5b1e50b5483b8e7cab26d0f3d4400125318f1dedc26546b8cd3c158cd3e52e4ac2e217306c104aa13889882918c871bcbb0e523e03053e49b9a3602a80528f2c074e231a834e07ff5d661030272c8d8cd51a20032a33cc5570e94e1c6c3fb10d912b1d7b743ef01c80860f10ebb47f1fe87a2f431f3718665ad6886c81f3bb74c840ac5b27282a820bb22ed24ba76cfd5df72806ca594b03df32b622a5b8d6ea145779c38454e0b964b0157d2e4f7fac9a59b35413e18db567c48044c2d42af6dd362bba73093847f5486b197ef2ddb609687736e21605025a558cdcbf90de208ba66b49dc905ab62444d9af22d9b1a311eb1db31f41dc7520ad85f184341bf0866fe177a7316f8e5b6b0645024c21f919ac4cd4b2aa39932194118cf90808ef3759344cbc349f5501849be6069255428b71ada0839945e6c6d2d8b40654cea4042c0dd003e111957d583f9716f57605ce03e81f7a5628f5752e8371935f949756af130c6580eed539af9b621abbaccb4a2aa459802809489772bacb8872835196abef07c8585d9e9c50564efa2d1e1b67ad89577b591068956424cbcdd5c3592ae948c916b287770e0519639e93f57d8d564020552f67dcd5cd6a784ad07b377c2ec75b35d694e8f7948caaee35587924eb71bcf4f3332cc17434dbe8abd374f24514c40f0cab79c0c6562ad35a70989435c43442ec9fe1c02329fa8dadf497f6f5d60c8a9cf4b3cf6320ec334c656145fcdf8f2564d08239a0f1df221f0628ef05b53c90cd981d8d3391f6f8515e5da0086dd587a1f19796b43592904930b0453e5b5b08e9bf4062fd525208b283120b20140e4fec28a83e279d19bd739bb65f686d71d93690a2b78b0a084db7fd0aef0e7c43658d9d3e99c1d07e93e56fc2a74b9687edfd34cdf2a3621eada7f4cdb5984e7cb1cc7ae00f4a77c9f9e6d35c84ae7ca32b85d3497d0e029e12cc8fe1c38732bf1af1e41708893900d6c0ef0d5e5ac7d07b18939cbe94918f636cf7d083a2cf168b43056aec47bf2d14b9ec5c9e182013c5fc9f501ffcb8fa88d054225bb3ce88e90b0561234cb0579a1af2d2aaae2f76f17a1ded06101ee66840cd5db580d61d1d920c841560b587502b28f5ebe49b00e8da36f9dd966c5bed038a0bf8d390de0f1d415c2b4b76c41e33b750c9840cb9906411fe0b574962fe63b4b38c72a4d2a7f7cc70cbd49a16ec7cc768ad542caad260d783f81b5e0183a673ded925b902ce67d6485ec5ca85a24c7fc7fd1ea0da9715af110caa52426515ee1347b677746ab4876d4de4ad1a28ec07f423a81351c5ccc22fafcbce2d8af84eda3eeb883264270666fffaecdc66a4887785bb2b1845cd376549487ac9db97babb268e9144a5087cbbdbce2ed445bb2ad98d1e90360060373b42e7fd1e40395b3f67653db0149f10f54b2a1c08ab7b14a1a19bebb3ddcdea3a02710034a22859ed693931809833eb9bb5d45d82812a6f572bf8e498c35b77e9f1ad2a14e7aadb4e94d118bc1b0d343583959a4ab011628392fe22ec9c5307d0786524c5f90809e851f7986a8476144c1c357b661f7816ae3e754eb74ffdc178fd5f954fbe8a0c4606715994bbb4b367e87ca7e0b5a6b25f97250f02c4a1ce68ea6426bb20770ced1d080441a70f380e4f32c7c05ce55f1f05d50ed4e3875528a53c7f1006193067fc84417a32d1cbc9b91e820cfb7b4575f04ff33594f77f4198af475657b6a13a0dadb746434096218e0981ce79b18be9c059652dbf38743a29852695fd9787f1b64b0fadc3a6be9d36bb6c0dc0cf5a03ddbc0cc54c935b9bc285c6d6df0409116125f1b798496ec61afcead2b71dd94caf40910423505cedca79cc20e5444f247504036dab72cc22a094a32446e3314b9fac9cf32cb7a1b7a927e37cf7a182b25ab0f0d6e468003b314a400b5568898813cad498500f4f81c657b1f1fd61ca4177f15efa2b75339936e7698fccf50a8c7460e2fd75a291d48bd3de87dfcd4e5b368ff6e269df8dc21534c5b993d2dbde2b376d2a84b68d365f621346852d3787fe515f9584ef354038f6fd90934726079e171e2566946b32aacbf837d8c9ac4e3800411b66ed549b05f8b81cb29c108d37c79df80184544dd5d73461bee8d6364a64467df5211159e6019f66d918c3fa5d1191ab3fcd7011464e70cd20d4ddc99d4514c21bd2950442d85a75f10467d577bba34407b9e60566f85381e7d3e88f996b53f2bf4a072380469052e0a823a7ef8e7acd408edfb19d9c8687f92e1f0fa69eac16c9cf903f0a13e903904c20f72c52bf4dd495829e5404b0e7402dabd12da5c63520aa58df47070f92e738864d96cf19cdaa16f853f1f67aa7a317b45d94494b57ae23868b9fe9a706cfb37c3195cc3154aa596858de3b8bd10936613c4552e0845a8143cc7a835c682f072a2c9113aeeabca5fb36819b8d6c5cd0dbf5a6882fc50c0eb628409bd3bfee7ab9c5f26a3997c844d87444dd2581832e4a1021b2e021ac10082959fab713f6555185209a7a64b67c299a8ecbfd176698d5151d9a9ba123d060572e68ae6d2ee019f3846b18586e961331c62bbd36ed55a48d0206074c5796e73925ad60d47e623a9784a4bc7cd9d9c0c056c60de600afe00037bfcc2a31aac457a7907750ce25dcf9890f0dd6dd8f58cfa564933087ecb1f4268d9343995320391dda98e9066f25a2fc72b47163fe02e61bcdfa1b6a553ef3363704a078da2368ed536da80f894019439658525470e78e20c8e8b09132b084cf87c648b487f46b81c39e94cfbb53e6c843a283962b2f4e1c1e06f6e4cb2e305943824337a2bcca3ff2d3b52f4c8792f140390b137801af7797fbf54c67e17d3c34df9ae773a20e91a8b314178603a42857c7f2b19e853899fb6fb5af50f1f5e1228654ae42cfbedeace6b870aff0a4d44ef1405ae7e571eb120c3ff7cc8520aed51e7973566b628dc715aa2010751a5cee61fef59946e2d3a4779a0a24c5850c1450121ef89d8208c1e8f011f1bb8f2affbf346afdd314ba785bced2a0daac64a8c42596708da7b6620694299ae98ba549b2e8a15bb18e09575ee43587ec1d1c5a21bdc5066458ff71189d525228943593e32481fb0bd8260928e31d2322619ef00fdf92024a1e4bb8c5147362a03442a7faeff424077b7b5662d371baa5ff50323895e5ab668002fdb600741278f2344b9e52e21fcdfe6e06b4bc19959d7f9cea41e6a64ae1068c0992693caad95674487753313586e969e0c5a7fcfc316ae9ded5dbbd27e23852a40258b572eae968662efdcaab5ac5d3ad3e9b043689469ed79a7a138a929fba95aed3c6b2d432796c6b5595cc70181435c6a1188dce9e259d38cd8ebb19c22da63de557b1beba0f24d5657adff16d944006c0204728f7e5f858dc17019e29149d589351b8d10793541534622b0449ba96a60005adbedb46b0a2ad97a6495dd543a6e79a0f34a36bc5d3ca33f9d236f0fe4d69ad07b9d1b08cbd4bf4f043e5da60d0e81bfe1016013fb630d79183bb9e42a304019d40628b5652bb1828b44989bc7d9ebccd8de6bc8a666d343b3e612a2852d8e9b67c143fd40806e995c4124c1e561266c3d29d036d8c89343f2baefd79ffed4e9c957234cf8835518199c78a50024bff2908c240b1d08dbee4732c7ffc544c1695b201d30e795037325ef0aa182a51704756deda1ed980b9743e63187bf9fc2beafb4b825b845d82f13916163f762da265e578397c506a0f35b3da31bc960573e399d7aa7c51661c0652c0358d8de67ccbdd18c593dc53a770fb193089d270d8c7b42db43a8772ecb9d2766fc91884e5c16547e62b2644696c3da87fa8554441e073d6065dce8ada52e1c02cbdbe10c78ea58b040bd5443d73a21084e1c8899574ff590aadd0b5ce18a627d42f2891097bc66f87fc925c0bcb52d8a9fed348becc803e27f232fbb0544a32cfe8fe0f93d0f078d7c60593bbbd748855c51d88a3301d0ec4f39f64684ff46a86b0e7934dd54a305c31d5f1359131a8ef004f512ce7fe504b79bdf9df4ecd555f4e8b231fd1fd1e7e05ab7e618fb0c1e17510ab413b4c8c234c34c1fb9cfd7dc38c93caf10e30caa6092e4328ff1a5a92ed099fca722f4ab434adc4a580ab6a1b30a78dabd20cbd3a060747702896fc6a2fe234afd5ce1366f9d00bc64100a2cd036e763566b97ea4c4dd9223534d2ed1054273d8ac526ea162449d442823af43cd918c77125e954a0b592d27c866782f35d1622e3fe2e4cd38b283097d3c19e356b7d7591d248b96a3231f66cf0a62ec88380c97d5a7fc5243c1c3fb88756617658960c4d132e7ee53e270c6b0617570c61f76fcb8c93e984b1a670490f42046c4af2e9e74b131bce43e2931b2923824b72daa462e6f32081864760bdfe1ced739d049d14fc8f2671fe1518e1ec6346e220baf5b80c161087148f9f7bb65f9348d94ba43aaa0b057c970f0c53c24efb7d1618d25f6e85201206ef7b26da828c488a588decd60f6f4ad960fbd54d5f3688ad64c8bd70c8d5ceb7d78233cd1e3eff1a8bb88ff3149a692f9b460ae00c8e71612f5746d549b7f9b1e85327208b31d92485c2b893b33d53f41ea9592cef49e3dbe90cafee903d4f8f824c756771eb6312b72aeb3a53be97d17b644476701f3c6822374d3f34dc1c9b460ca2f43ae2297f905f9c598ea4a1423225516f277507b05b85a349902b0d8f93e234697ebca8c5b1ef4073bc660cc0c35b14797dc1c22f056646803a908eb70c8bbe3995c14d7f8c387c1b759946d7af73e2280babf84ea067ab95aca31cbc005784d718969427aff9a3a332b4cbe1771e5eed298a1699ccf846dc6ed934092fd43ce48fa329386d715bbd8c2f18888aa8ff5b8ff2a99adb96acd6e9b96118eb905ac4638d593c755e08ccda8ec9378aa227d5876c2dbc6cc14217b5ba2085b40a43092cabc0ae280e3f53b65a3a78d7a88cfda85d1f88f116ab114b61feba29a0aa255384dc08260073e4a7f808c6f21a73367b4bfb9af8f55c4623375830ad01d4ab60bf27c4dfe32ae2180ea09c7a769f0278cf4e3cf4ebba48d5a0c983ce9c76fdeca1208eb614d8ee9f049e83d15b4504194d84196578697bcb34cf2dfedee5bf4fd142a05914126c95504ef78727299dd54d39aadb19ce617c79e589ce57c54212c62ab4397f4beea3985e721c68a1425554eb5bb64e7d9c71d68931bd858a38de063524c7a509e74233397df1ae4093f1eaf5b69794db7f43d136c03ce6a905fa07fe9c9423c0e8e9c76c95b75 +MD = e0c80702526891b3335d5a0b3180d47025a76469a296e823fa7d7228b9872897799dbc0a1252c7b7e89043eff1bf3092ffe7b67870327324cf95742fdf0e4122 + +Len = 42208 +Msg = 50973fbb1fd9ac1d3df52e52adb8f12423d179595dd593d8b6868c0ef954a0907324b5024c514a3717f0aa99a75965cc24e3008e5feeece26327b56d4d077c205d9da7174c8ed7c1e05a1a42bfe06315812537f60851a8ff14fa871112a5d675358a7cc3c8983c03c3b9e8139c57d2495f1f84580105b178f2886bc1f13795d824749cce68786245e6977bd5e7c59caee95a507ef112ed952458c74791c4a39152e26f00d33530cf717b3b4f4733a88c445d042e8181469dd2f204699c54e7e8e65c5d21b2d78de88dee904b65a8de2d9bb006315959a3da26df8bf0b7f04925086acef8ac6763da6277e28fe82c26d814dcc04f20a2eb9246a6c3a38c9eb18fe2952a4e6aeb99eb179e99e579c768d4d768984f7f64080e5acf134cc368076f9964d9eb936e1764d4eb1d13c0828c6a0ddcf8fb1da8e1968be3e5b10456330d58604397d0f5c58dc3e7d7e164647ae2dec14719a3755e710069a09cf66f1eb1450fd01ac98a8bad09192d190e761b84719ded72b8d467e9e3e9abd341bbaea388fbe93b2534510dd109888165bf5597effb52ce05cce44459eb701e8e42cc2a4aacf4c38dfcfff6414051e3124711657f60def53165bdcb8cf85647850d6190b3a95b7ba8e87dae8145ee05bc1638344a56f9aee5a7dbc6a497c514cd23531bea7a84281f03b37dbaa0c9af0c35b04d78640bc2c99b247dc851254f0f8c8c1418a7d995995289ad14da48aba9ab63f830137cfa8448813721addfbef251f2c364b8c089bfdfe885b67ad5c03d80377d9ae9b41cbfb7da3ed733592a1f796f6ff736a3cb39b1b64cc908d7b56dbc1623df701bf021ee18d8116bfc5a3d0cea61f8a9e924aed0dd4b740db653e368e7332730194053f7214ef7de3018f5134ae29097fa5cc64543cae010d962478c92f599b017d2fcdadfe8b3135e2aef947938e78a3e3b2a17d2103499aaaa402efeb15e787b6fc59d39ed6a92ec59d29a5eab24091d89824e7067993090f2775815af9d10afdf564a16a747e4446d462ae185709dff0d75f30715375ef3049411be367f0119ea56e8605c6f90cc2ef54eea0cf2cc4c90ac0c7e6335aa3ba63e62e1902cd123586e80fe550d1eee64840d618ad3216cdacfa4bd99bc9dd1a11d516703cb0b34f04519d8da471711d69e702e453a21c7b385c0acfff3bd1bbcdae936d88534b37b84bbd63245029c4de97d3a865056c5e3766a33dd039582c11d2f375781d60ac2d26ee0a73067f9910d3e6b943c47cf314ba93a7a13aa6f768d2d52c7e878a08ad83bde7f30ce8f6ab3bbaab9277c4b66ac86a91f4c8648a5d3ea7072e1a3dd9e3d29b8036cc0c6a083fbe03b397ea34a40076814d6b07614976e779e95de29c5aa41567b0dc406fa2406f36399d43da5b0375fa1d8b0628c80c251942bb1ecc6c78aa02f3a63b7413fe4cd797006833fa31b770e7a0f73d436ede49ccca48e6a3b0c7f661c24413d7b9e54c5e59ddbe0c2bd96a2e65410b662f71afda0407779afcfd96adb8f0db6813a728e2120af4fb524a5a64107a3f8ace9d901ce0c10bbcadc98819e2c8174f8c30e1e4c17665523588d62b6b09363bbca0bee7f91bff7353aa2f48d84063e893e0fbb8d0a68bab562341e6ad848bf38a2970dda55edf797f1e10bd21e05dedcb55fae0c821d461249842288062ad4ca7965a608e20381990a3b0d9282e41a982fe53ff207edc0e21564b536c3a1691a585d0130c0675ee38c9a44f8390dbb65b589b5671f40f2cfcebb219c961548cf4667657b7583561c7fe5f629cae689ed4e335a92547ea27f7d73ace407ee37924c6b1c118bbe30eceb046c50bdd94bd502cb749c2d0f999a2a739f339e94ff0b71516c198a7fb6fdd9deee939b4ccbc8d9394cac325b9fc9dba342b4e46f68e1bd019ebbf830aef4505dc31aeba9cf6cdc652aebeccb7cb49aebdc8c60e739bd3863f9215f38e17c5968350e3557206912385581e2c5f7026e33b7e69b653c46eb60c77046ff173bfbe78a9702be8668849817959cb2d95b606319e81b4f3725ddde4ed336ed17d93ec30bdcd846c811386eb64fa3fbea6976634bba6a0ff30116c6d870b66aabff2ae200064257b00b38a37bd87e06f2d1ba1b9585100b38839f01ab6f4ede9955c82db13cc55904ff8c1dae58b53db93e34743e7193adcd537f760ff986b1aa821f8c65a7ebb48d943ac697f6d1070656eb5490a57d5c7c18be0c4e36e74ba62f37e8666f3bd013734c857edb59cba3c1e7a5d14a557f0b7a65adaf4df81455031927fabb3d165e43c941aa2fd5f35628304d4a87a48043237b40796641757fa7cc336ab37aec35adbae46419cee6e833cf364385f1c6ecb808acf5ab4bd4ebc258f2fe8179bb61592655f4c1cb0c2189cb46036bc4b9cee415db6b429d9a62fdc64efd4ac2ecabee157ca25054cdc8d32c67d462a5c1b04da8b42253c030ac001d2eb139dee5d8159041b6eef191a7b8fa80fc921d465c9bcc1f64073afc9172657960735410b3759d8c77c22bc084e13e78c422b3b09877860477859568d9fba7195323acd403b747452ef589c228f50039743bf0672d89e04ba4f658db4b44eaf5d26f6f988f82935423ae94ff5b9d46aa54045bd3e378e1dd33820cbdb0f536f5247f24c6207f8ba19e16d2e0e4811ab3aca67c5d81ec91a06c503875d0b69301937c53c57e553615e755cdcb8d48833cc348db6bd18ff97d9789646d732d0a01658e85fd71ad9c9645920d291c9b8a2de21301679906205cfb54190c6105a2dde3dc40d6c12fc60d02f618635a21356e512f75b7a2fc0f26e1daddba61e4647d558f0fb83582bb6364a878df0f838ee858c3bfc5b417ccc191433bdf3d7356ca03ce770b974f837eb4d0b50703689d813ff768f797ff611753b6b8e3bb5982aa34c20237ad3d274839985542fd7969224df4f7b7125dd50f6f5bde2fa43ef006329337a440f5aea83d26e2f7c75efab4cbe2f46ceed931902c5b3429bfcca7c743689eba171e208506a2e49027be581d01e9e77df31a7c84d4de423ad6a9afd3b069c0e2fc6186c9dd35e174e6418c47372f5954e9c9bed2ad0b91caaf7d1014c1c02482b566e75b0a07630bcc909d18b5dfd258988d0062000ba84214f1d271bd9253040bd44b23d53ff1bda053937ac21fd8f1c80f491c14060f08cbacfed1ee0ad3cec654ba09860514f22c317654a817f58740f7a1e833234f869c579c1e9a4d2e4aae8d3df56483521236d34f8dadf1b082c9ec10aea38aef23519ab23f0a86ebde8a28dbcfb8de368587e1250f1ad2914b2b969f56ad647746b01c4a1c86db93f424cc9d7fca4145b3e70201c137e421482e9e55c899d9705983866b9d5574adf3422289ede2d209051ddeea8b4b4fe7e299ac3becaf1061c3907f1eaac17ac143add1aa0248b909e1f31ee855a03b6c81366757aa3732d2eca0b06a2b1015584c2d8205a4431fcdb02f6a03077ccf368ecb78b3eb78664b3c7ac157088b6cf9758adda4bc1d2cdedb9a69448a2833cf6f21865795bbd5551be859ed297aa82c288b898e331c07c3c8fcc4b2c4ec90bf8e003a499248a677f1b020357625f079cdf92fcbef89d904e11d23569e0f0e8c52303c93c867023a269bc036d8d36d69ca9c7664daacc92a8dc42c3600dbd4c02278333d216011252271def835ce4783883c0760dbcc00bc33bb8a5cd3960be268a1c84d847afac04dfa2584775ca54f6fa189c7d932a5423dc8e3d0fd89da7b8b74a2cdd8fee69310fd3ae184c6af56e892a5a1be27e14412b4e09868fc6a12f3b66ac40734fc27d144c81746548f1f59d903f771f1dc4b1a4628befa36e22f0832c73bf8646503f995752fa34d6a332b3c4ad0dad8bddebd48644a9d816b5b31af623993d648aff1b9e93085fb6b18c7842335e126ad8663803b4238232d1cd9f4e2c6c0d2ceb42078cd22d3a4b7589379352d6e21d3ca74b856b0b3654ffd65caf0ea679f1f99ed99c90e7591797bf9e229c06913583258b65c9bf68ffa833ef934ae708662e6c2e684fb520ad7076088a6f6ba4263467743f60ce8e95538cc495519c3cfc0240625a7f15456f986303455d849f71d8f3a26cc0a73bb89a37782fc3449c260da201fd9f862bf087fd0acdd6dfe79ad940729859d7e4cbd4ca86bd006e8a66b907a9cc319648b2c7baab8e8bec2123cdd4712c9cdf2e51abcc5cd7a9789c508ce7b640d5b43038c0125221bd17b08f2f363aa42a3b5cec87a3870a1ef1565601d8b3e5ec7e56f5199a9b120b013a4f65dc1b99626b04fee0e671cee1772cf9a0412f35e633317a2cb9e2c9f63702e71a3cb076d5fcbb0b401bc9908168a4bdf0c784cb6391542a8206d5c3ff07cee8a4ee85b7054ef3843da9dae99f4432057bb260e0e51743a8b1f7c09a9611d2b6ae57f7e460f0230c321742546b98798299c82040db13645725134fa85be3d2f38f0fa399898ede05c5fa8c4b96e3df97e34f5f55c6345ac853cfdf97a0dc3401df8c0520ef59990341aa1549a1b4d8c7d0de8a8a36f87b7ee6a40cc305897a7418439914f30ed8876ddc79c90c69e994faec1e689dbe6add263633c50a6a1accb1ccdc00451d00f482d826644791a681b9fea77b6b149d85cadd0118200c996e448e4a5d45e2c6fd2943a785e3ba8400a69c923d3f9977eb1d2ed136d6df7afb391e60a6861e8ee3d99579b8515306b4493c8b288b9bae8fc5a240abaf5133d617e3bb56761ecd5b1c54197610d9b2ff0a54deb7cfb995e63cbdcbd10a0058915984b6e7a67206c559e60349b2ecfd53627c29758c61c270eaf7cf51877b5dbf8657fff497a6cfa52ae1d3adb7db5a43fa28e7ec3232b8d268d6e7a7a810b7b326f3d2f7ba2b8c9d07dde70c80435e6339e19686618aed6d3ee1914ddc6f0b0ea3eeec5b9e7ec1ff6910c9f0bca38e13aa1cb1de8b08d4b3c59e58be94f4ac34858fb8aaa52f045ec74108f4cd7a4df7a350c64f3f0b0348a563aa6472303fc7547ca46f7eaac83dbae5008323463261ee144072ce200d9e46d802e9f4a01a39993c5c047b80820ebc536d265e85bfe4c2edbcc3d8d638173271fec98cd2e00dbc253c243c2ed66434329b48efb76b12ca2397ccef9c2765f0b7fa5dbb3705b645edb129312419b0cb0907855769a86e8c7c6df862f06fecfa209241004b1fb5cefc779deb0ee086d92d5e46160b1c4a525ebbc0e361562eb722330dec9d829eafb7ebfcca2daf58f735fc15bc1a2b48e420edc0d16d9eadd053690ed09cd2d360c68ac06f2efa999da96d6eaa1559ec8a899082cd839ddcae3ab0de6cc784f69a9ed0834a8136eb450e2edb709b2ca7edff20613831c85dd92e86f711ac1d7ab5b759afeca308a085cabcc6900a17fd66d839e691f6c283b9c577e35fc900c23a8682b0a622d46bc86593ca98f0a06f8dcb29ad7b5100f0f895f01db79cd37fa1b2e830377f2eaf95654051fbdd5a70db4e9c1044bf0827fdf67c20a9a60a057392f6a8f1267bee65505ef7292eaaa3d7b8fda99ecf4c8b328d9876b66318f638cd4a8563a740aac0ad2c24b163157afbb0bae3d9d042bd4eb1c19a6e5284c469b830401f7011572fd2445515293f68cfbc705996808f10ab19840621f2e1e27eea5483851f62861b764412d4df6cefbc42aa65454e8637c01b5c3471d294f2e0ea33aa2513b8ba1bff87f860f4428259d9c5b17698cc95363db6cfee603258582e3a3e8feb886599d4ac405a1634c320e85ea8ab0dc6bb65f72012f82a2e951d2cf4ab2615661b1dac0db520a3d82499f4e1c5430c190ce7ee24b82faf0e2bd87cef9a780fb63d2fdc48b1452b81292d95db91ef22182c34793129d55d35aee2847766f6590d5e48ebd9bf382be4336431b898ffce687bc43ee1e2b9b35970f3da48ab318feff0e1613d499a1365f5d66f0535058f6e8e1f85936d2d4fde2464e4cfd1b9f2b29791c2dfeabb707ac2ec845e1080e3bed5bf03d243a091383bbe4a7974e04019b4d2875e1d4cd1b73d2f380f960249bdd52b303ae0c425fc298861d20f54f679cb1c25244bae959fb716f0b6400a40002edc7119df085c8e702bd165fb7864476cd732cf00516a98e31c24cea8f9551a255b6d1b88ddc39392310fa1d3db3826fcac26cae5e59f3723d76ad52b6007606b208a9c98c4e9701230731222edd08d0d03878446dbc1ff0bb1394661cec56762b43039694e3cb882a2a2336330dbee1065bb97ad9461650d41f6bec6a61db39e8f146e94ea4bd135f023921f44a8ce995b6971a4affbedaaf2499ad4768ec991299da88629855edea16d9aa189c5a32a5ce7bea6af000d675a986715c0771dcd1c4273b77c87c5df4ee6c9b480b10025d2dcbb4de20c58b4d379a005048534b4cf995cc353a18aaa5135bba2ba096a2e55af13e5197f34260553d21cc33782eacc08c0146f8121d240c0dd06a62d45a66dd5351695e7343d58bd79e78cfc9cd18a174a44f0a53fe9a61e9a4ac5ab371083f5bb4ce7c2ed6d561d03dfb242e6fb925b57bfb76c2952e9b59009a8e1931f2076f3129f90b43886090c7fe3a905eb7d3b74fef4646290941c3aadb08efe04dbdf98e22def1d1150f7f03281ad5e03934e2e7d682c90352db916b18d01ec740e960946032cac9a5f606bb22cbe73e67ce9f0d5630326c32f22a0bf9ec8d2ef4140c0b8cfd7d735f9e8bb59355acc06a2c5487175a69aad10df6522566235c90c565bb4d48f2176c8e78ba24c10ead6ad36b1ec207550556b45d084546ca9b3d85d36b4c1a11fdf34e33927d16f44f8e4d4a9aff40e0c7e96fc7f40092693123dbbee5317bc26d1d672605455c45ecff205bc3750cf136b4c79cdfff54e767694f8eefa373edae1260b7db249bebcde5d70461cd73719cdc434491ea932e853869ab524a0b7a09f9c150dbc4dccd3a67f7af3baf7d463f8c6c28d2685825d3b7b27dd6cf4a51c6fa1358cfca26d37aad0ac31ac1335968eac8ae6a21aab4990fb16d42da395a2d3fdd377de182e5d7e098a8c6ae9c925e1ee13f20be91c31e67eee16012de7e85eda754adaff7eb972827c5071cc0d96b513f44bde7153aabe8f242f62043a3182ffa1929dc8dcd03ac4184a5b4a817d5ab68230a433f0188b944f9cdab70b22c2b5cedb8114c7363956d4c671d5b32e553e646cc7b1601fd046d6cad5c6b940a09583821f63dc6ff0a348616ffe114e3724113ce36a22052eef3055ddb3e2ffaf273632d3267ac1e341c987a0443a3172ffff4d71dec47cea1602ba7cff16d430e37d4a46ed30e0a3bafeb5bd288c9c8b3aa50aed8fb5fba453b4551e18a352f842bf44e5187d5094675e78111b86d4025c98e1c0ed84e5e010dbd24b8136e047dd72bf2848de7647df5f4b46adc77c5aee518e96789fe02fe5dfae8fd93020b20c4e25aaeed2e6309b77bbb +MD = 8ecdb553cfbe2451feb4b6440056099dd6511faef2ac7ba92b646c061be2857c5bd09710aa56658d4e3f566850b680b23f2e01344902fe0c83e8d3c8714c8fac + +Len = 43000 +Msg = 5e7d99cebeb23c5cf1c7340b5b5e2c2d1af148a597125a485bf7588a25350e5639cc103dfa64f3d3bbd6bc56d3ee9991ef70cf00ad58f43566665e7a4adadbb8b37da298b3e08ae7efe87a3fb18a21e438d4e7ec532d23a32edd8e2d6bd0f86d7496392610af6b603506560e1ebb2ced9c2577afb1184f595b63d0eaae9dcb3d2522bc303a58fc063437380a41082275c46c6692f0a1e02096010cf83bcbbef06e2613fe5963a7a19583087c43f96b4458b19edd38503ec087be2aa03be2374df6ac26d89459d3f8fff2aeac4b166f22fffa06d8b0aed101d5a2122ad668a01d66bbdd0613c1e7d41b8d13e282e897d7615186cb814202ab28b5adde33e76028655c20cfff234dfd915b1d660ff6492a27bd06fdd29437852a00e1037be6df369c96d77d80076c3b0864b57f1bc8eee5f9476eb7cc2dd958818a97e3d5ee850fb371ea56bdf6ac5629b1c477cee7efce7ef5a641979451ecd55bb8c46a86ba7a51f541a3df7875159b4930944fdab2ae5fd197e35a510609cf7c2aef6236e6411e2bc4ab0d132f410635e31fc729a14c44e327e53eed5f7716f4d7ace486712ac41a5cb8705142a2147bc35f5d5d2372d3323f8e6aefc6fd53cba54318ffc3fee8caef1030b917006b25ba9e3afd9fe6b7c6c82706dfa2652e0a7efb27284484354466fc74d31423b33aaf2285917f7196a7a8f83c465a754eb8491d39895d86508faac46428a2d395c3893567a22adb19dec94932ab58f65cddeef175ab74cae4b3a2b0293f2ad7b8c7321d08b708ece7711162109603afff8254bf0415f31a97b93508eba012f8c64e91228f58816ca96b6a8aff8fc36ae0ad65cf0e4f403c11a84d13d1d4c3fe64618e8e250dfd2206d1bb0b271f00eda7690868bae2c5f8fb88d11a0462a6b13c0611a7f15fe4d7a7adec2bafcd2201fbbb25d43055e818fd62a865acd222d8f64702b71cd59e533306e433bf22916e84ada55999301362be3dbc3cefad9e3d3a2c4904cdf8935e53e58d6b81a5b6fceb466e401dfcada0e721f4e7f87a84a6aebccfd72d4e2cc0af51ce1a1bdef773d88e69d1e3401e981f1638adedc13bdcfdff7a776461cf40ee528f89b555bd9af28e7e531484cd130f2570d8f70b2ba7cdfd332e99b9e5a8b8f0b8017893713ae24d9610d75124d85f5584ae3ddebccec7bfe342f4dcd7beb73432c88b1f791b4fd3974e552d8ab1b6af5d78e8c5561b924c70fc9e540b4b9025e32617813f05e2296b56b5a36764bc39e17d1f456154d6acc4a4bfa9eb16eeccb465444229c04356f870203824ba1afdf9070be845423de8c5827e61dee9772f8dcc39e9a113196228e3be76277b78038e5cd3356aad6d075ddd04064b8ad35857a21ffe0ec80d56e1f9b6e4d96f7d5186c5a1b4395d0e1173ff791f9cc2ab4ff8301d09d8a5c6390df8310aa25dd2f1cb8a9aee1819c90fee2e04353859a71a5abe5c936673ed1393295671eb0f1feb43f3e86a70aa4608b8b3cdcf87176ec36393042322f929ed5bd44ea01a4b0b45d848b3b0aad92c04b8d6fd75f1c4a952fdf93c42730123ce4d41401f99da3e0971d022492c6c230bd6debcb0de27ffcd0f362c77c15182be51b75577ce84613ff5d45ebc602bd526fa153106b609193e8193fd4a75b3efc54f80b52f23101ced4e9c8f91ade0e75c0cc18501e1329eac3b58d743f5ec12ec2fe287cffe48161d6370db517a5104b6f42bdf29c76a372024cde1ebaac7923ad926f4e0c9f2f8d61c986d833147d23a9a9b6805d1798ca1263a44c9fc0b18b8359323e9ebd76921615b6baf398af9f2e758481d6526443728e62766547f4b6c2c733c72ccbf12051a03fe5efae222e6c1aca6f9ed3a08ea131ab34818edd460a40c6903d4729a8a2fd64d16dc17f51d12ddaa22cf7e7fc3cd1e10f9b21b5a9c86a8d0256bb7abb8881d816247f0199fc0347e1f75b752c93f3a650188d18626bb8d995ff957ea980e1fc1c7a3373774b4f9477845b0280551b6dae604d900082a03ed3ae61b0131a72636cf58b2f6a5d77430b6a930aa7decd999328cfa6f4aba54f43d9ac8988b3c780701ce2aff3810ed5e6008fe803bf6ecc76c8afb7bf255c6d5f07e2956afb65e5de56d66f93846abfcfec9e3514759378f1d65a5cd0ae2a3b9dbf805e4a4fb2060049e308daa63f7301856a7c5a7fb0217cc85c00d994831c7877123e972f50637e5c74e63984e19223716128565c69587015214e3a871b9287b524c0e228a580b1152892209ef59fce271eb3989a03708453468f53e4482033f0148fbbba45d030ea5a972062efee3a2cffc89197332c21e9385ee63a9d6815ce8df57452a5e48662a76fd96f35201fe980b1b1f26ccdc17d734741f88fbca596dd9cbc904a301a047b868c1269b7e7e34e19aa2a14e7eb5683b2f7bc93a05befafdfe4d1a74574566365e8faf2282aa0c46acabcc00d282ae62c97e55db5a14f61499dc541972dceeb98509762f340b8602f9418f29fd051273e7311226f2e1c9e6437b9ad979ed47098536640abc280bdc2a6cd2122ac6fa34349ae963f5b0da3ba534d4fe9501d8ee071f5ffa4389049de7347d047f4ecf6f55c3c2d98b0693db660eeaceed9f0b30b3ca5048f1b7d70dd7a278452424faeaf5b486d1da6d5b8e2f12c492aa4f47963041203ded39eef4a3bdab1d42d0e16eba741b930d6c9a1ba8464a91f399f5e9278cb51f6097af1af38efed601dbeec24c0a6b674a8cb94b78b46515f1067bf13fb1f936715a84476d1b5ab788cc88b054815d95b9531ee64864fb64cb1d427621bad3cc4909d442bc6ea507002b16fe7aded864844b32b4bf5cf5c7aa66b24074ae2a270f2c06d4868fc90f90810275652bc61ed0fc5d7c86a63c86b66a3316e196e890ec4c84c57484ac176154b3ddbe700e09c8ed0808444ab7e916b02ec21079f44f08f0b5dd2d5738669b2f91fe2cb3986d91a6991ea24e4d38f3c1090aa85f36ac8aa001e35a1053466597049f58fe4c9456af7a8748bce8ba74232eb7525196ef9ae4d0a1a2b5e7fde716748ae95812c53d91110bdd9b6fb8c2600391b555fc5f62458addae50dbd44a33498588cad2476ed3c8710af4c97a0400f25f7a765045074a976025e81713b677eb59dd5a746312fd068376cee048638962eb48b97ae9b47c60f2b08683025268c3ce8f12e06151973207c9319b6a0785bbfbc82862938f614b5af73107e9479037ab47fafe89522ab6c6ad26e227177b6458a1caf18bc083c162a1f18b0fbc77b0baac19b7223e3df988c8b39dc9bcf4c7ca7ca70d18706a2bd057cef7bddaa397c16777f1763c596314c2e3b4961d774b1801c89f84c79cef6dc0d1333bc99e52891f1c95cb75055c3444bb10d7638c580cd7349015eca37701850127d1b0f04bda7d118c6a11c94caef64597d3b5bb566ca7f3c614080729544d67bcc7b71fe87b295dbc9b372d9b4b7f8832d43c8dad01180e2bc9424e6f2dc109d86408b59336ca080fa60fbab1d3888cca201f89c693d38ca67bc302b05688f164f1c83ab3d1081b6cd2c2f7f70eb85a4500873807ea7f751e73b2aa53954b2749b62234af158d9dba68786dd3c4b8f98dbc9c20d9cdc5d27dfa38cfc2b3b2b16dfb3c2df1cafe96e3b058a2aebc2f71889c85cba5054daaaa567df864786499ba083eace0b8060ecef28b20f1bfc6cb20e86bc1d15bbe058dcfa8ada1ab0ae71724513ae4a64b0e6376396f0295250e3ce77588c794c1eb0eafe277e1164ba16b999d5e655e759d8a8388154b06f342c3e2ccaaed7bfd65153c52dc8c7fd0d1a0ad49a0cba62dc42b63a39c32dad86f9f2197afadd71b7a8ac021660aaf417e9da97d887f471b8a2e5cb08c21d87e9eb7ecff1d6e6fc2335581769dc46e45b14ad5639fe709e6f77bb7d86b7fc98ad7f38b2c7e970c9b965ec87a08208384718f78206c6cb33613fbbc42c3b475a7203b45455992764dae8edc542f87b8a7c654dbdf77760fb5e794b2171b28a47b8377647337c6758180cb072d9a62d356b88147c6496ee3097a2fe37efc431eae078f2edd9f9bd1df16fe8f2dd2179d3850fe02fd69baf8dad4b595a0ed6daae9b46becac1979510e7710bd7b5e10def695b354ad5fc416d1fe0c11a4760e12d493f4e5072dc8bfb7abe7d940c6b35e37908987feb4f30495ff1e9fb31f8e1c16ab10631764f0e181bb6d2ba3936ae4a44766e217efae8ccfdfd186f57155915705a8ac0345597f15ae88facd4c9c3ae5c434ac21985f7427a70f1091f3cb3841a7a509f4596c631a8c2290e679b026a10fd92e43386d85445ebf83b02e58db7a9bedc212268f54395d223315a21071802e3fb0a6564087cf0cc92879a86540aae96a1f84362b191a2a702c825023e32c2b4c79717a40426fb9144715eb58307a9702687311a97b64faf4c3560a51434a0dead3cd2cd57ecd6e8a28ab7f9b7391af9fe4063d6f42c0d6963fb959025b85dd0004e2f567029133121264ea94d1993828dc6644e736d5c53eead2c49ef182a27555d75c5e97620e944f68b6ad12373b8598baae781e4ccfd40acad38dceec64330ed5ea2205e809f925de6a4dfd15bf9e602b0189c4ccfc40e8c80e38ba692c217703251b14cc2b27ddee8fdb5cdbcc5b7ce1c784eefe556accf5fe057ca10127d88a97b18bb67c07bec2acc1f5316aa4330387d06589e13afd792a5dde3eeb2d7891c84d344d0581127f496690bda261cfbacad5f117a999c57b1aa9a6e5f21ba0413f55d53acd7e1f50ef32f72a7b7a962d17fb594db36d6a23574f9d401fd998c284333725dce42f5b248df11efed7d185f6aa67d509a0359a68b98bf77950a83b1f4d22b43b9d88c873df45413260c7e9ef4ae157b3186e08d54d38b2086618d4990d5e92f18f72c06190bc3d1ffec2828b43907ab7bf5d9527756b18d5042fb778dab26506a4376b78081eb7cd97087751fd3ce71f7b4a67e598eed1e7133609471be7d683c21ef03fb0335a4514e2f1cae1ad46f3367ca9971d8786477975f58b3ac58c6fd36e773eeec2cb8e5e98187c55aa3e39d73c81c66effdffb2034a0ce9e1430d2be702afe2b95b5b05b7213f1c2fd77fb46d217f9f21d830deebb3597af9c69b56b6c2f06d072beb4f5b80bb1916c9a406b8694b811ab1b84cd51da6fd525e01fc2a9aede43228ea113b1274228c04f112e9f208b336f4e69a440b7dd78763c18ab71d00fee6dce7f9da6902ef1c03d757767e2fbc033c5c35acef669005826a80e0abc20381a26567adf6dfd52360d742e24038f20bd279ad944bc9bd59346d8d3bd9b9988f33d2f94a4e735b5e866163b1faad0bcd51df708ea34fc5fef43afe2d2950348bebc11d23d266081a0f16486a00044fa454fe1cf0783130734c6352391d1e5df444a051cf151051e245665f7ef2d7543d4646016e4d468332976737f4278c7b54d90125a0a91adf43c3c21775358eb0049057cc5ca4d844c97fc70dc2cb13132a1364074ce0ddf6bb24ba1ec16aa2c976dd93ec5ff16eebb46ff352498a5acbe07e3975386ee23eb4d2cec407e4ac2720889adfccb582ee7fe28c83dce7cbfc1483f20dd795b01dcd4870a59d46035f7e2bcd153783bcd37871f3311165df3a32cf3e2fbf17d02a6100304215f160b90c21bb3b24de65215a88b7e86b870cfcc7ba7e596347badb1c949e17e6992cea4714d5a02918245e82b14af86fbdfdba4fd0232948b7e8b65c601a95a38fc059ab8fbce298d362f17d663d0f829cf9f947aadd0df3eae222bd1d2659c157d39dc5dcd1811892b970c7220e8c3886aa402b950c75d9532fd69b0641c2c483df1d1286a3fa0cc88052ec6f300d161d87157839220f8d833a1882c60d6f21963b5e1e37b4bc0a07601e59c821f09fb418efca01be2964ed898f10d6e9bd5d0170d7454a745584b1d1499ba784d53a0cc8457d8941521404a690b1b3574c0b48382f24597345016a4c5b2e97b929796a1dad2f3a5c280f6b09c3d1e5e68980ecc9bc47cf3209049349d98f133f7bd26e918d4b8f5f09bb833b9f1dd908046261de150c16212ff2cf423b49a4a83ae98ccc7c4f02da75acefb498e2174c3b2449cdbffde8c1087070ddf6cac653f5034716e0c63f4efa57f2fd47cb2b239c4b0711139991a250f21a65929ee2f318c42019513d9f3d16415f8e02258f1ea65b1c50b67bcb45680c3e81a54294d634b09a3c4411ad2547fd67df7eadbd9df7b91c052ef0d01adc035fba953256add73d28084feed3881de0be7a03b02131fef96896d3b55aa31b8bf068e90aa2ca5ede5bf5cb21ccd5e6afb5d647d9647b2aa0949e4b15b56ea50a9315271803bc5a28a8ad5c56d3af609f008c919601ca193322740bbe9aee1713aa67c606e404579090675a0a9274ea4300f5975253bf391584c07c0c55a1d01bb8a94c43ee32b59a95dc7a9983b7024049b9cfab04cb08ec4dfc428b801a6e974082205b6cb812cb3b75049011f636fb4d41910c8f6e071bf09fc5a8a4b8512ad45af8b9fa14fd96f3b9ae8ad7b2f6f88e1582034e18c228ff239c003e2c163ae6cc2bdc00c9b4825122cef65f6dd0ac8ebe190bdb6bc887cc102c1eb6b62c3bea3e405e3b56f611d638ec4ef38732abb193dca2b1d768dd09fe0c50991711c27129ccace43d20c9e5749d113eafcb6aa94f33446bdc418d1b35a3426f9f5552fe372754a5fcd31f216e47d9bb47d96dd838b38d53fad12c926f8770a4ef6561f3bee6c1fb166b85fc7e72f4d3d00b29c0f8d3da24a3a61fe1f42f47d367d073f45991815e0a7892e93da51f32e8cf22f6082ab738771eeb9c7c11447599050d626fae1f495988ca7a1464a532e2a3edd9df2e9119e5ca14145fc3f2f613a192e099a30837740aa111ab38236e6e17ef0ef636144360362e0c27bdefff3804a8d14ff6b8b2fa7c9b625a76163fdb99aae7d5f7ad3f76c1adc66c7577dba6ccb3c6fb3fcd464d5d2dcebac4fa41cba7a60706d9c888ba1af7e586714725b058483433e4926bfd3aecc9349b4bfebed064def162f2997aa0b0ec1e37ba581535da9b826bc49e8a843ce4607f87d115927bf23e09b7fc68d14d4c8c4f6e0d25f3ff8f5f5bb04865c7b292c6c83a63706c3fc33554952bd54b4179691ece9f63010b62332b02141f83d276c02bd0204fdc34d48fd9f6a2707d22152d2c58996ceba2c69660266c382700e2f510f58214510fa8a5f068eaaac56382510e8885a4223a2f018199cb105fe279ce0df7235e6904b2003e788ee4d27a537d1bfaee993355fdfd05d8bb686cebadc379616e9e92d883371a81e9cf12fb0afa0b1c3ecc9d6ad5f1736fa780fc80f16de9d0de555cef8ea32b3195ca155a0b602268e0aedf0d298730cb29fa7d46d735e5a1fd0325be46ecd6e40d56481bf738186d8ec066a17b16f477cd457da1e1b3d37135389bb94e6ca435db0429b530fa43a69391c2cc4d3904f1ebf26c26835069bb31561d8507bb2993694438ca5b1f3a8099a381e2125608c60071c7494e93eeec5bfc29960550bd7952a703afd82f73980b7602876d066670c5441d9e9616f97 +MD = 49e91bdb49492471e1474a3934cb235d877451e4eb447fafe3a01f6948e06fe71575eeece2e41d9634110be5369199458c4f2f68ca380079845138ca5c4913e8 + +Len = 43792 +Msg = 0e7c0e3ac2f13b490fde401b38c3a8dd47dcd240b700477c71c94b95faf5b2dcea0cf5baa04385a934a15f83ad60e1ff7496dc780915eaf1f58f025700fe4905a3422b8ec00cabb691fcf7c1df0640f1741ac84ad2043d98259145b377f35a022366d83e8c1454780e36305e357d6cba2db0bf3b7a96e778e9163d32c79d8cd950c023526a2329f8949931e1198c0e6289a0e9d5699391992a68115b58c4889414983553c400d23d096b23d2f2fdcef26f316d9f08c3e204cecdeab69230f63b563536c90174f64f57f52dba27965371c6ac7421bded83c0bf8ef0ccdea87cd4fee04d3a89473d37647f781f222046e7785925e4f1db1bd5e3f24a24a2f5c569f3e1a230c44151fc1a512c8c4a624e5c6c80a96f0d53534c2443214747df77011f805e321a29d7a65fb27086072614d98a69274a771ed32c69c79cbb362e3ba56905a9c9f3c97a3e1dec6c97c1324065ba5cc8fe9904427d99c8e40ad6aab85cb9b7aa7bb7e7e0cb3b454946e04f7909e4a0b412dacc48489e8c20bb8e1b972ef7df8ad3ce4cb155a1062f1bcc4567ccf07e120ea1408e945f5c7957c8487f230bc57056a0c096e53776459feedcb3b6c63e0a7b5826bc69c47f1765ebfa1944deb1858e950b3681e5dfb459acdc05cf4f28c6e066477acfb53f216d5ff90d9856ebf10216f43b349387a3d26f0c042071836bc5336b6ecf1ae2c0f88b0d02275cbadb3a89444a0329b73b90a03559b0159924b227594370dbb11b8dd9fea0fad9686bbf58c30ef88fb7a41da51fac8724b01730aadb9fbbe1f45bb4b0939018b33bcb18e9392c1aadcf0501e892a4ae84116cc624b72bb612f3a7f578957a89d47c20cda66e4f716b4786c2cf56e92c1f044cfdfdb68e6b57f528d99acd055622729567f62a1d06b26651eac4322409dbd0df5c9da070e2994405e77c00da8687674f6d40343ee068768b012ef0fd4ea2bf4c6b6c3d7b22be2667a887f9a121eaa17967ee555b0777bd5f8d75561b025b17bcb2d3555533afe476a2237f0130326939dd67551c84c584f318002d272dee2156ba38afa61d55c5595fb959a2ba4907b75813fc285e3c126f29393cc8d74225430a041417e897133967af502dc716c31d605a11289dc3b1fc49874da709416baa2aa04c4f9d5c143d406f2c4a6081e5907ba45ec34a41a7c2fe52266bcbd23ab4a3721ff7448e128e745fb5a08b72b43a3359a9a26ca03de8d30390bd23dddc88fce455b7e31453538be9b2d852d179430fe1bb6c0bc7bb964d0053451b4b9750bd5db53684d620b50b74ed99bd867dd397a45cca2f9e69f6f6b237aaba02b4316f45081d2ebcc0dc7e672c8cd37a0510540b5364e10d8e2d5581049508eb7a5599031613eaae7def6b2c38599c935c25cd7c6ae128fc7466f2d681ad0eee33e4c301a7c1bf949d175b2ad9a720bac9388a6067ea0d5361c75617779bd3f4250575a683cfb556697bd5c9d61e68d893721420132697fa9e7808aeaf065fe39ae1385a71e4d4dc29446171f9677bd303faf222363eced973a29001ee97bba5d8a093853ba8250e2599878a082a619561f9acd098d9bad9276d777afff6ee2027690f8fa7c5afd5a4a3d07ccc0e2304f596cb9100a064e00400447fa9ca003ed16432e17ee07a17f089c3b00dbcc80a06fad6cc383ad3d750847f7ab3bbfae51dbb87e187a48fbe4f74e98c93dc588edd4c55eb06510fa75420b1d2e673e3ff529393f88cb6f5b00a8cc8792515dc77c3b5d155338a213658fd61ef0a97c373b917e08e53c1b4d768f8eae08d0f5aaffe5dd172878f106ea4421739e7d2a3299a6cf50ca66bd519b3e1d7279173dd1dd66bddaac908e4367f185b1844c98a093dbd5ad84b5c5f60316e15b8fae96aa995077d65c39ca67533a7b6f4ea2780fbe930985c0a3d5a932cc82ef98f180b3b815b3a0b3bf45d150616af35a2928de7e7ed36ffadb6cf9aea16aa541aa9c7bbe48c9b04fab811fd418ecf4332b2bab5801dbc28fa6ec55db4810f306143a71104c529b8c88fca152b369c8662310e4df9e8b241bb0e44c3d131e7f42e8fb1262a2c6a906c2191450e37a067fcb492979d75a1b1b63d54b68b4db90a4735efe09de9e8f2b0176d7530b8634cc6e64c7cb3ed11e0b4a4fe1e28fe0ed974dc6928a7252b475a19678ddbe26c9e8a6c46e2827788367ceb49e1f16b6dc97f2c26e78e08b9f833ce867555dd43c60ef188b3533c901bd8b93ee82ebd5e422ecf2e039bb91c6b03dfd216e6d0702a1b1b18d56e64b0f78eb6e31b271b69ac4b6a89661661dc0a92f35356d8e37b34789200321b167132678b426223ae176f9ca840f647277f3ca7b3121e7140ed4befff48b0a27a59342be063a66c9deff3ea2e599d75348f680cc71657fb0c4ed6460af6394ab9f265a25c4ccd48117aa1fca7df41eaaf94f887d667e7bc72243f465a14b45dfbc42e93a807c100323edf9cb9d7ccecc11453e1880eb8fd98f9edb798a908216755f5c86c9c68db27c516900c4b25c49299e1e28712b005a65448616bbe1fdf263023074f11ac231997afa1494234ba49aa0a51787bb91ec5beb80b7c5ae0de5fda2119f970741e2f3a109718c5e1150fd036f70652ba8e1dbea57f738533683bdc56c613c1a7169238a33a20db141f0b91cd9dd79e9a9ed5dc7783f74700c3e2bf29d5450a2f516919cf520a8cb51e667837099367439615a096e0b0a92f387b0b04103655f318dd63fba67de0ac5b470adc04e3b59cbe07936b5e47b2a90f2f464e3d8fa9dbb216a091ff22e0e11ed7d125556f918d5dd03c5cc4646b549025fa6e25f70fcf693b57f825a1933daf3d5478c6de02febd9b23d2dcaeda190386aece90178db783751198e0a102a655a21b3e1dd811d7248ed1366cce09e1af79ebd546972e7b49eb55d9f8ca3305592eafe02307c500dbd1cdee3d6b0092dd2738eb0e1ef70403c6ab2334c63043030897c4a01026622a8d9f64172ec615d5b71d78b154f238f92d9bde5d3a01469b595b545c9e3ce358ead0fec1bf6253df5222e4f8e226007249ae723bd1acf8694884f71e57106caf0fe72605c5df334320d098a8709b45b8416b4796313b40b5fe9914afe3a9e675256c43a9e9429c4848aefa8ca55aed113e5bc53602b505c6a32215d8eb0f37f353e8bc76d2957837f345736b2a6ae1c6680455e3ed2331e55ea7615f174b4971c2e2fb3428e0ae58481b6c0ca6d30a1ee6f05d64998cab5a57b1600c0e64023799e267ab952926f370ba4b38c29e4f63e1a74782b0f85b6db7c77aa979624c8c017068a2bf7ac85092aa79b726d297db80af7905d7702966a67217fcff4e0eba221566e34eda7cb7d7715f517977ccd0ec925db5b8fafd8c4b399fcf492f30072358c934eb522a6f679964ce6496d5884cd85959fba1bf28cfa47ae8fe0d99bc2dc2fa5e3ee8bac169aaeff58e359a4cc907d7bb486a5782593b100fc7f0332067da5f29eea614f5052a6a8fa05f03638ba93ea1455fade21287ca0e4ce1e57dfa28615ca494205365a33c644119f817b945f6d49d87aa90220f0eac34e797190d3468c107b9c722ae9ccd3c1a6d61ae7c64671cf6ea34d3b05b45b0280b313ec987dd1ec01defac0b9e85dfd2622671fb8df940f99134f5e4f4d8e3cf549c3256a8263c76c88137a230cc1512002fa85f48140a4d83933ce7612d0dd2cabe3ddb1fade3d2c3660c9bda0aa58250649bcf1d20409ac837f1e12aaef6d87580a98075d9da7b1584731f24a758c959ae91749585ab8a690a5bf9d8c2658a5ecabc6f3111eb1ac6c5b356970bf69024f3d47537ab13c36df3c458f2d023908c85c0cddbbfdc57df101667ba9e477eb71daafb8cfa40eddcd972260042f9910797fbc5fb4a76d9664ce27a15c9123c1c125c2e1bdbf9b1bfa6ae8a8b7fac35d8eab67c1a1a8149666360b931f221715bbc31356cb407b71d41c0ac1aef07250665381dbf97c54ee43cd84a95833ac67a01733907ee33a6fe92f0b535fad10999efcbce73290a91eabf9255c9e226e383cb686175f243266a8186cd6408d1889a72b5b7bd3817ba7fd4d5035679ad6f7d015ad63d27ffe16af6c91b3081d04b10d53f02252cb570ac63eb7bc3ae9613718b8fbfe7f4317c05d902c820cd96fa0300b1d4336dac5b78541ae698ebab7666515045fbc39fa244127afbbd54eb3c7bda53587063c424eb8fab6c5e97b241643ae49002fb12f92d8976dd8d7f97b9814d6cb36376c4730dfde6349c19741b743095c784035229cb2741961ab4611a1c414610950f76efe7841267dadbb9ad9c1ba913074527db23d2224dec5c1307559c27958c94a041800d782ca144489ee6e1699b152859b73f73602b89e073273347586ad26f0b11e08161ac77bceb975a6b1d883514af6426f344577ba64a23be2a21b8ef067f0610c6130fe7ab6840ffa10d01f071f38be03816f94a185fa2fe2dc9a769c3c4c817c6d77c76798840dd6b802fcca8ebd3762c1e3b7c9d7c4dfc399a5eca0da100fd67f41bae8f1340fcb2c039531f60e5efb6a3439b9c67ccbf34da06994bdf56cb93b4151653d1e7655c13480d3f196853bdef392f7fe9c64f08d2c65fe7467188315d92362e8ade1f53c2848170e005aa2b4846beadcae4b59bcac7a3489efa3c2938b9978905cc327d1414371b7b64fde7f792d28ed2cdf8d70a30edd6af98ef638db3c0ca0b5aa7c45321b7a6b32c53d94344f28ac92920a2d92ac6f941f4aac6a4a8395b6430850fc5d28a7b5005b5e97684a70976a236e681ddb4191bb5743cc4bf8ba2d8f5d445b45037001a992affd77c7773a2de408a4870419e068456ad36203d092f519c5066c2469fd98dba03ad51ed3015854976770cf5f0ca0957ff43f4d7f630eee61724513fbf548c6ddd412e8ea89740569255d857772feb7f1b3163e2d3a471b9823525abc7543c4c75db39e444f0b771c62cfdef9cfdd3d6e94894e50753851e79e3651221a1455eb3c29a766ae791a1fa42a245c5fb686551d2b068fa05d01ce4743afa340350ac80407acc834676ef16e1f0e25cf253333c15def31482fabbab31cbed6842053cc29b016ff8d31061024f0f4dc7aa3b48905a470fbd91ac03b762417225250b18631c56e62f570402a6d4260e70ebc9ad37e912435dfc8efdee4fc312d3750b48490ba2b99299fdd7eaba5daebd7da569170a68185c8947b0393f7a53dafaacd25eb00c718863a1eab747ddb4182776841a05711522018025817c8dc0a37c97c08852bd95787b9842f3c5cea8e8b2e407272154c2172be062ac4c25de94c3731ab13bdcadccaa8be7887a581394e799f925a83aa7a4d11071a3f86a371696e9e6c0b19241ebb822e25cafa17b868b3a62fee04a4d2fb9b75a4fc7835292bfa12e9dfd07da3d6d043a59abd46b2569724b9912ad3b22ac7e23970399b76e0442f9306762ff2a91daf766b81768d948e6bbde858af9e3720dd662f2d3ef142e75506136cc391aeb4b226a1c92fc0aef41bab5830a10dcd30b7a9ade5a81ea05e13a18b46c0f754400c14f206fae202729500652550773972018260d55f55a502fbf3d276b09a364a0dffc0cd30683b84686b93b92661285f5b7eec8edd4cad906e7b8d8f0af0c13d4815928e88d9c6a4263b686eab62067325fda564aa4a4660fbb710f248a191944b14ebbd6cad105c2efe57b847d05037f18d20193f04fc0f14250142e21303d9776c30fc5468b5071332f628946282182ebbe0ff13d33af55843e2e37fcbb4876d9a06adc873314f4367a822096f38be6df86c98b15b8fae38a21a667a4200388e0cd1543172f19f601b02472f7cd0851fd12778aff466b425be3c4e5a0c93376953258237ee9271d9ab790a6f01e5f6c4c4a61158445c81bff6ad0da781ca3e700b87aa442c706110b790ee50a4f59ded417ce552a1dda157fa0126db5831a842845c5eded337d7b5cdce657cbc6be4f9d5f08717c3669d9e26bd2c7de655ff515c27f270794560393ca5f23bdec5669b00c5592fff93d0e30b5570f7b293be1cf18f17916525750ba2ac2726829e8d11404fee03dcc1d5d7265ea6e153976f05f2d630ca4d5490bd8e3576b53e63e32d1314a82bd18d26eaf63d30c33fcd8cbcceb1d073884f3dbf6df663706891e32f07983a1074625e8ef975a105dda291a1e3966935bc91f691b0537fd097c517978c6ef64a4bcdb743ae9c7a31b3b30845dfe88d8930b935d4f3d12e6e5259fb071ffd8f41be4bfb9994161ecf687b6b29224c9fd6bb3185e9a6f3e1a21eecf7fe30c8478f4259860138771147526834cc592722b68277614058304c0453eab8dd7d53c19b8e62d10b1a33f4221815ff9fc30ca8914d075289762ac00d97cf983544147ffee9147727a7d139f80fe126141e61b40f616dd4259f27e0366128208633aef511e8dae2d76fd35531c06632d9b9cab7796627509511cc1f174670ec50ba87a38d0422aeaad0cec857d021b05133ac4577d1a062689c9bff289e36562547131db8d1883512890825d29580290afa8ac0832a8584009dfbe2c2fee4e86467e5c63dc778009ee723d04aa72e07779ceabb13d723300d74807caedf092d9eab743f746c7ebbb079b66a288b67d6179950b7a27e25f0efdeae2f24b51f90547042dc052708a0e7cf2445e498ea1f7b6e3128c775ea31183af96cdd2794baf654e64e588da26ab545e2161776113e138a20a0fb550c9b26f7d6d8209d150814d7b2e8f706d863997c943d399969cc607b8392a6a1f9798cb3ead3979bfd0230675d4e6939274614d1af3db3897044f2c0fe8061d33d66b9fd99f1ca8ac923d98229d1178afb6cb7f3979a1dbcb1323ae8d5ecb56f44dd5f1368b5020015f760c6cd339a72e151e350d1d4e0a9a90eb951ce5a09dcac67ccb3db9006924ff76693abc85a97559037580270a4e6c454ee9a3c3ad7b1d070834d67052097f3ae6b773a21e05ee4a214979defc2da9f8f5b309411b7755da2235e9fa6e8a78d86eff01cb2b43ffaf21b8e18c4d31b97287fb38a7121ada0572d45e9d7d7479a0b548cb80d5ec1252aaca9e7724e2057badc7173db9ea14509f1b1da2a74de95b649ab90844878ef9658899e7aac7f3db0f218e4a39716c8552120e51139f30d122fdb3ad9f9cdb6df9f9ba260768ec5954108518ba37486a32c01af1eaf1b6ca987aa1b50fb361760f26ea7b624d59be249de4ed63c311c9e82d27cc53cce20e6e186b69bb5587db4f150f2de3ffa0d229ce93125c9d30681b611e2877b71e644be0fa11cc09b76660d01285b4052b5d08ad7bcfce4d0b0f7465e84e7e3ad296d7d834f5695859ddeb5fdccbfae760276c42826be15b0c889a406b868fdd646abb0a025cbbc9d30997c85447e02ea9f7fb949130bc509a9a37fa9117d2293da99f7e4d90e9e48eb20d1561408b616d975dab916488b41c0cf09c414b70a5c51b2a3bfbd71c31f2a0f54eed00260813cd3b8f68506c0dfca76f2c636891da64870549f57a7c39689af679dfcdd7ab05623d49003c91e5a1335cb5deb75c4e83b6d8b024c03083566ab8a01ff0c6d3aa1e0adf3f701ec373785e3c9c80fa8b88714a786ff3619725d6e4ca94b11d076ac84b5c0f333c30da3d1ecb840b9319dd7e03aabd5936fe3ea72200285701d0ad2aa7c557cf13b33e4c44697e9f4e7ee8a5ac4ef83cd83f07a41949c22c +MD = b1b2dab94b3db9eeb1d579e65f06f07004b98f214026e4d53b36917808cce2f338b6d195287cbf2430f3867bc1fd5c1a38a4cb3ec741521da718e2ca33c9359f + +Len = 44584 +Msg = e0f3c6150121c7b86b2efd3cae3b9a5ca975a25ba3e09fec97549750cec53bbeb3c76107e450b47a85c0aa05d920b79e13a7c1e16983d3fb6bd615c693fefc351d19bef318c80947be34f43b014f36fd665d958516b2a27833bda44d6845d2aec4f3c521c8112ce7be91c2244d517d414b9d088fd2f6742d96112b2b752325ef505c5ed81ab187222edffb0ae6adf63269710146c4d5b1e03ddb91a9e31f5dc26a5d7162363280c0b6278933f3eb079769e069f415d9c15acf23c00fdac2e2edbafce605451c8188fd7053e89d941a3af2f226dfec8a0d63f5ef9fa581921c38e743a50a6ff5f143acc241700c2f96e1adb0214f726ffbc3574916b20119746d9a3a96b9db4738b96a253b156744e3554121428ecf10f4419c380d8082df50527ae8a259b299beb2e0a2291dd75b695e574e72e32af561a66cc56c552b6b19b13055af341b74eaf6b640f3d183fd8fc3973d9795aba7a8ba71f61b7a244538506389a6903f5f264c9308827994b1bf4ea8f89aed7cad334550d5033796f513f7bc8d70b646e2da7e1f00bc5d310061c533876433c28f680fb46a0ad3a9031470e268f3ee57856c5203328ac48371dbf1dff0dcafa8d6b1df43bc199884f8a2827f22197f9ad14591e7a6d5f8b18c969a553de9a85309757fa5d319cc505c24f438c4c9b3384dcd037263833fe4d9fa883d767568eeb01bb583b7f0b834b5048fb754ebd059826c6f4d717de244e170823ea167359f530d4a857188a4598da91ba4dd661f24f68b9e20d8ac28f82b5e5200c8a7588e7bb2065207c7d8e66b7b60a66424e8c233905992a0f75b293f2dbe2cf21c19e5af72b09384979b04d8e22566f30c735bc1e5664bd245c1fea6468f6a28b0bfc978b512efeddf37db5b46348c9106071626f08df47680a4a0e70f8c61714a94645de3f20f4c87f2927c0f53bf47faed1bec1b9835928f4a368af27fbad5d2dedee664199aa8761552c3a54ba71cd06e939acd4db5305afce918562e1c5c31e65f9ba14f390a96e742b971e3ed1870d0a6b96d761d57c901e118a363300f4df40e05005b9479ceb28be5d9e53943c35b7bd065d91410c4a3451240e49ef50f4f13abea0752fd06bc54cf461732a6af593b671c3f436233283d8e97790d165f419715c8191c9e264fc600214381481d100d07fa6f5155fed9f3150fec257b2610c2cc005a996517b109ffd02fce31f6c91a366733e7f10dfe8c2e10048f2b4a05bb57fc927259bf2a4454bda4c06a20cc897fcb51ad3f48df33620288f32eb568ab3e22894e8307049f884e69fffa856183678e924a4698c30e384e41f88d4d81b90adc06d6e9d7854322ed4834e90cd0307818be670ee3f445385af7474ffc970e4291d3b29518f758aa010707409c60b739d29daba013b801ea8f71887ca9f4d16ea8b6898fb0a005a9f26f1f061f5b413222f6bf030e586ad75579621d3cde2b178b7803dd89c973a6274825437c07f5ec71934a3fbe1ba78615d57d399c9e44c4a1e1c9898ab9ca290a5ac0ff9badfcee283af55d094be17f354e82d8b37c43fd52b8839b9aba31ba026c994364947dc0adb46864d92e3f4b1fac190268bf504a06c7d919a312d0e277485716bf06a1eb6ac94a5c150eea7139b7e9c0a3b1953425d4710d8c0ad028d1b4a381944990f6c540444ea5310979ed379b194c98374217a8f67e3dea59157979258bcba6716928e3fd4171e0c5eca2f3d6164cbd61fd450b0e759dfa9230d55f843c4c656ccdfa781e3d60624651bfb443be896839eb15c461f99682a4014e2d699cffceaba9a3c84e4a5c01b330ae428a19ece1e796f09d98120fc9b7104dad7bb4cc2953858b9b36714d033412d665522f5d6f94863f5c5bc8f118f1e638a5638b9cbd8fe91ab97db919b1f37d9fe54309c55b684168ca512422b77d0a78dec82955d3855eb8e9cc2ba95315fc718906ae0aee8a51d5af232d8bee810476205397e1b35d6bcdf4cbcde531c514b41a4326166d233eecd379ec1405265d9932acdc26a54099c1a321a9b592294fd061a17acf235a8e17fdf967a643939c48de7a000ef1566ffcbc77c702c069342e23c9b11f5758cbbdf74ea827f1f149edea650c80dec675e607742db201ae4b342b63d3ed50447c45871eb7815767ecef1f170763b5b933e74ec1e5af9e201d4b4016e92057472a1976129a9abd1e0eb64535f9a1bf5632685705f7dfdfe631db298af9a2b4895ca08bd15b5c6b3d36aa246aeb2141c6f9cfebe9692c0b290f4daf680e5aaf319a42900402ada8eded33835be3cb86301086d215457d6c1040079a582d3090686d674b529577be56bab92cb3ec87d5bd00f3d43093b948c44b73b201600c9e555b7786641ea1f39f25a4e5180b3d75945080b9e259cae86cb8f8be0caed62221eeda07e1a41390f1b65c77334ad5afdf889448d5a197943110fd8820207664f3aef9977230b5dc73f649aaabb037cbc331964aae7208933bdaecd6e6bcd5acf4223afdbfc96f214e6cd34528454c116ad2f08818d5052fb19e2c71068cd9424bd206036f7729a5a9a163125412fac8fcf309c7b9d076aebbe5252127986b6d2246c66f2a42cbb2ad1b5fd7d41e2a3aa01c49d2396e435983353fadf1e674779e07e00a9a333d8e8164315d5372c5ad7fd6187041b455782e19e2df0e81daa6e99cbe9c655167814f043f6c7714b16ac1a8de6879ac9253e716767d236e87432b8dc6ed33a531d53c81f3cce80ed8b98d1b0383885de331d4b66350dbb661958b6362c4ad3584d07265b4444f6820e10bb6ef8917cf305c1d801120db6252e632a5f9ea7a0b46bc1937e99d5428732c65010b42cd0b621aebfce9b5ce7a417c48dbf228432f61df5880fc9f9e58b8e0c084bd7553185fb466b351d65a0415a1f48db744b0a7bb8258c75412d6ffd74647c86eec50fe1172b52cb24d270ab89a5e44af06687d3eec419459bea326b7a61f54876d6dc65f9b01ef75e0de9311b2af87423814b9d1673a70736baed4424873b06ec1527730797185005827a808300fdfd8a05b615b396be10ae09f115f7369658db0a6196e522e75bd7ca950855ba5d3d908e67fc6abfd7186e61de5f67129fa4b0111b5006f5f4712160d93707d9aebad365d1af90518a84f45d059f088dcf70f7e3d51ce182d8469ecfa79b1dc15afbdf2663bdc8fe30dcdc561743301aae543edcff8c094c0b329c8190b31c03fa86f06ace957918728692d783fa824ba4a4e1772afbe2d3f5cba701250d673405d2c38d52c52522c818947bcc0373835b198c4cc80b029d20884ac8c50893c3f565d528a0cb51bf8a197d9d601c987429f89bb85727ed1a33def4630143362641c681a72926834160ff9ac6d0a44570a9e89c6468d106dd7866304a5a3ba2ed936b75936c553e5ac5319882ae192f1b53500abb7da4e45996848b0930608e8c32cb0d67dae5f76e3f65d35b590999d6aed56337f6021a00f6d0610a44303d84d87bd5bf053722ee27f2f7ab51f43a2514cf32646286fc8611c05ed7e6495459cce45ae37be7556d276f620d394764a93dc3f4cb6382203b8fdad0ec970a579db89b098f9f75136da6319f0b6f91cdb5825a36d759a209a3c99673d2e701aba304165e1de04ec1623cf02af06551c9ec7ae85502b5653d514779940546bde51c37cce5190ef303ed44218286db15edb09ff4ebe8172a1fb6920ade0e569d886bdc552b0b4c004f51642c3229114cada45a0677f1ef8f456621a09e58673f0a046a159c5f57d4f8511596b641a8648e2a41a365bacef332c28ef1717e18f0ee9859a4b59f830fb34ec0e78b7b110c03c4ef3251ad06046c6e2263d3e9ec81aa7a337913468e0ef4bd0e952e3feb81a316ab69b833452146cb948e5216523fc23c800911eeb961311e47362b0a8883e0721e8005f80cd8765d5dc7689dcaa9da51a7eb4df29594fd051330ee6588814069a13bb765cda86fb5d6a583eae64e374c438623ecc318bce3eb2bf4cb5bf8578febe36906e7ffa74797bf2088159b7daecb704057926af55d476deab683577a37472d87561c6c9195396aeaffe92021dbb8100fada41a3ab3a09d1cb18f2d3d125b609ecdbb7dc321043f3facc16aa865820c0e697894f1899f302746eff8248381231bf84591b07db0a2ab293ed995deb1caa9058079ce619bad76e11636b50d60eb8b406b46edfda74b99ffd20b5ea9efb28c2c4c1705be1e8ba80ab2675332733079406d0be0435080989b0b6e8749747a14283c1b5c11a041274e1518a37520884262fb6f1bc154e823854b71845fe877dd93e0f515eeb9747105dea91a680169834266df150a2cf8c74922c2fa3fc44234f9db12e7b7d28c11dc7fc71c6d8e3ab8496fda40803129004121c14d7b905fd6c47b1325ff83fe762c68c14e083f926e0256ff42b61a0f4b17b8faf295c5272f8e5164754836523a903a4613ba8e06f0e7bcac803e3ff2243758de8e00db3eaba1ee954a04620dcb8264b4021701ef0d6411607d6b2b98082aa1fa746f6b1cd7b9b31408c6afb7b58d68a99d8033d10021f5b9bedf5567835bf4cd4a13cd3840303f6f560177b6651bb6854a988c53658bca26b90d55c71265f1d573a0aa2751aff415a64742a066b7eed5adc273ccca2c1f25f067a55d31b3098185986a50988371957e0aa8fc36ec72191b90a2c39a6d5545f990bc805dddac70046d864a8145286d41be03206213d0de288561ce52da1cf538fb03e713406b2f5482967bb88f990b95e3f9c354d89b83590369538fecd6b2331933e7ee75c60e0a8a137a8aad340eef1ef54baba532a731ad01e9ae30030b8c7d95094c083d9aaaf675bd943899d5c1c17e2fb30426c826e4c3f73a2e227f899adfc1b85242539a2a45bb41ac2afe927e0cf6277fe854cd4d3802b041c57ccee35cb7bffe64d77cc7fc0a3f9277f7e5971a25556307db8948d6a2ad156c91c1099441df672584b7421100da65f1404fbf3e33e97805dadf5a184d8d13783d14502f067326f4e9ce1b1d65aea137761558d1b8400952c154037569ecb688fd1d69855c27a8637545c5897f18debae7faf68d18f5a18f2d7be7969e28991f5060b82fd97975f1c5a2d3edd3c578ec34451ab8dc76cb0b7dbb48d440dd159bb572be9704c52a104969c8a2fa210a5bd9a827fd794000684096d9b70886c68ebab80f4344b71f4f8f0f165168b7fd7a5688c0c385edcc1604930cc73ba22678cec50ccd3fabc02ff5073f6195f6dcd8296b579378dc98a54834447d70abafea701e498d5c3fd70219e6b66c087a22f5c0b46ef5d898f09679ff23523e2fed443d28481c00dfae966c221dc9369e6a43cb1869530baf6e5a18582bee0a9b492684777af1e3f7c13d7a4dd811b6e01d4296fbf943a89c6c70a1d3c0995c6a5df1e48074976c34b967b2de77cdffeba682b2d3713035cc656ab50673fcaa399646ebd7a7751002f1b5b4386f66782da084ad3383b119cbf3b8b044d8708a758c95f8e1963365ef04a7dcf04173c602a5b8f4a0833eeb27a1db222340ad53aa9b5faa32c32ad4555caebbaa706e5026f0a0178ef242204bca5299365f0bcc455d046e4fb0f3e1d2844adeab8eceace74bca846373633fc507bf73d286042ad25c34b3acd20724e2f5fc9497ef0d42e001a8d9c2690ab01fd46240ac582f15ede36118bec8dd04033c449be433b2a89daccb763065b127a8aaeb9e1837f503d4bd0a1c19e7fe15cfb1a34304df47447cb792e811dbeeed1c05dbda9ab7fe7b3333a02c22c1e2b08510a9389e6443bcf9bc9fbe0b4e2c96d67f8384c85a93f295d1c3c78de9138adfb3c6db05453058b1266256612ef2ab6472a33b15926df05921c58c9fb0190b4c257ca8ddf485de2f7f5b4fd810c9a142798b4c06f1e4fb09ae55d9fcd95b9836e04b308d14cc83c1421b18c4761a0efd0edc6610eb818933d1d53e19a763d84c7ea2e097086d0012f8f23fbad17c4af0bcf6e7c801cc115436d4277abcba41e94b24678061ffc9a11ea1232fb568ebc9ee7b6f90b73d29d737c334848bd74b89f03003dd93ed46d82d887187945877f51dca5c0f8e5d49596f32d3eb87437bcae866640310ce1e34a0188976f0d365eee5643ba8f994e6474793940451774918ae27f6a58b1aa65300f209624d523c23bff99cd17b8c872d5b75e3735ceb49ffbc053a19554b859fda754fee1c6d714027caee2da69ca278154a409d1c37e4ec9c8ebce2f1d912879732eb5ee08d9ba09788be21ed5ddeb3ff9139f611b5a06bba14eda6f35bf3b6c1bb5a493c2b11e199936b32c238826d94eb4e12d01d02f9af484ab9dc4caf99e47f1b3181de8a6f987b93f4c7c544015fa8eb77c9b69312e68962b01f138c9d79eebcbc44005bc73eb1c6cc508c8a1bca6a90a9811ac743fa68b40e2e59315dec8aad2e05390c74d6d6524e1ee6cb196f90ec0c78c226195556bd48ac862447c6e36b2b480122f50b49e4ee657c8d96a9cc4c35234515ef71e3fce3fc12ebe7938985188ed125b4469ced21d6a657f0236d3f98130c3d42fa90e164af87eea9dcdd799a4c218b5f133fe98ce50ca0d2470444c9ba9002c039de094f396da32afd6fb704f28aca41ebb358741307fe999f21ea3eac68ecc3ca3bd3081c3cafd79fa0dc0d347579095a97b89bd330d7d286369e5b4b0f71ea262aed23ea6d7b4c1e214707646a0e11ca4d8858c81fb2f9b6c2efc428ec388fc83ba62706888bd50351868814d10007c545564f441d169b9b474cfdc89787414adeac860306681ee9c22903c862d537d62f90c3e9c189249e44346c9c9a049b08945ec5627f86862bf38d0ee178243e676cd66b1b9571114a3a3495375c26f99bed3b69975c6db76456510e02894398137d75a97c11650e29a9dc0c0b5674e97f59c0f73415840f0d7ae385be2ed9b144e21d136dbddb67a70389359b3164e71d6a9dd2ab33700991c1d30a56c14d26862b3b1d83035aba6ce7dab669457d7f108010a07f5ea8439bdb9e006ef9147451c93e4c3e7a5972c5c72ee2f83b251dd34ac7c522cf93398618a30c893ed617224cb503f29b6e3d5c12145fba6b024fe01b31d5383ed747db19909327faf87b92163df961eeef569a692981425d8b81c181dd352204cb1b254ed518bdc5f23e0bc61780eedd836b0b2ccd0c029b375ff20f288962ba151fdf38ef21cd1859cb09ccf02f1bff90e728ed7d348dac7c46ec23a2368cd71bc273685d22d87aa5af169b46785bbdbe676e1bb8bf45f9f0b32a6fe8c102d4659f8c4d9db052655c56bcd198e130a0524855480df0be1c0b3137346abd675a792374692f3eed50f45e56e055fe2d3ff32678f2fb6d787b425d9d2186801ca1dceae63b9042ebc5f4229f480c23c3f5276e439d0fa9e7a02c84c6a7eabdb562f7623c455f50e04cd24fd08939f6776855ac3fa6992a9e1320334e47f5caa4165f05f116eaed6d5e1532a5244deac9f2044ce7c046640e5cc4058e72363b7b347a52af10d17ce56243778799d6753e2ab9ecb64a85eaaae59e6811c73a84ad35efd4b0c38183eb01d38ae26a622a468afcf835d5e623163615d772a7613abc931618c0bfa996d0a55bf960066f8e759b43fbe0d2d5a1b2c6a0c02bb358d21be4837b3965882a48d5232f6b0e5cf63dd4056441c1d2eb132fe5dea74b6fcf5da2ce889545cbb2b619efb97dd2b91611add7cdc3336c63b9da4b7f6ff034a704464ddd6ee0d2c4aadc18041304124293b121950fa810a0195e582f004245dd725787d620b73be4999412bbb502e7203666795661805e34a4147279e2a1f1f75a4f12ff45497576f4fa863cfe7fa6137c4 +MD = b4e49d08be92b07880b5f9496ef0974a09f44d57ae3dd5ba0dde1b498f09eb219bbf3019dfb28e5a4d79d12c299462cefa246cf4a13fbdc81f719972065d3ac1 + +Len = 45376 +Msg = 3778e7b9d4fd81acf9d9515009f176dfab5c7a4273741fc8c02d5b1ee0a6a17c7bfe621c2e69d4f07683f294d0e4c4821ef4e0854d003170358ef70fc0ee0f5e4f1275f959a007d455448b2cdb4bf4bd066ee1361ceb67ea71db10c888bf238d7c5c26389ec9a2be60c62600724f8efa2a71853d295d499f3cbbaf3180406671ca837fc1450c2d185daecaf8dc181ba053a6d582bc7d60f75dd6da32f09a5f720030887c9692314915a780fc63cd231749b4d8ed1d73335b9ed59cb31ff497f9e80a4852d98336b950574ff44d962cc6d445976793684a31c560fa9c5677946c48bac7295507c2d0d6663fc8e39cc017bcfe18d667842ee29b1efed5dd4be035e9e70deb53445ff66e7d58606d076671c8896524e2ee66d7e8b8af46fc9703ba933a237e1b659493e244a3a433ffa73cc28e863749cf7a7774d515d8fb8383650d5a10ccf590e90ff862277d7cab09e170b481f9e74ef329061e39712139ea9d21f1dcbb29eee7d27980ecd1923316c69aa4605003945857683b22fab7debfc995a49035fea615442c45fb8abbc056540a062b26e4c8316860d3d85c059d8b53321d3221bde0fccedb5a5b8e407a50f38781e862d31307c4b78e647d539cd5a2c004cd66afc622d64c6614c769888c0cd8bda1ec189d60d33516cd47e903251e070066ee197d11c648122f1b7d129205c6635dacfb8dc7fca1101ba10efb032fceba07a0463051049706b374c642eb48191b258ac40bc1aac42757720cacf83ddfdab7647d0568fa01e9a8b98a3e1e3b998c006eba41d842670188a4293d8bb000077f220524e00e4e6317d2122eb3480d5ff6402655932d5046b61eaed645f0fae965c227b641aa451e07a6a63b32d63f3b0fe8506f7ad3489fe9c8e3a1ad659529742d2be31135b0bf801f8d8d244cf5c9544e80b8169c16b42a8a0fc34b78986fb14959d2da1755f18a24114b1114f8b1cc5afe57eef1842c804c7b67a78fcd6226fff8ac23b7fc5a2e9e789d7f95109a7ff511758b3858aff4f670b34a14faabda385298757f6fa273730bacf837042c7605033a73db5be78d7034cfbb6de8f2d5daadbf57d67572628c12a003629e10b8731acd3040557953a20fe482045fde20ce52495124d57201d1d5a1297ea4ee4d289f574ad10e104e754b1a283f2717c2fd895debd258495a2a9bd5f0f3df6d3e0bd9ff47f44d5287cf2f9834880746c34e9a23ae46c69f7580ae67e32a1736920312eeb113dce7059a02872e46c8132ca8ccc421e9e71e58b9547d878914f151fa904b0f958178d0bc0d0e9ee0322504f56868cd23826c0dbfd64066799d4584d79d3feae205adf11f98560dc00d25531cb636385d61319c787cd707637cda32827ff2c9622f2d6fa9ea87034d21ba2105fe57ecfd4a160bce8d6af2ad775963e27e8b347dc9a152444dc806ef368d779888f3716d06c264a85323b0c1576a1fe1e433b39b99b0a3d70741a00e13455cbd9b314d135ddfafed1428c805e3b46f66f711cf2469036949611b5812818bd95c81390a591612f28719a1c2e3e5e05a5a014e0f80ff41ac84a37eb6644807f55d80342fa6fb05375daab727c22395e9a34811fc172313746f1591436a3060b8a8e14a4561d26085570e917d09677c232a15831c519f21caf2ff7d868d013f2a25eca2d3f464cae55d8f594f22773d10d7afcbfa973a12b5f5a8690835824b54bde86561c679ec5d57733422741b7fb89360131b4fbb8f3e60597e4fcb7c2d3d561fba783fd96ef82d034c80671dea24446e8009e3eb3f6c1b5ae4e5b5b78cedd9d7ca9fc74bf7bbc887c9f06344275bd3223c4bb992cb470ff3c2525dfb116d2f59bc5ec6982fb00e47d3fbd057de6529c46f693b78dad7226c401c291064c43eedb93da488c0dee88a9027161fb64b2c9c40ebcf6415253d0c88cd83bd2cfaf0dae9c5c9e34f4d3e9a2bff9d645814c6f1d85adf1f2338491cbfecd2cb11182c6a737d9e718706f9bdca08ceed6cc8de0d5f3ed272ae182ce410027e03bd25d9e380ed89fa0d10ff3c96cc0f8499705c36fc1d10225bced0aca196ef2ad529e18e379ef3458c733a5fb6d2c9ef871227b5d78101fad4611bbc9a308c0b042d2bb3c117451baa38916d52a265f7dfb929d219f10dc1c1d9f75b2459bf6df0379f9a45e0e5440f66ebb094c54964496a49d4eaf69c3ec93f4bd36797f0174152258aec823d886405326ea2c2dffe6c2f6f057117163a959aff6a8a7585d2a083a5cdde84b3af511e4df0a4218e8df10f83abd7dce37dcdf2fa69b578e766b5d407a9426eb1807db7247ec36bbdd87f136e0f43cd6bcf184f2618122a7e9b274c336740c99ec491db9f5f2627d6a8bf411679de7316f81eba6abec612b2399ef3124e021ce243348fa6ddf7dd40c559a36430d0554dbf883aaea4fcb8ec07c4d28aa8adefe5c50fdd213e5b1563f7f441407e40fb76eefed8da13daa592ce3ef084bb6ccb0e12caccf8cb7c58a706382193a956eefb4b279bd75188600e56b756e9d16536c7f10c6413cc822d74b9cf4d43fa3cb5429fac8b8ba62f71c667d50a9f30c0ba782c7dae5a89951d32d95ecd3ab917d8b5b134b0df5cf76124c940169020a6df8789c6b1b649dbaf492e90a75e2e12e0ba4b6813bbba07b78e43a181a2eb3f2c5dd18f760d567f6b21800ae599a15254bb33f0bb080788fb6e9fa054bfd8b22962cb7f0349f6a7d92297778fd25902bc1f3273b0ac8ca1b62ba3e496ce2e285efe413f6250727c82b53b7dabf19f48a14e109afb91917b6f2d18164fb736c8549af9779b0c1225ed4033c443ddbb4c89b0950ca39d5d3daedcc5dd886238bb929cbdceb4631dcaa22d48f55e80f537ffad8971b0ba3a10fba074e248b77b28a06e53ecb73fdd952ae242b805c1943188adb3732bcf6e1cdfe1ebcd979e49380776837aab8798ac0cc9e9b43f88e261ae18dcb81bc44288e107f3457dffe8124e1e172099239737d048049214bd25f0f856cce88881fe7d8a7a54f203c2a1e0fdcdd58588fa225fffc95df98c49a606eecf4bac7aedea2260a2d67d30cfbcc79dea875280f6804b20b3ba92b012adc919eb21acfaf24ea0ede8418e0d0e81f1b5dff32e8afefb25bb6ee405870182640013158f0f77711eb9b25ccca0673886cd13e2c2acfbd9125862a3f919fe6cfd2cadf1fdc2659cc54a69f0e0f3c328ad6dee1bb6f0d3633c80f7be176ff2b4bd23237ba01aa217bd2a76c5710e089a8f1ed868b15e6fe1cbba95ff0690c3a3cb6fdb7c1d1f172a2de13fa328f720d65467398f5bfdb79be78fa42c6e845b7f50973fbb1fd9ac1d3df52e52adb8f12423d179595dd593d8b6868c0ef954a0907324b5024c514a3717f0aa99a75965cc24e3008e5feeece26327b56d4d077c205d9da7174c8ed7c1e05a1a42bfe06315812537f60851a8ff14fa871112a5d675358a7cc3c8983c03c3b9e8139c57d2495f1f84580105b178f2886bc1f13795d824749cce68786245e6977bd5e7c59caee95a507ef112ed952458c74791c4a39152e26f00d33530cf717b3b4f4733a88c445d042e8181469dd2f204699c54e7e8e65c5d21b2d78de88dee904b65a8de2d9bb006315959a3da26df8bf0b7f04925086acef8ac6763da6277e28fe82c26d814dcc04f20a2eb9246a6c3a38c9eb18fe2952a4e6aeb99eb179e99e579c768d4d768984f7f64080e5acf134cc368076f9964d9eb936e1764d4eb1d13c0828c6a0ddcf8fb1da8e1968be3e5b10456330d58604397d0f5c58dc3e7d7e164647ae2dec14719a3755e710069a09cf66f1eb1450fd01ac98a8bad09192d190e761b84719ded72b8d467e9e3e9abd341bbaea388fbe93b2534510dd109888165bf5597effb52ce05cce44459eb701e8e42cc2a4aacf4c38dfcfff6414051e3124711657f60def53165bdcb8cf85647850d6190b3a95b7ba8e87dae8145ee05bc1638344a56f9aee5a7dbc6a497c514cd23531bea7a84281f03b37dbaa0c9af0c35b04d78640bc2c99b247dc851254f0f8c8c1418a7d995995289ad14da48aba9ab63f830137cfa8448813721addfbef251f2c364b8c089bfdfe885b67ad5c03d80377d9ae9b41cbfb7da3ed733592a1f796f6ff736a3cb39b1b64cc908d7b56dbc1623df701bf021ee18d8116bfc5a3d0cea61f8a9e924aed0dd4b740db653e368e7332730194053f7214ef7de3018f5134ae29097fa5cc64543cae010d962478c92f599b017d2fcdadfe8b3135e2aef947938e78a3e3b2a17d2103499aaaa402efeb15e787b6fc59d39ed6a92ec59d29a5eab24091d89824e7067993090f2775815af9d10afdf564a16a747e4446d462ae185709dff0d75f30715375ef3049411be367f0119ea56e8605c6f90cc2ef54eea0cf2cc4c90ac0c7e6335aa3ba63e62e1902cd123586e80fe550d1eee64840d618ad3216cdacfa4bd99bc9dd1a11d516703cb0b34f04519d8da471711d69e702e453a21c7b385c0acfff3bd1bbcdae936d88534b37b84bbd63245029c4de97d3a865056c5e3766a33dd039582c11d2f375781d60ac2d26ee0a73067f9910d3e6b943c47cf314ba93a7a13aa6f768d2d52c7e878a08ad83bde7f30ce8f6ab3bbaab9277c4b66ac86a91f4c8648a5d3ea7072e1a3dd9e3d29b8036cc0c6a083fbe03b397ea34a40076814d6b07614976e779e95de29c5aa41567b0dc406fa2406f36399d43da5b0375fa1d8b0628c80c251942bb1ecc6c78aa02f3a63b7413fe4cd797006833fa31b770e7a0f73d436ede49ccca48e6a3b0c7f661c24413d7b9e54c5e59ddbe0c2bd96a2e65410b662f71afda0407779afcfd96adb8f0db6813a728e2120af4fb524a5a64107a3f8ace9d901ce0c10bbcadc98819e2c8174f8c30e1e4c17665523588d62b6b09363bbca0bee7f91bff7353aa2f48d84063e893e0fbb8d0a68bab562341e6ad848bf38a2970dda55edf797f1e10bd21e05dedcb55fae0c821d461249842288062ad4ca7965a608e20381990a3b0d9282e41a982fe53ff207edc0e21564b536c3a1691a585d0130c0675ee38c9a44f8390dbb65b589b5671f40f2cfcebb219c961548cf4667657b7583561c7fe5f629cae689ed4e335a92547ea27f7d73ace407ee37924c6b1c118bbe30eceb046c50bdd94bd502cb749c2d0f999a2a739f339e94ff0b71516c198a7fb6fdd9deee939b4ccbc8d9394cac325b9fc9dba342b4e46f68e1bd019ebbf830aef4505dc31aeba9cf6cdc652aebeccb7cb49aebdc8c60e739bd3863f9215f38e17c5968350e3557206912385581e2c5f7026e33b7e69b653c46eb60c77046ff173bfbe78a9702be8668849817959cb2d95b606319e81b4f3725ddde4ed336ed17d93ec30bdcd846c811386eb64fa3fbea6976634bba6a0ff30116c6d870b66aabff2ae200064257b00b38a37bd87e06f2d1ba1b9585100b38839f01ab6f4ede9955c82db13cc55904ff8c1dae58b53db93e34743e7193adcd537f760ff986b1aa821f8c65a7ebb48d943ac697f6d1070656eb5490a57d5c7c18be0c4e36e74ba62f37e8666f3bd013734c857edb59cba3c1e7a5d14a557f0b7a65adaf4df81455031927fabb3d165e43c941aa2fd5f35628304d4a87a48043237b40796641757fa7cc336ab37aec35adbae46419cee6e833cf364385f1c6ecb808acf5ab4bd4ebc258f2fe8179bb61592655f4c1cb0c2189cb46036bc4b9cee415db6b429d9a62fdc64efd4ac2ecabee157ca25054cdc8d32c67d462a5c1b04da8b42253c030ac001d2eb139dee5d8159041b6eef191a7b8fa80fc921d465c9bcc1f64073afc9172657960735410b3759d8c77c22bc084e13e78c422b3b09877860477859568d9fba7195323acd403b747452ef589c228f50039743bf0672d89e04ba4f658db4b44eaf5d26f6f988f82935423ae94ff5b9d46aa54045bd3e378e1dd33820cbdb0f536f5247f24c6207f8ba19e16d2e0e4811ab3aca67c5d81ec91a06c503875d0b69301937c53c57e553615e755cdcb8d48833cc348db6bd18ff97d9789646d732d0a01658e85fd71ad9c9645920d291c9b8a2de21301679906205cfb54190c6105a2dde3dc40d6c12fc60d02f618635a21356e512f75b7a2fc0f26e1daddba61e4647d558f0fb83582bb6364a878df0f838ee858c3bfc5b417ccc191433bdf3d7356ca03ce770b974f837eb4d0b50703689d813ff768f797ff611753b6b8e3bb5982aa34c20237ad3d274839985542fd7969224df4f7b7125dd50f6f5bde2fa43ef006329337a440f5aea83d26e2f7c75efab4cbe2f46ceed931902c5b3429bfcca7c743689eba171e208506a2e49027be581d01e9e77df31a7c84d4de423ad6a9afd3b069c0e2fc6186c9dd35e174e6418c47372f5954e9c9bed2ad0b91caaf7d1014c1c02482b566e75b0a07630bcc909d18b5dfd258988d0062000ba84214f1d271bd9253040bd44b23d53ff1bda053937ac21fd8f1c80f491c14060f08cbacfed1ee0ad3cec654ba09860514f22c317654a817f58740f7a1e833234f869c579c1e9a4d2e4aae8d3df56483521236d34f8dadf1b082c9ec10aea38aef23519ab23f0a86ebde8a28dbcfb8de368587e1250f1ad2914b2b969f56ad647746b01c4a1c86db93f424cc9d7fca4145b3e70201c137e421482e9e55c899d9705983866b9d5574adf3422289ede2d209051ddeea8b4b4fe7e299ac3becaf1061c3907f1eaac17ac143add1aa0248b909e1f31ee855a03b6c81366757aa3732d2eca0b06a2b1015584c2d8205a4431fcdb02f6a03077ccf368ecb78b3eb78664b3c7ac157088b6cf9758adda4bc1d2cdedb9a69448a2833cf6f21865795bbd5551be859ed297aa82c288b898e331c07c3c8fcc4b2c4ec90bf8e003a499248a677f1b020357625f079cdf92fcbef89d904e11d23569e0f0e8c52303c93c867023a269bc036d8d36d69ca9c7664daacc92a8dc42c3600dbd4c02278333d216011252271def835ce4783883c0760dbcc00bc33bb8a5cd3960be268a1c84d847afac04dfa2584775ca54f6fa189c7d932a5423dc8e3d0fd89da7b8b74a2cdd8fee69310fd3ae184c6af56e892a5a1be27e14412b4e09868fc6a12f3b66ac40734fc27d144c81746548f1f59d903f771f1dc4b1a4628befa36e22f0832c73bf8646503f995752fa34d6a332b3c4ad0dad8bddebd48644a9d816b5b31af623993d648aff1b9e93085fb6b18c7842335e126ad8663803b4238232d1cd9f4e2c6c0d2ceb42078cd22d3a4b7589379352d6e21d3ca74b856b0b3654ffd65caf0ea679f1f99ed99c90e7591797bf9e229c06913583258b65c9bf68ffa833ef934ae708662e6c2e684fb520ad7076088a6f6ba4263467743f60ce8e95538cc495519c3cfc0240625a7f15456f986303455d849f71d8f3a26cc0a73bb89a37782fc3449c260da201fd9f862bf087fd0acdd6dfe79ad940729859d7e4cbd4ca86bd006e8a66b907a9cc319648b2c7baab8e8bec2123cdd4712c9cdf2e51abcc5cd7a9789c508ce7b640d5b43038c0125221bd17b08f2f363aa42a3b5cec87a3870a1ef1565601d8b3e5ec7e56f5199a9b120b013a4f65dc1b99626b04fee0e671cee1772cf9a0412f35e633317a2cb9e2c9f63702e71a3cb076d5fcbb0b401bc9908168a4bdf0c784cb6391542a8206d5c3ff07cee8a4ee85b7054ef3843da9dae99f4432057bb260e0e51743a8b1f7c09a9611d2b6ae57f7e460f0230c321742546b98798299c82040db13645725134fa85be3d2f38f0fa399898ede05c5fa8c4b96e3df97e34f5f55c6345ac853cfdf97a0dc3401df8c0520ef59990341aa1549a1b4d8c7d0de8a8a36f87b7ee6a40cc305897a7418439914f30ed8876ddc79c90c69e994faec1e689dbe6add263633c50a6a1accb1ccdc00451d00f482d826644791a681b9fea77b6b149d85cadd0118200c996e448e4a5d45e2c6fd2943a785e3ba8400a69c9 +MD = 19cf6c6dc28eb06cd9fc0a58c87c8af1aa605ae7fda192ec6ea3c12ec3b6dd529d22c45ee32a00597ef615af5a8e790d3902818d1bc3d33341e648b349c5377e + +Len = 46168 +Msg = 2214992c8008d66a2735292420127ca9527995bb4857f6e234a8010734a3603dd531a4e2d6a42ce72ea6496c4f6f9f90ad3ccf877afc53edb44ca95962a5b3361bd45ecec7ab82a8aaf709149eb254049f79da1d8d40120e2e44942173417b0ffce50d19dd859e54a310b145924161ad3118ffa6098afdefa9780a85edde7f73804dfaeaa09b489421d98926b5858e356a01864a7444da382dd055ad5ae38808b0f26d6a97534a102d3ad8e08ee6a541531cb73058d57291c334bcc241ba5e7693bdadc14a166b6fce1be89aa5cd6c7cf252d9813ca58da0718c86ec2bcac96631960416414d725a0d64ff7d83a0ad8b51893664a91cf31041c0fc529f7b91809366b891055e2878f0fd66b1afc82e1978aa140226a26b873bb8661d25357d6bc013125c1db3557282ce655db1aeb8cc6d9ebc833b9fbead665c0c74456056d0c0875a9c11b2c1efc8bf43a912b9124c3a4b760e707bb42cca9535808864e4569ca8d87c6ac53398ccb94abe59500642e79b8acb4e9e15a96f492a6975aaefa65b60d422af53741595a2c0c40edd5a567a753fe35c70a9cf5e61345695983f67059695b668c44d0d2b64eee2bac7d72ffdc0de7e225a38439ec6996f6e979b42a33264611d7f832897e51c41e47645767766afc329c289b0375ea1de8a10cddf3c1b894a57eee10fe00f920914526cd2f14efadbf81165bc321396c871699be5d83b4c9b9d782e6a0ec89761d2c313ec726007ee18b0940f96ccbe58a90ccefd7f79f479788531e02afa7471a731046b02841d230f05de526b7163b3bc5f2ece3abdcb0e6f7db31a3a8c72621a0405f8a9a286a2677a0b2db9e9cb0432cc820110ef17820ac97cc04966d75cb4a4df3b70a28894a776e247891e3e7191b9943d0af821fdd1cf54795c70eb86fb795adb5e6c6c2158612c49e2f7062263902a2b2fbe31a64df803ed7d92f80979ec3d817ce97a7001a2b1dacd5c6a402fb80d72872a8fa505ac50c5b3b4440db66352d4d1fff9aa2aa339a35135b1f37e9905bb1a248223815405a907be18b939475f7d659733f65ccb8c4c766a2462d79bd9aef19553484a56e8407f98bc358a012d23409a6e7d1d82717c44e40bb6c22653f213634b3be71cc233262a78aa31f7846f6beef366f830b2dbc489ae16c7a239308878b025e00c5a29015d9440b6932b09ed7d0ada723d1512fd4254ab6f77540f59baca2dbe907acb1a17571ea23cec98ce2dfa01151263c9f7f8469d410d6c388d13e37c080fe8c178410b6d7d598dc416e80d02681563a7bb91cd13c6cd49522c6a413946f16db223c4f654cd54d737ce958906f3afdf5550f72f35841db2063fa62d8d019dd147248660fc1c949296fe1cb7343f489d7bbe10b42c056670fcccb1efa0bf7ddc278271938cf181868cac65dfb5d34967c00ec6a620d1114cdbde72cf990bf856fa456cd62dd5837abfe25749b0371803cc47ff4b386e840b4c7ad115a06a76066a765e70074f0238d7a7dc3c4ef41f394871a5ed9d662978f6aab608df665fb51d1b31aa41e766867d04db02b791c5d3dc959fd27741675a827509f17b861c2bbb3fcccc0425172d59ff3de1129671972fbad542ed85a57897e4b2189f521330ede7171e77927ef512a3e822878c8d4feae82f8727bc4d9bdefd9ac57153ad8c5b1dfae7c3b501a550f5c50c40fa80c1b42795e84e6dc68bfecaa74019105206ace85d710f160907bdffbce96268b2b63680efac8a217810a053c2d0c0126b6888512802843effe1ffc8b6ff185e8bf518fa251c025fcbf26c9fd4bf8edf5e78995e43e34ab449fcbe58999888657348019e1f80dfaf27f809b6c353aa0195ff8419965c88005120a3b84ffada04d2759973c6204899f4ec20a079d53d0076c4f48a0ab466ab7d1455efbe6d37c410458981004366a69a945865dc8c6e626b918fb885350d3c37a27d05d03bc72c958079d0b632615d81b85a0ed6c266b1db2cfdabf025a53be690c3036baab1c4c9ee1069d13660471122cea34ebd4c742e5ee76b34cd5531f1a7cef079041e141556f75337958beab3995a2a2bc74934cbeff501377546a5c2af47d4e18f35a5df82d696d2970bd0cde4a9ad572685781ca7ce74e365a01fc070d5b78b941ffe9038543b88860881c9cc6133b92227c8884e1bcc1fe48a2753b221a25f5a03a79141194843a8a9840d192bc5390558ac77ab8311d23b2c46e33cd39c452b0a294965cec8ea4717600393ae6abf153fad5187af4ce6b3af03d8d792ae254d5b0b1f6b1bc065a97aa01101932a339c05527faa468542923be79b4b06dfe70920d57d1da73a9c16f9c9a12d810d7de0d12467dcf1c2ce20f7799260d83773a77e10ca411b3d77d8bc651add211c862accaa72e5580d72a70c4126ddb0beb16f9f436da01ed2de36ecfbe4da1b5e34c11d6c088c226d166da2c7bf8c357d8aa9abf6d0025900b977b11467ec16dc70efeef2929af8eba2bbdf94c633107be49cc9b15a2f73cff0e432370adaba9c23fa64c576d8818dfed9ee2fa19be9c0a99122fd73ee15476bc598ec386eb0a8332ba96c1e0b665d130ff520ba8c6655bfd0de618308e77112620abc566ea0088acae56ff0fe4e63c7a51df078ce324110a12466f2469054ce02b12dcda331c20e1f3f575678e2a603e28d264228f38c824c1c92296eb9f885eeb5c905d50ce0a971e0aab740ca2eb0106e4a8263523fff18f0708e480966206f3d1866ccd969420af0f37b1fad03b475e7e49f47f6616e4fc5858a9e29a588cb71a1594f3f66c03096b709dd332ef959217d019c88fab637c65b8636c0bda34a7aec4428e6de0d2cfa80cb4205b66506439c102aaf13c1181879e8d977b75b368081901d77d9104645d52815cba3e2c376ca34b914b2763ce667194ff69a97d5aae9a6f79a60b1c59f3f88202cfd57d7e28ed5105ee2bdea56ae8260e46e3f7121abec7df679d8f32f455329d1cdab8bae705bf836a87e6990d58ad4ea3c3a500d4fcc79342f6d161e6ff2f9621bc82703f82e39440ea102bd649872af0b72ba955dadb1fb8758779345cb5886ed95f308afb69b2f1b0ffd05e31603dce3cef9e15ef7eff48b815eb750470ee54dfa36e61c5be6a0d7aea28fdb6b4f18cc36541ada11f9c742d112b217cee22842df3ac4c886e13e4b673884d4ff1e0ccf9212685765971bb42eddab22c99df7d42c45cb399d55b27e23090b543a385ff3ca7cf25f5a9398ea8105cafa9e07f90cc9a022f90a0aa378c85b4de58465ba41c7dae17958b4e7ebb3d33926b7e8d7f19f93f39033c8ba423f77720e456cc5bf6f745c2ec7c1b0bfaa8f1d2e7a08398c9465638482579fe371a5a158e5162777ab918c0410839a6f5081a19b512fc5e391609c5f5d7ef963452d0249cc2b8971647a998599c24e028cf1eaf4a32426017fcac6a82e0670cba256be6b627392b48078aa39cb457480452623c1d8b002eb44ec08e85cb8ad227269fd4610b5eb48e9d1e7a70ed6b3f26569728b589b02abca0e8ba64f5a58709caee6603cbb3b3585cd7957cb3bb35fd302ffd88aadcd47f778776a6fb419be086da243504b2b833eb688d1683d1dcf7739f333d8ad0ccab571f3bd249096139eee5877b22e633bfad23b9e4fa4994a39557621a9656639eb422725d6b47a7746783182cc2c8a65a36bbb45e638ced901a0af2c669b849e81343c2cede96bf2e85555ee040c480720c7304e97c16583b760c7db75180d005e8d5a5ad1f7118d6ccbeb43c498472b592ec142c906055143dee6b63fa4aa686c95a836eaa6164fba231c0773962cd836ea96a7e3d057498d6232462c0603dd92964f48a1be1f41baa50fc478cfa2179f42d8084fe703767e34d612a508bf67b8d677185c06d7695598ed013d0b4fef7c7dafea7413b0ddfc9bf8a31070860ec69e462f8447e3d17146dd472911db68b5e442d7ba1c0688f0e1c17fd60702dba536e7148249ee81f7f5081da4abef8a32bfba5689c9af7e434c58306095d9d53be6804fbcd49e7fd0ee950b169f335edc563ef049e350c7db25e53e15e2b30571f63a699cb09bd5e279ad99e7b64eeb99f0f72b6232946ca2b3922f5cb5397130ad3ce989a48e8b17dd785080b8e93952d60d923d7e20747f40858d9fd812235e55af57eb7a1fa756641db7476dab51f051a7aa408f9fe75912e6df4511e723e434ba3c29f8f5338654c557a59d3d3a59a7edfdd42db7cd1a72deaeb6296077ab92861eade7b93691f697b6030f46fc77200812621f102fa9a8958159e824299ab93a88de0e12b95e92bc5ec78c6fa030062071502e5314eefc32e09815dc4198f0ffff2437a9c3d5705bd75bdc602d6e9f5ca307222885d1b6dd53da7a2fc58f7efd0de728255cded79da725c7c0ab1835e52ff0c336893a1dc06388ddc6bf66ac5b398faa308c6111aa588f153723160ee39d72d82628117a00970807483605c2420b84856f5c4664a972ff8d6f9c50727d76f42b9f6a3e15c878c3c05e335408d90c2f818cd37519c27bdff80d1eadabdb40e0824a58a9363e8d21cfb0bd3ac549c3f6662ffad7771ffd961ebcb1180026869da6cff93b258a5e8bfee5dca243b9b942fbffd752c8e57f8cc7225e76b886cd935fd556da29d5736713a69871c852747c09a575cf523f8a29bbe72cb01c229f2a7404756f8c47551ed79afa909d3b7e0a58c8d9375f53a5d5c1b424ae742383caaf0660e394078b19126a09e70a9d5f56b0110d70354958f8a3314c5808b002dbd6801f1c8a3e9dbf8cbdce5e56a09dc6d92818641c4a2bfa2705ae961ff2a3c5b21db804b61314770c3c4fdecb6bc2c49ab402f95e7ea74316d852510211eef00b8235825faf76ab5c8f964daf2756b7bd5ed319420c533b37543e6ffa346bc5a95a9d7dce394ec2425dab954bfbdf0708cd94ab0f1cb74b541f7cda4d83a3aa534bf9df4cda2124874e949ce710e71b44a94d970ed85cd933e1147843271d08d3fd508f1fba7938f30b5b4ccb8ef55d399c04c58766c94f9d430c3326486148ef1aaa758f00dd684d3c088b3e9c9234ae4cc31dc1ee86135aec6ef23c0df8d070471079e6d5d61c5f89a143896244086c61918606991c8f3286429dcf9f690a1d2e88836a60ebbaef98305bf50996423c8477eb9c8e1229edb68e1b25263c5cc0771d7b65caa4abc614bcbbc8b90d48e45d7b31ccf6f04b52265c5686c9fa301fcad4491d3a8957aca34e4b4a9933832c93a841def93f5c2b7eb3353cb02aed04cdb7d5dbd9232668ededf3c5d28f5bdecf03031abe86c43e659ca08e0454fb352bcd07e6cef981c49ba19b7f8ba939c0b8965fc86e4dea54841d7fc3ed00c27a8a1ec8884293ce8655722bc1ed0a839cf7683e2f301d38348341ba2492b7aa9d93b3fe075d7a7677c2698bd32039a338338186982d7c15a8090d3af91c001b64ed9393ac4635e25f8b8da3fd4bbeff5c15ea214b8df5e976be8be58ab2647d9940c66dbf264c790658e75b87972201d244aaf590770d1d674cc2a41e7d6a3802365576882448a233d07d9cb82bec0f6169c9ecaf134e174358ba60fea59ab4687547944e69b0c7b09b594cda30a493d02c50edef8a3f40d28d7cff73517c5992a5a4b15b1d0c4f4362835533cdd3f4e83446df9a046800db900f6bc3a999904a6f75b4f566e5a2b5cd019d0c2b009a712ab3acf6a852c0280c7b8a36d678bf567bc185656fc128cd83dd0eac71b3ed33b59f3b4c9f84e67fa7c9461600a1507f70900cf35e2b49552d1f8f5dc87455f57e1374e31186dca9090085a94e9da98df6ea31e65ca86d1372cd076558cc3a812d163f0525e1086edb283139e9f33448b7d8dc8890c2fcd1fbf1600d4842049d69b184f8031cd495c54a310cf92b57785861f51f23005e556f92819dc15f1b12daeb2b05d4bfa7e86e6c6d6aa5ce7ce4848e64f43ceafb6777b9525deaa9e7a729cc1c74c053e82d7f99cd9d15630a55e166114f04093bd1bb6dbb94ecaad126fe5c408dee5f012d9fd639ec7272699317f1e477a3e4875ae2b6a48ceeea3f5500a47d98876b59b0772d999ee4830066cf37c6b6400445c9959cf58b19f09afed8abbcdcb2ff587eafa5d5fc921f3996b1419d5203efdfe77b2896da94444be72e79e6a298a4665eee46d54ea5cd7bea64165394152fbb7c3d616fc1886eb8d9a917e13260e1eb19dc1982dc44162f2b91becec49e4c4350825069871df64b9bf18c97d4333f4f772225c2ed9881bb21df42f82ac5ccdd2af3fb6a767a656bf7afe0eed03945fa4068737ecac9968894f7a9b70eb339f3d3376c5bd4c8437fb38b1cd06d997b553c55099fbcfeddfe4c80fbf5b7901aec14f7ab25ea2e16f1982c4724f47c69c63392f10b095fdf85102340996e83f830b3dbbeae00d568286e3b69d2ad0998b6ecc733acf9152386aa88818b7bb45a27788aafe05ee5c08cfd5f8bc1e0698f8e309bd568d6483167e056c6b3264cc8392dad86a24b85a7850c41b3dbd5c3d6b4c7b6e129e61f92927b3515f9b773cace98eb49db11dda47b6588ec07d440f69279c15ed673c3cd6d43cf78457550e94e83ed0275f6163fd6cedd3b2d2408768e0e645557c35c6a62ffc9f67fa90cac21b45bb857435800fe10e8aa360e42de124d46cd941e11f2d879ce978f9bce9caff3dc74693fca705cf3504008da17b785ff10ce74ce0aec377784645d93bf3f600a183d93349516563ebe058cd0ae874fec6961e21a70e0e6c29364d1d907209dbfb81bbd68e07a55bbd902aa3730d9d8dcfa8cc3496b564f22a4a0d4b4cdc4ccdc6416cf24d425c2304a3e4b59c43287976b5900a422d7d95e5f1e4c6e39b55727c337b1b0999e0366b8c1557c931cc6e463d08173beeaec406be8234d757aa4697e854c54566d8225cc94b2e9c41efd8d8af82efe6618f08e71063f9aa69b1d693c088658341ba5342ebe48e880c1925889d9ef8c43e84d11187e8a9cf7a028f1a6c948035a2fd65d854701c0ef8bee0e087bad667de26c91095aea9d8e122fc764cf7b9ff0317c667938c3bb38067977aee74ed53b8eb3d6eba249e3937999b41d23057220aafe18b498781f84ba9b5a2424bc1fa5758ba7675c8eb72f5bce8079cbd0c51021c63bdb6f0735fa2ebd80123add8ce41e5dcd2592a161894236f322d1c2dfe81e3b9799c65845c3ea45b21e329b6620118f11cc4b6a29cbb539d5bd3cc50ad129c5f393a4539706769db6f313ddf380d78b390490d0571a3d3fedf515c08cf3cbcc197411e072ec5b2b5437e58a7d2df7b70d7768be32a161b0046f639aae758bb8cfe215e7209d20595693b08c4a4ff97d57cbdb190385a9f4e2d62e3db87ff2f2de85b950e7404d8e82ae7dcaa20d6644dda8f1ca12f19d734fd07f90f23b87e00e07040310fd6a31a231532ccf8fc57368b7b3b9a70bc69513055d7ba3cfd2eb260dffe8e2fd00ac7cc33b9a18fe9e74c09f28ce0afbabc3f51fd0e615635b7bf042b0e8a7689666d90d3cfcc4827aaead0958f282ead463bfc3e0b98e20abf9324b21e9a566b5c780b65e3a1c42df89f79d4c0b5900cadf379b96dc572d49cbb5d35ad4261de4373b67a93d6867586d65020b02d564149d264ff938b8b3bd5b4180619270b8ab1ed0c826ebf0186ac2c1e19dc03f3f3a07538711b3f8da90109efa400acb5d92e40880dc2dfb7e9ff0d1e10b2cdfb8c58388eae73661c9495193eaff23813522f1ab38d4ecd2c07e5f5eab5c2dfcf83c7b8b2082aa39a97088e9f8a4c7d967e2ae8197140ebe088f782fe698addf26275625d2ebf5c9a18d1c68cb39dd1a1b5b815146a67c057b5ba10e3bc893d16b0f7c1ea8280159da2975d80cc54c8d7b13d3e5ec911fef436943c152f3c718ef7a553e4943b4317ccbfb016251fe7aac940d0332dedec68841c711d22130fcd9f3494d5e43f898aefc16ab76e4da29d9669574c094a0d0716c93c6645ab8c751ffc0128e31b4d898432e9df086c8e1280fd5003dbb4f57277111a8afa746bf812822568214d0376328aba0773fb0ebc119336e525cd2a1d2d8a87e5c0fc32e8ff5d7e1e1f433fe3733f57cb3187a8fcd0c1988a67e11f6982abf12129b155aa3ee477b54dac774 +MD = cd200254e5a8cf6e0923e70fc2cf3ce26ccfe07366a1c5e14944959078dfb803cd0d0289132a45bcad2bc290605f33e90184d306f35f0522e3d1a315da594bbd + +Len = 46960 +Msg = a19f65ffdafd6ad5ee43570f7e168f94a8b4a7b7402ac80b5dc7557818d0ce8e9075f51a32042ff7375d2c276da6ca223b40376edff95670fb8365825025dc46c9b09839bbb5388b6bf5c82ed1199d2d9ba37f3f75250e9c88b05e0f4090e54c53369785ff764f3893f3714b30d7cd5ad1c7c7508916b5340c388946717ab04b36f13a2585b03aa6b53e70a614482553e49257c9a33316e390022e506a4c06e97bc8c841d5ccc27edcc00d6804d46cc0dcee76d34ce6f84f1af69554b36cafce29a28b037830af680d608fb989e36948c2c26e960a972220b5fc057bd54473a34869c991f546c90b520640c02adde5949df6853968ac5dff66fcc8ed573a1a10e104cb13d475d810b29a66a66f2aa84c757104e4eb8e719437de24d1c1b86bbcfa5bd9b29e24a31e36054a92e0327a17521d33c11da526862f8a624f9c252f509e563a95dabdf3dee42d34ad065d239d3de159f58559447d56e9c9916fe92e73d2dd38e610a790f8c6fb6b1f68146a873da5bfabab139223b5e1a3bcc26c30cea0d819cac84a4213e457390f8ebd197d5b51ae091839d91d535b36fb1e15fd090f2f266b8b0ed1d7442ae4a501c2f6269ece6c375335e1163940cc74094e5ccb27caa7f1e05b04eef05ab50b4889ca2b0e02415ee46d72b46d76ab4f0d7f17bcf191e4845099a4fdf0d1f466eb7c5c33b3d677a6544b549ff9e71bb5b20ef485746d244a623079af4a75e9e1730176e7963255362a354e80e47966ce7f64bcceb944b16e9e884ba90830dca16782deefbeff2237ee952aff3716d3c1fce9363ec600d1168c09e29632e914d14f665df2332327d029d2aec3f9a5a9b7b1052c7ea587cd6bb51c061cce88da97b415bb99fe88ac2a6254a375320e31d7272164365ec3ed94a0277ee3e6f4761b1cf7c08b2614f86c2183d0bceb39b34ae5a3a80df79a78b9d59413948117308612743470b3b155bfeec7ff412b0e763773f5beab7af6b804ddc98dd7a8d84f001bf4def2ae46094b5288f6acfa75c4c75a7d6eb9eebef39b3f30b453621f1db0c1df87b71ebb5d37d42e7ea46056e32121a582df5cda72a6832f4fb1b7d4e0bf8b9df7670bf899acfd215fd166991c6f50d4c0c4cb317d4e32302898afe0e1550196f6ab7de405d153c961dc1326b7d67071f21143ad5bbad39a05b153296898ac324c2b7d69e9cf608f4c6d70e5fc8008e6de6dcd355614eed5afa4aa98bdb313dac08e126e8ccdacd9e72b83be3395a09a4d816fb2b4810b49ee18bc1527ccbff41c7c45dc37f4bd10fbbf569aa33cc0f506f5330abe2bb35e89b69289ef0c36ea269f1d99326c1d9d50d0f15f959ef15fd3702126bc3a6d7c4a2533da5e9a0222a79ca28ec55c54e6ae075af751e3ba407a9a40eef6d6c20bf70da7f2ba9faa06661edca338ece855dd0c9b481f32a400c41c984ab32539735918f7b74b42b7fc2dcbd4c1d2466351a486bc3c47b33607799e31233d525a1c38ec2a135bacb06ec24b91cedc8f4d41cd1ec3ba1090f8be61c7145fda83ad6e5c3148ed30041dc3ee471bb39ef22c8f1e7bbaa9c4ee728b434048e8d3e1bbd28c905a2c1373876379677b5960958aa26046a8f3a9f82dd7e9b0d5a470930bae92b067ba4c2175b62b52b8a76aa0eee25a26967f07d3b00b19c0c47df8c1256b343b777e23356f24ccb1da84033ce1b7d6c48b3528aa838d9c181c5ab59592723bd69360e0d7fd15232beada7591ea899ac78ffd53a32fc73a5fe522ed35d92a6e2bc148ca31a8f1f969ee9006c691c070d8aabfcfe63b1fba3e27bfe9c982fa97e20b1e2a68f7201612f18eff035ec41e9fe563e59c2fffe65ceb18f17a164c7ca379ca48a7730a42cff8bca872dafe6cc347d1dded94ce846238154c6f1c87e71512356c14a21745480d0248388cd424edd9f2ff00f0f45df7179e44d21c129ee0de45ded70eb0e62437482880fcaf0cc4a2ac92feced939c48f9b1fc89e5769ade5e3e5193f3bee0c7f769170b3f8eef1aae8e00eb3e5e070a8f4267b2bbd122430f8cb02bc2226a7eb74c9303815901bf98f2f59298019a46a92a1134aac5fecc66ad6b90dcb539e862a18e91370baeb9887c807b712ad08de5bd8b7848c1aaeaf234f67baa040985580c8c3cd6f36088ebaf33fe60365430b38129060c60911f4097e334b07b43e625f20e5ed7ccb1ce30ef8293cbb07fefa1199c666c0f5be9c06aa46496a7638b4ad6778fbfe40cc9f6d1eee43a25be0b1cfb3801ee3a55caf011cc73c304f2d5354e6a3805d5ec2cbbeaeb683202b923a58a9e61197e39436e11ddfaac107c5483ae58f0300eda66fe9f0a8839e3dbb9d96c322c645750e3790f3b61d8566a99a49ab630c51b51f91d52cedcb825a04e0704859c5532471bdf5e6731ce434815167824823b77dd63b6caaace3364a150dcd82b6972bb865cdf8403f304638f4767eb066d19a0f737495b10e5420d5952b97b75ec333f99471814741df133bab0f757ee49d62319d45388b3ba4aac32d43b5307cd1d5afa3b07845a2b4b3054e273434eb1078acfcb43e7e5a5e3bdb845c0f35364a78a13d93c58089348e5e84c3a31aa2b0424739cc8dd394073ae6437e8d0db4b58398082051411fe90c0ef5edaa78320829ccfc920ed2102911ad11b117021f9a605cac6102cf8b5a96dc4aac3195c29d9601ec10a9c2f74b27f597fe955a9f8176b5d25ec174f60f92912b0920ba7bf9efb0b24d47ed70f6e4897c6cef5e5bf32d6b221e777688916af53f0a5f2f85a39d9ff651ce99a4b1b03069040d567c77ed4543a90a1e686784d02fbad63c072309975f25280fba04f3b106cdd78a29961e0cde0764b4bf194aeaa21e6e2929029a5f95d03b97db7715d5facf36418bd728889a416b80b430220b41400d3d15c7b7c1415af1782f937e64ee1210c5cac27481205d09c9703376fab4279cc1f0faca830bcc30fcdddf9726899f4f5c0ddf68bf176625d91baaad80a2db04fde5233a6e9a2de2690ee4c6e2747dd94f7cb76d092861a6f6dc1d2f65b4652b3919cb6f4a9785ee08e928746256b498e641d1ec29fb587669db15647191ccfbbdb779d1dfa9dc3c2197350a6cd84d726881b54be537527c7a411ab46be1185bd0e5b6c8f4793bb4fc3f93eec9a24f511f67ecf4068458a07036b2871d4e5132bccb09bc53aea93ee00ac88a415bc21c5118fd4d548c71ca95e167454d7e806ac793fa15c2f12fc217205e459babaebb47bf70c096f4a5e22f6bc056c419adea3a62113b0aead428e7a8dd86a13c1c154982ceb39667fcd087fb45224ac8de9a5d63d796f340a05899cacbb719b313149e899e901a8b7f7ce5ba7f12a7331d6277bbd38e449c9b3a74b0b23fccbb9c9f90fd68beeb0835cf90d0f58ca201712ad2958e8cc7a5ceb7c27f198682fabe9e6506b5a5d18727afd2642ff904dae3dab4178ef6420440b5c96289f4021881fa66cb0bad93b05b05f19eb6c29568795a66695d367e60f91dd37f89f116beed99db75f53efb2adbba36a7114d1d503d9230b483b2436202d826fea1e584940b640c2bf8c0cf9eafb4e9a7c804643d376b592086d458b262cd0a0859381541e24340169e9bd8b3dddd52c5644e31d56ecb2bd4f00387f721e3c9c53a52916e7a1fc15e6e37de126f1cb92a6c924ec0ea9cecf948a696d94804aa5ccb9bc0c2dcded52af0fda9626c5865fe683a81a7b3c4e5b617274e02de17f4f5947c6ae60f6ac5a2ad53004cdd7b9f68e1ad9332d22d5e34e4ed7717eb03f0ba1e5b56811ba9d9f02ca2ac78c96caf905e534c084ebd9e9a3760d9c378b2e6d1f0a14d3c09855839f553768d3813dd9f679473d22f5eef1198e83bac8b0b1d6293b717bfe0e58ca891cc2334335871bd84d8d2377df797c190ed677a2ff6df968d037cb1a8b0bb6287777e14c023b2113e872fe0416fdfd1a6d723d6695b729468ef44ba6ad02e925fbb4ed6ea5ce9c41c09537483b00f6a630e386843221f85abe236832d2c2d5ea2ff5a21b6eb5efda7c6069c49a16fb34efa6ed7c4342e91df441bb4f9acffeed7ad6b9e2eb859e565270f009d2a47d5ef048ccbf477e7df8b7cbbf5d638ee6b862c49f459ac22a4e09238478633def7ce925ceedcd4929837f4deeccdb840fd38e4bccc3fad0061a070471a0da47d42740ea4e5833376e36c134c44e5143ecb733d8ccee9a43d452b2a052038656cde68de2d5bf27ddce9b041cca3273430fec29f80a15e7a1f770b263a02115ff3f2326cbff62f980cd28ee628b299015ebdaa7262eea615ef1fc8ceae67a0785aa65b1e225e446e4ec58b6a261845610f31b51ef85cca5ff467e88928f8ec99e8236a5e1d3c38e6eaea31368f7d333d8d826a0b0b94d13f7875f5be725dfdabe691e793793814e7276a07b02a8b6a7e1ed751a1623dc39cc17177d7523ddb949c185a24fef9df5b4f6d9541c1e8f20a0b58f349c700a9601884f43b91408f3e52de4c7b7428a129a81a64511a3cd3cb9c2fd76900858a72c5d6f652f70f208f500e45ffa36c63397b9afb49ff3015a81881866bd6736eba108e04844b529671ddcecb18536e2c730f15e28f366bc188c97986b511735d2041d4a73957b0f9cb4346682e4bd604bfaeb2a28d8796df55f53c61b1792c608c9fd265d9e1d25284c8a0a3a9544bf3059e99c2aabc5975f6e5f59ec5d5477ee673adc9ccb260a886b50104f23675022d28f3ca4d9b5b8d53e1cac65bef6bc0160590587a920104b85293146fb9fd381f94e843e0ee452e5430e360da8d412c049da19c4c485d6d02e67e5a89a48b9ec32a9fb4ca7bbe61e11c69f4aa7870cd9983081ca89e1deb4cbbea5fa8c1c63a013241a5730b6f2de2eb840b3378a1a8bbfeee60f75ae9867e17fea935d65716c2f3f59e4365009a3fe65b2cdc557cc753587bf1a24568478143e2c296ace53aecb6e428a25318b0e05517df0fd6a8314ad7d6560f2743353b87bf32350b19ac69c335caf89b5f78ad80dfac34c4ceee86c42817a8c82259952abd7f79bb9b761f62110dad067ff98faedc1cb1e79507f16798bdd4efabb977760333c98312a0f8dba078295c1d3b6c2936b6ef07a68372074fcffa66895fcab1bad58f2c2730db750993d465e4472e37140256eca86af0ed74d584f36253742409ee327f8130af7975e617e87924bb219e894f5d44c455623057d95fdf9b5f1719051a41c9a75e2f0bfa58af87dafd2ffed24024229a88acabde6171a74171d111a2af3da69ecfdff4560080b472daa859669207e9f371130cf184f3634d949c1a4e583ac11cead157827824a8f33cd6dacbaecf42d8f8e17c19aaabbac5afbe5c8f80ffc129974d5d0727630c650affa68bfa44d450055c22dd3b6355b3aa80fef08c554fcdbe9a2e6c740488d12c6ce82ee02d486380ce27c59fe1db1e6d2a29f6e50413114701f139c9d1c33e8965c63ac7534519517db2593eeef50fdf04042bf3d4b4fc1acacff78d9066b40b316839177f747b60b2ec2281514b8dea56b8161e8ddb97203def2d270a183b991af7b237777c9095b4fca7ced484a075676c3fcff62fe93fa17a63010782dc1b669b2e91030761d9cd0b708e3d48506980492f6cd859fa60409721824f4c9e7a5e7b348cedbaf4124341062a5541a6ace9776d5ffb00d26c606ff012a91d8a9c4ac04c90fc3f532a5fc5f008e415a927ea1d810e27cd7a494a295719de9da66a7291fe05f73e860769c0b692b26c62c2cb63f4e32467f9e146eedfffb775fccc1d17d354a75e9393a959e12f86efd766d3724d44b978571a9be60e2df94d94ab957a52e3d44884b466b9f846294512f94b72149bb0a59cde93386f096fcc74ed20e1041b45a46154ea07834164171b647b8bd24fcf98d114740d87fce09ba67c07746f64c419305a7b6c0b87fd0df890abe30dc8dff9fea4878ce06f1362323e925d1d27174ffbae62101780bcceb36423a5506ea76f297514de01c8d1c81e1d08c196ca07efc938e71a2f946b0354c72af720a9f1a35c71632a7271e2757400b3cb60b75ca1a3e051b3db2bd053e1a30a0107e1833d9e7fbb99bcd00e123cced9a00554de0c908eea02a4adb56764df09ec8c7e26e4f8876653664f1d477c71c36b0d0b55d9982af8301182e0e6e46370e038e8a2407072aa7ff854d6bb3ed0b952fe4388afc39cc464ab1219796a1787049187bffa1126d045fa49021789d3027d626340371acc96c7f8c62ac8fde3958121c445bae08c1fcef59569026662e815c0d54519a4a2b6818204da7aa5afe47f7005fb27e78ce14271a0d325db65b142a1005ffc69076bb9d135f0386a63ba2504b3aaea2d0f5cc9f4d20827f3c4a62b8c4c568872e1fe976bc235a955e7609b67371aabbafbda890893cfb2b3670ff90921f166c61ab744da1171766d231e0a21f71311973aa1ad344bf26b253734d3a0e7f93e6d98dee8a68c6b46bbff3b9ab85d5dc4cbb2f95b016237fc501a5ce2da0637b77045bbaa559aedc245640172b6d0bf6d5e4d2cbbf540670d3cf9d14e3ee6707ad60796b371a2bd921538b6bba3b703b459f181f79a4d4a45f2bdd93e55f06f2fa7c8b62b820ea45d3365a39c057cef40c3883f3478f2a74d794cbddaa58afb7dec6f64390e456acba5d1103e66864cbaa4f9af9d159547ccd990c54cb81ddb0cace4e8059fafd785756644c84d3de1c9042c1957fba0f36b1b7038b91612d885ef0f8ab8bcb4b333ab0a896343097816ec09c58db27971d246d3604c45cfba90bdd8927aeebcc57d4da72537cf52d7486378fa65c08a89a862a3832acfbe49d41f274772bb2fd6096524616b7980c70872610107af39059678c7ea7e3c464cfa1ce4f2c9ae75ae82fa698528c9fb10fe20ac229c07f0ac438e27dd6e12ce8da9bdf7dba64cf6158e155ed995482c7ad17541a54c4e164558afaba322dbc0d28a09484a321f1bd3d5bdeba5db7d79cd2a7908d23e0e12997ce03b86c31e83e44508bf8795ae4aaf00faf83021f04bd0b035eaf19bce4e70582bbfcc79647f8b81c245d9f681ec73b7d46dc3902a0b4c0cb0cd498a17319193971fbe6b341c8ee640c08a7d216ae5a15432a650b21f0ae5f29b23347023c6d62c43a4c216c2b71d891ae054152ace67812f218810f1cfe4043ac7c1618cd5c9f313c6a592d9cccea53924a0e596f5b1644d7c60cde766b1ed947d5872d58713f3786b3d31c996a19d079d8c1a1524260372fe01706b96f3b58f8d212c64a45d3558ddb27afadd3c786a953d3b0e216e6887f09381e4265265153e4516a2f44ebf9d622bf6d5694a3e4c52ded0ebb5329b759a3d89badf78040ddaecb9f73e8f9b2d43d02bc00171f7941d956113a81aa22244280f54890a9a5ea73d9bcc4cc7d1f2c8caa3246f59ac2a3e8a77eec2cd8778367c9b1cecb330f2ee614687e49f67d23841e66a79ab65f6fde799e4cbf4525eb760b579cf19ccb0f6804292cfbf67b7dd5c7af8e80f28dfa2d1505d8a3609bb11fce6d3fbe4798009c01553d5ced888fd44e938832cffd0747223c1c83cb6798a79b59339bd3c4a6d4c4934bd75c32de121bb9014abf1aebcf29a784dad607f6bffab1f4f4c1ff66b4a669b515b2f8dd11a766a61330662c3793deae13210b5fcb54ee00538296d4be3f2f2572924921457a42d346d47d4ce2e95804c73cd0384c4293e25296295553e77a09886ab23f401cc415301bbec283929a055179f514d54c1a275c9d357d1847c0ddc1bca28b740770e86966b9318c381b3c6c78e879d8ca072bfbd839c06dc8aa1eb8f8b8aa63b2cfc97d45dafe5f42622652aa38dbd944d18c9b07a4a3d6f28c48c8bf62f091b73734c659b29d8f39f54fbe9e54bf59550fa5c48c14abe64dede89b712002807d4db6fee2dea39e974b04fab5daa8cb732823f2d5f85d1e43457a8bae7e54a28d89cc61a19d950fd2ea02b191190cc217a163c085ce2be17b397b23d7dc7b9a6061e1a8e69dd6458548a55da0be6fbfcb0201981c148cc24e2066ee7dd8cbba8e7c932f525e0be216ed896975395626f5c079f3f95a14434490da6610e1e99560106d8f553c9a78105f1b6f8ef8449a3073396ebe0d46e6e7112205218639bd9df3bd236fd8065a0a03d7da4e99af7bf380cc62cabc992fbe17fa5630445085906d2e9612aec40a5c724b34449c1b6ec78faf6abfd68f80221bafd3cd9ab2afd0031e51ee3f782b8020e1f7f15e0cc524e65f010de99e8acba2df0849f7c47ee53c28e142f887103da63 +MD = 52ef6d43536b1fbf828b21b669fd459acd71e0ed8c67b97e9a7a79f145cb3a5210143d692ee36db3a09ddbd18bb26f8c50f473919e38e07614b8a0cff6e11012 + +Len = 47752 +Msg = 4b91efb861462b30b26bb5e8c8b08ab8a959f396069c5915b54a5a2c62b21d3981c3e2458670dd8a5959443204a7a762af378077cffc0b909a9e574cbe679dd55260d21d0db77867b664b90adb0cb671c6261d67ad5cf9912934cf3ce9efe65aa8b2e6c65ce3a5d0b1d63df5b5a962eed56cf2ed0885ce234a53e9854c129ed06aff47caddbc0bcb32f5f77dfa4450e0c45228914840304be545cdae4e986e3f80901cb1f7095363210b102913a62b4f7b20e7dbd553c813e250a43f5648fdb0d1ad8e011194249d665eaf8166979944e11e565418863d8229bd96c1ceebf42a479dc54495232783e936fd0e5cdf42c5e0949e8377a337a0a3d4cabb1d49fab6c9aae801ea7f031c93dd22575e45d0dd5fc9e6f05b70607636dc69b5ab2ab85b401a1fc1787061704a9a45e5d292e891470657242db75d0bcb1f9a37e056d5219236940ba7bee988f7b48e3e218e34eb7e9319a6533ed9684be386ca2494fa10a8466c67df30426b837426ecb4015cf2edb853fe37ce7a939c7154f5dfaecf316a92d25d888f1521d4223577f2b308ae7cbd2eb53f2ee896a8112d41796afb8bc061ec760aa309b3d406e265426cdf2814e9d152d528cc79550a39355a91272693fde239cd34c728696756400ef389679b85645d6082ce428da69f59eaebfa0bc9acdd2f3a0af6887d8fb98fbd11af73fbd9115f480595fb372b8835923f1d414cb705deb7ec3fdcf7c432dbb78ef9551a2dfedff479caab3be21b52b85737d0026681d0ada44a2bbf4fe9ab63320e14e2c95365cea6145b81138137c6f9f1c1d5007a8d85f8be7dbd7807872bc497b839f439793d531c12f006e16c22eef31baccf179ba5b144dad986b4f7760e3b4a09f8d8a4a94a8ad87202647a36fde4e66e1981847797834bfbc31784add6a3d1391b576d7a5105b5ee5132e868f06d2b0527dfd0617124d70b7559b536e57655b1a6de5d193135b24d39723e228e35f158415a05cd09ce87f1e5a1137a035ddf59e197faecb2c3d675034d05cb9ee5404fae1aad22252a62955b1825e1f700751913a8cf5c9b572a4ff6eac4cae92420d2b8464fc88edf70df1ee673d48b0622d9853961d2b698b4c35c720389379b9ac9a50674270c96b9b8783285b98518eb8180733ab4c92f7eba7b0c4a6f4ff1b51cbe84a3a766f74606af24e4f9aedddaf94a7de16b9dc3901a9de122e4fbcf7ab44be564b066a91eb30ce617fdcefef6292b80de60fafdf0cd0818125001ddef7794543faad25549a5d79da62cad2247f96da4bafaa785a8b904daa31c2ac21e4ee0f7bdfd73a2d0c658741aed12f2d6525710fca06e02c0c8db4f5bae3e270f2179f665111139bafcd791f9aac715aa1a30ed2cbc151d3ee1d39ec56f05b3c9d9a57ac04e74c10f319b1cceca9234cb3b4162d2b5657d2ceb36f066c7470f545cadab541d63e3d74ced3e1eb53cf7429bd29877f326ca91d04a6cc81fcbe2b894d9b0ace4a7471b35151e73d28d0516242ab7a2de20ae7677583b72dd5ad5fd6870b24d0c0894e3d45be6548b4c074fbc93e6dcde1acfe2c8a784ec6bbc902cbfbcd8c1fe4e73351106bb4a4743a4f64d534dac5bded5ddab8170bf2fb9ba4d83034b8f21418b1bd460c7dc6f388512beb3159abd326970082c27729318fb669b8e323fdca9859c05af329269f452abf7fb662e6cdf33a1c7f1d08dfda3fd81efa5b659994d08c08c3c24f49e3fb2cae07367f1d0adda7ad0189398d72065a5678fff66bff6bd90514fc48b76e04d756163416a516307030be9991c8858dedbeb9634eeb66c4b133c303ade5aa1ccb762121b2258cb614361ac0aa178130e2a63007d77e5775c523626af75b048d795cbc91e9f4bab9142b8a80ead0f199d9ab716038bb6df9553257a4bd9e19e151984d0726b94cc3e08fa26cbcab5313433cf20eeb1906ba020f3753591566b2f4a756f3e0e99f6119e0d6e6c7fd2257bfe93666672dbe525c1865c96257677cc3087eeaa0ec4f0b10bdbc81754cebb1902ec2f92540013cb3cc87a951ea88995d4a094e0f57c84c8574a7cf5d211bcb747c0c59ae165bd3b9b9f165b03566b323da9aa054a2878fb8b44d12d8003effcd6f96ea7a173ad1de6f5770f5ce7e34a738b7844963295f4adb010e7e70d1e91b67d73e11b92aa1823b1e6dab2c3ba857f2c46c36001a35bc875824d8d950f1def361c6fd72b7bd45cbbabe48b52b88d68765caa30fd6ad7e17d6c84fc058b498a0ab0795da4e9fa98fb0e5472fba407365001228e8eb11102af19b7bcc35abd8ee379293667bc32e0595752ec29479ef2a17f53031c42b132f3d00c5339442003a8bda5e9dabc233bbdcd0883416af8a3531c64160fe35e7a31d8ab4bcd111af241c515fe67b076b10fb99cbeacd3bd514d217d50cf5dc0e0517abd2ce988556295d9a2fd7562d24a37633625d24b960477d6c838c478806f3cfe6a7cf473765b8e40746f6b98e00f1d13ff411b992bc5b9826a5657fb462cd8acd9c5569828e51344b2dcb31b4807a9111e99f087239bfb6e8e32eeb0b9210ecb338e76bf11090d2b84cab4b3b13ac4a4bcb6b7db268f25e35a55f35d8255c7a59f60beb2d9ce623e13c3d627c3b15416011eda5edea81f27f646cccb49d0e98046c29538293dfbc5874e8141277342ad145bbfd8f0eed1828b8de3c2b59b5da5503c6318a95cc00808f41dc7858877b21ef5d0110769243e41b39e0a6ebd0c5ce456911b0035994ebc3b128284f9da6c467273d0c922fea23f3f676a1d3edded2a998509d6d06fe1ceaec93acdcd5225b55c12dfde2049f5aeb9a5ab6a27b79f4b8ca8aad533280764d2a8b7080cc923923a1404ef6beb80b5a9bf95fc7f84bb6fb862c5a368ae09a73118c0dcbf26b00695e108a40cce8b7d981ff07c4e2b89bda31c24e877e72fbe52821ff1ed511239f4e1b2a40ad85d2e0e2c84919c94515ed73c8d4d66bdc0d1bd4c9af09e319152df7ccc986df340ef914e19e472a75b7adc2cc9793f17060afbe0fa81dab0777ade1a1c273e067ae8abed761cd74cee383852a0160adc478f93a4064baab50ad87a236cfa84f85442e37164e2d46b54c07518d9c9cdf6cc880d0288f7152994953aff82b847b31625c143abde70ecd33b1ae53e3c924cdd1ef261462c24f25bd8a716260a8f1e08b8cec913b7b3b7b4d1b020951760c6c178c8280a93def9a8ca47d0229865217224916c6416a5b43fa9be33a701404cc2c01ac19ad44b26c292a5963d09d0a49b90939465a24fccbbeccc853ca338c6261b6d93be967362f35a46ce3e06d98fcc255aaadf04b8e572c1637e1ca5531c36b34b0640815f938147b4e2ee3687ca4d0b70149ae3e8e8aa510a860eae96373ab03b82e73e16a2b58376381542e23e66695d3c5ee8e8beacc34905db660bfd7a3ac66f7a75a078d736143a7bd1f2d15f67a788f3bbbf4dc040a8634b77b9573d777235c2cd06fb2f87164ee78cc06c7f2fd8622003757f2df0b0082686a82dcd92ca3c87ef4f15049f05de221a53f80fe67731ae68133b3dfae85d343ee16870b153ed908383ada0a66951f525b35b57b70d5d6694a0683687d8c83d446bee6ffd97aea730abab49c3c80f2552e97f9fc8214e0d2c24f061be09b208434ea9129d1de8929ecdf6481eac807d4bfc4a2f413b6b6edba8ba06c802845ee19380a0b96d041a76f478e5e09c0cc4b8f4a64e4be41e504732ae6dcc4ba407c6415a637b1068076025186731211bc140da7a460ea2cf7a18cdb4ddf36d7ccb9b6021a1098d7e21036abe1838c2153d8cb5ae5db100e4b5f77eb4a065ef727208f9bca38b6cad3008ca523e1e076200448d29dc5c83c6c98c4f96fc4959f0c3b41213b12a365cfb164ebd220a786ad20f6ad50b39b5dd7e7e47423ac7345d8748b60e120d72f54bd6fce50c259e957b955599316d1d919c756ea1a1090721866bea95105ea8dfe8f0deb34397004cc27f555d9723434bea1bcd997b345aa488c6b890f14260829a0bfc0f118726f5717573098681b07131156b130e73b64d550127e7fee3234629cf5ce2bc1d99fa4e1eb68644afeb6d390e51f8a4eca186b4c33f827f6978935ce608128d83e0c1222326ba19d67ca5caac852e83c7a5b76fb40949bcfce8d1fcf50889ccde83b4b42bcb8e4f1eec83ac97119ff32d4a464c7d8c25fcc2fa68d1a7622dc1590b39cedfaeea2daec26da678fc313e46179c14c6d1fc89e636c0a3a120e8b419ffba36e7d6b7faaf86cd82f74fceab3994218e36deb8a98e24413a8e4aa1ec49e79eb5ea4bdbff48c10a06bb115d812f493d8476bd3fa5e34d545e14e640b20f4c4d1391164084a2fa8cfb6d4ac6094fbf59bc2e767bc50c385fd6dbfeac4e93b42f18833eccd0e4b9bb28b403f18bc27ddb00050f5250316dcc6b8c99cf08feaaac8c68cb692d3786ff573943c64eaf0b2d16a392ae907c7501e5cfc0902778b32c36eac6fee1c3eac04ea4122d9c3ff2b5c6b10676cb13d7680c4b7ad7f5285917dfaf367335af6c66d69c780ebb99b9dddad774924a1e1b67a7a9cf8cb83723d54f5f23b071249559b7c97e51f4e7e80c18bce3e955c6ca688090c798b9cd99ce4ea3959cdd49eb01b9d42bde8f4e08a94a095b6533326bd25da96be14010446aa4239521c147f8c7a465889dd4f8a01e3665e5ed2e8c860d079cc250952bab1218862a26644544113f239b760b0d38d2a579876a8cf9a3814610d4cdff44572c74745d940f6c554853b76e527bb4582d5eed4bc296a34b96e1aeaa41c784ce227e9735510ae4b5d5a8c809176d1689972b6839de94b205b4a21d4b9236129a5aff94ba469dd4ec1e06ff72af295b5278d29258a6ce4e5a434f05bfaa9217423ebe16f45b1064808d3504b300f7aa3c381c14b0028b9dd1abb1100f6f23ba4f3485c3ec79aabefb89fc7ed4f41f2bce3fd19649db15caf25490e442cb332448a61a43a986b407e5792516db72e80890f6b9bf2c17b2fb45a6b42960a5087cb5fb463f336b766ac4c77673d2619c660ac39b3860a0ab59530ae48872e4ebeb1f9bd15f9311380d22dab83ec0ab8170c50f41a8ed5c480ba3e6eaa87f7224990dee834ad05f4218861ab21eae37df4b484371b8dc35d039bda38c338f36fbad075c24a9f23cdbb479ef2ebca3ed00221bc5f41034128d0d2aaa93ceab18b84f954d7b2302924d0982c1f2bfa7b52b1bc7ff9257fddac5ad7162c623d900a2a9402951610648de3e29f8c8d0c277a75ed35712363f77c1411a32efda23d602e08f586e0a0946d77bf6fc7697fd1bbd14c7373e5403d0c9f2ae84d49b9182201f0b429ac7107480ea7236c4bb5f89b5652c06dc5a50cd24e7b4bf3f0d2aed448c3a4f9d4025ba20b0240c7ce5f1aad778882cb5ef2f561c4ab44af6d8f6fdb64fa6e83e1c4f0000f894e764bcba646a76661191bca753f740368fc1a5fd9bbd91d7734604972e69e84b3046e9c2a0b8864b1d3868c0acfef3c3f56a1c48b0a37a545a7e9f032ca1a8d04de813114707d1c1b8719c824a798be2e4b7e4de22ae31a503ab969ee2f061aba812e3b03fa07f4f4a0500f613b02f1cc472a6c7db27df52d898906d38a03b65a78e00a672cbb77e3bbd3b23f0ea08f8fe61090cc156abe33f0c367a17f85d85b42314fbc6d0a1d4f35ff612c9713efef84db6b4be82bee1a2ce30cc653ff0933698c4b725f666dbdab3d8c9878bf8b61bfd54c7b9f43fd468a7256b0cbe1b1895b6bae376862e1b58838a5210815ea9cf3b8c4e99f55742f95fbd60f2bd079b38459e87a1c8201bd695b3b54e9b9a5e7dcd064f48cb2eb5bdbea1b20183dba4890d17a98d046563bab2fcf82820d15d8b7c69d5adbeebb41c8c79691f5ac0bbefd5ce532482247b6ea20d25855a2e2f63105de5b018b7c87e90ec8e3688de69d2676b8c4d8986ec582d8d434f8fd65b6b518c89391fb9774b93a3272d565c359a89955df063b33ce21b255b6d08f4690d079bc8301d1a4ceb5d463fec0c63a8b004f4ccf656d2f673337c74c70daee2b0f935ab7d5801ccc6b67cdb5bf21a487a9f31e445ab0c9f723e3b9645e52c4dbbf00038091997814466ed056250aaa06124f4aac6aa88c1490509c9cfda973298b4a479baa703f2ce3442c4e96d3a35ce59e428619a6fe35f4d8f164d321719ae0dca76794c6ea7cae92321d892f3912708aa65ffc5e88e1ce17484a736d38b65c31a362f4e0029a24d37221707fd3bd5f7ee6986711c49e888611cc52ef40f259d3bc1c2f6e0ffbc2827d28e147fbb41ef573de0e7329c2b09fee58f62a12e5664d61f1c8c37b182429a362601a19ad2b78de8f36f530f4d2df2e7ee19036f60e0925923582cc85a633958c5158d5fef193972a950a72bb6bce62ac89d425aacd91875c1a1e8cbae52ac3f5499689202db03e4e8d45577cf7e81b707348577a0170f7eddb19342e5d89af3bcd55dbb72c692459a41867cfe3a6c959127f44fa56120795ece54b567bdac7de3119163a7a28f9da6e061c0acba4ecc50beb9692481f3702e4153ad9cc989e4b3952f110937a1f4f4f90fcd42c4d0652a40f94d833d2f6a3452b9b2ecc3d93013a85d4e004c71536cd4b72b26219a6709f7df842c5e7c705848ae4abf754669ea9443a1f4aba6c1f6b88260c29953dad429909585ac8489826d59ff7da57698229f0b924d1ae9477aef98f67df3a3c6731f3708f8eeecbd9a07e3588e1c11c5a212daa97362e2ece0bf2075bef93434cd21fa66ebee5f14885f73dd5aa2c0f65235db6fce4b38b810714263ef71ab2bcc760136c872839734bd32174aff2b351a4f336bc69c94b3f24c284a7724b3b457687500f643004d8768488dc4faf989e2aa0d26c41f9de66f9af7b1bedaf2d6563d7e4ddd297f3f67aadcc7315cd2fb928c8f262e9afc586da1da212c5a1099b23e43a3e5eba873bdc9164efaed6091123ee1f56ed65811d5abf721296eb60551b3ed8d765322f3720e1fa9857548554a082c1bea9b5a1a90fe76391ddc8c231ce4a390f82796c76cc11f603cbc354f2331981e0cb0aa7a85e280f1706d39fafb188e36d330abf5952a3dfc8689cd8683034c883bdfef399ba13dd28ae96692d799d6066f360a87d491a204caa6b80254c471e0deeed160bc82d463d318baf496ada28835015a84103d760072d99fcb7cbd2eaf5fa6faf6cfcc6d2cb4c2de27229d1a458b5844f53377e079e5eb2aeae536ac7c25cf0f03bbc832b693ae793361b168c4da0470e1248708f68ba40066757612cf9831bb906abe4988d9a534213d30b18d8bce8550cbb517ffcccbca4716c789302093a4a3c3f5da2bef6fb7f89d642029047b2c4b1049351c102a2f95af6f392825bf7247aeb70e253bd4a9c06893da1fafd60cd8db8a89d6bf87d85927b7493e0f7bce81134a0c00279cb28288060af7f3a6ce0214c13cb441ab6c9b68e7e2fb4690605bdaf7fd431a8e7b45e405d63a37b219cea336753ffe5e946159472be632c6cfdcec0609777c73ac1164d7666fe5c3964670315dfd5f67f8b5e21f4d873ce4c30c2fbf5723b413edeef0c6e31e64a1ec7164fa1c78ca903f9eebb66f66cab4e6f48c6a10cf2c36e4e5701875d01c14c45765d8d938a89f12255c55ba0c46fcdd9beb4e5b044ba43cfdcc16430b75e4c6015c15bdc3625d18501d4456001685530a35b4614879249b3fec08765ad7d8997632f7efa35e92fa2917cb6acaa417ee4750e44a261e80aab1b9363542aabae6becdc7976006065fb830321ef3567a565c26263d23a27e105d19e7a94d565054e217ccdf80c180f00451c09b02967534509ec262c96ee7754bf565fa0243638ce9f750ed8df6ca551563be097fcbd1302c9fffe29fe882838236f64fe9d9ba35db5499e90f0faa35f34c7490f25c56f1f71327e52d7919e00ac2e3d08b811ff8c118f0fc8c73e938a7f62a56e4b3cc20b9e18092fc897234eb8374a76fa1587da22a9d4e8e8a4f0738472886dd37fb647bf15312938157282d60f0f91ea32e6b8672e8069cbca34aae29b5466350ab66442be78d7ac78e63d940a1f11eed696b75d8194c3f71afa811831bbe0066a3ce1c77862a3ac5df8ef70dcdb4f9e9d1247844774afd1139ca6a3ca0183be1ac430bbd76115ae214518daebd6d36fd2d3f969e4b2561040a58c03e8d799c2a8e6d1ae5006b6285f353a50bb9425e934763d8cedd08f0b2eaf91c702a0baca711f550d76c60db18463d460c085bf812e53944bc75193484a05585babef6f2c1fc83b67b02174c02d3b67999f4e18ce2d068e5515b80b4e0f61503049362f7e019be52b90ab93dab6367459ac3fca36bd099c073d666f82fb2e19e36ef76416d2e4f2e7acb6d367bbdf8b2f7bed3c414ad74df0b30f389da9d605f39 +MD = 398b4e5c2570d043e9a4a037b0a01be41ce56d58a26a6014ad7dc5bb435c86b4f8e1f8d9673b0e4a50e1e548352475af8b1081f3b618274a77182a49a1d9e877 + +Len = 48544 +Msg = e9f1f2cf0b8d563e2d20f39f9f464a808b136dba364a644683d0ce52b960cb94857f1adf43b37ff479f0689aa453cff138136203e2b4e29c107dc95cb32d2f0a43eaee2b047a05d389b53abc763a04958a62a79cdc72a16f6415451fbe09a6872b18b6dcd94aaf856459b22c9c65ae1589e984aeacee6968887e8bc6615cf7b344f2ba19478b46af12c218139e3a98183d904161db8e012f83a2e377258eeb389660410bd8a593fc9cdab49805238947af4025dcf0bc336b5d67945a90074abb294b95d913005b110987cde45887484ae6df794873dfc5c41fb7e8992c2fdce70699fcac8004699961b3ad1e1fce9ec8ea5685ccec5e80e4d0792559816f68613434bfaca81a843aac459a6fe35f5369c48e9191e4a32c70789594c5152db8d4bb02260012a8739cf325ddff2aa42fd67b6ee5bfe31591131ff27d0273d292e6a4ed78d14618ff683e3bbef57f04fab717ddc97d6f1c7673ce7a283b20c7bf3ff6dcff46cdd0f046936f847967e77bb3a1c584f31220a5388d14dc96a5730788b9b601882e3a0eddfca979b56cb57b73200d5f4a5389e40b62a8e33b8b3d3169f565c7bef1bc20d680d1e3ce15d7c29f9c9da2aabac0fc94571f83535a8f0789b3d099119fc0f0d827cf0befeab318de1d5d953ad02bb57a735f050698d04f91fbdfbea9bfad448cfa8b393e74b245d8ac357f231c33d665be51b17bcf67d228d37a80add9ebe59a00edb5e33a3c1036500daa8c274029ff41ddcedb86be58f74589254676e29ba942dec607c5ba42a012cd5c9e77bb74ed03eca64d463ca9a658f4f69b1dfa2d61c644b5d29b92a3bdf85dde81960a80da0c647ffa96498cdc14a33bd5569b656c9609cb6b462efb360da5785c0c97156c652fa20afe4dca41827f3c1ba92d096fba134dfb4ef412b2568d71575fc9fa4b153357a406b02b7ea96e40969f18e215384c86a9394eb0daddfe139c1907f920245ae5f037db773b9259916dbfc4b8031a9abd9e91a39c56a9dea450c1bbd8939b8a96171834761f432975c9919953e468e73901dd5b9fcdc2176d9ee04c604b81adb0413224f0d3c6c435d29e007a5e281a43fba6de81e8318fb6acfd2259f1deaa7c950b14acff231419af6d5ff719641b23b473930a4efd30c7a2a0a58b2cbb69423c2d6a734a60006889871f90be23d22153cce401a72ee0e7a9523dbea51fd24a5e20900d5c876f6c8772a90ef56e2785013938309dcd895fe99952b90412cddb216aec42de9f4b6bd2b86438654c0296e543f85dd6e0127889004c45f09c423eb095e8da78b17bae91e0b7d8b7c54b9d28718a51fa726377b10c932a11c619bc3129ea9cd1c4e77ded730cb493e1eae2f14c57d4b28864a78b478f3010973a9bcdac5c5192e077200ef8ca969fa9c7ad695bc7aea62cfd4f3c38a81e95188d23aba8a5c1620d13de1bf758448624ca46b72643a67d6516b6ef6747be474ffb9ef4a42db4ea54a3003df92086ee5adcf405353185df3c9725ca5dd2d6cf466a52cf295cf2d2bc0fce9b8589268054e3017811fa1376b768e4f5a1b32fd405c38865be9a42c14e3f905e23fbeae319c8b33a410718e7e1713b99bb5091ff92ef88ddeb4f6e5f111b8ead5bde9cbfb17453734dbf5cddbf9b72de3413c4f8f7d59a6038e33c550d8c10b1b69b02be25ce284abe89a6fe5bccd0eb93638f663c5c06162ebe754b4a785d91bb98e5867cbd7ce81acfc0f2bced9ee960a7bbf2676e13265448e1e8d1c9be76f33e0cbfbe2b9575ecf87062eae725ff2449104382f20bb932ea47d5a9657b88e4f54112f4ffbc18b96c7ff6eea0aa5665b0560294cf34f6510a70bada36dcee18264a26252139f90b92b555cf027815ae4455d6a6efd7063812253d6d2228d11737f0a55978544169d4d92895f4d665846dd568bf393b106f682c096913a9586792fb3498ee55185c99b516485d0b6e71939d5fe795aa3d7f764dc4d6f0a5ac929d337deb6a83a56b4a0fc8f1276057fc1e766426eb6ab5efa25217bca165f420c2602859d528111e4db0e598391d49ae76281f8523c49f475601a9240d3159976849ddeb158a83fd0b6016437b8a6b0d037b370b26002310f92423151e510381f6b743a813f12491ece603fcd5eee6a32e3755c1da666bd1f3812c98bb0c1965d6720298b7a71c61590c53ca2f93e1f85d2320ad283e9c12abe16db4ccabc4cc6f42c3c3eaf392f5b898afb671bf8592f90841d9f8cfe15c8b0b8d713a762b3d29ef2e32921caed67253bec683bbfafb6bae5f4d33626035fac935d7ebb577406c40eaec986b9a8bf00529044dcf67bb1add2310bf3f412860e10defc8b0cf5da0fea0f9e5287b9c99769778b842f4586d5d342986aeadba261cbcc0b9af5c1d2df1f762609b7c92d46db129aa5ecb5ccef53ca36ff7cc75b242eb52a7f945077ce1982ef00bc2f40bb41f1f0c69114fa46fe0836161c5e06d1b41ae78d7b3a4f3962a657fc2784aa5118862c7acf1b75691cad34635c183bf6e67db1691ce7afbd75610f406c41d0a4d94fbc16f911e4e24a29b05bce7e7110504e1676fbd13fd6ec4353620cef3a130ecf1e4fa190bf3ef0fe1863b6093c9a6c1c955b8a9f75f211bdf2f58bf57d481384c1794b207adbcbaafb1fd530f511a469ac7b6b9ac8bb90313c6f5bfce0a0a1f1441868499e4514b0c6e49e9e40f293a5ca4af16bce7fe26dbe341f5e2ac914a524c19b64900776901a56649996d9a4618d6ece7afddb7293e6e828a1a20df610e1f92709f69f6bc943e9d9db6d13711d544b5550bd3aeb7455001a6fecfbc0b4ea23cdc248896edcf21360ac4a5c6449bd652885a33a976f66f066f1721eff01cbd5e1f5fc31fa4ba3679ba4a50108672740aa72364710e5bb4d810ec7f42b97f583f64d88358885c66add5d03add80630626dbefcece287c07c1af064f7b0e805b28d118310a42bd971c82decbf5d97574ee4b45d9876c5f510775ebfa639625ae618ea633fd7ae5b20ceafd6b1f3ab1a6aa20aded66810e78f38925e9c2fa783a32c40af3f9d7dda0c635b482254b1d85a281af7231109166cd133c8360e281e5e39bcdd7c601ac47928a8c78cdb3c4f71e97d4d0b1c0ee01dd3db62f04f44798bb3a76492ba15a91b7110cb5e01babe56589a36fae3a2f336a2d1d5778dbd23c03ca8db0f25ff0657ff4bca1252adc38c080a5b8f0255ce3be0bf862823d2ab704729b74e1e275aa305824a566895ed677a460113e2a7bf91f00d0b8ebc358f3035b27fcc1d3f14a1367cd2769df39a9d21c5ee361f1965cd6342cc17a1463d64bacb9b259d96c2c70493e91f7d57598181127972221b4f62bce94e4f9d9534a238ed9fd739def388f26ff49d8131b8a93aa41934762deae65f6908c2eb93036d2291045d5c68156b72599b9d440336989103641985e1b6cced6a91ee35d0381a1a4e5f348fd2b6e326e9347b304c31c436a8e08dfba7318ac936603de6cd415d828e16d94eaf468462a755d3c09d58b09e1cf4fe221ee9b485850a3e88fa9d9bfdc8a1c8134e42c3c81c86238f4709e239d83806a3995dbea4bed66c86e8cb59de96b68d78403a35c9a12be70709d3dd8c531023faa6fc1da94c8b548b08491bc7609ba5d815ab3ed9eded8a92363507182623d291d84355f5c66f62efd995562acee78dcd4f04539b4b11aaeb5cabf36fb9d99f03add20c2cb519343ffd4ead8b3a10c1d24cd42860515eb46cfda726f596a7e5ba881684c0810f24f5b3c3666b2aadce51afa901db991b338199c5164c35154341078f7423c2b7d1abcda2253d19252ff5e7e1946f7aedb4d3a17455d62db834119cbb3ef8e2a9a6bc8b496e93adfd4329761c348e7f2c94ddb5334a15d8f734b6c81869a2796b30b27d57b6e121ccc456dac786db2e7e600a3590879ddf68c19b0a2578a2ef72fc38242b72b84cea1018a661ffb80159a2d3b30a72d0a9637758e370d08ccd3765981043468b57fbb2e9397a03b78034e9e4ae0fb050bfada25ae47925c29b4f095cb24d86dd0b682943347e375c33968197972ea4809a7dff2b7dacdce6c21054109aa8d81fbfc5efa107fcff1883f526770ed5e402b27aca452f8a6a6bea31d23e29c3aed5ed8b729d2464ef6f09e7250d6593e339a00ab0326aa052b46c1a005ff04c7fa23d2f5ea22a548cd23dd329b53bf726a7dbd42d6dcf7d2a62d03f6ad07e91bed6f728003a8a3a3bf4884f9129126e12dfde3dbe71be8f55f9af187e3a35420116d41c03c0b484812881b2e7b359675c442fcddfc8c84579eb614bb717b4cbdad42c61e5ff39c1f0e0a2b3b9fea1715767390b0ded6d3deaba8f3fb1e36d9da08198900320aa810fdf73b874656b2a98cb925bc55a2dd73cd9916adb17d03606b1813cf7ff573042576d47a37216e1a4e3b45682998abff4eb1063bf3f7d3351e67ebf40c5f05e1d0b07d7c3cf4544e0422771e215f446874174a0bac4d5042692f99d5a1ee679144ccbef51b776a2ef695444606a0b09888f46a87a326836f9498a6dc084aa0fac9f31f4d9d51baa26cbd3246a002f875d16fef15a22b72a5e6c99970081cb806a94d29ec8a2a4c93adc1cb87b72e23e999b1601f6f0427caa8ebfaf8680cb89c2a01633baaac26e702ca977113cb39db26e2450cd358aac7232552def1c1a7a3963856a0c57d5288b3001d6d7b824332c228274496cf01859ca028896be48d0533198884a245d85c088ae5e1b9fb47d8b3ae8c2f801236eb5e8304619e1c73a94acd83500aadbe4d4891773693dd50b4419aff3559c951e0b0f76ece51126077227bcf6ac55c0e42bd3c5cd5d2d163aeb61505bee89c584ed924ef384e6e5c57054cf23c9bfcd022adb41b243e7e8aae58462832f631551c22310e075bd76f313968762c54320ad761203c8d9e8dcc9c7156eff94b334f32d34754a341f5a2ed07f6e3a4b7a8c64821a94777bba53260476ce27baf484f78348d4875c771fc73b71ebf0b8d060b5d3577c54a5e6fc2e322b18a20ea185cd68c2c72e3b7f385ab910a94c99ef3e2fee4b13e6d4d92860b4c4d6e51c34c7e34254b5a56d822467edddfe946b21851137780384a51b786c10c671774048cbd7a45138937f1a746d2e2c847e9911d6384360b3d483186c9eea9270bf3737f229035ac86eccb298e91e9eb351c02a91d39697bd4cfb7a657786cb6d434d9ceb45e3d3dd9df2e5124a13a703b47cf64891b58f78647a9c038499d3cfaa1fd217ccca4ee0b76e1c712ec1d80e1d0bef8ae104ba8d918d07b754784e003a0a91e80c3b4e9a31bae326058da43b020980a940189b557abf480145c68cb799ba370ca29b35329355b3b14cfb8e02f9f244544d75b478866dd76206f9325e3f9b4bd62e8ea57252cb1893838007fe7b52c4ec5780986f3b252069e674b15ca22a4ae4ee6a11a206778c5d37afb4a5ecb76d01fcedb9920f81cd8982ed9c3b57e3bea980d20c7a2507896ee7fee671e47cc715bc018a9979e039315ab85582c75411a4843ae84314e78a5902e24feaf93f4d980350adde10ecfe01ec696fcb76f7de56472947957c94299c16fe4389715b6b19617f75e85ae4866ba6756d6dfd4b8f4f6811bd09b299c1b892a753c6037dca1a64d28530be836cef1760b0f2b0cbaee055888ae85d74fd3f147203391602c50b6bfe5e5fc2360bfcbdbfece247f4b7c9adf263d9e39236800af2d45b3f77067d155763cdec68fe2517e773c50953346bcfe3ca56db8df83bf48e4994d666e8dfcf7227f3c3b8bdf8a48bd8139b739f3739d110e7bbd4dcb34fb8c58e714ef6b418d32d79be91c5d7f1f1ac4674b272bc7a4ee9f4eae33e969b16fa90a69baa9a7ffee6b85380a0436edd42d61bbc398c1fb1b8070f45a846650d3b53ccd99ee36359e6481901c7db99834e6af6dd6e0688ae0da69f88a4531c101a408a852e2f7178ae918591b7010098214d9cb27abc53a85d5bf218ad3d4ed419df362ae2ef18efa23d0fbd084412906e2673b80a2def15198fcd624d857bbdbc88763757a2d80353934de006256df0876e227a76cbd988d4ca7811ef9c012164e4b146f6db1d78454c96b76b25612cff8d2f665b26a188218498941e019dc3b57c7db63b087792f9c1908f91b4aaca491bd10821ceb577525695655356a00920a84211bebb7507e38ab1e50453994cf682dddc6514a3fb19a8f50229fb9666390094f5dc54742b851071644d92bb298a7a9c5f9fa8fb77da044df6fc710f6f611decbf2e64139270eb6569d7f29ee4673ba30e2bec0a6205f0e6b0655769892b48cffa2f7ac1c11983f4823de393023f7e6864a46e7f6e3fe785cadf0f43481a19a5134a091d3bf162a539d9f66607558b82ff93a0b8e0ea6071a2d4090b20901902b7288f74579b100ded569b56685c1b593b7413556e97e450d4eee54fa73fcf7f42258e65c8791475391e5302a9b58671a4c036c36bbafb99dd7a248f407b956140db767ff30dd8a199abbde95ff45552d7f29b816ce60eb33920373890c6135f3fb4e8016bdbe4e98b892c78df8b10732195b21de68ba643545badd9fcc1b1cf9b4c53b8a765b1d38b212f4fbcfc40693e340b076d2e5ab0db96f8e1f8d10948effc3a041a3dd7e6152e46cc8cda5d9b6a2816cc654084821b6c98ff29867241aa5f0b6248c6bfa7b5eb037da377d080521c55eb7354bc4db0470e7fe354955056ff5851b792e18ee9f1d5e1b58731ce627b58c2fbfd7a6a26a0d9e2dabdeaeb7227a150fb14d6022ddd4e87277b09cc37bf9001738d476ddb148bd66444db79889266fe67df15a80e07dddc6db5b1003e638c258e96abdf6a1c84a9046bff8116ba29a8a25428f6e6fbf4601cd9d000e301ad8d81abf015402365095fa5bfa888f959ee1f167865554422a0a959ef54c21494c8113fecd5f9c39d45ca84a4466bea884d52889c79e55af91c97b857725806a263a1b4da67f377ae0cd98b35e14c083534d14cfdbaf3bae8326c77b0c0117286cea7bd4161c9aa07bd011bfd1f85dcd1330fb6249f2cde60909c0a73e48ac28287b7cbda49e8e54ae4d5d96247c5d2fcc68266999cdd5002a5aaf329462081561d4642dd96ddb3e802cc25fdf07875087dcdd0d54aa19a3ef01dc4396b7f39520dd7b4e3bf14905f95589438b00a4d94c74687601f063785ee68f03cdaf35506c7e0b4854939f5221b1f969afd17c7121180ecb2807792782f21099c0b395f04d9f5a43acb9a7cc01265cf9d3e1d7c110b0183551572357600ba62ef829dc1acb28b166c9cd271ca09df81d7f987d702024cedb05482bb0021a9beafb7bd278ef0158d93535e8e906ff17fb3c5e3627595c78e6cb4258dc6f0835f4530f3fb2c01397c5785bb2dc3c32ffbb919bc98ec4415e7d2cad7180afbbbd75874feb704644b65218a54d9d4920f88607b7ff4c68b9c8c9aff13f47cb1d7a9420a29e598a7dfca79f7d80d335af4c84251aa00a4eadfdf1dc768ad6ca15b67aa56f1f1593a7b3ed954a142609c941dc732d746f7c06461e3ba419d8b48ab74e9e20374d6aa8214b8073d240cc5521b779564224fcaaeb7855e4b6f39166c739941caea9156a8eeaea627fc6863b323cc0fed4d0d6833426b19c27cf6a902c630ecb4cd09ed344f15a7ee6633f63bd94cf8ef01c10786851d736351546f02ef39495d86b0ccd8a89592fcebd00b509e62e6c5fb0b470d1205018a86d2e6e1712aee21c21683fa7da6eddfe7cd019605b6602e833c955b5bca3ac487e29f22de7e51ade9bb910e40b21f03f49b877081bfeb7554e580e5d4c5858ddf13f64ba9bc0a5e780072a8945fad059ccbfb74a4d7ef26da8688311f9f8862e6d78ac0455c8ebff795b74deaf82e614acedc16e196e1df7ea019c19eb0a9d049bddb2543e8355ed2ebcd62a72409838914a7dbca8579fbcbb2b41bc4916052723755ff17e7b497b463238b7b5bc4f8c25dfd37c22c1e084c4ef5a433ba4255fac4999253c38306f6ac582cba17f74d90db3acf5af324816ac54cff6eb3d6774de5f4936a0407392417e9caf5e106de7f4ceee7075343f3c1c63881d7e68322d63c1586dd31d78ac74646fab13f7a47e803983359f4e2dbcbc236d001faeef53e077ac12fd57a985aa7fe106e8bd7f6659fb518c53097a5f339c67e7f49604ae00872f6d45746de48cd8db0a06e96866281c42bdb9eb8eed2ad65c1925a8da0668fbc7c5d4fe2b93c17646fd9503c64895a53d0ffb7ed12e48da36dfdb6cd923c3da5e64d27d4d58f2620828bc9401d2479d29cc3e4aacea36afdb813e6b69cdb72ddb9066773afcc7a20bd3a42381cde70cf03aadd685e89b5d3547752cf3cbecfb2692b8765a47e74035467538ad001cfb79a16daac5f120ed2a78a937dde60c4c27b2f1011500fb4370c8565bef358f70ac4ba94ed5cd6d66a45e011591e6bc29c63739a1d3f1aab4a3a26f15ae32e876717f874b1b4429d08a3fa64d7593a698eb6bb7dcfce09d9ab61de9ed53c0ce12b0842f27011dfc33c464bf67f3b472a47e94943df8967cfd907fec +MD = f52e19999a5773b270b3ac58b152965e6c5b37ebb082d1f7a6d723ca9cca7e2faf4bbcd94ec326f16d350592ca7c3210675ed12a03b559ba66f9e681dff9ae71 + +Len = 49336 +Msg = fe3ef26e61c39720a8176696e1dc07251db3261b7e0124a591f30df0debfcb8fbe2d991d6d57ba2360ac6a3bd93b1576b82fc7fc9495e4f20a6619a155c192d41f786d8197ce6facc47ff68919012fe1490a89b65d526a2a039a209d29ed1a16ca2658e408b220857c97f3c6cab5bf2c784c569300bf1f1523980b2d81cbcb1c673f418ce88a34742ffd473b13e02c20ecfe15d9a5656b7a1367c39985e40eb09dcc0fc25edf134285b7dc301d09de854e28aed176cab7237b0f2f295fbf499814d3acce923825b728cf98ed0fb83d2345d008c3987869d60199362534e5e69d755ffff8ad1dd19abd4c65b91276b1c17a000df736f7eb5c500cc2d42fdc4b876875f088d71682b5ef372ade4ec9a22994bfa4b476cda37d0e70ba7f752ee21e941f67c537ac9dce6397cfa2ea3c78213c16b5448084fb00e4cd056e3162112aa2644cf9f6668baec4743b4e0f549b721a0b29ed7da459af792c8de989014272394d876a3bcdb41db8d75829e49b73e4d5a9e6f895b3275076943938a592dcbf02e001602f6780e2e7c70d7d9298693e16f5d5adef3bccac820ef1a2ae9d47d9a527a025fabf58c7fb4c429040d3e34a84f9de53b4c3b08b46a19d70ccabea88c92a4d00c35aa292996edfac17d54acec8bcea330bd43bb5695526eb26432f9416f0f138b2c2c70c6b36cd173f2507938946df961df5d5f194327258e5ed7dc436817216f17e30fd19abf219df4b806170a0a7c212aee6086f416a0230313de1cee5bae2a516442d4bd537fc1fd01fff25d128001187d6c3a189f6303098d5b38924afe4f9126a63a8bd8406283b4b374fe14c9742090de8d312ff290da9ae020c473b6313fb0c69d86ac28122146bcf96d9f9d1cebbf43face56b36eeed3096025645a91b59910584e4d7b335e4e990a4c019f4dd25f192d509249ffbeac3371157b4fc3ab261005434ade587312c421e9e934996d06da7f58610ac5e2ad0ace15472a59790e421ef612b5e43869cadaf7b4f182243d147b56519a53c35bdbe1b5466eb5c7a8232fe7338688f68a198fd6035a9a906833abdad26d1c091f43567607818aef9a3f92873be499361a3cdb0542d4352a2ed48b4661e790fc8dbd96c7f9073b794af401668a44a79f80a1271601f2f459e75394399ebe55462dc71d3b996439fd30ecd6f5ad2b366b63e30e88bf3b6ab8285d4114d745db5e55ec7431672d18e3e2868dc522fcc8421a7efbcdd911eacd784e2c78aa1295adbc9a1659f0d65ab5e65db0556a5dcfbc3ae16955ee1af6f24da2b0c585a906ccb84c8e15b4d461eba2eed91711b2df324b96f1d17ccb31df1ee7789c087db133ef9045e531bbe10dae96529a87a0593ca32c0f90f3870ddc72a8ee5c9105376bb8f1c848d6013a947000c7405a8ad033f7fd2d44e0f2fd82cf538c97cdd3dbecaaedafd13028e1088d9aa1b8f8e6d6c0b0a6d54dd373835abb73cdddfd7e412f3be046eedeb776e25de07c54e148cf6b4395821c39ad31dc9d963c8fde48f9bbf276382210116eaa775ea1b4b2354c8c4765de4081e48b810c17533dbed8581b552bfdfb92eb2ad95081cc48da10b0bc3284245b5adde2d07d83ac583db0feb5ea5e02dbc5895de77fe66691c78fae637b6d0ebd12edfa536867927fc94750140898d15336905a6d6bf8eb2018e6982aa8acf7f648891472634fc004e02ffede567903e25484b2d38b35c4643cda006a30b07a877a53d3c5e4889f9820cf5d4d5a5af529addaf9a28429aceea1be69baba1400f106c2aab662ce9ba9e999ee196adb3f69b1078152bd40ef1ff62856949b4415c3ac5a2bdc746e4eaad934339b2e563d42ec9f0c8cbd181588989c39705acd336fa98eb9a08004131b4e12c07b1b789945ef05dd98fa1bcab9078e94e67f2be455acd4e69b1c1ca39bd6ba171198aebde306d0870ffac84911d173eb5f8ecca32614d13534bf045a7cf19ea9f74c55358ae2839b6a45aa4b2364e0cf53f03bea517fe827f5df77b26f3d34eba49d287addf0a38d20514e2b7e6059935c49f644585c9e3156f3d345c308116ea21184f83cbf94cedab40084832242f9e102982bbb2967d3f092a37f18e0b8b5683ff75837bdebe2f1c48dc0c24931458aa07e1aea74e9923b4264e8e1559f227f7efbf54f6a2d6bfe29227acc33a908a1aa349c76ad77fe9f7993fdbce5396840550f79e442bdcc68588b0cf1701ed5ce96482ae051b77ba5bebd37fc0e2be96368ae30b6e63186b8b90411e29d171f79eb1530a7f01c9be6784d223f3ecb18511054c417b31d2d77e14a04100906683c1f48584e170bc1ca3cd046e705ab8781f2af9e8737c5131e57b96dfa4281227db94e0c3325299fd972c31093e151b97e65fb4a95f2edea2492deba01e7fbe0c73f92c707a8ea888cc0a209b6504220bf00d432c462ec1523192672e757fb15a118b3132c20c31e6c9d09acdee0e15fcc59d6f18306442682512d22eb10f35383db2b7b211b47c3e16e46747e01d3b91eb75001525b8a90dad15f34bdb1690ce80d685976f6ed1b93cb04fb04318ddf3ecffbecd2e123d685203932bfa7e0b45615f648ae422777fc29a1ab020e6434a50a271e5525a47a29b447a76162eeec569b51c3379b8b7b7300c8ff17e71b5bd9dc5e0089a780fe2114070d5380e81751e4075393518d9890f6d771865a07b745dd2d4dc0c54dd513a5f3def66060c7e0a683745212a251ee5259ad0dd5bdc9817301509b3d7f917a10aa86eaafed608b59629fe43d7e29e3d9cc0bfef8a215154476b3894e7aa5bcba77bf70cde283aa630140da5055a319c39b18da21693c69b7f9e11b96d3a4542a07c35938e4a3c65a0c0194f9dd3fd8c6634e3ffe577207440753b2952effe8d5b74cd47f684377a4cf5cb4788962d948b13690ce0188667f2b95fec7c12ae34422a6a30ff1e536e9e7bcb97acebe73d0e14c6d3efbd21fdfd32240bd5ea7cbfbb68b2578f5fb7c7fc19c047f319530d5800a25cfbad19bdc9a8338d44c191b730f44dc38f908c10d099525d446a9b8ed19ea7adea319530bee3337ab0dd15a40897e47ce8f9f9ce81c12ae38624e448e1b87bd0a691bddc45aacdda03872f0cab191f8b80e2278b775af0e0a39059c2f114c6cd1515ba4bc4c7a9b6240707798142a5f741933dce1a2b4c5d82f61f84677c31aa2105b405a5006e15fba5c672f2da1fc812536420d2fee4610b9e6116adb56371b1a8d2904e1ec40070a9948066a83407da6cc408079963f426cf4501298a052aac473d7629e9557e6b5a982945758dbb8324840e21c56f1ebbd3f3cc45c2bfdbfc2a1d3f9c28c697d402fbf8f709d1ecf4c4cdba884ab0e8b2f094ff6824388e8899997111a5c25393e7e472e42ca9a21593c695a4f0d059f36f5022f97a194a38dcd996ef26efbb90517c2174a6bde6cedb9826de7f747a67984ebe628a0918f43a06359e74f5d6b48aeb8c103eb4bf07e26af59cbe4651f4b2b75a0a1db1ffa4fd48d786577dade5d9583b1ebe3736a8f2658b4776eee98307b27f59fab907306bc6030f962f460c85ebb708eced529951b06f486f1447fddd68b4b7ebc83880cda941a1fbb2ab12d7ce8734907f1bc247752905715f75487d01818cb6869b7d6a1819a44cafe4dd1726330c7494990c1ed942e844777a4e2fa46e40249d370d8c3c148052cdf7578d1e44f65fd5d55d1c064158af055ef53a79043bfdb21419793db99dd5b5ee6780db415c18e9d69f8b24aebd7cb12927e8a9cae609703b8a7a4291639d0ed0f43a88b2a5687aa4b8b15a127e7122e4cb7f5c49a70f7cb346d773233b7181a6e8014b1f39172d4892d7d1f405570197c948b907e7d9818437d8f9f78b1ab6772a1e4c1180edacc91344b1dcb9f5f548098be98e0f2d25b744c5fc95bc61544ba2d9b410e2b29f2f254221520215a7017290146685d4105354e5a386370c042b3879aba2c72dad83af1749df487dbec9ee9e6015b396eb605181175163e36d1dd448585197277fcc980c520af3f6e3a965fef825ff3a5ee722e1807ea7b0382c5e8ce4a4ba68bd12ca69645c6b48bea7bdf9021ed38a10eeaf4d05956d390c5dbe8e772398b80e5d2c76a65c193bf6cedfd5a786964caa80e00dce1f1c4792badc96375799df1ab6a67b419263973423b3da0ee7b049d3a29d6804a41ba2714aa0eb4fc726a48a2420bf5d86b2231fb0215260c88949345ecea8cfaad4125215f3d7e5fca5d006b0828b20c16fa8607c1283c4b2891475bb5b1356bbae5fdd24bba0227c802b3561b427b5ca00ee9e8f6cb6632c18713dc22cf2c25e1150b97ee28f2dd11d7dc03f9fdb4229cfbd82f2193464be9e293479298c3a1c65af8f2b4eec2f82e68e4e5229eff06742ddb4acff42f0f0830403ea3b2be77b13420634e9ff4f18412688a33baae60bc315dbc5082b2f4b2fca521d4815f10581d2c7a0990fb61a980c1639be554d9db92f9f461b3548560a43c81839937f421826797748668b1052099f1c98384ca58cf1aa361faa64997d370ee5f7edb9b94008c5c2dd4af783d7e5cb55b39b0caca324a19dfed0aa9dee6dcc8c696bc8f2623e5388400422fa8f6844ebf5c6b43968902f839ff043e9c6aea9137655d475e491cad159dc33fde259afe648006dd542fcfaf1ea5156066ec24d8408f204cb30c9d3a5101952143882b74f93935f079931aaeec73d0c7a4c7161e6068b817bacae150d4d05a9c8f9a9022dbec5b157d6f8e8831efa8dcfca838d425768730dc2073910f8e65da08d973888b0df8c4d5f175cb7d7d1008c4fbf789fe5d10109d99ee6b7f90599255c140268532817729d56ad92da0a8d3a42eecb05970e53f85839c50938aa83ddcfe808d68eea7b4df87f831c0fed5e600dd82d7d55669262a9a17d0e9d1d43524cdaf1d9496bdf67d958885e5fc298861745470d0723e6cd339eb7ce11a5020c3cb3657a6cf56c46a6ab625fb0d06635c8fdc1c0958b76c35ef81b527a8be892083b0ec0e0ce4974c93eb927ec60eef388c7429be8e76bcb927650a1c2181c6b163a91b38b3ea079a8d936bff9ba584bbf6d72a8e67eec6e37e1ffc3cf91c722d078995b568f96dbad46802ec126cdc2d5b5faee789a2232b501cfc18b41103c9dbcccc1290755243e4c407c2aec75e232688275878135a2759e69a2dc6f2043e4d0d2ecedf005dbc5b21eb21e5377323f4eb146f97c4c43dd80746eac621ebf0f7a54e48890cd89a941c1d784a4fb3a622e3068b8d38f9f566e992de26333368583fab2e430d6b552c1d2f343282b8304d1a6e3aace273d493280e866ba8732aeb36b5de81748e728faf80f45242d948e00bcc0b9b53ca51c92d0a720af413af2d150ed7b8f4aa893b3dc3171e329f566811a06cccff56039573270f88a8ad7b9a7506b87de047efbb62664afac482ff61c67bdca657bf506494d4dd692898f6bfb14def34d9ff4c8c97dade7c6b1c9a59b4ced9dbff6eced2fca45a21067ed7096434ea724438f62b58916017a8e4bdac4709f2c258dce54d25060444c4b76304086c38aab17d93141f3a6e610043eff617cdb5fdf6821a5fb88a7a48e5eb414c08546862a44599e3763657cd03d297b3817a71e34b07047701921aa1ec72e82e0e7de82e8f1970f5d805cac016194b612ea0d516e8d40a2faadd73f43af6ce3665594672e471ced7df3925fed970718b69c14e0d3261b1e60e9cf49473ef7a01b766f1b446e6fa15d630f7bda080b09eed6c4b3aca488236c7713b1709b561fc7f37787728d1891c679dce911dc27f1804026b3402e1019e4ffab6007ef11ca3273b49300cda0277fdd0092da3ae438358141c6d9ed396891289d3d5361b108239f2f2835558eca5236835d7c4ac946d5421ed5bd098e783b9bf32f9e1abd40641fef2c5a4e6ae1052d6e3141365e83282ac3c935a994b2a900b5202e42bddcbb9afc89b7dfbdd66169c8f86f232b58f5e23a8889f5d57ca5fee9f74d003943f1b85f2594310d102e9399994f3bb92b06118bfc0116d83ff53d999c417cbaddce221fea396be5f73452eafc29a68f652160bc0be53425646266ccf652dfc712198044beedb6caf33a4fc209458c356f0f77d79f7c764551b4218befca51e94a9c79d78bfa3a466c0a3129a8ea1434af98fde39f0f05bf70b315dd6eeff9a7ed1db6de38a61ee0ca6aa127c16266138f839be9f3e6091b2827ebca5c0b00896365df64ad3a8b21752347c53cf3ab5a769af8f08349a9e2e0d74a5a9f648d17143c9b6ed2fda88fd6fdca0a01e60b92cca3bd0037800d9b028cdb962042c9da696992068f399eb453bfd3fff883ad42f8679121f7d25ecef50e4685c7efdc59c8b66d33cc349418553309aa0a11baf264ae1d5cab89c4032125322f7db2ed1c9ae9d4fe7138b341451f15151dda592a774008b83beb66c3ee99479d28d224ac48cb6e6d668b22b9894c9e481a24b37399e4fb3e8f416d95c4312ed6b198aa903824e48b93750a088b824d49ea38f05432649ef58fd200020bb68fe2014ca750d4bcdd5de04093b4b188ca22735e3756aa8698e524e848912bf111caff364275835a02ed3632e4476528bcdb9fddb0ff6a13921634c96dca8ca75d95929da486acc8fb427b9526490e28cb7a55ff84dad8d23391a8be963596a31b4ba4cbf50bb9cc6f6499af80401351a0097d0adb6c5d8d245d690feb5bb2acf2f51c065c8d112f075c76c91bb6de6be38ffe47dc3f620a0c825e0495c346898a9ae19701931cb86a31fc2a1f32d63e3c15c2feb0da4d1294096ee5bcf5bc038c42ddc60da5423140eb111cb33d639151a2b0777ec5876d64f983f9877a7ae2a0f5f7daa84beb6033939fe5ff5eed2ecd3eb0f96f8979e3235a84891fd9eaee6dbc171df90e7f0fe92f8dce2c1ddcdb56f1aacdabad8a3c793458ddac9a72ee9c9e25d5297566040acac31f6202996194c4863c59b9213f1090e93d55467cacd4a40a4b5f0908083f692920c8968a8831be2c8ca235a8b68d751ef142646feebed5acc7c450cee23016a71987601817d2e88505adaa86679becdf409c7cb37d0239f49080d41e5c84d82551c6e8abd8214877f1a3a0231ae0fc14748b16b02147d8caf0ba1d613ce3b88b11aeb7ac91c6e9eb96ab9de79904ada5d336bbcea135bb172d9bb1004bf7bcc1a16754810b69d0ca3eee2b3aabb0077ba6c6f275c775e9c1904a1a615165eeaf491847940eb107fa2f93d184178c137c3462440d59af6ab261efe0ee16d8563e51ea194c62469565b1c3182da63fd891c73338fe208a47d0e8b4890e61f6fb5400045110ced182f10ea6869d20725ea3a56156b0e4af87056dbf9f28fb67e5da9f8e774a1bfad6888c63a53c4dccae981713268b6dc632383738aaa6add41cb976b2146111689a117523fd73f4f6cf5a657131f8827651518f4830ef3de5a9d7cd96afbd78c4d6740f0d14a8df97c9cfd7a4fe5ded67ea37bd17bb6b7341931eec62d0c618b59099a34a7444d458a5e1b5d41523744208d409ccd2821991e2751a3fffe4b9e4d2687801a5b09ce16a774628ffb3e0afb00fba8ffe9cf57c9ec3a155c57f22f8a3c9d85b2d53ffd92078d3c94373f855ecd01a8ac521d1abd0f2c7cba9ff1c9a0ca409809694c4e8d0cea4df69cd86ddc3ff6fe2b27973c580e9d5c934cc6f7213e1549768ddb5b781600191fa2850ee3e8502c24a0ca373b4901279ec4ee327c36801c8299598ee3b1632077dec203163481b5017432b5d76cfc8015bed3f622121583d6323363506d87e6a7a80bc4e3c3102b4a084d22acd8e3d8909124dca37f4a11b9df15732eb8e2fe2794eececd128fe176d385f83c2b5bb3a7d23d3080cca238d6066c290f1208b9603bd7ab3281658a107c89b0f5b2c883b3f8a9ac3a88927b933ea41f52176dbaf9f352c4d4be15979f59a4e77a2dbecb5d7ad6aa4141bf5c79ee59a0a81796654d61ecc5f427346c8bf183f629fab31d0cef60b535766d5e029bf96761c0f76ae2fe1209413b26ab5eea9387959829db3aacc447779540f2c5de1fde1f72151e532e4f191c8880c6909b4ff64d84a7a87f696deb883ccead2c1b197f51c9840206790060169dc730b98a35eca24e90e7337bea2c07cb5affade982c57925a8b87574d298afc95e8c423dd1a534649a2a0f7ab55346cf9a7ce3aff83b261517a43898420d48b9db3bc33cafea845507d36bdc5c2bf5b7f17735f4c65ac9263557c859bb4881ddb1c1a4fd2d17129e8e95c1274b007522f4a14d5e99aed2b7a6359d4fcad4ebb376b07005d5a55faf82c3a7d20e6b458f187d7223cea1e377ded03fd0dd3cd6c99e7aacdd362fdc1678ff986312d6f76ad15e4d0af1de7bb543ba28838eeae38e9d92c3e9cb111861f5ac1b50f4de0b34b3d6467a8faefc1e7955dfee4c598270f89b4db200f384f07d5b993220eae17b3477f6d914adf501e435ce678213442f43f6b2dc8441a2607480aa7d33881aace7b5c6cd1d55e71e18cc8c85eca2a907e4378bbfa17601207fadb7988920375822024ebd063152b18bac92cfd88211996dc040d1f52b21cef345592aae5da7fb880fe73f6bcac86ab13869bbd23c2e6255437aca0bbb74aa73ea079a2f9aed059e1138baba7ca8a82e0289d0662b4fe11f1381fe31b18a61860e3b6d79628714b8c8bbb57 +MD = 00c0541af4657e4296c95c076cc0b87504e771aecc78e2259b3dee92b0ef30f59025653b8119436a86aba5e7b2155ba2d112532d3542f5a9684a6277131ab387 + +Len = 50128 +Msg = 793d0bbd04099f5f4af6dcdd71e139a2c4378613ac137dcedba69b2fcbdc2e19673caef3081150f0a2c7d9944097b074ad67383d74eb5cf70b116c8b4c9c2783240e19128fcc2754c47d68d6acb3365999cd85d3351c74b7b94422765fe5c346197bf3228383491216e030ac9f7cf2dbf03216dfd6ecec954b0866f9ec0129e9ad4be42ccb7ee1b202b7da1d013b0d811b5e92683fa4ed1a2a25e01bdb3683f4474596364f0515bdefcc0d32b839afd38019a277588b9eccbe6337e414cdf6f05133ae4bf7600dba45e572f2adbbfe5a882bee1309eb28366f8a135c7f0dac6432dbd770abd6f2316bcbb065c80c259d9b5b1d443a0ab2dda6611e8c0540cdd85205b7af53b0ecaacb467093f2734a252272d812d332654bc9b1fd7b8cac80d4197bf60fd73722aecc1d5a85113796788339c686bca9690742425b31fd9beee1ef043d991fb0bdc4d61a15420ea13020287590a7ddb7e59977dcdeb741533f863c6734531366e47551034ad2d2f940a577f1dd7e1ea6018ad2472e143e1d9a4c686d82479ca0c048a5a1a03e4487f08dda74561168bce760b94af450de4027badbdecf7da0a579c53bbcc08d4b926662b8c5a36aa143bca696afd87408061058fd82c5fb08be3674791c51c7d164caab79ad6b91b381abe1d03c8187a4b57aae37200acbbd331fdec888fcf5bd4345f184f4568c84bfd99bcfba989199968f45ef8246f5a64c5e8a91c9691df778ffbb43620e65fe44715bfbf0c49bd1f177a48e6e227faa5118003aa73f4a664a1f911dbe3824085a99aabca8aeab330e5a537dad4573b38978c92dea2781f403cdfb7ad27fcf8947790f7aa8fecca7345fdb230759d8a83da36cd05ac8cc88ea3382c26488706b543b129db95b0315acaec3e74303b770b5c4718dbfcb320a4676ad5e3dfe0e95c9043b8da36d5a65bf7093332bed17f5390161cbe0d7bc6360c105b42587b2efeeff13b22eddd87fb2cdd46e85bf001e1182c3f186957079803a112de4cb63610a5121752253854cd0ec0dff1a207bd384701f6979ac5835ed095931417429d36725ed3c46766ab260f6c650b2b98efcdbf3fe9a81c57c7ff157652905270c2d4ba1007063ef8e9aa91287c8153244825f32e6ec6688e240d24cbe7bf88e1557ffede17a4165faedf469d9cf0a32a24b555662c7ef9c945ed90feb91e2514b39cb3218c0a881b491892343cd5a61b2400886f793e6aa9ac34ec974d28b18b7bcf6982eac60ebc670b0674e2acd697b49bfeb2fb81159fa5579a1e2a5bb8a5fc6ca46aaa5304a3771b15d804f2bef054fc1ad919e3852befea1c0bb74394f4d408d651412e247107bd32e64a23c9e593857f3a5ae253deea5104d8aa6ce108913881cf55d3c89587860027f8cc81b7eeec9e5f44e9fc190320c71d4a3427519250394d4ed07b9174f9e005b7696117c575fad05e76d86ae8cde5423d25d25076046f4392a0a7e56e8d6517fc66f265c5d617060e258354f9dce1dfe9de6c95bab9865ac7c0f811c2b4f1c73e61b0225e716598ea528767c4c23f5ee6ba7081bed430fb64bdc697100538ac03c624edfdcc78d169aa5f03c8127037aa5668b51108d19deff3bdf5d4f28c3ed320cb29226bc378028964c972420702ab1ecf904fbbfacad00f18be90017ee822ee0d547ac3d7d55b6c531951e576386f801fb3d9620efaab7c9141cfb6834079aa760065692871caef8483f55140517e26c3903c9fa0b5d8a8a23ff2863bc05dd29fad50c027e5d77f8399cb29f7d64d8f75a5e7c93274ee2fb5f986f50af045f2e4cbeb6d68aa1798dabb41d3ff4f54068075697356c0628e671f1b976348a887efec83c57d26e1c7e46907f3d92538388e7f40226020cc2110012ec1e7421c0e0b7fb86ca7f4fc895b337bee17e050a1fa33fa6ae10e81a44b501f29096506f1e1f607d7ab8c9e5989ab1c473e1933cf5e2406917be23964938c8b114c3a0fdfedffe07aea666db50a207773be28680d14dfd34a73644a0e7306f13f22397d2499fde0dad71ad12857440c181aa65407d8b80f0a89dd39fe545fcff71ddbf56c6060678c04026f3ffb864898c60b8e3bf45d183601e58fb0c20795cda1aa0f23fbd802e2f3b5ae485157cb7a52d08d16023f6d718de5c1b2469ed147501c00c7a6c5419428cd04ee1338f321439db7128ccf9d217086769f5c7610e8abba90e41ba88204158109ad9bba5e421abbc2ddee9e15ea7c2ff4c46e3dc32616fe35e5a4f262a73caa32e3655c6b414ac306c4c21b7620e34ae2ce06566684246f4668dd4352121071074bfa8fb8a3463c197381d82c59588fb728cf407987468668ca4f1beec933adfd23e5d4b4ecaf9f6146b854a7184e36e841038c8aa40fcc13a654dc873118999b2791bbfe81e95574cad00184d236f90cb34dbb086ee2a8bd79a915b9ee31cc57b3a8b5e4178606da7c536f341b954e8afc282c815c61c4ecb09647f55501ceb954755303f2082bf8e7dd0e33590baff9980d7173d0ff7917d7b6f3d80a1b1946868203dcb5d22d6679b76f011eec85bef3882a5e713e6dd57b75a9c071f02475c67948ece7968389be8cf23bd1ca6861ab02b7afc180fb9c087cca5d20f388cd90b5a2a2eba7d6f932c848322627d0883b1799f62679aad20b16d5fc9bc7aeb471b1a19d5698903b62f3c18260775679102141b0348b041e0fee6d2d56df1ed0e607b64a9cdb37a6bb8a0ebb255b52dab6da5f6c50279fe6636df06dc69c51996a226129430245e1c915803af9266e13bb8d43892df1c6b1b21ff04c7f91df747a8c32b7dd8043630800b690307af0ca8ac48ea5125c1116786efd37f6521108a3cf9b84b0e7a8b0f4e612398fcb9355a11aa14ea1d9276b32f577bebf5fbebc52470bfe81aaee421c3043b54b9abe4b9afa1bc440fb42465e2dd05f2f1d0116229d14b3b44c9c9cda699b82185aea22d4dd6ec494352a3e7682c787ea0cb08c713c4612cd4f3c27ec1cba3e6aaeaf51eb5f0abe00092799f89eadc764b115a5eaaf00ba311535899da3f038b6e8668f4ad9802f1909c30f70cc039c13acd8e8db6fe508845121287baa0e0f71aab8017fe76f76539995055bb559849b5252dbefe9539c3b65779b029944314f580c7ef7031952244b15f235c5200f50441be584b5ecc3dac4b137ceec333c9492ec4e5ca72e111f90be7c8b85e7aad6e4ac9c3650113dc71166b54d3d7b8fe5cdcff5fd6e0e51a9fd06fac97220d593c68d766142516894cdf069e9e75da9b78b301c65a24a8267f278037c145c1e2b7c26fab2072dc2d84ce6ec31847a289e3db51831fe5321be239a1d1fd709e2e248119f950926dae620d2a2c09f517aee57b77fcedcc8ce30e2e5ae2144bad26cecc5db96d2ad1f62ec1c240392741f3c8bbfc9b8b81bd644c2d33d2cf7df5b2fcccc4513fe510eb3015be666f842940d2c467c7c3abcd88e35eb509f4af7ebbf5a9d52a8e683377af2fa70875b4d67e4dbe40e75bf2c5351dea67f04b885127028a19ac225e4281f537058d116050937fd110651c00ac5540f9d1ed9eb175e06b97163fc36d43f048565e5d0c30a069b1235da8ce7a8acf95b27c69b3d1f2cc78fa564c383d40aef1b33ce02dcbcde72adfb218390b678b643eefcd5391d1d571d861394a7740a23778267e3edadff4342b941d24594c71f5c5b27f469919e29d5cbd70c1c34cb464caa59f0504df7a152f8d1f590c40698f6e4ee95490d2da45abf45765c86bccbfd340ab4cf2d460161524869ecd4c5b7b614a71451f05a7b1f08e58fd2fa5d28fbb7f0ad94bc68e7f02e2babc44772f02c72e81e0edb930295111da539f02ae1daaea2474b8beeb98204d237b18c9cd6ac88380eea3f65df5f607452dc18b49b1c70a61e7e1c261a897ef2aa2f14a1dfb8bd0d637e8c4165c08f700543d4789923a662af96dddd7f98f5035fb790308ff399dea83652c43a7af6a7590ba3f570a2c86e571051436d12ff6ae4c55fb74bcf973269ac135cc1f12e70ba8e0799c5fc5f3fc18507164799f6bfb5e303a4b7bf4d8f144a5e899095af62a6659ff3eda2c34d5b6f7fb4a39083786f9b0c973845157b348b94b93b0ae1f3a90cad927c38ad1da13a1bad05892e0b5e47dafd61f3975d56fa469a05b37eba3efde0d3d62065371f6f7b7df2064f0f2e940f45a94d4bcbd810f47a9511de1ce4b3ba56afec9410428a0f95dd7a7efa4cea1a1e92a49b3d446a1ef97db878a216c89a894e1fa23fa72458834c68263325c47bd6a2bc1e28285036850419d6c0519711fa551c282bb9a8e6d4a351ed6065bdb50c4dd63d23008dcbabecb8911e31c9a11849749e4af6822af896ca2cf87930463e189580a4495d5eec8c17001213bae8619fbb6d43ea6aa56d7b237d71dcc6bfca876c71228f5960a556a7dc2293f52874cc431d7d01acd6b1e51057530cdb82601eed97342f0c6194f0fd5de61ef301a053ce477cd8d34f5458f3331285f92e6d437b6b4fc4d0d209df8a3dd3315f04a2ca9f53b9dc887fc34b5ea936e4aa146099a855dbdd61529276d0d4506773a1ca9548caba8906d89d30a512468568e4d895f6ff7ec51833bd5b63ba041dfb49a6485d25056b08ea20ad8916b7f4a01033ace9b09f387025f8f1a56754e1309cb4684eeb110ee9352c165d1f01bf0a171052f311b3940389c3de2864d94dbdfb7359809573c14249ee0fb3a3ca50e179ed2c95bb52643cdfac757f2af7b01df671a0a4bc844e8e8904fe0f4d6836d0a938ae53f60225a6a8115bec3236b4bb0e2de22db8e8e33882ff65c26461fd5235613cb05a3954bb73a0f622031cc83fa306728e23184bcab83bdb9f815e00e0af157c3d607e7df5b2c9e8a3262066f675a9f6487378c4dfa958d3d93ca2ddf666b3d15da1380deff5fa87d213d81d89d676d1ef32a10ac1d6c4c321fed7011e0cdac08384fc9104adc1684144ba685445fb89d4d9177a2bb10e4dec307106c1f1e8ee51943283de5aad1e73312db40054b6a2abef529f77c8a3b8aa89f75b8cc66caf4a478062c77d1c0eea71c89cf88326a0d6edd8e730ae13b7df63d07bd8eae487d0275cca6a95acae198f119fb741ca08e84d10ede0a1dcb01d4692e430efdf0c85ac2e073234cd9072d17f18c7111f4f5295911ff2747d25c6aac5211f35baa1dd5e8ac5b8cafd4a98f187b4a291a4e8984feff9f07663ad7e18ddbf0e6d05ec39b6e96268c8ca20fe67c1efd413e9693be4740865282eaba619531a88f65f403d3dc089bcdea2d8159c9416c6486b45bfebd3c7cb1a4ca4d114abc0195215425a5bb6983f4d15c4710894e6038f890296de65b49cbd2c2d81a36e4c3a10d66713a9121a6ac4917a83443aca1659f1345334d06b44a16baa2a4e112b55a2f132ebae998cc9b5b46eded80c3f7948023f67777a387d3789af4d6d2aca0699141a64d4835bd690ed25f62c7fb2a6da5a98661ee9c8811ff4a16d8911c4c753bd91f19386240bf6ba143bca0bc0197158e3b1a395780a9b3b250d3a6c8812733c4e24940871f45789ce422936e45bbd8b85ecae03e36469cbbeaef9a1a072783e83703e90a20a23fab89bd2979be80f71136986bb7748ec34b2b53f378a51c332f656fb9540c7ec8b779b5e945348f79800dad632c00292f4b5c283c4c25ae4980b6b73acdaa8319a6fd315c3a6f8f66ec29315004a3c0e8a4c595fafd4d86cfc27000f4ddc4573c625d5908c13629c63fd34bb8a725fbf73caec3b7f3e64cccdfdc756eed20a239d1e15677405305a2605323257d4e8163fd5fd9fa96b7a849be423b3063880d16ddd15031218cca0137f1e21eeee6fb34ce1f004c4e8a404d47ea7dc2a9c13fdd6d746ebccaaa20ecacf5b02c62b41073963860348325bfe0621b61ad2596e1966813d9a2a575b16aa7a6b4d5418169273ff0203a9d51cb0af71f0f7841ce9b47b8f6b96b18b42283104e17a4f315ad58b09069e604d60cd4ee3cb0ab643014fa4465359d8d311e3fcf33001ee038850ed15f62c1207c2c452fbb6ccef586f5b6f4a875c26bb24ba7cc9d98cd70b299528aa734525a0bd066a3e46a6a5e96e584b006a2611a0051c2f0d607380c4a902bc3ae0621184aa23d30fed30606298d6b60c9e40302e3d999212574e71aca13a264be01b7c3024ad5bf53ce2b55069573ec37622f8b228b3248d1076304f8c9be551d4c9bc4fb703339298460b3f7a4a43c99456d1d870e974e23ea33309c5b877e13115581fdbb6184c91d2d88c262073936b44520d80bd0196342df08807005c8ea756e64d0d3668a7bc01a3c3079a3c958d840fcde29e393d93af0f26bb14119e8a26dd43b614a318695b037098e80d545d9e5196111daa3ccf7ed5824c5425b57c0da39080d156334c576e2154ca74646debddf296abc3086a45ea1745610747df63efafd7ed007cb78f5a31b581f02a30f4fb7fddd92244d67cb352309b44ea36d2081e35d830594d5b3e3e55df0f3a4952307a61263666a68bd7cf98835cf104d083581513445d7053a0b390123009198c138edb037de25d0bcdebe7b9be10ebd7e7ea103edaedc301281e0ecbf10b13fb2b398601774c5c74ec33989ef6be3e50bc4091ab52aea7cc1afa2c7cc0d4db37ddf6fc909109474fd93335b3854d8ee366f823f95a14a14d1fb463a53dead1caa233c94189ad80050b674997e86350088e7d41a93f9451ecacf96ec5a6b19a1c1e9c56849fada93cf94c4eac9e842428895c752ba1b21c332925886ec9cd96a4b98d3eea618e2530395ebf6226247ddbedf23900fef262a93ac55af0e5934a0d0972ecd36dc376b7322b06690dc8bf9b22eaf7b9c5d9e7c74855510ca8a746bd6509eae012f2301a8a1dce21c3e57bcedeb34bc684ecfe05e8520512717dff2e72aeb3910f7ec3e287c3711cd70f351f67c7afa7ba8027fd8147d192ee8be5e8a8ddc156a1edb497d19899cab5ba7de554b49dede5580806a9a3510e5e558d648e13beb178a384b2ee29a2abee5bb8c93be6910983b8e0c9c7f10df56f7f783a78fce6220254b6bc43d32640ff77682373fa137b144774bf72bd62e8904e18d31fd5e238cd55bd2c69418f2a57a21e9c935bbfb3257816402064fa484f55f1b6e94b2d56384b2a7bc4e157b885404e8d1087d06225bf680457943ea51b3b955e5bc9421ae1996132fd3f1a7c16f67a8d81fb0fd893a1cc649ea79a8f82537641edecaaf747c503ea68b742057b1925065e41c8b6fdb3c5f95c2ba857f322170a1601d26bd95284fa9de658b5204cc0901be8856dd269d72b26ace29f0c4bea0f7ac552f914c656ec0348e93bb4f5ffb3315bd06da03892826487d3d52c2571da7283a71f98951c574f5b5de997a914d835284446f5a46a97bc68f69ae13340f393e9395fc3432794c89a314f46cab2879dba3b8a3131d1c384bcb540ba19d9d35552a42a33551b5d15820ded40ff4b39e19e2097e1656a9e63efaa77153daef24d4c521f574f69f89cbf4e4424ab61779740bdf084b397a0c09e409e911322e8e252dd9fad9695ffe48e6cd4505377b9355e4e44a9b0eb43213512379c3ef82f9af2a13ba4df11eb838bf41e628c108722237be4bec1c82e1c4099d2c515712efda84773eb6d7043e0447ea2c9c9ae5a045ca151328ac0a9f84d31e07a4b307f70e02ac8dfe64381712466d1f470a3ca5246592ab350674f7bb794e14a24a889ab36d5baf0bdde3cecc8475c7125b320729d2dc1afd72e96ed1c1d65a3466be5e318d2badc78d2ce899c8a82de5d3f150bad89c686638918e2e745ee1434dd1cef12ac58e18bb3cefe0dcae58a9bca107413e7a9e5a9f93de3b5a8db2b548e86f590cd05ae8ae3a6b0b863050445c69b525cd1dc3c0f017e65e3a0cd4749f2bcbd2faf5191eaf4fe2818fd61ea0fc72e1ce4d2edf7f74472f00dd824f669ac369c5bedcd4a206a3deaabf47c9a4e3e413a48654fb817049408a0c982c7581d8d1981e2c935cfb5de6eedd2c59375be6d40f3f381dad2f45a1628df672889b918cb5e38e5c34d6a683b5b32cd743aaa0aa77428250ebf864dbf22843298631172182d5a93912dea53b6707f04aaf193b204455d9992312cd75a1a72859598b921869bb2631de5c83996ca21fba63f0dfbbde41e5023dc6aaf7d6d04c0be8f129fad05eac4c809867222c4c622f4677b305adcd4f92225c20eafb6d58471bab044d2187e493e0da7a6010cc61b242f6e0851ac3bf51b81c59d57744f313da004c9cc3fc750de66ae3da7eecc34a3eb48dc38be9dc48e84d7d40b21ec6790d3a296c1e8609c37b8fcb18df72310023fae34869094f7e9b39b3b314c278809c9fc2479aec45bb85935aa39c2752dbd7100a9b1de9bffbb72624b705fab2306f7840b49ff8d3ffedbcb7021bd3cfe3433e29440d52d5c8255df8d3ed8c1c926f0cca3c95705b979c530bbdc63e4f204fcc69cca30b39ecce26569034415dad82a58965e41d8489799f7d5d042f7b9be401f1ba46de926f99c8667542e11e8a9189a5baf4c7f7df6bea36693c70fb5be826ea965d91895a6d8d520a7f34062f850145c02e355ca15c7a5e69d8c7766845837be952edc5b434bb3fd75401bea644559101f8315ad533991ce53ffd94cbe160cd398cbaef85d59b57652712edf7b8cdb204bb819985d88d9866d9dafe8ba605071173c0aed63875c23b612d3c28c7b1d051e0eec2b8329efb730e255cb07ab952f66fc6abae4591a8e16b1b53435b481271cd407d772b166d9546a8554347c6d672e8968d15e43630e0aba4d94f5bdba1ebec3f71c9aa3b1553e929924af472ba0c46f6 +MD = da9436bdc81dc6aa3be907377519049371e61a409f850375d3a503060112f0eacf8539c1d98cb3a302f9c125c78ab6e3a3e695575fed3eed2214a0b9e3fc6b51 + +Len = 50920 +Msg = 96bb7a62306a40df8c1d0ef9f11301ea036d7d15e8cd713caa23dcf3dcc4905481bd36f5296692175d3a08203de55f4c689fc69f1cb9141e9f75543edd1b819d52498ef02a8ba93ca72bc14ac44b465518303005fce142a1f0f190803b993fc0d20a8c3b7b000fb7329b415dcc6b3d6ddac9c32fd06e822d673e979f3f655127c9a537be64ee4ceec63091439e6dccfc77128805e0875d2aca05718531a83f38ffc597622d7de64b2b92b8e2827a7b6ab8b2867073555a00e2ed27185989925d3b10b50d1dd46735286abe24bfbad31f6252c556d3000117779fc042fe31d1fd472e98a87d1c57148760acef9f545b8340994ea146afdad751c244e96ac7847fe9c8481c957c3c4f0e1b892d68709bfe19302837158a6ea937ffbcf7e374334dea86ce4fad1da05086445dc563381cf9b4be5b0288ba44f3f2fe2f53b26067ce110f312b0d270a7eb682319fd8d265dadaecf0e8e667e41e4b66a5e51fb2a76a280c7997fdc10341687e0ca30f66ff0b5362eed379b8d79307e0269571937c89f524af7ac413120162e0f6b94f1d70f2e7c75daa87d6a4b9f113bb4bf22a6d934200dabeab46bf266d4ff7c9e21e42f95ec4465559e9d3f7d0a86befe8a002f0d547024afa829218517318bb0e92fc877f00b0bb3718edb76b463f699c1cc30976a22f06f9ee1440d6f560771ca127031324a3c6688b79608b963da156c73944efb96adaefb3cc04c47dd8e554724ad7e2d7275d366bff5af83f6f805ec8eb0a0733baae26f842cde2b286eefd2eed6ab4c24568e7e0070c7aeaddecfb4861c485b9286ae4e6ff04f93d747860fc9924518c04d0c4111ae0d93f8ece766f24d832f2bbf672a58a0fd1c5aa6cc605d46d81de6d7b1527bf3ddce58a0f1764bbb0d6877b3a185c6b5832f32eb3757129ad0b60865222497f8b4d85d9952650aeb2391f701f1d342b45e46f0a33b6671d4cb8b9593d32a0e133f2c6844aeb5a86482263a38bcb545140aee046d6d00f3ab25092ee258f546d9b93519115aeabcad95afa1b6768e465b05aefe8830d9207489b924bf07f8cab2cfacd0bddb66a02ccaa8ee09c3d0ef0fdae43fa22b3180c7460627a884b70244eeee3f78c4cc0b78bd8c4fb1192f8798e7385839a0bc8d29f69a983d33b295f6a363b5f09b8d56f7dac4673adafca88cd705c8cd55dcbe0327c106cbb96dfe4e69b7c4a3c42d0b50af0bc505adbada5216f711cbaf149be93623f3f27a6b93c2ce54fc10d32da0e9a6acd9bff5fc959f2366b3b310e69f52ce3dd04feb1e0eea2dc5bcb64cf1a0495e3225b8383452ba98ff3f122fd530c64c692c12a007c82b24749702962b91e64246398d08f49a4ac40b1477507308ba2d5088092dbb481c3f0c0b84433dee56df2375acdcbff4a64114c44127228fb50d6e4481e89b0723c9d69ac9d8ab2df191846aa627f8da839cc6df1e28662e3d592d122b65499dd8717ec531daf5d96d05c398f77f21b439437bb54cb8d07cb99d175144282974a0b26f0b6aae90692fb88b812f46dd2a5db1cdf78b6cd3e3b045a7829aa5cd14230911ddb2d82d55900626a3ac138d955784180628c8f30bc7ef78366d62a704c5e221ccc8fc0f37549b3f80fc79b59dbd16e471c331b04d56f6e3ed5af349bf1fd9f9591b6ec886e3c420999ecde7ac0506ddbad95b9e30f3f88507d1bc17bb875d12f308c4dbbca43d946e11948638b5b05e61d99b1f5f1560d6266031b38292f8093b3f82db513c53e57ee37223dc45cfd0d74264a61031cc51b995088f9cc91746921e1d29ed02a3ae3c82cb42ff3ba1efabb26ce50cdfa78241de851e62a0474588331859d8ad9959278e24662a1dd3055fa8083e9d856ed24fab5be28caf14a08e0cf8edac83c170e053f20fe552dfbc5371cb255ab99edc4399e16e734bebc2240a3357e12ba88fc772d8a2a981246f37ce2a2bbce2c40ace18aa34af1d5934eac95c2b1f0bbaf07d793cb0ef1f4db87d0ba9d44ca75ae83fa63ab7a889c96332a8d7c9aeba755d52c582cd3e83b80283c8ce91826defff18d10779f817d8f7ac573ad628ae7420e7e66f5a1054ffe7ec640cf5e6acefaa0a0794fe065de44ca822f9b3056e13e5bd5a46e9fd1981c3279be973f1fad68353e867a65bb297fcc6ba98e2dd6fe11643afadef6d37fa4ec5aee89e2cce2115b6c1f42570bc5062887cad08192a682d0b4508fcd936a5c5373b8ed70f9d7bdb8342ceddede1aa185de78a85312425b474c8ec74d9ac20e10cb050a102ef334f49d95c421ba901a8b799c5dcbdf386273099dcf9e6ff080cb6abb29ebf49e3db8af420f492a8f38e35f1f381380f260f9f363efe79b5a7b2b59c49228d240a2ac731b167db37fc23598e781507dd61c8412c96e51a46ac6d89f068df051412977f00920e6dfc881282dde80ad5f4e60ba6fb7960314872b7b446b626bf70a9bc12ff277ab35d23d6525eb7c50acc1f2431116ad25721870bc51da58c04f01bf3436c061f63d06bd9488f5bf61ef979bc800ccfce147875e42cd3ab818de8f5f760f5927ec80cacb5c5fe68f09ad3723f145c3cb5d1a3bbdb6c075ca9a2e1c412fc2a711b785872d65b1a5356f700b5265e7e162c1739c55bf3272d66fc6112e085590667fd4a6ac58861af9bdbf7af0cdee100836da12ed062c1924be2ed4eea8d2fe706bf68d10dde62d221823ecc4d0633706e4d8054f32b552fcb0efcf49b940d875a472a6219bdac6faaa23c997174d3ea4f2f4dd41ecd605a56d906907e0a806be52d058a73b69cdc79b477a3149b40c2a88b7028cdc961a681c9909efc7116f939b990a69649c2ad21317655a0fa08be0d0a8ddf8a9fd798de59219cb1683fd3baa542630bf7ac563391cf3da111aa20eef4fd44cfc130b5cf104006175079700a58913c4f40b86c135dd8c78f62939fb103450527ce1b61c687726798aa32528b5c139edaa57563630e299fd67d639f059e0bad0d26e63177271f3dd006190fc0182007389671b0852b480320b288835f2da788fa5c2fb93357ccf547d49bec4b257d01d3b42bf80c2daabdc8b270f1204aaf4579ee664d9dc1f22a5a96298c8efc511b465f028e6a9dc80c68edbb6cfb7d994ef65e188318de354992eb4064fe1562b01b27a40822e4369b7bd4d66b332eec221a1bb4de2704ecdf8b147f1a3af9186c9c7e7ed9b7a96cd76c08405079e71e5b3fa7d9d36afeaf58add243f0a82fe8ad74f3f197bb45d14cc3e887c1322ea646e1a2e5f736f3f35165752dacd8226a0f2f08aab680521a581df62b41fe7e2a91aa6d67be2dbd3f366cad9a834d6902ee152d18bab9568ea5d4c19947315e11b7f497dd8cb18319840dcc29386a7c49e6d1e1ca18c8bbd4a282db50357d36d2264a92c607651de8d6d3514820d1c4b565efc71d5520fa52da9293feb12491026936eebfa2aac6339b57ed75c0f5eacc07c93da0f474baafba9e9be33eda0518fd241c08e31514903df5f130bd5946f428e8c5e37b164531df0153ac33000b8c6eacab505d1691855b57fd176a7e71d465e8e0535d98528f94654bb832390ce31a3b0d145531c5696fd871985cc7f3d33b242d8f107d4b2f8734e4a5b0d791a39c49b1c37ff918d2d801ef1208e8357715350de53837978823eacee3338e2254617359fc31cf1448406ed632f331cf468095f2044949d03007016b0f3eaf475c1622361d2f4630402579c769a04719b809b17a4aa8368d9d8d13396836cd794106e106a4acd10540f3ad2324949abd421d322746f9901847429acabcb06b20a9d03a2c315f020bc137837a0254af127b3772598791b918c3a4028f4b3ffad5dcfe8817319a5bac476d974c7144e6c1d9e50cb16b2543f7794de507b24a1f2170de75682403306f5a12531b0ff9f433d4a26b9f8008b34cfe9cacc470432a6bfc1c6c9f970e42dd6fa241561cf839f0f1fc19a464d07971ba1cd43603dfbf4de524e81df93fe57f0ea9ec9e46a43a81c86e81406801191e424af5ecfb54402fb2847273c90caabc9da5af541ba2785ebe565cf4281f14ab1d938c49b5655f89eab7962194f9052eb3021407ea6765f05a5fe740138efe90a2a2f1dcc0675ff5043acdb7db89874de56bb52a5157a5df02f7cab4c8d5397777e5e136bafed3f9758a73a70b3293728b2f0d4bdf179a836eaa61b2a68647b813e8b4c7e3806dffe523326fa288cc653ae886ecf21bc675e3d466da3b16bbeafd07f70108905070a99184724ff0a47e7b04ac7e28d8bc3f1922249bf50b0878a9d0228268a35e145951e46f520e9e36a22ff88fe1d2ee476500455872d7bff990ddc1cca23dd9236ae0ccb767371c1666b6f582bb9ecf175deb23c0230144d6489d4f3033c4445654dac7dade1ec0a62f362e072490e1377a6f4a43842c29b7377b355dabdb3205bd8c405a450a0e5e722a0c8dab5dc71030f94363249cf0e4f4041ec558e724b9fb91d0a63a9d67b7c60f0b76ce59e34a1815899f72e81d07f4d465d7f97c9efb9567f35f0d5d6f3a9151c552fc19c83d9640a758fda21098b058a535dc100343219b22e55bbe876f6a9ea4b2b321e87342170740334f6e0fccfd474f9f25e4191697d9c9a42542cec842341681e6b67391e533c5a234a7e5815ee685a132c3f5eada928c554613c120e8fdeef6fcc4c71c47a759c91630b2a3e9ed8880db355224ffe79e0d859cff0b0f5cbc70b895e627bafc8d2658aaef7b2ad6c8cc638ac63b64438f2b5820c0fd01eb0f8dceac496acb8dc0387078f49d8e3cb6d28066bac4a430c04d5251cf6d8d3338bc836a795bd5e5b37de22d7a71a079e331a64bb8273c39e1d1f89262d2edaff87b9b72ee51869ea765423ae9adfe38ce68399c46f998b95457bf8533d3cfbbaf496b3821023a133c9d0513ba9903d3e8f4deeadfa24649a84d1b8cbad68000dda4773ca9e48cede373bf6a75c93de5b365fab9fac7c1655e30912b5051caf9f42b33f2f15eeb793c97b58193b518e8ce1a118c10b09696d690c4e39cebfd21933c45fd9ff7c25f98679bfbacf3214799afb7c3ca134258b1fc0b4818fb92f22b6611aefe35ce0b8761d75b29f9f3ac968552137f66311560b0e8cb2d0718f63d272b99a4af5b079a150c12833fec62554974ddb90fff67737de1df71a51b9838fe08401bbaf5de410f8ea4414b8813464a94950f9719c95ab19b076f3c0772bf591c34dbef2aea0cafe3930c936339fa2735dbdb920cb596ea58d57e6268f030d6ebea5db266c56d74bf611dadfa40d16ded04a56734b6a876cfcc378eccab2de5fbd329bb35fad40c66912d01a9b27c7d0ec215ad4e372015545e23378f0e1704d071b85024f4e0c56d9583251e295bd32f7674daa5d16e147afdb9e33c937cc1ee589227904e043e5900e88eb3ffe00ed3a47b55c7f00312c83d741851c5df9bc9fa4f881450cee5ad45a5b507b0a99e7fde71c5412d8f9eb0afda5d7b3faff0d7d939183dc7a139cee6431e75e628f0a886f09f9dd453f6c8976518f54b7e7fbc67f75e58fd1bd952655951aafaeea3d220805b3aaf00d974b69cd17c83cb86dc48f2a1127b9f12cc3550c503895b26714da97ea3f816a5497ffa2d5d7307a4abdec3a6d6cdcb9490f8b20f2bfc0f072a70c4706659f5f8bb45f5733483c367cfabd2d6325df1cd4502058660dd7ac4520c69d6fe4f2f224ebb37497e507f3eac32b89591c6d23b6cf3c3c15ea81ecc8ca32228e84232d078420826b743ab97c605ed8b9172cd4d5d40555671d66bae3ec755dc90dda181cc7d00816be7c901a187da1eadfc4391aa6a62ac5702f1d7ecdbad68946beba4cfbeb8e008b7681ac34b16d543cde5a6d8f454495a9841e81b6271637f8781b7d6a989c91a3cf931afc21c35ff5223db7d50b2940910cc3d4efe4a439ebb043985a00bb31cd30cf4cb8f62b73d437ecdec11f632ff0701660c01a08f9e70d3b86144b7248d3413b2bb0572df89fc66fcc9ba97ac98e581f0b71f1cbddb4370a2de0a04a3e7ba9e29d2c6d52561f76cc67abd3f475326ae5be4990744f19d7b8770527ca7b8e11c98b735f21f51cf00d9938c35b9da651706291208bb6e0954e4bcd0a7a67d320fadece56233e5edb3a498ca136a8b0b3c8dd92c8997acf18d3907e6ee26b147f7c7c857ade97ace0595fed960efe1939f61991b12502af094f30617d8bed17d5574fe0f2dc69cfa774c2a4ca6a07a88a01fcd902b7b8470fca12be5ffc57a5cb933e26e7a51d90d7925cf964d22a274ff170b1e4d70361d34d1edd3cbd0f86093930a180bf19b518bc14338cced25c2fce5c607f0e4bc3fcdf3c053b577f8236510f97e6b4c70614f9d29c6ce76411d3a1a72ffae3f9363389548084510d61fae1c251400c8e4d70517e7a29a4490ce2723b667edf738220524e94403323eafff33117b74dd550d7cc0116ee8ee9160547ff4d3288226f6a42128a978628e6ea8e4431730106d8ef7341b8e12bacf6e42adb2b3f696ec5ba6189aab0d0841e66bbe3e69baf88ad604d27a82a06fb762622b74acc07c04bb7b8993bb49c9e571981f67f58e0c397d3629b2df2a43c5c73377bf002ec7eca0a4e2b87ca6fe05cabe86544d11b1f5ef0bb8690618fd97175721066099f120b5a2b28d41bd3b1f4c5f8187d2fe804c95e5fce1a9e4e387dd1da5cf408a8e2d35058766bcf4f79e60fbaf77299cfdaa2c6565d10d269c348327848e1279058ed94dcff940d6ca1fb3035eb6b385909afcfa919bd2468e0993e52bc7790ddda20cdbfa996fdb08ffbd171daaf330df9b9225fec68bdd4f9399d73a1fc681ad233a30a5ebbc8a5acae9977ae87b37412876680bd58c43575f1f8e0ddb9dacca7efc0c4054996d360db314e4d3be014bde3441573d66211bc87f7a25af60b7dc11cc9f586898ec1144c40fea113e17860936425f82abff236c341c2fefb26b4888269a5c9c3d9f72ec76f909056df2565606db8339c025f4b6f7f48b30f51fa64e846ddb53f9efd1815660b044e01a5321208d60c7454e16351583a607bb4d6bd1708a43444065c38fecc77e441707e3171dc886bf9dcffe63375a2ed8879d0fbd858032e1b399bf84949dd1878533bc84492d53874c3413cdb7d87417bc57086f1de01890d5e42bfc08744873bd3616155d1c65b2d302fcd1119f2469fc33fc62a41a62e609ed9f4292bb41bd2187a636a4262bd6c4c52019ff1eae33b98c4244d29fa055c20e9014de035bb84490e364c8cb144793e31414cac7700966f8706204006f64b0df94df44cd04f9a8fa342c358bbd99b2f54f3dff3a186f96e11d56d2bd1ea738c9240e5178cc05c11c3ee974e89651c474481216d715bacbde9fafa9563c71ec63b42eaea72f412f8f5a48f1522ce42ad8851dac3ee68f78597db8f24c57792e27cbbc96d88d4046bc2cc74568efe568aa8cdd19c219522eea4e2f680fee01709dd134b47d8487a93b0cc0eb8d6db9f052d5bd0a110cb741f9776f65216ecf763e7b238206a39bb97490d25e4014f67479e659d7ac5f03641f8fe564216827817210158a2448d10a015f781811741f478835201ce48edb17b50e4dff70589e44e14667373702ec1d69bf3e938219890be658ac4459fab2af6268f591aebeb812f464a503bf6021660636727b1253e8144ca75ae88d411ecd902678c52d18f98e34116b8a3dcf35667f5bc01932e1a0f303d7b873fef063e4d6cd43f48be5d70918d3073522ce8cb12da5b4087411484ab43041612f674677aed3e3ca4ba3d5362b00249f2eec8bb8a99aaac34681426dc667824a7f342b0870c0d490dcd17877e34f20228287d6ff6ba130c43aa023fec2d3f79a9ed58619d52a92f2b00d3550ca16a659ee4ee2f7fc5fd295b10c6150220c1ddbeed9ec2e3467bb5a75a5905347dd13bfc2903434d43d0cc25a049f047c866188efafc1a8270e9a529e391df20528f4ce900a4f287bcf3bb4864711ae3ac97f1c21c5ab3a1585cc658a4642bf5a70c600e6fb98556b6d0bf6d6427dafd55ba32025ba0d369873ddfdda4b830de05af3f13812a44e1bbce9f3ca75477bd4939a1f5c0b6c30284f2b95fec773701f3e2b09f3bdf77515255255c35de3a4c127a07445284cb93d7e51c8782878886f90d7d5aa7c166cd04cd177616af6bd238e72b971af23244097ccffd70d26b969f966ceeccb6597e579e3e3153ad527641e6d7941ee9423fa1219c68be3e28596ee64600b2a7978bd5316236f2c23661b7e1d1e6684f41a9273b497172b506f6ed65d23b627d691d06ec4b2cfed561bb213fe233000e78ad23329fbf961e4e95a57bda44e31e175c7138c0bc7ccd19ab0868d224ec0c2f701e6d66fb316049601c9124c63d74e96f9e7e8a8e7694a759f3c469603633ae1da05666cc4c653c7ddc0d7a677966267f15247149f31153ee6abb6f90e6693cda2f5466dbee1472146d59a2cf9edb18b35f943d96fc2c6492f5b5ab5b029822cf55cf30cf1f55324e55db64a7b4bd05340334b61c98cd246c1d1ae66a94a7a926992f8a51e710c3521efd8a97c4f33629896ea484cfdcd9a56952e864a37e160483dd3d094f2d6e494f26da46d465f3bb7aa9ce75a941cc6462c579f23805b4939c3f119e5e957b5b71bd1e5deffb84125c4cfd982fe445d28edb61bc5a24cafb6bbecdb91d2e32af0b2c1c831a9d3055bac1f99568ae8b1777fd676911c39f6479c33b0192e1da6ea5da9d615f3340ad196f8a135d85e85aa59155a165ca7cf54cb4211fc797bdbfc82f689fc5a5fc4103be78ba1453a2c39f01f10e5f21a9d66efa48bac43621cbfa9347e454dbac3aff168a3397fe027cedb3045606b06e3067fe787b8fa74fbac66e00d815bd98bf96df8926ee6f50aa171155216360132bbd27780932d38fb3b1285c240f3408f94e813e3a1f8fd478a581ae187c17dfeefadc120eb5a129de452923704b26430fb2646e183445d6 +MD = 3fb5d3d8d7154294799650b12df25c71f508c4b0bcd4da2ad6e57babc98439a1fe21d4ef57c7c0befedca85d517fb9c5d5a705ffd90b1a5b9f1717001c8ef547 + +Len = 51712 +Msg = f287b06cc38a839b7dcbb375f1a5bada9296b6c384fa1925f519a219b0648c3beffc054f7174e12bcdd890d106ee4ddb5fbb991c7149e8847aa89a44f8332c337714b070a70b7a49b16b1d5ccb6596fc0b88c6d7788926d56740b64305f4363030d899178bd5b7bfd18a42606992fb073b05253bc3413ae163eade5dfe2f11fac24fa88c455cfe54d440e72308fde5c299399f9277f98e7017adfadb0b6d2559d682c616fe28b8cf6392f4eece2fbdf7cd2c1a22bf3a894a2b91f2055634da151477d9ffdebf4ef9258a5109e6afe96c7fe67f35c18a9336469eae23040f98f52338ca8d0cab269ac32fe6bc7605d3ea5670b711a57414fd10dd167d4083c7c2accd8209b174aa7ae4899b4fa7bae138fad1a9fe947d74673355135b301acf44563ce8bbf4a0416031a15909a0557d2014113c46b62f1c3c540e8b04fc5b1843ca8fe3eafeb95215517e06348a5e0e684c395a30321172441e1168c1cdce0a87afce5ddff6474762ed288c168c5dfcd9494fea0330abdf47366590dacbfc0ed7aeff3de305d0870dada8d1f7cfdbae3bb45ed308da86cc0c4712ed971d6c8afd6f2c6b3c53de7ade3805bf217a608e56346bff8756299f5cf721653feca6e8bf995cce3207f8889f37473ddbb67203f1728055c7cc1cc2ffee99e21c5f338ee6d498500f4aa719165177326cab9b75d615a4bd1265e89bbdd5824b749f9ae63acae7d8194371950c2f9c881d80624ccbc6e01fae4814945e54e58890d363568220514f9a1be1644a79be26365e4ff1992d3b63e49f2813a912c980b82417488881de9bd8f97cee95d6e5f4ff6cebca08f1bd72fc8fad8267b8361d34ba3d23129397a51c06cc9cb8ee1adabfd3bd40dfbb6e323e422a4860ed34464bbc5d4fe9fe8355ad6958d4796a64c0c0ba4ebce832578cf2e027cd5c5acce346520034d56baa94d54ba8ffa2f2cc8e484a24a4e9ff7f685f902c7923a705dd6da6ad3a9d821548dad44586f92d592ca0aac961abc9eeafce7bc2b47c7be81a08ddecc90beacb5a052bb6cf47c413821004c55cf639ad4787c970e6317e7b835f224549e54cd4b39e798344535e0279df7d9efc91f7c31ad2a1bf770859c800ba9b4122f44f3939ede5354ce7a42ff7573fdea846aa380ff72b36cfcab4d77a607067bc009c01d63998534ec93ea1e5be720ccadbfa150d3d915d563f36aed79aca3f7fd1da3471ccba65b4c2d3602c5d3db1c9199161feeef8bc752e885701b0d152d42eb2dbf2ec72f3e59a0b75b27cc9540dc81424c9508adc926052dadeeaac2721e0ccfd40e2e886491990e761633e7dfeb02e6656ac6f44179e3b3d588f8447cfb0cfa245f645a5480707be2059c3b5049885308d49cf7c6aaeeb8a56e98038476364d2e86fb1d94a2b1b03d6a78082874ac1895671d10df5580bc9bf3ec984f0c43296119753a9b74e72bd6d969e6fef8c8b7a996a9d7e1e6643007dd786b2319ae2f5a8b4549df738b4f4cc6c4501a4278b0a3e7d5c574f9e3a3977fce04b74ac1bf8960fdb3d72b18ab0db719cc20ee368412df23621efca997b95f5ffd620c386a6c1f0111291819cfa82efcc399587ca274e11526266b007cfbf090adb9da7ca07129e1ea3ba6f91d9a92cfceea2dd5bc58921d9a51b192d3bdd8129e35220902371632978564511563871556a9babc022c76cf26f78ccb2cad7a58675a9f68003c7855a1acec9c6781706ff34eabaa446ee38c64ae493408195bd461909f041aefa4dda1088c455472f3321d4f5d2ad3ae8ce7dbdc7347c6a00119457dad87c2cf403d1e2eefd69cb6640e4d326ba83059b763e518a78108cfee996b88574d8869bef6719673ea80da5746fb8e43ccfaff178318c9327a4ef788c74c3708dfec3d959c23c5a4dba14d519eb0b961e3941d11b7ff94b09df9c5743570104ea95eb95880dd331f348e8dc757f55a62968c222a8501d1ae56a9a815667f8a9554607b7c56e6753f8fa92a4d0541c7b25053ace67cb826985ecf1e00dcb32c894b91d26580d7f28247719137491eb7ddab7b2bca019af9eaf0eaa5bafac37c7709538cc8913a3183f688513a85f4714102730d49b612c232c78ccd986318d10b1835d90a0a85b8b1074df8bb3e6baa88efdbffe9fcc825ec4d15f44d883be091f2a965ae4f330e960442e62de4dcba11de06422f68238b93ec26c83eec9521c8133ea129e1da99af77f7a8271bd036785782928e6aad69a64f2f97e102ccfb0a14562a1164d4f069dcecbd2b45de8628e6e15f8b86de46bfc0a111d86d4bf2c450904ed94aca8961ad92a3aee5604fbff6a307bb4f2eb93cfb1b94897e8a9fa3626dadf60623eb035479ea269cfdf98a21383972162737aa590fbe78c9016813c45ec5fc19699beb7c130f26bf1ffa33d12153549e40288464edee2adf68d291e0e405601713f2669eee7123de3ee82990eef3e72a1222579946a21423f965aa628e0aa661aba521077cbeb27ce349f7eb01798e5c05ab9070aa88c9396b97c9a3cd44539b992a87703e46370da5760b4a0972dea6a32acb9579f0ce8217ff7c3f1220dc1784d92653b3b63622ee12f028577e3c8c733665524588788086f34e9f0d4ec487d7576a1c6d7d443f35a733108bda4c9fee450a318d9e6bc741299d4e1f2c914f091bef44ec09c5c50489309d073573338ced06ddc2c12cc8dee8f4b6a828b6efa2ad12678ffa5f56e35f95286a0e44f9c774f791759f2007a8d7f18368e1c9ec3c717ffee9bd55675a80cd4d14d32655369369072666d9f6477cf01eb1d63ec72f0f847589c16c68c2a34575a812bbd842ceb7a955d6df37232e9cf323848a02f2edcc55d0b4f8fdb42d9a2c844b69e5846d8ff2745d942cd48334ab2e6b30124072b42a6ef68f78b78637ec49ebb52f74163e7d12798d59c411739142f8c5876054d86db504847c4543bb3f698231f88a5f6f93a0a94f408a3fb65ff1bbbed50b0ab59a336d9c6ad5fc7090539d44e33f8f8fe0af6b4e739f849971cb32908d88fab83a6aa02be6f2070489a8ab72622c4d1bfebf4e0f556c7689513febcf1362ab6cb8db3ab75311f9e375c91b4f17a90e801830a00678799c0278b045def930935fa005abc341ce5ba9ff458b4f566e5a78f7a43fd85f6f5b9172ccef54c17b58ed8a6a61e4358f92a4809e79d7c0c4a753079a4bd97c863bb2c9f636a4ee9b52b2d289fb7ea0ce358fa444459cc9447baab283729e5286b2e2d8ccca63e329172c12d4d7071612caa7d4d79ce2d2764dfc92e0329b73c967ae39a0f8f6419d2cd5c5eb9321f7e5b8a98cb8ee6e9ed2a4a523410a6542c6b071672360f07c7ffa3c563eae33e8bf85f15668987470d20640ee167860521733e8dbc480d7063a05bc5e3e86c14b28c91bac7749b8eafcf95c4de0fb312433485121f4e70e8163d5f2487bcb6ea199e885096560907fdbd463ed21013c3b938456b434f22b5085f16aaf66da807e8b6ab9e7a38b9fa1c74dd426673905fac07e761d1530a1f608de81ed80329b5485c646e1c2193ae377cc499423f11304327d1bc7163107047503d4ad787233a61191b8624197f6d745b610b0d7c7d7ca7226d44ca851ceee42f7df499007ddf5a7436af3929657dfb9b1e5f6f32be8cff8022c185c316e360b210e5c6761fec5bf61eb103572d27f5c3625f126abba874c757fa4925e695e2615fe507f1f1a98e253b542cadbfb38a5c94d19b2c5c182e8176b8bfb2754d93c5d0bc047ada5d198cf56059330369e1ed1e7eb57e89235435e6c38f72a9529a65cc316418c55224b0b59c34f0e29123fe672e066a2a120e6c0fe3606d6bee20c9bc0dcfd497ced81be1d165ec42727718d7a836f7272d86ad59e0daaca4674d7a0618efb5391a5c54e3c7942f0d5506c2d6b6ee2d68bce1802c81a6363a0648ff141a69c3937ed9e3214668c22982f884cc1ed615d6074a6df08f6c1317133ae04cdbe8068d417751051689ac804174e621a995b65756e7fd0dd3d34c21d64aa61822128710ad5d24f5fea0f5f8daa2713d1fd419d4f0e0b7eb1284e84296a1d8dfb98f4d0208b4e75bc855a67b94abac89483a44361e5e24f21727ef619d66fe086608604d9ba31f9e3a4fc5f0b9b71f6bec7041632889ca8ba9636a6531c2a1fdf225c9d7ae5356261d375d3e8fed534cd21d18455688331c8fe060389bdd4825258d8f8a89ec135b38b4734f5f76cf95c3eacfc3ef84e70f9247d9c123de7be8c6e9ba4c7395dfa5556f110a707a1bac877e70c43da46cca7a40dde810eec2ae9fe05307b676416c3a0f3e570c20c0fbe683023286114cb70f727595ac34a6df761b60a298b8c118b03d031e799045e8a89e8ef413f20f3c1886a8b03dd9aee31441ec056283e7117fa1674700f332dd94791bf22c703bc35f237f210c04632341fbfc185bfe3cbf6fe272bbe971104173bcb11419b35ab3aaf200d061de4b05c4f19ac3cd52478b48a92c607c31667c0d0f584221e2f374c29b35a6848ff0f267cacdeefea690dbd19d9e1f015cbcf62a1819648d258f6e6fc52689bc3eda53f02f9e813723a018d367cfe1bf199b169282fb62a5a6b5097818da6252138f8e28c71364c0f1feab17aec78cff9189460cf30724b18aedada73e591a8e37990dd73b377fe13732fa621b8f0909eb10ee62134492f9fcc0c2c2dcab97b8d28036c5320fbae21ec56f7f562e412550b8745a8cba95c522b4b0929dd9c3180bca73b955a5fe0acd3e713406ac1b9be80841bd0371135c2453dfdf26e985f60b012b7d4c0031a36c25674bd3127eb2da88bd522372f5072b25b77122e6c499faacc5d7be283df32503bb8a676754b34fc050e391c4240e5fb1a10f37d56a4aff54ab90532608431e5fd4ba67b384e66e396336f86f87b9e77f03830dc05e5142804470b4017cda7fc11aa37efef693607a5c15fe7c054feb1746934dae88f6ecb8f83e89c1800271b1f50c525192024c0ba5464bf2881a9502d3089fa8d08125852fc4796ffb011cb8cdbe8bb3407b5b75a49188d9f7600bc711a9aab51e39146d51c82d11d720a75d0a82d22de845b53fc3c05d39396a75ee674017dd5a67e2fac6134db2fba73a29141ecfc672a981f16999711b3880fcff3f938d286c53b6b4f76d80574fdeffa3545a2986c6efe814fde66d86dbeac883006cb59f3c45b9224a9d6e0abb0c1b5330008875cc5f112fe96df8830aef000211913749b38513cc286dc0d2277bb9c111d6969c6d4024ca94f7bb19add8cc02dccaba2fb75aeb3afaa31eb87b71ff7660a6f8028fdc4b6d664b5e50aded550dc8e1e657310e69f526082fc29f3715f9833659af1b79aca1c7338830f076c3aa3d9c65cb0ae7b78416649cfa7b1524d2e44e5facfa606fed1f75e1c25fbb3e62a3c5dc93282efa6f307f0c68f852548ae9b8b20012d9bddad6da120de204edbb6322f6b5752a5d3fde202813fc38cca8fc3bfbb34d2bbeef542ac3196298f83fe37c593bd825057b87119803700db5b4849ee2ce92a099b4022d9befc5c088768c9aad2c38651dab921803403d1a3636e9aa0e58c87e77b146aa4396f5c4c5e7c6469b917f33cb5769fe12d349a778b792272859d90e7f6f896b6316d8ecd61afa46ca7194d73708738a6cc37efca3bfe9ddd7daac98da753436a278587fe3978e63e4d45f998b451886b918c360ded45593c4e12964af4badd4a8c35cc716e7ec658ec3c8c1ec97c0b8a3daff1d51803e13977938b9277a5e0d1effcb0a95917a147244b7968485d3ead0121c79254a0c23f7a7c1e16a89ada8ac358f91881da238386214617b97b9e2e8c801bd82ba288c8c75ac229f00046ff96c8fa41813cb988822c76af955db69940296308f59f815ffeae1c5ee68ca28aeacb38b6cfc5cfd088eb8f925489f467ccac31c75aee588f80e49118047679c72fde38dae60bf2f63add05627f76e43472770c75b4258ac1eeaca507d284393ee6807f303c55bf63f87f5c928eab1269d22857a6a9bb7481a854dc80d90c6d5caf4070695b5981a4525109950aaceb828c1ea7dca436b2593e8bbc356095829adaacb0b8cb7de621c8e0a0fc6be2fc18d0e8818a2c2dd0b3219fa87831a61583f903c4d105495976ccac973b3ae3a09771145931a9e74c19f22f45cba4c492b29b1401347122581dfe2370d3e0359578cd10a355c619711810a8f8c232578671312c0a45c7cf7e81bdd3b249044f3747456c0488d92b0c181dab55ee82f56d7a4bda54975177194c8c3bc01d0f96f29d8a84d12d8ba269a46994d192ef24c4285b9d54abb6dfc4d8f9da4ed27ab373c60d09bdc63606164794f3f0620f5c06f5e0e3aef550501da1872da2ebde1b275b3d590ed560cc9e7c105736de3c01b27d6c5bb806b67e6040a4a460cb923489e7abf168fda47c6eac7c2d096a2dbc63295e43f44271c15930d2dd0d143f9617d5c9614081797c037328e40c883cf27584476b084afabf44fcb2460c385ec65dc026371a134871f94ab71ab4cae22a8618b80f5882b9cedffe936de2ca483bc81132e17a2599c4bcada74f76b4c5fb014110cf698c478666d126c3252cb47cf3438fded53b060aca1669e0d6a850ba63a7f219bfca1c5c95feccc447e20be04bf19dadbfb5e5aaae0f8f8d59480b0f49b7cc8ccfbec0e7d9e1f61fcf7cb72c4e95dccc9e48e12ae513788373066d501ffb10871decad8eaf254304307f5eb7879addc9f5466111ebacc581c855e03352ec5e972ee65ad78223343fff4c6af8638b01045940ede64e45e706adc91c1f8ef6173b770e5148ff863a11a07654858ee0f72a4ecaf01e69796d60b7d2797b20c2daf28af7296973a8d527a88fb3e5462710aa2a371030e9a1c94e5b0470dcb4bd0a4aef232baf8b1585f09bfaf17e45e7fde28037b6b43b797b2e2bd19acab75f35a2f8050081a256dcfadf3aa5d6fa8e1f91f52f6c1ecb4af36e9ebc6fbbb523dda94a2f208665e73aa506e13975d093e606dd9098e735a0d2ae184768361a9572bc6a04143422313f8d976134e15493e1dfce0dd583f715995b4ce50ca0643e855acc26440173df5c23054d20901308a36b2af99aab8c13a8049127d5a13e999612d5083874e75c0103d5077508886cab6798d6609461159f2889725bbee6112563391c8a14d911ce8e8b12bab1212a5a238c46cff512b5ef359a76e730173fa3ca5ce59157e59b35419c115a3079dc404d79ad21341d5f08ba488830cb3e9fa1c6a4f5e6b48972a5bb8c65ebfd0efcfe33d58c1ce7ed8b7c351838a0e6b8ab9fd6c5c002c12112c05ad092d88d3d06d48544560b670fc5da248e0acff931de0e7923d66df46905f5be0d2ab857908463a03abd8558008873172e71069926b16e2c439ba0c4bdc6b643969ff3e2a5e03c132d0503314c6df77b5e0dfd3d03c04f7ea99213b89bdf929a115533b4f9c4ce5c9fdf1d696fc0d7cfa1240c6b557512deda6c5f568fbb1b0fe1fcc054e88c8afb17ae3c86c73b9482ac65cc9a986a68db3a5cec1505d3a033acf942391eb2026d08f4d9100f38ae42b445a64148fab1d25e16428a9ad3d2a3b6dd31d7e8cfc530f8457b7b8442857e7d4631f5e3b07e72ba1adb1dbb1612beb41b07c7f35023c56a02bc4fe2d3ca944be9f83ef5263f3ae2cd4e44e324f10309354c6fbacddeb8e2dee4039776ee22c4935172f9c664794cbff496af7aee1f4aae7865aba33689d71cbb1d0ea650b86be4e6387e1b9edc7c6576998ca27a41ecf90410327adb96db5e8a12d4eca2c3a6511f05de803ed2d6503cb3e716263964a778160bbf2e8e5406d97b76b444b2f86a7451a7aed4db0f02bf7c6b506254463c5cdd83eabfdec5c831cd6097c724f6937eb275f1f1737aef976965ebbf31062a2aed3777ffe6c4f52b7f2ef19a88156ea68ea5f4053a9e893cf18342bd4e28e35abb92f17f54c6201f073e6c4f6ad94e846cd41f807f0e6218ab2fffcd0a230a74cf32e1ae974ddb84fc2b62562bb6c580c37cff13df3f0cc30ce86d6ef38901f19e73c31e3cb08a15d4527e3f79426624390cfd0fc9a4ebb48d392623a8cf6c69bfe2104ea3b2ae1a16500a7ba1e0a30723f0a404dcd47185a29eb47b886aac459a0a43a06ac8da3a38a0b18b5425fe721ae48e736742408ee38592e710ff340db368f7b3f04770dec1d0edfefe96fb2d944516dc2772eb58d67a4bf6e0d1b62aa26a8719e2c31470384d2a370f980b72069ec7bf6beaa47be2093a1b66a68544ddab8c22a0c037a70291f0d415cdb1e8185e3b9dc32e3e60acbef7d510c233b4cb88616ec8c34cebc72bdc569f8c8108100fcce7bb920b8f8ce80fa48dd9342302adc16ea950e6a6ec97372f0b78eb5aa430063db3ca8e810920ec1a2c3028e809780692e0dd7770e950abcdf7f773483b4b61f05a4c49cda7f617967a8b64ac4673bb8c0ded81c253e4b4d3d3ac9b594bce8ab00d7bcfddffe40cba073f89c8501d5aba6ee59823a2cfbca12cfcd6266c45caed4bfd832a675755f540c10ac49cf16e9ea27a2d0d5c6e5de6626cb618032dbd18a436063b74dc6dc8b5b46a39b38c61b946ffa2f7e76d02f42270bda6a6f2dbc294a9bba9beffceb4d47e2a900a4ace8aab0abc7bea48365adbad4f6ade41a16b9bed25cd9c1df33a3ba2be5027b91f936d1fbbf1cb6c729b0c770dcd0f86a8743864d74f92d365d949c6a8028263df53fba334021156423523625b65b12e4b9cd8a5428849acb1029d3e8a2fa0b7885ce539a71532922fa9bef3ca9d79c525162b22fa0017064f56948ea7101930a51ea847a7b3d5ac95693dafcdfcbfd7afa07e62505f816cab35ce3bb18c426ba009b351985641120e143e0af80bf9d245ac60e7f7ff1f6c5f30a8da2bdcc2d513be94ec1b852b4f040b2e79bb33be41a19a612863575771c5d7c2ce6899f0e98a9ddb7b83c8ead011ee8d80aa1c83a23e0b0da7f500b019998b9a9d0a3c73354f37e584638a0621b21ee9c4272ed070657ea4eb5f73cfc024dc9eda833cc0250c0d519b5d4113d06f1cb198c4d33b38c255e576f538fd02023b5dfb66334e553b9e8e34b3a67a4893787392f5a21a67df214dbf48c8ce6bb +MD = 1333d76d9642fff25a78e1df287d433bf30c61c2157870e19abec86524bc248c974a61a14546cd6edd382910b9f269a913b09f72f44534797662d3c4409e5701 + +Len = 52504 +Msg = 4b21e011a232ade7a8c92be77925e878ae0bea9723749528fe83cf89ecb9616dae6ca0e8d5754ec6c92abb21108c2f33cdc18c6887c430b72c5b193356494cddccc577bd4c2cd53188f352846edff0c2ac7869cb74bb16a77c0f0f194a7a9477ae15abb890bd0bcfeb0c39381a87f1d05319c7e971c10e9ef687f96450b400e25b4285032892b849fd5db8649cedfb03c88defea063ee144a1ab1f3bf05f59c7db364dc39c11a446c3ce16307d78d50315ba29f5bb9a57438564c8c7b3e367cd37d74b2375a4966f47489dc5448f4979428abd32193d3840aa983d3020a9f29d760fc7493ab2576c90b1934b799c1d0d55e4f2caa78f4ce61930c79dc017c2dea0c5085d73a3b0e4a6f341e9a5061a6658af11e5edf95bdad915ac3619969e39bee15788a8de667f92f4efc84f35082d52d562aa74e12cc7f22d3425b58f5056d74afcf162cd44e65b9ee510ff91af094c3d2d42c3b088536d62a98f1c689edcf3ea3fc228d711c109d76ae83d82d6a34dcfbad563cf3726519b519fd48b51741aa86720836494b7a589c778927047a25d73508adaa401e9a6c0767a675e31c5556cbe35fadc9671359b45e985c3c8af84113989b299ae4474b85e4b5d4b0578ab1e8a2915a8df97c4f52a639fe32272cb91bbfb721505dec46d51383cb8973425a714245c2e37d0577fbe0d66381d9239db1f08a380cf609dc699698e0fada2caeda44d58d766c4f8214b10642b80b8d7d8add7cc41d47108ab7d07dab71069a2d982cc900b331caec317942122158bac6eac9175c2dcba0c04443aa9188832b553f5ca8c336880824d6bc02486a2b4c086665d276aafe3b1b93729829adca50c44466fd5b5cb977aa78fbcf5c0f0da1b09216468a11493ffb39efdeda5d669ae92bee2f2fb250aa1b9cbb11c36c7a6c6dd26cdc3cfd572ffd8c1dd72a13c27a327a34c6b6b3d80fc6c67c72152eec0c8ecbdc1bd5cb829b811e7f29af6d786f4e93dd4c96fdda295a6aa258d7b2fcf291c2d68e0b1866032475964ec0c6f2fa8c2d6a3936ecb187350def4e818507bf157c0e9b33406be7660605af14cccc9c799b4e051d0d0899e53495bb8931a6e2984bc6dbe4e02ec8b4642fc2f1cb5fd5a5520b48cfcb49e1f9533838753554dd98b6a1b8a67409279df477330e5f37367e06247ca5c3ffefd00e693dcc0c9c30754121c9ee88a574915b9e77c104fd2f921c2c096573951407ba9b440423d76bdc6fc978237a6e302cede7f99038ec31500884775556941f1edc30e3a417b0e02cb6fb5bfbe5cdfacf4006411287bedc565fb06f1be987416407dc852254934df4ab59edce476f3506e65be6ce6ddf91038642291fb8e92ba5b1f0b105670905a2c14796110bac6f52455b430a47b8eff610bc6dd721344e226f1fefd3db8c97e57d56ed7acf201a3fe1a6ee7cc1e5598c938185e8cef3298893acaa040e88750b43fa7c51fe44b62e4fb1518c58ef5e55633409bb1e903e36c449681c8ca74da2b9c49b3d1594d3bbe3fd14cf79317eef143671d4acb5fccb7558b293e243623a5327f292a18af35742fc90acaf563ba83b2b56abd5bf05952b6d11f08bf7533084b6fb092eb1859ee1326daa67b8051f2c6510c74625b9425af8feb9063da133e2d41cf719830ae15330f44f3ef17bb28c8648bd5a74b851987ed163cd70cca2d201e0f2fe8a03ccfd6add11917cf000bff156d4af466331488142776e5b460bf6e2ef734a3100b0545280880bb512985b58d3c3a0f54a6fff82ca6a5537adeda5d980fe8912724a0c9a77290a5453e7d30f37f0dc1bee6c3205c1c30ea054b683785dfb4798e8e86a85295b29c5145daba70bf2ad24cfc4648cd108172feaf50421cf0fe25ed51a12a52fb4c67204886992c83fb0aa5ef72b8a70affb30c127ac786c92f5beb76d799cf2cc8cf584e68154e53e73172c72eb711921275d87dce0deaf2b0e43003123bf0af8c9ca2606878ffb7560e5a8c618e3331227f0af7345e71f4e8886503395ade0b0296a5856e086638b06a0647f586366e979a4989940042563e0e327b343cc1cb90840ac5620fac5d5e0d1d00d1e542d2da8e3d3ad63c87a01c403e75eb29c074a03078282cd3f8afc6bf48bdddf37ee451238f12e25a655be9e432f8466b0390996098b7b59d73b551482f8801fa132c6520e719a0a2060e0cc3b50d2d49b3a6e3dd1279e3b444f7676f7968254029327e4fec58f95c9241efa570bb880af83fe66f8d779f6295fd71fdcf66310ee67f057647d6d3cf307cf9520a0a3ff7f9e209ddb1b7d2ed8b50d5bbd8880dac759a605ea09b1844094892912c023a58df17b7f12743629e5077fd6e3dd8a262fc0bf9cf9db0ae03452c222b7eac6175d1675571972339bd0cfa4fe1a55ed678a45b3791e91c7f540bb111e9a70f9d95f8584c26a85d3d92e66235dbb92192359411816b2ae7717f835dc8915033d4017c7404d803fb5864073516232129bfe3f5b54126091a6ecbd7bbadeb2021ef028443e54f5004717d97fe5a82847e43c8eecfde8a2dbc5d822c5029c1c0e0d7de384c585236816f23bd4268c08a29082ca8e8c05f3fd525eaada6a5d9d77872ddc117c3ab5d793c9fa18baaa5dc31f4594a874f6de66eb04b7f4487fc0ef2aa49472c8f206ef4bf396c6087f8229ef196fd35f37ccb8de5efcdb238f20d556668f114257a11fbe038464a67830378e62ae9791453953dac1dbd7921837ba98e84e856eb80ed9487e656d0b20c28c8ba5e35db1abbed83ed1c7720a97701f709e3547a4bfcabca9c89c57ad15c3996577a0ae36d7c7b699035242f37954646c1cd5c08acb4f2a2076abad02a3bdde8a4c68f1a755ee6f67eb0ec2e35a6f39e9d8c288976726b26b0d15e5b2671bcc88989ed079a29d7329dd5f6a60a72af078567e18510fcbe5d8005d9a22dc57f3dee0d4b3345a4f526d6eb6b1f1ec1238a61a5af82e41a924f5d50522da800ce4fbb98d224dc98e9d9123c721fd95bf62e198fb90a59968f0530f8f185fdea5007d873a964c9cd5a53370e3430a308d1fc966d28a4d7375e86e246e031964bae6c2ee6fa7b720bf19d2eaad9d9e48f5cfabe8723d9c6c4a7da598244b9d9eb9087a338eaef411a56bee05888a304b93e327a24d32f8f06110a7ff448a630929c5e20b3a34a9cc130be346069146b4e20acb38d603098c5451d3be4117f02077dfc8e9d4d13edc927a61109a5b68116a96f4f0bf1644ac8eb1b7499caccb713d966d33f0fd39bfbe47d619c6411afd8828338e4ae520dd9aa0d145c9916b77e59a6d9e112110e1d0f4b0b61cdab5b5e52f05460c0824abe2afa0275a6e36910a4c286cb7e55aef75019f7a0090eef6ec2be8dc94f7c674014ea262c1abe379063c5c4447a28e3534dee0da13fc2d1d17af6c96582c9ce2710e568c81d2c88c83db47a952e1015f7b1d235ab984d6b4f21a0f27e82f0e53bc5f4b093d6b7c57edb999007c397acac22cd57083c3923af5fc2ef5a77791644dc1ee6d36ee6547be47bede06145103a48e85bfe520e63bbde66a84188edc809fc6cf2d10d419e8701637b682fa1a969cd2a29d6035292394393057dddd26253cee4bcd5d9510b69da5821e95633e001569ca9d8768f17f23952ee559fb34eeafa912d27fd9d04eb1662c7a9fe831bc98e44c44bd44c5cae66aa4b10f615f39627782b0e9faeefd35d8955f14d1ac38a1a2c60794412c83472a304f70982b91ffda39fd4e80a35ea59d6b4096e7f410ca55c66a8ef68c34e064501520181084c261972bfff3b3ff8b050ca39873afb17d5dabf21fcd6b5c2ca992b69059b48e647e28a180cc974c50a0080c9c1d45b7352b0512c94e4065965a668833e56e1b50b07d126393a3b1810ecbf0043d4c8e7c5e60610df1b1fdb8074a1e9d43d3c81178f2e33ac18febb691e6d2836c2aa3dd682c51704026610c20cbfe4eed5bf12168288858dea2474be9e7387c127683b2c8e75872c2244c0d475a8bab4a8d330aee8c9650539150cb772ba650d896caa701100a97e0122b25db746b34f3de1a287cad81b3c8c384bfba4290c41731d5149144dc5232966af06db7f19e71c4f314a2f9def596bf7f8333ca7c3866ae3fa609e442342227a7f77e83d32a3ce86a59f200029845eb9dd06401ed104f8266b5cb7cd0a0472c4ea57e66748acdaefc62da4e910e7eee7c01dba757fe2a44e6de767d0c491a3aeb84edee5a12ac8f15b9dc340eda7a2e76a1fb1941549f6c3c8a6b73597103d9eb006d79f854421f32e9685ed08ef0322a3b52e63db6077ee4443aee4cca9c6fe9b24d97c3e226b5f05c1f3d8a9e59800328738c91850ae35a96655c6aa86c8354153ec6713ed319ca9c614ea18b1e9eae13cd7b116402401beb6b2c17bcccaab6a3919454bcdf812e24cf1099c7c7e46767d13001b595fbb4cdcd0be85a655c8de7e67ff2fe94a2977fb901e7f6ee07dbaf1f59f70c2e9c91b7fb4a6123af0f464cbdf7d076aae49327dfb1207ae96f8754184765da44a95f348685f68b02397c6c887a71b77addad9773acb7d65281e6f14c96d292708859cdff3d3cf317619ca1c6965b239ce443594533329ba1f566f13ca6d1e72ad03ddeb5de891e572e2396f8da015d899ef0e79503152d6010a3fe6915c82aec1768015ae88f5f39e5ada6bf93e8d7b96442cd138ac41e059a1a53426249e02ca464b04ef9a428382ea77b6b729604a4ea95642148e3f01ac836aa58fabba9752da07602806c1bfa7f8d6f8cf47d66e48875674ebbe9261841756e2d6db1e95e09c7cd35fb4bacd94eec0da4782390f0c47f211c524822768c73093039a1123fdf371039e8c74d5d132fd0329c1cf54234ff3beaba8597ce1fbc2601cd2dc692f47af98ec753900e72e551d7dece26614092025a3325d877619d2ef2b6ac8900101ff3b525a4f755d4890cd49eab86d67db43eeb8aad871af8a29eb374a1bc0f8872794d620ff5dbbea75bd97a59990a52f22c1eff8106114b68ffa495a1d209e42ef4a83b091e08a7bce956e04cff7556c874452044e802e05cbc4688218d97a9a21065ef24d25516361fcd7efa1cbfffa3822e8b6d9f584e0a7f29caa521214f8836f71ce7b559809f79bd84e56342b41fd01b9f7fbe99eade92cedba14f4f5c2df2ec32d6297e8d7571a7c09375962a9a08aceadfa8405d55a19649aa6a7a462fbea5cf54b14c7344b20c8098c632b9ae7642ec21fed40c1c26208325052a93e9f4c45107ef4c0889955c6349d790f7c9c37e11cb24dd7d8e9afe26a5a1e8dc095fb8564435e583c0a637d73b1c495b785adf0a5fbcb538196a7f82b0b32d74ea4a024dbe27a19b666eff5af116c45b36b6c624341903b2693f2545badb70f5293e32b5ca2718a5f75a437ce0698a7d8151c3fe0cec4172ea639fee486d4be332b6ba1cecd6b339ffe274abad670448f4d669063e88d70019824fcacdfb26b5934e18e1ba98f9ddfcb233659c91da33ed9f25cb4d816cc07305a589dff789e2c76ecfa2a7f064f85a23e049529c74c4f8267abbbe685b6a838841a9e304fdf14b835eee396f8d1fb4c20bb543c95c828106d85605903b34c76494896b85fb779c464712e388caca7917263804cb09e334baef38b7bb74d5bb452ec6fe0cfadc360208cf3abea67f338dc05009f4056d6fbcffc2492ca0b3db8460d10f0c84a5a5511461a383b8a460b05a7bc7d6c797be77ba913e763755a4aceb461307114a66ae0a78b27a79e07d096549c305c8e89d8580140c2ab141a3492e84ae7f395106935b72fc0552aa050361188ff391d68960e0c936aca6fe63d39b1b35f7555fe18b77fec4b6eb678538ee868312bae7fe946d2f529e70f242c6c1784de20dbd9410f06ab0f19caf7a146e0240f59ca3899a85c4c452a7a3ecad223a5ad1baf0aaae55455557fef85010501a4e1ecf8fa6ddbb18207bc3a9adf14dcfe148f59f71ce072d065c7ac8a3c7354d1ef0bc12e2e88d97db7c5d7a233d94b785aa4610a5ea86706871a8a6e1a39e09180dfac3aa456dd279d6cd7bc8dca76f9c98150aa3ae63bdd03a0109963ffaecddd90418797eec46601dac452b68e676aa74fae3e7642f73f2080c674df6cc46e4f45087dcff796242a3725cb77ce26b43d350130db63a21327e3346556292c5a1c268a84131a5b4861aa838f9632b9bdd35cd3e731f2444160f0e3d58fdeee7b8c5c4e052dff1cbaee5b6506db612a6fb1ecabcb4096e6b013d05a2d533210b7e90fdc66e34de16219735398100481b11e0c1244cff88e4a88aa21d36acd9cf87966bd11feacb0282a1ad5adfbc2c46a64e48fbaa8bf47f607a7c1319c589925868a786c46c693f4687774ad6644fd84c99daa959194169cd7efc1adb17b102656a395e1824091ae1cb3b700173233e6965feb3d531f052541a9a9b170dd08e331d89dd77cc5b23e8ef5270ed6336f781251db1bb6071b778dfe02a4a2278943615117b6fafbff8c06664a3f6defb822879c019581f5607b031552ee0f009c312d378be5c58a7f80cc2eabfca20f16cc3b67e5147e90dd19ea1724f77f114792dcb281cea51b3b032774cfab3f3b915e77db10017381993a8c2bfd26ba02944fb7e982d8615639fb616040b60a1a32c0832009c2296f9cc42f7a67e5877a8b500605156bc3e28352c01c8583cc5500dba75d58c16803efa11c2be99cb021337d112dc3ef916821ee8dcd267c4c9303952bbb8664f7e599b79b670cb1fba094be1f8a13cc948f19b90f9eab07547d44d756611a15a0bca2f0f356568d319fb6fc79448d6b9400759990b59d8eaabbca8a72779c3b293013326e1f51981ac5a21d6882b93259623d78563a847817f49e94c527953d5bebf36752eb853a7dbb5f0b326c208aaa5e773daa56e62d63d0c6df98978c85fe924a76e8e179dc2329f5ac1f2b49dc509c2dd0d4304d1556f94c5132ef097adad02147782ab5e4d5b56dea79e7bc8e14c366191cf24098b81437d4dd589484b64a7fc24aedc1bc590aceac86c7020abc7b2bffcac1481e50cc904fdffab60b5cab6ccfa55326ca77ce20d990f4a2b6106e836d25c8ec0fe7c65ea981fcf6779299f056d3846b78f9aa6b5bdd9624fcda427648762cb4d345ada9cc0b86dd3121bc143f1aa7182da545b819b5d41143e09f0c79051828d232277a9fc5c2f29fd1bedf72c3e4b55045480efb62d6f0f2eb2e4ee81ab2d17476dcd80af6d6bd2a69445ad71564cb4b9f5a76e92bc54973c396437dfd223622d876cbf5e8eac63ab3f98b575a4fe1857c24f7cb57c9a52d3080f321f591df42229a5b48e127963875827cd8d8cd8066a34d99892f098a88fa9467ba4c27553e1af291eb2ab4b48a788a3543d9042f56de7e640cfbae83ece879a631480b1f7c892674c70bbaa89a84b7bc81a31f76bdf35f613a03df15c1c4d8b86f3266c56636de0cc2cb61fbcf61b11b797e44dd03ab9797fc8ec5ca6f5458a65b525fd062ebc162c5b4d03490d6215a12b49ced90cecf0f3be587295e61a277dcef1fc7da6e777db90c30db47acaf7f368c4e2dcd24aecfdd514fbaf7b25d33dc52cd323588a966841ca8785bab0294cc4d82262074dde1cb184206a01132e342c4929adb01ff23102c6194349bc3a0bb40625ef288034cee828a94c244c98ef68b968534a120be438483b63a4499acedad135fac26c9192dd94fecc614c93cdfef007ea830b53e076b3567d56e2dbf49dcc0b1b417d74f6f63b8971249dbf5e73af80a9f7565ac432b9f2e6de027e1b7148fda7423d4f69e6aee1c10aba6c2f5b2a8b38139d90fdf0aea936a632e1a1f9ea86452116917a13419032701d3aaf2a13600b644b86fc2513e1e34bfea7369c234d7b8ab3db960095fd5be1509b6c44dca79a65eabd5d647c25833bc04f37ec85bb90db7f9e4c333eb193fadf1ed54ff8da7b94f5a4702369fc8cf2124a344f84494b9fe44a0b2f9e357119232578afea61158de6cd02e64fcf771b8f189a49a18ef2448c7f615a270189c8c75fc4e943e40e9d58a75421a026b7f4714af86f5fe53b65d29edd477b9e2486362e589077dbad6fa5b4027a0d9ae6397341dd3521f47d704138ed7c0e7407ddea01921a08a0985168838c33ea8488370fada71f9a353ef072de006c521b7a3c6d8a000a78eb460f0b865ff3c97bf499a0eee4a32b1ff662c1eeb4acd90d122e3b1830c64b044cd5294d0c4e1d09d1cdc1761454571d4a43c8fb789215b1562fdd4c92f1e19403602c380f877786963ffbe3b49790c5911fe274dad0aac0bccdce87a501ff03002c9ee7d8444baac88ccaa854018aa17153c8fb49ccea83cc647969f57ad5e9d996fbdd05191bcedf20883471168729419bc6ef440b5792fb908863e2b118b0e63bcd78046a5a6b4097ef387a4b28d5a83476d167f09476c0ee55f62b6939e0bc878e5954acaa18a35f5a04fe13d23f1bda534204310397c2ba7ca10df7ac01c306a8e184746d5f5de3432a6b0535bdf2d9e6a1d731478e67a166e528e1018ca035b7b102462697f6c045295f93a5dae3dfab712f75b2b3261f9f42fab9bcf9ca9135485c96685b0472da822a43b52e55480c509b72d7be94a1903b01f640c1b8a5ac0801e9a530fd777db58999e620dd9f939099ad490929c3f44dbd0b3f8cd0ef867070a45f82485aa943cc0abb4ad362ebe1b8a9791b5bf315ebaa7d0bb3c9eb4f22578b19f77b78d7ad801aa714dd2e4fa466fbda7db1bb8fa558c027cf0a05709df4d246e91d6e9363345e2c07615e695922f8ff98b189bc0b2689263707ea9533f72e78df94b866f55729ccaae67fb3807b355b04d1ea457db21c899449e72794ccf4225377d2cce477220b68030ea8baee357f3a9959968d8a1ec46f46a7a220e4c7c5ed4d3a3fa102bb6ad71d87c358ea7dceb28e5439aafce4691084889f78ed2df5f57b7b29cb887a6d70bc779dfafe82ebf51766a966a921ea309a266a0d347b1514890235c486d375bd566a9301a8c9398acb0d60411d4bba47fdfdac4e5953b5b30c5bce1c7c4b262571bd3d1d67d549ec2fc4e8aaa7c66bbf067ad0bcda2c5a695c046d43d765f131a4fc169eba1b8f81ac09bd33f716710e6a2a71f9258975a02e888dcb26a8697a56b39a162e209cf3d658585d79d06cce8f88fa53c9df89efca54ca22f886f1580d5042142278d4ab154d4497be78b177fd12f48d45b329a0d5f58cebbb862b634f7ea9093578e9200f450c632373d +MD = 4bccd0e158f345b34d583f929c0a74d2b502d3a8f4112aeb8a3e0e253a817c52caa947a62a4bf857d1e37b3fc9a5dead09fc2266319733ca2371051a4e358e0e + +Len = 53296 +Msg = efd8212e7ba7985699cbf81402e3f0aef704d3758db890f04946e436ec34ce9c900b4490f45a24c515fd6d91fe9faf93e07ec098656eb1bf422100dc0ca50f1b4c2ed5e6d516d40855224b122b07acfd782d501279b26a0714b23a6bb0c683444aca3ef6c5e4906682c1fa603122d036e798ecaa708ba30ee681f8aa829d105eb366e6896dcb4029c463e243b9f901855447fa2af302441ee117a3622a359fb3ae8b356675d3cc97428f6b826b922831e7c3e458a91e357d2cfba45b5093198964c0935784041cf925cdfde7eef72e83ca9310fc3be75e73f1b5615d9bc16429fd8d68224267199694a50038eb30f9c3223fe8e05065a84a55ce4430b3c66adba07a1c905903a9b8b8a0dc3e094373391a50d2cb91a1f94882cdb49b41aa11e6751017696ee0b5a5b945f9c1f13a832cd74d3884a5a23bb7a03a1968ed754394a5d6c2752c0726a6be1dbf894a1c10e684be81d4367054ddd69eda5d5e30e72b5855837b387fe203efaf975dbdf204ad472b1583e9142e034d8061433de3e5f4b513c3453d50d3047583e706f2c346ca481d5c596895af702d6815e131942537e59aeb99e183e0f17821184d9097be85b01cbe1e5bfbc16e9dde5e01e34d8e3c10726140cc1ff0111f1293f840775425a7aea399694f4b43c56ba469fa150a4a5c218f02a72cedad93ddbfcfa969f0f4545d73933b983438ce964fe21ff581aaf431dba61ab3be0dfc0a039c74787a38e0b096d479de6695e0e8c734faf3d9a5fe2aaff6ccba4b798121c92548a9da3a732f7424ca29c8a222e87527321afb81a39272b8664c7c394aab7833ce06f8423363754bd68242a7bd1ebf83706fcf860af38cb58f6e39948030778ead96bc974bd3021046f0bcebd9120e0f5bfc3dfe5cd465b5f02a6ad44b3630fe8e610f83e108813cc27c1eb79c4dcb949cc82e2fc0be65803187f73fd2470a4b1970d74c1e885c97f12d505331565cdadadb88625f38f4ddf98ec81e3eea6d3cf5cafe3b29ddf9e97c0b3b07beb52ba9be3e35e060ca7a95f045c5b8b6a8c19bcb776a982b8ec2fa0a1ec51b6cf39ec9f0f81beeecfc5f70bfb6d75763076f2e428005ab4b241d92446fd7d662971f01171124d72b570b360ee9e4416d91ddbe03ecb5bbb2267478d2055a81c929151bdb9237e14462e6af84e4d5bffbce7412b5c36412871c2e755be83464c831e8dde6823b5660a559a3cab1931935459cf4010ef9f6f38fb35187214fc78838ff10dde91a7ca6a9cad988580597447ebe2a8fd45cb01e066bd400b791f230c5c47c6bcfbb9c3ff5a21a65df12815001407d061d75882f09bec56bb2e42ce9619ee8363d06fd52124a2e0950a41e80578cb50ff12cc54e2014ee731b2fbfdb93f51de63ae3e9088628dd1db2a2b7fd07089a515969b1a5d4d515bef95af12de332e424cf3aa689dba6ef490ef394ef991ef3755c149259ac6903f4544c0b08d9bb039803f37dfc982b2b346b81fd7d95358a220315b195313880be34ef5493fef942e9def6b689461e5a87d1333acf84b425015554567fe9ab54c4a22a16f7d9546bbf682b995a6ce944e949f1920eee058db95ab9c93f5e2846ada5e5975bf33544c4aa7b6e9492f3b103d9a34f62598f8af31a2d51fe18181f21460821e8d202979eabcc7c6241a4697d8c31b7f24fbae4579e9637e49ee4a7ca8c7cfac500252af573080ceaff6433fe678413e757ee628ceddec41877f2a64d7f276a1c0504c5720b156654579bd92e7482aa68fa93cd3b0feb3dc32eace45527f2bb12670932bc7addd2c9ceb121b6ba14c69ebe11ed0b0da7ed0c487928888dc533d1b09a387cc8469871ee0ed43e4123adb12ed18aa5eef81b1c4fc03c8eb8891c8167219e5afe3aff733e1bba6d1295a8c8cf396cb0bac80e1acbebe610b024bc4915052dfd23a050f7463e9aec3454ff0b2bb25ad579fe0f2f4261efb67e805c5241aead0e3f5fd4278fe03d62af46faa3c9a51ebc348266833e8a1f27298443c47384e6345b61d029a06a6c788c55e1b831787e0cf33c5b3d46ce3d0cb917bbc634ef9f187d8d8f250142edd6d268fb71ec95436ebc143686e395130c37230a800a57a262b0cb58443bd28823896691f78162358999f23e859b4767d0aa8f791b8024b5b9f90372add5810708b939eb7278491b0691bebc63f94c02ff1a4350bf1bbea1c5621d268a57b6302c6bc851095ab0be8cac60f847820cac428f26d793658d2d2ff202bc004adbcd38a7fb0be4ad01e7c4f3c03a5ac0f02c41122256c0e5fa239fb1987c393557a4d373ba602cfca35c556dc6cac33a5e4ca3aa1e146d236b49bca8c8ad5da0927ea6d9ed9a09ccfee6e9235befab78bfd21160035ac3a849692fde7b999313f42258e07cffa2a77a4c251b65f33a037c87323bb770eafbfd499f5b97860417e55a92904fd820147f58b35fcd1c9762fb33af43239e09a4edb2b52805bdd833cdecfcf24f6caa9c75d03bf77cb3eb1da69e2f802f2c492c836b194cae8636f014a13d0d620569c5c47d64e959ff5dbde48f5bfbc461d11a263e72cf792846d52241feea71e9851ad427d73f4b4a16c91cd0dbbbc886caf63df169ba4ded326a5f94e68f656125200e953c013cda3ec9b82756c825e35b49324da514141b1f3734619e0624b57161d8913a3513f9fc451f5d742bc1c0ad996c1acfe5b5fb37c50772cd57982d92649be179e5b8ed78c6b93adeeb8665e77153208e3618d5a29b418d1c88a711b0b1c04ea21812fedbd3ee853c105a1932564f268b0e25f188414b7b33a33ba8f2d1ada05dd70b764df5260835a32726b6d2c8f66d75c49610408b04b9af3b3b814bcc9f51298a9bf5b3c98972aad4d29a6c2656dd73dd0e621f6bef57b58f1285a78413271678b7fc953fd19b30496607add10f8311589fa7665206b4bc1f75256e3cc386a6bb108923f0a8573a6e29241b32e906561d92079ea80f79ccd3ac89275e7817e23ceec5e645d54ed22b651a40afab0f4b142fa94ed4d34ded93feda5a51fa82d1e39bd865a42229ff686010a4b11f45f626bdb6fe401ad92847b5408f7d116e7b995ee928765590ca0d642fcda10b51613986553653acc484d717e24f4a8583e9447e20b824372a3902b79e45e538da9436d0af7f7550b70a2b6de921201d6a22cd44a69c1490a0572fa18694e76e899506e4ec600ed05ac12bfe7c8e67a2cb2e1df8a35cb02899297c6c0f400d74066e8f0a336286f254b1c014c41d87dd4d161be23e815fc6beb9d25e60d3c114f827bb89ac0b467f4ee2d0f5e956e89399e1ae49a0928834b70e17c1a2d56a1407c671ab80e6b43eef5d44ea12c1f28f5797c077f11795382b3035dbfccc6f3ddc5599b6d77839f9e029053b67e70e982e4138b25899ed9bc32812f597423a571fdb1af3d84b3e76c84efa30114fa275c6e6fd43fd9ff82426fd98569bbe322a7861deaaace6297e50d50a11388118efc88ef97209b11e9dfcb7ad482fc9bf7d8deecc237ad163d920c51f250306d6cedc411386a457c7ccef5f3b117bea491a098acca56b95554fdf2620b59b6546daa90833c9f51a5b7ba5fb29faa8a938c7923dc679a7b966a83500f4092826cedad8ea418125814270c6965f4bde8ef54dd010a2e855c5fdabcc5c8569d1d2d89810f026f75b15e474fb35c54c4422e6746d0a48389e4184224941ba1dbef0cbdafa21c873c05caa4eece2434503ec74030e34a1b1a9b662d357b87b6c18080f693e85103c7ce0fac840a4c17d427407c45d94939d9facff869cc8b0a007a20c0d8324e69cb6293da89f84273d2a43087d02350742a7a9c305c07941ffb2472a8d710733d997bddcb7b3885dcde3e0ddf7a51ce6eaea3716176cd317d2427ed1b3b135dd3c46263dbd21ba4b7594d3f0faed5316db8fdd608348df1860ded06945ebb6ce0debecca829422da7d66a5a84e82e1815dbf240912fba42df3afc45a0cc693ec94b095eacdb2c7f02c80dd6cba0dce0dbaa292798c2e2a3fd1dde20cd0ebd32119bbab046723b176cb0a03a6073622a4385fb118b9887a34438fb2e759027e54e334b6821990e855a22ea0bdfda4e62d211f094f60b29bf691edbd546eb29d6d3b443ccba9a17573f9123b1964002290bb0920844b53956b03208ab9d9a336536913c747dffd5fba18de5c2204f1dcb54f4680204014717de150a17f607e54f0b5c8de5e854dae1146bb8b40a5201e8424fdb18c089d361372a48b0fccebfc2b668b0a7861386a5fcdd151db0e34efe58457392f6b95ec14ff45cfcfe49138ecc686d1fd3d679c8ef347355b08d658c0b57ca27030a49c6ad05bf52972190f1b1bdebe55df814c850145c0285bae5ffd009374b921734dfc2d0d86843c2a8aa1aebe56e80f2f802c3ef578aacf630f84adc4357104aa07b25e8309480c6daf64c74c231f9719426bf47de7492b9e6d3d04396fffa2f1d274aae606dca88a884daeb0ac603ee6992a6905956e390683104d17a9cdc3eeb72a5b5e05aad8281d44aa137914cb3f8e51e7b6097fbf4458e6cf896c422e4cbdbcb7128f1966ef7432049d13a407cb27c8b4b7cbe686fff4a5d3b53fc6adb1ed12072b2b91188997fd05750176ba336e771831630956e06037a1c3aac106c64d1592d0627ab89b8e8ff2c4cbf4ab1e6b475d4c5a52f78fa38281dc359b0232e8aba22abb3d0cd05fce16b1fa85a435251ec92f362830b3c570bb2869bd699dc3bd7d61be40ddcd14a4b86515906b20a4e6a60382f2caf4cfe896cecd8d03b1e8346c9cf3ecf23db5f81f07a47fca86f0853aefc31a8efcc8d15bf6ea7498135ef6b703e3a915c648b194c02fb9860f12e5ce1c83074170b81553ca46dbef6e2deda6bf15e00c10d7b95fb83fa66a6411eca9b24921aefba79bc36f6b28d1685eff81f811f7a0c469f7c8165bae3d2df58415d89ed09c439e4bf610e1c506a9f7168fd56058998a075317030c39c611c69458b6097cd2f0a40d33d32e1856da0319197f8969bf09b8b593a6d9afceb98d03bb75128d19abc2c9c1e0dc8b89a387f0671e1494daea840585284a781dcd52bb863d416b391cff67e960738466ab8d83c1d98a40b1d4732b35b0e7fc7bf41ba301351f7efaea63cff37b796db69b1cba6fd872d40d708e10eb6739a4b0d6f2a37486332f24bdf6ea275878ad411a3d7db84454bab666dc9aef74c7d6831cdea3265705e47e3fc19ecc20f7accfd1f7b4e645b859745d65b2880019fbbe6ee88b60d11e06d116cbd42cfa7fd2286852473f0227190ffe32410033b87c277316436a1c05fee5ea1c758d0f97871386561e0ca429624ef04a2d9d342bbf87d472b48c5f42338264bd673887c7335ad30c219452449cfadbb660a82cfa2ea53904c40ec35e0c702bb5947589973ec3f97b392135022fdb697cc06842ae304b48d35c376fe0f376e80ce28c3d9010179dab4cf975ea84b940a637279fce2c3face765508b504f5e43cb3bc4cc39111d6aa543653984015c083bac2b6ae28c4a0b48c5a1413787eee3f986665e1aaa9f057007ada9590f8c6a4406becc73b7340eff6672b71c05ef719eabba1abc416319147f19eef017100dc82f26ed0815c55c122e0b1587302894c3910829a640334c9a92f130d17fb19bcf0eabf4290ec59e8c07b384007063f56e2298b3600dd546092a7c9685b037b9628b970a5e0afb7b72d8b42c102d663caa45b1df731211b0692e034993136a11878e30563071309cce8954343ecffa107ce29dd566b5b132c385ce71830f114b48ffc00126ab2ca8a701dcc413bee719eee2a2bec1607b731e192534de0bf60fadc68d32c920b748062a94061663f500072b09c20d7a391c82d150bd2b71df03bdcce0129f399924f2ebc320cf24ec6dcfa61a08d16bb1d4f7959632f2a895d280f700c9325c99e3732cb23ac66a93074f3b1cb9959aac44864d41bcbc18e022fe30377e0af2812d91d5aa7d849eb3778ed359fce271f11436e197820f29879c4060cb59ad6417ac55cff11090261464945417fa3e574aeb103ae1ad764354e74d6d0583a5182405c600cf1c726c7e776aa89fda34b47d711a3e666476ce0dab2d412d247a786fe3ed518ec9b3d6b95817b539c549f1534f5ed670d099327b92e9c28b63b2ebc2ecd0aa753edace8caea3652ce30774942de4eb451866d7664288da6669d7d8e3c879f4cba46fbbc122179ec25bf5a608b2b2632e66652696631270085e70a99b20f015d922fa051e5b7a4a41569bef7687d22873df1f85d29e906bb76906c5b29c3bf7e7e104136c02d450f2fb82b8a8544c205cad1b5de39b09b5bcb22094f0e364803c09144f72be2e981d73316764c0263531f8e117920185355f62467e1d9e739a22c1b320fa388f0a0ae5306673736a4e39e7fa19a5780cd3e7a101eb00746e2cdf3168eeca17ff8e007a081b9d162052bda3edcde4aaa7779e96d743620e5f1ebc82bb22ac04860c495a40f0a9514e2b0554429a193c5d09ca6a52ee0b134d5801dc342265a72d6c2bac604b61cbfec0592082e70ad93771b444fa54c32c41c1f6665c57c0a7fb96ef99f1968b2d37f90132341e80273b97a44d56de52014243e349ba2984adf972dc487a38f01e02be44b0e0a643ce7364e1adeef27f3958c50facd70178602de93ce18399584766f76cc30fe71b77e7beb58b4afa137d8b30c3b839456669a1e1558e94218b4f6b8cbf924749d0ca9e8f660ff35cd774e46a47956a5f146f5d437175363850e0196586461334296ea0bd3d63708290c76a5ce36af2b54a1b67f8d6bef046709f796b0806f810f00cf53182ac49d2091d26eedf5f57b1d215c9e7cc924bb3b43692848ffb8045eb4ba6d47d1507b6091f1e09829e23b973048bf79d19cee7e14d6c99614c323be3d4b98d76c3319557755c93154cdd37f490b3128f7a014bc28b1093c722965a9f4e3943b4e14fd6bcc6e876e0940e921e624b1fecde6c451e99855809a5350be9622be08095e9e300bac8982b9c3d32b9225a05fa6c983ebc1ed3d26ffc96b487b8994b22078823ebfa06e33e8cf27f8d78e9ae024d0c9f65c303e7415042bf42f78a6ce261b3fe442eaa3d608db6e1610aff014ba850cee1301c81c6c8bf92e2c7072b07c8f3dcd5feba90dbc70fc0fe83a4e61fa6ed35f80c2687478d97972fd21770db66cf25641040c3f56188842d89e045c46f6a3a72002ae10cc65134f1bdc223a463cf41ba0f43bef783a695b4c4bc06832a4f4716b32e775d9c76d3ef33102cabe77b999fa1cc692957f35b5bde3f12a4ff25c3adce3d3182378ddbf2da0a7338195c93db6ee2acd202f63fec7c724f6f177216fff85cf7c2be1eb4c25ab7e19321f998351f8d6f3baf37a72d495ba62c9ac1a7d4da95b1675ab2c5275c205c0328da11765cd59aad843ffce8ea04ff22b097e0f41bef47b732d078e9884bcdd156886466ccc3156ea995a7e30a75439a7f7e28276473a1fb6f0034cf85421d46d28afbcd185ec8c647c10ee74fb558dc32fde7345d27a77a38ca62a2fc0d32a8c5683c73e8af9bff864c9bbb61cb2830ef9d86e4ad15427eb6b7682a94b2f63f56ab9120e2bc77608dbdb529e9c29adedee46bfffd45584d104eaf2ff63b5055aeda619bb18f4230859cc3f78f9f952d295cff4df4bdd2306f179f79c9af2730f47d13adfb30e6b895722feefa6c0367f58daa953b87996ffb9ba0cfb6176519511d111e69a54940e6c560d6d331cbd26dfed5a179ab9452db611bfb657af158ed41c2b6a2f8550fa020be77c1f4d5b6b637e637572faa2138f276c37de0b335ef718e3c4f31f06fea08b1986dbf095dfbc047207d1dc52339d41bf0a75293f87f35dd7a175604a6ec07a1037e994f0e62225e24927ccca10791704a8ad679e8c7161736a37178fdcfa4f67e9d8b8f1013e4950a3f55a6e3c9b1df98cf774d4eec9ba4399a8934bcbb6818d2729bb1ac378e539c2baf3d31a8bacfa41d3af772194ded4ba5a7202bd7d970c7a4d39d2af6a8ffa0fe9278d3cc36a8341d295f9c74b258336cd224924c816424dc3b3bd277bb03df62073f105cacd111764b6e1425544ebb9612283841e85db3c1da74ebe34ec621fd147a3281a5b403d1a80a2155bb38a9cc6f1466df94c43afcb82ebf61eab02d77c4117f62a8b8d1d6491c0d2c6d7cc6b5f2d0644e0fff8234dd52941a1629cd791ced40283d45452c358d1ed1f484dafaa2447ab5e178531252c9b3365a99c7ab26f4bcfaecc3257c74439d6dd8b6ad428859f03c9095743e1e7964dc3e68e4b4e90f3d013e9a3a6d0f28d2279f7c0636aaf50d0da6c0af5f494cef344bfeec3d6d270964ba334ca80d230428d33daf7d12011a4dab60ca1ddc299b6708c4a7edbb22694ce9f423d4761b7c97fb606ec0c8665f2725dc8e22def7b19dfe20dd6ddaeaa5e15146869a53fa839da04f0ca7d20a24c19e9ec31357a079fdb37b5564d265054a7c923ea2aba75f62497151d93ad7b1439d0d319b4f0b3bb0b13ed87bac7dd1b0f23e1493860a580d7e2e04ff08b44dd6ab919f60cf203fde80cf2e5a6f19503a39b4cd16ec0bb8c7c8eeefc0428842a24f92d70adec7ccada6981fa82320cb11db5a34d2e692c5b7ad19d8c5f23dd6ce11789f4285e82c48adff730dd07c8a5c609a10707b87c906b71788b61fba528279acc0b0cb6ba5d51d6ef1337f14d5444edb2897b4d20adb6e51c73ad2e7fee8109402fbb838807d7c4c62bf38d0f4f12f8445f0975bd15f592d5cf912ac21255d992ccb5438056754018e5c01982e8a8aff2f222f0b65b90014119ce7f10464e82308caa8517bbc2cf53db0e454cd38e8b3aed681c81012eb6faccb599ef0cb3a9b5c9ebb6c2ca38d903763e8ec1722d0088ab4977b1892a3a4f62d719b2b82da67f1ef95725e45fe3a431e15485571ca668a63780dc660af1db76b36d0fdb250f18f663f495ac9075b2b897451ce4c5e35788c2c6462a59740b72cb126b08325a0fdaac0db6858305bb54b0cedccdc15dd1ad6bc6a3488e477bd19e8838b1ce0db0564200ecf1a02a2aa0ce605954876c638ea2f0583321d2993dae5d1d5a6090c6d3c68ccd9360498d176088272b90a599c6f8d1f99cbcabdff16b0f6d748299afed99ffcccd5bfa5f42f7c4aab5757fc0d0ede9fbc7a739dca754fdcd92bc7ed80e4cd86f11eb932d9df4a478849e718526f2b6d3567a130bca1cc6922766b6dbb04fa51903a7ca5492f785f51b8421634397b714cbbdbde9c3f2e87fc529d8277e22f47f15090680cc6107c4dcbee5c7b15d793489eaa0f34fa7e1dade7e6947b26744f5b897be1ea4e1985c5ab7554efaa46bb7337952b4a77c3127e5ccd0b9077cf51180dc77aab6c9c +MD = 2d97d18d0b70ab231a0ecebed1a686c739914673521ed64ec6e27c1c78e2000981df932439a697743cded208f736164468a1a53cabe2b65b9a0ef10ad42f0372 + +Len = 54088 +Msg = f60e7c7c4f4f13eba990a76daf1e6152fe6ef25fdd03dfce28921c978e65ddeefdfda90d59fbb03374415eed3b5430942d04c71712503bfae984b19f22a430c50d0db04e935a744524859a1ff04ef1415ae10ac3a9b3927401adde1e938cc80b1088bac7633308289fa5838c36d64b626d4be4ec0cf58c425a56cc9b48e54ec8edb4ee01325013e4cfe840bb76b2e6fe4d8b7d19a2ded26edbc6a39eab7769048cda758369773e829a98fa3416ab6b1de4e9fcd2d3350c006b478aaf2309c2c8d54176d56e713109eafbd880808982c719ac899f07c4e2fef41fa9571865001bb0331a80ab069381a65b03261a14d205d41e4e09a651fa725d97291df251cc0605f6890b86fd0df3b6fea2ae4e1404defd85709718a5ff638ef7328a1a96ce90bcd3eafe69204666022ddea18350bf5b7d2a1ad2c68897da6e87eb25f6fcadc1bd1265e2bb35e7e2712fdf862091ac833a55724016c16adee78f7d76ef4a12a1f0fb243ee405976fed4ecce58f9f735e1d4ea06b711a2177e05610056e4aa4393dd64c9a4c58ff165ed0cd473742bbf40e5ccddb405964ad4225ca5bd9c20c908dea087e5bf6c6deaafe0c3280422c4ef6c82116e947da89f344d6ff997bf1aec6807e7379a695d0ba20ae31d2666f73bbdbc3a6d6ac2c12dcfb5a79173dfc9cd2e0d6000e3114f2767edec995772c6b47dadc136d500251e5927f52bacfd561975239ae8260ea4ec65fc284313e0a3f801093e318fa024cf7506c11e9fb2305ff1ecf043df9c0ec930d82e90f80b2f650c411a03e74d70df87e4a3e0e878e91f18bbf8aa7c43dd2c3ce47809508cc989e3d7dd14684279cd2644061903cc00c54e232c8288b0a0a40eb39d22c9dff2e51c400ff9af39bff6b4a7703d7e25e7e126c4f472914ce9cf0ac7f663c06f3be53a1c2b1a188da40ad7816ab4b4113f0126e3f8e1028328ebd5842c42e0c51538b1cea6fc30d8d677e3546e2542084683c332925478fdeea8e39a9756877c1f2e17da1c268485b7ac8cb2f2f5a495cf178023695341179b84a95dd00540feaa53d0b0e30f803ed837280f81ac5824190ae228d654176abfedbb505ed599b7573870f5a43db04ea89649dca2bfd94dc4fc6dc581dd5851ec628e14ac5dee50965a7d1ac837a14fb958669cceb6a47d435a878bc46570777171960d40f4db34f8186992d773bfac8aec02e27e17462d14a3d3ee36731c561fa967cca530dceefd10aaf04a78780f8dcfa32029684af7d976b75f508ca848275877b541a86fe905d1c5a5b9bc76c33271cbf869000f47d231b6719b18a0f8293d4a69cea200ada2ba5e457dc618723980e1bda5952fa7cf7365a78ebd92d0a596645c74e43bc77468b9322f1bf996e36b88e2879e0892019a2973a3d1fa5c2d123a000cb57da0cb3b8b0e462476abc0a026295761469119349668630c4405102f4fe6debc42d447b1282c4b863c1b61ad5dd4bda5561f86d110e844b30c660f4c1a93635f27dc4a78353eb7a7a6703701749722c0a3a7dade4d95e16ccff96b073e784314a92373ff2698130f3254c14b2ec31f59dbc475da90d3919feb29c3df0017f6832334349460ead6238c1390c8c0fb1bc75afff8448f340dd2fa919a3223f4e61132a90cf69879799b00371628ff91a09fadb4c2ba8d398e9c8aab6ebf0e81aa4563dc7d8421f685cc3b59d1ea2f493659408d759b3f56cc52f7e1b1c41460aba6135906db91d4834d99d6446ac464456abfd481650a0e2faceedef3eff9f472a9ed99295b6c85ea85a856fe497385666a783466a671e220f0cbeda5a113cf87c73f37658216ad340ae3366ff4a12f11df062795ee1b5558c50bb86765f6546394a49e3bee249ce843e6fefa0ad1c3c02ee628af9a4aea3fa04aa989dd16159e88aa582d0e2ad78fd7003b5cea89e609d0a4a2144995133df8f54bbd44f7a58119bcdfb9507e0f932adb55e9123df8576aae4e545a8e52ec659819525c1f66b3de589f5153a2978ab5e4f93f10628d11638f67f06bab4bb34caf8ce970f1ebcf2d0a3195964cf1df1e997fbf739c16f041a49968fb50403b34a830f32213a70bbc4e10e686b1b128bb8563faaa4f285c8baa5d3e6831e2eca41e800ffdf92b21d290d7c4b39557c013153061330033ceb7ed2de150a4a630217f04805326da8a267ed0d08b4c586dcbe58f938c33bbbf4d0975e2434cfcae134638f4d00157ad1e64a67a9c6b255a3c62bc02346e32b6b17bdfc19e7f78cf100097fdd33d051320eeb3235566614deb19502dca243b3d8ba0d5ffe0d08d1bae4aabebfb1e7554e489a17b54b27e916e65e6769bda37cc4234c2fda8d4bc0c3460df4fb64a2adacfa1dbd308f3efcd1cf4e99d4814badb7b94516b64f0882948ffbca97324882d58e3dceae09f3769ad32d3d25d5826f37e4bfba993b873eb5283ce79d0523fb4f6ac2ef38a18d7ff65ac2fe62a092eace0c81c38b390f1daf7798f514c47941a4f874cad43f563e6fccd68195ccc145039954da9531e94708e6d7990557937b5b9e1b078dcb94dc8c923171c54058a95ef300a7bd0b5ee34bdcc07d77a5b9d2fdc67e4e682d9081d5129b74fbe49e3d68834dd10dafb41afdc11c497298326e11d766456f4e9253d3b5dc323ea0dd2aa8af03018d053313a8fcb3a5ff1748761f399b97a914e17d0de3bb55965c5b97a7e0e9de44f625f7d3f74d37240b4112b053e5ea1e68c7250c0502820b0062adeb7fc8113a68d0ed0719b2aaeb5a666c4b8f0ce7d7338a7456817763a6743893fef2684177447e1ecbcaa9a45cedffa97854d735db5b739175c1e3a06ea0257268a39117047375b1a772fccd7eac54f4bf0b0f7c32cacaa4f12b0de16c6d7372aff80b3ae8dcfdcf237971cf597fac73a91a7c66e566d7d75029bfcda6c168ba5d5b9d542b6660a0c848d14ff54f514ebdeae699fb19e1501c22bf0c26864e73f933110ad6fbe44b1d45e3f85b0289ae83e315bd7cc93237dc7ed647f4a26bc40ce82d06ef82d3f9abd9716f92829dbb846dd17b716010b519a4cc2616ff08d61de2baf081e273d1f86c415fa2b5d59c47f1e17be1c5c4f25afe695096836cd1b4887f6f91050dfc8e671d6e9485787a55d50e64d4e0961527f3756e7b18e1dc5a44462c29d2e8a1f530cb446fd9d07c348320de5299cd4608ebb727cea5ad1f957dd5cf50314ee9b331138a3b9823cb6e61df9364d8b3af864ef824961119c3f09cf5ff0f0a85fc52d1bfe800acba8e8bd9122811858e752885000cdb466df0f0076e646d45d6015a779505c7fcddee115283486288a7c377f69788a62bf1cd1f2708a772cb8920518d5f8a9770d3138a34f8995dc946bffa0a8540fea8ed8304648b702682e683c17ae31e79f0e6247de63ac30c31b391392991dbeba5a8392727be669253354f31a6ea6a74645c4973d2116f77a63562bcbc8502750a6b1811d66a32bd26bdaf2a793b1690b47eacf35f4445a511155a0c29275ca5bf7e4849db577cafe4c7c9335ba0c9d5c9947285f59dec9e5b9ca0b0da409282ad29f0579c4deb71739bc5d4b4df2b4c89e6c6b1fce20d6a6a0f5d3035974b14bab439c48314270abd81cc95ecc1e5fcddbbce00dcdc4f1228b9b815a4f63064cf664a17f673d982a9c106ff6b0e9feead5db2f9fe535b9d7ce1dae58e23e879d5884cd85f34a9e21ea29a99998e0028e2129b25c80fd8134dceea2b5be71c5cb2626690251d3e31066db0ebdf08b1b46223b10aa3d76f7c85c9116c720a7413503cc1c6b0f74177486b727ea3465a9a17d81b32f874c8e10b1a77323d5497a8955e8402688959bccce106d94e0ea2e0e87802252daf8a49c7094304238d2e226b0fd8ccb59d2f097a1a948549293190bc4d8d69ac4e5dbda1de9e6b8c7ce08ab999e5adfff96a653a5d4508fb5fb0b17d9de588db19eb4481e0afeee0ea56e76742d22cae66b3d9f4f140eccb77c74c12b1310a24dad9e64f589f15889f38415c53c8d22aacb26c901faeb8233b1d6863d19a75ee57d2abf38e9568ea632da18213ee25db930e26f62fb7f56a715b0d58444853a0597c9c55caba706ffedd0ec0cc6daf2ae3700f0e69822a07e22843d954622ba4a87fc05e5435b47f37f190fec46cf87d637f30c11438df64562d13ce471086610c8420f4732fbc83d7112f244514863ddce490f57a009de89512841f667ceb3f4d33c20071d011e1a7e4f41b958ce3d317463793e103eafb667e9fb4f9cbe2a63233b06b943f3a036c13e6c9fcfd97a5d94e2e849269510592196b754828f3fe852df21b25a5bf4ff1450d17c48f281deda47caed559576ee28cf04b9ab9a7af0cc88efa6b29292ffd2372ed336920a21aef29fbf2fb869f1b7f361c39a6852190ad8eefb0f4ff0a57551c3493b4079b27d73e52307865fe089946d26b1816bdd883f9e13a2dc948c88213d22a976372dd06c29ad8f87cf4708327537937e0e9aef3d8ba53fd1050185260b1413bbe8e0421bdbd32a254ea1ae5e189ab2a6d0ed8a53261418c5a8c0f6f0ab71fc89f5764d338a2869f7446cf657d5a481a45951f400fbe4c013263747e19ce0e658f35c4c139311c17647157ae02b09a2eeee44b6d78b9be851d3d112a96dd543a1590ed96cb523b31add47a667872e78ff26524d3733add3fa582ac1888cc3a70b9d0a8f8f3ed2d15d6d60036e7887864d97f711b0b29f358519b0ef3f783082f035dbb90bbea38ec67deb0c558d995d62999fcec456e46f7a9eeff61ece9069e7ca0ee052a31a5dee95653bcd24f850d6c1d8bef2bf11e4536e4470a6de87ce6abff0bff48abbc12e3a5b1c25ed192302972e7cbc49bc56a7fe6ad988567b12e18e3d8281e3ec4b1dd33928003480267e900d8291852828d0d5afab0394fee9f4cb51f25b3d307e25f68be9dc99a1edc332f26b130ff9cd666a9f6fc93867b61cedba6a11053cbcef2acfcc2b8b02eb48f67980a138b5c6e143c69249af5a09b26bf36423ba4599c1d671697d9727a1a8510f7ddc9dc0a7d9f7a1bd05684a576ddc796b03eb0f9756901d2c333c849349e920bd15bdcee2a8dcad4a7d01cd1197a5d9094215df2815de2f9efce9be52a61559c8fd0714f9e68965b510fa36dac85e8ea96ea958ee7817253c2b3d1942557c272be30857701b74579771b03c15987d06d5da33f13d05d1aa7e5e9549f4d063f540784ffac7a033ff6c1fd221546077ce1925343ca637a40bfff780a4ec9f8350c12d3c73731d3eb9ad6bceab19b8d560edc0389fbc95f4e61b969dde8c2b50d608625c5604fafb32c5f6041dc81a1c5bbe4baf8ee2994aa56bbc3b4b75fc32d190c82e16efc1ffe7603f211e020cc31b252807aeaaca2be65ac8e7601c9acffff4bf303ab5fac353e6b7941039f9502b9cd5df6397a10f05835d30d0f27f8e9d9ec7f135da1ddbe4d3efdb98e2685a199fd5a5521ba66aaf6fd996029a22d5571962ff9cde93b026b258761c9df22741a8b7e7deb952d5306ade8579662d5aa8df20a9d43604d695fc81d21fbf0f7e4031fd257de32ec5251ecc8daa08e7750f6a718e7062e9b5cf3cecae16d81895a1e605ccb44ba2b119f6342d18d4e9caf745e61c0607aad41ede0938968bb623c31f726c2635472f7b7b95d24a6cccb2fcebfee0e976c0c8116a5820132c509f3058b382285294a6c639722bc332d8c38ce71c6bbf42e3f8536c69e3113c806e862c598d5f0603ad869a5977f7c9c67323a1df1adbfe5ceb415eaef0155ece2820f4d50c1ec22cba4928ac656c83fe585db6a78ce40bc42757aba7e5a3f582428d6ca68d0c3978336a6efb729613e8d9979016204bfd921322fdd5222183554447de5e6e9bbe6edf76d7b71e18dc2e8d6dc89b7398364f652fafc734329aafa3dcd45d4f31e388e4fafd7fc6495f37ca5cbab7f54d586463da4bfeaa3bae09f7b8e9239d832b4f0a733aa609cc1f8d46c0f0fc33dfd669b5af5cdbe2c12ffca6688761e7f40839a65c29da57058fa7594705c8bdc432e7c13b4cff7c47b2e046682978ad08fcc14f32458d4c7a420e986b63bdd19ee0372cfab6c9e553b95d4e3469d85b369b8e7b72182f58beb93b7a9a953c3dc480f04f7a04dbac69b5dc2459a311810146f9a1b80c30ea3767a6764114d440d977abaf15c1a53ffe3ae56f447fb49cfd918b5850bc529f78dfe8121b5d06894246c1c26a77a72e85baf195815a222d800dbc05f882d4d6f77478e475e853859370cb3fe48151d694b8992d9cbcfab13d1e14410c0a683f37e7c163ed413bb44188206e209945f6afa634ae03329eb699452c9007bd6d26be8c59f6ddf24fa3e0ef79d38b09f3dd3b166c7d31359eac09056d597816542bffe4bb33e475dfb2d6293016906ddc18cb8ba931c3406b0020e13f23d99fcdbd70836d918d368c8fb5d7db9ded3f7f27d578636215ed9461556b4a75a8d43a69b4eae9a634ded698e44de4dfedf94d88fd6f2364c5879b3e3b05f7c5623e1aaf417da7c887b93e4d062dd4630f15d7ca87c281d04ec90ff52643dfa99247fefc8ade209ed250343a7fea32bded3fae5b1924d72b0e0c3334cb975a88b57c47e0156efc9fb15e58efd5f57846f4b121b93608cbebafdbc55b8f82f0f9586595e855b29431a12e0cbb9ce22da4b224d27342e0b88890b23707d6a95b51d77e5973e04b7ffb3e39c04c3932cb3da2055107e44f25885d29f898554cc248df311321298c1852c51c24003f69c9a830ccfde58e96ab61619d9aab701ffe44bc28536eb61715eef24fa88613f9a14b1af669aa9679b2ba4aa79dafbb8547bc1ace8abb0a5ed116224ebe3c5b550abc9d2c04b5b04ac3e974b262239c0f3735579e29a49ad5d26ef183e5917a1e4e6343b85f95509c57857c588885962055471f01d0a9dc1ea25fdca9af23f4b7e4d5ab35eac7fbe10604ce0481744e6b2a47cdb3e039628bc97f300a8b725fb4769a301f36dc16ab27edf630ed4e09421edde00f08d1b2cfa043b8310afb1f966c178efeb430356d65a761881c916b37bb6fe27d9b11513ccf23c1b79e2cc8c04de3f43ee372dcba27d7bc54afdcf8de788461aa1766a265beb5e8f8b595cfe494662c6a650270f3e6e54331178f1688eea1da0f1e503adcf7609a9ef1b4a955c834740b896d96ad3b56b2a7d43658d9864eb807104c8f0501ca52f4d307f9a661d5879cf112c2689db2672366514442c7e1983c8dda13604639aea4ca1e2548e9afb3891ca068a8767efd2e5e6e5d572c10d719e7877c916d651a295755a0dfd849a47a6c851ddf6e12d1332cfbf8793b430129ddb30efacfa301fd0b4d10bda629c6cb713f368fdd147fdc4278ca3b7e0ea2d6b10b6f1ef59a028a4672e984ebd69706cb4d673c5c0a75844f6337105cba48cb01fef17067a0a87b99559fa811c691a6cb2e0457636b4ec59449c39a6ffc4f5150ec5a819e5d402b84639799a0704346015fb2837b9d681ac1aaf43c204b43141e71fee522368624982b85fc206a284efe60e6230d375dee47f54d68060da08deb2e42fd7bb2c6e1352bdf220a2abd4c22c003c8a0bf9ccaa7c733c089da0419175feb4d0358af0bfbd317cdd6287ea80efbbfe6de9cb13a618f4bb83426da6043a54c5661ae9aef4ccfa4320cf9e8ed23726f000f6517b7f5bbf9c19d8a8fddf08cea9c0f0b0725b860190126f588a600d295a6cb9f4ccde4dbc27f1e6bb0fc9e854aa084249029cf32eaadacd1ea5d178ac83d8bb1ccd6af7d4a334f40da46be0ce0e63951b265e1b6adba26e56a6ce8197b46d823247cc60ed5a098b06846dfb241efb738ea849079b698fdc6a56fe2fd23553989c02ab90f09299320e76763e3f22f8630a4f06beaa9dcb9ec07d0a8a464eb185c4c6b090c6940b718d432eb3056282eef7e23d4880bf7e3cc2e3999ad947afcf105b836755a888d0ebb33f615f25bf9abd2a95ae0317cf3ed64f546874677700ea88cb1d871538d8908e4e5035b5daf2c4efb7f71dece72d668ae2fb00f72e9fb91630bb43254210e59c06897058f97b75f84b2bb588ee91d95ded5b633fff35e5ce5c48701ecf0050a50c13f65745bf360ff853b3310bf0978d1a9187871049d675f4ccf84906313a700bf6b1fae54570fa6675fe3066d408e513a452178963f3d6a350c2ee102a0cc6a93b888801958c823e9c80cd28c4942c809cae36930ca6b80fdab65514732c6f8ee9624bc338f06f28cd204f7949a3290882822e56ca57e2e075bcc53b9504336308298951b50689cb12c60080ea9da5545db645f9286c1dbf26bc88ad17fadad0a1c48bd3943598d0725a26662fea680c3531c4a4ab4e3154f79ee49181782b7cba1b99725ee463def6c50a52a0f23ad712ddf381dd65e646ef4a220f5ce5ef105e16fa559a7db39ea4edf46dc61de35dfda119b54519043d16a989512fa9ee33929df8a6d06750b886bb2bdf28d42a47fd657f6b6bd352e375a1637c822cf08e6098d98a880a02d3a417f9cf4e7dd93d1b116ec9d8f999dd131bf6bbded5bdc9cfefe62b4bce919704eaa465c182b6e65e8e2cf713f5a1d6f9008c34c90e1c8be78a67b1a01bc4aeb01a75cb08498aebcec2011ea42d32742d366b0fcd3fd77cb151a444105964bdb091b426ab3c1cf373963766140b145fb9a7db7572ceb445342de40a22f0396f0a35a9a133c136a756f215f6eaf50e40a439268e3f247c8e7904712e5e480b69c8f09c6127429eaf7ebfe2f7ae55eabff7d69381bca9f6fe86c091d64cc9a256f2a9d4910f261db2f3e3e790e9926e83b965697771c5ec3e65478d2b75dcc6dc8e489a5774d57b59be486cea22146335f2cef197e7e124f61e83ad5460e73ea3a6b436dbdcb7804be6d4b82ce143907cabf9730aa56368cdb75a38799554d35441d7f046d234f4307371157fae87bf01ebce36f733b57e6b3ab678c49d894d9768980fc0dbb49eb26e06c90b1248b66cba3584871a3d2e79ae7eb35bfff0741322dfdd70819f4777de7b1df794ee3e642016a3e1e165429f1c9a326643ef0f717794a07f4b5db727cbb8596cbde11f912659dc2f109480848bf13d0ef2f0e8586fa0a115c156b66b3da4c5911389219cd3e677963031b2d1036d1b7a935ac57113e928586cf20ceb3d29a98f204f0c2d30a5bc40c8a69e2d8df516d4ae956f646a587d73d39a804ed22e4c8d6c99a7eb437ef355605a0d412f727441cb09aed87cd5e78c7fb4dc3c059cf7b47dd0bb7f165a63fc80b5c6b5f3ca7eeb731e49765249afccf6aae65fdd59f22cdd5d1090b11f555eb11f9330e1e67cfa2d3c0ae5f39a1e5ac2e2675c624e851c14a66ec71ab711a37a003a5a00aeb69682cbb7cd67b27a5f6ac626de9c63f8aca8159dcc5b08dff264c084dc580a73e5f93319d8b7770b0277bced8b94819206231164467cfc0773f6c7395ef1e3fd121adcf8acead31b6c702e820b518e9c4f0d018dde837ad050b87e2187d41f9a436d2e1cf108adf0c4dd83ae07db735eb2ec4fde3b7a6984ae324b030008a8 +MD = 0c25d4a35196e3771cff30a7452ab30e68d71726cf0ab02aa016432b1d643dd975e0702f458086d8ef7a35b91d9faa6d29e7458840e1acb02e208b3d79ece077 + +Len = 54880 +Msg = 4064b1cddf29c0c9adb380b2c15250741f89fbc47ec0986b4f39aee2fa459c206bb838b0cd9ab706951fcd13c3d91417642db2b75c04374f62c2c4894c7c722f8d66f13dfc8a703bd7c0bdc907daae7ca51fbfe8befbfcfe53f42299a4e00153af55249df362b40f797c9afc15bbe44aea476a802c0db1212ab60f398bd91035d76f19f73a884b2a853daad376e67f29398dfba72ea21c5fedefd59188cf697c109b18745a66fd3502ea3777b1c147c39cd9b9844d220761a689baca232ad2d15fc1683cda6292d8f96b87104eb603bd1a13ed4010f538cf5c6b070ce45214dcceca527642e6d1ba71a8e2c5d62c7dc2bb23df0200837750187d037e54b0f744649c1e4b1b598384728892bed08b7b7888f1d7f3a3348e8ce1a7f849faaa42b2292014e2eb2370dd05f6de24c43ac68788651d3b8471432cbfd12c945ea9bfcd263e7b643dac606e30d70d1f3aa32698c468f80128a060d8bae3e8880916343e62df9df8965b1bdffd1468d6bb2d625342e0b26d192bab37dbc5744d82576aace5e9c0c7809a68d774953772ce40445f0cb791a9de78edf22960180a51d629c0b8462df882d111fe9c42c21afc4492652ad3dedafff1edb0ac9a1ce8fff93822e2dc2cb42566dcfd7d0350f7cca1150ca21ee02b04fc751a6d5cc70e132a61796b950423efc2927c1fc12a31c6c095fd7e7ee1c276034bd8738f63a415d06a6d5c57ff6c6a4dfb228b6299ef7207dadfc6dd27c7dd6d3891c71936d48e521ca8bc0c63b81e6fde98c8d0e35959dfab5b8022fb63bfa204ed6fe489c4051a3fcf939b792e92910486def1509802b1d119b635a5bda60a779675d6a39c028f9b8deaec89f74e193692d6af2ad4f5e315c06ffe6dff190d5931e0d9ce850d19f787c8e7db3ada713a67b7f1b734bbdf3df8b4649b4ea1137169b9d450a7af201d683574b620bfffd8ab899e41e1db0b116b8c5276d5c58488e307ae72296f0cd3d6397b64d1842dda0754a00e03ddd15bbfffad47b90dc8664ad2517c33d646e279dde42b74b162062221de66c14a98e19c155e56250147d34423a4b6ef6b3412fb28975431ce0526a5f7409343a9c76cabd74deb3f2a699779018f6783b63f2a01237c263164800037dfaedcb282c8c4934c624e2f0f97799374fad9173fcff436d47ceb9cfa3a5d81e01088365e02b1fd7c86c61e3837433784cd52d48f4d363f457de99a199b042a024ee0f6c3ddfb91709f9d342eb3bb0f3af01be12d1fb9c77e686a51480bbfdb4d512c1b3cc169f62f9619987871aac39d4c7c67a1af45748526b4ec0ff2543ccaffb4cc4e16c5d5c15483739edbd7fbb5c7bc8e7464a2ee649e0f91f6b88cf48041bf328344d5d52fc023ec29570c5e8b4a257d2da597de23b7c56986c52fac7800967462b3629f80c1402ca04f0f9426befd5d54dcedecc85b1d9b4682050bb82282bc73cc33dabc41235a8b2aa9468f098d5571706cbf5d715e4fbf55d5ba4a90c92f3ff5122fec27159f7350a21ccc151d8e0dc9dc00e9e0d1af77a769603533b3f74d97c546175b5c23de29c2bde7c8f530af4f05567592bee0f8e187a682f28a3c251b15c645c4400d571dd1d2e70c5c62e06aaf6a086e6d0dca69f83438b4942550e7ca587e4c0b8563949602d5c89c4c2782a1e4aa5c255c73a984b15f631bdb5565aca3cbda03b58cf6daf6b8e4fb170cffa46b63442ff57d07f2c600e66586bcfc8250335772c359ab65559847c2eb174980a73c0ed30170ed0c1a2225ba4c0e131606bfa99ed7521bffc87edb38efd1c8fd413ca359a8d2c29856cd086458d2142e6e76b9d01a00ae70f77087a74cc1e4e2e16ce909112dee5f210977aad09066932f606f4fb3eacd7f89793355297006f92ed2c92b6508d92924df5ad3ddd1710df285b365cb99def6279ec78baf649408d1782b06cbecebbe06569928a61b9d645fee6e588a934b9b78e92c910627f8d87166f8e36c608ce570771cf154f9525f1da2867117627a37256148af55419831b7a3160a70ec24680a49cb760ef0f8c7d5a9e5f89b8dd591d50e042dc438dedb4b376fc3fe181b0d7bd48ffefd8af7642e0c71353d9dc27331f949527d96319dd42aea563e6dd99d6c204ed2484eb7fed1d2146f2619aba3e029fd68a5e2f840fb846e0a5972c6df8436f23b19c4a15d6503b5f07d89f7ea8ba609b567a59d8d674ee52977b04a9d6c1d617f95751b4893a83cfe6b760e10da795682e9668749c09036f9bfadce9dcbdd85e6e6e88e8903c790e2186758dd74a9cb1653ad1e3fb05049c35af3b8a84a7f44ba34a563e65c6b9be4abe43d19023e4fbbce03ca36dd9806ce700a728691098841a63500284799444b4d75258b2b41ccb782eef3f5ef6f5564287862ff478638c5651fcf176b5b736125a378fc98b9295396f801458fde1ecbaac7f2db14fb3c8c98eb367a71b8106c5cf59e34f1ae4ed732a95cee65eb494c1f7e89e1a2727cde68229f1a00b904b519f4fffbdd29238b80886cb818a1be2faf268eda96f2df05fd4b71c0c16435848526031904308fb6a51d9a6b510565bc81466b8f9b844f487eee14325bc38c21c81513550fce7da2ccf04cceb721263bbe6687c5572fb4ee1494f03977def1d309499578a608d2951b8aebaaf3fceaf38d0f4a4772fbf440e6c46d9cbdbb4de37049f34a70e877d8ba72e0c7ac9e972d17c71cdc95f0f8861d06f325d4648699269d9393167554b3d23092ed8b1017318319654b6817a808e0e2ea9a65e1863d53cddf1b3fb7516d8b4d68e437595047fa8a8d5d9277ec0d58e1bac4173833171e613daa94b757500c50cc7359812cb7a4a4fcdabc18addfac8acb6b9373776fb0e21707bd7c4ca27ec12564999192c8a8ee1b8a8d03d1c405658557819a398c31d8d4fb610e1aac0829da7d9e9069c32ff05034ae3f42058bfb514f87b361b7c8c9dc4e2876a7b6d30e558711869bf0603304a2c6d4e6e965d3951c50c8d6389d3f97c8bcbbdd0807fbfd49997b0f97643ea09a7ecba7babc76ba8682e08257d9c16d30c2e5a2e9cb753a8ddf78ad0062998ae57e2b6cbeb76a2955c6044c5ca4d8c650e5fde0a3470674198b845d7383cd2c4b6dfc1c3f7f394951c33b1c8e250a0aeecb0a7e7ca43513b644a80737ef61ed93f347a1833b6a8142228dda3685e2a1d31c1464bd0a8a7f2cb2eb9395cddd3487b913e2d314863bef8a026e9cebe5f3c781247aada08e21437e55e9d545ca6bed6768c7763214de21a4a3c108809d6892a140a8968fc85fc350eef23f81aff98ea54e38b6bc9cd2a01877b9c26c9169fb2673d6befec1a273cfbf941aa614463219ce1dd9dba77e348d863f11d6495ccbb5c2ec6e16ff531ca4cfb8b0df81baa06eef5e28b6bc4ca5abd93c3fe64eabcaf937d2eeff0cd88677264747527fbda24abae4eb7663a3ba1b779692c627bcc097d97086e0709b79efcd27282795b7fe5635956a4224eb3c856837539b5cf9753ab0ae7ee1b102bdb4cb429b874c107d396a5aec43888df490b505c99076c9b188c5751d2c5977196f287ee79a2b30e79b611cbba016efa7e565ea3ecafc933b291fabade6f06157c8edc55687ba7f042621c11d82577a202c80cdf87476c1dcc6c63a743afc283d6621fe2e7781669c80b2325b11d196260c0f9540b46cba5c07c308bb4e073394f2cc11b891094b76511c58bc740eac802d192c5eb267e683931dffc94a98ec2313f6e53cfed9975b42671a8ad49622f738a6799a98efad1813dc06e85738bab472a86402e579b313fa9c5f0b58ef6253d5bf643c8b8a77e52e09045e9d6d050db6ea75516f72056622c3118929a3d25cab6ad58bb5c2acb08dabe37443c236f788c20073c34bf71c62e2174a6e3adcd963b1b4d03e1eb442d7ca8a7271bcb33a903aeeae0b8cf0fc61035997503ae794a49ce9544e26f763b56ee1a051e5e59e7559254b6cbe58cfc82dbfb7f72d5a5317325d5c0b63dedacfa0d04508c434ebe0278e911068965d3e6931f48a9a9fdf647bf633a05ccf71cc673fabc1e109e878ad11ca1f12146e6cbe9794320a1d00327f9d20339933ee55cc1618a2c5ca5ee6f2973cc04439cafa34d9e016043c7d29473b6aeda3731a11d63dd5d3f7e116d1fe06311c876d388fd3df205f106420f2dab65af501f5bda98d9c2a7dffb4d5e2da48ef5b621882d3a4919c34b6fdaf3540f838743b239fc4f91c5ec866ad66c18d43bea45ea26e70aed89bbe7f6ff39982e74c91da64870b23a3bbdbb33290151fe1e81f0174c50bf99a6724f223b4c7a76ddd75651f3f25121a87df6ead1a869908b4f6d6f44e4f8ec1468f987fba67b771344764be8dbcce6a0bfb2085cdbe02a2694e628bd3e174338127f7eccc20bbda9a3060a83a7560798f5850227162629650522fa11a6cb3da5f1399d3b49ab9925558e0450efacf315b1d86ecce1dc2ccb127c49fed96549c2a7c069a387ebc80ade66cfdd0f32379b6734a4bab94292cd4f8a9eb12075e632889c4ab2174c98cec028c384a076538ea8225a7d1729f9e00eb67ef5168d916a3635d6c3623ea9e58d6c95e42df9c583d719e68095d2c0a7e2885127461ce9de13159474134269e3b87aad78123d0c0f8693ef619fdd95897d88bbb419944e02b1c3ea3084e8674db40b80bcf7a095862918bb9c9fcad709023015482b943c6c84c96e7551a100981277963f38c5008c5120f1ae3ffb13ab4307044fd68d33902e8e87dee40ce4374647745b702acb86713527f2db1eb9f4a2860f37b4ffd211f19bdcc9b67c80bfe203a1ae184265092bddb5171b76585993257c9c316c86468069c3c2637054a6583484b3ab9c5b88c3832f975bc27d6ea77df2e9f643deb25d80d35555a8de6f2b42b3e8a4a91d99dabdfdd02663778851f7f8ad5e1629e9eb6981ff27568c9eddc6b5d99de92990f3e6a67df5d9f55b251c0452e3641651ac9c662c3339fd99e228e0f2e1ed1e1281b5cfed64a6753b93528c7720be229e3381e66913938004caf1ebb13b2559a32673d09add5955ce1f4417869074bd03f2c299423323e2441aaa3cb0e4126aa734d93f22da5335774b693c1dad3864477cd6d5243c4b62fc33ca3a6e8734dfb34f3e8201e63482bb8a2a4088f179b6bd2427409b797aa081b8da8b469f2d173bc81c3fb48b6ddc2f6e1ffb64e7a902f9ab4c6224854219791c4395d5863bafc5520adeb7247f903759a2934e0a46f77154ae903bea324c46c0adf097e71117d45f82d5866bea4d67ff6abe90d3e402a8d2d6716e12bba77f6862020a4c2ddddd530cbaaeac2e6235a1d0e3c9cf009324884c8c27995eb987561870a90fe26064df00f49c7fbc8d24f36da975761d4768f78926e4d88bf0f32c2992f0bcef4dff562829ec51251cca66a9561043aa8dea9314f8426ad3fc475d2e0f8dcda505014abab0fabaf8af7a7e0c9016c228e52e0d6866bccac72a086b8e3cbcdc94141f4f612054379793c9ac1fde157c28cba7a90c08b072c6189ac9d2a11a443d09adb6940e953192884c634ba688dc2adfec086844c9fd5126830a93e332af20443122cbc21a4369fb5746287fed5c9f607fae15a165b518f265a03a697277be525e1680e17fe79e5b8ec72ec0bf87f71bb70c8ca510445e0a972d4eaa763897b268f45bf31288a0176768d71f7bf8d250369645d65625c0bdbc04393caa5c2cf2f66ea56d9ec10fed65adb9f2bef9b1ac82fdc9aba3d3c1aa38c792867b6cee829ac805b7610b4e1bfdf83fd0d535059f008590ab85d8d14e81d9e31e85f56cefaaa2e576f5d1db41b4eae1406b255e9643d0333c88af80294bcd936b466028a8ca81dd12e9bf37fd1ef836a7fd351d20d15019f508b24eb8eb152c033937923c5ee74511a92e048c90a2b89de7fed1dd2da7cd6ba29bbd7be443256cdb064a18fc35c5f9b098a19ebe7cdf98c7ed1d19ad29b5e6c2c62cf0cbda181ea836a0dd171fd8419ca99f91fce9240f298a4f64f4787c1d05cc3d96063c6c8f2d6346e733e7e47fc9bb6f14d06a2e877950f95d87f67874c808600a27fcab34d6f69cc5c730831ad4589075dd82479823cb9b41dc364364a625349ba59d4ca6316b22f7657c2c99290b945378c40797d564b5e065aa65831c8d0be90390d969d95b7a0a834d5971443efb3c36a2072cfab6c987b8e5474697ba8660d679d9e61b31f26da5068239b28d258eab9e9ebe003c56c64a597135a438149172aab6a183793caf4f5a4f690050b3c92c3c66d1826fde1a9e896bc6ce7047097cc5f832beaba93df69b19759a34167a4cedd7fdfdcbdff329f7af70731d8e27693e27000943d8981f4b68e60ca1de2092356a99decadcfe7126a4c93e7a5a79ac85cb901fdc3b4c3e0db640c4146b4a70a5a73ba1f7458b1888f4478d215c8edb2f4e795ecf51d8d734aa0c4d265e568ca11669e3dbba3764b10661ebace4c569bd381232a7bcbc8f728caf243227e33ada209b10e29b620a1163bed67783bbcc9210f1580fcc65ab2a06afd5d2485eff935e45c59679b95d3c94a4ea0bc9e0985051ad2b320172dedd7094de8140586f7f48005e81c5abf28501ba72e427c2417a729c28e90c528eff82e4aac9903dfef05641681f1f984ead43661dab1ddf5c730c44dd8f4d8320229625c715c89e2299018f5ed8e82ce5f7c24e56ab1c964ddc873db58f359356c922cebfe059e77ecbe250cf49afc84d1716c9aa6ec4959a096bfd4d7364f18765d145f1c3b4b8682b612c15dbe708e86da96e7580764bc59c32fa01d65c2c368afa22093a697f731a1677ef2a1e5d4c7e02a3646ad237551764ca7f227ba1d8ab35f962bef8ab242a7adaa79ec633ddbabb1ee39848c6ccdd89c521e244010238ed229abbe2ca0fdef6bacbb46f3b30c62b376f934aa8a1811a90768055b847d6b8442ddba86a7a9a229ee80589b1ea02eb6384e6682b57948fb2f9a72145fde70fb47878c9fb08fe770d78fc96564e036449b00c21ed637a618337a12728a8fc5c1a272dc7fa4f8e7c6cfb242596e14a3e407d6ef85d69b528a79d18e7dedd8935eb966512f692acab63eaf6b7e24849c1fe49a96bf9bed74d96b668d3d70000258f62b93b6e96eb7c58c4febdc6e774a7b9b125ed50f75368b7003b8bbfc513939c0884b1c0a0bd67d225a6b7b3537d4829207f0ce197abe2aef6eb7fe771161887e46216ab64b5065669892645f0a63bc3240f3b2a046343e5270310ecb89a1ce9a2dbca7d4744d05c1d1099ed6391fb0e38710898e1fc14d00d1cff4de0122927b05c5db4ccff4e69ccc7731800b2fe60ea2ef5cca4e8de1615938b79ac10b5c8996e30e06a46e8f5d52852647cabce6195a37323c1abf81ddd0145fe51085b52ca8bf49e93be3886e2bdb8412bced396e779014cccd7fb6dcfd0df5a938b823cc020093dfdb7a5a351f2053c82beb6673c1a40962aef706c6a9c97fcd7fcb30d16d4ff5d0cd5b8c1cf6fc9b535dddf592001819e6044cfc039cf008392ee764a3b15476a25aafa6897719659a9bec6e32fb974c4018a91dfb9e2b95d58c3346aa96b61e3ec89e31e66b1cb8852c405aba7bc7ab583234f31777223089e3d85e4fe41ef58c5f4fb49a9ab09dfc5a00419448503d16991505bdee7ce03d79fd34f86233047469ebb70dcc7b1be76b55a9272adb0b639775db56cde1aed998cb510fd99e52df2c99c2a7c9253a2ea8661cdbe9101b25727cfe4bdafba045866a3cfa1106e7b3f1825ed0585702ba595c21184c9677467351f502de6fc1698b017d23d214ccda00cd12f043b97c71c65e41461c1627ace21d48e5a0e8162df1b89df0e470083aa1a3676f50f2af3c369502cd213731410707805bea0ca97afeb823cb0ec1a3bd1c2ce4b548aba404f328ef1623a29feb293824cb82838136fc29971b19afa64ab88f112af28b61af43408d87eafe799492d7bc9f31f6a64b31338247cee418c8bff57637183bf0266f0566893df4c523880dd03ebf0d219fe6fc6ab9f205012177859c4280625952be9e0185e62c8d805402e910f46ff91c62afdad850bd6a3c29680ab5f3a9a21a7a34e6e1ab4dd8933edd8e7d98c536a9ef72570cafb15a011cc548f639b8d565e9ee9e075500af448dc748ed72b6e12dd36d6bbdd68cd9589ac5df6f1a36f91d55f5b05dacec197b8be79ec84beb009257ca9d538ef4ef29e99056865ecb17290470a44d77ba1e207e661876eb0b9ebfc3ae75369f91a55c524d35a5cc2036713f88033d8011c61baf6b3e5f1abfc09c5f437ccfd10d02d91d2505332edd5edd4d6553978d9a1a54661f99eca0af701172b13984ec0d0e88923f4c984aaa9755782e1fc267fc21b3eba9b0834482b506462035beb73cd252f9c4953be82deac1060cec26d6e0e32185320b8ecfe1986321b7f6e6fb3f551d99db6586d2115e094026442ba1ee69847de233730a731f104c9e066280c1a0d3bbad46e0cffcfc156ea5ae3992cdbac61be0af9cbae154f50ffeed9c0e68b95aa761bfb1a697cbcdd8b0b3b86f26decda755076faad23ffbb1ff31fa6ddcaa9ca52059622089d31ac570d91001a0de836968c456a1efe7087cc85ce664c67b7ffd129a59057a1ce27f0caba910e4c1cea9426db866e05405b682f6c7bdce32edf65e0cff1d14af0f4cadaeec64998f98ae0a8afcc24c8edba85485053e9bd9cdd92d37bc2ffc9387757b6c3fc46851c8c1e9a48c7ddb9e709a679308b0d67706eea6a2f905ddd034419d6c0bf9f90e462a0742cf5f368baed4e2a737da2615827df2d51c655d6ffcfa3c36b9ccf3cefa318bec2d30055d7c9dee4afc8634ba28ce38588f182477c9e67f53af02ff99cc1e9e2a0eb7ef1cc13fb302be7aa86ee029a1b4b8e6dbf0824f8f4a5766c478a4386785dabd9dd16700585ae67f293992d5557001962ae20f7b93a318bfeb726ac80f84f90ab784552906d7da5d5f24261b7b14d1f2b85658b3b4e759d41b900616bdb0d466e43b7301e40303dcf33685433b288fc02e53443e1a9d846efdd9606a9a8fd199cc00a9d21b65c9c48d789595be35a5c933e2bd66ec4d00553855600cceab596a18dadfe2d28595dcd4f03f582cc37ad5700aab71537f3551750cef43808cd5a270d2fd7b32eccded71a86cd6ad5876ac8dd3f4a876bc8b2a5c07f359d8b8ab097beeebe36321dbbf0ba80255677e0115314581537e8b6aa7944d5594ffb94567e23891628cac251a4bf6eb1e85bc83d904693aba92753a92c6e6fe3d1d1709844cb8d842d51615c6d99c0d792d9a64c0b0460724db0163b199dbd59b595861286275a6c967e6118a5ca252ad88a10c92dae4d1db80b74dcdb633c1f8dc06b41acc77e5416aa483307d0ea004bd58e4172c4c7e25aa1f60adc4f6ac9acea8692331c67bf005d9d27ee3eae1c4f44852174e85f84b81c2051b6c2c7dca56c7ea0b3a6b521f610c663d363efc3657f7bf59e89725942c27a2dd56de1cd09cea9e9a8e6d5015a6c5a7342010d9a20bef94a6a18bef4ad4d6a1bc291470f4c999ed97d6d45f1cfb8cfd2d476a60503bb837c621683db3a05868808ed4637e055d3fccb9a8667a88ead0ee535379870dd812811136f619b93461f12c28dcb577bcfcffe0f24c7876668841edd40c91a9d98b9f19fe04c246 +MD = 7b87a9fb861a84bafcc146831ed9a54fe3512dad25668512b17339175b0c9523596209336b0ed0cde5648faf6c101043ba3a653bde0ab8a8c3959b33aa9f8624 + +Len = 55672 +Msg = 05b9f9936306166d89bfb097617128be79c69670b36416243e12627bc41ca6c5e5f98fc7e52ca5bca168dc99c8f76595475dcae905383ad4d16a22e3997afd6fdc386c6761a089502a017889a45f40d42015d91286be874e485666fd969d4584d1bcb7fb412b68310ad2aef05c6f6082eb37eb739fc0a2998c1e5652244d270dabcf990cec95eb682b23a4555af06ea7900b2795b60436bd840a1b69ac514a1154b73a21caa6b9fb733c824005a9114cf6d9b6ff3554e9c31762ddca94725898b3bcc1c243267bf5cc647139c564f27707e9c039827663b22f6dc3fe4578f6abb0285777bfdcd85b1de599c902e7b933aa826ccc07324d92b374f68c282bce50334123c9a69179374e05217724fb0d85c7eee23f2a524f6c8abf9efca452889124514e3f600d0590460d31cc9368967747734b1a559c10479e96e1d720b7cc766b9eff625518256fef45f34fb8f6fd10105acfe6efda392bd641eaa406204006f1715fb8ee7a81db30f48d88f96dea580beb952a60d271201a07dfebbd568f499c1196cb91fac0dcf16327ffbf940458206dc66e0f4d612f5232e935ad215f4755c8cb23a7628a7a1adbea3d7334f417382a893b6612b15f66082f083e48590905dc2646997889be94a2fdc97b15619d39680717cceb08b93fd2daefd89524969296d0becd0562af4500892b41fff4f30d70678da99e0e43c3d7116fe3ce68f6e63ef113add0c056163fb6ec2bba55209a8ad22266f46c07db61fd12c7bccf32e71cb0cba0a349b9efa6ab93a30d2b2ccafd706069b5ca0d70b6c55fec27ff517f7736700d44a5e2b97c91a810c21f20831368ce1ba9cf5b681f93debbd7a05b9599ab895e7c7dd95a0a8fb3da9fd803af12e3f4e49724fbade48c189a935b5910c8369ffa1379a4bc98ce3d686dffdd3543085b2d4971f5254dda94f224d852da4dff3949d1404dc56d76cd24f33bb7fdee008a5c855d4fbaa2a5da2c53be4eda702fdfb37e7bdc5fd3aeec75fb3598ef5bf209db149013532a1473aee6b555f878ee1aa0e1d15771109e21c34b9488f3d1076110beb349d72e50e6e2a567701caf637078c3ebc8e36d6ff477ad018ff19a6719654a6ef730f681bb2f5a79a62e5bb76ba3ec70369d3249edf7e624b6d1fc39b94082682745cacd7bfccb960016c51193892409aa86a75395acc1a4047b40a6ca0b2c4ae0fef25fadb3c16484bc359a6f93335e2b8814b673fe052a82d7add5d32d11bb2b43b55dd9bb048b3c09f27a8727e016c18ac0991056795d36ce8dee5c0ef9640ffc5df0887c5cb430e346d863aff4da7475f425f21ae7e62a46261bed16acec9411303f405e9187673477dc8c9138514d2ff882a3b4156c6628c2820fadf1fdc26a77738cc96aabe9e2ceb08937712453a114d7ab8acb98f05da74b493b913ca2f079b3f125b1c9bed69379e2076afa8fb3904c9006d312d2cc1d9f242855533b898028f9da2c88eff90e62206bea7c074eb30bdc8ef481145c6ea627dc02ea951ed2f92b50a49182328790cacab852c558c639168cf58dbcf7e087dac063a8b998b84f0fefe08b8268452e688b9d23d1bb1101c7679fdfd484bd6bc53a3f36aedd7a522e20aa1ff485916282186197315ddc897687ba1f63ea4b7971b35d3b7cd760290f49c8f5e270b354a1d8cc57ef286ff9ab540ef57213d3da659486602c6cb2fd3bd403b45311f32e4c33a50b1302117aef36620708e69cb52943824dc586b7f538272304505098150c91b65ba3d50c34c8957f002d4bf033462a19a94f0cb83a90acf08fe015ec33685ac5eda988a64ec1d92e86e92a157c43af131dd3e6fdf3cac932fa0b4835b0e8f69b6c2c0328f05f6a3541456b54b7a83c375057fcce496fe8b0f0d9d1bcb414ce007e352eda442cb05cdb48f7f50cfe384eebe6367364067033175398c9667548bccbcbf1036faf146df9fbb440a4cb0b2095857c336b17c983178086a4ee92cd96fcf634ec9c70fc2e46648b7da79a1c75f73eb658872b5a689969819475f3c657b9bedfdef1f8d169678d64f33df0d515b818cc28dfc98daa451472e2232199c7a92cda1f96cefce4077e28eb8c579dc8811ca6ec9c79c910c28b42d71fa3b0ae75470df7b47ae368cc3ebdadbf56dc55fa502cebe5c37763b9d6d7b9920171d4c51860b07385f0bc5ed40d81fc76fb85cabe476fe330fd6bd1fb1bd0a3c446013fa5bc91fa768aaa664bffaf6b3d60209a6eddbebd47c4f0b304f5667b7396fc8ef807e172d518f88ca87a7e363574ee1166d7219c9034ba06f84cc14196c88e58192be9022b046f77f5683882e69fb6d8b01ee0a894b59073e00a2a1eb6467f460e0ef1d3feb5d7d03ab0237ad74a429654994308dab03ca2c316e93a5a7797ffe19a400dd993f83e7d3a874390db58f4582f92e5eb8b843aa95846bc0ac39d2c9ab520d74106996ac8eeae0899bcc19ac6ca14664db031e49bb889cc4e925b743f49d759c07684fb22b4dfef7b53452fa55112b48a850b479f1ef994af4c9780da3daebcdd4b7f9a94746120bd0aab5cfeabd4f62a74d90cc072df39b4591af77279ed2821ed53ef24167dc4e748bdc8d8c2a255b3e465da039c83e6e622ac8210e5dcc412c5c8a1dc827b038174411b3b7dc4f9af3d755a72842dc1cb0d14c9bb69c3b93a39a559c4a0a30414f800ff30c48109a5e6d233141325f2ed831c737bede92e21b2b4bee3593cf0273bc21abd7f23ae1e49440ef12fb2a2d4ed8a295859974c4d99bb79419390ee43a54e14ed96f00fa1cd929312c11ef906b127925b95153b48548331e637e527ef9e6e96c5f23155b6da86697eb2af1e0d39bb578b89ab229a4dd48fdb2e84c3b38ee8484f792da7e5d8e6393de8ae3a71eb0e1ff11ea129c9ea753b275eb5e917dd85d192142e2eb72f7baa584d6374b831e793933a3e7a5f9530dcd2b1c0c1a4f30dda96ac7a11b3480d65d6c815f56c72105a7bc6cb3ae4b5cb1ae50eec74e139480a64275a7962896411bf400de414154f1db1ab9094deb10f9f675c822a5715fe0a036f168e4a5b47571c9f946a39846d843bcfd5aed7f3c4106085ca0a8cf0f6817b6af677f5277fdff4ccf0af62263236231ce2b056e2b218d8700c3d0a33f918d502425deb53d5504faf69da176365dc7179fec3e4e6a05dd80590eb5944cf77181e4167b2490e5335304914e1a3d01d2bcd730f08675887672c9d3aff8d40454ca53cbed46ff58faf37d684464e39a25b0287bb4acda03f8ecd7d558674142a79817b89d92f51adc4ac5a53d0cc691308ff83ef3281412d54d07662766312d0a89946f147f0e9547d771ba8078628173bacafd549e903f8c11dd18a55c103dce1d5e51ea819862de08062ac72e23d56fbf15292166ead48dd9dd6f4adf6aff92a1d9f378314f0dff8b076869949727950b6b551217809c7b136ccc9056adecd8d59be656148ef13caeda15f04248d2842e32138f370dd1b44d1fd30e6855800117188cfc91d4b716020295f3cd9570ada60dc6f13bcf2ec9e57af52d7afe43bbe4d469e43fbcba0c13257adc8d298c81f152e1f09c610e3c8ae2b5660504c269dd63ff9574a3949f5097372307518091aeb61705ef5fea7c9c0b96509d05668b5f2bd098e725b13058fc5d5fd2c9e76d1c8bc8999b086e1a973a0a75b97cba90f8a06f56fdbf9a7f8aa94ffb65ef4b74e96869342616e3971b12a43dd0d7293b18763e683eeddacd6442a18e372e073993b08b5e26f7f5628619d62189a15cca5cf1c045011cecba744cd470cd22b52b8a18a18004281e1d66b422b92a77afcf34c797660ad93ac7492c6b4bae59dfeb5ae53e324423c8183b661c7d59a6acca1e4c2653b2bf5f644165d887413fd1c974cad3fd6d778df382c425d69ddade3b9813ef867f1bc5220b8d9ebc3c415576762de549f69fca3fdb42c16d4d60beb420a36586e69b0670f6084042e60ab542cd72f4906609174d836691aa0ef4c894567f2acd8fa98de19f6a4fc3d4f88beee95e8479424fffad39b3f90548f3767c980ba1d2b0b3e5e466282fa78fa743bb6835175cf1d0edef5c9f7a0791d962dd63dd6d3f10668909f8c662768c736738b89b2fc41b385c846a9d87496032f8374868df5b152df1b2b5c97ab941f9810758f5203724f2e5fcf232c3133a8ca0fac4329acf4576ba9f3bb5fad846b60b77c7d7ab3e957cf4c97203902d974317c855cf01f417dd3dffd8f0455c1115712a93b72342e353137a686490d0ecf2b7008b92b77202ce16753c2cfccd27b45c903b282adc94f1cc6053fa27a5d217f933c4221db19cc5be9fd3a083a3f0ff28492c8f246430f58a4bb318c724bd2f68f29e01c74b5c50a0c01e1f7c7913725ea5f66092922dcac77d046511d624a5809d77962697b7fb679699de4994f5aa8a37175107bf11de1e84d6438a229f26dac4ff63ce3f46327d83d5816db01df4158d1db4f67353cbf9e397588292830fc1d9840f20aa6d724d083f9d6b33030b9b185820e1278a00e429c608adce86dcf07ba3dcc051b44770945686c4963b4d755975095a741b1967b7f0d86e1f012ac10bed712fddb13e62c8a8d20c622d365ed0e2f2b4c19d71ff2e964c360c8855ce0abf50b196caa3ae15b503952f5f52920f3061a29877a704ee24d8b82f930a720897f008258733acfbf9901146582ed974dbca8681302523872b0246e0a7a5478605c395f27d4b09fbe50be35f9e277f9243b1e2e45d78d58a275d74d83ca2d8f3976fed95f3762f8605db9dc3a7e8fef816ac4a6a661e9557984ec47ed8af80e1bb497188a031a83aea83a32aebcff216b31e1f5bd092ed8ffc5ab83cf217e9c0ffe4b432fa09ee8af19895fdf058e36ea78be46123523883d215c2ab1f787e21c3c6483d776b6ce6b99ed8a55c203d70627a4bf2e4e910e3a7e46631b74db884a5628ff09ed2cddeb0eb0dc965927abc827d98898bd4011ffc6b25796004135a135e0e04d6dc7be3662187c2c34c25b375ea5cad8e9f83a92dfe82ea90382912abfd34d2b5e4e19547b6e929fb99c8e5bb552ad77398131fdb3300fdde56645ecdd4b6f2c288a954e43f94875527ced3d142758fc17a29d4828d222b90eb5f9ef788e6dd73343db2ba003c438662b1fe4646bf4efea252679281591c5e637543c76e570b5e74093f37cd22e6f5c72cd588b67a8d919d0759a9a438189d6b4ffdac198a04cad4b64afbeafafa39e179fa273639d410e6c32b265a21c8e44f3a2d13fef2427eb2af6664ee26f5b93e23cc902a6faaf30c005ca737b8a5b99bde42ada3225cb0aa6f22014b3951fa39d4dd5227ae8abe79694e9ab15f3783eda6dec78a8cac2738700e5f76a4977360e79cfba258fbe9bb48a17f5ba7e6e9912e61f039a3c938d95c7bee24eb5ecb4ff69beb2f0166fb4e38d5c39b053c4142df7cc6250a2c6bf98f0b2baa8fe058636c5aaf223a6479aeb45c15f409b0216f247fa7d1225e3735722ca68c04f4b127b349c610666cdb6945c4d50b27eb1062a7fb13c28ed73109b060dd4dece45c1985e9ae9e17f896ea67709f24e23584e9d46f987d921fefe2c4483e64aa37bfb53ecaf71fb18032be841fb2e5cb37f551345db466fea0aa4d28334874bf775297686e0e29d5ac456235f2ded2355ae8354245e61306f216c556b299d2bf2bcb1c7d337220f6d53551f7ca715ec326e40278a8bc065d9cabd7ca5691130bbd7fd0f7cbb1a99783892a43e6f8fff7146f4561f684c554f8eff10d9fccca37b4e73152874b283a3fc737a4d8f44a43cbf07a78c00eb4afaf39bdaaeebb5cc59aa7da3806bd31418266268520f1b23b85fe2e37958868a0183f79fcd3db3f27e71827f2ca76395fc3ec638f5f5fbc30fb1ebd28d7a065e8dc67c2adefab05e112eea72d3304b4e7acc07b0dd4bcecd693a8b3b716d510ec6439242882a93593b661c441d0f7487b7598d99b3197b89ed842ae7cd3951e2d382a2ae73d6442924a382bdb44bc588de6cbfba1e65ea3fc416319f48e7ec22dd0b12374806aa16f36c83a53dec2598158e07ddc7390337157806298a7d0c150b674ca5afc0af6ad14a87c363fb7e018446ccc8559caeb80933134d3c069804861db6c04f0e3a6be5c4f6e0cb7fb709551c77447197d30cc8cebfd50687783775b5ba4fd1f73463586239c42080b8f9ad986e19c3305a7979d171878f0a94f601b7bf1cdc84839851acb63708076919b7431a0ff2712b4845c4932d8096d48952ac2ded19bb1053f92bd6012b1ab2b098a4e3eea7622ec153308c8d803420378f1c6b8b30a6c3db776601e933c47b087b44327d890a4c2bcc9dc47038eb604ae18de3bec84d847af4e5a0b9c50aac6786a96d8541716bd0d791a39d4fc37c086f89fc4d89b63c76983119378cf62d16e15dfece769f74f69d9691de6ec45cba62971e021debd1188ad1d62c2d8fe65db5e84b20d19d50e64533f6f93df7e8a7e140b1a329f42da8f34d3d5f53ddbf832ad0be43fa72e5e8f8f13ab763630919150a1df958d7366efa2eb89aa4e9a1d2679fbdfe98261d43de56c5e08910a556257fcbcc4f9ed6b1c8fbaea3c8ba729095dcb21b53c2df411eecff3c5607a5a73a2721e4b951f4bb843c874368581c06db100460d54c1228e13b5192734ff2547c8988083cf678d2577aaa422ccc857c62c21b96c3cfa0414eca21ac87f072a5122d69028097493f693b8168bb1d9739517a5f85c85070d48e21d8503bf30fe2259b2a982e3b514ae10a737dbe533887d1c138f48ad96a29c8c8df47375fb052dc5c3593eeeb773ae86ce848dc7752ac0a1d0eacb171768725489c59223c3d3e60f7f0ba67aea359a5eb4892be90ccf123194976e6217c38cd27794da5939deed8f4c5d7428cbded410efc230ba68e9e453a5118d1f06482e7f0dded676bbaaa6ddc1bb0268dae3fe35d6ac36cc280fb970a8e5a19e616ae9b2830ff11cc7bba4735590fbcba5c97b461fb3a89ea8a5042106906660b7b031359d94c4abec8658d8ae9baac1ab03ddca1174f092994e46dd448e2626879cb740a429cbb4a89f5686032799db5927882a627cc9584860041df94b8b304f94ce9c4d2b70b77a6b0ff419c163894eb91cef69177d40548ece6b8b64e01e7e4d0970ef164e34e08df7bb48f5724bea1d0e91bbf186fb3c2f083e7146cf51a209da970076debd595c903427306093b9e7dfb9d17790d96dd5440f518dc36a497fb45727c98ca1636b8c071b0e99114c8e02b02036157b77f5f466929656d8d2f34949db9ae2919d4f2d9ccaec962500941a2d4ea97f41d915abdcbaece42ded28fbd782476afe455c077d8d66d24f748e7889a34e48dd0fc8dcda411e05c9e6753e88c26ba0581a36ac21f8e9f80126d1b04dd4810cad9a6409c7ab96364d5d6c93f5f2840d2f8a438e1283f251da85f253e2490e3523f79bb55d80e1f018b0739e77b90d1bf4f4272fd7b52c8a5c1084d5ff77325ce0a5c451e4378dbdcc9e1ea0b68c7357490635f3da12d50bd654fdb8fde599de54336281f455f619d964e26d1ac363498c3f148ca213a850f9d1c16f562aa1440f1f1aa82652b77ebfb363361d14496d3eed375cb83e02f43705747ba0acf52871c74146c2c44e66eff7f5ae45f5822cf1bf12e6950861501e7e9b6055f2e1f61cca7ae07201375cfaa12e382dcdca1315133bbcc0f9600f009b8abffe83043760a72bf7bcbfeeeb604d71662d237dca49981631b4877b8b8dead6ed02d3d856fddbd91f0b56e17ca16b63badc8d198cefac3707f839105026eb0469fb6beaef44e706a8d64ccbab4e798998a4712a0577ce1281f494caf76c2aa7d940c1986ac6473937a627e9d1c7f637922d662bbe827c3d42421107dbbe18159d9b6b8d54027ae54e037ee89a8e701239dfd29b0290452bbb59445387ad31f23933c0163579f0af4e7698245032658df2244cf48c11a7427fb2953a85aa16a22ed275ef89ad56dbdb682a49bd34452f5d934bc4b5971125e1d68a29504524ca00dfd365bb1d0c1f5760abb51c14ad6aceb545881981215a944d99ac71feeace31b49f1554398ece54e872f30743fcb4e802c0cb1270463509805a405547e71344090f6aef836d8d567836700952b1b21bf453ea5ad4fe69b407326194b0885dba35caf2e7ab16b0ce885cd89cb17ad6ed1265823d3fc84d265ab8ac9ab97cf206e34839c6e118fd4fa16c892bf0a697cde57c0f44112273c2e3636de1c30374bc6a1dac27f5f2b73c5bdc0e5180c37950d61e0e09e99b622c49b942048dda5a3d52a1d6653a2263270021d487f25ffff86cb1eae929a19cc4e620a56d4a50171c357b25192e26a59246d48849c5ea903721de428c71b3882f514024a6b9133fdb8b0024be527de300887a76116be1de9f9e09914e227fb8ce138e3c2b3a7248fdbbe751cf47a6aff45d7a3a6964d44f9429ba43b8ec34a313956158754f1ba6f5408748b66e2f60d02e5a51dc314047b76d66f6571f90dbb26f60061f777dee54c166561e3686aa3683a138c461a46b6bc1a615933d02c70cfa10c1744407938eb71b1661513ae099f5d56bcc668f3f33dede2e17d518f995ddea173e25471b158a0c162a1ebab87ced6d775ec04f17a20da5ac3f7821e7df736273b7abbb098bc2bfc1d32f847651d2efd7e60f82a938e6631c8486dc266c6300638b37d1c353e9bc95e6e436beab5ec2fa1c94c8486af1bd0b8181a619af154a63236a39fcf077792effdd3005fbe98d7a4cf06e99aaa809d5b118fe462a12a6ff1aa3520af3e47be9688b0ec0c5fbb5c501b304018a81d0179d9d63406fe3bca3cb839861e0c94b51cb7e31939c1dc266d55d17148d07b65d918f737ce2f0e1ddc08b9bb6299e4de4931736d2e0c839dc325f263724b212f4477f8d7025d2bd19a41bca6c30cc2a3e49f68d23267382919319a00de4097c9829de3fbe9af1b4f3c0b4b2f8b8db36bb7a8cb2f8ffa84323924d12fd4d866995b34bf8bcc4e65fe8a106d3e0046419f88f5a36b8beeee20e9a49fd89b3b150997e1956ef36191454ef52abb6c5cf3a5202df8706f6bff5bf2590de37c902c7ffd4e6c8ea611288e4e658a8e15fa51e647f9d22583983d4b1ced2239bfff346556234cd22d86b140530696a04446e4cac4013a720e9e32582e05e7c0acb2b4226a073e22cfe7b4c2258055d7406833ba61ec373f5aa566ebf24c62618ace341e01a34866d65cb97e8c7cd01c5389c71ce463d274add4606a2e679d05a37e3cc1e39f7586880f49db50a20d58c3d12659160d12fa5053a83fab01a0923de85573d7a2ca6b2e25eb4138991671d967dadabf93ffb78b4bc6d031c071f2a134069ca75451fb0fc928180e0af351dd746b06a79ca194a5e44287884c1a0b178bd8a4195f111f752187c9989caade171f5f4495d10179e845a5cb774ea3c7e61552f3f66812c0a65590ba9ff84502ce9140fe53d9264f9a977703c76e120c58f9fcf1051a5dc4eb8ecb54eac5cba34cf1959ba75e18fc04013e99405371c4b3605e07101af9158cf4c1ff43ac45abd768e7835a05e06a6eac84f4aaa6c7d64071019bdd13ee99d1aef9247055ba01b81ebd1d3478857f1fbfd07ccd0e1d2a47556c1736ab453a02e5fb293a67328d373a9fd3fc5f0f256163ab9971347aa8103327e1e18a05de66c05078698bb6379be5150c7c6187437ac09cb35dbfe638e234bb63a659366f46687f77c5684ce72e46a8317a27f4c1b3fd2b325a586ac20780af034fc0e0d4ea04109015a7ff853686dfa8bf595e865443e07e30a7 +MD = afbe632820e278b633260ee86ea0c2a88735afece12932ef44d5e762168bc28530a88bf49bd80ba36ceabafbeba7fea0ba783398109b10bf1373a3316e72ad68 + +Len = 56464 +Msg = 7a57070de9006a0eaba8e38cb24c0d088e08261a86dac157e8a9ba779d866fb800312d7df1dfe93b243a3195bfaa62c625d31a400c5ff092d6fd638f1ea911ad912f2aabffea2377b1d2af4efeb6eb2519c5d8482d530f41acdab0fbe43f9c27d357e4df3caa8189fa7745ff95f811ed13e6497a1040852a1149890216d078ee6eb34461cfa6693ba631dbefacf83ce5ba3f531ddeadba16ae50d6eedce20cca0b4b3278e16644535e0859676c3fd5d6b7d7df7bbe2316cc2bfa7f055fffc2835225976d9a737b9ac905a7affc544288b1b7d6dad92901162f4c6d90c7ae01e0ea4b5988215474d8902fad0f85bfedc351e51e835747e3ba625086d63c7832aa7cc562119f9199d55a8f54cf2f093c4f3f6ba1be5f0524816d0db321e5e3bba9af9998503bb35158d02b823621b999f3225145d219ec2c33f88bddb7ea7905a52cd1e58d1e41032b9a0d208d84576b78a29df409ae836398aad3eae174c278669a75300f6fc319145f3d171c7f6b1aa7685995a9465232772cecc4e7ab457cb3a28b611f57c2fadcc7c14d2b3b7e0e461c8c10fb08e2ff9a25de5111b68a7a56ec1d5f05fec50e4b7ca3ac02e017ae1d663f4d471dba33c73eb27ba7bd19d8151f3214098b54bd2823eb1be995bf64f6ec7933d5ad6337c71f6f28f0ea7b00b9e3d3677327f76f3d679f812782fd98975942acecdf6372626f1d42356337580ae207408af9378c50edc9c805d059b0c953a2a0d5db444b5fd7c5b0be50d54acfc1d687972a9b7c2a6070d7cba75b155482a2f5d9ca8d2c88fe6d5ad3dadd3dd22b4824e2e1aca793669d96c12e8c2f009049943ed4c77ca38d2028bc29d899d9c66600b347f07652a757ed2e8e73669522a0654c2079a2792be302c0644ec5ad3a37015284f14f31cda6c45cee9923dae3ad504dd72b08d281c0d029b3c52b1630c31006bf379bf67d9203917784cc98787a3e872066157636be7a3d3fc732db501316192048c36a6124921651becb978c0f154324b0312cf3e5e84530db42c6412ef9d1d0ae2d5521635933a3cf869fc572bfc90a94c4bd603e0388ae8ac39dac1ca377f7f1437f6558412f953d6778cbad2261fb9736f224d0b150e05a1d2938e6fa52bc976cafd40930545192d4e947c828531f43f091e8a4dbe3eed5b9328e93e8ac482a0faf16800fe8fc5537bce1c9b8e69d1f586253c06a8a0183fd80552b54cbc3329645d4c5c734c10ff7b740bab9649eb3d72f0e2e448d41eb52da36b725f85435683ab6de3e80c6477ca30da215134988d6bec0f65334d5952109d93e457b23bded5563d55e1433852e47ef8ab33cc725bbd8121e7dc7e509d0d6e5c89b9c59518d6084b20e373152756d8f797b263f12ef45acb0ac8d9bd0c906035e0fa31e7ab021c07b3532e834b9db9477551bdad8dbcd35b3c7cf1d717264da0689d799bebe62c03abd4d7fb5625aa78d2961c0fee6385630b6d5937435b713caf182f3a81fe92bf68dd01e5dd8b270c1df41180c774db62e61e7266279c655b22fea53bd3b7eaab88d03efb383ab961d5f030a8bf8d5feb5b04dfdc1a55a49c52c57e2877bebe587a52e173fcc0dc2a991efc002d099d5ce8b4e421c233b960bce13c88d45f7836bbd98c189199f9b6c5e4d5ff9675ee47fda341af85a31e58cfe652c5702692d6cbd8a131ad32aca6eac6412f825efd2d28545afdfb204de51a594366e1b0a8a938d4c35796376f6b7657dff88721348cf74ca2958937b2861a9e91059f6a243e71626502e2f4bc8506fe04e30b691ee7d8f0ab0ec65606cc4f4acdfa0fdf9ff703e608cc2a171e840b4d5287959326be4bf4f6a21907951836c25cecc97d66737ee4110bc20affd8f1aa4b5eac3be680ceadf82827c8f80a5fb9b02642b0222430f1205a413cfaf458b941c0b5cfd8cfef9031e949269a0328858a6f02346d99d871c9203e497a86beeee86648db680c1d50367e138d15a33faa2e0f8e668344b40a4e05ffad08d092afb1a7ebcb3eb5d642784f0d78d56af3bc2d805dc30da5720f51743bd420925290001e053ba76db90b79d49d8663bae3200b89e6d6874c811565e3495b4c2c9d2486212b894c94240fadc75a124b238c7a3a54c01d6a9a7fa0eddbceaef60fc0d1a669d55098b9a5c3967fb9c8f6256e2f5c996004422fbc266bd6224bc8cc7c2bd340890e064ebcbbc6663306ef40f6b3c4c04d27887cc53a626aeabe1ee30d97af6dbd3e3fe3e77cb0236c48b0f6c4ac1561edf3a7f2394163f29e8262d423b99d19f85d8fe9a47ae62fac2ac5c7368cc0d6d9054b2076dfd315a4155f102ce62efdb0d880f0823acb03a919a822eaba49c784b8cc980c6a523ca1f34e47a7b1c7817d5bbd78ff30f117b991d2aa5fc9329c779ac6c9687543effeb8dacb12b1194db4438fe379f1daf4742fcfcdf44dfdde3837a42529953aa830b26f1afc48769b0c2c92d08101fb225f4019fe469d1df53cfbff4bbe2ea8edee9c75c7d2fc7221db7340c0b2c5c429e17f2bcbc55b1589fc74229d94b601296eb3a94225519e5ab8b424247dc1e85391398fa70eec76f50d2cd8ab5bcff60357b4642a61dc4dae0a7bb78c409aba67e50bb02061e5a4ded5726bf561e0d9d4300b20e126e122b477167558b994dcbf537237b89cbb419fec0166fc557d3f446e2479f6d3249fd65520e82a376491d272e970efedf1bfc0c7465420851998bc888cd9ebf50b27bc4b377a61486eac39b9ee1636f41d81e9edbdbe229f2a78a505c0cb210b095caebfa6b6ae7b377e5d9f0c721e3d933a63c5d40f42f24441a67c5cb84693a3a156291b27623e337ad6a8a12f1638f73bc6e625b2323ceb963932bd4bcd1d6e882b2de1471d0007341d5d68a7af64be28abd52f5140cd84f8c5ff6ed01516ce939624b5903f7f174c9a23af665a4f5c635b095d672f2294bbd508fdffbf0e48363fa3e48d59f9e7f6e5a201f59757568e8d093c6e3deabf820f05c7153b626ff280221aa8fd0efdf5784efceff72b310c9a3b58d0fd6459ddac6c66db1ab1aa5af035b47d992ccdaaea80fc9ffa2980600b361f2a0e5df81165a3699bcd8a9bc218554e759ee1dba984ee8d8000e0a91b68800bf3b1062edfa3512bf1d44b98ea50e7452baebcac53fffe2c5aabcf2fa13a8fbba8a61b429aedec3a57cf733616428234fa292bb44cb426557a6b6398a3e9db8ac35dfbe7d5bddb2147ffa007e865ac9a8baead97e64a0d9559c04c58660efa15ce492683129bb46d3d154062d322cce23a9fb0abd30a0a68833ac8039a0241d943e839b8c3fffe6ac180d2fb590279a8917cd37475aca34b814b851ea27c6931aebb93dd7c631fc65fd2e6260c9d295a1ae69496608a6ebace72f1fe01c5d6db7943c375be5daefc727be877405b6283513d6265f63bd342e531ad464a86f1233e115725dc581279a3fc5853a6b59b90bf11cb87d92967504008057bef386ea56794bd5288dae0ca6ec4c46fa2445b2edee44e507bdb917f79769903624295de805e6470366e906b2d759b1fc570279a1b25497440eaf83cfc0de671464e1d3b02cefb23578bb7d88a7f7ae872d1678efe657b57dabff205422e5c49fda34b477976dfd07eaabd9ee052b25e4ce0b15a1325227fbbc31554e66898f20afac6805ed6810c1e54282ad99fffe5c6169ba7d3d4fd5036ace8c8433cfb0df0ad15722d7e9d3ab9006e08d0a7a21350fb6ce4db055a7e0dc5d2cbf32c10f24142aea96fdf62e0c14815b5501a477b7ff7cb9d7326d85d83c669dc70b669537f43f8728069a092e983b5ccf2586e62c5a42e2e46c9e5735af71466465c6285fd39898a29bda4c5745bb49c11f2757da4791b33b06f0053d5f07915ee8eab1e6d9be83ca63c0dfd043898cf49690b30aeff093a6a76b773974afe57c3dd919122d38b2690753aae1b92d8b3033c7e00579e7eaebf718957016f2aa870c9b462cf88e8b462e9b95d1cf2fb03c9ed6c8100efe21d3a0fe482c6b574948fc39227b6149782b81a189eaaf1862e27ec45176d6be9e26472576b39e662884b6ba944991f0dfdea76c6c727e7008e87b9a657df8aecaac9796084fd5a7b006e22683dcb00b2a28490428b267bd0c173e5feb6f9d570d2c3558e74538a349952786d97ee522c0d10f72a3f29089d5376f1bcb92ec3fd070cc73f9e0f1e15cf82de17d7458be09a1a0bdc77a215bcb10b6d7ed2f0ef0793e02f0286725e94ff89d3f570932666d60a5ed7a9143bc5669b99a398d2af2725f7fd65b21ff448c5d1fa84f849ba354d5c50ba6801d33de0c236c97f669cb219bec2d7a57a47979ef5a254d2cbafc26c9a91e3290d948cbbf9a55efb0f305f0b9f1fe6c523f108075f7bd394bb8f94b04f92e06069c83854bc65e2904ef27468335501b57f69208b99d79fb27bc222c4e5c440a2d916d7478518e2d3a85ba8abf612b6eb1f1867881f55f7b08ef002f6f7a66264cdd8d010de0eee39adf4526361c974da659743a96a77aa238791abd2efc9f42aaab6b92d41e84336c225081b00f9da08056e4b5c05acf56fe81f83f548af4469021909193b05a06f7796403f5e2444f850f5f51c6b66880a12f231ba9cb6f1a4667836413417842840a0814cc3c9543fead6c7672654c096aac22bbf56817a614a6cc751c77e4d15bfdc41cfec596623257948c8a0c83d7a1207d850008f4d34206f42a76faa899c47b2083542651956b365efbd75616d48eb3bde392540f8717ae82ede873cc8407aca5b19307cec5ef72522c21e80ce6788b693c72f46fabdcc7fe253b8a56796bb7da0f860f14d80832f885306d6df7a9d309f7698f1c28da78f13937e6505f39c44703f4e72bb8fb9ed96fcb8b41ee67b1267e3fcd1fe456eae293a430c120bafd75f6a4371b4b13e07c53bcea91b3fb4d4738bc587fc99b44599a4a0fb2a33388eb515fa6ec7b971d6997c933642eadd0f48da7d544bef0afdeb6f12c2ad0ef8d317aeddca72ece8029a5bb0ec347c462b5e5caef77aa9c53fa4f602e318f3535d0db1682544e012e43e35922b5e68a2a13a8eb4c1f77e85734cd60becfc84ca74fdaa240f9c279523fbb6d1842f34551953ed394440c1ce41599b9840d637d0c36e158bda0727b12a694bd9772563efec4104a70ee51802124193327f248108c0e5701a250465296ffd513484ef7bd5a26841888262e5b37e9b6955087604d4e5ea4659612264507d2e835d3ddbe098d45030483f38bf74decd8a9a6d3917b7bae2f4c42edfa9b8da834ebdf28946cbea9f6d7095e509a8cb6e835d2dec4e43a87627e4de9aa9d4f0721ff14355f2c16d8c359c46e658d1cce4c027bb0e2ceb46fa4c2600e1e93767a17371c0e0992bc5cd452592bb21824bc6ed84a52d18211f05ee223653fc529867e5d9cbb78e6d8bd8f8a739d2082cc09b57fe7cb7b487892f6a43df5f37a91b5be373f42967094815ec9b8cd95153e3c88bef923c66711dcd5d157c623fbd68e3f8eaaad49771632a8d6d0c2fa179fdd515e28629c290556633118e1b8911f996a2988047b458657d47a648438d11a7477281e91e4d47c88088b294d9882945fa5d27f4d13200d794c7d1c1c358bd48a62e180b886b19dfb2da83112ad165f67594f3792f951d31f77a79f91db8df8a67954f9dd690891363851d939dd97a539ef695ada1520ffd1bdbf96eb111eac5126482f0a772180c1934cc9c9124b915ecde88d2e4fd4b918868fa833be871812d184ca4697439125a461a8ca337c485d5d947a958fb72b7a3add7e70cc116671e0d1739ab1b8ece9d55a1f452870f5be0635c917bd0f7a814172bfaa2201bbf6bcf7d20caec6ba958dfed540d96fbe0a2f9222bcc125d1b5041614e9a8a2422acdbe8ea774b623b2331473c62ec3cbc842742b8d8341569de9902536463b20947bee4f70ecd04ec73165a0dc0fb34580a6a38f91ebab31c159aa9998e41380bd2f4ebf71fe5b645ceeb9058c648654bbc3e7f4d0e2aa8ba9bd2a19186a73882b4fa784b193a18cf9d2d749dd15851fff010803534e878cde7bd94cbdc0a3606845c1463891e8ef27458915d80af8cfd7c8cd6321198b5be7fd7fdb8fcfeb31fc7764ae0fe279b46daf9511832b278bc880ffbc4229fb214ca9e46d967d93236d4f58633d6c9c045478c4e4e861597c5c9166b8bf68220596e9cfabdbb3e25d4533640eca1998076308de370f92d7ca1a63cafd9fbc47304c240a3c655a21080b8d5257bfcfb7e422c8abb1fea7ea9c8a5ef333ea0fb1c9f6c15bca3c58994b48c4e8e523783fc4191ef3fbbf89d81a35eba903a948a9f91c2a8bfa69978f4f8340ef61fefb79ced1737dbc5a1ee96ea270b315e34f77e847c66276f3fd4e3b44692e725840ad2bd130129dd55067bd5957da10a00c63bdfefda7e6e2741d3814a76fc13a2f2302a1bb7a463a069832e306e69ce867b5a1ca3724f13fe3436e796278f6abb0227cca7e7d5e9128c6f2c7e79f62c448b4bb32dc9f4011310904fd0212b8b4abf3c1d3dfe28ee09d37288d60cc0a3b97a934be54e17b6048b72328ef05af5c08dff84448737d314f33fabedb373c563cdc33f608b249340f95f281911984abaf2c4aa620f6d38b250490e1bfa69f1c1f95e1635ed952966eea9a905116dfa98822de7fcf343af707f1137e74e2db95281c658cbf203f8d4d0042dd95c3675f7c0bdd5abdf5587bdd41ab1e62b399c940b8e8f9944db822941d13f1c6e9c5d4712d6ebc5201d5228f3d7f48f1e081c14db392334329645c2b8a35534d50a11050d2ba2ff61f5af1062db88489333a8438538ac1367cec43fb8fcf8b90c0a11c0240e83a11198ff228597d5a92726d1aeae1f92bd30ef7dfea730922f90170ff6ebf21660bb51b2cde08f7537466c18c4aa406fa84a62e39e1800c9fefdab4c17b998d394cbca7a711834ef697d7dfe13fe6dab5b00e3958c9fc008ad915166b1314533d3cf5da6ca713a9cb638d6e21b3ed9ce4be0cbf4488300d6c21783d041d7a9cfa432a5d828afe305b414f17548d03751018696806086459cb2eccd29480118ff7ca21d7f1a08c0d2d97e68283b56e8dc025ecdea52fe00f3268d87c24262255bc37a3f1c2d30765cace1b56b612760b7c4d5fc629e7eb55263766e4baf6f415d1f47853fc09b563b84fb43bf38e6518ccf888cb9b17ce5331033cb161d8d1f8bf6768a4a72ce02c818179db441081db398e319302a7d233da34238c1eb4ff260dfa3b8ccc23ceebaccb34dbb081147d4a7720c6667e3c1aa932e31dfb72c7c64314b8b571d6c7c6c297abe63fc76425881c1e0dcf8657322766440bfffb7100e91ca9c4a12d15e54a4ca7a2facbbafc79e3f21046a66aa3db360eff323545fe887cd4646110ff71cc51f0b7e8755d2aa7356676d2c6bc954e0b08a09d098be5a79b013bbb67cc92d1104ece12ae97d69a7b40e77cce962f064efc97475f8ae0cfe1faf1b61ac56fe0f0898f7e5cae28d81b490d4ba740998d65b08b39208b1487b6862f5a113231815968a13668eb49eb7f498d473702fc6bbaec257932d6ac57826c9db0355bff3cb3b5ad42bb96615b0d08127867248026b37a0d117fb3cec7ad75e2bf6c87029a67365aa83cf797ae2f4d42e720ed4c48ba21ea08ee6aa3609f69a6909fff6222dbb45172d255146e4ce1c59b48a7895936a86467664252a9c1109329b70c465d78f639a867fa0022cb8d449cc8985edf8fd82435d184032b79314f949af4d6d1a6c6bb50e22c8253161767f38908f4642c79d27a1679e06c309682d932ff3c08ceea7f742a34c2889447d5a77241726f7753163f1d660ef64f05d5fe65779d8a562b2c1b295ae949ade737c06a8a0189d72d968bce96b8513c47ef0d1da224dda8516a4ec6e51f1fc9bd34475b2ac938b4d0fd661150040361247a0d41caf68b2a24e314e91f8b90509375432c6af1077705f1d8cedb1a9625631b07b9353e1c466c3c757a4e5626aa2fa1bcc592a27b86921aeaed802392efce7c026d2b221663f0207962bba769405961ba0eea031e4a3f22a35687477d292b450645f6ca03e879352987aea7e078db5d46efb93d772bd6ae0cf138ade13a431e1c29dd5f6a3fcf238cd26e7e13bb7c3c675049770e921d692ba7da7e458adead4a012709d4cfba93aa2b45538a7203a72619e0da6ce5def80a5eb7e13281c49d9ab51defc800022d8c7b794ece0339458932c78e188ddf06b1ff15ff2f87bc94142d073ace3a6e9839a8539966d8e6bf9b8346ba9af3e93926733d00c4048f3abf512d116ee5c77db99c1b59da57d2bc61f4a4867b7ec33973a0770b79600539a30ad69d3169d583153d19b9b3eac4e5e56e2b1b429537afa0700b48d703e636c83e4b069e2f6053547595df78f885e22ed721a177a20b43b3ca40e06555fadc37d6d5733e9d30947e2bd6f3b1e9de5a4419cf3fa30c089cb6955ffbabbf09d0f7bbba0c971c0cef9c47251ee62494f5301a7d1e4d3bf663b0bbb0c032a7dabd10d342fb3315be0cb5b0ca87a013725cf9c47366fd979d3faa237b58817636498b08b7659aee0c92d1500d58661d3f37a7fdf83e3b88c4d9abb508eb2195e51c6f415f755211bf2af80e35b6c1aac22d43af55ce907635d8bb599ea0986aafdfc4668450e5e49f7b33d28ccb3822c4e7d3c1d33f83c9b6e5e2f7879f705f5c3a925e6c21dbd1732e898458bf53ee0d0d621bb8b99de910a82977091130dbb3d4e2135f0eba3e05ea030de2ba9a746546f5a54c63643e0bc897c16d1e61467d56bb6ca73f0c951b58a85372e3961d943a9647d96662316eee35befbed8a07826726518bdd583d7e1f803f5062ce5161924ce9a5ea1f2803c10a54faa733888ab02aaa5210279ef6e893b9c360ca7996f62073f916228c90ea1e6cb473e5305dd9cf5f45ff00204a5beaaa140513fbf90d18cd1d12f3c6de1079ef6f7a2667c2891d59acd36b2b441f8cf88c78304153803fdf59071a3cb5dc24c374e3819583681d7ecfb3f027aadd818d71e2a9b16bf69a92f51d1f58dcf626d20bd77b22661fd6b7f5c8187c453cd24f0b6a07b50b1833cc387b8b811d0587027b7e9e77345650ed673a6a92dde58628a439d1b4f98e11766c4ae61e3eb14f3d0eff71fab4b494066e306fd23a7fa5ff82768f16feff3c79d7b1b69908a4876a0a837c14b0e2a9ec50d2ada223b338bbee4aca42e214bdbbc1d9855943833771b831482dee8897855549ae6b6129454630dd08a26d749b2674e9dac6b7f9653a60325cae384d67bbc7bdfa96bd88d7879056d49d67c7dea1370a3e482bac1bac4aad40fd54d92074ec551789fc79f36656ddb39b97b78f1351643847694460b1bdcb7d840ad5ca9a0e3a8faee9a3a3cbc99c2f04c6eab4660b1e502b376a3d3003b49aaa24e96e147394ea6c4bafee9e32b8cf41bc085881ad610e5c5ec6b812628f1fd668bc13ca638aae2ae944ddc7d95c1bb841ba804c7f54fb43a6ffdc3d23849572a0f7c1a4284465528c0b762f06ae9cd21da836afc8209e46d6bdae9a8dbd83e59241808a09eb964bfcabc3bc01d6d9f717798192d2ec7fceb8aa3811ea5f7197074359644da7ca7d01cdcc5711fd5b90f9d56adde3e12744126c818b8095e7f0c6a5531a3d9f8850631998e9804ba8038966f77844271d0eadab91ee99856e58990e779421fc582ce9362f5894e74aba90d1324b3de5e996511071247b578d374626ccbb41e5c2795dcd998e96fac91bd5c1233f15431442c54228136e34cdf596965a75e4834f9f8585de71cdabab9022dcd13a166a257cd3eabea5bc44b5fa510629ab53fe8606290707eb83237a803dca44258682a4ab41b03cc0abaecdae3f1d4246d77df01613fb1ce3fe89bd53ef3484e9aeb21a36d83ba94e859b9d7a2784ac2cb62813380a0723408806fd7000c29a6cd6230e8760340d +MD = 6be720da8b47b9ff169100d51bc971bc9cf9968cfd305c6bc4b34f9fb233b3dfd4dd0eb59def8f329fb60a32be902dc8aa3aeeb8dd7c1896d0e0bc30ac1a007e + +Len = 57256 +Msg = 3a37e46306ac3e6aee3cf25d279bf920946f6c383af99a8af4f8576567ca97c339d53bcc7e252a9c7356a4466fb5d31916a2a322d039d4f17a314ea05b03b412594f3b796c7cbd1b54a00955879f7ee06e96d853d07a49e98ffccc8592b0b6f3026f8d71b9fa1e6ef7dfca9157a121fd0213b2d4230520f99b22791bf519c4ef9cfbd9bc4be4761dc6de8e03c802e4f93ce1d9acaf2282aa066cfe6a6c86078d8fbcc6630c85ecb12764feb1c00cf05b83c7f6e35e189783389f037ae03ea655437afd6de324a9b18438c2a528056dab3e8eb1821731860c99862f54378acacf21fd26e2b708d4a5442381e7e9368372d7feb18fc1b378cd92e82bff5bb29b848f0ce8cb727a9615cfede37de9e75836b5df9f1546e7944f898c9e8332fe40fbf671eb2ffbc2178a8d5e92711260178240f922198d150319e73b31e9a6b5e2bcbff2d8163a287e8ce63d33cb4be8e6dbe014e3a57e85ecb315bd8c389e21a8505058578817f4f4a1425471917bc8edcbfdf789c0017e78a679da56780188bb3e136a0f8e7a6da0530969f1cd8c4956d9ff6bbd73fe4acf797d5a38b1b933420e6ef2a92f4bdcab29a3455e8665b1468e4e3827c55d2f18b48804d9ecad6a6649cbb6cc7472893cab78b05ec5ee48e77052266ebe06767ce001a1e231c5754f7691802163d7bc7c62f07299910f58610974fc3b66e266228452f9fa86e99b241d2816500763bd92d57452b9f2b027dce11a8435c6d7493228e2d4caf501250ec6f8400065fcd3a78d6a1963f0b9fe7f7eae8405e5ce65d65419faf985f55b34fa69c8d9878b48e3103c8f41941225726a96c552cbb00434915f33303ead85bf40e3758574f9626de8507cfbe5a4e4de2d3c0fc581636c74661c46172912ebd621ce0ea9342c6a6e9c10a839eb5583eb4d062a060ed1e5bf5cb8fc554d0ad5a224925cf0d00ea70db5e3dba2af0e49c0545eddbc7ae0b93dfa9b1d93b37e8a4ad19727ff4f866373ba30dcde38b88086caabf18fce7a2e15c82e7178615753f7b0453681b97be4c7336174968f396e6435542f2911868e704ed7bfad617b78d14a05531c16d77432a9dd6b72ba7b5b831fc35c2f4bec1f7515ffd1d9bbd441ff263d44786f8159dca30c8919c364910a0f5f434c84942a4da40f6da57549f5aacc57d23ecb61dbeca9569534b1de57228e90ab26c566f61f836d5cb999c1def9c5b9c516335f448b4323596a8dd0f4f323be5b65154acd143b8365bc2e26421598cde5a7ae63dae0fadb9b645e21b1a456511cb27d28f55453b852573d5f6a25cdf9fa9a4455e71455e624c92cbbd65eafb1b6b504e8b7065373ea31cd549e52eda7cb96fd1db14eddacbc420085ab48b747f115b2725b52c31ef4f3e6ed26c47f3e2144e2a381b718962a77e167778bf579957a8fae29612c203944901249a20b26c44cfad09e77900a380fd749844ef1b0698ea484695b16e181cdd4ab501419c67c554e8a52b5cd71acb3ea1318ba345536f6f8dd626807c99335b9a0834432881107e4bae39955344f0a23ad7cf745cec45d939f5dae8940392548d92a57ddd34a0cc6499a4cb2b9e9bd8900f82cac85db697eb4a25823ae3945883e8d78a310f009fc1dbff66c6a427324f2d381f2e043c2c002798c5e7b5c3c81b8f4cd0ba5cba98c209abe09ae21d5fd6c571f9e49c31161732a72c00f6ab33b2da67e9dfba391803872cd13ec508a1b57ca2e382725fe6aeefc34d3d22b51bf87ecb4e17a406cdf4f914b128e953b879975d549e22f30e25a39f71f2d67bf14ac0e97608a6ae0b24c3d5f8cfbb990471ca03d58e2aa50d1a127e62b86e5a44286544ea194e8950017bf310b9b843065c6938eed8e5d0540aa0e267f466ea952fb05022cfe8335d1985fea16d6bdc4e88195ef905012f8355d38e2a3d6ca764bf56bda8a3203652eb764b236142ef3d934ef88ca8f8fd1bba2ec40209cc1b2355bccff429630cf1d5c18b0f1bd9d663fc7ea8222b49d37d76171687c021a0518157198dc94d11ba96fc10dd239d3c52221cc05212504d293821083426f9f19fd0aa2cee193b0f1d7d8a8f05ef098b78b2cdd384d4b8c4bf6ed11b9f74b1693eb24a7c9d8fb93f7b17f15821f4bb3e480cf6744318efd4a088bbc3125fd481eeb4ac7b0493343d83e4c4feb9cb0eef50cf2b05152571e76d242581453effd6004644babbca5883a8628a0525d880f92347d01863a0cb8785bfb2f890a88fd013e5b7be4bab829c692f94edfeb3cdf620259a20b701793f7ac9f87b9d1300faaa1159f80cad4f02369a9a2bccd32260e7d6cdb097cde779ccb14a9cc304ffd03367bffaa7561a3f9131ee40e8bd4ac3dad9ff4a8e7cb2c0fc244dde9af4d8db30475e38842c70bf299425c00ae8938989bdb340f374479f799156b38d793886313ec9242b96ff0b402fb52b7bdb894c74e06e567f7b328fd56719ae22f87b5ba6cc6550162bf1ae756330d5e40cb8671ce094dd7ac7fffc8033fb30f4092de6116ed74edc62050349ed1d61bbf29d73e24cdb488e010c701a767fee6901dc9ff1947372d6cfb5c43e1bdf516c33a4fd8573964a11ace474f4bd0c390a98e3f3d7ebee5eadcb604bb27dfb279d366b5e46f34a44be321495bf6644a35134e08c34c39c84b9fbb1144781f54697815d30d75a8bbaec27193ccb00adafb54c6ec388b9f26793c704a88dd65251039af6ff8707cf2f13f26ef4b81aabd0df65db34444da489b3b3f792c5d996b969e9c52506898913de2a82380722d3991817a24907ed176da258f64db01a36f232f4444bb66e4e0b9345ff7128a7997b07b8709c4416cf85e81c7d43bd06b79dd75100ce17048268ebcb435aad2771f916eeb28889593154ed75191f4d2d9d1eff766746c91acade3020da3ef500f185de10e4982832e16d2b09463af0fd6be7f3daf4201cef8bbe18fd30b8a0e2acc3b5d58365d1225431492f81214904889b6d0543f4a311499afea6f332214ae81546931b6bf4b60e43908e565ca5c197bbb37bb33efc1e88f779b47e360688580cf8d01905134c8416c97c3267a7b2fdab7fa4ee698865ce45e2bc5e5ec149511d551308dbad843a2d3c9fa1bcbf674eed1a2741fec8959e28e2150006d20c87b8e3e2675a23cba4e9625f20d66d4ce0132b694a893d1c5cf2f054ffb8b92040821db4b10b36a168ede3314c3f21d275901be184736668af468602c9fef7433feb7b0082593693daad37cc60718d9663f674367c57d518e9962b94eb441cd3ca67746c37eea4119ea9c87719f801173fb8ccce9e90f99bb0645981d0228a607488a24e5e161fb919562dc7e54d1cd36d597e1067d9546f782388501504d067c2c17d3d7179f9d8cf54c0453eeb3139715b00a2647b6612c566309626758f5839947d900e84d32f45083865a35d0ed7e0201d0b1111bf141cbefaba810f07c04d942c0c71b13bfb0ef2eeafaf1cd62d3e5afba0fa16bfe1e2704f43b11bda1e7322f0f967a984ea81a76b99ae9557a7e06e551a8bf4f91abb2c96b8432696e14ed364fd4cb85e6c419837aa4e60e3e67adc91be5356fb0d0b66798e93d99eb73518107e8d78190ec337cb57fb0a0b5762283a22cca726675790603d3f8f71feda835bf3c66355308b189f3930fb4e894ac3c6ee64501b88244cc35ab2d2b1268387d003740493700dbd4ba48cbf2dda7951c057c6fc3b0df5fe4b5d7a2ddcccd4b7f50412c6444bcf9829506ab019e98234af1541061557412740bc120b4560527633ac2f32e832453be0935788a33509fefbad8f082af29a5a5c0cf6e58b7f7145243225d51fb2131aea03dfa34a2b65132e66fd6cfc7e75f9e5b6b5672f78a5c74f5ca3272b499da7ae186f9a8f5b1803cff808befa4948a8864fc9eaa1fa846f0d7203a3cb776974b54783d8d342b75348d75d88b4e1a6c8a63ea0fa7353819ee718d3d540b9eb049827c8d8c650b794316b5834bce5f4dcde19c711244211e984c7a0265b8fb6d9bf2f8b34d9239d29124a854d62b4d7778667c8c92514d9d14ef4d5215c773156a2c567577c29cc8453eb615d56dcb31b478f127d066a3dd8ae270f50c3ff0f2ddb9fc9cb2fe1ea588ed478cef9dc0c2a9a1630c738a0b2823ae49b3f328594a1d2054f0a84da6af81b7c382cdc216737e683a0124c66dc406da4254728b966651e9c438feb71d30592792c017e4b48c5c55dfcf8b21b1fa5deec19f306f8e8ea29db63e5f44696e37c21c0b740b82556af1b83e4fa3c0124d73305dd6dc2b0a38c391c871fd73b24412ca2e8c406815d1c32e151954805400f0f6560bda54213ae3bd9fdce92343a79e02ef088a4e16b854aa1e903dda089eed7b527872f11cd086a28b4910626b89ee2d1890f21c9e482a921f5d65b6754ef22719c5abeb432433a853607b1670128bb46fcb7fbaf6a8cf4fe127d4fde439886272998e28de5b7237c1c831289b69fcfdbd6239106602cb4a2c9793959d873694279c219135a0cbb79b2a3a8134b7c972c9fc2807357ba4eac755a968e85f8525fe776e0e9019c790aa2d9f0783237b7a5d425585ad3de4967c081e5d0de9fc7dc0d27d8836eeed2ab67a67a4cfd6997c3fdcc773147012b81158fb5b534f2304355454e57048c5ed87b89a3f62f8abe2387186bab33bb7b74fef474c04b6822324a6fd0f864fd842e49041c082b0391310a99b40d2c75afbfe720a176648a240567080ecc02aad8f96aa630e7826cc778f2e0defb93c83ece68c4ca4c22d0ac59459e3666502cd3d66ad08138c83eb767da5e4aeafc1bbf2cee316db5f8d4218a4093064bffebeb5194238b605ef1f78a1b92964fd7e8875801f6fa4878fd3a34e296fcd14470a5e7a10fcdf2d91efe5c410e3fbec9c75ddc2e960e7805b44cc5c61a68bad04389f50c05b764a92e325ae521a5ac24307925de9f08c931a1dfd9458df85d25ed1e262f95e64a51983a02728d669c79ac8fc19c6277b08f4e79dc0b721a3cb7d5c8e79640c8f864f58bff73a201045ca3f83bd280d9c27102814a62575cddf88610b5da86de0345ce9e8e52fff3782faf49013b9abd737976bc90f4be1eb57a769c0d66e893ff967be84bbaf7cc6c7537089e11e081582b03526c2d070e57b04fb17ac5e69951b9860fc3f649ea55cfd3ad8f0022c3c4e841092895e27a393c49f77a61f14c8e31856b63af36dbd891fdae3080b2036e43b83752a9a100ee712dd488e5a92c2990f281c7307f1f496e2d914f0e1ebe98cfc17386e2e320cbf143ef32ab6ec6985a55f95b4463333ca6dbed2722d953f8eef52411dc2958662f249de43dc29a7ef008288c3583a636fe911845497271f313dbff9fffd426519d58772a07351631e4b195f69e60e6acb7d5b945fc6a870be0ee3c8db88408f2ce57e170b246d855bacad816e98b832265222695b63201c7d8948177b0a97eee349b8364a9783f4ee4bc5569a153fa1ca8ff16b1015980ab6d7754ca52c5069852abd3526739e9a1f51e946b506aba1fe5d4d0246851622b11ff2d1229672e75caf137e6761c35e36e6a1b98612051909e4c096c45ba54cb58a480cbaef0552ae014477d508fc287a317617d6e254f0344bd18f533e4a700c40fe6734e01291c447d88a371150e0345befc86d1da010c7bb0955bbd60f76fc689c485a109f8ce6aa551e5723c86fac8b9534136cf1600a5bee50c4ccfb46ce2baa19f228b72b5c52459afbe76abb2aeaeec4907750c844540ae935c816c9cab0b141c5cf5f566d662f68ec0440adf6a084deabe5c430bfcde586d87169e5372039289baea1f5620e9ceff223522d57d4dfec2d5f5680c1ef05917370fb835fa2c8363c6c84f083741397d4eca62497af8554df8c0da093e1f470cf6cd58c885fe8d36fb2102f18bd1cc85c064678fc5800808615f1797dcc3a8db40efde6fb7e2067fd284e9a69143fea501a3a13cff7d8d6eda10af1c6d85d4eeafe7d7b0028f85aaf75451abe9f056579cf88db57b693c0dbd961f1b82ce71d38e35d31de85f9144b42fe955e86f5a29fce3abadebbbba41764fd6299f160616766a3f2dfbcaafe99367ff492f298078abf5897aa2ed7ec6aece62ab24e4e813f2e59a549f6947e63fad220a20b74fd0148e859043870ff9c1625334b6c3be788e48632655a3dfd6f35ff00d6f813edce14f4ea34010d45758cc163ac73aefa0a2f33807b112fe486900c7b75e2fd3db7c9833182b03626bdf6c2a41c8a30228db86779d342f29970b3037bc9f0b85785109e16366d740a3bfb31dde5d948c7d8262a04b4160c86f545ebe7184bcea100904c8197624d59b84415f64d897e51b422840968b50711ddefcda6ab1ac785eff2955aeeb44b7bfc7976d69dc25a29e9547e7135466ba4ef58b0a2ca8629691bdd8189838ef6d9cf415c671cab65b53f631f2264f1bea6f4289cc2bdb77eb74dfa19f79e16d5d9f944d090146d265e7ef870053ce08a7fb5099aeecbd44dd64bf1648a877470e4412bd939cb2f258c6dba770207385696f7a1b00e3d051f2edd696a2b85d14f63709e804a8a1aeba8d5523e020b24ab558598e90b5b747b27cd0a34c3e255fbbc4e44ccac9956ff187e67cdeb92ca102326974acb6d46e929e27dc938e427fb59a3c6c545400ae94630a22aa7e2520d68a146dd37bba6f19ce36a3274d470d7a037cb73fec75f3298b3ab5f1c43e52a8dbf4ca9378dba1ce89978755dfa5718fbd2fcdfc0757c6178ce297434ffabf0f84852b6b42aaaf175cc509cdd9d0545d13b0110719489fe4d4bc46fd55dcbe61204ff0d94db9ff9ac439aaedb06a1e6893b810efa6ab0927ff0255ae9a46d9543bafcb5c1e8c1baf3c8fdb43e7e54838d9a25e2444017a47686f43c571dbb83f434f0b6219937beb32121b5f04b46a544209493365de6bc99d4d81e0710da3a8b3884199e352a8d5517afb9d8b59ed316947629b70b466252a47a07e1c4f542728f60e51f06c1ad3f724fc9de0685966bc075adb1905f1f09bc82ffcd8332210f012b228b5225a8dbfaa8ebea842275ab6a37260b35587a24e5970fb393b961cc558dd8cc627d0690776329e4799ef83e5b649cad4259fc0ce7613d7b3db38910553010c97ef24dc5b0278bb42b20a78d5ba5177fff8c2b298a8a930dc9482242c7b9d26aeeac07e46e9d1843e3d10bfe32a2a068b31792e396b719517f9fb3cc74d32497f9d2bb54796dd877e8d8abfaa7023e53a822b6a3d292d630a7e1c41524241038e88cf27d993ed339845e0fea836dfa2524d621cf07c3d2908835de859e549d35030433c796b81272fd8bc0348e8ddbc7705a5ad1fdf2155b6bc48884ac0cd376925f069a37849c089c8645429007e921d4d7e90f7cc6a87798b64a7a14f4bbe4ddc8f35e454a79e5a978267a51862c1b977557f34ce792ce5732accf9fb35c652c65837b89b1b2ef6c88ec4698b0ad9e035b2ae334fedb46f06037eb15f2bfe2c65e3d59c8624e102cdf1e0d2f2d73905eb2ed49feb38cc9aa6972373e58ea44f4dcaa60cd05552f33a44436dca686dbf1a1258c70adab3ecf75e519e28ee771fe0750f95f41d033c700e72b68c3ef6504515c145395438ca5ab19fac83bbe532c06b98a45bec606311b8e539b2bb518dfea19496e12599d75349543b90875d1c5026d7d48253f8fb91cc1163c87e0dac993e5938bcdf7588638e15a7d9c16d21322f238301e43b6a62c08dc157e79950c74475a706d24a522de86a9dca1a8405c8fd225c550db634272ec0decb98630eeb6c706e69be96c8f4e0b969ebc3402e97095aace640e7ed317f4118adf1293b881edffb5ff4d9516b1f88b8a97c10002eec1311501e5efa242a951b79922a6b1fc42ada5405809ff2fd6ef69da5722ef31e02160d0669ef71c91333a8fc05123504d797e0712ae92ef2c2a032dfe50f76079e278799b741acd3620dd68f37c54a496c907fb846d171a82a42036bf7263a315dc25a38c57527c208166cdc40f8d21a60609c5b52fd5d761c488a0a1707b243b772ef64030e851d5bc9e6539f216ef04994d0cadda154f4ff40211ad328708731b5d1cbfe82475df3b4dd95d0d373538e8987975571fa9d69c5831eaa0cf7a463078ba11654e10c6643bd03548381ccb5db5b4148f3b0e7e2250aa60a39ba03a1e487b3f91ae4910a12ff3cb8c60cb445f6a649269b1a6ceefb321172132a2d94d95044f538c494759f3ea26bff96a2b558131f8ccc8984e6b48411803dda9ab2527004c922f38f2f34d5c4ecb492309a9c0c54da2c90d86fed9af6a32e4dd370fc5153b38e03d9ad906f14c96991c65c2f0c599d2fc2cff112c1615958f65057139eb262ce780c672e652270a307dc708d9dce444a91e400a0b1c221325699db4492b14568c2afe26b427e70e586fb7e342b037e0180ad1533c699896f0138841be7d0e9e1763cb5d3a179589571abebbf4e9998e91193b5287a67f0536894d7f5f881beccf52b37f3ecb376576a563f8b83013365b730571b67bdf4740f374d5f6f54328fd2040f489ebd889fd382f02542dacc0bf3fb7178f8fc146567a85ad496b8e3ae9f4fa25e31e7ddd34fda94290876c1405a6daabdc8b2ce9c046096e2293050adbf76878130c30496219591e36e65b1a75cff59763162918c57e887f4715af811b511256e35ef8b5d1b7c7ff0cf482bb56e29042edd9bfbbae4a884a80989585f029802819bcde09c7fd7c4edc56e8ddf2093314417cf6bbc3d3933697c4bdffa4a73b547ecde82d8d13ff716cb795698f6a677529a6d6fe4c4130ab524331d87df5ca44da3a20096b22d8d284bd9248762db3cd6bff686d91bce8117bbaf9f6c438b55ef5aa8e86a85290d7ee10e660ef7ba084d030b3f0da6b41d1d8d41b43c09b850c96c6398a8ecaaeea7159999b417cb50220e1bf706e76c5513237a1a6bb43c1b5873629fe63b3ba72d440b4e0b6577ab023b995d39606fcfa508b9206fb5bf1c08ea166cb70343cd7e06c3e16943577f4a0613c039a436d34fc79f74dc9099d9774b0f9d7fd76bd805d863f27243d35376181bce6c254a068fca8d7626d754ea1000ae90c52a1c5d71335c0faae983be22cc01e6655611dfc19c23a2d2fc98b46fc573e51b6dcda43c922c7777a6d115bcac6696a9d946d5a1b6c2996572addee2e41008d734f862c49f55f86cfe5400c033ca5d9e01317e8ca50aa852cc2cb01606e38aacf2350fa59558d0ff7284f5b9ecadb9d6706a310ee16c8e2f7b9dde75886ee8f1380c016c2ea5bfa385dc6b26517129d7a9699394e66889500379b09df322824868d5fe64b5dd02fdbac2e781ecc52c161ea82cab3e6f4868f638ecdbc1af0517273b4d3be56f497273e0d159290a3f1632ce62de541139eec653d9cb9e54dfe1d594846e27cd018663beef1890c0e15c9814bc9ac1dedc35f6630df9c3b4813d068a1a57e786b9bdecb5674cbe89a15dc133b06d0238bde2f8ef0fc2ec6e778d3c849595bf1ce09d914cf061fcb50d9e10a3d4c18faf4d8a504045d372b34166ea0c8cb4190ff489d41e00f4e5d364a238eda034d4a309709f1f4687f1537d3e918a462f7fd0842727812f72147574ee9c5989337bd4805a37c4987cd2af7988b5a678547dff0dda2e1eb265d31b8ce7ada02659ef94309bace8a21ea127c4e9e8b989ef7dfc00374a6f504cdc263b31ff39ddf4aa6298a970e3f9d9f76cedb68d6c014d0a47f9b2fecb8fa38a35fe32039f36a036d03728365f165b2fef6293261664f9ad7358d1cdebb6e657cb448c5d38b6f90f6d8a8c4fb27e0eb51fb1e435412b71d1febc183a186c91df46bc956e9ed54bae8b014a2f769761418e5a4e5d84db42025a81eac60a17428b38a4d1aa5a28349eb939e67813f8ff3fabca25e159dae6d90748ede4195d54e621cbe5a2d316205a98a2e59c3329352a089fff7328d0dca0957f9626ce85657a926035ea9225bb5c79cacc2e2c9eaf7b154a5f857a23900385a45810a255e0a2fb2046e42fed423f0d200e8098dfdaad6237ba9ae669ad7c4845b8043d154309dc7a9d21f4b3715ca3212145e043235b70069515c60981656de23 +MD = 2e232557233b61c0aba3bf10b0cbbfb953974c8931e639b6efafbac76320ddd47100ab406ce17e216463658ec43bf0ec8acc2bc3d076ce08283477c5f6149ff2 + +Len = 58048 +Msg = 0728c948567a5850603cb2a1917ac5406ff16c6ad071441d4a85bbdaec5669aa2bcda45f1ff84e1cf0aff2178b770f9e99a6b458b1c84dcecc42bd29fa35ad3d54a523c732db56f39e07c122082a76e93b33b55d8f68bd8e6008e251c02fe04369f96f0af5ea17de528e4649705ca02a3ce09600d21a3a65ee2151d9a40baac15211afafd2ef3ae4f48aaa142bd5356986f580cae2a46c5c5fd333491093b5c1f7350c3f30b0660e6c44140ba15ddeac00ba9a4128cefd7a9967b02a6b8da64a40adae4177f74463a204adb73abc43fd92770def0a6292c88525ef031dc2286515c0bc3d0e8a7ceb7e129c9f5fb90b632473005cf126d64c0b54195c8efae1195eb85ebc5f31b5aee9b50a4b761edee79ef79c0e46e46e10143d55bd26fd796e03dbbe45d1b697b5c9361f44e9b1668fe84b088f6f62051c8629ccaf4d92996cec720160cce0cc0708dd02111e3b4865ebb76d67d66941764b5ea6b96b83e91c01c45295b876f9ac8cf2dc3a7f832f718d83f31ce1c0ca2849250a64e89610852b1bd76dfe41c9ad3fbdd4487253c1bab7f6c138fa31493a6ac520372c94b7af50bdb86f0409e111078613c26171a64852590043888266b2948811ba9f4485a359f31e243395ece0ce94c130b3a6872344f4d7c3f37cc89ab1b40575a97023682f053112f3af90227b30051ad0ba0c54770f6f42a2e718f9a89223f1b3de3806b83b18c3ad1d75e0f6a207092075dce2d1f2f047ff8bfdd8616a94b523576d86deddfcbfc7a844222732f0850b9fa0d53ce5815b712f203ec484804963a36aef8832048cab18a5eef628e814f9ffff359f2f4a05609d2833b9270e36d98ad6499e8359b4bf353f4e4bcb1640525ea20be11974cd349bbec0289c6603efd4599d071822bf6dc7bb490e64a3907e84305eeceb273b56f28aebf92cb1380c489cf2ad3988331c95c0e7273bb68ce5395237a7ed8ad82c6a33be141c175e97b04750772eb39a3368f7317e9878bdef45b09dfa66c62b1fca624161b7bffcfad202bf4d3eca7b1c08082efbc311aa056ff198cda002bc98dcbe7bc944d29a9c76734817b3f55f3e3d9ae78703a8dc8d80be3008e16714fd66f074320a77c0e56645f2bdd35ecd01cf556208a265d9f141be6e94721dbab7319f348652d7f73d691ec628e72a4dcd85e3a968e6712b97779a59579b4b362f0574c4ab6419c60c46a7ca3e3684670a28e9c48d18f459e9edf9fa3aa31a11cca9172b8b8867b6bac68708e80a92a4208012b9617f15ec4d6a845725d4b1d2f5e72f710c06e64eafb166880fa97c8b78550392ca65fd6b2db5e37a017439011485649f1825c01654cfee51995c6ba5786f6757b210d45ef097bd6bb4ccd927904c60bb962f1d960fe7c56a706b87788996e40e00c9c14efed8ba302824bacbd104c8d06d6a245749c393de7a1ef78e149122c19cd8ecc2bf4083d343c403753f7547e3871ffee06b2901b2a1bde46f7f29ca776d857e429b96c05ceff3ddad426683fecb95d2b9dbe2b6f0cb8f75a1332684395d189f56faa418d113fa70fc42a124282116c96b03b65ba0e2ddd3ae9950f70e53d876874430343c9721e3e9a7ecd36a71e80b7d4a6c98c8cdef251e186eccfe380f2c5ce103bca462b05efdd91038cba354bf7717ce1472740d9477174aab11f203e85e39e557125eef0bbe40d5fa53a0a20ee2d4a278a5bf7f484300aa3a506afcd313b49ead8d722610b64402c10a4e1a1f44e8b16b6a968c68093a5724c288441505bbf5671d869c956d4e6137f996041b28bbc396c8e17e1c522d190f6f3522d5bcb4b32dca839ac36ac4b8022760a72913b5a0a1c7889b8ea541b7a46057dd3bbf09a0a69d4f68c13510d0ca9c954c728f3e0f336f732ce38adefb8a9cd7be719620847b9dd34eb856987138611b3b1d23bed9f4c98b7846896cab692b9e0d9cc9632754d3f794d055c662f37ddcbc53589dc68edcb6c9dd2b5390eb169312e7e03851d745a48130bb016da4f8bf173cb4439ea6b0dd65d0f7fb72b6649d14786409c9affdc05e0110b058f3dbab93ffc11829e74ee9954876cd19721da65d77dd3d58820334736ada3dec872d8a79c507852ff6bdc0a16d2e2f4cc84a95330dd13cc6f95de90894a30ff109f64311b50df0777e054cd166a98ad55ff252df62ca6edbbb15c665a7f28e2f203ebea3f85bc2ca252f736d5c6f477ae11dc4a89d4f3b5e7133b2d2ca50226e750ee377b57964f093421fbc7606cc04f3d3d5d8e6e90b19c2bd979625443375b06d9ad515f03cb171463707ddf8833a3f1d6cb6671e46d257bd5cfae156290d7864cb044046b4d56744a396b8cdd2e66d02718945795452d73ae946260e6cfe75fa5e4d5d0633231c424bb1300b23ce258bcd9aab7f9d61eb3d26c21bf5641050373bf894b52064394b17a06d3cddbb0ebf6631bfba8ac63bcdfbb5e9927a0ab1234a4d0fdde5606564efaa96e76876d0a62595a9b1814b6ef25069b76d14b63fc77493f305e9df4997bb19d3952cc41448f21092ecebb62cb40d24ae0f9cdaa32a9f146bb694a98deb63334ecd917082aeb6e8a2f431d01f1c1a2ff6ff783f8554b4169c774e85d869cf412c17ff40c1df57660050b961ed315fd2b6c512ad8b4e9ce2b1d07f3dd217e78a98fbdefe7ae3bfd2d588ed313efcc45417ead0ec601f3dc0d0498f9724ff9458b802967054c3d47448253407bb8332ff40f51cc3aacf81f7226be75c7629bcf1b4b38f5ff886809382aef5ad0bd08f19596e5dfb12674fd1cebded546f9b489eb59731920d34aa79aaab9ae9d7ebc5eb8cdefa5c3fee8e94fcc80a46b85f21a7e334e5d33cd63a6ce9a48a84c7dababdffcc5daeda6c2889d612a6fbf97d2d54651511e82d7217b567222d4682a758d7dac0edb98aea04f881252a3cd9fb56ed64bf1f9a87132b9c4bacebf6b15a858046421245f86e0a292889fccf00e383b907bc75b1f2be5d68becb2c5efbf92b016bdb3419cb032263f1c4867c173d9c0177927df5187d9563e7065844098e31a27012bbfeacae34f004602f0dc60f880ddbcc9d2e9e57bbd3efe5d77182207fab7d7010bc437928168ae55e48b46331255cef3f232f55b801fdf011ad0fb8fd64bc7c991b376be61eabd97df78a407e912285ca9d717d72353ab06fbf585d931553bebfe3318c57508ec6f3e0efaf57985416a6640cd9d2b7cdac5771041729056abeeadbd8e561f35c3328cc8cb6a4841a283a40a971c0cedf6c3289bceea77d2a0583ccd57ded513ca9848209604d9b9d45f0f9f04b25c3987969d027ebf5c5ba1af07ecf5de4b057af6fcc0db23b2605f42f568871e7de1f5a620eee15fb2543859bb96f8b2c59d5cd517040b6546c7abe60201aebf0679d97870bb875a2e5edcfea455d11af94dd8b92374b7381b72329e91f4dbf26a639b93f8e2e11d04cdf7f47e940f753a897729ae9d6f1ab4d28bf331bcaf773e31c47f161f8f36ea3421d196ec04302df2c09d14e8839b877b208a6dc389bbe656dc9074abd2365323d31c89d86ffa37fc4d8a02d0a52927de98baa2940b1ef7555c8e81225a79b41f944bc3c3a321ed186686d5003441fa7f4d0a8cc8a43ed5bfccbfc81da89fa189edd5c1384e55b1d9b40a17d1c18493dfb5f068bbd58a25f895aab5e81d169ff538512ec0a1f41ab2be9a57dfdd5f68628c12e2f81f9f5c925fd5d73c585cf3d40c3468d77e8bac25de9e0184d8310cba17d8680802dcee0f73d7a864baf161b8e1f5ebf7148aeab59cab915b52b7e548e1b78455ffc15ed28a16a60be5625e16521c34aa04803af48139a3edcd3286918236b48c96eb238dfb295c9c483e4d7ec52ddf6aeefa214524dea596b86f652671ec74f648c8e0945f66488053d3b444c39148b404673229eff102f0949d056a294f323d85d8fa882f73d672b8c1272ac5fd1d001535e2355b176885f269ebff10b598ccee99e5cbd3d892cdb7851a7354a7a8e96204c5d9eec832c142448d37d0d6051ee39a46f1e4eb1a0bf0ae02c0f84798daab52319a2369fe2d14bb6db6e21703cdf548727ceb41b8b7f49a74961953495e318cd9f881a32733ea4d11eecd0f1134a4231cdf5f731b5c33e8f455303156ee9533037791da4a802367fe61ea04b9fd60c88a8ba9d5ae532ef7e6a0f5882df656e36299dc95e47c60aa9792c1be7a82cb976024630fde574665dfeba1be5b2ff6fc6bc1ba5c618312638203fc92bf6f351e221c138847b32ab154a7fd5a5ad5e60c73a1c3945e5ec9412237f318050d4ddb34e523b567014c48c96840d2a992b4823e9c70e44749e5c21ca13db4f7f7764d3d121c3db8bc1bbac2af14bdc3d0d30c11245ab298ef0844b5d234ffe4c83ee29f257577b96e2985c4def182363ad1f89fcbd985dfb8a167a23d916f77ca1849df91c809e571e618348a6fa67d1b21d63f1585e4983131995655bb7a0da782c172d97c4ac981e200b633d7b1050c53337373e8454ee3496846bd1ba632db1f07fd8f1ae0d1f89dcdbe6dc2386a88e67ed179692e50394942f7d64a8a73cf3d8bd4051c329b4089edb19ad7931a1b4c36dd98811668bdc1b7ee33b07d3d0e7ebbaade08d6921436df344d5057a03e04f9fc53e883e4fb33459e4806251b134315c69c693332de1510bae7f4fc795b9126c23dd7fd514c2e5a8ca583e88a783b28cbb2a5df09f8b520ba0d1e08120e814ba3a907e93a5b03853dbed25e07a7c7733ea34740940e879db62f33f116c145d73537d0ee0c926354260679ec1f1c687373f0e5fe4d8a1cd643c0ef4dd41e6f67db6ccb62447cce35da0ee3293d60aea8202dda6eb2f5d568c764a884f6706e6c2aba6ffc7e8494a8de5a867beefefa9fa7bccd2850cc51d3c57ce82cea51b35287a337031744672b875c0c8aa051ecb89f1006a193880295d28c36ac1c5cdeb996a9a91cab36a64c7995cdac0df3e5816aea4f6117c3783d53250c9928dc611fcc404eafb6c5e27a399a5276647f85988f8defed49e92318eba9e25a8c6abaf38d198042a69c9c332bdc2360503f4d5c918d60bca66383d6e0bd5096b3827cb37d67f66c17054415e4ddb8f06dcd9d4c056b6a45b9ed2ae5f6c1cfa43aae06fe01ee098264aa7a80e901abbcf9a505e55f9a352ef0c078d48249b8298e57ea21bf0e423c3bf69002acfa541ca05007c704bc79cee7a80e1107c7b28d2b2aa6dd093b28efe9642519952a4a95ee49235f9924a0ac0aee5b2a1bce47459d70cd6e75074614199dca44561407cf201ad92d8175424cd70dd09e22cfdef961c4be8496f4f25f38edc001544a040f022fa99f6220b737e8a10edbb13ef20ef4b0fa8dc386d617b3eed6ef142ee80bf10205439fa9a7e39c2276614bbe190cd2a022089f2f69d4371b5f5c1a54fc1c793c8cb8ae927cd67e2ca7cd56afcc59983ca5739e71261b2eedc9d6db3ed8d70729a05d235dbe971b0a038e7696849b91c0f55d25de736307f0b6edeb5f06b22773d0af727dd59bdf552a130004ca497bd7a233d9da0a325eaea71faf280e445685ae2e30756a5b57887bf9976d05c9930b2c863ef6331f9f820adaab4c37f410e98967c1d6d56c003e89b0a151efb293c604c2b9a58661571562ad741e4c47e31a02cacb04bf3455c1d3c6c235b09aea82cb87ce8a9cddf1d33f167e3093b659919af590a1704ae4ccdaba5e9b20c903dbd13401f7bebc0c4600944df5b6d5c0dac246d71fa12629ba0ee9faf498e36c3bc655e88f94a212d847a548001e1cc570195cf2e1ca4c911400f40bd48160a02d0b6be6b48716821484d810d231f1e3dbf096789a4424b765215725ad82d73c1a20f481093e8ff685489b1cdebb0b8888f891dc9ba74509181091ccf2159d9cada77e4be00384cca4f36ce097f1b0400181cd93888c3402b72f226654a25a4e31ff77abfb7e8b90fe15dbf0a07e8686c03ca831c33b6830cd0d877617b163dd51996f259e180acfeb3056c15aca04e95f79b03bee6d681fc41c4f90edeb60a67715c34d5a6888f606d36bd7595ca1d449d984166c7a9a3c36dbc93b3988c7463cf51287b2d89c9fdb7f89a70ecee3d3f9dc8265cfeb94f28fecb2d97d420e48fda7eb7929f0bc29d3754eb50d694164e9e3498e7b48eeef599f6b003b8fbc0b53beac7642394e2089851985b7d45103b48e2805011aee9f0e847023f6ca4719b9a9d4137e2ae910580f889da098893cd44dcc7e03ca3a6e293c50c9319a3600a9da00e5404e0375e9850a714a2e607cb3a2a53dc5ef58f924278b647e781f4c9effa1403b0b23cd98761d8536ee6d4fed1d20e8f9e2a0bca9c69e9a2fdc594a236b33d8b0ead083ff53305dd9810622eb2dedf4025cc8150499f8bed84f7aa5b1bd47036475803578ccf17fc46ec19228555ad361a635bedf2228571a3a09dbd4564954a833c96ebf13cf4f5a10362a4f14062baa67500693ffbc0738347d5905d6b9310e9df27c1cf828613d0dca37a9ea6e514f18cd88cd731233e4b74ba9c0af254d0a2cb20a3ccaab39dfbff456d358f1e8c222f4b1e63cc951924afb4a8f5ffbfd2d588e75790ba65da4cf5b1455e04f56a62e7c1e68ad5004b36812b7ec59dbc5dab9ce6a5c4bd8313e9454ecac00b52f5d83aa2adf5534b1da87187e423d133ba4c91835710b8f591fa7783c404af1d76adb2563b4b4e5ed7a30830a3b7a50c32dfef28331bb5a399a814bafad1f53e3508d7455835cf21c14ecc8e8328202f0b8d3c3c038ebb75761aa35a35d0e79d7a1230d8cc5bdc7c22d247094b1f4a858d7d02278d10d3536e7aaccb3da98c238df245755e6480574456010ac5432cf402d8c8509a4a0425cbedb774da03ecb6b5d19e86d8f9c09a6d0381f7b73dcd65b0c51721f1e456d3d39d4dbfd486103f3cd7c47100c1a62de6014f3aeab436c1e06d76015c85d145cfb2f513f2dbffa7682b3ea09f6539f8f777f33926516deedbf76d58a1d57e63065438d8fdaac1d482f694797c8c81e3e78df55e32bc7cd6e68c848f897e6416c2a99d77be9a5fb0d15f4f6661df87d7006dde10d89c6a5f4c54440cdc258b4449dcac56fa54e0229f8ff6cd140552ba883c36b6de994073537634386275fcd6e513edde7c804c1132ae11185ea7ea76c82583ba0d5c05f9451bdd7be213beb5db76e9770bc5ac67d4e328ae076d58f1084e4f832d8dc1d9686ac53e26aad9c7762f278a6ecb070bca56c4f7d7fea31590df217906d47dfb058c76e7f4e056f6fd632f7d6e3b65e55f306c5b9603d3c8a70182045fd7404763a878e0155d3c29b73d8abad3bdceddda99a9420b23f1f496dbf98c024112a5cce7518f51ca9348ede2bfa765f84bdb82b80214ff070480a6970e79b5b8fbfd86718b5e6fcf643ae87d56aeeb95e3c7a1b6ff393a5714541c5a493341e40437da6dadb43913b6e9ed34d8362f3b9f897dba281a84ba2a58434f33226e6f343b100340f8753f913c472fcca6f79385095eed061da5d84c74629b53af03fe94f1705dcb94ecfafd1b3c97ba680c45a0308e7720ab645a8590c0693140ca3c2a4142a0d6ef66ed036e16942ae336f8f5e4547ffe2d8ae8da94a6df563f89ce0014cdf7ea71abc0aa1d1b4da57f3c548e0ef72d2909df2955685c254912095f1e505a888e82821afb1194ebb2a4e8037297c0aa28a92bc6fdf42a64922312958adf317b4a8ab4a3fc30c895daba00aaa965f71e83733666da2158c4bad86c184ea79af9a6f10a04b7630174a4294df43c62e4b1c3d1c8b2f5d52d6c489bde917292dd2a2b1f49e5349385b0985a97863274ce896f2aa85255f9f285c4d331a8fc874135607d3ced7aa69e703eb3a60b9385ffd10fe59fed0276f036b7e72d04f66d0f42cd71aac5918691dc1f9d4129677cbdaf2c6c752b05326ca8a8419a4e672e907bfb645a158119a91ec2813288b741514b4d26f2b66517b1021f48402d58b1090671bf158452492d5bafc53fd18abc03cefa7bdd332a0c066da464e74ad0dec50bb7e8a3ba0dfc64be6fd331ace9d51a60bbd3004d5df8b211c0fd564cd79d0bb35649cc60ba1c976c8911cfc0db74e028199621aa05c5fe15fa7b56dc75d62225d548581e5f900f9085e9e3b668819b4f9b2c09f22a5a32a2db47afa2b371538abc4f0e9b06401150ecc2333598e494fccafe80ced49f96dfeac729459856e60a94c5b780b614e8d4450389e6748513582c724ee60c7c71f5af648b6e2d6e23cce4121b7478f4db451816ab71034c5f8b4bf13ae1d9d90d0bb2869fc4799f51f9349d022053c831cbee62617d4e22c2bcafe40d67449eb04a7c962bf084d2bab80dd0342b4f78338d4d4f75b25bed8214deb18f2254b3a3da94faf89956f0a432f512783e74ec29b4c045adba3497e8ba62c288b711002ee2821cce68f8df588f76cc9801cb0d5b67ccacd33ae1063cd6c37dc0d1836e988acf63750571891ef618645a1b5bc110cffbecaddd6824c692874cff16b3e32bfc0236b417c9d43d8f624387352cf19114d46d0448d3d7cd1438960c2ea8482d5da3ff544608aaff83dcd1e7f64786275ddf989f262a099b845dc2b0c26a86e7d83a251e3c37f2aafa0e764107b36618d2a5d3481d73a1760b7f3ab37a0283a1925010d79e5e94871b819b5e0f787bac9dad87c5d5b887a7d12565ddfd7729a3b66c274a178377de0fbca607b79fab2de37f1ddff800a376fdd7abf5f4d15f346a17d43e4db085f7fe470102a72fe0e1cfa4fb5e2b54dd2ab71e74c506190c9dd6d87f7ae8eca5190fab12178630011286a38b0a18bb1d0d29802813dc561a2724378ec79140bf8e6a6f4310fdabf606330434ab673d4b6578872fa81d90701779bc6aedf0b2bc9c381bfbb4b3a6a705fc505d08c0e24f7bcfbbf24c72cff6b800f07bb4ac4d828ca138a1ca512cfc59090e70eac9b3119754a3d7c6831c9451de5a29e46d16faa6cc4d9f1b7e42dd4983c6d4192db779012fc747e0f77e32293e83dd44dd170c31e2e25c6fe3f2321c9201f15d92f6700089afab6077feb88946f1fd9da257a1770a7f408d2743e31b5d452f7ea179dcdd8ae4690faaa30eb91e2ef3b764de9fbe6dadb33ff33ed88e0d1df6430147a7e159edebb539751d01efc2255accb5f04f32f31d4befe9f9bdc90eae755a68b7511f52971acb7ccba9e133fd4e81e37a7282dae67ac24e2fefbaa2bfdc56e5f678039cd70509c101f81b0be15a2c70276e85e976941575606d086091409bc54a9d2e5212409a4ba837c6d13b487565dd8d62a836618f647580dad08c69d1109d07c7fcaf912822a6af090e72de03c98615429f8ca9d925576e587b191fa1cfd6fff72218c1584fe5a50d49eee57fa4094f4c57e1339ac0ec7face89e29b309ddcde64db498d4d94b64f90a172490fe4e83a9579ec87b3b1efdfb9f8550aec69ab9bb04ebdd44c8c233f6da5565dfe03df98027293024a0d42e7029345c3a0ef50b9fd0255a4f2531592c3f106e1451bef8fa50ec333cf7f65c300d151500ead60ab938cad59ef77f1fc2c3b008d65ab9c93f594d986c466bcd66d38e42a86125ff32c44217d94696cde1ee9dfbcd0216b576cab6295b971dc9380409adda7cca3231fcf6e8a71a5dabb0473f0fa251bd02c82c8eacb1f1f39ace27ed1c3d42adebdf694c0fb07cbc005856ff0cfd4f96f85c053dea185dd58751c4a25879bbb6726392ad569d739b1600a343b985058ae15be02bab36e1abd7e964902937efce0ee6ff82831608e233d1b774dfe37a7f03ec42c0b7b3885dd3bd8e1f561fe7db099039315fc24279a0f319fb46bfb65ea838b564d53857d4c3f6cab7a9d8aac6a988c724b24a2949a58d513eb6bfc2101666c07fcf6d58f6efbba0c0e80b407837f731c14455c53889c7e8a7f78ea57c959fec796bf992ac9e3599a2dc5fb2d8fa040072dc8c1f2f96ca659dd0d267896f0bbfba72850ddf198c3cc54d7d07cd3cd8bb9e44973e1712be50870b341121ead1c3aaabb8d275a9e71191030c4741439aeaac421d2ad646cb32cf6e5baa2b501a80b1e03be858946ea16fc5b57a1b597316069fc6ec567a1791dcc2f03a8ee70d7d38d7b5576e224b73c55c20a943c48bc613223c8b7df6cdf816ce9aca34f8d342a559cf28a19da310fc91f4dca0cc09823b95240f350113ece55c026004ca9357622e3162d74ba1fe7d2ad9191cbb16d2e6be298165e411f7b132cf07 +MD = 3844eff6b7cc4eb3daab90181ccb8947842e8c702858e59089f96dd95600b866ae647f9cd9213d726b4fca636e6166a2088e2be0c27154c28732faf360e30e8a + +Len = 58840 +Msg = 7caec9d15fb000b65233a196a792aa486deec990e7d172e53d112e7770f8367093a1407a39a599822af874bc5a0d82e81b41c2d391769b2066fe2848c0bcd3e07085251b6dccdc8f807f3e3c402caeca41687d12897102e04312edf7b8c7d8567a221fbae26df264bd91a81c43375676492ca154b70ad0ac3b15268c3f636e5b1940d76182d0028a4af65a664a75a4759955d6a203892d0db6ce7a0d3fd6bd76b5a6f417343d35878d76fb223c2fbe4e9babc6035535408a1c0692849f69ec2fb61d1fe5e0fbb3e5f0d8335603adcc89b5f6177f955732abd68515f84764230e856d00d16e53a32bdae6ac0c8637f7af51fd711eab372af84a13ac721e0f8c9c885e3ee6c78d2de2b3660b4bad156647d6897de97f1d51fae178fff90eb14c6028b78229d1f17b91e221fb1c608e43d9ac62e2e7f951cf38037bb595ff948ee2cd4273a475c6b2c0d1df228587ebb3ed3b504920021acb3a19e6764ed7fe78abe0c5ba5e9c56fdf8e76828910a75e00cea1b5a9d80c26d89897fec2d7f383242c709fe5f2ce782bf8c83b645d171f2bd238abc655d8fdfacbd0fbd39df8ae52fecd6e8b00fc269a028fa74abc52a11894e6618807fca462b1b5d917bdf3bb9fbb5f420582b2fdb20239309cacce763f7d17715f7d0bacd8f0d3311f96895d52d8c2a4d5f6a7500c9e6171eaacfef138f15855cd136a9995ffa57e4bd60de624dd84117ceb2deff22d74d5a54b78b47d9825894169bddd5234a92b3cfb15f87e4010228acedb000b35fff66cf6a03285e81b766cfe69fa76464ac263541606d796f32250102342d05e7f3e923d29fdda5786c7a03ff3737a8b26de4f9fa293b94899cb9d5d9b2ac9fd5f28c59d6a78e36d03d77baceedae7a9b9d9623c2011abdb9078a315a72a50992c4f7785d62659af2f306fc3a09345f8703e3b98332327d673a401c6dbb41cc8731d188511987584456ced22dd2f0e1de6874c52402aa5bf9fe849ffad7a76f1b01c29299141ff8302d78438f910b870994f04e8dbaabe0d81bfec1e90c017ab5fb749c1d9b53031d42ab58468fadd96e4f005da6a15c926c59558a22a37476bfe98cb1c5f64b00735b10183b11fc6076614cf95701e6fc1d8031028de32aeaa091b5d6796c307799414e8b566223a389917b2a882070a354573c3213164b5ec0bb951521462af0f9bc0eb980c9482b10a836f82148231177a71b219a82fe5a8731d475a5cd60f4fa93f8ab9f8d947e716f246c0abf27cdf03879d70b716c675dba1bffed46fb0a0490b3689cf72e2616abee8d2bcda35f25d2fc5d4f29bd0caa1d12b9e1fc22bb7f79e8f8604f3eab65273b646cbcbf50803d4cba4cf318d2d62360ad6a36fe8ed3173e64d2ddee93c8aab4f7b6d2a526674012f6ec16a5404994ade36e3bb70b69325eb3d9e86468a6fb0150ef597a6c44a5f61a16dc8ede6b38a361d65474baa792efed5fbac8b167e3c977019769a77e329f2db28bf834a5d6e8318bc95d24f6fe9a1b4b9943f7722ab472d2d597617db0b637a76c0dcb5d38245b74e29cd0bf3f074385cefdc131986c4b4c5a2f21a9e6e241dfc7f52afc2400e578e75646681ddd70f4a01d970bf4960a567057706a9ecc5141e4d8d9eb6323d9811fb60f5b60c5a78259cb016808ddb5d75d37d5289e1c72b50add6191bd373e76d3e1b2fed066f216403188b09ae656b96af9d84baf79a923822c4955f9e11d3e4b02b7bb356958989c74b34c735cf4e3dfc2013b998b007395ee19a1e1cb7dc3cf3fa7f95675e2f1b6bf0ba25be5983d04bdd96024fb7e8d884b5adc3b9d66eca7c0091ffc339607d638171b1a2949af200fe72318712b5aa66a936dd0fee1a11aae6597ef4a7ec343075f1f77d20f217de3b3ea3c9410c036744cbe6897f4ca713144c8f763a20d47556b173b85f27b615fc61e590d34a87f900d36cb10aa50f5702c1adc2608ce284ac4692eecfba515aba7283783a0fbcae75f3dc0100819eb94a8f5653abaec2f0df17f18af3187e1f0de6e9e9f5a9f5fa1c93b103f180e9ec43dc15c48c051a4c77ac0c1769d0a0c56f45a56096c7e86e5d4988347e117552975e687f720e3cf9fe893f1e84514e00470532668dd7f87db06bde1cd6b1d57ebd7ccaef0e48cf7bec1626fad338ea323dac0d865b689a9acea10f27cbf06ed31ebdc9bdb1433664b9094046e6f619edabb0b32a7fe86368005fa7ef9e4bc5f233a7c155fb6c0626fda9178d3ff7319529a9bfdd7bd5d747ee1e44cefe225f5eb4b15e324d41a345229c09383edae5cb2ffd8009cfcf6accf05342504c22bf7aea610ced3752b241b048b1c2741f9ae23722a059fc239259af954d1e08bb5ac97d4d39e14a2da79f3f459dd66013b59cd7cf9d287170e290846aa182c45aa5dcb5cc81b8e620f7d0180939ce9375ea3d7a4ad31fd035dfe4173a0c290f8f45275c6560ceabdb2766e309f2257ea49d56a73aee7a98f0eed6c089c96b3ad7ad3bb9be43bcfbbacad618ce6375923e436ad7065bf32c2093eb28d085d3e6c2428c562dc6ee665e36a031dd0a297e91710c923388041a536393a8b4bdfd83bda98bca3a56ed7c240f57b6ac62db844caa9e51490f17d3e7d262d8acde42a24846cc8e7a70349daab95f2fb2e9e653ce54b2accd6dc8f97c74cb210f634dc2e0aed10b44af4e4b60d93905971be45da503cc0d270071eb8faf4f2a72e9695615460bd95f60b515d4c377c0bf8550125f4c4ceaec83ad3a7006614d6ddd4fdc64b10f60f130e38d752c9df992a2b4026b72d7ce9443f566ebfea41266bb4bd64d544e4ac09c6402d0591e08c6e07abe382bdf40a4edd4e1521c8a11d40ff7d44db43aff340fb12664fd7a86b2eb3e9663ebe5b994ddb63a20d475b45c47ce46c46567e6c2175568a17e25ebed1f5a3b7d176dc1ea9023e1f6ab0982660f59be6fcc579a012fbb3a245fb2b0ebf9681dc252e9c22c91a8793224b7f467a304abae7d8ca167c57d1b5c06a37e15f5e2adf202dc62d17ebe5071c60392f7cf798eeeed79656c84f59cb7277a9c21b1447c7acbd80c5fa3c01824037ed69cc102d8cf80908e95cacf3ec426aaa365a827f9db024f274dad6830c7618c47ad443b29befb74556a2354621188a61c7856e7b6813ab46c1208212ada64ae6ecfa5acf24ba29782500b4fb71dc20f7fc02a1e330bf9aa1343206566eb8167a47a81b2b2e41a7c7dfe0efb9e57674935d3ae35efe9b392d56792af95694c4a81145506fc16c795a0ba9b02984cfce5e7395fb94d98fcf12ae5db8a06e239c9ad439bf42e523e65a31c3bdf356cd7680c57cb32ec983a678c54776f5bd4be57517eb314da34e37efda96debe6359b320dc55d1d4d65f0486219d2ea04bf5e96463c56d3802d5b5408d8add32b45ccf663e891e2d090b32644cc8a649200aee8d3f2e3daa0ba0a576d20781f850bc107b758162e26970783bce31a79745703d18338e674bc59752b8317591b83f63bf8709a4659afe741d332d3ff832c1111e2ec74eb4c438a3032f333cd6198a3723b18059eefed1006b73f35963c39cd3d8f784d4ecbd6caaff035fc418c438228622640ac7b6e9fda824a7e9aef2dea0b59af189d7dd6a958f5b3d751e61510b2e023c1eb6694f511d6dd256a266905ffb3f97d53ccd394dfb5f56b8b297ded9647891fd84bf09e61277fb0807c8baf8f310fc21e535e1b98b3931f39a0ee57670acea0ff96221a2cf69aa67a5bf6252e532aad398bb6bc0870e57909f6f71c99ac7cfbbdcf79e6f9b6c68db43f4925719d029551e0ade4c36094ef5896287ba2af1c86cf7298934c0a8bbccab0e51eed610ff0d3fc84244e14fa08c208e313167515e87109de9d984442ea2a3b6a8ff661ab665c29e9f8fd00bd4bb2c9c76169b101875f0fec645306946c5f4949d730f17d6c37133fe174b6373ec74335f510c557f9e5ff229620b3e8d9d664f3b301a2fe591123066c39a7f0486c1fcf2cb0249196a242119175fec8a93c090871fcf896d366e3ce07b04880ff1db9f396ac714714209359e4c729ac50dccfe8b28754ef51a4d007327d2a61d948ac33c17a2dd0c8cd4d3c0e98e71c77450424e3455a506a5772327b04d00b5d9961002bbdacc74b14ea588d7f99917311503d829b8b7273fb34e04fcbabf5f27c630933cb80b301a3f53fdfcfb393daae3ea32f1e4ace050ca2913f4640aa3e7e3c8f78484bfc82e6f852741de79c249819f637222abb940855b5b80920a0a7fb58336798613c454a5e20f8ee8822d75b9c97396b9dc3b77aa8de4898be71b5804065905052dadf6ab12bccc637c069551106b43f368ed5e0166b7f598c85fda98fc680f4b350b7b47be36e1958fd613121e52631677575b548fdbae01d55c6d390b697e9e54644b428e86b7c7e12356c49830dd6b3002d769af589a0e389c7aaedb663c47b142ce6329b335409d78c62f290d993abc753b096f37a30716a767c01566308d762c6c7438c5424ae95acb1a77f27fcb4338edfc777fb0339a039e37617242bac8ab8d3b62c5c82bed53cd4f2ae67765ecd4570a6e38a8dbe93a85db66915a15d146998250baae2cd3ea3494ebf26951dfd0dffbfd6b75472ed48673cdcb60e5b985f80fa9acdc95c0a868b2621d3dd845b4ef96cb1ffebf8f5708c93d283c73a8f012aa16a439aede13d171366fdb404609eea4815c2b8b344d73a35fb1d707c5104f1d3fa8afbe55b5d8980ff02bd1095644edc62ae4f2463d2ecadb6d17e8386c182fcbc3250f4d16e3f197a916d5b72358394392113dedb0a3065865e5602a8cd3a763fa84e7edbc5c4273a1829277f994509f9b9ab5502d391e7e9f2ab5c3f9ea4eae57b28f5d31a9544ee05951725e5ffa834e679f983c58dcf725cc302a3ac3ec55e1984fc6fd34efce6f815acfdd21fe97b16146ec65680668ffb51988d7c849ffa01e6e50a663da9b55e4f5b7fb432582cf6ef17531d1657c33cbb804595f2c559d2d3622b6a0df5e9a686a52422b37edad77e75b27fcc1d9cbf854c747f25efedfabed65b552c4bf47f700c73942fc7f556571c5d04fe227ce2237f829e8a8a36e82dc4029e052656378013f68f03be1ce1ed7dbb2338f0f4533a7c088a9d0ec53984bdc9cb451f9f6d2b3e1589ebeba208c61c7571192383712ed47ea9d9e8095d782609535892209ef5fd690b24bb3549657ae474fb14caca751b4da2cdc083c25c8f59dcbc289a2b64c459896ab74702300bb0857b5f0adda1a2fddbe502b516c67c33bdec3d6cc0fc457f9b0a6a47f1da513248f65ce409392e27dbbc392db93a5f1f7d655b08ce20d343a6a03eb866b8ee123618b8e70bafff3418bfee5e282cba8591c40bfec177003e32b8cf38ff5034b8b34edd84237aa8ab196c6cb6f21200fea164cacf39735ed7d5a0761a1a34c79e66f5552c0f2dbd05644e6ec8858ee4f312d401fa948a4198f613de0c55db094bb7c89a7f1d4daecb7fe24f1380f7b8fb6c9e6bf171305afa1a7f616020b78c493c2517dddc3ee075d2a4a82842e11f80253043544e09fd93b94f9ab6095ed30f5a9777d8da86049ce321e46769df6b29c3163283998bbbde6901048e7e354016999c14e086c78d9947c69e6154472e40ccdcb41fc21a18329030195a0ddf85e77faf99856f57ee03772f209690bcfb6db8e0428976599548d559539926c2070a834e505802dba853d7a83587bdb535190dbd584114beb5899ee94ddc576135f83af4e3b8dfb74f130fee27b529a48ddb31e07fe73badeb6d537c62842e41a5291d4fbe28546f34b9765d819f632f481cdbe623dc49cbb97c996f3c3109f7d715809b6a371f880bcfb172dda7089a0666523aeea0cd8ca22fe74e255378e84e562b7452658f8636ce37ca968c78993b403b5b3ac54565380fb3a5c87c09877d637477112422ee482d7fc1468031917922fdc392ca3fe9ed8484e2901b2a79d6b5d1f020f37824b275fff35852d2072287200071101b8f3536e1a116a15a23fcd5ea9c0c740dcdf8204edd5654c88ed9f5389e604766c9919f404dc6af270a524c24c73df6424e9bc4d2ebcb06838d01f5bdf9ead0b02d951627651ab50fb17970f6fe202ac42b1fcc32ab20f8a1863cf106af7b3c762fb2341d739d2372add4ecf7cd6d61e1e7f6bec497f29b810eed8fc92b9bfb37447b8178f5c8aafe53e7289da1703c5a19b3153f4eaa8fc08b862a7c0ab78d52104386f068279c114832bc6f16d32a6b14c757d91bd315ee80a94985a9687374f7ccbcea3734774a0f5a00d29a00bcb37dc5ff48abe6fe5982c9657ca4293e1e7f597bed0f69dd16fd9fae6ea77353b1c91183f45b607990066916c767745d9d2b8c7c6f5d523de6a7a60d99cbb59fe46b4c8e62c6ca4820900ad60c8fd4529f60d816f78d680a5791ffb6fa7341e1d9f8c9671a5aaeca9994111b9269b3ad93d3bed3fc2c25c2e850ff32f73aa2d9f0e63ab691a3687159972e602fa1bccef8e8c35c03b60617f74936fa268e52d8c7a7f2f56f2d91ecef2db53c0ab43a475d0467e7a4b7a35a230f3974eefacc7eccd2949be955b59dd8ac4817da1dc6a72edb2f3f45bd6809f9f7794bd6ec9a3c8eea9212b6b84df494b7597c044adc6efcc18b9b6d13eeb7cab678e774f026827c547e024dc1c591a1c35be12fc805ef355c0fb4817771d433b0aac02f820be123a4bae3250ea6e59e44e1efa311bdd8670f1df33934cbffc36a917e8d3eb4f9035fcb2db2fb7c70d8d06de004b47e9b005f58dfeaf8479ad868cf7b1462ac0a99ea415aae14b0b3efea627acb2cc2a7afc122e31d2e6f26012fb73e3bba7bc655d89fe24ce6ee3f41f752087ce724aeb3d91ea54633cd31cc23eb3089928e9cd5af396d35ee8f738d8bdf2180801ee0cb1bae8f0cc4cc3ea7e9ce0a74876efe87e2c053efa80ee1111c4c4e7c640c0e33ed4518c74df6bd12e5f2249305977bfaf7b72ed08007188b2d4bf7d71f8687bcd294cb1c3bc73d9bacda075b9982958d6270569f22e27a4a3330a6172f18ed947ff02e621ad820a0a2f83b34bfdacbddc79e8391ed2b96dcc29cf1b2ff3d907929f9bb3f678406d07ccf28b4e4ea9f6a7b940e5f6b6ceeb1600333412c6f10c98513ea0aae6570997ee16862a54c709212f38f6e0a10f2767fe603382317ff03f5c1336a5bf6ce6a3db172b47d7af003122f5f3465a2328a96d7ea0e7fe2bbb710a43fc50cb2a0d14dc1c030d9f08e2bedca2648faab4f6c293b404a8f39c7615a1f67b11d13685d0394d95e5737bb8b2a365d12359679a9cb92be62fd97b29136a5339519b3b56c13ad369351cb089f4c066c36a2fe61b1d260bcee3776fda53ad83c079efdf89ce27d60766634e5d6c7bcec2ccf4d9812f247b442c972193bcb2ae98ef96ca25de477df8e10efe3d021bc554b16fe7d5b9f9a3d172ff385b38c0fa471d58a532dbe3f1c30de5672f9eea72038169b91ea2eeacfc1d785d3baf20925769fc18b9ac435af051b2323e282efe56a4aaf764d44bbe4e95ca3839071b9c503d4ccac039afdf07173b066f883091d582fa48af3658004e43bd706029f741b8000e64526a6fa891c6498ccca638510983215408b05d9b848d19aeb5fdfca8191a0b8d7427cade16c5a46b5c6a8d697910e6c4762aa1b778dca599426b74fafaf30bee30580aa91c7e144c27bd79ffae8f1240028c6d7ab3992ada0e5ca55ee4f3d62f8de575302d5861d73685423c2e6a6d6fb3be090fbc2a701821b6d8fd5e8233f794b6549cd0bb52b390ac31478307bffa91a9bd9c1bf93ffc846356fef008ebee4bb3ee148e0fb1893d188e4934d0d088a433d14a596c5f2e3e49648a22edc6bdbcc58dc1edbd440046b3a169ca2b68c2f5458c40fded975557524dc97d998c0cefd277cb772bd4c1b263b1d0cc824e508bc837a78fe3b119d86557e288740582eac3f559b4c22873891208a5c23c4bd96ea21aa697b67324c869ccfecbe7f9c8b7814f932bea0abfd4a7ec1135c12705a7bd7d669ecda61b2f48f244cf582f865ef3cda2640c404d9a0aa63cac79aa7e3dffa80e2b9212a915e912dd1b307063e500b7aee78e93c4e3237e4dafcc9be93852e2c7c76c7e74833473f038d88407569254de3ddacbcdb7dabb6cc622c4f1a19d75b9f9c3b32480115fa6acb6331bb890ed5bed56b00f1f17a7c37ae3eb3c7fc8a70b49007a6215681c270134454714e1ca4d7f6c093322c288775277d972dabac1e63f8999d64921f39abeb98132716f33db7b83a0e0c9c3a7b3d746563cba5d0a7164c7d82724242c276cacb085d721702d6a023bbf1b024c9d8fb92a422898ccd53f2201fdae590ff892779ae74fdfc86cd453a3772067bf5d04361c2b2b534d395903da02f0a9e432b8810701df9185c03fdda0b1e0db471cbe26f59fcc76d7c638d02ddcf1faf2006732bf7b921fed503508fa1564442d0244f27d4812eab0a366f3c033b936828825f289fc6d7249453d3c784ab38cba361d007ccb059520fa6bd25bb05143dcf27d292f2c7a70e0c6e0e1e3f9d59933e1d4babad3ad6071f0cdd7c8fac00b4867f43f77b4c002fcfca45f03c9d355e32aee87fe061333e9af1668ceba0e740e0f149c2a3c4711e30f141fa063b4a6113af5ce120c3ef7d25fcdef34984468751164a9106b1883de26b587826e8076043871f9bc8e369272277bd3c33b69cec6956cccf0ea3a423569110070933fac054de86fc53404ee1230a77c434c858d4ac5b56e9360b5343001aff3347afa305ca1e498f5a5aff2f9a2d9527c72a18f46c7c6f8c2769243171617c694cab9ea515becdc138a3f8571a49abd3556c3bb05c327d043d4d85631cfd2e3592c82c22ca489a3e98abd91c05e702538a0f6f9cee26160de218f54c75567b04b475fa034a341553d4e30fd2ff9e6f24bf73f31e84bfb0f5d06bf2721d05e9731c4576cb2819f5ad87da0b1069d818c3703a84b9c287d44862a71b6876740fed44a720eee65281a82c015948d71cb5bc36d3830329e70692336ade94142934ffd82b96e307866fe02bf98900c9e4bc8b9ddf7c6f2d75be5fad179a8968ae2f172133374c0e1e06c2221308cca4b8939dffaeef623fbc620d4a4dfdbd067b24cfca7e909e5c91ecda88fe67110a10e17ff6d24a90f3139827856e66a35008dc862e3e113e958a98a5db0c12526c861cbdfdda1c5fca23d73b090963d0e7efacd6e71257b12b50809092dc99154e70abb48f36e333376595b42faf83da20882c3e6f9bd2aa909c3b474ad069de2279251015792dcfcd416a2f73b13503bc7ab129322af07f57b63f265d9813217af80f4d4b015a79ee4fbb097fcf05f1fe300223d9505f940346f2aa65941363ca85c0b87a7007b63d090edeae495539783065cabfac7ead05c6fc6fdd44e939939af00e3e35a4291bd5dc2b79c0c12ebcf4726a7f8fbc1ef1aeb2d33f2b12f768bff3ab00d2be371d5eb95c8cb5d8663f04ae9f737ab66e3966cc7105c71f41bc5d721b6cc7c464b40c1cfe31a8e95470e970e6460dec0f4f979fc5bba96c8cf10bc1dbcc95453672667d9d131a929de50b7fbb61b9db96c6b9b34deb32995dc9438968cabbbf20cae66195ab7b52971df311ab50fef38911359d75ff030428878d2f4ec1bb90b840045f94555bb7d48e38dd229e5dc26ad1a3b4da719b6b71ce5139fa5c1578615458ce05cb2c20dab83548ad9446c6906a7c9fe7ed5c0dcdf0281007f449c4b08a5c4366577d2c1e2e70dac8ed5a8eae4e38c53abcc58991bf8a67d414d9142a5477462294bf3813438409f1040979191f60bb2f8a785d616ee0a7fb5833c54335424ce70d72e35eb9e75cb272c41475407ce842b0e507b1a0d336fa18fa767fcf35ce102c28ac54d4035989b41aff2743e5e320da8bf706d7cabb3ce18da64464da503a6b51019a347076e3328e87b3ac44222661edd9d5764fab504c7db345a8a869c2658c71934da74b5b889f4cbeec102befe17afea22eda6db0a44b4bd80d188144852b7ae4a2203d5f30bdcc9d85c276d9c3c3f40143e398faa366de9ff4a31d4d54ce8be2b473c36a957a75c3fbe38960a35948577803b38aa450c9f211e0c4294ed63322070a740a5155d6e6d0fbda30ea9b6a391da323dd31a9bc72c759ec74fde2ff371c5cd5caeec07e6a8763ffb7141ae80ab75a808ed5d2148697671ccccc654e8666f35f08b84acab391b4506faa483060c792400c0b6a70c204a0cb7d44edbf847966766058654a76827572c737a3d1bfe0d2f8d13cb34fa9918f7f12f1ecb0d5b61ec24e49a07c17cc2fdd5a26de5a9c7595017b047d0fa1b09bbe3a5dd2c0eebf94b94f067cee1bf13c0695123 +MD = 6064b25061c48d401846b922a6f28cf06001e0e9210a759b66b4cc6315b18a0bac5667e3edd91563ea3dc002c732d1b93857ffbee08e12939971704348edad9e + +Len = 59632 +Msg = 929548adf1febc8414d7aa90ac20dffd8090094f57e4bf541878c256301483943408e5f4c77b43f2bf00b5dc836a8f41b7e22ba71c36e97cb174734f1fb8464053426eb56dcb904fd9192e1dbbd2270f918e7dad142f5b085e7557f152cdf46a396a6b5aa997ab85ab4c9eba1cffae4e54bc88ca06781fe167a3f4a593fc96fa2ca9644a44879a7a7dbf8c1d6e9a2ce84996d266bbb93ded1425d5d1a8ed32d77527e2ed06426718979a80ad794aaac4b841e5eafc99bb16ad247fdf5a47d3eb5c0b6cabb6711a45400602d205b82ecae9e849bc8fc0a34379c77c3571b27e1d287e8bec1ebbb9ebc12b9bf4d98bc3e223b184463cd7fd5cc137523db5d83d5523a7c61804c94ef16230d27bbe6c6ef4b0c420efcd86cf48cd9b8c5dee5e177b93afa5973142e03f6b3d30d07c0339e8d64aa51e087423f1e51cafffe3ef1578c1bdb0d16dcf78bd247c3c59dbf72ba6de6b993db74a003e51e2458a5d313d32f5fa702f7f181d53d5137e7fa3f14c17104e86b3a0af6f175814d66624cc9992778d6c1731c4d7e9c52a7eaa9b98a521b31cf3e88c4c766444dae8fa006931808e9f2cf2497cae673deac5438c953dad11fc694442c9200d5b5d05b0b9b00be58358392990e7abb5857adab03e8f1da470176f2f8ccd72fbe6c5b4ef164831a79edf1a22ceaed5bbe503455b792f4bec19958d11300076142c3a7e20e0daabb0275d5747cb783562a5ad8faa051dd16f549d4b52f70b334177e3e9a9df0d7fe666f979ff4eeed1900c9f3f07a900b7136857325aa996b16b0de87ff3db8ab733a3dc07b121b8b32e6302ddd92e8003c29fecc9910e48f9783772c8669cf85b7e252d89c70a7de325f2fdf1885d46bf633f849860edca12523da94b6ae90071af351588a8d2e5675b01b9047cfcfaf2de9146282d10c304df67b490688c4a03ad1bbc8bbc419a49bad85e9d1cd344a51bdd5b00613ddcd809fdbb1fc64b7d18621f491a6b1e419129bf1345d2accadf016beba9653dbd95b646e881eeef41b9b589e5bd1d3385458ffd0083064d37a87a821da9a0d80d43d08b613d464040ed8ea0b7fd3a460b6fd6db4edf1e7f31086e6b198a79d575eb3e144edb38051fbcd5ade8612a207e16e5a125e1830a6008c36f08d35afe9c93e829d8e32b08892e72f89f7255898443a497ac129db66eaf62d4120daa192b46b61227de870f244c4ec905b62448c5fdfb040cf9d44b000633e25ebfd0efc90990166254b3e3981d4f6842b7fd27eb4cd2326c1f9190c1131ee3157136481fe65e7fb1cb194c8ea95e1c7dfd49ec9b381167f50a3a4e56e00c1d5eac43ecd4e408933dcd2011aef9642fde0e71607fcaa0eccf44394d6a75e3d962f65fa2910b769b2ee130fc9f1447e78e74db4b3f0967092155f455a3d88d5f48daf233fe6491deac90b1d30a02f18db5b7f17583fe4f0513c3d52ea913f0f739dd6468c2f63fa6de600b5f96cc48687a5d1aa5f2af3e2acf18429f252ef6e95d891e0786ca6939ecdba768ec7936c206f0bda534261dbe7adba572bf2f867cdb6586d8f1e6f8e0ff89ebb6b311a2e181f8443bf26bd50a3f95656d1e2087fadcf905a5ac54d2e33ff14010949d730e12fb1630d4844c5644cdea59eb08e3a987ce04345e1ce18ad39b0f3f37249391e1839b4b817b6ceab10b9cfdcdf081d2056be94eb0440b1de30fbe0c43aee9b217173b56a2581c0dafd8e3236ddf49bc7d581dbb4ad63ae399d6b73c61445db9dc405e17de21430866ba279172dd23b1181e0943d3d955251b77609a38ecd7ed57846c58dee0cb23fd3bd01085f3f7f7fe4414aef456442b917a23ed71b03f98b16ecddf499c9ba69ce346684e27add75652a5c35454ef3d246867fcb3987d001183e974c85e9bd96d39f16174832d9948d1264b9cdb3ea3fbc79390a7ab7a6da04d29e1032db30495c53ac3a00f5f85fe48fe0f73f419a440221171f4f11c298653f3eda111cb6e3f0f875579d22ce39d3f95d482a5688a18fe486743724c7bea1db05f4b12cb6091a041e0a8d47afa503e536570f8139bade5a03a3c37f3aaf434c900a8399b22b3ffd12cd41d33133dcea089e6f50220275e81b18647f7ffce1fa498618d24fcceb49d01a6b63d768c76e4078ca31d60aef25396caaa42c29d66abef1d164c360a480f27c6a6826b66bf87a8090a4da568277eafaf69ba3b8c9245cc85ddfc178e428e65dbf5e83af330f1340632783580886ac5de8b49b1c02ad9f840e91de8832a81858dab592a5a518a732a2487591c9a809ffe18d66e64b6d13cf74395f21089524d86d1bc84c4aabb2c1ee7635965e72607b81948b89ebe945e52f14e7a5ee568866b6ff89158c4ea298983f27d82f6c5c3b49589d896cb8a26f8fd2ecb95c92bf8e78bf7963f26813014011e0d9b4fc69c9994801676641b5e926e1f2cdcba036aa02fa0dea058e60a6768ce50da7b8f5a101e15b96312afccc74d08e45b4258a53e62dbb0a4e3837f29c0ea8f65018ac5c03c300b875cae3a40a1d03c3be892726a2d9053724ebe560211591264691ea452f5b9520aca806ea572617ca4341997cc96a710342101599c640521003cb2c16d5298d714e48d309dc9a2ecbdaf56dc0ba8092f0fe5b34e9cc0d5046000b0e2ba59b6e2cb333e4ad0ad7bd3afe0af0bcf689cf82d213bfead2eb102ae407fd0e014f9ba5a3ef982e726d47ba1508deac2e049b2b65d033175b581650f818753888b4aa9e78d27a28a3c952abc8559438a17f9a7d22172ae9c5d2d73ad4d30325ac592f59ba9317060f8a729280979dccf15921da7f6f03fcb2e9e75b02be237fdcab7e79d197db51261f0c00c64577d3ae3fd5d6063e5aaaa31bab240a405281aa2a3c716657538477f5936901c59f0728823af23f1b9b8e06d6a74833f01ce58563cdd2d1680c3a85bcad5debbe9fc200ceb5a1826d53116ea9701a4843ef160ec6c700bb3051cddfc2ce31bc96e68ec783ca8698d9fddf3b127a3c9fb2559d96f19cad7c46e0c8d6b65a972cc50fd7dd300df3bab808420c9049f1b2d1ccd6ce42d31bad2225b60ae5f6f094ef6837c251e48b90ae1ed443a1440c1a18c17c1558feedc6489d100cf007d08d6cac290767e2b083128e1080d41cde3dfdefd7fc9274964020b3612d5321a98ed338162cf08d053a8bf281449718dab7078484f49dd897a34105141c9dc8fe119998a9a37a47ec0f80c8a0ff68ec93fdbc4c0d8dc99f8488300eb32b2e6250ae564a3dfb73a7f77a879cfa11d7fcac7a8282cc38a43dcf37643cc909837213bd6fd95d956b219a1406cbe73c52cd56c600e55b75bc37ea69641bc0184b9ce9e76ca27311cf49566484f202df67d35558add045d580126876963832d7c5373584c34238f11e83bed4989bd77b85a30acaefdff5d88e61cbe790fe8be8bed5794e0a44f9a3e77525fcb825df714ab109654d60e5ef458a7744eaeb559b670c378bb8075fbaa8724e354a2c85811581b3d05d0fb08a24010d16ea9b0a807c2ff2c64315b5a5d01f7a26e51c540b8499ac948538d049c87a0fc6366a25385cc53d96320ca5d60ce14c4a0f71e581067d462a6c78bfaea139c1eb54f5202387607a741b489afbad4c37072fc99472198132ea694be9192ce4f5eeacb8a5c29a962bd855462f673fd4bce6dc8ffb5f3c59d58d022ee729e9f00e58c4110095f4bad44b76a1bdb9430f60718c3174c8fd7bc06acd9e245156df6da231badb2e2453163605d7d0524550a43fc56abb1fcb4b561c32264b100227a6635c029ffbb8033430795501d2b53d0a99fe7818f4246d3909c633a5e66a5d4b14c984c97f1e3fe0b347a5ccab21490628be0638c6a735dbbbf052df54fde4ce2ef0bde238c55d9e46f7468b5bf7f929548a717507a259a0cb571051ec4b52a22a781a64a95c00bf641eb3e855d7c1d6b5ca665847d43d3a9050e8a80cb12b598fa626db5130bdd683147a4e391f37a0c514317d078b551ba374384c46fdd366d7216fb0b0e1e9763c8f0637765ccf29fafe8f3db75635968d47aba91b5fef5c8970518f58fe1810e8c4e43e8e0efcb4dfcfcc34e7b3536da631af590a75d3ad2f0988c1b9c3ce29207c90bdf0a454d3dc2e74dd093132e3a6c8bfd694ce34db205351e2440170416c1ca8503ecb4c29888105a0ac4e58bad77349ac3ac7675915e4698b9805a2dc341b777fd8d257085d7e1b1a41693935d0d7f9446d0fffc978431c08166eda6c10ffaaa74f681a02d36c11c4591058f72b5d3b29bbf6728ebfe605f25f9b8b737b3f9e6112dae9bb72d1861953e23c614f898bd6a819442b654393c4c41a3a74db51ef27c3c96a64c444f493e24d682695d377e5a1f70911f0f26219f4797c02d9ed0985c2a1f0c1404cc9ce54b04099c6c16ba14a0e25f4fb68dd4c5127a48fcf6769e5900331336f4f82235bc96a5d3ad9e3c400cd1f26ed1d81e67aa3688e5437acd1cc5b905db9d3ba2d37e759b36a937cb856c2794a3e86ec72d18b1c80e0f43ed4d8199282a85fee66a998736efe74a2e8bc7cb8a1684b797be63d5509fe139c6943dbbc54c36a7b4a016b6bd23ef3d2efb25a51ff02c1b56c3938867c142c41f970007236838a0d51dfce977fd4a7a937d8e9d9a596902cbe3b1b4569bb94cc201d2658ca7114f118a5308ada27f6725b80b9b4278c2d4bfc7c4406657ce397578bbbd46314b1e2f8f24faa83d166eab55a3876176bff9fa17d414dc1a09f301a4c4f79a2d6d74f9d376a9adf498f6effb5f493d7ae8da447aea18030ff3e22e2ff4fbd0c300b835ff51fc07ef8c66b75345c91eadc6dd65980c34225b136fc3be54b1301d8b54acbabddbfc577a28cc0560f04e37e06b241a45508029f1008afcea01026096af26adc32ed654eaa3f6b8b5a4143fbeed4aa89a54669f16ff498ec0d48db7aa316b806adddb0d653ffc144eceb7ede9c99fe915281ce509d2c91fde101a484e4242dabbd154ab7264a8c33257806ae869eb86bdb4ea2452e3d2554a9ff13b0a4a7463bcf088559a7ac06a6925b7de4333f6269ae118847a982cd80e675ab966b1cac47723c13464e90db4fc22a47183918872b595ed2c085b9e5132529deaebdf09a5f4534570581a5746f2348e492fea681215b9b2458493f168bc4701f5203dfcad3a665e30fe7366cb5345bf91cfa55fadc236b0f677a7edc4b62dcf028d316a855146519cdf5d01e9273c7d6fec2c35ebc5f22c6868015a0e27ee503bbb241ad541d969de8241f2487701110b0de6b27625d771c2df0800ed1871c9c6317fd5441209ed1b6f85ff914a7cc38eba3b9df3eaccc62d6424a70a909e85cb77a8637acdbc247e2f93f16ca995da207b93c00d1db872d180bd160c975dcb7316098c207adc572c49d18f809b34a0e8d956e16ac585bed5ba3b169c3596e2e5950818de1f50cf5045a9a37628415b0f5becc9b2ea1af2629b076f627331134a7c0fce5bc600d110ac82f3f558a454bc8abe408e945f569faa87e9055816a6ca5485774076d4a89405c349a63445d318ec320ea6cc3c31b56f244b2eed2ee38ca4d2db3438b49b05d8d66b31c30c1f4b0bb1faa19999cdcb72465f84395f11b9f45dc2e01388f18bae22213d0ee2827c6fa4cd27045e700a3c56ebb044927a78cd90f4eb0f38f34d0d0f35721bad42d49e714fe21473639a54bab85916b064f2b5d238fe34ace97480056d7af457a87a22824877d1c0eea242dc8e28b89f184f368c58c18bcd1b278c6c93faa1c6fc96833d8091432e584a8f2335c53149deb6d8241adb1b81d08fbbac6d9d28e48652470cbfd673a3ebbcc2f674d78994fd4f220347f5ecb151d4942dc40893978dd4f856ccee6808ed1d63bf1406c86abf439c91a7b60746e71d9f585fe6eac95b441d8270822a46a798fae5defcf7b26abace3601c77326d892659308dd336136cb3ffa733ac243615210d0975e1e5447db415b1ecf383b6c5d6d47859578476791e5259dbd37e963762ce70ad743379ecf7c66c7775f6beda33fdd9fb8c06336bd976bb5b4911ff42ad794fe0d7045b7be07c1c267efa0a18f64bb1eeb149dea77de3485c6d9cc5d96983f3aa8ac65d9cf6bd2d746f0c1d246634bcad87bddcde940e8d39c16dae7e4f74e8751007f4e2a2f03d0bd6bb6c6f3c4f46b27fd0b253847ef68dd5030d7397c2aadb0727c5cf8dbbb74736667c5bc101dc880a20f3b8f7bb20c328fb678c0b03b746c0d424c61f8618a11ecbc19c9ce30aa8973d1571463978643dc54119e1ae9a42dd6ba668c0d5fdb3e029d09438694d9ed7739c1ef8707a0b73ef2e9fe439d049dd7ccf1a2a21c2fa3b2f2dc52c1b11d52b630c0496f6b2037be784906b1bd5d62176137ca3f004de703a3db1d05ef3e61399c9d4aa429cf6a63ce79deeeb377249e5f7e2d6d73ffb3fe984ecdddb603c10767a119adab75f935ddc1af82e51a8c75b00ff2b3dd0bafa9b97d89ce6e351a287711df1257da8b3c8b69a1f3bd0e41a33a32429aa63a820eefaf7a627f9c16a5b638c35c97c5c981c1b8dbcba11aec30e72e45a93654d535202dc82051005b850a5dee12d2005a0b68f78691fb0835259d4d2268f6214f2435409a904c2991d05dc787bc6f51e8e2666fc9ce329ec38946d5025f4c6999e5172e183bd9df618f96bfb7e2d881180fa565cd09aea53f64c90f0c17a1f35a80ac3f6ca85ee973c99d8da60d745894990b24b9cad7e450be0e4369175e883bfbdebdbb5f45106e865a797bc4ab9d048882f3b69a15259fa0fdb940e7e9f0e46094ee30e9f41cfaceb5cb5f90e51a0fe5f119ecffd02ed4117eb8ba10acf3fcb7b61cf0cdd5d5c0aa96ca79f88a955eb73fdf828370c8961a7989ff190d582c062b8d26934e026821e5bff28402d79906568da1ae5dbb8dc2d675368a76e91b57dd89f8c4c96d9a3c8af2f1bcb6a867da1d6b7007ffcf62117dc288ec4e6c71b1b35a8ee7addcfd026dab9f290ccf703c7cc01816bfccbd0f56b81cc5fdaad81d954711846218397b763223526d165d335bd6c063037945c54aa11ba0eb6bf6a16b97a92450e9f7af8ecea6bf4243d6c8a2f39177349fa33a3fc3ac02807773481d937d4edf16dfa79bc950f9f11f82023960b3d9bb067f761e68f8752495f8179483b68a7769986a86694887e4720ae909654d11fe767f82d0d626803f8f2d18b6af7b6080a8cb0038f7b7f181041585f84987a867b74e653c555fac392bb9526c5ef559629c1f7298bac4c0329c4cdfef568a255d909227492fcb7f7a3245cd9fd94cfc850d3dc78dfc987b5e0457fed7d27e1047cbf4d1e1aa91836a6b78923569a7d151c3cc0701035aaa6c02ddea96068bf28f2e1b6aeb10da4071a0fba818542e612f85753adb1933d6c65f86ac163ad7519c82b0fa4ea7cd3df89775172ee20b33851ce06903844b86d3e2fc4b3db68db8d68e5a8af4b8930265198fe8615d63d0bc51b49c608cc942fb55e4cff5c1d3aca51cc220c48a531722eef122970b61be3dea99d9dc7bd692a67ee94125a4d1b771f28fc7a667360595de42cdba362a876faf392a5e9799ff3c27b1a8b5a8b160a2d96a848295645328b12af2b124e9b2b96a3996cf2a3b102516e40c8c12982fa099fb61405d0489422e5397641dc4c885e14425157ae34eca142b75942db0add4fae965c9073e2f4a1f62c7bb6be3503add00e019d0ba3f91e82eecb4402161a4c4dd9803db3cceaa4a02879e556fd23f2615cec373e86de35c9478d49213d479be7e03d72123edc977d9e1f52290d7fe842cf8fcad946029360522dc6cad8cbcb275ad2d201e150f708fdca81b6de6debfed64aac4e69ec93f2bf1b5161713d366699fee2152cde4fccd809f882f87479eff1cb60107b12d3fabed45d87af128a203df006cea9db0e23bd6c3b1fd42a1eb0b2809ac1f21bbfe301e75fafeac2130eb774d490c0ddbeb80e5fadd00a0556cb88e8a0d5574dd43608d2ec3cace28d7c86ebc00e1a6cddf44b62d556028c9eaaf58206bd234fad7e341567d07dfa45e42cd34d890efef86314f45624463662c978eb510bee879836242d66edc65fd8e029b9f1a4171a7a7edba284ad4d794fc193630424019c40d859997de72ea9a2fb0e0e40f1eb25e0c20ffc0553a0ebc20dd5a784a804e423df34d8017f0f5e509f4a5ebfc4c3c7d7b7324f3cd9b9044618a017770a70f5bdd556678607f0f45e374f19c2cf6976abd8d33abf822e39687c83414fbdde577b352ed690047be2286dbccdfe642498f9a1833cf20f491185a41fa37354956fe8993e93a406f8de5bbcf3e9c7158dc53d9b92d478b3c2234a29a5bc86414ec5825bf62d3682001f448f850bb1661d81d441a28fb81201c51267e5fb0d1652fee4f7f601cc081a4b8f50009241d85c357a1e32cd34cc809d6af930fd5c465a626d17becfd8fbbfd998c8c72bfceeb2768b9bc42b7335d702d05817220843cd969725a0d5e1ff59400d347917570bc8bb8544b708f7d07dabdf0f190795b115020f9c5cc27b658f25394d6702c4d1f78af3a3bc04373edceee388b72c98f0c94b12f632f409d0c9efb95e417cdab3d75b532323abb5d38d428a4f61ff669572c86dcdd41911c3820619f178c41d33e0a3205d8e5df830f74d3fddb9fea3117a005c8da07027a0401ec7917d96e0d49bf8e7bd7c9982c9b37570be1fb8b2f777998ba038b7c0199c803ed8d063ea1861d315cd4eecca104a41d96b13ac3ab9d3ea67b00d4e5f71ffd10c1211998d61eab83707a5d642b71448b66f26479ecb17797d478ea27a5bd297abe7a1c63f539f1ed7f6e1d49100a9d0a424d82953bdcacd28a13d628539cd3a9ac41168946fe78d5505b366198f93903f46a9bfee04566c1687a9fd249e48305531d10f11196c7a4ace7b1960d63a0dc42f0b79e23162ccb35554d0bcebcc1f67ab711839e2967c35bba95cfb57358fff588de5c4b748758b84be9bd2b4c16e4ebb6212734dede98257deaf4da4eebd2d5d91920a289fed0ba0579cfa9bd09376cc348c51dddb68dd2d8b8ecc21fe1bfa98c6fd26e7d199c032b08298e372357c6868f459f4f7609297208a1b50cc02c3b48e95bf87860225b649bb322e1eaacc1a6fd8f035ca774f3f4e1fafd3d128351b68ea188a15ccb8a583c55afe4e89f24cc9b8c912bd035f8054cdfe1db5e2bb47d668d662094ff57b0f2f77b68a596b99f702290e579b6004e5038a80e2d8c2c467907d91e90278c14c681cf94a8fa46c8843a4ab12b5ed377f5ed9bfd060e80b9d0f82ac3d9a9ef2bbedbf390793494eedfbd05b86c95382743e702d171197a7d7246a236f6ef499ee5ed2f85a0aa6bba8a910a21c7c3f906430c25b1f615e03b67db87a06f5f611440a0cb9ba5c692d48ca0a115c150dcbdfc454bc61e6a7b9ab89d2128cd630136d9da0ef911efd3e3edd011bce4a5aaf4767bbd38708013436c76baf79762efacb78442c86c8cf48fb50ba43db7282a52ba94c42e75c070dd8b4d983455c4f41de287ad2f3c07be82ed38a0c1c2422680cf7aa6d0b39059111e09040890f0d83263c997570bc7f9619d3f4e6f8e5b6426bd13ab47b45997872b94469bce50639241344a6760346dd7cb08f670a2dcaeeb8d491dbb0084f3e6bdd5a6149a4b5de584af0d88c4b6e18a817ae0eb862bca77460242531d7732d7d9b46c9b79498dd5352127e2beb51f22c67f5309c3b28073f0286438959c1f018919df5af5b2bc085a74e19cd699ed48a3fe99f2e0d89a8794a2c992f05a810dd4ec487695efb226fe8f83df94ca14a41ee0f8cd6504de5a3958b988b4181fa2c315ef1ae16637d8265a55d281b15cdd420bb9c2dba01695e7327e426b40c2695c7d1c6c628013c6dcbd9e9e24b48c9b146823fbc91308dfa6185fe99c393209a90a17949fa50d9727a0a86a053c6e889edf809db7c57de17ff2a3a5d06b372bb2a527bb213eeff310ebb95fadb2c84ae75916d32d1e3c4379a8939d8e3e99777e3796096eb17f849d861aa5a37c6389f7bc2fc3b4860fac9d2277fa5e1a1f9415a6aaa5106886efd85913636f0407eed7f21195d365bcc4f24997e3c867932b7fdcacb88fc9cbdfc94debc19ab07b208ee1047213230c3480033a81558dbbe3c4bfe369713e18fa7748ece8abea89c824735282fb28c7a44f39a9fc8cf45f65ed3999e1402e33e8ea335c002a19f78ea28e41ec13dcb5bb68d42d7bf6044959023114478301e5522af78430a0a48e190f1c1bd9e3a89d22d2ba0c2619264065098e9ec4c31ef6e0407aaca194f5161273042670f4f2498195d58e267fc00b340c3a7d8087ef2e3933a61c7b8e735720d62eabdacd237f7fba0bfda3b03c736c121cf9a257db55060b621be5168619ec4182f13ef6a408c447469fc4330040b6241c5c53bb4a32eed095f207b596231ebbe842c5f8dcacf9476dbeb28f763ab94922ecba3ca48e9a8b29ea0af20b3e5d4d48e4965a3232c6bf68a0954f04281e +MD = 338a39c789636826a396214578166eb987b5f0b91ccdccf363ec13ad2262ce869fad36cd3eb7f89fea6b8135e2b2b24b9b0a2be7e57db1326c370dd7424e2a85 + +Len = 60424 +Msg = 0468d38487677dca2a631b79c1f0c0e6a11d0ec1064bb190b23f2c5bd775d8a937b729ac8aef34b9203a6efbc73db767efbc97f20c68c7023cf9f3232a7dbefc32f00781c60c6a6a10620ae3d8aa8e85a9586a852f70602be49a4686ec79095f3c39f26b026728c44106779abcdf4f26161810e0370884f2f24aadece410c2b99fba74d208a875b1fd4c3b893b8302347f25106decda3c3fad30b1bddbebf0f4a19d141e9e765a198a5ce0171d3ead962ca6f293168e8ffa5e75d96299b29bf78b075bb78d79dee2315feeab29ba5a3465c43fb97ccc860c4d40ae41e60ccbaaa522cf069c5a09f53a7debaf289c10f672a77e49e73b285bc2bab7c38aa189f53616fa7195c1e33aeddd618ae38fd8c49a7637aa1f837dd0050b7c504c1adcc0880b64613e55759992a8d7a41f39b986275af244ec4d8d535d5a8551f51fcdf3e128933f61bfc6fb7005d665a742bb245f7a387f164161cd14cf5b2c4d5763768a951171c4a7de46d01de5354253e6868bff90c3640600247094854b1c6ba631cb7b666130b3c664fa188c7cb7144395f21083789f457242bace8b142a029e0deb0218756c8e853b361d53a2cf2cd937ded698068fa5c00d39a8f6f13fc554f03451b11742de23b5cc54c30f5244b055957857d5fccff16f37484c49225ccfc4ec91b9ae784ca9b903e6632b0803d1d8601f484dae6a0d4ffad618849c6e176f5ce9b6a2d77f1e2e25fbbb5fb81243a687f3f4d76c1f1d94cb7bdf0975a335dbcc82325a27208afe78ba54112c180ea9521be2d900962728f25e2b4275a530ee8383b44030d6f610454cb5ab2abe3bc709c09abd307636f2b7a9839663191092cb15c5bbb94a694cd3d966937bacd1eaf309a5e9c5674fda6281706d09aadeaeea60ec338c23eb9a6c88f033e789d8f9591f8ac787137cc83a1079302dfea129298bb1106f0a84e25681daf135fd59dc8329d1bd3d1fc4a4887e264598bd61edd0bf9cbb2ba73d0cdaedac372fb25a7bb9500335b136305694f3ff15129026e12723369a88a11d0040f4ef6c9b4de6be43bca796a9fec6c7a6968d08631ff9ed76e006164da12ca7d0bd2af74279028d68944548ee1f90dd068f57875211e1f9041d9498444e73e7d271e542ecdcb8d0720165b348429681fc07e5f8a80ee7ed1a0369863351f9a98d37a9b4601e0f6fa72a903f7e0fdf9ccf26c0c42dc012b100ba0c49e351c7d64a38fcb568e8105250384d545a2d7314c8136f54a9cc6a2efe69054a1cf7e354519b69adcae2c161b452255aa2455ad32ff77a0fe4ddf74a5c38ddf0a5eb570dea8975044fb32c851da19fb91ffe9cbf4cf96a5ca599c2ee61501ba248d42be75d2aaa23bf0359a4d14c43d9990142c26642c6a5b6a8d20356d947cacb5a65ccf1a58f70e27c4ea7197c9922d8f554c3c6f91651ddb32f6f83faeacff7260fa3ef23ac5480c415773d592afda383d8a9b547e3c8e362e21c30dc8b1994e030549fcb8a386083b6fa850a7dd0c353d85e7954b371905cf2f0a5a7b2106a30d1c649c6b0824b62371a39b81a04010c5bc95a4711b6ab4a67d52982e71c40bcf9e3353ba69c0908a2bea08a8a0223566ad2a24882fefed34ab20695b3a5e02fb092ab53f5ec621ffece03a95431f1db0c61978190b24fa0a26e82099d13102ffebbf23624dc1e4c5431aa3c00f83540495e8317c238675877f3e6062ece9964ec46530bbbd20439abd1dd6c17c1b53029b1ac35a0f90ea4d1287ab3ec3e4378811c16fa4338dd8e0b95e46120f33a51b5435b01b35d0b2cb9f5853961cbd510c623832d437571f27d650642a3f58c4bf4fad7a382cd2897364251c015de19d7c144e1c943f1880e07298d37283173c7efbf6a4496af2b8e51f7246f8fddd5727c687af9cb14ea8ab4c9bf6a380eb76dac7b5a0c756cddb811fd476e5732d28cff7594e364465e0d892ee5005af41fe43514f022a96d06be7e3a02e6f543d8cb505578af95efae3f903e4624174b75d5927474afba196e47a0979cfff17aafd779ee6e86e777a0cad0e22cfcf67c7fe7c9812eda2ed7dcfc80fc5fe0d43e1e59822abd90e146fd535103ddb07fed06c3e42565cc8f111a84255291b226f6eef971efaff40bc48c851c87a2693a07d110ea4663ac642eee89977f7b9c6d0ce75e50278adbed5a17053858c34fb032aa77e4ce6ea3369621b0df6d65c733e7d13126b9976c106e647ead5c888968d757a0d9a4cfd98cb07ba30402965affef7419fc8d1ed0fb6a3d96847d3940ea5ca132d1b0ce75eee6c30a0e28587e5a8c98bfd98b672e36b468f5c4a11d9bbf2b50d6d5dab2a0e49fc38c06c6f15bcb2604cac59bb9af4ab6ad4475b27dc36eaa2c33eb0ac581f74441d2f3c4aa18da2581e3c9a55e7bbed6d62b9f97a1df7f43fcf21e284d41ae3b0684dd09cbde0ff1d7b2eb919cb91a7ea9514b38d1187b5d8aba731c930792edda49cc7f9cd4f3f2cede3547bc91e715f05f817d5596e95f9c34f4cedffc2ac284c9c90d65230d912d10afaf052cab0371fc474e748051b3fb07a8277947fe23ceaddb9b6df2e534beef60b2c1b2f1aff5d1a79378fe3bc06fdc970da81296767e9d0b12fd6a044547245036364b3e834386a834a73a30eec05bca69b5827b245d4060585db3f12a91568724ae1d1ce625c252194a59b7a5b52b4824e8c13496333fe256d5f4344d642e0e656f531240612dae2ba886594d17f5192489f74933c84199f4ad5556148854ecdfc113a9fac070c3500be79d4eae604653e04b4262e3ef8e1b2cffdee9c46f297cee85677a0a339a71b9a40b114215d69835e6a88d4ef1c8b19b1a5433e127ce233dd3d729071d3977fbe62bfc9bbbd1dacff0031bcfee4f9f42cd4159a826e1bcf5227e6f7ed7aa4819d5867880fb4003f790d9742f8f2cce69412cc5de116d2e5f9de6b53909f5ce5b98a3eebb7d2afaf5eeb400357b6625589e9dde4e937763c3699661fe5a20ef09580ac412e897a711331b26ab5a058b560b1c0cbf52094269b116dd967235956a3c44644ee58ff29387975157d612eaadb032b7f8f62ab3989bef8fc9fa3ba7c76dd834371b1bc3c211afe603959329a3b66647c228e39e994fa8e15e9a3b0d68124e9e94334202e7faeb4e753f933081454124e5903bebb5f6c93a1ff93caf95542f082fd40d974a69d3f1767d17e78f844ab729d53a8331b8da01d2c04675965b02dccea7826a3387f037cdf72936149c0966569fe84c58bc64a040966147b24e4f813a53ac64ea7cc9894454d0055ab5069a33984e2f712bef7e3124960d33559f5f3b81906bb66fe64da13c153ca7f5cabc89667314c32c01036d12ecaf5f9a78de98d93868e188d0edad59fec34487dc3220b15fe497e82497bb076c157f4265661b02ab44b1f10ecf305096827991c466c0221b853587dfa2e4ab1d27da78eb5f8aa5f1e56fcf285df2cce2618d3c0bbe3160aee1e530ba8cb1a707ceba629431ae691335624da7fdba73ec49caaf38a43a1420dfef0b3ebde7a332f06528e7444ff7181bd490121951edbb207613d37fa5e67a669a41f29e5146a77624f36c0135f6087e0bc3f11880e357d0da8f64b7387dc36030fa5f95b6396d493febacce270feb48500ccd620dfdc93f3e4c74b4bc8203b4f75d0b0bdd248c4ffe372e14eeeaca60eb932c5fc0e21857e9718addf89c424a389380698fad0d72a9007a3c522eacae24819977633b4cfe25272f9cb674890a3ac34615947ff799876d19ac1b849a1a43fe9912bcaf6e1e3896ea58bcb2dfdc4716e379b44052ace1a792ce11939b8c8f31b69895e7849e6be5437ad3fd4da8a5b4e1fbb7992692ffd56d09fc04b7ec51437771b48a9966063dc268c3fdda569dc4c80564317c35292033c4a37ef622d25c6405e141b25e51c5f08b545b8ece776f1efe84b15b7ca7b06b69cfaa611657a206bce6b4d96e94a6544b4ebf71f87bdc6d4edfc0cc4fc0ac9d5f482fffb12b40e4ff8a8a157e1607771178d08cbcf1343c5c3d07d696be3c520ed6b7d9d9955c8734946c6f762011df439b37e603209e1492662d8139e78a10de41e7f577dc1f75c5cd01ed3efaeb164b7f9c87b351437c5721dbd52184bb623750695d7449b03818fdf29abeecbfa48feca578b6cc4afc1338b9db34dcfacd81cde519b624375897ece67bdf3eb20f79aafdc0f2d9dc1c2f716e9a5b396ddb247e022f27b5de5ba861869a8737eee16f804a6751c021651195a31a7fe13c13882b69a9ae43cbcbb5257afe9f209ba1db383576bac8405e226cff64861d90fd159ec28e3218262f250169af1041e0d8249865f4143a6290cabd2b7f5a359122349eb4e79d7a181060bafbb6c0e2e60db26983e9495eae817252ce73e17166094bf2e7bbd6b2c9f5ce1bd91a994bd5c8ed72365e407c4dbb80f191490519383bc4630412c5076066d7ebabe382c4d4923d7d2759e1dc66c65e631c08ac742e3e05b9b3f552c305ebe3f1181962940bf10a50fde514c62228726f16b8c0cb719c78bc9b6a652ce20d5af6c9c52304a36fbcb56107c181a96b26df2862286628dc8333657ce68c1c53a4c266efac5cc494bb71fbc9d0562216e17af90dcc8d7c8790e8b830bd29de46291d969de5e495e76f4f7232298db5b20a0732c19488952406a13d90d24c4e6c51cf01d9b6e33ff041166f4ab56e8cc60b4f7a86689e9a3b4d279ca30d3c9450859f50aa07a3e937978d991a5a40ccda4b1a7a653019b355cd427c715743d9772b572b19c06abc45da7e99a9014da077322fd965d43f0af9edb9850396a7456badbd392cc981e0a173af160093db2e242858408f3c59c4af18566060b4b1ffb3719a23ed0a307cd3c8e8b925f6339e69955b57e951ae0cffb3dfb59097a930d7e1b590646cbeb96443f32a22149d19cee101c57ef9880872271d2b9c29d7ff5f63d82998d575bedb4b9710ffd360c7dc741233531d2de08fdcd86b8b508295d461c996912e9bb4c0479b13c21dc6cf1ab7564872a6e6bdde3ad81d65f6f419be42517e576079c29ca1c8dc75d91559101095ade27afbc7e8aae4e8330273b4a36e388af3525711f5c0e6131fef968f47e89609ab83b4253492c674fc5c488e0d4d46616ceb7dc8560cbd60c946919746a82205d6a759004b5b446ac8ecbbce834743abca15321044ed14697ac84e9995b6014969d0317fb36e27729f9a139d8ec4f61215b7bf1149cbb4d93a5c14bebd7cfb7c6fe585cbf63136338a4e9a22b52c283c56b86cf2ec0e665611ea2d2d4560d746edce9d0b9b0e3b5690f0968680e7a1d1950281dcb61ef088085bdf0fb5cc5f51ed73c1682b6cfc82ba6850f0775d297ad87c46f62d641a192695738c9627594276bc390a2db343600f9e108923f688df290e0369db46aeae748131cb6fd98ec491914c18294ad698977a1e780b1b85a78fa0ff5c482d72f2f80760f5c84ac67d45da44baa89b7dd15ae5c1e6b732ea7a131a83f8fa82308abc10493129e2c9159a7f671a310d02b361c542fbb0a57d02bb64d7647babae21c88235a81b095e359868fe5d4c082ce8b304e9de7dda07e4916743c95312b55d22476a8225274f85487d50ae81f4c2155888feb8a63b4fcb9d090f4f081d0ce6d44531e6d0a462acb1a7a733593a8de5593bc9b0b42e1f5de633821d24367d65e666d1fca3e86053dbcc49145b4055fdbd0392ef2e1d3d4274cee55c2fc4ce825e9094ed265b1021cfd57f7a106fe1088ccaa09d9c6f72234fc08033af2fc8e446adc0e1e1653cbf94ab918dfe2ffbacce773ce1868c86a880f39bcb2ede3334a5a49eff5d6faad43234c774afe969918cf2aee375dc41780e4d7e4c333bd719845d767021df2309b25a6958ab03f460ce233eccf1c76b3c01b871dd47ad7b3ceac0905cb51f6f061b04be6078e764c19af234c480b5cb9b611bbba6f19ce944dfb533eaa2955672751a0fb5a0fb815bfa47d7f2ac0e2a3e375da5d0b970e7da6c24a8426faba0f5c983a47eaba913d7f50a707ffc3a50cc8a68778327923ea697f5388da4c814381e29c5e41f58e1dc93234792f8a105ee632379e6c468b64f6a1028f3ca537ce37cf3ba0f866fb413dd7aa45429ab114cc976f222175b167eed5dc39b68b69e9eebc9ca2667585424daf7cfed16c13b8dc4492c5ea8d428da27c550ae0658420f74933f514b7a89b693830f8448494c5a5c846dc30039b20c202e16532ca132e11e395fbab93d1b710e04ae4145ad0d5a9a10fe79a6f37dbbe0825eb363f935baf2a473863909d1ff5564f24d9753433685d327a7226b519070a770f532c81243f6bac2e053467405708924d0c5a5b99526b62f76fd08f533d787944322769223346496ee905ccc2e655d8bf15809362083a1600dbe31334b1d0812c2ba6b7d02b48b35d877b4a11f3ec671d9d7e9817fa67d0095ed50d1804b14319c82109b8a7d15e8c791b4bb8303ae1cb0caac63599730583513cc987c67923bf902cbb36196ecf7e364c5e200bafcd59dbabaa4565ca4b016b70d50e47c697600c3058f2f0af6aa537a50dd3e6d98e4c82e7b0c1fffbf505f617bc1638f832bda4c27f59dde1d49405bbb75e62369915aae57625c886b7f39997eb29faac7a1ae2597ae521c471bd18d6f72a0e559247bc2b670b4fd8f86cce87eed40d41d22a5d7bf82f7cc5e692f9ad59c13ba4fe452f300fcd06813ad3fd5e338ef166df4e7e9063834f4497b810a54bae8aa341b08c89dcf58d0de3cbae9155c54779f609be3d39ab09ef099f0635396c7bdee0fc4caf5b1f33eda7b67aa7c2116ff9caeea4e906e14d13b0ba42f3cf656fc6608af7f706a49b9eeb26ca2804eddb64a26fbb0a47d07961218c4f576a3406e8450f17177c103490228f1598aad53a59210f794778f32f45d0a783e69652b1b312eb128707fc9f6ff261f5600041ed35cb3057f716c3df30427ea917d03c00c53e9172bc56c42c9cbf41d214c1ce64891584efbfadbcf9befb83f761a47a648d3ca4d02dc5017c94fda1442d4bd540d1747f98f7aa590f50704a275a8f785d79a1978351ff3f0ff73202c4102ae0f29d8c82fc459922a08325539178fdc07c28f1ec34cf41d7371200d8ca73db9c0a4bb231820ff6a42dc59f12ce337bed210992054d0c5954b293cea5dfceca40f87a79fdb2dd4f5837a6521a46209658ec9a2695349f9241e2fb0ffc6c67938a3d98685a17341fb92e93c2dc91a6b98e4f6913fe93df89295896594f08f4b3d25a23f1d9179ac431a31c85dc295c6217b9e4eeb3e362aa7574142f103deca7b3ceabaafd4c77e96c15beff9b85b83c6fdc9c0b479bbf72a0d5f2e5e263c5eba91badf8391e520bc2f6e9b48d2f208500f7fd1e4c255c7e55ee9132281306fc1cc1996e1f15cf87d0d72b39339e4bf865bc968c2438a029ef3e9d8863d4265599410c7101cb270a103701f2214b90e3289ae6d9521e5101e736665d282faa84a91a65a593972efefb86ec73d8cf75f1a4137c9a687eb592d8769a24e77e1a05c6ce337047021dc30d577932cc92819072a6b623d9b264692d7f97741457eb656cdcf4659eb49a12c01906b36f2d3a4c2ec5221a1851d3d170a1eccf5135950025b73709fcf71a5abe5c337a52f81681030f4ee1c6e58a782c8e089b00afbd826bfd69b20472250752917dfbfaab9cdbc9e5ab2f47e60ed9cbb4896bb52ebb48ba100b02278e30a5174954bcd88033b8cdd8b5372dcbc752d895ddb5e12b14ef9a7fa98ee8d3c3b096e436316f4e71a4a968fbbdeb1f4a9fdda2840e073d60c387ccb39ccacb54b63c02b10e414eed2bc706fd0802491f0d357afae8b9ce1580fc67b7d03fed7a3281255387d109fcbab14327c9f5e1ab179a7fc0ba5b55a99472e134bddaa29a9200bc7c42a11836dde29e0a685861756b573174177e8ca36a85b9a8aa0d834c612548b9d333f20211f58823678c5104650630636495bb899faf6182495b27e62c795a9a9e0c1014d34491e13c1438ee9121ed3d46336ac2905a69600045d91e6087527d279c0ab5be6a3bf27a82718a7c24d86010ca22e4e91141a063504f5b89b9c0fff4563a8b1fd0e6a59749a37e82a9725a78dc7c77065e7af1e6fcd304248b369188dd37eb9413429916fc3721410a5baad2eccfef74ac85a30fce0ccebd9623b049937b8d97aba03b7dfcb51933d1e4cfb37d95c4c085f25242266511a14508fadb1b8db7b6f4b01b40dd95ccd79abe479f01868d5675317e22a874539c3266cfa1d7e7106e98d296e41161c2b8bf4890fa1afaafb2f4d38535c6a32afac8bdbd324b002e2b02885cec3a918133da043a591c6aa2627f4915dff389fe49828e220107614768cc51dbcdabbd8ee55581a230986f1bf18f129e95d1815404ea58cc927f9312c450cf721cf74e5259cc317715116062ccaeb09e0bc331b2b98a9deb7b261e06ba2a41de3eafbc61eda8a4177b19f71d7058b372865b1390d3cdce2d0f8d6aa9c6c3697ec73790343d754a11e7149bb269179bdaba0b9f74e03e79ffd437f15256b696b22b21525fb5aca3d4cd83b6b83355ca34fb473de56b5721d27d984ab6f67e6a36feff8b3ad2d941fea2f9e0955badceffeeb08758d1a246534030ef4e2285447ba714935c316594fe1be991d04e9a2ab9f8ba0445cf9a67e0e094577e6755c5deb813134a4dec1d317cd5530f88856de1add62d4291c9f709b3350bce418a6efe967d837b84d76b576a4fac9985fa091572977ac5d49b844c5c9574b42d7d9049e6b65c6672a1dfde58baf714e3826cb3db7075561499901721284ad6a7b9da5f1d50169193f61b14bc99caf82d99394b6ce39559ce4e9af8c57fd69c2cc9cd9caecd3a93652e7db92a7ea0b9a0b8df4aab7353675e15157fae0ea07b4917ba811f9040d262c5a82a16dc10dff96bcf4ffbb247f560a78ffa4f5740fa794e51aae44bb1e519560af6063483e1942ca9b9e202eb9a62507b272dec30a039b80388a1521622054a169b7d0a82550d75cf26f2e7a6bccfba5754ce2fe802f6ff4098bb45e63f933c7b88efe084b0d1c1dff5a2f311d3254fb521a4b4df795d8ea959a6899a945f877a4cd339136b6dab2cc48697a583ff8b050c45fd9f99c9d0ae5a07bfaba6d6c5b365cb86b70b5d9c6611f257ea25bae6d773267ca0dac88fb008333aa20d7571b7523d5bd8170e1ffc4c9ab6486ee3fdad04daa48bc2d5f66ee2dd9d163ed815f6a0bd1afef51ba05ff2c43558960749e62fb727a8c87ebf2b884b4960916b1ce1bfaf66b44be2b811a323579351a1362362505880723f44865720e229cb9b11092d98a160721fe1b1bc2c8f71182e4cd52b4ac9bb567420ffdde2d9da44047ced791d6dbc1e1f97a0cc346f8a501b188c08eafdb1dbc9cf089af5a2ea7123cb0f00822e0f966e547f41ff5a37a00403a889d566fc78bcb9310cfddfd2f97575de728b64d37188929dcbd1e2117e55a8cb0c7e97f3b3a989f9a25fe33c337627ec4d8d94b045fafc9cb8508990419c72642f6af350233c8bd309905f8ec5a23ba8dffd402e6a31dcec95ffd34ca054faf4511f1b7a3dc2694d8133973306864ba4c87ef99674c9ce1df33431af010bad0c200f72da69f79cd9c7be4cd1ac9eb25085772380fc2f4aa13e92372fea1cf30c0ab09c094e3880f84b94c2d2fe580a4ca57a509656dedd06f69e5647d22577847fa6f97f30f1c0397b6b9bcf925eddf996fd031f1b64ffcfb9bd11af4fa1b4f60d570dc4e8dfd50dd5875a2ffeff97d7d873adb3b03e1d5be682fb9eb91e05e112456b42ac4f39f5e88c706c9ac6b277e872c2dccbd6c04c0b6466cea4f714c64cf6749111cc698232ff610e0c50c84a557ee4f2b4db830096f5f597a9c95c261beecc38afd3de233334beacba0a43df9e0c86ae0198d02a279c2a822e013680fd92c4a1ecf2226967e0eb912a7fbf9820802a6748bb32292beb7826b83b4e57609710453fa3b0b55f687a83e41d86149b8e32a6e0af137e124860fdced40e29e34011cb4e6513a7785fddcd6d5041c55d9b41f56fd11e997957676fd867f06904325b8c6fc2b5a0412ba8062cd48d3af51beacb5ced9e2bdf8d0e056b738fa531f250113a29314058404ba6a906a2e5d0a46fa11e412c75b34dd7470e63565efae491e22414f1081c524b2778632d469ea9731f5a784437733e25bd27d3cf06ddad9377b4228f580bc629210176a6edadbf878e67ff6fc1bdc2abc04e21643d48a1c76a70be66c0a51057fbeabd8a3b9c4b0f76ed4319a4e17fcc08f7f8b052ca65b012d06511c286c57a308aa461c0d8c08d7140efec619cc9f8efaba62de7d15de00959a30aee1f59e26767c7a81de1d48406095232882e35c50cdfd6578d0c1ed9c682e4dc93ed4233090893c79355eb859dbd2686794457b2b91af5a782c91d0fc2c2c6e1645f22ee7df3a56ac19379f4b0c2b972b54d84449cd370a899a6dce4a6cfb5c3c00350676eaf58ec39290473d7c09761ecc85fed209ff3d51213d31abad03dfe47786f5033923ae66a851f658b1d5cfe60335f3eecd6eba78c9e93f4979acbeb6b1ce41b7552d7c3c6463f5c435f5682b01ce69c3a2ec4ba79a5a414c575ec359b6f333b9c579c1eecdac8c +MD = cbee0413f1f169a6512ecaefcf5a0c665ddbc5f5365749da16dd98a04b9939584004295aae3867f2697c52a28be0e42db6d1d20954e386dbdeec744770fdd2ba + +Len = 61216 +Msg = 41e9d65632f74f449a6842d5e6c4a86ef83791307b92161f74938f841a660690e86beb41f03a088a72e5b8aead7d54edf5d7ef62068f432c984eeacc3449d2ce450aebac727322ef2b009397824cfabd3dd76b77290644fcb16b5f08ae478c82814d3e5d60a984bced413b590d3b8327f7bf6f368bfe01d7e673550233681cf4c3bd4c1c61e51638df3119bcf551d5734c186268d57f61075fed348069b56a6c34e07db31d2ec0ad2a579387e396d9e96368acd5ae924fd34561634bf8355e32fc413ae83d8c6a61f53b12847e1377d0653ab545bf3db082c0574c2b89f1e18d4265e9856907fc9d6966ff796fcf98727913e480b08a6d5df75856e7c4efd9c72ed6f45048a85ea9ae5fc02f5dd22215c87da34d28816eac13ebe94950393026ea1bc112837679cdebaebf6ef125ff0279ff5a76cf299bb73b996d17d6d7ccf39bbcba92c179335149dc62fdd3cf1581b5226fc14e8adcc598e94a1afdcf97756c41459aabba757cef7013a6aad84ed9a46c4bf74dac1a1f5263e91a6e2b77f68333ccf0e940289805f2392f1e4990546d6756e073983b0e908fb0dfd0f356bc081ab65d221432ebb5eb3b61d929c538399bf843695529d87af60830cc2d1b10247c6ba9fe3c7dbe25e283048080d4ce2f8f9ae9d7ebcac5391f5ad60ae3ae3afee3539c27c2ef587d5f78e0be57a55e78cba29b6363081ff5920c9a311cf782c0d6d6fe42ad7203e6ea82bc38b520303bd77a1fb8c4ca2cd5d88842e9e1dd308fde5c96fa06ed05880c096299a22d8ba13c883d7c16f73602783496dc394b8b96824d2df4d447a78a4c75988726b4b9d28136bf58617983a4fa7a60b02c26dcfa4a118bdb1f6a3114332f27aa4a9d00f52eeb6bf3ae375be2e7c1660dc2576be6be107855f03deb50489dd7ac15d0a932cb0e0bf6041908e4c670719c04c6808067b2bc0a4ea81c6413286f329035fbb2e10965086c07d1d31ff14904f95b63f0cc601ea441930e781c38b9e7c1b5409df74342d2ede9fdd77babb6eea9ff5b5f758068c8d1e607b5ec367b70b236be1b962469fb8fa7d517600680021d98b2f5eb7c6020078950420a887e786ba1bf524514a42c5a2aa1bc596a6ee75c0faed9b5bacf54ea653148fe988aa5f2df896d8c7bb90d5758a9edeb3f4a466e4d98345ba47c0c8260f1ef51cd679f51d76492f3c171458d1a34d3a0eddac65c39b82d66a031efd863da5e8a8edc0f90709aea034e947d05598b95ffdce7102dba55ed5d18b4a5f35732be3145b29db594729c438bea5cc5fbf75d907538cbe9bab89bc873ced7dc224236ce59b1f0ca2a33d03cde3a8bd7e9be50dc1e97a099202a603019472d99ae52efea32a1b1d61926b074b04eb1420c28986a40ca3744d4f1641b72e74e34e1aa110c384a87e24b9361756aec770f4b7f5dc2449a37f2bd55ce14e676e3b4a591c3bdd3741bf5a7c20ec772dd85458d09c66d90cf49abc5a0c6a0ddbb9322e1512d846be6151715faddf032e982ecbc10fcf28e311478d3187649bf7f07857d3078e968691c507d84f67a10d7170dbfda27d9a5874160d0070496f48ae6e56077cc7432c5d8a9c7a882ed7671ebaf7eaf6dab3c9b776ca2b3980fe4a4d94b746d50ae31c2f229dcaea9cfcb7da7dae1d9f9efbd335fa332655b3df79588bda05c2d1ecd2712d9a2de92aa77c4f296d09ff12d8f18a00d686474a796249a46cc8a8a4d6fbedfbf02806605e20e75ec33487eee1a12e3b22cfa0cd6271bb8ebe04090c17d4d02e5e4db4c697423d7e3f21dc7b8c6e9d09b676d4b50144089b6c5c66704619d225331386d5d95cac184f566f516fb640ecfff06589fc35cb6ae6164369e8176e810cfdff169adcddbd6246b2f8d214c4656de0d5c4a9e36e6db9d62251547a0fc24a818ff1524f2cce168739ea7a0691f39eaca7eda0b98c24662075ef31ae20597a32bbfea62023dada7c769ebe083427f0d84e7d67448f1f6969d06bf6105ac71a75f5a6fcfc4d543cbb0bae14a6256302e85bec6400f1cf3226a480286d298bb9efef82dd3023daaba74b61244cd045535132c33d7b5eb46efb74a43f00e717d6f4ec0aad7821cea5e5b8705378ef4f4097759a4a10205f6e4cb340a0784e1bd0298db70410d1b0c9daf55428c6bcd1894f96ca106be130be8f02fe033fb8e853f2371077b6be21661b64752a92d38c6bde08eb26eb0bc8ee56c634bdc3a20dc0e39a9f5eb64181391ba86bcf89cdc086c76e66041a1a986c288f7d56a0a40cb5720abc4fbc0650815013908df7f62e589019d32e75982fb678c1306453396580221a0fb124673ffd5d389bfc89f7166fdcadab1c8a0eef6bcc0e165d57dc98ef784b02397bfe7ffb87a9e681ac5b291ae19c6634c3e957da86b867a83b082721e9102c3f4f46c11a83d9f8b3db7cc70853689d2dcfa209b16d72dcdb593680e5f90bf6390aaa83c8d63b5b1993e680b6a684a86de9d3755eb4afce7d4ef2469a3c80e8cd3ac43884d35076196212e6846f83106bcef81b5100d1b4f498c5d8bd08218c425c1e6fdd1fbbe239c2ac591ff2e67dadcb8a7c26d68b38d7b32bc7dd0060496eeb039a401fd017f131fd68e7f52148aa8c05084eaa2ec2ad1a9e846899cfb879642e384c582f9fe63c90865acac5f9e86cf25047005edadb5b88aeee58c2521853f8da506d4cd27f4f004207084719fe0acce49e5d7df9e8e294a7ecb1da9eb246fde10aa39a6822e5c72c7b22172151d20f25b3361e986c3c2cffd2298b06dd9997fcc9bfaac987ad4f8605acc8986a5f3394340eb34ebbe4cc273d44561300d8717e1bf5e06f03e2141f54fcdde7ce0ed4d08f6bde858e68ecae8c86ce5bb29ff4f5800afdd13e30bf38d7b6c9a7e36d5d3b23b1e2c52a3529065e655639693cacf3845335887d25ab731c5f1e5150f75764af95828635d5ebcf11648044ab5b03e897534a0d672d634e815a3e6c7d393dcd717b105127c7bf595408cf05ef67844547af8dc872a4713ba53cbc61feaf8ad617d72ebe76871e3584c6a4e5abdec8aa03bc835236474fbaf67b1aca2bc6c92f113e2016b8a082f42222a46c774d2b875a0ebd331872695d03a9dc1dab1b7328dc14b70254808815bab14022c82f376db91abdd39fb258924b2d72d4e32a037406ff35f9e0b3880accd6fa7114f176adbf64e7cc427397eb3b8a61786a5f0460f0523f75c3c61d53c718560fe43053f7cb71dd759752a1c863554a70b746f0a046b2360e9414b2813809c537cc6879bc7bd6017804cbf0ca40f27076405e52826893bc1cd84be203ae0fda812406327c2ee5f63c114c1f61530685c19c21a4b7d47b3428e6b8265b87bf0884919628a773361e4a536f981e27e5ed1b312d619128ed20db6605ea09537bc1ba8b94c6cee75b0c1b3182c5612e3538bb95ce03aec44e247cdca1c79dafeab88b788e9772e9a92237423251dad468db5b30a01571353291b591182978eb703f8feef01513f8b50326ebfab7dbc8e55752983011890a1f0afe49c59a3b94a0d9206545ba2293131152b55851e46a5f3f3a42fa8246a187e2bf5d56844639e117f5620c013f4737ff5334b7ca95372af59ac76bd24a99f1db815237923959d57e676bcf84ba93880f90c0b58c6ecddd1ccc7c00abf561d137ecaee52e7572e26f0ef8ecbf3506a7e4a40fbe11c17cea0767f75559e787ca9a49f9fbc39af39c8c4480001b3eff0bf0f5785de54de2d657f5bfd676817a32752199c7fc1a7a7838c0979613290b28c71d710191549e2690fe3c008c63b7ad5b2c24e6326465ea06dbb61b4193a982c984a0358085fd6f14ca027ff60ede9fae9211d301194476691e51fc20ff68ae9ab37c864d528ef4861199816dd34d8e022be72ad299a4a1f200f1d53bdcb7009d327c60523ac16b574d67c13e6192fcd8322b3a3175f501141c1c22fcbc132d537a165029af4347fae603cbf22a3d60a34d44adb82eb3f861d84761de0e0b895002d0d25e3072fef363e3ee23adab5df5e5c9d1a134701c4dcdfa1e7a431ea9155532634a6edf14d35f8ec44d5c6b5932943162b727a7c13a55bab53c1bbb1105f9c18f88aaf60e1d217adac9c70bc70bc101bd5468c9abda07efd2adc86f35c458f4c39385466f23622e8e436dfb3bc404b16df37864109f7d3fd33a09b9abb30b528bf58e4eac988a107b24d1b83c0dc7d6e12ef6f5b3ecfdf1438b2018c76489415519168d3aff11d71df862d12c4b92d8b36134fcfa5532caaffbdc0b3d4b4b67cb98be60bea991d8e338b1c4a10fee3d5134e2f8586a841285267e1f51f9da3c3bdef6979c2a729c67504f012ebd427b47045166529f9a6f4f7586b3c9d2ae1542665f6058143c9816f98b2519f63829016a30c57d56ce478b639666f9884fa95bb9497976d978627e7f069f172d27bd1ce0e1943d329821b59b2db7656d276f046255317d0c8e720a6b41dd9ad4a9bdf5e2e46116c590844a66ad139203ddbcc8dbf336df00175d4748bd6f197f268228ead9aa9e524fe5d670a509f3dedb3905a0b3d821668b6ac181d9d217af36c0328301ef389b1edcd62396092f70985a673b17b3c8925340e5c1379519c742fe8f262d8d89f295dfc60a00afa94bada75a058f5849361776306157369479e383ab6e8d23e6eb3d45228e755bd5d273965aba8b2437a440514dfca9251c1990f623a6d140f3f78dc3784b54ac49a792ade5a4bba5f87f56887afdbdef2528c3cc64797a4315aa0fc133ab2eff793d7354877e615c2029d28263eef5f32449f47d0a40e8c8e0752bd4e13874e3e8f6ae30bc824cc523363cb5853af1efaddfcb9e71b7bd40c8eb6a550d7dc6f82d859bb8f16aae5f96170db84b8c3223367c81a727286829536f53e814e5858a9b4cd463d28236b9dd6ebe01433d273c3282ef0db72d6a0104937104a3fa4139d6cee0a7bc8356328d8fd606f8d841a946954c589e31435640da3a1117468a84447e391b2bc88d781b0cee5fd8e831e8c716220e48de74a7bcb627c3fb34b1d888fd5634bcdc5ce90a685f626fd7487958a818a5437f8e63cca9b263dc5f57c508aeb06acc394513d014b1c52a3025e96fad98a41abef118f54772872720fcd83824e043f669c67700b47dde949d3aa760a91a813af73d35caf1e0b458141160bbd25e56b7e8618110aa2c453b58f731f02d16c320c2c358b24b75720bc3261cf84992f97d2f96c08478356f8b0dfc1782ac35f078ac33e05fb6b926ae98bb5b71ed26c2d2b9e6c3d0a131d41016b9d69c98c08f8f0e0f7b07c61468ad1f31babd5f72394511d1f999b79a09472da0eda2957ef6e082a6675efc2faea3c139993ef31dd340c1d8e0241de675ac9d41db3904a9dd2984a953d9bb537f1f2933a57b5a721752446bf61456afbfccf03d1dc478d998a69e78ceec9638407ba1a03e06f8277bf6042bc9fef44e3e04c0c323e96496b0043aa5271c1f369945d50fe1465e9677a89b68da28795a770089a48bfc4a69c9aed3beeafcb8e6e00a4de32dcde057a0e674d38545584d013ca531c481bcbb3c231416b8f2f5c1cb4546ca72124fd37e3c2adc79ca13ae5305bdfb5c2e1e138dfd565cef83484fa1638a166c97dfa2761627e4161b2df6e3184e71b135f0fb458a24e21d4232f918f172676bd3224d0f10f69af8dd19af37d0b135725dd7eae9760a46c0a44846788b8a2dfe68aa2bcf9901518074693fd7cb80a70dea355ae03d711b582dfac0667e4beaa2bcf9d73e3ae2c84b759f3139655756e28f8bd3c04ce3b06243ccef6956322de73473c7b153153fc8552e2be33a8fb5aea26dee1020fca66d8a313bd7bfd7583a83ca85ef9e1348659788785bb7b453b0c73df24656067de865ba3e5807a60a2b1f408a4f585772d1b140bf09694fa197528e98e968aba7416ada5f60ba18a4176b885d373e7c4f6b36e95872cbbc3fc0f8c23a6fb556a3270e14176863b9c6bdfcf4775dacdc1eb09ce4ed3e6ba48edc1e9b6f4fd8820207c3fa1ef58103d25d483751192001913067c5e5b2a5830f37385c90004ed8345230eeae8e9e816793d1a38300348727690bfeca7615c24170daa8553794a3ca94b9847eaa18bce6e02ddb759956c751d90e12040f48fcb60789e1274c268f254dd23de7ce8c10e0c0b141b14b036c90fef2823ad49b9ced69aa997eb490f4e4fc2f8d72626517e5c40078be9bc6c165493dd1d76caa2d4815c153c417506f7a1e05f5b70c304c5658afd306121d706f566473524de11866aa6282bfdad179652219f92e327a28c30cf403103473f3ff94fb0943eeccf8c98612c89a75b08d36b6c02a306baf37ac3f916b758966c6968355e624c5ea58d13736781c7e6a255f2a8ceb661e5be3828eec8eae777252d4b029ac6d79b5831e4c62238e6b6adc5f2bf4cf57d0ecd6d67989df138503333a99dace8660bb3211241a4d98b33f1ca7098c486e19fe6c286dddff5d38a5f228aeedcf181167d05a5cb378a3fc5360d761b7e9115fed2df8fa7d41d418e6fa2f6dd7209b0247d84a64e217389d443360b30c13fa295596b89ddc69209c32b5df652b5577c9d7c471cb1abbef1c8e1ec38bfd7b70fca420f7d67fb7bb3905df89135ee046ce942f60fdc1d90ff09d8d704b00622e4075772722dbc01c75fcb1ed06e66370970973887b6bf143cfff0a077eb97a8aab35e3d7016504cce973e75b9e56219d99b43b58d29d86f2f12f0ef9959d270e8352017800c0183509f7ea557832dd266d00d16281db2cc61aba26b73e0fea326f765a9a8f715cfd3e15357af2e0e893878bf03617893515830ccbd0c696468ed60f49af2bdd557e1c48533cbcf4c67d5fc1f233f23c4269e0b378d6cdd4de8c3d897936647894401b0dbe0b24f3093c7c2f61fca068d74bba2ab829c22ff4b33c7143c0b7d79bdbc0d1f076c94023596340b9e0a093563355ff044a322c3b8c295343ce947eceb9844174f02880a77c8b928490815061a96a9cd7c89c3e057faabbf3c088e2cf51fbb8c617b128f7fe7b813c8cb1046c265e70bd257efa051626f7de371387f04d9db45e4df19db757b9b95c25be43e822b8372ed148d49ce824a36da2b2f2e404d0c0c81368734820ac976e0c17736836fe4ca76c88524f5e3a5b1c83e5980d003b7a7e08943e3ce1eaa7ec904b376ecb972db147bbf79ef0ce6b756b3a0bfdd8342dfa8df352f803ea675252c7e45e692956d70362290e48577102c91eb318e56177c81414562c0f325229e42c2ed9980b547310098b0fbd7be84f1e021200c039c4615b65bc3b8c38f4eda4c66b42c0d3a3200e209225c8925db4da82cd27e123b0509465f998d394cc1815552e3c8c18cf685e35b2f302312dceaf2f3900d0b5b8008f9392d6adac4433c626ec19423135b670b771d9f2eef506dc55ea1e1776380b8d8d1c77530609cb37da298b9bb38294f624534d03123ff812a554f21debdcdc1ea0faed6c286938dadd6ae5e116127e4f1adbeecb416b1cc28c0e0f6c6d02fcc38dc2cb6189ff272fbf24dacaef81ecfbf98011a3f302ef6c7879d87b9046e81c81e873dbb147f0c6ddebbcb1963d6b7d4ec46835bd93da80f93cefd3ec15187a4bf0892324b03000e8240e2da0c17453993d54e8f79a88a09cabb7fde6fa187d4a5f7de05ae45f9e3c626197a59a921f573f6a464783543bc15ab361f7626285eba9c48bda40f9df693b39980b453f21076f1ad613ead7c315de8498c3fa8134ce43ef9e19427944ecf318a7484de6093830d900e33d7dc6e88b8e1aa30efefa60d2718f9e85687f364e614df30131585819476f3c07d0c7d7f642603b2c265721c9dce8d07641eee381b5d4722b7b6ee5acc86994b65b3662b333f1e2eeb1dbaf9e943265919004635179037c195eed7f5fee9873e587a2f736f55830a30be858c539e4b463dd6034224d334757462473a71c645ff1e09e23e5e8fbbb05af1dcbd2208853697472e46884ec8a61bbd46116f465cf87f0786764a164d86315dc674a0a85b91f0fccd2b8c2b7abc53a5dc623e91538f431c24027911c1f67cab4b9913a755bf109cebd8788fd21fe4c2121527ceb22e31f1c3ca34a9a06605827314c42cfb28bfd08d3594a4593896beef127226023c132e6bb6c2067040928b47cdfb60d635c540bd2a2792966d313e7b4167c0c921af7b24ae6d4fbcebec6dceac006a6d4ce993829f7b8112277cedbf8b4ec59244cd7ef79a7bad09cfdbd1109a1a7348d7f472e57cd69853cf4070c2d66e5ce20f37e2eb623547e154265f167d92a3f03caf84eca981ffe3cb45728d0c10ae43e9b44d09eee346cbe297bee73fb021ece5df72a10ec4df4a85539926137ce23c3a0b685826cdd150e1f4978bc6bc16c4384fe30c94e6600e63328d97d5fa21566b05dae0f33a11f6b906910bfcfea9019fc680342131a9b9cfa9f7e838d29317e26a4ba93b742d48d295556ec7be032a810bf1219eebe3d330827f1f264b5f09080265bce8c14ecb95698abc11434bc745e7dddbf45d35e2ee83cc4686aeaeb44594cd20e06a9c096849d9fec1d6aa615522ec6b09cfc870717587643f43a79f02ea2edd0db63e89b4feea3bbfbf487f1884c7d8c789c304201f57823b527352a5ca2efc55ef5dd3e251647bf3464ca9f6d5162a15d24f27654be5a76123395598fd7584a25b20705807f0c645b3df6757dc8069daf4945fa7bfd9db99fe2231414bac7ddb44b0e780eb35259d4d2842a362ae9e0035b9374f44da26cb2a566d0a7b7befe8f034c0c1c4dc9fe35d50c1422f48d16edee734c3a29091dff0fc915a5789e3b1a8d58482598c3dff2b7e6d9d0bf5080c3645e06ca1a423be983c2598a57f601db3bbba2d73ee06d9ffdbcc1abe5d4dc287fcc2b209bee54e6a3fb22e2e046f165b0dea29daa90259218f68220f29a778173362fea185dd78ad2dc083bac11784e6f49cde56663968d8c1c91ec7011f16301349b632a21525ab2ed5ff115e604d9d9759b4afcdb4ec6e997574ae8cbb8418c4fe4484bc953baa687b0afa82525ac81fa813ac857ace2940f68e8c7385aa176d090e5f7c63a4f306390c3ed5f693afb31263173793f752ded4d2295d85717736f37e8b8a8946ce2e976da50153e0997c1e0cb68a084e309a95aa4df3c2bf7e4843facf8d0f0b82091e95f7ab712ad0a154765227e0ba0d9dc37dbfdd447e76cb81ecf52efbd959be55edfc7d59579a4b3c09b2b523252f0fe5b248c21394a5e636bbc314579a9975c5db7c1f125140a25f2ea0ddd976df1784b3b04b38eb54c2e9cf02e72b358b58f4c83e39a4fe09cd444be2470b9565dd27e7bf1fba69ca87229079517d92778c6c1d0b7218483ff573ca419ac169098a56b63ce7a1f8515c6966f2f85799a53cb540ab72751628417511857f01dc13469a88f14af57f2f6947b93384c0325c8e559be6e2c34f0edad18a769dd5d5ca3879c5a4f1bfe5add743f1069ec145e6aad694846a0bdd37e70f9bdb9d443d78897dd51e83071413cee67631ee60ba89b9c0954cb154a7ec91b8ae7e2656fa63602e2127a9d3f3a975b6b07c1ba7798ee399050760a6957400532a25e114f5d3e6130f870b2d6ab6f53d08b1ce9e6a3d4feb4c7d1e098f195b6877997585161243b40805501c61847603e496ae4c76dd263dd27694867d21cb7ffda28bb246679e99756a20a9c0591f8fadf564b983b88f18feba6a2447d577212307cba16b191f4bbc7e25da6f7e1869cc9497ed7a14b3033a1047ecd67d88d55392dc5c6e71f051470904b9573b8a19a73bf0f1443aba86ee42d3e410612524f50967eb38b736337cd3684e5ed79d27a8b416ccc772cb298016b716dec877956f351354b0331c7ac5a3f7a06d9c781c36c6b386ed030e7559559b8a29fca5b02ade89a1bd2cc7ad894359b76dd04480b8386c289d37acf1e1c72647d743d8fd8ecc71da49ec62542f79379b44bc28d998d3ebb8bf54cd2680330155d1e6380504c672053bb913f7210e3955dca84db13d5fd8413aa3989a9f62d4bc002cec4ff296342c7bdc021fc6ca06eb1bdcda8f0fa4dac8f86c36d7a41d46844b5f1d63c1026056f09d595386744768eb9ff8fc76699a57e0f7cf65f92affb699c5f2cadad39e8c84433d1cc9d6a3d1333bcf7fda78c0f5da8b8aca0451a85ad4a8940ba3d095d51e18d801f7b6c330dbf686a0a397f3abce718f902f5ce976e34e2aae86c3ee39a662528a78dd4e8cca1946e7398fdb80a4f2073ee1116914ae00dd3cea7250c0056ad33fb513edeeeaeb36dd0527217c44541a5d813ad13b1d05d53c37a76473217882a9141f485d22b67f096d296da797dfef74799dc8f418a73936d428d259e3d3874ffecb06e15ac048f3da5b660a83ddaf0b3003f746872c31b22bbd417a33c50bb9dcddd0827a53ba24b587b5acf19481ab0e33053952dde739a33059dffa943670141e4d496bb5fd2364730295ca4d8eda7bf79bd561028052a448c38f1e892ffb1056263d132e387851e8f4cef450fd23df1561239ce3278696cc279289ec1fe2364d02675b0893ace2ad335e59e5f70ba256fe2aecc7025ce2852cf121052daef0ca8acd2b893746818c684de054a41c2c821bf237f8395cee3b7bb3d01b82e6a59766796cfb4cce954b3ba470e42bdde6615f8467bcf50e23b5bce07d784512bc7a3d7304a4f9cd86b3536af3dfb5d636ba73e7625c5efbe9bd968110629fbb9f3cb7c1ddcd67cabb8c59a7508b69908557fe23121f9baaa919b19d7022b868b5a5 +MD = ec4ae4e3668035491074838888491390f18c964bbf2aa16f44f76a167ea90043cbdce5fe79fe09c2e78cdb1fbfb8c3eab143299bb7ef98f9787a4a9f94ca413e + +Len = 62008 +Msg = 090d8832d14f33207b3bf973d374be0e88082e7b46fe01251f2e7dc82f563d25806932fa2b2ae731c0fa0958e8ee26514925b54baa5957f158b35ce0c8e4895f7d71184a2c4e01501faf785fd71bb75bf5c2fd165b10d77d8e829e0f5eb94194cacd440b1ee309e45e024f6fe722f89554860fc69f4c093288434b3c3bfced2b2d24be2347108855469a9572622c71652d1af241bf357678109d6c4fa5d6168e6f1e8c7cf0fe050a9f20524f8e60ab344a25ae7102f2a5b8ec38082fe56f43245864b8fd60d5086d313b8eeeb4e72d6b71504c3cb2ac1e58e5bd27c643eefc55af9e4a8de1bc19e5c39452371be87f706b43d38c158a6ac2c3d4d1fb067bc9893e744816b9dbc1da1fd2a5120d8c2aad00a54b4875b5105c4e240fb678403328cb8cbc7f315b87b40b9e9067d0fbb588f71fbd58185498904e56e8dfdf62c19a1f91adb09164f4dc50a01a1ead5ca86b1a5830a447908bc58a11655f840cfc4802292490211d8fb8b67f4b1fecd78cbd2ff9ac1349917062cbfe8d1caf646a983bfc280929afe0b104e42b52d596e8e6ffa9398f687ecfd1d9c568ffa89295f394b3c102f0426f300476c39fb0be444e5211e000ea7f31797c0dfef0b6bf05c2d3f6f764bffcc59b7cde1aefc47a285df0d8a84c18be1cc27c7e58d82213406bc16cd315de08695b35c338285af01d7ba0a79a5c3a601b14a0c17d9d35b5d05826be5cfe958ce3d9f7ce2634ba48aa102b26bc189890b3d7b17e752934ce3defca949b072cb1bc7c89a7ebf92cab58845afc186879746e73785c49626a850d9a74949619ea9e7babb5f58f61f841ae3ff3d2b6352734d351ba0400321e03cac0ee69571a187ca8d041601b53653134a9be4f9c65e8f96ad7421ea280976ffbc8feb9e6f4fe72cb52f69296b6bca4722a851cd4e205ebbc6ed75138331ef2291c6d2d498de4a96d999c30087446c1f12b0ee06692c631507e4045c835fbb4db23026c8acf1248150dfbe57a7448b138122244585f72f4ae7046a35d6d76dc9945871fb1a0cf784c16da56f29e0d9bcf4989f0b430535b5faab113fcc3d793eceac2edc4ea6561991c032e7bdadca83f360b8b82ecaf8fea96493caf1f65005a7a7d7fcd941a2a84873c131a10fcff0f4370bdc87dcfb7d79bd5c77d69694c6d5d7e7cd38637fc95bf4eaed928b6cac7d77f3090cafbfcaf201f5b6f892b9eadfc8e8ddfa803fe552c01a6bf0a522ef0590189e1bb7a86f98feda18b68f31fa1bd745af8e2c8594b361ca3d49f18551133bf73c438967c3d4f0841dbec09f6d109fa8a261ccc340046694f21cd4f67b2cc7e943f29950604c838e267feb44dc549e6c5713e59b8fac2ae4fad7d418b5b8c09945d76c04ed462442c35873e4906e301b5e230b50cc314b44e819834ea95db271c23085f793885f6c9506ded141b41130080da285ae3a243f2a30471ace7219fd49bc5bab2b599145ebd9a0ad68cc9e44e5424fcc7e0d623e31dab40f8dac63a63cc96181fd506679685f4dcb6e2e53b4864f7777d44171bcaf773e8f6f532c072be63c3e81f34b716b165addda4fce195ba39e3a496ccf44f3746b3d0c0cef9a87a1501361b8ccc8949d4c3735a759fde5ed486635f5f7619e70be7abc300acae07921b3152746d955328689f8cba3bcb56aea9e3263769d10eaacdb28731a32b6dc459004b5564e2d94be189c3327d03acb1934c73bc951eb50aad0a93caa4c8b59202cc8e987719e224795a86452f2f68c48ec5cf56c2a9e315cfde6f31782de6e360bca4a36fe2779b773a5e5b17f690cee076c06db71aa0b27a54a4d0e70108a1b9f914e013e49f982250d2dcff012eb9d288d0693d18f4c9f894b90eb8ec24b356aa66b52dc86203c4c56a30adf8496cac2387b21c4be8438fc73652b59840017ff8238c8335c8c4a3c0aec0e981eacfb66e6cb01c5c83068815a406a4aa67737b0bd2ccdfd4dac4076a27f27d4718ca389207cc04f3cefb2ba589914ecd9ef1940afbdd074d9fe93aeb5c2f2ff0db4579b7e06c9eb7cf0abfa0705b7ba7ef63101d2727c3471f1c836ad5e0c9253b28c20380fab051901c8e2ddeccf2e061b1386edc12dd6b6346290f1b6b118d415b5ba16edc03681917de755d4c7d21fcc35422a5061b60724d7504b53ad0d1f4c68cb7327c5fa570e5f8a07443e212c981ac64076b47ce551baf6e2bb3cd985d529d6e55408cb09f6c24d5ac19ea5acfd4875a8ca9275f12961f780640d28b82e5d5ed5e925130ae96a93c8b365da117a22f2cbb2884b9b3a80c47cd48a5526d687d5dd5d977cea349d1fe9b020391a7d5ea031c5025843f38c00608330f9426c4dde5427cc731886fe24364e6a4d089530107388ad469bf2d81db4068d8f9b3df3dae2ee5060164ef25326d480706c506bc5f963c570f3a7198eefb51c82b1ea3e5df217bffe840b1e2f43e91f5dc61d46234bfd07720b8eb4d68c455a7cf6ff71ca1a1a6798c239d61b05f2a36f967a73dad39acfc414283e77120dc3c90acc22c1c38ce3b95159be98f59799207de6693f38e3aae1cde21b030994e5013dfee5b776d5b0eac1f93c3b9b2e8d1abcff9ad2d45e0555997adeeceb614ab030f62f2dbc8b5ba79476d3855f5deba8f4147d384e708b8a0720fea73ff9415064506386fd24507a397118e8ca7c3165b3c3a4c20fb19a0977930ec45fd3756c488c2775c1271bdd317670d8552feadb7c9b96228097bd5e9b3f63b6f376535e7e07ef5c911a2a3b0ce58ff697df94749eead5bc49a951f3c284a211736877c145522fcdf554182e3c4caaa5fb11bacbcb5fc801e35d14639e115e4668003f1f5f096d2c568b4221301a6589075cca3b6268f195b62961187e53dcd839f435d32b8c2bfa4d2654be98ed54f235174f6df484e6ea6a94d49ce3cac24961bad8773b68f0da419bac50c723ed741cd7b6be12321c625935cb6b8ef4831c97aab395ff0e302ecc71d5726b5c83a12724acb61bff16b00a72c20eb05fb3b4246a4399e70a8e8a563f5cbdc605dbebdc747dd0a25a4a3606d254f0f86ab8c29060050d93ec405f676aae7d879e4ad6b55db6b815c24b76d6eaf0bcd7b426aa7432646b86021a20887a474c20b444d43a26e3b716c57ef4e31331bcdeba71ee48480e3e2e0a506031e4a39411b67e76e386917805e27922c3f1748b6dec2f0075175ef00c53a7b0ec40600feb334c2139f32c556397bea2e1ec55a305c7b2738326d31b918c74751ff3f8fa1da93285b5d330d9c053a3d7d58a319e56eba0da1b0d072b6e033b3f55a5eafd1996c5f6efcd3b9faca4ed440751b4c7a1b67e86752077a9e256807225ac92836f7a7b07304798f17919ef7a0fb94bd9a6c6a01b5a178111af04d8bff89e9c279fc2d6392fb8f599c6112edc5747632eb67aba0b1248cffd248ca87b56e264542b0e4c0f56b7cdd30439200d66728741516130d8363ab0b6d35c7426b91e978381cb50fc1dba8e47c3e0676fb5d144bc181888f54e63eff94bf2c054a7b98240447889721d47b35285a56985edda17e97aff36f4c36aba1eeefe1187ab39d114e3946a13bdd5d9adb9f6bae246f37d73ea83df692da5cba24cccfc322c15e07bdfbd575377eb6d93d162b00789b3e1c5f744c694f5ab711dd5edc4e6b2e45cef9941f5b3e3feebbf7c67fd580ea1e16a11c0a13aa3f2670c2aef1007c81b82dab0c0b9b78a96d08b1b84f7764e3408dada75e3bcc0f109d7ac3f7227e4221ee7b6c807c0c439b8812f2842c4d0f0a492a1d2f28dc55dd61aea6d4fc98fae7d710bb68472295e102c37e043d63f4e511c18667230396f484065d72d6f33072b11301aa45e428a5406c64b9f2cd1c3aae1aebed74695cbfce29f2b7f8b66c2a432b462ebb78835008b4aa8a92b40f6fe9dc53a963352ea507c06c8da90a3677570193dcf4062f4b23435a5e673f53ee88afc7833890950ef672d4db331717c1b33cef9c37b7b2fd59c27b1fb797721d533d4e633aa1186264e83189dc04967020856356cbb296cd71d916b4cbe3f466142bf031b2913f0a19ca8b7eedfa3cec6684f6f2f9206225352f3205eb4c5f309124b5d5e887926cddbfeba4ad208f9d4de0b05809299f6c6b6dd7fa5efa3de293cea63724ac9af1786f58e2669f19ec9d42997043f4d409dc3a0d7b6e1415e6e2d1ca40ae27de01b183da205e9e623f1d51ba23eeaa8966503fdd7061c270a346d62ad6cd21e60551a37946df46f0ff96b61a57547247ea8f244ec1802ed5818785cce2cbc23b6321763e3d2fbe4d95d118c1f5bb7594fd60906956137dcce86c85ba4dee316485e6a530eb962f01679320b8e66cdbfb078c2b351762dadd40bf7ffcfd7f97e9d16bd757395ec192dfa7760610afcb0170dc9ebaedb46b91f1461a98dcc51b53b177b5bc0fcd9b8a64d4c1b35dcc6d30a1159100be53586f63caff98d10ae6298cd1e766562de6715de1a9c8b40aea0f0002ab107485ca00ff12d503c3941ff3ca42145df4c4c9cd3497d84cfcb26a26f66a95f1f593e9ca2be845e29cadef3ad292e4aad3db6d2850bef3471f0c14feec14f7ab2bc5dc575012f73c439b7e840e890154d9b9fa09191ea5c20460111e48c97747fc62cc2fd7599219a0a6f35ce5ee1063f0a897f9f77e93c393f6890e7351c0cc52b4e0d82685bf829b187747bf8bbce0ffee6c7f52a76855b415a357d6747842140141dca75e257d1c3731cf0426aad2eed4a2239262ca7d4f078780d8fa48b12a9216c3c1ab6d150b4d4a7b1d888541a5a2616d1f7562454c125e11e0aad7227baf8813db363e4f50a0e9d37079f3360ba0d0e662a8d7b4937f5093584dce9cf19fbf565fc54135d378376066c19cb70a161815c1c5d1d20d96848da7abd42873ace213b4211dce7d1f5ca968272acf894b6082a592faa8a09e2387358c92cdea1c19d342127b2234dc7f37dc7442837188d1b677d9f73d35e154096ab8af933c388e1d7160033ae1f6c8902b708edda81593389d60739ab5a5409caef6d48252486679a9d25c1d6db6603ebee3b6e4173acd9081f014c506330ec76910a9a31494cc6f52312fd3be646fc9fc9562a0a63fa847895082c812d3e71303ccd5fd6a63e688d4452365be481cb74c4e391a3e6b4be41f4a66abbfccf307e4f301983dffdc4b97d6e1da53a9909218d5e359c507deefaaa46874f768592b744dd47d73aed74104ac103a67d1f3e1c7f30965255b8bf192272f2da1ed42071ca1f7b3f6b9fff0818e598ee1066c2dc170534744af78713e9b64dda5a4d52442b91142ac687be2774664dda99123fd6d1468060c4bcdf718c8ae8debd53b09505bcb337f02749f4f9ad82fa7ba41d935a6f1aa6376b30b8775b6445ac89b3eac50cd8d56d111ad6f535e8cc3c8ee4980f0953c337a5236f36c240adcc41e4cc05fbe58181b7b9641399dfde50551d6b7b8fdc3639dd1ffc4739fe75813ecbaf252479daf29d9e22b133e89f5b7930740c7d047db2858ef6353cfe4b7fb2c10acf00f630243541797abe839db27db6584e5b7d18363118c36d45d08dfc507d75500bfb2f9b014bfecc744147f9d5277ebd95a6743952261a6bdf15cb9b8a496544bfe927cba40619230f922c96020c5de6d60140307b3f31cd832e62d1e2cd51399750c73a70086f1aeb06ba2ba6cd7c36772ddab02edccfeebc9b0243dc61cf9b1cb27c6c07eb5710811f8f0f15e36039037cc23ccf773b5bf5dc2845f9bf46e5da9ec5e4ddf767a08c3d09d4e206907b058e853adfa70aa1c972237cad2e4da63b76121964e5174746ffb8f19d7f8368f7c3923ef1e4c44c91fda23c69475a68c9c90f8e2f1cfc715bc82b09aae6cf7f44cc87cd98a8eea909cf2329d092d38a00181cb7bf077dbb3536ce619cb4bb4a96f9c44b267be0637b7704b955897f9678d3b83a774d21816dbc11bdd5620d4748ebd65c3dc64ff87175e55f8aa3851a9e9c606afa566e705fd89362f7870bf1e5134c55412093d4864c33a0c269aa92dbc2a3edbaabeae4961cd1f5758c5dc6f5f084eac3134284248a8e11af54467bcaf6f1272ac5fd6aaae95be9d20a6952e6141e615606e283c691432693ebef51e6a9e69bed2d3c8f08de7fb48f59c5125fee877d5c73ea5006f0f15432a91b91b94bf2d0545a1ebe3a5cdbea2012e791adf04e8358f2c075403a272eee1441d7ad5d845902c51a64b9f4eeff16ce473d6ac9d217de0c0b601cdd331b38a5f8705d7f399a7b06b63ef2272767e5e46a8210cbc0af5e1831acf74ac3ada4d6a61823f171191f9788998d7423b91fedd80c2a7678be5bbfc9b85a13575ab53ee12bab84d95982e00800e65c526727430648326a98c9495b4a2edfb75cb6ec4730275e89c0d027789af1976042068e9c7ba2a3187f54b983195cd2b74226ac87f997b770c6118fd9d8081af050fbc852beb806f0bae52ecfddeeed83a64e8859c3f930ea57922e8c35a0dbad2ddb76fe3604d893c9ff1b8a0e318abd0773026515c8755703d686084a5873f73709ed07780592622b17024a00e124b3d458ad126581df37496318c66cab5e5eeb2bccf70b26befc6ca165a87c6a66289b43eafa49b1e91b96ac794f32f5f554d89589555604d8c2fd32c7fdc729a95bdae93e7528d51d648a370a1b33d4f3798dfb949aef1c5a465b5fabe287cb78edf1ad2a1b997806b282775db2d5c4c32d59b281404cd9cdf7156c83df24bc5f5fadf44075f1f71f761e01e69e9f51dee0ea5ed1edd5c9ae75aa0de24c2478c7113e72e3ece8fed23fcb4b2736f6e8b144ae5508ec4058661287a839c20d8d3ab3419db718e4dbc97008d7b2348315e4c9243998c3e3329f8e4cb01cd9566644b645d92c625c3a6fa7552bf9ffba45e3deda70f42d54b4c52957d9edea85905f8ac9b9a651d5773f464ebc70f1031529063f9fbd610b6b5174377a3f7e2197f5a12bb3c77fe73ea2fd43fdb9c0f3f04ecfc21a57077dc2df0f6a15842ca0e9a1aa1a6c0244e7ed550cd38426e81353afac107553993257b85b7e304e4e8a11de05e426e9397e0fa0257bd46acee7dbd62b9935358ebfa697d8d25f008c438d25353788ded600021eb7bb72d7edc7e55cbecaee6f608c1bd80814f65d4e73d7f1c87316759324814b3400c400dd5a0c9dd633e583b70e440389a49a970d816ede302534200941f9a03afa5c781604be341252cef4eadc9ba4ae0fb04051f2de44fcdc7670a0eed7a83ce6a0a0206e7699f3a61f45847daf3615b4ec0bb45e82c08ef761e9e281b7ddaa74350b64ddc249eabc4ae80c47db223142824b9d1b18cb77047afe46b0f6bb04219e3c8c093dce77f3c67efae1cc138127377284befcd04592161055e320cafa5d2095ee4725922beb365cc8c1ee6495d15022f3b09b796b1ee7d298aec277dda580ba143e262f67110f240e7ebeafefef80df72a69121680954b7775a686c2e99131b8644cc10b9f3b547346eb94fefc02dfa8a076a62bcefe1318a9c6ef27d867c2cbcf163c0a501bd38c3186aef25f1dc26923983b7ea4111d34aeb62b53b1c108040daa9c9b8c9ab9b43024fe813030fc623d3798b609b6b0f20adc02f07c864989a56ea8655c9f4c12cc2d4e547622d6bc75bb867c06d5167a47a23ba33fa0ce821fcc2a11c713d6cf8c09641239dd989f538dcd78a25695f5ec6fa01604f6df18042be846d6dc9d12f920086481488a3260133551e521768b82aaf7f1d270c372daf2acad90e3ea0499da04f2574bf49e23b686b0d71e016390bd09dbb2f6c4ba2c8b3ceefd1004ccf7a01f63c2ce1d0a25de873c81367da69e0f9e7daa7028157f5d60b0254c359498d82060cbb94e9fecf4019eea4f347b35087e7fc5c638ad5dd0e29b117dc38106ecd09079f4cf85025ebc7d1a526c0bdc10708808e13caa4d4c8958c88cf7bdc842f79cd468e8e3ef8680821a286e7d1b8f3d407da77c34d8391c8f5262197066445d2be4fbe1e139d21555f1b782fa7aedad512b013f7184ff64e7b8e571c16858c9e6b29601a96aac429da7e9efaa829288601ad7cf8cdc06290901ff46d957e8047445229160097bd00245a5ffb4bae79618531272ab65b7329d3597e2e0bb5bd77fa585d9319fa7882ed2d2f841aa529f1edd9871f7a978494a5d958bfd1a1907acdba92142b3982fc6565a2378db3c6a1dc05314972fb234b87fe08a58fe8a5fa5ee74b1bbcdb59075da24c882d40ec0bb052aa2b37fcebc90a662271aee16a612e6d0d0c5766872e164182f861d2e69a0b30465752232a97ad702a96b7325a39acca4c88834199cb2ff1e9fad3f062d75d2cba3039f48c31d1ca85a72141f1fe6a7d8df2b922ed791b01e621fc1fcd4e26b66a5857e77d2227c3c8058596ce29e7f535ed61510eb268100be032b7a258e84bdb32448269d3000a76444ca74b4695cff8db34727a01879acfc8106e7e92228b8140784bfedf0aecf4e5ff09f5def47c3b3e7afdbbe0fa00b63c3d9abe8455c3f1258baa98a0a909d85d15256a4d94787199dd5950cb5ff033dee2c2eeaa02a3af33c724c3c25aef953c178ff53cf653308fb42bb53af9d7dd02d88d7b7db999100dd3510cbe90eccfe57eb043078a8b0c6297db75ba8836266a67310169db12c81638a5dfe00bafccfbd32cb047d18e49b500eefec46b79845817741d18e7bf3bef6fa9b9e0fba730e18d5be9685bdb8d1987ecdce314309b5e71cd0ae57fecffebc0c3273c1141703935d43b039a014af2854b7c8122e9b0000e92676a043a68be0488a45bbd2d2f65351c41841c8e17c291817a49181386df366abf0105062ab88360bdca8fc8b2e8339a897443d0581c25354285543c743e91bc7e6502fe9a7dd5f1e002e982af4499e57f5eb086a061c8cd61d077c30cb0991e31e08e825c7064a2978f5b09690cd0639fadd30f6525e4b054a4e355b4d7c4f6562df81fc522b7f960da64bb94a38fcb66ec2bd93afb1184979d375301069ddb7787d0458927687cb87e9727a69b205361844b828633d7c0a703e44975ef9c43f288b7820cd0de932ae652cc13762ab21c109289db729feb0f836aa787d538b673cb1e63c4c182d3149c38176fa7175df31b915daf39e27a3d963b0bbb6a1ba967a96559357c0dc3222aa7982fb07ebd830fd87c65fc37d4bdb6e5d485108da33ace3cd0f352c7d9cffc31dcb824a9674867d874b43c18a11c6ffba0796b272a8983f5797308698d7a9b6743ad765fd1cfae01c50e6bfd65b61bdcde0cdc70a5c0753f9148ef3b54be82a86b7417ea93656ce4fbe91e6e7927551a0bc3d6e2ab7c0c7bd6c989d5d6083c85c2b09be202c60f1277b8c5e471fca623b812fd05b218d42ab8896ac177e4437fd7c784cec64e1eeac701f4e7e682899a419eb152402346cca50d0486c0df11f7194d4519448a070e68592de12d7579ee56ab9640ec27eee22ac8d97e375532ac15965f4a13e671ddea32c388dd31e18065ee1e5a0c93370bb8517c4041e32fef4b5755e9ab0fc9d9bb0368177c347b00ddcaac262801b999ec1b4f557705643128f4ab6070528992595f8e45611980d04cb5e20dc4dfd12d24aad5365d486a224ce2d2571a5b3b9853bba87b424dad8f215432a9799a3825f064a05b5b08cc2315c66d35ff865a4c289c4921864d4b8e0a1a1051acdd3924edfd233cf6d2e4d41203de759660603e4665d2e0b395056d557c2dced4f56eaa6bc8f073c7435e85d02fa89e7575d7df4bccf83140b1459d91fedd59989f4316f84c7a7832c683d8beae4e3923333bbf87260b8bb42ea6af4e16918a5e17410b121c33b2cfc91f4d5c0441ae1625064fb7059f5884698312f857fce99c1a02e757acbecc04e76b5436c62595d4c7c21029e02640480e65591f3771ffe903e34c27726e1c689e127dcd786c68c597f9a17e4a22ab6569e7f231499325ab617c9a1001e44c61498f2a8e7f889f8f22076412a827226318656ecce2c30389bf39619fdf93a485963bfaf85ffcb297d285e8958eb62dd7a6883f40a7a401da79a42325600edd5bf0c36fa9ae5b4a66460f9f556232262970aad43b1c98b9342d376f4f47b85f4ae59fe900cf06bf70d8df0900c72db3df2347de2a9623921d467da68bdb2292e8e14c079c56919a4e27aea5f6222b5f7f1b09ad8dc8d7150c51f15959aec020ac80323beab98e53549ee906c417ad717fe45ae2d30925ba67dc1d08473733810c2efd066a8c4f833acb08abe8fc16a2580ba5ee98fb820ad6415b23b318df2c8e59f6e79a336792672897f5d364095aadfd85415e048e8ede2e564c4ba8358bb99dda60083379194034117521c3f812d826738b90b8adaed60f78d27f89d9470476f2001320d6807c7a0fba42b055536d32fb1dbf7c61f354414d66ad222cb6f551e838797002506266ed35b49dc3a4d39f768858e44de4df804e7972f5c28412db277979a5af11a88724680600a58fb1c8905beb74b40bee28f67b5f991d06d35f3a63b2361f3c95575fd1957d8d6c7e4ab2f8f5a256d0e6c7dffcd170aee7bd7a9b57a1a5f549ef53fa031168edd3afa268efe60188cc8fd9556e6710fa8f47a9b4f5d679a3b1ed098d6cd857494dac4c1cb16af6dc671fca01508efe7265f85921aeaf35bd1d34e4847f78cd22432ab468edc306c4293d367e33b79dc91446256be2ba4e93d44d8169cb613efb4c7187b7e5acb5c29b5e9af6988f734112b78afe428638ea8f9d4cb7d1302146d23712a44976987a260a6434ef65138cd9d2f6534e819903a7bac2f9114418977cd1f19889bf033d61b72ea3b8e6f30ee21ef3f5573ac381a51c60a81c4b896f94d8b11f16f4aa9ec6eb56bd85739649b402006f0d106ce71038c24f42850831b2c1cd9271a5d310de1d78fcc59981bfd812a82ac0b0d9a661a6445934aef9707f1 +MD = fa933b224e0912687b04a51ddbe1383a5c1ccfd2c0c15a3aa8b40844fe70f356afa3a3317175b664cd3e01854adfb1e2a6e20fb2a4720d53c4fa9ba555dd5e9d + +Len = 62800 +Msg = 97fa3fd1e776ca79582bd034ffebae7bc2141db6bd62b4ade507af3febfeee56649c411a2668e265f52c43775f4c0aece4575aeb5adc559f907fdfeb324ba459ec4a5c54d2534e98002412e67db19cfc66bb76c448a34dcccd81aff69b711371792d1ae7b3e114f8c03ac6e823c06b948f67f8ab4e60a41ae435a8c8ef154384516d023c91b83e6f7f97e6e417247f9da883680736bb63731cc451c9f5e23d7bbd319cb93480d3e48362fa442283e0fdf9394f3fc65b91bebe563262777d083f05a171c764e2dc3e16c48b6f0c86979ecaaf34bdc7e936e31212d4f93b91acb771e608cfe88560677ee520cd9dd4aa66630d9fe8000c5bc96021bef80bc432ca4928e9378913674603ec41c69d16243f0b7c18283b6d065af0ab78c5adbea162d48e9d680f31fac3ef0276c2d3f30a100c2428e53eb4427d09d78bcae92801665b41abcb42891fc6884e4829081466c1ac2c5687d288141af5cd7e6d89aa5bbd26699bc7e9c3e03718f93e6304203f3934bc2b76bf91861afab6d91853ebb6517d2cf6c3ce8745fee52ae1d88fc09e62ecfe2e1bcd789f6361ba253211941a09a8b54329b77b5504380ab7f1719c8a231b18e7dcc4e567de7200e923894c8fcdee2a0a606d4a182f58c14a14715b0b640a32de226b7fe77374b1ad5284bc1e8599b4d4d0b89a96688f7622aa59a5290d02759c568bef260bb1f4fa29c98cce19ef7a27e15f14d8982351c51cef24ed074908a8deecdc2c8c6ff2560f2263a87239a58efb2c5fe5a55d7bbdd0fc7d5e3827148a2456ef02e0f7d24c6c55e9b276be5c8e86e523c579851c9230475b8589e6c1cb8e91d0afed91bd61a92bc7f60ec8c8b1ea530a81fae35bcaa39a6468e2cd36f28664263b9d84db1f2c6ca57c239d107e8f3eba2012be61ef90bb40112c239c8773999aafd61a530d5ee02a4a9b865e7dde6edbaaa8605688617398884d311a12bdf6d31282994eb3a74eff6a60cbd7373daa1628a30f611e7d8a14d32f3fd91ccb447a6c884af39a7080cce458b4a53315bb13a1ed14aa384cc85bfcb894012c074a36c6d0756b491f3c38be6d89f0f9cf6a791d6db75a5e36f5160bd27ab9cbd8d2b0274262dd481e4beb028691df12d17df0a40b3f9919a3d8ec0664372980a6a28f97c6587220d3758eb88a159b0585bc223faff68eeffb3a86f756147ad3da847c1e44a15258a881c9e6635d4c5a52f1b4f54122626aa6e38be59059d44cda3d1fc5a483a47803394396f8b1189a9fe251cfa90c3c120c9ba4d9f94e5e740f981f93ce4791094e63a5cf31592a4cd6589fd3cffc456e962a79da7b3b41d2e15c2591aa344092f0c8969af69ca8f85e1b460b9c39a506aa57b1f0fd67a4efb950d8c52194d99b5130bffe2fc4bb279ff3ef7ff60d8362b2ebf523681bb051fd3ee13919ad86acd963c703c4178a5f01a84236c7be070b14afec7ca29f8d8217ece7f57bc96d4ef02858b19dde3e2bec01e638f5955b883a683f02943b620a6d2293ff302eb608fe481711a360fe10c8c8848d69daa4618ae195be2637576f69aa8d611f248a636b8cae2abce7f398fdc3c33e0cd50d1f6ee197b641da963b714b7c232ff511e69fb9c504d1b9444af3bb4c51c5cebb494d2fedf4cb6d44f5efcc084b4ae77219039a03a8cb1f1aae1277c6d17b0cd9678e943e80ae388c264af6dae35744d684fdf6111d90619d4dc3c1dac318d88d019bd83260d0839455ea919af23d5264b0f694966b0ac7f4ae6c5f3031837affa0dbc3729e1b96840a3765f081e65a4524573d3b9b1f99485a771a6f22a43a59cbb61ca64275b885ce9939829739a3a06886b9a8b4b91ec0d74aba3f9f635fc00b94ad7652c833bf2778d6fb3c1e779e05edd084bebf9f85af4f074aafa8335ee7dd3c88d8fb4d59a03c0501787d1c6782f24a78c21964be69ecc9355a5bfc5be7f99287dbf64f7bbe4d8c3c543edb2267ffee2bc6afb5948e8bc7aba86403df9351771964a1814f0b133356d74afcf73d7b8546d569da2fa593ca52a2ab9011744bb3e67ae42afa0ef7c4f40a87c70f8aced770f42f1ab6366c9ad24f19eb1911500d9725a793a74f5f05c1f3de8492d95fac522de9bf52ca7dffd4b8945b20f2c94ed46dd2057c57b4c0629c377aa8af98cc93877f0f2ae830c100e305294ea01c3e445b4dc6a1ad5fbb820d7bf27796e0ffdc0bd9536718eca7fdda559ecaa2b3a590f6001e3fd9c6bfc74d90342a159f0cd5bfdfd230e21a7a74a56a00bd80f44b6047d3577e645393d9636088e7b53ebc25ad7ad6aecf20020c4a2e974ec349f85a54afb885d56d01615ad236d6fc23d775dd90a5086667076ed388ada6f2197329277a887db47bcf0737cd852174b7256c550a88672f575141475f88ec95cb8573c81e108d8ae7c672043bbfeda5626db31fd1c7f3b358a72eaf9d714935c9f6e13d8198dedd18ae4bc9032a65168d79f143ccaad379d3d3dd1229b0e5597a8e1a908d679838764f398c0d0eae4f9e0fcfc7e279300a2e9bf578eb8de7894614c7c928c7e2206970e55741b5f3d8fff8f5b5fd7b31ecd3c81feacb50774d95528fee3cfee41f59dbf63187665a3a16fc0a1404f9ffa92822026eb140bf2ecf0e1b09b055c7bcae561523c7680bfc4de2b7edde3bc1c99770470f85a6e4b35c1112216c14b380d0aaea33e9042fa60b74a3477589a0d2877c95d22fca1165a5231d3f5883cff1289f1c6bd582eec0b778762ab02bc44e600c95c197f46cca100be46a5cea44991cfc54d3732a6fd3bbb7da9f776854c489e9eee3a66c1d6c06930eaa60903900158b3972ac43db667ef975acb28a79bd6cdb494042794dd3f08144074cbed7ac7c127450661759026805ef5c49d75ac070a94ee154652485349e2d8a08bc4627b75aac758aec122ee1a5f1b425982055fd1da4cdc576c90c3cb2723a7cd2adf9302b8aea010b2e72519f23be2c14f2047bfdf40c7bf565f06e85ba20914834a84d4cb6b6b1bcd45620bc2c814795f9565212e5a7602a1fb734deae422d6505be7887d7e184472c63b6c4b5055f615cd2eb2420a55b5c20ebf587f5aa397245c318a2957461f35f207c7f65535ac14401acfb4c0e53d48f13184638609eb71f3d94669a762f099516d8b5e57222fdd969fe5e12eb32db95b807e41f6a427cb9b6569b8befd8d1f5cb332ddc6a9d5d42944a161a43dfb75a61292951d20f093bb5c50913e74393a8c9f6b0f344b529a80af6ec0b1e42b00596e6dc77a0eca5cec34977d8675897d6988706d20751a832516ca58e844310bfe0a6c738dac09a9a674aaf8276ff24a5be50f720bb582309f3120c4a7eca1dafc5d1b03d8a752ec6293077ba1d208440c5b74b8568b4e2547852e8e813bf21fecfcf602eb7f2aa7a9164982863a3fdcd3526c9ab174c2d3c6693000f4c0a62d386099fb26a1f56e0284cda735070d87594043a37d0084ce9473c1d682f93295771e53471aae4791d75510443ec705d5f6cb966d499d08682a2b7079ac743bdb118cce9147f295c5c00dbe0424089d3b444ad15287c8c2530006b864e1900680a03278443f1d648c35253341653a4849ba5480fdb80246f1ae8c0622c2fb3708abb5ccea509d3837af21fc9672daab63d16f21b96ad80ad69e21e62db10451e58c7d58fe3ce0855aa68a967ded781b2c11f1303010c89264476ed5004c49cba9daff88fa4495e087b3d58d5225813c05048138dc3a42524d42d95f24e54a28c80fc2f959180bbe314f893dddcb84627121a5a82847e3ded408e7e1062c73ddb2a35e16b527d092d9e21c445b40004312e1c50a9eea0bacab1221174e72557f1c3e275d78e482e2f404152d651373424cdd75dcca71482034f6fb4e58676d714728b55a2ede7143123dfa5585c65be4916d1eab157e27fe041ffd02ae7c3a58d5fb9e8941964a17a6e8325937c9289e832945d21a71097a9b05ace0cb113a9a4b3f39674b7c6bf544ab53a4f5ac77f4948a820e43ea8b4a5c30614538d6fcba096c2c70c72165505dffe4c539e0c87b3819399c2c6b1bd1da38d0cc722def3cb2fade322ef5b4ad654e5c368ef67897005df3283e4349a5977771d2f1968096ba73c527fd99d880fd2f30756f5e26ec6fb1352ee423833a1684aae551915f5c925f77debd6e5f6f880ae80e559841cfe8bb860cd88c5703d9e9029ffcbee9f2dd267ca2d8e3a7cd987a096dcc3557c5fdf55c6e65ee3397440d0f5f6d6faefded613a20faba402f90e51b205da5e76331c72eb016a9b769077937a02e442ce2658836e57d22b70a13e483a2647a6f3c06d9837e857f40fd76a6020ea9acc224b804094ceadd8ae193f0d9808b235d950f84d1262cbf7ec9242bf4f78a2a2d59677d17e3ce4b2a5a938283273c1141229e51ce4366eabf50826386f72a4cccd4f65be92691fc13b995122722f1f4a84935d8a152dea1813833f54e8a14750f4be72903a1c050e5930b481bf0372df19d888210d0fe4462c49b49a22cd3438302bc4cedd1f3ea0e8b786d080b863dcb73f8d6835a4073e29a3ae9386be138c6bdd8600e2387380ce76f2941f169948480f94e7f3b3f807f3d955c57a3b8b528c1ddeafb3304cb4f5b51d5703e5bd2bb391c727b00662a97033d0ba670e44947b33f462b7ce704643bc32a094ed768ee00d4cafd563eb2d8af948fab6fde7592067f1a156dc883da2d257f83af66d78b7ca4b07c8933b9a2872e40bcdd11caa6300fdf4f8203ba2f941b4e65dc749f12012edb8f35efbf832e7cd7716518a8e2c483fe40564327c2f4f73f26529b301032b5949bd8bd34f8fa02ac6f747da0d6385e0f8e56e14d32e45b9a4bae453b1485eb8428de46aa829e5247eda79b32ff00007b901068ab0dd6bb185c4c0d008d7f3322ccd2f690ae7fee32926b1befdbb01ddadbff63c1a2408801cec85d30e9832ee8ee435777eb1328e4e43b5a37eacd08a5e8805d119eb6551f198fa03cc746315f03abe3d0b6fcb4e76994d09baacb43554c5faf2b51acb4a8d31e8094951cdceda379263b9090f4a28904398baa1f70715dc9e46f79a80937720178c8e19b942d5437890906847abec905ef98575df272b37b976e651cc5537cc4f35a1b26f9968c6396c9972ba984a0165d4230eb5bd1e3c13298a28f9b8569c58ac8c0637fa1c289da0db10b23acb4b21d09d56c0f374557308ec074ee35bfaf99857fb598d78d16cd45e2b75b8f6d65a96fa334aefb7e9a2ba13d712ffce4dfca1087b1c7c04296eaf2ba94c3b540ad7ce428f99d96e5f69e8077e8e3338fc2770a96dcaec48996bda49747feb6b50621f7e51f6da22218e3ad1e60aa8207143ad41b8a907cd872afdc07256efc60ec131b561a91a5a96d95778f5cd850e131700d94602f51a5c74bf998d1970eaadbdadefa7fac09e2614e8049521f38a4a6d0f78fe1cdeb78111c8dbab0f9561961e3b340a31f4763905947ead4c1a1d7e0b8526c841e92d5cc9c18eb68187b230ac828d7595e06b377604ed2597214e17ba08eb8cb73e03576452bb95b76d65e22f2b01cd6fa904892de059e54a31a67d4240d032c706c1d9a9226930f97002166edd99fb077aca95f2cfcbd4ad71ac196bd7dca3b969f04961daa06f8fb8123332415ce7a57944c48f7949dc080ae851fd7218c5d58e17115421683ac06c1da143ff527991cefa7eca87dee4a223e28ebfbc8a81639ebe984aa0ca79d6b5a9c769be839a12a2742c6da18fd5c4e523397a5a3cc0aac06d460bffcd1417ba400f6c26f830721d3b343e6e6695b67832b8f6f73668f31dad835ee57af3cca469e013e0b824f766d60006976a0dc0039775fb397e6286dc05b70dfad7ff3c9aada22794cb5feaa6cdf68cc3a3252aaedbd651c81e97ab27fe4adee7ef1eb1c592be71e93ac89304a9809a9b1ac63ba38545bf4d1eeeaa231ea59a54c739714ca29ab6880c4639a9f005f6c7d6d63c071d290f70844ecafaf02e09e86939c558659fc11949c325bc2ded69eedf3e75052bea07d85aa154d4f94ef24cdc04f51162355943f926a066e59fbbb83ee72ec238f0702ea8ce90d8c36d1e282884499e21c545ae2557f0cfa285b4cffab8af69cba2111974bdc62fd5f45623569f09282ab54e03d53d5d1eeb061cd81b983f206d6ab442c8563e00b74960e56c3f7cd6066f3cea0fc2317c498aba7eaa71280fa5af1f50ab813f74f2d60417754bebd13c59d70addcdb21043795766ae2ab060fbda1bec262613b30d020c6176ab9e4054dde60c46472a03613cbb3b2fab2038f75170be3f2d00e490343e6a7947dd4cd66233975316df7c2b39aea336dcc0c2227de66d007e4f3003d664db8507f01d4b5084540a231aa42ad9f846c9a5d72303c645a2710148beef4f445ba3d31eda3b0ea2eb755622a2e58460cef3eeaf8623955404999f32b7dc07a793da93b1ac2c0655039c97419fe4a3b0e0b99f8e110850dc3c803e57425066542a322fefbaa89f644485cfbdc3b09cae2725a0bdec3c61a5f12ec7fd88d5d415c9b38f212d364199583ae4df35d0d923483ed98440472e77ccac236db0f2b9b018669b8e2c5f54bae4c3c0ef1eccc0d6ee0c322a35af211a750138efe3307deebe523c80e0a9409093264935a52dbb91bf9894f9f2fea0559335f0ca49158897647f583d709e6ee30a6d69f8f37a311a63e9e537a0bb15f2ce513248092b4273b1f6d80e05c6447bf4a007822f3b8a3a83070f2d666fe7b7d05be5af4cfa14494ebea53bc7a82b1ff7c50b1982f92db9c7fbf8236da17e6d3e5ef348390964e3e2dfa50cddcc8c99bbe65c06143a845fd6cc8a60dcd942dcc35f435bf9e09b071662c2c970bacdafe90ae4910c89f6f45982ab2edca09bcb0568bd30b307227e924ee3b9a7fb582a293a8a01936beb3ff72645d3957cf103ac80490e90075f10fdabf025ab1693d1227d36a0d06acb0959bf3f982ef8ac4d61b0cf3fb866bc840082d055a393e86e7ddbd0b4ec0dff1a265581c5d099346fccff370952afa0a442da6d91b8fbbec7e15c41860edced3a07f1f3a2a2e9f131947569b5866773366cbbae2112d47ca6f7096f5e5f60fe31a4997d77cd6f4c5d611a4e8a7e189c03252d7b4cd8a98cd167e9438407209ac6a458078b78b3abb9ddf7ccd25f4985d31639bc5c33ff5510d804a53f2da52ac3b0337927cc3e770fae13ccd35483956ee6e659974a603f2df3637ed8f97514ee6f34bb93f19719257c7637d7824d349b3e3d3b464653b2ee5f0db497941ac20f8a62b5170e46f7c3f029f324142fca24c64448b04e61161dc40a31c4261c9af0a8c550fb4bd47bb3b133ea0230b1bfcf2505691f8b10d380cc63dba7d601065872667286d1c80cbc689c02bbff5c7c65048887d924eb51e01d1f9c88cd536d0e8f4c0401c8aa11a5bd6d2596a8b767ad0ad388274277f9045f465bae339937dba87fefb45803f43757ad3ada534be971e0f056510d3e31b63be100622f5ccb87650819e7a7591c3adf6429d02a9e6b772de7d79facc762bc58f772ece92393da6dee6ce2e037f176fc9adac0523a53889abef559489af5df60909b948a76f69c6939cfec2922dbb2575834f1f6a70a6ccf7f96c6084050e7f8b462a23add5c9400f2294faaa442b898a521ad3c6bf9eb7332a42f1540dd9cca6caf5d20e12d8bdb2064518d448e4e668a893a4c1087cd2edd06dc962203c67ebf6a0e6509d249a2cb673bf78b273d690e52e14f1e1bd9aa8aa415b46f292cbcb67cfd30deb196fcfb1a5512ff764c4a3965ea6d1b1fd88c40662297aeb9972b58cb72aae7333a91b965e6062ae145b113aa9dcd91fa937f08344a66671acf73ad40b5fbacc0fc0a0c3038fb94d1ee45a50942980714cf29e9f6d74a22b49c3dbdc30d4ab5c1a50ffd639118c3af11aff66b20f506d55732eb940f6a68efc631913dc4bf8b9cfd4793e63a8541e174970eb6800d15a5f24316f63befc03314f630942084b5bbcc5bd6a17b6b96d1e0a3f6d4aa08bcec67047305a200b3e84f35a2b26abebb84daf2ce7d9bf248e51c7eb5abe60d83127f1c09a78ec6c8763f95f07de9982661efb58460e441e187f2ce53257c44f37f0234e0c545688745acbf21dfe7387cb9d24cff349c81e91e283cd929b3d6939bb8f30148100f78bd5e5a3dbfaac648f44c5e47df0cd9e612876f4e9ed5ebebcf6802731637e324471c0f4d047b6b0f792593654b7c7262cad710ba6e28aa8481dc083e19020b1249b0865798a24e5bb22595605e3373e4b0e0c62680f53ce51bdaae6b37b9b0ca2de06666626799b306130940027b05f52b693a99bc83c996032b9c015aa3f9d55975577f4a1271a0ddb99a0e1e9a501ca33c131b0a1c7820a397790869090fba373703ac38ea00a9a0ddeed199d97be1801ffab45206710a61e5ed894c3319012ded0ff414386e56b548ad915d80afcc2bdb976d7c8adddca7dfa28aeb694033a5612660c644e32f85c2805651d713660a38914d70f0e41fdc4b3d162ef3acd70659eef6375686bd78130f295d26d03686fd915c1780ad5a67f26932fd188475b89e0fc04db67f87f702011169b40dc408f43ea357826115b29ccce84022f19523f832c6f1acf7156858fe175dcaf399f6e34129193d27d924100e3fdf571ac0af2eff0f0c7f16f034ddb04221b0aa3cb99341f746fa282c2518d840c200287dc40a1da38478039fc459bc9a9eae5935bacce713c4018b991d7ad2f1d1644255ca52358a43dfe7aa7f94cd27ba0c280d6055db877d9a79a574ffa35cf5cd91cf29cfeecc2ffce99acc5589f25e11404b12f8c45b570d1ada936ff38914813c734949f172321632f6156698027306c9773a7b4a953ca195bfe0926c7e17c96cc99288e5843376e946c18da35fdf33ea1a3fa7163f139f13dcc430b445e7ed495a6d53730819653713389352128ce0ccbb8944d060c44fbbbaa81073e66a35faad40734308ce2944e3e1404c22605597e2801a200136f9b6e0f2fb52678ae9a84a74b1fc8b390a3741265b3a9745d972178cf0ac2953e52bd60cb9f8d22e507aba72d3469a425238b26eaec37a22b685e315901fe0025b43255c120f2e3eb39984a1a1cb3cd14771c022ff90d2de32f9cd83c01f2e2ba226544cce3c84a15a2c3068e53079ce3307f2a81748a76396f65e3e49541cb603fbeb42b429db418d5c4731652059215c25d069be9401982aa31caef368b18cc6ea73a88d7e3b0594515063ea41e5b30bf1e3cdbb1ce9653529913b8500f693331d73e521e2add5b632d3653c3b246a8793b23dd88766b201b0454ec9c7f1b491b9736138fe37993d2758a123b71f2f1a34c61fdb7e8167d45fbf4d8562acd82ae9fb849a7ae4396f5a687e675ddceb0afca5dc8da8416df75e87a2827c2fe544d394b60efdb99e95f08a64cfd46584a012d9ddb6aeaeaab2d625b388bb80c5289fc55f5e2fc0aef61447bb25c5c2e4249fea891e37d0074cef21ea5fc7a95e1e7617e750ba0052dcec26ec2fd7f9f1deca5e478cecb06c0fd004aece49b29a6d8011b6ad4381738da0af5db6b3149515bcbf81ca7455c241a256669ee9a15f5fe43b343c754cf752596a7781001ab6139c949e9e79c7ef2b8c9d7c974e80973acb1dcac7f568c8733fe0a25a67143e1e936606d1a00fdd15b7635781215629475c40de146eddcc38799847079009147fc9bc202b933472464a2f5f24092cfdcec02bdaed86b4ede9301acc512201207e651e5673fa3e98086e8afc48af09fb171e662418e5f411cd8bef9b00c6054a6290140f737c3636a14bfb96b4baf50b699f7a265d34a5222db39e1adc231b7a757127b4f1c223345a080a9531d3f9150e6bee46861bcf0751cfafb3ace24e98fd31deabb6740d797bce3f6187a21b014ca94aee59417ba88108abcd3aaaa38c43f7c25d8a39fcef4cc423627ece65b76c811785a04fb1ed058619cf4c24243e8fec5a3234b9f97d15133d01dd00df1fb51cdb7321ec77be24708123abf7d89729372e937e9d0b0b1de215a46edf902271a2211fa5c1d70328ee6b301fccc77d5802c6e62e8d3b82ad5a34b5f71480a6e63b6ef3f376d8a4572a605e704bfad96572ab940d3090c80da3219a4146b7945e0d4c56d5b28289fa49e715651b789498b16406e32f12c685e464bd141e3ed51f4342b0111dde9b587689bdc7e5499439e779a37831c9645d45868438441c4f7103d96a7060f3c0bbd7cdbe5e5076c3903b72d293dfbe8bdcef0e59745f59ec9e7597eaba23cae169943b81f2050608e5d6d8fdfee1f8214b0a84a39117fe93edc30799b70d69e7abd65b6c4bab014a7fe0338b7fde7f0ff2bd71c95816112ca512aedf2ec7dab8c9c5b6e830eb7073a78009e4df7f5c3e19315c358e019d9e0f8d1625e9f9253e0b88d35e6b6d5a6aa5dee470e56b9695088ecd4efe83a7d37359c6d1ae4a505fb9483a34c2d8c717c1234b965b4a35fb06fb4c7c6f4239b219a1464d466265051a2c74d4fed5bf624377c7c107c6425a5da06227a8e65a23488b1fff79ea6b17775d08a4e70b4b337201df56b385c39953a696b77218130e493fd8510e8a6b7d18027e0e4423727297ea1bbe252fc3a03135719495806b5b65e6f9aacfe96c1f45445f78dfc43d07fa590361266d47573f747a27d9c56af3e1a80a7182b076e5464b324c7e97b2dae37720a77de759a6c48c39d6068f18bc08ac9410f08691b7623e7ff1ea43dcd49a6cf9f9f44400750aa5360ae3887e9f211b1feee114c67de345cfcfeb71c0db665f16bd512c45ac57e5fa2c3956a384731c31731d021c1f0f8aa84e48c968d89178005d5d492e33f4770ca2d0a18f5447d854076bf79c852f3295d6cbf2dbb461e13e3fe040c6f22981f4d670124bf5e5770f12949b4d978a681bcf3a9521551fbf58cda2bc12d13d2c3b2ee150de519520eafc6197373e6a52c4a15e5943a5123dd76d6a631cb97a9f6814ea04504f9ffb6e2d97936260151817b4ffe7488b8480428901ddeb90260303ef55d6aad64a31220e0136d7e6d4e39c71e5e638eebbb3 +MD = d4292e3e757b4819873b554278a8c484e99c019a18d1073459c56ac454c2d518298050a78e46e2af85b25e05fcff6ad5fed4c436577a90a3107f25b99f1cc999 + +Len = 63592 +Msg = 7d130ba831a68bc3532c78bc6b1a47c23e3772faaaf37974d2fb275e7b0a1677b60275c7c03b098e261b727a2ce7b01c70d8e59dcb725cad7811cbbd78c5d56e345fd34965ccd4b031a2e21496f988690c7c91d766c011b3fad4aaad0119084b4153ae96e901f513bcea51f471f9d7905a4afc114585a06ca06b4b97e0aeb6f623068d161381739d0e1b4781858ea579a26bb0b12e6a0fc2b1fe36e1db2de756229ff831adf55638715c4a239a61fb0c2c073521ea16689c77b7f4f5bb3ea3558847774f7d04a7cb2bd5e4427719e0313f4511c74133b3e138bc0c394788f3da9b2593d84d576d3d85af9c46e55f5dd0254dce0dfa66f67b3d35061749b4decea562d334e395b078c712fa98acdb79d12448f35adf593b51ce4b6bf687696d17ec25c0cb076778633925879e94343c1c855e0915b6b4894b3225c13dcb50a79eb997e0058375cee62311cac16513ae9990b697a8481ee951b3ed9356db11944b53dfbe4b1e66b9e9ccfd4c69e61fd8318c79257a5d40614b97c866a87f533c070427df039fe342547d1293ffe001c1cac3ce3cf3bdc2fc2127e0c49b81bea8b81294cd97cf93700f7e7829e91b60714d7bde637b2f4bbfbcab5d3497a8fbdf47c6500f6d761f4b03175696915fe5f1a3fdd0227a7c83b4026b673f04bbb2e99d68832def5c2edb1690d4605d743848b291cd01586c14e2dcae246b4a838acfa04054af8348692931301c11b721007e647efd897dc7a35132bebf43d1c82c983a95ec1e9303773c3d405330062fe59ca00e87415255db0aede15e4c0251404c52b173028656021c2008a446b26791a94d8794b13dde6114f3602a1043e86df4d0da10e1c406afd2c4d035da238ea9ad55324b62a729e0772e834a16fd535b969b59eb45b5de28650fe02e74c06fd8b19f57d5dbf9fffe3c8591e6e6995bb33d9d762db5c1a515ddeb7fb89df3d1c4bb133e59a49928636adfd428097dc81deebd78feba50221d433ff7fbdb247b15d6992e0046f16cb80926923606136240b3e3a985dbca1ee99ef38e1eb9b93674071971f2486793a52241143865c2f1c593f74feba0976121f6ee8d49bc1bca89587b4d56326564d1bb18a257aff13c5397e2b357911fb36c531a3ca66eb2fffbd0a70b548d52a8e5df9383ba6b0a0c93c58a1df237cadc72be5ee25a56e69d727786f216e0962788939a018b2174292d27d8d4e41901a3dc3ea2c890fc206b9856fe4cc1b399a963e11562ef59975bc8c5b42254bf2ad252dcce376ee9c6321274f85f808fc2f61ed0ecef109cdb6a0ca5074d6ab2af2f7b9fcb751ca442ba8bda5d7579fa7bd5606807f01671a81da3d1b79e5079f683008f7fcac3b5facba98e13d4d47e2c10d1b24ead2961663d3251ae5d2b9c699588b4d3808ba5582d149a04c4baa33b6d1ab5aa6d6ff37d92642bd2d226a46e2fbc17afde9bfbc2a77505168f53f011b5e37a017a13af55e4de690d4566186f1744bffc2b1c3fa20374d8337cc6ed16afd3073d1a3b1d56fb4b1346fd1680d316c7b4a0b035fa5f07b81a42d23c22b2259366449610c6e99f512f65435c6502f4eeff85b50fb3617cead32bdadc184eddcb9f0036b931749798c7515f604d647960a79181d1f21029b10cd6dccf5650a122b857415ee661acc9e2f4994bc3616dc5b4ae5ea43fd4d8b6cc2b1f3c64223740bb3301296e16a68c893538454c6197c72fc392b023154fa11b12ed4ccb2a67ceaf7bbc4050fd4d88c3fc867572ccc00c1fb8661c253b571901738c2612d2fb749d17bbcb147c68669831c904bc0ab03c8c752211ceaeb8c6873645f4c181b9d98cee46f343fdc1cd10bd4a1ab2832f007ee10eb6a4d63a51b44360db619e6ba684eaa4df64e71e66348651dddd9f0500fee67234311ca562918225057993d7828ef21fb9ffa248d90b752678c4c7f9e3136b95b2fde6c0a024dbdc9a91c7c616b0effda69c9607cd9d721011f061d551c659c0598e9d54b47737ccc131a2ff0af4c787d0c42b22ebf36658d1e7d75ff41e963b516eaa2945927c3ea3e28c4c056263055ffec963da143747df338f6071230b4ec1257307fc7b947a682bed73af01abbf7bd3d8904208cf23645bf39f73dda041d13962b6813c65c837952d3db1d987fc4acac072cdd8143487e869e6a0553e5bab34defd7bddd97038a7b472b3f2e006f76be9d1218bf0c471615bfba092cbe5749e4ea69364d7b995e9ebda5c559c23a83ebb75e6294a19494e30a71c9c302757fd1c7770db46ed73e3383c5509a59c86cc9f25c5bb097c383850b2bc7c56697adbaf39bb491052fd1e04624516e1b9b89cfbab6548173566a623e4273924f305bf6fb31bb71c305821b812d5853ac1663638cd70d85b8cfa20110506db810c2132c4af392c52d1af74ba15ad5d97feba23bf548b74bdc91c2e82dc006b57fef6bb16f3bcb09a7c28a0743374a6dfb6daeaf70760222533f659de32beef8d0fabe2cd494d4bdc78eb2c4c33d368fc32ee1347b097ec7b13ad288dcfe7720b88682f51779406000e21a0acdf71acd5ba1f271915d8daa7b16c24f77b24f9b9b1572b0b4538e8ee86f285fbfdf779529594add400caf3925559d384fe1d8e7fd19d5d617de2fa8f288561a1560cd85b0d772ddf37153f22479cbf9d1f79384531654dbce53943c93b03bf06b259d0d868ed2fa48262c640ce5e70a8a7e100f31ad5848547e6cb8509932492d98569b1ef203c8aab5991d534c76d0f5ffcec71d215892269909aacd85e1aad9239abcfea38dbf978a1a7c7bffe3e380c7307a7a14ee4fd13e0b924f18c28bfa61d9f18a15c9559b3e31000b82c6b8d79ed567dd1a81e7c0f7d2fd79c44d730ded84c755bb5f11322c6d56667787c746d13e3dca94abe09241104ab21aead680013bbce626b778d8ef3fde3130bfa57af8db5aa705d4c0b1941408ac7f334cfd475f20cfca5af30be11905e050c6d9d0802d4d16f0851eab7b7ec5bd73bf4cd24a7fb15728b22647cc997be86a45bae401a4937ee74540dc61b100699ad74cbb650ded30c4757928ec318eddcfb4ef21f7e1bc634c8ddde0e14b27255723c2f5319a12d11fed620bda61ed24f38cdd16dd652648b2d74c4564bdc8953b1d463c3aa4e0acbdb2878d11aae55298461b3f1c9f7fb39cba22768689532da93c5cdceaaec548003d40092c9d25eb00690007400107287c9ee6f0a12e655344095d73cc284f279a16222c85891d52ee7e520be23a8b1bd50e10505f1d5dba7dfcfe8d4991dccfedb5b453a72f4a2e94ee57b97d9c4a02387014f20ae6daa7c99f8675fd8bfca56d946d0b1bd01ae2a641a79c7ca6e270197d9b625f1b3abfb959abea62672d4cbc4ab2df5e1c2df38500b83159fad2e9ea7eea3da61b1c66bfc3c546e2c3fd2a3c412c3ce873f1e5d3b40ff4a008a9d43e0ca7c09a76ee416f5679182912dac270004fa04577f54df4d42572e940b5c386af4aa786bf2eb42a9a2dda9fe454a9fa1083a5ef88a6707ad98f189043b53c56cf496f05446c5383f75a0aa1b8e9453cea7eba51368411d84ca3723f71f6b320e53a7380a715840e068424e8f10738ab06875a14f22c869f9618fc416c18ac67a98441a367b8ea1b4042b5d03d3cd8e6fd3411a55bee63235e46333092899cad54bd75c806d4da5e2d0c49f1ee08ca53270b5d8cc4782c260db1a39775c81864af4c7c78f4e7f92935573db893e961821c83aa25dc2835fa1ce1c9e09662842fe1c7c230c260bb1ee19a1dbebf5d52f66623942b039d3522046d12a664d78461c4a5e389efdd94a1ca6b765ed0e2f3126c6187e6cb359e306cba1a4361958d9ca07d5cdeedcd1a544841b4237908e688c7d411f3939fd597be3f4d623d2af4530da49aca3cadb098f39373a7083d91abd0e1aedc1d2a7fea6183286d38167d0784b229b66d0dfc0254f721440eff890e4010dafa9863f18b0f1c37dee2e67c3c7e2c863dff5c5102d4e339a51ddd21227df802f9c5dadf0c0f60f831ddf97664828a3ccb5417542cfbce492485451e7ae2fdd334060d9ceffb07f60089edf0020a41b9d91bcd79d3523ecc5d05d5c59a2798b843d96acf995a679db567227db7adf99a01a6fd46b840ab3fb8fffdbae2b46f2ea3c080cbba96066bdaf64573d7c5f839bf96152f2e7faa1fb2d42b72f701c7a2ce5bce25a6367afcebd7a576f4eae4357d59a3a7c847a1e8f532ed6249a868b14dfbc171fec42bad625be0fb919543f9c5723754f8312927da9cc21d5d0098d68d31091526c79f19d9238686205d7e1312703eab30d4a658ed62380893b2fe8f168be3a3b0a95bbeaaaef48b439c190e0ec4280f24aabff8a833bdc8a037f047747d0f922ef1d7f8715eb99f5de99b36f4ee9215361bcc839571d1b1e4f814ac2174db54e4399a73a7c34416e1be8b4a7f7ffb41d7a052963fbd0278e47be2099813e58082d929acc87d32a671935fa508c8c2099bf0f88cf165ce62215bdefc52daac998d58fc005ddcf3a27ff08ed32b8994f0f56614e4651ca4221de06200fc299f046641881ac27305bf8f6e9f514212c28c66784e490542122d5cd22193ce914b55a02b5458b0cfe742026617ac06f5093081bfeb075c6696d84079844174921001bd6ef746835426ce8b6f7e4fc4b0a781b99591cbd4fab0d77b7f008678bcbb9d2094d760c49042d98cf349b915d64bf480a1c8f2f98eee9f603b3ccf35617c8c7c258b33ff14a9e78989f07474c6551d796d07194493ae9481368fa84530f15422a9694c8d51ea7d03ac091e5c015141064fc29b40a97f5b71097f9e229ba898b69917f719c8730e7dc1f9f35637df13b9d282157810ef58922c931d581200ae9a6d1dd00ef8e2106a7459bfddaa4d09f68ddc04559a6d10770840a25034a81a60adc173e75396275c3b9eb06d0939a85eea16e45386871792353ec99563fd708bc3c93f3d792dc7c5703f918eb50353557ff9321c75abe2762bb3ffb2307f258e479bbe7bca175638bac2bfbd3e58bf7ca7c979fad869e5856466b1111abbcddac19f6e1cd6d1671883beb76315983136fa2e38892f4fa56277bd8a4c9321ce13aa6ababb2fea8ef7638a052adb504d06ff8dda320abbb67fce2ee7bf2a4f9aab6a8440b125c11257d2bb157ee00f878f206eebafdb3c7d4fd041660350a3d8149a528ca95903b5bc39d884d9d4246511f557e93d11408e55468b6193a6bcfae1b27bfb0e4a10cd973168cfc6184d6a41f6cf6f845d665e12697386fa8cf977953b57184a7976ee6b31c252ce3cd90b81ad3bcaf0002c5129e17022a283e7d2a19d8a610857a48ccab39bba4cb255cd737133a80aba012bee1727e1261c169089716c61a275381d185f4b62dc09422479eb3d735eeb6332e1a2f12eefc5f435cf2fa396b3529033e66d57f8f6a23ca51783bfa94704e10aa6fd72888a021f36e550967cb5605b55b78657c9272d93c3ded340d67da6f917908f127a6f60d6186e6cdb90132ee7f6fe32b16fd80bf605324257774d3229ee50e057711a52e76eccdcd95d772ec49c4cfb0b59a3bdb1edb4696a084046e1f34a99c8091568918e733916413be07fba0637ac22f4c375f1c7a0ff05e155bfcaf003da9eeb12830c140a28f7ebd487e4cc713a3855adb095fe919cfccadf11d9e3c705cef5d12a7c01b877ce018b6b8102403c2640ecd06ecba3ba59474396a4984bd015d034f632dedc89501775a9233a2d0869410173c0b16feda7f143accf701adfe004ae84e50ddee41a8803af4ff680456dc07c1950425e9d65532fc29f2dbc7bca0dbe44f701480e79fde60c7ba9f269c059cd1f81e0e8401de79886b803993a3055d4b4dd6b906f1ac37d4f1ad6ebfbfd876514ca2fa57c4e18ee578ea439a1cf6792532cbf508c698349c5c20fe56271a3e487bd810eb85281c1b3a7823638d3dd77be595f00fce2a7cc2ee5a76733c969bbf6c0879c7ad79c9339771fe775fa01e544e7cd1a2712cb84e91a5ff9f651336bd077a5c73a59d3d34791fff5cfbe8f7b955cac14a17648f462c47c1600d58b64a3476e278d45c2126c7c84b9cc7dd09b1e2c5e78e289caab4a789e341992ec46edb43335da17d1d1269b50dbf2d46fd44ddb76cf60c9ab09feab38ec7725d0832e42a76aa76cad8ff462e6b4b94ec7a7a2ee6770a2b274a10dc0de97c00ad299d3773d4e8ba09fbf5487a8dca6498295cbd9b3153ee0a200e67df1de7abe6d0b8bd66749ed4032dfc56e39cc30410b1f1721dc158bb0dd9a172705190dccfa48a5c4a7f542e80171d58afc0bfde1cbc4236b650a1fbf61dd1e609ae00f9314e1bfd691c922f48615f372720455986ef55efac06b7178e96a7a9f25cbe6cd47573890974e13f22b2cbd993e5dddd15f43487480a21759dea2aa47382529b80c29be673aec8c6d7b267273b360fd29073e7e4d285677febc163bfd44845f0fddc9afeeff3d02c300a3d09663c64a1c01374f0929e129c3fc458e35cd71ed1126d78b7c46b7fdaf26255685e1f63b06d7de591cf7ea933629a13f6545765a8891a3dfb3c3d6036e861b52a690695685e5942b1d34cb4ae1dec9ce104f0a3dc288df2b19d92f8a9d9b06739d01980315d4e9137e431bc743662f98db4c85ed5b86e9fc13091d19c8cf7737bdb82ae743004dc0b4b5548ed75a334e1ac0a21fb00644a123d637275cadddfdad166a797a0242a1550dfe081a45855c433dc71b6ca18fd8e0c2f639e5b0ab53dfcf0f1047556843d3af80c98892862209366d86edc32bf1ce41e2d7d0727fd8ba24516217741f16b53c7559aeebc65dc12d1dd8bff5999a40f58577c96dcbdae0c909e586e8e7987e17542ef99bb65e0f9450975fb35910fd3046901cfd0ff8d82f70f1021e424792d295cff52ce6b1490e9e294986fb243794aeb767bacca104ba2f3b059ecfb297f0c2933e39d7e601ee6f2519eaf0129485366426217271fb1bad1a2de4e057f1f4633f113cfa6aced64c112d49c88a98a4762cd4cba1ca2fa67324d78b14a6454fe02a2a90debe0438ad54003df4eac854e657f013cb4816fd09d19efbdd3be675c1caf6efe56e46980b844f3205b18838ef9c04847f4a4581e9a6e0a1ba777a0890b7e2a4beea0a76ff2846c06b8d7ca32a5f8eb80e6f4fd78b1b49273ce7547ad5779a49bbcfc447f096a36396ccfa260f28fb0919157a5076b53506c51a2a4ef8607a697c6e18ad7875d18627fea554066ed6022fdb69af34fb309af37e4ff78228ff6e71635bfa0f4c4dc29fa0e2afc8b7ac3da33fa2263e63d88e488259f70b37b5d32b4e22c01d6094835e42568b9e99fa0623a09867fb65794b24d4ccdfebf32a320a6ce1923b793252f451658a206c2c0611acd0e71496af4c18d41d14ad01c905af6e3cd2d1eca3abe25c942dc6c4dec80dc2d015e27df71ba50ecf37d6da1ec88ac0792489416518b8d266e92a3a6ea678710a971d61cd3459e357bbf1f297e52ce24ae9ca0df303d841523ea313782bd23604ccfe08be2098004b0376c1c0f5e66216a50ca8da07d137eaa0ca0667e2bb90433a3cd9365affd41db0edfe267577be60e8d9a8869f341494b21789da5584fe4a613239b26de1ed4446bfde34ee3165be27a99395346165e4e513f43beedf0e8ec476c0deb3feaa5337750888caa3e682e404e06261f9aa5fbc37fbf9291a1f84f682f507d7a699cf05a5f37e855fbf539064158a925d6079aa0bf7be9ed6cfc159ef5cca436a3a2c23bb2592c8c55ea4cf5fb98a501d16a720f88de8aa858dc871045e9271ba19df342d2571ef6552faf35032ce35a93b8cc3961503f6b6d80ede7a70fd0d26a77c9994697873c02acaaede17e28d925d7f046d239cedeb4d08f4aa3a6650306168d6596832e06654a85451ef43f268eb1265d630200a834b5b462c216af567e6486d14b82ddfb84ef876641f8efe8d62cb6a69d119d72f615a6578bc77671d947fe02ecfb5ac36984f978d2f1ffc70632e74a07cf6de300daab50872282ff1fa93b2301586e071cf223a25a47386d25aa03712aa437a45cea0c753c8d9aa65871865a1200e16fa31f4d0d6061627f3b7b50428cf9c55c122f11ef3471880e8d8727cfa85b7ba208f5bfe16ca945a8518f17e6b734ddb4288f01e6f73712e0c6d366ac4ad10449535bc0450686a88e6dcd9f8533bf4854a8f426810b4501c4093c8b1681ca430b8a389a61b76054d99a1d32458600cee39945c6e9fa051c6160addd37d4ae0191b776935e06a01232dd6716513a61360a046a2a464cdd2d60d20ba537cbe50682e1fcf4647caca841409394cfd7484a70f04a9abf8737fa68673f2c3eeed71a8711b2059a9feddeadca8af4e8e31fd0be65cf5d7c357a4d222831b773c6ed05484e800d29facb7e1e83327ec3e84d919b6ce0bda6dd0eec361cc991feda8d8e6ca04e563912af4e3e74747a896d3a55b00b650065085b9f4b4cf00108b2207f9c0f0426f171ff18b2a4392f61fb4ee4a44c476fe03dc93009be8c4eb9d70f9e7fa48ac6799e25a2251b67e67419f10520376c524004c0651a7c86c138d0c1b4be66c87efa2187b53de2e7e7e94f8b82ccd3bdf1ace5a808238ec7a2ae259d88005ea7959c838f18a200a27ae92584214f2822934d69e9dfcffa3639425f0de4ee920d55864ba395fd7d7fe79c2444ab523e84824b17ebb3c3cabacd1d05778e2f0ce304e1012df2f662657529d333e77c1ec904cd78164baa063da7669f454f6cd412ebd42d94f834b63e6db9baba9f76cfdb62fb12d3712ab4a61046b6deef4df081528858406f6081f11773623f99e759a0e4fe7088ebebdedd4ee5d1aa36796a17802409991f21cc66bb80522c9e78c502d1fe179f82968bc9a96a7811ec994abebfd1c907cf209e85a10712e776d11ae87322917efed3c4546bfd337bd854965d55b71ff24905ff3611312bdae99960391093648f27499065dac88b50c35358db8bfd93c25377f7615226246bbf789fdff1791b38c5a1f7e540f007f8753e9722a9ccaddfb61e8feead0d8504bf18e0c15efb3be39f8301bae3a030dcb6bc5c19f74bf6b13aa3cec56a0ed70cb31e2ac79e414ef77e95b7cd0cfe8c624e75aea8bda3f5a1a6aebdced153a1eb613586d9fb74dcdc2a8220060232a5f3041295b742fb3215c4e662f229016b089103fbdfbbbc6bf96bf0444d0f6503f8a13b192ecf7c36765af4c717bc43becd0d3091c1274085b809882c8b79bf2cd7ee9743f5ac4d882d317ff426d03f20a19c6550678729b180cbf1dfa68967aafab0cf1af52198b1a01130ef08ae1d1cec054a41ba239e78ba7ad36588878605c7b28aa61476823739c1afc2a39e06371711866ba042c860ccded8c717bb43c3a8bb71f03bf235a45f0ba375e1e722fb8888c2d7022ecff31fbfa60c3d6cc76e04922cff53ded97f79b5b50ea9d398efa832a58bc92ddab91be5e53ce1e4398d420062dc42829551f1888c97e2a8919bdfd6d891db88113928183e60eb69c2a9cccdbb8df22692a12e4cd11776af3488963e02f122879dfbaf1f587f42448a4909c1e11c4912f8f798c92b974c30aa3d3330ccb18571a68716c3dda1d0bdb8f561a37990318deedb97c6431e4c731a422075dddbeb905366c7cc72ce7c1b75363c3d2ef291e19cd6930dc0b45ebfad20c3d5df763e2acd1f2802c10f2ea8e8920255a54950542b6ff4644b616a5e8a5e8617778b65883c3aa32c726bceaa3a931bb4899d582fc32f22948c2e5896db84d0054f2148f2c73f9f142deb456a92c1f02280f790ba8b9d86652a2210b0c51b08650f40cfaf96b784809996793019a3e767325ee03cac41869ece467bf372aa98005ff0e209d22ab9395e745344f6c1694a49da30ff4ea38b091fa07fa90ab9e79ee53a6946a31ea807258dbbed52a3df946a736849974cfe6cc63b0518b4d05d074c254caf301db8b196ea9a7455d2af0d3f327163b2c345906a1cf68a997862023aba738ca2ae51015892d62126d5437d701e3195c590ca3db44d3845e1385e585800c625205adbbd148d593cee3401aca53f9126f93cf33a4bd5b592b399b9d14dff2ec1d3a7beae71e4090dd4785362859e7960754e2a51d9bc53b83722db35c1bf91aae31f639c189ed0dc0128a066b842d289624ed648030afc01975b2d4c5e49d926774a304fb0c395f09dcc4f81e73482eae7c45ee873c897b3f8cc15dec9a4ec7eb7af8e8ee25c4092cfecca7bba7a73cb2d392cf9d1fe0c1785fefcb2add8b4faccd6e622566fb80abf11781cd81e8b745b35a743c4b2437563784b91b0ee17e1de479ed4b307e7a096c2c12bea27b42c9a3e378df5ee2315bdc268437aedff7d148b206aa129b49c7c880d72979ed53c12de44a10cb9963eb965bd90b4dd53149729d2accadf074598eac4b7888ad6ecea9c3645b01c84397fe8b04006c6fbef8fa91e64d330c8e413704ec364f39e844b007642891dd34f38d3ab1a17b1de5623946b586725dfc114a2145ed4e2174c5c936a6040c76cc50caf15e790a5e6907b7020512cc43524c4097c4f805d288c46dc7b667d1f37e62202566f18abfae7c0c8a717ca17b0554b2cef600f6fb98b3064111ee72f1cf9a357d67a58ca02a11a216772ea26399bd093d6572a1db39243b1954e27fe0445b633fcd0f80ae707b005c82a34f7b9407bc797fd7871fce9a64d6dbfe594d513842032389f738f61abfb32064f95168a754f9c1aa2727dd882c00339c8fa79ab35a5e07cf50ee3f7328c0dd0e4053ac2e6b34b764f281ea7ff90be847837d655f04b6c62a4e2cb106e3ec14e9a500b2ff67c0ed8289cc89d444705679e53d659dd983fb351f730f6879cb6491a7f731bcb314c0ad4d561037a6c42abe25760fe2516c136a656f8efa42b55880b9a59cc905a6cd2fcdbd221c888dc18eb4a5b8ef04d5ab54b060d44ed7504d516a7a48b6b80d8f948b7043f57223b766234b14f65c473f6e80f553d8b012cf6e3b03ea0842af7475f70dea54fc2c78dee1d498aad0372c3247aba21a65736b419bc0e5304e03183ea0e479bd7f1e825380e0b86ef92c1e2a74e233a650088d760d4fcec132aee77909a296817350605e70edf8d54fac61b1a9377cef1838c2762fff0b2d89196e9fa1b6b55381989f6a426ade504c2eb382552a0267268a96cc445d2ee7c9c91a2d099f5aa6222d9c0 +MD = 06b3fe00a2c681dbc14f6e81ae1e7addedeeaaf4c7485d28beed0b52d128cb9e7b295838dad384054a826cd316fe20b8ea1aa35de2b39ae612342dd1911212d9 + +Len = 64384 +Msg = 20e0a77319b72144235b24a9ec5c53c5d816e9fc8e285804b727303f029341486c0904ccbebb379b571ec8fe2be2f44c0c27b0b829ee486dd4cd46dd88e895552a1ce6d58f7d53203f03420f78808d2a76d5e079f2666298e9cb970a9ec985cfe280153993e5bdfb63735c83da1e658a9f8940e9f378edae7e88eb6f4e1e58de1d9d599ed2dcbc554bd7dc035aa4c5920da999ae330d33d61b6c09b39fcf57a961db7aad5548995680958b36fffaf56a4a9fb370ba0b7a3949dfbb7f9ac4ca5939a23f0d23139d25891731c5d1093d3bded156d8915c0bfe8f49c77b45e5f9152a5a716644230debeec39657d8b7e52d4fa94a8dbfe62e4e7612f64eaa1b2b06be6bd862c16234cf380381951ded3467278d56384c932a5185a210a1d14ca9547c3d3ca7a1b659faee3ebc26a7947312ede744814149492e4462dd1bc061bc26ec3865ddec09c39398db0db47e92eb552a1eda0fa5f2d10e3bb825658143aaa497c51badab42bbc3be443de4abd1e159659ae18b80750b18f30daf261cd8bbf8044a25bfe54989b2e9e014603537a04526c3209cdaba3f75f3ca4407970a3947bb314cbaa2067587a01759d024ae6f42f60161ebbca9b54cc355acb0fcc06abc45e05846ea61c76b6c51d6db811d95785bbc6a202d2ab4c6ec18afc853e2987c29c1110cc642c685d4f6512a536b5b0edf5c04e23625850bf57914f8a25709b2ef3a3eb43d91bbfe606e9365a282092d0a49f7d9de82714266e2a5e7f309058420b5a9e65836eefd982264337649e7fc63eb0bae2d29be94c8ba283d4ddfd61a439918491e19a7ab05788b3cd8a83ca472ab08092b02b428a16966a4b9c1c39de04e548597222e2f2ed9d229cf87524cbfefb591e1f69d277c5727c23d971335803c2543cb3acab29baeffa264ce6f1dd320dbef56ebbfb8deec333fe4490f09aacb522bc347c55cd55ddb4e9e65dc3f35a742cb92ca6404519051c4b3c0ff42e663a5e48632655463502ed68535e1d96deab2cb9e7cd2325cab4bf9b4e22b07bc6ce4171ce4f3c3cdedc0e12124c5130453f39a81e8516b88a5e785ee98da81b54ed86b8e44b6d09c9e58187b1bd2168149ccde43f52bd75be6ee1169cb55d858714989e339f8a457cac0239a034e0a6c330740ed8da69d5fd627442e61e5332d3dff1823adff6686d8bea986c282174e7b6a6786970ce61cdd5cc74444d0babd1bc1c15687153fb2321b524842b663ad88befc16faa3d919645341b35a5e978f71582c85af8057623f9ec8e769321914c2caa6a6a0b49fded1d55b848dd9ef2ca88d00b80c88d51e6711b06b213d5f0891580e3c70865ff38eaabdbec387ed1a2926e5f58877e26e123ab5dd51205d135d2edbe3526342e1019a0e69e6b2b6e35beb85460a93a5dba8e37d44e1243dbc8e15b6a02e91702f946df68edda0750ea5a685b27b2647ec91d2b0a8b88e248b8cd5477dec591065aeea1f3390995024711d9041c176ef2a36d0f711c0a93c09c036358175034a0bb6db2e63e7e76fac26194cfcc5ccc61bfda4fa88e0bcadbd900029b4afd748aa1606ce23cad1fb2e2b6261ea6f6ff4494f186014000e9f3065faca1f831d2fc93533a57d219e1c33eac07814a8a9a03c95f2d1be08e839e8a8eec1c9d91c2af17b2c5b78d497f942cafb398056c0f27a35fbf78de192a36fbfa2b5bb9a1d5ea950b8991ccb04bbe333da4b3862fd138d99fb77897154064d14de4ffbac68f6791c9e0772ef2d899e8d275744b5a82bfd27bafcbaa1768a080d6c3793f94518e947a74c8126598cfc41a804aa3609615049ff2c295a3f562a1413148a68fced82399b105259d1ec84b526fb74cc67de106693afdd82f9933b909a8ee9e0d49ccb5b42fdeb71ded0bf5268e3aa610ccac4e53f2ede02ea68c1e9ca4eb74b164d4d1363b95654c6603380386552dc3e4cf530c95135c35afe46866bfcfc900b2a8ecac8ec9becd1c66aa85c297624468c2aaef9bfe9ac937c51d14540c197f85818e9373fc01f4927ec309dd61d236cb3ebc7992102a4dc0b6b311fc00d48280273d67959cfd774ae3f82c31450c0f7e9c1e36f1e89957cd31a0ec227e88be24e25fb56e4cffb9c80ed04968d16e33155326a455f8566bcfbe9d1f71b5a486d64b8bf9585c97307c87e20dee677746020c8c4e18bfeffe4ac5de084446c67126db48900e6c427fdac783d62ca7b5ccd710b5a0b4bfc483c0d00a4314c25d019919fc35dafc8ffc85465c2ebdf2b81c07182928d4788290b475985c8d88e6bcaf703d47588dee3afe9cc1941cd8ecc8048b5d52e26a98a9b81f0ec0f93ad216cc8672410170cbbf99336a92c3dac25571d2c8cb591685332e44e3fd0228cd8492b541bf6075c6fef792ada74d78e758b18701deb2fcb6c1998fae7d1303379a7495121eefed6e7d9c43014e0423ba2656308f298a9ddbd98c47c4ddb63a8edcf4ae69ec1a4810bff9bd0bf3927bb962d237c7184a6a32ef6905dd8b563f51a09559bfa37a365c4a8279343472d17372b83550476cf27a87d2524ef29d922ea9d92f99d18a08af81d900009d2fd566fa7a91a1237cc701173ab59fcfd6d3544d22a87ef2c46f990a7fda077a23e8025e8bd53039044865321498566fac6380ff145cd593b3ab9758c96f9f67e999e4137e8883e46df7254cf282f95e88d3235420a54410c27d28d148595ef30b6b7aadc51422d24463bfec570dff18f692c9d0da2a31068b34dc289effcc87e3cd34a1f220837f121e9374a481de2b6032d2f9a35432f178631fb31ffb4eb31d4fa08478063c4741785e9a7d872d027023dd330eaba04e149862056da47be112535cc9e95da3c76d115fb25496523a80f647119e992f98ea454183eab3dabe5d88b7e6a89f508bff7a4550ac37f4302d2abf19b5b5275e53ea4cd31981c1877940507f4843c8e173037df9e6d4698fdf2193bff6883e0afc07d2679c96e6f8d02aa4d84ad38374624d8812b70448b6018b7388d37aca1b4d1e80b5d67ba17f0c98239622c706b137c8e23f7f40182f5eb8cce8cf15522bc1aec64249a8978689295b3d52a6c9348e062ad4b2004e68214a0e646bd07ca8f439119178962fabc05eca426cfb515abf75a076f1cd520d03afb6901c44801f4f3df137e5dcd05b6c98ef29e42d25b056a8119ab11fc96a706a63d062da32fb5d2df38a13d52011c87838783ac4bcb1de0dccc472701b2ce20a84c9d219dbc98899871c7527a56b7e6d4491d34a9cfbd0275068a856ddb0f2f097c0dc8c01166c012a739c4cc6c4f8f8822b60373ceab7853b0be54c87830dbd1b7a0499394e61e56c040bad1acac29a7f994403130b0e97eb329bb98f3face09e49ccd9eaee24c6ba6225c0f7c955d3ab500146c5c94fefff513e367b335adb9eb4a7b6ac720f2593f27d31045d3d3474042a7aabc1f5edd60c6f3bc20a923e7b4f27c7e486ab7297599475c702f32d981a22076b719b120db891420a21dd69d26dcf762978643e22ebedf79636e23f56068a755b549a1d14da36e1aa15b6ee22b4f159f1e3c3f8c54e0c4f1885b4da5c5db66d11e78d4f6a05d2832852994bfaa95febc44565330ce451e4c46bd59f0984482715b6ef29abbff6bf0b650f03a8cf4d941709a26d584351410045beedfc1eb26bdd2f3a4c286d15edd9d98295eb7b5ceb70cd261835efacec72cfeb5782918783eeccf9278e91a2a80a0c8e730141f07a57fc4ab4244db75f8256e55c5b613a07b11c963c3cc24f66128aad4ba8b7ca9933139ad1b1e1f312c577377ce5123c7fdaaabbfac1735eb099e0496030512df098af80f15d40f29ea2ad5c39ae392154a1d3b5039b29631ff689fd513682bcf90f2cb78394ef386ba065be03152a6b1ecd442bb74858fefcbf0433af39e0da1afd178908e75136f2453cf779b88a8c46b3587ab6579674df69cb76caa8d007eef8fc8001c2fb60db179f72fe06bdf754daad4c61374687407d6c514401f4e8ed7948370eb652588e8e09bb109e595ed1c9aefb4865fd88c860533dabe3a3df8ef4871870400a90752f085a51edd10535f6da11ec62300bcfc90ca652bc817e5bf1459ee6ee688b275127cb1253a9ad09f8ab2acdca6282df0e1525e8fb0227cd05e054d31010ab2dbac478028e6798c635bea05cfd29807ea5f936cf2daa7e6a98f3b4b5637792f0c28afb82ec8f5ae334711d2a78e9771727255385d2eed4ad210c490e3721b508fec7c0240c8585f97b6eeba6cc16e9311825f6ad7943ed1d44868c5e3993a3eeb62760565cee8c618104a66275566964ef77aa969f4e0a2369eee925b941c21abf0646aa5c2ef0c3dbeed7de031c5a2b23a6e9d1a361ce7807c209e554b0920540010d8088cb3588f269fa89d3dd3dec4b103eff2423ac53b49c492d8a64b6370f940f897157dd395b1288f6861da730cc50047f9008266ee6ca315ed8d29138643bd72594394a4d7c74fd94885208912de2f4c38593cf2214f85d09be8ea581f464fed57ff42f5ddd1dd2f4691ee465f6556a7b633af905c59326aea9fd759c269bd119732cdeb30359b38686d8cd57ac03e007b78246928f2718ce29a383ff717d18723c27eb0575d4e9db802425ceb59affd900ee3a50c820bde8cc1553147b551f703999d6cdaafc1053e3658043b977149fcdf346b9171c907effd755838ac06083d9d72464295bb1901f215f4f1e14b8ac7d15fe33d2871b01334e1dc5464b863dbb8446715760381091fc35595a10669faceab379b0dcb80014fe2e423452fb0e4d15df7deba62e45ea3a84eaf3e6a8d9cbd628c3089a120c037be982cb8329661cf031d22c8a0ea09680c08c8203f9fb585ca0d8605b93758d2bd21f7238bbd599c7f016b0a853c115439aa67af4d464e102bdf24e7dc6ed20a29a70cef00ced41f19cc40e7d8827e51765d15535c2b6d45cf2d9298d26d35c64851f4855a71db4018a62ac7636358460a49597433f51d0cfd1d598163db89ee6448364b604d74e7c6b6b012ec88a81a3e95bb7a9b4d634dfcd700095761d769c3b45aabdc0baafc69255a313c9976b75a6ac3cd5cdb49f015840f9775a62621adbce80c945282674a1ab08a1b3dc804a6effad53e46d6de904c0e9586537efd6c8869d652cb0610b1be3b86511ca8e9694de7fa093712fdb556866a520fe7e547416570dc1e3de0e539828da5df1d4eedab13a584550636cbcbff7ea1836ac1850f6244faf22fbd30b20d08e02e2f1b7832043c7849b9721cd2ff393b560e796f19eab976efe590d851655dcab0e73853094429adba3397ee941003e831dcf64d88843717be6642264011f62b0e4c8ec65a5bd2eb517d8e8a39b9446fbcda1e6783b926a407bab962a49939cbf06703184acfa1fab69e4038e88364999e12da04330fefe671eadfd4a8869072fc3e8093032afca1909e9440c9f4cb2e808c136dc010f8a5a5fd9bc4715f62e7dddcee7dadf34da9878671e90596e1f6094fafeb5144aaa84bfbd4792aac17f33946331f6fb3fbdb445dc17cc4f10fb8e26398c40e326db90aed743cf9f6175eb98639c172f16efd6f2b6b412d8bbb3eb2d0b4402062aa9e8ada625506c3c9f004a2e6abde350ed7b0f9578069ee4f4e229eeda9af5cc72074ca860c7a9e9770c3a52424da084333adce6d819fa231b1dad62945e2a92e0770c5c8a87d0ce8a89d94da758ef075d711b2958bf82dcb2f8180525ee2d0451b25d410733697255e3b79f0e723770c8c82adb7e89c19838fbfa24f3ad75976243cfe46b3cec6b45b445b4dc0c125701aa8c8bbdeb2eec39b3e460821e8cd28e95c4c52b16d21fe676143db488f8109492d0a89b66332f219a373655d3db2c2332ec41cb539316b493a3881c9b61340e1b67c09b8d66f77d299324e35ff93aeca5a718d075d7d64cb764227895e637ba9ee24242b342cbc8ec68aabf056f5537687588beeff8e4fb3bd69b5d1adfa236a7a0cc059a4f22814d28364d7696219ff5d83ffb448ea95cab9b614e9ce5fa1ec053cc6884f48232e662561326161682c86f9d29f5f1b9fd810302a19e71a5bf735ba1f015cb615a22a798b49657ba8c6a7c2eaf86ca9d4a56ae0e0a921b4bb53b290b10cf4c46639c586c8639e3641956be73106991a9bf870cc1fe0a3b428c725c666f03ffb7fbbe05401c9341d9c61776f8e130cf85e9bc9fecd0896a20a1d366225f764e2c6f022ec1fc44eb51ff27662e865edca84541e7ed3672107c81b8c6ed5678c02a4a03455089a148833100ec82945651975ec17521a456d69cc8ad0f16089dee18292bd97a693af1d4182e7aa38fb9c6c982b5b8489eca1537d31a9f4ada58309c68f66bbdff947fcaf11aa0ffdcfb94b57d8931c07a3e64a43dac07ea403a202da5fd7c89d1203aee685ff006009e43e19bd66207eb164d8864bbc972dea645224cab7c6c7280cba4fa68d8449f047ce47a07d9ad55f4284ae4d474730a4f1830e98aebe45818aa8513bfda3a0cd0782474a7f91f4f5a9d623a806979577701dfe9066b7ff65a401530ef6654de84fe38283150ec3bbc0574e24a38e44ac09a65e7b84b9dc1e824bbfe521d3388945786012e71829f8b08e9589c635268ae6a89521b3ccc7f34d11fc8926f44af811c94ac19cb711f6a004619e1692215b2caa0b4a99f9a52b2dd872c2acd1697cdc5ea656ddf360fbb93f1b2c3cb01e65063528bede475f0f492a89575b707e5fcec0dd9a51d5ff5022c929fbdf9406f29ad054442bbfdde7ca8ea912dddb72e70e765855a164d63d042af5d3a848bf481003f7a6286707fbd78d3ab9d71a2b5dc5087e4f74a9cd0987e8e57c3fd333af915679aa7c49c59299aea415f43393091affb64f73aacdfed28d63bd4b3d487145524219cf6d00f538794feed930913236e16a1f4671bc620ea1d660758ee8d5537ebabacbd99e6ddb76a40c31180c21403901859406847e62aaa62b64cffa22e3624a5716978940aa2e0936a2f4ee1f618ce34a056f0b9af7323ae7c00866a11f8758b658afa7b6ce28e736d4cb1e72c164773642b63bfef5c0fc5c333f149a2d744ea03a27e2196feca7d271a5846287482710f3e3faf183dd5351637eec5435b192dd630921afb403afd31e8b0839dcc15ba2c0fc32bcc90fa78ff8ccd51960c78e357d5d4cc2c6f469008583923de75679b24f0bcaa8f0e161df9b32ba2fd53da8702d294a98cd473b234e980ab8d18fea094b17aafb20d8e707f4b680dfbd9b4a551d770579f0858f0221cf58f0c1f4166f5a29bafd807ea2cfaa631071406adbaef54e64af5735cc67a432642ee00e65ab2448e2f8395afa01663e522d8531c3415cb74f812bdf5a1882c816b955644087527c0a3272f45863cf512e5bb57869d7fbb8ae36940ba1dd619957db497e0dc98ccd1af454d522bf8ea38d42f7c837377a5c6917b9420980eaae0ddae4e5353a7944fa860784c2db4a3c552b74a7942b80a8696cc30bfac7c40e22ff4d2021a2c2e89230b2899e7fac25705e54a0e879b5a6947dd9efdc7c97c17c92adb738c90fc2ca3a7e6d20755b65c423be389ceac35dd391247517650dd005db2b33e17607d88beb92b7ae8400043bc2daf916464fd50ff1cc25134bcc42a321f01b86735234bb8d17efb273430bbc82d16abf5504172ee6f88738f57c1f40ae24f78e8699de4466349e930bcb812eadcb13ffde872a1ab6d024ef2dc670c3c8ed50617884dc0cbf124bb914416e7b89ef7d3fab8316b9a97d839eb9523c14b876ac6710ba38fddfd87e8c564cda8a5f662fe5829ee4f509272caf62c78b1bc6e5960818e4fafe10afbf749895ce437658b15b2c809bb41cf5a888f0cd65c0396393ac56a928f698bf97d9a4c4518e18ec8c0771d243e02c107e932b0ed3eb5b172dbb94b2cccfc02f8d2340806c538b4a4753183ce5607fa03636db2fdc84722aeb9d98a6ed70d0282aba3571267a189b6aa6eb65871c5dcc59dbc7db8973c7c355ba2a2e94c110d1f4064a4087eb07077e67b0f634fc10bc6ee9b8b8e1a0a20bf47a14f2c8aac75375704995978fa0b50a003096f1e8df99fdc8766eecf34a2a4f461d9991133fd5355ef8175f4c2bce96d833eec8c8118b8edfc9a6b2550947ef840cccf7e4be80bb39216fe60bef79aa5781a6c084efb9aa9879083cac258a5a9eaa3203058d7b8f6a8a4534b535dfcfe5e165e104c14cd85a4d3b91e2e71c1afabf74bc5ef4ef3957fc40523045278cea1cd33431cf6ba18e0ee8b9dd9725b70213392bd83a04416a3e084766677a6acefa99c0f1603f8c9a84b6bd877dccb71c6d2a5659a9e1300a1a461b3de300f0f9435f8e2dbdf021e7774ea4c6e13aa4b296ee47ca87af8e9e56a2d79f00e0a6d4bfcca4ce2fa5e8ddaf5776840a97052b572e06141d95e190bbc38273074314c536890cbafc866ae4f37a3ba8410a63ef7692991db3bcb347115224a14050c3356f3ecedb6cbc2e650d5ffc1acebb4566bbc10acf914c8b2b20f6c610f3303a8d3392f017c96fbcc6c3adc1c2f9d333f8f0646111fe6cf2a4af586eaa680a01334a2d7c5859c69d71de0c90880a7ab50ddb22a4ca44446f1a881f2756e707a1917cb8798566ea58cc2626735448d7540d46a4dde4a9fd8af571f4f6fcb74fa10d91dbf0863603754162a0710efc139760f792134676bfcb9d337fe58521098911503de84311387d375c25929e6e55076eb6934fd8f2b1bb7b9667fbd76d5ee204828769a341b1f716da5bdfece6c62a9f4d4f988267fce1f5615540dbe375324eef607c910d976b45a5ea5fe0ac8e8b5c826ff62c1bc7c5745ef0bd79ca7704575f7127f2bc12612e857b1b6307d4af0b1f9b71be573bf06153e1799a6c8bdd869a6274af9749623841b6195b41c02016ea7a12206380e92209cf7c240fda474567da6bb0e665f5cba34263b2a07c65e3acb5e03b87bd38214863cf01fc8bc9fc908113ddf18da34f71c8014e6d2d06dc2cf3e3f50b1b66c4d74579177bc7ec11db00741effeaf32c74eff919effe8b6734dd243736c1fa75801c8250d3b636ed11ff965c59a46dcb746055f970157dee8a1baaea52d77c9b0990f3924e7f31f8fa25827d48e2999239c21dd8369a64d8f7547ef4a587759d3b4bd3c7324b659a5d1b3f6b12cc00ea8abe579d8ab6c68d4330a63f78f76ce5def22ad6c841593c0389d50cff8b293c30fc0d30b4902d7536592cb1124fe9daba3001a7588a9544b5154d4a59479ceef4234679fc5220f898741734bdb874e496aa5f222a4da11c396aae0c6627e26a9cdb0b5faa21287e302c70afbf5a966b3c0b4c2f85b3062a572e003970548216f0ce63cd0528cc6fc7263e09615cd6d772f9d0b6b3e44bd8d90a4bbbbdf6045cbaa256a8568c9433250d892cebe6bd91011cf49ffa07f88d85a598799534f1a3c0ffecd9e578083212875affa522d2ffb11ebfd2a34495b025a8ee5b4236d052cb8e2e48fa12b1d4563cb86ad6369d8a49a43a37f5c4abab7fba56490b2529d3a3f623dddd821682b8d6ab55c84aa69a93596bb73aafc1e55c84d72b3729858d10e0d381d5f1bfa202fa3ba8c187769855e25c38b82d60c683ad79e90f696ae8daf4471a2c87359efa52714b0a1494ea58ea15a3b9640fb6bede446cdb0e634cc8d98691286bffdc69865427eb1a88fa64179ce1837f561dd3bf419ae33ff521a43898cf12c6a5c6163eec22abc1db2f4111fbd95ea4bd638bf7775c6e25aacf34b886bb32bfb0c2cb214225943014f0b6813a7294fccdf0ae2fef9bc5e709be4102573ccf7fa73a4ed75d19ec90bba78c0f5f966cae0d2d040eaf3d31af9a5792bd133c322d1295680946e4fc0858bb8b62742c2de20680543dc12bf8a2e600f192c3a2a4f27a3be15f03700cc174947b23801b20c23e5268632c4e62ea742224296e566bf6659481809ea364e3969a24f98c4d8d733f0c0629f98db9afcc26f4291c3fcf605e0810151e674b9547354e8d9fa9bc209114f7372fcf43187772293bd5471a58eaff55c58ca30bff0ecdc087c117f4efbad40334d6fe4a4efc708b06a255920893e11939ef3fea4a73ca438efa7f7e0844b2f1c9f7011479e387e1338a528196e01624184f22319efe949f4a53c9a294b7188b9d99c0e9bfb51ef56996242d2a59063e0bb536272238939c64d3dea8bb996d9759c423134bf99f8d51cdb4dfed87192fba276216ffa82f018483a4d8a47419dea48012d9433771729237eade06f1b8beccb08e445cd7d1985169047a78cf842827d67582d0f8fc6cd5dcae749e2049b5ea55a2fa624bdf27748fe6d55e33163d89cd345719c2a843c2c5e9e7dd9a36dabb208780398ec37794fd33327f2737e4736e37a04720ddbe00f98180eae9e5f6e818231e0828e3505abad1d903334fe78dc066a5819703a638806087ee94c0d018455f1cf79fa97a6eceaa1211dfc60c7ecbaaadf0b182c311636c4410242d32f4b024c1307d7cbc7741a525d1b4041cef97e901bbf5c2dd34a98ffe792096e223605857d849c3df1e1ba9596c3971de872d0dea0ceb2cbc485ab0ff501062a94e5de4241a8ce8ac0a65a0f80af7751cef94fcae081c2627f67fb78dbe7df94f1db0b1711ccd52e8e3277148d274799cced4a095d90f19e8e61e8bf1ebeec39c3760a6850694695e53670492ed3ae327cdf6dfe9a74c6ec5bf421673feeb28584575aaaa016a95d5002f411d83d11d859400a3f0995c8b872af03f5a20fc904aeef8a72635d53e1492861033bbbf8d7ecafdd3f4d8c6daf6ce32eef078aa633bdbf08442c95fcce4b275591abd8e9dda17f2573b8b12c1d9540f0b7b2f7c09f3b4652946e590a70d0802041bb2c5b46025e9170ddbc9aaf963907f446cfbea3a20607e7ab3ef37573b38f97ec2ed39d999e9fab4f072fc1fa4bb309358ad6ed8c7e76a255804e58af41c208b148d960e1efbea77f1951f11be9a07b01b1cfe945205d891ff57176ddab8618ad12d32c45a26cf9d07bb7b985a35ece2dcd0003769bfad04ce7136c99613a5c2205675c6f5728f6f596b787b2092c872c350de89b31fd2c7edd9ab66cf35d27c2a8ec7db98e71335102d7e84b7bb81a8f924fe52d92c2f228517dd0c2e27d200166090caeb8e43375389f579c8b801cca6d4ca5a82eeac5cbeb433835af08b960d51385c956e07bc4b084523fa8f2e26f1e8a869576e32bfbf371792fc98e78637eb27593f8f480e1f31d64af64af2fe03e9024600b3a791b128f003bc28cd17bbb5c68990faec73f88c10b664f1349b045f3fba24c5f51bbb10259c41a72492c2377bb331b6dd34fea25c2eea8adc461bd0c78d6bad02a506 +MD = 8bcf4c7df9b79044ab522ecb2d9bb9dcf54b6e131404f1f2bb413b2790968c2b83c4d34c61edef8302e3129e67e3f95b249d160ae5e0c4d3488079263e5ed128 + +Len = 65176 +Msg = 1e0c4f0f251137b65a35ba9f8a2a9525f240a345ed7ea453cff13eed1044412ead912f23cb77fc839d6d129a895598878655f4a7c9e28e51a01dd7c49e638b5df81f330e2fe3ed0befb86fc638b24a1ebbc76cd387e0e93ee431fb3f7fc64776c85f61b6997e93b618beda0ade663252593e13b26ea23c8263d4af46fd97fde0e5f9c304507075eddf285a4ec49cd88c2764f22ac84d0f85e5affdc15efb3503179461e09ee01b160e9ef87a337ac532eede1024db0cebae326aec98eb1c784726d84133c9f60e9b6bc7bb77712880ae76577689f105566711ac84b3ec224d14d96f6de31adcd5e2bf4cab2bc6cf916687752a3f5060da184c1dcefaa9353dd2f9feeddad9b7f855d1d4d07f7c9781c4e9e036304046ff27a966d156697bcfe94e30c7fe4eb2005a6b08335bdaa7d72e6341a1420bdf4cfdf12f96ad761f8bc1a0aa0539c1f2745b5390dba827281b0ebf40745ff8524902eb1f23e91647f9c2b717af7279a2dcbf5213d04cac41d6cbc384b66e4ec87e9e61df82f0921ca2555b1dcb91bfe8c1ee303a1b31b11b8fcd38b66f575668743a1917bbac32c50de05364637ddbeca950b5acc33d7dddce7ce57da802585bb23cdd6ed4033d6ac2cd68957e2015d71f4da911d05a5ab01b40948268579bc8c00e738cd7dffd354a8262582561b4d1a84dd3134b6f8ebcff810b6db73e69d82716a31acb27b84c2c6909545f280201ceb8fc583b64622801a713e59d9f08b26ebe37c0b9c3b7d7f0e82432345d459018f6ec88a8211e1daa1a74922362c1801d6df525a89a42ff1f697d99ace9c6a60e6f6b4c9a8d0ac28042f61d506fdc67bd8aa7f2a096a0eb4053da32d0b2cd69398b414c1a926e400d88612e2daea191d57f13ceaa9e1bc5db0e04a5a7a1a20420b3352f2f1791bed9527c6cc0075826edb30262cc9bf9b27802c399399e8c9d4c4d119de205bc656a0910801363484d8d8e3b56107383dca097deb78f92d45d43c39b403a42375d4a16e5112ea8ba2f3e7888517e0f016bda351fa6b063c36b8f7b9cbd3fb74acd01dfc3c817c0f6f487d9affb1d57bb87af444c0ea4fb9ff0b7dfdbbff94c3ddd15ce724dd89144c3f11979fdf533f856a62c2e997440b013445522ec71ea57b7104ab9477905ecc403a0aeff0e8c020347558ded271c40fdbd4737ecae77e1807aba625f0003352145d716a871481fb41a2731b2c57695d5aa1ce368b8dc2363d988333c777269ff3f2478a125519892a80be1915735f8c4943cee0898026586b71bf587e53cce897af09e91328db5c478676731e443b1f2020f207355d0ef119bdb6fe75348ace47da44e21a1e6bd7212a4893c748708867cfd4152f72d082d0e306b05c87e4d3bd0a651f97943fac6ff2b105710e945a88a6e184c8703fa029782af884cc6f8b4fc606fc0c28bb2e6c663c32cbe51af82b5ca6e0a0b390bb7be390519e708f47788386f1f84a82efaefb36c6388a78f3984790b338eb784740bbd3360a22c8aadfc981bbdc881b62b0385d1a476d32df880e3b7701565ad6307770104841a027ee1e7394395fe91a08940bc968fbed1e52f703a69aa2bcda939cd39ae96bba411bd8d9258f4070983094bf3e1db4ec3281b895bc554f12d712928a105dff5b78f1bf2eea5ec8464f90b103e2e626c4aeacc94e32d1c9f16e160f103b267b1851f807e15d1855deb2c18f667252d01b053c9fb9b48081dce21658e255c36d854ea7699ce85c77be644b765346d43f33b8a9a2448bf23539d5ac069cfac55506d1884abe269bbc49d6871c56fafac2c34b8c779b5397229cdb4fae8cb49cb0318d0331c1a24682157c1cd7fde927192e304d860a95fff88a5569a75e0dda0d79d3a09543c5fd77a5e7753f94abf990f8f975643ebd9d1566c692877d50ddcb6437f90bb10c10eb8f8b18b9c7add2c8a8198c989444ef07d6b142d567383888753c750b960f317c16e97fed0389533ea0230b79a7c6665e3ea80307982e7ac321539d0b7f29cfa7f085333fe4a8fb4195887aade5bca377230d4b94acae04e9ed1fe981b8f65bdd90d0ab28c7972bafecbc429bda9226e1087395030121778b5cf3d304ffff66ab6c7e704e48de64a81a510bd9f2d1513a735d77e932434315e561f21b90af608007c0fb06c4e956e8a2c92ececb04c2c1e83d5cadbc6de8281b0ccf1c3780ea09e75ad3e8e84242d01aa73410cfa6fc45db95cbd71c1bd7107236b2bd410e53978fae737b1f63e90ce65da4167d325e04c1f93ddbbdc7a09d6f82554539b24db7652e5223c6d899ddaa6f0766503168ad3fda3b522e1bd4fd77721f6aae2728e80c7d08799b1ad5e0bb4dc676f51ebc9da9ab3ca0f962d4df2e7889840aa785b7e9fd0ee2f8a53db4ad9c79ceb864ca6493feca6e8c5730a109281c37dbedd4958230ce066c0231b805bd99e436ae027083476d01634378e17be35fec9e54a61f69bade4a61ac426938339f4ddc55057ffc178d002ac20e2f1b4cbd18ce667aa404fda835761df046d991026235f433b172e1a2f13f4d60d84bc6cc42e8adb2c1f86bc44e15d1bbef4e585bd7b0062dd36c28674b0d60217ba1d406017994fef798a7bafadd6215a12aec1404f6f554445c6e12743184c0979216e2cb0db6afc38a13e4c219498e3ae3eec370675c3782d8256d033835beaab0e1fb15f17d55a42142da4a65e295eafdb2d2a08da5582d43e0af8e8dfd8c2372d7a758d173711812b723ea5fe7cd5ffceaca2bd66b26924422826caf46a9905c6a802a3a1392adb2d32a2843a384f855f92278de0823504d5d6e34189ba78fd21d0e0077e83ac3a649859addb05d529d5073fe0126fee5b413cb6b5686f6607851b952376bc9f8516c9ea86a98d6ed37a32741ec21f9d13cc84278e57326c0b3cb1ab5e508c0ba48cf0dd796b75226b943c4dafb93a4a13bfd3be341fab91f18cb9aa1fd69df97e0e33bbeceb68f9d96c4c52fbbf69fb436254040f8881dda1be5b18d0ce9470fde3ba0b49ef0cfc054a8b0c6b9c54ba8bfc2c8087595d580319c17fd8011c790855ae55f7400932d87521026517a28ed3d786bb055ce60b00e710669f37db1b87aa37225ea608a4383735bc52f9fb800339883bef57c5fd7e6e73568d37795e632b7cf8e6e8b1580ed6efc39b0a0996036b5a8aaf13a13666f810d60acb9f4a8220a662f7d0ab58439b789ea61271dabbb52530ab5823bfa1cb0f6e7eb9f5e8cdd1dce5f9249facbdcef8d5ddd9de54145e11b34dedf39f162f99a651ca223f2c85470b54ad345a66b796f1a726f60bf4b0459dfc9cb8deac6ed607ebc6cf5788860f5b7033136c259e7b796bc3610745f1ea751f2b1a854dcfed18b475a339c71a5b5db67ee3e9e1cacff59376c850ed6a27c42063c39be0990661159f47ecd38a539a8c554dda8484b9ee8608d3efd6632511660c58284c154b6b740b6278921e21995b81f946f51461ebac4129ebe6230be459ee84357b8be2bd3a829de6ee1deae28ccb8e351cc2f0746de8734c07f402c561d0edc85442f3e0d0cca03dced1d9fe85f8b5b0e1d68e1131c7581a201c323de67c3becbf84a75a9cb1128519801374b0d315bd2c97624b60a4815e18e4c2d350b817a6a49725b508f99bc7b973c3cc74235767e54e95a962489520d994db10074d2900ebc496787b6be40a95f20f8f38af22b3f4434eb49f7b3d664a74a47b730318017d53222c5dd0955695441f4466401fab41beb6f28004213a53cc469cfda18cb1408cf05815f056b3a1b31c73659ef556b507f5ed6bade8a3dce3e8fb0bf12f191db729840d93cd2aa1852ea59d914dbc3665322dc93c3baacd02b32107b9a640fc1bf439ac81a5c27d037c6076e1cfe6ad229638037ac1550e71cf9557c29c2fc6017afd5a8184841d752f2f585522db038448987f2f23ae887863df65d4b7ec61b1e35b7f5d13766a236e97abb7efa31ed470d5a72308bd215f978897b79f81b77356d883dbf9a24a546222d7cddd47e8593875e21d1989c26d94175732fdf5af8ffbfecfc4de10a6523357446095ce485dc60297e7fe1a54eb82140c0e7951304cfb54c9df6cc7676308be5a37be402526420430475e78bd2189071d13ba9c24f47e62daf649cf73d009e0821c01a669fdd5011406e1ace757cf79f40969de72cdabb16acf1d30b4e1604422d50607fb2aa783abec30bdb8d57ff2f8b82d200220abc8e23491f211dd3273a42b746bc3f5df115dc0f3b31ae2bff891e8af69bc34a62fa8eb4c1e710eaaf36ee6f4daa9a6a534924cd196f4c8b715276097c18853c36f26bcf7bcbebaed4eeace2d5d95842372b256736f2dcd91d022e98c304ec32a0fc3713ad2df2a260b7eaac8fb6fd87e5625a78145af3a72b1eb4b36bff6cd0497e6d0bc6abca67bb394446cbd1feae1655307a22161578441e84e3e7568b97990f9a3268b3d7514cd9362c2a98d027229a53d7e0a2b6bef0782b94c5b8ccfb08163b01f3e4ae11ae1e3cd71caa26859298113be08f5c0db8c215607774a57d2f28cc0508acb30b578ec4d22254463bfed504f0a23a79c6f562eeb18d38b98066bdc9a6177a8ab0c1915aa7dc45c3dccfe7bba09642a48d3ef0f41267735db7575bb08f90dc99a484cc8ab29aed33ca7e3681c64d2640c30df2e20da693268469791d0c055164590996d19cfeb8fa97924813dc3763e2faeacf250dcb36887a25ac6bb605678f30d896abc16847acc694a2de4cc56a0fb74e0c298d35dc180b145c2917e18d5eee7a3285ca7807beca0dcd3db2a7c73b6ab0208c1686d249a9ae0ed1ac5a4177c456f0fc129e779524562dde883f09da97a9b2b9442ed781e86b3b01dda0124e64f7688b245c15e478164b2d480b8081c0a3293d60ae4a7549c4771646837e6742f3ff9f9a31711117c6bba66c8de9a56824fa852675b9884052399b5154f436d0a53cb5ceaf07af85dfe5d68046a3da10b7bd1cf025933f6e8cf91d98950251b0b3867a4c35581464da603a0db62d843cd3c791482e660f26ed4c0986d4273c457783399d54d0e4173ea14d8f6d05385ef1d05ea900a07bfbfb98db9692e15b1199b9902c9e00933f852f8d6fcbb96af9aa3de19d4ce10a602066206241bf22a772700a846165a6203661763962c8809f5586c69f53963ef6044a6454711f47699a6d054f5f8e917bdafda466c2a13db29c317a29c54e9e200fac03f791802dfa89f70cc7d8d9e994db4a74925bd1e6c5d6c488b702688c60bb01abc633904abcc9b4ad888de6232dcfde73269ed9205badc65ed1ab729e5a8ee1b84ad7be3232c21c542bbf11b28921303cae2c355ee689ad890410fb585003d2b5efee7858ff1b949d1c0d0b3c4967d61d93646506f8e2e073c8e3712ef3a24b213fe83d33742eb3e4c3f83104e11c36b270d7f6bd054215cb9a8362a6b7f2c186c5659b56248400d7cdf101c0e2a6e887b10748f58e3fa3dce3914e340f7dbc62eae71145a2b3f1c294981bd4b0a051f9ee62fa25063411445e6d927b8c9bc2224add1d6651271d41a25dedd4fd8109a5938b88d00fc7f48e4598edd191e549515fc83e5cc255c9d191a2d6360bd186072ae1539b0d43a41743a3bedac1d2d88c8438f27d78e8ae0ecd07837c7e1a4d9b1ef508da816fd67bc30e63eb9efce610629fb86cd7283035cf0c641cc6b3c6de0a471702fe84d2286e499ba88bbbf8a9756d1e9f8fccd7031222069b6846884c5747ecc8f72b4da98fe5b4860aa8969437319379e51f28d330d8d97cf53b1862a0881880eddb9f7bb2535d08be4b368d228d95a089c7ac42a5a15b35d019edbd507818cf551e5e1b7012d3b4f90c5ed0b1c1b397e03eb7cddb0c0a5a9b5b8eb8e1a87c08cf5be00543b4e6ff5d64762b7f8e6bc47aecf1c15b89755fb98851f1fe99a0c1af2cebd5a7b9d55c4dfc22e9e6343cbadc6ad0e9a1aa1ab9bd28fdd4f1bc258e9709d7e906824d506d3beb98806384ef6730eb9347de690d08a5e8ee559078c3f96b1acbfabead801dac16b3d88d02d6bdc7985ab896feae3e8789baa4a7290658c94b0afecf744ff1a55ac84931050542a76dac6e743a31c15676a66970a4ca37bcef028d2540346be01e427cc02a0f9848d204e3f6aa1c339b365e0e7d8a8408be5d6f20508fb1eec4e7becddad03a11347bf0c38edce207be2f3e2e3e28d86e363c9d42e1b16d1ccc2d99c6e196296ff2b1fc57bd3107b047e7b323332e1bbacd03098f5963aa688e766ff264fa61e6fc2a944b024511bfc0f67997ed08e280db27504018051e445458bdcae56b5828b92c3507ee978498a1b1edf6cc27a152f93ffe1fbe142d42e62aefcad36790a7d25d6b08d296d4dd62c08cca6128fc939fa36f68ac1f5be68c83928ccf8d9fd6a034b2d86ec186f09c98d28d4c8b38e5470820d572952ea1eff9226b3a3bca57db2888f113a61f74b7b15ba9eead0aaa87c4bec0920419f768d23be093f0c48dbbcf79ed51c302cc3c8084baa82cd665ca6f95c49afaa2698fc52ba77d5b02fafa9ff217b996d579a3bcea3a397920a9976f425bfdd75c7add489e1a46b90a21fff07e2aaba00c0f759cf8a2f3207de8675a50f12b28acadd9b2ffa390c94e8534879a70b86d1af03ac74c8f65a142a4c2a72e2eb36d1774fdbabceddbda44b740bbc394605c86ce6bb2324a117a135121dc465f17233162c1b67253988a811aad13860023fce3ec70e4568d871964801d70461cd6d96ee9be4cac6f47488831c2155e3e73dc96fce2e435a4271dbab41df989f262fe448c5bd3c7bb7892ce9f3837b8c9e06a34525a283c3881e58a6f9bdeae4a5c1036cd22e250a2ad07c8b567f1221cfa24209f1f26f6a5281f68151fa60fbf22adda2e9bfee3cf45061b06e9e826b221a90025da76e1947a09b83721d64abb472583232f9fdd9be12c1a2636733323d75737a8e48e7960f8530f584ae5dbb93a25e63d663bba92f1c86a75c638e3ecbbbd5b7af5d44aa53389e1fae36b3f439c1d67ffd869073f07896088118f95672f49d02e66eec1dbbbfcb49193ccd1e4bd7a7cccee8e501a82edb0dfb10dd44da29b3a35b0447b7ee24a1bbed48150174edbb937213201900443bfdf2d3a3ceac62ffe238a6bd40956f07bc51e2f2645a09f91b118fab84a0c4a0228de7b1bd90a56807a2ddb67f57a6e4966d93cc10a53649aed1e2ec0a2fb5f1c2f5d671d82dfcd959c3309a3dddd3228f6ae20ccefe799392dd964d7256201626522849e92c6e3721c327d142cefda8f0705818640ddcbf105b333486bc0cf696cb63a3b634036ba8ca4ac356d32d5e01a67b599a7966b670743f0b0c0a817b598811e609eec45d33ff22d941946a2c0935d6373aea1f5efa4f4439cde7888cb9b2b97aa802b8f50d8a3679cab8bcfa5245ee1b0a0a10a0f615c92691fc2711fc71e4c75b17e81c7d940e0cbbe82bb022fd4d6bd47e4065abed573a20f068f36bec1935ecd55ab8ca4533fbdacbc036c2857a915ef1b793620075dd416c53184e4ce02c21e618b23dc42cadf00a82747a06fdf371097e136375ab77be18ef69edb8c114c4ef2af31e3a8189c44c7a5391a85ffbd46e9ccef67581705d9b44ce8f5945559b9b9662b5cebbf9203aaeb95192270f51c919ab63288030e79e5a307e57f3576f8f66e649a96163ca7b288f00eddd99aec2fe91f1b52f1f23c83a7500d954820776a26923f2fb318bb8f0bee7e00900b400526ae94516a6dbc2eb875e07ee3f2df650d28cd212ca2b990c2d4e9434ac2b2c1d1d93ffbe2bd533754ce00a4cf4a7b77a09ca712d9672c586c37c30e505dbed6892370cae18dac4e1aecd0af30b3e6227f525f6d4fd28e5666abbdda5738bec3ab11d936ed3b21d36946f2e6deaba9f6080e7898f6714a0b20951c3fb5e05d19b628dbd87c625e57ce50c9f40fbe3152c915654e73cff9f748787096f2e0f43938dceb28057fbc4bb8bed85f7a4816d9311bc7c63e4b18ab3cea5d8894b72ea2b1a2999e1f0fb64fc6d5a07174f5b4f9de65f2c8cc8f20878c5f357d21df66f6af1e69a33f8ef6a46739a4d2a633a6153f9888ae84e8ac1ca54b9afd10d627a59fa4ddffdd79d81a285f780b848e64ebc327ebe01df405eb1633e070e8180b2fe1ea58dc7f4cd4f178bb7c8476527bce0798bf15fe4dd8735dacb8812e216c0634338cf1ab9497cad6d234c6124c554c8b7f54b88c32ae35fa1a8596499ed4b90524ccb7c8dd8b16c1383358dec87bd7bd205f306e6ec1b36a11da48d0ccdfc8b342aa978d841965d661faa5426369f01b4031261b3eed6c2c0728e13a57d7b5ecf1a9293034dd2874c3ed43c389aa4634337cf1f94f7bd0ce7ee4180cbc76f110d63ae5774c40ef3ae2adbcf8b7b72a869e853caf0ce781bffdae55be57181aad54f244b946ef1a77529e69587a1b1d80d60c5e92e3caef8ee7ea12d5d4458330e241df7cb1224ad87841d1594d40afc17e54e05b80907a99e229e7d9a089db3a22bc0e4827a4e0dce83a9d71bdb241b6ec016a5f5fd2d38f50e04d30485f73378ac36991f6c18cd316db263827fa93dfc3944514ddfc5acdd89fab703820fba78efa69e0cb129f7978c5f4233883e6aa897019228797a0e3ddda8b2ffc98c508a3b397caf112b92ea26d9fb94be8dab5a2474eeee91f165fc50374b602017fd96da16ba7253c3a7118448160fe83e07fa26c6ef07f0d5b9042bcf0b8e5058ca841267e0bc419b3df4eed31b0bd0f98771e61e1ddc5ecc133cb69779f221f6be3c2c5177f4a15b5c7baba293f03c6532a5aca5ffd3a37e7a8c38b81df25a9ae2a76ffe06843cab0c8e05de0625f52a107fc0821d558695f6dcfb5a7ff7c5eb3cab259615d3da31561542affa14c3f129e769deffcbd0b68f1445a3286a2892d73194402c49439841f8ab3cf9246d6286c6f0e12e9b498b4e1d5fbe9fb14c36b8220625d44e3e86d61f88ae8abdbd242e029db2312fb9bc3add91d16c36f980e964c16d944a94a41c72212c364779e02985b87a90ede8f15b3d2205185ff61771e10e3ff5a50d991bdabddf832a6a3d80358960d43f9ed1ba255c812a960da5587f34c37ec7710ddb3da6effbcf58e43afc588d848ca2045e7e856e2a4204cfa6287d23b71988aa65852283269c0b7c5fc16c29283bbd33502ee6f3a0caa43f64c32f8428011a15c0987ac38bfa4aaef86c0e5b48b6b706961fc7391598b59d9a3893115ae8eef9f460f6d8b252de220be4864b6d6458243a3770671113ff904e6ff1efd437cdfc0ac3ddea230a907fa3131c221ead6736436028a61aa349c18a4f91491e547fc609ab7920678c266dc5e01808e4f9aee3ba81381ebab05dd855c2ba45c1a9cc00f9ff10a3053e68967b33c12446b0f3d4a682e8f678a2017cb8b0b50b449c7c52e2a7eb9b858a209fccf4609fcc3affb00f4a8057dce2fe55b9ffcbc42f975663cd8a522f70d71433c10b3da0fe009a20fec348686fd61c0c639841980b0123dcc1928c874c8c0df86061a05065688bcc79d48852b8e72249bb6362ae5e42ab64c7a6e3cca413d396b3dcd1d788db9c5b8b65873c407ddab3cb48752fb3c2b6a4e6ae9d26fdd32eb6c265175cefc29376395f8e4f8d010af39a30c1428fe80c44269303bce134e60093e5bc07238339c48da8e5b229d97bb130018f107c1e74eb8f3b5db7d79ec21b31420601ab8856ee8e29d48e9c6ff59496a527c101ccb8412a8ff33e68798cb0a1663e720f37b29b44caa30b6c2a4044d302d17ca7589ef0fe770c7a1a2d0a66ec37ab82d8fa1474b87499502371236aef02d569f42bef9d13dcf293782205e61b9f97578d384620f10dff8648ae67aef38c7ab172ad72f272a4ebb007c144d73685481cb6580e48f77e1dd46448d4b7e6870a7ca946f19722b940f9517091e243d007f7dcc43594d3b03b63fea7322ed0ddcbf1205f32342b013997dd98b2af4c6a1c1086e383ab8c8aa15b9e3349bab97506395f5eff7096661db233a270e5583acf903c1dbf362af397e3cd54e104aa37027beead1ef36acf3671dcf4932c7028689f86dab3dcb6d564231172c1b3aa0b09e056b25766af23cafd5ff8e32e9b1c2e64ed82254637175144f5f5b270c2d961901ed774716e4c227e44152890e1fe6a08f87dde1cb5a1a66efe457ce3f98953b2ce833bbbae31861b14b229fd4ab665b23034a605395babc8b6cae7b35703276fee1d76ed77ba3dfc5639af1bdf2d648b1b0d44a9c92da77ba4ecbb89e42f25ee070febaed1cf914a92118292a749b2bb437182b170ffe4ae5014bf0ca9f69558a0c063a7c558c82d50a26a0baaf3966930c926c533b9a88a43a8bce5ad3ebed44298a5805a3d2bcc19542f2ef11457be687bf98c1c433c3704127abbf8f1e98b74ff7be099660250748f98a283923ee175f1c3af3285e8dc1bb8c13793f55ea4be5dab6f88bc95e0eabb6e10695793fadf914cd57d67f3a21104590185346548a81afed632252ba50240791fa9499e332cc55ba706d2a7b06d5c09c0d694469fbb9e3cbd9c8a0ec7448681784d52a6b2e6f4bacdd4ac4a2fb72a9a1c8fff48d07e522dcbd0d4846d38f64ec25c59f59f94852feeefdf254678d5d5bfb75cb4047a9c98a9d5e9d6bf67f6a7a6df45d123bfe283b26051801e36c57f4e5693d26235e547ffb3b34ce658ef56ccdd008366ee727ec32eeca3de7c626374758bea133996007472192d0a934a21db5e71528fa99de7c66196d5afcf1448d71a2e443e0e158cb01b02c352a16dd17c6b8088c679cb886602395fb9b943f51f5063280c3accb35cb65854e709c22e560a156c35e464274918bc8923c15733f51c12dda547213c20490229f153afff124618450174d08d17ab079b1670b8ca018823ac30bd7ef1a3dee88a97089e0e5724715c55b1788279c402ddb94cce82ea9b7fddd5224a988e7cf2be01aff621ceae09f95722c2cd1669959735df0223585d0cb8be00edfa882c080f58d01f011eebc6632f4f173898a5a810b1b1ba74f5d7b38410decfdf3af512c3c4f38176f0e391e406c0e089a47d239156485f3e66105d8bf645580f4bdff8236ca18447ec9f53c204fe8389e5fbee624b2e5a495610f01396bcf05164f2a2777961903eb926f24650906a000026f1cbb9eb115d6be0566518cbff6e2d37f80712bc0d21008058b813fefbb6a0061514c805ee424d8775c9a5faed2f4db5e31a603963b968b66b6074d1a0726ba440849f0658bfa50d378665d222596d7449fa8b60face9acf15859c90c0fe09075b646776b79e1b7b82e67fda06b7347d14edbab93a283dd33c71b2c3c22023374ffc47db72a556d8402f1b9a01104bd72a3c15cd8c8efacbca6adff210a1613d029468bff39dff2c58aa639b7c2b598a752fc52356c979bea6b94ba611486a205e74f2a9a14dbd80b29f7d64ddd1079fdb0df24301a261b4b8a61d662ddfe7e84ae40c22e47f39db +MD = c9c7d9b0413dd75496646779efd98d505921b9a547cbd5c460450b24fcb8119a769c27a9b63e300402cf04442e900cd496c0a05682f88c820d5a6d431005eff8 + +Len = 65968 +Msg = 8d41b809a8085d72a9906c95931a2e651adf0e7613b0aabf2ada269ed34cc51c83fcba731f863bcdb516d84f6a890b56b3cf1000c894f6ef561ff749747a0503d9d3a5604c2200b45b0c376e5007f85561c04f1227babeef52378fde9a5b69bdf98f22d81724d4b0063833fb2fde1deb8c7973b31869284884ea97642c381ad149f8d8e468d3de481b6472fcee54a39f9cc325ec83ea5c8156ffb7e412593fc733d5708b2778470403569c7c75b2b2faf9660dc4508683222f409665340601281df091d63c5b366c26d75a80ac4071830c2ad2436882c5b37673ddef7a87887b710fe4cb8fc4d409ecae54127b4509c23bd71c71b12949bd9561338acc23fb4896fb107509fb4962bea53139ca0ba23fef34955714c238c8f3d2413f12248218f47cbed99047bcff028299fe81d86283910ae3fc7994b95af88eaf1534d04771f35996010df25569220e366788f574158721ae68c9e8f5fd0c5c24151a706fdefb5c3ff469423e278411ad7fc7aafe7d3b419fa4ea06143897054846ac4b25e4744b62ba8a809cc19253a94b263e294413325db7c6363d930152c4b0d3ab8f0dc6efa65c5af39ac0b29bd0d58efb1cf179bb91a944c09897b208405b75d6d5e05910b4e1c0e55dab4eb2ca24e527000cd4a6e3834beb4ecb13f263507b1520e596763351a39c100acd614040150bfc1d8cb9fa4cc50187b88ad7d696ceb098a5e3e8ccb4ed61d966976eda3204ef39ad09bd7f0c99486ae4807e413554ef64a7a92f2713857ce04514a13f019c1ade43b27919cbaf0920d95eb04a36f71aad735113eb7553354e32acc418b5c3d61468f1b77192ef8bd01f8a359ca09e789a92415cc1e33fd44bb2c79d0c57636903a32d3d2f684118a33c6ed5dd7b3152548be3d2506431a0fe4fcdf6c4ed631cd27ccfd4fa568df6c1ba7058b6cf97f002e69e3d410011e290902695e782ab37aa7b3d447a63bb6e5121fa85cea5ba9acd2cd9643bbfc7e329fd3a421e1b2302b229e0555897b3c87cf77325ce048198dde4fe10e7aa3be8ef1f71c711c2b3c5130d20cf3cfa5d4c69c643005df5d43159967409ecc8563c0d7d34eb677e43c7f4b06679cd95a1424115d1de247f9baf69cba317f422fe26a9a0e975c958bb517e98181cb46f68f12b6d8787caaabe583709f302a4be1cedec0efa2ede5603abd84fa080999098a25055ccc2f87e2675e8dbcc91a6a699dafd51cdde4f83031d2c5d646d22011b9dd75508595604b94da7c6968ea2e25b3504f1cc4dc3e4a4ef9f48ceabfac9d72ae9f5a4128b43602a9a54b9bf3f784c462b745d42e383cc685b9a4401c7f0b691aebe06b640430452e90c9dec267253549864ea86576764d188da3039327f9f194d37970d1c0d8b0ebd76aadfffd757a97348dae2c69855724d91f919e27d790befe9bfdec8a8dfa63e1b495f71b0428be5a9951bd81f8593d346076a80f22eafbb5ae7f3eb1ce6629382e0332404fb43160e83fc3603de7c4281c2f3b3e7a54dda1475122e728a8ae534d924c1db6a182dff0c4c884c4775c1cb927e2462c62d739fd30439b1b1655bb79afaf03e7754520498d27502a7c578aadfd17a6e7997af816790b3e1453c1e958d7d58330a3dafa68f57a62ee8b590a811b65e10a6d2b6449b80450b2d5755551874a2c50b1d696c59a3c3d8f18d314d90f278523527af6fd69b963651fe2980a5a975f9623aabdf5e7e7306aa958220c4506f3b0edec28b7fa84f6a9979c29d9be27ad9f7dd9b8506b05ec2fb14aca91697ecd31a3f191f007017afed0f473462e8596cb24d61e9ba002d13cc54d670ec8e96233f91d9b3c0bb970e350ae0ce6283b9ba7cd42690e0388802059b29feafff1632661e2dd02750768e59b0b7f2027a42cc3bb81204e21e16958e32cddac8b01309782c3bfd9df95d38414af128ad979da9d9424ccc267b80d64f61e98c9d6936ae5b042bc28a7cf412d61fb9f8c8a072593cbafd7016166dcd316fa69d98f4272bf9ee26a756a2e227fe7935ebbc5e68e54e684c7818b986811aa62b9420188d88383154356933d07ca29e8d88f1992854f593626d962a73faf34ca1f99c9c10cb0217dcf32cf7651babd7ea57cf195aae1b8566d7f732db40a5aa2f55764959fe3ee6e66905b64a0bff6c74e1bfa5a5fca784813ca399675c1708fe2e15e71028d4e79c205d37265488a552ad2707b14581d9db260227be5530ae350fe13edd52ab62249f9d43a2ff2ccaad447005279191cc9b1c7ca48833dae3fd7d42156683ad9fa66e2ba26612d522ac2c0368afe8bfa4eaa779d76ffefcf07e02a03556c3c1e54b16711c19986af678ef46f7f053f3abef4e618919bf7d1ddf256367531acf7e3a1ed5786396d38e3814a37c93d91527d3999c822e7e47b2496ff3710591c0b09c0ec180ee16f832152481bd3f830d61bd10928a574141f7e366b91b162f7ac4996f9cfa5f1fc12a37a648849d58c3a1d63cab693c125334d6941b2f2bfde60258c8ceaf61ba16bdc5225f9755601f2f45a450e684f865b049818273ef01ecb102a1bf679aeedf35e72130be0ea30a5233d0e7cbd7fc5fb465b357b10745751abe82d7eab2c304d8c72a22c3702a6a53c849dadedf24298851b400af1ed16786b5f47eff52416def8ac59d6d25fc297a2b968fe8417aac74360ce736daabac3b0f7e1c70227102c15b7a0983d2212d0f853f70b0a806cec03c41720de3dd2a82f3a91903c95aac9860d2cfce22a2605afdcde300bacf78b38add0bfee26fcba289fcdd81f00451bac1545516ba86a8a3bcc7529e1fdd9396496819cf7f6775e5faffd0b13e78da70a789042245d5ef31eab52453803805b1a068044961cf12916e3a5a5d5cbd30023af744bc69971c4dae1fc1e785e9b84cb867333431ae89ef0c36e44bf1db39b8a1287eaaced5173f308e9122d5f792afb9ec1058960dc247fd7ad444a6dbdfda05a418b51d97c84f998afccc196a7d22ca80027c39f3a5e1698e941023c409af8df17ca5fee317c511996aacf84a60ec13aa716ac1681a0477fb8a770f9e9f806299104218c3ece8bf45438b1ba02256bdf2c5e8d77509f94f48204112728895ab243e54143e2f01cc15ef312973ada8f0e067bf23205a091afdbd35d547ae3691186da2995cc8585f91d666cbcce82ad3fdbdb74c73f57900a3c81d0025f8ab3cff04f550269f35a14260f2a9b2bb238fd03097fb76c29428c1abbf3b144e3bd3606d15e1a39ce0baaff69c6a2d0edd4be12929d730aaa1bbdfcde32c1d98307ec40fcaf3dca8a0d161fe2db745c99e30b90e3389a993e7e08596537e47bed067b252dc2ed7a9bf0edee26e3703d5af66df487eb8e967afc03c6ed6d79ba964b3b29e123c9e89839ab00824936e185814db40d20df90c41828bbd33e01f3f338d4c5b35c2392e359d5eda1a728f7be063365df630e06ce550fbeb3340dd69871b09f10d6bae821c3e71be177d6ce6917a7706b4c8a66de34f13609e9fdd10a68570c962dc076b82a6701ee25c0f42b18226a5d27d54f982a95b853ca7261ad9f40a49fcc04cd3adfde36144b6807589a2cca119f9f0f70c865bc0d4febf7168905ddaa3bd83a1e66a53ef0533c5696103f06251e1854ec70d9c7a304cb3fb9b80f3e51e7bb6bd75154730ed7ce80481cc1a5042e018e8fc67a51c163a07a2baed54d036a3ec0ea227478cc339f1303026d2d3b39cb3acf2bbfe0c4f6fc54c0cfe0604b3dd2e7eb5c8db6b5111e6d4b739a1536ebd5d82f33230b4a394f5e3dadc93ea5dd083f4f51f8c355dadd1d85e2c0e3839ec1f5245f4c27bd9519d4e6cae83e9fb25f359ac55e152b0b5b9236d27a2eaddd1000431283cc8bb4dc7750a9d5c68578486932091632a12d0a79f2c54e3d122130881fff727050f317a40fcd1a8d13793458b99fc98254ba6a233e3d95b55cf5a3faff78809999ea4bf978971ee8b64fd372961be0aac22e0b2c7d9de92dfae50ae7761046dec304f9d62fba5b7fea6686456bffe41256026df44578c0fd5859b5cc18492d8668dda1c8998978a92c47dd5f8fae4c4facd1f3290a50a5aa11de35176a95bd46f7cec44f4a96cefaf88e391f85b9a1b913174b2940b81fba93ed1967c1886e86fc62d1e8c754f6ebdb842a03f2a45ce5454cd6838d1197a57af0c32bd193c9dce3347b137466690241d440bb4af1065a9fed05a653ef960123a3d2d20f4a579f48bdf05de62d9dc4c7f8fd93e312169faf62892019b4a3541a50c908cf0e8064996a0236a12d1db9ea6cb12c7faa062ae057b18f530337f4eb92062eb562ecc361c2f12c19e76138059a1bf3650b6d62df372f22a45ddc8a03e22ab246e9e5221e437dacd4eef0e5b62b8e7737c8b4fdf88b42a872270979ffcb9731f80612073b75e84746a65549887ba9265c546542c8beac8f30f1375b3bb8ec3c4d49ebe955d4c17a039ff6b9d914cc8f6750f6e7cc6bbd25853eee9444249a2fbb27eb5ed9eaa9b3804e6ddd44718920dd3102337ffd0529d372a7bba5a9119ac61298be542201924134132a373c6f792266efec5ffd04faa03efb37dcb0e2fbf2ac6cbe41055974cae39f074dbfe006eb754848e8e64d267ff641af55d69ec1c557dfa51d1f220981df6a1ae4867b487cee83ffb7334e2bc72b2378bd74a58ab2a78a2964d9eb9f0a79fccb983a91bc6b252b67278e78791a60092a503587c55f0dc4a1a4c026c3c965cfafd516d3d13adbb715c6325c9cee177b4ada73c5f00f1d47b4596c640643057b2e27d5b2357054bf922fd98b15b6c3f24098c9e09957385bc7ff2913e50beb57cd0cd1ad4780329d52a0ee646208f7f6a237a2483fdbf1a95302a0b6ce887a1e02f0b535860ef7e8dde5eb7910591600f613979d41e1db98ec004ddd415d5416767fdadb8f51171aaa5b4b498f3bc099a2d904304e2d48b309849af7ebdeebd98e06cd1fb21b02bb3e6da8465d056a293ee482b1c302eb7021ec12870c91b3efc021f6629cb16d3300b96d00086a855830b29d823ef71658dbb33f1b422a4ec1936e0154bdb8992a97bb1406ffbfa48f1eefbf32109e6bf57d768b252aed1ee7ae2758667385290a79ef37bbc1994a365fe86231f65d5eaeadb29125057ea6da470a76088ccb9f4b1dc232aefc6bd8f67a3921123eb8611ce2d3cb9b804369021463e4bb37e05e7509d0bf40eecbe348045e6643883405a89376950929dfe8077ce02f1f23680900b4971822372dfb9374c4bc563154deda5607a7fe4098a64316ebbf74cdc70186a481e7b35406846152189dcae89f3f3aa0f35edb8322265d4903008ca591ea6f502da884d3ea105a12a685020c77b941eae644315ff0eabea9b2aca7293d26335e06c517254d21c63d0b0cac1b82df78ba4cd280458955dfbf771e54e73d476b1489e7dac6a42b3e37b28f19a425045785939458b2501a38d0bcd0266e16b08f1a336b503683af3aa94996eb24e2ea56e356f42b54e98a62a4106c9c0c6e0417e5afda0803602033f81cbe812c50d40f4a039c687bca38e5900e3e166087b48dfd3bbe72abce20c2aac8608c08d363e92025d790b556983a3b12df3609184469c7838310ae32236f47b9276c690f1c6d0c3a404480234ac8ebaaca6b44743623eb03b27269109a82458b6d92cb48500374bd60f46ac4a31a48428a36c1400c54ce28e7188afe08b42aabbd9f8e33c154e02bb410e39f43b6d77699190df02964e78f7b63826ef06d6d96a1f34045c2d9d511a43a7937af270fb3619269092fecdd93f9e3cdc7e42694d8953e7ff2e6fad9ebdbc19a0247d357959e3380ef825506d2ed39ebbd567826de01d1abcfa0405526a556d4a3a0444579896cd437c325f9c8bfa66aa3c9caaa33923d42208142ed6eab6aa7703b126ffbcdaee16664e82ce20be9a90fa0968575a101d1b9fc6ae910586d811c8aa62d78d59a26ffda0426bb3c4445758d744ef0c8afd8f08420fea826e00ffd1178049d2b8f1368a5126db0db76be69e2ec6d417397d648cb1d84b2b152829662108bc55a2e3535588b786f63d18251435776e43c7a483713b921bc6245b77cff08398dcbd81afa66e7bd535fe52fc0115de2558d97bd4ff07c4c11c429ed153ab794430b1d230c52bfc2e94a42153aff584621d1a083f803ef6a7f518fb1f3c7a702a1927debff9e6c2fad9d48d1264feef8b5b2f55ad3a07b134194d7949d086f2b15ec7ae458cc753a2cd389f216958a90adac36a04768b7bd04f8a203758f78641c93849a8c4f7398c38785e68062a3a45627c4d2e7cf1dfe36077f9d21bf5b5422023b7d2ea9efc22e23cd3d0829c28a6bb020811946262d515bb0b0063a7051c2c2f01a945e322cb922b043f27d8fd93acfea39706068e0f34ff5faa76350038b5052e171fef35ee12edfb9e3b034076ff1824a71904eaf785eafbb99dc82efc834c4603beeabdf5282bc0d607487ab67af795281785fef6d225e913208816d15dad52546bfb40479d8d59cdd3cd32bbe644fd0446b05375e15731a2479c40200cd059f46e4a484c38bad06de7baf0ed0aa66522efae70da7b29d94c5a2c344f595c63ca0f005c6cc35b2d9d8a383db4b0c6d46a59a6dd8e6843ebfba0627bc809fa79be9645050f04177644056f9f789e4b52c4cec123fa704c6e9662649cf1e751a1b84a40c99dc597b54ca086a0a19ddee8189427c9855bed6b05e85a1f34ba0ae5a0751a337ecc82f19ca3a5c89775279c4ef4ff5796f0cde9307a6d8df849cc4d5e5dfac81ae181331c56f69ec2eecd784e36715697f895f0ff60c46ca45d40e0db4a0912dace3c82b4019eaa8bd0798400a2a74def3cec895ae18947a2be0da6fd866f98245a5ae64cebc87458e2d2c74d80c6c406817bba2947e1a35934dca7ad5853e2614c8467cc5d9a8592ed81491b17f9434492e98d54d8f60a318755ecd407dd79fa6d610e1c9f3c64a2b92d1254b066531136df0ac3ddf003927e1f7c58dc37e455859ae225f9d799ee0e7f2bde93357bd53405385e9df717e4e3e35f231f86abdc5cd6ebcdb393ade0b41f9ba3088f44f855021f0e6231cc8f7c489e1b18f557f6b9be32fd149727df72b46a89579c35e2617fc7b972c9adfb12f7402a0ea96f0a65f9be9e650c8f5212e6a07ac783d6fb2023394816e53f916c974d374bcd7b8229309896ef196ea35a5f465da16dafac59977ca496ae0cb754d1ce29158703c5cb0bc6cff7e74a3913c464192e81495bd68298b33a4b9bd6904dcaeab5ff903b1331522fc89eae7c05c00098b3e82b725d8d965f4ae47457e9b24961735fa94ccb4b43a0a9651fd4f7f924c17bc9dd57b7607d8f0da320a027a9537696ccd760b900a209e16427a9b217d77ccd4de874aca2552bccae261b12d9f1116870a1dfa7f97651b9c44d63ffc322b1f09bd32f03fb261acf2d0e2f71eb2a1a2f738f315bdec76279ad196aa4a50b482ddd26f28615f9465e4961430e86077934fd29be9d569e236946142769649d2acc386a24fb95d596c129a5c1af538e17bf34f8ef3709027cd0b8c50018a8dd3d15d6262c2b26c3f23ff765101df9c9da1743832aefa0fb55f82ab55e771bd56a4fdfe274de6eca4222d826982021c0ab865052d88fc3919627c56aaa50638c9ac47b2663db15f26eb0f672c17f737a735284ee62dd19cd28a6b16e4a69280ab3bad07b61ecc4435f3279d0f30496ff18c406de2ea24bb6f1bd1549a88a13589e7a0968d6d723c6fbef89c9967533578424ffaaa6a50054dab319812a7dcb7d444c4c762a65d9822b314ce4129bf18b9dba96db31b0e1b0cbd2e7a03a09f9818c77c12bc65e8f7fd83eeda9cf3e79a14dcdf4f8368996d1ad60a42e3ff5456d5d459212108aecc6e86092a0362672a47aa740891ff9c6c066a67bb1a10a5648a1fce4b071b1995e45dc6452ad1a85990e8ea31753c81983e0ec92b3c710d51a3fe5e28f529a3d4fd5fd8a469de45a8af0cb45293abe3924017a11bb1bcf69eb1f48b136190e81a2820a2c046f4a987e08a64d473ca3cbaab3972152040ebbc4296d7c2d30d50d5e324a74158915e87e3e66e3f9c13e7a1edd8ceafeea9773ac459b69fdfdb7888bcf068800550df1917a5531c83158eb8767a2934a353038ac5b1ca02dea7c9a324087904d39f95cbfa4b95c3bf4b9c9ed381e44bb4ea2b2cb53364a455debec5a6d12b5859fa2d010a4db8fdb7229ba593a4b27db9bb48a1115328fcdc0cd260b3ef21e2feed1f68d6203f02e147066d154706131853068868958964e7aeaf04d9b6df5d38e4c763dc779a7be405577606ed41d4575dcf33398ef8850f30af0296ccd5ff9e7dbf729b984dd135fa2920b71c081a0d182d41f28418c5993f5d1a69958862a61482157216dbab3da1d61dc437cb5c902e8b3522294cbf3c27239cd0a5792ed645a9dd1e87d6528178f8cdacd50e24871d736d56f316da5e84bd1a5a811abcb58d8139ff4f907fa80bfbb0df78430a6851608aff56099f76d46403659d0f74ba58b2ac72f2cc7af7c77957eaa5fc66aa56fcfe89e687772b92c2e8806daa1f5b33b8b53805dced1727dc234cc2acd1c3ba834895193309d34c445a49879cf51eaafde4aced343e8cc9aeb37462e6c45ae8ade99f627ec0147d82a91f5f2aae8b3b1cab503d74f7af196b89001b0cc6c66dd7620746dd224582e8857079059417407f79b06b11a114939d046e4fb1419cb69a327b5ad0b90d19005ffb49a04e4967a0e04bfa9cb343c4bdc61d6566dd445f50eb4a02fbecd18c4498fe657d55a82d2b7f916078b6c329383eac108ff263c4b5ed21d3a14619792fd128410f22a9fd79980f312813f93da6ee88c5af19618313c86141735d6b4c4c98d760e83dc54515da43e13d637c7e844631f946cad417050da6d0f48b4d920540aa496b1f90b07aa6adf52b1dc3685ae6462fe97f11fd041d5106876816d704790f6f3a3082bc229dcbe173bb5497954f13ddf9bec1a18b87fe66ae6c7d87a4928546b83911c4a8201c4aa9b4a668bdd1598819f269b125ce1d55fc10d810703d9a648761c45675ce1d752fa23f785f2d55b2acc260884d602c68d2edcd2de1dabd4d0a63210e15f85e05980c9622d3a3b6e234a74cb37cdeba23d56bb32c93ea6c64c3b5ae47f34f4c80554c3114c5e4eb9b440984af3eaa24fb86032098e0ed364035d1d290a8336759f9f996aa905162424d61aef7fd531b74375c9c0f63739973f3202484bf354d16e88d4d70ed89c98bd368321a5359fc029bd09bdc95ee04546e591a7072d55c3bc38fbbe417ee7fbc5855b472bb2f554b05f7969cf2ed157629c52af09d94132cfd796890ba0ff3785ee28cbdaf53a5a2284a22ccf4c13b6d87fcec8189e2108f18c2d9f34e6ed32459774147aa676bac5530a6f9363ae48f3b88c5bfb24fc2c677f496884f7b8d64da8c68ad36db25ce2f53b98e119abf7fa6c14ce7b14da867cd9714cc37c6809e44aa795acf0f528c091bd11821611aa34c6ef8b6016c3fe77c22eb3b81c06b553a49e9dcfda4706a95016403e03e849eaeba4f872d1c07c9f6107052c8099c1e3e0330a02d1b0dee35ad08fdc8839bb6506bb7f78eed8e83edf84aae7502915d923ee440e7d3998b7d67265264c0beaea3dbd873c14142a9a632d0bb133bf99809858b3bb88e91c6dec8529e2f866bdc4b8317784ec7a2afb168b8e52d161351f64f8c0d097c9524dc69045d933521c39a09fb9191e15d1ab20259c91d31ad1fdb256d11755df229f891b20d3a6d8ef931d8fb4c351ea05f1a8839e37e1ef5563a8fb5056673575aa60af2298f9ff1e18568ad0492d03af14d62efa0ca2eaa9996e6ea35678d331b771d3b3efd3d09211741775755c67b85dd3ad1ad8bf12b5e72d3734df2ebf400ee40f3ba1dc5131c59ebf0b0d831e0614c7886463df6f62950ddf69b9310388f7e2eb2277bd8ce47efd09fada4d318381da484275ab0a96ea35edacab2aa7f3ba93f0d0361e899482b97daba45fa715eb32741bd5cbea3a2fcee9647ec1b1689e1ea5aea9a64f271bf9a384336488a69cfa94564ce61737adff5cf8fa9d2bceecab922297fee6878ee504ee4e02dc1dda58315da2a49a73a9f1cdd2e7671c0fed644095c7ce569a26a72752bfe1ac62ee74d2979faf7ad86ecbc4590dc68d12e66f367002bda74a2a6494164caaff5d2077ff6c0aacbf4d43b6c9f5346385bf22f4fc191073e27de147d4a4be05def6b7894044ad4672b96fda650e23e50cfee81c1bfab9990f1d94756e62dc995015fdd11e874e239a063b5e1f0ca3f52ab77f0e1a79c5d734118c19eaba700f5da23878209db6eb3f1bef6b80587c3be8d230f38100fbd45b410e59d113400e0d85b1a5cfefad4769e0d3280f58765e4d3743f3d9f624398b95655daad4163f69a6b081b1e3fbdf213d2ebe5475580762cf0035a9c308adcdf5d84efd67b84a78ed7c3450e2675a6e1a4a54d717ecdd2e80aee279ce6fd92849ae545333eed643435fe53455ba60595f6d1321a7f889b9339721d2812164a479309632a0828bd08e9fbde3a2bc9be9f4e023b98b45b20bd1011b3a43e5f7496da63d25163a1329b885e3e73335b026c1ebab272d9b012d4035f83b7d853a200e5870b1fde01356a7597fc86eed4a18afd5d3f4f4c21e266a7bdf5d95c7d430428d5860bd3a365d4563bb0cbdac0fc8a4e8c5a74781b0fe351af827f4746e81f28e1db9be11214878eabd3d8739a73d896aa6c890a15fbd8b5c6c210254af1c07a4e644692c7f1f2a38ade2335dbb7f47a4a1df36ebd56c538763d3272e40086715db8a2455f6e84293b4842be0f397c4dedb75a124b71375e404c6cccbc84dfc29261258522eada844faaad68af68cea607f113817b0b8d8bb788157f4f0f4ac2aec646eecd1754493a6dc9c226d66a071b33c658b66656654e78c326f6004615e5809cceb8449fec7e0a3e572ff2ecd5a9f7d9047812106f67870c304bf85020f8f88dc17f130be2ad285194055eb5b646d5c1f14aaf5a0eb53b4747db6807783bc690538c0326c02a10ca05516a531d442617bba89e71d79a1e0aca1ecfba8020535ae159957f09878c0e379eb6437f549150c01c50263e98a7dd2370a017dd69273417722a832347d2848737c31550ea7ff3ab1064b5b8335125008b797de468cab2526062c1a1ed8cc380d7013736687a86e91f6cced8ecb278ddc9cc7b3991b66c2eaebeb919db2341c0d701379460f960e6a3b8c02547344f17a6098e418662a808b7aee7dfa33e95a3c23384ff6675384047d93801b56f2e4acac13590b9682c7d05a3cc87e82725c62328adebeb867362765ea512c9bb8ce38283efabad2f3ff8233dd586ec857884744110ce62a588e9b9a985bcf6b1f17e77b23b06c43079069afda17152c2148b202d6c2b5e4b0f227c5a5884beeae27814eca616a1145e24d743aebbad757036d13e0e9740ff6cc958e1abeea4bed67ce4839f6fd63355df62a05bea4f081203e2137676cd2b383ab9cfee7f2ab643d96127a586b61606a2c7a44771ca02709eed1e426e2566e7f329859eaac359c12a053956dfc354d6fb60cfefe6a0fd22545cdee0c21c2af28f12933af60 +MD = 5169e69bf0e777581ca94e070b47454ad7f6af034dd3e2ed564d020f6557fd908f721e2b19e548fb0c41763fe0abdd89efdacce8e3546faf22f3fd089928b019 + +Len = 66760 +Msg = 07ab398f3a21e5a2fd2c0f8573ad22c683405d768b1d292e523caa503fbd948fc98640b22f2eff94691aae705ee58a5b57054612b4ac5bf6deeda0557c201aebea8715a9e63273b58d1f45b187a698407e1491c6d497bd70955aa275aaf09a9b50f6e1fcc9f4ec0a5185fcd154b8f47cdeb5671b53a4f6a360cad93631f5bba5e51bcb343f3e109d9e92fc572fe245176130f098999caf9828876c237af726138f3dfcd8afd687755a906dcb7fed331aeecc53c50e468f55d3d784c1ebbe82ed38a69b708385fa9a6fc577b6aba2688c6cd3b92a1b6c3fe44a03499aed117839c79cd18422131115c37a409e1dc68975c58b495026d4664d7652e235e9bab0012468c69df44873ed40f6f30e3c2441dee03d2cbe9947ad963e0e781a457fd14c3752a14261ecc92acd83b68b708335cea53089fcda8dbcc9897d32d26b298423e8a18bfcd1c6bad55167b19f21aa104dfcae8993536e3aed41e939e4c180708d1f9fab52ac9feff4b6eb0ed1b7627863cdfd540a6ab2cf0b4d98b4d8b14b3e92c4922acc5a3f0f92e357f2a99a731519006611e98920242a95d3cc37a154953abfc32ff2436ec3b4c0f387b033a591767d31e9b91782e15201e1a987fb611e8ef87ae34dd0f4b3643506f56de8c091822ca603007c9eae8b790c7253263b809557ff6d64679886a92ada6469228bc046f60d88491f3c31dee59a50208aaa6457c599f6bf7223e58c87b5fb2a4acfc3c9c1ad9f196a2615522dd46a788f7572dd2891a6e7575e771334e0e23ac654451477cf71fac42300f03902e9e29d66512e6a2fa463800ee54819a3422100e2ec2dfebb257395fa9bbff16cf4e71c43aa5271bb19bb53fed6331f4543655e41601e40b9e40d46748dc73e59b40d74d52452277d2c783af5f3db2c100c904a384aef2311d64e3d597e10061350df0de4683572bd06219cbae448294ac62a2b9152a6910a22c0e37118a333e0f1e250381d033cc2ce3ee0165082ff3c98b969121f4d71edf1eba0830087ab09bfa0a398ecc56cd5ad5870d1df92942eabc76c845aebaa026a56dd59e1c458d5e1a06fcd7d82ea3ecbf6b3b33a7fd26826db9baeaa892691b68900b96163208e806a1da077429e454fa011840951a031327e605ab82ecce2fc0c736c286bed7ac38713d6830d703262def20bf310e5d3f736224e2ce2843d65689c3adfe4a6e3d37ebb3a48ec484c2b39be11a1c58b949c8e4a53adad36e91924e5ea2ed6330fd7d77c936fe60edcd338dd5ebb7879bd4a0b3e31e398ca2f3fc8b546bc4a7c47f81bbda89f04aa2a8164b8bae82f9795283767b077aa2957ffdc7314324768d25ed1e842814d047e5e43b5edd0f4cd665f992d9811ec39a982e9891d37d6e1fa30816429bcc90420925f3dbe1cce037616b9f9b05864e36cf0775e2974fecf0597b39925f98093574440b9f674c6210f762031c1f51c10ea710c5a0091c7183cbaf0effee07b976d9c6c8f5d7fe20f77a7553f938f1ca6692b32e5693539a5e7c2bfce7b18c1f9a8c36d29bbe62cb5f6d0e089eecf6a8f324970672d085d5e4ed6a99e664a5aa251e1cbedd850acfcd6194a799a5d10b18df14e4814b43a2bb81f35c7851d4f79af1d0c457c6669ca5dab1a755ee016f6c14c55f0e6ded8f56fc4ebb1a13aa7650ca0ba986ed06b09d5aed8e70401824418810cc86b3040a2b9ee53c481486a50ae925c4d7735ba9f84490d3652675e85d8b8fc366b52791cdfc5f669eff0a021de1a7bce5f3e5f76b3a540ca11bab2a04a1baba3adec8b4928705b06b1da52c0e4609e82ee926174a9eaf90b08a4847db6cfa378faa57f13de180a0590ad8814088d4dd1ebdac883b03fc06101cbde0464ff6c1b1a255c6147e48ccc5412480792c9112320bd9c8a0ecc1e34c2d7c71d9bd18cf6d5152a1aadfd68c5c5b09c80c93b70e053e4e6700cba9aec157148b0a56d8d6ff31df228568a2656aa308b68f70cf4704df6ae1ff231bdf1c04167a5c8fcf7f03be4bb728bb44fe9cd391da56263253cd69cfa7e08580dab8bee2ee44da650e076138de093a36ae5f4745b2052698aaab67ed475955814834021a5557c9222a76c51705ab87effb2e8884cc11146ab23b44343ece3595adfa581d3e19ce9f4ade5476dc8406e96b8711ef971e6211010999350cb3882662884b7c06ef7d24f59a99d8b12749ab85e56de6816182242d72d1801faddfbc0c7a36a74e5d376ba157ffad3219c2bec0e616fa399f073c8e2387760621aedf022ca43f82f79fdbd4931064bdb0048bb30587ab2e3b6392a97825b75e936807ea3c3e95332318ee05b856afd29e71aac2a04a69bdbb29ff160d26a47787bdbf3b155068dd84251acb444cef1f49bc847652d9c68682bcaa4a4f24cdef82f27d7b3473faf08f66fa8bc36d92e22627b14499b0421746be5cbcaa8aa424f9b8bb013623ebfaa93105ddb2234bc9c855b9c3f1585cce6b816ee3cbd2c7c67073008386eabc8a5625b517ad187a34b4b8f66ad65c773a65b859661f9799226bb3d668a332dcfe3ab790eff0c79eb16fe40fafc51731d9b9c5c4aa1233a8f76fedb5371786dde4bb6921cd499b29de4e495e195a231d3afc2c093640516783e1a3256550713fcc5cacd015f40dbc19f47b7a2de1fa89cc917dbf81265b657665569f79ea6c632393052470acb9c5d2e6dcdc541928180d1e1d501130cc133d5f8a9beb41e2e878f314a753c009c7b799f00d325c16387b069d636d0c2e015754a19340036f403af13dd145ca9842268247853f276f7ba4cf70520af4ebb042d95e2e0e8b8c0ae821e32abd48cfb5be3465ccd0f77e5208ed28a46197af908e51f2b4ad56a3991ee9c72c20b72aa2dd24bd4c9e68cd4c15e448e30770c432985321dfb301608b3dcd3c4e2692238a01d7c0ad0de7f6ca6a59339672fcd4070f614e07a5f82d51c350c519156664ebcac2123695f1756d64908b272ab8599e41e0d9b4fcc7747d5df8f405a3a04948a67824a1dd11b3a5934eb22d951fcf58ee6677603ddbc06e5c4a4bac27dc5b11137e6a5739d54bf384c84b0258bf9fd7436689a1dfc1bbb54cb93e75387714e5902975cf3298a8e7a7b1a85ddc04659a0f75a2f25905a0e2bdba3ee94c1d0126bb2db9825de844f27a8f7c88957a9b01a0f835ca40142a671de1ef80d91a9a64e2dfb8192240ca948bb61a2b2baebaae8682c4a21b69b2c2ebb4a2c4760c6b10a5d3e3ec164e844e49ba13bdf50d4f014e99c2124192d476a5a70b3c997eddca828eef83a04e1c90332ffba98812b2aa6791d083591bfa02ea3d7b41b9ce7cf2f7851d6866ebfe0ad67c24765b5ba00a402f527dd861bde817ec958c6d97c31a734b1012c084a30eb22340ccf544718186b6da7a36007aa6cd38cc751b473ab194454a0b43c4a62c44b9b2e5dc69b1d099ccdb010884cacf68a6928449796e48c9083dca771861d41cb40d898747eb5807c5d69ab64b28b278ba8a328e9ab8508ff85dd8c0ec70a69886b3006c4b78884f565fbfc5d00f007be916284127b35957ba4caeb7dd5d1446b645e311f103f1dee2c8e8bdc00829f0b6c8ae07ace9d3cec26cb4d257819da5c728ba1ee4f825350fb48e14778eaf65b8046c4896c640438540a386e788a3444dedfdc973df82f011a54850731cf149416bcb9a71c33f64876ac37c09ccd5909f1816c84a24ab8ead1d8ff85f3da02a07614463ca7b21804d4dccf83ad8a5195f09ad91b4620f7f368fdd82885b3c765e877f4b0d6887454b5c08a1f746825ce2651a9c6f020f20526ea9757b1016bcdb40d4a6b6f5e12216380effdb610dc9edacf66ec6af5b30654c8c47c3d6cf7bf21fdd0d53adbf851244586833e2a7eec533b97f47a4542e03abee7fef29e722278700e5601a830ce4137d81ad35d149fdabec548e9b9a57920f58945983ce4e0028d8d578a6cc27e027d6c2a3c51a4a1b780774f7ef8e6bb4e9431b9f7f156e0047dd43e9ed0b44bae40ca1c42af39d932a8357103ab0d8c0bc468c2d662ce0ac9676b75057c101c8fa77b56ad1fd82f935f88163e7920d6a1adb5c8ff3a57469874db628717ded8ebdb064245488b8b21ccf6a6f90b29805676a033381ff67cb8cbab6fec4924690b03f347d1d359d525180989fa082f727348b16b4abab59472966303fbbcecb63748cbcc1b674bf5e76a49280a193b943f4a71d8fdb29b760efa8c857d153da7b6d2153be9ad67d4afeb3de9f0e654ce04a567e218afb00bd421ad5f3bff2024d2c859fb044db758c5c26d357616820808801cf2655bfd390b334ef8fa209b15d152207434ee436a701961756251cd2a9504166eaa5b89e9fd57f7b88520b962fc9af00e403811f3fa15a20f7d413e1cf158dfc0b05a5d04f0b63107a3a87ff49bc55431f2d52cd9a9e0b76d8f8cdcc664a6ff4e3ffe7f702d78834d1b60f7b1f6fed145106a9906c6a228f560dab0103813fc821feff917fcc476f2b6ef2882546bf1b263a2616098827e11b7d4c0e3b3c960c317d6d3dfa4c2915e3cfe1a4fff343be0b3228dd169a940285d2116251ff0b278f05b13b26f9c5cfa7534d6013d823738c89525407f3ff6a11b6abac0c2af7b0b7225c377a3775f2c283a637e577d6e2069a12f94246b28e6b757b29ae52f42e365ddea16897e235d1fb7c9b0954c670160eeb5b79d555f5ef98f089dcf988f68912a917669d62ff62054117e3e18aa447325be9035262271abbbc4b0ca11eb02beb5bf818baa0b5df4b942cf9c08c04f6bee53073306fa879382ecba1cc2dc19b3267c1e362040fc638d648df545308c0ff07b04de1c6e087b8d8aa50ed4ec153924d035b460553a3478809f92f6826129d43e6f8091065c2984a558e86fa35e1857c4af4b93d27e31249cedbb443f387f41a4305f8c4aec650d46bbf2ba885c18685f7244e140322036c35fb757ee78dbe0b630c336c31ef9d374b674de237800ffaa67e77125bdca59faddd056178903597b55f6b7f85bab7c3731b503fc189ac3ab767b6c0c87f7334b4f4c6943d3bf53fb883f36710c45b19714fe4f9ca6ac5d6c884af97af86e6cbd9d74baf8bed9773fb2e5dbb7978d199d4797ed8a88ff74f5839a41f978f9ad58af906ec1b2176c4eb931d051664c5d50b2c8034e285bb14c51b46c106f5e9e256de8b0231743da31876b3ac7df4924b93ed9ba71ec88bc7bd8e0a1484566e62bc0c3a6a855236bee02db44a26c4e17ded111397a3e4d3c8a0265082762d92d738e6b78d7d480c58f14c813697421dec954b9a9f18573da7fb58dca372e7f1d03c1264f38fc21901ba47cd2a45f8b2082b019315e28c33d64db9e0f0012205ce53f3d535436d0759b993da7dc9454850fcb79fa4a91020d405be1fe0974839221f2f8abb2e8531b16dd54ba977d44b77a8f212b3d27fbf41c1d9ec0dabd7168bdc09e80db7c732c945709346081235bcbe358edbd527598ff091d7cfb56b285c39379f95558f84d1eefa33dbc08b81c08ae6868547a37a1f107a55bf5a50e933a52cf3faae6aa28ba8d6cfc357acc9f3bda97c389070ab8fbff7f854e144d372be5e979618c51657319aa9a5240278f6b4e2e27e461b68523d9f421910a361b9d330fd003b4b4ac4e7ba63f9bc09192a1f274bbeef103af737d4a5843ef92e79826886c17c59ca3559ca8119963d250e4aeb3a82e1db9dff3d3c951ee2a294325a59e742527d1f58f62f73bd391b1733c6a31152d4e9fbcaac4bb351925c3d54a999710b6411b4804b6dde3d2b3f8a0b10e382b71ed7eefa036662b4d47284811e8bc6a517d4245bd81a0321c2f6d814c820e1184601e1fdd12145c11f81f42827b55a77e420d93c1a9894f3b6fd9be14aefbf0ee1147f56a410befeda0726ba43aaaf2c5f945da1818e062b7d903ff127b49f03566c1184eaa930d69a7e76d7f0d0271af08b2c4cbb4ed9516d7b5eb4ccf3e38e3c953329134f6de0e7647ed1bdda74cc3d81cf7e167f70ee2d0b52acc9424f17fa1c7e83cc97a89637359968190dfac89d14b1b621748f5a22ccc659ab041429256e3e455506937f107e70db810f3b98a5b07d957ae2673df52c244bc0dde54a35070cee7b0090f3e9ab7fdc8432b9a4ddf17d9c713dab020ac5f6e3c91424f3af6354df7d3a33ad495930cba13ce785bc344c2ba2eacd3eda16b8c2126b75ae0b2fc0a8fa07edf3b5e41e29567267a3a71563c38e7e304ce99ad4574b3839d1beb8badb6ffe427f95f8928612679c9744f15f14a26c96d4cfcee423c1fef41760aabdd75d81b3a98ff3586263a108c91c74886f7d3a433ee33f62a8154436e76752442d3136c3fa0a50ba3ed8a33ec1740b9a648d6bd813da48da64c39c74ba595be85d8991f5e97bbd528bdfe291190222ef743175c7dc0b87b5ea4b6c3018ad2414e8c507cc107a859bc9f7e3c2283d47021f27fc94fffd787f991b37eb7ad957444f821cb8d77d460089af2b24779c047cd5df44b20826a7b201b1841969744201023f453ed70a7b1b4b642d4aaf94d7aa38b5f2b18d2d71d7a4bcd54c6cf490d5a15b25d0779891667fb57ea708be3d34a84a9b25e768836b028bbff6edd0a03c9d74131031ae255c972173cc4b7ea186b50b8251bf6e38d69bac88ab74af1ca05708b170adb1a3783226b11cc06ca12adf876cf76db52ec4e0add3cc89d6429b7e87757444599843d143bb3b0ffec89b983caf798ab3c19061fe35eca5ecdea8748ec38d8dfc7049e4e7068992bb64536f99be4a8f109dd3a02c038e41693d31c97d403ee310d7e4fdaf079af10910dcd62d3dfcf32200092b95e123f4c1ead1fdd1601b0c4d1bcf8c0a52e1938e6aa26c7593035f8eb4ab54ea3340288d63f37229a77441f7c84400676ce002b1be5e82f151f01cad1834cc879e5565223530d6f48b0d2cb779fcfb64aa38b6f9a84bba3eff45c313a72fe30c76f63336daf48cb08f3834e29d54ed70bf3e38ec94f492acff66db48ee0748d751850b21c1c913fc2877e32f9ed6572a0072f10121037cc9d6e5ddb369556e76a294658986290d25eb5ecfe51b1bb8ef127987bdc8d309141a4532e98594b4790e96cab4949ec8cc4c5f53b98e7f933e69a46598e8fda82a3e078361df4fbb4cea2eb3598994e75dcffc0703558c66967aa603192dedda6ac6af37a2d2d0f360c9aea7eeb195d968faa762592cccb395c9d0e8c4f42e2064289ed8231cd2fd5321b920cab92c2f6c3103ee3160bb0aaadbc7af12d8391a84e878ed78f9d029a296b0a6941cd249d6177413029dc1cc5424fc9e894689196b9aafd00b162318cd7d27b1d138f2c945228a7973308b791039e26f9ecbb8bd8693b6385fde763b3259a0dae8ba382e27c6b979d9c582a16d9f0b7ad9d4226744881e7efddf34118fb09e7a610d0cd8fc98839cccd911d5caa8fa48b0fc60b743dc6b2c5b84d73c24269328d09ddb5a420c6b6ab2c7e376c60c1161cab0ee1df2f50eb8ff6bea0b9e00015e9e093e428686e36c222e6214de1cf35e6d7e451be0869bbd6fe0e7006bf17b944fcbaff238bc8e09a1890830717012873fc0e0318af574a203a058db0c5f54625c51ab19e701cddba744503a3e89e184b83559ef50c62bff8116a9cbfdce4e315a37a9f9fffb255aa9fcd4c283ef02cf4d281cb5e07d443e3eb07483ceb2ab89bfea3743120d16ff302f0049e003d8df8535a315988f3fd6b30a2362eda10ee3f3e5ed659bbc3531c0476d40d16ce62df6da779f1770916174904119d91dead89cb716e21b8ce2aad0c26637e67ebd42f87324a2bbc5cb56f9cf57f92f7dc1c020ea4e390ff3b1c2f84c95af8dddb0b720bc14d113f3403fc923d2813f65264316dc1ddae79525029d32760845fe82e2f601d29aae9db284594a3b62b7587ac9e518e06840c5aef2361081e29d65865efee0e87fea0984bd308f0cedf5dc41dd223d50319a19d20a596343bef2874da391d5c0f164db2942c57ec1a399451df54495c7f7621610c38da7260de3e84b29555ce68f9d9722cdaea5f4240037619ac2dec20a172efda63958c35ff00d0188bfe2d3baf2a203b652811eefc927bf463354c8ea47e8fb3af2f486159569f32a480412f412a04e85378cac5762aa79700cb4672872b88bfa3106f8df4293b286743d2edb6bf655c2e44516fb5b1432a0b56a07450632425c7a0c960d95fea235db0a81c16d38dbf7df36f95c11197d70d3e233b090da90ea3481d830fe2f54b0c2d8a656a4dc238c9edecdfa330ebc48dea9770b91160a1c06e359d9e98a4c7fe234270b9154def999990f462f8871913c4c4ba69579107a57cd7578f6b3ec0bbfb96e40b13760d7561227d064fb2ff273371c220c68467dad8cc59e9420d5dc91b4f6a682f84bae5ac6c21981fb69e529f6830e64880eae8ecdb4ab40457c7b2ed35a9d951c11d72e334891f4fd91d1b706fabc3c4cfb8561eced3f99b6525fed70f4a6561735fa36c435ca3c764a40b0f4fdbc023b7f8acd86c9bbfee7fa03343a7f41547e3a701b061432d6f9f5da8e2d069e44b81d373817c4b0ee5ec60db98c350f0eb591e131755e6c32fd16e7d52b9fd382574703280c78aee68f68c7d3e2c05fe351cec610ae9ec70ef43ff0fc8d43ec299daf8713f1501685fe34ca29daabc470e763873efe3fe39973e39e8aae7d58c90f992b8252d5783b2fccad11d041dd45cad2ad22f0cc3280f08438f61bb699ef01b67909ad935484a892b922604cfac090aec05332ce4443fe9468c5618a3fea3869e8006df43bd0dd29a6d20707bd7fbd5a394620b08950f2b6a68f0c52bb68f826011d20828ece41e3deb7311c85e1c567a082370d8246815d6aa968ca8ce9e59d5c9641c8dddb7b73c9387af5f4852d597e7e025fbf830eeb3dab233c34cb751243325e319976fe3c0eec412e79d879922bc00f01a1951ff2880ab83233ac1b476d47d257522f2ebf18293010965a2eb440ceb9add90b1905e25e944709fa6c8f236d5a948862a17f6da5a456da98b13246108ebeb643ae87d50d43e54844dd6c1e093383bcbfeaef87b82a6ba712a59ec42c1aaed9dd251ac8ad43875f09e250a5a219af6fa55fa1eef74ec99c36704c1387da18a446311135a51fc7beb81fff62de597201b194191bd97dfb1a92a5ecdcaa5966b60d471db48b3500f7edeaaade049f6613431cc786d5247ab2a5bad38809f5238f90db92cdc62fdd9af9d6f56fbb381634f85e3fc870feb2e4ee23a2ae2d49d9818f6312d9fc6cb8088a69619068dfecb73fdcd45943594e31ea74dca79ac3e33c3772107184781ad11e1671f8a3e3644a981d47a1c2c0a71a1922e40cc90ffb20578d0e1d04ee90751372a900f2ef174f8f93ec3a55b1582e08c24b563e6a6bde3e187e44d41c937508e26941bc5f703684d5449b92c7dbbe17b7851c717fcfb679a8e38198aeae416d0a451386b0f9a01655e34df0609c6ae49733b7f8cc915988b2d04bc8f14b7ace3ecf2ed8803e1cc29a4aca051834b4fdc5a9c13acd5b27e9dac70bcba0e5719b1469dc284997fd0826dd88276b1f1ca1e789b0cdee77b22b652a6a372a26e6520fa7b40c79a1d155603e00fdb5b6129f51461f18cc9188bbf68cbf81e96a1991a4fb3eeb9cd62a48facedcfe94b43744b75154a1d4130c1a1360a4428b39abb868e6d55c3fcf78413b1274908483eb107e4e0a0f9186bcd4204890ef7c101d64b00d3fb4bed83bdcc5ab505a119faea11a9ea79881673b68c1a70def3887def53ea0a6abb69af58a0eebf8b1a872026510c5a603102ed8466bfe83c84cfb71085973d2a7938235c79b76f64dd5a586eaf5558da5fa58440b73d19b112605740c94e92c1ef2286d13efbeb17505a49c913cb0e7177c8def169da2ac405010488075631b983ef80c0d7035b2cdd4e9c3f65b7a2ace231a39f63df43fec57b66ee27f8439a9f66bb302b17e82beb00f8d88d613c1308a97c528d948ee6ba96267d127cf0eaaa51dc29247eba9de136069d7311052f51f71113cf4030044d19ec3aae2a5f330c768eb3a982f80a29b96e95ff0f248726e509e9112c54e0e4ce5f2fe449b9fc2c9d77d7a369caf82a51d7c81aa2c2a4ed390cdd3ba12003e97b28639d2325ce74903f9cf87c59f14cc5e93faa14070c10bcc4f635e5bcf4c2e9efdebffecc304b168f0b9103cd7cf7df4d0198ab1a49f536d63ce740513bd9e05ba93323d6aa19f60f2a56464e229365ab16cdb024e3066fedb73afc0761942814cbe2da6ac447f966032f8c02698820aa87306a4c60a92eaf70146005ed5d88c34cb36bb0073be73c9e051f14dc3fd8f35ba823bb4a483dc46e5fb374679bc910358d1dd1fa5e883b01be45aa001e552e9a1f2198284a62d5b9013e7b57b5b3a28d5a39f52618a309364447ed5f8e5e024d7cae0c8317668a5ae4494346150e225c01074311d2024e457d6d0480f8bd177ba7103fe217108a58ee1bf4bc22a237aa6acfe445f26bb33453fe17ebc238162c878f58cdb22a7ebb09feb53f44378a807dd9004ae2a7df0dad4450295698a768067580cc507a0d8c1c38ae59e394c2e5226cbea6087e7cd87285d5c11aa471380b08de6859cae0d20e120891678288e241d246e3ceb72f9b8c0ace3b78261da37f929b2835e09e95c9d4eb6f39c9847ec251c1889b1ca260e21b6420d7e452b24859de954c84f0dd34c67e7cbf315dc18d32571ed6737d2e5cffbef69ea8b96c4fa6d03506807eb33730ea3f6282bcb38abd2f2ce985670ee20006483738fad97cc09893cc9bef1eba5956418a83485da239723a3b1a09065c64619b095cbc01b8f16034049cec27a58aeb08a0fdaac6bbf047d134fa0b21b274f9797cdea7ede97f4da2184c1cd5e00bd11e0ab889f6be28d7783cec1464cd78f669f88564a4f8b389646e73283054242f0b327c8ef6942a49b7bbb9ccd993b880f4e5189b2eced53c0270d9b740e71d2d557e1161cd233ec6161929dd87ed7bbda0ab60f394512d8d048445720e823df586583ea98355ab761ebe04ec76c30bd8f8b22515dd6b02a5f3148000a10ecdac2527cc0e2111bb80561312a4affeaef781632ea911039eac5787530b0171157dbb53843aae3eb40d467e1baa3984ad43c5244556390147c9b645833837955d8ecf442bd232c6df447768e6a91c3f50e34b5e30c45b4c46249ab6db314a60ed07e9618c81b690844e703a3c476116deff9b7ab89c82cee3e68a42229e42bc0c1192146eed4084eb52b95ae52c0ff0a1c13edea586b36e65370f511f26289004d450c598bedb8a5b79db32a9012eb7df4fbbf4bf29f814163eb04b9b7203c41b77aedad39d8c8a1eeb5d28506ec752e1d19a23ce2e58a83c24f5985e2adb3f9a2231bce7325d6c7acfc7a6a11ae0a9ef7064d2993cdc13201066a030f5b8ebc9ff63d39c245518b84da21365ae84a45053a06be9fc8a3b0a2b8ccbd97ba3afef33cb87ba1b7c771f8f75d764d1b82b4ea4d65586166c09419dee822065a37355e9f14108c1db6ff9bac85a662c86262f888ef838318a650f8d142bcf5bc11f44475e674fbb79e98cf924033367f57d3c2951bcc7f5ea38ba238730ac04049c0275996357b45fce22720f3c92290d18bdafa609fa0c96688b89cef7800974d0d79c2a9be8529304014d136d4d1ad7dffa4216479a1b96dfcae471ea121119a40de49a79ca3d1f7571b3b8fc2ae35abb3a0828de6fcdf083bf5ff96f2cc5fc00eb747063c41e0a07bccc8552f22c9f92 +MD = 68c34d5aec130f666c98d7088506e213c84ff3a7e86c21932039242a68b4b78e36b7b3948435d89d2a86a5194ba1b321832ae7b8ec286f86b6dbe3e39da2d2a1 + +Len = 67552 +Msg = a6bfb8320576574a1f41ebef4ca72e04b0cffeffbdef03f8f90893ff02d1d2b3cff01e113870aa89b970685773182d1073d2107b37b613a36e45052a005ba6e04e5f0d94bbbd472b6b9641ef4bb6e72951c68ef105c28f4540ae35593385da2eac734c6695437657bd1b3c5edc67a675d11341082dfdc205f5aaed33a438b5c47093a52dceec7e353867224c2e14b01f7b21f169b94ef30c17a0f3605a5a80cb2229de926f9fa9ee63e2ba634aa64f4dd75865bcb09c69812efa10895dd4846a4b9cc03c7f443daac7f5ce483703c8286e2167a81bd16d8dc01f0c56b68f06ca725413d406c28390ea0624a6fd1566d7c7e2bdd501d447585777af6e6c7251121fb99f010d03c3c9567f8623a5c270826a0430ec6a8d3f097a6ac17a8764ac6bda332b6c9aee457c93c6ba6735f42d53e0f088955fe49dc9b2600921104f5efd2c2a81bcb86b50d22745881bb892e670b00d8d77e6c1a8bf85c1500c0e1ab0ef9c06679a6c622df39c62bae73384e40162c2073b0a0ca9147df55ee289adea6ab32fa6aec0bb25067a871672b0b26c2f7f79bd88d0ade8ef2264fb4c8af05495f70d069fbb5e7e34471b66653604c9218e997807428cad79fb77eff217cb3599f2084e16653480a48d867067ce624101178a0060679240d99094017b3b26d79d2c8948bac723757fd32ffd217fb41ef4a2b31d3a47a5e8386925fb90fbe980ca2cf6ba34e814a3eca280d43b51e2a624b87e973debaeefbe0f90a3d861fc79487ab96d2bd1f0531481e0bf5c4cd422b9e05235125a969b92093fc2fc74470a3e9e382948889dce1ef8b7842c7972d9dba397c0619c4335dddf981fa33cb27ad420ddb533170559338f6eec55dfa515b088b601d1ba9f04c61a058476c2261334890fdb93850e3f7bcf6bbf7c86531c631715bd0bbb91527641ecb71c0d891b8361356110dba2c61d3f17c54c7765381ad81dbfb7a7006515dcb7813e25c5dbec2eb9105320a8384268dac56ab9c4aefd5436ce7c87d687ca73cdaa8413c09b957a02b0045c08db11d01d89815456c93612c9b10262fafdbd8f96fa95de64a3a6cc7809cb98aaf8b30146d7375105d0ea9a3c31f240541217b77a391a8e973a48ad83e24edb76d64f83bf7834b7b80a4475f916f429cc0d0074e12eba2c43a9a2a48b05382d54bf0edcee34218e57c0692a6628af264a359f4d33a21ebf4f39de39f8382f962cf918963dd2a6dfc93b8441ed2ecc3eb6d41dcad85dee4fa32f21f43244db1fe6cd9438131c6ab1f8c0bb43f5f2f27af830a1733927d1e527d6965ea1f1e6cf6a83aa4bd7d8160ccb9a36b7e53acae0f89154d1bcc86f87c37562feae06f5afa0638456f3cf51f82a0f1e2527cffc7b9f415e6bca0771405f53b05cbf4db3c570b547e1cec9c47efd699b1522792f50d387e6c9ccad7f15e3b9a6013e8cc51bc3c01e75d08e17a52ceed4103eff0b697daa14742882401037ef6c74918cd6b97fcd2f9961e5f176a0e7f29de32b3acd86f311f3484e5d38433d2b3d22158ca58e24a2d5e997faf73f9b1c4579c36184d4aa05ce92d97d95f0eb0be557ef8fe9d60da0b1d06ddb32f2547b8f68902b975117188e70eb4930244033f39ae1888d41d051b67e2c3c2fa2583703195a3d0de38170ba494b6910c885ccef52b41f97b6b4dc6b5c9fc4f535f17729f2e942ee743238da84c2843dc503fd62e630fb111c026958d08d1c8c9564638a5c04e042eb7096778b1842c001ffefd3c01dc5025d03220643bdecfca8fc25adc075bf123084b218c5154da066c4c9ca4743247360fc2dfc1ef8db4d5800e21a840288652bb6b5459a804ae5db99b4cfe36ac16b0d38b2c2c70691888bb7c55a1274e344c44dc7867223e49847c5d86bfc5943f24cfedae1a8afb7b52b6af3f4d09277b6e3930f64b5c4c1c094915c25fad953100595cce027bbf5da1f6297702826edc370ceb666cb2c8965a945698646b299ce2046b147aef1f2014fe4d75781f6ec735347e3151d23e58f6e29261546acbc338559b19fa41a5731a33bdb3042cc1dcf7446bff711717d47cb84bc5a638e65481d16f36f71fecb7303aecc83d56e28debb12729610ddf894a8a052dd05223b14cec4a03f7c65f7ce5784d2d9a1a4b4a911f5237a8330fe7fedc31127952ee79f81addf982f17824a870614b80e3869365c35fb29d032390f823621bf797b10f11f17d900f1db15ef7b7cbbab84f0f18f861b212d61ab4e4c4f41a92d1bd15f138e4bb6012b7b58c61c2eee376b96f1bc75efbd0e9c63e83e3d2bd1fae2f87c0cb8919d2343bdf2d65063d6e62bf014c313f9f952eb22adee323ec3ad35b70ee48330b6eda26a8c2700649b3f2cc7ffae4680fb83b5af456317c0a4ce7ed7bda3d9722ae7b04acdc2157a64cad7e25d85f8ceeb2861d359a5d5fa9fe524213352a19d2199d5245eae75eb5910920bd44e1029f2ca595691bd5234d97b8f5a15f9c3fac28c7ac1e6f30affa498c6080c1376da38f0040094b278b67d17264d0e9e26d1364705ea0e9aba006aeadca2afdb1229e422ca980b8c2ec7b14253c1c44bb46aa552e0657eaa6f34d68f3aa162afcc5d1ee913e89d545bb09d837e7ddf07540c363671fadd2b10e50d0e4acdcf968cc010cb47b6f311e9ba6b620d4a08dbee01117a2273d42685593aef73ee9e983a98df52cecbb4cbbf2a406769f0e7cd6b8f5fa65a970aa1b6d883bb1ccb77bdbe2eb60611ef898ac54b471bfa3723e8b1ff4843802d28a78bac10f9af2d000e00cabb6e76e91a57e364a50528e76431a999f3d8fefed53dec1c0a3193dce492e8b4161266830e3901bc85ae5cc754b23ba489ed3bd2ba6dc16f99ec30a0c9515f33f07a4a830e39079c0d9cfca09972506a310a9f707e3ef2eee4b0ee4158544b90712f88b2c15edd4c6559723adb79ce3114b892a2cab967e11408358638a29614c0b88ad8d0b06c14b66d245dc3d09f42597e7c2e46e4089050796d3811432604069db6bde2379a3c285e7cd1f87ea9e529e5c5dd99c9be42c18dfe1f8d40e5ab6a677628a0fc500be2b6e05d238bd661ac74d5776c706f408fcb500352a0b950159d31e3b10677ca0dfcbacbec000c0009b315c466df04d3e1bbcbac086b8c3a2ec74eb4bf5df5c2d0b971e1fae43508692aeb8c30206641dfe6d8e258aa45b2de6d37646f0ab43854746d68f63f38c2f362c096713b7bd2b3d3dd6cea64cc004d1853bb6b149a77c0b516278719fd76d0e2fdabd2362dd0820a441365a1096ca24f0a805b8391c63d05d4e8567b6c6c27320893fb1b63817714739f7169e43e069bc47de660806cf3ea0f710b6c6deb21db4b1693f2052fb778d4d8b7c545bda083e978b5b24eb209ee2f8b4df5e83ce6642cfb43c1fa206dbecd85dfbc1432998fe13a7081e5e0a8999cfec41dc5a89d55150cb2922c9cbf6fc870915739e51847158bbed52c3ef772be9219ecec756f376d0f886c82edd5122c5f749d9c1e4634eb3247b70b131f01fe0ff46a45eb83909ccd6f58e45ad82f611b309625254addccf9b42e6aa947cec23cfca0b95402eb0a0e0d5c3a2af04fcf6c6e4abd414dca21a6ad433146986273e2da952ef613cd1f9a0a836ca644f9de19d6c24abc77845002d9fd48333a447ac936518d1bdfc043380fd26316fdb5f6ec0f05b5dcef92c3d5e16498b854fc3db9b6ddbf098d4bdeb2c45305c2420b7fabc21be7eade7ce0e76c80071c0e13267a0540ab0846f758ced00d3bf13c84e11f960dc72d6bcb11ff235a7ea991109cd3c9823862324a1955dc08eeec13a7841034e23cefbf06bde7aef9e6a5057b068eabac505d78ce890e8f4d04fceefcd04643a2307601b54b65b465255992ddce7152c5da43410b10c392e36767f50c2e886c558a0c5a612542dda7250d5ebc5b4567d5bd5ab488173a8cd2fd75525e049f570432f7f291b245d3c6cc0994a315d191e5e3ebfacd043c2623b0702a7bbb54abb70f7ff0cd5a383bca04945a1764df79fb333d3a62419108dd669ea8e9bc6d10740bee7d9d85e1c0bcb4f7d8a2b035c622959a9dd03401d9080949f1326eb230450d8ac08a9b0a08a3c47b38cb619c215ff1484b9e475441ad80b730dd38edb031fe9de21b0479bb871b659f1adfdc32bc2f906b54e151ead2b3308b7384e43b40c46d0ad929f78270a300371893bda04038ba257a69c279828afe2a7bb960777b4843614a704b05674393284ce30714f3f20ea399496d99c2ed68367d3e290ce972660ff8423feb73e3659a3f388135de46d40a38e81af09cc4b5d7027d07a3932b203b6b0899dc9d6bbfb477fbf5ac081c5385e0ae932617f72e3491ddc2e47f59b70d29282282ecc4e99e7e9229207a5dd43918039fe43b6e1b76b2c62176b7e574aebc0ca28268d42b81dc67e53a3aef9f51684f05d21112c4c4eda0ee0243b89f46ac1ae1871984cd8517e0f3a252bcfcf358fa8e97a0c97047cbd4ef2f29b980fc7fbca63708bd16d1b9671affc9ab3348716c02dbf17c6827d3c8eda673cf5ef9bf59ba3a3c65508e4a6321f9a8a38b773a0e29480a14f58b8ee5af0e29e48365f358e639bd65c1e3503cd139f68e4da83c46ca84f5775d9b8293ff1051df3567a423f0dc94a6b1f95559f267bb53c205fd7daf37ba8fe881393ba354f5a7bd275921a0cac80f6af7e0244c2b00da2fb3071c9e0a5f42e0623b4364811c2663ce9abac0ac618733067a04a62bcc0bdfdde28960a4ee7a8b690e150a3fcf436e84f056162968f8534ea961c91227ce19a9142ebdaf6e1e33bb3c175d3815e62870e15d6ceae44913f6f8a47e86190b243f27727cd0e8161e834db32511f6f7d7bbf7378896dd62bb27ec338b2fabaa49c8a3bc67b1634a94e7c75029757a5fc48cba4d32d65b2b93080f77b8b7e493d06c0e7644fae7a2df0f3455320aaa04370cb1053452678ce2c2e8d8cfc3cdae0152f207dc537d0646241b2c08788dcf776364c855b1086df27cffbf96fe6ce423a3d6d7f7622b5e104e053c73682ba8ceb85bff5c9c47b6095fdd92d70dcb1b8086434e5dd2fb9286b479ed3b828d7882331f1012ba2a4f709309ba589bf23c5e24c0d4d549f58af07fffa7276dba25dcfe37653fb4bc206f3f0ba0e24ee73006a5d5d1286f202e96d61fd200d2ba99243e2b64ab3102114d8b6cab3cceb4ddc0300aad1eee8467bfe262d68e5896baa21e84771dda060b54a0b34230c4612dd4ede8d07f6b291bb4cb4f1c99a855729ec4c9055e57cff4caa668cf84d8f4078905f6a213911833beb86f0ae969ffa85f588276374f65b6f8c414b901b1775228a0bc8ca205589823d1480945449d442e0337316d6ad13726233e686ff8f1f8f9e5c3f4f372f1302b40648277e1362d53ec71a0cb511a619ceb6e4496546be044fd9243cf7eece5202a4bdb45e7d24d163db72a18ac481aa1432cb53d6eecf25110b2e2fed1509e48ba837e78ff798bbe1b92371b22644c7e5301232eed7c166745a93748142543ed1596d1d8d034cf95b0892f9d5c74de7c4474f62f7a2334d0c401ac75ef73bb55660c3e2c030a01e124247b660283b8e13e0e9609bdea34d2b641a84c0943f0c8d36b2b3e3f040aeb9feb813ebb96c2f568556b845dd8feb643f293960b9cc990843d02d42d29d0fb4867aaed2fb7e402ebd3de6703f67bc4929bd41b9c872ef4a2092ab774813c59471f5e3a07ed064eef10557c564b9143ccc4d5a3650b073b55580bafbd14364cc59b06efeb4110229b933989ffdf297d18f6fdf60e303caec4b10d83b0eba71dea6408d282b9eac617e4f357a5ba2cb89fb7b4db3efeb695189c98fdf40d7515dd01ceac75607c828c8be9aef1e5803d8892621c9d7e5b3878a114e332828a7ac7fabe446b3baf9e221085558b670f54fc0c6f7fd4b714de0d49e9fe1153cc94cfd842640d54696100fc2e161a48bf4423af44cd8bb1cad0ff1b7f163a8725ad1e22c1d203b293154fd74bb746907a57240247cd6975635775a03ff354267c0bdb60a357f45d160036274601b94827d3288de149170ac9b9975e8f5c0839b8f72f1b4fbb895ed86ade7686bc1878ae0156d97a073d78e23e8edfd81afec6c3b942d92fc669bcc39d6e4b73b00e26f729d76d7bd182c8983082ab83f6ddd884993b25aa403c7fbee00f2f75a4415ce993d2d14a6d8e01d1d59a48f6b54e74e3df428428f0acb0b07ae9a9f46259216e86708e51a30a2b7777ff409b22f8a4c8d28180119f5f5583b4234158b0ff7e6d4cd92bf73d9e4f715cd91bd904846f1bbb1da0ce15fd791ed6e67f0957db79cf2b3430a301f174a7cc4f5f172299dec4e2416cc51a2f21692859ec701f941d7a6ca926bfb9aca201118996bf45e0f7ac8f136d5f769d574cf1a50ff3cfd26f57566294b22b76e16772b047383500c4b90abb2a04f0ee22af7bf170fb313f794e338402e420f83ac136ecfbeabaa24dd49a622c1d52ca8b7a0c6698f10b814248493af8bd5fdab4f7a664393d9c6e99e68930f91062db9895ed2c0e3b2640d22be2aaffa5b2c358f10a418999a20bb0d51d4c1b47e9c653e8666a5a434a2532e144fc9e04df5b2d98aaaa736696229a8b9fdf1a28ae36c45cbe48056f3ed76950b7595e42af4b3bd2cdc8800c3e5a5fee56107c1d7bd1f2d73fef9629ccff7f6285e9c6c7ea3b8a88bcc337f3625c08e88c08cb8d163fe5422f8795d8ba457dfdf4d35efb58d223a3c0c22183ccd09d6087ee8ee04829a586d7378be3d1506a0b4e40ae47c0b90d091fedc425435c243d91eb4e7dd9373b897f28ffb4d9c94e73d9573f11ec9850a4216daa3f8eaba769f02792ce9110ae356f8279b29a57311dde4198c2a216f55a106a5b3b76632dcbecc9e23a385d0671ee6c8145dca31cf1a42541c3abdb0215320b5e7fc32dbf4bcffac62995c54b24450ea0d5665516d7752cc37bcf9082bcd1793a753db064d1dfe1c70371f18638bd915dca011428b7977da551d5dd7a3733dc7a83ab95244566a76c319488bf949c1d418d7588597953426faf8769f46ea05ba313d783078faa733e19c633fc202ad9d3848a5ab105f1a0aafcabddf749621e3f8c87231698f46ec424cf9a47c4b1ee9b1807323843b9c1dd9f0ae08cb0c04ed556841d58468bbf86ba7664a768778421b1b6b7f71cf3cd90026c1bba8b0113eed99618d682b9900c44843a25f4c5c1eeb85d92f576e6eb4b8c993589c26e94117c84bc9635c406df28c2c3c750e3d08993c56b3a3bdb4497a558d7013d4ffac6aa18b2a245f54b86d0f5a8976519d77aacb6e8cf511a00fbb572a92be4ec6c96c818a2029c948789a2e8909d19afff4a6af8b4bba2eb460024b0520ea08c13073f4d33bc20e9e171086224e055ec6f803452750614963e2c5bd87bb2577817a3777f0edabb3b82c4692a0c68021a50a4748dd4b99162120ac0b2cb20f2f99ff2d876db6354d4920d2d09ef3d067fc93e917178db0099e71fbc08eb5f5a55d37bcbf94160d2fa38d1bbc775684b6303d7f3c60a744881e8f5b8a0827775d4dcc6b6d2e8d81ff69c9a7d2c47f0b71025f60254318d53623a131a4339712dc0e25b02c779d32210e7efdaff0ddd34cd582426e3962c088608014bb9b854695f0cc318a19c5ac38f41593a0a6e37a9e1c4e8c73ae05c4f347848b4caa62811fb83855e27f873eabdd15f05131307fd9590ca4d22b82210b3b26fbc3eacf60cda6f293e2336297fe0c089a4e3a4551a31e5522063c688334cdffecadc71c54444f7371f5bfd816a41355f7d42c827e7fdea09a8c5b195a147277d486d9e9da08343386999f6859328596af9f827874c40c8764d10225140ecb1759db9da8608de7cb483a3c93ce3dc543180cc6a7c3144a622780bc0c5f982a66e3188ce89649cca31d7411dae40a74d3c7b87390e7e4fad938f7f34f8b5532dee6ca221ad9c065439cc3d9ae493cf6c1450f13b461baa0453fc3425f25aa56f7fb6cf7cfb99644353ca5ee9e5c59ddb4069d2192bf19dd5ea25f23cbcd1c194a877d6877941febe08396bb2b9bc59bf482cf27bc6e66f45de7481215d03efc3f21780e9317d1beede822d9c69624b43b50319071de36a7eb94fa87bddd77724e3fe954b2b3604fb5f0b6c50fc9ebb8c0e550e683bd1d4a8022030f24534a0e00594dd546e52020c133def767a57f0c5db8a9a442596f6ea424ee22f9c04b31fe0421fad02bb5b49818080b5ec773314a50a8544e51c186d004184daea2ef808fa6e25fdef5757db313de5b559e5cca1f23c970f81498259c461de9b389ab7c4dd82b5ed3d1040eaabdae71fc98903954d8a974e04077bd51716ba188d30387a11e49825f5cc5c9d78c14e9b444b1f183b5b4fa8733d4c097fc8defcf1d8c2531cfe964c1f75f51d1f58e2d0d3136a51461885c6d8d33e1e86df13ed6c7a9f778836760ac1f2519228096b677dc92a69f527024f3ab0973cb4c3219307fe150dddf60209e52bb8231c3bb0074b55a888d0f18eeca2be9f8a90dcd098c94c6d3ea1a500ee920874f881557a59439f2cd460def04517e4a031a293e8a1bb4cef315eaa3964d171cc3ae2c191057090fe782c57f201a10ae059724e3059e3e7e20f9b6f7511a94e0711c4e6bdb2d70e659abdc25ac84818a828897671654b0390ffe15b7b9d22876ea4b12cc6088202ab639988f14415f740c96e747370fb893f2ab7d615b14404491c30fb73b1785516fa4a127f1b0f8df062a9aefe20f96238b7a54809f518aee0a0cabb8d52c1edef8758c7ccf53fc3001cc38eda1d4f74c3cf33192010a56b7a5905d4dc9666b47d34490e9f7bab82b71e437bce1005a9279aeab222abf324606f6caf28226e910a27a751c2545db05f91b1dda4a121e8ae3f5179d76d0bc2db0984b239a1e16bdc88f9f7fb295d363e9c961b2277ad189ee7f1d707fff42b314fd746d7b9c72c3c80c86813a2b1fd9c68789f113bb02340b950357908b649aa6aecd4c91229bb72379b0bd26663ecc31ce2d0389433f0dcdef8f9f6315a0290824bc2d8550e00c6d4fa4aff1e7beafae15916612b3d67ba7d718d4622e74029be7d79cc2a7fe3807f6d8c6471ffe188df67d952a7d67021bf4157318265eabf4709626d38834ce7627d3ac708f9b8b63d9381d4b206f35bccf2c17ff9dde8984577e48228222344a2b1baf18a7057cc246576aff1d6d8aecb0c31f7315622fcdf5066d5a16450df6a9275aaa06da612bb6621ab0e4d0763e4151162cfd87f353d1a522c4c52bb00e0a7d3b9f2f78ccf2b1de890b17469c14197c8887e6bea8a88600f50d1f34def2c783de82716f44d9b1334258151e4120719be31e4184842e8a70509d750ecf3778d19fde8d2c3d234ce6e3327ef619c61245b25a9e682a684799c1e066f8156e96fd0c1dc34e2a71dd8fc824a53c9a9753f072b76de80fe855d3c59085af55ea9a5cbfcac4339147fb948da9387027f6bf22a0df3062a9212dc4d8082192e54e0b77176ff08b06082f7b803aa92f6666cc52c91c76868a9547d375c1fb21680b52e29f67e8930d54d1cb6c4367c8ba8a04175809a0c238c73c862b5842f942951905d46d1d09fb909b0a9e7e04dab8c2eed6da116f84184964537535c978f98db68742c9fe5e755dd39f9324f0e3d593e517dbee136acd7e57d1cfd4df3f1167c3bd67190ceeef1f2410d6e2bc72958faf60b9da3ce4acd89f77a7dff4aa1e95c93eadd4d959ed5704f4f631e7e57d18863810705c605b0aa3bba991ca48759a2f71a377e42dd487eec26d8ce3daf0b102045c4ae28c4c66fd2421a490a8bb077f0ce49cbdb9593449efa96e30b1850bbb6c19c48fc6f5901437cc73082953402056cd9da6aadffebf0346606f17de6b0ac5b577848edaf8816ce6a79178d2f6cbe5db056f60dd29b673a0edff5c316188a7dbce81628102bd4a2c9ccce5be7dca30996e5889d547b8d75561522d3281bd98e95406d07c612045faecfb1e7a57b3dd8522f2745cfb4e94d08517d9564e020f6a827567218662e6ddf2dc719b0701333aedddbed896d032bea3a10f11290e71cbe46d7514d4fda34248c18da52e4ad807097ac7dcbcf6475c679e2d07952b76a9e45fb8caef4911c4795ad10d1ff94286104a3dddd02939562b5fb18e24f164712cbc70c837eda8d0eef8da576e84f9449cdc7f5072d18f1869764b395af8f1be08045b714143eef4342c07f89c8662bf09a21ad91797cf3fcc62487da99a74fd10e7c76a8df44aaac384f8852c662541d12b7eec20d46018beb437ef935e849ad1a743288077426127741a6180bca799add939ee412fe85faaeca7f39acd9723c4f36d1fdb356cb3ca79ec325bf26012da4bda73daf2de612b6c071e42602324552c93d4d0b7302f4716fc6bf08ff549f0f3bef160d5a8c9bac2d3e40caecf292ce355cc0385231007dbb972f11dbdab7c51760b6530ddf5d3719cd96c11e18e9698318a0627bc229728a1ebd0045fb3f6f59e167aace471f008d062d33200e13cbba5733b0771b37f8e443b0fec21ffdb407596f3a262cabaf90d14f477b3ad89de203c34bcda6f2b9d2ee5232dcaebb3d2bb2172a9cf6c7eb2b164225b606ff870403965b05c9225a5b07e9c51a103fb1ccd3a7a3b90d3c5c65bd4ff659d95230263ff407a8ee8e868876bede04ad51b9f3a467cc03d9d1ab46aebee2ed1a9741539f27773d7cffe3602319a623edbbfda70d9ece04c35080d6d2d710f9339761900b76d44cdb3d19ebf64145fe394424f0f696d044317f821e0fe2a9058b1a39e76b28465d7210d131d880e21ef7b3d7d64795fb4a8c285a254e26d4998ae8715fa786f4f9ab40b33baf1ca50991d1bd62e8e4769e3d11b0f378ecba3e98c8b000a7d807a7ed946610655eb7496d667f9bc1cb6ac8aa032b91737c827b1d839ed35466a6f0a1d593b8e08e4066f53ac48abb91ff503dc57306291e55d981e1e4df9477fa5b2dcbe13c0af467e68f143535bc805cbf5d21315a801a5bdf2caa2a2d50542b70fa3ef9a3c9d85553a5bd79a6addeaa9d71dd0d9662b7bb1587a617c3714660b770f682f5078132349efe39e577f41070e3c2aec1b63e9e03f89d54abdd93c1b9f7ba253aab382512e29d1df8000ab7c21a98bde364f72b32e85689ed7e8377fdf8548a7b9d455674d962cce93268c71a7e27e105532a8b29c09a5d8f3a60aa0bd98a58c0c5f0eee2eb17efc0f45567017736c32d6d1fe570e631789bfb70816c0425370f0b8115e480822d832d1bbffe6d8f0a66991e6290c4e38318a8fd25a7dfedd172573ff203006d2f3cc700f899c8f85fb5bf6e2a10c078260f294dbe44d4a9cbf09173aec6d39e9df2a94d3a5af03a6a24c858647844b7088766a873cc4a23d091a16570b661dd1eaebb49acca4e1dd2ba9a243951b769d28846586cc6a921865e6f5d615912f45a77e53e77704868407f1e1ad02181562b1bb4a4d2ba586c955ee3a3a93a4fa9fa550f72c2d447e55b7c3c8152730a46bc4695d3cd30c1cca69ae67e6fde7ec6a650212eb67fb45accb8dda3e6ccb9012d13d22e84b14b0861185e38dbcf0911057103ba7bf8f5903a3be7c6b5b6f84e258a53fd20c45eea6de2351717945653c0bf9e5e38c7744f4e0e4433e6b82ff74cb20088c8f262387300516448b5cf537e42d8621675975eb038da32a25bc4c24b93c116a5c2bfbb1a789c6699badadbe8039a0d3c89c88707c1930a11252078ca357ff0dfbcde3b0b54fc67302ce1b1a609cda9d28b6e90fbb255055aa0abe170a1205f9d682580ed9c5bad35934b9e5f5d577c0204f04236120a69a654cdc4e6de8ea9074ffd516956a081d175806abb0522cff27bb8655de9997f1cc8efead4f4af1646f8cf77278cb32b2b5ce8dd64 +MD = 9dce12e49fae09e0b1a60f44199449fa31b9bb277857a84efb874b0c23118bf8453f8435f47b161c9747e719a642f805bf14c06b6202535e7abacd53e25ab84f + +Len = 68344 +Msg = b812e3064c1dac2b9d26def1775b3c204af669e1766f4d88c5efbab139094f8e09a59d7fe63c89e3824bf12f5301933d953b2ae68eb3d9d21574cd8f55921fe1cf17f7599e40f729ffead73710474c70d8d52f5f8891dbfe0068d7cc95eeb51f125239bcfc92bea51bebd632359431631dabc075ed7019b38fb11e8f8285d9f1da3dabcf8998a6fede3637484b4f08be6ba5244f43b75d9ac938eb01a2bf55ff30c095bbccbb77dd50b342a0d9e29a28cbaba51715d06d5bb6e585498005f0f01bc33ea74e63f8e97a4b3e6367b4af4a43a589f2e822119d5ea13691a1bd716da42eefbc95f9f2cb63e475b87e2d0fccde7b190a46151308ca5244fe8f51a11dd2e9f0222be32d2a13672dc8a5b58155a1169d87b6113a4501e1f8bad12748a9addd8900988b71af93bdafba64b4ce8d965c5d91c17e4dfc0b379aedefa92eb83df0027e62578602eacc43b74392be1ec436a04eedc415d4f13a72be713d1af38b0ba2c613b133ca207e30e7cbb719ad338cb0e9c54b5a76bad4c756e04dd5019e17b2fd320041af3ebac071838ca7e5ec47d388ce7ce38a6eece3ddc440288c7efa7a4e48ac795b4b67397ef377306bf64d525492bd7ab7166a0c7aa37ed839349e42dfdc1da0734f6fe435a4e17bea598875749877e5a5b8358b55076fb0b2c7e952d876ba81a253b909bf1d3351081edf83106813edfd5f37a897777b779f3fc5f1629fede38e5d2df043e6d37a6d4c39c6528bf75a671057aa687c0af4a7a51969a5dd1e8ddf78b3e0ea882bbec2eb808460888df48ad57ddbef9d84f07300cd00c8bbb3483ea93323dc8aa1e5af049b0662e73c830fb5918155625133ab58c8fff3be15dc53fa95ff40749fb6db9d729481316bce9db97ce5c153d985f6b5f4ae5070ac11c572c1bd3ecf8cfaefc1ed75e4ed849edde7244f5cf984aefc2038540458e0af3c19a0a40022d0799275f4f3b5a3eebb774972064edbbb7566a07c3a3afe1a7d62f818feabf5d3fb6dc36f5419db11ed12e74e54be81e4a4dc3ea8a918ebc044dc1612116ad1fc4828b246e13a1e55fc56c7a17fd47469010501a5e7c6a63ccc557c7727633cb5276a4a61e240f322afedf351d0ba3bb0558af1593c6db7f4dd73302d86bec06662db94a89f53e3e0cf7c73488f955e23671216adf235a7523fde3c1e76a4e575bf2497045f9975f724ae4d6c04906628014679895045fdbcb93fa730413d324b07ed5c5b6c3d31cf76288ba777d0da29e9ce21d69dc6419c153e7a4d2eb02f5001dde9970c659fd08d9535e02f80428de851167a22dffc591982bc5c842664ec779d489e883a4863319b51ff75c627bcc678615f27b9b55b8eb475458cc65a882fd5815a28e3b3ee29e2e9eb91ca0f1e4bea096bf37bf40a3b7baef08eb9988af32c9ab1338868db3e13048ecbb5851b3f4f1688d04e41ceea806e45d126a65c894a9d8df353f09038d6abcf6aaf0e1b6951919d045a250f616bbd2c9f360d64b9d891d5ae6ad277dfd2e596b8df348692968192d8c6273569e3a38d3e10540c4d7e7f71adf596f6fab0bacbfb6e7ec482c6ee4f94bbd0a8ca902950f7de03bb0be36e48381dc577531732577c84743d018ae0bb8060a6d04c1b565d12c5a3d8bdb066449609e661b0b0562083479f59d78a60c0e4de3316b72c339cd7efbbcd298c704c11e3811cda232d0f58e28681cb6d7545075cffe0d26ac6f58e84d30118209249efd01e109917bf0c427bb21ba7db283332039097667e19517eab73dc5114d62179fa46a5b43515008a3ba991317e8070adfb70a43b0f3496f08d24c69e0f44bdf7898043f52436d17949f54932fb85e5c06b276d19c61dae2c526d27c5b9e305b1a55552228c2a6955ce1dad71fd3f7ab37b3b5cc84bde7f7a21d7678fbbbbe1ee744c3a0417faae66f1aa23b82ab718cd5536d80f457ff32222e9eec4bdd43af821ed63636bad8af6db2315cd2af4a5571ea048b85d06f16b7f2b252c6637f615d2c03507304be44bb310ea79a6fe0a9901ff16893a7d609f5d25728e5febff8eb04e19b70fdda3aea2fa0a8446de30db24dda94b85eb2a04e7603eb44ff83babe21e753daf6ab167d068ddb6b19bfe65afc169c5e55936e24263f264df6794b390b8b25fbafaf5be64e2cbd7903d5b7ecb34bec103ce6c8399b6f467b73ff1f0e4a539e6d59657fb86f03cae8acd3170a0bd10058652b42e12e2ae857e8839a8046c7199aa44bf65601b98044851678155e4c75b17edf62ad56e8685dd4a56241895c142e10e154517ea47a171d4e5fa12314b895ea81ac00be2e6317b8e2fac49a993a722fc41e3d6e6b14dae5b9323012d0557028a0838dcc7354f015bac87be2f4e9214152c87c3953ed0a7f05943475f5b8fac9ca9da6fa3dba816bab5ffa1af59c95f61bc79068157f1039a1fa30f4fb6f703e5e3eded01400463b2325a17b11e14ace8da00c83262796b62cd8c7f867f59b06d9fbb7d66cc2b8f4b0be14abe043da3b36f66312fc931864e4b44bf8b1c7b5a3cc68a485ce7e4438d29dc625d730aebc961f16800f2defd698113f8e6f725aa5b3ea3766af9f8278172938617d3452d329aea962d474b77b857435220762147d1f14e2e196a30e22ecf4ddf738db410f70099e23e2e3f9d45b61bf4c00336dba6c5d398efa2521d9d285495f907203d1f7d4575bc1181171784e2074e052b0be2a479dd7609267fd466eecf31aa505bb2f837762f57da8c36abe1b253e4c9818e758925360776b1dd6f64b5a4de0e13b958b80e1d6812a4ab11601e5607d8e5b2204b97b605085ac02dfe71d90c200d3a870e6510acf1087da0a672dfd820de548c075c7e69a52383870328589a4ff0406c81a28f8b3f60b43efdd776be68157ea3059b169d15b43064bd05aaf26364d0ef5bee236dc35359d5ab75a4217a32374c8c7d070720b4ceae722d567a2413f4f8e27052ba468a724cf973f0691cdc886fe62ad7118ecc664c6bcbe49c5aa2b36f6051a7da90ad0a8b2ffae3ff17bb77f559c9112226a3ff26f005ddbfccbc163c1bb8a7356963267a9531034932780fc42e833aa1b1e2a1244803c84a430723485ccedc339954d0017341dbb037bb55c5ad7fdcf8f830542ebdee2da7872be4796abacd3de7290f081051f09dec2b53e01de67e8ec036212c95ee943d60d161b88fa502b91c8aec77b58acc761b7110fec8dfa9cbd49b0f06192a867496a1a1ee11b70411001e6d36aa14f6a48a359405f493e417fb0827a491cb8ab4f042ac0139175aab5b8e9d2d3716f690021ee8dfea29b7dafc2570ee45f82965375d8adb4fee8cf1f5818145a4b855a14ad41372f2caaa7ca099f2cd7cdaeaef339944629b63234996a0236438249a3e2c001da8539e4665af0db527809955bbac9fe080649fa61d05938a733c7f4dd16e4a0f6757cc12fef128c2e6975cf22f6a16691cf4ca9dd40b01be5bf8f4f6c1d959f099447d97ad2d9320f00a4b4ab434a7e41d910b90d67093c802b4a81e7635d6c82563d85bdb2df5d72f2190e4b3d4fa5b6d848a088bfcf0af52b8c64c584a689ff3fc06e8f1b7f7f0892350489210b6d5f315708d5b76c07b324b7409cfdfb87eeb572ec655944172e85ab6ffbbb1835b978be5a5aea8ad3489b7dadc43be6d6cf5bb797b718c7a65330ce790947f0bf4413010daec585de34142224d1cad3072f9720f91ac664ad152820e838741f3a8d94a1ab37d4f7890413571e4c275a997dfc217906dec5bbf2c045161fac1e67f47222ab8c955a74171d8f22a9dde7fe38ff4b9fe1ee45236abd9d8b157c58a827300697239329200b972caa615af5b5ef14f1f652617da3fb64bccfb051687b8462bff6833ade0d4014d24e193b2e411ee1d6e4ced4d99e135a055c86c7c862aa6ed1322208f39c631af26617dadc3036ca4d13cdb4d372411219a9ef4be2fde7c8ccd2969a047dc31e1f8b03d699f3c542e6ebc58e15d103016c40805a629deb151560474a8af20e92bc35639ae21c58f016d54cccfb3ae7bc7fa8b07fa1d322b84d63bab6f1c9a42d4afd9db43f1a50465f78c9fe0e005da7b65b16283b2e0d46d745775bc34512226e3c38af2b6e49aa434ed39dc8d1d367c2d017e0991f2935459df39599f4d7367889bad81188b3b054bfe028b61ff75107903c454616f4f80ad5b610c06961be0c5eaaeb9c1a1cecf644763b505b2818071409a2bcb60f23a9754549e113504d9c337f462562e3a4ba951c221203e40143f3f695777cc63ca3f517ad767311499a90ae744823b69c140a388985bac9c1308889aa10cbb8a78ceda3b7eb192356aa0ebef26ebce427851c61ee25e037cc7f7a493ce33364f8c6c77ff5d96604e92d06374d239f2adba0540eac7d04bc776311abea993439a4d40b12e3abfa4465a60f9de0e15ac92cd839b560f598d6769e17282f9d5ed5304730f30ded366070a793695a32706d9faf45ec981a2d043e82d354685a03962f92c1a6d117bac78ea42a1015916076b898012abe6531c433a3dea74169d31af7494584e9a5f808142e4c28bf78ab72ec24e3e630614794fa93a19737473dc23bdd353394326e90a59862199472d1f0bed876a5ba98bf04f7b4c4bab67cb42a41b109397d279f0fb785147950fa446ea51521ffa9763882bf99a0684b74d6c1bd8749ed110ff9b3ce76dbbe5189a35b437d8e3a897424acb6b4dd5662ba061713a26fe4dc561f4b6ee0105f32ab5f24fe74141cd73d13c18198c3db98d6d298c8a4e3b75b946034fd535ae250d9d87a5a9b4bed1f1b768f84a80c8e5a35bcd560f16dbb0b357cff0e3323de588fbfb9dc559e41dda9cd6544851fd52361354b613a468657d3c608261203a9a6477571e82593a17f52a8d15592664680d3cc693dc206afedd9cbeeb97272dab69b8a2122adc48280c079521c6278690f27f2cd7b3b367e29c1ff215cd6d9f825f67e460030997b8e5dbf662d77eea30ab848d69e085e979826e03e64b1d18860e2b26f05609ae304a4fb8bfd35019b201f2f131abbd772b5631f948585d1e1f3ead6faa6a0415f6010ae41f04c8997cbc7260175c839a60e20fdc223e553bb5b695c77689215574d2b5826cb00bf4f8a4abe3033a01d880ecb1b55b432ff6b03f8a363cf988f51187f8988d2044b18c804681dd8e5cbcf33dbf8bddb010d779a134c5e403627d34e67a306a9c9959a21aea438da0bfcb219de0678fcd226776a43c7b56efd77647b9e451eb6b3273a138402ffbb8508f73d3bc5059e18d2d100f4a617a050e67b1c6dd04f8d73887f1a3ef50101e378f4fa9fc4e233679b2afac057d388d30d8dad60e507926d31efa23a0abb2199d531ee54869d5120d7cbc4116d979ce64512ab01f3d56a12abf2380fb4acaf3aa64495047aa58be71159d97247d2311d35b091eb7d3779066f2d681a73441f2854936b2a2189282ce05bc76d86f209ea47ddfe67e1bc43bae3f7bef4d71fd5f578a4fd301bc6ca54cd280a6dab956bd004014d11e1c26e92b2f7892940ae88247b0fb7a0a9cce71120650eed163afb60f2b10a73cde83e4054936322506e9a27e42a17168c2a12c49289617667312d0f8c63b30836ac57263151d97a76de70823c8ab7ec136cb1f18c1b9ea40f36654e499fe3398c7d2dc6d1c9688c347ccfd5fca806abefe3692a858212c08ea958afa2dbf7a26fd946a4de507cf219d7fc75ad188fc0624c8cc207536a8656186ba6309e7cbd315f16328f9d9326876e8ae3b642bfe42b06b17a9a15f25005f212c46b5dfef4716d31129de757a41dbeffc2b0cd13619a806b96b62076a80ec4e28ccba0eae2b0821ba751e416f53d37cf75150e26e341681fb8d4393408e10f5f51d9fdbcf27f4c3a73741a7d8476677e9d6b8c66c3a01c42538c96c6fd2d4fedc60ecb01ce2e1a02095cd0e7ec49cc818e1cce5f9d472b67f937efabff33f5125be2af45b05d7a26cb74cde2a737e57cd9b15a8dcaa704151c7e9a5f89a5ad7185ee00e5537deb0d5c6457ea2fb130c4f2b1a75df63034ce2fb92d6e16e2c76fc699668d221ffb2a1ea4158ae0664d0e8ba63b5c8a733c07b5802f34318bd171b06d4699a6b4191194ac7d318397789de7079d1602009836406c066e63f15a3bb5e237974bcad33850f5f57a73e56217a74e32f6f748c7ee52c5495928c3d0025980a0029bc49812d60914c22bd097e04ef2939bd4bc59946f247ea0fa63c18a1dd126682141f635866e61b525d968ac408d456114ebabdce8120cb24371ad17655c114446c37c25049e52affc7072b01e86bed342475d0c60167a29be4df15ee27a2703a6b97845b3017e2f0a3644b05b67668ef76febb769aa5d63a5794cb4f7c3ae32bba4993c24302abef98b3d1169b7e2e08ec5b67267260cfca3841dbe27b13d6de0155d5cdac30eec24efea57dbf0aa7472d96bb1eb423f5122eec2cef4db4af1ce7c134c3902911326e4caf8249a23b76e2b79ea58673b0dce29fa8be19a5d8ad149797ee1a737e07a0a6d76c62ce525bb2c4fa0510da68eefc613696086fb75931dfe5946f989b098b130585311754c046c7b6847bdf8511233bbec14299b6e8e69f08feba20d200d89b2113df04a96b45c7ba6bef0b6f0dff332985eeab3b21dae1e77421918ab32e46135f931eb92458cdee0293e48eaa39545d2b342db0cdb6ac6a3dcc752aeb361dc3b176ebedb527e03a9090f44bb079a343fa3da87cb4210979a3e4531c7098271951b0f5abe55908865f0ec30ce6662ac33c31a4079ec4fefcec91b4c70afb6cfe8668c45c7b974dbab534d73a15a9f0c63738a7b9534696db61fa1f938107f55899c6de694088b8bedb2aba3e05eafd3235783bfa9a51d6fe4a481ce89c65c911d2f3cd38fcd5507a1919f47e7ed05af17c1ce7323d8ac84eefa2332e24bdf00f7917193376251ed6b6290b6448030ee9544a34c9029b73b19731edcde2b6733cd65948c1782128bbfc8189572a2c2104072aa827b22cdf108c1dd12d9bf9597e31e2e449c871780f314af6beeef39c28dce6cdb415e41554148d68b71a2eaabfd1da75352fbc16bc9eabd8035aff863f1aa32bd9f26c1c6378a938d126fc6fe6ff6881ec75aa08a88bcdb98d37f9e7300a8c48fc126bfc27009bcbe4860bafdb03b492d662e458bd3fd720c44c88c7e3f4c6ae873e8abe87f388a9590304728625e72f5bbe120ee104f2961063552f40207ce5e03c71696a9b9b5896658fc0cfad29e1e350dc30fe2046a2d94207262fd5d47371d4c705ba3ef962057453a29ee2a12ed6e1e8c8fbdcfacc87b247b5985cf6e2a0d0359b5e25cd4f0df7f91fdb0d78a19c39e1ddc080379c827bbde363fd0bbad7f762313e983da515b828406e76d5bf9d206d783554249b336510b878003b817d10f7d242de71ee877d890c3f65e112425e34a042a0ea500038e93cbfadadc1f9e49b83524192b1ca0fc48b3622c421f1badf5dcfabb04352bbef78214c8a01b53bf74e5607c877463680c53cf4a57413fe16b7c4be9ffd92b7cb738424f9ca18dcb23a36793ac763b965c33725ac9411f080b70921df0526f52435d27e23a38a91754fdadf112989621c8c11fb03085159c664861c97e3783aa3c7f1a230147320e8962a81742520f74d28b0bfcf583d0090c724f7ef20ee51f030cbd847a53c52b2160fa68c449041a0a0feb83b0d3caf85e6c9f91043f201b278466890df4bef7cd86f98810d4108bbfbe1306caeb52c4dcb5e6b22d4eb1191a84c99344909bfede2349d7a099c144941436d8dc31240917ecc954c5c414a37c7c4b55b6cde89ae3e44fe9fbe072cf07a0bb8c4d4bab3f905f9bfb7625b7449dd95022cce331766f4890319b6eb1a58af2159396a154d2c6acf318b6ea35772f3a9c9d0f96e2fbe0ae9f31079b1a42ae86d98160c8bd6d3b53532ef0880ba580fe7516f75f99a5e8a4e18ab8dbf930e2bd6bd8043841595ec120c0bb95a66a33c37e42fc83a20ed7b9fb8137c7faeab82470fa19668d31b19500508089a24fc7f81c83b7c9b8814e6c41c70ce57bfaaf4a5d7a18d9fd80c43d6660e7ea6ba0be2ad46b919829c7ad2a48ce909b18cb289d95ea8b091ec11738c7744a1e7f0776ca4a6d2255922c847294fa6b7f4df6c4acbe9dd88a7d7d2b05a7fd3fcc590e8254c30ad2a87e3a54e3aafd05f887e803e63c3689c4760f60228c8e314a96008168e2c73af74a7baedbff28f8ad531956e8a337274da512671de989b73f92a7c4653e14b3d8836ae2ea1610abf43c253e026802399c9700906643823a01fb4efbd81985e5b2b572a19c6446a863af7649e20f3a2927b8648c8a2f0a42381c707840199d391c5d4d6b517e3d667229a6db061d418e7575a8ac081074685892a6ca2bc2cd367be73590a7c8577eb6371191cd06bac21c7b678f4e7c7304d9da7c71f999986667efd5c20de74759965450dec54ff87c73160b96ebd768b032704c0047f2713156d39860023f6f7fa90ddf428d7d9d061ff21f636ec5d7e2f8e0afe58581fa3fcf4f180b1355425944d0374d64042b07898c1d7525bc4325a3a812a230bc95da479ebf13bfad628f2027d350077804f93640803ccf1f2ce0b9331eb6e806d6a9466f082a75cc328991914e0ad63dbd43acbbe23ac98317bcb01e1ea409f53f15421c8dbfc42654c13f8901de6ee9d67f535aadef837c76121ec5bcfa150c31b6d143ba3429302bde609b993b2ff0c324d0a95ddbab5fda795bc6541997b041066a511828139e3a39db257eb197f725ac9b247c8f9fc1b76afd9c8e831085ff7c73e1122c21b5025bd5d31cd2354150af2968846bef369f5f8ab4c6d70df1cf8194605280c21906bd07110dfd9673e684e1c20ff10822f4df79bb8785fe8833de325b33f6833ed9e5e56bccc42a0349c67add69cf791b4a5340fd6b0040cdbebad42e30ddd39ade6ed73fd3a66e741cfc5b273c57b08412638706cbe69316e2d00075f3a731b196a07329bd24e25ab29ee91c021a5cf1ef78a2743499640822962dbee6f32c1795333fa5d3b0140bbd16cb482597ccf9342b39a23fa912260075e265754231415c8fa340c1d8722b9f0c781841408eee82c3933d37964bd50f0795163904dfa34f2e2467022e9b1edad85628dfb521564dfa6591d6d17fb990c3dc2daccb95c20f9759951f02ed79e3130be64b6612d50838173c77fb0c3858231e284af6d231f043b95772f5e7b16a34ffcd2ec3e1cf43f53eb9a5639fc5a7bdd1928e273357a3bbba2aa8882859b2c6b869f45efcc983ca3285e9bb990611ecad0900cd37c79c77d29b1a2a1dc76f40bc3936b7e2384a2f992dbf53966e2947f6d82d693df63d009905527c36aef22b71b7503f20bff98dd91d80dc0662504845ac7e7bd45827de8415ebcf0164ddff8f60fb8546b5346d88d1f8a5678719762fd27e958981cf7a1a2940b31c8da5254bc272fab2ac6d571ee761503841074a0c069816dbf7a66bc1dbebc8d68dca455d58613ff32a16d311ca656d07248c5c60a575903a2e4f1c119a6770ddf9cfc83aaf40a596a2c359f8077f4c42a62af5d42b7192229a1c039fe12e3b813628365a139bcc0baae564380b098e895a55cecd25269d23cfbfcac33cba896ed766083231cd33c0a71f8a5851be942995bf4fb21f0ef1cc338cda022996faf551fbc659966f4d542bb414ef87e90dd1fca9e1297595607a6a15a9f3243e00c34a6bf9469dfc9944bd55cc53fa234be103c83ba9c54449ccd7ecc30cb93a2b470539097fd4ffa800b076f92c44f7eef52f7cb7a98aa62e220174adc554f5eaff36e58f6bb7e2fa16b98a33eed4c1577cf449ddbf32357e188b3fd293840bb06a33f3e3a0d340f0053d21f502463a35e6d6a21641587cba1eb9c0da1dd2e62c06a0e6bea5a3842a4acfb0c50d05acdac16b3819d679e682b3318a1ccaae1fae52f22078e095371965c5c91c658fa3d6ab165e20e4f30d3864670e13108202c7edac439ae844d44dc4d3dd73b260b9ba026c96f403604b7ba0eecf65860b4a091523c29d332ee628065e60537a1558e545d274dba85e3bad071d308c91866fd2981d200847bfd74898e9e4440319fbf903dc7a704a29584cf596f3e0d9afceb4b4ecee64ac7442100afaebce03eb3d65bb0f0a3a7f7e2bebfad06c1ab4c3e1401a17702ac7e8912ecb05e949e30577abe9eeb692aea9210a855e1b92b98f61d5262167d320895ee5578f6f502705453bfed012215e56c219338484d16e5eab14779f37e64ce305e44f1be069564720a698677f6f14f399a874082a5f29ae376e6cf562ecb36210abf02fef0de757847c151980c4490c1228d54d9ea4a21a914394a87b5eea93299d193fdda660b30b1d136ab8d9910cc62ac5c9344a3e1043448d3cd3a559029b47f8d04edb38f60f1a01ef7a075362202ec41f9da8742bc7e195372e58951cf02d3d65b504f67d1af36efc56e626c8aa955e953d57dac9899b7b0bcdf1156ec2cd4574a2cc2fd4b929c935d1fe71acefff03de95c0e87622e27d4f450750548d98af819a992b89642d9f007da8da6b4aec4250298c03be0e472a561603ec8aab2fea20fee49ff7968f5f00bc7da79055bd98ae8b11e30db64a10d4d35f306dc5e373b75246e3cbdacf97ab00f58fb88b03852e1ceadcf1a55bcf3fefa1c26a4863dac93728ad62ab5ec7540da8f940755e8673617f77e6760c93ebdd54292cbd219deb1012435882cd6cb014f06ad48f2f1af2fb583a6882dd2d8d2eeecb119e9d2b817f9c4c19fb8bf633c9745ac152e5c1413d0d9b04663dea8856ea2eb557470210d81f3e23702b02538d9d4fb34b1307d2c8f820269aaf6961e7deca8491afc03dac1370017b1b0f93f3e3c006d2475d1c01b0506b9ac218ae4425350bb847d45c7e21b83086ec8c797ee04258a2f34fa189cea23fe0e676c20e65e4b745afbcf1c0c24d3d2e1ff778910b4d1517974df7c39bac0ff7bd0241b9096023c437f892166dc583db15df15dcdd46b8cab3d68331afc478599659b1a6981dbdae70f5b1d19ca7a1187ea1d5b4ced5d016c977d8768381f58102db76899a93f18efb62d5a4c76a2150aafe4cbb6860e79658b06be4bf6b0408930614c479697bc0379e71e28693612e3b32cf43228e6bb3e20eb21eabf6205ac77820d9cce498fca6271b2d52aa0d0b9fedf1fe95a4d919e5f14f86e1a9d6e200900f4bfdbbf59ed78b35e7a4146173599e39402a4abc12d4e6a8bfe90c9448eefc549d8455fe213c39569403792afff8b229ba68e681494f8d321c3a84e4f9d2fb754119293f1e54c001d4e93ea5fbedc827cfda1ec527b623804e5ea9457f6d3c05c904cc2500b1adac0cdddb8f01a95ed7e2e64a0438996827a8bde042440e2c7ab7dfa53c52c350d9be49e632bbdbd4aea6260eaae679b97ccdd0d047d2465b3870125b019f0a67ff6bc5c53d54c5c8108c01b335dbd79614204fefd2c4a636e394454401401741a197ca2f0b9727b7920711fe4163238c723283958f759e4df086d0f6b7d04a7c44b4df5a29ed5201c7a9cf463a26ee1b0b970477ba7faf1ee3ea4df991ea44867d557dfd14b1d56515e6a201ac91a7c064a05afd004d4908322134a32bd875eeaffc1e7e589f3220013032d6f52de0fb01f0ff9bdd590cc86fbdfda9e2355f13511b4964620ff8e11e28ea3cc0761a49680b5aeace4d5aadf1233174618b70a305357725cd8e8a16d13330898ae4c42a0b41f5504f74c3477af3588906354afc30dd30590795663faee1ce63b1046f2b60576762dd79c7134190db5e5ced6ebd6864fd748caf3dda1ba6ec41df5f8bbc0b9e2998f4c6e69ff9ae426ae1fe2c35107f46eed9464164bc1542ba62509a5a6198a47921d6a25c178e264511f23411cd8e954e89f5416de49f4a23e6722b8506d97079e1437ac60fc2ef638963e6c1f4157119fb369e6449b76b14d84ebfda6fd30621bf77e06c66ef164c94cde4c438a662b7c984b8d63ff03e03b450b7b91107edf718fe63cd91652376e08 +MD = e95fda82d0384a00d1aaf90744ec582cdbbe31f5c6b2ea26b963ff633c7224340fc4423203a8972fe7d90c2a2342cdb8fbe73e0ab036a29b81d08d859978281f + +Len = 69136 +Msg = 3a2a624bcfb908a61b03e422b256dd9e4d9e0475273319f5a6f551133e9b565c9348902fdd5fa32a919939e23e5501d7b42ff8a76cd3e78124142cddca38be6a9b966c488c646578e9cafd913c3aaeb470045dc13625dfcba860bcca2c9133909c3d7effa46d57786bbdba9675b0ed1dc846be2d4dd10cbc7a0488432e4dbdb6dc654ebaec257f135e9bf75bb15dc5fa031da052797e733ae12619ae961464c4a43465e22d31e72f0c8b3d47b7e93e336ab08d9882d41e2e27eff5742d9031a33cd54ae02f3c97b5bbb613c251fd60b045280c672f7d14819286a6febb672b39ec6e851abaec958eb44301344541345adcaca627491e5d196b13b4b308415b6ffc289ffa96e9eba03f5b8f055c5cc1177665e140986202e0f9c0a5fadbc7c72eb32a1fe78adca1d5a326469e5ef70fd05c7b481be4ee0abd86b3033dfea0795c5b9d8d49606dbd142acbad6513b9276ed715601ef56d7d97581455e3377579e23aa87287de4349441a734dc3434b10d72d5bb3b293856358b80c24544feecda99874540bcd074c4fbc45ac21b554d2f5a676c84085dec5e7eec3f7f70eb27f98bf28be3cf460cf1c586a54e5327d76ae8c8e272e9421aa2c426056363b6a9796f6ed35821df7d9933609cd79826e03ec25ca59e588f61b0ffc0bc978a0bd1b8d84eb43450e73729c9d4b9d436dce8196bb53e5ce29041f7863eed92603541564b2496fed907ea21fd7584eadbb45f994945153503ef4be4fc02e0da62dd68c03c83041e26bbd72042a57681d337d72cef8eb2cd2916d007c5bf6ee61e6ec89520ec7428d67dae933df7071fd9e1bf42b3149f6bee818eee77c6c03bff53e1338cb37f9544c7d10953dcdf3b4c4ca879686943c7b0c9d8f796bb8d429247332a049a7efa0e14ded108e9375aa6d3034f43ef48371c5a3ec186f03e9053934ee6fce40aadaeff38b8d18ed804761f5022ea2905508dad20badd275cbbcfd28508ea329b4683e16eff525019bf367c2fa2cfa9139a815d4f621da3501b738f85fe5108b95b4965f232efbf74e16493f22d68e1eb8b93c4eb55ad06c135db24b245c5c8ed324bf762e22e2f82118cd138414a56059a318eb4e42fc418a1532caa5dcd159f822800218b7242c9d61bce628cf887fa4ce7150cbc0a5ddec49821dec4bb5158c15a3ace9d708ba4959dd6214ed80a221a30f2833bb1467c46068eb019351e91565ee1baa69d5caad69fa2d5258d3f15988b9198f1d920897c2addcea9aedfe1d792af76355d48652f7d9efeaf6c995d3e639cbe6cd65e8efd61999b14ad17c2bbb1fea1a834d14bf6d4351e2b1acb6172655e840b3d52e530673ca5e89448ac892949ad9db879c7c3100fa4470c27baeaed615a6b72c034cba8517f7418f507a6652afa744cc4712add894181b550d1fe883fc1ec1b08e615815268659fbf7cca022d28da9623c084793c46499ab94f23a2645b3b9abf81a49eca212b9cea743a6caab91ef92a4e669f83432d40c37b00e85986a876368fff5d231a449508769e112e1beffa4a7357ad18c89b3c21ee0cb6a9b4d13210799c48e7b43f1cbc0c5b9c41d19c1e06c7ce2e473721e14720ad99bf963452cfc6f1fea29f7998579df97a606ac1d8e1c4308fa92f3fd495bb6a0e058b406ce70096cace3c829c7db40e182457efcf5de1356da911738aa006d880361493c4d8bf0149d50bf89d90e6f011e8197445edb72334e17e3b87f8ab6f9cabb29d1f274ab808519e3a10339f45d426300df113beb071ccc616310201a5bff0e5cab0554c2172ce63d598d85585fb892c0b35625033b0d5a9822a4eb20166804ebb4ce52be40595ed39abe19226d47b7dfaa75c14435e96690de84135092ce43ddd294972665d629af4ae01edaf1b67a66abb538355e789b527df9bf3237f8733aefa14b82ed69f0d95339bb0952ce825c9d60b25e1e819ee5e949174f6eb03d0bf23b945b40db5b579b121936f85778c96abc5648dece1a5108bc442e9dbc4957c3ab9d37c6f311330cb25fe94b1903b5f9124d7a0425b59fc49c6e572ee53e264a398ca1e77bbb758d63b6aab3dbcc2932a9bf7cfa4f17d6032fbc5387f3c4806f2c8a1e0b390023056b460298677b2cfdcbd3d72614e9feafbf57a912ae856e1acebe389af789475e1336786283b7c742beb112f23bd320af9267e135de26f733655176fc7bfde87fa3af9579f82801e9cb82b5c58e7c42ebf013845a4a5224a23a6a60998d050f5063d8df458d77e2da3a6e4906d38d6f4b238319e8bbaffc4f95327fd9f749c3b99adae02f0c4c72fe539c551fd3adacb772e02847f9e58722bdd15a2580700ca292dc209d3b4eba3b5e35617756850317245239decc9dcd04fc6e7ae3ef23f2f3910726f8e426c17aa260f57624bd7b538200d517fc7fd7db9831657d0d097e94e0827aa9cd7c8fa468469a8404fc1c53d41383595032ac91da43a559a2cbb76dc776a416bff72d9ff80ed709bfeaef0062b2cc0d915f540c0accc2e17610a6678d0b2ca9813fa2559ae1356d1d30fb407306379987add83670f3427b508151687c689bc9ddfdf6ac96e73b18e67649fc50374c66fac53ff554e1af91f9c5c259dab679dd99d9328e33477173e263df1d426c93dcb24e9133fdbe908a3a850123f01c4c4f7e7a5de2ba2a5fe4d9a0c7898fcd956376f1d6d7b4b16eced96914ac06c39e8654897f9073b78ed492d5092a7f83d964105617c9c1e2d0c59e1805de64d3f6eae3ada17fa61785acd6a9abe65cb6e74546245cf16c7a3ed7533bdca05173dde3f28fc9999b71ccd26dc4b7a76c8d4870e103ab37fda1406cbe799fd917cbdad94bd602c59aeeecb01fcf3454f931834ba99d0e83bb7e5feca97b5873fc047534b42b51ebeab66cacb4722bd549ca204065978cbdef3a22bfdae90e554946365cf636c0f4d4f0d430f354a312a47fa8b6df9c2dcde1fc124d196aca6745b8a6bad99e56c6a0c5ada3a51ea4f25478a215dd52fa9bd9edb5fe30a693913a834cb4240c1b4a965c7d6d92773760a0de96c42861fa0f1f35963be54671bb6eceb0b3a1271868fddecff682086241cfd90c2d88723612fafb3a6a02f26ccd2ac25b20169854091f7228a53d792f7e2a908db7c42db48ab4672bf54d518dafb687d4614c06d713424112e48a71a6fff92ca0caa6397e6193a3f0428f0cdb4a5a44a3e00b1aaa70af72141b3398ceac84d4cecef43f9c7de0d411bb8fca5e845e2251031a7cd406ae2eb7b0fe97af6d12b19e2b77e614c8e22516c617341f460948653443d35dbf869d810cb416512beceb984af7d7f028e3bc88cdedf22579a5de67da4cc74e8181e6fc971dbcbdcc5ba944913cb9388729c1ef37daab7903780ee05cfe02ae36e532b0b90032fa3aa5132b690d35f2ccfd5dd16ca60721cecbfe5724212985c5fba824db2620105b1252d43b33f328dfa7b7b8d419b027c0e5d654997de7dc160b71e063582c0819ec8ec76d779ae1a86ff92bd7fb4b92c310bf5f23d9e1ba115db46cbb5c01e95b79ee8d699fd2260e9d48b3dd13836bbe92e1012affc2279e389a5149fa45bb08039bad957345fefc78cfd74e2afdb998b463c116b5302ba5e64b1677fca1860ad0bdaf5bbd99715749b31f920864843bbe6d2850c4d3cf0eadee43ac28bc5348287b1c2243768708581f1311755ed58ef829bd3ef4551ac1d6ab604f483f29aa55fd7b51ce8549f7ed393c333993b379a9bd08490c5b15a6a8abf6ca22d111189e6c5452266dbe0c502921611bad26e41b5191d9d690c6a66d168c847f1b127a4af0308c13d7ee30c8184a01e55136b7940ee157189937a76b14abe526c434b8a2b095675d6be2499f2e407d5d29ecda5d1b7f299b217092eccbda55e1757fbbeed50e4bcbd0a1401b928a3b4cdd4f36bea1f3b927ce77503666a13c76d6fc69768620a027af33fe856db0a5791567b1fec8c66e844856c8910b8802ae8eb2ab81ec55ce37afa16a25e63b21ae783d3467b77faf793815e147e3180f5146aa6a582e343dc479f26b4226b219b1aed8a83f97a6e6cf46ba859f15d8cc27a5ea8c4476455695b42eeb25549df44b6041f3cf8fc37a4e194f9be0c9519ff7547cfa8be9117f74095ed11799851a44367eff5fc85fd3be5adb0a532909f18bfa679d75b11f21272089055e1df0f364d799b2376a0159e7b067bc405a8a2ba940b45c4cf6f7a577a0b76e420769e773ec99f69e9c327491c4fa98ef875cb31ace6a1e56df22712c32f0f60d7f755e381c87b2de86798c833e9c86a7d605f3a64b91cddd9527ef0e7d3d8405af9ec07c106ace3d515e0986c5556eb16f0f511460325027408e86e42aa50174bd6b75076f4a310425695362012e38557b02372eb4548f7c06e09d78e03153a0d164e5a1e230c57a2923d2df9b2ecddb22640cbaf0ff722612a49e9048e863d214127812112271e98613eec43b5e138b8bbf3881bb3be16c8a62f0f509d21951adfc9721a32b1d9763c210db88c4f3addf9a234bbe11c49597a3fb6fccf75d67c5aba8984150b1cde9b69eea2b6a5588457e35e0a08803ea60ed27c63960185a84a5153d929b16d3407902bacb582265e6f2d6070aa986b30ecbdcc1f7143073117444d93f1332f18f93a2131195408cea7e6e8aa47b3538c8c28229af1b8ffa959f9f33efc0ee6ffe8ae8bda529994578aa652f1506f9c0b75c81c6087e1b3737af8c154bab3394b7e83b7f2e1c14d8b8ff23bf0652b89402204160ab44be71202b7545fadbe7aadf3402225576988cd30410011e685cfdd3962bbf3f755ff2779bc18ca558f3f7a1f7a76fc1400fabf14294bf064fcb414f47a5aa6d1ae6006588d8b2f42b40c423b8912b1a82607b393f18bf650fefa8a0ba18ebdd393ae41279227f8e5bb5588dff28210a427345d48502cae4b1ae7cee77ed4836dd45e6a5f607bb1cf039fd0855d418378a3050ea9cbca82b3bf20360078a8a210bee4d4787ef2d45f3b6f9bc40fdd749617fe6a20aac21e1b8a2871ff1597945cd1d631fb5429eb26b1395d04a0b27e9d0484d24593cfdae2da64e52bdc0dc4b2aba6e560768d60b6038196cfb66d0bfdd73ce9910d3033ca4e6a022f4297cda2baeb71306c99df7db0dcdbada769a7293e8b129b8d8fc302449c7b71dfb229bd6df867f38cdbb1ee279f8df6fa44dabf78f3efbd8b5b135b6b90a38c09e9435353623c227ddf7298067e4064256b0111350bd38f8d1e7f1611eb0ce667a9b51509bd5035b5f1ac0babcd755dcf58c4dee147507a194690c2d5e02a096f7fe972df7e56a5bbdec8a9a611af4c4eaa90690c1af915966fe2f226248d7d87d87aed6309b20af5d3530273ef50c829ccfe50241b3fdabaf6d024912ca9ab474fc3f53303f4ddfa9bd59693bafc59f72c6914b7ac9741cd77f2ca956cf12b34426f1aadd191873074cae69419246a2d655b37356391e3646fc564a17a1665c55cd6de52171aaf4e1a9d72e36e4b8132f46f383bc4a228065ac27353b86bf370fb95b0ce38e2bea9e9d7bc004ee427be45ff8829345a9829a564871acc745cddbb161250bb9c2dba6f0422891f80d605f696b78c572dac54ec4600650ab1fa51f7e2a3a803a9751616ad66dc74a414d072bf36d3919ded0eabc18fd117c764844e85c522c59d3d337d2dc978c2b05c7446f396ad782dc2bd407185dd680713cb3b7a076f65e9eea90f2ffafcae581587efbe57687f5fd5f766d072e8601390bd3b39dadc6901f1cd490e5bc68bede871d989e9a31b969f337b58d790b45f53c0ba4fcff84387ff46b7536c64eff44dc890e0cddbd17476f7ea953454c95ce58c5516474189ee5f7bd699bd664efdae02b25d8471357bf5cb50f019a3138ece668837e156b0a7aaf3234bbf292d8c91a69a5aae01cc1fb4143b03f80a278766e5c02f2e963c466a3339d4025c0003813ac5529b1be9c20a69054b300879b9579089667f8e913d05b266dcf74d6b050515dfefec1e232591304c20821c8ea708ed607854be641e060756c13e9bc30395ee268d11871c9cc1107c4e4ec4ead30352d1cf5e94094c0398662b18b5ac81ac2a55b49bf51aaa1270120f067ff2cfcf6759e5fdae155956ec317546298c01b030c9f0ebd6c1d01de5a9fd39cc4aefd5a17566a27afcb8a889353a2775f5f66ab81fbc91aa86914bd7a093593867d5ae87909bfd79440c40e5ddd43d195ef20426b3922dfefd8014cc926c0532bdf3c29048206f277fa6e888b7ee07824b6744e321fc01328b0f113b0be1ae49c1dcba32088e6813f42ae7e84fe2175f2fd88593d764cbe3b3a0b9b9598eb4ec27e2ee036e2078bd660ac79b025adcfe90b84eaf6056de80fbe786be17ddc99844c8e68ac591218239c920177ba2d8ef02a918ac496cc9a8e845f0bfd3594cec9cd12c1ecb5af310e3e859c418748bbeea0d7bf0fef10dc9fd3e9044f88bcf57b4be3755cbe85dc7f8dafd47652a75dcdb67d1440d9e2b42af53ddd413efc14810c280c663b3d235ed238307ee4f17c74b4ab0ebd1cea2c1830851e3a1efb35c3590a0c71f67e0e93564838c105cf20cbe28b37ef80cf4b4fcde650a2f1625f2979b1ffe4b5f1a4075e0575a87ce952ba8742163ecd3a19b8138afae07fd89b9bb6446c29413eeda0359a6e9913e61929edfb3313cad29f3b4c99a45e9006f00156ecdca7620cf147222dabfd906f7e005adc17d44040e4c1be3ad683ec946643a2d0d6c6df03b9e56ce7b53dbc2b8827170d49ebf82bf030b39619b75a290549e219e2ee82cc4c605cef13bf5fc33f866cb751beb73ccc7271d5f462a46dd6fb5eee8887110fb2a23a6e4ded41deab06a002b8b7481b7f6d401ef0ec900ae0425d7851f95573f4914e8bec2e2925d58dfd15053c726f110b6a9993bee7a52b0429dec4ad16a11917df6f77e9e13fc404c919c0b7fce08b323670683e70e9c02b08496a091c41291b364176882fd680544d35728faf18f4ccebc8f4d5f57ba69d43e1c9762efa2d849c2a7272dc8f1263d192a22c53bc54c0d2ccc1eb3c06e54421cd6b5d16742b3c5752f20fb014811b9d57d8f6b077b4f633a156e90f308606ec36d8249a582e2aafe07ec7720dd563f8ad9c558dee1b5656723b3534a190cdea439635834e3b36eefc9e02ec2117222cbc77b1b3cc91c88265f93973020b80651d2ff698fd5c485ad0db28e4f94e427fabf072ebb71e3400a2175c96fb0007a3eb2bd1a30e98483d81bca1233d82aa3aa39000fb57cb8219521d056333764aedd6102d6a28f81edd3acad57194bb42a4cbddc3ab569f9a129d939ea45375308a066871b7f482b383218b2d95a602f2074c6124c559a36436aa028e1f0205a3c4a2ba07501a40ed765e890f591c5ea2a94da4890f0bddc9cca2f23d9de92f8be1d38f56fd413ab5001a4ce4839ed83ad4f72d5b531157af1bace913e5b0face2ac06ec6881177f4677d5a15dcd377a2ce728403571619006cf17178c1fe6f55e792dfbfb734ff90f4ae3d082c6443c3dfe531e7e4c029a2079911d4f77b940860706aa9544fda73efd67d273bf844835178bc71c1b7917f34cb528f50d073cfdc8398ec250d1183a01ca0d9d03883cb6a55ae08b8a4597d3bafba1194a51493a5f2f0f0f313aaaa4ea93085b5cc078474a18f138f2f8786636ed3c28ba17d3a01e6fb1e850cb0ce43a4b595b05bd894b587e5fc0fff2581f630250bfc6db8ae39873fdca59e28d9c536b5708a8dffe5762d3a2a00bd3a553a1c3652b1b1cdd594fc469319711cb21d87ba7e0b0c835dfebb15052a10cfec785b91007014c2995c6e98acaa2e934193be4b27fa7d6ce6975afff554a1eb2df714bb7e023ea1e1d704bb8d207d966e6e04f1d3208bc36787327f624818960001703d332fd872944fe739a043052c21f88032ea46dc8fc7176a1db4cc1cd84ddc97a086be8a3b9c0a3e9a4cdb6f5d42775b99d43218d8f08f2a6153a955bafcd1b06ce179fb06e0513264f8af6231b934bcabf9ade8a6c9379cd4a8a76c43f628e427ab26d4da486beb210e8887b16e77ccf2c27ef4023a56e5fd198d097c21295a5b4b8ebcc0bca29058f52e86e44a88b2f5956fe3f32b3630640f25d36b661c3b8f2b795cbe243c4a92156906d333ae973cdb465d82841da392f335731aae48ae4cb2af5cdf68824056d601af841232a350fdcc0cb62d54660e2b869091dff6dc1948f7632871bc9b2ca0bd2b01d05cfdb861c995970f23a26021e0d3d7e26eec7e551a19a32532829cdb661f525374cefc7105a32d10d17f113b0ae4f3a0f8070341e127576d2b1e2fefc4367d85c23da59447dc8119a824a8e3ce6af000dc55317511354c32f1966c449f168c4d8e733a3158e89a13eebaad80f20ed3e961fd8f5775ea8b5aca13dc42bf6786921f9843b2017080e4ec68a9793f77a645d028a650d4ef1bceffbd0552ecd2743ebed3487e081c3c76ea5723387d4d71fb71fdfcc9f5eb0477d7bb71daedfe5d38b34cd2fd3593d5af30aea324743a3af38ca51b28a1874f3c9c36a8448b954968462c6897527e53790596b1a5ebe40b1569478bd6a06b0304945530f68e3c41b6bf9b93b42584bfbbb337d623acf3eb49500cd23cba3e28b90941935abe9d4b0a65c0dabc784e205d80b899067d10e377881c7ac1b7a9c742412159d6e260724c81c4c51711837e46b54283b727e3f9875a9e0bcc5e53e687851e08d4c42dbb645bcedc2db8cce16099fc1b9c721337610eba0bc778e590701c602abb2aaa303a3b07a86737d15292760fe91e2549a5edec9a0419cd06cae5500e46f3dd82d8b76997b02b5539d8c492a275a50a2c4a143b637d2a255f9ece6751e5e4a55bbbc12ca57ce2d9ad7cde37de489ae7652ebc4540ff6248971313aa508ef649dee241ce5995f58cd445c9abebe963859b59ce50571129fe57319c6134c99193b2542095dc82ca36573b6b36f0e06aac77d433a5d03be70e470151d4241e1d497f1944ca56cbcb9fdd66ad2215b61623a0a6d18cd40504410e8a1b4a49160234ef3a97b4eef95f8e0fcf77b584f2ceb4bfd7924c8bf8e85f55d5e00dca38a81ca8be009dcd93edcc957db239621cfc257c705d2f1c9bfb30c3e88a63d00d77c952ad66cb1b21df22167844f4dabc073f7e77197baf76a67b01cdff95831cd8029610b387ff2c9c553ac9172f115b57ca6ef7b0796e124f0ab68c29ea0aed31901ceece19a13b8c30aa7712313280548ef3f509717ff660a38b2beeac8e08eb3c8b4f9fc92ad6177a0e8a1c4463b46653b67b0cab0aaa3f0f28b4382136f66fcc8b3b0edfc285a5fa0d0b1faecc7ef5e05f90a16e38b75616342eee932b3e2408c6bb03a290d19e79500102b8976669fe953db00430a40b7f58a2f848946871bae1d6665bbd416abf7f74adaae9f42a75008921b31bf9c8143b173e899afcc0a887951f53705e7194416c07ccedb1a00d497cdcc4213ff49b8695a79d6583789b5efe16cfd2ae1cc03ef2fa65c824338d181eca7f69fdf6dde0251dce1c85005b0e1c341a0bbbd10a1f0d6ebfa5d64cbf1478d12b1cbb38a2f2cd8862e888c2b040f45f7b420df93c8cc64920aa4d5169e691da11610221b16397cea2f01625629c908039a02afd1c2c2474d1ff13ac543671ce7a615819d4dc8bd8d65db69138c9f7809d4c9c4373a82fd71acdb0c348ab2193ac444888d105b08e4656f16efc703145ef6eeb3508a7ef5a423caa000deda813f03157d671850ed839044d25743847b977309d3aa5d26de693738bca6aa50e348d500f6c7c05ad9ff98e541c69ca40c37cb83cb910d1b061539bda88287b5ce0cdcaf7b0ba2c96c9cc1d8ebca2cd244a482e501c124bc0b5cbdb20a40f1699fef6c7970bf3a3d040fbd9826de9eafb3821bb5fca73e9a6c8435ce485e71fcd76516e78e6ee1163eacde9b89804c9ce745087f32bfb5269840345ae93783d003026e821a7741f58b18c76b8a3bc11a4e61cb993a7722e11cf52bf07368a193b13bd5d1ab84d75b67c7ea70bf8d96a8676cf79c8a69f27a7937af275d6e45a85095df4ec7f41ba8532eda538fd237e7b0cb0f118904be331b7c10582db4fa9e7fa4fd51e661896cdbd1f97c71c62f28b9006460ecd3e0aba237021b6ad93ae68ccdc2938d399b397045da640bc5d71beea1aa32fc5404547bfce6d98b4781010684a18c3308db6eaefeefa2c44dda11d02342e05e1193ce2732512b059c678e7b6e1c946e4bc4acf661cba131eaa2aafc09b0f178790969227bb378602448df69eeb654957ee154d512d0f7bb18cb57d0d996fed206ffb60c3da05a319bbf84409ae1354f1ebbf6c986a20ee654bea8dcf747610157c15522fc8a48e04f360d9dd73fcf01a7af134241b16f3a2ae70e9f0754b07cc80897353cd3bcf2db46ebe048247a43a6553aedb881813d07ef09956e4175aaf4202c81733f2effac6cafa64231df9b9728ce1a6f84fd4578311a3eb090192258c265b6440f275d5f01b95e79ea676ff6a45d66eb5e2c1a0857c11952b323695249d33203e63e925fb0998743a09a3741425931905fa5f114cd8eb3e94d1ce69d3105835736dd451b03e0af2416f08813ad5229031bf38139fce37cd8a07e2086127d3892836bcc3d45ff34bf9ff2e8ca2fc8bbc8058d30f4806ff2a56fcfbda9689ab06a4e92ce232175c66abe29cff1543d4843ceeb86b0d274a3d40d7a0473adfe89331aca916910b4c2b9e3fda405b5207cfaba87091b7da21ee8fc15ab714d0931715a7bdc7b8e6cb821c3f71b93cd02b8717af82e70ec68b258de1b092ed05b27c9904ef5d704ee1536b0ae8d080654993c62a76d7d99490ca80602a408d2550a905e8c74081eb9786d4c7c7efeeba68db0142d5c7e2eb38c5b1655029bcd97286a17dced9b367f4039f9f977d507790470f1f2521ef748cfe6819abb642c922fbb4eb8b8ece6700b214b9dee26c44c9bf3ae8f14cc9d6935deda3c24de69c67f0885a87c89996c47c7b3e27850ac71c2bc8c6beb038ba55cb872c1d5871fb4a4d63f148f0dd9947471b55f7d0f4ab907302e016b503c8db2e7fdc453dac8dd1fa8ed8586c621b92fd3d27d82af1962e7f305f80c3f4a72c701ddac1665cfb06df51383fa6f0c2ab8429db51fbc831fd379a6a8542d1005077a94f19394cecf1e5f33983044f369cc6279aebac42230584872aab9a637a502d6b62d620430999f2be02aef046206da97f8c2ca327144e4c41c67d3372be3378ab3c7f8208fa06eff8bc48d19f28241778d89e493faee1790e678076c6730142b0049cc6646640c5ea8ed70f20f5cbf75ba7c9065196c5f137353ec92642c372c3e3b6561ff5505adca1e51292306930702034432777029e03573e955bd380f02c01549901503d98161cf941bc8007acff6c676687f7a166bcf608432ecd40a43385fef7d21f0f66df289c06688eac5250b2ead93abea933a839253964d90b7620983cd85909ceab81ed54c85c02600aab1b4602087522ec11491ce1c89eea4e3a6197a45fb783514292acf061832bbc57cf024bb8c414793d4d75a221c5e414ca0996c3acd1363f6b4029e43fb916509df5a61b145288c2756eb9e336f502b018b7c29e08feed5d431e550dbe4d28afc5b5bad9e2c885ae00d46f0ed0d74b0a6c94a19b3be6b2931455b7d3a6e76abf1738c7efebcd142728a61f8ab712c70a0ec8bd230c328cc9240cd79fbe2ee269daa655c4f70a3c15330d51bfb34f7e99457a9e9f448a84e7bd6c3ed7cfcb9a965827eac0ce27055e6a308e158c36799d5bd2ca75ab95a0d5259d73e5a1659a2cd7e1104b37cb77eb15385df4096ebfff96f9cb0f09fcea7ba4c6fe2ffca5e815a0ff4ecdfb9e9ba47c4c47c4f4a058a83f1729d326666ac2840f681fa8338e37fba72caee24a7871e695d3ed13734d7f9d536a2bca7c27900ba1381b6cb6947c2f023356b474163b9d3a89d72f90a56bfad6187ebce629cf83a4f68d12d700ca8637ea2e39c67ee8e764f1ea0f9e68569cc8ba33c54b7865323f2bdc603ddc0b466eda9c39e8b7620d3b948f7d469e27cc50d9b4ad541d3c619b5e701f903026b8d189097b82c98f56e6f92c3f3050c6d296fc683ca81f3a57e017b1167a0203248581dec83bbd590c8ea82b1e03861af6c3abb739f086495e35 +MD = a4245a5f76f6228113344929db4ea36401f1b48ecde3714ea7e9f90132f08658457e3b90d935c5e400da23671ab42ca836f0b070609d4dd94480b24531026eff + +Len = 69928 +Msg = dde88aca45102cd4960f969e5b94cceed52a3a4ff05f495975262f32817b0b5536453192b080c2563b9b812dc31fe1858c9263b5239b1e3e94679f50dd4af490a3aa0418241922bf6dc1e19bcc0529c589658a5cd1a2d1cdf323d951cf98a4b78addaa638721719793475ef1608ccb35356b5a4de3be888efb25853d3eab435255a7cc7bc3e1da6417f6a13666fef05ef86b788f42346b0a14344a1d14cdf8e96bd01269bea183b060965272c6a1bfc63b2f8f2ad44fa4c8a717d0f83843eb053420233462a99402d6ef19ae68be61f7647d4527835658501a97c0d69258452d185fa8e4954036e3e1c89cf1349cfd79dd1e428d3690b22bd77cc2bf0a532eea7f54488241af90dae9eb86431285bcd20cda2f64d546d7e0448e7dbc887bcdc3d1c8ac154d3fcc6f561e7daceabfc68c5b78b4b547c1f2f7cb949ad4f41a4b4076837ca5a1350f2a902a2935a493422e31c27887764629f9d358c0103676cfe9d74d5f3b25dc8494ffd734e528495841f57e24e24920a46dc3a0987636d782475aeefdddc17b50340cec43c55e29324c11755fcea8958cdb0535ca11dd878ce1682dff965d599e921d3301db2e7bf5d7ec6fd2547bef09cb00dffde611cd143f6ad30d6be1bf94379c7213318186cc6bee34257baa7442c61c65d9ffbbf042eac6a8ce6635f55aaaef7224cf3d93dd8f7f8bff4c1e6d6053c1910863c4393f69e674eb8e4143197380fbdabb4cea50cb073d08cdbd218afb57292f1a12f0334430ff0bebeef1f91bb5d5ddff94d34ea7ee13e90870dae94546f6f92d8f5d46040e11d78622462129f8c7d6a3ff96ffac9cd24a0520dea5b9f7c00ba321c79e30e771f766c68bba25b09a6dad747a8a617a45d2cbb377e5dfd04f1084b278665022e81293c309eb9844164927dac8174eee332a6213ead1403a6aaed829b6c4ed293ed016ff05dd091e0313181bc9d0fc6163fad2268293639edb8da86ecae08e633bdbf664cab700a52972891ec2dbf23c9ee923d68650d0626856fb69fce3bb38a6d83bd99fa20541500f81cbfe60b8e5ac9f5e093d3310f0dab1da0293f5fc104972ee45cbc6a15a3f91080ac488d7c655c58ba9f061aaaef8454c21d93dda53ea4f1692974a5b58bfa126c35b7ad6456103b09de80526068cbb59ae14e4dc695217bba74b57bca498e7e4de0c5f3dcc9700d7cd6a450d5f5cba09918d118bbb4973e56c2f144ba4920a49431f5f95c2c0650721c149e62032eb65b28ced6daf970b9dc98aaa90c174b35edbdca1658fa4d94981343a39b3d4f674f958a00cae0386eaa6a640136308892a8c8a4e359a0b05a4d50a408f7f0a823f4f3b51f021568cd5ebc9ff5df31435b53f738d8e4dbd9020058c826eec9e37cc9a7b299f6e58c765803c0ff5d7615e07dddd87f60f8123c5f90229616256bf25c4614fa3ffd1dca24d47976379b7ad294c1164f74921669c9ab45ced49fcbf52b335eb843a8976943b31bf3040deca2276574b19616300accee9449c0956e259513f27c889483b443044b1e3939d5cfa41f664e3c0109afd7eea09f50a2dcd4484c629f953d5d3b915c69204dcbd0bb99738d8ddcef0db989300d280b5482b1b3614199efff9e7fbd3008d1b820781685f63cf8ff3ca6c84f371c7c67071a2e44e6f2040f77c1f13503ac7b1ed40630f81c070829867f4c98885124ea46edaa9b4206666a226220876bc6b4d84335cb4e497e43d23901c703886d8a0ba087d71506f129868be99e22ccd9f78b1a7126172305348fe0b8c80edba4445180730450aa34c5fb10e2baa59b68bb9dc632d1d12d2e42c8fa0eb018e6b7bc428339d2cca063e41e5dc8167e7c059986b3056f1acc7bf704019e2fc03dfa8a551546c2e78de0dc86cf14221bd302e9dc7d635e329550d9c783d1877345ef171fa314553fc74e47caf1517e0c3513551581d71fe6fc5f6399ed3367d09327eaf8d93cea43e10e9e4140fa8ade16a933b86cdb247675fa1ce1ca4e3136aa278e77142b22826fa448804a99c8fffc273e4baada2c8f96a37e35978c8433ff507a20e0697e79d791ef0e8a99c8f05a2fbd25a86e7880e30df00bd168c1470745266cca726ea89d69fa526d84fb4db52538fd020298f8cf7c2aeb048d88fe56782be13ec0638d45aee2e28fe5e066a1aa4a3824311e65d0807749ad454ba8616be2f4b9edfd9644a341354e3708d98421694dab7469467abd7dbe383a79f3cc82f43dc855bd623f198dd144e2e524e11d0ec3e4371a194275a6af31d7a46edc6fd812e692036f7964313cf093f5c75d0fb3218b13a16cac6b7a9336a74b582594f71a912d601ca805c3decda4db3f3c8beefcfc748faf3ce172009323ef6e4c74d9cb648264083f80ce3d58afd60b23e42aacb4e4455f688a158de3c7f11f9582189bbd2b8fa0a467b8ef1e1f96a987daeeb740dd52fbb3c7ed81b51e00cab56f0c02279333747b2d0c5a8a6e9d98fcc2b3b32cea4912a32d528263909f1e107e5ca51053fff2284341162a374b67e72e1206d5759822bb1cfd169bca1c883b5252eb23e855b8303cef9879e43084cb8f7248d719b0ba602945a4aa1519778a6db74abebad525278c7057f60fed7e3e696cffae41233836e4b4b33b2c068aa222d25a6d65fed772b46bdb3b14c2b2a44e5a81c786702aa3b1d2d8bb59642007343c80ac54233da6474aa8958d50d09190d375cf5428003b13186ba737d2e62e046e53f81fe2c636b78536a1f428468af350420224ab6771ab0e128b41b32b8b05e05add23ce0fb877b40bfcc3b992f4c8698d1c828abecbcc1c33d401859ea2cb2afbc7fa4588802a5faee2867534639287ad8af84674be18db661de1da8e19c6b6bd452dd9bf3221d0861fb6fba96be42329b9f04f37dcf3b41fc58d2298348b0c15d1190b125300cf27e0dfad60522fc498460535669cef4ed7674dee3b977aa3abf8564a305739941af25b1b07caf7f46fab91798f628e04037fbeade6c72815d627602787a35ed7c5b0d3c4fe4abf3b16474f9c20e2326c4a7b49d2382825cb2aeac11386ebc2f2be98b42bb235f80132c57a0db9809ef012e69a0b9e5ed63c20cee3aebc85288d7c3686bfd23134cf2b92bb5eb7b20627e35e09aa87bfbc014e205259a703d2007506b611cca0f82d973b7dffba1b1a8c322e234f92ef6983199ba794d4dc51e43f85ec920029a484dc2c5c711f103e8585f3716b3e424169f9ad3de0a4934ab1323074e12b2fdc6d80e1b143853604bc652a7e7de87cf5fe84c18fedb4bd0ee00393096f9c2812601bf826f75af0ef99465fa4f83fe3d9e9316537ec73ce31091a29f49dd196b8d503dc280d2ed56194afff7f8a831b6f929624a09d602b3384fc71d10c6a106254ef1a3ee56f680d370876887580884983197c6451186898fc00e7193bd4199168241ed6209b0d4518f6713a7986beea4331c8fda7fb0ac3d6ee06579c9e16b8875966783f4049ab82e06c0fe72423b45b85b6d7129696669e1a6bf6af369c5a2ad59dbfa1eda1933d6cc3934ed75b4a247bb28b21597fd3b9fc6481042c2ef8cb4f00f6e901b9ae70e2145f211eca1e468a487444d23badc32aac810bed2316f12c5cb8850ad65ff5e6dabe0e7904a32a37e54d0d9f6e57422b807156f82d3734d3ed9f0687ac2a14e1834a57647f6b581b255fdbff7c62af55accc55ebb1cbfefc5004ddf69f9f6678aa8e9c7faee9589a65374090da42735f7e0c89263567c80c10747be615125302ccf56e0927bf944c315dcbf22c99369f60cc71363c7d1869ab7870c4c135632647092cbf5e309387165dee71d7b951ac1166aeaa4b7e78bb7d8b5d11188b3f39b5545900d6eefef1909228be50355cfbfc6581e0d70e5168232791698f561fd3a441835c066d0f121ca4fb264a9fc1058e63ab78539f4b0628c79e2c9a58bd8a706b2c4f811d7c4f3700d6581b4b266f43cb7bef6593cdfbfaf603d8cdf570a4c63bd449cb929f2f5c306ab246e9e57fb92783a4719e42e0264d42fc9eaed1d9022debe94a4f103918bdf8c351de96dd5ae243360c1152291717dc1680f7699da0dbf39c81a557d2e8f43109d0aba30eb5864b12999f645d59e05fa51961a0494ea08bd20657dea3398d840427d3a27a35ae0bd8ae8b01e36b511e36cc700e82582615384cc92d10a6e46230dbd91da667b3f5e6bf86a351d7c4c82a2e951ccf59d7001dc96bcbb1ad936c1e614e6d19d822a9db40f4d13f0bd5be1d94634396c03e0d1100c222fcba15023b6c86195ae3848804d76813f183ee908fa24d2b6f27b57cb0876edb5858d3b5063222cad036542121e752d41fec89cfdeecc53cbefce7df6ac1c44d5b066a050d76a6ca102d1bf580f5379a209221cca9b86de00cbc4fc5ae5455018b4f4262cf8e84cfa1543685c095a8ee9a0161277eb9a9bdeee2579ff993a3905faff76ebb0e4f23fa384e525f2d0949e2d6a260ac54fb3ecc0b99feeb1442625e84f3795e6a586f8145dddbbb4feb24a17e7ff8d10ee4eb2aa48132e16a93ffee7ab1233827431adcf93f827352c1174c6554607b6bf93b9129980c7aeb1ae1a60ddafcc6b991ae73ef1df705fa2d9a4a27ca2819e0aab8861758cc263a69801b9abb5688b5c6b2dc83e3a9e18a731621323bc02b017bea800a4df261cce28395cdecd0fc9044908d541b0ba4a84413781143b92d42df39f55ee22fbc173834caf3e9eca0ddbdeffcdc3eacadc8232aa5415c839f29672f7ca1bfd4939dbd4c21c92d1a03f27529a198c90d9b6e72c44f4ef0b00f2986437c6f217196e4e412109a40d9a4831cd611f6449ecc0fb568bc96aabeebc7cf1e8b13c19724716f2f3e03afbbf0e4176dd4813bd0de208d9093c4d510c398a4091f2c1aa5dac7a10bf081d42177a9f7595fc6095430454dd46b362a4614f097abaf34973e185c1c30ee9158baa7492f311a41579970e2889c9976f4df5e743c6ec1b9c1c06ba343267ebe97e81e56318daa6f8100fe8cc051a513df3d0ea7e4dadd2814cd4341b86527663c2a3b35b0b776cd203b67a887ac147943ffb3e03368880c2ab54d9bee657f2490018c8c0f5705c6af991ada41046e33bd97dcd1aaa028d25e28d92647bffc764dfe90adafd4ee08a9baa6767ee328cfc685e7d0ad1a56273998748566dd15d7c081d63f34c985ff89108911b3d0da99d94a6381dd2f86573774be1dde3561d5922bcba5109d6417d82b31406245da4e7075ee599d683ffef25e0473f05146dc2d6cff63d5d91ede117b4d670ccace4a2668e6cc704cf98ad4b4e60c4fc95b680cc5c01ff704fcdecf712c1a35c81d1965c3cb5ef85639977909e16b6f061615cab6ec2df699b4866cad5bce6fd65d38a8f72a75980c768139cd74f5b08fed41b1c0a212570fac6163a06ae80d7df5248a7372c4c1e846f491801f5fd6df67988c63a0618aff6afc5edab81ba1177b6964d942b12872115e3ac25efe247d1b76a520559014b166c3b8bcf1cdcd4b5673d298f8df1e226c1a7ff4a2552bd15f588677402286fe26340bd77672e4722ce05e2333832571cdd5fba787f97f74c9dabae8dead541e3fd9c2bad4af7934551b52085151c108ad0d184b7e5f81efd169bce5af750e9a0a2167c78ad81dfa659178d8f0cf932f802c606103fbc5ab1c82070e312e090a2bb7858e1781254ce4ff1cf58060fe8eedb05e88a752cd2ef1b023c2f24cf5e6fae8869ee93f31a44990c8ee8e9a858f5c358d12e6f90af3f7708d94613637a91e50f54a9e66c5890a13073489f0aaa94228569031630182944fcf030c9e50d90c6d4c41a5ac4363bcd24257f0e7d07546055591150533636eaa428f52c9c3ef2bba15f48d545ddcc87b24d95204b97bce5904960064231edd1c82a9e26d236412b3ccd3b403575cb36a09393bbba815419fee0f9214630d761329e339ecd1c047e6eb7fb84dd25c141b79e80c914eea46566c7e387a55b7a03a92aba7bd719c41bffc5918785163512bf1764319f05352f92a62622a7db601df4793da73655086cb79e04337570af1080a547dba4ef8ee04824cbd896d81119dc31c30932f758d85eeb5c6ff45ab7a3c2f132af6ad337e151e9d893b879145d29fb558915283cc7bb53a1224bfcd6334ca32c953bdab999759e583a57e7f053a37efa0f250f3da1977fdc36c37f9328e7623e755d2b9b6f7beb50b5b94a30611163ba83acd5e2cfba161592a20b77eb5bd66f3719f065cd2d77caec26c959f13d519dcdf0a1b4b7ecc1521e30c709e270a8c7c3b74ea01a51ebcdc7e88cf56aedf1acd63a9c3ac2f5289dc2b7dcd176ed804e017f6fd3bdb0ee622e46bc8b34eaebee84d1edfc589cf2fd667d72570f9c050ddab97b8620122990098781a4b7fce66cc0ffbe82e2aac87bf2cbaf241643e00b34ac9941aa3f435f40f402c75aea8a2c730a3455c6e8511d4ee9bebff1abb950f9a1f28dc3fee5d7bbd5687c887e8038833b79fc6e1b36ed631fc5b00a9c36e50fe0aef1d318b7016272da4ca67e7098dadab5ff400e1ef317b5ed80c8de02d160b1f4f6425660e41e1281bd1db301525e2f0fe7a688b23653f25db69238c31cd25cec22797e8988d5fe855955e5dc70f981b03a07509abe00203edad27322cf4f28c000de58d9f6707f0da8b6dca9f9921ac083cb2f7d930485b774ef57c6f1be5f9515daaef935d8db4131a95f0ff61040664759ed03be4969f10d51ac588a064796ebd646904df35a4a7c9438b66e5d3cca101b52d546b516132c603a7fa31128e80938e94747ab465011e02d47696056156578259b3332d3465a84c9e442c64cb6f7695fc62ae7e57a79f6076af001d56fcfd830fc8da7e7b21e25202e720dfa263ed270b4fe8f81f13b3c8dc6092803ffd5a339a15dfb9b7e00ab080638ce796065dae4bacc8a60dddf1c8904bfbd26eeff420932ab1837d3887e49149ef1128df4e8827f9bc2ca65edfdc1cb17a88763d51b68567de503d83f06abffab5f0dd5736613ac731e09b1ee47ffc41bd16e87e0971eb5dd4a46b6acabf67067feb25f6bbb5fe85c8664ea6a610997d2212282a71ef2f8d22f4a9458d6f10edbb74854644f2edc5fe22238e7b5a7eb447eed7bb219adc7647c559bc9ed65820e7319dbe48a482f831a8cc2efaaa3687ad1159a8aee17c99c19b0f2895a1a7308186b1d75d4758ad117eab109a8c4b77b03e309b607f8a781efa3c32083d88ad28f87429e957c954fbf842cbe17d1804ffa9fedbeca18091ce4753314d2676f73c1b571e83526f707fba15c9460936affa091712ba13f9573e1706cefad8ec9f3953dd2d91c3b5901b48a6915e9d21e92dc01ba84f334f691cfda96387e16405bf2668efbb2836244d0887ac91b5544109536f35128c0d27b94fcd878acc87db2c279cdd660c5bbd839e1b7375ee68382b579421ba8abd23b1a1e5b369f6a2800ecbeb6f08ccb0bc5d5dd49e71b4b83ef2312cf68dabd9dd7478847fabfc4e94e587d72d3a05bfb138ec65861b84ded5fc749c3c328bddc5a0581c34d74a066a3eefe2807023e33cb4ae20b2e9fb469da896546b1f97536c93b52f7b526c44a07968801121c3c5af5f37b8bd536489e6951b07fbcb6ab542ed1440cbc3df93b823865257e541c189770d700dee7d135130770976bc528dd90ae9d2aea2107e11dbcdbbbd314a817bba93e91d21916d5e193eeb6468fb47af8bca578c63ab6e6df0a33ec97c3a6fc6886fa663733e027d9dd7202d67c16d36de2a61fd8f1ceefd10ab5df54c8df72a7ef52a8989ff7d306ce44a6a2f5188ff708e647a8ac16a7f9a5a8bd918d1b1f7fcc8d7f7ac423806d4cabc8336080569e16ae16bfd457b361c156add77921abf805f412670a2cd61840f1910f2617d26bf546b7a4d259be114705d8adf4bbbf1a82cf8ae6d9d97f0e935c28c0b0a5a9658bf650df0ce46e0f20fe659b66af03ee2c660e8099f320572b35b5ce65f28395c1060af9ecc06b6532897d2937c61e7be900c7bbb24264fcf2c362bfacc5090180bd0c79d9b45e1b67ed48e0d0c8b9c9a2e6dd228d8ef004cf50551defe8e2b3ae657fe73b8aef37a674ed47977d7be14061773a909f6f77a922b66f9521b7b334448acc7908c5c3d66495e7f5ad0dcaa9b7bd8d243d875d6a82ae3e06393007fba256aefdf789c6e1066746531f168cc730d8a2b22fe0bff9b86511a9f8f4b9eac90a182e1ee249aea28cee179c3f308016f001a03e23a43e0c0270e825acd1e800cf8f7447795325802b67abec30bdbeaf2c335732f81521c6ade32a8aff55df8ecd9d3738f5ec2ee76d3775d7903b6845b5bf40d306198a2d90f3d8ed964fb6bc2bc9dfba001cb1217ae8df2507b3661eb32dc2e8f6b8618ad027581718c655d2129bd4953fec967479024f9d3f2ca0824d06443b6ffa8e25980813d02ec3a418a99c7f915c63c529920b2f08ddaefdbbabd030921ae8f9460e1d71df804d8ad519534676ff8a2787ef8de62e8c416810f616edb69f898b355aeedb0eb56cf2538949920bcf67a2d8b50fdcd7f2eec6c8565de36fa5e62a39a503b7237628c1d82204cc1975051f620f1a79cbb7bc002cf22f7a84d405bf9c17e56ee76a8ae0ad0b0e5a689869876f233525d184b4fe84f3131abfd6f033a4d71b69223a99371a6defa6c0e19dc04519e848b301dca81880922be650af6c9a0e2d0f9c8d5eae66702d16e9f8a8b42c1abb4a37d53ee62fc23315c2ed4854c6e3a4c71c0cdf2edb3b5214aa8492496e4e379326a8e2a112e17e401b52c5d26f7f06fb6c5f269dbff7e607cd2e636952dce38b4724cebf0a04fb15b92a2dcdde09de12522d3be55bcb6f57189d24fb1fec479b64ef0c2a5d5333fa631b892f5caab174971e24ecf7e0776b5479dde71ea8ec2943b1a4c853f7ad58e3cde0df2f8a098803dbeb9cdb5e85ad496c94159736599fad139c833618f198ffea3ac59fd06db85d0c98db4e6c2284be1c536dd1be16636abcfe424cdd88208017a0c9f6a5666c6f5931939932d4587c3121d61669acdf4256d2eddf6ff95a2dfe18d37a307b0aff68c0ab05d926924c54073bac5ea279fd861e6b35f6ccacd047adcb759a34fbd6e44c0bd8899d98f42d0b81dcc6809b62f6eca696998a802f9a64992d0a19a7bc73de9b5a69c3d33c633891eec9cfac3b4e43854c80ba3d149d4725eba9b37678bd7d43d5a21fabee9f93532a8e16144e352cf09ed4e44b45fb5d57f69e89d1d46b31eb8f5b3989d08826afd83edd3a6454adcfd3bd90128a5aae189812231e9625027bd1bd9ad3acc7f88e3f00ad884453d10a346247faad63434e172d0ac68792f9dbe3f0c9f3480311d6a8fd0c65b8d99d8a09ec906b74bd23e3bc16c5326f5b1df30d1b4e4f6ce57a715b5d8539868e1b359a82f4cda91056bdcff6dcc9162877ab9767b251e2143a45a0479d6d771c52f42e4dfa881206e5c698f4d8f243a00decc8fb7c5f7139593cbfe3de6753284ab00e752a047845d7e45e394017c06be99cea0034e3e0fce03dff5acf90e25d0c4f83210ca9a27534016bed9c9f533213a5439d6344f804d62faad4f850eb609fbbd37929e05a3f0504053675f2c59d91ed1cfb90ea81fa43fc0678e21038dc0bda46a6080f664b51d5753f5178dd536d5ebc41433d43852f8b5c6f14368f77599626d031a08f40205c032ebb9965fdafdf6d9804a5054ea3c4f3e1162cb9d990d5b91e2df99dc67a81f62c38bd23425d5775285c8a91fda68f15f571587eabb88149b983845887682c9860524ce1cb81b01d18d254ad3941d408d3ac24a595da811cc9bba78828f1452ff390ae653f22d1ad91ef6b22aa7b7b15a44ff7f83efcbd7a755eccf4541eb4040c7a4b774749a26dba3937b7f95c6c8490e3383d4f291dade5f35a65b1f6615fd4998be18bfd0ba4bc3a2136ceec909dbeef513d6f6689fc4202b9a3e78134877374d76ab246f49cbe7a8f65d034cda857fba9c047bde9aeb41350769fc716c6109495d9652c459be980ea0ea83b0cec828fa88e7f35250c62af89a681d1ed62d37f2ff74bb8e6ea64d49bf7fe0936b26834b66ebed6255e755dcbfa34a6a3a4e5bf0b8c0df1bfd158fe08e979a7314230713b29aca9d2ec14a67f3b614e1ed46edc936052e0b997ed869babc11ce7e403cf9f87f2b512fd68110b31afd2483a955c2d3ac38bba864af5bb077f703ee009d54a503803ceda9926d8a4c739071e83c943e307fcabe498d3cfc35bac207d690ba54c2599efccce6d4e5c508b45c760aa3c24c73b75fafea641a8fcd774044cf9164362815b192f6fd520f3d0e97e538880c3ab4efe10a5f8787e0bf922bdd92806fc97c3fc09e5b3d6ba5811db8b84ea77885a3f306eb550dc0d2f1b11f0391fde406b65b8e618c1b7f0265603361c58893d7d16f25b5537d51c11432be5936604d7867179f6ef22e28b05a549c7435a1ea8bbd92b21ad34cb75587c57e41086e28991ee2683935dbd539f08958520799e93bd92c506e6cf26deadcb7d34d806de1e34e5a7d32cfab20f9986cfb9dc3c71c42b48a75328904e20b83a861e126e625d165de42ee18228899e27dfab9e2cff03ac04b94f9a00ac0320d058eae747d50fe05ec4deda7c878754f4ada38fcfb01ae8cde34465a6a64e8e95dce07e179ffc39f1322a407036d263f421e9d7b0edcf88ab0d78b00aa5cba992fa47006928ecca1c13593be69f32743024c49d541cec34a61f34a4b512401ace9b6994c2d7a73be950b4f267296e2fae9c7e0945a73793c701c0692e53768851a58c63ac16f43360d1838e7a3c503b78735d450af4794e159c6426fdd2359c2402f994ae4d9d5a887e0e36a8409e41968faa762b6d790c98d66804abf544fe4e98f85051e26859693f9c13789d21e80edaacc7307801765998132abf266d55d751d0bf1b3e1ed80bfd764d72bca1d9ea3aad5ea27fd7345fcbafc0c1cc7649c813cb0896c9877e779ee50b1e03e6bb3299f36309e9c4edb35582f03a4e288428c82f544aeb6af4b40c2f7505dbb737ecdec7ffeb1e90495b20d5e0b1164babff5745cabe0d90e2ca2d9cb4aeadddf522f17159d28603f26112efb8ae8ba76956a855937a95c2eec2eb76f0a1df219cdbba399b4589e58dcc151aa1b915036334a3a7d606edc6c3a32d035067db49d4202067eacd8ffdc5a5109cc35b1c2944a13082bceb7b640775da8dfd87071d47f80e4271f100143ff3eabe451b08dfb2a537306db0a9666340dc5a1f89cd679b6b6913553944f2a6be8dc84f8242ee5549a0f710ddde927e0d1ab2ddf694ed78811a22c12dc35fa00fe0020b17301ed7945320cdfa81b201e37cdf5f55c378874309b7db56e523d5edcbb39f623b36dd8f38f2cd90fc8c93cbea28ce2ec4d06fb81e1acb3b1305ef60362533ebcb00124038b73826b6e9ddcc4cd4520afebdd9e84292ba64b3cf9370099ef03b49421bb139b53645179086ee8a2c126fd9076ddc5b69d05a2f476b262c67fdd91bc5a3ea2436ed74874b37398d7837e8bd75d29b52e534a4ed361f8988c8834dab5150f1e280883b6ee098b63b00e8fa12d1b12d104f0fca576357a10308aa2060aecad05adb2d223418506c7d0b4e2f40e1b19b7cef8855d398ba77867199d9a1a3ba8f739105b241bb08643ce2900eaf6e7bec7d0cc8cccb9bf012fa497900d8f9c83417e93772fe9167a45eced81fc83fb628fdeff6b7a635a27b45d9711d6c789bc92d2aebebd1611636cc154bebf11e0b58e3e13b9fcc2e78b85169aab9c5e8dc559c9d4ba323f5bc216fff13f993d122831728bf0aa54e19d304414c5b4b1132e14e8a7c245d13026e2ed658d11721a2b1800ca983995d2ed348a87e8c66bb46742a39a9f6e5849024f0e041fce3d634ea08d7218f10225ec104e868d37eadc01618f1f89f25100d4b9f67f70161b87f3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c9f133e5f8527f1b184830e07c3458c83a8ca9f9d9c6998760e610668ba0f22e22b656a737e978b246a17840b7dc4091da85f2544fe3e24b2b944b0747e103a4ae2759cb62c2afc535cc3f3686de0eebdd8a5d5ad596aeb7df5b3f6ec3c629f0bcc2b1b4f16490be5656fa1451c02050a3e85f7013455b580cb961ff97d6d19cef16f3167c55a82838a03d7cb109014ade4e7d26718674a6242d574c2c799703b5a2a2426bfc727d4d568dd22d3f4e44dd2b4af088c0871cc63583d70a54e6bf90e423db38ef6c3814d84fb71ed943d930fd2d60c18a0f4663507c22a9cf4d3b115a1c437b9511d31fa40 +MD = 2529d5d0f4625ae701397a41b5184bbd45b840c3fee6652a467ff1a49c622604991157b16393136cd123a515e4a0412dd2bf2b3227dffb652e11a6304523c31d + +Len = 70720 +Msg = de4fbfd553cdf37019f25afa82dc6b9970f4bb1ebbc37f80d3084c88a70722cdc523a9e3c2afbad0dc0221bfdec9a2f944a23a10a0e6a65d3cc52aad01998b3897745dd3cefb85663d78f69f292abee8a8e0469705c6d565677e5722ae725da79e69640b3f595a1a837c5e022aa6c850e3d6691bb40b147f9b595c4e763ba001202b45f5dd7043d4f838e350aae6c7183ead2a04735e6993227ec298209c5c3066e188f76fe9477ce2d10cf27192c328018d11bb0b67de8a4216116a763c9a1bb8b4b67bbf6b6efa8a72614e4751c468749da7a644cd7a4a4449cf2b3ec462aa5dcc56e8939fc13638416bcdf4cbd3c0de06732ee53845bc703e864241dbbac59f50f0a6b42d47183466b1d73fa9f71889effebbb85248c80d1ebd19472aac54c4690d1deabc0989c50abcd5f1933958bb81ceb683c08a576510fd1718593f3f153e34b5fcf40d6f3455122dd2309f68bde46d850f2d134fbe3dcda47b0f7b6edaf8edd6b47f5db4ca6e3d49aa293430d73f6392243fec9a61cdb52839f469ca5bbec0e8d802013ecc7ec58f4125fd9850ba3644899e1c1e96e73d0b1ab11039dfb936533128fff785ac30695fcd0489727f700208f3abc5a4b3eeb6e6ee79a4b010d67f879661c53c21083ecbc950e983b3983667e6a275d55a4f8f6552aaf414ec28d4a2f72f923804d4764ec0e9a2cc8137476f1e08186f04e9ff5f86ad0f5475b5bb49f16f45c27e1d79b05bd89a950fd49de844e595bbd8426f9b328adfb8d2049a462c2bc622b76aaeb94124bb2685f7a09aff42d401ffe445e2fd474b872c9eda5f516afda0d6437f301ad5ebc60c29b84df826bd89a157ebfc8fee3a0baa09e45d0835d284043053df90f414beccf04dc8d799389ae421c7b19186968a75cf1f07f8932d1568ba938c49871d57ecd7c7d443a32d7df3cc43c9ab18464db477f227ca8cf69c2b68a500ed99eed694638e39e44d847bf4e0c50b84ab329c908ac7832628156174c3f203252f6f86ee1e0abf639e25da10e3b740c54742bf318f05e5b27072ac6c52e25d995388ae1f8fa32d689ff8e26e5f803015f45efdbe0e1313196bf5c53a9dded5f00c2195523ec24d9a56e6dd37db88a31dbb6e9f60905bd5012187f3082c4c34d2632284adb4cde5a2cdd51192e0376185a35aed3e9c44f5139b0e80fb889542e95e73c358782ebe270caec7a8f5f531f4b50a2f81ba3639f6e073b23d3822c7da08fc9a7c124ba0d2195a47a0a22add12f866ad5072996b52f89fd2f6c45a8b5066a651410b8e534bfec0d9a36f3e2b887457afd44dd651d1ec79274db5a455f182572fceea5e9e39c3c7c5d9e599e4fe31c37c34d253b419c3e8fb6b916aef6563f87d4c37224a456e5952698ba3d01b38945d998a795bd285d69478e3131f55117284e27b441f16095dca7ce9c5b68890b09a2bfbb010a53b2a3b9b3007ae6995ab89b93c2be5559bba733988655fed41017b11af619939eccc38fc02ad6448f68dd7f8053f64a92d5a96c9efed94f0546d47742ef2bf38a0a3d3c4e06f089b3cffb5c85be864bbc6247a53a6c31b3cd0de487bfecd4a475f99541b53b464096fe86a51c88eac326e0069003651bc77bd3bc44fa958021032950228e2e53e3b98323fbad39905b72dd6a9f826fd414a236c0417b7fdaf3b2080271415685fd8bfc47c2c057137f20c8e8362fe31705c0b5850fcae2318703240090674a68f89ea8669cee47e0a8a12113f66475413567ce9f026183106566fbef027880795f623604dc9fa2946284845252e88cef0df7f062bbc7c914195dfe2269fd8f43bc6713a7244cfd8b273b4137ddf4906d0a01b974ae763aa91d68a95f295ecd347a2ddfc1e68e9f4171460638ea413667a40588595ce54e4bec179bd9b314d0d82316d8e9a5dd2e63db2541ea1a36c55b8683eb6549ad7a78ffdb3436a9d820bb41c2bd82e4a1215ecf6972afe04df3b50c0d613cf72745bcd334010a7fe1334a50a1fc321572fe8ec873071edf0f1810bef27844e7fb468400a290b9a7f89ef1ca45035bdaeb3c9040f2adab68f2c8db19e39f218e81e37b02b751b8a456ba6e392c6174874261ffe338a4ca00817c80a74154376d63b2ee53d2c2ac17b41c0c07b89520bd40e51a09d5ab1f4843a9add1ac261b07191b6a6e9571f854794a57c07a2cc4ef4f5c9b3f5a2f0fb2a1e6cf43748320ee0aa38bdd7fce11fd1eabcdfdf186f59fc62eefee268f1fa234aa41574b0a0d74c0e1af0ae265ad742ce6fb0abf3227315de284b0db69c3c9646ac0979019255dc43c60816da71f4c2c525b9123bcce567f0df601e93d908ac9bea98ed43efceb9d3a2cdb9220ec0785947c0bdf957f819207b06bc0890a58cd0c889797fa18b0a4618063c0519818d113b8e5435aaf153f664058f1ba95c606daca6c4bc8fd4f8228e7d4a8c7b8029756aeb7ef5ad1b3ffb032540d60c754dfb00b57702a1f1abf16ef889bd1a05720e3c9ee34348bd02b6be2e7741a1387d012b7f3959bf294a3a1f40a1a2df5793631a712c26631ec7affee7db6351ec180795ccb3cad1c5fe86091d3b43b2c0b2fd6a2a01a7e687b46f2c19154402db4595a6648c5cbf0dee5c9456ffa67c86f862959209ccb940f17dae8ccdec9d4b2d34c60e6d187149434428b594d523f28c1c0471ed9fc591a761ee08aa640b85f86b5d94fe04d0c124c62d00a3d8914c96b31e8f5528f0c2fea4525554b332d1cdc3d3bce62bc2bdba6b0b00d3b5acdc40ad4ab3e76e231a1dcd443a74e1fc76d4c3904fce9230842cba2a7dcd765ee9b094f2a74e7947e22d642b81b2f750be37f3fc145d43035fa33cf33f38238ebd0eef7d313051426355f26ff0b5fc15ef1bdb80d53c4521964777cc0dbdc2249e8347531a36fffee2befe775026f83552aa04825812a074713ff51eb0045d07d53723dc29078a61aa8f10ad68acf3972f0cf56c66885ce337b43e52f1b4fb21aa510b7f284cfa5502f1b07802f0f623ce6936a4c746825532cdd8ce9675a55964f987a7ddac57c1310c6740e49908c176e8509443f31ab4a8b34dfc67f162974d5920b912d0aa8c8007bc6ed750325971b1caa2a2372ae7e28d25432ecd3ac3ab965d1e8d5ffba0370b3868a3bd7bd305ed2c38abbcbcd62884e60ab1b435c6c7dbc73e170250e49e3f61971087eb177bc4ffbd2727d769c2c01abbb94c5c86e94ee4817761b340fcccc263e6578a0e1b5dc999df238488f76848bd0e3db6ec59173f5077232b9c9bd9e035ecd4619e2ce115339856ca1b10a5f97878304be05e5f5d11ddf0c0e0c18f4573eba777b0f87768f51d68b10a559eb454bfcd244b414ec82e72727bf5b7167887ac77d42dc5484c463502413d0e7c01b9aabb48134b0b070dfe4e63c1c59501d7f4ed81fbdc7c488ea7cc839c8366680f03a3bf22c1bfa218492f812d323469cd8eb18504853ae5363c6d7e10fc8572be902c925eee9121b51abbdb21481d36cf416ae82e07aaa9a4bc8e3a7fc000a62e1affc8b119aa0d4e3a9a7c864d75f347d4c0b363acf51e41efd6c0d318008dc768c369028931ee4a727569428a67259c105ded8aba43cc759cee17f24cadadf244217e38874f4a1188f4ab3f47185636bde69e8b7abb3aa98d7d47c6a42e911574c10e3d5b2cab0b44be4b63ccb30d7da306ce4e3486f043882c593567acbe9ac14a21f84def98a0707c5198605ed3d9896386ba30cb76ad56a35429df4ebee7f365bf51a5c19a38d2d5c3c54c412fb238a5cdb9b5b3554dbf894089523d1766d2b9f130aac9383b3472abd2d986a9707975ac330c66148d8a86263d09a0547d25efbe7da530fa115cfa10a64c52c97b127b2a0e7e0b3bd481440d2c4ca0fa96b6ae2f20de1d68221216fb2bf0d0183bcb5e4f3351cb52896a68fd40636593184b9f4b029db90bd6206e73480c251d196ec6238acdcde2160e9dfe609516a76bad691a092a2b6a964da980e5e77c607bc15daffb3c3a72e2358919742bdcbcf7a4b5a41ecc9c0dc860702aebcafb6aca8ec8fa6fe4398b55a6d455656dde5c23f82bf22acd347dd6226a7a40fdcac26f9bb20ccc0ff3b4d72b27bb19a3450e5970720b13731a41265b4077cdc812f0d0b0c1eefc038f75d08a2a517915385b01d533f7c30777e122d2992a7a73fb7d57979da7e5083656a88c84216d0be0c981ef15bf20d072e630511e993045acf06b17ef3f716810e0c7f9dd33decc64e24286c16a141834d7ba9e77ced5874ed173f75fbf8769449a9699df8db2a1ed2eac62de008625e53c27824bd1528208a9d900942e0e55fb0d7b343039d3d2a334284a158a5d41ab9edfc542a8907b03ff04fa3794f0725cbfdf91783f27a7ad7c1c080e0e83b2b1834a2f055d76bd665b5cadeffa1409903a2b7960a59867348ef1627097dfc01d76d0883cf8eb8f5a4549e065676261be06c5b48f750d5c5ff31021e42a59b518fcd9978f7fd9380746335d41e3c2c40fa9170aafb76dcc5732df0d11d1d9d7c99fcd25a4fc270194e582ea2a761c78abad87436571a20043d3c8eda093477059e614fa2676bd322aab9e50c82958c6b99a7f265bad93404c5e328a38798bc6ef5916debbf68313f01ff056c4035ef661f6667c397228d49a5c85ad82898e21b4813b990b8361eb0fc9dec6c60c1650cd4ba40da6c949035455281c25cd36cbd0e5ecf2bf253f04ae31d167754d691c2220a1a14bb8de16a3cf85a0ca4d6c0b6a0e8fb37fe405a4f6e032007acd3da18bfec400d04acf55ae54030019101928aa828ea2f2c99b140f5d675a7c957c282e6c77f1dc8404089e6b0a06b91e236bb9cb4f88c1dbe99c2030da3d24ab0cf933f2223e177066779a9d0278537f741cbf713c2c9423d78351e2f1701a19d75cc3182bad2b15dbeacb70531f8e3cf283e3fabb5811a74e13ccfa16bd05e7c3990667fb07bd7b4ca8586e66c3135b87e74ef036d2e3713492b600b0ea8e1bbaf72366fa1378aba2fa6a1fa12c89e71a9228da1463b08973493a7c27c05cbfa3bf429e909b01acc328290a6d2199e592ca9841bdd321f5f1807df7e20718da653a8d9526650386997abcb7336beb5fd9d8c6ac99eaddbf987faaf94b876975eaad2ad5223b24420b374cae59d2265cd604dba310708def4e8de708c907f897196341e6eee30ce700a90078491ef3e57195ffae8a2cd88bfdf35caec4516c48daa3fb4ef025647d6216019c6917f90192d559566fe7679d8cfa3372a42b6e9015b47f9792cbd40d18c776a22385e1b8210a12222769e12ce3e791dcd25ea678b2dff6483b9b039d0a048813de2f5212067d519b1a7aef41ea05a075b4b2bb079a6c88ea525f9a3820155f7501def51829763f47b0e239e3899b88c4b3ee5646b3a35c0441dd40e342412253f65a72d1733c04b05268661aa8f0715238dc1e3be6cb9b1e6fde9ea858d1fa32246b7046ca19c75e66d61eee2f4d82a5a942bcf01c2e6cc144295c8e4a0d0e9cf3d9977d1853b0d856f20b6806fae3476fe9d76d3b12f8732888219d003d8718cb6b90804333e9a68885d38f153fbdc0f39918b82cc067bf83c195de62a98c2f14ea03573401975066561e6c456438969c1926dbd880e02abd9d615859994667361f9708d405e55e562f95057cb07b53d133abde269a8b3e3ee42d14cb54dc4b99cff59d0a87f959c2d6df64a36caf7efcad4cc7fd5591826f5ea018a2237760a6c5c51dbdcefbc91114a591a3e1fba08450b3a047fa1a7eb6d2636ec44e3f30c3c8ae91d7231434abb18f9262548840d1e48871ebd14dbb7c0a1e1e1b1d5b42599f58003fce6b24f8754471ca107de64b317240d12253c02acc782e8dd7f41ed1136c72dd172a2060286d36c25c031b5afe1a17e135541526e119a804c6314d91ec92f0994576b14b91b1e7317f4265661528fd03517743da11aa9367303b5603f271805ba27a5d2179b98e01c2614fd73c43fb1fc0e4d1ac23d3f89e5e39c18eecb22d0b745baf4aa82d32196d895e153c13171dc8c44706e13bde9098541799a4fcfc9104442c2ee6b4dc61c8e11c88dd415be5b23f2e4f118b4d2726b4de8ee0f8f7d59a5b5e35fbf693c11a921098e675cf5fc67c0def7c6a4e4a4f80a1d4694e25c07ec8ccc8ae9c5f21adc3c2ae21567a744ba46c4eea81e7e15ce1e5d307a58e38f7b4fe4dc84e4869c79dbb30548d640a8bded3d4237822d595fe34f381a53b264e477d2e12b35781b148828848c2950acc53cbe9eef6070c4200159ca1f73373cca8d0d151749351b3eb9f1cc59c165d572adbf514a39d6fab0e11362d437e05b6007fa0503805c214ae9b5693c3eee9748c8c605e28ece61851af29ee3025c657761301d6a8b3ba1ebafd9d79e025986aa16592912dfc5ad0f077ddac672f9df633135eaa6ca72217374d58409bc4518390eef37859d6b11c14f1bb2f90a471da5e071e952be9e3484d14f1b09bd1fb0582afecda5581d544e5a6293e528d2c4c2077a95f8d7fe3f922d8cf91895780399e31e37ec805ac908a1d90a355f1b594a1ec67d03c730c72e1245aab0c5bc7670dfb412d5b6b20472cde592442d8f4fa08eec0afddcd45fab07dfac6cde7b8d7f6956fafb6ba18b3f272ea8ac14ad1c67e031cc61b9375dab76d17a973023bd08288d3cc80fa7b1a0560ad9c7950343f2ab5e3db9bcf865b207b191da7b5389cd95bd74c623333c58c30082413f105ae358b7db708885fc3103068ea110797812296e2f6036e27fcb06b65e836362c5bc60d522208c7e85ab1126cd8580040c886c25b930cb33f0799982bb28b25918e06c4cae44393096a2bab8eae25a81cb82c66aceb2408632d6e3fc248bac91d8f1c374ec463f4aa39a68334361f08119b3c0a3cc6f4777bb758e892726a27b6a531ef448b0df2b3104920c836ef2708b7e03673ec23076fed7e1c03fa4349451a6d721601eb960c373c0cb0773c0dea563e73b9255ac0271709627da7ef36b334f74a2aeea5e79ef6a8cf56c1afc39dbe7e48763841ab8c7d2043684013f6e63cf8feea1ae3ed4f95b5ef20dcf0500b37c93e12ee7fcf8467ec462c8e5a92c8799717bd4d4cb1085b8af6788fa6bc1a0b47dcf50fbd35f81c94f3315969114035fd1c0a4e883ab292506cc5a37910b4801faa8863a2e3d1e541d2df68eb7b35b651953be6409133802ed76ee11353c0e07a3031b1d7e3f50a1b6c9f8586d89146bc0bb7dd1cbc756d4dc1dd0e198d26717ff759c3033d4ed34948d776e2313b2b6605e6fbc3c55ea3d4b179f536c6ce7c5786695fcff7c387f4eef104a88d1bad760b3007deb3d869ec30aa5d1007a0482965c74ee31b3b7043e753f780f5191615a5fdcb148fca06bdc5d80d4f57841f1e1ddd57e6b0a0d45fba671711701dac6a5cb50d0e601bc36ef86bce9cbf62475e35124481bfd9fc6fef932c04060fb99eb7c096732eb5e82851cb689f4622091035cddc5b4fce309c0f41fd00bfd783d83f862eec027fbd125961a3fff4acad5ca578e61d6867b80ea1d853aea45d53417a709c21e361895597934764d1e87b6b0e7a2b6e128cdbec2dc0f6b6bc8a7001f2e4aab9d943961893ca1b78e6bebb65f83b73f75625e25e3b60aebf1044243f2f4b1e5dec0d2a84d66fe8e03a17b472e923855f3b1a158e54224371a674b523b70ec1b425a78ec1e7e87647d5d9afb86b9a2b4fca53bca1ff6d7c7688036cd614935b678bfa0af64e9f8d53c0eef46205082b6f0ab81fc2c5aa2273bed79180ce44b41d26ece54b94faf5ac023ccb9640d54e66033286172d3ffd134eda6c486b88937fff6669e9406375fba3ad7c7ca2695cddbda738c8bf95d5fb42f2445775c6c2341d51dcf8da41d7e8ac284e3eb52c1d7b41017efe031472d6a10963d5746807e58993879febfce11a24948b01018759e99626a0e182249c4a74060fe9eed52b3a4916b207fafc5c3a13db79f00de0d7cec400e698c32e1affc2d191bb6d75f6da67c0a5588fa80fef82e4603061a060d3d475974c4e98b59f9352317478b02f6eea7ba7b9326ac4e277978aec8530bca0cd6ffd24accc35cff071363c98eea09ddb2e01526ca941bbfddc3e4a02f6b3dcb7d55e4964306239df16ea3a53970f1041c1fc4cc4ce4f21199bc3725e5c0c2f9a8f03e2fe2e03856b2993973413456f241bdecfc33fb6bcd5bc628d24c991437f843418032de25b99927a7ac0ca0a618d26ef02ef653e35382763c3d9a508bd6d9e3913fa95c5617339e70c8125258e82c9790ed3a8af344ac50e3b07573a486dc459fa6bcd754200062175fe8a609f0eecc21bf471d060147caa1e3549ef8a86deddf5de3fbaa448e272dcbf62813c36771350dc266a629d358193ece2ef2bc0d50d2edc525b3054b320694d16510c0453b4d5123145e1eed9d9c3b38a01d4238f31caec6e228d2b6374462f0c98b87f66edd31ef829860d4efbd612a9ef2db8f591f497fbd563d5d8b698edae1ee7af99067289e5def9047e2ff391a77fdd86ef75d264613d5c5bfc2e8a1063aa429dd546d9d95e2be1db4fbd42b9ed7a8d9566248cdb09221ec4b524411f9206715000f73199cddae798abecec11e1a7e4ee40e74b84594c5118eddfe8a2a5f81bd0035fa14e99b1b24579051922ecd08b98670637e8ba829e608ba8a5210349e826c7c652822a79ebe9a150f07277bb299bc1c9778e958eada377c7a02514c1825933766bbce8f9398d0a159a8be8316700387734fe503625e99984033540278e712eb615853bfb45389e9c3ff5a8faedceb35a95c15543ae3ad926f3daef45b777a2cd78648b45b6f2442c053620de620d19b8c35e0a7cf29f1ff79a9b89e1a2727604bbe140a135c3e40f17d8b7a56ec654dae55dd9ab961f533d200076c4fa6a92a30784c2d56ab4678b9b63d416ba004b082447299645c35d41ad911eb66568def283d679a9fcccb3e9ba5de1fbeec3e68aa8a36106a592254b67d7ea7e8b724238585ecee79414b1719b50451ab2170da798f9ebc35e9493a3795940e61693a6bfada42755d992496a67c3683bac05a8a81cd22e9519d19090099f89b4abd0f2cdab31edbd7450641e453fb22887949fd55eb492447e52025b40322eb1f4330eab798c89e50c56e8d35e4b8ba8e9cdda76832a7f97341ed34d459995a599c3e2a1413d61954aaabfd2d96f5b827bb642d3b6b95d58e43de9ac415c2858428856f628cddf97d656cf63df338a7fe45abd341deb944d35b82ec05b044e91968b53f458c36ab2576202cd98208067ccbe34e0e0478c3fd09688d3bc186e1a3dd3bfe1f9a769ad75d43e5a2bbda502ddec90202855aef55cdfe12b8b20f2b9e068840632024651d9b66d50c1926217bdebb73c1d9e6039829b2011f1a54137275388ab2c5b68662b0f76f881281d7014c3937ce6a90bd1ead32dcd162ec35bb99bb5180f3a37b412e8419a94063fd38b7d0b27acfe18863b8ff0a72143e0ef3f48f19402271b023748b67e21b53109c91f06879626ed201dd551e73a6c00b9606326682dab7c194237bdeb51bb5ada77b46ee2cda8f4673aaf38d48b328b83c5f33bddb94dc2c2dabe3e2b4ca2210d3d412a81780c942337248db7391ce91315001839ce9655c3a7e3218439f1f06cc2d022acc0db341bbf3c38d86fb38231f993a5c4930d9ee453b04e3f40312ebdaf683eabcd9c3e187800217f537dbfa719b2cac8313a03ef832dada38be942c9ab1266c5c6d719e20a7730f40d04063c1c686f8bd0a5edaae16127fa3fa196585fd58243d3152d411eaa4e7ec6d0c0b7abba7c5696d7c5df1554a28a87e2913273b97a6d1edce2fd5c9f6167a66756e16db2d971ae57f154c70e079d89329b1e8ec6368bccb7a0dd6b6052f5d4532e820b576e243eaddbd29e983f796d1c1ce558059ee5082bcfaaf4f50a71791cb2622cb123b76f62e92042f931665c257c4f7b7d9bc3f8c2d72c9e647023bc48494879c9e17168fd85085c39c4ae7ed724249c36136cc403202b12b76b52c6615afd99a68e9c520616509461e298fab97a2c6639f0299576126ff7f6e547beef4f4a3550147e540504c19177726bf853e72f7e8d184293a416bff627c54bcd788ff5f5d0595f9783b623fc865b70a22ed4f48f3a75ffe51492e5b754f3a41b8682c6802d47894208963e7c9387ef1ed1a7443f49eda7b44ef0a7e184569acfa090877f6fc5437e1a0bd9baa8dd2f94c4cae736c16a8427db96ce1cc0d877124f21fe999fbad473437dbe5dcc457a2d90a3a51daad3dc6742ee22120f60810b199df477c41085480a54b30e08a71610bc9c469c0d10f89b0b5e6a6879d702e3896c32c1e6ae9e26f7f9817563eb4c67d01b915af10820ecbf5070c9062340c124f67d1e0d7c673493d2f039e5fa6457558a4f005ea59c82e52bfadbbf2d84ce74a4a0364262279b6548c70396baa60ad25048355cceb3840557d146abdd153100dc61b28c482882f6c4d07a7f145aa8cfd544a2f46bae1aa83cbdb3d21c3d1350078a3af416b012ccacd147a7f0c758d4810bef2d65d56e554285ca3dd0429ced8ee17581b4087271699311163736436abc64c310a270a594d1f332f3e26df35ed72f0c3b0a78cc6d64de81d5cfef9118ee19c6a30bc7eaed51cd94fc3b06412b4c3ba62a0147454604793feba23a69677ff0a1f0882263e92adc9761c155addd54cfec577fbf0786b02ef260975ff3ded7b2fcff02c8380fc4e8e4295ea160fb56b186c96d263ab4d2c3423d95a559055e277ed65f0292e787b9225cf934820dbcaa1b88b4c50559d101d9898656c0647d16d07f891899fadc16fa037a543a9bed82539d3ae491fc15b05c4c51b852849a489a02665274cf29c81425c84ab02e5101d80fe9cb06250698768ede1437ec1f868365e0f74cefd79817cacd5e0d4d50ef4fe6a8c18b5d0c80cd5815b19724729633b2de5148e04f4bacfa70d779815213632b5e0f482a8f3209b1ded999b5fd4053f147a6912cf8ac7abe99ff1b51bf36bae5f5fe6617f774d3a221d26526264e8b28053f4e5a39822a1d301c1c45ff20fc1c54d40da9ac0fd332c6e524ff57868261ff64a8f37c9463201e77a3e57a99d2d863d9646a16cbb069b55afec9f7b2e1a31d5dc77e28abcece4958d9ba9969e4220a5794e19d6f124fd6791a0a6e984ff74771d283a58f122f9a06e64bc257d9013194c496aac5a3ed1189a14d2301756365e9f18b5a08d84bf9cbf1205e2d597ec0d91d12a393084a4fd4ba1780b4faf25f0d4e1db1dec82b4fed22c2d6b10ea09f6ec7dcf2a2ec6e76a08ef2ec7b88a91d250ec111d889d682b5a2b890ac9d6fb79be97cfdbaf56270364565cf1cc49288795cffe2c0c4547c6b998af6e5b1f3eea8ac7b2ea2cb2d23de06f9926058b486515e608d5c20ae23572fc16f26f0352ddc3760ec2417d779e0f9349b0fec1700f43c6b787546eb61c18ae46235023c5d81b3b39e068169598347a153f127c4dfab1fa90cd2dd131df0d57b39db901064dd47fdae11b0eaaa1018c522cdb2c209be2fa0b13d8e2f3f2d360f5be042ba2c381cc4830d4d6256cf932a716d3419687593dad07c0145aec0d527300cbf419bdc599385c2ffda4408e157a69756d2e31774dfcf58dd6054f1db4b2027b0ad9b1027ef1cf86f585c0329d42b14c0f461eef9351899cb851808700393f8bc07131bae62b07645e78607942a66ac1987cc404b66110772bee24cbbd8f1488c56ea461573a905288caa5e4ae0c1260a940b5691fa24697b129a06e551a2dfc7a20ad985ab6f6dc051b04e727ea24c3a210678f477b8898d8a297e15f70e8516f35a1c25906a76b63d8020358c73e45239a5ee9c67342d512c75fc74509e022152c2561eac03e7b258031cba939bb7f9e1d0ffb051021e6e0267c82ae6b81d8fc62ad19787a08a5bab1f892a1b828dd8236ff458be89248d14e7295e41c69f09587ad3b9a7ab255a3dbdb1acaa902e96066a15be3531065668de6939e72e51360f9aa5ab968a815617c6da69ca2d61dc92a9aa073e628e700832cee2625af8bff3738f96dca766f83f204d8802c1ef52d014fb5e61848284fccda1813ab05f4b0cebd8a2ff689ce8bfb55232dab4a19fc79450e927ffab394a952940f59a4d8363ebcaf68937eacd9f6b308fdb6e3d6c800ff0d0173cd138fc74b0451d7e890eff5cabbb027b1950e52c31c68c588b60016e243cbaa1bc291a517cb839c6dc96e824c418f09bf1189bdf9b0076d85524549a3455969733b2aa13d6c2d2d90ec0272d5d36dd013acec86cb7641f57615f817a68423587007eb6a4068b6f1fe736c35dbe3d5014bc1975bacd1b113e78ba8ef5072c1fd7e93345eb543a98002fa0c49e2e54d23c3fa2a9b3254cd4f362dd85f55b3adaf1b77a60d008f7d6e4ada533d7f7a3eae18a106c3e0620eee0e76f6d61aa95f03b32fa0e3b +MD = c8b144ba9b9a8ae0ff3cf8a6444cf9291cb72feb3d8402237d2598a57d0d8389b198f67b5203576fa8f878ef2728644f706421fbc3db966b967cad4990a49480 + +Len = 71512 +Msg = 8a46ea29d6c39408e4d4eba3705a1a0c9415b712317245b790a4fde549f6ce5c6460a2efbf58e3f0afea3de9ea0ba68ca52b9cedf909aeef8bcb3efc6c4e85fa3ebbd87a995b2932adacd0ad28b48c415a95c44296621375dc3104c7b6711a3f607e14322b736eb623402b58f0fcd212fa7cb777d1247b31cbfdd6adef08941511d2de7f3f49bb645cced7530b8b82e6cf07fbf670f7ef0ba0583d16debafc639bdfbfc99b8417249f7f5a05410aa3a71f5f1a253b8576eba269c06a4c30591144cc3e7808cd8bde337a3ed559213e3c33ab9c6efc7318b91a59e7120112b30655c2e4f44ecc1e7a61e80a2d1d775a8d53140738796cdd5d504f3a74c507132c15e837a53528d8e071f1477453b5ff82c6c2e5ea7b16cebf8c7442f960b7806ace67c1f4858ac1f8abbc7c11c4823503d6dcbdeeca19f2c816ef860999cb02a8c6660a470599e2ab5672316e388705f8c98a18ab2e1e525e35e98e0d39eba1ce470e98077efe42dfbc3aeff2776c7649e8f67d896fcdf46a338ae36b09be66c59786f59db960e97d233d3c0548d891de7b4574f054cde2d556f90c8dceed5873fef7a96f7b68e06ed4a3a30f74735d9fcaa28548a7c72485e75f91d9531f7fc1c6893ae78fbe2e981793a978c4e6e2751c3339f92e62c0642de3fbb95ffde4973563326cbc09dbe53435d8a9fdd92846bb20176bb247c05972aed194b92f8ede95ae1965c9f1f03c72b2b708eaf338fced92a807fa1d2b4bfce79bd22a5c857c2c91753c7f2074841a32cefe52dd197dfbb17233d08d0a2415b7e2da7a2cd25b4335d058a63b6fa774dca6f4fc3fd3b32da4ff58fa3f64cb03462c1671497c6121c2b12106edea8cc8d9c650b1bf6f84ca94d7df41da41280ebb04edd6588b78105fa1ff66dbeb1b5e51b67b3908f4da1ca8802e6d07aa23803fefc7730408875634275a8fb07d3c7d6bffde5cc06a9c690984af466da5a49ff9770c0ef2fa763c6acb9a4a12a5d76f4f28e0e290d9b2fade6bc993b53d93b512232570cd692d0a2915275daa6dd47a26b9e8921f4a031750bbe31e8677d808b17b78613b5e9308988e6a901fdc1be7183b603516c4790787fe67ad895d5be0ff086ea9e4df927ee0bdc9ad19fa95fe4c35af931c50fb14aabbbc0965f605872451700f72f711b3282aad7a42d02806eb2f3d74daf57284e17b4afac34abc4447dfe45c8aabf9f0995e7fc13f65bd491cb172a0f7bbc4a056c579484b62695e90383358d605307d5be0a548bbc23d0d0844b6de1caadab02e21b1baa445f51e28e6c6cbfe0c9fa2953889d85ced8e9bd66f71f8f1cb9cfc94175a1977fb46cc3771047daac82ea770ef9138caf09a3bafbb0bb41d25f2cbae30dc2d6b8d46b0e45f54368142c6d3138c2732aed34734bbafecdb49c0c567a4f39fbe2902db11583a20bd2b814d6fa697b28cb09c7fd021d37c351ca5fb169fe90c945862ef39bb89cfdb518dadc353999a0f775529550aaf24893fdb7e21c7988976a1b6696e34d5c9589b6fcc1740194683ac052d0c9dcc4aa1596a34d0438a7f2eac0531f9eba575fcb02e94b3959f20b0f6b5733d03b15843135b076a3c47578220572f2209813d8e39d2ebde7bb38f5dfe6ce23063e6b43815b5de39d955773ba6b44b30b6f188d8dd64bbe21adefb546c32642ce6f4c8470680a083433e4921e5256d6d197ebfa045ebeb0599a7cc5be70fe07bb462fa3a8fc53791a18a33fb86b17d1f5baf48af186f639020976b3b170c3f63f4b8b4d8578b8aab1cbf9f933061638fa30d8ccdfff90bcbd9343ebca530672dcf7f5de807da8118dc67f4af8c3c07051a1ff3c1a28fcbfdea09aea5398441206c3e5c3346ba042208099a18414a51c8e86de655a83c8b6f7b9b24c07a0eb586f47d1b81bd34fb0fc82ef996f8932a22347fcb4fba05336ab57406d311d8aca58ec40199134f4e28465d79f05920785926de0b787ff4ab34bf1bbda7a5ea0cc7639c7645f114e6b5a71e82f00bf825b6e8110f98a010db15c218b204df4abf329a8ce24bff89a9fe16f97c5cb72317819fa03e77c461ab57e6f44cb16702ab2e5c1dae74e4b8804ab977cffd04aa38027614ffdc94f004415236f278e41aba05d1d5408849a953e3b81fe39b9b946e8193f3bc91b7c4cc1a2f660e1fff98d3fd203f014fd5630b0f3c7a20fe23e9a3451ec8dc5cd6e5ed2ba40c076f5f86dd6072e0599131ee8e176d0eefed45b1be974018c706995c4dbcdab14530acebc274ee42b1150452c6437266b631a9f5a7bf206de457a730d614f9dc302a90d06982bdec6fa4f7979ada7407de92f6bd4605e84e9d16a9696e7d28163024b13cbad10666fd06b2c6f1269a7bd0d8d50f83b0bd44590d4610ff3d8fe6ade8b7379dabf239c103dce7b56d0d49f3cbedf5460ac9d68102272c709d57d40f3c4bcafa56a9ec25621d00cdf8f4f9ae33e7767759348c7bbef4c5a9e5a868bee915fbb91b52078fed1f1b210f78136bd76a9afee626eeb00954e4925da92b22b7bcd4c2421512696a873f99f9c12091801f6ac3f9c68588aaef8f134d83a4a36de95dfd131b961aa200751d00f6a888f6adedaeda3cd86c6b6ed114fc5d5caad5439d53d68c1b0a5d30c4956a3f31b701be2ca8d0b16fc21279af7db360d99db5739caad29027a163bf34e980c5458869f72d97244dd3f368b73336bab4a5e6d62062ec504d44477b56cd018ab06b62f502fa651f378b6835d16427598048eb00f3f8ff98eef9646f9d98c5d0282cad6f879bf806981f88416e4a39d8ec4816fa9365cdf299ce60053b9c1e99540ed29d2d163a249718ba5337ee527e222fce8eaab13ca6774ca306d9e1f22f5c9b37479d7511c05dfd6835d4575b9447847a82dde536fbaffa95391e702bd8695b45377fc067211156f9adec8d3d6286d0849fd607a23a69619f68b350afdda3d564347afd2390dcacd5842799de30059a53ad3d2267accf0727593f8968863191fd0536362d55e68564822f822846ec6a4f74b93b6f96067697d56b243c1a3b1776735c726db8566c0d6ea95002eb64c8e0bbf35ca143393655a4df2815e3ebf0394694bacb0154e63b11400c5369953d6e4c938ce5fa8ecdcb8e429dda2767a3ac4685152f770a7d53349abd0506a65061ed40d423022dc55f5b3c8c732fd7b8393ad88b81639eb8be9d5f6bff0bbf8a2167a23a43a43fa67bd277fcc74364b747ec3424a90d381fe415381e29c00a72168262c92e28ecf686bd98f5c0aa36293d2242e98fbd013b2d63cddf6b6cac90a9052886cad65b3fe8e24a7f45ae749685a5aae11bbb20930251c5b5ad58d06c40ba9b7b00f5b508080933a33f954684863d1314364ebeb0c9a5c8a9d7cd9c8f456764afb9cf21da50fcfb6894a8d57da8b1258bc6c00318ec2880c2d11138801ed52b2adbaac83c27824bd72d2f490853cb894db4571655d1a29208836ccdc735cc97f54fcfd2b6f562cbf6f272caaeef51e762e95c20efe2dba983d62883edf0145017fe8666d0236522cfcbb87ef5e40ce6d34c16486c859a6b3cb08c8179b974ff98cf17ac131753f86aa14b90689bc42fa7c4cfb75624a9803afbdff0f3f7b54c81a9c9cd063af4f7cd5a71268c7a416ae63bcd943426ce91859d6af7e3119fded976e5f132f40fc502e07369ebea4a3e99985a088ff3d246268075bfd271fa5ea81db33f1dae6e0a111999800c54a953c7c3bc3beef37c46248a4770487e8e73f6867be051ced76f00ef2a93771e245278a33b54d98e963a87a52a31cba023c6cc9985fc56be139bd94970ccb5b284e3b422217cd82ce6c958b8642ae53f80fe313e18bab2e4ea38a40eb1514d7690ad8427b4da7435369c9eaa3e841dc36ec42e5d7e42efaa23eb6728364ac7d41259ef9b3e9734114c5a61650067fb95b5c0cadefdbd9477885e2c7e47e0ac33d08efe6405daa128f0aca9d0f2fa081b1d990da9de532ab2df39faf82b3a82fa94f5b86b52cc41e2ec3a7fd35c66cbbe6ef8ffa6692b38c5f123da7e2c82d493243625986c949fa807abea5685d2cde66f84a9bee56e461786c5d2f890dd276548f84dd49d5c40e008a8f341b66794fce9e612d79c43dd1066c7ed4ea07505d8cae339052b49aef4b8d8a17c374daa66a4c542dad4d3841858d03069a472f55471a0f0145f85704adfe4fcf050ab978e68ca42b0d645c3972588a52fe4fc804104d77aea81380e4c45730c8349a9e1dafd9d193feac222f595995389a7392c074c2fe06dd9891060b12eda1e697112b42ae5cf7157722a9a70a8425f3754840e11512987aea1fff0ecbc6daaf928b183b84a6d2d677c62ef7e607b9ada730dbf1ae55d1f4aa86363bfc7cd0d41f947af7076fa5a6009525a87660520d9bf51803192851df3c5c221eff40331890a5ba0170e7ee28b4083445265e8db7c5fd7ba1c00a768f220a69247ed16fc198375bd78bd02ac304a7c16a8032db20a7b27d6a4d8ceea8fe2961e8e5a0e58388d1e705a298ca0974ec53651e8db8ccd3dca3a91c2ff8a11331b2d8be2f42c3050dc2184fa27a60775e70e15bdfa530bcb4750ab654430c23abc27072ecf6047f33a36bfd9d8a6cae76904bc2a93ee0d4d267fba6aa4c4e8200174cae6a7dbc69ebd18d36ea98826cbd3820dd6ac451becf02e8578282fcc0c727c9cb18487f57bef2f8860a1346449aeefd16a50407ccf2cc7d538d657b62798a745376f4b1baf57e3a657c893cb8b81b3d08d84c77a2062b17252b825ed99fa5e8c216f0f81657d9df4fd278ba5b6d436d2e852c25b041a54246dd681bb8920073b178dbb70c3eac33bf7c50538f530df9f23c11968a5dd18b3313654661f930c18c0d0382ef125bf43f0abeace6e1b18fee5d9b4e92b3265e648e2843785dad3ecc5406c0318b6f7d48edf20ad491f49b9d6a37b26bea2a38657e2fb76e07dc67ecde540396026d5b6796b911dafc4d8969f26576684b43a5b093c9f6b5b054b9881c89c17f0fcbfb05a562368c8912e5ee86b2ef3a8f0922d03fa5a5e1bf9cc0089f069e4f1c01f8cd9a9c0d5bb0eb3d85878ea1350de13c4f02413964be1b07f8c658de98afb5c109d6b4fabb1c3cfce9857710fa50726e876c0b25c11465fdd3330f26ee434de054fa4b833d139eb065010ad2fcef231603dd81ef895ae41e225587eba26f30d32965de3b544f76d4a27a984baf3279ef5ee7341b200a4be560ae51b1779c051611b9db8783185bf60c52ce0fa3e2fd36f319a02d17aad3e008ce0b0cb05241258866c1fc6c16c4710d3a0a835d5913a96ad54499f2a5329a95150251ff1a6b8e07ed200e51b336f24f90ec4b4e0d539310ba9fe62391de719013d625b66cfabc1abd8431e69629e62de7d1bbf88843a0af2a10a63cf93e01845af4ec78b2553c3b685d0b9d0823b942bf5979df425a4e70b4553ea123e7c6ec5afd3ab893219ae47e28ffe7a1ab080877f1f984e40df91fe9cc23f2da524e22844d84e877e634905f568358fb264ef9b219cf6bb5d53d072ae3fa946513e3e167746f9ae8f9a5d99c844a536d2bfa80fe5f4006505686b1084b37186c83448394f03f426ef27b2aa630997980329758ad310fe74bf862c7f2504e014946cc936d4f88716267010e1cca153ddcc0a1cb4f2d838101415d967991c3c193c5088b80e0dfaa6badf3fe60df2212cb6ca66364a34f55f8b7d3b72e9e1cdbc49464f65062b940035db06602ee649ad48d11bb8e30d7f8cac261a461c3ddd2642b8e4e5c3389e491fcb2ff83564128a0a8803e1c6491cbdff783e8b3a17b27eaf0d10e14d1d60acfe1980552c53c6e88455e55afad2151b0ddc6eea4c5695ed19ad9b01adc3224f5c2cc2201a9dabf23fa18bca878eb2cd5db8740a59e4ce9b07004decea112c5ac06cbc00082909cdc2d5bbda76673afb7775169569a8a5af016eee4b0ceec5f6b341389efddf2aa495573e32ce44f7cfe47c1d30858a62518f5f45c51c44374bbc13fca101a7559d4191dc79970c2f6f2b345085b3724cab3a3b1b0320fac880634ad2b21c69d1e04de95c58d9a92b03d404793cfd48ace2896a38ac23f8c1bd304e8079570de79641c988769d0233b468565efd6bf4ca21055464692a266a2cac88ce9db97bdfe7a698267ceaff8ea96e91c96f045fee8e346167e23f6c0af25e5e86c74b9c01fa02beff11c988860c6e1c803ad06f6051a0fa08be69b2ea3ace396e9e145694f8e0a3dbde41856102f0614b07d70d6793d18510a6b1e0532a858250cb1c92e208c5af828a5ade68b57dc7f47e22224d7c4e6c48411dde8bea0a9ff2f56b3931533b4abbbe1c7ce34d9cb64146b89458339f157538b894daa3e5fa1cc50a31ca01c9dc4f2290451af1d696fc08a14dd1e14cea623287ea8a7d9ff998e20064f539f8cd075dbd2254cab2d0eb6be63300addd51d6d894c9e29fbf062df655b8fa234e85a918acfbdb00b8cad7188e302cc0dbb498d2e6172932cd88a2a6111720e8556cfdfa63b9f5ba70ed87b6a12b9e41ce7a71c785bea85d52e7c09c3d68b0b095eacdacec42eb2063a1c5ee280b9f593c0b295f7aa4a749d58a4f80e193f2a29568dfd54f80055c184f576829ba7530afcf8843ccb36d1ddedb17f9037f2ee7dd4cfc1e925a8a93175d06cbaf1f68edae2e561b83d14402f541dfb0ad16aca6f500ec2fbfb7c4f0e9359abfbf22c2b9c2905a8ea8e87220a324714de63fb30866ea77afdd81f998153ddbee63abc9bb715d5d4541df409e6fec9377b7e28d35b6746547f59f72b623df91fda2a2c71c46fd27e8599ef6a5e2020ed626e8805470057d9e0ef977709c82839785ef0203c6d8801ef50ddc5c82cca9133e37d58e1904885d30774fee078d7a62127bc3997b56308f1f143aecdab32ed604b8d40a3bdb4f2b63014459ec6a3e06532c5105ece0fee4de9b577c6f2063c68253c4f15df197b1b07f9cd9d380972c50ebf670a1dcb3c53b8a7c35cb79128cbff1ef6a08ae2b961ed9a09545374d7c10a1f80223b417d93cc9f13f752701d0c3789b9ec37ad283b6f798b6c9f7279d9b34a0e2f9cef2c9ec40fec1f593f93997d211b416bd53207fc1cc63e828ee38f98e3639ab940c3c50d8ebe3d424c16f42e599d589df7714812083c529326af43395022ec26c2ddb7277ffcf9941231bcc9b7a29a5480608c4fa0704147e637a4f334beac5c01c4e590683aacc54e5e53edafed7f161c8a351399e473172a171584f5b953cf7a23c0d6ebf9ff5c4d0749f8c6b08f690848e2fc391b60977eb8253d07856af79874e9795fbd39df9ac71f7980ae33a3e04706682287b23f60b554aa0eb55a7ae932bfe657f714b5b41834ee6239147d40ef2ff5caabb0755c79144a6fcbbacfe8d7b4ac5929f88525653ad5efe39a5b86bbc013b61a13efee8de4acaf2b044d13fe8839c7e85db46b5881be8e204da54e375740693524f5736e663f4175bf98f6f18b2d4894dcc9f24cba16c191a700f3dc560a589f9c2ca784e970cb1e552a0e6b3df54fc1ce3c56cc446d2e9a2ef504356ceff8bbc20bd78c1eefa0975d76c6c6210041f1da920551a12029bc4dd81bbcdc5fee0c3f09afce571a66734115cc9cd4fcc3975a518a6760de476aac4096ed54e89d237bac8cd6227f9124a87d6c49ba394944f6016297f4061c4792b5024147088a74007afb3e119d954dec1432674154476d16080a4deb25fcb5c9bbea43233e4a8055db7750a4d2f7318480cb702abc428232fc0e03a6bc7d5799bbbb8d89f831daf4748dd84cde4b821a3973fea6ffcf26e553ca53c748228f8b3af26aebd4e4e654acab1f8a1de6b215a4e86d769d51bda585eba8cd4770c026b02b75b942d8250f0a5ba0dcf07d43ff698536fa035ed8ec28de9d1938dcbbf4c1c33882c090398c041c06c61463ba4fedc705a1c06aeb31a30f8b3baaeac56dd6562dc8ec8176442078bbc5e82e778fa84a341e52ea770e9b1b0dc50c1f6efa6460c00c15407dcff5de2a6cfa521e273f7b5cc049720eeb677d9f15dadf2b43025f89bcd931b2a7eac8ed2bb96310af09d6ea28027605409ea3b9dea5ce8cb026bef56bb6f9a73475d58e72a3d5f19f9de956c61c8b1cb6a729d86fdb51f5ca581b9d992cfcee2e3d6058e2582f3371622f4d1af61597b6277c954a1a0e1909fcd1ecb5a9afd9cd981606eb24d348bd0d1517a73d9a18b786185b0db05748e7ab9e6d41cba70ccb1c53030dc866b3eae53750eb51ad12435989a42b5cc217fbdacd89ddf166f98f4093c7ba815e077391028367b0b316d2084d0b136de308bf10ebdceab96412829b74df820e2db5ff771319acf94098fc18eeea56621e9d99d465d0f882230a5d8362b4e4bd6a41e72dc5ae1b89da0b1a01cbec84e7e949249be80067fa282378aee9e2631d782db32ba69b43f0e3ffc469806bff5dd78dd7eddee5e97fe8005c5476e28dbcebfbfbd7427ba6acf2e983a688f356427dee3c20b6ebdd91e723814a962fb50a4a1f19d705c9c43c9b5ac04f621d0a1420ecca0b0cacc4beba0f7fc7c4448983f71995a18d001d2e21c602da88438b61850bf9d34c832f74b516b0728dab6bc8976e17ad34a921e03aadd3ce87f16aa90ece443003197e527cfbcbc15edeec369faef870894f72f15a84bb91ddb1286912964197acca51c686011a3ab4497b5c643eb092174d70dfe5ed22cae60d351055167a70b6302a4f44d924553a95a9b8a9afe8685b3dac1a814981e05d60213d3aa14761bbc5685b5de692973e2df7c9c4750889c19a952f912c817890546d5e37d940d13a14ac7925abbd875b8cd60e4920896ce6decc8db9f889da2b5489e1d110ff459d88573720bb3d8bff3cd4f4ac34e3983794a2b3505003ab8adb07669b0acb45729b0913f3776b3bb5b8652b6214cf723036c84ee8a5a7533b62565afa093d4745e7327e0272ff0cfb7a17010f5275b16d4fadaf077bbd67c984f74d72aeddc173d753f3d23041865d1c5b240870aeac4b49b3622144de6f91bd7aac996e255aa905fe03e721db2e46f9b1e2e1f1b2e966af79f6ca8382c130665106d2c99c6941dd813cb5ea346b45acabfc30582aef2c0b71db67da4313223a0acab343bb73dad89dfcc2dbe5d3d5afb9ae58068f2417c83b8e8d9b87bbf3831886cf5efb00d071a4c2928957ee637d6b97ddaf583ec670279eb059c94200ebfac96b8de3a6cf53262ca97513119b80223745950e85949dd67a5497904bf6df31e13c52fdcc23d792a97c219fe3ea628e0b046a2a9f2eabc8bffec7751031d75e8c9640b1f77a899ab79f0166ebbc9eff91be9124f1e1145ebe138bd0553e5ec12a2dd9a8af3fe37ed566b7008f9e900759c89c96144882391347374a7198e01a2857703a59e07fef918794e5460ce025c1a6fee67ce15fc85dee6c3c0bce15ba2597b6ff8e18a93d6a563d8db593f9eb67fe4aae9238179cdc9d9d3d7a4a3a3190831050c2251a18ce77138244a067c8cb22e2570ab934173db93cb74399f801079e1ee68ca22ce24c4ea93b89ce943e59b958683ce15fd7ffe5ed420e29c9b8e94d3519442c6c2a52618141db8b19cca2263f6abf4cd54f7198016610a619b9b414f5719f1052617f441e0dd04262e422fde9c6f8585efe51442b8c216b7293f689c287e3ea6a28316ae2280ea0fa255aa50a157e9037550d7ece3c86f66ed83f103eb4b9373ddf073a7008cd1359f0b7bff2ceb88108f4149c6befd7d368e6ec4ccc90957328066f573a28b2161ce6d8a3466b4cb73e5bf541872e8a8efb509ca3fe93ff1ac32ed835c31044159d682bf36763918f61ed2df2926115958095be9a37475cba99c8e05a8d5809be56153034f8502d85fe282d3420301f63a336c0a4291334cf1665064a0b58696cf14e63cc5bb987477dbd816ab313fe95dda4416626902dc4b373c868cfa9e9ade994554e13f825206afdb91acd7539889a7ecf34c2369e380b75854b4cb500fd9987831eb3a48dcd406942c8d1dc66d86416b8b48e8f1c9598faeb65f51255e89b885bd2bd37379a88909d0952c1fce1b52c9c49de020f79b674695d7b4a4edb6a276dee8338a904bdf44630d2ce625127f0e88953281d311e626d7621b562527fe537e6c81158b86b14dce3d45a4d9317243be760799c682b5586649aec16ea6732284fde69dd11fa72afa6d9ddf5241d3704e8986f239b57ce428d4976f31f9a9edd8e48aa9cade68e5cee55f22f809499b1f16d8139273e2d0074afbe8d4e949bb626994c1de8d9d8631ecb1f233537dce1b6524843b848f26eaf505b2c13efb950ad32d6d75f2ed130dccbbd96be5171029bd93ce9ab02ceeb81bda575ec06682b86c7c36f7d7019649cba65e0888be6a31684d7819bf612e5b05a55f1537338a547aaaa3cc028016cd329a0a72041ae21cac790a1e78d5f0bafb8c504d6a09b5c646de3d5c3b139c8149be631121d483d0d23f0c13a4313bbd44b7b46d22910cf618418a104c622f4d573bf34ea794523621c8075f0b1c184c2a4f12df277396cc38fb144efc14d719a639428f5d015936e33c836a753f8d4ff37cf30a41565b31ed33637f12d29ccd7cdfd63d0cc49fb95ec3069caa41a5aee865de5638e2640b8011fd0c57438751225539c17c852ca5dc831a5d71cc655151335b2bd3c0b84439be6c5b93109f8de0c4f38175eb09e4a3a746159485d721760df2f1db985fc2606238d68de0ed69fd548ae7bf9e3d5cfb55132cd91602049e1c2c101911626f3d24e7e40f5c77cec32c885a2147d0f72eb5070a0927eee3138890f052d4c831182d03ecdf2c47a278757541658ecb9b83f1ac17ec5fa4a71b78a7fa518999f238a51458c6f765cf6556d706511a3532412e8abc49672b36ff14f794ddd7de99e6b3a08f8c65d73bd2f83810ae9416a3b197275fe9e68b7a07860a27bd669e0e6a7f31f9f91fa7d006821fc743a376d61b510d6a9585cd5a7af3681cbadfe1390c324efed5cddd744b1d1593daf05eb3c787c44313ecf8bda28697d99ceaaf0214f48006e7177f11e7f1a1dc3922d522fc5fd2542bc2148dc56421c82b2e1151c9ec4d79f8a3978e23254b0a29e2e40b0301c103a7b02ab12cb88e502e540e0e744340bfd01c2cd347e29b8572d89256249619ba4e5d40111fa864d86f03af215d20de40372847c89b4f1ab6dcabe7eba74660e0e7726195e55c2dcab4e4fb72ccacb165f56fef5567954f032f04ebb2d43820dc3b969225c8fd708dc69ffae9090f4094d19a2c62f2dbc2d5328aa794f395e0181272dda90eb3b6896ddbb46f5b701336955106d7854afc95aee622774b8429fb33ad490900a58626704032ea0cf7b3b4073b869c680a84a96cbf6445252e82ed68f0de2de6fc68cc99777b4462cea774f001b399e342e27b31be76e4c9bb735677e3a5fd08dfe4e3ae289763a61a77e0174b96b73e1a9f71c88b5f3e7f52849f292da562ad7783d378fb8f311f06ac5f46c035dcc0bb42f5f8cd27398f1b3e2e4677e7421feccc04bf966a9417b7cd5843089af1b24d536e882cd7bf403f286c96687187a46548df4ba43076d4586235d7cccddf5cf75b44415276b7dce6cbc1e0a94d17850a7dcae3cbe9be9f0ff35dcab4d48c06e2e1deebe40c08a937ad96eee183dc0a04f52e51b39e54c0040938e467b9e2f8366da64e8da29cf05b585186b919bc7a7b38745b0557207f612b2eed8e84c8791a870331f33e5af87a545c71d919a11f96cc02ca691a09244be2a7acd03b25d3b6b85d5dbeeb2a0bba271d77e88a723f7e3b426586f1faf6ecb50bead6e8e34c33871d9b97aef46f465bfe5f8f7517235b0d9af605e3d83e6c2cc26f4792e92db97da9b12691a06d447865f375e1771354c874438df88c45f3cf3403cc421fbe6f206a67129b174ddd04bcf943d67c5691f63716c739fe50a827ca6e0dff6d467efbc88703d43f5738896a3aa05d0d363b1e4b355bad16aab3bbea77b1d1bb0f0e932cd7a34501d37e8ed77e357c12f97ac91868f05dbd9a3d13fde861c0f15f4672fc2197f54608d69c6b8da93d74e8757e06792e4fd9676eb86c87c4d5f77f4e1fa22b8aecf43f693a8e2ea5a8194b55c57d2ebf8d535a6d319e1d8317b5b74f2284be2233f4c05ef0a82bd1c4ea6a4126e551481f14bb6306fa71458f144e71040ca107d12fd3de46214ad499cf8c622aa6a8740b03d277c0ea4db343fa8edb4ca09ee2ce8cc011c56154572fb1fbe05828fce85b07e6d2e6d477743d50bdb682aa7b5b33f2ce1ef4d010018f76fde239d3144f170a409b0022b83185ff24292e910119074b462e5bd7487bc008db905310ba4f45f329fb973bd89221ee0b5dd9bdf8c5527e706883dcc26cca4ddd133145b490efaae71a32879f3e1b04b9790a9628061d7394f5f349477db62f4a9358dccbbb1c16c21f596ed5de7b2b78a64a8458856f12fafc33849f568b956c37523bc778d521043294584119474a8e0c20ef52ea5043eaa6ccf7929e51668928a5cc706e21b2f37d6cadac98894844d2143fdcdcc8eeab1b4508e8fd108cea8edcf58e4608b2d92568d5de03480fe221aedcbf03e0fb868226 +MD = bcf7e3ac677b340318080a6212387096153ed60c24b1ac5c1744575e7f94fd0363d2e0ca6fa4d7445924963aafb47cec33632399c3533bbc144bbaffeeabe46f + +Len = 72304 +Msg = c84f05b80fe8318cc378c25a1c625cc08f5ea853abcd5893414a651ec7829b23fe45581ad3dd91b2839e150b03be16269f67e59ae10bfd88b4f843d0c92c8c853a6a609f6e8dfef03c1d9f5a5320ff3ed9321a3752d83309c4121bd4182fb08ec4e5a4afa7a1802e341ce8add32f20f184e8cf94c6dd03feb7c076917c341024e3dfacb347c11f54b5c4766d4c948025eab08d1805c2744fd62cdb6fbde3b230e18001111794e44b053cd30387f627c351b3da2bd62e8fe4697bd2d6a2e3a09b04ef2a33dcc3d6f96cad87d549fe1eb40219413502c95ba5b8d8e32ef5dde24b9555af7f61f5fd47343f184d5d546cde4509479e523ce07b0a6997df7c787e2adbd9195f6dd3621da31910d28a9f192b62ab76cf8b2f264ca9567551005d7e1f20a4ef3ac7050c640364f7cb97872e82a028552e78493602dbc806ed4833e911aaddb978383203029a4753a24db6b2ca48a86c24e0331783e9e7d0191ea3c8eac3ad0080880250e1b1ebaebe74d1adeda252441a8a95d1b91bda5d3e48552291b13c4abc7f1ffae78f788f87d48328d2f64f64763f156d8ab8ca35c58ff0ffeebcb12293e42e09fe7e157f65347129618cc754a1c75ef2e00adede14bb1d68e92e350d6d81da860dc4ea05c05d46bb82abe19d04ea1668a2573fe2959483636a4def95b21cc878fcaa20a90018a8e31d9dc5c60670e6d7b8e814c9afe1cbfb59630841cb7ea3e7b378dff38d2b40ab1aa89c570e20754809058619c96c9c359eb6a7991e6f11dc19764e6cd05eb51a61158ed986c36cc27ff5bd5c4dfb9f1b218ef52614b7ba5d18ec969b2f7baf38db2cc2d3d521724e0102e019a2577bb4cb351a6f161d48759721de081348d80e6e3461cd630230f3787217d93048d90882f23dfd8a6a60297f5e4f3ce58fd5a30377924f982e4db9ca8e8c235f9661202f0c8656d966ac83b6eb11be0b165100833b7ee2dc6c72a8e09e647f9708ba03bbcc1e046cd9d48a25104b16efa6f22bd4c94c0d978647c9a2eaca7540678db90c7a2d8faa8b8046b41526cdf706602ee069255931427323f8b9e48ec27b814b0c5eda7dfa4457c04c41c96a8d0044118d62314d12699fbecb55da51850c3fc0a1bf4e58c6cb01ffd3dd5c75185a46dac5fe9771a2c372a30104d547f2e26e20b5e7b1a775e9270b3331097700dd0d936f83804d4a1795d9840ffdf66fc4b7742f1c2af36f6671ed5285f6f7ac514243733a136a702faf683abe79e8657cc2c3f7a7e1c31b0a86ac1a214b7d867e8cf3b96b794f7ed169590d5872a53dd03615f5d0ff9fe39c0f50714c3191f52b94aa285ed984dac66bb3e4270fb35d89bc7211deac0f2ee6b3e24150d0bc61220270aa5a5c92eed55c7ea671799c2f6ffbe3331b0f9c65ae1b6971734f8532297d4d26a92a0020c8e5c33d7fd7e819499c6f43cd51cdeebdeeede9fed675d109ad4a85916a56da66ad899099521d85e1461f293d992b32dbd57791398f12a48a3b6ead5b451d83765dd8870612c5dafda2facdb3103d99cf780d516ba0e71473cfc2874ee2dc82c19cb80a103e67806657081776de8b8c637eba11dd31798a8e104cfbb46a1b410f133201fdfe8cdfe40e51f0d02a9d715d9083b9d86b526ca1a716f2d304622727694d54167cbb5f3e6fde3e071cfcb186557231a275f923753b2852f5d93a9cd34712eca3dd7c683e21b6eb64de2fb5a6768e618378f618d275880560102a08d95587afec4c5762aacde1dd2f95bee4859adf31c59cd2b27ffd40f15cd2bbd4023ab68638efd5b54b1a68feb06c32a5ea6a6e8aaf081458467a580033477366169fa759d1ee7dc9e9b152342f8911629f8d425288e54474ed95d6192b96dd27dd2b6111fd72d8064c39a769f314e6826aac6373995aea6d3df5c4238ee87e7f1f87ec9405a36cd53b5b6f844536366d146fdad32a908fabfe422908a264e0d7a35a50cc31a8c49c7fbfb36d6d168b8a657dae5c82afba96f8260eafb0338a95324d95a0c8aa65c4e00c7b0cb3de6c43247fe7f4ebdef496f2477a00ff7c04239408c4f714d0d9b626ebcd495eb362ff1b1c8e85ab45c413b64d75e3d968d7e79132e5bb5b43a7d91903b30cb8bff42710fdaaf60b0db2750ae10840841f8a4bf073fed3e62a579481fd343d072aaa21ccca432f535e4624b7ab39ff49c8a5b57b751927fdae7151258058c4941c0c56172a6218cb5f098885521208708bb08ff8dd3d9fe7f77e77ce352889a7bca32eb8c50d99bb3982093b7f9b434191344030567323ee2c066e44c3ab748832f61279444f9a6a133a10a3d9db990402b930eb86c29b58758f9d4fd4ea6e7ea78d68204f2d032116b7038309daf00006c5c7f11532ef6efba36eb70deb5dd243f199768db1bc286a834ca4b6a0327ec3e26d09accb0778e6c9484318b82bcd2da90e43a7e2adc7362651ce893645c664978afdf396cbbe5e8a93bd9d59beb48e3d2e4f44c8bf46a2267cc829a313200f6c8693919a24878a6cb8eb43d400d28d3660610d6cd8ecd80d345c40ef82d4edeac9942fdff81d92f91d95b333d76e531b0e43aad5e102fd62e05073237c292598bbc7746e31c69fb92b85957e2dcf07749fbbc20bc3d03caeea6d6c45e868dfffc5f6094eb5cbd9334a8290bbe93ed2ca7b92fd17649ebb78b97bd360adda45a54de795876e7467efe3534cf4f303dca30a900500aeb4a248b5424f79b5c47c14bd63c122420871755cc1723033664c8ab37c7fce88591aa64689899ae771afd47b3235261bd1214e1f94aa7891af4a04e11f168ad9d74b1bd41a29ca2b28046bf11c989be0159d0192949bd3f525009bf942703b8b745c2ec7bbd6126930a36385e9928a791d0d161f88ee49471194d664ab35e9857975688735387889d2b544a160cdfacd319a152d3a4ae26fbb2e3d8a230e9caf2ec0507c50f80774566294ac4beef3c6986c87237058a7556bf759d371a35df1da626e0fd3bec41004d1dd0e70a07d4b9caaf46bf3c09fe16916b1a85f9b3333c6864aa68831b946232ba62e9789a145837ce26c8b29d2fcfcb4ce6fb39e275d3b526dab35faedfffd9778768a51669a960bdb8eff3b498c6ef93692365640577fee5e84a3c16821d83eda4d10a1d5331d7f6639199f0b7a050c7377b0688609da83a59b9a2d3395fd48541bf021f4f860000cd59ffd20af0a160d88e97f015c9639cb56e2e65544b4dc6e49f378cdd1a6b453ca5afc9112c43e8a2ba841ba36fa37571f4295d6154522b13de14e68a739c6c6811245658a7dad74cab756b8814da6d15d83e2bfeff743a460824dcb605f5cea608f80a4017b8a52ccdc670323d8adc1776d7417bc1367d01a9d1b00e6619f49d09854575e08fead99e01ca406e375b0d7c8f4e663e1b5bbd4fc600f1f87b66a3af76985896a310c998a1ca210b52626e45c0934cca956eff465c5fef518c9d50472683669e94af734a410052b98e7a906f15c0adfb372f4e4a1f1d74f5e021398d2f972e8cf72f6d2f49fd63ed2e0c3a54e946f844630500a788ea2149f87ab5cdec342ed62d092db44721c30ac3afb293c5a6ca3acb88dd0b141652e248025ba606fad61ec8d52b75a30dfeb6e1dd9fb835608242b33329d16b42a8435160a191ea4bc2ab3d0bfcefe82275660b0e681eb2f4bef0cc9c8d86d8ff8fe1970e0e0e20b763100c25f88fa10fd59ca1ca9243c8e3dec97a1d6eb7f79d8841ab83279724ce35e1a8abd4e158168dcf388ab4c3d1ae70413e4e43d141bd0fe7e13854b960e0b9a4b525e86167e71c7241d7262b77c501dcab97b36f41deb548eab63be18f9f7cbd93fcc9ac6ae1f02a50388cc725b80200249223ee6262e6f92a8533abfb6aeda0d7b8ef0edba7a76be6175f4366080f604bb61bdb3dea335d232de2752ed38b02f2e2cf253498a09b75fbf40cb3357851838c01b23ef518f956f8aed9a459e33877f2e06bf0458a4d727f01af87b0db785e8c8c0fefe4065258ae2f45f67e74d5c971d96fa92eb3067de8fe986e0ab7395f200150cb679a0c8a96ba568fb1be5f89e8109cd9d4b93afaf25153e0c38a08e7ff08015bc0326c7f5af667fa843e3a1bbe0c7fdca81b7f7c03906e5a4bc28b9b6216ae0bbe6e16a9535a06a16652ea016c43855c3948287395323465340f25ec01a3c36592bb8f8b185bcf2ee8cb03dd8b4c49c308cdea643fcd628bfcae6c5c4635cdf3ed992bb732820dfd8bd50bf2939d399b872b29e06ba87529065ec35eb8534a313f859f901a536f97b02f67030dacd15044de6b5a9189c8d6f16ecf85d072a4a8091f4fb8384650880628a96161f1ad8bc256134549b7ea104e7ce544171a89b2caa4b09224e14d38ee6f57a029022aa87020d6331cd9556f6df7a92bf4c155fc04e466a058aad234e941d641db64d530dedd18965354974ed06d9f9011fd95ee382cd6856c097c06876eb9b8f18049af7ed95ef1b5b03c29365d1d32c725c603e50c8493a783a72839447697f3ead49ed0b41de79c829098d034b666bce052d79bf1f56db3bfe0147f41a1415b1b226964ebe9ca703251186e930fce4b93e8c3bd7bad761904b345ea04ae57bf879fa9bbef271ce945da2241d66dbbfbd6f472ca18114f40089d46da0c124d69b6c8ca363c6a716043b840fa9d74b2562fe24f5245d54ba1220a91ffa65195123f1a657462285a6da257ef09469963e2f54ec3e6934e1de4e787b19b8200c1117720e5f6eef52a79e855a6fe7060331acd966ae76f001863cf91206e2d94441ff568d62e3135740d9c2de33a995d92761f55cee5577fddb650c368c7e780a076405eb09ae78dc9a1244d3e5e2fe6147d71194a60eb31d045017ae5396e4a68bcce7f0fbd60428dcd173002c9b29e3ba9593d87da78aa82985844304310760f6c26464e063a1852f9eb72fb1dbfea6a723e5ee1b2ae6e8748db9bd4758c87f70cbe40e625e3639bb0278261caa65f4370a6d9e299eae230bef20e4c3120f4d2071cfb727ceab8da7841eae1410461391d195b24f0ccaa216331f7f2167c4102f3b8d27d7bbe8c91cad118f4116894cdf00c4f0347b21adbee22058085fd011c5b186261b2dd4354103b9914cc316e74620612281f39d8b2a838a3521031998085c227c9b2d59193f107f7cdd20d52cf0b8d60edd7d2586849ec5df145a88ed23c3caf0fec25ebc3d5cc9179b33ae6305508a7df11fa2e4f1bb391e886c05573c6fe44cecf5cc67646d002b2f068ad3ac70e53665e3faee9b634eb92642791f7ce6da560fcd8962dccd8d8040a14fc50ea14f03e0d116ecaa1d6c7a95e3ca8e0ab212d70c527ef5cc04d6de770ae781536a30aa0af0de264672fb277d57e2ea0f5af6968e8c93685c98450d7c4b384fa254f0f48c483ae395e9638988a7a77bb267ec5d3b84b102b61341d4f66c2c7723e6f7a90ee1136dc20a0c685cda038b1c605ef2bb41be0cfffd31fd8e73aa4000a8ae9137c44f0af35d5e8ca1f8dd6074cdb31eb7cba3ce62dc7f4eeb6a99f45e227b73b0f8d803516bc2bc000a1c43e33753a9d72b4990053a9290b658e3d968ddc719208594a003bb9ec22017aa7c9125a65bc268979a109ed28a96466f374360fb4930746d2831d55b64ab276e53a51f14fc218a7433ac91a706343b25581a337dcc88cc4ae50542626b4643501047ad05539b9acaa5019a79ca373fed8313dfb76acf95121da5891a9e9b7138faa158e129d99e80363641b0a0485aafff56eb0feaaed7af193932eac752bb0e5ad8a7104682a17e2f730eb44e0f9553150cdfef16cc9b0821eac63cac1329ba781723fa723fa8acd8e28aee9c33f7c10d5d44beb4d2e8057cdfcc771785c2259c84520775b8bdf278a83cc4545d89e22f70a0e48d67c78e7442cc02ce508e350e47bea01694e73858f0ac9f3c34529cc26e7ec969343f8b4f384e47991d95d31589ef2b1e7c2f66c1e063e81e615ad8107e63d510e058e456ebdbad4294e0e8fb726c1256179b64f9a0e805c08ba97f5fc9d97049141a82d183fa9c8f5c765a0629bdbb830e361a4859c360ea5b4877f8776702dd788e4b0827347c4a1e5f137fd76a9070080570f8337d5f66783eaa23af96f395b3bb28420010b63981a4f9aea3fbf7e4ae124f50559d6cfb8c93fe2899ecab376eaa01c93616b0252e4cf6dab6f95aa6a8649d97e8abee703c4f5d4e5ef3928b5061bfe3f0ced3d5cc5ff14c37ec207f9d03441613304d8e327baede2633105b02ea48d956c1871304e6d14d4f5ab13735f82a15ffb3f01d161fd92018338e6d2b4d86f3927635a57ee7802326cd7596194a39dbd3bc41e58f41c55c5d7b728a74906078c9754354e16de516e3ccd464f10157b2b8d3a7ad46eb5cda1c93267a85bdbdb226471be8d57de870afe0366864266ee0d6818a3fe32485e17e04100505db87e7ce73232904217177b18f036b1bbf65ae544d52610df528bbab549af39df3a560ec81c5df136068751264a335bed724645bc068dc6c642eaeca0e2b0bf40cff65a6fa68d1ad43b5b0f9e47e8ef473934a12603277a97c7d0304b72a16b32e7d3d246573c878d041718f99fc3e659d9aa8a2b819fc6c42fe0280d901dd816107328f4a508c1c11f2fffb0a860cba5c21c5324d86315cc099f267fb172507ae858a0f3166e5420eb1a466bf82c19bb910eaeba9dfe022fd371de0a6d4b9ec1cdf8ecba31d9b92ce67a6f8415a25afba4f5ff5538dcf6601bec91461a060d9b4fd86ec27dd75b359fa4ed81774009f6ac66c77d3f9c7cfd5183f2ab4e3e1767dc7ba99460e3c4eb754e42fc93a1a12ce5e5999b28a8f05802bc74b2705056a7f2671fb8718b80af15bb024e0123bb1f0fd6d8577a7f1b10ae1a89f436e945ec200f53a7264b1900df9f9e0e3662a24d78cf160aabab37b7c202c4d8f8756f94f3f8c7d8f58ef871615098b5a9db0128bf42d55d32a9e0addd2997e94b612e42dc97fec675d39981196264ccd1f9524151b69897b5f7a0735de3859d86492c6648816b181dc596b0866994bc554a1017cebed2729c10f198c2c5107e5fa9c48fd6298f1653b15a7026caab1caa49b51c84b005566b824e9eba42caf43def912ff414fd79ce436f40890a0a662774dbe0122ec3bb9ac831e592e107a787a71cb720c8188ad3d84fc21bac55117357dee305af703aa05f261dfb247900e35cb1b5eab772f20b0c66455d25fdb7046f4895dda6ad2c12b3a5a841817188d76d1accc0579f27ea3c6d7acc0b76bf5127a388e8a8dd3878623b05048c93a7ba74923c304cef94e804afb2f6c152a2f02d7a3cd52a72b837e740c4b2aa420622ffc2b4c8fc06d18ae1b78e5bfc040a57cd271211a02053e7cf7157ea7f2efc976b26a6e8e9576659501f7d79f02d4dfe9344a93cae4873ee67274f0a5f9d239e4328831ea963bbb9dc3200bf5210e66b2c5d8294a96d90d26aed0a90d03ef39e1462e9d890be5a52e2b9a8baa6617c13d4dc0ed82602433a273d2b2c8566e51d5b404bb543c9ba8b0ff0e5fa4191778f494ade75b899036c4882212bd3a78092845b1923370864e8b08238dcd8235143e61451ebb5b44a0f3b767d1d3f935ea42c1de2a0ff1ce1e270e821f0ce99a1c827e309a8c1c69f896c649f8f4dacc7b8bf0328cce059aa0edd9d21c48956e182ab11763b41526c7177e728e072465446c9a56bf5af5125d4330bc8d6bcfd8919dc3a2821d8ea494dda7879bf3202ace4b86f1cb990960dc92dce8795cdf000e437c78feadce0ae750093328a21641a0917dacb97588a9a543a6fde8030d0f1784a342df4e1f8148d86b1c3bfb4dd243a7472f90d5bc1841bc53a4e348a12d34c802a72de7c73140dd97eadfe60f063df3ac2158a0ebd23767ae847013e281ee775f50f15f0f4156c75346194ba20418df742a1ac05e020fab7e469a4c1934ccf983e433a03fda13fe68d8f3124ff55bd266f3dd1c5dce52ef8a9166db8e6d57b6360cf9919f23feea9e4774245e018f344b24a99c2f5e879d9b0edea8895515173f704d1a77459ff4bc3ba467174f3b6ceb6586281edb361c7964099c5214908268b736230e677e828c5e8cc4c208e7e40e5c7da8706de8d4ec3cef9d30d15060778abd94adb224fed4553323a6531c037cb495046e3b232dbc3e99946db5db1a3590e8559c4e18ce5dcba26d0c596031fc13d724606e728fb0110e6a4fe7bb166a72c14f2362e25cef66df883c423ed6582249f18e2d5a62925e56051f8f78beded750688a160b0e52cef45e7e353b5a5688f5513fa1650e28cc7a4f24d7987958689c8918931a4e4dace8d61a5ae126bfede32dbdf21afb3b04812fa8e5a5aea2cdad9b16019783a9a8c4d757dab7a05afb1a6e4e47019192ad738cf1e127c782ad8b84cc880a142e698f4b7fdd4531f158a2fa3bc8a339f770595048f4a42bc1b03f2e824efc6ba4985119d88a14414aac83bbcc9f875930f53a62f546a642277fd07f807ef5efd3dc1329ab0aab392fa0c59848f1365b06e31eaa40feb4747bc246610d3e7b0883dedc633f85927f66db7178f9e936a541e30d10714457298720a9bb73b6181e7b46b4afde22527db7068f4525ac11a1a99c107ccf4215c911420274f810539984bba3f5ce09729aecc925e615654eb505b72ed6a31d79bce2d05876e571b4e266e5b21d58637a3dcbcb3d43113a764b1fdb70063500086ac271b4a88203c45fe96de80fc458f3d01eb5de44605310cabdb1dcf4cd114c3c78cd1df216ee0a79d4fb4eb35a0f64baab2e11d14cd9a49aa8e07d89b378cc98ce8d9b3ceb5a0f98f136eaf162b155633bdfddd21bf4bb23a81158ab2e5e10e78a59366e476e592506c7c6b223654e3395704a2f16cbdccc85ec774388eba19275d8f77173527286dc55eadce654d892838860d085878fff0618e13a074606ff57b3e52bb72fe2253b895c59f3a57ae8cbcf289db04f5c24f43e9e76f498c798f89209855a2d2f69eb0b260f9281bd9d36efa97fde4ccca11705b7e197086dc41f1b6967a673e3b9b38250e80b1028198c8deb5c59a666df3716336237bf7fea96f90fbae12a857f5c97e0cba57943c49554f71e6784b2461c181ae01de4857423d2036454799e22aff1e09fa9e5960718e9d4ab510e393f8db4744592a007c98f4f4b4f4789b50a7139574e5f7baa48dff78aed5f6e823054924a78dc1b8e51a117f1610181529f6d164ebf0f6406f0b02422cad8c916823759a361437ca17423d3fd84cc8afe486a31ccda01c732685418a32c064a7b9effb288e811ecc99adb2a759feecc3f702f31d9877dcdb717937c15fa2f163bea744400f58c928d2b93c5639ab06ea07c85bf7daeca9e1c6434f8811c9c58ded05db81370fe97758f114bce5d5a99a6d53483c1373161e9b90133ee799536eab783b5c941ad22092e1e65bfcf3474dbe30424ac0afa3fa77dc0d664fb61d8e907afe42b50e25cd27181bb3dda8628c60ebd4b47106d5fdd173a88eb894a676227a7ec4085e46c57be04f4506597dcefbf269f992fd1ea13f137f28c0b960bde81337711c9fd7b207e6db80059b0b9df5c08c9aa507007d1727fbc4e6a8eebe47c1d2aa40273b1b61a85b1569c19e71d4f2b70825c90dfa002d98d3a8c7a30fc802caf031a8f35a0f8148559171a8d31fe573d2a397a9907090e0d565aa201aef527ae36f799306682e2dc12b2fbd3a4d354d7a9d1765e8fefe7e5acbc4d878344d7ce4383d9c9911fb65f875603e2fd34e9e8070acb56be1d29bd449bc5ea02d304b834a49629a83659b5c2e97be2c48be0154ccec3a81ff99f3c24dd5051b40b751411441a7733319487cb54abfb823fff088104a47d37ec100b566c37e41f54f489e04aabdcbb772d7da880db53bdb80f69ae94b7fc905f43d2e22ec2cdcd1747bfab9e9280c770ec3e63545315005ed7dfd965444eb1b80138ce0d383146ba375f7928178adf849b7304b75a67d09921130c61939a226112e524f0e33b10a78c1153d081238b1b00c391933a71b7d1b3ad4e6feb096cc03e82ecbe0910b5440e7c407e1a72549de5d714cf395c3c6e5654a87796c3163f4db72c61f3dbbdfb8549481a28a0c17210569453a050e8d8d2b02062daefa844062beec0e9c2ae33b81f738cf4d45b0249e91a07b7744177ef6ac11600b5aa39328739c332ed125370a7cabcc637a8b65a38add3c5f1d1b4752a907c4f3ea58599721652188570c575895492e6f132f40aea559f14ef20f52b97977c11b2219003958b55e1b251f08f6c19f79b29812520a81a53ea95b4a3da5addff8c39a4c23897a3b4d69b3c3c86f822d12e071bb2651905d7900b17274a1b6aeb0af9b883ff2263573f69b91121d6760ae7b48a01a1e61d134e7ad1e74381472ad11de43b22dbd527644350d729ae1d880e58567c9bb66bef6b0a684d8d347ba229cbb152676c000a8c528af667272035eb1a058a1d32f55431e266c0efdd0e3d5c2ba530977dece901beeed6a0ea86f7c6232192ed02c528e62b53a7332409e1b1674a3d7ab5a2ad09ae05e09f9f57b8e69b32fed4cde355d30cb56c1fb073786fa428e2d7bd293ced4a557a2bed9c5f94a9be359a3b55c140ae16767c2a54e9df0dc585773c8980f5bc680d0b7c5cd418754f9f07f525567438fd2d1139b41c49c7ab9023dbcb606829c60208f59fffba286ca4e3a35bfab9d3f3f9a8869cf9f5fd6269a142f6c390bcf5bfea006dc8c2ea9eacf5edfd9755a77f4207b813682ad5707ab9181293b39a7fae7944cf1777e26b1f0679151491db2970f778225131775f29350628b71aeeec367c6accd422395e65def2aa59b59879eb406ed09c520cb7e0dcb33e170ddec2bebd196de70b16fce645fec54e0905f81caa412531d5bcfe0675c85f9bd3928bb002fab9387aa2cf0b03456ddbd54b2d69fd9a29f802aebe02c9ec902bb633ce7314b5b8afb7055e3adf70aae86091a03b0020e5da210b7e3ea0c8dbaffce9146fbbf17235096631dca327845df300dafb7c7c60bd79fac721c103470feedbe40cbe56f0b0baedd15a15110422d6c0620f3a55a28b53a42013f646dc33d432c6b2e78d390a10c4c51afed7311f51f8c0e1ff54b42af731117c0539a303f61542c9fc3e5529541095862521143dacd07dd796219d84adc822c5b783a3689bade1b9c6114df7cdfcca055496b3622e71205bc663657fbd91dc54d4cde5480d222aea0dac285ac5adebfe51de1877200331d456c215056eb5c69224be6f8d929ba6c599baee3c824e80dbe5a24b65caad39aa0fe8b4fd0a5c69e76eff4b1d7340dbb031e1a7844d051103d88a52127498bf44b97a4a4ed7ad4bbc7c3781e2f83a53149fc95c1a6efa27def23d376866ec4b0c1c23e0e21ed1f677140f17c268b1965aa91b15e62d5749d4fb64024ee7d06569ff897ca026f0f282ff2f17a70dcc2ae8187fd8cfd241004dbaa6b9ab416c96c32b5429703930c543053e88782db49928b39cafc0a4e2d3b1f8ac6669bae96583692dec3a9dbcf924ede5731d11916b80441ba19eec624a687d1d106f9b6f5b0f7fbccfe69bba168b81cbdf7d018a265a91a3b652f3e9edda11a2c0a52c25fed035a8d95d7b53a2e28799d48244c7541d64ddf7c4fe9e45707ce37df3b434d92e5599128585ae2790c8f65b1324717c3183716bdc58a9d99085874f417dc47192a539834701f42cfd0c8b7a18e7b027feb6061b83483331a3f6373e77cdfc5062ef2d338c364c3a911bff3b7ad6abdcecc7440d9f1564d612959a537ded04fd08f9202a3a6ddfd8b4bcfba61f398b23637cd54b1908634f442b59953b250500ea8cb8713aeed48eceb927c2f0587784cb9f5eddda695924a07f1b0d9abc27e2726f9d0f750154e447d82a97d57a98888cf68ac9c9806dde905b89c180fc912a066c780cd2ee876387e2ad2db7e916b60e4afe19cd94c8047a854abbd62b6c601049f17138fc9492f69e578d7ceb1897b96265d5d0ee911ec8c607038592df0cf7cfaf459174a4f9fdd6d1be0ec9c6b1f6086503b9d7f1b5e1e6689f747913b723c65b90c49ede210250c2c853cb498f2b02a6ad709510502dad14998a272fe8fcf69c5bb9c26b916fd5d3b43538c9b6c219d1dadc70157714e3b4f9b1e65c28ea261bad582872d1aa2dac899b5a6db021158e93e7b228b2fe4fefc5d0fcc2fe5520808e89181c6a1d20f44f6c775e03b2be84df78a1738a53ba6e07ceb288f2a5aa720634d991e32e76530e92d8c43adbdc5cc678871b867becd9c69550d78c428d991e41b4f8c447f673cff4c5c6da0636be50cdaa4b2fdfadd70b0c1ed65594919edd98f17996cf6af9997a858c6d9a9550866053290be5c510dd1b64aed4047d294c21d83ee02e9890750c623f7bffc1bd6f19c9dda4f6fb2d44aa698691f81be171c5b06c2acb48de6a92a2078a9c82ab13e05690827b18d648a1768715d9316f566ac32efd10448b80f48e0b24dba0c37b9e406a2bdae5b2f2e8d3d8e710887a03f957aadf645340bf1a6e74d023e2acae39d092297d276a4968c8a39003e8ab7e5bb5085b2f3ca530ed8a6917dd110eb49b4e3104caa9a555079d0d961c18aad1762571f6dac861da5329137f6ff59396aa026e422b320c1fae994083c2e21e0434ee0d3acbbf1dc635959a924256e15b5033726d078947ae460564de5c0cb01d7c5a03ae6be980fa7c1425d8befca00b742b640cc577fd0bb529a030545f07 +MD = aa13b83b4db9a58a7684bad6b864abdad23bdd71b4e5bcab1a8750aa8e6b1ca70730a7b9ff684fa6b73a70ca75c55aee6afe1b6f573c8fb6ecf3962a30e0af0b + +Len = 73096 +Msg = 32670fb2a42da76362bfcca8bb8358c17a6595a05d7b51a9c8e935b6bb03525e02b2fd77ab19ddd9bd7842652750b846f7c8dd77cc4f6f858e83a9975c51d0abc65e09223da66d7fc7645f6cf8311dfe1d6f9639bae87cd737b39945d65866efe833dabd411e80dde94accc4146eaf6f542469ef0e8f9f242b42adc90f5d3db0cff9194f9ec73d7c89f33175654f952305adfda0b08c00f6d1f88c2af1ab7c79e3786de13eeacde311283488d11bf8a296d3fc548727c8d4939cdf7063894ccf8c787f7a08ce579ae7af8004421cff72715e0b137da81f47d8f84da34c3ed53c32c0f622e4bd042a7550bbf19f98d31dfc16d4e679562cd609d27fcc96133e473d197be1bafdfc1a21d58e57d0d89b2ba1c3ffd4647b18098cf31cf32850b079154bb6c072d766f25504a03fbc248022c72c34e6245d0a68ca23cd1eea3d5258221e4ec6f5936a3b78a79ab04dc4aa8cd51a1a23a2442b7c2b293a57c4214d6ecd5aecfc2979327cf28423b36aff40f035555993c67aa3cc18cf0aa59e46c8437cc63768f7d1e33d2a64e44ffb1e6bd74ea59a3e794699e0f7dbe61160f2ec5d982bd81447e2a8078a0e848ce96952c888d2852da1ef3541311675a1f26ee1468a51760802f5a760794cac721a281e4b4ba3c16727bea1762f48605f3c02ce86b900ba4b0e5208d35fe4040a77a3f6e8ffe1f7f4f4fb020758394e5327f5dba38c004be45541f4e5a59f335be82203280c54ceddefee837d13b0e884999132276d18d3debe0a9320b145e26d56ec6c92dbc4ef29ffde495fca77d6fa7b1cf89ac312f73e30f40c0bec9eb849a74a5aafd2f901e00e157f35e454bfbdb6df5882f5b4610e9548882ebe715ef6c584f5055abaad0b03d94b88c9104bd6302278696dc7b956d44f2e1290887b7c96e2641edcd19bb0c573d5dee073234cd32d80d69212a61cd54e273ec8a9b8e404abd082be0472da3e2b46c29344ef2786479952cc5fd16a80909a3ad09dbd35f62960b76a1cda8e5548c6b9494d566f30b9eb648374e247bd5cb08f0e2c317753a23d4746e17dd6f2147c4d6b54012dbbcc9d941f1a80bc74f990c4ec1dbdb3055f8ebabc1a00b9fdd591055f2298690ec5d76a081953cf8db06461d03a08f0f3a87c9632910e405fd42d698e7fc22911efc36fa739048af0c951ef2449bb3605c52f65120c4d71fe59760260322777ac91862a62423bf5858c81f54f137d8d23fdceaec3546556c3ab97573e05705ac7f24b23a2fb9f1735401cfbb960f7fe359982faad31fff79614b6f18ebe45db4a5b38e3d02dd9f8e62f4989caf8d09023e172d0386ac35a60dafc56b9264d001d1475f152a091a0819f3128eaa2b14cd51dc7b8ccc9588907469010280531d329652bd5921c6e18efd9fc5f812842383495a83ad114678c75a09aa74223995c54968218f66918671625d1b7f7502a5f26913edfaf149769903044a16e472ba287eea141e84e3895e0cad8b7b4e312c69458b02ece91912a423db488163b92adabb6b1d8cf9576ab34123be720a8a177673327b09753fcd7721112e3a1c57485a637d966130479b0f9431fcfa4698079856acbeb7021817608f2873b77ae7a3362b642721b64eaac19a6aef8a6ec56d4d845c369c2c4c811eb293b1700bd4bbec57e1384517c70a77b8310e990facc90470b38b2f60578af05fe55ffa3bc902eb9d675241c16b4aa07226d2ac85b8ab6b906514c72aa39593db8fd7bcb71f08b250590dbe4f85dbca5caec44b8d7374e187c37c1a07bb5167ba15d14dda614def0548b3012eb14e63dc5b5bec6367b5e4bb61199e74291eea7ff9a514221a32f040b8fac0cb7812fb759f1205c3f00f03afc085aaec578e9aa1bdfbb62ab46844872c3d53b244b9ffbcfc8f3e1bb6b0bcd96448e5fcd10106a3d52d8a50ba5e7a4d0503607fa1b3ef26f61bdbd7367b8eccbecbc6122016ad0ad1b33740b675f006f5d54d90098158280e509572c9afe7fe4296d1c8cf4ffc4b26351357134f4449513b917ff6b2b944c7b5c19b1ace56e292228f8d391d82f9552bc5206b6af598b9aec2bc03b8811194c406ac94675a1e200755dbe7ffcf79f0ffb31929297259919757b08b135df30803cb23b10b70057eadcb31767730615c3963cdd73b59106b8dd71a27539e8d93ed95ad0b1b274d009e662a4f04642429515d9aeff0f851ca1aa73552e9c125bae9dc850d26ee394841ad22ec37c956dae0172cedeb0ea21f967ebe884674700f91265831af437ec84016b7c871de6dd35e26e06b99da65eeb99402421a16e0e47c09930324b562031219658e5321cdb533e351c38dfa31b9ccadad1aa526fcebf2ecd21c17b2a78b205b98885c221af309f2fd8027fc7a0378121b7ca8232888ae4671c708d993b30323ed50ed5dca1f38cc404c085fc34e2477d9d273a9e84cf6ad1eae7888db3d2328b07297335f9c58e5c6619f72920c5a3564c69819d09b7497153cd74ed26c18b0ae67da514fecd2c5fc8b6df36ad0a1d148d396017606a08b11eca5aa1dd24c82139b37261f934ee35f03e440a20d63d1f263fdef2d20f2ff81588419020246e3aca72e30432215c46a65a2f8fc4548cdfdf220317a5cf46adfeac31a437e907bc5f63ffe6f1bdfffab4b2a7ace0a991bd828ad76e21d1d63aa2e132c4699a1b0fc12dceed7e2f5ebae1edb449bb00d41fd52163df903e6606c9cd4dd8ff60309bb879580220a001ecf4b45e4f9e7fde6ea28cae53383d7f793a1889c94162d0c70cefa60e213871fab6aeaea4d14e3613af76c0b063f7a8fbbf6bef7d77c982fd8436bff7c71e354aef84ab319c966474c485a2e0579369f41e6e85dde9bccfa5e9f7aba75b7bd54666dd5ede477ff1fbab615bc95c3a4acc20c855d1df643d2503d973042476da54e562cd941930640f2bb3f355bc14d4eb8d216742a0e856e69a851ef86c38cbde32bb02395bd245170b23736bbd488eba2d23c1167571a25076a2b46a79e9304b168f05b6568c1d7d1458e2f2a9ff019fc8746d37a627a8cc5ed93e4195af92035986dcf44f8773a80efb48d4c660b30325bc738b7b31f0c01cd2c26706b5776ec34991da91eacf00c1b3aef85d942e4f0da4d9fc3bb8029576344bc314216af41c802c4f63deb9edf4291b46b5c2fae948d3a97130e367b435a8de3d091cf0fd2bd3b33d0c8bbad7710597a618139d3b9ef3ebd1a0dba68321d585bd2bcd93f1b9e8308bd5185926feee2a00ccafa1abd7a9a506d4c7476c0164472bc45dda388e6aaa2106ae1f42648cdd3c1abd8ea3ba9fe1f714d0d2d69efc2d6f1af34d3a72ff2ae7e77493946a88b7424a65ea8a107da68ca81ed029c1463d7275b8755f2d4fb7c5bf933d82da8ac0faa4d13fc8a1eafdadd7d8c9cc30e9811a1fd4d910860359a3d832a5757b39014d702614c5358fec42ea274329b48e01505f6e02b347c31869787a54d6143e8121f58ff2e894147e332932c8a714ddc4fd7cae76b23636fdffe893d10b6e4049607c32609b8520b868dc22dfae1a7dd207bfbdbf731c050f4d70a4a47e51e85ff04d37e646d25ba4ca4b1e11a68c17335870c36560c0d8573b57d5569584decdbbb0c70c4f416f493fbe4fe4f73352f0d6d7e7eedfec55dbb2e7506ebad1c99ba7ed0a5b1f9b01afb07cdce20ad7d70f6b3b52e45a6627a598663a7454fe52cf9e4b275a1ea7bcdf06ceee9345404d9bfee62cce38f7f4bdd71dbef0cbd4207387134692b42f45e027fcad7e11355d99761e9c35e16765295554016b861bdc8e498e91894af947bafd4e402bd77faf13bd2ccaa0bd7e21f3fc532e6def9b2d29ce012ec946cf68766f0bd022fde6ea10ba58df973404d123b2616b7c6d1bbc4bfdb745da1277501b647d84eced32b79955e903a2aec01cbf61c7e022686530fcbef7ff4214b9a8b1c6ea85100d2bbdb576295d4a937babd1f0ceb7e6483f3244f908838bb65f18417c9bfa16c799a56c055e16164bfd256047bb155076726a2c9633fa3c5f2f47d16ed80c87824316c6ead1558f3e0e33754ed924e958c67fbb7ec08cde76f3de6c84e9e3e9a5f2b9cc0dca433bd4767d17ed6f0c3857021afa97f760f865718417a615a6c79a6e3685579008a476fcaa4e0cc4f5c6dcf0e2efca1f9f129372e2dcbca57ea6c87f34faae6dcb528a6a6222932106194d5680a4008270b568bda0c2aee1921097ed5b31fca7b4cc7a864f9c6ace67bb13fd9b211f66fc674c1c65d164110b8c6f7f54342787ed9aac1917c37913413497addc6c10146bb3a755d912c67d10a3b8fec70b18559b448aea62a0a938bc0a402dea8fbcd4e41ee131a58cbd6dcadbda335bbcb859e9527ac3d939e084ffc775476f920aee8f32627871482f2860bf3de3b951eedbfd4de66a2398074033f2a0c1107be1a9957693f2e44c06f7fbd44ad989d1a122ffbd35a8e9c507b57f14286477542b4e1e72da66a7a22822c3a467dc7245bb771828cf45d3c6c6280cb475f84c25cf2551afa09e62527ff1dfb6fdb31cb423226f181c0988a52ee4015aef4536f4b57657b44e60bc62f1ab789275273026c16b2e1484bcb16a2630878ffe12decbc58958094a755ddc689ab5c1350056a47d997aa56f25f51b9553c6d90a29ecb1e7a57b37fea5eec7cb04bfcaa70635343ff67e51450dfdc26596e5c37b5007af0314e8c5d0b7172c0232bd35320076e1efc85fa36e3c71667d410dd2b950d7cb011cc83b2a757f12f46cd88b3db8c0b075584820527af810c59c65902cf1050fc906432273a5cf818bfa385232f4bcabb9ee5f52598f3ac725ee16843cfa3983431a80011310ae82ae230415787d12d9a4d2ccc0ec42e0938581473652351a2e589fa860727ec51b45306559771b69421c4bb8f2715c927ccd9b212fd4685118eedfe2c7f8b7bc56396982a8979569ef0aa24b7152a6f78be585ccf62c5c8649ee2057bf0d823a3b7016848940b5bbe75720acc4f5e5b8c7b5876f13c0d960ca41ab2ecf19a8e7d1d37f9285da410732e90a0473c4e47c3926e8320ffaa787a2cdc8908084f26c204aecd523cd02f4d9aaab7a07256aece71ef23e71418da4d97cbea559b6257130bea474eb81c02be3814a3707823eb0db86ebbbc1fc545f7835d794e2170c9d0a15f098655f435458552e62fb42296f1d471cd18895c45f85df5986a3106e99b53918691acd52164110a0246bcdf3d1b347cda64c73a54d0b648da22507120c3910640e9134b719a599e8a5e08b6480a770466598febfd00fabbb11ef65c19f9f841bb052fd38068cd84e0ce2e4432101a9ce34f19eda919b9c2bfa899343faee7c8776e68e9e85feb51a82f7405a5fc7d9ae3be1bbbd37b61f24867cf760c42edfee89d451b03d0418932ea9076fdf03ea2fa4efbd316b691cf0dd4ffbe0a667979910a4ac38d7a5e902397fa14b4cbcc39794a40cfed5bb7bd5268a068a47a28bd034df09fcfaea10afca0176b64cfb4c2e358610ec1cb4241c8ab67f2750e7a3db1d0ccfc64fd975e20ab8ee7887c76d3eaf1f32c2e95c000c305ad07f683cc701f2b3665c7e7d01e3202b7258a7280e0d2af7d84ae3bcf5ef40fe605a38abdf8bdc5c36862edb9af935e3681f512617e4cd946c4ab3dbec0be42a9780673bd3c10290a70e07fd296e71663a952fca700bc080548b00c1ceaa4267ddb99ef48beb8dd621bbb3ea9788fb3e4e82e91b02ca2c43fad573778112823c9acc85dff051a4b70c54d7aaca90fcf20eae2721b3693963c4f0b404ef8bcd323682c303e83b70bad0a21e46accd9b0be1e190e56c2f0e6a1ca36a70fe5f4bd019a301695cf01867d56d2dc5248901102ee2cc6e1666d4e069b73dc498d4239eacf7e61735b9c546837caf2f190a55895f7a84c59754b24b12f5d707a4347e2455451b1759de9fe043994a8c759ac0ffdb7160f0d941d1358122dd410ac583eb7d574771b2a7cdbc7b8aa6e51f7f6af90a8f07f9c27758251d09fa7ab2d05b7a8df3132b275b786295186c41ff017aff549b22e73c3d70a44e71d4bb849c2d59ebe2274f9f44c75bf70b44a9fd6a1999215f58c32eda41397c21130b6873221101eb2ae404a8e32e0b2bd52401006e50d9a152947f97f26c0fe26073469b622936d8c5f33dd0f3633740c8baf30da2abe42ab76219bcacc56f7c63fa065d1429f1709f8332042083e511c473bbd7dc33aac23036e39196cd05b7c3a8900160999c7a619ccb8c92157c67725841a7456e94306517c55dd90b375b2885cccf6f029ebfb246f0af70a1640a7a706ec405e6083efd0da76a9c076e2f3c9aa20f69ec5f073b8a89b6e2af04c283c4287843236fb2a12071fe084a13fca4eefb0876dd4719a36f7ee912c8c657355a580927ab3255f8590b62455b8c8a0b89bd03bc5fbebf93feb790257311903a3ce7c0da08b7efabbf5ede7ac243a11774d24866f92cbfb33e1cf346394e363772bbe584c26848615a50b9cf089e0970b6201f9a34f9e2aa37965a9ba1e311d702bec04c5fac27c333ca3d6db40789bf5791d080968df021f10b0c4c3339e9bff6d6985b69ea567851b5b07c4ee5ebac600ca242a950b1bf7565528277b8869a55edb7d9688c9b29bdf75b235fa0f5ded878df05f5abed2dca8a7465f6c8b00e28ea63ede2f9bf7e7d7a868b6ea070fec7bfcdf401046b12f864ba1c37d22ec376b5e5bf61998a1e9b2479dc034c23b336c8b43455c4f41708d96bd0c23cc963473685786cd4c3b21edf7b3da60ed8a62b7bdef0795450e401d3d1a820704993a4558a408c1234e10f92d5d6e04d557fb1c0924ef61a4720eb3932cdd8d476fd93fa3e3e47bba3547525d0d0387263e5cd7f17765280a073cef3d76672d217491f0de79b2837d9b3587fb25337e3ca8089a0b69118ed2587b3e8089c77d1f61f4d76ce7eb4ee9ea5c18ac386630952f9ec0bb7c7cdc99c01a1020d976e39d925271d3b107549b9d2b62d4d92474cc3f8fea9623ffb7bce8ca1282d7edf718906b4ea7579f2aef4e34250969f6815e424c860fe22296d83ceba42b17952e3ce68fcc6c6e0b38615806adbe7d450ca7e265119d597e006836ff439e1b250f66ff40897746d413ae55038b7885986d559a5a2bd2dc7a7ae951857f3054e60123651df47c84a23302cfcb3cac157929c3d4ac1324fda06cd8371ec5965780b9fe92789bc0a9ce1d2b22be3fddaf6fd89f2bdb86283f785cb1321ba534956d80551200fe0828e04873e86d1391a5d4d023fa58f331146ad110ed1c9caf8104fad36e27899784513b69ab58464cbb50d71eeab4c8f40f005053b2822a4bbcff8fd6015ccd133ec96c98c5f04673325c23dc576f95d591d161064cfcccbdabb5c5e9662146ffca91527dd2c5a2b9ad6f6ce8daf9d85a4f4669b4f6dcf259dfb0239a271575b1ba4193855c68d974aef308c0dfd41ee699e7f0cc5ab349c4bb872f44ae99d7dd8072964bbd2a5928a99f9df0f09ec82f043e9cc8e3102172e1935f95772eebd7af7ce13d9fbab06a1fcd82f597aa62880092a4472a6417d8c47d2ae90b653034b9e8fad75e6a6dad83f55e4b5f977c8631bccdb39b2fab8ae69d17dbf5ad3379124f49a583e9ef6778bf866e92e684bdf9f57f8aafe34afdca8bbcdaa09774195b185424aa99c42c6074a1dbdc080973dbe51058f32f74a5e2c17051a6946099f6bcb0e12cfa6a60cdcd272fb58c895c59f4469aef64b717b1c6d8fd7224877f77d4d647a5ac70a933118cb699d462dbe6bb78ccff0390c7ca046d2a9dd8574e40d93ad48ef0456a12fa591d1380448724933d6bccbc803a9e22836584206e6af442652453867727ffd002df9d00acc27623faf3c2d013e4a079e23abf8d2b7a1498db939ddf74675c5b105a90e5ea326dd637f16bfeaa6a73a2d016ca8f1cd0045504cec86bcbacaac4183ab9a0ab3b7e327ae13288e2108a15f3861f96c12145ff87225dabfb7c8dc370ec61b16e6219c14a4fb10f298b464bb3053944a6c27c00c92ae810723b57d1b0dc1398822ae2fb1c9962120f4f4acc952092093c57f8f14164d249ce8dab676ea659d6a51a4c58686ab011f1b10a112044d464f0465f59965cb6b87ec7fb0cf0c7aefc35a4c851c410458f7f7506a1dafe5ae8711211a22e7effdcf19ec93aedbc8d69c25ee98fa6367cfb16ffb3072bc9aff43d4fb25370483837c5568869bbf16fbfc9ad225a9559d0d536a5b1a9a9134e189353b3e60244da4978a3cb11f202d06eba13f55af7e6ebbe8d2b6511c987bfe631c288f26af1709279fb13dc166d69e72227f509645a181758e55fc803837fbd8710b3d100da759347c0d520af9d76b9705d83de5140006048680444fd82f83f01c2c73a7a6c53dc70998178142f81764329344255251f39ca27f5110e22c3cb405d35771e33b5de62e9cb5aea70347e191f78fdd665def46ca994a4bbdf6ce2b144811f82ad0609cd35f541991bea5150b4e4395baeca309e6175789d155e25e32d2cac4e44befeee02a1a4b69f3d90886de8bd6b5c6b7edde41a2508611205345bbaa5b7a75b1e63d4532cb95688bc2ebf18d26bfb2d2fa9a5f502b44f12f143649d84752164f8bd2f8c2217fe6624c23cd711040799c3902b98c9f73beb8a9eec57d10d6f670e5878bf3d68d3406ad15ba6019a0e3bfb1ff977c367b4062185477c03c6ddcbdfd4545ec71291c20eda80282cb48b8e06a77404877c43fd66b4fa6ca557e91dddaf270d67aba645815c6ecfead9ec0aa6d54fd19eab683bbaac99bc2e373de79847852d879a8d5552b56bffc470bc3c2c17c161718bad3badba99fd16cb3893904bd331bf75a37c03a3fc4a622f888d36ed9d3698836f97b08d7f81f7aa65ac461ab5dc67c3a5240476b4322c5cbd8837d517b38c294bba5383aeed394b41bc3a32917028eafed7e5cc18398b8ee7b7af5ce58ab4f3ae2e074bccb16434592ddd31ea8f7b721d2218029ce3184c73961de37b0ebb69236d6c344d50f0dc188bbf87459cc7ef8c7d2bc8b6a14b0c0dae04174cc1f7f027e2c2dbb56e77d90c6051a1272aa6b9d953917cfa06bc43f259e256cf47033f4848dba0794c5181a116241e03bb8077604fd99deb85b49aee3449209700659cf0e9f7311d8d268c8347a76c6fb1fd9ecdbc74a9efa0ec674dc799032870879fbe50a5fc16935f400f5f6c0acfc066a68e43e33f8aeacc3f9d8e628cf829e1ce0d17786009117442b1e7e287a84964050e50b5bd41b5cc8a59f3361c9a9f2c9e6998ef1b496a0e1b275b9b518dcf6e50da7d5ca1b8a475ee0f80744064429087507f6a7c6c1f752fbc3506f6e4c50e108f24589b343950c12ad0ad76f9b6e61f5e158b01f5a451f70cfea5e651bc9baa88d039f868e6d5ba384e524ecf6e75dcef05b15a5a9b1d17863308be3938bfa5442b6147bb3f7d2fb464033669cbc8368fca8dd42f564ef7a45cafdd1fabe2876d706f179f95df982bbc20ac3d6165b2bcde610dd888601e03e5fbc189989cd75159d3d6aaac458a1aa14b3edec1d6e802abeb75ea83e8f111697d19eb81570b9c42000350c5678bedcde36ca26f843cddcd8d9ac9eb42275951c434d9f8a99aaac3a42c2683be0431ac79944cbd0637bacdb7eb1b211417483931a0c950fd1b094910cf9059b18962a77e64225cc54f35f70ae542b7d7576a7a75fc2e3cc9e3346cd65c22d9da921d49725ab7a15a09cc03e727d531f45e3cafe1959d2ea8b9b8897560526691a4ae2cf5c6913d2cedd96eed11470203923b44050b8a8911d502397e6aa3928f37b1ac69563382c6720a827d402cba7d99e2d160cc7ade8debadf741d99ae02bd1b4625d781314bf2ccbf92822dacddaebdfd28566e2b18554183d603bacd1efe922c932bab4556f749a3d6e37e5aea3fe6eb1d359568480a4ed967a1f5dda5414795b997c9bd75fffe1c9cffdd1ff51482c19db224ada18647a7ccfe3328be0ba4483e26c3e1d29155f28cdf334126b6fa4552d403424b5096b6b0225af492e6100fccdd81f99235b5ec4d8a6609a6acb440e1a31b6f6df0a1ceb916548a4959f3b008c6ec4de07386d4880860bf9d7e1a79f527527c30efd2b68fe107320aedb6f49ce8ea25e2d43170e46207ab33b593ba346991b0bbd49038db8b5d34fd28bfa3304b64c8c0df1c890a9f45158ed886c94670c1553727421a451d3dd74b9577856bf8437fa31db0e6a1c70144d96f5d6fd444c8b1cb715225749e8e641cb94661f6f66d92b314555152e323813a037f7486ee900ca038272111163a23971e9501784dcc49174e7490c5f99214d91b54a00375ffb0dd0729d6c38e285ce54bca2b9a0647ebf853736ca1143845df3f44bbf4e1ffe4ab63c00c330c40572dc84fa80428c5c27da9bcad8f39fc5c74f7b78c003b77ef32d6548a099b6a5b981e8a405dbb3014cfdab51b3672c6a0bfcc15dcd08a4e1a99e74d19ec408eb24ed4e5ba4ec86f2a156ec87d3fc67e5ae945c6730bd66ead091f1381840594a27672c6e07e556a4c78eb5c9d513e0dd219eb32195a27bef0a9040e8a7af1647439809778966d09c220dbd84115e059507844c2966586262aa220a7fb760ce770be87bf4b3d1534d334c5a63232b64b1c2edadcb1d3fa8ea51bfb449e1f5f03dd2e0fa6211c57d3c8dc322d3851c8cb7d6235ea334d8cdea73d1b4f391ef1a105b09eb4c2da3acee942a9d51a1a1cc2bd3ddb52e57a43fe792f0a2e951acbaa2e6dbe51f520c60d7e8bb206a234bc1622e6567e8c0327d7631a504b7abcf304a18cf6e583960478cfe2d5289648b0b1f5852ed4f38f404fac26730cb0ac7399a636ced835e3fbf8246d9ba3bffdfe797d44e9bee1c7974f9e7afddbfe91534f8493cf92d1b0b473c4548be0e5fcb058044911a21d5233c07f3f761f2d14991085ca807c1fa435d2f8c02e45d0edce35d0bc2dea70da1c88989c643f05dc4fc3ef046afce96888fe08d90a3b47765ef72ac6c6fda2045b9131ba51a54e927c500b68137bf5a3b5de3cc6a92b14426a885a8f63437b7af7c192c1c4b8d0dd299e211f05620cfec259dbb0937bfdf7f9cfa83e8c24c3e4f80202d846e053665d977950c817f621b9592fbe4e95cb3e14b45cfbca0841e9673bcb275e859ed420225a24e2047bb3a1c57e1964df46bec21fbdf0a357be324b5433d7940f7ad07a270ec3dd8f635d838411e85dc335200bf81442a1790267ac34831070e7af02748fdb54412275c666803054bfa7610bf727a91c4cd7d52f92c502f97b73051115400aff94247a9652a0238514f593288f95c4a42bd7ff3206eefabb3c1c44a66623e2ee60fd3b7750cc31a2e314911fda28ad02c6e247190f97b17d3b4a33686d20ad462c147d0f66eca3d3b56c2397e0c9ab5fa561768cb6a8706801669b003420b13281d30b069fe9c14211651338aa6108e351ba5432020a7fa415d64415c30938d8e6a1ac0500a9d3147f6728ab3fd60ab55157a9b4fba32658ff04f65020c58860e3e627b49315217487da2998a812fafe2d9e3db9a95cadad48567959553ae9f3000b45ba5f15f388b226dfa6ebfb20e56ef9d8ea151e5bca773694d76a52a5b9c676cec06c92907887b3127e127bc3939bcf41ef46cf7ad7140b117265f303d9bc908a6dc372416d8fea89c824792c2f3c87416f445850fea83db6d350074a7b6bc1406a6b9f4e8f50310e2b2adca4e2d98ba01318a22665ba344ca23275c3c95972ba5e6cffff0554f1674f2b8e71d4fb422682c9944334d2579a861425b6e81009bef2cf7c9bf823935ddd2f76db2c29149a645f15f19478106a28fdff6a0318f015ce9bfd6c8f437db87d3f7c2c13ec69c663e30f76ad35c78230f5eb2940f78d8799d869b8f33e1940d66188aab0cba970255c691ba690e2ab4505d139c7374adbfb8eaac84b9ccebd919f829f2c4e3c6152d20b28a712caad0f3399e3c15f8edb9ec6a7e4c0e303f655015251aefd8b61934ddde5da41e75038892b6f56f8c04d278848547a9d22b4cb8ee1095f61fc3890d6c69965a8a15c650f6f25ad894afa41da755fa05192bf9b4e150e6601f8adf074b18e70cc619840cc4e4def9a93aa92c6164e5a88bbdf6c49d7aaec65e8895b30830a24378dcd71c8ae2e43b40324c2531369d2c905dce6881023191632947b112556a8708fc3a00b7911d25e02327a8954f82d9cd87db212a6c2149b4096f51f7fba25ffcd42749e953ec420f89a6271c24396899c8b78ef83cf067c78577462797dc36db1129588ecfd40824d25211243923319b9cfdf288d921642449e9ee3fce9a940a1faacd164966e0d699b6075c02c2cd3970e90c4ae526d740b351ba9ee44000307c46182e7507748b5c4c6a0225aaa409e1333cbcd59329a34e294bc39d7ef3b4a365ba15c7583bb9768fc9d4f64d5e637a56f46d1ed8e3d296eb125c3ea9f72d2194339aa4bb9ef784ea9743192d44fc88bec3ca457a9e451a119eb76c5382f0734c04fbb1b426bc13f762baf2bd003bb8e53b52ddfaa171442751638afe1fb51517bed762c46b7d8030accb079f08876764cb954ccba5eda1b6caff3f2c25d18361b1ac3c8ec5c27620f5e1ec25d68630b7e51016800420bf2a7bc8ed404ddc4ac49df8a355ce114242aeae04f3e2be81492841cf9a54a0f90cd48f19ecf03bd7bad43b3bcbfce09100577de68bc576f5b2f5b8dc8d0ff4fbd875804974a586b6bee4e27a53dac6def480d0055ff765fa6fedc3c1daae731407df6af099e633744b508cc38fd02a8899bb42e5d2e0f20bea71112405b8c1ee35629da3af2ac87cda97a8bbd285822a6a47550c971ab1a6bd102f5780a767f6cbbfa6d736fbcc4cf73ab4d7be537420e0e574ee1f2d1b5 +MD = 6730a70ed95c48d1fa1c04dd32c192337ab47f4df3c6a1e9d101c0983cceded1a10ab25fe0437de24a6f9e3848f892c2327fc7fa6a0fb1854d81bf05d9733573 + +Len = 73888 +Msg = 645d27970ccce096d082fccfc1183955bad2611af0dd7c58c9d54430f28bd992ac04b65c66c5e4c6914d6dfdb0e4140eae93430675744557bc2cb57e20b537e377616601611b0dc61ff0993da9cfce6afa8dba76af2ce70cd05dd502ee43a73c6e7a1dcd2458c260247367d7d463cf3146c9acb1c590ca3cae728b0482be93633859c409d8036d5a45dcbe125a27802b394d0300e02557b2fe72becb04ae62217e0644fea4a5757d2c35883763a3471f7c23a5ab2875f435676658a09d997c3ee88783f1b1c542918186ac8e16608dd7b7537cfac4070a8c915540cb740949821de66b2d26eb3c5eebd5125f9ce5bb1991e36e34dd63028025475e94b38531b5c62be3f92ca0cbab132ca2f21dba37aeb2dd65a39a1242d9cb459a427f969c9e8a5cd29ceb6a5742a192448ec0686b5ec348488d249b345f2a55dc1f03c2f2061283225f8ad448e93c10e07dad76bdf06c2dff3ba2863fd9eb820c7164949bb506a7ba8a326306698cac5e050d6c972e549371f53d5cca11b5d11281cd91ff730dd182650aa1f98a3a70a66f08d360de248288031da33fcd314cd69764438608cf0862373b158913ee64a003c53280c983032bac69e605d607fa41fb5131993bf554424aec471fce4f8f35086d115fb71a1c42394aaa84f4dee339f4bde39ed527bd0ae446c0218106f94bc827f8657091d7b6f2e77924ee5e10a7cbd0e2ff9f0c4ca24e7107f9f5bbaacb891c70fabb8f3c6d1f69da4d8e308874c9b1b5225e4d08f2d094a40df215ab9e9473008661bc525008f756679afc53863389e471dd91fae3b1d720c740bc03aa315531712bc12147f5ba74dadb697ac7547ff852e381285b3b63028ea659bad9a7ea8a23de46b13b2dd9bc0e1920041e73bc782f37c59c43b460d2c9ed94d9124059930445f20b12f97db66c1cc9f972d767ec6fa2045e8465f619e2dd14663c42cbd47d276e36b6a1ceeb5aab0b62adc9a9dc7aece67404964b5d403e826c41f667d6f44b613a0d6df3e241908e46b691aad1b8dd15e8ad8f8a294bd885f008a45620d27a742001a415238a91fbad75779153913c36c26697d9026b73c6fc7994bf3a807c4fef79905b379b77fa9fd2c387e86dd3f40816f7607208d6ec977c0dcbad641999af5c77eea5de093225b5bcb31ab468f4c4a7f849008acaa0caf959a200e819fb6894a2f5f5b9114c4606ab3e70cec4e1fd00e0b93559178a9cd8be6bbb73431c23085999b09655ef0badd84f7223af61bc09f7da97dd85511501854f676c60a5e8a0e4025ddc9fc47a928b0fa91bf11c08aa87d4b07fdb9e3d5df5758b3d383dbd448a5784f3b5739e9e0ca59c1f51bce9cbd6cf08a5e3181dd25805af4d938dacdc94c1ad435fa37cb7a23ad49598e667542df225b96368bc49f4295b04393cbc504a67613467fc1ec697f6d7e78e448b2dd4659121243522ab130718caf2f3f588f472272e94288bb431002f7bfb7e5c3f1351d447ee2858defbc76d07855a606dda098899adcccb67b98163bba73ce27032de749189e965ccf492e323bb1804e544550bdd7b93e7c976a0fc0e5a2526a97833fb69bc1f515b489001865cd6ead9797d3862c622e6c1b28681dbdbe12fd32f79f136507225753de84f99303b1832c2aa97905524d036b35a7a8cf31906d49dd7dc5f0e8ce8011dc355c2fef098d66704b1d0f23fad12c34570886a75b1960a76464ebb12a2e72e489c6a909c72afb0b20d88631b863c286fea37089c3affc07db66a22af5b0fb9a0abfaace8aca4e4dd33227161629c2aff70019437a8f90615b51b0a091c6105f20ad81b7c509c4dacac04e4b94a1a131e8a4ed8ed046b2366cac93ac8ecc55c67426ea4ff65813148ff9884ca459e29f3c1869a67553c60977ddc7b95d4230427da23111af43ad9d8b444193d5b10b6a79c11a34ca35605d156bc9518db6346595a5e297404af8d8554726ab994580061a457bb45f7a05a3bded250f8096d6a254a89b3b69dc89577668940e7f95e504a5fc1a9fa5802a6fe9c8474dd6629b8b4330b7887c76d38d572f1636f910bed8a57b53712ce643341183bc871fb7f782e9d4c40908b86bfc700119bf865452148149c2b3661ae472ddb601559cf58f1bb0eb4d278f0fb72779953b02a7bf532ac1cdf4e0d1ac82bea6c592340ea9a6c8110abf8e8ffb4990ac41e69afdd0469dff9e46840009b279f5390bacc552f31ab2a997888bf997cab0adb8f2c93580e09331541761b0d8274196ba2a517fd885fe5e61bff38936380f2f0ea4ca3db695150d9a058740786924554a27438eeb9c5c7faa9f6728895b104c642b41773c1e0da974f8d127279215fb284e1c1e90b075a3dea1476625b67c8c55f0ff60a60de59b914befe34a448f0ed0e93b9d5c84a2618a6024b07fdcac755090349878c7253a6b8933e374f307f6d0933289c36b9b2f1a467f961c30188df073817d28ec452c603b3dc61c20194993c6817259d798631adec8956f43593c9225868d3aefddd81bcc7df9c44e2b7db71db8c5847b52a41893902d0da8d717d2208457233457d3fad7650cf1efb719a6e34921d7b93278700f56cb6bb32a961cff2b49767c3b8689c6936e29975493ffc1a2e5c803b036dd9c8cff0e04bc3dff0bec02a90a01964524899bcfb78c830e3356afd9fd6495ade5c34659101485e4f146e13f703259b97ba82478c2b74d6eb2e4de8208c7eb6d556a2ff167cbf46b29ac83ae41566763267f76a96b7d899dcaddf064b842ce8876122a5b6e3b0fee2fbd5879efe635bedf8030d5f4479e27d59293d67e7da5abc23bb3fba5ea3f0a7dd9de36fe5a4b38e15ab1830f9e11797db3276bedc11733c4475b66a172183c8e929349df2b2e7de65f97451fe97a2f2da039a968c589bce6d58f00e33b11f0fc68064714f145da591f4070a7c23e956ffa28f381f373a3c466dd6eedddc2c421caa593321527fab40a4baa39b0e568bf2193fecbc36b84c76bb50523b29122a95b0fd2b93f5b4b71b12766382de4f585a7090fa8bde7ec7a64a478175203a8fd79936a1ca846393ca4521945a1e3e87e0ad6ca9b5b6f2747d23a1c4b4490a398a6deedcf187f605f445a47c4a538ade2bdaba4262477d1da44d4863202debef57350c252e86d4d6411be8637b079b26e4fe620db9178888c2d022a6e053467be6f878c4a90a65ce5bced49314c1d926b2224b52e3b0797e80b519d41d4381a3debe1a018c9a11b4e7664f533e0aaca83e4d5f59089ab9c786031437fe860630e78fda23fcbf405290ec43ea21697c722f8785694e5bb12b7bc2fa15aca33be9ab74a07423005a6efb6797a1e466b14e2ed8a5cce07dc87207fbb5b74e228a98cf74543a29e5c7d1d3df33c0b089b302e349a8c8e4886563d3b52c650d8c5a03fe98debe36f6ef43be5dff8fac5bea56f5e174a68302f2c887f84767116812f3dee7264870bc3b8b64e7e3550163bf140da9f2aee475d667cbccee04813e1c301769142002be11736f88c75cd6299802d2a70a2730687908453a09858597df825226918d1284dac1844593ea5436deeaede5a55b8e644375a049803247f9c3b1372783d8c997ff3e4d282f48a211fa92056ba99027f09c7582023b53ecef30846d73d44a4e7ee6b2723883beea4252c2c33f000f2294eccf946b23309ffe8ec59d126a29cac1f9e59b7d779351525044cf6b9020a8d89b4c7d8f1e1186b0453a6e0d2fbd64e99f9e6f00f41101c85bdfd0f7430ae14511b4e573153dc98cbdac896b0950457d3fa796c8e07e222cda5a6ee9ff17f462b6cf7621f1fd911a5fe29534e228940543c6b9dd2523db07377e524bae8d0ab7f364d6a0989906e391a63b70a18e7a0a12c48048a94855e0d913242437b54acd2e3dadf8f4594f6ebcbe23282eca1f13146892105635b83f28e18b7d82d7dd2bd020a432ec84954349f3f4647124aaa8b17c983d12312bac8caf305d773bea5a42d662546764ffeb9e0d562a52e4435151c639d8c785d6b06d46bbccfe289ae0eb2790694f3fb6ed25d4f384b95114975c101ee85c7ae2d2336fd3d3ffe8154732dad6768b5ee1d1451070798eb442013a20ee75b956779b46f0207862c1821681b9db850309a92065887811b955f81853be5288c661bc920f914cc50ffc09d63f8a489d9f883661ef05b155227c5c6210b4f2276be5da3ff41cfcc2eee0d40ed316c4c74722af1c4a4fc34cb1719669d7c9755d9028f92a5e57da76e8b70846a725f80ae3203cdade2e57ff4f7bcfb511c4842f1d733fdcb60c8ee9e3c7d007227f8c6e5bca0721136a1574e2e42fcc276ec6a7fa0ed7dc6201c023c85a52d7aceb27fb9768357c51caa4b553f2dd387f8fe4cc0f41e7b2ccff172d80b6b641ad3271ba7f42f1700017adca8bee028183ef85a6445498e75acd3b0ef22325ca8d1c14b2fca061878819d7b97120c52d9a55523e828e11027635d5ce05ebc7fcb571b5ebf4c9ad485198cb8ceccf4fc62b8af29baf397b8b87fd8d76a355c35e8bf9ff6e5106fe3bc35c304be644c7d4a0570ec5b59bfd0af5ee0a0cb3a84178787c9742f99f7ce9472caffc46c856dd60824ec57afcc00827d0f59b1c2d6bd3e5c1286fd6dc4ed943d2f0a9f4a1246bd3d359a2e8a6eb0d876bf528c82c67f6389158fece049d9321149a59d71758056114d864e6e0a79f7c86b3bd9eec5d69dbb4cff6cb6190a047bb5515d9741b34720b72145bf11c486eebd66186b776b534f2365fb43950871f8fcbe4e1fe947e6e81d0b93122718fc560071d68d3d961ad13354271d504d00f57a1ced8ffec6ebd3f9a5b4fbbcffceaaeeef82c89b0f5acde73a6e97dd50481dd82dba4bd4a89c70a77029d045d18439d32fabb2120fa9b1c99930679ebaadce714142e81d759f5ad0fb70344446a39f47c2bfbe353f7e1954e11af106d4a883eff805e92ba65adee0b8169c5ab7b357d7394d5177174e6113b29cc8b836dedaaec271d3a1c3558971369b7cdbbd19dfec03c3104a1f9125808e24632579a73f2831251bf25525f6ece76d5a59bf6da400a2bf8f30c0fcd315c45034d0e5982e06b48e36afc43283ce5b0ab957572550bfa6a102cda3d7f66df58ec24d332823a4dd1bc83ca901dc8ff1f22e46ecb7526380063f7320c90bd3a25e9ffccaedbc9d0b6c252b6c2a5dcc5cc20dcb08ba15b6bf5d89c3c0368ff15b4e3252154f5559dfedf1ee960273edfbe8ec3633943703b52566222aa6ff4170bc0dffbac38a65bb1fa318bf20db7f4fd55e2ae5ec22e521ec79309890e63e9346a75823f0d83b3d8fbd1c300be0fac925b81ba81865d556112751b29ab153337c72fdd94dab54d7ac947b913a20eb1848ae8af2af7c5ef231f518011b0d39c1ac15435340805d09f4edb96b2217ca8dbc95eb4e27d2dc66dd66e60c98363cce73f2eb1a50038e54f71d48266a3203ca0ff2cf12f805f82461f16e2da8e8d6ca628037a71291933931a7ca4b690c313da169b8f9c6821ccb7e28f2ecb371b245d661cb71fea6f63723119252a502dd591f5f1b6ae9d3c4cc707226d24e8d39b16e0c19138ad011cf59ff42c4a4b262bcd84768def8778a97e7617c76e087f7ad87e3a3043d99807234a55e29fea76bd97ab743de68e9c8be417b6632fffe568ac28cebbc8d6fccb041b836fb093e432f65231ed1b1b729c02d2466af234ce0e98c6c65a500bf511a0fac8fa05af3a32f361f6c61794c081df9011033c110113a7406a3762e24b8100d06aab27a73e6795c00bf061634fe583375d5797fd4821de7e027786c2c5c22b83b2ab9de1b976e458b89281eee76ef7b1738e8a6069dd4769d64544132d7d29fde822efc7720ae80f45d5009f4fc442e49bcf9ea32df1e9e72ec7253e495903245438a6c033c9aacef9e065dd51906cba1d42592c5c05cce15125b0a9e2ffc0e23e134933c25b317e1edc380fb37a7e1a40104664bec0f94088886ebdbf16681eedde608ae8698505faf0029f3e297feb4d61eab31acb77ea1b18e5e2aa4704c0aabf742c6d9baf4dd54549f4ba4677178c5ccf823acd4ec952fc9f81693a9aafbdde0c811998b63cf9029876ef786f85452a7c37e46f87c4745d2400c59635d56e64b0f1b409a2bcad50748da5686d1dc0f2793ce15929c2cb62fac98604da190579e8e405957cb4385767a1a3be7cc744dd4ff7f9323cad9d34ab42742b9363c9443dc2d5e54b0be33ef81ab221a16b1b1385d2f3a3c96c33fabfd556b4679b03ee36f3eca017abf62eb0609a39e6f18bbba3339953d6e7d5ddbce9f6465faafb9e5cdf126fe87bb94e15db23af5241ddfe3184b1eb6e06cb052ce51a8a8176f97d35ef0ffac76373c7b1f4142bed445903b82c041296b15c9996338b27d7e845b34b89aae8bb4b6ec00c113754c0e046f3c0935a7158d0d1c1833a11c669e826672617ace2cd1bf062ac9c52d3d2feeef5cf217bafbb4b72a77a62730f3d5fe6c24cffde8f04bb42d41bfb2e4f2c8797326f3e2e75c70a877003137ba95d33cbeb47ab05986814ac3fe1989371d4618ad127523c6b85f55847a6b5ef3dd14e1e0a9f81eca4010c75cb84d949e1d4760ffb7fc56e38fcf52d52ecb098729f962649daeb5a5cd88ce79f8e28174634ac6dd800ff8a8535f04db95c6d3ef1d1f52dce824f1667f47d48e487ecc649faedee8f316958f936cf01a57f52a9626f5279c11e17e96f5dc5e1c1f58c1e913020d8499b69a23d097b913edbc8a06b7f94534b37aa9b191c4efa5f6272e7c7dd2d742dc4682ef8b6db45abfa38edb70ba503945470f40f38fedbe65505e9920afb0a6436cfc5d343d66415640856ec1a6cd1c3fdd1bcf9b9bfcb7d57adec9bbe74e21579042f76ba5638a39fa2a4b3b5d10500bb35ba7ea878144cefd2b789017f4369137134882242077e356c9fb3e3bce6751404b7470c11fc7ca5dc1305db0477888e7c9cb284811acdaed00e95ac15bd4792a67bfced71cc350134c8b755ecc499728f2e9be7fdb9b99034ba0018c4d2a1bd84ce445382cb9e8c409e46761d73c44511b3eb539d2c6a65026c9d30b26da91c0478c7472b43e0cd695d5b4780cb33916af44cd149ba07b4a1ea14fbc5d687378f402ed0547a224c17cc9dcefd160bdd01b66467e9acb80679fc0c81e65464968eef21f7e5b98d92b3b4b5157d9a77b240c4db20664aa7e2f26c2dcbfe3168c2674d47c3c7484926a3dd4a24e6a19d978ee55a01a6dcf9d0740120e0f3b3ba428422493ce06f7d90510f05012271a51453e0891492aad95867828dc9af23839e4b36ce6a1976525923128eb61752b8b1f87e0f6012fc6d0333b81b8c18c9ea5f26517f565ba4ef0883ad8c4baf8efef7e38795ed0f19dd58406b733318ec180c7c3a04078c437c25d8aaa7c6d06c9e6d7dc3c2c46f4a52e0f7623dc596d5342db4ba0485959923398acf88316433c09c2ef93fec1cd7f421be67204b79cd674a389928d95fef0acb01e5d793522c8e0a5ff3b36dfc08eaa5fe40c4ccab1ad9ec6f9f170ad18c5963a4b33bf5829f2d417677c750f9245df420b6d2501304b19ac1937920d2ba3989dd035d5edcd3c8c9dd4e239cfa7574948a91f2e099d518dd963ff8244cbfd2c6149be5d648128528fa406e59e641580fa699cb8225d3353c56693a1d26e44ba1af447a66aea28ce83714508fa7d130eddb9606409f48313f69dae7134871cca317c6c414f6cc0690fb947347246d25b4904f4a22ef7a336e385aa80e9aae7f52b4e96dea08d81ba9ad867c89455d5fee2f8d402ffeb2645229b1251703e28a39ee751af0cc0ef2bab7b3165bf2e805221f18906fb237eb72a5a605356e5715dd2e31752d2bb6b44b80e3e7c713573fd9c8b8e1eaf453f1561502f071c05349c8dae626a90b1788e570dd97d490f2379a9235dba9ad4c9e87df8d90d2e21f4d815c5cd56c567a970fef6bcf8a510112ede55627b3c36b198c6d0f8a60bc034a901a5b297ff2270951655337f23fccfb5a29e46d1020f88bed255089233646687e7eabcae9c96605333a5e7613409b186ac6a854c9aa3b1b33711733243932ced1ee1361b2c17fb33ed65435f63db591a4246785e54b7bf2e5b82e306aab0da514d45d96e3c4b93cf9a2fd1ba11f638f91abeca86cea02378b615b29fd762014cc974f1082b95ec8ec0421d11ecced3ab7c4fe64676e1613aed667c6e680b344839fb2789a87b47ea06587fe752e9bb9a0d56461ddc100aed57e1aae2cb30e5dc0544d75301804879c2ef84bac2cb435d448e748d6ca082f88c13b8ad7f578860c1eeab04e53950b68c53c5fcdad82d5d9834fc15a7175bf4f079401f0303be7ee654fd0fb20b1318d941be4df9b4bc239f06473729e9185b3b8ebbc7d4b9da9ee91457e40679e2192015d7febdd58237cf5ed072539a2aa3b3c0962892ee7f4940a94622410a504ff76c9daf85bf12128fcb4247c2af15570fcb69c19c160ef69380423af040e025d5a289d0efd5ee4c76c7f737d59c6afd85eb91237ec52c3f4845d6ae92921423315427035abe693e0ad179c32af69e0fdcbdc6bea970397bd5466dedb6826ed090fdff9764dd256fc274446a312210f67ace5503baabc944d11e8288caa642a68afc7e3d8cb6a57a242cd19d76b37649c679d68300dc5e22b24acef04d52422d65fc1d4640df6bb5a667cbfd6a3f3082666cc5cd4a866a8dff377dc4cd2aefcdd87977421fbbeadadfb17dda8a09d238d0f3ad32c63e70ff2e814976b8a4ae1058d0f6d177e0a532169671e564c7ddc57ccae7642278f3eeb6a49c769e440f9d5daf2644e7c21d540183427e68edb5c0e04f2ed1ddaa85d52e0e0144fc7d76bd5d60704cfde4c5c927046a3634dfecb391eccdfc5667896b0b49f28241d58608de918f2a18dd3109eda6438d2732f50618405f443b1480f8c4d4fa8f0cd0bff867cebd9cc70fe18ecbc588e3de7b6130d9d65d59ea55ff06e13b83fbbbf387147f54a5f596e149c047fe84eab91db3dc5d1b32ade290762de6ea1938edb27dd58befb2c4f715fc66f8cdd202559e6f61288b99a0c24868d65c6d34c7009206c423dc6e9b66025bcb44afeabb2271e657a2a3dce2e8025988a8317136a316a468cdc753e9622afa65b2015985ae3ccb3871f086e4f242cabd60d3390833b4e92be02ced2f8a145adec78e88e25753807c1d0e22174f8e3f0d0cdef6ac30f147961169b4ee3c42ff9f0b941361cc5aa8aafa3928fa7e4918c0029154932950422fc82a2596073b4b1ef4ae63846bc6a64d901e261efd080aaee8a6bd7d9b665b517adac9c76961dfd6f959f3bac40bfbcc753983f55a4f6702359bbb9bf58815c3aff80bf2d16b206fa0136e7543af3ba02ff7dd0df483c0626fccb9aec649e3deee0e8698dd9bbf417f671e648934c88116f59bd97a49a957fdd632069c30580bab8aa429fc880ef4fdc1add9031134b7c09f4ad85a15745b7624df33d5bfe4e27ef8ff36acb491e281cf77732fe8f2ecc371549b025bd3d55f550bc7016d0cfbced5f24f6cb5da92c1cd15a38e10a5688608639201912a6e1fd33230bdbc52a011be27c4cae05b9e3456f2ea9c1caee38eb0d24dd669fa7e3e2bfcf159123887edfdfa4735e8976d4ff9b9c8e88181c644273b3f0f2ac69e40bbc6996223310bca2204473c1310787b31b4bee1d3c0895cc7f8d60a781146ce2f29897753deb42cd6b0355c1449484c7b8e5d1687edc52f1fb5a356c65cf01ce28051e72894098c6898920450c4754a53a0f405126bd2419adc47728a2c22d37285836015e3847f7427fdc34cf467eb3697341c07bd592ac5f712fc57e167785b838e40a06fbd6c65d8d9278d6b98a5b0db9df9dc64c2412d709652a42f36721a14d3275c7b0cd9da45a49f869c90004ed891fd04f4a62b4de351f3f35808671aa40272aea7fb5e3dd8f099cd09d6915d2890b415ef6d5f83b9d67eca1e65bde9db9cb12b6911400d1d3da4c525f4df88464aad93b780447b8e84419cc4c6fd1415f2713750e755c48cfc5f038343214cbc0047e2ef9770a1bbebfaeffdb48b05ddb42166d1e5d5f0a2bd170cb46a2d16f4622197ea1b7a72dc9de9382bb70e4bad42504e8e75671de8e07b450bd2497379d0b9374974b88b6aeabb19d136fd620f3d6c32c94e7fa8da06da512c141ceec6dc7d25804bb137e182eee980bcbed56e05f3d814b9962e00a0e2958787fde56605fc0720f90b24cad6e33bacd0e902642c7583134f2119c74ef29690d69303d1cda4409e151cce91573694d7ebf2956c217fe83797c6f8c851a8e8ea6842a6949404566a186c81ef945769749671faf075616be3fbfe577e6963e0f6c5a35a2909aadd278b810b101ed44e1548ddaf9ba8c882bb142d9243f6b23348672baaf99ef63938e6e0b6ad472b972c7b9c2fc82c23c12f48db45c37a224451c541f590b474ff10a3021131bdcbf94cb743f7f08ff19bb3328dfe7764128895889ce688eaa59361486ba727d333d8d8844b94cf34b096d949cc08da553194960982da4cc2169a8d6f93e51a3801aa625b49829ecaef4713f6fc1166cdddecd5c09a6d46ab367917510157634cb4027ca4944df9b31c0105d2c494972e95f5d75659fc213693b371c54a8a9d91a9658a18d2536a7db568f1658bfef607e8441d23282346d49cde3f14b5db43a770480cf07a3f5b9b59e39917d8dd0dda535c09dfbb6f3205e05dc1c7f9d5efee972e97f3f27e678c58055f7221ab492655a23fb45a3c7d5adcc6cc678d16ece79c8d9d7be17cf8d15e52a6fd0ce6326c6dbb3169ab177344008d917bc5fad512dee99ff0bdd799fadb301220e11a442d0a0b5168148cde41ea36c36d5b1e3300fcd7120aedfac5793d42238644b418e8c91742383d08f8e4f836d4c4b2dd712274ba86230872f5dd12ed5d85ae400b10197376327b186d9dc922480a43d53a07b5188ec183ccc586fab622a7944aa5437984501f5537a6eccb6d8fb6a481d8216c857e7ee6549f07332105748d4071e377de723751f33f427d9d3e424b6fe5ffd965e7a3b6c6fcee7aa298750fadeb8082f65f2307b7814f5e25b645beebedf3aa5e5ce85b8069ad2fdf3e1171ff8c9b2950795add012763fb9b9a3965a25abd3db340a57b1d6fb3d12b78e27ac1efa3e9615347487cac10d4635c85d61fb6bd322925736bfa69a2fd1bcb6080716f3b31cd6f90e06669d657116fc386b07c63f6149ddac4a401fb0224c7f409aa85b190e930a02b7aeb45122a666b0e0126521809fc340ba6a31c8edad1459cc9edb7953948fd8016cabd8412b2f4c29e4f08066dd327b77ed78801a289bdb04bf1adad521b1194b662d02b6ee7e95ac450e65fd4a51e3e9919edf91053d4cacd2c1447b82974cff65e0d869377c12d2fd67d72c304902791d48ee3b8c21362ba077bf2dfe6bf984316c61424e504b03d3a4dedbd541608d5b20b4fe057020e9f1e554d3de52a842927aa62a7a24c8a8916d82f28262838f11ce39c3b751934e8cb20a566b76e2a150b2ad07041d1227fd69cc5a7fd4f5e508fa8573ebed16c23b87ea9ceaff2e0932bb80c33465b0eae041c3f914be3ef9084ba1f4e96b31adc40cfa8ea61515e2023e274452242a57019d70b88948e431d9699430f9f46c77f0e84414e6de1e9486e2a874a68109d82a23d97f259c71f742fd660d63b0508887c4d017f185d18787500d3978a5d3d4217e083732df6db20caf1f756ec664485147a47d1030b623cc2f5e7d0fb813b3af5405c6f63c5ec9ff26c84f635f3020161aca308b0856d11f28a127b4e14edc9c4ed616bad9cea6e30b69838aa23d769de44a16aa3438f746e3e01faf480eb9b013850ec5de44b0800508f82bb812b3af4e2a19b5dce4ff0a07224d4816dab1b34c1a956174494f9ebdaf988ec8384014007420f32ae34f333c7099c7733b2c6ca09b95d4c364eb04da654afbfb358394a13012ad44bc51892cd1eb7386b892a4b812f567f21dec7b0533f6b97993e6f6d964d92b52f76bd47d4d2b9578d94c233b869d6229fcbbcbe61f841169d9d004521a5cb57d1d07dbd7ec41757026c0b1d200740d928abebc2434dd4bf390a984b1598393ecb58c67e3b7155b97285716258764af524e5e156877e7af413fd83fa12a360cc947624048b58f8f15667919db23559294d003a059f28b84786ec7fdc8935d69395bf12eafee985811688f849cdc2dfc7e991623a0acb214c3a6dd86ce9fe0f3667aa0f9c06b1600b3b7ff1d12bbd5363830fd67e4ad42a5486d82a15c53a7ef782bd9682233f3cd25da33ade3c73588eb1d2234cefe25802f4e1e181ab99ba897f704447e4e15088c5991fbb7093539bfe9eb5206a641eda1ce19b1afd8a265e96587557bc566f813bd83d13787be93db1bc28833ad8033c677dc35c4b8a56d99fdcb63c29fcce7df8d70f50a4bb6dc683b0e9ffd1cc89cc5d0cd6b00628d09cd473836fae4311b1b51c030d95d075d8dd237600efa036ec661551d0cdd4081aecc3795cc9d7cdded92da4a4cc3975e7367a5900b4f18f2f3b3dd118f31a81d63132e4ae0d195757dd6280b0a8750274182bffa9f23ef70724dcb103267ac2514a4861bdd88642bf4a8113bbcb118ff20abef65707f70306bb788e29d8633e0eb08a8d16ccad0477a8dfda10947d930386b9d98266a8379077a7d4f779627970dc6fa3434a0c310360f54069a537a00b0492f5c6aed10956d1d111f68a06f92a566e60bde1125cf51b57f3216dce3b8b1ce0e79e40fffcac728ab191aaaf319d971d3201126dccdf307e4ed26ebfc9f6280a2b73bd838613a24b50732bf9b74d16e293976e6d14f428eecff7287adffecea53de1750a3a1f09896af5be44feab6e54f1fb459eca069d1ff2fa1b8de1e76918ab5228029d4110cb6d93b23f7c4b05eaf9a748716078e5986465c86774629ffad05016fb040c4087d4f7a837b4be662b0715e7935cbdaace70d4afa60bd2dbb26965f25212f321553d8c10dc3c4 +MD = c49a67a96dccfe9597d5c1070077f46024b331f4b64d8713709f9ab3248ec7b95319da1ac43e0d67e2f3ac558943a5fd9ed2a67decbe6c873efe01f59db57cb8 + +Len = 74680 +Msg = 223674f89f44f89f54660b3e32ddb843409eef7086a885d329947cf9d76e855f65c3c329b7fbd216e1e908b48ba1fad09a8a42310db48086246b9f9cc80c5ad42717fed59f86717edd5d731e468324e895d0c6a1c667c59c3446f4e8fe1b1ac8ae59ad631d8cddbd91ead5e6292a3d727b9903287b6a5bff9f4d04464044cd2244b2593dfab51fbd45b6b473fd3f4d55920c802ff2644a95adaa561c572f7cca2f4a89cafdab3e6441ec9b2d89695d7b2352c51cf4fe9b48a88273d30c832fa7b748c572f013429cccb20f7c975173cb75925a5949e055fed600e1d425e8eca326d5959d9998344c2f309ac8ed9e9a2dd2f5c84cb9b180a181492a866a08bda5c21882b3c2e01b5cb390c37954f9d78980a3965f0c192518ef88d550a588a996d53a131c3193ffb39df712f7940a34c7c8c34cf909c24a4b68e36b9c9c13b85ca562d141af5ae83b388f10ab7578b8d0f27d72817a51fa22368273d1184ff3e07bb9428803dddfdbcb8044fbbfec6b8a46fb916125713a85a08e7556e1e4610a9e67f05af7c3eb7b9df23750390d56de0c623000d2c8145ced2ffa95bf7b0bc35893632051b41503f70c6f13ad8480b48bddd8c64bfe8f8f668c89f57abcf7f1ef652140da5a645c21f676aae1f8f2f50c91101b57bcb30653ceaaded94e2f7dac06b4245a5ae06c63d9d47f9d12b287d7a96067bdaa89aafc1ce5b8a6dabb50d79ea432995f911c05dd0ff8ab7aca54344b5012466f1861a89fc3eca707a151b85477d45e0f80554e29b17fd2d741436ba06984bab36914a07fcbe0a57eeb679651b7717212b4fd88e6427bd9d1203bc3cf3226e12082ac2de386fd67e6a17cbbbdeb709e1135fdf93b485489116e268500345e825c6d0f95f37aabb7e8c9776dbf9c3ba8b40c3ee9514d71aa3f33ebfa5df595670f322720d931535b2c6d3ff57f513958a240a7a24fd83c04037872670bff3456e2d7da18ba335b1c5994be9b2692d27884d91f6b5e721c5e0344a31735daa1187c6612c3c1062dc21747dba6dce86ece01e0908ba6a17981ea9f6651010c467587e6b66b13342f15108d7e60c8d97524c25ce14b4ef0bc365e91a35c971f8a34a860ae56db45cbdde96e8f0f13ef4f406e55faf37fe44b4307234281209bd41f89dbe2cc3fbf68e14df2f7fce4b265eaaed3c3cb60078f708f5c2b08c4068efcd25f3a17672c6deae2229c6f64a91dec2adf241a1ae0f0879b454639aaea1f942bf59e7e7c1344c0500567afbb5ce00d8980052ad4f7d74ed6e47c5bfbceefaf3aa3f648a6fd542b40a340061053171474bf4e41b7d5aa8fe543b3b8de3b6615aa732abe0c7105f35a0510ba8b1728ca92a2e7a8eb01d210736ad4967cb8ec8d216d2228d7f7bfdf4532bd14562f7df78c34b8a79703b89a265fc83efdcde9e04798c6ce2e17eab8aa32315c96237c63097aa985e364c3f4a62c75f88802c5d6c6fcfff73a5aee46300e52da767c8fd5b27ea38cf8ab5ae89cd9c50c45e0e83743a1b3ec2347345180cd0ad61cc11d162f478c02fe60e73cb06c9fc15deebacb6990cbf6106722a141774097b07a8eef27dd4e301c0cd1b989efea60f8b4a45addd0305b294021fd1c15dc665b2f49254249cf5e7b368027d06990313dbb0cab4a69c863985c9a2fb9aec58b4469b8832992f9d443665c4e2ce3787c558a5b8756647d588243f3fdbf4ae54e95af42d084c0b2d99b24cdf546648a8968aafab6a9c83680127b9630d7f123f6738a4fd3fadce4b6abf93be6c5f4ae9f9da14f00ec9ddb256d8ee990a8ac67cd0881475534ec76b49c6c0ee7529bcc081cf9c42dc7eb538dbe0456e4db8299197c1c931edafb50199606aec19562cc0a0e39c004e1bb88002b6343f6177ca223f7e399f6930e5a2dc04d833c355096ee9beaab4ee31461c8dc351a8c05a16833a05fc2a5072f7c3a43cbf61fdb6e13fcea93ecd374ffc62cfa01426f4cf9d4919f1776f2df659e8647086d342ec3297b24bced5b3d839f73ad502367958cce841d931ea7c3b9a85af38b5141d757c1b570ee15aee6a8d4e61ca9253b88633f55425c208a5a3182fe6fdc0b0f7d32c4f0f7afcc9316764ecd7094b0b5cc850d4d35f9e6644dd814bae4830166c95d1875e08a7ad475f6f370d0992c9b0afa22b21ff2d6fc43b347d67a089d0d63dfa78c54048737ac2fac16654101b6e9cb64cc27d05a1ce5cc019958f446cef2c0577c7ba75c8563296208571397ce12ffbde5761ad98adb2a2b4da7cf636f1e08128f7cfa5f8541edfb8fcd9857ab2c9e14433358bb0fccd5ae388e1f5eb991c0bf0b8085f901ef8261f1ef56a714e0b1502f8713677361d670a2366e9e74f0f04639aed192bf15f07a76e6d7f0d2d63e5bf19ad1477e41345bd5c6438b68e69e8f612f6593895a403068daa39baeb5501cd1931dc2f814f7561867278d5c19d481cb2ac962256679690df2400e6d26ec7b179a7c40a8842848b241a10c1a319906bec886695be2a30faf5738b3dad01c600ad978295737cd1bec7b397068d7f6058431230ff576c709943113f1bc5ce7b3f37598e6cdd5f1b60e3e77210fb3f167638c28bbb9c9ec3f04a7572fda71565c1a9964ddd207990160b1e488d76c9512a4011ed771841a9949e18ed7fdb86f44c76b65772e75cfe429fd070b87aae7ef8eba8ccae34e59ffaa083f50edd83c514213221ca8c69a47b3496813e917f1e66bdcfafcd8d0b2596e44f302727ac56cd2ba24350aa2031244be9009c359bae08192f0d517b22c8fdebc31555446117ec188f1281ab3102d25840653de184ac31a02f7bd6a9bd089429981b15ae3286d55a4135fa19ecb809ec2525b02fdaa797c54961c9733a530e2026b7e4efa1223d7371240660e3cf4f6a0fd87f6afe1e8efb1565a6723b36a05207824f632d7868e68743533a96a6f77478e4184d7f7fabd41bedfa2130220f41b2f0b1a348080c460c3a5ce175dda67df8df0721df5952c2b561310aa9b3bf81a199b84a815f8bf4686f800011d1e0f8f83fb8928e2a38698a65f789185a15745bc3dfb349cd5c9434695910fb321b780f7cc91a1c60b11af3729a470c83c59c5a25746831f01287f8ae649e826cda7da71ca522fa9b5169990da5aee6df248c253532e3ba5632421da52f0357e0926c4795d947b9489dc7d39db63b37aad6a6356977b0537e30752be414d9dc3bc7d6698ed1e2d8e6fad84bb938768fa5409d1328df588dc691739bf1b29c9fed0f5e955e2b9eca04fcfd59d698db5f2cf6b34729b636d9cdd9eff64494c60372cd47539a52d60d1118b9a67c73f416c06d8b39b2b8f5b7f27e2cb36317e0b74b86231cb9c4232299d29f8a21463b56fe19a7637a43ffb8e302cc6bc3c8772bf5ce9469330bf0ab0dbf119d5b7c2b80448f8a6cd6e3cf5d0dec3177ed22e3c1f00afdc19c96e8f6fb42b25881a24f33223396be6f14ef04e1af1e8045c3c129d8cfd19e6d0156a6d0e1e4343a4510d015aa6ec09943c940ecdfc5ed7407a9b3fe81b2881ab7d43b2d3139c8fbd10af79d58752bec2d08a1add2da37ee8ad800ffd512f72c46ec047e95258f3cd2a81a37c24c48ee0d07a7a34ccdf81baa06815b1e7574282b08c333a239ef83c682a8638c46bff57050b34b8213969201afc58ed24c7784c0a4d7eacce96247390532aefb06f9b8f37e6525373dabc81e2e4e09a52a89c8c45ac31299a6a02d86aa3988a31f7eaf02eb3dbec0cea0545c1c7b59eb72136a929505398d13f17d4c0c3d7f28d2b73e3b119d86a3290c9d37f4de0e39b5bcf0b7ee2ece0b940edd0585aef0d0c34bece8ac050b72ef49295e41f684f487dee1a0c0905eb9a920b32fb11e9c5f83a531a7f514bba483fe7f2b7e555cc05b01c3e9b6ea4a0be60f9637190cc019764bb305974d25bc7995152c246af41191ce0dff2b8d4e76cd040cc827ea0a933db7d76dfd0eb82f529571dcbeb7f95cde8c265da909aa8eb0a67d4f6846ea412c72156db0ea117181881bc9b7ccdb2693d4a381b9e00cb8437f6e294493ddc7c4f2f3713d5f902798d5795faa09f7f354201c07d890d397f7f756025761538bb9b308151cefd2b60b16211b0ffffe478206e65c8fac9d824096db571b2fea016d4ac9b5ba1b47b14ac29988442f4c97cfe1a90c3983d91bafe664940a601fcd42229eff9f526d8dfa534933f11861687058ba7370c704d8b85e6845af925343eac31e4f5725c2b07c40c68a913beb3e25c4b14ecfd6af2ddc777ce875473319c9b4be216c15d5dd53338818af1a389d52de23daa143469f9eca08f8e5ff1d936160051238a315491174044aa533e7ea79dd68c39f9d59b271bea2f38c1a9155346d69ae574e1fa839bad1bd1df957ba2d6b1676053556faf7cdb164d23a3ce3c53572324287436f3e4066dc640b3690c00fa38e8cabdccd838fdac952ce6ea3a640b55a74ef2ef281dd3a2521c9d2e2e423a669a07149ceb77d85ad7857a5393a17998388d640f6b6c9d223d1c5db450c5f8593cb262c63060f286ddd567ef8f3329559d8dd17d04f9ea544fe7f9e1bab1bc799673b032ef1cd59a6dc5b5a87842a3f29ff741213bed45a24f267c9fb32d0f2e72f005c870d209fc50fd6d6494f570d90673bce3577033730780ebd5846177e096d46970faab14164e24970d2d7517709aa84baba2a93e303d9e506b76767ef7cbc5e412d7cf804e2ee2398a89ea2021233ff56162c1ed3fba27b248cf94acdbd96b7f964d65d50ebae15dc3f07b145368dfc3ede0e0c80946c41a56d7e288f4887041e4a59699bdb8c60aa0ac50796d3231bb37642c58f6a81d8f7cd8899aaba07933e4278956c2f13c49090492dad949dde82836d0246faad919a218b16a66e8315b7f1a6793872de921e63f69bcfe758a4fa69df2b5da12a0c0b0e080818e293dc39bc857d97333759a1fa6fca9447ee0fa9ae3bb91a0a91c8d8f7821668c2b4873217782afeecd89bc9c817428132b89f0ed4e52422a37f3872528baa1c6b6f871fa700f9d60c1cd904618f8c2d3452a398527df50df84cdb75b3874bba692f5c70cfb272b31d8e81d03b2b1fdec946ede4cb58c41265753231aef763b9386e87d415ff2e2cada836bbc98c764c7e0fae629427f9f697a2cd54897e9a9f55c799980e69749918f45835a13617ccaf179590314e0f10fb301d5ce76f48e33da4f25b0d63fe9efbfd76cc369a7cf5e8f913fc474d8c080cb7a2995d4c070b7c91328bb7811484d31e02ee1e2c2e4ec81eaa153aa8f93238a3edb84fb74dae8f06cab881436f011ae09d29ac8da43da902d8698fe2cf262b7f6f3823239512e1903b5fff2d569a5fefa5fd8611675918402f77bb8d765a41c497779c0375ff10a7f4e085917396fe95add82f79f017a2510fbe41fba75527fe07150ee958b998c8a7e8b9324ead937d15580d09d6ffc3a009abb7cfaa9d2a962e8ef047c5d8e67c94e70e6230449af09ceba3437487e8d79dce817c28a8d6278e53e4a135e3963e6c59f9b3c0d291aa750176d95126ae424ca5338389feb71ca6f24078315004889ec01f9998fe04056e382c2e0582708a96be527847055a0ff8e8c85f30b4cdd59c97c4a5f11d6e9bc90e07a409f1dc1afc8842bcf8531b5c04a5b0a8cc686ebff67f9d4b91c73dd815e1adedc71b4d6dee7198e4167e879b4ac7adf75d0143a22cb61e1cd371fe34e561836dd555411e0d28d96019de3b484bbd14cd7b160926bff9ab7c3ea42c5cb7ec2ca6ad465385a91c68c38af892ed7804898daefd0bb820a8e9ec4bd44499fe000e1ac754f14f72aaeb80d2641ae5601c80da514ce7c0ef423e0f8398d387284bbc4cbc07a6d5ca72c61a98875fea94837f161a8c19fb8c543c486e58559ee70d9bcee3d4f0b340f27d033608ce4775d7f8d353111ea2786d59196499576b9ae440f3d7534b5256b894ed433ee29684686294a392526033fc19052ee23557b46e205e1ef9235d7c23921b48b0295250d360dc847671bf6f6ef09e05b99bfdd3e9de80233d251f41c1f91faef32ef56ba7580d6e43e90a6b5474368185d7c86a05cfec7ca5ad2218223e8cfe8e601a3532dcb9c96124ebb83b08813aed95420740791593b947f08fa2d6c5afd8491b2e2453743e84c1ede69151e08a4730f50c085e7e00ee622518f2567c4b675682e6ea50af35f52c6b76d5b4e70829574c08ec04883ccba81a446f31f349b214ebd00358cd3858d0eed9a6b6073d1a64d18e59ffe6afc7766a7297fddd335f00a079fdd070ce165c029f52d9c38180e60ffce0a50be268597053fb1e8c80b4b66b55385c1c5fb43a21288894ae8df34761e4fe985a7d24cdc6490728a3ca598286f241503275c8d7e515a68b1aaaf82561d7324e64c8934ff6d25a809578c4019dc1b75155a8bad1a8d73b01aa70e5fcaa33fa4bbd6d2a5c6c7053dae4047ac01a53f8d3f8510093e6fdc4bcd0787339858bd4f4c6c3607fb1a3817c1205e43a8729945c9d1740bb49e9c1f12f19f6789e6f40ee0373cc26410c7208a1e5a6cd5ea2f86fa653e1943c3bb16318de06165f2eccac05f6c3eca4fb93e5063c29152b50b361c6af69db28642177104d18af427ae69350b4ee3f47f165b5d171e19e57c353f750725feca8e38091c7efa4afd2a41d585636b1aac49e75ef760f76c57e7b3874e6552a45384a5d67822e40a4aa6adf4f8904a49b855332f6769d3f26f9d8ff8eeab05f7150f9165ce191630a141fbb0d8ba73dae14a02b6f5583d13f747d1799f02c65fd7d8059e658b1826cba332ef6b086f33efd05cdbe856ba37b58c7ff1a7921e4463870869879f735290755a9bfba3c5beaa914a868a8ad4c67315a34a4f82940e7fc3a3ae7a7dae1eb75f7c9bceb3fde1da32d39f211d1228f789446bdffbb125f434dd55874e51f10a089ed72c5fa006465e000ef636fcc509916b3c9f24fbf18983be46f63ae5324f19cb375fcf3594b7bbd8bb51fe1b0573d51fa5d626fcdb08584e6a0f68f14b4f3908a3ae2c44f3f5f1638e799df651fcfc688ece283c49375a96a71a01fda3d2115f03609e558ac8a9a970b83a160f6baf4edfcd5342a4e0329de65e2c91a2a049d73fbe4cf1c3f88bb34754fd01a98995da801cce9655c9886b10241236b08088783f105f9f054c3e88fd960f41851e57135903c2c0c2bb03090bb4da73353b764bec9efee8b98d6b3078c6985e0df29c0253c95748557d4b7ec156add19999bc572caf52534583b9b4a22cbfdea7cc0dad54b8b4b775d909d21852b3d7446202a5e88c836812f6d11b6110ad4bbd75511e451602958995e50efaef130d9f5eef3b097eb8af88ae5a6d9fb98a2cb6b6115d0f2c6868fb7a86394e76f6fb10552c2375cb19b10f72fdb243707d0afa55f57098420fba3250955bfc2f832a000e616516bbcff5100c62f3357dae6cf11aa461caa01f1296dfb97deb62e321d8523507d2980203f14230385d2846da03cfc7388c8dbff98fee9ba505573d68fee9501393a8d9641cdd0f87a3b96ddc983a05fbc55317f68547e2de3156ba88dc9b5b9040357d9ff7a5a9eaef774afb182507b45f385091e0b0372d57a68208d830fe87c185163cec61a36829ab06beeb56756a4185925208f2429c6090bc705c6fe0fffee0cbc462dba809399dc8ae7995f626538104c266d5aa32325c9149cf21aa00de90c4bec1d95ed60795b9512aac32ef7d76cf68602018f7b6522819990e03934cdc2ab270246dd67bdb01326761d2cda7aa1acc5f9d33f4d4b9aa6b22fe94be2d0b2528d9847e127eb6c7d6967e7ec8b9660e77cc12a43075db3ec4d1b9058b6a66dca963c03990f67033c721c9dde99bf2d3f00d4812b37ffe0dae1006fd02eb3578bc76a2455acd4f6f8c6e0b9837369690bf8c072686dc6b3eb047af242a98c020ea7af04b78e99ca0ade70b56ba709a6e6daf1688b0726afa53dc7a230b594efdbad773f2f0349ef1b2f293c07b32459481e03fdf392b42691d3830a2ad172837b4f6f3e3cc949f8824f9697e8165e12a838648d32aed3db298c3994819b897f5603d38c514f3e58d8b635637d5efb45afc08fa0e8aa2a1fe4ce57cbe5626e15f47150941ce38b9296d9822937dba074a73d01d356131b774c007a2ac6c474e9ef0e72fff044b63835400953c83ac2122704579f3b882c73d7c8fd4b8640528dae31973a6bd142bc5c70377d7eeaf4c0b7bcfd5ed967d198008e7d88d4547b53aa9159bde027a59144f098f0fc7aace2d1dd6fbce030af466ed7576d117f43fe7c9416f51da68349b737aa6891584f0afddc2b13c0711a217b2a3782de2f60c09cb07b9a54dc3057fbbbe84f0e027fab944fcc0dfab7a69badfd8a448af3464c738ce3f82637414ebaf3df1ea317a3475d9eaf061f62d9277fc7bc4cb8596914997fdca912563a905d85fb51f0f65e50924f50867f112647792f69e5d6d04dab870fe22799a780cf5bd8d973982d0579dad85d29ca21229e228b0fba76e66863c4c380fe3ca9c84e4e62d61dd92a3d05afd0314a5131327e04711a25090a4defcb1135977beb55bfadca9d9b548c699679bd5972d4cfea89776815d01dba72a212af7c7dc7dacd75e2667c869ab22faed0f6523da53bcf2323d68f2625855b2d23c4c23bb0f6a41394cd1f5a1c39d3a14e21a805432344dd7242e2a1a0e97bd38717a33bb7dd6e1b2d74d2a049920a3039b5b7544f14d03afb43bcdd20656947a50e9c085ced7fef24e452d3a34947be3c292cb5296f15be174f8a331467880c2610291c00a57e1203920c7ec9ddf0bdbdf264a252b079c95edcb73e0d8e6c7352d2b70153a3dd3652146c0c2daeb9b147b7fba66b7760ff5a51d0786c389b1fd3bcd232c65711ae98c1fe063f59e73b61d05e3bc4328fc26265725cc10488842135173ac93dafed30513ef78f5e2dae84e208dd0d604ab53f8df965ac60a922b3e1d283ecc62c94b118ab4a8e39e1ad295387f4a78f263a2a11f22d7edb919e1439b0a8919f0c17b3aecf89cc6ba799d7ab582d131da6d3bab7d90ec8e3c638caa32e036816d308907a183fba61d407185ff5e0d0aa411479e63aa40b07bb852fc4974ec0dbf5c9d00111d6e8cb1b6753f7edba70a3997ee0038367c5b5e625ec04a8c54c4cf8ee0aea48e9d7e5d25d22f9ac0473a7f47575b64fd4797cda8d67e9cf115ae850d7998c39d2f8709d3afdebcd794a05f69ab364fc74a6db0d1e3bfa76bd8d3c9239147d414cdac9d0935d24ae63746c144111a615c2ce4ef26ac09d3c2453c8416504141b91ef7020f8c95aeb6d7348e21b28e0283960572ef5ae788bd03f09c2fdd107055cb6f1e2ddbaf4e0f1d71ac48b61a9a0630d7217414de2e25bbf7fbb6613bcbaf7b1cdaab4aa694b9b1050501444691aba162e5fc03782dc2145a87f3034bb891d7071fd00304e77b3af88094849b4f3b92aea4d04e3ced5cb7202a2decc7a1c18637d3e62b50ae1e615204489fa03c7daac448391fb2d7bb4b51cbae4337ed0831b4df33ed13536bcd1c7b67bddec03b92abb77d9b6351a679f652bc3124042e80872c006fd43d27265ecc3705db443bf16bdbe4ecd6c4e7e915a6a0de154efb1ab7a194d91bd41d161edf01a0212e46700d9ab83a93994442b9b1a271923337a84c25395471801443669c0cb638e824b797de3fac2336862de75a0913231ba9d14fa235085ca9d3553deba26ea6d89d6d148ec36b0d057551a9891feb516e1a3ec7ffd11c66b723f5acb409f0f568793a89928a9ed96cd85706262a22a3945297bc2455b81712cccbb9df8a65acff7fc800d2dc6e10d578e6071a73dfa2f5198337f90906f622967e6f546df5540478bc8035030339a71ea7b24b424bd4f937aa3e65342b8b5049b7d3fbfac774e12dc112a54684dc4a904111a2df8ec30973b5dc5320525e02ac1defbc790494fd637dbd0aec1a8226975d2c0791cff78b964c16a813a1f8a18859ca8031d33dc0e598894a3eecb2a3faa30963a136f7e96816f64d5640e096a5126c2d6b5df5927abb7e4e8423f42983bab29c57ec4b89b1bc832a31589e48cbf1dead6fc947dbe98ea5fe06e6d020f84b2f9cfb197bd539e5c527eb11bb1ec29d27e68540b803fbb805420b5ecff022fd8649d5e40f33c83ac52dce92be8251bf4fc2f5ead27278e2a603ddb27801c979c18d2d76900d25638a2220042fdb42ff5f2806ee1c9128b39127c20b53bbb567e84f4af786ca19071cf02a8e97905b045eff01751ec6d2d4cd980391e987ad6d0177758e77d26cce847d34597c0b657754312ea6617a40ec623ce76bc1cb7a3616ecf663ed8de662c9b3868d69b327ff49a5d5aa6c1638a459fdb8c264f0e4682e98159f6f634e68f3786751e3f06b4546433ea8c70083a4b9c2bcbd585fb3ac52621a6a86bc6e8b0bb621cd742af7f152f3b1c9fba2e9938a723d85277fafa989324cebb8000c711854fa2aa3c994aa769d75358f633119d5f7814158b7a008dbf0f44b9097f1c2223a3b90f8350a18b929d3130baa25dfa138d11a74714d7050845ab193e9e52732502b26fcd721e4237f138bf8e18b8df61d743802147f8af1d7c6464b5eb0474e7e14153615a1b6bc887dc7dd6f2ccbdc8eb4c28a08fefec5cf80323f5f19cc81ac3c842f5851358d2a58ec42bcd03f5c73d7e195b49273d455cf9cf752e95bd0c2ec9c6d09fa0a9d4eee25af303e947db426bcaa8203912752fdacfca1e89f45a86c857a8e64ddf4dd8598ad334070483ae97c51d91801c5ac508cd5b2de3de7460466de5157559bbd666dc32d9c7cc3eb684812219a6bb64d11610aef93e0be84fc671fb89b1a99d8d9cd7a861b5ff8b0ea4976c35276031b875624bfcf2ed34b9bb2c72df7d5f61425e059a685c1ef72b9a6042505cbb300fc90aa8959cf2d812b6c5e17352ebb5b94cde8f5a24caf171b8845b07e12cee3b63a24b7fa6cd410f2c06ade1bccef946cbdafdc3aa640885917bfcc84f25dabfe7a1ab07aadd1de39d475e972589aa7f6d737c11477aaaeba7afce2de1367421c7815dca1392bd547d006a20179c47b7a44070df968f57088da8458551ef48f585e9da336b9eadc66dda67092d876fa402ba729b1202ab5095edd98b1bb0d7afa51386d03d417dadc23dbbbeb1cb80b8fb5a07b04485167872f9108ba91b8eb497b70a2ce33b9b9f2c930ecd5ee9096b109796dba88706d487428123749ffca8e04ccaa607dd860f0f72a6918f60884ec51ba669a8791af9556281df28aeaff1214d4ed815b7cb71ed7539b7cdb27bb89b2ecce6deebb15b5fd1b90b1fd80731ad111d4f875aea6c38e32eac946f524cf56960cfb64f787f29088d53d4ac90cf1660ac58f72751529474fbfc6de7ba70865408a0c924ced9238f8535e18cdb3def947290cfbdaec962833803c4cc02d7a0672af6820c22fde1cf272db0f955128b3516938b7e41353596597f437cc9c6f62b5e3d6b561351e65fe9a7ed828cc18bbafebdb4f9b72a8036d6ab348a8de2da1908e20f932e79a3aa4330d1b8e0ef63ae919bd6a07f2dc4ed46344275bd9fcea8c180c963c2e99c46da5517fd0fd0a57885aa5b13179396121e86e7bed7726652fea633187f0652ae05912adf5839b3b13155dcb20f00565dc63f8ec679ef23c046aec751c17449586b5184d0587f20d12b4ab62dc4089818e3bab24d038a7949001710702897f2de5222a0609f058f60e9e581b6e4f0ddebed84fc8302c8e985d17b89241305d198709128007a8131e8e3b2ca0dd07d9a3f4a2ac839062ef6df2158bbce2f22882f4d096640a966bac1af3ee99314f34f9b80189faf7c2123ed761b02decb9268fb2e17f5a17a2aac83a2e68ad730e6808935dafd86d343e319565ef8e676ca1694ba2940938b4169c77546085aa2ebbf70c1ee7c3faa0bc6eb38812875cf3df37477d9f1a74b4f94d58cd9fc9de9676efacacf763a7eed51eb931dfbfd23629222cd96634d48a99066601ed20172ee017f96fa7627b06ce692fca20dfd11cc652841db3005e1f3fed275911325ede43987dd0c1657fd0f2769eba9b8e618f00eed6b34c261c59322a253bd5a8ba8ee599c0350b17b935886e8e6919758b771d1fab02f94d1621bce6e810ff2a3426104349074f1d331bd778853f613c56ba660c8a72841d53602349f641585fd38e0abea0af5322f56c28bd0da43d8acb4123defb6bb340dbfcb07ad934a8f09faf1b314d93e0cc050ec365ad007307f0f49cbc8655505bb6dfaba21953b784a06f8dc4d81dbdc36debf097eebbcc5ccfbb18cfb4982119edef5ce83c054cc4dfb7a6a1cab4b4b035e9f77b563d1031707fe13e0c9cef1f86160a75ccb131586370b0edabbf8b3b63f21f3a6fee072dd9263d3217ca81188c3aff7051c12ce73480f1d301a80b0b01edb2fcc13778f9149a75d35b88a1aa04458102519c06195bd1b27956d6fcc916c1f6e8d27e2d3d29c1d048623f157df81ed95356aa8798df493a0731b1261cab5834272d2ceca01e8598bab458a63a6fad4f8ae7537609c8d2d3a61ba150adc799b3e057aa7ecafdcd1350d7391c8972da2ad08dff9c171f53c37e9b0e4424726cbd3cd95fab64ce808b33554c3f11088db44cce16c268ebb353b63960c828b4b998633cb23a169788468ab6f8d77b39ae33273500aea434dccb767dffa56196688d7c080df58762cc8d7e80a4ab6e0d25f0884725297402b573e8f054a3781f62e4b0c3d7a2603634a7373dba84938dda33988eeefa805e26923119c58915588de526f7770a481ca8dedc74a12a92c0b6447e91c1eb6f4f17727c80bb21df47d2d8072b57f5e81a107896aec16512af9f6a63d807c2e9de7059efae9f317ff61a047ae8de2be83b54be8c7282fdbb607eee6fec294898121990b22ad7829c6d4bb2a8b57473ef845df8e7484cb937dd3c18c9548d4521f3fb5fee7ccddcdfb34e2ab81a8196a5ff116eceb887622b2ebf309a989d812f89fc0dcb2de706f0cf0cb4d39f6d5db3b359676a4b9bc04259f17e0941c0c368dd05e470c48fca76cc6c9821cda18dc1a81e2de288f09b2268b94a3fd65dd474f6ff2a06c92cee1aaf551dc92b83f176e746065ff8eebb7362fedb64dfde7dfcdcd028b4c5253b8382b18cf4427c507b77 +MD = abdeca34f0dfd5d9097f0ea9e44263d17d93c6e02372c2e8896e8bd8c32957ea39055a956e4f803ea2a341166a87edb91cf0adb758fd39eae9438d0b2cb2cd39 + +Len = 75472 +Msg = 03405c03ce1a5d8fb4030f73596050e5abba9945141cd6a6f4bd74894edfbbebc2f75e83bb0e5045e967da2af262eb3364a0afacef6862aed14a67e79102949df09fd1f11de4e16128ee7f91b917ad4b021b49c4f279e121ab1cc839373b699d767edcd65b62b7ed58de273117473f346b718f178617f9076c7cc008a853e2f13ddca8b8df517bf06380f99075b948f689eaaa2c14095269fbb277db4b12a6a32c035c221078d473301c1e383936719a42d0c28b0218954e4006143a8a3f5ebb2a3a219956a16b7da7fabdb1cd8662278069febdb90c6abf23c0bfadcca4b13f21c81fa71992e716b061ff819771c2a52aff8749a2ad78c38c27a2bd7a074839f8f67dd3c114f246339b0c3201bf391d28d885b724c268626384e2f1fa31cab0970c64a5b6ef311618ee0b4c71377196623c1f90a615e1a4901faad2b5eae0ade652fba661eb4e8d47a3245551a20f18bf757d5a926c8c92fb4020e713f93237cc0f6b5d28d0f1b4a90181d708c8beab2acac8a04f9011338d2f6cb87d286756348ddb537465c19124524759fe712458888228e7454917902c33b7cd593d28120312740eae73672fa1dca1649b65e926c2e6c4b9dc5e46afc19629af10011c7422e75d183cc28a9309e9b57f476bb61ec03ec59d7c99489a359ee9e50b3cec837954bff9881ad3c742bfab326a4d33466ad2521c8dc0c2596e9420f7b1b63f48f0a0c237f843ead236a6ac056cd107a8a8e994bd779c5ff256c0f56e6936bec970158d5cf60476bccbe8e081b5c0da4c63ccb308a2f5c46fd46991d09d861110dff949f0e927208debcc6e2dade1563881c4d68577939cd7cfd81ba8b46cdf2527951d7939728f4e7d997e91bdfe2176ec1725bd5c3d8d333156bc7b16b1d00e2e3132814dae6b0769983a364bdde30e8a0dc937babd3f8ae1299cd32a1d8dd5de15b08f8fa35ebe9711c8a3c147450645f0ea7bfad95ce4c799e2375a77be821d88be2c66180e7def4b50608504ee680406af12825a894acbf0b7300e890b1bd5d384de3ad6234b5890fbf601dc883caf994183bc0770c2d5744245ac191aaaed3f2b3074a64631bd26f0ec9b97b8882defc8560eaab957cd6facfe9df096364d12dba77a4e1f35035658cabdfc285668506b14e2090c0e9b271ce349d625c8dd94bbcdb596556213685b19ced580ad470652449fee0ff127e5bb7d18926f67850ff4298d4891bdd5a4206036e86796b258a66ead1f6d0759f0b05373ee1d1b2dc9ad436b2a7a503152d0275cfe8617918d8f1a7464cc581a9224edc0b0d7ecbd0b0fa4b506b92210b992f7aade853bccee34d15c87d5ed50113fd468a144e31d1d42d3d5a2f53b58228f5687520b074cc3be1acd4e2fcde5b6288fd4890d0735476d5831c6d7a4f3d5efcf5b20c085f754547e2f838200bfc908a66b30da61edd1b9bc333c0664c71ad9e78f114ebcb6e81f84eaec788fc89206a2945d52f72e024d8641cb2b83be39752889ed5ab472c847b46652b781e6584b0ab9da1dd3de24523ec53aee0abf79ec19b27c8f76113df3960b7ce7de0365ff66416de4fde77def6d2652f600b1246642728592097d8d4bb34234b1af06ff483f94df4f7b2f564d9accdbec6d7e800a2c32d20e759c0078927140bdfbd76f511b1af70557a0f6934d1f9d77590dd6015e5829a9c358e0a2bb0269b2ca5efd40853b7faf9921a7ea0e875f40cd466d73604e530bfa9773f0b75b77382483f03e025f3df44799af7a666cebefd0118f87bb7a18dd2243038b0de632f9122e92721ceefb7d6bf2576adc36072b6b568265f6463fc74443d69b4509629a9b4729055a507ff10c13e7e3f94d7c9ca5fd8f3699199270667f3447e82ecec6c8b6fe1e44ed91f933e4a70c431911eb86eefe222d5ad78193df67b77dbc3f23a06359e6632dfb3de74dde0e440390c0161217503973d7a1d04bb6148c1b7d592b3681853e7984643036d6108471bfc25e4f22e945cb5a7927ab68869db250117118c0225e37f3171687d53b8acc689a658e6614d9ca28b19fe7c63439eb80f37bef5ce549d111fda22824b6de7d51f033b82cfa7ed808f040e71847e72dd4a650a59ef789ada6bfdb010baa08ea436bd1b3bcc2bb5dc3de1394a6e630e115d3f820ce80a6357a04cafbd13f907d05b346695e9519c121241fd4b73a9b6d0b217c4a34a726cf547575fcc09cff9d61719ac05a9b1f6cea6a6d90946bb03a7e39e309189593e5fdb9e6ed1eeaddb11d4dd6a2f7fb55c7e65703b186a0f7b036c23547c17274de3e7925b73450b02302ee01f67ede4338dd94eb1dd301f937fa657aeb78655222dd5d38404af7025ad8fd23a4376b722896c92dbec3b73d3894cabbdd8596b419a20c2972a8075abe672145936acb6900da9dcf7aa0ea4b19ca980005302e222b572f003495a741b776036dad5f25b02671b8db3bb0c1ac4465774f4bc15524c0c26dc36d5bff3eadcf4aa6d95ea2d00423c358e83d65e71f2d11b2977f324340ad6f7c074038d908389ff5ffae6a5000b8664f698dfe8414e90b30d1b3ee0613dedd32e98d7a9a307aaa640898a4b884f748c7a6e8b30c8a6310d1e1a5b0f6a11d5eeefb89ec0a8e5d12fada647991f7a912c88698ac06e961c69eaf9da19952349ab7257eb7b088a880bf5e5a1061c1966b5bf4e412fa98acd59e23e3e97a8fe93a954fb2021487259bbc7cc192b34a86fc86d5130d70010ce6da26beaf1ebe06e690616ef6bff49a0cf81de3260cf9416d53126ec4f18b48a1589e781b0f495145b143fabb3835d07a7b2706f5f6388e65ca933d60049e2aad22755757d4969300ffde9e7807b48f8e4e847326f86f378cf240c80832a278b34091a488f50f93be8218a256b5d79ef0781a72e29b04028bd30156e502fffb5ab8dca6d9fa1a1b2843da4d7cc908c74701d34a516560b80a75bf301ffc1e7b4b943ca7706c21f1e6490de912cbaed03bf295459ae0eb21b0e1609fdda865c02ddc9bed75d38bde9f9d97bc4244308276524aa9e6940d04261ecee9478f3d91a996e0c111b5c0aafb45620f32bbf8a59d29d9bf5c082f2a1434ef5686380fb767ccf36b6b9c281da44b54290ab86d015b802acf25c4b75c202cad30c22b41fb0e85bc33ad0f2bff3fb65754f3c3f75d555e252168500f60f50defbd22f13d2346ca2261fc973117778f52d61565fe8336cbb2fc4e359dfe39df9c47cf1169f7b9a2103c83bba22ef1dd2cf89725ea39a4cfb9aafffacb0095aa9e14f1132f410d156b0d6703e60c58a8cf02a18c244847732271a227002cb077dc6caf80f6c7ea2b1c1cd3f7657952f9223c5d211278c9bed59a5f44a34c334d3e9931df2552f9ed0bb1ed20873d87d70dedf16c1d90cfb9ba6c5fda1e26c535ace2a0b826aae1622014dd05b51fa14a785f85f5ad5a046aba31ca70d8830f360e8e249460974b92448ccc2e55e9455a4bd842452b9c0ddbbb2fc88f392ab8584ce6e4f93be1df865d63e224d1611d106ea14fe3fd1f9514a6b07fbea9e569a34f3209721f4f444554df466e8f50d173ca02d5578dab421b64fa1a85907aca20fdbaba8474ab23d712492194f97d098b4542fc2a4208bcfadc55bf6c56b282d63fc520b9a2bb23457ee99a1f75b26c61c8abebe383fdacb9f50b97fc63553acefe9c62981148ed967f06da966db5a2fc3c83cb0aba53ba5e9963c9bc202b990e2088aaa92a1928d2ffe90881484f54658713c3274ed28df3afa47d35f3fb48a08ecf1d7553f87d02e5db4d696e482aa293a3fcc3a742ce7f1e17dded458fee8b31b9e583f5ab942d1922d1d44768cbbd467b9e652d6b240bd0040e6e7fad34d8f0902a5b79fb145b8206bb4d3b77e0bd8ae2d0964815389eacb33b40071ec28eb29a138645b0a6940ad13359b23c10ab4622badd6007b2409a6b8ae947aa3fb56121c98bc392f1e198c963821480048e628185c2dd0a39f9827523f3a5185456e46b74f25a689e491538714fc90b636ec54859cd27e675d24c192fe68b32a87823c03a4471fc54d56764854839a5d65459be5d87a6630fd2e19fd64860bee423066a46087214bc8c7796c8f6cc160546052dba77c248af02274f3fa38c85af5f75b0bec6c4797d762d1561e0eb25974fb1db9726e45ffc680771937e774fb23558d9cb07cff3409b712b798ffc9c357445111d1a726e9f0e694cf96289e494ac972e9451fb4aad042c1e3889694186bfaa1774ddd63e3ffc36299ad62a0bfecd1af7422fb0456bb84437c55898dd3337c635c3f77697853954509e62c28e989fc97cfc2656ad23bfa3be4983f337e3e482b332eebc4119cdad092c8eb933092a8d04ebc0554a7c222ffbeb93e0193fcfc7d8eb4c0f03a2c0289c6ce377c3fa764cd8368415e41fe8d235d40fc949eeff7bee1398d6a6c91aac5087e86405128cf04107faff43b31973b62b7f1590997c873bd55b7bf335e4236fa526e8c3fa735f8583ab792ee1befac4196c2cb6e84fd408571c65af8e26743fed236cc3593383ecd41eec6f51dd4ea8c65d7683827f499cc163fca57ee68709886956ced8d542c022dbc1ccaa8159aa59da5bbf1014cd413cb9a89cab2e44149e8010ac1f5f8647946b5e0e95af0211fb6b433139174a3df0a4d15bbd0593aa56ee0025d5dc36cb53552dfdb9713127d39996a2a68fa7d904aedfab5d745c11d83d9001a2513a9286219460bfcece320aebbcdaff84cc5da05f3a54338187924df4270730c87ae45658fd004ecfc27bc7ea1da1ebffa111ee3e4a1ee637fc75dd9c2c002448dd0beb81cfa60f7af34a331c21bf12060d3c13d378d11f9ba302afbc09b529da4d4e6c247218a9d94ae7760b31fb1da4fb283aa62a3485b76481ecdc25ebe585b2f402ca4e1fc5f4af99b73fb31eb4de501b8940c910c1922839bb85e86d0051f246d4facb820bd10ba91e3f11f07ebef55e2828be2d7a34d573453dba022346f68c0b3c510b227a445fd493b139244bd23940e6705359a65577b18f0371f66da60ece184880b3f7440301c3fdc14d8dcff3f903464a05ef8e8d28002b8320cdea13461718aa654ef1ddcc575b50a28dd5d67a06aad927176afdd21a9a004a6eabe59ac02951e18935355ed835adcb52ca28ec7703ca6727d00ed664b9b01b59cfcaf39be33dcfb0f752dfcef2a16fe4983276dfb8e36c26a7095d66ee5a3c95400b7931af35d5c91f7d76bffaf4364c253c41c433eddf1cd9368ea9a2c8542ae4ef5309f3029ede94fe4b35b56eca915b8e75b1dbaf67114ddd92b43ec00c21a5c0aaac186cd0f6401d87b78bd6d0bb206f392b18f3ad0eeb46900f280b0c816ac4a5a0873b141a0a2252cee4f6f3d35e29b5bc527f591a9bb9b143ca71fb521a456d6fa7371151da54d3002894d9e0fc0212ebf11c123e457d1dd78bb9819d9f8929a0df2870a398fc33d8bf792aeae24378405d928081d1dbfb53d2ad4769e0d902bc99d5d8182c6299db116d8ffaf8330e44ffa94ceb271b73400913f5bec57c204a3c07f2b97fce2e938638af16261cfd7e3d291e843085af2597b433a436bcaad23086668d77881a8787a1344954446c7780d99d55d260d48ae458a7241bdfc9dddc1adb9cfdd7843f7a71c3986af484b531827265f6f60df758c6fc455c2ea4f2aa8bf9effa059444c970070d50746dc2b6ec45bc858d80f55bc8d810e2f1649901a0698d5458741dda66a5afee0c4e2679dfbd63656e550b5524e48b9370305a4922d37ef5194952171b48862c044f67e023826180e1b5c2aea3c7c058f231beebdadecbc38f3e6ce757969bf3a39a0f557f3dbebc2dc8a1ce0d29b71ac18e4c4d8d337ba80478f2b1e137f5293354a63fbd9683039cb5301d2ab477bf23708dd8067a968bbe226cdf82d49cb8faa8b206a334b73c74a5f704c20e083061ff07f40c5a2553066262d80215998641bcbd11fac0624ffebf7fe99cdf7256c262440a667b2fea24605d0429a1f37d4fb84eca89e18c23822c4f3581d0bd1890c2cc80dd86bc376046e5cbbe21b2846ec5ee981a403ea24813ef513988f25d114625c03923d522023980958b3cdf82e40b23e3738480b3979de8a38cb0190f8f17d93042f980935163b8ca569b8161fab178145d56583eb9f1c19542f03815505c703abfb1c77296ec14d2e8e5a008f8df7291a05ed02cf439028e22ef59579d3e70457af2b2a71afc1c1509c3445f26bf9bc30443ef63919a34f6f55683bdbde563b83965481b22b959fc80dd764ecb767a1251aebdccd73ede3483ccbf2ffa78d0fdc5b291b4f94e52ed17da3dbd312f97e74e46434f104d88b294fa14959a20407be680955be6e18f519463a2949e107ba8c4b488d582eebad7f0888ad7e6043a9a63775df9309b9991c01facbb5b41adbf7c9f9444774afd0b5e1d29dd264d46c20640f07420a3f71363b7631ab0ebb5923bb070863589d8b6a861fa8fa222ec5b958356b6fe22314145d2cf9ae4361c8bcc8f238104d2d44094fe04d6a1acb5cdd9e798a5123fd0822d19f92141496910f6e3b51f2e4d7712eb994f986d1228819a15bd2ba3235b3de533e8980d4d248b80542f46fa244c9274dde4bf4c7dcedda0b5cd2ffaf55adc33caa4e89169d663338c98e0af7cd829f96fca3187152d4ab26ed19860de56c6e08336f715c60600d730f8d49680a53f40fa09d86501cf319ae8cf501b06d663b408a5afe18b3cca34eb580af7553a3d1324aa9a306a3cf81eccd23e7394621b7601f9f73ce100291162bf6a1a261f893895b4612e77fa0907c2df4ab2b08256f0153bb670f0db85374035dc4619dd8d77f62f14a95193ca1c71005c1e84bf7ce8ed72d6c3df54466f2bc248c456fbb09aef249be71f8fa527823c5c0135a0f52731a63e7ed7f4d47fcb6f96dd06015967279ade310a7401ee9c9c32a1eeae297588dfd6e8ff41972fca43aed65177f2a84799c4ce3acc453b6826c747d56f81999a26864b80c5f849cd4778fa5ee6e223f6293708d61edbd48ee4013a126d635d108236ed81085d937f81dd9056d691a1dd531f2507f32a81b5dec9c4ce30388792fcce182b912fd785fbc3df60cd67e9a41e626ef4d29a0c851b082b313e69e0c79b3612a6e8d7db8abd1430a555ccc5f293e92bc643933ba8a3a4b862215c30586757231995bb6834cdb6cb4df528fb6fb89ca4a4ce7dd8c37e87b38a617b3fec681795ac2045452b3593f87f36e354c4976320b7fcc0a981b59764d0842dd42ca75fae8912dc3c18fd91ff639e6598993827e92654c477874ebe125d14d9b9c02b18b8d5f3e713a32b9a2722b7168f95a1ce451a5ff2098054e2075899e9b44ffc28f9bb49d09373c995bae4095f0061dc427dbba3b02912cced89ea99c48e812379ba619efe8431de69fed01aa6b5a5f169d830aa679de5c0c6e13b9ed20f00a7f142ef79d9ae8473003c0f75547408e62da0a2fc802ea2375557722f7bfe71907adb8e63c9d8158f41bbc89fd20632c5751b381f61a4f13a8232b8d527247fe7fbcb66e336cc8c3a14c524218733cc9628931b9d74c779d035bc34163e4ad0b35b5b9e818850907c61a04b84dac27e5f304e72fe205fe301563b0f7d28360cfc84d35ec5272dc95e10956450357def2a749566c8cc33d6d5cdf8708f4db1dcca5d7bd0387c2be0e70aec980bff2ac8fedcaf1f85e20cfb55823b80d61682e826ce9a1961ed117d2035ed0e3f9f92b0e450e6c4bcc9b2fa885e4c66d9e973d717bf7a64c8e3a9470f7ae0ef737f7d50e2b8807ef6e9ed7a7747724b202f4a51a61861d7f6c7b9e7bec20c623006b35003fcc674baaa85232826f6573451d000dac1989a72ff0a0435f3ba90fd9cfb574c0500cf9074419fa5e420b19cb5cd89bba367d6c4f564477bf632a062a91e0dc7b976b600afea93f6673882e0c5099751a415b3750f8e5897b4bcbbe795e51b7b016f5293c348aa219986f189e84bd0a5adec580cb752de9414a00915c9152970c635cad018238a306152271e855cdcbea732ee1154768277fd25b173ab79deafee0e47401643db2aa6e34c27060564a478309c0d4dc3eb4a5994dc8aa4d8e33f6243f169267046185282872cd20c10600a2e8b870c01c1150f35b1e01df9df280b1befd5ae7172014c7700b6513987f94374e207f8f8aede075059ff7ca57b73d0e06a0c180f09ed7c0ae04ceb5672770d49ca15796f58af292dfb6f2aa45f2798d88994ca12b0e5ca834f77082978e34ff76b3af730678f5d14c0b690be324c4d4d75f72e4211ef1e2974be107c4244f1c4ecfdda0184878b4cd05e15bb9debd68555bdaa66d416604578a96b1577a2daf976e78bab579d9b1e52ef2062470a1bc9526ca848a15f781f82c081bcc005f4dd307f70f687db75d26eef1b7cd9b40460948e8fae1ed44effbb8cbb3bc57626ba434df2a9bd4901b04ee86dd1faee799442aac761f67ccb2d4b947f592dfc58d6d6d9798ea0ee28ff17617e2953c262ab8549b829cf5fd5f0596036dda1a0727b12ac6e6bd9d2d009f4e3b64c8b37a7ee84f2cacd528655920d794990c8695def1f4d37090ffde2140bf57d024b5530a5682d651726f8345990661e3a4b5fff7a24443e30eb784769841f3b123b25e5185882f1cdf3bd588e0aaf1fa3d18a4166491aeaa7144ae55088e9584502aeaf8e7d7ad6b863deab78a2ddb39203f30bf9b856a238337ba6103fdc3c6349f97451fe9c7ca01c621461817741d089a1467d9680d0a9f01471f3d07f4f34b70c1ea704714b4dc6517a8fcf0533260a9cd8380e20dbc3f21b2d3f635afa7ff5f193d9b780ac860ab4c74bb310f0592eedab7345bf2b4ee29bc43d22f6a30eaab0bd2e3e5105149092e2dd551fe0349e9ba67566e4281267991d3533dab4a77f4f82f0c26cbfc0fff3b38ddeba6b7e02aeb08897183ad72a1f206fbe8e93131cd8cc656a5a4350ffdf22a37669f9fe012fb3f200e2c964d334b532ec9baa1a285282d75fa2f88c3a5f176644b5f27d442596fccbca3d8209e1c4c8e4885f834cc68c8cc8cc453e557a7a1f7125bec3739841ee1d58fef9742d3577cfdd1c182f3bd2cdce60942cfb3933172442c59835909b1021157491bd20f088d523489f7ab93be199e74c1fd2a22a93869270c432168ea9fc8807118cc2de431de14ae1d449b11250e9d4df82c048debf9f250e13310203d93a2043881ce5efd09f8ca6e6f11ca61cec9634b498733ff6f14d4080eadd64deb125ed5a35eed515e675b557bb62e6247af9e6103494fd540e512020480815337780d8aa15e23e153c6dd8d0af6c1a911a65bc3d9b9461008097779c536b5e011497cc1fc5a770f82cdcd5f9d4228a8a554280e4d559b322cf890c9b13ee86700ed491614c27b4e53b2a7579326c7d38b1f9f8acebcd3be4818ea9c6917ad7a7ef9eee19b2485104f3c080f9d1333dc2b8f0ed3ee4d7406c200d14c5d4f597cf3e5cacef00f4917edb04be20ba5d1051f2902641c85e0ce23470163fe4490f0f8478938a3d12ba7b7b5ff797f4d43f0de6416d5e9f4ce56f431e77ddca5c879048596b93718a15225c3af205877e111d1c6c883d7288143bd77fff468d1847791267fcb1a444ea9c05fb78137c45d0aa1c77408548fae06d77fb7622356396f36b0a0e8ddf278111fe0c5169da10c2db6fcc5dde2a8a932dacfaa31bcb27be26d9aa68ce291d21a8d0d345aea9c631d99cd1a7f21f2074a5fce44fd7554b0539e6afd31d8b0e138902ba1c8af15163cb2bf0e6662fa4cafaf22142fedeb7b4551a8117220ce0a0dd1c279da7bb98a1daa490e1e562fede57131944396b5312a1fc88fc84b47c0ecca78491aa0e83322e90186115c116f8e2e9351d3006076946142d4aec8bcaa57d2a38c03ef3fa60ee77f22e9e53d45fc3fbdb948ab6bbff6bead6c8019ab2af192dabf20971e57143df85102921215d23d17473ef84571e3907ed3f6ce81d72c73845efb3902cae545239cf5e31e3382af469800976c30cd8f2d877d47df137b0d46e7ee558b85f4a577632e48d0439ffeb20847d97e7116f330138e2621846fb888e6947d26fcc4c77a402643d6aa8cb3e0346f6ecab772653ce4a3e9e78e7d1dd0d7680053a3c83382b078547ffcdb57679901a7ff88426d9a9748f39fb625a5a536e39fa02f916257409f0b5a9efe61ae9289157b482974df97f7d3c88febd87c81819b7ad492ec3e5d04c8f525885b2bdd7047cc9b7a1382534b2ae060523ecd53ec9462475f39ce72342dbe14ebbc65c651bf71d6c6a209758d3975fbdb312e0a6f0af50c48c37e3cc7aa33e1ab0df2e9a7dcf9ae81d90b6b68b007a6f9680531937f81880221c3f919bee51048b849b3ed30c2775e00dea157ff03f62f3be945f462b63efdcd4653b4ec50253753e0b18c4b7ab59db219b3c5a6f96e0f3550d40c44f1b5be3e6bb923a2f39519594e6f1f9d610dd385331f4c285672fbecc2484596d270a5edaab5d0834de44140e949119743d491c2b14055f3b9a987bab43f2ae8c6f4576399b665fdcd97519347dc0cd961ae5b132ad37db981763537bd1546bb4db535389f573e830122ccd8f0a46bd468ff81fef6252dba4c6d86dc2367038ed537e1c55204d4a3771b157a6a1ea908b84cc8eeb9c1d0a68903ff20bd90ebb40bf0cfa2284bc2ef9df4be001ac75ef6ee1a725acc4610deb5bdf09db24f89fb40746147a89873c7f4243902991b081f58ed20cbc40e68f361101dbbc7ef58a52137493e497781bd084e18ea5ba60ef2a73956ca37a74364f98ed8f354fcc2521cbde9ee9165574f48b6d03fd8d50e01579376de7d8d3aa40daeb4ecf0046172918cb5e0f6ee7eef4412f16ba7447fdbd86023612c4ca9411bd434010f72b0872e085fae107f632d78c6ff063d60cee2a833cf0aca5239cc82b3c8c829d43a2050d529be44a4ae7a55674b8801a685a64592ec23be3a4696f0b1f5bad5a558ae9857b69a29daab6678687979aaa23e974ee20d549e616a40d4434d418972b6b2632478ba269df472404f0b538ed0544612c5a505d1540f4abc0c3204bba8bebc5fa002a6c17b241e4b8f739e24bd61333fa235c00daec0250661466ce2d3eb2cdc7ec6d890de84daf8ae44c202c5dfdf23fc521b89ce076041e6fcf2a560c694680557d80b54c128e62fe157bf863aba7e586c610c4e5f7cfd01b83e69fbcb8380d8181d976a53988288ebd7a17b0c55ad3af748db8c32dba6461a98a6f1846ac56b9a21db7ba69a6c4dc6ba6f20cf211f18752b9e142c1ccc389699e2de6bca9424408d3e2544bef1e304885ef3fdad62758891ba72a5b0ed3dbecab43efc138bb6cda835e3b866b1ed27ca1771026b05d68403b7342a2867d9e5a3918fbfe60a97741b59337c322ad092e82f3487ea87b01a0a2ab533f3eaa1cdbce14d21b29f2ae64f2e910aa1db11f86aec9af89c46969d1d7b925d93e409b95f49f3bbf9b7f596cc1c88de263135aadaf630df00e0fe8fa620380198c2964b33221ff92bf38c080ab987814fcbc03cb0d272a5a8e56c843ccf32ca7324bbf5b1002e63e9c052ac937c197e7f19361074e7fce704b244fd59ceff02a3890f3b617aab8683acfe16eedabb304497fbe8afcd2c0da4d63c7d85a61964ba4de4aebce823dbaa27c2b9855be93120c6a607c9e87c93f9cf976738fb0e4b1801f0a22bef03ddcdbf6516ff86301ba423b9004bd08b14841d0a5cfc244a304d43a7c856d5d7f76ed239a1a5d00c3a4f4da964ae0bc409c43ce9b147b859aeea617e8396532cc2fe1ed50c20cffa2772a2eba778f0b3de4aadda26942db9315009e96692ed5ecafbe3bb98e8ec666dcea2144b3535d72c77ee400f6a0ae5421e9b7cd3b4eb0a79f8cf41fa76abfd77a3e9a7b25b21aa5eec8cafee41c66a7bb6a4ad7d74f29c5a75402c8342850bcfa2d82a9f636aa9f009079e45b3f6b528b893ffa66b9aa0d6e1d4cfd5e51e3df03bfbf144d677628a6dcd8fa828f251d38507e7f10129a489defba054d6cdf063efd3a0453cce40888b6cf878296fdd26bc7efaefce4613edbd2342a2801acfa52eedbc330ed5d064d2546d583dc5937cbf57bce53b667b7d1cfa2b21898b283e89b8b980b524aeb9d32252aace8a21601e208293c11137b27edece644ba5868a80a30ca0c84117f22e354cf25424135b4967f05e07ccf518435fb0ed5ee08733945b3a25d0a1c8a8142bc0c17729c5c8d1ac9ab677f030390adb572f2bd2a6a4454fd68236cd1d465574328aa001d553375cc63f8a21557f45f0359c4ae2416703df56489339a247429d26d05752be750af7274bb6e6e165853ce0d72495f3f660a82ddb4e6de4456c0522151592dd989d1a228d96a76086390fcd4251643adcec38e1dcf0d04fab424a98db5328df488e144c57a1f95f4be1e76f7059e39274f6e006a0030760f365ec1f95a8ab200f5ea3f94c51334a3110525bd3968a7779115c00d6fd89b4b837480ad67e804c577f17ddde3d0b9de034df070eafcf6633dbfb54e468cdb754471d0f005d5eb0ab700e5e8fcde8e6b3cffbe563fe38fb4fb75c974aad59e57205a980c5cd8cf995d1e5ffc37c31912652379b961a4d831723ee3c9c53a4cb7c039c047937918381054d362bc09c49d26bf08df77c73ba44b22eb93bf434d5ecb152fead3402eb078a92963b437f6d226dd5311aad51fd32d29ca1bc0780a14eaf7cf3c43b67ac83e25494547d6167b0e8442962255ec88c15c66a9ef62e9a0c5e687870c62624a0ad01c509c6d8e5e85bdbdb806cf0989afc2a884748853cc03ea3f1155cc4ffc83b388cedc84c544348facbd7ecbe09e9e6378f67872b15e4d0bdf24477daaa852d576052ea423f4c202f7eeb4d2d8913648bf4523a9691f4a5250060afcd9141f3ecf3ebb531038d81e8693cd6b5929207863ba9cb4e5d7a3c678ffc5d1460991f779c1aa1cf4d61eec41f4f41fcb2d04fb4e9d0c1b8b4eff704059a085574e50075ed6248437973b7311584f75976689da66369a67c54b0756905ac49f76ad057665c551154143d8bbdc0906f5239c581c95cc6f1ffa986382514c59a70aec584d75d558567ba29ccd8c4d4227d89619c9c2a9b2cb91fbbafc697586267bd4f093785062cf4b7b30b0076d2b941e1e73ead5138cf4f43db4cac21e74a3302d7650557c96091a983b6c37b0e8c35efa0e86b55325218a26faf6438e4ba693bf918cf4a21d8b51bf660a0260a23cfef393a54cb1a4dabb7d3488d30f32b70b51ea503d091edd56b9599152c3808868d1aa4f8174 +MD = 956d5ca8fb9c84cdc882eb0bf3f5ff0a61238f982286673bb9185a45858ea13827dee168b4abf313a0b82aa5e98d2a01510dfc9e2228c657425f2941ff0c6d63 + +Len = 76264 +Msg = 204047aeeeffcd141d9ac8fe0c003df086e2e352a20d2a66e7f77d7db497c46bdf7a2e389d142d18a254c29d897bfa2c752db9aef9c8b68735f6c7cc427e5fb0d16054400e20e651cb62feb6dab7b3b6bab712bd77501f51cb5d1748897af8383b1743300acc01a5dfec04afc85d6f769da779e6e34a6dabf055f559503499ea68ca836e59c085fe281c5df21b153754662573940661a97cee06ea67615449ae9f9f9a64c3a37a43ec1890e59b8612385c5b8a2ca93bdaae0b977dda8281116c27be1278101de95c740825f20f59080ac86f4517928008289030371a7c63f70c4950731407d8d9300815a480413521b2f2892cbd8ad93bd2c5fb9f8f17a306774d7d439f727952a9ef6796f6f7c3661822d2c88658ee7c94f11d3da21ae943937b6c0c8117ab5cae732583befaabde24a071a0dbc666d2565dc199b94fdcb8491a465521be140028da77f13f129491bfb38f3d229ae94600520d3c3e7c256c827432a7e9315c45fd6d866ae1062688cfa55425c59d21df7a1629ad976a6c6724cf598940372c3416747a750ca00aca3dbce7e22a97b3a5acf13e742ee158b21874e3838e972cd35b377b9b28a6e85ff24171fcbb504aa07f2d741a69a9915447abf71d3c1a032cb4fdaf629de16750d57b19f9de8f8cd9d911f226b289c05598bcbde0b08859470a104155d41930a4cdb40863fd1e2157a4e4e120704a8dbef2ee5e5353a9d82a43b657f93316eb63c43265c17fc3b222c6ef68900ab49f963f8a02ff8d4426df49381ad8239f3f96a13f599ccc47e743297ab0ffea8f9fe566d8d06ac723eb6e02deb1790d7ed4444c210c7b4c7167c1b3cce1f577a334b34f20f11e670cd0dd58ef446457795375ac20a5e6670bdba44e2f22f819b80709e2aa8da3d7c87c3632b5fd226b596431ab864d6585dbeaf5e1e99b923895bfee07bdcb7f7d1f99817776023aafe5ae8130992b810eab3dbb5343754a3c03056ba6a3d33cc3d8ccc4117b7b348de7da6c24a368c16a417bfe8e85d8a88eca8187a7a2ce6110bdbf09e70c91996c258ffb6dea2bae01654dc679f7eb3594b2da4af203e477cb941a57e1706befb3697635f4b79dce3be15b1cfce1d778b783b9bc6f0e3c055e2684b7e7f133c1cc793722a151e5ac817c4c07ff8ac3fa5f04c5e6070aff93303ba62fe1d50e941e1d79ca5d022dcd39fdc9906a3bd841f5fea7cfa04154aaa99b28cab76526f2111fe4360e109abbcd2d79be253c3ed7df39067f23f964d1310db18d52e9a3620d46216d9dc456fda3d4059919d51c44877d8bff797b5690305ae98298a9ad6d7a59d877f366891b25ba14292c4e9a0e5392de56880f536f0e4a7ab072ec6a99c021b05df63e5a9db9a64f7747eee2bfad3fa68c3afc83f733a5091fc8fc0571476652269093f20cc9615d8a53fe19defc4d8baa768c0daf083341d8831fa47a78ef66daa8af79f0bcb4e86a36c66af4a88537b723051a1ff3bcc7e2899e703eb986938226d816cffa649520da8efb8819ac4fbb2bb0d1d05d074645c4c1904473f18124f157f133eb3c0eb3259ef422b68d7ebf75d55b49afdd640a1bcf2c140ff9d9cbf37433a3f703fb2b013d7e4be9ef6ac9e9bcdf124f06c93875126e37f366437c137604a88680039155b5c1891a99bbe46fac86b4a74a1ed7bcd07c348900664139a78bc9007ccfec094ce467af541a15efef78b61d710bf0d7527e93388feb214d4df18ecdbf0744044b0f6a11e82f6651cbdca01b423789aee09ddd67da792538b15d7f551152a130fa6c1ca81da1de7d89dafb08864bad29c1009980aab953e01bf825003a580c74a02004dcbb18855c709c4e4c05ee61303fd14feac753b52ed2ea073701c28cb88656aa16893e64d4ca47214f87c9afaba035870df9ee530a205aad6030382ae4f53497bc50b882cedd06fd78d4849e822d56ca510832335d4b70a0e58d61ede133e25238d831e833f3ff6831b3c6369d2e5c9f1ebbc95f0d9c56672ce1e6dd95888963f0e94f9ce9525aece2ee3780e4eb6f8fdcdb58df045b318a9ff36e02e93e51534e4bbaa8da424011f14b808340abb521f3308ab928d02c92a48da265c59c61a9b8c51b13ec0dd95ec793494897b859ddcb8204f763436c06a5752a0d12e9e2ed98211ae609fa4c5bcc8d39d5d358814bcc9971a19cfb1c6e0974ad02b66efba855255e281850c2906803f934dad456f45f3d77bdbb4162533852d44d9b73d561579a90e10158628604bb316d9674ff5fea35be55a75d663b9ad746f5a73f97a00647571aac5a55c4067f8886ed7fa414d74aef704a9751b197cbab02c41c6aedcaf65cda019dc2d2d815a689c93f6f9c8c44b2178b364b3a97f5ad7dd95076d10b6d4729e86bd239e045347d11fa867e73ebae5152847b60021ef26dce24e2d33175bf0f490aac8088d9da6badf91142f2068c2687c70aaa400e22da8be0d77ca4d66c950cc37a2f37973f5a84843971735ff39e134820a0b98de6ccf7cc7c52cc58f7c219de61cf54490c5280e225925dbc8cc2dc4fe3cbd563e64cfc30fadf12c3089f58a38be749b5e85c885dff2d18e6ff99cb247eb2fd57c961815378abdcde4632b15a20ff7da47c7e853becca0ca5f32bc80e17de973337146f7e1f3c93725a850d4a479f58dd70c25dc516f2a1c01181bc56d7d50dbdda6cacf9171ca047eba052bc2950422a6b30f943a52c3f0100a28d45e521c5be5771210c87d36925a2896af8ee99a35115cf41fdc1014e2e689625216a4929fd592bb6ff97e758d4274a3b46bd03e31b17a71d3a90f83610f3666a328dd69f4486a3541971e2d41b21ebafeebe156a5019c076443d995f6f471946c2774f915986e0e1a33a4c44c43972ad371b57a1b8c2233261ee6c31130cb7a0174f3c660502ea46e51dab129516e91c6bf951ee1abbd73bdaccfa15c3eb495f7a3e268610a2ca6c274089a5576157e6d0838cba40abe477f7feca71498bd66d336c9459420d873ab1cb6d65d1c1c5f2aede8f6ef03b53d0ffac64ae6b9666b18a000e4763ec2997cae7e0bacddf3a284f35e270f3132b2d3c005135f2b10213c7221cb83ae6b96dbcbc690c1162be70faae0e2a11da7475f420186da586b07b31fc471490a43da3cd7190c367f359b2f6719a0211393692703441bd4ebd7ad111b316c32dcdc021462edd47953a14d68ca70e62bdd77a6bf865558fb3fe68fdaf72122dd90a47cf6f1dd90163def6c40478f3b1db5d47e8d3dadb4a9ef081e8535fc1ba5c03dc958f630b579b880865a60bcf573472a6f14bbd5b55d53bcd7845a2add37d5f865bef2bfbb203df519fb9892dbc90bf9e6ea6335d1a20885496cc645ede05c74e09d89b327b658cd95b87199248b7eb37472d666a00497f1f2b32cd5b45bde23a8790db37188736a88256e48863709f7965287e096f16c7351dbd042c6e6a5955bd5f1492f33186c7fa6f12967584836daedfa2c3cf51099e56b63259c3d7d3a4938f6ecc722d233dad1aca45e6bc3e1a0b99fb1f89c0ec63bc657e6aaacbf931f267106cff42b712819f341b1ede798964a0b1a5032c198b391111e88d0d7303c02e23fa0137e74e604579a285b2dbc0a23aebdda65c371eb403125bd366e822e72dceffe0d55dfa3155c16283020dc9abb0d150da1aef251484aa49e49e00974dac3a0203e4c11edc1733e28194b6ac694a8d85082ce9a643da013c287d6469dcf28e8bd42cbac048d3f8aae5317f6fc34f4404965bccac284d3ebb07cbbca07a49f322ba74f1ea5fd1374219a1101ca0092156ee6f403cab278a4fe94faf4511f791501d860ea30858193383ac10baeabe49027630ef60b4ae0c7e36d2e65e88458f9c6528b8f42bb2c6038d1a285288b7e79098667e1f2b2cedd3561c09f6c77b168ffb2397e3b125653d9eb2ffeb623c2189bbd89882f8e754d3b1f5bf12b6e14daf453e547b80fa1f661d3d3e8d60941f74464fe38f04286a08af25b0bc3dbf5d87ac4397c181791b0874848c406a090ad9a3930750353656f9b97385fb445c6d9c99f807bf9ce982aa0a4c920d68e10a40396cadcd745b412e35a8e6d8b301a67872274d7cba947bd54760f7fb4265463270a27d0daadd53308d8c7a5972f630a2a0961100c1c02f1093876413e0dde736b0fc1e18bd05b38627e7ea89698332a28c0efa549bb6c5e35688815c2a9114d5614339f6971b8ab86d81dd6d81f0d4019d56b07f2ebe66d6f82cf5de09c8f696eb3f75b01e67ff4fc522fc0fa08440463a38dc89641f3a72e13b69a163ccb501b7b87b4c3c303bd29991ef76af889bf9cd7a267b2323683e7a7d84ae22e3789e2b76f2d5d8c066c950975daa974410a2bde5355c551019c329b9ef0c2c5667f6b0408350d95da7bc52fcefb43e00c4ca7241b234e12f748757b951c36b6dac90afe0d6c72950263407884c9b8e04e2f85456440bafc8a2146d4353dcc56f6cf48e1c9241afe10cb9d7021c676e9790b5cbeb94eaa723caf2d1209d5e24a6d2abb7bd5fc7535781d12a340920c503f6883fca49d8b18715a7ed18d6516f58033c908be760fdfcac0668e4b9cf7d8e3ef918b90cdeb53eabbd28f2a6bd8ece2a2f834dcf149516b6dff9dbd47c7d818d90be8185039b8eb3bce978b7ab68506d0df6cdc2eb03eec6e445e1032dad240ed699ea5b4f4bc0552a9a70ae22e725f45d53d166ee2fcc059eb5beeeecf5bee65211bb37caad1bbb91a2a3362bf297e8a70122632402f79b94af393cc03d99408d8fbec07daae90a7869d9f5cd71ec71746888629662b9af4e9c1b95b26dfb420d79b99f6f28706d6857d993104d6db64af0ca0b4a38586955e52ca3c86d2d145c39757ba810fa0ae8d46db9fc6c62e0b401b2054a6d1df230f0340b0c2577df0235bafd314bcd0980485b0f9ab71316370306f99ee750726727fb78867e20cb85d74fcd11c03193b81b6c3cf116c7815d5e8f8e4c90391083f148903d5e72ff6f86fe92505670d019b568e90972c849ad7a156d5e4f20f50bb5e5fb39afb3a447a98df4f7f7d1e72a7e17bdebb15c95afc0603ddb0b4c4987dd986282572ce196aac59d0d8a9b0073df41619ebdcc8dec9637a7ccae063380d02a6d214025dfe3f06e329af617457d3ead7c2a7c605beb656353381f96db7df663c31d50e5c5b6e3505ea7258ddccf0424b798d85f243496ade82746446a06b70a0d7e71b6bc97eb32c73afe44edf29a6ebaefb81313508fda0fa20b5808a37be9f24c8adeec0f70de155e6986a16c66532c3703c24dc6bab56faf5619dcddaac61b9082a67ca5da1af1184e991fc7d29bb579a3b5fd1e7e05b1590fd00f3bac6a2f52435695e291af037295c6908a450dfebc7f3449e142917ca51ec5c846e99dd798b4365e4dfd65f27327551c3e2772af087f8659967022799d6b403084ca26bb6cbd8e006e87036623ea8eea6adf9270658bf556c56f804f48df896f7fb5cf82d546a5a2cd9553098bc7b92396d735e7dc8bc768f7a773a7ae60e7acbf135ed5dc37c46df3911b80b2a61dee4b7623bf746745b6b280c329d8d7a410ca4d9c5b8778338967e12476a17003740f24239e3607b7698162377ccd2d06c22ac951bde0f23a1db1ef36915e0bb3dd6d49ff2d285465a8e9b59949954856ea67f145a2ef8b21515a211979f3617550ea4d7d135434969c74e1af373912dbb2072c3fb3bb2c2f4ee9e194d7675991f5109966f8c290946da94e42efc072df4094e109984cbead3ce6967053c3da4ef5669381867951a54210641918324fa8bc967a69f8aa27e343d9a775940ecef67874a49863815d1243328cfe5b98937f4f935e287bde5119894b7e6b43501ccfa5c3347137e29e239a962cb760f925ac2115f50ecaef229739c4821a0792ac22a5daacd6aba4fb1f6cc5ae0dce5ded7759a3a7e28de584a479ca1b4a89db6636a041728d66d05b50e44578c84eccd3281fc6dc6e6bc85e8a71e7b1c271333255bd81f05e116ea8fc27a0f4b0874fbf069d04fc780da1978f4ba2ac4b66a2f8c524218d135484c96c605d888c22ed995af8e86fc91b7719fc2c8375ad1031a0cffea9b072d61ca6e8b5059e26c6af496c5bf79d293c53cb193e1372b018e712bb73a2c345403d27b74e1f9d441c9bb784ecbbef5f183c952da9d90c1b26cd36d1aa932d5239f034235433edafcbbcccead3bbcb35583a5f82955eabb8e1e9f459cc0456626a3cb572efcaf62f7c176ee5397f9a71a455115e2928b84df245359a007da63c7b2992ed466b1f8cd7b686bf4690c5dca396940a8dc199a300e9dfdd6f8785aa13bfb3dc829ed28d83a0fdbe2175b23efe04ceceeab1b882b4dbdc6a40a95b72da070087caeb77fb29ddb92bf3b6cb5f5da8a8f1687e7cb2b62512899c6c905d7a08623547db749e7076a44ee3dc770666880abd2eb24cfaadcf6b82ab578c3398cabf3021f5323e0172a56e1a6e1dfdc4aedd7865d4922342dfce9c94f2b7bcdf5601be7fc119a383d9a3d4bff4270a1d22076b346db5f61c5f222080c57abff4b30e2889c892949fb388c9fbf6fcf61aea72dec4041d38e456515696593b0682e9d0b6699103dbfd093b93f6fd0488621004183c2132b441cd4286ff3563572f012daf44a5d53e44e2a47ad790a78a9e9ca763c54d5b31dccbddf8e2e15b7ba3020f5d458a71861d47abc8c7384dc275944205870e03765c580af468e68a3a87f45d0691ca3d7b2f3f38c3ed7c5efa9002bd47a9ef8f4c6a7cb1c1b9cb575b83e0fff353eda3e423d233b572e442f896ed00715475687bae40baa8fc182ca83ecddc6cb1790a8aa00884e47df86185305ef2cbaf2af6cbcfab0df15a5670e761c3deb8d3f8da364fea139937412468065c7d9de395a10476c693e4fa0c8ae193caec21e2f17aaed77fc81bc746f16bbfef882e173ed2ed4a9832c805c2e45e7debeeed06ed54bae2d08cb4568f3154031ffcc774aeef4ff429d3e7a200e526c72dcd656673cf2415e345aa0ca54dec7cf5bfb0226c62f21b815f87fa4ff50018996fd12b0b53b31ac2dd46100fabfbd078ba314800919e68a9bcf134367cb51835bd797c3d482e99753ad08b55b549a7b1d5920ef3e61b82a8d46d793ee20e700b9fa48292175e39024690a400d29daaa6f91a9dccc73013868d42f1ed90d0c823fe9c6591260ba373e7cd849769c080610c121d139ea7c04bd1bac3ceecc6c783c0a74cc3defc7fd007d152a2e47bd2eaf7c2b651d2463300871b18665fb71635cf0e5faea7fb741f8de237aaaa944847a3728e0ccbd614ad97ae173f526a5d411119c8dceace2a6a61495b3623d38982f76ad0cff11e0a58e8bbe9e02ba843ad700facd50d3e4ab86b4ee5ceb7023ea3daf1a21face8be0b648ab5d154397083d33a361f7a137c129338fefacee70eb036512c8664fad8cdf262a49b33e58dcb21e08b449715677fc151cd43d04ca2b3f2d0978b811dffa77a8ddec53274428b444ad6ccce0cb407dddf7b3025f7a1b3f6b70bb76b19db9fe5518ad7b7ad36cd23c03d3d86bf0ab2cf2b2f4a35b0b4b92a4eaf908ab615c019f7d0592c591298a689e82126f712897f7d1217694183cc76dcaca047bc550fffc6d9d4f8407df5b5ef00ff187c7493d51d4c212771b5f4c2ab2a6f08f242967f08cdd0832a20ea3838ad60c316d7d8ba5204f0d807f339f60150833621855c8203d4d335dfa28217ad16cb8f8de3611465620ae5cce4a4fa2746663a11c669ee0114677626adc23a9664c8e4a84135cd9e8ff9b488313cb66535a07a8aacc6ad48b813aec9e6b48a3bbedf2a30995ccb45b345af02810a120245b76054df7aa520e660458ef75fede34d99c9ee92dff8a2f5743d047d14f7489d355336088dc0d3c6d4a33e88cb4cd8397d29a7d5c53afd7e10c554cd644b7d66a2bafacf08e4a882f930a140019060a914b3260a167b9d76a1b1bb1802f8eac784ff66dbf2fbe63f57557ec8089fc4c5e4cd32d8dba2cb04ad680106f4e4d7e9658943d553ecd62874789ec7e8634cb777e092e71b97cf50be52ee4044f98bf3ccc05864339fc062da03cae6aac33fa455550fe0de42f1835bd74a6efa1d500e420c6f319bfcec18115cc8cd55a6e7b70492716b2c8b79c50d5fdc381c3a6c624ed54ee392eba1709fed6023f1f68a150e01802f0e5aae3d5a526d44b43728167883be23215428920e1c5c91879a71e9fb0903d58b97d914cd18c53dc9fccc53487e87994f1fc9a7e65383be1d7ae4595111c404ac2a4271eb19acc96471a040472f71ec2434ccd7adf99c53be7e2a8d9a83896578fb317d3ebeea908c7eec06fcfc44c5a87b7949ed7570f76f8e8dae5dc61ba0f7f2ee604d6d463b490bf7ccef4ec7cbe4dd18262d31c7533a9253e42342425c31f8c041a08f8a72a3000abba98ec3a7df40f095f694680e2672c556735fc5412ff3f148c08d7cdca3456dfbb1220100a18e4abfcf061dd13b162b2dd5856ef8f8cdc79f34cde52250c268b38f74467f33ad6ecc40efac448266cd90d11c0329946c8b6b84b98cecb360430bccea5dcc9c87a4e3d1b8de0e024bf2a8f08c4d7c0cba84d739b83be1d205452cefee0d8ee402342c0bc77bd8c4abe49db93d1497679dfc08da31b8a9b79ab73e80e71d6d140865d075854b49ce70e996b5982025adff3929ef8ecced6a08e168083d5613338081f7985a150a2a804abb6a0338cce6c7846000363f55f1350bd30e5780254951cec8faafa3c2e0c54f3562e726341bdd25d59691d988560b7da71a9f634e5f65956c25eabb1af6253f2c25adb006542964b23807622fa1717e0bb47cc6347ba31d0ba17526ba768a64c739bb9fea9792891c6f00a1f1d84e58276556727fa8f3b0cbf4b6ac4967db042f287bba87ee03db3dc2e45f77058c5124b49630d8eb3d94d7a8171470d200688c7a53cb866061a33db91b64682f12b22a2aa2c6e74e69125545fe28d6bee0d805b5ad988ef5952a44dc0d786d5fc8c3604de3fc53d860726e51d5ae2433659bc263f0eb48b687b579b423632e9c96cbefa8c19cc49108fc4956036f013a76fbec0b848a5caa1f8f04c8c3ec52ee6414ffc0a56ce4824af80fdbf03316d9fb3eab36d13d71da46ff0ea056dd825d1ae4b71ff53658b20fade76904c20a1addad266b3fce2f4ce24cbfc545fc65f2a0843f4c1bc0cb293d64fa87a7e38605029086323603400adcbf3ebef712a4b4de3cc0cf7dd3e3f0bd656fbd416032a1532ff2131ea6491c1da0b413d3e6e6acbd5362318536480e78f86f933affb5f6b8d193975f7df5888c37484d4342d4e023134cf999b3a38b55652292fa89b80c1ac091456151e95810cb23f3adec155af9c2a7af23109c703bf3af41e9c5e2ec5f4213a68ce9d09493a56c8d7bad522228a99adb8a16dac414eb3f28707ddc9d71a04140490f5042fc0e4ca4144d333e97104e06368d068fc795f9d0f5774d273622449efe89116c334cebbfe0945fb82d3eeab78f3dc7da3c3906c0e27cde93980f44451520bc191fa77066474a7f98d47d9777fdedc6ac5b1f8d809d5437e87eb168bff49cf952aa690321b1363ae473137dcde867ab0d0c8fb79990c7ff2ecf4ed99205c56f1ebbd8ce79862139a6f149c341b8711d0537d0ac92219dde6d752fbf49ae63c7853b3ef6f52ed324e53867925bd5d4c49dc42b93f3ba9d7eae579c4169593da98f10e1a61e1214a2aa2fb511a4a75849dc9be89445c29184f85ddc877c6d1cbb45230a047a98ac5bfcbe7b69a397c454cba44fd90fa13f9b546f39ba0a52c8a8ae5c0038932962f8e3cd00c1e00be28c70c8a787d9be6f69c975f902996f0916d2a30d6bf12eff2167448d42e46c789ad5ed3ac92c83eb965f576586b32ea7aebae177c51a0d4c7d910b6a1336234f2502fc4ec58e577acb1efdc56fdff669176dfc876d98300eb5680bdf5e5f962fd6fdde2ca38aa2e3b00f5061e4a63018f9f3de858cf3fd1070f42a3448e52fdf55d0791c8ca5cdefec3936800e8e427cfe556db949b1de19573e51b0fb5255294983b765a8693e6628a5986c1521955dcc9a936acd5c3af0124d699c9f2d6fd35b1c7f511e5d5e100b595f6b20e791830bca37e23f7b785e482a58405bffe7a632a5b826170995b43e5f71c657679eb664ee4167c897022ba1db08e4584f246a77254c2dbaf64c1c68bfb8c5e32925bd7e0d984290373f1fc76a5fd0bea58ee7d1a522ae30abe90e327f1bafecb58c61032f26bbbee397015fde474bb4898de4e92c22f1a0b0d65343a981ce99943d6a985cd2197b24729b1440a79f6284892b66c2343d338e79b34544d468134d9ea0e79d84a6ee8038b38b976612f11dea82f16f40dc10cc3cf5dd59fbc6826819ca98f924a8408151126feb6eed89dd18b2323c2e1461f286e3b5efde300d6d15b253799b6898af26806645a678514b7c83d030e62e4b89be43750e65eddce5fa1ebf24cf2e1f911dc518acf6fa72ef7cbc74545171f8184edec5be784718582fd78402a942fcaf9fa82f2846bd14518127c5ae552790279d7c4b08ff84e94c1ea54b1b11eb589115f250c17e075dfaf48a6c49db963a3e13e5b2f3e2ed764b2e4fbc78f0725bc0e56b2580872178713bae102acc081fe618e0a08809cae8dcc79f7e202c1f2cc379db566c47538b3ec05b5a5b0ec367a61436bece5c636688515b3a1baf3af422370a8b8da7e4bfeae958f1e38b1039076fafb3cdc4ff19d5344c97725f0bda6689c06bec8f1e3bfc206f7fca2936bd909113278d27e8294dd93a3e2c26da0716d6c49e90e84728fccc66a918d27f1dc9e32ac4176f64bd78a6edd651ebeea3ba85dfcd8298a8ad72540619d66d317e3acbbc2f7282bcfddd042c08ea9690d5da00d9a0c88989f3e72217770ce2950b6cb29013a64a3812045cc07cfd0e08c5ffae7abe6ca13221e39d616ac019f3e9e6016f16bcad1f24751472d9953d9e9cb0f789d075caea60ec2dab9bfcf99343301e21e0bb95bb5ab99608c7b70a9a827643d07decebfad88c3abfb2c76cbc3fd3736e1aabe952dd57484af06d5d439ed8fa156ed8ecaab04a2c63562a5ab70556661e6c94912dd5d79402f9be1ee2195e84214a41b44211ae6c602f2ba9cdbe4161f87d7f749469c2e1f68db335bf1a904abcba302d0a2241607ee6d54243921dcbc5f6737ccec19e96ef52528b22caf7b2ad66ab3e4a0c8a7184232d0d64a8700c4d7e79902506f61db5f0a50653511a25bef5bdcf49f612073c8d3df27729c58c58be9898df604fdd1010b48f99d6810cb5106bc950095f8b6ccd0cdac33ca1b2ae5ed87d45f6333ec85a850f3e81b5cd5b5ebf12a76cfb63dd8ba2ab910a8ee8160541259ff129a8a475236c887b3dd27888c09396486ef9576e084f29bb13965a5bdc793578ba836e0a9390c0eca181d435763465c53eb4a21e45acd376b922400ab0614eb46c37ecc0de612dfc6a44360eeade5b0af5fb854461acd76306f591b7c5c634cdca2ce7400dc919d11f8268ba2377c1401a38c98865367cab8477140c248e2dea59cb263128afca9648a230e229e8df8e36d2369158310c76bb1093b1d4a38233a37a733c35fa89716e0e572e051afd1dd03194084287cdeb3229d44eddeb7bd12fa294093e949e8a182da545bef4631570bdab942b1f08337128a18a48505fec85ac523f4a64510ace67e1d05c5d599d9fde43de1ce104750077c00d1cb978ab2efe75866252ea191824d576e83f26dde3fc238d1cb50bda687cf980610d0c37b102c5888d46b0de7fcc47e0698113fec77f144a3483638a30a1168b203664b8961f0aead328ec828ac700b6e70b6828d0cfdebd6b3355ace04dddd5601bc85566bc0b573ce0e72cc27ec89f6bc56d828854498dc9ad296900e7180729a47f36a8439175d157e605ad576643fb97693576761d6356d927e819d98dc883b9d384e41b64ec99733435d5bba44ba269a668229e21e61ba09752b28a05c177420a67a2ac4c659c1d18e3c213485f65236a4415321ebf1fe8c0ce5462479a0c276d066b5e1188e33ed938fac51b264eadfef1d69cdc956a9beb8586c91dfa4b50448ac6997afc75bcc05b073be54964efaa96ed422311059f609ed0274d893aa6d71a3cc5506a5b81157471db6e6fafd1b55ce38ebbdbf7de6742bae4a0f0e40f6ddf544a5b799b7320adbe0f7d41383c696a3fe66b9a483e4899cd68ded74e745001969063d23f7c282c783edc6706160ce989b4fcf601a94aca901ccfe582bec6a78a00301c4e83771926cf51882149e7004a5f37992906b6fe8c663ac387d318f9b9008900d16f539d512ca54c92bb42d8084fe128c83dd45c47afe919659d8e20aaf93826cf2a05e080bca05d605665984eecc54ee735ec0d4b60a28e24036f44e5540335509bd4093be7096093009769a19eaab18cd8463820df2ecacdec058cf377b3d65daa0a400b15aa0034a321738bcd57f9c20d2a064c965576684296215bcc10b0fc3feeaf76ae49e34a264bdd93e195cf8ebcdf9f59ebde3afbec6b2ba5b9e16c3842c77b061aafb1dd715dd042422cdbfacdae2acf4893bd90d2ccd15aa8f0b1169bdecf43c2a413f66c9f731e58e4c40d29dfcf34143aa82edc003b01000328a0337bd1b40cefb09bff59efb18c8532cfb6bab812b79ca2def251922229e378ddf0e5a9e1615a32d712d26b8344d6cf495d860af0998154a7fc05fe458b584ad5bb6680522aab3eaf8d53101ae9a04082078df05722b16591e265a6f38e2946917d447e90cdab7f2d58240500e4ab30829a1590cebaf37ea48cb9b3b39a2013181cc8ca22b4229a585b8d73bd9bbf4552006712ddc91047e9e2494c0e17035a72823a8d9045d83a387fd682d778a427f91fcb9f0cb7d16767cd5c9a8b6d9bc2a895e2ee63ea9405d6aa4659d8e2217f7fe1885fe4ecfb8726333cc5b204b0f4c13f0716220a20a339c52621484100f5ed2ce879ecd0594e2ffe2ff40b440a97c566f32c550c42bd69b9be01adfc07304aea3115accbb26589147e4f1f967054bdf4ec59845ac3fb6f6c5622917dffd99e02ac5dad46cd733c5f71ff7560abd3b0d03bc5385b6a0452c836ac7b2baf97f25ca17776a7732151c54f2c950b84bba6e22897f87701811ab4a6c6f46ee1134de0588b90586c17cf3062fd0800c0b5a712faf84d164e19d017ed9883ae5bf5b77618c281bf80fcbe87f09b55a62a68bc48fb0fbea01b757bdb544bb053e6e438062b43d346777927b2422e0464897dec6c7105d37d2e3c23e7230703c54a88d978d7370d5418351198a0dd9ea4a49b4066a50114164f17d023a2f3056d4f8aa1b465c6b8502cd9842351d0aacd446bbe1edf2c0ad148ae8b7718383db1bd9299a21d175ba47b0c883a9f30b0473194707d67ad3c17e0a85bcbcffd33fa5b +MD = 46cf632194dc6c65bea19ef791b91ebd5a6d21f55a42893c09c77dd449af60cd2a8c70fcd2905cea2081c1043fd0d0b973cd86ccc936b735effa0ed01ef8c4d9 + +Len = 77056 +Msg = fcbacddf3448c7464297ae53166793e2ed962de0d0947c5e5e17abe3cc103b072add5e3de8c0a1f19890ced3f5ae1172253b590c3b8801a400ceb056f3207ee88e9d58a1cbeaa55ee7e029e266812a6e5731d291d923d542de11542c2f300049b16382b2e6ae1bb6b6ee872970c828fe0ce06019b34b3f5e81465e0e89280a531995a51940f54a208e24b04f1b6b514ccab0cb49cfe986216fd797a307f0e42d509d897ee1a57bc5f6e96bfd6f53ee7d1c09dacb37e6f3b2322ac794b470d601dee1f687d2a8f6cc76a582db756646bc87535747f328ce3952a9b688959128f449cbb4df1ae4035e96c1bb90348da32f95f6086409995fe055ba2b28b43921301bc18a2cc143eaa3dfa3dfc5b4b14bfecd5ab5cb8320edcdc5c7ef1c18510adddb2d4217d0acf2c2d8b4b621feb88752b7e7282468a4c2282937cb0bc9c22b221276a2474e0664e40a5c074d198c9f53dc062816c10f241a0a72849dd072cc2847047365433b8830fb049cf00d13db28c31d7c4995485ccbefe0e57b344b3517023f7c18b832a6cf35123bb3e33783faf596ed66ec37b16260e9b54dfd34ae16cc8f8709b3d306e840f0ad3ea2dedef0f8d74315cfc46d07e5f5bbba33147e4d2b5c5adf3f06f0a4a204b93852f23533564a46fd44d7d6e4076cc06bdfd5eee5a90ebf4361b3ab2be5b8294afc5ad0ea9655bdc75658361e4db68c08095e4606ce0d7bdd23c280a49073c41ba7fef73e4162721a0a2fd3e0403be738b797ced721c159548c1bb7372c9c51545bc6f257ded82b9f6a44f650666399a3f368cd812a932051a4a7980e409d999c209a085cf51fb1fe7d7fe6964a9769f2c4b98d2b71e9977b744c6a4e54dd649cff6283750f9fccde4bc9eddb713d21cd337254fe7f2c887b03f37722f1c479fbff06a9ccb3bf43e7dd08514765bf87db467b6b22dbc5b9f85a8505b09ebaa262296ec38669eae0c23a265b01ad8364c507bc1abe0d1af29b7fe85d20e327a579838318ceb98569176a095332d1f37f327e1ea8fb9e95fd0c7c06c79b48734be7182bf2ca2cf9a78d769b81015975a2cbb2875f00159da1f259c58a4956065c55ed4f97a249ae62cd65c22c97ce739338abe085f6fa99a5f51c0ff0519449a06a0cd8507f980c627f3f689e1bb8541b2071126304d6f3d2becfcb3fdb8aa2dfcf7cac6589a27c6e4a0d741db69d80022c0d0441532f12f0f579e1c011c17ae02b45b51ee7ee6450d6d6cef290075f1003869d670a905ec7422338bb19c03a6c2770d9c3c2052dcecca25e65d07d590d4de4c71c527e3f1e4bd4ba781b0f484b6b03029b416d40b1d4790cbd9f88d6c0b42f69a953831dbebb944e3e40370e459e0917ef8db003c09564c04424af3ef2de706a5634266070386bdc57afbff22168870007cd55e0c5b86a6240887af96b73afb46b1ef070fa6a624d09912f5ea97387a52b2ae53e86e494dafaf2716ff31cf22e303867b624fb80879d0e10b9a36410eea3cce785cdc2e910ba8b1d08528143c0edab1598b890ce735b4de96bd8e62bc3b6dae31c60fa71ecc87a052d4f49a952e99e827f7cd452f98a7742dc109fdf0cae7c626d073334576be8b144b41c2dcc6d3a34d43a6c160273b3a374133734b1d1dcebdf8c153b37ecfdaab747a4d516c1a6b5fdb80322745f2a959ba857329a681f06dab64a8d7693e077ecd186ab192d0b8d64bf3f7c3994049fb999a7e2afba703bc64c7732faa8baa04d196db7bbf991426f16c82e375b684a36acce4bd911f5130c174733ad73b2ae40e9ff00e56c5f5e8887474058fb7e1d7aaa7575feb3d61512df5f97753cf1282f07e48e80cf9e6916d864b882be6fa0ed5a436907e93cca416b6a663c4a9f96813cc569726a75e981d2c6a09fea635bf786e12eddfb4fb801850ea8e9e6e3809e504a9aa5850d68303d16ff96c881d701f4f6cc66313669bbf3f3666458e56fee0b1a28ff688e6d8de1fbde4fa0f29b716d2b4c8cd31a65d57ec2a895e8ceebd935de1b6a5b1f81ff851e44b2bade2fb1b928b536282232b9ee237464dec67ac7953d7bcda5e82beef32639a75d6c1c27a0940f4c79775acd0bbdd4b981f4a620f4e0510f8f12f3c2f1bcc616d2c4e93dea1763b50e40657b9d39cf7c1a81f64c1a6ea41a61c561e44888f1e7620f1e5a5e5ab85b2fa6d92a6b3e6d95f194f2b3cf907dd56328febac031c402527544e5c605162524d140413e75b7ec4e5623bddbeee328dc6451ad2060474fed1de248e8c085fb34e8212ade86b46979ef10d3052fdefb16a0e22632bc81b77a3080ea8c310ec5a913054c13186df5b986425b16fc763657053a8bbcee7a2040d5a6337c03b86bc97c730fa5d3e87658433fbfd7fcb4c2e8bbe045879d3a748835dd8b7fdc8cd6dd48f3db5b612fd69c4f91650dd89f8511e95cbd5b72ca999a77ac5a5c6590ec2ca20d18fe674afbced2bfb78337406819b8375aff153179bec59c08dc45ce9600b04a2e56903fcf35f3521b00c29d534a4ff8833d2d77fa3c4434fdc7244ebd9f9a31862b8118381bdbd1fb4b21c02fead727a2db62a5065b1efca2e5ac174752894b8645e5dd20c6b2c4be2dfbb1e242774d1ea25ec184657b7c5dfd83301e61a51e976c62946e7f9fb4cc6ef876569a58f15f5ac6d65ba0823d97d951a4281415342267a0470a8eca288dd6c119713aa19bcdcb45e975555cc6b93fbf784fb302158dff48fddb3b5ca8692cfea21d697bd3d0bc8104b9cb309f29f874b67985934741fc02bfcbce7dbcc83a561741700e22d0f7222e0f4c275151cc196690d3f154a7267594c18e54ed12c67282c597810f3542d1705f1e69639882568e7be543c426444a84a6c50ac2af99faea9026fc23676636d1918a1d5d65e4d2382203b21d2520299760b9c6c4077b95588c65a9e4ce2bf8598ed86cc822b8366b6d7566e90e80b8d6d8b2b1798234ebd3a09caedcd258bf103c507d2a36c72930448286af482da248f6faf36b898ba563b4123393dcb735ff843a790e09d9548e8f743af83bef8df5a3d8b32282496b10b1106190520e002d4edd87f903b65f8d3691ac4b4f8d22e6c5931925d736e4e37dde5f5b9e26c8a28382d0758c25f13521220130ecd1082245744ffcee1ab9e301c4567c26c7366709717b090cefb28f396e642f7a81e7b10cc37a2f31bd9219250a6e7b54b8f183caf2b13eebdc4ca264bffbd16166699c01c8c54606e7158bd2f7cee18fc3a2fead4d9a9a91b464768b5bee9d094834ea0bca56cad75fed43eed49f363eaef1e199c95da7663fa514978b661cdbeff0a3141355430beec04962e90800cb42853378af23edd345b4836e978bd43d2246d003e9eb370a5c37a3177e32c99d4707fc314713f33e8d3ccbfac7844f98abdd78c09540303c71f95bf4db45181c851e44acd9564110e0e3f521637a1555505fa3325e7bb509f4af79e0486876b0c47314d1ad135fb2065108cdb294acdada7159438ec44fd9af0003c50cc36ac1cbae73880b73d68ac72f0ce5fdfb9e9110bda3da6c4584146895038a707f7cb763766ab93a9e2c02eb250a518cd673e0bceb88df3f23df22e8158017bcc434fa5473004c83bbec8139da08f9a74eb131a4a3113b5089e56bf729835438b91bf2664e3d292ef29b6e7af711c5968be2eb918c45d4e79d20585c7913292b87b80860af2938836dc33376232a9da0b48d764c4e2c934b87174fe1ac387edf5593a20c3dcd62c951eb37f5075d690ff13b3a9a92ce60c67052b94c6afa3b9a4c352a30a1308d4ac99ce2bf4bb111296c739f460034249e805aff665d6248a594250695835aa24cfa5d9c9b962f7d374abd0d163f65c51cdeb687f72b778d4854eba00389548a180fb6cd5390dd9580b6a1ecd4f8692d88b3eebbc77c42f2cab5105e425e252bf62e2fddade2c5424ed6a8a446d249422a268b029df9c96075de1baa19a8d56f2d8051357234ef6ae7d2599d35760cee496014c3434916bd8ff794eb51106d3d072ca33b6a2d61f694d33d3f688bba182f8811687f1531f3612a0488b23df47cca5aae585c7625cf9d01daf3a9ba5ca822c70a581a0520e8339df2eb04d87216bf34f8f411b743db4a83bb1fbeabf8856b4588fbdcc0ed864d78e67b0f88f0f22edf0b785297c104e382652d70059999522912b98cefa0b3f6e468a09bf674f85f866f4ae5bea931af256283877044cb1e9c31faf4393f59770901c26fc90910994faad492d5034af795388bcb96030319c56c26da47d45f180e384954aab4222662467d2384d53603f972ab041cdd2989cd4ba507c066ad211b969e12417f164ce8cbac5e7229df1b7a954df9addb26b7db56df434dfe2bda5aa227713571d45409bfcb0d48062c87402bd873ef03e0eb18163d5596a3c18bf1e44d392f924586ecac41f6ad75058e72bcb43a8a5f406dab122507425d577b08e47831d6eb4f29ba1976e24a7c527a38ce481627f72e84bdd2001ffa34d5f3c82b1122d383db879a8fd298c726fb91bbebfecf6ed1937976df37666531233b58407ed4cd63d2e6b595bde2cb78e91c239a3d2c06f75594fdc030a42c5b299be1ab290f6d911a8f33b39f86fe7c026298646ef698715e1d7bfd55a1f6bbd05b8bf5789b5b179dca3b71e04d09392fad41cff7f5cb45945c171f0d246c57fec27da5d53f3efd41def558e8ff94b75943466541f1487de199faadbff736399c19e043a7c4be49f0158aef1f6446ff666dd0aeb4b2b6212c1b4b2fd5e0fb6993a8db5756f3840591b522beee43c81840730731b8ffbe375d2b332eb6a863edc9b7976a4a9238380c07e44ebb66c10acd9d1276b6a208c95b11da31ca1718cf288e3c03ea6982eb4953f926ef93dadef733190514613bde101567c079f4bf179775f1aba04208252fe189cff393bb9ba47c46673c05ff7f637f03632b0903cbfdb3dee9d4e375eea8f8bbcf2e2e0b49bec1bf239456feb33c96d5a3481c89f544912c45ec156f4e9ce1b7b0072b73f12c4aacc1861bdd8283a3060738f6fc9c5357034751a09e4ef1e5a6f9e8549a99d65f36c9791e47f420eebd18635f02c9124d8a786b4cacf5904ab033386f294ca44885c4d525e212fcbf235c321e438369baea5fa2e13e4c6158fce55e45c70f7e4cc03a01f956e3fd5e605d0bfd69d240e84a855f26ff594c59b397c49e1dec4cb50fb167624c6f0c129ba357c219be7f1dd37008e494263a93fcd2d142d2eaf6c99bb36e276cbf1225fcb47f36fd500ea2adaa07e3a8bb114f001cedf88f1164d18cc77e125ddaf5ddac1ae921bd8fd5bfffbbc2ebe11ebbd5e6008089fc6a7f140a76ffe9c8c89f83d35dff4b0184bdbbf129a3c4e7591e6dd703f2bec0fc2ddc3c4659755492f65e9803287b7035ace0ad7e10356374245ffbafac5d84d0576f4ac1f57eaa3fe4b82496cb7bb2ac8b7458417308fd75b4f2798b142eefece6165d6f39cc71d750d79f9e521170f143c01dfb33035c66b5707a1f93fbaa5ac0199dd78e265263210430a12406520aba0c2233b8ef294e111f25f4928a5c22cfc031815d55f5ea4187ff29a921ff01daa08f716a930b36af48a39177a4ae4af95341f50c22017497a835bd492c20de8ac38d3eb1b9ab2577321b7eab1148dc2819f7bc05521f0a0baffae66ced5ca7b1be4420f527b0235127b6449799d1df435b795daeb0f6b285e3752a7a2e5c6639d9dba19ea6c339256d9c6aa204f25c3261ef6071032f76ed8ecf14dbb5c722095c7a4914fe8c6ddb4df4783319525add73824eb512715e2bf62f29f74a46e4098f4b9fbff7b2c95b0fe6f7b4a19ae12cd959ade1a665712863bef337b781b321ba732b0859de558dfb9c6e8c6571fa07da9e085f87b2b7ca1fa4f901c31f9739241d7555ebb7185a593b65232a80ab56c076e4967d0138fa7108c3be35c99839166f060f76e61aa870ee64e1bb6efe01d10bcbee50fafda1a012dad7d626bf09d891659fc212636189dbf42edfe4fbf0568544cfc7440da5f5ecc5b26edf1392b2ac1a6b97e4fc6bec2a9c725d8aa90b960cd8a1ac8870f0b8bb0cb9c59b9cbaece8aeddbd04ecb0e104e515fe07103bdbc60dccc56d2f6831aa3853a203636acd6ca85cfb193b16b091567f8a0438666bde6eb8db9c51f7a7ded0e7cebe6f8b9e61904f1bcbf187a0f87718c9282a758f7a80ceb5bcde8464825cdf1275c903a8eeef20e3c417eafa62d049821ced518fc3cd741d76dff6aebc64a234d077bc303c4b361ca9b52607f6ea787f8789e0b3e0dc13d9725b37ceb47198fc76839c81732ff98e25d1250cdd4c0f8612070c43f93514b2575a2e0c940a293410f48de2ba20d100de75ce543e7e7460656ebc863861dd70cee4c3af81b8bda245d3769a39a8263b7ca80926420911d527c6d8c5c3e7d8db7e02de01a502bc10be273ef2194e6008a873bec910744cac00174748c24f6cba10bb674828708e4423f8cf32829ae72d0adcd586d2478faf9a6af3575e2200d72b1846cd328a9b061b4f10a29b15247249ee37a5ad0b41a49ac6c33abee6fef8781f64d8e9d94c204e33e9898d467da10daeca6ecb47c954ab349f380c26cde69edaa7b078e4075865ac42317fb65b80002677285483918773bb6f9b6d67d5694651f89f0533357808c203e09aeb27d9c85d271d704700049a631ba90b337e48188b40ebb94f3f46de7e15df066f47720d5bc093451c7e95c9348cab0e11304dbb9065ddbbbf8b8b90e75e76eaca251378292bd3fe897300a837a8e89e8a533ed86851bd340b830ec505c7ec6e822786b0ce5125c117470ede7358aae1254fe4161cead34bbc8e9926e1388bbc21b7925e5219d0b64c638714f08537026a8c071eb21a66295913f25b829a99f92f3cfe2abe6a1e07b32d33f1b715d927e1736f9735c7c0f56a7ce20bf1d35f50321e93bb192e55d9d10eda1ecff2d579136ae32aaadb27d8783031de34cd25e7b4c419ba6b4cbe57306f43424002761f87da2d7f1b3de4fa0a97a77e556e33e63c9858cebcaca1a657b63706132f0341c52c133d8fd53f82a8190c905ba0d076530117a0153646f1ce4d7e124f5fc30956c65e0d0f8b7f98da1e27bf4f4a45bf7f6720d87dd2f45e1e9ae00dfc7cff9dc112d696a247ee66290ec1b03854dbe84b32391dfd68f515ce07259f236d00258e76428150f1d2111c51a20e1ea5d7193ccb2b179ce08f3f66fa1471cb1a0bca465c6b75217174c43c4f927f0a27847cdc98bd6f62220b046edd762bfc6b6bb3702b1a1b1eaf1ca50f7159ab02c12936b202b9cd5716b18b6f171375be48660a944b151b4e9412dc1f1dbe3c115b0d724672e5d884a5c8fdf110b3f51a9946f43a24241cba069d92f4bc8bd73cde7956214e0b39f0b59a817a301e561746519beb1e11c668ee06ef14b786268d30b50acafff198a32f6d4094df1b3ebe37d0272ea1a3c26235961a097478d10b3a09b7c9ee609ba6fc8a62c685745616550ac08c15a1b8b0c1923c5b5d2880bee4bd85a7821fed0002390e988aef452786498c8ce2d44f587c457c90d960daaf17189beb22f834b92bc16c935655b3f9b3d3b6b6700430644df603324fe687e5b963221d38b119da5e6ca53e516d4a95c5f2649227f803db1becf8c929833068b3e741c62b13436a8380e122e401af02a2ebbfa9707a6fc6d07084dbceff7d41eee9216d63e65b71814647c575d78d483409ee82b1501c2c53cacff2a622157751b4e99a48f208f8420600b16eb98a70619319a55343b3158c42009519b4a112c38fc2d542fef305ad08336e356d4e8013d06a9bbf1bdc8a6320404d8f7cc81b2ec1d4a7b9d4c3a3aa93098234bb8283310907eb5ca03e91c0abb6a07043339979934697153a21d721f0aa77d16dce7ea387181d919a82358b2c8b1824d189948c4d412ebef9b5abfa683dd57649d97b518fc6bac8d04f7bacebe63d13ee73154f37ecf21cd926261d41eb228a194c81236c3849680b4e6d0b30f096a6629922aa98706d97a11d5073c3dbe875a3ce9901649852d91327129143d0ab43f4a2c685baf427981b4132e23836ae9eb008cad3c10b5d82b08172246baf04546e3706c8e3a1a7850d3bd353e623fd6f07a21c81c9bbf3cdaa0496adf2b52a3f96ffec5b5c9f75c840b23caf16cb5c4f724397f3c5d09b21c85985151e09a46e35a37f266d1519c77c4f73dc115553a6b7934411fc72dee6d328474238d4fa4712cac7115d2b1bec88ba82c41cea6add9f3c2ac4b8c743859418e51e873db534f71dcd05760b049e2e9a704d82b22a5af2e351f23ffa5264d0d26690556d5c9baa4398e8feda5c443497466189d41a867833c284db3193ec52fed27fe88c77e6f4e530a43ec3a948635a0be77b79c3c9f8d18463d1948f85e14332d58ac18e7c9dab9e1f7eec7511838bc7c79ec8ab8c3c689f756c4dcd9844498d7980342ac56d3ce943067d47075cd283e93bea5c350a9e1ca4f381d58b44b9eb53150ed2292c4119f61d9fa892b5d5463599065e2e2b1b02d7ad5b30c8a93b544b90770f10a16137220c791f1a583f1893024537dd678859f6e30065b53b76d149389668e295454aae1c3534070bb601ebbccf71ac858d2ae8de9bfcbcc113693557946507d0955a8292f86fc197e20a2510cb93024fd17c97e3527e4405b925f733988ee81af87086b9ed59b0c46d3a29466126468bfd57ea3d4d72b4cd110b7714cb6ceb3b1692a2d839793d59fc9adfa6bbb1e202b8c3c932b56076e2c3269e44558679fa98cbbe360757ce203a302f78febc3d7cabc91c0cb2d0f10c767b520a5d64fb202620c21c7d7ccddfcc06020355d0bfc17e70cb116b4b8d12d2147cad0b8fd775679b96d2c36fa05f5d243e90e674d098d8c1bf8a0958b2be81f80576888e77c1044322a002b8b1689390cd67d930d8ca61c2debeb380c8d6282fd3adfce941cca4204fce62e066c2165495d0578c3f20c27d11f7924a372372c2d09a8f299f5ef03b03a30a6e29348f78801388116d5fa3fa417bce3e686d04b8e28467d5f83e909b276823ea6187a60275779346cb52ab4054948ee4c17c8919f3b5af75b3352b48a466d4dd758302fc5b45a0b3bfc083573487fac5ab17a7edea738d923a0b694b60e246cecff04c6d1cc6d9e1b270d347c79f3c688f08063daf0729b3f488f4ab4527a045d6962b5e9f3f64570d2b4218f7237955d3154f102ab9ac60497371703a7c0bcaf23d48d6ccfb699d36b978d3aa5adc15e1072a6f43d03e21a1968ba32628afe68bac4add8b41113c97e21e80ca8d8a2f1fa53e61e296067f64b7e84bf374b32009acda7bc45883bb966edc253e05ae2bf7b934eeef512d01fa9f307088a84001d505a0b95f89e8a29d2459ccee076e92d009b31e524ada30cc160c1acd0c7d10557f439e441c687a13cd3e7cc2def2eb115f64faf3c9369240e42452aae793d5f2e16c335c592aca6031323ea2d163be2481ef89ba1569b1bfd01f1f0783a9d814f5c27f8d87571aeb18de197627e9947037fbd490789a15b2a3a58acc26e8a22481ee8ac0f016f31e4ae9152629abf35d4b30e15b38f2447f25609ae11978ba884e975cdeda90db608efc3a9a1fd266538338ba059e98c8901ef5572ea480a8aa2466fecd8eed5c1aaebf91bb518572baa9b86774f2b4294b560fc99c0e28f5f1cb0377775454feb270d9216f06eda1fa835bee927c70ed1a9554f911a19a28c40a15cfc273ed48919df3f29f87327a7bdac6594583f29e64a26cee76a3fbc98daa440e9835e1c21ffdb40d341d7b85a675a4b0775162c3904600b0b45d7660b3743a3de0e058f4c457c579140ef04be11e9bf90f2ce9e50849b848b11730769e2d9c6482bd7967e974cd3e29a2bb53959b533ef55daf8b33733bbd57195492b5a0158965146da2f41d7565592301252bb57686112cdb3d798b32178daa083d62944bb6732d5c2d4f1865f58ed7ed4a0934a9da4be09584425b445f3a1374fe0dd0e6f2934f6d91602d44f6af08a44999e096418bc307e6f6a91a9c489dc25d1c1d8f46adc4c8559126bb71a4fc51aa4281e5c3b91b56edfd3e5bd69e8d17e2f843eeb8aad2960149ca716c55fb1af66bde3e68bd31ad21c0e2b015242e9e16090aaa5370c2ff1eefe00ff2aa4f27b47ec047397f4d3209a55cc162c2c77c80b73a6b1ce8dc2a33ed313c088b3fa16ce2efab3de7b70d2d157635c4609fdca96b9adb1dfa6740c8aa85a1b8e012b0a7ff33107cdeb6671579f6b544e6ffe4178bf3a05d8fad68658ea3e50991117beb3d541fff4a93684a37a5e8e93c2fbc54810d62e48df4cb930155b10486842bc304197fcd15973753b94b77bb4b778de8b3b0cabbde8590d96b61adafa7b3e7b4bc4bd8ee2507fdb865b009c2f91f7f598ba47fe968a8e0c034908014dde5d848cdb2d46b642ee102a59b47072f6eb9316fb02a7615a4e3cfc4aad33b0e6326069f16194bb8530cb8e0d6d891d6ad64f7c99e736bcbc3c08e84774d2a2376f8769a3f4f960bbda5627d276668d425a734003401cf744ba085dabf97eb0564762127f51f5544b5d588e6579695131bab6f7c3b7daaf785aa3d2f4958869a75ca8eacff318f4b83c4b3822e121f79da9730a57a8e043cb9073decde3901ccf3194593262c4c086f996ab973820ef0a99400e3bbdde62b2fde0d7746e26682248ecf4232b89463c17d36f3f08d6b5fcfca659ec41257ac2e58363a49fabda4524eb323eb7e7044c0979e986bdc3dad9560e93e5ed460a7ff9d3f9bae2a0c19c384799c1826e793b5102a10ad178cc4437f142b51cb0804ebd4b0043f195dcbbf56aa1783580238e80f62c47ee5608b214e6dcd65a057ab382612dcc26fb7a190eccdfbf2bbc81ba1bdcf1aa5eec2ea76f67c8d62fb55842ebaeb8b00d623837d6f6ab02ef741242841f87becdbb9c98c9ec9d10f830b7817b9c679c1f4a759cd070a9effb5753cc4c4655019544e10a96fdd0235e1806d394a280ecd714e0bc9db342d2c9d6d49bf6e9ffff50088a716913f899cbdbc4cde969bb2ebf61d82b91470c57f5630345f662df248886f771b2b77cc0cbdc8fe4cc4a6cde52b1ea4e5d946cebe89c6e6edd5978fda930b66ff650e354d8cab6acbfdd2c781b7585a94533fb0b2dd3846b0e2664072ca655d0c688b2b26d06d77a569a5088843d38d0faae2d323fb8d3bf2b6216cdad58445885c76156132170f202fa9f8c17698239f05b79fd98acdaff978507ad85b7004bc69585dc459b019867866fff6f9ae068a8c477d9b3300890f517cd435043284f0b5b76a18ee407c1d6b6386ed731d1c186919d3329e2fb17a692ce1b87ad1ab6c6b1ea42498d0222e3128f36f8dee4f93c1b60a6772620e82e7e8092b62556377b11273b20066f200f13db044ef288541bfa48b00579f8a71f438b45467c7935aaf1d3f88cd0dd4ddd42b233440d3a86c886dbdc5f7f00c8db7a54afd2f2e235e8fc6706fa8cab00b0279b60728f89f5a47980780f75c7d2059b633ec6292fac876956e2f39a76ed3a2afd084519d525322aed3f702ebc37001f4d8eaa9fb02e38e13a29027abf77ddc55d87560cda9a1413688f3bea6c7c6d8e59fbeac7222f6ffc7725a1bde3151daf438a0008d8c8bcdb88d3cd39471690613f13212fe4248f13a4754bc490597c11357cdd7e7e358eebd4c9aeabeaaa3b206370c83a84a228bf28a48b3f35b96bc3b9dc68de29651cbcc2cd5ab2a58ba0444d715a97723ccf579a1fca7e51c97f0f37252cb868dbe8d6d95b4bde264f725573b152973b38e5857f63841252ee288c33e3839dcb1e75b28ef01c9eeb7a23dc7c9d4aea4e3b0dc12efc629bd7bbfaa3369417eebe8135e86a38276543803731aeb19de139c79a834f66d06b4ea767fcc5b3542bc1b8bbe0e17006d1ece61f0da08ad61c7c433e54572f48013624e2e157ddc2f553398a249b44255546306dc8e8759e0c84424bacbcb2440e1cd90df9735fdebc0168032bde212d7fcde385ebfd2e3031f0594505068c5ee261285bcd8ec621e05ae8b98f40a369b2026409ef4501371d3eecdce5bb39f32eb1972ea620bd1712ae103f976927748c72566c5b569b3d3ece6165d751379b237caa294bdf8138b39992e80c9e49d86fac2f1fb8b8589d073d7b62524f01c19120d5ce06f1df01639bd5652776670ffc0e52b67fc0c5f116fa8f64df3b3510d84cae7f602e12fb73335c19a0882b85821765a329266fb3de8411efe67c2de3696e98cfffeab9a182ee9b77e029f3c3c255ec783d5fc25fde68a765f0a868b3e4f529323e9e5f7e132c18226ef24c551d583ba834c34a7f9726b4599636722cab8ed44894df60fba48a569bb567b1b3f38ce7a5a7f7748d893ccd5d3face6985d7a3e65ab146aa49767db365c00b06af5627512ff62ecf4352956c3658212a14b65ac3bd9e3d9039c631a94bb43c4e493877852a3abf05e1b5ae53ea04c92b225dfb21db9b43883040a99396ba76bab4e5a45f75d294b25bc7ffd216862f3555d26f49dc30c05bd6ebcdb96d5a2113996598273546139e588d7030e267ba0f551f9c83e7e51cd1d5cf8662f91da5219fc13925951fa6908111eab7772ed183cb4c6c172443bfb2d2f4bad7628a6bac6f0071a1bbe4b4517e5a53adfd63de575f5fc64cbcd111c678635261cf2ad97cb02a27e2cf1da5aaf670955b9b8f4854b862916bd7177bd56c233746688358580b484331fa52e060915c96097a3977427f5cb7bc9c9e63a6593c4fce571f510a2861acd6630ccf3ef82540ffc2e9d3e95b561f8734ed3202e5b78443c1862a58ae7d4c1934d2d90bd3d379849a27c410f557b114c78d51b1b89bbdebd13e4d0b46a40a41922d668ec96f2be12a7cb281f46755aa7c04267b7bf0e210acd120eb97dfce98a7a4de9083ff3d5f9b6f0502018ef3937bdc1b28d6bedaf87dc70dbf4a3580649bbfaad9a98e97441589255cc4d57315ed9c977f700e8feb6aa67a5106af09ee96063031e22121d8bf507a57e443bd79facd0249f2e7e8339bf8d16774544f7ebf02d960d6c2c365c24e6dba0ae1ba07c9f6c34e0352cd17394479ca3b2c3b5c3e3a0d2d2e786531460b644fddb65006839f44564c5626de6c13da42043fb5cf3c363562924cef85720ec8dc06ca68c04f51ec2975fbdbd15bec5c967796a620e17fb7c5a94449a96edf022a2c25eb7b5692238e2549d5382f5767903b38f498549cfd1f1c6b5be563067801f8d0bf80bfed514f0449fa5b0fdc63f6f92d897dbe156d3792c60e81790b942812d2ce17b3e7de32bb0233812404b891587e4b17467371d7b45f48c4d777bd692133fe875a0a3300f27c69f39656ce29013224b0153d70c52a3df2f8a6d25a8acdfb391adbddb68050c082fa8c5b0e869b51fb8e52fbd2ca9b68f5630da2d554c03366165fe8d07c7ed568dc2e99de6fcfe4b7fa2636feaeb0e9374d3571958f9fe36dc40db4e9ba24c301e1a59aa7ad45f1423cb9745e3910c7a20045c602031511366c0ec86a04e993375319e6d209a483839c32405933630a1dc366 +MD = b5a4f6d83ff891451101726f1ad4d1caf87a5d9adb3ab3b90196fdbd440e75cfb8c2e70040f56a60f70da600fc144708597cec73d1ebf7b01f0fbc001a01c31b + +Len = 77848 +Msg = 8532190ee23ddd58861065fe170e971ed3ccc88cc7738a5f4166c5b089250a9ecc72239559b2efd110956d1d16f916e1ce0c705b05b1e02d6d26bf184de3b10776c5324f796b723517e163b1f97b1071a2043021a118fbea0bcf3c38289ca8c16d746ec3aa320f8c853a7040275c2ed735fc31650270849e03aa6399831796d497c6fe7955cd6edf41e9bc540864171a713c9aaf908122513dff5dc2c41d2449de050bf9e005363533356e74045b73423c0b9488b3137e0ca016523b5576fa272977bcccb5a20f974368ae298308ec5880b34776d3ed3fd61636698d9ceabf765f663a793a6ca30c59c9a6f9ed342862247ada0358d80eb887a8ca3f03411b3e6a18ac88d92b979c5d9f7b6faaa7cf6b10a976b7aa9c93b9d9b59ed9f042b88831d63b81f9a6964f3733581022298a782c874219310175e1f5a30de4cdb63b5b9ce70fed01a6462ecfcd6366be820193605e67b156cf5d38c3ba3ee701654fc093954f545bf34f400db4c4f8e479dbc394740c077fcdf2c72b445a6af4179abefe26243c6e555a8eda32a44efdd8c011b0135aa416c4dd95168788f50e94c45dc5e3b52fa2940f1e1c8d2bf172655a839c81790f817cc5aa6accf111b7a376a5d1142bb45f7715fabd0e8068a9e94e24400690d02abd530f115bbc45570e589f0801ad540dc7152aa3fdcc3b0c2b47f984ecc770774f2fcbf17c121a569b115253f16495144cb6b4b8a236f302f5eb0c51794776d2f900e6f4771b171c134ac79b2e7702ddcea1a2e244e717f20de2648df7386aa2846e690193fec4113daa04c6fe0f20ce157dfc0b2d062f463cd50922acc2d54eb9235bff1ae4a99ee3da13bdaa547950e8f3c81aa3bcc3654a6c04f6e10b3d405dc4c4d852f44f29cb81fc69796d94cc11ab10f7ef315cb7ff4e5cf3dd3e2ddf3bfcad7384573d1cbe48c5b1b583f9a8564cdb8a598c81a423241900ea812a931a701db8f734fbdd84d7787ca4bd314e807f32bb28f6bb947d9544044efcbec4c1cb1c8ff5b412d6e5d51cb49044c32457eb1c72a69691efd64ae3e952d970daf9b3b2e0c4ff096da9eaba40bf3f3794a239a19719958b1df6ea01963e3dc83d8ad0e893ad3c680c97bf59087ad716042b10c912ca1a3186a51ea3f35a524f563cccc590f894b81a79fc01f40834e6deb8199dcb014e0c93ab8ed3e8ed408c8bd74c51bfed2e7fff1549baecb37d328912fb24aa0658a3aacfe1985d412f084522fb9509d4334822334c8dd8c1db7f6d015f669820617e35dac0fb3a9c4649ede67e9854f4ca98ed9db081a07b7557f24ced6c7b9891269a95d2026747add9e9eb80638a961cf9c71a1b9f2c29744180bd4c3d3db60f2243c5c0b7cc8a8d40a3f9a7fc910250f2187136ee6413ffc67f1a25e1c4c204fa9635312252ac0e0481d89b6d53808f0c496ba87631803f6c572c1f61fa049737fdacce4adff757afed4f05beb65801cdc0d0193f79ba5bbe70bbe3c4c5c4f160dff13f375cb191c94e288df5a4d1cdbfe668335226077c41338f18120f4939fda3cd2bf1b223e3d80c29da1c04341c6a23fa9bb61eb0ca7f066f6754bfdc9897b3083a81c79576668f1b953abdc91555e050fc734bfc6cff52247891bdc536b5766a15ee854f71fa3ec56558b9d8e1088330fc9293358b498077f2d1f14c3adf54bb6440d398fd1d83f1f37ddfa9a70b7663431ae0a14ee6f62d7e1c43b9cd9db5c2ce7f98ba4255c565e7b1178490e71fb17a13198ade5d1e11c37b9b5316780148fcb4befb672d6deae8fc49b0c423e8e14985263662365fea6af5e1633ef7a01596e72ca4952ae1489e675d766a4738bd5779efee03fa207f1a93fd316ca3fbf1431ecafcf3d68a47b2f93c1eaadb760b4df65bf9e930cb997c5cd705c90278a4ab63804daab8d0afccbbccf0ad680c94d20554a13b60c700375857277d9e80f577bd36dde1581c4793b3f6339b7661208fadc22c22127c7cf48f66deafff7cad4f35d4f6c13fd4d8b0eba3319c8bdd772cf68be3c5cf52d55b0aea7487abd294dad142de72f4622aca6bb930d631e86050e8980e4d1eb1d213d0cc2f2e2cec72c19b68dd1bff2c058a39227974efeaa4a38cd1f5e188013dc5e9f558cc0a300fab9b2f3de4e99c31985fc4549c4d4b0bcfe91edfaa94aadc185e4c3688cb083341d87d44f63918759be5890877d4735d79076816cfca1478b536b8138bf9dba52b5a3c3c79770a9b3cd157df2c0bcb624bef95e079b2a7d843792335fd1b102e1029526b942cd969222d181fe37bb9e2eda88f86d0d5ccc66b2f74e505ba1196994ea91a70dfeda8f501b311c6aaa6a4073a3c4ffbbae908d561936bcb5d45a56dd027903518ae1f5f5310fdfa22fb7140ae868523e968672817670f788c142235b7b6170a5f8498062d172baa6b1e11400b546e6febafab0d57da1934d0e6d7980b3df5173dd7d99296b0e2fc0b794cb0598d540847289c2b2bd3d026af238a3fd5a37385390facac97c36c188c72ea38a11b7d158539012b9a3b7e77b33304d11dd2d97cdc94d7fc36380f277673b27feae532bf2e4ca4b4acf8694e647f0df7e9b16f23acce22297df714514fe36d2e3cd3ba2ec9c84b6f6af3d9d4496d6d5943287ca3332657dc74e8c3bda12ae3ec9fcd5f89de15bf03db141831ea66eb9e321f4a24f9023cbc22f46394f3b0dc621cbb67f9f59bc81908446d8ccfd3506ebf7e1fcd85cb9b728f013efdcedc2038ba851ba597c12d59f7691f0d811a6473f02d44c65fea3aa5c3f89a21b91876158214c3b64bf1b86ab26c77de87a5ef52cf1501380fc5e1fec7c2c0283ccca8a17a4ea7539a932ff54136bd2469dab9b6641c9d4b1dc65a24a245f839df5e7c85ac1c0ea50b0d5ba1aaae390ab0238945b62b622612546cc15c6b897c2b37bb69206742d326c80417f7bb32b5e3e729a7cd2b96f276d6de7afe1bbd1aa7bf2df4dd158906732cf2ff3047f2508a8d5f85b10282d6cfb679f98e3dda3bdc5e99cfeb0f2c667ba2ec005b39bf012d7ff4876b9a6efba75b05e617b82906507dc8a2523e721ac590bcc28279e2f05524b05401d9a288852d4ae89e76f2a48d8283141a89a54bd95f28eeaceea34789e45a957ea965a6f2940fa82d5e7d3d1bd790cd4cd70b204078f92ce282492b5227bcf1e7f1017d75f81ececb5811f880e2b776f012eec28141f6232b1c1ec637559c114699bc3496c13d01814cf7fd460dc2b70c2194582424e97c8fa46840c0d6c39ca288dff4dd5735e956227875f4bf7737aaec460bb28898de160370c17513f93b04a8b1e4d323cd2f52c2da88135fa09fd15b4b03b2d5cdf2c91f7e70df72059673e07c2dff8bcf7b7d15655d2a5703968a56ed67ac724e60afe1d975855cb154f71886f6e9f80174e001631dc10e69c5dcc5725f28c9e3cfd031cbf9ef3ac31e983819681ad32dc3826f1aef61ec99d3cf902315af4156e735f89a24a672049b5f297bab198219106b48d3fc90595d696b9f48aec8426e51e51c8f1d316e3c7453d1f4e66e6f8e02a472d66bd9bd7b2fb9da2955fc34f2b5e887f20d189433507d19ce41a200534134d76b65c180bcccc02a0d30d280abba471f0b1be44eb0d8e3e94fe53c9f3276235eda12d20ae8e988753e67d28c610909ce21701c037db48f2ac1fac4b3f1497aee6a9993c4c72d1aa5022384c1db4a367b7e33481a608b89c26aa7c3a45961407165238c1420417da0a28c7187e324d70e688df1fd2205d79b9315c0d932677dce11d74663bdccb95065c920473f3ff36e28a69e138bcb839c836c43bc440239edb7de481a6477d79b95031967b844928506a5d7c4628595ac84d3d4b456db7db69e5f1a9fdeeade6b7861e55116dbbc3a49b2247871db13b5dc72fc29329950111083455cf3ccd6a7580c0b6b21ab7a753bf70e977e73079ed47242839ee5bbe6537250b76ac6c8377b2b131fa15dd31e22991c8952f8784fb4fb2f2b6367c51db053c31a0d7fbb032ae786d45d98d01e47c3d7b7b5106fafc4344a8749c6769e6f4e27eca2a0b7f2ac68ebf11e05785bf29bc5876e63f3a84c461b0017abd651d88d0395f2d0c4ee4bd5cae0ac4cd3be6b497062479a0c2193592aff97bdee1e3335df7dc5b8ebdf4d56ac08cf14e92ff9f660b1065dc203e29300ea8fa5c5eec771430ce3ff33abfb1517d14f05c397e5ca1bda74531e34811f242ac80a63a7dd67b8aa134ea53b9d3796a3f3c868dc78ec2b475925279db8231e280a95d133bd3fc5bf1e4d47777be7aee68405e0e8f785185e7d7be626cfc8774b1cee1678af22f3b3cda32347dc4be902cb6334a1adbc6889a7fb61b80d35b6fac8bc3a60fb38c9eee6f941940a8bce608d8b6bf1e1baa52fa150a239bb93639fd4a746d2e8a8cfd831f6a7444bd0e56695258dbfdaa656b73120b193210906a1095941b5bf9b8dd978435f41e842b77daad8a3f2e1a9048b201494ac87c028682f7733f3c9388c5a818771712908cb0d934cb3743eeb361235d3556e35df505c0eac25734ba853c1156be3be554ba97f192ac82c399374b43a06fcbf728f07e56d9d1d1d90126a78fc97bf0fb632da39041ae7021aca47d9f5548f8988f8d46b16f526d9df9f5ae5feb20d4b92e6e5a51cc31ade28b735e9306618b3bd413f56cf5a458f7f76aa72e364d35c328e522a28ce68a8ac83c84cb1e39e255a93d00e61758427b9c1e28672571b29de53aa2ff2e2da48ee55886b41742ac7a61510fb94edea89d5a58b887430ec9add5d741e40a876a73656fcaca7c1c381ebf086852f6a7f9e1b4c2ce2b29a4f9779d3385edbc846abccadac78ad71713b6f4bbb15fc964c4cd2de4dfbf13b4a08f8dd7f578be9523df7842038192c3cdd7c4f3511c116587c4482763bfcbbe8d5a3a5cf7117b3a0460100e152b49c2d4f58237ee34795ac17b761300a9ac32ee7c250b31449d03bac304b763046674b794bf11ef156b94e0374a302d092fb26249d09b0a8e7e52859cd8d673897359f439fde9ba5b62a482ac36f75f5ad0ad7757bf65095ba9d70331fed3dd46eaf2f969a147f662e91a272ebed10e1b39949c2a63f1a438a9d1c2470947f6b947c055886bb519b879662c536475bfd6c4f85f4640d961b1f90341306aab564d2452973a9fa9aae89e0920aeaa2deaf9fd592f1fe884d83401cbee72b566729eeb2a1cd4cfae106fc1839295029226016d278a3bcd7c6e4b7e9c48a24c01e21b06a7750b6e3ae0ba8e56009b001ae7997ef40f1e52389a74aa04de33c1161b4e216b3e331dc8a2555f00e9452550a60ebd4f1c2c3931f32c2e962daba71b94a4a5d5b6d030dfbbccae14bb17d4bbf7fda2893009c500fefe66b0a57e507ad4bb2e879d8759f8b38d05f1f487b0b543d2b932f92b981e14480cf4d4207fcc51fe05f140bcfbac2012f12934292be5101a8bfcb60624f1e9b56bc33836677892f9c6835ee5985277fafa3ae850b8c3f3517517252dee24d5b32dbc5034aa182e1b0aee3695b29421b17ba79fa2e9ca44041f429507761f6ecdad40aa8fda2379ee2d726641cce9b3b31fefa8942170b8aee4efa4273f4a2b6164e0a5bc6a130cffc8c06c7e59abb49c3183b1b9124f97be507ec101bc5d721b0f2ce05ecc6f6dac4748c7afeb829ab96af449661ecf87bf0c807a2b7f920956e675d8cb83b10290338bf65af4e6dcb726c1be4fb978ff2d53954e08fbb027a1a55c0da72250622807fa8714085100f1ff7caeba74c47485d01dab3ea3107387a66fdd562af612f05f24d84f88499e164f75995ac33a6e550c8a2011283b63757401e67cffea8b75839b887207490a80a15cec8547536317638b2b44dda97df788b2a77033d632242fbf163007c7dcbdaf8336ee53a7f9597f714b2e45e3399a7f02aec44921bd78be0fefee0c5e9b499488f6ea8a908777aadd0e51f3611cbaa1625b0db255640fb92e94208765cca12afebb0e5eb5940e803ec33458bbadf4aa723aa101f9fc45ab6ba16bfb85c750cd34e1ce427fa59a9a07286a084b43b4f482dc22aa87bcb6ff777614fb3731d4e5cc09aec867428852e69c5764a894981a349e073e774bd03fa2a0dfe8e282aa1f34a1246304d174452dad81004c06fa86082ec31051103de6ada0115720304cd40f26c3b4c108dadb6cca6b6dbe2178b27ddcead2ada03c8ed9025db868d149aeac290110342f289024719aff776a8f39e646f2f7c5826892b53619af34dc0d09ac266107c6dada0de5418457f048aa8701eb5fe2612d4e8ce2b9d98e0cc7136f7f9d782e01828baf0f98cbe9b152472431389644e9176af7b20c11f76909095aa6fc9ad56ccca9fe3405b637530e019c04cd4a71d5b72a4dc3bb575dc2383b55a2c25db0710fb165d316e7c32dd25648ed07c10bafa3290998361e23b0db45eb039d4521a6c23e906d3ad51fda45c1c55a76be74df61c3a5a01aeb0bbd48958539dbd5ab868aade882e0029fc0eeb09bfda877400d59a6cc6bb822583026c6aed60c73d098df9be884a504e57a23bf37270bafef92113ec85bbc78bbc1ec45e238bdc4134627650b130830637e8b4a21671eacf6061ef83400963288db1f9fa9f24e3b062708a5ea8e7839ac469bede54e6012d5e1e95f99fab40451f4273070936c3d0ba3d9dae1877365225acc26ed4d6e6611bdf6f1649ab44299a59994c08c666ea6553180aa7e98675833a261b3d4981b3be2ce4a2e710591e257fd59345deb3458a3a6138fd445a4d059954ad3747ba6a6f8d5c6420e3666ae83a8ea26885922b5278e200c3909920d453b2ec6cd979d0588b3f259d2b52560c152d4218c4ebe2e597022ca1d52d3717f0aa9f8106a62b9eadf6ad05f0072ab995183bfda2a6b36a1f28823e1cfddaf7f6a39021d729c46c7ce7c4013b6c2e1644b855c027ace60996becc436cf1509cef0585f252eae3e87f7b32391369aa4ca97558095be3c3ec862bd057cef1e32d6237479c81d2d03a3e1abe5480e6e5824cb80b7f4734923876d7572349e5d9d2d8a39ec86cc7d28b412d32fb8acb28e1b6e737cbf2879a18ef2a284fe5b57bb5d8b0511e1ab23203111a54d53a00bb916e6ca49564c524b2788c0d82aa4a11fbeac62a45937c39c9354bed8b976ee6b9fcad1a84a6d4782e9965cc64a18ae3cf964defe6df0b2c063526c4c4a9fbf182e9146140bf9edeb5da1d2e9ed15e385765ad69a8074956e19a15a32979902313bc074072b70a9e6fc41cfbd843ae5abbde4f6034121dfe83ea7f50610e16c595fdf081c297ffff83decafbb9fd638f248a999c31086e6b13b0cc941571731f2f3536ead766674a19b090f5ea096320baeff4e448f126e6ba716337eda891790aeb41445a2c29c85bc3d4b3136f9855a497c90121d62cb7a0b7ae0190bd561b4da77956f2f12dbe6f9efffbdb35e9750b0a7ebc63be6826ec0914baa7b7ac4c21f146ea48be5b777dca7a96ea653dca16ce7ddbb6b2c27bc7f0fd29d99f7a56ae5210c6039a9b3aaecdac4ce9067e9aee6d2c26c4b922fd58f3d117cf7ca87f1b513fb3cc8ed54e2931fce48021932eba6ff56732db70f5c89af94c31561d1091773b794ba1f1fc177dd42856bd64cea35a3f64ab2094ab3e6ddb90a636c350374a6ce027dbd78ca03a9bde14e2d9c1d1b871e6d5917667e3f5e0abd623818936543bb009446f46ebefb8cf6198da516b10f5b55835ff71deb970646a253f01b51d0eb098e5a271212495c3e6e84fc499eb3299dd1515105841f4840a44e502dd2b4ea97dc55657696299824bd9206385d0905a0c37a18e7916d2d45d895cd2d50864645fec743eec2f2cd337743576544777bf8ca58c3168bf74190cfb8ab9c63cb6a6e763e56fd216b67f52c0764531d84f920667bc424ec4401ebea25801d84dae3abd318f32429c9f4f45c5cc17420c809921831b0852aea0aa1c87aef032c5b3e7885e5ccf644b5008b88b1d36af6a729d860390cd9d04fb84ceb175d0fd2c2c74f0f3338d61aa2f75521b53e8a17b8e65dcee02d7564eb9757b2893e7600883aa9ff7fbb56141a55dbc7c547640c53abbcc4d5b70a6154145cbf5f27e84e31f513a729e8f8b991b879eb60a28b3d2df65fe2782deb5dffdbc681f78dc914468316c6d03630839f7bc9ed25b45232ae62c19845f69aa3754a1f7ae0f4baeb4c611daee127900a9a2c467d73117b753b5d8c66dda5baea2aebe23ab9e1103baa1ba2f00b3189a7285679fcd73e498d7b631ace8dbfae8aa73d9911d0d77b9de61f511a8ce8afe1b076defbc09f5ed3e50fe74004a9081d60cbbec0c44c5f8a86e8829f04b15552c8f9dfeadda92df0eea09c5ba0f63a0aedf2cda812a43e7a1313b1edf1202c72e87c075a7d00296d1ee18482012bb6ebb55f40382a939af5010d8987d0c997ba8569efbb3d28f390ec3f4a4393ce21384d7da111aa8ee773d742541d31f219a2264ff39d8c97ff04ed165820d731fb692cba7a94e10ab68f1c6ecbee834e44b2419abd61e9b1be51880338aa5a0b97f6b9a237528c7b8aaf36cf3bac53428b737dd697b8d31ab3df438256308acf99799ad161dafb65d64cbd003db70053605e21803d02e7377236a6104b63e7d2726a46b4849ebc5e2bf0258e3c9f391565eae323f7c0849c6bd0363982a50fd8b53123b81a0e5dd8ee21f6e5d2d56becfea2293e628239ce23346a6a96845126c476d8788caa4e4aaf5aa7937af9f76ebd0c6a3c07b885211aebc93ff1725a6142a3cb6267030c47e222ce13af6d8a0f03922cb941e3e559c56eb9061e0f9a0c9230830233a9263528f2c0d2eab0824274cbf712cb84d8bcb525d06996bc8e8d45a585c47cfd1ab6e643267db7538ead83224ff4ef2bedee5cb9a5e6d5f9a667df8b4a459d8f58219cac65608fd6fd94b12d9dbc374983534e828fea66577020b25a46f23fc07d29de971427febb5dbc715676f52e5e377fed291500c2468a4c808b1266be40e8240e8ba9306e612d796635521c5eea88e8cb05dba66457434faca622ffa37127a4bef2ab266968fb6fe232b5be336ee6126ab12a67e6fa49aea9240f3989e1ca20628470567a4335e487e72847366bdd813eb3a7b1a4bffbee089d2da0cc132e2b8b99cf5d0b807b8bb9bb1033e251ddb9d975ca103808d8823d7a04d20475f22aacaaeeb6b7911aca1a370420c1c17520ad7018001b756e1fda332b29ad9a84a2584074dfe905b2340bd37a8a4f2b225a3d5b080db9863afb4151172431e17426f0e2e8452a4ed03e2128f9dd050f73db0b6f1095bcabbdc9157c4f6e3bfb3f2d091abf92f5ecd36cdc9ff8956deec8079a54c8347f6664edc8ed3a542638442923507135c6605a2490b10d5ff439bd745c84a5668c36defdde5c7e627b3931bfc21c939a3639d31a00048e793280c2a5e4772ea86dad7a5dc8226235c56e763557e79d5cafe9bca18cf3228da3446620a4b4da769e2ac5a208d7bc3a7f58804e6739f4e9ade0954fba153009c10516592fc61f6d884f4f5f22f4b2ed1387fe4f729c40cdbabeeb98f9d35d8a063351d3e81393d9c68b85e9a8f20cba2c6d3edcfc86f77550f53e01dec5f16afd6fa7155035ae57d35007d60d78104e1488c05b87729f7cfb03fb1ecb559249111a94821a94e574394d23a8b2cf7405865b316f85e79f41336ba144621ac680ebb4a8ce89c9cfab62c387d65b809e8cdc64f07d8a6e7d6e74acdf17158df4ced7ce324f303cc359ea6392e34a33f62091368c0a077fb0514947e30b6817a36f8fe7ef88a076672c2a9dd3541152117d4f3072998f83ee962bbd7b95dc40590f5e622f0f4d0f318ebde2d7ad435386ff50e322a085237ea9868e074ae4a09c1addfd8f47b85fb8fe1ec30e5352b0bd3360df4ab37ac6f718042a04af13b0e31e88fa7ec654e043e6c7def5fab2022a95d9852946e2f6ce4e0f21f216dbf9a486e9e97c0fb54988f543670ce7f3c065a335656cdf503b8ad811f65e36bfc376e06b5b05885bf3ee960c1bd1cfaa63e4f80f0073e144fdb322b727b76331d6c0b7a7cfb9c4bb77fb45ac6de2f618752ef0c0d6dd0133b5bdda59268c40d48c187909a7f759463e15908ecd9f1ff06cba19e56916939f1c215b92934b341a6bf4a11b844c9aaebee3e32dcb8481b4c30cf00737af2cf9697412ddce82d165eedbcc47d5382d3782ecca23e831efc8009e0f80b30541d5563cbca558a19d598d4467392b3865832286b1fb9405aebcbdf3c4fc6bc756b54ad1a583c255ec77efa4ee49e6cbf8140648470f5f9e43055384bcd4e253f01bbfd969f38bee63135e93ee04a871395ca6a7d5e9bb5a413459f743948739926b3dba766f25f985ee8297c2f3e0b6cdefac3c0b1537d82dcc399225c5faf6a2464d0b577120f5c95bd4072992100b1a2f6f6b331c45866d2f9b0baff39e09c41f56328983fd71a1ddcb886e69b6fca2ae68bc0a5974e383e0d6ba5e87e0e16c68e1d689221bdba3f6e1922dd565f9ebef30a4ed77367e06827524be0d741c0fb5985dd2d61cc25439be9ad48f7d817a545fcc48d01ac469870ee14aeec8282277b23f030a70941718ab28fed29e21c2903e98c90e92452160fc6691c64d844931f7f07659a7ef71064fb2f949286969055570da8d2d7ed292d63b0f0e74cee886b228c92e332306a504df707dacb6b2364d0af9c64cefd1bf24b53f31fe5684c8793e5802a2dd2c5772f4e0daaba842a58dbda3648106b328508b8edb1ab9a279c5a7cf71678c66a01299c6daa59c9ed5901f63c26a520b70f2249a648a66d63d200b7bf4f1af5a115c34af081b222b38dc86b77a59603f1b71f6ce58adfc747500c009f7e1b46b2db86be5ed7cd78c61fbba2af6eeafb2aa6898b741f5d921a3f06be604b84a0e47cf9617f56b0b16c355f01ac29a9f2a803e70d19b028b425c67658ca5d5ced8020a59b1aa465b7eef83ef1357ddccfb5f7c25a9de54917b00ee538a55dab14ceee10d5f969f470948fdfdb14128a7a97aaa1dac765c7a1023fdbc5b9f279fd160fc475e24e63c6a522ca250f91bbda96430cf561d9aa3c6580de67cec5cf90a0ab49e59efabca06bdb8839efa277d9fceb8b1331e8fbcf1ff97886ab7db4b5b3e9258bf51707e52ce0a07d7becc75e0fc9a79c013bc14179d3308a19c3315499f1e2d1ae4a4a7f31599a5b7d18b2521906e7f89779047cbb368edce03f4d5598ec071e933d8f55c26fff3abbcd419b60c9d48fbb4bcc672d491be2c89810a0f9021dd96a98dd4f26495581ffb47b222d3bf4c9375922ea17355e059977821d045aab6cfc023d55a711279a0f7568cfc783d20fd24a0dedc021e0ad1a83acb5001d393e1124b54f8becfaecb3b7108b78cbf3c753c79658713627431465954e377250b771a650251b0458dfb5227c3c8638e15b8377c413729cbd2d4fc445d1ef82773fe32f13c09f81c8dbdc5fb3cb3af423312a039f070b7a2ad59349c5277174363e306708065f8bd348ef16bd21dc2741b310122f1a84f8f4a1a89c1c360571151c20f836e0a248ff8eb7eea324b4f8c347fc4d7d352440a5fb556452e8f2a19d417b87a536b2e3d715fc906cbe09903257b75b90413477c44a63497024822b551609bf5ef1d582e04685a420d62517164a0ae67024fcc8daf69bf57dd1fb38c501924568f7544ea4871cd1c8544eb4f588ba9326c8c4596e67c20d81d9a6ef766bddc4cb32776eaa4187bf6a1fcd8f5979920cb913d4520804a33c8523cb79efbdb3e29089850a7add8f171121ead1c98559f931ef73dc313705288f97b2fdb85ddc47bee3c84c9dc1fc81c241eca2ce14d6019743eb1f6f68af79aa1da2a45ab5209c5d2a865a9a5796a487671d29ef8ed2cdf2f782424dfd6ad8db9de5965c2b47897645085cf9062529677bc38fb45b15054af2816d505ffeed2cffc1fa462918b50f1c967b433570b76b6627fba5e36750a71e30ca02f6335fa42b7ff8a1165cc9339777deff4e40f7990e91964b8e90561262d67eea2ad1d64b0a66baf45adb6ce79ef5afb5b85d91fb5c48882dc557c092a6bcb490649ffc2a82c065c75d5d4735195613eddb8f2c993896f8d3ee863630d22b927d0a6676487cd324a386aa0224f0e334301f9e70798bc10ec673e35ff3cf69403886eeefaee1e91d0e3f8944bc0be43a05ec5107a53b12f48dba37e4e383bee7493eff0d6297487892f0c4b50652a14df5aa71962532d1cfb02d496c08d774af399c61786e88385eb7ff21fe09ae619387c1c6c8ff5646cab832e3a06bb3d2bf8f06dbd9d99a03f704d569c7ce056e37439918423d91b90a2c33cb2813001f40d3e637d8acb7f06a01da63b75b410e5fb19a2fafe7ca71ba9497caab08a4a4598ea33b1ceec646e03676d977ba488a345a2dd3b503e9b70079c6a8d25389a93347a5b04ea7af4e802c1291aff3042addc5b8cbfc9bd5d30461282d44fb9575f586545d15e05a50736a1455060c5b35827aa5e02db6780defd72521a908b252c8d3180c1aa0af93e078e6eb240f37f54d025adaf05db9ace960254bab83c786d4b7598305ef9661f0dfee1bb2037fb064e44181ec9780fa19869074f073bc5a40b97f8b7dd5f700ca2696af58f11bafefa8c09cca6cb53da8d0ce6420e079163562f2ec2a5bbab998d5456dbde0f23a17d741f531e441bebec647e3e4d2e502da381a6eb588c7d47f75621f8ad8ee9803f82b52ca080ac581f163b9e452ea6658c560d9c6650699a98d578b66e2f613dd93e67c3ddff99a1cd88badc7676f89d6912af404f85f503ea58b7afa04f3f1ca30da3b3171f684b5042589351a5db47d22e188184bbb40654566b3ee48cb7bf4586f564fc7eacc75fb9b13d8729a2f7502ee5da96600b247f65000e9b667f983920d973ee8bbbb8347531455770f42e5b9b73b604f18ee0c3fb1279355afb39f671cc4a6dc5397086fb7535731a435f5cda6eae510e93cdba9f1f1952d8bf06e5e04a631ac98a82bfc2d9a84a9424fcfc82231dfb15de4dcbb78269746e4fa1bff2d05855f743815751faf84e6cfd9983292daf7385b2d39fdaf8e40a9a017ccd2ffa94afdce8ded62f45b00f0341b7b9160abd4afca6117f7fcf0395da990aa60e359298f8df0dc4c1466a0d05a5d9e6ff36d1f1d94c6a132c816296ae5addc303fdfc91c9ba90abae7980b8d28e72953b3e77f8ba0a4fc357cc6b9d93eb58aca7c01d4acdf009e34d5b9ea2f850045c608e39d00d64553887ec991b19bf2deb70388ef48413dc0424690e4bf5bf21a4f5a2720841ef0ccb438e758fae3aafe7e3b3bc4f6a9a79a6da2e6a2439103cf76117db11f60ec8f4010e7b7bc002612a78be4fbc0ff87513c5183cbc60f7c8cc395abf8da8482c5b470935500d9ae43bb5d493cae2b251038bb2f084dbda57bbf4f799cbc72fa9699bfb1dbcd5689b84118342ec716c9fde748b201e283c5c1f1a5b146ce139c2975650af02c5f019bc1236b7913a6bb40d361d35d8c492589e100199d174dafa7d3ca663d24dc5c11c3e8b6c69ac44202846c5bc554f70ef918c97b4a9f097d3738568d69bdb5e344d0cedfbd6559a86b81d313e04075c6391d669df46e304c022e71461dffd3de5c6f3dac057b4b33a252fcc0575bab9572784147448da865303c835a01f31c9580299de747e4842cd07f512dd1aa81c5ccb2c043e1035b10e8ebf492bca0794fd9 +MD = e855da51d23beb4647c4ff3607c3ac88e94a705866fef02842b76be3cea65b43b545d673dbef9972f35d2658ecd60bd82373a5502376d1a407f83a369bfa6947 + +Len = 78640 +Msg = 3299530a2446fb395b9380a85417e9d1f13acd7f1f4a1485b6cb01afa10e71f93e055dff0755a6b573ad1258175691a4110cc648a60dc2972a6f138020b6fdc0a3a607560556ba37b586a5446632a4796d6862676b561de42da7a901d010b83c292558f76472bd29eac7415489d3a9b7cff4aac4b64eacd4871bcd1af84129d5972a59ca6cd039f2da17ee70c76028c5fd5ba547cf1cf7d0ff7286b3df74d8f4b75c10b86799b5fa4d1fb5806902aa0dbf435bd9fdea863e5e54ddb4cecf4eff4f6487a79bf4baa90b879d6cb7e0b6f6df55d5608adde2876c6bd8050d7a126028e9c680510acf67dbf6af1cf923d4e823381ac5bc1f9214f15c828ee49eac7d0a94d32cd1027c9c8714f27877f28c4b559432f1dcd81e4cb5d2e0389b63a5c0bd0db892630549b0d58a6e69797667883b1326cb312f0f967f73fce979f0849008fb7d994f3bbf0b8e002bd546d6ec059e5bfd3a054deb5c19e7dd8ac76ed154b407282bdccb65157a1d32a6273ba42b4514bf289e5a3d0549d78b04ce04157689d8c32f54dec337608a8ac264cd1562fae7757c457d8af9d8eb0f3dd3dbd65d4f17558cfd9b62d709ef3b1345b3c913837b261e42de5c9f8eca701f211a9f71ce6be72c202bc95f3ef24e7f111648a4a97adaf5dda63a61321db691ffeaf51ace7d80f604b58035c53ecaf0121d187f348999eb5efdada68e8be97ab47362c016f428d2f36210c36679b74d8ef1c30aec526ce70c0a3cd768bd12c489dc6dcb6f79e7a8335a006feb4c1d7eceb9d1af997d5ad231f66f5a895a3956c64e9fa3a1b4c6600dc4d8a31a5e056a1a9ec8d502b26c9213e8ce98b90b6418b3f07eb0744ccce3c9c821c6bd5876fbbac832e3f098a910fa09e2f9bf789df297eb945bb0ea0217af9062409ae17918f55e96432bd71934308132e66548ebccbc66690a1c356ee5074123787aa215a914897d5c7b18c4e7fc7746c57124578e688a832681d61a351806edd8244252975f706e96a803b30fa513a7ffacb3e720e47f6c18a7740ef02b0546c7626a38c81e3cf159793fed95747fdcfdde9ea56a786cac4756b851fc8866b9adfac2d02599148e0db7757a62b1e06d26cf8c99556b79c91a5649ea437752cbf3b5f121961821ce1a2a4c635da461e3e14626cac707d04dfb6ed1e4ac40f106ff5ba03304e28a38e99a6daf6d9427c5980d1440a99296c05168f5441e2a6af13ab4760f55407855e0cf7f667ccb5d9bb2eafd03e455f6a8830a5f14837ee6140c871cbc737a13ab68902b91718f29ee97a6891c5e98168ffb1db75cc2858cf8de9e394244d882c4eaa719363329b344ae09619201a31efc2068a422c384852416bf76aab2a1ee28ccdaf060ace1242861da2d6db4bd37785ab5cf706ec6f8201eb37bfba41f7e5d78f25814c3fea41f17e394b55e2f898a11cae04dab920e755c42ef3d01985bed54b7fb5c60ca5ab339ea3f73e9423bbaad707ec2622feeaa3a337b79b355ac60caf07e3f6b8b6f6b2db8d6af3c3b7590966f51d57be6c2471e50c6b6a19e9a3c40678cc6cd8a0bcf5c15006f3f656195358f0290deffafd5725f79fcb3bb4d0b20e2cbf76c0f54682ec865bdda072450f09839fb73c2dfdb9d293b53d1f3ec54d12ae3dc316175bd0c9baea0f568e94930519d1d23767ae10776b5c4e38fa0a0bb077d7d04ca94575c54832178d1d6095e83d7fed465a76f180e8e56d1d79076464041e0ce90dabc87bc8b464b8a1317e0f68fa66fd58f0e38b86f128313e55eda9fd60f75fc6e76f69b6f1957dbc9fb20726c1edd0f5a45cf3e00fee28bc6e0dfeae512e356780d10b9d7a2820c203e84bf166d045b2f9d4566e825d4875c85bdea15effee622073cdd69e8b5643f6776a4369bce00369d02f9d08c424eced4dc670fb0b0f392eee4d1d0f3d92c4ffe5deb74b1224899cd6ebe5f3d15294556a5297a5de0c7f0496f5bb2cbd4ad778ca15a77b6e7797db5f27f3e3f3360e9917ef7fffc76a865a14544b879902ce098a9bae8b207dc0cdef402149a863be10fd09a469759df197dce538904f3f4b1aadfd26ead69b96ecfde108a56f501565804dbf63573b433657152ce74e74c134aaa6cb2b0f558cb101671487c67fc6ff28080b7dfab6edbe199072ed1537b2e01724e5bc293004a2a06edf514c6725567ae51339ce9573b7aab3c52241eca2956a04112ec2bfb13a4144c3924f9ac2f3ff5180f7415b578b710b7e17532812dd29a0d7f35a58f4f06aa55beb6e8f22600bc9bf66f18d1bd21304184ca76e861fbc97a49a5e90526d92fd129d17b8c62346da38e96d8f3303e73a1e32dd246ee5c95501944e0a5bfa30b89257e9ac10a626ff87ff03e63f99942a1a5a52ee5fb7a6756961b70b643efa54258c42dda47132a627285326841b70307723a720bb1dfa55569318282d94267c76aab1c1f40ce06a90f5e9d4b3022209cf4f587013812b916398eff4faa26b8df043b4fd81e1b6b94fd826555ed61ff28d0dd530fb79b095eaf3bcd66de220051ce7dae4d0882c1ede5f974cba1fc0a73b1fbbf7c5603fff8733fd60f9cbfa8e66f7822c6278c707a6eccb0f8737ba7443d55b3923fd001ab2ca200910c8316669034918aa2c0e004410203238c6740641cf61897978d793e826d353657f8b399d8bae5e2a2a7795205a3549313483c9cf7e3d4d489bfce7a1fa75c44a5a6e746f01104164fc7a42e63b88a9131a403b27625d1913af06827a8585d041d141b377f41d86ed0abc75e03488f650e05fd6e40c5f516d5a7af0dc88820bee8cab5322e5347314ed84cab8c5b4a57d1f2929afecb2aaa806d0bf325408cba2d501f00a54e3ba9f0d899dda7f9a3afa3f42afc573d579663c9e4a267878b3f152fbf698b3a9b1cdf3118bcfb2b82b4ab922d5ef4256423a843a2e337660596c8eeff3488204fd3426e2f0f31f8cfaf125403867c8a38967463ad7c3de4e0086d15462b46073e16421448a0f06972e8ffc2143c9875bd3af2b26d35200905db2d2cfb146af7522d07adca35e18554a79b65c84af0edda5647b74bd888dd5c572fbc88b89ff8725fb8c11d97ab545b340dc488772bfa77319efaad2b1f69cdc69c4c54df8b1386f57ed6a98ef7de70d67e67ba8af2a47d141d04fcf88ab4416e9b65c750d64f77378076d5e26d2c7cd716d7c84cecf4d247ec5ca10574c69e99558e49d529b52b6de7280b5ab445657dfc9b1885c2f15f12348a021a83a8ce8df14f42342c4b8bdfda75b3bf75311511593b14fc1ba40cbd1d1789015f61b79298301a36861b7fd582e333d957f972da5440227ba013c28fce8a9d81b1f943f272ba39a3df2df09606fcf47003a466221631acc8f94867d1706ba561217959f3a6740843e187c46b8f485e4c203ad82fc79619accd4be4cc2a430b6a56e8e0df5de7edde3233e59c454eda3457c4af4b8df8d1efc42222c525993664f94ec2fcbe99513b7a3939714f96cef25048d5bc93dd3c5987d7080788f58e17b1b4e693f2149d23629faa31d6a8a34cb2d131caffd0c2b2be727dd97cdf7b4a272134eb20e0375e916f1f26010dc20b2664abbffa56cbc111f96b8229e065c7039d944e718389b4b1b17f96f94c91f7530b2be1abf9bf4f2676b94bb67fb454ec30ee020d87f9ed676bb4cae5ed7ad7e2cd997a3b400624a8f04f7c4c45d0ba8ae32a501b74f1d05da7a50aee78e4747ab3ddd0d1b308083d70155d12b922c086bd3080c3d0d8263b6c3a9e3c763797c4c3e02b96db2dc38dfdf3353163103088c6e8da2f2516b7a8c35bcdf66fda06670788d5b23fde1c419fd14ed0cb03d137073ba684fa134b4db2f0e045e9378a0c87be154c6881dd015e97ee187a646a3c870f2bedd836aad244e11f506eb5ea5b4a6b328cdc80cc74432d5e31f799c43e4f4eb29046e99bde7e16d24085bcf0fb5875759b2541b243557be642ca0ca7e665de8395cc94e8196a78413cb7b46295b9c626a1cb2e56169d69cd737c23dadcd3a9e625f29d572d0fedb46d8a0509d076448dc554ad829321e05dee944827c7a1952368416db1bf755e72fa8818ad5595d9f1304a28fc65ebc6dcd89ae25450d58c8185406cbd7aa5b4c40c395316cb216c9c0a34068d320305935c16592a1e797549a478024503a6d5f2cb241f0bdb1fe4d47a9baffda36f83ca9f911471da9437c4ef6f980f0580ab445ed1e5552d992be2a8068b145f392ac9cc937df12b2fbc378caf94e5263c1d01eec80bbc6896280ebdfd029a0f69e0d709a2fb71ba51ebeda3c0608d0ee11273a292fb08351fc39fe1087c565a058f3d7e48f6bb2e02ac2d5d2862cf667774e0a3b61b013b3be4df3bb06111e9171e44550cd695304ae73ee1710475d6072a9118bcd56f23f27314f47c199363a67531b37604c8683284695822ad4505971cce2a2d9019944c588733f50ca471bb7c4fc20fe61c7dc16cf6eac4c4099c3232df018fb3c837527b8021a1a20cbb5d1be5aa5ee5581800852dbedeb38742dd540bc46da844b40bc546e60a4492e8943a3a93ec6a46e0f5b855fdf8e188a0a26a9b9c4cd655b2801c23a9b85800a068c197a43fdbac7eaaeeb8ce9bb6d35e885cd7b0b6a5c3d9b76a5d9232481c8de2984405e1a15399270d9c5a4d9a322397120729327d55d2ba953dcb007aaf5509a789df5a2503da72fe4ac999f56b97d874732e49c6d44591860b79aa5880a0e6d7ae5a30ce83e895aa0a42042f4763526b63e881e809d942260fc7b84859177f0efa9ded039d6d98f824ed18b08e2f0edd1e7e654bb937d75c91dbb3b40061de35b6d1182e170e81cfdff35ce108a212b4ed197a58af07570fd8dd23033e270b352b1d3ab6ba755a19847c58287c6568d618e14a75b2f0cb292df68e9ddb110cf49eaada034e4a2bbd5baf95eeb420182de7fd5c0b899a3a91d84d7eea9fc6eb5c5a9f807d9b34faa3acb59a9c767a289fa1963883fdaeac2f210c7a5252efb054a625b58c68dcd1b3bfb6ef988b1ba21690d36743d6d42aeb4f580b3dbb3361c3c964ff987feab7d5dbd91d4cbbac8d79fadd70b5dcb3baadac5cb713a33b08930c83e909a605b5f14a46ab1ecdd5f2b028dbdb40d6f4675d7e3d093cd2afacabb7abf847a6d5d1ef522621788b3dd8a262f6314b8e3e36e30e268620103656f31203b6ba470315b73ca108c1bb8d4739f056f840ca3a3127a43db82725780d5364b4aaca5037893150dee761266c485c1922bb8653905f1288aa26bad81ed9b3f7e55ce08b183446d50646c09483e1f32683ff85f1e7c88a0196583ff2d0c2fb11bf5562be4f1edc1540ad46cd7a1ce75fa04ea56be775785829d7203c35d113fb6a1cbab2844fdc56b5a55b98f8011e0ca22f4e8b396dc5d68a2ac37bf60de3fd0d394e2f5ed02fe18cb567bea5978175b02be81785b857c0e2d9927aba7f545ed03588fd85a8bbfeee66d2082ae6f8e2f3c9dbd8725f1861586df3002a2d4c68dc97cfe3a2df6af4033f043b2ff66c9a92918f96a969ef00156d50d4ee21b46159e78aaa5d7e230df2c865225bd0c3e6b60b6d19d2dec3e4406110bfad6375926fae231a5d8bcd8fe4895e84577be70e87c0db2894c77e5602d19b890ff97543447201fb4b1152c3000b5528caffbe5a2c37428d972b079e834659fabeed9ebc03be8c15ce1599f16fd5b3d75d653211cef80b0e84124604ea48b2d95f47d744d2172c308fa18a61586fe159b8b42a7d948c9c74038423d0605d0ef09d0d0724d907491335bc0d5ae462457682f48de4a77a5f86bb8a86490c0fd5051d4918a542154b87696f0a263b3549f6642d458f2e4aba0e552b57b817e56fe18a02f10d32ca9a54d3c1690b847054a0056839c6528517d278707e65a867444c8a417aa4d3ac9e421aba1252e89ccd3d0ead51d13bb2dd9ccd5fe398e81ebc0ec50d9bb44d45c018e762ee428e401e95260275f710597432fc036f99fe9140eee56e3c83c81d66a0e1c2e3259ee4ae70f6718d81fa02445cac6108af134936b58f6c455a6bbafaa0b1e1da414210e596250181b72036b5e4858397244fcc082b6d109e815ea6e2e1fec7bce0a04d2bcf5cba39e1ab7c2f913170053ed9a41c1827613040ca69882b717d6f48e022e8e243a59e47c25d1a2a55303846da58dc446567e1dfd7895246b20addc12b18849881c996318e60de789ccc1a837971af77ce2b9aa5ac90aaf96876ec95a9b667b9bf2f0ae6360de343ab4b923fdf76fc780ab444dc7206f70d3bca860a8184fa0da4dde3afe3ec91522db587c033ef2d10c20bc5ca5071a04bd50d926adc0aa35bd9dd07d4bd86516fc812e3509e65a9079e3607b76f5b0f78db47f8fbe1d1cb6d0537609deb628960246b8d35485fd825453ff0edf64bab5ff880a006b960db09d1f1d5519608a3eeeac76db758652231602d6ab30ecadcc7d2c172d28b3f39f8e5154d3ae50105e1c22f6b20f7ffeff596095c50df5f0a77111156a980f74f01e8aab29e01d4190153aa6fb64cb6a73790daad0d90929d385e7934d1c00f84ee83b9ebc611094516464061c38011b2c0f5a847324aebfdd26100f493720f3f865d49e0fa3e29f3e742f9298dba9978586e7c110734f3930dc1ae7e37be7fea901f627982b0bb8a3df0deaf5d23d462c6a35df3d37731c5b1268bba05cde8ecd5700c9ea58e4772e0f8f6dc7ae34cd6d43b53d5e03a2dfc853aa09045c7d2ad1df95037ac00551298014a962e21893d48df669f74a670a152a2f4e93ed4c3952f61352cdf306ed42db3e0c6bf051100eb369f39d8e3811ae0098fab391a450cd551c4658643191f66b8c25576b86e8585e9058c5418e8d1f7157ac07ec4df7ad57104cae964df5c0cb5f8299b622836de9fa07e2f6d2e2c5f6ebc0e55f81a47f868fd4450b947f1e755882c762ac57abd0179f8b30bda95dfbd5d7f06de7cdb06dfb7b9026ad947bf3d7c444e39cfb8ecb697e3261a747341aa66fad8a08f9ec77d3b1348a01dc65c18db5b6db7ce5a31670325d1c1852e4bdcde661563dbf903eb90386a839cd6868cae5819cb48c755bcc3a8fc29942ec6fccdad0352e75281d0be12b03adde00441fc239b9dc767205ce152ef7a29da79b13cb6ea923b120ad5ce8761ee684a9fe1cda43b56d2a259f0640df1dbcc9c2ea43169144e5fa266a2c781c7c6c67e1f112ac3401ef2e0ca1f55c04b7406dbab7db7aec8acdc685ddeb1e728eb7ee24c7b1968f41cad893992bb53466e5e00b9e3d36d4dd438ceb63194a1cd8418e0edc7a57b9d798e056ff19ead28f15d71207e8f8eeceffe3b3b457996feba1ddfcc9dd3e4845c1abc34e307b839248997a8f7f2f9ed25b317b2bf67b003b51447afa3ad8bf1eedb174f10fc5bc3306dda19f60497989de1c9e44a67d6239c857f5f843a582b57587c8a21887e0c3d8ea33a22ce4e34800fbb998c80f0a797f8f1a4e682347cbe1954abbeb0095d727658d42457070bf5c654992dbae7d7d0f60445728e052a4ba7087b8e7ee5fef7ac63afa3a8ab63258dfcabd61da1fb6c06200ccf65b57e2889fec23af9f837f5b82a9348c7208538ec1b992fb2075b96b1adbfa50f2ac07a47a04869292b5094231748bbbe50b9556b1929df80013f747e13279e954e386c6a55d4c4176790fb739095a3952147a4935f248f8f78ee2ef5bb0c60fe072e23798430f3ca92415333ff44a9527d764eeb5351e6e852b1ed9e0b3693523fe9cafc97229d4a95a9c3e8cb1b74ff4b8f7bfc5e7a8d9279d0d9026c6ce09addb2877bf5736aa05910741c5ce3ada373da524ce9652b95d39319a84778efddc9d1827f06eb04d3c5c08d561a63fb47dc9ffc655adb69fa4a41d61802206723eb8ee58f325110ebc000371f6d6507f27026a1cf1aa4efc8c52437db072df0742b30d534e16f39f134179afebdaf78ac16b66710928864072b826578bc6634d971017cf57b0b24ec084edd7b720bf77db69979b2294f70c066a487778b95d859a547025a68ee7ce424ed291ef43f2c6e3915fd3d46c0bcfa5dd2c661db8087fdaf4b8feb10e0e7e2703ca570ab13be8685731c3753a5f0bdf8544abd13f0e7cc77554931dca80decd4827af8005156ce83fbfd2ab7c4b4111f713a139dada0cee5ad5bb33210980d3809cf3e59bf9b4c1bf4c99ddae5aeffba72beece07f5b0be29aebf97bde2d4a8417cdcb1f27360a36a8a71924d2898eb19f00ce442ec08c5465228c20db76ada0f59b26bb4fce10ba5dc025fd52ebc7ec40254431817658255727f387cf1b3d74eb63d793ff0c64915c3b49cd2c7db0549d58d30f4226773bb623b61a82c402e8404a6711019810a1ed410dfc29e654cffebf05463777f280ca3d5e40bb1805e53e7a5d9c1c191cd457fafaf211ceb846aa82613e2912d0dadd9e726044bf4d512b1b419b17378e10e48d9717acdfe6a2eaca6f60df9e1933356d7ae4e362e21650549c78bb9b703fda236cd4c1bfe5c906bfb81223c4d5721bd3ff3361a9cd1af54ef59ad0edc94882e3028f1a16bda54688c3bdbb2c0d7fd7f888b5853b15476231d4691ed4a21324f6e0b17d8d771df14e18ca707dc942b1039dd219c1c283de24c14d6cf9028808838fa3b3cb19185138409f0a5f0fa3f11cc6f2e3e2ddb8b24f45ae8304f18f75b395cc8479ae80ac6fc2a6517ce98ade6d8c7dad476dcd27dbe7f42c9c7810b5ae7c93b73f3b3c4b1a26460d795edfc11b76db3d977aaa83f030872d699df30e9bcb6216c4ca347662f5e60501768ae2510d745b7b0d370eb5a7d04e156a20c9a20ba067b16250756fb6f002ba3a738935d7b1d19b2c5c1253d4355945e77f2dedc3b473ad0c788f68f1cbcc4cb182feef5ef8669ee201d5f23f1f14a31bf984a17b080261cf940d752fdf2b60e4a088a82ab2e12d340ea0b871f749d70e7414e9bc03dc75b38c37c0f694e79ed9b37188c1480bef2c6bbbd0f123be89c8d927eb0c0dc890c048556ed152c7ad9aa4ffb6ad20ac8dd1006e60470d3c60521103cff68e8f5affb0afaa458194362f5c7b5b76a48cae2bb50191fc1b8a04b303f0beffeef97d77ad8d9adc8916e09ec22d9ea23b72fb4373bb8a97b7721ef39638e0b196ce9e302536661dd21554f1bd5ca8bb4c271b2020e674a048ba561bb4225c93ecd6683302f33790c45939303751a0494174b7caa6c8769f362b533144f55a2d59d980872a0c35bec8a938611755afd2811f774aeba9b91de88dbe402dfa0408469e913487c9872e44cff98e45aefde074f002a7d9d364a2c8a83e4d597980ab19ee4143ff715668a29123bea8a4b1fa82b101e9578da0b43d437c62afb9f69e3c9138bb7c4ec9f548b85efa2a81f4a913281b194c1e95ddaf281f8617048f6a154f1fa4e5a6095ca00c5449b28bed738f1ef93ea2cf6aa4861dd0c279a072960ef09e0722c23d251054aab3290cc5e35e5c436040e848912beb371dbdd6c9aa8d3b5ceb1aea8ed9025a0b40754aa37ee8a7a0870eb1562d045afb9fcceeb92ffcf90258b76624ffdde41df97f8eb0ce96cab8bcf471bdff7a31c5508c306cacc2f23756e07d261f09bb88e52f1f135ace8b3406da72a490f63a3c39e6e40aa947eea4ee7d78bcc2eea7f50c6e47f5aaf9b4bc6ea8fa3466de3b0961c251baaef3b5f127779f106ff46f0c77224c7e47800bf7fb4652940b9bfdd3d009c0a5442e0ec50ab43a47ae83dd742d3477d5b8c9598eb59cc2ee079648438fa179f3f260c3c89d1d918c0703b7d6368d1023853e6528a4939167e036e301a574c4cb41f19aa3ea9aec0503dcc6d99b135f8f3746f96ed111092920e298b41a69e955b8495cfef91492da2976d22663b0ab425548db0843ff705c4e042d04f7672fbbdfd0d180d071cc340139a364964b3e6467aed49d02460f27f3036b9b4358e0223eefc0d2799be23b148e003c3dcc5e1cf5dfacd517cc2eb396471a1e062342b45e0cf29cfc781c16e9dbb2565f1a549288432b5a897b1528bf38023848b09e99c69130855ff2c1ee09898259041f68efa74219d1603a0badf73eea8f12e73bf9fee44035acf01beafa0135ee34c2e15bdb443de5a5f0596ac4c19ccb6bb063fb8f6fea55eb59703346aa96bcf8eb09fdabb1603c5f874888b129de955cf35cc70098f88d221709f074eb6c6c578226fe9ff14a7e96e61e2f43de7995ec986f86d9c930845b112e4a0d2e7ea55a7081853f6cc35452f52386044835722387e460a3695ce39d2f276998da9510089b62bb148b93669c9ca1b67bcfd9d409a8037ce4e04251f1593b749d57795469ec10c8a5b4815b7bc3dee630dc2f65a7e313032795ab775d77b393a50cf21a854bd5d37a5057dbf852233facd5fdca04215e1cf1f25efcec71d7f03763c80a65a1f7041cc8db901a31b8e976240cae28482af0cc5e258aa32fefb0dbc3c2cb10d4bf841282d61fe949e50b162f24b71c42c0a73f41c6c68c9a43fe1994aa068ece757be4e80f336d80f2ce15600c8de7f56868d3040a5aae981b007a3f4662e87561111b615072afbf2659fa1e8ed9914b6a5b0e0db9ee1112bede852a5f8825b3cb6c3e545f84b6efcbd54dd07043232b0da97bc59b29bef175c1c3bebc1f4d6ffab7d52b05128af6276997e07b72a47c9a7a9f9477b4bc1b88d1ba6327d069913718694d0ac434be823e5eb5770f1c2859f504e31736137a3f35f48266437f00cab781223641bb2d267b2db72cc19416924331184158ccf5e116f981421f9aa6fbbda5125132272d5a49894e6231122e8d8bae9dbec2ee73b89b4fca830dbf6a12525d85223e81a565d0fce2e007a15891f604d8561b81de0aed80c3f1b4f834569d32e3720ed07c90370ddb6fea467ce8acba33d00c8e1d203314d653bd4cec10c7ab9409491c9c23a745a1d7820b82d8d45814f63c1b184296916a73cfc47b88f75100af986dec66472a9ce078f752aa9766e58e5433b7b83e81e6179366c70656aa902ca3cc54a0404635517412d5a61c6d0d61fbdbe2c9526bb408b03cb9d20c40aa471140bc1bb921d2f41d65f1138cf5f437da1d81befad83b0ecf4e3933409bb8c98bd20c1ddb41dd8f1cf78f3b0e8402d898007cdf604fe3f098a230731b41207bb8892cefcd30bceb18d19864cba49f0bde8cbb74a9581478b24284d8c4bc4c22416d05d9b876d9d0baf9f2d7eadc339954ca26c5007b366cc6361fab6394a289cd867d22c4999a06aa7987dc94b4264ba1c1a61a8b41b1957b84e733224f8c7705dd7d14182369548f593dbaf1b5e0e76e7a21ba7231eebb7a36c6ba277770b39079eef5dd9cad83129ffebb2866ca3562fb80eeded453a66b54a3869a93b8061862b60e3a8acd5bda55b12562504aff264eacfef7b0491df4e465e0a42ccb3842a1bfa7587733a490823e41c6f9c90b617b8c32e44f39eac0f0f6106dc91111b83def085fea4626db2f8c577debb022bc8807d1ce3989d3757f3d5e1cf2f259223e3078766c6ea9646385afaeae650cdf7f0725dcf4a3a1bc9a2212d930d6d727ad6941c58413f4d226109082c8529171677374370aed1c3c488d73ce092554709182a975ba9dd0ce80154421c3dd791b4932070603d10b9e9166ca20074798a5f262f9ae967505007a7d11b227708b842c2e267265b537897d955ffab2a56b6dd8f37897a1015b0f1b2e405d7a729054184e19a3ba0369a615037a8291a595704c1c705962aa9aa46c11184c464b5135167a27c08922679d609663e02cb0dd5755c5271b61d88966730ee3a4126293cd2c9a99f15b7af9156637613d0b2f0ccafcd6e60627f4f1fe3a0ee790672121c46597b760b773e9b630cfbec1b788ea704838f5423b649a13c9f76e36ccefc2c3c657c9322575fe29c544c093b7253ff241d19cf625924c4e26b3bebec9343d7259c317922de8ff162e80b0dc936cd3f7ef8a234b6ee4cf575b281f51e6595b7825c3e9a65834b5247169d6c3d4c76e285b4cd1689dc4ead57040db17acc4e47e324086962dc1e8fc98e97971019dd72d8cfdf0753a9967706be13937a2dea02b8920378b35f85f46aae7e20da255d7ad8a86c69ccecb0cd156f580d9510f5628314d44adf63fe4a9b04a5ac03f5936515ed09c03e0c2a2a03863f9273fc0d01c32adf523faff3dcdb1fc27b26110bcc00fc2b9d2f8e5f0841a13ec46f657d4b0952a9116c9a1335bb5e4910a8fe230a2a54367329e9ec02603eda061fe3e2b8c61ab62ade98b8efbc5eae2f152375ca1293dec4b5b55d82efbd95f9edddb9d579e17ae11e4271654e7f6608e31770663a2979144b67001430bbf6f251d98f1b95458be6942dc930f25f0550ab40af79018399e453858030d3987191f45dcf15c8c55dade8911ccd387c0078c6359f7d1930b5b786775a6368f19a5b4de0e63e54ef64a9843308a49144fbf3dc7cacece1cf40f03ce2fb263155d5b0b6f9810ffa02355bef7a09519d483c44467c6432ebadf040ef2efee3ed23c834d80e1c0508cc444782ec9b5eacf4560cacbb61f9976b180c25d1b236fce9c64a19a513a8019c15ff06f13b2640e7ed9f77c002ab95753cc46961d199e11674730445048384f02ee4b42e65330981478f2010e2c3365ad30c3255b9872a48374220646b020377039b42faa61f675f185e4e246edb2a8a7f361933f68938eda339e689b3bdfd8f18851bfc7a55daefb48f4a81234dc292a5f47662f50aad752ccccf3b7b11e3b6e224a79a5e40e4a1c084bdad9cb59ef1cba9e29951a5f88d586d52e03da8466d050c8e6ace9b1513b0f10000278d202674d8d61d88c59a74aabe1a1e57eba63fd5af38c457bedcc3fa36ca3f704ef6bf1603d98606f413f988117d5c664673adf88f2f5d6616ac2120d874a1f375731a43bd655958abe55a951a0510f5534f15d21eea9c964d13b9b95887de2d8b35c66257f21dfa779f36462a49d2619c8925e6f0e2e844cca3fc28298c4a8b1aaf521686083a68c1920b1fe4a427578cd24ccb87b0e71e1fcd76f1edea8d988e502bc4aa203520247e5786bbac7623ae8b08e455cd1f6ea100a8aaf83b0dd260b8e1f146d294bd1ab49a1f21db45726c33d8c5edafd7d31ade1fb7eae651d53c59e320de87ef9c1ec5415db9b92bb0506d3ae4b1d1c6d7c7c62aad3884dffd6bb3cdd7f3c89c59ab30eba6e5be8f69f597adc534cb52e94259780f639f2ec79946f08b090d21523a78079f3863e70bc623bfebf8f5128414f88632ee8dc4d02f9409be90de2522571b13bb1431d9024cc1dfcd71077c34aa23c3cc4bd91883a91b57e72db40e569b8a9e6f1bb0bc09e3d29bee3f4af6779c8bbf400e19b07e905d99993217434b4257163fb159268f45d662c2b66827c94660d712a7c8230d7fcb1d4940807a9d160109b177a3aeeecd6dc2ff78c766a64273b9d8ab5cc6dcb1f4718bcb780ab86108e758d128abb4f4d93ad8e8e1599b1b04b5f68b503258f16a24b555667a19dddf4d8a4040a37e46d948f3995e77143ac489e0ba4aebfe988ca57a50f45f5dc7149aea57942ca75dbe6be40c9735be1c13744bca956a5a21dc822f508a10e0c7195ded898bbddc8429121eb5141bd55972238c3ec823e827ea3968c690354f588e050858afcd6a7489e9f8155d90065d710626896baf25053639ab45bf32f5e5c33ecf4768d1fd89514224cffc48dda290aaaf3cf8729d6431115b306fa071095959a6d85f71e23d2fb91927589cb7b3417f8abbe6f4bdaf7b3f1d2919f44d4dc0f4237dfc13d52a75bd39cdfb02112a13f34d98cfcc02517541559246b4e70d9a8cc9bab73e32bbb3dd2b266c1f965178a46c560b6f17f4af96990e9e58eac336820e112 +MD = d0eb914e0164d7b272e0b8bd16c18bb311fa528db3e31c84025f259641921649c222ba1be6a205439cc07bf44b8faa02c73caf3af31776cddef89e8e05c11a5f + +Len = 79432 +Msg = 78c5626c5f3fa6cfecba132e1896998c6e8927ea7742c20e754cd4835336c6e1ddf1d04f2d79104565b7da97a4a750af32b63219fe6ef7464b541c89a611bc661bd1610ca8e91a20f2bccdbc37dfcfb8847bb22828f35e2568c763d174b98e959a2ebbadbad6e9e7fa8f94a7ba873f2fcba1501ddb1b2035346d5361a77465f6c2cf86394a8aa822e5f9d66016e7c79c6ef1b302012c65fe180e9243258b6912fc7e6bb93f4b7d5a1ac23bed31479088d73083de816f54077a71c87fd846c170ae0111348362901503b26d58f5efc17b6d296aba432c16d8c35f9e1ba6ec9699422122b2fd170ade079111a9492683fb98a30e9d2fabd2f95ca0bb2179c70f131ea6433c95b1133a8e26d2e61436fe92c065178f2d33b1f3abfcc998381d5568ac581ed8337ad2b3003a5519406559c74d382e99250ddb4c1a3b6d89cb378f1f52ff5b91bfb870d0c6954549b4fcbd22a7e4fbc1ff82778f102451fb195de6c17a62a26c21b4151946ff487f5842512c37312511a3d8ae41f5801df60cd682d58b4a997342b6e717e94006c214813e6c63e75591f957a7ec301779838bec8ae3ed7febad08051151171f291ad0ffab6b94cd3248ea498b172bb10ba87fe5267407c93e225cebb9503966568f7406c1af33ac653e5cf4814b4d167e6fce0a800f43f03bdb27ae089ab5db372ae8dca7c2a64c957b38a2b20ffe0d78e061a3bd3c08bb89df4f9725b9f54774f214c9862c57756b08679945eba660a10220f80883bff3d036beee38355f71b5f0e1178673acef8eecd0216367add5a3ddf350876dce60bae95afb6b945d23a12a350cce210f81a82f5a84340c7c352379c3f562819ecaedff0d05e4605623e0aafaf287bde7f55edaef08df617947ccdf762dc24797f91180bd56cb20b23a1b78160fd8d09c115af376f78def0dd54316f641cf4821b5cf755434495dd830fa9a73aceae1969e4485d697653ca0a533262979b00ba5c5cfe5b9e8869e32cd241af710e5783c63c395f93190d29b814218f91c8e1989f2b8d8d4baa96b27d942ff8c85f01ef82a802dc60c3539642f18f34d7490f8370432568df1da4c1f1bfb521951335931b9235425727df765775ebf0cc7df3215c3e768ccd743ca825cf81a85bdd7b450d95313fea990960523bc84205ea24f8df67c1579b2096cb964e05fba1104b4bb52b87139fa959eabf9d94b708102d506679c667ccb57bb2afb5c2a9f95e1e3dbecfb76bfadb495c1c35e1be477274ee8dced61bd6a533e3ee914821c9197c8186fc42a760a1705ae47f2fd648a38419a1e171025d7257d5df5af6f194c4debdba2ba964759e375da4e3ef8d8005d3786f5c37b9a59f600f0e9d6f97e0f2cd58a4e86c11ae1436ead9fea142822c0b7132899a90539ee505d8b302933225c0d8f3bd0b3d8eb5d778f049d593d388649a98140a24fc034f40ea4660621cd041b50313f7567bf5918e843ffd0fd8ada75b0c6616e5e33f17469fb1f982e584d8837f87b0eb1a560d92025b980515fe2c490c0a3161cdd4c59d85a04e8430a5edbaa572d869de59a439f7273722101c6bdb237afa170056e29c287bcfd492c609c1318fde612c62eddcdf2d4ac56b6afe97cf32c1741f27e6f8f4bf0e026067a54d9019235fa91442f136c8538d6c7c5ce57bbc38079eda5b0a66e4897c4e0d58a64db957b3c8f06c2d7aa2e1e8b7c2ff6ac581ce5ff3e0b7671b86b2c090298c61c6dadc0c0059a1d827276645c1c16e9e193de4dbb2dd74857f102a6dfb3ec906981830d6e3e28c97d8d051430f1a12d6032b1c1950232afc0e0b40e2d3df971b3ddbe692e81d94c2fc38435f141f94c8ffd3f4875044332144e2a6bdbe6e6f0624a07dde815d430ffdb9bd0865545ced8be2dea437c3359bc030cc5d0f7dc96de900670844342fc579ff1ecd775ae39a23b26afe7b229ac1ec70125f6b702e98f77622aea534b399ed52f91cce85c17543dd0a049ee4eb4a362b19234708173dec7c413028d166e3b46fcc74df876ef588cd3c45278c9f8b39bc514726880bc3147d334b538cc2398ba019742eb244a15f0d824e897c300b73be5b398e9284af1c03894e99e94e11cf9e608930a90aff33187c6f4956455150bb8788f39a0a787fb9a3b8705972e2fca5223289ddfa65a1687b45fb8d37e37d0e76a3da0115b59bda23278b6fd9539f6edefe9ec3cb7b26981f60f493903835519918b68a3ecd1d1f880a2f9ed9ba2466074bf3ecd6b63f01c92ee8fbd6d6361f7f661d77de456fe432def168fcad37f53ba90ddba49d5740192e3d488433ebb29a0a837c8cb4f0b2b4246540ca9326c6dca460f2cda71bcd7fdd55ec10d7c2c569746ceab2726c15ac68efc8cc028d457abc71d4ba49d9247dcae779154847c26e425e54f8242e875c1b15636981e7eb965fd4f3e31c2bcf9365565209ec073438e2bc3dc630b48273c96aa33b87a333901ceec2e0949039413b270957697d8529d42b27953e9a8153d2540aba8a5bb8286243e42b2982fc17cade219617175fe1a51f84ed944d1eacf465fc5f108de3afce68ba3b6190827772e01d3e9b610ec0c40de847d848c4cf7e151a91a0a640a6bfc1c789d33556f0f1d17ec95cf72c77bf7ac43c7119fe4bfde5c80ab121499dc4d39eaed4de04049626a8bed226335705daab24054d2592e25c9722d8ab79056c3292130d16f432fe542d97a18abdef15c20fa6fb3ef534c9fe0a627d91596e2453644ed26cb1fc88fe9fec31a116c09db5542dc97bc7c2232e8452167f65487bca67badb4bc7d1c46a621518e5e84bdc392b310690379b7c72b76a39c22714d0ec2f0f7e30a0534f3c06aaadd5ad017fa1f75928f8af51447ef6236e060963c24d2c8531b7c5e177f80025870cdf81e6944afea731a963f987d30619b7a6b5de61e2e49c4db31cdd02e11e3ae7fa4daf8498aa17b7a0442a41d09ad353697b73ced486246ef255fd012bed1fe387b5490752d3e1174e825511615a1165dc3520f893e250980e3d4657332accabf25931711c0499cceeaee89b27bc5a6b796374538391b76561234799b95fb79dd4b9f77656d4b8451b1a7333764a14e0bb96dc84361caf3385b88f3d00e47735a958196b95acb30c5e65737eef7be7423d3fc7ef2ddbce9f066d7bb5bc5171ffeaa405e55af510af230077d1f5da382c58ded518cd679c144da29b984e3f3e79033e4b5809565799f38beec12bdd8deba8f47285b7387e1fd6086d592906332dad77685843490e596a6846e0e40e6f2c98012eaa5dd70b3e39ff7f7cff3f069a23ffdb5a7b359b69d2161ea5d0e5424bc095781b33bbc9dbd408307813521f2b112812d323a49557d515e49454eaade5ad11dd4cdb6f10955ea33edf17d7f36cff90bd56df3e628fedf82710f2971876a816ccb3a76995e71460e9167f4919dc39ca1959f04bb98e773d64b02c63086b5c04c4e44a23b04dafb1cdb2ac2df9057a24e5511954d0e02b460bf684e6f450337c6453162606358b265b4840ef17551b417fd0ccf26f0154b2ab687e8b62b1b8de1984ae08fe3b213f202bb0050b57a790675d6d9cda7e9df3c16a9bd8ea0c76ba630d74150ecb2c5caaf18c283b99a9a22a5b7dcca9c46199cc914f47e0ccd791bf320b02be61e71f5a1e37912e879be7375f900a636f3a154b510b60fd8f65e4aca6c53a939bfbe7cc2645086a9de8e02cee36ce8dcba1e6cc4e72bc76a0ac33b9d0552514d5d5566f8e36d656693b1d696bc4918f86139eadddf7a312bd14ff55531d6ac8ac0ddbb2da7f83a865ed0f7b7cdbebef1b199d8e742ccd28313ab80d839074059afff8348f91a8a7108936e175ef4632f72e63dcc564834db977ee410650c9820f363c73121fadf8e59a142a0b6138e1a6cca22736417de99267129e4fc0e394854b08fd067c2c04718a37b381f42c81a66eb8ec4b3605827882c583b4834ad3a9a8fe10d1297b6030f4022c9dfa998972af189a78d4c2beb855679ff8fa77b5d8da7c7d06ca3482b04213e3a3f7186f97e851c043803de4fe49792171a8e2b18f5a14801bb0efe25c0eed77387c21aa82b4f4dc3fdacf9b96f99ad6b311245d599246c884800605a0b4ef65cffc3dd0cf9f626cc246f0493ec01d1e31b5b52fb42d93c4d5ba0f732ace9a1ddef9d568daf23af07f5758844247a07672290daf2b867bf383c164a166d68e3de9e770e94177def5db8e60d34dfaa56df8cd96321c378fe32328be16c1473c147557a8b87f7adeeb4b4ea19cbe539c633a25f77f22bb1ff218627459d6ab145005cce57d0185ab4f632a73671fdd05f4bac4a9dccb7bcccef8111fd1237cb76f1fb9afad5422d4a097a48eb8ef1172a0ff2c25e1731416d826872913243685c037a06fa003ccdb7d7d4f3c08a87b52e68bbee403c5fe7e8c486718a645531001c203ce1b8d0e4034688d13ecd8853733c51f6cda10957479b22376f1237ce692536613664c4173740dd09ecbfbb980275fa038daff93992f183ebc8a3afe69f0704a0826ee11059ac1cc353c9ea2de2f9ff3d07cef634cfadf2b61e7f8621aba8d21f4c3def7774718e29f951dbb91bb2a8cbc367c7f008b7b7c0f70e842994f2e8061c39b6f38d79786068c157e5b6863cd549e0351644f71a30deb770a362cc8d7e7acafd2daeab2593287f2659ba5f058522a3084e8c55632e58e5133a1e1d0bafef588ecddeefdce8bff510bc2f244901d516083fe7b9d9e4effd3694cfcfa8c0024b2f7a262de487b789ddb61ebd5171eaa3fc925d0bc5782a689f597dc9add93c0ba9dc8c4d869998a554f18e1165fee9b1aeeef6336f12918e173230f362242400c49c1b380a46e8b03f12870accd05ba7e4fcbb191fdbadd765c7f1350ec642934762d8d4b8b5311264c4118fd00ec8ef6764b3a51dfa05ac53bfc777faea1e2afcd5cd0ad70ffa328bad3589b7e0b6f0ffcde6c0b0982273a7c2bba16fb6412fa99e01c3b17bcc7a7e75fadeca6faf1273df5d5022dd8a962a7ad49bb352320817657ce58c222e5104c5697751e33abd8d431f3eb9f0c77ba48c1a4d0ee7791f0ed14759b12ca81fe445883c9464e05913a13473befa618cdda395a0ca9d9fda568a690868c0c24de79c6115da18274ecea0a5d67822de2f9c654e7a2e9b2ba3b639ead9f9060541d572fceb6d2a9a0586e9794e3191c8ceab7a4cc5810aa5e1f786d3b3ab27f86476715fa493c0bee40324b8c52f6ea6d0d08b97670c1195fbe1182b80c74b241e913f942a95031d540cf86b22bce2019dd440384a17d9845b3c98fa2795990fd8f084a363bb1a3ebe6b0d994d1e15609d7e403654e98afa68d0ad48905d3a43f859e992394c2da988e60c4a2d9d2e4b389834996fcc4b7d8a65001ea3675648e895156b939266e71c469d86ac83564ad6e8c36a8206449729c2388348fa14a40e6cb23658d3eb7fe0526756b116b4e6df3896b074e09ecfadb0fe8067609ce1d4a565f97258e4f93ed413c125a071a6bb4e54732fa281ad7ff7fa1ce8df1786a10ad8bec8697ade9d9248d0ee67b413d2f2a6bb9a9414ba055fd35fb3c0ad1cdc61b38c424dd4b46456af8af5b4a6b38cee34919dfe807da8b03251b04b852aef739d6cc84e1c06fde6f0f722ce6e115209a5fc2027ec7fd0b1befbc8c7c83841083f6442b27759cf0ab21f5eff36b28a0aa2050b588146e62b2064e17e9dcf3ae8417f98c20f37428c9d0b8f8d23209ebad2b346d9675c50e6ff94e4b62d7642da4ac2b3c60c27be335ac29ec15fe2f4e1de0ebaf2c54978aa0494bab89fb5c1a70237790696b2abc6914c74e31280f6476d1e4debc393c43fd76b49cc1c141f1713e5d3c9d35e710ee9b2f73b63820ab328ece80b8bc49e6c1f217b39cc1cc4f222d4a959eeb678d30bfb11107b719aeeb67f749b42636dfa84bf3749d6541900da0de4fc0d3f29dc9f2fa9ac82d50dc1c1dfd7e313f999b2b04c644263448409e0976afb5983eaf34c57a7559f34cbf1ee15fb2b240d8a5948d0ec6d9a756ed4df7a259ef90924deba79f254fa183c49e728c6bb9d27a7baf754b612a46e402a7dbffc2c1559406692a074f1bc08c890542022daa7d05a9c63deaa79a8b760d3626dd6efd7fca4537cd114730d8dd78ddc06f6d26a8e0bc63479b0e9cfd93897378c9d2d6579ba6d1f16ba24142ed10928e12ae90dec2001132ab0ac415b2e3ea425382fe758e97c24764e4afa731ecce0b9a568b86f0215a8fb920825c5ac8f503e8f3d8622984732fab92ee6e4269eab96519795a119ca9af33e46a3a01953e4e28a9e695e3197f2a8e118010a5147318115bdc909cde8911a9dade573dd520716119cba941b340c8aaf4f736c088e1b81d9237f2f87363779958710c6605462e40c7d9e4cbee627a80b1d6392b13d119f8512dd9cad7d31170f1a4f2209219d53638a3f0f8275eb08dec8f905b61abae202d00bd7a9852afdf4b0c80d42805f6bfe0bc564cfa802b40e995f4c7deebf5236a53268e116c8312a8fa311733b5035c54858d40d4811b485d8baef7080c7f70adb7ad8bff8b3bd9bff09b6021819b8a1881ee6a41dc30e29cd3577f59a7bda66b90aaea9f294a82d4a228358e062fd78154222fcefbdcce4c0f56b7602830233860b7209ce13fbcab71500dd5ad20a3435ea107d86aaf69df825535a818677578ba4ad4652d7bd598d0bb5f95012e9bb313f3990aa30923cbeebb809df2d42bc10fee6c84789f6c2152b2b1588caa2f75168249b22f7aaa85a6f20ebe41f6a485c40a5f774d0afed979ee997cca13bcedc8d5908b7a845cb14da16685804f7e5b993723ba355efc25a8b77e9e23fbe2a1cd8613d31eb6c8c33541fe80286f27a6d1fd6fc9ac0be29a81b5e71924d32f2576fc3a4586726d30104c5d3ab4b62efc10b58a222b8240ac7752599a673a00ed67a07a3f3c57b88c4138f911bfb4f2cfd80819503e52a4d00c354c8e4580f65e122b6a4ccac7394c5a9058a1a3fc11869a5d73d05f0d7da9b2a746516a587e1bf8e570ea9c517dd4cecb02670bfc19d4da3e403f0813499e0d40cda02011169bae8724953b86e4ca10717cee42256a2f0a1304d8b3f477217e9a48e7115b3e618558fbd922c80c90b20c3e8401089109bc841849fd31a4e8790c4e92a89773e22ff37d22dca563dd3603ade4a3361cd9640a111f4e4b51379f2f553f704655a200ef1f0ee39f78e42ee0616cb30e6c22930d85a521b1eab3537be349e2e84225aaa467f9b216ba69ef3aefa8ab220d79cc06cc981205ffc0386a8f4e8b0dc7e17f9bde7fd2cbb6b2f96bbf0515f18f5361ae7c5489a80f02b073afb9d327557a126de90dc00eec73f00b462e6dfd5024063d1b57132876ef4e4fcb2855b58933e5731e200450ca1145821b712db5fe702c6b003c28f7e5da842767f67d48c1c37b53f4630a41ee0f7c78b579dfbbf8dc4690e16045a6ca78d4c31cb0d4419d8d4678f2236c42b6e307579aa4fe6fcdbce747256fe3a5a33eb27b4ff3d5408b15c95a9dfd84f3b3207897318f0451eb86710652b7ad84fe90cfe8781c0ac608e196916e6dfea5714c42b010947bf2e0ed9656efd3edb53b137f733bb5ef3295651095d9e123f85fcae85ace51dfd32c46a9a153414ec6e73b33a3f13ded26bf34d9d066e3bf6cfd20ebcfb143aa635c263d7e238c2b3a917c9f033f30af02f4c554e9ac020b73d7e2cfb77fe66633cf00c465e7210d70b85c14198c2a8f67c49b043a0fb8b29d6e95068a60b69dc5136ac0c1048c8019da6e354f4e8818b5bd2a8a6a08642f4a2f9c22b12a40ab87b7c8c548023b0d866607652d2cd5d58d3cf839c22cb0dc1a997c96d432f12a0c3aaf544376c92056e9cc462b7d90404ec288a4faf31b638f4acaf56c0164a3b2fa82d04bc89342fbd4313ad2d743d38aec605e7ce2003008a1eba0d11bf7732ca5e7cbd97e45eff5c3bac5bbb06d19c228f3c8b0800bec273d733bbbe94642c99b42c9751e3da1c526ed793eaf789d74f6c7664e43aad25b8bd62874ffbd8d2a69384b971f06f30a7c2dc7d40af2b923e45fd9aea3499d260ba8e9a4d5e9accf8e1cb4c7f72e4e06321024247967f74f5031754a257497073b5001b402473c197884a7704d102d68f72920a87144f267e8c0dba950b87a8fa950133aeb52b598c6e4963877491ba339dd4fc8792614fe1ca27f64ab91922fb44d70a21798a3dde7d0f3790c5593355891041cf767e9824a4ac2d49c7c88581a9cac720d85815959be61ca72b21eaff208e00e72a6ea95101e68a1b9f5c7991ac2493343a5c88bab2143a550eb387384995625814f9296fcb1b3247a79da835352b95e3075f3f53a9e2b821d6d5b109ec6f8fa89ee7c187e99450554953b7742c29f6b8a729e26b6898bf94ec501078f262ae622fff18a043990aceec4551577964dd3882821807d77e7634b6eb4d9041b7e80b2e0ad7c2c1718839f73c1ce4052573ed00328931dedc068c9d701056c2b6642d05d1a5f54b66f31ed400c025b6b3df5e8a00def065f996210aa500d45da64b4f1b192b42c9be7305ea59e62275584a1386b5bf4d541e4f7d6354c611fbd1c4fad8ad10b023c22f77a10f36e22b5adc955e19d34e9393592711430a15827df8b5a454fd4841ba50fb61e9576dbe02bc6b78f4c3fe0aa0dba77d3b73e9dcf30e08e7d59a110beefd1a92b0f2cb1898131d3e0e3662a28dfd860e03a994ef7b2f7b09f98e136aa55f5b9c2cae051f640834162fd58441a1e94b2b65551ea55c83977288825644299e46e8253421bdadc4376a1e486bd025c47e3e271f90e4e031e38b4a1de383c0e163dc632b2ad9bd6faea1a4361f3861b9a7ae12aef1964d62e8ba0608c10db3503be1ad3c255ada3021238948a95f9ded4fe3eeab49a2ec3d2c6886eaf8cc4a155560cd0f1c2a4d2f19589525102f218bfd4583bda0f005eb39fe906c91a6cc5539bf894b16305e951ea88f755c8f34b93a3c988dff68e09397e2ed369385833b7068aa981c54548ab67b41e29566209f8d30f7c26df2c45ecc7e65ef0650b5ec81c1f8a0357e79356b397112c49e2b677e896605f376fb746239bf3ff2efab93f4343a08699613bfc44ae8adf11e9e3695afaefe98dccbfce17ac5d06049ad5652273a7bc0846b4f49166e5c22cec1375b0a9754640c7d1ecfab3d475748025d2204be9f4330c90e8306cbc76196db8f5702e8b05fee5804b633f04fe0d3f4d1ec328f1cf9837424f980c695b55e366912006bb9926ba6d31d7aa68e02d2c9da3919759beb63b6b833ed286e270e18eb126ae6180469adb68de826acc52eca9f8f2137c41fb9d5f2bab6b9fcbd8eca3de1aa2274bdd1b7d38de53a5231cd3f4979b29f3e9f6e1afb154141e481c694880726e776c68c0a52a5d9a8284f9870ff7c3473b27368cdfbccf888d17b9fbdf40a48fcc62681ee5c5d2c39d52677a4ea220f7cc7a191361968425569b2ff8fa874772b0be597ad193e46b502be532532f2ab822633d09d7e708672542ed050cdcc1a3aed0cb88eb0cf8fe456201239fe74714d76300c49526c2ea53bf7f8498a9b9bf216a2cbd84998708e7a539e297631c7a460a12f83bce5a1b7c61661c20868611b2bafb7d40e224f7a155fdd3dc4b016508c8d2093e46247709c92f1026ebbd47dd73c66ca25f49571d04db9bc0d79c71aa1fcc7c1f36b889766739253e51c5cdfc04fbf01b697ab3b532419f07c1540c748f70c551188ccf6cbc12bfb9514610b8ef3aac3ea91f7a045ece41f360beb222884d79665427b537485a343a52a4bc7ea2d0f56e86ce3684eae049266e32ff2eaae10cd1820fd7708c7e4733ee782dc7c07d603d9afd65a17716091322673fe357a9f4251abba2a308dd5d387d26e12eb88e812e5e3383f483de063c25b210fb2f26c3d39691b3394e15eaba9737830dfb82bcb338f70df891a6c523f0aa0ed081d6006f8e4865cdbca6742cb52060002a08876ec3be8028011eca4d1bc5860e00361e4b5a4646bae51d8e116f88248f947e75a37700770d82948a29ff7b130e2ad5821992f1e29b47c99d0b2ec52d16fb631c03db435f0376b6894d2461324b5222e03cb0f1a5e96559357c6b6e0630af34cf02692da4c46dd35c2912ee606026ac9d373ccc2d2fbe4acbe7adf92c672082232198f5e4aac8995730539929c708e13d8bbec7d4c8c30cd4cf7eed2c150fc9ace3e352ab3117771f156ee7fafa895f35cc9f9b296f141df4a656b071d4cd89b0bbe0ba44e1faeb282abd51506518750a5c57bcb76d11fc800ecde98a20da30f33c19935e57c363e6f2c77bd6b146d14fcd8f82fb5d4d372b6b2d0ef183c65dd8c6e68453ed017ff00035bdda4994e26a92afa461ba364c3b4e2c973478027ed5feeff3d23c459dc7c550adf7a87326ef4e208786fe6daa541a24f8cf782f027f369e6835aff05bc2d4d0a29b58721d42528ab2d7b443dffa71aeca2efeac8739206a681ab2a23895910e5251d402440832669cd056696b82c74271df85fb7b982edc69ee0edb92a49c92239795b429a5701cdc0d6f4ecba19d58866da89c6e10c47ce41bfefd187459e4acf937f84cae9e45c6eb69548ecb66798e35d11fcd3783c47d412d9728894b7e44e3155f0b881f5a0406cf1b1364a52defd489f62770ef3b8be9f52a515803d781e1c84914d675c209cc2b12f801fbee31c65dafeb51695a9672f0371164f588fa71cb56c6fe24264eb7e7dcab27bd22da97a6bda76d749a2378994de734a2fb050f9908b073ccff59669fc8bb5a7b6460a50f9fea09a382c9677acf414b9eb63837abcf5febb2a5a034bd7796feb93b6a9af2d701da789ceecbff3bce1e4b330a868e2b23aa87c1b9cecb69dc98e9103ed5faf3ad3466511a12a133dc312b0a0258ba9cba54becc1c8133ffdabdad7b73d272664acbff47c1d80b17fa08d0a3a63abba4726eba3d3ee8a1da3fe158e5903d03bf48f595d97c889788b629be886ca90bc2ea4d1c8d97817f697a888dd72a62395f4635dc9ea0b0c0d68ef85720dc30158880946845bcd8373df937bed898ee5dd6b12135ffe4cd31b1e3193d256b4c8365e3c90ffe255953b85a535e52623e1ba6283c3485af4a448b60e0c2dea06abfdb725f760f57817f791c800eed2ccded5e09eb5ab866c483c37703aae4f2273569cacc5d01d9ecf4e09e3223013f4a3d5ed4b31b10b1b87a0a93e637a0f6ee8e814b94076e12f87e9f7dee4d27400f96391727e827068281c1560d0bcb254d15c2734b27bc993056f62a18efd7a59a827d5fbe5453dbdf55782bdc99abe3bf759dd0561065d321289531368d8af6778c8c0ceae23fb81b4faf83f953cbd8b23883f149640267575dfd11eba8c9a9231ef5bd42143311b2eac7fcd7ecb36ab1b9054499850abc2f818e4a9cb40c3439a43adf385ce67f52b16204fca6fb205a71b258db15f748261dc949de41db3e07c6dbe1424eb257673e0e2aec24fb80091ceb8c627950a1e79d5eae04d4bf1d39f14962044c3f406cdb1ced0ae94d004a05317de4319f4fc08a9ed5b4ef10582cbe13efd2e7d5b0d0231ea9ed66582799b524abb4d14ba86d600a6f62f377857c87bbd952a42e3f3db09400081eb57c84b7257478dade523aa831b9a3746d1b85d8c1bce7f3a12211de1d8dff94ed657785c48684a0dfc3a4dd9562daf46980f54b96092778c73fd9360b82184b5888fe9b82508ce5b873588ab5f98df5f56c373ac95c858618bf0042feab06b48f3d8682df40e5fc00f7b21a13cc40fb7913c830dc2586be0e46337f67672f631a19bbb63bf6246641b74e062f7988779d4e24b83ed29f83205bcf55c62516c951a3eab038deccb6e33888f9798fb8ecba41d95b72025477e76650609b834179fe42b00b567943507df1ff4e725d76ed58b55275162339fedc0c432a680023d7489c882205442ce56a8a1d9fba8136dc010f2caf8bc3b4aa76a4341dbc0a5273f917ff9ed5cdedc841576047a2897d4b4bc5c465434268ed3fc48fa4f82041d2682b72cc38750a8b8af063d0dae4bebd815fb630ed5dab499fe3d26abcd076651e6d7e44bde807a1bfcba4e5c4117f955a538e9cea4400322f9898d96aa964ce94449e92d68569ad586f8fe0ee9e34853f4799f3bab40c5967594f7b91f991516257403102dbb4f0dd52914ccae971ef988274efef1c3401df8c62cbb37f80aff10c0fa9c3695e2eb6fb6593d991bc46febabbebf7eafbedd0c87f346f79b73cd8d95957a8ace9b98de05950ab15782dea56bb7255bee8501383f16ff696b98a7245b9d52314cc23caa808fdaff339f6e3cd101d88f66ddaf05565b90944ec0b65e7adbcb34f99ffe598e1156899865463a4463812201100ff9348ba1802d3522c25a148e9abb7a077596e126596c1a8f272ba7c81da5654b9e416ed936f13d12d96413436b7c9a7f8602c8f17799077089f09354873c23887ce6cbe1bd8021ae29fe9f91b023488d12398e5fe9057412eafaf0ce68ad93f119896b601dc429203c917f207098cc59a3a3fb19b99aa89cd1b185ddc8e0fdabff9417ff5fa49c8d9a867c99b3c36e0cc0a8d7c7ef3eed37c77d1c2ab0bda9e1b66d95668a07c420c9435ea4818c76cef2b0e91191db890b53c67b5c272cdeb9c47ead3ca6d7e7fe5332ede8e3db2bc6bf23fa9da958c53ffdf46b1c3615e55bb32d292abcfb4e52c0baf00ee098d61db269d2163e9de9fc4d6fb412e46006f00be4d0d7d25b4142964231bd81abbffa50ea392259923d69cca01ee539f589a0520a69ecf3df07f65f34769ecdfc2e86230ff769011f09af01ed713e3dbcb6921206bd10246fea97a2f78859cc736be9b23ed3943e2c94f574bf74c4f99ed5efd24294ec6ff3304de8f32f9586f9bd4a85e0974b18a12764ae7ff02074812dde1b25b527db53223fb89032fa04746ed1255e093598660a243693aef9b64f07887417ea6a707708969a365b314dcec4a8191ef2fbc563855c946573f8c8eeab156580f95d37472a79164d70e269ed08f4e98a1945a881e034515b0ac5b14861ac76c9aba737accf11b53d3ab561bb81e01e0948ba47a662d5f4df3a07794371753058c8f1798c4186fe6e81503c1e79913f024502acbb54670558ca6629c922991a9618e203d1c6ff7a490d5e02003632d4dfd9c6dfa9fe110d2e838cc8c1be40bdeb6223df61a7a4af34a585bb4801e96507ccaee656a8fc93c82d1e5e128b919fc0705b15262c9e2798136d70de22de7be2e661cbac9a501f9090c7f4a6d2b54a7b0833ab069c156ade1dbf29aae13b9dd8ef8896921b3439ed732d9064dad44686f353abeb4130fe6c8c23ec9386255451aeca4def75d06a479ff83d34ed141947f9621cbc61186dac2740c38458c627b5ecd0faadee4d3907ddd100fe51a04d28e109076145f53f04b8bfb562a0469e6c7141a4b3cfd32f93f360e3aa4f9e6a8f75ef73c135eefade0547ca16a7cd41de05c654e96089d254a94ced212f37f6e67bbd68c6782b28a1d8810b88b282997470071137e898adb2c93d264939927b94bc1aef5758d550b5f7157fa00c8d2d9479abe385b128451619dd970bb5d8800100af0e5c1b14fb822aaa2f47fc1785a7ea5bd2bb016024e663d14750ea308e950f23cfbe0a0fb0703be82163c9482a1689bee7c12168d18c6dc43efe21c32cb8b01f3a636deff7e7f0795fddbc47a3481f7d297f5969d46e005c85fea2b8e2d2ad4b56348cdb584f1302f19e1d3d78a4733fa1def08bb6f6e3412339b538384bcc4e2b19aefc5c106a2edd8d345132944fad55c430f5fe8ae01c2096a26bb78bd6d1c1fb1d7a8a92bea22d9148ac587e796e4f1a5fd03494bd9585fcb078e6fa927b21c01f7c6b3dd609e994a27572ccba2b97c9c643e07b4353595528884d01caf55252fd2a857a7c09177d8bd509e5da8c33b8ad778ba73affa48852c2750644e65c97ffad63af764ac13449f4a431 +MD = 5c59f5748218446099dac3a2beebb570848a6ba3190f7c5ab97af95dbf50ba080a53d382aa213e9e6d8a27c249ff61cb424900a0043696d7477ce2bbfdd2605b + +Len = 80224 +Msg = 6e6a88abbb52a709b47365ad6aa8016fa9a03a9bd8345aea21f773b1d20fe9590344300f7a57d7bccb95c638c3abc4bb07bc3c94f9b1401ddbd1ceee379152517ead6df6ef77f5e8ba6f3dc06615961970fb1543351e973c117603dbc9cccf4f26ccc6c8e35b0874ca2b52ad198c7f712a854f125323682e0c119ae24f69673b45cac3ed1eab184840ee8d67a5b888ab7e8171681d67badd11c81c6a930f23fd21ceecce680e2e4c67e37756d243b8afb41704ac599395306bc310da5b67097d0201cad1892c5068862f97e367d2186514718f48d04e010f602bfe9c701924a4328be45f48ae8984e4fd75742e10aeb5e6b49aa34a4107623a286e179acc7958f893c2e16e3cde88ca739a73eda28488710bae258f14ae113fe1e9b3a02812829b41edbdc37d595c80b98d466d33a2c4fe9c5236666eff05b87ff6d84cd7f60b64beec5d0f1a01e84ef8d65776690e53d58f0e3e98f70024ec291eee647e2dd99b3247271abade157c58fe0cd0ecd21b3e0d6aa5ee58bb572508e85db1c8c0d688c58785ac06f9c951008ccf4265f606813eefd32d393887a944dc8efb5ab6e8729d33de8ca659ed16190807957c80fbe549243120417e9ac20482e70adf17f9a3e5d3998341066a14cafb1b91d87ae1b35691258e19957ab57063d1a5fdebf061c3f020597f0926903cec75fe22eba2348fbf183e69850dcdb206b5965c3bb5f55f11dad60a690bd596637ca401dc25ad1a3573f9d8563d51eff3f9a3a50e30a7e2be2fc1872e002a01e8984b1e5452691f7b9c870e11f08852b30795806d49be747f87e4a161ecd6a50431ba205b11afc71afdb0b4be10bb00cd4533945fe8843cdd4a05fe09b922a93eafbab0f94ac63999fc3c7263843324c91d478aecf53f635fe0ed462e4e56361f7b137637e5f79e8003f2ef0a3435e430f697091c5838108eb26422d893ba732efb8d191cca8a1e58799bd4ba080c688937edbaf8f9b76cf026323a10709589f398ef42b1e2c7e0a8c6ffc87ce8ffd95c4a0f4587c0039f0fa51e35ddcd319ff6ba0398fd13f50df851e67457bc555f3296c551d29666d07398f1bb4892d4dec0ca8fc408465eccd184187f536c57219183d986df612628a265737658a7c76ed82e5c6dda644846b9c65c9278e04d480479118eb80b8cce26766c0b15f45276c650323c7c53fca33a807c55cf017ffb10e0370e657ae0ea8731a4258762bc1e1397d9d9f5fdc20adc183e6f5fb534633f2011b1ec986aa64b00e36ab7d74f90466a18eb4d48e1a326f76b8930e5b5a818a1681c574b7128fc4af082ac3c51f1e733b81a8c1ea397a085cb4a4b7a4bf123cc03faae7d3f98217694166e7a0b6c7e598210bb664e0ed22a255bb75a3c66e907acf1f7151a1f43ee97ce0677c52694443b72e2082b2f454f42637c6fd031f1bb29a93cfb4be5e919c1517b1dc74ab05baeeb07eb8223805aeb0ba39f5177c35143cc84171a119b5fd948d55358fe5b08a22134f99b120bb5e6fb33d40563e82fc2ffd851cecbe228a95a1d00c16a1cb3debc7019bd236fc6fbda34f5361ae7bf6eec3f91b13d44dcf7305a0e4bb87bc22b65c433327e33f7f451afea2ac748680f3bc1bf098c4be38c7194643b0d009e51c43630404cdfaf9807aa9b299094916c9466c31fe37fa630c6d3eadc9434af1880d1f630b5fc55aea530f07d9d52a44e9d37853b68678baad7208875729e5d48419a6e4ae01153ffd246d16d170a087d013beda5438bfbc44b82264dd2c711a8b19b80d5f6a6105337f62640264525c1667ae4a49d735f44cb02acadda35310176db151b1e43f4717b47d73ff18963e275fd50819ea81df3fea702ddb272271b38621362817167234742ccb2a1612aa7d5cb1b856db19f998d791125830659bea03964f346b7d12f43edede15d52e2d92eec2bf533164bfe1f80bfcd757731b25567ee16969e9a5e165223134ee6f3402a696a1c17608be95dc5f51caf4f15be00f49b1299ad2a78697954919ca4c5a46f49be414216c624ee4f9c5b5a156fac49e95131766cea45e36869a46e14c0cda59411abdbc063757c269ad39d52a642d74dfab95663408d2d294b92ecbf4d8375534aa30be6cca5ac53d9c9a18d224953287df3601b9517eec4e0a3402cd28d878d5171fa11687c28dd3f888d4e4b886482c227bd1b52accf3f12218fe3b9b4824a0e5dcfc89fc198ccb6578a1e89c9b364b19d94ebdd1478a4c852046d68c00e9269afb394d93ea329257dc08344d2e8d5329c0e14a01790fbea80c4514979d46e4aaecdfc7eb9f2fb73435607e46caade2d6d531d017cc04a5ff1fa17c2a67ce599a34688f6fb2d4a8af17532d15fa1868a598a8e6a0daf9b11edcc483d11ae003ed645c0aaccfb1e51cf448b737376d531a6dcf0429005f5e7be626b218011c6218ff32d00f30480b024ec9a3370d1d30a9c70c9f1ce6c61c9abe508d6bc4d3f2a167756613af1778f3a94e7771d5989fe856fa4df8f8ae59ffb7da8c48d0b7342b2fac336676a0cd65765fba843b7fef3a70006749b078c51f751d253baf36b4fada4fde54316466dc4875d2faa933ad24c4c7918b98c5bc8e78a0eeb0dac2e3a4d9c8bd8969e2d3dc92195721a934684ba7a8433b3c15cea134fe4f44cdfc4ecdb0bf57528a9c92cad5b2cdb5b6229f039b3b02d4f4d96a0c2c9ddd64033364c9e18c426c0e02323ba5ea9d134a6ebfd131f836e56d911d33d2080f9b1518b41e0ec7f5228eb420b365294bb6f0895958ee5875e8f0cd669cd7b55c567e0cbb5e7aeae6026712eca6a5f7603d22f2e9ff42e4465c48fec4cb802e5a32989fe8ffd87daba831af04a9eabd51026c4be028b2141ecbb095b6246dfb7f9c0f42db7689f8ac706908f711a613c4a326e4ea89ce706593d232c95c1375430f5c86014701d46ef7978132925a73019c0d6e4786ea71b16128566cb6f3542b18ead9d905f2a969aa27d855908a53be596a38b5a4b8a098902d611ee9afe0be3534dee127bed03304b45ece90c85e4167d7e483679b8571cd5be36e588bd362d0e4d5a830e8f14193a7850c0766cb3143d0f25f441588d3652e7db9881984cf98558e9c95e3752be38bfb9c8918431489efd297deb92333e43f60befcfb7d4ae8114a4cdb40e43850cc230e8a4f5e51868f15cb7bf90d29e6e96cbd2b94356b3ca299277573c71d78028bc08f6e758ed6292c78b0577f1bd9b6d252986645b722840bcb091e8641d5a996610d0811030568971e104721903942320dc7f416a526301285ea83aa2bd63bf35e97aeb97470a7d63a205a6d1d82061c4d3ec030bbb4213e06ae55bb521633f31793c4e759c4617a3b4503ea1a406cf1af715d1c6158f1fecbd907325af22c462a95ed23095d4ff3b012d6011cf0f14292e41d424c910cc523ef1a978d167f4d162279e529c7bdc3270e435aac103d8fa61b934ac3d8ec31cd44f2638eefb77858ae1db6318025691e8bce4f3e3aac59379c618e7dad0ab5269f412ec6da7f6860ad2b0e97132165f53fe95759bcb81fe5caea85b08a02dfae426941db83119ddcb42466e0ed3c4a498f372b65230b443f4b90e9230c4f11e2c2ed45236618791b47bc47959ad08699fe0a040719f076827316f14b8059ec52b54fb134f01e9aaacc45393b98788b550104a9b5ee12177df5cf6670a2bdcf8c8df31e96bd7e6319d641b42962aef9093ca964d83beac770384c8158cfe55beeb199d5af2ad272d6ea44311595fe3025055ace047fd4d717bef10a6a846ae1f7c4868f04c4953a607ccf48568ec0c146ffab5dc1168ae6c2fe5f4a0c5ca922364b5b933e27313a4502455282c9914cdd801d9c74bc5777007b09c8d4a53a7d389a8b9aa1af50f3031f38f810d30a03673b23f2b5cdd5086eb9731f4a1a99536d46890dd5d96ee519283c91874775b552954108fac78dfb4c3e1db5e319405542d3f6554141d59105b1a2c76c738ea34e031737ca35ecf0477d7c15262dc9f367d736098a553f7737401e0226f39f8db818f9179a956c67eefc10c589c480ae3aa4dab307a007185c5800ca4d5432b50f5b7920e26296c2913e7e3f847a1ef639e156ba4f9ec6e4b36ded885601d2b9d22f19dc3829f6b0dcc906fbbcbaff5bf3f13cb7d8cde97cfb0656d4c7791a1caf285da21258068320005d828913ac5fe778ff1429a9f9418195bf381846535dd4cba72af77940ea1988f45c8ff0a06282dd0057b8bf80c2e5b0991adee628ee017d98df5e1a302617d74de217ee66146491f30b0c6aea71a5cb770571d5055da3d2a527cc974ef7a95fccdbd77987e5fb2c4996ab58c0ee306adb80779f731d4a5f5eacb98d07bf5ca71372450e6047b52076a30bf59e9913f3290456a1ecbd537827d6bb77f4ed9031947dc73999ca2102fc88b4cdcdf2df18f209a588fcae5db1832e28c49112e283e226f4679edddd486dd02c4de99bd030d918dab10d70c790131ba81f66cfc2026f365334da0338652d11d9027bf4c5df20ba7cb6a9a53f983a37afd4d064cd519e044a0df5cad0fdccc64167ff8dfe786b56e2065bac143e7b0ab681788252e611196f7f5ca52556cf560bfaeec808913b86c13c8e05f40757fd4291c99901345afe29f58912a414a7498f37b44362bdf3c290a5db334d674397daa24e2946c0ce2b100d05a3dbbbd72941bb0a80ab533682c6eeadc48ee2e052f52f70b3921ffd18a8224cd94ac0e17dd9d13bf020f5764fda83802a371e90c70895cbb871b66a5f58d1e9136fa868afae36d3229219359241e0fce4e45ee75cbb71d9a874089857a89844f2b8f6bf4735385a884d42f6f293a36e850548569c54400514079af9aa2de1fae7c51057cd15725ca1d0e72cd956377f7b184f510e899ce88baaf210cf4f4b757302a9e4b9b561340fbb8a69cf00098a379bf8891bb1c4ee6fec82802f93414f14f017c8859b818b126bb1103c07b6296b1ec8415c6364a1413ae0aa43704fd25e2bde85c94e4fcc6a7fdfb2b8f3b9d7561f332c3924f88ba01470f1b38cd3b9bef482aefd24487268568ae3be4a811eb8fbcdac4a6d0d27fd17d818f84f897fa81898a689e3f8179c8e3715c482a859e452ec43f8a1fee0b8a36a627a1ebd6eb9d6850ef7d3db16979558bb64229c3368a33375dc7a6a407345cc80c1910c3154dcdc3aef9a6e09c9ea845705a0d915c67b27d46e4ccbe1bd8d62d6674ce252198a02cca99e3d6ba42c3e7b3183eb8b8e294dc2169f802ee7d8c1d5c388cc3b687c9d36ee55a5b6c6a8eb9a6052500f106bf9d16df943a292b66e216efb4667d203100c06674375a20f10272a82830afd81c074fcd072c73ea4cc3bd20add61d6dbefbe8a399312b6bd40c3e89b0129c629364f1bbb9a175c326077954dfdb3f76590b0f25321387541f1d3331266c5eab0dfa27311260d7bddcf77112b23d8b42eb7a5d72a5a318e1ba7e7927f0079dbb701317b87a3340e156dbcee28ec3a8d95a8ef9145caa831c8d7737f378ab029ba6f5e9d759e058367dfbb74cdb373f4390900c93bdef730d814f951e241f345295e8c6171730c8c4379e55d9015ff78873c7bd75323c8ebb7c50bc2f5e2ddce82736d6ff1ceb38936d0dd010680379b1ed7d354422577c2e67c0d4ae8d9ba26642254017d0d94fac08914f7a78ed6dc6e5f89b87f509e66e2be8042418322dd3d0ff2de79cc1b616ee70fa9d9ae479cd428218c7121a7484ae10751869ba2637b80ac4f8e66d15d909f2fa0334af48d0ee61d48be352cd77da804f12e7fb349ae28f2ed117a313fe3f617734b01780d6d0ddf65bcf799a4f967fb99afabd000536d592fa982c588b7a0398b774e4cae8d040a7bf3e568214c956db390ac7327f9c2619fcd0d08d8ba1228613eadecd0dd6d00e4098b22ecf5d4ede767fe27111fcc8ea5e26565a039c0469d378cc324dcad754654655458839adeadac2d665c23e042fa8048866fd53f1687c8878a0b0949ba0b7ae07704545bb26ec396bb79a4a220d63d12c5a80ae33ab9881a8c03f1d651bbd3990571069c2bb344d680fa1086aae16f40bdd9595115baecb253a014b7cecff4fb7a1f08d08d13a669714e061243a49d7ed9843f0d2a047ceb7b5ff072a3d055945f7ee99d68e87edbe6f5e3b97d884e19a3292a7bfa1eaf125d93f3ab53358bd03001075741da248a6c823800cb1507ad9548aa220871f9f394fcbca66f87fe5b665600a2aa413e117c53816cbed340a73a634c93d796f3db9bfaba185b4023729cde63e404c631fd911a4e71cb3b9f931cf97055da060346ed0e5a55a8e6a1d23e1a9fafd3c1969b3526fd9472b65b0d978bb3cc9247cec202b83c02caf3dfe6b49b127ab9dbd296e31a2d6937fc3953348a957ca2c4bcd97788cd9453f0642caac06ab9096d7c6d25544c54ad4581109e8683fa6e054409a5e09d7eb654a5008b2b170f450f0a8a7675d8db255ae8d21ff00daa5691fabf38501a467499392ed04b95c21f28f37b50ef61813274c6f44367a1211ef347768967c270114686f404a26595ea53ddbc4f3154db775ba203a35ddce30991c0dc239834800ee524fcb2b004ef29181fc9bbdc514e5658109cba331f64c905ed3c8151cefaefed89a5450502226dde30203150b55e41f2891bf297f71abfc823344d35204516d82b9a4611ebf42b2eb55c4a3f1f8fdcc371fdd6ece2995041094fc1a2a6f3262d8128305700c8e37225da60e7ee67894361dee1b260554d0915eba93ae189906630eb9e450f151950f8271ffba059d9eaef2bad78fed2f898df844e6e5e8cd81aa150da7c556d5f33b2dec1dae3eb3132706094b12c96d578acc62bad7c518fa359048f6d723607a2cc4e011617a041a27c1a31eb68157611241deb78d98c0998de532788f403b516cb11582db9fd6dc388b50f984fe35d0acbf7f860e4a0e88397e93d6f496aea2835a531925967281e1ccd78482264fcbe1ae0ccf62c14aecc1c133b80f0b0092f729627e46482030abec0166bae2ec7b37774e3992e7bcf0ae18dac4e6887b4b52840958469c28111c539648341b550838800d6da5a3acb987ea4fa584f665f51bd5114f2e79d14dbe695ed1f7b7d3996c321013a3dc6172d49f5b01ee3b07b7db83430c05c9640c199720aa0ba0ac565af521d2957c24411e9fc6812e41a9ba19f66537d3732975b343a67a78bc28688a320652826a3d4eeb5158cc4aee93265d963f78a15f68b116d7b6ea46f591f7844f883c728ef4c2c61fd88b4d2c0c2230cb9b75767569e7cab919a27e312d2ad1b66f386dd090c5347010653ce25dd618fd3fd95a9d734055539749285a462af8cd83ed7c185b7ebfadc60321f8cf6b9f94f44a55bfd0e4410bf7874a57221f81fe8c04a64e9b16ee3cc30c0355a8094df8827070c3c6fa164b0306ee100930f5b05124f45a99b54986cf29ebe330d7a991b1f5b2919eab5a7a816b1b6d4585da4a9bf66c249d8159f3b102e089b1fe3bc8497e2411a01e97ff3a61da561d47bb3632221995efa5a5ec333eea2f71a68b0311b6cc2c137c5444f68e32b3d89e1ddbde4f0093d647b6d71b8511bdb9f522abd242b4c841ec1ab07c9a2b6cbfb18aa167252b079c90121d32815e1cd116872954cde4ce709770ab962ecd691aa989f0944ea1da87a7432740d8d832012f42e35ffd6227e9a4de9d0af2219331ada3302e6f6af2e0b4d15c0d3288e89169dc43bb7a38b9f43ceceea18d2ed04be65ec9fd338f39eee1422360387427c8ebdcb02fed6e6ed887230723a8fc09b17c4524c93f1796fb5420e60391a6d5f0deca9285fe0a2ddfac0a4e58ea9427ac96dda75a3e0af04d35f20cbce626db4f692f50835416dd4fd42a2c08fcfd10825cb0bb78d670312dad41fd54dffa222db59154f29899687126090afa853fae7bf745c9eaaf5240e3e4942093232c91d4e97b0599719cb58dcb314ef72e63e7e18f24377972b705b70173df405bc40f8b2e72cb428826acebea2a62c79f70a5fa4bd66eedc7a868f12c66a1252ec88699ac000eb3843f35d2ac7aac327f6ecf1054e2d70e552c51d88ff6cf084542dd478aac36b50fef388c39ab960076664d69d2d0d9a3c54ba8b54faacfb24739fcddf1feab10ce3f9d5fb84586f82e5f074dec29db76be0d55d0970b0aebddb6cba3087fd68c6b364c9451cee6e34c61e406ca73474de97b40718da0e87aafc031e0f8b61df18edd2e722ed01d897b74cfdb953984f1ee9c52e059f1d229645f19dee82ce906de3a294374d293b261a1ad137500fa2a7479716424862ebea59b68e30167a3940458264d4e5db026a6ef67f7915211bf2318864716e86502197d07386af1b163a73c0edae2f8dcacf367e5cf12b6317aa5837acf569ee0bd690cde254c527d3b70f0c730582b7f0ef00f0fe31fb5c2219fc233450d3006b73c51d5f1cf106de4077b3b97d97e011244f1cd7ae1d62c7dbcdb9bf162273eb73b52d5e61ab5eb2513e550598d7aca81971508dd80a1d756a1d8991a7e09f2870e19c44a56c95ec83d36f0bd9ba642229381a655239e2c74f9c01409886189ed5cae8c66aad22e932c77020a2b8ad2bfde3f9128f256919e6a9cf607a9b46bb2cd1713823f5ac24f88b06e8967afe01e2057af9e16506f9e9c73265a098cff9e0a5e43e63de884c4fbe71c82759cd60802cfea01b7142f3a394d8c4acf70af78bb8b02d9cb05dbb92b26f43c7dd91a452bb12997fc2b373be633102124e9e30a88a43aa411372ff7c074dd01a8ef169d450554aa0e1cf1684d2b9a252f7e011a17b3d2903809e94763dac2171d6530d8f5d15280156fc38b164012a019b7727113bfb2e368006f6fbc5e88c705c3d2bde51f0d6138ad176ae97760d8091c9ed722d1c2e5c8a62a37720b185988926316bdf66c979f5d54cf6cda6c162836ed13ecf0eae0818282692ee65a15cd594ba9245f57697307e2804a701ea19d8cc8ef1a24121aba1ce0cb97f93643fda0f13fc360b61edc33294529415fc391a69531547522dc9cfdaa27564b952a3ff0bf9f420471ff016a91e8b25615c22c0dbda241ec026e4fac4a4312e45d13bccf1c93485071540b33822f8cb62ae79548a90a8a909a18fab126e774cd78469cc870e17d4e9c65211764e45f69847af5dfc031d76ad222c695a8dd230dcc0b066024528b05db796c9d9fcdd5780dc3735b69decf8093d3dadf36ecc8ac43aa22219eae177d17d9144d9bb394eaab0938430edb1adcc3755f173adb0bb3c46a199247bdccbf36ce40afc05d44c748966c1f16ee61864c4e7cc61b7393293695133b87464fd2229e184c77958e18cbb03578e9e04c8414a75a73417c0916837137a5c7134bbec191c5ab26211ae41ca0bed4ef7882e005c720a614be14829247ae576dea668cfdf16f5437ca8f3323ae2dbe9080aca206f8f7e7fc005d764b5ea0d9e3944843bc043dd01058950dc821abbb34be71d0fe8007bf610c8cf9960034b48fd99aebe81458a61b93d67bf3435f5543fc7a74d7a877b5aba848145b73926fdb80048d6867e85ebe43f7848c5a721325006e9578b87052429d39ce8200e3922e532d2f24451481632fa3317baf0b7d4292f63cc9f8191c8eb2082ff3ef4fa6ef18bedc04f8049671208089a88a531c027cba70b2af9b9df8b15d3f9788fd3288985e99f0c7e12550de3694fb327277ce8561391b271d5de660df07541316be609bb670d0f9d3b667316e5a5df18f170c74949feca6c8e3c189378e13d7c1d2dfe96e688cd701d220e1d0e4b40dd2822612faab0d75c3b7f2f20ddcbd1d27f76d492d890ca99400e2b50339eacf644282273c6466dc3761df6408fa382d6fb472849bdc39b7b3c91676b061e57f6ddf8a7b01d3e0224c69f2a6d0ef6e4fc29256626168f94887b422ec7e658f6514dfa4d5f2fe6191295892820ec345cb481881ab273635a538496fdf164ccec982cc3afeb6efd26ff7b626be6a7fa7e828ce5c27944cd617ed1065171f1e8cf2df2db3bff6ae1c05dd0918238b2a7bef8b3c4d9e51b4c2e4ce926c5b42e3b029528b77de5a41259b04dbcf791acca92898ebbdd70676e3540456ed7527a422b6036dee2389b2d77994b3b388be6e18db7862159b5a981fb1b7e44e2b7569cae11b5b80582c0919e6b41a2c172016b2505229bbb2f52460410ec5f946d43890f2c2dd9543ea4cd22c8c97a2f0e7cf5ecf4fc919e480218d4e3280548eee1b5c301f7c95ae6c85ec9145b27dd9bc9e049f97c995f9a3988e1e4b9dc9ca681916e45bbfe85f5abb4e5e07f3259b478d8d0951b199b805904bf980a5bfc4ed3aa6569d2ff61e5bf7e0daf9e303fe2fa3df55a60a8cea4f11ab29f91f9e422387f4ce0e5227b517408a4f44097dc91de8e3cbbd5ad657282499f5df93cd0db207e894d6b3e4ea379e34030fedfcc6b86581b2bf2cdfc739cffaa45a89b6ed43c36bef1cd793876319c63f8318e9bba921a254d3050e022a1cb77f918ac0a97ec1632908489e5242ba284bc811aa7197242cf7226fcdcfa213b8cead1d530b0a0bba88c48d6b147d88436f0560a9b02b7709e4d3f184f849bbe5d9d5cbd7d990a95655752e6494bb8bfdf3638e4c3f0d211f630f149943c81c26e7321bb4dcb7a121d746b3ef9ca5cc3f1e0922fde8e42a58bbfe5e7579c73e6441ec9553dc28fd01585da576f2e352f23a1fa42371589b9a36c7598062ed2a85302ac11aa18ac5e01ee28c605f1c26fc8dcf9d25a3137bcf1a938d22c5e3e773fa142872f286ffa572feee15abf84e47603f946d46bad2deb08981c46b517d14e7d351c498c4b5389cd855fd9e21d4b9fa97116222f8a9af40d2bdcc1dddf552418fc4765cebee81e49a4880003cbf3ca5009c6cfe72072a1295c9a4a13256144e6f0af204a3b3679269500698f418b7a7a2bef3a4d3f4376dfb2eb2bff6a841589caa9e58960bd5ed70f4f72feee61149a4fe5fdac178be9b2c736041d2f3c3a53e2ce4226afeb03ed4bcbb8dd53134d32ee51969e49ca7e24f2015ed6d40817d7c192b28c794e1cdc030ba7a4f02078d6afa8719e667da8b8cbd388d7096632a7ef8da3356d650e25ad95cbe046072be7ec512b16ce23fdd0cd333e782fe51f36d515b0bbecbe5c5ca3e0a209e535db092ce22fb2113bf22f7e96dc44c7f331f71ad1578a87b89bd39e72a6ac2e3b0a9cf9e20bdaa0440a075884eeb7521f1f7b1927042bcef2214cf5d26621a1953f25cbc72c0b2bdaba1ac373e26a6ec74c3568bd430a12e9910b32764d14efc2fd362b082ccdf44e96bc77ea53b87e9a2cb871da90c0040d7fa0ecd4e7e06942a930903b7a9d9a3e146ece5ebf3bf1f64566dd2579c802ec31a07d84a33e9ea2d7c783c781e49e27a7c44f57816f797a3ad2f3146a9caff44b7c7cfc2b69f0521d4d8e32ff4d7079e54f635b56cd6574519f7c2dffa85bb441a753a1dd0d1eeece4508043f32a1c34152a2e08bc056933e0ea0e88595a6baa8c3aa2c34927ab78f4099c1ce3eb2823080a66dad02bd4564a329caa8cf1165e533e8d1ce94846ab4c2bbe228cc1345575bb67946ef1a195a1f7f4ae5cf1c447b7a8869078ddc66f33dd6fbdb65547b1a468b99c5fffd7d72b609ffa91037d4f02a01287bd8d34abf3473655284f691fdc37e25c6bfc7e06329624f8f3ce4a5d7a50bb6981019747d2929b52ab56a28766506c3a59919f09fcc10b0f49fb325a69de089e8ce0f72a19e6261c0712fbd18adcdfa0f36541c8d107dda65d313e2c1572818ea6d35d3e0f6a601b042c7be69003c1f5ff216c2bfb932127f51975bcc735afa19782cf6afe47d0b7694c2bacc0ec9ca1466c281ac18b5ff9da5adff2c64e1940269458962ca4ff590019110c62c0f70c90ef7e7d6a182084d49d84b65ce648d11db2fdaae2aa73678f3c37eebda65b9ea551753c3f61ea30ab8a6df1cf25c2be4283c88f6881b64bdf5ca53b1ac74fbf4c3b163f888f486526c8a1896832116d5eb0c02b0650506bb82262d9c14b5bd74f55686e8dc9bf8b0e0028686f36bc4838e0ed67043fc731e23676b2fa59074e744673b29538d90a2bd90b742c584cb59abc582ca978a504243fe9ad0d19dc8c84b73ff1e9031d4a45fc5197e6c1481e4aeb08603f20714b47e6c3b141b461f9464fd515d25413b4241002b8e79838ea111605ec0c62b47014d20da8e0521ffd84b73c04965044ae8fbe27bf7506a581b7e558b95964f5da50abcf79301a9c0104967ca87d2137a150aec693d933164b04ff08ae6d4ebcf1c61b0f0c7a35626b8f959ee7d1ef74f62d87ea1e5b4613b0c00d1db29249921d3dc8d74905cbf9a5ed5ca8abd8e18413eff2984742682418b2b6a0af0e7dfdc67c5a2e181b03e715e692a5dbdc20ee625e96daf6d8c0d2eba3a3988c2a1187544c7a1d610205b62542df9a5f23d33a49411cb7136377a4915b7c0d312e2db82f75d0aa0c03faed3cc8ed911ff523f132612b38872cb42372a2e8088662fb17bfbf03e001660a15c1416191029c389a84876c63387ba0d5f6408f8f720da02c6df2bcc428735cb51e76e6a3f25f39bda77986420f98634486fc1aade079477f9fd5a26069721955ba2c22ced7854fe3030022ddf4ca24f8889f3167b5ec1699be315ebbadaa687efd2ebd1a9757a19300e3e83ad05a0b7866f17bc7daaf350133ce97ddda6472b64f43608f1b1d585506ec7f638990414c86baa1d4370acd3f6574f6cfdae85e881832b3364b1f9bb17de1906009b4eefc52c24a96b44406dcbbeb2298937e5579c0c45d160fa49330cd8bc237360e391030d11f163aa7075f9ffac440ef6e7f13afc1073750f667595eb2bef2fae64b118aaec85baf79f950786b84d0d5ff03dd4ef158a2f45b40b4981e2c993c834c87c722ec6dfd030338ad04094f2c7a0a5f031bf95ee51c46cae496b232e42e63f84ff533550a8d4e9da88efcc5de27bb22370991730980a022a8e3fbc7d92fb8ee8aef471ac05f020ad0d0043ad24e3fad5381c9ea4ad177454dcdad5f05ce74f0e0d7cdc405c046048d94cab7f037bd88bd4c49ca8f55f2b93c1c71034f53bf87b977705cc3fa421547a0f643202a5e3cdf32b81bbf563a08dc98eeba9f05c0397d95d6e9e1531fc466bd2fe74a6e4a5020fabee6c41a76b99409cd8cdd2da09194faa7734714059952b31daa564ca84ce76e043285eacf55ce36b581f1138614666e8c03dd841b1d744a69942c0ca0b99e543207ea0d6d63f1e84fa2c4ff9b4c5bb92c9f8bed8ad7324abbadb5f65c1eac75f06ddbcd776b65e743f63c3907c0dca2315239957950f57abafed75101037999e46d407016f691fb38854208f1f84ff24021cfc5110e26a30f8e7b67baf06d87b90e013f718bdfecd658bfb6817d1e71041635c57a9b2b8d62658a7ead6ef00915590782b1b2b681c6769989e1d6afe7223853dddb7f6e005a8ceadf02046ae5a1543881fdf37e83b0e7baca368b6c1c458f11555c4055c49f0a85d2e23b43e404097d837ed7a0bb3bb408c0ab25bcd81324587427684aa0dae7419e759ae3cee680bfd25be582ee10e46db5652b06e234fe0e84617fb45eb32c088de2a9b26bf1c0e4b4bda68de7d77fd0ef8f25b40351251dcb350bfbc4d1e0c1e552f01983cbd1d572cca0296d378e18b74f9b2d0312a26b92c996869bdd0b54efecf87edd1cbb7b53af5dbf47d8182f55cd16d9aa1e7ce22045a7bfaa7eb5a8f3d9484a428d86bda18f65b53e6325fc11331e20bf1ebb69bfd2c70dbb5de7a7394068e67ac53b82a2933e751a80be6733a6396a0cb968e7b5987cd89421a938084ae1b84d6de2b4a0e47265a3d6e9580250f11f57988a464bbe5189fe730143aa1e3a2a832d813ae1a989efa00eb0b7c759cda76962296dc96ccb86c1fbf9b165e6fba3e3ac22fcae0b097adbcf1b6ccbe9556a0ac04d4477cc7438a560986882c7ad8b3693cce24e327c6d1ac23160532612d1015affb39c03d307724be65148ebd749448988d40b456932268ffa79aa3b8b4218d746a2823c705cef63ec54017a0147d5375dba2b6d5930c7dd7ea0174e482615e02bf96f9dd49de551b15af39bb3ecb145537cf7d1d3cfc454c6bee188d2e6c11cb5a0ac4e8634 +MD = a3cfce930b5e8de54554e9c31cb3e4b754b24e6cfeb6b89ada2ca51b907a057d3814d11980367109c1f55b35d7b187e3be90cbb90867bb59b78cf6c04eb2587f + +Len = 81016 +Msg = 5d146aa439e41599b3a48574dd33f12144f8f8541773e1c28c182791805e350d5e136e9c41f270f45d779a8b9bf2cc4f83db6d985f65b35b9d551ea076154636cd04d7a55a11da640788364c9a2b764d9585cc605a7b56bc9324a14dd1db6c627392aea6ca69da517b7f619f24077882429f1d9352de544f362cb780dbd72df91963fa86da21f8237f03236c7fae5b5551d1661b8db5357b4e166821da321463851fc32fd261bc42dcbc859bf447a7308cc2b1df54297fa7a289bc181713a608806f1188fa53af175a538e15cbfbe27ab91b05c7ee62bc3dfb2ebc4ddaa36d51d1fbed79991c5808c07047c04cf1969aa1836bbba58773a421ad6fa96b09f0a4426a5eeaf9e73f7ed8bab685bf524afa0ca3e9a3bfc12d44dcadde12116eb76a99646dc360daede268dae54d6b458701c2238a6785377185f4d60f7115fa4b0c9f9321ec171de99a3977dcfe99f3d4178aaa53f03f12c7cf30d20cafbfd433f01c9c824e66d9bb10133aa2819183b9a42de04e243579b78a5946ddb25725f780d82a98cf9436ecaabdcb3ebf9b1ebe10746e82ecae95ca1e37dd8864251420239ae36c58eb5b03d201d1bb9fffec6cc424fcf731f48d87f3923d17ac71ca35402b6f05d2b17188efa5f51e0804144a260831b6d94d8a7771320e9171826fbe4154776b232f9f046872de71e4f3bfe19fe7b6c6cd02b42001dff9ff9da12a438ddba3a735ad0efea73034bc1a1414b79888322ff65a320c0960a5681716234d8c889ac0ee73e5fe13a7a10592af3c5677b44efa3b9f2dc3f37ebcd4c7298363a62505be38c84d8c149ecb56340c5e46a533b22e8317cccb2501e34c9522720e43788baafaf66e3112df5ab6e873a30d8bcd05d3b80c38ae09b1c4d6694817d5cb4bd58b1c436f747530f72e962b3335904af0f2c1c498f40555077d2be49b40a6648a6985f879dea65a4ac4267d35461b711a918688152383b75446c33e25d73c8b534c1f5cb3f60b25fa8280b1d1c6960b2cbbef9fd7c5ea9d513b199ede23f68ad83dd1b946440d58b0708c0f313f68e0cd75e4530561a2d0a963164ceeab3a28c0438355595014bd139533de7a38f9b8a6c94deac880131802c6a08f7cf7712cb4671d7a15a3891accf95b68d73ab15b5ebe12ad47a9a53c056da0b1b090045f5bb0886ea2c4d23882a4edf36eccf8919e5c1be4ab64c006595ffff8b3fd59895e26aa79273b59dfde9fd2c8677636210eac50d71b39cc3ca6a4a3adadc6da7264d16ce5cc9185d687f1f02febc0d3d455b59acdc0b131a796457617c574eee116bab6f8bb4dbde726a2316f223337721c80df10c153570fcf495f80248efc9f1ce871fc19f76bd863bb7cd23356cac30a1309e647a8a63cf9b8452ef29c6e751d6383371117f672e542b89e46b1f58ec878fe987a3787f5bd9b126a5627ab28c134d6f2c836c67d5542cf1c85cd1e9dfdb7a86d81886003c3f9ad7c78b61b83b162517469db43c15ac0a8941631afb652d6edaf85239a2fb2dafeac81d1264d95f5db071a8fd5069dc62b4e21650ea26fdfb7a4ad919e3f3246ed429900344d14f65ef103d9e413c65b4091cff2a529fbd9ed962259d3fbed466285e7ccad4cd76cc17b4e41d8b17c88cfa7475fda129fcd77cb0b03a02d88e145be94bcf912865feced204f19a86754c0d6b234172702c23d8c91176f9bae207e36c7598067c8d7c68fa48c0fc030c7fb6738fac32ecdc02620dc1ea70e0509f532a929ab1345dd39a8ff7f22c07fe969a2003845f0a7d01cd113a0af4e35a793fd62b6e0dda6782d825cb1bb72fbc3f0ce3376073539f807e55f23f123e7ff3ede1988888f93b18863e1a8409c4d5c7934f83d70c42a42cda5e731d455c31bdf1cf7250cefb38f3394b6ee1b071dbced1d7813e86723b65759d451c0ab70025f002317d2c6af1a165d040bb27b12ec32cfdb83d7e4cc5b8d494d0c1def97bca4d2c5e644db2e5a1905f3856fc0d4f332934812a504cc3957bc7be854e7df5298da0718c9f8d95825d6aae6b99d0cd9d3b0e74abb8fcc589efc856fcb5cf1cb225f0f37c8e3581b201652b5f7db62a7ff70e1b27f4d73c1484f9429eb15742f29ab05cbab6552abf40e127b93427d649d195ed25a066a7b3ffed09d1cdc11869704125ad9467011870613bff49a061895f48533b581588e69506053c77770d953b35e6eba4e5954c3467c0982aba4cbcf497f5cf687e603b08f6dd352af382f45ff108eb645b57c8e1576e2a53d0086326074d587e0bce1fb011ea6274c11915532504335f22e92d2bd29d0c517c150a8808b27ce54813031f09c53ac16a5066b9348139f1e6a9c7684bc5d4a02903219f2ecd935abddf83ca20e624bd599966f691d895c9111a562b358119cc615336bffc07322ac7a4203609d5b6b50984949fdfa2ad413ccb27e912473232bf75b87ed2f7eff20fd156e7171c773504828e1970580706c43cdb268490b48f9dfb25504608133cf117a651fb12ecd9d513a1f7e661296631dfde67eee6171f77441bd8e7c0426815c78d0b08616e0ff5c88ecfc4668afc2024b021d3cfe08ee5f0fa8d1aa8f40fe8617976d1709143e11182e57cd0b244f9cbdee8b5b6973a64724fc1613abe90d385fa39e8d8ed12117f4cfd822825bd3905e9210722a1ce7d589a3a5dedf89781a59da8b0f2e7f711724b5c76e55be158933d6f6a9ca6979b14583c634b48805d30c257bc66f86f6b8aeca6cd80db4df2d46a38329d0c423826086c13db14e7d0c816db8d9dc4f78a39cf40e8931a4f7249edf011ac494aef0e393dd205e43a76cbe988871fa40bf7ff61df7a849f826174374b6a42f40e3a5d591640643d04d9ccd8f34b653c292f5c22c6d5edd1734ae3e48ebed973287463e6a9c16e95b3543b63b03cf6e3ebbad0a09b9d37669e9909645e72087d1657e2705ce79d74e280a7f833fe5d31a004ed59c232e9b560d665352f463848544f2974a4156950fee99324e2e1f0bc02a812ccdf298d54667d77e5658de18b6eb4d96213fd6ac084f97d6861aa69d9601ed16847038aba1c08c1d3b5cbbcacc23352c720e21a39f13ac741249a111064c3b9ba9e337a5cfe02c3be8481f222fb4526225f75e023e018113da0439f076d512c32494bc4b388f60dd456434a948664e3f2242b6524ce3bebbc69296c050621b97ddcbf0264595d00d3af722e67d01cecb51375019317f0b74be3ddf0cfbbcfd1ebcd0fabd5cb923d2af4b1162374c7d0f9b1e55e2549d0e47aa4b3d59dfab6160aaea0398e7c402358ca628a3df100012e63eec321f07723b7205d73164f6ef668d6233404c7f143cb9518f33db1502dd1ce03e93f984dd59feb3d61bf2674e374f80b13cf5af02f11e946f9a95232976234c728c4adbf8a8369d61a0f1c427dbd68ca614481f735ca4b6f05e73021de7e5cab1a67bd56a30030aa146c9d6215b0cce3951af96108431013909df79873848a22367f23adbf94b44bd98e265e5bed78e937a91db8171aebb732340520f6f361bef5918d2f50cf891de1ba5391a0c2113db1755b76d2b042dc532fe535c96967e3e0455645d70f03a2c597819694ed1a63ab165f27cbb199f58c0814517b44f1337ef12babe2d1d86ced9c4ce7a8bcf8fd8cf28545728d759535430efe7d24b2203a2b59abe4c65bfed23f221f4cb0316dcf906a5a67a25a2df77751b75f771f3c9a5a8cd05d4b22bb0c068d7801655836fb767ac10b9eac424afb78f692ba9ceb281511b3ccdeb14403790bbc575ad1db892b3323eee100549875f146a76dbfae6bd1a4b0b3ff8c0c410d1946ceff32de01152ffd8217eae7784d37220e1efc08ce16a271933c17865d492291c8d0ffb0ebdaddb85581c06d5307c713473ce68cc75a8750fb02d834b0a3d437e56e9cf6b1c2a8eed9dd2578c12c2d94e355e3acf023efe94bf262b9d3a39aa395269f11fb832dfb9f788e7c3b20e71152d887dbd10938a516794b684ecee26f68978a851192e97916f2600a399c6023265357bbe250fe1eeb05d6d27a9c47f5d04fc3e29c5847e1c0b94e8544e54544ce54b7af8cb1aca12a26a98aff8237c15cadef9d0469e5c03d5bae7fd591e2f0cb3b4c396891c0e6546a37f436273e7c7e307226e24e2f9edd58147c6438e5b1ad9569ebee77d7591a3f0690c6e1c861a585e002ae5ba1d8312cf4ed8930a9f1d5f1b52996ea5c73bc13aa031a48622b730cadd2d138d8f6d948e465bd1fcc5be4be9294ea5fdcc0da9676adb8c1982457335ff9f35c2185263a4757686cb93a4a7aa690515eb4caf62611032af3e706d2986afa7d4c380db88fb245239dfd2777b455be844d80ec9f40ed95d945bb2d75ba5356d77f78faf0a799a1772a049e1cda2471cbc2ddb0268580f85c3da112a1179d91aa6c60c77f10821ecb976c288a7a975cc05507b02c526f8d1c521550f51ece3d6ea98c1da458ffff997c9031410422c1ea5abb672135fde6a219a462d25e59ac8c9d574810ff57d679301d62e1155b63a26a454fa5bed07775fabab2d944d4819cde5ee135724e35e3686017eb0ca594910a51c41a4b7bc2108be4eb6a60a33f07e31f7392303790506c04cabf7895e73e915d7f0f6a54490a33af5716405a376631f579b7d7a86858d18815eee7a0ddf3b5c4dae599fe9ebb8876905d526e2d30418d5e06c71540653f4663e9c86adb68de24624d68df15bcf0d721b0256372ee9853ab0f9d029afdfbdc5f40993881f680e8afa7457a5077133d75bf17be9af9bcc4eb52a7f4ea8b9dc64273d8ae443534ae0d73ce64d182563626cac7e4180a157d99409670b1a69b70b8041540a4ad6fe1263342031b57405d9f73b4887c6838ca3f89e6ea72d77b884a61cd7425b7990e64766ee9807e57f05a3a4c003accad57387f07d6c086c469643d6fdd39ec569252bda39cc35003aae19f1cdfc57fd9913e9077da0d4d0c808fc78ad073c41f197b697e713684d9e9c012a59bcf2a43f49c7eb548cb829a8a37b08cf245d76900391a5e1b6c855149602554b89a34731dec9a5ec78dd014d2f68914a7328eaaf32640c10fc7c9f0266c47c8bac926fd69a963b2bac6adf1f746a18083cc627b4edd6d45b2fadb3d1d2f0a6006de9a39644d7b8fb6f884c86392aa7f0c75fb509fa8f06a995821aeaa32edc9413cd6cd9a63321430b5fcfea485045ea5b1a1a142138aae478245bb3a025252ee8685107865380ebc616f0b36783fbde411fe03f2c79c6f31ebafe96937e89b632e2da88addedcdae9d637495f6bd0b4c2978ef1e1f964bed06d8cfa42e010153a638fc5e37d3efabbc62d15f7b1cc5424aaad910a618b2dd5658c4777f4c3314812f924efd8ad32860f597df9fdf7a7af7fc4896d58442877c986e4f862a9f3a3179f0e9b96316a90d843ea2bf65a93ad3f5b40d3879697fcc1023b8dd1ca43959b09ecad60d28a234a74c55745fc016411fb1e03958962ad7789b300e92f0a64c6c024eedd997b858d73744392e5da1d1e2a8bc72b2571d210a2b41853df2e59bf4b2026b68d23fec8c861b8841e04208d73efe5f173acb3b7d6a69cb7e299bcaf32461d92b76bd823fcf27dc3ae69b5875bb2268e7afc9792acf255bc4131d5bdfe009a1a1d3b59c796915cf89df024346c3c52ab4247c8c9acfe0b0b03e0eb1236b567f6c97ccbdc1ea51bcbf480b4bb2df631efd4778c855e33854c308d48d562cc4acdc31474891d9683e3ba03af4526468a0337722cee4bf98d26d120322f0baf0c4711ed9df71acb5ce9f7605bf9e095278e7322ef2bfab9e941ed80f248b8c5750dbdee8d4e9dae6e84b37f0100e24cce39916d1f65f3d962468c97d047f1764cc7cffe8eb52ea6805df748e881b4d148ac983d02c3bfc3c0ddb64c13543e2a5b1d4d07e654561b5c1bcaa35aa5df8e5d8e9079e26ee5ddcbad74870599284968b541f0de549c75c86735789d94eae9d4888209058ded914b5fcd30ec3b363b3c3ab2a1bedd891d8de93faffa755d4c774175d5b4496046079aca301165f1699f52a901ce16a4797348f030b970c11e0c6271c436cac563c807726dbc3ddf3958a52dfa562875f2412d50e322af9dc75c927ec0d537a452564ecdd035eb8a1431dc46739d3b84f1c13f68b07d5779af2f7aa5b1d7b8867a7916e341c3987a63f09ffc55ec755adcb9273f801193dd3e4dc1ed7d8577f143f907bda9af6c358c5e9558868b017e1cf28cdd39278952dc7d105f0d279970159dca62ee428e45f9436761efc205781a34174bc507615ff1880f0149054988582e07dafac127321067bd2078d9aad13d4670900af9448de53765dd1966adc37475652eb3775e823b913d9b0a171710ecf23eb4f2455a632050bbfb6694eda8d2378d6503ab5cbfe18b92dc8bc575bd91fe29c06432ca690a9bb86116d532bfd83f2787d1a44870691b62ebe52beb609333dbbb4709bd270be205191372a491ef54da9d04ab4b1e3d0a56cefe91a2825a59f9ad85135a268ceb492b43b36aa57f3d4ead86088d50c41f158fc03fc1aa4e382e9f0595caedf37f2d9d90dfad83f1c32cc23e03358e66244836117c7161d7971f97afda3404aa665979e14094b4abae1ce114e46c618bdf96c9db92da2e5d4077a06b29c1f4176874c71d1c48bf17c6c514f0f2594f9b1aa85205c7239948f9dcbf21c99844a44d268d2ebcf02c9cd2d062ba7625e2fe9b25d87764752a008bf7feb903e37cb8dc19d5fb68b584a19ce4d45ab8f7a21d2bb66419b0f76aedbe6f641b1fc725badef2a66c67bf4e90eaaa70b900f8165e9103fdd3f5d2e07759ecf930656ec6141c5c0969033512d085ca40bd964fc62a97b3ab8d792d15072618c6de1c00e72d5bfd04da823f59c935eb4c4fc1263aea036e762f86318f03eb98d20e8ea4106d667da2a72d07a9e3c1b59a58cba2fb049ede67a16205d8d5711726a90183ca3c0485e8b94cb28d86f3d235befaed90e230a985cb55d378e3803bc895bec59c02fcbde0f6276b8a1a91e7226b972f81ea8177d995a9c0f597e0acc2bc0d910f2717cc914705582a07649f6a45e98f578658f169e8a4f6d95858131c04350faa131d5b039430a1f4b5349f16363a36991d7ebe3faa909dab8db118dc578069f52fd6113fc6ee6f708dc9922e25d04ccf16bc8763c5b3dcf4a0b3620c9c34c478e109974cc388ea27f5ea1eb8f9f5f881dbd8f4db1f56dc3bf8269ab3bb9a4bbc92809432754639a05661ebbe9cee6238d39aacb1a2c0c508fdd267da9bfa2348ab01b1fac36f856319f4a247f506b37b66cc58ed353bbee4177f7288269c77a4925596ab944df5f9a46ceb5cec8413d3fc349f95bf0def55aef463c543c76d59b144ea4dd226b2e961906d0469afa9c7fd9c2ab32a7f81e52afae199dac52dee6f9555e96443e3bbb62ad14754d19edfd1caa14e5dd99c1cf359940dd4dce0eb3312818532ecb1f80d00be2d953019a3e186aa6f4063678171d925281755aed96781132c24684427cddcddbf1514439c939af01dbb650b9c0d413cf38c78be3e72abb6e32201c3d05e84d604bac7445150cc1960b626b0f52d5b80741b8c39a5bc5810b414fd567c28c050046d90434a81e6ce4019ef7c153bed9ab5addb4693ad4fc9a6e2a527b1935af4c817b668108caeb6c6cc089a839dc031be28ab0e92ad5a8ac174415bfa071869579e82dd2adbed7af9b7b930c7bd9cee957645b929243ffb0eb2191ddcecc457baec3cc720d46ac1e2c34a676a014979447df16ee17ac7c394857493e1aa2468f7e72c517be1ef3487d60266f3d38e79d327f6554017ba8a5cd39ce590a90142187999a0c269427bf2d92a56ea9a3497485a9e97d063e0fa6c86d73c7151228d2489cddf7dd42c3d2bb50a5ed7bd047aad002f5c19c701b9ce846ec00d0b51f224fe0e34358975223850eaa743a6c3ca0900f2cba2a9e46f8ab7a998eb3d54181fc2a5c770f2e5d423941258b6bc3c3165422f0df37252c5a605cfed9451f4a91dbcdac1b97644f8f468c99ab6673655c8ae2e49948b13622c582ae68eadf94a27d4f44a957d5939b1b35995cd0f78de3a2c36a80e5aeff0239700ac63bb2ba543f23d898e6fed3c645f0870821ccb75c4a49052e749ae1494aa9a669ae152627cfefba72bb5c8ac14531f545df6f7c26cfe856eaabf17788678403dbc893529d7e077ccf4b5b22fca77e568e706c46c3c225b25dc24f3c401eb3959501a9da05e81f91e72d8736d8db3a4d5a7b2fa1c3cf85a9e07df0aa00eeacfe1defc527218c7c8c82c86d21065efa2c2266360797369cc02b25a24b2b35e48fdef961c450d9b2ef0ab2899bd5a132958ea82bf2ce95bf77866fc09a5fa2dedd70a52c3c246e671bf75248e1e75077fbe7d75dfdca6b72529aa2d801feb400694b7970e90ca8eda5c14e47adbbdb3ec1d67a68832b3669c3c065553c88d7fdb5f7ecec657a17db1ef10ce249c3b00ba9d2e7b82d5174fa4da02dc484ae8d2b35ee85db3c1d4993ea2ef4c5608f5d42f655c5e946fda59872b272b284a0422d8b97cad9d746accc89b3bc5d6c7f519959e78b688a5056e8b56fca8ba73ea559099c2264c186bfc99027ba16d8243b5326f0beb24219e75fa840abcc86aa155242643308856e013f7003847e3e1e5924f019c65318bb0551adcd7cf18da3108dc87863418d6d0f82bbdf921008be596337cb38b768a40f83487ed4a7469a358ffe51498c53f43937d6046968c294aab2807d9c7bdc758458facd493a2bffe2cd76773c6573941cc3411a70e4e621db874ca9480cceaff24757412146a854a6baa362d24966ed38b9afaa5f10fdf65a460ee6f1f6c9a3e7d2c07313496638fffc179ca1c498300b8f540c7a897472a59349bef0a657f1c38fd8cb95aec00d6cf6459d0153a23d13b8e0e9699ae4375be38f89eaa7f42a13e302b30f0360526c3dafec9772ff44cfcad8a992d1c7b4dbbb42e0367828bd5750d0e205d3a1988c36d8f3ca9f19e7be49adc58cca896ba38ef64a6aa3501c1c6dc5a1009c1e503b76334b21548ca66d99c2d5bdf1c3dc41d32c310d9614d6c19e43a895c92119f870517b222fb2014c4fca52bcc3e177452c573c85ece17de576ed412be7744641c9b5dc438d4478d8e036b4ffdd7cdd1c0f09b569f44062066c250339736265b5c6d3170bf99e8d91df6a84fd8ae06e34dfb6443068bc2393028d7744f98608b30c2b93f1f13aa015b2083b4c78d6bb3e22df516f96af4319ce8915e4e659afd80e41db8c10a360c2fc82504313aa34868cf7757e2ab44119149a578fc657bb7351986640b4633028035b5ca7e7e57abc529118f281459e0f9943b4ac25facc335aa1cc9668e4aeb38b05c8b15212fe2e383ec45336edca6bb127d5d061dd5296adf06713bab23d03e8142d160ebd2f7a8252f016b80746bbf08913831659defbbff6de4f06665b87af08e23c6a4e9f1fe56034b3814ca38edc19f64ac00ac1f0f5478a8ef85b8acd445690aaf131bd9cc6090ac02f085142d84d067deb6abc0502450479ed0c6b334c7fa0d830111b6fa89fdab31dd4e0867984bcb2e4e42db65b81c49671134d582bf6ab4ab3673906f1a73d12da3cd1b834639170692187736580534b10ead1aa675e0878d7ae870155a19a45e0aa95569d6c2d4cd48d69cab4b3392e390d78b8831850f9295185dd39318ae2dda8bbe01900d89ea392352acdbcdea675f5a2f113b80d3224eac5f910b977700da1a5f34bb43bec72da8a2214efbc5a443df0f27dafa5ba66e4c7e370cbf8540d3ff3fe8a18bfccbec0d93f2ede7aa02040e31b3581b3084be9fc3aedcb762568ee16606880ec95e3df92e0700b621e9698e9f9efb0ad926034e35dcc3a896a8d069dd77b9f4b0e8e9147a48cf93b2c13c0861ce0cf0def20800dcaa0bbaa7a0643fab217c6436d1b9077f9ea1a4e6f243237d2dd2f4c852945ec100fa141fa5110ad8ee1986e582727a45efc01144e44788fda2973f1ead6e10ebc7dadf861e9e726dc5d7834461df14d525720355000fdee814a1f8686b5fbd62e5f1426275d421718dff83dbd7c77e362600a29fac65ce476d3a482ff32f0d2f4488663d117bbcec30d9ad334df16070dcb215ac510f002194a857f9afa6aa59cae6739e5a5beee795ad2ad32926608c2dcf850458d61b7e71334c51068b39e86155900eb83b5c68a4c32243d42e299103a1192d2782c867ec2550bc60a865e5f01be51493e4b17a4562bc0cb7d16187456efab128dbaee2edc48ac425c3d3575f819b38531f932260d420b539d7b176db7f4f18c2a876fa5c5a23f0bea52e4696cfda0260b2ab6add5f77c6c107c067ac1c41e85cb3c7b4212d42c891161cbb7c4dc9fb2365a059a44ce9c8b92a3761a28cf8ab60c24a1a248510d507de45bcfb4391aa02021af79ee39d428808bd6da4199be8359ea6334eacb59e89c45354faf85997664fc34db16bbcbc9669fb929b095228430f840785e958ac7d91eb8862b54a4bb8164062c62e6dbe4b1598d86da547f2f2dd8c9fb28321854c0db76219c28c4d5e1d3c3fc672d9d10fd33d4703359fceaacf6502bec339b35f005fe908674625c22d5dea9780277c4a6d92e845018544d3aeb8388ff1c8be1d328b2517eca15c4a0d4b6d23a0804864a93ec21b501fddd5422c4a0f55f52ced6be21f2f98c4796087afd050190cbcc550eadd6e6c952018536a3f2436e98739720cde36b4d7046b6131190835f260d52a3d42249b109605a9191fb8decc566810b26a16880486d3647852323a5bbcfdfee0f82726b8c5020be2f3b293c522e20d7cccb55c7186ff582d82b6716e59a3967a075d55b43778436dc2fa9efc720e31110bfd78468c5905f7b27c2254be31b8b478b06f2d74d017619478479ace56431a2fd423ac2048327fe96b9534730d2d365207be4a027050677114d5c7be210d3e4124a7cbcb34a96d2f6d113701a1bca79d4988346bc2b62662b692aacbd8552648d44aca148530688c69e085ef532fb062601612372c10476e46c46c7ce1e4794ccc55d184a4901809484845c58d4df8a833b00dec1828719eacb4345aa582e056f4100aa1f79126adf092a00cb6dd2877aa9d4d14edc44df9d0aa2bec8cf6036c34c29bf6e7fa3a814a05bd4b35a8e7d7ad27f93613ad82879aed79baff0a899974b4ac08dd95fb8b3eebc50a7476ded1249439dbf2abb950f3c7454c64841be29c2f66613f2812d5b58adfd1da0eb46cf72d378af2859a5dc17eb72b242d60519479f088767c2667952c3429cf3a12b10f3a18cb7b05ccb5ee5bf9dea8cd01ed44da7305eb59e047c817eb99bbc0a0a652030726f5f1f86060a630ed572ca5be949c17610586e87f34932daa07690555a9cf2a24c812c56701a787e19811f5cd6d0603232bcde517c3ea22e219fdeac6fce8a94c5c30dcd1b7a62440d5469821b55f60d3c7f480155c62f1cc5a44f6003494ad271913e4a66cea2f95759137c256f055f940c46083e645c3ed3206d20b371c5e3b688286ee07bcd165e0bb7ab936010b1efe052d684bd9bfcf0a0a25efefc8e313af466ab27064313a7d8c080d3fd9aac9697f91cd72670ef9481998b443df6534572737fa8f2a799bb6cb8ac657c25983e9f932b94336d7f356fbd3631aab0b28c9ed96cc4c55ce11f242a7ed680240d3e63db834a69043469a787d045e72fe766c602e328f2f5a239ab7088959e28841c811cc4783bb7a797e573e9df67d65a6a748a83340fe455914f355a212aa5955f73e16f8c200a3146862c038ca146940e46cabd7470bb73bc9be35417ba2da98db8c3d514ba7e69fc25fa8dcc27e32cd8a95e0278c9ed75221df506c7c123491dcc2ea5a06f86ca3f317a192c605e7d5018bee2af7ffcd2585204f2efd418ec963aac41adc3b5da863525161beefb0deb0167fe97175c23c5b47da8ce67811c6d60a7499b3b7e1347ad860519285b67201fe386ae049de200c1d98901fffe5129faba1df75b51ed1a070776a2a0f21185b0ac3b72ec44858016a3241901e31352455f4f5087d3f063de43eb56ed519592604c8d8412b296ca1f64fa7221d1db5cfcf14e256576a5bb9fa5c39471ec5bbcbb2eed303c9a8e5538898cbbb43d31c07e3abae458bc8597c7b7afe9b344dc8b0dcdeb25ae5ee4a81eab5b444d978f133575e62bf608087ee2e3f0d545dda083e4c407d30c6222392e24d6aa62737bdbdf4d704ab1fba6e78dd546d58e29402ddc9bb3a6cb56df9ee3908f6c77536070c82be9ff011a094804e6026910ba23ef61af7f3f6faf752fdb7905f910b9d5788c9ba38787b5783704a0c41e51f2c44ef089dafb6dde7b926238aadeb309535999074d92aa80ac3ae9900c53e685c9d325b557794a665b3d446a1e9bc2e462aa7a19489eedfdfdaa403e3ba832c58d025dbc652789c9bca6ce97b1aee4bd7bd1ac2c151ac67fe52b8505d299cb44865324f99484a08af8557d2c04868d070775abca3374c8990b354471819704855e4c0817561f232c96cfdca197b12053bdfcf57e346b78dbd83dfb2b992e92fa7d6363703a658621208c6982ebcd4315d7de25a2983d3bbac4cc157eb9ceeb365c3fe3aeb1e64e0b1e01b06a612969d01d9f98f1cf8895a869561fe5440681ab7317f52d4d1fff3cf7d62da298640924d7c7ebc65acc2b472e729719c853dadc6aa214666c80fe5946505dd611fba5669edd7aaaca7640f99c980776c7456b4bab54ce04a0a7dfc27226ad7f3e5ec317eb46e2198f258b423c3ced76c139b77bbdb68e6289f3281b13cfb908ae0bf6db45aa9e9d19487eb375d7c5a436cf43defa2dd21a79015bb59391ecfcc1919513266f2c90095d8fcfd20f0c899874a508195145970e40df448a33d5e6197e4242160b08acdfe322e9e9393e9186a83f6973973562ba30472a501bf03f262062fa8d04af4dfd67fca423fcd84661f89785a1863df7fd6e17f99dc0c87278369baf03f2acfdf25a61810aa07632bae421ef1b94dbe14848c614cbb8cb1a701f30c2135b7e374f38f60315ea74c101d982f84a497b993b5ec60e526a74b1be48e6f623859f8474922eacde31708bc7672f53d62ab99a471ebc68da5c51b2a352129dbd278d5ff2e47fd0bbfbd5fd9c1b7b6427aef25eec170d96bc14eeb7dfb9383b58a7c4345abe6e3137c03180c0451bbbb74cd271aac64e3a801aa81bb3ecec518e8ce0ac1c7e7e20ea150fdff49274cd1d9ac65cf3bad2a6bee41a58d06b9372b75d4f21a8a324324b70bd45a9721b0ab2ff3a9b67534f7dd0e7b219b5c3c2117b8f7c3f9fcaf4e7c459e66c4f7273173010cb97762e19125ecc1bc8c473fca033a9f440526474a3fd3707be66f21154ed45e5db90a9d426d0d793d09d0aa7b1881353ee70fe08194eae9db680af7a56632515f24764e50dafb0d6db9fe657c7e171f7946bf6339a411714df1cd9229e3a24d8661addd04963de31445d959155c84c7bdcb3fb9bb96d0709a29c2d8e9edadba9918b733a6c95b65fa54696c8eda4e93d21e96c84f93af4e8abaf0b22caad90061f09d367e9addf9e68fb7872e22ffed7fe6cc7a3cc33773e5495f083c45b187a69266d0d3324c09a19dca933e591e3c8dcbeab6cc4def48738118c35fe4bab82fa61ae8efb930fcf428aa7606aa34e8c577f763455a5f33fc0722c9deb07ef9c6d3c26618560f3aa4d5601ace3bc859ec8ffb6bf011109d4786850401d084b331c164319731732b7c4ef365de3462f6cdbeffb5159b89ef1da44a5b0f6c544f39190b33b473e337433b6b417dbe8b292faa0929fc1f528f460978b552ae7733a683bc53b644e8c6c043d195f501c95ad9fb24afecc6f4e78a5e17fc10bc74c940a68179e7cb0940bc0f2c498c24a7ef945a552f2fb8f65db14b301792bed378cf2b618d8d31ce0dff4784448b4faa51286fa6910b1ce05b8277c9ee20dd1da71ab96578f19dbf955192e1703aac5ce85de11ebdc91a3b48c68bed690140d9c0eaf993205b3865407a984cb4e060441cfb58c59cb0dc8e8c452ea1707f118f2a0793f56e122a47774102ccf8c696ea56c97ea4140a87618fc709efebe075c74d392e934a609aeda070786a243574d7fc90f8c20e1d463db814c4dec26d960a914872739d8bb0e025cda12d217322927818712873333fa871f30676dd6e9cdf5efb099f4ddc96a76c21261dd5c8c9a330298fdc29929a2c222e77c0242bafcf1c1b981f449b71cadf33ae42297e91938e8bfae81a828051 +MD = d1089feae2a08019d9b7b121bc3fdb2e64d90647735608bf4e34be89f453d1fefa35e9144cd3a4f389d3b911b330af775ced000746dd0b526a1ffef1648e88bd + +Len = 81808 +Msg = e5a4fde05da8f5310909de90db06ce4f2ea08da7a6f49aaa5ec76f7a426306b9b9a29c408848b514f3956095241bbcf9d1cebbf91a5a26cab0b9e24f3c04718dff89bb5fb51f0f6bc0b665548232e6320b7aae3ff4cbd0d28a539a9230fb1be3fe84e3a5aed50a1eb9937434bdf352e022ccecdffdf19fab34bd21a9e4ef0da4ffb89b7a3a13ae152655159d9c050aec5fedff43fd719b3bf620fffe20894db64a506b46208104394f23d0f7e911163f0a056fd1bcf6cc6b18a4baf7ae71e5032772db7129c613707b262eab6abe7cc06b3bc2f301263b24e170dcfe554edc72de4774631d8ae4a3f386b61fe8b54656c9b8821095a9ef4c9baded7adcc83beab6f6bd85c4777dbb006af1bc2a9d7ceb6ea4368f4128f0cc8c8273d30c880955f8a73f3de533e89ee8fa65eafa1f2466a02667dacb4b478dfc18f870ad364e9aed8480f44a662d36f3609c121ee348aea8669c58fbb9fb76359603bb877a13a1dab20a13b9b952696bc11e9a5f90efadce8d5d719b1b146e7e251d1b61fa5f520a5c6500fbd36121964871ec85ce224a59c3338d71189b5f1eedccf804613a95c4a81725d85e6145be1a1f6e5847e86d932fa414475997305e159bbb3955ac524fbeaae917ff5bbd2962b08aa0a049fec2fa3a6ee38510c986c60fcac67ebe71f4c7a6b3826056711f46aaa724844de62f4b7d040d450e12de27b28e738677dafbeb91eddf295a49eaee972cad99fd0b224bf43c8f419af3ad610b6f0a12e075ac51f5fef702702dd183fe8303876056e222277f3020bb543d9ba2d651cdff2b4e22594e92919e051b2d6813eef77eafb9f79e36b78b7a1dd4fe0029125cdee22b8546457881eeb911135c44369160ffedf2e2c7ed29dd36bbb2acd1136a858389a3434b70786831fb5e627ea2fc0d2cc73d7a9c9aa3ef873ade2e371d9dfaf7b1a4d8c8431e135521350229fbe18d208ffdee1b86a0b5f898aa0fc2f79d4724ebaf8d24b91df70ecac1c5ad09e7e9c18d5dc7ae78c939721f3fd6d96b1374f47fecebc79a1a1c423f2a327394b728f909838cbc39c682db15c50be63fa7874eb4847919aec08bdac997d2e164f852af4a97c5ad923e981dc36337503c008a19d39fbf83bdb44bbfae302b60405370cb99c2fae848d9841e7142e17f2ac7843f2464466b8ea164d7361fc759f27089343e2bb4d726404dc8678a91dbd1a37ea7effc953aea2ddf0cab892e3240f6a5d481fc7ae1f31bfb01ec62cfccf83d7f397c8f35599900c3455399e655f38ecc92a95ad56e761197b349f224ba693c8fdd1244ac2e63c3186a78747928d3df0756006f4ce678cb27c5c763170dea49b67bfb438423101ee66260456f15a7925d08cc6367b2c1f1b61facdd312d440cfdfb7db5449f67b8361753324e82394ed791565eae38192a49a94087f8823f2c6b45e1c2750a313a0f709b63a0d94fbc7cd7e687aae1481eea4bcd8af675a25209426f919ecb364b7a557f01ec81b28354c3c406e2151576a0ed990eb36c3725ded86e4b474c3e947eae4634bbe22a4c673d3704de3d4ada7477ed3ab6d0c44ef2f02817f9f411bd2363392394647ebfbe2e88a927bfadf16cd11136870a12744d73e31e3a2b766d715da0f7ff6f7883607c001c4405076493e34d2bae80e940f847e8879559374c7182c3d7846bde415511e586bd751fdaee96e941b39c105afa567f7b8fe61a032abbe9ecacc079a0a6d37f0e1b79bffc87d02c9f1fc551695b86ef22b23be83aa4f15b5efed611495aac18dde578ad72657a606e7a62721523c182a385be6898e80a625403166ee37983f61aa3dab2e3907dcbd54add3c085bee7e2790d864c6fdf044f641e657170c3f62eede0696f811bfb5fd199d77e70bf52cd55cf1a26ceb89496d42af958d19caa4811c662158ef2a680d6e0aeb5d39bed4d67072ec31bbbfbbe18edaf1ecab0b04fae8611bab32a52b2ed28c5f10ef30be5154c108bd7478e079abcd30ddc7eaca81c75f4b9be3174588cc8b9da83435316f9148beb91e9e025e23f21d07774f3d4043c87ace086aff42e46f6bce11b47758ae6ed8cdc21867b87eb07f13c222a65ce30570ecac85a185a2a0922a8c96d633339a1ca067ce57ae426e1da8b14b4d002f7cf59ed45073788f87da63b0c19728a93654db15a81c68f996c06f4ab37a52b096d18c8ab3bc44328a0a21821e016197a94625d48efd0f2a8f300f9740757aedbbcb5dd596c6101312ec0e0c955e03855bbb27ad6841cb5ec13531a0db85a16f54adb9bee1d705bb8846d0550ff439fbb47a89a71e31c31c94977d6c6df4efbcc73d4a4b7c384bb152e10f65720d29821c4df2cb981520ec701d9a03dc088b5e7e44b5864f31097dda857445a8effba1fbfa0a20bf350956bd91316d120a9edddf89a577430967a886f9a6fc97e2d8e1b94a7aae79d8a7e3e3b9e9b2f5414fbf54d6c0253e0a8eb9c0074e922930e8c9be05ea7daf47221a4a5d6bdb6ff7c78e44f1ae98297aa638ef751410441f52e172f301964acba1845a475ff067722dd117a318d8eda2d6ae7a0c9f7dd2f93fb13edb680030aa4ca77c3e6bf7c4fcaa1134b4a6ee70ca47a2cb9498e1ba04d6c28887c7c34b2c4c0d16093afa70db66d505ecffe19c3a219c49d5a644e489409bb9bdc5e8819bc93e92717200525788a5f113ccb958398b245c9772af38cfa4c43a460a75bc3deac1563ebc1252ba390960f0b47e8b10adc36ca1a4299e202bc672ea3f75e35cd81dcc38bf37584aa08aba4c60391f08b000e1bce3bbfec2fc28c8700cedde3ebbdd5a2624774c51e6af68ef77f2fb67bc6424b0d76c40fe4172a6a218e7952bba866ad292da16153201d0a1a2af0775f8769b4529444c1c1f2d73460c6af06dfda26302b2699fdfad075b2a897a2b7c8dbeaf42814b0a64c0e096258f7fd74badb8ad7f2c2bcdf67e497151d35a4fc2a3c4c871868a631e4c1379074a2d320cf251b011a72989a4cf4f7bdf29585b9060114f98e1083d91ea4e83b4e47ce9f9f3f4d37fcb69bc2fc5a2df9d327a372eef2caa803acd8206c31a1cf30674e45ad929819341f54ce08ac9075097cacce4769d43f137e218c5fffeac8d581e0b77cb791f13b1d523ff464c59c3ff5000fa1eed81b3834ee916c5839b4b81814797f26a16c8c20f27d420b43fbd1313bcb70ea3cb8dc419db413d2f52f32aa57e037686ce7a1dad42a6418720057b1be9656f478b48a34cd88d918d374dfa9399047e55aff16ab65bbfd1506464de706d4a686128acc7eec744e622b3239a5281e0325e22f450335965f79472a2e41b32ae227a0a81d9078fac67782f3bb1ea1cdfbb298d4d772b26e1dbddb48736231edbc419998f80a01a0d3916115ee864544b413e59c288a6a97ba6b291da7c901b1877c73d9e65bf4fb18784c254e7c7106aeb26ef1c2badca7a809c71655d6a10ac630b5e752f6f16df774babe5551b3886e268b522074671289022bcee82bae4e0af6d64dd87b557de31f233d9db69b3e54e8c159ec57c86cbffccdb3e938881fc8475b79e159bfaf7de01c1f720b86bcf561a76560c54f1acf422341d37dace4809acbf808028e872a600bf08cd10478e229b401485d89a1398ad305316bab30b6799e44b71640797b07894d489792f69db97da9ed80f6a4713f437a7d92f188fc5c58fc68f5840ad25f1a823fdfc0ba7a994aebcac0147928c7fb2e22841e51a4cb626ba830b7cfe2cf163bdd0a0c391b31c2338a9b71a3a2bd707ccaaf902f523f613eff485a1d0ee022d6aab6e406f22b6a1d97838cc881a83a02d085e5868740dbc2d8bcf986c93ab6ef1366c68891deb9066c18c43c47e0be3cdea79cdba64818b3cf0f04a1a42758e1b18a42426cd4159a82bbc693682f83a74f6504a351ddce6e3caf09e2223e6f5b0fa1e5d8f5a4262675fcf25264bd10ce9d7eeb81fc7a537ebc1d87bcb5f880b7883e1f90deb76146a05cd5edb041ec1f53358fdc18965e51d7eafcb5e1ee3393a5cf5e2e6a864d77bc4bffe9ed368c160b39803638ca3583fa97d7523877de5c02c62fe62ba94146044acecb7e03573f2feb4b04df8e7f819ea4b6162c3e079d09c3037cb498e31e22e9c106e54104172bdb7eec6f4ba2d75e7207763f9945b33546873677cdb98c92a97520a577e92aa97a6a417a8a25f194b049f6d521ff5b1fb129c807c02afdddfa69ad51009cf60358bba893d29f6cebcffc1caf60bad113934995c718be0e6f6d0d015a8385e5d3e6d1762dbd75a5ce21ac5c00ce0ed1db8d8524382ff92ab161edc134793a8695b55a5eaa933f38b675c9398bd241c9b1d05af7fd7e42cf5e896a61713a3154b344a4b6bd0c52a23f0ce139a3061a15413c4985799c5188c1443176937ef0ecd7054f12b781565eb28762e0d8e1ee610401cf512f027bd38412a1550d900f9b5b77b7f73c7ac0dacb45eca3bfee452964c15aef9039483c117558916225c3fccb3c8de8be8118b2e3f8ed06aa93a4db0e0b7ab54fb93d2ee40cb5c01398d49da0a42f4bb01cc45396f0c29e3b6a83f24a40bd56bffad12886194745a461b7ea764f2aa4b3b66a595ece2bbee4eb690bb3f1812853868ab5725b9bb68738c45fa6adee982bd6612095f1870d299eda93d5ae64bebce4f062331411875e66a089dc31097aab054f45f70b42fd9bed4f0729c7e69e6e8e789b4303472c7c73c2e5618909d093bb9b25dc6c0df49e6f4ce22aee752bcaeba9dd2c89ab3a73f8b1fee1164e4e7871bb6cc0a436a6b38d3ac143729f0b5494fab44a17cc25d76de422d5596538ebb056773e346b787ddfbf011e04d291be12e19d364e1873193bd01da8d2ed14500fc2d1cfad0aee5fcf404e1515ae7349de05047b9d2ea6bbeb0c3bf603248537e8a708df6e937ccbe444e4c3158114aa6ecb9684756d3522140f1a277ac9f015c36988f81993a864b75381a28508fa324dabbfdb7752a2fe1f4f14c79a3be97c3880dea40e99f59ca0f2812e04949873e33bdd0b037d74a29552c850f208d5dda093866dde04e8e639888fdfe4b26401c7d29a7dba5c2eb1fea0a14e12af39aca407fcb0087306c409abfa32d5e1115e743664be0c6d45aeb3bf4c396c9db98bab64be050e42b3d869c35cc138bef4dc70adc8466a3f3deb6d05058d7052a9dd3f1056e760228476027524058d9a931e35cf319154208c1a832879c4be7c9f23c7b133d19e610d4f4c27ec6a551270964c013d497adfc49e8e802579b76a0df1edcdf15e29ac92a6af52128a2f9511d71bfa47b91ecb5bf9f7a28516ebb97aba19acfbe79253d91eb48a32cf6db0fb433e00ed7ae051d6bf47160516dbc97a0ec3f4dff858f52539f446c9b49ff4a17d2abb9b093021b9410531421408386042853c0a2afe0f2b7ad70e43c456be88f75a80eceebea96831aabab878e184e207c5c906d9e2104043d5474d99029d362446073f85cc678813bfe8d4cff81d53c11e42429fa5a708379798238d241f1d8685a51f88e9da8d49bd621383cc805a00f72e69e6d911e7c87667822b4b92c3b091e11942b770ec461bad112edf5c4939d8f3d939dd0f6368fa3bc5fdd9b6bd14e351995d85d929bb63305a4ba0efc5ee3c191d1321edffbbab9b8b7f7ef96e46026d3c23f551c9fc1c823b4491d944a0a934b21d584c4112f2fd2f2a7bb94ba6779a5e5086a941aab01940b4529749d3a8ad1492e088ac1178d74d797094f9b8ab7f9c4dba1e2529b66c071543b849f9a308c11e4b51a539a5c05306fe0aed1f16736295e04ee90ba800fad1e5aac9a530ce443a0905c0fdf23edc3d64999a3c511c4da3c9aa01b2fd6ea894c8ed4d48ca642a509a3383d0f6a9359754af8582e3d0b9f1b6be13d23f0b7cb86dfe4966e870c01c8f5972451ba61b9f4eeb33953747342a480973cbe57df3c7356c4282136ac1d848e5f0dce99beadfa3ab38e5d3d64897ee0ac612792cba4bcfa5cd2cc3b88c1e6777a40ae9212fb2f38de9f7321463e519306f48729e2cb09d494dc981f0ab795b7ce05182ac66c3def1db3bea78127c7a28f3d05a58b7801ea558dac6998c63a5645a434eb40c8c967591366577d0d86142d83ca8d30754c46852f31a19cb57d5dc6642b5ce9d77ea9780892b9a2b736f1ca10fe69388893f00e084e507d4d05d3388f2505296001bc64d86a5659ef80424d2ac7c20b7a7eeed6612cfda3567bc0856b496f692dfda803cb17b5087b0c0e9e1a501e1112b44ac781f2307698862c9441c0210f0418763f2bc15e1924815da528bf08b21ade0cc8b2c9715edacf204d58b2a385aefa2dfe3e8fdaf2b287374a9b3d055658a33ac03ad949c3e6fea398fa467e31f34cd52a4eaab0fdedc8a575bdf19f6596acde9962493f0d82babe5d6da4397d9ab677aaa13a68a09de9ae0ed4045d479aa0ff3a7242dca477ab7884faf55cd06ddf19667f668b4589955bfd299dc7642c28a68bb2eba6f08c7ad9f5e96170913270c6463256a0537a72b32a04e5662416ecda74696d275a8bcfe999820ffc2ab210833201332f323828be7dac04c1f01f93a3dde1efe7483a51b1560d288802b5685a123325c0498b6084df6b21612e0ec609ae609a6d2363a93815d1d39c81032052ce1153dc023bc20e368764cc48ac2c15cf2f954154cc7f86bf1739c10f63df734ee3e60ac40ff5636c49f68ca4c16ece289609eb413e7aa43a27817e149e4dc67bf105d3f8d0a28b67f9ff29ac15333da2dc1ef3548042997049d45cf87c13523b82d9be0446708f11dfa629c66f2468234bfbe2f45c806d47c55ae223c5d92077df8a5351390876504314165c98e8599429c9408898dc29a9e23a98fe41463618513f1a477111480e6c7177d5592818debfaf937afdfdd47de99d06efb8039e041e209c4eb5340d32a3e4d599788cabe755d66531538c76ab22aab55ff1b860258e5660cfcf19cea43095b710bdbb1c9933663d156230181ad58a2cb7b50c8261eb09ee308567934c5bada5a2f25e73dba086a48ef192c0b44a64f35dcca70ea27b60cfdba0c662126c5427b7dd1cb694e65e2104ca597960c96193bbfe320bcf88848a36e8e045deaab1c6b7489eefae4b173cdfb32e480699a99337135582d0589da7ab245a43985eed090af98c251018d97d8775b9378f03637b3bd2b77a8d33d2afa11edf6428d02f7918b88d61a294cb6d65d8a14de14fb8d42e0401fbed634b29809c15b17648a09c494f49aa4c091693dfa38f92e5c5cf247871da0edb2f319daf67a4316a0e68fd06846908f6bde1775ea02a0f83acd1f681e1ebb93cdeac93984735eded69ae21b521958388f955a24b951bcba44ee5cfb01cdc06f9b9e394a20370ebe5a39a92c0ec7424ea059a9b0c4b09ce2ef134396fe954fdfa08ff273565fc353c0256d78daeaff20529d7ea0b8a9d210bdee5bb2612fba5271327d5b93382d3d8cf0778862eedf5bfad3518ae197fcb215d21de3b5d7a06682184259636a9cba351d8fd1136d73601d8dbac5fc256d45ab5102817937928a67b3e9f35361a2783d2efef988c15bcb4f4f12e854bca459c30d923227c9f14c76a7ccbfcfb7cef629874d682f94e90be47a127877d8525d114a557c4df95d1b5346632544c782927ec903837452ab8091a111ecf202c7ce0aa9b4b668503675621255ba6f2b6dfba166a9f1f38533e7bb4699bc4fc6a53b13ae4876e378fdf947be1ce58b6dd18035e2c92a29a6e29fe5fd226ced8e4b12c0ca79346bbe4405688c114d45e95dde90cfb9a2832268279617448557e459e39670df854d9a8928392eeb480b288355767023e19c92050d3037688c1b43322c0953e3d025b84dd05df9036c67c5c2832b86606dd27079bf68d006f7b435646a9dc61eab7071f2ac3b7ce230d82b9be6347527adc14816cc9473c84e9f35811dc859e87daa72280a564d002bc8d4800d25cec237e5836ca3478504f748bde8c41d71e9dd50134e8932dbf5b3d65b0f5673f5c882cbad0bd1f6a645884d593bdc11c09b30fdefe697559c3b7f7d29aa50b37cb314c04f44d7263a12882971cae429a8752f005270b3331039c529cae19a48e61a748fc4c8315ac2e46d49a2467ad9bbe01e04058d6b6fda895b68a93581b8a4571866b8066f18d343ae4a651eeeb65d948475539d3e405d9278b66f26a5974a017701838feec4ddb8d19834b4de340feaf8d0d7109a690bfdc39f67258459499226ccd1b54ef364ac6daf8bb8c7c7656bf1a30a981e5e7813b2803bc29c6315919e450d16fe38eaa6d91ce49b1a04e08ff57868841875349ccc15477e5c69407843f6a0358ae9e220aa5cd9cc6360f3cf8aad6b753751a3c186ab34c952c06ccece5e359153aaedb267ebd5dd225021c307ceaddbe988484a68ce6e340e0cdd0d73e837ab06d06fd48846633de576fcd313688a38bd7db49fe90b6e3eec9313ad0b2120f3031edaff91f90c7f1b39e7a833e79b1c11965b2a9dcebf5a7d17c325ca957bf9e6dad19c0b702c11321d649acfe85ae68486ce82eda4dc074dff4e2058b1b3301098c6425b485c84c89606236dc7343894b361315f1a3ed5cdce37052c0261261ecd3b8b07ee184a5d384eea9420d172b0a0b59e788b72368ae8f04cbb04005c700c93cea7dde9e25e88a158b9719d3566d35e52b094f0b9f3e41c7f9c331b4392cb8195a1943bed5aebafe6643601e125cfbdd69db344c097440e06362c0c6c258e67689bbda8bbb0e5cd2c1aeaaa168bfa46a2a662e8fae38d67892f3b7e4676c9c7cfdc969aee1f0b7b82540bf035f7e79b3f412057c977349b70ce0dcb53251225340adb9ce4f3d14d9196166ed0081c2e1524780bacb0be2c45b8ff8e22aedc022dacd92940cdbbb5d2579690752b0c71bc96d68f252eae9c8066ad2125729be115193bca820b4f46bd1f08ef85df4cf8ae3ec85cb35f6a6ea96d734eec2ee634a2f66feb193af072ba62e9e6929332355272c9fee7b1960539240e41d7222f9f2fbad21586db33bc62b9b6001bf570ca61d967e022c3a612a820cab486faec6343ed2ee44b7aada64e99f9e692646d0a24e90e9b05141ef98efa35117c27b13367f3c2a1d797b2a2c66a31e4866eab7734183aaa0f01553c5606d9e31727027204653a08db90e74472c0da94788290b417ed8877914a0d5d85dd25a3f87744c1b1c7f173a814bffddc347070e92ed12338ef549e4c2c9bcfa6e3a4ce80a71c84f872856ccd81a1515b1b700448f1d1672f844b888047852521c0d3dd5024ee4e311b626ecc763fc1780c75c9184a15d25442b9b0ee195dd09eeb3f5ae77f3e8ff42914f42540efd0cb7dee29f7b612f75fb14bb1d6209a6466d943c1a72481ccda12199758a03601cdf635b137b44d68aa466e15e8dbaf5321f18dac1f934c772b6cfcc2e6e2a6d6e7fc090988d34998bc789d3786c9112f58ea8964c17a233190901af140a6b6c2b1f5c46d4b819bfa1ede55a14077644b642aa3963d177a6e823200bd065afa47a489f486f04d991f39de23dda6452d49dc2888bad319c69078b95a80987dc5e8480f15d12795d57aa5fe846718d0b0ad396a854d33ef9c49fc9c74e6879dce27052ba4c65208d59edbb5f3b828a8b2e8046745c7c0076fed8661dc594429578674362de0f0051dee53aafe5b461b888cb5a526b5180fc61d9e901d436eaf16891dd51dbb9219230b963400cb01c7c60dd5bac48fac57133cbdada45f67ad7f915a7f00b0a8c369592be7a781ec3befdded1e9bc1ed7bfbdd5c20fde7bf92e741c29a535ab48275698d4c6f0a45c66a8f542718f65bfcc4720270a686e6fe021cdecd923435d4bbaf22c8a3dedf15ba94a38ac8979848219d49432aa76e4d4485177f59b7bd48c0bc94f2f279f898748063a0271ff2ec77a188eef6e3c61f231cf525f66fbb4d18f44c31e76632dd1cd51d1db11a2c685b4149fa97a68ed22247006814c6a0501908c12bef2e0e4217f52839f2f0853a30df14ec897a1914c685c1ac21470d00654c8c37663bfb65fa732dbb694d9dd09ced723b48d8f545846ba168988b61cc724215fb090a7ab738d185e8808be6d9f3eeda7d624db3e2e06b283406ee4f12c47bf6dd34241cc46792d967d535e094da75c6194242d57b7f06ee84e8fa2571d07c97547413520beb3990afe3c63bcfb4f4bda57542ca8d94b13cd1bb3965782aa680073552aafc4828342718c728b917fe398887d81387d61ccba0fa16bf84379c395c146c882413013c7400b3680f77f4c258d67d40f8c78bf389223c74349bc03bc98dbb8a01b037320d18154a21597ad09d0dacc36ecd914ce0cff533e7abb4ffd60dda2113c44c8d58eb677f9d30f2ecab79e11b487ccf405e5feb6f3bfbdd0e182152dde8a3a3d6fde72458e1a2ef9f2ac7a4c914398876485e8986a010cadef6448020eef2ff775287c6668d03e3309163825d60a87f4735485a3aa26ee0fb06f41c9a95269216fd69d838fdf8507955d9e438ac3df64babb9d7dbb17ac1eaa0bc729b89a31e1e54f9d440c2d4c9b20e8754fb556e9fec220f7cea5bd8d0167a1a1ca42b1cf5f60fb4450e6a4da17312184f05faaedeb12ec5c3f70ffdbe16f9798554f7e8bc568425950252b79a4516f95cf91a933523288947725c4dce548577472e8e9ad38838ca6ebd2a96f6a063a6e93533a025cab5a671fccf6da367c47fdc813da7ce23b41f1caf4080590dbebd8e5ab45a43004cc9ddf6b7c1bfb93d1fa00da3941eb17c90394932f833e55e89b6da3b35ff8c545fd5e0c3ee85d135c35c145ee457b9f8ca4f2b706319efe9a7fd2426a7cd9772d5045b6248884864f74b45be2cdb85cf39b8c697556d55d694cbd905342fda1eb5e3b721645977314808124fb24cdd564b209b0643c0efabec9d59656fb8ccbe9efe947fc65bf631221cfa82291e09248af1295bb296f5effbfc35b5cedad7d8ecbf73dbe3123ddb11e46f0405b1a1c085b4e1f6266201096f72ee74b62894042b90c5c44f1ec6959418f033bcba2fa0a7e6656413b4a98e936bf430da0489b6d83d0ad76ed418f725052e9fd29a1b4b8e0014241ef157f62471e7688ef111777efed373d6c4bd8641436ab6cbd3ed37948c8ec48cca84c67f1f288a6990c3ac9c608027fb831cb9855e45072cea2deb480625b3f182c8762fbe3824de5638fc9cfcc1726171cf174db04e0f6a5f45dd34e79970f1cc8b9ba2e9b6b671a3b9be0d4de7d18d234d0616d3d64df8b5dd93d7bb2a99e20a569d752bf4bdb81bfe8769be93c3f30a0f2c8d537e217c605d95acfb798d66cea1f212ffa2b916214fdf4ee935d817b89df0fd99b65859e13e59211306c9e47c063008cf11271056562c09384e7c8f9161da04211f2115daf854d0bc42eddfb4fbedc324f0863b1d8a0445265e2fbf47036e1d74093a3490342f3831ce57dcebeb71deaba154faf953ee7f5de5702b2beb23c62d14f23ac34a3ec42e099650936d72b7ada421d48c5c41042964dc57c291718a96b2f79cc6d31a010b7527df3dea46eaa5996b5c190ba290336cc2b99d9efdc76b7398ef2d47278b44919add6dfa84f44dc1aff651da999fe65dc1e53f5c1f28f5d77486591f0daf83ff5ddf8606b340e0ed4e47b9519c8fccc8686f0a616c1bc04f1906fcd332fa241eff5a38a7486d294ce4a4a1f901ec413d149b91375b1c754ae4f56b0c1e07bf60edd1d854bae5619101b1be4980320e1c650f665662a76f7b66b636124534b075a7eae7878126343a03d360cb8dfd6de6b83efc37194939211cede09e4f2da1bdbbea08b831cc0ba889ae3be791aafb3cacaeb561f57e4d0c85e0fcf8724efdb9a8639e8f5333727d0186a22611c7308eb0e3445f7db3256e1053ddc975054ef9ebfc3b456be8e327ea11261fa4dea84d43510b9828944cf67a9b2579ce0cffeef4f841a2c278e829c1c25a3cc16dbd08f29c8da46c7e4e15f34b4691c3b29b09620c54001d5ffc03170e90f5ddd109424d0a3cfcdfed834d38d8c3aa1c92aaf9a18cd4e5c30a9934687a7ce380b4f779914ebc19f97e971ca9c82f1b2f299a00321e66dc6a053a4e248a607e2096121f8dce6d742f8df404d49ddb7d81e3f2eda2256c5c68dc79b0d9b30e3e43e0e3b490fde3a408b8248637ce7b399b5e5ff2602667de45fcb1fcf688b8ac7111d6d9297191121b79a32141de60e801f51bbefab5ebda87e28d83197002313ec585edd5be0856be3eea5681423ef12c44c0b3d0486af9b53a66f3a11d7d74e3685b731437abea879474a6849e67fd90d9d9719f5257844440c8cf3bc58cd02566d1f973731e35fe06dc91ba577e55c600e068a6685432bba24d66281cb2eb6b6d83f151f4b1d198028c98a0e1d4a23266500993fec36d91eb4f691497721f3bd8ebfb6e311935dc140f2bb6d21d6b7c86b2f4d68a379d5d6859388faa5cf40d356467f6ccb6eb30b7ceeb8abcbb09face838aecaf235a74c5f564e7d9d5f2560f97c7aa0c1d5a3c6a56289ae6301633ca4c6c44b2092d8e609e7eabba7fa2acc400aae683af1b65a83f9346031f08cdf667f98d477b7ef0e4ded679b0bc8d880f09823ad80e9732fde59c3a87da6a1fcf70b314e3dcd742bf111ca0410f0b6e2d4cde255d9e663ad7e2a3d6d8e4b2afd2013979fbbfbf0a4befa1de0ff9b4d5bb352f2498e100c3d2b15ab99ad06af49a73fd3b1396aeae37c50681620f0235454ce5b72e68ef845acc1141322ffb9485436ec6aff41ea4ff3bdb18ebb18c23380ea26b72b89af2fcad880c3355fcf62f1a1eab454a97850eae70230183ab261ff4e5affa328b7614dfff8912e4e7aff4427d67682ca1d4e2b7662e47f7f794799a1ff3498949a45fde0826554f341871771b798cfcb60b17c13da92370fa14c168c1e3d50f4e041a1232927f077ac623026950184d5cae2a66670228911b2d73db6bd0214710fbf0370f2bf4a0143f857ef789be80fe24771162e7cbdad3252d7c8e76b2b33b126e96de715aaba8fb25674694d45a23049a4cc1c881b0dab24ac69a160df614dde1cc50f1258ca17f6f45c6fffe1b53c50092f412fea56a4b58442f5c976246c4f641e729c9b58632df850939906718fc566e8a55774b3a66d27faea8e39a395e18821199cbd8cfcc02bf7dc04fafeb00e849e50e9ff4a38b45d3a8897700750fc52750bfb048f691555fa5226058327952bfa4bced443e2f2edaad8cc6377250888c2509fb98932963e00fde871287dc122a39dec3bc72c8fa0f1e116591c9d6df3b2f17223a1e0aaadb2e632841739f933424e2d7bfe9ff33eb8ac5b9c1d3f935bebf55b8c00fab86bb814ed8875e3a7247f6778de0fc2868fa63f8572a394e2881564413ace082a41b98fffc36d0332be01eeb4aa221db15a64a47a24d623c341d9470e76329367f45d60527e242202c971eecb286139da6999e324f9dd749c4fdfa5a9885422d74f4d8ecd00c5c77f0d766ca4a0f29d6b82ee02693be10fd67bce86fab85d3de21931215793767b1152b972275afdd1ca6e0b0b3330097dda8b4ef2e94e756cf019b022da7d5fc5205fe2073c9dab5e61f5970569227e450f4709f25e91c338691873983d07aa2d14fd9834cbb323cb96de3bf9f35767efdc79a48d41ca7028b5de228b68797c3b55f48300bce28ea0d3f39eeeb918ed03abe7cacc7a42a3c53c336403421b00784b0c4c73f77314667ffa69eca2ac380ae35a21b5f13e859567dfe109b5345b6b5e0c9b9565aedca401bc43fc985d6f8ceb9a51538f093e229ca942a4a90eb89df7be176fecda0fe2c301d5248371bb0f2d6f03ab3aeaf5f4445b2fdd04ef3d947ce869087540d4a92c90c66e4931431d10a1dfc7db28d391c8bb4fbbaf2012da57533968e929547fa433bfe2d3e5303dfcf78cae5b0cff838e924b4692e960f7eec72e982edbb7ef93b0688709d5a9f8593bb368a0dea15200a7ca8695914f71ab0cf09f2e9f247e61d06865d348d7d49033fbfe94e6e38485c47584a16206d2f5e92885cfbcc3b6775b68841a88e15b07a80d771e6beba384aff4479ca2aea133277e53fb7cbd1e3b190fedc4dbf015276190db25b7e1376731eed7709a6e67cf8e991099253a3e16d206a7bb8a2c8958282d329310eec695120c3d03926fab30e622c49100619f714df4bae5dcbc3f03c38c854fbf3ada761af5803fd2d8f5bef7c077cb555bc8b253822f2c1bc9bf8efb54db410becfa721151a80aa1d2cee1891c322e6c504143ac580d778d7a9263982d3d513e2caff1becabe4e4985bc0163ddfca48c67938a201d5cad7cf83fe862c1b2679f247f5bea06c8f2101849864eacde15fec845f1777924b82e6a4e8721b5426b75f9f5185dadd1de3fb4fdd81231df670b9cdfde78166e7fecf947a79cb4f54509d6 +MD = d440079d982249c51971bc2035b6dd4594766485424563d0e4d6822b26d385c9b415702dd7aaa6a1b4c180938c4d30b0ba63d09c57cb2312d49ddcb8b32602af + +Len = 82600 +Msg = 4ccdc1f4dd8a783bfc8e8aec74c836189d7ebbd2d3ef6dee28370809567244caf824aa66f9d9a56a4c08dcb5dd3dbfc3c8776032cacf857ef45bfb10a7522d77bc71f5f5039db13defc99a7b8f1a5195c049bbb0a24a0ff7482b2d97b43e320e027a49a6e31fc43c4d996b4671a71315eebc735744a634df8b6d47a9657e7b1831084f8381a704f0ce40f71f6b2c2ecbb898312c982b1bc025eaf04ba259311db0e3ae93c57c9ce0db85e70d65f0ca3f87a49c398623ed217e6ad18753197ca3e9d30fde98e8b295da31e319473c0dfac4a95d85f7d4d18bfeb592646004833443a01a6de0316f95350c924af9582283d56f1b18d187f0850d92daebb1636f572611764787a0fa6a52de9da8648c2f6224be7ffbfe85719713ca51222e7d6795faf0cc74737d7c9b9b6fab3b6e205d20175e313564137d497825a013c09c94742803c3fd8e101cb17687650c005bd3441816d8ceed7c3c24a46b6fc64d061e7e161304e9bea003334ded73220386ba568eb01ccf8006d5afff646541be042c3b2de73640ed7758a9876a7c855de939dee1f2a73f04fb7172f2d82b8efcdee632d549020b02db449c8cc6283ef8cc796578a51e2663a137f6e38e69b5eedc75eb77ff1051e515ef93c4c92154ba77a172bd912c8c844150c23b4fc6bc7b4601ee79d2071a7e6d8016973a0ccf8d31da8e177d777a4f22e35f63e3eaad8d63b1c4458a906eb52a1fad6de394b858444c40ee32a7f7ac8e1953c1127e8f0b7caef441ef52567296f6e1ae8a5f1603f61e10ab79650c83cb1a28bfa42a6bdcd92006d7c8f6d99df72a39c2f815f175907986b41859c0bc220d65c4609548eac22e826edf23001e96e63e11f55f519859842b72d72a1b3fdb1a93370f682e1c7f00f16dfa82d2ddbb50760449e53f539b68864d808025f43e6b3982794a265a57bfdb3ee2ba57c2ae906b01bb4ec28e9c4c20aed905e7c49325df0c66e4368c9493c6485f7497b6b6cfa5711442e331a6597ffbac5f689521730e3d9ede699a7ca33cf339589b9f1c35abbd1c6ba925ffb62d9ebf36b051317b4c7de8dfc46d5818c4a7370d6a6729e9044b9b6e1c50ef8db2fdda33c8de0b6524340e8f51eb6f19e7cc223c0cf422143b8559f6449bc0039482c7fdb726f75a1bcad69717fd0bcf2bcac28c8a3052ddd5d21da92aeeb8425d934d3d850f3d82bba7099f1e8c72621b0adfa6eb01006d5c99b12fd5322172949a339b3b8324048b346f4e6f7eedf93cf24131375173eb5844db314d4d41bac2fe42bee069f50813d7cf4d11bdc4bc18ebafd67607f4804f3a64579b2961436e27424f7ca8f9b8dcf9f2430c2f3fd4365ef33db10bcb54cbe31448c6adc835207dfbf5182a753a6d03a1d969bea6691eb1d30df045408e53a7b2add6c0c0b761683459bad6b4b64e5ba2b72f5140a2594e18ef399d9b5770ee082dd44c8ff1b750b7236d94fd55086bbd8466cf56a86e9b8a8a96fb23d6a820dc71c7387e0cad9d4afa364c973e229abce9162230a3e502f0870e47213486a5f720b76cd530c8b7b6861fe6cb9b244f658d483116ba47e9138da969dd988fe521e3accfdc849206c2702f4be19197f4821904e450151ababc4570499f2b4d492162af4bdb3192f338606e61214a02f0d934502325dde9dcb1566acfaf144737c144c7c7195e50e4defde511d2eeedab338736d6df3a39b7bb6aa0e4547c0518c732fd2cdf3455427ef09b443ea4e08d57b9bde5c45394b3a126186ed88b1055fcd3586075db2876dee098e0ab9564fe0f73ed381d5181382d34dc568168ef5428d0e04c237a51e6c776e5ce62e90066215dcfb8315b89ae253cf485983c2a7f13d09dd8313a59fc005a89f7abc73d2d561e6a4b4a9a327d52e566e2642e4a3d847c98ede642c71f53338c42cd57a2bb765fc7daae36070d7cd83c542f67d6f5457cd8718bbb23b686aaf79612c3b77849c7ec4ea6568dc76abd7ec53f0f56111c77654e68ccf62b6266d1ddc03004cd96ffe38d7a224e11e63b321cde4d52f8d215486ac59ec6e5af1022fe20c8122027aeb48172c3d154b6fa6241524953122fff88afea581e4c354ff3e17ab368dac27d6510d6619ef9a3a3151be32ce0c7fadd2d031e2383c8bbcc4b6e16198e6430140024ed233e6675de5494db1e827ffd564050ab277fc10b2e328d3b210d24391a8ca400323805f45226938046c0a2fe13c77dd78b999feb1eb02633f36c84a438127857b6143de8a893011ccd2298c6bccd72eb785aca2444ce2144b833eb3b1599883ad65b751887a3c4f5da30c91df857172e1548ab7e479366b798ebc1c45a29bcf1ba94174d985fc55396739eca6f6f54ea8beda8c0d008ddd4ba1b6d08aecafcc38b478a4f83ceec8029727d97ca1c116501d12ab486336fe2474b59cfba8530fa71fc36e6eff822c3bab5cf4ab16736e9a07a9a20121e022b6603ece1256140dc933c83da84e64d6371c5fdaccb56abbc8f725ecd1bd17ff540cc8e05986714b21a8ed9f2eb9f56a977296d85c1f45826f741e0834a52cf89fd2da705bb9e94c32d7ba0f7cc2b26ddf469899d3a462571006d860947abd82fc4af9fa7350ea959f58a40b2ce93a4470f0eb8bbdf56fbe3d180ba29b9e4842ebdd8dfb4afbf39ba9a4321e89adeb72ef19f61a9582bc0c69302e3a94803bad01133cdf3d0ba2d2f432eab64d81449dcc2a4ee2d4ccd5e606d7968529d12625be845d22e41066e0018d447ed2f3e4197a9a6c6106445bbfa886fb3ec601863186998572ba9abe37542bc5b4a476386a8ce2c5119479ac1db0c6b2b3f391ea74fbdb3c2b3b1b273d6e96e5144c98b02575abef7129dd4564d20f63812ce2b15480b1e7c8e0122086a34738fa35dbe9ceb75e420c110fc6496ec97422fca47954a7c62ee844003897a4c527f2faa053cae462734f04618d2ff99d6b15cd37a0f9e38067f5d165ddd4e599387af5967cae6f60e9b65e73388d04f3bee6291cd6b8d669296e02d39ee2e82bf11ed11ed2fdcac22bde99c526e51354f5f09ae47915d2f8e9dd72a9ea362ef5d84af7b9e51d891e903430d7f6cca74996d18cff16a56ba83fb08b895e431c9f548be3f821921cdedd33de1c16a8233a180599ed1dcc230f9183b7d2599e5380fc5e204a16f0187b6969dc02150c29bf00192c3f2d0e7b8765c3a2156aac4633463e272043cbee8cab52c54a506d2d40d568ce6592f0f7b842fcc4d30001773eb8a8832b266a117b396b2425774fa0580e90fae10df80a0aaf9b8a9bc81258fbda29aecb3d7f23cf9a3f7353f838257d221e3c31eca82507122c7dc011638e03113e1471075f9812243c2d36419b1f18a65cfce8bd65fb35f12c18f07a8968ecf4525ecd02afe0cb8dddcc4ce1fd0fb301f9c775fed5df0fe316e69d71d88c01fa02e83fbdd480543db0eb1857e279f4db61265a3f6c630d6e89513785f569eaa8dc3b39a76209549a41e42921cfe036892f9415fd9e09a6d9d0034f2544851f772ae24b3dccee454a0d41efce39d4f091b19b2997ef4574db975754ee6a6018eb8b57f51f99a19eb37faeecbba4bacb8b93a615bcd498efea5bd7e93fcb7d5f8c8a16c79b4cb5c97d1565907885242fed423f5acae296806c8a0f6c97dc4f6bc08399235f5abd7ded6b208b937f83862d49d179509da0def89e585f953158c62e2479a8ca480af4baed4a2e9ae86b66d21706f1cc6a5a4415256d42a65f2be73bd912b87aa930f63c184d09dd543e6a52364a44ccdd255828ab98b649ba3b47601e1ee2ced2c1db0788c3adf9479ee9442405f2a06a94a3c98d752afdd6f97f315fd8b85569301b939b387b6d36ef6c2e7ce47c05972a8f6e678cf1413a08f7263ada99acd0fe4066dc0602b7a6c27b678d40515af749a39db63ad9a257cc37c52bbf0713be9ee207d7c6c4471b9a8f85f1b4031eef8468cdf62924afb4c5c984aed0a14866a468ecfaf540ba09da210026ba11d0046d4775a3b272a7e57814fb30d9c8b98d715d8cd20bf88f0623d87cb8cd0e0cba66d82b4b7134594e75b28f6e151dc577b8287de9956c2474ea0e32145748239603936569efea0264212ab7932ce11ad9db62269e0c1c18fabf4af6b5f350c31bb5f1aa6b892451db1cd60a5c7be328184d831d8bfa78daebf607013a3bd859a0007b70dcd743b5f7cb4d0e26ac745ba79113c92fbb02f8ed30db080d6b1f55e785b93f4a44f8ad6ebf08299e1915442c489ccff5f85ae152e23f61ac3bc6464688038c106c93b6846a9fe30f5c56600ad676887b2ce122d1ac9cb493184db941ba12edebb8a54ffd406cd116e0b84dc7cd49992bb3263bddd27b675e7b161d6d8e4fbb18b3be082de3076a2140ab5be78f7e688435aaaacc0663f06aeecff12e67129a43e84e4d9ac4f814daf6b018eeaf9d7d112eeefe40baeee644eddbc308e71401d9b0c6aec868a777906d570341a01f4d5f095384c06264cf78f2ba018180cc6866b7c79a3b409df8de2f10b995038c6fda5f78fccf9f7e028397eb3b3cc694546767b1ae67df541f30b67d9a3d4c5d4aff8bdfb4c2b48325d1380fee7f1b144c584b2549d2b76251249dee23bedd1a654b38f85b4e542cbffe6d7889dd10b4c6b5dc92fb004b3145264ff2f4ae584c5559c1433ec6f0d32777a2b59beb2a0e4a0c867b30751d5961b2371c7b60205b8187cf50fdd11d0ef2c97257a30dd9894cc8f34e98a590331d54fdcb3698d7d07071ada216d13b48b85056cf2dd9a1ae45778dad82266666fe8b0eaf949cd133b8940697085bce08dec8ba9c9ab314e5da94cfe88b5be26d7bd0e41a3400cf0db05b44d040e557c7dc8f3840884e95d862ad24b022caa6af1ba3189b835903b6fe53f2ce5ee26b2e48003a4b64f0b6fe743d4664d70725a4648e16b410fa31d8090a9af1c0f77a8497e84b2dbf4dfab095a18fa71685e1f5dd0e58e45b88bbe956eba7daf57908634293d55805aad3a73d968ad77fbb6e1beb8069ccc17904536e73a3fa9b0b8752de9f836ab6bbd44ad268a276613c1c7f2690c3adf14fcdbeb63f09c0f01399dbd267bfd670e56f040ab46114697c8fa804cbf12849715a73d4aa53deb3259256b488f51b92bc266b3ce6613206e13a2f0c8e6ccc58825d2b30421c9442a6135c0b7fcdaabab47cf8ef9b0d4fb82eae5cb444b10aacf7283d6f92ce923d399f743dc8a4144742e535a93eefddfba95ee982ab4843a5545e32c928e458f1448917c1d012e8c6fbf199e04e635d4fe5be3dfe1ead37d00e51a3f350e8490d5b72bf3e328488c84414ae2b36125e33686ed29d1b5a37bb99c4f974b764e2efe2fee3197c8384b9cfe0daf0a2675134a5c33fc62dc9d3d69b0aaba3d8c4d7278f601bd9fa9a5d19d3c8b8b70ffcc6d2326dee3fc2968caf66a54327119266329548d1f659338277144eb014db2d2f7a72b15630762ac2a4a12758751e4840afa93bae04f4e9954fe5e56960a0830bbbfb50106eb5013664bf0343f44b70d6dd3faaf87c7a16f602ed1f4d40dc98ec1540ac95310bb4385e34bbae4b15869969dd0959c34566354e7e7ec42bfbd930f4c7397d2df6be48ff96d2ffd0290418d3e5e93a7fe331c3713e6676888abe8af9138900cbe279f8d749cba139e273d58a0ecd2318c01431199178ccfd15d35a909a1de8816b81c863e2183adede50401a9c17ac148877feb61c284fe009921039ef6a9ce50e702823e44b35357923f904327b2e0998f79cc532f767d7f2854c7377e1867d27af9895c4c728e44f5950b5564a215e7dfd8bc57a58bd5b4d277fdbb8254da0639aba48083e7e41cd7af7cc7c173e89b4145c3556eeb8d095e32ab144a85af53eebdda922f3bdf470034ea81864de11b7a68ea35d0bd2de4962cdb291ed16f205fda347a9995072d38cd5e6afb5789d055e838df142a3eaf400e94e24663a1d755a8b820091ee3374722df6c68ba6722996eb63b815947d1257fdf270961cddf98cf706dc6fefbcbf4da756e149d047a0da16a326172d0b20d28c3e0b1f47ca0f0f864471a5cd753089e28594829e63e7b2a5eaafa9f61bac0b048f58443348225cb9b984b6000354c1501134c8697d8a9b09a8c9606835105c1764ecb7780edfeef1d46a234fddb85e8078568db9fae5fdc24c17bcfbddfa50056d4cdb7e549450df23a67fd56ab7ebe4397e450842a67560630f12398cc6917ef6dd42cedfec0cc235de2e6940ffe40bb32070fd0b288c548c0422a9b8016ae490226fd1f7438d5b6965b143e6ecc16793c1a3d0ab089d1f05bb40b4e64776c6d7c0c53031374cfb6cc19b2dc2fb1e7859f6505bb8b332308e891ef39de53fa62c1ce5622443e6328e965e6f6bc755be541308d6aab4e63974e1ffde55771ff30bbb42d036d5c3916d487d8157ce01ba30cc3fd9f78a239a677a75ed9389a24e05006012ff897f88775c7b2c0d7b9cfc7e6657ee35af64b3c4a70399de79611796a0bf92c4bb74884b46c998035ca1f57b96038bcb9134461afc4b7bace2d6d03f00c3e84d084d31479c0b7dcfed9b15d6cfa52b5fdc2ca1d8ee900b75327e187ca51f7beedc63e3fac09345c9aaf30e0e77cf4538ec98579cf283b1ce04b140be0224d630c44340d35903888721442e9122e4820d4f01f7c5bc99072dc62af9a1ac768fa94c75b87fc9deae9ecd08f7fd55773a338013d2f1814283faf34593960876f0bed175bb4ea78720671aac0aa1840a06420c28a98ef512b0ec089bbf29aac8b1f7efcdd9de568f9676a6b7d72c332f5ecf5fdabc1c8c7c16479297cccb07ce3bdb13e8948d6b6a7953ddb6de0be739ac220784bb28cbf10cb41dc45d08a40a06deda406bfa6aba31754c239fbf14bb86e07fc1072218143ca8069be04103fe9b79bf7fd0a3b8d167515e889cc440477791450a208715580ea9f998e722bc3e72421ff152f7fa42738ea150359a0e5fe6aae3eaa7f6383efb104345e22c112c13be884f738593affe73a1052aceb3576c93c8cd0dcde52baa91802d51abb75a084584e4a2cb095c50a6ca21ccd0f3d061f2803bb29cc0c065a43ca9c640234ac88d924b7146efea22aea930ac2f245d7f2d96b146e14f7fe4bee565a087d970cced4d0e6f77abdbece1babc3957e9411cdb78c82b19e5bc7047f6cb80c13e6e9dfaf187eddbc1a407e67b1f04e9974db352a2daefc52828c0d60d55e7aae686a41d4c528cf1c5d50c2366f38f32d2b5db49a183f5618b373eff759f3593566b87ea99f8bd382cd1823f0ab448e2102c0d16f13dec8d835a431aebf20b28f28fa1e986d50f4d6b3bd28fd2ebb265d412c1511e733587a51485becd18c8ca6f659a708f91e3700576a5ac6c046c4c930c806e95ce510e64f87f51855dfef6118fda361099ea6e801453fb1288d6f4d17bd2e5d399df8047788889c14c3e4a8d50d990a66774877f976612730372fd13d3215d6480217bd10749bdfd6de716377b2126dd8522593862648919eed0c3deb5041bd4fbd75f76472b74962d8a17a441395f126d74625f27d7a553b560f79693f3c7817751a9bb9ab6342825a79d68559aafe1aadb21683a281ddcf1b3f6dff268e7168d30f9258472732fc0c035d81abd9fc7a7d714c82bee58f22e3a502f52dbd0e097f5bc2896d8b81999546f88232ab530fee8cb137f82cd5fb57471e927e53b9c420061594451897219e4a90ce15a76ca1a90a2ce979e016241e2faa1f3ed8d95f5e1972c0f855dd5cce180bae7d56adf855f3a4e16888b963e1658fe498d2d5a3e39bc056aecbb912ceb7536a923e7fdb9b500368eead288148efb329b2cb17585494e99e8e00940a452f4e4a7be94b13232830c433d6ca46fad70036b44a06465c0cd4e0c17ed70ddc89e69661df77699483133d5e8b0779a0255d52c7d80a34a10c69646fcde8e33bcc02956ba66da29769941d985547e4e1dfb1c713fc8beccb9b9071be73315409008990c2c89389d3e39baa08baf24d660fe6dbbf3ef13483c23151d9fa1828ee2d65cf8dcd53e5f1f8102ed744707dd7bce3d7f326a5d57188344ae6ea0726945c7d9af53b147d98b1dbef2c7b2a3cdbef9003d93d0d973cf581a50ec96517a095b939229c3d1a7114e43630e686511aafd5a6960a92418c1101aa78219ac3bdde01f33b773884232c144a0a0ded863d049a0955159c9d0be59aa04d790ef291413d1269556c8357fe5175e378c8a1ecf6c7753ce794715f7835d1b45a296cc4c555dcd3bd41dfb59484fde3b07d6bce8e44307307e08630d2bb83d64b53f8ff72319aa2371f5fe4f5962b313c76ac8cd3f98223fdeaa427fc12ffdad4f460ea51ba93fd4b6ecd8d296d47f6a4192ccdcecfb574521992ebfd248de97d746a2c69d6110d8296ef5739f3995971d0b23a85ac108d8dd41a25ddd7742bcf3bdf6dc36e5af963ff8deb2c0e68832a02087b027ada973685027da515fec751b18657656bb7ea771271f00aa8fe9c5716f4374d1f5cb9d693139a5cc571e68c3e299059b370084435620fdba8a1cb80763f166c85de1cf46615250acf16af064b8ec0a730cd7a54d127f0a8f69a382e89b1c26992a7e71866d0c5b71a354b493e7e9055c816692f4f893a787a310ce8b711e04b300143cafb0c236c9016e1dd81c1a76d6592fc5b155096541cad6f3768291b1b463258938d90e73118009a487a1faff6ee8a5c628d44ab43c45888a204bf18e0bb834dfa8425b80c9a3d9e1493604df94b46b0cc1e2c224d5a7880b1f39c82a2793c4b8848933e07ff1314c8334b2b7d640e211f2fd2a27ac6567eec9e88ff6a67a579c341a222292dcb24edc1aaf18a212ad7e52afcd4d3f03aabdc6b4a373f6d060035d7190c7a0dacf80aa74347286ae1f9a576735f5fc06b2f08c3acd42973a6076673c2a3038700b5a74cded360277db0e87bffed271f3331f80f747b3061ceb7dd7b6390cb840d864d1845403940442335a1672331f3d8d935b56bd65d1fc6382259c57bdaea1d9182733f34bc9d7f7b145075ab8726a350461f598db796d6b1bd73b00a39a376fed1c59357f02675df0df0ef2d319edcbeb3b3064846ac464a3733ece8ef9560f6bf760a53ddc47078a9e99e503545cb4b05db39ae134a5d2d160040bb04aa25a1d6ee6ccd8b5db66d6fa34abd9d01b81dc3febc672559647fe541752c81c80c269d96817003da90e7e887bb1c71bcea5f7583551c85bfa36b296053e26dd95cad9cd410e14c24460e9afbb814b75daa37a4d4cd75396662166cc4a286d0c45e605c11e3cb6e2120090f680b4d79cc40cdd758eb194b34e9ab35d52abfb3715a6564b6c0d472bb6601cf377a70bef1f44a967779b1c2137f500dfbb3361dc897e43c2970a45fd95f1d60cece258fb40dd669993de4a7ea6e2d7b9e049216b15f066dd4bbe43d6354864c97ce13f3fdd598d926015b01a0fc6c0726e67ca614f8f27e1e683c14408d631bf844e3f2b492b96d868bbdd81f723239fb219cd6d9abd1f76e4153ed5a52dd535bf63c94c18d60ae22a3b3354e18aa9a857d99ade8c0cb612e0cd2cf98eb1c7e27aec7e20c0eb6226013e51f1535f9b12dc21c33297f0743c59260c3e29f4723c4322ce37d5de353a9a2fa9e5c124a0659b7cc718530ae259b9ba6d020b887cb9a4a129ffdc10ec966179bba0bf8c3227225526ee21ae78f18ef4cfe3a7c03fd11c0211f7284600afd3b6f7c0b2d8c8ce1d455332a86db0aa455f9551934e441915b026ac6ec00a0d8d61feb42f9cecc0d8c7ec643bcb21da79655dea327511f82e25d88df4216135db0520f99a6b16b5d15753117049351897a09a0c19f73204c1ed982a7cdcce9f690b1f1f87b5cf03b36e17c8ca6a62db2c9bda35ce271cb57d71f5f04d748ac0a3fe39848bff8e30eb96aad8ce915398a4b18f05a3974a90bd4d727e0a6b2e30086910c6fbbaccd3d64b9cefe1705fd7ac8c38ea5eca440d1dfa8e322833317422b635657b7a135320076e6c976a002e80766852343281b0fbe3a9ab2b6f3cf37f6007de6fafea3545449fed74f0ecf3dd1a8debe8629bf2e3a36547887199347b1118906ceec9f0b2ad81d0fe977ece2ee31a05cfcceb6971b44195b3ecdebda223d839e7993b2bf48ce4b598e02e23d26aad3e7ee4087b1290bf24622396058132d7296441a63d877d1909d84d738b841bb8046a4a6bae32c34e61e7c82792a4a895ed677aa3bbe7f89f5c3141f76ba060bae616629d797eb66fecc94d3bfb68ff850455a6ac1da28a081b4860225aa3e4365207cf167342f4a4138b252b965ac224ecd35837d923abb3d5622a7ccf2b10aad6b2d25f222c088b74a1e27ef9f67b063554f1cf74f7c852f923037f3f927098f2ac3eefec866c768eb1f7be9cd8a4a94c6f15eb87ab7a36151f7d9222768e8124584731590e9af5d01ff763055db97eb0663714779b3c0db79c0b6e2e43b4e3fa4b9ddbee110e99d75043f4ba123406ffeed7c2cb63882a3f3d3f5ba986ae31c30a9538223a41d303077ffc21729ec2896d7a7f0970e91c3a878c033abbb50b4cf9efee7bf6ef21f19a0dd1e21b7441fb7681c1a86fc96437ff73cd386f73d0c6ade05771b33117117c602e52693f05b47e90032eacc39295f9793258fe6512eeab291baa0be222e143295a28e8697e42fa27ec02b44217f32a1edae2f4f35213562ca37b6d6cc5ef72dbfdac058e1c358dbbb4db12df74ddf5d71f8cefb91ed3536d776c642b70aa8fda81726d178ffa9dce260e34e62994e13488ad5b30c9bd076e1ff36cb8c3a0eea77e027b901a009ec19822b710b6d670b99ecaa3d4e31f0690f5b7039f3f4133e55be2bd727af6255883af05c99d0128c8da7b76100ba7c588a11da5493429e3f69389af48f339b5d59109bd8b5cb37e04c4263e9ca3b5c8b79a9dee3152b9837dcd6ddd8e4349c4db18c92ad0764be4dfd45159b53be784a05abe3b020b8e76cd5205a4bccbb4d6dbb373ea336a58f1cc9383741444ab8dd56a051815def74277d9f7a15efce96049c980782eb969295d7a430a144e8048b93108f1f74da27affbdaa5fdf7785f5c7f385611cd3eb0ff50116884fc9f449ee58107520c81e84e785944cd89be90bb8a9d911985a5cfa45b0547b11377605c737d20e1cdeaa04a1ca5bd4b50aa116ae5512262bad3d8ca210a35f23278400e668b4296611f35ec0e457a40f143cab1b9dc6fb415d1b4bac9a79a0d01abccfbe534d5376d28917c77c1e1731791a3d72ec4e2d73ea649bc7c65decb2717ed6d19fe418d9c0b9a427ea25cae689d85266b93e192dc5a811762ca69f44dc489aa2973ef6093d23a854c6f52b78c6e56e499d0d6af97f64315a260a3501abb89fb3e1b4578fd85588f08b02b572c0c005adf0428f4198076fc65aff5a63703d6a8807dac9c802adca6dbee4e56f08069d066b63f2a07030415d23ec5c04ba456f916218d96c4cbad13edaf257c7fd17b8d556e83190c84d4a812957c64ffa7f336298f4e2c726fb51e657e179182071cdbd5b55c88ce0dcefd4c3c835bfb1394a6e0505927321fdb0e6ce08c5ca02b36000e113240f5a5da5ba9bc406de6f0219264eb144eabe2072d295feca68244b045270d6d0a2a55e00c519b1d6169478142dce8e96b86c021c1c582a037cf5a72f2492e75ac1524c8566b6481012b1f9efe71d03f446ac1121367d10ed73076644f9bfeb2ee5d1a7a821f9cd413d5805f0e4b297da300eec06b38d59f4e4d9e6ea446048d9aaa3fdfd797cd7d600e72acb9917e0d4ef04e14116015bb63cddd783871c86c76a69cdd9ff87ee6b07ffe6d496c54560de1e9f64c061acbe059386a5445d3b84cf7385d206d3876cbcf2b8a040335c0aa7cc84f65526a358b98b92c40eaacdae2451b48a41b829578a702ec337fa8b3eb68f205a46d8f632c3367a64487db3800394e84712de4ab81af89791d0736979a4d6f02517f11bb8dd14ac1a844e93c707ad8fbcfc9e620ac8eca1a0cc465d47dd5482cb4af76a7751b6b63b34a5d4df9b1c1930818115dc2edcdb846ddc0d25da6846d1526488eabb8d175aec1bfd2628612366341ecc88a739839147bccfa01682bacbb0c0ed8f85184e0e1d1983574a0d2cb276c00cacec93587bec613b233c446d1ef8851ec248e8d8a94a06eddf7a8093a9dc3d3cc5496ac888ce51c63b961dcc3f9c29834f716f35d0f59cc32b345bf6b0d6bef34e5830326c6016f765ce9f56c21e36b173992be409922379c6f20fd45be8fdc6b49384447b3419551e40199b3af1352fdb1a9f71a7c233983f5e1cab2fa5520da485c77d59cce155e1953d180ea79d64e2804a5d5fe86594f0b2f2f9a07e545e8aa97a2b7c9cf7704c387a4bb1b3e7e73664bd058687020687ab233e32e68d3fc3693cfd5826d44aaa9451b4d8a89d3d23325808b020b14370913de76b7065080b5f505170fd003ba94343d1c7f835cd4573abe56137fbf2282fa383beae646dbf0684d65b71f3c9b4cfc12114254a1e1993391a1e5f4a992ab0e4a1a0f313c75ac92aea7c48377b59946a2141a232a62c2b80254be9158f04ef81bfc6d0ebbb6b41b30c57c233d7043baf60e511880bd9a701857e77e56a23160b3c74da64a06cfacdba72828153411ff15e52d5d2a5ce904db92a8e42b121dec1b65f72171cdc4edb8360fb98869ccbe0783f717b0a5771b53ee48eb5da6d9475abcb3a6b8735c85ce587bff1d773c9ed5cef6719b020c5e895111ba76c82f1778b6c95da8605f1d25f6b2215cc6294886b0749171da6f7584a5497afedfe5057e3a806fc8fc955cc6f9fd48cdbe5b632210b79fbd9569074cd039527b53c4b8732f2204a0b0c5ebb847a49cf9c89998b2d508c4049ac2bceabc296b778b94d95f7ff543b9e2b97103caef44674aad8f3ce9af27d053423e654f60ec79f11d0f4b1142559afc3797b06826699fae5defcb33f4f2a827b032c57328fe0aec26033ecd5062cb640805c60b90322a5a7260649b1f4a157ed643130fc7c9b1e4795c409b6991d584f4624d9a76c88fb8b48c110977599ec17a17560a8674f641dcc35963d30a3fc2c2564efd2052562eea18d9654547cb566556964ead28616c18e0920dd7f691883c8bcf1cd6f90826deafc597d13c24a65fa9dbc2840c7bcbf55af281bd7d543d28a6dbdfe0e52c0756f7db88635f321930b82e4e5349cbc73ada81a8cdc60f484f52772e853d4a391b98251e43d87c189f2a96da6106d9c9b10748684ffa4a137935adf10f2aea24f53bab42b9d08a0975a71c4ef76c2e37208a4eaa8a408e056df78410c4d39530ab8874dd0c6fe5557ad9c7925da3517a500a9c57c7c16186f5410573ed61d2c5072688d585dc146576659f8fdbd2cafb093038554ea44efed7bb3602d1fb2a4bcfbeef146c409fa031f6ac2bb921222112a42c8e6712dad5dc0c21a6baca242accf7b18009c20f6d7232f74f3eb9e053350d80e85a338f74ccdcce45eef548cac67ad703a38beb3603c187e4b3c28cfb38133a4d6e2ef4416fd543c8b6a51e9385ee698483c2bb62aa4c64d06063af80e45f64a4ec2c91a58d9d8a185a022feed0fc6deaf2900859307b97fd8dc5d04a019905d51c54ef09eddcab1b22330241704ced1f361d58825df52751821077c1576926c746cf95d3583bacbb56611ff52e85f00a97903647f8631cb6866b2c4dad75ce64b2c40b6d966197df3db30f73d04f7f935f11270fcb6c7f13e3fe7856cd680593a85cda3d6ff8736f205259221e54a1a2d4cab5439cb9574fdff2e2447de8d33c6fbf89adaba5495247658569e2395e1f40e0674934f1ac54c36ff37f869d41475014a02311122072fa151cb2e2a9bef2e97ec58a5bbd8609d79c316fb031569d9383a8096ae700b6818aa564e74aca0418ca586ed8c5ee5662a2267cc2491b24803628c67ecbf20623eba8e6b9c4893b14eca75e75b0eb23aea95a0f869096c55e52a8c21567fc4a2a60ada220c00480270d3bc0f827865801d8548ec2abd1697702b065f763296adc133dffe4e641bc97559afd2ad1c6dea4579c633f45d4f6116cc917eb667e4f8229df65ccdd4ad5adeb4e7ed357b39bdf4fbaf4c504a55675b87a40bb1805df63cd1c3ca24e27b5b1f8dfaabb605578f9e836ab1c904e6feb0f4c482d23c503c9257bed2ce0de42eba3d3e8a995b55d3c4999ef0b92d72bba99c6970a2cc6a4fa5984de333c7966a215b4a2679dda33ee9b6b275bb246702c7d709519de11a83f92bf787e09ff072075093fbb22cce0580532bdd497a52887e4d2ab24deadf9e0f8b523d7f0790fabec5b276ec9944ec2b078183eeafb3a14f5753ff1d7a27d25b2ed480499ee658ca231c1483c396373c3c4a06152518e1bd9e0bb4a6ff91e56e9ef4dceab66f10bbe13771023c309b5679fbd0578ae0ce4b79b85f54eb9c2bac4449cfdcfea9b6f6989b090253b27cec490d7f1031a9cb6b82f07ba1dea539a6c739b59ac804b02ca1cd58eeba8a507011f56ee9c9e26db0423a7638494b83e0804b4a9eb33e90a0a534cd31d126aa847d4a2c4eb4092 +MD = 97dd0fa2b0afe26af1ee630a4b1b0f7c075753a79e1f7303c0577d869d23f117c4a8611e845cc4065f6a85b9a2e0a684883236d6fa65cd772363f1a26ee85bdc + +Len = 83392 +Msg = 40021d58f36b960cb8bffa0798ec4acf50cdc63ab2ff6bdf49f0bbca3c38bc74742d43f201b1726cba4f80d12487b8c99665c5eb9a592c3195421aa8abcc606cddfcbcd474095aeaa36e9a1e683d143bb3b6da99ca18fc95ecb7523e344f7551c1980f68141a556eb943d1562ab7650cf0e78dac0be5e4f39477eaf3a16a040a6928c414a98d6be046f7ace1339cb3269521668c2568eb33d6a96a2eb9c4147f1dd56442fa09a42890b1b4274b950770ea8beea2e048193dfa755a594306ad9825c77659d037092ee09a6f91394a68d2364eac54042d76f9480443db08d7d73dc82582c1f3bfa1db7dda6785c762de34c391280b58c10b4f087ead1cd0e09b564f1710e12b487515b198246cbb86717ed77deb30a5a9df28810b1e8462c800cb02c7a923407a8bc5c2fc2cafde5d2a98bb3a7c29b390fa6afcd1207b88380f84295ad4eef9ffedd4f92f09b4f890106bb7ef63604a1c65ffc1fb3a6908d8cf690cfb1aab1f7ca3289e5943e5d1c62bdd12c4293b32f527cd18aff5b6ab4f4863f3d002c07a9cb3abf9a160a930a884d716e2552432c448be4915d7ca3946825825011496d20427435130ea67dfdd224209716f821431d1b99b576a0d7a648632ebb7d895ef5f06daf02e6989a40e0e04349800bd9ee3c9a5589a36e836525bd78d1ad725995359571cc2637648e34e07df808f3d9983386cc609c2c134b70931535198af978827a21e1462969303ec315251a469ccb827f52dc996013d3c99268485a399b2a878a33e4ded514c17ef6cd432c7ab012b9c28d7053a11198912a06add814db2585542c3958d0f3dc6609fae4b816afe84a2ed0be3375790457c864b82b9315f42c467f713c8382cb946b229c5590f8c6a3e2c108b133d6918dfc0709bd3af800ed0fa20f02934e298a98c8bc8d80073857acd2f26592a6eac44352151582edf647ee38753356b270a92171c7b84a67b7e5db8b0dc8e8665a6b2cfa6cccf1642ead80a74657646c2b7073a2607e8696cfdefd6dbd43cb817b132754633c0ce724be5572e4e732b7d4813ddef9489b20da9390df737ea2a4c73cb0f4aaeb3c0372dadb3ff35b4831e65bbe8c049f1e7272b42464e2c2143cc948586fa673153583939042d42c2b76eb50944e14ea772822a136a26dc686b5ebd68c09e83c1ef9f169034019f242d35e104d79acc33b9e64fb25fc86f470acc967da67e2decfcd26cba29c371624f3b90b48a33eb1e261b42290f7c0c4688dcc6cb20e28b39e2bae5c0cdbbe30584476b2246f3d2ee1fe8aa80608adbee4e57f65a1711c5300a1f27a906311a9433231a55f124aa2e0e1730bd3c3905c6c204cd3371540459dac9da7dbe6c4197c6954455740c9a635a6e7bea8ad2b2574dadf45d18f3703dbb7fa745dcb57e96a466912bb8f3cb176bb6340e329d0927581812e0f2363063160b36084854f91a355eabdea42364d1a9b602321be233c0490ed0c5e9646d5351332eceea91dcaae14437761fe38e1a7c388e5d2fe958aa8957d613e4c74e96d6c0379faab34ccf10e2e0fc137a71794c027f9755f99e6b81bbcbd2caa5fcb30b79fb84700473102afe4b776731347681de7ee8755c308d9802570b85479e325a281f8424ca79f5976123ef03500099839233597858349835f323c5fcf55d9c2a934ea8ae4e8606bfd30e6dcf1ffc6bbae645f14436d312c258d70817f76178e2832ef7f6d8c0cc0b1bb4f7b3e551738fa45db9c23e3485a6f71bdcbe94d14eecc06779e4b052cee103bf9897ec2639689222b7dab780784998954ad915d5a7af12a236611d6294aa51d455637aa446ae7a3df575ebde741305f05950c2970993418737536819a7cfce9d38ffd8f221ca22557b792077006c05d2120be33cff0014bd83a4da9e8eb642c248534e3a522252134fd09f72a4bc5fe47bf3c0ef0e5e55ed223ab91ad1c975eb8d4723a16220d41f7b60b0f8e86bdccd9feea1d6c015cabe1dff4db4f96f2ebf10c4a151d82b6f2007139a3155e1443583e5cd199c8d3cd97bd9e0958d0f37e6d8b00e723caaeabef9cfa74472865fc631c18de12a2f72e544b2b8e415135609edf5b32b17070ea25b7e1d5ac7c3f426b0682956f361368b80711eca1ae254d05879d8a5f0a9a3743407459addfecdfd08c4e99f7e8c4e7338fe5a6f23e4f8e22026c5084ff871db8d52672d3ba0b0f442bc14e5531983447441b4fab8810ce84de2c17bbc5c3f806d47cb3a6a1266b26437f44ffb6e9da63a22749361215689e8971526c03dd60bdcceb8eaf0bbb7e0791fcf06fdf564439489e164a72ca06ef82c0a32e203ff23e3cf786557026a26865bee31e115a0c0895e4492110ab03e8589e6c7ab168070883251d22651492b95d399f9303518c82189e54828234ea29896f10ca2df219cd5df8c59e60f1a98ad6f188671bf950165f20cac72e04442373b752a4fc4ac4cd2be70241ea3a614d717b2ff2c1adf135c8101e679a759c56d60b8493a2ee72a86b847585677b5481ab3b08ceaaebea70f1f0b1fc5e154d43fed038fec869cdef9b3572017f20fdc7e2b5a5731e3fa6584b2747fdcf7fe16b7ca9e27ec3291103398eaa2e77c7b770b67f8858c215af4c523822d484f1f34dcdfd137c29c8f673d504606517dc2c1ca4fd24180d0a7fdda5b7e5291537fd5b614e4e8f72a5d8b1ec2b375da5dac64c2cc30b19758a927c941b0153d6ae5a24e521e611246c525ded57b170c850105fbc459fd5821281b9cbc5f9fd6fb1a42ab7fc9cb9b578ddd8673e5136e5b894f7e21964e4b93ec805bb6d417e470e75ed5852b4d1ac57e5a1c83389188480ce752c92fccf917bcff0c1658a6ed30129ed54a8c1018f76045abecbdbbe3b551787fa66c9ee9136240b9c431747ba363a9b2b8363b1d57fb453898bcb7060821a80e9e94eda3f1a4ea69a7a7a81531a42874b670f7af4c1603cd6e7cad79ab441f069bf1e0b0174ba525a9046b44429bc2242b816c583e7b26715647c6c50482866f84c9a097ef1f1bf4b18ee48e3e1120c901b2c19f95f0572d386329717da38552416554e0dfe7f1dea88f3c7e8dcfea6b1f4b1f0cba3e3e08fc1900057c6ec3b6b90d2514516dd2eb744d9a99979ac7126d94ad28132d820a8bb1700a6bace9a3d6093bbaac776424fe112769c53d5fc7d3d4947a0984cc3bcb73a307b1259e217fa0bd5a58ce4f902e220a757d7e5b913955fb8b050dc3a4a5a7c184b6a18b399c1bd37dbd3a3c37edca6c4528276379875d0be16d8e104c0194f109e2e858f216c2a7aa4382d322214f75622ffe1e86a535eb06aad05a3bc8835c1f9dc1ac55d3dd5e695270bb58b3fa4c53f8cc35c07b25c582259b4a7ae0bc2a4d4ff62f68bcb4234252ca9de18c131aa0ed584f2ff274bedb45b688103387821c604d8a35b98f1cbeab5920c692e206d2756c15dcf06c009b71ebbb05a82c8c13388f65c4b3b57164c5e5ed0eafae3970f7ce2fce5e53b34913008b6226f272ba3f84671b906f4bbc0836abc1cac1db02dd47440d2572fe6e92bea22e97235999def339443a05d24fdd1303e8cb6113108e9ffca22b110a9156eda571e2056b397ba5834797bf2da4aa459d8a99d70923729e01945a78ff3ac7553f33efe1d0218063ec2a91e48544d89520af1e6be6c2f10cf8eb99ee04f24dbd167da6feb0d953f31cf70fbe01b5d0c8355f4164d27673b08cb0cfbc413f50efd256efa632ea5e1dbcb6f893ca81f9a983a3ea0cf4c6605363eae62bdfac38b11cc7b21f7edb07ab746d36ac072fbaffb38201a9753a20bd25a1c58106be6dcc9cd7d7b2bd34b863eb26b051e1487d916c056f847c5a1bb67bdd5406ddff5708f98e46a7177ed80fcae84eca8053a92857331ae532afba060da77b048df65e2cdbf4e746b33fcf75b8bcf85e0bd8a68c1b14eb13bfc06374820622c13d2beb02ec12a2d6ba02045e5ea89656aa60db8561b0ca584a157fca8203318616276450d1ef60a1534ce19163b710fa8772b2dbd110a0fafb3777ceb7a5909b407133df359307eda7a7cdd871ee4e92c7969255123b5342fbadb149c6f42848e291be77be078103de9a30f92d5739669554e3bdcd39cd7872ff97025af8dfd525106fdf1452b42b1fae73bd41f9b7be17350ed9a913f4e488b690c319ba9e893075ade1e07c8aad9269fcec55dcb1e175c079724fd0b2ce63590352ab414eae2c48df43ca8eead06056344e10091018d87e8d4f6678ee7d2e705a78b995d58a40126fce798fbbddb1fa83aa1b87baab68f5b23a9714903a0f84fcfdebbf1d659559c44a9687e71cacdf52ca1d5e99e24caf51f98aaa7f4d2e1c51a9e8c60c8952a8467fc87f55d57a8c0774bf979404ad34d055e645a5feb4c0c14459b28c3da0845d35b87ded5042890c71a939925bb20a991654eae995c9f8b495e58c84c8a77771330e8c97d42d5fc789824c7d2d84bb12047ba33359944d9265355bdb738e08ea4271b13bab6395a283f3d93cc34acfa5e604776b933e46c37cf0277b867ec0302a89f6c11b0bb30329a3e6b7652dccb986966f7a8bee6cafa2bff84b499e25abb3ff62116d4e4154413b7ed65b553cb5aada914689cd45bf9f4ad7330317c1c4a47bfd14e953c8fc9462a681ece9a6031b77e7b8d5035b593a38cb1bfe101ce1c7a4d0b0d643d063eac168a06111930aa11679b8b6b736e73c32ddeb80b2bc6ce223e2ce7e45dff10bffcb1b02f78a32035f4d2f76125ccf6edf148bd2242bcbbe9f3c5727827f0ebec5d7da17c013e30bf96d035b3b577b95e878e43c8ff16823c1e4311a213722ccbb95c5e897b6857f8de11eae5aaf517cf411dc051b94a9d931e4469f4b8f95fe880cc5bda2fc8028c2af66b699eabbeaace85c77ef9ef8a796447cfd2810cf1ad545c0dd096c3dce41e1c5bd1e921fa6b7044dd83497bc56990abd7edf4139e849469f91f58f2239b27f2209112ee779bf6d957111055caee140f06899ab39328d194b218eeb9830bb8f64e39b477a2b692c1e8aaf72427717edfd047dd438be48c6abd5fb0a087d071b7593e46440845f48ce6b3665d579e21acb9ab4469f552353a6f46574d8e63c2a3c61130da14c49c98f5bcd677d7cebce44726589d4bfc6ca26c8f3af723403c5a19550cb054aceb848a49cffa247d9114fd3b92341c4d8321297ce453c2f03f38c76c524d447971ce18cccb5aca355ebd407d89e4c2c029451aa1dbea09ee5bce54d97a2760b4cfd415c851104580765bc54e9825fbeebf7cd4909a0044a50289462f1cd545e9463525bee9c102e9686ed031455e1433b636dbcba75d2fced4082fdf92cd4081757fbd330dd39edab57505b83a13a849ce1194a57c4717a640b9566d7475fd07ee0240a725ce75ceddecda65bedd146b477b93c0816498c5c91b6e4b4a65e7f7107b549dda2834405254d2ac7c210542b3036daf7f2c2fc7ddbcec1b8d237dd97d397d89936736d9a34b631eda75e75aa11766c49e0449170f0c3430a5254b2994cb0ffcda0219f5511f201f5242370d924623a29683712ddd97fb3d3ae1bc61e7ae906a269f3a2dec6e7e208c1c80e5f70e28cbd1303486b9ce8593a6ff6e1cf662b343f18533ddc5b7f1e4e07b317e5fddfa92d6810fbc343e87c681c4cca54175cd3cc35a83af7d6a0fcee7d4d5312d43fdaa2f0c7f28dd56665843d844a5495652973495a5fd84134c310acfe898ffcec6744318ef7705b495db75a082978e92f7f5adbd17527a322bcde1a2f83037dcc983ab5ced014dc7baa29fc3f2f671aa11ca97374438b05522f7d5146071760c9b4ad04f0462260e39401aa9123c930a24a8999ad93ad6eac6318d9adde73acca05c4a45a2142f0696568ed66cf48341c4f22d6e42b35e618a2d538cad0be69b6d1a81f76291b92f563854c26f98a2df6749bb17fd4ca767e32dcf807a4a09f776180fdab2656506fd8814f396a372318011cb3e7561424c65c56a0cb24c357f4fd75c460df9a32bf0a837e08eaf81e6a3ecf628479bdfad8686bb97d16cc9915edaffeff1d903fce42b462f9417527d372da49be056a009c9e42ca8743666bc2785532efa8e07f82c73b82753655453ee765edfec1c53dfb46045b507337d7e3e78fe9984831fac4e34166e592408190e399d8aa7676b9dba7d8f5406de7e4608287aa62c52bb97ddcee97af1de0e2b2af9d912cec257c260ae71fbffb1f9a219162fdb5e677c393fb699c3d9fda708c939aa0eaeb798fc2b7596135e387020f5c4b6af974bd20f088dbfdf5e0d93306d6b88e4e3b1af999f655430aeec623102b687a9638a4d97acb6b4341a7833409c21ee1bea3b1c2910f034ea6e485060d45e1b4f4f7d5f51b0b42f588be807a7b9df524a4ede6f394498c09728d6bb1eff3dfa17b7cf87cba92879b31eb790d46b064dc67df609289ee18fcd4b1212e9c7d8ac7948eb4773ea663bea6f716f6504394936f42c8aa5744ceb035174e85fe2b09b0a5f4b1ed9190fee54eaafe3c839eadd024ddc540e894d7acfe889bbcfc4485e4187798e69a987f9891cbdae7c508d61cee7a005e23255b7895ccafdd7d1225e953df116a41050f5fd724510000cb37fe35df200bf041819d64ab34ef6bdb1249c0f4c3826e21d5c3887b0c8d1b2df9fe61d5ce50372e71a2d1edcffbade8738cc57d57350932fa4b0c99b299fe7744a4da24b234e035540f46592a082b817138cc44748cfa81a580cc46ec2991f03f79089473bfd49e526d2ab8ed1ecdee34d73c0fc38d2956ffe82e496247bce2130454edbaf9f9b19243e5d2c0457b76e3f07da7ec427ff9300d9b6cbbfa6793e7cd24f62eeb38b63d19df6f49861d62a60cf7d496b3e2b15f777c75a04b7a4ce45de178789c7af47a787f5733e89bfaa7b2125d69e73bc7b4ac372db840dd55323bf43c3f14a5b472e62f512474dd860b6a360c0fe673835836365cace478f6f8efc3072c5ca23e4ced5727c431cb4efdbdcba72db8702d739ddfca233c33775f02b8a4e77b5ada31155d9fbd274e9aa33139f76e661c0d2c679c3ec652f71f8efb3ad91779b4d049e5aa82b45e4cb12550e8c477f65e6bac1ed4823d2daa38ad62b070645f9767bbe5a69754dfaedcaca240d6f3731d8e1b49ee5c2fd53608e6c0842f7834ede8b09db9a842b15d6360aeaaf488e243bfa0715495445381d85f9c1ddff8009d9b4f964c7b29dc408e68fc8ce8de4db746631d6df525ae75ef407ee3488fcb8fc8c157c5daaf693ea4ec144f789ebb616b8dd5a1437aeef997b2ee3e31e39eabb72d688e8b7c5f41ef167f5c6d7035297646225849ea1cf416dd7596639c80d9b0bc520d5639c630b50cc41a8efbc2f7aeb58afacd1e3e50b5e89a53a7637a01fa969cac058ea6f23ff66bf0a5e86ab35c0397ef98be5ff4bcfbe6ddc3e0930bdee2ced25e220871d5fdfc4878de3545c857d1a0727184c87340e09d7fbad3dfa4c971e62b9ef394bf490089d1862c953adabf7322dfb7b421dc10f9a599426594720c5232a970434401ff1a7688568cfab4e9d172b1ffa010fafe5afb27e986f505277d3cec8666ad4d7f652f8bbc104f0cd723288f657486c033294b09cf2811ac4acf100f3de642560ad1c637640a830a12cf0d20ef18cc5636cc5beafc342e8dfeb078b99da94b4427c601365863dcd8213fe90da7742ae58fadf370799395d0ca883a92af98103f5facaa2da001a39b8cd984fd9571e795c732dd434d2b8e9e37bf1f437a9bd96e38ec87c742ce1f7edc07a599c0f54d8d65c5e00c80e6601fccbdef74069bedf93cec61aa48b19aa69830168930e9a2f6f1cdc3731bab557a11eb72cc5c7e9509f315ff7eb9915a3e48bb9d74ed362ff7f3b24f1f2561b3d88eaf6ff4832e19c6e4cf2bec9e58a86c7412030300c23cb9f4db4cb9a6f2c360cc72b0948391c1579783ab9bfeedcc58a59c0fdd707711647cb282e8a745cd3b529dfb536591d4e494974835e1380e2c62c18baa453cf51f119eb8552e421990a89619d930159c976475ca5f5021b60d34e93d1487f832123d07b8a846d1ee8857c7d2cfec045f968e83f9c351900b25a27cefc13f950e6687554888f4da964be696eddda24866099a2b9d09ef6d569c34e2675975fad24377f1319d42455700dd6d34aa59c8f91910d47dd92fa0df9a72846e852f0fc5d096413a9037fa7acfc5b36ddf196c60ed79e562d91b11ee46e5c8cbed77bc31366bae2d09dbe246e124d06123ea1ce2af5dc814b4baa9cbc81417483854e95c9c7fa1d1af37e3055e852cd81fd5c0c88442e45b10144ebe4987daab0ecf7e8f2b5880ed2b52e6fd6e6d2f9a7be1405b96b2a1ff9632e90ef1c777bd19ee63120b80b44a2435d4783766416ede1784e00d3467c7ed1b6304e75b5846febb812d637fa6b043e693bce4f7ca1df07d75a211519e7cbdd7a2e854cbe30e683ebe285bdbbde6306f0d119ba932705a1ef9e8c88faee6b06f90025fa082dcfd7e034a1d1e60b692d728c18402e12cc4fff9f95d7900cd6cea149931619c79658339ddcecff9e61227ce13c98c3f1cd52a5e1ef694faf9995015f6f19698ae495546279977ef3f5766e64e8fcfb50736a60e9fbc6a0532e0aa7d62c8c8e04151fd1471a49daa890a9c58bb0152a9b48f7bf3c4d6828a3fe9ff3323de7edbfa2482890217c9928cd2d20ca2449d84ec87b2f4d56c64efe95b571f815a40f1a36bec8f241b840f0f580fe94b8338af77c651f819a8999ef8deba29c664968a02cd430d1dd85489dc435bd9fde4ac901df563e9d9b0a8fd341c31393826090ee1f390ea3675c468b93cbec4018f7f91a6bcedae5dac197664bac33721c520e50684db10b71a59146feb4190a0ad3c19d9c2f92fedc5756f5263790bc76c647839292a66e8f19df5c6f7eb261f66688f7fb08e54d1224252c4bd599d73415b2d448a87d4101f17738509c56ec9e18d5d602db50550ed0b8683706ed56c6c8f6dee4ef94279cf4ff776c8d550e54732ea44e2752ab34b55735725bd9cfc1688a1fe1e89986927cee75fdd25b5babfe09ef376d6ab4366aa81078450d86967cc2f3da13dbe294f1bad09efbd8391721ee13492e070456691185d342e73fc86e58173801f9d0170beaf3ca7a3a4b288741bd1de9c61047393a01fde5f53fd9c5bfd6762371b38b24057bfade1fe65286ab490011167c7b337811629ec62b4d0b40de3f08b21183c280c5ca87f7bf27a89143aa44768d55105230abedc86684b7a18add22698e737fe35d9408302a0a758a4976e474d777385efc34437a9633434868eaf0d66eeca4b3cff1ef77ab9d760ca6e0818fff542404b086405b2ebb46bbe4e2f4a75751e958896eae2cd833127ef8819c26597e5bda0a2c64f8949f3a62ab5fbe3abc45a6781664b4de247de377cae4a4e66a58484575a111d16c5186d318bbbe3f222a7468f36ea3fa14c0618d7a643c3ec66491ed6f6ed7541a64c483b97164f31d92dbc1ad06fc0f2dccf506a38ab29de235a12873e0461f236b6c0b0a2b531502f13508afa81d8bd3d64699c2e2b892324dfe8d1fcfbe811bb7f5cf9744090366d828b477dc890eab8ebebd44f6aeaa5b101291bf67d12867ecea57cd55e75cddaa1f3b921eeef61958d5c7c6211544b12e75ccff530e839c7cc22a28db7e7fcc0991249ad98fe0b1c7146fb30c7cffd8ebb0954c1bc7112dea05bd363f4eeab6591705deb70c4ce95c030b9813564a36ea2b81222cab6fa0a74d87821bd92c212b2935fa11e499347a1a31e1c021a26fbc6f271e002bdd7946d22f78db9dc2a0f2405b5984a95437b3d2692cbd7fa6c7a4f3ed9c20b9093c4b5c0ba7091d3c9a40e4ec9989bb1c479bb417d545c0a5e366525b2928e3714e2743a2791ed80881998f40169b9a40089447c47803854e4762e2e641632b84436d119a8ba73e94fb5ec81c7d24d76ddf30060581714e0e781d5e15717a01d0908f5e3a4b1ce1807c22f7d829cff2f45fe167418e197b44da080c6f35c7f6e4d9f0823833fa41596868c6e998f76d81ff3af40f0a66ada001b5866a1af78b1f744315eac2c9ee6e64a29de76735b79531af24d462d345ae63a8448c7d633f0ef3f981e89406395de552e5480105518c8bb0822833f9e3ae9452cf4cf9a57321dd866ea81439c2a65f1c4591f2e0dbf681e184810a45084f0837af31fc38c806957c34bfcfcf0ab65641374bb942a751a8b4b455324f140e23d94cc21197ce1bb03d6c862340822c5f7422dbc0b5543c649c9a3b6862974a9bba2073b64cd5dfb25c8e91cb38b966df2790c8b5b362f54a1b9e9a094a22a2c45cd2dd76b27fc1105c03690412210449de29a8e4c7444addb43a07914016953233cc55cf733c7e5ebe73827a67597343fa25e2ea5b887b73f914fa8cff13a069c195732d098c55f1f657649a92b332522e4e0d330a9025b14c87e978d18a32df9896bc1befffe68e861785f14ececfd8ccea9e6b3f0bc82a413b6ad161eafb083b68a7089107be69003c7cfad62cba5c68840cdf734bd1235987d5231ac63777fc83ba9f87243c35d75ea033d33d705183b2df2c41e0ef5107f5eeea86ac96b38e707d4d4ce5ee598dc69618b071905c90ff9bbe256b6117df1dee941ffe872f5397557e5cbd5368863cd536187978e232b2b921883bd50c31687acc514c875fde90d9bf312af9c772f9d40855a5b866cb84bde2f4d2c982c15e09dfb50725d991d5708c64af401ab6b6190c0296dd7eddde207f05e0ad3fe167125ad5ced1011fedc07251cad4c6d3da2aada9cd367eec37775205b5fe88243c3ada1df4178adb323feda30e16505cde6f89b5a9720b791928f8aef33bf00c25d9ba082777cb564b456ab2d9834bb44b8e1cb0cc1e88f70bbbff5c08f40c0bbc75872ed9603703b187861bcdaa0d7ca9dcd315957a9c0887b6d28767a5309578a4ddfc7a6f7275dd6cac484b093a0861f2496ea634a900059ffecbafde025bd2de1afb8b03f22f576b69b2e21f55fa1c54fc266ecb34801dede09341fcf5a17387ba96abac3a92981a3b06136ac5d4317b47d76fbcc2fb29072478be808f18a34859782cf6b04217ef9c9c6f6a1df929ebc8fc2977d8f3cfa236e6760733140a8663fabf41f7a06f51faf0469bc30b9e1cfbff1c8aeaec6a15a457290f964611c86698b33c754006e7f2ac497e697de6956d6ac9647d6790f7d95517f80d014184ddfca934bdb36728001ae89055b2abcb79d9a0a304d7dcbf626af35f1bf82252368111d9354d1888afe694602c5c4645cd9642b515bf95d2bc032bb3577d3ca70cb08d7870af83905e79ed6c61dd4e9ab55b102924a154e862b821832412e909cd156cb1044d40c5985f44238ab84d10ed82a95dc60fb246d2e4854d264bbfe0f42a30114498d89efa014913fb6faa6ec2977ee15e7d06a4a932c78fc2aa49c31e6997f7c624a382d00a5cbc5885eefad113f152725bfa58420d58b98d90ef26b84de4f31d733a27c6c50f9b167d935b8582a10f863ed5f839eec958dba238923e61a791af0724e45adbd21eb9c93ff77c6e2e972e8851fafd4189fc5150be8c2d2f6031ef52cc4ee8b934e5a6eb3d551220ca87cfead6e708c02af2732ee97b11119f7272d8c8de1ce7b85e827613fae365353fdeb8dd32e8c52d09b58f31f576b2d5c1ce1b730843e1cd07c0ec7c6f6c85cf4dff84fd6519daf0709d042071ba7d73be459d83541a31f36fe6a0af192a1d292096d18ff4187c15e59e304d7678fc19b69dd15257fc42bc057845549e8895b36639213d7661231dc73d66118a2e9938492b59687a56ae9746da4ce5561489fe7d5ae65e52906a78940f48051337ef4ff472884e31d5d005c29119d9d65a548ad470b39b1f02aca6ea6848a0a84168d12707f07c24e6519807315eba95d69fb90a1efb5c4244743928ecda6cbfc7906c8f60346aaa04adce634f6e002af5c6299cba301a52e25b9fee118fd1d036e0626bff96a267bd3f09852fda32fc54625cfad6f46dc748cd5b885adb78701be3536b4ac9abb47cafe9eb7725db806efec3b309aacf260443fca64d4fb925e313dffbd63fff36cf5adfe499d3526d91f5ee33a6e5a6e59149e3b65d5f1c4838fc389c365c155521ca6c2f2c554ffa89d23d1b43179d8c6c69b146ff7c2a8d6a072ddacfb0769620991f29934e1ceda32e40d872c30b91120dd5c6c8496c3c02cef02626df9b80283159426300518d7a6499d99a7a898a1eb0d1b43c2949faafae500cb03c1c99b51dab28002e86706c1f98bd4ea08fddeeed25adcfae5c3fad3fae0d1058424963c895391f2b142d14a9ddf1f3c797030f3d5201f73b0b71a7fd6a95bba6d52590cca80404789329f0bdc9f61e7237affc0bd75f4771e0470c62263506ba1da4e894440754b97bed9ca5fd584312da2b31f3361434c5731667086169a604b44dc7aa09b1844046ee550cd886f63c071b4d5dfedf43b82c66244a9cb20e191196aa98599127bf7ca2c65cfc10ac4036e6bad6820ef8cc84bce0b348aca369be062dc9c434938995b16d00d873d9e1f213e6e77031c875049118dce5980a692212bdc8da0a6c311a80c5b2ee2f0373b1296dfb39c63744348939220422a7a9e652d71ffb81163883974ccdbda0bd980cadccac5f5ad9ac8cebce2d24cb0fbe632d0629a9473612697b7ecbb7876ca16d076f55416e0420865f4448b7ffa6e93137c79073bb20512493e8377c31a5224acce280905e6b42a94a382f3e4f11ecc8d997ceeb5b89775d77059b6c4ddbbd2e74a2d8ccca53857e43162b3827b52ba2a8f34f60b6b5f76cab4352181a84b4a0854cb84730716b7db06ad736281518571c669c844b5a53ea974e15f04644cb19753c99900f39571038a2ada8aec6454eaa7e30c687db0f4fc17231955f704321caff0747d50feaee426a39104a2d34f1e98696980abc9c14c05c4f77a4bbcf220cf08bdf10899950440de40d88de6a09402c587932638cd1fa58ca07d46bb1c2b1dd91b6502ae4fed42a58e0c94e56cd44ebd0fa9d8453f006142bd65d24bd6c3002a37e02685032792be23aa9e17de67e21aa9caa8384074a0b0f53bd6b24872e0c4b96a5c66da389af1a8b995c51bd428a3fcff7e58f705cb9cf10639399cbf2670480b8c98fcaac008c54260374ea38622b14f42ee8d3a48cf59cee528f73238f48ccc9e6490056ec9214ce7b59d5d665d6fc3dc42299b8011d49cc1c783547f182fb47a12becf0bfe65df128730892f1edf62359cf4b1db290a77b55d68ac63a6d6cc09eab092ff6d3803c9f430af492ba93433441603c2e1a467a934cec34d642b1b31338bd5b1df43c1f445c5581c4c7441bf81b61a9bff4a748592dc1fa31cd6a9db377a218b1b2e207bc3160b104be892c29dfc7ccf4ca3a731c0ba4ace947f7ef03ca3fdf4eba02946b34c508defae2e22de11b3c7905807960691cc3795cda3568b2ef1541541e33d608eaffbff6e1dc98d1d47ea93109c9aab892b45e6681ff76c44851462ba56491105b1c244cf689df147be9f1c746f26f9c9f15f51f9fab9260d429a9ab38a500dd9dd4a867a168854b8a250f52c8723367aa5ef9c283c8603b0af4f85d3883b9d31bbfb8c172f71fc987a64e4dfed77abc3d05c909cee454955559beac357f30935d43e204dbc3f320ecf43b235a70ca0cdf90ef5fe18de4126bae7932bff5f990faf7908c4c3dc3e42285527d8bfc85dbfa86d93f5c0383348689946b1896695e4d5160d254f2f685d0d010a6d3c9529c266e1312af03d67e6e71bcc00fcf244dfcc7bf7186520f88706b2259f275a4efeb9d29944afd42426bdd3edbe60eaef251e128e440f9735e79ccd3e1387ff129a2ca891ec06e5b430742b7094bd35dee152419a52547c69a656bb1e74646bbebf44cbe2cafb595d2d94891f291cbd5939f172e2e93db7daebbde48d68c78899948ba3548599166845a357c0268469a855820c2fb2d031d0df57b05297b73ded428899aec6e5051d9f2bfc1c32fe21125e8d77495517d095aaaf8837ab3c7200f0c313ba34e90ec364b3e0fbf691cde07c9b1af8791a7d70734ad202495e0f1cc7c57a3e78ac1aa3bbc46b251945565bd6335f04c6e021a862b2f77c1b26fd87ef15370339360f06cde505614422a2c895ddad34e671a286a16e606dc99b22898f3bb0d12090d732c29e16781f319a72e0216d517ed5ea525506749dfbc5676ccfc04f6fd5c15870c1770633517926a0e08805233914df54a9029ad358adb476d82b7ba7ffd17c07f2f93d5883022f99bd99de72bc376bd3c3eb3cd9885af2f1d2049b3f46c929417eab24af5cd59ba69edd6006b2467519cb49c17534d40723e5d4190054b049648d15210285f9540fabdaf3a7c147e46ceaa291700424dd5537215cb2ce8ec3b946c09d17a576401c0e1a001c9144a215478014919f515bcef376cc1d5f6b7f88d23301b765554915ec25ed2ecb44965b0c6ab2a2ae6368d83f58d108ad50651959f6b3aa6d9d5641708124a51750a8885ee9d369d863eeb94351d33d60445db302921db864564ee9bfb80b491c6fc0e36784dfb0c658d4ba29e83a8221504f9ff58ea5a9f3891b5504520ce183a9c6b34fc33e3d1f4a022316a66ea0987b23265b72b544c13da4cd65d58e37f306a2413e2e58d88c425f3c3411d75f6ccdc1 +MD = cc785d5ed3094ac12e2069c46e3b81fe9830ac5f7d752880ac683a7c80433c8d9b2c9bf59c8e717af3b730aecf76dba6de4d4e6d4cf9fb60f550c6eb77baf5e2 + +Len = 84184 +Msg = 2d01188eaeb6996f1e6aa60468b7894337e18139f6fe5c4ffb5a48cdff19e79cd21ea1504c2c3e66874bb4c94b6e3d9bca52ad338ea90362af783efb49be72922d561a83d71eb037a1597ba23652a91048439d2286748a13c8a741408db447e8a8712b3036d4166ad35ca4960eacf2291a7af90ec6a71aebaeaff9a5b3448f26aa367b5e51969987871bd6aebcc4436fa6bf6800358ada71ca581031a4b672d59a6eb31510ac6117245fbaf128e2c26955dc92febd65f32d826a2bed4652177ce2e17a5d5b5d95a212f0f8673a4e979f8f972013457f8ca73facf5df8260a7a3e957793f1af35eaeb8963718db4feb99bdbaba44b621ce686ae71311412749d2179858c235b4e3c580191f0df12fe6e0450b079bf693e1f769e3308b69f02692d46bbeef94e94d6ed140594d6534affb9153b01fee1decdca668f253e303656a889a53cc20d9c33213d48de020a76f7207595cd8860717a0873e017398a830e39bebc064bfce6e97af9e62cf09d04dce11e7b4cfa7988cca762c06f36f27ac837627adbc5a0e75270b63812107f6729516c3600b371970e2dafca9d94fc703d57f16c1dedae2016a90ee92de046205527eb607941fd2ee701b74912f22d15d5e1f7fa5d125923ae7a6063c0ee75d2f8ab0885173480b2bfda15d67fdcf8de1a8be2b019d25664726b67227ba982d18c71601e8af990c5210d37ed2493e43b83ac5e37c4bc0a651af26fbfceafe1ae79017e97150f91c89321ba17b1d573b099c9a6dbee1e0997f0b606963a4036ec56e1b07975f5285f8eae08c098002bcfd57a791706a6c88fac1ca8403f28e6fd9e88a24ffe38b8dc9c08b08257b2710bcf253193aeb4cbbe959ce1385db88674c86cd0854e48c7d213c82dd7714ae7d6df505cbc36e687a755bd3e09068d79c45d04a7b3c6b3d9d2be72ed3a6557f4c39e82771b4faa80dc65041b1cd9f6457ed4f6a455f7e86340c48f7b25b4682c5475420d1b498f4bb03c07f4fe48a17df6b8a952d67284f8cefe846413deea02fc0c158b46c4f34ce5531f7827c31d87ee80934fdf96e80ebfa4d8149f555bfd4cbb537e18327508ce32d10113d9a907a8c55ad7bc05a019a550112922a83c8fa91ba2522a228303ed63b32c6d1cf251c7ef56a7061f3bae1298c5fe48581a4ea39578a3d715bbc2b55e4c567ddd881ace771d1a3874193079e74d207ae5639ecec15cefb97c7dd9d89ae31bd0cbb8a72ee524cded84d7556db43d1c24c0a7147d27a5924bd7479da9923df9003822ab5bc1f42e7fc1e46140980c6df07a63345121093808a6b792baecb35a86d3548bf78601b879cbcf08a4fb418248930662cd55fe5d6a7b3c6d8f02d9cccf0daccd64b9e3e8660305900d6662f5a77b3f44542eeb5f0bb54462986d17dc6347b9d435d5f15acef816bbdc51e73497c34c4d882456c946f57e366993f3e5ce21fa54ed52e07c1f2b70c0b45654cb83ebdbe2dbcec738b6bc384d650004957a2cfcb3edc907c8c10db26307ec122706555ca8b196c309d56a011c2d49b047e1b92f75d990fdcd6f2f4a07597bd5d3a9a05d03cc14b0d91d9f771724c98d99bf67011f1353290673f0a6222b9de65dc85d4b886db1471319bcf8e2ee1802f74da710243d781fe07a026547f0baea21ecdca6ab28f4cc44345304f3ebbd96dd3709eb09ba8858f7ebd4e5ed4b6b47dca1aefcf07077d6d907e229ce9012efd7e60fe0441d0c5ab933d8d6868e1785ca6164ccdcf682ed6e0efae5d79dc04463d5199e67c76cabb10c9e85a84b583a87c67e84d50dde866fb3fdb7a3473e5b0daec783f95c21a25bb08691c705a5cca12b5cb38d48b3285a817b2dc63ef58a31bd8a2f5d4dd3f535ca3179674f78b2830a9fe74a19d949bb11f39694d77e687cabd1ff281efc1abbd41fab1d8b4992ca0ea88ebff399610dcfe7a0a3c3415c4ad45f81ce41f2697a58b1b53e3ba0d3d292171833888c14df25d7da8764d70c28d16345d4596f87edb288165de316fc292f6c22693b19cb8bae3482944eb7cea31d8db9ceb7cbec828c134d011414825a41082bb57dcb0bafe39e577ee36c3a26334f6c11ff801dc54fe3d7ac4101ecd2718b92acd3383bc84065c78bc55cc53e9d18cb3293248242786a34d3fc97c22e3b56f5b3ddb9f2415f3b316f6711f668c59a55c51531b0769026e30c992e78c9f90ad35eeff8c5b79a8f437e3b14541147149a3df8302ede119a70aac93e97325517aa22ac5d0ca78cc27c5cc3ec54e49c381701ae9863e587455c52ef6093f3b9fdf8a3755f5d8da0752a7f93f27f4f3f754ab4bae2e6396bb804898e0d058aa22e3d35ed883ec66037fc5b2ddf49ad9b5cb3dbaf983c26395307b327bc42739838e66e7760070e565b5073f40b3aac4a4ed0caff30cc487aa6e4643ef6f12b26ae82b1a56f6cb20d8fd55e78fec8b7c6cc20172c451d1c9a3419115645982db7efa0a3fa1ec65dc025e97f4f327a5c9b652044a93da52f228b244ee0108e07e68cbec9d7e6ba6e48be0b5ac93ed60732aa6fe818830adcae0c84717ee069261d063b77d16faf6ff1c8b975898c524416fc5d55dcdda4c19748b82d854db024d5ccb55279121bdf45d68263f293859fc2eb77327876095a78b03de785b0d9609b70aace31668638cf57e48ab6fcd676c0e85be26e14bf23cce3941412a26b85f8728a6f9cd58508f8dd5e6e2910cb659b836a0a40121ca9fe5349579eaaecf15752e2ab0df78ecc5cc76e92db87dae8bd3d200e70f6d859977fcc069c22b43f428231f527450a0f55b6837d40ca9b8c90862c53834b48af22c9aac59db277bc4490f6f25b369d2e9e1b3ba1fb4173addffecd9df97804372ae153f905c29e14d7ffb0172c54aec6707605856d94f9e8d5f7b2324625817e0a27563586ebadc5673eebd80d27b54387576fbc0a2da4aa2d0148b4fbac56e06b3c3fff73961d4a9ccf08b9901857424d2fd8aa6383fa8e4fcc1f9a7c94eb1aa8706fab6e4a6310c330953037aefb2f2c6feed50c2061e1a88895575b77b4695c6463edd98115c485042fd076641786cfb7f0c0669b8160e1f758701acd4968f198bb2b47c2bbb25caa271eded042d58168bcf1055dcf786678b7893cfe2096028de3e83b97bb76a4a3198fd36bf387fc2271eb5adfa294b08d50e73482c08cf9a46ca917689b9e177f8587f6afa03a9a55de13f9a9a1425ab5b32e9403af9a517cc3e27dcde2750fafe9abab03ef59d673400f4434520dbf824cd3cdf9545aa4977828d13016a807a4c47f731117625b1b5631dd182b5379638c5b54cc455a6d54f7f0b427aeb39a0e8457e14feee072be6f2016bda3bff2e9f049cb04f9061665c1be991d2114214dc7e97828ac50c7cd196ea3ad41afc6761703932bf5da2a2a73f6e299043657d30d88aa33f64fc4c7e351e65f8baf6ea87f3d3fb9b26333137d4e3323ceb6883ea3d9e9ea4319f45f3b8e615ce83b55e1974b3326b52dabc14c090d35f7014cf14941c9c4195bd0d3a088a72dfde006c1dda2200b84960eb47edbd35803a3109b5c54cc49ff91d4c5b0b52a3b231a0bc9d0f668d08728d65d741b28027b187d9d6b7763f45c388ab5cab86d1cfe55ef5a0fac700e63728d3cca6b6dbdc3ddde57e54e234bb5dc6d147cf6d23bf6300bf2f838f81d7fffbdc2f03136e2846fdd8b583d8cc8a2d9f68235f50c209124ec45192043a6533cc29073f0f629234ad58832c9f2f399ddb15f94277d5355912a90e0f7050173964615c44f3dfa36fb60df137808450134182d0622a85cca212196ee219ee757a8b2d36f9070ce15fe0a1068dc3f358f99a57b0a6b1fa555417ba7af4483a085e08359e469212d66cf2b9cb14b0a6d8b6ae3ba2f6535b58d6e934392b445c574ea5209b13de190affb60046b58ec258b245d7ac3a5ad05d925030b470577debb0289736483148047ef21b8159a772605527d3d95a0c83edef1456f1acc7c54aed5a4176ced4c74c536fb584e641dc79071bd62e3fb2998f55fc4dfac5dd5bfe6e03c7638b0fbf6ae4f5745546a5282a30eb88b5cf933dcc2cd2bed7a5e1688f9aebd005682958e69b4c00fe5f1b7ffc385d9375f3f9952bdd5c508e321b1383d8d905654d6cb949df3b02871bea0976873a9c76942ac934ce63ac2956d2856492970d8a231e0b1b178b22f6605ced2085494ec1986f026f68ae79aff750e5b92feb927cd08875e2ad04075518b754829b544e5de910686513076029ffdb5c0b179e39443ef22028086e5aab2a4465252f2147526d55229d3834099e55bc12e1b178ace953a333749091c2017e4b4990ab7adfa90e86599f3dfe1b16e13b2ec367409373f9e5d74fad35e85efc14274b7525be69b2ea34f48c2d3f9a8b9fd939a0c095eb17fe3440c72173ca8ce628dff7ea8d9a43cadc238b891c303b323accc5be5b58953771cf461e0c4e160b74d39793f444a86e78b4a4d95be3d93a7a033c038dc25ad8b78492f45bf082c932afbfe69a70c91e31303ee7a3b84d00c0676e57d23150292de8136b07bab8698afcd6ad28268e222f1ec0799db97fcc357fc381d2ae5e72fc82324ab9b4a032a54044ae456cdfc199069458f0ed58e600d3a44b36406cfa4bda555b18e5236eab0670b29a4ca4459770214c455cbe954beb777ba6f0630a4379e664cd552763c4d3c480cfcdc5f453e5cf1d440f9a223b50a5dac9c529ea0ce64b2e7f0c955b1631a7e28bf72a17f2ec0692940dd5d5fa89973048c7a7e2cda9ee81d713569ccca7819e76d3bcf59f0e2e74de5e55f6b01eb445cafec53aae4b35257d71506e0cbebb7d396861d880d2af8bc90b04cd849763e0f8736c39d8538ae1182e6d1bfefcbb477cbf0206bdc0f29ffe1bc9a29f7d0ecb7a2d82287349547e505394eacceceac4e6de88c87f605d7824968bbc29581cccf734f04fa6b6fac5cfe6ad229b13b0bb20cfd966ee3b59dde485346449aef5ac18919ff69a21e67b3af29f0c96fb76f6d29adf2831d84f98e6efabe227090132844b766577127f6b3c7c54f0e22ba23ba345805671bfa56fd1dcd87eecf0a728e36a5ce364112d5c7b8eb316aa2b9e533bdaa637d579c52b4e54a380c0ec5254dff73bba89a758159f2fa4c51484d00643603814868d15940460f42fca8467801ef8fa300f5b685f51680f4648bda21b63e01e35ab83ff719c07b3d433404f724878818e1eb6c5023940dce26f5e7b5c426140e26de4e98cbd52c8b722a872f3067cb81cdd3fd8c6febff4deb1efc28f89eb8663f4373dab10471b20c04538ca000e8721757e077348ed3d8535f9e17ddf86d8ff670462973cf19557359e0ac1dd35d6e70efbbbd0c1d3a01e24043feeed3b1e00eed4c018ea551ca3a83b4e9e45fa8db4ce3f5da60f7805f0a59644aa5b1140acb32dbff5c27d994e41a56e2ae26394d1e0d153bddae45544e1395878d011264cdb9ac7f86b70f59e2a63d02d597bd3866a3907ddcb2076620074e321f442b82791a040e78e3616dc88fdde6f5547321a9500dfce8933529229cf4d6e70acdf87fbc9928bd2d8e64f86fcfeb77cd19ad788ad4557bd25d01c84d3fe24ec5781b2419c25ace05d4c4149e79ace7620f1036cc8a0420fffd7473a075f0e0f4c87f18ca162125fcd2ff8fc46197dec3c21e768d9585526c8515d73f4d6f38292da8c0461af84f83079bdc5a2e38a862e10cba569d559ab8825a45620cc9aed3160cbd06375cb538f11d8cc8160bdebfda8f64aff7e1545473b650c15aaccf63203f6192f1daf17f1df913a6ef8e0c4b1cfb28024bd539d0e7be7bc5bd651489caa54064e0df8ed5fcb3037ee13b9b8536f456f5ff9d95be4cd748f78baf189773d2ec047af6e7ce0bdfcea8b191270e96ff83e389b7026d21952adf6bc7462cba3cc6ea26ad96d7c9d3e7ccc72b1937eb713163709e0a6df47ca3d5d46a17aa1c67639e8a500673b533f1539865eca172fde1ee5acf184133f246833bf417a008d7449a0caac1326c744db5bbde3bdbebfa17fc9ec6b6876e9a855028f1c09f1e00dc55240a51844e298f9b98007137a4fa3606c3215f9112d9e2d511dfad07ba78bd5876fb3209e8a8295dc35917554c72dea54e4b8e0ebf44d17a9d3a376a6ca34a3c5bf9ed03aa849d84a464a8a520f87440b6c1cc50c24fe3c9118dea47a32515497982dd2222536e98d19fafb7f0ff9981930094e7da7f9c39154750200c5291382622ace5ee791f02d18696fe0b0cb0b049a4726456386d531f02e373f6c060610855b6bf4d8a217b0a95e8f7fd844c756109df36c42ed9afa52d2ec3f102e55c8698852eedfb084a036a2036370adf496fcd55efb2b753973e329c80997ea2932767b2b53e3055f8426fe7294614eb94dc5b50ef90567db250bfa74a4eb82aad715fb9d2ccee7d1e5e137841b916f3f02d306ac6eba0ba796330f9718f23eff3eaccf5080879f024acf18e2ffea58ae3d8e8fdf6331a9c650c12eda6e966651f0a5c0ed57f674193b5868344853512d875e1a50de52895fdb1f20e5adbd41c77366961cba03b03e40e4ee21feb3a1e466ab6da6ea05f39bbdb3ac5fdd51188a51591984af96999be2db73522af491fc64dd528a8c322ea280e79cf1073933c111e410ce41977955a8a5bf6fd4fd699d095c8ea4cec1839bab22b742325dda953c7145a175ee96971baa9a1f02b671eedc90ec9bb79a3aaec7cbc4fb66a5552e59677ea655833987c152cc0abe07f01865e233184fa69b055b4c8cc3abf9ebb3f02e8485e83ea94d25061cd90fd830422cb82ac29fcbedc5ef0cd7430a41e64c8a2e1fe536083012cc2c5434fe117795ba7b9b42aef27a190c736c228a658c23aece166e48c714fe402e3ac2919a0e3996944c3f8504882739e91509344d265de47933c925659e380872972cd25b3d55486905622ae76017fed698a00ee2fb25b4943c9ed5c816e9ac623219c93d4b1259649053a7854a12e3a2be8e230a55a1a788fa9461dac438b464d5327d26829750ecb4b904c48d4071b54f7c78ae7af944bd3554d081ef4ea9e2461ff6ff280db568383c478e73c82f78131117b7b356139bb5862aa7e15213434e873cb1869b1142e5857aca42d2a551d2f6070b48e09d8b41d17833e06d78efb5135823e46aeae1833ca46043885ca953d2509481be69f3a3ddc10d35c7624e436a513c8aa1cbadda09ce37be10dbe95f4efb38a619003ca1530d1d288758c8c0342fe6bf69390eb192ff39fb92aa77be120ee1fe18e8cf04db644b00d6e3c5f31bfa08cceabe6cd1823f4d413752bd38c59476d2e4ab12931ccf7f07db8aada5c5bb89f94be12f037f965bda265a21940f92df6aa4d06f18bf55a183bfd5e89eda7a538eb52bbf0d310d4c0c884a0d9c9a12040e81e04d596bff99bda94cdea6033d4dd34f2285b742ab062085abe8160b1bcd06a3621420c9d44ffdc278f785e80e5f104250e7cb5779725e44041acb0db6229931de2b3381dcab8b31e09c0230f4718cb53d4e0f1b7d780deedd0b8346eaeb1153ddfc5a3a1f96ae1f0c33e783f86b90d16f234d33c10176aabe23065ebf10b433e6ee5f9ca6f6afb48526fa8b203564bd70cc4b4a4df3e2a130ca1bfe3d79cbf68169095178b5d617d2db04ed76b850a2c8b3d206273897fbba688cce6d0e9dc736d51ffe9db96b717bbccc5402da9ca8fd3ea90f59b6dedfe5651f7556b874cc8e9b6a4e1eecb6e9092f1c66cb848ff699d79a0eeb57fe7538299d9c005d962d1021b2e60234ffa8039ebacbd99f72b524e56babe30141e63b1ccdea74e64c1345d0be71517b8dd6f1706f2c34118d0c24d0e58d4b9eed5a76a67908b93cdea6b310589513a8a99a5b0d0331e5c4282423ffd05d2a154bf87230679dd745940de44a46fa51a39b1ccadd3e81f39e8b25a8dcf4c2894ea3e9b6206052d7ebb67160e451491354ab85c648e8c56689fe363cce18656f313d55cae02ccfc0158bf9ad48412a5fa321fdd5b6c8a4466cc87f663d06ede4a6606337d693bb9aab5cce55dcde443f7844ab818fa7c79c2e3229ae918403f195553b846c5dbe6e947117e00af040babb5db8513b4dd56fb9845c9c335b4f9ce665063909518143ba12fdd4393ec5d854b44bcd228277c8f4063fb9895378ef81d5ecdf1439ac210487a8bbd0917ca22b918d7eac0e55aec7fffb8cfc3327f24ef014fdf7dbe7105a173f1c39b10d1f283ca6eb42b816291ab9b79df5c503ac36fda71b19ffd819a40cea80db661f5834fcbd9d4a496341d57a9c75dacfb5251f43ccc1e26f2a43caacd36e1e785a53351bfa1a2e8ae3ffe18bd29b141ae465f30bac78baf28397b5401f6e6aae681a15df86ec54403f6a243480970c6e3975989d6ec7094f8c1b4b0ff90827d1eeb5ba91899a26361e8b87bccff229925c5cf8413c37374fecd9756387c5bda9972a0e782aad0a332968f26de633d250f422f93f3b4facba4bd91c82f12c95fe0883f7de92ac6afe080b4e8deee2716ea9d085de9597d158532226b560c61598ecc85f09e91fad60627c81650e886db5256c836872970cf0aabb7d44fc19a63fe9ff2d42568f3b21dfc1753d6fac2eed0d01da23f9d8c64cf8af0777ecafb1baa73249d101837c0928e4105d38d61cde0c94745853e16832e603ae9659109cd2cf689afe1383d8dfe5ed3c0c928e9f4fc82f384ea73a586b1bc158e86ac2d04f09aa0a11b417b76dbde2e093a55d1f0ae9d90e4f1e6c00bf40f1efb6484fb6f9fcff80510bc8817959cde43a98ca04d5189bdea1e0fec7f5fd995a481a3fb597516fe508411d9ecc61b52f49935eb679fd7c908d147814d7f9c381e6091834f3b0021f7c7d9f762e7ca3ab08c09f9dbe3f840d5be363512bdd764cd83d649dd3bfc117f5e8d47167529e3fbf4517216b86bb3b537445e5ba50bba365ddaa570029b3b5bdaa46f83e8caed3b54a4eab4a7c2a03bdf0a9384cfb996ed71173ca4294e0e21bea7d717cd2db5033f8cba121c7d84de07e14b2a98618957403465e60a9518456d00046e9cb2e9c8176166db90fcd02054710bb9898400085d8ab7b240f0d84b78657dd4d20aea0e7edb775dafd1208747224bbe2d91a9851bb2a89546e1ccb86310aa070796444ad8536234b38ae497528d91a4ff3ad4322d24cf0b97087400bfca1f51a7c56711a651cded669a9ac5091b540a78b01ea3e4598181bbb55ca8d0da54612d48e0d77b6f10d41380c184cd44295b24c1f76ee3d976a42f78e53568c9efa212714010c9f3b1a554cde77b21a088238db0ecd7ae2cf4cf5cd3bc2aca212790f1eee362149846cda4e27b0ca8a8e6d00e3d6d92a5bca27fee463ffd8778b2ba4602693fedc536b98e5efabdc4d5cbfd30a808046d1106423e60ef121329078a796c4ffeb7f317f57ba3f50308afae179f813ac156b27692d784482d1fbaac8e267ce642f5aa510de751e870e6af139ba569744e05299a0e3440e992ffc5f831b7c4ea913963786f6bd9538bd15c7315ecc1530efadee6f0ff2731e825a3a111b7c4bb6df5b6f49673aab4b86b207302c0193588aa5ac40772a7cfa1340c0daaa10ce73dbd0d6c1f99568a8b169369ded9e1ca4f9625d7ae49330132ad47b478fe0dec84e1ef3577376d4378664dee2694ab5fc830b88851fd597520e3ef2be9493839d826c4e719f84f8e14cc8866668ae684872c8b6c9ed99b99f09a7ada87fd1c5dabde370794368db8c4dc0b791b2723c700cc36eae19879fe36137356e1944ad6748abe0d528ca8521cf71f8cb0e3d3a5c9a21389c694650045f1511762a92422c6beb26ef1650ff891b06d17c46b768f4630d9cfba77fd4ec4b6ac92a7a638d116dcccb2dd5a550aa79a5ca0c2089d021b1ad233399d934816d5de6f1d06094ff987556f92c6f806e30776ce4655b7ac9ca2954ac08fd77ad0c17ef32f63061dc320e4fbae45798bc8aa33e6addd46cd5f7aab8cebb92a55772bf6c57b27cfc9284c13fd7c5049f7bcd51c9074f9db02e8058d5027c41c767e57ee5c7cdec6b07d6b4adba971f9d9542ab9323845e4ebaad5a36ae11b2e3c4ae7ce3ea0f27b825700f21ca224f9bf131d6262745be4c63c6d9603c438c045815e0ed283fd6ebd299fb236f2e3d9f77e2fd0a795865b41012fcdd12da772f0a61d38ce927a00af89aa03c118290b40f9c46c58385fc8ea9daec339a9e1d6ec2dc7c47958d2e1f7ebb25f318e7f1dfa1a9d9e1ac962be01566d0ed3a5723c868cc04a6943a27314c44b2d1ed25082a154fdfe65b5199b43efed1905ccc3446e57a92314ef634494a7d715df6047c9c53d7805afa80ef110bea17a667c6f6ee1f2e4f712c88fd6e60ae881f9c4cf63d4489e3c7f0e9d4006471c9b7c30d11caff3062ed94ba29a8761e1f9f47c41d16ceac31b4a555f18731dd0f49d7692ee26dc7f42def5261ff74165f6660359a2eda8a91aa818beeb15a7412e60da2f53c523c2dbaa6194c7c42de6ffb4d67148e51692c30ec557283c87ffa15cc7f0de294d7341b1fd79326c8be78e67822343c19922ace4e7925076145ef5f7dc91fdc1de032d8c454dd06effea2b0472ea2421c4db20c0fc0b0440e10184a8648d230d39f4e7afc57d3229de514e0245205a840e1ec7397f2bb42b8269d6050c4cfe8a05cb1882eaa1d84bbbcf7fe765705746f98018a4ed7ed0a45d0a7294305bd0c6b5e828ac413623432cb7292a5064bb090b819d99d36efa39f565e2cc7d245a21ceeea09255b4a38e85aae2519257f638b8a5be9ead96815ac00e9f145f50fb49a54118cb94a7f9ac7b1d33e397c49964856f0419e860169561670002334c249cfd81e9be8a7a662b61808666fd54f50ae64006a220662a683df1de2cb58066aa2c23abe1a3c6a969cd6752423f63c99a7fbb2eadd2132d41da4161ea329851efb598c7eb7cf704063344300bba8b6791b642e4b369e1afc0bad833c156ee46dc2e63d6227296367f27a9a82a0b365f9f0e89d149747c12435428dc488f1ce5fdfb174f3d212e91431f0a1333adff3200fcd27ce67e2d05783ab5c3f6478e9fd3b025ab72151aa4e08dd819af1f405f7605bf3000d38ee9add2f173510ccdd4ebc2117387ab0501d5f8b61402eb94684cbdc2a32f311c4f72b18e62cf6b5535a4b55d2fe46f580891e406aab57f75bd13996f3ed8035f97555acf2ae7dfaf32ad1e8b38feee9e49b2d45c465d676efe690d277b71c6b361c433463420d6564c53420e375d854245a74e296f611fea8c9bad8dd1b2f7c23f5def761710ebc4f335e468a386efee8cfdc5e08e472572e849df04e9e213167070c3f13c1e8c85b7d35a1cf5e17aed7004b0344b95f482a1f2362f2ca5b50ab5bb652a1bc045131aaa37bdb713a2e99f7aa176ffc429b44a03375f02643a196f7c57934eac81f78c28f1ad6f94144d7bce2e3b43682162311b473713a42eed1e51ffcf4d29df9d9cee0c7e77c93b93955d9af39ee8782707990a29c8fc1fd032dae2308fceca8fcd580ca3684985466cc79c326acb9a6d2e1ae4b9aac2697d5d5583698f01bf588df566bec98b8df0729a966a4f9804cf250f6b59219da84efe7077cce3794a526f54af231415b20c37250e1db5b443a77ce502aad5f468cf86aa23ed058bd837d1d44a62c05e9e143b1587cf25c6d390a64a4f01305d177996711c4c6db005636612cd1066fcae82eeda87f118463115318da50eb93e20c79e53c56d949c4e5f8c9eab9e60466fd2d2f2832625a8e8af9f4da925d92e31441ec0b3c302870f96c5c67a6f54e26eae87ec0dd0a66576ca5008cfe93893b58988566bdf5036e5a392289e25bd4707606e258c73430247efe43d9dcb200529d27b635234d5f25d0082339b43f1ead683063d83906415e89adc5a773e57f90ae958960b462c6fd2381686063c9b546890d0a287ba8206e55598ee00c528f5d528b06cfb95cbf5e1a4bf8e4382320a1a146de31d54355baaaaba76aef21b72150b1346a7963d3b07f0fdbaf7b72e7287882e7d98fff69ac504b172f647b804471ae1b1a3e9d885b18741aa774e19342d56a2e09f003e3ab0ee0e615b388712e7d2bc3c54e3569c7ae23bcb66a95ab5681a5baaa41784b1eae121c06236f12473ccf3554f251fb5d08c3c9c3a7b9b7ce45dc94a2cb852a6ff68bc2e9fd59ebf8754378b0721ac883f0fd4ab571733f11e7b7c2dbd3530605aff0e0a58a6d85a7f22e94bf16b757a22c79467611ebcc872fdd4e3ba40a6a48a1ec7c240fd467be7939926b2650302385dec5edcf4be598e7f73fac85d1dba09325a04dd7b519a3d30c799be90fdc6cc3d5cf02f2b813acd5ac9e15bdd0e3754e435308293924c0c84e5137a81ae2e7ae056d9dc45cdd2bc3a5725d9530092f9bef9e3d4c870f7b1fa72226ab99cafb0d17a6a68b5fcb7d778ac36e5519d53640d187d489c9623ea2c1f5523ab51d0faab2830590e9650ab9029a2f45b2d0f3059019b62824a6701741d1a29d95618d4b7f0aa31b20343b53b5fe88ac2481ccb4d459c971c2627847d2bffe1b6321dcb9254566732fbf760b4cf761d496712a134751f6abcb1ec0fa1ac64efe44e264bc4d3c37e23c8e24ab6f8da203312676ec8f0826206762aff7c1ee7a8c622e8d1b9ff6ffae702aaef9c5c934821d2a160554863f16bcb7ad08703f6b0ee58cbfa0c27ba420f21a7abef7b2fd99810574263fd42ad6f5a422f3cfc207cbf58562115fd31080ebe6f2c1ac50e68f853df619f7f9d0a838b27681857e370db8a0de371d07291682177dcc8dacd7ae535c06a525fd18d3ad67127a3b7be41a59659bdaa51dd929e03482a542cdb93c10ea0b9171e9e9a17e4e5ca698c2f43cfe5c02c29e2006032cc56b1572bc7282e76d6da682c42d58d0ecbdcd455a51b8d00e79b6b1159aea8f539fe4c57fecc8fe6f93ac0196cb41cecb9eb6e94be1d9f602698086067c27316586dae5200d567d77e76b9567aba49d72652a2d9e8ee698c03be6c4fa9402398388bf77a6bf738d0ed0aae740b5c968697cf1b95a3e26e0d155b114facac2cf350d5a261ae96856bab6339f28d1f7553949d33487dbe2f4bc21a91d0d06b11d047d749783737eff0601cc6428e7788c693698462e4c63fc090595883b3015487740d575e944fab0771a3ede47df923681a907985679ee21416b3efc8c30377b17be456655462793976750b68da18e7b090ce9d2074ace8aebba6d2209ee5fdc6a608c12cd604ccded51cc940215b4828ac6069c49a749618f5ae8a2b953d593fa8c71235c7ab0890141781faf244b748c3f269c2578a9cbb5b37723a545e0c94fabbe3e077d9ced5c9d1e009bb49d7895df117da2a534f2e62de44dd3adc9a6ef26390dd84f582185ce84dfceaef0b72f0e8ee5c91633fea930f6c94d74d9516463ab38d6d92c4e043d736251fb8d59e134677da1b4ed178724743f1b8055f336ccdb670903609c6251b2342b81bc8533b962ec3265ac630771275643bb88b3ebc893417ab63b3226710bfb642ac463ae0548da8412b60db17fd7b7cf0cb9ba0dbe996e30d80639d807446005ddef1cd980e0f1a0a4553b0db64b0ac65a2f2f2418b69733520ad8017a260a158283d83d93f4d68d01ce16a47f4df6318f333bb63db2648c0d8c38283279a29c00c9be60a44a3453136cc5fd40a32317920d064d95557c42f0d780d59705cfa34109f7cc1dacb1fbc07670a062163a804b05b7708867885de232d99011913a302c8baa0964e0f58bf23341164e6ee375a26377a87eaf2fe6cde46be208e78a4ea996009de3aea90e90ec5ee66b73c5fc7f6e6d7bdff61ae498365d52e4cd6802a073211200e0758982eaef9820ed8920ca6fc2731304f05f2b70d8690d0c7c56f96b34f0253c0006b0721db5d7a3d6e66bae9d1882a15a606eda03adeb6c6d519cc462bdb98cf38c02cf0fc4f75e55584a7327f1959500ed49bb07a8e6b4e4fb72c6d2032496f5246047ef4de8e6ae7d50068786b2a78911a45d0be267ae885d61bbad49cd23afd5b224e2d81103885d63aee65f43a19ed1670638e2d420027e52e91a181efac9a7e0ac12eedc7d8b016cb56c05ae49e6377affb63097d3f9672e9942f77ee5eaa2d228a716b01b6070546140ff5d680a4ac590ac54168f161edb144c6e55aabacf70dfc9d9f5a6afb201fb8bd5b6c5b112300042d6bb1b01ad439f61050c12e335a31b9ebe14e71fd05dca7410232a8498a499a23fed41611b4c85a94509e50adc5122514d73a359d14f1824370a5d2ae307a1f11713c7de71e00c4bb5b5ebdacd633e080e7ba505bdbe2bc3d2d5274cfb43615ae4977621b6e67e70de78ebf80fc2b4eb8a94b4ca9d944d7869eb5092e93e210330e016d2f246213f46bbaf0faa54cf244827975078b8c36b85b4a0a3b4e2291482566f992ee83ee177e4fdc5a703d6d8d09a17405612d8c5ad98df286415c0b66361481c71b41c7df95d9ec20db61032ab57fc423f8ad3ae6affd4c802c12f105a696b06c392053c528c5aafe455c65760c40efd3c08fb4d4351482c95cdbf4cefd69efd2c6a3f460cdbf83435c74172774b141a54749acbc0f603fc2521b58faa10aaa9b52413c2aeb142f807f6c6a97953d84090b6f64f6957cddfbba55c04147f57b465a8c9d8c175fea462c9a024ed432018f6b65702c7da6e7d5d41fbd0b48c6cc345dea9b2cc91f5df4e28150c5b85b54a915d070c61e8ad7f16ddd91e129db3815baefb75576cef52d4fb6f894b805f7d66914d94bfea538deb613f14b71cf293b101064ceb6eb4a5fb2af4c2469ce5597f3b70c26a46284ee6b575da2a6ff2a4 +MD = 9e99388d377aac36afac4a8566b9d168c6f0faad772b3495379d680a83d5b482a617c89d9744f12694fd47d1c9dfffe91ad04bc3940faceb2eec299ac386c4d7 + +Len = 84976 +Msg = 12b89aa3e9a7ac15e01d78631b3ceae0720e36f7737307c0aa5ed9d12041a35721c6ba6542c0f28ba36106ab72ad3a08b02e3ea038ea56bcfd92b8c593fc3559f1d31c9e758e5cd6289ee83444ec60eef382ed945a886da0d673d04e8579c1ae094889f788f7311ef73de7a799e1a4bcc2710b7ce1379395bd69e815ffa08f7df18bc91785e5bb8a99a4cbac79744d97a6635fffd6de11c33bdccac10859e7ef3206a4a8733f4043953d5ceaed8da5a926c0b2c640652f51d7343cfba98c102c5320e24f5bed0971736f620afc14f21acaf1cc7827b335671ad9076be921535bdc404ab644d65e3abca1a4b3aff17d121a5c75be93b26b2f8b34f3b8d000f8a455d0a68536e486c9f73deb8e0d0c8eb89f6a75408d4919ceb2abc78b661247304737bc643afecb44acaaff431e4d6c34e08393a51c60866f17a74d8bb43d87273add54f9560c73d46450a879ea9d61af6510989649e0fb3843914b61c16a02b1b42a38ef94f7c7a0a597aed87ae2b351b7774dba1bafc051bdcf8ab49582fef43f862fecfca50fd1fae7d80ad506ab415d2277ba9ab61de30dcbd22d396bc41b6259009895ff938ee8a8efb403ef91a8df77e13dcedd5a16bcebea74b40f9c4ca60b749d67ed9a00f942bc810d87adadc6e052ecc00dbe1151999c300e54cdaf910453a07a586e4eb41d0416fab4467999c4916f772c92fd543cae095024a16eadac654cd72655a1a1a1921ed260a633e08b676dfb231e014d3be9a981665eae826c71468541982149372d3f9d721304249c9c8e55dbaa46c50015b5a9024d9a96aa41398c8f7ff533459c2164d2d614eb61f87b8c3b7ef444f2fad8d0dfb65774cf9bcbf5fa5146e735a86d2f68378ac04143dca82ae23250795fb8ffe7e110a14448a4c769583bee6d19cb041c7d8e28a44458b2921d2873fd0efd3e0115eba670106d0ac3dafdcf57b7e2edd6f24aadf2c498b15a78ff34e6cd5093159c100cbabacec6f220b31259495bf17edce3d6948b44ad6a3bdf1b9d6559080cbca85b8c106e04dd728640dd99dd18fc84842bf06103aeaaaeefb1889ebfa4ccbedb194dd8f6cc6c179ee04a6d116b383253356f0e7dbd0218587d103f2a6f3eead0d064db0d248759227a088e9ff11a2e787b79595be15ac341089d1244724a87b0073be15c16167e3b977fc42eb38bbf1c86770b45239af5d3d898ddb2b4d9dfa24739b28ba901cf10be17d666b7712e67dccfece289aaf7367767691f3dd138cf17c61541e53094ca77388ef107b6c48007ebc4db1e7211916d747e31161cdb5fff4ad326d38c15904a4ab274ab40c6908f315bd7e7da8a0c4026e39046a01079872db4e37afb998bc0b50b9aa9f97fbefa0b797feecbacd17ae462e5d5471e4538d88020e3666ae260e161080bc73633d2e0e57b3a2bbd05a218c1d8ccf74fec99b1ff8414b6cebeb2367c69d99432169e186872d3e406d34129c910329ae9963321f9b817d10e473f1d23631947bc90e71bca0dc2dccf61de7f42360f17356a8c913564f4a172a48efc209ed5c81cc93450d3f30efd60d70182f4f16c567b912e677c2fb10d41fe283c39c314ff9ae80d214accbf2d005e339aa7ea503f0333a10d96c158fcc57c9346377adfd47e16faf5f942de56f81efa2f22c9c3ba14766be94bc3f05844475981e16a3d2f0f7a8435a6fb715f913ee1a92e35cdaff785166563dd820807860154013c36f8963d32471a9f833010e66d7093d67706f5862ae7a5b615f4566214295d98d2175b868d941dd719b1c04028ec1955c8a754a22dd9daf7b10479031967bf241a74a67e1c84774b3dcae8719985875ac97a5c00a9a2ca475e20b7909875ed8b15f7bf4c6780efa2f663cfa448a4a78c806857c925aa3d4f253059321abdaf73cb89ed1af6ee4e844d64beffbeaf3f94f7578b242a59fbb70d1ca71026a6cf8545107a0d52375c9b48b5fdaa821018193630413a3f17cb261fcce953449813688a75ac4f02c4e18cf23ed4ce1c2dfac443dcc132ec4c774462286722fcfb45c4a2a1cc088efca50250e88b931570ad3d28425335b960c5bade1969a6d7382b43967b215f7f466fa36c996920f440f82bed493f6b2fbb7e309b8536065cb58e8b6deaf57d5b0c09174d3ab79e4104a43798dbccfbd5c56a4da256176b14db35442fd88e8aadb53907fbb4be348526790833df440e33e750bafa7254fd8512ea17e52c35adfaa9c81b7fedc30b460d3f47c53cedcbd287f91fabc335e339c373ab96ce320ecc4f7efae0cf114a0f21be9b57dc105b390f2e22be2f0146b85499aa4aa5cdd6aa11224d2641ef1a65cabeadf0a6f4e5f0e5b56e3aa0024d882f24b9099b4e2d1d567ebb592aa4a3d27006249882e392807356a927fd7e2133badc82dc97fc3aac8758ed8274790cdd7b5fa95758238a701fdb7c8d2ebee9415f89adca822126df0a798aa906b67e0f5391e43610fdf448530a8e751a0ace3885f2e2dc4203183e48a93bd4c8a320ee60647c3c93b9f89176ad88e6abaaf8a293e0c819c0ea3952a9afa80da2871b040ba01a72c79fc0d2f08a11e9c8e58e06f31b0789e420b1a29655785b7cac96d9ba0c65de95f77193286ad2855904b9ed0c6b483497eca7b6756154c73e58baf3d671068ae508365d881472c2474fa0de46983323bf954317af9ce357d0d4afdcc897a47ea01b35b677529aa8780e6c6109696f5d4564af4cadcece151a689c1cf746e8c1ac7896295deaf240d58944febda7a5ea12a110ddd6bfbc09055ba939ca46795af367823ba3a521914608513eca1a7cd30d9491539136563a77f700bdab5e01545c302176af4bd0a3b4d2baa8998a9d1f1d84573548fd44b05982c630015825b4ce1a9a61eaa4a67f0530a8c590bfafd62cbb8d0b62da2d739445261833fa8f84336e1684bc774c2c236a431b18805b01217f595e4796b98c0e8846ffab0de7cc7275bc688e8e69b2f4c8b2349a9749a6e319e3b45ef99102b1934e6cd058d4927374b594c6afa61a62911e987cca20d05cd1549811ca5ddd64ad67e80aa5ffe01eb62890cea3ab6b540faecd28e2888473eed48fc7d3c4250e1fb9fac1ba10bd5b823ee50c321fadb1888b5d04a72bcc10ba8a23e9da6fe399326b2a5d60ae32121f1e1aea23abe96345dcd07ae0aeaf1b7b9fdbdda8061fec2ba500465f81452bd6f2b7ce40f626518ecaacf057bc367d7a3b3f0c0530dfef559105e57f32008eefdf45224fa96c63ab7d7bd0d2fb671cff84d8deb8952d8af754c0a088696b23b20f4b4d196bc381e31cc4811a134ce151a52dbc8bde10a55819b9e041cd8dd366aa51b766e534937fd0106bf7adedb4bac4c70c44b39128c106790e73076e8455d7dfc8febec681c7c0e6f63071507e800a2c37acbbb6fb7a438790e6bf161fc5bf7ee8a89f82330315ce8a8f067f25ec9ee6a68b9f8907cbf96bd0629c8e8dff8ab57f2e306e927bf6508fda15829346a87dc0a9071232fc50ae34af46ddb44b5f0df556189584778cf56dda455faed65277eccd995865546fd72694660b7ef0660db2e900fcf23efe448c573f2060e3c25e94c10063891c7f6e0ddba421d238c93d1eae8fadc51975c65519aacd90b720b91f4be23b849da7fc514aa7269769ad25a26f6eafe35019012ee72f6c26989511f534e8e9401c100859aa1822b7cc3c4ea4f2440a362b117f808a760709cf49ed7e43b974a3e4e11a8fc29e1d19a99e3f8e00bac6a5f186c8b4cb26a523a463d52142fee4973c43ba5a5ce220a548fb80c66178ec17ec9f623070e74f5b5e0b5149f75e41036b5e71223e8b3243f07a9ab6dd2584766285d75e41630c99476bea5b2c8294ceba59c65031425cdbeb4314c43c6994a99c5fafa5083fe4c5a5a827c0a711e5e2715d424afdafa5557f7f765a45ee2698e256706c8b26dfc8c1ed91e031b43a26d8916b796a791599f55649dfc159412b7c92a41d93be0688e360ae2391139d82361ecc454049b49095ef13bb7955ee4ab13ad21fe8af60ee532909f291d515ded52bea1746c68b20a6735f55328834ddca7783da52a2f5e2587127b3f7a2aa22fbe14f554599a1327209b217b79a1bcc0f703eb6993fce4d3b6092d08c246537f16882690669feaf3fda9668cf34abffc84e8b1b842df215451dd1af18004d03ffe70bb94edfab7d560e92b041feed5e3d38f271dd156924bbd16cba63e16b6f6c8673afe8a3af86ffcc2f58d69fe8d2b657fc206a9e3c60e8a3eb57346dc563826f40b19b5c12b0813cf3c656c0a4417ad23090f47172b313bcd7f0544c66c887c7fd292eb2dde52687686389082a95d2d21729423513048343b8ec8c275384c4b92f7e6a4f170c34d51697362081b4067f37541e93283a816114b3a2a69581816a601817d8c80df44d84cb27afb1885e001b774e33b83f553e75ad5e7035a50605175ffdf8f8d0ae183a65225ec3f7217e48fc9bbccbfa470162428a2e3bda9ab0ddbbe355b03caa5dc0cff0d5beeb99204849cdd769539fd364daec87ad07869339949297f73b2f459f6f59bbaa4b0c0fa1c8ac2b9b32a4db02dd4e24951413d8b352d367d6b586f85eaf24b890ffc372dedfff61687f9f42c4b376acfae886a4d35d6c6d5490f89d85f61b7677ee067284f89020d922d82f32c42cc8e56d2a22221d255079b5cb5d9cab049a67021d371d7a2511f50497cbd5783a205d8a467727fbc8b84d0c475f2c38a8cf68224fe831cd87dbc40b243d3438675b6a2721ce6a5d1b4fd97db6ccbc04cfbb8336e5ae46597e274e20c6aed76a7a22142d044d74ace8ba24f15ecbd5774006bf2727b0e685d29d9c2cc74647783c1c6482371ccc51f5a4364e8985fef9c55925db5d1798bb4ae4b5156d2c0bc875f2610f0264fab20ab3187e7d21bff2245cbb3bcf0ae563afa5a1c50189abc4ec4b14bcad4d8739f18fd16782c8a0ca26b68b2fc5b253e3c9876922ca84b0d26bd083727ffefa4d71e169f3e2a22ae9930f9da086366ca4603314161246a15cb829b817c1a0db555151e909e3d6e4b83311f7745bbfb80e3c50aa881ff706c99cfdbb94bc5ab3bb5a865890cf8d579dce62a3958c75be8a2487345f3bbd6881dff492d2b55509e65429be72ecee09012baaa9e9617f067ee280b885acc34dec49b747b8f7b8653e07e124968322844d13920f5a210618533ce241e1ba2f4072a2eee22dc9ac4f2b3a5791e4db5050e74ec1dfcf16317d72fb56d45baf2ac67bb141691b72595015b7330d443ea1f339a4e1212f8629bc41e7837bdbd1db696f3f56e6693be6ef64441ca09ef23df7a9dd97db64ba155d2ac7123d496a6bb0b614d860ff6c7cb580aaba53da404be4a1c08d1755fa1ee89464aa238dc00123b8f86de0c54d4229d2b0b62de070f34088166bdcea8e6ce6e787f433901bc64bddb3bd6da32561d3c020b83698ca5f95c6a7d8330bbd26df8af6977738c5e2af8e0c710f813e003bb3c16777eb96b46ac33b7d22a0d07559e77a3cf76e057cd831cd31ce47de48ea145a6cf7bf1b1d48e69a02b4910f80de65da8bba1b22bc4c30bca4b3dd4e616749b46ebffea2c0b6998b0eeec6c270f56ce02bc82565cb95f1a273c52bd6723abc9716d58e73c53c44d849da28316c276452c5297616d13bde46460d19bda3ecd3ca0c4359d655624d475d7f9da49dfab5f900e6f47df5c45d72c391904d1e04f817f711451398b11da1efe50e622af8c89d850589e160bad8ec955b76cc080a924480453c71b5b01cadaa1564b43ca90306fb911c8c3aa4b67d6273b5838c86091a4ee92539d4e8b235331685e2fb94cffb0b8f94c4aa0b5fedd3df33bacf01c4610a04e7b41fdf48ff35f05b348e4195455d09dbd2d8763b048fa9dab9fc032de15b9f6c27bc1f44d556accdf11e38bbac9806d8feed6db28a3fd990c73912ab61eac19bddd330107d3e51c263d202abf8658f738f11782c468a753f2daeb8a6ab5e725c1d8d9812bf96e724d0d326cbf16bab94cf6b2011011987ce34857c868560ba972e11e1b4650677da81482c855f5362230424ecc98393162521e3e6b4b898a2345988925d353507ccbe5a9d4009c4bc08776365bc94a12b2c3ff27f960cad311ce61a3474f9cca2e2cf31ff63b867c22b70511152fcebcdcbd5dace95484870351dee4e6377724d04fbf4dd5834e47b7536167af4821804ea2ac35c1a36106568452d689178d0121a8bccbc8645e2f0cc13d92808f0d0d87187d4af8b9cae1a9ea8fe0b66c38ef80cc7e02655b309271a4dc2a2f80cbd52483435515143c997bd8c8abd4a225307c2f759a22d45022a452dfb702a9f857957790fcad5f30ae2ae3af909a55bc74824635eb976c4750136fba91a0870d056879e8aa07e7318055afa7274df3793c21b5318f198f909b2d6fff728f84947efbeeacd5db38d9d08a8141d88607e5f7e8d0eaed5fba967470c810b2364f0914ee5a60188de073ef17fcf23cc91f8d28264dd49ea089f37c7bfc80d93b32e577be51b4daa66aaa5cac974acc8d86c95d8860811ba25a2203bd91d26fe4dcb417ca48eda4ab33e7a9b6d4bdf059ea45088ddd72dccbb79caaa41c87dee9a8ff65b0c4acff02d8b646a539ce50a4c66aa984f91c6a833edde1cdf113cea02421f20049655253c580c4163afe65f487b4b12c68003d7f3c6049a9b3f887bedab63d173b9946f486f1a2785cb098dfcabdcfd29ea0de065cce32a5d9c8c27c3936b7843fcb359b9963525a13a761bcebd056260180b4bf0c624d70d6e6d79ecc2df1c5ba7db68f79605419f425691287b6d48525226a1fb7e6ea693fe56f6d00066c6a30233266a373385672cd17871abbdb7e9e08668f0ba6aa1d7946d28d715a87d0354e41a7a4067f9e1400e5711169cb80c09522b3643c0cfc278da966ac84e4963e715cc907b48a4f6c536b67084b351a316b36f35e117383af1c6c8efe20032ab01efc512ae7f8e8c05701df6bdaa8c974fd0be555b17e528485947d02c6541c3eb9a8c6aa2b4bf8c46e5150b882871cefcd29ffe7b69dd75c6ba9a736b267d93ed3da9fe1f8e40dfd1bc2517aed5073165e09b9807b52807b01249426aeaef044e00a538edb5186bee1ed682f85a56a8d223398bc8a2cfc85188dda3f05a9dfc580c077fd3d24f1ae433afb42b5f661c8ac2013f86d9d99ff045dd00c41e91645189573a9a8deed3fd223815128b4073d6e67b1d09024e73d470d1c0afddd325829f1ed30a8dfb7d7f14f90e7487eb97feb7308b18c4372e4632414b793f69253374e2b1eb7b8102b3307b0518fa6f6e4a5ca7f27dc79bb78eb3b609eaee5d4eac332e3c05fe8549e19f4563c78dd5e201fe68bbfeb482f6f41ab862c98fb787340287dc20bf113a5188df9149e824da6dc4fc4c6433f4d3c090cdbee0cd7db7140977f903652cbd4a14d2f566b2643dd4d7ea0f76ebfa36393c7f85f54db9c8957285fb7799dfba166ba5f9e6949df57f5eba6afe859b07a847551fd1ba72a1fd623a4a44033119fbb4e0049035d8e9b682f5c7c2a8e02e55d8d7f43cbab12a94031c4e324a2ac242180c7d2d3e1d01c16b228d8cfdcf9388188e6cfef57d4ba47db5700817d29e32beb0ce85567225e740c924222c731f892e01f0de15deec73f88d169011329315ce545e6026e13d712a72f44cdcd1b89f43b9e6a5bfdcf54a9b2aaa90e1518a3172809586557131a750a665d4b5f347147f3cb81b9d804e718e1692d12e376cd0d0bddbbf8c2ae9d1dbecdf8161e0b52e0914cc0857d1e030fad9381ba1ed1f38109298d273154e37f2cdca1a85a0e8360ac88c3495d791cf07f90236e27a8db15b883488b1394621bed08e68cc3cca73a9e15f67fe9b4a95dc005ae998e69c85d92617a9ef9fbad6667d9333dbbb422f0fe6ac683a24f4cca276a7fd6b3a36fab1f4aafdd44d939f135c41425d2537b0635fdd00f27b75ba80e1503b057d425a0c7a534b094db7c4edf6015ff8829340ced559f7cea6b7a79fcbbf680bb7a8eb11417b5d35a7108d1bd2395054db3d2578cf881575afa0dd26bb5b4f28f050f6e9d08bf901618541c67853de1a371da788d5d221909d1aa33e3a8cb7023122c2bbafe9e81585fd2a1571b5d1f29f1b10276f9fe5c6790c400fcfba6741810699b067fff1181a628e3144c9f1831a1fa67c265727c04a5dfdc0024d288ee9e4c1f07f34deb3299bb64179f50676b011b3b08162b02518f7227a5badc29170a483a27fef768db990ea6e99a3d77269d97dea0928489eecc1f7646343fdf11e2e27eeef9a804fd22972e02b3a2d204e5f4d534412b6d3cda3c3a7a175a156fb6af5fd589cc5a07c4e95beb722d028668c6a13bc86c46bc385d06a9dac756a104035f7425d0d29c0e79c30c5c28831ba461e51f9ed380fd64f64d6e05142d264992e0433451f91a5dccf60de841de35076af3581b0db660fe9c813f1cad039ff5b294ab5bcc5813415767389cf56e8320566e8de357519753c44485881e745ea706ef44f2ac5a1747ad9944f0cfce568d98b9298e6cecf102e1f9d9edc4f9e2cbe45288af7e8986df440e9b7a1d785f8dc665a352aad31e9a8a33b4a45cfedcd2ff60eec8bf60f2769f29a49f7af6decf43e693f68dce60793164ae42331dad6aac8d0ff4eb7adabc338d08d764c484b0b5de73e0a219773d5c1f1f5de3b0c4e1605934ba9f31b00e85ab30c8676bc1e0809fbb87745ec3358ec5904deb62c3d5df382570271002ec2a06a4d90f4716cd38bcd3717108c5102dfaa998a69e1ac66dac2abc2fa053e37511ed8fa8f113d542b8642524920d4bde10b3c4c1ed4a119047ecf5256d23731b7f6362e0f419a73304e6290ba4fc5703ba4768b9bad275eb8dc4c184d0e2197181bee923cab8918e44c1d3929c22b03369eceb0a913431d3d04a87ea6610451bdb48890ddf7152b8da9feb55f210e5d1821cd2110aeff3edc1f6eeb2b75e946eeea8d8fbccd4394748c8a6c241377682954f947982762a9dd5523c7a2efd760f3e584f79fd31d3be11e4bc73f406c0bb360dd8a0926744788cd5179d47ad78613ccf52f4fb4aa081b87c82c7a51f82efc6dfe532a523efe24b07f6b89bcf0a097c768a19416f2e46cee89049bee20b94da2e608c454c7b7fb253604895d2a97c70066b435a2feb51a7b17b86bbeee95ee271c139fd3185b5355fdac9b068d51eb9c76d0fcffd5656e58f9aeb26a69a8272528da837837d075685ccb895f22b74bc6215dafd57fdab0aab750389999db40c493c738eb2e00a985dbc9190ff0b12fa4eec317ce05fe289cda05c4f48717802be34085d305d137d4030f14bfff28de5e656bfc906eb71e53e93420233a423183a3af34d9c22d667e5b0341165802a11d0ebb26c3c2efd9fa6c4712cdba4599f3587b0ba46ffb7fab6c0e6abd0229c009721c5c100a8da2b7eba5639a100900a48c0cd3dd1323ca82bc99555b0583834918f7681f4d79c1b2efb6db344375b0bdc6ca532bb78c8f2cd50acb996afa310688b21097939b7e15ffe241405b70f0678f1d5537622016d13fca941f387514674bb71d20e4db2005a4915f6961e407ca6e6d9fa81cc6a6978042789477db7295e86c56644921f1ac652bfb545cb83e0deb22fb27ed6689a922d93fa0301694b7e73b8508c9553732ca18deac54d4dd598ea42f5cdee9052dadf6b0ec6a0dc2f6d18b70b76d5f3bbf5bc0d01752202cd5e05b03eef635634ca70395202da8447a2dc3e0173c274579a18c983d5c8472aa68b041863e33eb2d9a67b4e481cf616a834d9dd03e959d8b23e200c87de8f9ffae09afcbbccbe4f90d8ad5de6f6a62ee5c906f8b7b928a1b692bce5dba3407fd3bcf17667ae698d789d4c2b9fe618f303ef41ef0fc045552fcd0cba61d50e5cb966b3ffe806a4df095ad421b379c3055b4e171a6c8d547576337bf4bad24db934743ef3cd4414c6bb97d1cad20048d8843bf3256e7eba65326ca72f47298307ad7c1f1c88051dd717dac1916c47feeef75f627a76230ba6dcef0ab4875952eaacd4c0c498c84472a6aa201fe28f69ab2d1ee1942408acdcee21034efbd011b4bb14b0767fec0d4bd07c79c0f5652dafadf10cfce89e3259dea94d39252c640840c28abcbe0efca53dc84b1ef5579f6ef28c213f445220b036fe351d93dcae57e654ac01d39f87213723f0a462d5536b8336dab5c7d2fc728f865756b85f7526144190e0412c3142650616dbde7cde17e887a60ad39f2a1330d8209f13233ce5431fd5c297238f8b3ff53a3fb89c84168b04ffa8f7f53e14c36a2d3124d68a27fb55e7334613f65e3057c74a91e309c9f325641ac593ace9dfc2d9d77dd7d170b57a41ccce8c0a5deec43a76fabec3b4a96f6fda9ce8fb14be68b2dc7ea5a7320a0371d990da3fecb3b1206f43ae466926596f531e63ad2817d244bab7de7fee517803e45dad0b9d27b5057e1d200659f26a0f2eaaa2379654761c1cb9c0c028344e54975572f1d1d336463dd7c287f98617bbc7c2132ee1fcea856ce52b1c522afcf04d38ba974d1ebb8f2913f44fda59f8f1b90545078d89a62d15da4be90e8e1a739077e2404192cb3cca5233c27f06644d7ce496361b831f8fb1f9c1bab0061d3aeb93889171b7cbdb8c030f8459e4102b7dd0a54efe61dd09cbd41b05e90b7bd2c90c2c1f3ff663e7f8a6f609fdab53184669f0c6b8be6547cde9b65f1c16ccb7a3423b3e0ee6f9ee9ade75d7dca4c3906100e721dce12eb622bb323abba0767624e634628102146becea0d526968d820584616d4cd82bfc174b90d0d6a410f8aa868b64128c039cc698a3b2e36700744969a0e741d0b9f164e73a56b8a60fe61b83a1f4e58a9d09c9b0f7dafc652e789968d1c745df42310fa7ba9b99e98d987deeb0ddea3478f68ec1a437b9b79ef4bf29fef59e2d5024e0321789c3941278986ebd0969b01bc9de71b3af6186d85281532e5894e16a32a13159077dd024ed33acd25fa9260eec81682b2c3ef965f8a88e6ada712419c3184b89fc0ec54d5f184ff6c7f4bfdac53f4f14959639cc50fc84b9627b1de33f0e29ae52bf9a14360d00322990a206bee0ce77d2b26d95c044da23d9fcf5530e4c73d0f0d87801dbdb678d6dc6f91a3d2b8c5bcadabe49b24a3bb0253ad3ee9897d0f7bea1869db44a2b0f7cdee99face932c86756546f8dd44d692f7ee03e46bae82ca461ed6f2a21f5c03c209c1c72e267c6906d568fb9abb855df0f43ca7e7b64768a62d400a62a6ca996d43a19f7ded45e2d68ec329e97257c1e37251aa9a4ecde58ea64d68e2b39d17241ea1ea3a52197278f40dfa45f3ce7d23caeb730fb276bf642c47b4bed0340b9b0d5b4defef57a642a771e33cda49de46705287949be254cb21e77463873ff5169236210b3f80dcd81bc77b3a706a63d0053f5ee55581443819750e6d3311524b4fbb1a18ad35a4adc35738cb6090bc34fbfa7f6e99e41c1f959909288e48a19d98528f94c2e69c4820a9926c256d3609b72c5f8cb38b3af608cbeb41d3467171feb4f80c1b04021bc6471e9939406fb2e94d75ec4cd72f6ff5763b35bcbb308d052ae9fb002e94bd26b843ef06cad7c4e4c658f9c05877c1ee306f70a4e76d332e4cebce2cc6c280c46598ba286cfca44c2f8f31b8af92b05582fe8f268b8608ec9364120b5cfa2b11e7939728974cf581f17f20901d0eafbdd67eedabf82972b296e9430651ca00b1a6ab1251ea472d18b4bf42d1515a0499a34718cfbdb60532bff1fda855b096063b65a86ec689bf92d1b61506ccf3738b821d9cec5cca34cf77048e8bd92c7f920e49b5c9cc732162e0fa13aae06960e5fb38e69c55c485fb6497920b4cbc11e7a7dde6ed5ca2071b5af1cb384c2a513b674f825a29337d49013194c130ddf1799088a8540784b52eb843b83960c4c91e6eb7fc9047958f3ac5490328161092ba40d076984d99c00f81564718beb73ce16a08c1f951793033397459ba7cd27a3c315bce24af5fbc503ea00470b6802136f1c85edfa74d14e4c61a24e2c5c21c720a713b83ad551e7348c78cbc08ae1a819e6d4fcde98f81a203c0e15ba13dfdfe04b73b2fb8084afb48232c64f59f9d53b86df14e78cf2b0d7aff1b6f6fc4a332e89449a36fe7e65ab5498ff63dd30e2fe8510fcbd57a5589843b4fa8a1e480b30eaef3692582551418b1140a21f6f16896ace7e0901fb5a8b7ebda91e81c2ae0ef5da4fb89563bb9cae044fb4269fbb05bd80607393dbfdd9eb758b592ea165f1336eac4fbd1feae745dbf542faa6179907906ba2142c8aaa0f4467e42ccb78012a131700d9412748d9fdfaf4a46e726ece65673f8cd8492574930766832a2f6564325673efb0bae7f1d226712bdd16ab9d671cf104c68273a1c831883ca5d1466931324f0a56ebed15c2416297dd4a79f9fe526182de7dbb1e4daef25e23a8cbbf7a733d2f1a0282cd35126ef15555006c92d037110881267488464bf18efa1df073e1e468e446cda293623e402c80677d8b5f1ab62cd8dc2ae3c03cfecd1063848643edbc9c00f71b44f9798c4c13d7b551c7b27b32c804c8c4e66c8bc832c6011a63ff342b7827c1b09fc8dd9c56779a4cd0a867029ac7d6957e84a367a86ef19607c3d677f6861a401cd33c049070b6e541a48285964cddbd512b4b92b982db64f8e0ac69c23cb05a3741b06c0be99182e44dd5a103bc65a4270a8d31ae2a48ebfeffbee923700b68b9bb42bc0d0bb18d7f4c673f2b3ef4b2c8c8702ccf90bf93e0c812e0634bb1d06be8f9dcdffda06cdb48414854fb144ffb0efc6b64d9c8c468e2b234c8f42cfc1271ddb5c9e8e689c0ea69a2c71a4ce389843ad6b530ebe65cf6a6cf9b93045279fdf62d12f4094af6dae937ccc424d63bd131560abbb16185abf4972352bf3c67354d2d0448931944bfc9edaa212590d79eead1aaa2a19eabaaa676aa57e720a3c0e99ee50d0c5d73420faeab58d67a25926b30de0e4403969bc45376ca0368f648d266fe6afa7d4b0ac5611592c0faef56be5cee2720f90d245415d0d49c7b2872116f9788e7e394c0f2ee31f66979fb91eb3c2214bfe9daf060a6009d39c101e8ad9ff88f5af6160b9f3c47ad5b6012ecf8b7c1fea939c3a5efed4e4c62a24952aee068a6dc1e9994d3359fde1e15fc0fefb7150c645391ec0ad20209a086c7571d1931f5f4c3e40296c080b2380281a1d72364677a9d0c6cb83d63fe79d544a0013299a52a4dc0fef0c53451338d694bb9e2f7367381fbce0116ba5077f788d56212e9de0625f530ea2d01e297207bb49cde16a2d56527b9ed454f2a22555b9d48a368c711b14b3f8bde308dea22808488fe09d32ab359d685b36ab2015585a0bccc6089d25a8ad4dcc1087cb6fb4165862a17f0f9d257cdd04653109c60cd87c575174bd1887996e3bed3d4821283fd9c4a8921cb2ae945d6e7516d7bdffcfa6c86d63697a4e12eaabed7c0d7d111f4d547a7902723d9e6a07faef12738daa0b8e8e572ab148a4339a75e663c9fb2f33607b9629525ee5935f4b0c327d52f22b1818c2695423c7e9663aeee39e42da2c97307c29d98ef469e30a00c031cc3275f3a137bde94bf87cbd80f8156094ba89573d9d6c8e4a554e119c6f344775e58cbfcc1980d74da05e0f0cb471c74d4aea2f076c69d71d82c089969a1714dc75dfcade0a5aa4957a0db912967128e905bf9d027bba5a84f761a97d23d1205c7ddfa36b6cc3e7bfc01c6a57009c1bf4658a1fd34dd66efd4d920fa4af0af092681ce808c33507292d0a813e957af70c04ca25de5536aaf2dfd21ac17e2d1c0acf07f72a9026895e0b48ac3dc766607c4e005da81463951238b2594813aff9220d215f357620e4eb056739d90916eee1bbcd15b52dd593b7e2b359ad221c2e74cd199eddc7bcb05c85e6b894fce4d8b8d870ec79e4154d7068457a650bea127f693124781742620f1737b6f5f558d48e1e9c408ae99b28c833f95a0453a24bae7c088e98e75a808f33da937094fb58ce18cfc05ca0ef9c1bc03f770f7bcd309e70103bb4ba8d7259666ffc995e44ebe5315bea63ac8b3e07a7984ffaf6d377abefe8ca4ff333edfa293850d4b3bdf48002f10d345ee675085494433b474d776335e2a8ff43e629fde6e42ec737df091b080fc7434a89e79a51a3ff550fa3b660fc9e66170f2cdcb139f3e4c54d10a012ab089714f20dfc3a2947e2ec927ecb01ae9c703bc7606cd09ce81173760b4003868bfb2de7bb296436008c4682271be1c63d55d20f3950b88a21433645276f6a050a72029e49f5a5126e5a1751452f6dde21857e39103ef58c3fe8a23ced84b2b0f48a178812f77958d1eab382418c2240c99da4f77d6df40da4702bcfc6367a14eab1e127ae955d43ebaccf87b4a89bb895fccaace99450a8ff88576059eb3cab4d68040f8565cd9e1c1ebff4070b2680272173dbdd1887c8917fa9b1111956eead3ad4a23fcf56b1d3cef939c13a7f41fdba1506d08105f71af48714745765497aa8f78226586519a32c2fdb7bacf2787a1542b06c5457aeec55941d0c1bf4564610d111e19795401ab4b85b8ed92c8e3cc1615af918f97a9631452d40dd609f8020e5f3e9e343cfaaf7272c83458a1da65d15890f3567c499061ee7ab22568fd947ca8ab7e21d12c471f0e0e18897815726c3ad27302f27755285bea37122a18203e358c41a6da407a3a9fb3208d163bfecf049d99fbc1dbb951e24d240716f3ad3c4e0a6d2d21dd51ab6eded5cd43f50ee2fd18eea9b11cc4c5cbcb026bf536435e3b4d8c1d6cacd25ac3b8bdafc6ebac8d6f6cf9758ae37e6a5e8b58a68f89ea8c437c25de84550730e669629c69c4dfb8a0c042c513d7f029e3b6ae20ac92abaeafbfc1d8317ff8131e184cfdf229b04bd93d520215a121eba1738d4014fc8dacc740e7733ad2acecb4ed01382ac1252e620bb09559e81996 +MD = 0d61f8f4238bb647fd02199f8555a38d2eb4ac07cf948d499eabd9e77c89ca753963e95e036c6673b6c88e010f34c32c57d6f103de1b32291705486b29f93975 + +Len = 85768 +Msg = 8eb0ce96cab8bcf471bdff7a31c5508c306cacc2f23756e07d261f09bb88e52f1f135ace8b3406da72a490f63a3c39e6e40aa947eea4ee7d78bcc2eea7f50c6e47f5aaf9b4bc6ea8fa3466de3b0961c251baaef3b5f127779f106ff46f0c77224c7e47800bf7fb4652940b9bfdd3d009c0a5442e0ec50ab43a47ae83dd742d3477d5b8c9598eb59cc2ee079648438fa179f3f260c3c89d1d918c0703b7d6368d1023853e6528a4939167e036e301a574c4cb41f19aa3ea9aec0503dcc6d99b135f8f3746f96ed111092920e298b41a69e955b8495cfef91492da2976d22663b0ab425548db0843ff705c4e042d04f7672fbbdfd0d180d071cc340139a364964b3e6467aed49d02460f27f3036b9b4358e0223eefc0d2799be23b148e003c3dcc5e1cf5dfacd517cc2eb396471a1e062342b45e0cf29cfc781c16e9dbb2565f1a549288432b5a897b1528bf38023848b09e99c69130855ff2c1ee09898259041f68efa74219d1603a0badf73eea8f12e73bf9fee44035acf01beafa0135ee34c2e15bdb443de5a5f0596ac4c19ccb6bb063fb8f6fea55eb59703346aa96bcf8eb09fdabb1603c5f874888b129de955cf35cc70098f88d221709f074eb6c6c578226fe9ff14a7e96e61e2f43de7995ec986f86d9c930845b112e4a0d2e7ea55a7081853f6cc35452f52386044835722387e460a3695ce39d2f276998da9510089b62bb148b93669c9ca1b67bcfd9d409a8037ce4e04251f1593b749d57795469ec10c8a5b4815b7bc3dee630dc2f65a7e313032795ab775d77b393a50cf21a854bd5d37a5057dbf852233facd5fdca04215e1cf1f25efcec71d7f03763c80a65a1f7041cc8db901a31b8e976240cae28482af0cc5e258aa32fefb0dbc3c2cb10d4bf841282d61fe949e50b162f24b71c42c0a73f41c6c68c9a43fe1994aa068ece757be4e80f336d80f2ce15600c8de7f56868d3040a5aae981b007a3f4662e87561111b615072afbf2659fa1e8ed9914b6a5b0e0db9ee1112bede852a5f8825b3cb6c3e545f84b6efcbd54dd07043232b0da97bc59b29bef175c1c3bebc1f4d6ffab7d52b05128af6276997e07b72a47c9a7a9f9477b4bc1b88d1ba6327d069913718694d0ac434be823e5eb5770f1c2859f504e31736137a3f35f48266437f00cab781223641bb2d267b2db72cc19416924331184158ccf5e116f981421f9aa6fbbda5125132272d5a49894e6231122e8d8bae9dbec2ee73b89b4fca830dbf6a12525d85223e81a565d0fce2e007a15891f604d8561b81de0aed80c3f1b4f834569d32e3720ed07c90370ddb6fea467ce8acba33d00c8e1d203314d653bd4cec10c7ab9409491c9c23a745a1d7820b82d8d45814f63c1b184296916a73cfc47b88f75100af986dec66472a9ce078f752aa9766e58e5433b7b83e81e6179366c70656aa902ca3cc54a0404635517412d5a61c6d0d61fbdbe2c9526bb408b03cb9d20c40aa471140bc1bb921d2f41d65f1138cf5f437da1d81befad83b0ecf4e3933409bb8c98bd20c1ddb41dd8f1cf78f3b0e8402d898007cdf604fe3f098a230731b41207bb8892cefcd30bceb18d19864cba49f0bde8cbb74a9581478b24284d8c4bc4c22416d05d9b876d9d0baf9f2d7eadc339954ca26c5007b366cc6361fab6394a289cd867d22c4999a06aa7987dc94b4264ba1c1a61a8b41b1957b84e733224f8c7705dd7d14182369548f593dbaf1b5e0e76e7a21ba7231eebb7a36c6ba277770b39079eef5dd9cad83129ffebb2866ca3562fb80eeded453a66b54a3869a93b8061862b60e3a8acd5bda55b12562504aff264eacfef7b0491df4e465e0a42ccb3842a1bfa7587733a490823e41c6f9c90b617b8c32e44f39eac0f0f6106dc91111b83def085fea4626db2f8c577debb022bc8807d1ce3989d3757f3d5e1cf2f259223e3078766c6ea9646385afaeae650cdf7f0725dcf4a3a1bc9a2212d930d6d727ad6941c58413f4d226109082c8529171677374370aed1c3c488d73ce092554709182a975ba9dd0ce80154421c3dd791b4932070603d10b9e9166ca20074798a5f262f9ae967505007a7d11b227708b842c2e267265b537897d955ffab2a56b6dd8f37897a1015b0f1b2e405d7a729054184e19a3ba0369a615037a8291a595704c1c705962aa9aa46c11184c464b5135167a27c08922679d609663e02cb0dd5755c5271b61d88966730ee3a4126293cd2c9a99f15b7af9156637613d0b2f0ccafcd6e60627f4f1fe3a0ee790672121c46597b760b773e9b630cfbec1b788ea704838f5423b649a13c9f76e36ccefc2c3c657c9322575fe29c544c093b7253ff241d19cf625924c4e26b3bebec9343d7259c317922de8ff162e80b0dc936cd3f7ef8a234b6ee4cf575b281f51e6595b7825c3e9a65834b5247169d6c3d4c76e285b4cd1689dc4ead57040db17acc4e47e324086962dc1e8fc98e97971019dd72d8cfdf0753a9967706be13937a2dea02b8920378b35f85f46aae7e20da255d7ad8a86c69ccecb0cd156f580d9510f5628314d44adf63fe4a9b04a5ac03f5936515ed09c03e0c2a2a03863f9273fc0d01c32adf523faff3dcdb1fc27b26110bcc00fc2b9d2f8e5f0841a13ec46f657d4b0952a9116c9a1335bb5e4910a8fe230a2a54367329e9ec02603eda061fe3e2b8c61ab62ade98b8efbc5eae2f152375ca1293dec4b5b55d82efbd95f9edddb9d579e17ae11e4271654e7f6608e31770663a2979144b67001430bbf6f251d98f1b95458be6942dc930f25f0550ab40af79018399e453858030d3987191f45dcf15c8c55dade8911ccd387c0078c6359f7d1930b5b786775a6368f19a5b4de0e63e54ef64a9843308a49144fbf3dc7cacece1cf40f03ce2fb263155d5b0b6f9810ffa02355bef7a09519d483c44467c6432ebadf040ef2efee3ed23c834d80e1c0508cc444782ec9b5eacf4560cacbb61f9976b180c25d1b236fce9c64a19a513a8019c15ff06f13b2640e7ed9f77c002ab95753cc46961d199e11674730445048384f02ee4b42e65330981478f2010e2c3365ad30c3255b9872a48374220646b020377039b42faa61f675f185e4e246edb2a8a7f361933f68938eda339e689b3bdfd8f18851bfc7a55daefb48f4a81234dc292a5f47662f50aad752ccccf3b7b11e3b6e224a79a5e40e4a1c084bdad9cb59ef1cba9e29951a5f88d586d52e03da8466d050c8e6ace9b1513b0f10000278d202674d8d61d88c59a74aabe1a1e57eba63fd5af38c457bedcc3fa36ca3f704ef6bf1603d98606f413f988117d5c664673adf88f2f5d6616ac2120d874a1f375731a43bd655958abe55a951a0510f5534f15d21eea9c964d13b9b95887de2d8b35c66257f21dfa779f36462a49d2619c8925e6f0e2e844cca3fc28298c4a8b1aaf521686083a68c1920b1fe4a427578cd24ccb87b0e71e1fcd76f1edea8d988e502bc4aa203520247e5786bbac7623ae8b08e455cd1f6ea100a8aaf83b0dd260b8e1f146d294bd1ab49a1f21db45726c33d8c5edafd7d31ade1fb7eae651d53c59e320de87ef9c1ec5415db9b92bb0506d3ae4b1d1c6d7c7c62aad3884dffd6bb3cdd7f3c89c59ab30eba6e5be8f69f597adc534cb52e94259780f639f2ec79946f08b090d21523a78079f3863e70bc623bfebf8f5128414f88632ee8dc4d02f9409be90de2522571b13bb1431d9024cc1dfcd71077c34aa23c3cc4bd91883a91b57e72db40e569b8a9e6f1bb0bc09e3d29bee3f4af6779c8bbf400e19b07e905d99993217434b4257163fb159268f45d662c2b66827c94660d712a7c8230d7fcb1d4940807a9d160109b177a3aeeecd6dc2ff78c766a64273b9d8ab5cc6dcb1f4718bcb780ab86108e758d128abb4f4d93ad8e8e1599b1b04b5f68b503258f16a24b555667a19dddf4d8a4040a37e46d948f3995e77143ac489e0ba4aebfe988ca57a50f45f5dc7149aea57942ca75dbe6be40c9735be1c13744bca956a5a21dc822f508a10e0c7195ded898bbddc8429121eb5141bd55972238c3ec823e827ea3968c690354f588e050858afcd6a7489e9f8155d90065d710626896baf25053639ab45bf32f5e5c33ecf4768d1fd89514224cffc48dda290aaaf3cf8729d6431115b306fa071095959a6d85f71e23d2fb91927589cb7b3417f8abbe6f4bdaf7b3f1d2919f44d4dc0f4237dfc13d52a75bd39cdfb02112a13f34d98cfcc02517541559246b4e70d9a8cc9bab73e32bbb3dd2b266c1f965178a46c560b6f17f4af96990e9e58eac336820e112967778b7a8751c3245ba3e3f0116b7632444af38acd5be05956a52925726513bb163ff42a5a4216ac4cb63c1ab8df7bdce227f8a74412da3034b28a07ec7324e4c0e89053b470a36c4969c449191cc953cf4b5e85a9523e9b89af802e4e9ce75efe0dda872471fbfcf82b370b90b8013f7201af964b9e9ff3bbd886391756bd62341c5d2528aa82d6cf76eef2de45961861076669c95c70e141ea0698e5452996f99072be4f9eda8245d9766f502a0a4712a91d60a12043ecc230abce26ccbe75c506c5c2f7c36577d1df480174f9c0741d832f2b516eab6ea368d0595a71de871cebc0d3bfcca62019d4ee39db297af7d812362a58abf9ff6bef0ecb0ec92c3367cbfe5115ff2f238466c378e12d7c7ad8c2acde257cc207823fc183a2270a133c03c8db88ff62fa9801825f359a575596310dc75635962f9cc79323b3300a9f103fdad38721e40dcb41854d36e49e10a6d9c366598ae8d01232fe1bc068a04f7aec8ec9af2b14d5948356e36390b3547129883badd12c8168fe5cec38356d9cd2766f2e5f6f980a9a6371825a2339699baca6d7c19cf3bc27865a15b92ab51fcd89f6821653cff5334e6fca691082e87cdfc9ab4362b0f8c467501891bd3940b273af65729c3f2df5c0ac2c4eed32599b3f4b26a1b6f6cfc62de96570614c9827e01438e29d682d5856a1284a1dca357d57b5ea4b0e2799b326709cc3bb718ea44baf8ce4dbdd6be16cf92f0926bcf4a9958466cddce5ff01fda02f0a303aac9e12ebc1f7dbf18227901ed0faac8d1f9685511c98a79458492fe28cc2442a7aabd25388aa1256d8715c8c9e9cf3bd2ecab3867c49f2c54ddf19a2467a7ba371240671416a138ff7752eccf87ea0bfaacc8caf263042fb485a5779dca15b5808bd2bbf7cc653df6799834a6f0e48170c029d357b0a2ca8c04175d3cfb5479ad9cdbea89b2d67f7a164f69f62ca3e55db0341b41b35f4504e0ae13a9044e4ee4cec3bd73d3da45b1d4df536944117fe8055369567324e746a3d1638bece97e4da7f2f95d345ad6c63eb1baa53f15963a46ed863ef8dafa77d4ea138bbc0f5012b1d069eedf3f7bdfd92b66522596737afb693ba24a67c4c2fc60ec507ba70b5874c6d4cfdb6f7c252fb61f19ff7e5fd1ad314e2a72b58e4da29bb6833199f84a773a01a830d421bfc7bbaca2d4b4a067e3ac877d77aa9f404e0339cbe7cd5f0d4295b920e755b2d529a0d694ac207e632542b044613041c489003cd1a42a88cc5d40c4df06d97691decf65978faa43edfb5b8f26382eba01d9fa893c709abaad51a1ea8e984ab6196dae2155863a352fee5feecc058b531ec959e6b553053ed8a422f3d5a28fba955ea7d17398b89e4e85b693ddd0315443de851ce456515d76e12aa65b2e90ca2e3a203f9cce0cc47549c946029f07059aa2e6f37080675caf8d20ccc943352e0b878331762e1ef0cac0fed1e37cf5ad489ce43202da2f86aa326e2dc6ea662d56d03770a9c3d6697574befb276ee3967854e8a3416a912290577b91fb2a0b10349aa4c4de921d799fed728b777eb9065053580cd63a76778885afc00f0b0c20cf6f32f4bda5d96670b1804a7ab25f46f8209e366852c4cebb437281ab9551a24fd649caed03f4790f4a5200d914be9e994320e9a0b8656f51192c9e77d1c2e1dc58510c17b454faa5404e743bacbc555b4548ec26763fa2718f45dd1ac648249c7cb283e2c1e3315919de70498042b565ad7d09a1943caf432e25073d7cc9b2bacad4f7f7318765545f69baab9b3904e0032606b91843ddf07d35e487fc2ed45cca2030fd0c2ae0bd99571b0802878bf3d0adac170c3b76a005db3ba14d60d2ab05fcf59d5ab3e8bd500f5b08bf1692c79a79c363770ec07a4c80d5327746f4ce02d10f7f240ac67c0bfb4254d8cc6183ecf2134462a304a7dc8d7be383c782ed4908474a7217c2215282989458933f504b806363d4e2894f3d68f35c78cdc332630763a64ac223d5ad0c246f44527656418b7d68d5b39998f57b05445e3f00c3d7382b3db6f333bfa501af8ea6f14cbc557b27fa6dfe7aad8e2d7b443e0481c82d0269b4bd923808c1ca019985570aab10b82ac1a5ab75b490e51c031f068e6aeecce3b667877bd78acde237ea6ef74af8aa4e6784a2d2d6810daf2a092c6fd0a10062e9bdba445587731a10dc1d5dc297ba5a9113ccd93aeb0cfd60045e6b24ce05aef5c613dba9402470cd634c823a754e18e9590fd209554ace4e1984cb8bfd438f838b7b87fd3d49ae1687e3afdb18d04e175e54046a482fe99b4f87d82fb722cd3b12d8917607489a9251cb2ccd0aa6c5c32a84b8864b2318f0af4dd738830a2fc46514413e258bfdeac8ea4137d33a4594c6853684e68e21f53fbf13ceea637fc78c15df7d1f789ec6f5293641f9f296323941c68da1d8cd5109c5d317739583eb8dc5b35a7e7947ccde70521506387f468b9eb0c90569e4ad15485e3ea60804d9720a05fec8f5bea78da8dfd88273c978c4863b5f99a92eb0692efd690b24c93843ce1c918854ccfd0ab723b5f30a3c6fede0b078e50173030f61f8c12b529cb106f8413a43fd39775b8767d2e367a0d40e94573b72d77a4d0fc7976d8df843ecc570bc21835acdbc8afff257d9f1bd4e2d8978d1c7940c376f4a2295b9808790871ed56fcfd250759f060e6d5e105b8654a95b616da1f16939d1e0633850304555ead44cb0cd8949a086013cf92c41238adb4814ea64f18a75431afd91d206b536bc00dfadb341e1976614eb32ad38ced8078612c847d342298a188b4c6cd186327ca2514eed40e48b8e8fa291fc082f44155e828eb1613b5f8d2236f2885860511202c91be14efb85e5ba8b9f7f79edd9ee188cc50a611a1e3480250a8d64ec9c6668709df833ce8c55dccbe39f52b19c78fc5af4b99c8a6f6779821ce3bdd11a601c6e5b9ab604a8c63f8de5c45d22979c5111a328da31580e5672b0f22bb8d3e965eadd30a145e11e29f72e5760e9d14361dc5bbee3b7e411601f4f217649d0e78d0cac20ba3b4046e33145be24ad525372e1a2e37ec51858dcb180da652b1844dafe4fd4ca8ccc26b564b263711723b6cd4803ff7503fecc1550cc85c107b3e695e54eb298e08ea6e6b8feac0fcf4b52ba3a037a8e189d535222ba885284aab705ec3224eee08cafc054b003c57cd21180df2cbd92adfdd6da52d24ce04b049d743882919233d027896150cf5cc6c1d9695e052e4869273ef6069c393303c98228f4c6614d8262f88a0667789d571f94bbdf16367af52271ee67a1b81255024d6a4687fbe77548080b6c7c664dd4f429bf8ce83eeef8f6590a9c682f47e9b6e682564bc928b38c4154ba170037e84880bd8b02ac6d1bacdd92cd79079866ed35b84d9d32d8e53689ac19c0b022392481fd04ece9bf064be4cd245da9ce75af215453029ebeb24cca5db100ded56f8f14c6202f5eac60db5804c69b7bb1bd05949d8f0475a3c3d8ebada95ef01933922162065272fcd165207fdebbe708e7f676dc2a2a204fbfe1d4e52a634fb62d349017e0dd8c7603ef24869246549d9a8bad5a4cfc058a4f706d4c5b956374047d492ed35916e49b844c610ac32a367fcb225c1b038d1c1b8c9e2c657f941b607534ee094d770c442980576fbad09c3dbebd2dc2c620ccca3d4fcb6fa64b72eb253aa1aa4117b6a4e8a8b1e9b3b0977d6c671467ce2763058b6873a294ee424a94418dddbd5eac63c8acb89f3731eee7de065833a108aa737fd16a26d0e75328ca32fccb4ab4b52ad274b1bacdbb6b221b83424dc92d66bd2072f822e29c6d2bd0f6349c6f8198a10ce8e761feb6d4d72bc71addcefc628a773367be537758fbad737e77b52d1e6f80f1a1bd518af2ad17b9280d36df65838afdfd24a9dedb4169932184a3200f3c367526f64ea08d4de640b3038b3d365063b604796f3bc0a50d3d67edc1c233b2345dbf337d5e6d5ea04605e7547e9e980a48c2e82af5cdcea05996d7977c51778492b49c672d59894eb264e21a096503859980966474cb652acef76caeb433332efb4d5b93761a76f66c191c6448533bde9385aea4208111b486d2d48dd39f8f387fd295899f78cca35b6bbcbaa22fe51d1d1b567361b97b44686f37bc425e32ac088a75d2123b345a69a4eaa47fc3ac481e88b6589f394be55c15bcc46838c6917dbe20f5352b55257d0bd0ab47d535698015f8db42ca289c4a0d8b2cacf4f0f0c5b6c17a7210d80b7fe79356632e2b872a0a4184b234ba731aa0cd7c785c5ad0caba7eea30b1641558815e2e399634ab04afbcdc573faa71b413aa3d3336ac3973127fccd6d7a249ee2157ba32d5f8dcf64b8e6a9ab3a09e01b149f6444b8d34a805eda8ce4a39b12a0ea682b6b22122e828e2b6e1574303e7c1d32f1563a6c751dcf0077fd2d255f492740e2ef65485c28cde4995f43ca74f8a6f700d469ffd57e0af6f5137153b35f3e9e700693b0e6cc0aaaa1f5232932255464294bb1fdba056536bac40a96dd37a2c9496d37ec4ce0c6f61e539cecd466a802c128bce6b15890380f8b737f3b86f669d57fcc5b0d1b755f75171b85fa51144b7ef7e56b49ec0e8389d6266d3ca1abe8baaacb7d85b0b83f3cac197502692ba69945c5cbe24422a1a0309df17f3c25de4f9aafc46554e22ddb7f314a9b0340bcd67ed8b928d58f0ae93764ac71ab16a33abbf3d02a8c9593e82cdd6712d415f68d1f98837c34a627db3704ee9272d0efd28b322123ac4519d921886b084ffddc43b47feb5ac60aa0eccbe9387017f71ccd74e5280f58731824f9bcb6f9db7ae680ba0931532e2ede94729c2a892efba2722577654c059227521204eb560b0f9dcabccef5e3c1756978a798355c1c412977098359482844cff706db68ab534e7a98193bb98b1480a9fff767d957648a0a32ad7384a254ed6a7a44cacf68489a056f7bd9fcb7bbd34890de7597099c18dd3b6dd267d9000e9f62582d802b5f84b6b7311420081befade1b96beee137800af7d72a836abe1ac735cdae1b530c911705f584d3fab93842593495518cab522c0e75d667c5e3b48a6af1b7018dd4419ee225a678ee183fbe6dcc9c6f5a7c01a8d5d6807579154e417870c2c31a4b18c6d24df39f70bd787aa5edeb88d92e0119e455934cf2c76a94f4d77be0a6e579173cdaf6b8111d84ff7814fd3e9745e2f7c08f994ed17e7bfd56722cdab217f518a8591a434dbcb7c58ade6c01033829bae0f10d0b83bef4d313fd5021aa771f339b44f8c1952fb35524a69270ab9947ebcc1668f397ed87bec3b5a0561e675a009c2afcc375cafa36fc0a1afe0ecdcff2f85c27a76c9e8738dc5787d88c8d38080177a0c97e22eee3677560199b6a2478ec5ee387905695a9c44f6129534d2ba281b77f33fcdc13d2fd850c53dfe2d7d61e8b0724a18a15ba1209d6d9211bb778937702a3903b0b8e34956a2d5acc6ca3156d1d0efecd99b25c035368649d6de29d12b598d6e4389d933324068a7b556847619f972675845b08e86147ac36b189253722741f5c2d599ffaa48fed94248e5b24f96da73687fc8f157b07567c24c4c230b3c5f7f74c7ac1387629f29b5c9d9713d4e30f74f71f75171b27f1d23a3ddabbe41eef6a28499d99035547f5500ea1ca9ca7bda5645c4179dc1a0cdd545cf5155def7419437e8b78f6a24c36b169f195cb2c306c520b7a9a185e15f2159aa7f96ba8148920622174aa818dd3f3280d11ead1162e42c597045a849bb4f07f49c4b7e94f3e419ce608b9837b6197d16acb6636cd6fa9131d453cfe1caa77937103ad1382ad19974fa18e28934411fe813ee7ddc4a5177c83e91a4b07270d4fa422c5c76d5a2ae9d4db92d1640fe3f7f6c8ca369a62f05a414c9cfbe9cf443c69ce8c755dca07fd0c13821e7c39a056120597c1cd2dd634fbfc1f8133179ec228538b9de27103595be5c6703a35b9a18981db1fcb7a3ba51a842c6b81748f79665e2da189e3df774aceca772ca8a262c3ba0e9113bc832303613e1b438a98daaa5afd30b2a6eeef6f3b1883d1e6ed02370a9cd644796f276d0fef20f7ae3d6e7ab674cbfb1ea42a2fb73b36b8951c187a10205fcc45323aae0c9a1d1c740f9d4e0d2ec3d1cfa1a002cf9d004f27921df357138e29848ec55cd3d950306061efaacb75c8c54e69e99ef0d8611402f17b494bf0e1cadbd76feff2277ad1f7e6fdf78e044b440f6f8f4aa757d985dbbcb8d26b431b4e9fae82dde40eed5f9f0110daa134abec7724d9ac7fa5ea4306566f2521746b136466b6bd25ea3857ea42f0cac1919b1d3a1c811ac64d13aa175106b83b2f81c7beb273e43463dc495e1ef62e4ba57954bcc8ee3c37b7d649832f0811e4becfca02f433199be659b26f17999bcbdad72163bca9772070b29fde62fbb8cabcd598c5be8c93c8fc3101a1af6399aecc2511e36a2b623cf2292b8d7f4a2359a413c29b63d909481fe2e57a58ec8e80d3f394a053ec73d9c6ba5b24d68bc81dff0ac5e8a6b0d0a5bbffac6da68d00de9cb3382efc75228368e6cd192b394d94484b1131d99c804e7ad7e4f00add871480f46ae3d65e04b6532effeedfcafa38fa25330b9f04aebeb71c1db6084697cf2b27ab7383ff810f1ff3522a56b974889f49b9ea4981a2830b2cb5043160a96ae5dd783257e22dea19f4623032ad331fa22904326b8c0217e19a598ef8b432745b866fb4f49e61e3eb72aeb4f5eebc5aad43a088978c5409c4e5699ad0a9c97806a2e07fdc9cd3690f2e960d132676b60b1a2d51301b0ec54f8e63dc4bb9e4e251c379076265e8f5ff58c6cd0ccd08de661cf930e7b098c6cbf5e6a7ec7d0b5fc758a7c03872291736b1bf69654ae92028dc928c00e598aad4dc50a2156ba32cf1e2eb5ec149fa494fa9ce569f387e27ddd997e72e0264ddf472304f68fe52e64be2b2179f75f31894a192392d0e5e51ef8467c6b1cfb3dca588040459bd81284fe8aaaf255ea9e1b04999758154f03af87d809f5e85dc23526e5a656a21b44f78652379e59c65512d0252905e74ea4f631580f566cd644ea59591e70cb372e85fd8bafc6287dbc3655c4c1e0706930bd9fcd75d7d2ed2baf9ae590dc3eb336f60c3efcb2ed973d4e3c7e4730d8280fca783f23c03f2bdf4d9190e4e32417c6115a7205aace9a3f242c5ba33e4713a9e565b70059dd16c88ce56202cba5ec459f902fb2f6f3102a7ece64be52e4b366d80e3bf6e9d4384f333e63d2dce8b91b68557debdd85806525caa07eb3d78faf6a1ad6ecba4c19da0c469c3d601606af34526598a8ac735ae1c718ccab492fea62328dcb126c3fd3dda214299d565c6bcb2eeea1a08f7070796dd29180621c8189fd6a793a5c34a06ffdd380dcd141b6f59221ee0a57ff0fb766d8b37b49dddaa72474df7a4580ab8afde22865ae40f879260468312ba89f6157321ce427fa5f844eb3e5194fa95af54a480b8016de9a2091a2f55c34f48840ebe6b20323fc76e724307461a139177a8d0d0f7531a502b27c007ed29a6a331cc8fe5f1f666a89994df2729864b849df6e3a1e8b261c99f78e28ecdc849306bd9681098217ccff637201c907bfac57ed94d61f0c1ecbc7b6702125c21af56aeafe789a725fab400b3b665ff6db9fab6ca8e9f93e403bf5b9c9f313cc861ac86da7eaf938668db4594f281eaddf18ac24517c966ab5f389c642a79d42ed8a860c3bdf0e1c53fdc317574fec73f4a0c2dd3895ddd7a47beda68343aa6b7acb0e905f60c1654e80d50bfae4b39242be555e053fb6cf365c872133d224905267c6c0bd73fa5d81a052fee1ee5a50f0facd705f7f0998931dc1fefa59f2f9a0e61866fd23a14a12e4a2b9b475c9f627dc93dbee5fbe7be246020782e2fcee8ace6b48c7759e7529d42d011a82e8cb0eed0d675be6bec04c60b10270742ab738a92630c173d926eff95ba1bb1b9f19ceb4a4db4e1cefaff8f238b86f18649bd3feb3e496243ba58bda955f404bd6268eb9c0016e0a3a900e84fef125d592e38356792cec90aa39260041055117753c7785ca9f64b787aab89e6b743ab39cd86f38e0d26cc00f2be8f1c959958964a1b19f287ed72cbf461cc9e70b57ba6abfc02c509cbdbb53c3f8379324b5a88b9d638f4466706fc8ac628cda7c24f3e4e39dba315487895c497f5a092d587cd27ab5de851fd78a8c24b370ac904865f38b2f6bebc074331405a4e0913e270e227ed0135270b384f2f637fcc50f6c187dfe9ec6e6a92ac0623f9053951dca6561f3dcb61522ad66e16915b88ec137156b8511548bd651382d3e6a3a7c93e889791f005035fd6c3743c6762c6d6e5263a668b09b401192a45f4b5b1eae682983504b65681ac999ffff5581e1cbdd640a15efa4256e20950bdfae8b869364375ad0be33862c4edbc7fd5e5f5e11d716139f62157a7ecc017595af21fa934fb716e0c29132d354db962529372ba52410852e082a20d6dd7eea6996460216f054c0679da7f577a240745ffe32d1f18cf968a92a0ca1e01bb67343aa21278410b45f4f989e568001b369932478d75bd779c5f710e385034e4e170b34dbf045777ffb7ffb9ede5639dc7ea9e430c54dcc3aa30202d652a63df1dfa97c9be6c1ed5e9ddf0ece13611262ba898682242e34e10ab1480d9233b145d105ca8a8f603af84b5719577f0954ee261b52977a66d71902ec29b1cc1172f2f80866d0768b25f70fcf6361aab7c627c8488f97525d7d88949beeea89a848a15998979420a87800f12f35131bd131b6aaf687aa317aeed6c7a7e0df5060fbfafe9ea7fe1721f9bef85fd7955ac15d42d40e80f6a127f1aca4f644b9a9a152a4ee03dc37e25c71d62c479110efed12744c79c3a629cc50b23171659f1cd3164831ad7f6709c3a7f395d0abac63bf18f41c1d98e052cfd18f78008aba325e0f8dd086d7b514bc65bb3ce06c903c9d36694ce446cca2993deb818cfa3272aa051cd2752e4a8cb171d628601de505f1367be2b51794a3925b7052fbfe2e651fc09c3f61ca4ef90994ed613906d24322ded3e877515ddd22f5c4f537ded6912607b61f34f4e8e12c96a8f0516f808098f71965143d52d7b2d18f7226e2538025a4127bd5f440ce823faedc92a01643bb48f56273239819a8b97acfb252cdba865d575a2c127f477357a82de3e0bd15f39b0de67c4b5a2b6e722c16c2756bc5affb2dc52196cdd567a53dec2b799d7da8b60cf917fcbe966ac74e4f3d94562b0a463ec39cc751fec6f2162054b1dd03426298a32c80ece1067f88800df7b674fd052f5c85ef344df806dad145d1a62f296759eda31d0d94a96181b319e6b226f202ab98c4549d4765a93207e6201f8ac58df9de641c4937ba37e2ef49a972cb50035880413eb57675a3c6cb1fe8719b7f9c1d7f58c5c753a3c7523d85871fea7fd1de1be5f7a46191bb3d24d86fc3eabd5b6fd6655fb06fcbda7aa4b5cae10ce734e67296c691901fbb401bf9ff3e00e89397ee74342b149a37022cc1b8dfb8f0f3188b3df2a48c896976b76ade0964690c3dcc6e8a61c978a891dd919a427602d81b70c3c407dc358d880013544e9ea68e087a39aa7a16cdf3cfc00eb731ce85a998290e84df088df11dfeddab323709e1a0ffbfdc9d8301e166dc1e59d549e12f36bc087a5799f75cdebaae29dfb6f9ccae63e667f2997c3afb39aac6566e7e329e3398ed9416dd95723b70187da3de19daae9895a2dfa7c639e09b47dbc6c47a7795a527c107a665838909be33871f8ecbe9bcacd5dee84cc5d8d7248cd81cce6aeb196e04f4ba94b6ad63642ae926f42a1c3af5b21ca8964a2948a5922cecf71f3cdb0b856681eab5ae64518a515a129e4dfab86223506a6edcd512154a9dbe3d90d3466de5632f2894f6cf7a4723b2d086e33d0d7b4691d9f865b23cbb98e96df0e966e4f7c82ab66800242254e99a67cedfcbd9aaf4d33485e2ce30064440566205b5112618a408316999abff14930c2ed6abf13ac0f7278c33ae19b3088da1f10f791df9bb65c6f71b763dd10c6567acae267bb314c75913409a1e4a4e96f5a2effb30f8193597c2fd03ff513ad81f535082a09b57097325f1da67547d24fb7f8d8370ac9adc239bf7881a0704b4dd28a407877cf1861cc72eb51d59fcff5a8fd158089ca7211389f14cb67bd3c0483592ff59dd4a06fd03df7568df35efbbdaa4c41e51a6cd0f95d398f93610c5098103b03d47ca51bee0ec606f708fbcc669ec0ddb5101a8bec685b40ebf218bc714dd635c41d92e06673dbf5b93722d2243937c66261e7ac924f0e81b9e70da2bf70a61dd53df667d9ebad953d1460c78707f59e857670bd7b7fa7c495c637add3170efe90544c1cc8f4cf880b0741f6ff99aec886d422391888cb7bf80643284caf958a8e070079b42d9620aba622fb0e5ca7c6fef19899f9e8fe2a692daccc8cb8ce2416bcb0091bd4a6018777903e23cf953c4655306a801e945251a2d0e533b10d7dd2ebe74570a883ad26e2165ae070eb7b058586254ba842865a1c4c1ca226f7da3b2af2a95317a386127c31bbc4df1f15b4f90654dd046d38dae09add888901dbc7e07ebf23807a2ed2ac5eeb3168a49ecd263d6384b198dc6ca639923765bfe4f1b2f7f162919bf9d0091a63c6ac1068b69397fc034e4a0387c3a4e53f3b86a850f8daeaa0b97d89a308d0bfe527e72629d7a268b928f520a4cf79511088fa786e48b4056e768350c4223e4a2d5a9d396f58e94416d01ec65c2003405bcc8fe792190fcc1c4761e1abebafbcffc2a72 +MD = 5ed9a434feb7ce1332733e6378c7ec0d4b079cdc80eaf5a9a7204d871ae6bdc685c95a9aaefb7246f4e882428b9b545e9a93aedd4aaabe1dd14461fb1694b896 + +Len = 86560 +Msg = ce01369d08d37dcda2c899c9fc0d11ccf94a0051b2816a1d6c3ad07fc8dd02d73a5f3555bc205503c4149d06732264210fc93a7ab30933a1458183cea9d54b6a3452b3d164d53957cee84989572f0db5a70386acdb5cdcc67af4f227aba93e41a523d89a66b8d0cfa88cc5da11fdb390aa3e0d6d92410c94f4db461236238263731bcb372c92c3763a483a810754ffbbfec3f64840826b14997ea617b209c0d88880b5301c2ab9516d64d006a3fb993d8dda6ac24de5a24d52243bbf87249fa9ca9abd0ea04a5b6a2727aef24cbc281e3dca91652233594708162d911d3cc8dd23b30c581fb851c851dbfdcd695d5466f8dd92b82533370ba19da316dd19e27c7a11c996013d4273d4c6e41d64a7c71ea5599643bfafe5a007ffc5d42d82968fb6fd1d51ada1d77496308c6ca462264e2c87c48f586d0b0e2084bc5576408c1cc1bf300f8dacb7d281631c4191561cfc75af45235937505ed676b021211c6b2e829f295b08268a957ca6bd25934a4f326719408728d35c970f1bc8be94dbdccae1e530ba86d6fac66e40979f120867f7ec0cde442f09d8c1b5bd2db6394886fac6d86fb66f85ad6b417ad13776560d54ebd247e1d5a36ce5afa20791772a12c519c10bd62cfb4b8fdc9c947527fde94f4db1a2e68167bf0ae5127dd5b5482734c2e82fa223007d3727ee07e28ec5a2f3f8f217dc9d1f7a383f57b70c5d6b6e4daa9501a3bd5ceb6d0ab753051175e045d5dcd04a90914477a5b8debdd65b8e1ab710a96062d63c386d419f6619d74d4fccb9f2b8c286c6d0ff7c1a7188e030a3d2a050627b3818a138d2148e0fb18f18c6cfa8ae9bc5a84a35ec92afdbc2fcefe48f1e2f6e4829ae53b3da0459cc4ea8a96818b5831891ee2f506fff37c89906d3233a51a5cf1469a62c185061f033085fca6a54e24529c3d6f0d8e904bcb0f089a5cd50869484da1a84f6fb8de4e53fce3dc714201519d11013f6f6aa64e8b5ec5cfeb27b611f0895059d8c47720d55e00b577ca5500920c602f1ad9188ea5ee692f601ebfc8dfb00f5358bf66053537b7a4114d9bea0b9e106f09721f25ef35e8ddcc43e2e77bb449de58101775e4089d4ae64252687a347651b3ac369ea7a3b97d984dbbf85514745d6f5d27fd724f15fc5f5ef5266e6e2679b20ddb439fd67f615c82c775ec4f335306fd04065079b64af4ea008e48b985698d1d99cf183c9f2b718981eab1c2fb41a776382b1f26f2a93f7a111a998537839d41de9bb1549d5e8fc877b1361e20bbc96f30c63ec55fb9a7959355e18fa17a7b013633ebacfe5cffd61573f9cf6833f53e8a722fe351deb5b2f3bab1075790af021d1237a436c95a28f7ad6d55262cb37ab1b962ff7d9b0258ded378aace68919b1fd115d8db0617477ac8112def087c9a230688783770e60da11ab8d87a84cb52aadb16c96fa5cfa82b5e85d82779c9136ad400ec13f2f937d70ae22ee067c4bf4aaabae4491adbc185cb2bd263d3217cf5cc5cd9a793b46e0d2e950c947416477bca62c80bf7e42a26a883bb28b6fe4d603a0cbf46c59016aff031f00b4c2871aaa4aec33caf41586a811dd0ea97e7fb16b7910b961b24d83bea5977b95283c483e40f843fb39bc2edbf6ad23df8570ca5cf6a5cfa06eb193d877c122329a0c663e30589a9a75bf00cedeb3d775ad40889ec2912071b4b6021620a4ded2417ddd73c1121eefcfa7664872f613b21d7652f883dc921cace2393e494895be451915a59c30b94170fac7105a7ec0e0fe9a9233e28f0fe880c09e1899b6303fcd68769c69b952da80438bef3d53c4457734af1786b17e1f55d59a6eb9f5989b01f1691fcfb6d000260719adc37e0929b1cd116c184ac60756ab9606500db31a0a3c54f8762e1dfc8ad0db12950675d6d3ec20fa3f63d1e8a8c9f8a907076b0610d1a0ed07292016d52538e55bf3f293061a4489a402860c76b7291f86eaa7a53a39b6c72ab0c1952f8f98f0bc4d67a772dee5e0ee32cdbae6fe923074be4f41b1fbfc4d86c9e8c3bf9563f9611dbb5b3ec06bc8c6f88e3920259aa47a8c4a209d9fdc49c47f7de6aebf02c9f26bd8f793483e09d45eb1d24db4a8423f5b828a25adbd818bd768472395db28163da5c398ffc66bbf6b1fcd953326d36c33dec971ae07bf84db912e47a057de759d0a06766c6bb63027be721f2b7b1fa81c4624aa2a21c95792e1e24267deb2b892ef0a541896b1ce9b770814240fee9c1fa2e2f8a77567ab043ead3b72d96d87243c155b89ad2542ce33d99ba44a08ef43da4c82af6a63283a91d55a4aaed7895cd970b2491ada33c8d82bdd3594354a91d7aa71c96884773bc3a3c976c7b86741af6383e043984a924f47025e553c550f7f44ec7ed791400fba5fad7e8ad8c9dca435f3d492272f33817531a8f5e6b7c7bb611c5420532abf605131eb61ff5533a1302caf6d4e89b355fd9299dcfb19c1744a29d5a992de529cc17a44b3f4b6518f9a56f83ed6001bb2264ebb7243220490483a89db1504d055f6b311e880923b54bc98386c883d7282398d9620857b98f9a177f71ea64342753902db686b92fbdade1bf65f2ae8c0ac7e76b04c8bcb85959d09a7db0b43afe3d28f289a7d5d97074807ba7f84a90e183d3293601bbbd34e861821780dad1f87098383e87d9c1ac541830d34602663aebee8c7c2fef38b0aa2cbee5f74299a49250671b935f689fb12b775e6840ac75648c1d2dcfc1ab5b33b4b95f6085e2911703f7c766b14ee9104cc7cfdb9fb42f825e53e14dcd8573097c09ea791f5d3c730572b85e89d506e5deaaae1c7a1dd7c9b7b93d468d77b69fe5192d9d695a153ae76064f743ab87c653886fa76a69fcaf3ac578366bc2846ba26f7f3a0e7999d32c2963cd6932da266df98b18eaf91ca759f14889f3267af1268585fb793c68e046662b5d84fb7c8a607686cd667b965687d514ddbdf3f8c4d3f3a84e3402d0c6b88f32040165ed66ed67f9417732181166d9739e16bb8c5b4d227caec96d800b151cfe6d7922bb506776492197ed107c5986db47b7fda428f4aa699993fce531ce880706569254bb6109fcca42ecfe0be255b266fc3aeec26ce4059b3e017ebf5758e25b2435581c6cab9ac802b25f2493de9f786de3ba9c0877b720224bcb283227f6c85c9c1407dcc3999741edb27ad08a09088798962a69de24d4eb0c48f1015ddafa8a2736e253fa7fb4aaff76634ad07573d3ba1002137fa505f2f3769e2762f55e17773f4044a8c39c88583962455a7b56dcd8a69777d4de4fd471d2a426efec6f9f0c7bb62166ebdb74986a1c6270613dfd64c87f0986272efa07fb97825d169b8b479aa89cad8eedea2096e624caed75cfff040d6b0c160fee364feccc230a8e56c91a8c08f4f34073913e540eb276bacf07d7e6fecf317f2b8d5e1866da3ea4abf159f4e8d5df7f8b5aceea72df7359750fb2805757f0093c6d94aed50b398ad560f767ceb899f7ac0dc71e13aa89fe5c77326de73ed82a8b678214a90e718d7d8861592d25b9455ffac563439c20f5dffec60420dc604fb2fba4ee558c8d390ee8364d8695c3f511c2385e952cbefc89d6ebd7b6b90f052daa8b906cedd319f400d4a95d9130636bf4ae747af4da6ee4c0128d0b6d6ad765f494bf51aae9bce752cb213490952cb8f27629875cf9c97b2ae8688161da32f65a6eaf965c377e336e88198e2c48cd935c5df22cfda398b777cc0ecb2ef3a4494c57f5cd7a52ea72a4aa06dcbce1a285829472fe3f5e5914474be44b3d3da7f96b0f36497db29e2fa59f7da2daf6680a15d8005d9a80873c19c68d84052eba6106f2c5aceedcf5c4d1e6e2630edd6a9b86874ecda7b0af795fea6ef82f3d582ad081486a36487dccc9fee9bfb12d46a4452092e0ef753e668a261d2a13e00db1285922f3fc6bb2c1fe65d7fb7a6c78dee2329129ca34b07e48e7fcac4bbd579eaed8d9ec99ed212edfba51b8b2f17d85de4bbdfac075b24afccea1d13f3ba23db49ef1c6a713457dee4acb7a0372b14399da7de68ace90371648813b76d18a38da09fef4ac948c39bab5c9b1e456d092c54d557f6195f6dd35c43f6d8b158bfaafa855f902d781dcc589b0e2ce2447edc132d917ed6232a7cbe020c9d48e040d76089b665262c2f19f15359f294183cf1e196d6296c9f021692ad9f2fb91aedbed8933af03bcabf28806bc599e6520c14c7fb6c1e6239bd46de2bf5b68c6c90076d8b355af4bb96a40ccb98495d58b4edcb419c86405b22b6ac6656594a40ef5a2459edcad9677c339e5b1a298393fc23f851ae898f6cfb0e03450c407afdd45d07e5ab697336387d3d039562df6bae5f5313ea4ed6d40ef5ecb05e94a40b05bb1d17b65e4991942bf1ab4f1bf9499048e66f98fe9dfa24146d8f937d50d24a1a6ed858d2e3de56e5c23b917d5a936c87b84effc06d48041391caf42207ba6d23030ed7edca864752b99ba3b089b308c3d19668bdcc2578995d4ac9ac502b347de3a37cd685f22f1bddb3cddb0e0f2ca53a311b1d45f9464edbf55a42b48d69d0167d8fb69c89d6e8376b57277211a2d4fa0560075d2d37dc12b4ee0dba48d2c6a58658b498b20360cdac88bb3c1f31f919fc7fa39e2713e80a70ce35eac4380597a41ef900d7802ba95caac0f4a3a0bca0fdbf1a8f50a21dcc0f43e1cc696235f4c12bad5c5f13f2d365035d2304b8c496ef6a94b810ab205f7b9339e9a01affc5c4c5f635b2855d51addcbb50aa41ba03bcc638a2d0f89ccb9a0666c8cf260b119535ff11389d132d1e7c0103fd0345ef4b1c2fd4f64f371956e690f1604f00e01cc3ee7b5925bd6f9f2d58c465c50e6384b3a1d6ec7999509579deedb95d863a41b6ecf87de3021d1735e81c4a51bd664fd5b531183e6b784109794344184728ec5820120ca18b4170ddd892146df90194c8936ce465559a41dc897b6748e8b105efb3506e25ffe2916d51af2be26a3b3bd5640fb7b8febc7d3a351e8cb414de74c4cc3a0b370709622d7af9f777b91c2c4450a3f8fd0fe9dd6da5b31a2571b6211f94594ba14bbdcb647cfae1f68eac505d7eaf11fd2f2649bc02c27963a741f4473334972a7206b45c7e3a4f2590f48d6817bb6980077da96e74d310365f87d686d054559925ec055ba940aace68fbccac424f684e3ff5e5cc226f49664191ad22933fefb70b78a6aa24945bb7bec9f67228f4762e7e96e51e351d8bbaf4666364a57fcb4ccdb17f9118bec8a93967f102f031fbe96c6992acd4663ffb210ede942e9c532012a07957ad465b6b81dca7a4c38f5f47b275d2bd28d1cbf16f9208fa551cedfa834b7a460ab57bc73f30fea0c9950a10f8c38e9a59e6986487f9c7de438903a3c7bc6ba458938f831b6ce03d29cb650ce559af8c8e2d0e1c104b0587206afce487fb35babe660168bc9734c40cb9d60322411bd9ef2f95e0b390a93e134840836b0ebed065b8383ecbb9e27d99e8c6bc5783bcc9a573967a18d19b4b44aa37481afff02e75109ccdefdbd1b0f9df9e002b2578a6d88177b0e616c3f6dc1849fd3dd6b21b15f795dcd103eba55326c497463139b6afe2a24bc5650987031ade687b99ebe16df48b35183c17a4d046a24951aee643531d7d135fc85545e0395e537d5285c6a68fe69e6d8b3df498c69edef4a56793ecba72cf59468f799cfc3184eb086713e8500ee078fa46ded22e221dd61da4eea142e8495ee79f6b5eecbfc36cc4790f5ac06cc3e09018aaa70795cfa01e849e9a3c474714b46d634f8f70daa88da3042566660e4e559ca03ed75fbcf9b1f2ea0030f69223b4e1a99770ad8f486bcd3870ca658b6952ba07c029e8ac8adcd319fba65ff234f0e4845d14dcacf466dff46475d200da8e5b2954829767fba91074b227e92eef6e5c3ec90567f75387c18029ee13364811654c236cd6b4f32091434e3afc10fb38331d05cab4390ed55c24e6bd92f55ce4c2b9546e0d5d1a483ecef668005e01564f6a36eb2d39cc589628c46bb504be0e58b81011a2281929ff5cd3385de1a8ce9a6c87f038c1361958d3ea7fe62d159711907fdbfede98cbbd360d327c6199aafa6d1e623f97f41f8b6f80818c360988d38bc85689473e375ea5cbdec3a67bf259b323c9a984ad731542b0fa0ee844e888ef140aab2ab474ccef35c59b77f7ac9e87bfabde50091be095a071d60b6bbf17058a7ecd50a28aed5c746e6d9db5e2b131199246c3b221d2af786e4b6729166815533a5582ae82ab36b0619fe15c9b7af95b0549a54d8cd5da6179d5c323f4636796c6ad868363edc310279b0994e0e027aa8d4fbd8565d05c831bdce90461f0427cab3b24c7359a4dbd47c7dd07b8ce0231b1c0d4ffb3aa7e05dbc89f7265f7f02d70692623009c1adf498d275b2b29d315f904b2667e4d880f4202ae150960b7d09d9e523ecdda729db654ad3841dae281ed831f60cfa0c2cbd7f0de975413e08dba4172c1a33c9f1f1583384703c9779b16a5e395ad8b735f22fbf69d4ff8b28d50bc4c538baae88eee84902f78deda8bfbd3c5af20f6e5f3ab8bc0d200f877f8e676a99d8c0c9412cabe7d99a802527a24738f5330c95eb0fb0902db71f975f605d75046ae4aecd22f99c72d9c1b29901aef072be6ec27bd99db8563aae4f6ad34470bf7f94d38f7a87d35925b12a5f464adf6df494888430d6b1110b1a24048fb2ea05876fbc0a8bad29171edd00fcf8a17231761c3c86ae0206e8a901a9bede2f4d8102c3dcb0eef00a1715b3caf481593587a374631599961637a4f3351c572017bc824fca250ce6f2e3bac3dcc888c8b5bb0d2ba0939c098b988f4d7a9f732be5127641e8e98df88ff76e8bdafb67766f5623b059931dd2c385b89edeaabab9121d6f68cd50babb1decb18a3a1fb5f8cee387811296a7985a89c155c5d0b63e3b57ce12fbfd3b95391e243d7e87fca650ed993c4010c1b0bd1f2a10e4a3ce41dd3c22eee961891d7e1627140cc6943591dee9308683e4c267b0634eaf969b6a54450e4b0a001bca396f4aac897e14fd0e21e81c4a828933e6d80d6d8b1b85fe5d0cd0b5f27b7c121783ff7568f117832261264e007f378bb70078fc0bb5169433ee2ace2716228b84eec5fd3fe1f45e7b1714443cec783054c43688a5f5d5c295836ce21c6287acfe2a2eb252a333e574be42ad744cb3d84c9dd681fe504befee472790470343ed0fa0aa2355c76eceabc131c83b3282da0ae7d9865956d192aab3db573b6acfc225fcb8cebdb0fd609cba5252f6105dcc2c5cafe45b7c1f41575408b56dfb93d2dd98eb12ff127851a42434ac3978bd050d46da4a79227d8270a2202953482875930fb1aeae4e67f87e79495289de293b4a40d92746fc84cc8318c2318fd30650e2bb9ce02fd734eb683410d44bb31ad54fd53cf9296ccd860b426f5c782ea5cb49371d56184f77911ddf1ba0039a0a49aa7e763eb4f5a04575997808b0ad9f6b330ca38edc19989febf4da5455e5902ed69705666e29a5915e988cc4ade24ba73ca6dfe90fb8205e7effcd5f974814eb40c97b0ea96b55e022ba0e2ee47f5305d29012f317cd9753336a75205c143115959037a61b5d39c86e988c95d8b71e1d7142fd4b88ac7624a5cf625528ec5d243155cbcb2851b990ae9e78981f2c2544a559ff30c6e745394299055c7222f19da0b4c7cc54fb6dff4f4662b40c610111fb2f897177007d079651eea4bc7aa6f860279c4825accf6aed2adb5844d82a1bcf4e3c5c0d7a96161d747edc8c35e5aafc18b9bd1f084649e4b633234d1418b8be30787efed818fb448b465255f7264bd112b0a9a5706b32e2730a738987457f2460de48cf8b8e1da800d5a4ae30e1518ba0117c5d87b6ac52dbe1e78ea448e5be69ce5804175e03b47f9d51f975cf42884b4cd3abb0b12ca26b29edb11d9b72d8c5d90b110e1123f6520dc8bc281895637ed31e148dd32a7dbb7304b545a5ad0fef7ef08ad24014fa12b7a79aea85c089a534da2c71a52c31173dbb0faf000ac05130a6d5f6535d1c4c2b4cea1f7f6a7768f28667fe9fb86938ea7f04cc230296859e7c96fcc352f968c9473e496de9c9348ca13b973b35828b19cf492f972aff1709002258289cfdf322150bfae9c4eb9273c93bddf05a19784c3a414bc4ea666010d02c9afb91b675b634d7967b924b0d385ccd35676c9a9ae23e819344d7690b364afa37a4d79f6b063535ce8bc883ff5ada84300903826d8c4a9eb88f687372f9ff3fb0cce5353d92848ae5a2de13035bd0e5404da57d6a9afcdd0e1d141231dc6b5188dc410477dba16b8e49596493abce54f8bdc8c80caeb3e1167670d1b23dfdd4324b5189a4422a3c2af7a1153adb2177cbc1f40eee280e2f5413f51e8ecf452c4f92bd314d867d914e367b91535a78b23c02adce69a77a3c698e276521e0cfee335ada97cde919ef5a7e1f6597ba4298cbe85c6319ad768ca93d6e5216230c8e800c4029c01a9dcaf237230e527b0d9ffdfb9689789a8184b5ba5051d5f67981a81f6463ae7b67a8880a1cf82e0d483c34b4d29df0ff39d8f17d63d0ebeb956c2e1cedd1f38c060c9e6f63bf84e170f2129c970d3d5bfdedff0f2f7bb262eea2847d12f139dd076b97cfadd0f1a816561a1b6a7398314c3820e809aed40cf3d94dc89a4debdeca4a26b341b8fec1a6ecbdd9b35dac1fa34c298088e6cb4a3354ec87da547421fd2cada2d5e3f6beb10a60200827e357a19e5b7133a0029b2bb9d32359817d16ee87af26b0fe840fb343c3b6df6ec8a9b5a34922808714705b8cb423ae71615e3cefadb7894521352c3d3ae6bf9ee6666e0f752cf5f86b7a3121e2213f80cb3856c92bcdc57458bf9a3b48381f34a72e191761e90a7082194b3dff74835c1565caa8abd1dbe8950f7be27e3384cc9551656f81ff449c02ce18155ec6205fda471712908c533e50b54fa73f6176c33b70d18c77c82ab73819166ca26e8cf8745cba7b9c25c1d23641941e2e3a6bb5042cdbd295ec336ecc8ac4984d062fd28e27236801668e409024d7abad36da2e89c5e2e67ed3d52f2a83b11cc1058f6a8236f04c72a73ef608ef88d44edf587c26dc854c8507a684cc945a8ea0e5322cfafc9fbd52604a8efaf2261c85ac5d3a75e131696b002dec3d4d2f526f4dbe9642f8802f433a476800ed4e08e4165ef5f16485b17345b1e1f71ebe0c8e776b3314ab5006a79d9c1d95216f1ddcb5e41b23e6f0d95050f8e284796511711aee8fca957df801f2ef2c324ee7cff1f3733687e8e13564aa698a5ffdd305c9a0af08ef376867e4d286f062c666a3a67782c487daf55a32ca6a36040c865e0aa1233afd11addac2d51a16a1185a1d7c8aa941be4d9bbc3d399161fb35ed9e8674f1a26eb4ccc51e430f0b77c530a1d6c54d2a95a152d0066065bab00a772bffc480bbde8133bb79d4dc5b414d98d567bfe50ba886a93a00e76d9ccceab19ac8f856f3a717812247e31862a821e13c81c30751616e0d5ecf270f849c573b7f6498faf662d8239e1af639de26d2a82bd7873a984ab7fdb2c3b7c20ec8e0632e651ed3109c5399836596b70a17e06c47bb74e54ceef508da81022b97bd16c74c4d0275febe0a5186aa4d269325db9bf4a004adeba8c5ad4a79aeb2bbf35ae63d8edc6a0d327cf9fc7b71fee5cb14b5d747bedb01127a59673005edf8063d3e969d1515b8b41be1693bbda69e622c5844052c2309a6b3abd526b043b8603e3edc0a350fad9d87a6617d78c41995a2e1ef5aa4ec71ffd202f8d0363a898bce756268c4ce486910c759b34bcde3dfe8e12dcae1bdd66885fd66bef058f8036e50ee1b4cc815a167b2d67f9f2a89ab9ee483d83b0db39b2009836587256041ae8fc394258391c0fcf75c24fb607773055a8605495275e230a5f34653067ed10f508785e787496231134f65e91639d0ecb1a8c47532b9d848512af3fc92802bf161ae432b59a8efb4854494d0a24d5f958860a84714ec07d7a99ed0dc5030dd0521ac7e39613cd3f7cbc0445aab2e59905d4233477f78db5f0dc37f8aa5fd4eab2f0679ca4471b96b5546e6df7759598d9ec1c7fed90ced5efc2d42802a321b63c850d83659f3fa8fc04d1ee7bd6af9bddb6408c5c8049847f350ec45439badcfabf00c06381031e58b473efbe3bf94d171bd6844c2fc76ba91d2bf529886703f4878a7c26562da0d24c9e99470d3d539101258e43050f32746074e208f8f2d331c6f1df348786d571b498149eb54158535276d3cb6aeb80e9e731b479f121f6b9627e10177ad6663dd5a9874b99ce0263f4117b6bc621fd0e9aaa9204dbbe11944579385799e5fa3e951b1ad623abf9cbd13eadac817a52ed6126a5321e8fcfcb552a7e7a4b7a3a7ddd34f7c8baa2e693cf45911403be278e25ef148a225dd5647cd80b0af75fce01963e43a9c57971c1d86d502db4b523f7cc4b089550efce6aa0cd068f075a5dd2a67f29ffaef9415fd300127ffd26ef324083a9d90e0f60e2ab4f988fe2348ff9f740cf54dceaff74a744fe9044db334767de1ee0c58333d684a7e994f0b50e7d6fc85d2fb71452093e823debf29a963c2ba69032de14f04d131d202599a47f66f861fc19a73ee3257f01f615702cc01b73212655bf8a3f5040f866cb45ca8dbd7951d49914325ad0520b529725595aec269909d3d2adc7e6f382e20c5cf0de89d9e10c3766b65e129fe679fa78e80cb52e5460347e4531171401bd7346dc1ad20259cc7b059397f44edb92c6d3a37d80729b54fe2a1924eb8bbe1e856b57eaa0db013eee5a91ae7d4832c6819d505654dab50dbb40f2496b40012ecc3428f6fc4c208717cb774bb673333cb53db83e3a4eecb2f22798489e1c1214cf0719e5ed3d00d27ec10f15a5b8261de91da3de38b6866c2c47d3c88d0538f9164df05f7c96e745aca51fb554005290a6a4d9de59facc62f0086b713ee4bc052a6f760eb03f1e0828dd70d2cb3100be733a21e5a20306bdc6d227edbba2e65f92d373979121ed447ad3ca15113478ced847449b1db77ca4360dd0e10c25fe30d6e3afa527229b212bedf4262df202e95d330ba9d1ff7540c9212ef837574c9f7f06f1de7b2b72c6c295b8ac2a52e6378b673bb7c6c43bb8067609d8461f18d514a302ea9425b85cc732dc500d3b6bdfe9499f6c05ec1435767429294064a9fa1d24ab727af6b60ac32b29b9e097da0a0042fe71956049df9f8456942e10483522f0b21e3688b4f93dea678fab4d7bdf56bb1f6d7e0921dd0b0c57c0170a3daeac6fdf95cfc1fa50bdd65e7c74459687751acb09c9cee6584276f557033ad08e4209fc804d8bcf38cb57d52645677329e5c8caed7d96de77ca28f8fefb8849fd6d26cf86b9cd7dd9f0d59635259b5aee2c2ee4c0a24b53632d8c285f05dcef22b42e22501a6f4a5ab3b867521dc992fed4b3e12b41d48b43f3084c222c1e0b269f89bb8578587fe49d69112533d9648065be88d56019cf40a2062eef7536e530b69f62cedb72639e354e5c5571b3189c65b9a2670a026682c4ed946cea0cc56982d9e1d34ca440b103d00f8bdf3ff67c5e0bf78844779a30e02547449289f3f98a9dff3bd2d65c448f57f46e84664545d71c4fe11860b1737f160f1d7593b607565483af76f00180624cd1a7680e4f22595472198da5f4722828b3a09c1358bb6f6736d63fdb758d03156fdd93205a396b1b28d9ab2eab5663c3fd740ef21f3e5c3ce059357d0092fa1c96b90e85afb295d938c97be31e46b84fb341d31654b8a53d49df60bfecb7d0c80de2e02396b65ff66b9004ad946bb0349eb1f4693e50d3d13811c9897f260c809e0111e4566d52da89d74f7257ecd2da866a78d2272f6d5f769777c4030436ae0fbeaaaf39fef5ed5a45621cadf2a7a933146738557dfb51cc187256be7cd6b929c0b16b8591d098a5834791dfa5b60a6c58ca851161060eff3cc329f9b37509b4b0310283506c41343806bb342c8763fadea8a0a30315fedaac7124fbd49a0678352f5b7b615052cd0da580f6b0a21da64d0971538cb0892410842e0e05ce183df8b55eb5ec043139aa2eca6b5890a1364df5e069245f17a40f0531786e98a7caa1caf3781a114840b6a880dd4dd856728875d52cf2ab102352fb148239801be8d777020e12fefda9da1c8a92b602a324a39038e51f1bdc69816ebf748b0edc5f42c373bdfd53ba3ebd91d0d3bc96f212494ff1ddd238e33e436619968fcb52f78bb62ece0399e6c5080f39e7871daa0520b8e85934888e6a40ec0c2f6a3ee5775a581c894b57e807629faf183e1f32c5d0d606a46d9543b42107808947f0fea956b22335fe152acc74471aac0a22f41a02ae3105a4e76be68ec05bea4c67035328cb2c1b435c13dbe51160ec12b057cc5e4a52c302046fc62e1e869ba12d5e3e78ab208443b20bfe5e056a207f50c3a28bb15227ae76b51daa29e9e46fca7532ed5be5b626a27afb872a2090788ba06632eb1779d0c5a7b2a9e96c0cdec4b2f72fe265fa13b1c89b07886a8326e757defa018b019277ac4fd467f85d15a57c54e748869732695ea687273143b0ee4ed38cfa95061a162bbad3aa731d3df43a12bd9632d7ac51a2e4ae105b163f28ee0c8fde1cd2902a8ebc4dbac7957d3a56f958d35000a9f1fd1d254ad245fb1c9f53acb50aab1d393c1deba0da0dfefe37d16107c85b50d2d81893dd7c170b52ca6e8b8846dae9cd9da5546396cde7c845627f3a8230ca7b999ea1d243d69852d526d35eb8a61b6d191c300be11c6121e8745b7565c73f74aa77f7300ec8c9a52a432c404859dba2184929a1a544948f88ce9cbf5b67d646716b3cffc437c7d22f8d4035de3a53f202f5e52bc98ba79c8d39eb214c59b778584218474f69b9614eccb4456290a8e83fe80cb4353ac3d05f7df0a21ee60b92c5c3351196a7c8daeec73378bca4050937ea4741d1980fb26662524aba54fa1d22b7386481381cc6764763d7d4be90df53c33edc85efb4ca0bb0ba2108ebaba0d6e6cc49f866dcad5014ec69922571f1f93a988c3985d9a0b42ecf30f0f547a3491897c7e3773115e3f67737df23d1c79219fd5ad5a4a7bdcba53a7e5bb8f5aee31541e62ab4428897b5ac47a1fed8ea8726174c419246a8b6dda2132f7dde4a0ca473aeb665388dd41832a3c2ffade13e2a8b6d6597dde9df9eb0f8568c29fe2c8fd5286dd23aad02e8b253286e793421ec04c229fd9409acb00c34b62dff53ab9c0e5b3842716e89edd35dbd93636c97362855760a948f87da5dcf39a888d0f194c75000ff045bd2ef3ecb67b5941007ce9f2d32080503d7e54bd2c644ebfd663ea70dab4f1cf943b69aa5101e33a8db7d1252473d0fee039a8044444b51627364579c227be1d2450990f19f1469bc7a0b29cd9bf2d8d675bea12d9d03e1887ecc7e054eca7a6d41b2c8b9fce05ed54c408ba5186e8b46941c5996b8b5c4f6f13fc54e168610529d77e9040fca397ab9e4e1e2a5fb4ec3c87b4d867da821343285d48161f5ca0ac3219cdbc019233429bed28d29df49d779a22805d42621cbab6652a51961d11c19788845f717438a049707ac8e63a6090f5a901ba575ec42c2aae7c325104c100943564a9c0ac204b237274abbcf8ae1f26b2dd1d8dea921e1183ce26d4b646ff94cadf2973bc72a9b66db6c986b1fe88b9da92e55a981f16f7af90ad95941bf53593646d0f27b8528eccb1c0d7e8da540b8a93a041e9b38d496c64351840a8b7e33984d2f77059cbf909e610252fca17a83d8fece85208177344996bd12e858e2a27c0f9d118ef7ca1bfd445f2d9362a2c7db8199253751c21e2d0a054c02b0e76d8a9500093e1faf568fcb0c587a721e4c5dcc4f4709321c1b18a8117a811af55e69e642a73c9bd806fd00f11bda5958da04e5d633bdabedf2b377c9e48c1f743bc20a4933b1f3abf6eeebf7bddb9db63978d618317c459e6ca57f16d14c45cccd3c0afff5c4b092ed0b930488a4c8a23062a7fb896e86955196c8de8be81765dc80ed4a359e59f4b2fc0001c25e6283896a5e6982baf83b69305b0b58891aa83035bb143a6676380e683ad7b430f1c10a370549658923f87b183f838157d8fb90047d444d4590c8c9f74a6ca643ffc47c72a3827a028e3551f97c304d79d8c7c5953ac2b6632e0bab5237aae0be13f3a6c241fe094ec158b1791bf80618a275988ffa76bde7d8697c210978a9cab6b852d0e6a45a9444cb644023c5f25bbf6bce9bc548aafa164a030bc8bd4b8f6e7a46449a5cb5fda0f432f79c7e5b6bb6133260a420c4c3711609b97d630c34c6a24bc5650e61b15c3de2468e0b876f0fd48b879ee6546b703556d3305135e2439629fb50a2a7d7000d3ed40254bf905315a0b7bc82a2199c10b200e76f0dc06fbfa88f6201cf9714cb0c4aff404af609403a9905dcf6f67b0de5e8aca5def7d1859029a411211a21e1154f8eb972c8b9bc21d481dc982a9795b63486dbeeaef151a8701cbbe488afb6218cb6a77d2febf11d11386bcfdc7811ee8c7ef9870e5889b90dd4e8620944b2f8a97ff0b4522847f6f8336fe534a4e755979ae7ef3f8d978ba7d47ee1c36a3d614df17d5f5af726733079d1205ba581b3fee48d6e6818e1e6e72267aae1a8bf25201536c66ee1f65e62127ac9790345d06864d44eb182d19275c889058986a00cccf20330b76d1f7d35075127b5449d747e21a2d54352cd56f8cece39e48d48def690cde75c230999525f3d8438f2f066e823e14d46103ffc193a1c901944206348f87a31868b1c79602228262a94a56f4d7277fce1458e4a7f165d5050348e636a31f4575d2ec1e70858f956b2b3265756174e2b3d782209d26a78c2b3e3fba5044321a008935ea9f20a985cf8d6dae6aa194c2182316300bc3c552e67dbd0f2bd37eb56b0425d88c540ec80258529e3f2805b28d7f8b9f9e396dcdc97a473123d1439bf7cc4244c2a00df0a61497b18d554628664568cbaef7ff51369c44ecd2de2f22595a01dbdc8545841d3a8384bfc9e488452d2440d8900881d05c5c7eb35aa00ce225eaea24843406fa42cc8450e66f76ac9f549b8591f7d40942f4833fc734a034c8741c551d57ddafb5d94ceb4b25680f045038306e6bcc53e88386e2b45b80b3ba23dec8c13f8ca01c202ae968c4d0df04cdb38395d2df42a5aff646928323016370ae0a0049989dee37bac5bfbc45bf192379d998bb914812c05dd5f25a0b806ce106936b1495eb948 +MD = d34e6a8ecef67262a956051b3418db500aec04c537088a86059baa48cbcd6f6504a7354880dbc1910f9ffb0cba8b77ff75ca9da6856a7ef522ff21d39658170b + +Len = 87352 +Msg = 1ebc2320c183fd3ab71a10bb418bc9ae56c6ea17f4a0811eb51b1b70a2e835e34b2af359187d15e6da372635a5eef627e23a4bbea0bbd43a2b5e5e81e0dd4ac43f853f60423c1c02edc2310f2737ae43c8de5b98f3208a69a6d44bd78fbdde6c22546efee8c8fcd61a4499126e70d848313a836c96d68df44e0348395891d8211b20e8fbb22a9baa8744c50623a05c7f44d7290430e5c3234a75be71e360202c5270141f4769e3c65c4a1fb3edd022302a3cb7266a56163dc3b21645d7329ed5f0cc5c31508dba71c2de0ee0750711a30af1939bec306d8ce040b67edd0f3a631dbc27fb749f0af5e189fa57634d131f0d7f272a5d7baf56caa908e49c00dc2000c9de435ca6ba98e0d24bde5eaa0fee5b6dd99d6640c6e4a875723ebd0c6c52c27ae7d2afaab2a3e7426a3e0e27ee561b4313bbae86997ea32a5e56e73cd2428a58ab7016b4da5e205fbd3f1ccb96a0768a3c4bde55106be35233f2c397f63881ea92e439ca1a10b1b4ada8309ff01393c9bb169db513f58f7459dbf825c07bcfb805f8bff75a02c2c6a343f1a9e4f99b88fae494af8a62cf1938d92fee19559b4a6a725140827d7c1f05d608f35b98b54f607c6a4a5dfbcdc838b310fbe70c0d292a1b96af7ac706463c2a1c853b3a0aa755a8c88f7508ae09c133425314e94fdcaebb374b2a2889c3b107d6656e25c117412e5684b8d19d643b1f6efe863486eb5d1adb1c7aea2d1fcb34de9ddaa103288dd7bb330f9dc0620e403b052735dddf9eff2b2b535419e1f17bdb3569f8f8609f6ba0a462b63f8aa25e526fdd347a3edb34ce7f9bad76918da276330270c74ae0b2acde9a6243655f415a44927885937b7f6d203c3e6bb7067256a18c53996bb87488e99deaf479aeb0fc8c2d4a2763e6a9b0171c4f21dcc4b32386f1e7954d9078dbcd55967951f574e05096f28738837a3e6b2527c0872f2d87eb1875e477ce874e92a9adfb729d55ad98b5b8cf99bcb9c0243d106f41afa728d7e944ad71dc6989418079a1660f1b0c6a72e3240ff830dd4b4e505691acebae524c9e19c420e633e2c44094b4b28ea4d0b5bdb021a0a53ee73f309eff8ebfc26529c950f704c5f47b5c4bfbe4ed761ed1668c9b571ae18b00f8f86f13bdec0c16680e7992eed0761630e2ff7e2a9a21756d990d39cfac6b9f61f0f056a13a336ff1b5bc1d48cd5eba284cc80bd0c356c5b22c2d5027cd86ca62604a4fa270e078ac064221798557702cd37d1347b964c81d8d23238b0e858ce38fa4872958ba3882493326e9c0073f24bd461cf644f5879703183a613510eaccc627849cb86ab759c5b7b20046162ff8534cb0472cae0806d7341e120bceee054dfbd0655997fd1bc3f44f26de2d4890ddb756a138395554529e560758689f766c47f3ea03ea13ae8b1584c352f493d4a3af976c323e7667b97f6aa7e48505086b3373957d0a00fc6540d93f681217adec5bf911e064712957fee35976ce29a191e9dacd91a1cceb999ed702e930dc0102e306f60a54508073444887d8eb122a278eaff9055480656e5605749cf5ebba2b7046847ab61b5654782198d083c88c754d7b83a2cd22512d90ecfe4b0a4bbeb02a4023f731d89243c3f7f4273e54adc34cc5d230b4bd961f761206bc1604f7d9387c3c486d911c884d5003a5c6bd7759b3154e77b0561e892d01f6b8c21f4bedc2823536134ddc6b3db72c11c00bd17eabf35f3e6af7d0b6e0413407b6a3a436f2db7889cb15ba34bbb1da34d747a27c5ce86d4f8aa794edb5582a719998e9faee0e6b093cf09e2af1c872d7b178d499ed7be070b76f5275d4d03ebe13070282dea3787d0fe6709605835dc0f6a64e1e8635206a9955f2976631dab5cef7d616eb2206afebff18c01f6a03b84fd9f853519d9505d9645d9b930165206f704ffd3d147c6579447ef06806cc86641aba7f733ba8081fa179c982ca47c5a17a5481fb01446861bc8a6e07de21f4dc707ceb1797bf3d12162f685c13e76c0a1ecee84d6fc5804a6f2581257b68c85fe426e0633a446a5bca68c24865afdf5263a37b5ce86774dc663573ea630bcb977da0a47fab9d58a2c50a1d6f4706e52252bc8250f3920ec0a8a38a7d2070c52943d27f947234cf8e10fec2f941544522f101455119ae149e3d580f073a017ec03ea5bbca186f97c7b22df90ddb02c8f94a5a0b85e0234f1d2e3b49af3724bd0277ff9f4824b877f6b37e0ad39e76364f65b01e17d35a87e68233829ea1434c97f5ca72371e7638c31cd83c74111957ce48e9c42d77b984a1412a00fbffc5f128c0ec7dbe8e10a2d5f425d818bd53f21cfdef46f056a90df574070defda12755de14f0806fdf07dd5434c26e6288dd1e18ca8ec87f793ec8a22b2efa2b9929fdd5fd95a37f37d916a11356e07dc2dbac6fbfefd1ae2dde7095312ee3b24ad39514274bd78f61fa63d67c8f8a3619d767254d8c3d3a0f1c71a0f1154e3a3cb0960930777f1903e83f54ced0be13d43cd8f9f1d84d8b83553645f9667c1bf54d9b35979d1cb4842f13bc98cf1e9fa8986c2e2b78951b21355904a8a71feffb06ff19cb4132ea694b8b7e58df0e41fd66bb5278d1a6717f29345d9d3b8c1ec4793c3649f8541339aa010a8d851fa3591421075877e416d39d72c135a85330c810fd1ba226f2d76bd71ef1a555c52c324d47ad58dff093f52e7ed00071f7beac7aac2a5251819f865f2fb44ed581551f6e99c4d87e3e412a48b2fa8c3d0c30b7f2b3f2e90c92e3ffbecdd2d868f6a686f491ee85d73fc70978d9a1474de30f9135bef5c4bca94d5e5273cdd09477a8ff7bba7abf8f779e093b4d74b0392ec3be9027b373f6372428d6bc15d5fc96c4ef608dfa03eb783eb00c78e5559341f596be88ac752dcf00c598014b46e5d692dd4f870ce18fa4017468f663b5c0cf0dbffd4c5156d7c38bdb32ddcea204a99b5f953ff3d6e0adbefcdd40804f661884a0f8fd328798c6fdc023bc1085cda236dcee137f6292d7af8fe5d1cb80e7d0f2e02e25e085c54c0f2ae736d15095330ddb96abd002fac46bc3ff449608ca6ac0d40920bbe001c51861f9a851911fee78e23b53c636acf66c2f95f370257258771316a84514b2c4a20bc7bb41d5b237107758b5a28c1dd029295678fa95942c9e13d3171c927cbd449efdda027cf0af5d015b4bf561b2044b579d4f95a79449ae6ccae792f7b4317872087f14255fa9c726df814f562de52b20f6e1c1f9f75210746aa458a2fda3a65b5425073d53d8e74e31f010e7d605411befda1ffb31b87cc13ed7de22ad9656817d665c43719f25ee1f02da754ee735bed482f039e7ff3bd9b3fc83f5688c21aae0bd73c63d7f0b9ce3441cbcfcfd61706186f3146e98e634668ceaa9a2e7602e2a94ee342beb20c12b3e47fd64da7cd7035099394a080457d2f382ade14aca81c7774c2ba185ddf1535bfcd51ae0b059367a43170eef0eba65eaec80a838a95c23eeee0b42b1cbb3e827abc283b2c48d776e811c31906de2bbbd78b07c138503ec6674619411526f761bc54433c321da4297f3d736aeca5720f5c7bbb16df61f6d785facfa070aaa89c2d9e8af9450d62490ebd6a29c7c8e521e4a00fcca7515439f006c09056cfb7f976a1e6b98b9f799e40978e9ec2d0eabb1803eb2ab7a7beb35171d25bef1c8d413f663dc62f5b51f0bad5c9110244eba3a0ab387738eb9e0f5044ef486219923b2ff3796657c95207277f02c9b2ac4fa223a0dcfc51a65b139486fe9ed84e2eb1ef5280e22c72e5ab2d9b210ff8917e804aebc1012b5f5d88c63fe7a67844ca69278b3c82d5dd70a374330d2bfc79e005bc93cdcded9e0c358d7892a86b82cc2d7ea4938d7a925db8a54eb065e7efddf921a0eaaac0ebd0e49238e7ebd8909ec39ca76f4d451a12b268f5f104e178dd23231bffdecccf115b7d87ceb9e8f7a6f32a9bb7085cfcf959642fb852119e484c680bf4b238d13763f56d2f58c23e4e87d0895307e7c078744204ed95a0e8863c9878b16e2d7aaac4a2f3f21190edfd4535782a920feff9cda97c7916b6deffbb5c6a1d5ad250d2462d20ff2c778d1af7027026f0fb10e32a42a0421d79091b915cea22be50dd18b13efd3ef1a1a50f63de7a2e6bd5ab9e54b57731f214f043853fffa7e1cea9e2cc7c9097a836bd4352729c2b49c2489213a9092edcad1cdd61adb2950c753a996090e3f3985d5d1e8b66e003d3ec70272ec75f22246d1353eb500ad2876d1aa63521fe380a3f0e08d8614e9f517baac56fb680f3137b5f0beccd0f479addd16f13d8e75046045769ff0bede70b977fd49c1e748bef00876f2bcfc9dc8dede55ec25da82194d3c1a9c90dc5c3486676bc7ea944d0002314e572fc417aa7c7e0da095749953cd4d330fe0fde1c521317e5ddfdf7ac900d8dd787fc7e0731904a4ab26fd0938531156766b841d86fc4eab781c29506e5e57aac3378886c7373a918834c4702b90f0fb4c8b1f5e1e8a2789b31a127c548d464cc3e186892b59687ab4597b5cc1e994a80eea1021d05d448f7b741b4d30102d29f708325603f216b6bbff723d8fcf44d349e3171760d82e234d94c441758964c8d9162c7bd583ddec0bb15980e9d4ba036a10949d34ad6cfbb6067e07995b85afe685c57934a126712ff981c5648c4ccf0bfd0921b02f696f3133c8ee1ff92855abe1adbc95bc78ec95529b798448758c8bf2f54387e0abf43bc735837df4954095b435e47d484db4d837072bcdabdcc286bcd9811063bd31521b446637d0850730780e5f5fd73d707511454aa528eb1778953658ee1b059d00ca65f4e21f5ff008a797abb1db9095d89be664bf4218d1de268c4975993d9db43f1abde1338eb19abd524817d81f9b8f115af85079feb823eb5bc14b409dba08e3e32fc9afa9c24333dec2f66f1308153c23741d52f500e65e155ed3b3ce886b735fd910063998beb58d8ad1e31351e756c0668a4fa46291e95970b365487f5847d13838b9a6ab498cff3e3ed6a90f91fbc25e0bd28543b32798b54ed784155bfbf7cbc84c89709054942b91dc4ca781b599b9368e003ac6a3438b1a7d19d0f2ea241223314a8f0f96fcf18f5666a0530ed7067ed4ad9e48c6fa70aae8723899acf699fdfa726d33be9a1e6bc79f807251dac46938f604b60d1de4848c15b2ccaedfc1ad1a89919945ec00dbb24fde6c3935817a3d72049b003e751bea7ce6088a5037a5240872acc7635733a900009d2f77cc26549a04742acca0f5863038e9a9f84a9a8977a6eabda070280e489da1af01e2e210e68abdf758d695d1a821cc9828a8e1bd4f94df9323ea0d74920c0622748451f4d00df4f063a4617f7d474ddf61a11f5208d2f7d25e33785e74e23744401eea62ff1495a06d890cc1f80fc9ea53e1a7ca2bc7c005cfcaed3e59a6b16ee521100dcc153c81e702ec5bd0e1ed434fd91fa83119c4a7f94ed096c8d0111cd4197737bfb6460f509084af70741464e605eb5ea11f72335b0dc6fa3ad4b2c8ad966483524e3eb34ab06a2f5f2ccbd996d6af60046f553265a634db385b231cd1f67c731c63a32825e1017e0572901bd2e9b04ec37ffa1fb996aeac39a9fe63d1d82379868d0fa882b0eefe0bebfda63abda29d76c7bd65c76d98ffc76781583daa0e291930d0eed19e8731cb0f61033eb10abe96ed3baf0f7988486a0a684475ea70e45ce59355a3186ebbdb4366ad4f623d349c46d1560278f1188a092fc30b28104dba11c36777ad09fea53e7b1efd4fde920f6b3af530ba77e2affa344e6dd140c7c94bedaebfcafd6cc1471ad2b8e8435958d0b5072adc6129644402612e74a6d5030a7e95fbf09da8b7f3d26312aa2fed110dfbf6514d516f1f7d3685cd909717efc402b7accc8f14e1cb1e4a8b33e8efc0796c5d348bdd266a0c3d36bba3b5e2f81ef67e52ad2643d7436ae392e3f2b3dfa982a6552648e1ac8782fe892c77d8a451d6747e1117b820e354e8ca58f1ebc724db6c239b49238f65a447a699516b8d233f149fa6b7d4272148a481f15afa2f71d3092059425e6b3d1d9ca488d71e0b097ce937ccab4a8293d2b15a5b925170f70627fbeeb914c8645b87f3697d52b65b3c6cc6f1566d9ba16f99d3e63ca4244ae122f6da31c94f71ea7423c9b8cc17beea09cdb34dc00ad09bb85f2fbe44c1d3f094a1aa30fe38ec46fbb6181dcc97aaf26adc90e5e438b7c3b78c969bc5c228b0f79cbd3b264d49fd891ad310e6be8601ea4408d33cadbd93f1ccc959a9bdcfbec648a1b4c3c5017a96d289369d14f68512c4998a5be258790190268c531d2f567b25e6327968b95acf6db903720362f87ebeb17fa47f2eef61874c887458ce2490b509389980b7fa7d5cd0ebe83261d87892ef37b8cc87638c1289e26ff932b5a196693bb6a5a3f63b106f64820a69a1baf1a1270b6328720bb28d3eb886e366281aa4b0535003ba8338f311b1f3e0e0905b85d21ecb58974af7c4d1e08a56d29ee24a4ae2183dd3d036fa67fa976e11a320fbcd557dbe4fd442af607a6c1377606db8400556d8cecc8ae3cbee6d77b16df2718d61f2b0083233cb5ee8b49fb1371d7d541fa45af7b2a55dd1ffde844c5b309576a6b2d46cef3b9711adfc523c6d8207dba3794b0b3d36b70e91631a5ef57bc63da636a1ca55daa14d4c9be1658e3bf66b335e1f65c68f8dc655b3b045b7248226e3169ebd10916856471bb3c9139bb76731bb4e93e94050bdbf28dcad2adb67e6dfab21c1b9e05ac120044fd38831c97441295f120fd98e49203b0601cb00d5e21e9ce1548c58071269ee1c11768eab06c420d76cc4bbc4fd4b72a2c012255a9d023444023258dbce7721bf0f4912ea834d2a3e008277634e735859849ab9749c3d39c04736737759ea579f298a5f069e4ebe0979d39d07b14a6480bbbf4da25421f5fc8ff328384935e842fcb4d36dac4b44b035328d10da332fced20a52625942f14f6902f7bd10ec6c21054310ae31c566c8df19c81d0dc0028a540668331032c43f5ee0526455705bdfbfdf8736c33f8cb9b413fe9ad0739549de3ddfa31d53e752de15d8cc6b542fd598c4b7a5d52c3f19709b6108c6b04093cd1b5920d538c300631dfb63d72a60893cad1259ec1df65e712acff56518acdead19454adc53fffe8a532ab93d458680f7f337e18c873aff524c7bcf101f32b0fad2346fa737e673b07ff73ae2480a53773188db1afa7582707af5147c366a8132b0972daa472f2671ded1778a94845726d295952bda4e7e7820dc53fdf0bce5f14eee036a24327d4b0a59ed8add6d227370eeae43b92e49c5e8921c09c0b24592f7c97f7b3188eea87ce10b57652d4c0976e484d7199d7ad63ca6cb4448e326a46599f032019b0126c1176f94de5d1a456f17c77a7df49845979ae021dbb81fa1f2d0044317014b22516d78b7ab7533b3c408d48258fc288083df09270bb987284a1c2a12d4243347b843b5345efe1ed100383aa32cfc82138bf394c84b6ff383b5cee015ebac3fe3604aa39f6b504229ce1668418c7e5b7b0a79118a3d33fb60c078c4e0afd1e7a1e3d2d25d4334242a6833fbd1da1a0b2399c00de133adf53c14aa26f7a36db0efad8cbff288e26b5f791153f8a82817b9b468f861d14677620cc3a4cf68b8324947c8daf3af135e357b2f1f1a79411789e4e45f809896089f3365bcdc5249d23b2d2791d5282f9358d8edabbbbffd712095c2b1c1fc051f3002f0eda312ab1731d819a32b869f91163ced88510eb5cb1a61747daa7e2c21c10605a5b80c5487c9d32f5d4b3cfbde09f1af337ec7f26be3b28a31be8163b6cea714738fb1ce9a5fa8d94ec8ddcce0b0a1934ba98e3bf9f913647c52b85454b5809dd59ea581c58fb397e638cb7b3f86c74a2f45c40afbe70ea39c2b856672120d025a695a069fd69dfbb1ff989f4118dd346ce7fbe7c82a0ec83f8d7b22a560b702608431d59fa0c26540a1c791abd34dc26304b84b052e8e32d51d0c11552e18ee8653ef773b8acb7500b3cb0ac632b3a4c0306bbd29811783db4eaaab07d6ad574a7cc553f9f1139b709a255326d3893c02df98a6bbbe452bd086e9683406dead1b4365f4618025591ee97913442249088986c1a0223261ab437a4ac1701b4780776c43f0f8949b3e7a1618c3b4ab6d8ae2aa6921f38a2772b28d415f32905251fd3bd1a235bacfac00a486dceedb8143acdf11b4b611f1229c346f89f21299920b56b1b08f7f4d32511965d7693f0eb326893dd0c096492b6f0427ea450e87d1203146748c3e9e51d9e9183baa42806a0e3d5ffed953aa0da970fcf891d0979fea501296b2952d9b09983082288260c8b26ffaa736e69e49ea0f612d6f25634eb827a87f790f856e6eab21336a7b3a6fc18590528fcb90509f33f7014369557e184c6a97660a405c87967cd7f6a967cfaa32b3993a7f2ac24793210ca508f89e8922fb86f001c8d5d2ee95d843799358daebc6d3cd8db80f618161b80aa0c730994fbdc6bda2898aef282eccd778279bd2255caacf53d2a87b935b8beabd4bd4b73733cf15592cbc1ab78a2e3931af293e53e786a68e051df45d5100dbbae0eb715df0189d921d0a04314a64df1294616e0bf9efe978c9e07a23f4af442630e53638752bbce9c4f53a09e2193fb771d4ffb2064f1ec09b806babb8ffca8bc662945b258109dccefe0ac5e3a3e18cb20441fa8f3cacd1e49e4739007ab567ebe41a4aa3b0fac7959514d9b1ad5afeef6ff32a07311a495f6a9b708d98cb274bda166b52241646a35ae6d9fe8e02aa948881d500c4fd834695e6d692e2425650c53751c352c2d692afdf3b0cde8f0c2bee5c900e40ad1c44a0b7dfc2dfd1818535fb7279e5a703ce048c717f1746901ff201df826cdf70c40b6ce09ff9ef15639cb161d825393ac0096d11c7b0cfd30b441007ff81db2d6f4694ad8cb8f1ae766a179480c9d008132f0f90694381415844e5cdf82846ae80e2bd8b0ba59f99383e9c7ee61c21d831d5d271f6381167a1851185eed89870b350560dbf483f82238a9ea58ac4a547a6ae543ad116e6b2517511c4561b5710711fdcb9fa0957d5b2cebc9ce13bb0c2dc09035f9c5887bde2a5750dc058e90a44b1eff45e617f20708b64c97be9fac65c867e54ba855af6ff96a9c6a029e4daa8b6de514ef92beee73135bfdd67d9eea2a713bebe25f6d9f2b92e839806d0ee078f46556e38e49d81608de4683de49848db620209a2e1e3569d71c8fa6813c0fbbba6851ea91fb8d98a0bdbbec4915fb993f7a33f8482bfa5a4220b59c6440fffcc7d44f2a253cd4a3e0e0a43a466a16f713336c2537fab6a7dadcf38b9e8078e2249396ced17477dcd23049945db09e4f3a31134983f530f7a838909bb5664215d88b6efc1e0b3ced7d93f123174f5c48bd5e708bb28332f3b21dd6f33359243eeba621dc9269ec7ee9f2e60ffbaf158ba3a0cb144e0b824302710bbca0c0e80566caf698b7f64f361f366e7f923994c0f4e16b0cdff7e98ea01e781d8205541150e13455151b2cbe2645d29b6253a08eb908999aebae2f7c920a653f638f310bb1d2243e323e4cbd06095a8df566009df9fd9de6fc981cb6e21f1949cac6469a91850e7898c978dcc8694d7ad3db7d96bca8bf19991d78e49843de6440125d67f9e23a2ecf2276c3734cf58d8218df210af1475b4ba50aaeba60fab84cdb3c19f0d1ef865db30e190f9c98eb8c87eee5ecc07cd398989bba525db66c7689ac597f3a76a8cce20a87a5407fbf798f718b69fda7aa0b5ef3b367225aa9468475cfad0517bda41931b43b20f22fcf9732ba8a901007295fda3f02972e9645355f22821a1aed6bbf4a49dc2438631809f71b5661ff137c0418062aa47a5cfa0232fb0661c75fab3b1eed8d349b84db4c8956d558bcf68bb374b1e7318522ed54b50142c3663cebf77549583861baa1c8b0120f5e8ed7ded5b8e841269811a794b1dd3d263eabb45a16044418d32cf1e533f70d59bfdefed3aa52416bfb51af28ef36ff7498d58dcccbc759bc3903530bdcaed633953572131398eee8f6098d7a34b59193bce2feb55a3aa00cdb664fa271df72d25901c2ffba625186d161caf04b02fa6df2f98f7e8c0420f1007e6e12bb32ea20526d77fe6957702bd382edf4fbc442e88242c98d29cee251f27337c3824d4503ca9e1877e61f55c045947eed0ba372eeb3e6334bf93fec16f76c331e8edb8b6507bf2dd4fa63082e6fbe064344499166cf0d5620c30048265891e889a682c42d52f63e7c6dcb8f5b99290c5d6e5ba7371cdeb87551b8fe6b5d0be06d94eaf943f36bd4d707fef4310bfd18a55184bd4be382e3b0691014cb4d02a3331ebc328f3248764d90a53f970c61b282b46ad9896b215f3bd4b09430729db7410da075f857b2ad46cf677674e67d635c60b506d9fee1b27c5a3f85811205a601283dcc69a9d3002a8deda3b2df7ab29c1e0e4923e2ed66ddc266f0a67662f8d9393c3ec771d3f76192decd38408028a8b41dac4f606b03c4d6ccdc86e6db33330644d3fbf8da1a53a6e3fdee51b64be9ea893646c0840f9b5c1a510ba998e17659fe94ed830ff26991a43abc5945a6c78afaefee4a5f14c91df7581c09c2890af81288855d9a06091ac88c8aa255beab5a1ae030462599b6e10cf7a14c81b457ab27b8accda4de9c0bf8fb40720d1dfb248e10f5fbfd27ca70003883bbfce9c53ce52a481a55038b2adb90c612954a21ae018723b210456d917c23a89e5cb0bc71f6e8428dd4fc3d401a5204ca16cd83c1194ea3b3857b070e28bff93dc891a414fffa836e4a5119145c4ae3e1b82f8b247e6c5e46855100adab145edf6915e5ebab66f205de8b89704a7e49a1a2f79fa1d9e93bb33850c037ae2ac0ce67c3e7bf9f367699b931f31a8bf81f50fdad29fed2ce2141c5ffaf73d80a0550e92412578672f97302cbc1dbc8c04e37f0d990041022fa3955e6362bd2bb17ae17becf7d062062dce2e25a7ba9dcbd9ea4043c7b3cedade30f8ebb254345dc301a1c84f7c74a991a81fd26c2d55653cc40b5952bfd3822871c7ea82ad4b13e1d1ac39b8e72f7857506a48d78f536fa0bed7503dbfc0a416da33e63022d0624bf3e3d7a0aaf301037995ff764b08299a1d3cbee55e16bf2ddcd575675f54c755caf108b3325fc21a664b7cc4faf4417d7193fbe5f53631d1ec250e74bd48b1b3d95c734d17d63a10c8c3374019a835ef5e859dbc2fafbaa79a9b1804b74ccfdaa17e7dfab5f6d76af3c5c58421848554367a2ad467f3a8136aa03883f7a1603ea5dfaf38a712389d89ab8dedad19ae409bfa19db28a298a9defcd67ed917215479088d8365e8cc2ceced16f906e81f38e17de11d0c2ceaef59d97841d5fe71b07d817f577ccb009db012f742d97056a1b98e27266d033d388dfea49998c7dfd735c31b415649847455b58537af32f31f86934293d5b60e29cdb4c1d28c13ca3d3455d7cd7cd4b625503d6763c2b06316db45d9c1d0c5bc47ab9486891a62df66fba24b686afd144532231433ee69250c29ee335cd8b2e5f6aa263939de257dc8ee40cc8eab433d387dfef2447cddc773e51505b177fe19db3be2704141ec33e7aeb9f1bcb8278f938639a801e88eb8f2af52b75c1917a659f341b24be01770579f66517f1c1a89db0d5b9be8cbec87eceb1fded9468039e742dc75b62347d17d42de524241acca7355ed5485917792e72ae4d2a58ad83327bd0b412ca5edd5ed3b9a7ab2b34ebfe102675854d3d08855e14a394d5070308fc4669afbc289dc1bdc23312cfb90d8c895421dd2fd57c6dd90a8793d21f8a083fb66e9c0139c727dc6f12c3d84e3a38e71162b8c98adecd2db8828f199c201a8b494c3f613b627a76e9cb240e9d7bea7484be7ee101358ca0471bf07027cd262a268a02a3d377a1d458e69f384ed78a76d6bf9740e589947bdfdb1ea0689a146277b04c91ab0d843ee3eb9b20095701362eed6caedce3cc06a7498271068ecc7c614784f16b2c0bfbb263808c750235fcb5cf63f38e4a1c88c8ed82aaaab237bf0ed6148cbbdc1e55eed6b5453ae00f1092ede5d6a5c66c4b6a4f8715fb0c3b75a6e5632a4126a592bfcaa41301f977b9eecf5b20c65fa495b3f8fa78a2a7c1e450fcd993a81188fb4cc9b4bd72565640f1fe2b999b1eadafce6f419c4688b25635a4de8e96a6afd8be5a4d0d34fe92edc201bf09cc0a6de1e13cc64990b9f4117d64dae4b4ec02713c06d7c9f0f915088a607d38012bcd7215e8ef462741715e4fc5355da9eb6a0def53baba4d50c5d970a4cfeee18ab5ac91fa265db5280f84d34e57c11dabcdf6ffcb5fa8f40a8ca89d541cf2142e0ed57efad254df76b8cd3387a9d8ba35157293f62c5b8c2f51bc39f8cb0d4320be3603705af44f34537f94f8916a259028cad35b8a9abec8fc5e6b1846071666af1749e52805ad6ac8e3212a783e09c4f046e882e22e32db74d65b3df4a8340ac7c077e1a34fa01eff41ffa4c71d0cda532dfaf39ae08f73a36c32ee3db74613f078b6ea3399d15adfe159eee4cfd6d93bc930371c767d95706818b489fef38a11882e8a40ade825520a5591391c10c98f60b3d5ceb8a64bc31134164043e4761238064832518c8840051b142ccc62b2373bab551a70af9c84b0af9cca4fc0dfdad067ac724e65898f1bd4ff27a6739d1aa23f40676443919b8db0ce90ea30ce5398783f666c1c332891a8db9173ec9122dc971c1c5d0830f1f06035f8dbdc4964d862887772598bf3b2be2ed2fb74973633dc74a323a6836c21e7586bec6b5bf5d74c100d2ac39bd8c53f835206b4b63eed36cd637ec692f5676cbf52e38609efde5f5d915a036ac011525f785c54f62353ccb1c4361063750c17f31389d45d3835c2f969cbc10091df204caec4fb5fcbadc7a72e122b01d256117b18a6fe5eb9249e6cff45a4663577d1d15c0851fa1f434e3809dcc071f68e82dfc702ab145af31b3cba9054a392218c77e8ee00ce075c8aeabd5a76bcc7fb92a88a64848804e960f301737abf922579c4bb3fade36c42a348b255f6eb2fe7675dc89630c19d4f96183eb7bec31ccac1423dc20242343bc0d75194e70615982c86e85e58c70e6de434d824c7b6175a8c79d641a7f24990092100e1f213605707ac5485a4a3408b73ce37823ea06d1b01f0ef8244fb9189a7ad2802bf1cfa6c205673d3bb5c1af16b6ec399ca890556492fee4f8066f66dc20332c0f528ca1fa00cad0f46fa83e7f39de431147ac7528bbe3d6e033a5f8681ac84e33c40b8b8af566a03ec8665b433e10211c37a9b59f02642a7767fb31a0d2f88333e6bac7e74bd12755607a7a154c58502809269b1a0ee67c4813edc728e14a578a0b18eba18c80d2e2c8531f67eced5ccf3c919a3c29e138bcb7ec1d62be442790d1a46b5c200c4f61509ebfbd8865a37c32793777fbeadc6fd474a8d0c26c9ff2bafbdb49beb9d94b999bdf78b747c0b99b4bf75fed79f3bbea15fe15a62a1d2a277d902cb1301d2c1408f34be20a40f1c7986e5687050b3b795e8183d2032ba1b7a83e679005976d50349f89a13380cf57dce0ee41228f5902acd7bdce9e47f3ec1a4a7ce380b499cecd38c47d4a2cacbc881399b448fcbf069f65260441fe8b253228ef1458113bf021538eceb4811476385aeb48eedfb7f584ce5f0ba4bbe2039e7e30aaf219ce54df743b2e194a91155c4b55878aa4ee602b57bb5d2d0c92f79d9ee43fc55abb7d662f7c03dec59d0a62496af8b2e8ccd6c1a5ed71416d1881de2f6c2b6840adda43c9a3f87baea2c5f8f98e04ee27ddba064d47d08869ed22ce945af64157ffebf6f7556486525cf87ec04144a2ce8b9a57926cf3786f7b6afd521338f72d3c230e1d02e0655cf5e262322720575970f83439cf6287fa6dcad90d376be02ced3fe7cf3ee4cf2b384451b3a230926508442a97d1a63da71eb2e01a29f792d37d6312625bf9fa498e7eabe944edea5dcc0eb92136271fd218c3b10d8d6495bd876d2c9afc989d3452f20f3781c0a5c036c86e8a4f7d9527e66daa5bc45b4f47759e84cd93391e78305eca22db517b18c3019927901233f4f2216a895114460dd277b97eb2640481a1158b3fc408d0e41b3ae78daa7d82e5e67f401ac658108d28994922dc91c5ed2fa6b0f2de5f2dae89e4c820e117f8671de7e994967f2521d263925e745af9273682d9c08ced07d4a98fc985f68a0af512ebb56b33f1fa788a8753860c1814ac405a743d420ae5f2f4ac5a213d4c311c600b32134169070d9b44db3e16618ef8e76e0eddb0615e85f5baf88737c711497fc6fe31214ce13d9f5cb7eb25bfeea9966e08063a68c80a174c232c78931208ec9f682966060fa5010f6811bc9bba1ad7bb0e6b5289b8fbe3d078857228c9d711050e80823ce8b06b0d6a564d8d57e925d570519b5ca7d7f5d85736a7009f3097886fbb084a130c27b74d0d4afd6e80fb5ddc7d675a2b2a97d44d94a9b308a1eaa9fa5d5ac60504e19d7ebb4774647ee2b4b12368faa9607444da43dca89ca784da3ccc1c29352703307df4c57ab02f566a8d07f2b6a91605ba7ba8c259d1cde0a9b5abaefc2a0f1710d92e4788f83ed0ffce8fa736b0c7b695a057fd5f3e619898e36095b76a1987af0eec40279319dcd5042ef8d346d21176f6b5d021391f2718448f62d36bd2ff7b8da341cf274cf49abc6a6a14e1e1a0dedd670d386862e6b8578c88e8b5c7c8f6e3d7bee81b4492b155c66d83f852ef2dc2dfe71d32c981e9aaec9a5fce649eb1901e2a1ae59d41a96ec7959910c256f4558500482eaf733cad23f9b11c35cb2c10db15d01cb38be375e254dcb1ac62b2f3eaeb31c2a12511ecc7397525c7d8d6e49304903733dc0ff9ab3dc7616dacfa2c95fa62853b2219c84adc248177624299da68e3bb7abc8f7886b2d196a2902a6e0ad062ecd9f4a4ee335437a5d0e1ef9f15d533100497d251194693c7d7b6d446bdefbb6ffa1753ccf524370970c24e72d9bc16eb7e088931b77b768b798b783533bac4953804a6d314deab32b39ddfa39a90079423890498f5d40238048896c7e0c426e300370e9f26e5fca835df23afdcf37da0b193e4d568c2cf840528b05d599e4aefef490b8f8fdcb3d05400aaf62548f1a784b3aa9564da26c5f7f64584029bb90261951e32d4255951ba9ce624e822fc0f3952b6579e7ca094597bd6da806ef9c0e3a5c70788526592c61e55aaa9f3f54e3c1ba87a6a4cd565b623d4af376a75a1f21586ac00d65119f31f99f5ff4e95fb0958e19c5cad3db07a78df90bc20b53c195eed6ef233b46dedfaf3a54c95368c1da5022bda20321b2305482d632440e5d5dc6beec0fd07e5033b13270 +MD = 9354325be0d8127722ab167c4ba9b8c04d6fb4b76ceff8e6f32c55300c70705a3c2bf20cd85706d3f67fef2f2815282456cb9042ca8a6a6b9cf57e9737ec2592 + +Len = 88144 +Msg = f1ec3715e90feae7f5a926567eccc1b02bd2c3b158fd754ac45abaa089eba25852043d12c8f6ad334deb7fe8ed113c6891fb3a797644b835de752a0e0628d210576e9066e06ffb200450b033705aebc15158549bc3401b058c1646b90a0e4a2e6af1d9191bc1fc3582a0613ff0eef645d1b2b721263bc3413507b6a97ee3333af254c0346036d7fa30a339155316867c7ad00b12867bdb71400e21e64bf0b4bc5760ecbe9614b5f77420e1bc831ac3edb47cf977cd49891d17f43079577df63d00dd06bfa7a4bdb5b7e1013c6642d420e87c2857e2edf5ce21808a698cd221455793b5407a2e18bb62ac409ee6d5e19d7c9942baadaf490bc67cd7bed1365c5ac349a247f7faed91db4a46e9ea1d14edda9beca916d7aa5d6eaec1800df3cf06acc975df064f65c08c83bc2559609397684ad02a05ac424b81e0eeb82a4fa3d07ad9d50d8f77a8cfdb1e4a5b1de78623906e96486277395d67d8066e0f93004096426adb7ab8dd4632e597921dfa1619b9cee6081580b71b895fb2a8a4060ddf66cbdd50af5b2caef89e4cd241e16a024a336674060fe30e4d3c9a70d1f2f334533ed67417a7be8d9512102371e3ac66ad65c1931e6ce5bd1c3965cd7e9dd9c8c662fc5098e6bb6e71098c8e954901cb492c9d6d43dfe6b05f1cbbc89350e82125fef8eb1b5e4bd6f44b681a955c93bb8650a30b5eaf0e707cae4667f85348c9d9db714e8959944f869f4bd059618abdcc987a7458258484ddb7abb496ee20484bc1107fc81dc1608fceddb6caa30e5a83cdcab017897174e8ff95b753699824e2777d88c2f2f89277a1c7d7ce69451813b73dc88523fcc9074daa77180bdae705c75f705d22616ba6ddb1384efa5a82e51e79c3893a4e0aa16a92fcce1e0b181e775f4083f42675844d42e3339f731d5fca26a90a178ebf1d1ff64e5be85640945024ff1baf6c387ab823df63a0b973ea83ed83f203e571e5327e76a9b2e1e6cf1a57b50d9c5e3beee5fc34c845530bef10765828447ba7606bd17b9ec3d492379d9f6b41032106499d74eb49d6696dd43a6830942277e9f6949865246558cd34a0a5289e2ce021f4a8330acd9a252203c96b131ee701bf0f737a3c22de951d2eed10f40e5ec11555cee29c3edaadb1e285290aaed943b213d220097f77b20d8d4a89d779e2ec68d6d729a683de29a2db35471c2c4262496a7731d42578d722b980b8dac5018aa5de8aaf3284eec27e54a370528068890d7d2a56a3fb292ee61a574404db00c351d4b01d4729529fcbb7954ab29294de84b2b53780e9d1dce01896d65ea32abef622111aee5a51ea146bd47d474a0d893872df7b72d7ba0c981c0715ee05c6a41b2f754f2eff34c8ded828b216911db3b1266fcb82ad2ae4978c70aabeea1b9c4963a4630f004463b3665891294d0a8475342eceb6536a8c64d29a3cd63872cf072665ff9945c6e31a7d2ec187681d230e06e42d18b2c22d87544d743cd91365dde082cbd5b605709c8570eb38c89eb90402588fb0b079ef897c50fafab3468553f9c16eca3c4830c0e6e7b64557d56ddd92549d8436d9f9f1b16d7518b05357f2d9eb9180bdd64e0e085bcbb5fb0968231d9eff9f2d2874475a6a8d9cb7810441e9c8db0022f8f00e5494d1909e84d15d0bff5c067baf8714e110eb90af1ab4c98f1ff55154f63f49305971de278cd114c33f5cc30ab65bdead2737fb82648e1034b9867b3a186246057353a87e6a90cfaf26a8dcc0851730267718e617a8bba0415f3787bba6818d3cab1ef68b663516367ce85c8763e48fb4c73758562d63011cd7b07cc1e7c6a73bc77ace36c7e971c008c348469aea85bfe13c59273dacb92fe998623324571b6c8f113a67d7d369b593e2aae5705099af8bcef1721ec152e15f9842f8a55c7136cd884106dc1c857ee5ed894b2e3f54ec8e95291f19c85499005723fab2fe3200478aebfb1feb4e81c68bee621bde3cdeb23b081676ea45c1937e0d209364e534c6bd412ee8694b27fe64e0118156dbeebe6597407d4eafc0e1b408528fb8123912c94a877fbd04d854216740a6ceb9827cbddd83761d19feb2a21d78ef1f4177f3570fef2b1101fd926a8bd7d36f5c04b2ebe2c8a87e0ce3cdef537bfcc3fb56310f964c358acbfc7ee655bf50614eda2997aef85c9a0fd7fc44b341fbccc73e9398e988e552e93fe13eccde65cb176ea9684af9da98aa42054943b337622e97e39b10898391e32c821af91d5ad53d26fa06bdb56aa1658cb1a50db9f7abb7c9e7bf1139576e422d2b20e26476a94a6ce31a0f1254ddc91dc801193c82d2ea3c68adf67ea9128ca9a2fb919c036cc6a72d4c48fadf735d5d12046d2221fd4f582d0cc742c0a54c08b0510eab4749373ea0437154548ca9b5575713551c556f8600858a6ce54e07b11dcb5f7b8b66279b04a89208fb4f368b5ea113bbbb01d12ca7c049e46035470eb1108ef316eb1d252122b1fd1ce58b48f08b733e4629fdb4eb640b927983938634c9a3fa3201a244bf5ad81dff753155d5bd3dc504f77c849419d95e786074816d9da47a25d03d60a5f70e4fec28ae18d5de79373e91d5066a89ba30a4f3716725359b5a387f76e19ca25c7b2a268cfbb7962d7e3c1f90a0355ab6f0466512a124388f82b336d5306c03c88902965265458f638146ca36bcbc34d586a6dddf95324f89d9de1fe3b3ddc15d62bca089be456e2228a4b94ec1c8c020da0c8461ac17229049005f27d3b68520eca06eb86d80de735b9d16601721a59ed4c0821f4e9a58acba632129f8c1f61b10f52567dcbe855c027a06f4268f8c575d09fea1e48599e5124d8b728bc4bd55b705f01f72c70be80584b39355da1d545b312070d49e8f443a07c589f28881d6c716f5669762191c4c0045c40ec9ff9cb87e121388aee0d01ad9f8f697d5eba72a715cc7b3595702c039e410b925db375a39f912667c34929a0a4c42e073a3cfc65e4ec72e726ca14776b6febcb6582e2ba900f6d8d23490a3e4e8f4372950568524f3f071760101cafee61680441f8811184c46457687d41badf59403c09a454d0d72c9e22cbd2b321a9ae06d97d74df6cc088a1531d666ecae9aabac012ba3085ff3daea5e49266512fbe5ec762986c10e5a4bafcbc94cfc2f00c09ab1a8789d63a0acf2d24cfa4d2e30ac63abbd3a5a266a0f7d0c079035784e5b349bbcccf4619fc660516fb0d1b661bd3bfc3a71a95c6161e6bc393a7dd0ad04e4860da8f5a118b09da35a4fd8f1b8a1dd32493395f867c652a20650be81454412394313886a34f31290b4df4c285adfaf1591890841a3c8298717dcdfd13da2247d071695061a1626e0256914a372ff1b6cbb7aea803eeed43313e5c809bea7831a01b804bbf4a1405a57f318aa268a88016e0f21fe60c0b96ea3746170efd997d8d801bdd2e71dcac8ef8840859e075e9a534f96002fc741006f909250f9c3c87f34f9a8921d112bf0982d747b03fe0400114231d1d68ad4b01e4143ef03ea7fd6bfa9ae45be05cb9af8ec9cd57df7e4fb51f0dbb87b92db47598f5c9736d822a61e18b531f1811290b7cca0dc337b6552bb627afc4765bc8ec783c58eba141bb7fc4ea6a0df0e68997ed668d54e11efcff69ff7e6618de14a1124661cb626d0d1ff546ad8b033357cf510dc0bf542ea38abaf3bbef192b046de7b278b5297abbccf31e7228b79e102c384e5c55195be56819b2dcc21fa9349d78ef121b8ed123f15ed07c59867d4f3903a694a8a92d4f1216ab457174ff11aa467aa280db36f247991b10b01857617063851e3c7c192d13224baa9fb183282ec0e3ce67c6e2931a224cd3aeb5b3035cb8886d830ab61bd5dd22608f6debd4957898da42aa8a82f39ae429b807268178732ef71efd7aa7e4a7ae0bd3028fc378fe287a942e854e5e538fa76e8518783e33c73f629cdd3dca027cf0fd07e56133921113feab7951d4fc8dc134b80f64286b0fcae0916469f08dedd48fe6833a7004c12ac4a9cd39d1f69d0b9d0881c1c1a9571e2b439698f29a9f1afe46ffbb9896d74398c1f762efc20beb19ff060d844f4b9da55bea674ac8ff38ba71a17127f8b1e2ed5c8e6988ef78e44e1402c40aed4bede122e64153899cc2572f2ed7a88aff8d350208ba37ef528b7be01e71a003d673613100a3b76cd62c56b7ee6b94ce0ea6f22aece17742275555dbaf82fe1389c2981ec02ae0d359eb2ba466a967526dc4c76fa15bb17875b65e7f3c947facb4500844bb336a6d9683688d2e2daa889b6b0728dc958102bc32e8334c12af3014b0443b3859be9bfa997fdabb44d8f1260e43eee53b6061796f95a06489f73df947ae7afe0a47df1471e40584ab7d2c8c23003a5199da251ba0e94f0c66f226f09ad97c42c1b0b772c137a610be019b4c5dbe93b85d58ce319b5587ba362aab892e47c7cd1c63a573ebed24f5e900bdc4f2f1737fe256bd49a36ce2d4840b0c21866be5e376db39b676671a8ad8e504a4972b621eb57e82d24d81f911bd1df96817c84f2c7da1e4b8e557ef75fa391069ceded82b631aaf5a1e5732c85dddc3bb76ef6c1e7d4226d9bd122c1dc9776162ee8e5e1c67c5a34f8a3f188ef2b52b9a0843e520022670b752385908b32a684e9abc5c683ff9ff3115bc22cbf84e7192606812d7b8d962c0693ceebd63bca58b47db6b955842239d4540da05fb04362303beadbbedd57d93568265b247c899876a8e043a4d18a0e29d8fb6d35770f9ca56c9ee333da5119eaecb467debb8c4e19726aebd8b0807af82db41aaba1f3cf6fe1c8cd414b2df40d65a1976ac17a8184247d3a59e6ac86299c5f2f27f5960475e28e224ffa9272871c14733156fc3a9f0540b7903eb539a46d2534133ca1439fb71869c7ad299c3e5936849b41ba80525fdceae37f449c51e82db2d63ebb92d5a78f2a102d9a791b642e51114c5b5b8578785bbb7000b51855a031d8c38dfbfffb1bee92428c1106842562f93d88d3209a3d9381db928ee2fba5378193bf8505fce33bb5b3a76de8024340bcdde8f10b0b53199b86a12f9523654e3975f838cfef109ce14a9494a726af72c3f424bc2f13e1757339d69e1b1507fd6833e01d461fc9967ecdfb8e2d389280754ae33d72fc0f306fbed9e55a19b4cd7693203b50d337b3f4058364608013f339a6ce7abd0c07d1f9dc510c3c779444cb5e609bd652827aabbad51d2a465b5279d28c7df98deee0785ae619a876ceeccf5b4743c1e5d1730cb499c172d191259c94c64e0cc5efe554014116855f8b4deb547e3df7d44c277dba7659206adef50ab524f3e0fd2f69f4990a0abd7af2ed850fad9162671d1d679614ec1b596a482afd4d765b7cd9f4c2eae8fe370f2c5607567b45e9e669dd330e1c824de65ca96633eade678c130c25bb84f9db666010d7ef906373985bf047eb36239d59dd9d2521a234eb73053b85d5860391c7b7a15fa295f2eac618dd0df409d8f3f914aed08d1e7fce7ad9084b01952441795993053932fb35b8cb2cebf33ea8370f2a63cd4006c7fae9b4fbdd055965d3c56d6e337a0e853cb69a664bae7c9c51e34644850201155608c09da4a97ccd2ff31bb8502fd298e708ad1294ef6cbb2abd91da609ab770ca1e257508b7a3653e4b8dfbc41e253c1ef52db82e7cb60da8e533acc7d2d1e03e750b0c72f57834e614e8bef610b07ac9c642e1811d019ab4a253432070f76d9a5399e8482da3421098578a50cc1b59d0c41314f59cf56b373e1925d43dd020c601f793f325cc97a51d00e6391c0de21b34c9d9f2c03b8717ffaedc4c010500abc74e95dca69a3c8bec0b5a19c62e1c92618bb8e0507bf63e2e3af0ef843d152fecc6746a77b538ac4da16e5993270f1e92823a27155cc19212e4e7248d21683bba86ba0462c693ee87eaab5f4ba0c3a50ed6e62fd787effdf5d54b55e65900b877b7ee142d75553be40d9894b64041101eae44605da488661d35a3e9558ce68c6c809901a169877aaa32be609bb090480a32dd23715a95b4d32b7848a36220a1e10a4233864b31932283a32cc498b8341a8c38ded9511cd15fdf51da9885b8dd1e7c7112a4c2596d9425d15ef79ec2bb96e1defb5e3228a4097ab606fb9ab52a6affaf06c27709f24843d060fd6db5c7c55c55e0c8a5be1519242f37964c206f0fbb8277aa114809850326989eab993ff02227f7df51e80cd60445d22f40009453d775cd22391f9a958d5d70a101760a5f5edba66bdfad718a437f408f215d807f7c0d70f397948ebe0afd4ed01655125a36fa5733f6162c7b0866e97e95401ddad1d4c8e5d2b2cb49a28c9cf1933d3e29d20b71003f2926f17c8035c344b052aeff513ebf937e3a7e7c94c1cd1f3776135b965c9a62f04536c7588d28d8b507412d0c384b8102c3a4c19c252c634aa261f9247fc90673729110735773f65724dd848e1f4f45454f04982d30d6067eab5cd33c4455d3b996497f5bfc6d489f92c82c5e5c94864fc4e72ace4a92b1db77491266120573ca97a73e97e5de7694374a4c0455e2ed290c939f07db290c6aef73dd2a52a28bae5ff372af798e283efcad0c09740022da0d511e604b64be32fb215d116af4c66dd475462b1f4405a6c93795f420b8cc6ab168cf620209703b849abaa2c3c3c910e074e09441cab5d387320f4dc0d093e2de22db9469e0c98e70271b66c5d73f9f6a3a687246e6e1cd1ce4a29dbe1121497ec56a7ee6b37232a910a8e3d8f8ce20590d074b9661319d7296746a81431ba7789aa3a9e248122f159d8ba365ed1e9d9736e4a999024c4a708fb03f712e2c04b4e9af9cc668528e9e16e92ed27fd81d0bfc2913b793dbdcfd197ca1f699fa691afab6dff8dbda562bc2ed0a8976a4a99da9fb1258da855c037a001a784e2ddd9214dffbe269518fa3eabcc1f09a29483584842de4a1f3d169fb66315f136e6904805277eada6042f0d681db71b21002bbd4ececc3aecc4317e4d36f13b16514588738db7af5ae76f9ce62de738800df17e25bd75dc9b9bbf47d715afcf0b9e6766fb9b0f983e433a61a87545ee2a2e832f6f8771abc623fea0d687c839712e74680fc7dcf4ca981df0119c499899e24f257eb53634e6edae0dee05d0e701a20b1042aca6318a6698ccc40b78e459b9c404f5df39e468691bf360083074176989d416a201faf82f295c423b4a4dd4156052476e0356d516e6d5ef078d4d3d157f480e5056ad9e625e22eeb43431b3a5c271f5da18e8b7878d39ed9c4dfeed1669c09c204ac5d7a085c55bfecd3c52bb690883bbe1368a2b7d93de3ed8e591ecc7f242aa24e04e5a6e980c838bca4bf6a26a737c02acb78346885357d4bde619183194569b696d00472f62eae67809c82d3c37a2e3d7da1f666bcf8fc7d4342be922f3ae04ddbe22ce00018d73a216a057d262b90b347c605bd2b53f08b51685a93b0328f7b9ac42519e6ae399e4ed2fc0e16736ff4ef8f6a531a6fe3dfd07c6d6de254ffa99d1df707f01a5efcd17b6e6ddc7a51683da32c12d1735ce08825000a0ec9b73daa96ab916681ceba700f6382c067c177fbab53e09788e4f6410c19517bb83fa18ad7479e8f0e0f42f433e43509624489ef4ee8a7b6d60289c2d9c32a734a203b0587d618b4e6abfa2491f76e01956406e235f24e74843e01d433037d3ca7e175e24e5de61d342a4ccad1a715ee26a8569d0879bd1abb20c73fc2e3321ff60ab6ebd6e6f0121e129fac9bf912193d98e1e56e86dcefa23141cb2f6a3264602465e6c4781edbcced5a9495f74dca03bd0f850f1f933d62f8d83f22a063530cb6ec9cc31c58bf6742e7486aa8af499f9e4943944fca4a22fdf465428eae342248b2d579d98607179aad90c0141edd3ac4f5e9a51b69600bc9fe03383bfb4ecc621f588eb790fc037c1436404483cffcb57d3de98d58c545e35ce2abb033ea308d9befabbe5ee354708400913fc7670cfb470809ac7fc1f7d378ca44f33c5076508e6078f7d80731fe65b85b0dd0ed931ebd11ac80c69e4922b983ab0e00c8c73460749c69e7afc3af1f2448b788a9b8a445227b1216a2645786d48708669a4bc079f3c01c7122320a1a0dfe44d6e3a41749011e69551770fa498681ea550d297c42a58b195fa9a598bf3a25bca1e27efe30773c8d6d439494696140bbb76a8af02152a6679a8c44df74756628d3ef6fe2624c7d87446ff9ac4e2d6d8373f995a57fc1b80e09133869a284698f53529f4a47488b5ec4e2c7ca60b2af4b71027322c5bb6a179386a9beb230d5f9095335be47330b1ad4e6257607b8af1a99cd4bef59086489222cbe640a41526edd3a5ac6cad4a8c45bc13b39ab0614f8d3a24695a5704d6c9d4ea0e5147f8af7b74e35eb38f4086343bc329ab46587ed07c88c9b0fbbcdc9eb3477c937b2229b7fd8efb4f95bd3ff731f32228a9db0021d88448901b08ea7f6266a96daa1c5631d20afaa75d1b2a1d33262579576363efd2a96e8e218350ea56ca1d667151955796e9e53141e4c4f4b3debc33db8c2aa8ff6ab3e1abb6d06e04d451045d6c67c7c0ae43a3f094b13c387f5eeeb2afb4cbc33ab161161dc988f127ecddcac75dd0c3ba8e45c5c54f52359a75f05958a2e6a2bbef52ed22acb9b047394945fce82124b12dbd5dd12fc53fb299ef5c1165882240a65dbd500a8ea684dedd5b6787277804ba610552a303bb5a433217648d0ed67baed8034063565893360077a1cb521237bcd778b4799c4cf40a7f37cc8a0913cf41683b5e37cf4ae4e7692736154fa7bc9d870490f40d4902480d19a3dd058eae0664d213f85801ec6b6de69f056e9d25e5065552a2c54417949259a4f6629bba867463fc456ef22c2a9532470c3d56e62bdbd7841652d2a66875642a76cebf571a1d6d918f92b026ad55a6b8aa3a898fca5e07afcf4459314c4cc5bede988e1669b66b5e3761a06e7c45908e6ff49985492362302e086c4aa87efacc9e6e7c7acdd5c9dced3a67661febac12bdea0b6930b273bfc31d704515927ffe16af0ef6eef2256801ab699ff09e35f0149953ae1991b8991f01f9d31c1dc1ae07d8ba0d25a1eaba25331b8ea6f3eaa1247106b65c27ad66a2448d5714776c66c27a02400a5ba63dc84011b4ab8316903e0f9934811acea2ed539f53a735dcb2d7117c121585d45d5b70d0a466a26667f1c38f8b10b198d860bda44b3cef9f1cd62d8c05dfb6e1b36f33dcd060f84672c04b5e2c93a29871acf130c05dfb300f103cc69db1757aba64179abb32eb335b29f599bb825459f9128cc93572ef1bf435ad903c4337fbecea8a9ee75501b98baf60a6aa554d39f941fed23d2441cf76b72e8d83fd84e1b5630b5dc73fc2457ec0fb196b8503d4dcabb5e029da89d701150e22e758d2c8ce5e185bed6ba363ceff437681ba0e971dc040778e2e2daf2dcfead4e8eda81d723c402dbc512b90d6cad8228f3cc41d57102d1cfc67b3d4574833380b147b5c5bae0127d698d15930a407c1e6b5dab4032bea24d73fa2d3082e75a0b065d301e4f3d9eeaeab2b29672b70c91a8da9179c63f643c11e7127dae320c39b6a35baa8de48f6b6f0af8de4b1919cbd5cb5a49d78dfde2c7cb53f29f6d3050e9a29c3019dccb48201c50323e6f8d1218b86e780ab15788be2d5a58fea0ae99c6e05c7a9e2d3cc92670205bf3c04faf992a35ce09b258751e958e7672d16e5c76e7044ec2e0c936a98ed122111447ea81a917137c98eaf30e8b5716a40a57e1213ffa752dfc59d6d0ffcc4d41745d0af8bb7c0e0a6cf448b6981dfe3b52536fed6ea8b78889d6f2c44a78a42ae6795925eacc885c355dbd3f4348f7e0b24a4f05fe74db7b9027d2adf73cf17575831d31bd6f491afb0f9ad11540c93b3022ca8f77c8abad1734beb28e82fac926639f44bccd19ebc6f12793956e3cf3d7c426b45f0bedc729e5fefb98b188cf03012784704ec0779febacae4b3818b1ac18ab9b40a56a70cb22d9b19d30632e1345fc1c605b05678de5704abf07241cb906a36da1feea5107d399fc2369538f5e186832155ab16399c7bc8d7a4429dd057754510b7e3512e4e08403b4c3209aed60b1ef15b58c12ca79d8a20355ef9b98510770058d125a6b31e3efd7a691f6c707207aead25e1d28e40cafe2a43eff7b7e05f117934ad1a2aefde7157a704cf4f3fdfc1b1bef2bbbeea0dda097deb1b5e493fdc9f8a52093401c14f4a883437d0e909c31f607e58c80db53c49896584e6dfcbca424ebef46cd869efe969384693e2083b3cd6df3a283063ad60e309c4f0086552f7fe4e5c13e84acbbad67b6c06df7d82907eafc05dd69b95e617227bf847bf1f27258ab0e7c5e66b255c9828b825bc41c0c46a8be784cf9e5f8259ea6e321b776630ee9356e5cf56bf77f90d165956f134449a1d43af721f23d11ac0c04c1d042bbcf463cfbc6816ef952879afeed009617ba8c4f0db15a0e97fdf7facfa263dfe3636a2d0de33144c50a10ee35aa9f2ded631438d8c4ccc06eb227772c0e99d34192fe0f8bfc2e74c16fd2d6f21676612e0adf9683769e902bf9e58c034b9aa83f24aaeb5c59a086574876591d77aab942789571f510f9063498d9403ca28de544e015c86a42ae02ee5fa3809e1666be9175dfd118d904abf257aa9bbf5b9a13b78fe8ae9cff8071ed7a02525d3bd0f684c965bfd31be806cd0000a574beebb902f9caa6dad73f5bbe623ad7422e10eb813bce420e1ccca02e5985674413a55f8ce664b60c141346c8dff41736364f25f194c263b126d9ff7b2cdfe815a1f38ebd1e5ee91afc23bc73b9d81b1f9cb52b3d9ceb29a57f36ad1e3fb630d1b1fbccfd685f44edd8984427b78deae7a96984cb1bee9cd06f0d327d5ab3485e8be5a4b48e0fd16bef99674ca2bc8c74a294bb05d976c41b40831402477d37a677da9b4a5617977d8b4fab4a420c0ab0d25d55529d29aa6e38c2dd13cdbd058fbd023b27891f9e0cf2e29b8a5f266b8180eddc1931af55b2a1f2141ab31bbb03a4840bb4efceeffe6d79bc72c1b1b7d1f36bd8c45bb1cdcdc13a427ec23e60e9758893574fcd913d443c986b2f56f6877400cfbae4d71ba9e1c3eea7c2cffc2879385c7972c38cafbf54b6de73bd318b4bd44b6394c8462d48b5a0fd7b7598aaf5baed832159e93e26e99e31538d70c5c00ed327322d56404037e1e8b4d93a563436cedb2237afd1c022d9ce986fb91d1bd7f06e88ad54cc0f7137d037a3ed147dd588eb3d04e64fd628ee1b0a0a167ba35628a05cf147b8fe8c2d1dca7ab6cc17bea21a3c6996a2b023658270078ec7a1b4062577a037ec55b0483736069f664b1ba4cfe50dc8b1963ac769930d29e95d180f65a1632c4f5c04128642f0afcb6111177402998464d0959a3a3cc5f0c91fabcdc9a1e22fcb5bb11273b8e0eee1a1ca827059b4d0a3a55d695c31d6ea4f2f94c7b741c4474799ded0645e7d6591526e6d2bb307b6565fbab9373bea2064d4fc859847b27dac5fb4d5c2fe701bc4be24600dd7393d6544d3143321a698ee580b90d57c53d8e0f55ba8f65e6018602b15e47e8ff36db89dd101b8adb45cd601e86fd4a85060cca3fad16647f6654ee26980e6a1dd4f38b1db092ea5bc740518bcaaff93501d58b1bad97c80da09772b47bdadd69eeacbca1ab2fdd265e662e4aecabd04fc186d66c2479fd3b30cc24dd7223bf6df475a2eb6878dfc58bcd4afe75675c5fc58f10b3ba336062a7716924337f8c9476cce26d60d47ea3dfe45bf8fd6919cf7e5cee84c76abe2e6515d40b0844d167f630dfaa2ce9166bbb29c5ecdd2785295c8ea451e46652f90a27ea04892a0a72e3401f24351d4367ae2c1d2c9d392af7f082f6ad89eccb5cf7361fa33e85a42fde59056e11e792323959b63ac60477a5dad839ea303483b4ccbee96990ee4b09480a46da3bee6f55ed4145b9e02ff7dd6c0d02ba7ff418baeb20dbba18da4b99a0c2480b2b88574d2a61300c640227e9347fd570b191f6b9e30a6b373ec0424b892f8d73694bd682813819c4da218463c4df26bf8da4aa4c44ea1c438b36bbb951908ba56dbf598072344755ab0499d78d797ae95c82bfec713e637186b4144daa93c713a1497cd18df45d316f31e4aefefd46a0b6d284050885d543a9bed882e4a7c430bc70acf034e6c00a9f2fd174a9c91e58151aa3406b3ef62c7cbd94f3a05b07af17cb6666f78a2433a354fca31e7b66920fa1aa0929e82abe6836c61a5e1c05c13bc035a0466cde3f1457d2c4bd62b3c0ff2de4d9b51ff75c04c0e8518e794329a0e59726b1fd629f7a9ed054174d8a677c16003cad24f097dad27853b1e1443adfb20774caba65d74e9091dbac6a5f180ed0689c72b58af442f1f27b58e29d9750ac0324e1324c78f8e383b5fd67b6351003aa9396404ae3d585f342f3fb93a1ac3a1681a5e37ae711fe129d8ab404613826329c8833a5091b34d73503aadafc3ae2be45894c95c42246eadcc4ddee0edf9e8d21d92e2db68c552aec186ee809854c76dafbec11729264690e4c53b7a08ef336ce098e398e918d7ab292b63f5c23cdbcac7e306284eacd199c71a415b8cebabbfb99e27cf3d3342333132f35669eed1c4490b82d7da3e77921d54d6cda076b8924eab95c88b9efc0e81a288eab4f30f23dd3e1c6bf564a041907ce4166c17c2af4ac715cafce26e04c08309faccd2ffaf2a85bc2ec6a7b470c698527f195631dc53fa8f1eb886ffdd96dd5dced913072fd9e74a66768e1be567b30850cfbb6ee2114deb0de6121660adb96eae023f916d916daf5c2ca23d691cd2eed1b5cfdf892ec711ddaf0e1d57aa1e23e26fdd042ffb1ed158116983c38dffec4af419ed984f71ead63a037b88381564b14975c83ebf0299a14d6d53bd6141ea02b32100d91e515c42b07998bbfda51965b88f45628421ef810736161d40a1d0421b7081124372506738f6dcbaa1d62a44e3b4e362f284bc3e684a35acd4258652548dd60c66d9af8ffb04af4ccdb08097f36b0a08b232e62197331632c2d7f47a8500698f2e905f00202a7938293c01a50f3d221a6c335772bc792377b5bf0302d752a163439e4a02d0f1a2475c8196b860b19361c790f57901a2c34253e49931710ae54f4e0b56df33df92410f8728160e4fc5a56c50aa7e8c385d5c444e9f507bb09f1cf7df6ddd707eb1eee9579d08409f20ae037b5dc885c35b8e3105fea71fcd3692e5237646b056681593f8dfd61e2a0d43331af6a015c9249ec2129c7e83e81279c1df59601aed1d80b472d4c8d177f22ea4335c4e64d420549e7c631dcf899b993219fe74d7cd39f5f5ce6626810e3835ffd1791a996bb77a6e4b3acb2c3839bae1db4dc90e7e253dfe137c3755784821ecf9344bdc1751d6d98708d2c27e54a3752c2ea9e88648207649fd44763c88b912b5752b575e56328839b778b8e2541d9715895a8d6f09650579d3950ce262c71a0c24002fcb2e5422692e0636eda1f0ef9c462524c1d2d654aae5723ef33d11ab072a138fe34104501d55c36625a3e424cc4d52d5020a390be41b2334f681616eac6dac9d30f80cba5f14f96e14c2c0dfaa8629cabc1857d22f5def1773957d0b05d6138139b933073653ee7642674ec740d9f2287666f84f9493200ff2e32d291a4d8f6486ed40e0abfaeca736f85485952ff41ab95be32d1aa5fc43fcd23b70f1bb696ea0fdfcecc4f1392878df9bc0b16e78c60c5fe212ca7bccdc18ca6d8a9406eac60e4f2fd48b201d229082eb219d80c654f7dabba7aafed701cf338d1c0b185795584da03f0870e2bd074b0c50604b26ed02343793c51467dba87661d15cd7fb02075e19d642c7ce2063a1c5f402b9e0b9b6d61e7e20a6c2922bf9b24e912d1d36a2e96041410f2b742febdfb58cb13bdf9a263812c59d314de025473eb2010458b1583f270d2e3fe0f093233d051a8087378d4df4bbdffc345062ea47c53af991bc127b30af0e538d3000563175def8db137424cf0a566b7002196111d4c244094c7fdf052e95aea3769a433ce4e4e800b8418649bbe8c6297eb07545e6802de7e807324e92ad9a494bc9b1045b149b21ae5e3b0ad47f54864d91ee8b045cfc5419123bb2e33d5da736f56731e15658647b310bbb60025eb0f622948a353ef8776608c3da2a2c40e6bf862e6c7f9266f1a924be0464592ccf01cd2feb810e6a795751926e6f648b2e6ee4ce5d3cb00ef1c09d1b8cea6c060af7f98655f0b49a8174557015b8cc86a6cc770fab2098988c4606ebfcf92334895f0d62718b19d0b8467d25770f4c797760a8b9fe33334ce9c5c6f6fb9a66fd75c1738be759235445542f783d7bccabc8b2dd93007e677131c4450432d41dabf6a592c95e62bb6d5126d4330f053465c24b7f6657081d518bccebdd49af30843394d2e47fafca650445d51c94b36cef8db2f7faabd93e3220642048e73387d155169ba3f1473682853898fc758f5d91506fac17a5fab05d18144c0fb4690ad983b155cf5c33e90dfd87879a5aa1ed93340b0585ec725d1a9a64d7f85a58a2e6e6ef68306a79c94d93bb09c0e9f0053c600d6c0b29492bb1cedd29cc7e08353ea6573d8ec123c08c705b8534cd848ed5fcfd487304880469dd06aa52cb82ac2aea713ab10938b510bbef65bfac656ea6326400832436cf8bef67c354e6cdf0f2dac6c861ebc18f239d0010292f9c8ff728c9fe04325b745f2b89da987af1e8de9fdd50650ec5380b3e15ee3afd2fd71006b4a9bdd500da2dbaf359e82df77b36613e38861c4c9710c5b667babf293038f5ad6978b62beb3dc42da60aa7e693414772e98cba5f947c5b6be3701c8f81b91d3da6fb7de78ed670c02bc691c617487a00cc3f9204179527bdca25bd6bb2d9a5ebc80fd139ab42e6334ee693a0ee93227048664c4508a5523384a149c4aae1b540377c5a2b2bc74f0e7930547b026a654bc4cb902a4ff2035679ac69a3531977c35c0ac1c4f4aed3da136e7d5f3a156e18aa3404bad5c563ac120ec50f94c811fc9d81ae0cef3f991e8466b5547edb635f616a53fd80659abfb58e04105537ab7363a8c80c04c1ca6233e1a563b6066da9513523fb391ccf17cbf6ceae7eaf6eb11748b8cb1c7e8d2f8aa6f593cadcb37ce25c1dbde9302a3abd0ccdf2f876813d1f2925511dbc0b0bf07f4ceda3a65e637ca9e84a76ead4b2f199a6e3a9d40d9fe513b8a7f1c46b81cd32527727ab95e387e22caaca92f507d164048a7a133a60cfce19d47eded6168a88b03b3f3581866bd093e6cb70b4bfc4378ded537a2f074721efe0ae5174548d490e41d48a49d3903bc30563cb3a6431d8e9161d50151cb4d6e3d467676cc23f3d138fccf317525feb640f79edaf7d8210c10dbede13277eb39cb79366e7e8082b682f11b8108c3ea71f0df41c3a931ea7bdd8206c52b10c81c39119970c4f51ddb52989215e0896389c06bea1032d6d6584812941fa41c807ff6be142047e8019a1831e76294ed0678202bec433d3d712bf10c3a73260190ff94cd3aff6fdffa8 +MD = fc85c2a27bac262772a53f8eaa19b3df653c10474adc10497637f246b32909b8b4c97bb19fb209bbbd217ec440e2953ddece86dd54f3000b00b37ff34a61d2e5 + +Len = 88936 +Msg = 8595ad7ef34cc6b60238f58a9a72827a4b199a47e29a8c583a2e385d55a4c332ab609006c2a46cbcff0e0991bc62ae009b8a2ce319db14da669a27f074bf0e7c4df84c46abf170ebc2d38f83610bf180394c0bd97cd7ad69abfa7d92a9d6a4251366c786d4bd390bf38f6fa6b0f3b4c4d0671d743515c0ccb15521881c72edf5a4b1eb0e658f2fe43a4b9143d2a45d9206e44cfb691db3cc21b3fb1df61a51b4a9e19e2587f0ba3d3d0edda1eea656b383ca7fb54378f031a31cf3985f573829c9ffca14616742e0a7e03b0a2d7f05eff0219eebe8adddc3de99f1407eb00a1dad1256241d7c2f931ec993c4b7b9d40df5f290e68344e4497b31dd5f7cad2f58fd222a9ae0b7e91f4ad2cd18b3db2ad739443feb3ac66c8d21ed9f3b80d610a260382ec1d5a1d84cd502d14e496e6e13651f924535badc5579d31f1cb3b413c37e5a4ae021c165e1646287aea3f90a8a208b713a9da89e6a2bee464c3dcea1820093663eef9ff6a8a2f8d780e60465041391c4149a181994de43fa1245ac23a88ee86a2465c4f56734ceaa0b3d18e749e63873195393b59a3adc24b5f3d7fffdcf633edaabb7c8e7c5ece698cebcf82040896792f1a0da46e9c0ad7e70d69f496c0bcaa8ea00d9f0fb58756fc1780052c98a86c69bc8f05e90f77bb5e43169540ce8f7d64a288e4a7e1c3dd83fd467a82a45b9ff7a925fabda8a78a27771c7e65803ababf2b651bcf740281b705995e70bc2e983b68690f56c808a8c4f1d20c6f863cf700b32890f0eca1d7f7b8ef3da1308fc9c762ce904f1e19bbd97bddbbd93104c6ebc259d0b6ac4034d88fbe748eb1fdc8fe20dd39f0fb5927b75da6293d11308ea2e16f778b435c4cec129daf83b0f6fa724b0b7906e05570f11fb1c105c73ed2f888dfe1e932647474c9f35b3aae09f2b619dfb9db7d8d2c194a871fbd938e284f3121ac5b09e740351e55e41e09b5262c45d098f9237ebd82669c91ef36bce30972eb334b2a53349f984bf6a864872957277472da6298a9eeec78c3f50139b7c9b68313442436c606b03bef644ede60d96731f419cb6975915492227983830b02849fd8d08810791d0eac5acc194960f56daf8911be6fa52c278f49e74e2751465587d07ab66ec2450c23b55a6446ae6da3339e7ccc29bd11eda686c8c1a52ef7b1d1a69d4fb0461121288b99a064ad94b064c095751621d51f9e75887e7af8b91203c7d2a47358f3f6213a046e11e2fd1dc98bf639c3880825dda2b0d52742ed0ea4c09565268f8fe3b46d251ddce31933b85d398a90340da8ca7adc86289216002b0d6ff2486e27823881664024227baae7b0ba082ada68010b8a65d1fd6ac68f0d2accec67596d5a44236275963596dbae231202f1cfa9c7173de77914416103d19536b3f1f5c3c46daf841e9170ed5e9220bc3b63a845835421dbcc1b9a98270ec927d976a7bd590b9255bba478f1ac2a3622e21ed8bdae68c2ad4b61eabe311b532acd6403dc90a47851cd5dc2563cdcefd0c781f594a0bb8ce68785c655ea8dbfca20588e8403cecdf2d41bc16d89309a603c1b734d12d30d12010591f18bec6b5042c2ac561af11fc3506d1aaa39bbd23bb069d6597d35bfba385ff213cdadd287d510d1c55ea1ca5dd2d012be96d533dde4eb934c385a1139adf35b2f0858a1cb37e1b35447577a0cdbd36dfd59231bc11a2f3e87dcc6ae3ac27e21b5c4635584eba3b5755d988b5acbe57108c91c168fe0933cbef2e1e318264f0a5aaa544a5f70e55ccb09db9ae23394c0439f26a094d8b61233e3525c6c39e4695ff2a20cb568052da7e497152d934fd03023e9366a63065399569e86a18ddcc36865e3192121b18cae766176877ba52570ffca648af0127551a51cde4292a6acf64c8dfc2d3e490e4127b15b9a4d0334789b40a7713058fbff5753dfe9d8c08a7c4f1932243e5a26f2810d20d0980881a98ef27bb784486be4f5da17e1d0c8e07cc5fb37b082537b550adb62b4dd13919633365dc87c7f29b50925f2d50b1e437a49ca995caac35fcb3db29dd19cc2e8c130b2ca1e795bd9f1f9be1d3df83f37f7530db383283868d782193e915774fbbcffce4d340b6cd0fe5008d38718aa12767a1b32ce7b110b0c8085c18e8dc85edc090f53a3c330c36c94acd23afcfd776a1799738923ebdaccb17ec323b03b66b0e4ec79e8113605bf400085e40597eb54c3ff126db3373cba8d6acffb5f2cb7ee0bec2c7b75eb3c58daaa5afce307c2d8f7c28bc69971c5388cd0247ffb3ad6c5e694f7d871decbdbdd00edffe5dbb2393b7a4c3e5729f8d928557d1c04e427db2d6d4879957f38bacfbaab67ae721e27f78cd02f6cce4c1ef851466a1c974fb018dbbae9414b07781b2e1fbead698b17c480b4345aed337c6559fce4a2e2a2c76176aba205c0bc9657e1b78f53307d7b2adc64c7a1f5436407e62d162854c5a36fb4b73e638ecc87fe6c0f34405559d483166e63c284f078587c33692d4c1cb6cc1c4a08eaf3bbdf87238357f546c4b675c53d933d0acf3bcf82cc7812573c73ef23f0bc0cae0f0f7aaec064d28332936b5f5ed081f53400e5a044ad77f4998d415237a2390c3a9a517422d568a927edec4b5ea631d2c36a233b3883eeb2b8557b2d8b65f09cc302940a374438171948611f997ebd3201fa10ea1495c6f01d5ef52c6871d3de4ccacad78a1bc16b8b157252abd4948154132703655d916b3d1c37c55b40535f1c756e7277d68504f1e7987b1242584f4e67ee3da735ee52ac1fcb8ed07bef8dc674e751ad0f0371f2313bff4942590a654aceef56d93e64cedc18ef646f18e8ef5bddfb762fbd30e074d565dd5f47312d3e51aef091f20029c3b87d83a4500eeb8caae68fa322d051450d353ae38351fad51ed3010ab9b3517922afbab6355e3fa9e6994623d4ced9044be3de99adfb72817f12049de60cba7edffc761f29557016098a260c338acc451a0854cc178c18e60ae277e6176ae92748fa5239bc8311739c4fcbd6cfa2cf89dff92a05608242553abae75dbe5c4205161fbba06f7598251740940e29953745366ccac0098ca3619701bf7f5b6f79ba9fe32efda2ab68acf3031b3ca1d0b7f995a9b3a682e9a08d985d8cc57f02d49a7ecb388bf673279dc80dcdccf8f3b629765671035d57ce5bc734bbca89b507470b5e54d5fb8b4959fed728597f6cb66770e98f710925813eac1de8f90c047622fe02f085f24252841fe5b74ca5aa2d05edd96b7a16f16db8af7f80cb965fa5b0af6fb7f6ab36b78e93c007211c3aaeb765bca188f739f85c49d00fdc89551a9297eb07b266e6fcec02dc746143acafee70f9ae283a6d959c23c602868553493b500b5c43b5c1971ee5b19ba7ac6ea50d9826fdc2411ad9fa95b7f553faf8b60d6057422528652ab9a4e5f94eb70f22a733ab2d01bbb039ea483c54ef5aa3e59b314545d13f200c2ec8cff9d113fcbd4ddc1c9840fadc49fd83b9ada334e35c675b5bd3c25aa0cff0d9f639d913b5b96409f1ec0a9edd6ea700b66c0a1a459ef4370178931b65faa250ff15c166c8bb8c45a174e918523c7927b91c9e6b3901b46cecb0ade1ce00b5b6213a146db4481907c1ef56e7c927e671483bdaa84c393a6563f88d5e67669d8223035c98f6c3bcd8d9a7ce8db0a56165da564971ddba08a91dccabd1c0b0ec4d6afe14890ec2ca213f3aca8a97598c7df5d855388be881a050a9a3fc486404607fa6b6be7ad9c3898904d56eeba8da42014ea86cd5693803c32be03e8ce48863c789bd99b96d5b6a3db279ab3c17ad2aa3359d9f2890be1bebaffb08fcd6eadfd913b3bb48e1e45bd3b011aff72aa7c05209bf301413668110c25eec26af9e3d3ad11383b7fbe0d6c18a481dab564c8b745787e01655e3abf8ef867888d334f4434e7793750fe353bdbd9754c72efde4a09b71ffbddc98250aa40c0e91e621ada8e83a5b0e926e6afea669e5e9194e746d32280f691bf664ac7c4a4ed06cf6b1d24ad65ae327e4752ae13a617fa9b0b310d7f49fa698a0e374c4db99d2bc26b945c2f613a134d81ab8faa3280954c71951e9722104d71a39ea3a3a700768242c79fd0405b74ddbb42f6f1ed9f4bee42f96e32b13e25bb4d08338e171ecf59173e5657ab1a3d741ea049b27c7e02cba5e66518a18ed9b133fc64d6b1001f8d1282e78d497d565bd24cf1b38a25a329c3e36b109808519b7e029e421cad4c675d1abc3ac38fa7dafece57bdbd9a1751c478e8e33eb375c155a2499b012d402f1d8e3b26c0551838caafe297bde7448bcf2d44593d972e6ae165cda90789e12d7d67ce18e9d992bf5f76f90b3314141f0c8be73a3abc62df4ad29334d7c819a9a32cdcd9e622fbb5e5ab06dfc7276e54a419394ee02bfa69b772010418f2cfeab765cd325e383d6383d770dc202a3973bf5fa35dd4ebdf4e50cb80e07310eb39e29a08e8f9243e1162819fcae7245fc484e68b2ec104f7d63f677992902954de4b54f7c660ede807aa31fb71c31ec78f1c355a8a4d7f2c4ba9ce52e01645f4211c1a01933b9b218c826fec985d1f591cafd57939206365f3b9867593ae6cb2497a758e163137d3e912c4da095c2ffdb2644c4e03e3b88a1894194873ffa776a08fec0618ebc7e56783b72d8a69569b9b632443b03e868200650f3547b2fd286c8307d26111563f4cfdd14de42c9d1b1dd5e4bf07d8d637f352eea2d96e77b1f67e4e58b94ae9c9e0a798a2df4c0b6581e2152ad15aaf903b8340f9efdc1cf786a74a01e83e8a6b6daa96954272a9620fb13eebd66b1a751f218ca152a3f4e364268235b596400d392e538cd7457ef80e6be76cdeb41ecee6545b02ca6c075dd7247e5deafa14978d5a56f0646e9210c8379914b1ddc383d94334841edf5e4e28c9c7df4d110cf1b156272ab294ed93833eda4b168d117d40179f8f18a3009ca03ce425a7843303ed4b4ea08960986788a73579d76c11a263f7248b7e61f53185a65d95bffa8eb6896153bcb07a9a761f9b2f06ba23cadb890c4ce019c046f31f2ebb995f1c27f0ccbfbfe5f189fba68f42525b885a4411fb7e9ef6b169faccb8fd85984d92059a008e1a821235c3e122c325de08b8882a0274a3360e0319a3963a43fa5203309d6bf5eafddc28fb0e1e4730f804e69d10e416e106f737ac5f020e7e263618b1df551db9bd1707ab15ccf5fc11428c8ba9e98de2cf35adb9ea44a1bc86c1788f4a082d0e2a8b7dd9de74f610928c515bdf5b012efa910c4b2ba41a8881bbcbd2c5cb4e72acff308f505e71f4e1a8dd149880994bedd0fd670a6aa1677febbb8337e5a86cab3dc8d455d18f31685ed9bebea27ec312bd27176fdd60e3e81aeea88a9f62848f0beeb1d417784e8e78ed623807d81ed01f336242467c8325100c4ca541a542c0324a2cb67653d3babcc007eef7cee28ebdc8516bed20cf9c95be747013982fa77a8350e137484956f4fbb5c8bc8899b6608fead31a7250b671ac2ad35c64d2aaaa41223ea18137c9e64574ae9d2fcaafd02f3760159a8ddb6b7d75b66630b3328c2eacb5fe23257b5b474d88e1ebfee1d55140fb25c10f744dd95e0177255ba8e6f0f52f94599bd41aa9473ed1e3bcb4379d0c8d940f5ce7dd6aeb9cd86b5172812f0592ad49223ced126bb8b5408c90bdbaa3fca8abfe9ee4d5266fd1291dfa2594e5c88f1b411b9a2ac0dfd529f6dd31510d32aabe7dff29c51763a98748a699c69cb782f881d9ea9a4e9978c7830359095215e16f5f7476e0c55eaaae59e0a76e3249d00869dea50a1dcfe742ba6afd8b7b8f97e72e6491ce38491ac6d80f1534b064bf7281929321366a6bc1247ae77f9087124d71374338780d42f64e9aacbf1df2995f515e7b88a0504a6c479cde8b97e49ccab15454c68e906a6742eb34b881daa4f662a827e7636bcc6cad36a95a9a907b8675258c1f81bcda413c6975c6e40429603bd95de588a13be9deb21192a072f7a84511b3ec5978d9abc47c37924f586fc4645ae62a15dcdd0a6176dedcb2725a59a98090d41eabb0cd638c41c4c9bec04b66928a5f1503fcf8bdecd8dfd778eac02adaec80d93fa8d0a0015c035b1e621cc8e8102c8dfededb7d7ac644176cf1064f888f97921b07dc044450f70c609e6112c6423887b5cbda268a72b27a36b552a1f041c24f27151816bbe549e46cbc3fcd93e62c0a100d1d4283a2d209bf7fcda77bcaa91a4b1cad5ecfe2a1eb2a04e080b6c5af1ff7ebcd58cd1f4ccbed969ee991f1f3fa6f62c364e811a62a83be6cb399a76acd52ac12f1d0b1c7c9a944efef9b7f49f87b3080b16f3801a85d310aeea354041c09991394f31feb09dccfe542ff3d521a57ce0fccca205a6da2a6e3ba3c93261404faf9c9a13361956c80aa6927f0b76aec84963d6391578238651f9ecc2d78be2b17eb193fb3d175439f66ec79631ff0209a3e8da153a3ee09b6e523bbeba1216737120a3668e2af477440545f5d33b3dc572e43eb2de4b9fbe15dcf72934a459ea39626ee1a3d4d6246612740a59bbb09058fe7abe8c3ecf82db12d57ed1a33b9a49ef5cf918a567b5ff1f08404fe108dea8801484ce78ee7e406c2d3c3baf2a18052fe429470d379051734924204bb524e421a2a21f9a7af4c87184fdbd18a3c7fdbc9aded97cb4681fb7dd42756c33e7be4b9b92fa0403aad59b631fe080474eb61de7962a846c91bc652b17a9c303bb897675d3e855f6f51a724e2f40767300a0bc60fbc4b4dea1aa03c91057d0a304c83ab7e154f0f367f97ebcb8575bb58260208d5c227e691c8b0c2dc8ea25a0480cf0d847da755777e51925379fb09d3856e2c353ee51ca66b1f6cfbdeb328a19ca415d73e353b1a97fea1e19740588b6f76ba96f62cf4114c14c254bd577aeee8294cdf20a0c80812c6a0dfa8edb0672e423b60b4a578bab3b84d50f3365ad3ab873904eb91042737d018b474a9194f09fb37fa3ef8af8ae733945747f9cf382fe565af66aff8604d4591c8c31d9c2b47c934ce5ccca16732ac1fd28248e105ba6c56465aa3ab9c9e4c91835df040e331d3bc43d8c9573ada4b77276cca9922954396338f1425c1700ea24d0acb0e600f4256c17998d8ec283a23c0cd28fe780894addccdab6fb80cb34b8e91560c88293d8bb006e12c63649eab036d0a19ed5a8421abdc10906aba6215aebb384444c6ede179484b5c89d6a2985a1416f06ad53d7c0683ea90bec2438615501abe7d2f7ae282077f6f45c66b712c89f78ed8bfe745578be1789b6b7f282b18a38119ad0b16340a256d7e7b24bee19553f81d61a90505bd9e4febfe3e8359da7c950286c804f71be45f1e3ef308e100d3382303ac4378dfc91d95c3a71d05604c021e02da343400644c0c5700d593921e54d0ed188718b90aeb8102e3809970bcd0576b692e51824e3c300e74b06112dd570e66145a4d1507c0970319347bd3740893079c7bb8694a3772aa771eb24ab746c4b7c8427fb96ba4bf0d72bf15511bb2bc209ca2cf7dff46ba7530a9ef00552bda295dc9166edc9fe16a16abcdb159d4b9fc912b00861670f0b5c8d87efd5e0d3702fb777afc02bae5602c800dbdd87872e3a29fb24b36befcb36733c8097bf5c58ac9d3132b87fcb338ddc43c3b3da5cf1ff7844c950836c6b7334335eb54ea6b0bf0654ac3106e333a5001c1f43364b8f7b965382c34e33709578f2e6d90f411cb98b5858b48164eadaebe06b060bc15b210c7ddd861ca35f0f9a01955d71b9f13e74c2d4cd4feeadb1e8472366cb5ce992334a36137f5a9b642fc5f6cd368fe2b08b1abce5f2ef00ac9da6d500057cbf41b33f28e606b7ca1592d697a2ae2145b216c65d98fac4983d6485fc4c4abf50b1f4d3228813494fa66bb9e478492caeb5b06c5350c82db8e6e56b05b5fb832255808cbf74559db08932c659a8a7e0922dd0632a97fb89072b98dc9dd7a866b8beeef26c351e13815060a283de3b0b74ad0f414ff90544f79de741012bc1e89860887a95450d49267e7dc4ef63830bda95b59d2fde660ffe90694eec2ce87725cce5abd72e83ad3475f2b3f8e31040487a7bbd66c2ae38a0b5873ccb457c9105569efcbe4c11ce2fd967e62cd7536732edba5871303e6d727fd9b10b100ed49bb01ce39738481a7d1b35d217aadcef1e5209c4dbc1a70ce851c94248171fa07d4bd8070e7d9720a0bde50e35f80d268f39e2a902d1689576cdee46eec51f831eac68cd90867f6f3f241e01142974cbfa17cd6b82fa1395a266b1558ba48f0af43447adb9dd7154acf019411ec9943de37e3282d8a6089bff9eaaf48b200e969275ed3dd70d0d7f7ea49f54c252fc0adfdfaa95806fd806e2e8338a89d1eeb46e03c1d4947fb45e28b3f8a2ab401ca133aeae09f6b2027500c603adf434dfe31b507e386eb0066f4fa0bdb1463b669fb38da566b8070844bdda63c556c332b0fede7aafc248643137ed67070f8f7a54a3df391250e96a248e780c772e07879c9d103fc13b935e22861c8d2a73c6b87e9925c1b33dd3986307414629e66c5f147a984603374b74d1ce9088822f7bb16c07f3e7cffb5023ae9ca8a9541c8c29971bd915fc41bb18cd55fbf1a48f18e5bb74bc13aef5e99c55d310be8c3cc167b2f5453802e77cea53d0b141180f18d5cb7400cdf6d9fa52f72f3bfe48c3b699f6ab7f24bd950b3a23b3430f334c16023a6a448f3e042cf801257cd1004dc650b082f95482e6e0b8ab6233a4bcb27aeb86ec09cfcb00dbec124a45df49479b0c9f302640093987c6698215b9eadec1f21f5dc318444c91afa90239919a2d8f2e1117888fa7198ae3dc874bb7641d85c6825402f12063e8d313e1ca70698c2d4594cdb29be31344b172e64815af1b20d95e433bd2f5d33bd7016d6af43dcfffd3b8b716ed53935f8fdb23bd6d32544daae1cfe0361b17152beff9bda59d857178fb68480c6f3625ff53c3fe168435469bdb4ea2a336bc1f524e4b14fcff292c75bb45a8719c585280ab4bacba1b4ab65c9943d5a2af1e94ea8aa61372d9477b7a96f3baa571964fb4102f2bb06e01174dba43fbad0acb104553af3bafc25d08f80ce71110756c97ea40e30da202f4d3efacc3a73ac04e3c0307cafffc30d63f6e9b943e5b1e47a5c3ac0bb4f760a296c2ef474ac466245294358dd2f0ab3f995ea18f84edd2b3f3b0b01dd4390d76ba67f04368e272ca1e895b7c4715a8159148ed3d9731493e2c420b7dcdef7ffdc93f6e4c841d6ccbda42e7fadee39de4d1adad32e7ddd84299e80cc014732eb44dc9a7c72ecdba86106179ae0ce32329b4fd8fe3f93c166de71332694a7c9026b2974b47cb8bf2a57b557eea538cae60c5d8f3d53de47a1c7e742afdd2545ab18218a752dcc09b8665af66544548b6068e90779b386f79dada6b44d23ea2d50156ce6a5cf5141bc559dfde6044bfc09779e4998a8b259c2575691eab01e095828b3902ea86ef09ded2573582f45a54900215c84788af6798fa0e26dcae7622b1a9e8ef6014c9dc3f69b60a50b690f89cd1d48236b3755281b2caebeba70be31b2d4eae72112d09638a6ccb4e1e0c12fa438165fcbe1fe39c4a1fdc5c8dfa8d2bafeace852e9117e7aefc06df8d243a54e1acd1edeaf7a1252a7d76a3b5da576f8c3dae0daf9e9e3861e43b89a661e51936c754aeeca501d8de845955d113f8536cc7eb90269df2d22da5e7d0dc4d99d3ad617ca415a08c03d094e2e7424fd673ac09f5a12627cc417cb18a49a15fcf00dffb9861f862b6529b5fb1dc9bd6784cc4846ab520b46102c9a7915898110b1d2906666d27640731a92534aa4050644b60c7a94098dc77a2bef89b9222f9c4a52302352a153cf52d8485e9d4c246110bfb343fd810f8768da715176ad4828225588fa32d34560692b8024ff0b41014eaee6a9ce00ba0d4303c9d83571f33ca1a340f2eeb1737c22dbe2ae5627846c684c4cb5efcfb5e1746c9f26dfb759612f03ff136e8306aae4af15038ce9162cc4618e6e4836298b61de9a445ac7a11e343e6d669b9125731870c22b87991fc9ccb553ddc27c3e937420623990e9f4fc181c33f25b22f95e24e6902f317fc6c9e60f440843eb1b8214fca00d67657a824365f9c0977faaf371d9281670e334b67c3808f9b4c9e9e0a838fcc9c9825a381ee166d638f15fba671131e82e0c9117f5f948b8fe5fcf339a9d1d749d89bda60f58233e24be403c6e5554ad52430475b918ac4b07f5f60551f3ac16cbc2ca557f91d800452e7600ef6f396ec4d0b557305ddbbcb9d386dd350250b83a75aaccd7552c22818b298e502587336cfbcd45c2927e13fb40a644ae91b260d4ea84937d6cc7aec21b806ffb40e602320c74c7d77d3c56b4867ec1246a791980698133db9e52abef28a42a568800e5fe4ad166d7e8be8fceeb37dcff534ee82639c93357b37522f0f8bd47cbc47ae3b8fe0da92a99acc530b8f91da715d9d7afa3831b5b72d71aadd3f24fc1beff0448704f193858ad01c234eb0d8578c1ed01efd8744ea4219b0d036bc9a03c355196e8c03c69ef694a6ca93633ff43af320565efc49811faaefbcf513dcf07c4d18aae889d262489a8165d01177e404aafa34cf196a1810b595c7ecc33b8e7558d0d09cec1d5c1b523a89975426b353b6bc4ee056fd0bcfca619590334c2a3908b0543ba32e08c94c40aa5ba3b2ceb296e4e9154d98f89749d1aa81fc755051cd55ca27677ad4ecf9225c9f78a2b2abdc12b7e055b46b21b4547b34775d9d3a273f86f2718a6ce0d95df4d55b8ceb99f6b41fd417e5bfd9aa688c1a4c5b6d6c96bc3f1f89d31d6f7d62178fb4c7f6276747a5530c8373399c8c61b5e3f55d63ac7a3720f8fb82c355cd49411cea5ebeae5bcd0f9c3421cbfb4e70a9c6b1c9b9c8f82389476a2996e30dee7c1c7a71da5c5f1b4c5f7e47fb571d5d486d274ec98c9478cb0d857e54a5829ba31beefc04c1c004abbeb8625230776c145fbc692d67fdab68a3f3fd873de9b54893be49c8af3d1da04278ed7af7fb41b016e7856fdb823fe4c32c23a8ec91efff2c6ee7804514cacc733665b04e07628e1b4f4feb57d09ac1b3a48d24622990194e8751e653e59072d987479c832a3320e54a052a8d5770722de396940f0f3a39628e15453c2e0355edd22fba47d257fb0d6e61c7cc8525886a6fdc7273b162d200f9be376e6c97c818ad7a73fcae357eec32d22d95e83e7721afcb4a10ce9e75c24099378b1fc25be27fa474220c504f0a2dc2d68a0f2fc0cc39ef8566a541870ef942bfe2c61773e3df5a15488b3cddffb5d05d09587df7c284c5af05d3f0a84f8a475b35de1bc29532f7e1e0995f9e3571772ba452bd7ebd16ca414ed9203c1c8a2373c4e623aa7f210a547ab53d1233c723cceb9c42e8147689c6c23354c4ee6f43a4407cd3bdea100e07876d69dc835d62ab3f83b2a6511a60ba006112d54da0446718e0b05f9e867f5597304a5f9c7ab06120a7914c0b790b8589e0cedfb2d39236bed03e01e4fadad91a9c630df7c599692f86534b9c28c6d3bf40fd66a66fa98db2c9c16765f3ad0c9210587a1db48a3dcc9e6d179b904f0f10f032eca0db16e6951c0ee289f7726a8e1a7f3696ce1f49785e63427245f0a23f8ce3e42aac56dbc6656af5c98ca76d7f395ba5cb88a536c354ca6ec8c058379b55a4efbc69e5d7d7245a23cd09c8afd5eb824a446ac8603e0006df0775e239a508da61de8a406537e770fedd15628c32bf77b699eb056038ee9d15a70d2b22fd0518dcf993f30e791d33e9a235e19d1613905d249fc8b1547f11c52fcc9f7df3e8d4d3960d7a2e1b34176694c1e25ce08680c08cefaede014ff9402a5abbb53a1292c84c5d425e8eca90082d6fc1363296bd633b511430dfcfc8390f2e0c632010c73d8509e81a445f3240e4962ad37cb2aab7987a8574308ce2f246bd0e0256720695c8a9d7ebec5082a352bb7b9f3f68dd505cb29ef2b3f5ee1e799e3d1d4d94c5839fa39e3de75ce5a1e0663003eb27c9bfd09fbd46ca994e000038260e66278869629db7aab5b2efcf261ce4ac108df448aca86ceaf4e58769832135704078c3c9c9de909ce811057d8c5605f23ff9e19d39432a59c3793e9d7ac007cd5d271c273e0cd59eeef5db4f9b981060da0a16201f26720da6b2b82e4fbaf9802ca0d60427aed32b4acfb5b7dc5990927f2d0673b698d0812f20a89e8a68a7232f7495e31f1b35cc8c0d4948b71102e18fd146faa830c25ebd516460a36f7d40e620e036acf869ed133cfa74b464e3e89c953c375c74c3f0e1b3900733260843d124299129bcdc1780dd3dbe6cbbb00215f77acc6bdb61e22cc5a014a222c4b680fce6654def28e6457ca7a8489bf3e89c66670c2eeb089d0f1618fb88fc3f137629bb3561f5cca3d199bca4c06c3be68060a5793e1a34ac09035f3e5008d3e511290c740e67340ad592e1467cc2d49672849ab611ef82799b4c075f8fdf2fa5f2794ec3bbc9fb75a216b9ffd6367a72e320db2532e15e90462e95c1a0e5aec08aa91686f2748f6ec783ab53551d7a0642f3db692986458a8a498f272bc2dddf5a26e8403b1d6c60c67839c3720e7fcb124c1fd45e44b3b2e81b57d298ed395ce1713881fe2b1ef62f42e9d2c57fe82bf1b81cf959b345b3d022946660db4dc3a1268bced414139952a23003c7f83fb331b6476aa4486817e2dda9552bf387ae19954679256ef6c4e0e4a0d8e1fe030b82d5439ab67a973980cb1b2152ec8366cb7c2d339a9214f34aa8b0c4bbf7ce6f458395fc18d05fa34a796e4d6e2cad98371974608c340abf005cf449ae8bfe88fa4f931133d02ddfa047274bd62a82bcdd1bc09272bb5482927fcfea42011fd32197df7caff08e6912d2baaf336c8f4f3de1964bf69e7ee8819fc8290f2daec85c0adf90d5b7fdba22aabcea0e694fc9ca0969ef8063d65b4e2b51887e3827e2fa0717e05dacf85d401d828ebfa720b71201c01f9892174568a1108b17d717bd9c1b2d0d90360acd0bc9c00fdfbcce81a6591d3eb7afae5161af799354710ab2a2c5635b25e9a183e63de9dfe71095c3e77df5df5622f7e9b994e143cc9c5d5cbe847f6b874e690c4fc864815e2912f855fece740c72a088e0f00c1ed8cf9c363fd6b5a12ccaadd0d917b496ad8cc299924a2b9f434524a9684f4e87117153b9b74acabe9ef4fc7bf29a7e826da22111fcee71a382e0f0e5c0112d1eff27f061b54f12f64633e1683cdf16d7171fbb1c266a554343fc91a888d42c490a6a1ec8aa52130acb2de920084411f7223bfcf28f3c3ad11eee837c1316c087cbae2b4907026f4e8639603df567f47527bd634f97d296ef7c3d42daff478e6dab6a928d6bce7c441ffd030c74b932d38fea8a8de0dbfde0d47f6c4fbde4ea6d223600e04914ce7df0df3e2616c66194d369df37ea96d477c01b4c44df7d7908e886e2fc2f73da7e91567e155c0de53b9aa1edc835c1bef6b7a77f44c48f9eb336d3b53b6f7a24a88a093f54a4fe422a3e2912c922bb11f0338a81da1d89d01ec5a2f418b986319e335e1e6e82261d0336760ab5620171f6cc5ad07f4afac18dfd8b2c3e7e3695c235cb87bd8403ba393c0f12174423537cda9f07aecd60c79346e2c9f73de9a5b6f9d807dc2b15ce4e875ae569799f3af4e6ad73e3154a76c14a5059ed693df5df081a2b54d7eaada5d0ffe12652e3ace1992cc1a6c316338a704a588b80a21accd8f84e822ae0fcf1715481c8608f0de53a936d845762a2714137425c34a468e2f508fe1e9497209410ff63da32fff2527357d3e632ae37f845adb3d9d5b374c3e4a2b674958bad101856f3d64ac4decbbc008156f5576891e624097ee45dd2d2107c141eae2d16f7f001be47086c47a37d1412410ffca8d0bb20cfc5f101f7b010fb73875ef9e2be50862f970c54b19c4f18f35ef31c9d372d2a83497c5e47c05e877149288094d5823ac460b72c90f8aa65a0eb3f35aa27c4b7a073f6c167a561c679de8b3fa1c02db6191ea9428a5b07b0b78054b654450a4ec3dff0b9cbb1b33f19a207a59e10bb7e9a3b4334f235ef5083b8d43d3ff1865659d7eac5e887db37cd5e1e50ee59b3fac44125726d1be9eba1ff2e28a1cf9174df065564428a4266f14d4fb026dd8fc133bac0995f6f5fd89ecdd3073e21d410bfe5b1236e5b7133420a1c41bc4ed758452295084dc2e9ade69f536769bac6b098f09e71c05df0332c1ef4842310032684f3235dbc98ffe1f5fe3fb7c8dcd1dae6b17ddded1437dd1be669060fb3abc28fb6ebf820640b0b6974e876b02a9e062592cfc64910c0979e1afa35b6bc29a2a1e86f661db6a3809d6dfe32d40683b8d23f04d968d612f92f072891dc9c154d88021e2618f351f82e73e16a88f31b7978f0dd75d0c6b7884b4564b8c5d5e7399e8e88c686cc8ec87911228c6392cdae96628a29f58516bb8f504f0926ec27ed42082fb5fb84c27829b03226d85832fe96fecb746b73c91947b2480164514fdf3ee99372fbce859dacebb0b87ba5b3b0074fe1d38725470810d5d04ff2b7d795d1bd249bec0c509f7f2dfebfb21df88963b09dc5fd0c092e8755782376625797a6fd738f60c0abf41cf1acbb102349d148eb3fda11ba97f2f79bb05a53e3385b2b1500cbee7e003202c11b291a58502e033a487e89936bdc0e2319231fdcf256dabe4cefd9b6f5efcd26fa88351f84064f285821b9490d601776033c3e923e213233c859d6ede573d8adab56f4fb5de0795fef72252de525c02f1ef434c54430ce2003985a956774b1afae23de8e56430e2b6ede51c49b738498bcf996c8dd1c0b0d7f29d93fe448e4a7936d561b05a49a3566c4b39f98ffc16d7d9ae92f412985469b9cd76ff486fe4fcba1f053d49b99e857c3ef31561122f7d176805b190fa985f95fd98800b54ae2e74041bb5b9e89cec26a690c6b6e15c2491b00fedd34f42618f1543aa14a672b46e6aea3f303e64337169593315d167744e6ff6d061001b16aefdbda5ebcef639b03bbb043823c00166709685064a1617568b0381c473eb27fa9e4e9818320363405dd62c58ff76fe0ba38fe311b433b2b1ee7e2984127a3b7bde40ab233c60da28ba83de193a4fd36aea8b76bf7784f0687eafef27448ffb3aa6d9089553d74770380a42013c13288b2ed46597fbd2768125ddfc3770f40f3edf63d4f6de2e521ec1b2819a6d8aa47455b0d922a9e4ef07c952773c006f1e8f6f243acc472ea23c3cc5c36c367bf02f4968fae6e78401ff545489bc5bc9d036406560a1f59fe0d190892ffdfdb0b4c4f043ef6d1e785473ad2c5a41e9cacf3a386d6efc5049b3e6a747eed82bef9739348be13fb789916abc2211521239c0a341868d66c0f3c4826846278229014198fc86f7e2187f60ed697dd7783edf4e7a42f6e566ad67bbadbbd003845eae5be92f7e5ae0ab2268039c87d339d5851fc622069d847f6b3f6f882baa6731bd8d32b7b931c1d73a52b43d862e203ff1db8fcbfedd489ec8f8d1b7a043b30cf87e7d7b80a50b038ec50834c30fb2e4ec2bdd2426cf3b73468fda3177f7ee5625d7d1631ade4899e76a0869869f792d3db7b915c598e464acac93dcf8eda2760d3f3757d103ff000de9bbc51705fc80ae262a862563cbdac4f602a16b4e +MD = 43767f4cee6749090fe23cb07e7db664d6c7c512f8afa70304f2f14b8a7204779e7223aaa2c8ff3e82f8cd72529e43d5df545e886f647a766ae4172baa56407d + +Len = 89728 +Msg = 7caae2640e734539d394d20a3b0f8c9c827eb6f726b4e9229ea1632e4976a275a50a3224c17cc3f7f51b7e44d082993b5207296c5b57388a645a186e6d5df65e366fb290b20befeab9f8660cfd6e7f903f7a2290c3a3ca6901cedcbf9d5f38c299a10dafca68f19988f53169aa196524b29e486c44e2c74addc5582ac1c58d273568e989efdbf28ccbd88764bfcc747d113a4407c75a57b2600734b6c1d81f17728cef270aab1a4ce86a120324cfd425c517bd6a3555a02bf25b176c85dd1619b8d4c6900421906049737750c26aaca437fd5c9b7419cd3cfb8aa952f61f9ab66f0916ccc3857d5054bb61537fe52480ceb3c9a46eee046ee35d9373fae5d174fff389e4311f08a57309761344876643f103ab8c091e6d4712997dd47a76e6ded15ac5df35365ae60d265e98fa9a97740ab3ab5c2ff03251f0090e7f5f1bff794b0672c5b6139a9b89dbc2ea8764e29c808c701bc7ab7814e674ef7b8f1c45cfd6bf399f9efff14d51ee4a12d52e6d42bb56a3d1b9986a175aa1c8d0f4c1df67db4cc274d4408783cc279d17ca3f60ee23d9eb87edff2de2b55940877552f5c9c076b44c401e83c56250640150e1e42920dcf1444a28ecfd6064ffa6f916b17eef05b72fcae30d9b7b2f46d84e5a21791a295c10ba5acdf1c18aae386a56390dcec175265ad54f8e7f8eeca5abf33e697986d5f325def8444293f542af5ab5fec7719338d83e6e25d633fd7051f4637ea5bc04f671fd96814a467bceb06a4eda40dfbc6e2c6495e9e9e6223f27a5ba420693902087fccf2d406ce9e355ce2b27a3d196ce3e90ea601e71031c154d683c04d2227a4f26cad28ecde68a86cd76705710c963f6099514de9b470e033698f40843610ab1c2b0f79b311bca2bb0543ac464fe323d19bf8d922b971ed9a670f378acf6da9617a825cf602fab2cc0ef0f5294dd45f9069051a0ea9a527fe618c0bed688f2e46edbe39221cb3571426f76696a0da314192fea72a0f9b4de3eb9e34089c058850f71b94c3e9771e281fcf871ac3754749ac5e06e145b4cdcf57be5688c46165f42912f657d3a6668c4bc1cd223026103d179b9fe1069206255854d9da9c1345c4f63ce45a75d1ce952da6af49717d1a70574ff895acb3b59a400a346a6d9b8637d101d5584a79c4e747c6a40d01dac4a80dd3977bb28a2a72b1370cd4c37ac5b16c0a5fbdbc1ed8072cba51c95bdfad388ddf02ffb285f3632e73a996383172e609aeca07552176694eea2f1af9fc42a669cab1be27478ec01a38c12b36402c3a4c77cad1b0323e7220de928e76a12376241f2a238b4f8b3df70eba003837402296fdd88937c18ed6352032703c6eae2c3f54d2cc48fe4721676e1ab1d8875d339b8959ba564fe5fa0e37758cb5d5613d3df45214fae4611ecdcf59bc71a0d1e1acd2e4d1b64de2421e8cd2209d45db2d82861eaa1b92577aacbb0d8cae145cb15d43005bc23bf262e8a8eec83d607a71bf72aed82578a8e976a98caee8724c272f6212d4f4aa94c0ff0412002095ddae4752793ba307c3dfde237dafab1b3ec795a8b2c9d80a47e0b446e254e1566337bc9e04410ed036c225a156eb809f92f7229f56a6e6eb9a46bab9d632fa32b9b271ddd694e3627034ffbb8f0ee37fe74a48ae84f89bbefa7784f57426d5bb2f83196a7683ab2f1ebccedaac665e3caa458a6eb43b8104f6d7758232acfe40534e15ec5ab9d0a680ae157735ae5b466a5d6a486aec115dfdfb3ee8a831fe72c357f9dbf983ee69549d66199123652d96166ad41f86d71a9e5733713b5230b2de5537a1e99e7ec7e90f235a6581f662bbe50e9a58984cdb568fe5e4628a4f9122aa51e68155ec72dc87ff82293699864a6db7f39c9ced0094e9d89ab446958e3eebcb128746c1daad7c3d5932adc8f8d00509885211323af8198e1cb723cd1a618e15ae31dd997fba707f2838740f4aeb4f75b12f71a6dafe7378d2d18e30c65905c41237a6ddc2a1f927779115d6ecda918f167b4ac570f6ac2b559a027b0273e758f6ff2f0953f26ae8dfe30fba6f4c9fb810dc19189d9f18083d870d065f50a746c50ed296940a6a15c994ce1432afbe8348a8491aa1563ba1d31f2a6d5d6dca0ff4dd3e1013786b40bd2cdd8ee7827263268677362c9aab8abec8c71a6d29c4271ee0de0042bae2fc2311ca84fe435fea22ed1015bffadc25692a8f880f132a2e9bb01ee1b25055aab3f9f190d790eb8ac652a013abe542045aaad040c3c8608903d18d3ee2c757ceb83bff2d13c989c7a94d93caa0f8719a2bc035df1ba80bc8efbba562448e6dfad85e4fd4237bcf13143487a51f82ef6925012cbd87309050a7d504165813ec917ce770009716301fcfbde83d78431003fef41166970072d2c4c405a5be0668351e5dec4cdf273120142031ee5b8787cd120fa054bb8647a1eeff46aac6c46558452831137c3d66d68a31f15239eecb5706ca5612753063505eed238002ec686d89eccafefeb725a5aa39a2e383d73f2425aa8f2a44ad7a50cd2448e002ccf60745023659c723120ffccdd32cd9df67a72726c806ba4bd145822b1325370472981f0effce661f9097ea54ee889c75e96263c59d32369a2c8146681eda202182a2607983d77bfb45bffb6561a15c2918e8741d8b275a26d0a66271b8795e828ab8c1c86edf494495fac885e8e189679aabc084fe70956062276ebe9c8d32c61f4dab720d708e8a05daba2cc0d3b4cfd32ed192738868d55586d3d527805d6a94c3960d0c259c4a19d248c095f26eb046d44fdc96e954f41f473a2be5ed2eceafdd1a0fe758f2f346640cf7e4c807b78a4e63b9b51dda5b43dafa49543e3780b4dc9fe10b95332410226f2929cf105401ffe5b07a80796967c4aca40efdf81f4854a036f564dd4b0b7007dac16238f4426b2e6743dba2bcdfa6c9c252a6f108dec7b358314241d69cef3f93684bb246c012a634ad69f6b42fc3ba3adbc3b2cbecc851fb4bb8015548e29ed97ac64c9a0f78f5af03c5d5eddcde266406ceadd6f6b8f466b120bc55a41cae13756c488c8510953d0379d0c87b4876e4703252b8813c2340ee26a34612dfd5d7e4c8368cc58bfd7518e077e26f85341284a931ff10a467007f3486a529cebead4554a729451da6ddb0b42bba3e26d694d06ddc092984282bc0d4b7016d4bc0fa138c1ac0887819ed674f7cbe7bafd6e1c02aa175307def397f81b4d931e97554dbe8f201141ddf1aa92cdb7d9c82dd6ff05a32a1d9d4449fe7b6109b3c1a44340af5cd695c616eec02d6d866053232b5dd67003d6a4990f5b60c5ad5d070d61e2d3d2d47d5f531d7e0d7e4066a507f49e3eb8aa686208ca156dee407936f7379cf19724b254bc074df9a9eed20402ba29052325b920b604946b85caee978c4ed4d353ce1bed7b3396ba96968cb93c0468f35b7eb325ce4440213154a672f42df33fafd89f72b529bf18ec437b0bdc5ac2cf05bd3dbb761381599be4880f575c62fe524c282a957232db54fa89440a449f63cce83e28d6f8bfd96b857cb5dc6488d8e6319d5e409555cb75c59dabf04b67755509a0b5187b626a483c6aadabcccc941090e556e11a92b0f8ab9f87b3f683ce4b274aaa6124d2d4da133a40ed1c98fc7a70ea5a9e8a505184b578217ece5936544b244fdc7c77dfca11d4b3cadd53d6ccd993b29f6cf677c2e90ec1775a5275187c16ebae0aba53c03e2151699664ebadd4c8a50d48eeea59514aaec622d65241c208c8025601f763a30761f3cf3503c667717c10a79f72f2f5143294ae4e967425e22cfee9b5945c476f2a8f102de6bf9d7780cf0f71d735db5593098720095bae8c60ca4a3ff2523342f566e2b45b3f7bc0f6730bcce0c90df31a4c34b6739e64eeac8f0105d9ee6d660aa0cc322bee0b3529232018575793d80f863d779ce550f15775977111d8ffc5b164570f1e7654be6008d8bd028673eabade2bca4cd7787baba393ea61b7f04632da09b4fc7c5e44e24aba23a9ffb713627d84194a1ce675ee427dd7933449d0d42b6d878dab32adf8104eb3166a673a518ad3cb5f5da2c86979dea26df6114de17f08f199a8d7e3ea821dd3106e8947cd2e9d485342b25a64713db2b8a650a49ffd645be71e55cc00caaeec5eb327211f916cf7ee7220152751226f3beb0fbd57ce082b40b3b552820d8967c9e248b28fdac742f796f4e0f9421541c06e558050197ccb6c0ffe5cb77637aa19a3f5e164323790385534a2246c9f900dd62ad5d40749a133db38d1e82a3f1f169d3596e8c0434a7758ea45eef647c4eccc96a429c0f6175dbf6b9b5d54292d877910b961ad73d67d461db0a009964522f8a2d5986b0b93b162a0a15e1a7e3b36de8e3318204f9d12c8d6cb81cc137c7a0155506931107ff86ddfcb33a4c5b3e975b8ea55426007fd861c7edb6846cfbb90b8fde4398e42fa872e01231b86fc69e695c7603a2d7d0827f7b1f404b7a7ac4cd1c451ac0d447f59972b77a74a7e7ed82db280313e65f9546f4c16c9ef6d17deaa8ef7b113ed4f8b2131786f97a1eff38994fe4f1c2899b48d3787df7587c2ed4b411f712aa531c4d4fb6b9cf8cd86e0b05322bb4e2fb0f0585b8f6dd15f7522bac71113d9d4efacb9729b55f26a0947aad9349e5ce106afd99e789b8c5bfa25010615c0a9e24fecd77c4fc30fe041cf800c7c1fcfa5629a16e988932de5189d28e873a020371a2c3702ce0ed697f62139d642672ee58e581925097a3c649632355472dac83b1713dfed615dcff8f0e5dd1ecd9d01085092ea38417b41403d8d32315b972957104ad92350d88369f6c275cc66ead17671f08f0c79bbc5e0d556266976fec9f1cb792d8ee3a97953d26008c755762496b9191287f86550ae26341ae30b3832731247e11562f5391f4a689ef9e26885d2efb67a93089f6811f7d01587626cec43ab5cff9f14e74c3327823f4955e97991dd6ed017ef91977111d21f3dc3c37dcb5e618e1642a439f93055f49ff5208a3c49ea1bfaf66564373de140ed75656f71f5fe9761345788d72f8ac4e30b363f39fcd26326654057c941a5817fc1794a9f36da21683226c237eac8b8fddf5220f1becdb182844cf990e5c8e9dbef2794bceb9e341384396e802bb8d7d6b99db6cc56830cf69ab1d1f4f3ef81ea4799d730daf1d84a71b9141ab8022954e13f88338e9d7c6af197685e31c4509210f49a62cc7c16f542ce3d6d594db6609e5f1f8c2cc309c6cf25443469ef5ebc946366bc88e7f5fc409f70e1d84187e33a250140f99cbcf27d83efdf6118b351190cc2a5d8d97e47b05535defc87a3c3fbbab8b8bdd19cd743daf1c8e2e65837e817368582fab8bedd1714cc8cc712ea2a46cc5b4009b15b6852d056b301545849ad4ac54ff3ab4a0e0e961351a8dd3e0ef0c39049ed0467361216f09e12af9a83f687cb076c5fd18a62421b13d30ba9f1e127c1a2259ce4f3434a0069c171e7e0197400720cdd3c9a3aa04c99f0a41219417f55115882b8e80cf5edddb5a326a63e9acc577c2c7486be390fada6b160cf3754b45f2ebccd5d969e1fc2974d3f1e8f7f9880645460961894ca159d387d5beb2d46545154099a08cdfee00e75199031adcab36a5ee7126d3ae79a7e445005869272b7665156e68b0bf2fec3259e444facccb93951f341e8b1cc04f1dac115300ba35218bc9b8b47de63e65d64b5810f02045a77356b6cae83e31b9d04b8d210213eeb0c9cc0cf63d1b95e853b46919939dc5dcd1236dbea3792a72bc91d864f5bac4bedf9acfb08695c2fe3b03aba16d9ba8ce2f13ed6c256436f4232d8771442553a61dc49565d30b4211ece7745ae6808ad5fd96aa55e675d3c8b45d2ed885ca17f104c7e2a8bad2afbdf9ae67a88702d89ebd3a28fe7f248d6ae0cf132d334f9e4a45133bdb9682487cd1e6fa0cd7891e82fe6cedd85806b05528f1e8d1c4fc32fc2f3505910ea0b8b9161fb00a4099c92d21ad7d85f9830911fd542458b376829143bbe44b8ba48d0d26b70e336aab64e7d77a3c59ec2fe41bfe643a34a73519a423063c6d860411e3945b88fabe347e5d8061bef69863eded7ca0bef7e8be54af4da28299865603c6ef6b94d2a3cb7208ace279de96d56301289807152078b00d142f5b321500cf418865d64db3e6ec53cd7b01646feafff152c8c70ec70ad86816fb3ae9ba9ac0cdffe8a1ee770d59c952a9ca3a7c2b1138bbb1636744eb2a2ad6948602ef9aa4d6d652ac1765a526f3eced58c343fc4341a3c05091327021dfd399e1200c66d7f67c32496af854e04decb411917ff51296ab94332f08505be18e69c0b3c9b5d6a782060e5bb7832241e2aca92758abebb2439b7f835ef234fa778299508fde2d54685c6f6c2bb6497a6f2573e796675b2f0c549a507eec49651f82ff68c76648a79f93e10ebd74e251d2bcf66481ddcd67564e1809009505dbf6d9577f28d4b4fba85b07c5e5356962cde1c520d375dee5c1e67d0f8c82f6a98df43605fcbffedb130048344b7e6b17a12254aee3a5fc44cfbc3de67b3c985855720f9fdb6e82c0502226bc58c653fb0cfd29613b04a1eee04def2045386782edb1689f4d86fd35e03f27c08593b08751d0b7da52085c5ea409e53f72fcf0a3a760c5a6cb9faac663c5d0036a6cfd47205b848cc137a81e7b8ec4b69cf0a02522debb28cdff37dc2b4493d76fc8b6b4e8ec140af1090198d72b12082bca1291d0a99da7cd4c00f1d73a07cf1e1d695b2c10eaa779f2f578678d31b697dfa474414ff1a6520cb2a1d824805cee0181946a488d14b48bf0177d23c84479a7f246e5305b96f497a956ae82b20367ebac0b14215fc5494a8e00b86d2a3439c968744d09401c1d9371aadad2f15514522529ca09e72ba0a53bce89e7fbf860aa9396d9292388458697f8eda3e2b46bcb997aec80c7ca433265db6212922376c1f0392a1e9a7df4c778db4763fac3e6be75690c145623a958a8a1e18ba127f4b60ab5b067f96fb3fcb0cc88919de60db1559e993336ca6bae80dc78a19d8862dd4f96fc83e4dffb8ccc4711cb60ad593a9666247bde20d2aa6ac5b7f2ebc739de3b777ef0c131440e27d5835fd77c41b0d46a3e3ca0b9a6b2e307f00e1056e20f5ab1a84d332625e75fe25dfd66f56fca7c1537244307207e660dd131afda140729e018e7af0109aed107f1f2938b3bde19e1af91299c08638061dc3c1ea3284c259d415e996477cb37b0effde1b02e622a7a2821c8eaa6e8be8e715be1549744da13a22086b2e8d2d077b86de606c00d1a290144a57584946d0e113f9c60f997b41dbbbbfb9ee54c47b6ebc0f4f189258588fb8843bf39ed384b6c45b45ab7ab5ff60ebf6c6ae59e0a18eaa5a302e241e914575b283a3f699cc0c30cad946a061a571b795dc9725ea3f8457a74ad83e8b145a53bc788fd800728c602fcb0891e9f9b5298441d13f481ef7ccdfe63c6907ab775a8a5fe0cc703cdd5b736318d7b3c4d548ab3d832f6406900fe84c822cfa1c44930483bd5a51f4a7297ce99ffa29cd781cf21ad57ea5bff72aacc4d310cc306805132b4f0b0b6094d334a5c480b1de47ae421ef0b37210d3241296579ce5af8cb89d9ebe6606494a6082dfb0f3b5bdea058193fc5635c2cd0601093558ae6157b58b2531f4ab7671d84dde8ada9c33082999bf20f0559d8cd7636696cc8d0e7203c608d03b60b1b2447feb7bbece08492370eb85083a69b99f1ff5a181eb7d84aa358fc4c58ec0b5abff4eab26b30457faf05e53264ceefb671dfe7ffe317736b3bf02351a9e6c2115b54f419ab3efd7b60062b1d2f3f4fb3645c957cbc5c430254ea84ac0f67d9e8a893666a236907460873dc795974260147f9e5271112c1908c9ca2c4100bbd613634a41c7a4b0d4ff6f38bef6a0a1d309b3c498777b77996517b0032523ee6eb72bd4fb9065179f9b9f9bbe7e76d9fc1ec98450656d6c5a4322a2f6f2c6dd117fc91cbb86e18d7e3dffaeeeb381b2825aa926a2c44ed401aad1e82d3253516571256aaa2f80da18eb77b9771f29f40ec63bf2b71a867739a20cc9d16c311212982806f016abc517afef03814ad7664768682fb7f27d1da834bb8e0a29c8e8c1f9b837b4c0c81820914fd533bbf1d1d64a1627cad19a8ef667c780fff0809b1a9ebe471eb74199de987f77b5fae1fd62742e2016414791cc4416e4d949c1f2c48e237c57827c11f6cc6731308f0db294ec9963c6c9ecf0d2d19105bfbcf3b668d1cd1f87a9e3471335f04bcc03dfb814bc3d3800f2ef71af18202adad27eafad70a677d5b4dc05dbdc000cb0dcbdd689ec04e6ec42b9dd0b21ac9a5212caa53c7295ce6a2cd111f6c880bd05a511d69b82d5b7b443b2fb90f21b9e4e053f60bcdf816a6e9929340d0159a6f2e3427ef38897f17d7d4295e495577ef63146a7d6bf549408814c36c890710fa020b897390534dd7277d271af12468273204544321bf594606ea2dfce7cb24036e3dbe8150293c3b8b9c8599a6fd2f2ed5aa6fd77fa4cb29fe793f7c8cd0380ddb5133b2d869ceb7acb8e124cb6e2158b65cf9b4d654136ed7587455d8c4b19bd1dc8562c99379cde368a676eef5d3476cb2ae65e63bc67719ee69236c07451fda36202b8434c200c81261fa8202d97d6141da54ffca58f54ed18a6fa716571c6cf4907798dc3bd2d34c901a1533986d2c612a2cb38e4f4bde7854952a706c03f2ae52d197e84bc69d7dad7028f6949926b70a3782061ded5169543e66b3f88913b9f3c3d1f7865e7f3c36772dda5273f8a9f71febb0597c401b15b5dc4f80fe38addfb8f7685ffd00feb7a9a44d56a01ac07d40612b666b1303f5b60bb199f5ea00833b78e94d44bb4bad722cce158ff581093382b5d92c42ca90996578a7e290489ac5d6c8e2a81699848b17db13a621622783b10e364277c552da8a033f46e3ec62e281a594a9ab6ed93ef602e57516ea549b8c92e24ffa8ad913d9efd4b52d72981c09fdf7cbd232181867c3ef9f5e901cf565c281a773917fcfe5acec9ff56196cce03060712399cda1bd9ca66760e9ed2bed3b88db4b6fd3592db90b89d43feb9fa4eb835c27fc7665980bbe7fb66e41a9735c5c7e1a7c605a329295e53273f2eeb89dc4cf57e08ece578f7c4ac783c6e8a8b390e2494da34d64d83044a8946944abc5a95d2bcc8366ac96845b2cc0c973fdcfbaba506a18ad54e84f1aaf17ab2beed1a5882c3700a8e7cf5b235eabd5e5d30f3e68d8583cf4834166f9ae74352f02603dd2d1b6631f99885525c5bb8898d9009060497e8cad60820c442f4093a876eff6bf94a14735425026e50a664e07602255531c6384428d18939cb9f34332ccef64b11dae097472c534e3953282dc1912f193d99db05e6973b165d712c05874ccec69b53346779b3603a3eea6e3615420f9b509839d5b7621da31ff15a783ff37022c03b77a993c5117a87f49dc41b1fad23904cba7c433b17283aa72454fdc8c4a7a71c11263c674e553df91c9f7a2ff1f8283cc7c1332911ecd61bf36068d5b29f797d6aa61da3ff15887f558fdb7ac4643ef1c66d2f35f33819d63065292123505de7eaf1de800c008f10af5ce6090cadfbf12148de66a5542e5f412be7b4fd037ce1f9ce26075d5f7b3392cd42e3b31c86c63e1ae9c410883b3e907a4b972a01fdf3ff069d3eda79737166ac98109ff908f787abf7571a1c69fc831afdd1908f09a56461ec2f6c98a05094bf8f99ba8ca80d62c3b128ac57df2084d2a46a19f8c88090a7bbe2f9022a5a82cfd085ea1c8f8f3929bf3eaf82c632fa6ce86bac82610beba0b15d6a00381799a302dc19f3e40573a6c8a109e545ba4dae73db3077fdcede1477aaa8daf20e4105cea72e57d0f87802745aa4c88541e461eac28f1dc352cfcab5d19ad881c7e3bbdced11917befb0056d706673ad4e294df828b0bddc1e278b12d827420dcae58ed3b6aae90c72837658eb392de66a833943167b9e6fbb4f1f36c9395fbda0b1465c0ae1a6ab09591fe0d40440581c5aee7393d80aa5afad4ecaabb778bad0adab1ef29e12823d9ac6ab32aff22aec173531a8af47a684abe0768788d52ce24384c275c973b695ae34610d218c856220d4255ce89e99c1b09ce16496be3a5eda9bef9c4a12729afd31ab6d44559007de93f6b76b57a6ef234bb44ac87b0ccdd9b64e6e0937dcd2f085315bff977462b93c4cc120baf7956eb596420653cbb7aa9e86f3ee2a1cc7edf79ade3a9858fc1a95d183f00fb13bf8a2305238909fa2b41b4033e2325b015d508effdda2655b67682b04c19dff6a29da2a854678af185ff52437cb98c107a958b7c5d1fbc2090a7b024c7dad07a869242be0195424a013f3d90693a5756037d7ba38fceb998e6996ff640a87f180204adb6d976b25c338de08a8209ea0977195426047bc0f70ee83c9535273e677b612e333a907db07367e58265cce6931be59f5469ab44e39ff0909213bb90e179345eb3a386e6ef7769b72872d7cf9b885ed7bf1de1d7e7006ef67d7afa090e720ab9a8b2ae905185efdfdd37def77b430177d69f93dc69e6afe8a7c9571946fc30b992d69c0c8f4576ba21233700cab26a0a3b7d55d4f4a93fe1b18d4754438e52e8f28db3be012caaf094d3747e027cf5094e259c441fce9b7c1b456f1c6c9efdd25856aa275fa1d8fd98c71bc1aaf93eef9f26cbcc33dd4f02556023042aa47de034bfd3cae35bad4bbd5c917e3ccda4479f0f88bfd93bc73ef09c079e16457f9d0827b52b44a07465632279f62040c18bde3e47a18890906c6d27813ca7e86f83532ce2cafc16eac53aa739dc0e291336cd318d13ca4237252bb124727803ba1d964dd12c62355cf5945955924ebd15d2fc87bd8906e727e3ccb775d1df3e0be6520904c21f62678110c751bb7a9355daecbf7d73d6e5ff42c0a8d9dd65edc15806ccf21e9c5486d2206fb2ba0a323fd90e373156a2c509ac9813d4e7a49976fd35282db46152377363c10d0086104037e19d8db4031ae3abc3770ba303c799305d991c05f701f5df2b49a54176c41381f740c71e704e29aac340c2721c0ea4bbf09e4195d5da4e9007882fdf44b40641cfcf81f862d52834281fade755c525da9eb642d67651ae10890b114c8866b4f1cb9842d463568bc26252327539919926a86f746a60ee90eb1020ee0baa629c0c8b499e24ea38b0fff286e49e3fea7b2abe386aa42e37938a4d880abf332e181c8f41d87c7ff22427693c28e4f1364851308faa262693326891af1bb9bb2fd58c381fa64d8d2971e326d093cbc60b9d24bff39762e2a7da207ce485ad9aee40e616416c1aaa2516bdcbe2a9c546e0c63fad02d6ecfadc072c6fe6dced5affe6b4ba45be664fab8f11b8f0df63fc4c6fec981bcd26d7a655f6fb1475fb83cb3362949af1a2f5f347798e79a92a5ea506c601cd0e92f1ad231aaf0c057aade6b39a25cfca7335b2dc7faceb9b7ad69107566a850fc3e1471b01ec2bffcd21c8e3a5fe329d397750ba7ea4c52af7fc870e0842e2453c2f0a9a4742f2d98597e840208e91ee7843636e0106a4dc0448fd77761b53436e237e1d4533ff071668cb5594473c32a2124173a132f92332447ad00a64568edc670830964fbf1cf22cf8a06bb8b00e697c9147c9ca4095046775944fae6a8bf9723f60b4f6a18fcb5ce69d31638bd610dad967052cf9b5ed3a7450b06a1dcf67dd8a2a2bb944e3f4611bb86fd83e2e5ac5606dcdeba2ea7f25fd81d717decd89f18ef96508279dffd21e9e8177257b89b4eca89e76dab71cc287a41e483c0ae266a45aeb73b8225038559c10d100422031d4c3f16eefb058989934107ba40bf39570cb398c7525980c575d98662d16d0c49f2c5134704ab500b8be3812a55550166ac6e9a2fd0c39b6aa4f72b72a7dfdd5c26e58580b0aa4934cbf0fbdbe5b6a61f8da4667ae3aa7dfb4de5a4476cc29fde4f65149fe64c9d8fb92f1cd6d92b4f0a1720a4b075584e00da6998e90a5c7955d40e69ae8ed774a1be6a8d221afc24b0b3a9fbda6d133502b24cb06167f6944b1fa82cb48f94f5f44367f5c78f714e98c70613ffb2245a883d5593b66dd7184797fb05bad3cb490faeeffdce1fd2f54abd0095272ed3e61ae34ee9f002492cd2a4ce9ac741c4977a68ca4d3eb466404ffb5f295ac86701400cfd5c181092f873aeeb96e3c1c608bedac08c1f3576582eebeb76a1682ad283202c92347efba5b21d189f163b1ac4626b996279894a656ff36b2503f662826a87a1334f34cc5b175a1e5d699709f2ee821c79559a2a8e9b7da9dd895b58387ea925e86e1a4d412bcbc57ae3bdd9bbea891376ba4f5efb39f06b473a7d541d45ef7f599b18c68075d9d49b8d96d246dfe74404b1902dd5d1b47a0b1e459d5949bf792ddd167e3f7dec156a6d083ebc550477c94145e144eb319ed03d9b7d131282d90c3dfcbea7cc6d4e8f8efc6344d248766d7256c06f10cf9e3ea0683a7426a168a0c1b2cee0e9c248b2f55b8b07e01b08994cac137fc7f644fe4e921da30f82ee8e7320f6115c55cb7aac0bfc2c06e5f4f5d82d219b990e56b84f036ec8558f33815b2f7e63ae8d9f8fbaf6fedccd0e03281dc234ec0d7f9d13aca1750d7e2ffe1f80c5adfd66d18b9a2702db3fbbfefddb2354929aabb1e1b86c567a9814c91810eacbcc070c8b5843fb19d97c5a1daab5f3c984ccfb0cea4f9709c4919fc74afda12a23ab2922ce313f2242bc32d4d15f940b52aa86f97f7f36a29c21a5905a8eaec8fa0f44feb50dfb055c26c9893c800e00445dd3de6af04f084a70b08c106a188f995be587d57e35aa70e3a9a5b1c16a92a20d6a24714bed2516a54723363ae76647b89425f62df7f9c51a5a91f9caafa8b3e1d4345d3815e047e8f3bd92a523344e4eda40dfc148daa5f462b4dc42e529c0029874f55ed12127633ac2ee54d5e3f4443e4059e3313556994b7521d115ff11983e4e036628d0fc3ba79a10ee055a82c2498d2c3bb8f221309d3e92204611eeca4f294df723d60f9bbfadc01cb9813ff2818f2070e8f94ee1de76f5d780479fc0526d9dbac819a8a90c64c886fb4075fa70aefc2bc63225d69884139ecb896ba3cf81b95721820f8d1525efd3d27f6a029e538a135c85ee3452d2b41b30bf9c9b4ecf697536f98b706259fcac4726683392e490d1b1dbf02695c79ff9b6d178cf58be77bc0d67657a7c69b8b8601db5b4d4cbd70ccd1a74d2e8cb9ede66a7486874b6a9d6b0b2e6d2eabbeba0274c99aeec6e276db92cc260d3467773462a538d2b1fc96827c453a134b95c0ba49c5e496337489c7cf722f9dea0f35f6140e36704629d1d7883f70ee3cad5a2def34aacbf8d01401e65dcc59242da4abcd23e1e87e5ee9aadd919427e551c0ddd3ba7008bd71b01a85d37eb7692f4de61c9add93c11838acead00648dc4fbf3a95abb6c4c7f5f8921c67c9313f909c0570b78c0ac4e2693e1e6f59d987e37fc4b3acf198cec927d918af4e7efe0e09ba682e7fc5e059d5df06e401528eb9bd1cac12a2fd2867f880090e40c94ad4215571442b5da9cb191022c29f3c473ee1a2ed916d5a7b5ed5077c0972d8acaf7d670abd012a97d2ad72008f860f57ef77e7f69d93392e1a37dfd025470579dc787fc2eda3c520ed0d651eaf48342747fa6c658bc721b726ab89b3e62fd85907ad00085a85b5db96b379dba668533bd4e3a0b9007bacad00aa9585c0afd9c09d7588698829653e5c2a10c60968d50c12ce154f8023228634bf73c4494982272a7c8954fb015bbf99ebda7c5ccc422e9e143ab78f503bc94f54a4fdf48f5a132b2c7369279011d5fc73375cf5051309b340917f827540ec9cf4c9a136d3da0b1c0fe70492782017e05aa7e67695d0240efdba160e14ea76ba2a324c94d97a85799154b5c00bff0be20cbcb7661102141d8604f986b190ee336f7f5ea2e2c408c04b3cfb34de17287df3d63e27e911404b8412b890ddccb9853f1165c5924f0b8cb800536550f0d410ba84f95090963f356263d190fc067f1c1388e0916a64043b426f4ce62724b546cb69575499f97757cb58c31b8ec6958477565d7addab995884aa461ba32b329ca0d3f6c887c37f1f09920ba51885934af50a4b065e9e2160e971ed8a676cd26ed5554610cc7cbd17b78019a22bec0ecbf70527b87fb432f10b2691c6e6622b49d37dd3b1fa9dc7ce5fb38bb73b425ea407e77205b37654654468d145a2b393ca15ae1e4074af15af6c9cb038c921095f9211c8629c6cfc5a4f993a7b2ed9a24c26868430cd192d3768bc55cb4810955b402479739d00912c67382bfbdd3ced5c8067b407867474f2ce82bad35a9999237c9033ad27c9c97825d6243c4065cb87bde20c391339936e18907de553147b44b1d55573ef20fbaa25f3c1a0faecc34a29861b4a15e0ff05d1560d65d419c23b8a647d7c35beae5ec20172ee6f1a7b007dc46fbee0f32e568353f7f95031f48460de0a0aadfb67f2a49fb6691fa74967050d681c16f887eca91abc0449d5889bdfa289b3ba5faf02281f0aa57efbb4da69f192c61a69b214ad0ac81b337cf4fe41428b0bdd63e9f9d71ffe282f9053d716f17e518dbf337b29a4aaa2bfa0d038404e7c87a990bf662c12ff6583fd8ce9869d9952c361629c8998e24f20d990b65716dc9b817e75c3b1889cf22eabf68e5346622e6e08e5d55727fd55099fbd14f04c39dc0775d39ee1e135327213f731e78c6768e01e33d20d026a68fc6bcbb0a65f02adae2f2f6447cd76bb10de2570cdf02776cc09b30f359897ff6bb63335d3bfc5a4d8030f905dadd0006d52f7c770f210fc746409d94b5b249cca178a0122ff01363789eabf9df2bf86fa3ae4b27b02b25e9bb59eecc8da9ea5a9f836aefe8d33f62f3c474e734cb3d349ce82ae36b29a018466f8a6389744ce8de0df8bd0fadc593182bbd9981c5b59dea648274e8226a9d0f09d921501d55bd869db4434b878d3e105aecd56d1f4af2b5aabca3ce1e6ac03faf43ce8bacef23bebc054b45687fab02d96b64a0e3e37a24433e36c52588c8feea3031e1270160aef1539ba45883211731a00ec319677e60b672f57740acff73400813fb9873bd7fc407fd115f81ea77e9f59a7ec7c046918bbfaa8976beabc73b333c80062d8259bd87363486614c4989d0d278f7d51add4b8c1ba6d0a61521631974197a16f763653c11b4d40b90b69a9b7c5ab08e426f7d431174544c85aa3f23836efb1864c6438e553a5267fde5a3bd61cbfbd3056da94b549b0c99428a57b73026911a10a9e0e6c96d065eddfe2c9e4974df8cad00580cacc4007396e8333f44ea44054435c2aa37f6fad6762bbda6fcfc64a1804f10eee19737c4c7ec5c2188611dbf48927344657c36b81292df3d410d92fac7835c59babbb9721ec059c7c134233164e77b1a1ba8c0edf75b19cbe14c7280c9c3c1b501d98e66e389b297ba0a5f43e05c60962322a25c6daff4b8a5630b19d038c96a7c98bf895e72f0fb3a8cd7de031bac1e4491e4ecbeb6f76c52fa65ae2209fbe0f4a152c2d7a09a5a086295e81649e61c459d8c873097aa50b3b88928085fdf7f309b52f8953e381bed33a14b611197f7efefa4140d7b95ca8f467e6dca62feb0fa2fc415e17252a8b1a701ed2c9946170a2f337a9b894143ad4b4c67b039dfd91805b200036471681c67bfb8bf097be45e0542a323ea3524d670fcfc020d0b6453c423a1433e1cc3f51be392618abfc6b217d876ecc5f9d3d25d9516070508b7731420e0e825dc21066b73655c4498 +MD = 9f0c0f9cc172a2780b8f378a51155eb7ecebd238579767af5cb643b5903e5ab7dce0202de501f061d467e4a8485e1ff211f9277bade2d389c9577d5495930f24 + +Len = 90520 +Msg = afa4a2c4fbaffe838dd149c78ea7851ea9396304b41806a093a90aae59c0c5bdb170cc9a7d22b90cbce52cc1b105108942df20c29ef3a913223b915e7ebc98ef135adefaa0f0a6441ea05920e868ce9d1ff6c8fe4dbec06a4849e5e55ad0627f9e09dfcbad414a937aabd7ca7bf845c20a2764a00a9fd40ccd7b0f2d3525a9d41a26d7f7ec3c2f629aadaea9b2dcff61c91afa8f1dbe6c617978161c59e2f8564f58cf65a50adc17444fe7a4d43d84e0257695b5ce4410d114e9029c0d30d46d0548cdfd20d2d91c413989a22b425aa9e6e43af9655948c46575dc949837c781039edca7a4bdafd759129c8dfd140b22d40bf34329249da235c5abeb431e58fa1201014b7bf3e5b25383294c93da1fb5b694c77b63ce96d34c80778b560e1040fa1946d1eb9b0313f93336c735bd1cc95626bf8a5b7ebcbf724f485b192e75bb838fb2213dde916411cbcee62be58cc57a6ae156595d95cf6fda2743d3a711d4740b4d24b9e3180c64f2f691bc79f613eb0737c8a593ab690ac81b2bcea06cf1973420c0a6d32073ba51b8b031a1e31a71a6c9c8864786f70cc22dfb50420c7cb2b332de4ed52f01db8f1b2bd287da42d3ef9d3f46a2acdf3e6f649ba2b47bdb8e2f8c67f712cf1e8e5527eae75063f3db89bd132bcba78b6578c8f40c1f4178f3513441eab187329c4be5d5b82706954f1d312e7eeaff614c8461ecd5abe4b9a9c134566fdbdfa5ce185cd58d324c90f852ff7686293acbba3c386c477fee087726948ccdb860dfea6595d0ad99bc4d9ed131d58daee22f7647545da8c4e7cc26295acd4e6f9149b8d996af6185df320942cf32d9a17ef7494fbda541a1556c7e7190003829fb49021d695bf11e3ba8004bdf74b32b978afbf97c2e5a3fc25247a73d0dd40d24488ed816bba58b5a184d976b856374b45054ef98de3bc6b5e549726adb6a4496af25b3a3b6c4f5c4e8b6cc7a4c31a35db11cd9199f2b5db78d4c7b1e5442f5d9e48f561a369883ff82049315b165e01b151a5e0858742c4fb21769615fa349735194688222675e954cff93439c465574e417276cf15c5c05bc73e53be4d768ee5cfc92e4617aad0eb06e750cf51d27f286dbdc4d512c1561142897b5cc2479d26f8e7b47dd1999f0141ae078a432811d642e24b3622b7eec20fe26d6fdd3a4a5f113cbb37d8c4ac5e2cc7d9092cd897ce4d8a7a70ba3c02d49bd3ba7602b13f14a542c31291ae714814af45ba53667976fa00e3034da02acf72c7d2edd76eb3de11644c7c90c9866595cece1c6b444f66e4f0157c5196df2931495755dfa57122024bb8046aa8742d2cc0d2bde91482247ad2723a7a82986833d2a84c6017df76e453a61863cd93054610040d3139aa26482299cc0cf5df0316fe56102d1857433406974720ab9b847e26d298f8363fe2b96aecaf9d632b903726e16f7b29811d8deefc0f25c4d631318fbecf829cabf06b15fb63b04cf68630d6cab8feede57c3e7754def79bdb820cb5393f84cf86c5c9ae4676ca35c85b80a8726b0cc7ecd5d23a2244faa3240d7c21d257635148d941ae4e575f903996a2f68914493a0fc0e591f4cfc37d4819ec700ab592d47aa18f908393f4fea2be145b7f3328c6e6a3f5393cddc68ca05dea0a42c8b7ab94c4ffff76ab1ec39c384131b5562ff0da156d7a7b0d9843d540016b2b0f36491faa1f35980b21a19e9bd633dbebc33a829bdae03fcdad554f46af1d2407935f83d769fd8842c1fb226f4fbc53628726588daa04eb9c6a1386f86f9abe20533159c36c91a7d06442b018fa45ac68e026c48177430ef8731104dbbf6e6a07fa8119f493ac77328d1ac03f726a474d62ce6f0dbf453a704cd051470af2a82cfda13ce18ba886e7a0e5fb294494d4ae838fb098de65ce925bd3f4e0fed208fde1244b209110577e3426a99ced5fa50ac6ed21a9713f6bbd248e582ff7870cf9297cbd28506e5954eb7f53d0e91558d0b1694ab6043c727f3b71f39a818c14ad4b3d1b6f562d0d1a0b32928ba460609eb776845503d7734705217fa7295bb098dac7ee7bfed7032c27f2de13cbcb5cc36da776fcfcbafea3161f24dc5b60713a3cbf9ec4d6f6ac09c632af0fabb09dfd287e9b145b317521f2cdbba09444d7000586b4d05b0698316a648de5e0baa49a9c6e5931abe567320fbf8caa60834298a9bfb93517713841992ae31ce734112a1df939eb6b415561d15710404c765452bdbd245988e10ca8b6d8574b4bd7643a4191c59825dfb01ffc36ff18b4c88ccca6217eb41bb095d5680f42c77aff0e299bea84ce481b17eac4d1a17a45e44c74e76f30eb6c7a646601324e37f1258fa67145e0045e7ded50efb9900b5c4413da1608e355e7a8e8c936e3d2034ad5590f86467fc0e582b0c0c14153428472836aa680fe8a19b6a37d5d8666cfe4a90ae33f5ebc8a59c3f2d8de2b53963afa1ba51d59fafe7f4e150109bc74e45afb05b001111ed747bc43f7baba299d0c453d27ef16513984b9cdd2bfd894e71a55ea047fe01f2e1bd5f4bbdb803dcd54de78519028a9b1c6942e90e47d4f4eaf44284f005e45f5629ba583b510188dc1404dc0a5135d0dc167c79a1c0cfc91864030fe46ee2bd3a887d6eddbec4274cdf53dd39268f383e19f297ccb2a35464bd4a4909812293f5a250958b4673408d777c928fc9c05dab3c4b4a7763771d34c6be3b4886cd69ef3fd9d62d32365c07a42603f281efc78c45309b8a1c74adf14808ec8ac40ac88f27c338abca3702222df9374b9744fc47fd4890ed25c28b040ccf64b58402363f21b4c4ed569bba46dc9f368353e886462c3c3488c6883fd3d7bcacb20edc3d67f75481db1e8d0ddb77bd0880fd03edef9ab38c4347ef52c87477cb6aaac1656d6f4d775e6a338149c7feb62cddbcb7ac0e56a207ef1e4b4aa9a7c9c4a0d935ba5244ae5c81b5a0f89407466e3b3c6ee452cd7dba083db2c040f4afa7374b35b667e42fbeac3cf250a683c32d5eab99fe2cbf2546d8761094ff0884fdb840edc978d2016d33f0febac41832538f30c16465d4a391a8efec2daf8850ad6bdfe65c4bb92c505ef84c9cb86e9dc716f36d7dc5b5fe85bfd0cef3181f1b9f9851a7d5aa3fb94e747c645f482e0b713b1d25b1130a3e0967423e4e0173eebb87bdb89e5b0caf51bfa6cf6c3d00853946d67268197a6c04e66dc5a6332cd0e9804ca21d26c91640859c142a5e8b12077e45da0a9dae8e608578ea6377f3ca11ca26ecbcd51ef6020f86bb007578bac32c93e7ff684eaf048c8b36ed9370e31bae721ee22eb25881a58d4c58486e855598e721b04201d4d843d030ad4f4a23ef7459c1f6fb2e43a48fd95099a1167ca50a6a0f83f26f07c4f16c60097529927564025c620239c05314914f2a4618a69cca4439e142414fb0e08a4e6acbb73996c595778d0c7cd6767dddcf75ff1b0c201f9c2733f81fb584565083391b991f38e13c9adfe09f8df612e65ae196c7b41a539a62dfddb03f289ce686dc2b7a4c44fe1d4ec04849edb91bd477d6d1c6a873ac68714fb99df784fa75dfbdc300c9a365601a980a22ffa8e0cfafbc7abdf011732bdce9548de581b7251742add39d3b5e2e87cfefd3caaba9fe88fc575792deef0e2c17752910051d1db5d5b09cd0f630af1ccdbf0456abbd898cfc313a98c16a36e840e61980f9728641dd93036bbb250a61fb425cac8e65994325cf0e09a12ace98cb6d043d46ff8743c21faf75718368debf3f84d33ee95634dffb7cee6878fcc422d39350d20c4944eb1c49f60293f01c828024d3a191e7e7937b2b4efd9ce8f5acdf6dc087e1f4ccc25278f7559dcba2adcbe3b5a1a474e4a718c53148debcb2d15b3a954cc5af61ae88e57e52e920f8a6e96980256c27b4859aefa031869d84f90da4d70802a28d17883896e1be18a7d7a25f3c142f26de93c953a1a0dbb5f28cbf518fa5def6d765181844ea66db36a6bd6df2583699ea3b6d993f7d262c84f237e9c50aa2d3c701012d925527902d7d043aa9d8c9a960e44d697fb0af2ac2943e157f1f9560e6510a20870a4a5f15c33d6f697c307dc9f532696b21bed635d89b7dc7cc01c6bbbefd992bf2167174e031b33a2cb23fadd8e4440ab99b58642718c8a4f92c2ccfb1a13f87f3d5eed53ca8af25d0981492f42ba0645e8ed9d7ea7b9e1f8e5fbba890bdbba2f6cdfebd3f6a0b31502b2602b1cf2682f9de8117878da93e73e29bd0c41ab485e448c7b6513e6e6794b09d8477977d6b73d477ab68168e0b91fdf3cfb680d336a38c7447daed80cd8572a1a1ae4c4d27b2b8e41bf3def88ecef8eb2bcdb6c0bf1de12bf94240ea6e09b858dfbeb640bfa0d2eff092ac8dce131aad6e7086222738911452f1fc544f09c9edc9109dfc3a2469c1b1ac49f5d349ad5e1f09b6a277dee359dc4fec657a6eee86e40ac929a025c681e6a87ed9a556f729c7ff0fe7b6f61e1f1fc5d7c6f61e6f4cba150270fa8d325818f011e14d244134edba599aec688b91a2b9841fcb039466d29a0f794f43f36eceebcab4d299d2a719a25c62221c72d4ed94bc170204a5fcb4ffb9eba72f51ea900173fb3c9ff4abd41fdfe85ff91b1388bf4756a108e938e9aec86e0a3996f4e69ad25d931ded68a499acd3abe9cd74fca0ed85b3f9a940f80d04ac814908b6591eb183e0fa0605147889cc0ed4d11fcfa1764c3dbe2d3c6986344a1347f15570f5d6142b2087aaa9243f7b91a0703d8c29a952493fbd55c57f22f3c91b97fcb48809b97a76b881ed0596873b36eff6b89f4f40de64a1b29262944da9ad43d1ab3d141ad7e4e0af67835599157e9971dd6d30bd0515207d5b965300bee53cfcdf7dbede4952495f9f0746582560b5d782fa1472c53a83dba58327b50daccca6d8b1ceaed9a839b71ef72f6d75c58a4f30aec30626bb13f6fa91d714a0e839f71c3f0d318dcef9df6bbdd97f0d9361026ef10422308015f6e1282dc47e83cc16359143106fadd1000ebf0c37f3b48218c42ba16eec71d403e3b0ef6eaf63cd2cab0d37f2872b084290678f3d310e35b8bac46091617797438791e6b93c728460041db380db31e8cc781c2c38cf8bc20ad9240a349778a5e15533da4e2c9638dbca287d6276a8b7c74e45a9d0d3127037a8b467fe975d4703d5ff93d487b933c484965e3f5d76be5a9b4ccfae478a8967b0da3e98680fc5d2905bd8f455c2bb44bbce1ebf9a8545aee598667a32dd53c177ff58a9127567750db072569f991983f63a858b33bb94eab79136db9df2176e878c7eda9e767514d4672aa16d2695a8bd415b4b3302f237969f067a8fb11c9668e776d313fc36d96ee6c67dc55176dc984b67a69f41a9bd0c2aa0ff1002ac5fa07a083b79eef3ea62970e94b102064610c072458160ffa3a09aca1128cd0df4b9acfebbd933f46f38e1cc8b38218b0fac0944d0e0463d12db574d58e0fa887b3be41ffa3ab58191792bc60d62964e5ef58ca5eec5ddaa3143c9f17e3f71651dac8c32a1a45be277acdfc5c03849975c72b25d47370c902962597d284e1bec01960b00571f0d5e4b5964914cc122ae30abe333843ebb3521c06dbb0014de655080c951c5b4b33e320822f25a060ada042888f14de2d2e242e36f71ae99a31731f32eec926a36cb564281b0920de764fd72075d492c3adfb455c568dae5534bcd76a29b674a7c4adf8ee9929be0a3944510ca402123d9749e9ed9682b01d4494b918d24ec5a6e06f575c2621e8724b2048a37617dd098e92844113949f41059d4cc5750c8a4f446be7e74e6c20854066169b88a03395f857cd1d7a2ddc6edc390b068e7a430f751653167e7306d19d88533b4815e681792bfcd926c8f7f55cea6c428b127045d701016032c0fbe5d6f9873930f3465a6561cbea95f06282fc33f900076fa2a10ebe8b6b17f08010714c1aebcfc2e36f61ab92e8643ebc963ea829d56fdc4aaf60a1498d7a6c340ff0f286e9910f3e5ee25bea490e0e568d88b9872930f2e8af915bc44df6ae7822da8f63a91132c7a75c154a92ffe9d0f78eea8982074e0d400530a432f931cd07927539b0ccc80fb7534a3c4cb64bac52a5bdb9563f48190f20d241c31e90c31cbd3661872049872d5c7d27dccdbe593d61959f3c656b9c4b98b32574b345dad0bf558392c831be67dc2095c9b2bc67f64714939b064327a3c155d7de73bb74c21d55086a011b260546d72ea9e1c0494bdabd3f089e491b963f3cc156cc7c317f5bb7788377605e7440f32ae3e7548d7c70f219fb89f818a166ca9a742a028156feff5c65979bb8335f27430e30039526be458cea75da8f33dc919bbd18e8f4e78b8f1c86fe47c3c0d5c5ef9f683800c9274a306bde6aeffc05346da8059a0cbf6609317df7df21bb5961890ddc7c40d220528cd62013cb3874f588bb9c80293d32d053a130dc32715e8cb7d0294ae5e05e00faefe78fa197b087757e4a45eaef5686cb9715b976915999f49cbb2e606214d812ef9118f3882c5c9c567b55b254658f31d633117e79ef3bb7ba2e8130d6093a6d7bc95a41885cd795dabc3a2ffac47bfed5055eaab963c489beeffdd7ca8fca530adcbe0c26d69ada71896da44117bfbb1a090b9bde7bd6d3217c0ee5ae3cea6c1357dec3d20e18e2c17f5acfd5c3dcdf2baaa2c2377be53c785f0ebaff852d313bd716f91887d43730eaac03175d55d36086beae7308721e29f5a7f83cfd052adab7012c78c85f404667bbde8448bd408f19b9c11f85f000bcfc550df50904b1768427de61340cb6888314c2ab0a75aeddd01e9a7b99018cb7df806ca63d9e7da5daf57f607f7ed26da941400a370166f34667ab35a6090a90fbc4a4df0f54d7df17f48004ff285c6c66bbe71052f31155f92f63cc318912eeed9c46fdf2aa7888b79fa0ad379b9d1b380f186bc2dd367c44d064bdcff42e082171b3818c11a849567121f7bd4b1ce09995646b1af22eecc5f52e78d5fcc4a333ef7b08301d0f8760f3b442f4a96452f7f94b9cc004931df8f8118be7e56f16a1502e00934f16c96391b83d72490be8ffa54e7f6676eb966a63ce657a6095f8d65e1cf90a0a4685daf5ae35babc6c290d13ed9152bba0cc76d2a5a401d0d1b06f63f85018f12753338a16da32461d89acef996129554b46ca9f47b612b89ad3b90c20b4547631a809b982797da888915b72e26d6ed6439bb254152a21aa59e96fb12684211bee0aca1e61b2014645c69558492487b14211ea8bae5ec308b747dfed8a4e2344b4e1f12335124191dd9ff70a4e14f868af6fcf9073e25b760ba5a63bcc80cfa34ec41b629cf8c32da883dd0351bd558ee3fbde1cf6537f54ff594f065dba8a99e427b546e9f41a7c3f28c3ce049c1376985c828ba6008337daf936e7ce59d8ab3d933b6aac92ac0029e557d4d71fb6c234f8796723982b8156fbfa4a8efd5e59b38d2a286532ec5bc14fe5b239e6a3e432561f29cf88cce3dbe805c92ff37027ee7c1e1a94737fd1cddf19e0bd5f8f7f18fbe06e3a30dbb1d233e5ce220ab28836f673bbdac2cb14780940eac208cde57160698ec44efc8df26616d3f5719a0d2572b77678bf42968855173af860e3a9a41a27162e2193da84f515751ae69b39427775f51eb79ada5758f94bb106754e599f859eb867362a32776e2c12c83a6f168b2b923d4a28526d7b53a79c47d745ea571182f37e57ef53539d637d950c410a1434e844f57f814332d2d90ac39e12ded7575d8fd57dbc90100fa5abeb6541a5a94e61d62804f97125e35a9d083e57bf96d398be0b1bf45143417d3e29e9d361b0c49961806d3d6fab01a6c3644c67052bf2cf2e9db7391f53ef5494ef1e88d6d133e9676cfc9fa768ba380e862cd337fd516b51fbd3fd62c845c6508957d47d7118ec586c47c2a0b579a8eeec742ed0816bf7c8b406a3c427014cf1a74a48be26e01cd4fcd338f437cc53d4e596dc576e9efee334a3eeabe69e42e8b75a58114935f53d9d33551a562ec36120295e44fb86db321c4010928d6962b647fc752f8e670022dbccb97b972d92142a904711eea02745d97fcc00921f06dac7c542613d0fc7f52723d89081253a5e436009568e776d9eda97738e8b1bb9d6b539224efbaca7550dbd35119ab216a0290d278b7169189dbe4ba984deebe62aaecca75130aa38a30e1d51474a60c19a3a1c24192e11a2d2f2f0c09c040c365702f4340072a4f66f96b8afda269dc5ad050171982afdb6cef71b7b3ca0f904dc50447ae548096b2b3603b312a5e59d490851b270ee99aef259401bdf2c3efc3b1531ce78176401666aa30db94ec4a30eb281494bef5205dd87f3350c1c4a56f3d040b12167214391b30b121697a7915e9224b871a3c355f111a9493be7b7df870ff5c589bdedbc4dada062b3072ac2c93590829ab26a09dd74d6eaf714e3e07532c57e099215d5ea9907622713bac1df0b693a1f81c2bbe320007cb62a6af43ec7344d398a362b0923a4a2eb53d418f0821331889849c6b2a1ba9101aec9a5545bd6a581eccb2629cc0cb7682e0322ae48331b6e7c7bc4bc8869aa62086c5e466f01298b504141bcf0a3e23638c49978bc2d5a2994e5307132a22b4fcdef89955f684bae4b352833401ee5cdda94c7e05c867052780294614ed8b62375afd1c1cb508e734413243d28b224a7a9f04865b7b2f061ac405b1d1b81bda58649b14c317e6472b167d03b2912115c1d6395894c575cef984b1ef54741c41e763992950036501539afa6adafc34e43ab7b39cb88d80844c27f3a9a507d4c26cbfc004cd60ce3e3436732154b2a3df6ea839f9d0bb99519c159487ca5b8c8270dfd84d411869255450aed0289db630e4129517e336085d6fb55c30cd568bac7b2da9abb5127edf3d52751e5ca4b5fc245e8d9ff9e815cf5071124db5e21b661310fac73036559377a28eb3faaee76eb7f2ea391ab808d0c4b080858be682d8c2f09449ba6c366a88aac13809a595ab2438738c4f8e288755db6c815649092c0f3640d85b9c688cfad0d855927007def396f2419f52be1d8a589fe91ef5f8878248c41c1cae3420557e99b19cf7852dad762dff13ec12b9eb90e164ecd19713a48fe8bf048ae24e1f1bcef52f2257c0d93fee6fb2456c8401ebf99ac7c52df8fc7376661c19ba40e20f3dc853d9c4c0ff59fb39844314a653d2b134b7b9045e135d34bb6b41031b25c1afd311041555a82c1c0491cf51466aabcfdac495626c6fb3ec66f9eb070a719bebbe708b93a65b201b78e2d26d8cccdf1c33f741904a9ade640fce000c334d04bb30795683dca09dbf3e7e32aea103d760e857a6d6211c47655df3665bbe4164e5d1334d301eff0bcffe6dd95dad97fa63a0ecaa7b197b55b6f86f073cd4d524324aa659e19501d2145fb8adc1d70eafec04bf36c959416f21894ac9f69d92aa6a43da60dd692d5a560a66982448f260c5bcd733060af5ff6cb88c96d340ff5f5563d84b6dc10b0b5ca77f81cc28ca74b46f3d877b53206c602c3e5519e5a5abba53a703d9c5244ef0dd0c4f029e1f5382c5f71c705d491ec58e68ee11b60af763bb4f6f699fff89d85413ec0ed27865f7680fd82d4ff87d6385104803d8b8a91641d97665742526ddb59f3f38ed5d11dafd8ca5f952b6f101ba404d3776372b9c904c02146f1c8bc7a8b530c81756c2f52f776a1e8e09e269d4ffe4f4b60de3bd4eb0fabfb56e225ed45fa70577ecdd0ea3d70fe22a7cb8617c56f584c0c43b40240d45ae71a2516ae2a48c3936a6cbee04b47b8e4f94dbb25a4b692dbde499efb96ccd29c94182b2798dc7aa7b0df45df817986924dbb32415e92638d5f36790b6d47978e5d21cff422041a06fa7c02227074dbdd2d8a97e563515ed2f7b0cecc24e31e2eedd8719e567e0653aff98073b8c82d08013238ac4391e93f403f0cb86e1ddb00ceb2ac8096a8d40039ae2d2d9ae1fec57158a0e08fc2a734b147bf5a995662b66836fd456303178f202074cab760d577f6547d3c9861fd65d351531d472b298252dbd0476c1b25631be703d59eb32591f8bc0a1b0e0e70252ee2648af81aa4270717d210e25fa22e556846d8b15773c5f105f3f6511684051c71603e1c9367070d815f3c964ef243952aaa3e8fdc446687b8b778f218cd782494d2813523f694de9ee424c877ba3533b4ca918aa02c16254ab0fd61939110efb347fec25ab762e2d70d6429685e95b99d145c42417f3752429d0e40059341d6531d2154964df3b2a03775197f43c7af2a1409474ed25c7716c825eded389d610ade735c650ec9e6a10ec2194b2e5d7d024612fa16b9e83c6dcedefbb8f5862831187f5a559e57c75fdfe5b94a62b9cbac2723eb378a8cfa8e1d83da075e9e946c37afded661100d13475a7a0b858ee39e33968b3fe89d3a1e30df0946d8392e22d88f4a65eb94f081b19acbfd0b3f7d4ef8056a8e48ab9384a52b1a05f6f85deb57983d92b2594a21cb113f9d683df134e0daf9a12f3a6f67e7028cb33f6ebc2c514518db49df5259e078356b211ce7e68a81c926f0cc461e72ffc1dd15eec17c42207cae1699a1b09e1a5df4da5eb9ea51b4596e51c3b03ee56d59e21efaf641a6b4c989ad0ac0bc408219b8d865efa6e2dd1b15b6d3364f9af5d570cf35d312eb7c900c71b537e39449e935bfe501a29a569e8ba45d30a7200394f78b01d076ace25095093b6fbcf5cc4cda053e987404cb445e8ed437fbf12148e4f6f186c357809bc1d7dfe0aee1a3d5342ce50c819ea5bcfceadac4b4aad941d777875ebf77c1d1f17245233fe44ae2d2bb7ae651e47058e54cc36f479986103da135d0919a3083d24cfdbff67a3c26141562ae7b52a5b8b63940804b69d24485e88f85001b5731b2dc5c1f592ff1ff96ef2edd5485c04cde14b4b03688285f5ed1e6d47187a05c31b4f2b9ee5206dfc98d51eb73ea6a95cb83a2677f6102b116e1fe576c6b9673cd4b54180c9cd5573a945e616ffcef241cea9c2eaca0fbfa4c8d18766743c408e423f2d25a7d07e65888b6d78f39c86830de046e34b47e8b7e57d7c9e88c939c24c351415e5ef92da1defda6882da0e2a5b26dbebe1804f50ac6aeba66c29faded9de21d6edf336db50b8556b144e313fa2c5a989f4819c7a05e2fd0786242aedd38379f225a3146e0930080b11c198c9c903d745ec13763ad82bda48408171f4216c47f1f7c9d49e309d19cfe1fcebd0b8298ea732fe859a0d8ea9f1010a79fdabe1b159ca2b1e70ad48b03fecc4d15d577ef5382c0a72a18d53938b3085e70f592adfb4059398ee6879f6e49ae4f2768e4c357f43fee5573ec2bf9d37bb6633138efa8912c7ed1f4a7812455422f72645d97504dfa485c5092355af7d749c70c1562a61588fc30b398c2deb80488872646fde5069c2fbf2d6bd7f496a7731ce4bcb96c33fb5c3bb1efe6f5c881c4c64d35498ea4721eee78ed963f4668ece55993267372fff9436e216ff22d267ec037ad0ca5ae38907aa17bf2937d97f1b0e93d6c4459037de846b1c06c5c8f00f57412d9c29a4c2ee455bb7fa9b2b13bf0022fed676ca234baea358abcbd0815e6911b137def1934abf4109fea7c41263332cf1c551458c81bb711217be54e08140d0a6c30134c5c421b0fc5ce30d44aeb09af8b85f6a3928b3bc917125bbd61fe46852671bd420037292d93dd76c71497e555bd7269ff4e99f6e1ee2896d2be05ebffe4cb3396cb0bacee8c80c4a60dba544624b304d836c866e019271d2a76eb5bff19a51cb7172024c71260910da0d2e4e553c05ddaf5870a482a86552126ef14f75787df2f7f251f4bc7e5624a787205d7bd12bb5405565f8e94ded55338b1b56d00ec016c5d7afae11f97cf08ff083581d332c3ffe0d6e527da89243d36b3abe4b85a19fa4ca2462b7bf02da5af06026838a90e2b125929a87e2db84bab6566e2e05a9f55c73b9f8f7f7704ccf31beb1f5fddd052048dab84f225180b015784ec1b55e80b579755819c94fadb758a5e0bbb49d12141c4c941d917a9f7d2fa6464cbe4aa87785616a655e2565da101d9b1cd857705549f3173957e14ae8aeea3e1648f5d6693e831722de7ddc00ff2fca61919487ab78d427ea9b0be7bb374c1e687ae670544de5459a71dc79f1cde256d306dbbfde51f9ad7a8582e0bc75d3ce8a7ca5e000598fdd133dcca674233f25b760b480b57b69922f3ecd9bb40d8736c477ba8c350b87c8d66dd4cb53a94c2058c6a732f99f2cbc52ee74826aaa703f5e93aedebb0bd7ec2b277d4e5406132ffd613d3d72644b152abcfffba8f297cf9ff7073c5900873359934d9840e29c3bed59fd09e873cd8401d1f770348d03cfd0cc5010d9929d84aadbce11dee7ed2a71d570fe2373baf01d55e448d724bc2839390ec1016a23c664248821f8bb10e6d1fd1c85ea0d1a43c76f4ceb595fcbc02267cbb79a3020e3d099023154060d5555fa8b0407e9f6644747b9c182e53781d37d0e5a6b8c9dc2365fc4a7bc71ea6145f445e540ae553be506b2321a5f085293a460123e24a14bdea156edf5a3b1f1e812d08e5e0440b0e9d4c0a6e874471aac044847d9a334660f854169ca456aec877db6692995beab9ad86985b5cdfbc364c44e6105af5efb13330c8502ff1b3c6a5d7fdc6806d714423b383749112c34040dfac88af028f230d43fa86478cec8d9d9b151e50293d32724b2246ce9e255d306d5e430109933af906239ba598a781c19d62f662ffbd091bc61b4e6fd260e1bd8661ebfb4baa7d88efea2ca4958347a4675deb43516f4ca2bcc507ef4ff4722aa35dcfe869134f2f79a4a5df13fe43d8817c697bded2519987b5efe7776e832a5cb87b62e29c347f2bf993af94770ab06434fd66f864cc52bf7482c2d92d991f0af88af54873d1da8f4f72b0878c00de981e13bf2eb52170ec774d0bf5b0287b56945b19fb588bd41c1ccf6c6dbbdaa5859e48cef241d5766734cb4d4d94c5e19822884b7ba8e6fe4ae8064dd774dcc7c54c0920d3797cd5e84369f15159d5c468198ef459e357ab9447b3df25459b97df9dd15f52ea7c01b819c582916dfcb64eefdbcf1696728e90a2649b07bcaba82d1a3dd4e10347ac8f2e5a8bae4f8f19a52beb162240bbf9c89e74fbcf38617b3637bb1c1e628418b5f79576d88d2171134459741d70988f9472719c1c477183937cb5af6b76a5e8c51c02dec095384f11cf935358849cb29ce4f6d65f784053cd5fca1948be219f45022f2df6f658261924255e741b2d054a6c51450939425e3c6774c446b78b9ebe2076dedc3ef57891f88bdfe092edea055f3d62ba091c15791a323ad5d14889891d767bf0cd84c924a333623e9a53e38653f7a9e276221c0bee7f0786c9ecc24e4faa8fd520aa9a49cab88fee7fd39425e13ca502eef8d45d5ad794c9dfeceb763d8f84e9d6cb6e69c597b360e1f15e7c6d68ceac0204d0e5f5c87d2fa1cd67797d91f5af6e6bb81d2a3d77463f31a4e27f08913e2dda844e45be2b18ae02b8f0766e4ca6460ff9dc6f2635ff06192a008c989749e0ee80fea145292553317253ce51046f0c2cb6001afe8a0bc52c304f2c954b5fb9b5396fbee9f1d64fbe062bcc06b75a1f467f50a402edecfacf6a36c58b17d026c32029e5190f9be22cf6d115dbd007fdf1b82690ffdc2325974a4fede6974b969cc7a5ca5efcf6b8e2c6fc226ce8e92692f30a7821df4ec3f823030c344432a7b6b27bb53824674293f8f588166c8e37bea264b03551b05486b6f8b6f0a925d88553145c11207e0d94ff65ad84c5679fe958dddf96fdf865b7588964a83085879d3bf825866b9b788a6cb509249df5cd8788ce5cc31ea765feaa4d9bd774e25372df9f9804805021d8a37c317250b95f3db4cece364e1dd3e10eadd2ead0ccca9ab0832a27e93c88044623acfa8842b3506f479a8d06fc3df30832906eee953b69514b524d10a11991c733d2299ef268840ad15823c3a312a919646ae028dc44832440b700913e55059925478c2f78fd3d39f47d971ea2e077d4cba8cb1a12646cbc1bbecee554d8d45e90839e9426dfe05f197163828c35e3acd0f0ac3cd8297a8b34d0247795038269de0cdd778c8f01fcc8d9f579cf7171140cc8fffb8df2511414919de26f73945d9659c5442a8936857b2dd96edd21a4acd7a822e0b45d74e93389879054978eac31d0f284816ce2abb8d38bfc35c4f2d9ea04d186dbd95a6d2a2e9e1bd4edd5d83928c1a311989ab1fa71998c89e9f02d8c65785874d4763260d73def70e51e5424c7cf3a5baac35ac86e6eba29ff010a675083d0100d5cbb6039e385b92bacb28d2487b4e00200e89b4097ef9672ca02e33c80782db2827ab0bd2b690e102585cab567ad1f3cb7ee0b9e81976ff39fa988bffadb2e826be2cae77213f030fd1076210b8d99b96cfd61bed86c06e01660d0215f53a2eb8da6272f5410f01cb81507cddfc0c01694795647e8c80bc6a2cb52272a8c2b5c7c175e2b5dea9e21caf60832410122c2d30451b05f25ef25e93b7727f8ef18639bc8c831dc0b4aeeca25eff4fba9424c8d00dc9e9810117c4e43b7aa26e70a8f813cfdf96aed96d22a37376c5c33af2247016f59201123383686bc34411e623ea0e677d8972c028a6fac772eef3ab9d28578827683a384f85646dd4ce40fc00f9f57ce55cd210e760ef817a3211902dbbcf8ae8d3f31c71b1236935a6c15a460c0f35a0799772b038caca17f9e790abc71e44be3bf666a4efec886f365ca7fd0aa5bb3546898d8d16d2c9cfab3b541e338ddf340809bded2706f109e5db8c2dddff362c2d6f0a85e250a72db0d6838ee76483cfa2f5c95641bace8b1a04b0df6c65cd0e941290a0848c8bb67080c603caeb5719718133e62650447e3fa1bc1b9f1fa861e53bc8e7e4ce9ef45400c586c66a8499de77a3a5bc107d69bb7857e75e74f0b087b05961ea5e076ec220271ec22831d74f9dc09cec41a1d4f6522a4d91aecd80e23aed177f83efac23a695d4a76e875c2dbd33d29f2dd74758f6dc542013665b5ea0290f89877e37e05bb6af5b84aeafe19da34fbb1a484b492e1604f3ece4c863acb753f1b0db965f0733b7c7b2cd58d106b91c29511c6731c08066f3806e5059243feba0472f510a72b3f4d3400de067bf1d40d21a7a247875c18106192d79a8d168dd7d93a1f14863df6f687595ce0a9276c39dbc8a098615825e15fd49ceb87bdb336fde5afd80a45f2f6c9a8eaa21456dae7181769ec3686a030975e9d4f2e940f5606e82fd1cfbda3cc9f71ffd16a1a90838af636b9835227ac8c93515bce53e29378d40798331f89f65d4714d506ed3d9d98f7bf96b4651cb3c4156187f357dd9dc81bcfa1d0e625f2a79ab253774922a3c69e6cfa561a0fc4b257465a4a2a60c36921f075259c084fe2df60a337a8f024985cc75af4fb717dfbcb68591f461cb2f0a91298adcb917cb3a7a86ac4a7169e82a5474efd83d23df4f45ffb0f3551dae2f39e72d5df61e78e65e200aaae16701a2a653cfc3db293326495b68672b0a9c4b40c9a3a51fa4ed7acb61b56387057c33eb9ab6da3830c389e92220178a9adfa4cd57547cdbae123de8cf163d0a4a41264bd20ce3fd4077c04ddb42cc1bd66082091aa9a9d246cf79def493ff133f38c3ed8238a7d16137129e0e354e86c5072f1c9908f6ad730c74d458957349ea4a51fa32a4ee5d9cebc904436165726fbdf22d5cda29143eb178f381855f55555d1a996ab78048f87b2ba6032ed987dd681264ec880baeada6cb62f9c98cde885a64f3b3d9243b7ecf81add504716e16f1d8ead0786424cbd3b54a48cbc28d892a78309472a4de35cf1240424bf6cf22418ce79014fc1d9d2080d3f4f1c80a62b39e7796eac6d825642888d16b31510a3f7682b5c39a422d76722487a568fc1bdf1df03faa53d2567409ad0acce79dd5 +MD = 099417d1f998a3717c085abec333e1e3d577184352aabc843e23ec8cbd4b7cdfc5dc7e42ade402189f2b310e3ffd7e6fd2d722d1a7a7cfd3ed9ab6293160c972 + +Len = 91312 +Msg = 770620f0d9010dd17f72d665324dabeebc82d1709fddf2b7072ab89bfe9e9a83df72f5280dd15e9ce4f4378af08c80bf5d60f0e9af37449fb4f8d8a2b6107463f41468c554a7db23529f60953c63ca6fa197420b07fc96c9dc91d453afff1826a033a24e154d2b70afb9790e7d9b32076f71ee5d0df48f3b683ed53751322dd4ca19ca4bba89f78be58bac7e1afc5f8eae341c682ae6d8ff414703d405735c765a0c0944aa24e77ada5d1f6c7d4efa0c4829f6b2c69b191d4df485b531884d12375587c24de6a2477877fa600d59aa8a2498a1c54adcf99b768d845f3f3aa7b34b3c6b4c0b96d1faa52066e232e5180e2ac948291c6f2083a359275c9551125e7d08de6b4cfe1b994ba18b7b54b9eba342031164a61c37ddbca197329d95381db50307a678e4292e514290b2db9ecc4e549024004fade6afa8adfb6cbdcebef7db730f85f711a2c09f4b9d10305c631948b6aa857ee8d40351c57c8f5fc34ff5d8a11d90314d2f581d04dc1cb9bb570b06becb799d97aae09e314225ea3d911d92d55a508f5f78fdb3b5735edf83512c77f0ae6613800f4f773874b6c6042c79f257ed4c771124b749a58a5e0a7bf88581937cd3486cac56c4243ac85ae0c911e06eff0c5229dc8ec71d4aa5a36cf51d0df15c49a42229006d3bbde5109910eb4563b8198970478b1565daba101eeffd0450774f8f6c2d525bc625944ff6a811077e3ffa82ae0eb51bc56325bb598f2b4cf9f56d71106056740c9a5e80c03a8b1007bd37a7abd815c2850d6f0ae57db1cf34fd2bb2d76b13a15743c909bf6d5f464659595f2e4eb1f0ecff1f678960977348b712ba89f691cbed485f53bbea9793833ce7110118938e4362bd390ee0e3227f4ca9f1eea8d9d817d2a8c67c583bde058d6927eaddc385d25dd1e83da69fc31fe478c0cd2af2b21d092bcac960510f15756808b24547bbe119e4dcdc5ad23e71a6088df023e43f471470c86caae30dfb1c6b1c21fa291ab8be7d7cb3a4857bbdbbe0c11d3cb869dd1bff262bddf8c2ffa9facbfea171899f7325328c2abf614b4b89c51d1d75162648614ecfa1991569459d7d13e525efdd6063662d9788da627d8900b86d23306bc11da620a0cdee8017dd9a266b4f36bbaebf7e5f91e8ce4b796ad9b5d5cb9ef4aebb98e57f9c358d48418a00def6458185c1e3eac0e8234f68b3badefc73480938c38be8e90ed2d8ff52b569e42304770cf2fd96ce8fc2b472ed0af98b2616f287bee7ef842caea96596842825dd5be46cd9342b60e693c2be9f30cf29e9f0f6c23413c3f8fdaf48a2975d074b2c3212ccfff17021f37ec3755196287fc6be5f11ab792cee89befcdddda9ccfb18714755ea9a2eb6c06cfdbe8ca3cc34c468739dad80f10ed9c40f3eeed140dfaa00cc2f24992dca5543b9c2d6bf82f1ebd67b8ec190dcfff4a7c7ee543b2b9fe9c7e98135543503b8ed3fa8ba52135e44f1be0c7011b36ae2516d15975155e3deafe573a3350e09f350d799bdc44822d69f863e406b3ff6aca848da3d7a85528f9e0a2ff8a27f850e56c9bd697ee7e6aac9194cbb07484c5996a266d01d8594067d9edabb05521f0fe65c3b45e6b851c658c05f694b9613f102c1e1d8a41b524b35ea9f75c54d7e00e7da3cd965850c3432c39fd1a0f0f47dd3ee72db76103464ac36a4ad4a394be84389e7ae6414befc416a337b6f1f9704f3714163fb2be15bccca11ebfcdd2dd0e1b2654b492e10246bfd43ef1eeca38e499277f79b3602387ced0fb84303cdbfa99cdd387d9baab69ac3f9b6171cc124bd993c20bef73e01a3e8c69a8771d2bd839178fe692333b9b5057b57c07a98cc37cdb764cc383ec02b035d1b30f0e5d357d75e24748e5436a40bf15a83cdd1909f78114e2dbfa97cfb86fcc3a648ae070db7b63205a3b4344f1d8448c7dc1378dde071634954283efbb9cd195141d4638d79a8b1862bfcbb9e835ba7f370078bda4d002d89c1630d13e4f5a59aa300efbf655e285eefd3d47984a002715154d17c09e63353cd01f12b4e9fefe735d9b28cc3fd1ff5b4e285c86a78dea847a352ac5b4afd103fabf22b40f180a1c008b4dadab01eb345d0d8737b0dc5001a9c17538a541429e00819fb0213df310c34fd93f39dae006946d56200873ee191e62757df2eff0478c16d84dc2e94fde106969d56ec5644e7ec837d400ed2b3762a8aa2a2fd460bcf7df6ac166a286f072686e24bc69fe78869eaad85c807de8f0f491a1bec72a5ace5bd5cf7ee22ee453bd5481a531051146612d815e068caa53e6ba991200a39d8a0c97dc8e30ae165ed8bb90aba31ea538a04e7397c7ae07f5ef8364ec496311c5723f5d27069b22de6b11c64248a1b0c7ec7c339c5c786e718f9a898fe9ef43eb2d1ae5abec5c866cb4f5871b8a44a09e963525de2d625a31475e9b8f6abea0658dd8eabf5a98bd8476b57769f06e11074e17eedfb2f267cf974e0f6d6447b3ef24e7f0c3c9a634a000f00be003846eac7482e303a5bef3a70fe7599c3f20fac272d68c4bb22b8859e423b9004c3e35f89a04a6fc5e1eaa5201c90ebe73c0e1aa081301c9bc8f252ca0df033d22e1e3662f1b9f2c4497e84b2d519326aaae04e0552c15c041479772c7607f094016139fc446501601c12a1cd32f8b774c4ed10fda902cc1d8fb6bc6b88690f6fc5132efca035e4c0e010c21a3916c22b139e2a308ddbb30fc00feb2f48fcd88d019bde0d0e11e20e20dfb040f4599aba1e59624706345b0130edca22c0a992163d6311d595e1456f61e733e86baa89476d8782ea1cf50a1c65b923eaf759873201d28efc3d8d530d2d9012baa5f2d5fb899150c0d8070988e9d9bc2ff5f2fd07d6501f2b0efe55100b42175daa17c7fdf9dd95724150a06c44b75d9ac35d3dc043458a0a111a92a08465087a8203a77645d518a75fb916f0fcb9d0d268838f83d11998404dca54e31f61aeb8369cbd8df6e0a3083b2ab53e9b49dc80ec4b3a7806351176caf7e104649ed1c0cccc506b9365fc3ddc8cc37ba9ce484c589c88c96dffbd5391878329db8539394f79aa37a4ceeced4bc589d2acb0ddddb360bf9b8be06480a9647f7b0d7cadccc48d111ab2823bc08ebf4f692e5663dc057e2819ea41cda41a74202181ecf72135efce3c44e9b160af605d68b62aa2f056de0b681188c168eda1ad43bf3edddfa98729c4e26b1672b592faf8cd9361c2af68b0b3881f087429d16d0b50d828af293d69da147031a1a93c6f41f9f96afa17045e20d86c6a6fd6eea99fbb24a038bcf9d8a86360cb929246056ac5c4833f979a5fd788d9af01fddfaa2788880c236aa3bc5356a3acf07897019bb65d75393612f90120cc9ed3a58cb5cc406e35173b235e0676a19c616419aefe562a0791fc5475c628af008dd6dd15b56a3de4bd386106e749c3638d5cb353b82c9403eff1481b4d29e99dd798ba100c8e5ddfbd6846fc1e596fc81e6b4d37f4c0042ffa1ed732bfabe23d57f40bf0f63436eebed4b887d42e0e95b996d0a3d89be0555b8ae704433402a8b8f1b8fb9de530db6882a0f0314e099008e722df8c44913bba3d61d7024eb1a5a098a97a2928b36d647ce7805c43c682b3652c33394380aabd402ef4248057feb8f0c7b4c286276b5aca737c7e95af326218d6e7072114690f9a34a3d0525c79a701f8f38e86f49ef1722e2fbeca2b6abc0909421d65b44256535d2b2e4d28df15d3257db8b082ced27effe0456ca1f0693fab8da497cafb3b7490d667f823f7ac6f379c668c39c2a5f5cdd63a037b8d12c2a511c340bd5d6504b5eaa3dcb68b11dc1495c1a3824411e0825ac61520095f9be013a3e7f5307d0bb3b0097f4761ef22a6b3f07cc31abe4605b4112cf82cf7d143de6b14da3c2a927470c26b4043ec4ad33d1b9f650d552f3e2c42cf6bbe836cb5b9444fd448159fdf72f52807f7b05a857a6c95d1e57ea4150a8287e186aa7520eb56214b1ee53ddcfdcb3c0645e45da3b309e56e6ae0ab7295f8dac24d15f36bbdc811a7844371535a6c31a3f7305815311a17a364244f3d16cd5276db6bee7e77c3a85043d7452cd2ff8f48d33b55c339c8b4da9af1955ed5287765f8556f41616e6cae2348c04fabaddc5ca3ae5b95163a437ad5f087bd1a32d0f86c7b7c9cc2f2e729eb3feaa52d9da2472d3073730e9a4cebddc92c432d12e595fe842077e476a12a6563cc14a2f868703a6aa4456b0d57947a238cd655f13ea6781960ba0d232117575d6d8550e5b7419104f6f373bdeddf74a6b05fdcf76491a0e1464d8621ef5a8ad4d6e1808d1621fca571656fd2953392fb9fc7084bdec03f85d91897979359c6710d0e7b170d7841f51e83a674d8f89dca61f4221634991cac210387ad957ed2dc1cf686ac24af299e043662c93d975ebaffd0717fef8601ff27f7a08d7e3078bc0a7fec74e42c7c452b64e9fc4c769a7480423faf96edb425f2da285cd6d67eb9e093f396d45802959cf685338dfe1ca0ec31d2ceb138fec78a96684523daad7ca519e53b7d9b82335ed57b968997abe54c877403c8cea78df811a86eefa3cdad61f9088a655ec6ca79e7164fc7aa0eeba72b6a766417771e433530ffc199a6f41d1ba5ac16079400f6169d83cf9d0e5b0505ff500c7b362373e847212224fff7e06703c81800b57ddc49575d2ada73dd6efd7ab94962ab43911436fb99aca261b2c56c07f1aff1ea33688d025fc70518ebfb22d8a2349f27a4a046b7ae9955d89b1d26912b7e0fef045a889df6ce8bb583e741d69f59da77b474bc7ae953e104a4577a8d4dd4d93356098d547856cf5b3fa91ddac83a24daca78e36fd3420e8fd45bb023e018155f315ce74f6cc697b32529fe0da63d45f8ec9402bbf3cfa31e3411107d6bb48c1a9d3bdcb75a88ac6540502e97c0cb047a25b06089d1606a5cca61e2c0760f060da38eb6b4ca03d6189504f49f9e4d2a087ab446fff65f29eea0346d178a914be04a3dbb6d459fdc742e2e974dc9297f49f588fc45e932a97fbe70faa82ea2223a9b31340b52c4882312b760cac8c9cbe69d14ca843243b2b52affd19beaaa54c39c5068b57adaa0ca4985973e2393d6867a41f8e45af80c38eec73a194611aa245783a1944449ed14dc8284d163f168d295f5cd8ce8bb7eb112b27d4acb3fe905d4b325d0387a37a6d2946ea90f4a4872f51992a564f3d1c89ca7e155009ddc0d1ac63e90ded3462b33a59ff1af053f0da29690565707cd24968daf626d914ae531a631fcbfbde149079c5dcfcc8c154ba5520cc848613a6e074e309b9b84fa352139493e62a1d2a85761f16bed4692d605375122bf68e04df8d1a92611dfb5a4f269cd7b4fe5dff12adca3ee9a9b7d53ca2ca68d4484876a70fe652b570843daad1c04de0ff3d1cc89f5ba805bf3a06dfd185231601df66c77bdabd3f6696c805a3c378c29316fe07b948048b9b6c1caa5e59e359a9bf6fc15f6c2457568f83effb0afb0250983d608a13b6f3b4ca912ca7ad2c27b674fc25391f3aa5c6faebba660b1708ce2d3553804341c6a1e20ee74bf36ff8ae7c9653876862a34e557a0563488f4e523290614a5b378cc92ee06ac9c11154f842b8ecd8ec3ec8432bb9418147b65b8364b91a36cffabeb11da0179f9ad2b52a63fe419bff119d4bda240f3e8d1eb8e82019dee4262dc4f04ad87e4be506a1cb6cb1024f25ad8adf0d44bef98d3aded6f15d2fb0d22347ed12f42f4d343fa341a98b9f61044529532185e140cc9d460654ddad4b788da02e228d7b120ce02223c6e8898fff8af16ec38216b2dfb876ccc735a8126dcf6639d60f1238e38aa6f83152511a9be16b884fa3bfbe1b0ef9b0c4dfd084466b2276c9f365303cb1ca256543769f4ddaf02632755cc113134748da46873f76d34d8b6ac4e4868cd7d431ff466a8ca9fa37cf18716e7a6c77d7fb83f46ca293ba4fde250e20aa687f8da45be5cd7124a1aae96e1275386b8f245f3e83d13c1162b1f5a539aa2a341b2f03077befeb4273b21bbfe2f189b4cbd4da765f558a747f1c5857d1d174943d60c47ea3723977e2f5cc6a7d73fcbcd031f3d7f18a0c3161d77cb9514717fd48ab7f4de6d50a5971ee721a2c7cf0081ef441bfe4bf4fdcad7be946526b92c3df6789f1a088cc5b92f4b32b7a6d021b2a643abaa385b3dad492048b3fcf63ac744d7ae67b1e0df2e8a0f63b01d4b16a653a4544b87dd6b0598274f483d3090b7995c8a8d1052dc3c58bb1b54d346c7a51cf07da8e0826f1bef5b12ec926f165820909b54cceda22cc1d8c16a71cc1cf929ae908ae95331377443f766a3bcb4f1fefa49848db61a46ecedbfbb9ee2fde9a366f4b94d5799a14f676780171e52c95e23fde4fdb72cd102827c0f039252bcb2a111fdb29690a0a94fcb00979ed82966911d3dc2f7c1172a1f602d47e303bb7de54f1ec119fc7daa8489afca432e593ece1357847ebf5e8d4dd3df13def82e2dbd16e321e7c781798d0b5559153da10f6245faec5510ef52933deb0f89195de9aece157a08d7f13ff2b7baeb1ceb4901d31deea1839a12a27a061ae2ee4f8fda42df7c76851618233cf7a5296121983bab01fa4c10470ea58996343515800d2800b1e0bb656a3d4ef232e0baebc8d7e6715be89505fd2d82485601af049520fa70ac09f1b0bda7e79ccf3148c2c64f29ae927e2369a6b5623fac49f9c5770e781b39bfc16ff69f17c2386178ef05452de90e859f4429ef6cf701d3ba600c1fcc88bec9d3a9fd6d06edd438f4796b0419aa37c4b09e6e23c9f7be689bdb3e9d1b3fa5f0ce66ba59dba40b7d6468e2d3167a7505ff805d99a0c749d04440f4ce90c954fc5aae15abbf7045fa6fc551f94cdf300e34f1de981af00cd35c9716fc50ad35b5208af6aad9d8ea75be979fbfe263d0a8f6fad9695ff96d388ce68b6d8673aee2c801459f526462b7f9e6b66d018ebd9beda23655966ad6c97b373d6958a4294dfa1cead2519c1688c7ba7d4bd0e75fafc2f1dda2e8ccae4cd191133aeec70dbc5de2cd8bff096cafd01cdca078f61fac1defb6987ca55d8a38fdf5277164c2f8995bd6128332cdf6bd13bbb620436359a5a5aa817b804b4b5681cb770904b0c9578feeae069fa22336a802d3f157947f031a9fa30ce2e057d3287d73dd2e3ff63f87fba9b0d951ffe2e2994013b91be6df567e485855847558f7f463166ad749f84ae649a86744526ac96945adf15e56df6230b686609f6f8df8168fdb40e0882be098d717d1e1e475655829e788c797ae459c35bf8c990b1932cc3e5539c27c7f52f89a24a0927cacbf4f36ea05bd70f207a90f2b5fda12a5adffb9acdce5ed9da7eddcf85bbee4b7de37b2def0a7ab54b1418af163ca4bd872954907b1b1a32ce761e3ba8acce23dcaf6e6ebd2ef0e7b4a4bf03a20d1805b8878348e418f65d51a3bf993b6263fe68c761a3731fc6210daae872d1d5877d5f78ec26b13e5fc40496364ab6633c25c2b9d96ed98366eba6a5498f3e2c5f9efc8c13dc3b01c31147cc06c29225b3544af55a1338c05fc2200246ab3f782ce5102f7ebc19e9dcaf9b93c5b3672065e492185843197d1d2efa7064796e5f5bea2ad1a168a67cf8f990abe77f9df9c0711881588114002b9ca64e275c43388918ad211044992194a99762f0a9bf085f644ececf2f80f00795b41a03d6469a20eb377c4fd24a8e5c1a405755a432e2af48b55f40d108d34da494529e79e0faaffc2a71b4b43309abd60c079b01a1ff1c88ecc1420814104a43d7863bb9cae0a2a6267fe35cfb29f0675ae2353484d433cf458347273b4d99edee3370183cd295739c15502f0b75e648cd85c8df440891665023c4c0d6c1c92d58d8d007ef56f50efbc08fbcdc63e9f4d440aa4467e291f8bd115f677f33346c97f4e01b2ad44dc2d60ff688f67a77e5ffc16e167918d1f0bcda5b8dad1888263bf604c4a7d10c29bb623915d2201cb6b08698c7f011bde90fed5da5e8c81104b57ad296ced3bcbe0c55abd6080b54c186eeaedb5543d23c06d8ea32aae88b7284e1ce041862dbfa4968d35c00829ca0f38804b32145ab74321b65d67bf043ea2ad94b8f0cf4f66912fa542a443c60cf76e15f01ec8d963c222364e3c455d6e627bfffaa15107874d9a882a34b7f4dc79169022a0f924ede579f7bed2cafa0f10c044ef7e92beec80df20359aee1c003d3ad82ae02ea21d532de0f750d545e954854bdcac1cdd5bd30453adfb70a441eae1d75007efbbbdb546d840dfefa5c3d4d1fc0c5677ca9ded130bd882c3f667281474db3dc5d793b2cdc9e0a79e82663bac3fc6a229ef7a78132f005471783aa1da9715a9365e69f3c99a20cf6d459b2f1efc51b8bcb3b9190da76b9c029482fa3b284474ccb8051f42334880e1542858301bf6c1b87d247a085b6180fcb106de3f10b1c50f4e2fdf407ca0e18418d560e984fde5a3b781430c332c28e9368ff3ef35a4c58686b1dbcc5d6f1bddf96cec521fae4b07c8991c221713bd508de5e15280649cb9c952baedbeff557460b3a771d5501c6b1834ab50ef5d67ba1dd05170d93b713080d925ac8796b8d2b37436508c2d7f580f1a9ba0a3534dae4e18eb52296f6c74110fc30fa07d6c7e5b7544f72d8b9d551512921a1b3d98b4888456ff5649b70ce6bc3d21f1fc9800c17f776ca1b39eea92e538c53f636f5433dd3b7f4a11778065a83ae7625a64e14c5977b9ceeda99fee5b37a9f80cfb17b7eb41dbeb0fd759f89a636bdce1f9a863cdede69e81e6fd913c34ce2c8164847d76111a238bfd1e065b60b445d77fdd70a181f9f8b67e8be350da3dc40bd124eb465244d9cc1157f7b4d8ca87851d09da9edafcc3d599d14d5fcefda9f06a7d6a22ad62f51b3c8c326a73b68833fcb3098ca1f6e9265e583530bb16c178591963d4ca7b5ec0a5462148da7f3229446365337df051f1f6a7048c4791f6edc3803c225097fe03760c2b15b52d6bae1ca1565a17f1e37e8947233b1a752f95d3385fd5e8bebc2bd467b898abc91d0bacf644cb160187143ebef805ddca54baaecb32b539f98082e9de309a65592f891de9974c232825fd3d96edb238984ca27fc11f89ec4f324eddf9fce38be8896e9703b7a6e66fa57faf566909d2e801956ca08c1ba8c9bbd8d840823bc47b130241ca0ca106ddefe3bc87d4d354c15add9df2e331166e0168013c2b6ab81cb58f44c8ff042c7bec718bb095d8652c3fc13b3e8b94dd46ed4680745f3710d2575bc885f699ff508270455916e0ae3098886e0dec0ca65967b97e70876c74a6e1aff4885a2628649a2a110bbeb3d7d54d7b5de66e6019b0580a23b909cf8b9e3bd3f05994744ebf1de5184cf518872347e23151795add52a68296d64f29fec54d0fe5800a4b1a6af1ea81a723d966236c0511d675c09b473b67004fbf41742000abfb852672346c008175a1b0bc1ddca52b26feca5bfa98fd0188adc3e196b93aee59f14fb343cd30f11cc4058a5456db9d9850e0f3a34cd69a5777c2cf0c97e422284cecd4ef956b849d97880ab29af4a48e5520503d6bad78943524d47dc2e78d8f1c679ee2cd988021a2a206e0afda863093f03971fe69e4687050b892432977b7eb27d9c17d9f2ecf6ebb44869d738ba794b977e70bf426fbaeb043f221942ac740944d37ab68d6d0823c8e4b6da9fd1be0e4d3469d3586747aab3d45640fede8a416c1ea61dac04b668baad7266222b3fdd71237b9144cfb59a96d35158107429e15ff82a6df3369a31260d3d088449875fcff616979bfbad5129c683ad4c1fcb6f9cda8835e7952c0387ae77402a9f2d0ba616db44c28d6754f9286deef633f742af404fe40d82d4564beba19b899e89478ff02a375cf7ac1c6173806ba353261113c3d226b9922bb00f6f5c7925ea24ba0a2c93cddfccc42e0f326bc1d7efe04146cfbf4c8035ba973e83f86783f497c991269896af7f47f05edf7070088cae59c4ee87e3f60fd97255d415f528305b0cb178b9205071b019ecf53f04b99bf8d12a8aac7b9f6330d7e1ca3590873fd6e9e79d75e9776694e115fe47de6fa0583dc43e9d71c0f2394e6ef0c7d82575a3e7afff4f5068a05f0c8664fb8b9f3c34f64e74eb752f1f5b3c59c24d2a97743a8c7738b5f3c8c186f29ab3fa9adcb217a105b806e41e4d2f383ec9460631ae135ed9b43a41fc3c9519ef85a57a8cc488b4a692804d332e2db88a7042f99895c6c543fc5cd997941208e1348ca933c600a79d7ee82ee214cf33c951b48340ddbd66429b9e291f4a76361c5b20a57649080046e79ef7cfb39c3087d82b21aec86f98620c5e9ee7e24a37ed64020da8c017455f672536406d0d45229e175356e865f20eb94ec9a5de0674f0e991306fcdb6ed33780b68e8b3aad835fdf9a6bdd03909c53ccf27cd902373b3566ebc2fb45f6e6f94c21e2d19ed604e82427a67f2413602016047c3cb39baa124eb0f5d26795f6037e9b482225d83c8c5927cd9e126fd61a192982cc1a1c046efa6b89ca6ad26b1ebd2da8c4f63a9212269fc880f52f64087e6976d36041b211112465297636ae12b1deea003b84704432997f6df4d874b4eccc4097ac931ac33ce17137b24825a703b6f61e193f3de8261cdaaf37f46de40c5bc9612799a54c23ac953e479039a45bbdb466baf260c7a931c18de70ab761861df778f8dbbb736d8cb9845d9652d360fc0d20462543a964df1c4e2ca3baf3011bb32649e1c501c38ac5521ae3d9fabb7ae793e4604d56fe2ed33b2d46dd61255be6b13f3429bfccaca1f0a9fe34e2143f2c08bd2ce6952026ce9c137b8b759be77662045b517231fc36a6306fcd531154c2c7f910762f72d0f5b905cb29f50bc74d81c0dea3e599826abcd8bf0b155dc09318bf9565ed9b3331d92cbc20aa1c0151569a4689dfad452679c87555ef9e8b854337411c9544576845b0d8d85c779f6c28bb196a27154d5327291915aa7dbe828f8b9f01ef14458346b8a7b9d3c4a885414be2ae8678a2d70c2233b20ea1607146e0347dc5b4046b226cb02cd6aa2583e77126bcc47e4d9c70dc4c94e3b37939ae618af9ddcb9c0621f57b972fd11d5063556ffea9d055889d7eeb23f15a12c40f3328db0002163e8d7b9063a4e298d3fd2044dbfc16c285da3199c7003f31f9b381968cf60179faac2578f9fe859ff4fcfa2ebb87f79c7a6e1ddde8d709e1c0e1715d75876fcd22c81cbabf0461389baa0ab406101cec4ea2693fee3f612701e02b04fd7bf51b9d2788de1f801f6eb04d795e25602dbaebbe3e474100ef0da4f9d8138b993a6a5511906c803866461b2e6eb47e3fd10c380ac37e49e25a9a9274a01289aae7c231d05ced4af6dfcac495123f7a75b0ec1dcd216b6ead4bd6b199aa8a5e76a32b19ab15e9e480320194c98d8681c9736182517f97192869caeaaf1f0372c517aef5e9e3e6b89e06f371140611fc04c2734fdc0688b01c5d7d260026032d5fea52add3ed6e2d1a03a944bca56951ee442b6cb7ddc89d51cef74bd2e814f70cc5202ab15c08abbbd22af60a9415ea4fa290c22a2edf468f6541426e8dbd3893501e52cb573d9a481b7e6d46f89d2def84ab377c1e53159eca62f41c3c8758bd32560e680793638a85ae93b8fc8a84969082b4f7d7ae7045a46248241df8bf5214d047d194946c49b9c14fa8c563560b712022e18177c14d9b4a25cd599ad51a9d93e34f25c81e4c5fbf885d7eb00b17cd8a678343376f7f5821756018f503dc76a7cc28e2b6e15d1eb128204dfa0b824dca6d254675e2a183ef1f25818faf624614e8a4f4e61e429e9e16395ac7bd1498e61a0fb2b9827bc4bd0b64bdf24372b6e2210d83e03bc4888e3af0cea28b9457e95888ae8cb7d7c1922165f3a625d56e1a5da9b62da2ab84897c8cd110dccc31d80ed96274e97b2576496f4c31bf5315c486c2b654b9bf3998c4578a9b1982cfbd244bf7fb803096716bccf01d77b353e6839eabddeac850c2fa9722caa87fd89f812495a9e4bebc8c6fc206f2b7bfd28a3c85bc519c8d70100695c125f28bf5870fac63057ded41ce3d9ab736e63d37b799c1113636d74288d0998d355f6dce7cb52d8a97b485ca40bd9c2a736bf62d768299d317226e6e3541ebb18158ef0a865bed32e7ef4d02e8d80f8830b0b25acedf542a79c71a9b1c3fd2539243d751ade935817e970e8ed0743df8f61c3866c7983b3de68da37147b3989cee89ee4dfa484da2e3159019007a6ca34c1752fa69959635e5dcd09abd8683b31f93fca4745e7dbb9ecf9b497ed3e5b0ba09c6bebdbfad39ff1c6abb869edcc0adc8c9fe24140df5382ff7c65465f048c85a5d59cafcc772bab5397fabe5eaed1e8f1c0410534477389c6b398a1ad493ff73df7498352d08a110058b3342f760fc52bf5d42016c6a267ec14a26d9dbb8e6ba14b6305328223993968a269c4941ce7878b2c207cbf58b3cbfa032894be00698c4c8993cfee80ca7b4228cdd29b91d6910ab964ea941ed402ee4b5146d32e576b651dbdaf783a1b526fb6eecdff0708c4fefc8bd5075d7f1d5bdb86189d70dbab3faff135d1b8023b5bed3b1b30d4f4bfc27603b07baceb77ed44258e7f606ce836b0cd176d7325a2913c414ed38420de1fa64b215385cfaefd05be1ceb85618ee4b0afb8ce03ec34aa148fdd49bd23bc411de09c3160822f15b0be488458702bc420279e55e2cc5df116754b15b863b6e13d528597d5a974c1a5b495bc421f2b4fafb33c97885c7b20a2901cca3e776a7a952f71f94dbc2c8b752f8905daa529f18fd108256cf33893597ec6d997c54367b5c5d5c8412092ddaf9da6e3aac89454710fb572195702d3ab8fedc65cd3ee530fb455a7488d5422a56d53f80aeff6e2d3dd98f015ce666c0951d6030629a7a7137945f8dc38fd05074d2495a391ce2728b93731daefdfb6f34324322c4d1bee51933b4f64d9d9ff358bad6eed44868bf03114b9e121db6f19f26cb627a4c7935a80aa1d8ae6977bc0c732c6407ebcabcab3b5fab11ae5debdedf41190c727308ed016d5b6c59205397e793e55a6dce108df9f66d3218b908f747ed6e03aa7307ee0162a611d7615f01fc559956363d63b134590cfdc392edf445168ae55e43dab5f0c6e2254a0489529cb9a782aede5f1dd2d1affa18b045dcc005943df5a9284ab8e2362e1acf7893ae0637663e7baadbbda47eb27ddab6b8a203b590d76e99b33ffecbb6ae8bd4cc1a85738b4cdaecf3db1aa2ac5bdae88fd25615686b5ad6fa6f62c94470004703c87e817842c4ce6b167d43701b7685693846db4c1b3487272e555761c7f57742a03889b58601f74d551388872377324fbc1d30c54fc6544066209d931b330c9089fdb4cb825911a180269a78dda4994746213b5a6dd6e34ffe0cc465d583aff66e1329419c94c16d7efca1cbafc7625cbe9c2593de2ddf5bde5ff45c5bab087a34c3119f3e79b1bb39ddc40903a635930cd415f80a93ee6dee6154021673be27c455946ecfd2899298132bb9400bb8f61812341259cfb88c165c0dde6ea57a020611d935b765f0fb83e5ff63cebc968cca9da96834abe6c03e964678cc07e315e23f097c5dfb8ffce29a688f1581755d0bbf9d8201ed20114e5828599663a26741264bcc2b5b0ea09d7b8dc67d24fe72c1be38e9295e0d882eeadb08367f5e00090fc8ab884f14ec9dd0978f6e6bd8d2d6e3a12415c6562cc694860d1223c0e92442a8a4dc9d49eac8e1ad735020ab85307601bb2ceda306fe9e52f194196f297807123c900e57a107f5f8f98b092194b9bf7f37d59a9b1cbf4f663b222814c8efa62efd0a6ae3194355a0a987efe0065705441f7a97e678eff1eb73261757cf7066256eb379985b624acc0bac9990e3f49278fb82aa2d2278ca082207afdf45e2911f17f3021b6e4e1aa4a863d1da3477ac4154559c18204023e6cf2db855322f6d438133cf175aed0d5107125d6600c89ccab05b344e7c3143ac0200fa609e3e43ba33d9a63228296dfbb02306db4fcfaa399afc3c783e32748343e83ca992f75aacb54f5014dfe880c92cfc94e129741db797a07a3d6c2afc931b4d48d81542fc4090fb9566871490e40207cf22979f3f6b31afb846100324031197e49430076f9e4b473cd02994e374baaa7f43a038567eef91bc3a31a434fcae2ed985ea2efcef6e9a0ff9cb50c1a0dd4f6bef4d27ab1759ae4ec2d8f574a5787aee544b9feb5b825bd48a78307490f25d5ccca554865ff86e38860cde2b27f9e4eda95b4384090ef4542a351c436d813c1a82b0a72e7e533a412dd547a3a9b9d29c2b23000f229acc57820cfc755f12536dba7609ed9bf37830603b1822543fadc583aabfd3cdae4ba53a04b8538d2e0c1d1c006009de5e92cec64739f14f13de2e59f8691933d3d905f9253825205ccef14f5596cb701eeee308009258c3bdcba05416e4297b90de40677865333f2502b2fc7d917b79bbf637cd6f0c9ed8c5dee21c0b1a4bce6ec21e2d0425c413100e28ca813b6120bb1091be9a8d0db5b47ebe5adff1c754f4ed67f3d26121c4a55b1b62687ac58ea8a6ba828bfeeb831212fab69b53e434aac8e360e80293796c51536b3a38eeeb091f7bc24a48816965045fd74627eb9718b95a1d50ee605aee58978eff5c255e67e39a26dd51179037bbb566e85524a4c72993d2120fd090b2d9b173c0ceb20f495adf554e03f5200f9fc40a8ac4d7843e815726344b2d43403a67c18576dd2737ec14f8a54562407618536c325e4c5e05276ec1c08cbd9a21e58220543ceeceb901ffb6e8fea818f38e2c33eb0acb5ba585a04cbdb9cabedc40ca3a37082c2b58016a3821180dd10e691508bab09ba3a501b56f34ba9ad7f9b506b435c2e0679b541b26577ada934f11d793a939055d8d0574d12c77750c01ab0039565252a90b62da27930c56853fef3a7bbf8b51b2e6f8a61badd7a5857b8a7e6fa3a0ca1a2e9371e3dcb6cbd065690569048fc7c9364213f4c0c5716befb949fe239490e28f50a6033a607f9b49e80204812daecb084b83056b2620e6e5a2298fdf17eb28b3ff432fb5f2bb0f74d5f7f53d4e50dfe17abef6b8e3fb1de6ace5cadd0f2514240a0e0e5654c7546d96ade340d8f32e4b398b6eafe44a39793f4756276684d069d7d049246feb91bc95ec7793b5e0dfcdf0b4155711556127c315dcc50251810ad0508727296fefea387b593dcb5f1bf005ff94b85263be77a01803bdcdd3528f5b5871686b9a957ee924304604b70a3ae13593da90bd78f13f187419ad546981e2aeafee1eb6ab000fada4b74632d335ec1eb9c6b1acb61d06ddd6e18c1aee68cc1be8c228095bf911df5f977b169f698e81af839f76a0845e2ed21b516e0aca8167c4ea73dccbf0598206ee8aac955d30271d1940635fadb0d410d1e498e431695aed70e576236d4e5e44c55b3cde9938d9a9917ebd1b206298370a2de0a624ecbc085b68218cf8583abe23d60ea1a5105dfef240cafb66de40efcf138e752c7254c0b4e3232e1adfe01f10e369070a1e7bc2446dd428068a94e22781e97cd063ebba823dc5305a4b160d946a97384fccfd9e8fef21ca88d05eb61a5c3ae0982749a1cd604fba4105a530b853de5bfc81a939dcadf90875176413b08dc9cc0c26361b9e3309f6567355328386879899a4493c328fa60a54c66fa2f2fcde66b5c87ad0fc9e3a0a21feedb8feebd918af9fa34e9a7d6ff9ad47470ae791c1d61a76dc6aef892c1e2a0e376d2f6b1e03c5d980181b5f9bfd0901b4f49735b945c396268e7fdc255bfa0cf9f620ec9c8164baa741bd1d733dee5c7e080bce10db39921ee6b57f6ee8185efcfed9579db813aae27288a03fe2e7c06ced4a450cbf03d08d1a985b4fee0c6e082b609567d35a11f75385ce47137995484c5c83f61aa9ba3ad230560f955fa3e525bf8d42f8c157af8bbb90d2f92e43d8cc4a6f1613b4b6efb58659f80498645a95fe267850d1e4d2c333cf29bb8d32e5161bf0b3d3ab2e726ba14d50643f1b3023234a5002112128a2f37195831ecb36d1d7f0168116898c9d8a1860dcdc2f2f7638e011360a7478 +MD = d3891d0e889883471e15525f8d4ddc25b68339c0c17e3a725c8f858e7784267ce0767b12ccefe62728983c53c6c847d0c38adc3f52249b6ac082c01722d86125 + +Len = 92104 +Msg = ddd32f165dc63f633c17c2bfbe0dacd72ed6495dc5d53afdce3dbb9308df279b4c40bde86fefa49a6a152d4ab84e598700b79b86f449de157965cad108af4399542033422d578a8ca43083557098280d90a0186a32d0885dd4bd8844a9dd87613e9b1a8b5da7f92332904a4aac94235126b74a7147123fbd266e7c54b211fbdb52d8f92bc886fa465b5c0d9035ea513c0a24b804fab80b1db99f2e6aedf2a6f0d700588a369d93dd68bd518fd341bab48310ea89146af465d37927ec20299086173abf106f94ced1a1daa0af4d4167a2daa3696a5ecf037dbd24ee44145ec18658afb7253a12b3084edc81586d935fef5804bc0d9d903f4dbfc70bd8913842d9e386c73160bf496bb7ea7df2f9dfaa81425c6bdc9c54b1be208a07125f5f1a6500e8789caa4498e2242d1be5bacc5142e3d2ff3d22c45fb62a966959457c5114f6fd51cedd49a856dccce39978035b19828fff9af688531e2313b9140c37f0cd0fecda2fc47582ad28f05d77fb2cd0ed66baf35ae14795df542980ad7c37fd7791de9b2826712dd150c112e50aeeb9a8d87c63e5aba92bdf05fe448b5d2583fcc5fa1d1fcae4b1a89c66894c6ff11d3120fdd8a31c581f087ebd901677a88743f369e77d7977171c53084a15f0de04708664dafcfbf97941068ce9b692691334635281abfbd26614bfcedea6565d764d52daef5812373f71e693d9d3750f2eb75cde740f189ca67726e1cc6968157cb0cb86a11f27b77b8267fce7d5e943e1b428354713987edf2fd1689cc4f0af1d813a9177b90324345bcfec9c24b6ad33130d7e821e421f1a23088cd721b4d262a8e722f98e6e2473e4668d7e28a4f42cbc54e2ae97df285f3b137504e77e27510d1a62b006305f3f057607174a7ac1d498448852e83740b45f394aab7e1456f5991b78238a107fa0a64582eff002bb348d2798f67812102377c334544e3e065332318ddb80d7299eaf1c258c84028b5384433c22af383fb36bf95a88bfc6df75c1a6c95e524d0742084318786c43d83966e29a5ff571766c2323e5ce39738b622fc05336663ac1939a02843b128d4bef194ada34b2845d578889fcaf240caf2262c854ea2666ff994ba1915bdca88c7c87c3252a4e3a9b7b8073c8b2e85af6be4405f303f999685d04676662345b42e89697a3c8315bd9e1f428705fed25053dbcc15908469aa4e6ae9e2cd8816f153c300c7b96c4afbe8fcdf11d3e9b3487a7b142ad8177325c3d2f8c0a432aadaf7f3c6cd61c6dfdf38ff116f7d85b5122040dd218f7f32938687179292d99dab5b9a2fddbe3950f1fe94adf25b493427e5db7b7c2f12247df715aafb01d35c1d2f24a08b372a5abeba3bf93d05aadd044b99739d2f76c53fa5fd475c89c6629ac331cd48551039affc7377c1f530fc31c2195a271913917303bc612993194d9eb8300ab7a0919a3025c9ce03b2623e3ad9c9938c648f1592a0c17cf4a64279a38ebded3ba214e909d6bd5084b5b4ff8a0328b45faa3fce28fdab1f404bd87343b729e956c21092877fbca3c787bfdc99ceb530f342bc27a08ae7bc9eec51d6f9b202839b891b432391463c4ea0d941f4ad0d9df9d66ace83d8f5d9531034f1300fd6407c7fab6778abe88e7c8997cc252e806fc5dde20f6d5853fa2f4ff86e714123a47c1e477bf130221ee3aa71c7a5b3cc0b09b1b876a7998093660422bb47c669340ced55fd17be716216ac0de0f0dd2f0417fa34a0dd0d1a39a9d53a442e301553b1457d6776b764fc87d6b294812b47ff83200cfa78337f616d2ba5b59efec6a80bef144778bb6b42b9e3166ee0fea531ddcba800039d2e8f12700b6c1482eb857f22c119a82af2e92f399fbc9af7a56f8a457c4df9bab6275c5ac1f4197cf2908d88ea5a8f969a344a42b51a1976e6ed0b361020e50c94de8d446fda384d8a4da9aa1686997edfd8ada6fd03e72cd85ef3160a45301358f937b57b8adb65010175dedc3a5054222acbdeee068e6a0829b45da117756f512bee366b828d63f57054cf91c23ea70fcf2742feae69bee4d1d1759b142f613bcb134fb64db8bae60ec8c4ddcacef8071a328ba54813bbfcebdd064ec7b8a9677b3959e26907ea3131648716c08bc796b09001888016b1cedc298842aecb9872a0d2ed8650d572958caa6ee32fff863d16a25d0ec2ed50b9276963fd35b2cedbd0828308a1bbd45174fce4a98584b468b0fbe6aeacf2197a51ff3204f918bd017eaab2ffb82580138eee91005dd5f2b8040f46fe9aef7c50e06d6ac06567d3922fbde5b210ad164a3ef1fc5e154d9199a45ef665191fd9fb573686d6171aa2ec585ea3f647bd076419a97f393866419c065d6d78941de2c82add1eac6acbbbae8cef7602d9cfc40f8367a21853ba632dae9d14afb8640745efe38ab9ecd58e2731f2c48e236fec9b10defd81e3b476cd1190a480e27cc802facc539529d28b04fc0b17eed117d1a55651f9fc64df0cf8b3da6582aee2957df00a21b48e4d42b62f9af8ab4f52239ca8732fee53b4964f19dd003b7a1ff015442f4d9ea6a035b95124ef5a1aa9530fabb4f7de3cbf932eb81aed01d09f88778bae6fc9ff65e49d152b5451af77d07cb499ea529c6a94162306847c5eebaf031b09d0bce528dfcfc030d0589a683c4277848fd1df3009a3cf327f01518ed44696b448ee144377cff6b7dba557d4e71f591750e281ca74463121354764e3a8c0734010d3f9504d2c3d22eeee64587151ddc4c5eb3074547bdd553fa515a49cff353fc11500d9e052f824728a4c5d5b986a1f677247d83ac3483106a0c02c11515105f217c73aa1d2ac2f1f1f7c7e1641a289be1e446097aaf66712d110f4a6655b24fc62b91d3239ed954d04711521ec0b861225c2a7eb915c49fcac6488ecb9b83f687c52dbe1e7210974dfc6dd1ef609b73c4f3f18a7250e6c1c99577324bcfc97cecb21016168eafe3f07ea106e0e317f74f1062d6ac471400b3e562e1efd9cd097d5a028114dafe5f42357598f82f7516491d470a6fe296840f1dd241bea1d7c3c326caa71e3e4434ca8ab330402dfdf73c8166cec309b37465a78ffac00f2fd5457c32323fa2cb8910e32175bec5f6c3afa487c8b1a4b4f83eea61b5fd0c1c658bc500c77ceed9879da989107ce0aaa12bee74a3409be13a204e101a7e7ee79c1e6afd10df0ab755f845b1a882645fba37c7f40579d6825f963b63d04a4fd9a185d1f1b56fdead1da91d61e6d63b5e355b97ce97623edf92251924806965389d4864a45e34520204399b6372824bef3b1fc6cb0006b940f9575019d1e4aa4cb7f08addb2374f00342f267ef38e7e59f40cbcb3e86a30ecbcb3480b6cc2045f1804aa66597fbbedd51325791100bae687a9e14ef9988c2c04c16ac1f80b5db7e70c2e05fc1480120e6e021d75e2e9dc1d7e9e63d997b348f90a1c051ec79c9d4d917d8343ff84b708c72432c73bf284dd1459bc306f8f88c215c79d86ffa959721affa7d547b124eba6f380ae14bd26f0f27b1fa7290733886ad452d7bb6c337d2f1c3b5bf4eda0de93d7ced374320a7da16d55e5cb02937292a9ecb901cd7396583c057c0f2274091738e5de633977ada7962693606aeea914b033d6dbb460e71ec7cfe19f37e995b97e8e76eabab7a88e5d5959ed268d547850efd35009439508255f31ac1445aa02118f430f9d1095dd2cb8de7c1eb89c47f0e75b68b464cb9fbe7d153fa1d06f795ab0efdccacb9c1d6a09cb143ab7a908fae4142c9d0baf69fbf3355ec6d40da6bfbb1f59292fe7d57e15c7be62d1a243d5aea6a3ac8069f0428838146b97ac11a9767d8da3869b8dd2a47b817e4faf81e90dbad6ca0a22bcfc03c7667862724381abb1801e16e3cecd7e8f657679fa489ec9f8cbddf30253922d895ed57d8ac3ad20633a8329e51ed76aaa723297a8235ca9078cce81303f6ace27036a301a19979e3ac4bb05c908583174b19af1e4978b76902186fdd508eeae485d1fc34bcea5ecde25adf2b811b89b972997cfd42e93f83a90ecaf183485949575dd7d446941d4f865403adac36070b8e20f78a06fdcf7aee3e7de224d9649b5528aa82e72d21c308d5e2456a5b67882e5ec3571e2ce3b932261d31adb8b9651fc108a3071c08d2da3eef7543f237b9a39144e6f10d28b925341d72964cb41117c556b73ef72ef98b2d7fcfe1a1040abe6710bc1804eb153806f307772be129cd943951e74520a18bf037b7abde3905bf5e9b390baac737db0d2262b8cccd39b1bc14f5a86c7a556d459bbf0b00633526d66900347529ab8ec54036e3b5d4ab54bb6e04faf398af9f8c106897cdff13956cfe843aeaaeeae3bdc0d6705d94093700c912476107faa3423a26ca8d892b8b90c0477771a3604a5538e3f75a87edd92aaaa0263b54d118f67d8c3bc57dd769d042cc82b0c3c65329fcc1d1032c93ab9787310ff8ebcd51176f0b341c69b1c0aa1a85e51e7c677eba9102a60e0ec52ee5e3377d104939fc2363266be8c945108cabf6071139de2d759a18dec18adce3844345e62809c16ab90e604bb1190bea067baf614f8894ffe98c96f3c43d656a012bcee38689de3d36c53b4c0bd570bd961e14ac1fe5166694ccef8d9ca2d912db0144edd255fad42b3c29f56f8b0dfbc9e7c81008dbfce1f5ef94f4a137b28e70684a8d920aa1d014b7bed042a65e24f07d3c6590d993028b7929d178887c2d6fd5321b2c045db171ec6c553bb3cbd9c842e3f55e6a8338d3de109c9901b08037bcbe3f26cfa8e8c13eb4fca13fe18abfed4147b80b48055da2dbce792fda275693216208e8fde691131b5f19a739a825b0e6e534385be8875c0def9f8f63734b0d1e1c58dcd75b502e21c50b962ec2b8524756698e2962ff6e0968729ce6f4936f06d68d17cf878cd44ae70d694b6ae625e503be594b05144d60c1a8d4df4bbe5d7e291c26412ba5aa093d85bd29f11dc03285b9364b3f649ea69398c3b6b92a4cd67c9c84c6984913df310aee24f5eda5d244c0b174826ec63d56d8e5f7fd75a1b24964bfea5dd5a65f5a1398c6f9d43b26d98b47816ea158b773dfb82d691f10a4283b3406fce9d5ec112629aa7d4014b2ac6f54ec649aca878313b6c18c850e0e91568db6f5e427180eb93d29e0dfb70845f3860ff4c9a03ffd1b6e5ee845fe540d6d2974c9531e65ab533fefd4f1969a3eae4776afac5e435a6d5b500ce0663704d593bae7b520576f6aae46ba3437daeef615bae5b16924237fea3f5ad2da0a00266913f198d15fd395f4d910f61f5cdf716d4747775574d0c9a79752abce5f97e5f5fa476cb601603bc00169e5b192a896daa6457cb797eae12fd2a4c9b7aa348ae6e889af22ceade28c7a4551931ea2dcda42502fe41fea4ccf8b91bb3a7c5e8b986918eecc2a1510b68e03e8485386b9e8c6080f8f7f5763231cd9feab488e7ea6e67599f6a62e5ceac7460825d3acc4928bcda9fe38badab720ce129e813cca8f0b303f56c5520d75b08c3fc0018d73441e217dd4de6d09e811ee8598d8f1f5ad21d95d50fa38d8f3d4370dbb7fb15c89e793f997c31677527acbc60e923696add4c16269c74b15e19ce6e05ca0b0c6d092a5bbbb992fb972c5e662844f8303fd9e98ed25bef16adb950c564816f468c489d712a4c31136c58dbed97e835ff418e9b06c0943d43e2e3727edf23504b8b24798cd07d37375c73cc59971c035bd8c40b84d88f85c06760dca05dfad5a1d46567b19494ccefcf44d8b30f278ace6c42e1130293f016a2f83533c84c27d2cdd30eea5ed817c42d94a802e652f1df65d1c4b826eaa6ccfd72264007626d66e035173e1692413dde2be34e06e561172b395c7d2cdace6ade9856cd0284d0e3745529b6a50a71e34ad1329f562801fc26425269fcac9178af306ee5a1fa78d3f0f9ed58f188d03cda4e3dfebe62fa18bfb34e847fa8167fd703158dcc0b8cbdbeea0a2ee35486d2f469ab7226dd73f35c56f7d79b158607bed9f4cf6b00342a45f0294063b5ba2d02eb250476df951367f1f669393d0896cc7ab2b266219aa1edd2f2945af595d36a9d52bb96b18702464df2434266c5b669adf83ea5b6e3aa1e5a0c34ae5a3e4e9644db9f6f9b72486332946b9cd9e4eefd3b6e7c10073acd404e2028492ddd26ecab67b8e7e47e6b246884eb31de8ec6f0edbb73905cc593bb77d57611b59ce1d6999f0fe7d6d2f5f3b669cbe7bcebc7aa89882c0bfcac83f89dd428f03ca109bad52aab58b7976e37e5ec11a8bd227894d77cad6a3018265d88c546cd0814250228b29420d0f45c57bdb4c75b275c6214a140009640310253ff4ed68f621ebe155adcd329691249bd066af4e843c00b93ad7b2d76741ea143cc1ae22092e75b5b33526f59ca19bcd088b5a1365977fd7ac4d63af113088b93b5cf7167e096843c7bbc709a3a303ef80b3ed52fb1a8c02faef931f1671646ad83168c4c9453c220f9c1dfd3037f569d56ac98ba927cda1c338b195db6715cf7fe963ab7f5489b6f760ac3ec6b2f8c2732a8f2bf461bd5a71b35fb1c494055dbedf883904c9a9991ba3f24ccbb6868ff67daec2713ac393a2d9ede1868acb7bf19e36fbfe17444ef8d070a5d3a51738bbde98dd842578c3c326eca385bdd0c0d4b00072dfcfc23efb70a7e8632133434fc7edebb1a465815f34fc86469fadb2c49f752c0e55abefafff1872fe9d53362eb40e5b8e59e242c35e7de84db2bad84db6f5861e3b79d792e642e40a8c0f97e53d8acb8e98a79ebc3de1781f99a097dcb1022f9403b49d20c0a7aa2b7fc0deefced3ba17030deb964dd78410b6c777fe083b76e420d496f618c733b5eb0f71cae28985dc0b8dbfedf8c0bad59cc7ff2e17020aa325625b6f59121f4e505406e3131cdd2214bf823fd92d7ad2be0aa3e977e6393583d661190c28db693226f4e4cafe2eadd11be8e8698e42ac8d07fcbca568a13fbeb93e7f9c7be67b22f0c23c94add8b3b31b4a842453b0a79c5870241a09c116487349ff947bcf08856a0556eabc89f82d363d9f842e33786e74849c603a274dc3ad1a358eb903a5ebdb24c047aaa0dfb21518a7236e497375d4c091f27a326a92cf35ade5a412c7b8cca6f525e8cbdee40082176ca4714d3501bab15b5a70e1384212c523cd7ad29ec702822007597a25b1008cda61395a4e73b957055b714646be4817e3b5ba7ae052ddf3a086d836198efa53f715001f04b3631f8aed920e208c3c128fdd40153fe88fa631d7d69711f2f6293d3064200a394e67569171ad7844654192a4aa360ff0ae265e7ab311b1957a693763e3f1c18db1bae2d79ea8906f5a3196bc5751d3239ff081001c3a7aef0d805ff00e08cd2953a6ca3067941b75914f0684e5ed1bda0b9143d87075d058162b219520d97f849aa7773c6ad46bef91065c8ec49c6c8c479501844e6854792ab626a3eae86b280d39744c16fe2445d004133a81b427c2fa585494046669bac1bdc9acbaba12ac11d94be00a85b710e4a4c5389bd8e0068a77b788311492a561aea5201ec308594f0358a8a3efa6c93584ecd9717f27df7e5fa4c162d761c1810523ae95a7bee81b44350671b075e74900f4cda11b51b65c9ca6d008435987a65ddf98adbca8b11d187b7a025ca6e3a5c56765b94210138b9b28449fccec605815338ed586484cbafc6683c468ac56c23edf321867c58fb1f7c39fa7f88cf40cd7c9e18ba920238b6cb0b4365918a924c9a6c34d10f473362ee3319f4addbb3af20d415e79c2dde4f5d47be6925e6354126899d5b22f76aead11bb1428311e7900681ecc9ca2c47e043c4b43c8f01dc6959f1630efd90271fec98c753539a63d9f74ea3476328fbd3462b2dc517020f2cfa4d8ed0e739f3690953650e649eaff0bbe24448b148808e2e2431ec041256f2d344278b2a1a5530eef3925b0044543f1ae7d6b6fab5607bc356c999a0583a23aa7f34260c5cd5dc642157226db4d92cdc02627887962300cc6afcb431fd422748a5c089d627fbd53385bb4bf417c621c8ddef76a0144f871307d3250028f767755fd09ccfa2508323c6c6bfdd95a485a72085988d576e775ed654d45502df49f8556e4741f65b4ffc8d80647055fac041732cc695860738767f89aa78b384369b2ea172724aa49f8581f223f580503a5e7cede801c9a33223a97a8db0626e9724937205abc7b4dc874b23e5b33d2f5ac6e6cfe6194ac9cd2cfc2e66463723d25c2be7e83495126fcb921b90f3b51d8a4057dba8252e01715b22ad1e825b2d510b9f0b0355db46be16ffe30dfd0fa432967718166da0d48676c0ff9bacf6147af996e33e56c2d933333a824519744cb88ef08e1939c6c87446812dc70c2f5eb7edb979827e715235e8ea001f8f0c9c85f1674597d0c867a3930a3d89ea2f956fb1b0d4b51710392bffb76682a6fe1c01868746797bcf397b25063ac88d1e40090b22fcc167c9177f3e4bbb58a773549417f598a88203c565c31b296e3e23e8efc4b7fa8cb7c273986e4b0788da92cda76a5c430b2d8b93c737f1146245661488a418d5004e23d5de576252fa87840ea049625089c38f2b0a4731028cea104c3c72ed95047615c5b9c036a596f6709fe97aafc60c8e391697bc83fcd475491973f8dd437f75c0cc91726f07446f7f09e8c5ecad7bd4afdbd55d8e09222d380195fc91e55b944b71ce36b681ec39d9d307f4c10dbdde19022bf4fb315e5b068e0a47b1867f1bde3dd8d2b31a769da585adcdd5efbcf4a0130347717c7047da483ba1e42bd352a3b7180e0ddacae30ca8411ad15a5f5e6c97c42099f34039ddb68ed1d2de3f80bf67f4b46cc9d05335c32da15c578e63a416d5451b9db77937606ca124a6abef5dd5d58a7af07134485ed82b1fed314c7016a07e9e83bb4e0fce3ed7828cffe5a38a245adc5693d06f01aa7fc2243161f9218c95caab35028d896a3c939623abb90d47ea3d031f6dd0350b67ec0474ea67be0150491f0edbdb185a9800ceff89c8e6a8024300fe54938163a94596e32fe2766779c0e72c221e0374b3703c7cc6f89ead6c965416cde16e1a0e76e1667891cf27d6da09791e81d322548ce780ac70bcc0efdf07511fe283985e27ede60c9c53a7303d8fdc19290fcb45fcd7f48159c84852c6229694bd484661ffc349342c8a504e91803c59413fd64c6714c18eda4aad5ef2accc729b458adea76a793869fb8afa7fe58327efebad3276a7cd1b1ccb56db0caddd02a303cd9fc7ea5c607a2ebefaaec598cb5b9cb7bed097027047d3ad91bb2eb08cfe09786a064cdcf387ab5217c828638dafd95cba1dec47d482e81947a8352d58d3dff1080c97e03bbafbb0197217ccb5102b04ec07ae8391f59402c77bcd3cad4b0ea24182d34f7e39a53ec85698bb8aa819171e34e6a0edc95ed0d7dbfbc5d58e1df1dc100913052c3166ec1cb618559f2bfd164c9c853126ceec4070c9b016c39448a35d401318bc278f4c6c76cb5e1de91f9df8d61aa4336dbcc9e33ee5b912fc0e5c128037ff101020b1ece2bced49dce37ae09e479019c2a93cdc624d05a4dbabd0d6d16701527483e34701d44a4b8bb277abfbf43bff561c60023ece44a1bc87c7523c8b67a7d91faa23dbf9bd4c7ef55a01f609ee0eaf7bfcfed951bc31240a092ec88b7a39c95cce2979148d743e12ec8c956ef16e572fd9773cbfb77a9d9c5d117e4f7f30cba21600e20e03ea5273f5f1e20c8c46d6a1bf166dfe7ba7aea58ca364c0c1b468594b501ecd67d7427e3ddbe5c907beb238758376f850dee08d5f8d85c487eb26e935c3363b0162979d8bf0a58ea900755bc5655e938047b9bc9b77e644180090bb9cff313f18b4d837a8d82a44bc31a67475652eb9520cc39a0b089129bd192b3548ac17c0f5f48db35d3c7cd1867cceea4e2aed510d52869076e98d59be5f81c00173f1a8e14b3f7b70c4a41f50077425185da343fa448904a3c2e2be63f919c58efcc6de22e175f6a917a91461fa208d9ba559776107545f5b3a993ff40f7baab8ee9e4a00ddb78cd2de939a037e5b8a9eab16d48ac66f0a66f9b8c3b8cb30d947f181d4c5678da5b1c06a987cbbab84eb16e244bca7636b8ca84a34f853bfb803af7864b7a980a9106637f515d89be3488fc5af40d2b6ec95ef5479fccfb0b1b3cd8ae220c81700b577029b16fdb00f7ebec8fb5f70f3f44875e07a0c688c2a21f6c03646efdb13689cd171c7547470554af2115ea99fea6ee3f51f7045d98d13d0204872445248f37dae5f6f026e6e94dc4cd988a44438cfe09c506f9022415203b500ebef06081dc1a04d58322672051bdc3b248a69453315dcf5526eecaea6388447fb197fbcad11b023c80a25e26eb0ac20798297796229bdf66209c13cd6179703e8ea43ca6c14e4c908b2f2289842c46ed0b5553c23c5473be4892853ac47f51efb89dc9c22734628605315aa4b7a2a0f714b2bf6409183ac2316aa5bee71a67e7c1fd29896d5de26171517d24e00e8e9a46ba10f7f34783266d6cebc653cb30db3d3ab2892e3b2ac771f7f076b7b06e6b13d40efa9572eb3f4f41cded95123b1e7cef1b3dc45cda3c69ad5b068938aeddfea8fff86a1ae1816961c2a1257fe5462372ba13da234f14dada2370ef17ee5789a17a5ddbbff4a14e55706d7f74cdd6a37e2597da2f18054816c03253de9b8c2745e4a774c2930360854dbf1d9163448f69d4564ee0a36233dbe7c751ed44d06a1ee571dfd35b1c4279b1229a46441449be4ccba2e8afd010a1d0ac53d468c8b494f3295762ab7056cb51145003ceca54f3f56460976bc38101315df42475d9b920745a75e102942fd29420d97a81db539374bd128d85b0e76270589d4dfa87ca7a0f71d5ef0eec3027f0c4b0eafbcba8253142333b7c1cc65e2428c9b175577aea2afbe1dd1f0d0a440d6c51059b1fd511c1704d11cd8b904ca34b041f64cd4d093d75144bb16b10af30a4443afe4c6cf19bd3caa0e871f7c6944bc6b8576db34fdd69f7ab648ad5e200f904fb83d5d23d26e926795b644f447d87ac3cbb9d40367147068cb6e0dc54f4d71dd7da50977cf93d0b0b94d7195ea5ab0f1d0fe06645af98bb501711a69092caf95040213f09992bc2c8335ee87dc30279d9c2eba805dedba0a61371972d514111e573ec3b8b7d51f84fa5403f1a5c4a76e382f387ef858c30ff1a955083c6d61217e3f61f7b1c2c0602793f8fbcb7cf80cabebc887b3a26f6bbbaf1551c59f65457fef35d410c3696610da14cfd8c2e120fd48b2c3173386c7c732a078f812e633643487785a3fe041bf12a19254fd2b5236303d59ab73d0ca1b183fa35d2eab9235f89e0b1a9eee973c21e56fc5949e495f8ab272f7cb151dc14b3afb7d5c7e0bf822c3b4d5475b118df1298cb5f102ae803e593584a11c67c1b1d9a7df022546b79a3e9b15a4ef56bc69b411ab7b1f289f337acbd95eae51213464cf0b8a69ea794857e9611c720fd170d027309abd60c6535d5b7f6b9383ebbb229d8a5a129f471456c64217abe3d2f0c3f6cbb6a3fdfc854a0efc2e93a4272d5c37e3dce80f28e682593ffd637bc9d0d6a504379aa84ab1880cda11755cdb745ac59e76b3e024a624cbe037627ebdf8515c63866a09b6bf607ca07b03551177647044923aba433c8443ad2b7095b74f7c457109dbc74b981a86d7d40334d01ec25f5c9746468e90eaea2f425568bebf9e85b529b48b0e22fe5406833ea42151bbbc6eed9f2b0c8a9ee8ede4d89eda300147b74ebffc0946530bb5f27c4b0af898ac02fc0d12c513e7646f7ac3df1388ebb100e1c2c343ed63d66d8885d196fba259a12b58a3c2110f863e6adcd572b0a5eb17488687c4fd74dbb4ad20dfca421eebd2e447850a6e5c78e11eec26fe90771e84edd3f19560cf4215c9171db0b6578a1e8fa361a510175fe0fcba7ac010a872d03671a9bdfcbc34154430324f3d945c0c9234de9ce18766c46e107abe19820e828d275644bb82d93e8734c7afc01c8c2456c2a5f6c7f6b214dbb4cd02914b1b2259bea033836b5817f8ea83d9283840ee43155dbbacaa6e58ab6f1c94624cc03902ff31913ebdd928001c0fd45b30a1f3c2f4aff477ecc01945090f7a72cd264ef0afae66d3c186fa089012a8434cd6ba392943a81004d0dd134a4dbeab1674e98a99c2ba2abf8514760f355ec7d407cb117ac0df5f3ac72f7cfa7f68f36ed3923a8413962bfffefeb36120fdce0f5eafb3b0cfa14bd6cd94e8e04c7e341f6bd268374901bec81a41284e7a8d424600ed859317f7be1f0996bfc55d0a556f63307a7b0d04cb6400643c9eeb170ac1180df1ea41e8a05ea4bc6a7159133ea7e435d91807a63a19daef56181da10ec8cc985e7ff47dd7dcc68e4face9a2d70e1567edd6deeff330cd6be086b53636a344153418d9bd4cde9595d73eb5be08ee1f511e7d3ae7def0035f41ae5edb6a99a90cda7e97b0e7af3c586aee646fb98d2978d5d4c597e4a3a453e158be9a92f32305ba79d75e9196e16071859fbdd2355c6678a42406eb8fd7cf284e7d7a96fad9893bd041d030daad3352cc0db13b2ce0a271b5023cdcfec55c7e5744845ef3f41fc54d7c0dadc4c75b77885752dcbadcb426cf0542a03696814b3abbbed2299b50c0b6311df19c5760468424a99d29782501bad51f1d8071c7f7c08932dbe3f7a394d40709e3aa87c829871dbc67bfde7b683d1bdb3d237eb5eab156e85f6830a0aa6fa7d86a357d1d8758ea9520c63341c5227f7fe769e7d38cd5cce647016dcf684fb892708761e6c8c0323cb284a2fc7f2fa8120398d1a946f391367cf6d6b9373be340dce65cac53879db703425036fe2d3f9c78f966c07ed54de0e58f95e580fcd0e8969b96f69275d510fd476876aae3eb2630d4ce9f9d41a9ea6914cfdba95a269585ed364cec517f4f87dd1045eb1b55b6127131ce0c004c5ef2ccaf241c1d8e4c93266436c9e5467a884a702a299b25570617b6d632dae04367005a473f0daf17a78d4a3d91f7cf9bead7b2adcc2c020ef40f853e76960aa2aff8fbcc7cf232fda9690de8ad50c5b994ccfb563c9694e5c4a2c78e42fe7482b4fcb83c3a93be078203d8c083b8cedd6e7176aee1a184e35e15a44ffdd8c6eb5d54b91ee0b9fc3b18a3d14c7cf7920e600d483c24157a10abb343080eeda7e6924727fad82c93a35490201400d4bb5452ea9c886bb91d7591c3cd41df05c0793b1e2a5989b42c471e14eea07818eeb72c4e981b1f561619f98c6982d7e8b9af4122e9c15b196f2d5f7563794a8bd540d682647ca9b40c05cc5740545e5d398d8a988dbdb622035ffdfca626e0f518f638ce29336f9ba83ff06c7a3edc2de81dffcb3dd2029991e5e2f1e02fa11e5fe23b790fc9dbd392d14f133ec9b92070668802228aa744c0c5f49c381df4ce510ac5cd3dc5542371c2d094b47b5efe76700e84646c0deb39091d44d77643cc9678bf10dcaf4155ee1b5a3605df318fa544779a2a009d58a4b94433e4c5f5e1d734128b13100c2fb0e3d743597a9b9ba2e9ad8c9ccfbd52a8db51af888f72d5bc44a4860b6f1c7a60222e01d7d605e9186796a2e460d6a0ed792b01eb5e2170ecb25f49eb54d9fda5e147b9a87ad542adc71c24273b510b1c9abc7134b96c7910862a1bdc47ab8228270ab2f3ee756e0910265990e9945bdd47eb468c29babacfc6ec4606d1facf90fc5f36e1bb4b35d54a9b8a44f10958d787a0ca1a3574f9d27c8f1090792eae86682e8b9a68c15fb97d65ff6edb17c9b362c343076500ffc0affac2a3c8afe4b2745ffa457d3db35cb26b003430257818e03dfa7a41c794426815a36645e63cbb27dacb0b8229fa67f195d5be779d2baf0af4379c52317f00aec8fd0278397d4a8a87461300ecfc8140cbc53538e6ab20e7d142941fa78aa189fb169ee9116e06a34eb3867fee8153a9f519c1fc68c0127fbc628b308f7bce0196386321d7d9987c18598b8597518533fb1a89498b312ddb9ee0a90e521b2e1f81a979a7f184a71dcb814b9c4f33bee6c50db6aab7c81a025d04154059326aeaa5b10703c937dc8c5173ed4b7ef1a6cb3c3d6fa4544b81fce316f84e0b88296be89a35bec5bcdfd390779a1b8c51e6e946f1ddc1ca8309d2165e79c1cfe414a833aa2d5f4fda57fa72d57a92e11c2649cc70288881385b8be024c1200f10d2ab6f2b146ece58ec07ded4b43ae5190df1b7037781e2321f2f28aff7f332d20c7c82631573aaff4704bbbd719b011244ebedf2f2355338fcc7d64844c3a0f36a21569b55f74a9710f8f3d8d83b9bcd733f5885c32b3d149a5ad137d016c03b93a4d11aff8218e8eeec6d6d12a41d1441f3df040feb098ca2f003c4c277fc71300cdd2a399a7bb98ae711c4465eedad561169b601fe1d69bc915337436bbb5fe86261112bc9dbd38cf1c7259def75605ba0e0e4beebe3728f46a9d77a7c66cb64ad4418ff96a1ff9b1277d73fe11bf7f8a92bd6713ac171c416eded9031637e4cf57087da8933035f53092353bc4938d43332d44074212c020a07c1ac121b404743cca6e62bfaa782bb6551010666ed9846dd2653206a6df229e09bf7a8f6d8fd9e40bc4b035eb5a95374a97349dadcebea1413d3c604fa3c7b5ec3997a5d10170eb413319ac8f37e221c72ce0c0cce7628bfe4e8ef579b87086a80b911b6ae3d9b10f1bf769e2ba93046f63dd8668ae107c6e2b922cb1a7bd9ed1c7ff36a7b164e3c9f1d214923d285db7be6344fdad39011526fe7c83ec1f5cddd14aae23f4b2e2165742332a4a02ac14af1a82f84f4ca887f31c6b6ce0164f40ca0be85c28343a58aec02c075bb26e2ab87bc6f51edbd14b02848fd93e22f48f04ab5bacb6796b158ac485a60cc8124e5d0f9750966719b2c7cf405550d5db3d33b19eb249f2e2e15dd7c6a2b7b437142f3e6aa7406ef063c545236db2af61cfb9b717f93d214020aa627579f6f75b008180c7659763e3e28d8ebf9efe0036ab19146dee1a84e177f30d08984511fc98069f142825e662a383246b457d78a873d451f70d6cbe653bca2ff68a2c847a3f20b1f74b56470b1b487ecd1dcb8965ae7e0849c39e0e3a008253d5cc07df728a6291e76bb3363bde30263b6462b2ccbf78afdcdd4924ee5ade110cda817363fe3e974ae5c7147350ec835cd5dd756c2b46a13686d862e0af1fd0323203f0dd0f373ab865fc724007d04e97ce9651b2768a94dd6cd678bf61da29bc6f19d82c41cf04b648edc030878dc082db17c84e2596e347fbcdb6e9378f7621ee3d8a001a788dab2af59eb34477819477ec597dccfe24ecb018adec84c25df94bd996c70dc62e2d78be5e56c3101a43218e85efb142d2623661ee37ddf539a8e4987f0f902a7ea3bea29f8987f9f3255478ce1286f7641edb13c859a7baa1c754d4b3385627e7b4694cc2ca17a794a1ad359274c27e52992ab8ecd086652ecb2928c3dfa45101c605077896d67b874e883f9384d85a4657b1cbcc2ade87292abe0f31742f18555f1e7d218e59183382820111c15d1d87d0fcc6e6c724b3297cafe28c843af04ae612284e0f13f031f40724cdb8a53acf9b5824bd43fd5bb8276b6d258e7c6b5b018c736e97ab860b099414f7e96524662d708fb01fdd035db16ce99d01480c1e27f9e8f3c6645c1749b55c50d2018ce40dc2427fb9282c82b140f2737b42350ccfc7138e09f2e4ef1ae76548e0feb6d192c9f77cbe8349af8d7412195aef889f7f806d8dd0bbb31b13b6ba40b4d144a772f409278e62dd6cdc72c32f2ea4795eadc26183c94348f3ca8fd5e8bc1da8fe14dd1210a73b7a22f4c97005750589c2d0e99a00421e093185ff42a17538761e0ee18cb8a791826a8ce4c33cbc872c549f827173d990862cfc618afb6eb62eafb7adf39ffdf998cbfb51174573ade38c5009826f0e6f427e94730967071b252ba59ec12718d82f9fd69af6b028ee51e2990b37424efec08ec4906864dcdc0c1a5f307ffe96a1b97e852eebfd4accd9ffe0f41aae19c382d6234602856e8d45e45b0faa86d60ab8e0ad99518d57cdee2cbe50a6f2fd51fbfd26f072492a8355121f98cb408567c06eb646e200ee762101879d66c1782eae6c564c3210af62dc3c13484ccbf35d426115d3f7c86d39f506e356d48a08be2c9c27a5bc7c4bb02dcaecbab979ce3fc16062ad1d7452adecb538097acd3d84c91511999c0caddfdc36f24c9bea6493c +MD = 661b576d9751845a0dbcb2bfca1d1cc2b556e22a0d671e35dbc349eb51baee0ded828f5288a01d700509fca206e4a39815dd85af1b7d706da78abb8e99701129 + +Len = 92896 +Msg = cc5a4209a6a60dcf12621e17150b4576b918732e0ee8d9ba6ff94ea6065af1a4936310dd68a34985b81aefb212a8b06e29c6740ad67487b66072fb4ffab348788d0f36ecb838fd1316efaad3bf78c4a8114b30f7b00c529fcbbd75d2a1336d2344c67adf9d4d70a1b14a15212261cb4df90f6f9ba298809d384184d604c0a7cc40f1a65e20caeb581391fa45464c0b84697af89eb7005ad73066ef032943409b07f680104897b65fc32e1fe63022cd76eaf495a9f42c28763a9480021aa57eb9233fd19e1d9d19df49874cadeac9594a03e50c64630532a1df33fd7bdfccaa4e1c3260afa7c25c002e064b417b2bf7293db526760b71bf81a6ab2f157ea20b817839f7ecefefc6e9f911e34ceb2fef3b1fccab88f459193e1765de79010eeb7bc1bb5cfdfc0da0c33212db7342bc88a73192634127a686ffbac7d24f6ff790647e205889d60232b56170fc6089bc0c96fb70164aab3e4fec183ad23ed147436338cfb33886b8c4e80f930ebbc816c12f06cc8b4a880bbc2eb827a8ee2ee54ca0763235b413159e84c3e3d92b05b2f09bd90f8beac7f414ed22f41a088eb9f344c0b0a6a2850308b006c824594a78e001fca2ded26fe0a150df0bf134faab80779eb1cdade56949945faab9ed9e50db8af8eb4ca988b9a98076d2f41978a33a60999d737b3a2eaa5956f15e8e0a22275e54549d171b6675a56fb3ed6013896b2838dd60b48c3c73277305dce494d60da4984498c62ecf4de65314a2b0d04559f604d75c01e37aec253f4efa984754d5854d23065bccdc786ba95fddb2b9bf4cf384f42f0a48d05c7c413582522884c728fa58af81fa75405df9fb640ed5e08e47409ca076c2260d5301203ab9414e2bb6274d5bdec282ebe4cc50ff6b2c8e6619c03879ed5a6445d30878ec76999b48565c69d21a2bebc227a8c67871c7b21b918d2e801917734d24dda65e31385167312214dbde3d980d4f18c596c9ad35f6d92ee87e9f01396d6d09105991275ad06e00b640d201711483a1b5201be6fd3f162bcc3a2a209fecd71220a43e6d9ccb367fb7c79d7e5f1eeccdfedf0e7bf43e730d447e607d8d1489823d09e11201a0b1258039e7bd4875b123089b4b73013a165ab710e91fec2babe0ce4e221f7096067d775d5ac4165ffc2b3c1b7ad60b7d279d8db96e0ea27a67b53d3ca89bd0f65e0c05fd9c9daf25f26e002942adfc4dcf5b2d4197539949e388f19b1c8e0b08e05c92df5550fd0fbd73bd8b4bffbbf3351e01700bf5b7e047e1523325000814b5f487cc2ee3e66485c2dc0a3ed430b7836d700e73fce686bc48c8cb6cfaaf62045c4a8cce60546e71e4c36ec33443e0ded1e2e276710d846a46bb2d9883e83af61d45e7dfce2e73aa60dc7f8128dcb870d1bfb5bd5b14227862931f52a49be3b3bedfa506365cbc58be8e0521b7e38561f5704fefc2e2a80e25b86a4264b0a662c77f8ded9fc591a18740c74aea4090d9c55b78b5ae615e561693d60fcb0fcb2bc08f693c115339b0425c8ea5c8db21ffcae9f8b728788c75bd8a2a62e1a19a373276ff9b95edfeab774922da599c7ffb8b82969c370f7996a20630e2af4c5aaea59c17b0317b26bbaf6f4b90a56cf4f6908f1b0de40f6edf4e70ae383cf955b89f697b26efe6fa077036d16fb531c618627650b1365eb378482e6d0b9091d17baa45f2a3d714c2b845067b2190d53e8888a1fa3135e5908a18aa3504b4fa17224d9843cff0eec6f5b347124b3e3ea46f8a76e434e98c4d3d474acdcbaf1e6fd311ca3754425c4de744615f98c85640f4f15fd5635b3c31b85c78ff0789e320b67c4396d7d547a1b57fbc27ad3503594044c3946692db8524df9b91604b3374f5186b2803b2950888ecc035358d2f397a0b0aeae4965291a8581a4c80fcf5b1b56dabb47de030cb8814d650d6d8c126cbcf9b9f85708a9d6d505ff80ca4112021016904f067fe32dc7e643f381fa1695b16e07bf2276af19b4fd15daf4b6e095e5f0ede0250e984adb2d4cb046ab74a516b4046d3c3d9d559dbd8420ffaf6b4970c030b5ba2d80b22398cbce2bfeb10d55323c7cf4dc190cf7edc71d4b99068f291af53a465b20d649af6da792825051158f1c78fcc096b26bf45b0a78e246f9777797d85a161d39a5d78ec72ac4d6f2a01130ebb4899ae86267cc830839b0faf46cb53a55fcca5ed0b7cbc74534b974bd6ef64fac959a1163ce781169fdb9162840c9bada7dbca852b6910282607c59a60ee91f458318bff88efa201eacd3dd7bba31e447f768c8945a7b1362c69413f26785c52fc09b66893fcf59b6d595a3772faa413f1853122e29e67456e5a5263b1f68ebcbec9687ae37740892f6832a93278f5c204f0027789b6f9fdf2c0412e87ceefd9a459ea5d02c64c7638e00b568285d8f8c09f47b1c2573108c28557c7326a4752b9a184387853e10891ab2e66ea89165d2e7b48f715e9d50be68fd9573a305ece02897d33cb85c6e741afe300f2ec779a556a4c720bd4aeb164c81205258afcf689fa1f7885c3c5bc50d6714c2317c3573e559d492b80849f461649fa7ddfe87255dab02c2d77a42fc70622730470c23bef2581a5fd551f809463c55dc997ebe96e13797a4c082ce7ad293c9d1e603cef72c041ae0abc46fa5496cf57921acd04dd8bc28869de258d0a2608f1f750f81bcf10258bd91bc3b59097af105fcf566aa92cd37e0c6157c8e7e5ce9819a6bf660cfc7465f3db5c5a4f4eadafb8204dc3dadcf385bef98a414b4ed6ba0ccc5978336b7863de65da919aa3115d25747cb979856bc5050e85a03e49677d56288efa4b4777ae24200401787e22412f34a9f28c0e84656c08118cc8beca0c812426945d77ba6d4c73a453f1c729845dc69d161e5f838d784ff6adf295488d1526e8ed70e389c9dfc8802f0d666e4d389320ce3460b367b34bfcacc3b6272998989dae8c732cea6486623bd54339c54703fac2d8f95b18a464ea314409af0794e10d7eb90feaf7631410225046d213127ff2991112c2cbd3038ae37b772a5090690006009f0c1965dc528a86588061216dd1fbe89331a6c98ea26b72e6de2b15983eee680bda77f145f21c805f8dd4fd365f926364f0d10d6ffb70313f14c1aad68eddfa3b9c3a8fb7b67f45443f962d4364038d6d4775270c5d9bbe6b1439d78bba7bbd179a89c79a685bddf0dfcf39fba8f96b977ebaa0cf9094235126bc241f8871b9881c8d2257ce5a514ab4a6aac5f21a07c8dcc7ff1f5b0268d892721afac167f674696d2754b122a8390844060b0c0e68e9aac5cc63878e93ea9f8240842d047dc5ca525ffad85beaa721d1d834bc7e96e331db9005dcdfae6e97151e2693f15561876450b10dae207b4874a5a8cb129a9cb632d16c229ec04bc0523d46bcd68632e8ca84e216c2519dc555f7ce01717bfe84f11a002172d26b6362244e7159191e34ad83f3bc4185f4e09d5510254441f0e241f029a104ebb5c76c5ba47825150fb534d34ec7d0c46ae17448d50132f459174add4f69fb131136996bb299e082ecb188fe59ff1917e60f0157865be49d236c3368da42005267f611dbde9e33689d71d08c7e2cc48551b46d0a89fc01443529251a32f4bbb19f50fb33924dc5d0093d3503241579179116dfe947ac32ef77964779bf47d337a28c7ffc35703fc11a5ddfedb283dfd48f7d807d28321fa8d1fac20fea03f1ed56f2c7bd2fcd4844b718f5d1923e9ec43333784d95586f762b9fbd6419efbcd9a4caf8fee72d8960c8b7a0382b0e5fef667feee1f4e4cb626dcb61feb5d4dd05745b3d48c757a91d368207a9e5bbca5e0ea80ac2ae9fda727fc7d667277afb79afeebc2136155183e7c153ac280c861814f7f6772c5145b049db4327d6a9bf3c3bcb9d149c2d299bc4bcabc95cca3c2561b4d788d5c2b324b44ed0c42929d055023a09a66268d86cb5bb3889e9bd938edc27d87e10b9cdd5a66aa7c88ac1d8cfeb832861ee8e07fea305217338ad345a6c971ee047003bcb0875edbb603b7cafdded21cca9675d5a74e38f10af62c691fb4ed436e15da40ec3b8cd23125d66ffc2c11d6ffbba8387129daae6b7a3f23c709220094699b0a7bd7b6d8a0af03ec7814843d34d51208d637b997fb93a6061b2ac2adfdd7c089de006f577afbbab0d02c7bc7f05f2dd7551c485631bedb70babe41b4310cd54f813a08e73698856db2d89affb8d666246c3c2951847859f3f42811bba46563bc03d926005a01de738ead545d04b755608a0bbf228a3cac2075fcd51cee8dd66fe482592b5bc43052d21f2a585a9e662c4d2f8c31b9983c56aea0ee6065c2b7dba1b9e4c0b25c258c0ba29f9a20d832d8140c131778f7a5371cc8d02ea0b0827fa9e48b890446289fb9dc266b0e1126047d25e64c6ef751222eb92cb035d3b0cc8b96afbcb7feb40e6b20516368c5ca21e7016838f203daa8730646cd8bb8ed52b544b40443f242488e23931bc76299c0f0232b75b8a9ac4a8834d0bf28bc72a2c5734ad84edd6dee913a8deca0741f52170fa27b19553088bcd93d1d736afb2d1aa6d6a12efc916112e9846e9a76b565da2b6fc19a9321d3af47fe511250e1624363ea076afc573091c5291a0be7167c981ae5d1b2efdacbde2596f28bfacfe2de1ef773993929dd8c31ee678b419cf70f32a73408c7d5c1a7d6999a26b5010f394c716e205f73d860d436df8f12c3757e171650f2b7ad65baff6890993c4f77e380fa6f96cbefb1ce10b50a8dd71468834cc5c1174bcc1885f4a67e49ece59d6b3104e0730ad7ea126bcb410e1b2a50ad28380cccd0ac6a775ab5cbcf437df04ef0f3793b88d6f1dc69fc3b963b5fbe5a5def8ca9f2d8dc2d8629018fdc6300fd25788256e257598a8fca52acd43f1219424ed9353eebde072b72a802045f5ff462f6a45b93f391bb41b82eb85242fc7869f86ad4f13fe0a2af1527cc87ad5dc32de057c01a162add2438185f5205cdf6595eca2fd64fa47e85a32955a2f79af7dad8051af149957eabeca7f83ff206f184f46fac4ab569f9438ef523f2a888011e4044d29608620e4d28661998825818715bd3b0baebd1a17d4b43cdf34ab55d5cbb8f6d84dd010a8c8ddb49e84101c9a2f79ef3c36d5c15776a7d9a2148a38b1a9c5d724a3202f1fe8f6fefabc8c4939e4a19dbe0b469b3d66f0b4f194cc308dc8527576291d862f79faca14f53f0f4c7d5ecef9f5b9b0b1ebb852327a1945516e885a34a8701cc1c5109d56fad176bb42d70955bcd6099c4e273dcf8f1b80e6e48f0dc8e9c0f9be1261012792eb866e7b35d63a2744ade4d864fc2e9b77e832728e1698b1b6260ca9157def8435484d709fbd1000aca473ce9817b966d8861e5fadfe0ecbfaaa95d2539a179956c341693e473f0db5f72f7bea16d6b7e46092f5164b90fe338d3fd443de0599f7ff30ad39fb2f1708ad02268382ef574381777aee88881109d8f4f90ed3224cbf050485b96248e54cced3168ae36b0f9eeeb337603a5dcd26929b87dc01d67957dca339e602f3412a63899428bfb2a59db0307491eb77fa2fc31cc7d4ef8aea668cf711e76696f14a730ee885a02ce1e7d0d479ac223e60cf735f011f25a465951ee654e5139bbe5306495ac80d418d2556898dd7681ac6acab4b7de42b8eb38c995a4c07936870ee2422321a8f596ffe4836f93a4473f56e72ca824c8aae9cf2053a3f766c67cfc2d681b7a2addc511bb0c306ff3eb1b6bed1c4597fc96ee76f6b6e765929fea278234e3289ef32f9239517f94bde3ccf44cf1f4ba470355eadd2dd39d94f97b3b71471ebf6ddc32fbf001c1d49ad7c08a774c49ee4076ac7514271d01e6899c828b0d32a1200f7bd97f8b9b91e32da2b8fc89b9a661777eb06c311824ffc6caa72ff5a3704df376a5285d614f5f5bcfea6d48c895327c392725ea598959178213e09ef59f502e9fd99af5c77f47f8b4b919f80b1d2c0b6833d1a165a17b124f534d77bda0df2773f137f312a4357b0d8fb315d5c0c69b88810004a10fee3daedfb70e400733647f869fc3e750b05916d8a930dd028aa316793162a0271b002d23cdc14145056c3ef422f6ba0741298d4e6cc76554f0b89e96d669e78999e026c9e24f15dcbdb51ee471ea1f2a5052cd4b8e48235a91528d646f88fb99d374383ca4f65250d4c5bbb20d3c6b4c766b434a8e418b65d4f77f6c8d2e30ea6032ddf676557b23e31481f7456c32f01be9abd5dd31f229442dc1199fe84bfdc8929471e6fae4e841380e2ebad81a87c94453780b981bf7574c0ee6184581466519d859773543f0a786bcc2ee2e76a5f701d6ab89f25d6296f8c56c96a49546de3f25f797c30cdf6eb71a5e5fddcbcd3da8a1dae8cf3aed7bba61178ba3ec918c8919e6d8f2a4271f1fa34b8044ae5005bf41a0a88d391a8de78e7187c1eb99087e00a1ab62ae4a2146e424d01182e0d7ac327739badc5c46268a04eb6d36dfca8496a29f818fdb2db35974ffb2edf23c05f0d91ce699352cfe003c472442d85b33387415edcd3c8ceb7fb64fb744069b431930d28ef437aab47d922b759415331062a0bee5fae0d765c363408d29808de9f838fb1271d668005ea0f8efaf08daa29192eb287d8a95a8d0f682a303127c612a4be72fa693bd582fe34fd0f835ca4061d53b23d98c303b050a8697651eff5f3bd43724e6e243325dd390f8042e7a904fd22f56a3583f72fbf9bce8c4188f2a897c5ba0d754721584ec5c9357557408b834283f4f812c07025ea605a4919459bfaed501dc6cc27831b80351764d3f203755c64c52998e6dd493d28c8b0ca7732ad633e68a9dccd0c0a145a0c578445d49c17a1c3103cefdcf53a2cbfc0c50fd77ace8cd4669f9c5ce42640fd9591c367c01c40d8f42765d7ef8c7625bf2f95f127d7404b443c1bdb7061f0d36723f422a9124ceb1f81cf3500d90ee4f63391e87d2564b48cdbd3f1786a717415625f6e1ea2cae3d771b65ef0cafae2adf68c234461fff687a64a07c2eccbcae7758cb4e874c4aa651fa1ba870644092ca30e0c44321afb7ac30a83188d07bc2485035acf2f412711b418b18d36f43fba609d0a4441bcaab05a9bcf40f52c3116b94dca9b7c4a422258a3abc901106ea055c3850e35edeb7094835102cd4213033af16a1402e6e3e232cb100410a27d27ac07e568b7b5a601984c7328bd5249342f77a4026a1df2976b1748060ab154948af1931b6f1dc3ac8f7d9c786c62bbf1c168df2c5bf7578a2a10bb979846db32190af5ef042c2bb9a19f33bc837d5182184a825b7e7dfa03983cd17f6268fa4881d974ab1febc470f539a2baa9a8f32e5ba8f7577bb6c449dd25f3850f1f991deae7791967607718b4d3503b87ed893eb307a5e8f9ab9ba6205387734773a0fa7bba6aff85952dfb05f6a506c553fbfa47f1f4d6a0626960894df70fb46df7275cdcb0262092cc5f112809e50ae231aa40ed4ce819e514c0429ba922fc1486ecb6d5b456e15d3d8d00f4e49efea31396c58415e70c3c850e70c50773c7713691b12bdd566f0069cdf9df9efa4a9d8a06ff3cb79c206da5923e5377ccbe8aed5d746892f07483376724739fc196d97c4115a09accfe825b94d2ce63f38869949928133dea95ec8ea2aa3750bb895dd390303527424e828e5b54be32b1ce16148ef4b5450d7c4558c7b3b317afcc33753b7885c4c5b7762830eda94cce3897538101d51221d1967c1e66705d6707634c8a1417da1ce165105bc41919126df63bbd76fb0cee3be5e2efecf58ba9e1f33ec42d73d21075572e2403950145163bb3897cb09b3b633c72826dca073e02ed3533ea2212691b556ad2cfa66c2eda6ca22c3b7a27d2f1a2141e10783bee1358181d74ab04ef7a65acaf53d2c2966293f2efdae418798c20b00dfd868d80bc3dcfcbf2960f693b92dc01b4a46b4556b78a1a8273d6f9dcbc2e955d7c67bea4a341858d6c9aa105e1e2111da1cf035de152f55ab1c91a8a8076ff58e3306e749258936db30f5d815ca627b45356981f1832c78b2559a33e74709315425059d313fb3cb9f6d566570a118ba14169cb456412da3c57ef5e9f9f0598bd212f476a2c12c99aba54842ef309840df36e6577cdda7496d0f11156091b5877083500e1e786823789f47eae20775b20f2cf2f5c5c72dec117c9850bba9b196c80ca4bdf4c3dafb9ea1d1e8098445901c5f2ee9d18c260e4b4dd8265bb6e24c31056f10c6220984766372a4c6356c3d9f4416de10ab341273097d00c137ac1a54141bb113117850a84aa6bb98a97e4cf082273d1382bcbb3125e36a9caa9373a9af36e96c10bbd29ccdea97014ee030c88ffc715ac1344b0e2997de4e9e2d0a9a3d4d5421be289cdc63cac19094267b7fc3f32546e54f54629b26d64760cd21be44db7be4686311efb2a3b5b727d59f9ec4a7c3684d4269b6d10ced27c1186b7e6c4dbb14addfd43f21120de568621fae1886d65f87d1fda391b68d500d834a630a20ac430d13465335a214bbd4507e16361cc86d2362729123b03160c49240f4a500c9fff4920ab476b074aafa253d7f83d634418e687b082d8663ca74c9d1bbd34a9e9bf2c073eb5ae998235854c032a84f844d4778899105a5af0dac9e9f210b8a94b786432450589a19c56d63b8e809e54310dd070094529a7daaca84ebbcb43d36c33d8e9e9c066e53f1b7d689f82f33fb1ccd9872aa7ad15a125d1159f773cf0f5f87074526dac2f148a621b5fb9eb816c187a1724c04f6bee4d2d85c59b0dc88dcd141aa794c345c3ae6e9cf5acefe10cf99b661f187573682da2e855bf1d23ddbcac2411bd13eff38c87328ae46528367724bd423589f3b8cc1984796bd4c98ccc20dab77104f74c2e962746e7b71e949bfd64b5a1f1b485327ba357289a8243055884c237fe24789b84c1503f4b8bce6c0fa3a1e4177e7868ae8b177dd715aa703d6a5998693d1cdb3749d1738b378cf240c22e84611939759c84e2f3f34b6814b5d4a51bad0be3f79906f00cdeea75367908830b394c6f612bd8e01156ec26faa909cd48325672f69142d691ab6b313fa3bfc90106e0c23545cd385f69c08b280252faa760e574e00643aa8a5c836916a42d27ec2f9edcf8d1ad1365928e40a8a6f754c1a0828fbde253958058fac5c1669ac6561e4b62b2b7be98ac3a20ec827f40021d58f36b960cb8bffa0798ec4acf50cdc63ab2ff6bdf49f0bbca3c38bc74742d43f201b1726cba4f80d12487b8c99665c5eb9a592c3195421aa8abcc606cddfcbcd474095aeaa36e9a1e683d143bb3b6da99ca18fc95ecb7523e344f7551c1980f68141a556eb943d1562ab7650cf0e78dac0be5e4f39477eaf3a16a040a6928c414a98d6be046f7ace1339cb3269521668c2568eb33d6a96a2eb9c4147f1dd56442fa09a42890b1b4274b950770ea8beea2e048193dfa755a594306ad9825c77659d037092ee09a6f91394a68d2364eac54042d76f9480443db08d7d73dc82582c1f3bfa1db7dda6785c762de34c391280b58c10b4f087ead1cd0e09b564f1710e12b487515b198246cbb86717ed77deb30a5a9df28810b1e8462c800cb02c7a923407a8bc5c2fc2cafde5d2a98bb3a7c29b390fa6afcd1207b88380f84295ad4eef9ffedd4f92f09b4f890106bb7ef63604a1c65ffc1fb3a6908d8cf690cfb1aab1f7ca3289e5943e5d1c62bdd12c4293b32f527cd18aff5b6ab4f4863f3d002c07a9cb3abf9a160a930a884d716e2552432c448be4915d7ca3946825825011496d20427435130ea67dfdd224209716f821431d1b99b576a0d7a648632ebb7d895ef5f06daf02e6989a40e0e04349800bd9ee3c9a5589a36e836525bd78d1ad725995359571cc2637648e34e07df808f3d9983386cc609c2c134b70931535198af978827a21e1462969303ec315251a469ccb827f52dc996013d3c99268485a399b2a878a33e4ded514c17ef6cd432c7ab012b9c28d7053a11198912a06add814db2585542c3958d0f3dc6609fae4b816afe84a2ed0be3375790457c864b82b9315f42c467f713c8382cb946b229c5590f8c6a3e2c108b133d6918dfc0709bd3af800ed0fa20f02934e298a98c8bc8d80073857acd2f26592a6eac44352151582edf647ee38753356b270a92171c7b84a67b7e5db8b0dc8e8665a6b2cfa6cccf1642ead80a74657646c2b7073a2607e8696cfdefd6dbd43cb817b132754633c0ce724be5572e4e732b7d4813ddef9489b20da9390df737ea2a4c73cb0f4aaeb3c0372dadb3ff35b4831e65bbe8c049f1e7272b42464e2c2143cc948586fa673153583939042d42c2b76eb50944e14ea772822a136a26dc686b5ebd68c09e83c1ef9f169034019f242d35e104d79acc33b9e64fb25fc86f470acc967da67e2decfcd26cba29c371624f3b90b48a33eb1e261b42290f7c0c4688dcc6cb20e28b39e2bae5c0cdbbe30584476b2246f3d2ee1fe8aa80608adbee4e57f65a1711c5300a1f27a906311a9433231a55f124aa2e0e1730bd3c3905c6c204cd3371540459dac9da7dbe6c4197c6954455740c9a635a6e7bea8ad2b2574dadf45d18f3703dbb7fa745dcb57e96a466912bb8f3cb176bb6340e329d0927581812e0f2363063160b36084854f91a355eabdea42364d1a9b602321be233c0490ed0c5e9646d5351332eceea91dcaae14437761fe38e1a7c388e5d2fe958aa8957d613e4c74e96d6c0379faab34ccf10e2e0fc137a71794c027f9755f99e6b81bbcbd2caa5fcb30b79fb84700473102afe4b776731347681de7ee8755c308d9802570b85479e325a281f8424ca79f5976123ef03500099839233597858349835f323c5fcf55d9c2a934ea8ae4e8606bfd30e6dcf1ffc6bbae645f14436d312c258d70817f76178e2832ef7f6d8c0cc0b1bb4f7b3e551738fa45db9c23e3485a6f71bdcbe94d14eecc06779e4b052cee103bf9897ec2639689222b7dab780784998954ad915d5a7af12a236611d6294aa51d455637aa446ae7a3df575ebde741305f05950c2970993418737536819a7cfce9d38ffd8f221ca22557b792077006c05d2120be33cff0014bd83a4da9e8eb642c248534e3a522252134fd09f72a4bc5fe47bf3c0ef0e5e55ed223ab91ad1c975eb8d4723a16220d41f7b60b0f8e86bdccd9feea1d6c015cabe1dff4db4f96f2ebf10c4a151d82b6f2007139a3155e1443583e5cd199c8d3cd97bd9e0958d0f37e6d8b00e723caaeabef9cfa74472865fc631c18de12a2f72e544b2b8e415135609edf5b32b17070ea25b7e1d5ac7c3f426b0682956f361368b80711eca1ae254d05879d8a5f0a9a3743407459addfecdfd08c4e99f7e8c4e7338fe5a6f23e4f8e22026c5084ff871db8d52672d3ba0b0f442bc14e5531983447441b4fab8810ce84de2c17bbc5c3f806d47cb3a6a1266b26437f44ffb6e9da63a22749361215689e8971526c03dd60bdcceb8eaf0bbb7e0791fcf06fdf564439489e164a72ca06ef82c0a32e203ff23e3cf786557026a26865bee31e115a0c0895e4492110ab03e8589e6c7ab168070883251d22651492b95d399f9303518c82189e54828234ea29896f10ca2df219cd5df8c59e60f1a98ad6f188671bf950165f20cac72e04442373b752a4fc4ac4cd2be70241ea3a614d717b2ff2c1adf135c8101e679a759c56d60b8493a2ee72a86b847585677b5481ab3b08ceaaebea70f1f0b1fc5e154d43fed038fec869cdef9b3572017f20fdc7e2b5a5731e3fa6584b2747fdcf7fe16b7ca9e27ec3291103398eaa2e77c7b770b67f8858c215af4c523822d484f1f34dcdfd137c29c8f673d504606517dc2c1ca4fd24180d0a7fdda5b7e5291537fd5b614e4e8f72a5d8b1ec2b375da5dac64c2cc30b19758a927c941b0153d6ae5a24e521e611246c525ded57b170c850105fbc459fd5821281b9cbc5f9fd6fb1a42ab7fc9cb9b578ddd8673e5136e5b894f7e21964e4b93ec805bb6d417e470e75ed5852b4d1ac57e5a1c83389188480ce752c92fccf917bcff0c1658a6ed30129ed54a8c1018f76045abecbdbbe3b551787fa66c9ee9136240b9c431747ba363a9b2b8363b1d57fb453898bcb7060821a80e9e94eda3f1a4ea69a7a7a81531a42874b670f7af4c1603cd6e7cad79ab441f069bf1e0b0174ba525a9046b44429bc2242b816c583e7b26715647c6c50482866f84c9a097ef1f1bf4b18ee48e3e1120c901b2c19f95f0572d386329717da38552416554e0dfe7f1dea88f3c7e8dcfea6b1f4b1f0cba3e3e08fc1900057c6ec3b6b90d2514516dd2eb744d9a99979ac7126d94ad28132d820a8bb1700a6bace9a3d6093bbaac776424fe112769c53d5fc7d3d4947a0984cc3bcb73a307b1259e217fa0bd5a58ce4f902e220a757d7e5b913955fb8b050dc3a4a5a7c184b6a18b399c1bd37dbd3a3c37edca6c4528276379875d0be16d8e104c0194f109e2e858f216c2a7aa4382d322214f75622ffe1e86a535eb06aad05a3bc8835c1f9dc1ac55d3dd5e695270bb58b3fa4c53f8cc35c07b25c582259b4a7ae0bc2a4d4ff62f68bcb4234252ca9de18c131aa0ed584f2ff274bedb45b688103387821c604d8a35b98f1cbeab5920c692e206d2756c15dcf06c009b71ebbb05a82c8c13388f65c4b3b57164c5e5ed0eafae3970f7ce2fce5e53b34913008b6226f272ba3f84671b906f4bbc0836abc1cac1db02dd47440d2572fe6e92bea22e97235999def339443a05d24fdd1303e8cb6113108e9ffca22b110a9156eda571e2056b397ba5834797bf2da4aa459d8a99d70923729e01945a78ff3ac7553f33efe1d0218063ec2a91e48544d89520af1e6be6c2f10cf8eb99ee04f24dbd167da6feb0d953f31cf70fbe01b5d0c8355f4164d27673b08cb0cfbc413f50efd256efa632ea5e1dbcb6f893ca81f9a983a3ea0cf4c6605363eae62bdfac38b11cc7b21f7edb07ab746d36ac072fbaffb38201a9753a20bd25a1c58106be6dcc9cd7d7b2bd34b863eb26b051e1487d916c056f847c5a1bb67bdd5406ddff5708f98e46a7177ed80fcae84eca8053a92857331ae532afba060da77b048df65e2cdbf4e746b33fcf75b8bcf85e0bd8a68c1b14eb13bfc06374820622c13d2beb02ec12a2d6ba02045e5ea89656aa60db8561b0ca584a157fca8203318616276450d1ef60a1534ce19163b710fa8772b2dbd110a0fafb3777ceb7a5909b407133df359307eda7a7cdd871ee4e92c7969255123b5342fbadb149c6f42848e291be77be078103de9a30f92d5739669554e3bdcd39cd7872ff97025af8dfd525106fdf1452b42b1fae73bd41f9b7be17350ed9a913f4e488b690c319ba9e893075ade1e07c8aad9269fcec55dcb1e175c079724fd0b2ce63590352ab414eae2c48df43ca8eead06056344e10091018d87e8d4f6678ee7d2e705a78b995d58a40126fce798fbbddb1fa83aa1b87baab68f5b23a9714903a0f84fcfdebbf1d659559c44a9687e71cacdf52ca1d5e99e24caf51f98aaa7f4d2e1c51a9e8c60c8952a8467fc87f55d57a8c0774bf979404ad34d055e645a5feb4c0c14459b28c3da0845d35b87ded5042890c71a939925bb20a991654eae995c9f8b495e58c84c8a77771330e8c97d42d5fc789824c7d2d84bb12047ba33359944d9265355bdb738e08ea4271b13bab6395a283f3d93cc34acfa5e604776b933e46c37cf0277b867ec0302a89f6c11b0bb30329a3e6b7652dccb986966f7a8bee6cafa2bff84b499e25abb3ff62116d4e4154413b7ed65b553cb5aada914689cd45bf9f4ad7330317c1c4a47bfd14e953c8fc9462a681ece9a6031b77e7b8d5035b593a38cb1bfe101ce1c7a4d0b0d643d063eac168a06111930aa11679b8b6b736e73c32ddeb80b2bc6ce223e2ce7e45dff10bffcb1b02f78a32035f4d2f76125ccf6edf148bd2242bcbbe9f3c5727827f0ebec5d7da17c013e30bf96d035b3b577b95e878e43c8ff16823c1e4311a213722ccbb95c5e897b6857f8de11eae5aaf517cf411dc051b94a9d931e4469f4b8f95fe880cc5bda2fc8028c2af66b699eabbeaace85c77ef9ef8a796447cfd2810cf1ad545c0dd096c3dce41e1c5bd1e921fa6b7044dd83497bc56990abd7edf4139e849469f91f58f2239b27f2209112ee779bf6d957111055caee140f06899ab39328d194b218eeb9830bb8f64e39b477a2b692c1e8aaf72427717edfd047dd438be48c6abd5fb0a087d071b7593e46440845f48ce6b3665d579e21acb9ab4469f552353a6f46574d8e63c2a3c61130da14c49c98f5bcd677d7cebce44726589d4bfc6ca26c8f3af723403c5a19550cb054aceb848a49cffa247d9114fd3b92341c4d8321297ce453c2f03f38c76c524d447971ce18cccb5aca355ebd407d89e4c2c029451aa1dbea09ee5bce54d97a2760b4cfd415c851104580765bc54e9825fbeebf7cd4909a0044a50289462f1cd545e9463525bee9c102e9686ed031455e1433b636dbcba75d2fced4082fdf92cd4081757fbd330dd39edab57505b83a13a849ce1194a57c4717a640b9566d7475fd07ee0240a725ce75ceddecda65bedd146b477b93c0816498c5c91b6e4b4a65e7f7107b549dda2834405254d2ac7c210542b3036daf7f2c2fc7ddbcec1b8d237dd97d397d89936736d9a34b631eda75e75aa11766c49e0449170f0c3430a5254b2994cb0ffcda0219f5511f201f5242370d924623a29683712ddd97fb3d3ae1bc61e7ae906a269f3a2dec6e7e208c1c80e5f70e28cbd1303486b9ce8593a6ff6e1cf662b343f18533ddc5b7f1e4e07b317e5fddfa92d6810fbc343e87c681c4cca54175cd3cc35a83af7d6a0fcee7d4d5312d43fdaa2f0c7f28dd56665843d844a5495652973495a5fd84134c310acfe898ffcec6744318ef7705b495db75a082978e92f7f5adbd17527a322bcde1a2f83037dcc983ab5ced014dc7baa29fc3f2f671aa11ca97374438b05522f7d5146071760c9b4ad04f0462260e39401aa9123c930a24a8999ad93ad6eac6318d9adde73acca05c4a45a2142f0696568ed66cf48341c4f22d6e42b35e618a2d538cad0be69b6d1a81f76291b92f563854c26f98a2df6749bb17fd4ca767e32dcf807a4a09f776180fdab2656506fd8814f396a372318011cb3e7561424c65c56a0cb24c357f4fd75c460df9a32bf0a837e08eaf81e6a3ecf628479bdfad8686bb97d16cc9915edaffeff1d903fce42b462f9417527d372da49be056a009c9e42ca8743666bc2785532efa8e07f82c73b82753655453ee765edfec1c53dfb46045b507337d7e3e78fe9984831fac4e34166e592408190e399d8aa7676b9dba7d8f5406de7e4608287aa62c52bb97ddcee97af1de0e2b2af9d912cec257c260ae71fbffb1f9a219162fdb5e677c393fb699c3d9fda708c939aa0eaeb798fc2b7596135e387020f5c4b6af974bd20f088dbfdf5e0d93306d6b88e4e3b1af999f655430aeec623102b687a9638a4d97acb6b4341a7833409c21ee1bea3b1c2910f034ea6e485060d45e1b4f4f7d5f51b0b42f588be807a7b9df524a4ede6f394498c09728d6bb1eff3dfa17b7cf87cba92879b31eb790d46b064dc67df609289ee18fcd4b1212e9c7d8ac7948eb4773ea663bea6f716f6504394936f42c8aa5744ceb035174e85fe2b09b0a5f4b1ed9190fee54eaafe3c839eadd024ddc540e894d7acfe889bbcfc4485e4187798e69a987f9891cbdae7c508d61cee7a005e23255b7895ccafdd7d1225e953df116a41050f5fd724510000cb37fe35df200bf041819d64ab34ef6bdb1249c0f4c3826e21d5c3887b0c8d1b2df9fe61d5ce50372e71a2d1edcffbade8738cc57d57350932fa4b0c99b299fe7744a4da24b234e035540f46592a082b817138cc44748cfa81a580cc46ec2991f03f79089473bfd49e526d2ab8ed1ecdee34d73c0fc38d2956ffe82e496247bce2130454edbaf9f9b19243e5d2c0457b76e3f07da7ec427ff9300d9b6cbbfa6793e7cd24f62eeb38b63d19df6f49861d62a60cf7d496b3e2b15f777c75a04b7a4ce45de178789c7af47a787f5733e89bfaa7b2125d69e73bc7b4ac372db840dd55323bf43c3f14a5b472e62f512474dd860b6a360c0fe673835836365cace478f6f8efc3072c5ca23e4ced5727c431cb4efdbdcba72db8702d739ddfca233c33775f02b8a4e77b5ada31155d9fbd274e9aa33139f76e661c0d2c679c3ec652f71f8efb3ad91779b4d049e5aa82b45e4cb12550e8c477f65e6bac1ed4823d2daa38ad62b070645f9767bbe5a69754dfaedcaca240d6f3731d8e1b49ee5c2fd53608e6c0842f7834ede8b09db9a842b15d6360aeaaf488 +MD = 115f8631397ca4c7e373734bb7173658c109e88a9c236d29399005aa3a6cae0ea5552690c8ff8e0c27a19a6a435f801798c05b0b4b1a6583abcb4348773c43f4 + +Len = 93688 +Msg = 4538be7ef6502e3fba34393bb2c84119779aac77c4c539e66f1594369e6b28f5376334329835218689d913566e6fbe52c2dd7b41c0ba9a01636bfac9918bd8b29391e576c9ac9b779cf2d003b3ba8cd66a4618e080a657490fd859b3c2342ebf4208f8d2f17f4419dbc79bcaea7253ad591dabdc6a5018c75ca6d97a972ed1232b1096ce7874c6742e9f9a34795fbde075aa5ebbe8828481301ba1a87a406be635f3e7f3c754c6907ec4f5c8c9497076a8345707610243817581dac4d234a1114af712c844e6ef76b17cd50e42f81477d805be473d99fecf111eab5707d01daa516640d658f4e62db110628f4c3452ecef63bc04e30f5d71ee3b3de881dd87bc318698a36b4456bd64c8c3d250c4d2dcd49779c5bd2c0771f21fb8ffa722864cd4a043b9e6a0e52fb4eb2160b4713b4f6fe91c1232b8a5d607144325e369c36421fb68a02fce3b8a88c3a3bfe203354da8a0cd73aa7adea9146006e09c78e60b00e130deb09601d6c796727940426adf6706b6718d3b5bf1004c2abb3b18964a5998c3fdd0c2df1b5badb51638f57f0c9461fc9344c3c3b6b520d73b26117b2814694885f6187c622b50951c31e61fdd17faca6235dabf011a2434eac62b3ead1a9ce7fc8c6281b21fc63a1593dbf058d8194665c948f7d917a06a4f832e87e15179caecf96695141f59cb88c59d9a87c006982468d4124694dba0f2c6e1fdcda24816dca5ed618f134f70fe31f4c672b508e9277b48b950791eff5cf50d4978f550f655f8be8d2be3f153fe3ea71c20a06861f7686a9300aeb1af147a7a13ea33da90de5aa3c0f078879910548043996a6f271b9903495d1cdcd7a2bbf0022c422e0cff3362a2e7b8596dbcdb45e4e5f962641b74da826fa9e7a08f2237be450c949340ebc4dc178caef58b3bbfa60d378c3f8063b9e73f3e1931621516f03d78544d2aea911689dcd05904ddb632180b34e1d0cd661fd4c4bbb3a3fe57401d6db561449891f7439105c2b027f22f0e5ca171961aaad33721154ddb44c055ecd500f7165e8b284f91965815823a46f7141c1857b14dab6e3f6f28914f1ad8b2977e3929a24951b5c6cb42bd57571fdc1aedfe9dfc174e8304116b4d872c70779b744d04cd91197b17eba9300c1261c4565c4aef62d0657d5a423f9754c0c644c92d5b30482c28ab6b40b4f40b31b4b8b0b125d64b3f9765284cccf81e9c812009f08c337ae2274cac108c93ba7cc2bf1033b6d91f2d8d42567539f74d894a1443040797ca7abe67c1a4589583bd30e15e2b26804762ef1ccb06af1d494fc9275fb2f5e3a2be940392444180cdbaa92682e19c5329a664fc714655f07ab6a56145427ea06974522807376fdeff3cd397649d41db2ec194e92f7f54fa498687caddfcc95586659fde08c70936830b563beda73c9fbe7a28ebedf7d3c31c86166b1027ff8a6359242e7d3a3711c0efdb1b0346b627429ac80a93f8fbd15c7ffb4bc40d47c86718891f4ed923f61eb00a3d8fc4d7fc20ea1b4f0ac8f3ae723add72e2f4ca95fa6975ba63ecf26d05158aab7a67c6a5c22fcac138afe4e2c47c65e95325b07c84159006a4bbcffedde8046daa78acaa8e347c6806f7f6f3bc103bb7fde820026de5830bfa8de0320eef1f89093eb094eec0da4d5ce6506bc1bd06e4ca8542b11e9ef6d14bac4d9000f384097e03fbea499a8c7723c61bd23a4a6e79a1433f10fd0b9061815e3fa11cbbdaf4f00db434078b39ee41dd7eae91801d7d696b3fa773f3fac282ecdeebc811ca5349a604fb8f5b89bba074a2892d27b8f80c4569ffe91ddcfc389e51f86dbbfc2d701413c54bd226e526d2afea7607eaf37119e69fc552dc1889bbc1507482178a4d9f081da2b7b574bd41cc5ad4e75874802fde0f705aa51d5f8d5579432ec473c8910c88fcd4e1714c072160af90ad8621ce78d853fddd13a15a36fd4487aaeec9304690c1ef4fe3bb6dd7846fcb8f2e3c40dc81d5032d02376b8b64de54720638c6dfbc5ad1aad2f2bb164e7c5ea776b9cb33925d333cf308087d34785fc3c0fd99fe942d429847d83905473f119c6580b8a5945556b3edfe7834f77c6e462600f1cca1a30ac148572fcdf61eae16037a4f590e243439f90005d734514aa23f2a18716a25f0cfe056e495e382fbbf598dd778883295771ef7f58e745fbb80136155147819bd6714bea18697d4c23c6ea29a298ae7411464c991833e0e8988ab8eefdd51e83933ee75aec8997ac9384ba2de959dabffb9d35f21db1ac67b610e9a2ff57ffb2cdb7564538271ded959f673ece348e6990e74a1edc190ef5ab4446b5d848ab95e07b173d8dda866b94779ff0c3c1400d5ba4e773c5b29f1ee2856ebc1b1f889975eab8b8400c57c33abdc2c85c888617c6669ca58d16c34ff664b00a2a553d59e886a92a01350870d2d25e4a1ae2c7156b9ce80874ce22155152b944a8822043c2ef6727440d2ef10745e0ea61788992a5c848312f4111eb7deff8eff81ee7e39f8581148add21b04298e92dd2a253fc2f693b941f08394ef69ced60ab83eaa5d8d97596482d875b1f3be588e108acde430040c5b69c0ecc35da054b3569af26f96bb300fe86c64de7bf54701f03fa959b2de63aa864e8cfc637df041838abd39bacd809307175055693b497df3cd3de82329a57470b7de62226e92fe66977481a2d430360660a1dc6498454c41bbef5b2ceebc024e8348bc437a223028487d10f5d828410dd0c03c141524b40191297974348f9c493834d46daa8820f02641ae5ce250fc46ed133d22b9ccfe5cd85209a4030689896009704905ac16e7b828227ff890aed74203a6368d26717917d1d46363091335822f597e93765935869b360525d0a0e854f941f7971a5781d610a25a5d808075270e57b55ccf33011800b0976ef81ba2ad5bd40ee191f69b9d763a30f8531973d60e3196699dea73f7c059dcddf0652cd4922822737198f0f56b668e3d6b26541797b1c8c1cac7b5aa44f97d79a0c6af510705dc53a483a76557ec1c32aeef4372119df46c3c12ecb9f358214af08853ad2132e48b10ffe976a39581e105bb6670e4bec173dd1343ad343d7159c9f23f6f4779e1239f56deaeb529665258d4e59878dcd8dd9312e00c717214ad114b9c1fe3a07c2138cead98f670728c9080e97335bfe0b24856eb6111bdb34eb2dc91455c705c8fc2b17fb9ce324e9793089a87842e82fae3288d317ce7f64592ed476a1ab1297427457b9ba636a17b4bb41f5fcbf266be4cd0ed0619b884999bc5e615852b8dd94ed3cac5e44514409fcba18073d333066b96356752f70652b3ae95cf05a52ec51fa293bff2274fef76974774e59992d828c18add8e6e2379c4ee7c1f02e9b44082fcff1236a4f990ba5e3ac2880c2a3e6b9b16ef36e38415b5cec48de4bdc8535f2736451a83ba295269a1f2c3f4a43f1c6a0125b01fd12e6e9695a113ea12049e6c5fe0048e3cc42600a58c0018a7e32377730765eab1cdd78e16e4f738395d2713a26b5e8b24681e6a6e19a641dc33680a931ebd0bccf8d8fe70ddf86ee666e264286f8f431d1e22f123211d37ea36d36b89f1214ccbba592dca157f56c026b8a71974ff7ecded1adbec2accc27bf54de17e08f773561842644d12f2b670a58f239d001604dcddee71f2be1daa3476bcb59aeca849141c7beb215ebb579deb5121da9d3c9cf3f686fb5d6477b6bfc30a3004249d96aecdec0a6d814001f001e4e9fbd2d910ba41cac155a542b0c4e41d97e5383d22cb337e095901eb7b10ee32c326275526d8c5a30a0107e75eeadfdf3564b1efb41457172f0f68238fa7ba21f7842518a7f68af7208914cc88dabe3651aa161d163140a0c5b43d4f035a6e9bcc3c538a5abb99b04916545af83c890c32deef2e0ec9f602137309d9a0d310878b763a1409d0f9b4ced04ef975b746482129c58a65848223617253282ebaabcc7d5c601c7adcb2edf7de8a12c6f3ffd266b31e99e30cebedf7d9a3a475b64454e7134f0c7688cd410b68900bb499bb9249a385c24f0639471cd181b53c70e50614c68f4ac57c519a5498e94e0751837012217f70721d75181a8276c34d9095ca4b9ba6402f5f46df18941c4187c25e540857960815f7a64a371309366ebd5d88d3ba1e547cd9b5f8a084b14efb955426746b51f3fe3cd4c4bcacc376689f4328f54c7ff07394a5cc349130dc2d716dce9e853899f695076ef1772beb03df5293f9794f7bde351e451be32252e3ffb234ceced462c4aa48301d99c9fe06258faf2768185d8367284a9fa10f1ae6e72a404c6dacb732229ef2893d25153b180465c64261fd2ad0ccc406f37d9bfed0dddb5f8b49fe06a5129c7e89c89a6861b89e202eb3c59d1811999902f63df262d4eb515031a109ddab1642a539f356a8b3407b55951ca3e800b2a0f601688c46165968e3ee06036f71481dba008acd94fe3420df8f6a03e89ff763f727849224ab0eed6d0897bc066c1b59f0a6c595cda06357f3291886bff850292beef9cda39cf1271505bafb48a5753d6eb20e75fca1b468b9ec8cf41513a63cbde130056cf0e960046fd98add2340105daccc36c90a0e9a5a5f2f1594f6dfe2d3858f0227afe0de61cd5b2f6eee621be41c66a0dbe25b36fe0b69b0e2abe56496647f8b7be2bdeb55a8a8b3a30fc5a62c8b467bdb318284cc76a38fa73a9e0a2d05696a109068cd088728dd238d4ff85d81d38f70ff6bcced2a43788ca9f41bc0f0b3658fc1c8cca1f243779770ea5b9e8475a44355fe5689afb3343802cee179aec745a07dc73249716147a6c17d15171e9481fb3a2369c78b598b554d13a27ec60bd1eacd4c45278dea17f987ef6ff1d698ef41b7c24fcf489f448890ada7f7c0e9d316b8404f64cd46ad37ca2ab15434eab6bdd3c34eca6dec297bd583380d25c811cb47899627baddd10992152367c1f09e16960eafe083a700d6237d9ce77b0f55b281106399da174d17e8980d5304136ff5088bba38113a924083831daf4d2865736ebdfde1b85de808d39bb63f86bbf0013223b6fb9f0ca762fb7d018a207a09b51679ae29d91569855c066754cd51eae31bbced50b68507e4965391a27e6d0b20822abc96c7a999358ac168ba633b2542cb3fa560dd0d796d59ee151fee69325db9b97052097f40c165b50198d0e369c74b9527529c0cc6a54e34d529f9d64514c30f1285270126d0f5c87a169aaf7e1aa2a4bb4f7beab6367c0e18e6251c0deca912ea56a995120b43e31a5e4b092be2d856a87f030f11c5eb642881fda3528e72ac3fee18a5cd1956ef2a956a5839c7f6923809bbe49ffda41f4b2006d4dba226c45b75fc9820a436d2f2e680047173033fb1162bcf2883ae25caecca1572cfce428412dbd6d051ec76ba771475988b07475ccddc3973021160ed0cd0cfddbd700d03ed3fc7a8ca7fc1ca70ae1279ba0b918157558b4920d6b7fba8a06be515170f202fafd36fb7f79d69fad745dba6150568db1e2b728504113eeac34f527fc82f2200b462ecbf5df1e13d157685f7308b5882c083b6daa358fcf8c0e5eca28d555387d5dce88bb8a57860f30b4056610b9b74c2f9ddc7bc737efa1f947b276d69f9ed9aa92bc310a0778bf66dd46bb26d77d8acf7aef3554a0c1969c3c6b571545d598b317d0e6dcc26e8a80409dd2a9935d607e4f20779c5ed7c25dc96f59ffcc7f431dca614d810cc9c9038a754d1781c985a2871aa2dcc6b4ddb46b38f014a7ee613136d7e5854b2d23672757ab0f076432d2bf3857b47ccb11369e52a9f26cc56b93c9cf4f68021b023183cf4ceea8902095440406a1e59d256adf46e7f79f76cacc1f91db97d5f5ede94c46d344f9ffb740d1f8202395ad82b7aa705ab29485273084da2a931b405ef4cd58be805fe56f8be5af34c8017eb1b38c7942b20072d967b5f2ace856acddfaa37f6f4f6ee3c1dcdb73c4fdcd731ad4f1cc605447c289e80f95e3161c8dd3514b1575f08b9d56aa3ff051433e4d569276e40437fef681281e1e6d9ae155e79f40d563225a64867a8f9f5a16f84fdd72885adedb8a7187ae5e069ce529a7734b1119a7434fcbe9c446fb5007600d280bb29b309d7ed5e5f14be9019379f51edb386cc2d1d045e92e027ed3932a07beb4621faa1c3096247764302c1436b132c62339366c80651d0e2eb445289ab20a033362bbc66434dbd733767ce6048e67926e298261d49bedeb4816255656beb28e830ee63a7e2474673616949757cf25d675983750417ce45bcb1f049ad26020acfd7ea9d6e30776cde8aae396a505e5f8d61fb5b65b6a88c6445963749258dce4ef2c872a37306b61c7adea6270c530800c2a8e1286f763b1303fb2620b0b5fdcf4b2fea2ff41cac95f9a29893f8f8de2844330e358a5ddb30b5c81e1c0ea11eb9a8c80ef8fbdfd7b1cfa218985c766b6eaf44eb744f87f32521a42824897bb974d23be5e7d07abed9c3852d1d7ff43738ca827ecd061c0b5910384a2167685668912f77e4ba13ea739ff3e00baa9bc8ef5e96d129f643ab34492c8ef9f1927efdac4dcdd802d3e1e9299638482593a8fc3327ec6e68255c1e9627fc956f21b89bed3ceea9f1e12da12a133dbd38035fc511ded586a4eaa57fbdd19bdd293d8daa1aa4e241cd6655056915f7522b1373b4c0639657f2b90fbf87d373b9660c8492fc2fb286de89e27bb0426ff045ed6e30075d37cb9aba2146bcd58c1270b925bb5b8365626e735b6dc542ac7dcfb6d8a0b075bec9e317637d247eefce8d6af88dff4803bcc34b484271beb6e21199376e8152353817f55dca8677a3d706488671af27957b263a32627c5e960853bc1501439da3027c7f9896ac67b013237a56cd35c72289df68a035aec953d6dd47f9c1bdfd110e5ada9b4a5cf71f6c2b28f00a57d2b2cd36fc1a23cfa8f533f6636c16b91b8644fb31ee4c5fcff7c9687cdd91deed4e2f731e2894a6a28509e838f568fd9e0a8ca6aa1a067d964011209ca4c991c2fc97ddf853f0fc60093ff9ed1c1f532fa5cea26da6de7df5022e9cb0cd193af9c6edbdaf229f99898cbd72aa69a3817660f238a31a3e2993460724e1e1eb9f3ab4195b6e1e0945c6136b9b99655d4f1a42e0b074ff8d47191384ff5667a68a2ccd04ff5bcd96c8bfa831bbdf97b387c454815207db33a02e728d7739e7b1c1771994f19eb9afe91b52f71ba7870eef1b9dbb65853998fc7b6a0ad2afe9760cc4a0b278606aba71831aa50417bed751c8257733159e2423a703e359e2f65c35bb6b47dec96721299e0623bc57c3747372f49e02e0943fdc5b450154fa95cb020381396900384ad61521598b901e4f1dc213161b0ea251f03f394a0b1e4f2b3d45ea72622e659f438f702fbbea58ce195f89c9c6c651c228fae6a7c577abe5ac28afd8117a768637b5fd8e938cf85b2ef35e9d4b3027fa4a355500cc2d315f1855d755bd0df469792fcf5c5a9f865d23239a7cf175ae611e978c3e6667690248736ad0af0e67afd2a4ee83594a8b3cc199464d01bd6e5f6ec99547dc4ddc36062b713030a655c00abc63e9d8b68e5fd0fd6af8c32fee5d00727805760911641825f25f86fd4804e92035781e0a173018f60c647ff4b6c19d3b3b5f7bc090f24708f844f93ac7e337786c16756fae16602d367b7d334ef50dcce83c359de24a5b7c88c7d3865bc5bb6b11ad230ddc79724aef2404153f5f18cc8686eac58ed21c2bacd05a088a123ea22a24710b28c114f440475ec20f6986e41e24e3631cf452ba6b47d8e9df3288c5c263a7921b570fd32fcdd161497a1ebbb7fe689d1517c4d4ce149350df8d617bde520dc93ba12a90c79ca61b72f9a9fa59fcc09b00a23b1fdb20d466148b916c88d9ebd913082fd30d9d25171450f0480c06358665ff7f439c51e2520595df41c7e088e928f5e4430bb8957eb6e6b84ed9040d86cc9558e91990073d3a1114a2a44f2d2204ce1389c8d64077e123ccb3c7de91c2becc8eb959c6894f3c69f836250e22ac2efc824d4cdd6c2b1c6ff320df7c0963c20ce85a64d9b1af920353a65505afae2ee8fa36a0b762c1ef32f43d28c6bd9061bd2f7542b3c786c449ed99391d1c508df942eccb4a6a62e2d498b1aaa5f47222472bb1fc3a13fb5ba18eb8db3cb0bcd2962418d580cb367ebda7256dfff8318d13a4b79858dc37de75fdab424bb41785296662c73fcf644a56e9407abe0ff42a87622e21f46c62d52c03197633708c2e19d171a871bc15cf0525abd8c882e3820c2cbf9cf509a3c82e68ab80da2c4056ce2dee80fddb709333250d8f0799281c0bcc121345fc2240e3f408672a305e84b0428057cb749e2049af0fa8619be880ea08ce8dcb8d08c5b36ed8330ac30c4127d7d036c3cfc6fead8c592ac0d24e3713a99b136f037ddd06a0c5ec612f72149bb68524cd3311b3c984921d0b847fc8ec7723ac19a8a8124450759b19baba8574a5482ad1eaa7c9045e62892afaa6bbdf390b60b1c2b2ebd547904819ad091c1a6dc14fb73aafc8c5e47377047ce99952b9fe371f9ac2f0214dbff949508a62f5d6979b676c513676dc6aee835170e9afbda23a4b7801aa912aaab891ea62de6da77316c9c7b79d7e0ff2f78ec364335d0e9f701ea397a08ba5f88cd9c5bc19ebaafcc9c69506844545b1990d18ed00c4749ee27e65ab5a7887517e0927be99d5a5dbbb441c697433454fdce99932d64cb6479654046561c1985f94095990e89561b7f42ca606f4b0d975c8088e5c405d9e419689c9ee3ccca0c7d8c1a35b8e91a6397d6779058c24c7cb66533f92c35ff235ea03fc6e73036734521a4c4711333b095ddcdd8fc4f7d8f8bdb2f3fde9ba7bca98ace50c8fcdb44c09fa9e7bfbe2eace9c721ccc2591d4a5d50ef4c539d601a9aa6bccf1179151b7054bdf20d305793043137de3365a8379b74d88113b1c4c792727f84593b9041e4ef3585d2206b1d959a647fc7fbbad1d6a59f80978f223e318cab22f8cac9629eddc515b6f4c5a6ee612c341891a1938f6188cd777c14f8f843b42d789d2cf7fe9ec1141423f3c9af34139d8dbe0907364748ba0c0f299247362f066129376c94a0de23823471e03861af0e9fe76da76bb543f8fdcebc64bee270404af5755ae18260a689bccca51aa85329d7842bfe8039feec95216a1abfb72c5d8e98632d75c1ed2f83136062d646a451bd3ae0771453fe179aadaf1eda52b7c0b4788d6eb1edf82116eed9b3fbeb1728c962179ba881b60c56d9e7db8f13a71c452c50993645062dad959512ebf4301184a03de6bd41bb2d522cc0eb5e987ec2c90a692773859ba7cfae3efa26f063ae676bbfe2c312721d251cb6c8b94fb356b8b913b3ea1e2d11e59f13f45d7e3651fa2b3a1a3a827f3e483035fe3fa7c93a8cbefca91a8d3f0e97fed07bcfec2c9ea57528f7b400371323edcaf6524f3500cd629081753145f05f33d10b2ed8caf701b008f5a02a3e3e50dbe23b81949b2be36a5bd79ac8e66993d4b22cdaa275fd979256be9f4f0912475118585e16402e673cdb15ebb274dcde67d05b53f7d214cf629e9cf20d0c218003d9b73852e87ae1308ab6f87c85bca753d8013b3753df11c75d2b48e2cc0e935aa2e2b0c8e8b3ca0bd7554185ad9b872f25c8f0ff6faf1726fed4245edd1be9cc005547e6b54b8a256d5b476c30fbf650361d05aeaa2748080041f4df93ebfbee8ea97e4af2b4b9f3a9437aaed4505d7da577f9c387ba1cf10ddf3ae3a4f162288a39c4541581d21d17a86bbbec3b550de0643dec8cea1e688426770974be8510af90aa9092355af834e49b120d0f5567736c52782e29c4d4ef9229cf77c60d1d4b48a18efd41bd2b8da2794fab6ed730daead7f4e01b98dcccacd3a4428a32c509cc39bdbb29910d8e4c96d33bbc72e0837a2ee1471202d697f10506598dce9e4785e39b506f4f44b35d743b528a80fd1994c7dbc7bfab58cde92e842143191fa1202fb651857037995f81f6745ba9fce9c54332e676fae9fb1fc09c3e3caabf93058e7d330e8c7cbcbd4083159256568076219527da69f09bef5bcd04fd0bf499b0708e896cfc7a7a11406fbae11ea07a41d351005c81032ce2608519e6b56521bb8638a91358b76dd6021ad8aa5b414392e915146fc8982a837f52e19c2f77b781302a26b429ca1485f623036094df58f3c35fb896b936116cf8b4f08fe2a2e79bfec196a1d818eaabad06afa663d146ef027f8163cb537de96d39cb34677d3e76529d5d7efc2a7cb1974441de40ad89ef2712e3598786cc936d4fe61c367d08aacc2c0fadfe853722254a6e9aa3ea8e6e91b872ea763689f54965b5c9d818e2a3dbec11a167af969807a79a4e160ee0f7e2bea4890fe93289b229deafb4d758fbf25bf80bb000376d9eea397b0f911e258ab3ecc7cd1562bb07faa540554ee80dbffa475f702d862d6b60e0a4090792420a26d02926517723eb56ce2e51d5fc73955573ff209e0f41edca044b8ad8ea07d195e32fb413fc3ebcdc9dbc031312a802ec026d39c83f65a68438f41d9b71d1817f9a4deed37e75fceab89c116cd725993c774c344292e3160de31039a5f6298a426a064f266a643c0f9320d5699676b8b546fe9883a664cce5973257beb38a6c8cd6db5d733c73fac9b1fcf79ffd05f1e4f616ef01e6452b99c9dd001c467ea8cd654f8240814fa9978982d056676dc54a09079043df1ec2a8ef72bb652b70bf7299d56624c531d8f7ae44f8436228b362f45334d00d4c22819c95f21fdf0b212af90f618664d4f96884d5e7dd69a13cbe4c7c352cdd77bbb245a93ca2ed986e44e7401cec0ca39b78a198279b0a61e1ca860529b0dc0bfeb98f3f03a4b3b3075ef939e0cc19283f96991e2ff2b10512f615608b1295838c15bdc9ef8bede57cd7b33f65bd16cd4650bfda797af9f560ef9f20c1b87678c44565dc48ced8aa4f5d89d30425821d40159a5f8c9a41ad5c1567c876191b5637d71be8a7f4207bef4f019754abe7a2cd73bd0fe1e734a754e623ca00cae09667295461958231c4fd2a9eeedf96c3c84ef9ac8e11d82f7dfbf037980a3452c3c2da83e999ffa93fc97ed66bfdac832834f5cd3c84f3ae8bb1c237d4eaec0e78eb693ee32dd2e326f4ca3c714723b23d2016b3adb3a03e7b06ba98e33b6860004133f9e0a9827c250f9b35a134b2ed6190dad45446846ba66b67df55742ff3f454e93964c5b4d0a46a40467e5ec0714ff790c3b2861692a860487fae1da936efa6f761d1eab08d4fa578036b1dd30a52c4f6f66b2abd6ffb85eafe4fa06aa53ca7cd27da812c0e614190e0ea0a70f514997bd0c07d0f301a3cbddfdc94facb85e7f8efc1317dd093bf39639dad10ee0fe57e07652582af8f053f98b773c01635d7f92e38743c70517eb01fd86e39319f299bfecb9c9e2ab46feebd72b56111c7085c67a2b1ce6a2510c35a3cc6508c5ce6442b564ad82e34ed59b290e2345ad3f981208282ca3a8915b1b72d5e0d4ac39c1511b7c8b7468b0dff1c9482d03dd71c05ed7a6fb64de7ee29bb4c9dc5f96dcb6d46429ec1f021324d6fe00fcb473af05922dcc0f920dc1a89eafd0df114b5e4eb3d99257eb791fad30115e16c138a0709653c2f296fd02b50aad10735292698ed6c2e05440947d81e94a8b0590f4ed085291b12cd676e812c9f4b41f8a35a28026673a6b861cd5a8e7f1af518b6e3dd6ae2ec143bc401bc6c1cce26c21fab32b890fc92525dace2b144ef180197039e0937419c1af2244d9dc7fc2e07faa4497e804b5098593111156a97a1ca1c08930e7a9e22e16e60b5400547e050c0dfccd2c8c25a00f124662974972ad8d27d4ce941643105b52173e17923b6331ea84d43bf04170291e1427be7700b9446dc2c0800365f1e52f119f08822480540a83b4ff7833033c7e2367b37b4cca2e5afc1095b76f581c44a07fbb6c5ee6df36a2765f6b20e1b1fb1c2a5e9d7f67b3b62ac6b97c8ace685b6de71898141d3834892142133390ee5da778a725c1193b48f4e8d698deda313a1fde074d6cabc9ccdfbd92b6919a5d6c6b5a765a39662ed90080d3549204dfaa5f6d70d48e1af8c84d53369d658765ef11d7b38510d9f431f99598f8cfd4da73d59b3b75a3f22fef7ae91610d5dd6db040f846ee6df7f51885300dccbcd38b5d28705078d3b9d5080f8a1a560926df75a1c417dd794a9a564c581a188288583001f4972545f951dcb33b2ab92ae92207dc430e9a5c5949b2f715a723487baab30730f9c422390d330f062e7f60af9e2e987d146c3dac6bf62e6f9c363735eaafe32b5c9c910270d4caf20ef1d2ffbbb17d7b0f9d44cc69e8986fe199773d7eed3cedaaf6bbdbe2898d07b257a961e15a3444e9739b40a951de1c5e942f1bd032bb7fc91ac84ccb18004e02f90c5d78ef65e08837679095f8a87ffc6f8758464908e8a350dfdd944acacee71e247ce839b858d630d34594a79d9ea171a87b4af9ca301ee02817a3e79490471019459900d3b3b9a804e60d24658336e3ba0c4309a9602411cc8161b7059a0c151241f40c61f91be525fb6a38a936a40de49499424f7f9c2df3a43681c6f61c7637f65f240832e3305c0c12ab11bdd1374f9ab36c61956d7ac4068b0f7eac617bb1ee43127067f9d1d1a26d454422a7a923a6fb4f8aab81416831c627d6c2c16ba8b1099c42a04510ae44e3ceeb6d0daa8740d8b270c7bfc907ad51927642269043c5178b26e3ae35187bdc0dada4ea84a3f1b25ebbf40f5cc700921805337730abb4d7a6c33a1f8739cec0cb33d1287da040f21c14375940d3b4f3802c9e9c940806afb7c2ac7d4f39c5f7d024fbaedea6b6feb2239a85be5151da94928a7c0481410984ca41b1d640e8e9e4292b64efdcd93fe88f247c1e6a5db11ae0ff01c73eef4cd78402a36175c0ffcfea6832f76b341d8800dd24a84562dfdbbd0612276897e07698f63b3b00d49f580eba00407b4c015820ce66a40be7cc9fd2a5976a27c22d29ad2662ab0aac32493e29b61033ab512294fe2b59e375e02ec6e679d9a2f79bba6b98fef8bbd1216821be3cb0bbd877ac07755910f693834f42d19ebc02be92ef7c56f86b3acad37e60807a683c5bd9bf1f3cd9116bc91dccee6def5b6e9f7a928568394cb01faf52a278597fdebde122845a94a46b9f166b71c254fd0f23bb6931d4a8e344591fae90acbf3fc885f59fdfd771111e9ed6f574d8b6ec0dd1bd3d25a42c771fff8958d12695ee233b7ffcd8bc579fab4dc5319eb8fb6e8f32e8d50ce0af51689957190eeec4d51667e602161030973b344ce998690dccbdcca5fb8c8e18ba48b0f0b9ef0a333cca92927942dbe341f5dcd1e309f3d24ec02a5a754db84ff8e7cbbc001b84c96a6643eb29032658e502ccbee89a5f343bc0d1710cf8653b536c7223b63b6470a9130359d902f877cb898c79c0f3b41adde44b5088359ec615ff2d8da2f6b00f3ff9594453e759283bb3a56c33bbfa6b7a551e61b1ab6ad784ca85628df5728d753fcd145d5951537ca89efd099a39115b3bd50a4f03d157eaf2010a3fe0b1d4930ee731c000e9e0d78fff96093a7af3c8bdf5b529e5db2c8da22aee805e76cbe18d3003448528b79490519efd40c4f9080308c908f7913fb60086741817c85aa7e52ff3b09017c0fbd51b7dab57200b653696aeb4e4fa78ac349f05ceb4af692c3d6c67cec8bce45383e59adb259511257e25cbf5521ebfb967fd0a6bdd33e0b9be70c864d62109e6c5385f57522bf391023f8a93ea06fd23c126e9b8395da7968fc27f3b614e18fac19a33e687ea99f1eb6b525553b9183369a40c7a7134a70bdaebf21b1249fad89f967e4f6cdbec8d60328c04353ffa3188ffd97c2cc0c660c4718bcb911c95c888b1a95ba805d2ac8a1a9e683aa1896545bdba85130aeddc77deb11585cfd311a4751ad2e471349891adf14908e6af16c968165cce1905c81bb9cbbf97689bfd1a693a7cc725fb979c73ed6f4716538e3b8754ca04f6f46cd78b43926ef1d4d213157120fa2b0df2d3f3faa2a03a5d13c4a3de975da7a410d4db8056b37168d9b6022888248b54f15fb581a9ba59b4ee8c431b8b8336fbfc3a31ead30df13e5a2cb7c57aee4bb7db6841e84d3f7b4267baef736d1baae3773015e9d025783e9d9cbcb2bfff751dfa15209956d4a8eec577304e07d00c43cbde10e517a20e50e92f9a551f011070948fd9fa8c23e9a052ea8c141f4763023e6da9466e2dbb5c880cd81861992597f2fef475b6d44540543c8d2d7e2bb70a190569749e6e884ac05dfe624f71bb7a5c89f9719e8fc5b71494bb02ec221142a4cdd7d86f0c7c02da47959aaf31da01195871560afb70ebda1b9df931d4789226ee7bd8a8b0a06d1df4242a4a818a147394e48bc3c04ec5eef8bb7b14ebf4e2e990dddd1301fa71d38c3379e807d49bb065d87a9187672d97549df15e0c8d1a33d9865076a895f742364aef516ebf7e19f2d78a3bf8c40c1e57ccc1d7e14c234df4fd979a4c76e8b41bf2f44c5c54a5f66468238bba6c48cb28cf55471238e37f07ca1c4796a72a6f63b2f0a27a9af88fe214ad477667cbe6f02e1376475943103b7645442d2fa7bc35134b1b6f99602b95619038d3be7bb7d672652c27b82b4ab7887c5bbb1645e2b99c6d7fe359c314a5d935267a7842860322b2305a5c8473a4882852e564ee2b19d5bf9680e30b90390402d9129d079a9fc6614b894e34d429feb0f2552289dd7a46a728eb3e1ee8796960184436b23cd1e6dc455c9425b56f737e03b358fe4107788efccf72e6648e90b8acb8492ab4c10b8ae67a383d5e9d6ff94da60c359fe5f2dddbd288494ba001705e15e1594a98bcd3f58c416616dc788997d748153f3f3cfa8d9c8731e7d645f2f4030326467e821f3c39b88726541896abee1388683bdf4fdad677857e59e3a4362cb979ef9ae4d6812aa488d62cd6884f927676630162428a28602d595163f0ee350a3a8e156a608d060d506e8d3ac84c6b77c579ba4d3d64394b10c0e54e3de2c9ff516b169c262876fcc9369ecdbc6a22215eef8e29a731b23f18fa3d2af2db8e9ea7cec6038e192277da768816cd705f792910a47ce8b93a452c51828279a12cf122ff4d26012ab1896b75729e6328c9890e2325d168c47a64340bdcdb39fc4c00ab45d28de821cc37657c85ebe7580958f66f38ad8e1a1aa4197172bf9ab496d12bea7dc1a9c71a8baed3e887bfc9c7eec73d069ac482c10dc1cb6db50490b16f88347749aee4448c2fc2c4fa5543aa546bd5b71f72c617a81561f446df5a46dfac6ce8ad5d40f142d09141ca108e5a91c87f72c5feacc67cfd7a30f893d8fc2a7dd9f87620a2cab67a878681577180adc8835f12d1fd73916260495688d37c59e5c5cd2b5ed476ef13edbca694b5c4b15228a7905380c8f02a5966e527126d74cb7692547e9c9ef5840b0ac22e22cda44db872c7ecff6da03faeaf2fd65f788116356d7aeac3ead1b629995c8d80448ea379e73e05400aa987a74dbbfe80458ab04a86240911018a908f91fc1997d0773bb42f7d040d4614ec8b6811083e7b9680fd06da434d8c28f985192b3a2f1a68fdb0710c532cc9e855a427ba5a61c2ae6e961524004132b4db52596f580fc968d1b7d67458653c2da938b33d5eb1c4d9625cda8ba8b39c351d3f7a53db0086809f0f863c7d8247ecd29034227bf6261f44987e96a36c72b3a794a45c2bcaf9b74f01a8ec2949912cb7f4d1f218f79388fc9328ce5a345b376199fe14b035c915c9d5650cc384c3f540abb2349f7db11d739201b933d2ffc73395b102d2099fa2f5d3e425b5f9844f55ff0070775028e58fe031e19710076e05d2e4aefa0d2267bc434ebe66717d43de36e32e0838a1e839c4dfceefb41b31bf96c0a18e0afb6b046cca603eb356d8c39982f7bafdc42f5a853406a187e21a492a6d62f8c8d1b6b7978192a589b617ec700652f56638c1d86c5713175105308bd612799e0f4d51bb0c9adc03b94506420396c8213ca6a79dc1707db7da2b7b6de1d86feaa71743fa133ec6c00cacb0ab995be0a647b5e78fcca9caebe9fd04d895e6cb4257d6945af495d9444a931a107c7d22ec4f0e8b98d428841a4823d2b238651510e8324dc5f6c69cf83ba14e5af223165c1c589a9f231532abbd44ede5137cd6bb23d5752262fa9842a67f536f4475455c753c1d8bff995d0811085e576e5494abcd6414598058538b55d53139ba9c365524621b46b1dc8c980c192cf29114da48b18a33519809573c0e4af09f9bc071b0ef719cb7800547c3751c5f9cc3e52dfa96edd8f4f2342cbb9a86998831087fd39f12a9c6b63c17f116bc003f4def172943350e29d6025872c13234dec29de728fcec485b9aab828ab59f16c277591f3d810bdad88b9b65c74af6c78897a73115cda8845e737712f61b6da90d894cce9e181746e95a26db24ff795c6ef84de604dced62b78acb4f9e10cfc208cbefaab4d000 +MD = c8a7f49e8f5e69ab5c99cccdcdea01c60765714043896cd560afe968ef583ab4cfa6e16b8600e930633ea7c6304c288b4f960937e36490d96459b1be8149b3f1 + +Len = 94480 +Msg = 21bcd76de4058121fa75603ad1cffbb2c901551398fb6fe8edc10f7253bfc09d585e1a32efd4434e1440b613aef6439db9175738a4667ed0f85626a93b68a65014b37fd1b0c4e12a63a9710093494991d2f740ea4a466c595e1ee6268e0fcd7e9be68eb0ec7e629c31d91867466f14745ac698905043426d6540d652145f3e10371dcf386eaace8bc4f833b29011ac309aafe5947f0607f357e57f9594fd00ef2d80cbd1fdef2ee1662d4a4839d71aabdad8b15d9f37c3d37a346758d8941b01c83909e460f589855ca0e691096865cf62698353787e7ff517561801a6ca98304f6d11d76065e75ff17a8ef5c86d9582798be4ded181424175721afac7477e6309476c14c5e750576ce3cbdc3d8db3ae68655b6674eb149fdeb1f3a903b4d5823feca1015722cd55140224ae3171c63a782170532762fdf7983b2d7821b9a6743a873808ddbf6541330021d36cc1d60eeee4ab0db38e0631ec374fceebfdf8233f3eba90216521030f044ab4b624ec1215d995fce019363522cde2122729d3769939ae00e9bd0783f03728b7d7420e2e3425b58975a896eb82276dae9ee43f558ea19cc2fe6f22aa20c1424596c4474a92f3931a3ce62c3b546a780918d745a8689e0c3d2822775ee6c920c7bc529c4e7869b819fb78020edfc18c8b5daaec576d5787d92e7e108889774ba3119317222eafabec7b09204a6c52309c34043d4be6f594feda2df41152f44a435d30bfaefceef4fd843f8cd94345eca4668d3e6a1a9fbc14f2d42bdf8968a50d68d09cdb2a4e1cb2dec250a1acc3480bbceef99d537e86833f1ebedc76fbe56bfa1cb78ffff6aa75503b748ceff4cd39fbcf76cdd7ba7ab489b0b4ee60d391c4dabc17b3c40f26ada352fe8153ff0297eed7bce0f07a200d983515ff911b317fd157c430c2c019c19faef867210c6f8b5cafd3c0e3e601f73353e9f64ff94e06a795c7ec3e320a1b0cf86928a2459d7e0cffc353fb28a4db24b239bbe3956fc0242027d1838c8122b2d75aab1bd013d9c76e94837f65911f31fb0c3695181c150f9decc6d8f7063e59f4d2d8d7d5590255a44f36b6c8512d23d66b4facaadd6d32b71fb2849b22d7c8f6d9971d7df8637e4afc56e9766b6bc1ea5dee72723b305314c77fd09f5c55c88677d034ef77620a08a1ca619a6743d5e0eafb2d99bdc63b5cec14042c3d21214cb56b65545e69c085487a635ace1c255f1a5e2646ec98b238965968694ca19bef9a50f8d436df696af84e3ade275d7b10f6ffa5a24e0c8050ce36437f113efd182f683596862ccd5eba2e2d4ffa709d9b85c6f1d56d8b6c4b9b93df951460116e7b9963c3d6b7b40a950283d5d0bc53a7d09c5406d17e3fd1065882d4de709d9a86cccc82afeae61591b285972fa967dcdd67145e004bc18c166d7564f6d46a4358eab6fc972c2a28b6267bbea29f9fe4b6117a04845cba21d3ba006ce4f64012fad96a5918e64aeb0d47ad71ae06c5646380ce20e517f23b45286a14313de7af738330c0ba7e0c059dfb62d9dd469f07ea9e58dca9e63180759dfd86641026c1cbce4f59045d391f6e2be31eb6c7f67255515f5e5a303e986a02ffe705d9c6f00aa4114d7eeb99e089c07967c1f29150ac832dce7f5ce22c2c40b9629cff90e639ecbcc4b090f3f1f5a06adc872d3a47f51b0855a1d4e5e4c43d731cb2ea4948608e99e523b510f9bab5fea78fe1b7ff3a01391b47ff0f6739e37540ce01bcc18571f0d95ec0b9a1e1e57fed6177d122821d0847f945275e931906f479aeb0f7b27f09c8e91bb491711a33d986555055d657bc01400ef770dbc66f603a59ec92ee9f2bd94d2cc970723b649085e5fc423d979f73a2c2454618d4f9ae9968393b42b9a034115dc2e7ed30583de68e9d91bfc5f7c2a9c9da87522ae9031e445f9ab4b6ae02bd15669de8e1570632b7faea64c90d19dd8c7edc91b08a8a525526564f7c9e6bdabb7c3b6e36ab13f0cadcf3358b299ec571f8edde4e2368bc03561718f4b896efb9cd6884179b8da82e0b5739f39379e9e1126140ecfbc8e5b7b687190643ac847621cd346c6e9ce34b4fbc78ea92d3d14592e1c0725bd053d70f4c599b89d4215a3f11851d6d67278970cbfb566fd40603411465c88ba890cd290ee099d0374fcdf1dd8012e017ff50352bc92173a30f85e7a337d7d37924ffcc76b7ea61fc9537fdd92b330fd3f0086784ea31e36974314c353e857b6b95d7c02be574844c7c002cac906941c48419ce8067700a4dbe71377383bbcaa56dbbccd67221804f8b9046ffb79abf1242eb32c547c42f7874ac72040d6209503315ba1f67d79f2c4a501379a6afd2e4b2e65bfb921799111e49c392e4608193704c50adcb80270c41a65bc36791c0625d7311cb5150914144b2f3c2119f7797abc85729a6036116f9fbe5840226d1b6caf81bdd8b575f306f4eca3e9b0536836cf1963a00489573f9b87a657d584f0581df42d848144b0526850fae8a7c05803c2fd789e2370b4ac943e20ee20e807a0b8e4e64906f9de9f2bf8cb9e7eb2bb6a1eae0be53b80ac4f206e5263930ae3aef6f072a6c509c035a640708b939f14c258a7a805cb3db09fb674a5688a51f70b5e834d2e39f917ce6dc494308509f6b50776d770410c7406cd0db45d9571b42e6639f04fe44c47b1e901a11dc177d3aa919814c53b71492cea85e9b332decd809470e67c4277d298be6411a3e76d2e2b8d97ea751900a26a7579c029f0fd95ba6fc4aa33d3004adb44788073555e88a051d2b2f0784f32582455d2023e529f346ea1b617148a030211cb580ca9c055b194e518d7c7915b6e4da699dca9725c77079484969559bda5bcb912c0433727d7bd5b869b858ba02577e8722990e1500ac119b022c403bd2e9bee4b4eb037717b3182869c40a2830629981579a3041c5821ada35c2f2c941535b76bf87f25b514a816938a776a7698e931de3d4e6f03f7bfcce8934528c4e220c0ef6e1e96854c777427c698381d561d4246f4f196b961e1f3fa78947ce22dd38760100d1e448b2617dde131bfc9b65c45da214affbf1f3ebf536c9bbd5e40c467487ec90185594a9e005ac2562e422cb92252a92e67883c9b7dffc95ebbd38a0d130ae104ca1f3b6349a3c88f9d71f52899f99a87455551f4e4a2bbd56d5e8ad54a64d37c8575af04044cc2e0a9de4bf0bb96adbefadf256831e5e1a5e53a4d5c78ed1efd39d4ebfceac62fedc5df97ce01ba4119dabe0d71c039b964d60f480f093431fb69b598ba47909e0b940e7efd06c4f34c874a909e1a3ec1869236116995baaafba7b02bc8b54c6bce76e3582a354742bb633d4539ca35889fcc572ff888e0e862462d1ba4be5a37aaf0e6b9c207d19deaf0eea1f13aee7cf4c6db0a486d5778e3f7a4feeacd3a703594811a4118c4935fd2d72d40f6aa2d3a244a16b5ad8eeae52eb03be76c7da3d2d46b0043c2c0918e7b9f4d9587f907d4572cfbdce3e7acea4dd769370684511732dcf236903636fb4daf998b696bab67f1ec203a8af24d67e772ed6645fef677228f76962b95e22adb70878f1572664967000a3b1d5f3af28e1b5ed1853e128735caf3eeef702191a79a9e1d069de70d3911307b155ef3fea44934254ed213abef47f0ad465583d4347643b1d75eac37ea9839570da206f0cc84e3be2d5b9879b16ef35ddaa67746f4ac2ef9e225044dfdfd6b7b50a8f28d594704289b2b0f652eb8827d16e38a7e7aa4a631c191ada3d5c96d4498d43508fd181be102c0f6e2a9ad149785bd1bff48e85005e01506fe2484a53f50c44d080a6071740ecddd96c4b530199173ca2dc1ef92e2e83f8ea14ca7b9e7f2f9b91f03c8cb4e19a221e612894b8fe4a813ae784305652471c321c0ab01caf9d4f7a29ba97ffbbdee7254e561ed76d9da66d5fe5b2de93f4c331423171354fff68727249b15f955e33d67e0079c4afb7b5258a6c0530b932f6cecd67475125fcef631211603c38c50e19384c2be98c42b549b23eb3b28cabbcf107d3b8d8fb3deb3452392fff6db980d6c362beadcbe3afc11d8644ced4041d82369e4e32976964cd7aeaa30efae292f5686bba773644aa75136a3eeb58e8216aa3ef91c8c1296216d24b46d2a7ea4b5e6f8fa5b1930dae4dde122b70e1fdd18f96ef08004325eef7a1859fb33e76b4f920f509c2abe6c431c5a792c737eb34da56c63b43e4040f5831bf361a8531d3afc2c66d124675f2090f51fc57225b52332d9bb2fa6b6fce21c822946d46c0b2669f295a092c6542bd0537f0886af534836196f68ba10d313aafd6401547ce5907fd47570f245cbc35ef82f6c2d660e1b03be18e604e87438b2e02c27b5101ce7b2548ec8cf70267591559966d2f4561a403a102df3a8409fc8ccea3062b011ba85f53a1e86d014b12bee559f13d4bbd450101db722cad8d7613636a1d9f774878f390ff8b4efe7046334ec6b7c81bfc7d7d27a080edaad6df09e99f2a730b5bd228288ddd62a4dfdebdbb6625985c2633be3bd9714622ec21b787cb9470645e9d4743d34771989fc3a254bfa474b7444f0d660eacfcbdd822656675c35e2b58c398085a2f4285b8db2a435b9d26d45db8b2cfc89bda24a1cc5bae251f0507522b63a0a9fe9e1133109fadc276745a7958f5a08ea5a7ff4f05e08663102ca153bdf033491d4de4174947bd7a9927f2a0161dfee9322af5ebb73d16b8fe9da0636186e8c0f217a76c6e6c980d6c0743dbda741360aa2caf7bc9bb87ab511ead8aff6fe798e7c4023a6654690359dbf6318c40077b7675d50a23a001c5717870d17ff15958631b9c8a1b4756e2c66db2ab15ca02c2fccd0e9dad34ab8cc673903fc9556689cee51e63748f87341d8320505b5a2bbea5fc023e4fc1ae8ab9d6b6ddc6e335b28fea2fce59732580c5e6e7284738aaf6d9c95af4f18d3247b06b89b25ce2ef5b10f278d2b23a584f265eb03bc1aba8f201febec87be15e4a14f8b2c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3aacee77ebfdd104004ad047a57f3b22f3d73e0dbd420c3b30985cd2f0a63c6c6ff9c1ef8f54f82921a45ad2e308c81f93c6156b97e54920ea6a679f745f64799821c7c3c0e5678975aa2474d076abeb79e66c7e481bff9de21706c2f72f2cba49c18aa51f4381ad52a8b7be0c3d692f2ca4adc65c3a921ade1ab4bdf79a07970b556503f8d3d91d6f3c9f1ed4e1825302ad53c432e5c31024e1fc10d42487a8436a0150fc3af05221e25507f8f789efc25cf8f86a91f5266d09374c3b432f56885bca1c87cd49d3f1164419b6e3e25db23ff7f371b39ac60cfd10c08b9a513a50c729d72a2f682b736516b4bd3b1e4578c2eb25c6ef36678b39f32e538ebfcc2328cb1161c5bdc12f4b37796a61a00f7c924d0008995a936e4c68e601a4ad7475ed084bbd24bd2d6b2510c85cfc1a44340a9822854679c23cb0ec784450bccbdfa08bf69ac108c8ddaf4d31e37eef6c45a8570deb7b068c6ce3e8556a27505ab6dfa092892f133bed364736bc4e91e017f7f41299aba34a7562072e019d2a7991f6f0b016c35eff2056995745ff9458318619d12e5cb294fcc7a34299368dd0f782e6dfb2225e7b0d8cbe140f16893d08bf12e9f802c6f4596157339f681cd96e001d61f9c094480b451fed7607c2f7242f899da53252d111eb9d8192c639fb5bfaeee74c3292dea01c59541967e42f1a33d89cb47fd8b3cca2d0ad01b567cf57dfe5e027dcccb7727ed4d8679b5f3d3188aa47942feb24d043bb266ada48cdd82b9ced1b33b46ae8e91cfaff36b6ba208a592ec2d6ecacc33a978e4c893f6f536a7e5ea4ebfc5189e7bc3c4ebe6d1e5db57fc2cf196fa42be400351566de3c5028f4c54349e703bc072cfcb48704e25f8688a4274be6b360fc8fcb53e787ad64c3bab174f2070a15a3d9ecef44f0ae9c9a0e335a02e45308d090a1868fde4af7d71a93c858fedd2d6a5d6d4d6cb2cb9b5c7b00d5c2dafb8a0cbd683bc4348d8fefaeec9c0310e559a7220e6d62edd1d24a498d28f04d157b0d508fd2294cfda369e23c9e750fcb1106c230bdcbe449e7e00448d23fcd49425f0478f8236a03c8c24f041e232df719e5a884bd0c58ac32ca35b46ff5be0f868e43b40c472e5866a56fc3b991fde1aae06f6ae9a89d615945586030b691c0adf798d18d090c34137faf0bef4612136a736163d2353511b1fde6dce2f70b152f376e51f8ed864f45ad973d3db3fd14cf1b390ff516a225d3505b7ae53b6c7580ca5ea5ee792f0273dbb2e81360016e5f4450bfd0d1873633f930dac5f8484a593cc45dcc1058e624768c8d0eded178817b32f3d40a369b6a35116ce3b2213c0eeb49ea1067a672ee0a7eac8e84efdbdc5c7a5c9d0542eddcb047b1ed0d89a3187259bb69c39a31270413c720f6bef0d634715a9a773ea601d77e3a404ee4281c5e7e7226d8a69975fff65d54b8b16fe5afc26e3ab48c4c80371f767c0ab32370fc128ed5fb5e14316a70ef982f79a1a12ae8181c61ae59be4b95f6fed5993dbcf7c07205c0135a1fb01dee79df8a2e9f325ce8adf3375642818c2c4713e8cf56ce02bc24bb88a3677d77ea685d456f26628b407ddd99ba83656c86f36a2460e4eb53ddb13200b8cf3ef953e20d3dfbdd181dbffaa557ff1783b1a7722cfe8adddc3e4749e81dd2ad512ccb8583f65d29df6ec7a2def4ac6558e60e41f0c9b5b81d2c993d3252b988608cb1b145e0fba33508f814eee24b0351941be14a0879fa2a993439a531b5f6f99396f3c7a06fcf9566b1af59c343680a2660ee8d4d301a811eb89db52d506f78dbfbdb7d9722059d229500a3fa3e09ff277dc85f0a809fbd2796f7e6b821585ab040c6fc37aaeba8a702875209836f8d11b2ed23c2d4003b4e4fc6ce64a1483bcb1644b82462f8448e9ac1e873cc1f407fa0eb7ff8b2d287fd5388b0b548c58886dcd335dff2b1ed23ce3eebbb708fb5bbd831c83e959d3faf32cc421c9056cd7e1500f9bcd28f2f010d5cb06309376960c95e90e704a6aeee7df0072d0052771b4f4c785d7b0676c0d8b9eaecfebcb808e4d06e9478a5723585925449216f11e8fc24463464ae50ddc0c50fcbe9764e1ecb25c5c98a10061efa31ce037bf32a51ac06c7d417fd49a2560c738221fa781cecdd1ae8815cf7054c4ce8ee68952cffcf8281af1d59ddc8f90edaa260cfe28daa44e2941702a172ec42296c7fab964de7261837ed6a69bc3a3a99aefe5d09dbb42bc13eb397b1f25acff3f039ccf2c6735fd010f0a589e69a1e24fa83285a917ac01b5adf92951e2834fd2c2f7fdee4049e6daccf81baf28938212777c851497ec0757b0379c730d51f9972b91a97410b60256de285894a880702b844937a6e208b4411c7b3c4d4e1fe5d667f43d8480843bbf6d227516927094e2f8240526a10bf2ba184e71a94bf4fbd79da81fe738bc775ba06fdcfd8e6bd67efb92565e7bfaa80bcc36a34dafd823e1f633b965df66a074a096f311437a1e49b41d931419dfbe7d61bd3a0220d3453e9a1f71c51d889d50951f241a5aa454894c4c221122c11b56ff6b9e9046ee4934b0f4b1d19c2c5637a693d6df7af26087eba76c1d3fa9a9decdc737bfcb30170c6138e04f0159b373fb7870294c6a2a8bb7b7d9ff189e4f5ff4596e5754a2970ed4756508f7189c4bbd595cc078179bdddb03d28154a8f51f9ca9a91f8c4ab2813232aac42470f90614bb016ca5fe99c47d14bd699bcf8367eb4051e018324eafa2f8164a3069b2ed2728c7f57b290d8ac6700380971ce27f0ca5cf62a36254de4d4e1164c40baf481f271622a49fe075dda10d8eee96f8af2560896dd3e0ad575abc03d8885fd95f234156bcc568f8ceea2f425b4846ae3f5ffae9c950b63f62f2ca546f236c16795cfcef8b898d3fdc17a009ae4e32ed76e1fa563dc3ecf4463d016df13e3a4fdff2e34a5795159ce98a7ecc51a7649b9ed4e83893d488b34d62e8b42680d26dda0c7bcde89408f63b6b50f20afce4a1fd5f4df6912a9463bd8a0892d6923b56b0d24ee1062c6e371be39fe3a2f5b8e8dbabaffa006e17eedfdce770c81b7df4a96de3ef78055046d11af206e139ea5782df99aba7471a3bfb810fb4c5c4a12d0f05c25d07c8b50ba537d1c58e7182d539249071505ea43259a008c89535aeeb28c174947b1da66edf62c4877344864c47a21eb4c15abdbb406258120015ac153eca80fd9cab2a57c6c554b5565b00a3f580cadcc3e56dbefaef89fcce0ca49397486eff311b49aea38508b5005df7c28be71c511ea4bd23cd6e23ecc6c49d4d7b62c70104140b5bbecd69f039f3749151fe9d7c9a41b4d20207ac4cb1e29f2a3440116ddb3f79465fc3fecec8c57ef78eeed4c3ff645bb4e0e4ae835711b215090bd7aa7f449a58ce8f4fb8777a1ddf8cde4a8f14b4b8afb12ab0f980f7dff341eb9e20b8ca7777525ae4140cbb592e91f78549a2dad6acbb043b16f43c2dad2507f0374d79168c354c464b502f3bcde6600f57717dba944898d6427a89a52bfd88545708fb8180bd8cfcc60b7fcaa4d342702349466e4d9e0e09e5dc864d55119553e8aff5c03933438eec05520f9b9fc52e13f2ddf9c1058f5c67e0da2f13a85774520b12d9a1df9885240551109b9410d39133e963d6c74358304f2d534e0bf63ffde4f7d69f08b467d8d524d78af84ce704d613b4762b5184a8f029bfec83993c52024fbe1af7bebf6f3b726c5214a0f0d4a102f58878e168388d747dd75668f4b72cc09afcf5df125100e3d5d9303578685d5e2ef4f71d8d46ecb695f5cc8cee952cf2712c483feae5ec201c099433062ad2d165a2f02b7a3cd6980d302f2db255c88f4b923805ce95c6d149c887c12381c701a47aaa33b78013c1ef6fc572c95dc93c31160f5a47c9589e6200520755d50596f2636f5ecd7c6bdb439ad884ba17f6a329a01365dce7682d71983e2e278f5539584885d34396a68b0f98ae8b0de9196c3e188e4f1558bf297d78915e1e157d92dc0e35bba1388b7b5d538fae4b3df83f7566c63f7a8425388f8893bec4d04548899ec73e70c9e45334b2c515fb7a5dc2d872045e94d36102aeb08e77a028770464e0838337b177ba9d9d97e9a5080ea06e248fd3eaae3d30e2d8c8b03a86d96d77bcb1b37e570d599efc4c52d14fd37f3f65b1c7047b7f6a33e88a921b50352cc91b98f5ce256dd842b72d7708b77608541bb0626ba3f057aac81c45caf051e862e38172ad8261de8eb78281d1a8bde2b430d5cba68f58a04e60c6f0cfccf54a4bfeb452a6d6af138ce29397b58a72b5678a682b3da67fed2898d0bcb34eebf98b5279bc3e8a20214321a7e23bc55b2b7613b1a9b94f2ce53e5981d0fddcfa9e2ac918d8ff047cadbb5d078aebc141eae8b1f76ea1f429309a89235535e0e9e1314ad8cf70ad8b62fd7cfcb64de6eb9ac54e84a27dfc3c774412fc72e4c18169a7bc03c919ed14e51068cc8eea9d23e416d19e6bd6cf2e6242da555091e78adf9409dfed832de1e1fc07bf3b494caf70e2228ef432d5c6989ecb7516c4baccea0018b56435d3b8fcca431fe5f25d58e531299c631c76cec260cca6ed05a20e33f4d1cc56b74962de810232b36e36e6eb0bce0fe1191a0c878ec42efddd071a62771c6eea92f5a730292e42ce4441212c79f93195b3294a90329d566dd351b61e92e1e1484d414e9acbae955efce4d14d829248a8710b4e84533e666670e8ab0f4c086e99709421c36d6a738a1f89bdf92f819d41db28e00cfa8fa60f3a34c0dead795d058455e6541a4a267a3497aed687ae78897ae8cad02e785d91bb9ebf33bd1df6b310ee66f4d736f557c3766c8c920120a8d5b4d377f7e1d5137b8c6eb585da81cc9cc6694cae162749548dbfc45863dfc575f2c2aa5db254be0167970d0c994577b045b704a6d2057770466f26e2bafb08e00c601069d323b9d59800e35a438bddd5d317c3c752d70a9e08435937f0bd9aa0687552222c8a2d7f8572de78be9b2592d852311a7fe529673c04065feb6da33d70c91791a6d0428798b4a66df4bd7870bc30f7a63f76fd52487ad46395534a3d8a2308bc273f1f763890e441cb39fef6e779bd747bd3aee7956d6c4ad4b7b82a204cccad981dedd4cccc40fd2d56deacc2f52a8a1c4563ae8ba5751c92e0158b990d0c6ce2b3d327be3161a8015d411ab36ce7f20812443092e998e1b61788e95d2c70ffeb49faf97587f04a2f964ec923a59cb429827af413037da228a439cbd4719f709d278ad1599694ec9e492e407b69f0d665df2d8274b9cb67d0cf51b966a642c7df94aa38d225f69438be080721808b62a66f84631fd42a3696e0f83b7b91000a98da82b548febd4de43d05a77fb2165fd37ca81e7a1c4419621e55da7bfc8243b23f3bd023e7921c8a0d4da7fbc739d6d44cc13bef58be171cd2911dcead7079140cfd11cba91d0b1377078fff869bce9127f643e5524338ac44d38ddc6c71b5a688ef01a90c052165c35ce8f2b8e54ff1576fbdc4d07985fabc44b00d032dfe50fd3a2723d7f366693973383c25be62df235531f39b0805ee820c11ca384d5cfab1050ba2d48ee30720750a4595cf0d40d2d027dc7b99c171dd523579d579d78ced79368fc97f9f28c289e374d0c05afdad0728e637d4bf69173ea684a05878eef9be2f507f6da2b265d84d339d3851fefc23bb79996009c076faeb51629346091dfb7e4fbe01f58f5289cfeac6dff92b074b69fd67e6a75c43ab8c4ae2d149c3a159acf24de39fa5d1c5f2ff115e5a6c15a8b9da6a0d9f27c57c11d5eabb8a05ccff40a3f6baa8de29b43cdb475d7caa6f6233796a7efb074693035c40f910b8e815c2c97f2e1920a47d37e6308368cb5ea05f402fe0c3e60c18ea46ad32e4c23bc5bbcbb1e9f95588496b88937925b9288ac69880dcfdab60344cfbf90e0c0d0e35b213549050641e3f5f2a39e7bb5a1549efea261ab33e8a0eb3e3ec37927fa88d2f0830ce2735ae889b32eb7333986f05629cea41ec87d2d0a6664e527d0253f6ba120c4885b0804ba70a6fc8945a7ce5a81892f9b16d809faeece60ad67d5598dc99b2a972bddbb10c188d8ce687861248c4e6ec09dbdba652dd7d04a4d7f79a1c05e897f64409e251c60f683109d3b4ca0ab0c0fcb62c0a1aa1dbebeffa812403bf77ba1a2d5005fe7bbb037ec7abf2b751b61d92e7bbf68ea0c865c0cd3b60182d27bce560f9429b9e5b06d4a958f49600c1acd456d09037420c1a1e386c74e3b8bf4260c54bc2b199b5183c9721e3ef819914c9ebb3009cf06eb411235e88ecc809f7914590adc7d392e2bd794de74b3b06fe798fab6f4510b8d8a17657c5bcc6cb8082c60e2b66b4b90b5f3725273096d012ed280205bb0cb030d719a052da18ce883b310f6215a4f43c2abaf1cc29fabef72c9ffee9854a1f64baf58158ce28dab5c26fd97d5c0b091d27e8f9fdbbcf9a563edde8442b34cc1c52f041ff215db7af2167b4a2c351c1555daa84e3707d2ad62cc9083d363081ffa8f32a6e5a1e2c1f6000eafad3dee48dd5e9dba5cf6c3720fd4aa5fd2da804b5c3e782ce01d502ad8524c2ac131b3a6c958b476d600588dbb94a08ab98031ee7acb292469ee901009aba83e00c6e8a9ba7790e60acaee7b069b07a7000a9973d693ea2ffbac2f1c1a6a976c044409ec1129c78a83ad01a4714644174eb02375e0471fa21dcc89a97b2dbe37145fa3c87dfdbcf6d92d4ea47c24da5dee476c6f38435e1d38d63c42bc537121e97022d95151d59d63d201f597b55f0d6706d0ba3f271a13d54fb3625e7a54aedc0c23992bc4c600cc21e812448636886194fcf17550d8088b9f8b92c200dd4064aa02727dd4f2a37a935d751306057146684daf6b5f0c7dc44c215e87957f892bd06c1fb7f0eff7d7bcceb873c3203a8df74f4e91b04bd607ec11202f96cfeb99f5bcdb7aa712909bf4d836f73c2b56b0d87e5988d30ac3dee5d7722a9322ea27a0714026660ef01fd1f68b0ddf8b484772674aa165cda9a1dff0eef8f92d076d5725e85bcc3988ebeaa62f382bc4a1ca6b76bc8bb7090a0910d9d12b5742b5c390473e7b3826dd7885639e06bf7bd5b20a4909986551677d4f1ed3223c1887d2d251ad15485b605e68bb41e9f8f56686f53acc67ef1b4466e11c6f8e05f2f01393d1deba6b4bb3f5db19c56266e5d6c1a2e86f6ab2db235e5d7f00cf438680fe5b442dcb1f8c3ae7730b92f097a1a8eaa9be8d216f2576ec3aa321567337bcfbaf2524d7d371779bb70d3524f9dd4f7a6049801c626ed168ff155bc4137af6a3f5f14e5135b00cab1dab26600bed5ce96d05f2cc3b2ba58d21622a88b2e4e08fd63524d7a4ac4c6e2d41d1425c5633c036705fb167f075a13805e814dff9ed07a67d22cbaeeab97d5c7de04c499c76974315215c6741b44da97d4f18d92e8eb40d15d2bdc2dff65121cbbdde824497c71960e23db78403fb0c34b9e55cf7381d70bbbf2e6f1065722397d48964d309e82fe00cc5e75bc731b6c8a30ac9e89b9c57bb428e3210a968c88ececd8fcc6f630d1f1b95652d807a5fa5a509be770bb948b1075d8a55149d86fcf72b51951ad0277a992cbf7dc23d6d583a6289271b0cba29683cf6523998f58ef81368d1aea8158f0fec64c10f13565cdd95e87d4c0f3270ff7cf48caae38aa15c2613e69d633dc8ea54d38bb964a13009242aee1129384447ce1388daf5bcd07dc40158699a26c4a306ba6273d9d45e378deefe0cf3320fab80c1db3c581298e78dbfab85a566eed47257b9a0cb7643f343933181e5c63fc5358dd85173126713e38d64841d64c3f9185a05d2b1fd9dc6d5b60d22894b511f6cd614bcef32c7ad5618f7e77aa6c08b792fdb8c35d0b82cc4d605614667e004974914d114fa36fe65e0fa2245a381060547af2fcfa61f9f81619ec0b572692f35455d209cef31918353cfc6f6e161f35d40055fd7d45089abe75dc35f1158f9d759624ddf7844014f000d4816f70fcde197527ef6e1e795a4e5b6db9bbb4bfeee03a89b652beac8297427182e5ad70022bc3b1f9565312dfcdb2e8c03d69e98f9c2b4abc680a240830ea1c995635434913d03b44bb4e9cd243649571009dd727b14fae16c0ce7151c5df1dee4c703d5dd8860df82876dedab858bcf58bb94f5f2890ffede3735b035d0bbcaa4ec625e382cb6e3c2233a2a03576a57366231adf08d583685762aac7015541f5e59fc5861a89a83833edaeccc1a698141a45004e590584b0a6022644b8a5f3f69763e3eca7a70115e20ccb0565d0dc002e86c854240a48ec57ba97238ae31bd6ef7a48bd310dc2fbb7f8c1f328dcba5e2a4d3c9a70cb1845f3f4c40b7ff701bc724cbca2c1a332113b1a583f12b27a56970422c845303be3011776a5a0caedd1aa4107425d519b80f5d858912b3b6412fc124386ab21fbed098b7599f442273d1ec2f04710ff436f6e9b88907c5dbfb7e1df677aab869e8c94b7898e8348f62756354056df9573072cccb1e50c01d570ced3554f4c476de729057a2c56c5a4b7db04bf1ad4fb7370b9d19b38e310ec634c56d7ab974db02750dc0f1c749f771734953538f6198bd19d140e300a704db8e2d0b337927eaf7391a41106e5c0b86ce9526a5b4dd703525efbd275880b409819a9b29a47c3b1f475c64991b20eaee183a22629e21e221d86f0aeb065c70c2b78499c7cbe0500d183a87c66e273a39b89ec304abcd432579d5a6c89aa8efb9887183987fe2ae23344b3752d7dd6ddc5839a5167e3e3792b29a1d2a75e475308ce7f51610f1ba0423e4ffb8d8c1ea585f9135128603140bfb42ca9b389da5da2d6e4abb2f9c18125fbe5d52e1635430374bff8343aa8ce3bc565b854332e618f26b01023c403cf0503dbccb92302ff697c060d34792f6dc8e5b3c933652da7f6464c485b79c8d009dc9ba8d6bc6d21dc97505acf26ad638e9a7ea2f727be7600bf1e1b0320face5a108b312ce75ef0864f05a5ae480cf9b46f2f0c497fc918d4189051c3bf800f1f27152e64aebdb58f2b8db778e7337762e92ccfd17737d39cd909b1426042dc81a7a069251972b91fb35058d60b0a25c292deb33616eef07d8bf104290a287ca81a93a8182f66415c70b74f70bd794af9f1ad802164d7b6a1b5af121fc61a39bb0758b4e5f87f9871e92866ed046830328e02fd396ada6f30dfada3cd9b0059e3f75655337ca60584a60c63f6e9bf1d93f243f3272fe0615191527fdb91c2254771f552aac4c4cfbe30cc0f3273665a44a4da2b92bbcfd62d54066df0b048e510fd9d75f3d7bf3f460ece324aaa452f6e2c2d6a23179114ecaf3137b4017ae16523b684b6bd819d45c87c94e59645e33913a67b824a0c63b52b3ba3d18b41606f6ca8489a7ff031e2e73dfcac404cc0cce0ab25565c2a0db04e8d7aec5683ac555fdc894824f64246f2783446af430c501ba62f4756d15907a38d83b06b2a0b4085b80f68b47a19987197025deb1310ec4dfe62ff3feb8edfafa488c2d11cc65864a5a1a13863ff01ed012f96fda214c9fd1b86231f5ff563fc3a4fcd904324c4860c099bb69b3aa9ed1e839becda600eb365635eff15d6b811b8a277b1856fad73530dff390912b7f956c514c0a23be4f744c055e6f57909768447683bcced3ab1e47675c695d1539911bfa882e1ef73522066b3dce7257cb408064936ffe894ca250ba46727bda756b737003981c2e24b611e1ee9d3233952aba9c2ab06a6e24680963523a720d8b7b0f6c4ed69fd5a6b6fae3e16a1bc69d8d4f67aa1c9704dab5cddcf03fd40114564c49ba681e70238b2debd6a393534ceedb71a202f8dfd8320aa1b0d126678863c682d6db1ca033c937840ee83d9c1bd5db249302247195536c3c14bccd935049eac2349e1ec84ff784272a868ef392d8cb0b0da8ae4caaa05f068c514e37147f3562543f997ae08ca06f8a2cebec3a4e278f7254dad3709f5fbb882d3ca54d5a42fda62e111a9dff28a7de49f8f88acc7d4c51a54ea89fa6eaa5b8aefd7053817ffebae82a29c0c5697a774c1aab0cca38ac2bf87e3e705d8c7f6e55252adf8b68eff2fc294af1760f41e5c1e57628dde63971ecedf7ab39b18349ce283739be8a3bfee8a2d0c89776b8ba49cdec675e027ec3f1228698b1f66bab589b180ab1408d3f2c3b7d8ea02c296522586050e119e68283904dd16cd78333b2d26fbb0a483e24353783ec06bc2e670a09947e0da8fb4e32dbcfeda0b184533b8280d30ffdd94ea24b9649519332405f45db371a1c47878d497f361420c98a71100deb58dde93ee1cc172f074ddf71a0b1b724ccf035bed18dfe533db1dd59e20f695c6b64d845725da915ae48708b6cc1aabf6cd15054ce0dafbd63c13a421cd515bece2f3122e264ae95ad1fbffe11fa487f802c21f9d13d25ed4cfb6ac37005b57ad7999e37a065aa178a3ff83a3ecff2edbd5d151e69b0d35b5fbce96e8a15ab294e3059f43af52e13cc25c3c051b74c727b00c42315fd4a9ff2722093c989793268800ef91087ad32f97dad30e954b7b62fa399b85476ee23cbd7bae3ccd5a23edd1517b6df9199cd88840f0c740cc71161a2103eb3b2507f324a12def29eb897024c2eade6a7967bffe583a36053fd2ca7a8c2369233f41adc45c2d5e9291ee37ea19e4ed43e05a6d62e85a65cdebc5078142a30ae705b7f10574568ff1957acb8c1f13a16c979d691ab9f75c7e197354970a2ad370bf92474fb0528c2f3f54b3709c1c02cee6593b9093ba220111033924ad60cea4b5f9370ad9c65d32d7a5770058aa184f14b66c2a3d4bbe3f1b9e3e90f4ee026c2e154a9eb75d08e4a594a0a31a63ecd86bdb835281513b1f7f6cec44a47c77b1740d077312bd972cf14ab5c0abef855231f1086f25759e888494caa688b13659cd0af7f1b28e11f102ef3ec1d4f7eba3af1f84e8f25ef164733f611f6736464d8234a0815f797f1d21aac30d5b2327b52d8e7e27b0b43c9a9494371808b2af76dab28c89e025e89796a3cd0c081a406ef3657e93272185122fbcd6f734ce7abb1fad4373fe3c5447a903e326a5853eb848cd0c941e4bd6b48cdec625b332ae03974c4ba58163cc15a2f28ec3f80b2a7a76eeb1925fda3668f3238d0b4d8553388cb82e89314456e9c897554bcb550b9cc3eff4f5b077ae16abb3b510ca70724144187485d587fdab641bc026e40ae90578f95e26daca44a6fdb5c69bf19a11060895a30337d4c643bea557bc0bd3cc9fdc33768ba57a0200315146168bac3b6f1f57456a1dd1bb991e5ea3760a58bd5139c6c48dd830f00c8fb1bfe8604df564d385e1225029e396cc6e2bbaa840c303d5d9d0943d9315b35efab879382649cd6a480093988246200ffc77f1ac34e79dfa9523099a4c79dbe857ba31dbde3e922dc72925bc85ed2031301084dfdb3008ee224452b802246d73ee4c78111edc9b642be44086d9df7f78337dd909dea62af9a7bbd95f5e1f5248e7f6b6a18e2cd0579b +MD = 7268dc371d074f606ba817ad4a8868e55f391724640f2f2bc85308b2b27aa312cedb9427424dd909abe8ba28b6ec7e693894f867712b86754bdbffdd5eb4654e + +Len = 95272 +Msg = 71dd3fd4d9b0e6c8835a2c63ac37d7e4e1a987fc67f83b39d95d18c5135966504f4bdc4b8e421d573a1082fd09a01a9f2489efae89e28b1ead59bb17667f93ee0966b253cf6ec8cc7e5c556245acb399e72956a61cba53dd347f1f69fd1c993fe7554b5566dced0e98662bf92804a9bc72b1434be727995eb3f8cb219ed9812d30412fb719339707d0578f2c795004ef0c4a3f05b4d2678975eb47a9125e529f2e51e4e3b11bcb9e6d5706620237cc19fe1cd13c4963c446c1811c672152147c27aef43ff63e93bbb98d1a0489620a24914e81586f81b97ddee1d1c5925ed0ae647fe735af41f646fa225278d779c6f70a08d7c1eed44c161535ee292f298d1c2ded432ba6cffd28793e3627b423067ab4745ce08e0587f9aea2fcfdbe5c53aeca20928ba18eae477e074f79e708d495d6b7971b17bc720ef15282a8089e2a4c823f5bbc6926138c50a824d73ad13730b7fc10db50a0143e256d0892d5981bde9e732726c64034df39473ea773263833a0695089025a756f941a1623edf12d4c66e37d317f8417297f0d23525baedd86d926de8bf5929d8a848235c31752697e22b8e5455e99c6506b215d41ba123012aa5c424bf1ef95783ecdecda1d63d55d1a19e7ca2928493e45ab74db58fa39bd5b33052fbe19641f0a22c4d0c5cb7ccf962f0c28a9d8a6d955d5ee87fc0cff7033d2aea123b912692fa9440dd83363bddd21dbc7a652e70be2c555af70f38a147b62c508ea77a83df78cf4f91d4294103818dd10e83d14bb36a330ba7a55e28f7c0ad3ccd9fa2d82a8f05cfd5ea116aeef3c9869364233d197980810e3db10cb7bf35f54b9eba9228bff057f61f7f1814ab4963b59094e344ecc6419722c1baec344f10a51f12404e8e176e9efed2d7090a95fef1a396ccea366cc3cf1f10b229b2611556bb5a71007be37a1d02bd3620b4279eb3f7a9686dd8ec8e426d1e80e4ac1489dcdde392e2fbdd111cc58eb4101a86e999076d344466ee176db75bb59193c1d4b4015e346aa06cb9fab1c7bf4bb02c660d7d22bf0242b9e5bd6848ced50c019c58c02ac40bec2adb534218d63817907a7da39a673c0f088fbe0a761b13774c274794c9c04b41900ba300c28769b35bbd862514db362e325bec086448d1581a3c0cf9cbb7bd4324a1668885515505d695a37c22799522c000d40c83c69340e41125599128b65361630a13b1b28e91a9a9521353c0dd7f49e4e2615512dda4426d0d4eca81db14ce972a6cd8297ae93d5f1e85295f83a6389eb3b178cc2504bd964153c851afe9d4d433ee7924ae7f1a2d653c03940c4a0484a4773f40ede4ae234dd32b2689551c90b30315429dc5b89ac2c2830cfbad463d512d492facb69caaaf77636f1be8fe6334552cf1dd5fa13db3931838b672662f263e06c6e61d2172c2aaf199bc07f2a2145f30b0c19f5c7cb4384395e12bfce0b033f8d53e6aa54243d856450e54a1f3ef8bb11e0f1752ee411c85a2f02c62f87bb9afa8fa31c06f9f9a21ef773184df22553e87fa5a2ce8f6da6efe580640bce5199bc0ce04db71326ab4f78b3103ba6966298d37da332321dc6ff6ad4c1ec488de3dcb0e568eeda8c4bffbbed5b71c011912ac2c0a1df37eacf92a54604595d39216265f99334b6f22837a7692077aa5f88a536b8c35f049c6ab07e1e56db751bfa541265f6100f21eafe266e88d6ca48ee1116ab323803fb3e62dda3def9f8fd17bc9f72bb0a4de23a5d2045bb158a936b774ae215f59acef4afaa1ec53b4ea51fa1f36507aad8fbc05b7b37e0bc510aa9deb9a5951b33df33a0cdd73229dfdbbb0cf889057918342300208a205386734d4e4d3cda3435f4a43c2f164e4c136993049525dafe76570b54f786a263939702cfedee0bc808d6ee8bb623402b53164e91b280b1c1582a2260e8758f73df3e6e6a8104515d144dba954b45314e05a995bb38e3b04b27770d2bdc9d0e0cd22f3926f2c6d37dc021b063d7c6493e93eb0f8b0d96ff234c0477bdb94848b5d4340c0c267cbaaf761977fc40ecaf8263a465081ae1c7d12d99061f69bc64f64d138f22066e2d7c9efeb86870008ca2df9b3e3b470c30de34006258d2418b57a59569727ae4556a9e981ab04d4907276d9a432a7d5e61d1c8003470de21e561448242046b255903dfaf46dbc111499877671cdfa22083325060247074a2999b93a2c4debf7a62cfc90be3f1b39e7a7d64cb70629f9bbd8a36e9d95f7b0ed08ef8bd950a602b9855c5739afb0a3ac05f9c8ee7b95d143860e163fc45ddabb1c0dc9a5d903480221d39b113ffb02b46c487782aeec3d61b3cb996342b81c265bba802c57625c029af8e8bf5088cb932378d51e109b8288fa626492a184f9a1307c2bd74c61a35d4942dcae91b862ead3d16e0b4102651bc27904686142f7de42a94931488fa254c537c36964286d0de608aee490df49ac9465f53ef2709b100ae844c4ac2afd9b874e596a58474e9ee2751434b070a4bdf8cfb390d5ac57f8e1bfcafc07e2099417fcfb3bdea38bf041ad3a7600750ac2580cdbf89b44b2fb6f763851ec335ad0ffda256877abb9a49c278e23014ae04c4aa3baf0b3d8309a2cc21960b9ad65c4976c545aa3ee3c4e5a6a9bb64360c9de392aed03afe565577219eaa3009ebef1870a249cf3e9984ff4fccfca47552bdabc18fe9bffeaa5a607f4189351b5caea375a0299e81c621bf434b6b97da68ad44be44c341466961836d74fac1d511e1130c27afbe0f50e44e0c8cd1e66c36b5d511372669dc79b208739fc77c41f3d08fbe9fa1d8f02115d432f9f53934a41c8643ced9dfcac495181928b61066e8c3401170c8932d1ffc783bf8a136389b2c81db73a64a183052dbe87890224cd9014d8f03ec98cc34e063b1f39b8882012beb618d5353cca7307867f71c5dfcafd3dfc0bed58ed8470bbd1b51acd51ac062ef5d84a9a1f01078171f0d24667d50811e2b0a4a1e563fc3ad027a9cc606be19b258bf70dd8b5273e296236ee8d7a65331585014f05006515bedd6330250e5985fdaa870aea65766ff569fc48913989041cff6fbabcd83fdf064cd3932001b261c69a670bd48069c96e7ebecf1380d82751966c7f8d69e0e94efc775fd1c4a0c118f213ab179475cd0cf6daec94eef6ff6bd06407e723fce6e172cb00cae599368d38194334102edd4988fd4b95e25a0eb43402ee6a94e83a76364b206bd300046bd2f47eba91f98cbc9b824686e975d7d347b58d783b376665cd7439452b79ed5d6911b80b887a5ddeb4f687f892deed4161e87fa0956efd488ed2b5e74d6b43da510d79b77205c3185be66a5b4cf9a17749383f742203519710f310b2b7589a6b31545e3ecd304f01f6ce783f965aa6fd341147537f7925c9fa31f437f7c663786062b012189e74142c1b2c15fd76603bd90021ceec54cc59913bbb079d39318a84c529c1e284b4d74259106ee0d16fcb9e814957170ac7ee7c5cef820625872a150825de999793c40004afaafef028150b11388c8e1faac11231fc37d12fd6df77982eb8cc5b9352bbaa646a96672bb0853c89cf9017e7a9f9378ba96c9c930342e1cf00f935360bfbb6d92e558add16c36f87a0eb7800e1a7f9f84757005e4dfd9161178ea8ee6836c678569affcec01c36eca0eea47900a4e5dca22f0fab081e139f8d1b4b3efff335bc83f51a7345160f13302841c29f5687a34a32fedbda1ae4d4d22d80aa2bc7913036f28f6d0e376485df16c47006535be6902172932c7a81ab7713edb2841a755ddff1a30e93f6e3cf1e38a103fe11df112478ff5387c3767dfc8ce6ea91623eafef9119fa6eeae9597e1c6be0bf288dad6787e98f746c3fe6d2e700a4cc4579a0f64f4893077a01bf6f1089b8f1ede425e9fce5b96b0b4a508ac0cf939d2a92cb849ab37ae62ab95b71e38edf0f087f152c366863e3f722558488a8199c8836aa0af1df1493836cd816d3efd59edebaf59ed2e61167d6546060cd2eb942f4c1a709e34ff297fab89fde80213f09f72441b240e3347f1f5cfba00cc7f518e6c05cf1fd7a875c27192d3966d77dd8d85774170ee46f8238b8a1b2b6184f96d4bf36638ee355686f0b0aa7f6570493f8a1173d9b6e0529c8d3dd2957744b35451acddf362eef35590aa2aacd3475c3eebdb58684e4a7de365b18746f705a8cce6f7db58191b75b6b94afc24a0453d110e9a99249ecca08079aee147ca10ff5c729d086efc040332d356c8efb2af15405d19dd168fade3fc33fc889fd6ade18d5d670d3df3f1c65046973516f3d00b543e1fcd4407376fdefa622556052376e60f1a92cde729e5987ad5eca04aef48d41b7311b8efb06cae35a960753ebce5eff0813e27bef58992d8d895959e53f3485bde507a306102f54e99e00268be57306963ba52629ddac7c667d7fed945353866283290b0925739acfa4e086d72f332e087ad56b969ffbead4c5ae2e20d362da4196104598b9605b794518c3420e27cbeb6c03cada021fff64dc749a1f31daf7d7882de1293e5ded72f9298a5104b966cb89b0b258c67130733c63bfe3f1344590f4024c2f36c4e7492b833a88957095055e5cb0873fa814ac5fec1e1383f76a0a440e053f455dcf6866c6625d52e5cd4554784409e01d125cd18e23227caccba002d19acdcc511c5d35638043af7175f7f683fb455a58c0211bba7d954dbce0febadd8b5f3e67349411db12d01dbc3589cf1044ce00e39485b9016be079b05072d68245683e08ceb976ad9897101e7297489d9f08663605f713f3aca8831f80b8d080577d2dbe4119fe4b9fed4910b39cfd9c88890cd89af1b6f18e31ec63081d432830029fe01251f34587570b5b7f07588d8fc46733da023c8baf2138233d3ca90a7d9d0716d8de001bed78f9374b62e3f1134f07e039a50f427e0ad8c8b6737ca78eb0f5db0b3aaf4f40a7753c9f3c1a67c19d615640569986793350dbfa7e388fe1c2eea50fd45b501f8701e3f0ff76420914061e749375f83f5f22c58fa96714255743fd7d578ebed87c41c5d7298220685758914ce82ee82ed2e12ddc7172d4b7f2b85cda20c3ec1a1b974ab856c8734debeb673fc11f06c622fe6d6782f65228099e3b8cbca58842d994fb1ae3a3cb48263108d3cae0b493e3fd1cc74a6c1cd42068222ba77de3e13aad4f856cce88e5bacbee9f41fe72268a4fb462344e856abbc8992d6de7bf73b352c07e6e834c850e0e90f8e2d2dfec8a68bccedd083c4a502219187c6d5b88d817e66c457c86c4849b88870a085e6468faae63a143920171f72a635f69488f1d8f39e5ae04b812d2d54db044096e1caa57f1d72d6b371e85ca359483761704f80b3360f4d6610e6d5e490b0d509f73c3233f8fddf98bf0201dd322851e4778fc2e5b64a65c0205b899130de268530847ced0043f791134c5647ba3e0cc4a599e6b1a675ef02b974918342f5fcb3958accd6bbade54674aea20a78f030a9025534408ff7b4d3e31934e14e5d1f3b2d376916b3a1735eea102f4df4a7843d97abf4baf9387cdca732bbd3dc7d57c401719dd4708867827d5a4339b7ccd1256b846d476aa00ec40ca76e8375bf6cf61721ae3878cb8a59367427f648c5df0c86c6e80d6c9734341b609516a08a257b7930e56b55d0a48c1c4723ab2ffc7698f15bad378685b4d4db4578b7e6474bf82f848a958f017dc237b97e80f5d75e71b32904eb41d2574b543f5f8cce5ca6183f07e5ddacc5dca490b3829e21c05e40d41a355123e6e5428e3491bde032fe80b39f3d6c36838bd92e1e752d3b1e40ad5d158793b6292660920e5773a4311bdb9236dc6ab5a5500a1ae0a054cc59ca5f550144d68204e24e67b3f9d6a3c1c5cfe5b308feaf92f4df5ae34b3c5bd9c5ffc4c8b2450edde0b3150dbf0d644bc304b3fe0a50aeb23ffff80dbe0d7005f834b3511905e21de938a502f0416f35de2404ff2a89396df813fb4840ee93472da72884c341862dc5851e7cd6994de9ded4e19eafd1d92be9c26c7b1a074d062a002e49f71f83733c418862b73e85cd8bbe50c3e34f1454d8b5528e958125abb8e6ca88fcc75f591514eb9cdc579f4bac8a5c560c2c75508e94b568f784a49c9f0106291b62a5461aa850118d0d24ca0be00a3f738f8187d3069ef388375042a7fae9149c18daa211a2beab12889bb26e66646660a1c2626eb3131692c3b40598797b32c71088d4c3ad3e51b2ef8c6a9ec771b31a8abf4729441fb95b50554e3925c569e3733646f86fd7ebb66a7f5c63a9390feb71009fca61c7c42c05bd8353a7cea23a686d5f789091626623fdef84b5c560197e0ed31ab115204d0a730eaea69fc61218b4870ab9749c0a3f8d8bcb921c90eddb7049e1dd10b30688ff5512cb3ebbb4ab932678928982eae9b898fee84685afadae6be78cc0669fa7eac247beb56b684892a488c2d7fc4e47057ee6614c29a71f51a0f3672e225f8ebabb14260cbc76173a6a03f266f37d81fca64ba335621d56e04fcf1661cd9066faaa43ac4998254112deb0c93f4dc0c02576f556091a587de3e24140615078562ff69af776e6beeea36959f069f45f2c0957ab23d138a1bae2c0128d37945f87e307e2b09a8e89457374c40eeccea2ec2fb237b294a4403566510aa7ea808f209d45e27ebe77ce6f0c65baccd1c5d0291fed5faa5a467d18f6fdf03382fb4f4ae618640ae98bd594f6a503d21fc0330a6272ecb32b069f881b2c8edc08efe62d45e82efb23b1e5dab79d67c7dea611b87fa7a57710ccf0af5c46aa4783439df0421d0afa74d1486cd9b4ae531761b35afef6549b1080b6b541b30d1ffbdfbcbc651fbeafe5d44470e4519f1fd1d8611968c6bfca340a3ac252db7f0a79ab8bb8375612c17da0220f5ede04d314f3631d447eafaa8352c4fc1827c7b0038f510d3f2bd0d9451e2a70d1c2a317e89a008d1a88ece305409c8e1afdafbba47358e20504be9e4336a3bcc465449156b58191734b3e1ec2bd099ee0c6fdd0613fe660124aa6b981d1d71ac02fb1ec652c2e53d52f6d03c3af5455f3eb7a9944db44aeed664ed107d50cb34c88b1ce1ee74ff8cb9c40390f00c6dadad2eebe542fbaf61ebe7e8fdb2c8baef0d80be087cf2cabdafa8169ae96a5561de521e799238f5d2ebc009b07bc9c34348788c9abca0d928cb1f63aa95b39f0458bdabb1ca00d0da4c79b9c936f866da1fdf0318fc139d5682968550735ccd1d92be3e2e48c7a2e0846163a852b9380bea20bc23d9df99df6cb9e61d00ea420612f0205f9d11fe7e3a33a1ee7da099613dfa022bc449512bffd62070ccd0a0666fe00cc64554461bc45cff0c06331d6291a79f914a0555b4a287aefc45a46ab6f00a4de2c0231c41b949d5719ae536987bc5cf04e9880a11fb5afc0009da036049db8e459be2d3788f86bfcf9a3b776b62e12ae7013600bc70ac922c67e60cfad3d0285f47381e28cd90287682aa4263cd763dc85fb3bc2c99190bf20e5cda0f3484c6a040876eeae9f2b9f6f2b64a1a31e162292375aedadb1cc3c15ba30ce5d265c3a9165528377b2acec148e3d0e726df527a1af05b5fcd14444ade5d184743ffa9ea4725dc86e7b4d18613b7895322bc694b94b84423d5bc17df14ef8e8befcf03e4317e1e61b60d8c85e1a5c606abf5210e3f31ebbf8b60b8fe8dded22c5c305c1793c240506ca13a612143394a2936144268f1c48b64aea239b7bf75b11fd00d04bc96f4bb822c85a850f435c630ebbd88a07c613fd7f26e1100e60bb2813aa12c3a60ae3b8cebd8cbff4d6de339827731743644158bd8670517f6e69946bcb30e8bb3df38e38bbe3c9ac32429d996ebdd62b3efd4c6cd37966b76a8edd6f2bd1c2f050a4c3c68907aa1e9fb126795860cea89c6d63f4d5a3559d9c518986919e5a2e8a1ddee2f1a16a31675358a1ad0107a0c5b924bd549728184bdb2217c63eb75b358767f3b95912cfd14fba77354b8afd020a172f18fce712c053308c935ae1619709e661aad6a8df24cdd464b8e35ea59b88c5b3e87b987244e2394cbe9ae126f8cce4938cc13748a9f72fd1fd748b82d85ab5af8ebc45201db0c7bf0fa5be94a2f7e9f327c1c4f4a8f35224cda41a7a00a96f8dd066f50393e4614d50248092dcb37be8427f59ca68e9c5c7f01b12775d9c7cb37721b105f0a7905e47be3007ed2824daa7a2fdb2330211202e827b60355c638b4b97800d7a20da5abd1cd5dd1e7d6b311cd3b9944f65bd994f815e1dd110ac7b136d6a047b78caa97be677fbb7dbd8566aba9458053c51981abfc29579e1e0ed994e77d039d6e5b346c31e490069f4af59fe96e79dac568758e5afb275f78648a3e0b05afd63b5e1e95bd3af405046a5b048c7275fdf53cdd19a2d5b0c7926f4facb1c8a0e46c1992a579d15c1b757a1393f300193fdd0d24d874578878f495966b8c349b6a89144d35f8563c9c7ad09ba8cd85d802d55fe9454fef22e6376dfae4fae7d3bb1ae4baa1a9281a1a7d246fcd6c7246f986bb96da861af491a35ee9c37e40fe6889f147831cc5791814ec1c7c6063ca866996ba22b749820df0eeef6196de8ff56ec09044b3bcee07aa7e1e2049c8f73be687cf9864195fbd88a47859c52eece421e911811e8ccd8bc670d1737910418c85f543b61d08f212d306111699a0b9a75bc137a2bda3abf6f15af2c07ee82deae065b3063276cdb0788a462274d26ad174ef9f3401901deba3a2eea1ebaf30f95e5fa9f355016718e1b793f7f74274d4f5caa4bf8ae077dc65df21921fd3ef1a78597517f53732be97046711916f5c3456f8e4afda036e4bb066381bbbf4bcd0c6d9c0fe8366d50411074c19c3b7a57220e0db8f4f7755ac0bee9e9920902eaec256f9f1803eb2abd816cf4b1eb9d500ec28f5c88bcab28fd0bec1b4ee24b926e367ac9b8c2d4ff864d95d5ff2f46f830127cff5ff6c2979b78d4dd98530e0bba27235770791218c3fb562b2f0e5d95b1863c6921ada1edc28a09f81863339ef980d40fe7328cbd9d1419bde891cb70b8a6376277e9307299cbf334751aa29353caf4bbc6f42a363c1f4554d3bf76d16efbd6b209b3577049c2fa5857804332ef8beb21b4c8d4cac7a442b897a047fffb0c7f207e12fe2df9f7872e689efec2f64e200a5ab472c2662c77b1dd3c264486619b767e0f0df2d2f3007c4d7bbc8d8f98fd3d5fc3ec66433e4e074d9cfce63783937ab3b16c07fc3dcf0bb11f63d9e3f3e9846dfa2afe83622e818ec7af2e37f9cdf5c20004b49e5d5aa33a93ddef1ae64ca5296315d251207fe949c52964ae4bb3ae5604bb41e1dc0b0b90de10175bfa8f693d05932ad301aa05259f50d0c402ac6f15c67af5ec41490d5c08e699ceb5189851e88d4d318c159ecb5c0eba9fa51ffea74d2a1ae8147b6f461a46bc9ca250fa0c15ec84944a297be2044a696abc7624b5a1b1f6fcde0bfaf51b17c9ed469f561793961724c14e6613a0ec264bd018a9e7cbf9d15125607612134308e82b6e76196a754e087bed250636db396a686d55e4d2e8f50e74e2ab440bb1c1b6d82320bba3707069006c8162d101eaf00cddf055be68a95c50f9613409493c7ed5281da5456ec76ed63542d07645810544d041e198603463430d5f8a18f3c069abe3357e5859994087ae30f72f8f45d099ae113167b7df4ad4866eed3d97979fe1be2fefe5182f069b41128003c77f7a92df28ec3357f23a8ccc5605821d0747ff1fd59ff293d1e99855b212fbd6772ab8cb4ebb0427b55af147df7bee6d598a8d70ed378ab2c7110851d6561da2750991db4b46e30f6fd38d60d0f78970d58f1418405eb25d58a5729f47f37314c13fa775e634d7f76acce87df3205c0cc27f1c7f96bd747ccdcd5fa6cd920514a2f38203e82ee9c7ec6e88080e9f6e2a6a812b0db7fbd7f76eb356ce2fdbd98b624ea8eb1adb20673ee0f767ea1bc8b313becb2a6ac1e3b6837cdf7f3775f95f4777a39741e484c0a84bbd044f3d708d065d833e78b7a1a154538221ab096d7a9a96fb6d28f01db871d7604505ad70a28b87dbb1aa8418a1295ec81c543e3bc2a2d536d796a8f438e3ab6a94d312d0d8e9645cebc6d1519c49c538d9fabd6d21a95ade3b52b3102944f06358821596196a1b8d559445527bfdb15bbe652e0b7ef54d7a0325bb7971ddcdd1f8da5dcc4c54d5f755de8925278d4ab7345c371bc0cfd79396d76538faf66b3edea3937959f0b920546a44d28741b7d6a4a983a7d17f20b05c305b54aad7f23171a55ea62786f092bb011f5f826021407412b8b6984d4f59bdf845d56bc7893319a8675aa05ea1d5f06bc2d60234af7b0e607f51fd818c1721f6cac4241058cb3e73559dabbff56f5d70d43eee038a11d85b7f7fe8620170f0f39328bdf8888148cfd17730f314ea68d8fea02d16d98a3cca61484139d3ee92b748091dc841dda08483f1184025ce7b6ae703a9b5c56ca076ccb4f04e2d19700a906f2ec7aa68ac5a121249ef50a1fdef376f492876416e2869ccdee93578f0b41363d73feca9d51927e3ac47bfed563098edf5b613900da6e097f15213937b7c7aec00762e288388696a29929739edf2b08395a8c4e2e5b8d81d12d0f0f27a2b6d1391b5996e1f7081b1a916030e2c00273c1246b3be5e28f9672aadf41e538993df734455020f9916c0121d29f37a21a61d52d805ace0bdec7c1f2f469e705e95588c6b896cbdcbd19d4eed31703f1cd5303ea6e534d33e5965db9f0ffa37721a86c5725e358fce5a5243ce440de4ba5b7cbef879df9f74e728444576bb128dcb7207a0fbe4ef6958e7db0a8a53cfc3e109bb15e934ac273fcf4468a46868765023383f880144667362fce82ac969ff0ee01b465ebc631e0961c251c089a0f650a141952f15f68b54cd90af4cf81a358b08c8d300fd2a23ece7a549f3a624d574f50beb16a76da1a32f7ea81a664b2fff89a804f6816afc9068d79665485bdb63267d88653f106f0791ae1bb99d62b3136ca52069d08c729eec3f803df6adcfc53c7eb6456549bf29fa084f5425c98a6fb8a6718070f64dbe7cc551a439827b4440f8bbdea28057b172748e1184e67cba75923d64eb1255971e514fc19842a58639d2e0577d1b004602da1e184423509cab53cd3cc94752d2dccbc4bd9b5516332ff46dd87f838290b0224892ece7d0bf63d0693190fc0b16be1bf6bfca2496f42a46aa8b2e20a539863454a70599c2c8a5f1596bca9b490ccb2a2ef0ae15ed7133afde96155a31e68cf88a7e16a3ef62779ee411fe8bd45c0bdeb377ce91e251511a5321b99aed41c9573240a76c1f33e3bf534bb53474ad8620cf7db2013e3c8d6c4f55a446a2f245379314415c19e3f03cee4376fef1a745d9c82ae3cbc9dcee8e1b595dc818a10882f6236bdba71ba6fdfd1ec95112f34fefe7a5e8594bd67c68ff566c8617f51b1ea395ad518f830eebc8073695a039ac4c741749118cd53fe242745aea679685f5e2918f269ac22fec97244632642065d6b7a78f5d537f40e52edaad5acf2d4eedfb3f9ac2908112e9b19d809023518177f77e41a46a7c865709b1f04019627ff035c8558e3967bdcb5f9b6d17a87408167ec3e74d977519221c20a8030bdc1ee5da5448f05d1d3a78e9469330ba30039a929f0ac2a312022caf505f0b6e4436b3300afc51c34a91da97c57c41202d79ed7c3a316a56fa485f0a699cc00941cc448013f81a3497c8d8b041b0b4a31472f684bbe4ad77d6f3a17492e88aa67cea7f1197c4b178abe9597ee1b5ef0b8df69df14babf3d04d0cdc37f3cad10b9c974c2dbde9805730fb4747ce155c203f0eca0d110fa4270899f799b5cafd014adc931aadeeed99cb0789542f5861a9d3c1651e36972845aea5dae3007076502ec03c21905b6205261407ed2d046870f018566de1cce8f2e8356d5cfb45a4c0ef4b308a8eb94664e92aa95af0a3d83b3f1985423b344af55e53984ecfd0f0193685559dce8f017ebc5157e29fbc19d368cedbe56c59b718b70643ffa399c022aa7794a27965fb1b4592f9ce62d89300123f3e9d9bc398219c5756b8a0297da4f428d6e0b6c49b032ff47766637eae89e57397b3f0f853d9b44cb9c1ee079068bba001a0ae324bfd2080b9f2c736d2388b72cf6f94825208a8f05462b4bb5f33a8e8fe2a883973d3c03da7bab98967d3a944cc19afe9fb761f480fe31bce54d06307b6c66d61794bb9332a065ffdd523eaf278f968b3b8eac25ed38b4ac7d605930510bc8531c62eb06a281de11c84f0f382ba57e86af02e393986a4692e4c9ce0ebf353f731c24350eb8a48686edc026fff797a57950a082be11274a28c205bf4c049d4ece9d5543ebd39cf1c7a4620046e9fabdcbd7041405f5d441b68b90b748cf9878be2682725e81cfa24c828145ad913329f6989a121ba515bfc4a7f740b57ebb4fda3e186ab751a10a8e0eba41a47bd57c921bdef76fad5036ebada5d5f2a07a369b4aa37786b1d5bd24bf899ecc18562826e74f5e628d0829941328f180c359cf89e290235d20c21c890b6ba774e539af1d616791a4a2c21a466efd3df065de6d2e8c8b18ab2ceabb2378cd164f60f483fe30b44ba6bd028b7b279ef5c1f67ca1e1aee0a1e144d41b9c8e4a45ac1a1b4931dbc1e6d90a4dffcac39ab365f3b9005bd02d79aff702b05cc25fd02b8f126160b8fcedbc3908d98dc95d115cec180ae586edea57c1fb0bdcbb6a204e2e8e6f035ed1ead0b7c7cb6caf627a375e2e1417399e8e8924219094b015b07486c3b48233fd48b7150f27cffc577855b84fde896ebbc0b49c2ae12d66df2b3f0666f465eebb91cfbf438120268876688901ac94acc24b5a985b700f3622db2e4bfc8146d5b9509b35096a15b491fec05ef810c16a4e68ebb747cfb2b48d6a92c5d8fd7d8f530f9a14d535193ce09bfd9877ada83dbcb3f8677452a0488b343ce2a0bba28235195ccd1b94931610c880c424c5b18d99b70127759b508888d26d40d86e2e44cc2853cc50eb2bd69efefa70741b65d071ec8685a01c5bfb12bfa45ed467a94d74970f9129bb3bf4e7b9bb1bd9f14dacb1bf08f0a8582b06b57682ab494a8c02eafff0c9ea875c0777835324eaf9c188e5c908f6d2d13631fd7178a49b894f1b8bbd97c537d20484eae6433a1b9779eb9a74f716d40a0603374b16d94fa68aedd37a6511861dbdd3ae4d1ba9e05ccf4b2c5d53cf108533011f6dbdc7da2498005e91093d49ece09a3e424d22ddac4a3e37ecbf8e0cb525a1f253fddecf761ee989bbd4b717a2253f174048036828732b299d9ae24d2c566c7c9857bc942d880fe135581d63eff438d5d19cea1433c2989e0a665a465d5dc70a955bbfccbd6bea01a813beb318c62dd660cc356660b11cf19db2548cca945818e55a76dda8231e477e983989df2374a5985673e321d70ec0d1ff6f84e6b296440304605b7046033f43460c5c8584b3dfd2bc33ff19ad148841be19c34400e80878ca0aaaa85d3f6570adb5afbe7241c19a7de42e9aab94b4677ed1cc7527e3d2b12be45fa2d13936915fa3f7ec74c5076a0c1306473b25d1ada23604cc90003f369a7bff023a774f2fac75d991f4b42dcbf72efa82043e6c9ec89510ecd1d3aa83963fed49017ffba644a9a9417a75912acfb69fdd7f54e1c562ad554845b4a122cfbecee9bec9e88f98adfb6d9eafce20e6384adc04efdd8c00bd56519459cf9e87670856dadb825618f15498a9b95128eb32aff05d85bc8d1363a8ab260962515dc71e22de2b45a4561229355438b6bd3f2423acb1bd1b332b2ea0b7836a15e5c36d94e0414fced4d09f0dd606946b58628b4a73d9ec5608b87cf30924e266b658b8f0f1acaf7a6208e656ed3952eb84e5e688e80e9a09883bed04128308b15d7e37b6d968c0d4f67f86b90d750ab3bd49b4537bf84cb23c25dd48564653a245a4685b2a0e2a6aec94fe98994202508bfe735e920f8acc9f16fc5456c74996098bd952462552a8def9cc6a2319004e5b84a20edcbcbad52b8f98ac968e51290364f930d016c01b280e7ec23d625b09b67cdec8ce9883585be050b5981410b7edf0567b3a8b094e525364254ad6991f27377820ba2b4ab2bac9a303dde0eeef039e5f95f7da749f08693b07cdbe30fb18551cab51dd9790c29c1e1bca9d722afecfa3158a8db899a4a051ee58b1b93a24461acd1837e06f0de81061f07210f83a149f8e852d4bdaa1a9574d5e39a838b59b111a6fb2cba9f72e287af22761d3300dc3455a3184be99d499a950be749356b49df7dae6afde08eec4cb1225db489b0bacfe8c2319d1f7c2b796d2c8a4b68232f009ec4c0377ddaa83d702f5f3c4b5aebafe9d8a719135e43f7a46e0cf3eb296d5a5164b6d03cfd1d43336f031d42a578bea00c00298fec97fd84f8f4a888240bd7deb6d530e6a05344410dd1bf363a68e25487c63459ce327453f3cad105bc0f5e8ce3a4c0436a5329e32f518befc0c3054f7080a23aab19425a8617d82b9a83d6a513ace61a0424db61fe0ce734e0910ed7f0b7dafa2b5651e1da6124c2666e296f6d730b3415ce4103a1893cce42dbe5352ff24661f7ef873016331d92c7d93e331a83985a465a42114050f3868da972b154b94d37b7efce8e63122b6266cbfd384264f3523fcfc8d205ea722269019d9288945743125b0d45e988b6fceb4c4ec80b9c86e4a735ba8f16de236a80ed4e22f20ccc4eb13d2c9bcf1c2626fd641929a0b5b8da2795ff909bb46d2877746da7bba815203c9c12d93e57e3a9441c46a42737f0fb66f6811dbdf5b722f99ee26a0af198815a81a9465dbf554d6a7bbd81c9a8980e0d60277ea3286b21ac7495b3086ebe39b3f3d82c55dee5d9148a6708ad9217dcc3dbd9fa77d5f0ed38fd6ecadca7ef0ff0fa87d14d3cf917ec502a81fc7cd52d31707fda5e84ae4e464256f6b02494cdb99e9e7e6e5ffbcd9ad5ef33ddef3ac8fe26026782be0d0c7e493380a96e1339b5e8067be0d151c4c6219f677972ae77d30648e60b0a75ee871cefb0f10cd61c8ddfa510ca1a65c4173d2065f78d990058163aa221f14ebe0ac370ceb086433de98c648554c09d9535305c7580c8632c3460c0e2eafa0042ae44a0220d65c4666ff52b21a84d63fec90239df3cac74c310ecc3ed91adf3431ca965f4312fc05dca24e32eeb491ec87bbba1ea52c0348d93c0290c3c928f88fbfaa98b446f9feba02172f2483a35bbf2647bdfeb8c0c5266e6dc8714323ddbf43d53306daac8d89af2c2b6e5aa129fd705af062e9962d93066c2a640146302af7c4b2bd46aa5ec5fa1bac1ea201c3cd1a424a7446e9feb9a46c5b1e8c06bc6d3be79c4a2369def9836415d8025bb5a894bc40a54942c504c90ccef36bfbbef080cc543ff9718a8ecb741d0cf4057c0a601767787916fd0ed4cbea95098bd45f86d17ef12147ee0042ea163fef95837d1cf223505efd232258085275ed3d79049e957110435385f87a2495e35d82787b2bbb08df535bc409e3608b189f97397a3886df1fc82aced1e1c20099e662a78f0d009c77fec95c0fd752f8ff891f823af5341d72384435271a310ab5e2acad13413132bcd9bc47bed46e208d523cefc1451bb0ba1c26555273f018ea0ac6f5c258eb70004cab33914af096545375dea7b8ac4d49dc47bc0e8f8d9f88a7582df6c48de904f02c9c21abb8cef72560cb58c07427c3f13eb595ed78132440c6923b0496e21d4c96edda86f53eb84074524eecf1f49b1361fe92fe3e184f7f98ef09a9a51fcbbaa0a5466d547a4a3d370004aea418418b57d370325e135cbc5570ed2426d692d2a05edfbf44e61f541f311476192749f196f0d83a36a8fe7f72e44ff49acaf52d3c87110d45169a5d9371f8e3bf8636be95c31566762d874177a5bc9b8f418512cb9a74c7e3905d923a4f2c6805d97a7adac6c2579b35999aea31cda962fea52bd415958f9ec7dbaa8a3519839a85979eec68698df435a7f43114cd7eb446e7f0fc94ddb4d54196fef9a06ac6dc1f10932144756a3fc234d5e2bb66bbf1becfea9b74c7e8358212080f2d7a92490a78004fd7708cdc4fb2c875b213c1b9cacf713741ee9a2dfdcf7e4148d3866fcc306e9e9dd5563852c44470954f206aff593d6698bc3b2d39319a266f0003cef8cc26b4042e66f26fcbc259b1836893c11f979fd5bb4bc1b8eb14252c7aaad514bdd116b6e62f88fb4bdaa7a35b0ab2b465384975566c69f15e54d3fdcddc208497f63d0297207a89b6e5c0e73077464ddc680a1437edb4770dd4a95f54282fdcbceead83bbea359fbf8c6bf9ae3eccf1d7cf482eba700fbe6c2c1bbdb80f5181cf52deb6bedd48a1a826df671ee1c55509d68a215873fa3c0bc3a1b56402342831ab57282a8a2234235db19c1cd0bdcbc5064698bc69f2747f23e1c2d2a1561476608d34996160cb9399792522bc14dabbe713f140d296fc08d54262ae5d25eb100b0788560372dc7b529c7ecae4791630f168c7704e36376b405a1131a6222091035c701ad0e6eb6d11a2257fea48e2d6adcb87d52d7ecb090d8f5b170ce9497c01d2a8426a1b8ccb7f0095ac4e02e50f74a2bee9f0df0b549558bcc901d9ba236f208d573faf1538c36e6bfa8045816e0e84d92958b58ce0604c92c215721749a3bc9bd3b2103917b71204c5117f4c54a3e8730da5b0d43ef6e1898cc850d531581d404261cd4cfa92b1fca6821e9a65fd53f921685f65c2e1ae1d939ad4788cf4b9372def54e5441eb4b00942b21014734de7ef20ffa61e8908ab7 +MD = 61dce069399909fa7f4ae87e5e9e814c1521d6555eae792393a7422e43135321cdef56adf36216eedabe1c6f0cd039fab855d837923391c2dcc9d31f1a2ff6ec + +Len = 96064 +Msg = c38f4de032c8500e46f9bd0ac75742db703f1ae1f628316746d789770ed2dcf2801683e0530c96040aba55b37836c6e78461a0902ad1682ac20fda9485038a204daccbe79c15d05fe084112ff5f4f041ecc59d190bb33766140534d7cb060230b2b9ee9d17c9464650bfba234677081230d5d927a1b4e543c51f5ee8e7c48c4b37a5b5abcb113fe2e3d3183a71a95681d9f81b60f5bdbce85cc7226ee424709965d9e5b9c0d6055a2028f31a807122b76e952c6c0eb7027e61644612c70df541c3bb496efffeded79026136b7ab6b3dc7716d5f4f488002c5d5d937b9a69646cdab4a8738f721381b93640d6686252177ce2dca0b01afe1bd71cd151651f0541302dc96f781beb7f25be4102515c479006610917495344725708c83e2e1720e94f8c750bc3e0b0fa5c28df993d8cda709cfb2602c71d195a65893fe8ff39fd8bbf3a74ef77a8a819e4dae24035da53dfc718f908335fc7fb8a0700f7df6de45006a08ec29c5d1d05473e12a13f2ef9040e204cd29401947c4dead114d79b1c60ae258b2d3be655e50dba366466701508f97be507f2eac906379b7be7edabeee23f3032d75a2b99e2bcb81831af88ef1210918c505504adc0cf80c6172b85a2fe3f2b4c6904143024de9f7eae245ecf4bdccb0b55c6368ad39d02794d991180de387da18a3e8964d2fad73186ccdbfddbe48f29bd4c68a66629895e303e38cfa7b18ef9e312727b1599c8f95fafe5c0e9b046ad31f0824ba2fc7e3b6922e0d98433c61c1b87b7be1442da9de2d665629dc9596058b96dbfaf9d47d99f4df2e49b458dd2dba54075f87d75e7b648442920b62e0adbaf0f4ab4944e007bc85739146f4be2cb75f5e8e8d2019d830d685e9aff2f7361da5136d96afa77a49af5201839681592febf5e0dcae688f32ebb48322dc36293431bc948a6b208c3cbb6e0cf2c4c33d94984218eec8c70acb2243111c751a019f1564d26d0e079806481c360cf5f04475c2e7794c15b1d56a18a5f5f5543f69aece8089e70eb93826b3d0ff3aa0a4f8541a3a947d0bc569a04d71b43600029be3dbb43d50f3b1e72ebd40db246b3de3a00cdfecea115e420e2f2ade56ff0042eebb645f63438e2f7e92d05c32ac4770f9f92c052bccf908f43c35d6e0a7b4e92fec05827684aa7ba6f303f4edea3e3ac28dc35faaa53208f2f327306b909ce917fc3c29032d9346384c5027cebbaeab8a292a7eff2085ccaaf2736d405024dd475a6cc5b1a4d529931d49874d86f53dc169c5c581c550ee5ca8aef0175ce9303e851beada80ec9047d45475f2d2ce8bf8be29d5eb0a4fc8b8943e7b492d568c5e0abe0b16584614d7000586573586f0a094bb129375cef62f23a6316e28094c2669e798cd817e11c12ee13ad315ab16499c1e2e039e4af121058ae4fef35dea38112d3698a3013186cf5bf60ef9c7676412c76ac3ca60444e8830f86415d10103aed346e0135bdea85fea5a5368585e70b72b6b4ca09b6a084a4cde45e61f0b09818e5c3c790a83a65f20ea58c7da860ff7cea216a758ccdeba43190d0a7472ca37b2e9164a79caf15b740887ceca58924325a1aa5525074256983b21f99dc2b63fe56005ee461f19c3784758b3a4509827c4dc80109c83c3bdd0b74d19e7956e18aa7373faebea90258219443d0508921430d520800bdce34e710fc701de4552405675f8e6c7c7f5004610e2b148eb00a6de0e142a0f6d1186edc728480e6cf3459df9fd488631a8d228a0bcb6fc72744e40f9d36513deeef5cb5ff932e476d1a6c572098693b23c19ae5b2ac4ac295d78ee1ad6c7c58cdc298e4cb278fcfd6dd2817096277cc41f454ba2c550b48a3cc55a03a6c871015980ab0fdc70b46b285736683bb1ade1d2f3751a14e1c21f92a20926bbfdc2d6e7a9a63bdfc0a73ab1b378eb629ba385e792df13820e3153ef9d60169ece177826f3044354cf41f67a55bd5c936bfa3addb1ee31952caec1a4161335b7b00b6f67fb49a8a4231128e2ec784e56a91e7b25cf0706d6c376d370ba8716af4a0b175b20eaee7632914c9bb63e2314c98cc14048cde5cf794613a5e9302bee02831a51126c8723945edc0561739d6643d1a7cdbda750d7a4890ce430a307ec702fe2ea3e42f534beb641a06cbcffb3ae69891eac27fa97dbbc299c1f541d32f95e0b971312db32184437fd467eec957fd0ffc382d42578855bf43e03c7ee4a2499fee81f308ba44795099c6d3dc6842e84764cd010740247e4e75a8c82fdaa7860274dd14098f3b30540de7f7e1ff83110872b228168bd89e39d7227f9cdcc7b4d2f48d7a785b8e1316863cbb47b6a3de1aceee88b7612d1d4610554a0c13883bd715970f9d45c68960aacf0854b629b9441f890b32eaaa633ec94a12c9a67584d98005b9bf766af9f821a7c452279d094f0d8c98ce4dd7d8e8a907bd19be13f5a0dcdf62281502cda794ccd9873188350442fe16d5b33ce50e5996344583ecf7f3d22bf11e4b166c35ab472d3cfa70a72863e76f8d4362f07680ff60941c87f39c0af34eea402f3e6a0d1faab8ade0c6861b508a3f26d063e9c7482850b26c4f612b3e61d41bd4ab0e635c3745705dfae50f404f32830ea42fd67b73bf6c24750bde151223058e1be85407bb296b71ab0ceabfa6b083a51d10549f2b2b7336cb62ca7f492125e4f6c1892620adc8a341c452d577ff4e1c3454e9bd37daee2abb2d9884ee14a45ea461a9c44d19ac7b24d5ef8baa680bfb53c23edc7f150689ab36ef2ce945a9848d905de62ab54182bd076be82733e3cbe124fb04eb23e3d90543788022fc5ddf1a164d969fc8af3f72226bf4d6a8fd124640c83d634eaca5301dda878181e7f6b1ba20db949c1e3baced9ab8a00f825be9de4b90cfdc8a72948cbe49ef1b7051bc457fbef177b5fcd4319d3b6baf992b34c82f041716a4ca9957cccf52132079a18011459ea29c0c50b61f8621d16b0c8ec51aa223442334a748ab2094b11ef5ca307f7a8365fcf38a44c69fa8bd1f855f9cb571dbae2e39262504449b3d934d9d2070658907fd37e8a33a90eabbde1f1016a779289bee5f7eb77e4451ffa60a84178d0d96d2c662d49a2461cd13d06007fb98c2f0558a3117c6c2279c3f80b3e6dc7e7a930c80fcb5f32c183b0c1cd2ad1332551d222b345a1a77f5664448d02a38eab469fe528bf374f9bf1befebfd6a251a39954bf9f2ad7a46b7965727eabaf379c4fef06599f6e6345d54046468a7fbfb7642171bf279afd77414c04588fdd5d4b13c2ae0ad251084fbd093b09bca5b7b150ad0babc2782d134c8c7c9325ba6a3830af3ec50eabc92a076e4f61e3d0e421dd7bcfdd91db8ddff9ab4dc703c2d8d424f95b108acb006542e3f5f7a66dcf99690250dd0c51ca2de72cea5cb08333bf7f5565660d4b5871fe0eb1336af8c48881d5111298675c9d8385e4dca278055aae37f04ddc893bd0a743139da7fe8d6fc6689326dc78af9f6d4acfbf602dc82610157e209f112511cd359f9ee3db64cf952149823f224db3f2e00d8d5ff0f6a263728196bb7faeb5ee3ab7cfb53bf5188cb3c6ad36e0b16bb2ea20cf187e0b6006d38d08b831232d68d6eea8928cb8eb0b947d105a3075372bdd9bed203180ef88bd130f2bb23cf8ebaec6b1e24a2ab79027ef442f9e03a6dc1ef16fed97f191479396127c9f5698e506b2544af0b4feb8f29fc11d85d72b3232a3dff73dd805e1fb88ab21350a9dc3934438231cf220f489010fba848a44cccd35b5d37faeade6698d31c03fc37825b8feb6012b6ceec15fa5987d1677741a331979e8f9e009b341f65ecffc0ba88a0c34667ba88f88adfb1fe3dbb8394998f8e1a4ce2906a9d739768aa7166dbf4ee1a7b1e920d4af28cfb28a5ce63a25c7a300cee9799cfec094603dfc0b441d02fdab20e000d6c2b0621ff4873d14a924b60940d1881d891e0755f12547394244a4c15bd6d4f063d336aaaad10933444ea66da30cc102c93de6ba4cb956a7ef627b8c9b5429cbf31fd20525c0f72077a3e8a07df1b0d74faed72f992eb63a550ae66f97ee5bc3f0e4b891eded6366c3a311443a36d4257cef4d086f0be24b139c79dcb9ec0772fdc04ef37bacfa70a8eaa4bb5022a757e18dace746c76774bba5aa7679f399537a41298c478608c8a7d92798686ba6f90e089b4eb8f7b221bd94fcaf609baddfe6d5ccdeea1f3af930fcfe4ddb786f8362ce8ca12df35edc8a08e4fa062aa182d3fcad5ddbcefd6ce4d4ad4e31cf4d81806df5712e60da2fb17ff7e8c34710e6b2244fab851bccae23eeb93c03d6dd6dd7556a5132c69075b458b9ee3067787611fb282a8e8c25378eb9b689ba25abb2d8235fa3c38b2e6913218f9cc61234bb73dfcb6d40a6838385a409a9cd4214fb233649fb592510544e68fd570ccdf2114850bde653e1843c995c372ed5a2c5a1192ccdca7c2ac2c1d6ad97bf7cf13d320fdc542820d3a3ad4a40d38b3bce1a4f5a753f83a502d25c3c5dc3388f2252784af132954fe34e6008d05341983aaf40479e23d95c53bb7e0ff82444bbe7ee6e8a3dedd02996f0ff65a92ad4436ee14e61062f1e1a93da91921b2f869ba86d8f3e00ca4b566537d5e139eed5f5d14ca4474b95d45829dc4183154950a6fa5c44e6e86c795ee49f7dfbe103a908086dfc6aed1c9eadac2d0853a4f6455634473a155358dc9b8b7472165d0ddff28ab1b13c4907df738149507418dad7320c9ae939d00407a4c0633cd0fc51ed6dceb45d4c1e0c09525fbda4750f5b88c2e9e3bcc4fce26cf339f848bc5d9443a25ae27b0aaa8dcec28df69ed6e6fccc71329e2f5738989f1f4e801028ef399558a5c875089d01723c92808a0a4e3324c59d46db60f18af07174b74db72fb634f935d2e5b653fba63903e8008f93933448706a2b62d63e13a252fa3bd79daeb50c81ae47a47df0cd3068a98ce755915d726264b9ed45266b2a5fc5851ac76797fb2f970553697579cb2721a9a202c202cbd9e2e150dcd88961f19593f12b85404d8639c933a4fe1e51c5fcc1303989e6cd4d514c4dfbc8d0e1bf06e2eb388c608c2c12edd5beff4d7cdba78e22586d5bef433c4525207be4422e861c698cf15b3f979efdaa260d69a4ce9e4af8edf0e4ba32008686e96635dbb69f9b0c8738a2c04f5a7331688cf552156d9214789913a6c04a6ae3c51c4846fdbfd944b5e6d9c6b9b1e8fc0502930d5671ee0576ea6b4d44767cbc32128dfc5a736192a76062ab7d51b97a6a02a54ef867d95c67595e1655113680becd99645336ce86ca59cff6f0a68f3d2611ce9f71abce89d85a5e8a68b722c1d9c1dd277e866a919d279421ba1cb4a4c794516768ba480e38820f21f5b4bc000173dbbe42eee033ae5e31c44040d441ad2ee04f340fd06a0654c26592a68cbbc478078136eca9ed6c523b5719af68a46535edbf6a38f21dc0472addb618ff65a1230328c0ec323f55c81342acb4dc4d8e3dfc2071b217aa04dd9ae2d6689e9e1629310d878a13a9f9144c1f7ffdc9ad66cb7e1af107db8f328cb52d8a31e4b591ef33b7e122c8add4cb686619e69b24ad52f6175ea6984de7d8ec1637e15c5cb2e96da06462cbcb6751da8ef10bdb73b068f6ae212ae8668346b22566138fe3e7ac516f97b687733f5c2522abea04fb2e61f237dee14659935aa9d3ab34d9fbae9c717de18a9645bb2edaa980ed922b65f27b5cee762ca7968935c96dc1d4f4765e6043d87b72b3695e6d8c36932d94f58ee485d66625c11b56e84f24470b7eed668059f2f5a73cc86f4053338711c85babd02b3d1dac468058240d6530e7eb62296448a785ae4266e60596ee15f92616bdc0e579193a9863e18b6cb71be4da832b8e689ca7e274b3373fbfecec4e4ea549392d10f55b4744a780e580649cccaee1616218d8fe443bf72146b6568ba295d2ab7aab2e78d390fea71067a78a2263ef7fadc2956c217f8a8cb3b1012ba246fe8a469e113dbdd77b6075c351178c40ba5ba4107986acec85c49f8368c8fe570168296069f46696923f7e29fdcf5aa3b667fd88d20847016d5b5293e9cdf744afc78b9885478e4cc7a6a2020a3c2e2b883712a24b5b706c95c3857920b53d7e3e2af5bcffa16568a04879f212c86746844b7be341eab96cb39fa0999a0921825104e034359cbc88a0677e60840ea6635f07a1c2624092b03b422c7bb25453ff6cd7e3a4c383c40b4cb617d3fa796c206d1e1cd608f79ca5915d91a6060135240636787526114c9f09a6eed2c293190c22d15584c27a27db5a34688f01ba55bea183072bd9af96826bac5bd398e63d6534d3d4551b32d4bffa7929bd31ca261dc350283f5ac94273e749075cd9dd69ea079821dd6fdc13d1f69e4db722cb36dfe010443625f8c0d2010f49e4f1f2fef91f80c6745cb0759fe3165cf3312808638c65f396c7a8922b5d61bbf29dd19d20e1402ab05e6a7a982473cff7f98b0b472ca3aee7cc7356fe30d2d60c29c3a4dff138c727e16483594f293f3bf84ebff9457bee8f80c35fb93ff510982273a6b4c3ed442182292031d7c8f34599fdb7086b312b14a1234cfaef2b043d145c231deddffa63bd42f1e032b5a49b7b1260e302660d1d8a1d8f11a2f729517bd7aa99b3838234ff2c48b30481cba3f8274e27afacdce0c81c96bc1febe88bc5809da6c96a543bc45fc538a1afc105bd96ef24d7583324d79b04589a6bca328de18cc39416e8dea957c7ffbeb23d2727fbb488fe1aa84025235855c71966ec4174e88eb7fbc8942aaef176a01b988eb3d04ec2a84694d95d4ff3521a57171f6ca54156899b7c02a4bfb21bea6e5ba30d9f1e404a7e9146dc7b75cc08b783527c1d17b9ad786b90b4248a7e11fcff1a81b293a07915261f2f30403206bd041c0c26ec3688052fc4e557fb0bab7a0b4bbcd55f61a8ccbbd8c208f312b8da41d2796d3f4b9de4212594d484531b5808cd1b51c1e24de7caea31500eec8381a52c605a71677377f8296f14a6d2e609600529d27bc0fd08ebe9f9bfe42dfb65a6704d6923289d430d46b0b2e3099020b98a64b1ed7c2aa2975e87a3136594d8de448d33e4ed7fd7e9142619b965ae106dc3687a77825b4745ae67a42d11c46db52fcc2507549f9914082bd3aa85a45b055681b6da6203698f50262d91c11e96b37876c73acc712906993e5b36d7f78318aa5cd16699b77bdcea2fc9d1d207d661e51994dfd398ea395dda1adedb2c1b00356674bc97ec0096e300e37de324cf38cc210866f87b6f44ac8bbd131dc675549e1afb3cfb159a75c12614e672d9c3b0b429bc70a99d2a813bcf9c640e3b34ae3b06ef7821c8abd20b2bd8bbefbb666223900b8d7572aea7521253423b1edb459296bbeeba89b744376ea96ed82e29b5a0f0800ddaa05e0fa5f05c5e02c5dbe34b670b1103bd3f34cc8af16fcac6702392c7b472578adb229de621f813e4a8dfbbe4378fbbe7b63c30fd5b4f15f8fc449f82137b5ab68898a0603ea0dcefe4c36a9adbab41adbeb30b22517d685a00912dcc27697297f8da640b2cf8dc3bf216ede761f41353bb41c1b64e7b205e3f81b3e25acd3dc3ae504f235750807d63429c76651acf9e3e50fb15dce8ec7a0baec8713826faae0ba2d86558686818baef2cb45f5fd4d1aa78fdcd77271b31f760d20549f757dbb33a762daa7101925b74e52dab63a182a222604997b63b1a755076fb0adec3c1179fcf08c82acb7ee76c7c4ee396d44597d5b916c926da9817f60deef51ddcf2bb3b39633bf65432c14e48a49299db8f0e1b6eb185f9583f61ba3d4d8354f1d510a55be960640a528b92d0ab32cd35c3675c07b6589e5274c5255b934014a10caa669cf7efd47c62a8b2badf4ea1618756200a71bb9657dcb4b00f4cb5dd78fe0ae7731b34f818c79b565dbd30d6ed4f3cfffd801961c6ebd2f2bef65effc83d94a084bfda2f6e05f5d64fd1a3ae378fae54377e0c912e068255f11ca62c3d2fea4a387249fafab22acae798f1b7eecd0cb56ea80f94fbc165623c2c15c346597e1d04cefedb3d30bc9cdb9fb584618bdaac09ba9cfdceb0de9ff6a14855624ec2c170327340a4262dc4923259944e50baa07f023f2c05495077b71898731f744ab0112941ebdde6f0fa821d7857e3900f2b553b50c03def8d82040e907cdc7e98615e2fe51d3917988741ad7c4fefee6ab512b29c2ae737c83753dfbb0337a21e6dbdb2d755441ca6f3476eeffcc1a03fc64e045bec7fa6b3103d189276afa35f3dc65e93349d8a8ed719ce4deee77a00e75dad2a8595a0b09506459177a2d6dd49fe9f933b93d5c2ab2f681086efb04090c809727697da534e65f35266cfd10b2adcd261cac582e4d7feb8d2653907914b23c5ee4014a80d94d28e3fc475168b48c7b38962a11657e60e3cfdfa61d4557ed75ed8728a9e6210b292b421310bb03c659f74b3c504be7de4610dc6e89b1fb48940db7e7821d34aac9d7a0d82452c6e3d12ae0e9fd26ad807d18c4b3be052848ff861c45bd6e39b26fadbd9f747526694a9b003a003ffbcfeeaf407ea38905771f205f4a432158a98577426fe86b4be22c10513541def752029df8d62085bb5c5ca328fefa7ebb1972fbd651687e5cd5de527be4a94bc99121a993c31d40717f1fd61e6acbcd87899e02224cdcf481cbca29274f1ecd9a14b49dba4d82035069ce82ea959e55e7827153ce682c16e44b575cfd7d89ad9264213f147d371680a1d36f34875c5f018b53b881ad412caaddedb5a476d334d808d2584a5a25c128af9465a349eb33fd2cacf7e324017efe09f4fac542e2a795882daf03ec324c711c7b2cdfe2351904ede4d99dd455530658d4f407eaa051f06d9c0ee83c47fe826fee8b915a21593e57632657c625f5ea51f66b1375f479123d863ba0514d208430574c61ba963ad2f191a6b8005aaad37dc02790ebc566228353ffd4342afa9ee81d35f6097e05e843d720698cdabbe9629bef2754fd6149c46a222cebc8d4f91ea80ff94fc003aad69b5e12728f70538af08c80b983b2af8a356c4f800df6bc5a60a1119444793e3146265ab860103a7d25c742213fa17b5c1ba5e6fae3a71024adb5e7e1f2b2ccdd4141e96834e5c5c1a46615951976d6c38494986231311d05f711223db2f57d60f3776889f5351de0d331a31cf978e746d8020ebfdfda0a84a67e6bb16c897844c38f7f248a4969621cf291bec7f0d76d80b7f019d4eb002a22c46a4408b7e6101b53d540db69d2cde66f8a836b26cdc0e27be579faab267dd3abc6fe6ec7ef4d628913e5d0dc80ab98713474cd62f2c8671695e63864a50722fb28e78601ba82fffae01b51ec9a839cc03798d6ec6d0c774fa968765ca450757b370839ac70375c6ee5eb46df48de59243cf86c0b67147befc9079cdd4cde35f49c686d1238f5e0adca5c97feb4433765eb9a78090869d9bf9ccc932dc43bcb2ffe0f0b793b42f37e36772c91033a9e4aeb88e32c7792fb84cbbe419435ef9df10606fc2aa1a9fdaad143ede0604bf69de5ca93bddd174709fde58f5cc78015055c54266d91af66fa44c8c332f1ffa7248066720361812715db4a65cba1789a32a701738a33de9733370e94d1dedd19a8656667482c57026f0df4ac2bec5f933f8f16cac8b0bdf620511e4a03506eb5f03bd159d2652140e03aeb4ac2cfbb6af5be9a127030d4ec883bffcb116f38e1c6abb032eb356848300a3829d97316861cd99535cadaace2329db9014362c506f05d0ad9d9c4b2842727e22fb700f74f7c8b101a1ed7cc3ee71d55d2e0529d8d37f8e736e4398a5b8c36f146a69de72ddc7911a9b44fbc696f66da28326646dc6325503156bd753529e26e55ec726d88054ea3cad36905cc921e50ea7fc74a5d3c8b4bb27577fd7ac4d06044d2a811c8c0b0cb65c54d2ece18eebf00109c317789d3e3a18b90a99326abcffba0675b55d3489362d024bfd6c87d30512d0e819114a41de6de2f01e61719c4619ed6d49806bd02a93d16414e6b74aac71d45c415a3a70369b67d8edc5fc24560141e03f723b72023544a3b9dc97a36492a68816aff839c135da2d7dec5505ddf496670dbf0e0f6b65ce9352baa38dbc09a9f41f8f0e1f0ca1ac56552126811c786d7a4ad37dd8b4b9f1ab760d655a112b6148b273e690877340ebea10eb46bfe139926d3be59e8cb63064aa4147a9028c6ece75fb0c2eb03f4a66c3481dc726d38d37eb74efa131cf1d4755f2e4fb1ea1252dd080f95a154a2b5f77233882efc3dae35bfae68162891adc1f9ea7b0b40e16cf68a238933548662e5c2ec5fa8946951d255a84cf9d58ab9b5da11a7a6137d62b94db447a8e9e7d6c08e7309e71b05e4dde0024ec20d261fd96a6b7a8b492c5dafba8a7608fd0f390f3d912ff37b5991dfc885157bb7ab08b512bf9dc1cc37855e376cbf5c7744b25b370e79d59aad7e5f74f94a2bbb629bd238d7b75082e601502d24caab3fcf692be3b28e946249d3e54e2694db019301b7467971415580fa0d05783efd3df88707ab441738b974b9f9bdd39c92708661eca26e739b2c4f971b2531c45a59063477f68ebbca8978582429ca0a58f282e4fab67d6466ee990104f71703cb7b4397042d562351b99bd7edfad185356ed1b268e870edab85a75f50e1f1a4578bf5d935b665f6d531265edd99b1b532cdb9f2bea20eb571d8c1da854d894e0771652193fa83dd5fd961177a6c324356f583cd854b1e65c0cf2e9a2da2a5aae215db98a5617780f59993284fdc1bd7aacf766a444a69a4a05238c6cf480e5ff05f9e66f3540b86a25905b9e15236183443dcf28309b71b1a492586f4a78c163938f8b2053905986b0100f3ba3449affe3afb8ccaefcf71359c3e042327e677c6862fa464792e5d5a79cafd61eb1d43109a1d61a2647b4ffa34cb65e430e6299e338c66977d4e7e76a9ab005ee07a7d704d889892d0815d6ff714d4bf2a52d5c925571d26ac2da2c779ed243a7a27052839845a239caa429ece60773d7df3225046d8f49a6d927256d2d7907c20ee8240485bcfdb2ebea78fa1f976e59191b93a7c5711792a47952a9ab06dac3c959dbe61531e45ef8533495925fa40cef4418fb11b9c4e4a12b44bbbc1e25235e5fdac6bb670e647c78fd4dc2d2bd49de36357cc6dbe9e35bc77c21b5218f773a64a1150caec489f4b62381459302c6427c79bb5959ef3520d8596a4aa37225ea02ef6f7d8bbf25dda557de8f032cd8c88146354db66d40bcc87cf3c13665c5e9a4f624827046ceb3c10ac3f3c58417ecef3b591863bcac7c32476cdd3cd2cdb5e555d2b01f03faf393acd0383cb0fa1c10b9b54e0475cefb805923e33951a3db2e9f088aca7f213987be61b0eb2bf5c29051c852fb212e974d22b777be6aeec5fb3214771500d7d237d016f2536d919cd88400cbca4741ebf324a60f3e771502d5afa5098131857a0e525e70f7fe63f763d10d1cf440bf660cdf5e1e3c1ead1e387838b69199c08d85e5b6b16b46e36eccb93bcb0ba5eda214c37e2929ba2d84be1c3e12c8a21f8938eaae380fdf765f7dcd2b6a62ff530c857154b499e1fcb2b11c238288e2d8f991d1a3796830b365f15d3a5facb59611e95990450f2eb144cbe887aa64b4a35b1b4b34fa06e3110eb20a073f5b511d6ebafcaf5efbe8e1976911e8deeecff52a5fb7e13e6e6f25b65a54106dc16a5f6f74cb0076e2a8e4470318b5b4897d44e3b99826caf12d480934bbc48fa159e2809155420146075fc0448d7cafc7552913c37c740451a61e53dbb1b1f96db83d6ebb2bd292a85caa8f87b0bc451ad00836f7c5679ee2721f32d9d6675f78fdc6763caf30bf8c416b215742d309067678d9e1136fdf3619b122a98a331665a32433a05ffacc643e08123db48f502cd0d158f9d6fb69cef57abfb54dc3b2b640bd2380de8f6dc2ab07dea5761fdec047c850bc90a8a30f9dd24697a187b8ed4f27b2487b6d081a20e0e3191822f99373c43da3d0e63f9a9b6e73cb260d9d7d26ca9c71e7221ffd3839cc231b273508cd3b9c4a083283d25695a3ca3bb3d4d8803c1ea7823d39ce4968f63defab1582bcb4d919a72c145957ee730f6318f391c3e2c533dd1cda1fdd04fdd4060d1fa3dac6908d5e21559227df5e252cab7e3b6a552cb1684f75648b844f800efbc7eeafc74f3f6db0ec0f4efeb18608f9d937fc19b19ab453902ead6d77bc6ac582c5945d618a86593c4325c339bc88729919e197007a31b7bee0eb26e3039a18e4bb30ef63f91898dab044a343331ba44243c36375ba60fa563dad573dd02d547251fe03e32594ee2be934356a74331d496819e5ade5e289fa776c64c4bc9506900c64215b8a9bd7b4507ce01c1a7f3c22d94db3f58706e51020b0d6342351bdd25d0bce39829dc408888749d470508f7329e75509187e9a4bec1331e8aee3d8cdc64d6119b80b519ce3cbb920204795aecc6f2f35049a27e22bfbfe7ea9dbe5d6daa1905895650ef614e2e49ba4d4dd2a535dc925f5ea0c9752e39252beaa7371fcb0c282a55b3a887e4522837888c49a312ba94846feb6b0035293f157cff043bef38e24523e82e8927b198405c3fa63086156188248c4e0bfd189f70fcceab093d239ca468f767af3ed2029f716dd192b9746132248a58ddae8eac04111c14d1de57bc0dcde63d40513dcc1a701eb111d25ffc4c18ed73c06f11ce9964f227dbfa5cac49f9bf97868a7b607a015a30f7fa5e9a9ca7be86fa682b6df69c57cc6eb8b8d220968a5cc70f132486cb2a358a58faa3ec7a0478d4c263f1e46254ebd440f59859494d764c088d82087795a91415ba7f0238c73396a541c32b5ef06c53bb9a65bebc12cc5d9e72e1c6aca472db582796a68a0f9e88384e4993373337345130a01597e04641f848a88a135e79284ac750a218e5a1f2a411ece4962534bf293eb32781c0cc42409a411a54cba642122516bd8950241b101314e522cf4c3b6c4c05bc23b846a69bed133e16f3e273dac64ebe86590f4ca5da2a5f843865f241e3fe9c25d39cb633cb86c001df1301c734626eb6074acd8bf0941a6368682ad18a068e2e16b7ba30bb0267be96223503f6b895c262bee6e9ddbcde68683e2c43c9855be68b7dfaba46effaf520f857b694bafb517251dfe72708733b3fcd40c028e3cbf739d7bdf7f2b5424d867baf0796ce670c40ecffaf58e2a083f5ffad703088a60628ad4d124abc076fcf95841f855ea29ad3788f66f7b12ee893bbbd7a68ddb4be61e8f031d36d1003032d2026e9d175a533dbd7378ddde61420e8b6075848bdc4eb6eef7d172e27b02b2bc943488fa5d269ff1f48a1ce8daca470e13e893288c3ce29921d9d68121e4d76c89e2c00fdcb7ccaafc1bbebee5b283a86488204de6113002039ed849af674f865601c8c44387426cecb649ed0c7b22eed4ccb248746c1dae3fb90e887e0a598e7b1a19b41c05afac68e224ffa984d345d73edfc4b1be0a121890dfea183ea3e98b84295bd0c352edd3180643577fe3420e56ff2f288793c230bec2db0884ad2be9e87e280c40da95cdc0346490ccf167cc9d9704334929331aab6dc7b96ce3da28af8ea528fea558bb9355dfefec7c2ba47b4dd07c8368e928df275cb567c658ca51e15fb15d519b1ed9d111cf5ee21218987a106eb6a1590de285f68705e33c31780cc42ffd5dd17a3c3cb6a9b4d19fbb4da240846381071c2e0021a8b7c8f9107a675f1f5f389060130f1b195eb938ef336cdd581a7677e63a3c6a94fdc623c9d197ace9e3606c42f6bedb98ed178246c21063443bf02ffe9f813dc6688920d036041a2a3a63a9956fc254a2c05ae03472537ef3489c93c7c68517c7588094c5e033434ab4b0ecf9e6c032c17911f73adcac6ccfd0ca57c427ae85127e2ad41d98bb94e5f2e6aad2e42ed26f87cb1bec6971c9446517c0966b6402321a06834997f3ab66756377a2f064d0277cf4e2bb914a10eb65e38290ea4c1ba0eca216cc9671e356acb5b7fc8418a863b91dd01afc9bd04f63dbf2563cdd4de9466c0328fcccd931196c004227a0c7bedca4689cf3fd93caef6fb458cb8df565b7e2cce1334af9803be4c5064393ba83483710b42fd5b80858fd2d0b1ed4ceb0c194f887e2a2c0ce84be9adb7067fd7b9c346ce2f8bad9623122e10fcf581654f4010a7f833acb66a467e61436a40ce2492ad1cbf7235463186f64b9357e88ccbfa5775a8d9975f2fb6f3b52fece6561cf88e3b19395d5a57f412ca9e9be727294f0c38b7a355cfdfa330f1a415d93749fed17467688c983c6369d5464ae800104718394d194ece23151c5dc96b813954ab5e0fce8829ca89dbe5b3b2eb52dd29eb61c090c4ea24a315a141c7784724e5081d5478209eb6e5656dae0c068d871c42d015ab2b929806aaa6e4c5c491bfa31bf68b8db85225f907ea0c792301c690544d7fc4d7acf4f4dd148fecd5c8d337eed2fb34d8adde6dcb421623cb16612e2ac147044ea2fe17b5d18a64355528488997ed960917abe8b95e14328534229dcb12b6921ada7f143ac61d546c9e867ff22fa9dbd2f85212d8264ecedac3cf853f2a1297c2be3e9674db90e4000db5843380772abcb89c9430820b1d512b31908fefa33acfb405436cf92a3e7b097cfe54749fab4ebf5116c95b954a72d41064c24bb3a4c8269ac32906348765f9a5965bf268881076393fac97327bc52634a9e02588fc357bc6bfb3ebf6ea4447f6f352e11ce68a431bb8e0202bd9d38a6408f2646b6b9f1b51df1391b88da25a38be402b01f0458fc1286ddcc88b23666a28fff2a4198d6e03ca50dfc298069a329e2eb75fcbc8c3f1385cb550b93d230cb30fb67b2d87dca42972bc5b34f96fae3c236d80a29b457490b4920d8daa2a134e2b9838cf15cdfba38212cd890241723f2735ab9b477f12d77d5a452df1e246a359802229c0a9d1e186c85ebea978485042f727de53d792b6bff741c19ab26f5aa35682600fd8ee8a89c657fb767cf6177d9b3d9447b7bed4835049722e04541b1102a09f8bc21a4790f4006af2b6443bdf0935e5ac865cdad04da467343fbf8daa6dc40cbacf1dc0a53aa030a48cfc65712a57f808ac356fafd69cca34ca7658767d36cf2668be9ccf8080781467e43c3ae4eaf6e691113c27d377c0b60f41257d1b3d1157f3c68417aee968cbb0c66942203806cb9db8e8402c7e734375ea9cc83023fad4dafe1f83ac212850cd689391c787514138f11c02caf90b626437645ea22eb125832b161e6270e12b28926330bf20ffcfca8580769330af9c44f226475ba75fd2581810edb820bbe5270e8026f24b37febb3dbba3706a88787ee1898c41d62b63bf8cb6fa9778dd0534a3947b4650215473df769249f1be7e78cd36343e023e61224eb04ce5bf7013b6184437a576e65b5a335849070b78369b7dd4473974bf54e827a5eb8c3e9b9815363a63f606ae9bd8030ad29001de294fbb0cce1975d7c279df3de0723d871bb8c51e072148a09b56153335ce1b1adefd4d86cfc84bae353d3e213281035b24098d97290d84e5e33a327c78a8a051dd0bfce9552d3e6b349c0cf9e99fda403b6f554ed3a402a4fbee228da505daaeafe390dd6530983748fe106c0eb6085ee952e7eb0ccd09066cd8ad0dc3cf0f56dbebd10c09b99f39f7cb1323a7add6dcb51a0915dd70e333bc629ba5dbed8874e98d871b48b09d9acc6bddc6bf6c8ce3283084744c76d65276f3b3fcf4478d2e623079b52bfdd8814c4636fc5bdb729ac8fa1fb164c52b8c1ff2bebb16c565accd3b7080b889991701c4e66d85e2d02a20e1a4742a462a0841c98589494f5a17b2183424f93a2783724eb4c24469edbab54ed964a8e11aef63dfcd0f96cdb297992e8d4af6f9ccee274a69a3a158127311a7882ae57f45680e9c61f40427b6530be5439ab6afce80a922cdb7a297877dbb55776ee906f19cc96808e19c45ae748fa51dbb414276607f3ca8a7520e94ff3bc16fd7bd6067b21cab897e650fe221aed6e4569f9c0cb73102c21ab6a681211a52370d6873efd38fcdad72676e9983efe06012d9a3d8ac48dae3b9d845950ddf6f99b9f229d027ab363c66aa481dc2da2c5998f54121684b2ed22cbfd419e812825b83646854d5f74ffe013787b405f720978ffe5d3113c265581a733c55dd3bf24612c51ac106fc7ebaec1511a774cf25e1a0f9de4ed435e73d2cfd639111e327220f1d2660e1402c3ace4cd03e39e9a40173f0aec1d32d1c4909643315af9189b7217474798f4dc24450e5aac079cd03bdafeab4d239326c4359b09328ddce80ccf1d3ec5437aba6a11ae789775f04acdefcf0d8c82eca3ff5c6e96a14c321742b2641763802e04219d35a54a91015052c040902edd97ffd25f618a21f8b12cd9a69c7fa6f1876fd732346f39fb788786e6c3d1a8763d80e9c914522925a29f3e2626c603fa0f53e79b4b44da17ae66b6edf9408dff35dda224076d2b55bef4ecbb83890f1c2e36ff12bab4cf681b648f20317b43db297ca7fabb59acfb3eb461c143372cca8caf7a43334d7e8f58076c380cd07e8c80d447a7909622a8da6449f1d66ef1a77313e5a7256d6bdfecd5da9ffbfe72a5c47b1dc527b120c0fa6ae1a7cd8ed215aa1acda901932bec323656b28f33d4996ce7a6de01192be6175ee56d891552b77a1a9ee3685d1336d0df6d3a273f28e9f2905f5c8d5ca88ac9b6a1bda9a107ef6b99d5c0ca39c64231078a71647ec419fe0bc3cb5cfa3b1189e8c302afa05620071f0edb97a7b980eb653b02b7515aabd7c06094d060383cc08bb5f6fb91b21bd520a69e61257195686efb68a07541122844a263882d444f1605e6e51e03c0254e353983a74162d2208b581da0490bdf680f2591f4bfc3dae2fdf267a764f4cedac34425ea7a21d9a +MD = aa3a8e590bd53d04fc0b064006660148bde3ac9c9e44b82db2616538cfd8e175d0855aa9fa4bd60ace4a01d04c8c2baea401e61eaafd966a27d11e037bc56f57 + +Len = 96856 +Msg = 7021f18b8f398a5999fcdcd128aeea78fa2308e697d59b7a3433214cd83b7163bd4a4329f933f21b5d8f81c59e55ddeeb2ab61107dfb9f0bad485e19e3c3df05139965982d10f355fdd25866508869d558ab8eff5197804665e25007cdebaccc3ab65ec273f7156d3f6c689a85701895b2ce959d5bd3c49524a700fce0dd5f1ff948368d1210dfccec06b94a8635719689b980d0e2d5f55fb13f75e162be806819f7f5e35484d9dacc47545f9cfefc41a417578230c59a0bd553b79f9cb9970e636da4ab7f7b8bffa6d840bf0df342fccd8e209a8bcc3c03588bcf1cd6f32d799c4f4bcddc1c7ea443608554213eca30cac6e5003c1262ae028ec4425897c9108f48f030b390392f6c882c0422041c466469ad9c8bbe94749a059ef869cbf43d03fe9dbe4cff440ae7f83cb95670c1a4631c8156bff85bbdea97662552b73568bf19595eee90289b7c57bd5a07a740b48f89681622ea3df1b8ed23b35c8514f78c422df8e36b6c4cf54eb8cf7bd421ddb0586ac4fab9c478cdaedd89cc5a195332211f7571b9988419843300fa1ded868d318f48909078bbf1839c8fed61cde4795d3abbe1a235aaafa239d5ceaa2b19efbae08a2c95e020eb1469ad06bfb712299e83b37b4dca28804fcf363ea463fd9e9e647216f0841085084bcb5e9f6046098e044586e3df655434ff0b91331e9a628323e995caecf485084bd13e274ee6e2d3c45a4c8bfcc9f2f8d03c107ee258031226d5f24ba132b4bb70a7ee7f0b5c7c15cbd8136eaabc24444bb103ae3a9f48f27420769a2a34dacac236b6d01f0e9ffd22a924b370a6b0c07652b2eaabd7facb15b066e00f60bfdc4964de4210661332d0b3c783d7ef5f135b08645bbf68e147126f0d44d9202a9a0e1aadfc68ca9f5ddde0430666fff9e602b96229fdbac50c7243b2ef0fdbe5ab18416c27aea40d265216e263a53f46e0714ef57bed356ec23d169c0839f8b6b96fbf64ea6b5b2334363feac31c150eaab2b063791842a4127ccf14b8dfe166691c7eda6e2657aa309142a44d54ea18ebcdc5f44d05472ea4365662278afdbd65266419da670069c16b07582ad4272d4cc877f21c3caed51f7393ce7cc1b48255955b6857b7be2a90cd764e8124321575adada31146dd612b3b6ea0e00d6e7fe0724a0e0d9cf9b345be77cd7bcd75980d844f5151aa3e9a7197cf1f7af5937aafc4185423a019cd8747f21e4056567dbd53444207f03747998e9e9473018b3c6a93af82c24b8640fe6fcf8af7473f8e2c2476be59a132324b29c347f2b9bf8db8e7f6e01124a8d4533ef657c929979102fecc0f6f4496212e6f268020a6953441c9d5b539b3e8512ebc4fcddd82c64fe9ea2e7c7261cbddea68af87244f76fbae40344b6180ac7e36f2c3365cdd349087ee844c8a81392e281c47a3273ccba8a755fbe8b2145d2414e738d86dbf491c8415b6c8de2b48db9094d41e51f6fa04d30f12d554f6640b70a397fd39b26dba8964ad3897e760aec9d73f3ec9046dd7db76625a6eae27fbf02fc9ebe73d08343ee54fe4dc3de96d7ced714cb8ee8ae96692d1be28c510bc3f92b5eaa0e982504a9f8513d6b64be150df518f453dbb011d6c484babc2861503d442448c3c43d7569a380eadd9eed2eeb4c651997867e9a80bb0471f2df0d0e5fe5a3fd2c0b39009df4e1e882e3a08fd74bad8db27f567ae77effbac8fb8b38c17e4259bfd3a450c75b1898f3e984a2627146e34d3cf44d7b9efaf786e4587a127c73c0e7a41bc06644797ec906e6111d6bc59cc035c47cdd896abae55ff13cb37edcd54bf2ebea0b5fa92c4ad2516658999e1ca3f043a35dcce3674c94e21b34d3d1f94546b13826fb0c0421b262fca469550570f2fe3bace7e99f2549a7700749f7cf7c25e83539a536b8b64d874ea1797ec9afc450c02b58e1d527d4bde5bb1fb2aa59071d6bb3fcad9ca0fa2af6a0388ffbc8dae7bb599e507b9ccc91e6c0e3972c5460bd36464fd5225a5eea6f5124ecfe44bd3f97c826da251ca7dffda92429c7f6c9344f314d420c4ad2322314dd2a53bbc1a4dff790d3542fecd494e45fcf0fd8b73ef1354378ad0afa8ebc6bbfcc8e96aec41e585ad07b4f122c36f3050b6642a129c6a2e0ed77134e7c95d65b58215ddb29bd6af3561ce29e537e65a2635dfd2d815a0a94150cec347849e51e319e79bd2247cfe8e8bb8307c6b5acc67b6930a2d215ecdb83d10e430e330896fd6882eb6a47c7a9ecd9b8e5127748cf981ab5a79874ca35ce65e1f0ab0bc154201201ec4e3812b4e6f9fc9ca35dca4c6de4d4a241011321392e1fd3eb1e9fb43e2d6f166a8311a87b8eb6b515c391bb515a26396845583c68ac10532af604559c0d33103bc344e2ff2a8fc4d6333faad6dd12c38abc29c5e1725c04f71c8fb6ee53f6502e833cf2f63fd0226137348982f022e704cfe87c17f35b4fdc1ca2369974116cdf2d6a6705313074334a10d5da45fefa731b14cd90a1b6ba5650ec7311f01cbcba2c4dad90c11920e8e6552e4110df9462084f18c02fc6dad263beeb0c5a80c64c2a67351d5202ceee8651e15c137d4b3e21e80c4ad03407fccf9a1cdd05e620018237ac2f5685b4b0b4c79d8fb0306583f29006855556e811ff2e7708a4a53076ee4f613b510aa8ec0c06b150699199cfe4a7a60401d7f1de7cbc881399569e18a90ef2c5d419e1dcd69fdb42b2295e6e92bf594b681f9baeb2f4ce926662cf734d06df53522c161faf1369db2c600a0c67479ec01a966bff4c47c8e99e623af364c795684dc9ac211fd1fb8e3ace4315ecd0f5068be4d96ca325f59d93dd67257ab1a379496b1a9d838beee05fdc80179dcbda832e837a63522fd323092cda95e965980ab798f7c19471d2562e03578df4c8ddca84eab57fd3c5f02e40d91ba14b43c1912adbba49ad54446407eb2fe57c387d412193111e9278caf3ed8a90f41aeceea1159bd8a2488393ae8ffc7fbaae9b278b870513cc28c8c2386189d0ead2b14dbefa51e957e0806e7a28afcd7a06816b1e17c94405012684404f8f6211fd418d5f6ba652c72feb337b647dafa01e5bb65d66581865b6227fc009e3baf6051e1be6cc01ab9c61246116b5fe8cc950baa7de052a174ab23d132c132f420394977809adec6a343ebc95c0afaaeb6247feae2456b7a7307fe6fce90dda9db6f64e301c83df052b1324302db3fb51e75ec837a4dda96ec399b08b7b5c6e34acd4b2c2b3e05202ed88ebdea2657846d51f87e2f42c47d4507a1a4d7781729d41aa65ae4435dde9f7fa83efc336aa40c804be2e86a54b5e83ab94b1520f504e11d1c7616206db30d7027ce20499f9b61ca8eb78d0fafc83b9a8a0659f78afbd99f5686a81e5e26e071b4753eb21ef3d6f769050577003ea8eebddc8b43fe962568fc95828358c0804bf73c3eb41033d2ce83d53aea6d9d9500f9d6944d795d2b40b5a88c97820755c6972a08989de4bd18852e13b21e6f6c96e7fb5a5d22d954ef29c9aea40585c8a93d4885a6ec8dfe9d161978163c3b94792e53c6bb2191083c01ffd0f009c23fbe909d9b2526b6ff25df9d515def8a757177e6c0ae9f0db0f1e553dac4b54523cb3931335f72e8277888c286d05ee377456abd317fc4d6b2d47ccbb4683196dd99df0c369af9a9de5db89000b7b2ce02bfaedfff77b77378ae6f724624a63dd3f02b378a1fe2848c9e1710a55a12d37ea5ec5414dca16c6846654d79403cc26f97c5b9193656fe99014e495e00a77b53c0cb2556f6a94aec66076633031aae1858549ac9267da16e4f054314f2994de9d8f459af0ff8946bd4fdc45db7698935f980e284397ef4714fe307ad790fd2a9b50ef8066db5d24d59ee6fe0a250d93043f39a31b5827f0bcb919c13db3190f91ec20b4259098df9bd8370a20cf82870fe52cab8e3b0cba489b70a2c60281142dcb8984d1b1c4bd9c863ce8d3f88fd5df24878010b315fa553fc5ae2521cddedb897aa0efb159754423691888229e15fe67baef3752cc374ef08931bf7347a607708466d411cf6d2f2a6c27a1c035bdea493737868ca807b2584bdc199997205e4b27652345bf2bba159674d563df342f239d0772e331d21bf18e1bb7e734d43c63e41a51df7127817f78be8780031f39915cbd90d8e22cd836b06f1eee99181e453b04e441bde6f1c293333ca739e5a61ce6f844e0318e93b26344b3323c829079ac936f1eddf097897691693bfc1dd110cc16138bc86dcadf073b1944a79a2f7ba96436c959caef2e834791d0b22e57379cb5815def40ea272cc0b58862d547c5c1f5efc3c9ec754c49d44ae804adb4dbb94522b94eae7e1544641c8fe6ba75e286b70eb0a6bba64d5aa5f8f46c025687a2435c404f1cf343dea3b2cdbbb0364c5825f7f268df1ebc065b208840c2d8c5f84eb2656902e61d5bfe2cc44a5d058dc6c1501b98cd2b030d6266062b7598011bb5a99b3506c31c5cd1cef62b27600143178b8eaeec77dcb04a1e10948130e39d16c6743b8f16cb51cd2de5d695d2416da72eee23d371839f70cd1a147c2fc7fcf07d62d5025da4cb5ede25c53ed8e8a6feae9c8008a4a23b75079513dcd138abc15309aa07142339f534187f68f0516f6c7f3c5c027db314d532142b19e1b03a07dbbb1313b6e12e2ee4307dca9506579f352010478930ac0ff119c2b9cdc918327c09b8aec249087a432048da5381dff554ea354e43a57183b9086332f1edd6efb867f33ed2d55945f54a590e985e791d531d438d397bf5deee72852bfa88f68e15786b5a5510a1406f3136cdfff6a365b41bb39ad73eb98025fab0fb4434e7ac179d7977b57570c815576aced6d4ff6cfc881dedb9682d15e3e37f377b7c2ab83359c61d909e386b8c2f5d57d993dd9190c4db0c3c82d0eeaccf3856ecc94030fd3fa9c262d57899384b871f649dde822564836ced194598e53084d02496c8a4d9b1bcfc98c5a1efae2e807c046d72ad0ed99f864785eb932199ed39bf8f14926d527822cee954cd523ad204358d2a80c1b6a7eee863437be67dba0a29fcc4780c8453db61baf1b0c902e43e6467668bf26e051d2c4bdd91a85ea3b7d07a58c45bd9e89cfda5193877194f814da6c74cf5725f87af7a2a92fbbf12c96f822215bfc5aeddff423bd2e0e06c832da5cd426f661fb4cea8aafe35119fc543aee0daccda0f24e32cca0eaaead39a90fed8eaa4bbbe3b2641ef21f8e89321e94af581e78981e855af544a19ab1d5e141c8ac459d5c36132c067accbc6a565ecf0e0b9b446cfcea3445b23c1b392442389535de366c7fd70be94fd021e3f07bb3b22d0a7b4111e68a65f1a4776dad35bbfb325c5c124365c96f7a15051d89dd0844c6526342e7e222fc09bff676f82094a2aaa958760c272e410281b23fa8ec966bdf5d44940544c5b30377e27c8d6c8933a5ac72c161840107effe6f72d61025d07e126862f3753b32e6b381a6f58263562c4df11bcbe40c68497383de9ab17c1aae5916d23ade4c20ba5b1d1db7c8e9b245741fabd1af150d19c737aa7c3764f2741a950c61e6c0268856fc095ba8e5f0fb09429afb4ee59e67e4d3ff040aa500da3d2e39f0f45eeb578e669169891db753f4a30fd12744c239b19f04bb9207ebe7ab29816f72ef182feaa5dd6ad35bb0571d8a33dca3fa219916e2e22837525ca34ace0b67c73b5418520016e6ed65830e6d3e2ea32ace648efbe6c0d4624dfa17036400605b0a481baebe64634103d780ca0927ae2589332048f1c74579c16e4abf3587e096249b3fe628ee6b36ff54b61d314686faf33558e54c1e05e6765f446487c971e051f68de386dd853420a3b74fffb5b213d4133dbb3fef9c0f34760edba3ee9aa158010b8b20583aa32d6c8b46bb99bad6f475d8b0115f905ec35baf0dd11de4410263c3c73d8810ecef563becad1d27ad1b012fad0c986b39eab52fe1597ed52817c5bd80269591752e0ace281d6680ff10624d9b76c2b40a722c973e823af7be5fce009c24a645a7b1304ce1529f4d349c3e37609804f4382469ee0e9579d26ca12794057de3b3ea426fbe0195ee17b4873ef7e6ba87b22bc6143c38da62ec98a77781a1797563a7a76f2b6f2e7b64e6990993132473764b20d58aa4991ecfac3767cf5a6284dd44a9d99b13656fbf34994816d11defc900fc52df3a1ad4030e1a9f87167e37aa2b105516d581f2ad0551a28507ee2331b2203643e2a4ad0e2818c6b1bf17b751c2a48aa59dcc2bb8c287c0ea9de03838c95527be8481d17a60f884533c732c5a732d214f538c4367d104494c7a395666ad63cd5908f767cf2084837775dabd4ea572c11ddf0a62429b90e6b48841a442c612d21b564f9893cf826824529692b3bf3c1315298eaed288f23f29ae424b547d2adb0d56d18b50d4bbde63bbeed4142b53bf421a60529e01f4fbb3d482732438729335f1c4698d99f78b3b9829abf6507f6ca998c7742f6c5cc25ae24a423b60b39f9d0d7259d385fd17b4d1903ee39688c2548c0d3d0b32f33e27c1e2e3205eb5aa4d932184a900972bd64e6bb66265356b4adf78d4bcbc81152157927c5b98405a4b6c1a1197728b6faaf8023afc254f0c93775161ca71ceef518da23675781c57a17ea5292543a28a37b59cf3373e9e50383edf0ebbb8a175bd4c5938f565104a57b309f4dcdca425856e82099e19eadc401b6c0119fbc44e6f7a01ab63c7e6db73f2909943a359e79d0cfda3b61cfb5bb3f53e626ba1fd236f00e0b6480564b1ff228041e3018979867553e909b0997399b69e5a3a12159cc3c73e822a895375022d2213425ffb824893cc041e3e8bccfb45d4110db5d46075b6653694ba7ace85fabe38ea2378abec4cb21c7d2c9a0fe08a28ae6cf401188db49cfb0b00a3658f719cd763b7c89c798a4b58afe38ee4516de259df36666b11ab2af919c394e1287a03193381b3fcf734e1e13bcc2ff255d6493cefe4c9020b825857456b16ec58fd3d26e4eb01736f32badfa94e44e2f4ada67c2364f38482216e3e1760f12b28e29025fe5b79abe86c1e7982d0975b36da4144041fac9a7f70b4d5180bed489f11453e073be4496ac957d74cbcee06244562ba197dbbec09567145cfd2d2ebc673a39b89f20af8fd34ac229279128bc5d75106eae7ea2128beefb5c51e67bba3eef4610be8b35eaa926482d96fcb9122765551ffc3ffe2e48d744e80587561416b7ebb1685a72378ccc81eab06e0c0410bb8c3e17ac3d646ac49378ae6c484a5d38bcf3131adf070ca201f8fa61bc22c7fc0831775fea65503b6996b321ccdd90c61c5e4548f6d9874b4ac0eb7423cebb8b6ba291b78f91a7a029ca9a245e4e40048c6b7561341fab2cbeeafa11ed984a0e28fa0d3f8789bfa7767cea00670ce958afa339f02149e6dae0dfacc773e011e8b2b020748cbe2695b236293291a9fb56e88df9723908a8ba63077a115166919fab5da1e2e99f7b1f7f7ebe3748960473b9843a7405bc8f6f97faf86bf07c57b7856ad80738ae0b8930cf3f7b06519333a54e8351f1d6094ef2329e43fb91c2b4b360594df47a768778a0139a558d061b3e255ab897f584fd2446d245bd67611bb7c69c4397854a7ea989e101a088fb9ed6a126f4628ba0ee80904acdc03dc15125162784bc5ed5f355e50e4d81d5d223215a8eb1ec28eb97b9b75e689ea541f96dc7716dbd47c77a105a21ea8404387c80a9e85d9f2da37d12248382c33e91791463007b25008d774b51924501947cdf8727ca73e62a87232c5060c8b86a0e549b615b398df9a67f6953f5f984f74dd0a75cbb817baff51e8ac36c9708983710755af825429390f71ce9b374a8bcf9f463a12202aa1e8bc3a0060d7a1e799a3124a85ddb0d7edb72b87b5152c7462fbf4ead94640c0699b6fe90c9ee646ea64b4be1f2a7291be476de9165f08b334da5baca99420bf8dd6d08ec386094f7f9a33d906d263feb5a77f1c457fa4ef4d22c4a9087194455956a5180cf7d0a95f2fd8c2c13e4bc7d9bfa947cadbc8d1b6bd7709814562fad70136ae705905fc9209eba2d8d5f294337733932edd3e007691bcf3997953880ec0ca7976146ef22112b4a0d4fe1f0cc9b86427f8ebcd259588db8fda732f94067caaa1a690d43113307ae53c239cd7a568862cb06f3ce81c891b06cb9cbec9c81b1f4d8835fe61704d879998ab2f9ecf71dfc9dfd054f0127bc680f45cc7cc5b876fa5a56cb62b415021e271fea1094db9b8270c76dde67f482224de1c1448c7a6e2d2849bc2378d2191eb4d84b9bf292a586dbfc99f716bd7781b10426be31562c2fcad2ceb2c5ca81fdab7a541696bab09c48031613adf100f8d123895454ca1554aa985f9b2b6cd12d834c9ffae19231154d816ede9e2db31a16d645a17744de5e5ff10b473a478b40c4e58bd373d7cb9444ee009257d20247fa8308101964db8f53733e4142d914b9f8cba41abde9d49bd6bf77e96b7c731504b03d4aab88916a1da5850405a0020b8765753b3056e09e6b5c313e598b8a03cdf4419bbe5e949116fe6c19d32ad7b809597bdf7b9d740e8b6ad92ba28dcb96aeb5d19db2255986e7e45ffd3bd80a31f70e3461e02c038eaf61bc1bc7019c403f7b59cb379b54ae08fdcd28b0362e2bc90a1b5d1e8113715fc766a947758082e8bb46aebf1f1a88e2b15026d0d397e7f7b3bd3b774b28690502753ea4582ce1430c24a2a92f1faa1d9575620e2efc091bb176879ad8b6d847a944565e37d5edc6d470518659e8840220b974d8a6af01ad89f3cbe9c853319022707ad583300afcbab635e71de99948d978d9b0e9456415839162f478622767147636bac8afcb5d1562ca4bf9a76c5a26400b375533a2fc54fbf73b87780c44f5b1f47e86c991507b1289155bb68fae9dab83cc791e30ca6480033f741962a22cd04e813c020f8f5221fce3d27b55beb617cdf0c359aff848c9f170acaacd17404daf7356ed9852412d8037fc8a5112f6216444d27a730e68364c6fbfc0ae1cc68691b575d0ce51bea1cd7218482443d434c12924f52c8549519e9d2bef781b36178fd7f77013f6210b3f22d45921b9e6ee7f1e195e3ef562a842795f7bdd9b057d144b8a300bc82ee65fdaaf21fbfd949af8b44e1a1cc75aa6f294e91a2124bb23a9907c9508402eafaa0a1736f58763e6b85c21bd588387da0970473ef540cda7ca476d23abe6a6e398219b0ca0dfeb4e58a632bc74a280bdf18c085ebc67c385f0c0ca4069343e1eb4c1a907a06f813e34030f9bf3bcbbcf65489afe0912232aa7ad128fc2a13abd8a5adfec66cecc22e4f306d0583acf9abf467d914dc86312795ce4663ac6534c836d8dff567622b8e606c70e0495028c8a062ebd0d0319e9c060ae78540bee383a7a51c501ee3b5ca1beae89ab541b313ff83cd5c95aadfd2748df1a80fa822d09f1c9d1fbaf6c8ac27b4bf79f1060055bad1680052795e9188604e1540aa5979c6444aaa6224ccfa2dd2dbc6222779557854a204302781a0ea8ae414fc4dee44c5250b383ff4297dd44a26c8732c84dde21564af563bb2c941139dec6b174afa44c7c91279ee48fdc52686c90a9e8bb3a01b974bec3d58d235045fe7b492d563ea336a81379a8f42a76ee50f0f05f5a0596f211e1cb6da847064144b0046f7466070d8cba181671323282ae3abe72a6cb517ec710c2da2a7973ba36176ba196c4e86f938e02a3939e15e3d8d05ce92df5e1dde8be42a17035592f4713f76a19e5a7eb7121c1d6b7d88170655474195c1f988e1b6cd35a15f4f70efc38202f9a22f5ff99f7ce367a5c05c6c8396c99bd93161dc38efd7a88530dd7c9e68e787407331a6292903937933345a5e1ded0cf0abafb65a7197943b9ee1834c19acb542cffca8f64b0559c387a7b52f013550ce127a59647bfece4a4185ec13bcd9ea6eeac9e64e0972204964bd663e6d29cf3b0ccbac9e3793bc7ac3d09f3c79f68d8e6d9f487b8bd14fd4737f55d38752f1ff41a9974fcbdec792c9cb840e798c0868ff87b6c4faaa502c5bf46a3677371fe15b1c02c15f67575cfe7c84d3e422c2c5498818707e868a19c5248eae6660bfabff2cd53a1cb7d59e07ed85d1e241236cf2aa56c83eeb65635918a7857c563b23d7e2f8032955a7218f26705299709327a3f55914636449d1bed79e01e0a0f9128b455464afc937ad3c2d2e9c34377abc0472079c14769e2d9d695c6bbbc6633fc35dcfa4d69cec0ab60ca6f7d91e40f4bc2849a77aabcc3d9dd7c80b3451df742633520dc5552dffa6cbbfadb1ae4d977420087ebc8a3bca6728c92874c8d7775ccec6e5a57c6455b4706305e36e0a6dd3602a6a049b549ba264490ba2b3b2110e3711759d99f8d48705794697e7dd3d82f298b177677d7af7942ffde79bd80ae4741d05d6355144c891e8b9f79f2fd128dd3b9b3f751f2d0ebf63446b06b12a858fd0dd78d7d76d1e1d9aa6282069ef6e2afa72844da37d8eedcc28557fa5399a8f1444aa08f21732b0765555f2f160fce0bc7c6d786f32202654f3cd8b1cfeca7dd084944f0a09ac52640da49b31ec79076b03237ded146b73e2ebfdb47e42be60ece35f34870c330b4c173da58f5a8ea8ee4dcee484ea18db5f5a0b8133cd1d404faa333fd1e86fe416bb49987574e2ca2da294369b7ece67b1861f7aa3679026e32037f9506509e4ab41f0fa4a001e75104ca0fa9c96361ec1b8622836d8bf188f8f94e96c4aa914f1f1595576c7e9b17f9218b8eefbf7087737fb1255e751213b3d71988e61f67ad113ad306191ec8762bb25f9f975ba2dbb4d13c1665eef46cf73f78c1c70992033ee13147326cefea110ee4325cc27967640d2bbd303409134794e4f8040390e00cbb488144d381f24d99c21dac7e54a8e595f8a029fed0950979d6920997f4b1ef2b814acd0d2f1d35e5618802f9d51ede0e3b55df99db60c150c60664313df77ab4640a375437c97e645b27fccf6b4791d85c54adbf9a1513ac5beb9059cd2f23e8695610534c856ba90763f66997a1c576e41330ba8d10550ed0a80a8c32c76f2a19a4e474cdefa2361ec29c52dabbdd8c5b17f52534e119dafcd25f52ff6ed11bfd8d20534c56967dd9da3b05b5044e6b39e9678a2215e6a318e0fb188383ee107d5560593858dce2e1016f1cb6f98ca608fe0453c51d3fe9bd5a6a778f851aba21b401012274ca27ccdeb4e2413a3ccf30cc581cae657a3162b529ea5400eb6b832faee59b19029ee5d88900f414c33959dadf3f3e9d49fca167b5db7175d4c70a0ea670f2e40adad47577f33037b496dcb00646061313bde2089ad578626b3f2ef7a43dca34474e013bee239601854a41d269cb95656bf7ad1e4562d93513467a611496a1a84c6b04a2782c8610c9d611c8763a5d12b73c8b0f420e049c617f74e16425e9ae7ed4573f928890c3d6ccd4e8b81ccd8979eed4522d319ad6da4c96ef3f7632c5730c6169c9a236b9409103d9bbdd776858a1418d4367fc92e23068e0f2d1fd7bcd65cbc78a13f86f9bb51711de06eb0da7d63b27312bba4f2dbd537d2af3aa3fc282eecf504856355cbb8717bb238907fc0029a682f74469f155fefa4445d98006e652e7b8d9c0c8e816ec51bfbde1d5c9b1a581a5553b81f19cb41edb330bfb0f0280a72022d898e259bf56783075f5955d375f04cff01582f42b215c55a1ff4f5a009422cdfe03bff6689c5125c5f5f38547854db2129349feccc844284c0b5c7f4b253d35b1b7f57f80a9f6f8524548ac6e9adcc61399ab0f016a3f255abd9ac4d8d0dbf4942417479005c6329b62294505162e5663871ab7718d89c76e74aedd323d9b74f5b699f10f164b6f01eaf9e1b36ddefd92ea3d8a85b8c0a8e7ceed1adfb1d841870de20e5671f308463e5f04f2385b16123177fac6628024673afa2049e42ee4a888a3f21e9f5988a8daad1139dc2f5a720b5e8aac1124d46d374a6ff92b1bd8eac5444ec004eb8ada5e88b8f2efc81532c655bcbf5b4b335a42427c761d1b98be324766d32925693b28664ec5d9b1e0c500f1f378975fbbbefa96b839209aaea35e21ecd0a293be4bc6ca552b207947a939b7d1505bcef81bbeabb5caec35752aa7684330d7b2f49cc8295e8b6a9ab46fdf1bd8df2f3552f10cf5e7a3c66896c4bc9f0c8c5f0fa69e8b07ed7f0e72b1896fa27c9d781f66df6409e04c45a08e01fc1aab4b9f163ee1bdea646e92adb97679c02ee3cce9ae17625c123cf069c552e47f91e71e4337d6af4565e27db846c77c09827a9420836976610fee4d40d738144272e763332c1dfdad6473460ee3fce4f2f9aa7450a1262ecd3be8b2b22e31f9e7a0e4f44285f81786e289823e1b7752f106fbd3f661edd9d528a4c73a44d103f3be38481dd0258b66629d98a257c734a83cf7498e5011262d48bb0155c585d0db1d89e5119506d7d057481ff8137d086cfe253b84f630924a3e83e770fad0df22612241ba3f1c7b3952e18e9bf9095cd3ecfe2076ceec9c905ca7f0288f428d5e0bc9e49448e6e425c8224b0a52ec90616bfa9ee04485a3a4359f91e8ed4b79d28fc9442c4cf6b10a3962fbbfcba7419a0d931d3de19c460a4bc3634e8f5c13446fa8f6eeb5bc507b192c0748bdb9eed2446011fc30a0f22721cbeaa5f004e8182e0173580db840ed09f60421c3a506cea2da13b7bc24467f3a017eabb9d676c24d3b2ff4df6b10c46e5958d757e927d39b79a8dceea6b197171cb5ac47312dd73fdea34185553eb5c8beabe5f506a085b0b737f842a8a1f32b66264412b59bcb886463caa9f72925ab9e43ba258e2f69653b4786429ab617f98626ffc6c44f13c964e7fcb7d16e988990d6d063d012d33b4e6e03790d5c79f3f55e2bbdfda6544538b66429748d82d50ecbc53a8cf967958901ec5061139dcd2c227472c23fe1be88457d9940f479309099150405519b2673a9cd634669f7c7a32a568fa27a5087bc1bb561d741e00eaed52c6ae9a9f24086cc132c2dce1c85e2cc4e5f1ef435235cbfb82d97e45bd1b1f697e99a60e1964aff5a0577be708a738ec88ba82be423d297d257135a412c5273c3daa8250d7a38aa0ea9b4c99847cde8517fde80020bc63ab078ca12446108e35ce89354ba6ec862ad63856e08306a7f75b612aef34d902ecefd3cbaba323dbbaf8ddc7e9d06729fc2dd3a1a24f6c1aab1c8f4f75c5bd8da7a7edba226f279635824e41109c3efe7cb61736c92ed7c007222f5f791c8f8c46f5847672f343480d3586aaaa51968a133ba91c3b696f1f7434e863e282788830a23d088177a078aad92a0a9e389a572982345be2475bc15b1c62619a3da008cd76c277394365ae7436e56ad4996fec27555efca412c42e22a0466488952e948538bbcb819ebb72d3135cd134bc40d1737acf066b10d1ec33893c7194d44ab4c0b2cf0d40d2ca4d2f393a47a6e8338f77b930811e8bab85f49eeb92a6401ef1e6aaa7446025b9c6f07125d4126670ad9adc2976a5c97981cfa9fccea623cfd25fe9eb78c8e0b1667e81c581607f20b343a961ece81364662b70162e7cc388e0933742b1604ad9b34131c45578786b29dcea81ebceb094be6fbde2b811696fa1eb5b54f810ad5a37a24bc759429c7898cc65307b41ea3010055608764b5cac9fcd1fca54c04f5b7a07957993a73270887be317a5290761e554032f7013e66862a2494cce587a0503d9d97f0d8d817a7f512bde706c504ec4c48effad524dcb70d3a2816dc074805a81dd84cfded2bf07b6072ce5f30d2035bdbd2235eedafc53c6f21239e185f307656a2edf806d67a7123da90aa686fec0a75a3d10d1d52493e501a63aa1f78692ef4725475d9a99e8cd96fee96d0211eeea2bfb47e1866ab69796e679e9106384863e120f5ba17d504fdad38a31cb8046eef901e00834f746437b7afda21aaf6591159d3d64c93c6900d1cff3d82774511c8bfae62c29f2cb537609ceb25b95bb7a956ddb5f5cfebb49429b2e4c5f1595daab8c5e37ab84cb2e503bf5031c3b10a8862bf033a0eacc90f7df4373ba8a9c911f5f521003d5d03cd1ba797ba4c9eb83b07e85cade29273eb642383782fceeaab01cc99f790c61e5c02b62043d68d573da0fa10b5de251bc486c177ffd92118b266bcccc54520791e639b9852d4055e0ce864cde673ed3717506e83275758f9e49f3627fdece48a80c8a85e5bd78f332528a8e2b426536c404b8b13a30ccf04ae15d93a05da9af92f8c6ce0e353837d12fc370da377e021fbf297c7e77c0baf6b55067171a0ac1b773969ce7ddaaaa262ddaf9d48eb2bde96c0250e69179770c8e75e7cc5d1a088044a2f858fcf3d397137732ff8f28f189d4ea365ac81eaef334741aa86e000b533591e949dc3e3a8dab41214482092569bf8a34c262d8e8136ff4099194e552990c0b78a2c3b16871bbe1d08cae7ce2f0f58a5506a8ceacd4079dba7018f166bb92baac4bfa74e4a90cfe47bd5caaaf863d919e0fe229829ec319372e424bce1f8f438d2dc9b0369f66418dc0d4ba1493604719c35810f2d96c0d88b15a1c122fcb51232e778de7b99052a97e5ed5997f2755cd0b51ac85edca24b3e3a88bbb520d8a77374e327e6154d8a6de4223c7b35763c2d01724c242a504c2ab74c150ef1e96903194c883fe787c89c7c7cb2595bb1801f8f0a13240c555bcf005e65970c71e760292767ff7c5e55c2336f63c8e1a1d916c254b5b50f2c0aa9ca4215e3cceca32949065f9b603bb27d9d7cb92073b197a15fd49c7d8f3ec9396999ae8bbfb41cbcdd6bc79a2faa8f0d1f273b166e7b5c5dac2c4fe4291837fc62c7a7e55182c4997aba487237152c1f3cf152114e69979a2bae386f4942a7714a5e9a972eb32b5d95945aca13261a127b6da687a006c9e572fcfe958c48b81684b0ef07a3efc167b26c66f84037e9955eeea10fffdd73de067afafd4e84ea8aa6712dbd5d73174645b505935ad51af65c06ca10aa4815c25abac5ed2ca1bf1c2411cf2eb7e7ad77e3f0af11af881ed3f7488a105be13060e42ee80b9309866982155be25fd7f48b01c1dbf9cabb75bcb52689a5713344083769c9cf1e3700e154fe5c6e91be7cee238b04b23909a00f2a13113686b8d146c8ddf3be2ab49f11f12f392a09f5b72fcddec1e186dd3e49aab0e95a08ec589b1d0dee4f44fcc189fb4a7abb352823be751f9bfe10b090facb625a7674485a73a87c21f8f99a08a7e7b2a9888fc053189dcfeb6e832e58a110b9ed125547577effab2741b4f6d4fa2b0a4e189658b5ccbc8238c94a90e5caff2a29b42873c00b970d76c003add70f59a3c0f1d54bdc5955b92c84c3a2d8d70b2598e26a5834b7e33588ea62296f45e831ba9ab924373d0df70f27aabea263b95ea313976f15e28895e6375cf40e3c4b169379de8c46e629ae89285c5ec2df7e17d0ce4c12f439dbb1172d6088446116d4d425a1be8bf35d51f31d550dcad8edf3ca88d50e402c71098432f960a242cffef514af6586d30d74056d21461abe7d74d8c9ee9b9a18cd21c5ee9427985fdaf78ecd540bc803aea718ae4d92431ea11d8407d55562ad647c44c6dd279716cc5109b63c0bb013d54da547366cd467fd4064d945c62a48cb9b994220eb4f16188dee75c3ffef7205ea53ce78403f38e6afe3a49c58618966e22be6fc0cf0cc4410b5728852d6acb50f7caa8fb6e3fff19e98f065a698ddcaf2852beae75cb7d39be742f5aef622572fb871e93b732ba2aefd532e1b40b45c3f3d976a14c3474b520c4da86ece8180bd6fab11386d4a8e5379334230e9bbbf4aadbfe61fc52920059d18fd0cd038c65b3acca45822eaf91ea5176e82043268876dec0b62e2abd619023b7023abc67c6b823cfef5447b8772f985ff7910d6cc87e6c23688ac6de1fee40bbe2da1a92770de92adaa427ace02fee571a0a0176fceb0c8f3eb72dde839ab201395625f5c0db8641ce19d7711212dec61733262c6ce4476c025e67a3d5bc01f3ce55e578e84a807e935b5ef156ffed14b7b384765f92a3237a267d175d7eb3f86b80630439816148f013c412f31ea5aac233233d1f1caa1a6fb8762162065277d67fa67ff9a9b006aee912be33988dee005a0c67f2abe4baa8bb5aa82e7c66dad8f9b6d371e9f62295844fdc5c952d4939d146de2167d86befd831960709758839979ce6e96aba036d8d8354b73c0e24343fd988f3770e960ab704d236d509e9c1005fa2a9538411feabb60e8cb6b7e5ba4dce4fb2040ea1c2ffda440207a96538dc07edf8cdddb41087f1f1232bb0f693a32c1aa43561f6df58bcd4b5c7de6465d59db120004b546ac83be7c3c282bd87e8fbd013338efb296cb16a963f2e4e119127d567135859d5179dd8b5a3b4a45ec4435b45251d1a68e0c1eeec94248b04b8b041162f8c2b191c1eaa42f7ce11dfe10da2833496ba635ff44800f1458306f33ddd747b6e32fe7ec646b0e6596ed3e4608d14888242e38f53601a7c1b9fdfead891cb2086d74ce69d944797dc22027845044248691cb018e51e815d2d455644884561455c80cafbac7c5133df953443c3ef539dd1af92a3b36b7fbd03de35a956e1801379974166fae714e1ea2f31ede23690ae446351d8c32d5ac426d342c3484d6eb2648279ce8fbbd9ca8658c01faac241a449a0b45e1f4e5b991d8a463769717349a5ab3adc74e2e8153a78ab812479aea669ce84decfb4ca65706d08b0be35d900c5784c38b04289eb8ff7b8ba57441edd2a5589ffd949ef4fa8e352d45182e6004b5376894bc504740c3db0734c0cdb70179e8b6a47f311804c53ea4b293ee471bfa381774e52a0d739b25a5309b72b88b50f52c6219c7a1fe42799be4e53197baacf36acc0d0a73d9ebf8003982e574d8e11a5bc6d2b7055f8c627d5c9a7ce4492415acda9295fcdc4cae82a015aa6e6290d4ef435883c4a11985c37a1244af70260b885124411b0323d5b714a22627c0e691315809b2625b605008ddeb1d7ba7f9417790209040d707ea1807d6dd136c68fbdc8574c750f7075da7e8935bbb593453e548160820d07f782fea1 +MD = 64fd89d0b09927194001a751b742427940c96104d7bc37489852000bebfed61055d2ac26076d5abb8c34fcee0d0fb3e0cb99ee1c7dc35d3bd35350c9fd1b5b52 + +Len = 97648 +Msg = 00c317f6b591269b94cc28ba064e5f1ef661bc877bd3a359b74dee92ffe034fe3be14bae90f70ba63d7255d6c3de544c49d803a73e21f0cf40f13fe33d8ef173d81c67f00eb7216019bfcc5694737c22e1c23645c85db12860115d0d3354a5459d1e71a375faf032ef5c9423c1355e0985c55b495fb06fcbdf5551f6295bd7dc538c74b10ee7ff8289f0b523924b826aff897c9a4c42b0228564228866ca0fa0c211750121a7d6b9ad2438404fde70ab15b7a022d73aff941ae7d8a934cad6f9b1537e7bf661fd4024a024613f15b13690f7d0c847c1e18965857c43d983b24fe9fa9607d43efd7db60b816eab19cc7137f01374e6fee0692fe7153d9e1c2e0a33afc68d05665cda2a0e584edb1149c6d44b710efa1a839d40b4ab7fcbbecf92551a15f5cf00a5be4a50b0eb1726b19c2daff27fcc3c528b609547f1a8901f4f17e28b277b345d91dc7a912ca7808a5a0cc59fada48dd69c5732ef7b7dbba5aa43af300c502c0ebaa93303f9d2465f6a37357f81ca359638ec32ae059166e9099f2b0d8a980d3fa379240f3ae2a1b53376a69ae3855b1bc8e93e89772dba74d5f5fc298a990279b314f4bcd71db8161d93c1f9bc1e27ebb214fd8ab999dfcd770bca8cf59d304352414c13b9ccb40990542da3f2ddc290603518b8b31dfc7c55a93e3fb1eac225e8cad41ac636bc17f48392a06f0a54923816361b4e01390ad999ff49a8c8dea7dd7533dbe7a5f9c6b1e69af919ed0477a47e00bc708cbffe6aa2b6b2c081ad529a0b125e055f92a12f46ebb5dacefbc90b341da20207b6e06f8b0b83e35c56ad855318a906adb02dd76a2ddc99f4610fd50136d5edba4639521da5c3f8a001410717eec6d4d77bf40f1c09773ea85dd269adf35e17ed958f7a202d7ae796d894891d3bbd55251a7d4022268db03217993100fb446ae8ce6d4f5c4ab098860030712ea89473dfb650d3452e26d9dab8ec94c2f78fcdf217583998a56ef2b7a49d2812dd55144c76f62e4dc64aa0e86853faba8e48275598daa09ee6bbdf73ea611791810822b583f6bb029802eda34e57cbb1697662577b7aec34b4a04700fa06a5733cb3846204d8e12c4c55a854937f706f30216541e5c18523b72410a7fd14397fb860229b222507928a4cba435e544fbc8a51185b0035d432984f23b01b113d7e9a16e4a8056497fdf9ee09b8d85dd1601f0f63ecf4603f2bff2968637b8718398ddeb2d0d41df83541437efb29225e2298622e3ee9ca2fd493bbc70846fd327537bf745db8d892020b530153782b5fcb9d53619706f90df7fd0c29e6a3fcf3fd40c11295d81ecd2cff277b0aed013a23d5e9e44073773f5ae5247446bb0bc39851ec74c15d76117ac4c6d266b22b59f2e92c9f8159cc2fc6f10c9270b6b20a0d124983286e69c6b50338f0b0ec31220080247ba1e07e4302cccb69acbb7930252adf2514347e54a56386bb2fc69cff1543da5eea2f17e5d81c69e342f2e99da842b643cbd63d23128db71d2d66f257f8da5532a26f1f7c0e8aefe7798489b95e01d7c6967d2e9bc428d3fdf0f4be9272ec9ddd12c71c706dbd645c9b99e1ed0e104994bd51da2582dde342c19985174b21bb4982609828bd5ed02cee587a9f821614978879c8271654edd6e87cd1504b23b65c39611a0ec6143c3ebbeadb3980bc41b53f1e800b4634fca0adc729a43997960081f32b894f88af7a49778c21d1aad7d829678b37db251588589f167bdf28641ca03e5201226131c8e22616c13d87dee78f7d70159dd14276302e1f3e037c2797df6917de0548ca10cc1f007f8bfb5fcab987b70b53dd8a527e9ccc536e3be75b869d0289c1e5833a508bd2c585b06069efaee983c7f4f6048a11a523e80eac4fdd019c681edf632eb69215faf14becac791a8de4bfbc8c759cb43316399d7f5b2cbe6ce4e3df72d5465b50859877087b9ef22b9604dd568bfcadfd95288f6767bafbfa66da8cb915480f0bd042dabebea85f4b015e005c2ff2258b067e8c6d5bd0e1cf54c98f3fd703d5cf42b61c155ddd88768d94cda54ac54466d2033e981fb6987217798f0d04c0d62243bee61640869633a270eb39c2be3115627f4af09cb4476b18b2352982c7398f3b20e0c74feab00ba8b80320812515201dba5b7db8121643be3b299d3b60279b92a5b1327353ff850735bc626d4217106a7b17485c172e8170de127115d3c8d0b115015f9207aa2927afbf08705c606cb38c2658710cb7ad986198abfa6743b5fe387a54954fda7f70eeb31a71bc17bc5fb331b5dd39d8509d8d6455d165c1d2e2d6c21b6573b7104bb9419e57ab6589d6b9e0688ae6baf1e72a1e76821569b0c6b681bce8bb68631ed9119e0c6f72597f66da785e5b8518de006e17f4bf64d610a1603d086f16005217ca21775065b7c481c8ed43df604dead6fa3f11abd9cc2a5f06a8acd6e87050391430809866280cd451d020bc731973766df6c021f11b7ab81d04bc39073a7f0799d20f8d9f36c0251e28dc38e703e1a66d44e968d44a6a744a5a1fe09ae6464bfe0f0c793568463dd6fd619ce4949c2fa23274c9a9e1605a37b1bf13cafd0fcbeeef5fa2534607e42257963091520cd9b6c74a8c9869c6338c11831abf0641500f7bf1511f596be1aa3f633b17c7996b4e0c51f9cb6903c7f083533ca08943a209baa8cdc128dbfe15bcb0079e7bacaf1507725767697fde0c0d17c3950e7f8985b56d60623cbd010cd765da4df5ab6bb0c296f097f1a24088bab7f5c81e5ccd2b7229502a1b7ab336976bfd4cbd0068ca45a30a818ad4b40b8f1c1b5e404235a2fbc2e6404f7bdc3c04a8b8c45b116e099683ee4dbb7d043d962c7c82fd998b9358226acd602744c5260552dd57484515bf1ce4240d05f6c8d6d0625adcca95a58f2f24f8d4e5b27a066a15be3a0cb497c858332e07d4535157f1130e653b1c81aad35bea351ff002abc047908cc48437b71d25923152e2832275d8c72055e7ceb0f459ca0a3cc4071ded317ad3da7d9c9655007913e86d033e46f9ad9680c035aa7c64c1dca4f72e65db1ba599b5676f6ce70d0a36fcba7cb34abee74e256d5e9f52c5f732be51218a704c3865bd0a5742bb946e21f893948a6b6f9ed0aab7f0975ec49394f4998894960e5cc05a2efd1fb9ddcc5c42bef3ca8f53f9a57966949b88a8be8aad990a8c34a73931f49a080bc92f4d704403427ba0b32154f842f1b1b8bb9f9d521750793260f640f317210fd3d419e4642c29a585d73d659112b0e4d6435f5449dc02637781bc75bf6df031bf1257400cff4f5126077661aba07839ca892538fbb0c752ed52b259c0641c7b75322f0da3465d876b8bf4cfadb2f2ba7cd51ad0d05a474f7b1b01735fc34ef5dd7bcad191c7fa4d3caade370111c56ed56f65a431a42b610923d04b02542da6e03750173d4bcfad81ae5c210e859a5dbb9e303c84541b9180b3486a13dd629664ace964119984ae22dd98163cd6199017aba0213233bee6c6139157f82794cd5224bb42747bc0580780b79df3cbe90ed2dedfdaa409bd68c48bd29a1bfa6c5493e5f138ceb72bb419dee43f9b2db3dfd27f15ef419ebf1f626333bce21e92320d37b1cf88166ec93e4145839cc41e0c01d669e870b96d1489e2dd44b75aad6faa64238d086031a05fef02f15f58d39c462b044e9b246f4e1f51f8ba0177651451b371fdb75d1b3f653144114ab1799788c50ea929a56cd50df8aba7273e6427ea6bc0a4fdd4d5b0364f336cc696b906b1edae7f82050db23c1f1f9293744fb35cd53b0c438f07fbbc91f6893cd13bf0a8eb0c5a0e0bf9ec930e7c03ace4d1bd913907bcef545826dd3fb6f01228a65d550751c13481d88bf90ce982da55904f70df4f3c6bec703b83a09a2ab264a355a089a53d5f2d549858638e98858e3470e10e39151d1ff84195fdcbbe824dd9e171b82f55f4d91319975994cc15586629cc0fedce6fb49841fb9e7034ecaaf108b0dd18915c4bbd199e3723a7f27bce81192b94efc875f7429dcbb215564592d345408779ff4cfb9d554562b085bf1380b1a756008f28be4c63ccb9e82ae465481829a59645a375afa4ca7a6f34ecdd2e7ace5a8a2e96946735e8ac35cf50117212e09a6f971ad2567310936c68c9d6945de7c9150c87229cfb69b385ad513f5619ac8d8c5b77ba9baa5dd3308a1fa4b94239ca2791c310f29d95f85e2cae97fe16d7a676fb83d78431fa654200b6efa5120d864a2511057203b5a04bb431c071f2a70fb4dd06ce1cf02f6f2a34566061b3ab2505303aa9231510d6d1ada063b79365edce6bc84a68cf431a718cc79ef40f5bcee01a07a50dbcf0c07a7fc427d9e3586b4d0b90f172b7808d9e72d052660d65a9644b3da138de9b86cd9265b5dec9caaeb827276b418e2cf1394d3b24c09410df182ca744ad645a51524f4bb4ce2c01e197265661dd3e906dca85cebb098ea69885230c3773377549921c3dcdb1f6462a7370e37b4fadf42ada8252c049e26dfb31993322923d3495146204a8900ee1b1d26d96609ec59f4ff0ab8eda8878ae31a6f7e5ab1360df5e608a68ec725c1a9f3f8539b9d26cdb05956a4cb2cf38b0616ca3ea7dfd87bdcbfffa314260c8391c3f20922df48cee74502652f0250abdb409070a3e589a1705781c2751613a854f5ca66b650a0c21c3a948693b93d61b5207890d972c803533535712c27d9a47611d7f8a081fd4bc1b2836593b20841362ee93ba2f82235f7e1912b93cbcd0c87a0a13b7bf38cc07a35659ea99d4fced0d448cdaaf616add0e51b7e56827c44dc0accabc325fdc4a84ba19e4fdb726f17a93dc35bed23df60a83ad5eedc55f215e8a0d60089beccce5dddf0e0ed2ea67d262ea9305dc84f49a385cec759f878b7a2d426aeaf5e4d6ef451131752c31963c3a20bc2b87271de8f62c57a5bb25d23d1bd3a37f73acb0c97c1915dacde1c7e1a2e577d9db0fba194885662723223fcede26d370202ca29d0a5d82e3bee442e822a18eb7e1221258b3cfe3a3df641a55fea5c264014df4907547403b06204f7a42bdc76ca0496fcbc17294c0f5d5abfc01b6370420f5edcc473d1688ad7f36bf8b9feba1206d179af9d641276f5c39e971c3fbf8840dd67907a9ce73bce83ede84b0c2fd6a7453eee363b48054e00e44d533d7e7357ef7be3ef22ea33a42b000b658132985486bef0882b472ad4b7036b66e90793c2e98c47380ffc12f77d44ca700a8cc79cfa7c4ef9908a58184a8e79bdcf157a00701b32ebb0874a46ef2ebe10e478f4ff34f96211279c2d873fd7e0ce5c12969f07ab2f80b13659f0f5204ececb91a0e9aaa8c2453cf71bb00b92391f1c7969fd04ae957d8e63b2b423cc04e00c514beae01cf82c6d25930132200b368cc474b91ba81d58a4b9f4deff74791b4352668169c86c2d149234294823af9b298e4751a12a2fa8907390ffeccc03c6fd0f713bac3da6ddefe76f66b1ffcec37f31423539a734d3de5b078570353d8985d30c782bef30a54b7fb5680426c125fa57f5f24991d560facad90e3e42aec99a5788c56d4f8219b3d5a69bb32b2f69375ce307559c79d6523d76088b66a00d970786b1e4f113b1b583a370539f71d392da99f2e209aaba814d7ef2fc33e9dc085d76bc27568df3bcf43c9449d6311bb93b7b23737be0741455446c151cc4ab6ae3e952a8f2295666c1e2662a71d597f70a17378e65a39967ef76b24a93c8f23b155ef3fe46ae501f57356459f4e7def8b0eeada7497ca118968684213b7f46f57c384e7be66587533e962d7cd1d0571aea71e432b9c41192d4e4501d66502026831590b633e752aee2951fe78b37a6f9f14179c519226153151084b3c6d4045ac4678941c1bc488eedb2ba4ea37645027fcddce2fa0026f5e1abb078bf7369eebabe8683125cef8faa6f9b069d2497c0e0879c00def5b8e7c51651d0c2d6d76ec07b171ea831ae0dc32c20a3eacb35b1cdff25933a6bcda539e0f7407356c367803dc958f5e31a95a288e9ab1ec295519295083e8eeaabbaaa7c0f6c437bb4457476fbe67dd99bc3d30654809bb34d2cc909b2575efaf994a17808a8a5ce30a517a75d3bb29dc7f4cf150fc90405b3afebadc2622d052dcfc945718a3cb6bee2d44f3bcd369815c5114569e8ca426f5774f1b7037ba1cec86c64e8955addb5ab54ff361f7c611ba12408016460e1d6bfff85eeafcd49332b0576cc3e92abcb5af407caa6f681301591ed54c06a7c9045e5daf7cb947411444ecbaafa7699567e4c2977f82760f98ec565d281496b1295b25150eb53aaefb08303e35d693eed81c7b4bc87a188ee9938f2093b7045d40c0f8998839d66050c6c8023ebfcf4f701f13a06d9d78175b18712773381956b3538041d28d42e179445f0eb0ab464197b4339e5634bb325642a679b2dffc23e8dd6217d5f9a7b9e04b9b6875e0204bb5a5834e6b860c6742d8d31e36f4d64c4925492377c52d6eeba2241a73a784f632b8aab795dd913f88a3a31fe9bfce5a3cf5db6ca138fb8a0413a32c94479ac976b651e1ba7f72418e6bbb83b1880dd42b13c0fa3c9b3a959264c0a4be0a8b4ce9661fd5c3b5d8f6bdf7c6527896bb427d48a1d52e361115fd5e228cdb367f07f392bd9a99c7ebe47d116a942532ff2c9a5c26066151a994acc972ebd2149d83fd00d23822fdd295377f4f52a0a4011bea17f694bb342a99096d57ca8bec0e476d7907b8489fb691510a1e94d134ea97d541ba872627bbad7b117a30ee06fadbadc50421f2f4be5e357a7f60a02ae226c3a119e7897184576a7f8225e3a988c823ac707b08451386499719c0f5cd10521c00bcbdcb5bae1f3e7d18b2521ee09539f6f3cf71dadc91f72995bbb8669da248264a10d62d618d60d4e4dd23ae2bca566a362417fb4205a6f79a59d13db09eafdb6ce9912fc42a364c8db03e9e91f0e1d2e182e1f06d6cbdcad1a3289a72cfb9e7ca4fe4a8007d29acbc338b39398e44f49cf1b700844da66ae2a0a5c50bbccf110b4ab7e23c0ea2be186df3c64c2ce6980d7a8175af31c89f74593105a2ee5722d8e2f223a16607484a665c8cf1522f88df242795189f8b312fd4b2a45febbbe3d8207eb4570cc113f926b0d45189878bb8f892a9e41f57e7bd1b12e86b3d6119b40b41dd858839e7ceb6d5e69358566841fca8f83e39948ac336371aee6bb38f13ac24e55463d68b711db50ae14804e8213a52cc4c76aae2ec2b0b810ffe170c9e090f16eb24ffc98963368860e0f9d300ba796b365d02b7dd047467f77df757fd2cebb673531e67be9142a73aa89ef18883031e257702d141c95c12ce70ba39d71d9e0e13799a2ebaadc0b1972859095f9cda2d414a13f8be80aacbbb60c87ad4e21266f41ddbe622c297ec9ee993e52d10e4e0b1609ef3fc3346dae6d489e29d852d063dc74957a1d5b1a17872b54b9be40b7f9e41098ba4e9178778546538da0ed93517ff4c48ddf0f5174c4b2504502235512f73bd885eab071a9968c4463283fd3caa4e4c837e1a4b9843fd4dd8f5d24c9f8d8023b2d180fdda70990ed24eee81631d3bb1ce2d5c9b6a850f948e32fa37b1dff0a2d0a670e211266eaba5d6564cf2984fe3f292bdcdd6390961f0aea4decf4e49a1ac85839c05e270038771c4483145104ab75445ca2488741ec412d7294102158a0c14c214fecd257e40c73f5c684a084ee41bfc789c99d632d3059c004e22dbc4b9fe3432460f17859781cf70decfbf584391ebc08695ba05e530fa4b40d624b77be9e1df24cfce7e55477c6ddcfdbcce9a5c198a29a3a5ffc23bf9f25d4877cb197ed201df35d1d342c04f39aafb871ab2248ebfceec218831cda1ddee9d5c685d640e81c06ba8ea26954fbd90f2a8a253925345bd97b508fb8efbf53a005bf60d439d480f96db2dc96e85e1d60aa7d0444d6f063ecdeae7e8280e208b97fdddf2c5883d14e1f202f3f1f78ec36a0d0b4ffeeae999b6468dc040e247278ac985d490d647167276d36bc9afaaa03b62ba3a4dcdd5157953624b818053570248577b4c8f505f71ef07fa9cb51eb5a42c47cee11fb4fb3f99cf5190ef2a632700b9aea2bc3f3507e30668130fd34acef519d363e86d932f9f3a991837b693207b14373964fce15cdc387dd5c7b0a7e14498117a30e82572ed0cecbf61dd2f1641d1dcbb8f6eaa976105008be59c1404a22c50cf000df92f0bae122d74897e30d85666cd457fdae0fbd5bbdc6f81d85f963d570a5fc4578f8286d30b78a1c997ca0d9c198f16b861301074716f463c1ba833efd256f586bad8fef701760d58729f5c4847741b8b3f8b1ef4f1ecd388606076e0cfec88cfd7987d45b674b573eaddad30fffd779ca591670305ef100455476ef2aa29657a0e476a86d37d8162270e671de8311033b9cc5468557fe5f723e484ec0b1574cf896f2f82ff96596c50b9f2d8aa18cf97a3c34bed88a43aabf1bf1e9899b99e156d973301e3c925db8d67b626eeba9c128cfeb5584666f766e861a6bcfd1cc996e548decb271dcdf5089f1bd25c2060ea9c06fb7239ce047130518221df46de98160998a7729b3903e6e989a29b510168fa62830307e34914f0171c8fe540c6642b62c95f6c49514c52cd6860545569d4cf9ab7d358aeae96513cdaceba1167424adbd9b9be31fe1a72d420d22e357e764237fea9d5351c417a4726a504c1ab799cfd317e105b26b36e8519c1d2f82a957cc0bf4f2582795b93c067dd6c597953484f377609cdb2606f69bbf4e7a6547ba4bd648bf19daf2dc630043e99e0b816765a546852918b699d066f351648e46ee3b65426e18ca4ff391e6790345e520b50a4f01d93af97161fe79b4a07e4c1b76134f7e89c5942191412f79be4dc2e7afbb7745e732dc0af1e91a9fc6185d59e45beb598cb0c6fc280941c27526034aba21b46f19a15ed7bc18eff13cc30076ab8ddf60015ab1543a52d3efb25f54ce56b56d09eb16f06c331640757f2ef3f65e11822e623401be4aa64c5e006a05e727ef2792f6041f2cf959e279078c965d5e9f7a1139cd269edb7c21a9e9d6b52980477a86a4e959be716c1c98509c76203f702db4f296ae7a6f6cea3fd915d10a0256bc7192472e853dc5754ff4bef1c3734c23961720f7d578d10c9c58b7e81d208583d0289e1c15a0ee830c6e64b7cb9c7be21131ec91347a410f4bd32d78b75d6c572ee26e80e46d4fac4a283e36ad0d97efc2bd6a091bf64578dae2f6f17d3b63bcea4a392b75d57177a5bcabdcfc5928b3372419ddf07f46cfa60294f0e32d141b9eea7e4a5e8bfc6b9b862e391e0196c2cb008c7e5677dd7a59bc97d56db4f5f9b92dae8be2e3490ea82f45d9a6997a951add2278c272721f427b703d916571ddc59e5a5eb79ddfb73812731d0a833cb093048c3ba8e19d151cb9ae97d2a1104e40b7023150fe291bd7da4691de51659bb0312a558e57c6f23501a352c61a69b1b70226b22396cda303e120d686767dbd1ecd7d54f747783d27fe0f1cd013e6aea4fa484fc3fa35d348b1a2399774fdab2b43f5985833396c61e9424485300fab7729d768969aea2322e64b5975df6ddc623f43be45ad82f66f5ded7859f15d2eb9fb64ab3ffb53190ed97ca4c61836c75009b8353418dd71cce64116b2da57bef9f97076048e293b8915b6b9fcb1f0f2715df37b97f7a15506fd1dae444d77b2a3ae7b57a8d5b4f10e25a9f78e2f14f44286561005dc87168a1cb3ad82dd35c03374f5de81648ed02a7396ebfef22b33402d8080f239f73cd2cfa3a2d31c2a5e4607605922bd2f5f5aaa3e05c3ad9c45f6bde35ce1926a4e7d808e1cc96ccdf347b05b8601421f051b13efe380b3f082e2a1fef2586868b1e6d9a389da418915a51a37b3a185c667d85b2cf39aa7c090709453efcb4e6b1dbb25b4588a5cf43c0aaf9580881abdde3eea85b485eb74f53cef52a3be96f9c8470f01276df187ecd4eae56b29537dfeab3c8ab4e7118607b42d9bcca6e49d6836f04a74d9b1cc8e9046b7d209d28f3fa9eb9c63129c8c6e52d99fb918b9be73e773d0af72102ac7c95d8d63be0a6a27b7524b4dbcfef09fb57ddf079878d551f5043455ab9f3afeeca9c68e9a8d872d501b07e32aab4af24874ca168ac49aa8cc1bf6060ab175ba869603c133be6ed710a062b20044042c7878e184740f46def945961f03e9537103acb58a2e2f99bb558cdc38c23bb4a4e1d4c5dff8cb927af8fb852f1bc96cb8f0786c67ce539030ab2ae4f5d504c4d20122e7676d8be5f347b853a4d6b41a08e96388e8b8ccdadd9e151d67dd31bd5a52ddb6d966c2b9de61f6722eb94bf3d73b08ab6b51fdd2188ae5d60d3f451694538fc4a468f296a2d450711b37e372aa71d2448e4e593e881de7bf647fb169268f938136d8ae04c71b30c0f8d73d2f093a5ad4bff2715892a3c529ec12f91d6763a38d2f5a577cd1a321f2561b9b8169e10cec8ee2d8b8ced8f8b6229daebc0d7c1a38ec5281675908ae859179910242f252ec6993f1e7a319ecd4a67424bd5f3562250c55be7cb3b830eb5975b02a3b0ad764de8a5f5d95d32c15d64afda9f33c35d1fdd860f5784e53a41c947b81a88714d66c3a63a34db130ea3066bc0a5fdcffb03f5f0b9a1d177130496a557111f365c17128c121012095d2436bd246fba41a504f5e20b328b024206e4bc0a10ddc74a6abd9da7f76adc56e9ddec2e86d3e2022bc5a42d911b4e6e4f9dd5f7a02aebc067ac2221704b53a0f9e1410871ae7abb7f4e7e4846e72340e8a73846486e696615c762a8041d38e45c2c04d7b8b5d1770876b884da594960d8ec2d2091110ae37cf7a762394851c91ba47dc6e44faedfcf269908d4d887752752fcad027b96e0a422377a9a3467f83d33f3fa7ce3da9adb476afdbccba727ddc3ec142314d50496315b16ac4a4118cac0b09e08db1e5135bf748a1b9c6f200326467e7c458ef8590d5b5ff9f0a9d2cb32fad8109e40ace378fcd877b2a805a162531296748b63f59c7f7c088f65ce47731ad01d940852ef584d0f5b751a81bd6158f9f80b92ee73c80f9561903eb3466a58b0b62540ec6049ae564c4d8c3a610aa05a2a706c41da7852d48d59fc2ad0fffb9d64b9ae213f3266d5d4a2c7d89445725eb50de1033294915f135467daee1a4dc1aeb81c9a93fabeb57adc94045ffa152c2048b8dc8303145e7be8466ca7a394441c8a50ff648bfe1ec663b966c811d2eef38bbb76d6af23fa4e7c63870482194e369712f7bbcc6e3741a0fea5da73f1c9b73db076327f065a127a84d40ba0240585482c2a9fa5552972f92d699a06bae7f3c56087a05b04a8524972fac6e3fc949003644118fefd1be2d70c5c12b374702f8d934f272b67099351f5a23d34eb21df3184e42ebfac3617a365244963698cf3fc1076cfd775a75ffad474777c37d5fb3b52baead1aba29bc3fe6947fcdf61c87aa1a5a04877aa3dacd9177ca129d76b87976c531a4286f6a19fd415671f1a356f0c84a364b43ab6cfca34548d0950b77f1aa17183b80aaea3120cba8d71ddc3431abadf14767d51cb707208261f67688aa5024df457584d331eba3e551cd2f85f93f05c41039e9608937a9e56b245050ffe37ee5665955bb88a86aaa66a235f293fcd23d1a5c30deffbf321030c111678eee75d8f2bec5e9a1f17056aa1f57d0ae6fa3baea1153fe66f86961773f4242c3dbaa089f183e040a51657880a73dc6b4f1eacbe42bbb356b9db07793016b693b35ac12aff826814e42aa8e8edc203b243e27febcfddf1a89f997b118b9e5415186cc75c9c127f7da3fc0172920d7a498aeebb1b8fa58242ea69fbc7cbb4861a339bbb06115babe3ac34690e407aca96ece96838cb39ed8e62f28e833a82d50acd8ca410a78477aec579e9a441317a03317b8f29ccc1baf2cedd3c2d1e2dc84daeea8a61a3b56847b773881cdb5b12f6204d37d6d76672d8f7d10dadc0e0e84b9e5b76e35018081449cb4e5e57201ad982076827374f9ca7a6770aeb68c1bb6d65876e7df5d2de7e45294352fda71b131f512a0432a6c0c7a1773ad05ef8cb19ca187d17d90e72ee713470e114199d0cbfd18655129066a0b078a642e9aea0b897b3a89a45f24dca9795dcf1e69d262c2a3283021d37179a9d22542a520bc0b39202f9ec81a6f67b7df48f6bb95c40db271a2af39cc35a1d2f1e4e71e236b57084ad77f6d553f56aecf79238d67e728180328211d65cb8912d149cfdde580759345c2aa08921d3feab49ec3e852a4486fb2193421528b85e60ab44b891983cd56cb61bd3e437179e8490a5670d883f52618f656f9f52e2ec908c5089421fde4bf26351752fbe49b43d75c69ab8c1ea4d79260181be00bea3845fc757381475258f0cd46fb3ddf2a79f9f56bfccfdcee00d8b6e5eb75bd5ec06cbb20cbca087ca0b59adaab5bd99df72b75dbd92637171e369b4f0d58aae2ddc78188f16eb9ea22ef1e30d8085c6c47e64e47e521c5d6ac566dc1d5fb5d1cfcf0f01c88e1c4115c07d7e7f5b5e01be8a4ff1e9544f1a31792aeccf9c06c73ba738769f6c5cf98b88a487ea8d70d335601f8fe6df252e30c75eefedd5a317d82c9a7dfcf7d24c6c4f0f05355fe2c391c67dc35d3cc623cd79aaea5f53b4490d26de21c778a7c420dd65004819dd5a3a85119736b459817255b5e70d5b62e6445cab67e83702e90ffa4f810b03881e98658212598d07ce862528eddf38d475e497aa59477c0c42a26e758e66640c99132d793caf0ff79471afaa05bd30347e559f83fecd8fec573f007e324186905314a79d1e1e84525a9abce4368f8da789fe3cdd5e60b7cbb0507a137284af3dd3019997bf8f323fa96b137e883d95571f49366082e93ed1d63ba2db5817283ba144cc0e28eb62e7084b7e1f03af916cc79d54b571516a25506a417febe239b1454308ab5f185d71ffa2c36fb0cdc80e0a625f84337e84f0a6431ea633cd29c7476814166e00680616d9ab18968084636f012074d15ad359613003f939c142a7301abaf65c89ceced656febfbdae0b967ee05c2e52cca1890897b61f04a4ca7688c0c0f3329dd5f0c682840f2e40a7cdbf68de5abebb34a823e200c19c600a5fd5c4efb6f723c7956fc504adf01f9d30bb016d9f1e11d6dd3a78a9870adb4a88a18d0fe7b303eae4578848440b3138e9f914d0a579b5cc50d6c1791855ffd2197383e82e6f2587060831167a8860bf1d0107d015d78f612a7e25381d85b2e93bd40e41313271e5220a2a37f76e9379f75c4435974087dc93bb0cad3da3ded8154b96e49b04cf4e61e3d97364c5b2af9c9131c7d2bd8584b214dea121b66ae8d160839712ed2708eb1da8916996a4aa3728384d6f5571a3b01103dc71c63e5e949b3d233ef6615ce73ffe5bade853afeeaac0911511337fb43ae426d4dc428589852c50c92665927dd24297d9c3a609e99e30596df7b360e718e747f2fe5ea4d5a5b9e558861bf2d75dde0e942f85fe518cf26e1f12da907132750674377a02a3834aac961c6bc41a6839888735d8d84efc6d98d2678e567910f72c028c7ee819a8496b28f23e4f717cbbcd5adc87dd0777099e2e00b8f9273bd3814307529e5f9b1cebb9107adc0220cca4b42d7b56a5842e4adde441c2a43a73cde0afde6c9ee42df4ef7c09b3f5dcd4d63d2e9a8a4fac4462841b0ff918953dd8808c0b9afe0ce24e7240d11c73383b2c9ee9cdc32e76b3afceae0ce6abd59b6acca7bf6fa69aa5c0eb64bc5fa4bd696b7f66fd476a6ae4f960a41ed08381f44a6c07e334bf16dd1302eeb1c3aff2c75e87ac10602a103d08e5052f01cb21af4107b460327009f10f5ee89791bc5fbbcc5fc3f05396f127a303d926bfa93e361745b71caee2fa4b7ca8595812f58dae7cafb3836bd8940b946229eb53455ff094d01701f33c715222874adb8b800309371e84b3ef15814fa1abfc6605c80c457f4ddcf648a7f66ec9a4c20847854932c5543f662678415d93865b7f1c5acd9da2670fe2f44b120738a6c9c78d2de893eefaec8659265b9b319a4d1ee2222b60c3c4b7af404f4c8538366700a49f67927ab891fad14a57734590da2b9d49adf6ab0cdc4474dc2d5191fca59bd5044e99303538aad30abe4c950f0a8e96f6dcc822e88689d8193cd10b9f8a806884260fd91ae87eaa8e178debc0e62f15523e3cf000be66b32f016e6dc81f98a546765c3d0eaa5e9dffeaa00d4b75f661855dbbdcfb8bc34f450490811e6bc9d373c6e724ba8532f385c0ecc357c0ccc4b6c1aeaf81f688f284cea00d4a76fc3c329f1a56c581e2f5471fd9d78ccd97840ef07b313c069de514e604daf3481a26ac875c9ad8a656eb6e92cf0f94a641eab4748c2ad1c3ea701cd426b0c2ea09da090816ba9bfd771d219e36351453b03ed0d54762eb3558dac4216d575f63b3a070aaae7cb58d2bd289cd760fb7dacec88c9916a13065cd6d3654409671bbfebf09f48da9cf5e5b53cea6f766224581cf0e4a60ae485a326f97f50936a0fad481fd6e1b099079f0e917b12201009cb39d7e6f8c52dc1c7029128c2f0096291c2c74a0c063a1e5d0da8c775daaf7e54b780591045594b46de3cca21ab9f850be099513e580a9aae56e577f1127af2a31a9cb372f7f172913e5f0be312c7175a160894ef02951d115ef9d51a741d2724d78f7e975970e834976a469de20a7a2af7978d94b2441614aa3897685c005c6872cb1303e6720cbf6df102a895c42decf9b893d5c3920626bd44075156cf22dc70f2392f2b5f60804695e8998a9eb32e910e4018d3297dd60c8edd6be0d41aff5677299f94a37425a59b30e74cf4aa4e61eb2ad45d64dd811c7b622e76a9a54f97dc9cdbcee8c81e0fa3a428596063fac0e1bcaebeceb5e661bc3e0fa4ca325bb994eb5a1689dce7e9318ac33c6c708242846dfe93d1874470b3d985e7b0729230329d9118211301c6b78d5e726370936b35c74a6917d249cde4cd37bbf6c681a0283c1750291b0a2cb8043077ffc49cbf984118aafc1754ddd1717b9e07beb86df84f633b1c455f8fb5880fd99bed0c940e73ffd618d704250c7ef80a5dbb951e353ffb5575327074329142f3c26a71ad1ac85676d891b637f83e038d734da6153196461bce52eb5eb1b850730dbd5a4f4fc6c309c5c8099b17474493e3057a07afdaea1a72373eb3a555deb3c866251f0ff7bc0b6afa7ca2fc2321ba27537f49f2864dce2b4fd92790023452acf57070fdc3a80832996df4294a216cbab824709c10e793342d490f143607cc05dbbb097bc31d6cb7357c130124da3817b418001f134e2637201cfe7479bf8c7d99633d1c6e92b5534f2564166ba288b8d7b87cfe05f7e3aee8b35a6335c2106eaf0780523e9e8ea156d88bfb5710fb2883844bbb516b57f5e7aac75302c5f4739d2677bfab97352bed23ef02afbbebe14809f0d99e2effc69d71b9b66911a506e43e87a74e23655d629601eeadf9f77da5c800cb34a9477b8a96961fc15baea304ce34bb9eb97ba0678d58f20a518a482d3cf012cd60cb9f3f8800f1b40a7dd27f44037f05c004bf5c9878bf2d6930fb4ee74342b0ec08ac1cc47edea9949f1fc43e78442bed8ce4b235d5c88f9777e17b457edd97b16b1ca2ea64292a809ee5741c07ad697870cb28f3f490b962cba532d60745da477f8b72585583af54d9bdff7b463d57275cdd0131599a3361a8b11617810e0114c2530bacc750b097ec13d6ca98566d40ad94dbac7957760a9b8f959850b8a4bfb01dcf463e22d6b052819a8882ab247aef7d2893e85b09c410bb21c70ab82d9ee5464db33e7c7a3489819b43a98e052c9f1078a60b175724a4ae5b22239f1438be66f7722cb013ab1d9e897a617197ec38d93c41660ef6b2c3e392482fcfe123c7ea6d119d804b7a7b22c59b3f1855104941f3f49db460e4faf5779773ed2cd68e6b1f00154f8a291ed8e034b6c4b55f4cd5204df6ba1e31b65e6b9eb4594fc76e437dcc0880584d950b59c55d29412fb02d51ac2562873f9278fecc55b6d28d041e09e40bc51e3e6a44a2cb869870f82f94f89d8e405454fbefa1bedc685d8ddc4563d6738074a20b0f4bc5e7a4dd4ef7b695a0b5f5de286f3ce4e4ace039405373ec11f434d3eef3e5c522e4c0de9ac50cb94410d5bd0078cb38bc6bd10e4b06043334f264b49bb1429f91029f0d71f401c3f64382499395153dc48d9d35146090b9adf2a2bf2ecfb04b6ec571e25b21304645b26e3c4830c5348b96c75622ff83efeb69412c1eabb9593aa1fbe5bcc902d090e1fbeda4f835ed7ffbc1da0d4f68567beaf2a3f1e1c839733c9f801d4813c39656ddd62047f1a920312f4919bca88dedec29bf3eee677ca6d9df6a034acdcf9485769e409c82f80adb522bfed3eee6afe148d66c3e0183541e3ddbf53d9b3539f248ae9c82646aae6efceb233185f1406ee271e06d40fdf97e2d8e799d2694e521d67f8a8610716940620f0d32185e3df9891a51d8803d158e30c9f6e5ea7f2498a2999114019cea0434103372105df6f5af48372c49d116a2ea46f3a4415486db3f7546b8d25daf3ee5973c5e08a109f7c783e6b5285a9b70bc6df654d5a57a4dffab21f0ed240744f8fc6e725ba7f5845446072f962a026c29b7857411e28d7575a3a938cc90a0aad0c8604b93d3380ff8171ee80dcff9e9a4ac179e80bc1ef643e7530ceb1409f52f83a8365bc3400f056f747b09ccd09dcfb433109c72cd24ccee95e9e33e81a847a6bceefdf8bc160ec7ce4514a124ed1d884e86efa716a57342086c2f70c628cbaa04c1f4d3faa996a872f2b8ed755be060e07dd4d969dcf95a20e03a4b361b2e16165bfaf58a2e2f9a18f050e2306eeb069f41f67a555fa1cf56029e2e6fe3d17378195acdf9382c1506ca875fe49a8fc1b19fcf2a57922eea3e2fc5bac217783a8086beddb64c2e91f2fdd6970063312aedd3b939ff18d3634fe44b40db2a64e3e62071954fdea9a933e6a928225d81baaa7a6f49aa5831a2e1bc898119a139f81f831d9524642fb3602179a3b8edf3f95e103bd9e7d4ec21ba051adc1bf069ff830b3d5de2711358fe3ae26a42990a5f9f21b96b461355782f7a79b240ac6762b7354b4ff88a16f264af5e1c3df32765d42b625e2397f01ec87920b42639d4ba22adb1fbe5138d2849db670a2960fd94a399c1532ed75e7 +MD = b8f33fc394687880f8d658c24c4ef826cc1fa0387545762efdb7a546eef9128307f5ae8ee7b8ba5817b0e492aeca16149953b4557beb72117647968e8f12874e + +Len = 98440 +Msg = f34105a04a4a02a1a07e020a6a4f4176e9c92bf40018ccac434988c650550c87625b84bd232d0e5ec20e6f6c46ba061b22a7fe36098bc7bf031ec6d6c1214bdb2d9fc4d7467331182b0ad81c756a3ab1ca734559b065cbf39ea3339859b76fc47e952eb65a24521902faa4e3a067c67e0cb66a269cafc2923c6137d6c11e5e887ac62821084959a770673b896fba93cb0ef7d462757193e204de3b56a05e026f4bb91be2f8e82d0b9dd805d6896a88dff8beebd8e5b1262c1fa4a5e19f8041c319f670bfd10cb88db0d56a92977f8c04f394174f927963b7b53bdf3f668a05ca0b068d813cbae174d2e6d2844002898027ffc08e24d032cded294f389c8735ce4a70dcf0e0fc900a2a94a5752dfa669cbb894e5e44bf7bb4eff85f94e97cb915fdbcc3d366d9ad95e1664b2d066f0ba0d7ba29879a4c26b5e42f761af77379e74d73acf3755a215e1ee52c74726a60d4a519b9d1cd821b18f457fb936b735c8e621cfe19b685d2ad0a97b01219f14c7f4a2e67048666422546f758c8f0854c51633f210bd064a9cacd0640cea40fbaebf18199e76c0283240397f47e2cb0317779657d926cff8efc8eba4271bbc98f5ec09bb843285dc75c52c03780c7fcf149cb157a75325c6a8c753a20c30529b421df032de0617ff4165cf889956a71750f82d7807ec98523c2ab0e408c2b36117c77415f86c071f49a48ca5284bd18a511c533f773da82a3e658be0c94d4f88eb6b0deb5fdec3aad303fbbfa1667f86996bdb2471d0c59d040a3d2eaa3a9781419b161990c8ee209206955e9131119aae891dbd84408149418b5d3448052bd89eba352727d4e72efb1ed1f884362844e4d6a3612b076bbd6b5b64981f476cfd775ad3aa716d3f1462cf4a13d6d03403f0e704c5e28fc547e60cdba09c7bdb7e4fff89fa2a0c667f8d9a564715b9b556372caa4227545e9736122b044c1d17c9ad1ac0ccae2cedcec0029ef8dd3d3cca4c3a1c7c75ff7819f00deb29aa95726df32f00687a694590ae9a7caf79e53ace9471c3bb6aebb25e98529497349fabe9d6cec1741b2c0e53adc487e1984c2fd1948648a562a38dc39372afb3767604bbbc5c9c660cff989642034925a4cc8c81e0ca03b0e9b17ae775f0a534ecc31d52186af9b4cc5e74c70fe928e21c00e14dfdcf9d748c8ffa38b45f0d620401665b7f6c51f6e5c333646be8afbd8a63ce944ff97e56b7a99c45e31050e158bb601655f34d92c5c854fcfa84660e6c7fa4f35bfa1eddf798d18d66b71829674bbb413072352ef8c84a0f103eb45b3ebee4f9a6240780b8d82a7dc3a5bba09c4ca83a937bb1020b5d9309519a432a7d9c3f05b319b0d597e207a59e8eb3fd8438e780f37249d259f2c07a43097b02a5b1f3b6174db343013109833bb4b9869b9ac9a2d4f85816812242e0491ec46a437ab3692732775f815fa0954fca04d26eecff1ebc706424fd669ac9f84cc7d7d360eebd775a8591a4d85d6a2f215e776aa9d8632e6d16a44b2a4895b505fdc1d20f06219c48567fc805a0607e7cfedc0b4be60e8f60b81ae707dce223fccebecbdfba23ea6e728077921a16a21f9e76ed5db87f73ddf0df5d69b82db973c3253d5d5b32f64f622a3ff81b0b2e9b95de7d59c044504739880ada7ad6ea1d63ab82f269dd545d9df39d9223ac98737d8937ca8debc92efa9b9bc4857c2a5c38a849497681793b9e72fd0ad4796439de0da91a81d43317cc907cd2789c1eb2aaa20cccf1ddc94bdc0efaccae0016510fb24de43cac127427ed2a6eb4b52ba3423f29f77c40e920ef4df35200bf234bab3d92922ec20bd685383103da35d5c087c64d5376394d3d30b693258d251f9c38f613bec8b473b16cd80d3c59bcb17d03ddd35b60456a0358bf46d193d06fd531724dc4aaf1ee9767632b72a3a8234b1efc5889dae3c405cfee7ac0c53fa8590d48bd3e4618d0eadd5018415886bfad5198396936a2efd6febacb8d91c13dca54dfcea61a87cf4e67256012d8e6eb364438127413f141d97dbaa5927a03a49b80ae0e76a8dd3e147d697f71b5374a585f526034f35d6e9fb5549569ee85813f294a093a6177a1ef8882e2f86df631a61b8daf164545ca9c4e1f179e7fb53837a72a2b6be4e59f32210816e173b2558201305bb28a58ea519070a88aae115e1792c5018593a59a7edf7fa7f766ea0a7e98f0f27452f55242350fc4c8ea38475164b118020e4608480c4ff294a80be51e4b261fe60fa97700943308d3c488a867a564cb8ba5357d004fffa333b7a659d3b076107240f3ecff4690c135cd80e5dccd56b86d18f27d4a0315266f3637fd21313780c3675308a0c48f9a5955cf7433551d5b30aa1b6d87de16f8a1743f33997600ed3413457e8786a600d8fda2f7edd51f2070f90ee24c297b9675223a91aec758c26eb5599336157a711f35d9d56eb5d2a498864b6ff98db98c4490a89bd3dda58cbdcdfe0b1ee95387a69ea291587fde5431c26f5b32736746aa7007b69b018dc8abdda13ac48ae790f988bbb01dbba8bbb74dd9586962fb522120d67676db67f2d364f1a6a962ad49a29473b640c1b847a38917dc10e4fc3b2323a35009d3ca87aee45dd34018fb0e1c327918445a938480f4a95abb61c06e2b18ecd796832c13b8ec44351b16774ae0f31a6aaacea10eca111c58eb720e77c3412171df5213136bdd4360bcd398ac7b56f601d6968723097edf5b038e3cc4666ccfc336d916034247e9ea87e8e59f45ce9a827a5abc7da99e70d5b62ec1e0aecc66202f708b6fc6bc96171ebed49ffaca6670e883978b34e06f5d55dc3468e710833d3bc109b5839be68ae3ddec2ae4fae831b399ceb835f52966650f0aa9b9b9855eee430770e36639ba79be92ccbea09e696e15c8a1273d3d65863fbb4f81280b29b96f1b2e70bc2e2a32e97ef1c28c076c7a7ffbc2733929ef1c06dcb6f7fc83022fad9b4ab60e326ec1d6f736aaed91df5b40fe88c4796d77b8cce56c68a76b9ca3972e522dccc4dc891fa217c275fc16a2f14780756e7673cf2a4bfc6da9434dd7b44ae1328874180b2be5f1c39574c6c4194d361088e387d18796d37182988a1e7d57548ec1ce85ba74596108ccba544121961620792308526d4c8e1eb3e9f5fa6b0a387cf912ca399172f21c9c2b43ac92a8ad1f8fb399e453e388bfcda605edf5aa19979f0f49eafba9017984561958f50b67786d23a0e9d3e25fff305b3e8bb5cd6469341279612b823baa05b949f8b114d1d571e1a1e555cf70377c78043623fa955c58aafd1e9994fd28a0c359ee6f8b78913e7c316952016603029afb8fb8b8490b6d573985de37b26fd602cdbc78a5c8463351c3e8713ebdec732298fafc6cebd0f295b329620117fa260619e5751a5d5ef110ddd50bcdc44e4ebd410a57aeea5778f4fe9bbd778a52113bd2fbdd4f8465e827e3d1ba3525c2e5a9983062e4e10970d3703f5911860218226d5229bbe9d589157a40e51b6ec4e89612ff96b55c617aefbc96bd559784ab385d9ae2f60a38745805b514d6ebdeb80125da7b86b8e9e778483462ba3b446b0c3838817442090a6e2aa0d1fe497ae469555379df831d472b879ad1b5eddba81c61bd9dbd4dc1ebc63d86a507e413fe2d35fd2a2647862a680f2c92ef2bb512c78e9c804779ed790ec2f8f67a685455fb3c3a0501828f01bc538c1ebc716b1bbc0357e19942f632966f5a5ecc32969c21cc8c82e7a0c25da6d91bedb45b68235854623a295586b8fb773d3683cf65215f8b773c5f3ebaaea6146e884d5636da3b165de27e1df97cbc9f142627bb4a8602ed8c89bec8c26538a9e6670dde4190c2bdad731e08c8ee482b71962e72b15a9a673f03acbb8421ecfe36127c7023078dbed3747fa29f9e2cc0c81f0e8223ffa48d0122af937a652175b002ff98557f0a9e626f2977c7fce8e3aa295e663ce5afc3757f1dfd1f9f74c506c12dd35387a7d0ccbb91f4fc9afb087a3d849b46bd2aaefe719e44ee4165508cc58d9d97b213fa84f24fa687e8d193cad427adebe683a41e92a6f750eb51acc4987573bc8ead702d9bb908f4770b3a0e75adfa96e26947585aaea0f20df83e30b29be21c5df2d6292074a8ecc6165fd7aa8e1dc2414a0d3e523bce4c199789739c576541d072a10a28f8e2cb46717998db4e841873947a22e1c4dbc9aede12efce4e79c766ab45330dbc530a88bb1be49075d9e409d6f2c8b1e055f52e2a6f17b0d79c07911b475647458634fd41cb2d628a6bcf64801b722b04c959280af28dfc8948acd0313bc67e1ad8d524a3ebd5b9f2d635243e68c1b5a8a2502d0e41b4f9da0c01a48b77161aa2e7658f5002900f5595afb9504f39fa427d849d92e11f415052b0ae98adb795842e50ade4a3cefb1916b9a464533d6178b7610a47354f5b72b9343ed7344d87250a3100c05404d5b3f5cd75f9096e73a1ec7fe379d2a7b0c7ac06d5c59f2a680c2791187177b457bcaf659e6cc62fa954992bc9c92dcae9b5b79313f262e0a0bff2cb5586a36fc9a9a01c9e6e3e039b172a1f1db3cb1b5ec3487379dc1402c9a6f87a586e5b89d3f1745ce64bc58ca1503ba46fa81f3b9876eb3267e127035b57a5189196f4b4ef3a98a116a3f12d54962a663034be8e1f572c3a6ea01064de48851081af235373db8973aff545583d6f92deffd81da56bda77f61ea76499bb00150cb9055bf82a5ac35f02ce36bfb432e1693f10b0f3f6774b1fc85598248a04d167a83803154b3ed2cdbf8d49a66186b2bf6e6d1d0c57b431f22c492fa7b3dd46bbcfb5ad3d8f0e344a46b0f2becde1732c1e4ba6410827b9279ad09f65d0dff173901cdec33e3f644f38d7d66b41c99f49bf4b015470483d2a94ba7c1169a34e19a9cc1c690158ff66f670492e75a5b392d1c9b299387c5a75ba352a2cd6cdc9387d51ca7150c1420c1008df8ac21c4c81e6661e91b95a8d937bff3e0ab0960f3a7b3c7d8ea52ef8b916001e12cf73c6b17daeb9d08b5942fe4a673c4d7fb26caa33eaaa1386f86ff869046938f672be8c07f218d8170f1730b60b89679ca98df227ead4927e9434448974657fcf6f908c05deb00af4c286b53f6ac9ebbfc1dfccd7cb91ade4a8d21807de7749b2e0f93c07c3240b9d39fe0656f3623c31b1ce74c3fb45a8619cb5fd64b13349596d35167e5dc93c88dbf99e8d33d6fb9afff6946cf885246df67c6f108b1dd12b6ae0a5e9fd3420401f060852aabc8c63e2d4a64351b4a4723c81e7abca9b8391709854cb2fd9494b79bfbe47d677712520e524d78578ab06d562f186fe30d33404a8bda2744d3a1372633acd359c3c4720a49a9a02259aa4679c1742a462428b9dbe4b0058f45520afbd0853569f6042789f622b666015d34999b35f4bc443f0b22587554c534d0b7809a19aa7f57fcf7f3225ec00ac8f0c11e8604d62db6a0bd89afd11cd0e642c61f590d3a832dd16db09505c9f6f78c75704a89d77fc3745776b06e6697a4d1bf3fd40ced5dc1ae0e2817c0d612d558d7f7af6bff9bb1e3625324f13902b5a52b47d4bcccf55bb964c47037f146ac7d6f1c7d535669c8146587d3059ef963e592a121c5de33421af6ea6711217ac222c5457be8e5d15230e87a85509c64f4ba7ab483d02c00c0fa4c03c6f66f96617062dc72d3b3bc955e7394027a3b2bb14b6de8c285bc421b81ef785390e182cf8fcd472abbc810dac78f3d112c8337e2c1f2a5a58b98e39cd666afd784822654a68ef06b492db76992c3dd7c0e7d6ecf439253f58bc8c98b223912197d576a3add2e3dfd25e9978ae898dc09c730b9bffad35a7a2c52de308cf108e3216a37c75d3498a7f6049a85f195a28100a501fc0d4023fc174008d23d15f8fb18c273454e2868326487a7a1d44297ab60e22ccca55e1443f39a31bb5c2d4c2a0b6708fad89314671979a528ba27245190f12378eab796166966403112c16b38a262dc2f21fb060bbae27e60cacdaf3937dacf4703d2123f21ae1d7d875abded84bad92b54eba5e9f2cb19922dbba22cfea317831937ee84c279b0e7e27faa115a77e63897e859c8663b5e050a7963f28d56e272536f94aef5d0e1b64cb99a6bcba2ea9c127c8a6fc13a35038a905c538bfa1a5eda016a8561ba9834ec8ff5c48041cfa0ef2ea0a7a9d086d2d587f317a098a68dd575dad0af3fbda7eb8923e4205f7c8c53860338c60639bb12e6920575376e486d544a5986673858702f8c935401d9a8680d1ceac2e336066a36a0e7b2df5ad6ca2424e68f3bf18fa40a9999c431ce3b564a5185426f65fb04fd8583ff9852811370cf4071c2d094aea1b0bd17f6438f45c60bd0f1b3afe209c6a8a1026b3e8f71bdb32fd504beaeb77c3bc8f65920ea5c07b39474b6fa02a016730b665f06490b95387a630aa126e724a08308604d95c397af99768130a4f2774d88d17d92f70a7fc6ebc2db6344652049b3f615b2d8a3fe69a79d1a371026709edfeccccae19504c5489b7fea505af89c23678038fa24c24786918bf98e658acfd95e54974ed5aa9d5a95ff2092ed35039a04a8c5456d6db3fdfbdc5c66d74b463ecf1ddf88f1fcb6e95962eb52475ee5df759542ffa78714d683134adfa33d6cd6e9308cd5127f79bd8eb035d78ffba9bb614f9871f996d2d7d03aaa42f2e8a9685194847e60bd4c9dddf2e56aee95b9f670dfade38c2455c98b5863d7ebd366beb251b1ca023d9852ee2fe3538cb37c584b4c6b9d87b804735b765fe6b786099eb270f9032187c6a5686f17da90dd5aa99a9eb9e613db499fe99b85b77d89fcd1f9f8466fe4243c5bf4ba6947239bbbb004dd7e0858138b13ddcfbd926665a51f30f17f58749b643f3919c1e16c7607363212a4497deb3398de1aefbe9aa16e4fff638c04f874a518e09307f194f5a603cc4512f2abe8a7f69485038440c5be2b0d5755bc993866ad903123bfc2a101df797cb04a099450f5a817e22c8059fc7903d4c1c77f6e11c7f2fafd931f007e92e1c1669bc076965dc2d972fe83e6920288e3ba6fd19e0d2eadf67db5d39c86e3ad1b1c2bf716e2f589d19c4171f4e78e458b28fab850c2aa6a2d8c6c05fd829b8593ba44d7fd9a86a609493f720963e5e2d4f1b15b0d9803d1a81002dda9d882102f282c88b228d8c0895f3eacaf6ece06c6fedce35cf700896ef2bd842af260f7f94e2b31bdf2b38057c8874a6d7012596a37c377c6476b3b871be6220836fde1f9158bfaa762df8e7d6a6272cbd17985c784ad40d2f00a8efc72c4dec90e21773663920cf7de2391032f164d52f9cb2fe5cee465085aa62bd4dea1e1f7e19361b8228a8f35d04932effded028951d001cdfbae0ff0ed06b91749c35319161c468738b9aaea9f17184bbe2db9f93f50a386f554661312f4e1cd9a735bb81784cfac8f68869db356eb1f591f9c282c12bd18a21d91f82f364bffb9f9215b4b93a32e0dde4bd674cd5571b60bd0a081dff68cec53b927ae959eb58d9dce8a1a106b159c65201d4a46fc4bbd3980e9a47ff6e9ba3c0529f5d983f500a78aceecc5ce6923432dfb9d8788b456f0d289ffba6637f3229e856ecaa1c9f95e7cad2978753389c19bf7d55aa2b5697aee0af858ee7f814babc37f2fa138610ccdb139f2077bb827929a5a85f254de1dfdf4f92035c84b00556c92d22a4a1ef7a46285fb2d4797bd396a94d01f9b9d2227cd69dbe41a3988c4070e79e50819672a47735b8fa10ecab9f1ec05d2928ed1931fb051a27d332d1f1c5bed79793aa687e86cd9d49005983ab7c8eab2409a716a71364a18fa21358f33e1f68fa66afbe2cdd93ea41d646de343914968ada74cd34c628eee98ebe93bd5075bcf958fad637f2052a94e1392dc1db0e89be19ea8f7379ee4cb607a914c8937e6e05092053485abdd882dfb4f4ecd8b8ff4e568cefeba52165758b475e9d8d95d6bdf5c4b7a67e0a7ecc202eb61db8c081ac0eb060f5de4ea3b8a82dc3b4953891748d4c760ae29777b1411b03cd01a1ab77a119752a9bd291ffecd1069640e328d95e1c00be1ed17dd2b11e408349c8c701cc1cbf025459baabb7b579cb1722075ce6d80a688934dbb0fe8d0ec8d7c27eface3e8115ae40785c975fafcb9e81a76f95f4d572b85e2bdc980bc116521b3dc355e37dcce03365830a440b003d6ea38209f7046532a9e8a5fbff09e43f3f8debc1c007a0b08f1caf8ef73e117a556644a14319d87ea48cbdc8fb3bcb05abd9e4b048b13995dfe832a3dd9b67ebe27a280a8d781502daa2745d74f9333beccc4e9fe1fcefe68252cce78bc58bf872499c942ac1c355b8a47a47f0a4a5487ebf79ff205d3c493306dea8762ee626a17f22dcaf696bedcb1d2006e2d0a9b1de3df74c8864b7245e5ed885214a1f0cec654b429fe177319e771628efffa91e97b257068e85e91e50e55afc11999f01bfb6867450cc6dd78f3ccd1c6ca43bd517d719bbb7333a8dd714c68bcbbfdeab87cd64d0767cb83629f8a55fed40ca7beaf6afea771f33f94d77bba2b40f5660f11456e57594fed40b154f61e677ed899dbb9a01528c5df720789adf6f1abed87845dd31e287aa478f2d1bd0fc9c1d748c70689eee1d20edfcb1f4905164406889cc783421d732f742aaab1b742fc2c353cf8c218e4415743e9e59740f7eb3a7a202b86ad8063169a2186dbff1c5760c60137527d793b3f062a829e90dbc610c6d930e5459971e2549e0e41cf9dfbfa65e06c4104e8e85090569f66db0cfd10d28f7fa7f4afc61a096beaed100f1082799f3f9894786f114a35e3f80bd0b9c20709c0d4a10c8946204ec1e7a8b8bd816a07575e1773f90a9a8ef75b067022afcd119a7534f6e3ef03103b3581e12b7e9fe05d9b741fadc4e92b8297b6335f5e8d6db59194b6fc9c197901e182d1820182f2f85793c5b4c6a0d22db501639957ade6ba30ab94fbd5ca50bbf392d2e9927a04d19b5cac3598254ca0bcd146f7239744515a60d708227e5f11719b2a88baefe08f6eb71e59c3e26182b40d26a249b14f21189bc94d0c9d6ca96584228800494cdbd98c6148ce3dd87ca69d49c15165cfd37144b0ef1a8f402ed6350211edf1115de3c3be2941a07b359969f87dc41a8b0e6e44d519d5bda346cd95124a084df7bc94447d24a572105695587afe29374c7b168180f1c38d5c99518e9a5cd9c6c5a1f4f7e663811b6086a254196b0826dac271e4f99f6e6835d06a07e16fe8c545b30cc4410b5d03336ec9451becea4efd8a8755874c5eb7f49320e930a9beb03d9be394d547c19251b51111c9ab55177d7b61bd732019e062897c1acf35e2f07600814deb3d3630810483a16bcdd4e9213e06020642294d475b85830639dceeb88befd9cb1543458c0325dd497dec2cb27b7e0e85db16646bb1440c1dde3511cae4341ebdf871393b5901adaae12748f9d9d2c73b12668f9531bf9e5b4b74c076b25806090e477454af1ffad8210ca6bb0109176f10a3358f86001f09a92165829d6478f67e4d5e9fac85aa196623acc39b2be568fc54bd1f560f796f1fc467b74f5f5bcd710b5fe6f93da7b6d8f5c3d84e41186fff02910e4af292d5d6e62edd6d5199d70e0ae0ef3d4fd7f79e0953c1c2519acc4134182309b35483f50e22bca24319597ed1478321c12423e1e7c547a06652c7e972ba283c5aa5c0a5c5ab1b933bc39ee8e8fe6a4d9d7584c8187f32908528a82045dfe38aed6fd60e9231c4eb447fed75d86b6c68ebb1607c23eb4a39b804b60d33ef1e9c76990b57fd1c7d5063358d4c28f8511ab1c200249070564406ce3ad9c6529f19fc0ba8a98ed40f6ba2cdc797600ce00df98face9e8752058786e7cab86712faa88adf42bcec142e3082fe37b090ee2e6ca00abf3b2646e1e14cdc4acfab295f721673906444bdd609d442922aa6820502dfd476976a4093ee4d15a03aa7e9ba7cf21bd6179dbaa8c6af2e0b4cb815ff1286ec673bd9db95ff06385da1e3e07629ac3ca65f3d76f0c76225258f4c16a71c63b713b0db745293e6c8f56df58a2d28b35a6393ca9f58bcabdc537ae9008790c4d90e6f15a7746d9d2bea17436349da95f9907dcb704af6ca98279805600b1048a6b9feeee155bc67f5be3653e856bfd29edf4596b642066d0d145f37b1bc0b5db498c8edbe8130e59ad433bda5ce58d7ce82a3d2cdc87c018f9c38e67214f272874d55889b813ba4afeea7d7182b2633ed4d10f61358c806b441dd983da05635a32a3d4614d06d2399400b36ac07b8759f710587437d6b0b0f8785c350d8b7057cc1e8bc96e925c0db9ac652fdce8ffb39a109fccaa0e57cf5effa0e6848856098a6d042ae55f62b0b2161c279ea0d53604f96cd156db7eafbed72cff05a51e57b3b9c7ed7816eb09ca675fbad04c11c97ff248eb03e62c3a602b88e6598acf2891295d78f05f000048c7b7503893b9535123b98278d769578b213d0548de71666ae64d3514e1a87d735dab51a01ed7bec3b549fe7e553dee89e1d2c399490df887171f8aae45eb689552c325ce9572f11dd080c7dd08b1e8a094cf871675a9c630e55ce18432d1a9f4cd87358a9e93d4a79be5455d99cc2b1962bdbb850750b8ac788ba160516329d8f780e79ee4414fa93f00e1c5b097a03c7222c6afaa07b645f73432084aa8ce8bf835a4d00d844a6ae45901dff4182f50ed89105c04d8a8418ae0fc44c4a88154f72ed5eac264ad33b0790f710e59c19ffa770153bdca76e95b1567de686c2b7a1cf4e0b2aaea604ccee77144a5623c6fc276015e7ee508858f5edb9cddfbb246910e2ff16e1d4bfd642b912062398a096d0d7843ef32465d5140c048cb5e00007b04286eb506578e9bced5cdede891b522c5cecbb7b819b8c7457ea8dc9bfbf0055f35f328ab6a469a57a712ed773bba09246bbe7e8067e019f47d85b6bc8d5d54a6bd466f166d6e8a4e6eb80bec6e624bb4b7e4ee901a1b70d525a601c89d9193612830314f494e923b9188ee5114f310fd1b05adf218b2f471dfd566c812d2e819dd79165ce42edba77a473ead14b67f86fde863ae4bedcc4f11d88cc3d6697b5446e9c84728568c1a90c0a50956f3c1d7c656b9ca991321f825781dc1d09e759dca48ec18fc0dce1a3bbac96cc2f2fd78df175650ec6e1af2817dbecbe8b8fe79d15d2dd5479dc931e3fc52de40fa5cf2aef3e4472b44e0c78faf19e706013d72c3f13088f34ca4e6f04fe968b85406cb9db208b83ede9afeb5d6d62012bf5b0f09cca038e76388c1ca7b36101249228e131b6caa0c8471205db99d7bf43b80d809b623ee0b299c4bda48e0e0361fd9c078f7b8257f7d8db4ee21140295bdd2562c7761b147e8090b867e90e00c1e52eb330e94327e131542d0d6e6bcdb8c7c10dad6048983e6f68a37e4ed177d90b696ae28a6d7f28c31536aa0b9b1aff2a48f7c9db17ea76d8c4e5643a08d6fbb2c4a500d991ec1310b6e264736eafa357359789212999bc3f2e14963504acbe9dd8e8184130fd44ac81b6b92046ea29e10f8387ecfe1473051cb7a0ca6577a60f0eaa957bcb1131f93e2a24acb459175a3f42228905f94fed1924f0649bb63688ee6304c3e0c66f7924c31373578ad0256d3a05afc19687399c03218e37e6d4bdf0b7f2c3e28b61cede08121e80ee08c4f1f19dabb19add9d2dc8a0c19a9824f0ae0fcbe670ee9d4cd26fad08c0f105db65ff57176674976a36fbfa8954289be38ee10cc5ec5e9685aa7040cca8427bbb41c9be7d5092693350039b5ff5469de90bb231cce559c20bbea089c4a740cef71dd75047f092a77b0175ffafee40cf83bd19e785dc7ec4319786c49b3e7a741142aea901d6e3f6c3b3d9b413bfc595360b8e7a6b322c01b9bd79adbade5e0f8c58b625256414cb8fef854505ea3383928f6686e796effee6a91f81ae2779f5eae894513d38938a422d3f3f00ee291f0bb15889a57b39305ad2ef0cdf7a4ccb9f4abfc9b3b4eed78cf53dee9f3c04cc1409daef0f4fa63a88d34e9be97754f52c27aedb23799527c2c027e03b64552f4df14443af94a571e322d4bb368f010713e7d81206f714ff862673b06ff7989d1c204b13e0dac57b1c3a07d75121ff85e903c20ac8adecc33980a7eb97565daa00ef45dc5d9274ba76816e9cc3e0aed60e13f332031e8b176f774ade5c1102da8ee6db09605c31b494b16f67f94b8d8c0590f20420b98e609a72c32528b826b3288f6127b3888b0df91280c58bb31a2c71f3351dbc1f55434cfba73c87ac47a860417eb3a1a7ff0b165d4931d5c7d31ba5c332cb2fa07e13f98a7da0f36dd44ec8b58a39c54afc406eda3f3971ea56fe437981b915fd77671297acdee68d5b0ac4542a2698e211428511c958eaab0438cd9e8853e976cfc13abbbb62fb8b5a50d595c50696fdbc95dbac8dfcaa7a694f969aed2824bcf596d45f3fc98cd840d58ef2e1663a0e7c9ee502d3a12be8f4c74106f6925230677c720a907f2504acfd631415a21c94dfe233ad50f2f97745245f6b5b4efc61b3c6963653f04e80fd3cc451c856991134f43a148c4ead95c8eb442071aa8dd15929a37af0c983edc018553480004a043a398ac0cc3092c50e8091dee03170ffd60a4c410d674f9b84148844b32ba9fe4e46884ab72543a57488baef1d70505da8ecd310f0561c2ac7b5cffaf825236fff9fc50ad3b95a87996831e98ff3a67b4035ea735012741bf970aedfb5a960c9bca9c3998859221beba39946be17edc94a99e4d08328e1df97d9a76b8214ccac03f8f67f6b7144b2f9cf539f3e6990c8167d74c12015eff621554c16d3e3d1776401f014e3be3ced325ff34b77652a083254fcbdbd45e8e03487ff7a21b319cc6b5922f2978c753b33b9eae3ffa7240a2cb50f3e9145773e3fc653fe01ff001b786311b0ed68882d5c71ccf14d8c293e74220ebc62a12550a1a4cc2adb241ed529b44ea85bded0243b2bfbebd7a0742597007dcfa7c54dd818b7da8943ced089edc13c71695c07c05e2d0a4c2460cf4003e4fee0b74e8b34f3540181a25bdfba332e5d84ac6c797214196a8aca69852e5943e488379957e7c02dd3ac9d6766e69830445a8b8cbfca1b65bf3020172040f5b1e13eaf222e611d99b3728b5e308f9b9b637b9d493528c2865ac4cbf63b186793576c649589515a1c337bf2bcb725aba44d60380e942eb81fefc1347330153d8cc9aa1e5ff3090449d6117a1f5549470f64910259374c5a86c0bdd03aa9e7d5e2aa7022edf628ba971deb77d2a54b0c113b9682c5a8f2285f700355a8f2d0cf599c4728cbfd00cb887d62728321db597e54d91fb063c0b00e904a0b4ac5909845f19786768251e592670f00bd555abd9b22e15fc5f228601883ea879c7c77bf3c5cf9c27a307c67498d4998ddba59a6fc3837c962cea9e701ed7d412a9226a2a130e6634361f0ef1232baa150bb48b4060754c30373b5835f1f6ace51a10df1091fd5ff7e914fdb8109dac0d2e2b8536d02c0f3446bebe3849c4b95be239e08f87c50ed6868e9bb2a75126dc0cb191385dcf4c09221ad762706982ddc847788e3c8dfb3ad337f1c52f70a0ea6defb62f4d868c1793f8ab99ad0c90d195dfacf6f97eaf8c9ab406daf221a29f198cfc01e97b56c6610043c647d569a011ab86ad06c0b132a1b0e3da368db563d7316b9779d3327e53d9a6d287ed97b304530d9cab7a8996b1d18eab44db609e71860cd945b9a8a7322cdca3b57ca271367f49ab30d5c01e91bf113764342cb8ad32e6af945341a9c6a0ee2319a910416fd643c3dcf8dd340b237464ddc0a01954de0102b0c984ecd7dee338fa9d6b8d760002caf80b683fe5a5bd1cf9a644292e3166b8df44fad92d8dc3cca2803abc14a68eaacc38eaa7e8ecf646fe0fa05102d41cbb6aec29d68f5697c6577906361170f049a0a5ead3dca126ca35223df79a6e2bf199e89b4cc7e1660e62b0566235052f91bc7af02d896b5690e608a285bca89c44b361d8a49bd5388c0b4eb2aa470e536867e0841cb6f38d7f59e85761312a769b027e6644d4db1528997ba275113265b8ebff2f082de1d381d5ebe5f5c09bc1ddcc68cf963a9a06ca565eaf2c591a6c688efe7859b4dc307da439d3a733a486f45a469b0094bb125a88206035e86d70609905e878148cad5c0cf9a9e151ecccc7f44150ecace542c078e83ef986d47a88543e05cb159a51045654f00ae11c9b3ee18178c148c19de46edfd0e0faf790c806cf5abb7eae255ec9712f89acdbfb416b2d9ae731f62baeb12d9e530e7dbd08f8e06cb1196f2f52af79eec87ad2f5b8d86d3fc62f2df4078bf930b8880f0630739ac513ac8679c94e93b52e12a8908b716beec6090e01d5426b0f7831547528bd24ec4a009a0ba9f0e80d233e06d5a37e4c2f4f894059021fadc2fcd1f511d81ea769bfdd54ebdcdb9f7d0fc494cae6473b8ac9756c04746ae4d1ab3099e228e04bc5d90a5c234857e18e5b6df9793d135e889c96390b156b3bc5ec15e9f1014a3787ff5159bbd7aed6c66d01deea902cddb030b45075cb6ad824294a8c4549a394379b78f4b97026a5b0ae48ea24c8d8e18bed97584a80aee379c9952be6ea34895d1448d427fa0977d1860ac62fcb60929f3c06fa921b80854934bf6eddca453f82d289a10c5f9d73b35e0e1913830c177783cade568428e51ed190fc31d31dde2d3d030571862bc2dd9c1d8cd8d72399982babab9ea3ee2d7f0acf7eeaeb068de7bd7da65d57fa8bd7aaffc787aeef3f8c9d710a70601982f546469b11fc467437bac12cd8ba54f72aee7c7128f2b632da40e4a2d6a3f30e07eebbfcaded26bca59c9540eb977f2e5dd25b32c18ac1990a7bcc1cd754c2f93d68f749c6a6ee8db9cbc28a9cd6c457f8bc66b45c5e589da4b8f01f7b5bcf6b1f1dc229650fe60efcaf10b1f55f6b9a8316639c0056c266315e1954cba0628b3675e34490105668f5b0465efe1abc2087471b95b65a491b39d50f62ce0bc38109d92443529185c22d372e38bef0ff118cb75645855233e442849af38d85397620af4bceb07abc452aaa8ee83dc77b9518cedc547526c9ead6d582ac0ef40d920460218cb4b3431976732f15838979d2b5f4746b8ebe53557c2f8e375b4288fc3c556e266524626599f8d968991c41f3ea91e832d902194dbdfa883c7c55efdd50f5fa43cbb6615119a35388866a1b1e3f0dfe505ddb62f91f9f366277178d5cc9a78c8cef4f870780db671f52594f7c3dd07f6e222f78812c846052566ea9a22ed5eea9d8d81dac5507dbd206d324346b42323331e8a10e6c12d0b421448ad607e6e6418e3a6b6b2191784ba8bfe36e52cce14891ec26c866b14d2fde807921dd423dfc1a5bb96a6be006324304d55478d452544a254fd6a2ca9e6b970abeab3651bb8483254fd1bb5c4d2edc8c3f0b67c44e0065796360a8c38c1153caa19b9d7a277ed17f74c9996d14e87d3e6cbea7029df4e9d2ac900106dfc91ba86a1997284a950d50727a8e7b25082d02a393bef807d7de17708c34f95f3af68c604faec0ed6f3e828f0b21ee4635f5c02bb2360c54514d30f87cc906d30dec5ecc6369abd6b46cfc14a4db2e4017db604d4497a84b0c3d048c89489405e90506f67d5051ce0d9fa6496f43a3db57eacb51716733b6adb67d73db3a0abb774a6c26c6ec1a9c22e0687591e1b6de9d27e77f6030155bdfc082f79927d2be5fc278a465c46f0a9a362ae1353dcd13909c9d1e3a79b5024864fc5eeb9553d6487513b78361b6de1daad4d681e05240d950d67826cb7d7590a9d1f1fa0ef5cada6c23a9484959e155434e9a9d51ab2e204b78d34dadd47b6098eaf8ee192064beae91c0db06bedbe7098075b21842a50c966c78d7a722db60372fbbef3f3c6a9c43464565204f947e0453b1e8be7d6d45389bafeb41d05e379088812306b1a51b34297f0d1d72d3c03dad9566cac64d7439ecc0b10444cc8dabde94b5f9e8dde48821b8fc87916255bb786855c4840e41a246f25277e7ed0c8e173acb9d47da9f47183659e51307e6869a73dc341e78537a938ef62321885a431dbc8e7c3763f37af5434dc0608b1ba7fdfe24a3fe5353c9badcc48e5b671fd2d662251d21428828a025009fe0b59b25875055998b67e897a324e542fb5004412c73b8086b3d07590024990afb4f0f0822b3969c2d7cbbed36ae81c76b0cb09a063971c67f1d1815ff8a4189191f1e59b56d0f364c5973d25bc1bfa31163cde54bfa76dec3a96265849d1fa5a2ef711f27c7e9ee50c7b94ffaa7c760571c0028e5ffefd8a1ab8e5078a75ce5fe85af6262094c4ca28e356bfba6c285a401f36dbb90053d80e943dfc1ee1fd295a9812a4d7b5fd9a8768e2e4607d89b5fd84ebbb5f4df93c72d2a1948bb91f2cf258f80d0654b1ccb476da0c3123029f26ab81bbb75a765e03deb06f555d9d015c0806bd30e379e73c879ca5b0ef3b7c47fda93b559823832e12daeb10621f1cd41fdf43ebf4ce509c25bb3f44548ce3ddf5c2e8be99a9625e3981a62148edf6171ad22f9c0b27bf3fdba6377fd58f5c551e5f1266d1706210ad551f1c84a21371839fded5990e89b413fe3cd7f4ab4c49e1de66c2d21118e1d8c5b476a7d3fb9fe488d00d20eb26756923adc134793a28eae144670de3dd4e564414a424ec14dea83db1b725663c1035a708e00771bc7e93d839c8079155b2a060ae497e6305da591ee27828d8210113f8eca9001d39c77753c57a3181e8cb31abefcb36d1450f81cce0a4ade98bc49eb9b77090e438700fb465d22e4e2cd4a47667adc0af38ea8c984ae126f2c2d70039f7fb4c5f4f14b7aa9984504e887b53508455be5577f804217f92268c6ca5132a3c9d94f6d4321986eef53a0b823bd8daf477827c78b472f8fd5c1f2effdb31ead3dc0d336e34afd9c4996e2db072af760677af8cc1ac437f52939352d2e5d6fc8c3b07ad83b8e523b9054f0d89dc41a258dab7fed94c00350ddd0580bc318cef943f36cdab1b53f54abd6f2374c539f05a151e5b261033ba8d8cf830e25ace34aa5cfd0c4af866bed826411817b9e2d098cb551a3e9558605047ee0c0bce155c2d18dce1f9cca7f11fd45743d946e6d37341fec49947e8c70482494a8f07fcc69b0749072e04922c504c345f3fe8b079982d6de2bcb45f6f08c0aca4e2a4df24828ce3b45e3cbfd137f24a92b21bda2375e244ed1f4746c8eb879a83bd0146c6622e1fa210c18b80256b1ca6e65cce617b14f64c479d19551b5b756f64c9ce5cc87f7f38cc5f7fa9a71b2d043327f7d4361a04a8bc0251a41690cfd0704ad03803d564e1076326be4b86fe333f09f0cc3585f25ae3337a266bdc2c5 +MD = 095cd23a91a9b7991155c63852ea124e6bf16af401ff3845011a428cfafdcfc2dabb8b6cabeb9ed9b7027126fd7d2cbf603268eacfab776c8ae48586fae3c093 + +Len = 99232 +Msg = c4ff5c87f2dcce57509b470b16e2e41b6b8d23e0d950f554fe9e151a84ca97be536dc43d040725c899e9dec56c523e1766d8939f71094302305318aded21dc17d34726465da073950ef578b46321b7f0067351b544541b51c12af3fa6a7c5513ac5629abe3efdf471689bee1e1997930b228042a3979a5c819ec4e09e4222a3946627673803b9265186b5853cf00ac5ed4bd540737bf0befa061d0e0415c84110933b4a61bceb4777e64ed12169f7703d3fbeb532870724ebf5022896b728b245e908c4d9cee6c05af3c25279cbe03a617aa6e16f3d2046edc82ec0c48ac66f9ab42a66feae4e29813bbaa994ba578cf08928858802ee9d661c0d56fc2513e195912a914eff83fb712a921700a9bfd070e7adf22b7cb490eb4d085bcc0ab3a0ad1c53e449271abeb14cd35b5c0e9bad4912c1b7b80f34b9f3f7aa5fb290083567a260c08bb994dbb81f08c6f57d8d8c1f96ee56cc3ec17106888dd32e7994084bbfcbc6752b64eafc1dacea6b6ae7f53ae09e5fc68ffd6e999c0d46be1be9a1dfe0ef56a4011d54f3c53a462c5b3d61418c5c2335774b0b339ec33adffb7b9a8aa2560186bf20b245b23b6ac6c31068b9f6924197893ccf4b0d2a10129cbc4ad2709a479bca018b58411ab8b936e3640acbfb5b7b3a35337653bc76d4743e3b5dc826a951b65238a20e72b0822b38fbca58d1a14f1ee6c01c2ee4cfc4167404733585a757187542c986be02a01483986f49cfe3818ba40dc2eb5dab3ff7f00eb93521b20a44fd42252666ff919755b26ffb4072c1250f74f1156169c6ad34e29643a569e9e05cbf4b89f837d50821e25309cddf7c5f8b8e3d49aaabe68ab508a0fd6b2f845f1612b31e0c2bf8fb6a90aee1e29a11bfaab1edd493e21e24e2e95faefd835835bbc4e24efd4c6bf5b255da0009333fb9df98b952b79cec10511d38e4c6f5d3f8a07e5fb95629ac6b7b9a7b00bc2b44c2acaaf640704cceb1821ca33b7207961c768791d9a14448e128e6e85075f2cf8e94514b3a786234acf850452f6938fd05a0791f2c691cbfdb6cb3d87bc11a4e6229341e8d1a8dcc571660951d26faa768b0db5e2e18237fdea99991ef28122fe1ddbbe6d4e12fe4348eb5f9a135dcf3aa2a26d55b28e9175f5200cb27057b128214614a8e66b91ae9a3d909381040804e6ed42b3025ee04c20871dabff3a564c78fcca03605c9eedb08324a6e30d5cbca017bb6499992c6cb3f7557167d21b52682468e4868c2be8d2e6a13a031fd44b184761d03fe87dbcf6973a6c70c807223ae776b51ea44387488e91b6a7e3769796a6ba60bcf3dc2430905605e1c422a5366c7dddf14bebb259a27b8498004c89625c507ad761508cab0931a2846d75c1a3dc05c4c72a2d514e4ae80b9e1f5e09c390ab8859dbe2dcad2b51ad1f6c075fcb5e94d268e8104c6fb05fb380e8b200036b51f00b0899fc7f1d408c7b68e168f41bb46f9b2e9c8b04f968e4080252546814cc1cb2917dd5690886a9600a09c2673aec0329a4daf655508b06fc1646ef3bb3a472191d964db214a96a96fa89576ce4c4f6dbf1d176aadb518125cb94b7c3725f5c0755ed4da4683339e4df690d4a41c5b077be8af14ac241be4bca46964a77874043e089be852dac7d1362afce4b78769ac5b20b507e2ee42336bb647316eaa388966872869e8a9a9deb2a6581b5b2601a8f765e7c8e47c019ad44f43570f43c9bc892b18f37a8870334e0920ed11609999bb18b5cc2345f097a1000c6a0bdd9e1a1084dbf98affa16b62b3f5ce7cdfb80b20c98d7611e495963c58f0dee6c02c2e9724e0008c67c3e39b473553ffebe359c2f8fd7b52c0473310caaf2a22940a66777bd39d11594e3842236e020d2d82221c1774304871abdac8c585d031e19f5e4c0a15239c5ca6d601e90e5d471d3ad096b5902975613a19beea1365a70171728f5023289fea64595508a4da10237401bd43cfeb6c27585c7d98d65ef4ac275fbbde8c308e7b1d1eb5f2bfed0ad8a4220a4281ea9f3cad3f9f625d30ad2a17525c05cec00a9727a2af47ce1a89c561be185264ab71099f2f7ed7066f3303c806da76595b76b71a819b683de73f42232231d3c6a29416b4a89657607f18d1bff9c1a0ca6765637c4814e4ade77e077f1b114756747b0c7437906409f4e11c7587ac0580885924b342a63d9c7fe86dcbf5213d627598235458e79d51450e3c7f5cf4251a12c463562dc9e36834e0ed904cdc26993a7e23db88f663e50402ca33c6347ff5ab39b7eb45fa76bf8afa1f629ebc8359379f66804457481396613e497fe786b1c61b8ad947a2580106b67bc9474ce421016e63d91784ca8b909c1116d677d9ccd80c54a69f7c07bb1c987b2ae307b99f0c7db45c8ef96bab7725db22567fd9a5656ecde9b9c2166c5102961dfe678411dd4fd060f74f9c01aea104f29c6a16ea02c53f09232f0483389774f90606c427d85730acfcd1dc1ccb70271e04c101f92492208b580d42ae37c9606276400a5fa2166d971c3abc5b4215a9fb2c0f2b513f782ae6e507613bd30b10e0ebbdc717bf2fdf95b1e4bd5ba72416207ecf1390d7c9b6b25687e0ba9efeeedab2da7aee73e61f4f7a6a4f7c6f0de414796b3b2672194c64091931b8fff752d68810964284eb952ac235f35c0e55ac4da87e028092e954828935d4957a96f55ac81ac9c256a2e99e15c23979097dc73298721a3dbebc8774536869fe93504eedef3355ec6dae853001a99241f4f8dd79a5e1e2cc49f53deff42b3252deb5b7f68a04fb0f3e50e07702569e45354947796d37ecaaf945e02bf7e8ee20c139d90b150a09c94d4c83e99453adf15f01adb86afe9868110126debb3bfde6cf4f1aa21cad02991ef407fe342b41e4e69478cd0ba0967235c96a6eda9ee2137d7805420d8885fd27e9b52b6e380a8e4084211debc83757dc013352b28c2b4530472161640704740c9043f7af14685c11534f2167d02b87783b1a30ff8e39eaac3ee786bcb2fe8c118a1cf9735adbecbd844b8e2c42c39faef9776ffe0fae7225c1c0387416e4b3eb29a8975745e5aec989beaa95ba9ffec4aee3965aaaf98a516253ed36ad476a0e018f67c7901610b9f6010d208221237dddd71a81ca9b71a3b31b1b50e0a73cdea439c150b3ddc0f33bcb3c7943f7bc1f08da830ff914f681167e596f4b74aaf184205a6f1bad2e29dd75aefc7a74174cb2665651a0e6579e1f061dfe584012db13eb999f4214b6b25d88db268036c36b5cf31af37c90334f2f4adf6a918a22eff5e3e54dc1a4f9212e8d47841fa05f1f8b093761c6930818e9a5245081d349c48cb1e41714ce73fae2eb8a91835128cdaf213229297f548fb0ad732ca38c05ed5ace1c67a601a5a3fd3c0adb65b9eefa4bd391b61fb5971826dc427b6134d5cee2a0d4dc1fdf1cb0efe75ede315ae029d388ec9513c64e56beba28b9556e37edb6d2c3d0ccc727a63d85dcf660b4cad0f8c99952a031e8afeabf8c62fa98aace39cc5fe2475a750868902bc09e47fd840e0e2e5b3f7904983d64e404cb24bce4fdf61f8d19f9833be38ec1d9249506b795df222b5c1c10b41932d60b41c2dcc67608793daf24c0c540da158cae1c54e022b50b5f908b9b6810b1b902e8d398e7344bf370918cbc49031abd77955e96923718404447581338b65a23884ad76fcbbb6924c24b61d41bacc9200674cc1a42458177961b0206ba7ca4abe7c26ecff87dc863af4774b6d1a05dc3d5b6f57e84c07907b16609e451d629a8bdf9da37d1ede256941005b2ff80513f51f66b21be5a677712d2d04a834541a0774bda45fc9e5f741d3fc586e9bf4be8f79d8da27355f55c56cc1597e35c9529a052bf68ed019832b711147144cf96675326dd8f28558b1de9cc1a5ae68e8cbad5892a1f17ba1518de5e73208533c920e12ceb3661cb9132485d8f02015da0ca63798ae6f11a5e9d0f5272032f8e6cac2e0a3736a44ab03ffeeac43bc84c69def68e524f2dc4fd45d6a791a7a831f97f9669321e543560ad7a0e5a56afdd507eeb3220b6122c5999b0b8427c83b0e7f1b6a47c3c162e1af14642c1f12c72fd10de2f76ba32c2fc0f1a2f14f0469dc0c90b56764e5e9747b1e0029b89c2bfb83b3bb0b4da242b6d1c9f5679a1655b0c6c10f9a09392039f55e3c8378f07162a6470807b845ac82558ace8f11e647b334143f88bca54e55a53ae2e267f6e18bc1338f92b574b1bad49bf311bb5d870ddef20fda8411bdf3131bb8f08e97c29e5cde19554b179a86d4662c94a1615ce54cc445386a65b339c86a8852f4b95ec5ffb06df88217af0fdf5243c0c9db106307f0aa497489794f4b8d18b3a145fb2633115522625a387d7cc7fe3f3db4e9b196e006b6ac65575e24ee30b99e24e2e97f69977bf4c97df8342d27b605d230f481fa21261ae2948edcf39a0cf23c5b376c20fcac3f4cc6a78ded84d0271f2c5751a8c242c5e67a06fa061d55a577ad38819e4c5d4bcc5ab2116dde33ad8227ff8d51b3b2b55a4fef068e803cc0bc2213464c4f35212f82424816fc879ee26717bd5cba1df2275c7088f38c684af200f14390ccddc85f867fb950a875032935c56933a02c8533e9b2099c09824b0390f901d38dfd4842ae90ec84a8a4e33ed9311a3d2c8675683edd11f3bf31ccd61a54077e583caac2419d6918c5be46099b8557e228d3caada218265f751ed353e629ddf7f642f5c689d0b976c7683572c3e6a98a5abd8ce95f8bd248f5f16b623ba10ca82fb83135cc4f6304764cb661987e979d8ceac406bb5f9c16055199eb63e41bf7ca4667f95342ef2c9a12d4be6375a98384027aebffbc0c326ee667d6a419924e91939ef966d2e555fa6294716cf367a50baeb48072c9ab02f759dc0b4768fa144a48de1d4d26cee65fe20062fb1f5a69e8967cad5eaf00ef6a52007393fad9b1be0c2f4d4f683249913d1f7a58210938e561d95a099594628e78dcf4d2f7ba8db5889a71b5bd97e55819f99fcb22fc7bc8b7d46fbca4edc12a7477774a872210f7642671c84f87227c1f97ba9b4abc985a4273d4bf04957507eddae545d09ba24b47dc35cd468968c4f600b411c0d0f963a7c0725adc14e7ed8c0b2409fdacab7ad9c2a60fca261ff9463c7375adc004ab91c32fd554f07ea3f9141ede34de934dc3e3aad501e4afe3b954e10f381523f9a683f47796b3a1f3dbfcb90e9db7c289ad442a66164e814af54fe5268a56bd168e08aa8ac7e4baa3dbccdfe062c1a0f93eef0f0b2fe9fbf6a2356603ca0b39cbf25a3754120c307ca08b779ba88496641feb3f0c753f86af690f4eef21bd01de7a82851e9db26b46d34169889a870a91f840a4b10fd78b3cf2e48430b7f37c17cd877a2f905ed3c91bf79def5d52654970f7254225397066e4bcf00eb3351240947100d11499d0cc21b4fa181c6d10542f16a906e1ee9ff5e79f7ad33d0b2b1f7648fe4a51e9ca198c806a4afd61717adea81a46697d7eb1a5960ac57ffe2f7e1c155be36ed929760563d5ce28b4f28325b25f4ae56e7761c3a8882e9e9586232de001e493ee55ac346621edc6f1fa36ab3e605a7e4af0cfecdedc54c55999d652afd795eab2b683c09037ecff9df05c195305be5b9753c1c63eee801ad0ce61338cc53d98acb4c252eaff16fa423ebd16fa36bda6e00700f9d3a6f9c5848e8b777eb326c864b833917a61b2e0674b214b3adba084aa74542ea2ed09effd421bc78e8996a063289c264a4607d8957f505f1bdcb01f7f02840db5a9f6c0c150dacac22fd648306ec6b862945e0b534211fba521329fe6195a3d13c4095f5a229029248e2ee953f079f0c835ffa129fc2ec7e192712c68219c67c4248af5501e048bbc8ce5ab55187c76860f32c19f156d6ad618b4ec8c821332d1b3c1a929ae0099901245b5bd4d99f1a40c3f933ef5978d8c99420adaa487474157f5a46f394afbab09943013f6960928136d408d0574d70cfe64acdaf0c04d1cfa700da927ab5812571b43e07d3c671c0b06f015abcbf15d3062fb15cc85ed6a83780d60dfeb58cfe62217aa4953b387de50ca5c5065828716841e12a19fcf34da56cc1bcbd2a4e89cf1d3fcc2a394727394f7ec5d0b339397123d59d8d79a82e75271625228e46863cfa05b50f3b3e4b2199f4d3883ac889d538273d7f3f65a92b325bddcb4bf542206a6515b0db8e58329e8054b95946e0f9013e708bb8dc6c3c30fb5d13fdeb6c1dc0c654bb74a7dce0afd9efd0b944ed411183dd2f904cd62c858d19a91e995279afb2088ba11b57b0504a0b5ac532fd61ebafe9c730677570b279a9d7287fa3e879a087adeb79472622691dd3f7a19fcff20b1d0f239cd8ad4a59743aa60eceded12a78aeae1239c698afbdc8db0142efb74ded53e45d6e36bf950f4001d731c128a851ea83969df6259651a5e9e29545bdb0d131fd39b4b174d4d193e6697b33f2b28a0de676e2494ba58ff79eb5f57687fc7f25d8b22a821c617182ae2619bbc1d1a7655133a5448d65bf3a840bf1d678893dabf1475e4d18e355b8d3ad8bad187e30ad5e4d655c6d4f65eb1454f8fa31efa330f179ce56fcd2f482e1605f9c69109c22682491156ddb1a85da1199563678365133b9d9543aa8e49d71cee40e26516080f969b6e4019153974fd2518ee8eb6d8942982da954ed8c54ef79d786f28924359c8d456cbafa979be0079fe8db91bf45988539eace198245c4d1a87b30503daccbffdb040c8f5d103531f3188113b222c0116c8d18a53cdc9c76b57f722f33730241e64e78b82a70a9d1f9727bd9dc8d33cd5404c71932a5d0c9acf82a7e9c14d9e3d590821d7649c877f1ab2e5c95017e097ee65bfdfa2e0c5afd69ebd6ee0ebd66479ebb17d7181b949a170b34820c09565ba649cc09d1999b056918c09fcd1739aabd864fa3481da8513aa4da1a29605468c902fbd83d131a736a43b427dc81ee8d71662d8176392395aa8db5c3c61d6424c32a15ebdd0349b5e1ff2a1cc987f54e5eed29e81f18b6f5db2860258e8b061e292192bb1de4b95b54adbaf4f093de9bea8dcd5daf16a2e0410751a5df43cac36f8c0adc8c31e9c256c1bf36fe201ac488caa04892cda7f3709d22cb34d212a30acbe6b6a4654b896cfddf594ed72a76ce161b3f86a8168dee6c2c0c2bb08e3b9f53aed003195f1eeb9473e27f039e113f12c6b8e7307f4e1f06f5ff10699e0b71d5cbcf04a8b50167381558eb4fd62230231b2b30e1528286c0190aaf57b28146a4e5fa45adcdcf645b4c233016733865d9813cf05530e9ca5a0dc555157c3b625355e8228309e7676080e7c9f1f5b224a8a134a1e68ad23e272ca58e2d4ba87953c42f47e309c7f50a4c0d355cce2e1102f3c8d22fd0da66aa2e21c709b146d048892612283e0f719b1609fec16d1a9f9ae15fed8b9370e8656ac09c353d952b844d631ddd272c81a5677482da72f644b2f26060a4532417eb7b188a2a5121dfa9697cb77c558d89bbc8c36dd2404f94fdcf80e7e4806299aec78ffd739c6b612a65b99b8039c11e40a27d0c73858504ddb127cfd6bbcad221d89d728b6fd05489dad02683546593c69d080b28934518d54fcb94f565bb45d746d795ec5bff1e4a3126e4e025c9aed0110ae65bf9fe456703f2e3cb0eb289416ab4b410d15642ddf14453313e8bb3df96ec0a983a2f1f25662428c2175f00f2ecbb7983706466c7a3af0df0ff1a4757a731f467d4460a730ed5c0653fff416e256242dea9b7dea9c0cd51a9f803ddcaba53304548d19be2369e674eb941cf15ad3fac6cfdbf2ec6b135dac6b9c6ebcb58f64abb085047e595d479c943950e7bfcaa02c8dce8dbd12d6f05c1a4d1f5bbfb61b023b350a31fa51e746f4f8784139c38027cd7c37a4b7def7f3559b3803f2a4bed29aa4111d2dcd2e3cb3d87c48ef47017e37eed6e883b1d83ac38fa1fa76e0b7e378da028c1b5a84457ae244410add8bfb722b53d29dd9fdf60d30428872f26cfd7be0c6c4ec7f5128f11cb877b10e8664273b97aa2ddeccf2da8703f70e6347e84bbd430ec7c5fdaebf90c1310d615a82fd2789b85d46aff5d39acd8d74b9ae6b917963b1d4b3f09f8c4645b6465e701d9df61043539b0dc6a0738694c97f0b50f51d0df73dd192c302442d4f838d2efdaeb0169537644e2ee81a1852383ac55d1eb0292627a74ce1c7946244ec77fde9d95e82f4322ad9f553956910e674445bb53a9e87bcbe84c3833ecbddaba346aac6063ca96c7418e38bee6315feb4f01161c45662249da32fdf484f62e5996f081cb32bfb0cca72bf352dedaba6833149cb5438ff87cc12ee82bcd81ac5e2e2cb846a39343ab44f53fc58ee1806686fc99bf52ca50cd438c816a14d4e700505bba5354d9b20bb1765857950a548eb125a78ac1a9ddb3c7c8440009546118a42a0281b4f77e36633be7b97fa9a919482c40a83ea301d8c48ecaae09a4acefa0041b4252811ae3e092684bbd43f0cec27cffa8184a3fa4d03c6fc4943a2cfdca667f259beb1a7ca026548ecc6dbde7a6a43f0aed141990614dbdd4478953db89eda89c1fa9ef69286427132b8b832c6b1e79313b751233fe5f3f6d7216c40174f622265c422c41efe86a495921c2e5965848cb71f1abf80ddd6ef0d2770ff7f21c7654b058339f7d0f98b1e3c50fabaefe282a3f2e59652644b6feb70e6a37b7cd0f97da30a7ca46663ced49e9cbf71b5c91edd16fad03ce21b1e7be5195390c847870388ffb6ad278c15c0a147a5072101086f75a194c7bf0ea6c46e5038486df2b6e39aaa0e9b7a3c07e82b9bd3039a51e760f6220a7964ecaccef4d27a2ad3992f27c352adf4c93a4c5625de72ed878364b980c45bdd377ddba25de840be63069ad7ea41ba437b4f8d127859a94e525d2681fdd1af78a189d84793dab28d83009ef9f7bd5e0df84372220a54a1ad62a8d6c0548f2dd40bd74ec57cf0fa1e9c4ee397d10fc1dca7dea290c51781921f2b1b7f6d47fe78db30e32502723df917b912b8627f0a37f2e7c66490e97285f1b09ec5304049ec7b5c3f6e0ca7a6a75a09d365915462a7402885a452149c0f40fd069a85c437b951230ba881d85aafcf06cda546d8f0b3fa67885af5de26b774dcfc065419f066c74defdb4b4d8499dd77a9806951dde3866d768d60903906f512281285889b7b43a19210514e4aeeeb260efee30850bf4d02f8467b71fc832c6a31c5005961802fe89d4f7b23d43563d9a5289a4572d0b7edb68c2ecb98b67fabc028add469fef2eab79eb1134bf6ac59160577506a9d2df8576761e43427579c7c417441dc7df46f8907db67d7ba2e6e089d627061ae15e984dffc06f95f1d070e1a3ee7e1839d3fbb91e1689f0751df23f944ee7f8cd889e4fde7770fe537b21dbbf10fa19a5521f444ab5bcc687d7610200312ebbedfa020c80b7f9d410f65522a7701434984dfdc29228b85621af9771a8924cecc91f6df494e68cbfc0bea5571b605f019923f1c472c3ff37f9031fff0bc6c4f3f5552ca869978c39d9508cd989863d090e70a5ca7b2be3e4647e651a98632979e957e8889d5f9aaac148662a504620a38eb07434f9d518d3fa8e0154dcebdcd71b840c25ae831abb1f02dbda2e14bc79907007a49d34008f319e6f2e57c561a41266120ffbc69eb3590c5869619662e39a1bba99d3ed3d9e903c290787745a69446a9498237e895c05e16648a93fb68a223027751c55225a9cf3a980ea9d298f582dfe6ea43f8cfd8c1e7008537529c5cf39b8c6f4f0417bce317b2aff94519e941cd9e40c7dfc1072101028fedb3f3ed7b4e91fec632d4a9a92085644fe550faec391a8baae695d4e72d11b09d6595df21e52e07112487f8871fba3493fb66afe9ec02d3d65570c77931d5f12fb1a9ba4f260a9118225632e7daf828adcf8290a1aefd2132747c6940d5f8598bdf57046cdbcea4c37469de301be84786a9cd267c46b37ca68ae141a4e31ff19a37c947e0ca2148fa61e984caa8329904d16ff8e37ecdec1ae1c7d80e21f4c04200240a12bcac86a532fead1d497d26108e8f8f3c1cf37976bf55b4e4591fce6c8493d66c781765ac30cfe091c871f7932a5571f0e9cc2ca26db35f8f51482301093c3255c809eef7a085a58eecb71373ebea2868ad010c87330a6178d216c8e7d847a635722a286ecd47847c7cf7829a1a763c0b3039210b58824006a331c40839ddba753f231bfafe3e06c341d84deefe203340391d7417264286a08e421f4a7326f77bf79ccf817a92b2cb03037b59e111977192550c94e373bab059f1e197d049e4b0623c4dec8a6a10fc892014c20971ef050188f268d83c659dcde513d6966e0a7c47ac9c2476eea9bf9dd62110bf67c4644f5e2c7d4dc60ecfb2c7bdef0ebfef487094c4108648047a05cda82d4b1b9df64481c4b98a383daed03ee5c980611d7aa39ace97029daa978aaeb400f5b60222a796c106d6bb7ba2eef3954e347f1c7ca969c1a33118217cf4214a7105607b5342482c4b7b774e13d68dd465713f72b44aa7a51b5cdef3930bcd7468c24091eedb3c0c70bf9341694eb5abf681c9a98c4dfd82e6cb1aa742975b39cd767fcb5c3b1d695ceb38d90c1f1320eaaa46496a7c1261eec6f2c6f35f72a2886744b2052a914cf9468da064114e3e2735ded8b89d8f491a958ed70d2cbbb582ddb8cc516f40bc2e1abb1ddaeb0f0a966ab8e0dd791b43527f1762f8c6de7ca12203a4a9d4d4c1e3ade9d8d477fd8e1f90fde841d85f567ecdb5f01bf582ffce7d4cbf731ff2630049405abb7bc1d1abf0d4794c82028a87c88f08e0814f45f235bba7181944ab6e34e82af8c002db20d3661a663eade753b5ce32ae31ef56f3937ae3018a72a013b608d0f10e69b5687fdb53f7d50876cbdf99f6eece073abbdfaefb953a244ad819c8d5102c9e66693d5aac6710ba3ed78d19dd062042f9306182773bf001b2a5a351c0bce448f60d540bae1eb56c476006766e5fef459c3c601ce05d76b1df639ecb195cfc0f6e3a0e17e0858cc59a4c93d7326103bb2bc626a4be6292ddd9f8505e695a3d9dd5dab1a6ca025f6e3e857c64af74244aacb5f94397b20d2da94e0230361d6f9733d486dff5fef40e3bf109476f01199a29f32220f5b5ae48564cfb6c0b0d5aa89010d5ebe8e2144e9a7a82a5fa6eab54a967e8655fd33fd7e8d985386d92c576f576e6f22b1487d662072ea9d625a22035f995375e74868168dfe6bce6147aa969ee001b47fe154d9b7f56788d8cc6a5d49170c079004defdd456722fdfb3feaf5606c8ec306865c4ecc423da70dde8c8e17c02838df5ac84ff3508f3bafdde1a0b473742796a1aa82d53a1eaa0fb47c6b73ce97237975b5c7d0e92d26981c3572d25bf5fc152fe03f82864320fa0e1e748ee234c336685e4bc67924481fc38e73a26c38c9ebf8a58dbb6dd59035b51ab04e43279f7ffa6ae6bc4a9c29aa9c96ac0df066167fc4a2756838fc832a7117289c3b993fbaf2829d9ba2bc4fa36df224f92da66c3b5b7efe7130df804009bde26110b22c51194d7a49caac4470ff4de3506c21518685e231be9aa70fdf47b6e8830b99edaa377484af0a95907b1a4df2f8f5fe50c809761438c17bb86ff1a742ec74770a2f149ec3b5a99fb92a859a58db1066ee6ab0e1b2c5ec840458d03bf68293730c4677744044f1f149e70add1ddf0581b5d242cc104e62ea7a03ac180e2fafb67a59299d024228b4c8196fbe4aee1b762c6987de38bc6cd4a3d64de691d91267dccff3c21199970fbc277de4e6ef9c6edb9746c031f5526a053a7a4e886a02afbb109b8b762f862baf7bfcf8f9c9ce904bc5491903e35cd62a98fdf7fac9c8b69d84e99f38ee3d2f287cb4a18c66fa0503595692b76dd23d9a569c8befdeaca30d93a7a75fbc0344b0926d88a5ad67f48bbd36d3537afbcadbde20af7091f59e90a59b4af4832292ce25ee554f865f866c57b183e2f420a27796500d83caedd1b0228e31fe2ae0400a9d00af8fd928e32d918e4a69c289f0f6e8f64d3371da62f472490485998677ec636b3e6f8e0b3256d297d2f2cc7edade3bd817856e0579e4fd916a92b85b5efdddf7abf68e509c708192c084fa4788b9f6c01183a9b63f092b310b2b6fa91ec4746b9e2cbf3f48020848bf28342b230e8374e6340b35dbea65ef905ba6b6dec99091be1a0a205e94ce8175e56273d36649bc3ca07ac976101195a12745ccc7959a2fb4c7573a08ae3b048ac36c68bf48b062bcd0dfbb380199e9e599343101aff80e273c8fd66cd9b79ba7ca3a4f103c202c0dcb2353484763b405b85b2db39f14f6c07f983cb29caa0c7403b473edca01e4d7992cd9cf6ad9bda88ca20a05ee55af279a5cb403807c209875c31b7f7bbb50c443e495f4f061ce771ef20e202322000394c286870c959fbc284d8eeed6b6397ad032cfe06365ad1a7531832cc6e5b2fd76b1f965c85e5187253b1561645b66a148fdceba4a4c23389949af5060058dbc471356c63c3dfea27376f800ab10a1e2b42fdbab2e7ef8799320dbb578ea59e90fcfe5d1f19b6db41ae57ff4353eb0e51baf3edb9663f4876aa04e8396fcde2bd7cdeeaf6ee16766236ff2658a4e5c5185653f710a63df0726b052e142a3e42ba6f5b9873b75b46095fe987a30a66dcefa39269612e680a4d0372df705473290842f8e82e1c11c497879ba5cb1b0ab0683133a713754a0046f1f28ee665091037963b4c8e72b67c9d5c7a03395d3de9e27dbc42b001507cf0b4f8beeee26c92c8e797480d51d5c8ab3d292266276cd41ef790cebf6917daeadaf9e1e2331a2b2ca5916d234fec4311a81d85da2034195e1d55ada9f30ca485b27a9a78fd9e43e36ebe2e78a36676912bcb901dce1024208d8f620865bb5471f9ff3b1ba875677d8181fe7622d0dd8a46b7e3a9978d8f1696827e43078085001ffc5632ba1c106bac617fa414a7e26d777702f60308b4a0e6e374e27f1890e082f67e56a91ed92e4de1046b1f781fcb4c6d409b971e2f4fed36c87f22c01263c172160ffbda2c45c4953f6399ce0024141f5ef2ca3a698417d0fb719933743a5a03bfc738fa8442ced2830629f61df88d01a0a422e9fdde0566705248cf50b4cb0fce04c6dc6b95cb4d61cb269cd3b915c8a82827a956ce245be9a9c8101263830ad3515c1c6cbf285a7e4b362ebc062cb8e7e75ef50ec4f315a9e09d9243d7109962253f26e23f847e1adedf2851405076e26a1f697062f048438f1fc26f80021ffd09068876975e4cda2e78261df82f672a390f534628ba58490de52cffeec623066538bd8457243b3e8297849cadf82e21dca56eda76afca2cf5743e7f83db3700d25c32b5df64cdbaa3b3e027c269205bbd57f8b7dd5f1261de537358dfcfb09ed8d78465c09e78c0ea63a579e5f0d24a63bdad68ed36c57a10e9682663024412d1312f2e8b3fc103cf1d60fd890dd870684cd957f6c557f845dc8962ae11561f63ff9f7a9fd73ad5da479f1d1c3e9760236c292fba894e4ed5735398217b6b06f9a951d49ee34ac99478ac732ff1939c2db2093a89011ce0586453316dbef78c1ab4f2c6d8f285517637357a24d55176ffa4f612e2bb587f471614b8d34a8ff13fa8debbfe635ef007f9b6acab4855a311cb7c436826656e1a0ef4b902bc98f8e10b823e7fe44c47b246ac7523c91482fc8c083689b0d82f49c59f9c6c73a6e5974399c8ddc3e1ab1d94838e1ed612a9286d2686b80935457ec051dd810e3e49eae761e588a093aca269d831fd0de4781de5539e839de142f185d816d0ead3b8247d971f00f8f6ced93d171b6eceee92559b1bf86ccd80aa7a9c7ec2eca7eb92fc6c95cfe73b6f742a94cca4b497a56a67e4ec2ee43687de426ad25c24b40a8cdb3aea92abe6825f2ef775689f06bd72bd6940ac7a575b7111776f5d399d94e8397ef1e1bf98c3c25eeb8dc15e8a7b4dce8ec5ebafbe9fe54048a2406bd33f47af9f6847a2c0a85022c78269a391835e23cbc876f4cab9bd576517a05be34e1da612aa2ee5dca48b23320fabeeca5a2655a6d4e8da0a3d6bdf533bf78a4c65fca57f3422096b3cd5d8b1621290835428ccb6879bd00b9f6340798ba0678d0b47264b92ab7deaf5b29bac4638495b25e801614d0a672d5456136e83458413929fb0fe4235c3ea63b414a9087779c033e69c3d81df101df096d098bf51607eb068de1dcf5b7bc7eb6cbc3e457a923102a6e5a1e2645b2bf8b8008e9c5e7d2cd934f610a686f632012f0ab2799c335c16ab7644db44b8f5d13c0bc6a6c73abc7186a17d4442d387497d78cc1166cd7fe456d69cc8faa9fa1e858ac77b16399c1dc068ba3509845628fa9ed1a964d13af05b8ef057f0bea74546e61765d5fa5a3284946e0555991d3408d579ae10ef0bcf0bf805f4c1679bc9d2b61d1380ed655445ecff11b1724adf3ac51a9be56770d4faba342bd7253630cb636ee0a1934c0786bae406a7b07daf12d63aff6cdae8a69a3e1169cc8804fe93867379b27c7ca0c996c330a2d41407f391514511c9f1c88d0c044afbf096a7cd87d12b3e1985c470f9034c2d4dac9e8f8f04097eb52a9f25aca32bf00f59a0cbfffe919efae5f72f6a2aa5c18db5c72917b9b90e1cd1af068874993324cc9e314752396f811b9d5752afd9ea34be0672d3e8e04a71a58ca227ef1f5fe17de47006828f2a4ca54b8b5b194511a323f0df3c27fbae5414ac8b13793ab0c5dc181ab5f60f59de01663ddbed93d289860ad0c8ed77b4248d7323d3a957e03265ad93ce23366885be91d16da332973862b8e9f2bff0f6639e94fed1061368c7a9196db79090f1044b430888c0adea30388fad51f5d3efa1b6768ea405d9b4e624e02b2ad4ab6dba25fe25a5cc72561185f37d6f45bd0a6f738c55c52f374f2e57963e6055e24917dd17cb5d2d0c455cc988ec931608c11d446ae6ace8a8b1f0cfa02a20aad21dbddf445c0778e8326271b47d65fd33be4ba786b3c3d89a67edeb9270c42a07561cbaf87a4d2692c7c31d0aa27051ea5c6b2b643fb275a8eb6639e1a4c379de7ca4eea88886cca8501f3a0ffe1aba89260c2e880cf12640b70a392228b710d40be6f8d9295cb17585b74718d2fdad9ca5af5f668df880fe554a77b88f1775948e73581ebf279ba6b32bc2d9d371819145b50c9445410c3e309764395a5d0e7c7eaa8acdbc9fe19862fd4ba7721f0d03a0bdd475b5533e8ce3818d08ed007218572d0f7ac3fe09e73f9c3026316e7660213a359f70b77e66e88960cbe99a16e4925b64aa47ea9aff93991eba93e8743351baae85e9e67268ba2f7dd6c292835ddab618e0daee0b6df97475f90c057d09bcafbdad935880eed2d432ddfa724e007add9a92df60e1aeebaec4561c4df73fbc99d19b0f864075bd282e3603c1bd690d327854d7fba43ee4b88846574a8951ebf988b2b10827a9f39bde73710977f40c45209b4716c99a7f12406e1f6399fcd55f51a92a56acd7f09fc21ac4a1f43de29621cacf3ad84e055c6b220721af7ce33bbad2cdea56ac4eb457907133c8a34a960a87b2d036c631f79706911d407e900f22b42e4bab73686a2d78f9274bc08ed53946a48f9b9f6f6422803faee36e865a27e1cdf311e9c831a238df05241239c43c8c16c14d362822bc23757f0eb9109d48d02f69305bf89b54549545b814d5f382bc8c0de226e6c3b274d4d6390ae9590403c5166d668417c250be719e54dde3ba7c76dde0fe45c7a3d8d06ce8c05b0dc7f111935f85d5276ab1bd013d3edc05323059a9c008af9f1ed3eaab9475f03c232cb7685d36766acc0c038d1b4f3ae8988cb70a15e2aeca720aa60ac2983354941b08fe0cf4d22244a4447dcf1284fe4bc611774928adca4bc1751309a3bef7994098dcd54d930e832ed24bbf0544c6ca80fb69d027372f1aacea5cc024dd95b141d97d5cad138006104f8f61b3f4c29341d76a518ac5695d3178309c9829af6a736d67e99fee172bed0ea16d9b0f82449d27e133bff2f981e39136e57a2db53369a72532928d448309b23a29171f864cd77f76fd232a603727e7f8314754378aa9292d9e316b98aa1abcb22ad48f3f1aa540842470e62ddb92cecd069c27b6fe9665e9a2d92373ef84a091e94fe91d4c6b1da12015b0c2eda8c84debc532a40dd5eff1d7062f66e1dbe051fae5b7b140bd6946a68e14bffbde66f3476eef9f16cc29dea154f9f21f74fe8ac632659b95f0a5fcfe467c8574a82d55a005c908c80d95f8a8221da607047da4e1b29d2ccac9763cbddb72a3e69a7ddd9c065961800ec6e8421a04e326fec028c3e2a8f53d9c3c7e5bb971abc029faf3820d0b49ed443f2605994a49fdd8889ee34f23859ced7b4a6e6d040dafdb074ff87679125e42612a791c483afa06196fc654974e3731a5194c72a439f422354b75df0d6b518ddf6e033f9946ba1bf523f3af6ebfbb0d6c739c46ccc14b94076e709342a5658afc793a6fb7fdac8ece53e19c346a86d513d1d4660823f4b4e0317f5fb36118ce6ad485292eb04fe2f76816b762df392d5dcc6b6cc0e2ade9722cf880da1ed9cc8cf889f8680f229cf2d9199d847e207a8cbbe7a7917dd5b61fc982a3114f3709e56daf59ee7ab321533f509b13d80b412338dfc2f465eabf5b9f94331372af0af69c7bca3c8370249b03525c9b6d2815d3cb9a2b543b7b49b807b3bd3b19a054531d65c5eca9f80b3cbda54e75be257cf0dccd6d5b5f0609a79a47be02b4b95a6d68f3d9496ea939aad6bfdd5d4b71cb2cf4eff55440f963ccdff691f4c46891b7f7ac710d42025487e708a59c859ba4ca9c584fe991e3ec7a4116e5abd92caec542063992b4a1d036572623ce0d117e6c4bbcf985c243f842564f35725373f617e0877f6436f62148af8ed45c3261dc748b747eb352a83bb797f5edf2d3ecfc225ba6df0c597dec3168a933e1960b2395c4254beca37f1b4c7ea18ba7dae645670bfab4f59ca785731b0bced8c88c08228e35edbc65371b6382e8ab0bc8fe566889e9bdba611181a02f3d01cc2a42eebd522cd08cf86eb0af4d21b8992e9393a95dfa35b5573a652b2da379163bfe4bc8b870a0e8dd947f9225e320ca9c54a1abe0b2d990df90b4868ee591518deca3d719b7bb5aa536dc9eb5a3903a62aff4e2ba9a05b77aa2d444db59f6f890bc8b6b0e589c4cbfd46c2764f97343421401d0541646a3b8ef58d89b96f695d4dc66e6fed9c059addb82eecc5b467f9b1f5d1745be18e00ad4b6d438232c93cadacaed73c1d3ebffeac537442f8669de206b09f807f8e6e10182aa4965158d03162be10597238e2650b7b3750cbf8c9bc5c03af37a6342ebe420dd37f32debee3d0e641cc05bbaa1cbbec5c7695e42548dd11cb09be46e8bfb35ef8c53f23b1cbdf6e931e3d8fbf2aa6ee0c3dbef3588d72241c7d2f8d431c51653deedfee4ff0759d2dd6817bca97 +MD = 24735a57531628f9491400828455cb7c7756b74dc997b40728961c275d3245128fec89dfc189ba7cde92e849311e662604eec6d8e5e85346b43b1b35e859ec33 + +Len = 100024 +Msg = f040505326c87eba5d23b28cdb0c0f71778ec0f75cbcdee20ba394c49f7d81cd55285de34bd6e0f58805df8d3db2b9a54ac9f1bc04e11c293626feae6696f05059718466d9ea6cf1b523982b0a589f63c15b60075940e903e65998495a657fb104040d04566eeb53eb65258ec9688a52e32a5501e2420d182424a9bd0550f8985ec940e44cc926c633b3cddd0249421ab81f18d2274f4f11f76f7b32efc021ac70a8652f4263e2f094f5da413d638f644822f0a1b0d07896682254cf9e1ec496418ac30cc1a4ea79161392e1031e39d89c1c2796062b504e7e257dbc9cd0a7fed955a3a450f4050ac1f53ee6dbe2071dbbf303dbb0ca9fe241603e227140938a41f34d1f77bbfa4b9e8425774e17c2dcad91cd9536132df9b9bcde29a3d44fe5804a09a4be6192e3b4a691bde32532bc7bdcccef2170c23cef1fa7f8bcf6a5b59e441f5bae4e957b0b44c8df22741f662cbe4a0ff7482553ea73dfb8440d5ba3a4c8d66dceeacbbaac471306936c5181c81e8d1d43031fe5b29ecf90c1813a5699bd7802a69efb499e95ba5abf768fb658e3de428a08789a508abfa9bdb90a77850d4b41bfd0efcfe91805022df8a3ade2f785a556c1f81ccb1df62abf1f93ad719f9853a0ea6df596b63c27655c530d7141ca702e9566102b41be3c501a9ca1645ba660d1523e63ac59a6f0f008687e0aa9f5c89bec8c2179dd5d07f712effa6629bf8fdb722ac033e88c865566aaaab7174dd7242f30f5bcd81cb23c6f52617ff1290845b0f8b4344b36101cdce0367f731bc551c41b34fc1c4366a79a8e7eb89b2df4977672e9b56aecb7ced4d4cd6ba5a7baaa14158741901a4ac1f96bf8180f137b5a2b5e04c12df6a3f2b54c15819639ddb887e696941ce98711f5b078a73623c4153685b05d7c9bfb10e711b6cb2c195602865508fca8f7441ff727a56ef6a5f85001af93933f25e8b0d2eb5951508f4e10772b85821c8daa746596287438e03e94f3a3556a5eda915bdea1a61aebe2ed6bc330b72d60f3e197a8c6a8c2e51dbf67742b9febc1031f9873fd442ee35b5a9ad32c43055d711010297fce5ee3a4a254ec0d191c50e7b9f0f9c5dc952242be250ee7d412f94f5f684f8842521cbd10e0c3126a07f4d088ead8c215578edf4095db28105d1dd4f72681ababa676b0319562023ab49304b30e78bc987d11790971a4b99fedb24900d229aeb160dbc42cfa2fa5332916cc63e4417b0c0f92594041d0602aca9ef6a1f5ae5afd8a32422a9793c3fb706670c0f59cc61a13f8c80e8ec7e659fdcb2303167877372b637252f5f7233a916938f1c8ef666a932d0c9bdef013d38d1f184ebdefcd074c559ccd9bc18e9992096c1fe5a324a396186d0ebcb5ae4182841ca9727b2313f4f208c2115bccbf7d2d5371d521c66d25a1358fad7d814ae5e1793cbe8443062b21fe5ae02ba55659bd36101fd0147247b0aa483bb15297bd1d75302872f386f9cac5bd8f9be1032fa05d234b17d857042d165eedb7eacf122259ad39adfc3b67d5a612a611477006c010d3e260d8c76400bffc4bf8119becd76dda779d26cf7c2be981aef7a045e60497486b12dd687012ee48dedc8ea35424f8e06caa38e741b2d6342eb4b429d85439a96e94afe22f49ea6a2dcc2b8e51f144e7a03dfc2ebc53b450aeb04bc5e298401e735016deaa8efd8bc12eae05ec2697169abc3849f7f7cd00b6532dc10fb8f2d103adda04e7ca6dd3206be0af2cac3a95e291b5e3fa84676acf0521c4649d98e7a513c2fbf0e38369d4ec89351969758d00223ba2cbe4cbb6802ef176eb2d798be2ea986ccdc387766518713ebb468f267cd9922e74fd410d52366381ab51dfe3419b22fe8450c12159565f731b2bd287df1d8130fdb91097cc85408aacf210174a8c295a1f7478933a101d7b400184d9b155d1506cfe827b76834f3cf7f6555085267427a515f6f38fad710032aeee4378eb4a35cbb6dde2d8995a3c9347f6b67bd1cd0e1f1d816ae19524a7fa1c58eebe46b48821c86af37b2d273588cb3b70b3f6fab794736220b72ffe1a9f3109010aced7f0771c71d7e6a980cddf6c6ca7b5fbc4c90cffe13c99e5c60129d74ba5e5eb7b16d49a3ab5a1732bac9f10d0820a4af3ed90a945e70f1e4603a1f56402d60567a1402a0cb635f5f07bd0a1b02a39494fca2659d848a24344c90e739d3f6584643ac4b43102299599e27a0654c6ca629f09d9f7e088d9ba89fb78383e851ad03a896620efc005bdec88a627047f46fcad51ae6ba6ce3decdd40e72e8ffb7e51b13530568f1852d4b3165cec087d347e3f4baf9d724355410740643cd8ca187090e72a3e58339642b433a23da7e71c521e9ee3768c0ea922d1a4f64a60197093a1465bc194395c6eb88882022be586df12f352dc3b59c1f50114a64170110f24aafbcbc5895229c286bd0323daa1fb8de3f205b8c849262360377b0750da7c8974ad823381a487a5e8792d88fd4002c4584203f37b085f15b6b67d85489b3f2cc70589f4c25afd7fa464091adbed24ec3a8c54739cbef432cb38b4a3a07ce1736babe7ee949a14b983279ebfbecee86d5177012273926de16666294a9fa6e9c82746a40b418c52b94d6af560ec0bd6b065ac11e748ad538c51e8e3608e41df92c47ec932105a42e8cad414e6aecd761b3ed28ca962372e9a5265eaceb5744c380bfd5c4b482969aec10e05374c3c5117a3927b520a5784733286477d5c68b724c168683d32245174fcc0d03d0e7fee0d5e94e5c98835df7fb8f20154cb45a8bdb16af2f2167081a041917bde3cbfd563357fd2f624fac625ae51203a4932a76ba2a904513c38819c592910041d238f83f1fc4ac126cec2d0da4dad1920573d965bcda542eba2dace0c319696fad4a3d35ab25612d5d85ae5068caed896ddf1a6a57fdead6cd613a02151167c1bf999bd374afdd17a4116cdf8b62e5ff4ec4c034867b67a08fdb4796230979ec8bbfaa7526b48e65d307ef07974329682abd5160c2c3592043f45c0957721e449424dfb71be3d39c6ce1bb6506ec46587431445b97663dbabc34fdf83cdbc36e5b51a205deae7b3fd437488474bebb44ddc91f916ef493e44b25a3df4db717ce63cea7ede984b3a49b611cc24b3b06b1a9cd59bec3deea31633ec42b049479e9201437dbb7073b7f44f7becb050197237ae679103085af36a6f8f567ebe47843229b085be1966134438394eb3c731b1ec38cf4523f99614888ecae127e278160ddfb6fead3c2c348296d35cf5c3fd108063961d14b7a9f0b8b7254b745ee23d6d49df505180ce04f594d27c3dea87783d5643839deb9b6e421229fc2ada8ddf988fb2e3728e536ae757bd1854e4d6cf693a5ede883d75756dc85d5d14fd82e5d7dab720d80dc34d9e0a1c97035af2ff4d366f969b543eef83014ad4f970c8387252776d4aa6269763d3786110f4e4ee3173ff139fd9fec3cae476caa0db67beb11e79339101852f7eda57de4359b3865c1895bc5b73bdd98b9a6ba8d2e46861dc6745db75c5e7fd37484476663267ad184ebafb99cb84190d4ab1d45736d2083a5464cbbe9b55e9d645c4913f26094dab3df5371f895a6b9a1dceb8f777ad9b140e5d6d342ad6dba2f8619798de9f4d5e0cced9b65448b7783b4cba7a500101b2bcb8289f1b72bbe48aa2f03701349579e4cd4726d455e5f0cbb344a768d7245c87fe63c6153171e5230f04e438cd0d44ec7bea37b289dd4af689bd476836eb5a97b68872c11ce5eae9313b692b749d074d5f2ab196ec87cee3588d22f7273ef31368fe6bc63a003e078ffe8d81302d092e02705b2787cbc4bba71b00beb10571239d2d79ce94a828a3b2b317e30aa593b8ea22fe0e619273a5ffd1a964dc281af1db7d647e30c6efe620c4d0f808eded12a1aa62f382c224cae716e492b09037a2ad56f3801843dcf76397806935ed5f66af6e4f7cf3451f51e7527bf036230f619820f07c540537fe0396efdd968e31d99ad88d54bb01ac6387ee342575caec5426432119eaf648258627e4fd35b6aa95ec4ee321e2e013285050d8da756e14a3de274e00e4fd569276b42871194e13c22c3a1b8c71c99bc7c9e12fb63ff5d077483441d94901ab6d5aa484e04a3fb487e303fb3c6fa38d697b090062da4968f8edd3c14b22ec8ddfbb5fbdf2d16fd50d98114cdae4583135ec3115854e50244d546a95fe76a54510204d9e50b5c8be7cd3ccd50dd9cfcf54a6bf34c8a4f44c9f0663869b4d141a2711d6eea2fe31b7fb1d9c607e54f0afed311d26d3e31b271589245ccab021564c1662748fb49107b2fce9b3d460a3192913b1b24d13affed86717df32a5b43fa9b859f9c0e0d2f7cafa1b98b802d05430d6e5a2df3d97190f27a2d67c37b51f637e2345dd8adbcf6b9f9ad4d2445fa9290120bd3068bbc0e3522f0b4f6b0c3ca5f128208db894d7bc72ce32c92d38603c1dc9cae99c033b7c6f2544544ba1df9597d0527874e556e6fb207946c544c193b14a92b1e157d10106ec4a33de5c4f5bfb84a247c5b69610c2f670f015691353450add31409fcc9aa0ece5932c26d620a2aadaa2b4efdd6350b9e1702490a0a762717210c0c37271c48cdc1c3ee5ba0c16acc030477874072cd2926dfba2aeb58fe71bf76aab0cabfa37f9771b834446def01d9a8839a323dea74b90a08586a554d49e8e4440e173ca52024ccbe6bcf782e0b8877f1bb1e0efa2d6811d2370a039a0c47c59683befbd46c04257f86a468ae25ba03304e865e62afae77a62b3cec7b3556aae0c60475a7bfb02c69f955c7f60cc8dacdd8edb4ba67e6abd2c9956857619ff4d1599a429597b3420c58760e9c1d4f5f28fec69a7802bb3f0686860fb4fd8e43d692e2eb349077f6e51867b4e6d3b810e014a38801fc96a1afe6916b2a759c086f2670c7fb1698bb72bdbd538ccc9d8071af06f61eb203744d5e49e31e7653c31968c6716fa6701033bce952e4646a2e5c42537cf4cf7c075d721200075c400443fe466fe8dca895a69a6e4b9437989b0e632b854aa17b0b5eb67c5a8bb3eb3cad4b832c1d059cac59dade9602b2b3371675f19776d49ad0cf900b4b01f9afdc83d50f2e62dde6d4bbf29cdab6624483031f483c1fd535f83ea3216a00ba2884862f4cff60b1f19f5b763b7225c2c71f32b391db8c3fd7021a4461301e61cf9512becf178d2e677ca6da3d04e750b56c43d7610e6251185ef1084d25a18d1fbec807f7ff4e9f92fd2c9313fb61a889eaa4ff283d38c5549f316337c330989342049f7a1f3ba20e815b4542de2b16df1ae49f69f05619361379f9c3814210c4cf56e9a81fcac254a9c1455c25ba480f9d613ca8b060a9178c391082f86c821ec73d7b1449727cfff6ed37c25a8598a5b2c96b6705ef118349dd6bd89106692bca36c83154c93e5ac93d7117f513a52c2b8b80276937cef3dcf54046d3b6325638c165a1aa45930fc140a5cf7dfada2d48162f5c42f15e03c61f524038e27a38a36bb7c7b26df7894f852a5b6d91c40398f7dd883ba23b1d9599f6774911ad3d8aa4432615b8e841f479933e4c7eef59aeaeff3daba0e2bbbc13c13e8cca47ff6ef9ac4f4c9ce1e4309c64fa8318b899f9ba28ef2b93d168ba0b37186c82e6d8b0da37a5bfa080ca847c1412aa05bc4efa97cf1f33e1a3af0ffecc9770c1e66400d499cbf76a217f7097251939cc66e331c676404d20c5e93e5cf63e320de32bdf6737147c30607d855c1c70bab344e12fc4a2e4dfc7b4c1b5a4486f18dd499a9d009421c6b9aa4f23596eab9570d2d35520c98f744cfca3167337bc9da6a63aca4f25765f6c8b6eeb0d903c627b9d3432597ea2a3271a17d12848b948f07576f7918f84beaf70473ce725a59a3a008e57ed26c0d4fc799a6651ffb7a35123f9a57626df6d18e572a9849379b542a94c364a565c9223a795568ec16a253f5e1d546b8fd8d32f777bb1546e2b4c1c03e84dff81f8533330b3122d42335711705c64f02f23896992ccd4e52a2cb73c8cfd1f7b3e06a0b1815e39bbd695a17e075187928922184dc3e084953c108f0ac1051b5bff1a031526012db91313aceb8f871cd13266d8428741610338594c2d2c6ad20029a4e2d4ab467eb36c3fc1d07557a51a9f5471ee5979cabd8379770a4bc8c4165229d8867d88ad29667ca8d3555da0fd349d5db7b6f45202c1e388388b9971ed0d3b4c9109622989765c9a5aac0390f7a683f4253c4b6791584a082e88476c12cf3bc78afb4d746230423edcf5e4158849baedcd35e9abe7daff7f52be6d0325fcbdc1eabfb53e2218e00ed0af698f1db2a4a2f640597f54be86465b9a74d7753a33d426c333b777849872ec452e6e5655d3ac56f80552867770f59fa8f969aeec3066c5a243a0a127ee1376638d4390c7ca7265a987d5eb8a42159566553a31a726024dd95f6a5d6743590567109f7b6ceb8d88e15b7a028b7c2ed35f32b98bef973f35d50174fac75acc2fec52e274d9c966574bfaaf59ef7199effffc783c2a06660421b46117cc76e54c5fbebcfb82e6855735dff6503ae4ff31c52cf6b0daf61f4f4bf2bf22eb3a2ce12dde7f9dfcc572ef2b95ef83d228b75f4b4ea59896e8e35db046dfaab8171b94f31cbacaabe8b7a5b996db7359bf6aaefedc0541d2513ad5fb1b431d979029be3c03ef1014b2bc015c6d7a9d363b81c76c4fa64b11b18e4e990aaa0a1e37eff3652e9cfccbd5f89880842d600c1f853ef0240912e99c661df67f54eeb060c6ab0af744ef35a515c1c265747a2fcded6c46f39e47ae744acabff3d43a02bd566b99e86765e6b26c139eabd03a25d942d5bd38e647e4dbb4db3202b88a69a007ab9e8c750f6370940471a1c12e92c3fe01ef6e71a221353cc61916624e79bb62f1855e1e3a1082062ae7f1e7d5eb10a7773a0ea0c4f8033b21c1c971f4a761f0b3ead7937482493aed6e1694be8331b7bc4984244ebdd84874b876682b672629893b83a55d4d48bad2808a58471fc9a7478a795cadf726dd1589b7a5415d8a85e803ec9442b6030e50abb7b31e052b0e8f7958ca41487171aaa207c9d4ef018e46b06d10c3710a9e0e5c492591d7e8561a92acedc7164aae9a9de13654902dbb2bdd9f8b6de2c1f2622e994040fc74066f62d047add514dc7bd9de8b5ee561850df7fe6490afbb93d27f3263aa07709804668d5844295283b4e24a3942534f84737c044cda2c6a0af5ea9f204b7d50a3501a1ea04877964cdc43ceb0bd6e3a31d2f64ba4b8ed5fb042dd5a0693c2868108fa1ea019445290587ad6821e9ac405d2e32efc9b670f3c2fe3dd87218b94e9658307e8451419e6cff3fc3de46d7f78c9bf38c5202dfb07338aa412631d0e251c5154e94a6b4ec8995b9a44ad5acf234e06f38eb5a69599e43e5838d70b44cc83c1a01397be83ae4afe5b26e7f7256dc646e9c9ea65816cc87b347afbdafb58326053f7bb823b106b78996512a734e0d8fb86072cef211846cdf35950107450bec9fb26345ae7976136ef8fbbff5ff4ec9142b70ba806f4e5a2ff446220523e7f4b000f80ad1b9bc2d5c7e75274194277a4ca59e52495bb2b96d2dca0af1789fa800d143efd39a616b1bd3c6489f33200a2677067f97fb39f15f872a9f136bbc6f56ce4addfe43ec37729df60c5605c2e26b49b027b0776a6aceab6dcbb225c5b07c9e17ba98dce5f82a850e5ab0319468e3c2a233ddf8ce8c81409b7518cd42d538eab270ea8fd5150b321519f3df1f05558be68c66a6ebc042efbd858b8cbb45535a21e53c8243f8dd4d13336839e9218a4c841893a84c6cd760d9e2548ab96895956e03d6ddb708687d118f57647c254bac82c1ac2776fa093afa76bbeec3a6c544a1b0ffc9b9ad746b1515088b60775e53ea6ef84af3d0a025252807e16267ad0ec0d6006ed24fc8be2aadc2d41b818beac407c03a495864cb64e0828a1d13139cd55c21f389562d1f553fcf6737aa9c1916734c1e03f81dd1be8672127c12c095e72aaa80672b6b36a0b3756d3c595787ea9ce41fa61a92e23c0320a007cc7ca2ff28e33ff3344aaa12f1fd0eb0f886dd4769d065bc258ca4e43dd45d47aa0e6b243e1456b5da9224b3e2af711deeefc236c25717cd81d3bfc01dd670c31240975e5484ed35850a4b8c6cd2bf0aa35bdfbd8fc35d5f952fdcd88b6d02036dd8cfb5527c2dfc9e7bc8a478b01f007f91dce7b85a60fccb68a33270e23b90249fba3220443d918bad4204ef8fba86ea5b60b92665482b8a45bbd8b27d42f19d5d01dca624467cb66862b2b7b8b8244c7f133dbf2b3d753b8fcdd23b8640ae42da4bbccd6470468574d0b8ba7340620dc69e7a6cf66660440e8026f1455c507add41d87b4be2766298331ede077ac995f8a978160ceb760e8a7ddebe02bf5eac308b3a9922c594b49d33ea0dbe8fe04cdddb40a3b6f53f01cb6b02890490604299d0ea10314028e34c79262edea72f9b3cddd9fd3cac428598f3983a94f8dfa3e1b8eec6c07cbb576badd929b0e93fe8df564b0ae6370703bbbdaab8fa1f6237d0ed50a517a1d477c2770ce67c7e979c8cef9fb4fcbe16e1fa703fed7e2c71662d1418947ed6fcad1b7dc64c8a8ec0200c50dce1c56bf8891eb460c068489498c2d84c7a3c43ba613c6a0f45214040db27200a7b8a643461ef331419ff9a543555def6419a1196f9eee4efb98abca134a408326993d152d3349263e08c4b38a5afd11dd0e06818def9936f8e0e2b6a954daf5a9328dbda46b77c55fd5782c9509857ca0f566fc978252196adf3b52465e8be8de191aa55223e97f359a8688d9fd71804e6434f302f3a336dfe8181560b3edcd03b15654bce928b44dac7250ef836bed33df12fd66cff74fa6902b888f117b22d89fe3442b47b015069fbe0d4c47bee3ffca63841953d8947d7bc81437e3be7abb39240c43bc0a120ef8ec1656c6f52510bab92fb14bc1d5c2ef8050d1a712452a11ab158cb2b12bb52c6f14b56da92105248648c4f44d63f58fe6b712d82112b3cddaf87cc82fd297cec980eec845685bac4d67ab09d5cfa3b16dcf41f37553d6a2561d7a68e09735347dd34953445b62969124f9d8e5895c1888020595699911438efd2c217dfa0c121e947b8b407ad887d3d9280e17216d19b7e7c41a7842d235f820086e526b8adc0e4cfbfca4572c04982ccc05c51875299ff9040f4bf1b7de242e85bbf87c4fe6df552113fa70bb7150784c5c89eef2ec82ae5bf03f1630c095612aa6eaacb9e70445a16dad4825729f442f7ec00574c712802249dc30bb61ce606d9bb36d57411fa6e366575df87cc728fbe9220c694db206fd88add1d65621c4d526bd4eb68983f17d9a631282e47a9f18280a544ee503bb54492e6a000241e6e7b492b13624c3adb6767b16736e2c0f2ab7f38da4216a15bcf7d879d6faa14f1be1ce4574a771445486e9ca386e5df1aa157818e787679e9e012671b9a3c275f82aba6bf085ff4dae4839be5069830f0ccd0276a78b8ebe8e11a2f2269227e3e2ebf1a52854c0324a47056349e43d8fc95b2d3762a2421df395e86bbc4a343192c20e718a78869aaeefc7498362d02c662c42cb97702405650a315ec93099b75e396b619575a4df42bee9e19b69fd4d79ccfdb3b459973d58eb483bfbe9ab0dcbbe92f5e7e09d78bc40f7bc006e176b6ac9b87047e32e0e55b58793c2d9faad51ce0f9ee02de31f61f27b4940f3b11ebf8f0d91d0815af0d1f569f6ac85fb1e96e45bdd1cd2180bda6fef09db7f5cdffea96798dcd8a09d642779c517824eb9e19de2210c51aef69c05bd8e4e756d179e9540e5cb3d916c72c8319f92334837f8574d1b2d410a381d407137088a746e15cf44092a449fd684542bd6bb2d89f111bce71bfe14dc78d4ccb4a4a803153c0ad3cb9388723e741f67b31ae0e5868de41b6ab40d31781158f6d2578b939219c43f51e5643b0fbdba5f81cca1dfc056d60f2273c94b7f9a205b54b04190ad80086e71af2c23562bdbc7f27c8c90c9e46e14b8cbb0b7559bb166d65f58aeb9f71ded95316ebfd436fa1d9faaff9cf5df22a8983c52098c6e92a5b1a54f3239e79b39471c9a64fc77abece3c87958e68f8a574b363bb6a6ab3a94913283bfbfe9f6de11d14db721565792595588491e7e0b9d3c59cc4316da1fbfdf8794cbbe76b7486fffd72af57b83ca8af2bb0200333cd7060792336f73b883f70500dab8066314bbe8f544eb2fc6e1d2f070083e3774b112d00c1c12e0ab9d923b46612f2170afa02cf679750b8764dc0f55c01b1379a7fd33b84193d95f491baad3f3a6407685975c794d15974be0008fcace492f82282fb3255884a64a231dd438069ffbcb432bd7ec446f5b8adfdaf24d872b0444be14dec1d547e002c7f337f12e8ebc0544b82fcdd3c4a0dab0e5e75c9f433a27d667071c2c600f0f8446568dbff4f9bb26c6d4ac8fc83fa20f9bdf865b1439b20d70dc92e26f9bc70471a06c4f553d3345f256f6ecec608748773b495f306b69cfdcbfd47bc90edfb52fb62b51421f244eb5373b6f93bbd108029b14200a77b59a05313f7cfee0a002bb08397a2de8049d79f5f87c70ca45aac86f852224c72c0884c1624a93a9be99be07250e8b503abecb03acb7e5e42bbd33390af9e1e24377c5f0bb8909d291d6a3335ca2ecc05d1f22f0c69675c219cbcd7813fbf4418274634fc9acd3f3b046053d6ebbc4b0d25b1c3dd49ca2bc863301bd4eccce6d6f9ac72f0b2a847590645e55c9dd95ba40ef015b653eff6bf7af7a7909c0c2ee71377c2f0e868dd0b8be094d0c7ce2450f479cd9e6f1de38f47d922bd39c842d2df6fcb0324572bdafbfa053951e4cd9c3f12929e859e1abf349e3464aa494a1fc35b36314ebb564dbe5be39f22607e0d58840cbd7db8c4d7a70d868cd7d46f572904aa824edd89ed3ccbd40b248d612da596e4033fb4095f0aefc03da8b4d8017833d0ff0c05ea40de1280833eb29b838f12c278b3da10e0c40c8a7f052fafa518ae50af717ba1d00af79112581657977fbe4d25c27102e23d2c8a5bd68f19cb713dd19b6386d7252944acbd5b02bbf2db642e1152c306ebdd176bd8031a40fcebaafbc9cb6fb4c5a4bf7b8e2dbeef1b0cca0d444c1645850c94d3ff74194cbfeebc7743927f5f3ae131a68cb7921c9a7bb990c799b3e737326d6bd712d3659de23aed119efb010c4a61d5bfe1c66af88ff862a11fe21389b768da68c392b11d2fed0439d92ec1c14619af3094a100bcaf5129dac8eaf104034ec8ba709c5bc73d9d65c52a5fc8e33c1fdce6b66c076e458a8e7b7b15aa2f7ee6dfd6023b89237411b8bc78d53dfa963c05e93070a697b86c388b20a9669391fac4c35fb464ba3d13a427add9498cbb38d242ebf206be70bfd0129eef4cb6a250228971521313fe69d10db0b3142313dbeaf8ce3d4e6bd54bfd19df2f85221bb29f311e5cbeb620dce87669abc54606edf613c098a7264fd768a6cab1385f62e6e3c150198f2c0c34916bc009857efc359d9cab4a3978462db8c447bc8ef3e1b49744eed2acfc293973f29d147b515d7c889a769c2be8221396783e99af68fee663bfe0d03daedeb33716e815d049918a5e1509d6a6ff4b52aacc9791c2462342ee3c0e586bcb956984dc8954abee0027c8164c40d14329b29bc73aeaf013b792e1c260b55ddab524034e681935c7131b6ea32721d53e24fa127110ec6059229ce35abe2d3d63a6ac5c736eac955c302df7c782c3d978a5f4b6d3ffe13b9fcb299d0b100a30eecfc936538154f435c1270c87456c0678126630f4f00fa86e1c00b7dd3e9260049a4339f78a5b7adb2ccf54ed586584c6d51927ddccbfd04d7cebd8d8300ef52c6ee10e6672074ed5dbee7800a3f67aea54d54494793adac453b0a805cec517efb36c5da81fa199ab344b1fc80e66106cf9612f23e1c5ef5b0a18d16b0101ecd4d2adcdc67b7082e6a1b0f24e82ff70d52b878f91eaab379b07ebf812af089f63316907c76dbe320d88e39899e507bfad510d0ce77e32d90bb3f1c803c1245624396bb3b3dcd1d1a853adbab121c7287ad5bc4f2c84a4fe3476f1e645209a39a0527a7893b2f3863f69d6009f1c87d1c61e5c0068e447cd9cb9b5fde0b2b5725ee55dfe6ed669795b3226116ac08fe21894b5c7a486646fcde203b3dd61bc26e658ddee4c307ed3831665961af32684f99f8e4ae752420b4f5ba4b04314f680c115c2f035a879bc407d5a36b89f95def0a7b13439302bcaa88a609d1ab3aca57682d4ab3226a15b19cfce9a4bab251a8514e42ba20865d462d9fe226b2527c08d09dac84a9240d99674896adbff1b5d404ef0d72bc2395004af48e63d54acf78f119eee86d49c5d3fd5534d7183c2d2aabd9de2db46ef6617730492982786720301e6c6ecd4fd109d58f4eb131f619e4acab2f1bb7ccf40228ffbcd8486fb5a71437bf8877bad1a376633edccbb3feca8dbf9afd14c2103ad6af5400a5955d7613e252b5caff3a29568d9fba13fa5e24d5a38c1279f2cda416cba933188da105c5aab07755916d040c4aebc9c93dba8c0ad38d2c55b39eb65fd116d02fcd32ee9ffd736d9625fcdbfe47ad9c49f2967893ec188b16a905ea185c376839b875891956f5d90b016c19a2e05f9214cd74731739b8bf5b2795c7d6c9957be4e40b7db843c27a32d83d45a0c17c5bc802c6f3fb68d84991d3c0d821a58b8bbfe44734f35063919bfed2c86e577e59c2471083b6e601ba392209837f8cb408191ddb3750e953efa509ef4a620ee00c921ef39ae02dcf71df86e25246cb99818f1509fd678b0dc4ec7dc52432744be4c5deb2b1fdcc9c10e396fded2dfe9688804e861f9dc21bb1e0cf06ee46141c92cc2b0051663ef207f3c68e9c8ba2457d9b4ec1e66a0ae84710722711136acc6713785f01bff16bd77e9a46e8e63320d14e7a301a62e20df50a0b983520e4f6024a3b114b718053ffe286a96ad44db334187562f40ec3e73c2bfffcb3051f03d4cf07d987116854f1ce10188acc3e771667b4ed3bc44d2e9cf4c3a7232675805f10531a5d2625e95dafcb26d134a1d6e8dabd013a39da2e87f2fb39fe1b94f611bca1562616258b83f61c56d6b4046d3bdff27177c5e7819db50b27bc3ad9df9d32770f8a67f3a6154f982af3b0d2a47ff5f9a08cff11a24ea977e2e62ac097420048c8e2921ce3720aa305c0b1891735ab3700e25bd50b0b5ed61df461f5c7a0b49af4d73b1dae3ab5d199b64cb43fed6e3f250042ae4654238a1b7f56c5eb59bde225d0b95270cfdfb8395cc8d07917bd768f7f7a09ced9b6287ddf9fdd7cad8ab2de579377d5b1f6ab772cdc7a7d452781a2a838742edc8515b79da388f64ca99170d46fea4781894fd59efdfe96e62ac4f1232479c10cfef65b51e874e297a8e2afff951630af05f9c72b93e9608b35c50d78b4873fbba22ecb74f51dbc1ef73ace01a9a83b9afb5dee6b34c76494e7166a016f38e5991d43aa7f4fdffd53131e6db3140cd2f5e7d09dd657150da3ad1d7955caeb7d05aec95ae96f5820d49ae2015c7ab0611059f667e5816ed627f66ebe0e4e2b4081f5246f4bca02c103ed4a2b96342f90aaa023df213a1168a2616eca636f84eabe7ee95a0ee66c487188ab3ed8e6f6dc05790d6611e7c91fa36cb2012db564d5ebba8c9dab5af1419e0b79cd9cf9a29db133078f2020d2659b76cd1495a6679cba2682ccc97e3e26f9d45a6a7ae29f604e7ca6dcd46be9f50b2e145763b8f9a9aa416049b1e6af730571b167cb3859ce3d947fb1b72f6c3862d12c4bf07387773c99a9a72d2ad1b05162137836716e31ff48d6b040f1c59a433e7984c45cbd9fc1adc36773a121596e33f50e1514493603d8505afa49a2a51c94808467daf88e09ec420d2de02af8ac55da8c1fa787350be171045b9d7fe36f91d5bd5384c4cc55d3b9fac46e6af8ac5638849e8184c957e2cd6edd63b9cfaca4eda20fc0aed546027fc2dfb24de3dea3938a1a58ee6d785aa9dd0842ece4645c3cd5054513234ae72807c8426044c3cc800f2b94009bfdc7bae154a185ac270647c8cc589e40d4f0270c26952e95ec3f62864aa987df48a8551e5b1610915551a2efdd91acb894cc117263312541c88acf71e02fc091f97b2cd684071a3e8fccb2ccb176caf4eac95bcd169cd0f2d92d3b64948d677e80ce86cc57fb1f0e26b60bf1d07e758047768a6ea93eae03be951ae0c058d8df6f0117425f687b8acacc22d1b32f48e54b6211e9a39d390eb96102490c08914f24b142eaf2e5cc2edc7d7beef1ff918e670a86c09e4efe7e7a0f663fc0132d38325d9e28cae99d74ec289bcbe5660bf61ade5d85e1ba6acd70fedb27951f094528748d8e3fea4bf77a7bf6db3608f4b6d75c0aac26760a962ecdc582f362b1d07784957dda7e7420f7e611bf3c4f084b3d121295c4f85a4313eaa9e453a4b374901c4a8a230c827bf4d560ca90ae931dbc8f09e555b7d66ec0d41cce4e5b8aac029a1145921b1382e1e8888fbbbe41c8d631551d413b1b73a61882a33beda3e15f8c8e12b03093b04f8ded9115e480b70a9788a0200875ec34367ff5b4d1abbf07621573f5c38f9ebe44046147b7dc72ca2019106a9682530bac695831adee8f8ac95c0beb7a63a89e896162c9beb186a5699ad0996bdd229cf8d32d4ae8f8ed6a10a62cf99bbc6860fc8928045fac5d2ce26283350ec2e5589a41f76909675325d69879b8cdf648b5ebf02390112980b119148ab5e5f015df0f4a490485965b2e99b7549177ade40df61ae7e579b57be27c3569a487c13e80c63084a5f4226014c877402c3f4fa4c9997dd78d0fdcb9219a3992797ad2b9fe6da95cd5cb87fc58e14ceee16b58158944ad84ff3a0bc30ee185b7bd259132a85429141c7223aa7b82cc9349a253a0bd960e82a48ecf23fae0ce2bd81e79130f18145ce29ea1d4ed1b6affdd7acef0e6fc35331584a3468616678162dc16e593381f99a0877f163e199c67054b366085e59618eaa204b53100e63ae5d4e714f5228f5d0ef317d8df1bf57b699a068a2af0c5c66c7d700a7c3ebebac99f664b75660809663808b75070fa9f62eddbd8469c28ae435d8190c80e75a3969210d3c4810e314eecce1c22e7106599cd02d559465352d7e8a5e2c51e9f67c563736842f206774177d481d6bcdb4076ae380bd39dca36c295499ac3dda099ee7a0a537137751db66fb882ec80bfc27207d7d665e0f1cc7bfa090374ca0d9c6a5c523fefcffec7364af699c4c1426e14605eef50ee6ea66c7d50c738724af1d160c7781f39f7f6498ffb310ffce7a5f65e599154e495472c95ad508f54ed2cbc4de6b67ff3f51d68b542d31ea2240c60484466c2820a1134e99b39f9f078cf737a4c55829c7abf0c317a1a814f8bf41ac4abfa2a3531a70ddf96ee08b3523c9f5c44efe7820d5dacaaed51c863940f5e49fcb60c7ca07b2fee2cd72c3c1e06a88a8cefef43017bd2883913646cb0b0d34eb314e9d6eb00039bc9afe4f940b0278b60d03a5e0b9c163fc9f9e5e9868af2496ba132c255c8317f09b2b3595ecb84b58d2b39419020d0583c6fbd5879f043d082e577dd854631fe499a27fabcab58bf5e6b6c8c13cca967fcdf5b47ff73306aa55c49670e1c7da015b0a35c0ef21bff412b549c1ad1f9c587d35026ab96408e2f60081d349d7ceafab0c5dbba12370bf1c5820029d35a1759e63c72f2ec1c919dbb346ebd4bd85574f50018329e325bdcc46546b56332c40f8270cb69b6fd3b8ca86eb9ecc9e875f107d2802cf8a6656ec28ede31f42c6205227d8e74b99ae258c207ad677a55a31b63bdb1fda40bcf242a5f4543f8af57d750e33aa8565e0cae92bfa7a1ff78833093421c2942cadf9986670a5ff3244c02a8225e790fbf30ea84c74720abf99cfd10d02d34377c3d3b41269bea763384f372bb786b5846f58932defa68023136cd571863b304886e95e52e7877f445b9364b3f06f3c28da12707673fecb4b8071de06b6e0a3c87da160cef3e8cefe34f47bbfd98a6d0ebea308cf096232606748b47499abe31f3064812d94c9deb84bdb42fa78c08f5fa27323deb7bafc8a51581f6437843a74279b8818d312f59b29ae8309d7f7ec420fea894e87ee72f0c509e77e9954eeefebac3e36b6ab5ccf55d60497fe18cae08c7001c581e6dcbb4bc3d369c60148ba03016b30487c5b7b57bc8e4af30c7261a16d54ebac8a82126beeaccec67590faf700d7ad8e6d39c7b8c7e8cac0b92cecd6494a6a10c3ab1eaef23a54a2960eda50134956926740dcff5edcc06d0940a9b46cabe7b577a0079b3845a4614e0a8095a18ad35b50b6e2b4eb30d400e3f5c1c23e3f0da48faaf4bb2695650b84cb144e1263cbf112e40060d5adad832e945c8828ce81e4f40f0d9425f140a9209abf03cd99e65d93125f8a841bf4fdd465a18f901fee7d8c177cb09e23dd4209bfa83d3cf7cda6bd8827ba60425077bcb0b95edffbfa78410c6697f7f1e3de2982f983c64428d4768d7f78d1e96af8cebdcc7e7e2a4ddcfa34f6cf9a24fb85672ad75ed3479ef0a86a8f4d3fdae988f2d30175d37490b19fd951e2ed84cc40ab016c55cbc9d8003a6880c012db762f103c80cd48a16bff1741a2585ad8ff16dd4de0f017927e0f14cd7a5ab2b5b9f6103e720d447885cf4cb40fb747ea3b10e6575bb71d6a37221ee1a4a1873059e4da22ffbe2fc28728257cc0891e802935ac6704334619ab4340ee271ffa13ff0257304e67704718138ae0de554663708d18c503ebfa668379623a2b5c712852576daf889071cfe197632791a4275bb92012b88167a21b67cd6c0ed7df5535fbeb05e9d4c299228abc989a00fd292facf78389a630a4fefe4546b253300f03a1c608245b835007ba8a128154e8b4a9f019518199cd6ad8f1ecd86ec8d7055aedf15ca9445efe48190ab724b4ed308f2e8e66e683c65a70e7c70b8a5e5ca1018773ebc0b8d80bab504370ca499505aa0d5fa8008ba4de9089e0c54d3c484ac216549bb0df7be0f9073d26bc3b679bc236930119daee5dfe7f3eef018b236763429c56c3e0cee3f9e501bf43b1ec5b9f50325877972c3f8370e972ec727362adb554033fe4597d75939625a5d3aaab0804459463ebe7ebe705ea34561ac2a26814848a6d12a51633b9043e2aca2bf4c6fad29f25fea5cbf2e5481f89aa978f5c0a32d395933917fdfe54f41cbef79fa2d9e46005f7f1466cb80b1acc4b7b91503d68c5ff8e9de6990a8d2dc1d69412614a80bf4bfe50c41c283c0c6625f5100e552d4af22c5aedcf86b7d3633b8cb7cef4b0a43e3d4cadcbdbe1dfa05f8d745cfb8a49b895f793691adbcd481567f5b0807bf727d96c6a4179057ac222cb2503d785ab97f0fc3f2d6d0003b88bab33ce95eaa04efd386146abadc51495388ccb902956d865f25be5282e5dfdc5e2dbf1dc0388fbcf39fba219e3a8dde15b0f7bce7b33c21e604e57f26dc35eec9354e1fcd0957677f6a01c6aae0b672dbc17dd3b852a9f40ce804c74c61d22284706669e59b0061ef8b97e4617d6f8a2e40db77d4e24b5f6c4598b56405392a08559486aa5c2f5ecc5ac8e +MD = c51b6cbae292fa009679f7a0fde52d8eee0f40b6a2f333989a493097ead9ef6e9d95bd20dd54caec38002f428b828526ed5a92863b15524a134f6ed85219236b + +Len = 100816 +Msg = 095fae3bd3408b6360cb9972cef30a9e0943535c427c3b269d80327c2a6ee529170f0fc72471928556d1c628f0be11509f7cb8fdf5a7f45118184998bc0d13854e8362be72e7079cb0eeef2b6ac2b079125e620d9a3bb0b52b2c2e851986ee1c17854e29a7eb132ed5eabc84254410a0cab1fa94188196d83c828c4b2b249d75d8db7b0faac5dec52d8dd43a088f584d2f3d279b59c1cf44b5e409f3d82e4818fa4e927863bd8fe8209fe055faeab108a9c9922844438281fc184d830aeb198ee6a63b6dba1b4f2016e787dee59c435aa01fe246c14ed8157be60106a8a4365e03ab1df4972645f3772e72dcb0ee35ca7c05c0fab82bf98a9818cd819aa2c710b825e118e2279aebab3c48574328b0e1a544d44e11230c68bd7458fec82af52d6fdb2ede836675901ad9b2588692db2583a4c549b47c3a3551c44b841a87e73c8f96ad50622bff692dcd58e56173df207eec3cf38a7eaa7bbcce4d1c78ffc7c5801e067568be5ffe4adfe109bc15e35affe6e055797385c1655b07cdcadcba50a93be0557b66bed7dbd9f6c97fbe105a6c585a766aa1f290b632219ff864ea6674b5e3f9846d447d46813e2f92b78ea82f0b515f46511a6f161d429aeae07f8e4853b8686c191877f5a06242dd4884ccaec76e16f3cc24e6ede212c78897a1518dde07aa19b3634d4efd090a48b81a4e535359a55b57397da44a3b2dbbd37636ac1f77c875824c88bb62dc90bc517ab78579b913643d81bda11d62d469da29c50bdbb1c967d0fcafa29582db1f59c98fabff3669f8c4232d4d2332c57bf6e08613dd5db5d6e39b4a6d5fa4f35b19325c2fae79aefe36485610235007da6cc3022cec2295ac0550e18388eae156d9dba8784e2aea5ed917be53e767a26c87fcc0bfcfa870d07b43fd4cd8fbacfae1ecfaeea7f12600f6b9ef7c351d9f1b8eb048324f984e2a909d253017805c2d788edbf9807469ccd45571f5d61a05cec80a23ef349a37a28b86e2970c20fad9e7e8d201a35ebbaabd14ca249207dc6d7e2fd85c46553420b325bbe980848de57724676ed6552482f71e8473308c2ddff94aefe34c724c8c52a3388e3b541d396d6722a8e201ad3ccb9a26497a50ff0e7e81f1eb109888ceae27e1ef0537b3bd14dc8c178f0c5dc081b0390d36fc5ae158fc65db5870eece0fda3f72a6d55559b3a82c24a41b3df6618a44292d374640cde4d31deda28975bfe4d980e5d70ef591f68a35ebd953c6b34dcf0427aacc132761c31897d55ea9056c37828be5e379f7ec2fb42aeba919be246306ecfdf342ac9abe341db17753289ae2de60a6decd2db2a2072afc47d5cb35879743d7c4b6a5b84bd949e0db5c719761fe2cc306d97b716b98b3b233e422a8c31ff5e0455559e2f36fe10792aa288b3c48b7e36386295113cd8db5772c0ba69f06cbc1800812413d5eaed1a527959efc26c9affeba7e7921107fae1b97ce57a4b48a227db816fdb10f78e31bb9fff628ff29cfde5ec3121dc85245250cb2e25992fdaa434baf3dd7e807e8fc4ab0be483aa0ea0b5b4143905cce219f72006f4606eb02daab22293852228650c1ee1ce541f6a88e973d350136bbeb90b30128f4791bd24abebaeb5bb6936520060238867bf3b36efc020ff8bde14a01b6fa33ea5456c19b6ebea8c87a202e7301343bb3505eb0b371d7fafd5908e7f96336b8b0fd6477d6a1758b08089289529acb4df428014a66dd031e9972f76980a2fce0cfde0d9d034128b9a2c6b01dc4b91195d26ba2278e2acfa2537077799e5b93d2ce5d19db2835205d1e1e4493d1464c3cd4810aef333f83afb4bc50bf5c7644b735e44fd84f65a29d057714928129c56983d3014b5d04676c43bc4ae2c1db57b78dda783d7fb9f9a1de38eac3dd4ac44565c74fe31561c20288d92c8bd67314f95da75cb1c1196c9231cb8cceec9190f804c6bb5e623ede980b7bc061a224c2a62db2c3dd1c6d42988797c25ab7e773a9e8390e644d830157550bcc0d2dd7abe586657568989dc4da6604560f4432b3819786109fdd187467edef19367f7515dfee2739fb3d913a81597a0e979d5c99a79b1789b41ae57fef5b916f85a1e449bcef61d93e1432ecb4e561b497ca4b6d437c52414e0cd36917285896a29a0e8fa311791bd82466219c94210ebad1e9777fc0a10013bcc87c09dbab553472d92ebcdbd8c87275162261ed22e5a5bc1cfe81f16b8dab31adfeeafcf475e3312f7030d5e6a8b3102b382a78cd000393ce4c719617b1bf736b38e5139abf59e0f79b27870b8244fc8ba91fbe88297a5ce6a778380f34f78be8721fa905f83b8719f8c87ab01fcc4120bd6a46bc26b2214c58be5ebadefa800ef4c3459ceb342c7ccf3c353b48f4e8d0be3098d2c055e9e8a76a908076715ac405f770c95fead90a68ab4016c364f885f29c3d30bf08bda2dba457c9c60322f1eee3b1f41b0595aa0a3c24a758c37926a3d3bc40eb75a4623e9639fd9459df7ff8b19083e82e6944ff176858d1ba749b17009d690c44a6101665c084a91a9955688695df8e0d5bc18d659490f5f0efcc96496912e91dcb94ac3c74c7cdef585b898d4970d5497607fd4e31b68b0ef5a16ad6a7a54ba61cd64841dc2cc7802579a2eb339e858abfff97f9c6345cbb8b02dad0df89fa8aa0be329c801c61740797facbdcd2657a4091a28fdb7130a0bbd72d5f9a26be6f5f35b176e8006174079dda53ca723ebf00a66837f8d5ce648c08acaa5ee45ffe62210ef79d3e90272c738aab87e8d80107242f1aa6c800b0077d9fdab62ba4deb06c92462640b6367e0252fc9b9afbe95ef5405f6cb28c2c321e4e16276356b751fc828c0b6c9b4805307a6e8cf26f1e0cffe32fd3fb3b7f17d400873bf43d334ebb29f0d52c0606cae64928e456fb49192c5fb2620bd552be85fe55794621f8ae8fce9b0be7c117d40d08532a3069128e62fe0fa14b224c2d1a91a769c1caae7962b8b4350492252b8b0016e7e77f20728b066f1821ea166e7cffa594ce00feb81b3064dbed42d5d84a769aa2e3061ccd8ec0f950f6f4578991907981d38a9072a27ed3860999d1e230b506e38cc5ada75374d6d03309b884438e48b83a310bafdfea28bdc05ec151270483334a867c09c26a2d203ef1e169793f3dc269bd1777babc8c097a5b4c2e16aa3918850f31fac3e927c9817479401bed7d26caf65dd31b3b26f19f561b80e4f04f1ca52973833e3aec526259290f10de336cc3a385caeab01ffd9718d64f7b1eeec7129ceaab1ba6a3434b6a98e0425a851dbe8e37650f639eb5cb6924a3c27c3da034303f7a42737525a36d6eba98ab9bc0227d1aab729ccca2a110ad85a151652f74ad1af89be9897ed22b55a6fa189edd5739d6a4fba3d04b82d71afc00e78dfc38da222e0f5208d9406cf3aa50e8b6fdc58a145893bfd338d7841311c784de90e980002384f419bb55f8f0d182640aa7d4377cd0203afdf206e03fcbde718072f0675cdfe319e5ae7996f52079d4c363ec0ab5138b5a750079b347322ef69a2ab357dc6b150793391410aaa11b8008b975c96829bd6864ea96c5d24e9d5a54419c182bce01064ce58e2cb65b51af0232d73d3c1b9dabf139c7dd892814e7d73e1271ef108e6038384fb3c25604aad9557a2edaf0126d457473c514c77ce34ba97c2cd13aa65b7ebcbf6c759b1abab4aac664e9b006f4872301431a33bb97d80b440f7853304147f9462178317d25bbba24a61263608ae0cfdb204375bb4ba4ead1e38d631358ba764d9872201333180cfabdfd12087578ff682339946247dad18b6fb77339e900bb3a9a0c71c62ef029b17251c5e5fd763b1016a1989ad2a045da7d9f89893b405077efee2b7c5c6e97b28bb682e16c030b3bbf268a4a351ed026d3ecb0eb98a3be6a5fbf561f07b7e064d0d653e30846f851e86e715ab97ef9d73a47ed4746518c7db227fb9675f68b2e0b563fd41b6889ba572155b1a3e548557a584a858e714217afd020c9ee51217a02e14e9aeb9047dfd5e83e393e7d46095bc6ce8eb82b689f205fd0a0bcf029af7e1d891ec1e7b826296b35d9d16e7a59a53a81480ca9877fcb7f100326fc2b3447b2f748e49566f81d514179a3e06dae1f5b6c9cd210261e78d6eada739db0732549a1019ec1d9be77426b01fdfaa57193d29672518bcee4f10c650decfa3fd3e08a8d2f359397de00e8ba5a27e4ac08c74608b3d23f0639fdca8984d93c60bc3f1cc5bbf2342ac280e8366a69c70add8360c8459d57568563b85f28828a9b960ca8518e1dcc1ad0bfede71a0bcb455691c8e012faf94630ec7deedf2e0d79ca0dd5378ffe82ed72849dd6535417e7ddb8255701314e5fa260c13f9226ed81be0b4c81a5dc7f2d0f98a00afb8ed478d9bf1f36f9897d2844872e582ab3513cdbcdb437ba01eb610ec49f8bfbff297eb26f5f84e44bae2a7c286a438d1b6130891db65fb5b3ed12d9ce42623cef3f83cf908d49a9c00bebb30d1d08a5a647e731c1fa037d3badc7d77e3096a5a83d0e9aea518e302db9f552fcf0ad589e28e93982272afce15408709e122f1d714ca87a44515a61dde3d0bfbe8a3c90492fbc0b28e5dd19ec0a5e0cf48f368e9194d7d76738b52417af02641b95bc34f181ea0d7bde23bca6f64f134a50b2df513c261a1caca761224515a8dab6362cdc49fba943b704cd554165ed66fcabf8f96d1aa92955390047ce91f2c597b16052ad7546471b883542122803103c29c1d14e3ded56dd72e9ce72fcaca2e035b89dd5e24b50b0b8dab5921fbb12b835222008164e6de95b04ff58e03d3a39cb1c04eac922261e9ba5f5e9d27e3317d60330c22d353424fa3a21a9c40d55487974ce14b332910e397e4c3ec9b53a02154c47a50b08753359717e8c3184bbb849a8447a27e359289b4e00b98dc6f020f8e5aed93730f6c180925c2aae0a332f43a0ae45ad9d4513c8fb5a84a51b1d1a8ab6ad8539168074758604abc30786556e44549ccdc81e78c86fa2c4991a8997d0a78bd19a21daf44233be36f8e37cd4d27d7da810ccacfea49020a4f22dfb40d4a192e6e1b8ceeaef83d2f3d606dd5177317291fd12b74e63481c4a37bb3cbd9d8a08ec964522fe825d870be4d8717766497c7e1d00070f0d7edddef02c15b5334c360a422f9fd705a826a6aac200eba6aee197f6ff63eaab1aac89a5e74bd09fcd64696cde0d1e7f4ef7ebb12a51583f46e906127895874403d172df56a9b7e8f7da319cba347af936420380792d643afbdef0f9d1638de02394c325e0f61216b0df895a2bdb947a484f16a0185cb79eb40680317496a587613ca100edf98832e2bc992f99cc130a6c654b976da6fa7359abdb44c7f67642a51336f7e57bc24274ba8aa26ccda0b18acecaefe2d3d5c1d1132cba344aa918d75faa92314468514e1f843c0ca7e3788ad0bc2fdeaaef9106869919215ce512e0692559371c21645833ae83e122836654b449e0c9f4f1eadf4e4aebf8f2d337a679ced560cb95857a40310154052984d1c298890a7982d544b268b720d51a8f12d7cd8d14186dbb9c8c353ecb1a7cd9e741d2b20b014b591df91b0601cd63220cca4b09bccd510fa660e1c1af27256d7f7b1ee43354f47e526c8a5f03a156f97d9b70d2beb0e88780045d1269f5cb4882b6a5a5ea39244ccc53de4a8e1b9a1b4b93636f848adb2e12c0d2b95f4c1773d63b8e80987a83cc71f63e4f0a01d89060f84d687422d10945dc683efbf3b1f5655202faa5ddba052a9cd3f7df1cb761a2125546f8427322ff9f462aa4b440d61542299d7a2b71ffe08ec5c97534e095fb2ba49077b0698029539505c1556c1ed0552af07d2b4fc379153b4e3511fa34528961ce59355a2bac3e7c55bc9fdfd67dd12e7b17a7fd58df775d0c857aae478e75b5890599ef2c6ea824a4fc5a3e0604ff5cc7b06523c6f8fc548dce38a4d49937c847e5a4cf8a59dbb479e94e34b44d27dd5bb12f6816aeee4859791483e65a17c193601ea24d541e555deb4267ea3f91d8bf80cb744fe79360f6ecd3f482b95dc8f2dece127e46b82fd76a007fafc484767c8701f0798d35c5ee91409eb29e5007eec77dc52319f2696fce4e250cc34adf192d9b849d871a9fc9cf222a7df139a30e84f36347b4142cad7ff5010725293a1ed95fd7c2bd8a150d0d403fec9a60c7da7bf895efff669f1ae6bdbaabd06aaf14f51792f017cf4f44b5638605820d99db15540325e22feb3d696df8fdad546882e8895c2f7d3076f52e53a6d28f884198bace54f045b9379e71cf6507a4318af01a7ede88d7f4b2a9e0d8485baa18e89ad3303059104aacc667a9a7d09e4740e6f3bdc0020d642ae733ba14a7bc07b667c64041662b2b723cb1c4666081e0b0eddb10a9a607c807378fc0b1beab9bd289fdc72c217ea4b088b9e84bc03742028c3a3d417bae6870215cb4c8a8611d6588de8c9c92f2fc8e33e5dcfdf7a6b55f4c780d3189e88b8e2e025c006dc4d496ead35937c06d7d35c49f6a250db883efb4fd4821d89e7a89e5e9800216be0a8e3943f4a5b3d86dcdc34e586b0b53f2d94c31b6b871b97e88cf79ea76ab360574fc96268f731c157db9596f76f8614c469c7d1e9f5b1fddb3721b610232130f71bc33b79d091fbd6e2d2a77efdcc9d75d2d474a7e9ebadf335835ac51b53f6ead00846f767ccbadc8a728387dbf73dc4786f800fc4370ce30093194093ba16a4f50f016c3d4072cb2afbb7ac9aa47a22b2ff909c1502bf0d10c75e1d3cd214d8034df732b19ba8354ce4b047ba42d7332b1b12d76d0d28f3fe86b5b5672a75d6735b94f5754cefbd78b409f3ab60d9583938733c3c84df1a22879c93b321be42ddae772ee8d2ada636f0313aee7cf51485de5e54f42845e215109f529156528f9accfa499cab6681f01fa28803f5befa6983209c3455f20e4ed82a5c9246e72f432daad00155aef34c98ea558c699b7c7cbd568c6dac67e14834ca2c3661c0945f47054ca75feb5ca4f2754dd8572f1d37e38ca0108a1bfd99ccfb4bee45837167afa62a0f38a03071c2efbb883cce4f139c2f71bd7d82c5abf72a262a40b428c4ddea02995e62116b7096391c891d94a85dbb6bd4f530dc074a03658b01b73d1f486d30e65fb571da822540e5da71806e9ebd08f79faaa3244be36481072120df758c6f66bafed4578e096da49f8e94cee5a0e385cb64ad9b5356bd9caf66767dfbe408aaeeb2ab5aeaaf09b946a94441a913661006d36dd516d9db4e891b908321f087236985896d2ea2bfa47e76018f8f610b16e08b765a0ce9481712a52187be3e7550b9cbd0f6c070f9e695697ed0df266d1ad70139929c117e76ea878be3f71a5db36e1a14905696430029e7feee3eefe68c58b92a274acf08ee6f5742208330aadbe4d4e6b2478f2571ba960400150a11fbf437ea809f8e51fe1f88e6d5d90dd73abca0b9e529c81bcba5e840eef81179ea27f1dd2710ebf4268990dc7c7f0e8d4053f1f0a163dd806eaa5327e36ea288c7627b9493354459e81c03b57cdbbf179d593d3d6f8c3c0deb066b1b85df29c9244229835d73441dc37555e46f75ac10a23b06f2b809601ec16894ae5ec003a57135a02bde51579a38f40bfbbcd33202ef57d3b30371e63d723f7452d6b7ecb84ebb64109e65fb79c9369a6dfd8afd68d55e27e0ea4c3ae48df96eab763d317c0d41e9c426279c16f4ab95ada9f36aad04ac782ec50eea9e6534f80ac5c67e6b4d77a5a90dfcd5fc3bc1625d3aa31659fdc148df3c1051d5a860b5133dca20007fbb2c41ae7c25b40f2694df28206cfa114b1e84a8172d24b80b0a3756dec2d6249af220901c07c8ff39b1b61ae1fb07ff987db1b189b90624a27bf9a96ad346dc757bc84b62f8958c792d745b6e2d0e1947cad8b0cea1f47eb59edc9e04ddecf7f93d9b48c784b427738c9c923b9f76deb79a8c4e7c546a16b2d752ad134f331794cc2c10d018af60a7439127c0becce096712ee3096ce18d38a9ee6f3ca3b3abc68c0d2c1330d1c882d6e4b494078aaf32c343070c480552a5ab125ce787d9350d1190f2f769e5bfa4db19a13c063aab3b256b32eb722007884f60ee8a483e33d6d15a1df33035b67bb4a2760f275754fdfc09ff2d77cc1c6f0b5cacbb813d38b26feb059d005c5d75f811bbb4075b4d29db91b458c583e1b863680ff1af60b43e21a6326b76c4152219d9ea9112d0e41d38a4fad3e7c227f2ec0590a34f4326d8bb3e3cd4e0076e1e9e8d7b4ce632ca6697c64b455b113fad09d7d766cd4f00f080f58d6ff890d8b9fa8ef63dde0b50846d582e239bfb995541313cb2c60ef334176e9ca31cead592b260e3ea76c527054ddd0be526ebe57a26b448fdb5ed4e01e32be2f4b98ff5175aa5ace94ceabe57ade77d00986c749a2ed374ce0974a1f878a0090b7afab7e667cfe9a0dd0676fa01e9fa0c4ce7f713de01589a5d3f7f764c5d772dcdb58e5e4e3202b78382e16aee66eb7ec0f8bd9598e05cf91d983709d2c6a5f22e4ae90d829e9073ecfaae38d7e0f9cea119689df3d30a50c7397921a07e2def19157862b9480b8c85d81dd232ea8d7249c4687b836bd937e67db66c49e6678b1abf8cfc36d0dc67daa5b0d593e62f1047843ddcac1d5214f7ef6f381381fb3cafa3c748afbbab7c47de17918f56471f16c3693ff25a0d8e88091413a1e351aa546c87c6788ad1507a0ba2b469dd7df5342c7af3eac453faf355359d899cf32a85747ef415a0e67add98f2bcc7ce2c491c09d3b6e9ceddf0d65e54241ef15853cf55fd502ba06361ef1087f93daaea615af613e793ebf3e6bd7ee045f68309acae7b83791f0bd09c1b0cc318201621046d6bac146dae4e62f5417a8184e48f9b8f6fb1cd6445a6800dd8449803827878cff51cbbdb8835fc3a4083556e7842b6fead08db9fe05db4242d7cd77c625954ff0cd64c61fc52f8d8f68b3007d0db7588bde912265e8ebf0a56ec74ef483c1f772d8944959d2e0f7dddf2bfe560b25daa0ce30f9c2281f70cff03eed0a6a93ec4d17642eacd1fa675517a438baa5fe5cf34772265df0002b88063b3c500194974934db5d61ea0347c0b52695f303c8484af260917e6615899758c5220d714b5e2ed702bfbf4785fee664b900484e0e056e7701236db2e6f3c68de48a8be141aac3a7df3a100d07f48fca665e00ae55fb277d5ec271fdfbcfdb4ea059107afce4d14d7db79a671291838f3498644a27923cac7d57d46fdd869f420278e56306722070e11fa77b2d3d895c2c96bc4b0b3277ae68cbdc2f1381da1211cf52c5e7be78b915587d71e0606bd9544050d88a439e282704d26625275465d6469ec8252ea1d0204c6472b362efadb67e671a2b2d7ac5c0ecfe3b9cdfd4e457c613934a2c625c0ae1a6a62fabde805a394a397658d32a3d6aa7d7fe1324379e35f74fde1f8506db018a34dba3fffc4657425cf32d7102a5651661d62a0a05b37d9323676fd0759c9357443fb31cc784c295ab2b121bf301c79402a98c4ff69c842f386f830c51557f5600e441fb891c608b4fa5709ba5587767e201a0bbb3633413b67dc501440cadcf8e51b765eb141b6e70e9b0b7c2b25dd72865d015e4107386c41a9c76f4cb0509160e7b229476da8435803838ef18612efd5e842731a92bd18acc703409996e4ec1a4f7fa2e4a8517c7f172e5d6906bb2887322b74038433d311eaa042c7fd3e4b69a91b55e96036d4ec4c4881f2563adf22c138ebcc4a310e195b0ac058319141e78b31ace643ecef18298e772dc31656211bf744b563392c1bbebf43bb0292621c7c4f326bb1d84d8b255cc75bfbd2301ab8e3095f5db0dfa17c3a6770beb62e60e2c060da488d62cdc63fdd3d5ef2ef681e98c43a983c7b331a188609e471096d5521c2c25670b15882a423226b0d06a1b364efd7a13091592eb649f70267758a5a0fc2b49a26cba3f12653bbbe64f8502de3f6a71731b48c10b00db896ee055047d70b11522414488832c959b7bf46ebd4a2733958b4573466724bdf20993b57d513e6693cdd2daece561e8ce55074ed4e1ce00ef43cfbfaa699aecb2ddd89f95852ff4ca8c66a5f2a0cade5d5ed04cd00afb788584005374772911d1d4f73bd67f0b00c24846cd221c301d4f7c9691382f7843613422582cfb98d458d537b2c7a89a3584e7bb7904c15a4dac99a34594b70b0a8b3d7bf55b5cb0dc4ec7e22cf068a33817530bd121f812177d9c3d8e6d0a7d7509855453880239d2bb943ed0da28f0b483727efe00271e23c96dad974990952be5f6f4993b55fb5da72394c70c4e474fd12e5e2829b8471898f43b86b3b11dd52777a5f0fcbdbd261b5c2b390e4471b1086df1762511559ef2192e8430d5db1ad5efad8054a249d51e274d4d69703683301981117b9c105fe0c4d0b84a6499a3f9485570ca6c6511b96c402ba43c5d6d52195421b3bf400069dd674b88c61d179a69e5e9e783da82f3134dfc470fb0167455b2cd56e4ac2c964c3c6472632f1fc13aa512314f6fd1d404bce8db50f527a1b5e53deb721d896ef9972c91a3996375a3dc143239eea66428d516e769f547de21349afad15bbff9ccbfcb6cef228abe8cd41672a71da8ac65e0aff3c1781f3581e60c0b682e773faefe688cad913da4ddd3417802c680b3a424da87c04657adbd44baa7a15e5949859a2b7747af23307e22bcccb3afd681ceeac02cce26964ebd96cd55e3b20c1e3bdc3db72344e5695709b0f620a1511fc97a886953e184216a246c9e97f339c6b60cc6d4ab182a5851cf457eb36399947f1c5bc7b73fca2daa35c00923e9874ae072ed5445f29b0352bea2edd3bf57e8d61861cd6208107b6612f11ef05c9fb19f56dbc15b9bdf74431cf0cbe77b3324b8b5c103bd04fd118704266566142803ddffb8a254dc9fb30d32569e5960d44f0c3ca4f12efb3af9f3518767edd8cb4881b6ab80987b83c69648fdf09036e371baf531201eb46f3b94413dabee72308973c3dce28f4032b7c8a60d48f4c50793a9289117f6f843dd501e70b9cfa8fece9b6e7450a1f5558e8a93ad2fedd4e9bbc31deb5e1c8f5ee9112e471afa43dd1de1ff9b5236609351c359052ce32d30f4ef1c687efa416966bebbeb55d50b77802dbd7871b64b950a5d3e3ec73e968543156c30fef6d60c5d3f0b84f2cac771fe67f13434897c03c03f8b808866d890b21e566a667a15eed57c66397a4041769f77e3f62417bb847c5187f2f8c4bbf848f0223f3fedc7b8d65c1632749f3f2c6c45dbe7c7c8d2c0457b7cbd9ebe06660d7418d60fb7b41169ca6298684e8a3b6cb9212fa805876023a5b00802bd83810a927f586140a4a294ab9193deb7ea4ca8bcfcf54c34a40c1eb76cfcad2af8f24633a1ecbaef5f1361e8ec4a5f4126072634b6613dbfef6b3f99f8c1266b2e60c93dc4bba42eac0bd869bbe672540813f00b959d020c31268d349c7ef5eaed749c9a31eca66555320016468ea05856190e27e2ce238531e4106ea05ca30dfcd6c63030a849fa2031e1d7d46b70b5d9c08672e41f2890b94ed1304b82b73e252d4fe908171356d6b08395aea56ad459b162d2e5b69a978f0cd763e718b9e42e2140ab03608ee13f56ef361d63161b9e93aa312bbb01017cc52bedba483266e05ca06067ac420322cc2ca467cdfdf36f0f6476ff57e3364821d3b80d38a92e038377ef7d22b62548ba42c5d40ca6c595cd9a89a9b1ca9ebbcad9aa2710a6a35f41ce408deb72ad7ac63a83ae4899f7d974535271f33da19d6544ad52f9b12dbb3bac3bdf2efe057e9b1bc53ba85ff301ac98b89f42c5a7b59d1da8d41b5334e11c19c8ba14e3931cdfed72c5557f1fd51f70a67ac9e918cc176b82f69d1320978a1dcf68c5a8c11e3bb874927781e51f73e3014bad315caa7e362500a77a5aa62dc1382f68d5f64a5685b2ea35eeaca550f9b25a1925db177887783a630f48d6af0ceb5825f2996ad95b1417b74ddb305fbba1ef334efddbad6563ebf75a53eeb507d02a258814446b4382602626dc884730b65223332bbdc7d8ce5d8be3e3b8eab8d0ef901ecea1b544e40caa021675b160daca125ccb876be8a1d6483361faf329d1ed8e3d2f485e6622646a67f1bf4554f3a1285247ff439ec49f55d1337d7b62bc6e456c9f030fb125b08fe0d52daa13ea1d8c9c05eef7012000db45c30928697ab8e0338698702ed33840f22a8989a5a88767c26f1b2f199b4002187866a248f213851a4cd028e41543a627589989131427e04deb5092ef1ea9f1d1b95b92070bc95daa5973e0dcd41ae806c7265364154420c4e353c88a9281d1f8f0b1a0acaf218f6a16493f1cf6063017e0f78ea095274eafbeed7af3dd11c91584307341c56243e3e919eeae644da3e309d6e3d07b199397e4e65030e9a102b1dda0b4cd34d5a39b3bad949907376bf1ab89fafbaf601702bd06f14b9c79a45363c90a59e6c2d41c75cbdae6c60eb0c92fd97a291844017bb115064be0e0d6847e731eecc27101eefd3c689c881899f4fb8e0c62a00f798728da36399c20c0cb9665988eb02950973dc8e5c3379f4ff9797057af2e07a9b08a1e2a1cb87f8bb013681f479833e9a19b36fa64bae9fa6010460417ab76b77d3fa989fc1b465fbb5d445b2062d7f59481504e86f93ec0b227dabaa3fda2cb76af43fce2afbc6375dcc1f520f75d9cf656dc8a31dce8cc7628f2225a0dd40e2442b42bd45b2bc065f8a695503d0d055182a3556d4b2e44347a57e344c353a70e61c3bddd07d99d141abde2b61d2f592c6d6d58432e57517585d1a6690769bfbd723a5b029b0f2308a8cc855c7f0abf107f023aba6dac1abfb12813d2c25c7eb7dfdfac4d00157acb0c9c254a4ce760842029a4dbf075c89d6623d186da750b860e7b59c51c33c9e5acf56b876a0e6410b8ac3ead9ffa82940c8b898d39fc8fb169d50972d8b138dcf29fff1bc3c7f23caf51af386382712e0b28e2f0c53931c156b7655d1dd6f13a4561880e3e5a32916de1a0842256bcf2cbc285b668731a3d3fe7148dd1ec19860c04af68c20e4d965a23b89ac6bf8d68b52119e709f471ad8b2ebf0add39db49b1511b32392d6bd4dee1a081350309192f0c478c90025f9aa2540edd2a065d0a9b0d74748afdb3d162e1ff41596a5a8ca24db7abe4e60c8bec21a80d9f9ac751320364349dc74e174cec7ee3183ea84977aa104fefe89f08d15d36a2233f42a7defa917c5ad2642e06cac56d5cc51ad914ecfb7d984f4199b9cf5fa5a03bf69207b9a353a9681c9cf6437bea0c49d9c3e3db1f3fc76519c70c40cc1dfdd70a9c150943c272cf9eeb861f485f10100c8f4a3e259c6470501932782512225ba64d70b219cf9d5013a21d25d6d65062dcc6b3deb49d58b90d18933f118df70ff42c807ccc851233a34a221eca56b38971ef858475488988794a975d3894633a19c1ae2f05e9b9c0756affd3cfe823ccf29228f60fa7e025bc39a79943325126409460926b057a3fb28a1b098b938872883804fd2bc245d7fd6d29bcda6ca6198f2eff6ea7e03ef78133de8ba65fc8c45a688160719fa1e7646d878ea44c4b5c2e16f48b6082eb310bebb020c954cc0a91aa07e98848da9d1ac127d74ad9283746d4a6b13ff46b35773df98f9c7b7c8c5486fe5e19c5da4147f1735f731b25f1fff17ca8eb3da44beeae21a1c6dbc091cc85ce88cb1c871b1285d1eec81b2bd480f4e0370d6580bb98c8901ef07c8163202edf2f4757cb73a406ab4bf1e02026f26539284d75e6cc9c12afcec167a5487909991b357e8d9025fc683f9572ee307ccdee415274bdc72314e478e2a31689ff9f65133b97b5bbbced70925cda7b3a47b2694bc56aeff4545798e6fa38ba6dd977a9e004ac2a3c91632b0cf01fb18c7b9f110d4d5f639b586234deb22f7b3e301ace4a36c4d65bcde50174f649766d3f194e51935c010456bd1e29b28f40422b0e3d197ae8a06098fc5a941961b427bbaa88dd3f68b17777f1c08fa160f0c3f3dd5d15771f7092192e9e32ff6e520018d9277af88c5b3be38581d727ab7507af0e9506d6712e3a79063517507838417e2e93f066cfe799c101c8cbed77b657882a4fb33ee6c2a0df09870bb5884e311432350732393dd939eeff319bcc9bfaa6b8f2e55887150c74c1fcd6d5a47c1a036c738704d2464375d38dd2d9b20c3a3040e664cc5b0dc660b5fd3f5ad7aa427265b63783a3e81e9a38da764d32f15d4f4b92f8416a9315ca6df00fe926c0f28aa367e058b30cb4d3a54ee4a25332ac2a6060695fbd9043da723f0e2d9ba67273b0ec4a2b0a9b4b46a351e67e1eb86fea07b77ecf5bea96ba4b5004cb3d440a5414af3da3b17b2c1bb94b428a9969eeb6c8ff00394c8b578f808db96e1482025555168168af969f7b70a4c16dce2e70b72ca1b8449959cd849a5df5bc2949a1a0fd8bdd230cd2eb8e4fc42bcfc5f03f14ba036b99493e42be20277f5d837f315a94751b7cd1195a7bde13485a8595a1f6fb8ee4e06421fc689a5520fa2a0ef8aea03c011a0552326ba5fae0b41606df8575aaeac0f3e944a8904ea03b27dc3fc2ab4758a6b065bc852ddfba85802c40e8b2c044e1fd8062a68b7ac7c781d34dbe3c00e7c7da3940f2fd2b9f76cbee0e483a36bbec8acd9e8c13415c4740da6ccbdcce78268cb806d99d47572e00338fcc93761789a3b8407fae0b29626dd8e2111119d16acec955639699aa5627e50d9d47e6205f4e298fa9e640f4c10fb7f8b7664abb3ca65477b76f8b609646ebcee2def09d179508d4324248860b2e5ef6e560c7fe441e42b2ffb0844095672d1bc4defb5858803d58424a8ba7e9d2b524c589f962293d794f60e2ec13fc91933b6bd16e17cb16b160ff87721e0304a4c97c6848af940be295048c2aa172cd0578fe3eb3a3185f4a37948063b500cb132f35851dac2c9165ce1336a8b2a0226b18a6ae31c4e663f12427bdc7328930ea9c1669de229ad6eb40b468cd0e2e98ad648aa85041dd2b8f6ee1c7075e453a1159479bf5da85e25a3510ab017cc337b3a4d3b478e4a6be0a5ee9258901ddf170aef1a3c89996be9cf34f86acc607086520a85a1173e9244c3c685fb7e3f85df0e23c0ac12a757197c2988236b2a412ac1f322383b74d663b5085fef8cb3f87773f4f574654c90335ec132508093f5d6eeb989637787b8bc1e16989b3835976ee0b5312c1de3a7d5cb8eafa889283f295ca033c937e1b9bc5383b8852d1f0323e8f6fc4999172e6f66d42861f1715d807059b9b0090d49f2e9e24843c7ea9c44d13ccf436351646ea544653355ea017aee3873de7784e9de6594c04d9522e3305df912a0092d1a620b51be83331cab870aef0aaaefc32a0d4b1da90911427874d3ae7ee5f6f480d80d8eccd7f563bc237acfd68bfe528ade0f0f6b0cc8e3bc90c6ef6c9bb952683f204df8b83959c3dea27d70180fad7cef25ccaedf28613002cc1e5427ccd11105e821ca9a6b895327165a5fd5b05e80af23f7bce6bc55734947cdde20addb1bdac9bccaf4f85cda8b4af90e2b7cc026ac8df34dc9f13ae6d2ce6052fcd8db091c4941725e8c6eda79a4cc03afb19cef45d851b9df737c0b4dc4986b32ea7b3958eb82494d8419c370d865c8c91b2f4b29778589bd9fb36108ceb87f693f165cff34e1c8487bf8361f5a38d61e05f1bac5f02145eae25b88a2416317f65356b49d99d267b5d074a2c38ec7a4050eaebe99e69776cdf7eed298c10acd60d39700b2aee6b03c2e398a1bfa94cb149190e713af6a84fd2ce7ef5ad211f83f1c61a1bcc8913a31e1915c672222a3c33b6294c1df1d08ff1dd12f66d93b20e7ba31183a9b645e4d9726aa5399e3d6a7687e7832da216b2a3725235b5ac8f00129afe4ba7bd294c5bb63f46fd67acc27a55ed1c5450a3424f57e6b96eb6dbe11d718979b0e5e8650cad3bafa4c3a0cda8e7e62278459ec75f52758a7ef7c13706f15917ab78aab7551e07ea18fb41116607789a83c730c73a2ca7b1cfb8678c34e2172c7fbc96c89cd34bff3f56b6181d7b4b8e5c1f81cc48ad26354740f5670f0c6ac116fad5234a92aef4031e286a360c0805eb95b85df19c971ed0d99451ff36fbdd57798e4dc824d8d34b99be8d178257081870fe039dc2a57551c96cd16c2a72882a83eacf7d5172a4fe11a10b2aa5df9ecbfa7a44b4e8f641b159a46fbeae76ca775e1132d0e0246d06ccf86cd63d49cfec7955ab9ed4328adad164b35d8bafac26532afe2b9b95384a13ec3682113ca36336b6bdc34f0258b379d626b289c63520aa5eb9f5486e0cb22da5f398ea61231879c6048c200eb424981f4f236f636e4babd4ed95b056f226644a2a7f906056f48aac075f11fda515786ab619072d5d909eb521759bf6f08efe04649fcbe045ddb0914ea5e877346e5fdde4fd17cd0cd8ca28defcd1f611d244fa28606389f6bc349d62c76e26681796a0603568ea83097856ab9219fd5adb7e55fe2a1f05737a5ef7ca2b6baf49f965dcb22bc22dc90cf066109f3cb3d58ff43c6e65c8f9c4fd76c80e3ba7bddffa13b96345ec3ee5ca7a81958b03c189d7edd801792610ef2fc437b75ee9f63303ea5efaedb0c4e22a5ecfc3bf33cf7e9cb3503ece01f0fef7906d4cfbfa024cfd30f4ff8ad468c513e37721a19784bdc48ccdaecc2141f83c2192557ca38a32ce2ea2fb8321d1986f52a2389af6894d38c177d7dc4eace6e8c0cd5a48aa36ee602c9175425fa76325f3778e13178536e1997543644fd8cfe2b546e4c7d7ad879972e8f52e56942c1d0e1fad72c32181a65ef07aceed6fbb1248267a61f498056347d003afcd3efd3febc11d20c205356e560f0280f016b360c195a57ec79e71a5f571282d8e4ddd73d2866486dcd85a23cbfb65e42077bdb467baec861a68d247c2f2eb105f6ad5a10a960c0bd943f9ac03db2b60443ae4f683bed7e1b39d3030f77cd5c1093debb1dc189d1680ed18f147d8da5e26072d0e5dc8eef75ae6934adb366da6546d298b90349d119a7fc2dade1afc458c84a2e43d01ba31d9eb047cb8493b2807a397176e149663efa0fc4f12c8187d3f5c4a616b91c2f5f7538aaed4dcc7afec863c3ebddd0f7447f9d038290bb76e07352d6b2e9f8eac7bc72ec879189aa4c9bf20e6c7ba91ac6a31457d6c0a6080abb854ebd053a7bf2eeef7b3ed253b6d67f54bf8d2d1a37320f1630623ee9b1bf58cc6ca97d69494d871ed55782a32748ed1c65d274acd3130e133bb96def0a7ab598beecc50dd9541f71897644f082005fa98fb0e4e974e63a8bc850c03e88c96c9ac41b6e80b2930298161f7be44d89619c9bcce058a3281ef074acf840a327e8230aa9fc7a5b76eaf2f9c7b9c6e0607d66287b1962d45525d1af4258adf012b2c1f10cd1533a9c4302a2e36140e1121d86943fd2908f09d9bff69573dee626470825d89f93e66f7547b01714bad61acc8e9dafbe8a4992c50be93acc4bfbbf2f660781b9b4d56d2c429fc736cd25e704de733f3f988aac5255d586e48da759e65c149cb24e8e11c283c06869d067035106d362d843c8931c2e6a2e3f0c8f92e65adb8e1bc976f9c27bd09f006d0ffc2b982cbf0b249a038ce605855e510ae6aa02dada48ae3681b6ab3ecfad1b873e0ef2fda86aa3655a1f2d4620a4e3afb1cbb48105db7533461992697ec234634575a7b4b35958b1236d549a84b54ce4a0a6107c9556a703b365b1ef10e2703aaefa36e06469bd13ebd +MD = 2ab21ec8d42db385b3ee428eaf71aa18a9c7e2a66a462125ed710500e71049bc448d6dad35b66edaec37ff39997a052e98dd6ae78c141fcd4a23f4469a57fab0 + +Len = 101608 +Msg = cd36720371f56dace87c59a7fa7eec63aa03de4517bcf09ea4932dda578770fa7fb726449abc5538753cdec795bcffc0d6b61b8b52ecbe1984fbdc1bae33597277a6cee7d97f8b1d3a96d8c3d941810e6c6c916708ec5d614010c4ed9179b6d1fe2cf356f7e615417fb0d1058eb27a37b44cc6420063d55c20f96fb9c9018efe5a711cf8bc98fd8e8cb250f47cbaf222f67f448503fa2ff46cdf65e51f72e9e1d39cd135ef3e4beba8c5def86afff2b77a2d9396d95972106be92cdb5875cf62b3d69b755a7f053f1d110279222981de877c39df4a27a69766404e013fb1496940460020c304357431bd44df6ae1a87f6797c0c61e0cd373a50b53c19bcf5edec4158a9ef375e2712df12c930bcf6e8260a4b0b51cb2028b7073c182337617a9856ac158b279151e59d743fbcd9adbcfbbcc8f130dbe3bc70fa022abd04f7ab2cc6e2cb4c7b8d563fc94108077eaf74fc036e748b9db840fc9b9fda63a0192e2e048531bfcdb2a285f531b8ad369cbe8b60b3fbce8afe74be8e7dbda3935641f0b21bef6178a1c55cb3aed82a7bd5e83e77220d762e26b63b25143af9593fa529321f6abe16cb4d286710dcebc8eb80999941101ee1d183f7020bd8d15c25b64c16f82a4222af987d82103d8da85e26015989aa25608f7c8697bd1dc836b8f3bdd34ea47a26bf45d0b725807c849e372a3a74322604a0fe4e78b0804a5359fc12f97b7fe28d8ab3a668b93c25083c3258ae995e9d58b697c3077e96d43c992dcfec170307e19280830953c7338db8b631485175f7c750b798d68fd8027ce707694da9d446ad573adb2b7dc8149f8421387a452ec1faeffc14686caa318ed41763709c6a4b5b49213341afa544b83f01d2c6dccf984de4d3ea3f8da3fddce0ec4307674b727608f20fde51e5406239d684b090fec74aefbd6ece7b5bd3f18de48c74a2ee5877e71be5741d0e9428152de2c9fa32fb7c51373687ae1830674baea43ad7d969fb941d48856997bc645176616580e2815cd9cfc60dae8fbfa89a992eec6e83235b60649d94b00725b16f2e8535cda41566b9f591c2e528ce200b3280ebef7211220c80792498e36c99ced4d29d28ee141492372e49fa59d8880e094ecbc32ccfe9d90f5fb77c92fd8800f7be1e2b36fa00f302f00556b98b2b239bed0e92299c0d565fb5cfe3bc54f6a605bc2b6d0553965ce78b7772be4293dc58e016d4ef122724f01fc056c61f801e9d516736dfad4f10635532e6ee9b5cb8dedc96f3e3dea1956ef24b5e36999eeb1d2234413c63b5edf4e1aa1bb0f1d0197c16e177be3e17483ad1c362847fbd9c038334f4821355262ab55f99abe2b89edf4398e8c4dcf2bdd242cafc361e6681ff18cbc9773897596344b5d935ea50b976c72fcf9e17ce66c3a9c483d212246d5e376b48524007183d246f62f57542e9b1361894b09af4c39d8b32b1cee7619eaf83b5f9c9c62eb316b8cebf511009b03cf4e5b092c32054be7ba7deb2fab8a671622e46344778ea9e866656ef571fad78a809dbbb1cbbaab4df9692f4e89405327726b628206fff2321c8c20696ef21d2b4075ea0243135ff4b81472b2d8e4b612741e22bfd9e9142ff68795d6c12bdf9ad60b1d8661b771c23fa93bc3601d99bf70232a64b6f218c93c7f55a5304e24bf8a88dca5ef4fe8a1d54e13e9e9940316ada202d766c205e7359be63c8403f582a314afc7b382cd78c42b818c3af0fcff75c43382b102e3712a04d20584f159cb6bd61f5477f9272e526a0d141cda8c620eb044cc5e5aba4e63e1a166fac1588228f7b3b4015bfeadc8303fe957fabc27c18fbd1c37719368285bd9c9ac1afa8f239ef45019515bdc6ea8a073b3f79336d68927dc02f075a6c19a049564a548daa4f4688e898345a38bf7b71bf87a197795c50973887e69f075c5a932e80a494bf32199d71898c4ea68480c47ed2a57d3466ceb4991c4762e8e05510800f005cb574c0f948d39e0994ec128605bb0543030a555c6e56aa4485281837f76ff85401a9e502bb10da299838a92cf0ab319789c99d0524b17fb270a62c7ff11e0d094823ee6064cbd11d04fccd2fbc2dcac91d270e3558c7384b1fdcfa5f0983beeadd854598b26f03527fcaf714b4bd317651a511737702746cf75f1a6bad4b7e875630a2f24064f1786d15af6296c3f62dabc64f360bfdb496ab8ef51c58dfdc5d26d86f238b581bed615f6e9fcefc893daffd3ff38413696680ff22f798ab58dae3cf0292efc2f32fd11aad32b9a17b44c2dc3c328bee134b3c222c63f958649f019715d70a1017ce50d9f3b2036d4cc178c5ec896fd842b3119a6a17d741800804c3115656c9ea37450fca9428aa7e42565cc95ebc7c684cc5ca7459cf014ba461d57d97527afaf9424eaa5f96036035dff35b290e44f466ad24c3c05d1227f29d40b310898dba92ccf91b8ad7e2c31a7a4c0a8eb1cc879f5c4be0d1fdfe95814b877a68689cb98249a1869c6ad2f76eb9a95fe6637d926547a244051e2124cec12c0bf58c0278464cda841acb5e7db112add3c68fc29546f3ca75d05a144649a2a1105e4059676d3b068c7c85efe67029cc0eb5834610b2e526feda2e528a7064890ff9322c0745b8b818380701923a4386592a0a728537903a3789076661d18b46535cddd4e89e3a51afd3db2e315e046f5b9a71d273538996c84361ca5ceb9b5b92ffb00e8ba54475cbe68ed01479f0d97e8d55e06b8535af19bfe9f8dc3cf95b4768351351194b96f4d67e91ec1c7d674a892316ce5b28f5b444fc6c703439a7d91cf99de958c437a32a46ee08941e9b380466001c23e7fd108915afb96fe0d3d08459f8a4e242da5f68544efa9f68e7ef959b16e5add747c6d2d24d085e7361b644f2de24545be1a207432f429cd0dfa9934ed5bb278b483fd89e9efd7e55c402b54098e81d53ffe38d802970fadad51eb3ddc6fd4f8880f400e740094e2c8d3e8bcfc350abdf87cc6197a7f6580b7ab74dd4553c7433848bd248caac4c5c3fd20eece7fe9e631b9539f6355332d732fbe7cf1af93430c55fc34f895707693e65d544716253732e066d184c07f9c29065083a92a41de4c5f85a4816aa0dc80b526552f9fc69742178819a76953b52157b258336cd7fe3f8de1deefd15ae1d49304594dc5d5f0ab8640de92f7b660a24b6d65571e608a2e0897480a71a86cd5a77ec86a2d5929b35716890e13b185f60a0811dfe8e16a61f72f4c99f39166cd1a1c0b4e825a2aa3af9280e3654a0c63bb0bc3917164862083315166fe1eb502136688c16ae1dbc3b93d2cd9948bdd3287fee53762f0c6b3d426bf373b5542bdbbe5a88b8df4245a9a9ef5b8497ce0ab956ade97628e12611196fdd55240f5453920d373959eedb27d3e44472b24fe150ed7167a1a45527463077508eae7b6e4b69f724327e41e1188a37f4fe38b1dba19cbf5a7311d6e32f1038e97ab506ee05aebebc1eed09fc0e357109818b926e0dfd0e3e8501e4ee4e411b04c3f8503824c8ba8b68f695807b7e25dea73b702d0876d48031f51dad163ba43ed4b8e5f12b5070fe9b5b7312d2ccad00d9c8c97d23a2b8cc145bdfb439784af437a7168d8bce88a2406c3137c6999cfc83a40cf2d209017ea6b6a9780a7f95d167138081b8ab5802d2a94e43a97d6c4e5f5dc912b60265146386197d1bca1b32edbeb262546f659cdca328eb0dd0a162a7766c4122375a39c55a9e47efe031a525e90aa3c19347ccc8ea6f72664bc2d6065e9522b900473b6694a64cf94a7fb4ca2317ba92bf553f21df709e35374714f6a6a22bed05b2a5a1d4d010ca715bce250d583b4a3c44507202daa31d3bb4abe2cf31c130a02315119b9a27c5ed6c7dd1085a9a4aa26bad23e51c4560c172076538b28716782ee6304962f68e27182048948d5c367a51a1c206a3e9b25135b40883b2e220f61cb5787ed8f185a6e57216426ef5703c8cead6d800048473463e2730a166c292a2ff749c5acd4ef56adfa4827e0a9a5173c4dce9cf2a59904a024bb00c898dd628209f3266de4c9afeb59de548e01761bcdc4ebc4fcfa440a7bd008252ded55932b562c18ba8f0f047b04ceb4e2a79e5be9d96b03068e6fce5aac04822bb5b64494a69da47b1feadac4c3bf4fc4e24460f956f75ef8aa43d9a682551eab362bfe24c1edd198da81bb2e605a2e1dfb90b0630136dfba96e8b2c818a30196bad948436ec5a8fa09fd2e21a14658d33aabd591a2d18d349a85e126369734d287ebaa5977cd2f87f385bc05502bd5d0e7bd57e9036f704ffe42ef2aa6d8be49e587accea2ac7028e242eb4233b3aefa4aedbcd5ebb991f10948633b2f0fa7e11ed6d70bb80b73c61c5b46401384ea3bab648ebc2156f70304bfc5c098e4f88479ffb27680913e47eaf95268b746917a514a54066eefaa6e37cf9e23aafeb8193d2ac678c4e7db9594449920e9a2ac9f85c6971a9a2cb318ea9e74cb2d06ef88b381997a4ab452966263a2d16f3f42918f00de626db419eb6557d220e9a3a5b92329b5e2dba1a9349c7ff5e412c75b3ab721b145af30e4ceef203d8aa57ee393d44da2193f56ea5589bf1bbf9adfff814551982b27471da8d2213f712b3fb0001013e6883e7a1de3724c9bcccf31374e80b71c7c9ea2cb6354845f3d418d15e81da30b96a0b548c59f4dfd7279650a89b17cc4a1dce9f6e6be6e2656b0101931442699aa2cb175e358ebca185f23811b20c71900a9c3a61958091a253f71c4c4cdc4162eab13ab25e54e89284a12a3ea15c1a202cdd8e4e4697dc510b8581e8900a40c89e686f3738d9dc20902da78dfd892e70f0fd1b72f3bf2af80e16c306825ef0223a2b054b59a01fd234f2408e2b0617090385628e2148f5ede8456014a83cc8164aa39d6d352a1c3def9985cdce756c6eb100e3ee53d7c5c9067be9915636410b4c5ca81b5fea69ba2c7dd7bb3c39b708a5fa20120fee23100534a01b30ddf377bba0b5e44e5370ed7829c6d518d55f6d3edb9797c9ee963940fa5400ac9647e2152a37466517da3e5f27c3b9c8cafe13082fcafdf67b87cb665755e04df1b6e0e553bcb04889fe234df26ec7e0acfb708e513aa339f7804cd1b636488962d8eaa8b7a6c07d3c6532c114188de4ddd03c3dfa5725e8f508141fa16597d38c2665ebb095e557a1a7f364f7618a39e024ac8385a104a7f697d79ca3745cd0b017f90af8fa9d8c5c2edb8636da2b745651681b8dc8bddb6ea7fdf536d315f581360aa2db55676fce7251c13cd31018a30ee5526d0eb017efc10da5c61241b66209112fe236c1966b0b0c8283eca69b5885bac4ce1399d1dc7b7d2afba26e97f4f9b32ea80f3a84c4615266a6a77d70d97e4eff0b57c98dc72fc2f12213fb1e9c80570b874f40bf6d0dc9ca0f63f33db851184dbf4bcdc0326675a4e3e785bedb4573632a9752aac778e94948d2b65677a6ad4d5470150da0a81b92bb8d8cfd33b1aeb1ec481edb663b2750cd54156f99d7847a65654dca947d1b5703867f6e384d5f645701d3c5bbbd0a7d1768becd916c24615c8bc68b704dfb7e7652eb665b810c16f5353ffe5a87092ab1911104f0ed037eb4542dc4d6a342556e834f8a0fe54b363152a1e9a511b9e6166daaba2ad2b83f077ed20b3a15768866882a5dd7f2734eb5fab81c3df5833bd04eea31b1a5a93ec03c51d31d0d0e93f8e1ea3646214accdd9dc10a779b0b9859c55e2027ee5cea794d2b90f1f280f480212dc7dd0a083d22ac7b49048aa9882d5174e9f00559be8d01ddd94b7e6416b6b663670f15522c2fa7453c473ce387c583dd139c93164795fad7209c092e96e71209b84ecbaef65f3e9d68c23a4013bcccf521900019020ea8a5eb661b56e1abd4af202ea575383bb30263080b55c86dad3b888ce4e87a619bd8be3c3d63837f7eb233212b5b7e3fa5129f8b188af262a53edcc5b9eb0d3934ddfd80e7daf8dc70c155c8d5b814e5952c92cdfa563e46356d82dce7c756e014244dc69323be3d3b4b2c882d11b8c7f3ded133195e1862de561f54f6d3d410aa5a139fc7e4403c6ebe1be1aa0eb6516197df6d0df90d43207706a08fb7112577ddd35f0e832b346b98a857d4f5ba1c3ef601de30bd79817c4edd61ead77aa8fd2e2196df96dbcfb279566d266d10730c680d093a220988724c07fbc0bb8d15bac972d9a375de68f3ceba9416eb76005a6c457082bd29d2830d2ae089e9c4e6314e4b8a02c6af8a7017296f4ee7474e99814f9692e546fa2ef09aa2aed8ceb4e11b104a760fdbcee7c1374106e700b85a25800de3310d69e6a4ebd4b81ee6ec5ace657d65a7cf809b7b78dc07613ed81cf78b291c36d9ac4a78a2d93e02ba06fec6cfa55a25175a3ba44272a8fc5e184245d58a765d382bbb0a3432994ac49f5d929354dc0e2fb628ba48b7640eeb136abed394ba2aa582c8d83473625d831fe7b064fe63c9952ee34bd01cd12f623416b119fa3015be2be441081e119161f33dbeb92479fdd41f0bd79d0578c45004a6cb2d0d70a4ce91adf343853fad0dd3b00c14499711591102cbe423b36430ffcb7b6151045e634e765d5b6b34f6d31c0f26eae0338ab0af58b769da298591afc5307b6763b918dcedfdd412aa155e467badc18ae7e067448e1882ab33bede7f5488bfb3073b6ba77543322e077efbeda5ff1c9c1ca8e97b037dc3197a669408d9f2c2c6775bb8489ccbfa1fc59a586c1e9970b65a5ab3bd6945afa756133eb6c5fd09042ca0ab3ad506905a7cfde06c361b524c296c5276100eacc76f5b5b03b906170eaf9090f8ae619980862030489ce335dff254424fa8474f1c2e95559a23ac614868a225fc999b7a048997a49bb38f8fe45da90fa4926e0af80c57dac4866e7c43f06bc6d116e2b668efdac9d00a7ee4fbb3e1171f5f0164fd8129473d61cacc83df43eff0b6f5d32031501c70024fc988ad83050a7eafe18f3560274f362fd67a7dc12de5ea3364cce69e29164b60a20d9305361061b8154f91c2e784842c2eba5469fd2b3129cfb1981b5c1d4660130d1cfe46abb8b854912e982467dc3e39a61bb4da3b2c5788809e6e320f73bc7109a3c49346d42f341644765a839ed48bd00c2841802c3b33bc81fd576763d45085bffec87c549b4821abd3f6424c9da9bade4acfa4c14335c7eb4f28bf87463603ca1332b6ba7ae545ad47943e75e7f7e8ea82d1137c1e233522da12626e90a5f66a988e70664cb014c12790d2ab520accb9670256cd1a7086d134c11a8a3204e019f52843e89f2d01a02a88a94d4a66e8d36dbfe924c6922f7ee5a1225aa8e75340cf8cbbd1c0b08e9296e81cec5f70cfc11d763523b12ca174433f246073d1c2877e4812828fdf2e41134bc8090fdce3faecd1e54a58948f59f3f78b2c1148b05687d712ab2b2d630416001513b9efc7f9523f53f92b6e4ba86e56e11e0fa09f2672b6269c411fcf8415c19e9d0c4dde34f43b1bc0a81e68e82909a0d6dd9e017fd561b8d6502ab629a8eccf15656ba9463931a7216d295981aa5c64c6e98569db166653f9e6d2c96d360e111d63cdbb9597df70abd913a01d68db876ee1fb4ac0cc30827763ac8bd743922f0575e887bba67122b08a61df03eb03934f256426b95d6ccecf552c4ff05805537e1a409020dbb317efdf9868edb76102e84254703d4057936239b6b830f9f438d7cf6a575dae01daaa773bd033448070bab740d9c51b9d6af09fe04721afdb49b313ca6fcaa3e9e580bfa0976d18ce473702bda5c955bacfdae63d6f3ac027009075e52c1033d7b303377b40f3bac7010d932f76e2751c3c81ab32a2f4f163e7e0744f2e970457ed926d304f8f90e7387f171acf88f05e3b956d4484e8aa1e7a238d6cd9f76be6dfcecf44256931cb583bdd0402356ddd47769b07877e50b341ea2fd2d099f1011408ec4b554923cfdaa4738fd1603435dab5b2e02d2e9bcea9a4d9f584f72a3324e132aa7177dd814a4968f29fa1e9e48fd35352d881d1dd4bd42a5979a77e098cd830d5ecadc57c31ab2bf0df62f565b14feaf43c10a94b93088f83212372d0a66e65723933821d0b4a4aef133bfd35f99be838aa4368a609b277e71de39f351c145ef3e9a179e031973461cd8557c1b337d994b5a2b6892a428219c27059b3585a7bdf708043626f2276dd80e7abb598b44d9cd0a719417f692c8fa14248b7e5b15a996058451ffe6c90d6bfdb5f7df491a2b5add8e78b7376d5bd4ce1d2df4ea969b62b82157589e5f0d1ecc8e997614087738fb0c7a3a10c1c1727c78e85fdb327ba44a62b0f7c1f45539a48d07e69415a5b08b7304672897e41c47be2386d5f131a5e3cfc4a4f88dcd04ac3baaf772499d0ab6497d0728f6ab1a5776483281dca5aaa9f1fb29eb345dc70d1fea7156ac478ea3184de2b7e7feb3d328be2b86fac0fec74fbe4d41f0edc9eec2301be7478b847b67dbc07e71c531e35ded398e5468e8637273d7a3ca655378aae2bece21523365bf9169249ce8dab19b3d243ef086afa6e08490b8c8adadd2616a22b34282e48aa7d6a4527050f7626d16b340d8039cb723574029f5ad1f266f2e0f3cb305df11a7123bb0f6e3cf2158e0b03c14c5f7bec356af9d564ef1995a984d147bc16c2347aef4e5358aac14e603e1d9aab608e546e7a4bdf5766a55ac0ea3e1a2a0d3e81010989a352ed4639ee70ec0a4bd16523674e831d90ed382ecfadb4c31895b8789a1ef76ffb5903708f4019909c16b2d1a6444a00aff7447a3c3bbfc2f634d293bc9c0229a0928b8ad93810be2ac4d9f7b1f7db2912f95cd58d10c9aa418f1f5acf1d5450e10e40d142a55be366505d0e00d5e1075887e3c938c95cd998f8f14667ff48864b40c5fc623465b0dd4dae7d196ae62bef177bbdd5c203e14b06fadf1dde693a3dbe7d549e41c8a70e1160cd622344f7451c772bca973942063d9e9d371720dd36fbe9827d79ff26574ff697819b980a092b78abadb5878c29014f096a5629ffd57d9cfe762963cf775df233ee3059d4a9b8f2b5f5a9492041f69e9c1e07df0287b80a312efcb0f2bccfc65b1e8e04d7854977c328ef289edf820fcdd898aa95cc3fb3c2fe504140b619f555790123834a516a6bbe0390685048153710a5271a11791c1c6ac0af39e1c0f1bbb446207857656d082b630b0d529d31305ca9df1005f8c5a60aca553ece696e0626a9a6274af9d231079a130e4506067223132d080833231844c9cdcfea57accd66c80f0073834c7ec92522dbb626e754fa7dbb72a6bcc6bbaf7b937db4304069eb0dd5a48f963e39e670b506045466514945e4e0400a1338a12c20c8ba67cb742a078473fdb71a0af629641dde33060f960843c1928fbaf7d06800217b82a064aa21b60f3c4a825a6eabaa73a22738e8773152a6ecc20071a3bbbc2865f551c3f208c4d6c9d4e9b0b663e2a7dec59164536d9bf0dd55964e9193bf4e0854720a98194b5b24fac296740eb73b0282820bb0f98a4fd29eeee7309c73f2e11463b0e2dfb41cec10af840df892adabe29d67267198046b227cc3f71294b77eb9b95f88c8998c7dab02f21abe0f70495a45ef1a725fcf1564c27d6ba27c1c3fb8e55ee060662a584e5f78f0cb7803597e1e0c03584c004ffa426be4d8a491a2966a47903394970a6f278146ad77075ab2785687bfe738a9478f28190198a855d6da920ebebf331271fd9372d096dccb9c07470df5abd88fd10b2a6ed9e2d0b7fe98d6b26e408f0f1b44381bd131f43aaf2d660cb62480822b48fb6cbdfd9b5772377e21cec31b3ebf9dd7883bd30e16406d3c1a6dcb911ebacb13892a6378a2d63900e35cb1684fd36d0a6e5d145afd044921ad891bbac403f3fb4a9b9ef9289f1ff76da485e6a0fb243934c1509b3d6f33cf3c949f4e009b761b37ae0a8d57414eda2712db16e09b65fc5215321f75f5cf8d4e1cc0cb52e5a41bc6ce50a5cd415821b6440b996d38a4bc6ca51388351c8ef4688e1ac3397710457e78fbf2e933ce568194a1bec5676301eb1d8f45d967d49d026527c632c43d50c53a56c5397d13f11fa12827878c236533caffd8f14c42dfb23e5234cd61ada6419f0bcd4ca1cb79f6d62944122b584efd5a0fc21b5e4c34ee7634af67b3c3be69f3854b812657699dc00f94f3d98437ae37199195f273451da93986a04f2211b4e44df0759f3a487aeb55aaaafb39a7aceeb7b81fcd3a88c643fb6af5a84b4898ede03c9860f68f14b495f5b624eb279fdd64b6073314688ee2d4bcd633a1bbac8cc68078101ea601b84af693cb1b3fedafab0bfac8937ccde2600cd095c7f3662d7b7c93211535c862ef3dc2724c492cc1e53a58f23a3e09ef27db633310783c6c798158187cb6bf40ed2bc0aee0dbc3b0cdb1a0446b14d94596990c902dc2b5a64b2f556aa7917cdedf512cc58b7048f8af127f33b899a2a236c64b21725b68876ae7099c386e7799303e557aaeaf231613dd2444b544fc7172f39d8b80baab7c4338e321a196360c8a53e922ccd0f87596625dfbb3af5d2ff5a17222db6914e17ea5809f75b14ea548324652589e2fa391528acd66213b5a1950678bd4df2b7377bd506a2748180fe449fb8df45f3f3cbf1e294e3f531d7c5860fc2b2f85659ec8d0e12628b33888f91b773a02acbd8d5a35b7d291ad7a035d839e852e1449cfec8091381c8b06cd011757fb160f11220d29b51f1fa8e78b8318dd3e62d44e834d6d0f345548292866de0c25a0eed0a7427abf683bcddc7153a1169b507dea5575c6b98f75730647c4c0125e25d4827984a9256278a4df5159acf9309959b3b2f05e0ecdef843487957de90937489d056e258572589656a80f9cf3a28ff0213847639d5446042a8443681ecb37c386f749706e3c4e3ad8f1e0118445b6e9c931e5a7e3d6fb7b5eba690f21f8b9cde6bbb13a2e14ec0adcab658b19bea0aef24c557b50ba8242579670d371363fd022cf3fb37380947ee8412a6a5251dfa852f4015e82737cf19ba4f565aae83c62c1ae4facad23ea1f726f894f9cc3c67e61a583d1e7864e11916251363da3220e49d55b6659634f5501631c9b7768e78984ed57760e87782adf5b3eb587eb933b31d10d70f6c356c82be85eee70d5c5625347f6ab55eb7d95ebfbf87438260262002db06d13c872e1485bbab8f78ee2815331dbf25c36e0fb3dc128f2bcd6f21b4b47febb2ee73628ed29da7b99f8c17eeb2791eb8fde24b35b474aa19492e4ef59bc42dba6b4131790ff18b6c6a7e4b3a1b592d77f55bb66aafad8014dde5d36d1f7174f19939c25ba380feb1c10beb80d5869769932378dc3684ba2471dbd8a4a9506a6061a33ebff612a98f8c7d1f4948c80296c081b813afc20051ee5986219f27b50eabc6cc2a706f340eb31a111cdce6170762bc9e96842ff9a43aa7046c6bbffd0360eb9526795e46361e2be681f9aa7dc3621d54ed1b934e243e0d7b0d73e0eb48665ac03a79a88710b6f7c90007dadcd2a9ecffa0deb6a7dae2d3138c215126e4a75b76efd815a1a361c8e0226e3fde3d1e71ca373360aacc0f40f372dcdc57df0a36dfcbfe6d39f708e4536e96a1290ba8f3db3b84580204ab9d44470b472642763222585378fa1594944b6de8c8654431bc5a343867558a9f322d91185b3a14d598681e40fe8904eb20f0a5ca7b3bf1a01270a8b7554c64d447d7da6ae03c5d0eb0d8a42bc691ccf7d069a0a5845219dd3e452169ea8e9c31246aa9699ed32509c29b727d99b8769eecdfe6e2a954c4cf870026b6edc43a9d110d877d5da875ae16d8109f3fa609cabb79fde7b3e6fa6037c940062895440255e8fb0ee46354e5f4b807f780048d6286606f1e69b2c47795caf5c161aac44739248d84fcabcb96a363ddef247a0b4e95bbc4ed956029fce828d04f61aac15405e9c5476d28e1a96c001deef2af897630b382befd9832d8790e5618f03e4411015e2cbfff839e0697b74c5bb34c12c29f7033f86a01e6f190a21185d50e546674ac495579640a956cb2f4a02ff8ab1a29195e03a5434d30740c88fcdac1f93ba8faa46fa5722e3f32169c242e5c5e6618d68c4773076f7d6f7543e6c5ff3b78e371c677495611ea330ecd4f7820328eb2d1442c9ff555c1c705cbac5f7223056e3936d32eb8bb7fb5bf0e89d4eb307a402f0e1aefb406e2c5e3a7b470c0b8ca91797ced1c3e35e70154e73a0c655e12091b72792ded8acab1385f68c09103af935a212bdb9386085ff3e0cae637c63f57bbf9b11f47ea5fd32b7c2f168e0a9dbe03acf7325db6cc16c582a22b0970e770372a2a8e6b2d8b72e585703c5ed77a589ca5b8ea45ce1a70f15428a38262f39db88e4c41005b35d88d0295f8aa7230aa4f95d5cbf2d5d9b39fdfc5154ba64c2666ab8002af7d454b4c7b05131ae1a5fc4203b89d0dd3f328f9a9e14a0c44d853680c2c972099a2144a792855552ec3969d77c8283dd14f17243ce50b6c42816ce736bac9faba367bae836685046170bf89796d342bd5d5c84b20371e13aa2eb80ab39060e5e5e8c7a122276dce8096c02e920f887eea6d8294db414baa84c780fa0918248b24a0424addd3d35c951ce1b34916eddf15ff8f27f76a5cd9d6330cdec3b8dd917e4632d23cd28055a7ea6a4027eb2bf66073352dfc191747aa5ca4df66da52a2fcc3e060c78c3c62bfe8a3ffb3f40a6ad2b1bdce70b8469d072990257ce54c64a4fd941d076ace2be4fed416759a52e473a26f31ddaeaf82f68217d78d41937f80dd963083d200571e1444adf545ca0b4c2c927fca631b9f7d4f831d1f55ef9c984b2dc2c32d988f75123cedbc5e3b88643870dfc03f519ca7781a20bc8b2863f230a2fb50e45f7af2e004fd514b6d02c4af4f7a46aa1b2079e62508eb4a057b98723d02b15d1dc19c66e4063c76282272777878e40c3fd3fd7febfd35fb4f8d92fb46006e029a0b7c8d243006453490787a330022cd865e3a2cb6262004ce40e6b1051c103a9d01983b0ba2362258f3de9ec73a8955b86938d6ccab36ce4a3d9e7ec27f1e6cf04bfa59e28554745df3aacd7e4fa00c9d9b006376b5ffc18b2bc249c45020025990aad0f100e8a30c39e6ee9e67ef5bfc9d99bdfc6c024558b358fa54b89f63a178ae86803c7b172b6d99e970a9ffa89f160bcaa6f7c7c37b7d6a78badf22f790ad1065d76194378237cca63c3e575c4caf5f74bc7ed6a1ba30ffad3eec3126edd4d8543e96bc6ddb3d860c4a4e80e0cc109ca1852bb849de7420802808545882980c3afc037a21fc2acf05e100009be7e0ca3b4a24f421aff3d4d9bf5a14f5159eb6015ad156b9aea4af794a7c61f464c8f22953911293f45223a04c0bf8656f91dd90a028d89eb9532f4eceeb2a550d6f1a53e89b9a06773c15bd1742891058178acf162f8938e5e1566db375e425a87e4da1516a15e2fe57b31968284d5f97d8c4a6030ff0effaf32dbe414116cbfe9c90fbd5250b8e524b049a87e5ceb8f67e93fdb1ef962cbf34ba29c27848b1d772ed49bef402743bc11029bba094843baeffbc66f80155fd4907977c41033efba76b73520084fb8061e0af4e81252c2f1211cb6b52bbd47cdd1ceeb8c5cdda31e41261da71188bebd27b1286b10b169a52d01208244c0f0496ff18be2b31ed42d1ebfc9d6f478c42bde93cac58ceac4416457a84963a705d1cbafbd69cb4dff715fd2ae52197664ec93313079df455f40576e929d20f5d4e1855814840e019165951d4f8af9282d79f6081e1a9077874c76d483dfd5240a132d6915b3e3c016744ede31f42c046a5e6786d80a48f7f8a05328009428c801c11471259bf5000b47fdb3da202a81b7f4784be2db512d1ff67cb77d5c74485885eafee88eaa57fc3b123ccc916d26a2e6a8b5e30041ad69a944217e9b402b7acc0170c31e8c2e45d83cb76dca6c6997bf69534d1ba2ef625359f478c324f7e52e086549be02f984a9ddd2522dc0d122b94ab2858ffd79966f1e8ee0769b142406504ae10fb750452a660c0e4de2e3b09ebd3220cfa9b27277127f6a280b26b3ff89a02d6611b8f3d475d2f6ad4b17edca4170a37d405082e5c6346a59fda6117414e383639a9a0d227db5afce71f426b667fc81fb49aa4435ba5c658f0b08c90e72a3878aba8a1daefe229e23efeee7fda12450cc3e4643016f45e0398bc55729336eae4e19ff91e467b846303d9ece0a7d86748296aaebc3458f6edc2862284ec7937c200161063d5ac53c95b35a35676d9171a0db4ebae5ed9765f94975c8f9bfb055933954e74437f7e5a709c7ba9ef1e3ec9974b84cf3b80c6a136766c5b47c43ef2a0a51b1839fced5f6a95dca0b9aec29ef1b6dfe77454cffbd1abb8b099ddc8d56fcddf165f2a881f71a92e057d918de1407d66beb05d77b58dbfaa56394d8d4ac99602375c1138e4ab5ed99ee2d085daaf29801b98a4a7169139a914ce1c7399d687ec43d9b9e3f4433f4534917294d0634194c7d330486706a11cb400526409bd2805027d2b72985fd1db8e317fa10d874d0c8b0a0a40f113806dfc79f847e3a701b63bf16ece18289e01766b0093d741d54f2de53879f9e15c03b5de160370bb9b65b8dc8addbcc52d20b2e7fc5477b962c5750bc4d9ca98c046a7dab282f5227d7c3fe78889cc5e06a10b4c7bcb35197bd62d25b54aab5f319e9913d6abbd032f6199ba6fb98f1db2ea494385e05886a9ea1bda14b3e35e3973543189660f873a7e8efc47554e28b8653473237b2a2a736909d3e8fbbbbe5f2da1ddd49b32d52539e555184451a7a07993855c84f12d61bbbdb8390c7ba72b3446bfbd326f1778fc686feb70e0c3f38d302039e3f6b7fb48ff3010cd6b4026f10b7e4f140e72bc2eddefc7c043a3370bd1edc08181eeca7999e37426d2b2d7cabac28f27571078360d80b51cc171f75a3f93fb44d9fd55b4517a6dfffa24c728193587549119347ec0c8bc6ca452b8e242bbf215480a2462f19d034029bf7c74f27d3e8406b5786dbd6fe4983270040ba10dacdd143ec0ec3ff33fd2a8ab80140b42bc9dfc0acd6bce1e3589b4f3623d2630318286c0b0b80425289bbf0f5b722c2d0a88bc43bae0b97db82571035be097cd89eee6b97c3007dac684b51393f41fe52f2e8e86c83447337455b3c6765cbd8bbd077c50adbb12bb2275d4e1b204ab133376b9fb7dd040e97102c0673b196013d3b78faecac0eb704357629e4009975f1f4787cc641a6c46b812e20c3280480cd6e469fa5ba95ba03210a875c36bac70fa8b3e1e027b93f3506f5edee4f73c1fcb78505de9dd2af3f58aee8cc591b2efcc29271ce15c7c9741ff7f04d8e706f4bc5a8dfffbc4201396ab7c0bcde571839d098aeb8823f0db94ac8ca696b96c32b072680719c605a51c5d991b64ceb0d57613afb67f3ab767505ccceea7d33782b0a8289dcb4ba05490878ee410b4398d5e2fdda34f0799e27df98802929f2f8bc3e417eb9abbbac5f911a48d5cffd2525e455eda7ff45ef4246a090adf831bf6f10e7b160d7e1ba35fe2203ecd1844cc7d3d78849767cd464c97942f17e9c46a420e9d49adfc8b94cbe44d21ed6556a4c3ff74c91fcaaf80fd687498c138f390bfccc5aa009ed24043fe725b434fd28238739ad0a084cc4a3fc5ef6f65d86e106f313b6190cab751d218d617573f7e0de58231c2a2fdec4a1b964fd98b31fd915b234697e5e9046c7d1bc27bb29b24eed11283c6ab9dd72b98c3da00bcab6abb898b2f7485647f3b4eed7eafdbcc8acd040cd60545cc5493bf34d90c7fae7c3703523f1ffaa1f1664c7752dc5a3b7950875973a7f7f22d2b97d293255da2faadd15ebbc1cc0a21957fa1862ab84fb82261dfa2d34977289a28835271ddefadc4f999ee818106d96ff05461c07c6f11e99a88aab1c4c30e887a305c1b87fd5d2585ea1f88a3fcdf9ca6762cc72e054a4e3b3bd56aef3ea69f96c2fb49e334d1787c3895fdba56fcc5a9f0306657782cf84be069265351ba84831f74247afdd364e76d99094c7bf89202abb2c67e307f90d25eaf0c766210e2493112d3d3be2991cd7073d4e3d39baab88efd0e2b950bbdd99fef45e2db725ff1de1c7e76e09ca836296b8506c6adb6d3805867e60f9728668a71f81f22a6a38110d94fecccf4512b80c9453ebcf55d5c6b0af93806ed7884077c4eb3a1745704ae926cbce9f933b25dd43b111d3c485a365ceba8e2d35638fe596f28bea6237fa090fd6e9e73f7d6a8d59009514a1ed5c99666bf0b126a8c57518206e302aefcce182b8b5529449c49146baec0e788d60c009103e9725b87faaab0d37752a18220751d9a75e4c30e28d9f587d3db2e63e7e195fee4bad231d0ac2019e25ca31a7eedfd23666c1c332e6c551cf0edb7874283993865b47693bfa1fb5f8be95dcbd0caf0ae8f89f6134114b4f581e7cc47052cc638d226f0b4b0cf682edcc0779dfe5220c45a03f9b74a1b3a9bec8f14ad1825448695d9e79d8c7f900d3cab9898f0ceb5ec2ea1ce2632c70e959bae38c063b63aaa1495045439fa9a84137068c58e85d7af732c1d68df61596bf40bdf88ce26d02cb921efe3a185af1bcad8912bc1c1ac94926d8d863b3042a66170b20e42bf3095eb474f51aa6bf75bc7abb8d26fc85f23f129c7872d7ef2cd48a35859a5c77f6d11cdcca73ef299cb73b188c381e416e4f92b73739c919168136d7a71e187e83a957c0fec4464bef436b1a605e05af960123a385372b346ff2996c05fdc479186de1cc028a4078d5c7975bda07275321ea51dbe2e9629391bf2e6d12a804fa2d85475876446242f8da2c3739d217ce6a6189dae0cf03e9343d62556dab3e644b95f4e0aa71202cb0f1b647003d4b64081d582b0f568397c003d1af6785f559eb06771f4f9f0eb8a684a205dda736c653642946bf2e6611bd98f8e5a0b6be5da45d4a4eb62c825942299bee22be5e7804dc99a880a5200995634492a9bbfdb1d000eb097eb82f910c46f08a6fd146cb74fd15eae46945c1dff95130d314382926a7d5da29b06af26d733c45258e74632c3c1a686ac94bdd05d18b4abd3df215e0a8a72b17b3c8f00e24fbb8d4446bb1a31033bb8473b6ddaf726f3ad8c7bffac689bb96f910ce1c36d2ab500ca19159721fee5eb1c6fb362552899bb61ff65a20d1af881e75fec9a012c7a53f1489ad01c1a6bc73519d69000846e7c5c539b68806df892851bf9ab25bdd12dc2bc93eea9bf97f699221f8d7fa43a99845fe92749fe8148712a501e61458336435b471851552f1d5070d6815aeec5b9e10c9707f1335b4bb572391c3d2c59177e0e00779b44fce763ed43941accd7857c40ec2fff764d4459ddfccd42da18787bbe04330ff5c6f9d97fadec46a537a55ce431c8fb2e20db6352e058f7b88b0041519d7335ce55feba105eb466e0aec089e1aff96ec29cb7ddb82ee5e42c7958d8b1105f9638709c0e879c1203e7047e0c1dabebdf9c8981cef92f9e929fa92848c4a821b99ce17bdeccb02ea4210189ec8270c5d623afe03ffc28a9887ae4179974acde26606e4431c7e231d1f66c8631f745b0dbbfd67d37a9642e4e23f2cdd4a763c166eee09f1060794312ce0f20e46371d477d8c5ffbee82a566d049bf3014716ef00acfe33827fbf8bf011b0fd0cb03d5831d6450fdca1c1486c83a731263b0e937c0492a98f0cfa32f22718c5b1c5f16592221e559abc722dd30add2e4d6b90d3635d62a83fef735fa1790f21db8ad52221221878ff21852d2b0006937dbfe7d73c1e38d99b10723b836d5db993e730b8663ffa2114b9426ffbcdea07bf1f5ac88fb1dae4aa573eee226cc934e0c44c4ee9e18ef7e06af01ccbd851331a7330cee57d107075ad219f06df1c3acb096f0d33719aa36b1dd95b248b03be96a3b210c4eaa4 +MD = 061e0be7fa3c164f342ce81295dbafdcc5fbc47486f2c8240d8f9e30399973c959b57f7cc6ea4b93a5f2d0354717eea8641191539c47f736dcaf46487f7390c0 + +Len = 102400 +Msg = a1ed9fbb03c366c30f7513bc64f45ad979ad888031c6bba8afa553866bb3a468855fede15a658e26565075b8093dda437ce32cc6c5d04bf5d9f5f7dca26589c4515ae05af6799f0e4d5796badb3b7d843a26e805b21077ab09754d5b9b10c45bade75f70fe8701439f915c090575ab635d7ea4831f0fa891e62c3e4d7f3bbff53f0c53699a181b8df206b0efad74cdaa8af3488a355347701922b0f8756fe15ab2d3a28ef4b357b4efbf7bb2fcbe491f6b8ebc601b66ba10495f8ca6a6339251ac44352731e01c7f3dc3a39b19dd898ba856e84dfad06b391fecbb9d390f3aa4d566f47c7c27d3b7841a12f22c59f3b5e954b59bfa17c0b342d02425578b4119d741c7d4fb11e2246ecdaeff5fb8f167d58e099042c523455c13ae882830107957dd9779d625b28ea1e36109d884ea67140ece76fb61fbb912be430cd3850d8b00434ab136ebabbdc564115abf44467e4fdcea934c74b0d50ed7cafb8113a119777acac543ec35798359a8383d816c742efe47305e85aa62f8692a9b596034e9678afdfd24afb98983c90dec7ac2c611587ecb94591c502777794d3584f62fc5767ccda002bd9db66cbc28be9d8fbb1d7663600964c20cee34111a10295df8734c5721f8049c4bc8e63ae1f5ce70b35f2fb6edd5a7fd457dd7387976711bf9bb9223e04b53d629879b4c20db37ee16a02c7e59414b58649d07f752ad84ba9967f0e8f4e216f3a1ba30f9cdb6fd904da814c38e957858cf166c558dfe89c23f3d0daf440576791a2b504ad0cf4bdfbe3f908e73195587efb0af5a13b1a8b95507927fb8fb9bf2fca0a145116e4762d22d48e6f0150b6c2c33780eca0e0b29428b2661380eace5aee2cbf479db19a1f139e3d3edd0c18fef666e7a9b5dd7996e92725cac84d1db9ab9775fee5dea24842d0a5d5293a0799e123aa56ee5379241e31e78fca6345b27ec4d8d593de274f1cf648d07a6d0b1a3ff84972cef519b2348d1bd11bcfaedbd45f486a3c42818a2e89a6af55178bf64f5f359bbc34d3c7c873334d10e4e19c48a1552b237e598fd3f53fc02dcc12c4bbc2ff205a954fdb469ede425e35668a48457fa70e1407d6c9e384c178ed27fbe1be16af1e98e6733b6a7d6f5853a61c6fb6385c409624d56cbf0611db0d44027dcb1ca66ca2201613608102a3a238d90b7e0fb95f67293238f2444fa8aeef8edc546194e953853a7b0b99caa4b39726b7f7764cdf199d43ab27cfb9864492e789f495f9093fae66bee62825f00a39ac01cd0c95342ff9a05fc9f90dd860c6a303161a414098e4116b6aac830a08a8df55792310f31cb6ceb35360ab33760347d4537f1c2421ced11d13978047515d174f665a5e90626d35424e87201c16d15c7a1724d8285cd70c307b899c5c56df0a3c1f32cc9083756a8925ecfaf6a5a94760ebbc13c19c854931fcf345ad9b972ec82e1ce9780277d50474029a47b503af254ba54d8473620ebe32550abf922ddb6ffda933bb61dd0b20b3589ca3b768da33b160e3e573f5d321963f5a06cd0bb680184849df242d837a6e5f608f4f517f28b78f756910a92cf8a302b217cea936c5087a8a67cbd1c47dff97846ecf460450b8718093cc0472cfe35fb166f98ee29b48c083c9bb7244b7f19176c6d9cee0584ec783da28805b03d1a6c678e045307f53baa48995879a94fecdc63bd144b9bbf4e1fdb098b52c30e8687fc21534a6eda3b98b3bcc7a2cb141bce112485ff6d815616ccbaf1b9cd3a2153bd70b05bc62d35da634d2d2717994df55fec1790e595ac64f6fde1bf368a94d893c2410f77b4d0764293b191f7a52b5a355bf1886ac2f711431a83ee67c3871e64612eede938b57637d87c67d2ff5d047cbb3c6f63cfdf269a5800cdc6b0a12e1a93a07e85808be12962b53110708afb1a521fcb3a850eaae20080e4bc188b0f9ba1bf48b156fbc0027b857818c05a48f969c32656ac29a5055a2abcb2c2edc9d1d3b2d5d680ad1aa96914c254b777f2ff4750071f0cdb20eaae27dc0e776d65a270a2ad5dc748f70674899a2b1c86011636edf7fd6cc92179449fcc39ffb6eaf8c2b656acf3756001e60d8505b9327e257cc27d58959eb39a63b9159c226e60ba0f175a2dccdb5b8205c70d4a5420701462f821985000db35559d3e9ea83ecfd0a0ec41471923f3711be0b963b6fbdfcb30b76b256398a3326074cfa658cd4021bd5e9161a4f42db66e7f11b6a769d4312e26e468960d1279cd66511efbc4ba97ad95d4e533f7133946cd9eacef125530a46e13c7b30730f3e49a4b6d59ca4619bab8913a8fd3ace3edf2e7ae55a06dafd9b680ab80300686ec3945fb3a88eb902aef51c88031009aaa157522a2b821971627b47dc72d9b1b2f6ac73066a5b1e246649bf7ceb91847c45ece719e047bcea3e936a34ea9f89bf3565a74a4caa0f8563cf72f4012fbd384f67c04112c823dc8238e87de4a23ec8124852fbe9fc1baa2a2edd89fe5b12432050742c3d83ecccdfe458f3eb826f821fdd1c97acb1b1071bc065ab3d9432416b2f5927cafb864f9a1e225389c09a51a09c5aaa1f7b6e30db2c91d4497b8b97726d05e0359f7eb9534edb0929ed2ddb66fe93afbca9b19bcadbf8a1ac618cd9f891f0d217f034be9e1ef9815658b873b58c5e24fedd19cc7d56e07fc0f6c47d4026b079ec9e56a3dce6f44899a3b8bf2ebe20867076052765160fdb41abb0f5fb93bb342dea432d923f51eb6e4ebd12351c71609c15125104a1dd5088e0d0d88d7177bd46748890409098d63eca24016b1fc72fec3abfcdfe72bf5c1146a29968487c61e0bda5908a834f95a5a68c212340a860db476be295114c7a753db4bd3e714fde67361892b27fdca61d5453e610278b8003dbb5537af60b181f4675b85294586f546e501b6aeed694105429d4942ce729e0581a8512a951d199e1741f571a3ca132d6fa9f1678a3cc29366c5131d951baeb5d09fbeea3d7235faf2e56be8b53107d0056923785facab27ba9f06ba541af9f4b022c816df189eaf002f2eb603249bd6b2299509f122c66844136c4293d9476b2a19b5d604771c6649088802150995e87bd19043ca04d9ff0e0a8bdcdabf5fc1456cce5433f776c7d656bff47449bead6a495a4d71bbad93206aadb1b2340b9f0a045bb5f4007679ae031cb6a74ddece86793b506eb00acd801d18e8a2a011ad7fc7a424cffae225d9f5e76d367cbdf2d7497d744a4ab755380914aa336c3a92ae9ef0c74d4d837260166844aa3d22c266a267e08cf07ed25018eb1febfe4ef79f7189c6f56121094a4ce76189fad7e53a6a40bdbc0c25edce31e36e55bf15835929b54a509e84919f81abec5e1aa2045b8b51326205754dbc3b46c0f61757dfe4acbd7be46d73b3679cfd0eae054cc7d2ebe2680743369a21205a3c586fdbb248e4e9803c34b717ab8525ee03229dd5a6743a87322e307e06c7680b022d6aa58db88082dd5c186473246bb6e4db5cd7df0ca3b66c2e2a9f7218b7547cbbcc60bc0fcca8514e5e43c561168bda975374869d631d3cabeea56dfb91404f7fc98addd3131b1f71515bab2470976cbf4855a20ec3e52a0d423900583cf702e328cbf6eb9e02cf2cb9552c55bf0222b904223b470b36bebcef03311701a01d4db3cd113fb586e9e95dd850dc4cf484ee4f825a3083378120bdaa0a2028632827303535b79fcff60f068d20a15f941bc6f01d05b17311faa173d7935bf969acd868ae6b3ba6047e067c1ba38c400a6eaab19c47b222ebb2a8db31d3b1bcda31c823debab3104d0735872ce286367f050058a7251bd9ee2f9bbb61d208b8de3d5f296d2a0726d31b06ef65e3758a1b6931aee5a9d4e042fbe4dc0e984a369b5a054104c31f30be41e07b70b043850521a67bffdac57f0e9ee906e12e5d7e3c0f22354b8ee37636022bf5f551d66c66b5c6879cc0d7fe7a9e1400819b2bd8e7e41ecbe9923c3f62e450239bcc188a65aef8996564f0a4b085cc9498e79a8cc56261cc87d710d56a71b5cd0b2bef262b93a67b02cdf9bad5da7888cb1b94e1fd1053ffcc66497e7731c3bded764587dfec37f31a03db88142682a5c43d0020b7775d2e6146cd83b1abe2bae8b301f6aa4213ca550f7c5693f051b32b58c5921d1de51fed7f862c3f677b8ba4ec0bbbb41ba2c85df8c66c7ac04d7aa771cd7c548c559b191a5ac049edf4f9ca284b1e24024bb4d7c6a011f21edec1e192ff29874c136a8d1e3389f9c6b7cc0270a967227c79576e82f18f23936c5281c243e0dce38954f093f8cd75792accf3cb0dddd813917ac833a32c34a65ff32e0a81e87bdb1d21ea8291d5e58eb7c046415fc96c4efce38de19d314de01f6d9070a18a8dbc399825f2e5e9728dc572a2da877306b5225b6694c7e698c8148850ff8c0e3a0c448346ebde5044ffbba8b09f6d23cfd16ba9fb5509923ae6a70b16bc28bca955a6a8f8756354826c032b1897f921ee294097f32b4b7e5ec23ec089b15edb031ec6cfe1995d3b545a04c381ca14b48c4607ebf61f75f32ae5436d52e517b56ff00ec2a95eb24ee35326379341a426d1ae2a6eae386f37c6d61cdb196039901652e548f9cd4bd557ded151f70392bde4eb0fe8c07e21925b1d33d2852badb520ccb32879ec1018d8846dd75518c7c2ee852021d7f9744e1143ee1a3e4d5c6cb4e6e12bd0c5e95e8ccb629254892a7c1602c3e099b24eb20fcfb77aedce2dfdfa29d519a660bff19e3e194a9d5da23585ec62efaeb099057e49f5bb3ab707af1b1cf8baa5c378173462f8c7d89c193362ca6414bffb3b9085390fa5cc0fd4cb3f48b2d573f8fe1977c168d0ac4f76c0d6253118749c1e9b4d286f004cde7b998d336c34b807373f8ee2d22fc17da122098431c2749a286dfe9e7c94612ce4612e678c9d1df60dd0a14d9caac02e81a1226fccdc68fd4350bf219e29b402f76b4a6c7cd949cf6716da8b300a516a00874a6e6a2cf7ce568ab83b3d86ec679cfe08c8a2b0e69a2c575f23f4161b3a051aa80a737cca1448641273c174b264bb64900568e9995d46dc589d5298c7a579a465ca4f9288d70326f55193bbae003ce30baa354e0c229cedee82b156fcb4426ba8376636da1f6e18885e1923874307c4a14070a5e7f016d14858781a636e49b89ad7203268f57182f421bc74e635044f794e83b7d1d09cd290aa11aaa4db76d26235e64dd960f4ab6023e47572df1ccbbc5cd54c73c81636ebfde3ce6603b2032ad61e4ed669dfdcf5eafaefd448358291f3ce2c75e36c4683db565051efe391174432fe06171a5ddb0064aab37838ba219ad61e7e26874a80cbd2f70ea6f2c55306882512728e7639ed8c6eb8780ebc93d955eb369b4d8a0a56bf8a4530c8e706a48a8ba182216f3737d8038b4f9dd01038b35b4749a74d470285d29d964b3f57a69ef75c50bc8fff68b230d305cf3dc040583656387ddd625a8c97bfdf65146f952e32eae3481fb60781be38a38b4dca78ad440e71b88081e33da05313fdb076f9a105f543ab67879dad766430b8465768184d14fb3e7fcd27feb7003bfb5993585f352279cfaf98b19e1dfcb440718e99021813def9226dad38a26e5d4658ee3cd08d1b8c9a3f11cbbb7eab380a169892d46eb123d0b089fd542a4684c8f5b02c5cd48884f65e1b746e6017c2fe7d9cdbf41796d1aa734ba0b81730b5687701b16bd1106aca56de321f8ae85d04edc3fdccdb6bf071b1d91dce31d3fa0e280852654d5c45fe6d819034c5c70e04b0357fc282d8890cb35bfcfd40d85aa24eee97b210141d79ec2c1316d95cdfe60c19e940d384a263c1fac6ac0be6de0d32da08bae2dffa251b09452d8e4ed7924a97c4ad9718465e22dd02455ba68c351cf52ee58b65e5e9413dade1ac45fef1b1d99771963b7ae5202e382ff8c06e035367909cd24fe5ada7f3d39bfaeb5de98b04eaf4989648e00112f0d2aadb8c5f2157b64581450359965140c141e5fb631e43469d65d1b7370eb3b396399fec32cced294a5eee46d6547f7bbd49dee148b4bc31d6c493cfd28f3908e36cb698629d53701132f3b60a29a60cf5da7c157e939735077f849999cccc78210cc598d9dcae1304c4fb5bde5fee7cd3bc67a1ef03fdda965c4d1c750c928ab8e177f27dd1299b89deaf3e3a3d7e52bdb6488c814e16a7ec2496614c99b6c610b371b038c4e98f0a46b766070a7f161d92c7df1ebb0924719e066e08b95eb4914a5edaf1fc1977eec5badb2b0f18515a168ba1ad91ffd98d94464d8fb5b3dda46ee47690c2dfdc9d2361a69094728adc0b3dda16191f4fa9ccfe06cbd5dcc8afe6ab8efc5e63447f2853ce1ce0b4490b388493419b920d2b10d59fa26001fd1c7b5c291f18ce3afc9c385bb93d07164f6709d3165e7f9b7d267322fea04c0551f59f50e03748437c46ba564ef1937a105e74a27dac0f8205d68196c6dbe367b81c1b0a2705f8e967ef7fc6c3457ffcb6e66c085ecb69492deaa704e25aeeabb7b7795fdcc807b3255f2fb30081f425a9c7990ea104b7785c288c733965965ab8906057e8c99d291e5e7325eced197b51c9a4bb2e9f1e98f95ad9ebb54302fb226d79fb3150e0d4bab4f32571d1178817b43518ede4c8306e4635753d3e5c165d176c52a0a5fb3b622856ba767415d4614ff32bc61bddc822b54917ba9cc933d156e0641d0f14e77c8444ede41f3ce5986387fea28b84e87d6ebddb12a673dbe6f17e3a91d7545e728e67c5a11ab44525b89899677de619e73b38c92ea4829504b2eddbe246e22aaa0f644a96ada47c6e16cf02ff392be2c8e262e8f6de1eea935fd54ffaa2e7d28ecee684ab203410dd45d44350077acc882ce440529b6d61fbc1e09fbf338adf8495937cc9ba8e8bd90c4e64442ffb5e8fe166d92b259a82a4a0b4d21b43f4d8f62a1339d6c4d775c935e66bc2f8d82046c98fbc67c2cbd5f6c4f9f0f5184c454b560fc3bb863a5417864362b1ac369a13ab08f0f0bb29e35af4580234fbbbafebe12f236148ddb22ac80e50fb9140555f51787dac58db3336fa780fc234699d3e931a60af52e8166ac2ee3e87ef1bd89381886c85e0094df39c031f860b7d97ac3479828ceb84093f3e8c333d10f2ab1504e0c4629dddbafaa39e3b68c81f259d8bf392e25dd91211028f37053beb574fa2278d2ad57d01b2d6f36950b279d07961319698ee0eb948d8a052c7b72e63a72206cfc7d111aa82ffaab32612b01fa87eda9996e74b864c86678d6bcde457874e249320d9c23ed4e46b21d230ef9b92aa97a0c490ba0286d48befd9c535bc56ec2ae01d34b7440f4fddba3d545cca9fad10b50a3080b45c8cb581fae748187cc5bfbfa62c1a449a06a8864dc61f36384eecdf5010c82437748c4ab47a46f661a18c37a30710c6dfd1758debcd6167c356d4277e79b8db8056b952f0c856db6d483850fc0ec353457aecd800b34ae4aa8e6f937cb178609df8e3a19717a15108816c129a895b7234c7b46e72be013553bb662e3200313bf822b3408fb04fdf9a15d08663c0ffac148276572b37afe228a860fd88b00bf5f79ed036c2db870e8bcd0bb340fad8884e71d99c11667b738f1c060a67082d150433e48b16e07164436fc6a219810e8e485d86440e928e71f2de005cb54fc02386a894477506366b2ac3a859d79bc8466b0d245709040f64b8b7f5fb5cceeba8e5c68a73c696feaba8935ae260912e391f4b5cdee90527d2496f8df042cdd72b88556e17f1d8f0ab26a583459eab6aeecdddd6df98dbfe450dce71425193ab34d91de739dd1435f30ac2cc887830a1eddb8c3965fdcebb446c9c49f96f6a904b3fe59ee37492f40bbeb2ddb5d56afebfb3202d7500288758cea0bc1e8698aef922773b1c9d99567ca83d5dd39f9fa6ebbb615c19892f89079ba373b77d662cc5ea9965ed407383cc322bf5ebbd18c4f95d176b58802deadc3b6d16cf3c1c33380014c45c4666a286c3434c04171d7e720009053bcd68d15c16c64c6bab02ead8caaf017495bbdc2fc24e0b2695f5fcdd0b00d0c8592967119476bd95b2607a30b134c43a16ba58519915d9591fea67c2e8c474090ab7d3821e441254397d0ac51e69b4b8b1aa3f73af5d5fa69d42e7a9fe1d9a06c95c3e371af9f3b128a2c32177187af54fd5b81e6cf14414f746a31bb5d3eac67f5ed0b9f25d07b26717cdcb2507bef9d681ecd9389831ac153ec49f75ad0b511206b08f0c38f762de244f4b91ff27cd30f7022c7b19ce75df7271bea674a6af6c9c0741d2526ac67611712a22c75d78437f239f9d3dc2773e29d3ffb0f062e97368fc58aa7309e815255def3f290902f96077bb06ccb6ba18ad12eafce9e80511b1b85bfe627ccfa4a9382252ebd37438e425071f8e514757445507f027df0e2dc163d235e86a830ce52d4bc2d662d5ea51560c4e4a3c25e137c4dff571f009aede2445b7cd7c0d332161f3f7b25f2df6f03150fcca1e5ca0ce89f97491c3007e51233decd9597403a5ffa1594771844409df5d92d4a0f57a50c9ddd34dfffa846289423cd3a9c063b82dde505c41e3bce487bb76316af75907af147c6e4c00a8587eda0f8516f93aa4133144bb765146c852f012a9236a24396025d5bc5419d27d298fcdb5462872afdb229d2ab9d7caff6886cd037356c32f079848febc4dea17b3e8de2ce155f222aa39c372b27c30cff0050e0904c41d31caf63bfe2fa4d86f436daab29086a245abff1e5b0848608112f33f817bbb1c86d1c61882532784cd02a79a0ffbc56a5f03fb16ac6443425cf8dac7348344a77845904653d0ddd778181d140ac91932baddb6142f6d76bfaac7410eeac266a64d4edd2d394fcfb7baac57816ca28be29c5fb67eaacce8bdb1aab17c6ae029024e133335fb78030dd9e6de4afd3021624eb185bee628a125bbc7b1797e8695a1c3bd1dc663f283c21eef39d58518e59a18fcab3aab2aaae00e46c96dec5cb36cf4732048376657bcd1eff08ccc05df734168ae5cc07a0ad5f25081c07d098a4b285ec623407b85e53a0d8cd6999d16d3131c188befbfc9ebb10d62daf9362227a9a696bf46da1724a172941ab68892a4d441702efea1f00c92a4f323288a84e6bd721885112a14604d4690c2e96f5bcccdfe3fafb6ca861fdc3dbc04d2aeb772adead5db6814858387b00935fbfa7a35467c0c75dfdf930bd80246e3be49c3b1c138542a1440717497d886dbb4d0f6c586e25fe8418b20bace191829b504b18d40811ddbde55e01bc5e78f1cdb9ad766d759c070a374331305aabb3f7f8788ed74f0b9548bfcdb605905ac603aff25ff7f09b875cf42d7fec7deb58be47950b8a3aaafffe6dc682b9a59660f97a8e977c719ce5f8b9e11635adc9077ac8212d816da8743b69e9264d10c4491bb3c2bb8f7b28b96a030eb2a07cdd36a9e4bd53415a6ca87c2e95ef34645cf4e6e64f1a957fb7682d69f6c3c16d907cc837ca1b4e736ff35d366d6c0412d8daf77c845322f1d178cf4939c7fcf27b30423bd7e40d6b3aeb4b1bc01b40aec081aa00f2e3bc63ff61ac4b684dc7ae05f7c46b475c02845606c2494e7b5e8a9c8f8afe2b5ac658a9c960cad2b3b5e2b949bb40c8d1c26139bc5f49691ac258d53b26de8e06d5426906695239a85c431d8c9346bcf3c1846ea27e869068207bf33aea2cab967db3a5af427bed7a0f41ab66e907a41094605d2facab64e1dd767f056162f488042ee83a68a26ec76360db3f28ee0ed69f779dda660247267dcaf101190c094a1d06b92e68504e0eed23259bef745db4575ca9293735c794760bd1d46da25a5b3ced90f1be100bcef0fb22f3892531286061f7929ca056ba4a9b99f5fba05839c846082ac66c1876337b5bdc929b09a12f3a01bd12fc8516800cc1cc3f90837463a267403dcf0493190628cd982047bd38477fff1684d327aad1e1eda5fd7c89738566d870b340b4163e223d167f8bdb000c9aef33e3b16c2f8d62c0cb31a3e79c516f3a0bb36d47bf75d0a179e336990b1c1ae3d793b0528291ccfc1bf78a1d32b8e90b6b39eacc796faca15ef5e875ddd848939e1f40894871a8d61499afa8cb0e8cb31bc139b0d86e1ea3224211dfecd3dc64d3d0f26ee5bf5f1541a28508e9d492c7a9e3daa35103bf2d50323355bc912eee35733681eedd88002fac9acc03adb3cf721c5e0277c306b68560dd65c182b8862f509d40c85e9c4d4b025150acec682110c5346cb12e7dc52e38609e904b11c32e03875a16b50443006e59354a3328730298ee2091a89cdfb7337d5ead3cc33bbe06950c3e636887fc2b12e86ff46d1bd3e1fbecadb3dc6cbcdc84247cea35464bd446f5b40c3192aad30ef892b2aea1e14ade2f49e2c502abbe058e83d5f07973e70d952bf1e7e978f0bdd436f075abd73e15471ab7df280032720b56827d4bc2c96968eac703f3030ea019d1205a70123631e274a5935356e47a197962444394f5daff94fe0e55c5773617f5e4b5b51ebda4800c3e8a0b1c4e5e374117ede776f6e2b7aef97f782ce5107d29902fd1794efd8e35d51bb5ccdacef361f5c2ade547012f8d5bcfd0c5b2afb7c0c5116bae749d8b761bd0e9f5041ccc309e6b1d7c50c6c5d4a787f61c7a74367ff612da2a9914f66175322e0174f82051746fac88cea429094f306e9d96fe979b959ca37a56e46d7c73c7e88e87c1ae290a18e1a6fb19b79fb54190c5b2bf59c846276e0a289c4f2b99faa008c709b44be22f336370a8000c9c4413213826db7a6a4b7086789d19f35a52fafcbd40d12e7eeb382ac9cf80d446a05c3cb1d5bb268461814bd1775c6827694fc6c5079345430566895100b88b66fed2749a3c67512711e6d6cdbb94fe9396151398be6914d0e624fbb0dc15965fa81c656bdb7e7ec4c537b3c7ca422b2171f15f82e5c1319b0619fe73c23689a344a09b91335f23e003ea6f5a33f28253755af72e0e3a1023fdabfdf44389d9c44cf563c4c487d4fb467575ef7914789c28b896f4a84234ee356196bcf09e1b5539816a510f871689157f44021a26828df490ab714468246c35c1455829c1a2b892eb2bd094eb4d1bf95e763c87a7448b7189a11e532a4320874186407fb32470d18904cdd512fd265a9968f95225132717fa146654e725ad9268d5f062e0f5108de1a1a340acab3ab1c6b8c2fa1e92e3607871f3da4d4055ffbdc0f263b9b91a109b7eeb77f6ebbba75cc2140ff22832e36b561153cb37dc27a6b3c102cbc4e0120ce910dba0133ba3c23186d44e67b809791d7941cf508292ca3ad6c095cd24fabc9ccdfc36c63d3fad73760791c5c55af8448634e84efbc97ec2ce1d86263b4330f65d5a098932b355047c1a6ac6fd408f77b2ada467aa545af7f17a3b64a583f0824965b6c0bed78f60f37d17dfc2629503990c625f009be526fb77140cf62571cd3cbfccf123f4831596b04794b729af94a3d1c089b13883fc4694be839fb03b3381b89abf2492f69eb054687a3e1e45876dae4d6c1e82ddc46d43896d24acc351d2f0ce7f134b4068eaca08f4e9b8ed7850f2479abb33593bda14032e078390a48ae8c6b582860700a08187a92c720dc3e83e6d8a19a26cbf0776ba4acacd39a8141121f6f4cb90f27c2b92eb88d22d16adf31dbeac58aeba8ffc2d47e0f204e9290a5eb7dc9494cad82889407161d1dd1ca0e6ad05de85dade14caa9ec9aa8c42424db7ccc7988d63ef8f94c98a99283bed836d998ac988c7c4110f5301f9bd5800126ba26d2c3b12b2d51744111c5a70ef9bcc8e73b4d4be501ae9e6df934a9d71fdef48e38fbf82736203c2d1301b377a5b6ff74131a9592e6e229f8c0299d93e152b0652497f7bd93f4289f55cd35a33cd3f1c1bc86f610615a0c630ce14d30e630723e2e0e5c58c73bae1a329ea9fc4f822442a028e9f7f184da3f27d22558aed6ce9bade582735065514031dc8cfd5e401b996666ed8427e0f7efb992a255abd409e03cb3f6b7c01f9693fc2d5b20d9ac5c1867d78d7f74fd09e73aa960c25db6d8be42d0457086b90277ca07a0f152154a522cd12634594774c8136cdd2934dd9f8868e0eb4824c0197e53d1daf948198ad94e0a543d454ecd04dc7373f4d1d6e2c1075c54991ac34019f23285b33c37820013e9a404d97177200e43c1bfb531271ab6b91e0de9411add5da01d99aeedb48946d57225865e07ac216442d45f5af0d7ff7da3f100b80e2ade812f1700aab6b72f746b19cc72f2fbae3b73ed10d2c49b3a1082fd01a69e94fd7c16d5e20cfd2c664ceb4c2c4ecda11d6fd164aa2716d70f18378c6c8b40ae42f78140b362fc5b63a56f57165ffc3ee747e7d56bd66c1dd70b4e2991d498d94769ead2057b38b6a03483a52b150327a47a33b9d65f38d23a50135f22110ba86369a014488436e0b460b4c0db0c76fddd6d217c8a200186918d33878ddf2d9e3f6d6d820d3c7b4c18c07f3496a4dc13ea974db7f7c75abd85293b4d458d531d23fb9f95b3f27a6b35ca4f6aee8c872c549f24d69fc3a8e98daa772ad9aa30b7c98ab2e9ed44b8c0a3e4a1fe53122c89c3db2362f293709d0387937acac42af0989143d919b1baeedba6134964d410ce80d1e5d790c5564a8f56fce79959c65a09a5defdb9b8053855951fe69450f85d4429d8ceeab7ae64998f3febb5d97756954ec0c25dd60c5faa282450420727d8563968936108fd8dba96c8e1a0d1d268d3e2a5c1667a54a731e5dd112e6543a26f8731dfa437d8285b1424740ac15c234e17fa65743352b18534869399f9c05dd899b10e24a2a2c7037dcf1d242668f85c354b48f79fab012cbacd721543226d29f762a952f801ec4c3a4547bd8fad6a96e0f4c670fda20890ef2e1730dfee52fc16c33bcfa669fa8dd0137e174b8dec86a1a37870fbfc5a4a28050d7d0e78a1978e5f2feb1c3f9440e5b63ac2188f1083ddb3d968090e58c11c0ebf4a7d85cba4b4930045e8172c1dd1ba185e452559471bc253d6b35c969e3187c7399b6a43ac200b57508875347d3a7b714c7fe53928e23b923d795b9629ef2c9fbae6aabc1657249fab8bde4fd76686d00d175332b1a7abff1cc9afc9fccb59c35efdcb676bd08b43b750b6c0c51c68df10a9d3d869f28004e532bdc49f4c9bbc963f410815128bddf4759359ce92add917b5fb9cca49544e372309f889f96ee5e139b000ba93b2e8f368f85d4c8fa27852ba4ee24b229535733928e835484ff9c05b7cd3c4eaacdf24b95a5dc75a03178225225b7504cf4539e37f1639bfbb42d4331c03bc7dc63b18d53dddd7882c4106952a6ac0666f17fba08104ffc63d7b6d5f221319c38b77305b274ff5a0aa7f5078db92c5cdf10828fed327000242ee2c1e13845562893e1b998b469a29ea4d004eaa65fdb1f1a0525cfa1ee2ea6825611e54ca07c12bda2b3eee344d8a881496950b46c0a8ed6af8594a3f00f519abdcde8a6699660fe5ffb9d4ab7848f07073da92c7c71950e29b626819e298e40bdfbd18fc92d791ec0978c31eb2fbbfeb388dc56b6999a881ac06b832107c33afea5884de8c8c5e56c91a2df0760942ef453d17a4309070d2bac4df0a12e5a5129d2f428edefac1b0cf1c99e34a0825e73a570e04a4942650481b3124528b94de68bff6a002a968747bde8b49a76ed58d886a1d0f4e2b5584c47842f367b4af6dcd790594b02ebf2c6ffe66a606a3de2cafe4c91695bc6aeab06aa909cb27314b4be903ff3fe132431bead08af04dac5f116596cd03cdf2ecbc70c7d9e529e6e1648e56223a777e52f0324d6aecd2cc9f6d5b0a9510e67a25191923d64e532cda87e780b01837dfd68d5331c864c9cb5814439901658c6d0e86d241a17f397f915673181b51c8e33853cc2215e0990533969dd6844a263803662aa5adf0234ba030bf80e68fa13502e40b92e5f8d7169c74e827b0675a87ce3780c46e39c73d81b73b6f842a3721d0aea008bb05fa8c0d2fb110f8257fc8b98b732264c48bb1a04a651886aa1155fc24180807b089b200376736de0d3c774fd280542418f754966acb306097c62e1fd4d1f55e50eb45002c98edd496e7200b9d26be1ebf7072deb8ec2ba46bac36a6417c65118fb5a1a76fc4ca6e5b263f775be4d4d720ada8e395368eb4ae59fc19fa65ebd3c56f44408159412db260321d8f294ccfd505634f8038ce33c845daf5503cde178a8ec975f1e4d675452ba458b7826a7b450e3e7d1a716e8452067fc2e34fd05f578a9db241e61ee77bff12d3558ed26c092ea6e6b46ed438d402470d443d471db4e93d8fe1eb7ef6df40e9f7f98d090499ed19270e8fb3c3b6cfcd2ec373c6c51b21255962537b25d797b641042b62f76fd021b8595271a782d57ec21191c407f2d8e1c933bc97e70d79e44925d89497036e3d1545659276b099d8418f05b338e466ff39e68559dcd95e106aaf230275fd1de7b853279a93d8a36637cc4e38ea6861da35fb5c3559e3bab74020893116a565ae3c03270e915388b51f39e9b99ee7401f47d29fbef0852635442a79a4eb94ebfcfac5d242f1c9a021625856b9b8f9881ada1cde6b23561736f12d72d2875417408f1bb7ec379380479bc813bdeb17a069872a76ae84df0428d18a134e5c6b5e356385466ec559afa435d9af3a87aa3f97b99c270d777873876ff0c97ced33473802931c5f3d8494a3cb2d97c42159ac01fbd23e1c9dcafbdf16d213e2bc5458c506b59812029cc5e2c6345bcf4a8e7c54c87d4a304a4ef39c70be71144c371968ca7d484bb71ab9cdb18e69c055c136ec99edca0d1f6d014c08066f960f63ef9fd84abb40cd76f6e1178c504bf58a52560ac43be77fad9b6a474a6dcc986361e6babe5fb5b849f3b952be9dd68c52551d75611e740da92883b91b0a4c59ae16b9ec38a40efa0c36a30da5b0d49ca1b59f7464f0272bb83f04d7c8b379d5ac6495d75a36b11526365aa2d217eaa9010a7882405f756c83557a1e03f7f99ef6d217169366309c20893cbcb4516d33e8ca2529739ae34262f260063d56200815e59a3464e121f19395c5a5dcebf0bfd15b21c48f50e5400f9c332ad54ca1c37225bb9b4f05f9b7f7f28218ac5609bf5353fb0df4001fd7c1c98ff67c49e333a408d7b5d2632c41b615fe6fb31e1cb4d73b1d403236f78c21f0b2f392dc68eb24059b3e6f773e316676972571a29e32e5771515ca43e0efb8a8689ca982975c6ab2627fa6c0a409719af8d4789222bbf6ae5ef93ce57044fe670d6c30cb12f9e075ba03f8be023c70097fe7384b3eb2933767550a6a2a5e5b931decb92450663df62e65d5edbd4cea38a8f8216c46a933b8cad3a360738e68e31698b31cd403db8a2c1fdede49ad38af1061d443ef12608905dfa856f0479ead73fabf13226531c83f9c73ee4bffe3e322ceb1807c80924e84e389bc052c7578d27d2da5a00ce926d55625cc1897846b7c9959908376517fe489b81e46af85cbbeba8f52e16d5a3c89f774c6541692ae6a5c2cf298662673913cb3ec1943382c751d74996af91d5fc9dad17b62ef97329871bc353fc279e007671da4118a04f1a2204de7b152ab37118adc69e9a4ea8e739477c6ce2dd43bd3a355e4b3d684d1c25d9bdc38ec7c290d71e6104cb93518781ef025d80abdfd727bed1c64db3043524feed5863908cbfa4a9eecf0aeef77328bb5e0f1ebaf9b605b53b9c8ea8fbcee51b7620dcae986745f677e99f872112f6529769043219c29cc1a4b44970ba4d32d7610540496ef183ac0339d28757ccb25db5527a3ac863b48b15f6c532c91cd1dab5eed98897c326739ba7eb1621092683c1b4c7fa8c0114ba954a4c17b1a18acd7ac2ed949a47f6f5461b315b0831186dc276349bf00485f72d982447f9462758b96bc595ffe4bbd70c7ded7f93ac51c3c080094579d4cfeae4c896e929726e2279d0a9b24f013cc4f5b568a94be3992cc4ba8e1fb1d9ba3ac2c2ea26c98c29d4c2d9e013110842620aace702b63cb750d40c0a521f7b0e90cf6e682562fe1e159c6eb4e1cd6095595248b5b25e2075d8fb5ec7054b23929314b5580f7b2f168e10776b440b71fd52d57219e0cbf8996c3e980b61be370fec987d010b9d87d8e725dc4e6354a342f59c135ab5832aecb3a7a21f8eff214d4263b0ac424f6e2ec7e485a5672f5e2be9ae11c158102036563d644bb39647143e7e34a1db194cded6535bb877250a81d7145696f1fa403ffc08c6d6f90c132c88f0f328ff8389b1bd7d44cebcbd0f0c66d4c821aac7f4ce4e11b10a87e8eb5cc7c1d389d6168d6f246729315e7fd5943ff851a9a901a3adf45f0b2d86b2396da3fabe0b8759c1e0b21bf32784f3c5e10987d878162fb4a295fabe881df36428c6a29bf73bd58bcb10a088f956a245ba6d8a44d41ada9176d9ebb0637531d452d5c15295191054fae6fed2effd13bee913087f06dd89a1f16a39cb06b5f7f1b67b60ca2d4a948533db3db850a1ce9934a209705586c44cdaedecf5b806ca231b5e85ed07f5e9843f97662166695c3c64c396ff0b3d14fafb0d0d18c29034d248263ba26b4395bbe6c381f7777e4411411db5146f2cff131a70a31b6c7abc66067c87d1a05c2290ef079421cc080e7e92597197c8780fff00beb6e6feedeb471d087362ef67186d240aa987ad2e43ed211ecf705f4ccc2775a04f61c01047dd5571063ea08cfdb94b75c71161186ac5b415d9887ccebdf140bd7474fa0c5a91765f484bfbf55bdc2deff7a732ef0b6e14e596c566266ac62bbf3007f308acc9477c427247c7b93e9221403166dbae5009370e10677d5b0ffc4b8802f42dc3ee916dfb9cce2da04742b2aa974603dcd35ab34a52c5fb19327c0c864d45a229691cdd7bafd64d975f044b3dc11a901c5fd1005171c9c72b9973a731d02e9066a0b072cb95a84f26eea19402972aa9f75c34c72b57bb0a19aaa9c79174f71f00fd15d4f2348c5cd55ce2340002bd77f4324cafe1eae3eb6ccfe512af1fe77681e712acf876c99c2d118cd43fe81d229b49e1617a148893ab6ff13092ba47be71c671a2e641a936b5756a1bc83390d17409bb84febbf4295ef193ca422e5f1e5601f85dc37f7252f5f043b2a2c95fac08dba1c176c96dd60dbf9488c86177bfba02708697176d1a76ebde40d594d2dcde255cc0e9253cc24140bb112b3dd7c92430a0c46bf1e2b4bfcc046e6a7a30897e50b5285fb7a91481dcd20e73a9c7631df352c046f5194859fd7de46865c3da71c571a2e067fbf556fb9f26a98c8eb52cb34c22300b59ffcae41149d73cd1f83eeb5bd5751d7c8c4705ec02d4d075e8d9d85791311bec009ceb8846c0e7a30b6d293a6a25c17202dc627f49fc5cc424acca3bb5520d18745679a9822a4d813a87e9d508f93b267e9d7b20a42918c3902ef2c0379ac9268381f53da61d58b2ad1392f558f773e02913b699bb64ecb955e6b6aebf12375e54a4c90c59a1ef808d998c62012952e82ac57cb135b4c0f09a5c7fccf4c0400710475cde44bffa3102a13ee4ac97be85aa3b362fbb227cae8819b6e37faeca6adef3167b0e7e620e33b412430148a000d1fe4adcf4b5083c47a4c1bb07e4bed0e72e5fab60e70d5f49596f46a744e1a1c695228089754ce2fe850a1c3568057f53839f35e200e46c6b19bdb7479367b0b28824e3216a31e7d645f7ceb14485c049773ee23bd3cf7cc27b655c883e1c75bc60bacc659d9d95f66bf298228028daf194a47a1468b7d97607cdfd134be7380da44b04fc157932867f62443122d51774613ac514c582c9ae455e648fc5af40ccdc3e5490daae07b00aaf98853474bdfa66668ae4f41a9592be8058a5b15ed62291fd82c6f5235c9a93405dc7bdec15aa2c91932bfd65854bf99ca0fd19db423749ef56486dbf796ca27f5a9ec62767ad3a24a692e64de0017e18053e040ecc328f7c9abe4a6ca54fbfd359b3560cfb2b18858cc1b9b9f0dbd65e4f117bdfbc3ce80c14cf9511296b73a420ad7583184b4f1e0d5f7e90fb0288d4461d8536597cde078d2455954de7455b79352b7407356656f0 +MD = 26263445024bbdbd0518b331a7ab88e7bdc8d8344a3480d1c19ad0e7c7cb22447cf88e53d2536fd215e25c5158dbc52ef56585f7ab5b771387811a9f9afbdb7f + diff --git a/vendor/ring/third_party/NIST/SHAVS/SHA512Monte.rsp b/vendor/ring/third_party/NIST/SHAVS/SHA512Monte.rsp new file mode 100644 index 00000000..032a94b6 --- /dev/null +++ b/vendor/ring/third_party/NIST/SHAVS/SHA512Monte.rsp @@ -0,0 +1,309 @@ +# CAVS 11.1 +# "SHA-512 Monte" information for "sha_values" +# SHA-512 tests are configured for BYTE oriented implementations +# Generated on Wed May 11 17:26:11 2011 + +[L = 64] + +Seed = 5c337de5caf35d18ed90b5cddfce001ca1b8ee8602f367e7c24ccca6f893802fb1aca7a3dae32dcd60800a59959bc540d63237876b799229ae71a2526fbc52cd + +COUNT = 0 +MD = ada69add0071b794463c8806a177326735fa624b68ab7bcab2388b9276c036e4eaaff87333e83c81c0bca0359d4aeebcbcfd314c0630e0c2af68c1fb19cc470e + +COUNT = 1 +MD = ef219b37c24ae507a2b2b26d1add51b31fb5327eb8c3b19b882fe38049433dbeccd63b3d5b99ba2398920bcefb8aca98cd28a1ee5d2aaf139ce58a15d71b06b4 + +COUNT = 2 +MD = c3d5087a62db0e5c6f5755c417f69037308cbce0e54519ea5be8171496cc6d18023ba15768153cfd74c7e7dc103227e9eed4b0f82233362b2a7b1a2cbcda9daf + +COUNT = 3 +MD = bb3a58f71148116e377505461d65d6c89906481fedfbcfe481b7aa8ceb977d252b3fe21bfff6e7fbf7575ceecf5936bd635e1cf52698c36ef6908ddbd5b6ae05 + +COUNT = 4 +MD = b68f0cd2d63566b3934a50666dec6d62ca1db98e49d7733084c1f86d91a8a08c756fa7ece815e20930dd7cb66351bad8c087c2f94e8757cb98e7f4b86b21a8a8 + +COUNT = 5 +MD = 937d7856a82a84c163c79417d0540c47daaf9ffe662c843737dbbcbe5f865bf6f47a9d2bd10129a4f498073094653c324a2519a1c71ac1279b1623ff7d24647a + +COUNT = 6 +MD = f8fbc058c2b9f84131c9decfa543a35ade41581f670398efd61b3abfced9c1cfcb5324f2370487f9c59a65bc668ea596c8d22ce8a33014dfad28357fa7d05f04 + +COUNT = 7 +MD = 4ab0c9484ff5c30fa64ae6e81510c5fea566eafb88f175f8bc19109f40fe80014c8b77fff10b8750778429bf3c5497e4cb92d9b30014f4cb975dff2a45244c28 + +COUNT = 8 +MD = 685179397554d276513d630234a03419808c698abf2600d7490aabb8e455c6ab6ea412c7729dc140a79dff66533c6946cbe90f9da9ed16e2e629db1651bea870 + +COUNT = 9 +MD = 335e6e941ab7dadfecdb74ea6cb4e8584b6e3408841a33a6cf7fd6a63294b1930a60983240311672acac3840a90e64cc366ce75081b2252627e9c31197ebad03 + +COUNT = 10 +MD = e3217f6af6e279e9445dc3738cbf9ba0e9edba0455844a73648139777afdea2c4d8032e214f541bf92675fb23f24df8e4fe98e0003aadfb6d8f9cc2cd799bbf7 + +COUNT = 11 +MD = ee2fdfb3ae630613b7d890977cf2515deac272a37f27e4a01961ecf103d4ff5b45cc8aef53b635dd75aa51aabf71c0642555ccd3281e0388f8ca09d83258cf30 + +COUNT = 12 +MD = 6a30d97cc98af6a25b673dce7aeab8d762bf2e55ea0c6dc899179281f84dd02a2896f77e9c106b472f55f7adbef7b1157be567ee1236ebdac2a3c5d8cb133eb5 + +COUNT = 13 +MD = ac1176abdc5f71170183d92ae55856221b0d95590af11d9d72ba605ec026bbec52d6974bc43a1efb125ff2b161fbdc616fda00f04193a0bc26aacdfa052a5741 + +COUNT = 14 +MD = 59fa909480620ecc08d34531a6da1b55158b74fc93ddf68e1d242615b6f3843a7952e63e798c6445cde1b07e0be09d0d711cb7b42a0e7760a593b08acfceb63d + +COUNT = 15 +MD = 9eb253319efa61b864f27bd334d7dd78b38d3265fb544e0c8edee950a547e1d8db921a285774ab94d66beae933298d20f2a5aa87c62fe1e383cc3b18e7af18ac + +COUNT = 16 +MD = 81735324005671f7bdad9e685ee8257f5e0622b9fcb5d38dbdfb2df27258c3e1d46d76e24c0c92c744e1b50a2b4b0d31525b3af83cc80a75722d921bdeef59c4 + +COUNT = 17 +MD = 17498cdff4323bb8021e44eca6559e05d8ff9a0ef2ee9d4ba0ac6e73f83972a0dfbb6d47728fa70311d7c82e154966e1b7678263b0f65133e9116969193d429b + +COUNT = 18 +MD = 228c4574d7c45eb9ba9240722133fce74abe00c7328ab30b4bde373dc79afdd6e0569d36268cd5eaa2f27205fc00512577bcbb6699e1d66ed85eafaba7548afb + +COUNT = 19 +MD = 3d40ccd9cc445bbecca9227c67fe455d89e0b7c1c858d32f30e2b544ca9a5a606535aea2e59fec6ec4d1ba898cc4338c6eadef9c0884bcf56aca2f481a2d7d3e + +COUNT = 20 +MD = e1e577aeac92e3a2b7f8a262bf2ac9c037d2274ca6618fbe4cc21db7c699e9946b6671ae45ea433a1e392a5bc9eec96fd641ba8f4a047f022a04a337227004df + +COUNT = 21 +MD = 5e4424c0bcb2f0f7a2428821a9d5840a82401f4440ae6bed25c53cd9e71cf9d39904d6a375bd721f4332ab0202529c91feb9c094c3e6d34ca4f66649ee6fa212 + +COUNT = 22 +MD = 56b199d63ca37189d5ca0d40006ac7bcb9f39cbdc00ef7b8a5697caa7d81d05b645a146995b1151d01958f1589337e14afc6e7dd10a815170e527a398e6ce8c3 + +COUNT = 23 +MD = d2d498ff93fb03013a64f295b5bc68e57d2fb5600da578aa011d43ff432eae3e0c800f9e2a53155e56fdbf5e068fe2b4beb3e42b2585531b8b16c4d8ca3356c6 + +COUNT = 24 +MD = 3d3875489903710f17cf4247b5842ace6f017b1a3b99e9ee5fbc04fc7898e78b12693879878028ca40c63cd0f6925fb7d0ca0412e4f06619e3ace223690f03b8 + +COUNT = 25 +MD = a013e21cd1234483c95c2ea2757be949bc79401ba39b09c316a1612d594642be65ca106e12695ac3808c57c6f2980e895fd1fe188946562afc238414e1e43649 + +COUNT = 26 +MD = c5f6367d7195489e16242f912fbe0d8002e947de3a7e9c53f77b1e5e90e05bd7ca395e787e34cb5f500c02da59c9d83de35601de7ae80dae74a0d6b4a292d43b + +COUNT = 27 +MD = 7c28c44c6aaba83c122f24d68273e28a5afd65b4071d02b7ea3300478d5118971e1356ae57cbc70d2a177ea464a1c2c50d4297b933e789c63b1481797ae8f08c + +COUNT = 28 +MD = af7cb42b1c70a85ac1ae1c2991b25b657c19f4fcf83af7f7dc0ae1028c1452a6a17dc98929634fe6ed3855b70b96bc2caa93d82037b94ebeddc77e4c1a7cc563 + +COUNT = 29 +MD = bd56ad4c0cbd162706053da929d667253aadcf417affb483fff4f2699bf406d128cfdf5196dfbb05bb89ccbf04c5147bd2ebb3156b0bc1768ca6faa171c91c01 + +COUNT = 30 +MD = 004d7b0fff9bcddf4b3913ae190a76728705a3d23874d92a8b7ff246c8fcad46623cb04723c8aded0cba4968d1a8cc1375b99005786c1bcb7ae4bf13325c3ae0 + +COUNT = 31 +MD = 8299a5bf5ed64f525c4eebbeca969fc1b91a81adb58c584bdd2d7676386a31fa546643a3cf505007584f02fb712d708cab645bf078a1b9339f5a76aee985d017 + +COUNT = 32 +MD = ce7100f3455db1a9776a9f40d562ea998afca1f9fee7e0d81c8db34cf68ad23a8bfa6fc04774703e1e56d5196b66966158fcf2a8335a58c6ba7ba1af756ba1dc + +COUNT = 33 +MD = 90aaabcb655ee921b8350229efe6064a60051cf0cac858fa3d43afd5b97cc82301bd1b8cc1f874022e5af948185638783a13ca1bbd5049ace7fbf4f6d90c201f + +COUNT = 34 +MD = 3cf0a25b33ded3e0806dfe603b9987f1d6f2b3fdcb1ec7f8566828c00e17e8f59e38b3bca302396c7525ca194e6cc8501369059e2e34ae21e3141215876847c4 + +COUNT = 35 +MD = bdc5266aee339a1ff13fcf5229773cd3d14b47101e83076927c160bb71bf7445590525a2012d52af008e118e16df1b6bfcaf8f22b4e45f9e749f3c20625a2bc8 + +COUNT = 36 +MD = ef8d2ba885381ab97756d59dbbbf53a1ea35d152b2d8f82c3518430aa34e708359194ea43950d032e151f576d343a5c3cfe6b71d4ed0ead9d3a107402589bad0 + +COUNT = 37 +MD = 194ea5324c4179998dd7057755f255fdea04dadf533f7851e3e9718b610948e32fd28323077d9421142ac808978adfa325b668c8599a2e01c757a5a14ed2dd37 + +COUNT = 38 +MD = 106984d2f0087e621dae760552bc6279072267883c204079481af6034354f1a2b77c17e6c039a1063e479342aa3ccd90330dd3fb5a7d5e976619497e2d3326cd + +COUNT = 39 +MD = a1347216f1a6db47b90c4ded3c5c75440f54c22c87d538314d1340f86f88acba01378acb933ddad0adc6b75d55bfb7e8efc9c4a531b2a410610b7515b6dac66a + +COUNT = 40 +MD = b76e4db147e0eaa4f04880654088b9d0fce518c8c377d92c846345604dc6b2b18d377fdb8e30f06d9bcfe6d7dacc07d6adff73d98d49f8f132b80f3084390830 + +COUNT = 41 +MD = acd4e527763dfd4513f0def0b1edf8ea12dc78d336b7b796f3dcc32e1068725443a2f55ab4f666b27d6bf2ab39669c98293f0a9108051fd3144d31a1ed171ddd + +COUNT = 42 +MD = 10128c15494bc87a87374f676ef9fe2df20b36ffcca41a80bd40b216637b3de710efd070e277827820a7bba3cceb7b21f8fe7f9775d6c4df4d3da5349434ec49 + +COUNT = 43 +MD = 2632dd5c188c6ed3a4610405fdda704add752f5424d9de65a51400fe478e26cd0412e5f91ca4b744c34f4954f40a3a4254431d21954623208b527b7b4daa687e + +COUNT = 44 +MD = 45707f5b6fc5ccd1f78d77f177d10fb8b462c74cc821518cd5cfa4b5d6b40b418044900693c37abbb82367d340fec67f800d74072935da1706b4d90ae26099c7 + +COUNT = 45 +MD = 56c37f31220b5b3040373d91b2c5e42fe9e601a12f7f8dc4534459bf28e484b8713db243c5782c031e674003a3c14c42fd152e7188789065e82795e10f87d54b + +COUNT = 46 +MD = 5da94c899d48bd8299fee3d81662f8d6c5f8f8bc54d18cb0368b13cebaee7ad71e74ea80f34974ad166f04f9a0602809166fe4085a475a8ca86cade12b6754c4 + +COUNT = 47 +MD = 0664363f97ba910760b0922e31ca880ca97469506cb007e3108c36c3ce3ce1801fb4197609479339e8820632b6a38bffffee05a9adc11cc544b9aa6f5b95cc6f + +COUNT = 48 +MD = 732c41a1edaa727c04f627ff158aaff67c18efd667216132b99ab84d108996a10bb008b5d803b22ed1aa78bb0d10f8a762fd34777d7dccce8e84827ba88d4193 + +COUNT = 49 +MD = fc9c21d67e393a2b05a23a17d8db630cbaebaa3def211181749f1bcad181560627fb60ee20fae2e5980cbf50fce0a19dce807e7fb75c4da0ef008bc75d413a65 + +COUNT = 50 +MD = 0453b765afc1edffa595efe345177f5805ed3abc1297ceab757ae7161723a6144cb543299f418049276d16b7896662631634fab9549127c10f27505b7dee8665 + +COUNT = 51 +MD = 3853f3bf024e0668e8d1ea53733a97537f97d9307c5f3a19864ab4eeb1654710693bb961a344dec8a758f5e64b26fcb6dd423419c4a114fa749211a9de06c281 + +COUNT = 52 +MD = 240137f0dd57beb3f7fc283bb3ead423c67883fd46f4e27471d7be57ad469a49bad03a3658418bd55614678f3a463bceff85291314b90ef43ccbcb028f0a7a07 + +COUNT = 53 +MD = f9050a5271edbe4cfdb9520ec05bbdc3cbcb9bce36fd212338d3e7028a39b9ab30793e561d75a2e424193264c7f0775e65599ef0c94e0ad24dbfe18252364267 + +COUNT = 54 +MD = 47caa7a5862fad837aaa409a4a9df2575e645528c35159115911b7c4e2f08ae49d68de97249b31b83ce2c163f649cad4559dc6e6a7191f2922d79a5fd6af167b + +COUNT = 55 +MD = 13f5825c41fa49edf6104e3e35c9c224eba93e37374f730004c39c54e7391e4a847fd61865235a3fe32224c96fbe86f7e14c3d5df496e83ec989a71b4f293a44 + +COUNT = 56 +MD = e5b55e05efe1ca6b9a96a57e3a1523d610d70f837e93b31fa98c2736d3e114d238d46ec6b6e3d19e774b253f6b0c7a2ebe69b7e60fc0874444806b2a2278df45 + +COUNT = 57 +MD = f14a586ac30f0af255f597a9aef9abba5e99c04d17b01f24427c4ee2c196b52acb1ceefc9b15cb822b3ecffdc2f7c49e11d3fc0769acee33361537d379c62e0c + +COUNT = 58 +MD = 7e2d3398807195c48e6ec52d20710bbf8b21ea8de4d1abc197897ccc58aeff40259edc67270cdae0edcc686c0d0dccc5760c1495ab1cf48482dc2000ae2d42ad + +COUNT = 59 +MD = 2f3d5c5f990bf615d5e8b396ccbd0337da39fad09b059f955a431db76a9dc720dffc4e02c0be397c7e0463799cd75fd6ab7c52bec66c8df5ef0d47e14a4c5927 + +COUNT = 60 +MD = 483a1764d308cc494a2b543d29ba616483aefdf91c7769fd084eedaac1add1891df95d317a47430b2bf73e4081f86597020e28afe2d34a22b77ea62b6112d09a + +COUNT = 61 +MD = bfa88691ec951511651c6f14af100eeb26d87729e18ac3ef49a80d73ffeaeea53e97c4a7277a7ee9f2fba070b1c9720d6cdba407dd82267019e3f0f5662b2f2b + +COUNT = 62 +MD = 4c17c8e2e7132dbf82afebc40efc77926d16f4d2c082d846dac28733aa767e2840ebf04f2563df75933466a36e11968d342e4157827605d04d9627ce9b5216c8 + +COUNT = 63 +MD = 70bbfc29a2a765220af84e7bb10d759a3152ad4b5643ef6b89966950ec7ef9503d57bc0a28c4ee789a60bf9dcac59139e15241d73b990410cf92eff213da9eca + +COUNT = 64 +MD = 8d1d56f37fc19b84984a6fa33aa9c2dbdbf79a29c04ad0b4cf20333e6bec943447be2416242f8cd2f9732e79bb925cc5a61a80c5fc9c079961243fd1c1f5900e + +COUNT = 65 +MD = 492fd0171f4dcd5d20ea6c0d34b5576c8894664ae5955e6737f5e3b711c2804d99ccca065b7ec18c82da98b18a3029b765c51ebc7c433b36492e0ed6b8511bb6 + +COUNT = 66 +MD = 7f49e8e54db7e5b4323cae2db71f3e8b8eba172dcad3602e9b7b058007a5589358732d5afffa56072a46e89b1ea27ef8d556deb86b569c635d394f15d99d8a15 + +COUNT = 67 +MD = 56884a6a9210d5f371e25823efb2511a9c410c26a441e07c1bdffe8605084267d49c315baf6a692d7d97844b2714b4930877a5d7f52cf6fa151700fcb6980546 + +COUNT = 68 +MD = 6aaef8284eef221ecb17ea3c9596f075b5155fe7b925d737ed3c6543c761c28c7cd9d9d4b5e2a37b2f183a2a367bbd34b633497bc7a1737d61c8c1f3ef295062 + +COUNT = 69 +MD = 38ef178f5688e59d47c375252db7b39f40c0c84169878ee7ba5086e4b25fea81076b9c37847e9e6bf24ae0b343689c265ec5ca7469e619acd61b0276721efb1b + +COUNT = 70 +MD = e3fe1aabad120777cf24eaae289b486632ca46ceb89afae73dbae5fa87c767879369355a9cc5c21ca604ed91d0f2f58c466573f3e6d88e52c62c0d3cb188e141 + +COUNT = 71 +MD = 82f5bd920457bb2763a0da031a7fed47b236951b1ea420c20fd2b6de1dbfbb9c4600ea7092788493e2d4be6ee24b6dba04e57af3e8f2f14d9837295420ac7631 + +COUNT = 72 +MD = 6d0b26208ba9b1615067bb3ff97b292fe67e4c02d240d649c32370e0a4cd22d03bdf864be4d24a3f5f51aeccfd1afd5191e590edeb5f7bec323b0506c3104b89 + +COUNT = 73 +MD = d081083158054d08371ec84f4d3aa5aa761734ac6091a30330a861fda056f835c750bf4f7981af1693ff28545366bd05cec47bccd77a7d237befb0135c534138 + +COUNT = 74 +MD = 6ba8b52780b8a07a2a2015dd8f0c5e7437b8e024c4ee428f7ba91dfea118cb72a939872550983317132b841b7cbc29a22b8f1cfea0c55203cafc69b55ed6244a + +COUNT = 75 +MD = 312692b0a51f002b7f06d05b39d15a5637dbddd2f4f1a73e6c88a4c841cdba5cd8e69c0939ab39bb1a9c54fa35402143c97edb9704a0e9e1a98701710f6a5dad + +COUNT = 76 +MD = aaee960de201a8dcccff95b834fccf0dafc03fe6cffc0429162bf4aff01165ab07a0c9435e9cb412121b7ba010657ccc3152118602b665072136317d92fd4262 + +COUNT = 77 +MD = 21fdff552e08c86c07f080cefacaaaf31846eb893bfe2e4f88c3c3cd8cbf592a84500942695a5e5ae971ab343ce2695dd1baeb1f94dd4b53d678e14265e421ae + +COUNT = 78 +MD = ca8f1a5b2172f6adb474da53b35e3f73ffd88263d3eecde72e48b16e1a0658015b555ee319005a1d82802e91431ee777610f9b1028d819921e1044ad426b0270 + +COUNT = 79 +MD = ce5ab25eff9c1ddc569a1eaaa66b689109ee269db7066e0b02d39b3564fd14ca6249987b7791e203d3d7c2ebf18558d2f23f94c03dd1d03aa63849e4d2889a76 + +COUNT = 80 +MD = a6f8b0561000dd4ae8b828c5f676e8c1a6474c4a042a645f1815bd52e9ff53c97dc36d5d8997f8ce332185feead76267f5b2e63f597fb3345ca0046e58fc0f24 + +COUNT = 81 +MD = fec86794bad4106c5ad1c1a2d9a1b7aae480396ec231eb5cac21c4077d17a0b652da0037363399a5a1dababa4a40e4c54b9124167580dee9108c4dbb24c57512 + +COUNT = 82 +MD = 594f5dd3f4c87bdc0d81309386e9163a9718e34c7b0dcb4613f8487aa786f9d211cfb61bb247fa9f5ecef042e710f192850f5571807294bfd8a54397850e5773 + +COUNT = 83 +MD = d81ad866f25ef6a0a6431d267114da564513e5ebdcf48db7e95db8cf32a89f0ab107874d796035db97420ffcf1db5f04dc1a52ddbbb960fc63b7f3f835cc8be6 + +COUNT = 84 +MD = 431d537e098e9949f6a68108d55d20952e3bfcdeb7273bac3917e37790a84fa5db04c33a79c113a06cf333e831d7702a00853a93fd0aa5146d934f4f71242a6a + +COUNT = 85 +MD = 4ed95636c6885ae4e63d042e82f4da830c702dbf3b9746d64770a64dd666b33208315f3a947c4dff790771ef283788a9c74da83e22b97f750286a820ee46698c + +COUNT = 86 +MD = a9bcb60b4d7724cdddddbc232b4ac70b94d0d7e9f0724b1222d918930cbb9bdbb04b3ad43e3c8caf3bf8b004ee4aec6bd527ff8eb6189b44827f7ba7057f6a90 + +COUNT = 87 +MD = d6d5e44d5bb07fc4144ab6ab309f048968f73f7992beb326047e9e2cd7af6240bc8abf46703c32fdb58fb2a8672594a660ef855be74f24cec09d4fb00219de82 + +COUNT = 88 +MD = dfda9ac0c7147530da97715ccf47814182255f2f2cf40287db97a4c63b43fcd39e6d41e560921492badb253a7dea0aba863c7c33b912bb59d1ff4de03a4f03bb + +COUNT = 89 +MD = 0395faaaf2e907f27779d6f1cc9c9db68ec390a38fbb0702c6475b46f7a399498d46fd8014f834b131e1e83abba0359b1f16d8fc0a393580615def2ad0caba73 + +COUNT = 90 +MD = 41cb98f09029abe85d24a0f131f116c7f69f54f7e91c250642606512bf3da4ca89ba70a4714a5f66d9ae81ff09317dadaff12a02057074c970f0f02a52bfafd2 + +COUNT = 91 +MD = 8e8f161d48e306c5533ed614b8ef3a1979df6db7e13d0780a73c4a3980ddf0a95f93941d412c93683e39915a660c3fbec0dbb1bb6beea2e2099cd968011535c0 + +COUNT = 92 +MD = 789593f0b8fb83ef9b3ec50ab8f6e1e47344f763d4f7ceab5600989e7b6fd5fef6ee5e487975f64474af6cd71ae4d9ecce8f009edea0227c7ebe73080b8f961b + +COUNT = 93 +MD = f37e1449e0b313d9537a6177f7a31158d353e5b79c781facf02526ec94e0c6cfda37105bac67098b194ea82efb307c2929a9ab8aca0e76c53e829e3f901cd245 + +COUNT = 94 +MD = 2e74e745caaf2d449ab3b031dd214b48616853a512cf2e95c40cb8e7594fe5e4879ac8a26d02eb35b3b96a5c9e7dcae3e15fd050a0bcc1fb3b9cb9c4df0fad3e + +COUNT = 95 +MD = 6eac7069c26082e52574ca6a58abb9b1b9faf452e8cca9f1c7023679ce192ca554892f30e38104d39088a24df35612444a0fc90084af7535fd9344fa51dded84 + +COUNT = 96 +MD = ada6caf30c4f6e3644d952366e01519af6771b406e2c447552f0c597b8dd10e9e9b4e699c9a835de03f422be8980538d9786172dfd2fe511db272a1543d5aa35 + +COUNT = 97 +MD = 4d4b0086b2cb05d713f2805caa7e6605c8f7dbbb2e0f92aa159aebdcd63060305f47b748f1bca6e0b6e11cf8f9697fcccb6584b878c4b54a699290728a40aa1b + +COUNT = 98 +MD = 97420b8a0ad102aeb92139da2c052d2748dd7d2dbb93a9ea79dc15b520d0ca7cab8cb7a00f5b5aebcb49d7e7f52a27180935ce617aeecdecba04064c668edd37 + +COUNT = 99 +MD = 4aa7dad74eb51d09a6ae7735c4b795b078f51c314f14f42a0d63071e13bdc5fd9f51612e77b36d44567502a3b5eb66c609ec017e51d8df93e58d1a44f3c1e375 + diff --git a/vendor/ring/third_party/NIST/SHAVS/SHA512ShortMsg.rsp b/vendor/ring/third_party/NIST/SHAVS/SHA512ShortMsg.rsp new file mode 100644 index 00000000..daa10f46 --- /dev/null +++ b/vendor/ring/third_party/NIST/SHAVS/SHA512ShortMsg.rsp @@ -0,0 +1,523 @@ +# CAVS 11.0 +# "SHA-512 ShortMsg" information +# SHA-512 tests are configured for BYTE oriented implementations +# Generated on Tue Mar 15 08:23:49 2011 + +[L = 64] + +Len = 0 +Msg = 00 +MD = cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e + +Len = 8 +Msg = 21 +MD = 3831a6a6155e509dee59a7f451eb35324d8f8f2df6e3708894740f98fdee23889f4de5adb0c5010dfb555cda77c8ab5dc902094c52de3278f35a75ebc25f093a + +Len = 16 +Msg = 9083 +MD = 55586ebba48768aeb323655ab6f4298fc9f670964fc2e5f2731e34dfa4b0c09e6e1e12e3d7286b3145c61c2047fb1a2a1297f36da64160b31fa4c8c2cddd2fb4 + +Len = 24 +Msg = 0a55db +MD = 7952585e5330cb247d72bae696fc8a6b0f7d0804577e347d99bc1b11e52f384985a428449382306a89261ae143c2f3fb613804ab20b42dc097e5bf4a96ef919b + +Len = 32 +Msg = 23be86d5 +MD = 76d42c8eadea35a69990c63a762f330614a4699977f058adb988f406fb0be8f2ea3dce3a2bbd1d827b70b9b299ae6f9e5058ee97b50bd4922d6d37ddc761f8eb + +Len = 40 +Msg = eb0ca946c1 +MD = d39ecedfe6e705a821aee4f58bfc489c3d9433eb4ac1b03a97e321a2586b40dd0522f40fa5aef36afff591a78c916bfc6d1ca515c4983dd8695b1ec7951d723e + +Len = 48 +Msg = 38667f39277b +MD = 85708b8ff05d974d6af0801c152b95f5fa5c06af9a35230c5bea2752f031f9bd84bd844717b3add308a70dc777f90813c20b47b16385664eefc88449f04f2131 + +Len = 56 +Msg = b39f71aaa8a108 +MD = 258b8efa05b4a06b1e63c7a3f925c5ef11fa03e3d47d631bf4d474983783d8c0b09449009e842fc9fa15de586c67cf8955a17d790b20f41dadf67ee8cdcdfce6 + +Len = 64 +Msg = 6f8d58b7cab1888c +MD = a3941def2803c8dfc08f20c06ba7e9a332ae0c67e47ae57365c243ef40059b11be22c91da6a80c2cff0742a8f4bcd941bdee0b861ec872b215433ce8dcf3c031 + +Len = 72 +Msg = 162b0cf9b3750f9438 +MD = ade217305dc34392aa4b8e57f64f5a3afdd27f1fa969a9a2608353f82b95cfb4ae84598d01575a578a1068a59b34b5045ff6d5299c5cb7ee17180701b2d1d695 + +Len = 80 +Msg = bad7c618f45be207975e +MD = 5886828959d1f82254068be0bd14b6a88f59f534061fb20376a0541052dd3635edf3c6f0ca3d08775e13525df9333a2113c0b2af76515887529910b6c793c8a5 + +Len = 88 +Msg = 6213e10a4420e0d9b77037 +MD = 9982dc2a04dff165567f276fd463efef2b369fa2fbca8cee31ce0de8a79a2eb0b53e437f7d9d1f41c71d725cabb949b513075bad1740c9eefbf6a5c6633400c7 + +Len = 96 +Msg = 6332c3c2a0a625a61df71858 +MD = 9d60375d9858d9f2416fb86fa0a2189ee4213e8710314fd1ebed0fd158b043e6e7c9a76d62c6ba1e1d411a730902309ec676dd491433c6ef66c8f116233d6ce7 + +Len = 104 +Msg = f47be3a2b019d1beededf5b80c +MD = b94292625caa28c7be24a0997eb7328062a76d9b529c0f1d568f850df6d569b5e84df07e9e246be232033ffac3adf2d18f92ab9dacfc0ecf08aff7145f0b833b + +Len = 112 +Msg = b1715f782ff02c6b88937f054116 +MD = ee1a56ee78182ec41d2c3ab33d4c41871d437c5c1ca060ee9e219cb83689b4e5a4174dfdab5d1d1096a31a7c8d3abda75c1b5e6da97e1814901c505b0bc07f25 + +Len = 120 +Msg = 9bcd5262868cd9c8a96c9e82987f03 +MD = 2e07662a001b9755ae922c8e8a95756db5341dc0f2e62ae1cf827038f33ce055f63ad5c00b65391428434ddc01e5535e7fecbf53db66d93099b8e0b7e44e4b25 + +Len = 128 +Msg = cd67bd4054aaa3baa0db178ce232fd5a +MD = 0d8521f8f2f3900332d1a1a55c60ba81d04d28dfe8c504b6328ae787925fe0188f2ba91c3a9f0c1653c4bf0ada356455ea36fd31f8e73e3951cad4ebba8c6e04 + +Len = 136 +Msg = 6ba004fd176791efb381b862e298c67b08 +MD = 112e19144a9c51a223a002b977459920e38afd4ca610bd1c532349e9fa7c0d503215c01ad70e1b2ac5133cf2d10c9e8c1a4c9405f291da2dc45f706761c5e8fe + +Len = 144 +Msg = c6a170936568651020edfe15df8012acda8d +MD = c36c100cdb6c8c45b072f18256d63a66c9843acb4d07de62e0600711d4fbe64c8cf314ec3457c90308147cb7ac7e4d073ba10f0ced78ea724a474b32dae71231 + +Len = 152 +Msg = 61be0c9f5cf62745c7da47c104597194db245c +MD = b379249a3ca5f14c29456710114ba6f6136b34c3fc9f6fb91b59d491af782d6b237eb71aaffdd38079461cf690a46d9a4ddd602d19808ab6235d1d8aa01e8200 + +Len = 160 +Msg = e07056d4f7277bc548099577720a581eec94141d +MD = 59f1856303ff165e2ab5683dddeb6e8ad81f15bb578579b999eb5746680f22cfec6dba741e591ca4d9e53904837701b374be74bbc0847a92179ac2b67496d807 + +Len = 168 +Msg = 67ebda0a3573a9a58751d4169e10c7e8663febb3a8 +MD = 13963f81cfabfca71de4739fd24a10ce3897bba1d716907fc0a28490c192a7fc3ccb8db1f91af7a2d250d6617f0dfd1519d221d618a02e3e3fa9041cf35ed1ea + +Len = 176 +Msg = 63e09db99eb4cd6238677859a567df313c8520d845b4 +MD = 9083e5348b08eb9810b2d15781d8265845410de54fe61750d4b93853690649adc6e72490bc2b7c365e2390573d9414becc0939719e0cb78eca6b2c80c2fda920 + +Len = 184 +Msg = f3e06b4bd79e380a65cb679a98ccd732563cc5ebe892e2 +MD = 6b315f106b07c59eedc5ab1df813b3c0b903060e7217cc010e9070278512a885008dac8b2472a521e77835a7f4deadc1d591aa23b624b69948a99bb60121c54e + +Len = 192 +Msg = 16b17074d3e3d97557f9ed77d920b4b1bff4e845b345a922 +MD = 6884134582a760046433abcbd53db8ff1a89995862f305b887020f6da6c7b903a314721e972bf438483f452a8b09596298a576c903c91df4a414c7bd20fd1d07 + +Len = 200 +Msg = 3edf93251349d22806bed25345fd5c190aac96d6cdb2d758b8 +MD = 299e0daf6605e5b0c30e1ec8bb98e7a3bd7b33b388bdb457452dab509594406c8e7b841e6f4e75c8d6fbd614d5eb9e56c359bfafb4285754787ab72b46dd33f0 + +Len = 208 +Msg = b2d5a14f01e6b778888c562a059ec819ad89992d16a09f7a54b4 +MD = ab2e7d745d8ad393439af2a3fbc9cdc25510d4a04e78b526e12b1c0be3b22966872ebe652e2f46ed5c5acecd2f233a9175dd295ebeb3a0706fc66fa1b137042b + +Len = 216 +Msg = 844b66f12ba0c5f9e92731f571539d1eef332e1549a49dbfa4c6de +MD = c3f9c5781925774783ae9d839772d7513dfcea8c5af8da262c196f9fe80135b2b0c8c6ca0a1604e0a3460247620de20b299f2db7871982d27c2176ae5fa7ad65 + +Len = 224 +Msg = 6b6cc692d39860b1f30203653e25d09c01e6a8043c1a9cb8b249a41e +MD = 2e5263d9a4f21b210e0e161ed39df44102864325788647261a6e70ea4b1ee0abb57b57499bc82158d82336dd53f1ef4464c6a08126e138b2cc0892f765f6af85 + +Len = 232 +Msg = ab1fc9ee845eeb205ec13725daf1fb1f5d50629b14ea9a2235a9350a88 +MD = 72d188a9df5f3b00057bca22c92c0f8228422d974302d22d4b322e7a6c8fc3b2b50ec74c6842781f29f7075c3d4bd065878648846c39bb3e4e2692c0f053f7ed + +Len = 240 +Msg = 594ed82acfc03c0e359cc560b8e4b85f6ee77ee59a70023c2b3d5b3285b2 +MD = 5ef322cb4014ecbb713a13659612a222225984d31c187debc4459ba7901f03dac775400acfe3510b306b79894fb0e8437b412150c9193ee5a2164306ebb78301 + +Len = 248 +Msg = f2c66efbf2a76c5b041860ea576103cd8c6b25e50eca9ff6a2fa88083fe9ac +MD = 7978f93ef7ed02c4a24abecba124d14dd214e1492ff1e168304c0eab89637da0f7a569c43dc4562bdb9404a018b6314fe0eebaccfb25ba76506aa7e9dcd956a7 + +Len = 256 +Msg = 8ccb08d2a1a282aa8cc99902ecaf0f67a9f21cffe28005cb27fcf129e963f99d +MD = 4551def2f9127386eea8d4dae1ea8d8e49b2add0509f27ccbce7d9e950ac7db01d5bca579c271b9f2d806730d88f58252fd0c2587851c3ac8a0e72b4e1dc0da6 + +Len = 264 +Msg = 9f8c49320af9370cd3db20e9b50d3eaa59a6232d7a86fb7d472f124508d7968b05 +MD = 81b002f15c4d48be8517f7ed89df302fb1435c9435efefed58f3eb8ea11910623f1eb9028a66e02121a7f08a7c604226f2324f483e91548dbbd2c441ab704ce5 + +Len = 272 +Msg = 4ab9aa069475e54b25e5688a52dd4acd134169c858105f01a0a1b134c72d4af51f8e +MD = 48ba5a63aba7e7bd8e420475331125a947928c67fdb00f65c4080d9a0b99c0672424e76a1ba6bd76dfe492c730f6f9adccaee7bb11571aadb31f6bb628cfa933 + +Len = 280 +Msg = f0c1d3407de92ef7421e42df5c9ab31d2ec0a750a9522869cbe4cabd66908d5823ec04 +MD = 9e75c5bca2c2af1d7739787f46e1d981c4f98e493d0724b5252c2fbae3c526719f1d27e6ccd0d705240281e8fbf3db75b9b3205c1413436d3b5d140004b8cca1 + +Len = 288 +Msg = ae8c9f8fb41b519b6d943833fe1c32d1c4292fb1ddf1dbe2eb227d9e14d31ed74ebaef12 +MD = 042f9fd0a4ed3d9fec3655ae11011c6f2bc7e457e8812b6d8be2cd45fc6c432a94558c88f22c01439618865e8e49e509c448b342ca914b120344aaf7bcbdca18 + +Len = 296 +Msg = da39fb86237f00303844e61fc6cfe779e42af53349839590bcd2f0e4cbbc279ec0b7e885d1 +MD = ecb43de8c233a731b38e30c5696f8876761b7ea72efe283fd07bedf20029f47c6d2a4427823e100fb087abaf22d7eff42a951c97c3dd05f48a20163fa4367cba + +Len = 304 +Msg = 3e7271d2070ef095394620c4b016576c150f34bea60784613a0f660d7fa5ae56872b88c58398 +MD = 8154d0da634ab2266061acc123acb407650ffe9164a22de3fe29bf05393b2aece92cf4db00ea5b4341c31ddb7de151683c8a71b5a44d5c3175790feac67d18ee + +Len = 312 +Msg = 311fb67f6a0784bb01a2d5a3f3092c407a9d3322319dff9a79f894291c5fac37319fb408402e18 +MD = 1870fe913abb0a4b4f53b6581ae18322cd05328514556607f3f4d7b6a2ac8e9185d94d947d8b9c88e0efa66d89b59f7439c75fdadd1816f7412306ab2b59d664 + +Len = 320 +Msg = 7651ab491b8fa86f969d42977d09df5f8bee3e5899180b52c968b0db057a6f02a886ad617a84915a +MD = f35e50e2e02b8781345f8ceb2198f068ba103476f715cfb487a452882c9f0de0c720b2a088a39d06a8a6b64ce4d6470dfeadc4f65ae06672c057e29f14c4daf9 + +Len = 328 +Msg = dbe5db685ed7cb848c094524c1723519d49dc66ef9fe6d57e6862a6435750bfa0a70f104f5d396e61a +MD = 2fa6e5b2c443a68050f093e7fb713bd6b18f6274c061ed61d79bf0688a61dba1940bcc30998276860943ab038902896d0fbf59b88b07c80de927037097150c40 + +Len = 336 +Msg = 9fa83e96b2a6df23fb372895015678e0b2c9cd18a8542c3eaa2c435a76ae4dc9bd5136d970daff933acf +MD = 3a2c0ec88a3e5347cf0ea9c078838300ef7356f9a6c342063277c106b880a00ed2be205c13064097bd372fde38007bc306561eb4e74bba2bb20bd354aa690ca6 + +Len = 344 +Msg = 8a5a45e398bac1d9b896b5a2b4e3566b91d80ad20c977ea7450ff2efb521d82f65019ee762e0c85c6cc841 +MD = 3c704620f4066d79c1ff67752980f39ef3d9c1023fa5a213a5265376b14a15166ffe069b51df7710d8907fef9406bf375d502ce086ac82aff17229aaa7a5a334 + +Len = 352 +Msg = 49cfffdaf4d031e33b1d28a447450545f6c4293b38d5afbcb9883976c014f080576ec691ac1bff70b742efab +MD = 8bcc4f1ea2b7862ef1591bfa73916665de8faf65439ddf5cc1be43cebfd5f60f205e835a2b186b675b041258c5cff42669316ce25b46a2f4d4218e102f0f5d6f + +Len = 360 +Msg = 2ff845d85efbc4fa5637e9448d950496f19d8d57da99b7bd3df7474822f0a790586736416714e364c6e1fae04e +MD = 236f6f4ed6e858c02d51787e60c578f731f694f8e52b5df4ecd5b04dff14c78e56bad1028d6f626c29d85aeee151a2a2846d3eed5cfafa9854a69fea8af6d04a + +Len = 368 +Msg = cfca05fd893c0f005f5ff796f4da19ba27a1e729956b8b715e67ce4b2d2a382a72ec7814f2f507b1825209a20fcc +MD = d80969284a4565add4dad6ab9b3bdf53446142f84aaf92d4b23dd22ee7241e6c81489ac8b246edcb6df9bd7b23d91a0c517f546feba4ed5790a2be6e165c1709 + +Len = 376 +Msg = cfc425759a9c36bb9f4b32eed7767af6566f68ded0adeae25c7a70ca78ec09774d16c8bc357f6d6f7bd441bf62d942 +MD = b587a785cdf455cc9c544e756c1e306300aa3c59f8725012e68ab4d54020b6d227a164d9f83c905e86f8cebeef708a69f976d6e7b18b9bf78e9b98cc4a5cd1b6 + +Len = 384 +Msg = 097c9db919515242c99d973acb1dc4ed482768f974eb83b465f9f6c82503372006e4490835e2ec8f92301130bfb790b2 +MD = ff5a376f938e73014caef7fe3962944a7230d020b7087869ebe7ec70302721cd06fcdc981c893a425d05e2f99fe198e4db50a088aee2bf1263212110efed422c + +Len = 392 +Msg = 77e73d387e7bc80419ebf5482b61d5255caf819fb59251ff6a384e75f601ea026d83ef950ed0b67518fb99dee0d8aaef1f +MD = c4c89cd882ec945cc888fb9a0127d35e585ecc14a75e4b5b3d8330538d22da28cf6af1ebec96dc247f109cd2aaab9756e6946a3d80db8363a4da3e6ddbb510a1 + +Len = 400 +Msg = 317e5d9ac73ed0633fa18ebebbca7909ec3a5ef790478f9c38cacec44f196d895835b425774483043341381e7af2d383e51a +MD = b10bb04491b9c0c334709b407cda1d503efb6b63ee944f2d366b6855e6e63e5b80115be4be7ff63edecdfb5923792e68123976d79212b3884dec2179d1fcf382 + +Len = 408 +Msg = 209461f20666a346fedf4a530f41a6fa280c43665767be923bc1d80bbcb8c9f8f93ad75782ea2689c8c5d211d2053b993145a0 +MD = 67b7a328d9444056a52ca2f695c5d3f3baafb625a14fb32eee8ff26a40ccb296bec1771a826b55f7ddb6170d4caf7795b612448e66a0f19356fe505927149b47 + +Len = 416 +Msg = 5d61aa45c446f3bf93604b0511313b4e2f306d6b046fbd94797b926746836f2e1dbdc56124060c6ca9c911b1122192d112420827 +MD = d3931bde2bde8271ed18ca0b9148b12f6f16161e637e376fc961f65bc33bcacf2f6addf26a3eaa81b196653cc37e8a739ec5b3df870d8c38c8f28691c22a39bb + +Len = 424 +Msg = 9288c795bb0b86c0419d9c5637dcc37b39bfa18d441e3fbfca75bc0306e5432e8e7b3a5627b5bc7fdc424a77520abdff566e7f2bb8 +MD = e363d0e95d8cd18c384016ebeed6d99c4fa2768e2bd58fca019c5108b9cde1cb46f3f884028a55ce282ec310a10037faa1b16b4a6a669957f0b00f350bbd63d0 + +Len = 432 +Msg = 780427dc164b2f69b8c7d569266f461e2d30c88c4cd6057fb030a6cf636f24e3c0d0db742a7b6193fdaa15eec50dfb4fae6ec7653c91 +MD = 2964b009fb1bf996de12e030b9d6e0608ae8b9dbf2acfb9beb76fc5361cc104ee85c2a46fb7b4cee90848312da302de49afe61c546477e2b25d223d5e3d33560 + +Len = 440 +Msg = ec2a92e47f692b53c1355475c71ceff0b0952a8b3541b2938270247d44e7c5cc04e17236b353da028674eab4047d89ec5dad868cfd91ce +MD = c83aca6147bfcbbc72c377efa8d53654ba0830c5a6a89e1d2a19b713e68fb534640deb833ca512247166dd273b5897e57d526f88eef58f6ff97baee0b4ee5644 + +Len = 448 +Msg = c99e31ad4e23ac68e15e605d0b02437f8147c44f5445a55b68a10905276cce8676481c33e8cd3efe322bb13fe0107bb546ccbec7b8b38d10 +MD = 52992d45a88221d972958e9f2854adaa9a21d2bf7051e1f1019ae78004da50c5b55c144a02afffe539d753949a2b056534f5b4c21f248a05baa52a6c38c7f5dd + +Len = 456 +Msg = 9aa3e8ad92777dfeb121a646ce2e918d1e12b30754bc09470d6da4af6cc9642b012f041ff046569d4fd8d0dccfe448e59feefc908d9ad5af6f +MD = 994d1cda4de40aff4713237cf9f78f7033af83369ac9c64e504091ea2f1caff6c5152d6a0c5608f82886c0093b3d7fbadd49dfd1f9e0f85accf23bc7dad48904 + +Len = 464 +Msg = 5842512c37312511a3d8ae41f5801df60cd682d58b4a997342b6e717e94006c214813e6c63e75591f957a7ec301779838bec8ae3ed7febad0805 +MD = 9763c43331ad0eb279d704c5f6e97e02da8724115026827f889e9fcda21f60fd230894ab35abb719890f3afa51afd31bc6852183b9c51059910af460abd2474d + +Len = 472 +Msg = ca14e2ea2f37c78f78ef280f58707ec549a31a94361073e37701bfe503e4c01ee1f2e123e00e81a188f08fa050825709128a9b66bb8ae6ea47e41d +MD = 4600e022a02258739f67fdd367cc1e662631fb087918768352062b9b3c8de8dbca0e9ec751b91f284694fbddb8d325c0637bccb21dd2efa92e48dbab2e5e9c26 + +Len = 480 +Msg = 647629c779b24c1e76f41744aba17159487532a0156a7d8264db50d645e9595ff81e0c96a850f2aa56c844c613a4b892727a9bfc3d3e20386766f805 +MD = 5bc842fc2d3b7eb31d2d3044df3ec32af114feaa7cfc27ebc8630f46ab6f0c543f59b812e776e5303861d17da3f1f16097641f3b808d4d5cb3e483946409746c + +Len = 488 +Msg = 1c5dc0d1dd2e4c717635ff3e9b67caf957aec0f8f63c1b1e221e800a4c14848f4ea06e644e5d3e1de592ef5a8007fa3f07171b24bd07578d68963e5cb1 +MD = cbf1ea86fa5b3dbf67be82fac41e84cccd0d296c757169b37837d273ccc015eecd102b9ce1cff68fdc7f05d22f2b774734f62ded54c8ee0bf57a5a82010d74f5 + +Len = 496 +Msg = 8a555e75477d065b3af7e615475f37c0a667f73a4c7af5e4a69f28a68d9f4434776a8f90eab7f1d137eb4b22643c0a0d6a16fcfaa1bd62f2783546a9695f +MD = c088e4a3d7da2f6f99a8f3f717361108872b8ffef921b383c24b8061d4e7c27fc56f4f20dc8f952a14043c5650b5a9e777c49c41cfeb3f2de97ee2e16b2c3924 + +Len = 504 +Msg = ebb3e2ad7803508ba46e81e220b1cff33ea8381504110e9f8092ef085afef84db0d436931d085d0e1b06bd218cf571c79338da31a83b4cb1ec6c06d6b98768 +MD = f33428d8fc67aa2cc1adcb2822f37f29cbd72abff68190483e415824f0bcecd447cb4f05a9c47031b9c50e0411c552f31cd04c30cea2bc64bcf825a5f8a66028 + +Len = 512 +Msg = c1ca70ae1279ba0b918157558b4920d6b7fba8a06be515170f202fafd36fb7f79d69fad745dba6150568db1e2b728504113eeac34f527fc82f2200b462ecbf5d +MD = 046e46623912b3932b8d662ab42583423843206301b58bf20ab6d76fd47f1cbbcf421df536ecd7e56db5354e7e0f98822d2129c197f6f0f222b8ec5231f3967d + +Len = 520 +Msg = d3ddddf805b1678a02e39200f6440047acbb062e4a2f046a3ca7f1dd6eb03a18be00cd1eb158706a64af5834c68cf7f105b415194605222c99a2cbf72c50cb14bf +MD = bae7c5d590bf25a493d8f48b8b4638ccb10541c67996e47287b984322009d27d1348f3ef2999f5ee0d38e112cd5a807a57830cdc318a1181e6c4653cdb8cf122 + +Len = 528 +Msg = 8e8ef8aa336b3b98894c3126c71878910618838c00ac8590173c91749972ff3d42a61137029ad74501684f75e1b8d1d74336aa908c44082ae9eb162e901867f54905 +MD = 41672931558a93762522b1d55389ecf1b8c0feb8b88f4587fbd417ca809055b0cb630d8bea133ab7f6cf1f21c6b35e2e25c0d19583258808e6c23e1a75336103 + +Len = 536 +Msg = 52761e1dac0eaea898e0b07cd24f4b2e6bb7bc200ea4b0528842f17b87154559a2ea94459a0e480ae0bdf9f757dd4a335aed0e510138b024a04ed1d591b4323234dbd5 +MD = b826fe80494e19c51b42f2582b2d080ba6b90512f35f2db67dd7fd5ee532eaa16498afba08b4996cbcfdf8d1a2df6b1da939e8265115a48aefa42f38205db436 + +Len = 544 +Msg = 3804ebc43cbea80c2bd7e4fda5c5515500cd2d2b846a1378dbf218d5c377138606eb3cb8ac88f9076f6ff4436f90717427c9df1ba052acbbe4585e98b6e8e0bf800f1946 +MD = 17dd6d87bc6773051e52047fd444996afa8124b0483fe121877f98553448772bd0e7751fc655e9cc2d29830211015d310f191474ca6adc0477a187c03b8fe252 + +Len = 552 +Msg = 2249d698c4d807a8e7b4de21c485738959a0d67e5d2ca6f77983dfccb5dbf47931261e1f1537f3cbca253afb6bf4fe5e7672e1dcc860b3d6c8d243afe2d9758b375e955692 +MD = 6af44563fc468d51182f6c3be58d45932af1d985c6f283976c91a9ff421f383fe21dc7322f397ccead583e26b3e3fda067976a7f34665df25a2ced7b4b09cdec + +Len = 560 +Msg = 32a9c17033658c54f22c7135ddfc879de94d79593ef2dc7d3041bfa872738389864eeda27801794ccc4ff1fcb5ef3fc48833801d6fe959e3627f8ea1536ad00fa9c7d7d9f043 +MD = 6a47699dd3ada2f11bc4ea42072b06cc20857bf164497df1285400c250f5848b6f71957dbdc845f5daeab913036661f69387893fc2d61c25fa59b9d85b19f401 + +Len = 568 +Msg = 3d65f69a590a5baaabcd274fe3ef9e88920ffc7adf05c16d7b0f4d18d72bac1e94c3b3d83b8f4c552eb80e9fde3911403f8b000579816f02e1716fd627946031d0af0793e7f3e1 +MD = ffb2d9450943c24b5933c24812459b75d3d9f380344c9bc06fa3e17ee448eca2f98ff79f7e2235ccd9f9a8176f68a2254bbc9b834d6ac8d2bfdbc1597c432c9f + +Len = 576 +Msg = 76ff8b20a18cf104f6cdb65e2ba8f66ecf844af7e85e8ef2da19e8848a16052ec405a644dafb5ca08ec48f97327ac52c0e56218402c72a9a6dc1cf344d58a716a78d7d7529680bae +MD = f8858144c6d709dd0689a526a548a43f17494950ba2ac20544799e8ea27201d78bce5b921e29a7b4029278e68341ef2a0ca4ba3894566b3c8f8950e3e545a689 + +Len = 584 +Msg = ca88dddfc876a12f45f19562bc9ca250f43267ab251a7f345c3c022e20144e135604078762ef5c8a8f038cf1b1d6a91709b59dd068396a9e971ab628f74886e765384a23607c1a1e6e +MD = 4f3d9eeef349ca51a7e419af1686f42795abde58a85335ce68d496e81e4436a80a61dc143a4300008c23a3e71f4ba98743195a3694a8d02fee11bd314569abc0 + +Len = 592 +Msg = 0a78b16b4026f7ec063db4e7b77c42a298e524e268093c5038853e217dcd65f66428650165fca06a1b4c9cf1537fb5d463630ff3bd71cf32c3538b1fdda3fed5c9f601203319b7e1869a +MD = 6095c3df5b9db7ce524d76123f77421ce888b86a477ae8c6db1d0be8d326d22c852915ab03c0c81a5b7ac71e2c14e74bda17a78d2b10585fa214f6546eb710a0 + +Len = 600 +Msg = 20f10ef9a0e6128675340171cd248df30b586557620b615ca39a00db534315a9012dbdbfd6a994986eb829dbe6cdaf3a37d4f59ac27298742c8f777b6b12677f21eb289129579868705f27 +MD = b4ead3f860eabbd36c770d66c7356f8107acd1485c7c94178c2eaabd50266d7645d009972586ef83ed43ed92882137df5117b88f35231b894ec1741ae7501145 + +Len = 608 +Msg = 995c8f747ea418f7d63aba2260b34ac3c7dceebb78438ca4b1f982b7db9798ec1a7f32622264cb024c0d9e60e955a6e1d677c923518851990a459b767d0f13cd803460f61870db3391b44693 +MD = a00a601edeaca83041dc452d438a8de549594e25d843c2cf60a0e009fb92d87abe28a72690ab657c8d35b43cd02d22ec0755de229d1f922fa6ca18a6d6c2aaae + +Len = 616 +Msg = 0feb23c7e4a19bcbd70bd300d76ec9045d696f8c9687f49ec4154400e231d2f0862495150cf250b6f12f172a7d130f8fa5d175bf2f25e280172ccdfb327951701165302728a619aa2f242631c9 +MD = eeb6dee30c119fb1e1eb5c15ff2b32d8b9c7464a4e4cc6815cd251a6bae29b49961dd5c2fa9c44a9b142ca062c7072cbf3db04299b767789040196bf0c06aa76 + +Len = 624 +Msg = ac59a110623f1a64666f160ed32926676cb5be25dd9d962f441951b0efcb5d6a67ac1a4eae473e49c6257860728853ff415c5e8ec76a8a462ecfd343eeac22dad820722c597332fbfd94ebbd32c6 +MD = f65ea942ae0a47e73b02b1442e5b26083db79307f64dd34a039c476faf18d5c514bb77a2c412a6074a7afc326ea66c74e5705fe2abbabf274333325a15b61fd9 + +Len = 632 +Msg = 9e3e1077e1333a1fb1aa633ccf2f746588ad426489ea08dff5511438b5f4c0b110d1a4d47b540a12b21ea2aa070578ccfa5c22fe0b743ec0cc621c6b3a03b75f4d3eea5dce89e03269afcd9603d0db +MD = 4b5c5df80c344c12388c723856cd06965b2190af652480476747dc2195ea3716f87c1762359583a5f31522f83f7833bec30f1f47d14540417dd463f5d258cd4a + +Len = 640 +Msg = e881e3284c79d8f5237e699e4fbca84090c664bb53229f58cb0842b0436710c9b329d98191b8f030e9c1df89b03858c1569c6ff49a7c07c4a23a8a434b0fde13be4f94cb44ee629d5b44d336090d3de6 +MD = 147d8071c7871ef9256cff32aa63ea031404fa5ee4ec09c56afdd5da919b0cc84a9d35d142c417715203316011cc620cd6855bb117063a5e52867facc680d5f4 + +Len = 648 +Msg = e58521098911503de84311387d375c25929e6e55076eb6934fd8f2b1bb7b9667fbd76d5ee204828769a341b1f716da5bdfece6c62a9f4d4f988267fce1f5615540dbe375324eef607c910d976b45a5ea5f +MD = f97ba056fa41f43b8e1987072a09e828c71c5ff6ad4e37f9ab6b89e2a078933dd23052fa72c6615b613904259e9ff9b55ef7b923b89bc8752f6babddd256e117 + +Len = 656 +Msg = 3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c9f133e5f8527f1b184830e07c3458c83a8ca9f9d9c6998760e610668ba0f22e22b656a737e978b246a17840b7dc4091da85f +MD = c8a466199acbcbc93f2ce042968508c046901631e3118a2d0bf39a9b42b4197a379b3a86cdeca9df2de1a3eb71b79ae9bf2d6575eadf1878029c4093133f54d3 + +Len = 664 +Msg = 9af608d031ccf309d7273c607a8e5e36840d449b55db5b13f03aeb9af49fa7e7cf1383ee2ed9c5a8b7515f16fb1c7c84a681590bf90f56597b844db5ebee223d78109b72350772f7c72ea996603e1e84f2ba5f +MD = f0ded9495b4f64cac585be8a737cfa14247a4a81cdf7f01ebcb134ace71f5a83df2cd72e7773fea1e82beae17e13857372792c8231e2ab9fbeb633e399d5f0ae + +Len = 672 +Msg = d0df1bdf1df6203241722fb9c9c1cf7405017497ae154538ccf9224ad752e6ce1d4ae948639aca70cfe86b2b06543cb9914ebd3085aa3e2963f6e9b93d0b03a31ae26fcb9ca974eee016c091a6fcac37b21cc1d7 +MD = c2da3ea3c8a3fd88a5bc5dea2bc076f861abedefae5a5fbd941ddfd1c41cc3312eb2dc826c2c0f65414fe72ebee447d2f9b1a6a56302660d1f86632ee80a175f + +Len = 680 +Msg = 8cbc9480553acef7bcdba9716ea8d66b4131780917de2b0b048045fcb32b5cac054808e1fce6e94ad851ecb47fe6cb802225d3551e08ea122093d0078dada564212eacf1d6394e0007cc62a1d595ab14ca08a284bc +MD = 63b39b88ceb848188b37316e04560e75a5340ab8d417932d231c997e892b41daa69d9fe3e9a14dd19ccfbbfa01488c208e7b946cfaf16ca2b1bf7c8d8da4e6b2 + +Len = 688 +Msg = 38f184448f3cf82a54cafc556aff336f23f9149e612134b3fc00c8a56455653d88640b12f69062b8432c4335ad8f7ab4ff66cb7eb54f332561a36f024d92c3e26276f4fd48619628cff88e4b8e85cf14ca4767ed990d +MD = 9a49265fc641c59f1a91872cdae490d3da73c0c60fd59648e1d17dba1a647a5b95629392bb4ff5163d1a3cb45427c1437a3b2e1d9f030c0a8bcc5ed22da9e2ed + +Len = 696 +Msg = 70900618b1e9e9db62296fb6c6590c9f10b0a632765c489c887f1ab7c07791765a62e38465e1be281b1d396c6e080b7ee3e6fa56a30b9799d0e629be153ee76f81bc6a3295aa61489bfa87d53a8ad24248a6ede0dfcfe9 +MD = 1c8c3357ff1f8d6ac4defb3af462a73e09159e3a20c6506edd8cd3052df941c81f68c5fbb893912619e28640977fe8eaae8e9d5d4e7d5f132552cefab4540bac + +Len = 704 +Msg = 4e6ddae0d805afcd10a055bce584c848d050fb29fe8f1c64b18e1abfe46b65782e6ff536e89d8d40928b41ed7371365c8080a9647f7532ce6c6d4ac21cfb0c8020783851ec9a7dbc3948f8fca7adf8b2a78c04d898d31ff6 +MD = 5c2f996c779b91b3c4639311f54fabbdde7e2212b53dbae4828c8399588fc00d3b2ae60918aaaf6bb48bc757e52b2bcea84f5d15bf4ec25d5519fb54f6f26e1b + +Len = 712 +Msg = 696825f6d6ea8173ec47d0959a401c4ddf69f8f08ddd678a4d2ff976e3a4372bb39f4159845cb63585e1d4108d32e12fa7c5c9d7ce3508a7f53aca2b4bd951adbcd8984ebb7536563f5884c90bc5023b3316f7e4dc6958f743 +MD = 3ce940ca96b00011375daa95c65f66907d69b3eb3b8d779e6fc971afcc05e990bc4c541f434590f6b18b68c080d0f24475a3e764e9cb85343301314ee2fb661e + +Len = 720 +Msg = 79ecdfd47a29a74220a52819ce4589747f2b30b364d0852cce52f91e4f0f48e61c72fa76b60d3002cae89dfc5519d3430b95c098fa4678516b5e355109ea9b3745aa41d6f8206ee64ae720f8d44653b001057f2eba7f63cd42f9 +MD = ba3d0fe04470f4cf8f08c46d82ae3afd1caea8c13bebbe026b5c1777aa59860af2e3da7751844e0be24072af48bc8a6fd77678aaee04e08f63395f5c8a465763 + +Len = 728 +Msg = 9263fe75e8f6c7d5d642e2ca6a6eea4f44e9a0f249513ed79c9409ffca5526ca4491aebb1382057cc7c36722b0b6c3b15123cde312214f25353abfe30bca170568a8e1ba5408917403a01834080ab607c56a10d0265082498fe0b6 +MD = 7736d7a7fc1eb05857ce7d88abfffa87f58c670bfdfc0a8031f60f379e4b6ad94ac8f13ffe28c697809b5cfac7f13be01e7496a85237c4025539051fb2e32fb6 + +Len = 736 +Msg = 78c17bfe0e02eb526d1a44a1ac127be082181452b625394bd6dc093a2cb432e6ee59c2f8b5503aba30dae41e1a1c6702697c99b2c94e94af48b00caf53b2e0e4e1bbee81ee282c7b2b35f58cf421a07e828d57a6622626af25835399 +MD = b56b6e343166328523e0d1693e5174da643ae83cf69c85a7b3c3bee247b77b84702069d9e6b4cab03bf17fe612009bf4239683ca78ca7e876aca7d07603ba714 + +Len = 744 +Msg = 298bb304a920f960447d8fd38b061bf8fe4ac1f871d8a0feb4549feb72ca694a5a41b6867d94cd5af77d468ad2f315d127b6c41a862800f3985e573e037740298e2c5c6186a9fb83609be2d49f8b4c31f96a2e49b56dbf09571b38587f +MD = 34e3878627904ffbbbd85266cc973c34f931e3cab5d4c31f841c553dd69f84838206067df4f9f3b9102001be19267151e673f5c2d4c2f8438a6999a0a325487d + +Len = 752 +Msg = a3cf714bf112647e727e8cfd46499acd35a640dd393ddd263cd85cf6225f59890a0686dad1c54eb8d809b81c08a98dba131bbdd6fce8ff59d95db824d8831ea480529da739227a6e0f62b603b38c35cdc2581f614a31879b8be54aeefaa0 +MD = 6f230ae4903ddbef0ba384c2e3506eab318bfd1a46ea76099f65a3fd529c91bc2865b9fd943e346de64626b8529f9db1377bf2c5e0129c66b50c6a5cfb364b3a + +Len = 760 +Msg = 0a427ae55ef3a7e6044a08cf6128cbaaabfd776c4e9374708f2ece246fd73603d2f54ac3e01d16cfac2bdaf713920d66e8f0a3d54ee68cff64267d5528cdf2f295f474d10f81173e0143488ac53fc503c444ed23dec63a080ce90c2443dba8 +MD = f6bbe5d0cf13ddf41c1436748a5d1ccae2948547b452c2171c7c8e8b66c6ae4de3c0e8b2962bcb60d3de3608479f80e455c9024d9716c38f6f1206861ab1eaac + +Len = 768 +Msg = 2cbbb87511f4948efec3a61b511ededb1dda8b6ecfc0210c11e43a77ee32dc2e374afae4268e3d30427804868232a966b56006d3214037076bf6a265b72135af0fb2ef7909fea2dea412f7717446b276ff153753662b4d4148c02347e3259169 +MD = 76897b87a8a1cf835c434f6d391c9e5227351af9d3e20a3389c796b98b424281a59068d9c8d567ec2bebc435b0126b059e2d86394a9854d6611e1c922f385496 + +Len = 776 +Msg = 2b23324c9992f60a7fc010159a03cb9a2b290df4fa6a82359b9af602f0a403a5ef33ed5da5b2caf87b77e6a4b93b650348ce2a7dbc08f8da9203d710b587ba5947c65e899f4a759f8e2b049ae7850a8e3e2962f6ef93ea4c631de5d78e729ec5bc +MD = 3beea0b373ed09cf1c919c51d86d642c9125e0ee81698dc4cbadf02e9e6925efb562fd9b87301a6377ca192be79c4118deabc450b54639000c2e312945451fb5 + +Len = 784 +Msg = 4022f930c7033b00d986c65ff6bbbdf9ebd0e58c52844ff658df3893c3202dc533f873d4a7f5a5f944419fb5528c9b6788479a1e891306acae7995fc06db70a59baa95bef7da79f5e793f2db7f2a55825e4fdb4a34884af881ded1089fd5334502a2 +MD = 0358775bbb733ccc49e78f544aeee512370d480d0e13c7e8d5c444c423e592146b45fdb91a1b694d35e36b60e4bc8397fca8bb9790e619339778b9cd1abe3fe9 + +Len = 792 +Msg = 1cb77ba43ce77e236b9fc925f589b1c070780a84f99e8f50c1ff846ac92599cfe91612c8178325bee642a34f4dffdba2aa2ebcf7064339829b26f27993e1106c139c70d578cc05f0e1a777cceddb10a2c67fd9675e4a009df8037d6eeb38f5fba233df +MD = 6502f46551a3fab3a96428fb97801d7a4aa2f17fef6603238df84e17c74309ed3d9489c8b16a9384ee634a3f86d0b3ba9a4dbc9c51ec8bd4bf8d61de6d3d87d7 + +Len = 800 +Msg = 52167de2d6c502d99fa10c27b2ab6203bdebc2cafbbfdef15872a43dd610c2362f796ad9bcb5528d95870058fa454453f1e6065b315d410a3f2650e5d71e69d78d9767dfb4accc057fd2069266b0f180cb319e30ded7535bbe52d24be151de4bb598fc5c +MD = 25cb3ed3983a91b4cf37a65193916c5e3e211b63e943e2f7b50a85d349a463b941aad33eff16561bdfdc92fda06a4e1d94b162de48f06d3c626940b31020925f + +Len = 808 +Msg = cede6697d422ddaa78e2d55ae080b8b9e9356c69bc558201a2d4b0b3190a812c27b34bbcee3a62b781378b1bf636b372bcbae1fa2f816a046a0a649a5c555c641fea4ccd841cc761f38f777972f8c91b0324e71c333ce787f04741439bf087ef5e895011c0 +MD = 0be42a25d77ac6ad995c6be48e783380bad25a61732f87cefb0cce1a769cd69081f494a1a12d657664ef2b4d9c41f2ee83f6e9a84327d8756af9f985595e7d3b + +Len = 816 +Msg = 56d18d3e2e496440d0a5c9e1bcb464faf5bc70a8b562124f5fc9e9deb5fee6544b945e833b8b5d131b773ecb2cdd780cd4e1bb9e4f1e3cb0a1d64d19cf4b30e44e6c2d0cbcb4e284ce50db7a8a8062ddb63f981d9026c532bf8eeddf8af5a43848a32262178c +MD = 982dc61c91a93770582eee8025aa55da8e9edb966bf5cf70d4a6534c0d53a2789a8c4fb65b7fed478cda02ed1e0d198d85c5c735b2417c5fab5d34e969fc8e7e + +Len = 824 +Msg = 25a7320dfaec5af65da4d0f8688e29e8e95532ecc16679ea8aff0f407d898db6922855b0e8901aa9681aa3dca617cb440764cdc7293fbeaf7f585b593c2b0531738e0ade7c8626b9995f4a84d9fc9b593d6bbee01abc53c5be14bf6956fd2fd81000dafc7c7686 +MD = 749c928c3d5510925bfe98659025b0ed7c01acd4d59a9bf1c54863a088091771dc9d407bdbf83b0f44b0902e10349ba79c84d0981d5e8c4f5c733a117fed0790 + +Len = 832 +Msg = 3d7177b28ffd916e7e0634895833ba0bd9e0653df2cc4202c811536a005aec853a505e75db55d3c7107579041099e382a1feac80dde65d72368e909ab85f56d88e68d7c3c80c38f85bf8c2b36959409cc34ba8e3ad94fe8ee1927612d672d92141a329c4dd8a88a9 +MD = 14a331508cd7d94fcce56a66bf65f20870a281c8442f8dbd4c2371454a2b66f8d0994a0b67692e771efc6a5e0b887acae7d6f4ec7338e1aa89f2abc7034c4e4c + +Len = 840 +Msg = c033e4a512297caecdbead892b11a9f7007af9a74bcab89e0bd4ffdd542ca03ea12e17a06c42bd43fc5f3f757fce4f6f5831997abac3f95676e1ebdb11ca43e11aa31e5ebabe18ce8d1bbfd8b02f482e1ce581b532e307e6960eb97441506c2ed299e1282523f41527 +MD = 95ac9b7d22aa458921874c4b4331e7d64761853217c3f83c601abcbccd7e2eaa6ca6ce9a22ebcfe5046d52f8a09097f043ab8bc59243fd770090bb432c3155e9 + +Len = 848 +Msg = 69fff0f1a3dbfb36e32f025819fa99ea9a0edaef73145bf7fcd05d8bb0a646cb3b5d5256d524856acfd2e44d6b72e4ebf1ff23c0ff6c56f821e782d5a15f7052a1445b06668eeb4af700679ee7ae26496fbd4640c06aa149964dfd6011df835ac13b73c8ff21151e8440 +MD = 45d4daa652558d1c12beb0f5662c712f325b4c802fc6eb9ee039c949d002bb786f1a732712be941f9c5c79b3e5c43064d63a38578e5a54ee526acb735b9ad45f + +Len = 856 +Msg = b2c439c97ab7c63736b3796324d68eeb7a471ed142bd9622684167d61234fff82f93f907537a909bc2e75a4bcbc133cf57197662c1af746ae8b81e5b83de05d9b589851de25d3c99c004c1dfb12d93bf50d450af49c428716f5b90ef088e3b6a6b2c46d3ce67b379599018 +MD = c48ec83be5fa669e6ec8db90aca9676cfe2ec0d5e8e7a2431687bb953c0a300be3db4075cca3bac4dfa4d971baf0fa1aff46639db4b238856ff36d1dfcd520f1 + +Len = 864 +Msg = c016f522f26b7470e922b9a287e6d45f6c28813b68c1457e36d9ba266708272f9cbc5411f8db9d8bd5a9449fb6eb0cde7d4d03e5df019f2814a90ceed377c59d7d92623899bcb0268033073559d4d8de488686cbe3d67796e6df6ad4276d0b52cc62c49ebb58d7c95287aa6c +MD = 7402f1a99b47e102b3b73140c6771b07ee6c33b3715e9c4027c441bee40511b735d95e508baea78da26fded9b7038e9a53defa58448aba40dc1e62d7ec592107 + +Len = 872 +Msg = a766b2a7ef916721f4677b67dbc65ef9b4d1bda1ad4e53fc854b0236440822152a111939e5ab2ba207719472b63fd4f4a54f4bde44a205d334a2d72cfe05abf804f41841b86d36920be6b0b529331ac163a985556c84511ec986439f83e1d7311f57d848cfa02df9ea0cf6b99a +MD = ddd60f93a3babc78299cf763e7919d45ac6f479700e1adb05ab137acdf89c1521ecb9dfeacd091e58ca57a1db964a9c3cd1fa39192cc1e9f734caa1c5fa62975 + +Len = 880 +Msg = 10f2be77a4055771a67007cd8630e3230e38288499cb160380290174d66da57455b6baaa9785c84c8a663de41ed3bd544055b9170cec43cb3eb120eceaba1fe36e3eaa3fa4f99b425cd2519f09bc0282bada52d14ce625b1ded3b24d86b1dad342d2b7be322b775b04fc6b86afb4 +MD = a872fa33d463b3343cec57c20c66979c33e1ad067bfc703454696aab5dd0003bc194318f4a8ebbc74503feb7211a472dadee991efe3e38f21a1310f8a76eac80 + +Len = 888 +Msg = 324533e685f1852e358eea8ea8b81c288b3f3beb1f2bc2b8d3fdbac318382e3d7120de30c9c237aa0a34831deb1e5e060a7969cd3a9742ec1e64b354f7eb290cba1c681c66cc7ea994fdf5614f604d1a2718aab581c1c94931b1387e4b7dc73635bf3a7301174075fa70a9227d85d3 +MD = 3b26c5170729d0814153becb95f1b65cd42f9a6d0649d914e4f69d938b5e9dc041cd0f5c8da0b484d7c7bc7b1bdefb08fe8b1bfedc81109345bc9e9a399feedf + +Len = 896 +Msg = 518985977ee21d2bf622a20567124fcbf11c72df805365835ab3c041f4a9cd8a0ad63c9dee1018aa21a9fa3720f47dc48006f1aa3dba544950f87e627f369bc2793ede21223274492cceb77be7eea50e5a509059929a16d33a9f54796cde5770c74bd3ecc25318503f1a41976407aff2 +MD = c00926a374cde55b8fbd77f50da1363da19744d3f464e07ce31794c5a61b6f9c85689fa1cfe136553527fd876be91673c2cac2dd157b2defea360851b6d92cf4 + +Len = 904 +Msg = 9159767275ba6f79cbb3d58c0108339d8c6a41138991ab7aa58b14793b545b04bda61dd255127b12cc501d5aaad476e09fa14aec21626e8d57b7d08c36cdb79eea314bdd77e65779a0b54eab08c48ceb976adf631f4246a33f7ef896887ea8b5dfa2087a225c8c180f8970696101fc283b +MD = 3cd3380a90868de17dee4bd4d7f90d7512696f0a92b2d089240d61a9d20cd3af094c78bf466c2d404dd2f662ec5f4a299be2adeadf627b98e50e1c072b769d62 + +Len = 912 +Msg = fe2d8ae200e6657fdc7494af5a12b2ae940348f1f983f0ba98febbe99c80d115126d57dbf37296765ebb5990256696588b3851d54c8fbe7ade98a6faf7c20b5e4f730f54a7f912ca0ac31bbb53d17949ef69aa0de40c7bab12a871a9b90f68813ca87af4256422a268f4a1d8ec3aa1a947fd +MD = 8025a8608df0f6a01c34cdec012d4cb25852e1b100b68172fc4e86ac8b7126b64859cb9e767a7e59060989cedbd925afc475ca7369bd43f85ae590e224e036dd + +Len = 920 +Msg = dc28484ebfd293d62ac759d5754bdf502423e4d419fa79020805134b2ce3dff738c7556c91d810adbad8dd210f041296b73c2185d4646c97fc0a5b69ed49ac8c7ced0bd1cfd7e3c3cca47374d189247da6811a40b0ab097067ed4ad40ade2e4791e39204e398b3204971445822a1be0dd93af8 +MD = 615115d2e8b62e345adaa4bdb95395a3b4fe27d71c4a111b86c1841463c5f03d6b20d164a39948ab08ae060720d05c10f6022e5c8caf2fa3bca2e04d9c539ded + +Len = 928 +Msg = 5af8c0f26db4e99b47ec2e4a01a786e77899e46d464ac337f175027b61aef3149848af849d76ac39b9b0910fe6594817859e55974fa167518ed72d088dae6b414d744d477974fb719c626da792f981233de24b7579d8acca510a266d73c0ee8ee1424343eaf6ffcc59c86c1becce5894072c6c11 +MD = 09da284d5b6556508be54c8ab6c97bbd472995c6bbd585917ecdb54ea9167208daaa070a7b2b7d8e93ce1315f0d1ef8d69667429c44dc5ee1499de57b229a398 + +Len = 936 +Msg = 49cd0ba0df5bb3f43f68464e3e83e9cbd5d5ee077ffa5591e30f939cb30c93f7d454fb3fbf8bb05327a89c08dc4baf1eef50237317a405775357f1e0d1f31d9f0f0d98124019d47bf18363b1ecfbfe155c10cbc83300e01bc9ce0347c596b35f411e6d8229ad2855e42022b0373ade98663c6d6e9c +MD = 30cbf0679a97c871574d2fc05d7aa760c6bc8a864b7d246c39b9e812f9b7ff7b4ef5197dd5b69493306688b8564de1ad47d75505c913ba6a78788f8caf5788bd + +Len = 944 +Msg = a8a37dfc083ad2f47fff468738bf8b728eb7f1907e427fa15cb4424bc685e55ed7b2825c9c60b839ccc2fe5fb33e36f570cb8661609e630bda05ee641d938428867d90e00744a4aad494c93c5f6d1327878078590cdce1e647c9820818f467641fcd508e2f2ebfd0ff3d4f272393478f3b9e6f806b43 +MD = 8e1c91729be8eb40226f6c58a029380ef7edb9dc166a5c3cdbcefe90bd30d85cb7c4b248e66abf0a3a4c842281299bef6db88858d9e5ab5244f70b7969e1c072 + +Len = 952 +Msg = 36af17595494ef793c42f48410246df07d05936a918afe74cd005e537c586b2843701f5df8952242b74586f83339b48f4ba3a66bdeb457ecdf61784eac6765cd9b8c570dd628dbba6ae5836b9ac3dbcd795f9efdb8742a35bca232abf36eb3b6698b2933965802277ba953a6edcacaf330c1e4e8c7d45f +MD = 158bfc348a30b4fabbe355a7d44bdc2122a4c850444c03f289003ce01bfc1ebf3ecc0febb6a8ff523d25db7681b05bdce048d11943ab476c1967cf6556c4a120 + +Len = 960 +Msg = 42d66edc5f22e0c13c25504c5101a5d172d2db7209e461efa323c0bfaed27e5f808042ea9c3838ea31f9b76de465225ccfbd0c09ca0d9f07e9a43e3e46c7693e00a7e1d483900ddb0a629d5563456dbbf299ac91f92c3d3c17b05d180e6c87c6c93194c39d90273fcf4a482c56084f95e34c04311fa80438 +MD = 061afb119a3c60876e04c10f12ad0f4b977593dc5a2d21096a57e7d3f7d4d44fdef934b2c17d7530674e4f4a1c176dbdcc54811a22e1b8712e4192fc2d4bf8e8 + +Len = 968 +Msg = f91bb2e1a9c4cd96bf250426b3a6afd9b87ac51e93254d2dae3b16ec686ba80fb0bd7a84d218660e9007593075bc4f4c66567f0c7a5fd2010c999a8a0efa81f89ff5bfefe0fb910f0442e6d4a7c55bbb618c69a79a2ddd82a0938927f6fe3a80f04beaeb7c7636e3435d12dcf1c6bb6ed0a4edb69c9657fa93 +MD = 6e692c8c694ee0a3565f37a299e0006b85ab4a821b20e76798220229f656efc6a20211a4e7e4ed77facde0d70e4d5d95bc8ed1d7a56d8df1446d562f044b344c + +Len = 976 +Msg = d1eb961ca6a8f67c49b61e4d3ceaa2a1de6f0ea927b132bf987abdaa725b0e1e274e46830e99a2f75af608964df0dff9a99024fc6839bac5acd10202f921ac71a27fcda681aa3109ebf5f21ee3a849098ea3a551e844fae4b48b5c5bb97ccc802bc5520d68a14cb7e5fc056b67d889d876efb82d0e9a9a2499f1 +MD = 39b2c76ec207120de4b320c7fe069e602c9c38f257596da7369395e87eb64b3acff988c1839ac269d5012c093f9edd4b7cabf13bdea7d42e969ab108269c6ab0 + +Len = 984 +Msg = adf2263200f376886ba7b6f5e4411d5f07f7d9d101590c73ace114bafbcb0fdc99269e87cd2cead2a1cfe5744394d333aba408a07e21f30233b65b907472e9e3c7d6e7aa6d2c47a08a1be7bb877913a6b5604c723384478911c339e3b5fe527c7e288705a89c95d970b443347897e79f6c522bafe62b11ef8f3135 +MD = 3c23d2d8cf4db6ac6a42e27208180f37668bef5ee0a3f879483c8e604e7f42583f202037b8d242c04a87345b8be6dc8b121d6484b9edad0d73c894c1288f5cae + +Len = 992 +Msg = 18e75b47d898ac629c48e80dbfb75dae1e1700b771165eccdb18d628bfc4063dd6c3839a7ec4cd1255c4821b078cd174647b320bb685541d517c579f6b8e3cdd2e109a610c7a921653b204ad018d0340d9938735b60262662016767e1d8824a64954086229c0e3b5bd9ad88c54c1dc5aa4e768ff1a9470ee6f6e998f +MD = 01c756b7c20b5f95fd2b079ab6a50f28b946fb16266b07c6060945dc4fe9e0d279c5b1505b9ec7d8f8f3c9ebf0c5ee9365aec08cf278d65b64daeccc19d3cbf4 + +Len = 1000 +Msg = c2963342cfaa88ccd102a258e6d629f6b0d367dd55116502ca4451ea523623bc4175819a0648df3168e8ea8f10ed27354807d76e02ee1fdf1c9c655ee2b9fd08d557058dabdf8dcf964bfcacc996ae173971e26ea038d407c824260d06c2848a04a488c4c456dbcde2939e561ab908c4097b508638d6cda556465c9cc5 +MD = a4d2f59393a5fea612c3c745f4bb9f41aaf3a3ce1679aa8afc1a62baa4ed452819418c8ae1a1e658757976692390fc43d4decf7d855cd8b498b6dc60cae05a90 + +Len = 1008 +Msg = 85360c3d4257d9878e2f5c16d3cd7d0747df3d231e1a8f63fddc69b3b1101af72153de4c8154b090c9815f2466e0e4f02f3af3a89a7fd04e306664f93e5490d4ce7fc169d553c520ae15dd02c7c613c39b4acd00e0c9a3c501566e52cecea11f7303dd1da61abf3f2532fd396047b1887255f4b256c0afcf58f3ae48c947 +MD = e8352ddcac59e377ea0f9c32bbb43dfd1b6c829fad1954240c41b7c45b0b09db11064b64e2442a96f6530aac2c4abf3beb1eae77f2bce4efe88fee1a70cf5423 + +Len = 1016 +Msg = c13e6ca3abb893aa5f82c4a8ef754460628af6b75af02168f45b72f8f09e45ed127c203bc7bb80ff0c7bd96f8cc6d8110868eb2cfc01037d8058992a6cf2effcbfe498c842e53a2e68a793867968ba18efc4a78b21cdf6a11e5de821dcabab14921ddb33625d48a13baffad6fe8272dbdf4433bd0f7b813c981269c388f001 +MD = 6e56f77f6883d0bd4face8b8d557f144661989f66d51b1fe4b8fc7124d66d9d20218616fea1bcf86c08d63bf8f2f21845a3e519083b937e70aa7c358310b5a7c + +Len = 1024 +Msg = fd2203e467574e834ab07c9097ae164532f24be1eb5d88f1af7748ceff0d2c67a21f4e4097f9d3bb4e9fbf97186e0db6db0100230a52b453d421f8ab9c9a6043aa3295ea20d2f06a2f37470d8a99075f1b8a8336f6228cf08b5942fc1fb4299c7d2480e8e82bce175540bdfad7752bc95b577f229515394f3ae5cec870a4b2f8 +MD = a21b1077d52b27ac545af63b32746c6e3c51cb0cb9f281eb9f3580a6d4996d5c9917d2a6e484627a9d5a06fa1b25327a9d710e027387fc3e07d7c4d14c6086cc + diff --git a/vendor/ring/third_party/NIST/sha256sums.txt b/vendor/ring/third_party/NIST/sha256sums.txt new file mode 100644 index 00000000..ca42d188 --- /dev/null +++ b/vendor/ring/third_party/NIST/sha256sums.txt @@ -0,0 +1 @@ +0ac90b0d5fba398319d8a4697dce0eb88ae3b3eacf69473a9249e6bea46456e4 *shabytetestvectors.zip diff --git a/vendor/ring/third_party/fiat/.gitattributes b/vendor/ring/third_party/fiat/.gitattributes new file mode 100644 index 00000000..20a76bc4 --- /dev/null +++ b/vendor/ring/third_party/fiat/.gitattributes @@ -0,0 +1,2 @@ +curve25519_32.h linguist-generated=true +curve25519_64.h linguist-generated=true diff --git a/vendor/ring/third_party/fiat/LICENSE b/vendor/ring/third_party/fiat/LICENSE new file mode 100644 index 00000000..bd46c613 --- /dev/null +++ b/vendor/ring/third_party/fiat/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015-2016 the fiat-crypto authors (see +https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS). + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/ring/third_party/fiat/METADATA b/vendor/ring/third_party/fiat/METADATA new file mode 100644 index 00000000..e527c140 --- /dev/null +++ b/vendor/ring/third_party/fiat/METADATA @@ -0,0 +1,13 @@ +name: "fiat" +description: "Fiat-Crypto: Synthesizing Correct-by-Construction Code for Cryptographic Primitives." + +third_party { + url { + type: GIT + value: "https://github.com/mit-plv/fiat-crypto" + } + version: "0884b6d374a9d937c44bf024fe3a647ffae2c540" + last_upgrade_date { year: 2020 month: 4 day: 16 } + + local_modifications: "Files renamed to .h for BoringSSL integration. Select functions patched with value barriers." +} diff --git a/vendor/ring/third_party/fiat/README.md b/vendor/ring/third_party/fiat/README.md new file mode 100644 index 00000000..56accd45 --- /dev/null +++ b/vendor/ring/third_party/fiat/README.md @@ -0,0 +1,8 @@ +# Fiat + +This directory contains code generated by +[Fiat](https://github.com/mit-plv/fiat-crypto) and thus these files are +licensed under the MIT license. (See LICENSE file.) + +The files are imported from the `fiat-c/src` directory of the Fiat repository. +Their contents are `#include`d into source files, so we rename them to `.h`. diff --git a/vendor/ring/third_party/fiat/curve25519_32.h b/vendor/ring/third_party/fiat/curve25519_32.h new file mode 100644 index 00000000..7b78d00d --- /dev/null +++ b/vendor/ring/third_party/fiat/curve25519_32.h @@ -0,0 +1,981 @@ +/* Autogenerated: src/ExtractionOCaml/unsaturated_solinas --static 25519 10 '2^255 - 19' 32 carry_mul carry_square carry add sub opp selectznz to_bytes from_bytes carry_scmul121666 */ +/* curve description: 25519 */ +/* requested operations: carry_mul, carry_square, carry, add, sub, opp, selectznz, to_bytes, from_bytes, carry_scmul121666 */ +/* n = 10 (from "10") */ +/* s-c = 2^255 - [(1, 19)] (from "2^255 - 19") */ +/* machine_wordsize = 32 (from "32") */ + +/* Computed values: */ +/* carry_chain = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1] */ + +#include +typedef unsigned char fiat_25519_uint1; +typedef signed char fiat_25519_int1; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + + +/* + * The function fiat_25519_addcarryx_u26 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^26 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^26⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0x3ffffff] + * arg3: [0x0 ~> 0x3ffffff] + * Output Bounds: + * out1: [0x0 ~> 0x3ffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_25519_addcarryx_u26(uint32_t* out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint32_t arg2, uint32_t arg3) { + uint32_t x1 = ((arg1 + arg2) + arg3); + uint32_t x2 = (x1 & UINT32_C(0x3ffffff)); + fiat_25519_uint1 x3 = (fiat_25519_uint1)(x1 >> 26); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_25519_subborrowx_u26 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^26 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^26⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0x3ffffff] + * arg3: [0x0 ~> 0x3ffffff] + * Output Bounds: + * out1: [0x0 ~> 0x3ffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_25519_subborrowx_u26(uint32_t* out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint32_t arg2, uint32_t arg3) { + int32_t x1 = ((int32_t)(arg2 - arg1) - (int32_t)arg3); + fiat_25519_int1 x2 = (fiat_25519_int1)(x1 >> 26); + uint32_t x3 = (x1 & UINT32_C(0x3ffffff)); + *out1 = x3; + *out2 = (fiat_25519_uint1)(0x0 - x2); +} + +/* + * The function fiat_25519_addcarryx_u25 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^25 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^25⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0x1ffffff] + * arg3: [0x0 ~> 0x1ffffff] + * Output Bounds: + * out1: [0x0 ~> 0x1ffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_25519_addcarryx_u25(uint32_t* out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint32_t arg2, uint32_t arg3) { + uint32_t x1 = ((arg1 + arg2) + arg3); + uint32_t x2 = (x1 & UINT32_C(0x1ffffff)); + fiat_25519_uint1 x3 = (fiat_25519_uint1)(x1 >> 25); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_25519_subborrowx_u25 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^25 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^25⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0x1ffffff] + * arg3: [0x0 ~> 0x1ffffff] + * Output Bounds: + * out1: [0x0 ~> 0x1ffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_25519_subborrowx_u25(uint32_t* out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint32_t arg2, uint32_t arg3) { + int32_t x1 = ((int32_t)(arg2 - arg1) - (int32_t)arg3); + fiat_25519_int1 x2 = (fiat_25519_int1)(x1 >> 25); + uint32_t x3 = (x1 & UINT32_C(0x1ffffff)); + *out1 = x3; + *out2 = (fiat_25519_uint1)(0x0 - x2); +} + +/* + * The function fiat_25519_cmovznz_u32 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + */ +static void fiat_25519_cmovznz_u32(uint32_t* out1, fiat_25519_uint1 arg1, uint32_t arg2, uint32_t arg3) { + fiat_25519_uint1 x1 = (!(!arg1)); + uint32_t x2 = ((fiat_25519_int1)(0x0 - x1) & UINT32_C(0xffffffff)); + // Note this line has been patched from the synthesized code to add value + // barriers. + // + // Clang recognizes this pattern as a select. While it usually transforms it + // to a cmov, it sometimes further transforms it into a branch, which we do + // not want. + uint32_t x3 = ((value_barrier_u32(x2) & arg3) | (value_barrier_u32(~x2) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_25519_carry_mul multiplies two field elements and reduces the result. + * Postconditions: + * eval out1 mod m = (eval arg1 * eval arg2) mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999]] + * arg2: [[0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999]] + * Output Bounds: + * out1: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]] + */ +static void fiat_25519_carry_mul(uint32_t out1[10], const uint32_t arg1[10], const uint32_t arg2[10]) { + uint64_t x1 = ((uint64_t)(arg1[9]) * ((arg2[9]) * UINT8_C(0x26))); + uint64_t x2 = ((uint64_t)(arg1[9]) * ((arg2[8]) * UINT8_C(0x13))); + uint64_t x3 = ((uint64_t)(arg1[9]) * ((arg2[7]) * UINT8_C(0x26))); + uint64_t x4 = ((uint64_t)(arg1[9]) * ((arg2[6]) * UINT8_C(0x13))); + uint64_t x5 = ((uint64_t)(arg1[9]) * ((arg2[5]) * UINT8_C(0x26))); + uint64_t x6 = ((uint64_t)(arg1[9]) * ((arg2[4]) * UINT8_C(0x13))); + uint64_t x7 = ((uint64_t)(arg1[9]) * ((arg2[3]) * UINT8_C(0x26))); + uint64_t x8 = ((uint64_t)(arg1[9]) * ((arg2[2]) * UINT8_C(0x13))); + uint64_t x9 = ((uint64_t)(arg1[9]) * ((arg2[1]) * UINT8_C(0x26))); + uint64_t x10 = ((uint64_t)(arg1[8]) * ((arg2[9]) * UINT8_C(0x13))); + uint64_t x11 = ((uint64_t)(arg1[8]) * ((arg2[8]) * UINT8_C(0x13))); + uint64_t x12 = ((uint64_t)(arg1[8]) * ((arg2[7]) * UINT8_C(0x13))); + uint64_t x13 = ((uint64_t)(arg1[8]) * ((arg2[6]) * UINT8_C(0x13))); + uint64_t x14 = ((uint64_t)(arg1[8]) * ((arg2[5]) * UINT8_C(0x13))); + uint64_t x15 = ((uint64_t)(arg1[8]) * ((arg2[4]) * UINT8_C(0x13))); + uint64_t x16 = ((uint64_t)(arg1[8]) * ((arg2[3]) * UINT8_C(0x13))); + uint64_t x17 = ((uint64_t)(arg1[8]) * ((arg2[2]) * UINT8_C(0x13))); + uint64_t x18 = ((uint64_t)(arg1[7]) * ((arg2[9]) * UINT8_C(0x26))); + uint64_t x19 = ((uint64_t)(arg1[7]) * ((arg2[8]) * UINT8_C(0x13))); + uint64_t x20 = ((uint64_t)(arg1[7]) * ((arg2[7]) * UINT8_C(0x26))); + uint64_t x21 = ((uint64_t)(arg1[7]) * ((arg2[6]) * UINT8_C(0x13))); + uint64_t x22 = ((uint64_t)(arg1[7]) * ((arg2[5]) * UINT8_C(0x26))); + uint64_t x23 = ((uint64_t)(arg1[7]) * ((arg2[4]) * UINT8_C(0x13))); + uint64_t x24 = ((uint64_t)(arg1[7]) * ((arg2[3]) * UINT8_C(0x26))); + uint64_t x25 = ((uint64_t)(arg1[6]) * ((arg2[9]) * UINT8_C(0x13))); + uint64_t x26 = ((uint64_t)(arg1[6]) * ((arg2[8]) * UINT8_C(0x13))); + uint64_t x27 = ((uint64_t)(arg1[6]) * ((arg2[7]) * UINT8_C(0x13))); + uint64_t x28 = ((uint64_t)(arg1[6]) * ((arg2[6]) * UINT8_C(0x13))); + uint64_t x29 = ((uint64_t)(arg1[6]) * ((arg2[5]) * UINT8_C(0x13))); + uint64_t x30 = ((uint64_t)(arg1[6]) * ((arg2[4]) * UINT8_C(0x13))); + uint64_t x31 = ((uint64_t)(arg1[5]) * ((arg2[9]) * UINT8_C(0x26))); + uint64_t x32 = ((uint64_t)(arg1[5]) * ((arg2[8]) * UINT8_C(0x13))); + uint64_t x33 = ((uint64_t)(arg1[5]) * ((arg2[7]) * UINT8_C(0x26))); + uint64_t x34 = ((uint64_t)(arg1[5]) * ((arg2[6]) * UINT8_C(0x13))); + uint64_t x35 = ((uint64_t)(arg1[5]) * ((arg2[5]) * UINT8_C(0x26))); + uint64_t x36 = ((uint64_t)(arg1[4]) * ((arg2[9]) * UINT8_C(0x13))); + uint64_t x37 = ((uint64_t)(arg1[4]) * ((arg2[8]) * UINT8_C(0x13))); + uint64_t x38 = ((uint64_t)(arg1[4]) * ((arg2[7]) * UINT8_C(0x13))); + uint64_t x39 = ((uint64_t)(arg1[4]) * ((arg2[6]) * UINT8_C(0x13))); + uint64_t x40 = ((uint64_t)(arg1[3]) * ((arg2[9]) * UINT8_C(0x26))); + uint64_t x41 = ((uint64_t)(arg1[3]) * ((arg2[8]) * UINT8_C(0x13))); + uint64_t x42 = ((uint64_t)(arg1[3]) * ((arg2[7]) * UINT8_C(0x26))); + uint64_t x43 = ((uint64_t)(arg1[2]) * ((arg2[9]) * UINT8_C(0x13))); + uint64_t x44 = ((uint64_t)(arg1[2]) * ((arg2[8]) * UINT8_C(0x13))); + uint64_t x45 = ((uint64_t)(arg1[1]) * ((arg2[9]) * UINT8_C(0x26))); + uint64_t x46 = ((uint64_t)(arg1[9]) * (arg2[0])); + uint64_t x47 = ((uint64_t)(arg1[8]) * (arg2[1])); + uint64_t x48 = ((uint64_t)(arg1[8]) * (arg2[0])); + uint64_t x49 = ((uint64_t)(arg1[7]) * (arg2[2])); + uint64_t x50 = ((uint64_t)(arg1[7]) * ((arg2[1]) * 0x2)); + uint64_t x51 = ((uint64_t)(arg1[7]) * (arg2[0])); + uint64_t x52 = ((uint64_t)(arg1[6]) * (arg2[3])); + uint64_t x53 = ((uint64_t)(arg1[6]) * (arg2[2])); + uint64_t x54 = ((uint64_t)(arg1[6]) * (arg2[1])); + uint64_t x55 = ((uint64_t)(arg1[6]) * (arg2[0])); + uint64_t x56 = ((uint64_t)(arg1[5]) * (arg2[4])); + uint64_t x57 = ((uint64_t)(arg1[5]) * ((arg2[3]) * 0x2)); + uint64_t x58 = ((uint64_t)(arg1[5]) * (arg2[2])); + uint64_t x59 = ((uint64_t)(arg1[5]) * ((arg2[1]) * 0x2)); + uint64_t x60 = ((uint64_t)(arg1[5]) * (arg2[0])); + uint64_t x61 = ((uint64_t)(arg1[4]) * (arg2[5])); + uint64_t x62 = ((uint64_t)(arg1[4]) * (arg2[4])); + uint64_t x63 = ((uint64_t)(arg1[4]) * (arg2[3])); + uint64_t x64 = ((uint64_t)(arg1[4]) * (arg2[2])); + uint64_t x65 = ((uint64_t)(arg1[4]) * (arg2[1])); + uint64_t x66 = ((uint64_t)(arg1[4]) * (arg2[0])); + uint64_t x67 = ((uint64_t)(arg1[3]) * (arg2[6])); + uint64_t x68 = ((uint64_t)(arg1[3]) * ((arg2[5]) * 0x2)); + uint64_t x69 = ((uint64_t)(arg1[3]) * (arg2[4])); + uint64_t x70 = ((uint64_t)(arg1[3]) * ((arg2[3]) * 0x2)); + uint64_t x71 = ((uint64_t)(arg1[3]) * (arg2[2])); + uint64_t x72 = ((uint64_t)(arg1[3]) * ((arg2[1]) * 0x2)); + uint64_t x73 = ((uint64_t)(arg1[3]) * (arg2[0])); + uint64_t x74 = ((uint64_t)(arg1[2]) * (arg2[7])); + uint64_t x75 = ((uint64_t)(arg1[2]) * (arg2[6])); + uint64_t x76 = ((uint64_t)(arg1[2]) * (arg2[5])); + uint64_t x77 = ((uint64_t)(arg1[2]) * (arg2[4])); + uint64_t x78 = ((uint64_t)(arg1[2]) * (arg2[3])); + uint64_t x79 = ((uint64_t)(arg1[2]) * (arg2[2])); + uint64_t x80 = ((uint64_t)(arg1[2]) * (arg2[1])); + uint64_t x81 = ((uint64_t)(arg1[2]) * (arg2[0])); + uint64_t x82 = ((uint64_t)(arg1[1]) * (arg2[8])); + uint64_t x83 = ((uint64_t)(arg1[1]) * ((arg2[7]) * 0x2)); + uint64_t x84 = ((uint64_t)(arg1[1]) * (arg2[6])); + uint64_t x85 = ((uint64_t)(arg1[1]) * ((arg2[5]) * 0x2)); + uint64_t x86 = ((uint64_t)(arg1[1]) * (arg2[4])); + uint64_t x87 = ((uint64_t)(arg1[1]) * ((arg2[3]) * 0x2)); + uint64_t x88 = ((uint64_t)(arg1[1]) * (arg2[2])); + uint64_t x89 = ((uint64_t)(arg1[1]) * ((arg2[1]) * 0x2)); + uint64_t x90 = ((uint64_t)(arg1[1]) * (arg2[0])); + uint64_t x91 = ((uint64_t)(arg1[0]) * (arg2[9])); + uint64_t x92 = ((uint64_t)(arg1[0]) * (arg2[8])); + uint64_t x93 = ((uint64_t)(arg1[0]) * (arg2[7])); + uint64_t x94 = ((uint64_t)(arg1[0]) * (arg2[6])); + uint64_t x95 = ((uint64_t)(arg1[0]) * (arg2[5])); + uint64_t x96 = ((uint64_t)(arg1[0]) * (arg2[4])); + uint64_t x97 = ((uint64_t)(arg1[0]) * (arg2[3])); + uint64_t x98 = ((uint64_t)(arg1[0]) * (arg2[2])); + uint64_t x99 = ((uint64_t)(arg1[0]) * (arg2[1])); + uint64_t x100 = ((uint64_t)(arg1[0]) * (arg2[0])); + uint64_t x101 = (x100 + (x45 + (x44 + (x42 + (x39 + (x35 + (x30 + (x24 + (x17 + x9))))))))); + uint64_t x102 = (x101 >> 26); + uint32_t x103 = (uint32_t)(x101 & UINT32_C(0x3ffffff)); + uint64_t x104 = (x91 + (x82 + (x74 + (x67 + (x61 + (x56 + (x52 + (x49 + (x47 + x46))))))))); + uint64_t x105 = (x92 + (x83 + (x75 + (x68 + (x62 + (x57 + (x53 + (x50 + (x48 + x1))))))))); + uint64_t x106 = (x93 + (x84 + (x76 + (x69 + (x63 + (x58 + (x54 + (x51 + (x10 + x2))))))))); + uint64_t x107 = (x94 + (x85 + (x77 + (x70 + (x64 + (x59 + (x55 + (x18 + (x11 + x3))))))))); + uint64_t x108 = (x95 + (x86 + (x78 + (x71 + (x65 + (x60 + (x25 + (x19 + (x12 + x4))))))))); + uint64_t x109 = (x96 + (x87 + (x79 + (x72 + (x66 + (x31 + (x26 + (x20 + (x13 + x5))))))))); + uint64_t x110 = (x97 + (x88 + (x80 + (x73 + (x36 + (x32 + (x27 + (x21 + (x14 + x6))))))))); + uint64_t x111 = (x98 + (x89 + (x81 + (x40 + (x37 + (x33 + (x28 + (x22 + (x15 + x7))))))))); + uint64_t x112 = (x99 + (x90 + (x43 + (x41 + (x38 + (x34 + (x29 + (x23 + (x16 + x8))))))))); + uint64_t x113 = (x102 + x112); + uint64_t x114 = (x113 >> 25); + uint32_t x115 = (uint32_t)(x113 & UINT32_C(0x1ffffff)); + uint64_t x116 = (x114 + x111); + uint64_t x117 = (x116 >> 26); + uint32_t x118 = (uint32_t)(x116 & UINT32_C(0x3ffffff)); + uint64_t x119 = (x117 + x110); + uint64_t x120 = (x119 >> 25); + uint32_t x121 = (uint32_t)(x119 & UINT32_C(0x1ffffff)); + uint64_t x122 = (x120 + x109); + uint64_t x123 = (x122 >> 26); + uint32_t x124 = (uint32_t)(x122 & UINT32_C(0x3ffffff)); + uint64_t x125 = (x123 + x108); + uint64_t x126 = (x125 >> 25); + uint32_t x127 = (uint32_t)(x125 & UINT32_C(0x1ffffff)); + uint64_t x128 = (x126 + x107); + uint64_t x129 = (x128 >> 26); + uint32_t x130 = (uint32_t)(x128 & UINT32_C(0x3ffffff)); + uint64_t x131 = (x129 + x106); + uint64_t x132 = (x131 >> 25); + uint32_t x133 = (uint32_t)(x131 & UINT32_C(0x1ffffff)); + uint64_t x134 = (x132 + x105); + uint64_t x135 = (x134 >> 26); + uint32_t x136 = (uint32_t)(x134 & UINT32_C(0x3ffffff)); + uint64_t x137 = (x135 + x104); + uint64_t x138 = (x137 >> 25); + uint32_t x139 = (uint32_t)(x137 & UINT32_C(0x1ffffff)); + uint64_t x140 = (x138 * UINT8_C(0x13)); + uint64_t x141 = (x103 + x140); + uint32_t x142 = (uint32_t)(x141 >> 26); + uint32_t x143 = (uint32_t)(x141 & UINT32_C(0x3ffffff)); + uint32_t x144 = (x142 + x115); + fiat_25519_uint1 x145 = (fiat_25519_uint1)(x144 >> 25); + uint32_t x146 = (x144 & UINT32_C(0x1ffffff)); + uint32_t x147 = (x145 + x118); + out1[0] = x143; + out1[1] = x146; + out1[2] = x147; + out1[3] = x121; + out1[4] = x124; + out1[5] = x127; + out1[6] = x130; + out1[7] = x133; + out1[8] = x136; + out1[9] = x139; +} + +/* + * The function fiat_25519_carry_square squares a field element and reduces the result. + * Postconditions: + * eval out1 mod m = (eval arg1 * eval arg1) mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999]] + * Output Bounds: + * out1: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]] + */ +static void fiat_25519_carry_square(uint32_t out1[10], const uint32_t arg1[10]) { + uint32_t x1 = ((arg1[9]) * UINT8_C(0x13)); + uint32_t x2 = (x1 * 0x2); + uint32_t x3 = ((arg1[9]) * 0x2); + uint32_t x4 = ((arg1[8]) * UINT8_C(0x13)); + uint64_t x5 = ((uint64_t)x4 * 0x2); + uint32_t x6 = ((arg1[8]) * 0x2); + uint32_t x7 = ((arg1[7]) * UINT8_C(0x13)); + uint32_t x8 = (x7 * 0x2); + uint32_t x9 = ((arg1[7]) * 0x2); + uint32_t x10 = ((arg1[6]) * UINT8_C(0x13)); + uint64_t x11 = ((uint64_t)x10 * 0x2); + uint32_t x12 = ((arg1[6]) * 0x2); + uint32_t x13 = ((arg1[5]) * UINT8_C(0x13)); + uint32_t x14 = ((arg1[5]) * 0x2); + uint32_t x15 = ((arg1[4]) * 0x2); + uint32_t x16 = ((arg1[3]) * 0x2); + uint32_t x17 = ((arg1[2]) * 0x2); + uint32_t x18 = ((arg1[1]) * 0x2); + uint64_t x19 = ((uint64_t)(arg1[9]) * (x1 * 0x2)); + uint64_t x20 = ((uint64_t)(arg1[8]) * x2); + uint64_t x21 = ((uint64_t)(arg1[8]) * x4); + uint64_t x22 = ((arg1[7]) * ((uint64_t)x2 * 0x2)); + uint64_t x23 = ((arg1[7]) * x5); + uint64_t x24 = ((uint64_t)(arg1[7]) * (x7 * 0x2)); + uint64_t x25 = ((uint64_t)(arg1[6]) * x2); + uint64_t x26 = ((arg1[6]) * x5); + uint64_t x27 = ((uint64_t)(arg1[6]) * x8); + uint64_t x28 = ((uint64_t)(arg1[6]) * x10); + uint64_t x29 = ((arg1[5]) * ((uint64_t)x2 * 0x2)); + uint64_t x30 = ((arg1[5]) * x5); + uint64_t x31 = ((arg1[5]) * ((uint64_t)x8 * 0x2)); + uint64_t x32 = ((arg1[5]) * x11); + uint64_t x33 = ((uint64_t)(arg1[5]) * (x13 * 0x2)); + uint64_t x34 = ((uint64_t)(arg1[4]) * x2); + uint64_t x35 = ((arg1[4]) * x5); + uint64_t x36 = ((uint64_t)(arg1[4]) * x8); + uint64_t x37 = ((arg1[4]) * x11); + uint64_t x38 = ((uint64_t)(arg1[4]) * x14); + uint64_t x39 = ((uint64_t)(arg1[4]) * (arg1[4])); + uint64_t x40 = ((arg1[3]) * ((uint64_t)x2 * 0x2)); + uint64_t x41 = ((arg1[3]) * x5); + uint64_t x42 = ((arg1[3]) * ((uint64_t)x8 * 0x2)); + uint64_t x43 = ((uint64_t)(arg1[3]) * x12); + uint64_t x44 = ((uint64_t)(arg1[3]) * (x14 * 0x2)); + uint64_t x45 = ((uint64_t)(arg1[3]) * x15); + uint64_t x46 = ((uint64_t)(arg1[3]) * ((arg1[3]) * 0x2)); + uint64_t x47 = ((uint64_t)(arg1[2]) * x2); + uint64_t x48 = ((arg1[2]) * x5); + uint64_t x49 = ((uint64_t)(arg1[2]) * x9); + uint64_t x50 = ((uint64_t)(arg1[2]) * x12); + uint64_t x51 = ((uint64_t)(arg1[2]) * x14); + uint64_t x52 = ((uint64_t)(arg1[2]) * x15); + uint64_t x53 = ((uint64_t)(arg1[2]) * x16); + uint64_t x54 = ((uint64_t)(arg1[2]) * (arg1[2])); + uint64_t x55 = ((arg1[1]) * ((uint64_t)x2 * 0x2)); + uint64_t x56 = ((uint64_t)(arg1[1]) * x6); + uint64_t x57 = ((uint64_t)(arg1[1]) * (x9 * 0x2)); + uint64_t x58 = ((uint64_t)(arg1[1]) * x12); + uint64_t x59 = ((uint64_t)(arg1[1]) * (x14 * 0x2)); + uint64_t x60 = ((uint64_t)(arg1[1]) * x15); + uint64_t x61 = ((uint64_t)(arg1[1]) * (x16 * 0x2)); + uint64_t x62 = ((uint64_t)(arg1[1]) * x17); + uint64_t x63 = ((uint64_t)(arg1[1]) * ((arg1[1]) * 0x2)); + uint64_t x64 = ((uint64_t)(arg1[0]) * x3); + uint64_t x65 = ((uint64_t)(arg1[0]) * x6); + uint64_t x66 = ((uint64_t)(arg1[0]) * x9); + uint64_t x67 = ((uint64_t)(arg1[0]) * x12); + uint64_t x68 = ((uint64_t)(arg1[0]) * x14); + uint64_t x69 = ((uint64_t)(arg1[0]) * x15); + uint64_t x70 = ((uint64_t)(arg1[0]) * x16); + uint64_t x71 = ((uint64_t)(arg1[0]) * x17); + uint64_t x72 = ((uint64_t)(arg1[0]) * x18); + uint64_t x73 = ((uint64_t)(arg1[0]) * (arg1[0])); + uint64_t x74 = (x73 + (x55 + (x48 + (x42 + (x37 + x33))))); + uint64_t x75 = (x74 >> 26); + uint32_t x76 = (uint32_t)(x74 & UINT32_C(0x3ffffff)); + uint64_t x77 = (x64 + (x56 + (x49 + (x43 + x38)))); + uint64_t x78 = (x65 + (x57 + (x50 + (x44 + (x39 + x19))))); + uint64_t x79 = (x66 + (x58 + (x51 + (x45 + x20)))); + uint64_t x80 = (x67 + (x59 + (x52 + (x46 + (x22 + x21))))); + uint64_t x81 = (x68 + (x60 + (x53 + (x25 + x23)))); + uint64_t x82 = (x69 + (x61 + (x54 + (x29 + (x26 + x24))))); + uint64_t x83 = (x70 + (x62 + (x34 + (x30 + x27)))); + uint64_t x84 = (x71 + (x63 + (x40 + (x35 + (x31 + x28))))); + uint64_t x85 = (x72 + (x47 + (x41 + (x36 + x32)))); + uint64_t x86 = (x75 + x85); + uint64_t x87 = (x86 >> 25); + uint32_t x88 = (uint32_t)(x86 & UINT32_C(0x1ffffff)); + uint64_t x89 = (x87 + x84); + uint64_t x90 = (x89 >> 26); + uint32_t x91 = (uint32_t)(x89 & UINT32_C(0x3ffffff)); + uint64_t x92 = (x90 + x83); + uint64_t x93 = (x92 >> 25); + uint32_t x94 = (uint32_t)(x92 & UINT32_C(0x1ffffff)); + uint64_t x95 = (x93 + x82); + uint64_t x96 = (x95 >> 26); + uint32_t x97 = (uint32_t)(x95 & UINT32_C(0x3ffffff)); + uint64_t x98 = (x96 + x81); + uint64_t x99 = (x98 >> 25); + uint32_t x100 = (uint32_t)(x98 & UINT32_C(0x1ffffff)); + uint64_t x101 = (x99 + x80); + uint64_t x102 = (x101 >> 26); + uint32_t x103 = (uint32_t)(x101 & UINT32_C(0x3ffffff)); + uint64_t x104 = (x102 + x79); + uint64_t x105 = (x104 >> 25); + uint32_t x106 = (uint32_t)(x104 & UINT32_C(0x1ffffff)); + uint64_t x107 = (x105 + x78); + uint64_t x108 = (x107 >> 26); + uint32_t x109 = (uint32_t)(x107 & UINT32_C(0x3ffffff)); + uint64_t x110 = (x108 + x77); + uint64_t x111 = (x110 >> 25); + uint32_t x112 = (uint32_t)(x110 & UINT32_C(0x1ffffff)); + uint64_t x113 = (x111 * UINT8_C(0x13)); + uint64_t x114 = (x76 + x113); + uint32_t x115 = (uint32_t)(x114 >> 26); + uint32_t x116 = (uint32_t)(x114 & UINT32_C(0x3ffffff)); + uint32_t x117 = (x115 + x88); + fiat_25519_uint1 x118 = (fiat_25519_uint1)(x117 >> 25); + uint32_t x119 = (x117 & UINT32_C(0x1ffffff)); + uint32_t x120 = (x118 + x91); + out1[0] = x116; + out1[1] = x119; + out1[2] = x120; + out1[3] = x94; + out1[4] = x97; + out1[5] = x100; + out1[6] = x103; + out1[7] = x106; + out1[8] = x109; + out1[9] = x112; +} + +/* + * The function fiat_25519_carry reduces a field element. + * Postconditions: + * eval out1 mod m = eval arg1 mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999]] + * Output Bounds: + * out1: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]] + */ +static void fiat_25519_carry(uint32_t out1[10], const uint32_t arg1[10]) { + uint32_t x1 = (arg1[0]); + uint32_t x2 = ((x1 >> 26) + (arg1[1])); + uint32_t x3 = ((x2 >> 25) + (arg1[2])); + uint32_t x4 = ((x3 >> 26) + (arg1[3])); + uint32_t x5 = ((x4 >> 25) + (arg1[4])); + uint32_t x6 = ((x5 >> 26) + (arg1[5])); + uint32_t x7 = ((x6 >> 25) + (arg1[6])); + uint32_t x8 = ((x7 >> 26) + (arg1[7])); + uint32_t x9 = ((x8 >> 25) + (arg1[8])); + uint32_t x10 = ((x9 >> 26) + (arg1[9])); + uint32_t x11 = ((x1 & UINT32_C(0x3ffffff)) + ((x10 >> 25) * UINT8_C(0x13))); + uint32_t x12 = ((fiat_25519_uint1)(x11 >> 26) + (x2 & UINT32_C(0x1ffffff))); + uint32_t x13 = (x11 & UINT32_C(0x3ffffff)); + uint32_t x14 = (x12 & UINT32_C(0x1ffffff)); + uint32_t x15 = ((fiat_25519_uint1)(x12 >> 25) + (x3 & UINT32_C(0x3ffffff))); + uint32_t x16 = (x4 & UINT32_C(0x1ffffff)); + uint32_t x17 = (x5 & UINT32_C(0x3ffffff)); + uint32_t x18 = (x6 & UINT32_C(0x1ffffff)); + uint32_t x19 = (x7 & UINT32_C(0x3ffffff)); + uint32_t x20 = (x8 & UINT32_C(0x1ffffff)); + uint32_t x21 = (x9 & UINT32_C(0x3ffffff)); + uint32_t x22 = (x10 & UINT32_C(0x1ffffff)); + out1[0] = x13; + out1[1] = x14; + out1[2] = x15; + out1[3] = x16; + out1[4] = x17; + out1[5] = x18; + out1[6] = x19; + out1[7] = x20; + out1[8] = x21; + out1[9] = x22; +} + +/* + * The function fiat_25519_add adds two field elements. + * Postconditions: + * eval out1 mod m = (eval arg1 + eval arg2) mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]] + * arg2: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]] + * Output Bounds: + * out1: [[0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999]] + */ +static void fiat_25519_add(uint32_t out1[10], const uint32_t arg1[10], const uint32_t arg2[10]) { + uint32_t x1 = ((arg1[0]) + (arg2[0])); + uint32_t x2 = ((arg1[1]) + (arg2[1])); + uint32_t x3 = ((arg1[2]) + (arg2[2])); + uint32_t x4 = ((arg1[3]) + (arg2[3])); + uint32_t x5 = ((arg1[4]) + (arg2[4])); + uint32_t x6 = ((arg1[5]) + (arg2[5])); + uint32_t x7 = ((arg1[6]) + (arg2[6])); + uint32_t x8 = ((arg1[7]) + (arg2[7])); + uint32_t x9 = ((arg1[8]) + (arg2[8])); + uint32_t x10 = ((arg1[9]) + (arg2[9])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; + out1[5] = x6; + out1[6] = x7; + out1[7] = x8; + out1[8] = x9; + out1[9] = x10; +} + +/* + * The function fiat_25519_sub subtracts two field elements. + * Postconditions: + * eval out1 mod m = (eval arg1 - eval arg2) mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]] + * arg2: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]] + * Output Bounds: + * out1: [[0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999]] + */ +static void fiat_25519_sub(uint32_t out1[10], const uint32_t arg1[10], const uint32_t arg2[10]) { + uint32_t x1 = ((UINT32_C(0x7ffffda) + (arg1[0])) - (arg2[0])); + uint32_t x2 = ((UINT32_C(0x3fffffe) + (arg1[1])) - (arg2[1])); + uint32_t x3 = ((UINT32_C(0x7fffffe) + (arg1[2])) - (arg2[2])); + uint32_t x4 = ((UINT32_C(0x3fffffe) + (arg1[3])) - (arg2[3])); + uint32_t x5 = ((UINT32_C(0x7fffffe) + (arg1[4])) - (arg2[4])); + uint32_t x6 = ((UINT32_C(0x3fffffe) + (arg1[5])) - (arg2[5])); + uint32_t x7 = ((UINT32_C(0x7fffffe) + (arg1[6])) - (arg2[6])); + uint32_t x8 = ((UINT32_C(0x3fffffe) + (arg1[7])) - (arg2[7])); + uint32_t x9 = ((UINT32_C(0x7fffffe) + (arg1[8])) - (arg2[8])); + uint32_t x10 = ((UINT32_C(0x3fffffe) + (arg1[9])) - (arg2[9])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; + out1[5] = x6; + out1[6] = x7; + out1[7] = x8; + out1[8] = x9; + out1[9] = x10; +} + +/* + * The function fiat_25519_opp negates a field element. + * Postconditions: + * eval out1 mod m = -eval arg1 mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]] + * Output Bounds: + * out1: [[0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999]] + */ +static void fiat_25519_opp(uint32_t out1[10], const uint32_t arg1[10]) { + uint32_t x1 = (UINT32_C(0x7ffffda) - (arg1[0])); + uint32_t x2 = (UINT32_C(0x3fffffe) - (arg1[1])); + uint32_t x3 = (UINT32_C(0x7fffffe) - (arg1[2])); + uint32_t x4 = (UINT32_C(0x3fffffe) - (arg1[3])); + uint32_t x5 = (UINT32_C(0x7fffffe) - (arg1[4])); + uint32_t x6 = (UINT32_C(0x3fffffe) - (arg1[5])); + uint32_t x7 = (UINT32_C(0x7fffffe) - (arg1[6])); + uint32_t x8 = (UINT32_C(0x3fffffe) - (arg1[7])); + uint32_t x9 = (UINT32_C(0x7fffffe) - (arg1[8])); + uint32_t x10 = (UINT32_C(0x3fffffe) - (arg1[9])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; + out1[5] = x6; + out1[6] = x7; + out1[7] = x8; + out1[8] = x9; + out1[9] = x10; +} + +/* + * The function fiat_25519_selectznz is a multi-limb conditional select. + * Postconditions: + * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_25519_selectznz(uint32_t out1[10], fiat_25519_uint1 arg1, const uint32_t arg2[10], const uint32_t arg3[10]) { + uint32_t x1; + fiat_25519_cmovznz_u32(&x1, arg1, (arg2[0]), (arg3[0])); + uint32_t x2; + fiat_25519_cmovznz_u32(&x2, arg1, (arg2[1]), (arg3[1])); + uint32_t x3; + fiat_25519_cmovznz_u32(&x3, arg1, (arg2[2]), (arg3[2])); + uint32_t x4; + fiat_25519_cmovznz_u32(&x4, arg1, (arg2[3]), (arg3[3])); + uint32_t x5; + fiat_25519_cmovznz_u32(&x5, arg1, (arg2[4]), (arg3[4])); + uint32_t x6; + fiat_25519_cmovznz_u32(&x6, arg1, (arg2[5]), (arg3[5])); + uint32_t x7; + fiat_25519_cmovznz_u32(&x7, arg1, (arg2[6]), (arg3[6])); + uint32_t x8; + fiat_25519_cmovznz_u32(&x8, arg1, (arg2[7]), (arg3[7])); + uint32_t x9; + fiat_25519_cmovznz_u32(&x9, arg1, (arg2[8]), (arg3[8])); + uint32_t x10; + fiat_25519_cmovznz_u32(&x10, arg1, (arg2[9]), (arg3[9])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; + out1[5] = x6; + out1[6] = x7; + out1[7] = x8; + out1[8] = x9; + out1[9] = x10; +} + +/* + * The function fiat_25519_to_bytes serializes a field element to bytes in little-endian order. + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] + * + * Input Bounds: + * arg1: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x7f]] + */ +static void fiat_25519_to_bytes(uint8_t out1[32], const uint32_t arg1[10]) { + uint32_t x1; + fiat_25519_uint1 x2; + fiat_25519_subborrowx_u26(&x1, &x2, 0x0, (arg1[0]), UINT32_C(0x3ffffed)); + uint32_t x3; + fiat_25519_uint1 x4; + fiat_25519_subborrowx_u25(&x3, &x4, x2, (arg1[1]), UINT32_C(0x1ffffff)); + uint32_t x5; + fiat_25519_uint1 x6; + fiat_25519_subborrowx_u26(&x5, &x6, x4, (arg1[2]), UINT32_C(0x3ffffff)); + uint32_t x7; + fiat_25519_uint1 x8; + fiat_25519_subborrowx_u25(&x7, &x8, x6, (arg1[3]), UINT32_C(0x1ffffff)); + uint32_t x9; + fiat_25519_uint1 x10; + fiat_25519_subborrowx_u26(&x9, &x10, x8, (arg1[4]), UINT32_C(0x3ffffff)); + uint32_t x11; + fiat_25519_uint1 x12; + fiat_25519_subborrowx_u25(&x11, &x12, x10, (arg1[5]), UINT32_C(0x1ffffff)); + uint32_t x13; + fiat_25519_uint1 x14; + fiat_25519_subborrowx_u26(&x13, &x14, x12, (arg1[6]), UINT32_C(0x3ffffff)); + uint32_t x15; + fiat_25519_uint1 x16; + fiat_25519_subborrowx_u25(&x15, &x16, x14, (arg1[7]), UINT32_C(0x1ffffff)); + uint32_t x17; + fiat_25519_uint1 x18; + fiat_25519_subborrowx_u26(&x17, &x18, x16, (arg1[8]), UINT32_C(0x3ffffff)); + uint32_t x19; + fiat_25519_uint1 x20; + fiat_25519_subborrowx_u25(&x19, &x20, x18, (arg1[9]), UINT32_C(0x1ffffff)); + uint32_t x21; + fiat_25519_cmovznz_u32(&x21, x20, 0x0, UINT32_C(0xffffffff)); + uint32_t x22; + fiat_25519_uint1 x23; + fiat_25519_addcarryx_u26(&x22, &x23, 0x0, x1, (x21 & UINT32_C(0x3ffffed))); + uint32_t x24; + fiat_25519_uint1 x25; + fiat_25519_addcarryx_u25(&x24, &x25, x23, x3, (x21 & UINT32_C(0x1ffffff))); + uint32_t x26; + fiat_25519_uint1 x27; + fiat_25519_addcarryx_u26(&x26, &x27, x25, x5, (x21 & UINT32_C(0x3ffffff))); + uint32_t x28; + fiat_25519_uint1 x29; + fiat_25519_addcarryx_u25(&x28, &x29, x27, x7, (x21 & UINT32_C(0x1ffffff))); + uint32_t x30; + fiat_25519_uint1 x31; + fiat_25519_addcarryx_u26(&x30, &x31, x29, x9, (x21 & UINT32_C(0x3ffffff))); + uint32_t x32; + fiat_25519_uint1 x33; + fiat_25519_addcarryx_u25(&x32, &x33, x31, x11, (x21 & UINT32_C(0x1ffffff))); + uint32_t x34; + fiat_25519_uint1 x35; + fiat_25519_addcarryx_u26(&x34, &x35, x33, x13, (x21 & UINT32_C(0x3ffffff))); + uint32_t x36; + fiat_25519_uint1 x37; + fiat_25519_addcarryx_u25(&x36, &x37, x35, x15, (x21 & UINT32_C(0x1ffffff))); + uint32_t x38; + fiat_25519_uint1 x39; + fiat_25519_addcarryx_u26(&x38, &x39, x37, x17, (x21 & UINT32_C(0x3ffffff))); + uint32_t x40; + fiat_25519_uint1 x41; + fiat_25519_addcarryx_u25(&x40, &x41, x39, x19, (x21 & UINT32_C(0x1ffffff))); + uint32_t x42 = (x40 << 6); + uint32_t x43 = (x38 << 4); + uint32_t x44 = (x36 << 3); + uint32_t x45 = (x34 * (uint32_t)0x2); + uint32_t x46 = (x30 << 6); + uint32_t x47 = (x28 << 5); + uint32_t x48 = (x26 << 3); + uint32_t x49 = (x24 << 2); + uint32_t x50 = (x22 >> 8); + uint8_t x51 = (uint8_t)(x22 & UINT8_C(0xff)); + uint32_t x52 = (x50 >> 8); + uint8_t x53 = (uint8_t)(x50 & UINT8_C(0xff)); + uint8_t x54 = (uint8_t)(x52 >> 8); + uint8_t x55 = (uint8_t)(x52 & UINT8_C(0xff)); + uint32_t x56 = (x54 + x49); + uint32_t x57 = (x56 >> 8); + uint8_t x58 = (uint8_t)(x56 & UINT8_C(0xff)); + uint32_t x59 = (x57 >> 8); + uint8_t x60 = (uint8_t)(x57 & UINT8_C(0xff)); + uint8_t x61 = (uint8_t)(x59 >> 8); + uint8_t x62 = (uint8_t)(x59 & UINT8_C(0xff)); + uint32_t x63 = (x61 + x48); + uint32_t x64 = (x63 >> 8); + uint8_t x65 = (uint8_t)(x63 & UINT8_C(0xff)); + uint32_t x66 = (x64 >> 8); + uint8_t x67 = (uint8_t)(x64 & UINT8_C(0xff)); + uint8_t x68 = (uint8_t)(x66 >> 8); + uint8_t x69 = (uint8_t)(x66 & UINT8_C(0xff)); + uint32_t x70 = (x68 + x47); + uint32_t x71 = (x70 >> 8); + uint8_t x72 = (uint8_t)(x70 & UINT8_C(0xff)); + uint32_t x73 = (x71 >> 8); + uint8_t x74 = (uint8_t)(x71 & UINT8_C(0xff)); + uint8_t x75 = (uint8_t)(x73 >> 8); + uint8_t x76 = (uint8_t)(x73 & UINT8_C(0xff)); + uint32_t x77 = (x75 + x46); + uint32_t x78 = (x77 >> 8); + uint8_t x79 = (uint8_t)(x77 & UINT8_C(0xff)); + uint32_t x80 = (x78 >> 8); + uint8_t x81 = (uint8_t)(x78 & UINT8_C(0xff)); + uint8_t x82 = (uint8_t)(x80 >> 8); + uint8_t x83 = (uint8_t)(x80 & UINT8_C(0xff)); + uint8_t x84 = (uint8_t)(x82 & UINT8_C(0xff)); + uint32_t x85 = (x32 >> 8); + uint8_t x86 = (uint8_t)(x32 & UINT8_C(0xff)); + uint32_t x87 = (x85 >> 8); + uint8_t x88 = (uint8_t)(x85 & UINT8_C(0xff)); + fiat_25519_uint1 x89 = (fiat_25519_uint1)(x87 >> 8); + uint8_t x90 = (uint8_t)(x87 & UINT8_C(0xff)); + uint32_t x91 = (x89 + x45); + uint32_t x92 = (x91 >> 8); + uint8_t x93 = (uint8_t)(x91 & UINT8_C(0xff)); + uint32_t x94 = (x92 >> 8); + uint8_t x95 = (uint8_t)(x92 & UINT8_C(0xff)); + uint8_t x96 = (uint8_t)(x94 >> 8); + uint8_t x97 = (uint8_t)(x94 & UINT8_C(0xff)); + uint32_t x98 = (x96 + x44); + uint32_t x99 = (x98 >> 8); + uint8_t x100 = (uint8_t)(x98 & UINT8_C(0xff)); + uint32_t x101 = (x99 >> 8); + uint8_t x102 = (uint8_t)(x99 & UINT8_C(0xff)); + uint8_t x103 = (uint8_t)(x101 >> 8); + uint8_t x104 = (uint8_t)(x101 & UINT8_C(0xff)); + uint32_t x105 = (x103 + x43); + uint32_t x106 = (x105 >> 8); + uint8_t x107 = (uint8_t)(x105 & UINT8_C(0xff)); + uint32_t x108 = (x106 >> 8); + uint8_t x109 = (uint8_t)(x106 & UINT8_C(0xff)); + uint8_t x110 = (uint8_t)(x108 >> 8); + uint8_t x111 = (uint8_t)(x108 & UINT8_C(0xff)); + uint32_t x112 = (x110 + x42); + uint32_t x113 = (x112 >> 8); + uint8_t x114 = (uint8_t)(x112 & UINT8_C(0xff)); + uint32_t x115 = (x113 >> 8); + uint8_t x116 = (uint8_t)(x113 & UINT8_C(0xff)); + uint8_t x117 = (uint8_t)(x115 >> 8); + uint8_t x118 = (uint8_t)(x115 & UINT8_C(0xff)); + out1[0] = x51; + out1[1] = x53; + out1[2] = x55; + out1[3] = x58; + out1[4] = x60; + out1[5] = x62; + out1[6] = x65; + out1[7] = x67; + out1[8] = x69; + out1[9] = x72; + out1[10] = x74; + out1[11] = x76; + out1[12] = x79; + out1[13] = x81; + out1[14] = x83; + out1[15] = x84; + out1[16] = x86; + out1[17] = x88; + out1[18] = x90; + out1[19] = x93; + out1[20] = x95; + out1[21] = x97; + out1[22] = x100; + out1[23] = x102; + out1[24] = x104; + out1[25] = x107; + out1[26] = x109; + out1[27] = x111; + out1[28] = x114; + out1[29] = x116; + out1[30] = x118; + out1[31] = x117; +} + +/* + * The function fiat_25519_from_bytes deserializes a field element from bytes in little-endian order. + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x7f]] + * Output Bounds: + * out1: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]] + */ +static void fiat_25519_from_bytes(uint32_t out1[10], const uint8_t arg1[32]) { + uint32_t x1 = ((uint32_t)(arg1[31]) << 18); + uint32_t x2 = ((uint32_t)(arg1[30]) << 10); + uint32_t x3 = ((uint32_t)(arg1[29]) << 2); + uint32_t x4 = ((uint32_t)(arg1[28]) << 20); + uint32_t x5 = ((uint32_t)(arg1[27]) << 12); + uint32_t x6 = ((uint32_t)(arg1[26]) << 4); + uint32_t x7 = ((uint32_t)(arg1[25]) << 21); + uint32_t x8 = ((uint32_t)(arg1[24]) << 13); + uint32_t x9 = ((uint32_t)(arg1[23]) << 5); + uint32_t x10 = ((uint32_t)(arg1[22]) << 23); + uint32_t x11 = ((uint32_t)(arg1[21]) << 15); + uint32_t x12 = ((uint32_t)(arg1[20]) << 7); + uint32_t x13 = ((uint32_t)(arg1[19]) << 24); + uint32_t x14 = ((uint32_t)(arg1[18]) << 16); + uint32_t x15 = ((uint32_t)(arg1[17]) << 8); + uint8_t x16 = (arg1[16]); + uint32_t x17 = ((uint32_t)(arg1[15]) << 18); + uint32_t x18 = ((uint32_t)(arg1[14]) << 10); + uint32_t x19 = ((uint32_t)(arg1[13]) << 2); + uint32_t x20 = ((uint32_t)(arg1[12]) << 19); + uint32_t x21 = ((uint32_t)(arg1[11]) << 11); + uint32_t x22 = ((uint32_t)(arg1[10]) << 3); + uint32_t x23 = ((uint32_t)(arg1[9]) << 21); + uint32_t x24 = ((uint32_t)(arg1[8]) << 13); + uint32_t x25 = ((uint32_t)(arg1[7]) << 5); + uint32_t x26 = ((uint32_t)(arg1[6]) << 22); + uint32_t x27 = ((uint32_t)(arg1[5]) << 14); + uint32_t x28 = ((uint32_t)(arg1[4]) << 6); + uint32_t x29 = ((uint32_t)(arg1[3]) << 24); + uint32_t x30 = ((uint32_t)(arg1[2]) << 16); + uint32_t x31 = ((uint32_t)(arg1[1]) << 8); + uint8_t x32 = (arg1[0]); + uint32_t x33 = (x32 + (x31 + (x30 + x29))); + uint8_t x34 = (uint8_t)(x33 >> 26); + uint32_t x35 = (x33 & UINT32_C(0x3ffffff)); + uint32_t x36 = (x3 + (x2 + x1)); + uint32_t x37 = (x6 + (x5 + x4)); + uint32_t x38 = (x9 + (x8 + x7)); + uint32_t x39 = (x12 + (x11 + x10)); + uint32_t x40 = (x16 + (x15 + (x14 + x13))); + uint32_t x41 = (x19 + (x18 + x17)); + uint32_t x42 = (x22 + (x21 + x20)); + uint32_t x43 = (x25 + (x24 + x23)); + uint32_t x44 = (x28 + (x27 + x26)); + uint32_t x45 = (x34 + x44); + uint8_t x46 = (uint8_t)(x45 >> 25); + uint32_t x47 = (x45 & UINT32_C(0x1ffffff)); + uint32_t x48 = (x46 + x43); + uint8_t x49 = (uint8_t)(x48 >> 26); + uint32_t x50 = (x48 & UINT32_C(0x3ffffff)); + uint32_t x51 = (x49 + x42); + uint8_t x52 = (uint8_t)(x51 >> 25); + uint32_t x53 = (x51 & UINT32_C(0x1ffffff)); + uint32_t x54 = (x52 + x41); + uint32_t x55 = (x54 & UINT32_C(0x3ffffff)); + uint8_t x56 = (uint8_t)(x40 >> 25); + uint32_t x57 = (x40 & UINT32_C(0x1ffffff)); + uint32_t x58 = (x56 + x39); + uint8_t x59 = (uint8_t)(x58 >> 26); + uint32_t x60 = (x58 & UINT32_C(0x3ffffff)); + uint32_t x61 = (x59 + x38); + uint8_t x62 = (uint8_t)(x61 >> 25); + uint32_t x63 = (x61 & UINT32_C(0x1ffffff)); + uint32_t x64 = (x62 + x37); + uint8_t x65 = (uint8_t)(x64 >> 26); + uint32_t x66 = (x64 & UINT32_C(0x3ffffff)); + uint32_t x67 = (x65 + x36); + out1[0] = x35; + out1[1] = x47; + out1[2] = x50; + out1[3] = x53; + out1[4] = x55; + out1[5] = x57; + out1[6] = x60; + out1[7] = x63; + out1[8] = x66; + out1[9] = x67; +} + +/* + * The function fiat_25519_carry_scmul_121666 multiplies a field element by 121666 and reduces the result. + * Postconditions: + * eval out1 mod m = (121666 * eval arg1) mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999]] + * Output Bounds: + * out1: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]] + */ +static void fiat_25519_carry_scmul_121666(uint32_t out1[10], const uint32_t arg1[10]) { + uint64_t x1 = ((uint64_t)UINT32_C(0x1db42) * (arg1[9])); + uint64_t x2 = ((uint64_t)UINT32_C(0x1db42) * (arg1[8])); + uint64_t x3 = ((uint64_t)UINT32_C(0x1db42) * (arg1[7])); + uint64_t x4 = ((uint64_t)UINT32_C(0x1db42) * (arg1[6])); + uint64_t x5 = ((uint64_t)UINT32_C(0x1db42) * (arg1[5])); + uint64_t x6 = ((uint64_t)UINT32_C(0x1db42) * (arg1[4])); + uint64_t x7 = ((uint64_t)UINT32_C(0x1db42) * (arg1[3])); + uint64_t x8 = ((uint64_t)UINT32_C(0x1db42) * (arg1[2])); + uint64_t x9 = ((uint64_t)UINT32_C(0x1db42) * (arg1[1])); + uint64_t x10 = ((uint64_t)UINT32_C(0x1db42) * (arg1[0])); + uint32_t x11 = (uint32_t)(x10 >> 26); + uint32_t x12 = (uint32_t)(x10 & UINT32_C(0x3ffffff)); + uint64_t x13 = (x11 + x9); + uint32_t x14 = (uint32_t)(x13 >> 25); + uint32_t x15 = (uint32_t)(x13 & UINT32_C(0x1ffffff)); + uint64_t x16 = (x14 + x8); + uint32_t x17 = (uint32_t)(x16 >> 26); + uint32_t x18 = (uint32_t)(x16 & UINT32_C(0x3ffffff)); + uint64_t x19 = (x17 + x7); + uint32_t x20 = (uint32_t)(x19 >> 25); + uint32_t x21 = (uint32_t)(x19 & UINT32_C(0x1ffffff)); + uint64_t x22 = (x20 + x6); + uint32_t x23 = (uint32_t)(x22 >> 26); + uint32_t x24 = (uint32_t)(x22 & UINT32_C(0x3ffffff)); + uint64_t x25 = (x23 + x5); + uint32_t x26 = (uint32_t)(x25 >> 25); + uint32_t x27 = (uint32_t)(x25 & UINT32_C(0x1ffffff)); + uint64_t x28 = (x26 + x4); + uint32_t x29 = (uint32_t)(x28 >> 26); + uint32_t x30 = (uint32_t)(x28 & UINT32_C(0x3ffffff)); + uint64_t x31 = (x29 + x3); + uint32_t x32 = (uint32_t)(x31 >> 25); + uint32_t x33 = (uint32_t)(x31 & UINT32_C(0x1ffffff)); + uint64_t x34 = (x32 + x2); + uint32_t x35 = (uint32_t)(x34 >> 26); + uint32_t x36 = (uint32_t)(x34 & UINT32_C(0x3ffffff)); + uint64_t x37 = (x35 + x1); + uint32_t x38 = (uint32_t)(x37 >> 25); + uint32_t x39 = (uint32_t)(x37 & UINT32_C(0x1ffffff)); + uint32_t x40 = (x38 * UINT8_C(0x13)); + uint32_t x41 = (x12 + x40); + fiat_25519_uint1 x42 = (fiat_25519_uint1)(x41 >> 26); + uint32_t x43 = (x41 & UINT32_C(0x3ffffff)); + uint32_t x44 = (x42 + x15); + fiat_25519_uint1 x45 = (fiat_25519_uint1)(x44 >> 25); + uint32_t x46 = (x44 & UINT32_C(0x1ffffff)); + uint32_t x47 = (x45 + x18); + out1[0] = x43; + out1[1] = x46; + out1[2] = x47; + out1[3] = x21; + out1[4] = x24; + out1[5] = x27; + out1[6] = x30; + out1[7] = x33; + out1[8] = x36; + out1[9] = x39; +} + diff --git a/vendor/ring/third_party/fiat/curve25519_64.h b/vendor/ring/third_party/fiat/curve25519_64.h new file mode 100644 index 00000000..02679bbb --- /dev/null +++ b/vendor/ring/third_party/fiat/curve25519_64.h @@ -0,0 +1,619 @@ +/* Autogenerated: src/ExtractionOCaml/unsaturated_solinas --static 25519 5 '2^255 - 19' 64 carry_mul carry_square carry add sub opp selectznz to_bytes from_bytes carry_scmul121666 */ +/* curve description: 25519 */ +/* requested operations: carry_mul, carry_square, carry, add, sub, opp, selectznz, to_bytes, from_bytes, carry_scmul121666 */ +/* n = 5 (from "5") */ +/* s-c = 2^255 - [(1, 19)] (from "2^255 - 19") */ +/* machine_wordsize = 64 (from "64") */ + +/* Computed values: */ +/* carry_chain = [0, 1, 2, 3, 4, 0, 1] */ + +#include +typedef unsigned char fiat_25519_uint1; +typedef signed char fiat_25519_int1; +typedef signed __int128 fiat_25519_int128; +typedef unsigned __int128 fiat_25519_uint128; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + + +/* + * The function fiat_25519_addcarryx_u51 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^51 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^51⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0x7ffffffffffff] + * arg3: [0x0 ~> 0x7ffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0x7ffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_25519_addcarryx_u51(uint64_t* out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t arg3) { + uint64_t x1 = ((arg1 + arg2) + arg3); + uint64_t x2 = (x1 & UINT64_C(0x7ffffffffffff)); + fiat_25519_uint1 x3 = (fiat_25519_uint1)(x1 >> 51); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_25519_subborrowx_u51 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^51 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^51⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0x7ffffffffffff] + * arg3: [0x0 ~> 0x7ffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0x7ffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_25519_subborrowx_u51(uint64_t* out1, fiat_25519_uint1* out2, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t arg3) { + int64_t x1 = ((int64_t)(arg2 - (int64_t)arg1) - (int64_t)arg3); + fiat_25519_int1 x2 = (fiat_25519_int1)(x1 >> 51); + uint64_t x3 = (x1 & UINT64_C(0x7ffffffffffff)); + *out1 = x3; + *out2 = (fiat_25519_uint1)(0x0 - x2); +} + +/* + * The function fiat_25519_cmovznz_u64 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_25519_cmovznz_u64(uint64_t* out1, fiat_25519_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_25519_uint1 x1 = (!(!arg1)); + uint64_t x2 = ((fiat_25519_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); + // Note this line has been patched from the synthesized code to add value + // barriers. + // + // Clang recognizes this pattern as a select. While it usually transforms it + // to a cmov, it sometimes further transforms it into a branch, which we do + // not want. + uint64_t x3 = ((value_barrier_u64(x2) & arg3) | (value_barrier_u64(~x2) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_25519_carry_mul multiplies two field elements and reduces the result. + * Postconditions: + * eval out1 mod m = (eval arg1 * eval arg2) mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664]] + * arg2: [[0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664]] + * Output Bounds: + * out1: [[0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc]] + */ +static void fiat_25519_carry_mul(uint64_t out1[5], const uint64_t arg1[5], const uint64_t arg2[5]) { + fiat_25519_uint128 x1 = ((fiat_25519_uint128)(arg1[4]) * ((arg2[4]) * UINT8_C(0x13))); + fiat_25519_uint128 x2 = ((fiat_25519_uint128)(arg1[4]) * ((arg2[3]) * UINT8_C(0x13))); + fiat_25519_uint128 x3 = ((fiat_25519_uint128)(arg1[4]) * ((arg2[2]) * UINT8_C(0x13))); + fiat_25519_uint128 x4 = ((fiat_25519_uint128)(arg1[4]) * ((arg2[1]) * UINT8_C(0x13))); + fiat_25519_uint128 x5 = ((fiat_25519_uint128)(arg1[3]) * ((arg2[4]) * UINT8_C(0x13))); + fiat_25519_uint128 x6 = ((fiat_25519_uint128)(arg1[3]) * ((arg2[3]) * UINT8_C(0x13))); + fiat_25519_uint128 x7 = ((fiat_25519_uint128)(arg1[3]) * ((arg2[2]) * UINT8_C(0x13))); + fiat_25519_uint128 x8 = ((fiat_25519_uint128)(arg1[2]) * ((arg2[4]) * UINT8_C(0x13))); + fiat_25519_uint128 x9 = ((fiat_25519_uint128)(arg1[2]) * ((arg2[3]) * UINT8_C(0x13))); + fiat_25519_uint128 x10 = ((fiat_25519_uint128)(arg1[1]) * ((arg2[4]) * UINT8_C(0x13))); + fiat_25519_uint128 x11 = ((fiat_25519_uint128)(arg1[4]) * (arg2[0])); + fiat_25519_uint128 x12 = ((fiat_25519_uint128)(arg1[3]) * (arg2[1])); + fiat_25519_uint128 x13 = ((fiat_25519_uint128)(arg1[3]) * (arg2[0])); + fiat_25519_uint128 x14 = ((fiat_25519_uint128)(arg1[2]) * (arg2[2])); + fiat_25519_uint128 x15 = ((fiat_25519_uint128)(arg1[2]) * (arg2[1])); + fiat_25519_uint128 x16 = ((fiat_25519_uint128)(arg1[2]) * (arg2[0])); + fiat_25519_uint128 x17 = ((fiat_25519_uint128)(arg1[1]) * (arg2[3])); + fiat_25519_uint128 x18 = ((fiat_25519_uint128)(arg1[1]) * (arg2[2])); + fiat_25519_uint128 x19 = ((fiat_25519_uint128)(arg1[1]) * (arg2[1])); + fiat_25519_uint128 x20 = ((fiat_25519_uint128)(arg1[1]) * (arg2[0])); + fiat_25519_uint128 x21 = ((fiat_25519_uint128)(arg1[0]) * (arg2[4])); + fiat_25519_uint128 x22 = ((fiat_25519_uint128)(arg1[0]) * (arg2[3])); + fiat_25519_uint128 x23 = ((fiat_25519_uint128)(arg1[0]) * (arg2[2])); + fiat_25519_uint128 x24 = ((fiat_25519_uint128)(arg1[0]) * (arg2[1])); + fiat_25519_uint128 x25 = ((fiat_25519_uint128)(arg1[0]) * (arg2[0])); + fiat_25519_uint128 x26 = (x25 + (x10 + (x9 + (x7 + x4)))); + uint64_t x27 = (uint64_t)(x26 >> 51); + uint64_t x28 = (uint64_t)(x26 & UINT64_C(0x7ffffffffffff)); + fiat_25519_uint128 x29 = (x21 + (x17 + (x14 + (x12 + x11)))); + fiat_25519_uint128 x30 = (x22 + (x18 + (x15 + (x13 + x1)))); + fiat_25519_uint128 x31 = (x23 + (x19 + (x16 + (x5 + x2)))); + fiat_25519_uint128 x32 = (x24 + (x20 + (x8 + (x6 + x3)))); + fiat_25519_uint128 x33 = (x27 + x32); + uint64_t x34 = (uint64_t)(x33 >> 51); + uint64_t x35 = (uint64_t)(x33 & UINT64_C(0x7ffffffffffff)); + fiat_25519_uint128 x36 = (x34 + x31); + uint64_t x37 = (uint64_t)(x36 >> 51); + uint64_t x38 = (uint64_t)(x36 & UINT64_C(0x7ffffffffffff)); + fiat_25519_uint128 x39 = (x37 + x30); + uint64_t x40 = (uint64_t)(x39 >> 51); + uint64_t x41 = (uint64_t)(x39 & UINT64_C(0x7ffffffffffff)); + fiat_25519_uint128 x42 = (x40 + x29); + uint64_t x43 = (uint64_t)(x42 >> 51); + uint64_t x44 = (uint64_t)(x42 & UINT64_C(0x7ffffffffffff)); + uint64_t x45 = (x43 * UINT8_C(0x13)); + uint64_t x46 = (x28 + x45); + uint64_t x47 = (x46 >> 51); + uint64_t x48 = (x46 & UINT64_C(0x7ffffffffffff)); + uint64_t x49 = (x47 + x35); + fiat_25519_uint1 x50 = (fiat_25519_uint1)(x49 >> 51); + uint64_t x51 = (x49 & UINT64_C(0x7ffffffffffff)); + uint64_t x52 = (x50 + x38); + out1[0] = x48; + out1[1] = x51; + out1[2] = x52; + out1[3] = x41; + out1[4] = x44; +} + +/* + * The function fiat_25519_carry_square squares a field element and reduces the result. + * Postconditions: + * eval out1 mod m = (eval arg1 * eval arg1) mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664]] + * Output Bounds: + * out1: [[0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc]] + */ +static void fiat_25519_carry_square(uint64_t out1[5], const uint64_t arg1[5]) { + uint64_t x1 = ((arg1[4]) * UINT8_C(0x13)); + uint64_t x2 = (x1 * 0x2); + uint64_t x3 = ((arg1[4]) * 0x2); + uint64_t x4 = ((arg1[3]) * UINT8_C(0x13)); + uint64_t x5 = (x4 * 0x2); + uint64_t x6 = ((arg1[3]) * 0x2); + uint64_t x7 = ((arg1[2]) * 0x2); + uint64_t x8 = ((arg1[1]) * 0x2); + fiat_25519_uint128 x9 = ((fiat_25519_uint128)(arg1[4]) * x1); + fiat_25519_uint128 x10 = ((fiat_25519_uint128)(arg1[3]) * x2); + fiat_25519_uint128 x11 = ((fiat_25519_uint128)(arg1[3]) * x4); + fiat_25519_uint128 x12 = ((fiat_25519_uint128)(arg1[2]) * x2); + fiat_25519_uint128 x13 = ((fiat_25519_uint128)(arg1[2]) * x5); + fiat_25519_uint128 x14 = ((fiat_25519_uint128)(arg1[2]) * (arg1[2])); + fiat_25519_uint128 x15 = ((fiat_25519_uint128)(arg1[1]) * x2); + fiat_25519_uint128 x16 = ((fiat_25519_uint128)(arg1[1]) * x6); + fiat_25519_uint128 x17 = ((fiat_25519_uint128)(arg1[1]) * x7); + fiat_25519_uint128 x18 = ((fiat_25519_uint128)(arg1[1]) * (arg1[1])); + fiat_25519_uint128 x19 = ((fiat_25519_uint128)(arg1[0]) * x3); + fiat_25519_uint128 x20 = ((fiat_25519_uint128)(arg1[0]) * x6); + fiat_25519_uint128 x21 = ((fiat_25519_uint128)(arg1[0]) * x7); + fiat_25519_uint128 x22 = ((fiat_25519_uint128)(arg1[0]) * x8); + fiat_25519_uint128 x23 = ((fiat_25519_uint128)(arg1[0]) * (arg1[0])); + fiat_25519_uint128 x24 = (x23 + (x15 + x13)); + uint64_t x25 = (uint64_t)(x24 >> 51); + uint64_t x26 = (uint64_t)(x24 & UINT64_C(0x7ffffffffffff)); + fiat_25519_uint128 x27 = (x19 + (x16 + x14)); + fiat_25519_uint128 x28 = (x20 + (x17 + x9)); + fiat_25519_uint128 x29 = (x21 + (x18 + x10)); + fiat_25519_uint128 x30 = (x22 + (x12 + x11)); + fiat_25519_uint128 x31 = (x25 + x30); + uint64_t x32 = (uint64_t)(x31 >> 51); + uint64_t x33 = (uint64_t)(x31 & UINT64_C(0x7ffffffffffff)); + fiat_25519_uint128 x34 = (x32 + x29); + uint64_t x35 = (uint64_t)(x34 >> 51); + uint64_t x36 = (uint64_t)(x34 & UINT64_C(0x7ffffffffffff)); + fiat_25519_uint128 x37 = (x35 + x28); + uint64_t x38 = (uint64_t)(x37 >> 51); + uint64_t x39 = (uint64_t)(x37 & UINT64_C(0x7ffffffffffff)); + fiat_25519_uint128 x40 = (x38 + x27); + uint64_t x41 = (uint64_t)(x40 >> 51); + uint64_t x42 = (uint64_t)(x40 & UINT64_C(0x7ffffffffffff)); + uint64_t x43 = (x41 * UINT8_C(0x13)); + uint64_t x44 = (x26 + x43); + uint64_t x45 = (x44 >> 51); + uint64_t x46 = (x44 & UINT64_C(0x7ffffffffffff)); + uint64_t x47 = (x45 + x33); + fiat_25519_uint1 x48 = (fiat_25519_uint1)(x47 >> 51); + uint64_t x49 = (x47 & UINT64_C(0x7ffffffffffff)); + uint64_t x50 = (x48 + x36); + out1[0] = x46; + out1[1] = x49; + out1[2] = x50; + out1[3] = x39; + out1[4] = x42; +} + +/* + * The function fiat_25519_carry reduces a field element. + * Postconditions: + * eval out1 mod m = eval arg1 mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664]] + * Output Bounds: + * out1: [[0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc]] + */ +static void fiat_25519_carry(uint64_t out1[5], const uint64_t arg1[5]) { + uint64_t x1 = (arg1[0]); + uint64_t x2 = ((x1 >> 51) + (arg1[1])); + uint64_t x3 = ((x2 >> 51) + (arg1[2])); + uint64_t x4 = ((x3 >> 51) + (arg1[3])); + uint64_t x5 = ((x4 >> 51) + (arg1[4])); + uint64_t x6 = ((x1 & UINT64_C(0x7ffffffffffff)) + ((x5 >> 51) * UINT8_C(0x13))); + uint64_t x7 = ((fiat_25519_uint1)(x6 >> 51) + (x2 & UINT64_C(0x7ffffffffffff))); + uint64_t x8 = (x6 & UINT64_C(0x7ffffffffffff)); + uint64_t x9 = (x7 & UINT64_C(0x7ffffffffffff)); + uint64_t x10 = ((fiat_25519_uint1)(x7 >> 51) + (x3 & UINT64_C(0x7ffffffffffff))); + uint64_t x11 = (x4 & UINT64_C(0x7ffffffffffff)); + uint64_t x12 = (x5 & UINT64_C(0x7ffffffffffff)); + out1[0] = x8; + out1[1] = x9; + out1[2] = x10; + out1[3] = x11; + out1[4] = x12; +} + +/* + * The function fiat_25519_add adds two field elements. + * Postconditions: + * eval out1 mod m = (eval arg1 + eval arg2) mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc]] + * arg2: [[0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc]] + * Output Bounds: + * out1: [[0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664]] + */ +static void fiat_25519_add(uint64_t out1[5], const uint64_t arg1[5], const uint64_t arg2[5]) { + uint64_t x1 = ((arg1[0]) + (arg2[0])); + uint64_t x2 = ((arg1[1]) + (arg2[1])); + uint64_t x3 = ((arg1[2]) + (arg2[2])); + uint64_t x4 = ((arg1[3]) + (arg2[3])); + uint64_t x5 = ((arg1[4]) + (arg2[4])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; +} + +/* + * The function fiat_25519_sub subtracts two field elements. + * Postconditions: + * eval out1 mod m = (eval arg1 - eval arg2) mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc]] + * arg2: [[0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc]] + * Output Bounds: + * out1: [[0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664]] + */ +static void fiat_25519_sub(uint64_t out1[5], const uint64_t arg1[5], const uint64_t arg2[5]) { + uint64_t x1 = ((UINT64_C(0xfffffffffffda) + (arg1[0])) - (arg2[0])); + uint64_t x2 = ((UINT64_C(0xffffffffffffe) + (arg1[1])) - (arg2[1])); + uint64_t x3 = ((UINT64_C(0xffffffffffffe) + (arg1[2])) - (arg2[2])); + uint64_t x4 = ((UINT64_C(0xffffffffffffe) + (arg1[3])) - (arg2[3])); + uint64_t x5 = ((UINT64_C(0xffffffffffffe) + (arg1[4])) - (arg2[4])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; +} + +/* + * The function fiat_25519_opp negates a field element. + * Postconditions: + * eval out1 mod m = -eval arg1 mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc]] + * Output Bounds: + * out1: [[0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664]] + */ +static void fiat_25519_opp(uint64_t out1[5], const uint64_t arg1[5]) { + uint64_t x1 = (UINT64_C(0xfffffffffffda) - (arg1[0])); + uint64_t x2 = (UINT64_C(0xffffffffffffe) - (arg1[1])); + uint64_t x3 = (UINT64_C(0xffffffffffffe) - (arg1[2])); + uint64_t x4 = (UINT64_C(0xffffffffffffe) - (arg1[3])); + uint64_t x5 = (UINT64_C(0xffffffffffffe) - (arg1[4])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; +} + +/* + * The function fiat_25519_selectznz is a multi-limb conditional select. + * Postconditions: + * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_25519_selectznz(uint64_t out1[5], fiat_25519_uint1 arg1, const uint64_t arg2[5], const uint64_t arg3[5]) { + uint64_t x1; + fiat_25519_cmovznz_u64(&x1, arg1, (arg2[0]), (arg3[0])); + uint64_t x2; + fiat_25519_cmovznz_u64(&x2, arg1, (arg2[1]), (arg3[1])); + uint64_t x3; + fiat_25519_cmovznz_u64(&x3, arg1, (arg2[2]), (arg3[2])); + uint64_t x4; + fiat_25519_cmovznz_u64(&x4, arg1, (arg2[3]), (arg3[3])); + uint64_t x5; + fiat_25519_cmovznz_u64(&x5, arg1, (arg2[4]), (arg3[4])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; +} + +/* + * The function fiat_25519_to_bytes serializes a field element to bytes in little-endian order. + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] + * + * Input Bounds: + * arg1: [[0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x7f]] + */ +static void fiat_25519_to_bytes(uint8_t out1[32], const uint64_t arg1[5]) { + uint64_t x1; + fiat_25519_uint1 x2; + fiat_25519_subborrowx_u51(&x1, &x2, 0x0, (arg1[0]), UINT64_C(0x7ffffffffffed)); + uint64_t x3; + fiat_25519_uint1 x4; + fiat_25519_subborrowx_u51(&x3, &x4, x2, (arg1[1]), UINT64_C(0x7ffffffffffff)); + uint64_t x5; + fiat_25519_uint1 x6; + fiat_25519_subborrowx_u51(&x5, &x6, x4, (arg1[2]), UINT64_C(0x7ffffffffffff)); + uint64_t x7; + fiat_25519_uint1 x8; + fiat_25519_subborrowx_u51(&x7, &x8, x6, (arg1[3]), UINT64_C(0x7ffffffffffff)); + uint64_t x9; + fiat_25519_uint1 x10; + fiat_25519_subborrowx_u51(&x9, &x10, x8, (arg1[4]), UINT64_C(0x7ffffffffffff)); + uint64_t x11; + fiat_25519_cmovznz_u64(&x11, x10, 0x0, UINT64_C(0xffffffffffffffff)); + uint64_t x12; + fiat_25519_uint1 x13; + fiat_25519_addcarryx_u51(&x12, &x13, 0x0, x1, (x11 & UINT64_C(0x7ffffffffffed))); + uint64_t x14; + fiat_25519_uint1 x15; + fiat_25519_addcarryx_u51(&x14, &x15, x13, x3, (x11 & UINT64_C(0x7ffffffffffff))); + uint64_t x16; + fiat_25519_uint1 x17; + fiat_25519_addcarryx_u51(&x16, &x17, x15, x5, (x11 & UINT64_C(0x7ffffffffffff))); + uint64_t x18; + fiat_25519_uint1 x19; + fiat_25519_addcarryx_u51(&x18, &x19, x17, x7, (x11 & UINT64_C(0x7ffffffffffff))); + uint64_t x20; + fiat_25519_uint1 x21; + fiat_25519_addcarryx_u51(&x20, &x21, x19, x9, (x11 & UINT64_C(0x7ffffffffffff))); + uint64_t x22 = (x20 << 4); + uint64_t x23 = (x18 * (uint64_t)0x2); + uint64_t x24 = (x16 << 6); + uint64_t x25 = (x14 << 3); + uint64_t x26 = (x12 >> 8); + uint8_t x27 = (uint8_t)(x12 & UINT8_C(0xff)); + uint64_t x28 = (x26 >> 8); + uint8_t x29 = (uint8_t)(x26 & UINT8_C(0xff)); + uint64_t x30 = (x28 >> 8); + uint8_t x31 = (uint8_t)(x28 & UINT8_C(0xff)); + uint64_t x32 = (x30 >> 8); + uint8_t x33 = (uint8_t)(x30 & UINT8_C(0xff)); + uint64_t x34 = (x32 >> 8); + uint8_t x35 = (uint8_t)(x32 & UINT8_C(0xff)); + uint8_t x36 = (uint8_t)(x34 >> 8); + uint8_t x37 = (uint8_t)(x34 & UINT8_C(0xff)); + uint64_t x38 = (x36 + x25); + uint64_t x39 = (x38 >> 8); + uint8_t x40 = (uint8_t)(x38 & UINT8_C(0xff)); + uint64_t x41 = (x39 >> 8); + uint8_t x42 = (uint8_t)(x39 & UINT8_C(0xff)); + uint64_t x43 = (x41 >> 8); + uint8_t x44 = (uint8_t)(x41 & UINT8_C(0xff)); + uint64_t x45 = (x43 >> 8); + uint8_t x46 = (uint8_t)(x43 & UINT8_C(0xff)); + uint64_t x47 = (x45 >> 8); + uint8_t x48 = (uint8_t)(x45 & UINT8_C(0xff)); + uint8_t x49 = (uint8_t)(x47 >> 8); + uint8_t x50 = (uint8_t)(x47 & UINT8_C(0xff)); + uint64_t x51 = (x49 + x24); + uint64_t x52 = (x51 >> 8); + uint8_t x53 = (uint8_t)(x51 & UINT8_C(0xff)); + uint64_t x54 = (x52 >> 8); + uint8_t x55 = (uint8_t)(x52 & UINT8_C(0xff)); + uint64_t x56 = (x54 >> 8); + uint8_t x57 = (uint8_t)(x54 & UINT8_C(0xff)); + uint64_t x58 = (x56 >> 8); + uint8_t x59 = (uint8_t)(x56 & UINT8_C(0xff)); + uint64_t x60 = (x58 >> 8); + uint8_t x61 = (uint8_t)(x58 & UINT8_C(0xff)); + uint64_t x62 = (x60 >> 8); + uint8_t x63 = (uint8_t)(x60 & UINT8_C(0xff)); + fiat_25519_uint1 x64 = (fiat_25519_uint1)(x62 >> 8); + uint8_t x65 = (uint8_t)(x62 & UINT8_C(0xff)); + uint64_t x66 = (x64 + x23); + uint64_t x67 = (x66 >> 8); + uint8_t x68 = (uint8_t)(x66 & UINT8_C(0xff)); + uint64_t x69 = (x67 >> 8); + uint8_t x70 = (uint8_t)(x67 & UINT8_C(0xff)); + uint64_t x71 = (x69 >> 8); + uint8_t x72 = (uint8_t)(x69 & UINT8_C(0xff)); + uint64_t x73 = (x71 >> 8); + uint8_t x74 = (uint8_t)(x71 & UINT8_C(0xff)); + uint64_t x75 = (x73 >> 8); + uint8_t x76 = (uint8_t)(x73 & UINT8_C(0xff)); + uint8_t x77 = (uint8_t)(x75 >> 8); + uint8_t x78 = (uint8_t)(x75 & UINT8_C(0xff)); + uint64_t x79 = (x77 + x22); + uint64_t x80 = (x79 >> 8); + uint8_t x81 = (uint8_t)(x79 & UINT8_C(0xff)); + uint64_t x82 = (x80 >> 8); + uint8_t x83 = (uint8_t)(x80 & UINT8_C(0xff)); + uint64_t x84 = (x82 >> 8); + uint8_t x85 = (uint8_t)(x82 & UINT8_C(0xff)); + uint64_t x86 = (x84 >> 8); + uint8_t x87 = (uint8_t)(x84 & UINT8_C(0xff)); + uint64_t x88 = (x86 >> 8); + uint8_t x89 = (uint8_t)(x86 & UINT8_C(0xff)); + uint8_t x90 = (uint8_t)(x88 >> 8); + uint8_t x91 = (uint8_t)(x88 & UINT8_C(0xff)); + out1[0] = x27; + out1[1] = x29; + out1[2] = x31; + out1[3] = x33; + out1[4] = x35; + out1[5] = x37; + out1[6] = x40; + out1[7] = x42; + out1[8] = x44; + out1[9] = x46; + out1[10] = x48; + out1[11] = x50; + out1[12] = x53; + out1[13] = x55; + out1[14] = x57; + out1[15] = x59; + out1[16] = x61; + out1[17] = x63; + out1[18] = x65; + out1[19] = x68; + out1[20] = x70; + out1[21] = x72; + out1[22] = x74; + out1[23] = x76; + out1[24] = x78; + out1[25] = x81; + out1[26] = x83; + out1[27] = x85; + out1[28] = x87; + out1[29] = x89; + out1[30] = x91; + out1[31] = x90; +} + +/* + * The function fiat_25519_from_bytes deserializes a field element from bytes in little-endian order. + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x7f]] + * Output Bounds: + * out1: [[0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc]] + */ +static void fiat_25519_from_bytes(uint64_t out1[5], const uint8_t arg1[32]) { + uint64_t x1 = ((uint64_t)(arg1[31]) << 44); + uint64_t x2 = ((uint64_t)(arg1[30]) << 36); + uint64_t x3 = ((uint64_t)(arg1[29]) << 28); + uint64_t x4 = ((uint64_t)(arg1[28]) << 20); + uint64_t x5 = ((uint64_t)(arg1[27]) << 12); + uint64_t x6 = ((uint64_t)(arg1[26]) << 4); + uint64_t x7 = ((uint64_t)(arg1[25]) << 47); + uint64_t x8 = ((uint64_t)(arg1[24]) << 39); + uint64_t x9 = ((uint64_t)(arg1[23]) << 31); + uint64_t x10 = ((uint64_t)(arg1[22]) << 23); + uint64_t x11 = ((uint64_t)(arg1[21]) << 15); + uint64_t x12 = ((uint64_t)(arg1[20]) << 7); + uint64_t x13 = ((uint64_t)(arg1[19]) << 50); + uint64_t x14 = ((uint64_t)(arg1[18]) << 42); + uint64_t x15 = ((uint64_t)(arg1[17]) << 34); + uint64_t x16 = ((uint64_t)(arg1[16]) << 26); + uint64_t x17 = ((uint64_t)(arg1[15]) << 18); + uint64_t x18 = ((uint64_t)(arg1[14]) << 10); + uint64_t x19 = ((uint64_t)(arg1[13]) << 2); + uint64_t x20 = ((uint64_t)(arg1[12]) << 45); + uint64_t x21 = ((uint64_t)(arg1[11]) << 37); + uint64_t x22 = ((uint64_t)(arg1[10]) << 29); + uint64_t x23 = ((uint64_t)(arg1[9]) << 21); + uint64_t x24 = ((uint64_t)(arg1[8]) << 13); + uint64_t x25 = ((uint64_t)(arg1[7]) << 5); + uint64_t x26 = ((uint64_t)(arg1[6]) << 48); + uint64_t x27 = ((uint64_t)(arg1[5]) << 40); + uint64_t x28 = ((uint64_t)(arg1[4]) << 32); + uint64_t x29 = ((uint64_t)(arg1[3]) << 24); + uint64_t x30 = ((uint64_t)(arg1[2]) << 16); + uint64_t x31 = ((uint64_t)(arg1[1]) << 8); + uint8_t x32 = (arg1[0]); + uint64_t x33 = (x32 + (x31 + (x30 + (x29 + (x28 + (x27 + x26)))))); + uint8_t x34 = (uint8_t)(x33 >> 51); + uint64_t x35 = (x33 & UINT64_C(0x7ffffffffffff)); + uint64_t x36 = (x6 + (x5 + (x4 + (x3 + (x2 + x1))))); + uint64_t x37 = (x12 + (x11 + (x10 + (x9 + (x8 + x7))))); + uint64_t x38 = (x19 + (x18 + (x17 + (x16 + (x15 + (x14 + x13)))))); + uint64_t x39 = (x25 + (x24 + (x23 + (x22 + (x21 + x20))))); + uint64_t x40 = (x34 + x39); + uint8_t x41 = (uint8_t)(x40 >> 51); + uint64_t x42 = (x40 & UINT64_C(0x7ffffffffffff)); + uint64_t x43 = (x41 + x38); + uint8_t x44 = (uint8_t)(x43 >> 51); + uint64_t x45 = (x43 & UINT64_C(0x7ffffffffffff)); + uint64_t x46 = (x44 + x37); + uint8_t x47 = (uint8_t)(x46 >> 51); + uint64_t x48 = (x46 & UINT64_C(0x7ffffffffffff)); + uint64_t x49 = (x47 + x36); + out1[0] = x35; + out1[1] = x42; + out1[2] = x45; + out1[3] = x48; + out1[4] = x49; +} + +/* + * The function fiat_25519_carry_scmul_121666 multiplies a field element by 121666 and reduces the result. + * Postconditions: + * eval out1 mod m = (121666 * eval arg1) mod m + * + * Input Bounds: + * arg1: [[0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664], [0x0 ~> 0x1a666666666664]] + * Output Bounds: + * out1: [[0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc], [0x0 ~> 0x8cccccccccccc]] + */ +static void fiat_25519_carry_scmul_121666(uint64_t out1[5], const uint64_t arg1[5]) { + fiat_25519_uint128 x1 = ((fiat_25519_uint128)UINT32_C(0x1db42) * (arg1[4])); + fiat_25519_uint128 x2 = ((fiat_25519_uint128)UINT32_C(0x1db42) * (arg1[3])); + fiat_25519_uint128 x3 = ((fiat_25519_uint128)UINT32_C(0x1db42) * (arg1[2])); + fiat_25519_uint128 x4 = ((fiat_25519_uint128)UINT32_C(0x1db42) * (arg1[1])); + fiat_25519_uint128 x5 = ((fiat_25519_uint128)UINT32_C(0x1db42) * (arg1[0])); + uint64_t x6 = (uint64_t)(x5 >> 51); + uint64_t x7 = (uint64_t)(x5 & UINT64_C(0x7ffffffffffff)); + fiat_25519_uint128 x8 = (x6 + x4); + uint64_t x9 = (uint64_t)(x8 >> 51); + uint64_t x10 = (uint64_t)(x8 & UINT64_C(0x7ffffffffffff)); + fiat_25519_uint128 x11 = (x9 + x3); + uint64_t x12 = (uint64_t)(x11 >> 51); + uint64_t x13 = (uint64_t)(x11 & UINT64_C(0x7ffffffffffff)); + fiat_25519_uint128 x14 = (x12 + x2); + uint64_t x15 = (uint64_t)(x14 >> 51); + uint64_t x16 = (uint64_t)(x14 & UINT64_C(0x7ffffffffffff)); + fiat_25519_uint128 x17 = (x15 + x1); + uint64_t x18 = (uint64_t)(x17 >> 51); + uint64_t x19 = (uint64_t)(x17 & UINT64_C(0x7ffffffffffff)); + uint64_t x20 = (x18 * UINT8_C(0x13)); + uint64_t x21 = (x7 + x20); + fiat_25519_uint1 x22 = (fiat_25519_uint1)(x21 >> 51); + uint64_t x23 = (x21 & UINT64_C(0x7ffffffffffff)); + uint64_t x24 = (x22 + x10); + fiat_25519_uint1 x25 = (fiat_25519_uint1)(x24 >> 51); + uint64_t x26 = (x24 & UINT64_C(0x7ffffffffffff)); + uint64_t x27 = (x25 + x13); + out1[0] = x23; + out1[1] = x26; + out1[2] = x27; + out1[3] = x16; + out1[4] = x19; +} + diff --git a/vendor/ring/third_party/fiat/p256_32.h b/vendor/ring/third_party/fiat/p256_32.h new file mode 100644 index 00000000..89241453 --- /dev/null +++ b/vendor/ring/third_party/fiat/p256_32.h @@ -0,0 +1,2426 @@ +/* Autogenerated: src/ExtractionOCaml/word_by_word_montgomery --static p256 '2^256 - 2^224 + 2^192 + 2^96 - 1' 32 mul square add sub opp from_montgomery nonzero selectznz to_bytes from_bytes */ +/* curve description: p256 */ +/* requested operations: mul, square, add, sub, opp, from_montgomery, nonzero, selectznz, to_bytes, from_bytes */ +/* m = 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff (from "2^256 - 2^224 + 2^192 + 2^96 - 1") */ +/* machine_wordsize = 32 (from "32") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ + +#include +typedef unsigned char fiat_p256_uint1; +typedef signed char fiat_p256_int1; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + + +/* + * The function fiat_p256_addcarryx_u32 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^32 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p256_addcarryx_u32(uint32_t* out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint32_t arg2, uint32_t arg3) { + uint64_t x1 = ((arg1 + (uint64_t)arg2) + arg3); + uint32_t x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + fiat_p256_uint1 x3 = (fiat_p256_uint1)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p256_subborrowx_u32 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^32 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p256_subborrowx_u32(uint32_t* out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint32_t arg2, uint32_t arg3) { + int64_t x1 = ((arg2 - (int64_t)arg1) - arg3); + fiat_p256_int1 x2 = (fiat_p256_int1)(x1 >> 32); + uint32_t x3 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + *out1 = x3; + *out2 = (fiat_p256_uint1)(0x0 - x2); +} + +/* + * The function fiat_p256_mulx_u32 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^32 + * out2 = ⌊arg1 * arg2 / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffff] + * arg2: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0xffffffff] + */ +static void fiat_p256_mulx_u32(uint32_t* out1, uint32_t* out2, uint32_t arg1, uint32_t arg2) { + uint64_t x1 = ((uint64_t)arg1 * arg2); + uint32_t x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + uint32_t x3 = (uint32_t)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p256_cmovznz_u32 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + */ +static void fiat_p256_cmovznz_u32(uint32_t* out1, fiat_p256_uint1 arg1, uint32_t arg2, uint32_t arg3) { + fiat_p256_uint1 x1 = (!(!arg1)); + uint32_t x2 = ((fiat_p256_int1)(0x0 - x1) & UINT32_C(0xffffffff)); + // Note this line has been patched from the synthesized code to add value + // barriers. + // + // Clang recognizes this pattern as a select. While it usually transforms it + // to a cmov, it sometimes further transforms it into a branch, which we do + // not want. + uint32_t x3 = ((value_barrier_u32(x2) & arg3) | (value_barrier_u32(~x2) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_p256_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_mul(uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { + uint32_t x1 = (arg1[1]); + uint32_t x2 = (arg1[2]); + uint32_t x3 = (arg1[3]); + uint32_t x4 = (arg1[4]); + uint32_t x5 = (arg1[5]); + uint32_t x6 = (arg1[6]); + uint32_t x7 = (arg1[7]); + uint32_t x8 = (arg1[0]); + uint32_t x9; + uint32_t x10; + fiat_p256_mulx_u32(&x9, &x10, x8, (arg2[7])); + uint32_t x11; + uint32_t x12; + fiat_p256_mulx_u32(&x11, &x12, x8, (arg2[6])); + uint32_t x13; + uint32_t x14; + fiat_p256_mulx_u32(&x13, &x14, x8, (arg2[5])); + uint32_t x15; + uint32_t x16; + fiat_p256_mulx_u32(&x15, &x16, x8, (arg2[4])); + uint32_t x17; + uint32_t x18; + fiat_p256_mulx_u32(&x17, &x18, x8, (arg2[3])); + uint32_t x19; + uint32_t x20; + fiat_p256_mulx_u32(&x19, &x20, x8, (arg2[2])); + uint32_t x21; + uint32_t x22; + fiat_p256_mulx_u32(&x21, &x22, x8, (arg2[1])); + uint32_t x23; + uint32_t x24; + fiat_p256_mulx_u32(&x23, &x24, x8, (arg2[0])); + uint32_t x25; + fiat_p256_uint1 x26; + fiat_p256_addcarryx_u32(&x25, &x26, 0x0, x24, x21); + uint32_t x27; + fiat_p256_uint1 x28; + fiat_p256_addcarryx_u32(&x27, &x28, x26, x22, x19); + uint32_t x29; + fiat_p256_uint1 x30; + fiat_p256_addcarryx_u32(&x29, &x30, x28, x20, x17); + uint32_t x31; + fiat_p256_uint1 x32; + fiat_p256_addcarryx_u32(&x31, &x32, x30, x18, x15); + uint32_t x33; + fiat_p256_uint1 x34; + fiat_p256_addcarryx_u32(&x33, &x34, x32, x16, x13); + uint32_t x35; + fiat_p256_uint1 x36; + fiat_p256_addcarryx_u32(&x35, &x36, x34, x14, x11); + uint32_t x37; + fiat_p256_uint1 x38; + fiat_p256_addcarryx_u32(&x37, &x38, x36, x12, x9); + uint32_t x39 = (x38 + x10); + uint32_t x40; + uint32_t x41; + fiat_p256_mulx_u32(&x40, &x41, x23, UINT32_C(0xffffffff)); + uint32_t x42; + uint32_t x43; + fiat_p256_mulx_u32(&x42, &x43, x23, UINT32_C(0xffffffff)); + uint32_t x44; + uint32_t x45; + fiat_p256_mulx_u32(&x44, &x45, x23, UINT32_C(0xffffffff)); + uint32_t x46; + uint32_t x47; + fiat_p256_mulx_u32(&x46, &x47, x23, UINT32_C(0xffffffff)); + uint32_t x48; + fiat_p256_uint1 x49; + fiat_p256_addcarryx_u32(&x48, &x49, 0x0, x47, x44); + uint32_t x50; + fiat_p256_uint1 x51; + fiat_p256_addcarryx_u32(&x50, &x51, x49, x45, x42); + uint32_t x52 = (x51 + x43); + uint32_t x53; + fiat_p256_uint1 x54; + fiat_p256_addcarryx_u32(&x53, &x54, 0x0, x23, x46); + uint32_t x55; + fiat_p256_uint1 x56; + fiat_p256_addcarryx_u32(&x55, &x56, x54, x25, x48); + uint32_t x57; + fiat_p256_uint1 x58; + fiat_p256_addcarryx_u32(&x57, &x58, x56, x27, x50); + uint32_t x59; + fiat_p256_uint1 x60; + fiat_p256_addcarryx_u32(&x59, &x60, x58, x29, x52); + uint32_t x61; + fiat_p256_uint1 x62; + fiat_p256_addcarryx_u32(&x61, &x62, x60, x31, 0x0); + uint32_t x63; + fiat_p256_uint1 x64; + fiat_p256_addcarryx_u32(&x63, &x64, x62, x33, 0x0); + uint32_t x65; + fiat_p256_uint1 x66; + fiat_p256_addcarryx_u32(&x65, &x66, x64, x35, x23); + uint32_t x67; + fiat_p256_uint1 x68; + fiat_p256_addcarryx_u32(&x67, &x68, x66, x37, x40); + uint32_t x69; + fiat_p256_uint1 x70; + fiat_p256_addcarryx_u32(&x69, &x70, x68, x39, x41); + uint32_t x71; + uint32_t x72; + fiat_p256_mulx_u32(&x71, &x72, x1, (arg2[7])); + uint32_t x73; + uint32_t x74; + fiat_p256_mulx_u32(&x73, &x74, x1, (arg2[6])); + uint32_t x75; + uint32_t x76; + fiat_p256_mulx_u32(&x75, &x76, x1, (arg2[5])); + uint32_t x77; + uint32_t x78; + fiat_p256_mulx_u32(&x77, &x78, x1, (arg2[4])); + uint32_t x79; + uint32_t x80; + fiat_p256_mulx_u32(&x79, &x80, x1, (arg2[3])); + uint32_t x81; + uint32_t x82; + fiat_p256_mulx_u32(&x81, &x82, x1, (arg2[2])); + uint32_t x83; + uint32_t x84; + fiat_p256_mulx_u32(&x83, &x84, x1, (arg2[1])); + uint32_t x85; + uint32_t x86; + fiat_p256_mulx_u32(&x85, &x86, x1, (arg2[0])); + uint32_t x87; + fiat_p256_uint1 x88; + fiat_p256_addcarryx_u32(&x87, &x88, 0x0, x86, x83); + uint32_t x89; + fiat_p256_uint1 x90; + fiat_p256_addcarryx_u32(&x89, &x90, x88, x84, x81); + uint32_t x91; + fiat_p256_uint1 x92; + fiat_p256_addcarryx_u32(&x91, &x92, x90, x82, x79); + uint32_t x93; + fiat_p256_uint1 x94; + fiat_p256_addcarryx_u32(&x93, &x94, x92, x80, x77); + uint32_t x95; + fiat_p256_uint1 x96; + fiat_p256_addcarryx_u32(&x95, &x96, x94, x78, x75); + uint32_t x97; + fiat_p256_uint1 x98; + fiat_p256_addcarryx_u32(&x97, &x98, x96, x76, x73); + uint32_t x99; + fiat_p256_uint1 x100; + fiat_p256_addcarryx_u32(&x99, &x100, x98, x74, x71); + uint32_t x101 = (x100 + x72); + uint32_t x102; + fiat_p256_uint1 x103; + fiat_p256_addcarryx_u32(&x102, &x103, 0x0, x55, x85); + uint32_t x104; + fiat_p256_uint1 x105; + fiat_p256_addcarryx_u32(&x104, &x105, x103, x57, x87); + uint32_t x106; + fiat_p256_uint1 x107; + fiat_p256_addcarryx_u32(&x106, &x107, x105, x59, x89); + uint32_t x108; + fiat_p256_uint1 x109; + fiat_p256_addcarryx_u32(&x108, &x109, x107, x61, x91); + uint32_t x110; + fiat_p256_uint1 x111; + fiat_p256_addcarryx_u32(&x110, &x111, x109, x63, x93); + uint32_t x112; + fiat_p256_uint1 x113; + fiat_p256_addcarryx_u32(&x112, &x113, x111, x65, x95); + uint32_t x114; + fiat_p256_uint1 x115; + fiat_p256_addcarryx_u32(&x114, &x115, x113, x67, x97); + uint32_t x116; + fiat_p256_uint1 x117; + fiat_p256_addcarryx_u32(&x116, &x117, x115, x69, x99); + uint32_t x118; + fiat_p256_uint1 x119; + fiat_p256_addcarryx_u32(&x118, &x119, x117, x70, x101); + uint32_t x120; + uint32_t x121; + fiat_p256_mulx_u32(&x120, &x121, x102, UINT32_C(0xffffffff)); + uint32_t x122; + uint32_t x123; + fiat_p256_mulx_u32(&x122, &x123, x102, UINT32_C(0xffffffff)); + uint32_t x124; + uint32_t x125; + fiat_p256_mulx_u32(&x124, &x125, x102, UINT32_C(0xffffffff)); + uint32_t x126; + uint32_t x127; + fiat_p256_mulx_u32(&x126, &x127, x102, UINT32_C(0xffffffff)); + uint32_t x128; + fiat_p256_uint1 x129; + fiat_p256_addcarryx_u32(&x128, &x129, 0x0, x127, x124); + uint32_t x130; + fiat_p256_uint1 x131; + fiat_p256_addcarryx_u32(&x130, &x131, x129, x125, x122); + uint32_t x132 = (x131 + x123); + uint32_t x133; + fiat_p256_uint1 x134; + fiat_p256_addcarryx_u32(&x133, &x134, 0x0, x102, x126); + uint32_t x135; + fiat_p256_uint1 x136; + fiat_p256_addcarryx_u32(&x135, &x136, x134, x104, x128); + uint32_t x137; + fiat_p256_uint1 x138; + fiat_p256_addcarryx_u32(&x137, &x138, x136, x106, x130); + uint32_t x139; + fiat_p256_uint1 x140; + fiat_p256_addcarryx_u32(&x139, &x140, x138, x108, x132); + uint32_t x141; + fiat_p256_uint1 x142; + fiat_p256_addcarryx_u32(&x141, &x142, x140, x110, 0x0); + uint32_t x143; + fiat_p256_uint1 x144; + fiat_p256_addcarryx_u32(&x143, &x144, x142, x112, 0x0); + uint32_t x145; + fiat_p256_uint1 x146; + fiat_p256_addcarryx_u32(&x145, &x146, x144, x114, x102); + uint32_t x147; + fiat_p256_uint1 x148; + fiat_p256_addcarryx_u32(&x147, &x148, x146, x116, x120); + uint32_t x149; + fiat_p256_uint1 x150; + fiat_p256_addcarryx_u32(&x149, &x150, x148, x118, x121); + uint32_t x151 = ((uint32_t)x150 + x119); + uint32_t x152; + uint32_t x153; + fiat_p256_mulx_u32(&x152, &x153, x2, (arg2[7])); + uint32_t x154; + uint32_t x155; + fiat_p256_mulx_u32(&x154, &x155, x2, (arg2[6])); + uint32_t x156; + uint32_t x157; + fiat_p256_mulx_u32(&x156, &x157, x2, (arg2[5])); + uint32_t x158; + uint32_t x159; + fiat_p256_mulx_u32(&x158, &x159, x2, (arg2[4])); + uint32_t x160; + uint32_t x161; + fiat_p256_mulx_u32(&x160, &x161, x2, (arg2[3])); + uint32_t x162; + uint32_t x163; + fiat_p256_mulx_u32(&x162, &x163, x2, (arg2[2])); + uint32_t x164; + uint32_t x165; + fiat_p256_mulx_u32(&x164, &x165, x2, (arg2[1])); + uint32_t x166; + uint32_t x167; + fiat_p256_mulx_u32(&x166, &x167, x2, (arg2[0])); + uint32_t x168; + fiat_p256_uint1 x169; + fiat_p256_addcarryx_u32(&x168, &x169, 0x0, x167, x164); + uint32_t x170; + fiat_p256_uint1 x171; + fiat_p256_addcarryx_u32(&x170, &x171, x169, x165, x162); + uint32_t x172; + fiat_p256_uint1 x173; + fiat_p256_addcarryx_u32(&x172, &x173, x171, x163, x160); + uint32_t x174; + fiat_p256_uint1 x175; + fiat_p256_addcarryx_u32(&x174, &x175, x173, x161, x158); + uint32_t x176; + fiat_p256_uint1 x177; + fiat_p256_addcarryx_u32(&x176, &x177, x175, x159, x156); + uint32_t x178; + fiat_p256_uint1 x179; + fiat_p256_addcarryx_u32(&x178, &x179, x177, x157, x154); + uint32_t x180; + fiat_p256_uint1 x181; + fiat_p256_addcarryx_u32(&x180, &x181, x179, x155, x152); + uint32_t x182 = (x181 + x153); + uint32_t x183; + fiat_p256_uint1 x184; + fiat_p256_addcarryx_u32(&x183, &x184, 0x0, x135, x166); + uint32_t x185; + fiat_p256_uint1 x186; + fiat_p256_addcarryx_u32(&x185, &x186, x184, x137, x168); + uint32_t x187; + fiat_p256_uint1 x188; + fiat_p256_addcarryx_u32(&x187, &x188, x186, x139, x170); + uint32_t x189; + fiat_p256_uint1 x190; + fiat_p256_addcarryx_u32(&x189, &x190, x188, x141, x172); + uint32_t x191; + fiat_p256_uint1 x192; + fiat_p256_addcarryx_u32(&x191, &x192, x190, x143, x174); + uint32_t x193; + fiat_p256_uint1 x194; + fiat_p256_addcarryx_u32(&x193, &x194, x192, x145, x176); + uint32_t x195; + fiat_p256_uint1 x196; + fiat_p256_addcarryx_u32(&x195, &x196, x194, x147, x178); + uint32_t x197; + fiat_p256_uint1 x198; + fiat_p256_addcarryx_u32(&x197, &x198, x196, x149, x180); + uint32_t x199; + fiat_p256_uint1 x200; + fiat_p256_addcarryx_u32(&x199, &x200, x198, x151, x182); + uint32_t x201; + uint32_t x202; + fiat_p256_mulx_u32(&x201, &x202, x183, UINT32_C(0xffffffff)); + uint32_t x203; + uint32_t x204; + fiat_p256_mulx_u32(&x203, &x204, x183, UINT32_C(0xffffffff)); + uint32_t x205; + uint32_t x206; + fiat_p256_mulx_u32(&x205, &x206, x183, UINT32_C(0xffffffff)); + uint32_t x207; + uint32_t x208; + fiat_p256_mulx_u32(&x207, &x208, x183, UINT32_C(0xffffffff)); + uint32_t x209; + fiat_p256_uint1 x210; + fiat_p256_addcarryx_u32(&x209, &x210, 0x0, x208, x205); + uint32_t x211; + fiat_p256_uint1 x212; + fiat_p256_addcarryx_u32(&x211, &x212, x210, x206, x203); + uint32_t x213 = (x212 + x204); + uint32_t x214; + fiat_p256_uint1 x215; + fiat_p256_addcarryx_u32(&x214, &x215, 0x0, x183, x207); + uint32_t x216; + fiat_p256_uint1 x217; + fiat_p256_addcarryx_u32(&x216, &x217, x215, x185, x209); + uint32_t x218; + fiat_p256_uint1 x219; + fiat_p256_addcarryx_u32(&x218, &x219, x217, x187, x211); + uint32_t x220; + fiat_p256_uint1 x221; + fiat_p256_addcarryx_u32(&x220, &x221, x219, x189, x213); + uint32_t x222; + fiat_p256_uint1 x223; + fiat_p256_addcarryx_u32(&x222, &x223, x221, x191, 0x0); + uint32_t x224; + fiat_p256_uint1 x225; + fiat_p256_addcarryx_u32(&x224, &x225, x223, x193, 0x0); + uint32_t x226; + fiat_p256_uint1 x227; + fiat_p256_addcarryx_u32(&x226, &x227, x225, x195, x183); + uint32_t x228; + fiat_p256_uint1 x229; + fiat_p256_addcarryx_u32(&x228, &x229, x227, x197, x201); + uint32_t x230; + fiat_p256_uint1 x231; + fiat_p256_addcarryx_u32(&x230, &x231, x229, x199, x202); + uint32_t x232 = ((uint32_t)x231 + x200); + uint32_t x233; + uint32_t x234; + fiat_p256_mulx_u32(&x233, &x234, x3, (arg2[7])); + uint32_t x235; + uint32_t x236; + fiat_p256_mulx_u32(&x235, &x236, x3, (arg2[6])); + uint32_t x237; + uint32_t x238; + fiat_p256_mulx_u32(&x237, &x238, x3, (arg2[5])); + uint32_t x239; + uint32_t x240; + fiat_p256_mulx_u32(&x239, &x240, x3, (arg2[4])); + uint32_t x241; + uint32_t x242; + fiat_p256_mulx_u32(&x241, &x242, x3, (arg2[3])); + uint32_t x243; + uint32_t x244; + fiat_p256_mulx_u32(&x243, &x244, x3, (arg2[2])); + uint32_t x245; + uint32_t x246; + fiat_p256_mulx_u32(&x245, &x246, x3, (arg2[1])); + uint32_t x247; + uint32_t x248; + fiat_p256_mulx_u32(&x247, &x248, x3, (arg2[0])); + uint32_t x249; + fiat_p256_uint1 x250; + fiat_p256_addcarryx_u32(&x249, &x250, 0x0, x248, x245); + uint32_t x251; + fiat_p256_uint1 x252; + fiat_p256_addcarryx_u32(&x251, &x252, x250, x246, x243); + uint32_t x253; + fiat_p256_uint1 x254; + fiat_p256_addcarryx_u32(&x253, &x254, x252, x244, x241); + uint32_t x255; + fiat_p256_uint1 x256; + fiat_p256_addcarryx_u32(&x255, &x256, x254, x242, x239); + uint32_t x257; + fiat_p256_uint1 x258; + fiat_p256_addcarryx_u32(&x257, &x258, x256, x240, x237); + uint32_t x259; + fiat_p256_uint1 x260; + fiat_p256_addcarryx_u32(&x259, &x260, x258, x238, x235); + uint32_t x261; + fiat_p256_uint1 x262; + fiat_p256_addcarryx_u32(&x261, &x262, x260, x236, x233); + uint32_t x263 = (x262 + x234); + uint32_t x264; + fiat_p256_uint1 x265; + fiat_p256_addcarryx_u32(&x264, &x265, 0x0, x216, x247); + uint32_t x266; + fiat_p256_uint1 x267; + fiat_p256_addcarryx_u32(&x266, &x267, x265, x218, x249); + uint32_t x268; + fiat_p256_uint1 x269; + fiat_p256_addcarryx_u32(&x268, &x269, x267, x220, x251); + uint32_t x270; + fiat_p256_uint1 x271; + fiat_p256_addcarryx_u32(&x270, &x271, x269, x222, x253); + uint32_t x272; + fiat_p256_uint1 x273; + fiat_p256_addcarryx_u32(&x272, &x273, x271, x224, x255); + uint32_t x274; + fiat_p256_uint1 x275; + fiat_p256_addcarryx_u32(&x274, &x275, x273, x226, x257); + uint32_t x276; + fiat_p256_uint1 x277; + fiat_p256_addcarryx_u32(&x276, &x277, x275, x228, x259); + uint32_t x278; + fiat_p256_uint1 x279; + fiat_p256_addcarryx_u32(&x278, &x279, x277, x230, x261); + uint32_t x280; + fiat_p256_uint1 x281; + fiat_p256_addcarryx_u32(&x280, &x281, x279, x232, x263); + uint32_t x282; + uint32_t x283; + fiat_p256_mulx_u32(&x282, &x283, x264, UINT32_C(0xffffffff)); + uint32_t x284; + uint32_t x285; + fiat_p256_mulx_u32(&x284, &x285, x264, UINT32_C(0xffffffff)); + uint32_t x286; + uint32_t x287; + fiat_p256_mulx_u32(&x286, &x287, x264, UINT32_C(0xffffffff)); + uint32_t x288; + uint32_t x289; + fiat_p256_mulx_u32(&x288, &x289, x264, UINT32_C(0xffffffff)); + uint32_t x290; + fiat_p256_uint1 x291; + fiat_p256_addcarryx_u32(&x290, &x291, 0x0, x289, x286); + uint32_t x292; + fiat_p256_uint1 x293; + fiat_p256_addcarryx_u32(&x292, &x293, x291, x287, x284); + uint32_t x294 = (x293 + x285); + uint32_t x295; + fiat_p256_uint1 x296; + fiat_p256_addcarryx_u32(&x295, &x296, 0x0, x264, x288); + uint32_t x297; + fiat_p256_uint1 x298; + fiat_p256_addcarryx_u32(&x297, &x298, x296, x266, x290); + uint32_t x299; + fiat_p256_uint1 x300; + fiat_p256_addcarryx_u32(&x299, &x300, x298, x268, x292); + uint32_t x301; + fiat_p256_uint1 x302; + fiat_p256_addcarryx_u32(&x301, &x302, x300, x270, x294); + uint32_t x303; + fiat_p256_uint1 x304; + fiat_p256_addcarryx_u32(&x303, &x304, x302, x272, 0x0); + uint32_t x305; + fiat_p256_uint1 x306; + fiat_p256_addcarryx_u32(&x305, &x306, x304, x274, 0x0); + uint32_t x307; + fiat_p256_uint1 x308; + fiat_p256_addcarryx_u32(&x307, &x308, x306, x276, x264); + uint32_t x309; + fiat_p256_uint1 x310; + fiat_p256_addcarryx_u32(&x309, &x310, x308, x278, x282); + uint32_t x311; + fiat_p256_uint1 x312; + fiat_p256_addcarryx_u32(&x311, &x312, x310, x280, x283); + uint32_t x313 = ((uint32_t)x312 + x281); + uint32_t x314; + uint32_t x315; + fiat_p256_mulx_u32(&x314, &x315, x4, (arg2[7])); + uint32_t x316; + uint32_t x317; + fiat_p256_mulx_u32(&x316, &x317, x4, (arg2[6])); + uint32_t x318; + uint32_t x319; + fiat_p256_mulx_u32(&x318, &x319, x4, (arg2[5])); + uint32_t x320; + uint32_t x321; + fiat_p256_mulx_u32(&x320, &x321, x4, (arg2[4])); + uint32_t x322; + uint32_t x323; + fiat_p256_mulx_u32(&x322, &x323, x4, (arg2[3])); + uint32_t x324; + uint32_t x325; + fiat_p256_mulx_u32(&x324, &x325, x4, (arg2[2])); + uint32_t x326; + uint32_t x327; + fiat_p256_mulx_u32(&x326, &x327, x4, (arg2[1])); + uint32_t x328; + uint32_t x329; + fiat_p256_mulx_u32(&x328, &x329, x4, (arg2[0])); + uint32_t x330; + fiat_p256_uint1 x331; + fiat_p256_addcarryx_u32(&x330, &x331, 0x0, x329, x326); + uint32_t x332; + fiat_p256_uint1 x333; + fiat_p256_addcarryx_u32(&x332, &x333, x331, x327, x324); + uint32_t x334; + fiat_p256_uint1 x335; + fiat_p256_addcarryx_u32(&x334, &x335, x333, x325, x322); + uint32_t x336; + fiat_p256_uint1 x337; + fiat_p256_addcarryx_u32(&x336, &x337, x335, x323, x320); + uint32_t x338; + fiat_p256_uint1 x339; + fiat_p256_addcarryx_u32(&x338, &x339, x337, x321, x318); + uint32_t x340; + fiat_p256_uint1 x341; + fiat_p256_addcarryx_u32(&x340, &x341, x339, x319, x316); + uint32_t x342; + fiat_p256_uint1 x343; + fiat_p256_addcarryx_u32(&x342, &x343, x341, x317, x314); + uint32_t x344 = (x343 + x315); + uint32_t x345; + fiat_p256_uint1 x346; + fiat_p256_addcarryx_u32(&x345, &x346, 0x0, x297, x328); + uint32_t x347; + fiat_p256_uint1 x348; + fiat_p256_addcarryx_u32(&x347, &x348, x346, x299, x330); + uint32_t x349; + fiat_p256_uint1 x350; + fiat_p256_addcarryx_u32(&x349, &x350, x348, x301, x332); + uint32_t x351; + fiat_p256_uint1 x352; + fiat_p256_addcarryx_u32(&x351, &x352, x350, x303, x334); + uint32_t x353; + fiat_p256_uint1 x354; + fiat_p256_addcarryx_u32(&x353, &x354, x352, x305, x336); + uint32_t x355; + fiat_p256_uint1 x356; + fiat_p256_addcarryx_u32(&x355, &x356, x354, x307, x338); + uint32_t x357; + fiat_p256_uint1 x358; + fiat_p256_addcarryx_u32(&x357, &x358, x356, x309, x340); + uint32_t x359; + fiat_p256_uint1 x360; + fiat_p256_addcarryx_u32(&x359, &x360, x358, x311, x342); + uint32_t x361; + fiat_p256_uint1 x362; + fiat_p256_addcarryx_u32(&x361, &x362, x360, x313, x344); + uint32_t x363; + uint32_t x364; + fiat_p256_mulx_u32(&x363, &x364, x345, UINT32_C(0xffffffff)); + uint32_t x365; + uint32_t x366; + fiat_p256_mulx_u32(&x365, &x366, x345, UINT32_C(0xffffffff)); + uint32_t x367; + uint32_t x368; + fiat_p256_mulx_u32(&x367, &x368, x345, UINT32_C(0xffffffff)); + uint32_t x369; + uint32_t x370; + fiat_p256_mulx_u32(&x369, &x370, x345, UINT32_C(0xffffffff)); + uint32_t x371; + fiat_p256_uint1 x372; + fiat_p256_addcarryx_u32(&x371, &x372, 0x0, x370, x367); + uint32_t x373; + fiat_p256_uint1 x374; + fiat_p256_addcarryx_u32(&x373, &x374, x372, x368, x365); + uint32_t x375 = (x374 + x366); + uint32_t x376; + fiat_p256_uint1 x377; + fiat_p256_addcarryx_u32(&x376, &x377, 0x0, x345, x369); + uint32_t x378; + fiat_p256_uint1 x379; + fiat_p256_addcarryx_u32(&x378, &x379, x377, x347, x371); + uint32_t x380; + fiat_p256_uint1 x381; + fiat_p256_addcarryx_u32(&x380, &x381, x379, x349, x373); + uint32_t x382; + fiat_p256_uint1 x383; + fiat_p256_addcarryx_u32(&x382, &x383, x381, x351, x375); + uint32_t x384; + fiat_p256_uint1 x385; + fiat_p256_addcarryx_u32(&x384, &x385, x383, x353, 0x0); + uint32_t x386; + fiat_p256_uint1 x387; + fiat_p256_addcarryx_u32(&x386, &x387, x385, x355, 0x0); + uint32_t x388; + fiat_p256_uint1 x389; + fiat_p256_addcarryx_u32(&x388, &x389, x387, x357, x345); + uint32_t x390; + fiat_p256_uint1 x391; + fiat_p256_addcarryx_u32(&x390, &x391, x389, x359, x363); + uint32_t x392; + fiat_p256_uint1 x393; + fiat_p256_addcarryx_u32(&x392, &x393, x391, x361, x364); + uint32_t x394 = ((uint32_t)x393 + x362); + uint32_t x395; + uint32_t x396; + fiat_p256_mulx_u32(&x395, &x396, x5, (arg2[7])); + uint32_t x397; + uint32_t x398; + fiat_p256_mulx_u32(&x397, &x398, x5, (arg2[6])); + uint32_t x399; + uint32_t x400; + fiat_p256_mulx_u32(&x399, &x400, x5, (arg2[5])); + uint32_t x401; + uint32_t x402; + fiat_p256_mulx_u32(&x401, &x402, x5, (arg2[4])); + uint32_t x403; + uint32_t x404; + fiat_p256_mulx_u32(&x403, &x404, x5, (arg2[3])); + uint32_t x405; + uint32_t x406; + fiat_p256_mulx_u32(&x405, &x406, x5, (arg2[2])); + uint32_t x407; + uint32_t x408; + fiat_p256_mulx_u32(&x407, &x408, x5, (arg2[1])); + uint32_t x409; + uint32_t x410; + fiat_p256_mulx_u32(&x409, &x410, x5, (arg2[0])); + uint32_t x411; + fiat_p256_uint1 x412; + fiat_p256_addcarryx_u32(&x411, &x412, 0x0, x410, x407); + uint32_t x413; + fiat_p256_uint1 x414; + fiat_p256_addcarryx_u32(&x413, &x414, x412, x408, x405); + uint32_t x415; + fiat_p256_uint1 x416; + fiat_p256_addcarryx_u32(&x415, &x416, x414, x406, x403); + uint32_t x417; + fiat_p256_uint1 x418; + fiat_p256_addcarryx_u32(&x417, &x418, x416, x404, x401); + uint32_t x419; + fiat_p256_uint1 x420; + fiat_p256_addcarryx_u32(&x419, &x420, x418, x402, x399); + uint32_t x421; + fiat_p256_uint1 x422; + fiat_p256_addcarryx_u32(&x421, &x422, x420, x400, x397); + uint32_t x423; + fiat_p256_uint1 x424; + fiat_p256_addcarryx_u32(&x423, &x424, x422, x398, x395); + uint32_t x425 = (x424 + x396); + uint32_t x426; + fiat_p256_uint1 x427; + fiat_p256_addcarryx_u32(&x426, &x427, 0x0, x378, x409); + uint32_t x428; + fiat_p256_uint1 x429; + fiat_p256_addcarryx_u32(&x428, &x429, x427, x380, x411); + uint32_t x430; + fiat_p256_uint1 x431; + fiat_p256_addcarryx_u32(&x430, &x431, x429, x382, x413); + uint32_t x432; + fiat_p256_uint1 x433; + fiat_p256_addcarryx_u32(&x432, &x433, x431, x384, x415); + uint32_t x434; + fiat_p256_uint1 x435; + fiat_p256_addcarryx_u32(&x434, &x435, x433, x386, x417); + uint32_t x436; + fiat_p256_uint1 x437; + fiat_p256_addcarryx_u32(&x436, &x437, x435, x388, x419); + uint32_t x438; + fiat_p256_uint1 x439; + fiat_p256_addcarryx_u32(&x438, &x439, x437, x390, x421); + uint32_t x440; + fiat_p256_uint1 x441; + fiat_p256_addcarryx_u32(&x440, &x441, x439, x392, x423); + uint32_t x442; + fiat_p256_uint1 x443; + fiat_p256_addcarryx_u32(&x442, &x443, x441, x394, x425); + uint32_t x444; + uint32_t x445; + fiat_p256_mulx_u32(&x444, &x445, x426, UINT32_C(0xffffffff)); + uint32_t x446; + uint32_t x447; + fiat_p256_mulx_u32(&x446, &x447, x426, UINT32_C(0xffffffff)); + uint32_t x448; + uint32_t x449; + fiat_p256_mulx_u32(&x448, &x449, x426, UINT32_C(0xffffffff)); + uint32_t x450; + uint32_t x451; + fiat_p256_mulx_u32(&x450, &x451, x426, UINT32_C(0xffffffff)); + uint32_t x452; + fiat_p256_uint1 x453; + fiat_p256_addcarryx_u32(&x452, &x453, 0x0, x451, x448); + uint32_t x454; + fiat_p256_uint1 x455; + fiat_p256_addcarryx_u32(&x454, &x455, x453, x449, x446); + uint32_t x456 = (x455 + x447); + uint32_t x457; + fiat_p256_uint1 x458; + fiat_p256_addcarryx_u32(&x457, &x458, 0x0, x426, x450); + uint32_t x459; + fiat_p256_uint1 x460; + fiat_p256_addcarryx_u32(&x459, &x460, x458, x428, x452); + uint32_t x461; + fiat_p256_uint1 x462; + fiat_p256_addcarryx_u32(&x461, &x462, x460, x430, x454); + uint32_t x463; + fiat_p256_uint1 x464; + fiat_p256_addcarryx_u32(&x463, &x464, x462, x432, x456); + uint32_t x465; + fiat_p256_uint1 x466; + fiat_p256_addcarryx_u32(&x465, &x466, x464, x434, 0x0); + uint32_t x467; + fiat_p256_uint1 x468; + fiat_p256_addcarryx_u32(&x467, &x468, x466, x436, 0x0); + uint32_t x469; + fiat_p256_uint1 x470; + fiat_p256_addcarryx_u32(&x469, &x470, x468, x438, x426); + uint32_t x471; + fiat_p256_uint1 x472; + fiat_p256_addcarryx_u32(&x471, &x472, x470, x440, x444); + uint32_t x473; + fiat_p256_uint1 x474; + fiat_p256_addcarryx_u32(&x473, &x474, x472, x442, x445); + uint32_t x475 = ((uint32_t)x474 + x443); + uint32_t x476; + uint32_t x477; + fiat_p256_mulx_u32(&x476, &x477, x6, (arg2[7])); + uint32_t x478; + uint32_t x479; + fiat_p256_mulx_u32(&x478, &x479, x6, (arg2[6])); + uint32_t x480; + uint32_t x481; + fiat_p256_mulx_u32(&x480, &x481, x6, (arg2[5])); + uint32_t x482; + uint32_t x483; + fiat_p256_mulx_u32(&x482, &x483, x6, (arg2[4])); + uint32_t x484; + uint32_t x485; + fiat_p256_mulx_u32(&x484, &x485, x6, (arg2[3])); + uint32_t x486; + uint32_t x487; + fiat_p256_mulx_u32(&x486, &x487, x6, (arg2[2])); + uint32_t x488; + uint32_t x489; + fiat_p256_mulx_u32(&x488, &x489, x6, (arg2[1])); + uint32_t x490; + uint32_t x491; + fiat_p256_mulx_u32(&x490, &x491, x6, (arg2[0])); + uint32_t x492; + fiat_p256_uint1 x493; + fiat_p256_addcarryx_u32(&x492, &x493, 0x0, x491, x488); + uint32_t x494; + fiat_p256_uint1 x495; + fiat_p256_addcarryx_u32(&x494, &x495, x493, x489, x486); + uint32_t x496; + fiat_p256_uint1 x497; + fiat_p256_addcarryx_u32(&x496, &x497, x495, x487, x484); + uint32_t x498; + fiat_p256_uint1 x499; + fiat_p256_addcarryx_u32(&x498, &x499, x497, x485, x482); + uint32_t x500; + fiat_p256_uint1 x501; + fiat_p256_addcarryx_u32(&x500, &x501, x499, x483, x480); + uint32_t x502; + fiat_p256_uint1 x503; + fiat_p256_addcarryx_u32(&x502, &x503, x501, x481, x478); + uint32_t x504; + fiat_p256_uint1 x505; + fiat_p256_addcarryx_u32(&x504, &x505, x503, x479, x476); + uint32_t x506 = (x505 + x477); + uint32_t x507; + fiat_p256_uint1 x508; + fiat_p256_addcarryx_u32(&x507, &x508, 0x0, x459, x490); + uint32_t x509; + fiat_p256_uint1 x510; + fiat_p256_addcarryx_u32(&x509, &x510, x508, x461, x492); + uint32_t x511; + fiat_p256_uint1 x512; + fiat_p256_addcarryx_u32(&x511, &x512, x510, x463, x494); + uint32_t x513; + fiat_p256_uint1 x514; + fiat_p256_addcarryx_u32(&x513, &x514, x512, x465, x496); + uint32_t x515; + fiat_p256_uint1 x516; + fiat_p256_addcarryx_u32(&x515, &x516, x514, x467, x498); + uint32_t x517; + fiat_p256_uint1 x518; + fiat_p256_addcarryx_u32(&x517, &x518, x516, x469, x500); + uint32_t x519; + fiat_p256_uint1 x520; + fiat_p256_addcarryx_u32(&x519, &x520, x518, x471, x502); + uint32_t x521; + fiat_p256_uint1 x522; + fiat_p256_addcarryx_u32(&x521, &x522, x520, x473, x504); + uint32_t x523; + fiat_p256_uint1 x524; + fiat_p256_addcarryx_u32(&x523, &x524, x522, x475, x506); + uint32_t x525; + uint32_t x526; + fiat_p256_mulx_u32(&x525, &x526, x507, UINT32_C(0xffffffff)); + uint32_t x527; + uint32_t x528; + fiat_p256_mulx_u32(&x527, &x528, x507, UINT32_C(0xffffffff)); + uint32_t x529; + uint32_t x530; + fiat_p256_mulx_u32(&x529, &x530, x507, UINT32_C(0xffffffff)); + uint32_t x531; + uint32_t x532; + fiat_p256_mulx_u32(&x531, &x532, x507, UINT32_C(0xffffffff)); + uint32_t x533; + fiat_p256_uint1 x534; + fiat_p256_addcarryx_u32(&x533, &x534, 0x0, x532, x529); + uint32_t x535; + fiat_p256_uint1 x536; + fiat_p256_addcarryx_u32(&x535, &x536, x534, x530, x527); + uint32_t x537 = (x536 + x528); + uint32_t x538; + fiat_p256_uint1 x539; + fiat_p256_addcarryx_u32(&x538, &x539, 0x0, x507, x531); + uint32_t x540; + fiat_p256_uint1 x541; + fiat_p256_addcarryx_u32(&x540, &x541, x539, x509, x533); + uint32_t x542; + fiat_p256_uint1 x543; + fiat_p256_addcarryx_u32(&x542, &x543, x541, x511, x535); + uint32_t x544; + fiat_p256_uint1 x545; + fiat_p256_addcarryx_u32(&x544, &x545, x543, x513, x537); + uint32_t x546; + fiat_p256_uint1 x547; + fiat_p256_addcarryx_u32(&x546, &x547, x545, x515, 0x0); + uint32_t x548; + fiat_p256_uint1 x549; + fiat_p256_addcarryx_u32(&x548, &x549, x547, x517, 0x0); + uint32_t x550; + fiat_p256_uint1 x551; + fiat_p256_addcarryx_u32(&x550, &x551, x549, x519, x507); + uint32_t x552; + fiat_p256_uint1 x553; + fiat_p256_addcarryx_u32(&x552, &x553, x551, x521, x525); + uint32_t x554; + fiat_p256_uint1 x555; + fiat_p256_addcarryx_u32(&x554, &x555, x553, x523, x526); + uint32_t x556 = ((uint32_t)x555 + x524); + uint32_t x557; + uint32_t x558; + fiat_p256_mulx_u32(&x557, &x558, x7, (arg2[7])); + uint32_t x559; + uint32_t x560; + fiat_p256_mulx_u32(&x559, &x560, x7, (arg2[6])); + uint32_t x561; + uint32_t x562; + fiat_p256_mulx_u32(&x561, &x562, x7, (arg2[5])); + uint32_t x563; + uint32_t x564; + fiat_p256_mulx_u32(&x563, &x564, x7, (arg2[4])); + uint32_t x565; + uint32_t x566; + fiat_p256_mulx_u32(&x565, &x566, x7, (arg2[3])); + uint32_t x567; + uint32_t x568; + fiat_p256_mulx_u32(&x567, &x568, x7, (arg2[2])); + uint32_t x569; + uint32_t x570; + fiat_p256_mulx_u32(&x569, &x570, x7, (arg2[1])); + uint32_t x571; + uint32_t x572; + fiat_p256_mulx_u32(&x571, &x572, x7, (arg2[0])); + uint32_t x573; + fiat_p256_uint1 x574; + fiat_p256_addcarryx_u32(&x573, &x574, 0x0, x572, x569); + uint32_t x575; + fiat_p256_uint1 x576; + fiat_p256_addcarryx_u32(&x575, &x576, x574, x570, x567); + uint32_t x577; + fiat_p256_uint1 x578; + fiat_p256_addcarryx_u32(&x577, &x578, x576, x568, x565); + uint32_t x579; + fiat_p256_uint1 x580; + fiat_p256_addcarryx_u32(&x579, &x580, x578, x566, x563); + uint32_t x581; + fiat_p256_uint1 x582; + fiat_p256_addcarryx_u32(&x581, &x582, x580, x564, x561); + uint32_t x583; + fiat_p256_uint1 x584; + fiat_p256_addcarryx_u32(&x583, &x584, x582, x562, x559); + uint32_t x585; + fiat_p256_uint1 x586; + fiat_p256_addcarryx_u32(&x585, &x586, x584, x560, x557); + uint32_t x587 = (x586 + x558); + uint32_t x588; + fiat_p256_uint1 x589; + fiat_p256_addcarryx_u32(&x588, &x589, 0x0, x540, x571); + uint32_t x590; + fiat_p256_uint1 x591; + fiat_p256_addcarryx_u32(&x590, &x591, x589, x542, x573); + uint32_t x592; + fiat_p256_uint1 x593; + fiat_p256_addcarryx_u32(&x592, &x593, x591, x544, x575); + uint32_t x594; + fiat_p256_uint1 x595; + fiat_p256_addcarryx_u32(&x594, &x595, x593, x546, x577); + uint32_t x596; + fiat_p256_uint1 x597; + fiat_p256_addcarryx_u32(&x596, &x597, x595, x548, x579); + uint32_t x598; + fiat_p256_uint1 x599; + fiat_p256_addcarryx_u32(&x598, &x599, x597, x550, x581); + uint32_t x600; + fiat_p256_uint1 x601; + fiat_p256_addcarryx_u32(&x600, &x601, x599, x552, x583); + uint32_t x602; + fiat_p256_uint1 x603; + fiat_p256_addcarryx_u32(&x602, &x603, x601, x554, x585); + uint32_t x604; + fiat_p256_uint1 x605; + fiat_p256_addcarryx_u32(&x604, &x605, x603, x556, x587); + uint32_t x606; + uint32_t x607; + fiat_p256_mulx_u32(&x606, &x607, x588, UINT32_C(0xffffffff)); + uint32_t x608; + uint32_t x609; + fiat_p256_mulx_u32(&x608, &x609, x588, UINT32_C(0xffffffff)); + uint32_t x610; + uint32_t x611; + fiat_p256_mulx_u32(&x610, &x611, x588, UINT32_C(0xffffffff)); + uint32_t x612; + uint32_t x613; + fiat_p256_mulx_u32(&x612, &x613, x588, UINT32_C(0xffffffff)); + uint32_t x614; + fiat_p256_uint1 x615; + fiat_p256_addcarryx_u32(&x614, &x615, 0x0, x613, x610); + uint32_t x616; + fiat_p256_uint1 x617; + fiat_p256_addcarryx_u32(&x616, &x617, x615, x611, x608); + uint32_t x618 = (x617 + x609); + uint32_t x619; + fiat_p256_uint1 x620; + fiat_p256_addcarryx_u32(&x619, &x620, 0x0, x588, x612); + uint32_t x621; + fiat_p256_uint1 x622; + fiat_p256_addcarryx_u32(&x621, &x622, x620, x590, x614); + uint32_t x623; + fiat_p256_uint1 x624; + fiat_p256_addcarryx_u32(&x623, &x624, x622, x592, x616); + uint32_t x625; + fiat_p256_uint1 x626; + fiat_p256_addcarryx_u32(&x625, &x626, x624, x594, x618); + uint32_t x627; + fiat_p256_uint1 x628; + fiat_p256_addcarryx_u32(&x627, &x628, x626, x596, 0x0); + uint32_t x629; + fiat_p256_uint1 x630; + fiat_p256_addcarryx_u32(&x629, &x630, x628, x598, 0x0); + uint32_t x631; + fiat_p256_uint1 x632; + fiat_p256_addcarryx_u32(&x631, &x632, x630, x600, x588); + uint32_t x633; + fiat_p256_uint1 x634; + fiat_p256_addcarryx_u32(&x633, &x634, x632, x602, x606); + uint32_t x635; + fiat_p256_uint1 x636; + fiat_p256_addcarryx_u32(&x635, &x636, x634, x604, x607); + uint32_t x637 = ((uint32_t)x636 + x605); + uint32_t x638; + fiat_p256_uint1 x639; + fiat_p256_subborrowx_u32(&x638, &x639, 0x0, x621, UINT32_C(0xffffffff)); + uint32_t x640; + fiat_p256_uint1 x641; + fiat_p256_subborrowx_u32(&x640, &x641, x639, x623, UINT32_C(0xffffffff)); + uint32_t x642; + fiat_p256_uint1 x643; + fiat_p256_subborrowx_u32(&x642, &x643, x641, x625, UINT32_C(0xffffffff)); + uint32_t x644; + fiat_p256_uint1 x645; + fiat_p256_subborrowx_u32(&x644, &x645, x643, x627, 0x0); + uint32_t x646; + fiat_p256_uint1 x647; + fiat_p256_subborrowx_u32(&x646, &x647, x645, x629, 0x0); + uint32_t x648; + fiat_p256_uint1 x649; + fiat_p256_subborrowx_u32(&x648, &x649, x647, x631, 0x0); + uint32_t x650; + fiat_p256_uint1 x651; + fiat_p256_subborrowx_u32(&x650, &x651, x649, x633, 0x1); + uint32_t x652; + fiat_p256_uint1 x653; + fiat_p256_subborrowx_u32(&x652, &x653, x651, x635, UINT32_C(0xffffffff)); + uint32_t x654; + fiat_p256_uint1 x655; + fiat_p256_subborrowx_u32(&x654, &x655, x653, x637, 0x0); + uint32_t x656; + fiat_p256_cmovznz_u32(&x656, x655, x638, x621); + uint32_t x657; + fiat_p256_cmovznz_u32(&x657, x655, x640, x623); + uint32_t x658; + fiat_p256_cmovznz_u32(&x658, x655, x642, x625); + uint32_t x659; + fiat_p256_cmovznz_u32(&x659, x655, x644, x627); + uint32_t x660; + fiat_p256_cmovznz_u32(&x660, x655, x646, x629); + uint32_t x661; + fiat_p256_cmovznz_u32(&x661, x655, x648, x631); + uint32_t x662; + fiat_p256_cmovznz_u32(&x662, x655, x650, x633); + uint32_t x663; + fiat_p256_cmovznz_u32(&x663, x655, x652, x635); + out1[0] = x656; + out1[1] = x657; + out1[2] = x658; + out1[3] = x659; + out1[4] = x660; + out1[5] = x661; + out1[6] = x662; + out1[7] = x663; +} + +/* + * The function fiat_p256_square squares a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_square(uint32_t out1[8], const uint32_t arg1[8]) { + uint32_t x1 = (arg1[1]); + uint32_t x2 = (arg1[2]); + uint32_t x3 = (arg1[3]); + uint32_t x4 = (arg1[4]); + uint32_t x5 = (arg1[5]); + uint32_t x6 = (arg1[6]); + uint32_t x7 = (arg1[7]); + uint32_t x8 = (arg1[0]); + uint32_t x9; + uint32_t x10; + fiat_p256_mulx_u32(&x9, &x10, x8, (arg1[7])); + uint32_t x11; + uint32_t x12; + fiat_p256_mulx_u32(&x11, &x12, x8, (arg1[6])); + uint32_t x13; + uint32_t x14; + fiat_p256_mulx_u32(&x13, &x14, x8, (arg1[5])); + uint32_t x15; + uint32_t x16; + fiat_p256_mulx_u32(&x15, &x16, x8, (arg1[4])); + uint32_t x17; + uint32_t x18; + fiat_p256_mulx_u32(&x17, &x18, x8, (arg1[3])); + uint32_t x19; + uint32_t x20; + fiat_p256_mulx_u32(&x19, &x20, x8, (arg1[2])); + uint32_t x21; + uint32_t x22; + fiat_p256_mulx_u32(&x21, &x22, x8, (arg1[1])); + uint32_t x23; + uint32_t x24; + fiat_p256_mulx_u32(&x23, &x24, x8, (arg1[0])); + uint32_t x25; + fiat_p256_uint1 x26; + fiat_p256_addcarryx_u32(&x25, &x26, 0x0, x24, x21); + uint32_t x27; + fiat_p256_uint1 x28; + fiat_p256_addcarryx_u32(&x27, &x28, x26, x22, x19); + uint32_t x29; + fiat_p256_uint1 x30; + fiat_p256_addcarryx_u32(&x29, &x30, x28, x20, x17); + uint32_t x31; + fiat_p256_uint1 x32; + fiat_p256_addcarryx_u32(&x31, &x32, x30, x18, x15); + uint32_t x33; + fiat_p256_uint1 x34; + fiat_p256_addcarryx_u32(&x33, &x34, x32, x16, x13); + uint32_t x35; + fiat_p256_uint1 x36; + fiat_p256_addcarryx_u32(&x35, &x36, x34, x14, x11); + uint32_t x37; + fiat_p256_uint1 x38; + fiat_p256_addcarryx_u32(&x37, &x38, x36, x12, x9); + uint32_t x39 = (x38 + x10); + uint32_t x40; + uint32_t x41; + fiat_p256_mulx_u32(&x40, &x41, x23, UINT32_C(0xffffffff)); + uint32_t x42; + uint32_t x43; + fiat_p256_mulx_u32(&x42, &x43, x23, UINT32_C(0xffffffff)); + uint32_t x44; + uint32_t x45; + fiat_p256_mulx_u32(&x44, &x45, x23, UINT32_C(0xffffffff)); + uint32_t x46; + uint32_t x47; + fiat_p256_mulx_u32(&x46, &x47, x23, UINT32_C(0xffffffff)); + uint32_t x48; + fiat_p256_uint1 x49; + fiat_p256_addcarryx_u32(&x48, &x49, 0x0, x47, x44); + uint32_t x50; + fiat_p256_uint1 x51; + fiat_p256_addcarryx_u32(&x50, &x51, x49, x45, x42); + uint32_t x52 = (x51 + x43); + uint32_t x53; + fiat_p256_uint1 x54; + fiat_p256_addcarryx_u32(&x53, &x54, 0x0, x23, x46); + uint32_t x55; + fiat_p256_uint1 x56; + fiat_p256_addcarryx_u32(&x55, &x56, x54, x25, x48); + uint32_t x57; + fiat_p256_uint1 x58; + fiat_p256_addcarryx_u32(&x57, &x58, x56, x27, x50); + uint32_t x59; + fiat_p256_uint1 x60; + fiat_p256_addcarryx_u32(&x59, &x60, x58, x29, x52); + uint32_t x61; + fiat_p256_uint1 x62; + fiat_p256_addcarryx_u32(&x61, &x62, x60, x31, 0x0); + uint32_t x63; + fiat_p256_uint1 x64; + fiat_p256_addcarryx_u32(&x63, &x64, x62, x33, 0x0); + uint32_t x65; + fiat_p256_uint1 x66; + fiat_p256_addcarryx_u32(&x65, &x66, x64, x35, x23); + uint32_t x67; + fiat_p256_uint1 x68; + fiat_p256_addcarryx_u32(&x67, &x68, x66, x37, x40); + uint32_t x69; + fiat_p256_uint1 x70; + fiat_p256_addcarryx_u32(&x69, &x70, x68, x39, x41); + uint32_t x71; + uint32_t x72; + fiat_p256_mulx_u32(&x71, &x72, x1, (arg1[7])); + uint32_t x73; + uint32_t x74; + fiat_p256_mulx_u32(&x73, &x74, x1, (arg1[6])); + uint32_t x75; + uint32_t x76; + fiat_p256_mulx_u32(&x75, &x76, x1, (arg1[5])); + uint32_t x77; + uint32_t x78; + fiat_p256_mulx_u32(&x77, &x78, x1, (arg1[4])); + uint32_t x79; + uint32_t x80; + fiat_p256_mulx_u32(&x79, &x80, x1, (arg1[3])); + uint32_t x81; + uint32_t x82; + fiat_p256_mulx_u32(&x81, &x82, x1, (arg1[2])); + uint32_t x83; + uint32_t x84; + fiat_p256_mulx_u32(&x83, &x84, x1, (arg1[1])); + uint32_t x85; + uint32_t x86; + fiat_p256_mulx_u32(&x85, &x86, x1, (arg1[0])); + uint32_t x87; + fiat_p256_uint1 x88; + fiat_p256_addcarryx_u32(&x87, &x88, 0x0, x86, x83); + uint32_t x89; + fiat_p256_uint1 x90; + fiat_p256_addcarryx_u32(&x89, &x90, x88, x84, x81); + uint32_t x91; + fiat_p256_uint1 x92; + fiat_p256_addcarryx_u32(&x91, &x92, x90, x82, x79); + uint32_t x93; + fiat_p256_uint1 x94; + fiat_p256_addcarryx_u32(&x93, &x94, x92, x80, x77); + uint32_t x95; + fiat_p256_uint1 x96; + fiat_p256_addcarryx_u32(&x95, &x96, x94, x78, x75); + uint32_t x97; + fiat_p256_uint1 x98; + fiat_p256_addcarryx_u32(&x97, &x98, x96, x76, x73); + uint32_t x99; + fiat_p256_uint1 x100; + fiat_p256_addcarryx_u32(&x99, &x100, x98, x74, x71); + uint32_t x101 = (x100 + x72); + uint32_t x102; + fiat_p256_uint1 x103; + fiat_p256_addcarryx_u32(&x102, &x103, 0x0, x55, x85); + uint32_t x104; + fiat_p256_uint1 x105; + fiat_p256_addcarryx_u32(&x104, &x105, x103, x57, x87); + uint32_t x106; + fiat_p256_uint1 x107; + fiat_p256_addcarryx_u32(&x106, &x107, x105, x59, x89); + uint32_t x108; + fiat_p256_uint1 x109; + fiat_p256_addcarryx_u32(&x108, &x109, x107, x61, x91); + uint32_t x110; + fiat_p256_uint1 x111; + fiat_p256_addcarryx_u32(&x110, &x111, x109, x63, x93); + uint32_t x112; + fiat_p256_uint1 x113; + fiat_p256_addcarryx_u32(&x112, &x113, x111, x65, x95); + uint32_t x114; + fiat_p256_uint1 x115; + fiat_p256_addcarryx_u32(&x114, &x115, x113, x67, x97); + uint32_t x116; + fiat_p256_uint1 x117; + fiat_p256_addcarryx_u32(&x116, &x117, x115, x69, x99); + uint32_t x118; + fiat_p256_uint1 x119; + fiat_p256_addcarryx_u32(&x118, &x119, x117, x70, x101); + uint32_t x120; + uint32_t x121; + fiat_p256_mulx_u32(&x120, &x121, x102, UINT32_C(0xffffffff)); + uint32_t x122; + uint32_t x123; + fiat_p256_mulx_u32(&x122, &x123, x102, UINT32_C(0xffffffff)); + uint32_t x124; + uint32_t x125; + fiat_p256_mulx_u32(&x124, &x125, x102, UINT32_C(0xffffffff)); + uint32_t x126; + uint32_t x127; + fiat_p256_mulx_u32(&x126, &x127, x102, UINT32_C(0xffffffff)); + uint32_t x128; + fiat_p256_uint1 x129; + fiat_p256_addcarryx_u32(&x128, &x129, 0x0, x127, x124); + uint32_t x130; + fiat_p256_uint1 x131; + fiat_p256_addcarryx_u32(&x130, &x131, x129, x125, x122); + uint32_t x132 = (x131 + x123); + uint32_t x133; + fiat_p256_uint1 x134; + fiat_p256_addcarryx_u32(&x133, &x134, 0x0, x102, x126); + uint32_t x135; + fiat_p256_uint1 x136; + fiat_p256_addcarryx_u32(&x135, &x136, x134, x104, x128); + uint32_t x137; + fiat_p256_uint1 x138; + fiat_p256_addcarryx_u32(&x137, &x138, x136, x106, x130); + uint32_t x139; + fiat_p256_uint1 x140; + fiat_p256_addcarryx_u32(&x139, &x140, x138, x108, x132); + uint32_t x141; + fiat_p256_uint1 x142; + fiat_p256_addcarryx_u32(&x141, &x142, x140, x110, 0x0); + uint32_t x143; + fiat_p256_uint1 x144; + fiat_p256_addcarryx_u32(&x143, &x144, x142, x112, 0x0); + uint32_t x145; + fiat_p256_uint1 x146; + fiat_p256_addcarryx_u32(&x145, &x146, x144, x114, x102); + uint32_t x147; + fiat_p256_uint1 x148; + fiat_p256_addcarryx_u32(&x147, &x148, x146, x116, x120); + uint32_t x149; + fiat_p256_uint1 x150; + fiat_p256_addcarryx_u32(&x149, &x150, x148, x118, x121); + uint32_t x151 = ((uint32_t)x150 + x119); + uint32_t x152; + uint32_t x153; + fiat_p256_mulx_u32(&x152, &x153, x2, (arg1[7])); + uint32_t x154; + uint32_t x155; + fiat_p256_mulx_u32(&x154, &x155, x2, (arg1[6])); + uint32_t x156; + uint32_t x157; + fiat_p256_mulx_u32(&x156, &x157, x2, (arg1[5])); + uint32_t x158; + uint32_t x159; + fiat_p256_mulx_u32(&x158, &x159, x2, (arg1[4])); + uint32_t x160; + uint32_t x161; + fiat_p256_mulx_u32(&x160, &x161, x2, (arg1[3])); + uint32_t x162; + uint32_t x163; + fiat_p256_mulx_u32(&x162, &x163, x2, (arg1[2])); + uint32_t x164; + uint32_t x165; + fiat_p256_mulx_u32(&x164, &x165, x2, (arg1[1])); + uint32_t x166; + uint32_t x167; + fiat_p256_mulx_u32(&x166, &x167, x2, (arg1[0])); + uint32_t x168; + fiat_p256_uint1 x169; + fiat_p256_addcarryx_u32(&x168, &x169, 0x0, x167, x164); + uint32_t x170; + fiat_p256_uint1 x171; + fiat_p256_addcarryx_u32(&x170, &x171, x169, x165, x162); + uint32_t x172; + fiat_p256_uint1 x173; + fiat_p256_addcarryx_u32(&x172, &x173, x171, x163, x160); + uint32_t x174; + fiat_p256_uint1 x175; + fiat_p256_addcarryx_u32(&x174, &x175, x173, x161, x158); + uint32_t x176; + fiat_p256_uint1 x177; + fiat_p256_addcarryx_u32(&x176, &x177, x175, x159, x156); + uint32_t x178; + fiat_p256_uint1 x179; + fiat_p256_addcarryx_u32(&x178, &x179, x177, x157, x154); + uint32_t x180; + fiat_p256_uint1 x181; + fiat_p256_addcarryx_u32(&x180, &x181, x179, x155, x152); + uint32_t x182 = (x181 + x153); + uint32_t x183; + fiat_p256_uint1 x184; + fiat_p256_addcarryx_u32(&x183, &x184, 0x0, x135, x166); + uint32_t x185; + fiat_p256_uint1 x186; + fiat_p256_addcarryx_u32(&x185, &x186, x184, x137, x168); + uint32_t x187; + fiat_p256_uint1 x188; + fiat_p256_addcarryx_u32(&x187, &x188, x186, x139, x170); + uint32_t x189; + fiat_p256_uint1 x190; + fiat_p256_addcarryx_u32(&x189, &x190, x188, x141, x172); + uint32_t x191; + fiat_p256_uint1 x192; + fiat_p256_addcarryx_u32(&x191, &x192, x190, x143, x174); + uint32_t x193; + fiat_p256_uint1 x194; + fiat_p256_addcarryx_u32(&x193, &x194, x192, x145, x176); + uint32_t x195; + fiat_p256_uint1 x196; + fiat_p256_addcarryx_u32(&x195, &x196, x194, x147, x178); + uint32_t x197; + fiat_p256_uint1 x198; + fiat_p256_addcarryx_u32(&x197, &x198, x196, x149, x180); + uint32_t x199; + fiat_p256_uint1 x200; + fiat_p256_addcarryx_u32(&x199, &x200, x198, x151, x182); + uint32_t x201; + uint32_t x202; + fiat_p256_mulx_u32(&x201, &x202, x183, UINT32_C(0xffffffff)); + uint32_t x203; + uint32_t x204; + fiat_p256_mulx_u32(&x203, &x204, x183, UINT32_C(0xffffffff)); + uint32_t x205; + uint32_t x206; + fiat_p256_mulx_u32(&x205, &x206, x183, UINT32_C(0xffffffff)); + uint32_t x207; + uint32_t x208; + fiat_p256_mulx_u32(&x207, &x208, x183, UINT32_C(0xffffffff)); + uint32_t x209; + fiat_p256_uint1 x210; + fiat_p256_addcarryx_u32(&x209, &x210, 0x0, x208, x205); + uint32_t x211; + fiat_p256_uint1 x212; + fiat_p256_addcarryx_u32(&x211, &x212, x210, x206, x203); + uint32_t x213 = (x212 + x204); + uint32_t x214; + fiat_p256_uint1 x215; + fiat_p256_addcarryx_u32(&x214, &x215, 0x0, x183, x207); + uint32_t x216; + fiat_p256_uint1 x217; + fiat_p256_addcarryx_u32(&x216, &x217, x215, x185, x209); + uint32_t x218; + fiat_p256_uint1 x219; + fiat_p256_addcarryx_u32(&x218, &x219, x217, x187, x211); + uint32_t x220; + fiat_p256_uint1 x221; + fiat_p256_addcarryx_u32(&x220, &x221, x219, x189, x213); + uint32_t x222; + fiat_p256_uint1 x223; + fiat_p256_addcarryx_u32(&x222, &x223, x221, x191, 0x0); + uint32_t x224; + fiat_p256_uint1 x225; + fiat_p256_addcarryx_u32(&x224, &x225, x223, x193, 0x0); + uint32_t x226; + fiat_p256_uint1 x227; + fiat_p256_addcarryx_u32(&x226, &x227, x225, x195, x183); + uint32_t x228; + fiat_p256_uint1 x229; + fiat_p256_addcarryx_u32(&x228, &x229, x227, x197, x201); + uint32_t x230; + fiat_p256_uint1 x231; + fiat_p256_addcarryx_u32(&x230, &x231, x229, x199, x202); + uint32_t x232 = ((uint32_t)x231 + x200); + uint32_t x233; + uint32_t x234; + fiat_p256_mulx_u32(&x233, &x234, x3, (arg1[7])); + uint32_t x235; + uint32_t x236; + fiat_p256_mulx_u32(&x235, &x236, x3, (arg1[6])); + uint32_t x237; + uint32_t x238; + fiat_p256_mulx_u32(&x237, &x238, x3, (arg1[5])); + uint32_t x239; + uint32_t x240; + fiat_p256_mulx_u32(&x239, &x240, x3, (arg1[4])); + uint32_t x241; + uint32_t x242; + fiat_p256_mulx_u32(&x241, &x242, x3, (arg1[3])); + uint32_t x243; + uint32_t x244; + fiat_p256_mulx_u32(&x243, &x244, x3, (arg1[2])); + uint32_t x245; + uint32_t x246; + fiat_p256_mulx_u32(&x245, &x246, x3, (arg1[1])); + uint32_t x247; + uint32_t x248; + fiat_p256_mulx_u32(&x247, &x248, x3, (arg1[0])); + uint32_t x249; + fiat_p256_uint1 x250; + fiat_p256_addcarryx_u32(&x249, &x250, 0x0, x248, x245); + uint32_t x251; + fiat_p256_uint1 x252; + fiat_p256_addcarryx_u32(&x251, &x252, x250, x246, x243); + uint32_t x253; + fiat_p256_uint1 x254; + fiat_p256_addcarryx_u32(&x253, &x254, x252, x244, x241); + uint32_t x255; + fiat_p256_uint1 x256; + fiat_p256_addcarryx_u32(&x255, &x256, x254, x242, x239); + uint32_t x257; + fiat_p256_uint1 x258; + fiat_p256_addcarryx_u32(&x257, &x258, x256, x240, x237); + uint32_t x259; + fiat_p256_uint1 x260; + fiat_p256_addcarryx_u32(&x259, &x260, x258, x238, x235); + uint32_t x261; + fiat_p256_uint1 x262; + fiat_p256_addcarryx_u32(&x261, &x262, x260, x236, x233); + uint32_t x263 = (x262 + x234); + uint32_t x264; + fiat_p256_uint1 x265; + fiat_p256_addcarryx_u32(&x264, &x265, 0x0, x216, x247); + uint32_t x266; + fiat_p256_uint1 x267; + fiat_p256_addcarryx_u32(&x266, &x267, x265, x218, x249); + uint32_t x268; + fiat_p256_uint1 x269; + fiat_p256_addcarryx_u32(&x268, &x269, x267, x220, x251); + uint32_t x270; + fiat_p256_uint1 x271; + fiat_p256_addcarryx_u32(&x270, &x271, x269, x222, x253); + uint32_t x272; + fiat_p256_uint1 x273; + fiat_p256_addcarryx_u32(&x272, &x273, x271, x224, x255); + uint32_t x274; + fiat_p256_uint1 x275; + fiat_p256_addcarryx_u32(&x274, &x275, x273, x226, x257); + uint32_t x276; + fiat_p256_uint1 x277; + fiat_p256_addcarryx_u32(&x276, &x277, x275, x228, x259); + uint32_t x278; + fiat_p256_uint1 x279; + fiat_p256_addcarryx_u32(&x278, &x279, x277, x230, x261); + uint32_t x280; + fiat_p256_uint1 x281; + fiat_p256_addcarryx_u32(&x280, &x281, x279, x232, x263); + uint32_t x282; + uint32_t x283; + fiat_p256_mulx_u32(&x282, &x283, x264, UINT32_C(0xffffffff)); + uint32_t x284; + uint32_t x285; + fiat_p256_mulx_u32(&x284, &x285, x264, UINT32_C(0xffffffff)); + uint32_t x286; + uint32_t x287; + fiat_p256_mulx_u32(&x286, &x287, x264, UINT32_C(0xffffffff)); + uint32_t x288; + uint32_t x289; + fiat_p256_mulx_u32(&x288, &x289, x264, UINT32_C(0xffffffff)); + uint32_t x290; + fiat_p256_uint1 x291; + fiat_p256_addcarryx_u32(&x290, &x291, 0x0, x289, x286); + uint32_t x292; + fiat_p256_uint1 x293; + fiat_p256_addcarryx_u32(&x292, &x293, x291, x287, x284); + uint32_t x294 = (x293 + x285); + uint32_t x295; + fiat_p256_uint1 x296; + fiat_p256_addcarryx_u32(&x295, &x296, 0x0, x264, x288); + uint32_t x297; + fiat_p256_uint1 x298; + fiat_p256_addcarryx_u32(&x297, &x298, x296, x266, x290); + uint32_t x299; + fiat_p256_uint1 x300; + fiat_p256_addcarryx_u32(&x299, &x300, x298, x268, x292); + uint32_t x301; + fiat_p256_uint1 x302; + fiat_p256_addcarryx_u32(&x301, &x302, x300, x270, x294); + uint32_t x303; + fiat_p256_uint1 x304; + fiat_p256_addcarryx_u32(&x303, &x304, x302, x272, 0x0); + uint32_t x305; + fiat_p256_uint1 x306; + fiat_p256_addcarryx_u32(&x305, &x306, x304, x274, 0x0); + uint32_t x307; + fiat_p256_uint1 x308; + fiat_p256_addcarryx_u32(&x307, &x308, x306, x276, x264); + uint32_t x309; + fiat_p256_uint1 x310; + fiat_p256_addcarryx_u32(&x309, &x310, x308, x278, x282); + uint32_t x311; + fiat_p256_uint1 x312; + fiat_p256_addcarryx_u32(&x311, &x312, x310, x280, x283); + uint32_t x313 = ((uint32_t)x312 + x281); + uint32_t x314; + uint32_t x315; + fiat_p256_mulx_u32(&x314, &x315, x4, (arg1[7])); + uint32_t x316; + uint32_t x317; + fiat_p256_mulx_u32(&x316, &x317, x4, (arg1[6])); + uint32_t x318; + uint32_t x319; + fiat_p256_mulx_u32(&x318, &x319, x4, (arg1[5])); + uint32_t x320; + uint32_t x321; + fiat_p256_mulx_u32(&x320, &x321, x4, (arg1[4])); + uint32_t x322; + uint32_t x323; + fiat_p256_mulx_u32(&x322, &x323, x4, (arg1[3])); + uint32_t x324; + uint32_t x325; + fiat_p256_mulx_u32(&x324, &x325, x4, (arg1[2])); + uint32_t x326; + uint32_t x327; + fiat_p256_mulx_u32(&x326, &x327, x4, (arg1[1])); + uint32_t x328; + uint32_t x329; + fiat_p256_mulx_u32(&x328, &x329, x4, (arg1[0])); + uint32_t x330; + fiat_p256_uint1 x331; + fiat_p256_addcarryx_u32(&x330, &x331, 0x0, x329, x326); + uint32_t x332; + fiat_p256_uint1 x333; + fiat_p256_addcarryx_u32(&x332, &x333, x331, x327, x324); + uint32_t x334; + fiat_p256_uint1 x335; + fiat_p256_addcarryx_u32(&x334, &x335, x333, x325, x322); + uint32_t x336; + fiat_p256_uint1 x337; + fiat_p256_addcarryx_u32(&x336, &x337, x335, x323, x320); + uint32_t x338; + fiat_p256_uint1 x339; + fiat_p256_addcarryx_u32(&x338, &x339, x337, x321, x318); + uint32_t x340; + fiat_p256_uint1 x341; + fiat_p256_addcarryx_u32(&x340, &x341, x339, x319, x316); + uint32_t x342; + fiat_p256_uint1 x343; + fiat_p256_addcarryx_u32(&x342, &x343, x341, x317, x314); + uint32_t x344 = (x343 + x315); + uint32_t x345; + fiat_p256_uint1 x346; + fiat_p256_addcarryx_u32(&x345, &x346, 0x0, x297, x328); + uint32_t x347; + fiat_p256_uint1 x348; + fiat_p256_addcarryx_u32(&x347, &x348, x346, x299, x330); + uint32_t x349; + fiat_p256_uint1 x350; + fiat_p256_addcarryx_u32(&x349, &x350, x348, x301, x332); + uint32_t x351; + fiat_p256_uint1 x352; + fiat_p256_addcarryx_u32(&x351, &x352, x350, x303, x334); + uint32_t x353; + fiat_p256_uint1 x354; + fiat_p256_addcarryx_u32(&x353, &x354, x352, x305, x336); + uint32_t x355; + fiat_p256_uint1 x356; + fiat_p256_addcarryx_u32(&x355, &x356, x354, x307, x338); + uint32_t x357; + fiat_p256_uint1 x358; + fiat_p256_addcarryx_u32(&x357, &x358, x356, x309, x340); + uint32_t x359; + fiat_p256_uint1 x360; + fiat_p256_addcarryx_u32(&x359, &x360, x358, x311, x342); + uint32_t x361; + fiat_p256_uint1 x362; + fiat_p256_addcarryx_u32(&x361, &x362, x360, x313, x344); + uint32_t x363; + uint32_t x364; + fiat_p256_mulx_u32(&x363, &x364, x345, UINT32_C(0xffffffff)); + uint32_t x365; + uint32_t x366; + fiat_p256_mulx_u32(&x365, &x366, x345, UINT32_C(0xffffffff)); + uint32_t x367; + uint32_t x368; + fiat_p256_mulx_u32(&x367, &x368, x345, UINT32_C(0xffffffff)); + uint32_t x369; + uint32_t x370; + fiat_p256_mulx_u32(&x369, &x370, x345, UINT32_C(0xffffffff)); + uint32_t x371; + fiat_p256_uint1 x372; + fiat_p256_addcarryx_u32(&x371, &x372, 0x0, x370, x367); + uint32_t x373; + fiat_p256_uint1 x374; + fiat_p256_addcarryx_u32(&x373, &x374, x372, x368, x365); + uint32_t x375 = (x374 + x366); + uint32_t x376; + fiat_p256_uint1 x377; + fiat_p256_addcarryx_u32(&x376, &x377, 0x0, x345, x369); + uint32_t x378; + fiat_p256_uint1 x379; + fiat_p256_addcarryx_u32(&x378, &x379, x377, x347, x371); + uint32_t x380; + fiat_p256_uint1 x381; + fiat_p256_addcarryx_u32(&x380, &x381, x379, x349, x373); + uint32_t x382; + fiat_p256_uint1 x383; + fiat_p256_addcarryx_u32(&x382, &x383, x381, x351, x375); + uint32_t x384; + fiat_p256_uint1 x385; + fiat_p256_addcarryx_u32(&x384, &x385, x383, x353, 0x0); + uint32_t x386; + fiat_p256_uint1 x387; + fiat_p256_addcarryx_u32(&x386, &x387, x385, x355, 0x0); + uint32_t x388; + fiat_p256_uint1 x389; + fiat_p256_addcarryx_u32(&x388, &x389, x387, x357, x345); + uint32_t x390; + fiat_p256_uint1 x391; + fiat_p256_addcarryx_u32(&x390, &x391, x389, x359, x363); + uint32_t x392; + fiat_p256_uint1 x393; + fiat_p256_addcarryx_u32(&x392, &x393, x391, x361, x364); + uint32_t x394 = ((uint32_t)x393 + x362); + uint32_t x395; + uint32_t x396; + fiat_p256_mulx_u32(&x395, &x396, x5, (arg1[7])); + uint32_t x397; + uint32_t x398; + fiat_p256_mulx_u32(&x397, &x398, x5, (arg1[6])); + uint32_t x399; + uint32_t x400; + fiat_p256_mulx_u32(&x399, &x400, x5, (arg1[5])); + uint32_t x401; + uint32_t x402; + fiat_p256_mulx_u32(&x401, &x402, x5, (arg1[4])); + uint32_t x403; + uint32_t x404; + fiat_p256_mulx_u32(&x403, &x404, x5, (arg1[3])); + uint32_t x405; + uint32_t x406; + fiat_p256_mulx_u32(&x405, &x406, x5, (arg1[2])); + uint32_t x407; + uint32_t x408; + fiat_p256_mulx_u32(&x407, &x408, x5, (arg1[1])); + uint32_t x409; + uint32_t x410; + fiat_p256_mulx_u32(&x409, &x410, x5, (arg1[0])); + uint32_t x411; + fiat_p256_uint1 x412; + fiat_p256_addcarryx_u32(&x411, &x412, 0x0, x410, x407); + uint32_t x413; + fiat_p256_uint1 x414; + fiat_p256_addcarryx_u32(&x413, &x414, x412, x408, x405); + uint32_t x415; + fiat_p256_uint1 x416; + fiat_p256_addcarryx_u32(&x415, &x416, x414, x406, x403); + uint32_t x417; + fiat_p256_uint1 x418; + fiat_p256_addcarryx_u32(&x417, &x418, x416, x404, x401); + uint32_t x419; + fiat_p256_uint1 x420; + fiat_p256_addcarryx_u32(&x419, &x420, x418, x402, x399); + uint32_t x421; + fiat_p256_uint1 x422; + fiat_p256_addcarryx_u32(&x421, &x422, x420, x400, x397); + uint32_t x423; + fiat_p256_uint1 x424; + fiat_p256_addcarryx_u32(&x423, &x424, x422, x398, x395); + uint32_t x425 = (x424 + x396); + uint32_t x426; + fiat_p256_uint1 x427; + fiat_p256_addcarryx_u32(&x426, &x427, 0x0, x378, x409); + uint32_t x428; + fiat_p256_uint1 x429; + fiat_p256_addcarryx_u32(&x428, &x429, x427, x380, x411); + uint32_t x430; + fiat_p256_uint1 x431; + fiat_p256_addcarryx_u32(&x430, &x431, x429, x382, x413); + uint32_t x432; + fiat_p256_uint1 x433; + fiat_p256_addcarryx_u32(&x432, &x433, x431, x384, x415); + uint32_t x434; + fiat_p256_uint1 x435; + fiat_p256_addcarryx_u32(&x434, &x435, x433, x386, x417); + uint32_t x436; + fiat_p256_uint1 x437; + fiat_p256_addcarryx_u32(&x436, &x437, x435, x388, x419); + uint32_t x438; + fiat_p256_uint1 x439; + fiat_p256_addcarryx_u32(&x438, &x439, x437, x390, x421); + uint32_t x440; + fiat_p256_uint1 x441; + fiat_p256_addcarryx_u32(&x440, &x441, x439, x392, x423); + uint32_t x442; + fiat_p256_uint1 x443; + fiat_p256_addcarryx_u32(&x442, &x443, x441, x394, x425); + uint32_t x444; + uint32_t x445; + fiat_p256_mulx_u32(&x444, &x445, x426, UINT32_C(0xffffffff)); + uint32_t x446; + uint32_t x447; + fiat_p256_mulx_u32(&x446, &x447, x426, UINT32_C(0xffffffff)); + uint32_t x448; + uint32_t x449; + fiat_p256_mulx_u32(&x448, &x449, x426, UINT32_C(0xffffffff)); + uint32_t x450; + uint32_t x451; + fiat_p256_mulx_u32(&x450, &x451, x426, UINT32_C(0xffffffff)); + uint32_t x452; + fiat_p256_uint1 x453; + fiat_p256_addcarryx_u32(&x452, &x453, 0x0, x451, x448); + uint32_t x454; + fiat_p256_uint1 x455; + fiat_p256_addcarryx_u32(&x454, &x455, x453, x449, x446); + uint32_t x456 = (x455 + x447); + uint32_t x457; + fiat_p256_uint1 x458; + fiat_p256_addcarryx_u32(&x457, &x458, 0x0, x426, x450); + uint32_t x459; + fiat_p256_uint1 x460; + fiat_p256_addcarryx_u32(&x459, &x460, x458, x428, x452); + uint32_t x461; + fiat_p256_uint1 x462; + fiat_p256_addcarryx_u32(&x461, &x462, x460, x430, x454); + uint32_t x463; + fiat_p256_uint1 x464; + fiat_p256_addcarryx_u32(&x463, &x464, x462, x432, x456); + uint32_t x465; + fiat_p256_uint1 x466; + fiat_p256_addcarryx_u32(&x465, &x466, x464, x434, 0x0); + uint32_t x467; + fiat_p256_uint1 x468; + fiat_p256_addcarryx_u32(&x467, &x468, x466, x436, 0x0); + uint32_t x469; + fiat_p256_uint1 x470; + fiat_p256_addcarryx_u32(&x469, &x470, x468, x438, x426); + uint32_t x471; + fiat_p256_uint1 x472; + fiat_p256_addcarryx_u32(&x471, &x472, x470, x440, x444); + uint32_t x473; + fiat_p256_uint1 x474; + fiat_p256_addcarryx_u32(&x473, &x474, x472, x442, x445); + uint32_t x475 = ((uint32_t)x474 + x443); + uint32_t x476; + uint32_t x477; + fiat_p256_mulx_u32(&x476, &x477, x6, (arg1[7])); + uint32_t x478; + uint32_t x479; + fiat_p256_mulx_u32(&x478, &x479, x6, (arg1[6])); + uint32_t x480; + uint32_t x481; + fiat_p256_mulx_u32(&x480, &x481, x6, (arg1[5])); + uint32_t x482; + uint32_t x483; + fiat_p256_mulx_u32(&x482, &x483, x6, (arg1[4])); + uint32_t x484; + uint32_t x485; + fiat_p256_mulx_u32(&x484, &x485, x6, (arg1[3])); + uint32_t x486; + uint32_t x487; + fiat_p256_mulx_u32(&x486, &x487, x6, (arg1[2])); + uint32_t x488; + uint32_t x489; + fiat_p256_mulx_u32(&x488, &x489, x6, (arg1[1])); + uint32_t x490; + uint32_t x491; + fiat_p256_mulx_u32(&x490, &x491, x6, (arg1[0])); + uint32_t x492; + fiat_p256_uint1 x493; + fiat_p256_addcarryx_u32(&x492, &x493, 0x0, x491, x488); + uint32_t x494; + fiat_p256_uint1 x495; + fiat_p256_addcarryx_u32(&x494, &x495, x493, x489, x486); + uint32_t x496; + fiat_p256_uint1 x497; + fiat_p256_addcarryx_u32(&x496, &x497, x495, x487, x484); + uint32_t x498; + fiat_p256_uint1 x499; + fiat_p256_addcarryx_u32(&x498, &x499, x497, x485, x482); + uint32_t x500; + fiat_p256_uint1 x501; + fiat_p256_addcarryx_u32(&x500, &x501, x499, x483, x480); + uint32_t x502; + fiat_p256_uint1 x503; + fiat_p256_addcarryx_u32(&x502, &x503, x501, x481, x478); + uint32_t x504; + fiat_p256_uint1 x505; + fiat_p256_addcarryx_u32(&x504, &x505, x503, x479, x476); + uint32_t x506 = (x505 + x477); + uint32_t x507; + fiat_p256_uint1 x508; + fiat_p256_addcarryx_u32(&x507, &x508, 0x0, x459, x490); + uint32_t x509; + fiat_p256_uint1 x510; + fiat_p256_addcarryx_u32(&x509, &x510, x508, x461, x492); + uint32_t x511; + fiat_p256_uint1 x512; + fiat_p256_addcarryx_u32(&x511, &x512, x510, x463, x494); + uint32_t x513; + fiat_p256_uint1 x514; + fiat_p256_addcarryx_u32(&x513, &x514, x512, x465, x496); + uint32_t x515; + fiat_p256_uint1 x516; + fiat_p256_addcarryx_u32(&x515, &x516, x514, x467, x498); + uint32_t x517; + fiat_p256_uint1 x518; + fiat_p256_addcarryx_u32(&x517, &x518, x516, x469, x500); + uint32_t x519; + fiat_p256_uint1 x520; + fiat_p256_addcarryx_u32(&x519, &x520, x518, x471, x502); + uint32_t x521; + fiat_p256_uint1 x522; + fiat_p256_addcarryx_u32(&x521, &x522, x520, x473, x504); + uint32_t x523; + fiat_p256_uint1 x524; + fiat_p256_addcarryx_u32(&x523, &x524, x522, x475, x506); + uint32_t x525; + uint32_t x526; + fiat_p256_mulx_u32(&x525, &x526, x507, UINT32_C(0xffffffff)); + uint32_t x527; + uint32_t x528; + fiat_p256_mulx_u32(&x527, &x528, x507, UINT32_C(0xffffffff)); + uint32_t x529; + uint32_t x530; + fiat_p256_mulx_u32(&x529, &x530, x507, UINT32_C(0xffffffff)); + uint32_t x531; + uint32_t x532; + fiat_p256_mulx_u32(&x531, &x532, x507, UINT32_C(0xffffffff)); + uint32_t x533; + fiat_p256_uint1 x534; + fiat_p256_addcarryx_u32(&x533, &x534, 0x0, x532, x529); + uint32_t x535; + fiat_p256_uint1 x536; + fiat_p256_addcarryx_u32(&x535, &x536, x534, x530, x527); + uint32_t x537 = (x536 + x528); + uint32_t x538; + fiat_p256_uint1 x539; + fiat_p256_addcarryx_u32(&x538, &x539, 0x0, x507, x531); + uint32_t x540; + fiat_p256_uint1 x541; + fiat_p256_addcarryx_u32(&x540, &x541, x539, x509, x533); + uint32_t x542; + fiat_p256_uint1 x543; + fiat_p256_addcarryx_u32(&x542, &x543, x541, x511, x535); + uint32_t x544; + fiat_p256_uint1 x545; + fiat_p256_addcarryx_u32(&x544, &x545, x543, x513, x537); + uint32_t x546; + fiat_p256_uint1 x547; + fiat_p256_addcarryx_u32(&x546, &x547, x545, x515, 0x0); + uint32_t x548; + fiat_p256_uint1 x549; + fiat_p256_addcarryx_u32(&x548, &x549, x547, x517, 0x0); + uint32_t x550; + fiat_p256_uint1 x551; + fiat_p256_addcarryx_u32(&x550, &x551, x549, x519, x507); + uint32_t x552; + fiat_p256_uint1 x553; + fiat_p256_addcarryx_u32(&x552, &x553, x551, x521, x525); + uint32_t x554; + fiat_p256_uint1 x555; + fiat_p256_addcarryx_u32(&x554, &x555, x553, x523, x526); + uint32_t x556 = ((uint32_t)x555 + x524); + uint32_t x557; + uint32_t x558; + fiat_p256_mulx_u32(&x557, &x558, x7, (arg1[7])); + uint32_t x559; + uint32_t x560; + fiat_p256_mulx_u32(&x559, &x560, x7, (arg1[6])); + uint32_t x561; + uint32_t x562; + fiat_p256_mulx_u32(&x561, &x562, x7, (arg1[5])); + uint32_t x563; + uint32_t x564; + fiat_p256_mulx_u32(&x563, &x564, x7, (arg1[4])); + uint32_t x565; + uint32_t x566; + fiat_p256_mulx_u32(&x565, &x566, x7, (arg1[3])); + uint32_t x567; + uint32_t x568; + fiat_p256_mulx_u32(&x567, &x568, x7, (arg1[2])); + uint32_t x569; + uint32_t x570; + fiat_p256_mulx_u32(&x569, &x570, x7, (arg1[1])); + uint32_t x571; + uint32_t x572; + fiat_p256_mulx_u32(&x571, &x572, x7, (arg1[0])); + uint32_t x573; + fiat_p256_uint1 x574; + fiat_p256_addcarryx_u32(&x573, &x574, 0x0, x572, x569); + uint32_t x575; + fiat_p256_uint1 x576; + fiat_p256_addcarryx_u32(&x575, &x576, x574, x570, x567); + uint32_t x577; + fiat_p256_uint1 x578; + fiat_p256_addcarryx_u32(&x577, &x578, x576, x568, x565); + uint32_t x579; + fiat_p256_uint1 x580; + fiat_p256_addcarryx_u32(&x579, &x580, x578, x566, x563); + uint32_t x581; + fiat_p256_uint1 x582; + fiat_p256_addcarryx_u32(&x581, &x582, x580, x564, x561); + uint32_t x583; + fiat_p256_uint1 x584; + fiat_p256_addcarryx_u32(&x583, &x584, x582, x562, x559); + uint32_t x585; + fiat_p256_uint1 x586; + fiat_p256_addcarryx_u32(&x585, &x586, x584, x560, x557); + uint32_t x587 = (x586 + x558); + uint32_t x588; + fiat_p256_uint1 x589; + fiat_p256_addcarryx_u32(&x588, &x589, 0x0, x540, x571); + uint32_t x590; + fiat_p256_uint1 x591; + fiat_p256_addcarryx_u32(&x590, &x591, x589, x542, x573); + uint32_t x592; + fiat_p256_uint1 x593; + fiat_p256_addcarryx_u32(&x592, &x593, x591, x544, x575); + uint32_t x594; + fiat_p256_uint1 x595; + fiat_p256_addcarryx_u32(&x594, &x595, x593, x546, x577); + uint32_t x596; + fiat_p256_uint1 x597; + fiat_p256_addcarryx_u32(&x596, &x597, x595, x548, x579); + uint32_t x598; + fiat_p256_uint1 x599; + fiat_p256_addcarryx_u32(&x598, &x599, x597, x550, x581); + uint32_t x600; + fiat_p256_uint1 x601; + fiat_p256_addcarryx_u32(&x600, &x601, x599, x552, x583); + uint32_t x602; + fiat_p256_uint1 x603; + fiat_p256_addcarryx_u32(&x602, &x603, x601, x554, x585); + uint32_t x604; + fiat_p256_uint1 x605; + fiat_p256_addcarryx_u32(&x604, &x605, x603, x556, x587); + uint32_t x606; + uint32_t x607; + fiat_p256_mulx_u32(&x606, &x607, x588, UINT32_C(0xffffffff)); + uint32_t x608; + uint32_t x609; + fiat_p256_mulx_u32(&x608, &x609, x588, UINT32_C(0xffffffff)); + uint32_t x610; + uint32_t x611; + fiat_p256_mulx_u32(&x610, &x611, x588, UINT32_C(0xffffffff)); + uint32_t x612; + uint32_t x613; + fiat_p256_mulx_u32(&x612, &x613, x588, UINT32_C(0xffffffff)); + uint32_t x614; + fiat_p256_uint1 x615; + fiat_p256_addcarryx_u32(&x614, &x615, 0x0, x613, x610); + uint32_t x616; + fiat_p256_uint1 x617; + fiat_p256_addcarryx_u32(&x616, &x617, x615, x611, x608); + uint32_t x618 = (x617 + x609); + uint32_t x619; + fiat_p256_uint1 x620; + fiat_p256_addcarryx_u32(&x619, &x620, 0x0, x588, x612); + uint32_t x621; + fiat_p256_uint1 x622; + fiat_p256_addcarryx_u32(&x621, &x622, x620, x590, x614); + uint32_t x623; + fiat_p256_uint1 x624; + fiat_p256_addcarryx_u32(&x623, &x624, x622, x592, x616); + uint32_t x625; + fiat_p256_uint1 x626; + fiat_p256_addcarryx_u32(&x625, &x626, x624, x594, x618); + uint32_t x627; + fiat_p256_uint1 x628; + fiat_p256_addcarryx_u32(&x627, &x628, x626, x596, 0x0); + uint32_t x629; + fiat_p256_uint1 x630; + fiat_p256_addcarryx_u32(&x629, &x630, x628, x598, 0x0); + uint32_t x631; + fiat_p256_uint1 x632; + fiat_p256_addcarryx_u32(&x631, &x632, x630, x600, x588); + uint32_t x633; + fiat_p256_uint1 x634; + fiat_p256_addcarryx_u32(&x633, &x634, x632, x602, x606); + uint32_t x635; + fiat_p256_uint1 x636; + fiat_p256_addcarryx_u32(&x635, &x636, x634, x604, x607); + uint32_t x637 = ((uint32_t)x636 + x605); + uint32_t x638; + fiat_p256_uint1 x639; + fiat_p256_subborrowx_u32(&x638, &x639, 0x0, x621, UINT32_C(0xffffffff)); + uint32_t x640; + fiat_p256_uint1 x641; + fiat_p256_subborrowx_u32(&x640, &x641, x639, x623, UINT32_C(0xffffffff)); + uint32_t x642; + fiat_p256_uint1 x643; + fiat_p256_subborrowx_u32(&x642, &x643, x641, x625, UINT32_C(0xffffffff)); + uint32_t x644; + fiat_p256_uint1 x645; + fiat_p256_subborrowx_u32(&x644, &x645, x643, x627, 0x0); + uint32_t x646; + fiat_p256_uint1 x647; + fiat_p256_subborrowx_u32(&x646, &x647, x645, x629, 0x0); + uint32_t x648; + fiat_p256_uint1 x649; + fiat_p256_subborrowx_u32(&x648, &x649, x647, x631, 0x0); + uint32_t x650; + fiat_p256_uint1 x651; + fiat_p256_subborrowx_u32(&x650, &x651, x649, x633, 0x1); + uint32_t x652; + fiat_p256_uint1 x653; + fiat_p256_subborrowx_u32(&x652, &x653, x651, x635, UINT32_C(0xffffffff)); + uint32_t x654; + fiat_p256_uint1 x655; + fiat_p256_subborrowx_u32(&x654, &x655, x653, x637, 0x0); + uint32_t x656; + fiat_p256_cmovznz_u32(&x656, x655, x638, x621); + uint32_t x657; + fiat_p256_cmovznz_u32(&x657, x655, x640, x623); + uint32_t x658; + fiat_p256_cmovznz_u32(&x658, x655, x642, x625); + uint32_t x659; + fiat_p256_cmovznz_u32(&x659, x655, x644, x627); + uint32_t x660; + fiat_p256_cmovznz_u32(&x660, x655, x646, x629); + uint32_t x661; + fiat_p256_cmovznz_u32(&x661, x655, x648, x631); + uint32_t x662; + fiat_p256_cmovznz_u32(&x662, x655, x650, x633); + uint32_t x663; + fiat_p256_cmovznz_u32(&x663, x655, x652, x635); + out1[0] = x656; + out1[1] = x657; + out1[2] = x658; + out1[3] = x659; + out1[4] = x660; + out1[5] = x661; + out1[6] = x662; + out1[7] = x663; +} + +/* + * The function fiat_p256_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_add(uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { + uint32_t x1; + fiat_p256_uint1 x2; + fiat_p256_addcarryx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + uint32_t x3; + fiat_p256_uint1 x4; + fiat_p256_addcarryx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); + uint32_t x5; + fiat_p256_uint1 x6; + fiat_p256_addcarryx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); + uint32_t x7; + fiat_p256_uint1 x8; + fiat_p256_addcarryx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); + uint32_t x9; + fiat_p256_uint1 x10; + fiat_p256_addcarryx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); + uint32_t x11; + fiat_p256_uint1 x12; + fiat_p256_addcarryx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); + uint32_t x13; + fiat_p256_uint1 x14; + fiat_p256_addcarryx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); + uint32_t x15; + fiat_p256_uint1 x16; + fiat_p256_addcarryx_u32(&x15, &x16, x14, (arg1[7]), (arg2[7])); + uint32_t x17; + fiat_p256_uint1 x18; + fiat_p256_subborrowx_u32(&x17, &x18, 0x0, x1, UINT32_C(0xffffffff)); + uint32_t x19; + fiat_p256_uint1 x20; + fiat_p256_subborrowx_u32(&x19, &x20, x18, x3, UINT32_C(0xffffffff)); + uint32_t x21; + fiat_p256_uint1 x22; + fiat_p256_subborrowx_u32(&x21, &x22, x20, x5, UINT32_C(0xffffffff)); + uint32_t x23; + fiat_p256_uint1 x24; + fiat_p256_subborrowx_u32(&x23, &x24, x22, x7, 0x0); + uint32_t x25; + fiat_p256_uint1 x26; + fiat_p256_subborrowx_u32(&x25, &x26, x24, x9, 0x0); + uint32_t x27; + fiat_p256_uint1 x28; + fiat_p256_subborrowx_u32(&x27, &x28, x26, x11, 0x0); + uint32_t x29; + fiat_p256_uint1 x30; + fiat_p256_subborrowx_u32(&x29, &x30, x28, x13, 0x1); + uint32_t x31; + fiat_p256_uint1 x32; + fiat_p256_subborrowx_u32(&x31, &x32, x30, x15, UINT32_C(0xffffffff)); + uint32_t x33; + fiat_p256_uint1 x34; + fiat_p256_subborrowx_u32(&x33, &x34, x32, x16, 0x0); + uint32_t x35; + fiat_p256_cmovznz_u32(&x35, x34, x17, x1); + uint32_t x36; + fiat_p256_cmovznz_u32(&x36, x34, x19, x3); + uint32_t x37; + fiat_p256_cmovznz_u32(&x37, x34, x21, x5); + uint32_t x38; + fiat_p256_cmovznz_u32(&x38, x34, x23, x7); + uint32_t x39; + fiat_p256_cmovznz_u32(&x39, x34, x25, x9); + uint32_t x40; + fiat_p256_cmovznz_u32(&x40, x34, x27, x11); + uint32_t x41; + fiat_p256_cmovznz_u32(&x41, x34, x29, x13); + uint32_t x42; + fiat_p256_cmovznz_u32(&x42, x34, x31, x15); + out1[0] = x35; + out1[1] = x36; + out1[2] = x37; + out1[3] = x38; + out1[4] = x39; + out1[5] = x40; + out1[6] = x41; + out1[7] = x42; +} + +/* + * The function fiat_p256_sub subtracts two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_sub(uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { + uint32_t x1; + fiat_p256_uint1 x2; + fiat_p256_subborrowx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + uint32_t x3; + fiat_p256_uint1 x4; + fiat_p256_subborrowx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); + uint32_t x5; + fiat_p256_uint1 x6; + fiat_p256_subborrowx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); + uint32_t x7; + fiat_p256_uint1 x8; + fiat_p256_subborrowx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); + uint32_t x9; + fiat_p256_uint1 x10; + fiat_p256_subborrowx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); + uint32_t x11; + fiat_p256_uint1 x12; + fiat_p256_subborrowx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); + uint32_t x13; + fiat_p256_uint1 x14; + fiat_p256_subborrowx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); + uint32_t x15; + fiat_p256_uint1 x16; + fiat_p256_subborrowx_u32(&x15, &x16, x14, (arg1[7]), (arg2[7])); + uint32_t x17; + fiat_p256_cmovznz_u32(&x17, x16, 0x0, UINT32_C(0xffffffff)); + uint32_t x18; + fiat_p256_uint1 x19; + fiat_p256_addcarryx_u32(&x18, &x19, 0x0, x1, (x17 & UINT32_C(0xffffffff))); + uint32_t x20; + fiat_p256_uint1 x21; + fiat_p256_addcarryx_u32(&x20, &x21, x19, x3, (x17 & UINT32_C(0xffffffff))); + uint32_t x22; + fiat_p256_uint1 x23; + fiat_p256_addcarryx_u32(&x22, &x23, x21, x5, (x17 & UINT32_C(0xffffffff))); + uint32_t x24; + fiat_p256_uint1 x25; + fiat_p256_addcarryx_u32(&x24, &x25, x23, x7, 0x0); + uint32_t x26; + fiat_p256_uint1 x27; + fiat_p256_addcarryx_u32(&x26, &x27, x25, x9, 0x0); + uint32_t x28; + fiat_p256_uint1 x29; + fiat_p256_addcarryx_u32(&x28, &x29, x27, x11, 0x0); + uint32_t x30; + fiat_p256_uint1 x31; + fiat_p256_addcarryx_u32(&x30, &x31, x29, x13, (fiat_p256_uint1)(x17 & 0x1)); + uint32_t x32; + fiat_p256_uint1 x33; + fiat_p256_addcarryx_u32(&x32, &x33, x31, x15, (x17 & UINT32_C(0xffffffff))); + out1[0] = x18; + out1[1] = x20; + out1[2] = x22; + out1[3] = x24; + out1[4] = x26; + out1[5] = x28; + out1[6] = x30; + out1[7] = x32; +} + +/* + * The function fiat_p256_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_opp(uint32_t out1[8], const uint32_t arg1[8]) { + uint32_t x1; + fiat_p256_uint1 x2; + fiat_p256_subborrowx_u32(&x1, &x2, 0x0, 0x0, (arg1[0])); + uint32_t x3; + fiat_p256_uint1 x4; + fiat_p256_subborrowx_u32(&x3, &x4, x2, 0x0, (arg1[1])); + uint32_t x5; + fiat_p256_uint1 x6; + fiat_p256_subborrowx_u32(&x5, &x6, x4, 0x0, (arg1[2])); + uint32_t x7; + fiat_p256_uint1 x8; + fiat_p256_subborrowx_u32(&x7, &x8, x6, 0x0, (arg1[3])); + uint32_t x9; + fiat_p256_uint1 x10; + fiat_p256_subborrowx_u32(&x9, &x10, x8, 0x0, (arg1[4])); + uint32_t x11; + fiat_p256_uint1 x12; + fiat_p256_subborrowx_u32(&x11, &x12, x10, 0x0, (arg1[5])); + uint32_t x13; + fiat_p256_uint1 x14; + fiat_p256_subborrowx_u32(&x13, &x14, x12, 0x0, (arg1[6])); + uint32_t x15; + fiat_p256_uint1 x16; + fiat_p256_subborrowx_u32(&x15, &x16, x14, 0x0, (arg1[7])); + uint32_t x17; + fiat_p256_cmovznz_u32(&x17, x16, 0x0, UINT32_C(0xffffffff)); + uint32_t x18; + fiat_p256_uint1 x19; + fiat_p256_addcarryx_u32(&x18, &x19, 0x0, x1, (x17 & UINT32_C(0xffffffff))); + uint32_t x20; + fiat_p256_uint1 x21; + fiat_p256_addcarryx_u32(&x20, &x21, x19, x3, (x17 & UINT32_C(0xffffffff))); + uint32_t x22; + fiat_p256_uint1 x23; + fiat_p256_addcarryx_u32(&x22, &x23, x21, x5, (x17 & UINT32_C(0xffffffff))); + uint32_t x24; + fiat_p256_uint1 x25; + fiat_p256_addcarryx_u32(&x24, &x25, x23, x7, 0x0); + uint32_t x26; + fiat_p256_uint1 x27; + fiat_p256_addcarryx_u32(&x26, &x27, x25, x9, 0x0); + uint32_t x28; + fiat_p256_uint1 x29; + fiat_p256_addcarryx_u32(&x28, &x29, x27, x11, 0x0); + uint32_t x30; + fiat_p256_uint1 x31; + fiat_p256_addcarryx_u32(&x30, &x31, x29, x13, (fiat_p256_uint1)(x17 & 0x1)); + uint32_t x32; + fiat_p256_uint1 x33; + fiat_p256_addcarryx_u32(&x32, &x33, x31, x15, (x17 & UINT32_C(0xffffffff))); + out1[0] = x18; + out1[1] = x20; + out1[2] = x22; + out1[3] = x24; + out1[4] = x26; + out1[5] = x28; + out1[6] = x30; + out1[7] = x32; +} + +/* + * The function fiat_p256_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + */ +static void fiat_p256_nonzero(uint32_t* out1, const uint32_t arg1[8]) { + uint32_t x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | ((arg1[4]) | ((arg1[5]) | ((arg1[6]) | ((arg1[7]) | (uint32_t)0x0)))))))); + *out1 = x1; +} + +/* + * The function fiat_p256_selectznz is a multi-limb conditional select. + * Postconditions: + * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_selectznz(uint32_t out1[8], fiat_p256_uint1 arg1, const uint32_t arg2[8], const uint32_t arg3[8]) { + uint32_t x1; + fiat_p256_cmovznz_u32(&x1, arg1, (arg2[0]), (arg3[0])); + uint32_t x2; + fiat_p256_cmovznz_u32(&x2, arg1, (arg2[1]), (arg3[1])); + uint32_t x3; + fiat_p256_cmovznz_u32(&x3, arg1, (arg2[2]), (arg3[2])); + uint32_t x4; + fiat_p256_cmovznz_u32(&x4, arg1, (arg2[3]), (arg3[3])); + uint32_t x5; + fiat_p256_cmovznz_u32(&x5, arg1, (arg2[4]), (arg3[4])); + uint32_t x6; + fiat_p256_cmovznz_u32(&x6, arg1, (arg2[5]), (arg3[5])); + uint32_t x7; + fiat_p256_cmovznz_u32(&x7, arg1, (arg2[6]), (arg3[6])); + uint32_t x8; + fiat_p256_cmovznz_u32(&x8, arg1, (arg2[7]), (arg3[7])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; + out1[5] = x6; + out1[6] = x7; + out1[7] = x8; +} diff --git a/vendor/ring/third_party/fiat/p256_64.h b/vendor/ring/third_party/fiat/p256_64.h new file mode 100644 index 00000000..66d2398e --- /dev/null +++ b/vendor/ring/third_party/fiat/p256_64.h @@ -0,0 +1,901 @@ +/* Autogenerated: src/ExtractionOCaml/word_by_word_montgomery --static p256 '2^256 - 2^224 + 2^192 + 2^96 - 1' 64 mul square add sub opp from_montgomery nonzero selectznz to_bytes from_bytes */ +/* curve description: p256 */ +/* requested operations: mul, square, add, sub, opp, from_montgomery, nonzero, selectznz, to_bytes, from_bytes */ +/* m = 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff (from "2^256 - 2^224 + 2^192 + 2^96 - 1") */ +/* machine_wordsize = 64 (from "64") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ + +#include +typedef unsigned char fiat_p256_uint1; +typedef signed char fiat_p256_int1; +typedef signed __int128 fiat_p256_int128; +typedef unsigned __int128 fiat_p256_uint128; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + + +/* + * The function fiat_p256_addcarryx_u64 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^64 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p256_addcarryx_u64(uint64_t* out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_p256_uint128 x1 = ((arg1 + (fiat_p256_uint128)arg2) + arg3); + uint64_t x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + fiat_p256_uint1 x3 = (fiat_p256_uint1)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p256_subborrowx_u64 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^64 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p256_subborrowx_u64(uint64_t* out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_p256_int128 x1 = ((arg2 - (fiat_p256_int128)arg1) - arg3); + fiat_p256_int1 x2 = (fiat_p256_int1)(x1 >> 64); + uint64_t x3 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + *out1 = x3; + *out2 = (fiat_p256_uint1)(0x0 - x2); +} + +/* + * The function fiat_p256_mulx_u64 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^64 + * out2 = ⌊arg1 * arg2 / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_p256_mulx_u64(uint64_t* out1, uint64_t* out2, uint64_t arg1, uint64_t arg2) { + fiat_p256_uint128 x1 = ((fiat_p256_uint128)arg1 * arg2); + uint64_t x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + uint64_t x3 = (uint64_t)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p256_cmovznz_u64 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_p256_cmovznz_u64(uint64_t* out1, fiat_p256_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_p256_uint1 x1 = (!(!arg1)); + uint64_t x2 = ((fiat_p256_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); + // Note this line has been patched from the synthesized code to add value + // barriers. + // + // Clang recognizes this pattern as a select. While it usually transforms it + // to a cmov, it sometimes further transforms it into a branch, which we do + // not want. + uint64_t x3 = ((value_barrier_u64(x2) & arg3) | (value_barrier_u64(~x2) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_p256_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_mul(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { + uint64_t x1 = (arg1[1]); + uint64_t x2 = (arg1[2]); + uint64_t x3 = (arg1[3]); + uint64_t x4 = (arg1[0]); + uint64_t x5; + uint64_t x6; + fiat_p256_mulx_u64(&x5, &x6, x4, (arg2[3])); + uint64_t x7; + uint64_t x8; + fiat_p256_mulx_u64(&x7, &x8, x4, (arg2[2])); + uint64_t x9; + uint64_t x10; + fiat_p256_mulx_u64(&x9, &x10, x4, (arg2[1])); + uint64_t x11; + uint64_t x12; + fiat_p256_mulx_u64(&x11, &x12, x4, (arg2[0])); + uint64_t x13; + fiat_p256_uint1 x14; + fiat_p256_addcarryx_u64(&x13, &x14, 0x0, x12, x9); + uint64_t x15; + fiat_p256_uint1 x16; + fiat_p256_addcarryx_u64(&x15, &x16, x14, x10, x7); + uint64_t x17; + fiat_p256_uint1 x18; + fiat_p256_addcarryx_u64(&x17, &x18, x16, x8, x5); + uint64_t x19 = (x18 + x6); + uint64_t x20; + uint64_t x21; + fiat_p256_mulx_u64(&x20, &x21, x11, UINT64_C(0xffffffff00000001)); + uint64_t x22; + uint64_t x23; + fiat_p256_mulx_u64(&x22, &x23, x11, UINT32_C(0xffffffff)); + uint64_t x24; + uint64_t x25; + fiat_p256_mulx_u64(&x24, &x25, x11, UINT64_C(0xffffffffffffffff)); + uint64_t x26; + fiat_p256_uint1 x27; + fiat_p256_addcarryx_u64(&x26, &x27, 0x0, x25, x22); + uint64_t x28 = (x27 + x23); + uint64_t x29; + fiat_p256_uint1 x30; + fiat_p256_addcarryx_u64(&x29, &x30, 0x0, x11, x24); + uint64_t x31; + fiat_p256_uint1 x32; + fiat_p256_addcarryx_u64(&x31, &x32, x30, x13, x26); + uint64_t x33; + fiat_p256_uint1 x34; + fiat_p256_addcarryx_u64(&x33, &x34, x32, x15, x28); + uint64_t x35; + fiat_p256_uint1 x36; + fiat_p256_addcarryx_u64(&x35, &x36, x34, x17, x20); + uint64_t x37; + fiat_p256_uint1 x38; + fiat_p256_addcarryx_u64(&x37, &x38, x36, x19, x21); + uint64_t x39; + uint64_t x40; + fiat_p256_mulx_u64(&x39, &x40, x1, (arg2[3])); + uint64_t x41; + uint64_t x42; + fiat_p256_mulx_u64(&x41, &x42, x1, (arg2[2])); + uint64_t x43; + uint64_t x44; + fiat_p256_mulx_u64(&x43, &x44, x1, (arg2[1])); + uint64_t x45; + uint64_t x46; + fiat_p256_mulx_u64(&x45, &x46, x1, (arg2[0])); + uint64_t x47; + fiat_p256_uint1 x48; + fiat_p256_addcarryx_u64(&x47, &x48, 0x0, x46, x43); + uint64_t x49; + fiat_p256_uint1 x50; + fiat_p256_addcarryx_u64(&x49, &x50, x48, x44, x41); + uint64_t x51; + fiat_p256_uint1 x52; + fiat_p256_addcarryx_u64(&x51, &x52, x50, x42, x39); + uint64_t x53 = (x52 + x40); + uint64_t x54; + fiat_p256_uint1 x55; + fiat_p256_addcarryx_u64(&x54, &x55, 0x0, x31, x45); + uint64_t x56; + fiat_p256_uint1 x57; + fiat_p256_addcarryx_u64(&x56, &x57, x55, x33, x47); + uint64_t x58; + fiat_p256_uint1 x59; + fiat_p256_addcarryx_u64(&x58, &x59, x57, x35, x49); + uint64_t x60; + fiat_p256_uint1 x61; + fiat_p256_addcarryx_u64(&x60, &x61, x59, x37, x51); + uint64_t x62; + fiat_p256_uint1 x63; + fiat_p256_addcarryx_u64(&x62, &x63, x61, x38, x53); + uint64_t x64; + uint64_t x65; + fiat_p256_mulx_u64(&x64, &x65, x54, UINT64_C(0xffffffff00000001)); + uint64_t x66; + uint64_t x67; + fiat_p256_mulx_u64(&x66, &x67, x54, UINT32_C(0xffffffff)); + uint64_t x68; + uint64_t x69; + fiat_p256_mulx_u64(&x68, &x69, x54, UINT64_C(0xffffffffffffffff)); + uint64_t x70; + fiat_p256_uint1 x71; + fiat_p256_addcarryx_u64(&x70, &x71, 0x0, x69, x66); + uint64_t x72 = (x71 + x67); + uint64_t x73; + fiat_p256_uint1 x74; + fiat_p256_addcarryx_u64(&x73, &x74, 0x0, x54, x68); + uint64_t x75; + fiat_p256_uint1 x76; + fiat_p256_addcarryx_u64(&x75, &x76, x74, x56, x70); + uint64_t x77; + fiat_p256_uint1 x78; + fiat_p256_addcarryx_u64(&x77, &x78, x76, x58, x72); + uint64_t x79; + fiat_p256_uint1 x80; + fiat_p256_addcarryx_u64(&x79, &x80, x78, x60, x64); + uint64_t x81; + fiat_p256_uint1 x82; + fiat_p256_addcarryx_u64(&x81, &x82, x80, x62, x65); + uint64_t x83 = ((uint64_t)x82 + x63); + uint64_t x84; + uint64_t x85; + fiat_p256_mulx_u64(&x84, &x85, x2, (arg2[3])); + uint64_t x86; + uint64_t x87; + fiat_p256_mulx_u64(&x86, &x87, x2, (arg2[2])); + uint64_t x88; + uint64_t x89; + fiat_p256_mulx_u64(&x88, &x89, x2, (arg2[1])); + uint64_t x90; + uint64_t x91; + fiat_p256_mulx_u64(&x90, &x91, x2, (arg2[0])); + uint64_t x92; + fiat_p256_uint1 x93; + fiat_p256_addcarryx_u64(&x92, &x93, 0x0, x91, x88); + uint64_t x94; + fiat_p256_uint1 x95; + fiat_p256_addcarryx_u64(&x94, &x95, x93, x89, x86); + uint64_t x96; + fiat_p256_uint1 x97; + fiat_p256_addcarryx_u64(&x96, &x97, x95, x87, x84); + uint64_t x98 = (x97 + x85); + uint64_t x99; + fiat_p256_uint1 x100; + fiat_p256_addcarryx_u64(&x99, &x100, 0x0, x75, x90); + uint64_t x101; + fiat_p256_uint1 x102; + fiat_p256_addcarryx_u64(&x101, &x102, x100, x77, x92); + uint64_t x103; + fiat_p256_uint1 x104; + fiat_p256_addcarryx_u64(&x103, &x104, x102, x79, x94); + uint64_t x105; + fiat_p256_uint1 x106; + fiat_p256_addcarryx_u64(&x105, &x106, x104, x81, x96); + uint64_t x107; + fiat_p256_uint1 x108; + fiat_p256_addcarryx_u64(&x107, &x108, x106, x83, x98); + uint64_t x109; + uint64_t x110; + fiat_p256_mulx_u64(&x109, &x110, x99, UINT64_C(0xffffffff00000001)); + uint64_t x111; + uint64_t x112; + fiat_p256_mulx_u64(&x111, &x112, x99, UINT32_C(0xffffffff)); + uint64_t x113; + uint64_t x114; + fiat_p256_mulx_u64(&x113, &x114, x99, UINT64_C(0xffffffffffffffff)); + uint64_t x115; + fiat_p256_uint1 x116; + fiat_p256_addcarryx_u64(&x115, &x116, 0x0, x114, x111); + uint64_t x117 = (x116 + x112); + uint64_t x118; + fiat_p256_uint1 x119; + fiat_p256_addcarryx_u64(&x118, &x119, 0x0, x99, x113); + uint64_t x120; + fiat_p256_uint1 x121; + fiat_p256_addcarryx_u64(&x120, &x121, x119, x101, x115); + uint64_t x122; + fiat_p256_uint1 x123; + fiat_p256_addcarryx_u64(&x122, &x123, x121, x103, x117); + uint64_t x124; + fiat_p256_uint1 x125; + fiat_p256_addcarryx_u64(&x124, &x125, x123, x105, x109); + uint64_t x126; + fiat_p256_uint1 x127; + fiat_p256_addcarryx_u64(&x126, &x127, x125, x107, x110); + uint64_t x128 = ((uint64_t)x127 + x108); + uint64_t x129; + uint64_t x130; + fiat_p256_mulx_u64(&x129, &x130, x3, (arg2[3])); + uint64_t x131; + uint64_t x132; + fiat_p256_mulx_u64(&x131, &x132, x3, (arg2[2])); + uint64_t x133; + uint64_t x134; + fiat_p256_mulx_u64(&x133, &x134, x3, (arg2[1])); + uint64_t x135; + uint64_t x136; + fiat_p256_mulx_u64(&x135, &x136, x3, (arg2[0])); + uint64_t x137; + fiat_p256_uint1 x138; + fiat_p256_addcarryx_u64(&x137, &x138, 0x0, x136, x133); + uint64_t x139; + fiat_p256_uint1 x140; + fiat_p256_addcarryx_u64(&x139, &x140, x138, x134, x131); + uint64_t x141; + fiat_p256_uint1 x142; + fiat_p256_addcarryx_u64(&x141, &x142, x140, x132, x129); + uint64_t x143 = (x142 + x130); + uint64_t x144; + fiat_p256_uint1 x145; + fiat_p256_addcarryx_u64(&x144, &x145, 0x0, x120, x135); + uint64_t x146; + fiat_p256_uint1 x147; + fiat_p256_addcarryx_u64(&x146, &x147, x145, x122, x137); + uint64_t x148; + fiat_p256_uint1 x149; + fiat_p256_addcarryx_u64(&x148, &x149, x147, x124, x139); + uint64_t x150; + fiat_p256_uint1 x151; + fiat_p256_addcarryx_u64(&x150, &x151, x149, x126, x141); + uint64_t x152; + fiat_p256_uint1 x153; + fiat_p256_addcarryx_u64(&x152, &x153, x151, x128, x143); + uint64_t x154; + uint64_t x155; + fiat_p256_mulx_u64(&x154, &x155, x144, UINT64_C(0xffffffff00000001)); + uint64_t x156; + uint64_t x157; + fiat_p256_mulx_u64(&x156, &x157, x144, UINT32_C(0xffffffff)); + uint64_t x158; + uint64_t x159; + fiat_p256_mulx_u64(&x158, &x159, x144, UINT64_C(0xffffffffffffffff)); + uint64_t x160; + fiat_p256_uint1 x161; + fiat_p256_addcarryx_u64(&x160, &x161, 0x0, x159, x156); + uint64_t x162 = (x161 + x157); + uint64_t x163; + fiat_p256_uint1 x164; + fiat_p256_addcarryx_u64(&x163, &x164, 0x0, x144, x158); + uint64_t x165; + fiat_p256_uint1 x166; + fiat_p256_addcarryx_u64(&x165, &x166, x164, x146, x160); + uint64_t x167; + fiat_p256_uint1 x168; + fiat_p256_addcarryx_u64(&x167, &x168, x166, x148, x162); + uint64_t x169; + fiat_p256_uint1 x170; + fiat_p256_addcarryx_u64(&x169, &x170, x168, x150, x154); + uint64_t x171; + fiat_p256_uint1 x172; + fiat_p256_addcarryx_u64(&x171, &x172, x170, x152, x155); + uint64_t x173 = ((uint64_t)x172 + x153); + uint64_t x174; + fiat_p256_uint1 x175; + fiat_p256_subborrowx_u64(&x174, &x175, 0x0, x165, UINT64_C(0xffffffffffffffff)); + uint64_t x176; + fiat_p256_uint1 x177; + fiat_p256_subborrowx_u64(&x176, &x177, x175, x167, UINT32_C(0xffffffff)); + uint64_t x178; + fiat_p256_uint1 x179; + fiat_p256_subborrowx_u64(&x178, &x179, x177, x169, 0x0); + uint64_t x180; + fiat_p256_uint1 x181; + fiat_p256_subborrowx_u64(&x180, &x181, x179, x171, UINT64_C(0xffffffff00000001)); + uint64_t x182; + fiat_p256_uint1 x183; + fiat_p256_subborrowx_u64(&x182, &x183, x181, x173, 0x0); + uint64_t x184; + fiat_p256_cmovznz_u64(&x184, x183, x174, x165); + uint64_t x185; + fiat_p256_cmovznz_u64(&x185, x183, x176, x167); + uint64_t x186; + fiat_p256_cmovznz_u64(&x186, x183, x178, x169); + uint64_t x187; + fiat_p256_cmovznz_u64(&x187, x183, x180, x171); + out1[0] = x184; + out1[1] = x185; + out1[2] = x186; + out1[3] = x187; +} + +/* + * The function fiat_p256_square squares a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_square(uint64_t out1[4], const uint64_t arg1[4]) { + uint64_t x1 = (arg1[1]); + uint64_t x2 = (arg1[2]); + uint64_t x3 = (arg1[3]); + uint64_t x4 = (arg1[0]); + uint64_t x5; + uint64_t x6; + fiat_p256_mulx_u64(&x5, &x6, x4, (arg1[3])); + uint64_t x7; + uint64_t x8; + fiat_p256_mulx_u64(&x7, &x8, x4, (arg1[2])); + uint64_t x9; + uint64_t x10; + fiat_p256_mulx_u64(&x9, &x10, x4, (arg1[1])); + uint64_t x11; + uint64_t x12; + fiat_p256_mulx_u64(&x11, &x12, x4, (arg1[0])); + uint64_t x13; + fiat_p256_uint1 x14; + fiat_p256_addcarryx_u64(&x13, &x14, 0x0, x12, x9); + uint64_t x15; + fiat_p256_uint1 x16; + fiat_p256_addcarryx_u64(&x15, &x16, x14, x10, x7); + uint64_t x17; + fiat_p256_uint1 x18; + fiat_p256_addcarryx_u64(&x17, &x18, x16, x8, x5); + uint64_t x19 = (x18 + x6); + uint64_t x20; + uint64_t x21; + fiat_p256_mulx_u64(&x20, &x21, x11, UINT64_C(0xffffffff00000001)); + uint64_t x22; + uint64_t x23; + fiat_p256_mulx_u64(&x22, &x23, x11, UINT32_C(0xffffffff)); + uint64_t x24; + uint64_t x25; + fiat_p256_mulx_u64(&x24, &x25, x11, UINT64_C(0xffffffffffffffff)); + uint64_t x26; + fiat_p256_uint1 x27; + fiat_p256_addcarryx_u64(&x26, &x27, 0x0, x25, x22); + uint64_t x28 = (x27 + x23); + uint64_t x29; + fiat_p256_uint1 x30; + fiat_p256_addcarryx_u64(&x29, &x30, 0x0, x11, x24); + uint64_t x31; + fiat_p256_uint1 x32; + fiat_p256_addcarryx_u64(&x31, &x32, x30, x13, x26); + uint64_t x33; + fiat_p256_uint1 x34; + fiat_p256_addcarryx_u64(&x33, &x34, x32, x15, x28); + uint64_t x35; + fiat_p256_uint1 x36; + fiat_p256_addcarryx_u64(&x35, &x36, x34, x17, x20); + uint64_t x37; + fiat_p256_uint1 x38; + fiat_p256_addcarryx_u64(&x37, &x38, x36, x19, x21); + uint64_t x39; + uint64_t x40; + fiat_p256_mulx_u64(&x39, &x40, x1, (arg1[3])); + uint64_t x41; + uint64_t x42; + fiat_p256_mulx_u64(&x41, &x42, x1, (arg1[2])); + uint64_t x43; + uint64_t x44; + fiat_p256_mulx_u64(&x43, &x44, x1, (arg1[1])); + uint64_t x45; + uint64_t x46; + fiat_p256_mulx_u64(&x45, &x46, x1, (arg1[0])); + uint64_t x47; + fiat_p256_uint1 x48; + fiat_p256_addcarryx_u64(&x47, &x48, 0x0, x46, x43); + uint64_t x49; + fiat_p256_uint1 x50; + fiat_p256_addcarryx_u64(&x49, &x50, x48, x44, x41); + uint64_t x51; + fiat_p256_uint1 x52; + fiat_p256_addcarryx_u64(&x51, &x52, x50, x42, x39); + uint64_t x53 = (x52 + x40); + uint64_t x54; + fiat_p256_uint1 x55; + fiat_p256_addcarryx_u64(&x54, &x55, 0x0, x31, x45); + uint64_t x56; + fiat_p256_uint1 x57; + fiat_p256_addcarryx_u64(&x56, &x57, x55, x33, x47); + uint64_t x58; + fiat_p256_uint1 x59; + fiat_p256_addcarryx_u64(&x58, &x59, x57, x35, x49); + uint64_t x60; + fiat_p256_uint1 x61; + fiat_p256_addcarryx_u64(&x60, &x61, x59, x37, x51); + uint64_t x62; + fiat_p256_uint1 x63; + fiat_p256_addcarryx_u64(&x62, &x63, x61, x38, x53); + uint64_t x64; + uint64_t x65; + fiat_p256_mulx_u64(&x64, &x65, x54, UINT64_C(0xffffffff00000001)); + uint64_t x66; + uint64_t x67; + fiat_p256_mulx_u64(&x66, &x67, x54, UINT32_C(0xffffffff)); + uint64_t x68; + uint64_t x69; + fiat_p256_mulx_u64(&x68, &x69, x54, UINT64_C(0xffffffffffffffff)); + uint64_t x70; + fiat_p256_uint1 x71; + fiat_p256_addcarryx_u64(&x70, &x71, 0x0, x69, x66); + uint64_t x72 = (x71 + x67); + uint64_t x73; + fiat_p256_uint1 x74; + fiat_p256_addcarryx_u64(&x73, &x74, 0x0, x54, x68); + uint64_t x75; + fiat_p256_uint1 x76; + fiat_p256_addcarryx_u64(&x75, &x76, x74, x56, x70); + uint64_t x77; + fiat_p256_uint1 x78; + fiat_p256_addcarryx_u64(&x77, &x78, x76, x58, x72); + uint64_t x79; + fiat_p256_uint1 x80; + fiat_p256_addcarryx_u64(&x79, &x80, x78, x60, x64); + uint64_t x81; + fiat_p256_uint1 x82; + fiat_p256_addcarryx_u64(&x81, &x82, x80, x62, x65); + uint64_t x83 = ((uint64_t)x82 + x63); + uint64_t x84; + uint64_t x85; + fiat_p256_mulx_u64(&x84, &x85, x2, (arg1[3])); + uint64_t x86; + uint64_t x87; + fiat_p256_mulx_u64(&x86, &x87, x2, (arg1[2])); + uint64_t x88; + uint64_t x89; + fiat_p256_mulx_u64(&x88, &x89, x2, (arg1[1])); + uint64_t x90; + uint64_t x91; + fiat_p256_mulx_u64(&x90, &x91, x2, (arg1[0])); + uint64_t x92; + fiat_p256_uint1 x93; + fiat_p256_addcarryx_u64(&x92, &x93, 0x0, x91, x88); + uint64_t x94; + fiat_p256_uint1 x95; + fiat_p256_addcarryx_u64(&x94, &x95, x93, x89, x86); + uint64_t x96; + fiat_p256_uint1 x97; + fiat_p256_addcarryx_u64(&x96, &x97, x95, x87, x84); + uint64_t x98 = (x97 + x85); + uint64_t x99; + fiat_p256_uint1 x100; + fiat_p256_addcarryx_u64(&x99, &x100, 0x0, x75, x90); + uint64_t x101; + fiat_p256_uint1 x102; + fiat_p256_addcarryx_u64(&x101, &x102, x100, x77, x92); + uint64_t x103; + fiat_p256_uint1 x104; + fiat_p256_addcarryx_u64(&x103, &x104, x102, x79, x94); + uint64_t x105; + fiat_p256_uint1 x106; + fiat_p256_addcarryx_u64(&x105, &x106, x104, x81, x96); + uint64_t x107; + fiat_p256_uint1 x108; + fiat_p256_addcarryx_u64(&x107, &x108, x106, x83, x98); + uint64_t x109; + uint64_t x110; + fiat_p256_mulx_u64(&x109, &x110, x99, UINT64_C(0xffffffff00000001)); + uint64_t x111; + uint64_t x112; + fiat_p256_mulx_u64(&x111, &x112, x99, UINT32_C(0xffffffff)); + uint64_t x113; + uint64_t x114; + fiat_p256_mulx_u64(&x113, &x114, x99, UINT64_C(0xffffffffffffffff)); + uint64_t x115; + fiat_p256_uint1 x116; + fiat_p256_addcarryx_u64(&x115, &x116, 0x0, x114, x111); + uint64_t x117 = (x116 + x112); + uint64_t x118; + fiat_p256_uint1 x119; + fiat_p256_addcarryx_u64(&x118, &x119, 0x0, x99, x113); + uint64_t x120; + fiat_p256_uint1 x121; + fiat_p256_addcarryx_u64(&x120, &x121, x119, x101, x115); + uint64_t x122; + fiat_p256_uint1 x123; + fiat_p256_addcarryx_u64(&x122, &x123, x121, x103, x117); + uint64_t x124; + fiat_p256_uint1 x125; + fiat_p256_addcarryx_u64(&x124, &x125, x123, x105, x109); + uint64_t x126; + fiat_p256_uint1 x127; + fiat_p256_addcarryx_u64(&x126, &x127, x125, x107, x110); + uint64_t x128 = ((uint64_t)x127 + x108); + uint64_t x129; + uint64_t x130; + fiat_p256_mulx_u64(&x129, &x130, x3, (arg1[3])); + uint64_t x131; + uint64_t x132; + fiat_p256_mulx_u64(&x131, &x132, x3, (arg1[2])); + uint64_t x133; + uint64_t x134; + fiat_p256_mulx_u64(&x133, &x134, x3, (arg1[1])); + uint64_t x135; + uint64_t x136; + fiat_p256_mulx_u64(&x135, &x136, x3, (arg1[0])); + uint64_t x137; + fiat_p256_uint1 x138; + fiat_p256_addcarryx_u64(&x137, &x138, 0x0, x136, x133); + uint64_t x139; + fiat_p256_uint1 x140; + fiat_p256_addcarryx_u64(&x139, &x140, x138, x134, x131); + uint64_t x141; + fiat_p256_uint1 x142; + fiat_p256_addcarryx_u64(&x141, &x142, x140, x132, x129); + uint64_t x143 = (x142 + x130); + uint64_t x144; + fiat_p256_uint1 x145; + fiat_p256_addcarryx_u64(&x144, &x145, 0x0, x120, x135); + uint64_t x146; + fiat_p256_uint1 x147; + fiat_p256_addcarryx_u64(&x146, &x147, x145, x122, x137); + uint64_t x148; + fiat_p256_uint1 x149; + fiat_p256_addcarryx_u64(&x148, &x149, x147, x124, x139); + uint64_t x150; + fiat_p256_uint1 x151; + fiat_p256_addcarryx_u64(&x150, &x151, x149, x126, x141); + uint64_t x152; + fiat_p256_uint1 x153; + fiat_p256_addcarryx_u64(&x152, &x153, x151, x128, x143); + uint64_t x154; + uint64_t x155; + fiat_p256_mulx_u64(&x154, &x155, x144, UINT64_C(0xffffffff00000001)); + uint64_t x156; + uint64_t x157; + fiat_p256_mulx_u64(&x156, &x157, x144, UINT32_C(0xffffffff)); + uint64_t x158; + uint64_t x159; + fiat_p256_mulx_u64(&x158, &x159, x144, UINT64_C(0xffffffffffffffff)); + uint64_t x160; + fiat_p256_uint1 x161; + fiat_p256_addcarryx_u64(&x160, &x161, 0x0, x159, x156); + uint64_t x162 = (x161 + x157); + uint64_t x163; + fiat_p256_uint1 x164; + fiat_p256_addcarryx_u64(&x163, &x164, 0x0, x144, x158); + uint64_t x165; + fiat_p256_uint1 x166; + fiat_p256_addcarryx_u64(&x165, &x166, x164, x146, x160); + uint64_t x167; + fiat_p256_uint1 x168; + fiat_p256_addcarryx_u64(&x167, &x168, x166, x148, x162); + uint64_t x169; + fiat_p256_uint1 x170; + fiat_p256_addcarryx_u64(&x169, &x170, x168, x150, x154); + uint64_t x171; + fiat_p256_uint1 x172; + fiat_p256_addcarryx_u64(&x171, &x172, x170, x152, x155); + uint64_t x173 = ((uint64_t)x172 + x153); + uint64_t x174; + fiat_p256_uint1 x175; + fiat_p256_subborrowx_u64(&x174, &x175, 0x0, x165, UINT64_C(0xffffffffffffffff)); + uint64_t x176; + fiat_p256_uint1 x177; + fiat_p256_subborrowx_u64(&x176, &x177, x175, x167, UINT32_C(0xffffffff)); + uint64_t x178; + fiat_p256_uint1 x179; + fiat_p256_subborrowx_u64(&x178, &x179, x177, x169, 0x0); + uint64_t x180; + fiat_p256_uint1 x181; + fiat_p256_subborrowx_u64(&x180, &x181, x179, x171, UINT64_C(0xffffffff00000001)); + uint64_t x182; + fiat_p256_uint1 x183; + fiat_p256_subborrowx_u64(&x182, &x183, x181, x173, 0x0); + uint64_t x184; + fiat_p256_cmovznz_u64(&x184, x183, x174, x165); + uint64_t x185; + fiat_p256_cmovznz_u64(&x185, x183, x176, x167); + uint64_t x186; + fiat_p256_cmovznz_u64(&x186, x183, x178, x169); + uint64_t x187; + fiat_p256_cmovznz_u64(&x187, x183, x180, x171); + out1[0] = x184; + out1[1] = x185; + out1[2] = x186; + out1[3] = x187; +} + +/* + * The function fiat_p256_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_add(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { + uint64_t x1; + fiat_p256_uint1 x2; + fiat_p256_addcarryx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + uint64_t x3; + fiat_p256_uint1 x4; + fiat_p256_addcarryx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + uint64_t x5; + fiat_p256_uint1 x6; + fiat_p256_addcarryx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + uint64_t x7; + fiat_p256_uint1 x8; + fiat_p256_addcarryx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + uint64_t x9; + fiat_p256_uint1 x10; + fiat_p256_subborrowx_u64(&x9, &x10, 0x0, x1, UINT64_C(0xffffffffffffffff)); + uint64_t x11; + fiat_p256_uint1 x12; + fiat_p256_subborrowx_u64(&x11, &x12, x10, x3, UINT32_C(0xffffffff)); + uint64_t x13; + fiat_p256_uint1 x14; + fiat_p256_subborrowx_u64(&x13, &x14, x12, x5, 0x0); + uint64_t x15; + fiat_p256_uint1 x16; + fiat_p256_subborrowx_u64(&x15, &x16, x14, x7, UINT64_C(0xffffffff00000001)); + uint64_t x17; + fiat_p256_uint1 x18; + fiat_p256_subborrowx_u64(&x17, &x18, x16, x8, 0x0); + uint64_t x19; + fiat_p256_cmovznz_u64(&x19, x18, x9, x1); + uint64_t x20; + fiat_p256_cmovznz_u64(&x20, x18, x11, x3); + uint64_t x21; + fiat_p256_cmovznz_u64(&x21, x18, x13, x5); + uint64_t x22; + fiat_p256_cmovznz_u64(&x22, x18, x15, x7); + out1[0] = x19; + out1[1] = x20; + out1[2] = x21; + out1[3] = x22; +} + +/* + * The function fiat_p256_sub subtracts two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_sub(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { + uint64_t x1; + fiat_p256_uint1 x2; + fiat_p256_subborrowx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + uint64_t x3; + fiat_p256_uint1 x4; + fiat_p256_subborrowx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + uint64_t x5; + fiat_p256_uint1 x6; + fiat_p256_subborrowx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + uint64_t x7; + fiat_p256_uint1 x8; + fiat_p256_subborrowx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + uint64_t x9; + fiat_p256_cmovznz_u64(&x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); + uint64_t x10; + fiat_p256_uint1 x11; + fiat_p256_addcarryx_u64(&x10, &x11, 0x0, x1, (x9 & UINT64_C(0xffffffffffffffff))); + uint64_t x12; + fiat_p256_uint1 x13; + fiat_p256_addcarryx_u64(&x12, &x13, x11, x3, (x9 & UINT32_C(0xffffffff))); + uint64_t x14; + fiat_p256_uint1 x15; + fiat_p256_addcarryx_u64(&x14, &x15, x13, x5, 0x0); + uint64_t x16; + fiat_p256_uint1 x17; + fiat_p256_addcarryx_u64(&x16, &x17, x15, x7, (x9 & UINT64_C(0xffffffff00000001))); + out1[0] = x10; + out1[1] = x12; + out1[2] = x14; + out1[3] = x16; +} + +/* + * The function fiat_p256_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_opp(uint64_t out1[4], const uint64_t arg1[4]) { + uint64_t x1; + fiat_p256_uint1 x2; + fiat_p256_subborrowx_u64(&x1, &x2, 0x0, 0x0, (arg1[0])); + uint64_t x3; + fiat_p256_uint1 x4; + fiat_p256_subborrowx_u64(&x3, &x4, x2, 0x0, (arg1[1])); + uint64_t x5; + fiat_p256_uint1 x6; + fiat_p256_subborrowx_u64(&x5, &x6, x4, 0x0, (arg1[2])); + uint64_t x7; + fiat_p256_uint1 x8; + fiat_p256_subborrowx_u64(&x7, &x8, x6, 0x0, (arg1[3])); + uint64_t x9; + fiat_p256_cmovznz_u64(&x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); + uint64_t x10; + fiat_p256_uint1 x11; + fiat_p256_addcarryx_u64(&x10, &x11, 0x0, x1, (x9 & UINT64_C(0xffffffffffffffff))); + uint64_t x12; + fiat_p256_uint1 x13; + fiat_p256_addcarryx_u64(&x12, &x13, x11, x3, (x9 & UINT32_C(0xffffffff))); + uint64_t x14; + fiat_p256_uint1 x15; + fiat_p256_addcarryx_u64(&x14, &x15, x13, x5, 0x0); + uint64_t x16; + fiat_p256_uint1 x17; + fiat_p256_addcarryx_u64(&x16, &x17, x15, x7, (x9 & UINT64_C(0xffffffff00000001))); + out1[0] = x10; + out1[1] = x12; + out1[2] = x14; + out1[3] = x16; +} + +/* + * The function fiat_p256_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_p256_nonzero(uint64_t* out1, const uint64_t arg1[4]) { + uint64_t x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | (uint64_t)0x0)))); + *out1 = x1; +} + +/* + * The function fiat_p256_selectznz is a multi-limb conditional select. + * Postconditions: + * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_selectznz(uint64_t out1[4], fiat_p256_uint1 arg1, const uint64_t arg2[4], const uint64_t arg3[4]) { + uint64_t x1; + fiat_p256_cmovznz_u64(&x1, arg1, (arg2[0]), (arg3[0])); + uint64_t x2; + fiat_p256_cmovznz_u64(&x2, arg1, (arg2[1]), (arg3[1])); + uint64_t x3; + fiat_p256_cmovznz_u64(&x3, arg1, (arg2[2]), (arg3[2])); + uint64_t x4; + fiat_p256_cmovznz_u64(&x4, arg1, (arg2[3]), (arg3[3])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; +} + diff --git a/vendor/webpki/Cargo.toml b/vendor/webpki/Cargo.toml new file mode 100644 index 00000000..a88c3839 --- /dev/null +++ b/vendor/webpki/Cargo.toml @@ -0,0 +1,99 @@ +# Copyright 2015 Brian Smith. +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +[package] +authors = ["Brian Smith "] +categories = ["cryptography", "no-std"] +description = "Web PKI X.509 Certificate Verification." +documentation = "https://briansmith.org/rustdoc/webpki/" +edition = "2018" +license-file = "LICENSE" +name = "webpki" +readme = "README.md" +repository = "https://github.com/briansmith/webpki" +version = "0.22.0" + +include = [ + "Cargo.toml", + + "LICENSE", + "README.md", + + "src/calendar.rs", + "src/cert.rs", + "src/der.rs", + "src/end_entity.rs", + "src/error.rs", + "src/name.rs", + "src/name/dns_name.rs", + "src/name/ip_address.rs", + "src/name/verify.rs", + "src/signed_data.rs", + "src/time.rs", + "src/trust_anchor.rs", + "src/verify_cert.rs", + "src/lib.rs", + + "src/data/**/*", + + "tests/dns_name_tests.rs", + "tests/integration.rs", + "tests/misc/serial_neg.der", + "tests/misc/serial_zero.der", + "tests/netflix/ca.der", + "tests/netflix/ee.der", + "tests/netflix/inter.der", + "tests/ed25519/ca.der", + "tests/ed25519/ee.der", + + "third-party/chromium/**/*", +] + +[package.metadata.docs.rs] +all-features = true + +[lib] +name = "webpki" + +[features] +alloc = ["ring/alloc"] +std = ["alloc"] + +[target.'cfg(target_arch = "wasm32")'.dependencies] +ring_wasmable = { package = "ring", path = "../ring", default-features = false, features = ["alloc", "wasm32_c"] } + +[target.'cfg(not(target_arch = "wasm32"))'.dependencies] +ring = { version = "0.16.20", default-features = false, features = ["alloc"] } + +[dependencies] +untrusted = "0.7.1" + +[dev-dependencies] +base64 = "0.9.1" + +[profile.bench] +opt-level = 3 +debug = false +rpath = false +lto = true +debug-assertions = false +codegen-units = 1 + +[profile.release] +opt-level = 3 +debug = false +rpath = false +lto = true +debug-assertions = false +codegen-units = 1 diff --git a/vendor/webpki/LICENSE b/vendor/webpki/LICENSE new file mode 100644 index 00000000..cd87be1d --- /dev/null +++ b/vendor/webpki/LICENSE @@ -0,0 +1,19 @@ +Except as otherwise noted, this project is licensed under the following +(ISC-style) terms: + +Copyright 2015 Brian Smith. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +The files under third-party/chromium are licensed as described in +third-party/chromium/LICENSE. diff --git a/vendor/webpki/README.md b/vendor/webpki/README.md new file mode 100644 index 00000000..29bb8361 --- /dev/null +++ b/vendor/webpki/README.md @@ -0,0 +1,78 @@ +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + + +What is webpki? +================== + +webpki is a library that validates Web PKI (TLS/SSL) certificates. webpki +is designed to provide a **full** implementation of the client side of the +**Web PKI** to a diverse range of applications and devices, +including embedded (IoT) applications, mobile apps, desktop applications, and +server infrastructure. webpki is intended to not only be the best +implementation of the Web PKI, but to also *precisely define* what the Web PKI +is. + +webpki is written in [Rust](https://www.rust-lang.org/) and uses +[*ring*](https://github.com/briansmith/ring) for signature verification. + +webpki is strongly influenced by +[mozilla::pkix](https://github.com/briansmith/mozillapkix). You can read a +little about the ideas underlying both mozilla::pkix and webpki in +[insanity::pkix: A New Certificate Path Building & Validation +Library](https://briansmith.org/insanity-pkix). + +The Rust compiler statically guarantees there are no buffer overflows, +uses-after-free, double-frees, data races, etc. in webpki. webpki takes +advantage of Rust's borrow checker to ensure that its **zero-copy parsing** +strategy is safe and efficient. webpki *never* allocates memory on the heap, +and it maintains a tight bound on the amount of stack memory it uses. webpki +avoids all superfluous PKIX features in order to keep its object code size +small. Further reducing the code size of webpki is an important goal. + +This release is the very first prototype. Lots of improvements are planned, +including: + +* An extensive automated test suite. +* Key pinning. +* Certificate Transparency support. +* Short-lived certificate, OCSP stapling, and CRLSet support. +* Customization of the supported algorithms, key sizes, and elliptic curves + allowed during a validation. +* A C language wrapper interface to allow using webpki in non-Rust + applications. +* A specification of precisely what the Web PKI is. + + + +Demo +==== + +See https://github.com/ctz/rustls#example-code for an example of using +webpki. + + + +License +======= + +See [LICENSE](LICENSE). This project happily accepts pull requests without any +formal copyright/contributor license agreement. Pull requests must explicitly +indicate who owns the copyright to the code being contributed and that the code +is being licensed under the same terms as the existing webpki code. + + + +Bug Reporting +============= + +Please report bugs either as pull requests or as issues in [the issue +tracker](https://github.com/briansmith/webpki/issues). webpki has a +**full disclosure** vulnerability policy. **Please do NOT attempt to report +any security vulnerability in this code privately to anybody.** diff --git a/vendor/webpki/deny.toml b/vendor/webpki/deny.toml new file mode 100644 index 00000000..d5ab300c --- /dev/null +++ b/vendor/webpki/deny.toml @@ -0,0 +1,40 @@ +[advisories] +unmaintained = "deny" +yanked = "deny" +notice = "deny" + +[licenses] +allow = [ + "Apache-2.0", + "ISC", + "LicenseRef-ring", + "LicenseRef-webpki", + "MIT", +] +confidence-threshold = 1.0 + +[[licenses.clarify]] +name = "ring" +expression = "LicenseRef-ring" +license-files = [ + { path = "LICENSE", hash = 0xbd0eed23 }, +] + +# XXX: Figure out how to deal with the Google-source test data +# https://github.com/briansmith/webpki/issues/148. +[[licenses.clarify]] +name = "webpki" +expression = "LicenseRef-webpki" +license-files = [ + { path = "LICENSE", hash = 0x001c7e6c }, +] + +[bans] +# We don't maintain a fixed Cargo.lock so enforcing +# `multiple-versions = "deny"` is impractical. +multiple-versions = "allow" +wildcards = "deny" + +[sources] +unknown-registry = "deny" +unknown-git = "deny" diff --git a/vendor/webpki/mk/cargo.sh b/vendor/webpki/mk/cargo.sh new file mode 100755 index 00000000..a7b8154b --- /dev/null +++ b/vendor/webpki/mk/cargo.sh @@ -0,0 +1,153 @@ +#!/usr/bin/env bash +# +# Copyright 2020 Brian Smith. +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +set -eux -o pipefail +IFS=$'\n\t' + +rustflags_self_contained="-Clink-self-contained=yes -Clinker=rust-lld" +qemu_aarch64="qemu-aarch64 -L /usr/aarch64-linux-gnu" +qemu_arm="qemu-arm -L /usr/arm-linux-gnueabihf" + +# Avoid putting the Android tools in `$PATH` because there are tools in this +# directory like `clang` that would conflict with the same-named tools that may +# be needed to compile the build script, or to compile for other targets. +if [ -n "${ANDROID_SDK_ROOT-}" ]; then + android_tools=$ANDROID_SDK_ROOT/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin +fi + +for arg in $*; do + case $arg in + --target=*) + target=${arg#*=} + ;; + *) + ;; + esac +done + +# See comments in install-build-tools.sh. +llvm_version=10 +if [ -n "${RING_COVERAGE-}" ]; then + llvm_version=11 +fi + +case $target in + aarch64-linux-android) + export CC_aarch64_linux_android=$android_tools/aarch64-linux-android21-clang + export AR_aarch64_linux_android=$android_tools/aarch64-linux-android-ar + export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=$android_tools/aarch64-linux-android21-clang + ;; + aarch64-unknown-linux-gnu) + export CC_aarch64_unknown_linux_gnu=clang-$llvm_version + export AR_aarch64_unknown_linux_gnu=llvm-ar-$llvm_version + export CFLAGS_aarch64_unknown_linux_gnu="--sysroot=/usr/aarch64-linux-gnu" + export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc + export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER="$qemu_aarch64" + ;; + aarch64-unknown-linux-musl) + export CC_aarch64_unknown_linux_musl=clang-$llvm_version + export AR_aarch64_unknown_linux_musl=llvm-ar-$llvm_version + export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="$rustflags_self_contained" + export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUNNER="$qemu_aarch64" + ;; + arm-unknown-linux-gnueabihf) + export CC_arm_unknown_linux_gnueabihf=arm-linux-gnueabihf-gcc + export AR_arm_unknown_linux_gnueabihf=arm-linux-gnueabihf-gcc-ar + export CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc + export CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_RUNNER="$qemu_arm" + ;; + armv7-linux-androideabi) + export CC_armv7_linux_androideabi=$android_tools/armv7a-linux-androideabi18-clang + export AR_armv7_linux_androideabi=$android_tools/arm-linux-androideabi-ar + export CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER=$android_tools/armv7a-linux-androideabi18-clang + ;; + armv7-unknown-linux-musleabihf) + export CC_armv7_unknown_linux_musleabihf=clang-$llvm_version + export AR_armv7_unknown_linux_musleabihf=llvm-ar-$llvm_version + export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_RUSTFLAGS="$rustflags_self_contained" + export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_RUNNER="$qemu_arm" + ;; + i686-unknown-linux-gnu) + export CC_i686_unknown_linux_gnu=clang-$llvm_version + export AR_i686_unknown_linux_gnu=llvm-ar-$llvm_version + export CARGO_TARGET_I686_UNKNOWN_LINUX_GNU_LINKER=clang-$llvm_version + ;; + i686-unknown-linux-musl) + export CC_i686_unknown_linux_musl=clang-$llvm_version + export AR_i686_unknown_linux_musl=llvm-ar-$llvm_version + export CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_RUSTFLAGS="$rustflags_self_contained" + ;; + x86_64-unknown-linux-musl) + export CC_x86_64_unknown_linux_musl=clang-$llvm_version + export AR_x86_64_unknown_linux_musl=llvm-ar-$llvm_version + # XXX: Work around https://github.com/rust-lang/rust/issues/79555. + if [ -n "${RING_COVERAGE-}" ]; then + export CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=clang-$llvm_version + else + export CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="$rustflags_self_contained" + fi + ;; + wasm32-unknown-unknown) + # The first two are only needed for when the "wasm_c" feature is enabled. + export CC_wasm32_unknown_unknown=clang-$llvm_version + export AR_wasm32_unknown_unknown=llvm-ar-$llvm_version + export CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_RUNNER=wasm-bindgen-test-runner + ;; + *) + ;; +esac + +if [ -n "${RING_COVERAGE-}" ]; then + # XXX: Collides between release and debug. + coverage_dir=$PWD/target/$target/debug/coverage + mkdir -p "$coverage_dir" + rm -f "$coverage_dir/*.profraw" + + export RING_BUILD_EXECUTABLE_LIST="$coverage_dir/executables" + truncate --size=0 "$RING_BUILD_EXECUTABLE_LIST" + + # This doesn't work when profiling under QEMU. Instead mk/runner does + # something similar but different. + # export LLVM_PROFILE_FILE="$coverage_dir/%m.profraw" + + # ${target} with hyphens replaced by underscores, lowercase and uppercase. + target_lower=${target//-/_} + target_upper=${target_lower^^} + + cflags_var=CFLAGS_${target_lower} + declare -x "${cflags_var}=-fprofile-instr-generate -fcoverage-mapping ${!cflags_var-}" + + runner_var=CARGO_TARGET_${target_upper}_RUNNER + declare -x "${runner_var}=mk/runner ${!runner_var-}" + + rustflags_var=CARGO_TARGET_${target_upper}_RUSTFLAGS + declare -x "${rustflags_var}=-Zinstrument-coverage ${!rustflags_var-}" +fi + +cargo "$@" + +if [ -n "${RING_COVERAGE-}" ]; then + while read executable; do + basename=$(basename "$executable") + llvm-profdata-$llvm_version merge -sparse ""$coverage_dir"/$basename.profraw" -o "$coverage_dir"/$basename.profdata + mkdir -p "$coverage_dir"/reports + llvm-cov-$llvm_version export \ + --instr-profile "$coverage_dir"/$basename.profdata \ + --format lcov \ + "$executable" \ + > "$coverage_dir"/reports/coverage-$basename.txt + done < "$RING_BUILD_EXECUTABLE_LIST" +fi diff --git a/vendor/webpki/mk/install-build-tools.sh b/vendor/webpki/mk/install-build-tools.sh new file mode 100755 index 00000000..e997bbb4 --- /dev/null +++ b/vendor/webpki/mk/install-build-tools.sh @@ -0,0 +1,95 @@ +#!/usr/bin/env bash +# +# Copyright 2020 Brian Smith. +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +set -eux -o pipefail +IFS=$'\n\t' + +target=$1 +features=${2-} + +function install_packages { + sudo apt-get -yq --no-install-suggests --no-install-recommends install "$@" +} + +use_clang= +case $target in +--target*android*) + mkdir -p "${ANDROID_SDK_ROOT}/licenses" + android_license_file="${ANDROID_SDK_ROOT}/licenses/android-sdk-license" + accept_android_license=24333f8a63b6825ea9c5514f83c2829b004d1fee + grep --quiet --no-messages "$accept_android_license" "$android_license_file" \ + || echo $accept_android_license >> "$android_license_file" + sudo "${ANDROID_SDK_ROOT}/tools/bin/sdkmanager" ndk-bundle + ;; +esac + +case $target in +--target=aarch64-unknown-linux-gnu) + # Clang is needed for code coverage. + use_clang=1 + install_packages \ + qemu-user \ + gcc-aarch64-linux-gnu \ + libc6-dev-arm64-cross + ;; +--target=aarch64-unknown-linux-musl|--target=armv7-unknown-linux-musleabihf) + use_clang=1 + install_packages \ + qemu-user + ;; +--target=arm-unknown-linux-gnueabihf) + install_packages \ + qemu-user \ + gcc-arm-linux-gnueabihf \ + libc6-dev-armhf-cross + ;; +--target=i686-unknown-linux-gnu) + use_clang=1 + install_packages \ + gcc-multilib \ + libc6-dev-i386 + ;; +--target=i686-unknown-linux-musl|--target=x86_64-unknown-linux-musl) + use_clang=1 + ;; +--target=wasm32-unknown-unknown) + # The version of wasm-bindgen-cli must match the wasm-bindgen version. + wasm_bindgen_version=$(cargo metadata --format-version 1 | jq -r '.packages | map(select( .name == "wasm-bindgen")) | map(.version) | .[0]') + cargo install wasm-bindgen-cli --vers "$wasm_bindgen_version" --bin wasm-bindgen-test-runner + case ${features-} in + *wasm32_c*) + use_clang=1 + ;; + *) + ;; + esac + ;; +--target=*) + ;; +esac + +if [ -n "$use_clang" ]; then + llvm_version=10 + if [ -n "${RING_COVERAGE-}" ]; then + # https://github.com/rust-lang/rust/pull/79365 upgraded the coverage file + # format to one that only LLVM 11+ can use + llvm_version=11 + sudo apt-key add mk/llvm-snapshot.gpg.key + sudo add-apt-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-$llvm_version main" + sudo apt-get update + fi + install_packages clang-$llvm_version llvm-$llvm_version +fi diff --git a/vendor/webpki/mk/llvm-snapshot.gpg.key b/vendor/webpki/mk/llvm-snapshot.gpg.key new file mode 100644 index 00000000..87a01ff8 --- /dev/null +++ b/vendor/webpki/mk/llvm-snapshot.gpg.key @@ -0,0 +1,54 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.12 (GNU/Linux) +Comment: See https://apt.llvm.org/. +Comment: Fingerprint: 6084 F3CF 814B 57C1 CF12 EFD5 15CF 4D18 AF4F 7421 + +mQINBFE9lCwBEADi0WUAApM/mgHJRU8lVkkw0CHsZNpqaQDNaHefD6Rw3S4LxNmM +EZaOTkhP200XZM8lVdbfUW9xSjA3oPldc1HG26NjbqqCmWpdo2fb+r7VmU2dq3NM +R18ZlKixiLDE6OUfaXWKamZsXb6ITTYmgTO6orQWYrnW6ckYHSeaAkW0wkDAryl2 +B5v8aoFnQ1rFiVEMo4NGzw4UX+MelF7rxaaregmKVTPiqCOSPJ1McC1dHFN533FY +Wh/RVLKWo6npu+owtwYFQW+zyQhKzSIMvNujFRzhIxzxR9Gn87MoLAyfgKEzrbbT +DhqqNXTxS4UMUKCQaO93TzetX/EBrRpJj+vP640yio80h4Dr5pAd7+LnKwgpTDk1 +G88bBXJAcPZnTSKu9I2c6KY4iRNbvRz4i+ZdwwZtdW4nSdl2792L7Sl7Nc44uLL/ +ZqkKDXEBF6lsX5XpABwyK89S/SbHOytXv9o4puv+65Ac5/UShspQTMSKGZgvDauU +cs8kE1U9dPOqVNCYq9Nfwinkf6RxV1k1+gwtclxQuY7UpKXP0hNAXjAiA5KS5Crq +7aaJg9q2F4bub0mNU6n7UI6vXguF2n4SEtzPRk6RP+4TiT3bZUsmr+1ktogyOJCc +Ha8G5VdL+NBIYQthOcieYCBnTeIH7D3Sp6FYQTYtVbKFzmMK+36ERreL/wARAQAB +tD1TeWx2ZXN0cmUgTGVkcnUgLSBEZWJpYW4gTExWTSBwYWNrYWdlcyA8c3lsdmVz +dHJlQGRlYmlhbi5vcmc+iQI4BBMBAgAiBQJRPZQsAhsDBgsJCAcDAgYVCAIJCgsE +FgIDAQIeAQIXgAAKCRAVz00Yr090Ibx+EADArS/hvkDF8juWMXxh17CgR0WZlHCC +9CTBWkg5a0bNN/3bb97cPQt/vIKWjQtkQpav6/5JTVCSx2riL4FHYhH0iuo4iAPR +udC7Cvg8g7bSPrKO6tenQZNvQm+tUmBHgFiMBJi92AjZ/Qn1Shg7p9ITivFxpLyX +wpmnF1OKyI2Kof2rm4BFwfSWuf8Fvh7kDMRLHv+MlnK/7j/BNpKdozXxLcwoFBmn +l0WjpAH3OFF7Pvm1LJdf1DjWKH0Dc3sc6zxtmBR/KHHg6kK4BGQNnFKujcP7TVdv +gMYv84kun14pnwjZcqOtN3UJtcx22880DOQzinoMs3Q4w4o05oIF+sSgHViFpc3W +R0v+RllnH05vKZo+LDzc83DQVrdwliV12eHxrMQ8UYg88zCbF/cHHnlzZWAJgftg +hB08v1BKPgYRUzwJ6VdVqXYcZWEaUJmQAPuAALyZESw94hSo28FAn0/gzEc5uOYx +K+xG/lFwgAGYNb3uGM5m0P6LVTfdg6vDwwOeTNIExVk3KVFXeSQef2ZMkhwA7wya +KJptkb62wBHFE+o9TUdtMCY6qONxMMdwioRE5BYNwAsS1PnRD2+jtlI0DzvKHt7B +MWd8hnoUKhMeZ9TNmo+8CpsAtXZcBho0zPGz/R8NlJhAWpdAZ1CmcPo83EW86Yq7 +BxQUKnNHcwj2ebkCDQRRPZQsARAA4jxYmbTHwmMjqSizlMJYNuGOpIidEdx9zQ5g +zOr431/VfWq4S+VhMDhs15j9lyml0y4ok215VRFwrAREDg6UPMr7ajLmBQGau0Fc +bvZJ90l4NjXp5p0NEE/qOb9UEHT7EGkEhaZ1ekkWFTWCgsy7rRXfZLxB6sk7pzLC +DshyW3zjIakWAnpQ5j5obiDy708pReAuGB94NSyb1HoW/xGsGgvvCw4r0w3xPStw +F1PhmScE6NTBIfLliea3pl8vhKPlCh54Hk7I8QGjo1ETlRP4Qll1ZxHJ8u25f/ta +RES2Aw8Hi7j0EVcZ6MT9JWTI83yUcnUlZPZS2HyeWcUj+8nUC8W4N8An+aNps9l/ +21inIl2TbGo3Yn1JQLnA1YCoGwC34g8QZTJhElEQBN0X29ayWW6OdFx8MDvllbBV +ymmKq2lK1U55mQTfDli7S3vfGz9Gp/oQwZ8bQpOeUkc5hbZszYwP4RX+68xDPfn+ +M9udl+qW9wu+LyePbW6HX90LmkhNkkY2ZzUPRPDHZANU5btaPXc2H7edX4y4maQa +xenqD0lGh9LGz/mps4HEZtCI5CY8o0uCMF3lT0XfXhuLksr7Pxv57yue8LLTItOJ +d9Hmzp9G97SRYYeqU+8lyNXtU2PdrLLq7QHkzrsloG78lCpQcalHGACJzrlUWVP/ +fN3Ht3kAEQEAAYkCHwQYAQIACQUCUT2ULAIbDAAKCRAVz00Yr090IbhWEADbr50X +OEXMIMGRLe+YMjeMX9NG4jxs0jZaWHc/WrGR+CCSUb9r6aPXeLo+45949uEfdSsB +pbaEdNWxF5Vr1CSjuO5siIlgDjmT655voXo67xVpEN4HhMrxugDJfCa6z97P0+ML +PdDxim57uNqkam9XIq9hKQaurxMAECDPmlEXI4QT3eu5qw5/knMzDMZj4Vi6hovL +wvvAeLHO/jsyfIdNmhBGU2RWCEZ9uo/MeerPHtRPfg74g+9PPfP6nyHD2Wes6yGd +oVQwtPNAQD6Cj7EaA2xdZYLJ7/jW6yiPu98FFWP74FN2dlyEA2uVziLsfBrgpS4l +tVOlrO2YzkkqUGrybzbLpj6eeHx+Cd7wcjI8CalsqtL6cG8cUEjtWQUHyTbQWAgG +5VPEgIAVhJ6RTZ26i/G+4J8neKyRs4vz+57UGwY6zI4AB1ZcWGEE3Bf+CDEDgmnP +LSwbnHefK9IljT9XU98PelSryUO/5UPw7leE0akXKB4DtekToO226px1VnGp3Bov +1GBGvpHvL2WizEwdk+nfk8LtrLzej+9FtIcq3uIrYnsac47Pf7p0otcFeTJTjSq3 +krCaoG4Hx0zGQG2ZFpHrSrZTVy6lxvIdfi0beMgY6h78p6M9eYZHQHc02DjFkQXN +bXb5c6gCHESH5PXwPU4jQEE7Ib9J6sbk7ZT2Mw== +=j+4q +-----END PGP PUBLIC KEY BLOCK----- diff --git a/vendor/webpki/mk/runner b/vendor/webpki/mk/runner new file mode 100755 index 00000000..ffa14410 --- /dev/null +++ b/vendor/webpki/mk/runner @@ -0,0 +1,21 @@ +#!/bin/bash +set -eux -o pipefail +IFS=$'\n\t' + +for arg in $*; do + # There can be some arguments prefixed in front of the executable, e.g. + # when qemu-user is used. There can be arguments after the executable, + # e.g. `cargo test` arguments like `TESTNAME`. + if [[ $arg = */deps/* ]]; then + executable=$arg + break + fi +done + +export LLVM_PROFILE_FILE=$(dirname "$RING_BUILD_EXECUTABLE_LIST")/$(basename "$executable").profraw + +if [ -n "$RING_BUILD_EXECUTABLE_LIST" ]; then + echo "$executable" >> "$RING_BUILD_EXECUTABLE_LIST" +fi + +$* diff --git a/vendor/webpki/rustfmt.toml b/vendor/webpki/rustfmt.toml new file mode 100644 index 00000000..a032c005 --- /dev/null +++ b/vendor/webpki/rustfmt.toml @@ -0,0 +1,5 @@ +edition = "2018" +max_width = 100 +newline_style = "Unix" +reorder_imports = true +use_field_init_shorthand = true diff --git a/vendor/webpki/src/calendar.rs b/vendor/webpki/src/calendar.rs new file mode 100644 index 00000000..f1d2c444 --- /dev/null +++ b/vendor/webpki/src/calendar.rs @@ -0,0 +1,162 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use super::{time::Time, Error}; + +pub fn time_from_ymdhms_utc( + year: u64, + month: u64, + day_of_month: u64, + hours: u64, + minutes: u64, + seconds: u64, +) -> Result { + let days_before_year_since_unix_epoch = days_before_year_since_unix_epoch(year)?; + + const JAN: u64 = 31; + let feb = days_in_feb(year); + const MAR: u64 = 31; + const APR: u64 = 30; + const MAY: u64 = 31; + const JUN: u64 = 30; + const JUL: u64 = 31; + const AUG: u64 = 31; + const SEP: u64 = 30; + const OCT: u64 = 31; + const NOV: u64 = 30; + let days_before_month_in_year = match month { + 1 => 0, + 2 => JAN, + 3 => JAN + feb, + 4 => JAN + feb + MAR, + 5 => JAN + feb + MAR + APR, + 6 => JAN + feb + MAR + APR + MAY, + 7 => JAN + feb + MAR + APR + MAY + JUN, + 8 => JAN + feb + MAR + APR + MAY + JUN + JUL, + 9 => JAN + feb + MAR + APR + MAY + JUN + JUL + AUG, + 10 => JAN + feb + MAR + APR + MAY + JUN + JUL + AUG + SEP, + 11 => JAN + feb + MAR + APR + MAY + JUN + JUL + AUG + SEP + OCT, + 12 => JAN + feb + MAR + APR + MAY + JUN + JUL + AUG + SEP + OCT + NOV, + _ => unreachable!(), // `read_two_digits` already bounds-checked it. + }; + + let days_before = + days_before_year_since_unix_epoch + days_before_month_in_year + day_of_month - 1; + + let seconds_since_unix_epoch = + (days_before * 24 * 60 * 60) + (hours * 60 * 60) + (minutes * 60) + seconds; + + Ok(Time::from_seconds_since_unix_epoch( + seconds_since_unix_epoch, + )) +} + +fn days_before_year_since_unix_epoch(year: u64) -> Result { + // We don't support dates before January 1, 1970 because that is the + // Unix epoch. It is likely that other software won't deal well with + // certificates that have dates before the epoch. + if year < 1970 { + return Err(Error::BadDerTime); + } + let days_before_year_ad = days_before_year_ad(year); + debug_assert!(days_before_year_ad >= DAYS_BEFORE_UNIX_EPOCH_AD); + Ok(days_before_year_ad - DAYS_BEFORE_UNIX_EPOCH_AD) +} + +fn days_before_year_ad(year: u64) -> u64 { + ((year - 1) * 365) + + ((year - 1) / 4) // leap years are every 4 years, + - ((year - 1) / 100) // except years divisible by 100, + + ((year - 1) / 400) // except years divisible by 400. +} + +pub fn days_in_month(year: u64, month: u64) -> u64 { + match month { + 1 | 3 | 5 | 7 | 8 | 10 | 12 => 31, + 4 | 6 | 9 | 11 => 30, + 2 => days_in_feb(year), + _ => unreachable!(), // `read_two_digits` already bounds-checked it. + } +} + +fn days_in_feb(year: u64) -> u64 { + if (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)) { + 29 + } else { + 28 + } +} + +#[allow(clippy::unreadable_literal)] // TODO: Make this clear. +const DAYS_BEFORE_UNIX_EPOCH_AD: u64 = 719162; + +#[cfg(test)] +mod tests { + #[test] + fn test_days_before_unix_epoch() { + use super::{days_before_year_ad, DAYS_BEFORE_UNIX_EPOCH_AD}; + assert_eq!(DAYS_BEFORE_UNIX_EPOCH_AD, days_before_year_ad(1970)); + } + + #[test] + fn test_days_in_month() { + use super::days_in_month; + assert_eq!(days_in_month(2017, 1), 31); + assert_eq!(days_in_month(2017, 2), 28); + assert_eq!(days_in_month(2017, 3), 31); + assert_eq!(days_in_month(2017, 4), 30); + assert_eq!(days_in_month(2017, 5), 31); + assert_eq!(days_in_month(2017, 6), 30); + assert_eq!(days_in_month(2017, 7), 31); + assert_eq!(days_in_month(2017, 8), 31); + assert_eq!(days_in_month(2017, 9), 30); + assert_eq!(days_in_month(2017, 10), 31); + assert_eq!(days_in_month(2017, 11), 30); + assert_eq!(days_in_month(2017, 12), 31); + + // leap cases + assert_eq!(days_in_month(2000, 2), 29); + assert_eq!(days_in_month(2004, 2), 29); + assert_eq!(days_in_month(2016, 2), 29); + assert_eq!(days_in_month(2100, 2), 28); + } + + #[allow(clippy::unreadable_literal)] // TODO: Make this clear. + #[test] + fn test_time_from_ymdhms_utc() { + use super::{time_from_ymdhms_utc, Time}; + + // year boundary + assert_eq!( + Time::from_seconds_since_unix_epoch(1483228799), + time_from_ymdhms_utc(2016, 12, 31, 23, 59, 59).unwrap() + ); + assert_eq!( + Time::from_seconds_since_unix_epoch(1483228800), + time_from_ymdhms_utc(2017, 1, 1, 0, 0, 0).unwrap() + ); + + // not a leap year + assert_eq!( + Time::from_seconds_since_unix_epoch(1492449162), + time_from_ymdhms_utc(2017, 4, 17, 17, 12, 42).unwrap() + ); + + // leap year, post-feb + assert_eq!( + Time::from_seconds_since_unix_epoch(1460913162), + time_from_ymdhms_utc(2016, 4, 17, 17, 12, 42).unwrap() + ); + } +} diff --git a/vendor/webpki/src/cert.rs b/vendor/webpki/src/cert.rs new file mode 100644 index 00000000..7c76f2e1 --- /dev/null +++ b/vendor/webpki/src/cert.rs @@ -0,0 +1,226 @@ +// Copyright 2015 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use crate::{der, signed_data, Error}; + +pub enum EndEntityOrCa<'a> { + EndEntity, + Ca(&'a Cert<'a>), +} + +pub struct Cert<'a> { + pub ee_or_ca: EndEntityOrCa<'a>, + + pub signed_data: signed_data::SignedData<'a>, + pub issuer: untrusted::Input<'a>, + pub validity: untrusted::Input<'a>, + pub subject: untrusted::Input<'a>, + pub spki: der::Value<'a>, + + pub basic_constraints: Option>, + pub eku: Option>, + pub name_constraints: Option>, + pub subject_alt_name: Option>, +} + +pub fn parse_cert<'a>( + cert_der: untrusted::Input<'a>, + ee_or_ca: EndEntityOrCa<'a>, +) -> Result, Error> { + parse_cert_internal(cert_der, ee_or_ca, certificate_serial_number) +} + +/// Used by `parse_cert` for regular certificates (end-entity and intermediate) +/// and by `cert_der_as_trust_anchor` for trust anchors encoded as +/// certificates. +pub(crate) fn parse_cert_internal<'a>( + cert_der: untrusted::Input<'a>, + ee_or_ca: EndEntityOrCa<'a>, + serial_number: fn(input: &mut untrusted::Reader<'_>) -> Result<(), Error>, +) -> Result, Error> { + let (tbs, signed_data) = cert_der.read_all(Error::BadDer, |cert_der| { + der::nested( + cert_der, + der::Tag::Sequence, + Error::BadDer, + signed_data::parse_signed_data, + ) + })?; + + tbs.read_all(Error::BadDer, |tbs| { + version3(tbs)?; + serial_number(tbs)?; + + let signature = der::expect_tag_and_get_value(tbs, der::Tag::Sequence)?; + // TODO: In mozilla::pkix, the comparison is done based on the + // normalized value (ignoring whether or not there is an optional NULL + // parameter for RSA-based algorithms), so this may be too strict. + if signature != signed_data.algorithm { + return Err(Error::SignatureAlgorithmMismatch); + } + + let issuer = der::expect_tag_and_get_value(tbs, der::Tag::Sequence)?; + let validity = der::expect_tag_and_get_value(tbs, der::Tag::Sequence)?; + let subject = der::expect_tag_and_get_value(tbs, der::Tag::Sequence)?; + let spki = der::expect_tag(tbs, der::Tag::Sequence)?; + + // In theory there could be fields [1] issuerUniqueID and [2] + // subjectUniqueID, but in practice there never are, and to keep the + // code small and simple we don't accept any certificates that do + // contain them. + + let mut cert = Cert { + ee_or_ca, + + signed_data, + issuer, + validity, + subject, + spki, + + basic_constraints: None, + eku: None, + name_constraints: None, + subject_alt_name: None, + }; + + // mozilla::pkix allows the extensions to be omitted. However, since + // the subjectAltName extension is mandatory, the extensions are + // mandatory too, and we enforce that. Also, mozilla::pkix includes + // special logic for handling critical Netscape Cert Type extensions. + // That has been intentionally omitted. + + der::nested( + tbs, + der::Tag::ContextSpecificConstructed3, + Error::MissingOrMalformedExtensions, + |tagged| { + der::nested_of_mut( + tagged, + der::Tag::Sequence, + der::Tag::Sequence, + Error::BadDer, + |extension| { + let extn_id = der::expect_tag_and_get_value(extension, der::Tag::OID)?; + let critical = der::optional_boolean(extension)?; + let extn_value = + der::expect_tag_and_get_value(extension, der::Tag::OctetString)?; + match remember_extension(&mut cert, extn_id, extn_value)? { + Understood::No if critical => Err(Error::UnsupportedCriticalExtension), + _ => Ok(()), + } + }, + ) + }, + )?; + + Ok(cert) + }) +} + +// mozilla::pkix supports v1, v2, v3, and v4, including both the implicit +// (correct) and explicit (incorrect) encoding of v1. We allow only v3. +fn version3(input: &mut untrusted::Reader) -> Result<(), Error> { + der::nested( + input, + der::Tag::ContextSpecificConstructed0, + Error::UnsupportedCertVersion, + |input| { + let version = der::small_nonnegative_integer(input)?; + if version != 2 { + // v3 + return Err(Error::UnsupportedCertVersion); + } + Ok(()) + }, + ) +} + +pub fn certificate_serial_number(input: &mut untrusted::Reader) -> Result<(), Error> { + // https://tools.ietf.org/html/rfc5280#section-4.1.2.2: + // * Conforming CAs MUST NOT use serialNumber values longer than 20 octets." + // * "The serial number MUST be a positive integer [...]" + + let value = der::positive_integer(input)?; + if value.big_endian_without_leading_zero().len() > 20 { + return Err(Error::BadDer); + } + Ok(()) +} + +enum Understood { + Yes, + No, +} + +fn remember_extension<'a>( + cert: &mut Cert<'a>, + extn_id: untrusted::Input, + value: untrusted::Input<'a>, +) -> Result { + // We don't do anything with certificate policies so we can safely ignore + // all policy-related stuff. We assume that the policy-related extensions + // are not marked critical. + + // id-ce 2.5.29 + static ID_CE: [u8; 2] = oid![2, 5, 29]; + + if extn_id.len() != ID_CE.len() + 1 || !extn_id.as_slice_less_safe().starts_with(&ID_CE) { + return Ok(Understood::No); + } + + let out = match *extn_id.as_slice_less_safe().last().unwrap() { + // id-ce-keyUsage 2.5.29.15. We ignore the KeyUsage extension. For CA + // certificates, BasicConstraints.cA makes KeyUsage redundant. Firefox + // and other common browsers do not check KeyUsage for end-entities, + // though it would be kind of nice to ensure that a KeyUsage without + // the keyEncipherment bit could not be used for RSA key exchange. + 15 => { + return Ok(Understood::Yes); + } + + // id-ce-subjectAltName 2.5.29.17 + 17 => &mut cert.subject_alt_name, + + // id-ce-basicConstraints 2.5.29.19 + 19 => &mut cert.basic_constraints, + + // id-ce-nameConstraints 2.5.29.30 + 30 => &mut cert.name_constraints, + + // id-ce-extKeyUsage 2.5.29.37 + 37 => &mut cert.eku, + + _ => { + return Ok(Understood::No); + } + }; + + match *out { + Some(..) => { + // The certificate contains more than one instance of this + // extension. + return Err(Error::ExtensionValueInvalid); + } + None => { + // All the extensions that we care about are wrapped in a SEQUENCE. + let sequence_value = value.read_all(Error::BadDer, |value| { + der::expect_tag_and_get_value(value, der::Tag::Sequence) + })?; + *out = Some(sequence_value); + } + } + + Ok(Understood::Yes) +} diff --git a/vendor/webpki/src/data/README.md b/vendor/webpki/src/data/README.md new file mode 100644 index 00000000..78fc7788 --- /dev/null +++ b/vendor/webpki/src/data/README.md @@ -0,0 +1,21 @@ +These files contain the binary DER encoding of the *values* of some +ASN.1 [`AlgorithmIdentifier`]s, without the outer `SEQUENCE` tag or the outer +length component. + +These files were encoded with the help of [der-ascii]. They can be decoded +using: + +```sh +go get github.com/google/der-ascii/cmd/der2ascii +der2ascii -i -o .ascii +``` + +New or modified der-ascii files can be encoded using: + +```sh +go get github.com/google/der-ascii/cmd/ascii2der +ascii2der i .ascii -o +``` + +[`AlgorithmIdentifier`]: https://tools.ietf.org/html/rfc5280#section-4.1.1.2] +[der-ascii]: https://github.com/google/der-ascii diff --git a/vendor/webpki/src/data/alg-ecdsa-p256.der b/vendor/webpki/src/data/alg-ecdsa-p256.der new file mode 100644 index 00000000..d49c30da --- /dev/null +++ b/vendor/webpki/src/data/alg-ecdsa-p256.der @@ -0,0 +1 @@ +*†HÎ=*†HÎ= \ No newline at end of file diff --git a/vendor/webpki/src/data/alg-ecdsa-p384.der b/vendor/webpki/src/data/alg-ecdsa-p384.der new file mode 100644 index 00000000..8b24916c Binary files /dev/null and b/vendor/webpki/src/data/alg-ecdsa-p384.der differ diff --git a/vendor/webpki/src/data/alg-ecdsa-sha256.der b/vendor/webpki/src/data/alg-ecdsa-sha256.der new file mode 100644 index 00000000..b2ee1289 --- /dev/null +++ b/vendor/webpki/src/data/alg-ecdsa-sha256.der @@ -0,0 +1 @@ +*†HÎ= \ No newline at end of file diff --git a/vendor/webpki/src/data/alg-ecdsa-sha384.der b/vendor/webpki/src/data/alg-ecdsa-sha384.der new file mode 100644 index 00000000..7c61d3aa --- /dev/null +++ b/vendor/webpki/src/data/alg-ecdsa-sha384.der @@ -0,0 +1 @@ +*†HÎ= \ No newline at end of file diff --git a/vendor/webpki/src/data/alg-ed25519.der b/vendor/webpki/src/data/alg-ed25519.der new file mode 100644 index 00000000..7ca46fd9 --- /dev/null +++ b/vendor/webpki/src/data/alg-ed25519.der @@ -0,0 +1 @@ ++ep \ No newline at end of file diff --git a/vendor/webpki/src/data/alg-rsa-encryption.der b/vendor/webpki/src/data/alg-rsa-encryption.der new file mode 100644 index 00000000..77d159a1 Binary files /dev/null and b/vendor/webpki/src/data/alg-rsa-encryption.der differ diff --git a/vendor/webpki/src/data/alg-rsa-pkcs1-sha256.der b/vendor/webpki/src/data/alg-rsa-pkcs1-sha256.der new file mode 100644 index 00000000..ab52bcd8 Binary files /dev/null and b/vendor/webpki/src/data/alg-rsa-pkcs1-sha256.der differ diff --git a/vendor/webpki/src/data/alg-rsa-pkcs1-sha384.der b/vendor/webpki/src/data/alg-rsa-pkcs1-sha384.der new file mode 100644 index 00000000..c0d43b17 Binary files /dev/null and b/vendor/webpki/src/data/alg-rsa-pkcs1-sha384.der differ diff --git a/vendor/webpki/src/data/alg-rsa-pkcs1-sha512.der b/vendor/webpki/src/data/alg-rsa-pkcs1-sha512.der new file mode 100644 index 00000000..71aded5b Binary files /dev/null and b/vendor/webpki/src/data/alg-rsa-pkcs1-sha512.der differ diff --git a/vendor/webpki/src/data/alg-rsa-pss-sha256.der b/vendor/webpki/src/data/alg-rsa-pss-sha256.der new file mode 100644 index 00000000..87328f7c Binary files /dev/null and b/vendor/webpki/src/data/alg-rsa-pss-sha256.der differ diff --git a/vendor/webpki/src/data/alg-rsa-pss-sha384.der b/vendor/webpki/src/data/alg-rsa-pss-sha384.der new file mode 100644 index 00000000..9c3b170f Binary files /dev/null and b/vendor/webpki/src/data/alg-rsa-pss-sha384.der differ diff --git a/vendor/webpki/src/data/alg-rsa-pss-sha512.der b/vendor/webpki/src/data/alg-rsa-pss-sha512.der new file mode 100644 index 00000000..c0ad57d6 Binary files /dev/null and b/vendor/webpki/src/data/alg-rsa-pss-sha512.der differ diff --git a/vendor/webpki/src/der.rs b/vendor/webpki/src/der.rs new file mode 100644 index 00000000..43d0847d --- /dev/null +++ b/vendor/webpki/src/der.rs @@ -0,0 +1,173 @@ +// Copyright 2015 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use crate::{calendar, time, Error}; +pub use ring::io::{ + der::{nested, Tag, CONSTRUCTED}, + Positive, +}; + +#[inline(always)] +pub fn expect_tag_and_get_value<'a>( + input: &mut untrusted::Reader<'a>, + tag: Tag, +) -> Result, Error> { + ring::io::der::expect_tag_and_get_value(input, tag).map_err(|_| Error::BadDer) +} + +pub struct Value<'a> { + value: untrusted::Input<'a>, +} + +impl<'a> Value<'a> { + pub fn value(&self) -> untrusted::Input<'a> { + self.value + } +} + +pub fn expect_tag<'a>(input: &mut untrusted::Reader<'a>, tag: Tag) -> Result, Error> { + let (actual_tag, value) = read_tag_and_get_value(input)?; + if usize::from(tag) != usize::from(actual_tag) { + return Err(Error::BadDer); + } + + Ok(Value { value }) +} + +#[inline(always)] +pub fn read_tag_and_get_value<'a>( + input: &mut untrusted::Reader<'a>, +) -> Result<(u8, untrusted::Input<'a>), Error> { + ring::io::der::read_tag_and_get_value(input).map_err(|_| Error::BadDer) +} + +// TODO: investigate taking decoder as a reference to reduce generated code +// size. +pub fn nested_of_mut<'a, E>( + input: &mut untrusted::Reader<'a>, + outer_tag: Tag, + inner_tag: Tag, + error: E, + mut decoder: impl FnMut(&mut untrusted::Reader<'a>) -> Result<(), E>, +) -> Result<(), E> +where + E: Copy, +{ + nested(input, outer_tag, error, |outer| { + loop { + nested(outer, inner_tag, error, |inner| decoder(inner))?; + if outer.at_end() { + break; + } + } + Ok(()) + }) +} + +pub fn bit_string_with_no_unused_bits<'a>( + input: &mut untrusted::Reader<'a>, +) -> Result, Error> { + nested(input, Tag::BitString, Error::BadDer, |value| { + let unused_bits_at_end = value.read_byte().map_err(|_| Error::BadDer)?; + if unused_bits_at_end != 0 { + return Err(Error::BadDer); + } + Ok(value.read_bytes_to_end()) + }) +} + +// Like mozilla::pkix, we accept the nonconformant explicit encoding of +// the default value (false) for compatibility with real-world certificates. +pub fn optional_boolean(input: &mut untrusted::Reader) -> Result { + if !input.peek(Tag::Boolean.into()) { + return Ok(false); + } + nested(input, Tag::Boolean, Error::BadDer, |input| { + match input.read_byte() { + Ok(0xff) => Ok(true), + Ok(0x00) => Ok(false), + _ => Err(Error::BadDer), + } + }) +} + +pub fn positive_integer<'a>(input: &'a mut untrusted::Reader) -> Result, Error> { + ring::io::der::positive_integer(input).map_err(|_| Error::BadDer) +} + +pub fn small_nonnegative_integer(input: &mut untrusted::Reader) -> Result { + ring::io::der::small_nonnegative_integer(input).map_err(|_| Error::BadDer) +} + +pub fn time_choice(input: &mut untrusted::Reader) -> Result { + let is_utc_time = input.peek(Tag::UTCTime.into()); + let expected_tag = if is_utc_time { + Tag::UTCTime + } else { + Tag::GeneralizedTime + }; + + fn read_digit(inner: &mut untrusted::Reader) -> Result { + const DIGIT: core::ops::RangeInclusive = b'0'..=b'9'; + let b = inner.read_byte().map_err(|_| Error::BadDerTime)?; + if DIGIT.contains(&b) { + return Ok(u64::from(b - DIGIT.start())); + } + Err(Error::BadDerTime) + } + + fn read_two_digits(inner: &mut untrusted::Reader, min: u64, max: u64) -> Result { + let hi = read_digit(inner)?; + let lo = read_digit(inner)?; + let value = (hi * 10) + lo; + if value < min || value > max { + return Err(Error::BadDerTime); + } + Ok(value) + } + + nested(input, expected_tag, Error::BadDer, |value| { + let (year_hi, year_lo) = if is_utc_time { + let lo = read_two_digits(value, 0, 99)?; + let hi = if lo >= 50 { 19 } else { 20 }; + (hi, lo) + } else { + let hi = read_two_digits(value, 0, 99)?; + let lo = read_two_digits(value, 0, 99)?; + (hi, lo) + }; + + let year = (year_hi * 100) + year_lo; + let month = read_two_digits(value, 1, 12)?; + let days_in_month = calendar::days_in_month(year, month); + let day_of_month = read_two_digits(value, 1, days_in_month)?; + let hours = read_two_digits(value, 0, 23)?; + let minutes = read_two_digits(value, 0, 59)?; + let seconds = read_two_digits(value, 0, 59)?; + + let time_zone = value.read_byte().map_err(|_| Error::BadDerTime)?; + if time_zone != b'Z' { + return Err(Error::BadDerTime); + } + + calendar::time_from_ymdhms_utc(year, month, day_of_month, hours, minutes, seconds) + }) +} + +macro_rules! oid { + ( $first:expr, $second:expr, $( $tail:expr ),* ) => + ( + [(40 * $first) + $second, $( $tail ),*] + ) +} diff --git a/vendor/webpki/src/end_entity.rs b/vendor/webpki/src/end_entity.rs new file mode 100644 index 00000000..0507b65e --- /dev/null +++ b/vendor/webpki/src/end_entity.rs @@ -0,0 +1,203 @@ +// Copyright 2015-2021 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use crate::{ + cert, name, signed_data, verify_cert, DnsNameRef, Error, SignatureAlgorithm, Time, + TlsClientTrustAnchors, TlsServerTrustAnchors, +}; + +#[cfg(feature = "alloc")] +use alloc::vec::Vec; + +/// An end-entity certificate. +/// +/// Server certificate processing in a TLS connection consists of several +/// steps. All of these steps are necessary: +/// +/// * `EndEntityCert.verify_is_valid_tls_server_cert`: Verify that the server's +/// certificate is currently valid *for use by a TLS server*. +/// * `EndEntityCert.verify_is_valid_for_dns_name`: Verify that the server's +/// certificate is valid for the host that is being connected to. +/// * `EndEntityCert.verify_signature`: Verify that the signature of server's +/// `ServerKeyExchange` message is valid for the server's certificate. +/// +/// Client certificate processing in a TLS connection consists of analogous +/// steps. All of these steps are necessary: +/// +/// * `EndEntityCert.verify_is_valid_tls_client_cert`: Verify that the client's +/// certificate is currently valid *for use by a TLS client*. +/// * `EndEntityCert.verify_is_valid_for_dns_name` or +/// `EndEntityCert.verify_is_valid_for_at_least_one_dns_name`: Verify that the +/// client's certificate is valid for the identity or identities used to +/// identify the client. (Currently client authentication only works when the +/// client is identified by one or more DNS hostnames.) +/// * `EndEntityCert.verify_signature`: Verify that the client's signature in +/// its `CertificateVerify` message is valid using the public key from the +/// client's certificate. +/// +/// Although it would be less error-prone to combine all these steps into a +/// single function call, some significant optimizations are possible if the +/// three steps are processed separately (in parallel). It does not matter much +/// which order the steps are done in, but **all of these steps must completed +/// before application data is sent and before received application data is +/// processed**. `EndEntityCert::from` is an inexpensive operation and is +/// deterministic, so if these tasks are done in multiple threads, it is +/// probably best to just call `EndEntityCert::from` multiple times (before each +/// operation) for the same DER-encoded ASN.1 certificate bytes. +pub struct EndEntityCert<'a> { + inner: cert::Cert<'a>, +} + +impl<'a> core::convert::TryFrom<&'a [u8]> for EndEntityCert<'a> { + type Error = Error; + + /// Parse the ASN.1 DER-encoded X.509 encoding of the certificate + /// `cert_der`. + fn try_from(cert_der: &'a [u8]) -> Result { + Ok(Self { + inner: cert::parse_cert( + untrusted::Input::from(cert_der), + cert::EndEntityOrCa::EndEntity, + )?, + }) + } +} + +impl<'a> EndEntityCert<'a> { + pub(super) fn inner(&self) -> &cert::Cert { + &self.inner + } + + /// Verifies that the end-entity certificate is valid for use by a TLS + /// server. + /// + /// `supported_sig_algs` is the list of signature algorithms that are + /// trusted for use in certificate signatures; the end-entity certificate's + /// public key is not validated against this list. `trust_anchors` is the + /// list of root CAs to trust. `intermediate_certs` is the sequence of + /// intermediate certificates that the server sent in the TLS handshake. + /// `time` is the time for which the validation is effective (usually the + /// current time). + pub fn verify_is_valid_tls_server_cert( + &self, + supported_sig_algs: &[&SignatureAlgorithm], + &TlsServerTrustAnchors(trust_anchors): &TlsServerTrustAnchors, + intermediate_certs: &[&[u8]], + time: Time, + ) -> Result<(), Error> { + verify_cert::build_chain( + verify_cert::EKU_SERVER_AUTH, + supported_sig_algs, + trust_anchors, + intermediate_certs, + &self.inner, + time, + 0, + ) + } + + /// Verifies that the end-entity certificate is valid for use by a TLS + /// client. + /// + /// If the certificate is not valid for any of the given names then this + /// fails with `Error::CertNotValidForName`. + /// + /// `supported_sig_algs` is the list of signature algorithms that are + /// trusted for use in certificate signatures; the end-entity certificate's + /// public key is not validated against this list. `trust_anchors` is the + /// list of root CAs to trust. `intermediate_certs` is the sequence of + /// intermediate certificates that the client sent in the TLS handshake. + /// `cert` is the purported end-entity certificate of the client. `time` is + /// the time for which the validation is effective (usually the current + /// time). + pub fn verify_is_valid_tls_client_cert( + &self, + supported_sig_algs: &[&SignatureAlgorithm], + &TlsClientTrustAnchors(trust_anchors): &TlsClientTrustAnchors, + intermediate_certs: &[&[u8]], + time: Time, + ) -> Result<(), Error> { + verify_cert::build_chain( + verify_cert::EKU_CLIENT_AUTH, + supported_sig_algs, + trust_anchors, + intermediate_certs, + &self.inner, + time, + 0, + ) + } + + /// Verifies that the certificate is valid for the given DNS host name. + pub fn verify_is_valid_for_dns_name(&self, dns_name: DnsNameRef) -> Result<(), Error> { + name::verify_cert_dns_name(&self, dns_name) + } + + /// Verifies that the certificate is valid for at least one of the given DNS + /// host names. + /// + /// If the certificate is not valid for any of the given names then this + /// fails with `Error::CertNotValidForName`. Otherwise the DNS names for + /// which the certificate is valid are returned. + /// + /// Requires the `alloc` default feature; i.e. this isn't available in + /// `#![no_std]` configurations. + #[cfg(feature = "alloc")] + pub fn verify_is_valid_for_at_least_one_dns_name<'names>( + &self, + dns_names: impl Iterator>, + ) -> Result>, Error> { + let result: Vec> = dns_names + .filter(|n| self.verify_is_valid_for_dns_name(*n).is_ok()) + .collect(); + if result.is_empty() { + return Err(Error::CertNotValidForName); + } + Ok(result) + } + + /// Verifies the signature `signature` of message `msg` using the + /// certificate's public key. + /// + /// `signature_alg` is the algorithm to use to + /// verify the signature; the certificate's public key is verified to be + /// compatible with this algorithm. + /// + /// For TLS 1.2, `signature` corresponds to TLS's + /// `DigitallySigned.signature` and `signature_alg` corresponds to TLS's + /// `DigitallySigned.algorithm` of TLS type `SignatureAndHashAlgorithm`. In + /// TLS 1.2 a single `SignatureAndHashAlgorithm` may map to multiple + /// `SignatureAlgorithm`s. For example, a TLS 1.2 + /// `ignatureAndHashAlgorithm` of (ECDSA, SHA-256) may map to any or all + /// of {`ECDSA_P256_SHA256`, `ECDSA_P384_SHA256`}, depending on how the TLS + /// implementation is configured. + /// + /// For current TLS 1.3 drafts, `signature_alg` corresponds to TLS's + /// `algorithm` fields of type `SignatureScheme`. There is (currently) a + /// one-to-one correspondence between TLS 1.3's `SignatureScheme` and + /// `SignatureAlgorithm`. + pub fn verify_signature( + &self, + signature_alg: &SignatureAlgorithm, + msg: &[u8], + signature: &[u8], + ) -> Result<(), Error> { + signed_data::verify_signature( + signature_alg, + self.inner.spki.value(), + untrusted::Input::from(msg), + untrusted::Input::from(signature), + ) + } +} diff --git a/vendor/webpki/src/error.rs b/vendor/webpki/src/error.rs new file mode 100644 index 00000000..deeb9a83 --- /dev/null +++ b/vendor/webpki/src/error.rs @@ -0,0 +1,108 @@ +// Copyright 2015 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use core::fmt; + +/// An error that occurs during certificate validation or name validation. +#[derive(Clone, Copy, Debug, PartialEq)] +pub enum Error { + /// The encoding of some ASN.1 DER-encoded item is invalid. + BadDer, + + /// The encoding of an ASN.1 DER-encoded time is invalid. + BadDerTime, + + /// A CA certificate is being used as an end-entity certificate. + CaUsedAsEndEntity, + + /// The certificate is expired; i.e. the time it is being validated for is + /// later than the certificate's notAfter time. + CertExpired, + + /// The certificate is not valid for the name it is being validated for. + CertNotValidForName, + + /// The certificate is not valid yet; i.e. the time it is being validated + /// for is earlier than the certificate's notBefore time. + CertNotValidYet, + + /// An end-entity certificate is being used as a CA certificate. + EndEntityUsedAsCa, + + /// An X.509 extension is invalid. + ExtensionValueInvalid, + + /// The certificate validity period (notBefore, notAfter) is invalid; e.g. + /// the notAfter time is earlier than the notBefore time. + InvalidCertValidity, + + /// The signature is invalid for the given public key. + InvalidSignatureForPublicKey, + + /// The certificate violates one or more name constraints. + NameConstraintViolation, + + /// The certificate violates one or more path length constraints. + PathLenConstraintViolated, + + /// The algorithm in the TBSCertificate "signature" field of a certificate + /// does not match the algorithm in the signature of the certificate. + SignatureAlgorithmMismatch, + + /// The certificate is not valid for the Extended Key Usage for which it is + /// being validated. + RequiredEkuNotFound, + + /// A valid issuer for the certificate could not be found. + UnknownIssuer, + + /// The certificate is not a v3 X.509 certificate. + /// + /// This error may be also reported if the certificate version field + /// is malformed. + UnsupportedCertVersion, + + /// The certificate extensions are missing or malformed. + /// + /// In particular, webpki requires the DNS name(s) be in the subjectAltName + /// extension as required by the CA/Browser Forum Baseline Requirements + /// and as recommended by RFC6125. + MissingOrMalformedExtensions, + + /// The certificate contains an unsupported critical extension. + UnsupportedCriticalExtension, + + /// The signature's algorithm does not match the algorithm of the public + /// key it is being validated for. This may be because the public key + /// algorithm's OID isn't recognized (e.g. DSA), or the public key + /// algorithm's parameters don't match the supported parameters for that + /// algorithm (e.g. ECC keys for unsupported curves), or the public key + /// algorithm and the signature algorithm simply don't match (e.g. + /// verifying an RSA signature with an ECC public key). + UnsupportedSignatureAlgorithmForPublicKey, + + /// The signature algorithm for a signature is not in the set of supported + /// signature algorithms given. + UnsupportedSignatureAlgorithm, +} + +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{:?}", self) + } +} + +/// Requires the `std` feature. +#[cfg(feature = "std")] +impl ::std::error::Error for Error {} diff --git a/vendor/webpki/src/lib.rs b/vendor/webpki/src/lib.rs new file mode 100644 index 00000000..0d702b7e --- /dev/null +++ b/vendor/webpki/src/lib.rs @@ -0,0 +1,99 @@ +// Copyright 2015 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! webpki: Web PKI X.509 Certificate Validation. +//! +//! See `EndEntityCert`'s documentation for a description of the certificate +//! processing steps necessary for a TLS connection. +//! +//! # Features +//! +//! | Feature | Description | +//! | ------- | ----------- | +//! | `alloc` | Enable features that require use of the heap. Currently all RSA signature algorithms require this feature. | +//! | `std` | Enable features that require libstd. Implies `alloc`. | + +#![doc(html_root_url = "https://briansmith.org/rustdoc/")] +#![cfg_attr(not(feature = "std"), no_std)] +#![allow( + clippy::doc_markdown, + clippy::if_not_else, + clippy::inline_always, + clippy::items_after_statements, + clippy::missing_errors_doc, + clippy::module_name_repetitions, + clippy::single_match, + clippy::single_match_else +)] +#![deny(clippy::as_conversions)] + +#[cfg(any(test, feature = "alloc"))] +#[cfg_attr(test, macro_use)] +extern crate alloc; + +#[cfg(target_arch = "wasm32")] +extern crate ring_wasmable as ring; + +#[macro_use] +mod der; + +mod calendar; +mod cert; +mod end_entity; +mod error; +mod name; +mod signed_data; +mod time; +mod trust_anchor; + +mod verify_cert; + +pub use { + end_entity::EndEntityCert, + error::Error, + name::{DnsNameRef, InvalidDnsNameError}, + signed_data::{ + SignatureAlgorithm, ECDSA_P256_SHA256, ECDSA_P256_SHA384, ECDSA_P384_SHA256, + ECDSA_P384_SHA384, ED25519, + }, + time::Time, + trust_anchor::{TlsClientTrustAnchors, TlsServerTrustAnchors, TrustAnchor}, +}; + +#[cfg(feature = "alloc")] +pub use { + name::DnsName, + signed_data::{ + RSA_PKCS1_2048_8192_SHA256, RSA_PKCS1_2048_8192_SHA384, RSA_PKCS1_2048_8192_SHA512, + RSA_PKCS1_3072_8192_SHA384, RSA_PSS_2048_8192_SHA256_LEGACY_KEY, + RSA_PSS_2048_8192_SHA384_LEGACY_KEY, RSA_PSS_2048_8192_SHA512_LEGACY_KEY, + }, +}; + +#[cfg(feature = "alloc")] +#[allow(unknown_lints, clippy::upper_case_acronyms)] +#[deprecated(note = "Use DnsName")] +pub type DNSName = DnsName; + +#[deprecated(note = "use DnsNameRef")] +#[allow(unknown_lints, clippy::upper_case_acronyms)] +pub type DNSNameRef<'a> = DnsNameRef<'a>; + +#[deprecated(note = "use TlsServerTrustAnchors")] +#[allow(unknown_lints, clippy::upper_case_acronyms)] +pub type TLSServerTrustAnchors<'a> = TlsServerTrustAnchors<'a>; + +#[deprecated(note = "use TlsClientTrustAnchors")] +#[allow(unknown_lints, clippy::upper_case_acronyms)] +pub type TLSClientTrustAnchors<'a> = TlsClientTrustAnchors<'a>; diff --git a/vendor/webpki/src/name.rs b/vendor/webpki/src/name.rs new file mode 100644 index 00000000..040a8133 --- /dev/null +++ b/vendor/webpki/src/name.rs @@ -0,0 +1,25 @@ +// Copyright 2015-2020 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +mod dns_name; +pub use dns_name::{DnsNameRef, InvalidDnsNameError}; + +/// Requires the `alloc` feature. +#[cfg(feature = "alloc")] +pub use dns_name::DnsName; + +mod ip_address; + +mod verify; +pub(super) use verify::{check_name_constraints, verify_cert_dns_name}; diff --git a/vendor/webpki/src/name/dns_name.rs b/vendor/webpki/src/name/dns_name.rs new file mode 100644 index 00000000..e40e703f --- /dev/null +++ b/vendor/webpki/src/name/dns_name.rs @@ -0,0 +1,796 @@ +// Copyright 2015-2020 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +#[cfg(feature = "alloc")] +use alloc::string::String; + +/// A DNS Name suitable for use in the TLS Server Name Indication (SNI) +/// extension and/or for use as the reference hostname for which to verify a +/// certificate. +/// +/// A `DnsName` is guaranteed to be syntactically valid. The validity rules are +/// specified in [RFC 5280 Section 7.2], except that underscores are also +/// allowed. +/// +/// `DnsName` stores a copy of the input it was constructed from in a `String` +/// and so it is only available when the `std` default feature is enabled. +/// +/// `Eq`, `PartialEq`, etc. are not implemented because name comparison +/// frequently should be done case-insensitively and/or with other caveats that +/// depend on the specific circumstances in which the comparison is done. +/// +/// [RFC 5280 Section 7.2]: https://tools.ietf.org/html/rfc5280#section-7.2 +/// +/// Requires the `alloc` feature. +#[cfg(feature = "alloc")] +#[derive(Clone, Debug, Eq, PartialEq, Hash)] +pub struct DnsName(String); + +/// Requires the `alloc` feature. +#[cfg(feature = "alloc")] +impl DnsName { + /// Returns a `DnsNameRef` that refers to this `DnsName`. + pub fn as_ref(&self) -> DnsNameRef { + DnsNameRef(self.0.as_bytes()) + } +} + +/// Requires the `alloc` feature. +#[cfg(feature = "alloc")] +impl AsRef for DnsName { + fn as_ref(&self) -> &str { + self.0.as_ref() + } +} + +/// Requires the `alloc` feature. +// Deprecated +#[cfg(feature = "alloc")] +impl From> for DnsName { + fn from(dns_name: DnsNameRef) -> Self { + dns_name.to_owned() + } +} + +/// A reference to a DNS Name suitable for use in the TLS Server Name Indication +/// (SNI) extension and/or for use as the reference hostname for which to verify +/// a certificate. +/// +/// A `DnsNameRef` is guaranteed to be syntactically valid. The validity rules +/// are specified in [RFC 5280 Section 7.2], except that underscores are also +/// allowed. +/// +/// `Eq`, `PartialEq`, etc. are not implemented because name comparison +/// frequently should be done case-insensitively and/or with other caveats that +/// depend on the specific circumstances in which the comparison is done. +/// +/// [RFC 5280 Section 7.2]: https://tools.ietf.org/html/rfc5280#section-7.2 +#[derive(Clone, Copy)] +pub struct DnsNameRef<'a>(&'a [u8]); + +impl AsRef<[u8]> for DnsNameRef<'_> { + #[inline] + fn as_ref(&self) -> &[u8] { + self.0 + } +} + +/// An error indicating that a `DnsNameRef` could not built because the input +/// is not a syntactically-valid DNS Name. +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct InvalidDnsNameError; + +impl core::fmt::Display for InvalidDnsNameError { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + write!(f, "{:?}", self) + } +} + +/// Requires the `std` feature. +#[cfg(feature = "std")] +impl ::std::error::Error for InvalidDnsNameError {} + +impl<'a> DnsNameRef<'a> { + /// Constructs a `DnsNameRef` from the given input if the input is a + /// syntactically-valid DNS name. + pub fn try_from_ascii(dns_name: &'a [u8]) -> Result { + if !is_valid_reference_dns_id(untrusted::Input::from(dns_name)) { + return Err(InvalidDnsNameError); + } + + Ok(Self(dns_name)) + } + + /// Constructs a `DnsNameRef` from the given input if the input is a + /// syntactically-valid DNS name. + pub fn try_from_ascii_str(dns_name: &'a str) -> Result { + Self::try_from_ascii(dns_name.as_bytes()) + } + + /// Constructs a `DnsName` from this `DnsNameRef` + /// + /// Requires the `alloc` feature. + #[cfg(feature = "alloc")] + pub fn to_owned(&self) -> DnsName { + // DnsNameRef is already guaranteed to be valid ASCII, which is a + // subset of UTF-8. + let s: &str = self.clone().into(); + DnsName(s.to_ascii_lowercase()) + } +} + +/// Requires the `alloc` feature. +#[cfg(feature = "alloc")] +impl core::fmt::Debug for DnsNameRef<'_> { + fn fmt(&self, f: &mut core::fmt::Formatter) -> Result<(), core::fmt::Error> { + let lowercase = self.clone().to_owned(); + f.debug_tuple("DnsNameRef").field(&lowercase.0).finish() + } +} + +impl<'a> From> for &'a str { + fn from(DnsNameRef(d): DnsNameRef<'a>) -> Self { + // The unwrap won't fail because DnsNameRefs are guaranteed to be ASCII + // and ASCII is a subset of UTF-8. + core::str::from_utf8(d).unwrap() + } +} + +pub(super) fn presented_id_matches_reference_id( + presented_dns_id: untrusted::Input, + reference_dns_id: untrusted::Input, +) -> Option { + presented_id_matches_reference_id_internal( + presented_dns_id, + IdRole::Reference, + reference_dns_id, + ) +} + +pub(super) fn presented_id_matches_constraint( + presented_dns_id: untrusted::Input, + reference_dns_id: untrusted::Input, +) -> Option { + presented_id_matches_reference_id_internal( + presented_dns_id, + IdRole::NameConstraint, + reference_dns_id, + ) +} + +// We do not distinguish between a syntactically-invalid presented_dns_id and +// one that is syntactically valid but does not match reference_dns_id; in both +// cases, the result is false. +// +// We assume that both presented_dns_id and reference_dns_id are encoded in +// such a way that US-ASCII (7-bit) characters are encoded in one byte and no +// encoding of a non-US-ASCII character contains a code point in the range +// 0-127. For example, UTF-8 is OK but UTF-16 is not. +// +// RFC6125 says that a wildcard label may be of the form *., where +// and/or may be empty. However, NSS requires to be empty, and we +// follow NSS's stricter policy by accepting wildcards only of the form +// *., where may be empty. +// +// An relative presented DNS ID matches both an absolute reference ID and a +// relative reference ID. Absolute presented DNS IDs are not supported: +// +// Presented ID Reference ID Result +// ------------------------------------- +// example.com example.com Match +// example.com. example.com Mismatch +// example.com example.com. Match +// example.com. example.com. Mismatch +// +// There are more subtleties documented inline in the code. +// +// Name constraints /////////////////////////////////////////////////////////// +// +// This is all RFC 5280 has to say about dNSName constraints: +// +// DNS name restrictions are expressed as host.example.com. Any DNS +// name that can be constructed by simply adding zero or more labels to +// the left-hand side of the name satisfies the name constraint. For +// example, www.host.example.com would satisfy the constraint but +// host1.example.com would not. +// +// This lack of specificity has lead to a lot of uncertainty regarding +// subdomain matching. In particular, the following questions have been +// raised and answered: +// +// Q: Does a presented identifier equal (case insensitive) to the name +// constraint match the constraint? For example, does the presented +// ID "host.example.com" match a "host.example.com" constraint? +// A: Yes. RFC5280 says "by simply adding zero or more labels" and this +// is the case of adding zero labels. +// +// Q: When the name constraint does not start with ".", do subdomain +// presented identifiers match it? For example, does the presented +// ID "www.host.example.com" match a "host.example.com" constraint? +// A: Yes. RFC5280 says "by simply adding zero or more labels" and this +// is the case of adding more than zero labels. The example is the +// one from RFC 5280. +// +// Q: When the name constraint does not start with ".", does a +// non-subdomain prefix match it? For example, does "bigfoo.bar.com" +// match "foo.bar.com"? [4] +// A: No. We interpret RFC 5280's language of "adding zero or more labels" +// to mean that whole labels must be prefixed. +// +// (Note that the above three scenarios are the same as the RFC 6265 +// domain matching rules [0].) +// +// Q: Is a name constraint that starts with "." valid, and if so, what +// semantics does it have? For example, does a presented ID of +// "www.example.com" match a constraint of ".example.com"? Does a +// presented ID of "example.com" match a constraint of ".example.com"? +// A: This implementation, NSS[1], and SChannel[2] all support a +// leading ".", but OpenSSL[3] does not yet. Amongst the +// implementations that support it, a leading "." is legal and means +// the same thing as when the "." is omitted, EXCEPT that a +// presented identifier equal (case insensitive) to the name +// constraint is not matched; i.e. presented dNSName identifiers +// must be subdomains. Some CAs in Mozilla's CA program (e.g. HARICA) +// have name constraints with the leading "." in their root +// certificates. The name constraints imposed on DCISS by Mozilla also +// have the it, so supporting this is a requirement for backward +// compatibility, even if it is not yet standardized. So, for example, a +// presented ID of "www.example.com" matches a constraint of +// ".example.com" but a presented ID of "example.com" does not. +// +// Q: Is there a way to prevent subdomain matches? +// A: Yes. +// +// Some people have proposed that dNSName constraints that do not +// start with a "." should be restricted to exact (case insensitive) +// matches. However, such a change of semantics from what RFC5280 +// specifies would be a non-backward-compatible change in the case of +// permittedSubtrees constraints, and it would be a security issue for +// excludedSubtrees constraints. +// +// However, it can be done with a combination of permittedSubtrees and +// excludedSubtrees, e.g. "example.com" in permittedSubtrees and +// ".example.com" in excludedSubtrees. +// +// Q: Are name constraints allowed to be specified as absolute names? +// For example, does a presented ID of "example.com" match a name +// constraint of "example.com." and vice versa. +// A: Absolute names are not supported as presented IDs or name +// constraints. Only reference IDs may be absolute. +// +// Q: Is "" a valid dNSName constraint? If so, what does it mean? +// A: Yes. Any valid presented dNSName can be formed "by simply adding zero +// or more labels to the left-hand side" of "". In particular, an +// excludedSubtrees dNSName constraint of "" forbids all dNSNames. +// +// Q: Is "." a valid dNSName constraint? If so, what does it mean? +// A: No, because absolute names are not allowed (see above). +// +// [0] RFC 6265 (Cookies) Domain Matching rules: +// http://tools.ietf.org/html/rfc6265#section-5.1.3 +// [1] NSS source code: +// https://mxr.mozilla.org/nss/source/lib/certdb/genname.c?rev=2a7348f013cb#1209 +// [2] Description of SChannel's behavior from Microsoft: +// http://www.imc.org/ietf-pkix/mail-archive/msg04668.html +// [3] Proposal to add such support to OpenSSL: +// http://www.mail-archive.com/openssl-dev%40openssl.org/msg36204.html +// https://rt.openssl.org/Ticket/Display.html?id=3562 +// [4] Feedback on the lack of clarify in the definition that never got +// incorporated into the spec: +// https://www.ietf.org/mail-archive/web/pkix/current/msg21192.html +fn presented_id_matches_reference_id_internal( + presented_dns_id: untrusted::Input, + reference_dns_id_role: IdRole, + reference_dns_id: untrusted::Input, +) -> Option { + if !is_valid_dns_id(presented_dns_id, IdRole::Presented, AllowWildcards::Yes) { + return None; + } + + if !is_valid_dns_id(reference_dns_id, reference_dns_id_role, AllowWildcards::No) { + return None; + } + + let mut presented = untrusted::Reader::new(presented_dns_id); + let mut reference = untrusted::Reader::new(reference_dns_id); + + match reference_dns_id_role { + IdRole::Reference => (), + + IdRole::NameConstraint if presented_dns_id.len() > reference_dns_id.len() => { + if reference_dns_id.is_empty() { + // An empty constraint matches everything. + return Some(true); + } + + // If the reference ID starts with a dot then skip the prefix of + // the presented ID and start the comparison at the position of + // that dot. Examples: + // + // Matches Doesn't Match + // ----------------------------------------------------------- + // original presented ID: www.example.com badexample.com + // skipped: www ba + // presented ID w/o prefix: .example.com dexample.com + // reference ID: .example.com .example.com + // + // If the reference ID does not start with a dot then we skip + // the prefix of the presented ID but also verify that the + // prefix ends with a dot. Examples: + // + // Matches Doesn't Match + // ----------------------------------------------------------- + // original presented ID: www.example.com badexample.com + // skipped: www ba + // must be '.': . d + // presented ID w/o prefix: example.com example.com + // reference ID: example.com example.com + // + if reference.peek(b'.') { + if presented + .skip(presented_dns_id.len() - reference_dns_id.len()) + .is_err() + { + unreachable!(); + } + } else { + if presented + .skip(presented_dns_id.len() - reference_dns_id.len() - 1) + .is_err() + { + unreachable!(); + } + if presented.read_byte() != Ok(b'.') { + return Some(false); + } + } + } + + IdRole::NameConstraint => (), + + IdRole::Presented => unreachable!(), + } + + // Only allow wildcard labels that consist only of '*'. + if presented.peek(b'*') { + if presented.skip(1).is_err() { + unreachable!(); + } + + loop { + if reference.read_byte().is_err() { + return Some(false); + } + if reference.peek(b'.') { + break; + } + } + } + + loop { + let presented_byte = match (presented.read_byte(), reference.read_byte()) { + (Ok(p), Ok(r)) if ascii_lower(p) == ascii_lower(r) => p, + _ => { + return Some(false); + } + }; + + if presented.at_end() { + // Don't allow presented IDs to be absolute. + if presented_byte == b'.' { + return None; + } + break; + } + } + + // Allow a relative presented DNS ID to match an absolute reference DNS ID, + // unless we're matching a name constraint. + if !reference.at_end() { + if reference_dns_id_role != IdRole::NameConstraint { + match reference.read_byte() { + Ok(b'.') => (), + _ => { + return Some(false); + } + }; + } + if !reference.at_end() { + return Some(false); + } + } + + assert!(presented.at_end()); + assert!(reference.at_end()); + + Some(true) +} + +#[inline] +fn ascii_lower(b: u8) -> u8 { + match b { + b'A'..=b'Z' => b + b'a' - b'A', + _ => b, + } +} + +#[derive(Clone, Copy, PartialEq)] +enum AllowWildcards { + No, + Yes, +} + +#[derive(Clone, Copy, PartialEq)] +enum IdRole { + Reference, + Presented, + NameConstraint, +} + +fn is_valid_reference_dns_id(hostname: untrusted::Input) -> bool { + is_valid_dns_id(hostname, IdRole::Reference, AllowWildcards::No) +} + +// https://tools.ietf.org/html/rfc5280#section-4.2.1.6: +// +// When the subjectAltName extension contains a domain name system +// label, the domain name MUST be stored in the dNSName (an IA5String). +// The name MUST be in the "preferred name syntax", as specified by +// Section 3.5 of [RFC1034] and as modified by Section 2.1 of +// [RFC1123]. +// +// https://bugzilla.mozilla.org/show_bug.cgi?id=1136616: As an exception to the +// requirement above, underscores are also allowed in names for compatibility. +fn is_valid_dns_id( + hostname: untrusted::Input, + id_role: IdRole, + allow_wildcards: AllowWildcards, +) -> bool { + // https://blogs.msdn.microsoft.com/oldnewthing/20120412-00/?p=7873/ + if hostname.len() > 253 { + return false; + } + + let mut input = untrusted::Reader::new(hostname); + + if id_role == IdRole::NameConstraint && input.at_end() { + return true; + } + + let mut dot_count = 0; + let mut label_length = 0; + let mut label_is_all_numeric = false; + let mut label_ends_with_hyphen = false; + + // Only presented IDs are allowed to have wildcard labels. And, like + // Chromium, be stricter than RFC 6125 requires by insisting that a + // wildcard label consist only of '*'. + let is_wildcard = allow_wildcards == AllowWildcards::Yes && input.peek(b'*'); + let mut is_first_byte = !is_wildcard; + if is_wildcard { + if input.read_byte() != Ok(b'*') || input.read_byte() != Ok(b'.') { + return false; + } + dot_count += 1; + } + + loop { + const MAX_LABEL_LENGTH: usize = 63; + + match input.read_byte() { + Ok(b'-') => { + if label_length == 0 { + return false; // Labels must not start with a hyphen. + } + label_is_all_numeric = false; + label_ends_with_hyphen = true; + label_length += 1; + if label_length > MAX_LABEL_LENGTH { + return false; + } + } + + Ok(b'0'..=b'9') => { + if label_length == 0 { + label_is_all_numeric = true; + } + label_ends_with_hyphen = false; + label_length += 1; + if label_length > MAX_LABEL_LENGTH { + return false; + } + } + + Ok(b'a'..=b'z') | Ok(b'A'..=b'Z') | Ok(b'_') => { + label_is_all_numeric = false; + label_ends_with_hyphen = false; + label_length += 1; + if label_length > MAX_LABEL_LENGTH { + return false; + } + } + + Ok(b'.') => { + dot_count += 1; + if label_length == 0 && (id_role != IdRole::NameConstraint || !is_first_byte) { + return false; + } + if label_ends_with_hyphen { + return false; // Labels must not end with a hyphen. + } + label_length = 0; + } + + _ => { + return false; + } + } + is_first_byte = false; + + if input.at_end() { + break; + } + } + + // Only reference IDs, not presented IDs or name constraints, may be + // absolute. + if label_length == 0 && id_role != IdRole::Reference { + return false; + } + + if label_ends_with_hyphen { + return false; // Labels must not end with a hyphen. + } + + if label_is_all_numeric { + return false; // Last label must not be all numeric. + } + + if is_wildcard { + // If the DNS ID ends with a dot, the last dot signifies an absolute ID. + let label_count = if label_length == 0 { + dot_count + } else { + dot_count + 1 + }; + + // Like NSS, require at least two labels to follow the wildcard label. + // TODO: Allow the TrustDomain to control this on a per-eTLD+1 basis, + // similar to Chromium. Even then, it might be better to still enforce + // that there are at least two labels after the wildcard. + if label_count < 3 { + return false; + } + } + + true +} + +#[cfg(test)] +mod tests { + use super::*; + + const PRESENTED_MATCHES_REFERENCE: &[(&[u8], &[u8], Option)] = &[ + (b"", b"a", None), + (b"a", b"a", Some(true)), + (b"b", b"a", Some(false)), + (b"*.b.a", b"c.b.a", Some(true)), + (b"*.b.a", b"b.a", Some(false)), + (b"*.b.a", b"b.a.", Some(false)), + // Wildcard not in leftmost label + (b"d.c.b.a", b"d.c.b.a", Some(true)), + (b"d.*.b.a", b"d.c.b.a", None), + (b"d.c*.b.a", b"d.c.b.a", None), + (b"d.c*.b.a", b"d.cc.b.a", None), + // case sensitivity + ( + b"abcdefghijklmnopqrstuvwxyz", + b"ABCDEFGHIJKLMNOPQRSTUVWXYZ", + Some(true), + ), + ( + b"ABCDEFGHIJKLMNOPQRSTUVWXYZ", + b"abcdefghijklmnopqrstuvwxyz", + Some(true), + ), + (b"aBc", b"Abc", Some(true)), + // digits + (b"a1", b"a1", Some(true)), + // A trailing dot indicates an absolute name, and absolute names can match + // relative names, and vice-versa. + (b"example", b"example", Some(true)), + (b"example.", b"example.", None), + (b"example", b"example.", Some(true)), + (b"example.", b"example", None), + (b"example.com", b"example.com", Some(true)), + (b"example.com.", b"example.com.", None), + (b"example.com", b"example.com.", Some(true)), + (b"example.com.", b"example.com", None), + (b"example.com..", b"example.com.", None), + (b"example.com..", b"example.com", None), + (b"example.com...", b"example.com.", None), + // xn-- IDN prefix + (b"x*.b.a", b"xa.b.a", None), + (b"x*.b.a", b"xna.b.a", None), + (b"x*.b.a", b"xn-a.b.a", None), + (b"x*.b.a", b"xn--a.b.a", None), + (b"xn*.b.a", b"xn--a.b.a", None), + (b"xn-*.b.a", b"xn--a.b.a", None), + (b"xn--*.b.a", b"xn--a.b.a", None), + (b"xn*.b.a", b"xn--a.b.a", None), + (b"xn-*.b.a", b"xn--a.b.a", None), + (b"xn--*.b.a", b"xn--a.b.a", None), + (b"xn---*.b.a", b"xn--a.b.a", None), + // "*" cannot expand to nothing. + (b"c*.b.a", b"c.b.a", None), + // -------------------------------------------------------------------------- + // The rest of these are test cases adapted from Chromium's + // x509_certificate_unittest.cc. The parameter order is the opposite in + // Chromium's tests. Also, they some tests were modified to fit into this + // framework or due to intentional differences between mozilla::pkix and + // Chromium. + (b"foo.com", b"foo.com", Some(true)), + (b"f", b"f", Some(true)), + (b"i", b"h", Some(false)), + (b"*.foo.com", b"bar.foo.com", Some(true)), + (b"*.test.fr", b"www.test.fr", Some(true)), + (b"*.test.FR", b"wwW.tESt.fr", Some(true)), + (b".uk", b"f.uk", None), + (b"?.bar.foo.com", b"w.bar.foo.com", None), + (b"(www|ftp).foo.com", b"www.foo.com", None), // regex! + (b"www.foo.com\0", b"www.foo.com", None), + (b"www.foo.com\0*.foo.com", b"www.foo.com", None), + (b"ww.house.example", b"www.house.example", Some(false)), + (b"www.test.org", b"test.org", Some(false)), + (b"*.test.org", b"test.org", Some(false)), + (b"*.org", b"test.org", None), + // '*' must be the only character in the wildcard label + (b"w*.bar.foo.com", b"w.bar.foo.com", None), + (b"ww*ww.bar.foo.com", b"www.bar.foo.com", None), + (b"ww*ww.bar.foo.com", b"wwww.bar.foo.com", None), + (b"w*w.bar.foo.com", b"wwww.bar.foo.com", None), + (b"w*w.bar.foo.c0m", b"wwww.bar.foo.com", None), + (b"wa*.bar.foo.com", b"WALLY.bar.foo.com", None), + (b"*Ly.bar.foo.com", b"wally.bar.foo.com", None), + // Chromium does URL decoding of the reference ID, but we don't, and we also + // require that the reference ID is valid, so we can't test these two. + // (b"www.foo.com", b"ww%57.foo.com", Some(true)), + // (b"www&.foo.com", b"www%26.foo.com", Some(true)), + (b"*.test.de", b"www.test.co.jp", Some(false)), + (b"*.jp", b"www.test.co.jp", None), + (b"www.test.co.uk", b"www.test.co.jp", Some(false)), + (b"www.*.co.jp", b"www.test.co.jp", None), + (b"www.bar.foo.com", b"www.bar.foo.com", Some(true)), + (b"*.foo.com", b"www.bar.foo.com", Some(false)), + (b"*.*.foo.com", b"www.bar.foo.com", None), + // Our matcher requires the reference ID to be a valid DNS name, so we cannot + // test this case. + // (b"*.*.bar.foo.com", b"*..bar.foo.com", Some(false)), + (b"www.bath.org", b"www.bath.org", Some(true)), + // Our matcher requires the reference ID to be a valid DNS name, so we cannot + // test these cases. + // DNS_ID_MISMATCH("www.bath.org", ""), + // (b"www.bath.org", b"20.30.40.50", Some(false)), + // (b"www.bath.org", b"66.77.88.99", Some(false)), + + // IDN tests + ( + b"xn--poema-9qae5a.com.br", + b"xn--poema-9qae5a.com.br", + Some(true), + ), + ( + b"*.xn--poema-9qae5a.com.br", + b"www.xn--poema-9qae5a.com.br", + Some(true), + ), + ( + b"*.xn--poema-9qae5a.com.br", + b"xn--poema-9qae5a.com.br", + Some(false), + ), + (b"xn--poema-*.com.br", b"xn--poema-9qae5a.com.br", None), + (b"xn--*-9qae5a.com.br", b"xn--poema-9qae5a.com.br", None), + (b"*--poema-9qae5a.com.br", b"xn--poema-9qae5a.com.br", None), + // The following are adapted from the examples quoted from + // http://tools.ietf.org/html/rfc6125#section-6.4.3 + // (e.g., *.example.com would match foo.example.com but + // not bar.foo.example.com or example.com). + (b"*.example.com", b"foo.example.com", Some(true)), + (b"*.example.com", b"bar.foo.example.com", Some(false)), + (b"*.example.com", b"example.com", Some(false)), + (b"baz*.example.net", b"baz1.example.net", None), + (b"*baz.example.net", b"foobaz.example.net", None), + (b"b*z.example.net", b"buzz.example.net", None), + // Wildcards should not be valid for public registry controlled domains, + // and unknown/unrecognized domains, at least three domain components must + // be present. For mozilla::pkix and NSS, there must always be at least two + // labels after the wildcard label. + (b"*.test.example", b"www.test.example", Some(true)), + (b"*.example.co.uk", b"test.example.co.uk", Some(true)), + (b"*.example", b"test.example", None), + // The result is different than Chromium, because Chromium takes into account + // the additional knowledge it has that "co.uk" is a TLD. mozilla::pkix does + // not know that. + (b"*.co.uk", b"example.co.uk", Some(true)), + (b"*.com", b"foo.com", None), + (b"*.us", b"foo.us", None), + (b"*", b"foo", None), + // IDN variants of wildcards and registry controlled domains. + ( + b"*.xn--poema-9qae5a.com.br", + b"www.xn--poema-9qae5a.com.br", + Some(true), + ), + ( + b"*.example.xn--mgbaam7a8h", + b"test.example.xn--mgbaam7a8h", + Some(true), + ), + // RFC6126 allows this, and NSS accepts it, but Chromium disallows it. + // TODO: File bug against Chromium. + (b"*.com.br", b"xn--poema-9qae5a.com.br", Some(true)), + (b"*.xn--mgbaam7a8h", b"example.xn--mgbaam7a8h", None), + // Wildcards should be permissible for 'private' registry-controlled + // domains. (In mozilla::pkix, we do not know if it is a private registry- + // controlled domain or not.) + (b"*.appspot.com", b"www.appspot.com", Some(true)), + (b"*.s3.amazonaws.com", b"foo.s3.amazonaws.com", Some(true)), + // Multiple wildcards are not valid. + (b"*.*.com", b"foo.example.com", None), + (b"*.bar.*.com", b"foo.bar.example.com", None), + // Absolute vs relative DNS name tests. Although not explicitly specified + // in RFC 6125, absolute reference names (those ending in a .) should + // match either absolute or relative presented names. + // TODO: File errata against RFC 6125 about this. + (b"foo.com.", b"foo.com", None), + (b"foo.com", b"foo.com.", Some(true)), + (b"foo.com.", b"foo.com.", None), + (b"f.", b"f", None), + (b"f", b"f.", Some(true)), + (b"f.", b"f.", None), + (b"*.bar.foo.com.", b"www-3.bar.foo.com", None), + (b"*.bar.foo.com", b"www-3.bar.foo.com.", Some(true)), + (b"*.bar.foo.com.", b"www-3.bar.foo.com.", None), + // We require the reference ID to be a valid DNS name, so we cannot test this + // case. + // (b".", b".", Some(false)), + (b"*.com.", b"example.com", None), + (b"*.com", b"example.com.", None), + (b"*.com.", b"example.com.", None), + (b"*.", b"foo.", None), + (b"*.", b"foo", None), + // The result is different than Chromium because we don't know that co.uk is + // a TLD. + (b"*.co.uk.", b"foo.co.uk", None), + (b"*.co.uk.", b"foo.co.uk.", None), + ]; + + #[test] + fn presented_matches_reference_test() { + for &(presented, reference, expected_result) in PRESENTED_MATCHES_REFERENCE { + let actual_result = presented_id_matches_reference_id( + untrusted::Input::from(presented), + untrusted::Input::from(reference), + ); + assert_eq!( + actual_result, + expected_result, + "presented_dns_id_matches_reference_dns_id(\"{:?}\", IDRole::ReferenceID, \"{:?}\")", + presented, + reference + ); + } + } +} diff --git a/vendor/webpki/src/name/ip_address.rs b/vendor/webpki/src/name/ip_address.rs new file mode 100644 index 00000000..fac53625 --- /dev/null +++ b/vendor/webpki/src/name/ip_address.rs @@ -0,0 +1,64 @@ +// Copyright 2015-2020 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use crate::Error; + +// https://tools.ietf.org/html/rfc5280#section-4.2.1.10 says: +// +// For IPv4 addresses, the iPAddress field of GeneralName MUST contain +// eight (8) octets, encoded in the style of RFC 4632 (CIDR) to represent +// an address range [RFC4632]. For IPv6 addresses, the iPAddress field +// MUST contain 32 octets similarly encoded. For example, a name +// constraint for "class C" subnet 192.0.2.0 is represented as the +// octets C0 00 02 00 FF FF FF 00, representing the CIDR notation +// 192.0.2.0/24 (mask 255.255.255.0). +pub(super) fn presented_id_matches_constraint( + name: untrusted::Input, + constraint: untrusted::Input, +) -> Result { + if name.len() != 4 && name.len() != 16 { + return Err(Error::BadDer); + } + if constraint.len() != 8 && constraint.len() != 32 { + return Err(Error::BadDer); + } + + // an IPv4 address never matches an IPv6 constraint, and vice versa. + if name.len() * 2 != constraint.len() { + return Ok(false); + } + + let (constraint_address, constraint_mask) = constraint.read_all(Error::BadDer, |value| { + let address = value.read_bytes(constraint.len() / 2).unwrap(); + let mask = value.read_bytes(constraint.len() / 2).unwrap(); + Ok((address, mask)) + })?; + + let mut name = untrusted::Reader::new(name); + let mut constraint_address = untrusted::Reader::new(constraint_address); + let mut constraint_mask = untrusted::Reader::new(constraint_mask); + loop { + let name_byte = name.read_byte().unwrap(); + let constraint_address_byte = constraint_address.read_byte().unwrap(); + let constraint_mask_byte = constraint_mask.read_byte().unwrap(); + if ((name_byte ^ constraint_address_byte) & constraint_mask_byte) != 0 { + return Ok(false); + } + if name.at_end() { + break; + } + } + + Ok(true) +} diff --git a/vendor/webpki/src/name/verify.rs b/vendor/webpki/src/name/verify.rs new file mode 100644 index 00000000..6082c19e --- /dev/null +++ b/vendor/webpki/src/name/verify.rs @@ -0,0 +1,328 @@ +// Copyright 2015 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use super::{ + dns_name::{self, DnsNameRef}, + ip_address, +}; +use crate::{ + cert::{Cert, EndEntityOrCa}, + der, Error, +}; + +pub fn verify_cert_dns_name( + cert: &crate::EndEntityCert, + dns_name: DnsNameRef, +) -> Result<(), Error> { + let cert = cert.inner(); + let dns_name = untrusted::Input::from(dns_name.as_ref().as_ref()); + iterate_names( + cert.subject, + cert.subject_alt_name, + Err(Error::CertNotValidForName), + &|name| { + match name { + GeneralName::DnsName(presented_id) => { + match dns_name::presented_id_matches_reference_id(presented_id, dns_name) { + Some(true) => { + return NameIteration::Stop(Ok(())); + } + Some(false) => (), + None => { + return NameIteration::Stop(Err(Error::BadDer)); + } + } + } + _ => (), + } + NameIteration::KeepGoing + }, + ) +} + +// https://tools.ietf.org/html/rfc5280#section-4.2.1.10 +pub fn check_name_constraints( + input: Option<&mut untrusted::Reader>, + subordinate_certs: &Cert, +) -> Result<(), Error> { + let input = match input { + Some(input) => input, + None => { + return Ok(()); + } + }; + + fn parse_subtrees<'b>( + inner: &mut untrusted::Reader<'b>, + subtrees_tag: der::Tag, + ) -> Result>, Error> { + if !inner.peek(subtrees_tag.into()) { + return Ok(None); + } + let subtrees = der::nested(inner, subtrees_tag, Error::BadDer, |tagged| { + der::expect_tag_and_get_value(tagged, der::Tag::Sequence) + })?; + Ok(Some(subtrees)) + } + + let permitted_subtrees = parse_subtrees(input, der::Tag::ContextSpecificConstructed0)?; + let excluded_subtrees = parse_subtrees(input, der::Tag::ContextSpecificConstructed1)?; + + let mut child = subordinate_certs; + loop { + iterate_names(child.subject, child.subject_alt_name, Ok(()), &|name| { + check_presented_id_conforms_to_constraints(name, permitted_subtrees, excluded_subtrees) + })?; + + child = match child.ee_or_ca { + EndEntityOrCa::Ca(child_cert) => child_cert, + EndEntityOrCa::EndEntity => { + break; + } + }; + } + + Ok(()) +} + +fn check_presented_id_conforms_to_constraints( + name: GeneralName, + permitted_subtrees: Option, + excluded_subtrees: Option, +) -> NameIteration { + match check_presented_id_conforms_to_constraints_in_subtree( + name, + Subtrees::PermittedSubtrees, + permitted_subtrees, + ) { + stop @ NameIteration::Stop(..) => { + return stop; + } + NameIteration::KeepGoing => (), + }; + + check_presented_id_conforms_to_constraints_in_subtree( + name, + Subtrees::ExcludedSubtrees, + excluded_subtrees, + ) +} + +#[derive(Clone, Copy)] +enum Subtrees { + PermittedSubtrees, + ExcludedSubtrees, +} + +fn check_presented_id_conforms_to_constraints_in_subtree( + name: GeneralName, + subtrees: Subtrees, + constraints: Option, +) -> NameIteration { + let mut constraints = match constraints { + Some(constraints) => untrusted::Reader::new(constraints), + None => { + return NameIteration::KeepGoing; + } + }; + + let mut has_permitted_subtrees_match = false; + let mut has_permitted_subtrees_mismatch = false; + + loop { + // http://tools.ietf.org/html/rfc5280#section-4.2.1.10: "Within this + // profile, the minimum and maximum fields are not used with any name + // forms, thus, the minimum MUST be zero, and maximum MUST be absent." + // + // Since the default value isn't allowed to be encoded according to the + // DER encoding rules for DEFAULT, this is equivalent to saying that + // neither minimum or maximum must be encoded. + fn general_subtree<'b>( + input: &mut untrusted::Reader<'b>, + ) -> Result, Error> { + let general_subtree = der::expect_tag_and_get_value(input, der::Tag::Sequence)?; + general_subtree.read_all(Error::BadDer, |subtree| general_name(subtree)) + } + + let base = match general_subtree(&mut constraints) { + Ok(base) => base, + Err(err) => { + return NameIteration::Stop(Err(err)); + } + }; + + let matches = match (name, base) { + (GeneralName::DnsName(name), GeneralName::DnsName(base)) => { + dns_name::presented_id_matches_constraint(name, base).ok_or(Error::BadDer) + } + + (GeneralName::DirectoryName(name), GeneralName::DirectoryName(base)) => Ok( + presented_directory_name_matches_constraint(name, base, subtrees), + ), + + (GeneralName::IpAddress(name), GeneralName::IpAddress(base)) => { + ip_address::presented_id_matches_constraint(name, base) + } + + // RFC 4280 says "If a name constraints extension that is marked as + // critical imposes constraints on a particular name form, and an + // instance of that name form appears in the subject field or + // subjectAltName extension of a subsequent certificate, then the + // application MUST either process the constraint or reject the + // certificate." Later, the CABForum agreed to support non-critical + // constraints, so it is important to reject the cert without + // considering whether the name constraint it critical. + (GeneralName::Unsupported(name_tag), GeneralName::Unsupported(base_tag)) + if name_tag == base_tag => + { + Err(Error::NameConstraintViolation) + } + + _ => Ok(false), + }; + + match (subtrees, matches) { + (Subtrees::PermittedSubtrees, Ok(true)) => { + has_permitted_subtrees_match = true; + } + + (Subtrees::PermittedSubtrees, Ok(false)) => { + has_permitted_subtrees_mismatch = true; + } + + (Subtrees::ExcludedSubtrees, Ok(true)) => { + return NameIteration::Stop(Err(Error::NameConstraintViolation)); + } + + (Subtrees::ExcludedSubtrees, Ok(false)) => (), + + (_, Err(err)) => { + return NameIteration::Stop(Err(err)); + } + } + + if constraints.at_end() { + break; + } + } + + if has_permitted_subtrees_mismatch && !has_permitted_subtrees_match { + // If there was any entry of the given type in permittedSubtrees, then + // it required that at least one of them must match. Since none of them + // did, we have a failure. + NameIteration::Stop(Err(Error::NameConstraintViolation)) + } else { + NameIteration::KeepGoing + } +} + +// TODO: document this. +fn presented_directory_name_matches_constraint( + name: untrusted::Input, + constraint: untrusted::Input, + subtrees: Subtrees, +) -> bool { + match subtrees { + Subtrees::PermittedSubtrees => name == constraint, + Subtrees::ExcludedSubtrees => true, + } +} + +#[derive(Clone, Copy)] +enum NameIteration { + KeepGoing, + Stop(Result<(), Error>), +} + +fn iterate_names( + subject: untrusted::Input, + subject_alt_name: Option, + result_if_never_stopped_early: Result<(), Error>, + f: &dyn Fn(GeneralName) -> NameIteration, +) -> Result<(), Error> { + match subject_alt_name { + Some(subject_alt_name) => { + let mut subject_alt_name = untrusted::Reader::new(subject_alt_name); + // https://bugzilla.mozilla.org/show_bug.cgi?id=1143085: An empty + // subjectAltName is not legal, but some certificates have an empty + // subjectAltName. Since we don't support CN-IDs, the certificate + // will be rejected either way, but checking `at_end` before + // attempting to parse the first entry allows us to return a better + // error code. + while !subject_alt_name.at_end() { + let name = general_name(&mut subject_alt_name)?; + match f(name) { + NameIteration::Stop(result) => { + return result; + } + NameIteration::KeepGoing => (), + } + } + } + None => (), + } + + match f(GeneralName::DirectoryName(subject)) { + NameIteration::Stop(result) => result, + NameIteration::KeepGoing => result_if_never_stopped_early, + } +} + +// It is *not* valid to derive `Eq`, `PartialEq, etc. for this type. In +// particular, for the types of `GeneralName`s that we don't understand, we +// don't even store the value. Also, the meaning of a `GeneralName` in a name +// constraint is different than the meaning of the identically-represented +// `GeneralName` in other contexts. +#[derive(Clone, Copy)] +enum GeneralName<'a> { + DnsName(untrusted::Input<'a>), + DirectoryName(untrusted::Input<'a>), + IpAddress(untrusted::Input<'a>), + + // The value is the `tag & ~(der::CONTEXT_SPECIFIC | der::CONSTRUCTED)` so + // that the name constraint checking matches tags regardless of whether + // those bits are set. + Unsupported(u8), +} + +fn general_name<'a>(input: &mut untrusted::Reader<'a>) -> Result, Error> { + use ring::io::der::{CONSTRUCTED, CONTEXT_SPECIFIC}; + #[allow(clippy::identity_op)] + const OTHER_NAME_TAG: u8 = CONTEXT_SPECIFIC | CONSTRUCTED | 0; + const RFC822_NAME_TAG: u8 = CONTEXT_SPECIFIC | 1; + const DNS_NAME_TAG: u8 = CONTEXT_SPECIFIC | 2; + const X400_ADDRESS_TAG: u8 = CONTEXT_SPECIFIC | CONSTRUCTED | 3; + const DIRECTORY_NAME_TAG: u8 = CONTEXT_SPECIFIC | CONSTRUCTED | 4; + const EDI_PARTY_NAME_TAG: u8 = CONTEXT_SPECIFIC | CONSTRUCTED | 5; + const UNIFORM_RESOURCE_IDENTIFIER_TAG: u8 = CONTEXT_SPECIFIC | 6; + const IP_ADDRESS_TAG: u8 = CONTEXT_SPECIFIC | 7; + const REGISTERED_ID_TAG: u8 = CONTEXT_SPECIFIC | 8; + + let (tag, value) = der::read_tag_and_get_value(input)?; + let name = match tag { + DNS_NAME_TAG => GeneralName::DnsName(value), + DIRECTORY_NAME_TAG => GeneralName::DirectoryName(value), + IP_ADDRESS_TAG => GeneralName::IpAddress(value), + + OTHER_NAME_TAG + | RFC822_NAME_TAG + | X400_ADDRESS_TAG + | EDI_PARTY_NAME_TAG + | UNIFORM_RESOURCE_IDENTIFIER_TAG + | REGISTERED_ID_TAG => GeneralName::Unsupported(tag & !(CONTEXT_SPECIFIC | CONSTRUCTED)), + + _ => return Err(Error::BadDer), + }; + Ok(name) +} diff --git a/vendor/webpki/src/signed_data.rs b/vendor/webpki/src/signed_data.rs new file mode 100644 index 00000000..834f9076 --- /dev/null +++ b/vendor/webpki/src/signed_data.rs @@ -0,0 +1,788 @@ +// Copyright 2015 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use crate::{der, Error}; +use ring::signature; + +/// X.509 certificates and related items that are signed are almost always +/// encoded in the format "tbs||signatureAlgorithm||signature". This structure +/// captures this pattern. +pub struct SignedData<'a> { + /// The signed data. This would be `tbsCertificate` in the case of an X.509 + /// certificate, `tbsResponseData` in the case of an OCSP response, and the + /// data nested in the `digitally-signed` construct for TLS 1.2 signed + /// data. + data: untrusted::Input<'a>, + + /// The value of the `AlgorithmIdentifier`. This would be + /// `signatureAlgorithm` in the case of an X.509 certificate or OCSP + /// response. This would have to be synthesized in the case of TLS 1.2 + /// signed data, since TLS does not identify algorithms by ASN.1 OIDs. + pub(crate) algorithm: untrusted::Input<'a>, + + /// The value of the signature. This would be `signature` in an X.509 + /// certificate or OCSP response. This would be the value of + /// `DigitallySigned.signature` for TLS 1.2 signed data. + signature: untrusted::Input<'a>, +} + +/// Parses the concatenation of "tbs||signatureAlgorithm||signature" that +/// is common in the X.509 certificate and OCSP response syntaxes. +/// +/// X.509 Certificates (RFC 5280) look like this: +/// +/// ```ASN.1 +/// Certificate (SEQUENCE) { +/// tbsCertificate TBSCertificate, +/// signatureAlgorithm AlgorithmIdentifier, +/// signatureValue BIT STRING +/// } +/// +/// OCSP responses (RFC 6960) look like this: +/// ```ASN.1 +/// BasicOCSPResponse { +/// tbsResponseData ResponseData, +/// signatureAlgorithm AlgorithmIdentifier, +/// signature BIT STRING, +/// certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL +/// } +/// ``` +/// +/// Note that this function does NOT parse the outermost `SEQUENCE` or the +/// `certs` value. +/// +/// The return value's first component is the contents of +/// `tbsCertificate`/`tbsResponseData`; the second component is a `SignedData` +/// structure that can be passed to `verify_signed_data`. +pub(crate) fn parse_signed_data<'a>( + der: &mut untrusted::Reader<'a>, +) -> Result<(untrusted::Input<'a>, SignedData<'a>), Error> { + let (data, tbs) = + der.read_partial(|input| der::expect_tag_and_get_value(input, der::Tag::Sequence))?; + let algorithm = der::expect_tag_and_get_value(der, der::Tag::Sequence)?; + let signature = der::bit_string_with_no_unused_bits(der)?; + + Ok(( + tbs, + SignedData { + data, + algorithm, + signature, + }, + )) +} + +/// Verify `signed_data` using the public key in the DER-encoded +/// SubjectPublicKeyInfo `spki` using one of the algorithms in +/// `supported_algorithms`. +/// +/// The algorithm is chosen based on the algorithm information encoded in the +/// algorithm identifiers in `public_key` and `signed_data.algorithm`. The +/// ordering of the algorithms in `supported_algorithms` does not really matter, +/// but generally more common algorithms should go first, as it is scanned +/// linearly for matches. +pub(crate) fn verify_signed_data( + supported_algorithms: &[&SignatureAlgorithm], + spki_value: untrusted::Input, + signed_data: &SignedData, +) -> Result<(), Error> { + // We need to verify the signature in `signed_data` using the public key + // in `public_key`. In order to know which *ring* signature verification + // algorithm to use, we need to know the public key algorithm (ECDSA, + // RSA PKCS#1, etc.), the curve (if applicable), and the digest algorithm. + // `signed_data` identifies only the public key algorithm and the digest + // algorithm, and `public_key` identifies only the public key algorithm and + // the curve (if any). Thus, we have to combine information from both + // inputs to figure out which `ring::signature::VerificationAlgorithm` to + // use to verify the signature. + // + // This is all further complicated by the fact that we don't have any + // implicit knowledge about any algorithms or identifiers, since all of + // that information is encoded in `supported_algorithms.` In particular, we + // avoid hard-coding any of that information so that (link-time) dead code + // elimination will work effectively in eliminating code for unused + // algorithms. + + // Parse the signature. + // + let mut found_signature_alg_match = false; + for supported_alg in supported_algorithms.iter().filter(|alg| { + alg.signature_alg_id + .matches_algorithm_id_value(signed_data.algorithm) + }) { + match verify_signature( + supported_alg, + spki_value, + signed_data.data, + signed_data.signature, + ) { + Err(Error::UnsupportedSignatureAlgorithmForPublicKey) => { + found_signature_alg_match = true; + continue; + } + result => { + return result; + } + } + } + + if found_signature_alg_match { + Err(Error::UnsupportedSignatureAlgorithmForPublicKey) + } else { + Err(Error::UnsupportedSignatureAlgorithm) + } +} + +pub(crate) fn verify_signature( + signature_alg: &SignatureAlgorithm, + spki_value: untrusted::Input, + msg: untrusted::Input, + signature: untrusted::Input, +) -> Result<(), Error> { + let spki = parse_spki_value(spki_value)?; + if !signature_alg + .public_key_alg_id + .matches_algorithm_id_value(spki.algorithm_id_value) + { + return Err(Error::UnsupportedSignatureAlgorithmForPublicKey); + } + signature::UnparsedPublicKey::new( + signature_alg.verification_alg, + spki.key_value.as_slice_less_safe(), + ) + .verify(msg.as_slice_less_safe(), signature.as_slice_less_safe()) + .map_err(|_| Error::InvalidSignatureForPublicKey) +} + +struct SubjectPublicKeyInfo<'a> { + algorithm_id_value: untrusted::Input<'a>, + key_value: untrusted::Input<'a>, +} + +// Parse the public key into an algorithm OID, an optional curve OID, and the +// key value. The caller needs to check whether these match the +// `PublicKeyAlgorithm` for the `SignatureAlgorithm` that is matched when +// parsing the signature. +fn parse_spki_value(input: untrusted::Input) -> Result { + input.read_all(Error::BadDer, |input| { + let algorithm_id_value = der::expect_tag_and_get_value(input, der::Tag::Sequence)?; + let key_value = der::bit_string_with_no_unused_bits(input)?; + Ok(SubjectPublicKeyInfo { + algorithm_id_value, + key_value, + }) + }) +} + +/// A signature algorithm. +pub struct SignatureAlgorithm { + public_key_alg_id: AlgorithmIdentifier, + signature_alg_id: AlgorithmIdentifier, + verification_alg: &'static dyn signature::VerificationAlgorithm, +} + +/// ECDSA signatures using the P-256 curve and SHA-256. +pub static ECDSA_P256_SHA256: SignatureAlgorithm = SignatureAlgorithm { + public_key_alg_id: ECDSA_P256, + signature_alg_id: ECDSA_SHA256, + verification_alg: &signature::ECDSA_P256_SHA256_ASN1, +}; + +/// ECDSA signatures using the P-256 curve and SHA-384. Deprecated. +pub static ECDSA_P256_SHA384: SignatureAlgorithm = SignatureAlgorithm { + public_key_alg_id: ECDSA_P256, + signature_alg_id: ECDSA_SHA384, + verification_alg: &signature::ECDSA_P256_SHA384_ASN1, +}; + +/// ECDSA signatures using the P-384 curve and SHA-256. Deprecated. +pub static ECDSA_P384_SHA256: SignatureAlgorithm = SignatureAlgorithm { + public_key_alg_id: ECDSA_P384, + signature_alg_id: ECDSA_SHA256, + verification_alg: &signature::ECDSA_P384_SHA256_ASN1, +}; + +/// ECDSA signatures using the P-384 curve and SHA-384. +pub static ECDSA_P384_SHA384: SignatureAlgorithm = SignatureAlgorithm { + public_key_alg_id: ECDSA_P384, + signature_alg_id: ECDSA_SHA384, + verification_alg: &signature::ECDSA_P384_SHA384_ASN1, +}; + +/// RSA PKCS#1 1.5 signatures using SHA-256 for keys of 2048-8192 bits. +/// +/// Requires the `alloc` feature. +#[cfg(feature = "alloc")] +pub static RSA_PKCS1_2048_8192_SHA256: SignatureAlgorithm = SignatureAlgorithm { + public_key_alg_id: RSA_ENCRYPTION, + signature_alg_id: RSA_PKCS1_SHA256, + verification_alg: &signature::RSA_PKCS1_2048_8192_SHA256, +}; + +/// RSA PKCS#1 1.5 signatures using SHA-384 for keys of 2048-8192 bits. +/// +/// Requires the `alloc` feature. +#[cfg(feature = "alloc")] +pub static RSA_PKCS1_2048_8192_SHA384: SignatureAlgorithm = SignatureAlgorithm { + public_key_alg_id: RSA_ENCRYPTION, + signature_alg_id: RSA_PKCS1_SHA384, + verification_alg: &signature::RSA_PKCS1_2048_8192_SHA384, +}; + +/// RSA PKCS#1 1.5 signatures using SHA-512 for keys of 2048-8192 bits. +/// +/// Requires the `alloc` feature. +#[cfg(feature = "alloc")] +pub static RSA_PKCS1_2048_8192_SHA512: SignatureAlgorithm = SignatureAlgorithm { + public_key_alg_id: RSA_ENCRYPTION, + signature_alg_id: RSA_PKCS1_SHA512, + verification_alg: &signature::RSA_PKCS1_2048_8192_SHA512, +}; + +/// RSA PKCS#1 1.5 signatures using SHA-384 for keys of 3072-8192 bits. +/// +/// Requires the `alloc` feature. +#[cfg(feature = "alloc")] +pub static RSA_PKCS1_3072_8192_SHA384: SignatureAlgorithm = SignatureAlgorithm { + public_key_alg_id: RSA_ENCRYPTION, + signature_alg_id: RSA_PKCS1_SHA384, + verification_alg: &signature::RSA_PKCS1_3072_8192_SHA384, +}; + +/// RSA PSS signatures using SHA-256 for keys of 2048-8192 bits and of +/// type rsaEncryption; see [RFC 4055 Section 1.2]. +/// +/// [RFC 4055 Section 1.2]: https://tools.ietf.org/html/rfc4055#section-1.2 +/// +/// Requires the `alloc` feature. +#[cfg(feature = "alloc")] +pub static RSA_PSS_2048_8192_SHA256_LEGACY_KEY: SignatureAlgorithm = SignatureAlgorithm { + public_key_alg_id: RSA_ENCRYPTION, + signature_alg_id: RSA_PSS_SHA256, + verification_alg: &signature::RSA_PSS_2048_8192_SHA256, +}; + +/// RSA PSS signatures using SHA-384 for keys of 2048-8192 bits and of +/// type rsaEncryption; see [RFC 4055 Section 1.2]. +/// +/// [RFC 4055 Section 1.2]: https://tools.ietf.org/html/rfc4055#section-1.2 +/// +/// Requires the `alloc` feature. +#[cfg(feature = "alloc")] +pub static RSA_PSS_2048_8192_SHA384_LEGACY_KEY: SignatureAlgorithm = SignatureAlgorithm { + public_key_alg_id: RSA_ENCRYPTION, + signature_alg_id: RSA_PSS_SHA384, + verification_alg: &signature::RSA_PSS_2048_8192_SHA384, +}; + +/// RSA PSS signatures using SHA-512 for keys of 2048-8192 bits and of +/// type rsaEncryption; see [RFC 4055 Section 1.2]. +/// +/// [RFC 4055 Section 1.2]: https://tools.ietf.org/html/rfc4055#section-1.2 +/// +/// Requires the `alloc` feature. +#[cfg(feature = "alloc")] +pub static RSA_PSS_2048_8192_SHA512_LEGACY_KEY: SignatureAlgorithm = SignatureAlgorithm { + public_key_alg_id: RSA_ENCRYPTION, + signature_alg_id: RSA_PSS_SHA512, + verification_alg: &signature::RSA_PSS_2048_8192_SHA512, +}; + +/// ED25519 signatures according to RFC 8410 +pub static ED25519: SignatureAlgorithm = SignatureAlgorithm { + public_key_alg_id: ED_25519, + signature_alg_id: ED_25519, + verification_alg: &signature::ED25519, +}; + +struct AlgorithmIdentifier { + asn1_id_value: untrusted::Input<'static>, +} + +impl AlgorithmIdentifier { + fn matches_algorithm_id_value(&self, encoded: untrusted::Input) -> bool { + encoded == self.asn1_id_value + } +} + +// See src/data/README.md. + +const ECDSA_P256: AlgorithmIdentifier = AlgorithmIdentifier { + asn1_id_value: untrusted::Input::from(include_bytes!("data/alg-ecdsa-p256.der")), +}; + +const ECDSA_P384: AlgorithmIdentifier = AlgorithmIdentifier { + asn1_id_value: untrusted::Input::from(include_bytes!("data/alg-ecdsa-p384.der")), +}; + +const ECDSA_SHA256: AlgorithmIdentifier = AlgorithmIdentifier { + asn1_id_value: untrusted::Input::from(include_bytes!("data/alg-ecdsa-sha256.der")), +}; + +const ECDSA_SHA384: AlgorithmIdentifier = AlgorithmIdentifier { + asn1_id_value: untrusted::Input::from(include_bytes!("data/alg-ecdsa-sha384.der")), +}; + +#[cfg(feature = "alloc")] +const RSA_ENCRYPTION: AlgorithmIdentifier = AlgorithmIdentifier { + asn1_id_value: untrusted::Input::from(include_bytes!("data/alg-rsa-encryption.der")), +}; + +#[cfg(feature = "alloc")] +const RSA_PKCS1_SHA256: AlgorithmIdentifier = AlgorithmIdentifier { + asn1_id_value: untrusted::Input::from(include_bytes!("data/alg-rsa-pkcs1-sha256.der")), +}; + +#[cfg(feature = "alloc")] +const RSA_PKCS1_SHA384: AlgorithmIdentifier = AlgorithmIdentifier { + asn1_id_value: untrusted::Input::from(include_bytes!("data/alg-rsa-pkcs1-sha384.der")), +}; + +#[cfg(feature = "alloc")] +const RSA_PKCS1_SHA512: AlgorithmIdentifier = AlgorithmIdentifier { + asn1_id_value: untrusted::Input::from(include_bytes!("data/alg-rsa-pkcs1-sha512.der")), +}; + +#[cfg(feature = "alloc")] +const RSA_PSS_SHA256: AlgorithmIdentifier = AlgorithmIdentifier { + asn1_id_value: untrusted::Input::from(include_bytes!("data/alg-rsa-pss-sha256.der")), +}; + +#[cfg(feature = "alloc")] +const RSA_PSS_SHA384: AlgorithmIdentifier = AlgorithmIdentifier { + asn1_id_value: untrusted::Input::from(include_bytes!("data/alg-rsa-pss-sha384.der")), +}; + +#[cfg(feature = "alloc")] +const RSA_PSS_SHA512: AlgorithmIdentifier = AlgorithmIdentifier { + asn1_id_value: untrusted::Input::from(include_bytes!("data/alg-rsa-pss-sha512.der")), +}; + +const ED_25519: AlgorithmIdentifier = AlgorithmIdentifier { + asn1_id_value: untrusted::Input::from(include_bytes!("data/alg-ed25519.der")), +}; + +#[cfg(test)] +mod tests { + use crate::{der, signed_data, Error}; + use alloc::{string::String, vec::Vec}; + + macro_rules! test_file_bytes { + ( $file_name:expr ) => { + include_bytes!(concat!( + "../third-party/chromium/data/verify_signed_data/", + $file_name + )) + }; + } + + // TODO: The expected results need to be modified for SHA-1 deprecation. + + macro_rules! test_verify_signed_data { + ($fn_name:ident, $file_name:expr, $expected_result:expr) => { + #[test] + fn $fn_name() { + test_verify_signed_data(test_file_bytes!($file_name), $expected_result); + } + }; + } + + fn test_verify_signed_data(file_contents: &[u8], expected_result: Result<(), Error>) { + let tsd = parse_test_signed_data(file_contents); + let spki_value = untrusted::Input::from(&tsd.spki); + let spki_value = spki_value + .read_all(Error::BadDer, |input| { + der::expect_tag_and_get_value(input, der::Tag::Sequence) + }) + .unwrap(); + + // we can't use `parse_signed_data` because it requires `data` + // to be an ASN.1 SEQUENCE, and that isn't the case with + // Chromium's test data. TODO: The test data set should be + // expanded with SEQUENCE-wrapped data so that we can actually + // test `parse_signed_data`. + + let algorithm = untrusted::Input::from(&tsd.algorithm); + let algorithm = algorithm + .read_all(Error::BadDer, |input| { + der::expect_tag_and_get_value(input, der::Tag::Sequence) + }) + .unwrap(); + + let signature = untrusted::Input::from(&tsd.signature); + let signature = signature + .read_all(Error::BadDer, |input| { + der::bit_string_with_no_unused_bits(input) + }) + .unwrap(); + + let signed_data = signed_data::SignedData { + data: untrusted::Input::from(&tsd.data), + algorithm, + signature, + }; + + assert_eq!( + expected_result, + signed_data::verify_signed_data( + SUPPORTED_ALGORITHMS_IN_TESTS, + spki_value, + &signed_data + ) + ); + } + + // XXX: This is testing code that isn't even in this module. + macro_rules! test_verify_signed_data_signature_outer { + ($fn_name:ident, $file_name:expr, $expected_result:expr) => { + #[test] + fn $fn_name() { + test_verify_signed_data_signature_outer( + test_file_bytes!($file_name), + $expected_result, + ); + } + }; + } + + fn test_verify_signed_data_signature_outer(file_contents: &[u8], expected_error: Error) { + let tsd = parse_test_signed_data(file_contents); + let signature = untrusted::Input::from(&tsd.signature); + assert_eq!( + Err(expected_error), + signature.read_all(Error::BadDer, |input| { + der::bit_string_with_no_unused_bits(input) + }) + ); + } + + // XXX: This is testing code that is not even in this module. + macro_rules! test_parse_spki_bad_outer { + ($fn_name:ident, $file_name:expr, $error:expr) => { + #[test] + fn $fn_name() { + test_parse_spki_bad_outer(test_file_bytes!($file_name), $error) + } + }; + } + + fn test_parse_spki_bad_outer(file_contents: &[u8], expected_error: Error) { + let tsd = parse_test_signed_data(file_contents); + let spki = untrusted::Input::from(&tsd.spki); + assert_eq!( + Err(expected_error), + spki.read_all(Error::BadDer, |input| { + der::expect_tag_and_get_value(input, der::Tag::Sequence) + }) + ); + } + + const UNSUPPORTED_SIGNATURE_ALGORITHM_FOR_RSA_KEY: Error = if cfg!(feature = "alloc") { + Error::UnsupportedSignatureAlgorithmForPublicKey + } else { + Error::UnsupportedSignatureAlgorithm + }; + + const INVALID_SIGNATURE_FOR_RSA_KEY: Error = if cfg!(feature = "alloc") { + Error::InvalidSignatureForPublicKey + } else { + Error::UnsupportedSignatureAlgorithm + }; + + const OK_IF_RSA_AVAILABLE: Result<(), Error> = if cfg!(feature = "alloc") { + Ok(()) + } else { + Err(Error::UnsupportedSignatureAlgorithm) + }; + + // XXX: Some of the BadDER tests should have better error codes, maybe? + + // XXX: We should have a variant of this test with a SHA-256 digest that gives + // `Error::UnsupportedSignatureAlgorithmForPublicKey`. + test_verify_signed_data!( + test_ecdsa_prime256v1_sha512_spki_params_null, + "ecdsa-prime256v1-sha512-spki-params-null.pem", + Err(Error::UnsupportedSignatureAlgorithm) + ); + test_verify_signed_data_signature_outer!( + test_ecdsa_prime256v1_sha512_unused_bits_signature, + "ecdsa-prime256v1-sha512-unused-bits-signature.pem", + Error::BadDer + ); + // XXX: We should have a variant of this test with a SHA-256 digest that gives + // `Error::UnsupportedSignatureAlgorithmForPublicKey`. + test_verify_signed_data!( + test_ecdsa_prime256v1_sha512_using_ecdh_key, + "ecdsa-prime256v1-sha512-using-ecdh-key.pem", + Err(Error::UnsupportedSignatureAlgorithm) + ); + // XXX: We should have a variant of this test with a SHA-256 digest that gives + // `Error::UnsupportedSignatureAlgorithmForPublicKey`. + test_verify_signed_data!( + test_ecdsa_prime256v1_sha512_using_ecmqv_key, + "ecdsa-prime256v1-sha512-using-ecmqv-key.pem", + Err(Error::UnsupportedSignatureAlgorithm) + ); + test_verify_signed_data!( + test_ecdsa_prime256v1_sha512_using_rsa_algorithm, + "ecdsa-prime256v1-sha512-using-rsa-algorithm.pem", + Err(UNSUPPORTED_SIGNATURE_ALGORITHM_FOR_RSA_KEY) + ); + // XXX: We should have a variant of this test with a SHA-256 digest that gives + // `Error::InvalidSignatureForPublicKey`. + test_verify_signed_data!( + test_ecdsa_prime256v1_sha512_wrong_signature_format, + "ecdsa-prime256v1-sha512-wrong-signature-format.pem", + Err(Error::UnsupportedSignatureAlgorithm) + ); + // Differs from Chromium because we don't support P-256 with SHA-512. + test_verify_signed_data!( + test_ecdsa_prime256v1_sha512, + "ecdsa-prime256v1-sha512.pem", + Err(Error::UnsupportedSignatureAlgorithm) + ); + test_verify_signed_data!( + test_ecdsa_secp384r1_sha256_corrupted_data, + "ecdsa-secp384r1-sha256-corrupted-data.pem", + Err(Error::InvalidSignatureForPublicKey) + ); + test_verify_signed_data!( + test_ecdsa_secp384r1_sha256, + "ecdsa-secp384r1-sha256.pem", + Ok(()) + ); + test_verify_signed_data!( + test_ecdsa_using_rsa_key, + "ecdsa-using-rsa-key.pem", + Err(Error::UnsupportedSignatureAlgorithmForPublicKey) + ); + + test_parse_spki_bad_outer!( + test_rsa_pkcs1_sha1_bad_key_der_length, + "rsa-pkcs1-sha1-bad-key-der-length.pem", + Error::BadDer + ); + test_parse_spki_bad_outer!( + test_rsa_pkcs1_sha1_bad_key_der_null, + "rsa-pkcs1-sha1-bad-key-der-null.pem", + Error::BadDer + ); + test_verify_signed_data!( + test_rsa_pkcs1_sha1_key_params_absent, + "rsa-pkcs1-sha1-key-params-absent.pem", + Err(Error::UnsupportedSignatureAlgorithm) + ); + test_verify_signed_data!( + test_rsa_pkcs1_sha1_using_pss_key_no_params, + "rsa-pkcs1-sha1-using-pss-key-no-params.pem", + Err(Error::UnsupportedSignatureAlgorithm) + ); + test_verify_signed_data!( + test_rsa_pkcs1_sha1_wrong_algorithm, + "rsa-pkcs1-sha1-wrong-algorithm.pem", + Err(INVALID_SIGNATURE_FOR_RSA_KEY) + ); + test_verify_signed_data!( + test_rsa_pkcs1_sha1, + "rsa-pkcs1-sha1.pem", + Err(Error::UnsupportedSignatureAlgorithm) + ); + // XXX: RSA PKCS#1 with SHA-1 is a supported algorithm, but we only accept + // 2048-8192 bit keys, and this test file is using a 1024 bit key. Thus, + // our results differ from Chromium's. TODO: this means we need a 2048+ bit + // version of this test. + test_verify_signed_data!( + test_rsa_pkcs1_sha256, + "rsa-pkcs1-sha256.pem", + Err(INVALID_SIGNATURE_FOR_RSA_KEY) + ); + test_parse_spki_bad_outer!( + test_rsa_pkcs1_sha256_key_encoded_ber, + "rsa-pkcs1-sha256-key-encoded-ber.pem", + Error::BadDer + ); + test_verify_signed_data!( + test_rsa_pkcs1_sha256_spki_non_null_params, + "rsa-pkcs1-sha256-spki-non-null-params.pem", + Err(UNSUPPORTED_SIGNATURE_ALGORITHM_FOR_RSA_KEY) + ); + test_verify_signed_data!( + test_rsa_pkcs1_sha256_using_ecdsa_algorithm, + "rsa-pkcs1-sha256-using-ecdsa-algorithm.pem", + Err(Error::UnsupportedSignatureAlgorithmForPublicKey) + ); + test_verify_signed_data!( + test_rsa_pkcs1_sha256_using_id_ea_rsa, + "rsa-pkcs1-sha256-using-id-ea-rsa.pem", + Err(UNSUPPORTED_SIGNATURE_ALGORITHM_FOR_RSA_KEY) + ); + + // Chromium's PSS test are for parameter combinations we don't support. + test_verify_signed_data!( + test_rsa_pss_sha1_salt20_using_pss_key_no_params, + "rsa-pss-sha1-salt20-using-pss-key-no-params.pem", + Err(Error::UnsupportedSignatureAlgorithm) + ); + test_verify_signed_data!( + test_rsa_pss_sha1_salt20_using_pss_key_with_null_params, + "rsa-pss-sha1-salt20-using-pss-key-with-null-params.pem", + Err(Error::UnsupportedSignatureAlgorithm) + ); + test_verify_signed_data!( + test_rsa_pss_sha1_salt20, + "rsa-pss-sha1-salt20.pem", + Err(Error::UnsupportedSignatureAlgorithm) + ); + test_verify_signed_data!( + test_rsa_pss_sha1_wrong_salt, + "rsa-pss-sha1-wrong-salt.pem", + Err(Error::UnsupportedSignatureAlgorithm) + ); + test_verify_signed_data!( + test_rsa_pss_sha256_mgf1_sha512_salt33, + "rsa-pss-sha256-mgf1-sha512-salt33.pem", + Err(Error::UnsupportedSignatureAlgorithm) + ); + test_verify_signed_data!( + test_rsa_pss_sha256_salt10_using_pss_key_with_params, + "rsa-pss-sha256-salt10-using-pss-key-with-params.pem", + Err(Error::UnsupportedSignatureAlgorithm) + ); + test_verify_signed_data!( + test_rsa_pss_sha256_salt10_using_pss_key_with_wrong_params, + "rsa-pss-sha256-salt10-using-pss-key-with-wrong-params.pem", + Err(Error::UnsupportedSignatureAlgorithm) + ); + test_verify_signed_data!( + test_rsa_pss_sha256_salt10, + "rsa-pss-sha256-salt10.pem", + Err(Error::UnsupportedSignatureAlgorithm) + ); + + // Our PSS tests that should work. + test_verify_signed_data!( + test_rsa_pss_sha256_salt32, + "ours/rsa-pss-sha256-salt32.pem", + OK_IF_RSA_AVAILABLE + ); + test_verify_signed_data!( + test_rsa_pss_sha384_salt48, + "ours/rsa-pss-sha384-salt48.pem", + OK_IF_RSA_AVAILABLE + ); + test_verify_signed_data!( + test_rsa_pss_sha512_salt64, + "ours/rsa-pss-sha512-salt64.pem", + OK_IF_RSA_AVAILABLE + ); + test_verify_signed_data!( + test_rsa_pss_sha256_salt32_corrupted_data, + "ours/rsa-pss-sha256-salt32-corrupted-data.pem", + Err(INVALID_SIGNATURE_FOR_RSA_KEY) + ); + test_verify_signed_data!( + test_rsa_pss_sha384_salt48_corrupted_data, + "ours/rsa-pss-sha384-salt48-corrupted-data.pem", + Err(INVALID_SIGNATURE_FOR_RSA_KEY) + ); + test_verify_signed_data!( + test_rsa_pss_sha512_salt64_corrupted_data, + "ours/rsa-pss-sha512-salt64-corrupted-data.pem", + Err(INVALID_SIGNATURE_FOR_RSA_KEY) + ); + + test_verify_signed_data!( + test_rsa_using_ec_key, + "rsa-using-ec-key.pem", + Err(UNSUPPORTED_SIGNATURE_ALGORITHM_FOR_RSA_KEY) + ); + test_verify_signed_data!( + test_rsa2048_pkcs1_sha512, + "rsa2048-pkcs1-sha512.pem", + OK_IF_RSA_AVAILABLE + ); + + struct TestSignedData { + spki: Vec, + data: Vec, + algorithm: Vec, + signature: Vec, + } + + fn parse_test_signed_data(file_contents: &[u8]) -> TestSignedData { + let mut lines = core::str::from_utf8(file_contents).unwrap().lines(); + let spki = read_pem_section(&mut lines, "PUBLIC KEY"); + let algorithm = read_pem_section(&mut lines, "ALGORITHM"); + let data = read_pem_section(&mut lines, "DATA"); + let signature = read_pem_section(&mut lines, "SIGNATURE"); + + TestSignedData { + spki, + data, + algorithm, + signature, + } + } + + use alloc::str::Lines; + + fn read_pem_section(lines: &mut Lines, section_name: &str) -> Vec { + // Skip comments and header + let begin_section = format!("-----BEGIN {}-----", section_name); + loop { + let line = lines.next().unwrap(); + if line == begin_section { + break; + } + } + + let mut base64 = String::new(); + + let end_section = format!("-----END {}-----", section_name); + loop { + let line = lines.next().unwrap(); + if line == end_section { + break; + } + base64.push_str(&line); + } + + base64::decode(&base64).unwrap() + } + + static SUPPORTED_ALGORITHMS_IN_TESTS: &[&signed_data::SignatureAlgorithm] = &[ + // Reasonable algorithms. + &signed_data::ECDSA_P256_SHA256, + &signed_data::ECDSA_P384_SHA384, + &signed_data::ED25519, + #[cfg(feature = "alloc")] + &signed_data::RSA_PKCS1_2048_8192_SHA256, + #[cfg(feature = "alloc")] + &signed_data::RSA_PKCS1_2048_8192_SHA384, + #[cfg(feature = "alloc")] + &signed_data::RSA_PKCS1_2048_8192_SHA512, + #[cfg(feature = "alloc")] + &signed_data::RSA_PKCS1_3072_8192_SHA384, + #[cfg(feature = "alloc")] + &signed_data::RSA_PSS_2048_8192_SHA256_LEGACY_KEY, + #[cfg(feature = "alloc")] + &signed_data::RSA_PSS_2048_8192_SHA384_LEGACY_KEY, + #[cfg(feature = "alloc")] + &signed_data::RSA_PSS_2048_8192_SHA512_LEGACY_KEY, + // Algorithms deprecated because they are annoying (P-521) or because + // they are nonsensical combinations. + &signed_data::ECDSA_P256_SHA384, // Truncates digest. + &signed_data::ECDSA_P384_SHA256, // Digest is unnecessarily short. + ]; +} diff --git a/vendor/webpki/src/time.rs b/vendor/webpki/src/time.rs new file mode 100644 index 00000000..0457cae7 --- /dev/null +++ b/vendor/webpki/src/time.rs @@ -0,0 +1,65 @@ +// Copyright 2015-2016 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +//! Conversions into the library's time type. + +/// The time type. +/// +/// Internally this is merely a UNIX timestamp: a count of non-leap +/// seconds since the start of 1970. This type exists to assist +/// unit-of-measure correctness. +#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)] +pub struct Time(u64); + +impl Time { + /// Create a `webpki::Time` from a unix timestamp. + /// + /// It is usually better to use the less error-prone + /// `webpki::Time::try_from(time: std::time::SystemTime)` instead when + /// `std::time::SystemTime` is available (when `#![no_std]` isn't being + /// used). + #[allow(clippy::must_use_candidate)] + pub fn from_seconds_since_unix_epoch(secs: u64) -> Self { + Self(secs) + } +} + +#[cfg(feature = "std")] +impl core::convert::TryFrom for Time { + type Error = std::time::SystemTimeError; + + /// Create a `webpki::Time` from a `std::time::SystemTime`. + /// + /// # Example: + /// + /// Construct a `webpki::Time` from the current system time: + /// + /// ``` + /// # extern crate ring; + /// # extern crate webpki; + /// # + /// #![cfg(feature = "std")] + /// use std::{convert::TryFrom, time::{SystemTime, SystemTimeError}}; + /// + /// # fn foo() -> Result<(), SystemTimeError> { + /// let time = webpki::Time::try_from(SystemTime::now())?; + /// # Ok(()) + /// # } + /// ``` + fn try_from(value: std::time::SystemTime) -> Result { + value + .duration_since(std::time::UNIX_EPOCH) + .map(|d| Self::from_seconds_since_unix_epoch(d.as_secs())) + } +} diff --git a/vendor/webpki/src/trust_anchor.rs b/vendor/webpki/src/trust_anchor.rs new file mode 100644 index 00000000..0ac2806e --- /dev/null +++ b/vendor/webpki/src/trust_anchor.rs @@ -0,0 +1,119 @@ +use crate::cert::{certificate_serial_number, Cert}; +use crate::{ + cert::{parse_cert_internal, EndEntityOrCa}, + der, Error, +}; + +/// A trust anchor (a.k.a. root CA). +/// +/// Traditionally, certificate verification libraries have represented trust +/// anchors as full X.509 root certificates. However, those certificates +/// contain a lot more data than is needed for verifying certificates. The +/// `TrustAnchor` representation allows an application to store just the +/// essential elements of trust anchors. The `webpki::trust_anchor_util` module +/// provides functions for converting X.509 certificates to to the minimized +/// `TrustAnchor` representation, either at runtime or in a build script. +#[derive(Debug)] +pub struct TrustAnchor<'a> { + /// The value of the `subject` field of the trust anchor. + pub subject: &'a [u8], + + /// The value of the `subjectPublicKeyInfo` field of the trust anchor. + pub spki: &'a [u8], + + /// The value of a DER-encoded NameConstraints, containing name + /// constraints to apply to the trust anchor, if any. + pub name_constraints: Option<&'a [u8]>, +} + +/// Trust anchors which may be used for authenticating servers. +#[derive(Debug)] +pub struct TlsServerTrustAnchors<'a>(pub &'a [TrustAnchor<'a>]); + +/// Trust anchors which may be used for authenticating clients. +#[derive(Debug)] +pub struct TlsClientTrustAnchors<'a>(pub &'a [TrustAnchor<'a>]); + +impl<'a> TrustAnchor<'a> { + /// Interprets the given DER-encoded certificate as a `TrustAnchor`. The + /// certificate is not validated. In particular, there is no check that the + /// certificate is self-signed or even that the certificate has the cA basic + /// constraint. + pub fn try_from_cert_der(cert_der: &'a [u8]) -> Result { + let cert_der = untrusted::Input::from(cert_der); + + // XXX: `EndEntityOrCA::EndEntity` is used instead of `EndEntityOrCA::CA` + // because we don't have a reference to a child cert, which is needed for + // `EndEntityOrCA::CA`. For this purpose, it doesn't matter. + // + // v1 certificates will result in `Error::BadDER` because `parse_cert` will + // expect a version field that isn't there. In that case, try to parse the + // certificate using a special parser for v1 certificates. Notably, that + // parser doesn't allow extensions, so there's no need to worry about + // embedded name constraints in a v1 certificate. + match parse_cert_internal( + cert_der, + EndEntityOrCa::EndEntity, + possibly_invalid_certificate_serial_number, + ) { + Ok(cert) => Ok(Self::from(cert)), + Err(Error::UnsupportedCertVersion) => parse_cert_v1(cert_der).or(Err(Error::BadDer)), + Err(err) => Err(err), + } + } +} + +fn possibly_invalid_certificate_serial_number(input: &mut untrusted::Reader) -> Result<(), Error> { + // https://tools.ietf.org/html/rfc5280#section-4.1.2.2: + // * Conforming CAs MUST NOT use serialNumber values longer than 20 octets." + // * "The serial number MUST be a positive integer [...]" + // + // However, we don't enforce these constraints on trust anchors, as there + // are widely-deployed trust anchors that violate these constraints. + skip(input, der::Tag::Integer) +} + +impl<'a> From> for TrustAnchor<'a> { + fn from(cert: Cert<'a>) -> Self { + Self { + subject: cert.subject.as_slice_less_safe(), + spki: cert.spki.value().as_slice_less_safe(), + name_constraints: cert.name_constraints.map(|nc| nc.as_slice_less_safe()), + } + } +} + +/// Parses a v1 certificate directly into a TrustAnchor. +fn parse_cert_v1(cert_der: untrusted::Input) -> Result { + // X.509 Certificate: https://tools.ietf.org/html/rfc5280#section-4.1. + cert_der.read_all(Error::BadDer, |cert_der| { + der::nested(cert_der, der::Tag::Sequence, Error::BadDer, |cert_der| { + let anchor = der::nested(cert_der, der::Tag::Sequence, Error::BadDer, |tbs| { + // The version number field does not appear in v1 certificates. + certificate_serial_number(tbs)?; + + skip(tbs, der::Tag::Sequence)?; // signature. + skip(tbs, der::Tag::Sequence)?; // issuer. + skip(tbs, der::Tag::Sequence)?; // validity. + let subject = der::expect_tag_and_get_value(tbs, der::Tag::Sequence)?; + let spki = der::expect_tag_and_get_value(tbs, der::Tag::Sequence)?; + + Ok(TrustAnchor { + subject: subject.as_slice_less_safe(), + spki: spki.as_slice_less_safe(), + name_constraints: None, + }) + }); + + // read and discard signatureAlgorithm + signature + skip(cert_der, der::Tag::Sequence)?; + skip(cert_der, der::Tag::BitString)?; + + anchor + }) + }) +} + +fn skip(input: &mut untrusted::Reader, tag: der::Tag) -> Result<(), Error> { + der::expect_tag_and_get_value(input, tag).map(|_| ()) +} diff --git a/vendor/webpki/src/verify_cert.rs b/vendor/webpki/src/verify_cert.rs new file mode 100644 index 00000000..c68e6cf2 --- /dev/null +++ b/vendor/webpki/src/verify_cert.rs @@ -0,0 +1,352 @@ +// Copyright 2015 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use crate::{ + cert::{self, Cert, EndEntityOrCa}, + der, name, signed_data, time, Error, SignatureAlgorithm, TrustAnchor, +}; + +pub fn build_chain( + required_eku_if_present: KeyPurposeId, + supported_sig_algs: &[&SignatureAlgorithm], + trust_anchors: &[TrustAnchor], + intermediate_certs: &[&[u8]], + cert: &Cert, + time: time::Time, + sub_ca_count: usize, +) -> Result<(), Error> { + let used_as_ca = used_as_ca(&cert.ee_or_ca); + + check_issuer_independent_properties( + cert, + time, + used_as_ca, + sub_ca_count, + required_eku_if_present, + )?; + + // TODO: HPKP checks. + + match used_as_ca { + UsedAsCa::Yes => { + const MAX_SUB_CA_COUNT: usize = 6; + + if sub_ca_count >= MAX_SUB_CA_COUNT { + return Err(Error::UnknownIssuer); + } + } + UsedAsCa::No => { + assert_eq!(0, sub_ca_count); + } + } + + // TODO: revocation. + + match loop_while_non_fatal_error(trust_anchors, |trust_anchor: &TrustAnchor| { + let trust_anchor_subject = untrusted::Input::from(trust_anchor.subject); + if cert.issuer != trust_anchor_subject { + return Err(Error::UnknownIssuer); + } + + let name_constraints = trust_anchor.name_constraints.map(untrusted::Input::from); + + untrusted::read_all_optional(name_constraints, Error::BadDer, |value| { + name::check_name_constraints(value, &cert) + })?; + + let trust_anchor_spki = untrusted::Input::from(trust_anchor.spki); + + // TODO: check_distrust(trust_anchor_subject, trust_anchor_spki)?; + + check_signatures(supported_sig_algs, cert, trust_anchor_spki)?; + + Ok(()) + }) { + Ok(()) => { + return Ok(()); + } + Err(..) => { + // If the error is not fatal, then keep going. + } + } + + loop_while_non_fatal_error(intermediate_certs, |cert_der| { + let potential_issuer = + cert::parse_cert(untrusted::Input::from(*cert_der), EndEntityOrCa::Ca(&cert))?; + + if potential_issuer.subject != cert.issuer { + return Err(Error::UnknownIssuer); + } + + // Prevent loops; see RFC 4158 section 5.2. + let mut prev = cert; + loop { + if potential_issuer.spki.value() == prev.spki.value() + && potential_issuer.subject == prev.subject + { + return Err(Error::UnknownIssuer); + } + match &prev.ee_or_ca { + EndEntityOrCa::EndEntity => { + break; + } + EndEntityOrCa::Ca(child_cert) => { + prev = child_cert; + } + } + } + + untrusted::read_all_optional(potential_issuer.name_constraints, Error::BadDer, |value| { + name::check_name_constraints(value, &cert) + })?; + + let next_sub_ca_count = match used_as_ca { + UsedAsCa::No => sub_ca_count, + UsedAsCa::Yes => sub_ca_count + 1, + }; + + build_chain( + required_eku_if_present, + supported_sig_algs, + trust_anchors, + intermediate_certs, + &potential_issuer, + time, + next_sub_ca_count, + ) + }) +} + +fn check_signatures( + supported_sig_algs: &[&SignatureAlgorithm], + cert_chain: &Cert, + trust_anchor_key: untrusted::Input, +) -> Result<(), Error> { + let mut spki_value = trust_anchor_key; + let mut cert = cert_chain; + loop { + signed_data::verify_signed_data(supported_sig_algs, spki_value, &cert.signed_data)?; + + // TODO: check revocation + + match &cert.ee_or_ca { + EndEntityOrCa::Ca(child_cert) => { + spki_value = cert.spki.value(); + cert = child_cert; + } + EndEntityOrCa::EndEntity => { + break; + } + } + } + + Ok(()) +} + +fn check_issuer_independent_properties( + cert: &Cert, + time: time::Time, + used_as_ca: UsedAsCa, + sub_ca_count: usize, + required_eku_if_present: KeyPurposeId, +) -> Result<(), Error> { + // TODO: check_distrust(trust_anchor_subject, trust_anchor_spki)?; + // TODO: Check signature algorithm like mozilla::pkix. + // TODO: Check SPKI like mozilla::pkix. + // TODO: check for active distrust like mozilla::pkix. + + // See the comment in `remember_extension` for why we don't check the + // KeyUsage extension. + + cert.validity + .read_all(Error::BadDer, |value| check_validity(value, time))?; + untrusted::read_all_optional(cert.basic_constraints, Error::BadDer, |value| { + check_basic_constraints(value, used_as_ca, sub_ca_count) + })?; + untrusted::read_all_optional(cert.eku, Error::BadDer, |value| { + check_eku(value, required_eku_if_present) + })?; + + Ok(()) +} + +// https://tools.ietf.org/html/rfc5280#section-4.1.2.5 +fn check_validity(input: &mut untrusted::Reader, time: time::Time) -> Result<(), Error> { + let not_before = der::time_choice(input)?; + let not_after = der::time_choice(input)?; + + if not_before > not_after { + return Err(Error::InvalidCertValidity); + } + if time < not_before { + return Err(Error::CertNotValidYet); + } + if time > not_after { + return Err(Error::CertExpired); + } + + // TODO: mozilla::pkix allows the TrustDomain to check not_before and + // not_after, to enforce things like a maximum validity period. We should + // do something similar. + + Ok(()) +} + +#[derive(Clone, Copy)] +enum UsedAsCa { + Yes, + No, +} + +fn used_as_ca(ee_or_ca: &EndEntityOrCa) -> UsedAsCa { + match ee_or_ca { + EndEntityOrCa::EndEntity => UsedAsCa::No, + EndEntityOrCa::Ca(..) => UsedAsCa::Yes, + } +} + +// https://tools.ietf.org/html/rfc5280#section-4.2.1.9 +fn check_basic_constraints( + input: Option<&mut untrusted::Reader>, + used_as_ca: UsedAsCa, + sub_ca_count: usize, +) -> Result<(), Error> { + let (is_ca, path_len_constraint) = match input { + Some(input) => { + let is_ca = der::optional_boolean(input)?; + + // https://bugzilla.mozilla.org/show_bug.cgi?id=985025: RFC 5280 + // says that a certificate must not have pathLenConstraint unless + // it is a CA certificate, but some real-world end-entity + // certificates have pathLenConstraint. + let path_len_constraint = if !input.at_end() { + let value = der::small_nonnegative_integer(input)?; + Some(usize::from(value)) + } else { + None + }; + + (is_ca, path_len_constraint) + } + None => (false, None), + }; + + match (used_as_ca, is_ca, path_len_constraint) { + (UsedAsCa::No, true, _) => Err(Error::CaUsedAsEndEntity), + (UsedAsCa::Yes, false, _) => Err(Error::EndEntityUsedAsCa), + (UsedAsCa::Yes, true, Some(len)) if sub_ca_count > len => { + Err(Error::PathLenConstraintViolated) + } + _ => Ok(()), + } +} + +#[derive(Clone, Copy)] +pub struct KeyPurposeId { + oid_value: untrusted::Input<'static>, +} + +// id-pkix OBJECT IDENTIFIER ::= { 1 3 6 1 5 5 7 } +// id-kp OBJECT IDENTIFIER ::= { id-pkix 3 } + +// id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 } +#[allow(clippy::identity_op)] // TODO: Make this clearer +pub static EKU_SERVER_AUTH: KeyPurposeId = KeyPurposeId { + oid_value: untrusted::Input::from(&[(40 * 1) + 3, 6, 1, 5, 5, 7, 3, 1]), +}; + +// id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 } +#[allow(clippy::identity_op)] // TODO: Make this clearer +pub static EKU_CLIENT_AUTH: KeyPurposeId = KeyPurposeId { + oid_value: untrusted::Input::from(&[(40 * 1) + 3, 6, 1, 5, 5, 7, 3, 2]), +}; + +// id-kp-OCSPSigning OBJECT IDENTIFIER ::= { id-kp 9 } +#[allow(clippy::identity_op)] // TODO: Make this clearer +pub static EKU_OCSP_SIGNING: KeyPurposeId = KeyPurposeId { + oid_value: untrusted::Input::from(&[(40 * 1) + 3, 6, 1, 5, 5, 7, 3, 9]), +}; + +// https://tools.ietf.org/html/rfc5280#section-4.2.1.12 +// +// Notable Differences from RFC 5280: +// +// * We follow the convention established by Microsoft's implementation and +// mozilla::pkix of treating the EKU extension in a CA certificate as a +// restriction on the allowable EKUs for certificates issued by that CA. RFC +// 5280 doesn't prescribe any meaning to the EKU extension when a certificate +// is being used as a CA certificate. +// +// * We do not recognize anyExtendedKeyUsage. NSS and mozilla::pkix do not +// recognize it either. +// +// * We treat id-Netscape-stepUp as being equivalent to id-kp-serverAuth in CA +// certificates (only). Comodo has issued certificates that require this +// behavior that don't expire until June 2020. See https://bugzilla.mozilla.org/show_bug.cgi?id=982292. +fn check_eku( + input: Option<&mut untrusted::Reader>, + required_eku_if_present: KeyPurposeId, +) -> Result<(), Error> { + match input { + Some(input) => { + loop { + let value = der::expect_tag_and_get_value(input, der::Tag::OID)?; + if value == required_eku_if_present.oid_value { + input.skip_to_end(); + break; + } + if input.at_end() { + return Err(Error::RequiredEkuNotFound); + } + } + Ok(()) + } + None => { + // http://tools.ietf.org/html/rfc6960#section-4.2.2.2: + // "OCSP signing delegation SHALL be designated by the inclusion of + // id-kp-OCSPSigning in an extended key usage certificate extension + // included in the OCSP response signer's certificate." + // + // A missing EKU extension generally means "any EKU", but it is + // important that id-kp-OCSPSigning is explicit so that a normal + // end-entity certificate isn't able to sign trusted OCSP responses + // for itself or for other certificates issued by its issuing CA. + if required_eku_if_present.oid_value == EKU_OCSP_SIGNING.oid_value { + return Err(Error::RequiredEkuNotFound); + } + + Ok(()) + } + } +} + +fn loop_while_non_fatal_error( + values: V, + f: impl Fn(V::Item) -> Result<(), Error>, +) -> Result<(), Error> +where + V: IntoIterator, +{ + for v in values { + match f(v) { + Ok(()) => { + return Ok(()); + } + Err(..) => { + // If the error is not fatal, then keep going. + } + } + } + Err(Error::UnknownIssuer) +} diff --git a/vendor/webpki/tests/cert_v1.der b/vendor/webpki/tests/cert_v1.der new file mode 100644 index 00000000..a603733a Binary files /dev/null and b/vendor/webpki/tests/cert_v1.der differ diff --git a/vendor/webpki/tests/cert_v1_unsupported.rs b/vendor/webpki/tests/cert_v1_unsupported.rs new file mode 100644 index 00000000..d2c71323 --- /dev/null +++ b/vendor/webpki/tests/cert_v1_unsupported.rs @@ -0,0 +1,27 @@ +// Copyright 2021 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use core::convert::TryFrom; + +#[test] +fn test_cert_v1_unsupported() { + // Check with `openssl x509 -text -noout -in cert_v1.der -inform DER` + // to verify this is a correct version 1 certificate. + const CERT_V1_DER: &[u8] = include_bytes!("cert_v1.der"); + + assert_eq!( + Some(webpki::Error::UnsupportedCertVersion), + webpki::EndEntityCert::try_from(CERT_V1_DER).err() + ); +} diff --git a/vendor/webpki/tests/cert_without_extensions.der b/vendor/webpki/tests/cert_without_extensions.der new file mode 100644 index 00000000..458b2bc3 Binary files /dev/null and b/vendor/webpki/tests/cert_without_extensions.der differ diff --git a/vendor/webpki/tests/cert_without_extensions.rs b/vendor/webpki/tests/cert_without_extensions.rs new file mode 100644 index 00000000..075f331f --- /dev/null +++ b/vendor/webpki/tests/cert_without_extensions.rs @@ -0,0 +1,27 @@ +// Copyright 2021 Brian Smith. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use core::convert::TryFrom; + +#[test] +fn cert_without_extensions_test() { + // Check the certificate is valid with + // `openssl x509 -in cert_without_extensions.der -inform DER -text -noout` + const CERT_WITHOUT_EXTENSIONS_DER: &[u8] = include_bytes!("cert_without_extensions.der"); + + assert_eq!( + Some(webpki::Error::MissingOrMalformedExtensions), + webpki::EndEntityCert::try_from(CERT_WITHOUT_EXTENSIONS_DER).err() + ); +} diff --git a/vendor/webpki/tests/dns_name_tests.rs b/vendor/webpki/tests/dns_name_tests.rs new file mode 100644 index 00000000..b3a3adc4 --- /dev/null +++ b/vendor/webpki/tests/dns_name_tests.rs @@ -0,0 +1,408 @@ +// Copyright 2014-2017 Brian Smith. + +// (name, is_valid) +static DNS_NAME_VALIDITY: &[(&[u8], bool)] = &[ + (b"a", true), + (b"a.b", true), + (b"a.b.c", true), + (b"a.b.c.d", true), + + // Hyphens, one component. + (b"-", false), + (b"-a", false), + (b"a-", false), + (b"a-b", true), + + // Hyphens, last component. + (b"a.-", false), + (b"a.-a", false), + (b"a.a-", false), + (b"a.a-b", true), + + // Hyphens, not last component. + (b"-.a", false), + (b"-a.a", false), + (b"a-.a", false), + (b"a-b.a", true), + + // Underscores, one component. + (b"_", true), // TODO: Perhaps this should be rejected for '_' being sole character?. + (b"_a", true), // TODO: Perhaps this should be rejected for '_' being 1st? + (b"a_", true), + (b"a_b", true), + + // Underscores, last component. + (b"a._", true), // TODO: Perhaps this should be rejected for '_' being sole character?. + (b"a._a", true), // TODO: Perhaps this should be rejected for '_' being 1st? + (b"a.a_", true), + (b"a.a_b", true), + + // Underscores, not last component. + (b"_.a", true), // TODO: Perhaps this should be rejected for '_' being sole character?. + (b"_a.a", true), + (b"a_.a", true), + (b"a_b.a", true), + + // empty labels + (b"", false), + (b".", false), + (b"a", true), + (b".a", false), + (b".a.b", false), + (b"..a", false), + (b"a..b", false), + (b"a...b", false), + (b"a..b.c", false), + (b"a.b..c", false), + (b".a.b.c.", false), + + // absolute names + (b"a.", true), + (b"a.b.", true), + (b"a.b.c.", true), + + // absolute names with empty label at end + (b"a..", false), + (b"a.b..", false), + (b"a.b.c..", false), + (b"a...", false), + + // Punycode + (b"xn--", false), + (b"xn--.", false), + (b"xn--.a", false), + (b"a.xn--", false), + (b"a.xn--.", false), + (b"a.xn--.b", false), + (b"a.xn--.b", false), + (b"a.xn--\0.b", false), + (b"a.xn--a.b", true), + (b"xn--a", true), + (b"a.xn--a", true), + (b"a.xn--a.a", true), + (b"\xc4\x95.com", false), // UTF-8 Ä• + (b"xn--jea.com", true), // punycode Ä• + (b"xn--\xc4\x95.com", false), // UTF-8 Ä•, malformed punycode + UTF-8 mashup + + // Surprising punycode + (b"xn--google.com", true), // 䕮䕵䕶䕱.com + (b"xn--citibank.com", true), // å²å²Šå²Šå²…岉岎.com + (b"xn--cnn.com", true), // ä¾.com + (b"a.xn--cnn", true), // a.ä¾ + (b"a.xn--cnn.com", true), // a.ä¾.com + + (b"1.2.3.4", false), // IPv4 address + (b"1::2", false), // IPV6 address + + // whitespace not allowed anywhere. + (b" ", false), + (b" a", false), + (b"a ", false), + (b"a b", false), + (b"a.b 1", false), + (b"a\t", false), + + // Nulls not allowed + (b"\0", false), + (b"a\0", false), + (b"example.org\0.example.com", false), // Hi Moxie! + (b"\0a", false), + (b"xn--\0", false), + + // Allowed character set + (b"a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z", true), + (b"A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z", true), + (b"0.1.2.3.4.5.6.7.8.9.a", true), // "a" needed to avoid numeric last label + (b"a-b", true), // hyphen (a label cannot start or end with a hyphen) + + // An invalid character in various positions + (b"!", false), + (b"!a", false), + (b"a!", false), + (b"a!b", false), + (b"a.!", false), + (b"a.a!", false), + (b"a.!a", false), + (b"a.a!a", false), + (b"a.!a.a", false), + (b"a.a!.a", false), + (b"a.a!a.a", false), + + // Various other invalid characters + (b"a!", false), + (b"a@", false), + (b"a#", false), + (b"a$", false), + (b"a%", false), + (b"a^", false), + (b"a&", false), + (b"a*", false), + (b"a(", false), + (b"a)", false), + + // last label can't be fully numeric + (b"1", false), + (b"a.1", false), + + // other labels can be fully numeric + (b"1.a", true), + (b"1.2.a", true), + (b"1.2.3.a", true), + + // last label can be *partly* numeric + (b"1a", true), + (b"1.1a", true), + (b"1-1", true), + (b"a.1-1", true), + (b"a.1-a", true), + + // labels cannot start with a hyphen + (b"-", false), + (b"-1", false), + + // labels cannot end with a hyphen + (b"1-", false), + (b"1-.a", false), + (b"a-", false), + (b"a-.a", false), + (b"a.1-.a", false), + (b"a.a-.a", false), + + // labels can contain a hyphen in the middle + (b"a-b", true), + (b"1-2", true), + (b"a.a-1", true), + + // multiple consecutive hyphens allowed + (b"a--1", true), + (b"1---a", true), + (b"a-----------------b", true), + + // Wildcard specifications are not valid reference names. + (b"*.a", false), + (b"a*", false), + (b"a*.", false), + (b"a*.a", false), + (b"a*.a.", false), + (b"*.a.b", false), + (b"*.a.b.", false), + (b"a*.b.c", false), + (b"*.a.b.c", false), + (b"a*.b.c.d", false), + + // Multiple wildcards. + (b"a**.b.c", false), + (b"a*b*.c.d", false), + (b"a*.b*.c", false), + + // Wildcards not in the first label. + (b"a.*", false), + (b"a.*.b", false), + (b"a.b.*", false), + (b"a.b*.c", false), + (b"*.b*.c", false), + (b".*.a.b", false), + (b".a*.b.c", false), + + // Wildcards not at the end of the first label. + (b"*a.b.c", false), + (b"a*b.c.d", false), + + // Wildcards and IDNA prefix. + (b"x*.a.b", false), + (b"xn*.a.b", false), + (b"xn-*.a.b", false), + (b"xn--*.a.b", false), + (b"xn--w*.a.b", false), + + // Redacted labels from RFC6962bis draft 4 + // https://tools.ietf.org/html/draft-ietf-trans-rfc6962-bis-04#section-3.2.2 + (b"(PRIVATE).foo", false), + + // maximum label length is 63 characters + (b"123456789012345678901234567890123456789012345678901234567890abc", true), + (b"123456789012345678901234567890123456789012345678901234567890abcd", false), + + // maximum total length is 253 characters + (b"12345678901234567890123456789012345678901234567890.12345678901234567890123456789012345678901234567890.12345678901234567890123456789012345678901234567890.12345678901234567890123456789012345678901234567890.123456789012345678901234567890123456789012345678a", + true), + (b"12345678901234567890123456789012345678901234567890.12345678901234567890123456789012345678901234567890.12345678901234567890123456789012345678901234567890.12345678901234567890123456789012345678901234567890.1234567890123456789012345678901234567890123456789a", + false), +]; + +// (IP address, is valid DNS name). The comments here refer to the validity of +// the string as an IP address, not as a DNS name validity. +static IP_ADDRESS_DNS_VALIDITY: &[(&[u8], bool)] = &[ + (b"", false), + (b"1", false), + (b"1.2", false), + (b"1.2.3", false), + (b"1.2.3.4", false), + (b"1.2.3.4.5", false), + (b"1.2.3.4a", true), // a DNS name! + (b"a.2.3.4", false), // not even a DNS name! + (b"1::2", false), // IPv6 address + // Whitespace not allowed + (b" 1.2.3.4", false), + (b"1.2.3.4 ", false), + (b"1 .2.3.4", false), + (b"\n1.2.3.4", false), + (b"1.2.3.4\n", false), + // Nulls not allowed + (b"\0", false), + (b"\01.2.3.4", false), + (b"1.2.3.4\0", false), + (b"1.2.3.4\0.5", false), + // Range + (b"0.0.0.0", false), + (b"255.255.255.255", false), + (b"256.0.0.0", false), + (b"0.256.0.0", false), + (b"0.0.256.0", false), + (b"0.0.0.256", false), + (b"999.0.0.0", false), + (b"9999999999999999999.0.0.0", false), + // All digits allowed + (b"0.1.2.3", false), + (b"4.5.6.7", false), + (b"8.9.0.1", false), + // Leading zeros not allowed + (b"01.2.3.4", false), + (b"001.2.3.4", false), + (b"00000000001.2.3.4", false), + (b"010.2.3.4", false), + (b"1.02.3.4", false), + (b"1.2.03.4", false), + (b"1.2.3.04", false), + // Empty components + (b".2.3.4", false), + (b"1..3.4", false), + (b"1.2..4", false), + (b"1.2.3.", false), + // Too many components + (b"1.2.3.4.5", false), + (b"1.2.3.4.5.6", false), + (b"0.1.2.3.4", false), + (b"1.2.3.4.0", false), + // Leading/trailing dot + (b".1.2.3.4", false), + (b"1.2.3.4.", false), + // Other common forms of IPv4 address + // http://en.wikipedia.org/wiki/IPv4#Address_representations + (b"192.0.2.235", false), // dotted decimal (control value) + (b"0xC0.0x00.0x02.0xEB", true), // dotted hex - actually a DNS name! + (b"0301.0000.0002.0353", false), // dotted octal + (b"0xC00002EB", true), // non-dotted hex, actually a DNS name! + (b"3221226219", false), // non-dotted decimal + (b"030000001353", false), // non-dotted octal + (b"192.0.0002.0xEB", true), // mixed, actually a DNS name! + (b"1234", false), + (b"1234:5678", false), + (b"1234:5678:9abc", false), + (b"1234:5678:9abc:def0", false), + (b"1234:5678:9abc:def0:1234:", false), + (b"1234:5678:9abc:def0:1234:5678:", false), + (b"1234:5678:9abc:def0:1234:5678:9abc:", false), + (b"1234:5678:9abc:def0:1234:5678:9abc:def0", false), + (b"1234:5678:9abc:def0:1234:5678:9abc:def0:", false), + (b":1234:5678:9abc:def0:1234:5678:9abc:def0", false), + (b"1234:5678:9abc:def0:1234:5678:9abc:def0:0000", false), + // Valid contractions + (b"::1", false), + (b"::1234", false), + (b"1234::", false), + (b"1234::5678", false), + (b"1234:5678::abcd", false), + (b"1234:5678:9abc:def0:1234:5678:9abc::", false), + // Contraction in full IPv6 addresses not allowed + (b"::1234:5678:9abc:def0:1234:5678:9abc:def0", false), // start + (b"1234:5678:9abc:def0:1234:5678:9abc:def0::", false), // end + (b"1234:5678::9abc:def0:1234:5678:9abc:def0", false), // interior + // Multiple contractions not allowed + (b"::1::", false), + (b"::1::2", false), + (b"1::2::", false), + // Colon madness! + (b":", false), + (b"::", false), + (b":::", false), + (b"::::", false), + (b":::1", false), + (b"::::1", false), + (b"1:::2", false), + (b"1::::2", false), + (b"1:2:::", false), + (b"1:2::::", false), + (b"::1234:", false), + (b":1234::", false), + (b"01234::", false), // too many digits, even if zero + (b"12345678::", false), // too many digits or missing colon + // uppercase + (b"ABCD:EFAB::", false), + // miXeD CAse + (b"aBcd:eFAb::", false), + // IPv4-style + (b"::2.3.4.5", false), + (b"1234::2.3.4.5", false), + (b"::abcd:2.3.4.5", false), + (b"1234:5678:9abc:def0:1234:5678:252.253.254.255", false), + (b"1234:5678:9abc:def0:1234::252.253.254.255", false), + (b"1234::252.253.254", false), + (b"::252.253.254", false), + (b"::252.253.254.300", false), + (b"1234::252.253.254.255:", false), + (b"1234::252.253.254.255:5678", false), + // Contractions that don't contract + (b"::1234:5678:9abc:def0:1234:5678:9abc:def0", false), + (b"1234:5678:9abc:def0:1234:5678:9abc:def0::", false), + (b"1234:5678:9abc:def0::1234:5678:9abc:def0", false), + (b"1234:5678:9abc:def0:1234:5678::252.253.254.255", false), + // With and without leading zeros + (b"::123", false), + (b"::0123", false), + (b"::012", false), + (b"::0012", false), + (b"::01", false), + (b"::001", false), + (b"::0001", false), + (b"::0", false), + (b"::00", false), + (b"::000", false), + (b"::0000", false), + (b"::01234", false), + (b"::00123", false), + (b"::000123", false), + // Trailing zero + (b"::12340", false), + // Whitespace + (b" 1234:5678:9abc:def0:1234:5678:9abc:def0", false), + (b"\t1234:5678:9abc:def0:1234:5678:9abc:def0", false), + (b"\t1234:5678:9abc:def0:1234:5678:9abc:def0\n", false), + (b"1234 :5678:9abc:def0:1234:5678:9abc:def0", false), + (b"1234: 5678:9abc:def0:1234:5678:9abc:def0", false), + (b":: 2.3.4.5", false), + (b"1234::252.253.254.255 ", false), + (b"1234::252.253.254.255\n", false), + (b"1234::252.253. 254.255", false), + // Nulls + (b"\0", false), + (b"::1\0:2", false), + (b"::1\0", false), + (b"::1.2.3.4\0", false), + (b"::1.2\02.3.4", false), +]; + +#[test] +fn dns_name_ref_try_from_ascii_test() { + for &(s, is_valid) in DNS_NAME_VALIDITY + .iter() + .chain(IP_ADDRESS_DNS_VALIDITY.iter()) + { + assert_eq!( + webpki::DnsNameRef::try_from_ascii(s).is_ok(), + is_valid, + "DnsNameRef::try_from_ascii_str failed for \"{:?}\"", + s + ); + } +} diff --git a/vendor/webpki/tests/ed25519/ca.der b/vendor/webpki/tests/ed25519/ca.der new file mode 100644 index 00000000..9994daf1 Binary files /dev/null and b/vendor/webpki/tests/ed25519/ca.der differ diff --git a/vendor/webpki/tests/ed25519/ee.der b/vendor/webpki/tests/ed25519/ee.der new file mode 100644 index 00000000..5181f7bc Binary files /dev/null and b/vendor/webpki/tests/ed25519/ee.der differ diff --git a/vendor/webpki/tests/integration.rs b/vendor/webpki/tests/integration.rs new file mode 100644 index 00000000..598641d3 --- /dev/null +++ b/vendor/webpki/tests/integration.rs @@ -0,0 +1,91 @@ +// Copyright 2016 Joseph Birr-Pixton. +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +use core::convert::TryFrom; +extern crate webpki; + +static ALL_SIGALGS: &[&webpki::SignatureAlgorithm] = &[ + &webpki::ECDSA_P256_SHA256, + &webpki::ECDSA_P256_SHA384, + &webpki::ECDSA_P384_SHA256, + &webpki::ECDSA_P384_SHA384, + &webpki::ED25519, + #[cfg(feature = "alloc")] + &webpki::RSA_PKCS1_2048_8192_SHA256, + #[cfg(feature = "alloc")] + &webpki::RSA_PKCS1_2048_8192_SHA384, + #[cfg(feature = "alloc")] + &webpki::RSA_PKCS1_2048_8192_SHA512, + #[cfg(feature = "alloc")] + &webpki::RSA_PKCS1_3072_8192_SHA384, +]; + +/* Checks we can verify netflix's cert chain. This is notable + * because they're rooted at a Verisign v1 root. */ +#[cfg(feature = "alloc")] +#[test] +pub fn netflix() { + let ee: &[u8] = include_bytes!("netflix/ee.der"); + let inter = include_bytes!("netflix/inter.der"); + let ca = include_bytes!("netflix/ca.der"); + + let anchors = vec![webpki::TrustAnchor::try_from_cert_der(ca).unwrap()]; + let anchors = webpki::TlsServerTrustAnchors(&anchors); + + #[allow(clippy::unreadable_literal)] // TODO: Make this clear. + let time = webpki::Time::from_seconds_since_unix_epoch(1492441716); + + let cert = webpki::EndEntityCert::try_from(ee).unwrap(); + assert_eq!( + Ok(()), + cert.verify_is_valid_tls_server_cert(ALL_SIGALGS, &anchors, &[inter], time) + ); +} + +#[test] +pub fn ed25519() { + let ee: &[u8] = include_bytes!("ed25519/ee.der"); + let ca = include_bytes!("ed25519/ca.der"); + + let anchors = vec![webpki::TrustAnchor::try_from_cert_der(ca).unwrap()]; + let anchors = webpki::TlsServerTrustAnchors(&anchors); + + #[allow(clippy::unreadable_literal)] // TODO: Make this clear. + let time = webpki::Time::from_seconds_since_unix_epoch(1547363522); + + let cert = webpki::EndEntityCert::try_from(ee).unwrap(); + assert_eq!( + Ok(()), + cert.verify_is_valid_tls_server_cert(ALL_SIGALGS, &anchors, &[], time) + ); +} + +#[test] +fn read_root_with_zero_serial() { + let ca = include_bytes!("misc/serial_zero.der"); + let _ = + webpki::TrustAnchor::try_from_cert_der(ca).expect("godaddy cert should parse as anchor"); +} + +#[test] +fn read_root_with_neg_serial() { + let ca = include_bytes!("misc/serial_neg.der"); + let _ = webpki::TrustAnchor::try_from_cert_der(ca).expect("idcat cert should parse as anchor"); +} + +#[cfg(feature = "std")] +#[test] +fn time_constructor() { + let _ = webpki::Time::try_from(std::time::SystemTime::now()).unwrap(); +} diff --git a/vendor/webpki/tests/misc/serial_neg.der b/vendor/webpki/tests/misc/serial_neg.der new file mode 100644 index 00000000..f1317bf3 Binary files /dev/null and b/vendor/webpki/tests/misc/serial_neg.der differ diff --git a/vendor/webpki/tests/misc/serial_zero.der b/vendor/webpki/tests/misc/serial_zero.der new file mode 100644 index 00000000..3cd289bd Binary files /dev/null and b/vendor/webpki/tests/misc/serial_zero.der differ diff --git a/vendor/webpki/tests/netflix/ca.der b/vendor/webpki/tests/netflix/ca.der new file mode 100644 index 00000000..6a15da32 Binary files /dev/null and b/vendor/webpki/tests/netflix/ca.der differ diff --git a/vendor/webpki/tests/netflix/ee.der b/vendor/webpki/tests/netflix/ee.der new file mode 100644 index 00000000..c06fbe51 Binary files /dev/null and b/vendor/webpki/tests/netflix/ee.der differ diff --git a/vendor/webpki/tests/netflix/inter.der b/vendor/webpki/tests/netflix/inter.der new file mode 100644 index 00000000..ff25d78f Binary files /dev/null and b/vendor/webpki/tests/netflix/inter.der differ diff --git a/vendor/webpki/third-party/chromium/LICENSE b/vendor/webpki/third-party/chromium/LICENSE new file mode 100644 index 00000000..a32e00ce --- /dev/null +++ b/vendor/webpki/third-party/chromium/LICENSE @@ -0,0 +1,27 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/README b/vendor/webpki/third-party/chromium/data/verify_signed_data/README new file mode 100644 index 00000000..2acf6e62 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/README @@ -0,0 +1,35 @@ +This directory contains test data for testing net::VerifySignedData(). + +When adding or changing test data, run the script + $ python annotate_test_data.py + +This script will apply a uniform formatting. For instance it will add a +comment showing what the parsed ASN.1 looks like, and reformat the base64 to +have consistent line breaks. + +The general format for the test files is as follows: + + + + + -----BEGIN PUBLIC KEY----- + + -----END PUBLIC KEY----- + + -----BEGIN ALGORITHM----- + + -----END ALGORITHM----- + + -----BEGIN DATA----- + + -----END DATA----- + + -----BEGIN SIGNATURE----- + + -----END SIGNATURE----- + + +Comments for a PEM block should be placed immediately below that block. +The script will also insert a comment after the block describing its parsed +ASN.1 structure (your extra comments need to be above the script-generated +comments or they will be stripped). diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-spki-params-null.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-spki-params-null.pem new file mode 100644 index 00000000..6f65be14 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-spki-params-null.pem @@ -0,0 +1,45 @@ +This is the same test as ecdsa-prime256v1-sha512.pem except the public key's +algorithm has been tampered with. The parameters for ecPublicKey should be a +namedCurve, but here they have been replaced by NULL. + + + +-----BEGIN PUBLIC KEY----- +MFEwCwYHKoZIzj0CAQUAA0IABJywz2kwPa/HYdTkaHtOzwOebTSrlkr4CBDY1VikqNb3LVEjOhe +IkgqG7gihlix576MX+3h54pfa0hRtuZX6HHg= +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=2 l= 81 cons: SEQUENCE + 2:d=1 hl=2 l= 11 cons: SEQUENCE + 4:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey + 13:d=2 hl=2 l= 0 prim: NULL + 15:d=1 hl=2 l= 66 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MAoGCCqGSM49BAME +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 10 cons: SEQUENCE + 2:d=1 hl=2 l= 8 prim: OBJECT :ecdsa-with-SHA512 + + + +-----BEGIN DATA----- +bikyFTMBpO72gOZCiSmtrpiMEI1mijH/VdBImUfXX/gaRr+J6E1kAfAjvm6HaI+814TXhcqEZzV +SSstS0ARSyEBApHnnzDMJNkQdk7vnIqlDKm4dsRK1yUA7ECcssTR/1hnUY/ep0iOtdv3gbYpog1 +APuEMjWr/5jiQb37VTjD4= +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A0cAMEQCIEufkeQoUocmGh0ckjz2Gc1SwXXP5/G+YKUljGEDSLo9AiAoxF+QHXHEGymGOOwNaoX +X/LDDO7/sWpyBCEa2OSiahA== +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=2 l= 71 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-unused-bits-signature.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-unused-bits-signature.pem new file mode 100644 index 00000000..24efda02 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-unused-bits-signature.pem @@ -0,0 +1,53 @@ +This is the same test as ecdsa-prime256v1-sha512.pem, however the SIGNATURE has +been changed to a (valid) BIT STRING containing two unused bits. + +Note that the last two bits of the original signature were 0, so the +DER-encoded bytes portion of the mutated BIT STRING remains the same. All that +changes is the octet at the start which indicates the number of unused bits. + +In other words SIGNATURE changes from: + 03 47 00 30 ... 84 +To: + 03 47 02 30 ... 84 + + + +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnLDPaTA9r8dh1ORoe07PA55tNKuWSvgIENjVWKS +o1vctUSM6F4iSCobuCKGWLHnvoxf7eHnil9rSFG25lfoceA== +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=2 l= 89 cons: SEQUENCE + 2:d=1 hl=2 l= 19 cons: SEQUENCE + 4:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey + 13:d=2 hl=2 l= 8 prim: OBJECT :prime256v1 + 23:d=1 hl=2 l= 66 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MAoGCCqGSM49BAME +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 10 cons: SEQUENCE + 2:d=1 hl=2 l= 8 prim: OBJECT :ecdsa-with-SHA512 + + + +-----BEGIN DATA----- +bikyFTMBpO72gOZCiSmtrpiMEI1mijH/VdBImUfXX/gaRr+J6E1kAfAjvm6HaI+814TXhcqEZzV +SSstS0ARSyEBApHnnzDMJNkQdk7vnIqlDKm4dsRK1yUA7ECcssTR/1hnUY/ep0iOtdv3gbYpog1 +APuEMjWr/5jiQb37VTjD4= +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A0cCMEQCIEufkeQoUocmGh0ckjz2Gc1SwXXP5/G+YKUljGEDSLo9AiAoxF+QHXHEGymGOOwNaoX +X/LDDO7/sWpyBCEa2OSiahA== +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=2 l= 71 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-using-ecdh-key.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-using-ecdh-key.pem new file mode 100644 index 00000000..4f3e26c5 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-using-ecdh-key.pem @@ -0,0 +1,48 @@ +This uses the same test data as ecdsa-prime256v1-sha512.pem, HOWEVER the +algorithm OID for the public key has been changed from id-ecPublicKey +(1.2.840.10045.2.1) to id-ecDH (1.3.132.1.12) + +This test should fail because the public key's algorithm does not match that of +the signature algorithm. + + + +-----BEGIN PUBLIC KEY----- +MFcwEQYFK4EEAQwGCCqGSM49AwEHA0IABJywz2kwPa/HYdTkaHtOzwOebTSrlkr4CBDY1VikqNb +3LVEjOheIkgqG7gihlix576MX+3h54pfa0hRtuZX6HHg= +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=2 l= 87 cons: SEQUENCE + 2:d=1 hl=2 l= 17 cons: SEQUENCE + 4:d=2 hl=2 l= 5 prim: OBJECT :1.3.132.1.12 + 11:d=2 hl=2 l= 8 prim: OBJECT :prime256v1 + 21:d=1 hl=2 l= 66 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MAoGCCqGSM49BAME +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 10 cons: SEQUENCE + 2:d=1 hl=2 l= 8 prim: OBJECT :ecdsa-with-SHA512 + + + +-----BEGIN DATA----- +bikyFTMBpO72gOZCiSmtrpiMEI1mijH/VdBImUfXX/gaRr+J6E1kAfAjvm6HaI+814TXhcqEZzV +SSstS0ARSyEBApHnnzDMJNkQdk7vnIqlDKm4dsRK1yUA7ECcssTR/1hnUY/ep0iOtdv3gbYpog1 +APuEMjWr/5jiQb37VTjD4= +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A0cAMEQCIEufkeQoUocmGh0ckjz2Gc1SwXXP5/G+YKUljGEDSLo9AiAoxF+QHXHEGymGOOwNaoX +X/LDDO7/sWpyBCEa2OSiahA== +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=2 l= 71 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-using-ecmqv-key.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-using-ecmqv-key.pem new file mode 100644 index 00000000..d0b906f0 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-using-ecmqv-key.pem @@ -0,0 +1,48 @@ +This uses the same test data as ecdsa-prime256v1-sha512.pem, HOWEVER the +algorithm OID for the public key has been changed from id-ecPublicKey +(1.2.840.10045.2.1) to id-ecMQV (1.3.132.1.13) + +This test should fail because the public key's algorithm does not match that of +the signature algorithm. + + + +-----BEGIN PUBLIC KEY----- +MFcwEQYFK4EEAQ0GCCqGSM49AwEHA0IABJywz2kwPa/HYdTkaHtOzwOebTSrlkr4CBDY1VikqNb +3LVEjOheIkgqG7gihlix576MX+3h54pfa0hRtuZX6HHg= +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=2 l= 87 cons: SEQUENCE + 2:d=1 hl=2 l= 17 cons: SEQUENCE + 4:d=2 hl=2 l= 5 prim: OBJECT :1.3.132.1.13 + 11:d=2 hl=2 l= 8 prim: OBJECT :prime256v1 + 21:d=1 hl=2 l= 66 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MAoGCCqGSM49BAME +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 10 cons: SEQUENCE + 2:d=1 hl=2 l= 8 prim: OBJECT :ecdsa-with-SHA512 + + + +-----BEGIN DATA----- +bikyFTMBpO72gOZCiSmtrpiMEI1mijH/VdBImUfXX/gaRr+J6E1kAfAjvm6HaI+814TXhcqEZzV +SSstS0ARSyEBApHnnzDMJNkQdk7vnIqlDKm4dsRK1yUA7ECcssTR/1hnUY/ep0iOtdv3gbYpog1 +APuEMjWr/5jiQb37VTjD4= +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A0cAMEQCIEufkeQoUocmGh0ckjz2Gc1SwXXP5/G+YKUljGEDSLo9AiAoxF+QHXHEGymGOOwNaoX +X/LDDO7/sWpyBCEa2OSiahA== +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=2 l= 71 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-using-rsa-algorithm.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-using-rsa-algorithm.pem new file mode 100644 index 00000000..8085486f --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-using-rsa-algorithm.pem @@ -0,0 +1,48 @@ +This test specified a valid ECDSA signature and EC key (the same as ecdsa-prime256v1-sha512.pem) + +The problem however is the signature algorithm is indicated as being RSA PKCS#1 v1.5. + +Signature verification consequently should fail. + + + +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnLDPaTA9r8dh1ORoe07PA55tNKuWSvgIENjVWKS +o1vctUSM6F4iSCobuCKGWLHnvoxf7eHnil9rSFG25lfoceA== +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=2 l= 89 cons: SEQUENCE + 2:d=1 hl=2 l= 19 cons: SEQUENCE + 4:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey + 13:d=2 hl=2 l= 8 prim: OBJECT :prime256v1 + 23:d=1 hl=2 l= 66 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MA0GCSqGSIb3DQEBDQUA +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 13 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :sha512WithRSAEncryption + 13:d=1 hl=2 l= 0 prim: NULL + + + +-----BEGIN DATA----- +bikyFTMBpO72gOZCiSmtrpiMEI1mijH/VdBImUfXX/gaRr+J6E1kAfAjvm6HaI+814TXhcqEZzV +SSstS0ARSyEBApHnnzDMJNkQdk7vnIqlDKm4dsRK1yUA7ECcssTR/1hnUY/ep0iOtdv3gbYpog1 +APuEMjWr/5jiQb37VTjD4= +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A0cAMEQCIEufkeQoUocmGh0ckjz2Gc1SwXXP5/G+YKUljGEDSLo9AiAoxF+QHXHEGymGOOwNaoX +X/LDDO7/sWpyBCEa2OSiahA== +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=2 l= 71 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-wrong-signature-format.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-wrong-signature-format.pem new file mode 100644 index 00000000..d51317ce --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512-wrong-signature-format.pem @@ -0,0 +1,47 @@ +This is the same as ecdsa-prime256v1-sha512.pem, except the signature is wrong. + +Rather than encoding the signature into a DER-encoded Ecdsa-Sig-Value, it is a +concatenation of the r and s values. This is the format that WebCrypto uses for +ECDSA signature, but not what is used for digital signatures. + + + +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnLDPaTA9r8dh1ORoe07PA55tNKuWSvgIENjVWKS +o1vctUSM6F4iSCobuCKGWLHnvoxf7eHnil9rSFG25lfoceA== +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=2 l= 89 cons: SEQUENCE + 2:d=1 hl=2 l= 19 cons: SEQUENCE + 4:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey + 13:d=2 hl=2 l= 8 prim: OBJECT :prime256v1 + 23:d=1 hl=2 l= 66 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MAoGCCqGSM49BAME +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 10 cons: SEQUENCE + 2:d=1 hl=2 l= 8 prim: OBJECT :ecdsa-with-SHA512 + + + +-----BEGIN DATA----- +bikyFTMBpO72gOZCiSmtrpiMEI1mijH/VdBImUfXX/gaRr+J6E1kAfAjvm6HaI+814TXhcqEZzV +SSstS0ARSyEBApHnnzDMJNkQdk7vnIqlDKm4dsRK1yUA7ECcssTR/1hnUY/ep0iOtdv3gbYpog1 +APuEMjWr/5jiQb37VTjD4= +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A0EAS5+R5ChShyYaHRySPPYZzVLBdc/n8b5gpSWMYQNIuj0oxF+QHXHEGymGOOwNaoXX/LDDO7/ +sWpyBCEa2OSiahA== +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=2 l= 65 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512.pem new file mode 100644 index 00000000..54f490c1 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-prime256v1-sha512.pem @@ -0,0 +1,49 @@ +The key, message, and signature come from: +http://csrc.nist.gov/groups/STM/cavp/documents/dss/186-3ecdsatestvectors.zip (SigVer.rsp) + +The algorithm DER was synthesized to match, and the signature (provided as an r +and s tuple) was encoded into a Ecdsa-Sig-Value and then a BIT STRING. + +It uses ECDSA verification, using curve prime256v1 and SHA-512 + + + +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnLDPaTA9r8dh1ORoe07PA55tNKuWSvgIENjVWKS +o1vctUSM6F4iSCobuCKGWLHnvoxf7eHnil9rSFG25lfoceA== +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=2 l= 89 cons: SEQUENCE + 2:d=1 hl=2 l= 19 cons: SEQUENCE + 4:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey + 13:d=2 hl=2 l= 8 prim: OBJECT :prime256v1 + 23:d=1 hl=2 l= 66 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MAoGCCqGSM49BAME +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 10 cons: SEQUENCE + 2:d=1 hl=2 l= 8 prim: OBJECT :ecdsa-with-SHA512 + + + +-----BEGIN DATA----- +bikyFTMBpO72gOZCiSmtrpiMEI1mijH/VdBImUfXX/gaRr+J6E1kAfAjvm6HaI+814TXhcqEZzV +SSstS0ARSyEBApHnnzDMJNkQdk7vnIqlDKm4dsRK1yUA7ECcssTR/1hnUY/ep0iOtdv3gbYpog1 +APuEMjWr/5jiQb37VTjD4= +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A0cAMEQCIEufkeQoUocmGh0ckjz2Gc1SwXXP5/G+YKUljGEDSLo9AiAoxF+QHXHEGymGOOwNaoX +X/LDDO7/sWpyBCEa2OSiahA== +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=2 l= 71 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-secp384r1-sha256-corrupted-data.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-secp384r1-sha256-corrupted-data.pem new file mode 100644 index 00000000..5f5380bd --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-secp384r1-sha256-corrupted-data.pem @@ -0,0 +1,53 @@ +This is the same test as ecdsa-secp384r1-sha256.pem, except the DATA section +has been corrupted. The third byte has been set to 0. + +This signature should NOT verify successfully. + + + +-----BEGIN PUBLIC KEY----- +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEXFhBi+WKXuxeK9yCbC9jqEchwjCNsQ4RXAsJ07oHZ+Q +qz55cNIY5BAhcQ0QYY5jv9BimGL9SuhUuOSuS3Pn9rrsIFGcFsihy4kDr8rq5+7RbN8bV057gW5 +emYjLtvDsQ +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=2 l= 118 cons: SEQUENCE + 2:d=1 hl=2 l= 16 cons: SEQUENCE + 4:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey + 13:d=2 hl=2 l= 5 prim: OBJECT :secp384r1 + 20:d=1 hl=2 l= 98 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MAoGCCqGSM49BAMC +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 10 cons: SEQUENCE + 2:d=1 hl=2 l= 8 prim: OBJECT :ecdsa-with-SHA256 + + + +-----BEGIN DATA----- +MIIA6KADAgECAgkAtUVxft6/Vc0wCgYIKoZIzj0EAwIwbzELMAkGA1UEBhMCQVUxEzARBgNVBAg +MClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEMMAoGA1UEAw +wDYWhhMRowGAYJKoZIhvcNAQkBFgtzdXBAZm9vLmNvbTAeFw0xNTA3MDIwMDM4MTRaFw0xNjA3M +DEwMDM4MTRaMG8xCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJ +bnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDDAKBgNVBAMMA2FoYTEaMBgGCSqGSIb3DQEJARYLc3V +wQGZvby5jb20wdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARcWEGL5Ype7F4r3IJsL2OoRyHCMI2xDh +FcCwnTugdn5CrPnlw0hjkECFxDRBhjmO/0GKYYv1K6FS45K5Lc+f2uuwgUZwWyKHLiQOvyurn7t +Fs3xtXTnuBbl6ZiMu28OxCjUDBOMB0GA1UdDgQWBBR6nDgtPalG2JvSlWzdGRCi/Cu7NjAfBgNV +HSMEGDAWgBR6nDgtPalG2JvSlWzdGRCi/Cu7NjAMBgNVHRMEBTADAQH/ +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A2kAMGYCMQCDwMSZVJZ8qThiNTV7VX57m8fdNnNS6cXIjRYoh4SozlYWmWGh87nhmJJCeD16jVM +CMQDkroAY8oNi8RxLUor+LozhhVgu24tu6lcp4MP8H3Zy8bBea5HerAd1AqJp3Ox7KDU= +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=2 l= 105 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-secp384r1-sha256.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-secp384r1-sha256.pem new file mode 100644 index 00000000..d5c3798c --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-secp384r1-sha256.pem @@ -0,0 +1,84 @@ +This test data was produced by creating a self-signed EC cert using OpenSSL, +and then extracting the relevant fields. + +It uses ECDSA with curve secp384r1 an SHA-256. + +(1) Generate self-signed certificate + + openssl ecparam -out ec_key.pem -name secp384r1 -genkey + openssl req -new -key ec_key.pem -x509 -nodes -days 365 -out cert.pem + +(2) Extract public key + + openssl x509 -in cert.pem -pubkey -noout > pubkey.pem + cat pubkey.pem + +(3) Extract signed data (tbsCertificate) + + openssl asn1parse -in cert.pem -out tbs -noout -strparse 4 + base64 tbs + +(4) Extract signature algorithm + + # Find the offset of the signature algorithm near the end (496 in this case) + openssl asn1parse -in cert.pem + + openssl asn1parse -in cert.pem -out alg -noout -strparse 496 + base64 alg + +(5) Extract the signature + + # Find the final offset of BIT STRING (508 in this case) + openssl asn1parse -in cert.pem + + openssl asn1parse -in cert.pem -out sig -noout -strparse 508 + base64 sig + + + +-----BEGIN PUBLIC KEY----- +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEXFhBi+WKXuxeK9yCbC9jqEchwjCNsQ4RXAsJ07oHZ+Q +qz55cNIY5BAhcQ0QYY5jv9BimGL9SuhUuOSuS3Pn9rrsIFGcFsihy4kDr8rq5+7RbN8bV057gW5 +emYjLtvDsQ +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=2 l= 118 cons: SEQUENCE + 2:d=1 hl=2 l= 16 cons: SEQUENCE + 4:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey + 13:d=2 hl=2 l= 5 prim: OBJECT :secp384r1 + 20:d=1 hl=2 l= 98 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MAoGCCqGSM49BAMC +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 10 cons: SEQUENCE + 2:d=1 hl=2 l= 8 prim: OBJECT :ecdsa-with-SHA256 + + + +-----BEGIN DATA----- +MIIB6KADAgECAgkAtUVxft6/Vc0wCgYIKoZIzj0EAwIwbzELMAkGA1UEBhMCQVUxEzARBgNVBAg +MClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEMMAoGA1UEAw +wDYWhhMRowGAYJKoZIhvcNAQkBFgtzdXBAZm9vLmNvbTAeFw0xNTA3MDIwMDM4MTRaFw0xNjA3M +DEwMDM4MTRaMG8xCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJ +bnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDDAKBgNVBAMMA2FoYTEaMBgGCSqGSIb3DQEJARYLc3V +wQGZvby5jb20wdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARcWEGL5Ype7F4r3IJsL2OoRyHCMI2xDh +FcCwnTugdn5CrPnlw0hjkECFxDRBhjmO/0GKYYv1K6FS45K5Lc+f2uuwgUZwWyKHLiQOvyurn7t +Fs3xtXTnuBbl6ZiMu28OxCjUDBOMB0GA1UdDgQWBBR6nDgtPalG2JvSlWzdGRCi/Cu7NjAfBgNV +HSMEGDAWgBR6nDgtPalG2JvSlWzdGRCi/Cu7NjAMBgNVHRMEBTADAQH/ +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A2kAMGYCMQCDwMSZVJZ8qThiNTV7VX57m8fdNnNS6cXIjRYoh4SozlYWmWGh87nhmJJCeD16jVM +CMQDkroAY8oNi8RxLUor+LozhhVgu24tu6lcp4MP8H3Zy8bBea5HerAd1AqJp3Ox7KDU= +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=2 l= 105 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-using-rsa-key.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-using-rsa-key.pem new file mode 100644 index 00000000..653bcd78 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ecdsa-using-rsa-key.pem @@ -0,0 +1,51 @@ +This test specifies an ECDSA signature algorithm (and a valid ecdsa signature), +HOWEVER it provides an RSA key. Verification should fail. + + + +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClbkoOcBAXWJpRh9x+qEHRVvLsDjatUqRN/rH +mH3rZkdjFEFb/7bFitMDyg6EqiKOU3/Umq3KRy7MHzqv84LHf1c2VCAltWyuLbfXWce9jd8CSHL +I8Jwpw4lmOb/idGfEFrMLT8Ms18pKA4Thrb2TE7yLh4fINDOjP+yJJvZohNwIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 159 cons: SEQUENCE + 3:d=1 hl=2 l= 13 cons: SEQUENCE + 5:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 16:d=2 hl=2 l= 0 prim: NULL + 18:d=1 hl=3 l= 141 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MAoGCCqGSM49BAMC +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 10 cons: SEQUENCE + 2:d=1 hl=2 l= 8 prim: OBJECT :ecdsa-with-SHA256 + + + +-----BEGIN DATA----- +MIIB6KADAgECAgkAtUVxft6/Vc0wCgYIKoZIzj0EAwIwbzELMAkGA1UEBhMCQVUxEzARBgNVBAg +MClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEMMAoGA1UEAw +wDYWhhMRowGAYJKoZIhvcNAQkBFgtzdXBAZm9vLmNvbTAeFw0xNTA3MDIwMDM4MTRaFw0xNjA3M +DEwMDM4MTRaMG8xCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJ +bnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDDAKBgNVBAMMA2FoYTEaMBgGCSqGSIb3DQEJARYLc3V +wQGZvby5jb20wdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARcWEGL5Ype7F4r3IJsL2OoRyHCMI2xDh +FcCwnTugdn5CrPnlw0hjkECFxDRBhjmO/0GKYYv1K6FS45K5Lc+f2uuwgUZwWyKHLiQOvyurn7t +Fs3xtXTnuBbl6ZiMu28OxCjUDBOMB0GA1UdDgQWBBR6nDgtPalG2JvSlWzdGRCi/Cu7NjAfBgNV +HSMEGDAWgBR6nDgtPalG2JvSlWzdGRCi/Cu7NjAMBgNVHRMEBTADAQH/ +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A2kAMGYCMQCDwMSZVJZ8qThiNTV7VX57m8fdNnNS6cXIjRYoh4SozlYWmWGh87nhmJJCeD16jVM +CMQDkroAY8oNi8RxLUor+LozhhVgu24tu6lcp4MP8H3Zy8bBea5HerAd1AqJp3Ox7KDU= +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=2 l= 105 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/make-pss.py b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/make-pss.py new file mode 100644 index 00000000..7708bc8e --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/make-pss.py @@ -0,0 +1,59 @@ +# Copyright 2016 Joseph Birr-Pixton. +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +import subprocess +import glob +import hashlib +import os + +TOP = '../../../../../' + +def dump(bin, type): + return '-----BEGIN %s-----\n%s-----END %s-----\n' % \ + (type, bin.encode('base64'), type) + +def gen(outfile, paramfile, hashfn): + param = open(paramfile).read() + + rand = os.urandom(64) + hash = getattr(hashlib, hashfn)(rand).digest() + + proc = subprocess.Popen(['openssl', 'pkeyutl', + '-inkey', 'priv.pem', + '-sign', + '-pkeyopt', 'rsa_padding_mode:pss', + '-pkeyopt', 'rsa_pss_saltlen:-1', + '-pkeyopt', 'digest:%s' % hashfn + ], + stdout = subprocess.PIPE, + stdin = subprocess.PIPE) + + sig, _ = proc.communicate(hash) + + with open(outfile, 'w') as f: + print >>f, dump(open('pub.der').read(), 'PUBLIC KEY') + print >>f, dump(param, 'ALGORITHM') + print >>f, dump(rand, 'DATA') + + assert len(sig) == 256 # only works with 2048-bit keys + # turn it into a DER bitstring + print >>f, dump('\x03\x82\x01\x01\x00' + sig, 'SIGNATURE') + +if __name__ == '__main__': + subprocess.check_call('openssl genrsa -out priv.pem 2048', shell = True) + subprocess.check_call('openssl rsa -pubout -out pub.pem -in priv.pem', shell = True) + subprocess.check_call('openssl asn1parse -inform pem -in pub.pem -out pub.der', shell = True) + gen('rsa-pss-sha256-salt32.pem', TOP + 'src/data/alg-pss-sha256.der', 'sha256') + gen('rsa-pss-sha384-salt48.pem', TOP + 'src/data/alg-pss-sha384.der', 'sha384') + gen('rsa-pss-sha512-salt64.pem', TOP + 'src/data/alg-pss-sha512.der', 'sha512') diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/priv.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/priv.pem new file mode 100644 index 00000000..dea5059d --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/priv.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAtVDcg1BMqPneiNBL5+mjEB5mxjJzgkmClZR5z1jNht+As6+M +lgflni0bB8LjhWbIt+dZ6Bt4cSHOnAOnkMDOFwtrxJE6Eg1GQ2ux9nDVNvrQkoOL +znXrxMh/af0pcSo8kItDmkqbV/fi3Q7agpbcWc/4wTZOfO6lns4nb5s08oaUv3uF +5Wc0sktNr6he6R3zSQ6YK5KZFzQdnEtGc4gwHWXZ9xt4JeANht3m4RNpMY89qZsZ +xmqoewYHuXQUAfl7W0DC3hoxOoLwSqL2bt2zMMeR8WAo51YY0cJnzAEETcnWIM6e +alb5Osj3iSEknxRTley47SsODQ0maUUWj8wEjwIDAQABAoIBAFBAVQmt7fBQgAWQ +JDimeWz198k7pVKCVND94Zg7luReYmmlhpUVM7V6A1/BC9EMuERlmq6YEgwIyZjW +KUFxhQZAINfk64334CSRMzh/om9uPgjLPoMIQG1dzL9NtR0Ic7wKV8afxPf/mKL9 +Iwvv1+HMoi5qafzz58xNNLk6OgopdZ6H2aX0QtHy/jkMfpE3od7W6Xc+lSVUO7HG +zmN3pHaM5K5n59cX9jpg/K+a0loceY5vmqUfXyh6IP6h1XyAb2NTpU04klDEFEnU +tyaYtxL4ZMZzefoeVXVbCl7qeOE7KGIz7gcvsqL7T8dkK+uYf6mLENeyUvkCKiTG +QAqon0kCgYEA6pLLAYpRo9JbLYlYNt9iTFwIU+R8RcxzZrltm7OUqztmaVq4pOek +cPw/2sCMvqeEWuGhv+bbeIsDUWADU9NFkWySlVRKEFKGb3ECv3A07yfP2K22exOZ +/SglNZKB/ycvpOMcNKnJD5folRrh0actdVG8vOf/sN+887vE77u0f6sCgYEAxeC0 +/6831k/EWYzQf+OfeLqx4ABgkgqxvMXO3YCp44+DD4l8TVWfP4Ahfj5p0zCbXIv3 +5OcxdVwjNljZw4Y5vDNwcDK7vKwp9ne+H9xJB7Yedfr7oyJbqIvJ1nd6jmXoL7GA +dX9xSxJ1CucD7RAY99MS77y8xm0sTbFoI6SvOq0CgYEApeQihXhYvE6sBMw5ArWA +QxhjG1FfQc2RX3iLt62M2nwrtR5frt/TP8RlNEMwRjUaOVuQlLKjS+Cj/Ay2zbWA +YZQzJkByEJEMWgvGMbUc+nVhXI+dmfUG1i5qAjUWkmgYHbgv3l6kvs5jwe88/JQK +ZgnkPISmI2RXsNd+MzzALfkCgYB/56HXa/ERzHnE0KqtH/si1LrJajUB8Xu14761 +msc12rwCvQHmEyRerXn42msZIeAq0CaqhW6Ix8fTB1erdQW4yx8wxvpnGHn/YKM6 +gO+L1oKWDGe/qSPKLKGIya4kgWa1/Wxlhr06o3GYXH9DKxaYio1A/aSgNk1e4v/H +mlnR+QKBgQDd2cdhBTXIo5FZSONip5GG2Ku9m60qGSyPTCqxLNWBfYE/fu0aFCUU +GemqA2ygxFnyCG1Af0SDWwQFH8W7BJ6H1geJVcwVKLrZokKOul8kdwXCxz1J2XGe +gskT4Dsd9K8TSU3J09XVKhC5SrF0vDjdXOE6rtFSqa/bs7B2JcfNwQ== +-----END RSA PRIVATE KEY----- diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/pub.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/pub.pem new file mode 100644 index 00000000..7ece334f --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/pub.pem @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtVDcg1BMqPneiNBL5+mj +EB5mxjJzgkmClZR5z1jNht+As6+Mlgflni0bB8LjhWbIt+dZ6Bt4cSHOnAOnkMDO +FwtrxJE6Eg1GQ2ux9nDVNvrQkoOLznXrxMh/af0pcSo8kItDmkqbV/fi3Q7agpbc +Wc/4wTZOfO6lns4nb5s08oaUv3uF5Wc0sktNr6he6R3zSQ6YK5KZFzQdnEtGc4gw +HWXZ9xt4JeANht3m4RNpMY89qZsZxmqoewYHuXQUAfl7W0DC3hoxOoLwSqL2bt2z +MMeR8WAo51YY0cJnzAEETcnWIM6ealb5Osj3iSEknxRTley47SsODQ0maUUWj8wE +jwIDAQAB +-----END PUBLIC KEY----- diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha256-salt32-corrupted-data.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha256-salt32-corrupted-data.pem new file mode 100644 index 00000000..153189b0 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha256-salt32-corrupted-data.pem @@ -0,0 +1,63 @@ +This has had DATA corrupted, so the signature is not valid. + + + +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtVDcg1BMqPneiNBL5+mjEB5mxjJzgkm +ClZR5z1jNht+As6+Mlgflni0bB8LjhWbIt+dZ6Bt4cSHOnAOnkMDOFwtrxJE6Eg1GQ2ux9nDVNv +rQkoOLznXrxMh/af0pcSo8kItDmkqbV/fi3Q7agpbcWc/4wTZOfO6lns4nb5s08oaUv3uF5Wc0s +ktNr6he6R3zSQ6YK5KZFzQdnEtGc4gwHWXZ9xt4JeANht3m4RNpMY89qZsZxmqoewYHuXQUAfl7 +W0DC3hoxOoLwSqL2bt2zMMeR8WAo51YY0cJnzAEETcnWIM6ealb5Osj3iSEknxRTley47SsODQ0 +maUUWj8wEjwIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=4 l= 290 cons: SEQUENCE + 4:d=1 hl=2 l= 13 cons: SEQUENCE + 6:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 17:d=2 hl=2 l= 0 prim: NULL + 19:d=1 hl=4 l= 271 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MEEGCSqGSIb3DQEBCjA0oA8wDQYJYIZIAWUDBAIBBQChHDAaBgkqhkiG9w0BAQgwDQYJYIZIAWU +DBAIBBQCiAwIBIA== +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 65 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :rsassaPss + 13:d=1 hl=2 l= 52 cons: SEQUENCE + 15:d=2 hl=2 l= 15 cons: cont [ 0 ] + 17:d=3 hl=2 l= 13 cons: SEQUENCE + 19:d=4 hl=2 l= 9 prim: OBJECT :sha256 + 30:d=4 hl=2 l= 0 prim: NULL + 32:d=2 hl=2 l= 28 cons: cont [ 1 ] + 34:d=3 hl=2 l= 26 cons: SEQUENCE + 36:d=4 hl=2 l= 9 prim: OBJECT :mgf1 + 47:d=4 hl=2 l= 13 cons: SEQUENCE + 49:d=5 hl=2 l= 9 prim: OBJECT :sha256 + 60:d=5 hl=2 l= 0 prim: NULL + 62:d=2 hl=2 l= 3 cons: cont [ 2 ] + 64:d=3 hl=2 l= 1 prim: INTEGER :20 + + + +-----BEGIN DATA----- +K6BCjy4hCNAZBmRT+wS4h5wDg7pO67oHFabDt5cXNp8X6sLNH2vjICLtO2niPwZ/Yk2ySxC8MgO +/+U9sdSXxqA== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4IBAQCZqlXJhviFKOKHe1ssbm0ThtAnAbcuP3ACBZyfpBjfYlxAgltNzBnmEtxjsbZQPMXHDHy +Y+fdEXwK2vboCz7BzIRXcrcJGzjsBc2zPeNZlmhaadIoa5d8jy3kxnT+f3YVjKGZBqwDaqE5Kie +jhV0laTK+cNGFXo9a3ylICok+s4jVN2Y7qE+ImgyANbZyn1d6W6VnFf4GVvin2hFwTCcZnKA6Db +NYnArbbNmHmMB2S+1Kw9dAklnzZmwWgNSRirtTpUHTBIWYq3B0hPL8IzwKk89/iKDaY2fpV/Wnt +oL2mgM7oa/7+oQWa27BGYftYZmDpIQtNbUeO4VBnaeqGgA5f +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=4 l= 257 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha256-salt32.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha256-salt32.pem new file mode 100644 index 00000000..85d4f613 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha256-salt32.pem @@ -0,0 +1,63 @@ + + + + +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtVDcg1BMqPneiNBL5+mjEB5mxjJzgkm +ClZR5z1jNht+As6+Mlgflni0bB8LjhWbIt+dZ6Bt4cSHOnAOnkMDOFwtrxJE6Eg1GQ2ux9nDVNv +rQkoOLznXrxMh/af0pcSo8kItDmkqbV/fi3Q7agpbcWc/4wTZOfO6lns4nb5s08oaUv3uF5Wc0s +ktNr6he6R3zSQ6YK5KZFzQdnEtGc4gwHWXZ9xt4JeANht3m4RNpMY89qZsZxmqoewYHuXQUAfl7 +W0DC3hoxOoLwSqL2bt2zMMeR8WAo51YY0cJnzAEETcnWIM6ealb5Osj3iSEknxRTley47SsODQ0 +maUUWj8wEjwIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=4 l= 290 cons: SEQUENCE + 4:d=1 hl=2 l= 13 cons: SEQUENCE + 6:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 17:d=2 hl=2 l= 0 prim: NULL + 19:d=1 hl=4 l= 271 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MEEGCSqGSIb3DQEBCjA0oA8wDQYJYIZIAWUDBAIBBQChHDAaBgkqhkiG9w0BAQgwDQYJYIZIAWU +DBAIBBQCiAwIBIA== +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 65 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :rsassaPss + 13:d=1 hl=2 l= 52 cons: SEQUENCE + 15:d=2 hl=2 l= 15 cons: cont [ 0 ] + 17:d=3 hl=2 l= 13 cons: SEQUENCE + 19:d=4 hl=2 l= 9 prim: OBJECT :sha256 + 30:d=4 hl=2 l= 0 prim: NULL + 32:d=2 hl=2 l= 28 cons: cont [ 1 ] + 34:d=3 hl=2 l= 26 cons: SEQUENCE + 36:d=4 hl=2 l= 9 prim: OBJECT :mgf1 + 47:d=4 hl=2 l= 13 cons: SEQUENCE + 49:d=5 hl=2 l= 9 prim: OBJECT :sha256 + 60:d=5 hl=2 l= 0 prim: NULL + 62:d=2 hl=2 l= 3 cons: cont [ 2 ] + 64:d=3 hl=2 l= 1 prim: INTEGER :20 + + + +-----BEGIN DATA----- +K5BCjy4hCNAZBmRT+wS4h5wDg7pO67oHFabDt5cXNp8X6sLNH2vjICLtO2niPwZ/Yk2ySxC8MgO +/+U9sdSXxqA== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4IBAQCZqlXJhviFKOKHe1ssbm0ThtAnAbcuP3ACBZyfpBjfYlxAgltNzBnmEtxjsbZQPMXHDHy +Y+fdEXwK2vboCz7BzIRXcrcJGzjsBc2zPeNZlmhaadIoa5d8jy3kxnT+f3YVjKGZBqwDaqE5Kie +jhV0laTK+cNGFXo9a3ylICok+s4jVN2Y7qE+ImgyANbZyn1d6W6VnFf4GVvin2hFwTCcZnKA6Db +NYnArbbNmHmMB2S+1Kw9dAklnzZmwWgNSRirtTpUHTBIWYq3B0hPL8IzwKk89/iKDaY2fpV/Wnt +oL2mgM7oa/7+oQWa27BGYftYZmDpIQtNbUeO4VBnaeqGgA5f +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=4 l= 257 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha384-salt48-corrupted-data.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha384-salt48-corrupted-data.pem new file mode 100644 index 00000000..d3e7a0b7 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha384-salt48-corrupted-data.pem @@ -0,0 +1,63 @@ +This has had DATA corrupted, so the signature is not valid. + + + +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtVDcg1BMqPneiNBL5+mjEB5mxjJzgkm +ClZR5z1jNht+As6+Mlgflni0bB8LjhWbIt+dZ6Bt4cSHOnAOnkMDOFwtrxJE6Eg1GQ2ux9nDVNv +rQkoOLznXrxMh/af0pcSo8kItDmkqbV/fi3Q7agpbcWc/4wTZOfO6lns4nb5s08oaUv3uF5Wc0s +ktNr6he6R3zSQ6YK5KZFzQdnEtGc4gwHWXZ9xt4JeANht3m4RNpMY89qZsZxmqoewYHuXQUAfl7 +W0DC3hoxOoLwSqL2bt2zMMeR8WAo51YY0cJnzAEETcnWIM6ealb5Osj3iSEknxRTley47SsODQ0 +maUUWj8wEjwIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=4 l= 290 cons: SEQUENCE + 4:d=1 hl=2 l= 13 cons: SEQUENCE + 6:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 17:d=2 hl=2 l= 0 prim: NULL + 19:d=1 hl=4 l= 271 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MEEGCSqGSIb3DQEBCjA0oA8wDQYJYIZIAWUDBAICBQChHDAaBgkqhkiG9w0BAQgwDQYJYIZIAWU +DBAICBQCiAwIBMA== +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 65 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :rsassaPss + 13:d=1 hl=2 l= 52 cons: SEQUENCE + 15:d=2 hl=2 l= 15 cons: cont [ 0 ] + 17:d=3 hl=2 l= 13 cons: SEQUENCE + 19:d=4 hl=2 l= 9 prim: OBJECT :sha384 + 30:d=4 hl=2 l= 0 prim: NULL + 32:d=2 hl=2 l= 28 cons: cont [ 1 ] + 34:d=3 hl=2 l= 26 cons: SEQUENCE + 36:d=4 hl=2 l= 9 prim: OBJECT :mgf1 + 47:d=4 hl=2 l= 13 cons: SEQUENCE + 49:d=5 hl=2 l= 9 prim: OBJECT :sha384 + 60:d=5 hl=2 l= 0 prim: NULL + 62:d=2 hl=2 l= 3 cons: cont [ 2 ] + 64:d=3 hl=2 l= 1 prim: INTEGER :30 + + + +-----BEGIN DATA----- +TDrlz5dKOqfOQhirwHj00bsVlf+0WEe2qMe9l6SVr9SHB4Eow26r+aU7+pGZFp774O041xIeU2g +ZHYzNWBjGZQ== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4IBAQBvlL4AuwL3hEobMolBzR/0gzuJ9u4ATWEPO5uTiBtdJ5Nx9O6gFCrtZMwfEU9q4bzazKV +yWRSpn23GZjlmNYhFCNlfY3l6IlhxGEVz/YeOglrBR8hFbA17835jTmcCR09G6SZ7Wwm8NV7riw +woW15A1N2axuaAAcCxf9T48uehAmXrfApJygl2PWeKzzATUAuGzLLmQ0hNGVvUraxCJfiehtnMl +kWUiSZgjvmXKv6N2JtN8dHMHVEzPTBou4a25ozQIRAIGFvZYcDm5DW4CNJqFM1mTv2BEeOCW5hw +Bt60xm8kXOX4OGwgEyB/aHttWHPdAiFUoODo5j4MtcvajuWt +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=4 l= 257 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha384-salt48.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha384-salt48.pem new file mode 100644 index 00000000..ac65a9c9 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha384-salt48.pem @@ -0,0 +1,63 @@ + + + + +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtVDcg1BMqPneiNBL5+mjEB5mxjJzgkm +ClZR5z1jNht+As6+Mlgflni0bB8LjhWbIt+dZ6Bt4cSHOnAOnkMDOFwtrxJE6Eg1GQ2ux9nDVNv +rQkoOLznXrxMh/af0pcSo8kItDmkqbV/fi3Q7agpbcWc/4wTZOfO6lns4nb5s08oaUv3uF5Wc0s +ktNr6he6R3zSQ6YK5KZFzQdnEtGc4gwHWXZ9xt4JeANht3m4RNpMY89qZsZxmqoewYHuXQUAfl7 +W0DC3hoxOoLwSqL2bt2zMMeR8WAo51YY0cJnzAEETcnWIM6ealb5Osj3iSEknxRTley47SsODQ0 +maUUWj8wEjwIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=4 l= 290 cons: SEQUENCE + 4:d=1 hl=2 l= 13 cons: SEQUENCE + 6:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 17:d=2 hl=2 l= 0 prim: NULL + 19:d=1 hl=4 l= 271 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MEEGCSqGSIb3DQEBCjA0oA8wDQYJYIZIAWUDBAICBQChHDAaBgkqhkiG9w0BAQgwDQYJYIZIAWU +DBAICBQCiAwIBMA== +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 65 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :rsassaPss + 13:d=1 hl=2 l= 52 cons: SEQUENCE + 15:d=2 hl=2 l= 15 cons: cont [ 0 ] + 17:d=3 hl=2 l= 13 cons: SEQUENCE + 19:d=4 hl=2 l= 9 prim: OBJECT :sha384 + 30:d=4 hl=2 l= 0 prim: NULL + 32:d=2 hl=2 l= 28 cons: cont [ 1 ] + 34:d=3 hl=2 l= 26 cons: SEQUENCE + 36:d=4 hl=2 l= 9 prim: OBJECT :mgf1 + 47:d=4 hl=2 l= 13 cons: SEQUENCE + 49:d=5 hl=2 l= 9 prim: OBJECT :sha384 + 60:d=5 hl=2 l= 0 prim: NULL + 62:d=2 hl=2 l= 3 cons: cont [ 2 ] + 64:d=3 hl=2 l= 1 prim: INTEGER :30 + + + +-----BEGIN DATA----- +TDRlz5dKOqfOQhirwHj00bsVlf+0WEe2qMe9l6SVr9SHB4Eow26r+aU7+pGZFp774O041xIeU2g +ZHYzNWBjGZQ== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4IBAQBvlL4AuwL3hEobMolBzR/0gzuJ9u4ATWEPO5uTiBtdJ5Nx9O6gFCrtZMwfEU9q4bzazKV +yWRSpn23GZjlmNYhFCNlfY3l6IlhxGEVz/YeOglrBR8hFbA17835jTmcCR09G6SZ7Wwm8NV7riw +woW15A1N2axuaAAcCxf9T48uehAmXrfApJygl2PWeKzzATUAuGzLLmQ0hNGVvUraxCJfiehtnMl +kWUiSZgjvmXKv6N2JtN8dHMHVEzPTBou4a25ozQIRAIGFvZYcDm5DW4CNJqFM1mTv2BEeOCW5hw +Bt60xm8kXOX4OGwgEyB/aHttWHPdAiFUoODo5j4MtcvajuWt +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=4 l= 257 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha512-salt64-corrupted-data.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha512-salt64-corrupted-data.pem new file mode 100644 index 00000000..7696270e --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha512-salt64-corrupted-data.pem @@ -0,0 +1,63 @@ +This has had DATA corrupted, so the signature is not valid. + + + +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtVDcg1BMqPneiNBL5+mjEB5mxjJzgkm +ClZR5z1jNht+As6+Mlgflni0bB8LjhWbIt+dZ6Bt4cSHOnAOnkMDOFwtrxJE6Eg1GQ2ux9nDVNv +rQkoOLznXrxMh/af0pcSo8kItDmkqbV/fi3Q7agpbcWc/4wTZOfO6lns4nb5s08oaUv3uF5Wc0s +ktNr6he6R3zSQ6YK5KZFzQdnEtGc4gwHWXZ9xt4JeANht3m4RNpMY89qZsZxmqoewYHuXQUAfl7 +W0DC3hoxOoLwSqL2bt2zMMeR8WAo51YY0cJnzAEETcnWIM6ealb5Osj3iSEknxRTley47SsODQ0 +maUUWj8wEjwIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=4 l= 290 cons: SEQUENCE + 4:d=1 hl=2 l= 13 cons: SEQUENCE + 6:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 17:d=2 hl=2 l= 0 prim: NULL + 19:d=1 hl=4 l= 271 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MEEGCSqGSIb3DQEBCjA0oA8wDQYJYIZIAWUDBAIDBQChHDAaBgkqhkiG9w0BAQgwDQYJYIZIAWU +DBAIDBQCiAwIBQA== +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 65 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :rsassaPss + 13:d=1 hl=2 l= 52 cons: SEQUENCE + 15:d=2 hl=2 l= 15 cons: cont [ 0 ] + 17:d=3 hl=2 l= 13 cons: SEQUENCE + 19:d=4 hl=2 l= 9 prim: OBJECT :sha512 + 30:d=4 hl=2 l= 0 prim: NULL + 32:d=2 hl=2 l= 28 cons: cont [ 1 ] + 34:d=3 hl=2 l= 26 cons: SEQUENCE + 36:d=4 hl=2 l= 9 prim: OBJECT :mgf1 + 47:d=4 hl=2 l= 13 cons: SEQUENCE + 49:d=5 hl=2 l= 9 prim: OBJECT :sha512 + 60:d=5 hl=2 l= 0 prim: NULL + 62:d=2 hl=2 l= 3 cons: cont [ 2 ] + 64:d=3 hl=2 l= 1 prim: INTEGER :40 + + + +-----BEGIN DATA----- +BENGYY+GrDsvawb08kP/OZ0iWbG5yBlJpCIJ1YLPfTCjEouvBzwAkWpUEsI3zk0N8+xcMyJ3qOi +pIsX4YnFfPw== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4IBAQBPA1K787NaEycdAHDfil1/F2imI9PcVD5ZuloBz9Qj1q4ZfdZ9PMagunDBVRQoBr1VDhI +6VkDfyQvhKebIbSsfk/qJoNZGCZtsKhXcGm5ZI2+fUbbMW7EwlKle8SqXCHRAIICND/qwundcqp +kLNHOqOK8GRUYHnJcMmQbMCBUx9aw3IRu2LRp6FtBwA16stpSat/NlX+aH79f1B/uoFpDVzG7Kw +oqmAuv81vOVQSCNTn4MrCyxmJTLqbk6frXN7nRF+SQOPksUwXXYgpzGyFhrwgUHwkc3skNx/jOT +fpWnvjOUVbi80Sa9i7EIOcmt4IP4a3BRPWT/MTYDDPADIgVf +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=4 l= 257 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha512-salt64.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha512-salt64.pem new file mode 100644 index 00000000..3504cc8e --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/ours/rsa-pss-sha512-salt64.pem @@ -0,0 +1,63 @@ + + + + +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtVDcg1BMqPneiNBL5+mjEB5mxjJzgkm +ClZR5z1jNht+As6+Mlgflni0bB8LjhWbIt+dZ6Bt4cSHOnAOnkMDOFwtrxJE6Eg1GQ2ux9nDVNv +rQkoOLznXrxMh/af0pcSo8kItDmkqbV/fi3Q7agpbcWc/4wTZOfO6lns4nb5s08oaUv3uF5Wc0s +ktNr6he6R3zSQ6YK5KZFzQdnEtGc4gwHWXZ9xt4JeANht3m4RNpMY89qZsZxmqoewYHuXQUAfl7 +W0DC3hoxOoLwSqL2bt2zMMeR8WAo51YY0cJnzAEETcnWIM6ealb5Osj3iSEknxRTley47SsODQ0 +maUUWj8wEjwIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=4 l= 290 cons: SEQUENCE + 4:d=1 hl=2 l= 13 cons: SEQUENCE + 6:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 17:d=2 hl=2 l= 0 prim: NULL + 19:d=1 hl=4 l= 271 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MEEGCSqGSIb3DQEBCjA0oA8wDQYJYIZIAWUDBAIDBQChHDAaBgkqhkiG9w0BAQgwDQYJYIZIAWU +DBAIDBQCiAwIBQA== +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 65 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :rsassaPss + 13:d=1 hl=2 l= 52 cons: SEQUENCE + 15:d=2 hl=2 l= 15 cons: cont [ 0 ] + 17:d=3 hl=2 l= 13 cons: SEQUENCE + 19:d=4 hl=2 l= 9 prim: OBJECT :sha512 + 30:d=4 hl=2 l= 0 prim: NULL + 32:d=2 hl=2 l= 28 cons: cont [ 1 ] + 34:d=3 hl=2 l= 26 cons: SEQUENCE + 36:d=4 hl=2 l= 9 prim: OBJECT :mgf1 + 47:d=4 hl=2 l= 13 cons: SEQUENCE + 49:d=5 hl=2 l= 9 prim: OBJECT :sha512 + 60:d=5 hl=2 l= 0 prim: NULL + 62:d=2 hl=2 l= 3 cons: cont [ 2 ] + 64:d=3 hl=2 l= 1 prim: INTEGER :40 + + + +-----BEGIN DATA----- +BEnGYY+GrDsvawb08kP/OZ0iWbG5yBlJpCIJ1YLPfTCjEouvBzwAkWpUEsI3zk0N8+xcMyJ3qOi +pIsX4YnFfPw== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4IBAQBPA1K787NaEycdAHDfil1/F2imI9PcVD5ZuloBz9Qj1q4ZfdZ9PMagunDBVRQoBr1VDhI +6VkDfyQvhKebIbSsfk/qJoNZGCZtsKhXcGm5ZI2+fUbbMW7EwlKle8SqXCHRAIICND/qwundcqp +kLNHOqOK8GRUYHnJcMmQbMCBUx9aw3IRu2LRp6FtBwA16stpSat/NlX+aH79f1B/uoFpDVzG7Kw +oqmAuv81vOVQSCNTn4MrCyxmJTLqbk6frXN7nRF+SQOPksUwXXYgpzGyFhrwgUHwkc3skNx/jOT +fpWnvjOUVbi80Sa9i7EIOcmt4IP4a3BRPWT/MTYDDPADIgVf +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=4 l= 257 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1-bad-key-der-length.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1-bad-key-der-length.pem new file mode 100644 index 00000000..ef7967d8 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1-bad-key-der-length.pem @@ -0,0 +1,44 @@ +Same test as rsa-pkcs1-sha1.pem except the length of the first SEQUENCE has +been increased by 2 (which makes it invalid). + + + +-----BEGIN PUBLIC KEY----- +MIOfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClbkoOcBAXWJpRh9x+qEHRVvLsDjatUqRN/rH +mH3rZkdjFEFb/7bFitMDyg6EqiKOU3/Umq3KRy7MHzqv84LHf1c2VCAltWyuLbfXWce9jd8CSHL +I8Jwpw4lmOb/idGfEFrMLT8Ms18pKA4Thrb2TE7yLh4fINDOjP+yJJvZohNwIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] +Error in encoding + + + +-----BEGIN ALGORITHM----- +MA0GCSqGSIb3DQEBBQUA +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 13 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :sha1WithRSAEncryption + 13:d=1 hl=2 l= 0 prim: NULL + + + +-----BEGIN DATA----- +zch9oiPXht87ReC7vHITJtHuKvgGzDFUdcxvDZxm4bYjcdRc4jkuGskoRMMQEC8Vag2NUsH0xAu +jqmUJV4bLdpdXplY7qVj+0LzJhOi1F6PV9RWyO4pB50qoZ2k/kN+wYabobfqu5kRywA5fIJRXKc +vr538Gznjgj0CY+6QfnWGTwDF+i2DUtghKy0LSnjgIo7w3LYXjMRcPy/fMctC3HClmSLOk0Q9BY +pXQgHqmJcqydE/Z6o/SI8QlNwKYKL0WvgJUbxMP0uM7k20mduCK7RtzMYt1CgFn0A== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBAGvDoGZWhCkwokfjDVhktNgZI2unxollhirX28TiSvKOhrtTHwM1i+X7dHd8YIb4UMrviT8 +Nb8wtDJHsATaTtOoAuAzUmqxOy1+JEa/lOa2kqPOCPR0T5HLRSQVHxlnHYX89JAh9228rcglhZ/ +wJfKsY6aRY/LY0zc6O41iUxITX +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1-bad-key-der-null.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1-bad-key-der-null.pem new file mode 100644 index 00000000..59559f44 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1-bad-key-der-null.pem @@ -0,0 +1,52 @@ +Same test as rsa-pkcs1-sha1.pem except an extra NULL (0x05, 0x00) has been +appended to the SPKI. + +The DER can still be parsed, however it should fail due to the unconsumed data +at the end. + + + +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClbkoOcBAXWJpRh9x+qEHRVvLsDjatUqRN/rH +mH3rZkdjFEFb/7bFitMDyg6EqiKOU3/Umq3KRy7MHzqv84LHf1c2VCAltWyuLbfXWce9jd8CSHL +I8Jwpw4lmOb/idGfEFrMLT8Ms18pKA4Thrb2TE7yLh4fINDOjP+yJJvZohNwIDAQABBQA= +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 159 cons: SEQUENCE + 3:d=1 hl=2 l= 13 cons: SEQUENCE + 5:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 16:d=2 hl=2 l= 0 prim: NULL + 18:d=1 hl=3 l= 141 prim: BIT STRING + 162:d=0 hl=2 l= 0 prim: NULL + + + +-----BEGIN ALGORITHM----- +MA0GCSqGSIb3DQEBBQUA +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 13 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :sha1WithRSAEncryption + 13:d=1 hl=2 l= 0 prim: NULL + + + +-----BEGIN DATA----- +zch9oiPXht87ReC7vHITJtHuKvgGzDFUdcxvDZxm4bYjcdRc4jkuGskoRMMQEC8Vag2NUsH0xAu +jqmUJV4bLdpdXplY7qVj+0LzJhOi1F6PV9RWyO4pB50qoZ2k/kN+wYabobfqu5kRywA5fIJRXKc +vr538Gznjgj0CY+6QfnWGTwDF+i2DUtghKy0LSnjgIo7w3LYXjMRcPy/fMctC3HClmSLOk0Q9BY +pXQgHqmJcqydE/Z6o/SI8QlNwKYKL0WvgJUbxMP0uM7k20mduCK7RtzMYt1CgFn0A== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBAGvDoGZWhCkwokfjDVhktNgZI2unxollhirX28TiSvKOhrtTHwM1i+X7dHd8YIb4UMrviT8 +Nb8wtDJHsATaTtOoAuAzUmqxOy1+JEa/lOa2kqPOCPR0T5HLRSQVHxlnHYX89JAh9228rcglhZ/ +wJfKsY6aRY/LY0zc6O41iUxITX +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1-key-params-absent.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1-key-params-absent.pem new file mode 100644 index 00000000..10cc3d06 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1-key-params-absent.pem @@ -0,0 +1,49 @@ +Same test as rsa-pkcs1-sha1.pem, except the SPKI has been modified so the +algorithm parameters are absent rather than NULL. + +This should fail because RFC 3279 says the parameters MUST be NULL. + + + +-----BEGIN PUBLIC KEY----- +MIGdMAsGCSqGSIb3DQEBAQOBjQAwgYkCgYEApW5KDnAQF1iaUYfcfqhB0Vby7A42rVKkTf6x5h9 +62ZHYxRBW/+2xYrTA8oOhKoijlN/1JqtykcuzB86r/OCx39XNlQgJbVsri2311nHvY3fAkhyyPC +cKcOJZjm/4nRnxBazC0/DLNfKSgOE4a29kxO8i4eHyDQzoz/siSb2aITcCAwEAAQ== +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 157 cons: SEQUENCE + 3:d=1 hl=2 l= 11 cons: SEQUENCE + 5:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 16:d=1 hl=3 l= 141 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MA0GCSqGSIb3DQEBBQUA +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 13 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :sha1WithRSAEncryption + 13:d=1 hl=2 l= 0 prim: NULL + + + +-----BEGIN DATA----- +zch9oiPXht87ReC7vHITJtHuKvgGzDFUdcxvDZxm4bYjcdRc4jkuGskoRMMQEC8Vag2NUsH0xAu +jqmUJV4bLdpdXplY7qVj+0LzJhOi1F6PV9RWyO4pB50qoZ2k/kN+wYabobfqu5kRywA5fIJRXKc +vr538Gznjgj0CY+6QfnWGTwDF+i2DUtghKy0LSnjgIo7w3LYXjMRcPy/fMctC3HClmSLOk0Q9BY +pXQgHqmJcqydE/Z6o/SI8QlNwKYKL0WvgJUbxMP0uM7k20mduCK7RtzMYt1CgFn0A== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBAGvDoGZWhCkwokfjDVhktNgZI2unxollhirX28TiSvKOhrtTHwM1i+X7dHd8YIb4UMrviT8 +Nb8wtDJHsATaTtOoAuAzUmqxOy1+JEa/lOa2kqPOCPR0T5HLRSQVHxlnHYX89JAh9228rcglhZ/ +wJfKsY6aRY/LY0zc6O41iUxITX +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1-using-pss-key-no-params.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1-using-pss-key-no-params.pem new file mode 100644 index 00000000..0dfff975 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1-using-pss-key-no-params.pem @@ -0,0 +1,51 @@ +This is the same test as rsa-pkcs1-sha1.pem, except the SPKI has been modified +so that the key algorithm is rsaPss (1.2.840.113549.1.1.10) with absent +parameters. + +Subsequently this should fail, as a PSS key should not be used with a signature +algorithm for PKCS#1 v1.5. + + + +-----BEGIN PUBLIC KEY----- +MIGdMAsGCSqGSIb3DQEBCgOBjQAwgYkCgYEApW5KDnAQF1iaUYfcfqhB0Vby7A42rVKkTf6x5h9 +62ZHYxRBW/+2xYrTA8oOhKoijlN/1JqtykcuzB86r/OCx39XNlQgJbVsri2311nHvY3fAkhyyPC +cKcOJZjm/4nRnxBazC0/DLNfKSgOE4a29kxO8i4eHyDQzoz/siSb2aITcCAwEAAQ== +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 157 cons: SEQUENCE + 3:d=1 hl=2 l= 11 cons: SEQUENCE + 5:d=2 hl=2 l= 9 prim: OBJECT :rsassaPss + 16:d=1 hl=3 l= 141 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MA0GCSqGSIb3DQEBBQUA +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 13 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :sha1WithRSAEncryption + 13:d=1 hl=2 l= 0 prim: NULL + + + +-----BEGIN DATA----- +zch9oiPXht87ReC7vHITJtHuKvgGzDFUdcxvDZxm4bYjcdRc4jkuGskoRMMQEC8Vag2NUsH0xAu +jqmUJV4bLdpdXplY7qVj+0LzJhOi1F6PV9RWyO4pB50qoZ2k/kN+wYabobfqu5kRywA5fIJRXKc +vr538Gznjgj0CY+6QfnWGTwDF+i2DUtghKy0LSnjgIo7w3LYXjMRcPy/fMctC3HClmSLOk0Q9BY +pXQgHqmJcqydE/Z6o/SI8QlNwKYKL0WvgJUbxMP0uM7k20mduCK7RtzMYt1CgFn0A== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBAGvDoGZWhCkwokfjDVhktNgZI2unxollhirX28TiSvKOhrtTHwM1i+X7dHd8YIb4UMrviT8 +Nb8wtDJHsATaTtOoAuAzUmqxOy1+JEa/lOa2kqPOCPR0T5HLRSQVHxlnHYX89JAh9228rcglhZ/ +wJfKsY6aRY/LY0zc6O41iUxITX +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1-wrong-algorithm.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1-wrong-algorithm.pem new file mode 100644 index 00000000..9aaedbab --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1-wrong-algorithm.pem @@ -0,0 +1,48 @@ +This is the same as rsa-pkcs1-sha1.pem, however the ALGORITHM has been change +to have SHA256 instead of SHA1. Using this algorithm verification should fail. + + + +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClbkoOcBAXWJpRh9x+qEHRVvLsDjatUqRN/rH +mH3rZkdjFEFb/7bFitMDyg6EqiKOU3/Umq3KRy7MHzqv84LHf1c2VCAltWyuLbfXWce9jd8CSHL +I8Jwpw4lmOb/idGfEFrMLT8Ms18pKA4Thrb2TE7yLh4fINDOjP+yJJvZohNwIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 159 cons: SEQUENCE + 3:d=1 hl=2 l= 13 cons: SEQUENCE + 5:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 16:d=2 hl=2 l= 0 prim: NULL + 18:d=1 hl=3 l= 141 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MA0GCSqGSIb3DQEBCwUA +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 13 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :sha256WithRSAEncryption + 13:d=1 hl=2 l= 0 prim: NULL + + + +-----BEGIN DATA----- +zch9oiPXht87ReC7vHITJtHuKvgGzDFUdcxvDZxm4bYjcdRc4jkuGskoRMMQEC8Vag2NUsH0xAu +jqmUJV4bLdpdXplY7qVj+0LzJhOi1F6PV9RWyO4pB50qoZ2k/kN+wYabobfqu5kRywA5fIJRXKc +vr538Gznjgj0CY+6QfnWGTwDF+i2DUtghKy0LSnjgIo7w3LYXjMRcPy/fMctC3HClmSLOk0Q9BY +pXQgHqmJcqydE/Z6o/SI8QlNwKYKL0WvgJUbxMP0uM7k20mduCK7RtzMYt1CgFn0A== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBAGvDoGZWhCkwokfjDVhktNgZI2unxollhirX28TiSvKOhrtTHwM1i+X7dHd8YIb4UMrviT8 +Nb8wtDJHsATaTtOoAuAzUmqxOy1+JEa/lOa2kqPOCPR0T5HLRSQVHxlnHYX89JAh9228rcglhZ/ +wJfKsY6aRY/LY0zc6O41iUxITX +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1.pem new file mode 100644 index 00000000..0972aca9 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha1.pem @@ -0,0 +1,53 @@ +The key, message, and signature come from Example 1 of: +ftp://ftp.rsa.com/pub/rsalabs/tmp/pkcs1v15sign-vectors.txt + +(The algorithm DER was synthesized to match, and the signature enclosed in a BIT STRING). + +It uses an RSA key with modulus length of 1024 bits, PKCS#1 v1.5 padding, and +SHA-1 as the digest. + + + +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClbkoOcBAXWJpRh9x+qEHRVvLsDjatUqRN/rH +mH3rZkdjFEFb/7bFitMDyg6EqiKOU3/Umq3KRy7MHzqv84LHf1c2VCAltWyuLbfXWce9jd8CSHL +I8Jwpw4lmOb/idGfEFrMLT8Ms18pKA4Thrb2TE7yLh4fINDOjP+yJJvZohNwIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 159 cons: SEQUENCE + 3:d=1 hl=2 l= 13 cons: SEQUENCE + 5:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 16:d=2 hl=2 l= 0 prim: NULL + 18:d=1 hl=3 l= 141 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MA0GCSqGSIb3DQEBBQUA +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 13 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :sha1WithRSAEncryption + 13:d=1 hl=2 l= 0 prim: NULL + + + +-----BEGIN DATA----- +zch9oiPXht87ReC7vHITJtHuKvgGzDFUdcxvDZxm4bYjcdRc4jkuGskoRMMQEC8Vag2NUsH0xAu +jqmUJV4bLdpdXplY7qVj+0LzJhOi1F6PV9RWyO4pB50qoZ2k/kN+wYabobfqu5kRywA5fIJRXKc +vr538Gznjgj0CY+6QfnWGTwDF+i2DUtghKy0LSnjgIo7w3LYXjMRcPy/fMctC3HClmSLOk0Q9BY +pXQgHqmJcqydE/Z6o/SI8QlNwKYKL0WvgJUbxMP0uM7k20mduCK7RtzMYt1CgFn0A== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBAGvDoGZWhCkwokfjDVhktNgZI2unxollhirX28TiSvKOhrtTHwM1i+X7dHd8YIb4UMrviT8 +Nb8wtDJHsATaTtOoAuAzUmqxOy1+JEa/lOa2kqPOCPR0T5HLRSQVHxlnHYX89JAh9228rcglhZ/ +wJfKsY6aRY/LY0zc6O41iUxITX +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha256-key-encoded-ber.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha256-key-encoded-ber.pem new file mode 100644 index 00000000..2a8db4a6 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha256-key-encoded-ber.pem @@ -0,0 +1,62 @@ +This is the same test as rsa-pkcs1-sha256.pem except the SPKI has been encoded +using a non-minimal length for the outtermost SEQUENCE. + +Under DER, the tag-length-value encodings should be minimal and hence this should fail. + +Specifically the SPKI start was changed from: + 30 81 9f +To: + 30 82 00 9f + +(the length of 0x9F is being expressed using 2 bytes instead of 1) + + + +-----BEGIN PUBLIC KEY----- +MIIAnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqkfgdjI9YqzadSZ2Ns0CEEUD8+8m7OplIx0 +94X+QD8mooNrunwT04asbLIINGL4qiI/+9IVSvyV3Kj9c4EeQIbANGoJ8AI3wf6MOBB/txxGFed +qqcTffKVMQvtZdoYFbZ/MQkvyRsoyvunb/pWcN4sSaF9kY1bXSeP3J99fBIYUCAwEAAQ== +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=4 l= 159 cons: SEQUENCE + 4:d=1 hl=2 l= 13 cons: SEQUENCE + 6:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 17:d=2 hl=2 l= 0 prim: NULL + 19:d=1 hl=3 l= 141 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MA0GCSqGSIb3DQEBCwUA +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 13 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :sha256WithRSAEncryption + 13:d=1 hl=2 l= 0 prim: NULL + + + +-----BEGIN DATA----- +MIIB46ADAgECAgkA3l4tFOVii0UwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCQVUxEzARBgN +VBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEPMA0GA1 +UEAwwGTXkga2V5MB4XDTE1MDcwMjE3MDYzOVoXDTE2MDcwMTE3MDYzOVowVjELMAkGA1UEBhMCQ +VUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0 +ZDEPMA0GA1UEAwwGTXkga2V5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqR+B2Mj1irNp +1JnY2zQIQRQPz7ybs6mUjHT3hf5APyaig2u6fBPThqxssgg0YviqIj/70hVK/JXcqP1zgR5AhsA +0agnwAjfB/ow4EH+3HEYV52qpxN98pUxC+1l2hgVtn8xCS/JGyjK+6dv+lZw3ixJoX2RjVtdJ4/ +cn318EhhQIDAQABo1AwTjAdBgNVHQ4EFgQUzQBVKTEknyLndWd2HTsBdTKvyikwHwYDVR0jBBgw +FoAUzQBVKTEknyLndWd2HTsBdTKvyikwDAYDVR0TBAUwAwEB/w== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBADrHSmFSJw/Gv7hs5PNzpaJwAri/sitarIZfzN/SjR+n8L8yeTEoiDb1+BkxlFvXvPHTaOK +oO3WlslNNOxh1W5/JkYYGOUkCcyIjnln6qS560imcr3VNjomT/M8M2Iss+rJiKau1TRuaP7H8i6 ++Gqf3saGdr8/LnvFAdNQvkalQt +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha256-spki-non-null-params.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha256-spki-non-null-params.pem new file mode 100644 index 00000000..4e7fc969 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha256-spki-non-null-params.pem @@ -0,0 +1,59 @@ +This is the same test as rsa-pkcs1-sha256.pem except the SPKI has been tampered +with. The parameters have been changed from NULL to an INTEGER. + +This was done by changing: + + 05 00 (NULL) +To: + 02 00 (INTEGER) + + + +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQIAA4GNADCBiQKBgQCqR+B2Mj1irNp1JnY2zQIQRQPz7ybs6mUjHT3 +hf5APyaig2u6fBPThqxssgg0YviqIj/70hVK/JXcqP1zgR5AhsA0agnwAjfB/ow4EH+3HEYV52q +pxN98pUxC+1l2hgVtn8xCS/JGyjK+6dv+lZw3ixJoX2RjVtdJ4/cn318EhhQIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 159 cons: SEQUENCE + 3:d=1 hl=2 l= 13 cons: SEQUENCE + 5:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 16:d=2 hl=2 l= 0 prim: INTEGER :00 + 18:d=1 hl=3 l= 141 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MA0GCSqGSIb3DQEBCwUA +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 13 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :sha256WithRSAEncryption + 13:d=1 hl=2 l= 0 prim: NULL + + + +-----BEGIN DATA----- +MIIB46ADAgECAgkA3l4tFOVii0UwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCQVUxEzARBgN +VBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEPMA0GA1 +UEAwwGTXkga2V5MB4XDTE1MDcwMjE3MDYzOVoXDTE2MDcwMTE3MDYzOVowVjELMAkGA1UEBhMCQ +VUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0 +ZDEPMA0GA1UEAwwGTXkga2V5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqR+B2Mj1irNp +1JnY2zQIQRQPz7ybs6mUjHT3hf5APyaig2u6fBPThqxssgg0YviqIj/70hVK/JXcqP1zgR5AhsA +0agnwAjfB/ow4EH+3HEYV52qpxN98pUxC+1l2hgVtn8xCS/JGyjK+6dv+lZw3ixJoX2RjVtdJ4/ +cn318EhhQIDAQABo1AwTjAdBgNVHQ4EFgQUzQBVKTEknyLndWd2HTsBdTKvyikwHwYDVR0jBBgw +FoAUzQBVKTEknyLndWd2HTsBdTKvyikwDAYDVR0TBAUwAwEB/w== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBADrHSmFSJw/Gv7hs5PNzpaJwAri/sitarIZfzN/SjR+n8L8yeTEoiDb1+BkxlFvXvPHTaOK +oO3WlslNNOxh1W5/JkYYGOUkCcyIjnln6qS560imcr3VNjomT/M8M2Iss+rJiKau1TRuaP7H8i6 ++Gqf3saGdr8/LnvFAdNQvkalQt +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha256-using-ecdsa-algorithm.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha256-using-ecdsa-algorithm.pem new file mode 100644 index 00000000..a9b9eb92 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha256-using-ecdsa-algorithm.pem @@ -0,0 +1,55 @@ +This test specified a valid RSA PKCS#1 v.1.5 signature and RSA key (the same as rsa-pkcs1-sha256.pem). + +The problem however is the signature algorithm is indicated as being ECDSA. + +Signature verification consequently should fail. + + + +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqR+B2Mj1irNp1JnY2zQIQRQPz7ybs6mUjHT3 +hf5APyaig2u6fBPThqxssgg0YviqIj/70hVK/JXcqP1zgR5AhsA0agnwAjfB/ow4EH+3HEYV52q +pxN98pUxC+1l2hgVtn8xCS/JGyjK+6dv+lZw3ixJoX2RjVtdJ4/cn318EhhQIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 159 cons: SEQUENCE + 3:d=1 hl=2 l= 13 cons: SEQUENCE + 5:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 16:d=2 hl=2 l= 0 prim: NULL + 18:d=1 hl=3 l= 141 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MAoGCCqGSM49BAMC +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 10 cons: SEQUENCE + 2:d=1 hl=2 l= 8 prim: OBJECT :ecdsa-with-SHA256 + + + +-----BEGIN DATA----- +MIIB46ADAgECAgkA3l4tFOVii0UwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCQVUxEzARBgN +VBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEPMA0GA1 +UEAwwGTXkga2V5MB4XDTE1MDcwMjE3MDYzOVoXDTE2MDcwMTE3MDYzOVowVjELMAkGA1UEBhMCQ +VUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0 +ZDEPMA0GA1UEAwwGTXkga2V5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqR+B2Mj1irNp +1JnY2zQIQRQPz7ybs6mUjHT3hf5APyaig2u6fBPThqxssgg0YviqIj/70hVK/JXcqP1zgR5AhsA +0agnwAjfB/ow4EH+3HEYV52qpxN98pUxC+1l2hgVtn8xCS/JGyjK+6dv+lZw3ixJoX2RjVtdJ4/ +cn318EhhQIDAQABo1AwTjAdBgNVHQ4EFgQUzQBVKTEknyLndWd2HTsBdTKvyikwHwYDVR0jBBgw +FoAUzQBVKTEknyLndWd2HTsBdTKvyikwDAYDVR0TBAUwAwEB/w== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBADrHSmFSJw/Gv7hs5PNzpaJwAri/sitarIZfzN/SjR+n8L8yeTEoiDb1+BkxlFvXvPHTaOK +oO3WlslNNOxh1W5/JkYYGOUkCcyIjnln6qS560imcr3VNjomT/M8M2Iss+rJiKau1TRuaP7H8i6 ++Gqf3saGdr8/LnvFAdNQvkalQt +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha256-using-id-ea-rsa.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha256-using-id-ea-rsa.pem new file mode 100644 index 00000000..dd5d39cb --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha256-using-id-ea-rsa.pem @@ -0,0 +1,54 @@ +This is the same test as rsa-pkcs1-sha256.pem except the SPKI has been tampered +with. Rather than using an rsaEncryption OID for the key's algorithm, it uses +id-ea-rsa (2.5.8.1.1). + + + +-----BEGIN PUBLIC KEY----- +MIGaMAgGBFUIAQEFAAOBjQAwgYkCgYEAqkfgdjI9YqzadSZ2Ns0CEEUD8+8m7OplIx094X+QD8m +ooNrunwT04asbLIINGL4qiI/+9IVSvyV3Kj9c4EeQIbANGoJ8AI3wf6MOBB/txxGFedqqcTffKV +MQvtZdoYFbZ/MQkvyRsoyvunb/pWcN4sSaF9kY1bXSeP3J99fBIYUCAwEAAQ== +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 154 cons: SEQUENCE + 3:d=1 hl=2 l= 8 cons: SEQUENCE + 5:d=2 hl=2 l= 4 prim: OBJECT :rsa + 11:d=2 hl=2 l= 0 prim: NULL + 13:d=1 hl=3 l= 141 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MA0GCSqGSIb3DQEBCwUA +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 13 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :sha256WithRSAEncryption + 13:d=1 hl=2 l= 0 prim: NULL + + + +-----BEGIN DATA----- +MIIB46ADAgECAgkA3l4tFOVii0UwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCQVUxEzARBgN +VBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEPMA0GA1 +UEAwwGTXkga2V5MB4XDTE1MDcwMjE3MDYzOVoXDTE2MDcwMTE3MDYzOVowVjELMAkGA1UEBhMCQ +VUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0 +ZDEPMA0GA1UEAwwGTXkga2V5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqR+B2Mj1irNp +1JnY2zQIQRQPz7ybs6mUjHT3hf5APyaig2u6fBPThqxssgg0YviqIj/70hVK/JXcqP1zgR5AhsA +0agnwAjfB/ow4EH+3HEYV52qpxN98pUxC+1l2hgVtn8xCS/JGyjK+6dv+lZw3ixJoX2RjVtdJ4/ +cn318EhhQIDAQABo1AwTjAdBgNVHQ4EFgQUzQBVKTEknyLndWd2HTsBdTKvyikwHwYDVR0jBBgw +FoAUzQBVKTEknyLndWd2HTsBdTKvyikwDAYDVR0TBAUwAwEB/w== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBADrHSmFSJw/Gv7hs5PNzpaJwAri/sitarIZfzN/SjR+n8L8yeTEoiDb1+BkxlFvXvPHTaOK +oO3WlslNNOxh1W5/JkYYGOUkCcyIjnln6qS560imcr3VNjomT/M8M2Iss+rJiKau1TRuaP7H8i6 ++Gqf3saGdr8/LnvFAdNQvkalQt +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha256.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha256.pem new file mode 100644 index 00000000..8509111e --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pkcs1-sha256.pem @@ -0,0 +1,86 @@ +This test data was produced by creating a self-signed EC cert using OpenSSL, +and then extracting the relevant fields. + +It uses RSA PKCS#1 v1.5 with SHA-256 and a 1024-bit key. + +(1) Generate self-signed certificate + + openssl genrsa -out rsa_key.pem 1024 + openssl req -new -key rsa_key.pem -x509 -nodes -days 365 -out cert.pem + +(2) Extract public key + + openssl x509 -in cert.pem -pubkey -noout > pubkey.pem + cat pubkey.pem + +(3) Extract signed data (tbsCertificate) + + openssl asn1parse -in cert.pem -out tbs -noout -strparse 4 + base64 tbs + +(4) Extract signature algorithm + + # Find the offset of the signature algorithm near the end (491 in this case) + openssl asn1parse -in cert.pem + + openssl asn1parse -in cert.pem -out alg -noout -strparse 491 + base64 alg + +(5) Extract the signature + + # Find the final offset of BIT STRING (506 in this case) + openssl asn1parse -in cert.pem + + openssl asn1parse -in cert.pem -out sig -noout -strparse 506 + base64 sig + + + +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqR+B2Mj1irNp1JnY2zQIQRQPz7ybs6mUjHT3 +hf5APyaig2u6fBPThqxssgg0YviqIj/70hVK/JXcqP1zgR5AhsA0agnwAjfB/ow4EH+3HEYV52q +pxN98pUxC+1l2hgVtn8xCS/JGyjK+6dv+lZw3ixJoX2RjVtdJ4/cn318EhhQIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 159 cons: SEQUENCE + 3:d=1 hl=2 l= 13 cons: SEQUENCE + 5:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 16:d=2 hl=2 l= 0 prim: NULL + 18:d=1 hl=3 l= 141 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MA0GCSqGSIb3DQEBCwUA +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 13 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :sha256WithRSAEncryption + 13:d=1 hl=2 l= 0 prim: NULL + + + +-----BEGIN DATA----- +MIIB46ADAgECAgkA3l4tFOVii0UwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCQVUxEzARBgN +VBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEPMA0GA1 +UEAwwGTXkga2V5MB4XDTE1MDcwMjE3MDYzOVoXDTE2MDcwMTE3MDYzOVowVjELMAkGA1UEBhMCQ +VUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0 +ZDEPMA0GA1UEAwwGTXkga2V5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqR+B2Mj1irNp +1JnY2zQIQRQPz7ybs6mUjHT3hf5APyaig2u6fBPThqxssgg0YviqIj/70hVK/JXcqP1zgR5AhsA +0agnwAjfB/ow4EH+3HEYV52qpxN98pUxC+1l2hgVtn8xCS/JGyjK+6dv+lZw3ixJoX2RjVtdJ4/ +cn318EhhQIDAQABo1AwTjAdBgNVHQ4EFgQUzQBVKTEknyLndWd2HTsBdTKvyikwHwYDVR0jBBgw +FoAUzQBVKTEknyLndWd2HTsBdTKvyikwDAYDVR0TBAUwAwEB/w== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBADrHSmFSJw/Gv7hs5PNzpaJwAri/sitarIZfzN/SjR+n8L8yeTEoiDb1+BkxlFvXvPHTaOK +oO3WlslNNOxh1W5/JkYYGOUkCcyIjnln6qS560imcr3VNjomT/M8M2Iss+rJiKau1TRuaP7H8i6 ++Gqf3saGdr8/LnvFAdNQvkalQt +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha1-salt20-using-pss-key-no-params.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha1-salt20-using-pss-key-no-params.pem new file mode 100644 index 00000000..503cc2ed --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha1-salt20-using-pss-key-no-params.pem @@ -0,0 +1,48 @@ +This is the same test as rsa-pss-sha1-salt20.pem, except the public key's +algorithm identifier has been changed from rsaEncryption (1.2.840.113549.1.1.1) +to rsaPss (1.2.840.113549.1.1.10). + + + +-----BEGIN PUBLIC KEY----- +MIGdMAsGCSqGSIb3DQEBCgOBjQAwgYkCgYEApW5KDnAQF1iaUYfcfqhB0Vby7A42rVKkTf6x5h9 +62ZHYxRBW/+2xYrTA8oOhKoijlN/1JqtykcuzB86r/OCx39XNlQgJbVsri2311nHvY3fAkhyyPC +cKcOJZjm/4nRnxBazC0/DLNfKSgOE4a29kxO8i4eHyDQzoz/siSb2aITcCAwEAAQ== +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 157 cons: SEQUENCE + 3:d=1 hl=2 l= 11 cons: SEQUENCE + 5:d=2 hl=2 l= 9 prim: OBJECT :rsassaPss + 16:d=1 hl=3 l= 141 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MA0GCSqGSIb3DQEBCjAA +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 13 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :rsassaPss + 13:d=1 hl=2 l= 0 cons: SEQUENCE + + + +-----BEGIN DATA----- +zch9oiPXht87ReC7vHITJtHuKvgGzDFUdcxvDZxm4bYjcdRc4jkuGskoRMMQEC8Vag2NUsH0xAu +jqmUJV4bLdpdXplY7qVj+0LzJhOi1F6PV9RWyO4pB50qoZ2k/kN+wYabobfqu5kRywA5fIJRXKc +vr538Gznjgj0CY+6QfnWGTwDF+i2DUtghKy0LSnjgIo7w3LYXjMRcPy/fMctC3HClmSLOk0Q9BY +pXQgHqmJcqydE/Z6o/SI8QlNwKYKL0WvgJUbxMP0uM7k20mduCK7RtzMYt1CgFn0A== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBAJB0MI+1mOlwGyKUOI5S+XH6rCtgpRRa8YXfUoe17SiH5Xzn/UTchjTkB8jg5DYLwibz7CJ +/nZ5UY46NMfUFEhXfbrucL5V5qndZijj5FLW5wb2DxOL584Kg0Ko1Qv/uZZhKYBvGnrKN6yfcoS +yCwtTD9mzVAPH/K5lNik4wy7M8 +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha1-salt20-using-pss-key-with-null-params.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha1-salt20-using-pss-key-with-null-params.pem new file mode 100644 index 00000000..222614bc --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha1-salt20-using-pss-key-with-null-params.pem @@ -0,0 +1,50 @@ +This is the same test as rsa-pss-sha1-salt20.pem, except the public key's +algorithm identifier has been changed from rsaEncryption (1.2.840.113549.1.1.1) +to rsaPss (1.2.840.113549.1.1.10). Note that the PSS parameters have been +encoded as NULL which is incorrect. + + + +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBCgUAA4GNADCBiQKBgQClbkoOcBAXWJpRh9x+qEHRVvLsDjatUqRN/rH +mH3rZkdjFEFb/7bFitMDyg6EqiKOU3/Umq3KRy7MHzqv84LHf1c2VCAltWyuLbfXWce9jd8CSHL +I8Jwpw4lmOb/idGfEFrMLT8Ms18pKA4Thrb2TE7yLh4fINDOjP+yJJvZohNwIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 159 cons: SEQUENCE + 3:d=1 hl=2 l= 13 cons: SEQUENCE + 5:d=2 hl=2 l= 9 prim: OBJECT :rsassaPss + 16:d=2 hl=2 l= 0 prim: NULL + 18:d=1 hl=3 l= 141 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MA0GCSqGSIb3DQEBCjAA +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 13 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :rsassaPss + 13:d=1 hl=2 l= 0 cons: SEQUENCE + + + +-----BEGIN DATA----- +zch9oiPXht87ReC7vHITJtHuKvgGzDFUdcxvDZxm4bYjcdRc4jkuGskoRMMQEC8Vag2NUsH0xAu +jqmUJV4bLdpdXplY7qVj+0LzJhOi1F6PV9RWyO4pB50qoZ2k/kN+wYabobfqu5kRywA5fIJRXKc +vr538Gznjgj0CY+6QfnWGTwDF+i2DUtghKy0LSnjgIo7w3LYXjMRcPy/fMctC3HClmSLOk0Q9BY +pXQgHqmJcqydE/Z6o/SI8QlNwKYKL0WvgJUbxMP0uM7k20mduCK7RtzMYt1CgFn0A== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBAJB0MI+1mOlwGyKUOI5S+XH6rCtgpRRa8YXfUoe17SiH5Xzn/UTchjTkB8jg5DYLwibz7CJ +/nZ5UY46NMfUFEhXfbrucL5V5qndZijj5FLW5wb2DxOL584Kg0Ko1Qv/uZZhKYBvGnrKN6yfcoS +yCwtTD9mzVAPH/K5lNik4wy7M8 +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha1-salt20.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha1-salt20.pem new file mode 100644 index 00000000..e56f0fe0 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha1-salt20.pem @@ -0,0 +1,53 @@ +The key, message, and signature come from Example 1.1 of: +ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1-vec.zip (pss-vect.txt) + +(The algorithm DER was synthesized to match, and the signature enclosed in a BIT STRING). + +It uses an RSA key with modulus length of 1024 bits, PSS padding, +SHA-1 as the digest, MGF1 with SHA-1, and salt length of 20. + + + +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClbkoOcBAXWJpRh9x+qEHRVvLsDjatUqRN/rH +mH3rZkdjFEFb/7bFitMDyg6EqiKOU3/Umq3KRy7MHzqv84LHf1c2VCAltWyuLbfXWce9jd8CSHL +I8Jwpw4lmOb/idGfEFrMLT8Ms18pKA4Thrb2TE7yLh4fINDOjP+yJJvZohNwIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 159 cons: SEQUENCE + 3:d=1 hl=2 l= 13 cons: SEQUENCE + 5:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 16:d=2 hl=2 l= 0 prim: NULL + 18:d=1 hl=3 l= 141 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MA0GCSqGSIb3DQEBCjAA +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 13 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :rsassaPss + 13:d=1 hl=2 l= 0 cons: SEQUENCE + + + +-----BEGIN DATA----- +zch9oiPXht87ReC7vHITJtHuKvgGzDFUdcxvDZxm4bYjcdRc4jkuGskoRMMQEC8Vag2NUsH0xAu +jqmUJV4bLdpdXplY7qVj+0LzJhOi1F6PV9RWyO4pB50qoZ2k/kN+wYabobfqu5kRywA5fIJRXKc +vr538Gznjgj0CY+6QfnWGTwDF+i2DUtghKy0LSnjgIo7w3LYXjMRcPy/fMctC3HClmSLOk0Q9BY +pXQgHqmJcqydE/Z6o/SI8QlNwKYKL0WvgJUbxMP0uM7k20mduCK7RtzMYt1CgFn0A== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBAJB0MI+1mOlwGyKUOI5S+XH6rCtgpRRa8YXfUoe17SiH5Xzn/UTchjTkB8jg5DYLwibz7CJ +/nZ5UY46NMfUFEhXfbrucL5V5qndZijj5FLW5wb2DxOL584Kg0Ko1Qv/uZZhKYBvGnrKN6yfcoS +yCwtTD9mzVAPH/K5lNik4wy7M8 +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha1-wrong-salt.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha1-wrong-salt.pem new file mode 100644 index 00000000..57ec775f --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha1-wrong-salt.pem @@ -0,0 +1,51 @@ +Same as rsa-pss-sha1-wrong-salt.pem except the ALGORITHM has been changed to +have a salt of 23. When verified using this algorithm it will fail, however if +the default salt of 20 were used it would succeed. + + + +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClbkoOcBAXWJpRh9x+qEHRVvLsDjatUqRN/rH +mH3rZkdjFEFb/7bFitMDyg6EqiKOU3/Umq3KRy7MHzqv84LHf1c2VCAltWyuLbfXWce9jd8CSHL +I8Jwpw4lmOb/idGfEFrMLT8Ms18pKA4Thrb2TE7yLh4fINDOjP+yJJvZohNwIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 159 cons: SEQUENCE + 3:d=1 hl=2 l= 13 cons: SEQUENCE + 5:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 16:d=2 hl=2 l= 0 prim: NULL + 18:d=1 hl=3 l= 141 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MBIGCSqGSIb3DQEBCjAFogMCARc= +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 18 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :rsassaPss + 13:d=1 hl=2 l= 5 cons: SEQUENCE + 15:d=2 hl=2 l= 3 cons: cont [ 2 ] + 17:d=3 hl=2 l= 1 prim: INTEGER :17 + + + +-----BEGIN DATA----- +zch9oiPXht87ReC7vHITJtHuKvgGzDFUdcxvDZxm4bYjcdRc4jkuGskoRMMQEC8Vag2NUsH0xAu +jqmUJV4bLdpdXplY7qVj+0LzJhOi1F6PV9RWyO4pB50qoZ2k/kN+wYabobfqu5kRywA5fIJRXKc +vr538Gznjgj0CY+6QfnWGTwDF+i2DUtghKy0LSnjgIo7w3LYXjMRcPy/fMctC3HClmSLOk0Q9BY +pXQgHqmJcqydE/Z6o/SI8QlNwKYKL0WvgJUbxMP0uM7k20mduCK7RtzMYt1CgFn0A== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBAJB0MI+1mOlwGyKUOI5S+XH6rCtgpRRa8YXfUoe17SiH5Xzn/UTchjTkB8jg5DYLwibz7CJ +/nZ5UY46NMfUFEhXfbrucL5V5qndZijj5FLW5wb2DxOL584Kg0Ko1Qv/uZZhKYBvGnrKN6yfcoS +yCwtTD9mzVAPH/K5lNik4wy7M8 +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha256-mgf1-sha512-salt33.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha256-mgf1-sha512-salt33.pem new file mode 100644 index 00000000..f3b9dcb6 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha256-mgf1-sha512-salt33.pem @@ -0,0 +1,67 @@ +This test exercises using a different hash function parameter to the mask gen +function (SHA-256 for the hash, but SHA-512 for the MGF1 hash). + +This test data was constructed manually by calling signing functions from +OpenSSL code. + +It constructs an RSASSA-PSS signature using: + * Key with modulus 1024 bit + * Salt length 33 bytes + * Digest function of SHA-256 + * Mask gen function of MGF1 with SHA-512 + + + +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClbkoOcBAXWJpRh9x+qEHRVvLsDjatUqRN/rH +mH3rZkdjFEFb/7bFitMDyg6EqiKOU3/Umq3KRy7MHzqv84LHf1c2VCAltWyuLbfXWce9jd8CSHL +I8Jwpw4lmOb/idGfEFrMLT8Ms18pKA4Thrb2TE7yLh4fINDOjP+yJJvZohNwIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 159 cons: SEQUENCE + 3:d=1 hl=2 l= 13 cons: SEQUENCE + 5:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 16:d=2 hl=2 l= 0 prim: NULL + 18:d=1 hl=3 l= 141 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MEEGCSqGSIb3DQEBCjA0oA8wDQYJYIZIAWUDBAIBBQChHDAaBgkqhkiG9w0BAQgwDQYJYIZIAWU +DBAIDBQCiAwIBIQ== +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 65 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :rsassaPss + 13:d=1 hl=2 l= 52 cons: SEQUENCE + 15:d=2 hl=2 l= 15 cons: cont [ 0 ] + 17:d=3 hl=2 l= 13 cons: SEQUENCE + 19:d=4 hl=2 l= 9 prim: OBJECT :sha256 + 30:d=4 hl=2 l= 0 prim: NULL + 32:d=2 hl=2 l= 28 cons: cont [ 1 ] + 34:d=3 hl=2 l= 26 cons: SEQUENCE + 36:d=4 hl=2 l= 9 prim: OBJECT :mgf1 + 47:d=4 hl=2 l= 13 cons: SEQUENCE + 49:d=5 hl=2 l= 9 prim: OBJECT :sha512 + 60:d=5 hl=2 l= 0 prim: NULL + 62:d=2 hl=2 l= 3 cons: cont [ 2 ] + 64:d=3 hl=2 l= 1 prim: INTEGER :21 + + + +-----BEGIN DATA----- +VGVzdCBtZXNzYWdlIHRvIGJlIHNpZ25lZC4uLg== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBAFob0HSC5uuTqKu4J/lj+5bDa+Hhij4H3klWnvt6Yc+wwPza7/UC4lgGGyvZqD32RUEdt7v +Z14qqYNk53b5aj4C2gBMvLzV7Pay4mmQM4DSWa5JHMxTILqE3DDqihrbMcBw2q3XAsLcjeqLWQ9 +yp8tfnV21h98qsCLtErrxZWHRr +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha256-salt10-using-pss-key-with-params.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha256-salt10-using-pss-key-with-params.pem new file mode 100644 index 00000000..e0140b34 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha256-salt10-using-pss-key-with-params.pem @@ -0,0 +1,74 @@ +This is the same test as rsa-pss-sha256-salt10.pem except instead of specifying +the SPKI using rsaEncryption it is specified using rsaPss along with +parameters that match those of the signature algorithm. + + + +-----BEGIN PUBLIC KEY----- +MIHRMEEGCSqGSIb3DQEBCjA0oA8wDQYJYIZIAWUDBAIBBQChHDAaBgkqhkiG9w0BAQgwDQYJYIZ +IAWUDBAIBBQCiAwIBCgOBiwAwgYcCgYEAvkmbXn8GyD+gKT4xRlyOtrWK+SC65Sp7W5v+t6py2x +JkES6z/UMdMaKn5QlBVmkpSUoOiR7VYTkYtLUbDR+5d4Oyas99DzhM+zX00oJPXdOAYjomvxgLY +5YcYZ3NsgyuQG8i9uJ2yAo3JZSQz+tywacahPGEbTMId7o+MQHsnHsCARE= +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 209 cons: SEQUENCE + 3:d=1 hl=2 l= 65 cons: SEQUENCE + 5:d=2 hl=2 l= 9 prim: OBJECT :rsassaPss + 16:d=2 hl=2 l= 52 cons: SEQUENCE + 18:d=3 hl=2 l= 15 cons: cont [ 0 ] + 20:d=4 hl=2 l= 13 cons: SEQUENCE + 22:d=5 hl=2 l= 9 prim: OBJECT :sha256 + 33:d=5 hl=2 l= 0 prim: NULL + 35:d=3 hl=2 l= 28 cons: cont [ 1 ] + 37:d=4 hl=2 l= 26 cons: SEQUENCE + 39:d=5 hl=2 l= 9 prim: OBJECT :mgf1 + 50:d=5 hl=2 l= 13 cons: SEQUENCE + 52:d=6 hl=2 l= 9 prim: OBJECT :sha256 + 63:d=6 hl=2 l= 0 prim: NULL + 65:d=3 hl=2 l= 3 cons: cont [ 2 ] + 67:d=4 hl=2 l= 1 prim: INTEGER :0A + 70:d=1 hl=3 l= 139 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MEEGCSqGSIb3DQEBCjA0oA8wDQYJYIZIAWUDBAIBBQChHDAaBgkqhkiG9w0BAQgwDQYJYIZIAWU +DBAIBBQCiAwIBCg== +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 65 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :rsassaPss + 13:d=1 hl=2 l= 52 cons: SEQUENCE + 15:d=2 hl=2 l= 15 cons: cont [ 0 ] + 17:d=3 hl=2 l= 13 cons: SEQUENCE + 19:d=4 hl=2 l= 9 prim: OBJECT :sha256 + 30:d=4 hl=2 l= 0 prim: NULL + 32:d=2 hl=2 l= 28 cons: cont [ 1 ] + 34:d=3 hl=2 l= 26 cons: SEQUENCE + 36:d=4 hl=2 l= 9 prim: OBJECT :mgf1 + 47:d=4 hl=2 l= 13 cons: SEQUENCE + 49:d=5 hl=2 l= 9 prim: OBJECT :sha256 + 60:d=5 hl=2 l= 0 prim: NULL + 62:d=2 hl=2 l= 3 cons: cont [ 2 ] + 64:d=3 hl=2 l= 1 prim: INTEGER :0A + + + +-----BEGIN DATA----- +x/UnD8pyX5vRn1GajXzKPMXAeQJAKfO65RD5sCFA/iOJCOT2wY8HqJxofIaEZpsfHbK6+SUaPIK +frMtJMIThbsnijViGgHSl1iIWZ91uUo0W/iyfPbTPr2xNzoyEOa84zqqqnOLsrnvI9KWlXjv5bf +nNV1xPnLMnlRuM3+QIcWg= +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBABHhafL9QLB2Qbl2iiqxmWX7bCfxD88DI/zG0S608cBrMw3aoepQRAevop3p6+A3T+nR59D +/vV/Bzzo0RuQUVBXSqyT3ibNGTFxDola7wdaSz38EgB2sW7QBpKA6t9VyioYMGeGk3Hl8pULIID +zsLmAesMUfVn8u2gIrC5693u76 +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha256-salt10-using-pss-key-with-wrong-params.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha256-salt10-using-pss-key-with-wrong-params.pem new file mode 100644 index 00000000..646ac1fb --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha256-salt10-using-pss-key-with-wrong-params.pem @@ -0,0 +1,74 @@ +This is the same test as rsa-pss-sha256-salt10-using-pss-key-with-params.pem +except the hash in the PSS key's parameters has been changed from SHA-256 to +SHA-384. + + + +-----BEGIN PUBLIC KEY----- +MIHRMEEGCSqGSIb3DQEBCjA0oA8wDQYJYIZIAWUDBAICBQChHDAaBgkqhkiG9w0BAQgwDQYJYIZ +IAWUDBAIBBQCiAwIBCgOBiwAwgYcCgYEAvkmbXn8GyD+gKT4xRlyOtrWK+SC65Sp7W5v+t6py2x +JkES6z/UMdMaKn5QlBVmkpSUoOiR7VYTkYtLUbDR+5d4Oyas99DzhM+zX00oJPXdOAYjomvxgLY +5YcYZ3NsgyuQG8i9uJ2yAo3JZSQz+tywacahPGEbTMId7o+MQHsnHsCARE= +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 209 cons: SEQUENCE + 3:d=1 hl=2 l= 65 cons: SEQUENCE + 5:d=2 hl=2 l= 9 prim: OBJECT :rsassaPss + 16:d=2 hl=2 l= 52 cons: SEQUENCE + 18:d=3 hl=2 l= 15 cons: cont [ 0 ] + 20:d=4 hl=2 l= 13 cons: SEQUENCE + 22:d=5 hl=2 l= 9 prim: OBJECT :sha384 + 33:d=5 hl=2 l= 0 prim: NULL + 35:d=3 hl=2 l= 28 cons: cont [ 1 ] + 37:d=4 hl=2 l= 26 cons: SEQUENCE + 39:d=5 hl=2 l= 9 prim: OBJECT :mgf1 + 50:d=5 hl=2 l= 13 cons: SEQUENCE + 52:d=6 hl=2 l= 9 prim: OBJECT :sha256 + 63:d=6 hl=2 l= 0 prim: NULL + 65:d=3 hl=2 l= 3 cons: cont [ 2 ] + 67:d=4 hl=2 l= 1 prim: INTEGER :0A + 70:d=1 hl=3 l= 139 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MEEGCSqGSIb3DQEBCjA0oA8wDQYJYIZIAWUDBAIBBQChHDAaBgkqhkiG9w0BAQgwDQYJYIZIAWU +DBAIBBQCiAwIBCg== +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 65 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :rsassaPss + 13:d=1 hl=2 l= 52 cons: SEQUENCE + 15:d=2 hl=2 l= 15 cons: cont [ 0 ] + 17:d=3 hl=2 l= 13 cons: SEQUENCE + 19:d=4 hl=2 l= 9 prim: OBJECT :sha256 + 30:d=4 hl=2 l= 0 prim: NULL + 32:d=2 hl=2 l= 28 cons: cont [ 1 ] + 34:d=3 hl=2 l= 26 cons: SEQUENCE + 36:d=4 hl=2 l= 9 prim: OBJECT :mgf1 + 47:d=4 hl=2 l= 13 cons: SEQUENCE + 49:d=5 hl=2 l= 9 prim: OBJECT :sha256 + 60:d=5 hl=2 l= 0 prim: NULL + 62:d=2 hl=2 l= 3 cons: cont [ 2 ] + 64:d=3 hl=2 l= 1 prim: INTEGER :0A + + + +-----BEGIN DATA----- +x/UnD8pyX5vRn1GajXzKPMXAeQJAKfO65RD5sCFA/iOJCOT2wY8HqJxofIaEZpsfHbK6+SUaPIK +frMtJMIThbsnijViGgHSl1iIWZ91uUo0W/iyfPbTPr2xNzoyEOa84zqqqnOLsrnvI9KWlXjv5bf +nNV1xPnLMnlRuM3+QIcWg= +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBABHhafL9QLB2Qbl2iiqxmWX7bCfxD88DI/zG0S608cBrMw3aoepQRAevop3p6+A3T+nR59D +/vV/Bzzo0RuQUVBXSqyT3ibNGTFxDola7wdaSz38EgB2sW7QBpKA6t9VyioYMGeGk3Hl8pULIID +zsLmAesMUfVn8u2gIrC5693u76 +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha256-salt10.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha256-salt10.pem new file mode 100644 index 00000000..fc37f41d --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-pss-sha256-salt10.pem @@ -0,0 +1,65 @@ +The key, message, and signature come from: +http://csrc.nist.gov/groups/STM/cavp/documents/dss/186-2rsatestvectors.zip (SigVerPSS_186-3.rsp) + +(The algorithm DER was synthesized to match, and the signature wrapped in a BIT STRING). + +It uses an RSA key with modulus length of 1024 bits, PSS padding, +SHA-256 as the digest, MGF1 with SHA-256, and salt length of 10. + + + +-----BEGIN PUBLIC KEY----- +MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC+SZtefwbIP6ApPjFGXI62tYr5ILrlKntbm/6 +3qnLbEmQRLrP9Qx0xoqflCUFWaSlJSg6JHtVhORi0tRsNH7l3g7Jqz30POEz7NfTSgk9d04BiOi +a/GAtjlhxhnc2yDK5AbyL24nbICjcllJDP63LBpxqE8YRtMwh3uj4xAeycewIBEQ== +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=3 l= 157 cons: SEQUENCE + 3:d=1 hl=2 l= 13 cons: SEQUENCE + 5:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 16:d=2 hl=2 l= 0 prim: NULL + 18:d=1 hl=3 l= 139 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MEEGCSqGSIb3DQEBCjA0oA8wDQYJYIZIAWUDBAIBBQChHDAaBgkqhkiG9w0BAQgwDQYJYIZIAWU +DBAIBBQCiAwIBCg== +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 65 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :rsassaPss + 13:d=1 hl=2 l= 52 cons: SEQUENCE + 15:d=2 hl=2 l= 15 cons: cont [ 0 ] + 17:d=3 hl=2 l= 13 cons: SEQUENCE + 19:d=4 hl=2 l= 9 prim: OBJECT :sha256 + 30:d=4 hl=2 l= 0 prim: NULL + 32:d=2 hl=2 l= 28 cons: cont [ 1 ] + 34:d=3 hl=2 l= 26 cons: SEQUENCE + 36:d=4 hl=2 l= 9 prim: OBJECT :mgf1 + 47:d=4 hl=2 l= 13 cons: SEQUENCE + 49:d=5 hl=2 l= 9 prim: OBJECT :sha256 + 60:d=5 hl=2 l= 0 prim: NULL + 62:d=2 hl=2 l= 3 cons: cont [ 2 ] + 64:d=3 hl=2 l= 1 prim: INTEGER :0A + + + +-----BEGIN DATA----- +x/UnD8pyX5vRn1GajXzKPMXAeQJAKfO65RD5sCFA/iOJCOT2wY8HqJxofIaEZpsfHbK6+SUaPIK +frMtJMIThbsnijViGgHSl1iIWZ91uUo0W/iyfPbTPr2xNzoyEOa84zqqqnOLsrnvI9KWlXjv5bf +nNV1xPnLMnlRuM3+QIcWg= +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBABHhafL9QLB2Qbl2iiqxmWX7bCfxD88DI/zG0S608cBrMw3aoepQRAevop3p6+A3T+nR59D +/vV/Bzzo0RuQUVBXSqyT3ibNGTFxDola7wdaSz38EgB2sW7QBpKA6t9VyioYMGeGk3Hl8pULIID +zsLmAesMUfVn8u2gIrC5693u76 +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-using-ec-key.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-using-ec-key.pem new file mode 100644 index 00000000..b9a3777f --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa-using-ec-key.pem @@ -0,0 +1,52 @@ +This test specifies an RSA PKCS#1 v1.5 signature algorithm (and a valid RSA +signature), HOWEVER it provides an EC key. Verification should fail. + + + +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnLDPaTA9r8dh1ORoe07PA55tNKuWSvgIENjVWKS +o1vctUSM6F4iSCobuCKGWLHnvoxf7eHnil9rSFG25lfoceA== +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=2 l= 89 cons: SEQUENCE + 2:d=1 hl=2 l= 19 cons: SEQUENCE + 4:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey + 13:d=2 hl=2 l= 8 prim: OBJECT :prime256v1 + 23:d=1 hl=2 l= 66 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MA0GCSqGSIb3DQEBCwUA +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 13 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :sha256WithRSAEncryption + 13:d=1 hl=2 l= 0 prim: NULL + + + +-----BEGIN DATA----- +MIIB46ADAgECAgkA3l4tFOVii0UwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCQVUxEzARBgN +VBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEPMA0GA1 +UEAwwGTXkga2V5MB4XDTE1MDcwMjE3MDYzOVoXDTE2MDcwMTE3MDYzOVowVjELMAkGA1UEBhMCQ +VUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0 +ZDEPMA0GA1UEAwwGTXkga2V5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqR+B2Mj1irNp +1JnY2zQIQRQPz7ybs6mUjHT3hf5APyaig2u6fBPThqxssgg0YviqIj/70hVK/JXcqP1zgR5AhsA +0agnwAjfB/ow4EH+3HEYV52qpxN98pUxC+1l2hgVtn8xCS/JGyjK+6dv+lZw3ixJoX2RjVtdJ4/ +cn318EhhQIDAQABo1AwTjAdBgNVHQ4EFgQUzQBVKTEknyLndWd2HTsBdTKvyikwHwYDVR0jBBgw +FoAUzQBVKTEknyLndWd2HTsBdTKvyikwDAYDVR0TBAUwAwEB/w== +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4GBADrHSmFSJw/Gv7hs5PNzpaJwAri/sitarIZfzN/SjR+n8L8yeTEoiDb1+BkxlFvXvPHTaOK +oO3WlslNNOxh1W5/JkYYGOUkCcyIjnln6qS560imcr3VNjomT/M8M2Iss+rJiKau1TRuaP7H8i6 ++Gqf3saGdr8/LnvFAdNQvkalQt +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=3 l= 129 prim: BIT STRING diff --git a/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa2048-pkcs1-sha512.pem b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa2048-pkcs1-sha512.pem new file mode 100644 index 00000000..342a31b8 --- /dev/null +++ b/vendor/webpki/third-party/chromium/data/verify_signed_data/rsa2048-pkcs1-sha512.pem @@ -0,0 +1,93 @@ +This test data was produced by creating a self-signed RSA cert using OpenSSL, +and then extracting the relevant fields. + +It uses RSA PKCS#1 v1.5 with SHA-512 and a 2048-bit key. + +(1) Generate self-signed certificate + + openssl genrsa -out rsa_key.pem 2048 + openssl req -new -key rsa_key.pem -x509 -nodes -days 365 -sha512 -out cert.pem + +(2) Extract public key + + openssl x509 -in cert.pem -pubkey -noout > pubkey.pem + cat pubkey.pem + +(3) Extract signed data (tbsCertificate) + + openssl asn1parse -in cert.pem -out tbs -noout -strparse 4 + base64 tbs + +(4) Extract signature algorithm + + # Find the offset of the signature algorithm near the end (589 in this case) + openssl asn1parse -in cert.pem + + openssl asn1parse -in cert.pem -out alg -noout -strparse 589 + base64 alg + +(5) Extract the signature + + # Find the final offset of BIT STRING (506 in this case) + openssl asn1parse -in cert.pem + + openssl asn1parse -in cert.pem -out sig -noout -strparse 506 + base64 sig + + + +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzcu2shJRrXFAwMkf30y2AY1zIg9VF/h +egYcejzdR2AzUb8vU2TXld2i8pp44l+DrvtqmzS7G+yxx3uOx+zsoqBaUT0c9HfkbE+IRmcLkQF +vYpSpm6Eu8OS14CSmEtiR91Et8LR0+bd0Gn3pgmb+epFJBaBPeDSiI/smqKCs7yP04+tS4Q4r47 +G04LhSp4/hmqH32b4Gcm9nsihHV9FfPfVdxDQUEJp3AgyBPwhPZEAyhoQS73TjjxXHqJRSz37Sl +ueMVPuNncqbT4nAMKz25J1CtRlQh21uZzfY2QRP3m6rAZquQUos1febC6A7qmhQljWKKmXtfVY+ +fAamstdHrWwIDAQAB +-----END PUBLIC KEY----- + +$ openssl asn1parse -i < [PUBLIC KEY] + 0:d=0 hl=4 l= 290 cons: SEQUENCE + 4:d=1 hl=2 l= 13 cons: SEQUENCE + 6:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 17:d=2 hl=2 l= 0 prim: NULL + 19:d=1 hl=4 l= 271 prim: BIT STRING + + + +-----BEGIN ALGORITHM----- +MA0GCSqGSIb3DQEBDQUA +-----END ALGORITHM----- + +$ openssl asn1parse -i < [ALGORITHM] + 0:d=0 hl=2 l= 13 cons: SEQUENCE + 2:d=1 hl=2 l= 9 prim: OBJECT :sha512WithRSAEncryption + 13:d=1 hl=2 l= 0 prim: NULL + + + +-----BEGIN DATA----- +MIICRaADAgECAgkA7jWRLkwHvHswDQYJKoZIhvcNAQENBQAwRTELMAkGA1UEBhMCQVUxEzARBgN +VBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0xNT +A3MjgwMjIyMzFaFw0xNjA3MjcwMjIyMzFaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lL +VN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDNy7ayElGtcUDAyR/fTLYBjXMiD1UX+F6Bhx6PN1HYDNRvy9TZNeV +3aLymnjiX4Ou+2qbNLsb7LHHe47H7OyioFpRPRz0d+RsT4hGZwuRAW9ilKmboS7w5LXgJKYS2JH +3US3wtHT5t3QafemCZv56kUkFoE94NKIj+yaooKzvI/Tj61LhDivjsbTguFKnj+GaoffZvgZyb2 +eyKEdX0V899V3ENBQQmncCDIE/CE9kQDKGhBLvdOOPFceolFLPftKW54xU+42dyptPicAwrPbkn +UK1GVCHbW5nN9jZBE/ebqsBmq5BSizV95sLoDuqaFCWNYoqZe19Vj58Bqay10etbAgMBAAGjUDB +OMB0GA1UdDgQWBBRsCPajkEscZM6SpLbNTa/7dY5azzAfBgNVHSMEGDAWgBRsCPajkEscZM6SpL +bNTa/7dY5azzAMBgNVHRMEBTADAQH/ +-----END DATA----- + + + +-----BEGIN SIGNATURE----- +A4IBAQAhKSNq+X/CfzhtNsMo6MJpTBjJBV5fhHerIZr6e3ozCTBCR29vYsVnJ4/6i5lL1pNeOhM +ldthnuSlMzTS1Zme1OqRWB3U8QmwCFwhDxW/i4fdT8kxDAmELNp4z0GcXbe27V895PE0R/m8P47 +B6xbra+SQlEMW12K1EndUqrO6vgLbobV14mveWdgc0KIOnDKgsTHV8NTV1w3qtp1ujfvizYfBZu +yyMOA1yZPDpREZtClro7lufwDQ7+LgSdtNLMDAMzapfIjAEPVNVLmJzMgzaHqMsZM8gP8vWAdfc +R4mCmWXVotrM6d1rjJGdRADAONYCC4/+d1IMkVGoVfpaej6I +-----END SIGNATURE----- + +$ openssl asn1parse -i < [SIGNATURE] + 0:d=0 hl=4 l= 257 prim: BIT STRING